diff --git a/.obsidian/plugins/datacore/main.js b/.obsidian/plugins/datacore/main.js index 2ebc249..37069c5 100644 --- a/.obsidian/plugins/datacore/main.js +++ b/.obsidian/plugins/datacore/main.js @@ -5,6 +5,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = (fn2, res) => function __init() { + return fn2 && (res = (0, fn2[__getOwnPropNames(fn2)[0]])(fn2 = 0)), res; +}; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; @@ -30,640 +33,13940 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -// node_modules/parsimmon/build/parsimmon.umd.min.js -var require_parsimmon_umd_min = __commonJS({ - "node_modules/parsimmon/build/parsimmon.umd.min.js"(exports, module2) { - !function(n3, t4) { - "object" == typeof exports && "object" == typeof module2 ? module2.exports = t4() : "function" == typeof define && define.amd ? define([], t4) : "object" == typeof exports ? exports.Parsimmon = t4() : n3.Parsimmon = t4(); - }("undefined" != typeof self ? self : exports, function() { - return function(n3) { - var t4 = {}; - function r3(e3) { - if (t4[e3]) - return t4[e3].exports; - var u4 = t4[e3] = { i: e3, l: false, exports: {} }; - return n3[e3].call(u4.exports, u4, u4.exports, r3), u4.l = true, u4.exports; +// node_modules/parsimmon/src/parsimmon.js +var require_parsimmon = __commonJS({ + "node_modules/parsimmon/src/parsimmon.js"(exports2, module2) { + "use strict"; + function Parsimmon2(action) { + if (!(this instanceof Parsimmon2)) { + return new Parsimmon2(action); + } + this._ = action; + } + var _3 = Parsimmon2.prototype; + function times(n3, f4) { + var i4 = 0; + for (i4; i4 < n3; i4++) { + f4(i4); + } + } + function forEach(f4, arr) { + times(arr.length, function(i4) { + f4(arr[i4], i4, arr); + }); + } + function reduce2(f4, seed, arr) { + forEach(function(elem, i4, arr2) { + seed = f4(seed, elem, i4, arr2); + }, arr); + return seed; + } + function map(f4, arr) { + return reduce2( + function(acc, elem, i4, a4) { + return acc.concat([f4(elem, i4, a4)]); + }, + [], + arr + ); + } + function lshiftBuffer(input) { + var asTwoBytes = reduce2( + function(a4, v3, i4, b3) { + return a4.concat( + i4 === b3.length - 1 ? Buffer.from([v3, 0]).readUInt16BE(0) : b3.readUInt16BE(i4) + ); + }, + [], + input + ); + return Buffer.from( + map(function(x4) { + return (x4 << 1 & 65535) >> 8; + }, asTwoBytes) + ); + } + function consumeBitsFromBuffer(n3, input) { + var state = { v: 0, buf: input }; + times(n3, function() { + state = { + v: state.v << 1 | bitPeekBuffer(state.buf), + buf: lshiftBuffer(state.buf) + }; + }); + return state; + } + function bitPeekBuffer(input) { + return input[0] >> 7; + } + function sum(numArr) { + return reduce2( + function(x4, y4) { + return x4 + y4; + }, + 0, + numArr + ); + } + function find(pred, arr) { + return reduce2( + function(found, elem) { + return found || (pred(elem) ? elem : found); + }, + null, + arr + ); + } + function bufferExists() { + return typeof Buffer !== "undefined"; + } + function setExists() { + if (Parsimmon2._supportsSet !== void 0) { + return Parsimmon2._supportsSet; + } + var exists = typeof Set !== "undefined"; + Parsimmon2._supportsSet = exists; + return exists; + } + function ensureBuffer() { + if (!bufferExists()) { + throw new Error( + "Buffer global does not exist; please use webpack if you need to parse Buffers in the browser." + ); + } + } + function bitSeq(alignments) { + ensureBuffer(); + var totalBits = sum(alignments); + if (totalBits % 8 !== 0) { + throw new Error( + "The bits [" + alignments.join(", ") + "] add up to " + totalBits + " which is not an even number of bytes; the total should be divisible by 8" + ); + } + var bytes = totalBits / 8; + var tooBigRange = find(function(x4) { + return x4 > 48; + }, alignments); + if (tooBigRange) { + throw new Error( + tooBigRange + " bit range requested exceeds 48 bit (6 byte) Number max." + ); + } + return new Parsimmon2(function(input, i4) { + var newPos = bytes + i4; + if (newPos > input.length) { + return makeFailure(i4, bytes.toString() + " bytes"); } - return r3.m = n3, r3.c = t4, r3.d = function(n4, t5, e3) { - r3.o(n4, t5) || Object.defineProperty(n4, t5, { configurable: false, enumerable: true, get: e3 }); - }, r3.r = function(n4) { - Object.defineProperty(n4, "__esModule", { value: true }); - }, r3.n = function(n4) { - var t5 = n4 && n4.__esModule ? function() { - return n4.default; - } : function() { - return n4; - }; - return r3.d(t5, "a", t5), t5; - }, r3.o = function(n4, t5) { - return Object.prototype.hasOwnProperty.call(n4, t5); - }, r3.p = "", r3(r3.s = 0); - }([function(n3, t4, r3) { - "use strict"; - function e3(n4) { - if (!(this instanceof e3)) - return new e3(n4); - this._ = n4; - } - var u4 = e3.prototype; - function o3(n4, t5) { - for (var r4 = 0; r4 < n4; r4++) - t5(r4); - } - function i4(n4, t5, r4) { - return function(n5, t6) { - o3(t6.length, function(r5) { - n5(t6[r5], r5, t6); - }); - }(function(r5, e4, u5) { - t5 = n4(t5, r5, e4, u5); - }, r4), t5; - } - function a3(n4, t5) { - return i4(function(t6, r4, e4, u5) { - return t6.concat([n4(r4, e4, u5)]); - }, [], t5); - } - function f4(n4, t5) { - var r4 = { v: 0, buf: t5 }; - return o3(n4, function() { - var n5; - r4 = { v: r4.v << 1 | (n5 = r4.buf, n5[0] >> 7), buf: function(n6) { - var t6 = i4(function(n7, t7, r5, e4) { - return n7.concat(r5 === e4.length - 1 ? Buffer.from([t7, 0]).readUInt16BE(0) : e4.readUInt16BE(r5)); - }, [], n6); - return Buffer.from(a3(function(n7) { - return (n7 << 1 & 65535) >> 8; - }, t6)); - }(r4.buf) }; - }), r4; - } - function c3() { - return "undefined" != typeof Buffer; - } - function s4() { - if (!c3()) - throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser."); - } - function l4(n4) { - s4(); - var t5 = i4(function(n5, t6) { - return n5 + t6; - }, 0, n4); - if (t5 % 8 != 0) - throw new Error("The bits [" + n4.join(", ") + "] add up to " + t5 + " which is not an even number of bytes; the total should be divisible by 8"); - var r4, u5 = t5 / 8, o4 = (r4 = function(n5) { - return n5 > 48; - }, i4(function(n5, t6) { - return n5 || (r4(t6) ? t6 : n5); - }, null, n4)); - if (o4) - throw new Error(o4 + " bit range requested exceeds 48 bit (6 byte) Number max."); - return new e3(function(t6, r5) { - var e4 = u5 + r5; - return e4 > t6.length ? x4(r5, u5.toString() + " bytes") : b3(e4, i4(function(n5, t7) { - var r6 = f4(t7, n5.buf); - return { coll: n5.coll.concat(r6.v), buf: r6.buf }; - }, { coll: [], buf: t6.slice(r5, e4) }, n4).coll); - }); - } - function h3(n4, t5) { - return new e3(function(r4, e4) { - return s4(), e4 + t5 > r4.length ? x4(e4, t5 + " bytes for " + n4) : b3(e4 + t5, r4.slice(e4, e4 + t5)); - }); - } - function p4(n4, t5) { - if ("number" != typeof (r4 = t5) || Math.floor(r4) !== r4 || t5 < 0 || t5 > 6) - throw new Error(n4 + " requires integer length in range [0, 6]."); - var r4; - } - function d4(n4) { - return p4("uintBE", n4), h3("uintBE(" + n4 + ")", n4).map(function(t5) { - return t5.readUIntBE(0, n4); - }); - } - function v3(n4) { - return p4("uintLE", n4), h3("uintLE(" + n4 + ")", n4).map(function(t5) { - return t5.readUIntLE(0, n4); - }); - } - function g4(n4) { - return p4("intBE", n4), h3("intBE(" + n4 + ")", n4).map(function(t5) { - return t5.readIntBE(0, n4); - }); - } - function m3(n4) { - return p4("intLE", n4), h3("intLE(" + n4 + ")", n4).map(function(t5) { - return t5.readIntLE(0, n4); - }); - } - function y3(n4) { - return n4 instanceof e3; - } - function E3(n4) { - return "[object Array]" === {}.toString.call(n4); - } - function w6(n4) { - return c3() && Buffer.isBuffer(n4); - } - function b3(n4, t5) { - return { status: true, index: n4, value: t5, furthest: -1, expected: [] }; - } - function x4(n4, t5) { - return E3(t5) || (t5 = [t5]), { status: false, index: -1, value: null, furthest: n4, expected: t5 }; - } - function B4(n4, t5) { - if (!t5) - return n4; - if (n4.furthest > t5.furthest) - return n4; - var r4 = n4.furthest === t5.furthest ? function(n5, t6) { - if (function() { - if (void 0 !== e3._supportsSet) - return e3._supportsSet; - var n6 = "undefined" != typeof Set; - return e3._supportsSet = n6, n6; - }() && Array.from) { - for (var r5 = new Set(n5), u5 = 0; u5 < t6.length; u5++) - r5.add(t6[u5]); - var o4 = Array.from(r5); - return o4.sort(), o4; - } - for (var i5 = {}, a4 = 0; a4 < n5.length; a4++) - i5[n5[a4]] = true; - for (var f5 = 0; f5 < t6.length; f5++) - i5[t6[f5]] = true; - var c4 = []; - for (var s5 in i5) - ({}).hasOwnProperty.call(i5, s5) && c4.push(s5); - return c4.sort(), c4; - }(n4.expected, t5.expected) : t5.expected; - return { status: n4.status, index: n4.index, value: n4.value, furthest: t5.furthest, expected: r4 }; - } - var j4 = {}; - function S2(n4, t5) { - if (w6(n4)) - return { offset: t5, line: -1, column: -1 }; - n4 in j4 || (j4[n4] = {}); - for (var r4 = j4[n4], e4 = 0, u5 = 0, o4 = 0, i5 = t5; i5 >= 0; ) { - if (i5 in r4) { - e4 = r4[i5].line, 0 === o4 && (o4 = r4[i5].lineStart); - break; - } - ("\n" === n4.charAt(i5) || "\r" === n4.charAt(i5) && "\n" !== n4.charAt(i5 + 1)) && (u5++, 0 === o4 && (o4 = i5 + 1)), i5--; + return makeSuccess( + newPos, + reduce2( + function(acc, bits) { + var state = consumeBitsFromBuffer(bits, acc.buf); + return { + coll: acc.coll.concat(state.v), + buf: state.buf + }; + }, + { coll: [], buf: input.slice(i4, newPos) }, + alignments + ).coll + ); + }); + } + function bitSeqObj(namedAlignments) { + ensureBuffer(); + var seenKeys = {}; + var totalKeys = 0; + var fullAlignments = map(function(item) { + if (isArray2(item)) { + var pair = item; + if (pair.length !== 2) { + throw new Error( + "[" + pair.join(", ") + "] should be length 2, got length " + pair.length + ); } - var a4 = e4 + u5, f5 = t5 - o4; - return r4[t5] = { line: a4, lineStart: o4 }, { offset: t5, line: a4 + 1, column: f5 + 1 }; + assertString(pair[0]); + assertNumber(pair[1]); + if (Object.prototype.hasOwnProperty.call(seenKeys, pair[0])) { + throw new Error("duplicate key in bitSeqObj: " + pair[0]); + } + seenKeys[pair[0]] = true; + totalKeys++; + return pair; + } else { + assertNumber(item); + return [null, item]; } - function _3(n4) { - if (!y3(n4)) - throw new Error("not a parser: " + n4); + }, namedAlignments); + if (totalKeys < 1) { + throw new Error( + "bitSeqObj expects at least one named pair, got [" + namedAlignments.join(", ") + "]" + ); + } + var namesOnly = map(function(pair) { + return pair[0]; + }, fullAlignments); + var alignmentsOnly = map(function(pair) { + return pair[1]; + }, fullAlignments); + return bitSeq(alignmentsOnly).map(function(parsed) { + var namedParsed = map(function(name, i4) { + return [name, parsed[i4]]; + }, namesOnly); + return reduce2( + function(obj, kv) { + if (kv[0] !== null) { + obj[kv[0]] = kv[1]; + } + return obj; + }, + {}, + namedParsed + ); + }); + } + function parseBufferFor(other, length2) { + return new Parsimmon2(function(input, i4) { + ensureBuffer(); + if (i4 + length2 > input.length) { + return makeFailure(i4, length2 + " bytes for " + other); } - function L3(n4, t5) { - return "string" == typeof n4 ? n4.charAt(t5) : n4[t5]; + return makeSuccess(i4 + length2, input.slice(i4, i4 + length2)); + }); + } + function parseBuffer(length2) { + return parseBufferFor("buffer", length2).map(function(unsafe) { + return Buffer.from(unsafe); + }); + } + function encodedString(encoding, length2) { + return parseBufferFor("string", length2).map(function(buff) { + return buff.toString(encoding); + }); + } + function isInteger2(value) { + return typeof value === "number" && Math.floor(value) === value; + } + function assertValidIntegerByteLengthFor(who, length2) { + if (!isInteger2(length2) || length2 < 0 || length2 > 6) { + throw new Error(who + " requires integer length in range [0, 6]."); + } + } + function uintBE(length2) { + assertValidIntegerByteLengthFor("uintBE", length2); + return parseBufferFor("uintBE(" + length2 + ")", length2).map(function(buff) { + return buff.readUIntBE(0, length2); + }); + } + function uintLE(length2) { + assertValidIntegerByteLengthFor("uintLE", length2); + return parseBufferFor("uintLE(" + length2 + ")", length2).map(function(buff) { + return buff.readUIntLE(0, length2); + }); + } + function intBE(length2) { + assertValidIntegerByteLengthFor("intBE", length2); + return parseBufferFor("intBE(" + length2 + ")", length2).map(function(buff) { + return buff.readIntBE(0, length2); + }); + } + function intLE(length2) { + assertValidIntegerByteLengthFor("intLE", length2); + return parseBufferFor("intLE(" + length2 + ")", length2).map(function(buff) { + return buff.readIntLE(0, length2); + }); + } + function floatBE() { + return parseBufferFor("floatBE", 4).map(function(buff) { + return buff.readFloatBE(0); + }); + } + function floatLE() { + return parseBufferFor("floatLE", 4).map(function(buff) { + return buff.readFloatLE(0); + }); + } + function doubleBE() { + return parseBufferFor("doubleBE", 8).map(function(buff) { + return buff.readDoubleBE(0); + }); + } + function doubleLE() { + return parseBufferFor("doubleLE", 8).map(function(buff) { + return buff.readDoubleLE(0); + }); + } + function toArray2(arrLike) { + return Array.prototype.slice.call(arrLike); + } + function isParser(obj) { + return obj instanceof Parsimmon2; + } + function isArray2(x4) { + return {}.toString.call(x4) === "[object Array]"; + } + function isBuffer(x4) { + return bufferExists() && Buffer.isBuffer(x4); + } + function makeSuccess(index2, value) { + return { + status: true, + index: index2, + value, + furthest: -1, + expected: [] + }; + } + function makeFailure(index2, expected) { + if (!isArray2(expected)) { + expected = [expected]; + } + return { + status: false, + index: -1, + value: null, + furthest: index2, + expected + }; + } + function mergeReplies(result, last) { + if (!last) { + return result; + } + if (result.furthest > last.furthest) { + return result; + } + var expected = result.furthest === last.furthest ? union(result.expected, last.expected) : last.expected; + return { + status: result.status, + index: result.index, + value: result.value, + furthest: last.furthest, + expected + }; + } + var lineColumnIndex = {}; + function makeLineColumnIndex(input, i4) { + if (isBuffer(input)) { + return { + offset: i4, + line: -1, + column: -1 + }; + } + if (!(input in lineColumnIndex)) { + lineColumnIndex[input] = {}; + } + var inputIndex = lineColumnIndex[input]; + var prevLine = 0; + var newLines = 0; + var lineStart = 0; + var j4 = i4; + while (j4 >= 0) { + if (j4 in inputIndex) { + prevLine = inputIndex[j4].line; + if (lineStart === 0) { + lineStart = inputIndex[j4].lineStart; + } + break; } - function O3(n4) { - if ("number" != typeof n4) - throw new Error("not a number: " + n4); + if ( + // Unix LF (\n) or Windows CRLF (\r\n) line ending + input.charAt(j4) === "\n" || // Old Mac CR (\r) line ending + input.charAt(j4) === "\r" && input.charAt(j4 + 1) !== "\n" + ) { + newLines++; + if (lineStart === 0) { + lineStart = j4 + 1; + } } - function k4(n4) { - if ("function" != typeof n4) - throw new Error("not a function: " + n4); + j4--; + } + var lineWeAreUpTo = prevLine + newLines; + var columnWeAreUpTo = i4 - lineStart; + inputIndex[i4] = { line: lineWeAreUpTo, lineStart }; + return { + offset: i4, + line: lineWeAreUpTo + 1, + column: columnWeAreUpTo + 1 + }; + } + function union(xs, ys) { + if (setExists() && Array.from) { + var set = new Set(xs); + for (var y4 = 0; y4 < ys.length; y4++) { + set.add(ys[y4]); } - function P7(n4) { - if ("string" != typeof n4) - throw new Error("not a string: " + n4); + var arr = Array.from(set); + arr.sort(); + return arr; + } + var obj = {}; + for (var i4 = 0; i4 < xs.length; i4++) { + obj[xs[i4]] = true; + } + for (var j4 = 0; j4 < ys.length; j4++) { + obj[ys[j4]] = true; + } + var keys = []; + for (var k4 in obj) { + if ({}.hasOwnProperty.call(obj, k4)) { + keys.push(k4); } - var q4 = 2, A4 = 3, I3 = 8, F4 = 5 * I3, M3 = 4 * I3, z4 = " "; - function R2(n4, t5) { - return new Array(t5 + 1).join(n4); + } + keys.sort(); + return keys; + } + function assertParser(p3) { + if (!isParser(p3)) { + throw new Error("not a parser: " + p3); + } + } + function get(input, i4) { + if (typeof input === "string") { + return input.charAt(i4); + } + return input[i4]; + } + function assertArray(x4) { + if (!isArray2(x4)) { + throw new Error("not an array: " + x4); + } + } + function assertNumber(x4) { + if (typeof x4 !== "number") { + throw new Error("not a number: " + x4); + } + } + function assertRegexp(x4) { + if (!(x4 instanceof RegExp)) { + throw new Error("not a regexp: " + x4); + } + var f4 = flags(x4); + for (var i4 = 0; i4 < f4.length; i4++) { + var c4 = f4.charAt(i4); + if (c4 !== "i" && c4 !== "m" && c4 !== "u" && c4 !== "s") { + throw new Error('unsupported regexp flag "' + c4 + '": ' + x4); } - function U2(n4, t5, r4) { - var e4 = t5 - n4.length; - return e4 <= 0 ? n4 : R2(r4, e4) + n4; + } + } + function assertFunction(x4) { + if (typeof x4 !== "function") { + throw new Error("not a function: " + x4); + } + } + function assertString(x4) { + if (typeof x4 !== "string") { + throw new Error("not a string: " + x4); + } + } + var linesBeforeStringError = 2; + var linesAfterStringError = 3; + var bytesPerLine = 8; + var bytesBefore = bytesPerLine * 5; + var bytesAfter = bytesPerLine * 4; + var defaultLinePrefix = " "; + function repeat(string3, amount) { + return new Array(amount + 1).join(string3); + } + function formatExpected(expected) { + if (expected.length === 1) { + return "Expected:\n\n" + expected[0]; + } + return "Expected one of the following: \n\n" + expected.join(", "); + } + function leftPad(str, pad, char2) { + var add = pad - str.length; + if (add <= 0) { + return str; + } + return repeat(char2, add) + str; + } + function toChunks(arr, chunkSize) { + var length2 = arr.length; + var chunks = []; + var chunkIndex = 0; + if (length2 <= chunkSize) { + return [arr.slice()]; + } + for (var i4 = 0; i4 < length2; i4++) { + if (!chunks[chunkIndex]) { + chunks.push([]); } - function W2(n4, t5, r4, e4) { - return { from: n4 - t5 > 0 ? n4 - t5 : 0, to: n4 + r4 > e4 ? e4 : n4 + r4 }; + chunks[chunkIndex].push(arr[i4]); + if ((i4 + 1) % chunkSize === 0) { + chunkIndex++; } - function D4(n4, t5) { - var r4, e4, u5, o4, f5, c4 = t5.index, s5 = c4.offset, l5 = 1; - if (s5 === n4.length) - return "Got the end of the input"; - if (w6(n4)) { - var h4 = s5 - s5 % I3, p5 = s5 - h4, d5 = W2(h4, F4, M3 + I3, n4.length), v4 = a3(function(n5) { - return a3(function(n6) { - return U2(n6.toString(16), 2, "0"); - }, n5); - }, function(n5, t6) { - var r5 = n5.length, e5 = [], u6 = 0; - if (r5 <= t6) - return [n5.slice()]; - for (var o5 = 0; o5 < r5; o5++) - e5[u6] || e5.push([]), e5[u6].push(n5[o5]), (o5 + 1) % t6 == 0 && u6++; - return e5; - }(n4.slice(d5.from, d5.to).toJSON().data, I3)); - o4 = function(n5) { - return 0 === n5.from && 1 === n5.to ? { from: n5.from, to: n5.to } : { from: n5.from / I3, to: Math.floor(n5.to / I3) }; - }(d5), e4 = h4 / I3, r4 = 3 * p5, p5 >= 4 && (r4 += 1), l5 = 2, u5 = a3(function(n5) { - return n5.length <= 4 ? n5.join(" ") : n5.slice(0, 4).join(" ") + " " + n5.slice(4).join(" "); - }, v4), (f5 = (8 * (o4.to > 0 ? o4.to - 1 : o4.to)).toString(16).length) < 2 && (f5 = 2); + } + return chunks; + } + function rangeFromIndexAndOffsets(i4, before, after, length2) { + return { + // Guard against the negative upper bound for lines included in the output. + from: i4 - before > 0 ? i4 - before : 0, + to: i4 + after > length2 ? length2 : i4 + after + }; + } + function byteRangeToRange(byteRange) { + if (byteRange.from === 0 && byteRange.to === 1) { + return { + from: byteRange.from, + to: byteRange.to + }; + } + return { + from: byteRange.from / bytesPerLine, + // Round `to`, so we don't get float if the amount of bytes is not divisible by `bytesPerLine` + to: Math.floor(byteRange.to / bytesPerLine) + }; + } + function formatGot(input, error) { + var index2 = error.index; + var i4 = index2.offset; + var verticalMarkerLength = 1; + var column2; + var lineWithErrorIndex; + var lines; + var lineRange2; + var lastLineNumberLabelLength; + if (i4 === input.length) { + return "Got the end of the input"; + } + if (isBuffer(input)) { + var byteLineWithErrorIndex = i4 - i4 % bytesPerLine; + var columnByteIndex = i4 - byteLineWithErrorIndex; + var byteRange = rangeFromIndexAndOffsets( + byteLineWithErrorIndex, + bytesBefore, + bytesAfter + bytesPerLine, + input.length + ); + var bytes = input.slice(byteRange.from, byteRange.to); + var bytesInChunks = toChunks(bytes.toJSON().data, bytesPerLine); + var byteLines = map(function(byteRow) { + return map(function(byteValue) { + return leftPad(byteValue.toString(16), 2, "0"); + }, byteRow); + }, bytesInChunks); + lineRange2 = byteRangeToRange(byteRange); + lineWithErrorIndex = byteLineWithErrorIndex / bytesPerLine; + column2 = columnByteIndex * 3; + if (columnByteIndex >= 4) { + column2 += 1; + } + verticalMarkerLength = 2; + lines = map(function(byteLine) { + return byteLine.length <= 4 ? byteLine.join(" ") : byteLine.slice(0, 4).join(" ") + " " + byteLine.slice(4).join(" "); + }, byteLines); + lastLineNumberLabelLength = ((lineRange2.to > 0 ? lineRange2.to - 1 : lineRange2.to) * 8).toString(16).length; + if (lastLineNumberLabelLength < 2) { + lastLineNumberLabelLength = 2; + } + } else { + var inputLines = input.split(/\r\n|[\n\r\u2028\u2029]/); + column2 = index2.column - 1; + lineWithErrorIndex = index2.line - 1; + lineRange2 = rangeFromIndexAndOffsets( + lineWithErrorIndex, + linesBeforeStringError, + linesAfterStringError, + inputLines.length + ); + lines = inputLines.slice(lineRange2.from, lineRange2.to); + lastLineNumberLabelLength = lineRange2.to.toString().length; + } + var lineWithErrorCurrentIndex = lineWithErrorIndex - lineRange2.from; + if (isBuffer(input)) { + lastLineNumberLabelLength = ((lineRange2.to > 0 ? lineRange2.to - 1 : lineRange2.to) * 8).toString(16).length; + if (lastLineNumberLabelLength < 2) { + lastLineNumberLabelLength = 2; + } + } + var linesWithLineNumbers = reduce2( + function(acc, lineSource, index3) { + var isLineWithError = index3 === lineWithErrorCurrentIndex; + var prefix2 = isLineWithError ? "> " : defaultLinePrefix; + var lineNumberLabel; + if (isBuffer(input)) { + lineNumberLabel = leftPad( + ((lineRange2.from + index3) * 8).toString(16), + lastLineNumberLabelLength, + "0" + ); } else { - var g5 = n4.split(/\r\n|[\n\r\u2028\u2029]/); - r4 = c4.column - 1, e4 = c4.line - 1, o4 = W2(e4, q4, A4, g5.length), u5 = g5.slice(o4.from, o4.to), f5 = o4.to.toString().length; + lineNumberLabel = leftPad( + (lineRange2.from + index3 + 1).toString(), + lastLineNumberLabelLength, + " " + ); } - var m4 = e4 - o4.from; - return w6(n4) && (f5 = (8 * (o4.to > 0 ? o4.to - 1 : o4.to)).toString(16).length) < 2 && (f5 = 2), i4(function(t6, e5, u6) { - var i5, a4 = u6 === m4, c5 = a4 ? "> " : z4; - return i5 = w6(n4) ? U2((8 * (o4.from + u6)).toString(16), f5, "0") : U2((o4.from + u6 + 1).toString(), f5, " "), [].concat(t6, [c5 + i5 + " | " + e5], a4 ? [z4 + R2(" ", f5) + " | " + U2("", r4, " ") + R2("^", l5)] : []); - }, [], u5).join("\n"); - } - function N3(n4, t5) { - return ["\n", "-- PARSING FAILED " + R2("-", 50), "\n\n", D4(n4, t5), "\n\n", (r4 = t5.expected, 1 === r4.length ? "Expected:\n\n" + r4[0] : "Expected one of the following: \n\n" + r4.join(", ")), "\n"].join(""); - var r4; - } - function G3(n4) { - return void 0 !== n4.flags ? n4.flags : [n4.global ? "g" : "", n4.ignoreCase ? "i" : "", n4.multiline ? "m" : "", n4.unicode ? "u" : "", n4.sticky ? "y" : ""].join(""); - } - function C4() { - for (var n4 = [].slice.call(arguments), t5 = n4.length, r4 = 0; r4 < t5; r4 += 1) - _3(n4[r4]); - return e3(function(r5, e4) { - for (var u5, o4 = new Array(t5), i5 = 0; i5 < t5; i5 += 1) { - if (!(u5 = B4(n4[i5]._(r5, e4), u5)).status) - return u5; - o4[i5] = u5.value, e4 = u5.index; - } - return B4(b3(e4, o4), u5); - }); - } - function J2() { - var n4 = [].slice.call(arguments); - if (0 === n4.length) - throw new Error("seqMap needs at least one argument"); - var t5 = n4.pop(); - return k4(t5), C4.apply(null, n4).map(function(n5) { - return t5.apply(null, n5); - }); - } - function T4() { - var n4 = [].slice.call(arguments), t5 = n4.length; - if (0 === t5) - return Y2("zero alternates"); - for (var r4 = 0; r4 < t5; r4 += 1) - _3(n4[r4]); - return e3(function(t6, r5) { - for (var e4, u5 = 0; u5 < n4.length; u5 += 1) - if ((e4 = B4(n4[u5]._(t6, r5), e4)).status) - return e4; - return e4; - }); - } - function V4(n4, t5) { - return H3(n4, t5).or(X2([])); - } - function H3(n4, t5) { - return _3(n4), _3(t5), J2(n4, t5.then(n4).many(), function(n5, t6) { - return [n5].concat(t6); - }); - } - function K2(n4) { - P7(n4); - var t5 = "'" + n4 + "'"; - return e3(function(r4, e4) { - var u5 = e4 + n4.length, o4 = r4.slice(e4, u5); - return o4 === n4 ? b3(u5, o4) : x4(e4, t5); - }); - } - function Q2(n4, t5) { - !function(n5) { - if (!(n5 instanceof RegExp)) - throw new Error("not a regexp: " + n5); - for (var t6 = G3(n5), r5 = 0; r5 < t6.length; r5++) { - var e4 = t6.charAt(r5); - if ("i" !== e4 && "m" !== e4 && "u" !== e4 && "s" !== e4) - throw new Error('unsupported regexp flag "' + e4 + '": ' + n5); - } - }(n4), arguments.length >= 2 ? O3(t5) : t5 = 0; - var r4 = function(n5) { - return RegExp("^(?:" + n5.source + ")", G3(n5)); - }(n4), u5 = "" + n4; - return e3(function(n5, e4) { - var o4 = r4.exec(n5.slice(e4)); - if (o4) { - if (0 <= t5 && t5 <= o4.length) { - var i5 = o4[0], a4 = o4[t5]; - return b3(e4 + i5.length, a4); - } - return x4(e4, "valid match group (0 to " + o4.length + ") in " + u5); - } - return x4(e4, u5); - }); - } - function X2(n4) { - return e3(function(t5, r4) { - return b3(r4, n4); - }); - } - function Y2(n4) { - return e3(function(t5, r4) { - return x4(r4, n4); - }); - } - function Z2(n4) { - if (y3(n4)) - return e3(function(t5, r4) { - var e4 = n4._(t5, r4); - return e4.index = r4, e4.value = "", e4; - }); - if ("string" == typeof n4) - return Z2(K2(n4)); - if (n4 instanceof RegExp) - return Z2(Q2(n4)); - throw new Error("not a string, regexp, or parser: " + n4); - } - function $3(n4) { - return _3(n4), e3(function(t5, r4) { - var e4 = n4._(t5, r4), u5 = t5.slice(r4, e4.index); - return e4.status ? x4(r4, 'not "' + u5 + '"') : b3(r4, null); - }); - } - function nn2(n4) { - return k4(n4), e3(function(t5, r4) { - var e4 = L3(t5, r4); - return r4 < t5.length && n4(e4) ? b3(r4 + 1, e4) : x4(r4, "a character/byte matching " + n4); - }); - } - function tn2(n4, t5) { - arguments.length < 2 && (t5 = n4, n4 = void 0); - var r4 = e3(function(n5, e4) { - return r4._ = t5()._, r4._(n5, e4); - }); - return n4 ? r4.desc(n4) : r4; - } - function rn2() { - return Y2("fantasy-land/empty"); - } - u4.parse = function(n4) { - if ("string" != typeof n4 && !w6(n4)) - throw new Error(".parse must be called with a string or Buffer as its argument"); - var t5, r4 = this.skip(an2)._(n4, 0); - return t5 = r4.status ? { status: true, value: r4.value } : { status: false, index: S2(n4, r4.furthest), expected: r4.expected }, delete j4[n4], t5; - }, u4.tryParse = function(n4) { - var t5 = this.parse(n4); - if (t5.status) - return t5.value; - var r4 = N3(n4, t5), e4 = new Error(r4); - throw e4.type = "ParsimmonError", e4.result = t5, e4; - }, u4.assert = function(n4, t5) { - return this.chain(function(r4) { - return n4(r4) ? X2(r4) : Y2(t5); - }); - }, u4.or = function(n4) { - return T4(this, n4); - }, u4.trim = function(n4) { - return this.wrap(n4, n4); - }, u4.wrap = function(n4, t5) { - return J2(n4, this, t5, function(n5, t6) { - return t6; - }); - }, u4.thru = function(n4) { - return n4(this); - }, u4.then = function(n4) { - return _3(n4), C4(this, n4).map(function(n5) { - return n5[1]; - }); - }, u4.many = function() { - var n4 = this; - return e3(function(t5, r4) { - for (var e4 = [], u5 = void 0; ; ) { - if (!(u5 = B4(n4._(t5, r4), u5)).status) - return B4(b3(r4, e4), u5); - if (r4 === u5.index) - throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause"); - r4 = u5.index, e4.push(u5.value); - } - }); - }, u4.tieWith = function(n4) { - return P7(n4), this.map(function(t5) { - if (function(n5) { - if (!E3(n5)) - throw new Error("not an array: " + n5); - }(t5), t5.length) { - P7(t5[0]); - for (var r4 = t5[0], e4 = 1; e4 < t5.length; e4++) - P7(t5[e4]), r4 += n4 + t5[e4]; - return r4; - } - return ""; - }); - }, u4.tie = function() { - return this.tieWith(""); - }, u4.times = function(n4, t5) { - var r4 = this; - return arguments.length < 2 && (t5 = n4), O3(n4), O3(t5), e3(function(e4, u5) { - for (var o4 = [], i5 = void 0, a4 = void 0, f5 = 0; f5 < n4; f5 += 1) { - if (a4 = B4(i5 = r4._(e4, u5), a4), !i5.status) - return a4; - u5 = i5.index, o4.push(i5.value); - } - for (; f5 < t5 && (a4 = B4(i5 = r4._(e4, u5), a4), i5.status); f5 += 1) - u5 = i5.index, o4.push(i5.value); - return B4(b3(u5, o4), a4); - }); - }, u4.result = function(n4) { - return this.map(function() { - return n4; - }); - }, u4.atMost = function(n4) { - return this.times(0, n4); - }, u4.atLeast = function(n4) { - return J2(this.times(n4), this.many(), function(n5, t5) { - return n5.concat(t5); - }); - }, u4.map = function(n4) { - k4(n4); - var t5 = this; - return e3(function(r4, e4) { - var u5 = t5._(r4, e4); - return u5.status ? B4(b3(u5.index, n4(u5.value)), u5) : u5; - }); - }, u4.contramap = function(n4) { - k4(n4); - var t5 = this; - return e3(function(r4, e4) { - var u5 = t5.parse(n4(r4.slice(e4))); - return u5.status ? b3(e4 + r4.length, u5.value) : u5; - }); - }, u4.promap = function(n4, t5) { - return k4(n4), k4(t5), this.contramap(n4).map(t5); - }, u4.skip = function(n4) { - return C4(this, n4).map(function(n5) { - return n5[0]; - }); - }, u4.mark = function() { - return J2(en2, this, en2, function(n4, t5, r4) { - return { start: n4, value: t5, end: r4 }; - }); - }, u4.node = function(n4) { - return J2(en2, this, en2, function(t5, r4, e4) { - return { name: n4, value: r4, start: t5, end: e4 }; - }); - }, u4.sepBy = function(n4) { - return V4(this, n4); - }, u4.sepBy1 = function(n4) { - return H3(this, n4); - }, u4.lookahead = function(n4) { - return this.skip(Z2(n4)); - }, u4.notFollowedBy = function(n4) { - return this.skip($3(n4)); - }, u4.desc = function(n4) { - E3(n4) || (n4 = [n4]); - var t5 = this; - return e3(function(r4, e4) { - var u5 = t5._(r4, e4); - return u5.status || (u5.expected = n4), u5; - }); - }, u4.fallback = function(n4) { - return this.or(X2(n4)); - }, u4.ap = function(n4) { - return J2(n4, this, function(n5, t5) { - return n5(t5); - }); - }, u4.chain = function(n4) { - var t5 = this; - return e3(function(r4, e4) { - var u5 = t5._(r4, e4); - return u5.status ? B4(n4(u5.value)._(r4, u5.index), u5) : u5; - }); - }, u4.concat = u4.or, u4.empty = rn2, u4.of = X2, u4["fantasy-land/ap"] = u4.ap, u4["fantasy-land/chain"] = u4.chain, u4["fantasy-land/concat"] = u4.concat, u4["fantasy-land/empty"] = u4.empty, u4["fantasy-land/of"] = u4.of, u4["fantasy-land/map"] = u4.map; - var en2 = e3(function(n4, t5) { - return b3(t5, S2(n4, t5)); - }), un2 = e3(function(n4, t5) { - return t5 >= n4.length ? x4(t5, "any character/byte") : b3(t5 + 1, L3(n4, t5)); - }), on2 = e3(function(n4, t5) { - return b3(n4.length, n4.slice(t5)); - }), an2 = e3(function(n4, t5) { - return t5 < n4.length ? x4(t5, "EOF") : b3(t5, null); - }), fn2 = Q2(/[0-9]/).desc("a digit"), cn2 = Q2(/[0-9]*/).desc("optional digits"), sn2 = Q2(/[a-z]/i).desc("a letter"), ln = Q2(/[a-z]*/i).desc("optional letters"), hn2 = Q2(/\s*/).desc("optional whitespace"), pn2 = Q2(/\s+/).desc("whitespace"), dn2 = K2("\r"), vn2 = K2("\n"), gn2 = K2("\r\n"), mn2 = T4(gn2, vn2, dn2).desc("newline"), yn2 = T4(mn2, an2); - e3.all = on2, e3.alt = T4, e3.any = un2, e3.cr = dn2, e3.createLanguage = function(n4) { - var t5 = {}; - for (var r4 in n4) - ({}).hasOwnProperty.call(n4, r4) && function(r5) { - t5[r5] = tn2(function() { - return n4[r5](t5); - }); - }(r4); - return t5; - }, e3.crlf = gn2, e3.custom = function(n4) { - return e3(n4(b3, x4)); - }, e3.digit = fn2, e3.digits = cn2, e3.empty = rn2, e3.end = yn2, e3.eof = an2, e3.fail = Y2, e3.formatError = N3, e3.index = en2, e3.isParser = y3, e3.lazy = tn2, e3.letter = sn2, e3.letters = ln, e3.lf = vn2, e3.lookahead = Z2, e3.makeFailure = x4, e3.makeSuccess = b3, e3.newline = mn2, e3.noneOf = function(n4) { - return nn2(function(t5) { - return n4.indexOf(t5) < 0; - }).desc("none of '" + n4 + "'"); - }, e3.notFollowedBy = $3, e3.of = X2, e3.oneOf = function(n4) { - for (var t5 = n4.split(""), r4 = 0; r4 < t5.length; r4++) - t5[r4] = "'" + t5[r4] + "'"; - return nn2(function(t6) { - return n4.indexOf(t6) >= 0; - }).desc(t5); - }, e3.optWhitespace = hn2, e3.Parser = e3, e3.range = function(n4, t5) { - return nn2(function(r4) { - return n4 <= r4 && r4 <= t5; - }).desc(n4 + "-" + t5); - }, e3.regex = Q2, e3.regexp = Q2, e3.sepBy = V4, e3.sepBy1 = H3, e3.seq = C4, e3.seqMap = J2, e3.seqObj = function() { - for (var n4, t5 = {}, r4 = 0, u5 = (n4 = arguments, Array.prototype.slice.call(n4)), o4 = u5.length, i5 = 0; i5 < o4; i5 += 1) { - var a4 = u5[i5]; - if (!y3(a4)) { - if (E3(a4) && 2 === a4.length && "string" == typeof a4[0] && y3(a4[1])) { - var f5 = a4[0]; - if (Object.prototype.hasOwnProperty.call(t5, f5)) - throw new Error("seqObj: duplicate key " + f5); - t5[f5] = true, r4++; - continue; - } - throw new Error("seqObj arguments must be parsers or [string, parser] array pairs."); - } + return [].concat( + acc, + [prefix2 + lineNumberLabel + " | " + lineSource], + isLineWithError ? [ + defaultLinePrefix + repeat(" ", lastLineNumberLabelLength) + " | " + leftPad("", column2, " ") + repeat("^", verticalMarkerLength) + ] : [] + ); + }, + [], + lines + ); + return linesWithLineNumbers.join("\n"); + } + function formatError(input, error) { + return [ + "\n", + "-- PARSING FAILED " + repeat("-", 50), + "\n\n", + formatGot(input, error), + "\n\n", + formatExpected(error.expected), + "\n" + ].join(""); + } + function flags(re) { + if (re.flags !== void 0) { + return re.flags; + } + return [ + re.global ? "g" : "", + re.ignoreCase ? "i" : "", + re.multiline ? "m" : "", + re.unicode ? "u" : "", + re.sticky ? "y" : "" + ].join(""); + } + function anchoredRegexp(re) { + return RegExp("^(?:" + re.source + ")", flags(re)); + } + function seq2() { + var parsers = [].slice.call(arguments); + var numParsers = parsers.length; + for (var j4 = 0; j4 < numParsers; j4 += 1) { + assertParser(parsers[j4]); + } + return Parsimmon2(function(input, i4) { + var result; + var accum = new Array(numParsers); + for (var j5 = 0; j5 < numParsers; j5 += 1) { + result = mergeReplies(parsers[j5]._(input, i4), result); + if (!result.status) { + return result; } - if (0 === r4) - throw new Error("seqObj expects at least one named parser, found zero"); - return e3(function(n5, t6) { - for (var r5, e4 = {}, i6 = 0; i6 < o4; i6 += 1) { - var a5, f6; - if (E3(u5[i6]) ? (a5 = u5[i6][0], f6 = u5[i6][1]) : (a5 = null, f6 = u5[i6]), !(r5 = B4(f6._(n5, t6), r5)).status) - return r5; - a5 && (e4[a5] = r5.value), t6 = r5.index; + accum[j5] = result.value; + i4 = result.index; + } + return mergeReplies(makeSuccess(i4, accum), result); + }); + } + function seqObj() { + var seenKeys = {}; + var totalKeys = 0; + var parsers = toArray2(arguments); + var numParsers = parsers.length; + for (var j4 = 0; j4 < numParsers; j4 += 1) { + var p3 = parsers[j4]; + if (isParser(p3)) { + continue; + } + if (isArray2(p3)) { + var isWellFormed = p3.length === 2 && typeof p3[0] === "string" && isParser(p3[1]); + if (isWellFormed) { + var key = p3[0]; + if (Object.prototype.hasOwnProperty.call(seenKeys, key)) { + throw new Error("seqObj: duplicate key " + key); } - return B4(b3(t6, e4), r5); - }); - }, e3.string = K2, e3.succeed = X2, e3.takeWhile = function(n4) { - return k4(n4), e3(function(t5, r4) { - for (var e4 = r4; e4 < t5.length && n4(L3(t5, e4)); ) - e4++; - return b3(e4, t5.slice(r4, e4)); - }); - }, e3.test = nn2, e3.whitespace = pn2, e3["fantasy-land/empty"] = rn2, e3["fantasy-land/of"] = X2, e3.Binary = { bitSeq: l4, bitSeqObj: function(n4) { - s4(); - var t5 = {}, r4 = 0, e4 = a3(function(n5) { - if (E3(n5)) { - var e5 = n5; - if (2 !== e5.length) - throw new Error("[" + e5.join(", ") + "] should be length 2, got length " + e5.length); - if (P7(e5[0]), O3(e5[1]), Object.prototype.hasOwnProperty.call(t5, e5[0])) - throw new Error("duplicate key in bitSeqObj: " + e5[0]); - return t5[e5[0]] = true, r4++, e5; + seenKeys[key] = true; + totalKeys++; + continue; + } + } + throw new Error( + "seqObj arguments must be parsers or [string, parser] array pairs." + ); + } + if (totalKeys === 0) { + throw new Error("seqObj expects at least one named parser, found zero"); + } + return Parsimmon2(function(input, i4) { + var result; + var accum = {}; + for (var j5 = 0; j5 < numParsers; j5 += 1) { + var name; + var parser; + if (isArray2(parsers[j5])) { + name = parsers[j5][0]; + parser = parsers[j5][1]; + } else { + name = null; + parser = parsers[j5]; + } + result = mergeReplies(parser._(input, i4), result); + if (!result.status) { + return result; + } + if (name) { + accum[name] = result.value; + } + i4 = result.index; + } + return mergeReplies(makeSuccess(i4, accum), result); + }); + } + function seqMap2() { + var args = [].slice.call(arguments); + if (args.length === 0) { + throw new Error("seqMap needs at least one argument"); + } + var mapper = args.pop(); + assertFunction(mapper); + return seq2.apply(null, args).map(function(results) { + return mapper.apply(null, results); + }); + } + function createLanguage2(parsers) { + var language = {}; + for (var key in parsers) { + if ({}.hasOwnProperty.call(parsers, key)) { + (function(key2) { + var func = function() { + return parsers[key2](language); + }; + language[key2] = lazy(func); + })(key); + } + } + return language; + } + function alt4() { + var parsers = [].slice.call(arguments); + var numParsers = parsers.length; + if (numParsers === 0) { + return fail("zero alternates"); + } + for (var j4 = 0; j4 < numParsers; j4 += 1) { + assertParser(parsers[j4]); + } + return Parsimmon2(function(input, i4) { + var result; + for (var j5 = 0; j5 < parsers.length; j5 += 1) { + result = mergeReplies(parsers[j5]._(input, i4), result); + if (result.status) { + return result; + } + } + return result; + }); + } + function sepBy(parser, separator) { + return sepBy1(parser, separator).or(succeed2([])); + } + function sepBy1(parser, separator) { + assertParser(parser); + assertParser(separator); + var pairs = separator.then(parser).many(); + return seqMap2(parser, pairs, function(r4, rs) { + return [r4].concat(rs); + }); + } + _3.parse = function(input) { + if (typeof input !== "string" && !isBuffer(input)) { + throw new Error( + ".parse must be called with a string or Buffer as its argument" + ); + } + var parseResult = this.skip(eof)._(input, 0); + var result; + if (parseResult.status) { + result = { + status: true, + value: parseResult.value + }; + } else { + result = { + status: false, + index: makeLineColumnIndex(input, parseResult.furthest), + expected: parseResult.expected + }; + } + delete lineColumnIndex[input]; + return result; + }; + _3.tryParse = function(str) { + var result = this.parse(str); + if (result.status) { + return result.value; + } else { + var msg = formatError(str, result); + var err = new Error(msg); + err.type = "ParsimmonError"; + err.result = result; + throw err; + } + }; + _3.assert = function(condition, errorMessage) { + return this.chain(function(value) { + return condition(value) ? succeed2(value) : fail(errorMessage); + }); + }; + _3.or = function(alternative) { + return alt4(this, alternative); + }; + _3.trim = function(parser) { + return this.wrap(parser, parser); + }; + _3.wrap = function(leftParser, rightParser) { + return seqMap2(leftParser, this, rightParser, function(left, middle) { + return middle; + }); + }; + _3.thru = function(wrapper) { + return wrapper(this); + }; + _3.then = function(next2) { + assertParser(next2); + return seq2(this, next2).map(function(results) { + return results[1]; + }); + }; + _3.many = function() { + var self2 = this; + return Parsimmon2(function(input, i4) { + var accum = []; + var result = void 0; + for (; ; ) { + result = mergeReplies(self2._(input, i4), result); + if (result.status) { + if (i4 === result.index) { + throw new Error( + "infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause" + ); } - return O3(n5), [null, n5]; - }, n4); - if (r4 < 1) - throw new Error("bitSeqObj expects at least one named pair, got [" + n4.join(", ") + "]"); - var u5 = a3(function(n5) { - return n5[0]; - }, e4); - return l4(a3(function(n5) { - return n5[1]; - }, e4)).map(function(n5) { - return i4(function(n6, t6) { - return null !== t6[0] && (n6[t6[0]] = t6[1]), n6; - }, {}, a3(function(t6, r5) { - return [t6, n5[r5]]; - }, u5)); - }); - }, byte: function(n4) { - if (s4(), O3(n4), n4 > 255) - throw new Error("Value specified to byte constructor (" + n4 + "=0x" + n4.toString(16) + ") is larger in value than a single byte."); - var t5 = (n4 > 15 ? "0x" : "0x0") + n4.toString(16); - return e3(function(r4, e4) { - var u5 = L3(r4, e4); - return u5 === n4 ? b3(e4 + 1, u5) : x4(e4, t5); - }); - }, buffer: function(n4) { - return h3("buffer", n4).map(function(n5) { - return Buffer.from(n5); - }); - }, encodedString: function(n4, t5) { - return h3("string", t5).map(function(t6) { - return t6.toString(n4); - }); - }, uintBE: d4, uint8BE: d4(1), uint16BE: d4(2), uint32BE: d4(4), uintLE: v3, uint8LE: v3(1), uint16LE: v3(2), uint32LE: v3(4), intBE: g4, int8BE: g4(1), int16BE: g4(2), int32BE: g4(4), intLE: m3, int8LE: m3(1), int16LE: m3(2), int32LE: m3(4), floatBE: h3("floatBE", 4).map(function(n4) { - return n4.readFloatBE(0); - }), floatLE: h3("floatLE", 4).map(function(n4) { - return n4.readFloatLE(0); - }), doubleBE: h3("doubleBE", 8).map(function(n4) { - return n4.readDoubleBE(0); - }), doubleLE: h3("doubleLE", 8).map(function(n4) { - return n4.readDoubleLE(0); - }) }, n3.exports = e3; - }]); + i4 = result.index; + accum.push(result.value); + } else { + return mergeReplies(makeSuccess(i4, accum), result); + } + } + }); + }; + _3.tieWith = function(separator) { + assertString(separator); + return this.map(function(args) { + assertArray(args); + if (args.length) { + assertString(args[0]); + var s4 = args[0]; + for (var i4 = 1; i4 < args.length; i4++) { + assertString(args[i4]); + s4 += separator + args[i4]; + } + return s4; + } else { + return ""; + } + }); + }; + _3.tie = function() { + return this.tieWith(""); + }; + _3.times = function(min2, max2) { + var self2 = this; + if (arguments.length < 2) { + max2 = min2; + } + assertNumber(min2); + assertNumber(max2); + return Parsimmon2(function(input, i4) { + var accum = []; + var result = void 0; + var prevResult = void 0; + for (var times2 = 0; times2 < min2; times2 += 1) { + result = self2._(input, i4); + prevResult = mergeReplies(result, prevResult); + if (result.status) { + i4 = result.index; + accum.push(result.value); + } else { + return prevResult; + } + } + for (; times2 < max2; times2 += 1) { + result = self2._(input, i4); + prevResult = mergeReplies(result, prevResult); + if (result.status) { + i4 = result.index; + accum.push(result.value); + } else { + break; + } + } + return mergeReplies(makeSuccess(i4, accum), prevResult); + }); + }; + _3.result = function(res) { + return this.map(function() { + return res; + }); + }; + _3.atMost = function(n3) { + return this.times(0, n3); + }; + _3.atLeast = function(n3) { + return seqMap2(this.times(n3), this.many(), function(init, rest) { + return init.concat(rest); + }); + }; + _3.map = function(fn2) { + assertFunction(fn2); + var self2 = this; + return Parsimmon2(function(input, i4) { + var result = self2._(input, i4); + if (!result.status) { + return result; + } + return mergeReplies(makeSuccess(result.index, fn2(result.value)), result); + }); + }; + _3.contramap = function(fn2) { + assertFunction(fn2); + var self2 = this; + return Parsimmon2(function(input, i4) { + var result = self2.parse(fn2(input.slice(i4))); + if (!result.status) { + return result; + } + return makeSuccess(i4 + input.length, result.value); + }); + }; + _3.promap = function(f4, g4) { + assertFunction(f4); + assertFunction(g4); + return this.contramap(f4).map(g4); + }; + _3.skip = function(next2) { + return seq2(this, next2).map(function(results) { + return results[0]; + }); + }; + _3.mark = function() { + return seqMap2(index, this, index, function(start, value, end3) { + return { + start, + value, + end: end3 + }; + }); + }; + _3.node = function(name) { + return seqMap2(index, this, index, function(start, value, end3) { + return { + name, + value, + start, + end: end3 + }; + }); + }; + _3.sepBy = function(separator) { + return sepBy(this, separator); + }; + _3.sepBy1 = function(separator) { + return sepBy1(this, separator); + }; + _3.lookahead = function(x4) { + return this.skip(lookahead(x4)); + }; + _3.notFollowedBy = function(x4) { + return this.skip(notFollowedBy(x4)); + }; + _3.desc = function(expected) { + if (!isArray2(expected)) { + expected = [expected]; + } + var self2 = this; + return Parsimmon2(function(input, i4) { + var reply = self2._(input, i4); + if (!reply.status) { + reply.expected = expected; + } + return reply; + }); + }; + _3.fallback = function(result) { + return this.or(succeed2(result)); + }; + _3.ap = function(other) { + return seqMap2(other, this, function(f4, x4) { + return f4(x4); + }); + }; + _3.chain = function(f4) { + var self2 = this; + return Parsimmon2(function(input, i4) { + var result = self2._(input, i4); + if (!result.status) { + return result; + } + var nextParser = f4(result.value); + return mergeReplies(nextParser._(input, result.index), result); + }); + }; + function string2(str) { + assertString(str); + var expected = "'" + str + "'"; + return Parsimmon2(function(input, i4) { + var j4 = i4 + str.length; + var head = input.slice(i4, j4); + if (head === str) { + return makeSuccess(j4, head); + } else { + return makeFailure(i4, expected); + } + }); + } + function byte(b3) { + ensureBuffer(); + assertNumber(b3); + if (b3 > 255) { + throw new Error( + "Value specified to byte constructor (" + b3 + "=0x" + b3.toString(16) + ") is larger in value than a single byte." + ); + } + var expected = (b3 > 15 ? "0x" : "0x0") + b3.toString(16); + return Parsimmon2(function(input, i4) { + var head = get(input, i4); + if (head === b3) { + return makeSuccess(i4 + 1, head); + } else { + return makeFailure(i4, expected); + } + }); + } + function regexp3(re, group) { + assertRegexp(re); + if (arguments.length >= 2) { + assertNumber(group); + } else { + group = 0; + } + var anchored = anchoredRegexp(re); + var expected = "" + re; + return Parsimmon2(function(input, i4) { + var match3 = anchored.exec(input.slice(i4)); + if (match3) { + if (0 <= group && group <= match3.length) { + var fullMatch = match3[0]; + var groupMatch = match3[group]; + return makeSuccess(i4 + fullMatch.length, groupMatch); + } + var message = "valid match group (0 to " + match3.length + ") in " + expected; + return makeFailure(i4, message); + } + return makeFailure(i4, expected); + }); + } + function succeed2(value) { + return Parsimmon2(function(input, i4) { + return makeSuccess(i4, value); + }); + } + function fail(expected) { + return Parsimmon2(function(input, i4) { + return makeFailure(i4, expected); + }); + } + function lookahead(x4) { + if (isParser(x4)) { + return Parsimmon2(function(input, i4) { + var result = x4._(input, i4); + result.index = i4; + result.value = ""; + return result; + }); + } else if (typeof x4 === "string") { + return lookahead(string2(x4)); + } else if (x4 instanceof RegExp) { + return lookahead(regexp3(x4)); + } + throw new Error("not a string, regexp, or parser: " + x4); + } + function notFollowedBy(parser) { + assertParser(parser); + return Parsimmon2(function(input, i4) { + var result = parser._(input, i4); + var text2 = input.slice(i4, result.index); + return result.status ? makeFailure(i4, 'not "' + text2 + '"') : makeSuccess(i4, null); + }); + } + function test(predicate) { + assertFunction(predicate); + return Parsimmon2(function(input, i4) { + var char2 = get(input, i4); + if (i4 < input.length && predicate(char2)) { + return makeSuccess(i4 + 1, char2); + } else { + return makeFailure(i4, "a character/byte matching " + predicate); + } + }); + } + function oneOf2(str) { + var expected = str.split(""); + for (var idx = 0; idx < expected.length; idx++) { + expected[idx] = "'" + expected[idx] + "'"; + } + return test(function(ch) { + return str.indexOf(ch) >= 0; + }).desc(expected); + } + function noneOf2(str) { + return test(function(ch) { + return str.indexOf(ch) < 0; + }).desc("none of '" + str + "'"); + } + function custom2(parsingFunction) { + return Parsimmon2(parsingFunction(makeSuccess, makeFailure)); + } + function range(begin2, end3) { + return test(function(ch) { + return begin2 <= ch && ch <= end3; + }).desc(begin2 + "-" + end3); + } + function takeWhile(predicate) { + assertFunction(predicate); + return Parsimmon2(function(input, i4) { + var j4 = i4; + while (j4 < input.length && predicate(get(input, j4))) { + j4++; + } + return makeSuccess(j4, input.slice(i4, j4)); + }); + } + function lazy(desc, f4) { + if (arguments.length < 2) { + f4 = desc; + desc = void 0; + } + var parser = Parsimmon2(function(input, i4) { + parser._ = f4()._; + return parser._(input, i4); + }); + if (desc) { + return parser.desc(desc); + } else { + return parser; + } + } + function empty() { + return fail("fantasy-land/empty"); + } + _3.concat = _3.or; + _3.empty = empty; + _3.of = succeed2; + _3["fantasy-land/ap"] = _3.ap; + _3["fantasy-land/chain"] = _3.chain; + _3["fantasy-land/concat"] = _3.concat; + _3["fantasy-land/empty"] = _3.empty; + _3["fantasy-land/of"] = _3.of; + _3["fantasy-land/map"] = _3.map; + var index = Parsimmon2(function(input, i4) { + return makeSuccess(i4, makeLineColumnIndex(input, i4)); }); + var any3 = Parsimmon2(function(input, i4) { + if (i4 >= input.length) { + return makeFailure(i4, "any character/byte"); + } + return makeSuccess(i4 + 1, get(input, i4)); + }); + var all = Parsimmon2(function(input, i4) { + return makeSuccess(input.length, input.slice(i4)); + }); + var eof = Parsimmon2(function(input, i4) { + if (i4 < input.length) { + return makeFailure(i4, "EOF"); + } + return makeSuccess(i4, null); + }); + var digit = regexp3(/[0-9]/).desc("a digit"); + var digits = regexp3(/[0-9]*/).desc("optional digits"); + var letter = regexp3(/[a-z]/i).desc("a letter"); + var letters = regexp3(/[a-z]*/i).desc("optional letters"); + var optWhitespace2 = regexp3(/\s*/).desc("optional whitespace"); + var whitespace3 = regexp3(/\s+/).desc("whitespace"); + var cr = string2("\r"); + var lf = string2("\n"); + var crlf = string2("\r\n"); + var newline = alt4(crlf, lf, cr).desc("newline"); + var end2 = alt4(newline, eof); + Parsimmon2.all = all; + Parsimmon2.alt = alt4; + Parsimmon2.any = any3; + Parsimmon2.cr = cr; + Parsimmon2.createLanguage = createLanguage2; + Parsimmon2.crlf = crlf; + Parsimmon2.custom = custom2; + Parsimmon2.digit = digit; + Parsimmon2.digits = digits; + Parsimmon2.empty = empty; + Parsimmon2.end = end2; + Parsimmon2.eof = eof; + Parsimmon2.fail = fail; + Parsimmon2.formatError = formatError; + Parsimmon2.index = index; + Parsimmon2.isParser = isParser; + Parsimmon2.lazy = lazy; + Parsimmon2.letter = letter; + Parsimmon2.letters = letters; + Parsimmon2.lf = lf; + Parsimmon2.lookahead = lookahead; + Parsimmon2.makeFailure = makeFailure; + Parsimmon2.makeSuccess = makeSuccess; + Parsimmon2.newline = newline; + Parsimmon2.noneOf = noneOf2; + Parsimmon2.notFollowedBy = notFollowedBy; + Parsimmon2.of = succeed2; + Parsimmon2.oneOf = oneOf2; + Parsimmon2.optWhitespace = optWhitespace2; + Parsimmon2.Parser = Parsimmon2; + Parsimmon2.range = range; + Parsimmon2.regex = regexp3; + Parsimmon2.regexp = regexp3; + Parsimmon2.sepBy = sepBy; + Parsimmon2.sepBy1 = sepBy1; + Parsimmon2.seq = seq2; + Parsimmon2.seqMap = seqMap2; + Parsimmon2.seqObj = seqObj; + Parsimmon2.string = string2; + Parsimmon2.succeed = succeed2; + Parsimmon2.takeWhile = takeWhile; + Parsimmon2.test = test; + Parsimmon2.whitespace = whitespace3; + Parsimmon2["fantasy-land/empty"] = empty; + Parsimmon2["fantasy-land/of"] = succeed2; + Parsimmon2.Binary = { + bitSeq, + bitSeqObj, + byte, + buffer: parseBuffer, + encodedString, + uintBE, + uint8BE: uintBE(1), + uint16BE: uintBE(2), + uint32BE: uintBE(4), + uintLE, + uint8LE: uintLE(1), + uint16LE: uintLE(2), + uint32LE: uintLE(4), + intBE, + int8BE: intBE(1), + int16BE: intBE(2), + int32BE: intBE(4), + intLE, + int8LE: intLE(1), + int16LE: intLE(2), + int32LE: intLE(4), + floatBE: floatBE(), + floatLE: floatLE(), + doubleBE: doubleBE(), + doubleLE: doubleLE() + }; + module2.exports = Parsimmon2; + } +}); + +// node_modules/emoji-regex/index.js +var require_emoji_regex = __commonJS({ + "node_modules/emoji-regex/index.js"(exports2, module2) { + module2.exports = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; + }; + } +}); + +// node_modules/sucrase/dist/parser/tokenizer/keywords.js +var require_keywords = __commonJS({ + "node_modules/sucrase/dist/parser/tokenizer/keywords.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var ContextualKeyword; + (function(ContextualKeyword2) { + const NONE = 0; + ContextualKeyword2[ContextualKeyword2["NONE"] = NONE] = "NONE"; + const _abstract = NONE + 1; + ContextualKeyword2[ContextualKeyword2["_abstract"] = _abstract] = "_abstract"; + const _accessor = _abstract + 1; + ContextualKeyword2[ContextualKeyword2["_accessor"] = _accessor] = "_accessor"; + const _as = _accessor + 1; + ContextualKeyword2[ContextualKeyword2["_as"] = _as] = "_as"; + const _assert = _as + 1; + ContextualKeyword2[ContextualKeyword2["_assert"] = _assert] = "_assert"; + const _asserts = _assert + 1; + ContextualKeyword2[ContextualKeyword2["_asserts"] = _asserts] = "_asserts"; + const _async = _asserts + 1; + ContextualKeyword2[ContextualKeyword2["_async"] = _async] = "_async"; + const _await = _async + 1; + ContextualKeyword2[ContextualKeyword2["_await"] = _await] = "_await"; + const _checks = _await + 1; + ContextualKeyword2[ContextualKeyword2["_checks"] = _checks] = "_checks"; + const _constructor = _checks + 1; + ContextualKeyword2[ContextualKeyword2["_constructor"] = _constructor] = "_constructor"; + const _declare = _constructor + 1; + ContextualKeyword2[ContextualKeyword2["_declare"] = _declare] = "_declare"; + const _enum = _declare + 1; + ContextualKeyword2[ContextualKeyword2["_enum"] = _enum] = "_enum"; + const _exports = _enum + 1; + ContextualKeyword2[ContextualKeyword2["_exports"] = _exports] = "_exports"; + const _from = _exports + 1; + ContextualKeyword2[ContextualKeyword2["_from"] = _from] = "_from"; + const _get = _from + 1; + ContextualKeyword2[ContextualKeyword2["_get"] = _get] = "_get"; + const _global = _get + 1; + ContextualKeyword2[ContextualKeyword2["_global"] = _global] = "_global"; + const _implements = _global + 1; + ContextualKeyword2[ContextualKeyword2["_implements"] = _implements] = "_implements"; + const _infer = _implements + 1; + ContextualKeyword2[ContextualKeyword2["_infer"] = _infer] = "_infer"; + const _interface = _infer + 1; + ContextualKeyword2[ContextualKeyword2["_interface"] = _interface] = "_interface"; + const _is = _interface + 1; + ContextualKeyword2[ContextualKeyword2["_is"] = _is] = "_is"; + const _keyof = _is + 1; + ContextualKeyword2[ContextualKeyword2["_keyof"] = _keyof] = "_keyof"; + const _mixins = _keyof + 1; + ContextualKeyword2[ContextualKeyword2["_mixins"] = _mixins] = "_mixins"; + const _module = _mixins + 1; + ContextualKeyword2[ContextualKeyword2["_module"] = _module] = "_module"; + const _namespace = _module + 1; + ContextualKeyword2[ContextualKeyword2["_namespace"] = _namespace] = "_namespace"; + const _of = _namespace + 1; + ContextualKeyword2[ContextualKeyword2["_of"] = _of] = "_of"; + const _opaque = _of + 1; + ContextualKeyword2[ContextualKeyword2["_opaque"] = _opaque] = "_opaque"; + const _out = _opaque + 1; + ContextualKeyword2[ContextualKeyword2["_out"] = _out] = "_out"; + const _override = _out + 1; + ContextualKeyword2[ContextualKeyword2["_override"] = _override] = "_override"; + const _private = _override + 1; + ContextualKeyword2[ContextualKeyword2["_private"] = _private] = "_private"; + const _protected = _private + 1; + ContextualKeyword2[ContextualKeyword2["_protected"] = _protected] = "_protected"; + const _proto = _protected + 1; + ContextualKeyword2[ContextualKeyword2["_proto"] = _proto] = "_proto"; + const _public = _proto + 1; + ContextualKeyword2[ContextualKeyword2["_public"] = _public] = "_public"; + const _readonly = _public + 1; + ContextualKeyword2[ContextualKeyword2["_readonly"] = _readonly] = "_readonly"; + const _require = _readonly + 1; + ContextualKeyword2[ContextualKeyword2["_require"] = _require] = "_require"; + const _satisfies = _require + 1; + ContextualKeyword2[ContextualKeyword2["_satisfies"] = _satisfies] = "_satisfies"; + const _set = _satisfies + 1; + ContextualKeyword2[ContextualKeyword2["_set"] = _set] = "_set"; + const _static = _set + 1; + ContextualKeyword2[ContextualKeyword2["_static"] = _static] = "_static"; + const _symbol = _static + 1; + ContextualKeyword2[ContextualKeyword2["_symbol"] = _symbol] = "_symbol"; + const _type = _symbol + 1; + ContextualKeyword2[ContextualKeyword2["_type"] = _type] = "_type"; + const _unique = _type + 1; + ContextualKeyword2[ContextualKeyword2["_unique"] = _unique] = "_unique"; + const _using = _unique + 1; + ContextualKeyword2[ContextualKeyword2["_using"] = _using] = "_using"; + })(ContextualKeyword || (exports2.ContextualKeyword = ContextualKeyword = {})); + } +}); + +// node_modules/sucrase/dist/parser/tokenizer/types.js +var require_types = __commonJS({ + "node_modules/sucrase/dist/parser/tokenizer/types.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var TokenType; + (function(TokenType2) { + const PRECEDENCE_MASK = 15; + TokenType2[TokenType2["PRECEDENCE_MASK"] = PRECEDENCE_MASK] = "PRECEDENCE_MASK"; + const IS_KEYWORD = 1 << 4; + TokenType2[TokenType2["IS_KEYWORD"] = IS_KEYWORD] = "IS_KEYWORD"; + const IS_ASSIGN = 1 << 5; + TokenType2[TokenType2["IS_ASSIGN"] = IS_ASSIGN] = "IS_ASSIGN"; + const IS_RIGHT_ASSOCIATIVE = 1 << 6; + TokenType2[TokenType2["IS_RIGHT_ASSOCIATIVE"] = IS_RIGHT_ASSOCIATIVE] = "IS_RIGHT_ASSOCIATIVE"; + const IS_PREFIX = 1 << 7; + TokenType2[TokenType2["IS_PREFIX"] = IS_PREFIX] = "IS_PREFIX"; + const IS_POSTFIX = 1 << 8; + TokenType2[TokenType2["IS_POSTFIX"] = IS_POSTFIX] = "IS_POSTFIX"; + const IS_EXPRESSION_START = 1 << 9; + TokenType2[TokenType2["IS_EXPRESSION_START"] = IS_EXPRESSION_START] = "IS_EXPRESSION_START"; + const num = 512; + TokenType2[TokenType2["num"] = num] = "num"; + const bigint = 1536; + TokenType2[TokenType2["bigint"] = bigint] = "bigint"; + const decimal = 2560; + TokenType2[TokenType2["decimal"] = decimal] = "decimal"; + const regexp3 = 3584; + TokenType2[TokenType2["regexp"] = regexp3] = "regexp"; + const string2 = 4608; + TokenType2[TokenType2["string"] = string2] = "string"; + const name = 5632; + TokenType2[TokenType2["name"] = name] = "name"; + const eof = 6144; + TokenType2[TokenType2["eof"] = eof] = "eof"; + const bracketL = 7680; + TokenType2[TokenType2["bracketL"] = bracketL] = "bracketL"; + const bracketR = 8192; + TokenType2[TokenType2["bracketR"] = bracketR] = "bracketR"; + const braceL = 9728; + TokenType2[TokenType2["braceL"] = braceL] = "braceL"; + const braceBarL = 10752; + TokenType2[TokenType2["braceBarL"] = braceBarL] = "braceBarL"; + const braceR = 11264; + TokenType2[TokenType2["braceR"] = braceR] = "braceR"; + const braceBarR = 12288; + TokenType2[TokenType2["braceBarR"] = braceBarR] = "braceBarR"; + const parenL = 13824; + TokenType2[TokenType2["parenL"] = parenL] = "parenL"; + const parenR = 14336; + TokenType2[TokenType2["parenR"] = parenR] = "parenR"; + const comma = 15360; + TokenType2[TokenType2["comma"] = comma] = "comma"; + const semi = 16384; + TokenType2[TokenType2["semi"] = semi] = "semi"; + const colon = 17408; + TokenType2[TokenType2["colon"] = colon] = "colon"; + const doubleColon = 18432; + TokenType2[TokenType2["doubleColon"] = doubleColon] = "doubleColon"; + const dot = 19456; + TokenType2[TokenType2["dot"] = dot] = "dot"; + const question = 20480; + TokenType2[TokenType2["question"] = question] = "question"; + const questionDot = 21504; + TokenType2[TokenType2["questionDot"] = questionDot] = "questionDot"; + const arrow2 = 22528; + TokenType2[TokenType2["arrow"] = arrow2] = "arrow"; + const template = 23552; + TokenType2[TokenType2["template"] = template] = "template"; + const ellipsis = 24576; + TokenType2[TokenType2["ellipsis"] = ellipsis] = "ellipsis"; + const backQuote = 25600; + TokenType2[TokenType2["backQuote"] = backQuote] = "backQuote"; + const dollarBraceL = 27136; + TokenType2[TokenType2["dollarBraceL"] = dollarBraceL] = "dollarBraceL"; + const at = 27648; + TokenType2[TokenType2["at"] = at] = "at"; + const hash2 = 29184; + TokenType2[TokenType2["hash"] = hash2] = "hash"; + const eq = 29728; + TokenType2[TokenType2["eq"] = eq] = "eq"; + const assign2 = 30752; + TokenType2[TokenType2["assign"] = assign2] = "assign"; + const preIncDec = 32640; + TokenType2[TokenType2["preIncDec"] = preIncDec] = "preIncDec"; + const postIncDec = 33664; + TokenType2[TokenType2["postIncDec"] = postIncDec] = "postIncDec"; + const bang = 34432; + TokenType2[TokenType2["bang"] = bang] = "bang"; + const tilde = 35456; + TokenType2[TokenType2["tilde"] = tilde] = "tilde"; + const pipeline = 35841; + TokenType2[TokenType2["pipeline"] = pipeline] = "pipeline"; + const nullishCoalescing = 36866; + TokenType2[TokenType2["nullishCoalescing"] = nullishCoalescing] = "nullishCoalescing"; + const logicalOR = 37890; + TokenType2[TokenType2["logicalOR"] = logicalOR] = "logicalOR"; + const logicalAND = 38915; + TokenType2[TokenType2["logicalAND"] = logicalAND] = "logicalAND"; + const bitwiseOR = 39940; + TokenType2[TokenType2["bitwiseOR"] = bitwiseOR] = "bitwiseOR"; + const bitwiseXOR = 40965; + TokenType2[TokenType2["bitwiseXOR"] = bitwiseXOR] = "bitwiseXOR"; + const bitwiseAND = 41990; + TokenType2[TokenType2["bitwiseAND"] = bitwiseAND] = "bitwiseAND"; + const equality = 43015; + TokenType2[TokenType2["equality"] = equality] = "equality"; + const lessThan = 44040; + TokenType2[TokenType2["lessThan"] = lessThan] = "lessThan"; + const greaterThan = 45064; + TokenType2[TokenType2["greaterThan"] = greaterThan] = "greaterThan"; + const relationalOrEqual = 46088; + TokenType2[TokenType2["relationalOrEqual"] = relationalOrEqual] = "relationalOrEqual"; + const bitShiftL = 47113; + TokenType2[TokenType2["bitShiftL"] = bitShiftL] = "bitShiftL"; + const bitShiftR = 48137; + TokenType2[TokenType2["bitShiftR"] = bitShiftR] = "bitShiftR"; + const plus = 49802; + TokenType2[TokenType2["plus"] = plus] = "plus"; + const minus = 50826; + TokenType2[TokenType2["minus"] = minus] = "minus"; + const modulo = 51723; + TokenType2[TokenType2["modulo"] = modulo] = "modulo"; + const star = 52235; + TokenType2[TokenType2["star"] = star] = "star"; + const slash = 53259; + TokenType2[TokenType2["slash"] = slash] = "slash"; + const exponent = 54348; + TokenType2[TokenType2["exponent"] = exponent] = "exponent"; + const jsxName = 55296; + TokenType2[TokenType2["jsxName"] = jsxName] = "jsxName"; + const jsxText = 56320; + TokenType2[TokenType2["jsxText"] = jsxText] = "jsxText"; + const jsxEmptyText = 57344; + TokenType2[TokenType2["jsxEmptyText"] = jsxEmptyText] = "jsxEmptyText"; + const jsxTagStart = 58880; + TokenType2[TokenType2["jsxTagStart"] = jsxTagStart] = "jsxTagStart"; + const jsxTagEnd = 59392; + TokenType2[TokenType2["jsxTagEnd"] = jsxTagEnd] = "jsxTagEnd"; + const typeParameterStart = 60928; + TokenType2[TokenType2["typeParameterStart"] = typeParameterStart] = "typeParameterStart"; + const nonNullAssertion = 61440; + TokenType2[TokenType2["nonNullAssertion"] = nonNullAssertion] = "nonNullAssertion"; + const _break = 62480; + TokenType2[TokenType2["_break"] = _break] = "_break"; + const _case = 63504; + TokenType2[TokenType2["_case"] = _case] = "_case"; + const _catch = 64528; + TokenType2[TokenType2["_catch"] = _catch] = "_catch"; + const _continue = 65552; + TokenType2[TokenType2["_continue"] = _continue] = "_continue"; + const _debugger = 66576; + TokenType2[TokenType2["_debugger"] = _debugger] = "_debugger"; + const _default2 = 67600; + TokenType2[TokenType2["_default"] = _default2] = "_default"; + const _do = 68624; + TokenType2[TokenType2["_do"] = _do] = "_do"; + const _else = 69648; + TokenType2[TokenType2["_else"] = _else] = "_else"; + const _finally = 70672; + TokenType2[TokenType2["_finally"] = _finally] = "_finally"; + const _for = 71696; + TokenType2[TokenType2["_for"] = _for] = "_for"; + const _function = 73232; + TokenType2[TokenType2["_function"] = _function] = "_function"; + const _if = 73744; + TokenType2[TokenType2["_if"] = _if] = "_if"; + const _return = 74768; + TokenType2[TokenType2["_return"] = _return] = "_return"; + const _switch = 75792; + TokenType2[TokenType2["_switch"] = _switch] = "_switch"; + const _throw = 77456; + TokenType2[TokenType2["_throw"] = _throw] = "_throw"; + const _try = 77840; + TokenType2[TokenType2["_try"] = _try] = "_try"; + const _var = 78864; + TokenType2[TokenType2["_var"] = _var] = "_var"; + const _let = 79888; + TokenType2[TokenType2["_let"] = _let] = "_let"; + const _const = 80912; + TokenType2[TokenType2["_const"] = _const] = "_const"; + const _while = 81936; + TokenType2[TokenType2["_while"] = _while] = "_while"; + const _with = 82960; + TokenType2[TokenType2["_with"] = _with] = "_with"; + const _new = 84496; + TokenType2[TokenType2["_new"] = _new] = "_new"; + const _this = 85520; + TokenType2[TokenType2["_this"] = _this] = "_this"; + const _super = 86544; + TokenType2[TokenType2["_super"] = _super] = "_super"; + const _class = 87568; + TokenType2[TokenType2["_class"] = _class] = "_class"; + const _extends2 = 88080; + TokenType2[TokenType2["_extends"] = _extends2] = "_extends"; + const _export = 89104; + TokenType2[TokenType2["_export"] = _export] = "_export"; + const _import = 90640; + TokenType2[TokenType2["_import"] = _import] = "_import"; + const _yield = 91664; + TokenType2[TokenType2["_yield"] = _yield] = "_yield"; + const _null = 92688; + TokenType2[TokenType2["_null"] = _null] = "_null"; + const _true = 93712; + TokenType2[TokenType2["_true"] = _true] = "_true"; + const _false = 94736; + TokenType2[TokenType2["_false"] = _false] = "_false"; + const _in = 95256; + TokenType2[TokenType2["_in"] = _in] = "_in"; + const _instanceof = 96280; + TokenType2[TokenType2["_instanceof"] = _instanceof] = "_instanceof"; + const _typeof2 = 97936; + TokenType2[TokenType2["_typeof"] = _typeof2] = "_typeof"; + const _void = 98960; + TokenType2[TokenType2["_void"] = _void] = "_void"; + const _delete = 99984; + TokenType2[TokenType2["_delete"] = _delete] = "_delete"; + const _async = 100880; + TokenType2[TokenType2["_async"] = _async] = "_async"; + const _get = 101904; + TokenType2[TokenType2["_get"] = _get] = "_get"; + const _set = 102928; + TokenType2[TokenType2["_set"] = _set] = "_set"; + const _declare = 103952; + TokenType2[TokenType2["_declare"] = _declare] = "_declare"; + const _readonly = 104976; + TokenType2[TokenType2["_readonly"] = _readonly] = "_readonly"; + const _abstract = 106e3; + TokenType2[TokenType2["_abstract"] = _abstract] = "_abstract"; + const _static = 107024; + TokenType2[TokenType2["_static"] = _static] = "_static"; + const _public = 107536; + TokenType2[TokenType2["_public"] = _public] = "_public"; + const _private = 108560; + TokenType2[TokenType2["_private"] = _private] = "_private"; + const _protected = 109584; + TokenType2[TokenType2["_protected"] = _protected] = "_protected"; + const _override = 110608; + TokenType2[TokenType2["_override"] = _override] = "_override"; + const _as = 112144; + TokenType2[TokenType2["_as"] = _as] = "_as"; + const _enum = 113168; + TokenType2[TokenType2["_enum"] = _enum] = "_enum"; + const _type = 114192; + TokenType2[TokenType2["_type"] = _type] = "_type"; + const _implements = 115216; + TokenType2[TokenType2["_implements"] = _implements] = "_implements"; + })(TokenType || (exports2.TokenType = TokenType = {})); + function formatTokenType(tokenType) { + switch (tokenType) { + case TokenType.num: + return "num"; + case TokenType.bigint: + return "bigint"; + case TokenType.decimal: + return "decimal"; + case TokenType.regexp: + return "regexp"; + case TokenType.string: + return "string"; + case TokenType.name: + return "name"; + case TokenType.eof: + return "eof"; + case TokenType.bracketL: + return "["; + case TokenType.bracketR: + return "]"; + case TokenType.braceL: + return "{"; + case TokenType.braceBarL: + return "{|"; + case TokenType.braceR: + return "}"; + case TokenType.braceBarR: + return "|}"; + case TokenType.parenL: + return "("; + case TokenType.parenR: + return ")"; + case TokenType.comma: + return ","; + case TokenType.semi: + return ";"; + case TokenType.colon: + return ":"; + case TokenType.doubleColon: + return "::"; + case TokenType.dot: + return "."; + case TokenType.question: + return "?"; + case TokenType.questionDot: + return "?."; + case TokenType.arrow: + return "=>"; + case TokenType.template: + return "template"; + case TokenType.ellipsis: + return "..."; + case TokenType.backQuote: + return "`"; + case TokenType.dollarBraceL: + return "${"; + case TokenType.at: + return "@"; + case TokenType.hash: + return "#"; + case TokenType.eq: + return "="; + case TokenType.assign: + return "_="; + case TokenType.preIncDec: + return "++/--"; + case TokenType.postIncDec: + return "++/--"; + case TokenType.bang: + return "!"; + case TokenType.tilde: + return "~"; + case TokenType.pipeline: + return "|>"; + case TokenType.nullishCoalescing: + return "??"; + case TokenType.logicalOR: + return "||"; + case TokenType.logicalAND: + return "&&"; + case TokenType.bitwiseOR: + return "|"; + case TokenType.bitwiseXOR: + return "^"; + case TokenType.bitwiseAND: + return "&"; + case TokenType.equality: + return "==/!="; + case TokenType.lessThan: + return "<"; + case TokenType.greaterThan: + return ">"; + case TokenType.relationalOrEqual: + return "<=/>="; + case TokenType.bitShiftL: + return "<<"; + case TokenType.bitShiftR: + return ">>/>>>"; + case TokenType.plus: + return "+"; + case TokenType.minus: + return "-"; + case TokenType.modulo: + return "%"; + case TokenType.star: + return "*"; + case TokenType.slash: + return "/"; + case TokenType.exponent: + return "**"; + case TokenType.jsxName: + return "jsxName"; + case TokenType.jsxText: + return "jsxText"; + case TokenType.jsxEmptyText: + return "jsxEmptyText"; + case TokenType.jsxTagStart: + return "jsxTagStart"; + case TokenType.jsxTagEnd: + return "jsxTagEnd"; + case TokenType.typeParameterStart: + return "typeParameterStart"; + case TokenType.nonNullAssertion: + return "nonNullAssertion"; + case TokenType._break: + return "break"; + case TokenType._case: + return "case"; + case TokenType._catch: + return "catch"; + case TokenType._continue: + return "continue"; + case TokenType._debugger: + return "debugger"; + case TokenType._default: + return "default"; + case TokenType._do: + return "do"; + case TokenType._else: + return "else"; + case TokenType._finally: + return "finally"; + case TokenType._for: + return "for"; + case TokenType._function: + return "function"; + case TokenType._if: + return "if"; + case TokenType._return: + return "return"; + case TokenType._switch: + return "switch"; + case TokenType._throw: + return "throw"; + case TokenType._try: + return "try"; + case TokenType._var: + return "var"; + case TokenType._let: + return "let"; + case TokenType._const: + return "const"; + case TokenType._while: + return "while"; + case TokenType._with: + return "with"; + case TokenType._new: + return "new"; + case TokenType._this: + return "this"; + case TokenType._super: + return "super"; + case TokenType._class: + return "class"; + case TokenType._extends: + return "extends"; + case TokenType._export: + return "export"; + case TokenType._import: + return "import"; + case TokenType._yield: + return "yield"; + case TokenType._null: + return "null"; + case TokenType._true: + return "true"; + case TokenType._false: + return "false"; + case TokenType._in: + return "in"; + case TokenType._instanceof: + return "instanceof"; + case TokenType._typeof: + return "typeof"; + case TokenType._void: + return "void"; + case TokenType._delete: + return "delete"; + case TokenType._async: + return "async"; + case TokenType._get: + return "get"; + case TokenType._set: + return "set"; + case TokenType._declare: + return "declare"; + case TokenType._readonly: + return "readonly"; + case TokenType._abstract: + return "abstract"; + case TokenType._static: + return "static"; + case TokenType._public: + return "public"; + case TokenType._private: + return "private"; + case TokenType._protected: + return "protected"; + case TokenType._override: + return "override"; + case TokenType._as: + return "as"; + case TokenType._enum: + return "enum"; + case TokenType._type: + return "type"; + case TokenType._implements: + return "implements"; + default: + return ""; + } + } + exports2.formatTokenType = formatTokenType; + } +}); + +// node_modules/sucrase/dist/parser/tokenizer/state.js +var require_state = __commonJS({ + "node_modules/sucrase/dist/parser/tokenizer/state.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _keywords = require_keywords(); + var _types = require_types(); + var Scope = class { + constructor(startTokenIndex, endTokenIndex, isFunctionScope) { + this.startTokenIndex = startTokenIndex; + this.endTokenIndex = endTokenIndex; + this.isFunctionScope = isFunctionScope; + } + }; + exports2.Scope = Scope; + var StateSnapshot = class { + constructor(potentialArrowAt, noAnonFunctionType, inDisallowConditionalTypesContext, tokensLength, scopesLength, pos, type, contextualKeyword, start, end2, isType, scopeDepth, error) { + ; + this.potentialArrowAt = potentialArrowAt; + this.noAnonFunctionType = noAnonFunctionType; + this.inDisallowConditionalTypesContext = inDisallowConditionalTypesContext; + this.tokensLength = tokensLength; + this.scopesLength = scopesLength; + this.pos = pos; + this.type = type; + this.contextualKeyword = contextualKeyword; + this.start = start; + this.end = end2; + this.isType = isType; + this.scopeDepth = scopeDepth; + this.error = error; + } + }; + exports2.StateSnapshot = StateSnapshot; + var State = class _State { + constructor() { + _State.prototype.__init.call(this); + _State.prototype.__init2.call(this); + _State.prototype.__init3.call(this); + _State.prototype.__init4.call(this); + _State.prototype.__init5.call(this); + _State.prototype.__init6.call(this); + _State.prototype.__init7.call(this); + _State.prototype.__init8.call(this); + _State.prototype.__init9.call(this); + _State.prototype.__init10.call(this); + _State.prototype.__init11.call(this); + _State.prototype.__init12.call(this); + _State.prototype.__init13.call(this); + } + // Used to signify the start of a potential arrow function + __init() { + this.potentialArrowAt = -1; + } + // Used by Flow to handle an edge case involving function type parsing. + __init2() { + this.noAnonFunctionType = false; + } + // Used by TypeScript to handle ambiguities when parsing conditional types. + __init3() { + this.inDisallowConditionalTypesContext = false; + } + // Token store. + __init4() { + this.tokens = []; + } + // Array of all observed scopes, ordered by their ending position. + __init5() { + this.scopes = []; + } + // The current position of the tokenizer in the input. + __init6() { + this.pos = 0; + } + // Information about the current token. + __init7() { + this.type = _types.TokenType.eof; + } + __init8() { + this.contextualKeyword = _keywords.ContextualKeyword.NONE; + } + __init9() { + this.start = 0; + } + __init10() { + this.end = 0; + } + __init11() { + this.isType = false; + } + __init12() { + this.scopeDepth = 0; + } + /** + * If the parser is in an error state, then the token is always tt.eof and all functions can + * keep executing but should be written so they don't get into an infinite loop in this situation. + * + * This approach, combined with the ability to snapshot and restore state, allows us to implement + * backtracking without exceptions and without needing to explicitly propagate error states + * everywhere. + */ + __init13() { + this.error = null; + } + snapshot() { + return new StateSnapshot( + this.potentialArrowAt, + this.noAnonFunctionType, + this.inDisallowConditionalTypesContext, + this.tokens.length, + this.scopes.length, + this.pos, + this.type, + this.contextualKeyword, + this.start, + this.end, + this.isType, + this.scopeDepth, + this.error + ); + } + restoreFromSnapshot(snapshot) { + this.potentialArrowAt = snapshot.potentialArrowAt; + this.noAnonFunctionType = snapshot.noAnonFunctionType; + this.inDisallowConditionalTypesContext = snapshot.inDisallowConditionalTypesContext; + this.tokens.length = snapshot.tokensLength; + this.scopes.length = snapshot.scopesLength; + this.pos = snapshot.pos; + this.type = snapshot.type; + this.contextualKeyword = snapshot.contextualKeyword; + this.start = snapshot.start; + this.end = snapshot.end; + this.isType = snapshot.isType; + this.scopeDepth = snapshot.scopeDepth; + this.error = snapshot.error; + } + }; + exports2.default = State; + } +}); + +// node_modules/sucrase/dist/parser/util/charcodes.js +var require_charcodes = __commonJS({ + "node_modules/sucrase/dist/parser/util/charcodes.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var charCodes; + (function(charCodes2) { + const backSpace = 8; + charCodes2[charCodes2["backSpace"] = backSpace] = "backSpace"; + const lineFeed = 10; + charCodes2[charCodes2["lineFeed"] = lineFeed] = "lineFeed"; + const tab = 9; + charCodes2[charCodes2["tab"] = tab] = "tab"; + const carriageReturn = 13; + charCodes2[charCodes2["carriageReturn"] = carriageReturn] = "carriageReturn"; + const shiftOut = 14; + charCodes2[charCodes2["shiftOut"] = shiftOut] = "shiftOut"; + const space = 32; + charCodes2[charCodes2["space"] = space] = "space"; + const exclamationMark = 33; + charCodes2[charCodes2["exclamationMark"] = exclamationMark] = "exclamationMark"; + const quotationMark = 34; + charCodes2[charCodes2["quotationMark"] = quotationMark] = "quotationMark"; + const numberSign = 35; + charCodes2[charCodes2["numberSign"] = numberSign] = "numberSign"; + const dollarSign = 36; + charCodes2[charCodes2["dollarSign"] = dollarSign] = "dollarSign"; + const percentSign = 37; + charCodes2[charCodes2["percentSign"] = percentSign] = "percentSign"; + const ampersand = 38; + charCodes2[charCodes2["ampersand"] = ampersand] = "ampersand"; + const apostrophe = 39; + charCodes2[charCodes2["apostrophe"] = apostrophe] = "apostrophe"; + const leftParenthesis = 40; + charCodes2[charCodes2["leftParenthesis"] = leftParenthesis] = "leftParenthesis"; + const rightParenthesis = 41; + charCodes2[charCodes2["rightParenthesis"] = rightParenthesis] = "rightParenthesis"; + const asterisk = 42; + charCodes2[charCodes2["asterisk"] = asterisk] = "asterisk"; + const plusSign = 43; + charCodes2[charCodes2["plusSign"] = plusSign] = "plusSign"; + const comma = 44; + charCodes2[charCodes2["comma"] = comma] = "comma"; + const dash = 45; + charCodes2[charCodes2["dash"] = dash] = "dash"; + const dot = 46; + charCodes2[charCodes2["dot"] = dot] = "dot"; + const slash = 47; + charCodes2[charCodes2["slash"] = slash] = "slash"; + const digit0 = 48; + charCodes2[charCodes2["digit0"] = digit0] = "digit0"; + const digit1 = 49; + charCodes2[charCodes2["digit1"] = digit1] = "digit1"; + const digit2 = 50; + charCodes2[charCodes2["digit2"] = digit2] = "digit2"; + const digit3 = 51; + charCodes2[charCodes2["digit3"] = digit3] = "digit3"; + const digit4 = 52; + charCodes2[charCodes2["digit4"] = digit4] = "digit4"; + const digit5 = 53; + charCodes2[charCodes2["digit5"] = digit5] = "digit5"; + const digit6 = 54; + charCodes2[charCodes2["digit6"] = digit6] = "digit6"; + const digit7 = 55; + charCodes2[charCodes2["digit7"] = digit7] = "digit7"; + const digit8 = 56; + charCodes2[charCodes2["digit8"] = digit8] = "digit8"; + const digit9 = 57; + charCodes2[charCodes2["digit9"] = digit9] = "digit9"; + const colon = 58; + charCodes2[charCodes2["colon"] = colon] = "colon"; + const semicolon = 59; + charCodes2[charCodes2["semicolon"] = semicolon] = "semicolon"; + const lessThan = 60; + charCodes2[charCodes2["lessThan"] = lessThan] = "lessThan"; + const equalsTo = 61; + charCodes2[charCodes2["equalsTo"] = equalsTo] = "equalsTo"; + const greaterThan = 62; + charCodes2[charCodes2["greaterThan"] = greaterThan] = "greaterThan"; + const questionMark = 63; + charCodes2[charCodes2["questionMark"] = questionMark] = "questionMark"; + const atSign = 64; + charCodes2[charCodes2["atSign"] = atSign] = "atSign"; + const uppercaseA = 65; + charCodes2[charCodes2["uppercaseA"] = uppercaseA] = "uppercaseA"; + const uppercaseB = 66; + charCodes2[charCodes2["uppercaseB"] = uppercaseB] = "uppercaseB"; + const uppercaseC = 67; + charCodes2[charCodes2["uppercaseC"] = uppercaseC] = "uppercaseC"; + const uppercaseD = 68; + charCodes2[charCodes2["uppercaseD"] = uppercaseD] = "uppercaseD"; + const uppercaseE = 69; + charCodes2[charCodes2["uppercaseE"] = uppercaseE] = "uppercaseE"; + const uppercaseF = 70; + charCodes2[charCodes2["uppercaseF"] = uppercaseF] = "uppercaseF"; + const uppercaseG = 71; + charCodes2[charCodes2["uppercaseG"] = uppercaseG] = "uppercaseG"; + const uppercaseH = 72; + charCodes2[charCodes2["uppercaseH"] = uppercaseH] = "uppercaseH"; + const uppercaseI = 73; + charCodes2[charCodes2["uppercaseI"] = uppercaseI] = "uppercaseI"; + const uppercaseJ = 74; + charCodes2[charCodes2["uppercaseJ"] = uppercaseJ] = "uppercaseJ"; + const uppercaseK = 75; + charCodes2[charCodes2["uppercaseK"] = uppercaseK] = "uppercaseK"; + const uppercaseL = 76; + charCodes2[charCodes2["uppercaseL"] = uppercaseL] = "uppercaseL"; + const uppercaseM = 77; + charCodes2[charCodes2["uppercaseM"] = uppercaseM] = "uppercaseM"; + const uppercaseN = 78; + charCodes2[charCodes2["uppercaseN"] = uppercaseN] = "uppercaseN"; + const uppercaseO = 79; + charCodes2[charCodes2["uppercaseO"] = uppercaseO] = "uppercaseO"; + const uppercaseP = 80; + charCodes2[charCodes2["uppercaseP"] = uppercaseP] = "uppercaseP"; + const uppercaseQ = 81; + charCodes2[charCodes2["uppercaseQ"] = uppercaseQ] = "uppercaseQ"; + const uppercaseR = 82; + charCodes2[charCodes2["uppercaseR"] = uppercaseR] = "uppercaseR"; + const uppercaseS = 83; + charCodes2[charCodes2["uppercaseS"] = uppercaseS] = "uppercaseS"; + const uppercaseT = 84; + charCodes2[charCodes2["uppercaseT"] = uppercaseT] = "uppercaseT"; + const uppercaseU = 85; + charCodes2[charCodes2["uppercaseU"] = uppercaseU] = "uppercaseU"; + const uppercaseV = 86; + charCodes2[charCodes2["uppercaseV"] = uppercaseV] = "uppercaseV"; + const uppercaseW = 87; + charCodes2[charCodes2["uppercaseW"] = uppercaseW] = "uppercaseW"; + const uppercaseX = 88; + charCodes2[charCodes2["uppercaseX"] = uppercaseX] = "uppercaseX"; + const uppercaseY = 89; + charCodes2[charCodes2["uppercaseY"] = uppercaseY] = "uppercaseY"; + const uppercaseZ = 90; + charCodes2[charCodes2["uppercaseZ"] = uppercaseZ] = "uppercaseZ"; + const leftSquareBracket = 91; + charCodes2[charCodes2["leftSquareBracket"] = leftSquareBracket] = "leftSquareBracket"; + const backslash = 92; + charCodes2[charCodes2["backslash"] = backslash] = "backslash"; + const rightSquareBracket = 93; + charCodes2[charCodes2["rightSquareBracket"] = rightSquareBracket] = "rightSquareBracket"; + const caret2 = 94; + charCodes2[charCodes2["caret"] = caret2] = "caret"; + const underscore = 95; + charCodes2[charCodes2["underscore"] = underscore] = "underscore"; + const graveAccent = 96; + charCodes2[charCodes2["graveAccent"] = graveAccent] = "graveAccent"; + const lowercaseA = 97; + charCodes2[charCodes2["lowercaseA"] = lowercaseA] = "lowercaseA"; + const lowercaseB = 98; + charCodes2[charCodes2["lowercaseB"] = lowercaseB] = "lowercaseB"; + const lowercaseC = 99; + charCodes2[charCodes2["lowercaseC"] = lowercaseC] = "lowercaseC"; + const lowercaseD = 100; + charCodes2[charCodes2["lowercaseD"] = lowercaseD] = "lowercaseD"; + const lowercaseE = 101; + charCodes2[charCodes2["lowercaseE"] = lowercaseE] = "lowercaseE"; + const lowercaseF = 102; + charCodes2[charCodes2["lowercaseF"] = lowercaseF] = "lowercaseF"; + const lowercaseG = 103; + charCodes2[charCodes2["lowercaseG"] = lowercaseG] = "lowercaseG"; + const lowercaseH = 104; + charCodes2[charCodes2["lowercaseH"] = lowercaseH] = "lowercaseH"; + const lowercaseI = 105; + charCodes2[charCodes2["lowercaseI"] = lowercaseI] = "lowercaseI"; + const lowercaseJ = 106; + charCodes2[charCodes2["lowercaseJ"] = lowercaseJ] = "lowercaseJ"; + const lowercaseK = 107; + charCodes2[charCodes2["lowercaseK"] = lowercaseK] = "lowercaseK"; + const lowercaseL = 108; + charCodes2[charCodes2["lowercaseL"] = lowercaseL] = "lowercaseL"; + const lowercaseM = 109; + charCodes2[charCodes2["lowercaseM"] = lowercaseM] = "lowercaseM"; + const lowercaseN = 110; + charCodes2[charCodes2["lowercaseN"] = lowercaseN] = "lowercaseN"; + const lowercaseO = 111; + charCodes2[charCodes2["lowercaseO"] = lowercaseO] = "lowercaseO"; + const lowercaseP = 112; + charCodes2[charCodes2["lowercaseP"] = lowercaseP] = "lowercaseP"; + const lowercaseQ = 113; + charCodes2[charCodes2["lowercaseQ"] = lowercaseQ] = "lowercaseQ"; + const lowercaseR = 114; + charCodes2[charCodes2["lowercaseR"] = lowercaseR] = "lowercaseR"; + const lowercaseS = 115; + charCodes2[charCodes2["lowercaseS"] = lowercaseS] = "lowercaseS"; + const lowercaseT = 116; + charCodes2[charCodes2["lowercaseT"] = lowercaseT] = "lowercaseT"; + const lowercaseU = 117; + charCodes2[charCodes2["lowercaseU"] = lowercaseU] = "lowercaseU"; + const lowercaseV = 118; + charCodes2[charCodes2["lowercaseV"] = lowercaseV] = "lowercaseV"; + const lowercaseW = 119; + charCodes2[charCodes2["lowercaseW"] = lowercaseW] = "lowercaseW"; + const lowercaseX = 120; + charCodes2[charCodes2["lowercaseX"] = lowercaseX] = "lowercaseX"; + const lowercaseY = 121; + charCodes2[charCodes2["lowercaseY"] = lowercaseY] = "lowercaseY"; + const lowercaseZ = 122; + charCodes2[charCodes2["lowercaseZ"] = lowercaseZ] = "lowercaseZ"; + const leftCurlyBrace = 123; + charCodes2[charCodes2["leftCurlyBrace"] = leftCurlyBrace] = "leftCurlyBrace"; + const verticalBar = 124; + charCodes2[charCodes2["verticalBar"] = verticalBar] = "verticalBar"; + const rightCurlyBrace = 125; + charCodes2[charCodes2["rightCurlyBrace"] = rightCurlyBrace] = "rightCurlyBrace"; + const tilde = 126; + charCodes2[charCodes2["tilde"] = tilde] = "tilde"; + const nonBreakingSpace = 160; + charCodes2[charCodes2["nonBreakingSpace"] = nonBreakingSpace] = "nonBreakingSpace"; + const oghamSpaceMark = 5760; + charCodes2[charCodes2["oghamSpaceMark"] = oghamSpaceMark] = "oghamSpaceMark"; + const lineSeparator = 8232; + charCodes2[charCodes2["lineSeparator"] = lineSeparator] = "lineSeparator"; + const paragraphSeparator = 8233; + charCodes2[charCodes2["paragraphSeparator"] = paragraphSeparator] = "paragraphSeparator"; + })(charCodes || (exports2.charCodes = charCodes = {})); + function isDigit(code) { + return code >= charCodes.digit0 && code <= charCodes.digit9 || code >= charCodes.lowercaseA && code <= charCodes.lowercaseF || code >= charCodes.uppercaseA && code <= charCodes.uppercaseF; + } + exports2.isDigit = isDigit; + } +}); + +// node_modules/sucrase/dist/parser/traverser/base.js +var require_base = __commonJS({ + "node_modules/sucrase/dist/parser/traverser/base.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _state = require_state(); + var _state2 = _interopRequireDefault(_state); + var _charcodes = require_charcodes(); + exports2.isJSXEnabled; + exports2.isTypeScriptEnabled; + exports2.isFlowEnabled; + exports2.state; + exports2.input; + exports2.nextContextId; + function getNextContextId() { + return exports2.nextContextId++; + } + exports2.getNextContextId = getNextContextId; + function augmentError(error) { + if ("pos" in error) { + const loc = locationForIndex(error.pos); + error.message += ` (${loc.line}:${loc.column})`; + error.loc = loc; + } + return error; + } + exports2.augmentError = augmentError; + var Loc = class { + constructor(line2, column2) { + this.line = line2; + this.column = column2; + } + }; + exports2.Loc = Loc; + function locationForIndex(pos) { + let line2 = 1; + let column2 = 1; + for (let i4 = 0; i4 < pos; i4++) { + if (exports2.input.charCodeAt(i4) === _charcodes.charCodes.lineFeed) { + line2++; + column2 = 1; + } else { + column2++; + } + } + return new Loc(line2, column2); + } + exports2.locationForIndex = locationForIndex; + function initParser(inputCode, isJSXEnabledArg, isTypeScriptEnabledArg, isFlowEnabledArg) { + exports2.input = inputCode; + exports2.state = new (0, _state2.default)(); + exports2.nextContextId = 1; + exports2.isJSXEnabled = isJSXEnabledArg; + exports2.isTypeScriptEnabled = isTypeScriptEnabledArg; + exports2.isFlowEnabled = isFlowEnabledArg; + } + exports2.initParser = initParser; + } +}); + +// node_modules/sucrase/dist/parser/traverser/util.js +var require_util = __commonJS({ + "node_modules/sucrase/dist/parser/traverser/util.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _index = require_tokenizer(); + var _types = require_types(); + var _charcodes = require_charcodes(); + var _base = require_base(); + function isContextual(contextualKeyword) { + return _base.state.contextualKeyword === contextualKeyword; + } + exports2.isContextual = isContextual; + function isLookaheadContextual(contextualKeyword) { + const l4 = _index.lookaheadTypeAndKeyword.call(void 0); + return l4.type === _types.TokenType.name && l4.contextualKeyword === contextualKeyword; + } + exports2.isLookaheadContextual = isLookaheadContextual; + function eatContextual(contextualKeyword) { + return _base.state.contextualKeyword === contextualKeyword && _index.eat.call(void 0, _types.TokenType.name); + } + exports2.eatContextual = eatContextual; + function expectContextual(contextualKeyword) { + if (!eatContextual(contextualKeyword)) { + unexpected(); + } + } + exports2.expectContextual = expectContextual; + function canInsertSemicolon() { + return _index.match.call(void 0, _types.TokenType.eof) || _index.match.call(void 0, _types.TokenType.braceR) || hasPrecedingLineBreak(); + } + exports2.canInsertSemicolon = canInsertSemicolon; + function hasPrecedingLineBreak() { + const prevToken = _base.state.tokens[_base.state.tokens.length - 1]; + const lastTokEnd = prevToken ? prevToken.end : 0; + for (let i4 = lastTokEnd; i4 < _base.state.start; i4++) { + const code = _base.input.charCodeAt(i4); + if (code === _charcodes.charCodes.lineFeed || code === _charcodes.charCodes.carriageReturn || code === 8232 || code === 8233) { + return true; + } + } + return false; + } + exports2.hasPrecedingLineBreak = hasPrecedingLineBreak; + function hasFollowingLineBreak() { + const nextStart = _index.nextTokenStart.call(void 0); + for (let i4 = _base.state.end; i4 < nextStart; i4++) { + const code = _base.input.charCodeAt(i4); + if (code === _charcodes.charCodes.lineFeed || code === _charcodes.charCodes.carriageReturn || code === 8232 || code === 8233) { + return true; + } + } + return false; + } + exports2.hasFollowingLineBreak = hasFollowingLineBreak; + function isLineTerminator() { + return _index.eat.call(void 0, _types.TokenType.semi) || canInsertSemicolon(); + } + exports2.isLineTerminator = isLineTerminator; + function semicolon() { + if (!isLineTerminator()) { + unexpected('Unexpected token, expected ";"'); + } + } + exports2.semicolon = semicolon; + function expect(type) { + const matched = _index.eat.call(void 0, type); + if (!matched) { + unexpected(`Unexpected token, expected "${_types.formatTokenType.call(void 0, type)}"`); + } + } + exports2.expect = expect; + function unexpected(message = "Unexpected token", pos = _base.state.start) { + if (_base.state.error) { + return; + } + const err = new SyntaxError(message); + err.pos = pos; + _base.state.error = err; + _base.state.pos = _base.input.length; + _index.finishToken.call(void 0, _types.TokenType.eof); + } + exports2.unexpected = unexpected; + } +}); + +// node_modules/sucrase/dist/parser/util/whitespace.js +var require_whitespace = __commonJS({ + "node_modules/sucrase/dist/parser/util/whitespace.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _charcodes = require_charcodes(); + var WHITESPACE_CHARS = [ + 9, + 11, + 12, + _charcodes.charCodes.space, + _charcodes.charCodes.nonBreakingSpace, + _charcodes.charCodes.oghamSpaceMark, + 8192, + // EN QUAD + 8193, + // EM QUAD + 8194, + // EN SPACE + 8195, + // EM SPACE + 8196, + // THREE-PER-EM SPACE + 8197, + // FOUR-PER-EM SPACE + 8198, + // SIX-PER-EM SPACE + 8199, + // FIGURE SPACE + 8200, + // PUNCTUATION SPACE + 8201, + // THIN SPACE + 8202, + // HAIR SPACE + 8239, + // NARROW NO-BREAK SPACE + 8287, + // MEDIUM MATHEMATICAL SPACE + 12288, + // IDEOGRAPHIC SPACE + 65279 + // ZERO WIDTH NO-BREAK SPACE + ]; + exports2.WHITESPACE_CHARS = WHITESPACE_CHARS; + var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g; + exports2.skipWhiteSpace = skipWhiteSpace; + var IS_WHITESPACE = new Uint8Array(65536); + exports2.IS_WHITESPACE = IS_WHITESPACE; + for (const char2 of exports2.WHITESPACE_CHARS) { + exports2.IS_WHITESPACE[char2] = 1; + } + } +}); + +// node_modules/sucrase/dist/parser/util/identifier.js +var require_identifier = __commonJS({ + "node_modules/sucrase/dist/parser/util/identifier.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _charcodes = require_charcodes(); + var _whitespace = require_whitespace(); + function computeIsIdentifierChar(code) { + if (code < 48) return code === 36; + if (code < 58) return true; + if (code < 65) return false; + if (code < 91) return true; + if (code < 97) return code === 95; + if (code < 123) return true; + if (code < 128) return false; + throw new Error("Should not be called with non-ASCII char code."); + } + var IS_IDENTIFIER_CHAR = new Uint8Array(65536); + exports2.IS_IDENTIFIER_CHAR = IS_IDENTIFIER_CHAR; + for (let i4 = 0; i4 < 128; i4++) { + exports2.IS_IDENTIFIER_CHAR[i4] = computeIsIdentifierChar(i4) ? 1 : 0; + } + for (let i4 = 128; i4 < 65536; i4++) { + exports2.IS_IDENTIFIER_CHAR[i4] = 1; + } + for (const whitespaceChar of _whitespace.WHITESPACE_CHARS) { + exports2.IS_IDENTIFIER_CHAR[whitespaceChar] = 0; + } + exports2.IS_IDENTIFIER_CHAR[8232] = 0; + exports2.IS_IDENTIFIER_CHAR[8233] = 0; + var IS_IDENTIFIER_START = exports2.IS_IDENTIFIER_CHAR.slice(); + exports2.IS_IDENTIFIER_START = IS_IDENTIFIER_START; + for (let numChar = _charcodes.charCodes.digit0; numChar <= _charcodes.charCodes.digit9; numChar++) { + exports2.IS_IDENTIFIER_START[numChar] = 0; + } + } +}); + +// node_modules/sucrase/dist/parser/tokenizer/readWordTree.js +var require_readWordTree = __commonJS({ + "node_modules/sucrase/dist/parser/tokenizer/readWordTree.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _keywords = require_keywords(); + var _types = require_types(); + var READ_WORD_TREE = new Int32Array([ + // "" + -1, + 27, + 783, + 918, + 1755, + 2376, + 2862, + 3483, + -1, + 3699, + -1, + 4617, + 4752, + 4833, + 5130, + 5508, + 5940, + -1, + 6480, + 6939, + 7749, + 8181, + 8451, + 8613, + -1, + 8829, + -1, + // "a" + -1, + -1, + 54, + 243, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 432, + -1, + -1, + -1, + 675, + -1, + -1, + -1, + // "ab" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 81, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "abs" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 108, + -1, + -1, + -1, + -1, + -1, + -1, + // "abst" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 135, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "abstr" + -1, + 162, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "abstra" + -1, + -1, + -1, + 189, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "abstrac" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 216, + -1, + -1, + -1, + -1, + -1, + -1, + // "abstract" + _keywords.ContextualKeyword._abstract << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ac" + -1, + -1, + -1, + 270, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "acc" + -1, + -1, + -1, + -1, + -1, + 297, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "acce" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 324, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "acces" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 351, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "access" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 378, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "accesso" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 405, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "accessor" + _keywords.ContextualKeyword._accessor << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "as" + _keywords.ContextualKeyword._as << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 459, + -1, + -1, + -1, + -1, + -1, + 594, + -1, + // "ass" + -1, + -1, + -1, + -1, + -1, + 486, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "asse" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 513, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "asser" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 540, + -1, + -1, + -1, + -1, + -1, + -1, + // "assert" + _keywords.ContextualKeyword._assert << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 567, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "asserts" + _keywords.ContextualKeyword._asserts << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "asy" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 621, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "asyn" + -1, + -1, + -1, + 648, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "async" + _keywords.ContextualKeyword._async << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "aw" + -1, + 702, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "awa" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 729, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "awai" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 756, + -1, + -1, + -1, + -1, + -1, + -1, + // "await" + _keywords.ContextualKeyword._await << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "b" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 810, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "br" + -1, + -1, + -1, + -1, + -1, + 837, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "bre" + -1, + 864, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "brea" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 891, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "break" + (_types.TokenType._break << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "c" + -1, + 945, + -1, + -1, + -1, + -1, + -1, + -1, + 1107, + -1, + -1, + -1, + 1242, + -1, + -1, + 1350, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ca" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 972, + 1026, + -1, + -1, + -1, + -1, + -1, + -1, + // "cas" + -1, + -1, + -1, + -1, + -1, + 999, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "case" + (_types.TokenType._case << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "cat" + -1, + -1, + -1, + 1053, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "catc" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1080, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "catch" + (_types.TokenType._catch << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ch" + -1, + -1, + -1, + -1, + -1, + 1134, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "che" + -1, + -1, + -1, + 1161, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "chec" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1188, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "check" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1215, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "checks" + _keywords.ContextualKeyword._checks << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "cl" + -1, + 1269, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "cla" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1296, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "clas" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1323, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "class" + (_types.TokenType._class << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "co" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1377, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "con" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1404, + 1620, + -1, + -1, + -1, + -1, + -1, + -1, + // "cons" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1431, + -1, + -1, + -1, + -1, + -1, + -1, + // "const" + (_types.TokenType._const << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1458, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "constr" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1485, + -1, + -1, + -1, + -1, + -1, + // "constru" + -1, + -1, + -1, + 1512, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "construc" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1539, + -1, + -1, + -1, + -1, + -1, + -1, + // "construct" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1566, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "constructo" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1593, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "constructor" + _keywords.ContextualKeyword._constructor << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "cont" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1647, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "conti" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1674, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "contin" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1701, + -1, + -1, + -1, + -1, + -1, + // "continu" + -1, + -1, + -1, + -1, + -1, + 1728, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "continue" + (_types.TokenType._continue << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "d" + -1, + -1, + -1, + -1, + -1, + 1782, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2349, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "de" + -1, + -1, + 1809, + 1971, + -1, + -1, + 2106, + -1, + -1, + -1, + -1, + -1, + 2241, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "deb" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1836, + -1, + -1, + -1, + -1, + -1, + // "debu" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1863, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "debug" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1890, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "debugg" + -1, + -1, + -1, + -1, + -1, + 1917, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "debugge" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1944, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "debugger" + (_types.TokenType._debugger << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "dec" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1998, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "decl" + -1, + 2025, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "decla" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2052, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "declar" + -1, + -1, + -1, + -1, + -1, + 2079, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "declare" + _keywords.ContextualKeyword._declare << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "def" + -1, + 2133, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "defa" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2160, + -1, + -1, + -1, + -1, + -1, + // "defau" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2187, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "defaul" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2214, + -1, + -1, + -1, + -1, + -1, + -1, + // "default" + (_types.TokenType._default << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "del" + -1, + -1, + -1, + -1, + -1, + 2268, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "dele" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2295, + -1, + -1, + -1, + -1, + -1, + -1, + // "delet" + -1, + -1, + -1, + -1, + -1, + 2322, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "delete" + (_types.TokenType._delete << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "do" + (_types.TokenType._do << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "e" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2403, + -1, + 2484, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2565, + -1, + -1, + // "el" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2430, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "els" + -1, + -1, + -1, + -1, + -1, + 2457, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "else" + (_types.TokenType._else << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "en" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2511, + -1, + -1, + -1, + -1, + -1, + // "enu" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2538, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "enum" + _keywords.ContextualKeyword._enum << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ex" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2592, + -1, + -1, + -1, + 2727, + -1, + -1, + -1, + -1, + -1, + -1, + // "exp" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2619, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "expo" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2646, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "expor" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2673, + -1, + -1, + -1, + -1, + -1, + -1, + // "export" + (_types.TokenType._export << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2700, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "exports" + _keywords.ContextualKeyword._exports << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ext" + -1, + -1, + -1, + -1, + -1, + 2754, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "exte" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2781, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "exten" + -1, + -1, + -1, + -1, + 2808, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "extend" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2835, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "extends" + (_types.TokenType._extends << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "f" + -1, + 2889, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2997, + -1, + -1, + -1, + -1, + -1, + 3159, + -1, + -1, + 3213, + -1, + -1, + 3294, + -1, + -1, + -1, + -1, + -1, + // "fa" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2916, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fal" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2943, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fals" + -1, + -1, + -1, + -1, + -1, + 2970, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "false" + (_types.TokenType._false << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3024, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fin" + -1, + 3051, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fina" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3078, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "final" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3105, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "finall" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3132, + -1, + // "finally" + (_types.TokenType._finally << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fo" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3186, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "for" + (_types.TokenType._for << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fr" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fro" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3267, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "from" + _keywords.ContextualKeyword._from << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fu" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3321, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "fun" + -1, + -1, + -1, + 3348, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "func" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3375, + -1, + -1, + -1, + -1, + -1, + -1, + // "funct" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3402, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "functi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3429, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "functio" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3456, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "function" + (_types.TokenType._function << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "g" + -1, + -1, + -1, + -1, + -1, + 3510, + -1, + -1, + -1, + -1, + -1, + -1, + 3564, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ge" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3537, + -1, + -1, + -1, + -1, + -1, + -1, + // "get" + _keywords.ContextualKeyword._get << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "gl" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3591, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "glo" + -1, + -1, + 3618, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "glob" + -1, + 3645, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "globa" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "global" + _keywords.ContextualKeyword._global << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "i" + -1, + -1, + -1, + -1, + -1, + -1, + 3726, + -1, + -1, + -1, + -1, + -1, + -1, + 3753, + 4077, + -1, + -1, + -1, + -1, + 4590, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "if" + (_types.TokenType._if << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "im" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3780, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "imp" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3807, + -1, + -1, + 3996, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "impl" + -1, + -1, + -1, + -1, + -1, + 3834, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "imple" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3861, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "implem" + -1, + -1, + -1, + -1, + -1, + 3888, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "impleme" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3915, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "implemen" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3942, + -1, + -1, + -1, + -1, + -1, + -1, + // "implement" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3969, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "implements" + _keywords.ContextualKeyword._implements << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "impo" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4023, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "impor" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4050, + -1, + -1, + -1, + -1, + -1, + -1, + // "import" + (_types.TokenType._import << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "in" + (_types.TokenType._in << 1) + 1, + -1, + -1, + -1, + -1, + -1, + 4104, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4185, + 4401, + -1, + -1, + -1, + -1, + -1, + -1, + // "inf" + -1, + -1, + -1, + -1, + -1, + 4131, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "infe" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4158, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "infer" + _keywords.ContextualKeyword._infer << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ins" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4212, + -1, + -1, + -1, + -1, + -1, + -1, + // "inst" + -1, + 4239, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "insta" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4266, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "instan" + -1, + -1, + -1, + 4293, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "instanc" + -1, + -1, + -1, + -1, + -1, + 4320, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "instance" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4347, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "instanceo" + -1, + -1, + -1, + -1, + -1, + -1, + 4374, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "instanceof" + (_types.TokenType._instanceof << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "int" + -1, + -1, + -1, + -1, + -1, + 4428, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "inte" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4455, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "inter" + -1, + -1, + -1, + -1, + -1, + -1, + 4482, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "interf" + -1, + 4509, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "interfa" + -1, + -1, + -1, + 4536, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "interfac" + -1, + -1, + -1, + -1, + -1, + 4563, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "interface" + _keywords.ContextualKeyword._interface << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "is" + _keywords.ContextualKeyword._is << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "k" + -1, + -1, + -1, + -1, + -1, + 4644, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ke" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4671, + -1, + // "key" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4698, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "keyo" + -1, + -1, + -1, + -1, + -1, + -1, + 4725, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "keyof" + _keywords.ContextualKeyword._keyof << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "l" + -1, + -1, + -1, + -1, + -1, + 4779, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "le" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4806, + -1, + -1, + -1, + -1, + -1, + -1, + // "let" + (_types.TokenType._let << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "m" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4860, + -1, + -1, + -1, + -1, + -1, + 4995, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "mi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4887, + -1, + -1, + // "mix" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4914, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "mixi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4941, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "mixin" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4968, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "mixins" + _keywords.ContextualKeyword._mixins << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "mo" + -1, + -1, + -1, + -1, + 5022, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "mod" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5049, + -1, + -1, + -1, + -1, + -1, + // "modu" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5076, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "modul" + -1, + -1, + -1, + -1, + -1, + 5103, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "module" + _keywords.ContextualKeyword._module << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "n" + -1, + 5157, + -1, + -1, + -1, + 5373, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5427, + -1, + -1, + -1, + -1, + -1, + // "na" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5184, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "nam" + -1, + -1, + -1, + -1, + -1, + 5211, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "name" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5238, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "names" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5265, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "namesp" + -1, + 5292, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "namespa" + -1, + -1, + -1, + 5319, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "namespac" + -1, + -1, + -1, + -1, + -1, + 5346, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "namespace" + _keywords.ContextualKeyword._namespace << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ne" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5400, + -1, + -1, + -1, + // "new" + (_types.TokenType._new << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "nu" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5454, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "nul" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5481, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "null" + (_types.TokenType._null << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "o" + -1, + -1, + -1, + -1, + -1, + -1, + 5535, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5562, + -1, + -1, + -1, + -1, + 5697, + 5751, + -1, + -1, + -1, + -1, + // "of" + _keywords.ContextualKeyword._of << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "op" + -1, + 5589, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "opa" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5616, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "opaq" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5643, + -1, + -1, + -1, + -1, + -1, + // "opaqu" + -1, + -1, + -1, + -1, + -1, + 5670, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "opaque" + _keywords.ContextualKeyword._opaque << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ou" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5724, + -1, + -1, + -1, + -1, + -1, + -1, + // "out" + _keywords.ContextualKeyword._out << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ov" + -1, + -1, + -1, + -1, + -1, + 5778, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ove" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5805, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "over" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5832, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "overr" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5859, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "overri" + -1, + -1, + -1, + -1, + 5886, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "overrid" + -1, + -1, + -1, + -1, + -1, + 5913, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "override" + _keywords.ContextualKeyword._override << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "p" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5967, + -1, + -1, + 6345, + -1, + -1, + -1, + -1, + -1, + // "pr" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5994, + -1, + -1, + -1, + -1, + -1, + 6129, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "pri" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6021, + -1, + -1, + -1, + -1, + // "priv" + -1, + 6048, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "priva" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6075, + -1, + -1, + -1, + -1, + -1, + -1, + // "privat" + -1, + -1, + -1, + -1, + -1, + 6102, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "private" + _keywords.ContextualKeyword._private << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "pro" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6156, + -1, + -1, + -1, + -1, + -1, + -1, + // "prot" + -1, + -1, + -1, + -1, + -1, + 6183, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6318, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "prote" + -1, + -1, + -1, + 6210, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "protec" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6237, + -1, + -1, + -1, + -1, + -1, + -1, + // "protect" + -1, + -1, + -1, + -1, + -1, + 6264, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "protecte" + -1, + -1, + -1, + -1, + 6291, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "protected" + _keywords.ContextualKeyword._protected << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "proto" + _keywords.ContextualKeyword._proto << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "pu" + -1, + -1, + 6372, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "pub" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6399, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "publ" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6426, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "publi" + -1, + -1, + -1, + 6453, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "public" + _keywords.ContextualKeyword._public << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "r" + -1, + -1, + -1, + -1, + -1, + 6507, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "re" + -1, + 6534, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6696, + -1, + -1, + 6831, + -1, + -1, + -1, + -1, + -1, + -1, + // "rea" + -1, + -1, + -1, + -1, + 6561, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "read" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6588, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "reado" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6615, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "readon" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6642, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "readonl" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6669, + -1, + // "readonly" + _keywords.ContextualKeyword._readonly << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "req" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6723, + -1, + -1, + -1, + -1, + -1, + // "requ" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6750, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "requi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6777, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "requir" + -1, + -1, + -1, + -1, + -1, + 6804, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "require" + _keywords.ContextualKeyword._require << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ret" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6858, + -1, + -1, + -1, + -1, + -1, + // "retu" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6885, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "retur" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6912, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "return" + (_types.TokenType._return << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "s" + -1, + 6966, + -1, + -1, + -1, + 7182, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7236, + 7371, + -1, + 7479, + -1, + 7614, + -1, + // "sa" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6993, + -1, + -1, + -1, + -1, + -1, + -1, + // "sat" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7020, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "sati" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7047, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "satis" + -1, + -1, + -1, + -1, + -1, + -1, + 7074, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "satisf" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7101, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "satisfi" + -1, + -1, + -1, + -1, + -1, + 7128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "satisfie" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7155, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "satisfies" + _keywords.ContextualKeyword._satisfies << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "se" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7209, + -1, + -1, + -1, + -1, + -1, + -1, + // "set" + _keywords.ContextualKeyword._set << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "st" + -1, + 7263, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "sta" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7290, + -1, + -1, + -1, + -1, + -1, + -1, + // "stat" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7317, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "stati" + -1, + -1, + -1, + 7344, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "static" + _keywords.ContextualKeyword._static << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "su" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7398, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "sup" + -1, + -1, + -1, + -1, + -1, + 7425, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "supe" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7452, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "super" + (_types.TokenType._super << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "sw" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7506, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "swi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7533, + -1, + -1, + -1, + -1, + -1, + -1, + // "swit" + -1, + -1, + -1, + 7560, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "switc" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7587, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "switch" + (_types.TokenType._switch << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "sy" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7641, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "sym" + -1, + -1, + 7668, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "symb" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7695, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "symbo" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7722, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "symbol" + _keywords.ContextualKeyword._symbol << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "t" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7776, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7938, + -1, + -1, + -1, + -1, + -1, + -1, + 8046, + -1, + // "th" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7803, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7857, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "thi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7830, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "this" + (_types.TokenType._this << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "thr" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7884, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "thro" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7911, + -1, + -1, + -1, + // "throw" + (_types.TokenType._throw << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "tr" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7965, + -1, + -1, + -1, + 8019, + -1, + // "tru" + -1, + -1, + -1, + -1, + -1, + 7992, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "true" + (_types.TokenType._true << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "try" + (_types.TokenType._try << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "ty" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8073, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "typ" + -1, + -1, + -1, + -1, + -1, + 8100, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "type" + _keywords.ContextualKeyword._type << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8127, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "typeo" + -1, + -1, + -1, + -1, + -1, + -1, + 8154, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "typeof" + (_types.TokenType._typeof << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "u" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8208, + -1, + -1, + -1, + -1, + 8343, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "un" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8235, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "uni" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8262, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "uniq" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8289, + -1, + -1, + -1, + -1, + -1, + // "uniqu" + -1, + -1, + -1, + -1, + -1, + 8316, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "unique" + _keywords.ContextualKeyword._unique << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "us" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8370, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "usi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8397, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "usin" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8424, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "using" + _keywords.ContextualKeyword._using << 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "v" + -1, + 8478, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8532, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "va" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8505, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "var" + (_types.TokenType._var << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "vo" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8559, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "voi" + -1, + -1, + -1, + -1, + 8586, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "void" + (_types.TokenType._void << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "w" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8640, + 8748, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "wh" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8667, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "whi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8694, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "whil" + -1, + -1, + -1, + -1, + -1, + 8721, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "while" + (_types.TokenType._while << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "wi" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8775, + -1, + -1, + -1, + -1, + -1, + -1, + // "wit" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8802, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "with" + (_types.TokenType._with << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "y" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8856, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "yi" + -1, + -1, + -1, + -1, + -1, + 8883, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "yie" + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8910, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "yiel" + -1, + -1, + -1, + -1, + 8937, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + // "yield" + (_types.TokenType._yield << 1) + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ]); + exports2.READ_WORD_TREE = READ_WORD_TREE; + } +}); + +// node_modules/sucrase/dist/parser/tokenizer/readWord.js +var require_readWord = __commonJS({ + "node_modules/sucrase/dist/parser/tokenizer/readWord.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _base = require_base(); + var _charcodes = require_charcodes(); + var _identifier = require_identifier(); + var _index = require_tokenizer(); + var _readWordTree = require_readWordTree(); + var _types = require_types(); + function readWord() { + let treePos = 0; + let code = 0; + let pos = _base.state.pos; + while (pos < _base.input.length) { + code = _base.input.charCodeAt(pos); + if (code < _charcodes.charCodes.lowercaseA || code > _charcodes.charCodes.lowercaseZ) { + break; + } + const next2 = _readWordTree.READ_WORD_TREE[treePos + (code - _charcodes.charCodes.lowercaseA) + 1]; + if (next2 === -1) { + break; + } else { + treePos = next2; + pos++; + } + } + const keywordValue = _readWordTree.READ_WORD_TREE[treePos]; + if (keywordValue > -1 && !_identifier.IS_IDENTIFIER_CHAR[code]) { + _base.state.pos = pos; + if (keywordValue & 1) { + _index.finishToken.call(void 0, keywordValue >>> 1); + } else { + _index.finishToken.call(void 0, _types.TokenType.name, keywordValue >>> 1); + } + return; + } + while (pos < _base.input.length) { + const ch = _base.input.charCodeAt(pos); + if (_identifier.IS_IDENTIFIER_CHAR[ch]) { + pos++; + } else if (ch === _charcodes.charCodes.backslash) { + pos += 2; + if (_base.input.charCodeAt(pos) === _charcodes.charCodes.leftCurlyBrace) { + while (pos < _base.input.length && _base.input.charCodeAt(pos) !== _charcodes.charCodes.rightCurlyBrace) { + pos++; + } + pos++; + } + } else if (ch === _charcodes.charCodes.atSign && _base.input.charCodeAt(pos + 1) === _charcodes.charCodes.atSign) { + pos += 2; + } else { + break; + } + } + _base.state.pos = pos; + _index.finishToken.call(void 0, _types.TokenType.name); + } + exports2.default = readWord; + } +}); + +// node_modules/sucrase/dist/parser/tokenizer/index.js +var require_tokenizer = __commonJS({ + "node_modules/sucrase/dist/parser/tokenizer/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _base = require_base(); + var _util = require_util(); + var _charcodes = require_charcodes(); + var _identifier = require_identifier(); + var _whitespace = require_whitespace(); + var _keywords = require_keywords(); + var _readWord = require_readWord(); + var _readWord2 = _interopRequireDefault(_readWord); + var _types = require_types(); + var IdentifierRole; + (function(IdentifierRole2) { + const Access = 0; + IdentifierRole2[IdentifierRole2["Access"] = Access] = "Access"; + const ExportAccess = Access + 1; + IdentifierRole2[IdentifierRole2["ExportAccess"] = ExportAccess] = "ExportAccess"; + const TopLevelDeclaration = ExportAccess + 1; + IdentifierRole2[IdentifierRole2["TopLevelDeclaration"] = TopLevelDeclaration] = "TopLevelDeclaration"; + const FunctionScopedDeclaration = TopLevelDeclaration + 1; + IdentifierRole2[IdentifierRole2["FunctionScopedDeclaration"] = FunctionScopedDeclaration] = "FunctionScopedDeclaration"; + const BlockScopedDeclaration = FunctionScopedDeclaration + 1; + IdentifierRole2[IdentifierRole2["BlockScopedDeclaration"] = BlockScopedDeclaration] = "BlockScopedDeclaration"; + const ObjectShorthandTopLevelDeclaration = BlockScopedDeclaration + 1; + IdentifierRole2[IdentifierRole2["ObjectShorthandTopLevelDeclaration"] = ObjectShorthandTopLevelDeclaration] = "ObjectShorthandTopLevelDeclaration"; + const ObjectShorthandFunctionScopedDeclaration = ObjectShorthandTopLevelDeclaration + 1; + IdentifierRole2[IdentifierRole2["ObjectShorthandFunctionScopedDeclaration"] = ObjectShorthandFunctionScopedDeclaration] = "ObjectShorthandFunctionScopedDeclaration"; + const ObjectShorthandBlockScopedDeclaration = ObjectShorthandFunctionScopedDeclaration + 1; + IdentifierRole2[IdentifierRole2["ObjectShorthandBlockScopedDeclaration"] = ObjectShorthandBlockScopedDeclaration] = "ObjectShorthandBlockScopedDeclaration"; + const ObjectShorthand = ObjectShorthandBlockScopedDeclaration + 1; + IdentifierRole2[IdentifierRole2["ObjectShorthand"] = ObjectShorthand] = "ObjectShorthand"; + const ImportDeclaration = ObjectShorthand + 1; + IdentifierRole2[IdentifierRole2["ImportDeclaration"] = ImportDeclaration] = "ImportDeclaration"; + const ObjectKey = ImportDeclaration + 1; + IdentifierRole2[IdentifierRole2["ObjectKey"] = ObjectKey] = "ObjectKey"; + const ImportAccess = ObjectKey + 1; + IdentifierRole2[IdentifierRole2["ImportAccess"] = ImportAccess] = "ImportAccess"; + })(IdentifierRole || (exports2.IdentifierRole = IdentifierRole = {})); + var JSXRole; + (function(JSXRole2) { + const NoChildren = 0; + JSXRole2[JSXRole2["NoChildren"] = NoChildren] = "NoChildren"; + const OneChild = NoChildren + 1; + JSXRole2[JSXRole2["OneChild"] = OneChild] = "OneChild"; + const StaticChildren = OneChild + 1; + JSXRole2[JSXRole2["StaticChildren"] = StaticChildren] = "StaticChildren"; + const KeyAfterPropSpread = StaticChildren + 1; + JSXRole2[JSXRole2["KeyAfterPropSpread"] = KeyAfterPropSpread] = "KeyAfterPropSpread"; + })(JSXRole || (exports2.JSXRole = JSXRole = {})); + function isDeclaration(token2) { + const role = token2.identifierRole; + return role === IdentifierRole.TopLevelDeclaration || role === IdentifierRole.FunctionScopedDeclaration || role === IdentifierRole.BlockScopedDeclaration || role === IdentifierRole.ObjectShorthandTopLevelDeclaration || role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration || role === IdentifierRole.ObjectShorthandBlockScopedDeclaration; + } + exports2.isDeclaration = isDeclaration; + function isNonTopLevelDeclaration(token2) { + const role = token2.identifierRole; + return role === IdentifierRole.FunctionScopedDeclaration || role === IdentifierRole.BlockScopedDeclaration || role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration || role === IdentifierRole.ObjectShorthandBlockScopedDeclaration; + } + exports2.isNonTopLevelDeclaration = isNonTopLevelDeclaration; + function isTopLevelDeclaration(token2) { + const role = token2.identifierRole; + return role === IdentifierRole.TopLevelDeclaration || role === IdentifierRole.ObjectShorthandTopLevelDeclaration || role === IdentifierRole.ImportDeclaration; + } + exports2.isTopLevelDeclaration = isTopLevelDeclaration; + function isBlockScopedDeclaration(token2) { + const role = token2.identifierRole; + return role === IdentifierRole.TopLevelDeclaration || role === IdentifierRole.BlockScopedDeclaration || role === IdentifierRole.ObjectShorthandTopLevelDeclaration || role === IdentifierRole.ObjectShorthandBlockScopedDeclaration; + } + exports2.isBlockScopedDeclaration = isBlockScopedDeclaration; + function isFunctionScopedDeclaration(token2) { + const role = token2.identifierRole; + return role === IdentifierRole.FunctionScopedDeclaration || role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration; + } + exports2.isFunctionScopedDeclaration = isFunctionScopedDeclaration; + function isObjectShorthandDeclaration(token2) { + return token2.identifierRole === IdentifierRole.ObjectShorthandTopLevelDeclaration || token2.identifierRole === IdentifierRole.ObjectShorthandBlockScopedDeclaration || token2.identifierRole === IdentifierRole.ObjectShorthandFunctionScopedDeclaration; + } + exports2.isObjectShorthandDeclaration = isObjectShorthandDeclaration; + var Token = class { + constructor() { + this.type = _base.state.type; + this.contextualKeyword = _base.state.contextualKeyword; + this.start = _base.state.start; + this.end = _base.state.end; + this.scopeDepth = _base.state.scopeDepth; + this.isType = _base.state.isType; + this.identifierRole = null; + this.jsxRole = null; + this.shadowsGlobal = false; + this.isAsyncOperation = false; + this.contextId = null; + this.rhsEndIndex = null; + this.isExpression = false; + this.numNullishCoalesceStarts = 0; + this.numNullishCoalesceEnds = 0; + this.isOptionalChainStart = false; + this.isOptionalChainEnd = false; + this.subscriptStartIndex = null; + this.nullishStartIndex = null; + } + // Initially false for all tokens, then may be computed in a follow-up step that does scope + // analysis. + // Initially false for all tokens, but may be set during transform to mark it as containing an + // await operation. + // For assignments, the index of the RHS. For export tokens, the end of the export. + // For class tokens, records if the class is a class expression or a class statement. + // Number of times to insert a `nullishCoalesce(` snippet before this token. + // Number of times to insert a `)` snippet after this token. + // If true, insert an `optionalChain([` snippet before this token. + // If true, insert a `])` snippet after this token. + // Tag for `.`, `?.`, `[`, `?.[`, `(`, and `?.(` to denote the "root" token for this + // subscript chain. This can be used to determine if this chain is an optional chain. + // Tag for `??` operators to denote the root token for this nullish coalescing call. + }; + exports2.Token = Token; + function next2() { + _base.state.tokens.push(new Token()); + nextToken(); + } + exports2.next = next2; + function nextTemplateToken() { + _base.state.tokens.push(new Token()); + _base.state.start = _base.state.pos; + readTmplToken(); + } + exports2.nextTemplateToken = nextTemplateToken; + function retokenizeSlashAsRegex() { + if (_base.state.type === _types.TokenType.assign) { + --_base.state.pos; + } + readRegexp(); + } + exports2.retokenizeSlashAsRegex = retokenizeSlashAsRegex; + function pushTypeContext(existingTokensInType) { + for (let i4 = _base.state.tokens.length - existingTokensInType; i4 < _base.state.tokens.length; i4++) { + _base.state.tokens[i4].isType = true; + } + const oldIsType = _base.state.isType; + _base.state.isType = true; + return oldIsType; + } + exports2.pushTypeContext = pushTypeContext; + function popTypeContext(oldIsType) { + _base.state.isType = oldIsType; + } + exports2.popTypeContext = popTypeContext; + function eat(type) { + if (match3(type)) { + next2(); + return true; + } else { + return false; + } + } + exports2.eat = eat; + function eatTypeToken(tokenType) { + const oldIsType = _base.state.isType; + _base.state.isType = true; + eat(tokenType); + _base.state.isType = oldIsType; + } + exports2.eatTypeToken = eatTypeToken; + function match3(type) { + return _base.state.type === type; + } + exports2.match = match3; + function lookaheadType() { + const snapshot = _base.state.snapshot(); + next2(); + const type = _base.state.type; + _base.state.restoreFromSnapshot(snapshot); + return type; + } + exports2.lookaheadType = lookaheadType; + var TypeAndKeyword = class { + constructor(type, contextualKeyword) { + this.type = type; + this.contextualKeyword = contextualKeyword; + } + }; + exports2.TypeAndKeyword = TypeAndKeyword; + function lookaheadTypeAndKeyword() { + const snapshot = _base.state.snapshot(); + next2(); + const type = _base.state.type; + const contextualKeyword = _base.state.contextualKeyword; + _base.state.restoreFromSnapshot(snapshot); + return new TypeAndKeyword(type, contextualKeyword); + } + exports2.lookaheadTypeAndKeyword = lookaheadTypeAndKeyword; + function nextTokenStart() { + return nextTokenStartSince(_base.state.pos); + } + exports2.nextTokenStart = nextTokenStart; + function nextTokenStartSince(pos) { + _whitespace.skipWhiteSpace.lastIndex = pos; + const skip = _whitespace.skipWhiteSpace.exec(_base.input); + return pos + skip[0].length; + } + exports2.nextTokenStartSince = nextTokenStartSince; + function lookaheadCharCode() { + return _base.input.charCodeAt(nextTokenStart()); + } + exports2.lookaheadCharCode = lookaheadCharCode; + function nextToken() { + skipSpace(); + _base.state.start = _base.state.pos; + if (_base.state.pos >= _base.input.length) { + const tokens = _base.state.tokens; + if (tokens.length >= 2 && tokens[tokens.length - 1].start >= _base.input.length && tokens[tokens.length - 2].start >= _base.input.length) { + _util.unexpected.call(void 0, "Unexpectedly reached the end of input."); + } + finishToken(_types.TokenType.eof); + return; + } + readToken(_base.input.charCodeAt(_base.state.pos)); + } + exports2.nextToken = nextToken; + function readToken(code) { + if (_identifier.IS_IDENTIFIER_START[code] || code === _charcodes.charCodes.backslash || code === _charcodes.charCodes.atSign && _base.input.charCodeAt(_base.state.pos + 1) === _charcodes.charCodes.atSign) { + _readWord2.default.call(void 0); + } else { + getTokenFromCode(code); + } + } + function skipBlockComment() { + while (_base.input.charCodeAt(_base.state.pos) !== _charcodes.charCodes.asterisk || _base.input.charCodeAt(_base.state.pos + 1) !== _charcodes.charCodes.slash) { + _base.state.pos++; + if (_base.state.pos > _base.input.length) { + _util.unexpected.call(void 0, "Unterminated comment", _base.state.pos - 2); + return; + } + } + _base.state.pos += 2; + } + function skipLineComment(startSkip) { + let ch = _base.input.charCodeAt(_base.state.pos += startSkip); + if (_base.state.pos < _base.input.length) { + while (ch !== _charcodes.charCodes.lineFeed && ch !== _charcodes.charCodes.carriageReturn && ch !== _charcodes.charCodes.lineSeparator && ch !== _charcodes.charCodes.paragraphSeparator && ++_base.state.pos < _base.input.length) { + ch = _base.input.charCodeAt(_base.state.pos); + } + } + } + exports2.skipLineComment = skipLineComment; + function skipSpace() { + while (_base.state.pos < _base.input.length) { + const ch = _base.input.charCodeAt(_base.state.pos); + switch (ch) { + case _charcodes.charCodes.carriageReturn: + if (_base.input.charCodeAt(_base.state.pos + 1) === _charcodes.charCodes.lineFeed) { + ++_base.state.pos; + } + case _charcodes.charCodes.lineFeed: + case _charcodes.charCodes.lineSeparator: + case _charcodes.charCodes.paragraphSeparator: + ++_base.state.pos; + break; + case _charcodes.charCodes.slash: + switch (_base.input.charCodeAt(_base.state.pos + 1)) { + case _charcodes.charCodes.asterisk: + _base.state.pos += 2; + skipBlockComment(); + break; + case _charcodes.charCodes.slash: + skipLineComment(2); + break; + default: + return; + } + break; + default: + if (_whitespace.IS_WHITESPACE[ch]) { + ++_base.state.pos; + } else { + return; + } + } + } + } + exports2.skipSpace = skipSpace; + function finishToken(type, contextualKeyword = _keywords.ContextualKeyword.NONE) { + _base.state.end = _base.state.pos; + _base.state.type = type; + _base.state.contextualKeyword = contextualKeyword; + } + exports2.finishToken = finishToken; + function readToken_dot() { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar >= _charcodes.charCodes.digit0 && nextChar <= _charcodes.charCodes.digit9) { + readNumber(true); + return; + } + if (nextChar === _charcodes.charCodes.dot && _base.input.charCodeAt(_base.state.pos + 2) === _charcodes.charCodes.dot) { + _base.state.pos += 3; + finishToken(_types.TokenType.ellipsis); + } else { + ++_base.state.pos; + finishToken(_types.TokenType.dot); + } + } + function readToken_slash() { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.assign, 2); + } else { + finishOp(_types.TokenType.slash, 1); + } + } + function readToken_mult_modulo(code) { + let tokenType = code === _charcodes.charCodes.asterisk ? _types.TokenType.star : _types.TokenType.modulo; + let width = 1; + let nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (code === _charcodes.charCodes.asterisk && nextChar === _charcodes.charCodes.asterisk) { + width++; + nextChar = _base.input.charCodeAt(_base.state.pos + 2); + tokenType = _types.TokenType.exponent; + } + if (nextChar === _charcodes.charCodes.equalsTo && _base.input.charCodeAt(_base.state.pos + 2) !== _charcodes.charCodes.greaterThan) { + width++; + tokenType = _types.TokenType.assign; + } + finishOp(tokenType, width); + } + function readToken_pipe_amp(code) { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar === code) { + if (_base.input.charCodeAt(_base.state.pos + 2) === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.assign, 3); + } else { + finishOp(code === _charcodes.charCodes.verticalBar ? _types.TokenType.logicalOR : _types.TokenType.logicalAND, 2); + } + return; + } + if (code === _charcodes.charCodes.verticalBar) { + if (nextChar === _charcodes.charCodes.greaterThan) { + finishOp(_types.TokenType.pipeline, 2); + return; + } else if (nextChar === _charcodes.charCodes.rightCurlyBrace && _base.isFlowEnabled) { + finishOp(_types.TokenType.braceBarR, 2); + return; + } + } + if (nextChar === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.assign, 2); + return; + } + finishOp(code === _charcodes.charCodes.verticalBar ? _types.TokenType.bitwiseOR : _types.TokenType.bitwiseAND, 1); + } + function readToken_caret() { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.assign, 2); + } else { + finishOp(_types.TokenType.bitwiseXOR, 1); + } + } + function readToken_plus_min(code) { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar === code) { + finishOp(_types.TokenType.preIncDec, 2); + return; + } + if (nextChar === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.assign, 2); + } else if (code === _charcodes.charCodes.plusSign) { + finishOp(_types.TokenType.plus, 1); + } else { + finishOp(_types.TokenType.minus, 1); + } + } + function readToken_lt() { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar === _charcodes.charCodes.lessThan) { + if (_base.input.charCodeAt(_base.state.pos + 2) === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.assign, 3); + return; + } + if (_base.state.isType) { + finishOp(_types.TokenType.lessThan, 1); + } else { + finishOp(_types.TokenType.bitShiftL, 2); + } + return; + } + if (nextChar === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.relationalOrEqual, 2); + } else { + finishOp(_types.TokenType.lessThan, 1); + } + } + function readToken_gt() { + if (_base.state.isType) { + finishOp(_types.TokenType.greaterThan, 1); + return; + } + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar === _charcodes.charCodes.greaterThan) { + const size2 = _base.input.charCodeAt(_base.state.pos + 2) === _charcodes.charCodes.greaterThan ? 3 : 2; + if (_base.input.charCodeAt(_base.state.pos + size2) === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.assign, size2 + 1); + return; + } + finishOp(_types.TokenType.bitShiftR, size2); + return; + } + if (nextChar === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.relationalOrEqual, 2); + } else { + finishOp(_types.TokenType.greaterThan, 1); + } + } + function rescan_gt() { + if (_base.state.type === _types.TokenType.greaterThan) { + _base.state.pos -= 1; + readToken_gt(); + } + } + exports2.rescan_gt = rescan_gt; + function readToken_eq_excl(code) { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.equality, _base.input.charCodeAt(_base.state.pos + 2) === _charcodes.charCodes.equalsTo ? 3 : 2); + return; + } + if (code === _charcodes.charCodes.equalsTo && nextChar === _charcodes.charCodes.greaterThan) { + _base.state.pos += 2; + finishToken(_types.TokenType.arrow); + return; + } + finishOp(code === _charcodes.charCodes.equalsTo ? _types.TokenType.eq : _types.TokenType.bang, 1); + } + function readToken_question() { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + const nextChar2 = _base.input.charCodeAt(_base.state.pos + 2); + if (nextChar === _charcodes.charCodes.questionMark && // In Flow (but not TypeScript), ??string is a valid type that should be + // tokenized as two individual ? tokens. + !(_base.isFlowEnabled && _base.state.isType)) { + if (nextChar2 === _charcodes.charCodes.equalsTo) { + finishOp(_types.TokenType.assign, 3); + } else { + finishOp(_types.TokenType.nullishCoalescing, 2); + } + } else if (nextChar === _charcodes.charCodes.dot && !(nextChar2 >= _charcodes.charCodes.digit0 && nextChar2 <= _charcodes.charCodes.digit9)) { + _base.state.pos += 2; + finishToken(_types.TokenType.questionDot); + } else { + ++_base.state.pos; + finishToken(_types.TokenType.question); + } + } + function getTokenFromCode(code) { + switch (code) { + case _charcodes.charCodes.numberSign: + ++_base.state.pos; + finishToken(_types.TokenType.hash); + return; + // The interpretation of a dot depends on whether it is followed + // by a digit or another two dots. + case _charcodes.charCodes.dot: + readToken_dot(); + return; + // Punctuation tokens. + case _charcodes.charCodes.leftParenthesis: + ++_base.state.pos; + finishToken(_types.TokenType.parenL); + return; + case _charcodes.charCodes.rightParenthesis: + ++_base.state.pos; + finishToken(_types.TokenType.parenR); + return; + case _charcodes.charCodes.semicolon: + ++_base.state.pos; + finishToken(_types.TokenType.semi); + return; + case _charcodes.charCodes.comma: + ++_base.state.pos; + finishToken(_types.TokenType.comma); + return; + case _charcodes.charCodes.leftSquareBracket: + ++_base.state.pos; + finishToken(_types.TokenType.bracketL); + return; + case _charcodes.charCodes.rightSquareBracket: + ++_base.state.pos; + finishToken(_types.TokenType.bracketR); + return; + case _charcodes.charCodes.leftCurlyBrace: + if (_base.isFlowEnabled && _base.input.charCodeAt(_base.state.pos + 1) === _charcodes.charCodes.verticalBar) { + finishOp(_types.TokenType.braceBarL, 2); + } else { + ++_base.state.pos; + finishToken(_types.TokenType.braceL); + } + return; + case _charcodes.charCodes.rightCurlyBrace: + ++_base.state.pos; + finishToken(_types.TokenType.braceR); + return; + case _charcodes.charCodes.colon: + if (_base.input.charCodeAt(_base.state.pos + 1) === _charcodes.charCodes.colon) { + finishOp(_types.TokenType.doubleColon, 2); + } else { + ++_base.state.pos; + finishToken(_types.TokenType.colon); + } + return; + case _charcodes.charCodes.questionMark: + readToken_question(); + return; + case _charcodes.charCodes.atSign: + ++_base.state.pos; + finishToken(_types.TokenType.at); + return; + case _charcodes.charCodes.graveAccent: + ++_base.state.pos; + finishToken(_types.TokenType.backQuote); + return; + case _charcodes.charCodes.digit0: { + const nextChar = _base.input.charCodeAt(_base.state.pos + 1); + if (nextChar === _charcodes.charCodes.lowercaseX || nextChar === _charcodes.charCodes.uppercaseX || nextChar === _charcodes.charCodes.lowercaseO || nextChar === _charcodes.charCodes.uppercaseO || nextChar === _charcodes.charCodes.lowercaseB || nextChar === _charcodes.charCodes.uppercaseB) { + readRadixNumber(); + return; + } + } + // Anything else beginning with a digit is an integer, octal + // number, or float. + case _charcodes.charCodes.digit1: + case _charcodes.charCodes.digit2: + case _charcodes.charCodes.digit3: + case _charcodes.charCodes.digit4: + case _charcodes.charCodes.digit5: + case _charcodes.charCodes.digit6: + case _charcodes.charCodes.digit7: + case _charcodes.charCodes.digit8: + case _charcodes.charCodes.digit9: + readNumber(false); + return; + // Quotes produce strings. + case _charcodes.charCodes.quotationMark: + case _charcodes.charCodes.apostrophe: + readString(code); + return; + // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is + // often referred to. `finishOp` simply skips the amount of + // characters it is given as second argument, and returns a token + // of the type given by its first argument. + case _charcodes.charCodes.slash: + readToken_slash(); + return; + case _charcodes.charCodes.percentSign: + case _charcodes.charCodes.asterisk: + readToken_mult_modulo(code); + return; + case _charcodes.charCodes.verticalBar: + case _charcodes.charCodes.ampersand: + readToken_pipe_amp(code); + return; + case _charcodes.charCodes.caret: + readToken_caret(); + return; + case _charcodes.charCodes.plusSign: + case _charcodes.charCodes.dash: + readToken_plus_min(code); + return; + case _charcodes.charCodes.lessThan: + readToken_lt(); + return; + case _charcodes.charCodes.greaterThan: + readToken_gt(); + return; + case _charcodes.charCodes.equalsTo: + case _charcodes.charCodes.exclamationMark: + readToken_eq_excl(code); + return; + case _charcodes.charCodes.tilde: + finishOp(_types.TokenType.tilde, 1); + return; + default: + break; + } + _util.unexpected.call(void 0, `Unexpected character '${String.fromCharCode(code)}'`, _base.state.pos); + } + exports2.getTokenFromCode = getTokenFromCode; + function finishOp(type, size2) { + _base.state.pos += size2; + finishToken(type); + } + function readRegexp() { + const start = _base.state.pos; + let escaped = false; + let inClass = false; + for (; ; ) { + if (_base.state.pos >= _base.input.length) { + _util.unexpected.call(void 0, "Unterminated regular expression", start); + return; + } + const code = _base.input.charCodeAt(_base.state.pos); + if (escaped) { + escaped = false; + } else { + if (code === _charcodes.charCodes.leftSquareBracket) { + inClass = true; + } else if (code === _charcodes.charCodes.rightSquareBracket && inClass) { + inClass = false; + } else if (code === _charcodes.charCodes.slash && !inClass) { + break; + } + escaped = code === _charcodes.charCodes.backslash; + } + ++_base.state.pos; + } + ++_base.state.pos; + skipWord(); + finishToken(_types.TokenType.regexp); + } + function readInt() { + while (true) { + const code = _base.input.charCodeAt(_base.state.pos); + if (code >= _charcodes.charCodes.digit0 && code <= _charcodes.charCodes.digit9 || code === _charcodes.charCodes.underscore) { + _base.state.pos++; + } else { + break; + } + } + } + function readRadixNumber() { + _base.state.pos += 2; + while (true) { + const code = _base.input.charCodeAt(_base.state.pos); + if (code >= _charcodes.charCodes.digit0 && code <= _charcodes.charCodes.digit9 || code >= _charcodes.charCodes.lowercaseA && code <= _charcodes.charCodes.lowercaseF || code >= _charcodes.charCodes.uppercaseA && code <= _charcodes.charCodes.uppercaseF || code === _charcodes.charCodes.underscore) { + _base.state.pos++; + } else { + break; + } + } + const nextChar = _base.input.charCodeAt(_base.state.pos); + if (nextChar === _charcodes.charCodes.lowercaseN) { + ++_base.state.pos; + finishToken(_types.TokenType.bigint); + } else { + finishToken(_types.TokenType.num); + } + } + function readNumber(startsWithDot) { + let isBigInt = false; + let isDecimal = false; + if (!startsWithDot) { + readInt(); + } + let nextChar = _base.input.charCodeAt(_base.state.pos); + if (nextChar === _charcodes.charCodes.dot) { + ++_base.state.pos; + readInt(); + nextChar = _base.input.charCodeAt(_base.state.pos); + } + if (nextChar === _charcodes.charCodes.uppercaseE || nextChar === _charcodes.charCodes.lowercaseE) { + nextChar = _base.input.charCodeAt(++_base.state.pos); + if (nextChar === _charcodes.charCodes.plusSign || nextChar === _charcodes.charCodes.dash) { + ++_base.state.pos; + } + readInt(); + nextChar = _base.input.charCodeAt(_base.state.pos); + } + if (nextChar === _charcodes.charCodes.lowercaseN) { + ++_base.state.pos; + isBigInt = true; + } else if (nextChar === _charcodes.charCodes.lowercaseM) { + ++_base.state.pos; + isDecimal = true; + } + if (isBigInt) { + finishToken(_types.TokenType.bigint); + return; + } + if (isDecimal) { + finishToken(_types.TokenType.decimal); + return; + } + finishToken(_types.TokenType.num); + } + function readString(quote) { + _base.state.pos++; + for (; ; ) { + if (_base.state.pos >= _base.input.length) { + _util.unexpected.call(void 0, "Unterminated string constant"); + return; + } + const ch = _base.input.charCodeAt(_base.state.pos); + if (ch === _charcodes.charCodes.backslash) { + _base.state.pos++; + } else if (ch === quote) { + break; + } + _base.state.pos++; + } + _base.state.pos++; + finishToken(_types.TokenType.string); + } + function readTmplToken() { + for (; ; ) { + if (_base.state.pos >= _base.input.length) { + _util.unexpected.call(void 0, "Unterminated template"); + return; + } + const ch = _base.input.charCodeAt(_base.state.pos); + if (ch === _charcodes.charCodes.graveAccent || ch === _charcodes.charCodes.dollarSign && _base.input.charCodeAt(_base.state.pos + 1) === _charcodes.charCodes.leftCurlyBrace) { + if (_base.state.pos === _base.state.start && match3(_types.TokenType.template)) { + if (ch === _charcodes.charCodes.dollarSign) { + _base.state.pos += 2; + finishToken(_types.TokenType.dollarBraceL); + return; + } else { + ++_base.state.pos; + finishToken(_types.TokenType.backQuote); + return; + } + } + finishToken(_types.TokenType.template); + return; + } + if (ch === _charcodes.charCodes.backslash) { + _base.state.pos++; + } + _base.state.pos++; + } + } + function skipWord() { + while (_base.state.pos < _base.input.length) { + const ch = _base.input.charCodeAt(_base.state.pos); + if (_identifier.IS_IDENTIFIER_CHAR[ch]) { + _base.state.pos++; + } else if (ch === _charcodes.charCodes.backslash) { + _base.state.pos += 2; + if (_base.input.charCodeAt(_base.state.pos) === _charcodes.charCodes.leftCurlyBrace) { + while (_base.state.pos < _base.input.length && _base.input.charCodeAt(_base.state.pos) !== _charcodes.charCodes.rightCurlyBrace) { + _base.state.pos++; + } + _base.state.pos++; + } + } else { + break; + } + } + } + exports2.skipWord = skipWord; + } +}); + +// node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js +var require_getImportExportSpecifierInfo = __commonJS({ + "node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _types = require_types(); + function getImportExportSpecifierInfo(tokens, index = tokens.currentIndex()) { + let endIndex = index + 1; + if (isSpecifierEnd(tokens, endIndex)) { + const name = tokens.identifierNameAtIndex(index); + return { + isType: false, + leftName: name, + rightName: name, + endIndex + }; + } + endIndex++; + if (isSpecifierEnd(tokens, endIndex)) { + return { + isType: true, + leftName: null, + rightName: null, + endIndex + }; + } + endIndex++; + if (isSpecifierEnd(tokens, endIndex)) { + return { + isType: false, + leftName: tokens.identifierNameAtIndex(index), + rightName: tokens.identifierNameAtIndex(index + 2), + endIndex + }; + } + endIndex++; + if (isSpecifierEnd(tokens, endIndex)) { + return { + isType: true, + leftName: null, + rightName: null, + endIndex + }; + } + throw new Error(`Unexpected import/export specifier at ${index}`); + } + exports2.default = getImportExportSpecifierInfo; + function isSpecifierEnd(tokens, index) { + const token2 = tokens.tokens[index]; + return token2.type === _types.TokenType.braceR || token2.type === _types.TokenType.comma; + } + } +}); + +// node_modules/sucrase/dist/parser/plugins/jsx/xhtml.js +var require_xhtml = __commonJS({ + "node_modules/sucrase/dist/parser/plugins/jsx/xhtml.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.default = /* @__PURE__ */ new Map([ + ["quot", '"'], + ["amp", "&"], + ["apos", "'"], + ["lt", "<"], + ["gt", ">"], + ["nbsp", "\xA0"], + ["iexcl", "\xA1"], + ["cent", "\xA2"], + ["pound", "\xA3"], + ["curren", "\xA4"], + ["yen", "\xA5"], + ["brvbar", "\xA6"], + ["sect", "\xA7"], + ["uml", "\xA8"], + ["copy", "\xA9"], + ["ordf", "\xAA"], + ["laquo", "\xAB"], + ["not", "\xAC"], + ["shy", "\xAD"], + ["reg", "\xAE"], + ["macr", "\xAF"], + ["deg", "\xB0"], + ["plusmn", "\xB1"], + ["sup2", "\xB2"], + ["sup3", "\xB3"], + ["acute", "\xB4"], + ["micro", "\xB5"], + ["para", "\xB6"], + ["middot", "\xB7"], + ["cedil", "\xB8"], + ["sup1", "\xB9"], + ["ordm", "\xBA"], + ["raquo", "\xBB"], + ["frac14", "\xBC"], + ["frac12", "\xBD"], + ["frac34", "\xBE"], + ["iquest", "\xBF"], + ["Agrave", "\xC0"], + ["Aacute", "\xC1"], + ["Acirc", "\xC2"], + ["Atilde", "\xC3"], + ["Auml", "\xC4"], + ["Aring", "\xC5"], + ["AElig", "\xC6"], + ["Ccedil", "\xC7"], + ["Egrave", "\xC8"], + ["Eacute", "\xC9"], + ["Ecirc", "\xCA"], + ["Euml", "\xCB"], + ["Igrave", "\xCC"], + ["Iacute", "\xCD"], + ["Icirc", "\xCE"], + ["Iuml", "\xCF"], + ["ETH", "\xD0"], + ["Ntilde", "\xD1"], + ["Ograve", "\xD2"], + ["Oacute", "\xD3"], + ["Ocirc", "\xD4"], + ["Otilde", "\xD5"], + ["Ouml", "\xD6"], + ["times", "\xD7"], + ["Oslash", "\xD8"], + ["Ugrave", "\xD9"], + ["Uacute", "\xDA"], + ["Ucirc", "\xDB"], + ["Uuml", "\xDC"], + ["Yacute", "\xDD"], + ["THORN", "\xDE"], + ["szlig", "\xDF"], + ["agrave", "\xE0"], + ["aacute", "\xE1"], + ["acirc", "\xE2"], + ["atilde", "\xE3"], + ["auml", "\xE4"], + ["aring", "\xE5"], + ["aelig", "\xE6"], + ["ccedil", "\xE7"], + ["egrave", "\xE8"], + ["eacute", "\xE9"], + ["ecirc", "\xEA"], + ["euml", "\xEB"], + ["igrave", "\xEC"], + ["iacute", "\xED"], + ["icirc", "\xEE"], + ["iuml", "\xEF"], + ["eth", "\xF0"], + ["ntilde", "\xF1"], + ["ograve", "\xF2"], + ["oacute", "\xF3"], + ["ocirc", "\xF4"], + ["otilde", "\xF5"], + ["ouml", "\xF6"], + ["divide", "\xF7"], + ["oslash", "\xF8"], + ["ugrave", "\xF9"], + ["uacute", "\xFA"], + ["ucirc", "\xFB"], + ["uuml", "\xFC"], + ["yacute", "\xFD"], + ["thorn", "\xFE"], + ["yuml", "\xFF"], + ["OElig", "\u0152"], + ["oelig", "\u0153"], + ["Scaron", "\u0160"], + ["scaron", "\u0161"], + ["Yuml", "\u0178"], + ["fnof", "\u0192"], + ["circ", "\u02C6"], + ["tilde", "\u02DC"], + ["Alpha", "\u0391"], + ["Beta", "\u0392"], + ["Gamma", "\u0393"], + ["Delta", "\u0394"], + ["Epsilon", "\u0395"], + ["Zeta", "\u0396"], + ["Eta", "\u0397"], + ["Theta", "\u0398"], + ["Iota", "\u0399"], + ["Kappa", "\u039A"], + ["Lambda", "\u039B"], + ["Mu", "\u039C"], + ["Nu", "\u039D"], + ["Xi", "\u039E"], + ["Omicron", "\u039F"], + ["Pi", "\u03A0"], + ["Rho", "\u03A1"], + ["Sigma", "\u03A3"], + ["Tau", "\u03A4"], + ["Upsilon", "\u03A5"], + ["Phi", "\u03A6"], + ["Chi", "\u03A7"], + ["Psi", "\u03A8"], + ["Omega", "\u03A9"], + ["alpha", "\u03B1"], + ["beta", "\u03B2"], + ["gamma", "\u03B3"], + ["delta", "\u03B4"], + ["epsilon", "\u03B5"], + ["zeta", "\u03B6"], + ["eta", "\u03B7"], + ["theta", "\u03B8"], + ["iota", "\u03B9"], + ["kappa", "\u03BA"], + ["lambda", "\u03BB"], + ["mu", "\u03BC"], + ["nu", "\u03BD"], + ["xi", "\u03BE"], + ["omicron", "\u03BF"], + ["pi", "\u03C0"], + ["rho", "\u03C1"], + ["sigmaf", "\u03C2"], + ["sigma", "\u03C3"], + ["tau", "\u03C4"], + ["upsilon", "\u03C5"], + ["phi", "\u03C6"], + ["chi", "\u03C7"], + ["psi", "\u03C8"], + ["omega", "\u03C9"], + ["thetasym", "\u03D1"], + ["upsih", "\u03D2"], + ["piv", "\u03D6"], + ["ensp", "\u2002"], + ["emsp", "\u2003"], + ["thinsp", "\u2009"], + ["zwnj", "\u200C"], + ["zwj", "\u200D"], + ["lrm", "\u200E"], + ["rlm", "\u200F"], + ["ndash", "\u2013"], + ["mdash", "\u2014"], + ["lsquo", "\u2018"], + ["rsquo", "\u2019"], + ["sbquo", "\u201A"], + ["ldquo", "\u201C"], + ["rdquo", "\u201D"], + ["bdquo", "\u201E"], + ["dagger", "\u2020"], + ["Dagger", "\u2021"], + ["bull", "\u2022"], + ["hellip", "\u2026"], + ["permil", "\u2030"], + ["prime", "\u2032"], + ["Prime", "\u2033"], + ["lsaquo", "\u2039"], + ["rsaquo", "\u203A"], + ["oline", "\u203E"], + ["frasl", "\u2044"], + ["euro", "\u20AC"], + ["image", "\u2111"], + ["weierp", "\u2118"], + ["real", "\u211C"], + ["trade", "\u2122"], + ["alefsym", "\u2135"], + ["larr", "\u2190"], + ["uarr", "\u2191"], + ["rarr", "\u2192"], + ["darr", "\u2193"], + ["harr", "\u2194"], + ["crarr", "\u21B5"], + ["lArr", "\u21D0"], + ["uArr", "\u21D1"], + ["rArr", "\u21D2"], + ["dArr", "\u21D3"], + ["hArr", "\u21D4"], + ["forall", "\u2200"], + ["part", "\u2202"], + ["exist", "\u2203"], + ["empty", "\u2205"], + ["nabla", "\u2207"], + ["isin", "\u2208"], + ["notin", "\u2209"], + ["ni", "\u220B"], + ["prod", "\u220F"], + ["sum", "\u2211"], + ["minus", "\u2212"], + ["lowast", "\u2217"], + ["radic", "\u221A"], + ["prop", "\u221D"], + ["infin", "\u221E"], + ["ang", "\u2220"], + ["and", "\u2227"], + ["or", "\u2228"], + ["cap", "\u2229"], + ["cup", "\u222A"], + ["int", "\u222B"], + ["there4", "\u2234"], + ["sim", "\u223C"], + ["cong", "\u2245"], + ["asymp", "\u2248"], + ["ne", "\u2260"], + ["equiv", "\u2261"], + ["le", "\u2264"], + ["ge", "\u2265"], + ["sub", "\u2282"], + ["sup", "\u2283"], + ["nsub", "\u2284"], + ["sube", "\u2286"], + ["supe", "\u2287"], + ["oplus", "\u2295"], + ["otimes", "\u2297"], + ["perp", "\u22A5"], + ["sdot", "\u22C5"], + ["lceil", "\u2308"], + ["rceil", "\u2309"], + ["lfloor", "\u230A"], + ["rfloor", "\u230B"], + ["lang", "\u2329"], + ["rang", "\u232A"], + ["loz", "\u25CA"], + ["spades", "\u2660"], + ["clubs", "\u2663"], + ["hearts", "\u2665"], + ["diams", "\u2666"] + ]); + } +}); + +// node_modules/sucrase/dist/util/getJSXPragmaInfo.js +var require_getJSXPragmaInfo = __commonJS({ + "node_modules/sucrase/dist/util/getJSXPragmaInfo.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function getJSXPragmaInfo(options2) { + const [base, suffix] = splitPragma(options2.jsxPragma || "React.createElement"); + const [fragmentBase, fragmentSuffix] = splitPragma(options2.jsxFragmentPragma || "React.Fragment"); + return { base, suffix, fragmentBase, fragmentSuffix }; + } + exports2.default = getJSXPragmaInfo; + function splitPragma(pragma) { + let dotIndex = pragma.indexOf("."); + if (dotIndex === -1) { + dotIndex = pragma.length; + } + return [pragma.slice(0, dotIndex), pragma.slice(dotIndex)]; + } + } +}); + +// node_modules/sucrase/dist/transformers/Transformer.js +var require_Transformer = __commonJS({ + "node_modules/sucrase/dist/transformers/Transformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var Transformer = class { + // Return true if anything was processed, false otherwise. + getPrefixCode() { + return ""; + } + getHoistedCode() { + return ""; + } + getSuffixCode() { + return ""; + } + }; + exports2.default = Transformer; + } +}); + +// node_modules/sucrase/dist/transformers/JSXTransformer.js +var require_JSXTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/JSXTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _xhtml = require_xhtml(); + var _xhtml2 = _interopRequireDefault(_xhtml); + var _tokenizer = require_tokenizer(); + var _types = require_types(); + var _charcodes = require_charcodes(); + var _getJSXPragmaInfo = require_getJSXPragmaInfo(); + var _getJSXPragmaInfo2 = _interopRequireDefault(_getJSXPragmaInfo); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var JSXTransformer = class _JSXTransformer extends _Transformer2.default { + // State for calculating the line number of each JSX tag in development. + __init() { + this.lastLineNumber = 1; + } + __init2() { + this.lastIndex = 0; + } + // In development, variable name holding the name of the current file. + __init3() { + this.filenameVarName = null; + } + // Mapping of claimed names for imports in the automatic transform, e,g. + // {jsx: "_jsx"}. This determines which imports to generate in the prefix. + __init4() { + this.esmAutomaticImportNameResolutions = {}; + } + // When automatically adding imports in CJS mode, we store the variable name + // holding the imported CJS module so we can require it in the prefix. + __init5() { + this.cjsAutomaticModuleNameResolutions = {}; + } + constructor(rootTransformer, tokens, importProcessor, nameManager, options2) { + super(); + this.rootTransformer = rootTransformer; + this.tokens = tokens; + this.importProcessor = importProcessor; + this.nameManager = nameManager; + this.options = options2; + _JSXTransformer.prototype.__init.call(this); + _JSXTransformer.prototype.__init2.call(this); + _JSXTransformer.prototype.__init3.call(this); + _JSXTransformer.prototype.__init4.call(this); + _JSXTransformer.prototype.__init5.call(this); + ; + this.jsxPragmaInfo = _getJSXPragmaInfo2.default.call(void 0, options2); + this.isAutomaticRuntime = options2.jsxRuntime === "automatic"; + this.jsxImportSource = options2.jsxImportSource || "react"; + } + process() { + if (this.tokens.matches1(_types.TokenType.jsxTagStart)) { + this.processJSXTag(); + return true; + } + return false; + } + getPrefixCode() { + let prefix2 = ""; + if (this.filenameVarName) { + prefix2 += `const ${this.filenameVarName} = ${JSON.stringify(this.options.filePath || "")};`; + } + if (this.isAutomaticRuntime) { + if (this.importProcessor) { + for (const [path, resolvedName] of Object.entries(this.cjsAutomaticModuleNameResolutions)) { + prefix2 += `var ${resolvedName} = require("${path}");`; + } + } else { + const { createElement: createElementResolution, ...otherResolutions } = this.esmAutomaticImportNameResolutions; + if (createElementResolution) { + prefix2 += `import {createElement as ${createElementResolution}} from "${this.jsxImportSource}";`; + } + const importSpecifiers = Object.entries(otherResolutions).map(([name, resolvedName]) => `${name} as ${resolvedName}`).join(", "); + if (importSpecifiers) { + const importPath = this.jsxImportSource + (this.options.production ? "/jsx-runtime" : "/jsx-dev-runtime"); + prefix2 += `import {${importSpecifiers}} from "${importPath}";`; + } + } + } + return prefix2; + } + processJSXTag() { + const { jsxRole, start } = this.tokens.currentToken(); + const elementLocationCode = this.options.production ? null : this.getElementLocationCode(start); + if (this.isAutomaticRuntime && jsxRole !== _tokenizer.JSXRole.KeyAfterPropSpread) { + this.transformTagToJSXFunc(elementLocationCode, jsxRole); + } else { + this.transformTagToCreateElement(elementLocationCode); + } + } + getElementLocationCode(firstTokenStart) { + const lineNumber = this.getLineNumberForIndex(firstTokenStart); + return `lineNumber: ${lineNumber}`; + } + /** + * Get the line number for this source position. This is calculated lazily and + * must be called in increasing order by index. + */ + getLineNumberForIndex(index) { + const code = this.tokens.code; + while (this.lastIndex < index && this.lastIndex < code.length) { + if (code[this.lastIndex] === "\n") { + this.lastLineNumber++; + } + this.lastIndex++; + } + return this.lastLineNumber; + } + /** + * Convert the current JSX element to a call to jsx, jsxs, or jsxDEV. This is + * the primary transformation for the automatic transform. + * + * Example: + *
Hello{x}
+ * becomes + * jsxs('div', {a: 1, children: ["Hello", x]}, 2) + */ + transformTagToJSXFunc(elementLocationCode, jsxRole) { + const isStatic = jsxRole === _tokenizer.JSXRole.StaticChildren; + this.tokens.replaceToken(this.getJSXFuncInvocationCode(isStatic)); + let keyCode = null; + if (this.tokens.matches1(_types.TokenType.jsxTagEnd)) { + this.tokens.replaceToken(`${this.getFragmentCode()}, {`); + this.processAutomaticChildrenAndEndProps(jsxRole); + } else { + this.processTagIntro(); + this.tokens.appendCode(", {"); + keyCode = this.processProps(true); + if (this.tokens.matches2(_types.TokenType.slash, _types.TokenType.jsxTagEnd)) { + this.tokens.appendCode("}"); + } else if (this.tokens.matches1(_types.TokenType.jsxTagEnd)) { + this.tokens.removeToken(); + this.processAutomaticChildrenAndEndProps(jsxRole); + } else { + throw new Error("Expected either /> or > at the end of the tag."); + } + if (keyCode) { + this.tokens.appendCode(`, ${keyCode}`); + } + } + if (!this.options.production) { + if (keyCode === null) { + this.tokens.appendCode(", void 0"); + } + this.tokens.appendCode(`, ${isStatic}, ${this.getDevSource(elementLocationCode)}, this`); + } + this.tokens.removeInitialToken(); + while (!this.tokens.matches1(_types.TokenType.jsxTagEnd)) { + this.tokens.removeToken(); + } + this.tokens.replaceToken(")"); + } + /** + * Convert the current JSX element to a createElement call. In the classic + * runtime, this is the only case. In the automatic runtime, this is called + * as a fallback in some situations. + * + * Example: + *
Hello{x}
+ * becomes + * React.createElement('div', {a: 1, key: 2}, "Hello", x) + */ + transformTagToCreateElement(elementLocationCode) { + this.tokens.replaceToken(this.getCreateElementInvocationCode()); + if (this.tokens.matches1(_types.TokenType.jsxTagEnd)) { + this.tokens.replaceToken(`${this.getFragmentCode()}, null`); + this.processChildren(true); + } else { + this.processTagIntro(); + this.processPropsObjectWithDevInfo(elementLocationCode); + if (this.tokens.matches2(_types.TokenType.slash, _types.TokenType.jsxTagEnd)) { + } else if (this.tokens.matches1(_types.TokenType.jsxTagEnd)) { + this.tokens.removeToken(); + this.processChildren(true); + } else { + throw new Error("Expected either /> or > at the end of the tag."); + } + } + this.tokens.removeInitialToken(); + while (!this.tokens.matches1(_types.TokenType.jsxTagEnd)) { + this.tokens.removeToken(); + } + this.tokens.replaceToken(")"); + } + /** + * Get the code for the relevant function for this context: jsx, jsxs, + * or jsxDEV. The following open-paren is included as well. + * + * These functions are only used for the automatic runtime, so they are always + * auto-imported, but the auto-import will be either CJS or ESM based on the + * target module format. + */ + getJSXFuncInvocationCode(isStatic) { + if (this.options.production) { + if (isStatic) { + return this.claimAutoImportedFuncInvocation("jsxs", "/jsx-runtime"); + } else { + return this.claimAutoImportedFuncInvocation("jsx", "/jsx-runtime"); + } + } else { + return this.claimAutoImportedFuncInvocation("jsxDEV", "/jsx-dev-runtime"); + } + } + /** + * Return the code to use for the createElement function, e.g. + * `React.createElement`, including the following open-paren. + * + * This is the main function to use for the classic runtime. For the + * automatic runtime, this function is used as a fallback function to + * preserve behavior when there is a prop spread followed by an explicit + * key. In that automatic runtime case, the function should be automatically + * imported. + */ + getCreateElementInvocationCode() { + if (this.isAutomaticRuntime) { + return this.claimAutoImportedFuncInvocation("createElement", ""); + } else { + const { jsxPragmaInfo } = this; + const resolvedPragmaBaseName = this.importProcessor ? this.importProcessor.getIdentifierReplacement(jsxPragmaInfo.base) || jsxPragmaInfo.base : jsxPragmaInfo.base; + return `${resolvedPragmaBaseName}${jsxPragmaInfo.suffix}(`; + } + } + /** + * Return the code to use as the component when compiling a shorthand + * fragment, e.g. `React.Fragment`. + * + * This may be called from either the classic or automatic runtime, and + * the value should be auto-imported for the automatic runtime. + */ + getFragmentCode() { + if (this.isAutomaticRuntime) { + return this.claimAutoImportedName( + "Fragment", + this.options.production ? "/jsx-runtime" : "/jsx-dev-runtime" + ); + } else { + const { jsxPragmaInfo } = this; + const resolvedFragmentPragmaBaseName = this.importProcessor ? this.importProcessor.getIdentifierReplacement(jsxPragmaInfo.fragmentBase) || jsxPragmaInfo.fragmentBase : jsxPragmaInfo.fragmentBase; + return resolvedFragmentPragmaBaseName + jsxPragmaInfo.fragmentSuffix; + } + } + /** + * Return code that invokes the given function. + * + * When the imports transform is enabled, use the CJSImportTransformer + * strategy of using `.call(void 0, ...` to avoid passing a `this` value in a + * situation that would otherwise look like a method call. + */ + claimAutoImportedFuncInvocation(funcName, importPathSuffix) { + const funcCode = this.claimAutoImportedName(funcName, importPathSuffix); + if (this.importProcessor) { + return `${funcCode}.call(void 0, `; + } else { + return `${funcCode}(`; + } + } + claimAutoImportedName(funcName, importPathSuffix) { + if (this.importProcessor) { + const path = this.jsxImportSource + importPathSuffix; + if (!this.cjsAutomaticModuleNameResolutions[path]) { + this.cjsAutomaticModuleNameResolutions[path] = this.importProcessor.getFreeIdentifierForPath(path); + } + return `${this.cjsAutomaticModuleNameResolutions[path]}.${funcName}`; + } else { + if (!this.esmAutomaticImportNameResolutions[funcName]) { + this.esmAutomaticImportNameResolutions[funcName] = this.nameManager.claimFreeName( + `_${funcName}` + ); + } + return this.esmAutomaticImportNameResolutions[funcName]; + } + } + /** + * Process the first part of a tag, before any props. + */ + processTagIntro() { + let introEnd = this.tokens.currentIndex() + 1; + while (this.tokens.tokens[introEnd].isType || !this.tokens.matches2AtIndex(introEnd - 1, _types.TokenType.jsxName, _types.TokenType.jsxName) && !this.tokens.matches2AtIndex(introEnd - 1, _types.TokenType.greaterThan, _types.TokenType.jsxName) && !this.tokens.matches1AtIndex(introEnd, _types.TokenType.braceL) && !this.tokens.matches1AtIndex(introEnd, _types.TokenType.jsxTagEnd) && !this.tokens.matches2AtIndex(introEnd, _types.TokenType.slash, _types.TokenType.jsxTagEnd)) { + introEnd++; + } + if (introEnd === this.tokens.currentIndex() + 1) { + const tagName = this.tokens.identifierName(); + if (startsWithLowerCase(tagName)) { + this.tokens.replaceToken(`'${tagName}'`); + } + } + while (this.tokens.currentIndex() < introEnd) { + this.rootTransformer.processToken(); + } + } + /** + * Starting at the beginning of the props, add the props argument to + * React.createElement, including the comma before it. + */ + processPropsObjectWithDevInfo(elementLocationCode) { + const devProps = this.options.production ? "" : `__self: this, __source: ${this.getDevSource(elementLocationCode)}`; + if (!this.tokens.matches1(_types.TokenType.jsxName) && !this.tokens.matches1(_types.TokenType.braceL)) { + if (devProps) { + this.tokens.appendCode(`, {${devProps}}`); + } else { + this.tokens.appendCode(`, null`); + } + return; + } + this.tokens.appendCode(`, {`); + this.processProps(false); + if (devProps) { + this.tokens.appendCode(` ${devProps}}`); + } else { + this.tokens.appendCode("}"); + } + } + /** + * Transform the core part of the props, assuming that a { has already been + * inserted before us and that a } will be inserted after us. + * + * If extractKeyCode is true (i.e. when using any jsx... function), any prop + * named "key" has its code captured and returned rather than being emitted to + * the output code. This shifts line numbers, and emitting the code later will + * correct line numbers again. If no key is found or if extractKeyCode is + * false, this function returns null. + */ + processProps(extractKeyCode) { + let keyCode = null; + while (true) { + if (this.tokens.matches2(_types.TokenType.jsxName, _types.TokenType.eq)) { + const propName = this.tokens.identifierName(); + if (extractKeyCode && propName === "key") { + if (keyCode !== null) { + this.tokens.appendCode(keyCode.replace(/[^\n]/g, "")); + } + this.tokens.removeToken(); + this.tokens.removeToken(); + const snapshot = this.tokens.snapshot(); + this.processPropValue(); + keyCode = this.tokens.dangerouslyGetAndRemoveCodeSinceSnapshot(snapshot); + continue; + } else { + this.processPropName(propName); + this.tokens.replaceToken(": "); + this.processPropValue(); + } + } else if (this.tokens.matches1(_types.TokenType.jsxName)) { + const propName = this.tokens.identifierName(); + this.processPropName(propName); + this.tokens.appendCode(": true"); + } else if (this.tokens.matches1(_types.TokenType.braceL)) { + this.tokens.replaceToken(""); + this.rootTransformer.processBalancedCode(); + this.tokens.replaceToken(""); + } else { + break; + } + this.tokens.appendCode(","); + } + return keyCode; + } + processPropName(propName) { + if (propName.includes("-")) { + this.tokens.replaceToken(`'${propName}'`); + } else { + this.tokens.copyToken(); + } + } + processPropValue() { + if (this.tokens.matches1(_types.TokenType.braceL)) { + this.tokens.replaceToken(""); + this.rootTransformer.processBalancedCode(); + this.tokens.replaceToken(""); + } else if (this.tokens.matches1(_types.TokenType.jsxTagStart)) { + this.processJSXTag(); + } else { + this.processStringPropValue(); + } + } + processStringPropValue() { + const token2 = this.tokens.currentToken(); + const valueCode = this.tokens.code.slice(token2.start + 1, token2.end - 1); + const replacementCode = formatJSXTextReplacement(valueCode); + const literalCode = formatJSXStringValueLiteral(valueCode); + this.tokens.replaceToken(literalCode + replacementCode); + } + /** + * Starting in the middle of the props object literal, produce an additional + * prop for the children and close the object literal. + */ + processAutomaticChildrenAndEndProps(jsxRole) { + if (jsxRole === _tokenizer.JSXRole.StaticChildren) { + this.tokens.appendCode(" children: ["); + this.processChildren(false); + this.tokens.appendCode("]}"); + } else { + if (jsxRole === _tokenizer.JSXRole.OneChild) { + this.tokens.appendCode(" children: "); + } + this.processChildren(false); + this.tokens.appendCode("}"); + } + } + /** + * Transform children into a comma-separated list, which will be either + * arguments to createElement or array elements of a children prop. + */ + processChildren(needsInitialComma) { + let needsComma = needsInitialComma; + while (true) { + if (this.tokens.matches2(_types.TokenType.jsxTagStart, _types.TokenType.slash)) { + return; + } + let didEmitElement = false; + if (this.tokens.matches1(_types.TokenType.braceL)) { + if (this.tokens.matches2(_types.TokenType.braceL, _types.TokenType.braceR)) { + this.tokens.replaceToken(""); + this.tokens.replaceToken(""); + } else { + this.tokens.replaceToken(needsComma ? ", " : ""); + this.rootTransformer.processBalancedCode(); + this.tokens.replaceToken(""); + didEmitElement = true; + } + } else if (this.tokens.matches1(_types.TokenType.jsxTagStart)) { + this.tokens.appendCode(needsComma ? ", " : ""); + this.processJSXTag(); + didEmitElement = true; + } else if (this.tokens.matches1(_types.TokenType.jsxText) || this.tokens.matches1(_types.TokenType.jsxEmptyText)) { + didEmitElement = this.processChildTextElement(needsComma); + } else { + throw new Error("Unexpected token when processing JSX children."); + } + if (didEmitElement) { + needsComma = true; + } + } + } + /** + * Turn a JSX text element into a string literal, or nothing at all if the JSX + * text resolves to the empty string. + * + * Returns true if a string literal is emitted, false otherwise. + */ + processChildTextElement(needsComma) { + const token2 = this.tokens.currentToken(); + const valueCode = this.tokens.code.slice(token2.start, token2.end); + const replacementCode = formatJSXTextReplacement(valueCode); + const literalCode = formatJSXTextLiteral(valueCode); + if (literalCode === '""') { + this.tokens.replaceToken(replacementCode); + return false; + } else { + this.tokens.replaceToken(`${needsComma ? ", " : ""}${literalCode}${replacementCode}`); + return true; + } + } + getDevSource(elementLocationCode) { + return `{fileName: ${this.getFilenameVarName()}, ${elementLocationCode}}`; + } + getFilenameVarName() { + if (!this.filenameVarName) { + this.filenameVarName = this.nameManager.claimFreeName("_jsxFileName"); + } + return this.filenameVarName; + } + }; + exports2.default = JSXTransformer; + function startsWithLowerCase(s4) { + const firstChar = s4.charCodeAt(0); + return firstChar >= _charcodes.charCodes.lowercaseA && firstChar <= _charcodes.charCodes.lowercaseZ; + } + exports2.startsWithLowerCase = startsWithLowerCase; + function formatJSXTextLiteral(text2) { + let result = ""; + let whitespace3 = ""; + let isInInitialLineWhitespace = false; + let seenNonWhitespace = false; + for (let i4 = 0; i4 < text2.length; i4++) { + const c4 = text2[i4]; + if (c4 === " " || c4 === " " || c4 === "\r") { + if (!isInInitialLineWhitespace) { + whitespace3 += c4; + } + } else if (c4 === "\n") { + whitespace3 = ""; + isInInitialLineWhitespace = true; + } else { + if (seenNonWhitespace && isInInitialLineWhitespace) { + result += " "; + } + result += whitespace3; + whitespace3 = ""; + if (c4 === "&") { + const { entity, newI } = processEntity(text2, i4 + 1); + i4 = newI - 1; + result += entity; + } else { + result += c4; + } + seenNonWhitespace = true; + isInInitialLineWhitespace = false; + } + } + if (!isInInitialLineWhitespace) { + result += whitespace3; + } + return JSON.stringify(result); + } + function formatJSXTextReplacement(text2) { + let numNewlines = 0; + let numSpaces = 0; + for (const c4 of text2) { + if (c4 === "\n") { + numNewlines++; + numSpaces = 0; + } else if (c4 === " ") { + numSpaces++; + } + } + return "\n".repeat(numNewlines) + " ".repeat(numSpaces); + } + function formatJSXStringValueLiteral(text2) { + let result = ""; + for (let i4 = 0; i4 < text2.length; i4++) { + const c4 = text2[i4]; + if (c4 === "\n") { + if (/\s/.test(text2[i4 + 1])) { + result += " "; + while (i4 < text2.length && /\s/.test(text2[i4 + 1])) { + i4++; + } + } else { + result += "\n"; + } + } else if (c4 === "&") { + const { entity, newI } = processEntity(text2, i4 + 1); + result += entity; + i4 = newI - 1; + } else { + result += c4; + } + } + return JSON.stringify(result); + } + function processEntity(text2, indexAfterAmpersand) { + let str = ""; + let count = 0; + let entity; + let i4 = indexAfterAmpersand; + if (text2[i4] === "#") { + let radix = 10; + i4++; + let numStart; + if (text2[i4] === "x") { + radix = 16; + i4++; + numStart = i4; + while (i4 < text2.length && isHexDigit(text2.charCodeAt(i4))) { + i4++; + } + } else { + numStart = i4; + while (i4 < text2.length && isDecimalDigit(text2.charCodeAt(i4))) { + i4++; + } + } + if (text2[i4] === ";") { + const numStr = text2.slice(numStart, i4); + if (numStr) { + i4++; + entity = String.fromCodePoint(parseInt(numStr, radix)); + } + } + } else { + while (i4 < text2.length && count++ < 10) { + const ch = text2[i4]; + i4++; + if (ch === ";") { + entity = _xhtml2.default.get(str); + break; + } + str += ch; + } + } + if (!entity) { + return { entity: "&", newI: indexAfterAmpersand }; + } + return { entity, newI: i4 }; + } + function isDecimalDigit(code) { + return code >= _charcodes.charCodes.digit0 && code <= _charcodes.charCodes.digit9; + } + function isHexDigit(code) { + return code >= _charcodes.charCodes.digit0 && code <= _charcodes.charCodes.digit9 || code >= _charcodes.charCodes.lowercaseA && code <= _charcodes.charCodes.lowercaseF || code >= _charcodes.charCodes.uppercaseA && code <= _charcodes.charCodes.uppercaseF; + } + } +}); + +// node_modules/sucrase/dist/util/getNonTypeIdentifiers.js +var require_getNonTypeIdentifiers = __commonJS({ + "node_modules/sucrase/dist/util/getNonTypeIdentifiers.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _tokenizer = require_tokenizer(); + var _types = require_types(); + var _JSXTransformer = require_JSXTransformer(); + var _getJSXPragmaInfo = require_getJSXPragmaInfo(); + var _getJSXPragmaInfo2 = _interopRequireDefault(_getJSXPragmaInfo); + function getNonTypeIdentifiers(tokens, options2) { + const jsxPragmaInfo = _getJSXPragmaInfo2.default.call(void 0, options2); + const nonTypeIdentifiers = /* @__PURE__ */ new Set(); + for (let i4 = 0; i4 < tokens.tokens.length; i4++) { + const token2 = tokens.tokens[i4]; + if (token2.type === _types.TokenType.name && !token2.isType && (token2.identifierRole === _tokenizer.IdentifierRole.Access || token2.identifierRole === _tokenizer.IdentifierRole.ObjectShorthand || token2.identifierRole === _tokenizer.IdentifierRole.ExportAccess) && !token2.shadowsGlobal) { + nonTypeIdentifiers.add(tokens.identifierNameForToken(token2)); + } + if (token2.type === _types.TokenType.jsxTagStart) { + nonTypeIdentifiers.add(jsxPragmaInfo.base); + } + if (token2.type === _types.TokenType.jsxTagStart && i4 + 1 < tokens.tokens.length && tokens.tokens[i4 + 1].type === _types.TokenType.jsxTagEnd) { + nonTypeIdentifiers.add(jsxPragmaInfo.base); + nonTypeIdentifiers.add(jsxPragmaInfo.fragmentBase); + } + if (token2.type === _types.TokenType.jsxName && token2.identifierRole === _tokenizer.IdentifierRole.Access) { + const identifierName = tokens.identifierNameForToken(token2); + if (!_JSXTransformer.startsWithLowerCase.call(void 0, identifierName) || tokens.tokens[i4 + 1].type === _types.TokenType.dot) { + nonTypeIdentifiers.add(tokens.identifierNameForToken(token2)); + } + } + } + return nonTypeIdentifiers; + } + exports2.getNonTypeIdentifiers = getNonTypeIdentifiers; + } +}); + +// node_modules/sucrase/dist/CJSImportProcessor.js +var require_CJSImportProcessor = __commonJS({ + "node_modules/sucrase/dist/CJSImportProcessor.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _tokenizer = require_tokenizer(); + var _keywords = require_keywords(); + var _types = require_types(); + var _getImportExportSpecifierInfo = require_getImportExportSpecifierInfo(); + var _getImportExportSpecifierInfo2 = _interopRequireDefault(_getImportExportSpecifierInfo); + var _getNonTypeIdentifiers = require_getNonTypeIdentifiers(); + var CJSImportProcessor = class _CJSImportProcessor { + __init() { + this.nonTypeIdentifiers = /* @__PURE__ */ new Set(); + } + __init2() { + this.importInfoByPath = /* @__PURE__ */ new Map(); + } + __init3() { + this.importsToReplace = /* @__PURE__ */ new Map(); + } + __init4() { + this.identifierReplacements = /* @__PURE__ */ new Map(); + } + __init5() { + this.exportBindingsByLocalName = /* @__PURE__ */ new Map(); + } + constructor(nameManager, tokens, enableLegacyTypeScriptModuleInterop, options2, isTypeScriptTransformEnabled, keepUnusedImports, helperManager) { + ; + this.nameManager = nameManager; + this.tokens = tokens; + this.enableLegacyTypeScriptModuleInterop = enableLegacyTypeScriptModuleInterop; + this.options = options2; + this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled; + this.keepUnusedImports = keepUnusedImports; + this.helperManager = helperManager; + _CJSImportProcessor.prototype.__init.call(this); + _CJSImportProcessor.prototype.__init2.call(this); + _CJSImportProcessor.prototype.__init3.call(this); + _CJSImportProcessor.prototype.__init4.call(this); + _CJSImportProcessor.prototype.__init5.call(this); + } + preprocessTokens() { + for (let i4 = 0; i4 < this.tokens.tokens.length; i4++) { + if (this.tokens.matches1AtIndex(i4, _types.TokenType._import) && !this.tokens.matches3AtIndex(i4, _types.TokenType._import, _types.TokenType.name, _types.TokenType.eq)) { + this.preprocessImportAtIndex(i4); + } + if (this.tokens.matches1AtIndex(i4, _types.TokenType._export) && !this.tokens.matches2AtIndex(i4, _types.TokenType._export, _types.TokenType.eq)) { + this.preprocessExportAtIndex(i4); + } + } + this.generateImportReplacements(); + } + /** + * In TypeScript, import statements that only import types should be removed. + * This includes `import {} from 'foo';`, but not `import 'foo';`. + */ + pruneTypeOnlyImports() { + this.nonTypeIdentifiers = _getNonTypeIdentifiers.getNonTypeIdentifiers.call(void 0, this.tokens, this.options); + for (const [path, importInfo] of this.importInfoByPath.entries()) { + if (importInfo.hasBareImport || importInfo.hasStarExport || importInfo.exportStarNames.length > 0 || importInfo.namedExports.length > 0) { + continue; + } + const names = [ + ...importInfo.defaultNames, + ...importInfo.wildcardNames, + ...importInfo.namedImports.map(({ localName }) => localName) + ]; + if (names.every((name) => this.shouldAutomaticallyElideImportedName(name))) { + this.importsToReplace.set(path, ""); + } + } + } + shouldAutomaticallyElideImportedName(name) { + return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && !this.nonTypeIdentifiers.has(name); + } + generateImportReplacements() { + for (const [path, importInfo] of this.importInfoByPath.entries()) { + const { + defaultNames, + wildcardNames, + namedImports, + namedExports, + exportStarNames, + hasStarExport + } = importInfo; + if (defaultNames.length === 0 && wildcardNames.length === 0 && namedImports.length === 0 && namedExports.length === 0 && exportStarNames.length === 0 && !hasStarExport) { + this.importsToReplace.set(path, `require('${path}');`); + continue; + } + const primaryImportName = this.getFreeIdentifierForPath(path); + let secondaryImportName; + if (this.enableLegacyTypeScriptModuleInterop) { + secondaryImportName = primaryImportName; + } else { + secondaryImportName = wildcardNames.length > 0 ? wildcardNames[0] : this.getFreeIdentifierForPath(path); + } + let requireCode = `var ${primaryImportName} = require('${path}');`; + if (wildcardNames.length > 0) { + for (const wildcardName of wildcardNames) { + const moduleExpr = this.enableLegacyTypeScriptModuleInterop ? primaryImportName : `${this.helperManager.getHelperName("interopRequireWildcard")}(${primaryImportName})`; + requireCode += ` var ${wildcardName} = ${moduleExpr};`; + } + } else if (exportStarNames.length > 0 && secondaryImportName !== primaryImportName) { + requireCode += ` var ${secondaryImportName} = ${this.helperManager.getHelperName( + "interopRequireWildcard" + )}(${primaryImportName});`; + } else if (defaultNames.length > 0 && secondaryImportName !== primaryImportName) { + requireCode += ` var ${secondaryImportName} = ${this.helperManager.getHelperName( + "interopRequireDefault" + )}(${primaryImportName});`; + } + for (const { importedName, localName } of namedExports) { + requireCode += ` ${this.helperManager.getHelperName( + "createNamedExportFrom" + )}(${primaryImportName}, '${localName}', '${importedName}');`; + } + for (const exportStarName of exportStarNames) { + requireCode += ` exports.${exportStarName} = ${secondaryImportName};`; + } + if (hasStarExport) { + requireCode += ` ${this.helperManager.getHelperName( + "createStarExport" + )}(${primaryImportName});`; + } + this.importsToReplace.set(path, requireCode); + for (const defaultName of defaultNames) { + this.identifierReplacements.set(defaultName, `${secondaryImportName}.default`); + } + for (const { importedName, localName } of namedImports) { + this.identifierReplacements.set(localName, `${primaryImportName}.${importedName}`); + } + } + } + getFreeIdentifierForPath(path) { + const components2 = path.split("/"); + const lastComponent = components2[components2.length - 1]; + const baseName = lastComponent.replace(/\W/g, ""); + return this.nameManager.claimFreeName(`_${baseName}`); + } + preprocessImportAtIndex(index) { + const defaultNames = []; + const wildcardNames = []; + const namedImports = []; + index++; + if ((this.tokens.matchesContextualAtIndex(index, _keywords.ContextualKeyword._type) || this.tokens.matches1AtIndex(index, _types.TokenType._typeof)) && !this.tokens.matches1AtIndex(index + 1, _types.TokenType.comma) && !this.tokens.matchesContextualAtIndex(index + 1, _keywords.ContextualKeyword._from)) { + return; + } + if (this.tokens.matches1AtIndex(index, _types.TokenType.parenL)) { + return; + } + if (this.tokens.matches1AtIndex(index, _types.TokenType.name)) { + defaultNames.push(this.tokens.identifierNameAtIndex(index)); + index++; + if (this.tokens.matches1AtIndex(index, _types.TokenType.comma)) { + index++; + } + } + if (this.tokens.matches1AtIndex(index, _types.TokenType.star)) { + index += 2; + wildcardNames.push(this.tokens.identifierNameAtIndex(index)); + index++; + } + if (this.tokens.matches1AtIndex(index, _types.TokenType.braceL)) { + const result = this.getNamedImports(index + 1); + index = result.newIndex; + for (const namedImport of result.namedImports) { + if (namedImport.importedName === "default") { + defaultNames.push(namedImport.localName); + } else { + namedImports.push(namedImport); + } + } + } + if (this.tokens.matchesContextualAtIndex(index, _keywords.ContextualKeyword._from)) { + index++; + } + if (!this.tokens.matches1AtIndex(index, _types.TokenType.string)) { + throw new Error("Expected string token at the end of import statement."); + } + const path = this.tokens.stringValueAtIndex(index); + const importInfo = this.getImportInfo(path); + importInfo.defaultNames.push(...defaultNames); + importInfo.wildcardNames.push(...wildcardNames); + importInfo.namedImports.push(...namedImports); + if (defaultNames.length === 0 && wildcardNames.length === 0 && namedImports.length === 0) { + importInfo.hasBareImport = true; + } + } + preprocessExportAtIndex(index) { + if (this.tokens.matches2AtIndex(index, _types.TokenType._export, _types.TokenType._var) || this.tokens.matches2AtIndex(index, _types.TokenType._export, _types.TokenType._let) || this.tokens.matches2AtIndex(index, _types.TokenType._export, _types.TokenType._const)) { + this.preprocessVarExportAtIndex(index); + } else if (this.tokens.matches2AtIndex(index, _types.TokenType._export, _types.TokenType._function) || this.tokens.matches2AtIndex(index, _types.TokenType._export, _types.TokenType._class)) { + const exportName = this.tokens.identifierNameAtIndex(index + 2); + this.addExportBinding(exportName, exportName); + } else if (this.tokens.matches3AtIndex(index, _types.TokenType._export, _types.TokenType.name, _types.TokenType._function)) { + const exportName = this.tokens.identifierNameAtIndex(index + 3); + this.addExportBinding(exportName, exportName); + } else if (this.tokens.matches2AtIndex(index, _types.TokenType._export, _types.TokenType.braceL)) { + this.preprocessNamedExportAtIndex(index); + } else if (this.tokens.matches2AtIndex(index, _types.TokenType._export, _types.TokenType.star)) { + this.preprocessExportStarAtIndex(index); + } + } + preprocessVarExportAtIndex(index) { + let depth = 0; + for (let i4 = index + 2; ; i4++) { + if (this.tokens.matches1AtIndex(i4, _types.TokenType.braceL) || this.tokens.matches1AtIndex(i4, _types.TokenType.dollarBraceL) || this.tokens.matches1AtIndex(i4, _types.TokenType.bracketL)) { + depth++; + } else if (this.tokens.matches1AtIndex(i4, _types.TokenType.braceR) || this.tokens.matches1AtIndex(i4, _types.TokenType.bracketR)) { + depth--; + } else if (depth === 0 && !this.tokens.matches1AtIndex(i4, _types.TokenType.name)) { + break; + } else if (this.tokens.matches1AtIndex(1, _types.TokenType.eq)) { + const endIndex = this.tokens.currentToken().rhsEndIndex; + if (endIndex == null) { + throw new Error("Expected = token with an end index."); + } + i4 = endIndex - 1; + } else { + const token2 = this.tokens.tokens[i4]; + if (_tokenizer.isDeclaration.call(void 0, token2)) { + const exportName = this.tokens.identifierNameAtIndex(i4); + this.identifierReplacements.set(exportName, `exports.${exportName}`); + } + } + } + } + /** + * Walk this export statement just in case it's an export...from statement. + * If it is, combine it into the import info for that path. Otherwise, just + * bail out; it'll be handled later. + */ + preprocessNamedExportAtIndex(index) { + index += 2; + const { newIndex, namedImports } = this.getNamedImports(index); + index = newIndex; + if (this.tokens.matchesContextualAtIndex(index, _keywords.ContextualKeyword._from)) { + index++; + } else { + for (const { importedName: localName, localName: exportedName } of namedImports) { + this.addExportBinding(localName, exportedName); + } + return; + } + if (!this.tokens.matches1AtIndex(index, _types.TokenType.string)) { + throw new Error("Expected string token at the end of import statement."); + } + const path = this.tokens.stringValueAtIndex(index); + const importInfo = this.getImportInfo(path); + importInfo.namedExports.push(...namedImports); + } + preprocessExportStarAtIndex(index) { + let exportedName = null; + if (this.tokens.matches3AtIndex(index, _types.TokenType._export, _types.TokenType.star, _types.TokenType._as)) { + index += 3; + exportedName = this.tokens.identifierNameAtIndex(index); + index += 2; + } else { + index += 3; + } + if (!this.tokens.matches1AtIndex(index, _types.TokenType.string)) { + throw new Error("Expected string token at the end of star export statement."); + } + const path = this.tokens.stringValueAtIndex(index); + const importInfo = this.getImportInfo(path); + if (exportedName !== null) { + importInfo.exportStarNames.push(exportedName); + } else { + importInfo.hasStarExport = true; + } + } + getNamedImports(index) { + const namedImports = []; + while (true) { + if (this.tokens.matches1AtIndex(index, _types.TokenType.braceR)) { + index++; + break; + } + const specifierInfo = _getImportExportSpecifierInfo2.default.call(void 0, this.tokens, index); + index = specifierInfo.endIndex; + if (!specifierInfo.isType) { + namedImports.push({ + importedName: specifierInfo.leftName, + localName: specifierInfo.rightName + }); + } + if (this.tokens.matches2AtIndex(index, _types.TokenType.comma, _types.TokenType.braceR)) { + index += 2; + break; + } else if (this.tokens.matches1AtIndex(index, _types.TokenType.braceR)) { + index++; + break; + } else if (this.tokens.matches1AtIndex(index, _types.TokenType.comma)) { + index++; + } else { + throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.tokens[index])}`); + } + } + return { newIndex: index, namedImports }; + } + /** + * Get a mutable import info object for this path, creating one if it doesn't + * exist yet. + */ + getImportInfo(path) { + const existingInfo = this.importInfoByPath.get(path); + if (existingInfo) { + return existingInfo; + } + const newInfo = { + defaultNames: [], + wildcardNames: [], + namedImports: [], + namedExports: [], + hasBareImport: false, + exportStarNames: [], + hasStarExport: false + }; + this.importInfoByPath.set(path, newInfo); + return newInfo; + } + addExportBinding(localName, exportedName) { + if (!this.exportBindingsByLocalName.has(localName)) { + this.exportBindingsByLocalName.set(localName, []); + } + this.exportBindingsByLocalName.get(localName).push(exportedName); + } + /** + * Return the code to use for the import for this path, or the empty string if + * the code has already been "claimed" by a previous import. + */ + claimImportCode(importPath) { + const result = this.importsToReplace.get(importPath); + this.importsToReplace.set(importPath, ""); + return result || ""; + } + getIdentifierReplacement(identifierName) { + return this.identifierReplacements.get(identifierName) || null; + } + /** + * Return a string like `exports.foo = exports.bar`. + */ + resolveExportBinding(assignedName) { + const exportedNames = this.exportBindingsByLocalName.get(assignedName); + if (!exportedNames || exportedNames.length === 0) { + return null; + } + return exportedNames.map((exportedName) => `exports.${exportedName}`).join(" = "); + } + /** + * Return all imported/exported names where we might be interested in whether usages of those + * names are shadowed. + */ + getGlobalNames() { + return /* @__PURE__ */ new Set([ + ...this.identifierReplacements.keys(), + ...this.exportBindingsByLocalName.keys() + ]); + } + }; + exports2.default = CJSImportProcessor; } }); // node_modules/@jridgewell/set-array/dist/set-array.umd.js var require_set_array_umd = __commonJS({ - "node_modules/@jridgewell/set-array/dist/set-array.umd.js"(exports, module2) { + "node_modules/@jridgewell/set-array/dist/set-array.umd.js"(exports2, module2) { (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.setArray = {})); - })(exports, function(exports2) { + typeof exports2 === "object" && typeof module2 !== "undefined" ? factory(exports2) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.setArray = {})); + })(exports2, function(exports3) { "use strict"; class SetArray { constructor() { @@ -671,67 +13974,102 @@ var require_set_array_umd = __commonJS({ this.array = []; } } - function cast(set2) { - return set2; + function cast(set) { + return set; } - function get2(setarr, key) { + function get(setarr, key) { return cast(setarr)._indexes[key]; } function put(setarr, key) { - const index2 = get2(setarr, key); - if (index2 !== void 0) - return index2; - const { array: array2, _indexes: indexes } = cast(setarr); - const length2 = array2.push(key); + const index = get(setarr, key); + if (index !== void 0) + return index; + const { array, _indexes: indexes } = cast(setarr); + const length2 = array.push(key); return indexes[key] = length2 - 1; } function pop(setarr) { - const { array: array2, _indexes: indexes } = cast(setarr); - if (array2.length === 0) + const { array, _indexes: indexes } = cast(setarr); + if (array.length === 0) return; - const last = array2.pop(); + const last = array.pop(); indexes[last] = void 0; } function remove(setarr, key) { - const index2 = get2(setarr, key); - if (index2 === void 0) + const index = get(setarr, key); + if (index === void 0) return; - const { array: array2, _indexes: indexes } = cast(setarr); - for (let i4 = index2 + 1; i4 < array2.length; i4++) { - const k4 = array2[i4]; - array2[i4 - 1] = k4; + const { array, _indexes: indexes } = cast(setarr); + for (let i4 = index + 1; i4 < array.length; i4++) { + const k4 = array[i4]; + array[i4 - 1] = k4; indexes[k4]--; } indexes[key] = void 0; - array2.pop(); + array.pop(); } - exports2.SetArray = SetArray; - exports2.get = get2; - exports2.pop = pop; - exports2.put = put; - exports2.remove = remove; - Object.defineProperty(exports2, "__esModule", { value: true }); + exports3.SetArray = SetArray; + exports3.get = get; + exports3.pop = pop; + exports3.put = put; + exports3.remove = remove; + Object.defineProperty(exports3, "__esModule", { value: true }); }); } }); // node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js var require_sourcemap_codec_umd = __commonJS({ - "node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js"(exports, module2) { + "node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js"(exports2, module2) { (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.sourcemapCodec = {})); - })(exports, function(exports2) { + typeof exports2 === "object" && typeof module2 !== "undefined" ? factory(exports2) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.sourcemapCodec = {})); + })(exports2, function(exports3) { "use strict"; const comma = ",".charCodeAt(0); - const semicolon2 = ";".charCodeAt(0); + const semicolon = ";".charCodeAt(0); const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; const intToChar = new Uint8Array(64); const charToInt = new Uint8Array(128); for (let i4 = 0; i4 < chars.length; i4++) { - const c3 = chars.charCodeAt(i4); - intToChar[i4] = c3; - charToInt[c3] = i4; + const c4 = chars.charCodeAt(i4); + intToChar[i4] = c4; + charToInt[c4] = i4; } + function decodeInteger(reader, relative) { + let value = 0; + let shift2 = 0; + let integer = 0; + do { + const c4 = reader.next(); + integer = charToInt[c4]; + value |= (integer & 31) << shift2; + shift2 += 5; + } while (integer & 32); + const shouldNegate = value & 1; + value >>>= 1; + if (shouldNegate) { + value = -2147483648 | -value; + } + return relative + value; + } + function encodeInteger(builder, num, relative) { + let delta = num - relative; + delta = delta < 0 ? -delta << 1 | 1 : delta << 1; + do { + let clamped = delta & 31; + delta >>>= 5; + if (delta > 0) + clamped |= 32; + builder.write(intToChar[clamped]); + } while (delta > 0); + return num; + } + function hasMoreVlq(reader, max2) { + if (reader.pos >= max2) + return false; + return reader.peek() !== comma; + } + const bufLength = 1024 * 16; const td = typeof TextDecoder !== "undefined" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== "undefined" ? { decode(buf) { const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength); @@ -746,174 +14084,397 @@ var require_sourcemap_codec_umd = __commonJS({ return out; } }; - function decode(mappings) { - const state2 = new Int32Array(5); - const decoded = []; - let index2 = 0; + class StringWriter { + constructor() { + this.pos = 0; + this.out = ""; + this.buffer = new Uint8Array(bufLength); + } + write(v3) { + const { buffer } = this; + buffer[this.pos++] = v3; + if (this.pos === bufLength) { + this.out += td.decode(buffer); + this.pos = 0; + } + } + flush() { + const { buffer, out, pos } = this; + return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out; + } + } + class StringReader { + constructor(buffer) { + this.pos = 0; + this.buffer = buffer; + } + next() { + return this.buffer.charCodeAt(this.pos++); + } + peek() { + return this.buffer.charCodeAt(this.pos); + } + indexOf(char2) { + const { buffer, pos } = this; + const idx = buffer.indexOf(char2, pos); + return idx === -1 ? buffer.length : idx; + } + } + const EMPTY = []; + function decodeOriginalScopes(input) { + const { length: length2 } = input; + const reader = new StringReader(input); + const scopes = []; + const stack = []; + let line2 = 0; + for (; reader.pos < length2; reader.pos++) { + line2 = decodeInteger(reader, line2); + const column2 = decodeInteger(reader, 0); + if (!hasMoreVlq(reader, length2)) { + const last = stack.pop(); + last[2] = line2; + last[3] = column2; + continue; + } + const kind = decodeInteger(reader, 0); + const fields = decodeInteger(reader, 0); + const hasName = fields & 1; + const scope = hasName ? [line2, column2, 0, 0, kind, decodeInteger(reader, 0)] : [line2, column2, 0, 0, kind]; + let vars = EMPTY; + if (hasMoreVlq(reader, length2)) { + vars = []; + do { + const varsIndex = decodeInteger(reader, 0); + vars.push(varsIndex); + } while (hasMoreVlq(reader, length2)); + } + scope.vars = vars; + scopes.push(scope); + stack.push(scope); + } + return scopes; + } + function encodeOriginalScopes(scopes) { + const writer = new StringWriter(); + for (let i4 = 0; i4 < scopes.length; ) { + i4 = _encodeOriginalScopes(scopes, i4, writer, [0]); + } + return writer.flush(); + } + function _encodeOriginalScopes(scopes, index, writer, state) { + const scope = scopes[index]; + const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope; + if (index > 0) + writer.write(comma); + state[0] = encodeInteger(writer, startLine, state[0]); + encodeInteger(writer, startColumn, 0); + encodeInteger(writer, kind, 0); + const fields = scope.length === 6 ? 1 : 0; + encodeInteger(writer, fields, 0); + if (scope.length === 6) + encodeInteger(writer, scope[5], 0); + for (const v3 of vars) { + encodeInteger(writer, v3, 0); + } + for (index++; index < scopes.length; ) { + const next2 = scopes[index]; + const { 0: l4, 1: c4 } = next2; + if (l4 > endLine || l4 === endLine && c4 >= endColumn) { + break; + } + index = _encodeOriginalScopes(scopes, index, writer, state); + } + writer.write(comma); + state[0] = encodeInteger(writer, endLine, state[0]); + encodeInteger(writer, endColumn, 0); + return index; + } + function decodeGeneratedRanges(input) { + const { length: length2 } = input; + const reader = new StringReader(input); + const ranges = []; + const stack = []; + let genLine = 0; + let definitionSourcesIndex = 0; + let definitionScopeIndex = 0; + let callsiteSourcesIndex = 0; + let callsiteLine = 0; + let callsiteColumn = 0; + let bindingLine = 0; + let bindingColumn = 0; do { - const semi = indexOf(mappings, index2); + const semi = reader.indexOf(";"); + let genColumn = 0; + for (; reader.pos < semi; reader.pos++) { + genColumn = decodeInteger(reader, genColumn); + if (!hasMoreVlq(reader, semi)) { + const last = stack.pop(); + last[2] = genLine; + last[3] = genColumn; + continue; + } + const fields = decodeInteger(reader, 0); + const hasDefinition = fields & 1; + const hasCallsite = fields & 2; + const hasScope = fields & 4; + let callsite = null; + let bindings = EMPTY; + let range; + if (hasDefinition) { + const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex); + definitionScopeIndex = decodeInteger(reader, definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0); + definitionSourcesIndex = defSourcesIndex; + range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex]; + } else { + range = [genLine, genColumn, 0, 0]; + } + range.isScope = !!hasScope; + if (hasCallsite) { + const prevCsi = callsiteSourcesIndex; + const prevLine = callsiteLine; + callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex); + const sameSource = prevCsi === callsiteSourcesIndex; + callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0); + callsiteColumn = decodeInteger(reader, sameSource && prevLine === callsiteLine ? callsiteColumn : 0); + callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn]; + } + range.callsite = callsite; + if (hasMoreVlq(reader, semi)) { + bindings = []; + do { + bindingLine = genLine; + bindingColumn = genColumn; + const expressionsCount = decodeInteger(reader, 0); + let expressionRanges; + if (expressionsCount < -1) { + expressionRanges = [[decodeInteger(reader, 0)]]; + for (let i4 = -1; i4 > expressionsCount; i4--) { + const prevBl = bindingLine; + bindingLine = decodeInteger(reader, bindingLine); + bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0); + const expression = decodeInteger(reader, 0); + expressionRanges.push([expression, bindingLine, bindingColumn]); + } + } else { + expressionRanges = [[expressionsCount]]; + } + bindings.push(expressionRanges); + } while (hasMoreVlq(reader, semi)); + } + range.bindings = bindings; + ranges.push(range); + stack.push(range); + } + genLine++; + reader.pos = semi + 1; + } while (reader.pos < length2); + return ranges; + } + function encodeGeneratedRanges(ranges) { + if (ranges.length === 0) + return ""; + const writer = new StringWriter(); + for (let i4 = 0; i4 < ranges.length; ) { + i4 = _encodeGeneratedRanges(ranges, i4, writer, [0, 0, 0, 0, 0, 0, 0]); + } + return writer.flush(); + } + function _encodeGeneratedRanges(ranges, index, writer, state) { + const range = ranges[index]; + const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, isScope, callsite, bindings } = range; + if (state[0] < startLine) { + catchupLine(writer, state[0], startLine); + state[0] = startLine; + state[1] = 0; + } else if (index > 0) { + writer.write(comma); + } + state[1] = encodeInteger(writer, range[1], state[1]); + const fields = (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0); + encodeInteger(writer, fields, 0); + if (range.length === 6) { + const { 4: sourcesIndex, 5: scopesIndex } = range; + if (sourcesIndex !== state[2]) { + state[3] = 0; + } + state[2] = encodeInteger(writer, sourcesIndex, state[2]); + state[3] = encodeInteger(writer, scopesIndex, state[3]); + } + if (callsite) { + const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite; + if (sourcesIndex !== state[4]) { + state[5] = 0; + state[6] = 0; + } else if (callLine !== state[5]) { + state[6] = 0; + } + state[4] = encodeInteger(writer, sourcesIndex, state[4]); + state[5] = encodeInteger(writer, callLine, state[5]); + state[6] = encodeInteger(writer, callColumn, state[6]); + } + if (bindings) { + for (const binding of bindings) { + if (binding.length > 1) + encodeInteger(writer, -binding.length, 0); + const expression = binding[0][0]; + encodeInteger(writer, expression, 0); + let bindingStartLine = startLine; + let bindingStartColumn = startColumn; + for (let i4 = 1; i4 < binding.length; i4++) { + const expRange = binding[i4]; + bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine); + bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn); + encodeInteger(writer, expRange[0], 0); + } + } + } + for (index++; index < ranges.length; ) { + const next2 = ranges[index]; + const { 0: l4, 1: c4 } = next2; + if (l4 > endLine || l4 === endLine && c4 >= endColumn) { + break; + } + index = _encodeGeneratedRanges(ranges, index, writer, state); + } + if (state[0] < endLine) { + catchupLine(writer, state[0], endLine); + state[0] = endLine; + state[1] = 0; + } else { + writer.write(comma); + } + state[1] = encodeInteger(writer, endColumn, state[1]); + return index; + } + function catchupLine(writer, lastLine, line2) { + do { + writer.write(semicolon); + } while (++lastLine < line2); + } + function decode(mappings) { + const { length: length2 } = mappings; + const reader = new StringReader(mappings); + const decoded = []; + let genColumn = 0; + let sourcesIndex = 0; + let sourceLine = 0; + let sourceColumn = 0; + let namesIndex = 0; + do { + const semi = reader.indexOf(";"); const line2 = []; let sorted = true; let lastCol = 0; - state2[0] = 0; - for (let i4 = index2; i4 < semi; i4++) { + genColumn = 0; + while (reader.pos < semi) { let seg; - i4 = decodeInteger(mappings, i4, state2, 0); - const col = state2[0]; - if (col < lastCol) + genColumn = decodeInteger(reader, genColumn); + if (genColumn < lastCol) sorted = false; - lastCol = col; - if (hasMoreVlq(mappings, i4, semi)) { - i4 = decodeInteger(mappings, i4, state2, 1); - i4 = decodeInteger(mappings, i4, state2, 2); - i4 = decodeInteger(mappings, i4, state2, 3); - if (hasMoreVlq(mappings, i4, semi)) { - i4 = decodeInteger(mappings, i4, state2, 4); - seg = [col, state2[1], state2[2], state2[3], state2[4]]; + lastCol = genColumn; + if (hasMoreVlq(reader, semi)) { + sourcesIndex = decodeInteger(reader, sourcesIndex); + sourceLine = decodeInteger(reader, sourceLine); + sourceColumn = decodeInteger(reader, sourceColumn); + if (hasMoreVlq(reader, semi)) { + namesIndex = decodeInteger(reader, namesIndex); + seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]; } else { - seg = [col, state2[1], state2[2], state2[3]]; + seg = [genColumn, sourcesIndex, sourceLine, sourceColumn]; } } else { - seg = [col]; + seg = [genColumn]; } line2.push(seg); + reader.pos++; } if (!sorted) sort(line2); decoded.push(line2); - index2 = semi + 1; - } while (index2 <= mappings.length); + reader.pos = semi + 1; + } while (reader.pos <= length2); return decoded; } - function indexOf(mappings, index2) { - const idx = mappings.indexOf(";", index2); - return idx === -1 ? mappings.length : idx; - } - function decodeInteger(mappings, pos, state2, j4) { - let value = 0; - let shift2 = 0; - let integer = 0; - do { - const c3 = mappings.charCodeAt(pos++); - integer = charToInt[c3]; - value |= (integer & 31) << shift2; - shift2 += 5; - } while (integer & 32); - const shouldNegate = value & 1; - value >>>= 1; - if (shouldNegate) { - value = -2147483648 | -value; - } - state2[j4] += value; - return pos; - } - function hasMoreVlq(mappings, i4, length2) { - if (i4 >= length2) - return false; - return mappings.charCodeAt(i4) !== comma; - } function sort(line2) { line2.sort(sortComparator); } - function sortComparator(a3, b3) { - return a3[0] - b3[0]; + function sortComparator(a4, b3) { + return a4[0] - b3[0]; } function encode(decoded) { - const state2 = new Int32Array(5); - const bufLength = 1024 * 16; - const subLength = bufLength - 36; - const buf = new Uint8Array(bufLength); - const sub = buf.subarray(0, subLength); - let pos = 0; - let out = ""; + const writer = new StringWriter(); + let sourcesIndex = 0; + let sourceLine = 0; + let sourceColumn = 0; + let namesIndex = 0; for (let i4 = 0; i4 < decoded.length; i4++) { const line2 = decoded[i4]; - if (i4 > 0) { - if (pos === bufLength) { - out += td.decode(buf); - pos = 0; - } - buf[pos++] = semicolon2; - } + if (i4 > 0) + writer.write(semicolon); if (line2.length === 0) continue; - state2[0] = 0; + let genColumn = 0; for (let j4 = 0; j4 < line2.length; j4++) { const segment = line2[j4]; - if (pos > subLength) { - out += td.decode(sub); - buf.copyWithin(0, subLength, pos); - pos -= subLength; - } if (j4 > 0) - buf[pos++] = comma; - pos = encodeInteger(buf, pos, state2, segment, 0); + writer.write(comma); + genColumn = encodeInteger(writer, segment[0], genColumn); if (segment.length === 1) continue; - pos = encodeInteger(buf, pos, state2, segment, 1); - pos = encodeInteger(buf, pos, state2, segment, 2); - pos = encodeInteger(buf, pos, state2, segment, 3); + sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex); + sourceLine = encodeInteger(writer, segment[2], sourceLine); + sourceColumn = encodeInteger(writer, segment[3], sourceColumn); if (segment.length === 4) continue; - pos = encodeInteger(buf, pos, state2, segment, 4); + namesIndex = encodeInteger(writer, segment[4], namesIndex); } } - return out + td.decode(buf.subarray(0, pos)); + return writer.flush(); } - function encodeInteger(buf, pos, state2, segment, j4) { - const next3 = segment[j4]; - let num = next3 - state2[j4]; - state2[j4] = next3; - num = num < 0 ? -num << 1 | 1 : num << 1; - do { - let clamped = num & 31; - num >>>= 5; - if (num > 0) - clamped |= 32; - buf[pos++] = intToChar[clamped]; - } while (num > 0); - return pos; - } - exports2.decode = decode; - exports2.encode = encode; - Object.defineProperty(exports2, "__esModule", { value: true }); + exports3.decode = decode; + exports3.decodeGeneratedRanges = decodeGeneratedRanges; + exports3.decodeOriginalScopes = decodeOriginalScopes; + exports3.encode = encode; + exports3.encodeGeneratedRanges = encodeGeneratedRanges; + exports3.encodeOriginalScopes = encodeOriginalScopes; + Object.defineProperty(exports3, "__esModule", { value: true }); }); } }); // node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js var require_resolve_uri_umd = __commonJS({ - "node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js"(exports, module2) { + "node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js"(exports2, module2) { (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.resolveURI = factory()); - })(exports, function() { + typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.resolveURI = factory()); + })(exports2, function() { "use strict"; const schemeRegex = /^[\w+.-]+:\/\//; const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/; const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i; - function isAbsoluteUrl(input2) { - return schemeRegex.test(input2); + function isAbsoluteUrl(input) { + return schemeRegex.test(input); } - function isSchemeRelativeUrl(input2) { - return input2.startsWith("//"); + function isSchemeRelativeUrl(input) { + return input.startsWith("//"); } - function isAbsolutePath(input2) { - return input2.startsWith("/"); + function isAbsolutePath(input) { + return input.startsWith("/"); } - function isFileUrl(input2) { - return input2.startsWith("file:"); + function isFileUrl(input) { + return input.startsWith("file:"); } - function isRelative(input2) { - return /^[.?#]/.test(input2); + function isRelative(input) { + return /^[.?#]/.test(input); } - function parseAbsoluteUrl(input2) { - const match4 = urlRegex.exec(input2); - return makeUrl(match4[1], match4[2] || "", match4[3], match4[4] || "", match4[5] || "/", match4[6] || "", match4[7] || ""); + function parseAbsoluteUrl(input) { + const match3 = urlRegex.exec(input); + return makeUrl(match3[1], match3[2] || "", match3[3], match3[4] || "", match3[5] || "/", match3[6] || "", match3[7] || ""); } - function parseFileUrl(input2) { - const match4 = fileRegex.exec(input2); - const path = match4[2]; - return makeUrl("file:", "", match4[1] || "", "", isAbsolutePath(path) ? path : "/" + path, match4[3] || "", match4[4] || ""); + function parseFileUrl(input) { + const match3 = fileRegex.exec(input); + const path = match3[2]; + return makeUrl("file:", "", match3[1] || "", "", isAbsolutePath(path) ? path : "/" + path, match3[3] || "", match3[4] || ""); } function makeUrl(scheme, user, host, port, path, query, hash2) { return { @@ -927,35 +14488,35 @@ var require_resolve_uri_umd = __commonJS({ type: 7 }; } - function parseUrl(input2) { - if (isSchemeRelativeUrl(input2)) { - const url2 = parseAbsoluteUrl("http:" + input2); + function parseUrl(input) { + if (isSchemeRelativeUrl(input)) { + const url2 = parseAbsoluteUrl("http:" + input); url2.scheme = ""; url2.type = 6; return url2; } - if (isAbsolutePath(input2)) { - const url2 = parseAbsoluteUrl("http://foo.com" + input2); + if (isAbsolutePath(input)) { + const url2 = parseAbsoluteUrl("http://foo.com" + input); url2.scheme = ""; url2.host = ""; url2.type = 5; return url2; } - if (isFileUrl(input2)) - return parseFileUrl(input2); - if (isAbsoluteUrl(input2)) - return parseAbsoluteUrl(input2); - const url = parseAbsoluteUrl("http://foo.com/" + input2); + if (isFileUrl(input)) + return parseFileUrl(input); + if (isAbsoluteUrl(input)) + return parseAbsoluteUrl(input); + const url = parseAbsoluteUrl("http://foo.com/" + input); url.scheme = ""; url.host = ""; - url.type = input2 ? input2.startsWith("?") ? 3 : input2.startsWith("#") ? 2 : 4 : 1; + url.type = input ? input.startsWith("?") ? 3 : input.startsWith("#") ? 2 : 4 : 1; return url; } function stripPathFilename(path) { if (path.endsWith("/..")) return path; - const index2 = path.lastIndexOf("/"); - return path.slice(0, index2 + 1); + const index = path.lastIndexOf("/"); + return path.slice(0, index + 1); } function mergePaths(url, base) { normalizePath(base, base.type); @@ -1002,10 +14563,10 @@ var require_resolve_uri_umd = __commonJS({ } url.path = path; } - function resolve(input2, base) { - if (!input2 && !base) + function resolve(input, base) { + if (!input && !base) return ""; - const url = parseUrl(input2); + const url = parseUrl(input); let inputType = url.type; if (base && inputType !== 7) { const baseUrl = parseUrl(base); @@ -1013,15 +14574,19 @@ var require_resolve_uri_umd = __commonJS({ switch (inputType) { case 1: url.hash = baseUrl.hash; + // fall through case 2: url.query = baseUrl.query; + // fall through case 3: case 4: mergePaths(url, baseUrl); + // fall through case 5: url.user = baseUrl.user; url.host = baseUrl.host; url.port = baseUrl.port; + // fall through case 6: url.scheme = baseUrl.scheme; } @@ -1031,6 +14596,8 @@ var require_resolve_uri_umd = __commonJS({ normalizePath(url, inputType); const queryHash = url.query + url.hash; switch (inputType) { + // This is impossible, because of the empty checks at the start of the function. + // case UrlType.Empty: case 2: case 3: return queryHash; @@ -1038,7 +14605,7 @@ var require_resolve_uri_umd = __commonJS({ const path = url.path.slice(1); if (!path) return queryHash || "."; - if (isRelative(base || input2) && !isRelative(path)) { + if (isRelative(base || input) && !isRelative(path)) { return "./" + path + queryHash; } return path + queryHash; @@ -1056,21 +14623,21 @@ var require_resolve_uri_umd = __commonJS({ // node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js var require_trace_mapping_umd = __commonJS({ - "node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js"(exports, module2) { + "node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js"(exports2, module2) { (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports, require_sourcemap_codec_umd(), require_resolve_uri_umd()) : typeof define === "function" && define.amd ? define(["exports", "@jridgewell/sourcemap-codec", "@jridgewell/resolve-uri"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.traceMapping = {}, global2.sourcemapCodec, global2.resolveURI)); - })(exports, function(exports2, sourcemapCodec, resolveUri) { + typeof exports2 === "object" && typeof module2 !== "undefined" ? factory(exports2, require_sourcemap_codec_umd(), require_resolve_uri_umd()) : typeof define === "function" && define.amd ? define(["exports", "@jridgewell/sourcemap-codec", "@jridgewell/resolve-uri"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.traceMapping = {}, global2.sourcemapCodec, global2.resolveURI)); + })(exports2, function(exports3, sourcemapCodec, resolveUri) { "use strict"; - function resolve(input2, base) { + function resolve(input, base) { if (base && !base.endsWith("/")) base += "/"; - return resolveUri(input2, base); + return resolveUri(input, base); } function stripFilename(path) { if (!path) return ""; - const index2 = path.lastIndexOf("/"); - return path.slice(0, index2 + 1); + const index = path.lastIndexOf("/"); + return path.slice(0, index + 1); } const COLUMN = 0; const SOURCES_INDEX = 1; @@ -1110,8 +14677,8 @@ var require_trace_mapping_umd = __commonJS({ line2 = line2.slice(); return line2.sort(sortComparator); } - function sortComparator(a3, b3) { - return a3[COLUMN] - b3[COLUMN]; + function sortComparator(a4, b3) { + return a4[COLUMN] - b3[COLUMN]; } let found = false; function binarySearch(haystack, needle, low, high) { @@ -1131,19 +14698,19 @@ var require_trace_mapping_umd = __commonJS({ found = false; return low - 1; } - function upperBound(haystack, needle, index2) { - for (let i4 = index2 + 1; i4 < haystack.length; index2 = i4++) { + function upperBound(haystack, needle, index) { + for (let i4 = index + 1; i4 < haystack.length; index = i4++) { if (haystack[i4][COLUMN] !== needle) break; } - return index2; + return index; } - function lowerBound(haystack, needle, index2) { - for (let i4 = index2 - 1; i4 >= 0; index2 = i4--) { + function lowerBound(haystack, needle, index) { + for (let i4 = index - 1; i4 >= 0; index = i4--) { if (haystack[i4][COLUMN] !== needle) break; } - return index2; + return index; } function memoizedState() { return { @@ -1152,8 +14719,8 @@ var require_trace_mapping_umd = __commonJS({ lastIndex: -1 }; } - function memoizedBinarySearch(haystack, needle, state2, key) { - const { lastKey, lastNeedle, lastIndex } = state2; + function memoizedBinarySearch(haystack, needle, state, key) { + const { lastKey, lastNeedle, lastIndex } = state; let low = 0; let high = haystack.length - 1; if (key === lastKey) { @@ -1167,9 +14734,9 @@ var require_trace_mapping_umd = __commonJS({ high = lastIndex; } } - state2.lastKey = key; - state2.lastNeedle = needle; - return state2.lastIndex = binarySearch(haystack, needle, low, high); + state.lastKey = key; + state.lastNeedle = needle; + return state.lastIndex = binarySearch(haystack, needle, low, high); } function buildBySources(decoded, memos) { const sources = memos.map(buildNullArray); @@ -1185,24 +14752,24 @@ var require_trace_mapping_umd = __commonJS({ const originalSource = sources[sourceIndex2]; const originalLine = originalSource[sourceLine] || (originalSource[sourceLine] = []); const memo = memos[sourceIndex2]; - let index2 = upperBound(originalLine, sourceColumn, memoizedBinarySearch(originalLine, sourceColumn, memo, sourceLine)); - memo.lastIndex = ++index2; - insert(originalLine, index2, [sourceColumn, i4, seg[COLUMN]]); + let index = upperBound(originalLine, sourceColumn, memoizedBinarySearch(originalLine, sourceColumn, memo, sourceLine)); + memo.lastIndex = ++index; + insert(originalLine, index, [sourceColumn, i4, seg[COLUMN]]); } } return sources; } - function insert(array2, index2, value) { - for (let i4 = array2.length; i4 > index2; i4--) { - array2[i4] = array2[i4 - 1]; + function insert(array, index, value) { + for (let i4 = array.length; i4 > index; i4--) { + array[i4] = array[i4 - 1]; } - array2[index2] = value; + array[index] = value; } function buildNullArray() { return { __proto__: null }; } const AnyMap = function(map, mapUrl) { - const parsed = parse5(map); + const parsed = parse4(map); if (!("sections" in parsed)) { return new TraceMap(parsed, mapUrl); } @@ -1223,11 +14790,11 @@ var require_trace_mapping_umd = __commonJS({ }; return presortedDecodedMap(joined); }; - function parse5(map) { + function parse4(map) { return typeof map === "string" ? JSON.parse(map) : map; } - function recurse(input2, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { - const { sections } = input2; + function recurse(input, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { + const { sections } = input; for (let i4 = 0; i4 < sections.length; i4++) { const { map, offset: offset3 } = sections[i4]; let sl = stopLine; @@ -1244,8 +14811,8 @@ var require_trace_mapping_umd = __commonJS({ addSection(map, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset + offset3.line, columnOffset + offset3.column, sl, sc); } } - function addSection(input2, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { - const parsed = parse5(input2); + function addSection(input, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { + const parsed = parse4(input); if ("sections" in parsed) return recurse(...arguments); const map = new TraceMap(parsed, mapUrl); @@ -1290,10 +14857,10 @@ var require_trace_mapping_umd = __commonJS({ for (let i4 = 0; i4 < other.length; i4++) arr.push(other[i4]); } - function getLine(arr, index2) { - for (let i4 = arr.length; i4 <= index2; i4++) + function getLine(arr, index) { + for (let i4 = arr.length; i4 <= index; i4++) arr[i4] = []; - return arr[index2]; + return arr[index]; } const LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)"; const COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)"; @@ -1345,8 +14912,8 @@ var require_trace_mapping_umd = __commonJS({ if (line2 >= decoded.length) return null; const segments = decoded[line2]; - const index2 = traceSegmentInternal(segments, cast(map)._decodedMemo, line2, column2, GREATEST_LOWER_BOUND); - return index2 === -1 ? null : segments[index2]; + const index = traceSegmentInternal(segments, cast(map)._decodedMemo, line2, column2, GREATEST_LOWER_BOUND); + return index === -1 ? null : segments[index]; } function originalPositionFor(map, needle) { let { line: line2, column: column2, bias } = needle; @@ -1359,10 +14926,10 @@ var require_trace_mapping_umd = __commonJS({ if (line2 >= decoded.length) return OMapping(null, null, null, null); const segments = decoded[line2]; - const index2 = traceSegmentInternal(segments, cast(map)._decodedMemo, line2, column2, bias || GREATEST_LOWER_BOUND); - if (index2 === -1) + const index = traceSegmentInternal(segments, cast(map)._decodedMemo, line2, column2, bias || GREATEST_LOWER_BOUND); + if (index === -1) return OMapping(null, null, null, null); - const segment = segments[index2]; + const segment = segments[index]; if (segment.length === 1) return OMapping(null, null, null, null); const { names, resolvedSources } = map; @@ -1409,24 +14976,24 @@ var require_trace_mapping_umd = __commonJS({ } function sourceIndex(map, source) { const { sources, resolvedSources } = map; - let index2 = sources.indexOf(source); - if (index2 === -1) - index2 = resolvedSources.indexOf(source); - return index2; + let index = sources.indexOf(source); + if (index === -1) + index = resolvedSources.indexOf(source); + return index; } function sourceContentFor(map, source) { const { sourcesContent } = map; if (sourcesContent == null) return null; - const index2 = sourceIndex(map, source); - return index2 === -1 ? null : sourcesContent[index2]; + const index = sourceIndex(map, source); + return index === -1 ? null : sourcesContent[index]; } function isIgnored(map, source) { const { ignoreList } = map; if (ignoreList == null) return false; - const index2 = sourceIndex(map, source); - return index2 === -1 ? false : ignoreList.includes(index2); + const index = sourceIndex(map, source); + return index === -1 ? false : ignoreList.includes(index); } function presortedDecodedMap(map, mapUrl) { const tracer = new TraceMap(clone3(map, []), mapUrl); @@ -1458,14 +15025,14 @@ var require_trace_mapping_umd = __commonJS({ return { line: line2, column: column2 }; } function traceSegmentInternal(segments, memo, line2, column2, bias) { - let index2 = memoizedBinarySearch(segments, column2, memo, line2); + let index = memoizedBinarySearch(segments, column2, memo, line2); if (found) { - index2 = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column2, index2); + index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column2, index); } else if (bias === LEAST_UPPER_BOUND) - index2++; - if (index2 === -1 || index2 === segments.length) + index++; + if (index === -1 || index === segments.length) return -1; - return index2; + return index; } function sliceGeneratedPositions(segments, memo, line2, column2, bias) { let min2 = traceSegmentInternal(segments, memo, line2, column2, GREATEST_LOWER_BOUND); @@ -1504,38 +15071,38 @@ var require_trace_mapping_umd = __commonJS({ const memo = cast(map)._bySourceMemos[sourceIndex2]; if (all) return sliceGeneratedPositions(segments, memo, line2, column2, bias); - const index2 = traceSegmentInternal(segments, memo, line2, column2, bias); - if (index2 === -1) + const index = traceSegmentInternal(segments, memo, line2, column2, bias); + if (index === -1) return GMapping(null, null); - const segment = segments[index2]; + const segment = segments[index]; return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]); } - exports2.AnyMap = AnyMap; - exports2.GREATEST_LOWER_BOUND = GREATEST_LOWER_BOUND; - exports2.LEAST_UPPER_BOUND = LEAST_UPPER_BOUND; - exports2.TraceMap = TraceMap; - exports2.allGeneratedPositionsFor = allGeneratedPositionsFor; - exports2.decodedMap = decodedMap; - exports2.decodedMappings = decodedMappings; - exports2.eachMapping = eachMapping; - exports2.encodedMap = encodedMap; - exports2.encodedMappings = encodedMappings; - exports2.generatedPositionFor = generatedPositionFor; - exports2.isIgnored = isIgnored; - exports2.originalPositionFor = originalPositionFor; - exports2.presortedDecodedMap = presortedDecodedMap; - exports2.sourceContentFor = sourceContentFor; - exports2.traceSegment = traceSegment; + exports3.AnyMap = AnyMap; + exports3.GREATEST_LOWER_BOUND = GREATEST_LOWER_BOUND; + exports3.LEAST_UPPER_BOUND = LEAST_UPPER_BOUND; + exports3.TraceMap = TraceMap; + exports3.allGeneratedPositionsFor = allGeneratedPositionsFor; + exports3.decodedMap = decodedMap; + exports3.decodedMappings = decodedMappings; + exports3.eachMapping = eachMapping; + exports3.encodedMap = encodedMap; + exports3.encodedMappings = encodedMappings; + exports3.generatedPositionFor = generatedPositionFor; + exports3.isIgnored = isIgnored; + exports3.originalPositionFor = originalPositionFor; + exports3.presortedDecodedMap = presortedDecodedMap; + exports3.sourceContentFor = sourceContentFor; + exports3.traceSegment = traceSegment; }); } }); // node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js var require_gen_mapping_umd = __commonJS({ - "node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js"(exports, module2) { + "node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js"(exports2, module2) { (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports, require_set_array_umd(), require_sourcemap_codec_umd(), require_trace_mapping_umd()) : typeof define === "function" && define.amd ? define(["exports", "@jridgewell/set-array", "@jridgewell/sourcemap-codec", "@jridgewell/trace-mapping"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.genMapping = {}, global2.setArray, global2.sourcemapCodec, global2.traceMapping)); - })(exports, function(exports2, setArray, sourcemapCodec, traceMapping) { + typeof exports2 === "object" && typeof module2 !== "undefined" ? factory(exports2, require_set_array_umd(), require_sourcemap_codec_umd(), require_trace_mapping_umd()) : typeof define === "function" && define.amd ? define(["exports", "@jridgewell/set-array", "@jridgewell/sourcemap-codec", "@jridgewell/trace-mapping"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.genMapping = {}, global2.setArray, global2.sourcemapCodec, global2.traceMapping)); + })(exports2, function(exports3, setArray, sourcemapCodec, traceMapping) { "use strict"; const COLUMN = 0; const SOURCES_INDEX = 1; @@ -1543,7 +15110,7 @@ var require_gen_mapping_umd = __commonJS({ const SOURCE_COLUMN = 3; const NAMES_INDEX = 4; const NO_NAME = -1; - class GenMapping2 { + class GenMapping { constructor({ file, sourceRoot } = {}) { this._names = new setArray.SetArray(); this._sources = new setArray.SetArray(); @@ -1563,7 +15130,7 @@ var require_gen_mapping_umd = __commonJS({ function addMapping(map, mapping) { return addMappingInternal(false, map, mapping); } - const maybeAddSegment2 = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + const maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { return addSegmentInternal(true, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content); }; const maybeAddMapping = (map, mapping) => { @@ -1571,18 +15138,18 @@ var require_gen_mapping_umd = __commonJS({ }; function setSourceContent(map, source, content) { const { _sources: sources, _sourcesContent: sourcesContent } = cast(map); - const index2 = setArray.put(sources, source); - sourcesContent[index2] = content; + const index = setArray.put(sources, source); + sourcesContent[index] = content; } function setIgnore(map, source, ignore = true) { const { _sources: sources, _sourcesContent: sourcesContent, _ignoreList: ignoreList } = cast(map); - const index2 = setArray.put(sources, source); - if (index2 === sourcesContent.length) - sourcesContent[index2] = null; + const index = setArray.put(sources, source); + if (index === sourcesContent.length) + sourcesContent[index] = null; if (ignore) - setArray.put(ignoreList, index2); + setArray.put(ignoreList, index); else - setArray.remove(ignoreList, index2); + setArray.remove(ignoreList, index); } function toDecodedMap(map) { const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, _ignoreList: ignoreList } = cast(map); @@ -1598,13 +15165,13 @@ var require_gen_mapping_umd = __commonJS({ ignoreList: ignoreList.array }; } - function toEncodedMap2(map) { + function toEncodedMap(map) { const decoded = toDecodedMap(map); return Object.assign(Object.assign({}, decoded), { mappings: sourcemapCodec.encode(decoded.mappings) }); } - function fromMap(input2) { - const map = new traceMapping.TraceMap(input2); - const gen = new GenMapping2({ file: map.file, sourceRoot: map.sourceRoot }); + function fromMap(input) { + const map = new traceMapping.TraceMap(input); + const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot }); putAll(cast(gen)._names, map.names); putAll(cast(gen)._sources, map.sources); cast(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null); @@ -1638,41 +15205,41 @@ var require_gen_mapping_umd = __commonJS({ function addSegmentInternal(skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names } = cast(map); const line2 = getLine(mappings, genLine); - const index2 = getColumnIndex(line2, genColumn); + const index = getColumnIndex(line2, genColumn); if (!source) { - if (skipable && skipSourceless(line2, index2)) + if (skipable && skipSourceless(line2, index)) return; - return insert(line2, index2, [genColumn]); + return insert(line2, index, [genColumn]); } const sourcesIndex = setArray.put(sources, source); const namesIndex = name ? setArray.put(names, name) : NO_NAME; if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content !== null && content !== void 0 ? content : null; - if (skipable && skipSource(line2, index2, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { + if (skipable && skipSource(line2, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { return; } - return insert(line2, index2, name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn]); + return insert(line2, index, name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn]); } - function getLine(mappings, index2) { - for (let i4 = mappings.length; i4 <= index2; i4++) { + function getLine(mappings, index) { + for (let i4 = mappings.length; i4 <= index; i4++) { mappings[i4] = []; } - return mappings[index2]; + return mappings[index]; } function getColumnIndex(line2, genColumn) { - let index2 = line2.length; - for (let i4 = index2 - 1; i4 >= 0; index2 = i4--) { + let index = line2.length; + for (let i4 = index - 1; i4 >= 0; index = i4--) { const current = line2[i4]; if (genColumn >= current[COLUMN]) break; } - return index2; + return index; } - function insert(array2, index2, value) { - for (let i4 = array2.length; i4 > index2; i4--) { - array2[i4] = array2[i4 - 1]; + function insert(array, index, value) { + for (let i4 = array.length; i4 > index; i4--) { + array[i4] = array[i4 - 1]; } - array2[index2] = value; + array[index] = value; } function removeEmptyFinalLines(mappings) { const { length: length2 } = mappings; @@ -1684,20 +15251,20 @@ var require_gen_mapping_umd = __commonJS({ if (len < length2) mappings.length = len; } - function putAll(setarr, array2) { - for (let i4 = 0; i4 < array2.length; i4++) - setArray.put(setarr, array2[i4]); + function putAll(setarr, array) { + for (let i4 = 0; i4 < array.length; i4++) + setArray.put(setarr, array[i4]); } - function skipSourceless(line2, index2) { - if (index2 === 0) + function skipSourceless(line2, index) { + if (index === 0) return true; - const prev2 = line2[index2 - 1]; + const prev2 = line2[index - 1]; return prev2.length === 1; } - function skipSource(line2, index2, sourcesIndex, sourceLine, sourceColumn, namesIndex) { - if (index2 === 0) + function skipSource(line2, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) { + if (index === 0) return false; - const prev2 = line2[index2 - 1]; + const prev2 = line2[index - 1]; if (prev2.length === 1) return false; return sourcesIndex === prev2[SOURCES_INDEX] && sourceLine === prev2[SOURCE_LINE] && sourceColumn === prev2[SOURCE_COLUMN] && namesIndex === (prev2.length === 5 ? prev2[NAMES_INDEX] : NO_NAME); @@ -1709,47 +15276,424 @@ var require_gen_mapping_umd = __commonJS({ } return addSegmentInternal(skipable, map, generated.line - 1, generated.column, source, original.line - 1, original.column, name, content); } - exports2.GenMapping = GenMapping2; - exports2.addMapping = addMapping; - exports2.addSegment = addSegment; - exports2.allMappings = allMappings; - exports2.fromMap = fromMap; - exports2.maybeAddMapping = maybeAddMapping; - exports2.maybeAddSegment = maybeAddSegment2; - exports2.setIgnore = setIgnore; - exports2.setSourceContent = setSourceContent; - exports2.toDecodedMap = toDecodedMap; - exports2.toEncodedMap = toEncodedMap2; - Object.defineProperty(exports2, "__esModule", { value: true }); + exports3.GenMapping = GenMapping; + exports3.addMapping = addMapping; + exports3.addSegment = addSegment; + exports3.allMappings = allMappings; + exports3.fromMap = fromMap; + exports3.maybeAddMapping = maybeAddMapping; + exports3.maybeAddSegment = maybeAddSegment; + exports3.setIgnore = setIgnore; + exports3.setSourceContent = setSourceContent; + exports3.toDecodedMap = toDecodedMap; + exports3.toEncodedMap = toEncodedMap; + Object.defineProperty(exports3, "__esModule", { value: true }); }); } }); -// node_modules/ts-interface-checker/dist/util.js -var require_util = __commonJS({ - "node_modules/ts-interface-checker/dist/util.js"(exports) { +// node_modules/sucrase/dist/computeSourceMap.js +var require_computeSourceMap = __commonJS({ + "node_modules/sucrase/dist/computeSourceMap.js"(exports2) { "use strict"; - var __extends = exports && exports.__extends || function() { - var extendStatics = function(d4, b3) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d5, b4) { - d5.__proto__ = b4; - } || function(d5, b4) { - for (var p4 in b4) - if (b4.hasOwnProperty(p4)) - d5[p4] = b4[p4]; - }; - return extendStatics(d4, b3); - }; - return function(d4, b3) { - extendStatics(d4, b3); - function __() { - this.constructor = d4; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _genmapping = require_gen_mapping_umd(); + var _charcodes = require_charcodes(); + function computeSourceMap({ code: generatedCode, mappings: rawMappings }, filePath, options2, source, tokens) { + const sourceColumns = computeSourceColumns(source, tokens); + const map = new (0, _genmapping.GenMapping)({ file: options2.compiledFilename }); + let tokenIndex = 0; + let currentMapping = rawMappings[0]; + while (currentMapping === void 0 && tokenIndex < rawMappings.length - 1) { + tokenIndex++; + currentMapping = rawMappings[tokenIndex]; + } + let line2 = 0; + let lineStart = 0; + if (currentMapping !== lineStart) { + _genmapping.maybeAddSegment.call(void 0, map, line2, 0, filePath, line2, 0); + } + for (let i4 = 0; i4 < generatedCode.length; i4++) { + if (i4 === currentMapping) { + const genColumn = currentMapping - lineStart; + const sourceColumn = sourceColumns[tokenIndex]; + _genmapping.maybeAddSegment.call(void 0, map, line2, genColumn, filePath, line2, sourceColumn); + while ((currentMapping === i4 || currentMapping === void 0) && tokenIndex < rawMappings.length - 1) { + tokenIndex++; + currentMapping = rawMappings[tokenIndex]; + } } - d4.prototype = b3 === null ? Object.create(b3) : (__.prototype = b3.prototype, new __()); + if (generatedCode.charCodeAt(i4) === _charcodes.charCodes.lineFeed) { + line2++; + lineStart = i4 + 1; + if (currentMapping !== lineStart) { + _genmapping.maybeAddSegment.call(void 0, map, line2, 0, filePath, line2, 0); + } + } + } + const { sourceRoot, sourcesContent, ...sourceMap } = _genmapping.toEncodedMap.call(void 0, map); + return sourceMap; + } + exports2.default = computeSourceMap; + function computeSourceColumns(code, tokens) { + const sourceColumns = new Array(tokens.length); + let tokenIndex = 0; + let currentMapping = tokens[tokenIndex].start; + let lineStart = 0; + for (let i4 = 0; i4 < code.length; i4++) { + if (i4 === currentMapping) { + sourceColumns[tokenIndex] = currentMapping - lineStart; + tokenIndex++; + currentMapping = tokens[tokenIndex].start; + } + if (code.charCodeAt(i4) === _charcodes.charCodes.lineFeed) { + lineStart = i4 + 1; + } + } + return sourceColumns; + } + } +}); + +// node_modules/sucrase/dist/HelperManager.js +var require_HelperManager = __commonJS({ + "node_modules/sucrase/dist/HelperManager.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var HELPERS = { + require: ` + import {createRequire as CREATE_REQUIRE_NAME} from "module"; + const require = CREATE_REQUIRE_NAME(import.meta.url); + `, + interopRequireWildcard: ` + function interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + return newObj; + } + } + `, + interopRequireDefault: ` + function interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + `, + createNamedExportFrom: ` + function createNamedExportFrom(obj, localName, importedName) { + Object.defineProperty(exports, localName, {enumerable: true, configurable: true, get: () => obj[importedName]}); + } + `, + // Note that TypeScript and Babel do this differently; TypeScript does a simple existence + // check in the exports object and does a plain assignment, whereas Babel uses + // defineProperty and builds an object of explicitly-exported names so that star exports can + // always take lower precedence. For now, we do the easier TypeScript thing. + createStarExport: ` + function createStarExport(obj) { + Object.keys(obj) + .filter((key) => key !== "default" && key !== "__esModule") + .forEach((key) => { + if (exports.hasOwnProperty(key)) { + return; + } + Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); + }); + } + `, + nullishCoalesce: ` + function nullishCoalesce(lhs, rhsFn) { + if (lhs != null) { + return lhs; + } else { + return rhsFn(); + } + } + `, + asyncNullishCoalesce: ` + async function asyncNullishCoalesce(lhs, rhsFn) { + if (lhs != null) { + return lhs; + } else { + return await rhsFn(); + } + } + `, + optionalChain: ` + function optionalChain(ops) { + let lastAccessLHS = undefined; + let value = ops[0]; + let i = 1; + while (i < ops.length) { + const op = ops[i]; + const fn = ops[i + 1]; + i += 2; + if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { + return undefined; + } + if (op === 'access' || op === 'optionalAccess') { + lastAccessLHS = value; + value = fn(value); + } else if (op === 'call' || op === 'optionalCall') { + value = fn((...args) => value.call(lastAccessLHS, ...args)); + lastAccessLHS = undefined; + } + } + return value; + } + `, + asyncOptionalChain: ` + async function asyncOptionalChain(ops) { + let lastAccessLHS = undefined; + let value = ops[0]; + let i = 1; + while (i < ops.length) { + const op = ops[i]; + const fn = ops[i + 1]; + i += 2; + if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { + return undefined; + } + if (op === 'access' || op === 'optionalAccess') { + lastAccessLHS = value; + value = await fn(value); + } else if (op === 'call' || op === 'optionalCall') { + value = await fn((...args) => value.call(lastAccessLHS, ...args)); + lastAccessLHS = undefined; + } + } + return value; + } + `, + optionalChainDelete: ` + function optionalChainDelete(ops) { + const result = OPTIONAL_CHAIN_NAME(ops); + return result == null ? true : result; + } + `, + asyncOptionalChainDelete: ` + async function asyncOptionalChainDelete(ops) { + const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops); + return result == null ? true : result; + } + ` + }; + var HelperManager = class _HelperManager { + __init() { + this.helperNames = {}; + } + __init2() { + this.createRequireName = null; + } + constructor(nameManager) { + ; + this.nameManager = nameManager; + _HelperManager.prototype.__init.call(this); + _HelperManager.prototype.__init2.call(this); + } + getHelperName(baseName) { + let helperName = this.helperNames[baseName]; + if (helperName) { + return helperName; + } + helperName = this.nameManager.claimFreeName(`_${baseName}`); + this.helperNames[baseName] = helperName; + return helperName; + } + emitHelpers() { + let resultCode = ""; + if (this.helperNames.optionalChainDelete) { + this.getHelperName("optionalChain"); + } + if (this.helperNames.asyncOptionalChainDelete) { + this.getHelperName("asyncOptionalChain"); + } + for (const [baseName, helperCodeTemplate] of Object.entries(HELPERS)) { + const helperName = this.helperNames[baseName]; + let helperCode = helperCodeTemplate; + if (baseName === "optionalChainDelete") { + helperCode = helperCode.replace("OPTIONAL_CHAIN_NAME", this.helperNames.optionalChain); + } else if (baseName === "asyncOptionalChainDelete") { + helperCode = helperCode.replace( + "ASYNC_OPTIONAL_CHAIN_NAME", + this.helperNames.asyncOptionalChain + ); + } else if (baseName === "require") { + if (this.createRequireName === null) { + this.createRequireName = this.nameManager.claimFreeName("_createRequire"); + } + helperCode = helperCode.replace(/CREATE_REQUIRE_NAME/g, this.createRequireName); + } + if (helperName) { + resultCode += " "; + resultCode += helperCode.replace(baseName, helperName).replace(/\s+/g, " ").trim(); + } + } + return resultCode; + } + }; + exports2.HelperManager = HelperManager; + } +}); + +// node_modules/sucrase/dist/identifyShadowedGlobals.js +var require_identifyShadowedGlobals = __commonJS({ + "node_modules/sucrase/dist/identifyShadowedGlobals.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _tokenizer = require_tokenizer(); + var _types = require_types(); + function identifyShadowedGlobals(tokens, scopes, globalNames) { + if (!hasShadowedGlobals(tokens, globalNames)) { + return; + } + markShadowedGlobals(tokens, scopes, globalNames); + } + exports2.default = identifyShadowedGlobals; + function hasShadowedGlobals(tokens, globalNames) { + for (const token2 of tokens.tokens) { + if (token2.type === _types.TokenType.name && !token2.isType && _tokenizer.isNonTopLevelDeclaration.call(void 0, token2) && globalNames.has(tokens.identifierNameForToken(token2))) { + return true; + } + } + return false; + } + exports2.hasShadowedGlobals = hasShadowedGlobals; + function markShadowedGlobals(tokens, scopes, globalNames) { + const scopeStack = []; + let scopeIndex = scopes.length - 1; + for (let i4 = tokens.tokens.length - 1; ; i4--) { + while (scopeStack.length > 0 && scopeStack[scopeStack.length - 1].startTokenIndex === i4 + 1) { + scopeStack.pop(); + } + while (scopeIndex >= 0 && scopes[scopeIndex].endTokenIndex === i4 + 1) { + scopeStack.push(scopes[scopeIndex]); + scopeIndex--; + } + if (i4 < 0) { + break; + } + const token2 = tokens.tokens[i4]; + const name = tokens.identifierNameForToken(token2); + if (scopeStack.length > 1 && !token2.isType && token2.type === _types.TokenType.name && globalNames.has(name)) { + if (_tokenizer.isBlockScopedDeclaration.call(void 0, token2)) { + markShadowedForScope(scopeStack[scopeStack.length - 1], tokens, name); + } else if (_tokenizer.isFunctionScopedDeclaration.call(void 0, token2)) { + let stackIndex = scopeStack.length - 1; + while (stackIndex > 0 && !scopeStack[stackIndex].isFunctionScope) { + stackIndex--; + } + if (stackIndex < 0) { + throw new Error("Did not find parent function scope."); + } + markShadowedForScope(scopeStack[stackIndex], tokens, name); + } + } + } + if (scopeStack.length > 0) { + throw new Error("Expected empty scope stack after processing file."); + } + } + function markShadowedForScope(scope, tokens, name) { + for (let i4 = scope.startTokenIndex; i4 < scope.endTokenIndex; i4++) { + const token2 = tokens.tokens[i4]; + if ((token2.type === _types.TokenType.name || token2.type === _types.TokenType.jsxName) && tokens.identifierNameForToken(token2) === name) { + token2.shadowsGlobal = true; + } + } + } + } +}); + +// node_modules/sucrase/dist/util/getIdentifierNames.js +var require_getIdentifierNames = __commonJS({ + "node_modules/sucrase/dist/util/getIdentifierNames.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _types = require_types(); + function getIdentifierNames(code, tokens) { + const names = []; + for (const token2 of tokens) { + if (token2.type === _types.TokenType.name) { + names.push(code.slice(token2.start, token2.end)); + } + } + return names; + } + exports2.default = getIdentifierNames; + } +}); + +// node_modules/sucrase/dist/NameManager.js +var require_NameManager = __commonJS({ + "node_modules/sucrase/dist/NameManager.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _getIdentifierNames = require_getIdentifierNames(); + var _getIdentifierNames2 = _interopRequireDefault(_getIdentifierNames); + var NameManager = class _NameManager { + __init() { + this.usedNames = /* @__PURE__ */ new Set(); + } + constructor(code, tokens) { + ; + _NameManager.prototype.__init.call(this); + this.usedNames = new Set(_getIdentifierNames2.default.call(void 0, code, tokens)); + } + claimFreeName(name) { + const newName = this.findFreeName(name); + this.usedNames.add(newName); + return newName; + } + findFreeName(name) { + if (!this.usedNames.has(name)) { + return name; + } + let suffixNum = 2; + while (this.usedNames.has(name + String(suffixNum))) { + suffixNum++; + } + return name + String(suffixNum); + } + }; + exports2.default = NameManager; + } +}); + +// node_modules/ts-interface-checker/dist/util.js +var require_util2 = __commonJS({ + "node_modules/ts-interface-checker/dist/util.js"(exports2) { + "use strict"; + var __extends = exports2 && exports2.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d3, b3) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d4, b4) { + d4.__proto__ = b4; + } || function(d4, b4) { + for (var p3 in b4) if (b4.hasOwnProperty(p3)) d4[p3] = b4[p3]; + }; + return extendStatics(d3, b3); + }; + return function(d3, b3) { + extendStatics(d3, b3); + function __() { + this.constructor = d3; + } + d3.prototype = b3 === null ? Object.create(b3) : (__.prototype = b3.prototype, new __()); }; }(); - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DetailContext = exports.NoopContext = exports.VError = void 0; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.DetailContext = exports2.NoopContext = exports2.VError = void 0; var VError = ( /** @class */ function(_super) { @@ -1763,7 +15707,7 @@ var require_util = __commonJS({ return VError2; }(Error) ); - exports.VError = VError; + exports2.VError = VError; var NoopContext = ( /** @class */ function() { @@ -1783,7 +15727,7 @@ var require_util = __commonJS({ return NoopContext2; }() ); - exports.NoopContext = NoopContext; + exports2.NoopContext = NoopContext; var DetailContext = ( /** @class */ function() { @@ -1819,8 +15763,8 @@ var require_util = __commonJS({ DetailContext2.prototype.getError = function(path) { var msgParts = []; for (var i4 = this._propNames.length - 1; i4 >= 0; i4--) { - var p4 = this._propNames[i4]; - path += typeof p4 === "number" ? "[" + p4 + "]" : p4 ? "." + p4 : ""; + var p3 = this._propNames[i4]; + path += typeof p3 === "number" ? "[" + p3 + "]" : p3 ? "." + p3 : ""; var m3 = this._messages[i4]; if (m3) { msgParts.push(path + " " + m3); @@ -1831,8 +15775,8 @@ var require_util = __commonJS({ DetailContext2.prototype.getErrorDetail = function(path) { var details = []; for (var i4 = this._propNames.length - 1; i4 >= 0; i4--) { - var p4 = this._propNames[i4]; - path += typeof p4 === "number" ? "[" + p4 + "]" : p4 ? "." + p4 : ""; + var p3 = this._propNames[i4]; + path += typeof p3 === "number" ? "[" + p3 + "]" : p3 ? "." + p3 : ""; var message = this._messages[i4]; if (message) { details.push({ path, message }); @@ -1850,7 +15794,7 @@ var require_util = __commonJS({ return DetailContext2; }() ); - exports.DetailContext = DetailContext; + exports2.DetailContext = DetailContext; var DetailUnionResolver = ( /** @class */ function() { @@ -1869,40 +15813,38 @@ var require_util = __commonJS({ }); // node_modules/ts-interface-checker/dist/types.js -var require_types = __commonJS({ - "node_modules/ts-interface-checker/dist/types.js"(exports) { +var require_types2 = __commonJS({ + "node_modules/ts-interface-checker/dist/types.js"(exports2) { "use strict"; - var __extends = exports && exports.__extends || function() { - var extendStatics = function(d4, b3) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d5, b4) { - d5.__proto__ = b4; - } || function(d5, b4) { - for (var p4 in b4) - if (b4.hasOwnProperty(p4)) - d5[p4] = b4[p4]; + var __extends = exports2 && exports2.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d3, b3) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d4, b4) { + d4.__proto__ = b4; + } || function(d4, b4) { + for (var p3 in b4) if (b4.hasOwnProperty(p3)) d4[p3] = b4[p3]; }; - return extendStatics(d4, b3); + return extendStatics(d3, b3); }; - return function(d4, b3) { - extendStatics(d4, b3); + return function(d3, b3) { + extendStatics(d3, b3); function __() { - this.constructor = d4; + this.constructor = d3; } - d4.prototype = b3 === null ? Object.create(b3) : (__.prototype = b3.prototype, new __()); + d3.prototype = b3 === null ? Object.create(b3) : (__.prototype = b3.prototype, new __()); }; }(); - Object.defineProperty(exports, "__esModule", { value: true }); - exports.basicTypes = exports.BasicType = exports.TParamList = exports.TParam = exports.param = exports.TFunc = exports.func = exports.TProp = exports.TOptional = exports.opt = exports.TIface = exports.iface = exports.TEnumLiteral = exports.enumlit = exports.TEnumType = exports.enumtype = exports.TIntersection = exports.intersection = exports.TUnion = exports.union = exports.TTuple = exports.tuple = exports.TArray = exports.array = exports.TLiteral = exports.lit = exports.TName = exports.name = exports.TType = void 0; - var util_1 = require_util(); + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.basicTypes = exports2.BasicType = exports2.TParamList = exports2.TParam = exports2.param = exports2.TFunc = exports2.func = exports2.TProp = exports2.TOptional = exports2.opt = exports2.TIface = exports2.iface = exports2.TEnumLiteral = exports2.enumlit = exports2.TEnumType = exports2.enumtype = exports2.TIntersection = exports2.intersection = exports2.TUnion = exports2.union = exports2.TTuple = exports2.tuple = exports2.TArray = exports2.array = exports2.TLiteral = exports2.lit = exports2.TName = exports2.name = exports2.TType = void 0; + var util_1 = require_util2(); var TType = ( /** @class */ - function() { + /* @__PURE__ */ function() { function TType2() { } return TType2; }() ); - exports.TType = TType; + exports2.TType = TType; function parseSpec(typeSpec) { return typeof typeSpec === "string" ? name(typeSpec) : typeSpec; } @@ -1916,7 +15858,7 @@ var require_types = __commonJS({ function name(value) { return new TName(value); } - exports.name = name; + exports2.name = name; var TName = ( /** @class */ function(_super) { @@ -1941,11 +15883,11 @@ var require_types = __commonJS({ return TName2; }(TType) ); - exports.TName = TName; - function lit2(value) { + exports2.TName = TName; + function lit(value) { return new TLiteral(value); } - exports.lit = lit2; + exports2.lit = lit; var TLiteral = ( /** @class */ function(_super) { @@ -1966,11 +15908,11 @@ var require_types = __commonJS({ return TLiteral2; }(TType) ); - exports.TLiteral = TLiteral; - function array2(typeSpec) { + exports2.TLiteral = TLiteral; + function array(typeSpec) { return new TArray(parseSpec(typeSpec)); } - exports.array = array2; + exports2.array = array; var TArray = ( /** @class */ function(_super) { @@ -1998,7 +15940,7 @@ var require_types = __commonJS({ return TArray2; }(TType) ); - exports.TArray = TArray; + exports2.TArray = TArray; function tuple() { var typeSpec = []; for (var _i2 = 0; _i2 < arguments.length; _i2++) { @@ -2008,7 +15950,7 @@ var require_types = __commonJS({ return parseSpec(t4); })); } - exports.tuple = tuple; + exports2.tuple = tuple; var TTuple = ( /** @class */ function(_super) { @@ -2047,8 +15989,8 @@ var require_types = __commonJS({ return TTuple2; }(TType) ); - exports.TTuple = TTuple; - function union2() { + exports2.TTuple = TTuple; + function union() { var typeSpec = []; for (var _i2 = 0; _i2 < arguments.length; _i2++) { typeSpec[_i2] = arguments[_i2]; @@ -2057,7 +15999,7 @@ var require_types = __commonJS({ return parseSpec(t4); })); } - exports.union = union2; + exports2.union = union; var TUnion = ( /** @class */ function(_super) { @@ -2101,7 +16043,7 @@ var require_types = __commonJS({ return TUnion2; }(TType) ); - exports.TUnion = TUnion; + exports2.TUnion = TUnion; function intersection() { var typeSpec = []; for (var _i2 = 0; _i2 < arguments.length; _i2++) { @@ -2111,7 +16053,7 @@ var require_types = __commonJS({ return parseSpec(t4); })); } - exports.intersection = intersection; + exports2.intersection = intersection; var TIntersection = ( /** @class */ function(_super) { @@ -2139,11 +16081,11 @@ var require_types = __commonJS({ return TIntersection2; }(TType) ); - exports.TIntersection = TIntersection; + exports2.TIntersection = TIntersection; function enumtype(values) { return new TEnumType(values); } - exports.enumtype = enumtype; + exports2.enumtype = enumtype; var TEnumType = ( /** @class */ function(_super) { @@ -2167,11 +16109,11 @@ var require_types = __commonJS({ return TEnumType2; }(TType) ); - exports.TEnumType = TEnumType; + exports2.TEnumType = TEnumType; function enumlit(name2, prop) { return new TEnumLiteral(name2, prop); } - exports.enumlit = enumlit; + exports2.enumlit = enumlit; var TEnumLiteral = ( /** @class */ function(_super) { @@ -2200,7 +16142,7 @@ var require_types = __commonJS({ return TEnumLiteral2; }(TType) ); - exports.TEnumLiteral = TEnumLiteral; + exports2.TEnumLiteral = TEnumLiteral; function makeIfaceProps(props) { return Object.keys(props).map(function(name2) { return makeIfaceProp(name2, props[name2]); @@ -2209,10 +16151,10 @@ var require_types = __commonJS({ function makeIfaceProp(name2, prop) { return prop instanceof TOptional ? new TProp(name2, prop.ttype, true) : new TProp(name2, parseSpec(prop), false); } - function iface2(bases, props) { + function iface(bases, props) { return new TIface(bases, makeIfaceProps(props)); } - exports.iface = iface2; + exports2.iface = iface; var TIface = ( /** @class */ function(_super) { @@ -2221,8 +16163,8 @@ var require_types = __commonJS({ var _this = _super.call(this) || this; _this.bases = bases; _this.props = props; - _this.propSet = new Set(props.map(function(p4) { - return p4.name; + _this.propSet = new Set(props.map(function(p3) { + return p3.name; })); return _this; } @@ -2288,11 +16230,11 @@ var require_types = __commonJS({ return TIface2; }(TType) ); - exports.TIface = TIface; - function opt2(typeSpec) { + exports2.TIface = TIface; + function opt(typeSpec) { return new TOptional(parseSpec(typeSpec)); } - exports.opt = opt2; + exports2.opt = opt; var TOptional = ( /** @class */ function(_super) { @@ -2311,10 +16253,10 @@ var require_types = __commonJS({ return TOptional2; }(TType) ); - exports.TOptional = TOptional; + exports2.TOptional = TOptional; var TProp = ( /** @class */ - function() { + /* @__PURE__ */ function() { function TProp2(name2, ttype, isOpt) { this.name = name2; this.ttype = ttype; @@ -2323,7 +16265,7 @@ var require_types = __commonJS({ return TProp2; }() ); - exports.TProp = TProp; + exports2.TProp = TProp; function func(resultSpec) { var params = []; for (var _i2 = 1; _i2 < arguments.length; _i2++) { @@ -2331,7 +16273,7 @@ var require_types = __commonJS({ } return new TFunc(new TParamList(params), parseSpec(resultSpec)); } - exports.func = func; + exports2.func = func; var TFunc = ( /** @class */ function(_super) { @@ -2350,14 +16292,14 @@ var require_types = __commonJS({ return TFunc2; }(TType) ); - exports.TFunc = TFunc; + exports2.TFunc = TFunc; function param(name2, typeSpec, isOpt) { return new TParam(name2, parseSpec(typeSpec), Boolean(isOpt)); } - exports.param = param; + exports2.param = param; var TParam = ( /** @class */ - function() { + /* @__PURE__ */ function() { function TParam2(name2, ttype, isOpt) { this.name = name2; this.ttype = ttype; @@ -2366,7 +16308,7 @@ var require_types = __commonJS({ return TParam2; }() ); - exports.TParam = TParam; + exports2.TParam = TParam; var TParamList = ( /** @class */ function(_super) { @@ -2390,15 +16332,15 @@ var require_types = __commonJS({ return ctx.fail(null, "is not an array", 0); } for (var i4 = 0; i4 < itemCheckers.length; i4++) { - var p4 = _this.params[i4]; + var p3 = _this.params[i4]; if (value[i4] === void 0) { if (isParamRequired[i4]) { - return ctx.fail(p4.name, "is missing", 1); + return ctx.fail(p3.name, "is missing", 1); } } else { var ok = itemCheckers[i4](value[i4], ctx); if (!ok) { - return ctx.fail(p4.name, null, 1); + return ctx.fail(p3.name, null, 1); } } } @@ -2417,7 +16359,7 @@ var require_types = __commonJS({ return TParamList2; }(TType) ); - exports.TParamList = TParamList; + exports2.TParamList = TParamList; var BasicType = ( /** @class */ function(_super) { @@ -2437,8 +16379,8 @@ var require_types = __commonJS({ return BasicType2; }(TType) ); - exports.BasicType = BasicType; - exports.basicTypes = { + exports2.BasicType = BasicType; + exports2.basicTypes = { any: new BasicType(function(v3) { return true; }, "is invalid"), @@ -2479,12 +16421,12 @@ var require_types = __commonJS({ }; } if (typeof Buffer !== "undefined") { - exports.basicTypes.Buffer = new BasicType(function(v3) { + exports2.basicTypes.Buffer = new BasicType(function(v3) { return Buffer.isBuffer(v3); }, "is not a Buffer"); } var _loop_1 = function(array_12) { - exports.basicTypes[array_12.name] = new BasicType(function(v3) { + exports2.basicTypes[array_12.name] = new BasicType(function(v3) { return v3 instanceof array_12; }, "is not a " + array_12.name); }; @@ -2511,110 +16453,109 @@ var require_types = __commonJS({ // node_modules/ts-interface-checker/dist/index.js var require_dist = __commonJS({ - "node_modules/ts-interface-checker/dist/index.js"(exports) { + "node_modules/ts-interface-checker/dist/index.js"(exports2) { "use strict"; - var __spreadArrays = exports && exports.__spreadArrays || function() { - for (var s4 = 0, i4 = 0, il = arguments.length; i4 < il; i4++) - s4 += arguments[i4].length; - for (var r3 = Array(s4), k4 = 0, i4 = 0; i4 < il; i4++) - for (var a3 = arguments[i4], j4 = 0, jl = a3.length; j4 < jl; j4++, k4++) - r3[k4] = a3[j4]; - return r3; + var __spreadArrays = exports2 && exports2.__spreadArrays || function() { + for (var s4 = 0, i4 = 0, il = arguments.length; i4 < il; i4++) s4 += arguments[i4].length; + for (var r4 = Array(s4), k4 = 0, i4 = 0; i4 < il; i4++) + for (var a4 = arguments[i4], j4 = 0, jl = a4.length; j4 < jl; j4++, k4++) + r4[k4] = a4[j4]; + return r4; }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Checker = exports.createCheckers = void 0; - var types_1 = require_types(); - var util_1 = require_util(); - var types_2 = require_types(); - Object.defineProperty(exports, "TArray", { enumerable: true, get: function() { + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.Checker = exports2.createCheckers = void 0; + var types_1 = require_types2(); + var util_1 = require_util2(); + var types_2 = require_types2(); + Object.defineProperty(exports2, "TArray", { enumerable: true, get: function() { return types_2.TArray; } }); - Object.defineProperty(exports, "TEnumType", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TEnumType", { enumerable: true, get: function() { return types_2.TEnumType; } }); - Object.defineProperty(exports, "TEnumLiteral", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TEnumLiteral", { enumerable: true, get: function() { return types_2.TEnumLiteral; } }); - Object.defineProperty(exports, "TFunc", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TFunc", { enumerable: true, get: function() { return types_2.TFunc; } }); - Object.defineProperty(exports, "TIface", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TIface", { enumerable: true, get: function() { return types_2.TIface; } }); - Object.defineProperty(exports, "TLiteral", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TLiteral", { enumerable: true, get: function() { return types_2.TLiteral; } }); - Object.defineProperty(exports, "TName", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TName", { enumerable: true, get: function() { return types_2.TName; } }); - Object.defineProperty(exports, "TOptional", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TOptional", { enumerable: true, get: function() { return types_2.TOptional; } }); - Object.defineProperty(exports, "TParam", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TParam", { enumerable: true, get: function() { return types_2.TParam; } }); - Object.defineProperty(exports, "TParamList", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TParamList", { enumerable: true, get: function() { return types_2.TParamList; } }); - Object.defineProperty(exports, "TProp", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TProp", { enumerable: true, get: function() { return types_2.TProp; } }); - Object.defineProperty(exports, "TTuple", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TTuple", { enumerable: true, get: function() { return types_2.TTuple; } }); - Object.defineProperty(exports, "TType", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TType", { enumerable: true, get: function() { return types_2.TType; } }); - Object.defineProperty(exports, "TUnion", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TUnion", { enumerable: true, get: function() { return types_2.TUnion; } }); - Object.defineProperty(exports, "TIntersection", { enumerable: true, get: function() { + Object.defineProperty(exports2, "TIntersection", { enumerable: true, get: function() { return types_2.TIntersection; } }); - Object.defineProperty(exports, "array", { enumerable: true, get: function() { + Object.defineProperty(exports2, "array", { enumerable: true, get: function() { return types_2.array; } }); - Object.defineProperty(exports, "enumlit", { enumerable: true, get: function() { + Object.defineProperty(exports2, "enumlit", { enumerable: true, get: function() { return types_2.enumlit; } }); - Object.defineProperty(exports, "enumtype", { enumerable: true, get: function() { + Object.defineProperty(exports2, "enumtype", { enumerable: true, get: function() { return types_2.enumtype; } }); - Object.defineProperty(exports, "func", { enumerable: true, get: function() { + Object.defineProperty(exports2, "func", { enumerable: true, get: function() { return types_2.func; } }); - Object.defineProperty(exports, "iface", { enumerable: true, get: function() { + Object.defineProperty(exports2, "iface", { enumerable: true, get: function() { return types_2.iface; } }); - Object.defineProperty(exports, "lit", { enumerable: true, get: function() { + Object.defineProperty(exports2, "lit", { enumerable: true, get: function() { return types_2.lit; } }); - Object.defineProperty(exports, "name", { enumerable: true, get: function() { + Object.defineProperty(exports2, "name", { enumerable: true, get: function() { return types_2.name; } }); - Object.defineProperty(exports, "opt", { enumerable: true, get: function() { + Object.defineProperty(exports2, "opt", { enumerable: true, get: function() { return types_2.opt; } }); - Object.defineProperty(exports, "param", { enumerable: true, get: function() { + Object.defineProperty(exports2, "param", { enumerable: true, get: function() { return types_2.param; } }); - Object.defineProperty(exports, "tuple", { enumerable: true, get: function() { + Object.defineProperty(exports2, "tuple", { enumerable: true, get: function() { return types_2.tuple; } }); - Object.defineProperty(exports, "union", { enumerable: true, get: function() { + Object.defineProperty(exports2, "union", { enumerable: true, get: function() { return types_2.union; } }); - Object.defineProperty(exports, "intersection", { enumerable: true, get: function() { + Object.defineProperty(exports2, "intersection", { enumerable: true, get: function() { return types_2.intersection; } }); - Object.defineProperty(exports, "BasicType", { enumerable: true, get: function() { + Object.defineProperty(exports2, "BasicType", { enumerable: true, get: function() { return types_2.BasicType; } }); - var util_2 = require_util(); - Object.defineProperty(exports, "VError", { enumerable: true, get: function() { + var util_2 = require_util2(); + Object.defineProperty(exports2, "VError", { enumerable: true, get: function() { return util_2.VError; } }); - function createCheckers2() { + function createCheckers() { var typeSuite = []; for (var _i = 0; _i < arguments.length; _i++) { typeSuite[_i] = arguments[_i]; @@ -2630,7 +16571,7 @@ var require_dist = __commonJS({ } return checkers; } - exports.createCheckers = createCheckers2; + exports2.createCheckers = createCheckers; var Checker = ( /** @class */ function() { @@ -2644,8 +16585,8 @@ var require_dist = __commonJS({ this.props = /* @__PURE__ */ new Map(); if (ttype instanceof types_1.TIface) { for (var _i = 0, _a = ttype.props; _i < _a.length; _i++) { - var p4 = _a[_i]; - this.props.set(p4.name, p4.ttype); + var p3 = _a[_i]; + this.props.set(p3.name, p3.ttype); } } this.checkerPlain = this.ttype.getChecker(suite, false); @@ -2732,22 +16673,7695 @@ var require_dist = __commonJS({ return Checker2; }() ); - exports.Checker = Checker; + exports2.Checker = Checker; + } +}); + +// node_modules/sucrase/dist/Options-gen-types.js +var require_Options_gen_types = __commonJS({ + "node_modules/sucrase/dist/Options-gen-types.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + return newObj; + } + } + var _tsinterfacechecker = require_dist(); + var t4 = _interopRequireWildcard(_tsinterfacechecker); + var Transform = t4.union( + t4.lit("jsx"), + t4.lit("typescript"), + t4.lit("flow"), + t4.lit("imports"), + t4.lit("react-hot-loader"), + t4.lit("jest") + ); + exports2.Transform = Transform; + var SourceMapOptions = t4.iface([], { + compiledFilename: "string" + }); + exports2.SourceMapOptions = SourceMapOptions; + var Options = t4.iface([], { + transforms: t4.array("Transform"), + disableESTransforms: t4.opt("boolean"), + jsxRuntime: t4.opt(t4.union(t4.lit("classic"), t4.lit("automatic"), t4.lit("preserve"))), + production: t4.opt("boolean"), + jsxImportSource: t4.opt("string"), + jsxPragma: t4.opt("string"), + jsxFragmentPragma: t4.opt("string"), + keepUnusedImports: t4.opt("boolean"), + preserveDynamicImport: t4.opt("boolean"), + injectCreateRequireForImportRequire: t4.opt("boolean"), + enableLegacyTypeScriptModuleInterop: t4.opt("boolean"), + enableLegacyBabel5ModuleInterop: t4.opt("boolean"), + sourceMapOptions: t4.opt("SourceMapOptions"), + filePath: t4.opt("string") + }); + exports2.Options = Options; + var exportedTypeSuite = { + Transform: exports2.Transform, + SourceMapOptions: exports2.SourceMapOptions, + Options: exports2.Options + }; + exports2.default = exportedTypeSuite; + } +}); + +// node_modules/sucrase/dist/Options.js +var require_Options = __commonJS({ + "node_modules/sucrase/dist/Options.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _tsinterfacechecker = require_dist(); + var _Optionsgentypes = require_Options_gen_types(); + var _Optionsgentypes2 = _interopRequireDefault(_Optionsgentypes); + var { Options: OptionsChecker } = _tsinterfacechecker.createCheckers.call(void 0, _Optionsgentypes2.default); + function validateOptions(options2) { + OptionsChecker.strictCheck(options2); + } + exports2.validateOptions = validateOptions; + } +}); + +// node_modules/sucrase/dist/parser/traverser/lval.js +var require_lval = __commonJS({ + "node_modules/sucrase/dist/parser/traverser/lval.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _flow = require_flow(); + var _typescript = require_typescript(); + var _index = require_tokenizer(); + var _keywords = require_keywords(); + var _types = require_types(); + var _base = require_base(); + var _expression = require_expression(); + var _util = require_util(); + function parseSpread() { + _index.next.call(void 0); + _expression.parseMaybeAssign.call(void 0, false); + } + exports2.parseSpread = parseSpread; + function parseRest(isBlockScope) { + _index.next.call(void 0); + parseBindingAtom(isBlockScope); + } + exports2.parseRest = parseRest; + function parseBindingIdentifier(isBlockScope) { + _expression.parseIdentifier.call(void 0); + markPriorBindingIdentifier(isBlockScope); + } + exports2.parseBindingIdentifier = parseBindingIdentifier; + function parseImportedIdentifier() { + _expression.parseIdentifier.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index.IdentifierRole.ImportDeclaration; + } + exports2.parseImportedIdentifier = parseImportedIdentifier; + function markPriorBindingIdentifier(isBlockScope) { + let identifierRole; + if (_base.state.scopeDepth === 0) { + identifierRole = _index.IdentifierRole.TopLevelDeclaration; + } else if (isBlockScope) { + identifierRole = _index.IdentifierRole.BlockScopedDeclaration; + } else { + identifierRole = _index.IdentifierRole.FunctionScopedDeclaration; + } + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = identifierRole; + } + exports2.markPriorBindingIdentifier = markPriorBindingIdentifier; + function parseBindingAtom(isBlockScope) { + switch (_base.state.type) { + case _types.TokenType._this: { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _index.next.call(void 0); + _index.popTypeContext.call(void 0, oldIsType); + return; + } + case _types.TokenType._yield: + case _types.TokenType.name: { + _base.state.type = _types.TokenType.name; + parseBindingIdentifier(isBlockScope); + return; + } + case _types.TokenType.bracketL: { + _index.next.call(void 0); + parseBindingList( + _types.TokenType.bracketR, + isBlockScope, + true + /* allowEmpty */ + ); + return; + } + case _types.TokenType.braceL: + _expression.parseObj.call(void 0, true, isBlockScope); + return; + default: + _util.unexpected.call(void 0); + } + } + exports2.parseBindingAtom = parseBindingAtom; + function parseBindingList(close, isBlockScope, allowEmpty = false, allowModifiers = false, contextId = 0) { + let first = true; + let hasRemovedComma = false; + const firstItemTokenIndex = _base.state.tokens.length; + while (!_index.eat.call(void 0, close) && !_base.state.error) { + if (first) { + first = false; + } else { + _util.expect.call(void 0, _types.TokenType.comma); + _base.state.tokens[_base.state.tokens.length - 1].contextId = contextId; + if (!hasRemovedComma && _base.state.tokens[firstItemTokenIndex].isType) { + _base.state.tokens[_base.state.tokens.length - 1].isType = true; + hasRemovedComma = true; + } + } + if (allowEmpty && _index.match.call(void 0, _types.TokenType.comma)) { + } else if (_index.eat.call(void 0, close)) { + break; + } else if (_index.match.call(void 0, _types.TokenType.ellipsis)) { + parseRest(isBlockScope); + parseAssignableListItemTypes(); + _index.eat.call(void 0, _types.TokenType.comma); + _util.expect.call(void 0, close); + break; + } else { + parseAssignableListItem(allowModifiers, isBlockScope); + } + } + } + exports2.parseBindingList = parseBindingList; + function parseAssignableListItem(allowModifiers, isBlockScope) { + if (allowModifiers) { + _typescript.tsParseModifiers.call(void 0, [ + _keywords.ContextualKeyword._public, + _keywords.ContextualKeyword._protected, + _keywords.ContextualKeyword._private, + _keywords.ContextualKeyword._readonly, + _keywords.ContextualKeyword._override + ]); + } + parseMaybeDefault(isBlockScope); + parseAssignableListItemTypes(); + parseMaybeDefault( + isBlockScope, + true + /* leftAlreadyParsed */ + ); + } + function parseAssignableListItemTypes() { + if (_base.isFlowEnabled) { + _flow.flowParseAssignableListItemTypes.call(void 0); + } else if (_base.isTypeScriptEnabled) { + _typescript.tsParseAssignableListItemTypes.call(void 0); + } + } + function parseMaybeDefault(isBlockScope, leftAlreadyParsed = false) { + if (!leftAlreadyParsed) { + parseBindingAtom(isBlockScope); + } + if (!_index.eat.call(void 0, _types.TokenType.eq)) { + return; + } + const eqIndex = _base.state.tokens.length - 1; + _expression.parseMaybeAssign.call(void 0); + _base.state.tokens[eqIndex].rhsEndIndex = _base.state.tokens.length; + } + exports2.parseMaybeDefault = parseMaybeDefault; + } +}); + +// node_modules/sucrase/dist/parser/plugins/typescript.js +var require_typescript = __commonJS({ + "node_modules/sucrase/dist/parser/plugins/typescript.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _index = require_tokenizer(); + var _keywords = require_keywords(); + var _types = require_types(); + var _base = require_base(); + var _expression = require_expression(); + var _lval = require_lval(); + var _statement = require_statement(); + var _util = require_util(); + var _jsx = require_jsx(); + function tsIsIdentifier() { + return _index.match.call(void 0, _types.TokenType.name); + } + function isLiteralPropertyName() { + return _index.match.call(void 0, _types.TokenType.name) || Boolean(_base.state.type & _types.TokenType.IS_KEYWORD) || _index.match.call(void 0, _types.TokenType.string) || _index.match.call(void 0, _types.TokenType.num) || _index.match.call(void 0, _types.TokenType.bigint) || _index.match.call(void 0, _types.TokenType.decimal); + } + function tsNextTokenCanFollowModifier() { + const snapshot = _base.state.snapshot(); + _index.next.call(void 0); + const canFollowModifier = (_index.match.call(void 0, _types.TokenType.bracketL) || _index.match.call(void 0, _types.TokenType.braceL) || _index.match.call(void 0, _types.TokenType.star) || _index.match.call(void 0, _types.TokenType.ellipsis) || _index.match.call(void 0, _types.TokenType.hash) || isLiteralPropertyName()) && !_util.hasPrecedingLineBreak.call(void 0); + if (canFollowModifier) { + return true; + } else { + _base.state.restoreFromSnapshot(snapshot); + return false; + } + } + function tsParseModifiers(allowedModifiers) { + while (true) { + const modifier = tsParseModifier(allowedModifiers); + if (modifier === null) { + break; + } + } + } + exports2.tsParseModifiers = tsParseModifiers; + function tsParseModifier(allowedModifiers) { + if (!_index.match.call(void 0, _types.TokenType.name)) { + return null; + } + const modifier = _base.state.contextualKeyword; + if (allowedModifiers.indexOf(modifier) !== -1 && tsNextTokenCanFollowModifier()) { + switch (modifier) { + case _keywords.ContextualKeyword._readonly: + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._readonly; + break; + case _keywords.ContextualKeyword._abstract: + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._abstract; + break; + case _keywords.ContextualKeyword._static: + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._static; + break; + case _keywords.ContextualKeyword._public: + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._public; + break; + case _keywords.ContextualKeyword._private: + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._private; + break; + case _keywords.ContextualKeyword._protected: + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._protected; + break; + case _keywords.ContextualKeyword._override: + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._override; + break; + case _keywords.ContextualKeyword._declare: + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._declare; + break; + default: + break; + } + return modifier; + } + return null; + } + exports2.tsParseModifier = tsParseModifier; + function tsParseEntityName() { + _expression.parseIdentifier.call(void 0); + while (_index.eat.call(void 0, _types.TokenType.dot)) { + _expression.parseIdentifier.call(void 0); + } + } + function tsParseTypeReference() { + tsParseEntityName(); + if (!_util.hasPrecedingLineBreak.call(void 0) && _index.match.call(void 0, _types.TokenType.lessThan)) { + tsParseTypeArguments(); + } + } + function tsParseThisTypePredicate() { + _index.next.call(void 0); + tsParseTypeAnnotation(); + } + function tsParseThisTypeNode() { + _index.next.call(void 0); + } + function tsParseTypeQuery() { + _util.expect.call(void 0, _types.TokenType._typeof); + if (_index.match.call(void 0, _types.TokenType._import)) { + tsParseImportType(); + } else { + tsParseEntityName(); + } + if (!_util.hasPrecedingLineBreak.call(void 0) && _index.match.call(void 0, _types.TokenType.lessThan)) { + tsParseTypeArguments(); + } + } + function tsParseImportType() { + _util.expect.call(void 0, _types.TokenType._import); + _util.expect.call(void 0, _types.TokenType.parenL); + _util.expect.call(void 0, _types.TokenType.string); + _util.expect.call(void 0, _types.TokenType.parenR); + if (_index.eat.call(void 0, _types.TokenType.dot)) { + tsParseEntityName(); + } + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + tsParseTypeArguments(); + } + } + function tsParseTypeParameter() { + _index.eat.call(void 0, _types.TokenType._const); + const hadIn = _index.eat.call(void 0, _types.TokenType._in); + const hadOut = _util.eatContextual.call(void 0, _keywords.ContextualKeyword._out); + _index.eat.call(void 0, _types.TokenType._const); + if ((hadIn || hadOut) && !_index.match.call(void 0, _types.TokenType.name)) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType.name; + } else { + _expression.parseIdentifier.call(void 0); + } + if (_index.eat.call(void 0, _types.TokenType._extends)) { + tsParseType(); + } + if (_index.eat.call(void 0, _types.TokenType.eq)) { + tsParseType(); + } + } + function tsTryParseTypeParameters() { + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + tsParseTypeParameters(); + } + } + exports2.tsTryParseTypeParameters = tsTryParseTypeParameters; + function tsParseTypeParameters() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + if (_index.match.call(void 0, _types.TokenType.lessThan) || _index.match.call(void 0, _types.TokenType.typeParameterStart)) { + _index.next.call(void 0); + } else { + _util.unexpected.call(void 0); + } + while (!_index.eat.call(void 0, _types.TokenType.greaterThan) && !_base.state.error) { + tsParseTypeParameter(); + _index.eat.call(void 0, _types.TokenType.comma); + } + _index.popTypeContext.call(void 0, oldIsType); + } + function tsFillSignature(returnToken) { + const returnTokenRequired = returnToken === _types.TokenType.arrow; + tsTryParseTypeParameters(); + _util.expect.call(void 0, _types.TokenType.parenL); + _base.state.scopeDepth++; + tsParseBindingListForSignature( + false + /* isBlockScope */ + ); + _base.state.scopeDepth--; + if (returnTokenRequired) { + tsParseTypeOrTypePredicateAnnotation(returnToken); + } else if (_index.match.call(void 0, returnToken)) { + tsParseTypeOrTypePredicateAnnotation(returnToken); + } + } + function tsParseBindingListForSignature(isBlockScope) { + _lval.parseBindingList.call(void 0, _types.TokenType.parenR, isBlockScope); + } + function tsParseTypeMemberSemicolon() { + if (!_index.eat.call(void 0, _types.TokenType.comma)) { + _util.semicolon.call(void 0); + } + } + function tsParseSignatureMember() { + tsFillSignature(_types.TokenType.colon); + tsParseTypeMemberSemicolon(); + } + function tsIsUnambiguouslyIndexSignature() { + const snapshot = _base.state.snapshot(); + _index.next.call(void 0); + const isIndexSignature = _index.eat.call(void 0, _types.TokenType.name) && _index.match.call(void 0, _types.TokenType.colon); + _base.state.restoreFromSnapshot(snapshot); + return isIndexSignature; + } + function tsTryParseIndexSignature() { + if (!(_index.match.call(void 0, _types.TokenType.bracketL) && tsIsUnambiguouslyIndexSignature())) { + return false; + } + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _util.expect.call(void 0, _types.TokenType.bracketL); + _expression.parseIdentifier.call(void 0); + tsParseTypeAnnotation(); + _util.expect.call(void 0, _types.TokenType.bracketR); + tsTryParseTypeAnnotation(); + tsParseTypeMemberSemicolon(); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + function tsParsePropertyOrMethodSignature(isReadonly) { + _index.eat.call(void 0, _types.TokenType.question); + if (!isReadonly && (_index.match.call(void 0, _types.TokenType.parenL) || _index.match.call(void 0, _types.TokenType.lessThan))) { + tsFillSignature(_types.TokenType.colon); + tsParseTypeMemberSemicolon(); + } else { + tsTryParseTypeAnnotation(); + tsParseTypeMemberSemicolon(); + } + } + function tsParseTypeMember() { + if (_index.match.call(void 0, _types.TokenType.parenL) || _index.match.call(void 0, _types.TokenType.lessThan)) { + tsParseSignatureMember(); + return; + } + if (_index.match.call(void 0, _types.TokenType._new)) { + _index.next.call(void 0); + if (_index.match.call(void 0, _types.TokenType.parenL) || _index.match.call(void 0, _types.TokenType.lessThan)) { + tsParseSignatureMember(); + } else { + tsParsePropertyOrMethodSignature(false); + } + return; + } + const readonly = !!tsParseModifier([_keywords.ContextualKeyword._readonly]); + const found = tsTryParseIndexSignature(); + if (found) { + return; + } + if ((_util.isContextual.call(void 0, _keywords.ContextualKeyword._get) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._set)) && tsNextTokenCanFollowModifier()) { + } + _expression.parsePropertyName.call( + void 0, + -1 + /* Types don't need context IDs. */ + ); + tsParsePropertyOrMethodSignature(readonly); + } + function tsParseTypeLiteral() { + tsParseObjectTypeMembers(); + } + function tsParseObjectTypeMembers() { + _util.expect.call(void 0, _types.TokenType.braceL); + while (!_index.eat.call(void 0, _types.TokenType.braceR) && !_base.state.error) { + tsParseTypeMember(); + } + } + function tsLookaheadIsStartOfMappedType() { + const snapshot = _base.state.snapshot(); + const isStartOfMappedType = tsIsStartOfMappedType(); + _base.state.restoreFromSnapshot(snapshot); + return isStartOfMappedType; + } + function tsIsStartOfMappedType() { + _index.next.call(void 0); + if (_index.eat.call(void 0, _types.TokenType.plus) || _index.eat.call(void 0, _types.TokenType.minus)) { + return _util.isContextual.call(void 0, _keywords.ContextualKeyword._readonly); + } + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._readonly)) { + _index.next.call(void 0); + } + if (!_index.match.call(void 0, _types.TokenType.bracketL)) { + return false; + } + _index.next.call(void 0); + if (!tsIsIdentifier()) { + return false; + } + _index.next.call(void 0); + return _index.match.call(void 0, _types.TokenType._in); + } + function tsParseMappedTypeParameter() { + _expression.parseIdentifier.call(void 0); + _util.expect.call(void 0, _types.TokenType._in); + tsParseType(); + } + function tsParseMappedType() { + _util.expect.call(void 0, _types.TokenType.braceL); + if (_index.match.call(void 0, _types.TokenType.plus) || _index.match.call(void 0, _types.TokenType.minus)) { + _index.next.call(void 0); + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._readonly); + } else { + _util.eatContextual.call(void 0, _keywords.ContextualKeyword._readonly); + } + _util.expect.call(void 0, _types.TokenType.bracketL); + tsParseMappedTypeParameter(); + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._as)) { + tsParseType(); + } + _util.expect.call(void 0, _types.TokenType.bracketR); + if (_index.match.call(void 0, _types.TokenType.plus) || _index.match.call(void 0, _types.TokenType.minus)) { + _index.next.call(void 0); + _util.expect.call(void 0, _types.TokenType.question); + } else { + _index.eat.call(void 0, _types.TokenType.question); + } + tsTryParseType(); + _util.semicolon.call(void 0); + _util.expect.call(void 0, _types.TokenType.braceR); + } + function tsParseTupleType() { + _util.expect.call(void 0, _types.TokenType.bracketL); + while (!_index.eat.call(void 0, _types.TokenType.bracketR) && !_base.state.error) { + tsParseTupleElementType(); + _index.eat.call(void 0, _types.TokenType.comma); + } + } + function tsParseTupleElementType() { + if (_index.eat.call(void 0, _types.TokenType.ellipsis)) { + tsParseType(); + } else { + tsParseType(); + _index.eat.call(void 0, _types.TokenType.question); + } + if (_index.eat.call(void 0, _types.TokenType.colon)) { + tsParseType(); + } + } + function tsParseParenthesizedType() { + _util.expect.call(void 0, _types.TokenType.parenL); + tsParseType(); + _util.expect.call(void 0, _types.TokenType.parenR); + } + function tsParseTemplateLiteralType() { + _index.nextTemplateToken.call(void 0); + _index.nextTemplateToken.call(void 0); + while (!_index.match.call(void 0, _types.TokenType.backQuote) && !_base.state.error) { + _util.expect.call(void 0, _types.TokenType.dollarBraceL); + tsParseType(); + _index.nextTemplateToken.call(void 0); + _index.nextTemplateToken.call(void 0); + } + _index.next.call(void 0); + } + var FunctionType; + (function(FunctionType2) { + const TSFunctionType = 0; + FunctionType2[FunctionType2["TSFunctionType"] = TSFunctionType] = "TSFunctionType"; + const TSConstructorType = TSFunctionType + 1; + FunctionType2[FunctionType2["TSConstructorType"] = TSConstructorType] = "TSConstructorType"; + const TSAbstractConstructorType = TSConstructorType + 1; + FunctionType2[FunctionType2["TSAbstractConstructorType"] = TSAbstractConstructorType] = "TSAbstractConstructorType"; + })(FunctionType || (FunctionType = {})); + function tsParseFunctionOrConstructorType(type) { + if (type === FunctionType.TSAbstractConstructorType) { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._abstract); + } + if (type === FunctionType.TSConstructorType || type === FunctionType.TSAbstractConstructorType) { + _util.expect.call(void 0, _types.TokenType._new); + } + const oldInDisallowConditionalTypesContext = _base.state.inDisallowConditionalTypesContext; + _base.state.inDisallowConditionalTypesContext = false; + tsFillSignature(_types.TokenType.arrow); + _base.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; + } + function tsParseNonArrayType() { + switch (_base.state.type) { + case _types.TokenType.name: + tsParseTypeReference(); + return; + case _types.TokenType._void: + case _types.TokenType._null: + _index.next.call(void 0); + return; + case _types.TokenType.string: + case _types.TokenType.num: + case _types.TokenType.bigint: + case _types.TokenType.decimal: + case _types.TokenType._true: + case _types.TokenType._false: + _expression.parseLiteral.call(void 0); + return; + case _types.TokenType.minus: + _index.next.call(void 0); + _expression.parseLiteral.call(void 0); + return; + case _types.TokenType._this: { + tsParseThisTypeNode(); + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._is) && !_util.hasPrecedingLineBreak.call(void 0)) { + tsParseThisTypePredicate(); + } + return; + } + case _types.TokenType._typeof: + tsParseTypeQuery(); + return; + case _types.TokenType._import: + tsParseImportType(); + return; + case _types.TokenType.braceL: + if (tsLookaheadIsStartOfMappedType()) { + tsParseMappedType(); + } else { + tsParseTypeLiteral(); + } + return; + case _types.TokenType.bracketL: + tsParseTupleType(); + return; + case _types.TokenType.parenL: + tsParseParenthesizedType(); + return; + case _types.TokenType.backQuote: + tsParseTemplateLiteralType(); + return; + default: + if (_base.state.type & _types.TokenType.IS_KEYWORD) { + _index.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType.name; + return; + } + break; + } + _util.unexpected.call(void 0); + } + function tsParseArrayTypeOrHigher() { + tsParseNonArrayType(); + while (!_util.hasPrecedingLineBreak.call(void 0) && _index.eat.call(void 0, _types.TokenType.bracketL)) { + if (!_index.eat.call(void 0, _types.TokenType.bracketR)) { + tsParseType(); + _util.expect.call(void 0, _types.TokenType.bracketR); + } + } + } + function tsParseInferType() { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._infer); + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType._extends)) { + const snapshot = _base.state.snapshot(); + _util.expect.call(void 0, _types.TokenType._extends); + const oldInDisallowConditionalTypesContext = _base.state.inDisallowConditionalTypesContext; + _base.state.inDisallowConditionalTypesContext = true; + tsParseType(); + _base.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; + if (_base.state.error || !_base.state.inDisallowConditionalTypesContext && _index.match.call(void 0, _types.TokenType.question)) { + _base.state.restoreFromSnapshot(snapshot); + } + } + } + function tsParseTypeOperatorOrHigher() { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._keyof) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._unique) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._readonly)) { + _index.next.call(void 0); + tsParseTypeOperatorOrHigher(); + } else if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._infer)) { + tsParseInferType(); + } else { + const oldInDisallowConditionalTypesContext = _base.state.inDisallowConditionalTypesContext; + _base.state.inDisallowConditionalTypesContext = false; + tsParseArrayTypeOrHigher(); + _base.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; + } + } + function tsParseIntersectionTypeOrHigher() { + _index.eat.call(void 0, _types.TokenType.bitwiseAND); + tsParseTypeOperatorOrHigher(); + if (_index.match.call(void 0, _types.TokenType.bitwiseAND)) { + while (_index.eat.call(void 0, _types.TokenType.bitwiseAND)) { + tsParseTypeOperatorOrHigher(); + } + } + } + function tsParseUnionTypeOrHigher() { + _index.eat.call(void 0, _types.TokenType.bitwiseOR); + tsParseIntersectionTypeOrHigher(); + if (_index.match.call(void 0, _types.TokenType.bitwiseOR)) { + while (_index.eat.call(void 0, _types.TokenType.bitwiseOR)) { + tsParseIntersectionTypeOrHigher(); + } + } + } + function tsIsStartOfFunctionType() { + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + return true; + } + return _index.match.call(void 0, _types.TokenType.parenL) && tsLookaheadIsUnambiguouslyStartOfFunctionType(); + } + function tsSkipParameterStart() { + if (_index.match.call(void 0, _types.TokenType.name) || _index.match.call(void 0, _types.TokenType._this)) { + _index.next.call(void 0); + return true; + } + if (_index.match.call(void 0, _types.TokenType.braceL) || _index.match.call(void 0, _types.TokenType.bracketL)) { + let depth = 1; + _index.next.call(void 0); + while (depth > 0 && !_base.state.error) { + if (_index.match.call(void 0, _types.TokenType.braceL) || _index.match.call(void 0, _types.TokenType.bracketL)) { + depth++; + } else if (_index.match.call(void 0, _types.TokenType.braceR) || _index.match.call(void 0, _types.TokenType.bracketR)) { + depth--; + } + _index.next.call(void 0); + } + return true; + } + return false; + } + function tsLookaheadIsUnambiguouslyStartOfFunctionType() { + const snapshot = _base.state.snapshot(); + const isUnambiguouslyStartOfFunctionType = tsIsUnambiguouslyStartOfFunctionType(); + _base.state.restoreFromSnapshot(snapshot); + return isUnambiguouslyStartOfFunctionType; + } + function tsIsUnambiguouslyStartOfFunctionType() { + _index.next.call(void 0); + if (_index.match.call(void 0, _types.TokenType.parenR) || _index.match.call(void 0, _types.TokenType.ellipsis)) { + return true; + } + if (tsSkipParameterStart()) { + if (_index.match.call(void 0, _types.TokenType.colon) || _index.match.call(void 0, _types.TokenType.comma) || _index.match.call(void 0, _types.TokenType.question) || _index.match.call(void 0, _types.TokenType.eq)) { + return true; + } + if (_index.match.call(void 0, _types.TokenType.parenR)) { + _index.next.call(void 0); + if (_index.match.call(void 0, _types.TokenType.arrow)) { + return true; + } + } + } + return false; + } + function tsParseTypeOrTypePredicateAnnotation(returnToken) { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _util.expect.call(void 0, returnToken); + const finishedReturn = tsParseTypePredicateOrAssertsPrefix(); + if (!finishedReturn) { + tsParseType(); + } + _index.popTypeContext.call(void 0, oldIsType); + } + function tsTryParseTypeOrTypePredicateAnnotation() { + if (_index.match.call(void 0, _types.TokenType.colon)) { + tsParseTypeOrTypePredicateAnnotation(_types.TokenType.colon); + } + } + function tsTryParseTypeAnnotation() { + if (_index.match.call(void 0, _types.TokenType.colon)) { + tsParseTypeAnnotation(); + } + } + exports2.tsTryParseTypeAnnotation = tsTryParseTypeAnnotation; + function tsTryParseType() { + if (_index.eat.call(void 0, _types.TokenType.colon)) { + tsParseType(); + } + } + function tsParseTypePredicateOrAssertsPrefix() { + const snapshot = _base.state.snapshot(); + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._asserts)) { + _index.next.call(void 0); + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._is)) { + tsParseType(); + return true; + } else if (tsIsIdentifier() || _index.match.call(void 0, _types.TokenType._this)) { + _index.next.call(void 0); + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._is)) { + tsParseType(); + } + return true; + } else { + _base.state.restoreFromSnapshot(snapshot); + return false; + } + } else if (tsIsIdentifier() || _index.match.call(void 0, _types.TokenType._this)) { + _index.next.call(void 0); + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._is) && !_util.hasPrecedingLineBreak.call(void 0)) { + _index.next.call(void 0); + tsParseType(); + return true; + } else { + _base.state.restoreFromSnapshot(snapshot); + return false; + } + } + return false; + } + function tsParseTypeAnnotation() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _util.expect.call(void 0, _types.TokenType.colon); + tsParseType(); + _index.popTypeContext.call(void 0, oldIsType); + } + exports2.tsParseTypeAnnotation = tsParseTypeAnnotation; + function tsParseType() { + tsParseNonConditionalType(); + if (_base.state.inDisallowConditionalTypesContext || _util.hasPrecedingLineBreak.call(void 0) || !_index.eat.call(void 0, _types.TokenType._extends)) { + return; + } + const oldInDisallowConditionalTypesContext = _base.state.inDisallowConditionalTypesContext; + _base.state.inDisallowConditionalTypesContext = true; + tsParseNonConditionalType(); + _base.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; + _util.expect.call(void 0, _types.TokenType.question); + tsParseType(); + _util.expect.call(void 0, _types.TokenType.colon); + tsParseType(); + } + exports2.tsParseType = tsParseType; + function isAbstractConstructorSignature() { + return _util.isContextual.call(void 0, _keywords.ContextualKeyword._abstract) && _index.lookaheadType.call(void 0) === _types.TokenType._new; + } + function tsParseNonConditionalType() { + if (tsIsStartOfFunctionType()) { + tsParseFunctionOrConstructorType(FunctionType.TSFunctionType); + return; + } + if (_index.match.call(void 0, _types.TokenType._new)) { + tsParseFunctionOrConstructorType(FunctionType.TSConstructorType); + return; + } else if (isAbstractConstructorSignature()) { + tsParseFunctionOrConstructorType(FunctionType.TSAbstractConstructorType); + return; + } + tsParseUnionTypeOrHigher(); + } + exports2.tsParseNonConditionalType = tsParseNonConditionalType; + function tsParseTypeAssertion() { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + tsParseType(); + _util.expect.call(void 0, _types.TokenType.greaterThan); + _index.popTypeContext.call(void 0, oldIsType); + _expression.parseMaybeUnary.call(void 0); + } + exports2.tsParseTypeAssertion = tsParseTypeAssertion; + function tsTryParseJSXTypeArgument() { + if (_index.eat.call(void 0, _types.TokenType.jsxTagStart)) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType.typeParameterStart; + const oldIsType = _index.pushTypeContext.call(void 0, 1); + while (!_index.match.call(void 0, _types.TokenType.greaterThan) && !_base.state.error) { + tsParseType(); + _index.eat.call(void 0, _types.TokenType.comma); + } + _jsx.nextJSXTagToken.call(void 0); + _index.popTypeContext.call(void 0, oldIsType); + } + } + exports2.tsTryParseJSXTypeArgument = tsTryParseJSXTypeArgument; + function tsParseHeritageClause() { + while (!_index.match.call(void 0, _types.TokenType.braceL) && !_base.state.error) { + tsParseExpressionWithTypeArguments(); + _index.eat.call(void 0, _types.TokenType.comma); + } + } + function tsParseExpressionWithTypeArguments() { + tsParseEntityName(); + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + tsParseTypeArguments(); + } + } + function tsParseInterfaceDeclaration() { + _lval.parseBindingIdentifier.call(void 0, false); + tsTryParseTypeParameters(); + if (_index.eat.call(void 0, _types.TokenType._extends)) { + tsParseHeritageClause(); + } + tsParseObjectTypeMembers(); + } + function tsParseTypeAliasDeclaration() { + _lval.parseBindingIdentifier.call(void 0, false); + tsTryParseTypeParameters(); + _util.expect.call(void 0, _types.TokenType.eq); + tsParseType(); + _util.semicolon.call(void 0); + } + function tsParseEnumMember() { + if (_index.match.call(void 0, _types.TokenType.string)) { + _expression.parseLiteral.call(void 0); + } else { + _expression.parseIdentifier.call(void 0); + } + if (_index.eat.call(void 0, _types.TokenType.eq)) { + const eqIndex = _base.state.tokens.length - 1; + _expression.parseMaybeAssign.call(void 0); + _base.state.tokens[eqIndex].rhsEndIndex = _base.state.tokens.length; + } + } + function tsParseEnumDeclaration() { + _lval.parseBindingIdentifier.call(void 0, false); + _util.expect.call(void 0, _types.TokenType.braceL); + while (!_index.eat.call(void 0, _types.TokenType.braceR) && !_base.state.error) { + tsParseEnumMember(); + _index.eat.call(void 0, _types.TokenType.comma); + } + } + function tsParseModuleBlock() { + _util.expect.call(void 0, _types.TokenType.braceL); + _statement.parseBlockBody.call( + void 0, + /* end */ + _types.TokenType.braceR + ); + } + function tsParseModuleOrNamespaceDeclaration() { + _lval.parseBindingIdentifier.call(void 0, false); + if (_index.eat.call(void 0, _types.TokenType.dot)) { + tsParseModuleOrNamespaceDeclaration(); + } else { + tsParseModuleBlock(); + } + } + function tsParseAmbientExternalModuleDeclaration() { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._global)) { + _expression.parseIdentifier.call(void 0); + } else if (_index.match.call(void 0, _types.TokenType.string)) { + _expression.parseExprAtom.call(void 0); + } else { + _util.unexpected.call(void 0); + } + if (_index.match.call(void 0, _types.TokenType.braceL)) { + tsParseModuleBlock(); + } else { + _util.semicolon.call(void 0); + } + } + function tsParseImportEqualsDeclaration() { + _lval.parseImportedIdentifier.call(void 0); + _util.expect.call(void 0, _types.TokenType.eq); + tsParseModuleReference(); + _util.semicolon.call(void 0); + } + exports2.tsParseImportEqualsDeclaration = tsParseImportEqualsDeclaration; + function tsIsExternalModuleReference() { + return _util.isContextual.call(void 0, _keywords.ContextualKeyword._require) && _index.lookaheadType.call(void 0) === _types.TokenType.parenL; + } + function tsParseModuleReference() { + if (tsIsExternalModuleReference()) { + tsParseExternalModuleReference(); + } else { + tsParseEntityName(); + } + } + function tsParseExternalModuleReference() { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._require); + _util.expect.call(void 0, _types.TokenType.parenL); + if (!_index.match.call(void 0, _types.TokenType.string)) { + _util.unexpected.call(void 0); + } + _expression.parseLiteral.call(void 0); + _util.expect.call(void 0, _types.TokenType.parenR); + } + function tsTryParseDeclare() { + if (_util.isLineTerminator.call(void 0)) { + return false; + } + switch (_base.state.type) { + case _types.TokenType._function: { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + _index.next.call(void 0); + const functionStart = _base.state.start; + _statement.parseFunction.call( + void 0, + functionStart, + /* isStatement */ + true + ); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + case _types.TokenType._class: { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + _statement.parseClass.call( + void 0, + /* isStatement */ + true, + /* optionalId */ + false + ); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + case _types.TokenType._const: { + if (_index.match.call(void 0, _types.TokenType._const) && _util.isLookaheadContextual.call(void 0, _keywords.ContextualKeyword._enum)) { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + _util.expect.call(void 0, _types.TokenType._const); + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._enum); + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._enum; + tsParseEnumDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + } + // falls through + case _types.TokenType._var: + case _types.TokenType._let: { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + _statement.parseVarStatement.call(void 0, _base.state.type !== _types.TokenType._var); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + case _types.TokenType.name: { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + const contextualKeyword = _base.state.contextualKeyword; + let matched = false; + if (contextualKeyword === _keywords.ContextualKeyword._global) { + tsParseAmbientExternalModuleDeclaration(); + matched = true; + } else { + matched = tsParseDeclaration( + contextualKeyword, + /* isBeforeToken */ + true + ); + } + _index.popTypeContext.call(void 0, oldIsType); + return matched; + } + default: + return false; + } + } + function tsTryParseExportDeclaration() { + return tsParseDeclaration( + _base.state.contextualKeyword, + /* isBeforeToken */ + true + ); + } + function tsParseExpressionStatement(contextualKeyword) { + switch (contextualKeyword) { + case _keywords.ContextualKeyword._declare: { + const declareTokenIndex = _base.state.tokens.length - 1; + const matched = tsTryParseDeclare(); + if (matched) { + _base.state.tokens[declareTokenIndex].type = _types.TokenType._declare; + return true; + } + break; + } + case _keywords.ContextualKeyword._global: + if (_index.match.call(void 0, _types.TokenType.braceL)) { + tsParseModuleBlock(); + return true; + } + break; + default: + return tsParseDeclaration( + contextualKeyword, + /* isBeforeToken */ + false + ); + } + return false; + } + function tsParseDeclaration(contextualKeyword, isBeforeToken) { + switch (contextualKeyword) { + case _keywords.ContextualKeyword._abstract: + if (tsCheckLineTerminator(isBeforeToken) && _index.match.call(void 0, _types.TokenType._class)) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._abstract; + _statement.parseClass.call( + void 0, + /* isStatement */ + true, + /* optionalId */ + false + ); + return true; + } + break; + case _keywords.ContextualKeyword._enum: + if (tsCheckLineTerminator(isBeforeToken) && _index.match.call(void 0, _types.TokenType.name)) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._enum; + tsParseEnumDeclaration(); + return true; + } + break; + case _keywords.ContextualKeyword._interface: + if (tsCheckLineTerminator(isBeforeToken) && _index.match.call(void 0, _types.TokenType.name)) { + const oldIsType = _index.pushTypeContext.call(void 0, isBeforeToken ? 2 : 1); + tsParseInterfaceDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + break; + case _keywords.ContextualKeyword._module: + if (tsCheckLineTerminator(isBeforeToken)) { + if (_index.match.call(void 0, _types.TokenType.string)) { + const oldIsType = _index.pushTypeContext.call(void 0, isBeforeToken ? 2 : 1); + tsParseAmbientExternalModuleDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } else if (_index.match.call(void 0, _types.TokenType.name)) { + const oldIsType = _index.pushTypeContext.call(void 0, isBeforeToken ? 2 : 1); + tsParseModuleOrNamespaceDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + } + break; + case _keywords.ContextualKeyword._namespace: + if (tsCheckLineTerminator(isBeforeToken) && _index.match.call(void 0, _types.TokenType.name)) { + const oldIsType = _index.pushTypeContext.call(void 0, isBeforeToken ? 2 : 1); + tsParseModuleOrNamespaceDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + break; + case _keywords.ContextualKeyword._type: + if (tsCheckLineTerminator(isBeforeToken) && _index.match.call(void 0, _types.TokenType.name)) { + const oldIsType = _index.pushTypeContext.call(void 0, isBeforeToken ? 2 : 1); + tsParseTypeAliasDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + break; + default: + break; + } + return false; + } + function tsCheckLineTerminator(isBeforeToken) { + if (isBeforeToken) { + _index.next.call(void 0); + return true; + } else { + return !_util.isLineTerminator.call(void 0); + } + } + function tsTryParseGenericAsyncArrowFunction() { + const snapshot = _base.state.snapshot(); + tsParseTypeParameters(); + _statement.parseFunctionParams.call(void 0); + tsTryParseTypeOrTypePredicateAnnotation(); + _util.expect.call(void 0, _types.TokenType.arrow); + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + return false; + } + _expression.parseFunctionBody.call(void 0, true); + return true; + } + function tsParseTypeArgumentsWithPossibleBitshift() { + if (_base.state.type === _types.TokenType.bitShiftL) { + _base.state.pos -= 1; + _index.finishToken.call(void 0, _types.TokenType.lessThan); + } + tsParseTypeArguments(); + } + function tsParseTypeArguments() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _util.expect.call(void 0, _types.TokenType.lessThan); + while (!_index.match.call(void 0, _types.TokenType.greaterThan) && !_base.state.error) { + tsParseType(); + _index.eat.call(void 0, _types.TokenType.comma); + } + if (!oldIsType) { + _index.popTypeContext.call(void 0, oldIsType); + _index.rescan_gt.call(void 0); + _util.expect.call(void 0, _types.TokenType.greaterThan); + _base.state.tokens[_base.state.tokens.length - 1].isType = true; + } else { + _util.expect.call(void 0, _types.TokenType.greaterThan); + _index.popTypeContext.call(void 0, oldIsType); + } + } + function tsIsDeclarationStart() { + if (_index.match.call(void 0, _types.TokenType.name)) { + switch (_base.state.contextualKeyword) { + case _keywords.ContextualKeyword._abstract: + case _keywords.ContextualKeyword._declare: + case _keywords.ContextualKeyword._enum: + case _keywords.ContextualKeyword._interface: + case _keywords.ContextualKeyword._module: + case _keywords.ContextualKeyword._namespace: + case _keywords.ContextualKeyword._type: + return true; + default: + break; + } + } + return false; + } + exports2.tsIsDeclarationStart = tsIsDeclarationStart; + function tsParseFunctionBodyAndFinish(functionStart, funcContextId) { + if (_index.match.call(void 0, _types.TokenType.colon)) { + tsParseTypeOrTypePredicateAnnotation(_types.TokenType.colon); + } + if (!_index.match.call(void 0, _types.TokenType.braceL) && _util.isLineTerminator.call(void 0)) { + let i4 = _base.state.tokens.length - 1; + while (i4 >= 0 && (_base.state.tokens[i4].start >= functionStart || _base.state.tokens[i4].type === _types.TokenType._default || _base.state.tokens[i4].type === _types.TokenType._export)) { + _base.state.tokens[i4].isType = true; + i4--; + } + return; + } + _expression.parseFunctionBody.call(void 0, false, funcContextId); + } + exports2.tsParseFunctionBodyAndFinish = tsParseFunctionBodyAndFinish; + function tsParseSubscript(startTokenIndex, noCalls, stopState) { + if (!_util.hasPrecedingLineBreak.call(void 0) && _index.eat.call(void 0, _types.TokenType.bang)) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType.nonNullAssertion; + return; + } + if (_index.match.call(void 0, _types.TokenType.lessThan) || _index.match.call(void 0, _types.TokenType.bitShiftL)) { + const snapshot = _base.state.snapshot(); + if (!noCalls && _expression.atPossibleAsync.call(void 0)) { + const asyncArrowFn = tsTryParseGenericAsyncArrowFunction(); + if (asyncArrowFn) { + return; + } + } + tsParseTypeArgumentsWithPossibleBitshift(); + if (!noCalls && _index.eat.call(void 0, _types.TokenType.parenL)) { + _base.state.tokens[_base.state.tokens.length - 1].subscriptStartIndex = startTokenIndex; + _expression.parseCallExpressionArguments.call(void 0); + } else if (_index.match.call(void 0, _types.TokenType.backQuote)) { + _expression.parseTemplate.call(void 0); + } else if ( + // The remaining possible case is an instantiation expression, e.g. + // Array . Check for a few cases that would disqualify it and + // cause us to bail out. + // a>c is not (a)>c, but a<(b>>c) + _base.state.type === _types.TokenType.greaterThan || // ac is (ac + _base.state.type !== _types.TokenType.parenL && Boolean(_base.state.type & _types.TokenType.IS_EXPRESSION_START) && !_util.hasPrecedingLineBreak.call(void 0) + ) { + _util.unexpected.call(void 0); + } + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + } else { + return; + } + } else if (!noCalls && _index.match.call(void 0, _types.TokenType.questionDot) && _index.lookaheadType.call(void 0) === _types.TokenType.lessThan) { + _index.next.call(void 0); + _base.state.tokens[startTokenIndex].isOptionalChainStart = true; + _base.state.tokens[_base.state.tokens.length - 1].subscriptStartIndex = startTokenIndex; + tsParseTypeArguments(); + _util.expect.call(void 0, _types.TokenType.parenL); + _expression.parseCallExpressionArguments.call(void 0); + } + _expression.baseParseSubscript.call(void 0, startTokenIndex, noCalls, stopState); + } + exports2.tsParseSubscript = tsParseSubscript; + function tsTryParseExport() { + if (_index.eat.call(void 0, _types.TokenType._import)) { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._type) && _index.lookaheadType.call(void 0) !== _types.TokenType.eq) { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._type); + } + tsParseImportEqualsDeclaration(); + return true; + } else if (_index.eat.call(void 0, _types.TokenType.eq)) { + _expression.parseExpression.call(void 0); + _util.semicolon.call(void 0); + return true; + } else if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._as)) { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._namespace); + _expression.parseIdentifier.call(void 0); + _util.semicolon.call(void 0); + return true; + } else { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._type)) { + const nextType = _index.lookaheadType.call(void 0); + if (nextType === _types.TokenType.braceL || nextType === _types.TokenType.star) { + _index.next.call(void 0); + } + } + return false; + } + } + exports2.tsTryParseExport = tsTryParseExport; + function tsParseImportSpecifier() { + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType.comma) || _index.match.call(void 0, _types.TokenType.braceR)) { + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index.IdentifierRole.ImportDeclaration; + return; + } + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType.comma) || _index.match.call(void 0, _types.TokenType.braceR)) { + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index.IdentifierRole.ImportDeclaration; + _base.state.tokens[_base.state.tokens.length - 2].isType = true; + _base.state.tokens[_base.state.tokens.length - 1].isType = true; + return; + } + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType.comma) || _index.match.call(void 0, _types.TokenType.braceR)) { + _base.state.tokens[_base.state.tokens.length - 3].identifierRole = _index.IdentifierRole.ImportAccess; + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index.IdentifierRole.ImportDeclaration; + return; + } + _expression.parseIdentifier.call(void 0); + _base.state.tokens[_base.state.tokens.length - 3].identifierRole = _index.IdentifierRole.ImportAccess; + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index.IdentifierRole.ImportDeclaration; + _base.state.tokens[_base.state.tokens.length - 4].isType = true; + _base.state.tokens[_base.state.tokens.length - 3].isType = true; + _base.state.tokens[_base.state.tokens.length - 2].isType = true; + _base.state.tokens[_base.state.tokens.length - 1].isType = true; + } + exports2.tsParseImportSpecifier = tsParseImportSpecifier; + function tsParseExportSpecifier() { + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType.comma) || _index.match.call(void 0, _types.TokenType.braceR)) { + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index.IdentifierRole.ExportAccess; + return; + } + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType.comma) || _index.match.call(void 0, _types.TokenType.braceR)) { + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index.IdentifierRole.ExportAccess; + _base.state.tokens[_base.state.tokens.length - 2].isType = true; + _base.state.tokens[_base.state.tokens.length - 1].isType = true; + return; + } + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType.comma) || _index.match.call(void 0, _types.TokenType.braceR)) { + _base.state.tokens[_base.state.tokens.length - 3].identifierRole = _index.IdentifierRole.ExportAccess; + return; + } + _expression.parseIdentifier.call(void 0); + _base.state.tokens[_base.state.tokens.length - 3].identifierRole = _index.IdentifierRole.ExportAccess; + _base.state.tokens[_base.state.tokens.length - 4].isType = true; + _base.state.tokens[_base.state.tokens.length - 3].isType = true; + _base.state.tokens[_base.state.tokens.length - 2].isType = true; + _base.state.tokens[_base.state.tokens.length - 1].isType = true; + } + exports2.tsParseExportSpecifier = tsParseExportSpecifier; + function tsTryParseExportDefaultExpression() { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._abstract) && _index.lookaheadType.call(void 0) === _types.TokenType._class) { + _base.state.type = _types.TokenType._abstract; + _index.next.call(void 0); + _statement.parseClass.call(void 0, true, true); + return true; + } + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._interface)) { + const oldIsType = _index.pushTypeContext.call(void 0, 2); + tsParseDeclaration(_keywords.ContextualKeyword._interface, true); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } + return false; + } + exports2.tsTryParseExportDefaultExpression = tsTryParseExportDefaultExpression; + function tsTryParseStatementContent() { + if (_base.state.type === _types.TokenType._const) { + const ahead = _index.lookaheadTypeAndKeyword.call(void 0); + if (ahead.type === _types.TokenType.name && ahead.contextualKeyword === _keywords.ContextualKeyword._enum) { + _util.expect.call(void 0, _types.TokenType._const); + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._enum); + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._enum; + tsParseEnumDeclaration(); + return true; + } + } + return false; + } + exports2.tsTryParseStatementContent = tsTryParseStatementContent; + function tsTryParseClassMemberWithIsStatic(isStatic) { + const memberStartIndexAfterStatic = _base.state.tokens.length; + tsParseModifiers([ + _keywords.ContextualKeyword._abstract, + _keywords.ContextualKeyword._readonly, + _keywords.ContextualKeyword._declare, + _keywords.ContextualKeyword._static, + _keywords.ContextualKeyword._override + ]); + const modifiersEndIndex = _base.state.tokens.length; + const found = tsTryParseIndexSignature(); + if (found) { + const memberStartIndex = isStatic ? memberStartIndexAfterStatic - 1 : memberStartIndexAfterStatic; + for (let i4 = memberStartIndex; i4 < modifiersEndIndex; i4++) { + _base.state.tokens[i4].isType = true; + } + return true; + } + return false; + } + exports2.tsTryParseClassMemberWithIsStatic = tsTryParseClassMemberWithIsStatic; + function tsParseIdentifierStatement(contextualKeyword) { + const matched = tsParseExpressionStatement(contextualKeyword); + if (!matched) { + _util.semicolon.call(void 0); + } + } + exports2.tsParseIdentifierStatement = tsParseIdentifierStatement; + function tsParseExportDeclaration() { + const isDeclare = _util.eatContextual.call(void 0, _keywords.ContextualKeyword._declare); + if (isDeclare) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._declare; + } + let matchedDeclaration = false; + if (_index.match.call(void 0, _types.TokenType.name)) { + if (isDeclare) { + const oldIsType = _index.pushTypeContext.call(void 0, 2); + matchedDeclaration = tsTryParseExportDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + } else { + matchedDeclaration = tsTryParseExportDeclaration(); + } + } + if (!matchedDeclaration) { + if (isDeclare) { + const oldIsType = _index.pushTypeContext.call(void 0, 2); + _statement.parseStatement.call(void 0, true); + _index.popTypeContext.call(void 0, oldIsType); + } else { + _statement.parseStatement.call(void 0, true); + } + } + } + exports2.tsParseExportDeclaration = tsParseExportDeclaration; + function tsAfterParseClassSuper(hasSuper) { + if (hasSuper && (_index.match.call(void 0, _types.TokenType.lessThan) || _index.match.call(void 0, _types.TokenType.bitShiftL))) { + tsParseTypeArgumentsWithPossibleBitshift(); + } + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._implements)) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._implements; + const oldIsType = _index.pushTypeContext.call(void 0, 1); + tsParseHeritageClause(); + _index.popTypeContext.call(void 0, oldIsType); + } + } + exports2.tsAfterParseClassSuper = tsAfterParseClassSuper; + function tsStartParseObjPropValue() { + tsTryParseTypeParameters(); + } + exports2.tsStartParseObjPropValue = tsStartParseObjPropValue; + function tsStartParseFunctionParams() { + tsTryParseTypeParameters(); + } + exports2.tsStartParseFunctionParams = tsStartParseFunctionParams; + function tsAfterParseVarHead() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + if (!_util.hasPrecedingLineBreak.call(void 0)) { + _index.eat.call(void 0, _types.TokenType.bang); + } + tsTryParseTypeAnnotation(); + _index.popTypeContext.call(void 0, oldIsType); + } + exports2.tsAfterParseVarHead = tsAfterParseVarHead; + function tsStartParseAsyncArrowFromCallExpression() { + if (_index.match.call(void 0, _types.TokenType.colon)) { + tsParseTypeAnnotation(); + } + } + exports2.tsStartParseAsyncArrowFromCallExpression = tsStartParseAsyncArrowFromCallExpression; + function tsParseMaybeAssign(noIn, isWithinParens) { + if (_base.isJSXEnabled) { + return tsParseMaybeAssignWithJSX(noIn, isWithinParens); + } else { + return tsParseMaybeAssignWithoutJSX(noIn, isWithinParens); + } + } + exports2.tsParseMaybeAssign = tsParseMaybeAssign; + function tsParseMaybeAssignWithJSX(noIn, isWithinParens) { + if (!_index.match.call(void 0, _types.TokenType.lessThan)) { + return _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + } + const snapshot = _base.state.snapshot(); + let wasArrow = _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + } else { + return wasArrow; + } + _base.state.type = _types.TokenType.typeParameterStart; + tsParseTypeParameters(); + wasArrow = _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + if (!wasArrow) { + _util.unexpected.call(void 0); + } + return wasArrow; + } + exports2.tsParseMaybeAssignWithJSX = tsParseMaybeAssignWithJSX; + function tsParseMaybeAssignWithoutJSX(noIn, isWithinParens) { + if (!_index.match.call(void 0, _types.TokenType.lessThan)) { + return _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + } + const snapshot = _base.state.snapshot(); + tsParseTypeParameters(); + const wasArrow = _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + if (!wasArrow) { + _util.unexpected.call(void 0); + } + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + } else { + return wasArrow; + } + return _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + } + exports2.tsParseMaybeAssignWithoutJSX = tsParseMaybeAssignWithoutJSX; + function tsParseArrow() { + if (_index.match.call(void 0, _types.TokenType.colon)) { + const snapshot = _base.state.snapshot(); + tsParseTypeOrTypePredicateAnnotation(_types.TokenType.colon); + if (_util.canInsertSemicolon.call(void 0)) _util.unexpected.call(void 0); + if (!_index.match.call(void 0, _types.TokenType.arrow)) _util.unexpected.call(void 0); + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + } + } + return _index.eat.call(void 0, _types.TokenType.arrow); + } + exports2.tsParseArrow = tsParseArrow; + function tsParseAssignableListItemTypes() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _index.eat.call(void 0, _types.TokenType.question); + tsTryParseTypeAnnotation(); + _index.popTypeContext.call(void 0, oldIsType); + } + exports2.tsParseAssignableListItemTypes = tsParseAssignableListItemTypes; + function tsParseMaybeDecoratorArguments() { + if (_index.match.call(void 0, _types.TokenType.lessThan) || _index.match.call(void 0, _types.TokenType.bitShiftL)) { + tsParseTypeArgumentsWithPossibleBitshift(); + } + _statement.baseParseMaybeDecoratorArguments.call(void 0); + } + exports2.tsParseMaybeDecoratorArguments = tsParseMaybeDecoratorArguments; + } +}); + +// node_modules/sucrase/dist/parser/plugins/jsx/index.js +var require_jsx = __commonJS({ + "node_modules/sucrase/dist/parser/plugins/jsx/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _index = require_tokenizer(); + var _types = require_types(); + var _base = require_base(); + var _expression = require_expression(); + var _util = require_util(); + var _charcodes = require_charcodes(); + var _identifier = require_identifier(); + var _typescript = require_typescript(); + function jsxReadToken() { + let sawNewline = false; + let sawNonWhitespace = false; + while (true) { + if (_base.state.pos >= _base.input.length) { + _util.unexpected.call(void 0, "Unterminated JSX contents"); + return; + } + const ch = _base.input.charCodeAt(_base.state.pos); + if (ch === _charcodes.charCodes.lessThan || ch === _charcodes.charCodes.leftCurlyBrace) { + if (_base.state.pos === _base.state.start) { + if (ch === _charcodes.charCodes.lessThan) { + _base.state.pos++; + _index.finishToken.call(void 0, _types.TokenType.jsxTagStart); + return; + } + _index.getTokenFromCode.call(void 0, ch); + return; + } + if (sawNewline && !sawNonWhitespace) { + _index.finishToken.call(void 0, _types.TokenType.jsxEmptyText); + } else { + _index.finishToken.call(void 0, _types.TokenType.jsxText); + } + return; + } + if (ch === _charcodes.charCodes.lineFeed) { + sawNewline = true; + } else if (ch !== _charcodes.charCodes.space && ch !== _charcodes.charCodes.carriageReturn && ch !== _charcodes.charCodes.tab) { + sawNonWhitespace = true; + } + _base.state.pos++; + } + } + function jsxReadString(quote) { + _base.state.pos++; + for (; ; ) { + if (_base.state.pos >= _base.input.length) { + _util.unexpected.call(void 0, "Unterminated string constant"); + return; + } + const ch = _base.input.charCodeAt(_base.state.pos); + if (ch === quote) { + _base.state.pos++; + break; + } + _base.state.pos++; + } + _index.finishToken.call(void 0, _types.TokenType.string); + } + function jsxReadWord() { + let ch; + do { + if (_base.state.pos > _base.input.length) { + _util.unexpected.call(void 0, "Unexpectedly reached the end of input."); + return; + } + ch = _base.input.charCodeAt(++_base.state.pos); + } while (_identifier.IS_IDENTIFIER_CHAR[ch] || ch === _charcodes.charCodes.dash); + _index.finishToken.call(void 0, _types.TokenType.jsxName); + } + function jsxParseIdentifier() { + nextJSXTagToken(); + } + function jsxParseNamespacedName(identifierRole) { + jsxParseIdentifier(); + if (!_index.eat.call(void 0, _types.TokenType.colon)) { + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = identifierRole; + return; + } + jsxParseIdentifier(); + } + function jsxParseElementName() { + const firstTokenIndex = _base.state.tokens.length; + jsxParseNamespacedName(_index.IdentifierRole.Access); + let hadDot = false; + while (_index.match.call(void 0, _types.TokenType.dot)) { + hadDot = true; + nextJSXTagToken(); + jsxParseIdentifier(); + } + if (!hadDot) { + const firstToken = _base.state.tokens[firstTokenIndex]; + const firstChar = _base.input.charCodeAt(firstToken.start); + if (firstChar >= _charcodes.charCodes.lowercaseA && firstChar <= _charcodes.charCodes.lowercaseZ) { + firstToken.identifierRole = null; + } + } + } + function jsxParseAttributeValue() { + switch (_base.state.type) { + case _types.TokenType.braceL: + _index.next.call(void 0); + _expression.parseExpression.call(void 0); + nextJSXTagToken(); + return; + case _types.TokenType.jsxTagStart: + jsxParseElement(); + nextJSXTagToken(); + return; + case _types.TokenType.string: + nextJSXTagToken(); + return; + default: + _util.unexpected.call(void 0, "JSX value should be either an expression or a quoted JSX text"); + } + } + function jsxParseSpreadChild() { + _util.expect.call(void 0, _types.TokenType.ellipsis); + _expression.parseExpression.call(void 0); + } + function jsxParseOpeningElement(initialTokenIndex) { + if (_index.match.call(void 0, _types.TokenType.jsxTagEnd)) { + return false; + } + jsxParseElementName(); + if (_base.isTypeScriptEnabled) { + _typescript.tsTryParseJSXTypeArgument.call(void 0); + } + let hasSeenPropSpread = false; + while (!_index.match.call(void 0, _types.TokenType.slash) && !_index.match.call(void 0, _types.TokenType.jsxTagEnd) && !_base.state.error) { + if (_index.eat.call(void 0, _types.TokenType.braceL)) { + hasSeenPropSpread = true; + _util.expect.call(void 0, _types.TokenType.ellipsis); + _expression.parseMaybeAssign.call(void 0); + nextJSXTagToken(); + continue; + } + if (hasSeenPropSpread && _base.state.end - _base.state.start === 3 && _base.input.charCodeAt(_base.state.start) === _charcodes.charCodes.lowercaseK && _base.input.charCodeAt(_base.state.start + 1) === _charcodes.charCodes.lowercaseE && _base.input.charCodeAt(_base.state.start + 2) === _charcodes.charCodes.lowercaseY) { + _base.state.tokens[initialTokenIndex].jsxRole = _index.JSXRole.KeyAfterPropSpread; + } + jsxParseNamespacedName(_index.IdentifierRole.ObjectKey); + if (_index.match.call(void 0, _types.TokenType.eq)) { + nextJSXTagToken(); + jsxParseAttributeValue(); + } + } + const isSelfClosing = _index.match.call(void 0, _types.TokenType.slash); + if (isSelfClosing) { + nextJSXTagToken(); + } + return isSelfClosing; + } + function jsxParseClosingElement() { + if (_index.match.call(void 0, _types.TokenType.jsxTagEnd)) { + return; + } + jsxParseElementName(); + } + function jsxParseElementAt() { + const initialTokenIndex = _base.state.tokens.length - 1; + _base.state.tokens[initialTokenIndex].jsxRole = _index.JSXRole.NoChildren; + let numExplicitChildren = 0; + const isSelfClosing = jsxParseOpeningElement(initialTokenIndex); + if (!isSelfClosing) { + nextJSXExprToken(); + while (true) { + switch (_base.state.type) { + case _types.TokenType.jsxTagStart: + nextJSXTagToken(); + if (_index.match.call(void 0, _types.TokenType.slash)) { + nextJSXTagToken(); + jsxParseClosingElement(); + if (_base.state.tokens[initialTokenIndex].jsxRole !== _index.JSXRole.KeyAfterPropSpread) { + if (numExplicitChildren === 1) { + _base.state.tokens[initialTokenIndex].jsxRole = _index.JSXRole.OneChild; + } else if (numExplicitChildren > 1) { + _base.state.tokens[initialTokenIndex].jsxRole = _index.JSXRole.StaticChildren; + } + } + return; + } + numExplicitChildren++; + jsxParseElementAt(); + nextJSXExprToken(); + break; + case _types.TokenType.jsxText: + numExplicitChildren++; + nextJSXExprToken(); + break; + case _types.TokenType.jsxEmptyText: + nextJSXExprToken(); + break; + case _types.TokenType.braceL: + _index.next.call(void 0); + if (_index.match.call(void 0, _types.TokenType.ellipsis)) { + jsxParseSpreadChild(); + nextJSXExprToken(); + numExplicitChildren += 2; + } else { + if (!_index.match.call(void 0, _types.TokenType.braceR)) { + numExplicitChildren++; + _expression.parseExpression.call(void 0); + } + nextJSXExprToken(); + } + break; + // istanbul ignore next - should never happen + default: + _util.unexpected.call(void 0); + return; + } + } + } + } + function jsxParseElement() { + nextJSXTagToken(); + jsxParseElementAt(); + } + exports2.jsxParseElement = jsxParseElement; + function nextJSXTagToken() { + _base.state.tokens.push(new (0, _index.Token)()); + _index.skipSpace.call(void 0); + _base.state.start = _base.state.pos; + const code = _base.input.charCodeAt(_base.state.pos); + if (_identifier.IS_IDENTIFIER_START[code]) { + jsxReadWord(); + } else if (code === _charcodes.charCodes.quotationMark || code === _charcodes.charCodes.apostrophe) { + jsxReadString(code); + } else { + ++_base.state.pos; + switch (code) { + case _charcodes.charCodes.greaterThan: + _index.finishToken.call(void 0, _types.TokenType.jsxTagEnd); + break; + case _charcodes.charCodes.lessThan: + _index.finishToken.call(void 0, _types.TokenType.jsxTagStart); + break; + case _charcodes.charCodes.slash: + _index.finishToken.call(void 0, _types.TokenType.slash); + break; + case _charcodes.charCodes.equalsTo: + _index.finishToken.call(void 0, _types.TokenType.eq); + break; + case _charcodes.charCodes.leftCurlyBrace: + _index.finishToken.call(void 0, _types.TokenType.braceL); + break; + case _charcodes.charCodes.dot: + _index.finishToken.call(void 0, _types.TokenType.dot); + break; + case _charcodes.charCodes.colon: + _index.finishToken.call(void 0, _types.TokenType.colon); + break; + default: + _util.unexpected.call(void 0); + } + } + } + exports2.nextJSXTagToken = nextJSXTagToken; + function nextJSXExprToken() { + _base.state.tokens.push(new (0, _index.Token)()); + _base.state.start = _base.state.pos; + jsxReadToken(); + } + } +}); + +// node_modules/sucrase/dist/parser/plugins/types.js +var require_types3 = __commonJS({ + "node_modules/sucrase/dist/parser/plugins/types.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _index = require_tokenizer(); + var _types = require_types(); + var _base = require_base(); + var _expression = require_expression(); + var _flow = require_flow(); + var _typescript = require_typescript(); + function typedParseConditional(noIn) { + if (_index.match.call(void 0, _types.TokenType.question)) { + const nextType = _index.lookaheadType.call(void 0); + if (nextType === _types.TokenType.colon || nextType === _types.TokenType.comma || nextType === _types.TokenType.parenR) { + return; + } + } + _expression.baseParseConditional.call(void 0, noIn); + } + exports2.typedParseConditional = typedParseConditional; + function typedParseParenItem() { + _index.eatTypeToken.call(void 0, _types.TokenType.question); + if (_index.match.call(void 0, _types.TokenType.colon)) { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseTypeAnnotation.call(void 0); + } else if (_base.isFlowEnabled) { + _flow.flowParseTypeAnnotation.call(void 0); + } + } + } + exports2.typedParseParenItem = typedParseParenItem; + } +}); + +// node_modules/sucrase/dist/parser/traverser/expression.js +var require_expression = __commonJS({ + "node_modules/sucrase/dist/parser/traverser/expression.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _flow = require_flow(); + var _index = require_jsx(); + var _types = require_types3(); + var _typescript = require_typescript(); + var _index3 = require_tokenizer(); + var _keywords = require_keywords(); + var _state = require_state(); + var _types3 = require_types(); + var _charcodes = require_charcodes(); + var _identifier = require_identifier(); + var _base = require_base(); + var _lval = require_lval(); + var _statement = require_statement(); + var _util = require_util(); + var StopState = class { + constructor(stop) { + this.stop = stop; + } + }; + exports2.StopState = StopState; + function parseExpression(noIn = false) { + parseMaybeAssign(noIn); + if (_index3.match.call(void 0, _types3.TokenType.comma)) { + while (_index3.eat.call(void 0, _types3.TokenType.comma)) { + parseMaybeAssign(noIn); + } + } + } + exports2.parseExpression = parseExpression; + function parseMaybeAssign(noIn = false, isWithinParens = false) { + if (_base.isTypeScriptEnabled) { + return _typescript.tsParseMaybeAssign.call(void 0, noIn, isWithinParens); + } else if (_base.isFlowEnabled) { + return _flow.flowParseMaybeAssign.call(void 0, noIn, isWithinParens); + } else { + return baseParseMaybeAssign(noIn, isWithinParens); + } + } + exports2.parseMaybeAssign = parseMaybeAssign; + function baseParseMaybeAssign(noIn, isWithinParens) { + if (_index3.match.call(void 0, _types3.TokenType._yield)) { + parseYield(); + return false; + } + if (_index3.match.call(void 0, _types3.TokenType.parenL) || _index3.match.call(void 0, _types3.TokenType.name) || _index3.match.call(void 0, _types3.TokenType._yield)) { + _base.state.potentialArrowAt = _base.state.start; + } + const wasArrow = parseMaybeConditional(noIn); + if (isWithinParens) { + parseParenItem(); + } + if (_base.state.type & _types3.TokenType.IS_ASSIGN) { + _index3.next.call(void 0); + parseMaybeAssign(noIn); + return false; + } + return wasArrow; + } + exports2.baseParseMaybeAssign = baseParseMaybeAssign; + function parseMaybeConditional(noIn) { + const wasArrow = parseExprOps(noIn); + if (wasArrow) { + return true; + } + parseConditional(noIn); + return false; + } + function parseConditional(noIn) { + if (_base.isTypeScriptEnabled || _base.isFlowEnabled) { + _types.typedParseConditional.call(void 0, noIn); + } else { + baseParseConditional(noIn); + } + } + function baseParseConditional(noIn) { + if (_index3.eat.call(void 0, _types3.TokenType.question)) { + parseMaybeAssign(); + _util.expect.call(void 0, _types3.TokenType.colon); + parseMaybeAssign(noIn); + } + } + exports2.baseParseConditional = baseParseConditional; + function parseExprOps(noIn) { + const startTokenIndex = _base.state.tokens.length; + const wasArrow = parseMaybeUnary(); + if (wasArrow) { + return true; + } + parseExprOp(startTokenIndex, -1, noIn); + return false; + } + function parseExprOp(startTokenIndex, minPrec, noIn) { + if (_base.isTypeScriptEnabled && (_types3.TokenType._in & _types3.TokenType.PRECEDENCE_MASK) > minPrec && !_util.hasPrecedingLineBreak.call(void 0) && (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._as) || _util.eatContextual.call(void 0, _keywords.ContextualKeyword._satisfies))) { + const oldIsType = _index3.pushTypeContext.call(void 0, 1); + _typescript.tsParseType.call(void 0); + _index3.popTypeContext.call(void 0, oldIsType); + _index3.rescan_gt.call(void 0); + parseExprOp(startTokenIndex, minPrec, noIn); + return; + } + const prec = _base.state.type & _types3.TokenType.PRECEDENCE_MASK; + if (prec > 0 && (!noIn || !_index3.match.call(void 0, _types3.TokenType._in))) { + if (prec > minPrec) { + const op = _base.state.type; + _index3.next.call(void 0); + if (op === _types3.TokenType.nullishCoalescing) { + _base.state.tokens[_base.state.tokens.length - 1].nullishStartIndex = startTokenIndex; + } + const rhsStartTokenIndex = _base.state.tokens.length; + parseMaybeUnary(); + parseExprOp(rhsStartTokenIndex, op & _types3.TokenType.IS_RIGHT_ASSOCIATIVE ? prec - 1 : prec, noIn); + if (op === _types3.TokenType.nullishCoalescing) { + _base.state.tokens[startTokenIndex].numNullishCoalesceStarts++; + _base.state.tokens[_base.state.tokens.length - 1].numNullishCoalesceEnds++; + } + parseExprOp(startTokenIndex, minPrec, noIn); + } + } + } + function parseMaybeUnary() { + if (_base.isTypeScriptEnabled && !_base.isJSXEnabled && _index3.eat.call(void 0, _types3.TokenType.lessThan)) { + _typescript.tsParseTypeAssertion.call(void 0); + return false; + } + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._module) && _index3.lookaheadCharCode.call(void 0) === _charcodes.charCodes.leftCurlyBrace && !_util.hasFollowingLineBreak.call(void 0)) { + parseModuleExpression(); + return false; + } + if (_base.state.type & _types3.TokenType.IS_PREFIX) { + _index3.next.call(void 0); + parseMaybeUnary(); + return false; + } + const wasArrow = parseExprSubscripts(); + if (wasArrow) { + return true; + } + while (_base.state.type & _types3.TokenType.IS_POSTFIX && !_util.canInsertSemicolon.call(void 0)) { + if (_base.state.type === _types3.TokenType.preIncDec) { + _base.state.type = _types3.TokenType.postIncDec; + } + _index3.next.call(void 0); + } + return false; + } + exports2.parseMaybeUnary = parseMaybeUnary; + function parseExprSubscripts() { + const startTokenIndex = _base.state.tokens.length; + const wasArrow = parseExprAtom(); + if (wasArrow) { + return true; + } + parseSubscripts(startTokenIndex); + if (_base.state.tokens.length > startTokenIndex && _base.state.tokens[startTokenIndex].isOptionalChainStart) { + _base.state.tokens[_base.state.tokens.length - 1].isOptionalChainEnd = true; + } + return false; + } + exports2.parseExprSubscripts = parseExprSubscripts; + function parseSubscripts(startTokenIndex, noCalls = false) { + if (_base.isFlowEnabled) { + _flow.flowParseSubscripts.call(void 0, startTokenIndex, noCalls); + } else { + baseParseSubscripts(startTokenIndex, noCalls); + } + } + function baseParseSubscripts(startTokenIndex, noCalls = false) { + const stopState = new StopState(false); + do { + parseSubscript(startTokenIndex, noCalls, stopState); + } while (!stopState.stop && !_base.state.error); + } + exports2.baseParseSubscripts = baseParseSubscripts; + function parseSubscript(startTokenIndex, noCalls, stopState) { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseSubscript.call(void 0, startTokenIndex, noCalls, stopState); + } else if (_base.isFlowEnabled) { + _flow.flowParseSubscript.call(void 0, startTokenIndex, noCalls, stopState); + } else { + baseParseSubscript(startTokenIndex, noCalls, stopState); + } + } + function baseParseSubscript(startTokenIndex, noCalls, stopState) { + if (!noCalls && _index3.eat.call(void 0, _types3.TokenType.doubleColon)) { + parseNoCallExpr(); + stopState.stop = true; + parseSubscripts(startTokenIndex, noCalls); + } else if (_index3.match.call(void 0, _types3.TokenType.questionDot)) { + _base.state.tokens[startTokenIndex].isOptionalChainStart = true; + if (noCalls && _index3.lookaheadType.call(void 0) === _types3.TokenType.parenL) { + stopState.stop = true; + return; + } + _index3.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].subscriptStartIndex = startTokenIndex; + if (_index3.eat.call(void 0, _types3.TokenType.bracketL)) { + parseExpression(); + _util.expect.call(void 0, _types3.TokenType.bracketR); + } else if (_index3.eat.call(void 0, _types3.TokenType.parenL)) { + parseCallExpressionArguments(); + } else { + parseMaybePrivateName(); + } + } else if (_index3.eat.call(void 0, _types3.TokenType.dot)) { + _base.state.tokens[_base.state.tokens.length - 1].subscriptStartIndex = startTokenIndex; + parseMaybePrivateName(); + } else if (_index3.eat.call(void 0, _types3.TokenType.bracketL)) { + _base.state.tokens[_base.state.tokens.length - 1].subscriptStartIndex = startTokenIndex; + parseExpression(); + _util.expect.call(void 0, _types3.TokenType.bracketR); + } else if (!noCalls && _index3.match.call(void 0, _types3.TokenType.parenL)) { + if (atPossibleAsync()) { + const snapshot = _base.state.snapshot(); + const asyncStartTokenIndex = _base.state.tokens.length; + _index3.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].subscriptStartIndex = startTokenIndex; + const callContextId = _base.getNextContextId.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].contextId = callContextId; + parseCallExpressionArguments(); + _base.state.tokens[_base.state.tokens.length - 1].contextId = callContextId; + if (shouldParseAsyncArrow()) { + _base.state.restoreFromSnapshot(snapshot); + stopState.stop = true; + _base.state.scopeDepth++; + _statement.parseFunctionParams.call(void 0); + parseAsyncArrowFromCallExpression(asyncStartTokenIndex); + } + } else { + _index3.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].subscriptStartIndex = startTokenIndex; + const callContextId = _base.getNextContextId.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].contextId = callContextId; + parseCallExpressionArguments(); + _base.state.tokens[_base.state.tokens.length - 1].contextId = callContextId; + } + } else if (_index3.match.call(void 0, _types3.TokenType.backQuote)) { + parseTemplate(); + } else { + stopState.stop = true; + } + } + exports2.baseParseSubscript = baseParseSubscript; + function atPossibleAsync() { + return _base.state.tokens[_base.state.tokens.length - 1].contextualKeyword === _keywords.ContextualKeyword._async && !_util.canInsertSemicolon.call(void 0); + } + exports2.atPossibleAsync = atPossibleAsync; + function parseCallExpressionArguments() { + let first = true; + while (!_index3.eat.call(void 0, _types3.TokenType.parenR) && !_base.state.error) { + if (first) { + first = false; + } else { + _util.expect.call(void 0, _types3.TokenType.comma); + if (_index3.eat.call(void 0, _types3.TokenType.parenR)) { + break; + } + } + parseExprListItem(false); + } + } + exports2.parseCallExpressionArguments = parseCallExpressionArguments; + function shouldParseAsyncArrow() { + return _index3.match.call(void 0, _types3.TokenType.colon) || _index3.match.call(void 0, _types3.TokenType.arrow); + } + function parseAsyncArrowFromCallExpression(startTokenIndex) { + if (_base.isTypeScriptEnabled) { + _typescript.tsStartParseAsyncArrowFromCallExpression.call(void 0); + } else if (_base.isFlowEnabled) { + _flow.flowStartParseAsyncArrowFromCallExpression.call(void 0); + } + _util.expect.call(void 0, _types3.TokenType.arrow); + parseArrowExpression(startTokenIndex); + } + function parseNoCallExpr() { + const startTokenIndex = _base.state.tokens.length; + parseExprAtom(); + parseSubscripts(startTokenIndex, true); + } + function parseExprAtom() { + if (_index3.eat.call(void 0, _types3.TokenType.modulo)) { + parseIdentifier(); + return false; + } + if (_index3.match.call(void 0, _types3.TokenType.jsxText) || _index3.match.call(void 0, _types3.TokenType.jsxEmptyText)) { + parseLiteral(); + return false; + } else if (_index3.match.call(void 0, _types3.TokenType.lessThan) && _base.isJSXEnabled) { + _base.state.type = _types3.TokenType.jsxTagStart; + _index.jsxParseElement.call(void 0); + _index3.next.call(void 0); + return false; + } + const canBeArrow = _base.state.potentialArrowAt === _base.state.start; + switch (_base.state.type) { + case _types3.TokenType.slash: + case _types3.TokenType.assign: + _index3.retokenizeSlashAsRegex.call(void 0); + // Fall through. + case _types3.TokenType._super: + case _types3.TokenType._this: + case _types3.TokenType.regexp: + case _types3.TokenType.num: + case _types3.TokenType.bigint: + case _types3.TokenType.decimal: + case _types3.TokenType.string: + case _types3.TokenType._null: + case _types3.TokenType._true: + case _types3.TokenType._false: + _index3.next.call(void 0); + return false; + case _types3.TokenType._import: + _index3.next.call(void 0); + if (_index3.match.call(void 0, _types3.TokenType.dot)) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types3.TokenType.name; + _index3.next.call(void 0); + parseIdentifier(); + } + return false; + case _types3.TokenType.name: { + const startTokenIndex = _base.state.tokens.length; + const functionStart = _base.state.start; + const contextualKeyword = _base.state.contextualKeyword; + parseIdentifier(); + if (contextualKeyword === _keywords.ContextualKeyword._await) { + parseAwait(); + return false; + } else if (contextualKeyword === _keywords.ContextualKeyword._async && _index3.match.call(void 0, _types3.TokenType._function) && !_util.canInsertSemicolon.call(void 0)) { + _index3.next.call(void 0); + _statement.parseFunction.call(void 0, functionStart, false); + return false; + } else if (canBeArrow && contextualKeyword === _keywords.ContextualKeyword._async && !_util.canInsertSemicolon.call(void 0) && _index3.match.call(void 0, _types3.TokenType.name)) { + _base.state.scopeDepth++; + _lval.parseBindingIdentifier.call(void 0, false); + _util.expect.call(void 0, _types3.TokenType.arrow); + parseArrowExpression(startTokenIndex); + return true; + } else if (_index3.match.call(void 0, _types3.TokenType._do) && !_util.canInsertSemicolon.call(void 0)) { + _index3.next.call(void 0); + _statement.parseBlock.call(void 0); + return false; + } + if (canBeArrow && !_util.canInsertSemicolon.call(void 0) && _index3.match.call(void 0, _types3.TokenType.arrow)) { + _base.state.scopeDepth++; + _lval.markPriorBindingIdentifier.call(void 0, false); + _util.expect.call(void 0, _types3.TokenType.arrow); + parseArrowExpression(startTokenIndex); + return true; + } + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index3.IdentifierRole.Access; + return false; + } + case _types3.TokenType._do: { + _index3.next.call(void 0); + _statement.parseBlock.call(void 0); + return false; + } + case _types3.TokenType.parenL: { + const wasArrow = parseParenAndDistinguishExpression(canBeArrow); + return wasArrow; + } + case _types3.TokenType.bracketL: + _index3.next.call(void 0); + parseExprList(_types3.TokenType.bracketR, true); + return false; + case _types3.TokenType.braceL: + parseObj(false, false); + return false; + case _types3.TokenType._function: + parseFunctionExpression(); + return false; + case _types3.TokenType.at: + _statement.parseDecorators.call(void 0); + // Fall through. + case _types3.TokenType._class: + _statement.parseClass.call(void 0, false); + return false; + case _types3.TokenType._new: + parseNew(); + return false; + case _types3.TokenType.backQuote: + parseTemplate(); + return false; + case _types3.TokenType.doubleColon: { + _index3.next.call(void 0); + parseNoCallExpr(); + return false; + } + case _types3.TokenType.hash: { + const code = _index3.lookaheadCharCode.call(void 0); + if (_identifier.IS_IDENTIFIER_START[code] || code === _charcodes.charCodes.backslash) { + parseMaybePrivateName(); + } else { + _index3.next.call(void 0); + } + return false; + } + default: + _util.unexpected.call(void 0); + return false; + } + } + exports2.parseExprAtom = parseExprAtom; + function parseMaybePrivateName() { + _index3.eat.call(void 0, _types3.TokenType.hash); + parseIdentifier(); + } + function parseFunctionExpression() { + const functionStart = _base.state.start; + parseIdentifier(); + if (_index3.eat.call(void 0, _types3.TokenType.dot)) { + parseIdentifier(); + } + _statement.parseFunction.call(void 0, functionStart, false); + } + function parseLiteral() { + _index3.next.call(void 0); + } + exports2.parseLiteral = parseLiteral; + function parseParenExpression() { + _util.expect.call(void 0, _types3.TokenType.parenL); + parseExpression(); + _util.expect.call(void 0, _types3.TokenType.parenR); + } + exports2.parseParenExpression = parseParenExpression; + function parseParenAndDistinguishExpression(canBeArrow) { + const snapshot = _base.state.snapshot(); + const startTokenIndex = _base.state.tokens.length; + _util.expect.call(void 0, _types3.TokenType.parenL); + let first = true; + while (!_index3.match.call(void 0, _types3.TokenType.parenR) && !_base.state.error) { + if (first) { + first = false; + } else { + _util.expect.call(void 0, _types3.TokenType.comma); + if (_index3.match.call(void 0, _types3.TokenType.parenR)) { + break; + } + } + if (_index3.match.call(void 0, _types3.TokenType.ellipsis)) { + _lval.parseRest.call( + void 0, + false + /* isBlockScope */ + ); + parseParenItem(); + break; + } else { + parseMaybeAssign(false, true); + } + } + _util.expect.call(void 0, _types3.TokenType.parenR); + if (canBeArrow && shouldParseArrow()) { + const wasArrow = parseArrow(); + if (wasArrow) { + _base.state.restoreFromSnapshot(snapshot); + _base.state.scopeDepth++; + _statement.parseFunctionParams.call(void 0); + parseArrow(); + parseArrowExpression(startTokenIndex); + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + parseParenAndDistinguishExpression(false); + return false; + } + return true; + } + } + return false; + } + function shouldParseArrow() { + return _index3.match.call(void 0, _types3.TokenType.colon) || !_util.canInsertSemicolon.call(void 0); + } + function parseArrow() { + if (_base.isTypeScriptEnabled) { + return _typescript.tsParseArrow.call(void 0); + } else if (_base.isFlowEnabled) { + return _flow.flowParseArrow.call(void 0); + } else { + return _index3.eat.call(void 0, _types3.TokenType.arrow); + } + } + exports2.parseArrow = parseArrow; + function parseParenItem() { + if (_base.isTypeScriptEnabled || _base.isFlowEnabled) { + _types.typedParseParenItem.call(void 0); + } + } + function parseNew() { + _util.expect.call(void 0, _types3.TokenType._new); + if (_index3.eat.call(void 0, _types3.TokenType.dot)) { + parseIdentifier(); + return; + } + parseNewCallee(); + if (_base.isFlowEnabled) { + _flow.flowStartParseNewArguments.call(void 0); + } + if (_index3.eat.call(void 0, _types3.TokenType.parenL)) { + parseExprList(_types3.TokenType.parenR); + } + } + function parseNewCallee() { + parseNoCallExpr(); + _index3.eat.call(void 0, _types3.TokenType.questionDot); + } + function parseTemplate() { + _index3.nextTemplateToken.call(void 0); + _index3.nextTemplateToken.call(void 0); + while (!_index3.match.call(void 0, _types3.TokenType.backQuote) && !_base.state.error) { + _util.expect.call(void 0, _types3.TokenType.dollarBraceL); + parseExpression(); + _index3.nextTemplateToken.call(void 0); + _index3.nextTemplateToken.call(void 0); + } + _index3.next.call(void 0); + } + exports2.parseTemplate = parseTemplate; + function parseObj(isPattern, isBlockScope) { + const contextId = _base.getNextContextId.call(void 0); + let first = true; + _index3.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].contextId = contextId; + while (!_index3.eat.call(void 0, _types3.TokenType.braceR) && !_base.state.error) { + if (first) { + first = false; + } else { + _util.expect.call(void 0, _types3.TokenType.comma); + if (_index3.eat.call(void 0, _types3.TokenType.braceR)) { + break; + } + } + let isGenerator = false; + if (_index3.match.call(void 0, _types3.TokenType.ellipsis)) { + const previousIndex = _base.state.tokens.length; + _lval.parseSpread.call(void 0); + if (isPattern) { + if (_base.state.tokens.length === previousIndex + 2) { + _lval.markPriorBindingIdentifier.call(void 0, isBlockScope); + } + if (_index3.eat.call(void 0, _types3.TokenType.braceR)) { + break; + } + } + continue; + } + if (!isPattern) { + isGenerator = _index3.eat.call(void 0, _types3.TokenType.star); + } + if (!isPattern && _util.isContextual.call(void 0, _keywords.ContextualKeyword._async)) { + if (isGenerator) _util.unexpected.call(void 0); + parseIdentifier(); + if (_index3.match.call(void 0, _types3.TokenType.colon) || _index3.match.call(void 0, _types3.TokenType.parenL) || _index3.match.call(void 0, _types3.TokenType.braceR) || _index3.match.call(void 0, _types3.TokenType.eq) || _index3.match.call(void 0, _types3.TokenType.comma)) { + } else { + if (_index3.match.call(void 0, _types3.TokenType.star)) { + _index3.next.call(void 0); + isGenerator = true; + } + parsePropertyName(contextId); + } + } else { + parsePropertyName(contextId); + } + parseObjPropValue(isPattern, isBlockScope, contextId); + } + _base.state.tokens[_base.state.tokens.length - 1].contextId = contextId; + } + exports2.parseObj = parseObj; + function isGetterOrSetterMethod(isPattern) { + return !isPattern && (_index3.match.call(void 0, _types3.TokenType.string) || // get "string"() {} + _index3.match.call(void 0, _types3.TokenType.num) || // get 1() {} + _index3.match.call(void 0, _types3.TokenType.bracketL) || // get ["string"]() {} + _index3.match.call(void 0, _types3.TokenType.name) || // get foo() {} + !!(_base.state.type & _types3.TokenType.IS_KEYWORD)); + } + function parseObjectMethod(isPattern, objectContextId) { + const functionStart = _base.state.start; + if (_index3.match.call(void 0, _types3.TokenType.parenL)) { + if (isPattern) _util.unexpected.call(void 0); + parseMethod( + functionStart, + /* isConstructor */ + false + ); + return true; + } + if (isGetterOrSetterMethod(isPattern)) { + parsePropertyName(objectContextId); + parseMethod( + functionStart, + /* isConstructor */ + false + ); + return true; + } + return false; + } + function parseObjectProperty(isPattern, isBlockScope) { + if (_index3.eat.call(void 0, _types3.TokenType.colon)) { + if (isPattern) { + _lval.parseMaybeDefault.call(void 0, isBlockScope); + } else { + parseMaybeAssign(false); + } + return; + } + let identifierRole; + if (isPattern) { + if (_base.state.scopeDepth === 0) { + identifierRole = _index3.IdentifierRole.ObjectShorthandTopLevelDeclaration; + } else if (isBlockScope) { + identifierRole = _index3.IdentifierRole.ObjectShorthandBlockScopedDeclaration; + } else { + identifierRole = _index3.IdentifierRole.ObjectShorthandFunctionScopedDeclaration; + } + } else { + identifierRole = _index3.IdentifierRole.ObjectShorthand; + } + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = identifierRole; + _lval.parseMaybeDefault.call(void 0, isBlockScope, true); + } + function parseObjPropValue(isPattern, isBlockScope, objectContextId) { + if (_base.isTypeScriptEnabled) { + _typescript.tsStartParseObjPropValue.call(void 0); + } else if (_base.isFlowEnabled) { + _flow.flowStartParseObjPropValue.call(void 0); + } + const wasMethod = parseObjectMethod(isPattern, objectContextId); + if (!wasMethod) { + parseObjectProperty(isPattern, isBlockScope); + } + } + function parsePropertyName(objectContextId) { + if (_base.isFlowEnabled) { + _flow.flowParseVariance.call(void 0); + } + if (_index3.eat.call(void 0, _types3.TokenType.bracketL)) { + _base.state.tokens[_base.state.tokens.length - 1].contextId = objectContextId; + parseMaybeAssign(); + _util.expect.call(void 0, _types3.TokenType.bracketR); + _base.state.tokens[_base.state.tokens.length - 1].contextId = objectContextId; + } else { + if (_index3.match.call(void 0, _types3.TokenType.num) || _index3.match.call(void 0, _types3.TokenType.string) || _index3.match.call(void 0, _types3.TokenType.bigint) || _index3.match.call(void 0, _types3.TokenType.decimal)) { + parseExprAtom(); + } else { + parseMaybePrivateName(); + } + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _index3.IdentifierRole.ObjectKey; + _base.state.tokens[_base.state.tokens.length - 1].contextId = objectContextId; + } + } + exports2.parsePropertyName = parsePropertyName; + function parseMethod(functionStart, isConstructor) { + const funcContextId = _base.getNextContextId.call(void 0); + _base.state.scopeDepth++; + const startTokenIndex = _base.state.tokens.length; + const allowModifiers = isConstructor; + _statement.parseFunctionParams.call(void 0, allowModifiers, funcContextId); + parseFunctionBodyAndFinish(functionStart, funcContextId); + const endTokenIndex = _base.state.tokens.length; + _base.state.scopes.push(new (0, _state.Scope)(startTokenIndex, endTokenIndex, true)); + _base.state.scopeDepth--; + } + exports2.parseMethod = parseMethod; + function parseArrowExpression(startTokenIndex) { + parseFunctionBody(true); + const endTokenIndex = _base.state.tokens.length; + _base.state.scopes.push(new (0, _state.Scope)(startTokenIndex, endTokenIndex, true)); + _base.state.scopeDepth--; + } + exports2.parseArrowExpression = parseArrowExpression; + function parseFunctionBodyAndFinish(functionStart, funcContextId = 0) { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseFunctionBodyAndFinish.call(void 0, functionStart, funcContextId); + } else if (_base.isFlowEnabled) { + _flow.flowParseFunctionBodyAndFinish.call(void 0, funcContextId); + } else { + parseFunctionBody(false, funcContextId); + } + } + exports2.parseFunctionBodyAndFinish = parseFunctionBodyAndFinish; + function parseFunctionBody(allowExpression, funcContextId = 0) { + const isExpression = allowExpression && !_index3.match.call(void 0, _types3.TokenType.braceL); + if (isExpression) { + parseMaybeAssign(); + } else { + _statement.parseBlock.call(void 0, true, funcContextId); + } + } + exports2.parseFunctionBody = parseFunctionBody; + function parseExprList(close, allowEmpty = false) { + let first = true; + while (!_index3.eat.call(void 0, close) && !_base.state.error) { + if (first) { + first = false; + } else { + _util.expect.call(void 0, _types3.TokenType.comma); + if (_index3.eat.call(void 0, close)) break; + } + parseExprListItem(allowEmpty); + } + } + function parseExprListItem(allowEmpty) { + if (allowEmpty && _index3.match.call(void 0, _types3.TokenType.comma)) { + } else if (_index3.match.call(void 0, _types3.TokenType.ellipsis)) { + _lval.parseSpread.call(void 0); + parseParenItem(); + } else if (_index3.match.call(void 0, _types3.TokenType.question)) { + _index3.next.call(void 0); + } else { + parseMaybeAssign(false, true); + } + } + function parseIdentifier() { + _index3.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].type = _types3.TokenType.name; + } + exports2.parseIdentifier = parseIdentifier; + function parseAwait() { + parseMaybeUnary(); + } + function parseYield() { + _index3.next.call(void 0); + if (!_index3.match.call(void 0, _types3.TokenType.semi) && !_util.canInsertSemicolon.call(void 0)) { + _index3.eat.call(void 0, _types3.TokenType.star); + parseMaybeAssign(); + } + } + function parseModuleExpression() { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._module); + _util.expect.call(void 0, _types3.TokenType.braceL); + _statement.parseBlockBody.call(void 0, _types3.TokenType.braceR); + } + } +}); + +// node_modules/sucrase/dist/parser/plugins/flow.js +var require_flow = __commonJS({ + "node_modules/sucrase/dist/parser/plugins/flow.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _index = require_tokenizer(); + var _keywords = require_keywords(); + var _types = require_types(); + var _base = require_base(); + var _expression = require_expression(); + var _statement = require_statement(); + var _util = require_util(); + function isMaybeDefaultImport(lookahead) { + return (lookahead.type === _types.TokenType.name || !!(lookahead.type & _types.TokenType.IS_KEYWORD)) && lookahead.contextualKeyword !== _keywords.ContextualKeyword._from; + } + function flowParseTypeInitialiser(tok) { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _util.expect.call(void 0, tok || _types.TokenType.colon); + flowParseType(); + _index.popTypeContext.call(void 0, oldIsType); + } + function flowParsePredicate() { + _util.expect.call(void 0, _types.TokenType.modulo); + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._checks); + if (_index.eat.call(void 0, _types.TokenType.parenL)) { + _expression.parseExpression.call(void 0); + _util.expect.call(void 0, _types.TokenType.parenR); + } + } + function flowParseTypeAndPredicateInitialiser() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _util.expect.call(void 0, _types.TokenType.colon); + if (_index.match.call(void 0, _types.TokenType.modulo)) { + flowParsePredicate(); + } else { + flowParseType(); + if (_index.match.call(void 0, _types.TokenType.modulo)) { + flowParsePredicate(); + } + } + _index.popTypeContext.call(void 0, oldIsType); + } + function flowParseDeclareClass() { + _index.next.call(void 0); + flowParseInterfaceish( + /* isClass */ + true + ); + } + function flowParseDeclareFunction() { + _index.next.call(void 0); + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterDeclaration(); + } + _util.expect.call(void 0, _types.TokenType.parenL); + flowParseFunctionTypeParams(); + _util.expect.call(void 0, _types.TokenType.parenR); + flowParseTypeAndPredicateInitialiser(); + _util.semicolon.call(void 0); + } + function flowParseDeclare() { + if (_index.match.call(void 0, _types.TokenType._class)) { + flowParseDeclareClass(); + } else if (_index.match.call(void 0, _types.TokenType._function)) { + flowParseDeclareFunction(); + } else if (_index.match.call(void 0, _types.TokenType._var)) { + flowParseDeclareVariable(); + } else if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._module)) { + if (_index.eat.call(void 0, _types.TokenType.dot)) { + flowParseDeclareModuleExports(); + } else { + flowParseDeclareModule(); + } + } else if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._type)) { + flowParseDeclareTypeAlias(); + } else if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._opaque)) { + flowParseDeclareOpaqueType(); + } else if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._interface)) { + flowParseDeclareInterface(); + } else if (_index.match.call(void 0, _types.TokenType._export)) { + flowParseDeclareExportDeclaration(); + } else { + _util.unexpected.call(void 0); + } + } + function flowParseDeclareVariable() { + _index.next.call(void 0); + flowParseTypeAnnotatableIdentifier(); + _util.semicolon.call(void 0); + } + function flowParseDeclareModule() { + if (_index.match.call(void 0, _types.TokenType.string)) { + _expression.parseExprAtom.call(void 0); + } else { + _expression.parseIdentifier.call(void 0); + } + _util.expect.call(void 0, _types.TokenType.braceL); + while (!_index.match.call(void 0, _types.TokenType.braceR) && !_base.state.error) { + if (_index.match.call(void 0, _types.TokenType._import)) { + _index.next.call(void 0); + _statement.parseImport.call(void 0); + } else { + _util.unexpected.call(void 0); + } + } + _util.expect.call(void 0, _types.TokenType.braceR); + } + function flowParseDeclareExportDeclaration() { + _util.expect.call(void 0, _types.TokenType._export); + if (_index.eat.call(void 0, _types.TokenType._default)) { + if (_index.match.call(void 0, _types.TokenType._function) || _index.match.call(void 0, _types.TokenType._class)) { + flowParseDeclare(); + } else { + flowParseType(); + _util.semicolon.call(void 0); + } + } else if (_index.match.call(void 0, _types.TokenType._var) || // declare export var ... + _index.match.call(void 0, _types.TokenType._function) || // declare export function ... + _index.match.call(void 0, _types.TokenType._class) || // declare export class ... + _util.isContextual.call(void 0, _keywords.ContextualKeyword._opaque)) { + flowParseDeclare(); + } else if (_index.match.call(void 0, _types.TokenType.star) || // declare export * from '' + _index.match.call(void 0, _types.TokenType.braceL) || // declare export {} ... + _util.isContextual.call(void 0, _keywords.ContextualKeyword._interface) || // declare export interface ... + _util.isContextual.call(void 0, _keywords.ContextualKeyword._type) || // declare export type ... + _util.isContextual.call(void 0, _keywords.ContextualKeyword._opaque)) { + _statement.parseExport.call(void 0); + } else { + _util.unexpected.call(void 0); + } + } + function flowParseDeclareModuleExports() { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._exports); + flowParseTypeAnnotation(); + _util.semicolon.call(void 0); + } + function flowParseDeclareTypeAlias() { + _index.next.call(void 0); + flowParseTypeAlias(); + } + function flowParseDeclareOpaqueType() { + _index.next.call(void 0); + flowParseOpaqueType(true); + } + function flowParseDeclareInterface() { + _index.next.call(void 0); + flowParseInterfaceish(); + } + function flowParseInterfaceish(isClass = false) { + flowParseRestrictedIdentifier(); + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterDeclaration(); + } + if (_index.eat.call(void 0, _types.TokenType._extends)) { + do { + flowParseInterfaceExtends(); + } while (!isClass && _index.eat.call(void 0, _types.TokenType.comma)); + } + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._mixins)) { + _index.next.call(void 0); + do { + flowParseInterfaceExtends(); + } while (_index.eat.call(void 0, _types.TokenType.comma)); + } + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._implements)) { + _index.next.call(void 0); + do { + flowParseInterfaceExtends(); + } while (_index.eat.call(void 0, _types.TokenType.comma)); + } + flowParseObjectType(isClass, false, isClass); + } + function flowParseInterfaceExtends() { + flowParseQualifiedTypeIdentifier(false); + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterInstantiation(); + } + } + function flowParseInterface() { + flowParseInterfaceish(); + } + function flowParseRestrictedIdentifier() { + _expression.parseIdentifier.call(void 0); + } + function flowParseTypeAlias() { + flowParseRestrictedIdentifier(); + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterDeclaration(); + } + flowParseTypeInitialiser(_types.TokenType.eq); + _util.semicolon.call(void 0); + } + function flowParseOpaqueType(declare) { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._type); + flowParseRestrictedIdentifier(); + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterDeclaration(); + } + if (_index.match.call(void 0, _types.TokenType.colon)) { + flowParseTypeInitialiser(_types.TokenType.colon); + } + if (!declare) { + flowParseTypeInitialiser(_types.TokenType.eq); + } + _util.semicolon.call(void 0); + } + function flowParseTypeParameter() { + flowParseVariance(); + flowParseTypeAnnotatableIdentifier(); + if (_index.eat.call(void 0, _types.TokenType.eq)) { + flowParseType(); + } + } + function flowParseTypeParameterDeclaration() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + if (_index.match.call(void 0, _types.TokenType.lessThan) || _index.match.call(void 0, _types.TokenType.typeParameterStart)) { + _index.next.call(void 0); + } else { + _util.unexpected.call(void 0); + } + do { + flowParseTypeParameter(); + if (!_index.match.call(void 0, _types.TokenType.greaterThan)) { + _util.expect.call(void 0, _types.TokenType.comma); + } + } while (!_index.match.call(void 0, _types.TokenType.greaterThan) && !_base.state.error); + _util.expect.call(void 0, _types.TokenType.greaterThan); + _index.popTypeContext.call(void 0, oldIsType); + } + exports2.flowParseTypeParameterDeclaration = flowParseTypeParameterDeclaration; + function flowParseTypeParameterInstantiation() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _util.expect.call(void 0, _types.TokenType.lessThan); + while (!_index.match.call(void 0, _types.TokenType.greaterThan) && !_base.state.error) { + flowParseType(); + if (!_index.match.call(void 0, _types.TokenType.greaterThan)) { + _util.expect.call(void 0, _types.TokenType.comma); + } + } + _util.expect.call(void 0, _types.TokenType.greaterThan); + _index.popTypeContext.call(void 0, oldIsType); + } + function flowParseInterfaceType() { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._interface); + if (_index.eat.call(void 0, _types.TokenType._extends)) { + do { + flowParseInterfaceExtends(); + } while (_index.eat.call(void 0, _types.TokenType.comma)); + } + flowParseObjectType(false, false, false); + } + function flowParseObjectPropertyKey() { + if (_index.match.call(void 0, _types.TokenType.num) || _index.match.call(void 0, _types.TokenType.string)) { + _expression.parseExprAtom.call(void 0); + } else { + _expression.parseIdentifier.call(void 0); + } + } + function flowParseObjectTypeIndexer() { + if (_index.lookaheadType.call(void 0) === _types.TokenType.colon) { + flowParseObjectPropertyKey(); + flowParseTypeInitialiser(); + } else { + flowParseType(); + } + _util.expect.call(void 0, _types.TokenType.bracketR); + flowParseTypeInitialiser(); + } + function flowParseObjectTypeInternalSlot() { + flowParseObjectPropertyKey(); + _util.expect.call(void 0, _types.TokenType.bracketR); + _util.expect.call(void 0, _types.TokenType.bracketR); + if (_index.match.call(void 0, _types.TokenType.lessThan) || _index.match.call(void 0, _types.TokenType.parenL)) { + flowParseObjectTypeMethodish(); + } else { + _index.eat.call(void 0, _types.TokenType.question); + flowParseTypeInitialiser(); + } + } + function flowParseObjectTypeMethodish() { + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterDeclaration(); + } + _util.expect.call(void 0, _types.TokenType.parenL); + while (!_index.match.call(void 0, _types.TokenType.parenR) && !_index.match.call(void 0, _types.TokenType.ellipsis) && !_base.state.error) { + flowParseFunctionTypeParam(); + if (!_index.match.call(void 0, _types.TokenType.parenR)) { + _util.expect.call(void 0, _types.TokenType.comma); + } + } + if (_index.eat.call(void 0, _types.TokenType.ellipsis)) { + flowParseFunctionTypeParam(); + } + _util.expect.call(void 0, _types.TokenType.parenR); + flowParseTypeInitialiser(); + } + function flowParseObjectTypeCallProperty() { + flowParseObjectTypeMethodish(); + } + function flowParseObjectType(allowStatic, allowExact, allowProto) { + let endDelim; + if (allowExact && _index.match.call(void 0, _types.TokenType.braceBarL)) { + _util.expect.call(void 0, _types.TokenType.braceBarL); + endDelim = _types.TokenType.braceBarR; + } else { + _util.expect.call(void 0, _types.TokenType.braceL); + endDelim = _types.TokenType.braceR; + } + while (!_index.match.call(void 0, endDelim) && !_base.state.error) { + if (allowProto && _util.isContextual.call(void 0, _keywords.ContextualKeyword._proto)) { + const lookahead = _index.lookaheadType.call(void 0); + if (lookahead !== _types.TokenType.colon && lookahead !== _types.TokenType.question) { + _index.next.call(void 0); + allowStatic = false; + } + } + if (allowStatic && _util.isContextual.call(void 0, _keywords.ContextualKeyword._static)) { + const lookahead = _index.lookaheadType.call(void 0); + if (lookahead !== _types.TokenType.colon && lookahead !== _types.TokenType.question) { + _index.next.call(void 0); + } + } + flowParseVariance(); + if (_index.eat.call(void 0, _types.TokenType.bracketL)) { + if (_index.eat.call(void 0, _types.TokenType.bracketL)) { + flowParseObjectTypeInternalSlot(); + } else { + flowParseObjectTypeIndexer(); + } + } else if (_index.match.call(void 0, _types.TokenType.parenL) || _index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseObjectTypeCallProperty(); + } else { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._get) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._set)) { + const lookahead = _index.lookaheadType.call(void 0); + if (lookahead === _types.TokenType.name || lookahead === _types.TokenType.string || lookahead === _types.TokenType.num) { + _index.next.call(void 0); + } + } + flowParseObjectTypeProperty(); + } + flowObjectTypeSemicolon(); + } + _util.expect.call(void 0, endDelim); + } + function flowParseObjectTypeProperty() { + if (_index.match.call(void 0, _types.TokenType.ellipsis)) { + _util.expect.call(void 0, _types.TokenType.ellipsis); + if (!_index.eat.call(void 0, _types.TokenType.comma)) { + _index.eat.call(void 0, _types.TokenType.semi); + } + if (_index.match.call(void 0, _types.TokenType.braceR)) { + return; + } + flowParseType(); + } else { + flowParseObjectPropertyKey(); + if (_index.match.call(void 0, _types.TokenType.lessThan) || _index.match.call(void 0, _types.TokenType.parenL)) { + flowParseObjectTypeMethodish(); + } else { + _index.eat.call(void 0, _types.TokenType.question); + flowParseTypeInitialiser(); + } + } + } + function flowObjectTypeSemicolon() { + if (!_index.eat.call(void 0, _types.TokenType.semi) && !_index.eat.call(void 0, _types.TokenType.comma) && !_index.match.call(void 0, _types.TokenType.braceR) && !_index.match.call(void 0, _types.TokenType.braceBarR)) { + _util.unexpected.call(void 0); + } + } + function flowParseQualifiedTypeIdentifier(initialIdAlreadyParsed) { + if (!initialIdAlreadyParsed) { + _expression.parseIdentifier.call(void 0); + } + while (_index.eat.call(void 0, _types.TokenType.dot)) { + _expression.parseIdentifier.call(void 0); + } + } + function flowParseGenericType() { + flowParseQualifiedTypeIdentifier(true); + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterInstantiation(); + } + } + function flowParseTypeofType() { + _util.expect.call(void 0, _types.TokenType._typeof); + flowParsePrimaryType(); + } + function flowParseTupleType() { + _util.expect.call(void 0, _types.TokenType.bracketL); + while (_base.state.pos < _base.input.length && !_index.match.call(void 0, _types.TokenType.bracketR)) { + flowParseType(); + if (_index.match.call(void 0, _types.TokenType.bracketR)) { + break; + } + _util.expect.call(void 0, _types.TokenType.comma); + } + _util.expect.call(void 0, _types.TokenType.bracketR); + } + function flowParseFunctionTypeParam() { + const lookahead = _index.lookaheadType.call(void 0); + if (lookahead === _types.TokenType.colon || lookahead === _types.TokenType.question) { + _expression.parseIdentifier.call(void 0); + _index.eat.call(void 0, _types.TokenType.question); + flowParseTypeInitialiser(); + } else { + flowParseType(); + } + } + function flowParseFunctionTypeParams() { + while (!_index.match.call(void 0, _types.TokenType.parenR) && !_index.match.call(void 0, _types.TokenType.ellipsis) && !_base.state.error) { + flowParseFunctionTypeParam(); + if (!_index.match.call(void 0, _types.TokenType.parenR)) { + _util.expect.call(void 0, _types.TokenType.comma); + } + } + if (_index.eat.call(void 0, _types.TokenType.ellipsis)) { + flowParseFunctionTypeParam(); + } + } + function flowParsePrimaryType() { + let isGroupedType = false; + const oldNoAnonFunctionType = _base.state.noAnonFunctionType; + switch (_base.state.type) { + case _types.TokenType.name: { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._interface)) { + flowParseInterfaceType(); + return; + } + _expression.parseIdentifier.call(void 0); + flowParseGenericType(); + return; + } + case _types.TokenType.braceL: + flowParseObjectType(false, false, false); + return; + case _types.TokenType.braceBarL: + flowParseObjectType(false, true, false); + return; + case _types.TokenType.bracketL: + flowParseTupleType(); + return; + case _types.TokenType.lessThan: + flowParseTypeParameterDeclaration(); + _util.expect.call(void 0, _types.TokenType.parenL); + flowParseFunctionTypeParams(); + _util.expect.call(void 0, _types.TokenType.parenR); + _util.expect.call(void 0, _types.TokenType.arrow); + flowParseType(); + return; + case _types.TokenType.parenL: + _index.next.call(void 0); + if (!_index.match.call(void 0, _types.TokenType.parenR) && !_index.match.call(void 0, _types.TokenType.ellipsis)) { + if (_index.match.call(void 0, _types.TokenType.name)) { + const token2 = _index.lookaheadType.call(void 0); + isGroupedType = token2 !== _types.TokenType.question && token2 !== _types.TokenType.colon; + } else { + isGroupedType = true; + } + } + if (isGroupedType) { + _base.state.noAnonFunctionType = false; + flowParseType(); + _base.state.noAnonFunctionType = oldNoAnonFunctionType; + if (_base.state.noAnonFunctionType || !(_index.match.call(void 0, _types.TokenType.comma) || _index.match.call(void 0, _types.TokenType.parenR) && _index.lookaheadType.call(void 0) === _types.TokenType.arrow)) { + _util.expect.call(void 0, _types.TokenType.parenR); + return; + } else { + _index.eat.call(void 0, _types.TokenType.comma); + } + } + flowParseFunctionTypeParams(); + _util.expect.call(void 0, _types.TokenType.parenR); + _util.expect.call(void 0, _types.TokenType.arrow); + flowParseType(); + return; + case _types.TokenType.minus: + _index.next.call(void 0); + _expression.parseLiteral.call(void 0); + return; + case _types.TokenType.string: + case _types.TokenType.num: + case _types.TokenType._true: + case _types.TokenType._false: + case _types.TokenType._null: + case _types.TokenType._this: + case _types.TokenType._void: + case _types.TokenType.star: + _index.next.call(void 0); + return; + default: + if (_base.state.type === _types.TokenType._typeof) { + flowParseTypeofType(); + return; + } else if (_base.state.type & _types.TokenType.IS_KEYWORD) { + _index.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType.name; + return; + } + } + _util.unexpected.call(void 0); + } + function flowParsePostfixType() { + flowParsePrimaryType(); + while (!_util.canInsertSemicolon.call(void 0) && (_index.match.call(void 0, _types.TokenType.bracketL) || _index.match.call(void 0, _types.TokenType.questionDot))) { + _index.eat.call(void 0, _types.TokenType.questionDot); + _util.expect.call(void 0, _types.TokenType.bracketL); + if (_index.eat.call(void 0, _types.TokenType.bracketR)) { + } else { + flowParseType(); + _util.expect.call(void 0, _types.TokenType.bracketR); + } + } + } + function flowParsePrefixType() { + if (_index.eat.call(void 0, _types.TokenType.question)) { + flowParsePrefixType(); + } else { + flowParsePostfixType(); + } + } + function flowParseAnonFunctionWithoutParens() { + flowParsePrefixType(); + if (!_base.state.noAnonFunctionType && _index.eat.call(void 0, _types.TokenType.arrow)) { + flowParseType(); + } + } + function flowParseIntersectionType() { + _index.eat.call(void 0, _types.TokenType.bitwiseAND); + flowParseAnonFunctionWithoutParens(); + while (_index.eat.call(void 0, _types.TokenType.bitwiseAND)) { + flowParseAnonFunctionWithoutParens(); + } + } + function flowParseUnionType() { + _index.eat.call(void 0, _types.TokenType.bitwiseOR); + flowParseIntersectionType(); + while (_index.eat.call(void 0, _types.TokenType.bitwiseOR)) { + flowParseIntersectionType(); + } + } + function flowParseType() { + flowParseUnionType(); + } + function flowParseTypeAnnotation() { + flowParseTypeInitialiser(); + } + exports2.flowParseTypeAnnotation = flowParseTypeAnnotation; + function flowParseTypeAnnotatableIdentifier() { + _expression.parseIdentifier.call(void 0); + if (_index.match.call(void 0, _types.TokenType.colon)) { + flowParseTypeAnnotation(); + } + } + function flowParseVariance() { + if (_index.match.call(void 0, _types.TokenType.plus) || _index.match.call(void 0, _types.TokenType.minus)) { + _index.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].isType = true; + } + } + exports2.flowParseVariance = flowParseVariance; + function flowParseFunctionBodyAndFinish(funcContextId) { + if (_index.match.call(void 0, _types.TokenType.colon)) { + flowParseTypeAndPredicateInitialiser(); + } + _expression.parseFunctionBody.call(void 0, false, funcContextId); + } + exports2.flowParseFunctionBodyAndFinish = flowParseFunctionBodyAndFinish; + function flowParseSubscript(startTokenIndex, noCalls, stopState) { + if (_index.match.call(void 0, _types.TokenType.questionDot) && _index.lookaheadType.call(void 0) === _types.TokenType.lessThan) { + if (noCalls) { + stopState.stop = true; + return; + } + _index.next.call(void 0); + flowParseTypeParameterInstantiation(); + _util.expect.call(void 0, _types.TokenType.parenL); + _expression.parseCallExpressionArguments.call(void 0); + return; + } else if (!noCalls && _index.match.call(void 0, _types.TokenType.lessThan)) { + const snapshot = _base.state.snapshot(); + flowParseTypeParameterInstantiation(); + _util.expect.call(void 0, _types.TokenType.parenL); + _expression.parseCallExpressionArguments.call(void 0); + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + } else { + return; + } + } + _expression.baseParseSubscript.call(void 0, startTokenIndex, noCalls, stopState); + } + exports2.flowParseSubscript = flowParseSubscript; + function flowStartParseNewArguments() { + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + const snapshot = _base.state.snapshot(); + flowParseTypeParameterInstantiation(); + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + } + } + } + exports2.flowStartParseNewArguments = flowStartParseNewArguments; + function flowTryParseStatement() { + if (_index.match.call(void 0, _types.TokenType.name) && _base.state.contextualKeyword === _keywords.ContextualKeyword._interface) { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _index.next.call(void 0); + flowParseInterface(); + _index.popTypeContext.call(void 0, oldIsType); + return true; + } else if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._enum)) { + flowParseEnumDeclaration(); + return true; + } + return false; + } + exports2.flowTryParseStatement = flowTryParseStatement; + function flowTryParseExportDefaultExpression() { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._enum)) { + flowParseEnumDeclaration(); + return true; + } + return false; + } + exports2.flowTryParseExportDefaultExpression = flowTryParseExportDefaultExpression; + function flowParseIdentifierStatement(contextualKeyword) { + if (contextualKeyword === _keywords.ContextualKeyword._declare) { + if (_index.match.call(void 0, _types.TokenType._class) || _index.match.call(void 0, _types.TokenType.name) || _index.match.call(void 0, _types.TokenType._function) || _index.match.call(void 0, _types.TokenType._var) || _index.match.call(void 0, _types.TokenType._export)) { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + flowParseDeclare(); + _index.popTypeContext.call(void 0, oldIsType); + } + } else if (_index.match.call(void 0, _types.TokenType.name)) { + if (contextualKeyword === _keywords.ContextualKeyword._interface) { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + flowParseInterface(); + _index.popTypeContext.call(void 0, oldIsType); + } else if (contextualKeyword === _keywords.ContextualKeyword._type) { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + flowParseTypeAlias(); + _index.popTypeContext.call(void 0, oldIsType); + } else if (contextualKeyword === _keywords.ContextualKeyword._opaque) { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + flowParseOpaqueType(false); + _index.popTypeContext.call(void 0, oldIsType); + } + } + _util.semicolon.call(void 0); + } + exports2.flowParseIdentifierStatement = flowParseIdentifierStatement; + function flowShouldParseExportDeclaration() { + return _util.isContextual.call(void 0, _keywords.ContextualKeyword._type) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._interface) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._opaque) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._enum); + } + exports2.flowShouldParseExportDeclaration = flowShouldParseExportDeclaration; + function flowShouldDisallowExportDefaultSpecifier() { + return _index.match.call(void 0, _types.TokenType.name) && (_base.state.contextualKeyword === _keywords.ContextualKeyword._type || _base.state.contextualKeyword === _keywords.ContextualKeyword._interface || _base.state.contextualKeyword === _keywords.ContextualKeyword._opaque || _base.state.contextualKeyword === _keywords.ContextualKeyword._enum); + } + exports2.flowShouldDisallowExportDefaultSpecifier = flowShouldDisallowExportDefaultSpecifier; + function flowParseExportDeclaration() { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._type)) { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + _index.next.call(void 0); + if (_index.match.call(void 0, _types.TokenType.braceL)) { + _statement.parseExportSpecifiers.call(void 0); + _statement.parseExportFrom.call(void 0); + } else { + flowParseTypeAlias(); + } + _index.popTypeContext.call(void 0, oldIsType); + } else if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._opaque)) { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + _index.next.call(void 0); + flowParseOpaqueType(false); + _index.popTypeContext.call(void 0, oldIsType); + } else if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._interface)) { + const oldIsType = _index.pushTypeContext.call(void 0, 1); + _index.next.call(void 0); + flowParseInterface(); + _index.popTypeContext.call(void 0, oldIsType); + } else { + _statement.parseStatement.call(void 0, true); + } + } + exports2.flowParseExportDeclaration = flowParseExportDeclaration; + function flowShouldParseExportStar() { + return _index.match.call(void 0, _types.TokenType.star) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._type) && _index.lookaheadType.call(void 0) === _types.TokenType.star; + } + exports2.flowShouldParseExportStar = flowShouldParseExportStar; + function flowParseExportStar() { + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._type)) { + const oldIsType = _index.pushTypeContext.call(void 0, 2); + _statement.baseParseExportStar.call(void 0); + _index.popTypeContext.call(void 0, oldIsType); + } else { + _statement.baseParseExportStar.call(void 0); + } + } + exports2.flowParseExportStar = flowParseExportStar; + function flowAfterParseClassSuper(hasSuper) { + if (hasSuper && _index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterInstantiation(); + } + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._implements)) { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _index.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._implements; + do { + flowParseRestrictedIdentifier(); + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterInstantiation(); + } + } while (_index.eat.call(void 0, _types.TokenType.comma)); + _index.popTypeContext.call(void 0, oldIsType); + } + } + exports2.flowAfterParseClassSuper = flowAfterParseClassSuper; + function flowStartParseObjPropValue() { + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + flowParseTypeParameterDeclaration(); + if (!_index.match.call(void 0, _types.TokenType.parenL)) _util.unexpected.call(void 0); + } + } + exports2.flowStartParseObjPropValue = flowStartParseObjPropValue; + function flowParseAssignableListItemTypes() { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + _index.eat.call(void 0, _types.TokenType.question); + if (_index.match.call(void 0, _types.TokenType.colon)) { + flowParseTypeAnnotation(); + } + _index.popTypeContext.call(void 0, oldIsType); + } + exports2.flowParseAssignableListItemTypes = flowParseAssignableListItemTypes; + function flowStartParseImportSpecifiers() { + if (_index.match.call(void 0, _types.TokenType._typeof) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._type)) { + const lh = _index.lookaheadTypeAndKeyword.call(void 0); + if (isMaybeDefaultImport(lh) || lh.type === _types.TokenType.braceL || lh.type === _types.TokenType.star) { + _index.next.call(void 0); + } + } + } + exports2.flowStartParseImportSpecifiers = flowStartParseImportSpecifiers; + function flowParseImportSpecifier() { + const isTypeKeyword = _base.state.contextualKeyword === _keywords.ContextualKeyword._type || _base.state.type === _types.TokenType._typeof; + if (isTypeKeyword) { + _index.next.call(void 0); + } else { + _expression.parseIdentifier.call(void 0); + } + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._as) && !_util.isLookaheadContextual.call(void 0, _keywords.ContextualKeyword._as)) { + _expression.parseIdentifier.call(void 0); + if (isTypeKeyword && !_index.match.call(void 0, _types.TokenType.name) && !(_base.state.type & _types.TokenType.IS_KEYWORD)) { + } else { + _expression.parseIdentifier.call(void 0); + } + } else { + if (isTypeKeyword && (_index.match.call(void 0, _types.TokenType.name) || !!(_base.state.type & _types.TokenType.IS_KEYWORD))) { + _expression.parseIdentifier.call(void 0); + } + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._as)) { + _expression.parseIdentifier.call(void 0); + } + } + } + exports2.flowParseImportSpecifier = flowParseImportSpecifier; + function flowStartParseFunctionParams() { + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + flowParseTypeParameterDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + } + } + exports2.flowStartParseFunctionParams = flowStartParseFunctionParams; + function flowAfterParseVarHead() { + if (_index.match.call(void 0, _types.TokenType.colon)) { + flowParseTypeAnnotation(); + } + } + exports2.flowAfterParseVarHead = flowAfterParseVarHead; + function flowStartParseAsyncArrowFromCallExpression() { + if (_index.match.call(void 0, _types.TokenType.colon)) { + const oldNoAnonFunctionType = _base.state.noAnonFunctionType; + _base.state.noAnonFunctionType = true; + flowParseTypeAnnotation(); + _base.state.noAnonFunctionType = oldNoAnonFunctionType; + } + } + exports2.flowStartParseAsyncArrowFromCallExpression = flowStartParseAsyncArrowFromCallExpression; + function flowParseMaybeAssign(noIn, isWithinParens) { + if (_index.match.call(void 0, _types.TokenType.lessThan)) { + const snapshot = _base.state.snapshot(); + let wasArrow = _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + _base.state.type = _types.TokenType.typeParameterStart; + } else { + return wasArrow; + } + const oldIsType = _index.pushTypeContext.call(void 0, 0); + flowParseTypeParameterDeclaration(); + _index.popTypeContext.call(void 0, oldIsType); + wasArrow = _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + if (wasArrow) { + return true; + } + _util.unexpected.call(void 0); + } + return _expression.baseParseMaybeAssign.call(void 0, noIn, isWithinParens); + } + exports2.flowParseMaybeAssign = flowParseMaybeAssign; + function flowParseArrow() { + if (_index.match.call(void 0, _types.TokenType.colon)) { + const oldIsType = _index.pushTypeContext.call(void 0, 0); + const snapshot = _base.state.snapshot(); + const oldNoAnonFunctionType = _base.state.noAnonFunctionType; + _base.state.noAnonFunctionType = true; + flowParseTypeAndPredicateInitialiser(); + _base.state.noAnonFunctionType = oldNoAnonFunctionType; + if (_util.canInsertSemicolon.call(void 0)) _util.unexpected.call(void 0); + if (!_index.match.call(void 0, _types.TokenType.arrow)) _util.unexpected.call(void 0); + if (_base.state.error) { + _base.state.restoreFromSnapshot(snapshot); + } + _index.popTypeContext.call(void 0, oldIsType); + } + return _index.eat.call(void 0, _types.TokenType.arrow); + } + exports2.flowParseArrow = flowParseArrow; + function flowParseSubscripts(startTokenIndex, noCalls = false) { + if (_base.state.tokens[_base.state.tokens.length - 1].contextualKeyword === _keywords.ContextualKeyword._async && _index.match.call(void 0, _types.TokenType.lessThan)) { + const snapshot = _base.state.snapshot(); + const wasArrow = parseAsyncArrowWithTypeParameters(); + if (wasArrow && !_base.state.error) { + return; + } + _base.state.restoreFromSnapshot(snapshot); + } + _expression.baseParseSubscripts.call(void 0, startTokenIndex, noCalls); + } + exports2.flowParseSubscripts = flowParseSubscripts; + function parseAsyncArrowWithTypeParameters() { + _base.state.scopeDepth++; + const startTokenIndex = _base.state.tokens.length; + _statement.parseFunctionParams.call(void 0); + if (!_expression.parseArrow.call(void 0)) { + return false; + } + _expression.parseArrowExpression.call(void 0, startTokenIndex); + return true; + } + function flowParseEnumDeclaration() { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._enum); + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._enum; + _expression.parseIdentifier.call(void 0); + flowParseEnumBody(); + } + function flowParseEnumBody() { + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._of)) { + _index.next.call(void 0); + } + _util.expect.call(void 0, _types.TokenType.braceL); + flowParseEnumMembers(); + _util.expect.call(void 0, _types.TokenType.braceR); + } + function flowParseEnumMembers() { + while (!_index.match.call(void 0, _types.TokenType.braceR) && !_base.state.error) { + if (_index.eat.call(void 0, _types.TokenType.ellipsis)) { + break; + } + flowParseEnumMember(); + if (!_index.match.call(void 0, _types.TokenType.braceR)) { + _util.expect.call(void 0, _types.TokenType.comma); + } + } + } + function flowParseEnumMember() { + _expression.parseIdentifier.call(void 0); + if (_index.eat.call(void 0, _types.TokenType.eq)) { + _index.next.call(void 0); + } + } + } +}); + +// node_modules/sucrase/dist/parser/traverser/statement.js +var require_statement = __commonJS({ + "node_modules/sucrase/dist/parser/traverser/statement.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _index = require_parser(); + var _flow = require_flow(); + var _typescript = require_typescript(); + var _tokenizer = require_tokenizer(); + var _keywords = require_keywords(); + var _state = require_state(); + var _types = require_types(); + var _charcodes = require_charcodes(); + var _base = require_base(); + var _expression = require_expression(); + var _lval = require_lval(); + var _util = require_util(); + function parseTopLevel() { + parseBlockBody(_types.TokenType.eof); + _base.state.scopes.push(new (0, _state.Scope)(0, _base.state.tokens.length, true)); + if (_base.state.scopeDepth !== 0) { + throw new Error(`Invalid scope depth at end of file: ${_base.state.scopeDepth}`); + } + return new (0, _index.File)(_base.state.tokens, _base.state.scopes); + } + exports2.parseTopLevel = parseTopLevel; + function parseStatement(declaration2) { + if (_base.isFlowEnabled) { + if (_flow.flowTryParseStatement.call(void 0)) { + return; + } + } + if (_tokenizer.match.call(void 0, _types.TokenType.at)) { + parseDecorators(); + } + parseStatementContent(declaration2); + } + exports2.parseStatement = parseStatement; + function parseStatementContent(declaration2) { + if (_base.isTypeScriptEnabled) { + if (_typescript.tsTryParseStatementContent.call(void 0)) { + return; + } + } + const starttype = _base.state.type; + switch (starttype) { + case _types.TokenType._break: + case _types.TokenType._continue: + parseBreakContinueStatement(); + return; + case _types.TokenType._debugger: + parseDebuggerStatement(); + return; + case _types.TokenType._do: + parseDoStatement(); + return; + case _types.TokenType._for: + parseForStatement(); + return; + case _types.TokenType._function: + if (_tokenizer.lookaheadType.call(void 0) === _types.TokenType.dot) break; + if (!declaration2) _util.unexpected.call(void 0); + parseFunctionStatement(); + return; + case _types.TokenType._class: + if (!declaration2) _util.unexpected.call(void 0); + parseClass(true); + return; + case _types.TokenType._if: + parseIfStatement(); + return; + case _types.TokenType._return: + parseReturnStatement(); + return; + case _types.TokenType._switch: + parseSwitchStatement(); + return; + case _types.TokenType._throw: + parseThrowStatement(); + return; + case _types.TokenType._try: + parseTryStatement(); + return; + case _types.TokenType._let: + case _types.TokenType._const: + if (!declaration2) _util.unexpected.call(void 0); + // NOTE: falls through to _var + case _types.TokenType._var: + parseVarStatement(starttype !== _types.TokenType._var); + return; + case _types.TokenType._while: + parseWhileStatement(); + return; + case _types.TokenType.braceL: + parseBlock(); + return; + case _types.TokenType.semi: + parseEmptyStatement(); + return; + case _types.TokenType._export: + case _types.TokenType._import: { + const nextType = _tokenizer.lookaheadType.call(void 0); + if (nextType === _types.TokenType.parenL || nextType === _types.TokenType.dot) { + break; + } + _tokenizer.next.call(void 0); + if (starttype === _types.TokenType._import) { + parseImport(); + } else { + parseExport(); + } + return; + } + case _types.TokenType.name: + if (_base.state.contextualKeyword === _keywords.ContextualKeyword._async) { + const functionStart = _base.state.start; + const snapshot = _base.state.snapshot(); + _tokenizer.next.call(void 0); + if (_tokenizer.match.call(void 0, _types.TokenType._function) && !_util.canInsertSemicolon.call(void 0)) { + _util.expect.call(void 0, _types.TokenType._function); + parseFunction(functionStart, true); + return; + } else { + _base.state.restoreFromSnapshot(snapshot); + } + } else if (_base.state.contextualKeyword === _keywords.ContextualKeyword._using && !_util.hasFollowingLineBreak.call(void 0) && // Statements like `using[0]` and `using in foo` aren't actual using + // declarations. + _tokenizer.lookaheadType.call(void 0) === _types.TokenType.name) { + parseVarStatement(true); + return; + } else if (startsAwaitUsing()) { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._await); + parseVarStatement(true); + return; + } + default: + break; + } + const initialTokensLength = _base.state.tokens.length; + _expression.parseExpression.call(void 0); + let simpleName = null; + if (_base.state.tokens.length === initialTokensLength + 1) { + const token2 = _base.state.tokens[_base.state.tokens.length - 1]; + if (token2.type === _types.TokenType.name) { + simpleName = token2.contextualKeyword; + } + } + if (simpleName == null) { + _util.semicolon.call(void 0); + return; + } + if (_tokenizer.eat.call(void 0, _types.TokenType.colon)) { + parseLabeledStatement(); + } else { + parseIdentifierStatement(simpleName); + } + } + function startsAwaitUsing() { + if (!_util.isContextual.call(void 0, _keywords.ContextualKeyword._await)) { + return false; + } + const snapshot = _base.state.snapshot(); + _tokenizer.next.call(void 0); + if (!_util.isContextual.call(void 0, _keywords.ContextualKeyword._using) || _util.hasPrecedingLineBreak.call(void 0)) { + _base.state.restoreFromSnapshot(snapshot); + return false; + } + _tokenizer.next.call(void 0); + if (!_tokenizer.match.call(void 0, _types.TokenType.name) || _util.hasPrecedingLineBreak.call(void 0)) { + _base.state.restoreFromSnapshot(snapshot); + return false; + } + _base.state.restoreFromSnapshot(snapshot); + return true; + } + function parseDecorators() { + while (_tokenizer.match.call(void 0, _types.TokenType.at)) { + parseDecorator(); + } + } + exports2.parseDecorators = parseDecorators; + function parseDecorator() { + _tokenizer.next.call(void 0); + if (_tokenizer.eat.call(void 0, _types.TokenType.parenL)) { + _expression.parseExpression.call(void 0); + _util.expect.call(void 0, _types.TokenType.parenR); + } else { + _expression.parseIdentifier.call(void 0); + while (_tokenizer.eat.call(void 0, _types.TokenType.dot)) { + _expression.parseIdentifier.call(void 0); + } + parseMaybeDecoratorArguments(); + } + } + function parseMaybeDecoratorArguments() { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseMaybeDecoratorArguments.call(void 0); + } else { + baseParseMaybeDecoratorArguments(); + } + } + function baseParseMaybeDecoratorArguments() { + if (_tokenizer.eat.call(void 0, _types.TokenType.parenL)) { + _expression.parseCallExpressionArguments.call(void 0); + } + } + exports2.baseParseMaybeDecoratorArguments = baseParseMaybeDecoratorArguments; + function parseBreakContinueStatement() { + _tokenizer.next.call(void 0); + if (!_util.isLineTerminator.call(void 0)) { + _expression.parseIdentifier.call(void 0); + _util.semicolon.call(void 0); + } + } + function parseDebuggerStatement() { + _tokenizer.next.call(void 0); + _util.semicolon.call(void 0); + } + function parseDoStatement() { + _tokenizer.next.call(void 0); + parseStatement(false); + _util.expect.call(void 0, _types.TokenType._while); + _expression.parseParenExpression.call(void 0); + _tokenizer.eat.call(void 0, _types.TokenType.semi); + } + function parseForStatement() { + _base.state.scopeDepth++; + const startTokenIndex = _base.state.tokens.length; + parseAmbiguousForStatement(); + const endTokenIndex = _base.state.tokens.length; + _base.state.scopes.push(new (0, _state.Scope)(startTokenIndex, endTokenIndex, false)); + _base.state.scopeDepth--; + } + function isUsingInLoop() { + if (!_util.isContextual.call(void 0, _keywords.ContextualKeyword._using)) { + return false; + } + if (_util.isLookaheadContextual.call(void 0, _keywords.ContextualKeyword._of)) { + return false; + } + return true; + } + function parseAmbiguousForStatement() { + _tokenizer.next.call(void 0); + let forAwait = false; + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._await)) { + forAwait = true; + _tokenizer.next.call(void 0); + } + _util.expect.call(void 0, _types.TokenType.parenL); + if (_tokenizer.match.call(void 0, _types.TokenType.semi)) { + if (forAwait) { + _util.unexpected.call(void 0); + } + parseFor(); + return; + } + const isAwaitUsing = startsAwaitUsing(); + if (isAwaitUsing || _tokenizer.match.call(void 0, _types.TokenType._var) || _tokenizer.match.call(void 0, _types.TokenType._let) || _tokenizer.match.call(void 0, _types.TokenType._const) || isUsingInLoop()) { + if (isAwaitUsing) { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._await); + } + _tokenizer.next.call(void 0); + parseVar(true, _base.state.type !== _types.TokenType._var); + if (_tokenizer.match.call(void 0, _types.TokenType._in) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._of)) { + parseForIn(forAwait); + return; + } + parseFor(); + return; + } + _expression.parseExpression.call(void 0, true); + if (_tokenizer.match.call(void 0, _types.TokenType._in) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._of)) { + parseForIn(forAwait); + return; + } + if (forAwait) { + _util.unexpected.call(void 0); + } + parseFor(); + } + function parseFunctionStatement() { + const functionStart = _base.state.start; + _tokenizer.next.call(void 0); + parseFunction(functionStart, true); + } + function parseIfStatement() { + _tokenizer.next.call(void 0); + _expression.parseParenExpression.call(void 0); + parseStatement(false); + if (_tokenizer.eat.call(void 0, _types.TokenType._else)) { + parseStatement(false); + } + } + function parseReturnStatement() { + _tokenizer.next.call(void 0); + if (!_util.isLineTerminator.call(void 0)) { + _expression.parseExpression.call(void 0); + _util.semicolon.call(void 0); + } + } + function parseSwitchStatement() { + _tokenizer.next.call(void 0); + _expression.parseParenExpression.call(void 0); + _base.state.scopeDepth++; + const startTokenIndex = _base.state.tokens.length; + _util.expect.call(void 0, _types.TokenType.braceL); + while (!_tokenizer.match.call(void 0, _types.TokenType.braceR) && !_base.state.error) { + if (_tokenizer.match.call(void 0, _types.TokenType._case) || _tokenizer.match.call(void 0, _types.TokenType._default)) { + const isCase = _tokenizer.match.call(void 0, _types.TokenType._case); + _tokenizer.next.call(void 0); + if (isCase) { + _expression.parseExpression.call(void 0); + } + _util.expect.call(void 0, _types.TokenType.colon); + } else { + parseStatement(true); + } + } + _tokenizer.next.call(void 0); + const endTokenIndex = _base.state.tokens.length; + _base.state.scopes.push(new (0, _state.Scope)(startTokenIndex, endTokenIndex, false)); + _base.state.scopeDepth--; + } + function parseThrowStatement() { + _tokenizer.next.call(void 0); + _expression.parseExpression.call(void 0); + _util.semicolon.call(void 0); + } + function parseCatchClauseParam() { + _lval.parseBindingAtom.call( + void 0, + true + /* isBlockScope */ + ); + if (_base.isTypeScriptEnabled) { + _typescript.tsTryParseTypeAnnotation.call(void 0); + } + } + function parseTryStatement() { + _tokenizer.next.call(void 0); + parseBlock(); + if (_tokenizer.match.call(void 0, _types.TokenType._catch)) { + _tokenizer.next.call(void 0); + let catchBindingStartTokenIndex = null; + if (_tokenizer.match.call(void 0, _types.TokenType.parenL)) { + _base.state.scopeDepth++; + catchBindingStartTokenIndex = _base.state.tokens.length; + _util.expect.call(void 0, _types.TokenType.parenL); + parseCatchClauseParam(); + _util.expect.call(void 0, _types.TokenType.parenR); + } + parseBlock(); + if (catchBindingStartTokenIndex != null) { + const endTokenIndex = _base.state.tokens.length; + _base.state.scopes.push(new (0, _state.Scope)(catchBindingStartTokenIndex, endTokenIndex, false)); + _base.state.scopeDepth--; + } + } + if (_tokenizer.eat.call(void 0, _types.TokenType._finally)) { + parseBlock(); + } + } + function parseVarStatement(isBlockScope) { + _tokenizer.next.call(void 0); + parseVar(false, isBlockScope); + _util.semicolon.call(void 0); + } + exports2.parseVarStatement = parseVarStatement; + function parseWhileStatement() { + _tokenizer.next.call(void 0); + _expression.parseParenExpression.call(void 0); + parseStatement(false); + } + function parseEmptyStatement() { + _tokenizer.next.call(void 0); + } + function parseLabeledStatement() { + parseStatement(true); + } + function parseIdentifierStatement(contextualKeyword) { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseIdentifierStatement.call(void 0, contextualKeyword); + } else if (_base.isFlowEnabled) { + _flow.flowParseIdentifierStatement.call(void 0, contextualKeyword); + } else { + _util.semicolon.call(void 0); + } + } + function parseBlock(isFunctionScope = false, contextId = 0) { + const startTokenIndex = _base.state.tokens.length; + _base.state.scopeDepth++; + _util.expect.call(void 0, _types.TokenType.braceL); + if (contextId) { + _base.state.tokens[_base.state.tokens.length - 1].contextId = contextId; + } + parseBlockBody(_types.TokenType.braceR); + if (contextId) { + _base.state.tokens[_base.state.tokens.length - 1].contextId = contextId; + } + const endTokenIndex = _base.state.tokens.length; + _base.state.scopes.push(new (0, _state.Scope)(startTokenIndex, endTokenIndex, isFunctionScope)); + _base.state.scopeDepth--; + } + exports2.parseBlock = parseBlock; + function parseBlockBody(end2) { + while (!_tokenizer.eat.call(void 0, end2) && !_base.state.error) { + parseStatement(true); + } + } + exports2.parseBlockBody = parseBlockBody; + function parseFor() { + _util.expect.call(void 0, _types.TokenType.semi); + if (!_tokenizer.match.call(void 0, _types.TokenType.semi)) { + _expression.parseExpression.call(void 0); + } + _util.expect.call(void 0, _types.TokenType.semi); + if (!_tokenizer.match.call(void 0, _types.TokenType.parenR)) { + _expression.parseExpression.call(void 0); + } + _util.expect.call(void 0, _types.TokenType.parenR); + parseStatement(false); + } + function parseForIn(forAwait) { + if (forAwait) { + _util.eatContextual.call(void 0, _keywords.ContextualKeyword._of); + } else { + _tokenizer.next.call(void 0); + } + _expression.parseExpression.call(void 0); + _util.expect.call(void 0, _types.TokenType.parenR); + parseStatement(false); + } + function parseVar(isFor, isBlockScope) { + while (true) { + parseVarHead(isBlockScope); + if (_tokenizer.eat.call(void 0, _types.TokenType.eq)) { + const eqIndex = _base.state.tokens.length - 1; + _expression.parseMaybeAssign.call(void 0, isFor); + _base.state.tokens[eqIndex].rhsEndIndex = _base.state.tokens.length; + } + if (!_tokenizer.eat.call(void 0, _types.TokenType.comma)) { + break; + } + } + } + function parseVarHead(isBlockScope) { + _lval.parseBindingAtom.call(void 0, isBlockScope); + if (_base.isTypeScriptEnabled) { + _typescript.tsAfterParseVarHead.call(void 0); + } else if (_base.isFlowEnabled) { + _flow.flowAfterParseVarHead.call(void 0); + } + } + function parseFunction(functionStart, isStatement, optionalId = false) { + if (_tokenizer.match.call(void 0, _types.TokenType.star)) { + _tokenizer.next.call(void 0); + } + if (isStatement && !optionalId && !_tokenizer.match.call(void 0, _types.TokenType.name) && !_tokenizer.match.call(void 0, _types.TokenType._yield)) { + _util.unexpected.call(void 0); + } + let nameScopeStartTokenIndex = null; + if (_tokenizer.match.call(void 0, _types.TokenType.name)) { + if (!isStatement) { + nameScopeStartTokenIndex = _base.state.tokens.length; + _base.state.scopeDepth++; + } + _lval.parseBindingIdentifier.call(void 0, false); + } + const startTokenIndex = _base.state.tokens.length; + _base.state.scopeDepth++; + parseFunctionParams(); + _expression.parseFunctionBodyAndFinish.call(void 0, functionStart); + const endTokenIndex = _base.state.tokens.length; + _base.state.scopes.push(new (0, _state.Scope)(startTokenIndex, endTokenIndex, true)); + _base.state.scopeDepth--; + if (nameScopeStartTokenIndex !== null) { + _base.state.scopes.push(new (0, _state.Scope)(nameScopeStartTokenIndex, endTokenIndex, true)); + _base.state.scopeDepth--; + } + } + exports2.parseFunction = parseFunction; + function parseFunctionParams(allowModifiers = false, funcContextId = 0) { + if (_base.isTypeScriptEnabled) { + _typescript.tsStartParseFunctionParams.call(void 0); + } else if (_base.isFlowEnabled) { + _flow.flowStartParseFunctionParams.call(void 0); + } + _util.expect.call(void 0, _types.TokenType.parenL); + if (funcContextId) { + _base.state.tokens[_base.state.tokens.length - 1].contextId = funcContextId; + } + _lval.parseBindingList.call( + void 0, + _types.TokenType.parenR, + false, + false, + allowModifiers, + funcContextId + ); + if (funcContextId) { + _base.state.tokens[_base.state.tokens.length - 1].contextId = funcContextId; + } + } + exports2.parseFunctionParams = parseFunctionParams; + function parseClass(isStatement, optionalId = false) { + const contextId = _base.getNextContextId.call(void 0); + _tokenizer.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].contextId = contextId; + _base.state.tokens[_base.state.tokens.length - 1].isExpression = !isStatement; + let nameScopeStartTokenIndex = null; + if (!isStatement) { + nameScopeStartTokenIndex = _base.state.tokens.length; + _base.state.scopeDepth++; + } + parseClassId(isStatement, optionalId); + parseClassSuper(); + const openBraceIndex = _base.state.tokens.length; + parseClassBody(contextId); + if (_base.state.error) { + return; + } + _base.state.tokens[openBraceIndex].contextId = contextId; + _base.state.tokens[_base.state.tokens.length - 1].contextId = contextId; + if (nameScopeStartTokenIndex !== null) { + const endTokenIndex = _base.state.tokens.length; + _base.state.scopes.push(new (0, _state.Scope)(nameScopeStartTokenIndex, endTokenIndex, false)); + _base.state.scopeDepth--; + } + } + exports2.parseClass = parseClass; + function isClassProperty() { + return _tokenizer.match.call(void 0, _types.TokenType.eq) || _tokenizer.match.call(void 0, _types.TokenType.semi) || _tokenizer.match.call(void 0, _types.TokenType.braceR) || _tokenizer.match.call(void 0, _types.TokenType.bang) || _tokenizer.match.call(void 0, _types.TokenType.colon); + } + function isClassMethod() { + return _tokenizer.match.call(void 0, _types.TokenType.parenL) || _tokenizer.match.call(void 0, _types.TokenType.lessThan); + } + function parseClassBody(classContextId) { + _util.expect.call(void 0, _types.TokenType.braceL); + while (!_tokenizer.eat.call(void 0, _types.TokenType.braceR) && !_base.state.error) { + if (_tokenizer.eat.call(void 0, _types.TokenType.semi)) { + continue; + } + if (_tokenizer.match.call(void 0, _types.TokenType.at)) { + parseDecorator(); + continue; + } + const memberStart = _base.state.start; + parseClassMember(memberStart, classContextId); + } + } + function parseClassMember(memberStart, classContextId) { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseModifiers.call(void 0, [ + _keywords.ContextualKeyword._declare, + _keywords.ContextualKeyword._public, + _keywords.ContextualKeyword._protected, + _keywords.ContextualKeyword._private, + _keywords.ContextualKeyword._override + ]); + } + let isStatic = false; + if (_tokenizer.match.call(void 0, _types.TokenType.name) && _base.state.contextualKeyword === _keywords.ContextualKeyword._static) { + _expression.parseIdentifier.call(void 0); + if (isClassMethod()) { + parseClassMethod( + memberStart, + /* isConstructor */ + false + ); + return; + } else if (isClassProperty()) { + parseClassProperty(); + return; + } + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._static; + isStatic = true; + if (_tokenizer.match.call(void 0, _types.TokenType.braceL)) { + _base.state.tokens[_base.state.tokens.length - 1].contextId = classContextId; + parseBlock(); + return; + } + } + parseClassMemberWithIsStatic(memberStart, isStatic, classContextId); + } + function parseClassMemberWithIsStatic(memberStart, isStatic, classContextId) { + if (_base.isTypeScriptEnabled) { + if (_typescript.tsTryParseClassMemberWithIsStatic.call(void 0, isStatic)) { + return; + } + } + if (_tokenizer.eat.call(void 0, _types.TokenType.star)) { + parseClassPropertyName(classContextId); + parseClassMethod( + memberStart, + /* isConstructor */ + false + ); + return; + } + parseClassPropertyName(classContextId); + let isConstructor = false; + const token2 = _base.state.tokens[_base.state.tokens.length - 1]; + if (token2.contextualKeyword === _keywords.ContextualKeyword._constructor) { + isConstructor = true; + } + parsePostMemberNameModifiers(); + if (isClassMethod()) { + parseClassMethod(memberStart, isConstructor); + } else if (isClassProperty()) { + parseClassProperty(); + } else if (token2.contextualKeyword === _keywords.ContextualKeyword._async && !_util.isLineTerminator.call(void 0)) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._async; + const isGenerator = _tokenizer.match.call(void 0, _types.TokenType.star); + if (isGenerator) { + _tokenizer.next.call(void 0); + } + parseClassPropertyName(classContextId); + parsePostMemberNameModifiers(); + parseClassMethod( + memberStart, + false + /* isConstructor */ + ); + } else if ((token2.contextualKeyword === _keywords.ContextualKeyword._get || token2.contextualKeyword === _keywords.ContextualKeyword._set) && !(_util.isLineTerminator.call(void 0) && _tokenizer.match.call(void 0, _types.TokenType.star))) { + if (token2.contextualKeyword === _keywords.ContextualKeyword._get) { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._get; + } else { + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._set; + } + parseClassPropertyName(classContextId); + parseClassMethod( + memberStart, + /* isConstructor */ + false + ); + } else if (token2.contextualKeyword === _keywords.ContextualKeyword._accessor && !_util.isLineTerminator.call(void 0)) { + parseClassPropertyName(classContextId); + parseClassProperty(); + } else if (_util.isLineTerminator.call(void 0)) { + parseClassProperty(); + } else { + _util.unexpected.call(void 0); + } + } + function parseClassMethod(functionStart, isConstructor) { + if (_base.isTypeScriptEnabled) { + _typescript.tsTryParseTypeParameters.call(void 0); + } else if (_base.isFlowEnabled) { + if (_tokenizer.match.call(void 0, _types.TokenType.lessThan)) { + _flow.flowParseTypeParameterDeclaration.call(void 0); + } + } + _expression.parseMethod.call(void 0, functionStart, isConstructor); + } + function parseClassPropertyName(classContextId) { + _expression.parsePropertyName.call(void 0, classContextId); + } + exports2.parseClassPropertyName = parseClassPropertyName; + function parsePostMemberNameModifiers() { + if (_base.isTypeScriptEnabled) { + const oldIsType = _tokenizer.pushTypeContext.call(void 0, 0); + _tokenizer.eat.call(void 0, _types.TokenType.question); + _tokenizer.popTypeContext.call(void 0, oldIsType); + } + } + exports2.parsePostMemberNameModifiers = parsePostMemberNameModifiers; + function parseClassProperty() { + if (_base.isTypeScriptEnabled) { + _tokenizer.eatTypeToken.call(void 0, _types.TokenType.bang); + _typescript.tsTryParseTypeAnnotation.call(void 0); + } else if (_base.isFlowEnabled) { + if (_tokenizer.match.call(void 0, _types.TokenType.colon)) { + _flow.flowParseTypeAnnotation.call(void 0); + } + } + if (_tokenizer.match.call(void 0, _types.TokenType.eq)) { + const equalsTokenIndex = _base.state.tokens.length; + _tokenizer.next.call(void 0); + _expression.parseMaybeAssign.call(void 0); + _base.state.tokens[equalsTokenIndex].rhsEndIndex = _base.state.tokens.length; + } + _util.semicolon.call(void 0); + } + exports2.parseClassProperty = parseClassProperty; + function parseClassId(isStatement, optionalId = false) { + if (_base.isTypeScriptEnabled && (!isStatement || optionalId) && _util.isContextual.call(void 0, _keywords.ContextualKeyword._implements)) { + return; + } + if (_tokenizer.match.call(void 0, _types.TokenType.name)) { + _lval.parseBindingIdentifier.call(void 0, true); + } + if (_base.isTypeScriptEnabled) { + _typescript.tsTryParseTypeParameters.call(void 0); + } else if (_base.isFlowEnabled) { + if (_tokenizer.match.call(void 0, _types.TokenType.lessThan)) { + _flow.flowParseTypeParameterDeclaration.call(void 0); + } + } + } + function parseClassSuper() { + let hasSuper = false; + if (_tokenizer.eat.call(void 0, _types.TokenType._extends)) { + _expression.parseExprSubscripts.call(void 0); + hasSuper = true; + } else { + hasSuper = false; + } + if (_base.isTypeScriptEnabled) { + _typescript.tsAfterParseClassSuper.call(void 0, hasSuper); + } else if (_base.isFlowEnabled) { + _flow.flowAfterParseClassSuper.call(void 0, hasSuper); + } + } + function parseExport() { + const exportIndex = _base.state.tokens.length - 1; + if (_base.isTypeScriptEnabled) { + if (_typescript.tsTryParseExport.call(void 0)) { + return; + } + } + if (shouldParseExportStar()) { + parseExportStar(); + } else if (isExportDefaultSpecifier()) { + _expression.parseIdentifier.call(void 0); + if (_tokenizer.match.call(void 0, _types.TokenType.comma) && _tokenizer.lookaheadType.call(void 0) === _types.TokenType.star) { + _util.expect.call(void 0, _types.TokenType.comma); + _util.expect.call(void 0, _types.TokenType.star); + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._as); + _expression.parseIdentifier.call(void 0); + } else { + parseExportSpecifiersMaybe(); + } + parseExportFrom(); + } else if (_tokenizer.eat.call(void 0, _types.TokenType._default)) { + parseExportDefaultExpression(); + } else if (shouldParseExportDeclaration()) { + parseExportDeclaration(); + } else { + parseExportSpecifiers(); + parseExportFrom(); + } + _base.state.tokens[exportIndex].rhsEndIndex = _base.state.tokens.length; + } + exports2.parseExport = parseExport; + function parseExportDefaultExpression() { + if (_base.isTypeScriptEnabled) { + if (_typescript.tsTryParseExportDefaultExpression.call(void 0)) { + return; + } + } + if (_base.isFlowEnabled) { + if (_flow.flowTryParseExportDefaultExpression.call(void 0)) { + return; + } + } + const functionStart = _base.state.start; + if (_tokenizer.eat.call(void 0, _types.TokenType._function)) { + parseFunction(functionStart, true, true); + } else if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._async) && _tokenizer.lookaheadType.call(void 0) === _types.TokenType._function) { + _util.eatContextual.call(void 0, _keywords.ContextualKeyword._async); + _tokenizer.eat.call(void 0, _types.TokenType._function); + parseFunction(functionStart, true, true); + } else if (_tokenizer.match.call(void 0, _types.TokenType._class)) { + parseClass(true, true); + } else if (_tokenizer.match.call(void 0, _types.TokenType.at)) { + parseDecorators(); + parseClass(true, true); + } else { + _expression.parseMaybeAssign.call(void 0); + _util.semicolon.call(void 0); + } + } + function parseExportDeclaration() { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseExportDeclaration.call(void 0); + } else if (_base.isFlowEnabled) { + _flow.flowParseExportDeclaration.call(void 0); + } else { + parseStatement(true); + } + } + function isExportDefaultSpecifier() { + if (_base.isTypeScriptEnabled && _typescript.tsIsDeclarationStart.call(void 0)) { + return false; + } else if (_base.isFlowEnabled && _flow.flowShouldDisallowExportDefaultSpecifier.call(void 0)) { + return false; + } + if (_tokenizer.match.call(void 0, _types.TokenType.name)) { + return _base.state.contextualKeyword !== _keywords.ContextualKeyword._async; + } + if (!_tokenizer.match.call(void 0, _types.TokenType._default)) { + return false; + } + const _next = _tokenizer.nextTokenStart.call(void 0); + const lookahead = _tokenizer.lookaheadTypeAndKeyword.call(void 0); + const hasFrom = lookahead.type === _types.TokenType.name && lookahead.contextualKeyword === _keywords.ContextualKeyword._from; + if (lookahead.type === _types.TokenType.comma) { + return true; + } + if (hasFrom) { + const nextAfterFrom = _base.input.charCodeAt(_tokenizer.nextTokenStartSince.call(void 0, _next + 4)); + return nextAfterFrom === _charcodes.charCodes.quotationMark || nextAfterFrom === _charcodes.charCodes.apostrophe; + } + return false; + } + function parseExportSpecifiersMaybe() { + if (_tokenizer.eat.call(void 0, _types.TokenType.comma)) { + parseExportSpecifiers(); + } + } + function parseExportFrom() { + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._from)) { + _expression.parseExprAtom.call(void 0); + maybeParseImportAttributes(); + } + _util.semicolon.call(void 0); + } + exports2.parseExportFrom = parseExportFrom; + function shouldParseExportStar() { + if (_base.isFlowEnabled) { + return _flow.flowShouldParseExportStar.call(void 0); + } else { + return _tokenizer.match.call(void 0, _types.TokenType.star); + } + } + function parseExportStar() { + if (_base.isFlowEnabled) { + _flow.flowParseExportStar.call(void 0); + } else { + baseParseExportStar(); + } + } + function baseParseExportStar() { + _util.expect.call(void 0, _types.TokenType.star); + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._as)) { + parseExportNamespace(); + } else { + parseExportFrom(); + } + } + exports2.baseParseExportStar = baseParseExportStar; + function parseExportNamespace() { + _tokenizer.next.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].type = _types.TokenType._as; + _expression.parseIdentifier.call(void 0); + parseExportSpecifiersMaybe(); + parseExportFrom(); + } + function shouldParseExportDeclaration() { + return _base.isTypeScriptEnabled && _typescript.tsIsDeclarationStart.call(void 0) || _base.isFlowEnabled && _flow.flowShouldParseExportDeclaration.call(void 0) || _base.state.type === _types.TokenType._var || _base.state.type === _types.TokenType._const || _base.state.type === _types.TokenType._let || _base.state.type === _types.TokenType._function || _base.state.type === _types.TokenType._class || _util.isContextual.call(void 0, _keywords.ContextualKeyword._async) || _tokenizer.match.call(void 0, _types.TokenType.at); + } + function parseExportSpecifiers() { + let first = true; + _util.expect.call(void 0, _types.TokenType.braceL); + while (!_tokenizer.eat.call(void 0, _types.TokenType.braceR) && !_base.state.error) { + if (first) { + first = false; + } else { + _util.expect.call(void 0, _types.TokenType.comma); + if (_tokenizer.eat.call(void 0, _types.TokenType.braceR)) { + break; + } + } + parseExportSpecifier(); + } + } + exports2.parseExportSpecifiers = parseExportSpecifiers; + function parseExportSpecifier() { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseExportSpecifier.call(void 0); + return; + } + _expression.parseIdentifier.call(void 0); + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _tokenizer.IdentifierRole.ExportAccess; + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._as)) { + _expression.parseIdentifier.call(void 0); + } + } + function isImportReflection() { + const snapshot = _base.state.snapshot(); + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._module); + if (_util.eatContextual.call(void 0, _keywords.ContextualKeyword._from)) { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._from)) { + _base.state.restoreFromSnapshot(snapshot); + return true; + } else { + _base.state.restoreFromSnapshot(snapshot); + return false; + } + } else if (_tokenizer.match.call(void 0, _types.TokenType.comma)) { + _base.state.restoreFromSnapshot(snapshot); + return false; + } else { + _base.state.restoreFromSnapshot(snapshot); + return true; + } + } + function parseMaybeImportReflection() { + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._module) && isImportReflection()) { + _tokenizer.next.call(void 0); + } + } + function parseImport() { + if (_base.isTypeScriptEnabled && _tokenizer.match.call(void 0, _types.TokenType.name) && _tokenizer.lookaheadType.call(void 0) === _types.TokenType.eq) { + _typescript.tsParseImportEqualsDeclaration.call(void 0); + return; + } + if (_base.isTypeScriptEnabled && _util.isContextual.call(void 0, _keywords.ContextualKeyword._type)) { + const lookahead = _tokenizer.lookaheadTypeAndKeyword.call(void 0); + if (lookahead.type === _types.TokenType.name && lookahead.contextualKeyword !== _keywords.ContextualKeyword._from) { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._type); + if (_tokenizer.lookaheadType.call(void 0) === _types.TokenType.eq) { + _typescript.tsParseImportEqualsDeclaration.call(void 0); + return; + } + } else if (lookahead.type === _types.TokenType.star || lookahead.type === _types.TokenType.braceL) { + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._type); + } + } + if (_tokenizer.match.call(void 0, _types.TokenType.string)) { + _expression.parseExprAtom.call(void 0); + } else { + parseMaybeImportReflection(); + parseImportSpecifiers(); + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._from); + _expression.parseExprAtom.call(void 0); + } + maybeParseImportAttributes(); + _util.semicolon.call(void 0); + } + exports2.parseImport = parseImport; + function shouldParseDefaultImport() { + return _tokenizer.match.call(void 0, _types.TokenType.name); + } + function parseImportSpecifierLocal() { + _lval.parseImportedIdentifier.call(void 0); + } + function parseImportSpecifiers() { + if (_base.isFlowEnabled) { + _flow.flowStartParseImportSpecifiers.call(void 0); + } + let first = true; + if (shouldParseDefaultImport()) { + parseImportSpecifierLocal(); + if (!_tokenizer.eat.call(void 0, _types.TokenType.comma)) return; + } + if (_tokenizer.match.call(void 0, _types.TokenType.star)) { + _tokenizer.next.call(void 0); + _util.expectContextual.call(void 0, _keywords.ContextualKeyword._as); + parseImportSpecifierLocal(); + return; + } + _util.expect.call(void 0, _types.TokenType.braceL); + while (!_tokenizer.eat.call(void 0, _types.TokenType.braceR) && !_base.state.error) { + if (first) { + first = false; + } else { + if (_tokenizer.eat.call(void 0, _types.TokenType.colon)) { + _util.unexpected.call( + void 0, + "ES2015 named imports do not destructure. Use another statement for destructuring after the import." + ); + } + _util.expect.call(void 0, _types.TokenType.comma); + if (_tokenizer.eat.call(void 0, _types.TokenType.braceR)) { + break; + } + } + parseImportSpecifier(); + } + } + function parseImportSpecifier() { + if (_base.isTypeScriptEnabled) { + _typescript.tsParseImportSpecifier.call(void 0); + return; + } + if (_base.isFlowEnabled) { + _flow.flowParseImportSpecifier.call(void 0); + return; + } + _lval.parseImportedIdentifier.call(void 0); + if (_util.isContextual.call(void 0, _keywords.ContextualKeyword._as)) { + _base.state.tokens[_base.state.tokens.length - 1].identifierRole = _tokenizer.IdentifierRole.ImportAccess; + _tokenizer.next.call(void 0); + _lval.parseImportedIdentifier.call(void 0); + } + } + function maybeParseImportAttributes() { + if (_tokenizer.match.call(void 0, _types.TokenType._with) || _util.isContextual.call(void 0, _keywords.ContextualKeyword._assert) && !_util.hasPrecedingLineBreak.call(void 0)) { + _tokenizer.next.call(void 0); + _expression.parseObj.call(void 0, false, false); + } + } + } +}); + +// node_modules/sucrase/dist/parser/traverser/index.js +var require_traverser = __commonJS({ + "node_modules/sucrase/dist/parser/traverser/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _index = require_tokenizer(); + var _charcodes = require_charcodes(); + var _base = require_base(); + var _statement = require_statement(); + function parseFile() { + if (_base.state.pos === 0 && _base.input.charCodeAt(0) === _charcodes.charCodes.numberSign && _base.input.charCodeAt(1) === _charcodes.charCodes.exclamationMark) { + _index.skipLineComment.call(void 0, 2); + } + _index.nextToken.call(void 0); + return _statement.parseTopLevel.call(void 0); + } + exports2.parseFile = parseFile; + } +}); + +// node_modules/sucrase/dist/parser/index.js +var require_parser = __commonJS({ + "node_modules/sucrase/dist/parser/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _base = require_base(); + var _index = require_traverser(); + var File3 = class { + constructor(tokens, scopes) { + this.tokens = tokens; + this.scopes = scopes; + } + }; + exports2.File = File3; + function parse4(input, isJSXEnabled, isTypeScriptEnabled, isFlowEnabled) { + if (isFlowEnabled && isTypeScriptEnabled) { + throw new Error("Cannot combine flow and typescript plugins."); + } + _base.initParser.call(void 0, input, isJSXEnabled, isTypeScriptEnabled, isFlowEnabled); + const result = _index.parseFile.call(void 0); + if (_base.state.error) { + throw _base.augmentError.call(void 0, _base.state.error); + } + return result; + } + exports2.parse = parse4; + } +}); + +// node_modules/sucrase/dist/util/isAsyncOperation.js +var require_isAsyncOperation = __commonJS({ + "node_modules/sucrase/dist/util/isAsyncOperation.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _keywords = require_keywords(); + function isAsyncOperation(tokens) { + let index = tokens.currentIndex(); + let depth = 0; + const startToken = tokens.currentToken(); + do { + const token2 = tokens.tokens[index]; + if (token2.isOptionalChainStart) { + depth++; + } + if (token2.isOptionalChainEnd) { + depth--; + } + depth += token2.numNullishCoalesceStarts; + depth -= token2.numNullishCoalesceEnds; + if (token2.contextualKeyword === _keywords.ContextualKeyword._await && token2.identifierRole == null && token2.scopeDepth === startToken.scopeDepth) { + return true; + } + index += 1; + } while (depth > 0 && index < tokens.tokens.length); + return false; + } + exports2.default = isAsyncOperation; + } +}); + +// node_modules/sucrase/dist/TokenProcessor.js +var require_TokenProcessor = __commonJS({ + "node_modules/sucrase/dist/TokenProcessor.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _types = require_types(); + var _isAsyncOperation = require_isAsyncOperation(); + var _isAsyncOperation2 = _interopRequireDefault(_isAsyncOperation); + var TokenProcessor = class _TokenProcessor { + __init() { + this.resultCode = ""; + } + // Array mapping input token index to optional string index position in the + // output code. + __init2() { + this.resultMappings = new Array(this.tokens.length); + } + __init3() { + this.tokenIndex = 0; + } + constructor(code, tokens, isFlowEnabled, disableESTransforms, helperManager) { + ; + this.code = code; + this.tokens = tokens; + this.isFlowEnabled = isFlowEnabled; + this.disableESTransforms = disableESTransforms; + this.helperManager = helperManager; + _TokenProcessor.prototype.__init.call(this); + _TokenProcessor.prototype.__init2.call(this); + _TokenProcessor.prototype.__init3.call(this); + } + /** + * Snapshot the token state in a way that can be restored later, useful for + * things like lookahead. + * + * resultMappings do not need to be copied since in all use cases, they will + * be overwritten anyway after restore. + */ + snapshot() { + return { + resultCode: this.resultCode, + tokenIndex: this.tokenIndex + }; + } + restoreToSnapshot(snapshot) { + this.resultCode = snapshot.resultCode; + this.tokenIndex = snapshot.tokenIndex; + } + /** + * Remove and return the code generated since the snapshot, leaving the + * current token position in-place. Unlike most TokenProcessor operations, + * this operation can result in input/output line number mismatches because + * the removed code may contain newlines, so this operation should be used + * sparingly. + */ + dangerouslyGetAndRemoveCodeSinceSnapshot(snapshot) { + const result = this.resultCode.slice(snapshot.resultCode.length); + this.resultCode = snapshot.resultCode; + return result; + } + reset() { + this.resultCode = ""; + this.resultMappings = new Array(this.tokens.length); + this.tokenIndex = 0; + } + matchesContextualAtIndex(index, contextualKeyword) { + return this.matches1AtIndex(index, _types.TokenType.name) && this.tokens[index].contextualKeyword === contextualKeyword; + } + identifierNameAtIndex(index) { + return this.identifierNameForToken(this.tokens[index]); + } + identifierNameAtRelativeIndex(relativeIndex) { + return this.identifierNameForToken(this.tokenAtRelativeIndex(relativeIndex)); + } + identifierName() { + return this.identifierNameForToken(this.currentToken()); + } + identifierNameForToken(token2) { + return this.code.slice(token2.start, token2.end); + } + rawCodeForToken(token2) { + return this.code.slice(token2.start, token2.end); + } + stringValueAtIndex(index) { + return this.stringValueForToken(this.tokens[index]); + } + stringValue() { + return this.stringValueForToken(this.currentToken()); + } + stringValueForToken(token2) { + return this.code.slice(token2.start + 1, token2.end - 1); + } + matches1AtIndex(index, t1) { + return this.tokens[index].type === t1; + } + matches2AtIndex(index, t1, t22) { + return this.tokens[index].type === t1 && this.tokens[index + 1].type === t22; + } + matches3AtIndex(index, t1, t22, t32) { + return this.tokens[index].type === t1 && this.tokens[index + 1].type === t22 && this.tokens[index + 2].type === t32; + } + matches1(t1) { + return this.tokens[this.tokenIndex].type === t1; + } + matches2(t1, t22) { + return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t22; + } + matches3(t1, t22, t32) { + return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t22 && this.tokens[this.tokenIndex + 2].type === t32; + } + matches4(t1, t22, t32, t4) { + return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t22 && this.tokens[this.tokenIndex + 2].type === t32 && this.tokens[this.tokenIndex + 3].type === t4; + } + matches5(t1, t22, t32, t4, t5) { + return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t22 && this.tokens[this.tokenIndex + 2].type === t32 && this.tokens[this.tokenIndex + 3].type === t4 && this.tokens[this.tokenIndex + 4].type === t5; + } + matchesContextual(contextualKeyword) { + return this.matchesContextualAtIndex(this.tokenIndex, contextualKeyword); + } + matchesContextIdAndLabel(type, contextId) { + return this.matches1(type) && this.currentToken().contextId === contextId; + } + previousWhitespaceAndComments() { + let whitespaceAndComments = this.code.slice( + this.tokenIndex > 0 ? this.tokens[this.tokenIndex - 1].end : 0, + this.tokenIndex < this.tokens.length ? this.tokens[this.tokenIndex].start : this.code.length + ); + if (this.isFlowEnabled) { + whitespaceAndComments = whitespaceAndComments.replace(/@flow/g, ""); + } + return whitespaceAndComments; + } + replaceToken(newCode) { + this.resultCode += this.previousWhitespaceAndComments(); + this.appendTokenPrefix(); + this.resultMappings[this.tokenIndex] = this.resultCode.length; + this.resultCode += newCode; + this.appendTokenSuffix(); + this.tokenIndex++; + } + replaceTokenTrimmingLeftWhitespace(newCode) { + this.resultCode += this.previousWhitespaceAndComments().replace(/[^\r\n]/g, ""); + this.appendTokenPrefix(); + this.resultMappings[this.tokenIndex] = this.resultCode.length; + this.resultCode += newCode; + this.appendTokenSuffix(); + this.tokenIndex++; + } + removeInitialToken() { + this.replaceToken(""); + } + removeToken() { + this.replaceTokenTrimmingLeftWhitespace(""); + } + /** + * Remove all code until the next }, accounting for balanced braces. + */ + removeBalancedCode() { + let braceDepth = 0; + while (!this.isAtEnd()) { + if (this.matches1(_types.TokenType.braceL)) { + braceDepth++; + } else if (this.matches1(_types.TokenType.braceR)) { + if (braceDepth === 0) { + return; + } + braceDepth--; + } + this.removeToken(); + } + } + copyExpectedToken(tokenType) { + if (this.tokens[this.tokenIndex].type !== tokenType) { + throw new Error(`Expected token ${tokenType}`); + } + this.copyToken(); + } + copyToken() { + this.resultCode += this.previousWhitespaceAndComments(); + this.appendTokenPrefix(); + this.resultMappings[this.tokenIndex] = this.resultCode.length; + this.resultCode += this.code.slice( + this.tokens[this.tokenIndex].start, + this.tokens[this.tokenIndex].end + ); + this.appendTokenSuffix(); + this.tokenIndex++; + } + copyTokenWithPrefix(prefix2) { + this.resultCode += this.previousWhitespaceAndComments(); + this.appendTokenPrefix(); + this.resultCode += prefix2; + this.resultMappings[this.tokenIndex] = this.resultCode.length; + this.resultCode += this.code.slice( + this.tokens[this.tokenIndex].start, + this.tokens[this.tokenIndex].end + ); + this.appendTokenSuffix(); + this.tokenIndex++; + } + appendTokenPrefix() { + const token2 = this.currentToken(); + if (token2.numNullishCoalesceStarts || token2.isOptionalChainStart) { + token2.isAsyncOperation = _isAsyncOperation2.default.call(void 0, this); + } + if (this.disableESTransforms) { + return; + } + if (token2.numNullishCoalesceStarts) { + for (let i4 = 0; i4 < token2.numNullishCoalesceStarts; i4++) { + if (token2.isAsyncOperation) { + this.resultCode += "await "; + this.resultCode += this.helperManager.getHelperName("asyncNullishCoalesce"); + } else { + this.resultCode += this.helperManager.getHelperName("nullishCoalesce"); + } + this.resultCode += "("; + } + } + if (token2.isOptionalChainStart) { + if (token2.isAsyncOperation) { + this.resultCode += "await "; + } + if (this.tokenIndex > 0 && this.tokenAtRelativeIndex(-1).type === _types.TokenType._delete) { + if (token2.isAsyncOperation) { + this.resultCode += this.helperManager.getHelperName("asyncOptionalChainDelete"); + } else { + this.resultCode += this.helperManager.getHelperName("optionalChainDelete"); + } + } else if (token2.isAsyncOperation) { + this.resultCode += this.helperManager.getHelperName("asyncOptionalChain"); + } else { + this.resultCode += this.helperManager.getHelperName("optionalChain"); + } + this.resultCode += "(["; + } + } + appendTokenSuffix() { + const token2 = this.currentToken(); + if (token2.isOptionalChainEnd && !this.disableESTransforms) { + this.resultCode += "])"; + } + if (token2.numNullishCoalesceEnds && !this.disableESTransforms) { + for (let i4 = 0; i4 < token2.numNullishCoalesceEnds; i4++) { + this.resultCode += "))"; + } + } + } + appendCode(code) { + this.resultCode += code; + } + currentToken() { + return this.tokens[this.tokenIndex]; + } + currentTokenCode() { + const token2 = this.currentToken(); + return this.code.slice(token2.start, token2.end); + } + tokenAtRelativeIndex(relativeIndex) { + return this.tokens[this.tokenIndex + relativeIndex]; + } + currentIndex() { + return this.tokenIndex; + } + /** + * Move to the next token. Only suitable in preprocessing steps. When + * generating new code, you should use copyToken or removeToken. + */ + nextToken() { + if (this.tokenIndex === this.tokens.length) { + throw new Error("Unexpectedly reached end of input."); + } + this.tokenIndex++; + } + previousToken() { + this.tokenIndex--; + } + finish() { + if (this.tokenIndex !== this.tokens.length) { + throw new Error("Tried to finish processing tokens before reaching the end."); + } + this.resultCode += this.previousWhitespaceAndComments(); + return { code: this.resultCode, mappings: this.resultMappings }; + } + isAtEnd() { + return this.tokenIndex === this.tokens.length; + } + }; + exports2.default = TokenProcessor; + } +}); + +// node_modules/sucrase/dist/util/getClassInfo.js +var require_getClassInfo = __commonJS({ + "node_modules/sucrase/dist/util/getClassInfo.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _keywords = require_keywords(); + var _types = require_types(); + function getClassInfo(rootTransformer, tokens, nameManager, disableESTransforms) { + const snapshot = tokens.snapshot(); + const headerInfo = processClassHeader(tokens); + let constructorInitializerStatements = []; + const instanceInitializerNames = []; + const staticInitializerNames = []; + let constructorInsertPos = null; + const fields = []; + const rangesToRemove = []; + const classContextId = tokens.currentToken().contextId; + if (classContextId == null) { + throw new Error("Expected non-null class context ID on class open-brace."); + } + tokens.nextToken(); + while (!tokens.matchesContextIdAndLabel(_types.TokenType.braceR, classContextId)) { + if (tokens.matchesContextual(_keywords.ContextualKeyword._constructor) && !tokens.currentToken().isType) { + ({ constructorInitializerStatements, constructorInsertPos } = processConstructor(tokens)); + } else if (tokens.matches1(_types.TokenType.semi)) { + if (!disableESTransforms) { + rangesToRemove.push({ start: tokens.currentIndex(), end: tokens.currentIndex() + 1 }); + } + tokens.nextToken(); + } else if (tokens.currentToken().isType) { + tokens.nextToken(); + } else { + const statementStartIndex = tokens.currentIndex(); + let isStatic = false; + let isESPrivate = false; + let isDeclareOrAbstract = false; + while (isAccessModifier(tokens.currentToken())) { + if (tokens.matches1(_types.TokenType._static)) { + isStatic = true; + } + if (tokens.matches1(_types.TokenType.hash)) { + isESPrivate = true; + } + if (tokens.matches1(_types.TokenType._declare) || tokens.matches1(_types.TokenType._abstract)) { + isDeclareOrAbstract = true; + } + tokens.nextToken(); + } + if (isStatic && tokens.matches1(_types.TokenType.braceL)) { + skipToNextClassElement(tokens, classContextId); + continue; + } + if (isESPrivate) { + skipToNextClassElement(tokens, classContextId); + continue; + } + if (tokens.matchesContextual(_keywords.ContextualKeyword._constructor) && !tokens.currentToken().isType) { + ({ constructorInitializerStatements, constructorInsertPos } = processConstructor(tokens)); + continue; + } + const nameStartIndex = tokens.currentIndex(); + skipFieldName(tokens); + if (tokens.matches1(_types.TokenType.lessThan) || tokens.matches1(_types.TokenType.parenL)) { + skipToNextClassElement(tokens, classContextId); + continue; + } + while (tokens.currentToken().isType) { + tokens.nextToken(); + } + if (tokens.matches1(_types.TokenType.eq)) { + const equalsIndex = tokens.currentIndex(); + const valueEnd = tokens.currentToken().rhsEndIndex; + if (valueEnd == null) { + throw new Error("Expected rhsEndIndex on class field assignment."); + } + tokens.nextToken(); + while (tokens.currentIndex() < valueEnd) { + rootTransformer.processToken(); + } + let initializerName; + if (isStatic) { + initializerName = nameManager.claimFreeName("__initStatic"); + staticInitializerNames.push(initializerName); + } else { + initializerName = nameManager.claimFreeName("__init"); + instanceInitializerNames.push(initializerName); + } + fields.push({ + initializerName, + equalsIndex, + start: nameStartIndex, + end: tokens.currentIndex() + }); + } else if (!disableESTransforms || isDeclareOrAbstract) { + rangesToRemove.push({ start: statementStartIndex, end: tokens.currentIndex() }); + } + } + } + tokens.restoreToSnapshot(snapshot); + if (disableESTransforms) { + return { + headerInfo, + constructorInitializerStatements, + instanceInitializerNames: [], + staticInitializerNames: [], + constructorInsertPos, + fields: [], + rangesToRemove + }; + } else { + return { + headerInfo, + constructorInitializerStatements, + instanceInitializerNames, + staticInitializerNames, + constructorInsertPos, + fields, + rangesToRemove + }; + } + } + exports2.default = getClassInfo; + function skipToNextClassElement(tokens, classContextId) { + tokens.nextToken(); + while (tokens.currentToken().contextId !== classContextId) { + tokens.nextToken(); + } + while (isAccessModifier(tokens.tokenAtRelativeIndex(-1))) { + tokens.previousToken(); + } + } + function processClassHeader(tokens) { + const classToken = tokens.currentToken(); + const contextId = classToken.contextId; + if (contextId == null) { + throw new Error("Expected context ID on class token."); + } + const isExpression = classToken.isExpression; + if (isExpression == null) { + throw new Error("Expected isExpression on class token."); + } + let className = null; + let hasSuperclass = false; + tokens.nextToken(); + if (tokens.matches1(_types.TokenType.name)) { + className = tokens.identifierName(); + } + while (!tokens.matchesContextIdAndLabel(_types.TokenType.braceL, contextId)) { + if (tokens.matches1(_types.TokenType._extends) && !tokens.currentToken().isType) { + hasSuperclass = true; + } + tokens.nextToken(); + } + return { isExpression, className, hasSuperclass }; + } + function processConstructor(tokens) { + const constructorInitializerStatements = []; + tokens.nextToken(); + const constructorContextId = tokens.currentToken().contextId; + if (constructorContextId == null) { + throw new Error("Expected context ID on open-paren starting constructor params."); + } + while (!tokens.matchesContextIdAndLabel(_types.TokenType.parenR, constructorContextId)) { + if (tokens.currentToken().contextId === constructorContextId) { + tokens.nextToken(); + if (isAccessModifier(tokens.currentToken())) { + tokens.nextToken(); + while (isAccessModifier(tokens.currentToken())) { + tokens.nextToken(); + } + const token2 = tokens.currentToken(); + if (token2.type !== _types.TokenType.name) { + throw new Error("Expected identifier after access modifiers in constructor arg."); + } + const name = tokens.identifierNameForToken(token2); + constructorInitializerStatements.push(`this.${name} = ${name}`); + } + } else { + tokens.nextToken(); + } + } + tokens.nextToken(); + while (tokens.currentToken().isType) { + tokens.nextToken(); + } + let constructorInsertPos = tokens.currentIndex(); + let foundSuperCall = false; + while (!tokens.matchesContextIdAndLabel(_types.TokenType.braceR, constructorContextId)) { + if (!foundSuperCall && tokens.matches2(_types.TokenType._super, _types.TokenType.parenL)) { + tokens.nextToken(); + const superCallContextId = tokens.currentToken().contextId; + if (superCallContextId == null) { + throw new Error("Expected a context ID on the super call"); + } + while (!tokens.matchesContextIdAndLabel(_types.TokenType.parenR, superCallContextId)) { + tokens.nextToken(); + } + constructorInsertPos = tokens.currentIndex(); + foundSuperCall = true; + } + tokens.nextToken(); + } + tokens.nextToken(); + return { constructorInitializerStatements, constructorInsertPos }; + } + function isAccessModifier(token2) { + return [ + _types.TokenType._async, + _types.TokenType._get, + _types.TokenType._set, + _types.TokenType.plus, + _types.TokenType.minus, + _types.TokenType._readonly, + _types.TokenType._static, + _types.TokenType._public, + _types.TokenType._private, + _types.TokenType._protected, + _types.TokenType._override, + _types.TokenType._abstract, + _types.TokenType.star, + _types.TokenType._declare, + _types.TokenType.hash + ].includes(token2.type); + } + function skipFieldName(tokens) { + if (tokens.matches1(_types.TokenType.bracketL)) { + const startToken = tokens.currentToken(); + const classContextId = startToken.contextId; + if (classContextId == null) { + throw new Error("Expected class context ID on computed name open bracket."); + } + while (!tokens.matchesContextIdAndLabel(_types.TokenType.bracketR, classContextId)) { + tokens.nextToken(); + } + tokens.nextToken(); + } else { + tokens.nextToken(); + } + } + } +}); + +// node_modules/sucrase/dist/util/elideImportEquals.js +var require_elideImportEquals = __commonJS({ + "node_modules/sucrase/dist/util/elideImportEquals.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _types = require_types(); + function elideImportEquals(tokens) { + tokens.removeInitialToken(); + tokens.removeToken(); + tokens.removeToken(); + tokens.removeToken(); + if (tokens.matches1(_types.TokenType.parenL)) { + tokens.removeToken(); + tokens.removeToken(); + tokens.removeToken(); + } else { + while (tokens.matches1(_types.TokenType.dot)) { + tokens.removeToken(); + tokens.removeToken(); + } + } + } + exports2.default = elideImportEquals; + } +}); + +// node_modules/sucrase/dist/util/getDeclarationInfo.js +var require_getDeclarationInfo = __commonJS({ + "node_modules/sucrase/dist/util/getDeclarationInfo.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _tokenizer = require_tokenizer(); + var _types = require_types(); + var EMPTY_DECLARATION_INFO = { + typeDeclarations: /* @__PURE__ */ new Set(), + valueDeclarations: /* @__PURE__ */ new Set() + }; + exports2.EMPTY_DECLARATION_INFO = EMPTY_DECLARATION_INFO; + function getDeclarationInfo(tokens) { + const typeDeclarations = /* @__PURE__ */ new Set(); + const valueDeclarations = /* @__PURE__ */ new Set(); + for (let i4 = 0; i4 < tokens.tokens.length; i4++) { + const token2 = tokens.tokens[i4]; + if (token2.type === _types.TokenType.name && _tokenizer.isTopLevelDeclaration.call(void 0, token2)) { + if (token2.isType) { + typeDeclarations.add(tokens.identifierNameForToken(token2)); + } else { + valueDeclarations.add(tokens.identifierNameForToken(token2)); + } + } + } + return { typeDeclarations, valueDeclarations }; + } + exports2.default = getDeclarationInfo; + } +}); + +// node_modules/sucrase/dist/util/isExportFrom.js +var require_isExportFrom = __commonJS({ + "node_modules/sucrase/dist/util/isExportFrom.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _keywords = require_keywords(); + var _types = require_types(); + function isExportFrom(tokens) { + let closeBraceIndex = tokens.currentIndex(); + while (!tokens.matches1AtIndex(closeBraceIndex, _types.TokenType.braceR)) { + closeBraceIndex++; + } + return tokens.matchesContextualAtIndex(closeBraceIndex + 1, _keywords.ContextualKeyword._from) && tokens.matches1AtIndex(closeBraceIndex + 2, _types.TokenType.string); + } + exports2.default = isExportFrom; + } +}); + +// node_modules/sucrase/dist/util/removeMaybeImportAttributes.js +var require_removeMaybeImportAttributes = __commonJS({ + "node_modules/sucrase/dist/util/removeMaybeImportAttributes.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _keywords = require_keywords(); + var _types = require_types(); + function removeMaybeImportAttributes(tokens) { + if (tokens.matches2(_types.TokenType._with, _types.TokenType.braceL) || tokens.matches2(_types.TokenType.name, _types.TokenType.braceL) && tokens.matchesContextual(_keywords.ContextualKeyword._assert)) { + tokens.removeToken(); + tokens.removeToken(); + tokens.removeBalancedCode(); + tokens.removeToken(); + } + } + exports2.removeMaybeImportAttributes = removeMaybeImportAttributes; + } +}); + +// node_modules/sucrase/dist/util/shouldElideDefaultExport.js +var require_shouldElideDefaultExport = __commonJS({ + "node_modules/sucrase/dist/util/shouldElideDefaultExport.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _types = require_types(); + function shouldElideDefaultExport(isTypeScriptTransformEnabled, keepUnusedImports, tokens, declarationInfo) { + if (!isTypeScriptTransformEnabled || keepUnusedImports) { + return false; + } + const exportToken = tokens.currentToken(); + if (exportToken.rhsEndIndex == null) { + throw new Error("Expected non-null rhsEndIndex on export token."); + } + const numTokens = exportToken.rhsEndIndex - tokens.currentIndex(); + if (numTokens !== 3 && !(numTokens === 4 && tokens.matches1AtIndex(exportToken.rhsEndIndex - 1, _types.TokenType.semi))) { + return false; + } + const identifierToken = tokens.tokenAtRelativeIndex(2); + if (identifierToken.type !== _types.TokenType.name) { + return false; + } + const exportedName = tokens.identifierNameForToken(identifierToken); + return declarationInfo.typeDeclarations.has(exportedName) && !declarationInfo.valueDeclarations.has(exportedName); + } + exports2.default = shouldElideDefaultExport; + } +}); + +// node_modules/sucrase/dist/transformers/CJSImportTransformer.js +var require_CJSImportTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/CJSImportTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _tokenizer = require_tokenizer(); + var _keywords = require_keywords(); + var _types = require_types(); + var _elideImportEquals = require_elideImportEquals(); + var _elideImportEquals2 = _interopRequireDefault(_elideImportEquals); + var _getDeclarationInfo = require_getDeclarationInfo(); + var _getDeclarationInfo2 = _interopRequireDefault(_getDeclarationInfo); + var _getImportExportSpecifierInfo = require_getImportExportSpecifierInfo(); + var _getImportExportSpecifierInfo2 = _interopRequireDefault(_getImportExportSpecifierInfo); + var _isExportFrom = require_isExportFrom(); + var _isExportFrom2 = _interopRequireDefault(_isExportFrom); + var _removeMaybeImportAttributes = require_removeMaybeImportAttributes(); + var _shouldElideDefaultExport = require_shouldElideDefaultExport(); + var _shouldElideDefaultExport2 = _interopRequireDefault(_shouldElideDefaultExport); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var CJSImportTransformer = class _CJSImportTransformer extends _Transformer2.default { + __init() { + this.hadExport = false; + } + __init2() { + this.hadNamedExport = false; + } + __init3() { + this.hadDefaultExport = false; + } + constructor(rootTransformer, tokens, importProcessor, nameManager, helperManager, reactHotLoaderTransformer, enableLegacyBabel5ModuleInterop, enableLegacyTypeScriptModuleInterop, isTypeScriptTransformEnabled, isFlowTransformEnabled, preserveDynamicImport, keepUnusedImports) { + super(); + this.rootTransformer = rootTransformer; + this.tokens = tokens; + this.importProcessor = importProcessor; + this.nameManager = nameManager; + this.helperManager = helperManager; + this.reactHotLoaderTransformer = reactHotLoaderTransformer; + this.enableLegacyBabel5ModuleInterop = enableLegacyBabel5ModuleInterop; + this.enableLegacyTypeScriptModuleInterop = enableLegacyTypeScriptModuleInterop; + this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled; + this.isFlowTransformEnabled = isFlowTransformEnabled; + this.preserveDynamicImport = preserveDynamicImport; + this.keepUnusedImports = keepUnusedImports; + _CJSImportTransformer.prototype.__init.call(this); + _CJSImportTransformer.prototype.__init2.call(this); + _CJSImportTransformer.prototype.__init3.call(this); + ; + this.declarationInfo = isTypeScriptTransformEnabled ? _getDeclarationInfo2.default.call(void 0, tokens) : _getDeclarationInfo.EMPTY_DECLARATION_INFO; + } + getPrefixCode() { + let prefix2 = ""; + if (this.hadExport) { + prefix2 += 'Object.defineProperty(exports, "__esModule", {value: true});'; + } + return prefix2; + } + getSuffixCode() { + if (this.enableLegacyBabel5ModuleInterop && this.hadDefaultExport && !this.hadNamedExport) { + return "\nmodule.exports = exports.default;\n"; + } + return ""; + } + process() { + if (this.tokens.matches3(_types.TokenType._import, _types.TokenType.name, _types.TokenType.eq)) { + return this.processImportEquals(); + } + if (this.tokens.matches1(_types.TokenType._import)) { + this.processImport(); + return true; + } + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType.eq)) { + this.tokens.replaceToken("module.exports"); + return true; + } + if (this.tokens.matches1(_types.TokenType._export) && !this.tokens.currentToken().isType) { + this.hadExport = true; + return this.processExport(); + } + if (this.tokens.matches2(_types.TokenType.name, _types.TokenType.postIncDec)) { + if (this.processPostIncDec()) { + return true; + } + } + if (this.tokens.matches1(_types.TokenType.name) || this.tokens.matches1(_types.TokenType.jsxName)) { + return this.processIdentifier(); + } + if (this.tokens.matches1(_types.TokenType.eq)) { + return this.processAssignment(); + } + if (this.tokens.matches1(_types.TokenType.assign)) { + return this.processComplexAssignment(); + } + if (this.tokens.matches1(_types.TokenType.preIncDec)) { + return this.processPreIncDec(); + } + return false; + } + processImportEquals() { + const importName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1); + if (this.importProcessor.shouldAutomaticallyElideImportedName(importName)) { + _elideImportEquals2.default.call(void 0, this.tokens); + } else { + this.tokens.replaceToken("const"); + } + return true; + } + /** + * Transform this: + * import foo, {bar} from 'baz'; + * into + * var _baz = require('baz'); var _baz2 = _interopRequireDefault(_baz); + * + * The import code was already generated in the import preprocessing step, so + * we just need to look it up. + */ + processImport() { + if (this.tokens.matches2(_types.TokenType._import, _types.TokenType.parenL)) { + if (this.preserveDynamicImport) { + this.tokens.copyToken(); + return; + } + const requireWrapper = this.enableLegacyTypeScriptModuleInterop ? "" : `${this.helperManager.getHelperName("interopRequireWildcard")}(`; + this.tokens.replaceToken(`Promise.resolve().then(() => ${requireWrapper}require`); + const contextId = this.tokens.currentToken().contextId; + if (contextId == null) { + throw new Error("Expected context ID on dynamic import invocation."); + } + this.tokens.copyToken(); + while (!this.tokens.matchesContextIdAndLabel(_types.TokenType.parenR, contextId)) { + this.rootTransformer.processToken(); + } + this.tokens.replaceToken(requireWrapper ? ")))" : "))"); + return; + } + const shouldElideImport = this.removeImportAndDetectIfShouldElide(); + if (shouldElideImport) { + this.tokens.removeToken(); + } else { + const path = this.tokens.stringValue(); + this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path)); + this.tokens.appendCode(this.importProcessor.claimImportCode(path)); + } + _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens); + if (this.tokens.matches1(_types.TokenType.semi)) { + this.tokens.removeToken(); + } + } + /** + * Erase this import (since any CJS output would be completely different), and + * return true if this import is should be elided due to being a type-only + * import. Such imports will not be emitted at all to avoid side effects. + * + * Import elision only happens with the TypeScript or Flow transforms enabled. + * + * TODO: This function has some awkward overlap with + * CJSImportProcessor.pruneTypeOnlyImports , and the two should be unified. + * That function handles TypeScript implicit import name elision, and removes + * an import if all typical imported names (without `type`) are removed due + * to being type-only imports. This function handles Flow import removal and + * properly distinguishes `import 'foo'` from `import {} from 'foo'` for TS + * purposes. + * + * The position should end at the import string. + */ + removeImportAndDetectIfShouldElide() { + this.tokens.removeInitialToken(); + if (this.tokens.matchesContextual(_keywords.ContextualKeyword._type) && !this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, _types.TokenType.comma) && !this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, _keywords.ContextualKeyword._from)) { + this.removeRemainingImport(); + return true; + } + if (this.tokens.matches1(_types.TokenType.name) || this.tokens.matches1(_types.TokenType.star)) { + this.removeRemainingImport(); + return false; + } + if (this.tokens.matches1(_types.TokenType.string)) { + return false; + } + let foundNonTypeImport = false; + let foundAnyNamedImport = false; + while (!this.tokens.matches1(_types.TokenType.string)) { + if (!foundNonTypeImport && this.tokens.matches1(_types.TokenType.braceL) || this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.removeToken(); + if (!this.tokens.matches1(_types.TokenType.braceR)) { + foundAnyNamedImport = true; + } + if (this.tokens.matches2(_types.TokenType.name, _types.TokenType.comma) || this.tokens.matches2(_types.TokenType.name, _types.TokenType.braceR) || this.tokens.matches4(_types.TokenType.name, _types.TokenType.name, _types.TokenType.name, _types.TokenType.comma) || this.tokens.matches4(_types.TokenType.name, _types.TokenType.name, _types.TokenType.name, _types.TokenType.braceR)) { + foundNonTypeImport = true; + } + } + this.tokens.removeToken(); + } + if (this.keepUnusedImports) { + return false; + } + if (this.isTypeScriptTransformEnabled) { + return !foundNonTypeImport; + } else if (this.isFlowTransformEnabled) { + return foundAnyNamedImport && !foundNonTypeImport; + } else { + return false; + } + } + removeRemainingImport() { + while (!this.tokens.matches1(_types.TokenType.string)) { + this.tokens.removeToken(); + } + } + processIdentifier() { + const token2 = this.tokens.currentToken(); + if (token2.shadowsGlobal) { + return false; + } + if (token2.identifierRole === _tokenizer.IdentifierRole.ObjectShorthand) { + return this.processObjectShorthand(); + } + if (token2.identifierRole !== _tokenizer.IdentifierRole.Access) { + return false; + } + const replacement = this.importProcessor.getIdentifierReplacement( + this.tokens.identifierNameForToken(token2) + ); + if (!replacement) { + return false; + } + let possibleOpenParenIndex = this.tokens.currentIndex() + 1; + while (possibleOpenParenIndex < this.tokens.tokens.length && this.tokens.tokens[possibleOpenParenIndex].type === _types.TokenType.parenR) { + possibleOpenParenIndex++; + } + if (this.tokens.tokens[possibleOpenParenIndex].type === _types.TokenType.parenL) { + if (this.tokens.tokenAtRelativeIndex(1).type === _types.TokenType.parenL && this.tokens.tokenAtRelativeIndex(-1).type !== _types.TokenType._new) { + this.tokens.replaceToken(`${replacement}.call(void 0, `); + this.tokens.removeToken(); + this.rootTransformer.processBalancedCode(); + this.tokens.copyExpectedToken(_types.TokenType.parenR); + } else { + this.tokens.replaceToken(`(0, ${replacement})`); + } + } else { + this.tokens.replaceToken(replacement); + } + return true; + } + processObjectShorthand() { + const identifier2 = this.tokens.identifierName(); + const replacement = this.importProcessor.getIdentifierReplacement(identifier2); + if (!replacement) { + return false; + } + this.tokens.replaceToken(`${identifier2}: ${replacement}`); + return true; + } + processExport() { + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType._enum) || this.tokens.matches3(_types.TokenType._export, _types.TokenType._const, _types.TokenType._enum)) { + this.hadNamedExport = true; + return false; + } + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType._default)) { + if (this.tokens.matches3(_types.TokenType._export, _types.TokenType._default, _types.TokenType._enum)) { + this.hadDefaultExport = true; + return false; + } + this.processExportDefault(); + return true; + } else if (this.tokens.matches2(_types.TokenType._export, _types.TokenType.braceL)) { + this.processExportBindings(); + return true; + } else if (this.tokens.matches2(_types.TokenType._export, _types.TokenType.name) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, _keywords.ContextualKeyword._type)) { + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + if (this.tokens.matches1(_types.TokenType.braceL)) { + while (!this.tokens.matches1(_types.TokenType.braceR)) { + this.tokens.removeToken(); + } + this.tokens.removeToken(); + } else { + this.tokens.removeToken(); + if (this.tokens.matches1(_types.TokenType._as)) { + this.tokens.removeToken(); + this.tokens.removeToken(); + } + } + if (this.tokens.matchesContextual(_keywords.ContextualKeyword._from) && this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, _types.TokenType.string)) { + this.tokens.removeToken(); + this.tokens.removeToken(); + _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens); + } + return true; + } + this.hadNamedExport = true; + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType._var) || this.tokens.matches2(_types.TokenType._export, _types.TokenType._let) || this.tokens.matches2(_types.TokenType._export, _types.TokenType._const)) { + this.processExportVar(); + return true; + } else if (this.tokens.matches2(_types.TokenType._export, _types.TokenType._function) || // export async function + this.tokens.matches3(_types.TokenType._export, _types.TokenType.name, _types.TokenType._function)) { + this.processExportFunction(); + return true; + } else if (this.tokens.matches2(_types.TokenType._export, _types.TokenType._class) || this.tokens.matches3(_types.TokenType._export, _types.TokenType._abstract, _types.TokenType._class) || this.tokens.matches2(_types.TokenType._export, _types.TokenType.at)) { + this.processExportClass(); + return true; + } else if (this.tokens.matches2(_types.TokenType._export, _types.TokenType.star)) { + this.processExportStar(); + return true; + } else { + throw new Error("Unrecognized export syntax."); + } + } + processAssignment() { + const index = this.tokens.currentIndex(); + const identifierToken = this.tokens.tokens[index - 1]; + if (identifierToken.isType || identifierToken.type !== _types.TokenType.name) { + return false; + } + if (identifierToken.shadowsGlobal) { + return false; + } + if (index >= 2 && this.tokens.matches1AtIndex(index - 2, _types.TokenType.dot)) { + return false; + } + if (index >= 2 && [_types.TokenType._var, _types.TokenType._let, _types.TokenType._const].includes(this.tokens.tokens[index - 2].type)) { + return false; + } + const assignmentSnippet = this.importProcessor.resolveExportBinding( + this.tokens.identifierNameForToken(identifierToken) + ); + if (!assignmentSnippet) { + return false; + } + this.tokens.copyToken(); + this.tokens.appendCode(` ${assignmentSnippet} =`); + return true; + } + /** + * Process something like `a += 3`, where `a` might be an exported value. + */ + processComplexAssignment() { + const index = this.tokens.currentIndex(); + const identifierToken = this.tokens.tokens[index - 1]; + if (identifierToken.type !== _types.TokenType.name) { + return false; + } + if (identifierToken.shadowsGlobal) { + return false; + } + if (index >= 2 && this.tokens.matches1AtIndex(index - 2, _types.TokenType.dot)) { + return false; + } + const assignmentSnippet = this.importProcessor.resolveExportBinding( + this.tokens.identifierNameForToken(identifierToken) + ); + if (!assignmentSnippet) { + return false; + } + this.tokens.appendCode(` = ${assignmentSnippet}`); + this.tokens.copyToken(); + return true; + } + /** + * Process something like `++a`, where `a` might be an exported value. + */ + processPreIncDec() { + const index = this.tokens.currentIndex(); + const identifierToken = this.tokens.tokens[index + 1]; + if (identifierToken.type !== _types.TokenType.name) { + return false; + } + if (identifierToken.shadowsGlobal) { + return false; + } + if (index + 2 < this.tokens.tokens.length && (this.tokens.matches1AtIndex(index + 2, _types.TokenType.dot) || this.tokens.matches1AtIndex(index + 2, _types.TokenType.bracketL) || this.tokens.matches1AtIndex(index + 2, _types.TokenType.parenL))) { + return false; + } + const identifierName = this.tokens.identifierNameForToken(identifierToken); + const assignmentSnippet = this.importProcessor.resolveExportBinding(identifierName); + if (!assignmentSnippet) { + return false; + } + this.tokens.appendCode(`${assignmentSnippet} = `); + this.tokens.copyToken(); + return true; + } + /** + * Process something like `a++`, where `a` might be an exported value. + * This starts at the `a`, not at the `++`. + */ + processPostIncDec() { + const index = this.tokens.currentIndex(); + const identifierToken = this.tokens.tokens[index]; + const operatorToken = this.tokens.tokens[index + 1]; + if (identifierToken.type !== _types.TokenType.name) { + return false; + } + if (identifierToken.shadowsGlobal) { + return false; + } + if (index >= 1 && this.tokens.matches1AtIndex(index - 1, _types.TokenType.dot)) { + return false; + } + const identifierName = this.tokens.identifierNameForToken(identifierToken); + const assignmentSnippet = this.importProcessor.resolveExportBinding(identifierName); + if (!assignmentSnippet) { + return false; + } + const operatorCode = this.tokens.rawCodeForToken(operatorToken); + const base = this.importProcessor.getIdentifierReplacement(identifierName) || identifierName; + if (operatorCode === "++") { + this.tokens.replaceToken(`(${base} = ${assignmentSnippet} = ${base} + 1, ${base} - 1)`); + } else if (operatorCode === "--") { + this.tokens.replaceToken(`(${base} = ${assignmentSnippet} = ${base} - 1, ${base} + 1)`); + } else { + throw new Error(`Unexpected operator: ${operatorCode}`); + } + this.tokens.removeToken(); + return true; + } + processExportDefault() { + let exportedRuntimeValue = true; + if (this.tokens.matches4(_types.TokenType._export, _types.TokenType._default, _types.TokenType._function, _types.TokenType.name) || // export default async function + this.tokens.matches5(_types.TokenType._export, _types.TokenType._default, _types.TokenType.name, _types.TokenType._function, _types.TokenType.name) && this.tokens.matchesContextualAtIndex( + this.tokens.currentIndex() + 2, + _keywords.ContextualKeyword._async + )) { + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + const name = this.processNamedFunction(); + this.tokens.appendCode(` exports.default = ${name};`); + } else if (this.tokens.matches4(_types.TokenType._export, _types.TokenType._default, _types.TokenType._class, _types.TokenType.name) || this.tokens.matches5(_types.TokenType._export, _types.TokenType._default, _types.TokenType._abstract, _types.TokenType._class, _types.TokenType.name) || this.tokens.matches3(_types.TokenType._export, _types.TokenType._default, _types.TokenType.at)) { + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + this.copyDecorators(); + if (this.tokens.matches1(_types.TokenType._abstract)) { + this.tokens.removeToken(); + } + const name = this.rootTransformer.processNamedClass(); + this.tokens.appendCode(` exports.default = ${name};`); + } else if (_shouldElideDefaultExport2.default.call( + void 0, + this.isTypeScriptTransformEnabled, + this.keepUnusedImports, + this.tokens, + this.declarationInfo + )) { + exportedRuntimeValue = false; + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + this.tokens.removeToken(); + } else if (this.reactHotLoaderTransformer) { + const defaultVarName = this.nameManager.claimFreeName("_default"); + this.tokens.replaceToken(`let ${defaultVarName}; exports.`); + this.tokens.copyToken(); + this.tokens.appendCode(` = ${defaultVarName} =`); + this.reactHotLoaderTransformer.setExtractedDefaultExportName(defaultVarName); + } else { + this.tokens.replaceToken("exports."); + this.tokens.copyToken(); + this.tokens.appendCode(" ="); + } + if (exportedRuntimeValue) { + this.hadDefaultExport = true; + } + } + copyDecorators() { + while (this.tokens.matches1(_types.TokenType.at)) { + this.tokens.copyToken(); + if (this.tokens.matches1(_types.TokenType.parenL)) { + this.tokens.copyExpectedToken(_types.TokenType.parenL); + this.rootTransformer.processBalancedCode(); + this.tokens.copyExpectedToken(_types.TokenType.parenR); + } else { + this.tokens.copyExpectedToken(_types.TokenType.name); + while (this.tokens.matches1(_types.TokenType.dot)) { + this.tokens.copyExpectedToken(_types.TokenType.dot); + this.tokens.copyExpectedToken(_types.TokenType.name); + } + if (this.tokens.matches1(_types.TokenType.parenL)) { + this.tokens.copyExpectedToken(_types.TokenType.parenL); + this.rootTransformer.processBalancedCode(); + this.tokens.copyExpectedToken(_types.TokenType.parenR); + } + } + } + } + /** + * Transform a declaration like `export var`, `export let`, or `export const`. + */ + processExportVar() { + if (this.isSimpleExportVar()) { + this.processSimpleExportVar(); + } else { + this.processComplexExportVar(); + } + } + /** + * Determine if the export is of the form: + * export var/let/const [varName] = [expr]; + * In other words, determine if function name inference might apply. + */ + isSimpleExportVar() { + let tokenIndex = this.tokens.currentIndex(); + tokenIndex++; + tokenIndex++; + if (!this.tokens.matches1AtIndex(tokenIndex, _types.TokenType.name)) { + return false; + } + tokenIndex++; + while (tokenIndex < this.tokens.tokens.length && this.tokens.tokens[tokenIndex].isType) { + tokenIndex++; + } + if (!this.tokens.matches1AtIndex(tokenIndex, _types.TokenType.eq)) { + return false; + } + return true; + } + /** + * Transform an `export var` declaration initializing a single variable. + * + * For example, this: + * export const f = () => {}; + * becomes this: + * const f = () => {}; exports.f = f; + * + * The variable is unused (e.g. exports.f has the true value of the export). + * We need to produce an assignment of this form so that the function will + * have an inferred name of "f", which wouldn't happen in the more general + * case below. + */ + processSimpleExportVar() { + this.tokens.removeInitialToken(); + this.tokens.copyToken(); + const varName = this.tokens.identifierName(); + while (!this.tokens.matches1(_types.TokenType.eq)) { + this.rootTransformer.processToken(); + } + const endIndex = this.tokens.currentToken().rhsEndIndex; + if (endIndex == null) { + throw new Error("Expected = token with an end index."); + } + while (this.tokens.currentIndex() < endIndex) { + this.rootTransformer.processToken(); + } + this.tokens.appendCode(`; exports.${varName} = ${varName}`); + } + /** + * Transform normal declaration exports, including handling destructuring. + * For example, this: + * export const {x: [a = 2, b], c} = d; + * becomes this: + * ({x: [exports.a = 2, exports.b], c: exports.c} = d;) + */ + processComplexExportVar() { + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + const needsParens = this.tokens.matches1(_types.TokenType.braceL); + if (needsParens) { + this.tokens.appendCode("("); + } + let depth = 0; + while (true) { + if (this.tokens.matches1(_types.TokenType.braceL) || this.tokens.matches1(_types.TokenType.dollarBraceL) || this.tokens.matches1(_types.TokenType.bracketL)) { + depth++; + this.tokens.copyToken(); + } else if (this.tokens.matches1(_types.TokenType.braceR) || this.tokens.matches1(_types.TokenType.bracketR)) { + depth--; + this.tokens.copyToken(); + } else if (depth === 0 && !this.tokens.matches1(_types.TokenType.name) && !this.tokens.currentToken().isType) { + break; + } else if (this.tokens.matches1(_types.TokenType.eq)) { + const endIndex = this.tokens.currentToken().rhsEndIndex; + if (endIndex == null) { + throw new Error("Expected = token with an end index."); + } + while (this.tokens.currentIndex() < endIndex) { + this.rootTransformer.processToken(); + } + } else { + const token2 = this.tokens.currentToken(); + if (_tokenizer.isDeclaration.call(void 0, token2)) { + const name = this.tokens.identifierName(); + let replacement = this.importProcessor.getIdentifierReplacement(name); + if (replacement === null) { + throw new Error(`Expected a replacement for ${name} in \`export var\` syntax.`); + } + if (_tokenizer.isObjectShorthandDeclaration.call(void 0, token2)) { + replacement = `${name}: ${replacement}`; + } + this.tokens.replaceToken(replacement); + } else { + this.rootTransformer.processToken(); + } + } + } + if (needsParens) { + const endIndex = this.tokens.currentToken().rhsEndIndex; + if (endIndex == null) { + throw new Error("Expected = token with an end index."); + } + while (this.tokens.currentIndex() < endIndex) { + this.rootTransformer.processToken(); + } + this.tokens.appendCode(")"); + } + } + /** + * Transform this: + * export function foo() {} + * into this: + * function foo() {} exports.foo = foo; + */ + processExportFunction() { + this.tokens.replaceToken(""); + const name = this.processNamedFunction(); + this.tokens.appendCode(` exports.${name} = ${name};`); + } + /** + * Skip past a function with a name and return that name. + */ + processNamedFunction() { + if (this.tokens.matches1(_types.TokenType._function)) { + this.tokens.copyToken(); + } else if (this.tokens.matches2(_types.TokenType.name, _types.TokenType._function)) { + if (!this.tokens.matchesContextual(_keywords.ContextualKeyword._async)) { + throw new Error("Expected async keyword in function export."); + } + this.tokens.copyToken(); + this.tokens.copyToken(); + } + if (this.tokens.matches1(_types.TokenType.star)) { + this.tokens.copyToken(); + } + if (!this.tokens.matches1(_types.TokenType.name)) { + throw new Error("Expected identifier for exported function name."); + } + const name = this.tokens.identifierName(); + this.tokens.copyToken(); + if (this.tokens.currentToken().isType) { + this.tokens.removeInitialToken(); + while (this.tokens.currentToken().isType) { + this.tokens.removeToken(); + } + } + this.tokens.copyExpectedToken(_types.TokenType.parenL); + this.rootTransformer.processBalancedCode(); + this.tokens.copyExpectedToken(_types.TokenType.parenR); + this.rootTransformer.processPossibleTypeRange(); + this.tokens.copyExpectedToken(_types.TokenType.braceL); + this.rootTransformer.processBalancedCode(); + this.tokens.copyExpectedToken(_types.TokenType.braceR); + return name; + } + /** + * Transform this: + * export class A {} + * into this: + * class A {} exports.A = A; + */ + processExportClass() { + this.tokens.removeInitialToken(); + this.copyDecorators(); + if (this.tokens.matches1(_types.TokenType._abstract)) { + this.tokens.removeToken(); + } + const name = this.rootTransformer.processNamedClass(); + this.tokens.appendCode(` exports.${name} = ${name};`); + } + /** + * Transform this: + * export {a, b as c}; + * into this: + * exports.a = a; exports.c = b; + * + * OR + * + * Transform this: + * export {a, b as c} from './foo'; + * into the pre-generated Object.defineProperty code from the ImportProcessor. + * + * For the first case, if the TypeScript transform is enabled, we need to skip + * exports that are only defined as types. + */ + processExportBindings() { + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + const isReExport = _isExportFrom2.default.call(void 0, this.tokens); + const exportStatements = []; + while (true) { + if (this.tokens.matches1(_types.TokenType.braceR)) { + this.tokens.removeToken(); + break; + } + const specifierInfo = _getImportExportSpecifierInfo2.default.call(void 0, this.tokens); + while (this.tokens.currentIndex() < specifierInfo.endIndex) { + this.tokens.removeToken(); + } + const shouldRemoveExport = specifierInfo.isType || !isReExport && this.shouldElideExportedIdentifier(specifierInfo.leftName); + if (!shouldRemoveExport) { + const exportedName = specifierInfo.rightName; + if (exportedName === "default") { + this.hadDefaultExport = true; + } else { + this.hadNamedExport = true; + } + const localName = specifierInfo.leftName; + const newLocalName = this.importProcessor.getIdentifierReplacement(localName); + exportStatements.push(`exports.${exportedName} = ${newLocalName || localName};`); + } + if (this.tokens.matches1(_types.TokenType.braceR)) { + this.tokens.removeToken(); + break; + } + if (this.tokens.matches2(_types.TokenType.comma, _types.TokenType.braceR)) { + this.tokens.removeToken(); + this.tokens.removeToken(); + break; + } else if (this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.removeToken(); + } else { + throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.currentToken())}`); + } + } + if (this.tokens.matchesContextual(_keywords.ContextualKeyword._from)) { + this.tokens.removeToken(); + const path = this.tokens.stringValue(); + this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path)); + _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens); + } else { + this.tokens.appendCode(exportStatements.join(" ")); + } + if (this.tokens.matches1(_types.TokenType.semi)) { + this.tokens.removeToken(); + } + } + processExportStar() { + this.tokens.removeInitialToken(); + while (!this.tokens.matches1(_types.TokenType.string)) { + this.tokens.removeToken(); + } + const path = this.tokens.stringValue(); + this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path)); + _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens); + if (this.tokens.matches1(_types.TokenType.semi)) { + this.tokens.removeToken(); + } + } + shouldElideExportedIdentifier(name) { + return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && !this.declarationInfo.valueDeclarations.has(name); + } + }; + exports2.default = CJSImportTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/ESMImportTransformer.js +var require_ESMImportTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/ESMImportTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _keywords = require_keywords(); + var _types = require_types(); + var _elideImportEquals = require_elideImportEquals(); + var _elideImportEquals2 = _interopRequireDefault(_elideImportEquals); + var _getDeclarationInfo = require_getDeclarationInfo(); + var _getDeclarationInfo2 = _interopRequireDefault(_getDeclarationInfo); + var _getImportExportSpecifierInfo = require_getImportExportSpecifierInfo(); + var _getImportExportSpecifierInfo2 = _interopRequireDefault(_getImportExportSpecifierInfo); + var _getNonTypeIdentifiers = require_getNonTypeIdentifiers(); + var _isExportFrom = require_isExportFrom(); + var _isExportFrom2 = _interopRequireDefault(_isExportFrom); + var _removeMaybeImportAttributes = require_removeMaybeImportAttributes(); + var _shouldElideDefaultExport = require_shouldElideDefaultExport(); + var _shouldElideDefaultExport2 = _interopRequireDefault(_shouldElideDefaultExport); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var ESMImportTransformer = class extends _Transformer2.default { + constructor(tokens, nameManager, helperManager, reactHotLoaderTransformer, isTypeScriptTransformEnabled, isFlowTransformEnabled, keepUnusedImports, options2) { + super(); + this.tokens = tokens; + this.nameManager = nameManager; + this.helperManager = helperManager; + this.reactHotLoaderTransformer = reactHotLoaderTransformer; + this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled; + this.isFlowTransformEnabled = isFlowTransformEnabled; + this.keepUnusedImports = keepUnusedImports; + ; + this.nonTypeIdentifiers = isTypeScriptTransformEnabled && !keepUnusedImports ? _getNonTypeIdentifiers.getNonTypeIdentifiers.call(void 0, tokens, options2) : /* @__PURE__ */ new Set(); + this.declarationInfo = isTypeScriptTransformEnabled && !keepUnusedImports ? _getDeclarationInfo2.default.call(void 0, tokens) : _getDeclarationInfo.EMPTY_DECLARATION_INFO; + this.injectCreateRequireForImportRequire = Boolean(options2.injectCreateRequireForImportRequire); + } + process() { + if (this.tokens.matches3(_types.TokenType._import, _types.TokenType.name, _types.TokenType.eq)) { + return this.processImportEquals(); + } + if (this.tokens.matches4(_types.TokenType._import, _types.TokenType.name, _types.TokenType.name, _types.TokenType.eq) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, _keywords.ContextualKeyword._type)) { + this.tokens.removeInitialToken(); + for (let i4 = 0; i4 < 7; i4++) { + this.tokens.removeToken(); + } + return true; + } + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType.eq)) { + this.tokens.replaceToken("module.exports"); + return true; + } + if (this.tokens.matches5(_types.TokenType._export, _types.TokenType._import, _types.TokenType.name, _types.TokenType.name, _types.TokenType.eq) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 2, _keywords.ContextualKeyword._type)) { + this.tokens.removeInitialToken(); + for (let i4 = 0; i4 < 8; i4++) { + this.tokens.removeToken(); + } + return true; + } + if (this.tokens.matches1(_types.TokenType._import)) { + return this.processImport(); + } + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType._default)) { + return this.processExportDefault(); + } + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType.braceL)) { + return this.processNamedExports(); + } + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType.name) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, _keywords.ContextualKeyword._type)) { + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + if (this.tokens.matches1(_types.TokenType.braceL)) { + while (!this.tokens.matches1(_types.TokenType.braceR)) { + this.tokens.removeToken(); + } + this.tokens.removeToken(); + } else { + this.tokens.removeToken(); + if (this.tokens.matches1(_types.TokenType._as)) { + this.tokens.removeToken(); + this.tokens.removeToken(); + } + } + if (this.tokens.matchesContextual(_keywords.ContextualKeyword._from) && this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, _types.TokenType.string)) { + this.tokens.removeToken(); + this.tokens.removeToken(); + _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens); + } + return true; + } + return false; + } + processImportEquals() { + const importName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1); + if (this.shouldAutomaticallyElideImportedName(importName)) { + _elideImportEquals2.default.call(void 0, this.tokens); + } else if (this.injectCreateRequireForImportRequire) { + this.tokens.replaceToken("const"); + this.tokens.copyToken(); + this.tokens.copyToken(); + this.tokens.replaceToken(this.helperManager.getHelperName("require")); + } else { + this.tokens.replaceToken("const"); + } + return true; + } + processImport() { + if (this.tokens.matches2(_types.TokenType._import, _types.TokenType.parenL)) { + return false; + } + const snapshot = this.tokens.snapshot(); + const allImportsRemoved = this.removeImportTypeBindings(); + if (allImportsRemoved) { + this.tokens.restoreToSnapshot(snapshot); + while (!this.tokens.matches1(_types.TokenType.string)) { + this.tokens.removeToken(); + } + this.tokens.removeToken(); + _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens); + if (this.tokens.matches1(_types.TokenType.semi)) { + this.tokens.removeToken(); + } + } + return true; + } + /** + * Remove type bindings from this import, leaving the rest of the import intact. + * + * Return true if this import was ONLY types, and thus is eligible for removal. This will bail out + * of the replacement operation, so we can return early here. + */ + removeImportTypeBindings() { + this.tokens.copyExpectedToken(_types.TokenType._import); + if (this.tokens.matchesContextual(_keywords.ContextualKeyword._type) && !this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, _types.TokenType.comma) && !this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, _keywords.ContextualKeyword._from)) { + return true; + } + if (this.tokens.matches1(_types.TokenType.string)) { + this.tokens.copyToken(); + return false; + } + if (this.tokens.matchesContextual(_keywords.ContextualKeyword._module) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 2, _keywords.ContextualKeyword._from)) { + this.tokens.copyToken(); + } + let foundNonTypeImport = false; + let foundAnyNamedImport = false; + let needsComma = false; + if (this.tokens.matches1(_types.TokenType.name)) { + if (this.shouldAutomaticallyElideImportedName(this.tokens.identifierName())) { + this.tokens.removeToken(); + if (this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.removeToken(); + } + } else { + foundNonTypeImport = true; + this.tokens.copyToken(); + if (this.tokens.matches1(_types.TokenType.comma)) { + needsComma = true; + this.tokens.removeToken(); + } + } + } + if (this.tokens.matches1(_types.TokenType.star)) { + if (this.shouldAutomaticallyElideImportedName(this.tokens.identifierNameAtRelativeIndex(2))) { + this.tokens.removeToken(); + this.tokens.removeToken(); + this.tokens.removeToken(); + } else { + if (needsComma) { + this.tokens.appendCode(","); + } + foundNonTypeImport = true; + this.tokens.copyExpectedToken(_types.TokenType.star); + this.tokens.copyExpectedToken(_types.TokenType.name); + this.tokens.copyExpectedToken(_types.TokenType.name); + } + } else if (this.tokens.matches1(_types.TokenType.braceL)) { + if (needsComma) { + this.tokens.appendCode(","); + } + this.tokens.copyToken(); + while (!this.tokens.matches1(_types.TokenType.braceR)) { + foundAnyNamedImport = true; + const specifierInfo = _getImportExportSpecifierInfo2.default.call(void 0, this.tokens); + if (specifierInfo.isType || this.shouldAutomaticallyElideImportedName(specifierInfo.rightName)) { + while (this.tokens.currentIndex() < specifierInfo.endIndex) { + this.tokens.removeToken(); + } + if (this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.removeToken(); + } + } else { + foundNonTypeImport = true; + while (this.tokens.currentIndex() < specifierInfo.endIndex) { + this.tokens.copyToken(); + } + if (this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.copyToken(); + } + } + } + this.tokens.copyExpectedToken(_types.TokenType.braceR); + } + if (this.keepUnusedImports) { + return false; + } + if (this.isTypeScriptTransformEnabled) { + return !foundNonTypeImport; + } else if (this.isFlowTransformEnabled) { + return foundAnyNamedImport && !foundNonTypeImport; + } else { + return false; + } + } + shouldAutomaticallyElideImportedName(name) { + return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && !this.nonTypeIdentifiers.has(name); + } + processExportDefault() { + if (_shouldElideDefaultExport2.default.call( + void 0, + this.isTypeScriptTransformEnabled, + this.keepUnusedImports, + this.tokens, + this.declarationInfo + )) { + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + this.tokens.removeToken(); + return true; + } + const alreadyHasName = this.tokens.matches4(_types.TokenType._export, _types.TokenType._default, _types.TokenType._function, _types.TokenType.name) || // export default async function + this.tokens.matches5(_types.TokenType._export, _types.TokenType._default, _types.TokenType.name, _types.TokenType._function, _types.TokenType.name) && this.tokens.matchesContextualAtIndex( + this.tokens.currentIndex() + 2, + _keywords.ContextualKeyword._async + ) || this.tokens.matches4(_types.TokenType._export, _types.TokenType._default, _types.TokenType._class, _types.TokenType.name) || this.tokens.matches5(_types.TokenType._export, _types.TokenType._default, _types.TokenType._abstract, _types.TokenType._class, _types.TokenType.name); + if (!alreadyHasName && this.reactHotLoaderTransformer) { + const defaultVarName = this.nameManager.claimFreeName("_default"); + this.tokens.replaceToken(`let ${defaultVarName}; export`); + this.tokens.copyToken(); + this.tokens.appendCode(` ${defaultVarName} =`); + this.reactHotLoaderTransformer.setExtractedDefaultExportName(defaultVarName); + return true; + } + return false; + } + /** + * Handle a statement with one of these forms: + * export {a, type b}; + * export {c, type d} from 'foo'; + * + * In both cases, any explicit type exports should be removed. In the first + * case, we also need to handle implicit export elision for names declared as + * types. In the second case, we must NOT do implicit named export elision, + * but we must remove the runtime import if all exports are type exports. + */ + processNamedExports() { + if (!this.isTypeScriptTransformEnabled) { + return false; + } + this.tokens.copyExpectedToken(_types.TokenType._export); + this.tokens.copyExpectedToken(_types.TokenType.braceL); + const isReExport = _isExportFrom2.default.call(void 0, this.tokens); + let foundNonTypeExport = false; + while (!this.tokens.matches1(_types.TokenType.braceR)) { + const specifierInfo = _getImportExportSpecifierInfo2.default.call(void 0, this.tokens); + if (specifierInfo.isType || !isReExport && this.shouldElideExportedName(specifierInfo.leftName)) { + while (this.tokens.currentIndex() < specifierInfo.endIndex) { + this.tokens.removeToken(); + } + if (this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.removeToken(); + } + } else { + foundNonTypeExport = true; + while (this.tokens.currentIndex() < specifierInfo.endIndex) { + this.tokens.copyToken(); + } + if (this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.copyToken(); + } + } + } + this.tokens.copyExpectedToken(_types.TokenType.braceR); + if (!this.keepUnusedImports && isReExport && !foundNonTypeExport) { + this.tokens.removeToken(); + this.tokens.removeToken(); + _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens); + } + return true; + } + /** + * ESM elides all imports with the rule that we only elide if we see that it's + * a type and never see it as a value. This is in contrast to CJS, which + * elides imports that are completely unknown. + */ + shouldElideExportedName(name) { + return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && this.declarationInfo.typeDeclarations.has(name) && !this.declarationInfo.valueDeclarations.has(name); + } + }; + exports2.default = ESMImportTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/FlowTransformer.js +var require_FlowTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/FlowTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _keywords = require_keywords(); + var _types = require_types(); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var FlowTransformer = class extends _Transformer2.default { + constructor(rootTransformer, tokens, isImportsTransformEnabled) { + super(); + this.rootTransformer = rootTransformer; + this.tokens = tokens; + this.isImportsTransformEnabled = isImportsTransformEnabled; + ; + } + process() { + if (this.rootTransformer.processPossibleArrowParamEnd() || this.rootTransformer.processPossibleAsyncArrowWithTypeParams() || this.rootTransformer.processPossibleTypeRange()) { + return true; + } + if (this.tokens.matches1(_types.TokenType._enum)) { + this.processEnum(); + return true; + } + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType._enum)) { + this.processNamedExportEnum(); + return true; + } + if (this.tokens.matches3(_types.TokenType._export, _types.TokenType._default, _types.TokenType._enum)) { + this.processDefaultExportEnum(); + return true; + } + return false; + } + /** + * Handle a declaration like: + * export enum E ... + * + * With this imports transform, this becomes: + * const E = [[enum]]; exports.E = E; + * + * otherwise, it becomes: + * export const E = [[enum]]; + */ + processNamedExportEnum() { + if (this.isImportsTransformEnabled) { + this.tokens.removeInitialToken(); + const enumName = this.tokens.identifierNameAtRelativeIndex(1); + this.processEnum(); + this.tokens.appendCode(` exports.${enumName} = ${enumName};`); + } else { + this.tokens.copyToken(); + this.processEnum(); + } + } + /** + * Handle a declaration like: + * export default enum E + * + * With the imports transform, this becomes: + * const E = [[enum]]; exports.default = E; + * + * otherwise, it becomes: + * const E = [[enum]]; export default E; + */ + processDefaultExportEnum() { + this.tokens.removeInitialToken(); + this.tokens.removeToken(); + const enumName = this.tokens.identifierNameAtRelativeIndex(1); + this.processEnum(); + if (this.isImportsTransformEnabled) { + this.tokens.appendCode(` exports.default = ${enumName};`); + } else { + this.tokens.appendCode(` export default ${enumName};`); + } + } + /** + * Transpile flow enums to invoke the "flow-enums-runtime" library. + * + * Currently, the transpiled code always uses `require("flow-enums-runtime")`, + * but if future flexibility is needed, we could expose a config option for + * this string (similar to configurable JSX). Even when targeting ESM, the + * default behavior of babel-plugin-transform-flow-enums is to use require + * rather than injecting an import. + * + * Flow enums are quite a bit simpler than TS enums and have some convenient + * constraints: + * - Element initializers must be either always present or always absent. That + * means that we can use fixed lookahead on the first element (if any) and + * assume that all elements are like that. + * - The right-hand side of an element initializer must be a literal value, + * not a complex expression and not referencing other elements. That means + * we can simply copy a single token. + * + * Enums can be broken up into three basic cases: + * + * Mirrored enums: + * enum E {A, B} + * -> + * const E = require("flow-enums-runtime").Mirrored(["A", "B"]); + * + * Initializer enums: + * enum E {A = 1, B = 2} + * -> + * const E = require("flow-enums-runtime")({A: 1, B: 2}); + * + * Symbol enums: + * enum E of symbol {A, B} + * -> + * const E = require("flow-enums-runtime")({A: Symbol("A"), B: Symbol("B")}); + * + * We can statically detect which of the three cases this is by looking at the + * "of" declaration (if any) and seeing if the first element has an initializer. + * Since the other transform details are so similar between the three cases, we + * use a single implementation and vary the transform within processEnumElement + * based on case. + */ + processEnum() { + this.tokens.replaceToken("const"); + this.tokens.copyExpectedToken(_types.TokenType.name); + let isSymbolEnum = false; + if (this.tokens.matchesContextual(_keywords.ContextualKeyword._of)) { + this.tokens.removeToken(); + isSymbolEnum = this.tokens.matchesContextual(_keywords.ContextualKeyword._symbol); + this.tokens.removeToken(); + } + const hasInitializers = this.tokens.matches3(_types.TokenType.braceL, _types.TokenType.name, _types.TokenType.eq); + this.tokens.appendCode(' = require("flow-enums-runtime")'); + const isMirrored = !isSymbolEnum && !hasInitializers; + this.tokens.replaceTokenTrimmingLeftWhitespace(isMirrored ? ".Mirrored([" : "({"); + while (!this.tokens.matches1(_types.TokenType.braceR)) { + if (this.tokens.matches1(_types.TokenType.ellipsis)) { + this.tokens.removeToken(); + break; + } + this.processEnumElement(isSymbolEnum, hasInitializers); + if (this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.copyToken(); + } + } + this.tokens.replaceToken(isMirrored ? "]);" : "});"); + } + /** + * Process an individual enum element, producing either an array element or an + * object element based on what type of enum this is. + */ + processEnumElement(isSymbolEnum, hasInitializers) { + if (isSymbolEnum) { + const elementName = this.tokens.identifierName(); + this.tokens.copyToken(); + this.tokens.appendCode(`: Symbol("${elementName}")`); + } else if (hasInitializers) { + this.tokens.copyToken(); + this.tokens.replaceTokenTrimmingLeftWhitespace(":"); + this.tokens.copyToken(); + } else { + this.tokens.replaceToken(`"${this.tokens.identifierName()}"`); + } + } + }; + exports2.default = FlowTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/JestHoistTransformer.js +var require_JestHoistTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/JestHoistTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function _optionalChain(ops) { + let lastAccessLHS = void 0; + let value = ops[0]; + let i4 = 1; + while (i4 < ops.length) { + const op = ops[i4]; + const fn2 = ops[i4 + 1]; + i4 += 2; + if ((op === "optionalAccess" || op === "optionalCall") && value == null) { + return void 0; + } + if (op === "access" || op === "optionalAccess") { + lastAccessLHS = value; + value = fn2(value); + } else if (op === "call" || op === "optionalCall") { + value = fn2((...args) => value.call(lastAccessLHS, ...args)); + lastAccessLHS = void 0; + } + } + return value; + } + var _types = require_types(); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var JEST_GLOBAL_NAME = "jest"; + var HOISTED_METHODS = ["mock", "unmock", "enableAutomock", "disableAutomock"]; + var JestHoistTransformer = class _JestHoistTransformer extends _Transformer2.default { + __init() { + this.hoistedFunctionNames = []; + } + constructor(rootTransformer, tokens, nameManager, importProcessor) { + super(); + this.rootTransformer = rootTransformer; + this.tokens = tokens; + this.nameManager = nameManager; + this.importProcessor = importProcessor; + _JestHoistTransformer.prototype.__init.call(this); + ; + } + process() { + if (this.tokens.currentToken().scopeDepth === 0 && this.tokens.matches4(_types.TokenType.name, _types.TokenType.dot, _types.TokenType.name, _types.TokenType.parenL) && this.tokens.identifierName() === JEST_GLOBAL_NAME) { + if (_optionalChain([this, "access", (_3) => _3.importProcessor, "optionalAccess", (_22) => _22.getGlobalNames, "call", (_3) => _3(), "optionalAccess", (_4) => _4.has, "call", (_5) => _5(JEST_GLOBAL_NAME)])) { + return false; + } + return this.extractHoistedCalls(); + } + return false; + } + getHoistedCode() { + if (this.hoistedFunctionNames.length > 0) { + return this.hoistedFunctionNames.map((name) => `${name}();`).join(""); + } + return ""; + } + /** + * Extracts any methods calls on the jest-object that should be hoisted. + * + * According to the jest docs, https://jestjs.io/docs/en/jest-object#jestmockmodulename-factory-options, + * mock, unmock, enableAutomock, disableAutomock, are the methods that should be hoisted. + * + * We do not apply the same checks of the arguments as babel-plugin-jest-hoist does. + */ + extractHoistedCalls() { + this.tokens.removeToken(); + let followsNonHoistedJestCall = false; + while (this.tokens.matches3(_types.TokenType.dot, _types.TokenType.name, _types.TokenType.parenL)) { + const methodName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1); + const shouldHoist = HOISTED_METHODS.includes(methodName); + if (shouldHoist) { + const hoistedFunctionName = this.nameManager.claimFreeName("__jestHoist"); + this.hoistedFunctionNames.push(hoistedFunctionName); + this.tokens.replaceToken(`function ${hoistedFunctionName}(){${JEST_GLOBAL_NAME}.`); + this.tokens.copyToken(); + this.tokens.copyToken(); + this.rootTransformer.processBalancedCode(); + this.tokens.copyExpectedToken(_types.TokenType.parenR); + this.tokens.appendCode(";}"); + followsNonHoistedJestCall = false; + } else { + if (followsNonHoistedJestCall) { + this.tokens.copyToken(); + } else { + this.tokens.replaceToken(`${JEST_GLOBAL_NAME}.`); + } + this.tokens.copyToken(); + this.tokens.copyToken(); + this.rootTransformer.processBalancedCode(); + this.tokens.copyExpectedToken(_types.TokenType.parenR); + followsNonHoistedJestCall = true; + } + } + return true; + } + }; + exports2.default = JestHoistTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/NumericSeparatorTransformer.js +var require_NumericSeparatorTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/NumericSeparatorTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _types = require_types(); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var NumericSeparatorTransformer = class extends _Transformer2.default { + constructor(tokens) { + super(); + this.tokens = tokens; + ; + } + process() { + if (this.tokens.matches1(_types.TokenType.num)) { + const code = this.tokens.currentTokenCode(); + if (code.includes("_")) { + this.tokens.replaceToken(code.replace(/_/g, "")); + return true; + } + } + return false; + } + }; + exports2.default = NumericSeparatorTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/OptionalCatchBindingTransformer.js +var require_OptionalCatchBindingTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/OptionalCatchBindingTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _types = require_types(); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var OptionalCatchBindingTransformer = class extends _Transformer2.default { + constructor(tokens, nameManager) { + super(); + this.tokens = tokens; + this.nameManager = nameManager; + ; + } + process() { + if (this.tokens.matches2(_types.TokenType._catch, _types.TokenType.braceL)) { + this.tokens.copyToken(); + this.tokens.appendCode(` (${this.nameManager.claimFreeName("e")})`); + return true; + } + return false; + } + }; + exports2.default = OptionalCatchBindingTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/OptionalChainingNullishTransformer.js +var require_OptionalChainingNullishTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/OptionalChainingNullishTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _types = require_types(); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var OptionalChainingNullishTransformer = class extends _Transformer2.default { + constructor(tokens, nameManager) { + super(); + this.tokens = tokens; + this.nameManager = nameManager; + ; + } + process() { + if (this.tokens.matches1(_types.TokenType.nullishCoalescing)) { + const token3 = this.tokens.currentToken(); + if (this.tokens.tokens[token3.nullishStartIndex].isAsyncOperation) { + this.tokens.replaceTokenTrimmingLeftWhitespace(", async () => ("); + } else { + this.tokens.replaceTokenTrimmingLeftWhitespace(", () => ("); + } + return true; + } + if (this.tokens.matches1(_types.TokenType._delete)) { + const nextToken = this.tokens.tokenAtRelativeIndex(1); + if (nextToken.isOptionalChainStart) { + this.tokens.removeInitialToken(); + return true; + } + } + const token2 = this.tokens.currentToken(); + const chainStart = token2.subscriptStartIndex; + if (chainStart != null && this.tokens.tokens[chainStart].isOptionalChainStart && // Super subscripts can't be optional (since super is never null/undefined), and the syntax + // relies on the subscript being intact, so leave this token alone. + this.tokens.tokenAtRelativeIndex(-1).type !== _types.TokenType._super) { + const param = this.nameManager.claimFreeName("_"); + let arrowStartSnippet; + if (chainStart > 0 && this.tokens.matches1AtIndex(chainStart - 1, _types.TokenType._delete) && this.isLastSubscriptInChain()) { + arrowStartSnippet = `${param} => delete ${param}`; + } else { + arrowStartSnippet = `${param} => ${param}`; + } + if (this.tokens.tokens[chainStart].isAsyncOperation) { + arrowStartSnippet = `async ${arrowStartSnippet}`; + } + if (this.tokens.matches2(_types.TokenType.questionDot, _types.TokenType.parenL) || this.tokens.matches2(_types.TokenType.questionDot, _types.TokenType.lessThan)) { + if (this.justSkippedSuper()) { + this.tokens.appendCode(".bind(this)"); + } + this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalCall', ${arrowStartSnippet}`); + } else if (this.tokens.matches2(_types.TokenType.questionDot, _types.TokenType.bracketL)) { + this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${arrowStartSnippet}`); + } else if (this.tokens.matches1(_types.TokenType.questionDot)) { + this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${arrowStartSnippet}.`); + } else if (this.tokens.matches1(_types.TokenType.dot)) { + this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${arrowStartSnippet}.`); + } else if (this.tokens.matches1(_types.TokenType.bracketL)) { + this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${arrowStartSnippet}[`); + } else if (this.tokens.matches1(_types.TokenType.parenL)) { + if (this.justSkippedSuper()) { + this.tokens.appendCode(".bind(this)"); + } + this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'call', ${arrowStartSnippet}(`); + } else { + throw new Error("Unexpected subscript operator in optional chain."); + } + return true; + } + return false; + } + /** + * Determine if the current token is the last of its chain, so that we know whether it's eligible + * to have a delete op inserted. + * + * We can do this by walking forward until we determine one way or another. Each + * isOptionalChainStart token must be paired with exactly one isOptionalChainEnd token after it in + * a nesting way, so we can track depth and walk to the end of the chain (the point where the + * depth goes negative) and see if any other subscript token is after us in the chain. + */ + isLastSubscriptInChain() { + let depth = 0; + for (let i4 = this.tokens.currentIndex() + 1; ; i4++) { + if (i4 >= this.tokens.tokens.length) { + throw new Error("Reached the end of the code while finding the end of the access chain."); + } + if (this.tokens.tokens[i4].isOptionalChainStart) { + depth++; + } else if (this.tokens.tokens[i4].isOptionalChainEnd) { + depth--; + } + if (depth < 0) { + return true; + } + if (depth === 0 && this.tokens.tokens[i4].subscriptStartIndex != null) { + return false; + } + } + } + /** + * Determine if we are the open-paren in an expression like super.a()?.b. + * + * We can do this by walking backward to find the previous subscript. If that subscript was + * preceded by a super, then we must be the subscript after it, so if this is a call expression, + * we'll need to attach the right context. + */ + justSkippedSuper() { + let depth = 0; + let index = this.tokens.currentIndex() - 1; + while (true) { + if (index < 0) { + throw new Error( + "Reached the start of the code while finding the start of the access chain." + ); + } + if (this.tokens.tokens[index].isOptionalChainStart) { + depth--; + } else if (this.tokens.tokens[index].isOptionalChainEnd) { + depth++; + } + if (depth < 0) { + return false; + } + if (depth === 0 && this.tokens.tokens[index].subscriptStartIndex != null) { + return this.tokens.tokens[index - 1].type === _types.TokenType._super; + } + index--; + } + } + }; + exports2.default = OptionalChainingNullishTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/ReactDisplayNameTransformer.js +var require_ReactDisplayNameTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/ReactDisplayNameTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _tokenizer = require_tokenizer(); + var _types = require_types(); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var ReactDisplayNameTransformer = class extends _Transformer2.default { + constructor(rootTransformer, tokens, importProcessor, options2) { + super(); + this.rootTransformer = rootTransformer; + this.tokens = tokens; + this.importProcessor = importProcessor; + this.options = options2; + ; + } + process() { + const startIndex = this.tokens.currentIndex(); + if (this.tokens.identifierName() === "createReactClass") { + const newName = this.importProcessor && this.importProcessor.getIdentifierReplacement("createReactClass"); + if (newName) { + this.tokens.replaceToken(`(0, ${newName})`); + } else { + this.tokens.copyToken(); + } + this.tryProcessCreateClassCall(startIndex); + return true; + } + if (this.tokens.matches3(_types.TokenType.name, _types.TokenType.dot, _types.TokenType.name) && this.tokens.identifierName() === "React" && this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 2) === "createClass") { + const newName = this.importProcessor ? this.importProcessor.getIdentifierReplacement("React") || "React" : "React"; + if (newName) { + this.tokens.replaceToken(newName); + this.tokens.copyToken(); + this.tokens.copyToken(); + } else { + this.tokens.copyToken(); + this.tokens.copyToken(); + this.tokens.copyToken(); + } + this.tryProcessCreateClassCall(startIndex); + return true; + } + return false; + } + /** + * This is called with the token position at the open-paren. + */ + tryProcessCreateClassCall(startIndex) { + const displayName = this.findDisplayName(startIndex); + if (!displayName) { + return; + } + if (this.classNeedsDisplayName()) { + this.tokens.copyExpectedToken(_types.TokenType.parenL); + this.tokens.copyExpectedToken(_types.TokenType.braceL); + this.tokens.appendCode(`displayName: '${displayName}',`); + this.rootTransformer.processBalancedCode(); + this.tokens.copyExpectedToken(_types.TokenType.braceR); + this.tokens.copyExpectedToken(_types.TokenType.parenR); + } + } + findDisplayName(startIndex) { + if (startIndex < 2) { + return null; + } + if (this.tokens.matches2AtIndex(startIndex - 2, _types.TokenType.name, _types.TokenType.eq)) { + return this.tokens.identifierNameAtIndex(startIndex - 2); + } + if (startIndex >= 2 && this.tokens.tokens[startIndex - 2].identifierRole === _tokenizer.IdentifierRole.ObjectKey) { + return this.tokens.identifierNameAtIndex(startIndex - 2); + } + if (this.tokens.matches2AtIndex(startIndex - 2, _types.TokenType._export, _types.TokenType._default)) { + return this.getDisplayNameFromFilename(); + } + return null; + } + getDisplayNameFromFilename() { + const filePath = this.options.filePath || "unknown"; + const pathSegments = filePath.split("/"); + const filename = pathSegments[pathSegments.length - 1]; + const dotIndex = filename.lastIndexOf("."); + const baseFilename = dotIndex === -1 ? filename : filename.slice(0, dotIndex); + if (baseFilename === "index" && pathSegments[pathSegments.length - 2]) { + return pathSegments[pathSegments.length - 2]; + } else { + return baseFilename; + } + } + /** + * We only want to add a display name when this is a function call containing + * one argument, which is an object literal without `displayName` as an + * existing key. + */ + classNeedsDisplayName() { + let index = this.tokens.currentIndex(); + if (!this.tokens.matches2(_types.TokenType.parenL, _types.TokenType.braceL)) { + return false; + } + const objectStartIndex = index + 1; + const objectContextId = this.tokens.tokens[objectStartIndex].contextId; + if (objectContextId == null) { + throw new Error("Expected non-null context ID on object open-brace."); + } + for (; index < this.tokens.tokens.length; index++) { + const token2 = this.tokens.tokens[index]; + if (token2.type === _types.TokenType.braceR && token2.contextId === objectContextId) { + index++; + break; + } + if (this.tokens.identifierNameAtIndex(index) === "displayName" && this.tokens.tokens[index].identifierRole === _tokenizer.IdentifierRole.ObjectKey && token2.contextId === objectContextId) { + return false; + } + } + if (index === this.tokens.tokens.length) { + throw new Error("Unexpected end of input when processing React class."); + } + return this.tokens.matches1AtIndex(index, _types.TokenType.parenR) || this.tokens.matches2AtIndex(index, _types.TokenType.comma, _types.TokenType.parenR); + } + }; + exports2.default = ReactDisplayNameTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/ReactHotLoaderTransformer.js +var require_ReactHotLoaderTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/ReactHotLoaderTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _tokenizer = require_tokenizer(); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var ReactHotLoaderTransformer = class _ReactHotLoaderTransformer extends _Transformer2.default { + __init() { + this.extractedDefaultExportName = null; + } + constructor(tokens, filePath) { + super(); + this.tokens = tokens; + this.filePath = filePath; + _ReactHotLoaderTransformer.prototype.__init.call(this); + ; + } + setExtractedDefaultExportName(extractedDefaultExportName) { + this.extractedDefaultExportName = extractedDefaultExportName; + } + getPrefixCode() { + return ` + (function () { + var enterModule = require('react-hot-loader').enterModule; + enterModule && enterModule(module); + })();`.replace(/\s+/g, " ").trim(); + } + getSuffixCode() { + const topLevelNames = /* @__PURE__ */ new Set(); + for (const token2 of this.tokens.tokens) { + if (!token2.isType && _tokenizer.isTopLevelDeclaration.call(void 0, token2) && token2.identifierRole !== _tokenizer.IdentifierRole.ImportDeclaration) { + topLevelNames.add(this.tokens.identifierNameForToken(token2)); + } + } + const namesToRegister = Array.from(topLevelNames).map((name) => ({ + variableName: name, + uniqueLocalName: name + })); + if (this.extractedDefaultExportName) { + namesToRegister.push({ + variableName: this.extractedDefaultExportName, + uniqueLocalName: "default" + }); + } + return ` +;(function () { + var reactHotLoader = require('react-hot-loader').default; + var leaveModule = require('react-hot-loader').leaveModule; + if (!reactHotLoader) { + return; + } +${namesToRegister.map( + ({ variableName, uniqueLocalName }) => ` reactHotLoader.register(${variableName}, "${uniqueLocalName}", ${JSON.stringify( + this.filePath || "" + )});` + ).join("\n")} + leaveModule(module); +})();`; + } + process() { + return false; + } + }; + exports2.default = ReactHotLoaderTransformer; + } +}); + +// node_modules/sucrase/dist/util/isIdentifier.js +var require_isIdentifier = __commonJS({ + "node_modules/sucrase/dist/util/isIdentifier.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var _identifier = require_identifier(); + var RESERVED_WORDS = /* @__PURE__ */ new Set([ + // Reserved keywords as of ECMAScript 2015 + "break", + "case", + "catch", + "class", + "const", + "continue", + "debugger", + "default", + "delete", + "do", + "else", + "export", + "extends", + "finally", + "for", + "function", + "if", + "import", + "in", + "instanceof", + "new", + "return", + "super", + "switch", + "this", + "throw", + "try", + "typeof", + "var", + "void", + "while", + "with", + "yield", + // Future reserved keywords + "enum", + "implements", + "interface", + "let", + "package", + "private", + "protected", + "public", + "static", + "await", + // Literals that cannot be used as identifiers + "false", + "null", + "true" + ]); + function isIdentifier(name) { + if (name.length === 0) { + return false; + } + if (!_identifier.IS_IDENTIFIER_START[name.charCodeAt(0)]) { + return false; + } + for (let i4 = 1; i4 < name.length; i4++) { + if (!_identifier.IS_IDENTIFIER_CHAR[name.charCodeAt(i4)]) { + return false; + } + } + return !RESERVED_WORDS.has(name); + } + exports2.default = isIdentifier; + } +}); + +// node_modules/sucrase/dist/transformers/TypeScriptTransformer.js +var require_TypeScriptTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/TypeScriptTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _types = require_types(); + var _isIdentifier = require_isIdentifier(); + var _isIdentifier2 = _interopRequireDefault(_isIdentifier); + var _Transformer = require_Transformer(); + var _Transformer2 = _interopRequireDefault(_Transformer); + var TypeScriptTransformer = class extends _Transformer2.default { + constructor(rootTransformer, tokens, isImportsTransformEnabled) { + super(); + this.rootTransformer = rootTransformer; + this.tokens = tokens; + this.isImportsTransformEnabled = isImportsTransformEnabled; + ; + } + process() { + if (this.rootTransformer.processPossibleArrowParamEnd() || this.rootTransformer.processPossibleAsyncArrowWithTypeParams() || this.rootTransformer.processPossibleTypeRange()) { + return true; + } + if (this.tokens.matches1(_types.TokenType._public) || this.tokens.matches1(_types.TokenType._protected) || this.tokens.matches1(_types.TokenType._private) || this.tokens.matches1(_types.TokenType._abstract) || this.tokens.matches1(_types.TokenType._readonly) || this.tokens.matches1(_types.TokenType._override) || this.tokens.matches1(_types.TokenType.nonNullAssertion)) { + this.tokens.removeInitialToken(); + return true; + } + if (this.tokens.matches1(_types.TokenType._enum) || this.tokens.matches2(_types.TokenType._const, _types.TokenType._enum)) { + this.processEnum(); + return true; + } + if (this.tokens.matches2(_types.TokenType._export, _types.TokenType._enum) || this.tokens.matches3(_types.TokenType._export, _types.TokenType._const, _types.TokenType._enum)) { + this.processEnum(true); + return true; + } + return false; + } + processEnum(isExport = false) { + this.tokens.removeInitialToken(); + while (this.tokens.matches1(_types.TokenType._const) || this.tokens.matches1(_types.TokenType._enum)) { + this.tokens.removeToken(); + } + const enumName = this.tokens.identifierName(); + this.tokens.removeToken(); + if (isExport && !this.isImportsTransformEnabled) { + this.tokens.appendCode("export "); + } + this.tokens.appendCode(`var ${enumName}; (function (${enumName})`); + this.tokens.copyExpectedToken(_types.TokenType.braceL); + this.processEnumBody(enumName); + this.tokens.copyExpectedToken(_types.TokenType.braceR); + if (isExport && this.isImportsTransformEnabled) { + this.tokens.appendCode(`)(${enumName} || (exports.${enumName} = ${enumName} = {}));`); + } else { + this.tokens.appendCode(`)(${enumName} || (${enumName} = {}));`); + } + } + /** + * Transform an enum into equivalent JS. This has complexity in a few places: + * - TS allows string enums, numeric enums, and a mix of the two styles within an enum. + * - Enum keys are allowed to be referenced in later enum values. + * - Enum keys are allowed to be strings. + * - When enum values are omitted, they should follow an auto-increment behavior. + */ + processEnumBody(enumName) { + let previousValueCode = null; + while (true) { + if (this.tokens.matches1(_types.TokenType.braceR)) { + break; + } + const { nameStringCode, variableName } = this.extractEnumKeyInfo(this.tokens.currentToken()); + this.tokens.removeInitialToken(); + if (this.tokens.matches3(_types.TokenType.eq, _types.TokenType.string, _types.TokenType.comma) || this.tokens.matches3(_types.TokenType.eq, _types.TokenType.string, _types.TokenType.braceR)) { + this.processStringLiteralEnumMember(enumName, nameStringCode, variableName); + } else if (this.tokens.matches1(_types.TokenType.eq)) { + this.processExplicitValueEnumMember(enumName, nameStringCode, variableName); + } else { + this.processImplicitValueEnumMember( + enumName, + nameStringCode, + variableName, + previousValueCode + ); + } + if (this.tokens.matches1(_types.TokenType.comma)) { + this.tokens.removeToken(); + } + if (variableName != null) { + previousValueCode = variableName; + } else { + previousValueCode = `${enumName}[${nameStringCode}]`; + } + } + } + /** + * Detect name information about this enum key, which will be used to determine which code to emit + * and whether we should declare a variable as part of this declaration. + * + * Some cases to keep in mind: + * - Enum keys can be implicitly referenced later, e.g. `X = 1, Y = X`. In Sucrase, we implement + * this by declaring a variable `X` so that later expressions can use it. + * - In addition to the usual identifier key syntax, enum keys are allowed to be string literals, + * e.g. `"hello world" = 3,`. Template literal syntax is NOT allowed. + * - Even if the enum key is defined as a string literal, it may still be referenced by identifier + * later, e.g. `"X" = 1, Y = X`. That means that we need to detect whether or not a string + * literal is identifier-like and emit a variable if so, even if the declaration did not use an + * identifier. + * - Reserved keywords like `break` are valid enum keys, but are not valid to be referenced later + * and would be a syntax error if we emitted a variable, so we need to skip the variable + * declaration in those cases. + * + * The variableName return value captures these nuances: if non-null, we can and must emit a + * variable declaration, and if null, we can't and shouldn't. + */ + extractEnumKeyInfo(nameToken) { + if (nameToken.type === _types.TokenType.name) { + const name = this.tokens.identifierNameForToken(nameToken); + return { + nameStringCode: `"${name}"`, + variableName: _isIdentifier2.default.call(void 0, name) ? name : null + }; + } else if (nameToken.type === _types.TokenType.string) { + const name = this.tokens.stringValueForToken(nameToken); + return { + nameStringCode: this.tokens.code.slice(nameToken.start, nameToken.end), + variableName: _isIdentifier2.default.call(void 0, name) ? name : null + }; + } else { + throw new Error("Expected name or string at beginning of enum element."); + } + } + /** + * Handle an enum member where the RHS is just a string literal (not omitted, not a number, and + * not a complex expression). This is the typical form for TS string enums, and in this case, we + * do *not* create a reverse mapping. + * + * This is called after deleting the key token, when the token processor is at the equals sign. + * + * Example 1: + * someKey = "some value" + * -> + * const someKey = "some value"; MyEnum["someKey"] = someKey; + * + * Example 2: + * "some key" = "some value" + * -> + * MyEnum["some key"] = "some value"; + */ + processStringLiteralEnumMember(enumName, nameStringCode, variableName) { + if (variableName != null) { + this.tokens.appendCode(`const ${variableName}`); + this.tokens.copyToken(); + this.tokens.copyToken(); + this.tokens.appendCode(`; ${enumName}[${nameStringCode}] = ${variableName};`); + } else { + this.tokens.appendCode(`${enumName}[${nameStringCode}]`); + this.tokens.copyToken(); + this.tokens.copyToken(); + this.tokens.appendCode(";"); + } + } + /** + * Handle an enum member initialized with an expression on the right-hand side (other than a + * string literal). In these cases, we should transform the expression and emit code that sets up + * a reverse mapping. + * + * The TypeScript implementation of this operation distinguishes between expressions that can be + * "constant folded" at compile time (i.e. consist of number literals and simple math operations + * on those numbers) and ones that are dynamic. For constant expressions, it emits the resolved + * numeric value, and auto-incrementing is only allowed in that case. Evaluating expressions at + * compile time would add significant complexity to Sucrase, so Sucrase instead leaves the + * expression as-is, and will later emit something like `MyEnum["previousKey"] + 1` to implement + * auto-incrementing. + * + * This is called after deleting the key token, when the token processor is at the equals sign. + * + * Example 1: + * someKey = 1 + 1 + * -> + * const someKey = 1 + 1; MyEnum[MyEnum["someKey"] = someKey] = "someKey"; + * + * Example 2: + * "some key" = 1 + 1 + * -> + * MyEnum[MyEnum["some key"] = 1 + 1] = "some key"; + */ + processExplicitValueEnumMember(enumName, nameStringCode, variableName) { + const rhsEndIndex = this.tokens.currentToken().rhsEndIndex; + if (rhsEndIndex == null) { + throw new Error("Expected rhsEndIndex on enum assign."); + } + if (variableName != null) { + this.tokens.appendCode(`const ${variableName}`); + this.tokens.copyToken(); + while (this.tokens.currentIndex() < rhsEndIndex) { + this.rootTransformer.processToken(); + } + this.tokens.appendCode( + `; ${enumName}[${enumName}[${nameStringCode}] = ${variableName}] = ${nameStringCode};` + ); + } else { + this.tokens.appendCode(`${enumName}[${enumName}[${nameStringCode}]`); + this.tokens.copyToken(); + while (this.tokens.currentIndex() < rhsEndIndex) { + this.rootTransformer.processToken(); + } + this.tokens.appendCode(`] = ${nameStringCode};`); + } + } + /** + * Handle an enum member with no right-hand side expression. In this case, the value is the + * previous value plus 1, or 0 if there was no previous value. We should also always emit a + * reverse mapping. + * + * Example 1: + * someKey2 + * -> + * const someKey2 = someKey1 + 1; MyEnum[MyEnum["someKey2"] = someKey2] = "someKey2"; + * + * Example 2: + * "some key 2" + * -> + * MyEnum[MyEnum["some key 2"] = someKey1 + 1] = "some key 2"; + */ + processImplicitValueEnumMember(enumName, nameStringCode, variableName, previousValueCode) { + let valueCode = previousValueCode != null ? `${previousValueCode} + 1` : "0"; + if (variableName != null) { + this.tokens.appendCode(`const ${variableName} = ${valueCode}; `); + valueCode = variableName; + } + this.tokens.appendCode( + `${enumName}[${enumName}[${nameStringCode}] = ${valueCode}] = ${nameStringCode};` + ); + } + }; + exports2.default = TypeScriptTransformer; + } +}); + +// node_modules/sucrase/dist/transformers/RootTransformer.js +var require_RootTransformer = __commonJS({ + "node_modules/sucrase/dist/transformers/RootTransformer.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _keywords = require_keywords(); + var _types = require_types(); + var _getClassInfo = require_getClassInfo(); + var _getClassInfo2 = _interopRequireDefault(_getClassInfo); + var _CJSImportTransformer = require_CJSImportTransformer(); + var _CJSImportTransformer2 = _interopRequireDefault(_CJSImportTransformer); + var _ESMImportTransformer = require_ESMImportTransformer(); + var _ESMImportTransformer2 = _interopRequireDefault(_ESMImportTransformer); + var _FlowTransformer = require_FlowTransformer(); + var _FlowTransformer2 = _interopRequireDefault(_FlowTransformer); + var _JestHoistTransformer = require_JestHoistTransformer(); + var _JestHoistTransformer2 = _interopRequireDefault(_JestHoistTransformer); + var _JSXTransformer = require_JSXTransformer(); + var _JSXTransformer2 = _interopRequireDefault(_JSXTransformer); + var _NumericSeparatorTransformer = require_NumericSeparatorTransformer(); + var _NumericSeparatorTransformer2 = _interopRequireDefault(_NumericSeparatorTransformer); + var _OptionalCatchBindingTransformer = require_OptionalCatchBindingTransformer(); + var _OptionalCatchBindingTransformer2 = _interopRequireDefault(_OptionalCatchBindingTransformer); + var _OptionalChainingNullishTransformer = require_OptionalChainingNullishTransformer(); + var _OptionalChainingNullishTransformer2 = _interopRequireDefault(_OptionalChainingNullishTransformer); + var _ReactDisplayNameTransformer = require_ReactDisplayNameTransformer(); + var _ReactDisplayNameTransformer2 = _interopRequireDefault(_ReactDisplayNameTransformer); + var _ReactHotLoaderTransformer = require_ReactHotLoaderTransformer(); + var _ReactHotLoaderTransformer2 = _interopRequireDefault(_ReactHotLoaderTransformer); + var _TypeScriptTransformer = require_TypeScriptTransformer(); + var _TypeScriptTransformer2 = _interopRequireDefault(_TypeScriptTransformer); + var RootTransformer = class _RootTransformer { + __init() { + this.transformers = []; + } + __init2() { + this.generatedVariables = []; + } + constructor(sucraseContext, transforms, enableLegacyBabel5ModuleInterop, options2) { + ; + _RootTransformer.prototype.__init.call(this); + _RootTransformer.prototype.__init2.call(this); + this.nameManager = sucraseContext.nameManager; + this.helperManager = sucraseContext.helperManager; + const { tokenProcessor, importProcessor } = sucraseContext; + this.tokens = tokenProcessor; + this.isImportsTransformEnabled = transforms.includes("imports"); + this.isReactHotLoaderTransformEnabled = transforms.includes("react-hot-loader"); + this.disableESTransforms = Boolean(options2.disableESTransforms); + if (!options2.disableESTransforms) { + this.transformers.push( + new (0, _OptionalChainingNullishTransformer2.default)(tokenProcessor, this.nameManager) + ); + this.transformers.push(new (0, _NumericSeparatorTransformer2.default)(tokenProcessor)); + this.transformers.push(new (0, _OptionalCatchBindingTransformer2.default)(tokenProcessor, this.nameManager)); + } + if (transforms.includes("jsx")) { + if (options2.jsxRuntime !== "preserve") { + this.transformers.push( + new (0, _JSXTransformer2.default)(this, tokenProcessor, importProcessor, this.nameManager, options2) + ); + } + this.transformers.push( + new (0, _ReactDisplayNameTransformer2.default)(this, tokenProcessor, importProcessor, options2) + ); + } + let reactHotLoaderTransformer = null; + if (transforms.includes("react-hot-loader")) { + if (!options2.filePath) { + throw new Error("filePath is required when using the react-hot-loader transform."); + } + reactHotLoaderTransformer = new (0, _ReactHotLoaderTransformer2.default)(tokenProcessor, options2.filePath); + this.transformers.push(reactHotLoaderTransformer); + } + if (transforms.includes("imports")) { + if (importProcessor === null) { + throw new Error("Expected non-null importProcessor with imports transform enabled."); + } + this.transformers.push( + new (0, _CJSImportTransformer2.default)( + this, + tokenProcessor, + importProcessor, + this.nameManager, + this.helperManager, + reactHotLoaderTransformer, + enableLegacyBabel5ModuleInterop, + Boolean(options2.enableLegacyTypeScriptModuleInterop), + transforms.includes("typescript"), + transforms.includes("flow"), + Boolean(options2.preserveDynamicImport), + Boolean(options2.keepUnusedImports) + ) + ); + } else { + this.transformers.push( + new (0, _ESMImportTransformer2.default)( + tokenProcessor, + this.nameManager, + this.helperManager, + reactHotLoaderTransformer, + transforms.includes("typescript"), + transforms.includes("flow"), + Boolean(options2.keepUnusedImports), + options2 + ) + ); + } + if (transforms.includes("flow")) { + this.transformers.push( + new (0, _FlowTransformer2.default)(this, tokenProcessor, transforms.includes("imports")) + ); + } + if (transforms.includes("typescript")) { + this.transformers.push( + new (0, _TypeScriptTransformer2.default)(this, tokenProcessor, transforms.includes("imports")) + ); + } + if (transforms.includes("jest")) { + this.transformers.push( + new (0, _JestHoistTransformer2.default)(this, tokenProcessor, this.nameManager, importProcessor) + ); + } + } + transform() { + this.tokens.reset(); + this.processBalancedCode(); + const shouldAddUseStrict = this.isImportsTransformEnabled; + let prefix2 = shouldAddUseStrict ? '"use strict";' : ""; + for (const transformer of this.transformers) { + prefix2 += transformer.getPrefixCode(); + } + prefix2 += this.helperManager.emitHelpers(); + prefix2 += this.generatedVariables.map((v3) => ` var ${v3};`).join(""); + for (const transformer of this.transformers) { + prefix2 += transformer.getHoistedCode(); + } + let suffix = ""; + for (const transformer of this.transformers) { + suffix += transformer.getSuffixCode(); + } + const result = this.tokens.finish(); + let { code } = result; + if (code.startsWith("#!")) { + let newlineIndex = code.indexOf("\n"); + if (newlineIndex === -1) { + newlineIndex = code.length; + code += "\n"; + } + return { + code: code.slice(0, newlineIndex + 1) + prefix2 + code.slice(newlineIndex + 1) + suffix, + // The hashbang line has no tokens, so shifting the tokens to account + // for prefix can happen normally. + mappings: this.shiftMappings(result.mappings, prefix2.length) + }; + } else { + return { + code: prefix2 + code + suffix, + mappings: this.shiftMappings(result.mappings, prefix2.length) + }; + } + } + processBalancedCode() { + let braceDepth = 0; + let parenDepth = 0; + while (!this.tokens.isAtEnd()) { + if (this.tokens.matches1(_types.TokenType.braceL) || this.tokens.matches1(_types.TokenType.dollarBraceL)) { + braceDepth++; + } else if (this.tokens.matches1(_types.TokenType.braceR)) { + if (braceDepth === 0) { + return; + } + braceDepth--; + } + if (this.tokens.matches1(_types.TokenType.parenL)) { + parenDepth++; + } else if (this.tokens.matches1(_types.TokenType.parenR)) { + if (parenDepth === 0) { + return; + } + parenDepth--; + } + this.processToken(); + } + } + processToken() { + if (this.tokens.matches1(_types.TokenType._class)) { + this.processClass(); + return; + } + for (const transformer of this.transformers) { + const wasProcessed = transformer.process(); + if (wasProcessed) { + return; + } + } + this.tokens.copyToken(); + } + /** + * Skip past a class with a name and return that name. + */ + processNamedClass() { + if (!this.tokens.matches2(_types.TokenType._class, _types.TokenType.name)) { + throw new Error("Expected identifier for exported class name."); + } + const name = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1); + this.processClass(); + return name; + } + processClass() { + const classInfo = _getClassInfo2.default.call(void 0, this, this.tokens, this.nameManager, this.disableESTransforms); + const needsCommaExpression = (classInfo.headerInfo.isExpression || !classInfo.headerInfo.className) && classInfo.staticInitializerNames.length + classInfo.instanceInitializerNames.length > 0; + let className = classInfo.headerInfo.className; + if (needsCommaExpression) { + className = this.nameManager.claimFreeName("_class"); + this.generatedVariables.push(className); + this.tokens.appendCode(` (${className} =`); + } + const classToken = this.tokens.currentToken(); + const contextId = classToken.contextId; + if (contextId == null) { + throw new Error("Expected class to have a context ID."); + } + this.tokens.copyExpectedToken(_types.TokenType._class); + while (!this.tokens.matchesContextIdAndLabel(_types.TokenType.braceL, contextId)) { + this.processToken(); + } + this.processClassBody(classInfo, className); + const staticInitializerStatements = classInfo.staticInitializerNames.map( + (name) => `${className}.${name}()` + ); + if (needsCommaExpression) { + this.tokens.appendCode( + `, ${staticInitializerStatements.map((s4) => `${s4}, `).join("")}${className})` + ); + } else if (classInfo.staticInitializerNames.length > 0) { + this.tokens.appendCode(` ${staticInitializerStatements.map((s4) => `${s4};`).join(" ")}`); + } + } + /** + * We want to just handle class fields in all contexts, since TypeScript supports them. Later, + * when some JS implementations support class fields, this should be made optional. + */ + processClassBody(classInfo, className) { + const { + headerInfo, + constructorInsertPos, + constructorInitializerStatements, + fields, + instanceInitializerNames, + rangesToRemove + } = classInfo; + let fieldIndex = 0; + let rangeToRemoveIndex = 0; + const classContextId = this.tokens.currentToken().contextId; + if (classContextId == null) { + throw new Error("Expected non-null context ID on class."); + } + this.tokens.copyExpectedToken(_types.TokenType.braceL); + if (this.isReactHotLoaderTransformEnabled) { + this.tokens.appendCode( + "__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}" + ); + } + const needsConstructorInit = constructorInitializerStatements.length + instanceInitializerNames.length > 0; + if (constructorInsertPos === null && needsConstructorInit) { + const constructorInitializersCode = this.makeConstructorInitCode( + constructorInitializerStatements, + instanceInitializerNames, + className + ); + if (headerInfo.hasSuperclass) { + const argsName = this.nameManager.claimFreeName("args"); + this.tokens.appendCode( + `constructor(...${argsName}) { super(...${argsName}); ${constructorInitializersCode}; }` + ); + } else { + this.tokens.appendCode(`constructor() { ${constructorInitializersCode}; }`); + } + } + while (!this.tokens.matchesContextIdAndLabel(_types.TokenType.braceR, classContextId)) { + if (fieldIndex < fields.length && this.tokens.currentIndex() === fields[fieldIndex].start) { + let needsCloseBrace = false; + if (this.tokens.matches1(_types.TokenType.bracketL)) { + this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this`); + } else if (this.tokens.matches1(_types.TokenType.string) || this.tokens.matches1(_types.TokenType.num)) { + this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this[`); + needsCloseBrace = true; + } else { + this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this.`); + } + while (this.tokens.currentIndex() < fields[fieldIndex].end) { + if (needsCloseBrace && this.tokens.currentIndex() === fields[fieldIndex].equalsIndex) { + this.tokens.appendCode("]"); + } + this.processToken(); + } + this.tokens.appendCode("}"); + fieldIndex++; + } else if (rangeToRemoveIndex < rangesToRemove.length && this.tokens.currentIndex() >= rangesToRemove[rangeToRemoveIndex].start) { + if (this.tokens.currentIndex() < rangesToRemove[rangeToRemoveIndex].end) { + this.tokens.removeInitialToken(); + } + while (this.tokens.currentIndex() < rangesToRemove[rangeToRemoveIndex].end) { + this.tokens.removeToken(); + } + rangeToRemoveIndex++; + } else if (this.tokens.currentIndex() === constructorInsertPos) { + this.tokens.copyToken(); + if (needsConstructorInit) { + this.tokens.appendCode( + `;${this.makeConstructorInitCode( + constructorInitializerStatements, + instanceInitializerNames, + className + )};` + ); + } + this.processToken(); + } else { + this.processToken(); + } + } + this.tokens.copyExpectedToken(_types.TokenType.braceR); + } + makeConstructorInitCode(constructorInitializerStatements, instanceInitializerNames, className) { + return [ + ...constructorInitializerStatements, + ...instanceInitializerNames.map((name) => `${className}.prototype.${name}.call(this)`) + ].join(";"); + } + /** + * Normally it's ok to simply remove type tokens, but we need to be more careful when dealing with + * arrow function return types since they can confuse the parser. In that case, we want to move + * the close-paren to the same line as the arrow. + * + * See https://github.com/alangpierce/sucrase/issues/391 for more details. + */ + processPossibleArrowParamEnd() { + if (this.tokens.matches2(_types.TokenType.parenR, _types.TokenType.colon) && this.tokens.tokenAtRelativeIndex(1).isType) { + let nextNonTypeIndex = this.tokens.currentIndex() + 1; + while (this.tokens.tokens[nextNonTypeIndex].isType) { + nextNonTypeIndex++; + } + if (this.tokens.matches1AtIndex(nextNonTypeIndex, _types.TokenType.arrow)) { + this.tokens.removeInitialToken(); + while (this.tokens.currentIndex() < nextNonTypeIndex) { + this.tokens.removeToken(); + } + this.tokens.replaceTokenTrimmingLeftWhitespace(") =>"); + return true; + } + } + return false; + } + /** + * An async arrow function might be of the form: + * + * async < + * T + * >() => {} + * + * in which case, removing the type parameters will cause a syntax error. Detect this case and + * move the open-paren earlier. + */ + processPossibleAsyncArrowWithTypeParams() { + if (!this.tokens.matchesContextual(_keywords.ContextualKeyword._async) && !this.tokens.matches1(_types.TokenType._async)) { + return false; + } + const nextToken = this.tokens.tokenAtRelativeIndex(1); + if (nextToken.type !== _types.TokenType.lessThan || !nextToken.isType) { + return false; + } + let nextNonTypeIndex = this.tokens.currentIndex() + 1; + while (this.tokens.tokens[nextNonTypeIndex].isType) { + nextNonTypeIndex++; + } + if (this.tokens.matches1AtIndex(nextNonTypeIndex, _types.TokenType.parenL)) { + this.tokens.replaceToken("async ("); + this.tokens.removeInitialToken(); + while (this.tokens.currentIndex() < nextNonTypeIndex) { + this.tokens.removeToken(); + } + this.tokens.removeToken(); + this.processBalancedCode(); + this.processToken(); + return true; + } + return false; + } + processPossibleTypeRange() { + if (this.tokens.currentToken().isType) { + this.tokens.removeInitialToken(); + while (this.tokens.currentToken().isType) { + this.tokens.removeToken(); + } + return true; + } + return false; + } + shiftMappings(mappings, prefixLength) { + for (let i4 = 0; i4 < mappings.length; i4++) { + const mapping = mappings[i4]; + if (mapping !== void 0) { + mappings[i4] = mapping + prefixLength; + } + } + return mappings; + } + }; + exports2.default = RootTransformer; } }); // node_modules/lines-and-columns/build/index.js var require_build = __commonJS({ - "node_modules/lines-and-columns/build/index.js"(exports) { + "node_modules/lines-and-columns/build/index.js"(exports2) { "use strict"; - exports.__esModule = true; - exports.LinesAndColumns = void 0; + exports2.__esModule = true; + exports2.LinesAndColumns = void 0; var LF = "\n"; var CR = "\r"; - var LinesAndColumns2 = ( + var LinesAndColumns = ( /** @class */ function() { - function LinesAndColumns3(string2) { + function LinesAndColumns2(string2) { this.string = string2; var offsets = [0]; for (var offset3 = 0; offset3 < string2.length; ) { @@ -2770,19 +24384,19 @@ var require_build = __commonJS({ } this.offsets = offsets; } - LinesAndColumns3.prototype.locationForIndex = function(index2) { - if (index2 < 0 || index2 > this.string.length) { + LinesAndColumns2.prototype.locationForIndex = function(index) { + if (index < 0 || index > this.string.length) { return null; } var line2 = 0; var offsets = this.offsets; - while (offsets[line2 + 1] <= index2) { + while (offsets[line2 + 1] <= index) { line2++; } - var column2 = index2 - offsets[line2]; + var column2 = index - offsets[line2]; return { line: line2, column: column2 }; }; - LinesAndColumns3.prototype.indexForLocation = function(location) { + LinesAndColumns2.prototype.indexForLocation = function(location) { var line2 = location.line, column2 = location.column; if (line2 < 0 || line2 >= this.offsets.length) { return null; @@ -2792,24 +24406,392 @@ var require_build = __commonJS({ } return this.offsets[line2] + column2; }; - LinesAndColumns3.prototype.lengthOfLine = function(line2) { + LinesAndColumns2.prototype.lengthOfLine = function(line2) { var offset3 = this.offsets[line2]; var nextOffset = line2 === this.offsets.length - 1 ? this.string.length : this.offsets[line2 + 1]; return nextOffset - offset3; }; - return LinesAndColumns3; + return LinesAndColumns2; }() ); - exports.LinesAndColumns = LinesAndColumns2; - exports["default"] = LinesAndColumns2; + exports2.LinesAndColumns = LinesAndColumns; + exports2["default"] = LinesAndColumns; + } +}); + +// node_modules/sucrase/dist/util/formatTokens.js +var require_formatTokens = __commonJS({ + "node_modules/sucrase/dist/util/formatTokens.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _linesandcolumns = require_build(); + var _linesandcolumns2 = _interopRequireDefault(_linesandcolumns); + var _types = require_types(); + function formatTokens(code, tokens) { + if (tokens.length === 0) { + return ""; + } + const tokenKeys = Object.keys(tokens[0]).filter( + (k4) => k4 !== "type" && k4 !== "value" && k4 !== "start" && k4 !== "end" && k4 !== "loc" + ); + const typeKeys = Object.keys(tokens[0].type).filter((k4) => k4 !== "label" && k4 !== "keyword"); + const headings = ["Location", "Label", "Raw", ...tokenKeys, ...typeKeys]; + const lines = new (0, _linesandcolumns2.default)(code); + const rows = [headings, ...tokens.map(getTokenComponents)]; + const padding = headings.map(() => 0); + for (const components2 of rows) { + for (let i4 = 0; i4 < components2.length; i4++) { + padding[i4] = Math.max(padding[i4], components2[i4].length); + } + } + return rows.map((components2) => components2.map((component, i4) => component.padEnd(padding[i4])).join(" ")).join("\n"); + function getTokenComponents(token2) { + const raw = code.slice(token2.start, token2.end); + return [ + formatRange(token2.start, token2.end), + _types.formatTokenType.call(void 0, token2.type), + truncate(String(raw), 14), + // @ts-ignore: Intentional dynamic access by key. + ...tokenKeys.map((key) => formatValue(token2[key], key)), + // @ts-ignore: Intentional dynamic access by key. + ...typeKeys.map((key) => formatValue(token2.type[key], key)) + ]; + } + function formatValue(value, key) { + if (value === true) { + return key; + } else if (value === false || value === null) { + return ""; + } else { + return String(value); + } + } + function formatRange(start, end2) { + return `${formatPos(start)}-${formatPos(end2)}`; + } + function formatPos(pos) { + const location = lines.locationForIndex(pos); + if (!location) { + return "Unknown"; + } else { + return `${location.line + 1}:${location.column + 1}`; + } + } + } + exports2.default = formatTokens; + function truncate(s4, length2) { + if (s4.length > length2) { + return `${s4.slice(0, length2 - 3)}...`; + } else { + return s4; + } + } + } +}); + +// node_modules/sucrase/dist/util/getTSImportedNames.js +var require_getTSImportedNames = __commonJS({ + "node_modules/sucrase/dist/util/getTSImportedNames.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _types = require_types(); + var _getImportExportSpecifierInfo = require_getImportExportSpecifierInfo(); + var _getImportExportSpecifierInfo2 = _interopRequireDefault(_getImportExportSpecifierInfo); + function getTSImportedNames(tokens) { + const importedNames = /* @__PURE__ */ new Set(); + for (let i4 = 0; i4 < tokens.tokens.length; i4++) { + if (tokens.matches1AtIndex(i4, _types.TokenType._import) && !tokens.matches3AtIndex(i4, _types.TokenType._import, _types.TokenType.name, _types.TokenType.eq)) { + collectNamesForImport(tokens, i4, importedNames); + } + } + return importedNames; + } + exports2.default = getTSImportedNames; + function collectNamesForImport(tokens, index, importedNames) { + index++; + if (tokens.matches1AtIndex(index, _types.TokenType.parenL)) { + return; + } + if (tokens.matches1AtIndex(index, _types.TokenType.name)) { + importedNames.add(tokens.identifierNameAtIndex(index)); + index++; + if (tokens.matches1AtIndex(index, _types.TokenType.comma)) { + index++; + } + } + if (tokens.matches1AtIndex(index, _types.TokenType.star)) { + index += 2; + importedNames.add(tokens.identifierNameAtIndex(index)); + index++; + } + if (tokens.matches1AtIndex(index, _types.TokenType.braceL)) { + index++; + collectNamesForNamedImport(tokens, index, importedNames); + } + } + function collectNamesForNamedImport(tokens, index, importedNames) { + while (true) { + if (tokens.matches1AtIndex(index, _types.TokenType.braceR)) { + return; + } + const specifierInfo = _getImportExportSpecifierInfo2.default.call(void 0, tokens, index); + index = specifierInfo.endIndex; + if (!specifierInfo.isType) { + importedNames.add(specifierInfo.rightName); + } + if (tokens.matches2AtIndex(index, _types.TokenType.comma, _types.TokenType.braceR)) { + return; + } else if (tokens.matches1AtIndex(index, _types.TokenType.braceR)) { + return; + } else if (tokens.matches1AtIndex(index, _types.TokenType.comma)) { + index++; + } else { + throw new Error(`Unexpected token: ${JSON.stringify(tokens.tokens[index])}`); + } + } + } + } +}); + +// node_modules/sucrase/dist/index.js +var require_dist2 = __commonJS({ + "node_modules/sucrase/dist/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var _CJSImportProcessor = require_CJSImportProcessor(); + var _CJSImportProcessor2 = _interopRequireDefault(_CJSImportProcessor); + var _computeSourceMap = require_computeSourceMap(); + var _computeSourceMap2 = _interopRequireDefault(_computeSourceMap); + var _HelperManager = require_HelperManager(); + var _identifyShadowedGlobals = require_identifyShadowedGlobals(); + var _identifyShadowedGlobals2 = _interopRequireDefault(_identifyShadowedGlobals); + var _NameManager = require_NameManager(); + var _NameManager2 = _interopRequireDefault(_NameManager); + var _Options = require_Options(); + var _parser = require_parser(); + var _TokenProcessor = require_TokenProcessor(); + var _TokenProcessor2 = _interopRequireDefault(_TokenProcessor); + var _RootTransformer = require_RootTransformer(); + var _RootTransformer2 = _interopRequireDefault(_RootTransformer); + var _formatTokens = require_formatTokens(); + var _formatTokens2 = _interopRequireDefault(_formatTokens); + var _getTSImportedNames = require_getTSImportedNames(); + var _getTSImportedNames2 = _interopRequireDefault(_getTSImportedNames); + function getVersion() { + return "3.35.0"; + } + exports2.getVersion = getVersion; + function transform2(code, options2) { + _Options.validateOptions.call(void 0, options2); + try { + const sucraseContext = getSucraseContext(code, options2); + const transformer = new (0, _RootTransformer2.default)( + sucraseContext, + options2.transforms, + Boolean(options2.enableLegacyBabel5ModuleInterop), + options2 + ); + const transformerResult = transformer.transform(); + let result = { code: transformerResult.code }; + if (options2.sourceMapOptions) { + if (!options2.filePath) { + throw new Error("filePath must be specified when generating a source map."); + } + result = { + ...result, + sourceMap: _computeSourceMap2.default.call( + void 0, + transformerResult, + options2.filePath, + options2.sourceMapOptions, + code, + sucraseContext.tokenProcessor.tokens + ) + }; + } + return result; + } catch (e3) { + if (options2.filePath) { + e3.message = `Error transforming ${options2.filePath}: ${e3.message}`; + } + throw e3; + } + } + exports2.transform = transform2; + function getFormattedTokens(code, options2) { + const tokens = getSucraseContext(code, options2).tokenProcessor.tokens; + return _formatTokens2.default.call(void 0, code, tokens); + } + exports2.getFormattedTokens = getFormattedTokens; + function getSucraseContext(code, options2) { + const isJSXEnabled = options2.transforms.includes("jsx"); + const isTypeScriptEnabled = options2.transforms.includes("typescript"); + const isFlowEnabled = options2.transforms.includes("flow"); + const disableESTransforms = options2.disableESTransforms === true; + const file = _parser.parse.call(void 0, code, isJSXEnabled, isTypeScriptEnabled, isFlowEnabled); + const tokens = file.tokens; + const scopes = file.scopes; + const nameManager = new (0, _NameManager2.default)(code, tokens); + const helperManager = new (0, _HelperManager.HelperManager)(nameManager); + const tokenProcessor = new (0, _TokenProcessor2.default)( + code, + tokens, + isFlowEnabled, + disableESTransforms, + helperManager + ); + const enableLegacyTypeScriptModuleInterop = Boolean(options2.enableLegacyTypeScriptModuleInterop); + let importProcessor = null; + if (options2.transforms.includes("imports")) { + importProcessor = new (0, _CJSImportProcessor2.default)( + nameManager, + tokenProcessor, + enableLegacyTypeScriptModuleInterop, + options2, + options2.transforms.includes("typescript"), + Boolean(options2.keepUnusedImports), + helperManager + ); + importProcessor.preprocessTokens(); + _identifyShadowedGlobals2.default.call(void 0, tokenProcessor, scopes, importProcessor.getGlobalNames()); + if (options2.transforms.includes("typescript") && !options2.keepUnusedImports) { + importProcessor.pruneTypeOnlyImports(); + } + } else if (options2.transforms.includes("typescript") && !options2.keepUnusedImports) { + _identifyShadowedGlobals2.default.call(void 0, tokenProcessor, scopes, _getTSImportedNames2.default.call(void 0, tokenProcessor)); + } + return { tokenProcessor, scopes, nameManager, importProcessor, helperManager }; + } + } +}); + +// node_modules/react-is/cjs/react-is.production.min.js +var require_react_is_production_min = __commonJS({ + "node_modules/react-is/cjs/react-is.production.min.js"(exports2) { + "use strict"; + var b3 = "function" === typeof Symbol && Symbol.for; + var c4 = b3 ? Symbol.for("react.element") : 60103; + var d3 = b3 ? Symbol.for("react.portal") : 60106; + var e3 = b3 ? Symbol.for("react.fragment") : 60107; + var f4 = b3 ? Symbol.for("react.strict_mode") : 60108; + var g4 = b3 ? Symbol.for("react.profiler") : 60114; + var h3 = b3 ? Symbol.for("react.provider") : 60109; + var k4 = b3 ? Symbol.for("react.context") : 60110; + var l4 = b3 ? Symbol.for("react.async_mode") : 60111; + var m3 = b3 ? Symbol.for("react.concurrent_mode") : 60111; + var n3 = b3 ? Symbol.for("react.forward_ref") : 60112; + var p3 = b3 ? Symbol.for("react.suspense") : 60113; + var q4 = b3 ? Symbol.for("react.suspense_list") : 60120; + var r4 = b3 ? Symbol.for("react.memo") : 60115; + var t4 = b3 ? Symbol.for("react.lazy") : 60116; + var v3 = b3 ? Symbol.for("react.block") : 60121; + var w5 = b3 ? Symbol.for("react.fundamental") : 60117; + var x4 = b3 ? Symbol.for("react.responder") : 60118; + var y4 = b3 ? Symbol.for("react.scope") : 60119; + function z4(a4) { + if ("object" === typeof a4 && null !== a4) { + var u4 = a4.$$typeof; + switch (u4) { + case c4: + switch (a4 = a4.type, a4) { + case l4: + case m3: + case e3: + case g4: + case f4: + case p3: + return a4; + default: + switch (a4 = a4 && a4.$$typeof, a4) { + case k4: + case n3: + case t4: + case r4: + case h3: + return a4; + default: + return u4; + } + } + case d3: + return u4; + } + } + } + function A4(a4) { + return z4(a4) === m3; + } + exports2.AsyncMode = l4; + exports2.ConcurrentMode = m3; + exports2.ContextConsumer = k4; + exports2.ContextProvider = h3; + exports2.Element = c4; + exports2.ForwardRef = n3; + exports2.Fragment = e3; + exports2.Lazy = t4; + exports2.Memo = r4; + exports2.Portal = d3; + exports2.Profiler = g4; + exports2.StrictMode = f4; + exports2.Suspense = p3; + exports2.isAsyncMode = function(a4) { + return A4(a4) || z4(a4) === l4; + }; + exports2.isConcurrentMode = A4; + exports2.isContextConsumer = function(a4) { + return z4(a4) === k4; + }; + exports2.isContextProvider = function(a4) { + return z4(a4) === h3; + }; + exports2.isElement = function(a4) { + return "object" === typeof a4 && null !== a4 && a4.$$typeof === c4; + }; + exports2.isForwardRef = function(a4) { + return z4(a4) === n3; + }; + exports2.isFragment = function(a4) { + return z4(a4) === e3; + }; + exports2.isLazy = function(a4) { + return z4(a4) === t4; + }; + exports2.isMemo = function(a4) { + return z4(a4) === r4; + }; + exports2.isPortal = function(a4) { + return z4(a4) === d3; + }; + exports2.isProfiler = function(a4) { + return z4(a4) === g4; + }; + exports2.isStrictMode = function(a4) { + return z4(a4) === f4; + }; + exports2.isSuspense = function(a4) { + return z4(a4) === p3; + }; + exports2.isValidElementType = function(a4) { + return "string" === typeof a4 || "function" === typeof a4 || a4 === e3 || a4 === m3 || a4 === g4 || a4 === f4 || a4 === p3 || a4 === q4 || "object" === typeof a4 && null !== a4 && (a4.$$typeof === t4 || a4.$$typeof === r4 || a4.$$typeof === h3 || a4.$$typeof === k4 || a4.$$typeof === n3 || a4.$$typeof === w5 || a4.$$typeof === x4 || a4.$$typeof === y4 || a4.$$typeof === v3); + }; + exports2.typeOf = z4; } }); // node_modules/react-is/cjs/react-is.development.js var require_react_is_development = __commonJS({ - "node_modules/react-is/cjs/react-is.development.js"(exports) { + "node_modules/react-is/cjs/react-is.development.js"(exports2) { "use strict"; - if (true) { + if (process.env.NODE_ENV !== "production") { (function() { "use strict"; var hasSymbol = typeof Symbol === "function" && Symbol.for; @@ -2927,34 +24909,34 @@ var require_react_is_development = __commonJS({ function isSuspense(object) { return typeOf(object) === REACT_SUSPENSE_TYPE; } - exports.AsyncMode = AsyncMode; - exports.ConcurrentMode = ConcurrentMode; - exports.ContextConsumer = ContextConsumer; - exports.ContextProvider = ContextProvider; - exports.Element = Element2; - exports.ForwardRef = ForwardRef; - exports.Fragment = Fragment; - exports.Lazy = Lazy; - exports.Memo = Memo; - exports.Portal = Portal; - exports.Profiler = Profiler; - exports.StrictMode = StrictMode; - exports.Suspense = Suspense; - exports.isAsyncMode = isAsyncMode; - exports.isConcurrentMode = isConcurrentMode; - exports.isContextConsumer = isContextConsumer; - exports.isContextProvider = isContextProvider; - exports.isElement = isElement2; - exports.isForwardRef = isForwardRef; - exports.isFragment = isFragment; - exports.isLazy = isLazy; - exports.isMemo = isMemo; - exports.isPortal = isPortal; - exports.isProfiler = isProfiler; - exports.isStrictMode = isStrictMode; - exports.isSuspense = isSuspense; - exports.isValidElementType = isValidElementType; - exports.typeOf = typeOf; + exports2.AsyncMode = AsyncMode; + exports2.ConcurrentMode = ConcurrentMode; + exports2.ContextConsumer = ContextConsumer; + exports2.ContextProvider = ContextProvider; + exports2.Element = Element2; + exports2.ForwardRef = ForwardRef; + exports2.Fragment = Fragment; + exports2.Lazy = Lazy; + exports2.Memo = Memo; + exports2.Portal = Portal; + exports2.Profiler = Profiler; + exports2.StrictMode = StrictMode; + exports2.Suspense = Suspense; + exports2.isAsyncMode = isAsyncMode; + exports2.isConcurrentMode = isConcurrentMode; + exports2.isContextConsumer = isContextConsumer; + exports2.isContextProvider = isContextProvider; + exports2.isElement = isElement2; + exports2.isForwardRef = isForwardRef; + exports2.isFragment = isFragment; + exports2.isLazy = isLazy; + exports2.isMemo = isMemo; + exports2.isPortal = isPortal; + exports2.isProfiler = isProfiler; + exports2.isStrictMode = isStrictMode; + exports2.isSuspense = isSuspense; + exports2.isValidElementType = isValidElementType; + exports2.typeOf = typeOf; })(); } } @@ -2962,10 +24944,10 @@ var require_react_is_development = __commonJS({ // node_modules/react-is/index.js var require_react_is = __commonJS({ - "node_modules/react-is/index.js"(exports, module2) { + "node_modules/react-is/index.js"(exports2, module2) { "use strict"; - if (false) { - module2.exports = null; + if (process.env.NODE_ENV === "production") { + module2.exports = require_react_is_production_min(); } else { module2.exports = require_react_is_development(); } @@ -2974,7 +24956,7 @@ var require_react_is = __commonJS({ // node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js var require_hoist_non_react_statics_cjs = __commonJS({ - "node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"(exports, module2) { + "node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"(exports2, module2) { "use strict"; var reactIs = require_react_is(); var REACT_STATICS = { @@ -3060,9 +25042,4054 @@ var require_hoist_non_react_statics_cjs = __commonJS({ } }); +// node_modules/@babel/runtime/helpers/extends.js +var require_extends = __commonJS({ + "node_modules/@babel/runtime/helpers/extends.js"(exports2, module2) { + function _extends2() { + return module2.exports = _extends2 = Object.assign ? Object.assign.bind() : function(n3) { + for (var e3 = 1; e3 < arguments.length; e3++) { + var t4 = arguments[e3]; + for (var r4 in t4) ({}).hasOwnProperty.call(t4, r4) && (n3[r4] = t4[r4]); + } + return n3; + }, module2.exports.__esModule = true, module2.exports["default"] = module2.exports, _extends2.apply(null, arguments); + } + module2.exports = _extends2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/preact/dist/preact.js +var require_preact = __commonJS({ + "node_modules/preact/dist/preact.js"(exports2) { + var n3; + var l4; + var t4; + var u4; + var i4; + var o4; + var r4; + var e3; + var f4; + var c4; + var s4; + var h3; + var a4 = {}; + var p3 = []; + var v3 = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; + var y4 = Array.isArray; + function d3(n4, l5) { + for (var t5 in l5) n4[t5] = l5[t5]; + return n4; + } + function w5(n4) { + n4 && n4.parentNode && n4.parentNode.removeChild(n4); + } + function _3(l5, t5, u5) { + var i5, o5, r5, e4 = {}; + for (r5 in t5) "key" == r5 ? i5 = t5[r5] : "ref" == r5 ? o5 = t5[r5] : e4[r5] = t5[r5]; + if (arguments.length > 2 && (e4.children = arguments.length > 3 ? n3.call(arguments, 2) : u5), "function" == typeof l5 && null != l5.defaultProps) for (r5 in l5.defaultProps) void 0 === e4[r5] && (e4[r5] = l5.defaultProps[r5]); + return g4(l5, e4, i5, o5, null); + } + function g4(n4, u5, i5, o5, r5) { + var e4 = { type: n4, props: u5, key: i5, ref: o5, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: null == r5 ? ++t4 : r5, __i: -1, __u: 0 }; + return null == r5 && null != l4.vnode && l4.vnode(e4), e4; + } + function x4(n4) { + return n4.children; + } + function m3(n4, l5) { + this.props = n4, this.context = l5; + } + function b3(n4, l5) { + if (null == l5) return n4.__ ? b3(n4.__, n4.__i + 1) : null; + for (var t5; l5 < n4.__k.length; l5++) if (null != (t5 = n4.__k[l5]) && null != t5.__e) return t5.__e; + return "function" == typeof n4.type ? b3(n4) : null; + } + function k4(n4) { + var l5, t5; + if (null != (n4 = n4.__) && null != n4.__c) { + for (n4.__e = n4.__c.base = null, l5 = 0; l5 < n4.__k.length; l5++) if (null != (t5 = n4.__k[l5]) && null != t5.__e) { + n4.__e = n4.__c.base = t5.__e; + break; + } + return k4(n4); + } + } + function S2(n4) { + (!n4.__d && (n4.__d = true) && i4.push(n4) && !C4.__r++ || o4 !== l4.debounceRendering) && ((o4 = l4.debounceRendering) || r4)(C4); + } + function C4() { + var n4, t5, u5, o5, r5, f5, c5, s5; + for (i4.sort(e3); n4 = i4.shift(); ) n4.__d && (t5 = i4.length, o5 = void 0, f5 = (r5 = (u5 = n4).__v).__e, c5 = [], s5 = [], u5.__P && ((o5 = d3({}, r5)).__v = r5.__v + 1, l4.vnode && l4.vnode(o5), A4(u5.__P, o5, r5, u5.__n, u5.__P.namespaceURI, 32 & r5.__u ? [f5] : null, c5, null == f5 ? b3(r5) : f5, !!(32 & r5.__u), s5), o5.__v = r5.__v, o5.__.__k[o5.__i] = o5, F4(c5, o5, s5), o5.__e != f5 && k4(o5)), i4.length > t5 && i4.sort(e3)); + C4.__r = 0; + } + function M3(n4, l5, t5, u5, i5, o5, r5, e4, f5, c5, s5) { + var h4, v4, y5, d4, w6, _4 = u5 && u5.__k || p3, g5 = l5.length; + for (t5.__d = f5, P7(t5, l5, _4), f5 = t5.__d, h4 = 0; h4 < g5; h4++) null != (y5 = t5.__k[h4]) && (v4 = -1 === y5.__i ? a4 : _4[y5.__i] || a4, y5.__i = h4, A4(n4, y5, v4, i5, o5, r5, e4, f5, c5, s5), d4 = y5.__e, y5.ref && v4.ref != y5.ref && (v4.ref && j4(v4.ref, null, y5), s5.push(y5.ref, y5.__c || d4, y5)), null == w6 && null != d4 && (w6 = d4), 65536 & y5.__u || v4.__k === y5.__k ? f5 = $3(y5, f5, n4) : "function" == typeof y5.type && void 0 !== y5.__d ? f5 = y5.__d : d4 && (f5 = d4.nextSibling), y5.__d = void 0, y5.__u &= -196609); + t5.__d = f5, t5.__e = w6; + } + function P7(n4, l5, t5) { + var u5, i5, o5, r5, e4, f5 = l5.length, c5 = t5.length, s5 = c5, h4 = 0; + for (n4.__k = [], u5 = 0; u5 < f5; u5++) null != (i5 = l5[u5]) && "boolean" != typeof i5 && "function" != typeof i5 ? (r5 = u5 + h4, (i5 = n4.__k[u5] = "string" == typeof i5 || "number" == typeof i5 || "bigint" == typeof i5 || i5.constructor == String ? g4(null, i5, null, null, null) : y4(i5) ? g4(x4, { children: i5 }, null, null, null) : void 0 === i5.constructor && i5.__b > 0 ? g4(i5.type, i5.props, i5.key, i5.ref ? i5.ref : null, i5.__v) : i5).__ = n4, i5.__b = n4.__b + 1, o5 = null, -1 !== (e4 = i5.__i = I3(i5, t5, r5, s5)) && (s5--, (o5 = t5[e4]) && (o5.__u |= 131072)), null == o5 || null === o5.__v ? (-1 == e4 && h4--, "function" != typeof i5.type && (i5.__u |= 65536)) : e4 !== r5 && (e4 == r5 - 1 ? h4-- : e4 == r5 + 1 ? h4++ : (e4 > r5 ? h4-- : h4++, i5.__u |= 65536))) : i5 = n4.__k[u5] = null; + if (s5) for (u5 = 0; u5 < c5; u5++) null != (o5 = t5[u5]) && 0 == (131072 & o5.__u) && (o5.__e == n4.__d && (n4.__d = b3(o5)), z4(o5, o5)); + } + function $3(n4, l5, t5) { + var u5, i5; + if ("function" == typeof n4.type) { + for (u5 = n4.__k, i5 = 0; u5 && i5 < u5.length; i5++) u5[i5] && (u5[i5].__ = n4, l5 = $3(u5[i5], l5, t5)); + return l5; + } + n4.__e != l5 && (l5 && n4.type && !t5.contains(l5) && (l5 = b3(n4)), t5.insertBefore(n4.__e, l5 || null), l5 = n4.__e); + do { + l5 = l5 && l5.nextSibling; + } while (null != l5 && 8 === l5.nodeType); + return l5; + } + function I3(n4, l5, t5, u5) { + var i5 = n4.key, o5 = n4.type, r5 = t5 - 1, e4 = t5 + 1, f5 = l5[t5]; + if (null === f5 || f5 && i5 == f5.key && o5 === f5.type && 0 == (131072 & f5.__u)) return t5; + if (u5 > (null != f5 && 0 == (131072 & f5.__u) ? 1 : 0)) for (; r5 >= 0 || e4 < l5.length; ) { + if (r5 >= 0) { + if ((f5 = l5[r5]) && 0 == (131072 & f5.__u) && i5 == f5.key && o5 === f5.type) return r5; + r5--; + } + if (e4 < l5.length) { + if ((f5 = l5[e4]) && 0 == (131072 & f5.__u) && i5 == f5.key && o5 === f5.type) return e4; + e4++; + } + } + return -1; + } + function H3(n4, l5, t5) { + "-" === l5[0] ? n4.setProperty(l5, null == t5 ? "" : t5) : n4[l5] = null == t5 ? "" : "number" != typeof t5 || v3.test(l5) ? t5 : t5 + "px"; + } + function L3(n4, l5, t5, u5, i5) { + var o5; + n: if ("style" === l5) if ("string" == typeof t5) n4.style.cssText = t5; + else { + if ("string" == typeof u5 && (n4.style.cssText = u5 = ""), u5) for (l5 in u5) t5 && l5 in t5 || H3(n4.style, l5, ""); + if (t5) for (l5 in t5) u5 && t5[l5] === u5[l5] || H3(n4.style, l5, t5[l5]); + } + else if ("o" === l5[0] && "n" === l5[1]) o5 = l5 !== (l5 = l5.replace(/(PointerCapture)$|Capture$/i, "$1")), l5 = l5.toLowerCase() in n4 || "onFocusOut" === l5 || "onFocusIn" === l5 ? l5.toLowerCase().slice(2) : l5.slice(2), n4.l || (n4.l = {}), n4.l[l5 + o5] = t5, t5 ? u5 ? t5.t = u5.t : (t5.t = f4, n4.addEventListener(l5, o5 ? s4 : c4, o5)) : n4.removeEventListener(l5, o5 ? s4 : c4, o5); + else { + if ("http://www.w3.org/2000/svg" == i5) l5 = l5.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); + else if ("width" != l5 && "height" != l5 && "href" != l5 && "list" != l5 && "form" != l5 && "tabIndex" != l5 && "download" != l5 && "rowSpan" != l5 && "colSpan" != l5 && "role" != l5 && "popover" != l5 && l5 in n4) try { + n4[l5] = null == t5 ? "" : t5; + break n; + } catch (n5) { + } + "function" == typeof t5 || (null == t5 || false === t5 && "-" !== l5[4] ? n4.removeAttribute(l5) : n4.setAttribute(l5, "popover" == l5 && 1 == t5 ? "" : t5)); + } + } + function T4(n4) { + return function(t5) { + if (this.l) { + var u5 = this.l[t5.type + n4]; + if (null == t5.u) t5.u = f4++; + else if (t5.u < u5.t) return; + return u5(l4.event ? l4.event(t5) : t5); + } + }; + } + function A4(n4, t5, u5, i5, o5, r5, e4, f5, c5, s5) { + var h4, a5, p4, v4, w6, _4, g5, b4, k5, S3, C5, P8, $4, I4, H4, L4, T5 = t5.type; + if (void 0 !== t5.constructor) return null; + 128 & u5.__u && (c5 = !!(32 & u5.__u), r5 = [f5 = t5.__e = u5.__e]), (h4 = l4.__b) && h4(t5); + n: if ("function" == typeof T5) try { + if (b4 = t5.props, k5 = "prototype" in T5 && T5.prototype.render, S3 = (h4 = T5.contextType) && i5[h4.__c], C5 = h4 ? S3 ? S3.props.value : h4.__ : i5, u5.__c ? g5 = (a5 = t5.__c = u5.__c).__ = a5.__E : (k5 ? t5.__c = a5 = new T5(b4, C5) : (t5.__c = a5 = new m3(b4, C5), a5.constructor = T5, a5.render = N3), S3 && S3.sub(a5), a5.props = b4, a5.state || (a5.state = {}), a5.context = C5, a5.__n = i5, p4 = a5.__d = true, a5.__h = [], a5._sb = []), k5 && null == a5.__s && (a5.__s = a5.state), k5 && null != T5.getDerivedStateFromProps && (a5.__s == a5.state && (a5.__s = d3({}, a5.__s)), d3(a5.__s, T5.getDerivedStateFromProps(b4, a5.__s))), v4 = a5.props, w6 = a5.state, a5.__v = t5, p4) k5 && null == T5.getDerivedStateFromProps && null != a5.componentWillMount && a5.componentWillMount(), k5 && null != a5.componentDidMount && a5.__h.push(a5.componentDidMount); + else { + if (k5 && null == T5.getDerivedStateFromProps && b4 !== v4 && null != a5.componentWillReceiveProps && a5.componentWillReceiveProps(b4, C5), !a5.__e && (null != a5.shouldComponentUpdate && false === a5.shouldComponentUpdate(b4, a5.__s, C5) || t5.__v === u5.__v)) { + for (t5.__v !== u5.__v && (a5.props = b4, a5.state = a5.__s, a5.__d = false), t5.__e = u5.__e, t5.__k = u5.__k, t5.__k.some(function(n5) { + n5 && (n5.__ = t5); + }), P8 = 0; P8 < a5._sb.length; P8++) a5.__h.push(a5._sb[P8]); + a5._sb = [], a5.__h.length && e4.push(a5); + break n; + } + null != a5.componentWillUpdate && a5.componentWillUpdate(b4, a5.__s, C5), k5 && null != a5.componentDidUpdate && a5.__h.push(function() { + a5.componentDidUpdate(v4, w6, _4); + }); + } + if (a5.context = C5, a5.props = b4, a5.__P = n4, a5.__e = false, $4 = l4.__r, I4 = 0, k5) { + for (a5.state = a5.__s, a5.__d = false, $4 && $4(t5), h4 = a5.render(a5.props, a5.state, a5.context), H4 = 0; H4 < a5._sb.length; H4++) a5.__h.push(a5._sb[H4]); + a5._sb = []; + } else do { + a5.__d = false, $4 && $4(t5), h4 = a5.render(a5.props, a5.state, a5.context), a5.state = a5.__s; + } while (a5.__d && ++I4 < 25); + a5.state = a5.__s, null != a5.getChildContext && (i5 = d3(d3({}, i5), a5.getChildContext())), k5 && !p4 && null != a5.getSnapshotBeforeUpdate && (_4 = a5.getSnapshotBeforeUpdate(v4, w6)), M3(n4, y4(L4 = null != h4 && h4.type === x4 && null == h4.key ? h4.props.children : h4) ? L4 : [L4], t5, u5, i5, o5, r5, e4, f5, c5, s5), a5.base = t5.__e, t5.__u &= -161, a5.__h.length && e4.push(a5), g5 && (a5.__E = a5.__ = null); + } catch (n5) { + if (t5.__v = null, c5 || null != r5) { + for (t5.__u |= c5 ? 160 : 128; f5 && 8 === f5.nodeType && f5.nextSibling; ) f5 = f5.nextSibling; + r5[r5.indexOf(f5)] = null, t5.__e = f5; + } else t5.__e = u5.__e, t5.__k = u5.__k; + l4.__e(n5, t5, u5); + } + else null == r5 && t5.__v === u5.__v ? (t5.__k = u5.__k, t5.__e = u5.__e) : t5.__e = O3(u5.__e, t5, u5, i5, o5, r5, e4, c5, s5); + (h4 = l4.diffed) && h4(t5); + } + function F4(n4, t5, u5) { + t5.__d = void 0; + for (var i5 = 0; i5 < u5.length; i5++) j4(u5[i5], u5[++i5], u5[++i5]); + l4.__c && l4.__c(t5, n4), n4.some(function(t6) { + try { + n4 = t6.__h, t6.__h = [], n4.some(function(n5) { + n5.call(t6); + }); + } catch (n5) { + l4.__e(n5, t6.__v); + } + }); + } + function O3(t5, u5, i5, o5, r5, e4, f5, c5, s5) { + var h4, p4, v4, d4, _4, g5, x5, m4 = i5.props, k5 = u5.props, S3 = u5.type; + if ("svg" === S3 ? r5 = "http://www.w3.org/2000/svg" : "math" === S3 ? r5 = "http://www.w3.org/1998/Math/MathML" : r5 || (r5 = "http://www.w3.org/1999/xhtml"), null != e4) { + for (h4 = 0; h4 < e4.length; h4++) if ((_4 = e4[h4]) && "setAttribute" in _4 == !!S3 && (S3 ? _4.localName === S3 : 3 === _4.nodeType)) { + t5 = _4, e4[h4] = null; + break; + } + } + if (null == t5) { + if (null === S3) return document.createTextNode(k5); + t5 = document.createElementNS(r5, S3, k5.is && k5), c5 && (l4.__m && l4.__m(u5, e4), c5 = false), e4 = null; + } + if (null === S3) m4 === k5 || c5 && t5.data === k5 || (t5.data = k5); + else { + if (e4 = e4 && n3.call(t5.childNodes), m4 = i5.props || a4, !c5 && null != e4) for (m4 = {}, h4 = 0; h4 < t5.attributes.length; h4++) m4[(_4 = t5.attributes[h4]).name] = _4.value; + for (h4 in m4) if (_4 = m4[h4], "children" == h4) ; + else if ("dangerouslySetInnerHTML" == h4) v4 = _4; + else if (!(h4 in k5)) { + if ("value" == h4 && "defaultValue" in k5 || "checked" == h4 && "defaultChecked" in k5) continue; + L3(t5, h4, null, _4, r5); + } + for (h4 in k5) _4 = k5[h4], "children" == h4 ? d4 = _4 : "dangerouslySetInnerHTML" == h4 ? p4 = _4 : "value" == h4 ? g5 = _4 : "checked" == h4 ? x5 = _4 : c5 && "function" != typeof _4 || m4[h4] === _4 || L3(t5, h4, _4, m4[h4], r5); + if (p4) c5 || v4 && (p4.__html === v4.__html || p4.__html === t5.innerHTML) || (t5.innerHTML = p4.__html), u5.__k = []; + else if (v4 && (t5.innerHTML = ""), M3(t5, y4(d4) ? d4 : [d4], u5, i5, o5, "foreignObject" === S3 ? "http://www.w3.org/1999/xhtml" : r5, e4, f5, e4 ? e4[0] : i5.__k && b3(i5, 0), c5, s5), null != e4) for (h4 = e4.length; h4--; ) w5(e4[h4]); + c5 || (h4 = "value", "progress" === S3 && null == g5 ? t5.removeAttribute("value") : void 0 !== g5 && (g5 !== t5[h4] || "progress" === S3 && !g5 || "option" === S3 && g5 !== m4[h4]) && L3(t5, h4, g5, m4[h4], r5), h4 = "checked", void 0 !== x5 && x5 !== t5[h4] && L3(t5, h4, x5, m4[h4], r5)); + } + return t5; + } + function j4(n4, t5, u5) { + try { + if ("function" == typeof n4) { + var i5 = "function" == typeof n4.__u; + i5 && n4.__u(), i5 && null == t5 || (n4.__u = n4(t5)); + } else n4.current = t5; + } catch (n5) { + l4.__e(n5, u5); + } + } + function z4(n4, t5, u5) { + var i5, o5; + if (l4.unmount && l4.unmount(n4), (i5 = n4.ref) && (i5.current && i5.current !== n4.__e || j4(i5, null, t5)), null != (i5 = n4.__c)) { + if (i5.componentWillUnmount) try { + i5.componentWillUnmount(); + } catch (n5) { + l4.__e(n5, t5); + } + i5.base = i5.__P = null; + } + if (i5 = n4.__k) for (o5 = 0; o5 < i5.length; o5++) i5[o5] && z4(i5[o5], t5, u5 || "function" != typeof n4.type); + u5 || w5(n4.__e), n4.__c = n4.__ = n4.__e = n4.__d = void 0; + } + function N3(n4, l5, t5) { + return this.constructor(n4, t5); + } + function V3(t5, u5, i5) { + var o5, r5, e4, f5; + l4.__ && l4.__(t5, u5), r5 = (o5 = "function" == typeof i5) ? null : i5 && i5.__k || u5.__k, e4 = [], f5 = [], A4(u5, t5 = (!o5 && i5 || u5).__k = _3(x4, null, [t5]), r5 || a4, a4, u5.namespaceURI, !o5 && i5 ? [i5] : r5 ? null : u5.firstChild ? n3.call(u5.childNodes) : null, e4, !o5 && i5 ? i5 : r5 ? r5.__e : u5.firstChild, o5, f5), F4(e4, t5, f5); + } + n3 = p3.slice, l4 = { __e: function(n4, l5, t5, u5) { + for (var i5, o5, r5; l5 = l5.__; ) if ((i5 = l5.__c) && !i5.__) try { + if ((o5 = i5.constructor) && null != o5.getDerivedStateFromError && (i5.setState(o5.getDerivedStateFromError(n4)), r5 = i5.__d), null != i5.componentDidCatch && (i5.componentDidCatch(n4, u5 || {}), r5 = i5.__d), r5) return i5.__E = i5; + } catch (l6) { + n4 = l6; + } + throw n4; + } }, t4 = 0, u4 = function(n4) { + return null != n4 && null == n4.constructor; + }, m3.prototype.setState = function(n4, l5) { + var t5; + t5 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = d3({}, this.state), "function" == typeof n4 && (n4 = n4(d3({}, t5), this.props)), n4 && d3(t5, n4), null != n4 && this.__v && (l5 && this._sb.push(l5), S2(this)); + }, m3.prototype.forceUpdate = function(n4) { + this.__v && (this.__e = true, n4 && this.__h.push(n4), S2(this)); + }, m3.prototype.render = x4, i4 = [], r4 = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, e3 = function(n4, l5) { + return n4.__v.__b - l5.__v.__b; + }, C4.__r = 0, f4 = 0, c4 = T4(false), s4 = T4(true), h3 = 0, exports2.Component = m3, exports2.Fragment = x4, exports2.cloneElement = function(l5, t5, u5) { + var i5, o5, r5, e4, f5 = d3({}, l5.props); + for (r5 in l5.type && l5.type.defaultProps && (e4 = l5.type.defaultProps), t5) "key" == r5 ? i5 = t5[r5] : "ref" == r5 ? o5 = t5[r5] : f5[r5] = void 0 === t5[r5] && void 0 !== e4 ? e4[r5] : t5[r5]; + return arguments.length > 2 && (f5.children = arguments.length > 3 ? n3.call(arguments, 2) : u5), g4(l5.type, f5, i5 || l5.key, o5 || l5.ref, null); + }, exports2.createContext = function(n4, l5) { + var t5 = { __c: l5 = "__cC" + h3++, __: n4, Consumer: function(n5, l6) { + return n5.children(l6); + }, Provider: function(n5) { + var t6, u5; + return this.getChildContext || (t6 = /* @__PURE__ */ new Set(), (u5 = {})[l5] = this, this.getChildContext = function() { + return u5; + }, this.componentWillUnmount = function() { + t6 = null; + }, this.shouldComponentUpdate = function(n6) { + this.props.value !== n6.value && t6.forEach(function(n7) { + n7.__e = true, S2(n7); + }); + }, this.sub = function(n6) { + t6.add(n6); + var l6 = n6.componentWillUnmount; + n6.componentWillUnmount = function() { + t6 && t6.delete(n6), l6 && l6.call(n6); + }; + }), n5.children; + } }; + return t5.Provider.__ = t5.Consumer.contextType = t5; + }, exports2.createElement = _3, exports2.createRef = function() { + return { current: null }; + }, exports2.h = _3, exports2.hydrate = function n4(l5, t5) { + V3(l5, t5, n4); + }, exports2.isValidElement = u4, exports2.options = l4, exports2.render = V3, exports2.toChildArray = function n4(l5, t5) { + return t5 = t5 || [], null == l5 || "boolean" == typeof l5 || (y4(l5) ? l5.some(function(l6) { + n4(l6, t5); + }) : t5.push(l5)), t5; + }; + } +}); + +// node_modules/preact/hooks/dist/hooks.js +var require_hooks = __commonJS({ + "node_modules/preact/hooks/dist/hooks.js"(exports2) { + var n3; + var t4; + var r4; + var u4; + var o4 = require_preact(); + var i4 = 0; + var f4 = []; + var c4 = o4.options; + var e3 = c4.__b; + var a4 = c4.__r; + var v3 = c4.diffed; + var s4 = c4.__c; + var l4 = c4.unmount; + var p3 = c4.__; + function x4(n4, r5) { + c4.__h && c4.__h(t4, n4, i4 || r5), i4 = 0; + var u5 = t4.__H || (t4.__H = { __: [], __h: [] }); + return n4 >= u5.__.length && u5.__.push({}), u5.__[n4]; + } + function d3(n4) { + return i4 = 1, m3(b3, n4); + } + function m3(r5, u5, o5) { + var i5 = x4(n3++, 2); + if (i5.t = r5, !i5.__c && (i5.__ = [o5 ? o5(u5) : b3(void 0, u5), function(n4) { + var t5 = i5.__N ? i5.__N[0] : i5.__[0], r6 = i5.t(t5, n4); + t5 !== r6 && (i5.__N = [r6, i5.__[1]], i5.__c.setState({})); + }], i5.__c = t4, !t4.u)) { + var f5 = function(n4, t5, r6) { + if (!i5.__c.__H) return true; + var u6 = i5.__c.__H.__.filter(function(n5) { + return !!n5.__c; + }); + if (u6.every(function(n5) { + return !n5.__N; + })) return !c5 || c5.call(this, n4, t5, r6); + var o6 = false; + return u6.forEach(function(n5) { + if (n5.__N) { + var t6 = n5.__[0]; + n5.__ = n5.__N, n5.__N = void 0, t6 !== n5.__[0] && (o6 = true); + } + }), !(!o6 && i5.__c.props === n4) && (!c5 || c5.call(this, n4, t5, r6)); + }; + t4.u = true; + var c5 = t4.shouldComponentUpdate, e4 = t4.componentWillUpdate; + t4.componentWillUpdate = function(n4, t5, r6) { + if (this.__e) { + var u6 = c5; + c5 = void 0, f5(n4, t5, r6), c5 = u6; + } + e4 && e4.call(this, n4, t5, r6); + }, t4.shouldComponentUpdate = f5; + } + return i5.__N || i5.__; + } + function h3(r5, u5) { + var o5 = x4(n3++, 4); + !c4.__s && P7(o5.__H, u5) && (o5.__ = r5, o5.o = u5, t4.__h.push(o5)); + } + function y4(t5, r5) { + var u5 = x4(n3++, 7); + return P7(u5.__H, r5) && (u5.__ = t5(), u5.__H = r5, u5.__h = t5), u5.__; + } + function _3() { + for (var n4; n4 = f4.shift(); ) if (n4.__P && n4.__H) try { + n4.__H.__h.forEach(F4), n4.__H.__h.forEach(T4), n4.__H.__h = []; + } catch (t5) { + n4.__H.__h = [], c4.__e(t5, n4.__v); + } + } + c4.__b = function(n4) { + t4 = null, e3 && e3(n4); + }, c4.__ = function(n4, t5) { + n4 && t5.__k && t5.__k.__m && (n4.__m = t5.__k.__m), p3 && p3(n4, t5); + }, c4.__r = function(u5) { + a4 && a4(u5), n3 = 0; + var o5 = (t4 = u5.__c).__H; + o5 && (r4 === t4 ? (o5.__h = [], t4.__h = [], o5.__.forEach(function(n4) { + n4.__N && (n4.__ = n4.__N), n4.o = n4.__N = void 0; + })) : (o5.__h.forEach(F4), o5.__h.forEach(T4), o5.__h = [], n3 = 0)), r4 = t4; + }, c4.diffed = function(n4) { + v3 && v3(n4); + var o5 = n4.__c; + o5 && o5.__H && (o5.__H.__h.length && (1 !== f4.push(o5) && u4 === c4.requestAnimationFrame || ((u4 = c4.requestAnimationFrame) || A4)(_3)), o5.__H.__.forEach(function(n5) { + n5.o && (n5.__H = n5.o), n5.o = void 0; + })), r4 = t4 = null; + }, c4.__c = function(n4, t5) { + t5.some(function(n5) { + try { + n5.__h.forEach(F4), n5.__h = n5.__h.filter(function(n6) { + return !n6.__ || T4(n6); + }); + } catch (r5) { + t5.some(function(n6) { + n6.__h && (n6.__h = []); + }), t5 = [], c4.__e(r5, n5.__v); + } + }), s4 && s4(n4, t5); + }, c4.unmount = function(n4) { + l4 && l4(n4); + var t5, r5 = n4.__c; + r5 && r5.__H && (r5.__H.__.forEach(function(n5) { + try { + F4(n5); + } catch (n6) { + t5 = n6; + } + }), r5.__H = void 0, t5 && c4.__e(t5, r5.__v)); + }; + var q4 = "function" == typeof requestAnimationFrame; + function A4(n4) { + var t5, r5 = function() { + clearTimeout(u5), q4 && cancelAnimationFrame(t5), setTimeout(n4); + }, u5 = setTimeout(r5, 100); + q4 && (t5 = requestAnimationFrame(r5)); + } + function F4(n4) { + var r5 = t4, u5 = n4.__c; + "function" == typeof u5 && (n4.__c = void 0, u5()), t4 = r5; + } + function T4(n4) { + var r5 = t4; + n4.__c = n4.__(), t4 = r5; + } + function P7(n4, t5) { + return !n4 || n4.length !== t5.length || t5.some(function(t6, r5) { + return t6 !== n4[r5]; + }); + } + function b3(n4, t5) { + return "function" == typeof t5 ? t5(n4) : t5; + } + exports2.useCallback = function(n4, t5) { + return i4 = 8, y4(function() { + return n4; + }, t5); + }, exports2.useContext = function(r5) { + var u5 = t4.context[r5.__c], o5 = x4(n3++, 9); + return o5.c = r5, u5 ? (null == o5.__ && (o5.__ = true, u5.sub(t4)), u5.props.value) : r5.__; + }, exports2.useDebugValue = function(n4, t5) { + c4.useDebugValue && c4.useDebugValue(t5 ? t5(n4) : n4); + }, exports2.useEffect = function(r5, u5) { + var o5 = x4(n3++, 3); + !c4.__s && P7(o5.__H, u5) && (o5.__ = r5, o5.o = u5, t4.__H.__h.push(o5)); + }, exports2.useErrorBoundary = function(r5) { + var u5 = x4(n3++, 10), o5 = d3(); + return u5.__ = r5, t4.componentDidCatch || (t4.componentDidCatch = function(n4, t5) { + u5.__ && u5.__(n4, t5), o5[1](n4); + }), [o5[0], function() { + o5[1](void 0); + }]; + }, exports2.useId = function() { + var r5 = x4(n3++, 11); + if (!r5.__) { + for (var u5 = t4.__v; null !== u5 && !u5.__m && null !== u5.__; ) u5 = u5.__; + var o5 = u5.__m || (u5.__m = [0, 0]); + r5.__ = "P" + o5[0] + "-" + o5[1]++; + } + return r5.__; + }, exports2.useImperativeHandle = function(n4, t5, r5) { + i4 = 6, h3(function() { + return "function" == typeof n4 ? (n4(t5()), function() { + return n4(null); + }) : n4 ? (n4.current = t5(), function() { + return n4.current = null; + }) : void 0; + }, null == r5 ? r5 : r5.concat(n4)); + }, exports2.useLayoutEffect = h3, exports2.useMemo = y4, exports2.useReducer = m3, exports2.useRef = function(n4) { + return i4 = 5, y4(function() { + return { current: n4 }; + }, []); + }, exports2.useState = d3; + } +}); + +// node_modules/preact/compat/dist/compat.js +var require_compat = __commonJS({ + "node_modules/preact/compat/dist/compat.js"(exports2) { + var n3 = require_preact(); + var t4 = require_hooks(); + function e3(n4, t5) { + for (var e4 in n4) if ("__source" !== e4 && !(e4 in t5)) return true; + for (var r5 in t5) if ("__source" !== r5 && n4[r5] !== t5[r5]) return true; + return false; + } + function r4(n4, t5) { + this.props = n4, this.context = t5; + } + function u4(t5, r5) { + function u5(n4) { + var t6 = this.props.ref, u6 = t6 == n4.ref; + return !u6 && t6 && (t6.call ? t6(null) : t6.current = null), r5 ? !r5(this.props, n4) || !u6 : e3(this.props, n4); + } + function o5(e4) { + return this.shouldComponentUpdate = u5, n3.createElement(t5, e4); + } + return o5.displayName = "Memo(" + (t5.displayName || t5.name) + ")", o5.prototype.isReactComponent = true, o5.__f = true, o5; + } + (r4.prototype = new n3.Component()).isPureReactComponent = true, r4.prototype.shouldComponentUpdate = function(n4, t5) { + return e3(this.props, n4) || e3(this.state, t5); + }; + var o4 = n3.options.__b; + n3.options.__b = function(n4) { + n4.type && n4.type.__f && n4.ref && (n4.props.ref = n4.ref, n4.ref = null), o4 && o4(n4); + }; + var i4 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911; + function c4(n4) { + function t5(t6) { + if (!("ref" in t6)) return n4(t6, null); + var e4 = t6.ref; + delete t6.ref; + var r5 = n4(t6, e4); + return t6.ref = e4, r5; + } + return t5.$$typeof = i4, t5.render = t5, t5.prototype.isReactComponent = t5.__f = true, t5.displayName = "ForwardRef(" + (n4.displayName || n4.name) + ")", t5; + } + var l4 = function(t5, e4) { + return null == t5 ? null : n3.toChildArray(n3.toChildArray(t5).map(e4)); + }; + var f4 = { map: l4, forEach: l4, count: function(t5) { + return t5 ? n3.toChildArray(t5).length : 0; + }, only: function(t5) { + var e4 = n3.toChildArray(t5); + if (1 !== e4.length) throw "Children.only"; + return e4[0]; + }, toArray: n3.toChildArray }; + var a4 = n3.options.__e; + n3.options.__e = function(n4, t5, e4, r5) { + if (n4.then) { + for (var u5, o5 = t5; o5 = o5.__; ) if ((u5 = o5.__c) && u5.__c) return null == t5.__e && (t5.__e = e4.__e, t5.__k = e4.__k), u5.__c(n4, t5); + } + a4(n4, t5, e4, r5); + }; + var s4 = n3.options.unmount; + function p3(n4, t5, e4) { + return n4 && (n4.__c && n4.__c.__H && (n4.__c.__H.__.forEach(function(n5) { + "function" == typeof n5.__c && n5.__c(); + }), n4.__c.__H = null), null != (n4 = function(n5, t6) { + for (var e5 in t6) n5[e5] = t6[e5]; + return n5; + }({}, n4)).__c && (n4.__c.__P === e4 && (n4.__c.__P = t5), n4.__c = null), n4.__k = n4.__k && n4.__k.map(function(n5) { + return p3(n5, t5, e4); + })), n4; + } + function h3(n4, t5, e4) { + return n4 && e4 && (n4.__v = null, n4.__k = n4.__k && n4.__k.map(function(n5) { + return h3(n5, t5, e4); + }), n4.__c && n4.__c.__P === t5 && (n4.__e && e4.appendChild(n4.__e), n4.__c.__e = true, n4.__c.__P = e4)), n4; + } + function v3() { + this.__u = 0, this.t = null, this.__b = null; + } + function d3(n4) { + var t5 = n4.__.__c; + return t5 && t5.__a && t5.__a(n4); + } + function m3(t5) { + var e4, r5, u5; + function o5(o6) { + if (e4 || (e4 = t5()).then(function(n4) { + r5 = n4.default || n4; + }, function(n4) { + u5 = n4; + }), u5) throw u5; + if (!r5) throw e4; + return n3.createElement(r5, o6); + } + return o5.displayName = "Lazy", o5.__f = true, o5; + } + function x4() { + this.u = null, this.o = null; + } + n3.options.unmount = function(n4) { + var t5 = n4.__c; + t5 && t5.__R && t5.__R(), t5 && 32 & n4.__u && (n4.type = null), s4 && s4(n4); + }, (v3.prototype = new n3.Component()).__c = function(n4, t5) { + var e4 = t5.__c, r5 = this; + null == r5.t && (r5.t = []), r5.t.push(e4); + var u5 = d3(r5.__v), o5 = false, i5 = function() { + o5 || (o5 = true, e4.__R = null, u5 ? u5(c5) : c5()); + }; + e4.__R = i5; + var c5 = function() { + if (!--r5.__u) { + if (r5.state.__a) { + var n5 = r5.state.__a; + r5.__v.__k[0] = h3(n5, n5.__c.__P, n5.__c.__O); + } + var t6; + for (r5.setState({ __a: r5.__b = null }); t6 = r5.t.pop(); ) t6.forceUpdate(); + } + }; + r5.__u++ || 32 & t5.__u || r5.setState({ __a: r5.__b = r5.__v.__k[0] }), n4.then(i5, i5); + }, v3.prototype.componentWillUnmount = function() { + this.t = []; + }, v3.prototype.render = function(t5, e4) { + if (this.__b) { + if (this.__v.__k) { + var r5 = document.createElement("div"), u5 = this.__v.__k[0].__c; + this.__v.__k[0] = p3(this.__b, r5, u5.__O = u5.__P); + } + this.__b = null; + } + var o5 = e4.__a && n3.createElement(n3.Fragment, null, t5.fallback); + return o5 && (o5.__u &= -33), [n3.createElement(n3.Fragment, null, e4.__a ? null : t5.children), o5]; + }; + var b3 = function(n4, t5, e4) { + if (++e4[1] === e4[0] && n4.o.delete(t5), n4.props.revealOrder && ("t" !== n4.props.revealOrder[0] || !n4.o.size)) for (e4 = n4.u; e4; ) { + for (; e4.length > 3; ) e4.pop()(); + if (e4[1] < e4[0]) break; + n4.u = e4 = e4[2]; + } + }; + function y4(n4) { + return this.getChildContext = function() { + return n4.context; + }, n4.children; + } + function _3(t5) { + var e4 = this, r5 = t5.i; + e4.componentWillUnmount = function() { + n3.render(null, e4.l), e4.l = null, e4.i = null; + }, e4.i && e4.i !== r5 && e4.componentWillUnmount(), e4.l || (e4.i = r5, e4.l = { nodeType: 1, parentNode: r5, childNodes: [], contains: function() { + return true; + }, appendChild: function(n4) { + this.childNodes.push(n4), e4.i.appendChild(n4); + }, insertBefore: function(n4, t6) { + this.childNodes.push(n4), e4.i.appendChild(n4); + }, removeChild: function(n4) { + this.childNodes.splice(this.childNodes.indexOf(n4) >>> 1, 1), e4.i.removeChild(n4); + } }), n3.render(n3.createElement(y4, { context: e4.context }, t5.__v), e4.l); + } + function g4(t5, e4) { + var r5 = n3.createElement(_3, { __v: t5, i: e4 }); + return r5.containerInfo = e4, r5; + } + (x4.prototype = new n3.Component()).__a = function(n4) { + var t5 = this, e4 = d3(t5.__v), r5 = t5.o.get(n4); + return r5[0]++, function(u5) { + var o5 = function() { + t5.props.revealOrder ? (r5.push(u5), b3(t5, n4, r5)) : u5(); + }; + e4 ? e4(o5) : o5(); + }; + }, x4.prototype.render = function(t5) { + this.u = null, this.o = /* @__PURE__ */ new Map(); + var e4 = n3.toChildArray(t5.children); + t5.revealOrder && "b" === t5.revealOrder[0] && e4.reverse(); + for (var r5 = e4.length; r5--; ) this.o.set(e4[r5], this.u = [1, 0, this.u]); + return t5.children; + }, x4.prototype.componentDidUpdate = x4.prototype.componentDidMount = function() { + var n4 = this; + this.o.forEach(function(t5, e4) { + b3(n4, e4, t5); + }); + }; + var S2 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; + var E3 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; + var C4 = /^on(Ani|Tra|Tou|BeforeInp|Compo)/; + var O3 = /[A-Z0-9]/g; + var R2 = "undefined" != typeof document; + var w5 = function(n4) { + return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n4); + }; + function j4(t5, e4, r5) { + return null == e4.__k && (e4.textContent = ""), n3.render(t5, e4), "function" == typeof r5 && r5(), t5 ? t5.__c : null; + } + function I3(t5, e4, r5) { + return n3.hydrate(t5, e4), "function" == typeof r5 && r5(), t5 ? t5.__c : null; + } + n3.Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t5) { + Object.defineProperty(n3.Component.prototype, t5, { configurable: true, get: function() { + return this["UNSAFE_" + t5]; + }, set: function(n4) { + Object.defineProperty(this, t5, { configurable: true, writable: true, value: n4 }); + } }); + }); + var N3 = n3.options.event; + function k4() { + } + function M3() { + return this.cancelBubble; + } + function T4() { + return this.defaultPrevented; + } + n3.options.event = function(n4) { + return N3 && (n4 = N3(n4)), n4.persist = k4, n4.isPropagationStopped = M3, n4.isDefaultPrevented = T4, n4.nativeEvent = n4; + }; + var A4; + var D4 = { enumerable: false, configurable: true, get: function() { + return this.class; + } }; + var L3 = n3.options.vnode; + n3.options.vnode = function(t5) { + "string" == typeof t5.type && function(t6) { + var e4 = t6.props, r5 = t6.type, u5 = {}, o5 = -1 === r5.indexOf("-"); + for (var i5 in e4) { + var c5 = e4[i5]; + if (!("value" === i5 && "defaultValue" in e4 && null == c5 || R2 && "children" === i5 && "noscript" === r5 || "class" === i5 || "className" === i5)) { + var l5 = i5.toLowerCase(); + "defaultValue" === i5 && "value" in e4 && null == e4.value ? i5 = "value" : "download" === i5 && true === c5 ? c5 = "" : "translate" === l5 && "no" === c5 ? c5 = false : "o" === l5[0] && "n" === l5[1] ? "ondoubleclick" === l5 ? i5 = "ondblclick" : "onchange" !== l5 || "input" !== r5 && "textarea" !== r5 || w5(e4.type) ? "onfocus" === l5 ? i5 = "onfocusin" : "onblur" === l5 ? i5 = "onfocusout" : C4.test(i5) && (i5 = l5) : l5 = i5 = "oninput" : o5 && E3.test(i5) ? i5 = i5.replace(O3, "-$&").toLowerCase() : null === c5 && (c5 = void 0), "oninput" === l5 && u5[i5 = l5] && (i5 = "oninputCapture"), u5[i5] = c5; + } + } + "select" == r5 && u5.multiple && Array.isArray(u5.value) && (u5.value = n3.toChildArray(e4.children).forEach(function(n4) { + n4.props.selected = -1 != u5.value.indexOf(n4.props.value); + })), "select" == r5 && null != u5.defaultValue && (u5.value = n3.toChildArray(e4.children).forEach(function(n4) { + n4.props.selected = u5.multiple ? -1 != u5.defaultValue.indexOf(n4.props.value) : u5.defaultValue == n4.props.value; + })), e4.class && !e4.className ? (u5.class = e4.class, Object.defineProperty(u5, "className", D4)) : (e4.className && !e4.class || e4.class && e4.className) && (u5.class = u5.className = e4.className), t6.props = u5; + }(t5), t5.$$typeof = S2, L3 && L3(t5); + }; + var F4 = n3.options.__r; + n3.options.__r = function(n4) { + F4 && F4(n4), A4 = n4.__c; + }; + var U2 = n3.options.diffed; + n3.options.diffed = function(n4) { + U2 && U2(n4); + var t5 = n4.props, e4 = n4.__e; + null != e4 && "textarea" === n4.type && "value" in t5 && t5.value !== e4.value && (e4.value = null == t5.value ? "" : t5.value), A4 = null; + }; + var V3 = { ReactCurrentDispatcher: { current: { readContext: function(n4) { + return A4.__n[n4.__c].props.value; + }, useCallback: t4.useCallback, useContext: t4.useContext, useDebugValue: t4.useDebugValue, useDeferredValue: K2, useEffect: t4.useEffect, useId: t4.useId, useImperativeHandle: t4.useImperativeHandle, useInsertionEffect: X2, useLayoutEffect: t4.useLayoutEffect, useMemo: t4.useMemo, useReducer: t4.useReducer, useRef: t4.useRef, useState: t4.useState, useSyncExternalStore: tn2, useTransition: Q2 } } }; + function W2(t5) { + return n3.createElement.bind(null, t5); + } + function P7(n4) { + return !!n4 && n4.$$typeof === S2; + } + function z4(t5) { + return P7(t5) && t5.type === n3.Fragment; + } + function B4(n4) { + return !!n4 && !!n4.displayName && ("string" == typeof n4.displayName || n4.displayName instanceof String) && n4.displayName.startsWith("Memo("); + } + function H3(t5) { + return P7(t5) ? n3.cloneElement.apply(null, arguments) : t5; + } + function q4(t5) { + return !!t5.__k && (n3.render(null, t5), true); + } + function Z2(n4) { + return n4 && (n4.base || 1 === n4.nodeType && n4) || null; + } + var Y2 = function(n4, t5) { + return n4(t5); + }; + var $3 = function(n4, t5) { + return n4(t5); + }; + var G3 = n3.Fragment; + function J2(n4) { + n4(); + } + function K2(n4) { + return n4; + } + function Q2() { + return [false, J2]; + } + var X2 = t4.useLayoutEffect; + var nn2 = P7; + function tn2(n4, e4) { + var r5 = e4(), u5 = t4.useState({ p: { __: r5, h: e4 } }), o5 = u5[0].p, i5 = u5[1]; + return t4.useLayoutEffect(function() { + o5.__ = r5, o5.h = e4, en2(o5) && i5({ p: o5 }); + }, [n4, r5, e4]), t4.useEffect(function() { + return en2(o5) && i5({ p: o5 }), n4(function() { + en2(o5) && i5({ p: o5 }); + }); + }, [n4]), r5; + } + function en2(n4) { + var t5, e4, r5 = n4.h, u5 = n4.__; + try { + var o5 = r5(); + return !((t5 = u5) === (e4 = o5) && (0 !== t5 || 1 / t5 == 1 / e4) || t5 != t5 && e4 != e4); + } catch (n5) { + return true; + } + } + var rn2 = { useState: t4.useState, useId: t4.useId, useReducer: t4.useReducer, useEffect: t4.useEffect, useLayoutEffect: t4.useLayoutEffect, useInsertionEffect: X2, useTransition: Q2, useDeferredValue: K2, useSyncExternalStore: tn2, startTransition: J2, useRef: t4.useRef, useImperativeHandle: t4.useImperativeHandle, useMemo: t4.useMemo, useCallback: t4.useCallback, useContext: t4.useContext, useDebugValue: t4.useDebugValue, version: "18.3.1", Children: f4, render: j4, hydrate: I3, unmountComponentAtNode: q4, createPortal: g4, createElement: n3.createElement, createContext: n3.createContext, createFactory: W2, cloneElement: H3, createRef: n3.createRef, Fragment: n3.Fragment, isValidElement: P7, isElement: nn2, isFragment: z4, isMemo: B4, findDOMNode: Z2, Component: n3.Component, PureComponent: r4, memo: u4, forwardRef: c4, flushSync: $3, unstable_batchedUpdates: Y2, StrictMode: G3, Suspense: v3, SuspenseList: x4, lazy: m3, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: V3 }; + Object.defineProperty(exports2, "Component", { enumerable: true, get: function() { + return n3.Component; + } }), Object.defineProperty(exports2, "Fragment", { enumerable: true, get: function() { + return n3.Fragment; + } }), Object.defineProperty(exports2, "createContext", { enumerable: true, get: function() { + return n3.createContext; + } }), Object.defineProperty(exports2, "createElement", { enumerable: true, get: function() { + return n3.createElement; + } }), Object.defineProperty(exports2, "createRef", { enumerable: true, get: function() { + return n3.createRef; + } }), exports2.Children = f4, exports2.PureComponent = r4, exports2.StrictMode = G3, exports2.Suspense = v3, exports2.SuspenseList = x4, exports2.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = V3, exports2.cloneElement = H3, exports2.createFactory = W2, exports2.createPortal = g4, exports2.default = rn2, exports2.findDOMNode = Z2, exports2.flushSync = $3, exports2.forwardRef = c4, exports2.hydrate = I3, exports2.isElement = nn2, exports2.isFragment = z4, exports2.isMemo = B4, exports2.isValidElement = P7, exports2.lazy = m3, exports2.memo = u4, exports2.render = j4, exports2.startTransition = J2, exports2.unmountComponentAtNode = q4, exports2.unstable_batchedUpdates = Y2, exports2.useDeferredValue = K2, exports2.useInsertionEffect = X2, exports2.useSyncExternalStore = tn2, exports2.useTransition = Q2, exports2.version = "18.3.1", Object.keys(t4).forEach(function(n4) { + "default" === n4 || exports2.hasOwnProperty(n4) || Object.defineProperty(exports2, n4, { enumerable: true, get: function() { + return t4[n4]; + } }); + }); + } +}); + +// node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.cjs.prod.js +var require_use_isomorphic_layout_effect_cjs_prod = __commonJS({ + "node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.cjs.prod.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { + value: true + }); + var react = require_compat(); + var index = "undefined" != typeof document ? react.useLayoutEffect : react.useEffect; + exports2.default = index; + } +}); + +// node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.cjs.dev.js +var require_use_isomorphic_layout_effect_cjs_dev = __commonJS({ + "node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.cjs.dev.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var react = require_compat(); + var index = typeof document !== "undefined" ? react.useLayoutEffect : react.useEffect; + exports2.default = index; + } +}); + +// node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.cjs.js +var require_use_isomorphic_layout_effect_cjs = __commonJS({ + "node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.cjs.js"(exports2, module2) { + "use strict"; + if (process.env.NODE_ENV === "production") { + module2.exports = require_use_isomorphic_layout_effect_cjs_prod(); + } else { + module2.exports = require_use_isomorphic_layout_effect_cjs_dev(); + } + } +}); + +// node_modules/memoize-one/dist/memoize-one.cjs.js +var require_memoize_one_cjs = __commonJS({ + "node_modules/memoize-one/dist/memoize-one.cjs.js"(exports2, module2) { + "use strict"; + var safeIsNaN = Number.isNaN || function ponyfill(value) { + return typeof value === "number" && value !== value; + }; + function isEqual(first, second) { + if (first === second) { + return true; + } + if (safeIsNaN(first) && safeIsNaN(second)) { + return true; + } + return false; + } + function areInputsEqual(newInputs, lastInputs) { + if (newInputs.length !== lastInputs.length) { + return false; + } + for (var i4 = 0; i4 < newInputs.length; i4++) { + if (!isEqual(newInputs[i4], lastInputs[i4])) { + return false; + } + } + return true; + } + function memoizeOne2(resultFn, isEqual2) { + if (isEqual2 === void 0) { + isEqual2 = areInputsEqual; + } + var cache = null; + function memoized() { + var newArgs = []; + for (var _i = 0; _i < arguments.length; _i++) { + newArgs[_i] = arguments[_i]; + } + if (cache && cache.lastThis === this && isEqual2(newArgs, cache.lastArgs)) { + return cache.lastResult; + } + var lastResult = resultFn.apply(this, newArgs); + cache = { + lastResult, + lastArgs: newArgs, + lastThis: this + }; + return lastResult; + } + memoized.clear = function clear() { + cache = null; + }; + return memoized; + } + module2.exports = memoizeOne2; + } +}); + +// node_modules/@babel/runtime/helpers/typeof.js +var require_typeof = __commonJS({ + "node_modules/@babel/runtime/helpers/typeof.js"(exports2, module2) { + function _typeof2(o4) { + "@babel/helpers - typeof"; + return module2.exports = _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o5) { + return typeof o5; + } : function(o5) { + return o5 && "function" == typeof Symbol && o5.constructor === Symbol && o5 !== Symbol.prototype ? "symbol" : typeof o5; + }, module2.exports.__esModule = true, module2.exports["default"] = module2.exports, _typeof2(o4); + } + module2.exports = _typeof2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/toPrimitive.js +var require_toPrimitive = __commonJS({ + "node_modules/@babel/runtime/helpers/toPrimitive.js"(exports2, module2) { + var _typeof2 = require_typeof()["default"]; + function toPrimitive2(t4, r4) { + if ("object" != _typeof2(t4) || !t4) return t4; + var e3 = t4[Symbol.toPrimitive]; + if (void 0 !== e3) { + var i4 = e3.call(t4, r4 || "default"); + if ("object" != _typeof2(i4)) return i4; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r4 ? String : Number)(t4); + } + module2.exports = toPrimitive2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/toPropertyKey.js +var require_toPropertyKey = __commonJS({ + "node_modules/@babel/runtime/helpers/toPropertyKey.js"(exports2, module2) { + var _typeof2 = require_typeof()["default"]; + var toPrimitive2 = require_toPrimitive(); + function toPropertyKey2(t4) { + var i4 = toPrimitive2(t4, "string"); + return "symbol" == _typeof2(i4) ? i4 : i4 + ""; + } + module2.exports = toPropertyKey2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/defineProperty.js +var require_defineProperty = __commonJS({ + "node_modules/@babel/runtime/helpers/defineProperty.js"(exports2, module2) { + var toPropertyKey2 = require_toPropertyKey(); + function _defineProperty2(e3, r4, t4) { + return (r4 = toPropertyKey2(r4)) in e3 ? Object.defineProperty(e3, r4, { + value: t4, + enumerable: true, + configurable: true, + writable: true + }) : e3[r4] = t4, e3; + } + module2.exports = _defineProperty2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/objectSpread2.js +var require_objectSpread2 = __commonJS({ + "node_modules/@babel/runtime/helpers/objectSpread2.js"(exports2, module2) { + var defineProperty = require_defineProperty(); + function ownKeys2(e3, r4) { + var t4 = Object.keys(e3); + if (Object.getOwnPropertySymbols) { + var o4 = Object.getOwnPropertySymbols(e3); + r4 && (o4 = o4.filter(function(r5) { + return Object.getOwnPropertyDescriptor(e3, r5).enumerable; + })), t4.push.apply(t4, o4); + } + return t4; + } + function _objectSpread22(e3) { + for (var r4 = 1; r4 < arguments.length; r4++) { + var t4 = null != arguments[r4] ? arguments[r4] : {}; + r4 % 2 ? ownKeys2(Object(t4), true).forEach(function(r5) { + defineProperty(e3, r5, t4[r5]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e3, Object.getOwnPropertyDescriptors(t4)) : ownKeys2(Object(t4)).forEach(function(r5) { + Object.defineProperty(e3, r5, Object.getOwnPropertyDescriptor(t4, r5)); + }); + } + return e3; + } + module2.exports = _objectSpread22, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/arrayWithHoles.js +var require_arrayWithHoles = __commonJS({ + "node_modules/@babel/runtime/helpers/arrayWithHoles.js"(exports2, module2) { + function _arrayWithHoles2(r4) { + if (Array.isArray(r4)) return r4; + } + module2.exports = _arrayWithHoles2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/iterableToArrayLimit.js +var require_iterableToArrayLimit = __commonJS({ + "node_modules/@babel/runtime/helpers/iterableToArrayLimit.js"(exports2, module2) { + function _iterableToArrayLimit2(r4, l4) { + var t4 = null == r4 ? null : "undefined" != typeof Symbol && r4[Symbol.iterator] || r4["@@iterator"]; + if (null != t4) { + var e3, n3, i4, u4, a4 = [], f4 = true, o4 = false; + try { + if (i4 = (t4 = t4.call(r4)).next, 0 === l4) { + if (Object(t4) !== t4) return; + f4 = false; + } else for (; !(f4 = (e3 = i4.call(t4)).done) && (a4.push(e3.value), a4.length !== l4); f4 = true) ; + } catch (r5) { + o4 = true, n3 = r5; + } finally { + try { + if (!f4 && null != t4["return"] && (u4 = t4["return"](), Object(u4) !== u4)) return; + } finally { + if (o4) throw n3; + } + } + return a4; + } + } + module2.exports = _iterableToArrayLimit2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/arrayLikeToArray.js +var require_arrayLikeToArray = __commonJS({ + "node_modules/@babel/runtime/helpers/arrayLikeToArray.js"(exports2, module2) { + function _arrayLikeToArray2(r4, a4) { + (null == a4 || a4 > r4.length) && (a4 = r4.length); + for (var e3 = 0, n3 = Array(a4); e3 < a4; e3++) n3[e3] = r4[e3]; + return n3; + } + module2.exports = _arrayLikeToArray2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js +var require_unsupportedIterableToArray = __commonJS({ + "node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js"(exports2, module2) { + var arrayLikeToArray = require_arrayLikeToArray(); + function _unsupportedIterableToArray2(r4, a4) { + if (r4) { + if ("string" == typeof r4) return arrayLikeToArray(r4, a4); + var t4 = {}.toString.call(r4).slice(8, -1); + return "Object" === t4 && r4.constructor && (t4 = r4.constructor.name), "Map" === t4 || "Set" === t4 ? Array.from(r4) : "Arguments" === t4 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t4) ? arrayLikeToArray(r4, a4) : void 0; + } + } + module2.exports = _unsupportedIterableToArray2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/nonIterableRest.js +var require_nonIterableRest = __commonJS({ + "node_modules/@babel/runtime/helpers/nonIterableRest.js"(exports2, module2) { + function _nonIterableRest2() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + module2.exports = _nonIterableRest2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/slicedToArray.js +var require_slicedToArray = __commonJS({ + "node_modules/@babel/runtime/helpers/slicedToArray.js"(exports2, module2) { + var arrayWithHoles = require_arrayWithHoles(); + var iterableToArrayLimit = require_iterableToArrayLimit(); + var unsupportedIterableToArray = require_unsupportedIterableToArray(); + var nonIterableRest = require_nonIterableRest(); + function _slicedToArray2(r4, e3) { + return arrayWithHoles(r4) || iterableToArrayLimit(r4, e3) || unsupportedIterableToArray(r4, e3) || nonIterableRest(); + } + module2.exports = _slicedToArray2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +var require_objectWithoutPropertiesLoose = __commonJS({ + "node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js"(exports2, module2) { + function _objectWithoutPropertiesLoose2(r4, e3) { + if (null == r4) return {}; + var t4 = {}; + for (var n3 in r4) if ({}.hasOwnProperty.call(r4, n3)) { + if (e3.includes(n3)) continue; + t4[n3] = r4[n3]; + } + return t4; + } + module2.exports = _objectWithoutPropertiesLoose2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/objectWithoutProperties.js +var require_objectWithoutProperties = __commonJS({ + "node_modules/@babel/runtime/helpers/objectWithoutProperties.js"(exports2, module2) { + var objectWithoutPropertiesLoose = require_objectWithoutPropertiesLoose(); + function _objectWithoutProperties2(e3, t4) { + if (null == e3) return {}; + var o4, r4, i4 = objectWithoutPropertiesLoose(e3, t4); + if (Object.getOwnPropertySymbols) { + var s4 = Object.getOwnPropertySymbols(e3); + for (r4 = 0; r4 < s4.length; r4++) o4 = s4[r4], t4.includes(o4) || {}.propertyIsEnumerable.call(e3, o4) && (i4[o4] = e3[o4]); + } + return i4; + } + module2.exports = _objectWithoutProperties2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/classCallCheck.js +var require_classCallCheck = __commonJS({ + "node_modules/@babel/runtime/helpers/classCallCheck.js"(exports2, module2) { + function _classCallCheck2(a4, n3) { + if (!(a4 instanceof n3)) throw new TypeError("Cannot call a class as a function"); + } + module2.exports = _classCallCheck2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/createClass.js +var require_createClass = __commonJS({ + "node_modules/@babel/runtime/helpers/createClass.js"(exports2, module2) { + var toPropertyKey2 = require_toPropertyKey(); + function _defineProperties2(e3, r4) { + for (var t4 = 0; t4 < r4.length; t4++) { + var o4 = r4[t4]; + o4.enumerable = o4.enumerable || false, o4.configurable = true, "value" in o4 && (o4.writable = true), Object.defineProperty(e3, toPropertyKey2(o4.key), o4); + } + } + function _createClass2(e3, r4, t4) { + return r4 && _defineProperties2(e3.prototype, r4), t4 && _defineProperties2(e3, t4), Object.defineProperty(e3, "prototype", { + writable: false + }), e3; + } + module2.exports = _createClass2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/setPrototypeOf.js +var require_setPrototypeOf = __commonJS({ + "node_modules/@babel/runtime/helpers/setPrototypeOf.js"(exports2, module2) { + function _setPrototypeOf2(t4, e3) { + return module2.exports = _setPrototypeOf2 = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(t5, e4) { + return t5.__proto__ = e4, t5; + }, module2.exports.__esModule = true, module2.exports["default"] = module2.exports, _setPrototypeOf2(t4, e3); + } + module2.exports = _setPrototypeOf2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/inherits.js +var require_inherits = __commonJS({ + "node_modules/@babel/runtime/helpers/inherits.js"(exports2, module2) { + var setPrototypeOf = require_setPrototypeOf(); + function _inherits2(t4, e3) { + if ("function" != typeof e3 && null !== e3) throw new TypeError("Super expression must either be null or a function"); + t4.prototype = Object.create(e3 && e3.prototype, { + constructor: { + value: t4, + writable: true, + configurable: true + } + }), Object.defineProperty(t4, "prototype", { + writable: false + }), e3 && setPrototypeOf(t4, e3); + } + module2.exports = _inherits2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/getPrototypeOf.js +var require_getPrototypeOf = __commonJS({ + "node_modules/@babel/runtime/helpers/getPrototypeOf.js"(exports2, module2) { + function _getPrototypeOf2(t4) { + return module2.exports = _getPrototypeOf2 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t5) { + return t5.__proto__ || Object.getPrototypeOf(t5); + }, module2.exports.__esModule = true, module2.exports["default"] = module2.exports, _getPrototypeOf2(t4); + } + module2.exports = _getPrototypeOf2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js +var require_isNativeReflectConstruct = __commonJS({ + "node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js"(exports2, module2) { + function _isNativeReflectConstruct2() { + try { + var t4 = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() { + })); + } catch (t5) { + } + return (module2.exports = _isNativeReflectConstruct2 = function _isNativeReflectConstruct3() { + return !!t4; + }, module2.exports.__esModule = true, module2.exports["default"] = module2.exports)(); + } + module2.exports = _isNativeReflectConstruct2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/assertThisInitialized.js +var require_assertThisInitialized = __commonJS({ + "node_modules/@babel/runtime/helpers/assertThisInitialized.js"(exports2, module2) { + function _assertThisInitialized2(e3) { + if (void 0 === e3) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e3; + } + module2.exports = _assertThisInitialized2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/possibleConstructorReturn.js +var require_possibleConstructorReturn = __commonJS({ + "node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"(exports2, module2) { + var _typeof2 = require_typeof()["default"]; + var assertThisInitialized = require_assertThisInitialized(); + function _possibleConstructorReturn2(t4, e3) { + if (e3 && ("object" == _typeof2(e3) || "function" == typeof e3)) return e3; + if (void 0 !== e3) throw new TypeError("Derived constructors may only return object or undefined"); + return assertThisInitialized(t4); + } + module2.exports = _possibleConstructorReturn2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/createSuper.js +var require_createSuper = __commonJS({ + "node_modules/@babel/runtime/helpers/createSuper.js"(exports2, module2) { + var getPrototypeOf = require_getPrototypeOf(); + var isNativeReflectConstruct = require_isNativeReflectConstruct(); + var possibleConstructorReturn = require_possibleConstructorReturn(); + function _createSuper2(t4) { + var r4 = isNativeReflectConstruct(); + return function() { + var e3, o4 = getPrototypeOf(t4); + if (r4) { + var s4 = getPrototypeOf(this).constructor; + e3 = Reflect.construct(o4, arguments, s4); + } else e3 = o4.apply(this, arguments); + return possibleConstructorReturn(this, e3); + }; + } + module2.exports = _createSuper2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/arrayWithoutHoles.js +var require_arrayWithoutHoles = __commonJS({ + "node_modules/@babel/runtime/helpers/arrayWithoutHoles.js"(exports2, module2) { + var arrayLikeToArray = require_arrayLikeToArray(); + function _arrayWithoutHoles2(r4) { + if (Array.isArray(r4)) return arrayLikeToArray(r4); + } + module2.exports = _arrayWithoutHoles2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/iterableToArray.js +var require_iterableToArray = __commonJS({ + "node_modules/@babel/runtime/helpers/iterableToArray.js"(exports2, module2) { + function _iterableToArray2(r4) { + if ("undefined" != typeof Symbol && null != r4[Symbol.iterator] || null != r4["@@iterator"]) return Array.from(r4); + } + module2.exports = _iterableToArray2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/nonIterableSpread.js +var require_nonIterableSpread = __commonJS({ + "node_modules/@babel/runtime/helpers/nonIterableSpread.js"(exports2, module2) { + function _nonIterableSpread2() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + module2.exports = _nonIterableSpread2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/toConsumableArray.js +var require_toConsumableArray = __commonJS({ + "node_modules/@babel/runtime/helpers/toConsumableArray.js"(exports2, module2) { + var arrayWithoutHoles = require_arrayWithoutHoles(); + var iterableToArray = require_iterableToArray(); + var unsupportedIterableToArray = require_unsupportedIterableToArray(); + var nonIterableSpread = require_nonIterableSpread(); + function _toConsumableArray2(r4) { + return arrayWithoutHoles(r4) || iterableToArray(r4) || unsupportedIterableToArray(r4) || nonIterableSpread(); + } + module2.exports = _toConsumableArray2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js +var require_taggedTemplateLiteral = __commonJS({ + "node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js"(exports2, module2) { + function _taggedTemplateLiteral2(e3, t4) { + return t4 || (t4 = e3.slice(0)), Object.freeze(Object.defineProperties(e3, { + raw: { + value: Object.freeze(t4) + } + })); + } + module2.exports = _taggedTemplateLiteral2, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@fortawesome/fontawesome-svg-core/index.mjs +var fontawesome_svg_core_exports = {}; +__export(fontawesome_svg_core_exports, { + api: () => api, + config: () => config$1, + counter: () => counter, + dom: () => dom$1, + findIconDefinition: () => findIconDefinition$1, + icon: () => icon, + layer: () => layer, + library: () => library$1, + noAuto: () => noAuto$1, + parse: () => parse$1, + text: () => text, + toHtml: () => toHtml$1 +}); +function familyProxy(obj) { + return new Proxy(obj, { + get(target, prop) { + return prop in target ? target[prop] : target[a3]; + } + }); +} +function getAttrConfig(attr) { + var element = DOCUMENT.querySelector("script[" + attr + "]"); + if (element) { + return element.getAttribute(attr); + } +} +function coerce(val) { + if (val === "") return true; + if (val === "false") return false; + if (val === "true") return true; + return val; +} +function onChange2(cb) { + _onChangeCb.push(cb); + return () => { + _onChangeCb.splice(_onChangeCb.indexOf(cb), 1); + }; +} +function insertCss(css6) { + if (!css6 || !IS_DOM) { + return; + } + const style = DOCUMENT.createElement("style"); + style.setAttribute("type", "text/css"); + style.innerHTML = css6; + const headChildren = DOCUMENT.head.childNodes; + let beforeChild = null; + for (let i4 = headChildren.length - 1; i4 > -1; i4--) { + const child = headChildren[i4]; + const tagName = (child.tagName || "").toUpperCase(); + if (["STYLE", "LINK"].indexOf(tagName) > -1) { + beforeChild = child; + } + } + DOCUMENT.head.insertBefore(style, beforeChild); + return css6; +} +function nextUniqueId() { + let size2 = 12; + let id = ""; + while (size2-- > 0) { + id += idPool[Math.random() * 62 | 0]; + } + return id; +} +function toArray(obj) { + const array = []; + for (let i4 = (obj || []).length >>> 0; i4--; ) { + array[i4] = obj[i4]; + } + return array; +} +function classArray(node2) { + if (node2.classList) { + return toArray(node2.classList); + } else { + return (node2.getAttribute("class") || "").split(" ").filter((i4) => i4); + } +} +function htmlEscape(str) { + return "".concat(str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(//g, ">"); +} +function joinAttributes(attributes) { + return Object.keys(attributes || {}).reduce((acc, attributeName) => { + return acc + "".concat(attributeName, '="').concat(htmlEscape(attributes[attributeName]), '" '); + }, "").trim(); +} +function joinStyles(styles2) { + return Object.keys(styles2 || {}).reduce((acc, styleName) => { + return acc + "".concat(styleName, ": ").concat(styles2[styleName].trim(), ";"); + }, ""); +} +function transformIsMeaningful(transform2) { + return transform2.size !== meaninglessTransform.size || transform2.x !== meaninglessTransform.x || transform2.y !== meaninglessTransform.y || transform2.rotate !== meaninglessTransform.rotate || transform2.flipX || transform2.flipY; +} +function transformForSvg(_ref3) { + let { + transform: transform2, + containerWidth, + iconWidth + } = _ref3; + const outer = { + transform: "translate(".concat(containerWidth / 2, " 256)") + }; + const innerTranslate = "translate(".concat(transform2.x * 32, ", ").concat(transform2.y * 32, ") "); + const innerScale = "scale(".concat(transform2.size / 16 * (transform2.flipX ? -1 : 1), ", ").concat(transform2.size / 16 * (transform2.flipY ? -1 : 1), ") "); + const innerRotate = "rotate(".concat(transform2.rotate, " 0 0)"); + const inner = { + transform: "".concat(innerTranslate, " ").concat(innerScale, " ").concat(innerRotate) + }; + const path = { + transform: "translate(".concat(iconWidth / 2 * -1, " -256)") + }; + return { + outer, + inner, + path + }; +} +function transformForCss(_ref23) { + let { + transform: transform2, + width = UNITS_IN_GRID, + height = UNITS_IN_GRID, + startCentered = false + } = _ref23; + let val = ""; + if (startCentered && IS_IE) { + val += "translate(".concat(transform2.x / d$2 - width / 2, "em, ").concat(transform2.y / d$2 - height / 2, "em) "); + } else if (startCentered) { + val += "translate(calc(-50% + ".concat(transform2.x / d$2, "em), calc(-50% + ").concat(transform2.y / d$2, "em)) "); + } else { + val += "translate(".concat(transform2.x / d$2, "em, ").concat(transform2.y / d$2, "em) "); + } + val += "scale(".concat(transform2.size / d$2 * (transform2.flipX ? -1 : 1), ", ").concat(transform2.size / d$2 * (transform2.flipY ? -1 : 1), ") "); + val += "rotate(".concat(transform2.rotate, "deg) "); + return val; +} +function css5() { + const dcp = DEFAULT_CSS_PREFIX; + const drc = DEFAULT_REPLACEMENT_CLASS; + const fp = config.cssPrefix; + const rc = config.replacementClass; + let s4 = baseStyles; + if (fp !== dcp || rc !== drc) { + const dPatt = new RegExp("\\.".concat(dcp, "\\-"), "g"); + const customPropPatt = new RegExp("\\--".concat(dcp, "\\-"), "g"); + const rPatt = new RegExp("\\.".concat(drc), "g"); + s4 = s4.replace(dPatt, ".".concat(fp, "-")).replace(customPropPatt, "--".concat(fp, "-")).replace(rPatt, ".".concat(rc)); + } + return s4; +} +function ensureCss() { + if (config.autoAddCss && !_cssInserted) { + insertCss(css5()); + _cssInserted = true; + } +} +function domready(fn2) { + if (!IS_DOM) return; + loaded ? setTimeout(fn2, 0) : functions.push(fn2); +} +function toHtml(abstractNodes) { + const { + tag, + attributes = {}, + children = [] + } = abstractNodes; + if (typeof abstractNodes === "string") { + return htmlEscape(abstractNodes); + } else { + return "<".concat(tag, " ").concat(joinAttributes(attributes), ">").concat(children.map(toHtml).join(""), ""); + } +} +function iconFromMapping(mapping, prefix2, iconName) { + if (mapping && mapping[prefix2] && mapping[prefix2][iconName]) { + return { + prefix: prefix2, + iconName, + icon: mapping[prefix2][iconName] + }; + } +} +function ucs2decode(string2) { + const output = []; + let counter2 = 0; + const length2 = string2.length; + while (counter2 < length2) { + const value = string2.charCodeAt(counter2++); + if (value >= 55296 && value <= 56319 && counter2 < length2) { + const extra = string2.charCodeAt(counter2++); + if ((extra & 64512) == 56320) { + output.push(((value & 1023) << 10) + (extra & 1023) + 65536); + } else { + output.push(value); + counter2--; + } + } else { + output.push(value); + } + } + return output; +} +function toHex(unicode) { + const decoded = ucs2decode(unicode); + return decoded.length === 1 ? decoded[0].toString(16) : null; +} +function codePointAt(string2, index) { + const size2 = string2.length; + let first = string2.charCodeAt(index); + let second; + if (first >= 55296 && first <= 56319 && size2 > index + 1) { + second = string2.charCodeAt(index + 1); + if (second >= 56320 && second <= 57343) { + return (first - 55296) * 1024 + second - 56320 + 65536; + } + } + return first; +} +function normalizeIcons(icons) { + return Object.keys(icons).reduce((acc, iconName) => { + const icon2 = icons[iconName]; + const expanded = !!icon2.icon; + if (expanded) { + acc[icon2.iconName] = icon2.icon; + } else { + acc[iconName] = icon2; + } + return acc; + }, {}); +} +function defineIcons(prefix2, icons) { + let params = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + const { + skipHooks = false + } = params; + const normalized = normalizeIcons(icons); + if (typeof namespace.hooks.addPack === "function" && !skipHooks) { + namespace.hooks.addPack(prefix2, normalizeIcons(icons)); + } else { + namespace.styles[prefix2] = { + ...namespace.styles[prefix2] || {}, + ...normalized + }; + } + if (prefix2 === "fas") { + defineIcons("fa", icons); + } +} +function isReserved(name) { + return ~RESERVED_CLASSES.indexOf(name); +} +function getIconName(cssPrefix, cls) { + const parts = cls.split("-"); + const prefix2 = parts[0]; + const iconName = parts.slice(1).join("-"); + if (prefix2 === cssPrefix && iconName !== "" && !isReserved(iconName)) { + return iconName; + } else { + return null; + } +} +function byUnicode(prefix2, unicode) { + return (_byUnicode[prefix2] || {})[unicode]; +} +function byLigature(prefix2, ligature) { + return (_byLigature[prefix2] || {})[ligature]; +} +function byAlias(prefix2, alias) { + return (_byAlias[prefix2] || {})[alias]; +} +function byOldName(name) { + return _byOldName[name] || { + prefix: null, + iconName: null + }; +} +function byOldUnicode(unicode) { + const oldUnicode = _byOldUnicode[unicode]; + const newUnicode = byUnicode("fas", unicode); + return oldUnicode || (newUnicode ? { + prefix: "fas", + iconName: newUnicode + } : null) || { + prefix: null, + iconName: null + }; +} +function getDefaultUsablePrefix() { + return _defaultUsablePrefix; +} +function getCanonicalPrefix(styleOrPrefix) { + let params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { + family = a3 + } = params; + const style = PREFIX_TO_STYLE[family][styleOrPrefix]; + const prefix2 = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style]; + const defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null; + const result = prefix2 || defined || null; + return result; +} +function getCanonicalIcon(values) { + let params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { + skipLookups = false + } = params; + const famProps = { + [a3]: "".concat(config.cssPrefix, "-").concat(a3), + [r3]: "".concat(config.cssPrefix, "-").concat(r3), + [o3]: "".concat(config.cssPrefix, "-").concat(o3) + }; + let givenPrefix = null; + let family = a3; + const nonDuotoneFamilyIds = c3.filter((familyId) => familyId !== t3); + nonDuotoneFamilyIds.forEach((familyId) => { + if (values.includes(famProps[familyId]) || values.some((v$$1) => PREFIXES_FOR_FAMILY[familyId].includes(v$$1))) { + family = familyId; + } + }); + const canonical = values.reduce((acc, cls) => { + const iconName = getIconName(config.cssPrefix, cls); + if (styles[cls]) { + cls = LONG_STYLE[family].includes(cls) ? LONG_STYLE_TO_PREFIX[family][cls] : cls; + givenPrefix = cls; + acc.prefix = cls; + } else if (PREFIXES[family].indexOf(cls) > -1) { + givenPrefix = cls; + acc.prefix = getCanonicalPrefix(cls, { + family + }); + } else if (iconName) { + acc.iconName = iconName; + } else if (cls !== config.replacementClass && !nonDuotoneFamilyIds.some((familyName) => cls === famProps[familyName])) { + acc.rest.push(cls); + } + if (!skipLookups && acc.prefix && acc.iconName) { + const shim = givenPrefix === "fa" ? byOldName(acc.iconName) : {}; + const aliasIconName = byAlias(acc.prefix, acc.iconName); + if (shim.prefix) { + givenPrefix = null; + } + acc.iconName = shim.iconName || aliasIconName || acc.iconName; + acc.prefix = shim.prefix || acc.prefix; + if (acc.prefix === "far" && !styles["far"] && styles["fas"] && !config.autoFetchSvg) { + acc.prefix = "fas"; + } + } + return acc; + }, emptyCanonicalIcon()); + if (values.includes("fa-brands") || values.includes("fab")) { + canonical.prefix = "fab"; + } + if (values.includes("fa-duotone") || values.includes("fad")) { + canonical.prefix = "fad"; + } + if (!canonical.prefix && family === r3 && (styles["fass"] || config.autoFetchSvg)) { + canonical.prefix = "fass"; + canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName; + } + if (!canonical.prefix && family === o3 && (styles["fasds"] || config.autoFetchSvg)) { + canonical.prefix = "fasds"; + canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName; + } + if (canonical.prefix === "fa" || givenPrefix === "fa") { + canonical.prefix = getDefaultUsablePrefix() || "fas"; + } + return canonical; +} +function registerPlugins(nextPlugins, _ref3) { + let { + mixoutsTo: obj + } = _ref3; + _plugins = nextPlugins; + _hooks = {}; + Object.keys(providers).forEach((k4) => { + if (defaultProviderKeys.indexOf(k4) === -1) { + delete providers[k4]; + } + }); + _plugins.forEach((plugin) => { + const mixout = plugin.mixout ? plugin.mixout() : {}; + Object.keys(mixout).forEach((tk) => { + if (typeof mixout[tk] === "function") { + obj[tk] = mixout[tk]; + } + if (typeof mixout[tk] === "object") { + Object.keys(mixout[tk]).forEach((sk) => { + if (!obj[tk]) { + obj[tk] = {}; + } + obj[tk][sk] = mixout[tk][sk]; + }); + } + }); + if (plugin.hooks) { + const hooks = plugin.hooks(); + Object.keys(hooks).forEach((hook) => { + if (!_hooks[hook]) { + _hooks[hook] = []; + } + _hooks[hook].push(hooks[hook]); + }); + } + if (plugin.provides) { + plugin.provides(providers); + } + }); + return obj; +} +function chainHooks(hook, accumulator) { + for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + const hookFns = _hooks[hook] || []; + hookFns.forEach((hookFn) => { + accumulator = hookFn.apply(null, [accumulator, ...args]); + }); + return accumulator; +} +function callHooks(hook) { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + const hookFns = _hooks[hook] || []; + hookFns.forEach((hookFn) => { + hookFn.apply(null, args); + }); + return void 0; +} +function callProvided() { + const hook = arguments[0]; + const args = Array.prototype.slice.call(arguments, 1); + return providers[hook] ? providers[hook].apply(null, args) : void 0; +} +function findIconDefinition(iconLookup) { + if (iconLookup.prefix === "fa") { + iconLookup.prefix = "fas"; + } + let { + iconName + } = iconLookup; + const prefix2 = iconLookup.prefix || getDefaultUsablePrefix(); + if (!iconName) return; + iconName = byAlias(prefix2, iconName) || iconName; + return iconFromMapping(library.definitions, prefix2, iconName) || iconFromMapping(namespace.styles, prefix2, iconName); +} +function domVariants(val, abstractCreator) { + Object.defineProperty(val, "abstract", { + get: abstractCreator + }); + Object.defineProperty(val, "html", { + get: function() { + return val.abstract.map((a4) => toHtml(a4)); + } + }); + Object.defineProperty(val, "node", { + get: function() { + if (!IS_DOM) return; + const container = DOCUMENT.createElement("div"); + container.innerHTML = val.html; + return container.children; + } + }); + return val; +} +function asIcon(_ref3) { + let { + children, + main, + mask, + attributes, + styles: styles2, + transform: transform2 + } = _ref3; + if (transformIsMeaningful(transform2) && main.found && !mask.found) { + const { + width, + height + } = main; + const offset3 = { + x: width / height / 2, + y: 0.5 + }; + attributes["style"] = joinStyles({ + ...styles2, + "transform-origin": "".concat(offset3.x + transform2.x / 16, "em ").concat(offset3.y + transform2.y / 16, "em") + }); + } + return [{ + tag: "svg", + attributes, + children + }]; +} +function asSymbol(_ref3) { + let { + prefix: prefix2, + iconName, + children, + attributes, + symbol + } = _ref3; + const id = symbol === true ? "".concat(prefix2, "-").concat(config.cssPrefix, "-").concat(iconName) : symbol; + return [{ + tag: "svg", + attributes: { + style: "display: none;" + }, + children: [{ + tag: "symbol", + attributes: { + ...attributes, + id + }, + children + }] + }]; +} +function makeInlineSvgAbstract(params) { + const { + icons: { + main, + mask + }, + prefix: prefix2, + iconName, + transform: transform2, + symbol, + title, + maskId, + titleId, + extra, + watchable = false + } = params; + const { + width, + height + } = mask.found ? mask : main; + const isUploadedIcon = prefix2 === "fak"; + const attrClass = [config.replacementClass, iconName ? "".concat(config.cssPrefix, "-").concat(iconName) : ""].filter((c4) => extra.classes.indexOf(c4) === -1).filter((c4) => c4 !== "" || !!c4).concat(extra.classes).join(" "); + let content = { + children: [], + attributes: { + ...extra.attributes, + "data-prefix": prefix2, + "data-icon": iconName, + "class": attrClass, + "role": extra.attributes.role || "img", + "xmlns": "http://www.w3.org/2000/svg", + "viewBox": "0 0 ".concat(width, " ").concat(height) + } + }; + const uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf("fa-fw") ? { + width: "".concat(width / height * 16 * 0.0625, "em") + } : {}; + if (watchable) { + content.attributes[DATA_FA_I2SVG] = ""; + } + if (title) { + content.children.push({ + tag: "title", + attributes: { + id: content.attributes["aria-labelledby"] || "title-".concat(titleId || nextUniqueId()) + }, + children: [title] + }); + delete content.attributes.title; + } + const args = { + ...content, + prefix: prefix2, + iconName, + main, + mask, + maskId, + transform: transform2, + symbol, + styles: { + ...uploadedIconWidthStyle, + ...extra.styles + } + }; + const { + children, + attributes + } = mask.found && main.found ? callProvided("generateAbstractMask", args) || { + children: [], + attributes: {} + } : callProvided("generateAbstractIcon", args) || { + children: [], + attributes: {} + }; + args.children = children; + args.attributes = attributes; + if (symbol) { + return asSymbol(args); + } else { + return asIcon(args); + } +} +function makeLayersTextAbstract(params) { + const { + content, + width, + height, + transform: transform2, + title, + extra, + watchable = false + } = params; + const attributes = { + ...extra.attributes, + ...title ? { + "title": title + } : {}, + "class": extra.classes.join(" ") + }; + if (watchable) { + attributes[DATA_FA_I2SVG] = ""; + } + const styles2 = { + ...extra.styles + }; + if (transformIsMeaningful(transform2)) { + styles2["transform"] = transformForCss({ + transform: transform2, + startCentered: true, + width, + height + }); + styles2["-webkit-transform"] = styles2["transform"]; + } + const styleString = joinStyles(styles2); + if (styleString.length > 0) { + attributes["style"] = styleString; + } + const val = []; + val.push({ + tag: "span", + attributes, + children: [content] + }); + if (title) { + val.push({ + tag: "span", + attributes: { + class: "sr-only" + }, + children: [title] + }); + } + return val; +} +function makeLayersCounterAbstract(params) { + const { + content, + title, + extra + } = params; + const attributes = { + ...extra.attributes, + ...title ? { + "title": title + } : {}, + "class": extra.classes.join(" ") + }; + const styleString = joinStyles(extra.styles); + if (styleString.length > 0) { + attributes["style"] = styleString; + } + const val = []; + val.push({ + tag: "span", + attributes, + children: [content] + }); + if (title) { + val.push({ + tag: "span", + attributes: { + class: "sr-only" + }, + children: [title] + }); + } + return val; +} +function asFoundIcon(icon2) { + const width = icon2[0]; + const height = icon2[1]; + const [vectorData] = icon2.slice(4); + let element = null; + if (Array.isArray(vectorData)) { + element = { + tag: "g", + attributes: { + class: "".concat(config.cssPrefix, "-").concat(DUOTONE_CLASSES.GROUP) + }, + children: [{ + tag: "path", + attributes: { + class: "".concat(config.cssPrefix, "-").concat(DUOTONE_CLASSES.SECONDARY), + fill: "currentColor", + d: vectorData[0] + } + }, { + tag: "path", + attributes: { + class: "".concat(config.cssPrefix, "-").concat(DUOTONE_CLASSES.PRIMARY), + fill: "currentColor", + d: vectorData[1] + } + }] + }; + } else { + element = { + tag: "path", + attributes: { + fill: "currentColor", + d: vectorData + } + }; + } + return { + found: true, + width, + height, + icon: element + }; +} +function maybeNotifyMissing(iconName, prefix2) { + if (!PRODUCTION && !config.showMissingIcons && iconName) { + console.error('Icon with name "'.concat(iconName, '" and prefix "').concat(prefix2, '" is missing.')); + } +} +function findIcon(iconName, prefix2) { + let givenPrefix = prefix2; + if (prefix2 === "fa" && config.styleDefault !== null) { + prefix2 = getDefaultUsablePrefix(); + } + return new Promise((resolve, reject) => { + if (givenPrefix === "fa") { + const shim = byOldName(iconName) || {}; + iconName = shim.iconName || iconName; + prefix2 = shim.prefix || prefix2; + } + if (iconName && prefix2 && styles$1[prefix2] && styles$1[prefix2][iconName]) { + const icon2 = styles$1[prefix2][iconName]; + return resolve(asFoundIcon(icon2)); + } + maybeNotifyMissing(iconName, prefix2); + resolve({ + ...missingIconResolutionMixin, + icon: config.showMissingIcons && iconName ? callProvided("missingIconAbstract") || {} : {} + }); + }); +} +function isWatched(node2) { + const i2svg = node2.getAttribute ? node2.getAttribute(DATA_FA_I2SVG) : null; + return typeof i2svg === "string"; +} +function hasPrefixAndIcon(node2) { + const prefix2 = node2.getAttribute ? node2.getAttribute(DATA_PREFIX) : null; + const icon2 = node2.getAttribute ? node2.getAttribute(DATA_ICON) : null; + return prefix2 && icon2; +} +function hasBeenReplaced(node2) { + return node2 && node2.classList && node2.classList.contains && node2.classList.contains(config.replacementClass); +} +function getMutator() { + if (config.autoReplaceSvg === true) { + return mutators.replace; + } + const mutator = mutators[config.autoReplaceSvg]; + return mutator || mutators.replace; +} +function createElementNS(tag) { + return DOCUMENT.createElementNS("http://www.w3.org/2000/svg", tag); +} +function createElement(tag) { + return DOCUMENT.createElement(tag); +} +function convertSVG(abstractObj) { + let params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { + ceFn = abstractObj.tag === "svg" ? createElementNS : createElement + } = params; + if (typeof abstractObj === "string") { + return DOCUMENT.createTextNode(abstractObj); + } + const tag = ceFn(abstractObj.tag); + Object.keys(abstractObj.attributes || []).forEach(function(key) { + tag.setAttribute(key, abstractObj.attributes[key]); + }); + const children = abstractObj.children || []; + children.forEach(function(child) { + tag.appendChild(convertSVG(child, { + ceFn + })); + }); + return tag; +} +function nodeAsComment(node2) { + let comment2 = " ".concat(node2.outerHTML, " "); + comment2 = "".concat(comment2, "Font Awesome fontawesome.com "); + return comment2; +} +function performOperationSync(op) { + op(); +} +function perform(mutations, callback) { + const callbackFunction = typeof callback === "function" ? callback : noop$2; + if (mutations.length === 0) { + callbackFunction(); + } else { + let frame = performOperationSync; + if (config.mutateApproach === MUTATION_APPROACH_ASYNC) { + frame = WINDOW.requestAnimationFrame || performOperationSync; + } + frame(() => { + const mutator = getMutator(); + const mark = perf.begin("mutate"); + mutations.map(mutator); + mark(); + callbackFunction(); + }); + } +} +function disableObservation() { + disabled = true; +} +function enableObservation() { + disabled = false; +} +function observe(options2) { + if (!MUTATION_OBSERVER) { + return; + } + if (!config.observeMutations) { + return; + } + const { + treeCallback = noop$2, + nodeCallback = noop$2, + pseudoElementsCallback = noop$2, + observeMutationsRoot = DOCUMENT + } = options2; + mo$1 = new MUTATION_OBSERVER((objects) => { + if (disabled) return; + const defaultPrefix = getDefaultUsablePrefix(); + toArray(objects).forEach((mutationRecord) => { + if (mutationRecord.type === "childList" && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) { + if (config.searchPseudoElements) { + pseudoElementsCallback(mutationRecord.target); + } + treeCallback(mutationRecord.target); + } + if (mutationRecord.type === "attributes" && mutationRecord.target.parentNode && config.searchPseudoElements) { + pseudoElementsCallback(mutationRecord.target.parentNode); + } + if (mutationRecord.type === "attributes" && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) { + if (mutationRecord.attributeName === "class" && hasPrefixAndIcon(mutationRecord.target)) { + const { + prefix: prefix2, + iconName + } = getCanonicalIcon(classArray(mutationRecord.target)); + mutationRecord.target.setAttribute(DATA_PREFIX, prefix2 || defaultPrefix); + if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName); + } else if (hasBeenReplaced(mutationRecord.target)) { + nodeCallback(mutationRecord.target); + } + } + }); + }); + if (!IS_DOM) return; + mo$1.observe(observeMutationsRoot, { + childList: true, + attributes: true, + characterData: true, + subtree: true + }); +} +function disconnect() { + if (!mo$1) return; + mo$1.disconnect(); +} +function styleParser(node2) { + const style = node2.getAttribute("style"); + let val = []; + if (style) { + val = style.split(";").reduce((acc, style2) => { + const styles2 = style2.split(":"); + const prop = styles2[0]; + const value = styles2.slice(1); + if (prop && value.length > 0) { + acc[prop] = value.join(":").trim(); + } + return acc; + }, {}); + } + return val; +} +function classParser(node2) { + const existingPrefix = node2.getAttribute("data-prefix"); + const existingIconName = node2.getAttribute("data-icon"); + const innerText = node2.innerText !== void 0 ? node2.innerText.trim() : ""; + let val = getCanonicalIcon(classArray(node2)); + if (!val.prefix) { + val.prefix = getDefaultUsablePrefix(); + } + if (existingPrefix && existingIconName) { + val.prefix = existingPrefix; + val.iconName = existingIconName; + } + if (val.iconName && val.prefix) { + return val; + } + if (val.prefix && innerText.length > 0) { + val.iconName = byLigature(val.prefix, node2.innerText) || byUnicode(val.prefix, toHex(node2.innerText)); + } + if (!val.iconName && config.autoFetchSvg && node2.firstChild && node2.firstChild.nodeType === Node.TEXT_NODE) { + val.iconName = node2.firstChild.data; + } + return val; +} +function attributesParser(node2) { + const extraAttributes = toArray(node2.attributes).reduce((acc, attr) => { + if (acc.name !== "class" && acc.name !== "style") { + acc[attr.name] = attr.value; + } + return acc; + }, {}); + const title = node2.getAttribute("title"); + const titleId = node2.getAttribute("data-fa-title-id"); + if (config.autoA11y) { + if (title) { + extraAttributes["aria-labelledby"] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId()); + } else { + extraAttributes["aria-hidden"] = "true"; + extraAttributes["focusable"] = "false"; + } + } + return extraAttributes; +} +function blankMeta() { + return { + iconName: null, + title: null, + titleId: null, + prefix: null, + transform: meaninglessTransform, + symbol: false, + mask: { + iconName: null, + prefix: null, + rest: [] + }, + maskId: null, + extra: { + classes: [], + styles: {}, + attributes: {} + } + }; +} +function parseMeta(node2) { + let parser = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : { + styleParser: true + }; + const { + iconName, + prefix: prefix2, + rest: extraClasses + } = classParser(node2); + const extraAttributes = attributesParser(node2); + const pluginMeta = chainHooks("parseNodeAttributes", {}, node2); + let extraStyles = parser.styleParser ? styleParser(node2) : []; + return { + iconName, + title: node2.getAttribute("title"), + titleId: node2.getAttribute("data-fa-title-id"), + prefix: prefix2, + transform: meaninglessTransform, + mask: { + iconName: null, + prefix: null, + rest: [] + }, + maskId: null, + symbol: false, + extra: { + classes: extraClasses, + styles: extraStyles, + attributes: extraAttributes + }, + ...pluginMeta + }; +} +function generateMutation(node2) { + const nodeMeta = config.autoReplaceSvg === "nest" ? parseMeta(node2, { + styleParser: false + }) : parseMeta(node2); + if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) { + return callProvided("generateLayersText", node2, nodeMeta); + } else { + return callProvided("generateSvgReplacementMutation", node2, nodeMeta); + } +} +function onTree(root) { + let callback = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; + if (!IS_DOM) return Promise.resolve(); + const htmlClassList = DOCUMENT.documentElement.classList; + const hclAdd = (suffix) => htmlClassList.add("".concat(HTML_CLASS_I2SVG_BASE_CLASS, "-").concat(suffix)); + const hclRemove = (suffix) => htmlClassList.remove("".concat(HTML_CLASS_I2SVG_BASE_CLASS, "-").concat(suffix)); + const prefixes2 = config.autoFetchSvg ? knownPrefixes : FAMILIES.map((f$$1) => "fa-".concat(f$$1)).concat(Object.keys(styles$2)); + if (!prefixes2.includes("fa")) { + prefixes2.push("fa"); + } + const prefixesDomQuery = [".".concat(LAYERS_TEXT_CLASSNAME, ":not([").concat(DATA_FA_I2SVG, "])")].concat(prefixes2.map((p$$1) => ".".concat(p$$1, ":not([").concat(DATA_FA_I2SVG, "])"))).join(", "); + if (prefixesDomQuery.length === 0) { + return Promise.resolve(); + } + let candidates = []; + try { + candidates = toArray(root.querySelectorAll(prefixesDomQuery)); + } catch (e$$1) { + } + if (candidates.length > 0) { + hclAdd("pending"); + hclRemove("complete"); + } else { + return Promise.resolve(); + } + const mark = perf.begin("onTree"); + const mutations = candidates.reduce((acc, node2) => { + try { + const mutation = generateMutation(node2); + if (mutation) { + acc.push(mutation); + } + } catch (e$$1) { + if (!PRODUCTION) { + if (e$$1.name === "MissingIcon") { + console.error(e$$1); + } + } + } + return acc; + }, []); + return new Promise((resolve, reject) => { + Promise.all(mutations).then((resolvedMutations) => { + perform(resolvedMutations, () => { + hclAdd("active"); + hclAdd("complete"); + hclRemove("pending"); + if (typeof callback === "function") callback(); + mark(); + resolve(); + }); + }).catch((e$$1) => { + mark(); + reject(e$$1); + }); + }); +} +function onNode(node2) { + let callback = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; + generateMutation(node2).then((mutation) => { + if (mutation) { + perform([mutation], callback); + } + }); +} +function resolveIcons(next2) { + return function(maybeIconDefinition) { + let params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {}); + let { + mask + } = params; + if (mask) { + mask = (mask || {}).icon ? mask : findIconDefinition(mask || {}); + } + return next2(iconDefinition, { + ...params, + mask + }); + }; +} +function hexValueFromContent(content) { + const cleaned = content.replace(CLEAN_CONTENT_PATTERN, ""); + const codePoint = codePointAt(cleaned, 0); + const isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1]; + const isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false; + return { + value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned), + isSecondary: isPrependTen || isDoubled + }; +} +function getPrefix(fontFamily, fontWeight) { + const fontFamilySanitized = fontFamily.replace(/^['"]|['"]$/g, "").toLowerCase(); + const fontWeightInteger = parseInt(fontWeight); + const fontWeightSanitized = isNaN(fontWeightInteger) ? "normal" : fontWeightInteger; + return (FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamilySanitized] || {})[fontWeightSanitized] || FONT_FAMILY_WEIGHT_FALLBACK[fontFamilySanitized]; +} +function replaceForPosition(node2, position2) { + const pendingAttribute = "".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position2.replace(":", "-")); + return new Promise((resolve, reject) => { + if (node2.getAttribute(pendingAttribute) !== null) { + return resolve(); + } + const children = toArray(node2.children); + const alreadyProcessedPseudoElement = children.filter((c4) => c4.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position2)[0]; + const styles2 = WINDOW.getComputedStyle(node2, position2); + const fontFamily = styles2.getPropertyValue("font-family"); + const fontFamilyMatch = fontFamily.match(FONT_FAMILY_PATTERN); + const fontWeight = styles2.getPropertyValue("font-weight"); + const content = styles2.getPropertyValue("content"); + if (alreadyProcessedPseudoElement && !fontFamilyMatch) { + node2.removeChild(alreadyProcessedPseudoElement); + return resolve(); + } else if (fontFamilyMatch && content !== "none" && content !== "") { + const content2 = styles2.getPropertyValue("content"); + let prefix2 = getPrefix(fontFamily, fontWeight); + const { + value: hexValue, + isSecondary + } = hexValueFromContent(content2); + const isV4 = fontFamilyMatch[0].startsWith("FontAwesome"); + let iconName = byUnicode(prefix2, hexValue); + let iconIdentifier = iconName; + if (isV4) { + const iconName4 = byOldUnicode(hexValue); + if (iconName4.iconName && iconName4.prefix) { + iconName = iconName4.iconName; + prefix2 = iconName4.prefix; + } + } + if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix2 || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) { + node2.setAttribute(pendingAttribute, iconIdentifier); + if (alreadyProcessedPseudoElement) { + node2.removeChild(alreadyProcessedPseudoElement); + } + const meta = blankMeta(); + const { + extra + } = meta; + extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position2; + findIcon(iconName, prefix2).then((main) => { + const abstract = makeInlineSvgAbstract({ + ...meta, + icons: { + main, + mask: emptyCanonicalIcon() + }, + prefix: prefix2, + iconName: iconIdentifier, + extra, + watchable: true + }); + const element = DOCUMENT.createElementNS("http://www.w3.org/2000/svg", "svg"); + if (position2 === "::before") { + node2.insertBefore(element, node2.firstChild); + } else { + node2.appendChild(element); + } + element.outerHTML = abstract.map((a4) => toHtml(a4)).join("\n"); + node2.removeAttribute(pendingAttribute); + resolve(); + }).catch(reject); + } else { + resolve(); + } + } else { + resolve(); + } + }); +} +function replace2(node2) { + return Promise.all([replaceForPosition(node2, "::before"), replaceForPosition(node2, "::after")]); +} +function processable(node2) { + return node2.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node2.tagName.toUpperCase()) && !node2.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node2.parentNode || node2.parentNode.tagName !== "svg"); +} +function searchPseudoElements(root) { + if (!IS_DOM) return; + return new Promise((resolve, reject) => { + const operations = toArray(root.querySelectorAll("*")).filter(processable).map(replace2); + const end2 = perf.begin("searchPseudoElements"); + disableObservation(); + Promise.all(operations).then(() => { + end2(); + enableObservation(); + resolve(); + }).catch(() => { + end2(); + enableObservation(); + reject(); + }); + }); +} +function fillBlack(abstract) { + let force = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; + if (abstract.attributes && (abstract.attributes.fill || force)) { + abstract.attributes.fill = "black"; + } + return abstract; +} +function deGroup(abstract) { + if (abstract.tag === "g") { + return abstract.children; + } else { + return [abstract]; + } +} +var noop3, _WINDOW, _DOCUMENT, _MUTATION_OBSERVER, _PERFORMANCE, userAgent, WINDOW, DOCUMENT, MUTATION_OBSERVER, PERFORMANCE, IS_BROWSER, IS_DOM, IS_IE, a3, t3, r3, o3, c3, et$1, bt, Ct, Dt, Kt, ao, eo, lo, y3, no, fo, ho, x$1, u$1, m$1, t$1, yo, mo, Io, Fo, So, NAMESPACE_IDENTIFIER, UNITS_IN_GRID, DEFAULT_CSS_PREFIX, DEFAULT_REPLACEMENT_CLASS, DATA_FA_I2SVG, DATA_FA_PSEUDO_ELEMENT, DATA_FA_PSEUDO_ELEMENT_PENDING, DATA_PREFIX, DATA_ICON, HTML_CLASS_I2SVG_BASE_CLASS, MUTATION_APPROACH_ASYNC, TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS, PRODUCTION, FAMILIES, _PREFIX_TO_STYLE, PREFIX_TO_STYLE, _STYLE_TO_PREFIX, STYLE_TO_PREFIX, _PREFIX_TO_LONG_STYLE, PREFIX_TO_LONG_STYLE, _LONG_STYLE_TO_PREFIX, LONG_STYLE_TO_PREFIX, ICON_SELECTION_SYNTAX_PATTERN, LAYERS_TEXT_CLASSNAME, FONT_FAMILY_PATTERN, _FONT_WEIGHT_TO_PREFIX, FONT_WEIGHT_TO_PREFIX, ATTRIBUTES_WATCHED_FOR_MUTATION, DUOTONE_CLASSES, prefixes, RESERVED_CLASSES, initial, _default, _config, config, _onChangeCb, d$2, meaninglessTransform, idPool, baseStyles, _cssInserted, InjectCSS, w$1, namespace, functions, listener, loaded, bindInternal4, reduce, styles, shims, LONG_STYLE, _defaultUsablePrefix, _byUnicode, _byLigature, _byOldName, _byOldUnicode, _byAlias, PREFIXES, build, emptyCanonicalIcon, PREFIXES_FOR_FAMILY, Library, _plugins, _hooks, providers, defaultProviderKeys, library, noAuto, dom, parse3, api, autoReplace, styles$1, missingIconResolutionMixin, noop$1, p$2, preamble, begin, end, perf, noop$2, mutators, disabled, mo$1, styles$2, knownPrefixes, render, ReplaceElements, Layers, LayersCounter, LayersText, CLEAN_CONTENT_PATTERN, SECONDARY_UNICODE_RANGE, _FONT_FAMILY_WEIGHT_TO_PREFIX, FONT_FAMILY_WEIGHT_TO_PREFIX, FONT_FAMILY_WEIGHT_FALLBACK, PseudoElements, _unwatched, MutationObserver$1, parseTransformString, PowerTransforms, ALL_SPACE, Masks, MissingIconIndicator, SvgSymbols, plugins, noAuto$1, config$1, library$1, dom$1, parse$1, findIconDefinition$1, toHtml$1, icon, layer, text, counter; +var init_fontawesome_svg_core = __esm({ + "node_modules/@fortawesome/fontawesome-svg-core/index.mjs"() { + noop3 = () => { + }; + _WINDOW = {}; + _DOCUMENT = {}; + _MUTATION_OBSERVER = null; + _PERFORMANCE = { + mark: noop3, + measure: noop3 + }; + try { + if (typeof window !== "undefined") _WINDOW = window; + if (typeof document !== "undefined") _DOCUMENT = document; + if (typeof MutationObserver !== "undefined") _MUTATION_OBSERVER = MutationObserver; + if (typeof performance !== "undefined") _PERFORMANCE = performance; + } catch (e3) { + } + ({ + userAgent = "" + } = _WINDOW.navigator || {}); + WINDOW = _WINDOW; + DOCUMENT = _DOCUMENT; + MUTATION_OBSERVER = _MUTATION_OBSERVER; + PERFORMANCE = _PERFORMANCE; + IS_BROWSER = !!WINDOW.document; + IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === "function" && typeof DOCUMENT.createElement === "function"; + IS_IE = ~userAgent.indexOf("MSIE") || ~userAgent.indexOf("Trident/"); + a3 = "classic"; + t3 = "duotone"; + r3 = "sharp"; + o3 = "sharp-duotone"; + c3 = [a3, t3, r3, o3]; + et$1 = { + classic: { + 900: "fas", + 400: "far", + normal: "far", + 300: "fal", + 100: "fat" + }, + sharp: { + 900: "fass", + 400: "fasr", + 300: "fasl", + 100: "fast" + }, + "sharp-duotone": { + 900: "fasds" + } + }; + bt = { + kit: { + fak: "kit", + "fa-kit": "kit" + }, + "kit-duotone": { + fakd: "kit-duotone", + "fa-kit-duotone": "kit-duotone" + } + }; + Ct = ["kit"]; + Dt = /fa(s|r|l|t|d|b|k|kd|ss|sr|sl|st|sds)?[\-\ ]/; + Kt = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp Duotone|Sharp|Kit)?.*/i; + ao = { + "Font Awesome 5 Free": { + 900: "fas", + 400: "far" + }, + "Font Awesome 5 Pro": { + 900: "fas", + 400: "far", + normal: "far", + 300: "fal" + }, + "Font Awesome 5 Brands": { + 400: "fab", + normal: "fab" + }, + "Font Awesome 5 Duotone": { + 900: "fad" + } + }; + eo = { + "Font Awesome 6 Free": { + 900: "fas", + 400: "far" + }, + "Font Awesome 6 Pro": { + 900: "fas", + 400: "far", + normal: "far", + 300: "fal", + 100: "fat" + }, + "Font Awesome 6 Brands": { + 400: "fab", + normal: "fab" + }, + "Font Awesome 6 Duotone": { + 900: "fad" + }, + "Font Awesome 6 Sharp": { + 900: "fass", + 400: "fasr", + normal: "fasr", + 300: "fasl", + 100: "fast" + }, + "Font Awesome 6 Sharp Duotone": { + 900: "fasds" + } + }; + lo = { + classic: { + "fa-brands": "fab", + "fa-duotone": "fad", + "fa-light": "fal", + "fa-regular": "far", + "fa-solid": "fas", + "fa-thin": "fat" + }, + sharp: { + "fa-solid": "fass", + "fa-regular": "fasr", + "fa-light": "fasl", + "fa-thin": "fast" + }, + "sharp-duotone": { + "fa-solid": "fasds" + } + }; + y3 = { + classic: ["fas", "far", "fal", "fat"], + sharp: ["fass", "fasr", "fasl", "fast"], + "sharp-duotone": ["fasds"] + }; + no = { + classic: { + fab: "fa-brands", + fad: "fa-duotone", + fal: "fa-light", + far: "fa-regular", + fas: "fa-solid", + fat: "fa-thin" + }, + sharp: { + fass: "fa-solid", + fasr: "fa-regular", + fasl: "fa-light", + fast: "fa-thin" + }, + "sharp-duotone": { + fasds: "fa-solid" + } + }; + fo = { + classic: { + solid: "fas", + regular: "far", + light: "fal", + thin: "fat", + duotone: "fad", + brands: "fab" + }, + sharp: { + solid: "fass", + regular: "fasr", + light: "fasl", + thin: "fast" + }, + "sharp-duotone": { + solid: "fasds" + } + }; + ho = { + classic: { + fa: "solid", + fas: "solid", + "fa-solid": "solid", + far: "regular", + "fa-regular": "regular", + fal: "light", + "fa-light": "light", + fat: "thin", + "fa-thin": "thin", + fad: "duotone", + "fa-duotone": "duotone", + fab: "brands", + "fa-brands": "brands" + }, + sharp: { + fa: "solid", + fass: "solid", + "fa-solid": "solid", + fasr: "regular", + "fa-regular": "regular", + fasl: "light", + "fa-light": "light", + fast: "thin", + "fa-thin": "thin" + }, + "sharp-duotone": { + fa: "solid", + fasds: "solid", + "fa-solid": "solid" + } + }; + x$1 = ["solid", "regular", "light", "thin", "duotone", "brands"]; + u$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + m$1 = u$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); + t$1 = { + GROUP: "duotone-group", + SWAP_OPACITY: "swap-opacity", + PRIMARY: "primary", + SECONDARY: "secondary" + }; + yo = [...Object.keys(y3), ...x$1, "2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "fw", "inverse", "layers-counter", "layers-text", "layers", "li", "pull-left", "pull-right", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", t$1.GROUP, t$1.SWAP_OPACITY, t$1.PRIMARY, t$1.SECONDARY].concat(u$1.map((o4) => "".concat(o4, "x"))).concat(m$1.map((o4) => "w-".concat(o4))); + mo = { + "Font Awesome Kit": { + 400: "fak", + normal: "fak" + }, + "Font Awesome Kit Duotone": { + 400: "fakd", + normal: "fakd" + } + }; + Io = { + kit: { + "fa-kit": "fak" + }, + "kit-duotone": { + "fa-kit-duotone": "fakd" + } + }; + Fo = { + kit: { + fak: "fa-kit" + }, + "kit-duotone": { + fakd: "fa-kit-duotone" + } + }; + So = { + kit: { + kit: "fak" + }, + "kit-duotone": { + "kit-duotone": "fakd" + } + }; + NAMESPACE_IDENTIFIER = "___FONT_AWESOME___"; + UNITS_IN_GRID = 16; + DEFAULT_CSS_PREFIX = "fa"; + DEFAULT_REPLACEMENT_CLASS = "svg-inline--fa"; + DATA_FA_I2SVG = "data-fa-i2svg"; + DATA_FA_PSEUDO_ELEMENT = "data-fa-pseudo-element"; + DATA_FA_PSEUDO_ELEMENT_PENDING = "data-fa-pseudo-element-pending"; + DATA_PREFIX = "data-prefix"; + DATA_ICON = "data-icon"; + HTML_CLASS_I2SVG_BASE_CLASS = "fontawesome-i2svg"; + MUTATION_APPROACH_ASYNC = "async"; + TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ["HTML", "HEAD", "STYLE", "SCRIPT"]; + PRODUCTION = (() => { + try { + return process.env.NODE_ENV === "production"; + } catch (e$$1) { + return false; + } + })(); + FAMILIES = [a3, r3, o3]; + _PREFIX_TO_STYLE = { + ...ho + }; + _PREFIX_TO_STYLE[a3] = { + ...ho[a3], + ...bt["kit"], + ...bt["kit-duotone"] + }; + PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE); + _STYLE_TO_PREFIX = { + ...fo + }; + _STYLE_TO_PREFIX[a3] = { + ..._STYLE_TO_PREFIX[a3], + ...So["kit"], + ...So["kit-duotone"] + }; + STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX); + _PREFIX_TO_LONG_STYLE = { + ...no + }; + _PREFIX_TO_LONG_STYLE[a3] = { + ..._PREFIX_TO_LONG_STYLE[a3], + ...Fo["kit"] + }; + PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE); + _LONG_STYLE_TO_PREFIX = { + ...lo + }; + _LONG_STYLE_TO_PREFIX[a3] = { + ..._LONG_STYLE_TO_PREFIX[a3], + ...Io["kit"] + }; + LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX); + ICON_SELECTION_SYNTAX_PATTERN = Dt; + LAYERS_TEXT_CLASSNAME = "fa-layers-text"; + FONT_FAMILY_PATTERN = Kt; + _FONT_WEIGHT_TO_PREFIX = { + ...et$1 + }; + FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX); + ATTRIBUTES_WATCHED_FOR_MUTATION = ["class", "data-prefix", "data-icon", "data-fa-transform", "data-fa-mask"]; + DUOTONE_CLASSES = t$1; + prefixes = /* @__PURE__ */ new Set(); + Object.keys(STYLE_TO_PREFIX[a3]).map(prefixes.add.bind(prefixes)); + Object.keys(STYLE_TO_PREFIX[r3]).map(prefixes.add.bind(prefixes)); + Object.keys(STYLE_TO_PREFIX[o3]).map(prefixes.add.bind(prefixes)); + RESERVED_CLASSES = [...Ct, ...yo]; + initial = WINDOW.FontAwesomeConfig || {}; + if (DOCUMENT && typeof DOCUMENT.querySelector === "function") { + const attrs = [["data-family-prefix", "familyPrefix"], ["data-css-prefix", "cssPrefix"], ["data-family-default", "familyDefault"], ["data-style-default", "styleDefault"], ["data-replacement-class", "replacementClass"], ["data-auto-replace-svg", "autoReplaceSvg"], ["data-auto-add-css", "autoAddCss"], ["data-auto-a11y", "autoA11y"], ["data-search-pseudo-elements", "searchPseudoElements"], ["data-observe-mutations", "observeMutations"], ["data-mutate-approach", "mutateApproach"], ["data-keep-original-source", "keepOriginalSource"], ["data-measure-performance", "measurePerformance"], ["data-show-missing-icons", "showMissingIcons"]]; + attrs.forEach((_ref3) => { + let [attr, key] = _ref3; + const val = coerce(getAttrConfig(attr)); + if (val !== void 0 && val !== null) { + initial[key] = val; + } + }); + } + _default = { + styleDefault: "solid", + familyDefault: "classic", + cssPrefix: DEFAULT_CSS_PREFIX, + replacementClass: DEFAULT_REPLACEMENT_CLASS, + autoReplaceSvg: true, + autoAddCss: true, + autoA11y: true, + searchPseudoElements: false, + observeMutations: true, + mutateApproach: "async", + keepOriginalSource: true, + measurePerformance: false, + showMissingIcons: true + }; + if (initial.familyPrefix) { + initial.cssPrefix = initial.familyPrefix; + } + _config = { + ..._default, + ...initial + }; + if (!_config.autoReplaceSvg) _config.observeMutations = false; + config = {}; + Object.keys(_default).forEach((key) => { + Object.defineProperty(config, key, { + enumerable: true, + set: function(val) { + _config[key] = val; + _onChangeCb.forEach((cb) => cb(config)); + }, + get: function() { + return _config[key]; + } + }); + }); + Object.defineProperty(config, "familyPrefix", { + enumerable: true, + set: function(val) { + _config.cssPrefix = val; + _onChangeCb.forEach((cb) => cb(config)); + }, + get: function() { + return _config.cssPrefix; + } + }); + WINDOW.FontAwesomeConfig = config; + _onChangeCb = []; + d$2 = UNITS_IN_GRID; + meaninglessTransform = { + size: 16, + x: 0, + y: 0, + rotate: 0, + flipX: false, + flipY: false + }; + idPool = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + baseStyles = ':root, :host {\n --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free";\n --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free";\n --fa-font-light: normal 300 1em/1 "Font Awesome 6 Pro";\n --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Pro";\n --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone";\n --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";\n --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-thin: normal 100 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-duotone-solid: normal 900 1em/1 "Font Awesome 6 Sharp Duotone";\n}\n\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\n overflow: visible;\n box-sizing: content-box;\n}\n\n.svg-inline--fa {\n display: var(--fa-display, inline-block);\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-2xs {\n vertical-align: 0.1em;\n}\n.svg-inline--fa.fa-xs {\n vertical-align: 0em;\n}\n.svg-inline--fa.fa-sm {\n vertical-align: -0.0714285705em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.2em;\n}\n.svg-inline--fa.fa-xl {\n vertical-align: -0.25em;\n}\n.svg-inline--fa.fa-2xl {\n vertical-align: -0.3125em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-li {\n width: var(--fa-li-width, 2em);\n top: 0.25em;\n}\n.svg-inline--fa.fa-fw {\n width: var(--fa-fw-width, 1.25em);\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n transform-origin: center center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: var(--fa-counter-background-color, #ff253a);\n border-radius: var(--fa-counter-border-radius, 1em);\n box-sizing: border-box;\n color: var(--fa-inverse, #fff);\n line-height: var(--fa-counter-line-height, 1);\n max-width: var(--fa-counter-max-width, 5em);\n min-width: var(--fa-counter-min-width, 1.5em);\n overflow: hidden;\n padding: var(--fa-counter-padding, 0.25em 0.5em);\n right: var(--fa-right, 0);\n text-overflow: ellipsis;\n top: var(--fa-top, 0);\n transform: scale(var(--fa-counter-scale, 0.25));\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: var(--fa-bottom, 0);\n right: var(--fa-right, 0);\n top: auto;\n transform: scale(var(--fa-layers-scale, 0.25));\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: var(--fa-bottom, 0);\n left: var(--fa-left, 0);\n right: auto;\n top: auto;\n transform: scale(var(--fa-layers-scale, 0.25));\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n top: var(--fa-top, 0);\n right: var(--fa-right, 0);\n transform: scale(var(--fa-layers-scale, 0.25));\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: var(--fa-left, 0);\n right: auto;\n top: var(--fa-top, 0);\n transform: scale(var(--fa-layers-scale, 0.25));\n transform-origin: top left;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-2xs {\n font-size: 0.625em;\n line-height: 0.1em;\n vertical-align: 0.225em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n line-height: 0.0833333337em;\n vertical-align: 0.125em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n line-height: 0.0714285718em;\n vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n font-size: 1.25em;\n line-height: 0.05em;\n vertical-align: -0.075em;\n}\n\n.fa-xl {\n font-size: 1.5em;\n line-height: 0.0416666682em;\n vertical-align: -0.125em;\n}\n\n.fa-2xl {\n font-size: 2em;\n line-height: 0.03125em;\n vertical-align: -0.1875em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: var(--fa-li-margin, 2.5em);\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: calc(-1 * var(--fa-li-width, 2em));\n position: absolute;\n text-align: center;\n width: var(--fa-li-width, 2em);\n line-height: inherit;\n}\n\n.fa-border {\n border-color: var(--fa-border-color, #eee);\n border-radius: var(--fa-border-radius, 0.1em);\n border-style: var(--fa-border-style, solid);\n border-width: var(--fa-border-width, 0.08em);\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n float: left;\n margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n float: right;\n margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n animation-name: fa-beat;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n animation-name: fa-bounce;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n animation-name: fa-fade;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n animation-name: fa-beat-fade;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n animation-name: fa-flip;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n animation-name: fa-shake;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n animation-name: fa-spin;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 2s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n animation-name: fa-spin;\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fa-beat,\n.fa-bounce,\n.fa-fade,\n.fa-beat-fade,\n.fa-flip,\n.fa-pulse,\n.fa-shake,\n.fa-spin,\n.fa-spin-pulse {\n animation-delay: -1ms;\n animation-duration: 1ms;\n animation-iteration-count: 1;\n transition-delay: 0s;\n transition-duration: 0s;\n }\n}\n@keyframes fa-beat {\n 0%, 90% {\n transform: scale(1);\n }\n 45% {\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@keyframes fa-bounce {\n 0% {\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n transform: scale(1, 1) translateY(0);\n }\n}\n@keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@keyframes fa-flip {\n 50% {\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@keyframes fa-shake {\n 0% {\n transform: rotate(-15deg);\n }\n 4% {\n transform: rotate(15deg);\n }\n 8%, 24% {\n transform: rotate(-18deg);\n }\n 12%, 28% {\n transform: rotate(18deg);\n }\n 16% {\n transform: rotate(-22deg);\n }\n 20% {\n transform: rotate(22deg);\n }\n 32% {\n transform: rotate(-12deg);\n }\n 36% {\n transform: rotate(12deg);\n }\n 40%, 100% {\n transform: rotate(0deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n transform: rotate(var(--fa-rotate-angle, 0));\n}\n\n.fa-stack {\n display: inline-block;\n vertical-align: middle;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n z-index: var(--fa-stack-z-index, auto);\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: var(--fa-inverse, #fff);\n}\n\n.sr-only,\n.fa-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse,\n.fa-duotone.fa-inverse {\n color: var(--fa-inverse, #fff);\n}'; + _cssInserted = false; + InjectCSS = { + mixout() { + return { + dom: { + css: css5, + insertCss: ensureCss + } + }; + }, + hooks() { + return { + beforeDOMElementCreation() { + ensureCss(); + }, + beforeI2svg() { + ensureCss(); + } + }; + } + }; + w$1 = WINDOW || {}; + if (!w$1[NAMESPACE_IDENTIFIER]) w$1[NAMESPACE_IDENTIFIER] = {}; + if (!w$1[NAMESPACE_IDENTIFIER].styles) w$1[NAMESPACE_IDENTIFIER].styles = {}; + if (!w$1[NAMESPACE_IDENTIFIER].hooks) w$1[NAMESPACE_IDENTIFIER].hooks = {}; + if (!w$1[NAMESPACE_IDENTIFIER].shims) w$1[NAMESPACE_IDENTIFIER].shims = []; + namespace = w$1[NAMESPACE_IDENTIFIER]; + functions = []; + listener = function() { + DOCUMENT.removeEventListener("DOMContentLoaded", listener); + loaded = 1; + functions.map((fn2) => fn2()); + }; + loaded = false; + if (IS_DOM) { + loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState); + if (!loaded) DOCUMENT.addEventListener("DOMContentLoaded", listener); + } + bindInternal4 = function bindInternal42(func, thisContext) { + return function(a4, b3, c4, d3) { + return func.call(thisContext, a4, b3, c4, d3); + }; + }; + reduce = function fastReduceObject(subject, fn2, initialValue, thisContext) { + var keys = Object.keys(subject), length2 = keys.length, iterator = thisContext !== void 0 ? bindInternal4(fn2, thisContext) : fn2, i4, key, result; + if (initialValue === void 0) { + i4 = 1; + result = subject[keys[0]]; + } else { + i4 = 0; + result = initialValue; + } + for (; i4 < length2; i4++) { + key = keys[i4]; + result = iterator(result, subject[key], key, subject); + } + return result; + }; + ({ + styles, + shims + } = namespace); + LONG_STYLE = { + [a3]: Object.values(PREFIX_TO_LONG_STYLE[a3]), + [r3]: Object.values(PREFIX_TO_LONG_STYLE[r3]), + [o3]: Object.values(PREFIX_TO_LONG_STYLE[o3]) + }; + _defaultUsablePrefix = null; + _byUnicode = {}; + _byLigature = {}; + _byOldName = {}; + _byOldUnicode = {}; + _byAlias = {}; + PREFIXES = { + [a3]: Object.keys(PREFIX_TO_STYLE[a3]), + [r3]: Object.keys(PREFIX_TO_STYLE[r3]), + [o3]: Object.keys(PREFIX_TO_STYLE[o3]) + }; + build = () => { + const lookup = (reducer) => { + return reduce(styles, (o$$1, style, prefix2) => { + o$$1[prefix2] = reduce(style, reducer, {}); + return o$$1; + }, {}); + }; + _byUnicode = lookup((acc, icon2, iconName) => { + if (icon2[3]) { + acc[icon2[3]] = iconName; + } + if (icon2[2]) { + const aliases = icon2[2].filter((a$$1) => { + return typeof a$$1 === "number"; + }); + aliases.forEach((alias) => { + acc[alias.toString(16)] = iconName; + }); + } + return acc; + }); + _byLigature = lookup((acc, icon2, iconName) => { + acc[iconName] = iconName; + if (icon2[2]) { + const aliases = icon2[2].filter((a$$1) => { + return typeof a$$1 === "string"; + }); + aliases.forEach((alias) => { + acc[alias] = iconName; + }); + } + return acc; + }); + _byAlias = lookup((acc, icon2, iconName) => { + const aliases = icon2[2]; + acc[iconName] = iconName; + aliases.forEach((alias) => { + acc[alias] = iconName; + }); + return acc; + }); + const hasRegular = "far" in styles || config.autoFetchSvg; + const shimLookups = reduce(shims, (acc, shim) => { + const maybeNameMaybeUnicode = shim[0]; + let prefix2 = shim[1]; + const iconName = shim[2]; + if (prefix2 === "far" && !hasRegular) { + prefix2 = "fas"; + } + if (typeof maybeNameMaybeUnicode === "string") { + acc.names[maybeNameMaybeUnicode] = { + prefix: prefix2, + iconName + }; + } + if (typeof maybeNameMaybeUnicode === "number") { + acc.unicodes[maybeNameMaybeUnicode.toString(16)] = { + prefix: prefix2, + iconName + }; + } + return acc; + }, { + names: {}, + unicodes: {} + }); + _byOldName = shimLookups.names; + _byOldUnicode = shimLookups.unicodes; + _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, { + family: config.familyDefault + }); + }; + onChange2((c$$1) => { + _defaultUsablePrefix = getCanonicalPrefix(c$$1.styleDefault, { + family: config.familyDefault + }); + }); + build(); + emptyCanonicalIcon = () => { + return { + prefix: null, + iconName: null, + rest: [] + }; + }; + PREFIXES_FOR_FAMILY = { + [a3]: Object.keys(PREFIX_TO_LONG_STYLE[a3]), + [r3]: Object.keys(PREFIX_TO_LONG_STYLE[r3]), + [o3]: Object.keys(PREFIX_TO_LONG_STYLE[o3]) + }; + Library = class { + constructor() { + this.definitions = {}; + } + add() { + for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) { + definitions[_key] = arguments[_key]; + } + const additions = definitions.reduce(this._pullDefinitions, {}); + Object.keys(additions).forEach((key) => { + this.definitions[key] = { + ...this.definitions[key] || {}, + ...additions[key] + }; + defineIcons(key, additions[key]); + const longPrefix = PREFIX_TO_LONG_STYLE[a3][key]; + if (longPrefix) defineIcons(longPrefix, additions[key]); + build(); + }); + } + reset() { + this.definitions = {}; + } + _pullDefinitions(additions, definition) { + const normalized = definition.prefix && definition.iconName && definition.icon ? { + 0: definition + } : definition; + Object.keys(normalized).map((key) => { + const { + prefix: prefix2, + iconName, + icon: icon2 + } = normalized[key]; + const aliases = icon2[2]; + if (!additions[prefix2]) additions[prefix2] = {}; + if (aliases.length > 0) { + aliases.forEach((alias) => { + if (typeof alias === "string") { + additions[prefix2][alias] = icon2; + } + }); + } + additions[prefix2][iconName] = icon2; + }); + return additions; + } + }; + _plugins = []; + _hooks = {}; + providers = {}; + defaultProviderKeys = Object.keys(providers); + library = new Library(); + noAuto = () => { + config.autoReplaceSvg = false; + config.observeMutations = false; + callHooks("noAuto"); + }; + dom = { + i2svg: function() { + let params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + if (IS_DOM) { + callHooks("beforeI2svg", params); + callProvided("pseudoElements2svg", params); + return callProvided("i2svg", params); + } else { + return Promise.reject(new Error("Operation requires a DOM of some kind.")); + } + }, + watch: function() { + let params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + const { + autoReplaceSvgRoot + } = params; + if (config.autoReplaceSvg === false) { + config.autoReplaceSvg = true; + } + config.observeMutations = true; + domready(() => { + autoReplace({ + autoReplaceSvgRoot + }); + callHooks("watch", params); + }); + } + }; + parse3 = { + icon: (icon2) => { + if (icon2 === null) { + return null; + } + if (typeof icon2 === "object" && icon2.prefix && icon2.iconName) { + return { + prefix: icon2.prefix, + iconName: byAlias(icon2.prefix, icon2.iconName) || icon2.iconName + }; + } + if (Array.isArray(icon2) && icon2.length === 2) { + const iconName = icon2[1].indexOf("fa-") === 0 ? icon2[1].slice(3) : icon2[1]; + const prefix2 = getCanonicalPrefix(icon2[0]); + return { + prefix: prefix2, + iconName: byAlias(prefix2, iconName) || iconName + }; + } + if (typeof icon2 === "string" && (icon2.indexOf("".concat(config.cssPrefix, "-")) > -1 || icon2.match(ICON_SELECTION_SYNTAX_PATTERN))) { + const canonicalIcon = getCanonicalIcon(icon2.split(" "), { + skipLookups: true + }); + return { + prefix: canonicalIcon.prefix || getDefaultUsablePrefix(), + iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName + }; + } + if (typeof icon2 === "string") { + const prefix2 = getDefaultUsablePrefix(); + return { + prefix: prefix2, + iconName: byAlias(prefix2, icon2) || icon2 + }; + } + } + }; + api = { + noAuto, + config, + dom, + parse: parse3, + library, + findIconDefinition, + toHtml + }; + autoReplace = function() { + let params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + const { + autoReplaceSvgRoot = DOCUMENT + } = params; + if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({ + node: autoReplaceSvgRoot + }); + }; + ({ + styles: styles$1 + } = namespace); + missingIconResolutionMixin = { + found: false, + width: 512, + height: 512 + }; + noop$1 = () => { + }; + p$2 = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : { + mark: noop$1, + measure: noop$1 + }; + preamble = 'FA "6.6.0"'; + begin = (name) => { + p$2.mark("".concat(preamble, " ").concat(name, " begins")); + return () => end(name); + }; + end = (name) => { + p$2.mark("".concat(preamble, " ").concat(name, " ends")); + p$2.measure("".concat(preamble, " ").concat(name), "".concat(preamble, " ").concat(name, " begins"), "".concat(preamble, " ").concat(name, " ends")); + }; + perf = { + begin, + end + }; + noop$2 = () => { + }; + mutators = { + replace: function(mutation) { + const node2 = mutation[0]; + if (node2.parentNode) { + mutation[1].forEach((abstract) => { + node2.parentNode.insertBefore(convertSVG(abstract), node2); + }); + if (node2.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) { + let comment2 = DOCUMENT.createComment(nodeAsComment(node2)); + node2.parentNode.replaceChild(comment2, node2); + } else { + node2.remove(); + } + } + }, + nest: function(mutation) { + const node2 = mutation[0]; + const abstract = mutation[1]; + if (~classArray(node2).indexOf(config.replacementClass)) { + return mutators.replace(mutation); + } + const forSvg = new RegExp("".concat(config.cssPrefix, "-.*")); + delete abstract[0].attributes.id; + if (abstract[0].attributes.class) { + const splitClasses = abstract[0].attributes.class.split(" ").reduce((acc, cls) => { + if (cls === config.replacementClass || cls.match(forSvg)) { + acc.toSvg.push(cls); + } else { + acc.toNode.push(cls); + } + return acc; + }, { + toNode: [], + toSvg: [] + }); + abstract[0].attributes.class = splitClasses.toSvg.join(" "); + if (splitClasses.toNode.length === 0) { + node2.removeAttribute("class"); + } else { + node2.setAttribute("class", splitClasses.toNode.join(" ")); + } + } + const newInnerHTML = abstract.map((a4) => toHtml(a4)).join("\n"); + node2.setAttribute(DATA_FA_I2SVG, ""); + node2.innerHTML = newInnerHTML; + } + }; + disabled = false; + mo$1 = null; + ({ + styles: styles$2 + } = namespace); + knownPrefixes = /* @__PURE__ */ new Set(); + FAMILIES.map((family) => { + knownPrefixes.add("fa-".concat(family)); + }); + Object.keys(PREFIX_TO_STYLE[a3]).map(knownPrefixes.add.bind(knownPrefixes)); + Object.keys(PREFIX_TO_STYLE[r3]).map(knownPrefixes.add.bind(knownPrefixes)); + Object.keys(PREFIX_TO_STYLE[o3]).map(knownPrefixes.add.bind(knownPrefixes)); + knownPrefixes = [...knownPrefixes]; + render = function(iconDefinition) { + let params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { + transform: transform2 = meaninglessTransform, + symbol = false, + mask = null, + maskId = null, + title = null, + titleId = null, + classes = [], + attributes = {}, + styles: styles2 = {} + } = params; + if (!iconDefinition) return; + const { + prefix: prefix2, + iconName, + icon: icon2 + } = iconDefinition; + return domVariants({ + type: "icon", + ...iconDefinition + }, () => { + callHooks("beforeDOMElementCreation", { + iconDefinition, + params + }); + if (config.autoA11y) { + if (title) { + attributes["aria-labelledby"] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId()); + } else { + attributes["aria-hidden"] = "true"; + attributes["focusable"] = "false"; + } + } + return makeInlineSvgAbstract({ + icons: { + main: asFoundIcon(icon2), + mask: mask ? asFoundIcon(mask.icon) : { + found: false, + width: null, + height: null, + icon: {} + } + }, + prefix: prefix2, + iconName, + transform: { + ...meaninglessTransform, + ...transform2 + }, + symbol, + title, + maskId, + titleId, + extra: { + attributes, + styles: styles2, + classes + } + }); + }); + }; + ReplaceElements = { + mixout() { + return { + icon: resolveIcons(render) + }; + }, + hooks() { + return { + mutationObserverCallbacks(accumulator) { + accumulator.treeCallback = onTree; + accumulator.nodeCallback = onNode; + return accumulator; + } + }; + }, + provides(providers$$1) { + providers$$1.i2svg = function(params) { + const { + node: node2 = DOCUMENT, + callback = () => { + } + } = params; + return onTree(node2, callback); + }; + providers$$1.generateSvgReplacementMutation = function(node2, nodeMeta) { + const { + iconName, + title, + titleId, + prefix: prefix2, + transform: transform2, + symbol, + mask, + maskId, + extra + } = nodeMeta; + return new Promise((resolve, reject) => { + Promise.all([findIcon(iconName, prefix2), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({ + found: false, + width: 512, + height: 512, + icon: {} + })]).then((_ref3) => { + let [main, mask2] = _ref3; + resolve([node2, makeInlineSvgAbstract({ + icons: { + main, + mask: mask2 + }, + prefix: prefix2, + iconName, + transform: transform2, + symbol, + maskId, + title, + titleId, + extra, + watchable: true + })]); + }).catch(reject); + }); + }; + providers$$1.generateAbstractIcon = function(_ref23) { + let { + children, + attributes, + main, + transform: transform2, + styles: styles2 + } = _ref23; + const styleString = joinStyles(styles2); + if (styleString.length > 0) { + attributes["style"] = styleString; + } + let nextChild; + if (transformIsMeaningful(transform2)) { + nextChild = callProvided("generateAbstractTransformGrouping", { + main, + transform: transform2, + containerWidth: main.width, + iconWidth: main.width + }); + } + children.push(nextChild || main.icon); + return { + children, + attributes + }; + }; + } + }; + Layers = { + mixout() { + return { + layer(assembler) { + let params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { + classes = [] + } = params; + return domVariants({ + type: "layer" + }, () => { + callHooks("beforeDOMElementCreation", { + assembler, + params + }); + let children = []; + assembler((args) => { + Array.isArray(args) ? args.map((a4) => { + children = children.concat(a4.abstract); + }) : children = children.concat(args.abstract); + }); + return [{ + tag: "span", + attributes: { + class: ["".concat(config.cssPrefix, "-layers"), ...classes].join(" ") + }, + children + }]; + }); + } + }; + } + }; + LayersCounter = { + mixout() { + return { + counter(content) { + let params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { + title = null, + classes = [], + attributes = {}, + styles: styles2 = {} + } = params; + return domVariants({ + type: "counter", + content + }, () => { + callHooks("beforeDOMElementCreation", { + content, + params + }); + return makeLayersCounterAbstract({ + content: content.toString(), + title, + extra: { + attributes, + styles: styles2, + classes: ["".concat(config.cssPrefix, "-layers-counter"), ...classes] + } + }); + }); + } + }; + } + }; + LayersText = { + mixout() { + return { + text(content) { + let params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { + transform: transform2 = meaninglessTransform, + title = null, + classes = [], + attributes = {}, + styles: styles2 = {} + } = params; + return domVariants({ + type: "text", + content + }, () => { + callHooks("beforeDOMElementCreation", { + content, + params + }); + return makeLayersTextAbstract({ + content, + transform: { + ...meaninglessTransform, + ...transform2 + }, + title, + extra: { + attributes, + styles: styles2, + classes: ["".concat(config.cssPrefix, "-layers-text"), ...classes] + } + }); + }); + } + }; + }, + provides(providers$$1) { + providers$$1.generateLayersText = function(node2, nodeMeta) { + const { + title, + transform: transform2, + extra + } = nodeMeta; + let width = null; + let height = null; + if (IS_IE) { + const computedFontSize = parseInt(getComputedStyle(node2).fontSize, 10); + const boundingClientRect = node2.getBoundingClientRect(); + width = boundingClientRect.width / computedFontSize; + height = boundingClientRect.height / computedFontSize; + } + if (config.autoA11y && !title) { + extra.attributes["aria-hidden"] = "true"; + } + return Promise.resolve([node2, makeLayersTextAbstract({ + content: node2.innerHTML, + width, + height, + transform: transform2, + title, + extra, + watchable: true + })]); + }; + } + }; + CLEAN_CONTENT_PATTERN = new RegExp('"', "ug"); + SECONDARY_UNICODE_RANGE = [1105920, 1112319]; + _FONT_FAMILY_WEIGHT_TO_PREFIX = { + ...{ + FontAwesome: { + normal: "fas", + 400: "fas" + } + }, + ...eo, + ...ao, + ...mo + }; + FONT_FAMILY_WEIGHT_TO_PREFIX = Object.keys(_FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, key) => { + acc[key.toLowerCase()] = _FONT_FAMILY_WEIGHT_TO_PREFIX[key]; + return acc; + }, {}); + FONT_FAMILY_WEIGHT_FALLBACK = Object.keys(FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, fontFamily) => { + const weights = FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamily]; + acc[fontFamily] = weights[900] || [...Object.entries(weights)][0][1]; + return acc; + }, {}); + PseudoElements = { + hooks() { + return { + mutationObserverCallbacks(accumulator) { + accumulator.pseudoElementsCallback = searchPseudoElements; + return accumulator; + } + }; + }, + provides(providers2) { + providers2.pseudoElements2svg = function(params) { + const { + node: node2 = DOCUMENT + } = params; + if (config.searchPseudoElements) { + searchPseudoElements(node2); + } + }; + } + }; + _unwatched = false; + MutationObserver$1 = { + mixout() { + return { + dom: { + unwatch() { + disableObservation(); + _unwatched = true; + } + } + }; + }, + hooks() { + return { + bootstrap() { + observe(chainHooks("mutationObserverCallbacks", {})); + }, + noAuto() { + disconnect(); + }, + watch(params) { + const { + observeMutationsRoot + } = params; + if (_unwatched) { + enableObservation(); + } else { + observe(chainHooks("mutationObserverCallbacks", { + observeMutationsRoot + })); + } + } + }; + } + }; + parseTransformString = (transformString) => { + let transform2 = { + size: 16, + x: 0, + y: 0, + flipX: false, + flipY: false, + rotate: 0 + }; + return transformString.toLowerCase().split(" ").reduce((acc, n3) => { + const parts = n3.toLowerCase().split("-"); + const first = parts[0]; + let rest = parts.slice(1).join("-"); + if (first && rest === "h") { + acc.flipX = true; + return acc; + } + if (first && rest === "v") { + acc.flipY = true; + return acc; + } + rest = parseFloat(rest); + if (isNaN(rest)) { + return acc; + } + switch (first) { + case "grow": + acc.size = acc.size + rest; + break; + case "shrink": + acc.size = acc.size - rest; + break; + case "left": + acc.x = acc.x - rest; + break; + case "right": + acc.x = acc.x + rest; + break; + case "up": + acc.y = acc.y - rest; + break; + case "down": + acc.y = acc.y + rest; + break; + case "rotate": + acc.rotate = acc.rotate + rest; + break; + } + return acc; + }, transform2); + }; + PowerTransforms = { + mixout() { + return { + parse: { + transform: (transformString) => { + return parseTransformString(transformString); + } + } + }; + }, + hooks() { + return { + parseNodeAttributes(accumulator, node2) { + const transformString = node2.getAttribute("data-fa-transform"); + if (transformString) { + accumulator.transform = parseTransformString(transformString); + } + return accumulator; + } + }; + }, + provides(providers2) { + providers2.generateAbstractTransformGrouping = function(_ref3) { + let { + main, + transform: transform2, + containerWidth, + iconWidth + } = _ref3; + const outer = { + transform: "translate(".concat(containerWidth / 2, " 256)") + }; + const innerTranslate = "translate(".concat(transform2.x * 32, ", ").concat(transform2.y * 32, ") "); + const innerScale = "scale(".concat(transform2.size / 16 * (transform2.flipX ? -1 : 1), ", ").concat(transform2.size / 16 * (transform2.flipY ? -1 : 1), ") "); + const innerRotate = "rotate(".concat(transform2.rotate, " 0 0)"); + const inner = { + transform: "".concat(innerTranslate, " ").concat(innerScale, " ").concat(innerRotate) + }; + const path = { + transform: "translate(".concat(iconWidth / 2 * -1, " -256)") + }; + const operations = { + outer, + inner, + path + }; + return { + tag: "g", + attributes: { + ...operations.outer + }, + children: [{ + tag: "g", + attributes: { + ...operations.inner + }, + children: [{ + tag: main.icon.tag, + children: main.icon.children, + attributes: { + ...main.icon.attributes, + ...operations.path + } + }] + }] + }; + }; + } + }; + ALL_SPACE = { + x: 0, + y: 0, + width: "100%", + height: "100%" + }; + Masks = { + hooks() { + return { + parseNodeAttributes(accumulator, node2) { + const maskData = node2.getAttribute("data-fa-mask"); + const mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(" ").map((i4) => i4.trim())); + if (!mask.prefix) { + mask.prefix = getDefaultUsablePrefix(); + } + accumulator.mask = mask; + accumulator.maskId = node2.getAttribute("data-fa-mask-id"); + return accumulator; + } + }; + }, + provides(providers2) { + providers2.generateAbstractMask = function(_ref3) { + let { + children, + attributes, + main, + mask, + maskId: explicitMaskId, + transform: transform2 + } = _ref3; + const { + width: mainWidth, + icon: mainPath + } = main; + const { + width: maskWidth, + icon: maskPath + } = mask; + const trans = transformForSvg({ + transform: transform2, + containerWidth: maskWidth, + iconWidth: mainWidth + }); + const maskRect = { + tag: "rect", + attributes: { + ...ALL_SPACE, + fill: "white" + } + }; + const maskInnerGroupChildrenMixin = mainPath.children ? { + children: mainPath.children.map(fillBlack) + } : {}; + const maskInnerGroup = { + tag: "g", + attributes: { + ...trans.inner + }, + children: [fillBlack({ + tag: mainPath.tag, + attributes: { + ...mainPath.attributes, + ...trans.path + }, + ...maskInnerGroupChildrenMixin + })] + }; + const maskOuterGroup = { + tag: "g", + attributes: { + ...trans.outer + }, + children: [maskInnerGroup] + }; + const maskId = "mask-".concat(explicitMaskId || nextUniqueId()); + const clipId = "clip-".concat(explicitMaskId || nextUniqueId()); + const maskTag = { + tag: "mask", + attributes: { + ...ALL_SPACE, + id: maskId, + maskUnits: "userSpaceOnUse", + maskContentUnits: "userSpaceOnUse" + }, + children: [maskRect, maskOuterGroup] + }; + const defs = { + tag: "defs", + children: [{ + tag: "clipPath", + attributes: { + id: clipId + }, + children: deGroup(maskPath) + }, maskTag] + }; + children.push(defs, { + tag: "rect", + attributes: { + fill: "currentColor", + "clip-path": "url(#".concat(clipId, ")"), + mask: "url(#".concat(maskId, ")"), + ...ALL_SPACE + } + }); + return { + children, + attributes + }; + }; + } + }; + MissingIconIndicator = { + provides(providers2) { + let reduceMotion = false; + if (WINDOW.matchMedia) { + reduceMotion = WINDOW.matchMedia("(prefers-reduced-motion: reduce)").matches; + } + providers2.missingIconAbstract = function() { + const gChildren = []; + const FILL = { + fill: "currentColor" + }; + const ANIMATION_BASE = { + attributeType: "XML", + repeatCount: "indefinite", + dur: "2s" + }; + gChildren.push({ + tag: "path", + attributes: { + ...FILL, + d: "M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z" + } + }); + const OPACITY_ANIMATE = { + ...ANIMATION_BASE, + attributeName: "opacity" + }; + const dot = { + tag: "circle", + attributes: { + ...FILL, + cx: "256", + cy: "364", + r: "28" + }, + children: [] + }; + if (!reduceMotion) { + dot.children.push({ + tag: "animate", + attributes: { + ...ANIMATION_BASE, + attributeName: "r", + values: "28;14;28;28;14;28;" + } + }, { + tag: "animate", + attributes: { + ...OPACITY_ANIMATE, + values: "1;0;1;1;0;1;" + } + }); + } + gChildren.push(dot); + gChildren.push({ + tag: "path", + attributes: { + ...FILL, + opacity: "1", + d: "M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z" + }, + children: reduceMotion ? [] : [{ + tag: "animate", + attributes: { + ...OPACITY_ANIMATE, + values: "1;0;0;0;0;1;" + } + }] + }); + if (!reduceMotion) { + gChildren.push({ + tag: "path", + attributes: { + ...FILL, + opacity: "0", + d: "M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z" + }, + children: [{ + tag: "animate", + attributes: { + ...OPACITY_ANIMATE, + values: "0;0;1;1;0;0;" + } + }] + }); + } + return { + tag: "g", + attributes: { + "class": "missing" + }, + children: gChildren + }; + }; + } + }; + SvgSymbols = { + hooks() { + return { + parseNodeAttributes(accumulator, node2) { + const symbolData = node2.getAttribute("data-fa-symbol"); + const symbol = symbolData === null ? false : symbolData === "" ? true : symbolData; + accumulator["symbol"] = symbol; + return accumulator; + } + }; + } + }; + plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols]; + registerPlugins(plugins, { + mixoutsTo: api + }); + noAuto$1 = api.noAuto; + config$1 = api.config; + library$1 = api.library; + dom$1 = api.dom; + parse$1 = api.parse; + findIconDefinition$1 = api.findIconDefinition; + toHtml$1 = api.toHtml; + icon = api.icon; + layer = api.layer; + text = api.text; + counter = api.counter; + } +}); + // node_modules/object-assign/index.js var require_object_assign = __commonJS({ - "node_modules/object-assign/index.js"(exports, module2) { + "node_modules/object-assign/index.js"(exports2, module2) { "use strict"; var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty2 = Object.prototype.hasOwnProperty; @@ -3132,7 +29159,7 @@ var require_object_assign = __commonJS({ // node_modules/prop-types/lib/ReactPropTypesSecret.js var require_ReactPropTypesSecret = __commonJS({ - "node_modules/prop-types/lib/ReactPropTypesSecret.js"(exports, module2) { + "node_modules/prop-types/lib/ReactPropTypesSecret.js"(exports2, module2) { "use strict"; var ReactPropTypesSecret = "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"; module2.exports = ReactPropTypesSecret; @@ -3141,18 +29168,18 @@ var require_ReactPropTypesSecret = __commonJS({ // node_modules/prop-types/lib/has.js var require_has = __commonJS({ - "node_modules/prop-types/lib/has.js"(exports, module2) { + "node_modules/prop-types/lib/has.js"(exports2, module2) { module2.exports = Function.call.bind(Object.prototype.hasOwnProperty); } }); // node_modules/prop-types/checkPropTypes.js var require_checkPropTypes = __commonJS({ - "node_modules/prop-types/checkPropTypes.js"(exports, module2) { + "node_modules/prop-types/checkPropTypes.js"(exports2, module2) { "use strict"; var printWarning = function() { }; - if (true) { + if (process.env.NODE_ENV !== "production") { ReactPropTypesSecret = require_ReactPropTypesSecret(); loggedTypeFailures = {}; has = require_has(); @@ -3171,7 +29198,7 @@ var require_checkPropTypes = __commonJS({ var loggedTypeFailures; var has; function checkPropTypes(typeSpecs, values, location, componentName, getStack) { - if (true) { + if (process.env.NODE_ENV !== "production") { for (var typeSpecName in typeSpecs) { if (has(typeSpecs, typeSpecName)) { var error; @@ -3204,7 +29231,7 @@ var require_checkPropTypes = __commonJS({ } } checkPropTypes.resetWarningCache = function() { - if (true) { + if (process.env.NODE_ENV !== "production") { loggedTypeFailures = {}; } }; @@ -3214,7 +29241,7 @@ var require_checkPropTypes = __commonJS({ // node_modules/prop-types/factoryWithTypeCheckers.js var require_factoryWithTypeCheckers = __commonJS({ - "node_modules/prop-types/factoryWithTypeCheckers.js"(exports, module2) { + "node_modules/prop-types/factoryWithTypeCheckers.js"(exports2, module2) { "use strict"; var ReactIs = require_react_is(); var assign2 = require_object_assign(); @@ -3223,7 +29250,7 @@ var require_factoryWithTypeCheckers = __commonJS({ var checkPropTypes = require_checkPropTypes(); var printWarning = function() { }; - if (true) { + if (process.env.NODE_ENV !== "production") { printWarning = function(text2) { var message = "Warning: " + text2; if (typeof console !== "undefined") { @@ -3269,11 +29296,11 @@ var require_factoryWithTypeCheckers = __commonJS({ shape: createShapeTypeChecker, exact: createStrictShapeTypeChecker }; - function is(x4, y3) { - if (x4 === y3) { - return x4 !== 0 || 1 / x4 === 1 / y3; + function is(x4, y4) { + if (x4 === y4) { + return x4 !== 0 || 1 / x4 === 1 / y4; } else { - return x4 !== x4 && y3 !== y3; + return x4 !== x4 && y4 !== y4; } } function PropTypeError(message, data) { @@ -3283,7 +29310,7 @@ var require_factoryWithTypeCheckers = __commonJS({ } PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { - if (true) { + if (process.env.NODE_ENV !== "production") { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } @@ -3297,7 +29324,7 @@ var require_factoryWithTypeCheckers = __commonJS({ ); err.name = "Invariant Violation"; throw err; - } else if (typeof console !== "undefined") { + } else if (process.env.NODE_ENV !== "production" && typeof console !== "undefined") { var cacheKey = componentName + ":" + propName; if (!manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3) { @@ -3398,7 +29425,7 @@ var require_factoryWithTypeCheckers = __commonJS({ } function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { - if (true) { + if (process.env.NODE_ENV !== "production") { if (arguments.length > 1) { printWarning( "Invalid arguments supplied to oneOf, expected an array, got " + arguments.length + " arguments. A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z])." @@ -3451,7 +29478,7 @@ var require_factoryWithTypeCheckers = __commonJS({ } function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { - true ? printWarning("Invalid argument supplied to oneOfType, expected an instance of array.") : void 0; + process.env.NODE_ENV !== "production" ? printWarning("Invalid argument supplied to oneOfType, expected an instance of array.") : void 0; return emptyFunctionThatReturnsNull; } for (var i4 = 0; i4 < arrayOfTypeCheckers.length; i4++) { @@ -3655,87 +29682,471 @@ var require_factoryWithTypeCheckers = __commonJS({ } }); +// node_modules/prop-types/factoryWithThrowingShims.js +var require_factoryWithThrowingShims = __commonJS({ + "node_modules/prop-types/factoryWithThrowingShims.js"(exports2, module2) { + "use strict"; + var ReactPropTypesSecret = require_ReactPropTypesSecret(); + function emptyFunction() { + } + function emptyFunctionWithReset() { + } + emptyFunctionWithReset.resetWarningCache = emptyFunction; + module2.exports = function() { + function shim(props, propName, componentName, location, propFullName, secret) { + if (secret === ReactPropTypesSecret) { + return; + } + var err = new Error( + "Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types" + ); + err.name = "Invariant Violation"; + throw err; + } + ; + shim.isRequired = shim; + function getShim() { + return shim; + } + ; + var ReactPropTypes = { + array: shim, + bigint: shim, + bool: shim, + func: shim, + number: shim, + object: shim, + string: shim, + symbol: shim, + any: shim, + arrayOf: getShim, + element: shim, + elementType: shim, + instanceOf: getShim, + node: shim, + objectOf: getShim, + oneOf: getShim, + oneOfType: getShim, + shape: getShim, + exact: getShim, + checkPropTypes: emptyFunctionWithReset, + resetWarningCache: emptyFunction + }; + ReactPropTypes.PropTypes = ReactPropTypes; + return ReactPropTypes; + }; + } +}); + // node_modules/prop-types/index.js var require_prop_types = __commonJS({ - "node_modules/prop-types/index.js"(exports, module2) { - if (true) { + "node_modules/prop-types/index.js"(exports2, module2) { + if (process.env.NODE_ENV !== "production") { ReactIs = require_react_is(); throwOnDirectAccess = true; module2.exports = require_factoryWithTypeCheckers()(ReactIs.isElement, throwOnDirectAccess); } else { - module2.exports = null(); + module2.exports = require_factoryWithThrowingShims()(); } var ReactIs; var throwOnDirectAccess; } }); +// node_modules/@fortawesome/react-fontawesome/index.js +var require_react_fontawesome = __commonJS({ + "node_modules/@fortawesome/react-fontawesome/index.js"(exports2, module2) { + (function(global2, factory) { + typeof exports2 === "object" && typeof module2 !== "undefined" ? factory(exports2, (init_fontawesome_svg_core(), __toCommonJS(fontawesome_svg_core_exports)), require_prop_types(), require_compat()) : typeof define === "function" && define.amd ? define(["exports", "@fortawesome/fontawesome-svg-core", "prop-types", "react"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2["react-fontawesome"] = {}, global2.FontAwesome, global2.PropTypes, global2.React)); + })(exports2, function(exports3, fontawesomeSvgCore, PropTypes, React) { + "use strict"; + function _interopDefaultLegacy(e3) { + return e3 && typeof e3 === "object" && "default" in e3 ? e3 : { "default": e3 }; + } + var PropTypes__default = /* @__PURE__ */ _interopDefaultLegacy(PropTypes); + var React__default = /* @__PURE__ */ _interopDefaultLegacy(React); + function ownKeys2(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function(sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + return keys; + } + function _objectSpread22(target) { + for (var i4 = 1; i4 < arguments.length; i4++) { + var source = null != arguments[i4] ? arguments[i4] : {}; + i4 % 2 ? ownKeys2(Object(source), true).forEach(function(key) { + _defineProperty2(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys2(Object(source)).forEach(function(key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + return target; + } + function _typeof2(obj) { + "@babel/helpers - typeof"; + return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) { + return typeof obj2; + } : function(obj2) { + return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; + }, _typeof2(obj); + } + function _defineProperty2(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; + } + function _objectWithoutPropertiesLoose2(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i4; + for (i4 = 0; i4 < sourceKeys.length; i4++) { + key = sourceKeys[i4]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + return target; + } + function _objectWithoutProperties2(source, excluded) { + if (source == null) return {}; + var target = _objectWithoutPropertiesLoose2(source, excluded); + var key, i4; + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + for (i4 = 0; i4 < sourceSymbolKeys.length; i4++) { + key = sourceSymbolKeys[i4]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + return target; + } + function _toConsumableArray2(arr) { + return _arrayWithoutHoles2(arr) || _iterableToArray2(arr) || _unsupportedIterableToArray2(arr) || _nonIterableSpread2(); + } + function _arrayWithoutHoles2(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray2(arr); + } + function _iterableToArray2(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + function _unsupportedIterableToArray2(o4, minLen) { + if (!o4) return; + if (typeof o4 === "string") return _arrayLikeToArray2(o4, minLen); + var n3 = Object.prototype.toString.call(o4).slice(8, -1); + if (n3 === "Object" && o4.constructor) n3 = o4.constructor.name; + if (n3 === "Map" || n3 === "Set") return Array.from(o4); + if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) return _arrayLikeToArray2(o4, minLen); + } + function _arrayLikeToArray2(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i4 = 0, arr2 = new Array(len); i4 < len; i4++) arr2[i4] = arr[i4]; + return arr2; + } + function _nonIterableSpread2() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function classList(props) { + var _classes; + var beat = props.beat, fade = props.fade, beatFade = props.beatFade, bounce = props.bounce, shake = props.shake, flash = props.flash, spin = props.spin, spinPulse = props.spinPulse, spinReverse = props.spinReverse, pulse = props.pulse, fixedWidth = props.fixedWidth, inverse = props.inverse, border = props.border, listItem = props.listItem, flip2 = props.flip, size2 = props.size, rotation = props.rotation, pull = props.pull; + var classes = (_classes = { + "fa-beat": beat, + "fa-fade": fade, + "fa-beat-fade": beatFade, + "fa-bounce": bounce, + "fa-shake": shake, + "fa-flash": flash, + "fa-spin": spin, + "fa-spin-reverse": spinReverse, + "fa-spin-pulse": spinPulse, + "fa-pulse": pulse, + "fa-fw": fixedWidth, + "fa-inverse": inverse, + "fa-border": border, + "fa-li": listItem, + "fa-flip": flip2 === true, + "fa-flip-horizontal": flip2 === "horizontal" || flip2 === "both", + "fa-flip-vertical": flip2 === "vertical" || flip2 === "both" + }, _defineProperty2(_classes, "fa-".concat(size2), typeof size2 !== "undefined" && size2 !== null), _defineProperty2(_classes, "fa-rotate-".concat(rotation), typeof rotation !== "undefined" && rotation !== null && rotation !== 0), _defineProperty2(_classes, "fa-pull-".concat(pull), typeof pull !== "undefined" && pull !== null), _defineProperty2(_classes, "fa-swap-opacity", props.swapOpacity), _classes); + return Object.keys(classes).map(function(key) { + return classes[key] ? key : null; + }).filter(function(key) { + return key; + }); + } + function _isNumerical(obj) { + obj = obj - 0; + return obj === obj; + } + function camelize(string2) { + if (_isNumerical(string2)) { + return string2; + } + string2 = string2.replace(/[\-_\s]+(.)?/g, function(match3, chr) { + return chr ? chr.toUpperCase() : ""; + }); + return string2.substr(0, 1).toLowerCase() + string2.substr(1); + } + var _excluded5 = ["style"]; + function capitalize(val) { + return val.charAt(0).toUpperCase() + val.slice(1); + } + function styleToObject(style) { + return style.split(";").map(function(s4) { + return s4.trim(); + }).filter(function(s4) { + return s4; + }).reduce(function(acc, pair) { + var i4 = pair.indexOf(":"); + var prop = camelize(pair.slice(0, i4)); + var value = pair.slice(i4 + 1).trim(); + prop.startsWith("webkit") ? acc[capitalize(prop)] = value : acc[prop] = value; + return acc; + }, {}); + } + function convert2(createElement2, element) { + var extraProps = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + if (typeof element === "string") { + return element; + } + var children = (element.children || []).map(function(child) { + return convert2(createElement2, child); + }); + var mixins = Object.keys(element.attributes || {}).reduce(function(acc, key) { + var val = element.attributes[key]; + switch (key) { + case "class": + acc.attrs["className"] = val; + delete element.attributes["class"]; + break; + case "style": + acc.attrs["style"] = styleToObject(val); + break; + default: + if (key.indexOf("aria-") === 0 || key.indexOf("data-") === 0) { + acc.attrs[key.toLowerCase()] = val; + } else { + acc.attrs[camelize(key)] = val; + } + } + return acc; + }, { + attrs: {} + }); + var _extraProps$style = extraProps.style, existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style, remaining = _objectWithoutProperties2(extraProps, _excluded5); + mixins.attrs["style"] = _objectSpread22(_objectSpread22({}, mixins.attrs["style"]), existingStyle); + return createElement2.apply(void 0, [element.tag, _objectSpread22(_objectSpread22({}, mixins.attrs), remaining)].concat(_toConsumableArray2(children))); + } + var PRODUCTION2 = false; + try { + PRODUCTION2 = process.env.NODE_ENV === "production"; + } catch (e3) { + } + function log() { + if (!PRODUCTION2 && console && typeof console.error === "function") { + var _console; + (_console = console).error.apply(_console, arguments); + } + } + function normalizeIconArgs(icon2) { + if (icon2 && _typeof2(icon2) === "object" && icon2.prefix && icon2.iconName && icon2.icon) { + return icon2; + } + if (fontawesomeSvgCore.parse.icon) { + return fontawesomeSvgCore.parse.icon(icon2); + } + if (icon2 === null) { + return null; + } + if (icon2 && _typeof2(icon2) === "object" && icon2.prefix && icon2.iconName) { + return icon2; + } + if (Array.isArray(icon2) && icon2.length === 2) { + return { + prefix: icon2[0], + iconName: icon2[1] + }; + } + if (typeof icon2 === "string") { + return { + prefix: "fas", + iconName: icon2 + }; + } + } + function objectWithKey(key, value) { + return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty2({}, key, value) : {}; + } + var defaultProps2 = { + border: false, + className: "", + mask: null, + maskId: null, + fixedWidth: false, + inverse: false, + flip: false, + icon: null, + listItem: false, + pull: null, + pulse: false, + rotation: null, + size: null, + spin: false, + spinPulse: false, + spinReverse: false, + beat: false, + fade: false, + beatFade: false, + bounce: false, + shake: false, + symbol: false, + title: "", + titleId: null, + transform: null, + swapOpacity: false + }; + var FontAwesomeIcon2 = /* @__PURE__ */ React__default["default"].forwardRef(function(props, ref) { + var allProps = _objectSpread22(_objectSpread22({}, defaultProps2), props); + var iconArgs = allProps.icon, maskArgs = allProps.mask, symbol = allProps.symbol, className = allProps.className, title = allProps.title, titleId = allProps.titleId, maskId = allProps.maskId; + var iconLookup = normalizeIconArgs(iconArgs); + var classes = objectWithKey("classes", [].concat(_toConsumableArray2(classList(allProps)), _toConsumableArray2((className || "").split(" ")))); + var transform2 = objectWithKey("transform", typeof allProps.transform === "string" ? fontawesomeSvgCore.parse.transform(allProps.transform) : allProps.transform); + var mask = objectWithKey("mask", normalizeIconArgs(maskArgs)); + var renderedIcon = fontawesomeSvgCore.icon(iconLookup, _objectSpread22(_objectSpread22(_objectSpread22(_objectSpread22({}, classes), transform2), mask), {}, { + symbol, + title, + titleId, + maskId + })); + if (!renderedIcon) { + log("Could not find icon", iconLookup); + return null; + } + var abstract = renderedIcon.abstract; + var extraProps = { + ref + }; + Object.keys(allProps).forEach(function(key) { + if (!defaultProps2.hasOwnProperty(key)) { + extraProps[key] = allProps[key]; + } + }); + return convertCurry(abstract[0], extraProps); + }); + FontAwesomeIcon2.displayName = "FontAwesomeIcon"; + FontAwesomeIcon2.propTypes = { + beat: PropTypes__default["default"].bool, + border: PropTypes__default["default"].bool, + beatFade: PropTypes__default["default"].bool, + bounce: PropTypes__default["default"].bool, + className: PropTypes__default["default"].string, + fade: PropTypes__default["default"].bool, + flash: PropTypes__default["default"].bool, + mask: PropTypes__default["default"].oneOfType([PropTypes__default["default"].object, PropTypes__default["default"].array, PropTypes__default["default"].string]), + maskId: PropTypes__default["default"].string, + fixedWidth: PropTypes__default["default"].bool, + inverse: PropTypes__default["default"].bool, + flip: PropTypes__default["default"].oneOf([true, false, "horizontal", "vertical", "both"]), + icon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].object, PropTypes__default["default"].array, PropTypes__default["default"].string]), + listItem: PropTypes__default["default"].bool, + pull: PropTypes__default["default"].oneOf(["right", "left"]), + pulse: PropTypes__default["default"].bool, + rotation: PropTypes__default["default"].oneOf([0, 90, 180, 270]), + shake: PropTypes__default["default"].bool, + size: PropTypes__default["default"].oneOf(["2xs", "xs", "sm", "lg", "xl", "2xl", "1x", "2x", "3x", "4x", "5x", "6x", "7x", "8x", "9x", "10x"]), + spin: PropTypes__default["default"].bool, + spinPulse: PropTypes__default["default"].bool, + spinReverse: PropTypes__default["default"].bool, + symbol: PropTypes__default["default"].oneOfType([PropTypes__default["default"].bool, PropTypes__default["default"].string]), + title: PropTypes__default["default"].string, + titleId: PropTypes__default["default"].string, + transform: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].object]), + swapOpacity: PropTypes__default["default"].bool + }; + var convertCurry = convert2.bind(null, React__default["default"].createElement); + exports3.FontAwesomeIcon = FontAwesomeIcon2; + Object.defineProperty(exports3, "__esModule", { value: true }); + }); + } +}); + // node_modules/sorted-btree/b+tree.js var require_b_tree = __commonJS({ - "node_modules/sorted-btree/b+tree.js"(exports) { + "node_modules/sorted-btree/b+tree.js"(exports2) { "use strict"; - var __extends = exports && exports.__extends || function() { - var extendStatics = function(d4, b3) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d5, b4) { - d5.__proto__ = b4; - } || function(d5, b4) { - for (var p4 in b4) - if (Object.prototype.hasOwnProperty.call(b4, p4)) - d5[p4] = b4[p4]; + var __extends = exports2 && exports2.__extends || /* @__PURE__ */ function() { + var extendStatics = function(d3, b3) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d4, b4) { + d4.__proto__ = b4; + } || function(d4, b4) { + for (var p3 in b4) if (Object.prototype.hasOwnProperty.call(b4, p3)) d4[p3] = b4[p3]; }; - return extendStatics(d4, b3); + return extendStatics(d3, b3); }; - return function(d4, b3) { + return function(d3, b3) { if (typeof b3 !== "function" && b3 !== null) throw new TypeError("Class extends value " + String(b3) + " is not a constructor or null"); - extendStatics(d4, b3); + extendStatics(d3, b3); function __() { - this.constructor = d4; + this.constructor = d3; } - d4.prototype = b3 === null ? Object.create(b3) : (__.prototype = b3.prototype, new __()); + d3.prototype = b3 === null ? Object.create(b3) : (__.prototype = b3.prototype, new __()); }; }(); - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EmptyBTree = exports.asSet = exports.simpleComparator = exports.defaultComparator = void 0; - function defaultComparator(a3, b3) { - if (Number.isFinite(a3) && Number.isFinite(b3)) { - return a3 - b3; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.EmptyBTree = exports2.asSet = exports2.simpleComparator = exports2.defaultComparator = void 0; + function defaultComparator(a4, b3) { + if (Number.isFinite(a4) && Number.isFinite(b3)) { + return a4 - b3; } - var ta = typeof a3; + var ta = typeof a4; var tb = typeof b3; if (ta !== tb) { return ta < tb ? -1 : 1; } if (ta === "object") { - if (a3 === null) + if (a4 === null) return b3 === null ? 0 : -1; else if (b3 === null) return 1; - a3 = a3.valueOf(); + a4 = a4.valueOf(); b3 = b3.valueOf(); - ta = typeof a3; + ta = typeof a4; tb = typeof b3; if (ta !== tb) { return ta < tb ? -1 : 1; } } - if (a3 < b3) + if (a4 < b3) return -1; - if (a3 > b3) + if (a4 > b3) return 1; - if (a3 === b3) + if (a4 === b3) return 0; - if (Number.isNaN(a3)) + if (Number.isNaN(a4)) return Number.isNaN(b3) ? 0 : -1; else if (Number.isNaN(b3)) return 1; - return Array.isArray(a3) ? 0 : Number.NaN; + return Array.isArray(a4) ? 0 : Number.NaN; } - exports.defaultComparator = defaultComparator; - function simpleComparator(a3, b3) { - return a3 > b3 ? 1 : a3 < b3 ? -1 : 0; + exports2.defaultComparator = defaultComparator; + function simpleComparator(a4, b3) { + return a4 > b3 ? 1 : a4 < b3 ? -1 : 0; } - exports.simpleComparator = simpleComparator; + exports2.simpleComparator = simpleComparator; var BTree2 = ( /** @class */ function() { @@ -3854,55 +30265,54 @@ var require_b_tree = __commonJS({ return nu; }; BTree3.prototype.reduce = function(callback, initialValue) { - var i4 = 0, p4 = initialValue; - var it = this.entries(this.minKey(), ReusedArray), next3; - while (!(next3 = it.next()).done) - p4 = callback(p4, next3.value, i4++, this); - return p4; + var i4 = 0, p3 = initialValue; + var it = this.entries(this.minKey(), ReusedArray), next2; + while (!(next2 = it.next()).done) + p3 = callback(p3, next2.value, i4++, this); + return p3; }; BTree3.prototype.entries = function(lowestKey, reusedArray) { var info = this.findPath(lowestKey); if (info === void 0) return iterator(); var nodequeue = info.nodequeue, nodeindex = info.nodeindex, leaf = info.leaf; - var state2 = reusedArray !== void 0 ? 1 : 0; + var state = reusedArray !== void 0 ? 1 : 0; var i4 = lowestKey === void 0 ? -1 : leaf.indexOf(lowestKey, 0, this._compare) - 1; return iterator(function() { - jump: - for (; ; ) { - switch (state2) { - case 0: - if (++i4 < leaf.keys.length) - return { done: false, value: [leaf.keys[i4], leaf.values[i4]] }; - state2 = 2; - continue; - case 1: - if (++i4 < leaf.keys.length) { - reusedArray[0] = leaf.keys[i4], reusedArray[1] = leaf.values[i4]; - return { done: false, value: reusedArray }; + jump: for (; ; ) { + switch (state) { + case 0: + if (++i4 < leaf.keys.length) + return { done: false, value: [leaf.keys[i4], leaf.values[i4]] }; + state = 2; + continue; + case 1: + if (++i4 < leaf.keys.length) { + reusedArray[0] = leaf.keys[i4], reusedArray[1] = leaf.values[i4]; + return { done: false, value: reusedArray }; + } + state = 2; + case 2: + for (var level = -1; ; ) { + if (++level >= nodequeue.length) { + state = 3; + continue jump; } - state2 = 2; - case 2: - for (var level = -1; ; ) { - if (++level >= nodequeue.length) { - state2 = 3; - continue jump; - } - if (++nodeindex[level] < nodequeue[level].length) - break; - } - for (; level > 0; level--) { - nodequeue[level - 1] = nodequeue[level][nodeindex[level]].children; - nodeindex[level - 1] = 0; - } - leaf = nodequeue[0][nodeindex[0]]; - i4 = -1; - state2 = reusedArray !== void 0 ? 1 : 0; - continue; - case 3: - return { done: true, value: void 0 }; - } + if (++nodeindex[level] < nodequeue[level].length) + break; + } + for (; level > 0; level--) { + nodequeue[level - 1] = nodequeue[level][nodeindex[level]].children; + nodeindex[level - 1] = 0; + } + leaf = nodequeue[0][nodeindex[0]]; + i4 = -1; + state = reusedArray !== void 0 ? 1 : 0; + continue; + case 3: + return { done: true, value: void 0 }; } + } }); }; BTree3.prototype.entriesReversed = function(highestKey, reusedArray, skipHighest) { @@ -3917,43 +30327,42 @@ var require_b_tree = __commonJS({ var i4 = leaf.indexOf(highestKey, 0, this._compare); if (!skipHighest && i4 < leaf.keys.length && this._compare(leaf.keys[i4], highestKey) <= 0) i4++; - var state2 = reusedArray !== void 0 ? 1 : 0; + var state = reusedArray !== void 0 ? 1 : 0; return iterator(function() { - jump: - for (; ; ) { - switch (state2) { - case 0: - if (--i4 >= 0) - return { done: false, value: [leaf.keys[i4], leaf.values[i4]] }; - state2 = 2; - continue; - case 1: - if (--i4 >= 0) { - reusedArray[0] = leaf.keys[i4], reusedArray[1] = leaf.values[i4]; - return { done: false, value: reusedArray }; + jump: for (; ; ) { + switch (state) { + case 0: + if (--i4 >= 0) + return { done: false, value: [leaf.keys[i4], leaf.values[i4]] }; + state = 2; + continue; + case 1: + if (--i4 >= 0) { + reusedArray[0] = leaf.keys[i4], reusedArray[1] = leaf.values[i4]; + return { done: false, value: reusedArray }; + } + state = 2; + case 2: + for (var level = -1; ; ) { + if (++level >= nodequeue.length) { + state = 3; + continue jump; } - state2 = 2; - case 2: - for (var level = -1; ; ) { - if (++level >= nodequeue.length) { - state2 = 3; - continue jump; - } - if (--nodeindex[level] >= 0) - break; - } - for (; level > 0; level--) { - nodequeue[level - 1] = nodequeue[level][nodeindex[level]].children; - nodeindex[level - 1] = nodequeue[level - 1].length - 1; - } - leaf = nodequeue[0][nodeindex[0]]; - i4 = leaf.keys.length; - state2 = reusedArray !== void 0 ? 1 : 0; - continue; - case 3: - return { done: true, value: void 0 }; - } + if (--nodeindex[level] >= 0) + break; + } + for (; level > 0; level--) { + nodequeue[level - 1] = nodequeue[level][nodeindex[level]].children; + nodeindex[level - 1] = nodequeue[level - 1].length - 1; + } + leaf = nodequeue[0][nodeindex[0]]; + i4 = leaf.keys.length; + state = reusedArray !== void 0 ? 1 : 0; + continue; + case 3: + return { done: true, value: void 0 }; } + } }); }; BTree3.prototype.findPath = function(key) { @@ -3963,12 +30372,12 @@ var require_b_tree = __commonJS({ nodequeue = EmptyArray, nodeindex = EmptyArray; } else { nodequeue = [], nodeindex = []; - for (var d4 = 0; !nextnode.isLeaf; d4++) { - nodequeue[d4] = nextnode.children; - nodeindex[d4] = key === void 0 ? 0 : nextnode.indexOf(key, 0, this._compare); - if (nodeindex[d4] >= nodequeue[d4].length) + for (var d3 = 0; !nextnode.isLeaf; d3++) { + nodequeue[d3] = nextnode.children; + nodeindex[d3] = key === void 0 ? 0 : nextnode.indexOf(key, 0, this._compare); + if (nodeindex[d3] >= nodequeue[d3].length) return; - nextnode = nodequeue[d4][nodeindex[d4]]; + nextnode = nodequeue[d3][nodeindex[d3]]; } nodequeue.reverse(); nodeindex.reverse(); @@ -4217,8 +30626,8 @@ var require_b_tree = __commonJS({ return this._root.getPairOrNextHigher(key, this._compare, false, reusedArray); }; BTree3.prototype.nextHigherKey = function(key) { - var p4 = this.nextHigherPair(key, ReusedArray); - return p4 && p4[0]; + var p3 = this.nextHigherPair(key, ReusedArray); + return p3 && p3[0]; }; BTree3.prototype.nextLowerPair = function(key, reusedArray) { reusedArray = reusedArray || []; @@ -4228,8 +30637,8 @@ var require_b_tree = __commonJS({ return this._root.getPairOrNextLower(key, this._compare, false, reusedArray); }; BTree3.prototype.nextLowerKey = function(key) { - var p4 = this.nextLowerPair(key, ReusedArray); - return p4 && p4[0]; + var p3 = this.nextLowerPair(key, ReusedArray); + return p3 && p3[0]; }; BTree3.prototype.getPairOrNextLower = function(key, reusedArray) { return this._root.getPairOrNextLower(key, this._compare, true, reusedArray || []); @@ -4261,16 +30670,16 @@ var require_b_tree = __commonJS({ return added; }; BTree3.prototype.forRange = function(low, high, includeHigh, onFound, initialCounter) { - var r3 = this._root.forRange(low, high, includeHigh, false, this, initialCounter || 0, onFound); - return typeof r3 === "number" ? r3 : r3.break; + var r4 = this._root.forRange(low, high, includeHigh, false, this, initialCounter || 0, onFound); + return typeof r4 === "number" ? r4 : r4.break; }; BTree3.prototype.editRange = function(low, high, includeHigh, onFound, initialCounter) { var root = this._root; if (root.isShared) this._root = root = root.clone(); try { - var r3 = root.forRange(low, high, includeHigh, true, this, initialCounter || 0, onFound); - return typeof r3 === "number" ? r3 : r3.break; + var r4 = root.forRange(low, high, includeHigh, true, this, initialCounter || 0, onFound); + return typeof r4 === "number" ? r4 : r4.break; } finally { var isShared = void 0; while (root.keys.length <= 1 && !root.isLeaf) { @@ -4289,10 +30698,10 @@ var require_b_tree = __commonJS({ return this.editRange(low, high, includeHigh, DeleteRange); }; BTree3.prototype.deleteKeys = function(keys) { - for (var i4 = 0, r3 = 0; i4 < keys.length; i4++) + for (var i4 = 0, r4 = 0; i4 < keys.length; i4++) if (this.delete(keys[i4])) - r3++; - return r3; + r4++; + return r4; }; Object.defineProperty(BTree3.prototype, "height", { /** Gets the height of the tree: the number of internal nodes between the @@ -4335,23 +30744,23 @@ var require_b_tree = __commonJS({ return BTree3; }() ); - exports.default = BTree2; + exports2.default = BTree2; function asSet(btree) { return btree; } - exports.asSet = asSet; + exports2.asSet = asSet; if (Symbol && Symbol.iterator) BTree2.prototype[Symbol.iterator] = BTree2.prototype.entries; BTree2.prototype.where = BTree2.prototype.filter; BTree2.prototype.setRange = BTree2.prototype.setPairs; BTree2.prototype.add = BTree2.prototype.set; - function iterator(next3) { - if (next3 === void 0) { - next3 = function() { + function iterator(next2) { + if (next2 === void 0) { + next2 = function() { return { done: true, value: void 0 }; }; } - var result = { next: next3 }; + var result = { next: next2 }; if (Symbol && Symbol.iterator) result[Symbol.iterator] = function() { return this; @@ -4381,14 +30790,14 @@ var require_b_tree = __commonJS({ }; BNode2.prototype.indexOf = function(key, failXor, cmp) { var keys = this.keys; - var lo = 0, hi = keys.length, mid = hi >> 1; - while (lo < hi) { - var c3 = cmp(keys[mid], key); - if (c3 < 0) - lo = mid + 1; - else if (c3 > 0) + var lo2 = 0, hi = keys.length, mid = hi >> 1; + while (lo2 < hi) { + var c4 = cmp(keys[mid], key); + if (c4 < 0) + lo2 = mid + 1; + else if (c4 > 0) hi = mid; - else if (c3 === 0) + else if (c4 === 0) return mid; else { if (key === key) @@ -4396,7 +30805,7 @@ var require_b_tree = __commonJS({ else throw new Error("BTree: NaN was used as a key"); } - mid = lo + hi >> 1; + mid = lo2 + hi >> 1; } return mid ^ failXor; }; @@ -4651,14 +31060,14 @@ var require_b_tree = __commonJS({ var kL = this.keys.length, cL = this.children.length; check(kL === cL, "keys/children length mismatch: depth", depth, "lengths", kL, cL, "baseIndex", baseIndex); check(kL > 1 || depth > 0, "internal node has length", kL, "at depth", depth, "baseIndex", baseIndex); - var size2 = 0, c3 = this.children, k4 = this.keys, childSize = 0; + var size2 = 0, c4 = this.children, k4 = this.keys, childSize = 0; for (var i4 = 0; i4 < cL; i4++) { - size2 += c3[i4].checkValid(depth + 1, tree, baseIndex + size2); - childSize += c3[i4].keys.length; + size2 += c4[i4].checkValid(depth + 1, tree, baseIndex + size2); + childSize += c4[i4].keys.length; check(size2 >= childSize, "wtf", baseIndex); - check(i4 === 0 || c3[i4 - 1].constructor === c3[i4].constructor, "type mismatch, baseIndex:", baseIndex); - if (c3[i4].maxKey() != k4[i4]) - check(false, "keys[", i4, "] =", k4[i4], "is wrong, should be ", c3[i4].maxKey(), "at depth", depth, "baseIndex", baseIndex); + check(i4 === 0 || c4[i4 - 1].constructor === c4[i4].constructor, "type mismatch, baseIndex:", baseIndex); + if (c4[i4].maxKey() != k4[i4]) + check(false, "keys[", i4, "] =", k4[i4], "is wrong, should be ", c4[i4].maxKey(), "at depth", depth, "baseIndex", baseIndex); if (!(i4 === 0 || tree._compare(k4[i4 - 1], k4[i4]) < 0)) check(false, "sort violation at depth", depth, "index", i4, "keys", k4[i4 - 1], k4[i4]); } @@ -4668,22 +31077,22 @@ var require_b_tree = __commonJS({ return size2; }; BNodeInternal2.prototype.set = function(key, value, overwrite, tree) { - var c3 = this.children, max2 = tree._maxNodeSize, cmp = tree._compare; - var i4 = Math.min(this.indexOf(key, 0, cmp), c3.length - 1), child = c3[i4]; + var c4 = this.children, max2 = tree._maxNodeSize, cmp = tree._compare; + var i4 = Math.min(this.indexOf(key, 0, cmp), c4.length - 1), child = c4[i4]; if (child.isShared) - c3[i4] = child = child.clone(); + c4[i4] = child = child.clone(); if (child.keys.length >= max2) { var other; - if (i4 > 0 && (other = c3[i4 - 1]).keys.length < max2 && cmp(child.keys[0], key) < 0) { + if (i4 > 0 && (other = c4[i4 - 1]).keys.length < max2 && cmp(child.keys[0], key) < 0) { if (other.isShared) - c3[i4 - 1] = other = other.clone(); + c4[i4 - 1] = other = other.clone(); other.takeFromRight(child); this.keys[i4 - 1] = other.maxKey(); - } else if ((other = c3[i4 + 1]) !== void 0 && other.keys.length < max2 && cmp(child.maxKey(), key) < 0) { + } else if ((other = c4[i4 + 1]) !== void 0 && other.keys.length < max2 && cmp(child.maxKey(), key) < 0) { if (other.isShared) - c3[i4 + 1] = other = other.clone(); + c4[i4 + 1] = other = other.clone(); other.takeFromLeft(child); - this.keys[i4] = c3[i4].maxKey(); + this.keys[i4] = c4[i4].maxKey(); } } var result = child.set(key, value, overwrite, tree); @@ -4816,7 +31225,7 @@ var require_b_tree = __commonJS({ throw new Error(args.join(" ")); } } - exports.EmptyBTree = function() { + exports2.EmptyBTree = function() { var t4 = new BTree2(); t4.freeze(); return t4; @@ -4826,9 +31235,9 @@ var require_b_tree = __commonJS({ // node_modules/localforage/dist/localforage.js var require_localforage = __commonJS({ - "node_modules/localforage/dist/localforage.js"(exports, module2) { + "node_modules/localforage/dist/localforage.js"(exports2, module2) { (function(f4) { - if (typeof exports === "object" && typeof module2 !== "undefined") { + if (typeof exports2 === "object" && typeof module2 !== "undefined") { module2.exports = f4(); } else if (typeof define === "function" && define.amd) { define([], f4); @@ -4846,32 +31255,29 @@ var require_localforage = __commonJS({ g4.localforage = f4(); } })(function() { - var define2, module3, exports2; - return function e3(t4, n3, r3) { - function s4(o4, u4) { - if (!n3[o4]) { - if (!t4[o4]) { - var a3 = typeof require == "function" && require; - if (!u4 && a3) - return a3(o4, true); - if (i4) - return i4(o4, true); - var f4 = new Error("Cannot find module '" + o4 + "'"); + var define2, module3, exports3; + return function e3(t4, n3, r4) { + function s4(o5, u4) { + if (!n3[o5]) { + if (!t4[o5]) { + var a4 = typeof require == "function" && require; + if (!u4 && a4) return a4(o5, true); + if (i4) return i4(o5, true); + var f4 = new Error("Cannot find module '" + o5 + "'"); throw f4.code = "MODULE_NOT_FOUND", f4; } - var l4 = n3[o4] = { exports: {} }; - t4[o4][0].call(l4.exports, function(e4) { - var n4 = t4[o4][1][e4]; + var l4 = n3[o5] = { exports: {} }; + t4[o5][0].call(l4.exports, function(e4) { + var n4 = t4[o5][1][e4]; return s4(n4 ? n4 : e4); - }, l4, l4.exports, e3, t4, n3, r3); + }, l4, l4.exports, e3, t4, n3, r4); } - return n3[o4].exports; + return n3[o5].exports; } var i4 = typeof require == "function" && require; - for (var o3 = 0; o3 < r3.length; o3++) - s4(r3[o3]); + for (var o4 = 0; o4 < r4.length; o4++) s4(r4[o4]); return s4; - }({ 1: [function(_dereq_, module4, exports3) { + }({ 1: [function(_dereq_, module4, exports4) { (function(global2) { "use strict"; var Mutation = global2.MutationObserver || global2.WebKitMutationObserver; @@ -4934,7 +31340,7 @@ var require_localforage = __commonJS({ } } }).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); - }, {}], 2: [function(_dereq_, module4, exports3) { + }, {}], 2: [function(_dereq_, module4, exports4) { "use strict"; var immediate = _dereq_(1); function INTERNAL() { @@ -5159,21 +31565,21 @@ var require_localforage = __commonJS({ }); } } - }, { "1": 1 }], 3: [function(_dereq_, module4, exports3) { + }, { "1": 1 }], 3: [function(_dereq_, module4, exports4) { (function(global2) { "use strict"; if (typeof global2.Promise !== "function") { global2.Promise = _dereq_(2); } }).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); - }, { "2": 2 }], 4: [function(_dereq_, module4, exports3) { + }, { "2": 2 }], 4: [function(_dereq_, module4, exports4) { "use strict"; - var _typeof4 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - function _classCallCheck3(instance, Constructor) { + function _classCallCheck2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } @@ -6005,7 +32411,7 @@ var require_localforage = __commonJS({ var bufferLength = serializedString.length * 0.75; var len = serializedString.length; var i4; - var p4 = 0; + var p3 = 0; var encoded1, encoded2, encoded3, encoded4; if (serializedString[serializedString.length - 1] === "=") { bufferLength--; @@ -6020,9 +32426,9 @@ var require_localforage = __commonJS({ encoded2 = BASE_CHARS.indexOf(serializedString[i4 + 1]); encoded3 = BASE_CHARS.indexOf(serializedString[i4 + 2]); encoded4 = BASE_CHARS.indexOf(serializedString[i4 + 3]); - bytes[p4++] = encoded1 << 2 | encoded2 >> 4; - bytes[p4++] = (encoded2 & 15) << 4 | encoded3 >> 2; - bytes[p4++] = (encoded3 & 3) << 6 | encoded4 & 63; + bytes[p3++] = encoded1 << 2 | encoded2 >> 4; + bytes[p3++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p3++] = (encoded3 & 3) << 6 | encoded4 & 63; } return buffer; } @@ -6691,14 +33097,14 @@ var require_localforage = __commonJS({ keys: keys$2, dropInstance: dropInstance$2 }; - var sameValue = function sameValue2(x4, y3) { - return x4 === y3 || typeof x4 === "number" && typeof y3 === "number" && isNaN(x4) && isNaN(y3); + var sameValue = function sameValue2(x4, y4) { + return x4 === y4 || typeof x4 === "number" && typeof y4 === "number" && isNaN(x4) && isNaN(y4); }; - var includes = function includes2(array2, searchElement) { - var len = array2.length; + var includes = function includes2(array, searchElement) { + var len = array.length; var i4 = 0; while (i4 < len) { - if (sameValue(array2[i4], searchElement)) { + if (sameValue(array[i4], searchElement)) { return true; } i4++; @@ -6755,7 +33161,7 @@ var require_localforage = __commonJS({ } var LocalForage = function() { function LocalForage2(options2) { - _classCallCheck3(this, LocalForage2); + _classCallCheck2(this, LocalForage2); for (var driverTypeKey in DefaultDrivers) { if (DefaultDrivers.hasOwnProperty(driverTypeKey)) { var driver = DefaultDrivers[driverTypeKey]; @@ -6777,7 +33183,7 @@ var require_localforage = __commonJS({ }); } LocalForage2.prototype.config = function config2(options2) { - if ((typeof options2 === "undefined" ? "undefined" : _typeof4(options2)) === "object") { + if ((typeof options2 === "undefined" ? "undefined" : _typeof2(options2)) === "object") { if (this._ready) { return new Error("Can't call config() after localforage has been used."); } @@ -6974,8 +33380,8 @@ var require_localforage = __commonJS({ // node_modules/@datastructures-js/queue/src/queue.js var require_queue = __commonJS({ - "node_modules/@datastructures-js/queue/src/queue.js"(exports) { - var Queue3 = class { + "node_modules/@datastructures-js/queue/src/queue.js"(exports2) { + var Queue3 = class _Queue { /** * Creates a queue. * @param {array} [elements] @@ -7007,12 +33413,10 @@ var require_queue = __commonJS({ * @returns {number|string|object} */ dequeue() { - if (this.size() === 0) - return null; + if (this.size() === 0) return null; const first = this.front(); this._offset += 1; - if (this._offset * 2 < this._elements.length) - return first; + if (this._offset * 2 < this._elements.length) return first; this._elements = this._elements.slice(this._offset); this._offset = 0; return first; @@ -7079,7 +33483,7 @@ var require_queue = __commonJS({ * @return {Queue} */ clone() { - return new Queue3(this._elements.slice(this._offset)); + return new _Queue(this._elements.slice(this._offset)); } /** * Creates a queue from an existing array. @@ -7089,18 +33493,18 @@ var require_queue = __commonJS({ * @return {Queue} */ static fromArray(elements) { - return new Queue3(elements); + return new _Queue(elements); } }; - exports.Queue = Queue3; + exports2.Queue = Queue3; } }); // node_modules/@datastructures-js/queue/index.js var require_queue2 = __commonJS({ - "node_modules/@datastructures-js/queue/index.js"(exports) { + "node_modules/@datastructures-js/queue/index.js"(exports2) { var { Queue: Queue3 } = require_queue(); - exports.Queue = Queue3; + exports2.Queue = Queue3; } }); @@ -7313,20 +33717,20 @@ var DATETIME_HUGE_WITH_SECONDS = { }; // node_modules/luxon/src/impl/util.js -function isUndefined(o3) { - return typeof o3 === "undefined"; +function isUndefined(o4) { + return typeof o4 === "undefined"; } -function isNumber(o3) { - return typeof o3 === "number"; +function isNumber(o4) { + return typeof o4 === "number"; } -function isInteger(o3) { - return typeof o3 === "number" && o3 % 1 === 0; +function isInteger(o4) { + return typeof o4 === "number" && o4 % 1 === 0; } -function isString(o3) { - return typeof o3 === "string"; +function isString(o4) { + return typeof o4 === "string"; } -function isDate(o3) { - return Object.prototype.toString.call(o3) === "[object Date]"; +function isDate(o4) { + return Object.prototype.toString.call(o4) === "[object Date]"; } function hasRelative() { try { @@ -7342,8 +33746,8 @@ function bestBy(arr, by, compare) { if (arr.length === 0) { return void 0; } - return arr.reduce((best, next3) => { - const pair = [by(next3), next3]; + return arr.reduce((best, next2) => { + const pair = [by(next2), next2]; if (!best) { return pair; } else if (compare(best[0], pair[0]) === best[0]) { @@ -7354,9 +33758,9 @@ function bestBy(arr, by, compare) { }, null)[1]; } function pick(obj, keys) { - return keys.reduce((a3, k4) => { - a3[k4] = obj[k4]; - return a3; + return keys.reduce((a4, k4) => { + a4[k4] = obj[k4]; + return a4; }, {}); } function hasOwnProperty(obj, prop) { @@ -7368,13 +33772,13 @@ function integerBetween(thing, bottom, top) { function floorMod(x4, n3) { return x4 - n3 * Math.floor(x4 / n3); } -function padStart(input2, n3 = 2) { - const isNeg = input2 < 0; +function padStart(input, n3 = 2) { + const isNeg = input < 0; let padded; if (isNeg) { - padded = "-" + ("" + -input2).padStart(n3, "0"); + padded = "-" + ("" + -input).padStart(n3, "0"); } else { - padded = ("" + input2).padStart(n3, "0"); + padded = ("" + input).padStart(n3, "0"); } return padded; } @@ -7419,7 +33823,7 @@ function daysInMonth(year, month) { } } function objToLocalTS(obj) { - let d4 = Date.UTC( + let d3 = Date.UTC( obj.year, obj.month - 1, obj.day, @@ -7429,10 +33833,10 @@ function objToLocalTS(obj) { obj.millisecond ); if (obj.year < 100 && obj.year >= 0) { - d4 = new Date(d4); - d4.setUTCFullYear(d4.getUTCFullYear() - 1900); + d3 = new Date(d3); + d3.setUTCFullYear(d3.getUTCFullYear() - 1900); } - return +d4; + return +d3; } function weeksInWeekYear(weekYear) { const p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, last = weekYear - 1, p22 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; @@ -7441,8 +33845,7 @@ function weeksInWeekYear(weekYear) { function untruncateYear(year) { if (year > 99) { return year; - } else - return year > 60 ? 1900 + year : 2e3 + year; + } else return year > 60 ? 1900 + year : 2e3 + year; } function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) { const date = new Date(ts), intlOpts = { @@ -7479,8 +33882,7 @@ function normalizeObject(obj, normalizer) { for (const u4 in obj) { if (hasOwnProperty(obj, u4)) { const v3 = obj[u4]; - if (v3 === void 0 || v3 === null) - continue; + if (v3 === void 0 || v3 === null) continue; normalized[normalizer(u4)] = asNumber(v3); } } @@ -7665,16 +34067,16 @@ var macroTokenToFormatOpts = { FFF: DATETIME_FULL_WITH_SECONDS, FFFF: DATETIME_HUGE_WITH_SECONDS }; -var Formatter = class { +var Formatter = class _Formatter { static create(locale, opts = {}) { - return new Formatter(locale, opts); + return new _Formatter(locale, opts); } static parseFormat(fmt) { let current = null, currentFull = "", bracketed = false; const splits = []; for (let i4 = 0; i4 < fmt.length; i4++) { - const c3 = fmt.charAt(i4); - if (c3 === "'") { + const c4 = fmt.charAt(i4); + if (c4 === "'") { if (currentFull.length > 0) { splits.push({ literal: bracketed, val: currentFull }); } @@ -7682,15 +34084,15 @@ var Formatter = class { currentFull = ""; bracketed = !bracketed; } else if (bracketed) { - currentFull += c3; - } else if (c3 === current) { - currentFull += c3; + currentFull += c4; + } else if (c4 === current) { + currentFull += c4; } else { if (currentFull.length > 0) { splits.push({ literal: false, val: currentFull }); } - currentFull = c3; - current = c3; + currentFull = c4; + current = c4; } } if (currentFull.length > 0) { @@ -7725,13 +34127,13 @@ var Formatter = class { const df = this.loc.dtFormatter(dt, { ...this.opts, ...opts }); return df.resolvedOptions(); } - num(n3, p4 = 0) { + num(n3, p3 = 0) { if (this.opts.forceSimple) { - return padStart(n3, p4); + return padStart(n3, p3); } const opts = { ...this.opts }; - if (p4 > 0) { - opts.padTo = p4; + if (p3 > 0) { + opts.padTo = p3; } return this.loc.numberFormatter(opts).format(n3); } @@ -7745,7 +34147,7 @@ var Formatter = class { standalone ? { weekday: length2 } : { weekday: length2, month: "long", day: "numeric" }, "weekday" ), maybeMacro = (token2) => { - const formatOpts = Formatter.macroTokenToFormatOpts(token2); + const formatOpts = _Formatter.macroTokenToFormatOpts(token2); if (formatOpts) { return this.formatWithSystemDefault(dt, formatOpts); } else { @@ -7753,23 +34155,29 @@ var Formatter = class { } }, era = (length2) => knownEnglish ? eraForDateTime(dt, length2) : string2({ era: length2 }, "era"), tokenToString = (token2) => { switch (token2) { + // ms case "S": return this.num(dt.millisecond); case "u": + // falls through case "SSS": return this.num(dt.millisecond, 3); + // seconds case "s": return this.num(dt.second); case "ss": return this.num(dt.second, 2); + // fractional seconds case "uu": return this.num(Math.floor(dt.millisecond / 10), 2); case "uuu": return this.num(Math.floor(dt.millisecond / 100)); + // minutes case "m": return this.num(dt.minute); case "mm": return this.num(dt.minute, 2); + // hours case "h": return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); case "hh": @@ -7778,6 +34186,7 @@ var Formatter = class { return this.num(dt.hour); case "HH": return this.num(dt.hour, 2); + // offset case "Z": return formatOffset2({ format: "narrow", allowZ: this.opts.allowZ }); case "ZZ": @@ -7788,14 +34197,18 @@ var Formatter = class { return dt.zone.offsetName(dt.ts, { format: "short", locale: this.loc.locale }); case "ZZZZZ": return dt.zone.offsetName(dt.ts, { format: "long", locale: this.loc.locale }); + // zone case "z": return dt.zoneName; + // meridiems case "a": return meridiem(); + // dates case "d": return useDateTimeFormatter ? string2({ day: "numeric" }, "day") : this.num(dt.day); case "dd": return useDateTimeFormatter ? string2({ day: "2-digit" }, "day") : this.num(dt.day, 2); + // weekdays - standalone case "c": return this.num(dt.weekday); case "ccc": @@ -7804,6 +34217,7 @@ var Formatter = class { return weekday("long", true); case "ccccc": return weekday("narrow", true); + // weekdays - format case "E": return this.num(dt.weekday); case "EEE": @@ -7812,6 +34226,7 @@ var Formatter = class { return weekday("long", false); case "EEEEE": return weekday("narrow", false); + // months - standalone case "L": return useDateTimeFormatter ? string2({ month: "numeric", day: "numeric" }, "month") : this.num(dt.month); case "LL": @@ -7822,6 +34237,7 @@ var Formatter = class { return month("long", true); case "LLLLL": return month("narrow", true); + // months - format case "M": return useDateTimeFormatter ? string2({ month: "numeric" }, "month") : this.num(dt.month); case "MM": @@ -7832,6 +34248,7 @@ var Formatter = class { return month("long", false); case "MMMMM": return month("narrow", false); + // years case "y": return useDateTimeFormatter ? string2({ year: "numeric" }, "year") : this.num(dt.year); case "yy": @@ -7840,6 +34257,7 @@ var Formatter = class { return useDateTimeFormatter ? string2({ year: "numeric" }, "year") : this.num(dt.year, 4); case "yyyyyy": return useDateTimeFormatter ? string2({ year: "numeric" }, "year") : this.num(dt.year, 6); + // eras case "G": return era("short"); case "GG": @@ -7870,7 +34288,7 @@ var Formatter = class { return maybeMacro(token2); } }; - return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + return stringifyTokens(_Formatter.parseFormat(fmt), tokenToString); } formatDurationFromString(dur, fmt) { const tokenToField = (token2) => { @@ -7901,7 +34319,7 @@ var Formatter = class { } else { return token2; } - }, tokens = Formatter.parseFormat(fmt), realTokens = tokens.reduce( + }, tokens = _Formatter.parseFormat(fmt), realTokens = tokens.reduce( (found, { literal, val }) => literal ? found : found.concat(val), [] ), collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t4) => t4)); @@ -8006,14 +34424,14 @@ var Zone = class { // node_modules/luxon/src/zones/systemZone.js var singleton = null; -var SystemZone = class extends Zone { +var SystemZone = class _SystemZone extends Zone { /** * Get a singleton instance of the local zone * @return {SystemZone} */ static get instance() { if (singleton === null) { - singleton = new SystemZone(); + singleton = new _SystemZone(); } return singleton; } @@ -8097,14 +34515,14 @@ function partsOffset(dtf, date) { return filled; } var ianaZoneCache = {}; -var IANAZone = class extends Zone { +var IANAZone = class _IANAZone extends Zone { /** * @param {string} name - Zone name * @return {IANAZone} */ static create(name) { if (!ianaZoneCache[name]) { - ianaZoneCache[name] = new IANAZone(name); + ianaZoneCache[name] = new _IANAZone(name); } return ianaZoneCache[name]; } @@ -8149,7 +34567,7 @@ var IANAZone = class extends Zone { constructor(name) { super(); this.zoneName = name; - this.valid = IANAZone.isValidZone(name); + this.valid = _IANAZone.isValidZone(name); } /** @override **/ get type() { @@ -8174,8 +34592,7 @@ var IANAZone = class extends Zone { /** @override **/ offset(ts) { const date = new Date(ts); - if (isNaN(date)) - return NaN; + if (isNaN(date)) return NaN; const dtf = makeDTF(this.name); let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date); if (adOrBc === "BC") { @@ -8208,14 +34625,14 @@ var IANAZone = class extends Zone { // node_modules/luxon/src/zones/fixedOffsetZone.js var singleton2 = null; -var FixedOffsetZone = class extends Zone { +var FixedOffsetZone = class _FixedOffsetZone extends Zone { /** * Get a singleton instance of UTC * @return {FixedOffsetZone} */ static get utcInstance() { if (singleton2 === null) { - singleton2 = new FixedOffsetZone(0); + singleton2 = new _FixedOffsetZone(0); } return singleton2; } @@ -8225,7 +34642,7 @@ var FixedOffsetZone = class extends Zone { * @return {FixedOffsetZone} */ static instance(offset3) { - return offset3 === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset3); + return offset3 === 0 ? _FixedOffsetZone.utcInstance : new _FixedOffsetZone(offset3); } /** * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" @@ -8237,9 +34654,9 @@ var FixedOffsetZone = class extends Zone { */ static parseSpecifier(s4) { if (s4) { - const r3 = s4.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); - if (r3) { - return new FixedOffsetZone(signedOffset(r3[1], r3[2])); + const r4 = s4.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + if (r4) { + return new _FixedOffsetZone(signedOffset(r4[1], r4[2])); } } return null; @@ -8330,26 +34747,23 @@ var InvalidZone = class extends Zone { }; // node_modules/luxon/src/impl/zoneUtil.js -function normalizeZone(input2, defaultZone2) { +function normalizeZone(input, defaultZone2) { let offset3; - if (isUndefined(input2) || input2 === null) { + if (isUndefined(input) || input === null) { return defaultZone2; - } else if (input2 instanceof Zone) { - return input2; - } else if (isString(input2)) { - const lowered = input2.toLowerCase(); - if (lowered === "local" || lowered === "system") - return defaultZone2; - else if (lowered === "utc" || lowered === "gmt") - return FixedOffsetZone.utcInstance; - else - return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input2); - } else if (isNumber(input2)) { - return FixedOffsetZone.instance(input2); - } else if (typeof input2 === "object" && input2.offset && typeof input2.offset === "number") { - return input2; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + const lowered = input.toLowerCase(); + if (lowered === "local" || lowered === "system") return defaultZone2; + else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance; + else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && input.offset && typeof input.offset === "number") { + return input; } else { - return new InvalidZone(input2); + return new InvalidZone(input); } } @@ -8581,8 +34995,7 @@ var PolyNumberFormatter = class { const { padTo, floor: floor2, ...otherOpts } = opts; if (!forceSimple || Object.keys(otherOpts).length > 0) { const intlOpts = { useGrouping: false, ...opts }; - if (opts.padTo > 0) - intlOpts.minimumIntegerDigits = opts.padTo; + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; this.inf = getCachedINF(intl, intlOpts); } } @@ -8658,16 +35071,16 @@ var PolyRelFormatter = class { } } }; -var Locale = class { +var Locale = class _Locale { static fromOpts(opts) { - return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); + return _Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); } static create(locale, numberingSystem, outputCalendar, defaultToEN = false) { const specifiedLocale = locale || Settings.defaultLocale; const localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; - return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); + return new _Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); } static resetCache() { sysLocaleCache = null; @@ -8676,7 +35089,7 @@ var Locale = class { intlRelCache = {}; } static fromObject({ locale, numberingSystem, outputCalendar } = {}) { - return Locale.create(locale, numberingSystem, outputCalendar); + return _Locale.create(locale, numberingSystem, outputCalendar); } constructor(locale, numbering, outputCalendar, specifiedLocale) { const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale); @@ -8706,7 +35119,7 @@ var Locale = class { if (!alts || Object.getOwnPropertyNames(alts).length === 0) { return this; } else { - return Locale.create( + return _Locale.create( alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, @@ -8794,14 +35207,14 @@ var Locale = class { // node_modules/luxon/src/impl/regexParser.js function combineRegexes(...regexes) { - const full = regexes.reduce((f4, r3) => f4 + r3.source, ""); + const full = regexes.reduce((f4, r4) => f4 + r4.source, ""); return RegExp(`^${full}$`); } function combineExtractors(...extractors) { return (m3) => extractors.reduce( ([mergedVals, mergedZone, cursor2], ex) => { - const [val, zone, next3] = ex(m3, cursor2); - return [{ ...mergedVals, ...val }, zone || mergedZone, next3]; + const [val, zone, next2] = ex(m3, cursor2); + return [{ ...mergedVals, ...val }, zone || mergedZone, next2]; }, [{}, null, 1] ).slice(0, 2); @@ -8819,11 +35232,11 @@ function parse(s4, ...patterns) { return [null, null]; } function simpleParse(...keys) { - return (match4, cursor2) => { + return (match3, cursor2) => { const ret = {}; let i4; for (i4 = 0; i4 < keys.length; i4++) { - ret[keys[i4]] = parseInteger(match4[cursor2 + i4]); + ret[keys[i4]] = parseInteger(match3[cursor2 + i4]); } return [ret, null, cursor2 + i4]; }; @@ -8843,38 +35256,38 @@ var sqlTimeRegex = RegExp( `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?` ); var sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`); -function int(match4, pos, fallback) { - const m3 = match4[pos]; +function int(match3, pos, fallback) { + const m3 = match3[pos]; return isUndefined(m3) ? fallback : parseInteger(m3); } -function extractISOYmd(match4, cursor2) { +function extractISOYmd(match3, cursor2) { const item = { - year: int(match4, cursor2), - month: int(match4, cursor2 + 1, 1), - day: int(match4, cursor2 + 2, 1) + year: int(match3, cursor2), + month: int(match3, cursor2 + 1, 1), + day: int(match3, cursor2 + 2, 1) }; return [item, null, cursor2 + 3]; } -function extractISOTime(match4, cursor2) { +function extractISOTime(match3, cursor2) { const item = { - hours: int(match4, cursor2, 0), - minutes: int(match4, cursor2 + 1, 0), - seconds: int(match4, cursor2 + 2, 0), - milliseconds: parseMillis(match4[cursor2 + 3]) + hours: int(match3, cursor2, 0), + minutes: int(match3, cursor2 + 1, 0), + seconds: int(match3, cursor2 + 2, 0), + milliseconds: parseMillis(match3[cursor2 + 3]) }; return [item, null, cursor2 + 4]; } -function extractISOOffset(match4, cursor2) { - const local = !match4[cursor2] && !match4[cursor2 + 1], fullOffset = signedOffset(match4[cursor2 + 1], match4[cursor2 + 2]), zone = local ? null : FixedOffsetZone.instance(fullOffset); +function extractISOOffset(match3, cursor2) { + const local = !match3[cursor2] && !match3[cursor2 + 1], fullOffset = signedOffset(match3[cursor2 + 1], match3[cursor2 + 2]), zone = local ? null : FixedOffsetZone.instance(fullOffset); return [{}, zone, cursor2 + 3]; } -function extractIANAZone(match4, cursor2) { - const zone = match4[cursor2] ? IANAZone.create(match4[cursor2]) : null; +function extractIANAZone(match3, cursor2) { + const zone = match3[cursor2] ? IANAZone.create(match3[cursor2]) : null; return [{}, zone, cursor2 + 1]; } var isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`); var isoDuration = /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/; -function extractISODuration(match4) { +function extractISODuration(match3) { const [ s4, yearStr, @@ -8885,7 +35298,7 @@ function extractISODuration(match4) { minuteStr, secondStr, millisecondsStr - ] = match4; + ] = match3; const hasNegativePrefix = s4[0] === "-"; const negativeSeconds = secondStr && secondStr[0] === "-"; const maybeNegate = (num, force = false) => num !== void 0 && (force || num && hasNegativePrefix) ? -num : num; @@ -8921,15 +35334,14 @@ function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, hour: parseInteger(hourStr), minute: parseInteger(minuteStr) }; - if (secondStr) - result.second = parseInteger(secondStr); + if (secondStr) result.second = parseInteger(secondStr); if (weekdayStr) { result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; } return result; } var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; -function extractRFC2822(match4) { +function extractRFC2822(match3) { const [ , weekdayStr, @@ -8943,7 +35355,7 @@ function extractRFC2822(match4) { milOffset, offHourStr, offMinuteStr - ] = match4, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + ] = match3, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); let offset3; if (obsOffset) { offset3 = obsOffsets[obsOffset]; @@ -8960,12 +35372,12 @@ function preprocessRFC2822(s4) { var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/; var rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/; var ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; -function extractRFC1123Or850(match4) { - const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match4, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); +function extractRFC1123Or850(match3) { + const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match3, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); return [result, FixedOffsetZone.utcInstance]; } -function extractASCII(match4) { - const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match4, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); +function extractASCII(match3) { + const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match3, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); return [result, FixedOffsetZone.utcInstance]; } var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); @@ -9159,7 +35571,7 @@ function normalizeValues(matrix, vals) { } }, null); } -var Duration = class { +var Duration = class _Duration { /** * @private */ @@ -9182,7 +35594,7 @@ var Duration = class { * @return {Duration} */ static fromMillis(count, opts) { - return Duration.fromObject({ milliseconds: count }, opts); + return _Duration.fromObject({ milliseconds: count }, opts); } /** * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. @@ -9209,8 +35621,8 @@ var Duration = class { `Duration.fromObject: argument expected to be an object, got ${obj === null ? "null" : typeof obj}` ); } - return new Duration({ - values: normalizeObject(obj, Duration.normalizeUnit), + return new _Duration({ + values: normalizeObject(obj, _Duration.normalizeUnit), loc: Locale.fromObject(opts), conversionAccuracy: opts.conversionAccuracy }); @@ -9227,11 +35639,11 @@ var Duration = class { */ static fromDurationLike(durationLike) { if (isNumber(durationLike)) { - return Duration.fromMillis(durationLike); - } else if (Duration.isDuration(durationLike)) { + return _Duration.fromMillis(durationLike); + } else if (_Duration.isDuration(durationLike)) { return durationLike; } else if (typeof durationLike === "object") { - return Duration.fromObject(durationLike); + return _Duration.fromObject(durationLike); } else { throw new InvalidArgumentError( `Unknown duration argument ${durationLike} of type ${typeof durationLike}` @@ -9254,9 +35666,9 @@ var Duration = class { static fromISO(text2, opts) { const [parsed] = parseISODuration(text2); if (parsed) { - return Duration.fromObject(parsed, opts); + return _Duration.fromObject(parsed, opts); } else { - return Duration.invalid("unparsable", `the input "${text2}" can't be parsed as ISO 8601`); + return _Duration.invalid("unparsable", `the input "${text2}" can't be parsed as ISO 8601`); } } /** @@ -9277,9 +35689,9 @@ var Duration = class { static fromISOTime(text2, opts) { const [parsed] = parseISOTimeOnly(text2); if (parsed) { - return Duration.fromObject(parsed, opts); + return _Duration.fromObject(parsed, opts); } else { - return Duration.invalid("unparsable", `the input "${text2}" can't be parsed as ISO 8601`); + return _Duration.invalid("unparsable", `the input "${text2}" can't be parsed as ISO 8601`); } } /** @@ -9296,7 +35708,7 @@ var Duration = class { if (Settings.throwOnInvalid) { throw new InvalidDurationError(invalid); } else { - return new Duration({ invalid }); + return new _Duration({ invalid }); } } /** @@ -9323,8 +35735,7 @@ var Duration = class { millisecond: "milliseconds", milliseconds: "milliseconds" }[unit ? unit.toLowerCase() : unit]; - if (!normalized) - throw new InvalidUnitError(unit); + if (!normalized) throw new InvalidUnitError(unit); return normalized; } /** @@ -9332,8 +35743,8 @@ var Duration = class { * @param {object} o * @return {boolean} */ - static isDuration(o3) { - return o3 && o3.isLuxonDuration || false; + static isDuration(o4) { + return o4 && o4.isLuxonDuration || false; } /** * Get the locale of a Duration, such 'en-GB' @@ -9408,8 +35819,7 @@ var Duration = class { * @return {Object} */ toObject() { - if (!this.isValid) - return {}; + if (!this.isValid) return {}; return { ...this.values }; } /** @@ -9423,27 +35833,19 @@ var Duration = class { * @return {string} */ toISO() { - if (!this.isValid) - return null; + if (!this.isValid) return null; let s4 = "P"; - if (this.years !== 0) - s4 += this.years + "Y"; - if (this.months !== 0 || this.quarters !== 0) - s4 += this.months + this.quarters * 3 + "M"; - if (this.weeks !== 0) - s4 += this.weeks + "W"; - if (this.days !== 0) - s4 += this.days + "D"; + if (this.years !== 0) s4 += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s4 += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s4 += this.weeks + "W"; + if (this.days !== 0) s4 += this.days + "D"; if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s4 += "T"; - if (this.hours !== 0) - s4 += this.hours + "H"; - if (this.minutes !== 0) - s4 += this.minutes + "M"; + if (this.hours !== 0) s4 += this.hours + "H"; + if (this.minutes !== 0) s4 += this.minutes + "M"; if (this.seconds !== 0 || this.milliseconds !== 0) s4 += roundTo(this.seconds + this.milliseconds / 1e3, 3) + "S"; - if (s4 === "P") - s4 += "T0S"; + if (s4 === "P") s4 += "T0S"; return s4; } /** @@ -9463,11 +35865,9 @@ var Duration = class { * @return {string} */ toISOTime(opts = {}) { - if (!this.isValid) - return null; + if (!this.isValid) return null; const millis = this.toMillis(); - if (millis < 0 || millis >= 864e5) - return null; + if (millis < 0 || millis >= 864e5) return null; opts = { suppressMilliseconds: false, suppressSeconds: false, @@ -9523,9 +35923,8 @@ var Duration = class { * @return {Duration} */ plus(duration) { - if (!this.isValid) - return this; - const dur = Duration.fromDurationLike(duration), result = {}; + if (!this.isValid) return this; + const dur = _Duration.fromDurationLike(duration), result = {}; for (const k4 of orderedUnits) { if (hasOwnProperty(dur.values, k4) || hasOwnProperty(this.values, k4)) { result[k4] = dur.get(k4) + this.get(k4); @@ -9539,9 +35938,8 @@ var Duration = class { * @return {Duration} */ minus(duration) { - if (!this.isValid) - return this; - const dur = Duration.fromDurationLike(duration); + if (!this.isValid) return this; + const dur = _Duration.fromDurationLike(duration); return this.plus(dur.negate()); } /** @@ -9552,8 +35950,7 @@ var Duration = class { * @return {Duration} */ mapUnits(fn2) { - if (!this.isValid) - return this; + if (!this.isValid) return this; const result = {}; for (const k4 of Object.keys(this.values)) { result[k4] = asNumber(fn2(this.values[k4], k4)); @@ -9569,7 +35966,7 @@ var Duration = class { * @return {number} */ get(unit) { - return this[Duration.normalizeUnit(unit)]; + return this[_Duration.normalizeUnit(unit)]; } /** * "Set" the values of specified units. Return a newly-constructed Duration. @@ -9579,9 +35976,8 @@ var Duration = class { * @return {Duration} */ set(values) { - if (!this.isValid) - return this; - const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) }; + if (!this.isValid) return this; + const mixed = { ...this.values, ...normalizeObject(values, _Duration.normalizeUnit) }; return clone(this, { values: mixed }); } /** @@ -9614,8 +36010,7 @@ var Duration = class { * @return {Duration} */ normalize() { - if (!this.isValid) - return this; + if (!this.isValid) return this; const vals = this.toObject(); normalizeValues(this.matrix, vals); return clone(this, { values: vals }, true); @@ -9626,12 +36021,11 @@ var Duration = class { * @return {Duration} */ shiftTo(...units) { - if (!this.isValid) - return this; + if (!this.isValid) return this; if (units.length === 0) { return this; } - units = units.map((u4) => Duration.normalizeUnit(u4)); + units = units.map((u4) => _Duration.normalizeUnit(u4)); const built = {}, accumulated = {}, vals = this.toObject(); let lastUnit; for (const k4 of orderedUnits) { @@ -9670,8 +36064,7 @@ var Duration = class { * @return {Duration} */ negate() { - if (!this.isValid) - return this; + if (!this.isValid) return this; const negated = {}; for (const k4 of Object.keys(this.values)) { negated[k4] = this.values[k4] === 0 ? 0 : -this.values[k4]; @@ -9777,8 +36170,7 @@ var Duration = class { return false; } function eq(v1, v22) { - if (v1 === void 0 || v1 === 0) - return v22 === void 0 || v22 === 0; + if (v1 === void 0 || v1 === 0) return v22 === void 0 || v22 === 0; return v1 === v22; } for (const u4 of orderedUnits) { @@ -9792,21 +36184,21 @@ var Duration = class { // node_modules/luxon/src/interval.js var INVALID2 = "Invalid Interval"; -function validateStartEnd(start, end3) { +function validateStartEnd(start, end2) { if (!start || !start.isValid) { return Interval.invalid("missing or invalid start"); - } else if (!end3 || !end3.isValid) { + } else if (!end2 || !end2.isValid) { return Interval.invalid("missing or invalid end"); - } else if (end3 < start) { + } else if (end2 < start) { return Interval.invalid( "end before start", - `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end3.toISO()}` + `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end2.toISO()}` ); } else { return null; } } -var Interval = class { +var Interval = class _Interval { /** * @private */ @@ -9830,7 +36222,7 @@ var Interval = class { if (Settings.throwOnInvalid) { throw new InvalidIntervalError(invalid); } else { - return new Interval({ invalid }); + return new _Interval({ invalid }); } } /** @@ -9839,11 +36231,11 @@ var Interval = class { * @param {DateTime|Date|Object} end * @return {Interval} */ - static fromDateTimes(start, end3) { - const builtStart = friendlyDateTime(start), builtEnd = friendlyDateTime(end3); + static fromDateTimes(start, end2) { + const builtStart = friendlyDateTime(start), builtEnd = friendlyDateTime(end2); const validateError = validateStartEnd(builtStart, builtEnd); if (validateError == null) { - return new Interval({ + return new _Interval({ start: builtStart, end: builtEnd }); @@ -9859,7 +36251,7 @@ var Interval = class { */ static after(start, duration) { const dur = Duration.fromDurationLike(duration), dt = friendlyDateTime(start); - return Interval.fromDateTimes(dt, dt.plus(dur)); + return _Interval.fromDateTimes(dt, dt.plus(dur)); } /** * Create an Interval from an end DateTime and a Duration to extend backwards to. @@ -9867,9 +36259,9 @@ var Interval = class { * @param {Duration|Object|number} duration - the length of the Interval. * @return {Interval} */ - static before(end3, duration) { - const dur = Duration.fromDurationLike(duration), dt = friendlyDateTime(end3); - return Interval.fromDateTimes(dt.minus(dur), dt); + static before(end2, duration) { + const dur = Duration.fromDurationLike(duration), dt = friendlyDateTime(end2); + return _Interval.fromDateTimes(dt.minus(dur), dt); } /** * Create an Interval from an ISO 8601 string. @@ -9889,37 +36281,37 @@ var Interval = class { } catch (e4) { startIsValid = false; } - let end3, endIsValid; + let end2, endIsValid; try { - end3 = DateTime.fromISO(e3, opts); - endIsValid = end3.isValid; + end2 = DateTime.fromISO(e3, opts); + endIsValid = end2.isValid; } catch (e4) { endIsValid = false; } if (startIsValid && endIsValid) { - return Interval.fromDateTimes(start, end3); + return _Interval.fromDateTimes(start, end2); } if (startIsValid) { const dur = Duration.fromISO(e3, opts); if (dur.isValid) { - return Interval.after(start, dur); + return _Interval.after(start, dur); } } else if (endIsValid) { const dur = Duration.fromISO(s4, opts); if (dur.isValid) { - return Interval.before(end3, dur); + return _Interval.before(end2, dur); } } } - return Interval.invalid("unparsable", `the input "${text2}" can't be parsed as ISO 8601`); + return _Interval.invalid("unparsable", `the input "${text2}" can't be parsed as ISO 8601`); } /** * Check if an object is an Interval. Works across context boundaries * @param {object} o * @return {boolean} */ - static isInterval(o3) { - return o3 && o3.isLuxonInterval || false; + static isInterval(o4) { + return o4 && o4.isLuxonInterval || false; } /** * Returns the start of the Interval @@ -9972,10 +36364,9 @@ var Interval = class { * @return {number} */ count(unit = "milliseconds") { - if (!this.isValid) - return NaN; - const start = this.start.startOf(unit), end3 = this.end.startOf(unit); - return Math.floor(end3.diff(start, unit).get(unit)) + 1; + if (!this.isValid) return NaN; + const start = this.start.startOf(unit), end2 = this.end.startOf(unit); + return Math.floor(end2.diff(start, unit).get(unit)) + 1; } /** * Returns whether this Interval's start and end are both in the same unit of time @@ -9998,8 +36389,7 @@ var Interval = class { * @return {boolean} */ isAfter(dateTime) { - if (!this.isValid) - return false; + if (!this.isValid) return false; return this.s > dateTime; } /** @@ -10008,8 +36398,7 @@ var Interval = class { * @return {boolean} */ isBefore(dateTime) { - if (!this.isValid) - return false; + if (!this.isValid) return false; return this.e <= dateTime; } /** @@ -10018,8 +36407,7 @@ var Interval = class { * @return {boolean} */ contains(dateTime) { - if (!this.isValid) - return false; + if (!this.isValid) return false; return this.s <= dateTime && this.e > dateTime; } /** @@ -10029,10 +36417,9 @@ var Interval = class { * @param {DateTime} values.end - the ending DateTime * @return {Interval} */ - set({ start, end: end3 } = {}) { - if (!this.isValid) - return this; - return Interval.fromDateTimes(start || this.s, end3 || this.e); + set({ start, end: end2 } = {}) { + if (!this.isValid) return this; + return _Interval.fromDateTimes(start || this.s, end2 || this.e); } /** * Split this Interval at each of the specified DateTimes @@ -10040,14 +36427,13 @@ var Interval = class { * @return {Array} */ splitAt(...dateTimes) { - if (!this.isValid) - return []; - const sorted = dateTimes.map(friendlyDateTime).filter((d4) => this.contains(d4)).sort(), results = []; + if (!this.isValid) return []; + const sorted = dateTimes.map(friendlyDateTime).filter((d3) => this.contains(d3)).sort(), results = []; let { s: s4 } = this, i4 = 0; while (s4 < this.e) { - const added = sorted[i4] || this.e, next3 = +added > +this.e ? this.e : added; - results.push(Interval.fromDateTimes(s4, next3)); - s4 = next3; + const added = sorted[i4] || this.e, next2 = +added > +this.e ? this.e : added; + results.push(_Interval.fromDateTimes(s4, next2)); + s4 = next2; i4 += 1; } return results; @@ -10063,13 +36449,13 @@ var Interval = class { if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { return []; } - let { s: s4 } = this, idx = 1, next3; + let { s: s4 } = this, idx = 1, next2; const results = []; while (s4 < this.e) { const added = this.start.plus(dur.mapUnits((x4) => x4 * idx)); - next3 = +added > +this.e ? this.e : added; - results.push(Interval.fromDateTimes(s4, next3)); - s4 = next3; + next2 = +added > +this.e ? this.e : added; + results.push(_Interval.fromDateTimes(s4, next2)); + s4 = next2; idx += 1; } return results; @@ -10080,8 +36466,7 @@ var Interval = class { * @return {Array} */ divideEqually(numberOfParts) { - if (!this.isValid) - return []; + if (!this.isValid) return []; return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); } /** @@ -10098,8 +36483,7 @@ var Interval = class { * @return {boolean} */ abutsStart(other) { - if (!this.isValid) - return false; + if (!this.isValid) return false; return +this.e === +other.s; } /** @@ -10108,8 +36492,7 @@ var Interval = class { * @return {boolean} */ abutsEnd(other) { - if (!this.isValid) - return false; + if (!this.isValid) return false; return +other.e === +this.s; } /** @@ -10118,8 +36501,7 @@ var Interval = class { * @return {boolean} */ engulfs(other) { - if (!this.isValid) - return false; + if (!this.isValid) return false; return this.s <= other.s && this.e >= other.e; } /** @@ -10141,13 +36523,12 @@ var Interval = class { * @return {Interval} */ intersection(other) { - if (!this.isValid) - return this; + if (!this.isValid) return this; const s4 = this.s > other.s ? this.s : other.s, e3 = this.e < other.e ? this.e : other.e; if (s4 >= e3) { return null; } else { - return Interval.fromDateTimes(s4, e3); + return _Interval.fromDateTimes(s4, e3); } } /** @@ -10157,10 +36538,9 @@ var Interval = class { * @return {Interval} */ union(other) { - if (!this.isValid) - return this; + if (!this.isValid) return this; const s4 = this.s < other.s ? this.s : other.s, e3 = this.e > other.e ? this.e : other.e; - return Interval.fromDateTimes(s4, e3); + return _Interval.fromDateTimes(s4, e3); } /** * Merge an array of Intervals into a equivalent minimal set of Intervals. @@ -10169,7 +36549,7 @@ var Interval = class { * @return {Array} */ static merge(intervals) { - const [found, final] = intervals.sort((a3, b3) => a3.s - b3.s).reduce( + const [found, final] = intervals.sort((a4, b3) => a4.s - b3.s).reduce( ([sofar, current], item) => { if (!current) { return [sofar, item]; @@ -10196,19 +36576,19 @@ var Interval = class { const results = [], ends = intervals.map((i4) => [ { time: i4.s, type: "s" }, { time: i4.e, type: "e" } - ]), flattened = Array.prototype.concat(...ends), arr = flattened.sort((a3, b3) => a3.time - b3.time); + ]), flattened = Array.prototype.concat(...ends), arr = flattened.sort((a4, b3) => a4.time - b3.time); for (const i4 of arr) { currentCount += i4.type === "s" ? 1 : -1; if (currentCount === 1) { start = i4.time; } else { if (start && +start !== +i4.time) { - results.push(Interval.fromDateTimes(start, i4.time)); + results.push(_Interval.fromDateTimes(start, i4.time)); } start = null; } } - return Interval.merge(results); + return _Interval.merge(results); } /** * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. @@ -10216,15 +36596,14 @@ var Interval = class { * @return {Array} */ difference(...intervals) { - return Interval.xor([this].concat(intervals)).map((i4) => this.intersection(i4)).filter((i4) => i4 && !i4.isEmpty()); + return _Interval.xor([this].concat(intervals)).map((i4) => this.intersection(i4)).filter((i4) => i4 && !i4.isEmpty()); } /** * Returns a string representation of this Interval appropriate for debugging. * @return {string} */ toString() { - if (!this.isValid) - return INVALID2; + if (!this.isValid) return INVALID2; return `[${this.s.toISO()} \u2013 ${this.e.toISO()})`; } /** @@ -10234,8 +36613,7 @@ var Interval = class { * @return {string} */ toISO(opts) { - if (!this.isValid) - return INVALID2; + if (!this.isValid) return INVALID2; return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`; } /** @@ -10245,8 +36623,7 @@ var Interval = class { * @return {string} */ toISODate() { - if (!this.isValid) - return INVALID2; + if (!this.isValid) return INVALID2; return `${this.s.toISODate()}/${this.e.toISODate()}`; } /** @@ -10257,8 +36634,7 @@ var Interval = class { * @return {string} */ toISOTime(opts) { - if (!this.isValid) - return INVALID2; + if (!this.isValid) return INVALID2; return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`; } /** @@ -10269,8 +36645,7 @@ var Interval = class { * @return {string} */ toFormat(dateFormat, { separator = " \u2013 " } = {}) { - if (!this.isValid) - return INVALID2; + if (!this.isValid) return INVALID2; return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`; } /** @@ -10299,7 +36674,7 @@ var Interval = class { * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) */ mapEndpoints(mapFn) { - return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + return _Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); } }; @@ -10336,8 +36711,8 @@ var Info = class { * @param {string|Zone|number} [input] - the value to be converted * @return {Zone} */ - static normalizeZone(input2) { - return normalizeZone(input2, Settings.defaultZone); + static normalizeZone(input) { + return normalizeZone(input, Settings.defaultZone); } /** * Return an array of standalone month names. @@ -10451,13 +36826,13 @@ function dayDiff(earlier, later) { } function highOrderDiffs(cursor2, later, units) { const differs = [ - ["years", (a3, b3) => b3.year - a3.year], - ["quarters", (a3, b3) => b3.quarter - a3.quarter], - ["months", (a3, b3) => b3.month - a3.month + (b3.year - a3.year) * 12], + ["years", (a4, b3) => b3.year - a4.year], + ["quarters", (a4, b3) => b3.quarter - a4.quarter], + ["months", (a4, b3) => b3.month - a4.month + (b3.year - a4.year) * 12], [ "weeks", - (a3, b3) => { - const days = dayDiff(a3, b3); + (a4, b3) => { + const days = dayDiff(a4, b3); return (days - days % 7) / 7; } ], @@ -10614,10 +36989,12 @@ function unitForToken(token2, loc) { return literal(t4); } switch (t4.val) { + // era case "G": return oneOf(loc.eras("short", false), 0); case "GG": return oneOf(loc.eras("long", false), 0); + // years case "y": return intUnit(oneToSix); case "yy": @@ -10628,6 +37005,7 @@ function unitForToken(token2, loc) { return intUnit(fourToSix); case "yyyyyy": return intUnit(six); + // months case "M": return intUnit(oneOrTwo); case "MM": @@ -10644,14 +37022,17 @@ function unitForToken(token2, loc) { return oneOf(loc.months("short", false, false), 1); case "LLLL": return oneOf(loc.months("long", false, false), 1); + // dates case "d": return intUnit(oneOrTwo); case "dd": return intUnit(two); + // ordinals case "o": return intUnit(oneToThree); case "ooo": return intUnit(three); + // time case "HH": return intUnit(two); case "H": @@ -10682,16 +37063,20 @@ function unitForToken(token2, loc) { return simple(oneOrTwo); case "uuu": return intUnit(one); + // meridiem case "a": return oneOf(loc.meridiems(), 0); + // weekYear (k) case "kkkk": return intUnit(four); case "kk": return intUnit(twoToFour, untruncateYear); + // weekNumber (W) case "W": return intUnit(oneOrTwo); case "WW": return intUnit(two); + // weekdays case "E": case "c": return intUnit(one); @@ -10703,11 +37088,14 @@ function unitForToken(token2, loc) { return oneOf(loc.weekdays("short", true, false), 1); case "cccc": return oneOf(loc.weekdays("long", true, false), 1); + // offset/zone case "Z": case "ZZ": return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2); case "ZZZ": return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are case "z": return simple(/[a-z_+-/]{1,256}?/i); default: @@ -10776,11 +37164,11 @@ function tokenForPart(part, locale, formatOpts) { return void 0; } function buildRegex(units) { - const re = units.map((u4) => u4.regex).reduce((f4, r3) => `${f4}(${r3.source})`, ""); + const re = units.map((u4) => u4.regex).reduce((f4, r4) => `${f4}(${r4.source})`, ""); return [`^${re}$`, units]; } -function match(input2, regex2, handlers) { - const matches = input2.match(regex2); +function match(input, regex2, handlers) { + const matches = input.match(regex2); if (matches) { const all = {}; let matchIndex = 1; @@ -10859,12 +37247,12 @@ function dateTimeFromMatches(matches) { if (!isUndefined(matches.u)) { matches.S = parseMillis(matches.u); } - const vals = Object.keys(matches).reduce((r3, k4) => { + const vals = Object.keys(matches).reduce((r4, k4) => { const f4 = toField(k4); if (f4) { - r3[f4] = matches[k4]; + r4[f4] = matches[k4]; } - return r3; + return r4; }, {}); return [vals, zone, specificOffset]; } @@ -10885,7 +37273,7 @@ function maybeExpandMacroToken(token2, locale) { } const formatter = Formatter.create(locale, formatOpts); const parts = formatter.formatDateTimeParts(getDummyDateTime()); - const tokens = parts.map((p4) => tokenForPart(p4, locale, formatOpts)); + const tokens = parts.map((p3) => tokenForPart(p3, locale, formatOpts)); if (tokens.includes(void 0)) { return token2; } @@ -10894,22 +37282,22 @@ function maybeExpandMacroToken(token2, locale) { function expandMacroTokens(tokens, locale) { return Array.prototype.concat(...tokens.map((t4) => maybeExpandMacroToken(t4, locale))); } -function explainFromTokens(locale, input2, format) { +function explainFromTokens(locale, input, format) { const tokens = expandMacroTokens(Formatter.parseFormat(format), locale), units = tokens.map((t4) => unitForToken(t4, locale)), disqualifyingUnit = units.find((t4) => t4.invalidReason); if (disqualifyingUnit) { - return { input: input2, tokens, invalidReason: disqualifyingUnit.invalidReason }; + return { input, tokens, invalidReason: disqualifyingUnit.invalidReason }; } else { - const [regexString, handlers] = buildRegex(units), regex2 = RegExp(regexString, "i"), [rawMatches, matches] = match(input2, regex2, handlers), [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, void 0]; + const [regexString, handlers] = buildRegex(units), regex2 = RegExp(regexString, "i"), [rawMatches, matches] = match(input, regex2, handlers), [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, void 0]; if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { throw new ConflictingSpecificationError( "Can't include meridiem when specifying 24-hour format" ); } - return { input: input2, tokens, regex: regex2, rawMatches, matches, result, zone, specificOffset }; + return { input, tokens, regex: regex2, rawMatches, matches, result, zone, specificOffset }; } } -function parseFromTokens(locale, input2, format) { - const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input2, format); +function parseFromTokens(locale, input, format) { + const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format); return [result, zone, specificOffset, invalidReason]; } @@ -10923,11 +37311,11 @@ function unitOutOfRange(unit, value) { ); } function dayOfWeek(year, month, day) { - const d4 = new Date(Date.UTC(year, month - 1, day)); + const d3 = new Date(Date.UTC(year, month - 1, day)); if (year < 100 && year >= 0) { - d4.setUTCFullYear(d4.getUTCFullYear() - 1900); + d3.setUTCFullYear(d3.getUTCFullYear() - 1900); } - const js = d4.getUTCDay(); + const js = d3.getUTCDay(); return js === 0 ? 7 : js; } function computeOrdinal(year, month, day) { @@ -10984,8 +37372,7 @@ function hasInvalidWeekData(obj) { return unitOutOfRange("week", obj.week); } else if (!validWeekday) { return unitOutOfRange("weekday", obj.weekday); - } else - return false; + } else return false; } function hasInvalidOrdinalData(obj) { const validYear = isInteger(obj.year), validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); @@ -10993,8 +37380,7 @@ function hasInvalidOrdinalData(obj) { return unitOutOfRange("year", obj.year); } else if (!validOrdinal) { return unitOutOfRange("ordinal", obj.ordinal); - } else - return false; + } else return false; } function hasInvalidGregorianData(obj) { const validYear = isInteger(obj.year), validMonth = integerBetween(obj.month, 1, 12), validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); @@ -11004,8 +37390,7 @@ function hasInvalidGregorianData(obj) { return unitOutOfRange("month", obj.month); } else if (!validDay) { return unitOutOfRange("day", obj.day); - } else - return false; + } else return false; } function hasInvalidTimeData(obj) { const { hour, minute, second, millisecond } = obj; @@ -11018,8 +37403,7 @@ function hasInvalidTimeData(obj) { return unitOutOfRange("second", second); } else if (!validMillisecond) { return unitOutOfRange("millisecond", millisecond); - } else - return false; + } else return false; } // node_modules/luxon/src/datetime.js @@ -11045,13 +37429,13 @@ function clone2(inst, alts) { }; return new DateTime({ ...current, ...alts, old: current }); } -function fixOffset(localTS, o3, tz) { - let utcGuess = localTS - o3 * 60 * 1e3; +function fixOffset(localTS, o4, tz) { + let utcGuess = localTS - o4 * 60 * 1e3; const o22 = tz.offset(utcGuess); - if (o3 === o22) { - return [utcGuess, o3]; + if (o4 === o22) { + return [utcGuess, o4]; } - utcGuess -= (o22 - o3) * 60 * 1e3; + utcGuess -= (o22 - o4) * 60 * 1e3; const o32 = tz.offset(utcGuess); if (o22 === o32) { return [utcGuess, o22]; @@ -11060,22 +37444,22 @@ function fixOffset(localTS, o3, tz) { } function tsToObj(ts, offset3) { ts += offset3 * 60 * 1e3; - const d4 = new Date(ts); + const d3 = new Date(ts); return { - year: d4.getUTCFullYear(), - month: d4.getUTCMonth() + 1, - day: d4.getUTCDate(), - hour: d4.getUTCHours(), - minute: d4.getUTCMinutes(), - second: d4.getUTCSeconds(), - millisecond: d4.getUTCMilliseconds() + year: d3.getUTCFullYear(), + month: d3.getUTCMonth() + 1, + day: d3.getUTCDate(), + hour: d3.getUTCHours(), + minute: d3.getUTCMinutes(), + second: d3.getUTCSeconds(), + millisecond: d3.getUTCMilliseconds() }; } function objToTS(obj, offset3, zone) { return fixOffset(objToLocalTS(obj), offset3, zone); } function adjustTime(inst, dur) { - const oPre = inst.o, year = inst.c.year + Math.trunc(dur.years), month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, c3 = { + const oPre = inst.o, year = inst.c.year + Math.trunc(dur.years), month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, c4 = { ...inst.c, year, month, @@ -11090,13 +37474,13 @@ function adjustTime(inst, dur) { minutes: dur.minutes, seconds: dur.seconds, milliseconds: dur.milliseconds - }).as("milliseconds"), localTS = objToLocalTS(c3); - let [ts, o3] = fixOffset(localTS, oPre, inst.zone); + }).as("milliseconds"), localTS = objToLocalTS(c4); + let [ts, o4] = fixOffset(localTS, oPre, inst.zone); if (millisToAdd !== 0) { ts += millisToAdd; - o3 = inst.zone.offset(ts); + o4 = inst.zone.offset(ts); } - return { ts, o: o3 }; + return { ts, o: o4 }; } function parseDataToDateTime(parsed, parsedZone, opts, format, text2, specificOffset) { const { setZone, zone } = opts; @@ -11119,60 +37503,59 @@ function toTechFormat(dt, format, allowZ = true) { forceSimple: true }).formatDateTimeFromString(dt, format) : null; } -function toISODate(o3, extended) { - const longFormat = o3.c.year > 9999 || o3.c.year < 0; - let c3 = ""; - if (longFormat && o3.c.year >= 0) - c3 += "+"; - c3 += padStart(o3.c.year, longFormat ? 6 : 4); +function toISODate(o4, extended) { + const longFormat = o4.c.year > 9999 || o4.c.year < 0; + let c4 = ""; + if (longFormat && o4.c.year >= 0) c4 += "+"; + c4 += padStart(o4.c.year, longFormat ? 6 : 4); if (extended) { - c3 += "-"; - c3 += padStart(o3.c.month); - c3 += "-"; - c3 += padStart(o3.c.day); + c4 += "-"; + c4 += padStart(o4.c.month); + c4 += "-"; + c4 += padStart(o4.c.day); } else { - c3 += padStart(o3.c.month); - c3 += padStart(o3.c.day); + c4 += padStart(o4.c.month); + c4 += padStart(o4.c.day); } - return c3; + return c4; } -function toISOTime(o3, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone) { - let c3 = padStart(o3.c.hour); +function toISOTime(o4, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone) { + let c4 = padStart(o4.c.hour); if (extended) { - c3 += ":"; - c3 += padStart(o3.c.minute); - if (o3.c.second !== 0 || !suppressSeconds) { - c3 += ":"; + c4 += ":"; + c4 += padStart(o4.c.minute); + if (o4.c.second !== 0 || !suppressSeconds) { + c4 += ":"; } } else { - c3 += padStart(o3.c.minute); + c4 += padStart(o4.c.minute); } - if (o3.c.second !== 0 || !suppressSeconds) { - c3 += padStart(o3.c.second); - if (o3.c.millisecond !== 0 || !suppressMilliseconds) { - c3 += "."; - c3 += padStart(o3.c.millisecond, 3); + if (o4.c.second !== 0 || !suppressSeconds) { + c4 += padStart(o4.c.second); + if (o4.c.millisecond !== 0 || !suppressMilliseconds) { + c4 += "."; + c4 += padStart(o4.c.millisecond, 3); } } if (includeOffset) { - if (o3.isOffsetFixed && o3.offset === 0 && !extendedZone) { - c3 += "Z"; - } else if (o3.o < 0) { - c3 += "-"; - c3 += padStart(Math.trunc(-o3.o / 60)); - c3 += ":"; - c3 += padStart(Math.trunc(-o3.o % 60)); + if (o4.isOffsetFixed && o4.offset === 0 && !extendedZone) { + c4 += "Z"; + } else if (o4.o < 0) { + c4 += "-"; + c4 += padStart(Math.trunc(-o4.o / 60)); + c4 += ":"; + c4 += padStart(Math.trunc(-o4.o % 60)); } else { - c3 += "+"; - c3 += padStart(Math.trunc(o3.o / 60)); - c3 += ":"; - c3 += padStart(Math.trunc(o3.o % 60)); + c4 += "+"; + c4 += padStart(Math.trunc(o4.o / 60)); + c4 += ":"; + c4 += padStart(Math.trunc(o4.o % 60)); } } if (extendedZone) { - c3 += "[" + o3.zone.ianaName + "]"; + c4 += "[" + o4.zone.ianaName + "]"; } - return c3; + return c4; } var defaultUnitValues = { month: 1, @@ -11235,13 +37618,12 @@ function normalizeUnit(unit) { weekyears: "weekYear", ordinal: "ordinal" }[unit.toLowerCase()]; - if (!normalized) - throw new InvalidUnitError(unit); + if (!normalized) throw new InvalidUnitError(unit); return normalized; } function quickDT(obj, opts) { const zone = normalizeZone(opts.zone, Settings.defaultZone), loc = Locale.fromObject(opts), tsNow = Settings.now(); - let ts, o3; + let ts, o4; if (!isUndefined(obj.year)) { for (const u4 of orderedUnits2) { if (isUndefined(obj[u4])) { @@ -11253,25 +37635,24 @@ function quickDT(obj, opts) { return DateTime.invalid(invalid); } const offsetProvis = zone.offset(tsNow); - [ts, o3] = objToTS(obj, offsetProvis, zone); + [ts, o4] = objToTS(obj, offsetProvis, zone); } else { ts = tsNow; } - return new DateTime({ ts, zone, loc, o: o3 }); + return new DateTime({ ts, zone, loc, o: o4 }); } -function diffRelative(start, end3, opts) { - const round2 = isUndefined(opts.round) ? true : opts.round, format = (c3, unit) => { - c3 = roundTo(c3, round2 || opts.calendary ? 0 : 2, true); - const formatter = end3.loc.clone(opts).relFormatter(opts); - return formatter.format(c3, unit); +function diffRelative(start, end2, opts) { + const round2 = isUndefined(opts.round) ? true : opts.round, format = (c4, unit) => { + c4 = roundTo(c4, round2 || opts.calendary ? 0 : 2, true); + const formatter = end2.loc.clone(opts).relFormatter(opts); + return formatter.format(c4, unit); }, differ = (unit) => { if (opts.calendary) { - if (!end3.hasSame(start, unit)) { - return end3.startOf(unit).diff(start.startOf(unit), unit).get(unit); - } else - return 0; + if (!end2.hasSame(start, unit)) { + return end2.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; } else { - return end3.diff(start, unit).get(unit); + return end2.diff(start, unit).get(unit); } }; if (opts.unit) { @@ -11283,7 +37664,7 @@ function diffRelative(start, end3, opts) { return format(count, unit); } } - return format(start > end3 ? -0 : 0, opts.units[opts.units.length - 1]); + return format(start > end2 ? -0 : 0, opts.units[opts.units.length - 1]); } function lastOpts(argList) { let opts = {}, args; @@ -11295,7 +37676,7 @@ function lastOpts(argList) { } return [opts, args]; } -var DateTime = class { +var DateTime = class _DateTime { /** * @access private */ @@ -11303,25 +37684,25 @@ var DateTime = class { const zone = config2.zone || Settings.defaultZone; let invalid = config2.invalid || (Number.isNaN(config2.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); this.ts = isUndefined(config2.ts) ? Settings.now() : config2.ts; - let c3 = null, o3 = null; + let c4 = null, o4 = null; if (!invalid) { const unchanged = config2.old && config2.old.ts === this.ts && config2.old.zone.equals(zone); if (unchanged) { - [c3, o3] = [config2.old.c, config2.old.o]; + [c4, o4] = [config2.old.c, config2.old.o]; } else { const ot = zone.offset(this.ts); - c3 = tsToObj(this.ts, ot); - invalid = Number.isNaN(c3.year) ? new Invalid("invalid input") : null; - c3 = invalid ? null : c3; - o3 = invalid ? null : ot; + c4 = tsToObj(this.ts, ot); + invalid = Number.isNaN(c4.year) ? new Invalid("invalid input") : null; + c4 = invalid ? null : c4; + o4 = invalid ? null : ot; } } this._zone = zone; this.loc = config2.loc || Locale.create(); this.invalid = invalid; this.weekData = null; - this.c = c3; - this.o = o3; + this.c = c4; + this.o = o4; this.isLuxonDateTime = true; } // CONSTRUCT @@ -11333,7 +37714,7 @@ var DateTime = class { * @return {DateTime} */ static now() { - return new DateTime({}); + return new _DateTime({}); } /** * Create a local DateTime @@ -11399,13 +37780,13 @@ var DateTime = class { static fromJSDate(date, options2 = {}) { const ts = isDate(date) ? date.valueOf() : NaN; if (Number.isNaN(ts)) { - return DateTime.invalid("invalid input"); + return _DateTime.invalid("invalid input"); } const zoneToUse = normalizeZone(options2.zone, Settings.defaultZone); if (!zoneToUse.isValid) { - return DateTime.invalid(unsupportedZone(zoneToUse)); + return _DateTime.invalid(unsupportedZone(zoneToUse)); } - return new DateTime({ + return new _DateTime({ ts, zone: zoneToUse, loc: Locale.fromObject(options2) @@ -11427,9 +37808,9 @@ var DateTime = class { `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}` ); } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { - return DateTime.invalid("Timestamp out of range"); + return _DateTime.invalid("Timestamp out of range"); } else { - return new DateTime({ + return new _DateTime({ ts: milliseconds, zone: normalizeZone(options2.zone, Settings.defaultZone), loc: Locale.fromObject(options2) @@ -11450,7 +37831,7 @@ var DateTime = class { if (!isNumber(seconds)) { throw new InvalidArgumentError("fromSeconds requires a numerical input"); } else { - return new DateTime({ + return new _DateTime({ ts: seconds * 1e3, zone: normalizeZone(options2.zone, Settings.defaultZone), loc: Locale.fromObject(options2) @@ -11489,7 +37870,7 @@ var DateTime = class { obj = obj || {}; const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); if (!zoneToUse.isValid) { - return DateTime.invalid(unsupportedZone(zoneToUse)); + return _DateTime.invalid(unsupportedZone(zoneToUse)); } const tsNow = Settings.now(), offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow), normalized = normalizeObject(obj, normalizeUnit), containsOrdinal = !isUndefined(normalized.ordinal), containsGregorYear = !isUndefined(normalized.year), containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), containsGregor = containsGregorYear || containsGregorMD, definiteWeekDef = normalized.weekYear || normalized.weekNumber, loc = Locale.fromObject(opts); if ((containsGregor || containsOrdinal) && definiteWeekDef) { @@ -11527,16 +37908,16 @@ var DateTime = class { } const higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), invalid = higherOrderInvalid || hasInvalidTimeData(normalized); if (invalid) { - return DateTime.invalid(invalid); + return _DateTime.invalid(invalid); } - const gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse), inst = new DateTime({ + const gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse), inst = new _DateTime({ ts: tsFinal, zone: zoneToUse, o: offsetFinal, loc }); if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { - return DateTime.invalid( + return _DateTime.invalid( "mismatched weekday", `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}` ); @@ -11623,7 +38004,7 @@ var DateTime = class { defaultToEN: true }), [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text2, fmt); if (invalid) { - return DateTime.invalid(invalid); + return _DateTime.invalid(invalid); } else { return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text2, specificOffset); } @@ -11632,7 +38013,7 @@ var DateTime = class { * @deprecated use fromFormat instead */ static fromString(text2, fmt, opts = {}) { - return DateTime.fromFormat(text2, fmt, opts); + return _DateTime.fromFormat(text2, fmt, opts); } /** * Create a DateTime from a SQL date, time, or datetime @@ -11672,7 +38053,7 @@ var DateTime = class { if (Settings.throwOnInvalid) { throw new InvalidDateTimeError(invalid); } else { - return new DateTime({ invalid }); + return new _DateTime({ invalid }); } } /** @@ -11680,8 +38061,8 @@ var DateTime = class { * @param {object} o * @return {boolean} */ - static isDateTime(o3) { - return o3 && o3.isLuxonDateTime || false; + static isDateTime(o4) { + return o4 && o4.isLuxonDateTime || false; } // INFO /** @@ -12033,7 +38414,7 @@ var DateTime = class { if (zone.equals(this.zone)) { return this; } else if (!zone.isValid) { - return DateTime.invalid(unsupportedZone(zone)); + return _DateTime.invalid(unsupportedZone(zone)); } else { let newTS = this.ts; if (keepLocalTime || keepCalendarTime) { @@ -12074,8 +38455,7 @@ var DateTime = class { * @return {DateTime} */ set(values) { - if (!this.isValid) - return this; + if (!this.isValid) return this; const normalized = normalizeObject(values, normalizeUnit), settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), containsOrdinal = !isUndefined(normalized.ordinal), containsGregorYear = !isUndefined(normalized.year), containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), containsGregor = containsGregorYear || containsGregorMD, definiteWeekDef = normalized.weekYear || normalized.weekNumber; if ((containsGregor || containsOrdinal) && definiteWeekDef) { throw new ConflictingSpecificationError( @@ -12096,8 +38476,8 @@ var DateTime = class { mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); } } - const [ts, o3] = objToTS(mixed, this.o, this.zone); - return clone2(this, { ts, o: o3 }); + const [ts, o4] = objToTS(mixed, this.o, this.zone); + return clone2(this, { ts, o: o4 }); } /** * Add a period of time to this DateTime and return the resulting DateTime @@ -12113,8 +38493,7 @@ var DateTime = class { * @return {DateTime} */ plus(duration) { - if (!this.isValid) - return this; + if (!this.isValid) return this; const dur = Duration.fromDurationLike(duration); return clone2(this, adjustTime(this, dur)); } @@ -12125,8 +38504,7 @@ var DateTime = class { @return {DateTime} */ minus(duration) { - if (!this.isValid) - return this; + if (!this.isValid) return this; const dur = Duration.fromDurationLike(duration).negate(); return clone2(this, adjustTime(this, dur)); } @@ -12141,36 +38519,40 @@ var DateTime = class { * @return {DateTime} */ startOf(unit) { - if (!this.isValid) - return this; - const o3 = {}, normalizedUnit = Duration.normalizeUnit(unit); + if (!this.isValid) return this; + const o4 = {}, normalizedUnit = Duration.normalizeUnit(unit); switch (normalizedUnit) { case "years": - o3.month = 1; + o4.month = 1; + // falls through case "quarters": case "months": - o3.day = 1; + o4.day = 1; + // falls through case "weeks": case "days": - o3.hour = 0; + o4.hour = 0; + // falls through case "hours": - o3.minute = 0; + o4.minute = 0; + // falls through case "minutes": - o3.second = 0; + o4.second = 0; + // falls through case "seconds": - o3.millisecond = 0; + o4.millisecond = 0; break; case "milliseconds": break; } if (normalizedUnit === "weeks") { - o3.weekday = 1; + o4.weekday = 1; } if (normalizedUnit === "quarters") { const q4 = Math.ceil(this.month / 3); - o3.month = (q4 - 1) * 3 + 1; + o4.month = (q4 - 1) * 3 + 1; } - return this.set(o3); + return this.set(o4); } /** * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time @@ -12264,10 +38646,10 @@ var DateTime = class { return null; } const ext = format === "extended"; - let c3 = toISODate(this, ext); - c3 += "T"; - c3 += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone); - return c3; + let c4 = toISODate(this, ext); + c4 += "T"; + c4 += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone); + return c4; } /** * Returns an ISO 8601-compliant string representation of this DateTime's date component @@ -12317,8 +38699,8 @@ var DateTime = class { if (!this.isValid) { return null; } - let c3 = includePrefix ? "T" : ""; - return c3 + toISOTime( + let c4 = includePrefix ? "T" : ""; + return c4 + toISOTime( this, format === "extended", suppressSeconds, @@ -12459,8 +38841,7 @@ var DateTime = class { * @return {Object} */ toObject(opts = {}) { - if (!this.isValid) - return {}; + if (!this.isValid) return {}; const base = { ...this.c }; if (opts.includeConfig) { base.outputCalendar = this.outputCalendar; @@ -12509,7 +38890,7 @@ var DateTime = class { * @return {Duration} */ diffNow(unit = "milliseconds", opts = {}) { - return this.diff(DateTime.now(), unit, opts); + return this.diff(_DateTime.now(), unit, opts); } /** * Return an Interval spanning between this DateTime and another DateTime @@ -12529,8 +38910,7 @@ var DateTime = class { * @return {boolean} */ hasSame(otherDateTime, unit) { - if (!this.isValid) - return false; + if (!this.isValid) return false; const inputMs = otherDateTime.valueOf(); const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true }); return adjustedToZone.startOf(unit) <= inputMs && inputMs <= adjustedToZone.endOf(unit); @@ -12564,9 +38944,8 @@ var DateTime = class { * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" */ toRelative(options2 = {}) { - if (!this.isValid) - return null; - const base = options2.base || DateTime.fromObject({}, { zone: this.zone }), padding = options2.padding ? this < base ? -options2.padding : options2.padding : 0; + if (!this.isValid) return null; + const base = options2.base || _DateTime.fromObject({}, { zone: this.zone }), padding = options2.padding ? this < base ? -options2.padding : options2.padding : 0; let units = ["years", "months", "days", "hours", "minutes", "seconds"]; let unit = options2.unit; if (Array.isArray(options2.unit)) { @@ -12594,9 +38973,8 @@ var DateTime = class { * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" */ toRelativeCalendar(options2 = {}) { - if (!this.isValid) - return null; - return diffRelative(options2.base || DateTime.fromObject({}, { zone: this.zone }), this, { + if (!this.isValid) return null; + return diffRelative(options2.base || _DateTime.fromObject({}, { zone: this.zone }), this, { ...options2, numeric: "auto", units: ["years", "months", "days"], @@ -12609,7 +38987,7 @@ var DateTime = class { * @return {DateTime} the min DateTime, or undefined if called with no argument */ static min(...dateTimes) { - if (!dateTimes.every(DateTime.isDateTime)) { + if (!dateTimes.every(_DateTime.isDateTime)) { throw new InvalidArgumentError("min requires all arguments be DateTimes"); } return bestBy(dateTimes, (i4) => i4.valueOf(), Math.min); @@ -12620,7 +38998,7 @@ var DateTime = class { * @return {DateTime} the max DateTime, or undefined if called with no argument */ static max(...dateTimes) { - if (!dateTimes.every(DateTime.isDateTime)) { + if (!dateTimes.every(_DateTime.isDateTime)) { throw new InvalidArgumentError("max requires all arguments be DateTimes"); } return bestBy(dateTimes, (i4) => i4.valueOf(), Math.max); @@ -12645,7 +39023,7 @@ var DateTime = class { * @deprecated use fromFormatExplain instead */ static fromStringExplain(text2, fmt, options2 = {}) { - return DateTime.fromFormatExplain(text2, fmt, options2); + return _DateTime.fromFormatExplain(text2, fmt, options2); } // FORMAT PRESETS /** @@ -12821,22 +39199,14 @@ function friendlyDateTime(dateTimeish) { var VERSION = "2.5.2"; // src/utils/normalizers.ts -var P = __toESM(require_parsimmon_umd_min()); - -// node_modules/emoji-regex/index.mjs -var emoji_regex_default = () => { - return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; -}; - -// src/utils/normalizers.ts +var P = __toESM(require_parsimmon()); +var import_emoji_regex = __toESM(require_emoji_regex()); function currentLocale() { - if (typeof window === "undefined") - return "en-US"; + if (typeof window === "undefined") return "en-US"; return window.navigator.language; } function normalizeDuration(dur) { - if (dur === void 0 || dur === null) - return dur; + if (dur === void 0 || dur === null) return dur; return dur.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds").normalize(); } function renderMinimalDate(time, dateFormat, dateTimeFormat, locale) { @@ -12848,34 +39218,23 @@ function renderMinimalDate(time, dateFormat, dateTimeFormat, locale) { function renderMinimalDuration(dur) { dur = normalizeDuration(dur); let result = ""; - if (dur.years) - result += `${dur.years} years, `; - if (dur.months) - result += `${dur.months} months, `; - if (dur.weeks) - result += `${dur.weeks} weeks, `; - if (dur.days) - result += `${dur.days} days, `; - if (dur.hours) - result += `${dur.hours} hours, `; - if (dur.minutes) - result += `${dur.minutes} minutes, `; - if (dur.seconds) - result += `${Math.round(dur.seconds)} seconds, `; - if (dur.milliseconds) - result += `${Math.round(dur.milliseconds)} ms, `; - if (result.endsWith(", ")) - result = result.substring(0, result.length - 2); + if (dur.years) result += `${dur.years} years, `; + if (dur.months) result += `${dur.months} months, `; + if (dur.weeks) result += `${dur.weeks} weeks, `; + if (dur.days) result += `${dur.days} days, `; + if (dur.hours) result += `${dur.hours} hours, `; + if (dur.minutes) result += `${dur.minutes} minutes, `; + if (dur.seconds) result += `${Math.round(dur.seconds)} seconds, `; + if (dur.milliseconds) result += `${Math.round(dur.milliseconds)} ms, `; + if (result.endsWith(", ")) result = result.substring(0, result.length - 2); return result; } function getParentFolder(path) { return path.split("/").slice(0, -1).join("/"); } function getFileTitle(path) { - if (path.includes("/")) - path = path.substring(path.lastIndexOf("/") + 1); - if (path.endsWith(".md")) - path = path.substring(0, path.length - 3); + if (path.includes("/")) path = path.substring(path.lastIndexOf("/") + 1); + if (path.endsWith(".md")) path = path.substring(0, path.length - 3); return path; } function extractSubtags(tags) { @@ -12893,7 +39252,7 @@ function escapeRegex(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } var HEADER_CANONICALIZER = P.alt( - P.regex(new RegExp(emoji_regex_default(), "")), + P.regex(new RegExp((0, import_emoji_regex.default)(), "")), P.regex(/[0-9\p{Letter}_-]+/u), P.whitespace.map((_3) => " "), P.any.map((_3) => " ") @@ -12903,37 +39262,30 @@ var HEADER_CANONICALIZER = P.alt( function normalizeHeaderForLink(header) { return HEADER_CANONICALIZER.tryParse(header); } -function lineReplace(text2, start, end3, func) { - const [data, offset3] = lineSpan(text2, start, end3); - if (!offset3) - return text2; +function lineReplace(text2, start, end2, func) { + const [data, offset3] = lineSpan(text2, start, end2); + if (!offset3) return text2; return data.substring(0, offset3.start) + func(data.substring(offset3.start, offset3.end)) + data.substring(offset3.end); } -function lineSpan(text2, start, end3) { +function lineSpan(text2, start, end2) { start = Math.max(start, 0); - end3 = Math.max(end3, 0); - if (start >= end3) - return ["", void 0]; + end2 = Math.max(end2, 0); + if (start >= end2) return ["", void 0]; const startOffset = skipNewlines(text2, 0, start); - if (startOffset == -1) - return ["", void 0]; - const endOffset = skipNewlines(text2, startOffset, end3 - start); - if (endOffset == -1) - return [text2.substring(startOffset), { start: startOffset, end: text2.length }]; - else - return [text2.substring(startOffset, endOffset - 1), { start: startOffset, end: endOffset - 1 }]; + if (startOffset == -1) return ["", void 0]; + const endOffset = skipNewlines(text2, startOffset, end2 - start); + if (endOffset == -1) return [text2.substring(startOffset), { start: startOffset, end: text2.length }]; + else return [text2.substring(startOffset, endOffset - 1), { start: startOffset, end: endOffset - 1 }]; } -function lineRange(text2, start, end3) { - return lineSpan(text2, start, end3)[0]; +function lineRange(text2, start, end2) { + return lineSpan(text2, start, end2)[0]; } function skipNewlines(text2, start, count) { - if (count == 0) - return start; + if (count == 0) return start; let position2 = start; while (count > 0) { position2 = text2.indexOf("\n", position2); - if (position2 == -1) - return -1; + if (position2 == -1) return -1; count--; position2 += 1; } @@ -12941,10 +39293,10 @@ function skipNewlines(text2, start, count) { } // src/expression/link.ts -var Link = class { +var Link = class _Link { /** Create a link to a specific file. */ static file(path, embed = false, display) { - return new Link({ + return new _Link({ path, embed, display, @@ -12956,16 +39308,15 @@ var Link = class { static infer(linkpath, embed = false, display) { if (linkpath.includes("#^")) { let split = linkpath.split("#^"); - return Link.block(split[0], split[1], embed, display); + return _Link.block(split[0], split[1], embed, display); } else if (linkpath.includes("#")) { let split = linkpath.split("#"); - return Link.header(split[0], split[1], embed, display); - } else - return Link.file(linkpath, embed, display); + return _Link.header(split[0], split[1], embed, display); + } else return _Link.file(linkpath, embed, display); } /** Create a link to a specific file and header in that file. */ static header(path, header, embed, display) { - return new Link({ + return new _Link({ path, embed, display, @@ -12975,7 +39326,7 @@ var Link = class { } /** Create a link to a specific file and block in that file. */ static block(path, blockId, embed, display) { - return new Link({ + return new _Link({ path, embed, display, @@ -12985,42 +39336,40 @@ var Link = class { } /** Load a link from it's raw JSON representation. */ static fromObject(object) { - return new Link(object); + return new _Link(object); } /** Create a link by parsing it's interior part (inside of the '[[]]'). */ static parseInner(rawlink) { let [link, display] = splitOnUnescapedPipe(rawlink); - return Link.infer(link, false, display); + return _Link.infer(link, false, display); } constructor(fields) { Object.assign(this, fields); } /** Update this link with a new path. */ withPath(path) { - return new Link(Object.assign({}, this, { path })); + return new _Link(Object.assign({}, this, { path })); } /** Return a new link which points to the same location but with a new display value. */ withDisplay(display) { - return new Link(Object.assign({}, this, { display })); + return new _Link(Object.assign({}, this, { display })); } /** Return a new link which has the given embedded status. */ withEmbed(embed) { - if (this.embed == embed) - return this; - return new Link(Object.assign({}, this, { embed })); + if (this.embed == embed) return this; + return new _Link(Object.assign({}, this, { embed })); } /** Convert a file link into a link to a specific header. */ withHeader(header) { - return Link.header(this.path, header, this.embed, this.display); + return _Link.header(this.path, header, this.embed, this.display); } /** Convert a file link into a link to a specificb lock. */ withBlock(block) { - return Link.block(this.path, block, this.embed, this.display); + return _Link.block(this.path, block, this.embed, this.display); } /** Checks for link equality (i.e., that the links are pointing to the same exact location). */ equals(other) { - if (other == void 0 || other == null) - return false; + if (other == void 0 || other == null) return false; return this.path == other.path && this.type == other.type && this.subpath == other.subpath; } /** Convert this link to it's markdown representation. */ @@ -13039,7 +39388,7 @@ var Link = class { } /** Convert any link into a link to its file. */ toFile() { - return Link.file(this.path, this.embed, this.display); + return _Link.file(this.path, this.embed, this.display); } /** Convert this link into an embedded link. */ toEmbed() { @@ -13063,8 +39412,7 @@ var Link = class { return this.display; } else { let result = getFileTitle(this.path); - if (this.type == "header" || this.type == "block") - result += " > " + this.subpath; + if (this.type == "header" || this.type == "block") result += " > " + this.subpath; return result; } } @@ -13072,12 +39420,9 @@ var Link = class { obsidianLink() { var _a, _b; const escaped = this.path.replace("|", "\\|"); - if (this.type == "header") - return escaped + "#" + ((_a = this.subpath) == null ? void 0 : _a.replace("|", "\\|")); - if (this.type == "block") - return escaped + "#^" + ((_b = this.subpath) == null ? void 0 : _b.replace("|", "\\|")); - else - return escaped; + if (this.type == "header") return escaped + "#" + ((_a = this.subpath) == null ? void 0 : _a.replace("|", "\\|")); + if (this.type == "block") return escaped + "#^" + ((_b = this.subpath) == null ? void 0 : _b.replace("|", "\\|")); + else return escaped; } /** The stripped name of the file this link points to. */ fileName() { @@ -13087,15 +39432,14 @@ var Link = class { function splitOnUnescapedPipe(link) { let pipe = -1; while ((pipe = link.indexOf("|", pipe + 1)) >= 0) { - if (pipe > 0 && link[pipe - 1] == "\\") - continue; + if (pipe > 0 && link[pipe - 1] == "\\") continue; return [link.substring(0, pipe).replace(/\\\|/g, "|"), link.substring(pipe + 1)]; } return [link.replace(/\\\|/g, "|"), void 0]; } // src/expression/parser.ts -var P2 = __toESM(require_parsimmon_umd_min()); +var P2 = __toESM(require_parsimmon()); // src/expression/literal.ts var Literals; @@ -13107,8 +39451,7 @@ var Literals; }; function toString(field, setting = Literals2.DEFAULT_TO_STRING, recursive = false) { let wrapped = wrapValue(field); - if (!wrapped) - return setting.nullRepresentation; + if (!wrapped) return setting.nullRepresentation; switch (wrapped.type) { case "null": return setting.nullRepresentation; @@ -13123,11 +39466,9 @@ var Literals; return ""; case "array": let result = ""; - if (recursive) - result += "["; + if (recursive) result += "["; result += wrapped.value.map((f4) => toString(f4, setting, true)).join(", "); - if (recursive) - result += "]"; + if (recursive) result += "]"; return result; case "object": return "{ " + Object.entries(wrapped.value).map((e3) => e3[0] + ": " + toString(e3[1], setting, true)).join(", ") + " }"; @@ -13139,40 +39480,27 @@ var Literals; } Literals2.toString = toString; function wrapValue(val) { - if (isNull(val)) - return { type: "null", value: val }; - else if (isNumber2(val)) - return { type: "number", value: val }; - else if (isString2(val)) - return { type: "string", value: val }; - else if (isBoolean(val)) - return { type: "boolean", value: val }; - else if (isDuration(val)) - return { type: "duration", value: val }; - else if (isDate2(val)) - return { type: "date", value: val }; - else if (isArray2(val)) - return { type: "array", value: val }; - else if (isLink(val)) - return { type: "link", value: val }; - else if (isFunction(val)) - return { type: "function", value: val }; - else if (isObject(val)) - return { type: "object", value: val }; - else - return void 0; + if (isNull(val)) return { type: "null", value: val }; + else if (isNumber2(val)) return { type: "number", value: val }; + else if (isString2(val)) return { type: "string", value: val }; + else if (isBoolean(val)) return { type: "boolean", value: val }; + else if (isDuration(val)) return { type: "duration", value: val }; + else if (isDate2(val)) return { type: "date", value: val }; + else if (isArray2(val)) return { type: "array", value: val }; + else if (isLink(val)) return { type: "link", value: val }; + else if (isFunction(val)) return { type: "function", value: val }; + else if (isObject(val)) return { type: "object", value: val }; + else return void 0; } Literals2.wrapValue = wrapValue; function mapLeaves(val, func) { if (isObject(val)) { let result = {}; - for (let [key, value] of Object.entries(val)) - result[key] = mapLeaves(value, func); + for (let [key, value] of Object.entries(val)) result[key] = mapLeaves(value, func); return result; } else if (isArray2(val)) { let result = []; - for (let value of val) - result.push(mapLeaves(value, func)); + for (let value of val) result.push(mapLeaves(value, func)); return result; } else { return func(val); @@ -13185,62 +39513,42 @@ var Literals; Literals2.equals = equals; function compare(val1, val2, linkNormalizer) { var _a, _b; - if (val1 === val2) - return 0; - if (val1 === void 0) - val1 = null; - if (val2 === void 0) - val2 = null; - if (val1 === null && val2 === null) - return 0; - else if (val1 === null) - return -1; - else if (val2 === null) - return 1; + if (val1 === val2) return 0; + if (val1 === void 0) val1 = null; + if (val2 === void 0) val2 = null; + if (val1 === null && val2 === null) return 0; + else if (val1 === null) return -1; + else if (val2 === null) return 1; let wrap1 = wrapValue(val1); let wrap2 = wrapValue(val2); - if (wrap1 === void 0 && wrap2 === void 0) - return 0; - else if (wrap1 === void 0) - return -1; - else if (wrap2 === void 0) - return 1; - if (wrap1.type != wrap2.type) - return wrap1.type.localeCompare(wrap2.type); - if (wrap1.value === wrap2.value) - return 0; + if (wrap1 === void 0 && wrap2 === void 0) return 0; + else if (wrap1 === void 0) return -1; + else if (wrap2 === void 0) return 1; + if (wrap1.type != wrap2.type) return wrap1.type.localeCompare(wrap2.type); + if (wrap1.value === wrap2.value) return 0; switch (wrap1.type) { case "string": return wrap1.value.localeCompare(wrap2.value); case "number": - if (wrap1.value < wrap2.value) - return -1; - else if (wrap1.value == wrap2.value) - return 0; + if (wrap1.value < wrap2.value) return -1; + else if (wrap1.value == wrap2.value) return 0; return 1; case "null": return 0; case "boolean": - if (wrap1.value == wrap2.value) - return 0; - else - return wrap1.value ? 1 : -1; + if (wrap1.value == wrap2.value) return 0; + else return wrap1.value ? 1 : -1; case "link": let link1 = wrap1.value; let link2 = wrap2.value; let normalize = linkNormalizer != null ? linkNormalizer : (x4) => x4; let pathCompare = normalize(link1.path).localeCompare(normalize(link2.path)); - if (pathCompare != 0) - return pathCompare; + if (pathCompare != 0) return pathCompare; let typeCompare = link1.type.localeCompare(link2.type); - if (typeCompare != 0) - return typeCompare; - if (link1.subpath && !link2.subpath) - return 1; - if (!link1.subpath && link2.subpath) - return -1; - if (!link1.subpath && !link2.subpath) - return 0; + if (typeCompare != 0) return typeCompare; + if (link1.subpath && !link2.subpath) return 1; + if (!link1.subpath && link2.subpath) return -1; + if (!link1.subpath && !link2.subpath) return 0; return ((_a = link1.subpath) != null ? _a : "").localeCompare((_b = link2.subpath) != null ? _b : ""); case "date": return wrap1.value < wrap2.value ? -1 : wrap1.value.equals(wrap2.value) ? 0 : 1; @@ -13249,10 +39557,9 @@ var Literals; case "array": let f1 = wrap1.value; let f22 = wrap2.value; - for (let index2 = 0; index2 < Math.min(f1.length, f22.length); index2++) { - let comp = compare(f1[index2], f22[index2]); - if (comp != 0) - return comp; + for (let index = 0; index < Math.min(f1.length, f22.length); index++) { + let comp = compare(f1[index], f22[index]); + if (comp != 0) return comp; } return f1.length - f22.length; case "object": @@ -13263,12 +39570,10 @@ var Literals; k1.sort(); k22.sort(); let keyCompare = compare(k1, k22); - if (keyCompare != 0) - return keyCompare; + if (keyCompare != 0) return keyCompare; for (let key of k1) { let comp = compare(o1[key], o22[key]); - if (comp != 0) - return comp; + if (comp != 0) return comp; } return 0; case "function": @@ -13283,8 +39588,7 @@ var Literals; Literals2.typeOf = typeOf; function isTruthy(field) { let wrapped = wrapValue(field); - if (!wrapped) - return false; + if (!wrapped) return false; switch (wrapped.type) { case "number": return wrapped.value != 0; @@ -13310,14 +39614,12 @@ var Literals; } Literals2.isTruthy = isTruthy; function deepCopy(field) { - if (field === null || field === void 0) - return field; + if (field === null || field === void 0) return field; if (Literals2.isArray(field)) { return [].concat(field.map((v3) => deepCopy(v3))); } else if (Literals2.isObject(field)) { let result = {}; - for (let [key, value] of Object.entries(field)) - result[key] = deepCopy(value); + for (let [key, value] of Object.entries(field)) result[key] = deepCopy(value); return result; } else { return field; @@ -13372,16 +39674,12 @@ var Groupings; } Groupings2.isElementGroup = isElementGroup; function isGrouping(entry) { - for (let element of entry) - if (!isElementGroup(element)) - return false; + for (let element of entry) if (!isElementGroup(element)) return false; return true; } Groupings2.isGrouping = isGrouping; function isLeaf(entry) { - for (let element of entry) - if (isElementGroup(element)) - return false; + for (let element of entry) if (isElementGroup(element)) return false; return true; } Groupings2.isLeaf = isLeaf; @@ -13390,38 +39688,34 @@ var Groupings; return count(elements.rows); } else if (isGrouping(elements)) { let result = 0; - for (let subgroup of elements) - result += count(subgroup.rows); + for (let subgroup of elements) result += count(subgroup.rows); return result; } else { return elements.length; } } Groupings2.count = count; - function slice2(elements, start, end3) { - if (end3 <= start) - return []; - if (isLeaf(elements)) - return elements.slice(start, end3); - let index2 = 0, seen = 0; - while (index2 < elements.length && seen + count(elements[index2]) <= start) { - seen += count(elements[index2]); - index2++; + function slice2(elements, start, end2) { + if (end2 <= start) return []; + if (isLeaf(elements)) return elements.slice(start, end2); + let index = 0, seen = 0; + while (index < elements.length && seen + count(elements[index]) <= start) { + seen += count(elements[index]); + index++; } - if (index2 >= elements.length) - return []; + if (index >= elements.length) return []; const result = []; - while (index2 < elements.length && seen < end3) { - const group = elements[index2]; + while (index < elements.length && seen < end2) { + const group = elements[index]; const groupSize = count(group); const groupStart = Math.max(seen, start); - const groupEnd = Math.min(groupSize + seen, end3); + const groupEnd = Math.min(groupSize + seen, end2); result.push({ key: group.key, rows: slice2(group.rows, groupStart - seen, groupEnd - seen) }); seen += groupSize; - index2++; + index++; } return result; } @@ -13429,13 +39723,13 @@ var Groupings; })(Groupings || (Groupings = {})); // src/api/result.ts -var Success = class { +var Success = class _Success { constructor(value) { this.value = value; this.successful = true; } map(f4) { - return new Success(f4(this.value)); + return new _Success(f4(this.value)); } flatMap(f4) { return f4(this.value); @@ -13456,7 +39750,7 @@ var Success = class { return this.value; } }; -var Failure = class { +var Failure = class _Failure { constructor(error) { this.error = error; this.successful = false; @@ -13468,7 +39762,7 @@ var Failure = class { return this; } mapErr(f4) { - return new Failure(f4(this.error)); + return new _Failure(f4(this.error)); } bimap(_succ, fail) { return this.mapErr(fail); @@ -13480,10 +39774,8 @@ var Failure = class { return this; } orElseThrow(message) { - if (message) - throw new Error(message(this.error)); - else - throw new Error("" + this.error); + if (message) throw new Error(message(this.error)); + else throw new Error("" + this.error); } }; var Result; @@ -13498,25 +39790,22 @@ var Result; Result2.failure = failure; function flatMap2(first, second, f4) { if (first.successful) { - if (second.successful) - return f4(first.value, second.value); - else - return failure(second.error); + if (second.successful) return f4(first.value, second.value); + else return failure(second.error); } else { return failure(first.error); } } Result2.flatMap2 = flatMap2; function map2(first, second, f4) { - return flatMap2(first, second, (a3, b3) => success(f4(a3, b3))); + return flatMap2(first, second, (a4, b3) => success(f4(a4, b3))); } Result2.map2 = map2; - function mapAll(input2, func) { + function mapAll(input, func) { const result = []; - for (const element of input2) { + for (const element of input) { const output = func(element); - if (!output.successful) - return output.cast(); + if (!output.successful) return output.cast(); result.push(output.value); } return Result2.success(result); @@ -13546,27 +39835,23 @@ var Filters; Filters2.EVERYTHING = { type: "everything" }; Filters2.NOTHING = { type: "nothing" }; Filters2.EMPTY_SET = /* @__PURE__ */ new Set(); - function atom(set2) { - if (set2.size == 0) - return Filters2.NOTHING; - return { type: "atom", value: set2 }; + function atom(set) { + if (set.size == 0) return Filters2.NOTHING; + return { type: "atom", value: set }; } Filters2.atom = atom; function constant(value) { - if (value) - return Filters2.EVERYTHING; - else - return Filters2.NOTHING; + if (value) return Filters2.EVERYTHING; + else return Filters2.NOTHING; } Filters2.constant = constant; - function nullableAtom(set2) { - return set2 !== void 0 ? atom(set2) : Filters2.NOTHING; + function nullableAtom(set) { + return set !== void 0 ? atom(set) : Filters2.NOTHING; } Filters2.nullableAtom = nullableAtom; - function negated(set2) { - if (set2.size == 0) - return Filters2.EVERYTHING; - return { type: "negated", value: set2 }; + function negated(set) { + if (set.size == 0) return Filters2.EVERYTHING; + return { type: "negated", value: set }; } Filters2.negated = negated; function negate(filter) { @@ -13621,19 +39906,13 @@ var Filters; const negations = []; for (let element of elements) { const maybeFilter = produce(element); - if (!maybeFilter.successful) - return maybeFilter.cast(); + if (!maybeFilter.successful) return maybeFilter.cast(); const filter = maybeFilter.value; - if (filter === void 0) - continue; - if (empty(filter)) - return Result.success(Filters2.NOTHING); - if (filter.type === "everything") - continue; - if (filter.type == "atom") - atoms.push(filter.value); - else if (filter.type == "negated") - negations.push(filter.value); + if (filter === void 0) continue; + if (empty(filter)) return Result.success(Filters2.NOTHING); + if (filter.type === "everything") continue; + if (filter.type == "atom") atoms.push(filter.value); + else if (filter.type == "negated") negations.push(filter.value); } if (atoms.length == 0 && negations.length == 0) { return Result.success(Filters2.EVERYTHING); @@ -13646,10 +39925,10 @@ var Filters; } } Filters2.lazyFailableIntersection = lazyFailableIntersection; - function union2(filters) { + function union(filters) { return lazyUnion(filters, (x4) => x4); } - Filters2.union = union2; + Filters2.union = union; function lazyUnion(elements, produce) { return lazyFailableUnion(elements, (x4) => Result.success(produce(x4))).orElseThrow(); } @@ -13659,19 +39938,13 @@ var Filters; const negations = []; for (let element of elements) { const maybeFilter = produce(element); - if (!maybeFilter.successful) - return maybeFilter.cast(); + if (!maybeFilter.successful) return maybeFilter.cast(); const filter = maybeFilter.value; - if (filter === void 0) - continue; - if (filter.type === "everything") - return Result.success(Filters2.EVERYTHING); - if (empty(filter)) - continue; - if (filter.type == "atom") - atoms.push(filter.value); - else if (filter.type == "negated") - negations.push(filter.value); + if (filter === void 0) continue; + if (filter.type === "everything") return Result.success(Filters2.EVERYTHING); + if (empty(filter)) continue; + if (filter.type == "atom") atoms.push(filter.value); + else if (filter.type == "negated") negations.push(filter.value); } if (atoms.length == 0 && negations.length == 0) { return Result.success(Filters2.NOTHING); @@ -13685,17 +39958,14 @@ var Filters; } Filters2.lazyFailableUnion = lazyFailableUnion; function setIntersect(sets) { - if (sets.length == 0) - return /* @__PURE__ */ new Set(); - else if (sets.length == 1) - return sets[0]; - let sorted = [].concat(sets).sort((a3, b3) => a3.size - b3.size); + if (sets.length == 0) return /* @__PURE__ */ new Set(); + else if (sets.length == 1) return sets[0]; + let sorted = [].concat(sets).sort((a4, b3) => a4.size - b3.size); while (sorted.length > 1) { const result = /* @__PURE__ */ new Set(); const largest = sorted.pop(); for (let element of sorted[0]) { - if (largest.has(element)) - result.add(element); + if (largest.has(element)) result.add(element); } sorted[0] = result; } @@ -13703,13 +39973,11 @@ var Filters; } Filters2.setIntersect = setIntersect; function setUnion(sets) { - if (sets.length == 0) - return /* @__PURE__ */ new Set(); - else if (sets.length == 1) - return sets[0]; + if (sets.length == 0) return /* @__PURE__ */ new Set(); + else if (sets.length == 1) return sets[0]; const result = /* @__PURE__ */ new Set(); - for (const set2 of sets) { - for (const element of set2) { + for (const set of sets) { + for (const element of set) { result.add(element); } } @@ -13726,8 +39994,7 @@ var Filters; } else { const result = /* @__PURE__ */ new Set(); for (let element of atom2) { - if (negated2.has(element)) - continue; + if (negated2.has(element)) continue; result.add(element); } return result; @@ -13752,15 +40019,15 @@ var Expressions; return { type: "binaryop", left, op, right }; } Expressions2.binaryOp = binaryOp; - function index2(obj, index3) { - return { type: "binaryop", left: obj, right: index3, op: "index" }; + function index(obj, index2) { + return { type: "binaryop", left: obj, right: index2, op: "index" }; } - Expressions2.index = index2; + Expressions2.index = index; function indexVariable(name) { let parts = name.split("."); let result = Expressions2.variable(parts[0]); - for (let index3 = 1; index3 < parts.length; index3++) { - result = Expressions2.index(result, Expressions2.literal(parts[index3])); + for (let index2 = 1; index2 < parts.length; index2++) { + result = Expressions2.index(result, Expressions2.literal(parts[index2])); } return result; } @@ -13793,18 +40060,15 @@ var Expressions; switch (expr.type) { case "binaryop": if (expr.op === "index" && expr.left.type == "variable" && expr.left.name == Expressions2.ROW && expr.right.type == "literal" && Literals.isString(expr.right.value)) { - if (bound.has(expr.right.value)) - return /* @__PURE__ */ new Set(); - else - return /* @__PURE__ */ new Set([expr.right.value]); + if (bound.has(expr.right.value)) return /* @__PURE__ */ new Set(); + else return /* @__PURE__ */ new Set([expr.right.value]); } return Filters.setUnion([unboundVariables(expr.left, bound), unboundVariables(expr.right, bound)]); case "function": - return Filters.setUnion(expr.arguments.map((a3) => unboundVariables(a3, bound))); + return Filters.setUnion(expr.arguments.map((a4) => unboundVariables(a4, bound))); case "lambda": const newBound = bound != null ? bound : /* @__PURE__ */ new Set(); - for (const arg of expr.arguments) - newBound.add(arg); + for (const arg of expr.arguments) newBound.add(arg); return unboundVariables(expr.value, newBound); case "list": return Filters.setUnion(expr.values.map((v3) => unboundVariables(v3, bound))); @@ -13813,10 +40077,8 @@ var Expressions; case "object": return Filters.setUnion(Object.values(expr.values).map((v3) => unboundVariables(v3, bound))); case "variable": - if (bound && bound.has(expr.name)) - return /* @__PURE__ */ new Set(); - else - return /* @__PURE__ */ new Set([expr.name]); + if (bound && bound.has(expr.name)) return /* @__PURE__ */ new Set(); + else return /* @__PURE__ */ new Set([expr.name]); case "literal": return /* @__PURE__ */ new Set(); } @@ -13843,8 +40105,7 @@ var Expressions; return expr.name; case "literal": const wrapped = Literals.wrapValue(expr.value); - if (!wrapped) - return "null"; + if (!wrapped) return "null"; switch (wrapped.type) { case "string": return `"${wrapped.value}"`; @@ -13858,6 +40119,7 @@ var Expressions; })(Expressions || (Expressions = {})); // src/expression/parser.ts +var import_emoji_regex2 = __toESM(require_emoji_regex()); var PRIMITIVES = P2.createLanguage({ number: (_3) => P2.regexp(/-?[0-9]+(\.[0-9]+)?/).map((str) => Number.parseFloat(str)).desc("number"), // A quote-surrounded string which supports escape characters ('\'). @@ -13865,12 +40127,9 @@ var PRIMITIVES = P2.createLanguage({ P2.alt(q4.escapeCharacter, P2.noneOf('"\\')).atLeast(0).map((chars) => chars.join("")) ).skip(P2.string('"')).desc("string"), escapeCharacter: (_3) => P2.string("\\").then(P2.any).map((escaped) => { - if (escaped === '"') - return '"'; - if (escaped === "\\") - return "\\"; - else - return "\\" + escaped; + if (escaped === '"') return '"'; + if (escaped === "\\") return "\\"; + else return "\\" + escaped; }), // A boolean true/false value. bool: (_3) => P2.regexp(/true|false|True|False/).map((str) => str.toLowerCase() == "true").desc("boolean"), @@ -13890,9 +40149,8 @@ var PRIMITIVES = P2.createLanguage({ link: (_3) => P2.regexp(/\[\[([^\[\]]*?)\]\]/u, 1).map((linkInner) => Link.parseInner(linkInner)).desc("file link"), // An embeddable link which can start with '!'. This overlaps with the normal negation operator, so it is only // provided for metadata parsing. - embedLink: (q4) => P2.seqMap(P2.string("!").atMost(1), q4.link, (p4, l4) => { - if (p4.length > 0) - l4.embed = true; + embedLink: (q4) => P2.seqMap(P2.string("!").atMost(1), q4.link, (p3, l4) => { + if (p3.length > 0) l4.embed = true; return l4; }).desc("file link"), // Binary plus or minus operator. @@ -13909,7 +40167,7 @@ var PRIMITIVES = P2.createLanguage({ return DateTime.fromObject({ year: Number.parseInt(year), month: Number.parseInt(month) }); }).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), dateShorthand: (_3) => P2.alt( - ...Object.keys(DATE_SHORTHANDS).sort((a3, b3) => b3.length - a3.length).map(P2.string) + ...Object.keys(DATE_SHORTHANDS).sort((a4, b3) => b3.length - a4.length).map(P2.string) ), date: (q4) => chainOpt( q4.rootDate, @@ -13951,25 +40209,25 @@ var PRIMITIVES = P2.createLanguage({ ).assert((dt) => dt.isValid, "valid date").desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), // A date, plus various shorthand times of day it could be. datePlus: (q4) => P2.alt( - q4.dateShorthand.map((d4) => DATE_SHORTHANDS[d4]()), + q4.dateShorthand.map((d3) => DATE_SHORTHANDS[d3]()), q4.date ).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"), // A duration of time. durationType: (_3) => P2.alt( - ...Object.keys(DURATION_TYPES).sort((a3, b3) => b3.length - a3.length).map(P2.string) + ...Object.keys(DURATION_TYPES).sort((a4, b3) => b3.length - a4.length).map(P2.string) ), duration: (q4) => P2.seqMap( q4.number, P2.optWhitespace, q4.durationType, (count, _3, t4) => DURATION_TYPES[t4].mapUnits((x4) => x4 * count) - ).sepBy1(P2.string(",").trim(P2.optWhitespace).or(P2.optWhitespace)).map((durations) => durations.reduce((p4, c3) => p4.plus(c3))).desc("duration like 4hr2min"), + ).sepBy1(P2.string(",").trim(P2.optWhitespace).or(P2.optWhitespace)).map((durations) => durations.reduce((p3, c4) => p3.plus(c4))).desc("duration like 4hr2min"), // A raw null value. rawNull: (_3) => P2.string("null"), // Inline field value parsing. atomInlineField: (q4) => P2.alt( q4.date, - q4.duration.map((d4) => normalizeDuration(d4)), + q4.duration.map((d3) => normalizeDuration(d3)), q4.string, q4.tag, q4.embedLink, @@ -13988,7 +40246,7 @@ var PRIMITIVES = P2.createLanguage({ q4.atomInlineField ) }); -var EMOJI_REGEX = new RegExp(emoji_regex_default(), ""); +var EMOJI_REGEX = new RegExp((0, import_emoji_regex2.default)(), ""); var DURATION_TYPES = { year: Duration.fromObject({ years: 1 }), years: Duration.fromObject({ years: 1 }), @@ -14060,8 +40318,7 @@ var EXPRESSION = P2.createLanguage({ } ).sepBy(P2.string(",").trim(P2.optWhitespace)).wrap(P2.string("{").skip(P2.optWhitespace), P2.optWhitespace.then(P2.string("}"))).map((vals) => { let res = {}; - for (let entry of vals) - res[entry.name] = entry.value; + for (let entry of vals) res[entry.name] = entry.value; return Expressions.object(res); }).desc("object ('{ a: 1, b: 2 }')"), atom: (q4) => P2.alt( @@ -14210,11 +40467,10 @@ var QUERY = P2.createLanguage({ }); function createBinaryParser(child, sep, combine2) { return P2.seqMap(child, P2.seq(P2.optWhitespace, sep, P2.optWhitespace, child).many(), (first, rest) => { - if (rest.length == 0) - return first; + if (rest.length == 0) return first; let node2 = combine2(first, rest[0][1], rest[0][3]); - for (let index2 = 1; index2 < rest.length; index2++) { - node2 = combine2(node2, rest[index2][1], rest[index2][3]); + for (let index = 1; index < rest.length; index++) { + node2 = combine2(node2, rest[index][1], rest[index][3]); } return node2; }); @@ -14224,20 +40480,18 @@ function createFunction(func, args) { return P2.seqMap( realFunc.skip(P2.optWhitespace), args.trim(P2.optWhitespace).wrap(P2.string("("), P2.string(")")), - (f4, a3) => [f4, a3] + (f4, a4) => [f4, a4] ); } function chainOpt(base, ...funcs) { return P2.custom((_success, _failure) => { - return (input2, i4) => { - let result = base._(input2, i4); - if (!result.status) - return result; + return (input, i4) => { + let result = base._(input, i4); + if (!result.status) return result; for (let func of funcs) { - let next3 = func(result.value)._(input2, result.index); - if (!next3.status) - return result; - result = next3; + let next2 = func(result.value)._(input, result.index); + if (!next2.status) return result; + result = next2; } return result; }; @@ -14269,38 +40523,34 @@ var IMAGE_EXTENSIONS = Object.freeze( ]) ); function isImageEmbed(link) { - if (!link.path.contains(".")) - return false; + if (!link.path.contains(".")) return false; let extension = link.path.substring(link.path.lastIndexOf(".")); return link.type == "file" && link.embed && IMAGE_EXTENSIONS.has(extension); } function extractImageDimensions(link) { - if (!link.display) - return void 0; - let match4 = /^(\d+)x(\d+)$/iu.exec(link.display); - if (match4) - return [parseInt(match4[1]), parseInt(match4[2])]; + if (!link.display) return void 0; + let match3 = /^(\d+)x(\d+)$/iu.exec(link.display); + if (match3) return [parseInt(match3[1]), parseInt(match3[2])]; let match22 = /^(\d+)/.exec(link.display); - if (match22) - return [parseInt(match22[1])]; + if (match22) return [parseInt(match22[1])]; return void 0; } -// node_modules/preact/dist/preact.module.js -var preact_module_exports = {}; -__export(preact_module_exports, { - Component: () => w, - Fragment: () => m, +// node_modules/preact/dist/preact.mjs +var preact_exports = {}; +__export(preact_exports, { + Component: () => k, + Fragment: () => b, cloneElement: () => E, createContext: () => G, - createElement: () => g, - createRef: () => b, - h: () => g, + createElement: () => _, + createRef: () => m, + h: () => _, hydrate: () => D, isValidElement: () => t, options: () => l2, render: () => B, - toChildArray: () => T + toChildArray: () => H }); var n2; var l2; @@ -14319,201 +40569,165 @@ var v = []; var p = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; var y = Array.isArray; function d(n3, l4) { - for (var u4 in l4) - n3[u4] = l4[u4]; + for (var u4 in l4) n3[u4] = l4[u4]; return n3; } -function _(n3) { - var l4 = n3.parentNode; - l4 && l4.removeChild(n3); +function w(n3) { + n3 && n3.parentNode && n3.parentNode.removeChild(n3); } -function g(l4, u4, t4) { - var i4, o3, r3, f4 = {}; - for (r3 in u4) - "key" == r3 ? i4 = u4[r3] : "ref" == r3 ? o3 = u4[r3] : f4[r3] = u4[r3]; - if (arguments.length > 2 && (f4.children = arguments.length > 3 ? n2.call(arguments, 2) : t4), "function" == typeof l4 && null != l4.defaultProps) - for (r3 in l4.defaultProps) - void 0 === f4[r3] && (f4[r3] = l4.defaultProps[r3]); - return k(l4, f4, i4, o3, null); +function _(l4, u4, t4) { + var i4, o4, r4, f4 = {}; + for (r4 in u4) "key" == r4 ? i4 = u4[r4] : "ref" == r4 ? o4 = u4[r4] : f4[r4] = u4[r4]; + if (arguments.length > 2 && (f4.children = arguments.length > 3 ? n2.call(arguments, 2) : t4), "function" == typeof l4 && null != l4.defaultProps) for (r4 in l4.defaultProps) void 0 === f4[r4] && (f4[r4] = l4.defaultProps[r4]); + return g(l4, f4, i4, o4, null); } -function k(n3, t4, i4, o3, r3) { - var f4 = { type: n3, props: t4, key: i4, ref: o3, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: null == r3 ? ++u : r3, __i: -1, __u: 0 }; - return null == r3 && null != l2.vnode && l2.vnode(f4), f4; +function g(n3, t4, i4, o4, r4) { + var f4 = { type: n3, props: t4, key: i4, ref: o4, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: null == r4 ? ++u : r4, __i: -1, __u: 0 }; + return null == r4 && null != l2.vnode && l2.vnode(f4), f4; } -function b() { +function m() { return { current: null }; } -function m(n3) { +function b(n3) { return n3.children; } -function w(n3, l4) { +function k(n3, l4) { this.props = n3, this.context = l4; } -function C(n3, l4) { - if (null == l4) - return n3.__ ? C(n3.__, n3.__i + 1) : null; - for (var u4; l4 < n3.__k.length; l4++) - if (null != (u4 = n3.__k[l4]) && null != u4.__e) - return u4.__e; - return "function" == typeof n3.type ? C(n3) : null; +function x(n3, l4) { + if (null == l4) return n3.__ ? x(n3.__, n3.__i + 1) : null; + for (var u4; l4 < n3.__k.length; l4++) if (null != (u4 = n3.__k[l4]) && null != u4.__e) return u4.__e; + return "function" == typeof n3.type ? x(n3) : null; } -function x(n3) { +function C(n3) { var l4, u4; if (null != (n3 = n3.__) && null != n3.__c) { - for (n3.__e = n3.__c.base = null, l4 = 0; l4 < n3.__k.length; l4++) - if (null != (u4 = n3.__k[l4]) && null != u4.__e) { - n3.__e = n3.__c.base = u4.__e; - break; - } - return x(n3); + for (n3.__e = n3.__c.base = null, l4 = 0; l4 < n3.__k.length; l4++) if (null != (u4 = n3.__k[l4]) && null != u4.__e) { + n3.__e = n3.__c.base = u4.__e; + break; + } + return C(n3); } } -function P3(n3) { - (!n3.__d && (n3.__d = true) && i.push(n3) && !S.__r++ || o !== l2.debounceRendering) && ((o = l2.debounceRendering) || r)(S); +function S(n3) { + (!n3.__d && (n3.__d = true) && i.push(n3) && !M.__r++ || o !== l2.debounceRendering) && ((o = l2.debounceRendering) || r)(M); } -function S() { - var n3, u4, t4, o3, r3, e3, c3, s4; - for (i.sort(f); n3 = i.shift(); ) - n3.__d && (u4 = i.length, o3 = void 0, e3 = (r3 = (t4 = n3).__v).__e, c3 = [], s4 = [], t4.__P && ((o3 = d({}, r3)).__v = r3.__v + 1, l2.vnode && l2.vnode(o3), O(t4.__P, o3, r3, t4.__n, void 0 !== t4.__P.ownerSVGElement, 32 & r3.__u ? [e3] : null, c3, null == e3 ? C(r3) : e3, !!(32 & r3.__u), s4), o3.__v = r3.__v, o3.__.__k[o3.__i] = o3, j(c3, o3, s4), o3.__e != e3 && x(o3)), i.length > u4 && i.sort(f)); - S.__r = 0; +function M() { + var n3, u4, t4, o4, r4, e3, c4, s4; + for (i.sort(f); n3 = i.shift(); ) n3.__d && (u4 = i.length, o4 = void 0, e3 = (r4 = (t4 = n3).__v).__e, c4 = [], s4 = [], t4.__P && ((o4 = d({}, r4)).__v = r4.__v + 1, l2.vnode && l2.vnode(o4), O(t4.__P, o4, r4, t4.__n, t4.__P.namespaceURI, 32 & r4.__u ? [e3] : null, c4, null == e3 ? x(r4) : e3, !!(32 & r4.__u), s4), o4.__v = r4.__v, o4.__.__k[o4.__i] = o4, j(c4, o4, s4), o4.__e != e3 && C(o4)), i.length > u4 && i.sort(f)); + M.__r = 0; } -function $(n3, l4, u4, t4, i4, o3, r3, f4, e3, c3, s4) { - var a3, p4, y3, d4, _3, g4 = t4 && t4.__k || v, k4 = l4.length; - for (u4.__d = e3, I(u4, l4, g4), e3 = u4.__d, a3 = 0; a3 < k4; a3++) - null != (y3 = u4.__k[a3]) && "boolean" != typeof y3 && "function" != typeof y3 && (p4 = -1 === y3.__i ? h : g4[y3.__i] || h, y3.__i = a3, O(n3, y3, p4, i4, o3, r3, f4, e3, c3, s4), d4 = y3.__e, y3.ref && p4.ref != y3.ref && (p4.ref && N(p4.ref, null, y3), s4.push(y3.ref, y3.__c || d4, y3)), null == _3 && null != d4 && (_3 = d4), 65536 & y3.__u || p4.__k === y3.__k ? (e3 && !e3.isConnected && (e3 = C(p4)), e3 = H(y3, e3, n3)) : "function" == typeof y3.type && void 0 !== y3.__d ? e3 = y3.__d : d4 && (e3 = d4.nextSibling), y3.__d = void 0, y3.__u &= -196609); - u4.__d = e3, u4.__e = _3; +function P3(n3, l4, u4, t4, i4, o4, r4, f4, e3, c4, s4) { + var a4, p3, y4, d3, w5, _3 = t4 && t4.__k || v, g4 = l4.length; + for (u4.__d = e3, $(u4, l4, _3), e3 = u4.__d, a4 = 0; a4 < g4; a4++) null != (y4 = u4.__k[a4]) && (p3 = -1 === y4.__i ? h : _3[y4.__i] || h, y4.__i = a4, O(n3, y4, p3, i4, o4, r4, f4, e3, c4, s4), d3 = y4.__e, y4.ref && p3.ref != y4.ref && (p3.ref && N(p3.ref, null, y4), s4.push(y4.ref, y4.__c || d3, y4)), null == w5 && null != d3 && (w5 = d3), 65536 & y4.__u || p3.__k === y4.__k ? e3 = I(y4, e3, n3) : "function" == typeof y4.type && void 0 !== y4.__d ? e3 = y4.__d : d3 && (e3 = d3.nextSibling), y4.__d = void 0, y4.__u &= -196609); + u4.__d = e3, u4.__e = w5; +} +function $(n3, l4, u4) { + var t4, i4, o4, r4, f4, e3 = l4.length, c4 = u4.length, s4 = c4, a4 = 0; + for (n3.__k = [], t4 = 0; t4 < e3; t4++) null != (i4 = l4[t4]) && "boolean" != typeof i4 && "function" != typeof i4 ? (r4 = t4 + a4, (i4 = n3.__k[t4] = "string" == typeof i4 || "number" == typeof i4 || "bigint" == typeof i4 || i4.constructor == String ? g(null, i4, null, null, null) : y(i4) ? g(b, { children: i4 }, null, null, null) : void 0 === i4.constructor && i4.__b > 0 ? g(i4.type, i4.props, i4.key, i4.ref ? i4.ref : null, i4.__v) : i4).__ = n3, i4.__b = n3.__b + 1, o4 = null, -1 !== (f4 = i4.__i = L(i4, u4, r4, s4)) && (s4--, (o4 = u4[f4]) && (o4.__u |= 131072)), null == o4 || null === o4.__v ? (-1 == f4 && a4--, "function" != typeof i4.type && (i4.__u |= 65536)) : f4 !== r4 && (f4 == r4 - 1 ? a4-- : f4 == r4 + 1 ? a4++ : (f4 > r4 ? a4-- : a4++, i4.__u |= 65536))) : i4 = n3.__k[t4] = null; + if (s4) for (t4 = 0; t4 < c4; t4++) null != (o4 = u4[t4]) && 0 == (131072 & o4.__u) && (o4.__e == n3.__d && (n3.__d = x(o4)), V(o4, o4)); } function I(n3, l4, u4) { - var t4, i4, o3, r3, f4, e3 = l4.length, c3 = u4.length, s4 = c3, a3 = 0; - for (n3.__k = [], t4 = 0; t4 < e3; t4++) - r3 = t4 + a3, null != (i4 = n3.__k[t4] = null == (i4 = l4[t4]) || "boolean" == typeof i4 || "function" == typeof i4 ? null : "string" == typeof i4 || "number" == typeof i4 || "bigint" == typeof i4 || i4.constructor == String ? k(null, i4, null, null, null) : y(i4) ? k(m, { children: i4 }, null, null, null) : void 0 === i4.constructor && i4.__b > 0 ? k(i4.type, i4.props, i4.key, i4.ref ? i4.ref : null, i4.__v) : i4) ? (i4.__ = n3, i4.__b = n3.__b + 1, f4 = A(i4, u4, r3, s4), i4.__i = f4, o3 = null, -1 !== f4 && (s4--, (o3 = u4[f4]) && (o3.__u |= 131072)), null == o3 || null === o3.__v ? (-1 == f4 && a3--, "function" != typeof i4.type && (i4.__u |= 65536)) : f4 !== r3 && (f4 === r3 + 1 ? a3++ : f4 > r3 ? s4 > e3 - r3 ? a3 += f4 - r3 : a3-- : f4 < r3 ? f4 == r3 - 1 && (a3 = f4 - r3) : a3 = 0, f4 !== t4 + a3 && (i4.__u |= 65536))) : (o3 = u4[r3]) && null == o3.key && o3.__e && 0 == (131072 & o3.__u) && (o3.__e == n3.__d && (n3.__d = C(o3)), V(o3, o3, false), u4[r3] = null, s4--); - if (s4) - for (t4 = 0; t4 < c3; t4++) - null != (o3 = u4[t4]) && 0 == (131072 & o3.__u) && (o3.__e == n3.__d && (n3.__d = C(o3)), V(o3, o3)); -} -function H(n3, l4, u4) { var t4, i4; if ("function" == typeof n3.type) { - for (t4 = n3.__k, i4 = 0; t4 && i4 < t4.length; i4++) - t4[i4] && (t4[i4].__ = n3, l4 = H(t4[i4], l4, u4)); + for (t4 = n3.__k, i4 = 0; t4 && i4 < t4.length; i4++) t4[i4] && (t4[i4].__ = n3, l4 = I(t4[i4], l4, u4)); return l4; } - n3.__e != l4 && (u4.insertBefore(n3.__e, l4 || null), l4 = n3.__e); + n3.__e != l4 && (l4 && n3.type && !u4.contains(l4) && (l4 = x(n3)), u4.insertBefore(n3.__e, l4 || null), l4 = n3.__e); do { l4 = l4 && l4.nextSibling; } while (null != l4 && 8 === l4.nodeType); return l4; } -function T(n3, l4) { +function H(n3, l4) { return l4 = l4 || [], null == n3 || "boolean" == typeof n3 || (y(n3) ? n3.some(function(n4) { - T(n4, l4); + H(n4, l4); }) : l4.push(n3)), l4; } -function A(n3, l4, u4, t4) { - var i4 = n3.key, o3 = n3.type, r3 = u4 - 1, f4 = u4 + 1, e3 = l4[u4]; - if (null === e3 || e3 && i4 == e3.key && o3 === e3.type && 0 == (131072 & e3.__u)) - return u4; - if (t4 > (null != e3 && 0 == (131072 & e3.__u) ? 1 : 0)) - for (; r3 >= 0 || f4 < l4.length; ) { - if (r3 >= 0) { - if ((e3 = l4[r3]) && 0 == (131072 & e3.__u) && i4 == e3.key && o3 === e3.type) - return r3; - r3--; - } - if (f4 < l4.length) { - if ((e3 = l4[f4]) && 0 == (131072 & e3.__u) && i4 == e3.key && o3 === e3.type) - return f4; - f4++; - } +function L(n3, l4, u4, t4) { + var i4 = n3.key, o4 = n3.type, r4 = u4 - 1, f4 = u4 + 1, e3 = l4[u4]; + if (null === e3 || e3 && i4 == e3.key && o4 === e3.type && 0 == (131072 & e3.__u)) return u4; + if (t4 > (null != e3 && 0 == (131072 & e3.__u) ? 1 : 0)) for (; r4 >= 0 || f4 < l4.length; ) { + if (r4 >= 0) { + if ((e3 = l4[r4]) && 0 == (131072 & e3.__u) && i4 == e3.key && o4 === e3.type) return r4; + r4--; } + if (f4 < l4.length) { + if ((e3 = l4[f4]) && 0 == (131072 & e3.__u) && i4 == e3.key && o4 === e3.type) return f4; + f4++; + } + } return -1; } -function F(n3, l4, u4) { +function T(n3, l4, u4) { "-" === l4[0] ? n3.setProperty(l4, null == u4 ? "" : u4) : n3[l4] = null == u4 ? "" : "number" != typeof u4 || p.test(l4) ? u4 : u4 + "px"; } -function L(n3, l4, u4, t4, i4) { - var o3; - n: - if ("style" === l4) - if ("string" == typeof u4) - n3.style.cssText = u4; - else { - if ("string" == typeof t4 && (n3.style.cssText = t4 = ""), t4) - for (l4 in t4) - u4 && l4 in u4 || F(n3.style, l4, ""); - if (u4) - for (l4 in u4) - t4 && u4[l4] === t4[l4] || F(n3.style, l4, u4[l4]); - } - else if ("o" === l4[0] && "n" === l4[1]) - o3 = l4 !== (l4 = l4.replace(/(PointerCapture)$|Capture$/i, "$1")), l4 = l4.toLowerCase() in n3 || "onFocusOut" === l4 || "onFocusIn" === l4 ? l4.toLowerCase().slice(2) : l4.slice(2), n3.l || (n3.l = {}), n3.l[l4 + o3] = u4, u4 ? t4 ? u4.u = t4.u : (u4.u = e, n3.addEventListener(l4, o3 ? s2 : c, o3)) : n3.removeEventListener(l4, o3 ? s2 : c, o3); - else { - if (i4) - l4 = l4.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); - else if ("width" != l4 && "height" != l4 && "href" != l4 && "list" != l4 && "form" != l4 && "tabIndex" != l4 && "download" != l4 && "rowSpan" != l4 && "colSpan" != l4 && "role" != l4 && l4 in n3) - try { - n3[l4] = null == u4 ? "" : u4; - break n; - } catch (n4) { - } - "function" == typeof u4 || (null == u4 || false === u4 && "-" !== l4[4] ? n3.removeAttribute(l4) : n3.setAttribute(l4, u4)); +function A(n3, l4, u4, t4, i4) { + var o4; + n: if ("style" === l4) if ("string" == typeof u4) n3.style.cssText = u4; + else { + if ("string" == typeof t4 && (n3.style.cssText = t4 = ""), t4) for (l4 in t4) u4 && l4 in u4 || T(n3.style, l4, ""); + if (u4) for (l4 in u4) t4 && u4[l4] === t4[l4] || T(n3.style, l4, u4[l4]); + } + else if ("o" === l4[0] && "n" === l4[1]) o4 = l4 !== (l4 = l4.replace(/(PointerCapture)$|Capture$/i, "$1")), l4 = l4.toLowerCase() in n3 || "onFocusOut" === l4 || "onFocusIn" === l4 ? l4.toLowerCase().slice(2) : l4.slice(2), n3.l || (n3.l = {}), n3.l[l4 + o4] = u4, u4 ? t4 ? u4.u = t4.u : (u4.u = e, n3.addEventListener(l4, o4 ? s2 : c, o4)) : n3.removeEventListener(l4, o4 ? s2 : c, o4); + else { + if ("http://www.w3.org/2000/svg" == i4) l4 = l4.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); + else if ("width" != l4 && "height" != l4 && "href" != l4 && "list" != l4 && "form" != l4 && "tabIndex" != l4 && "download" != l4 && "rowSpan" != l4 && "colSpan" != l4 && "role" != l4 && "popover" != l4 && l4 in n3) try { + n3[l4] = null == u4 ? "" : u4; + break n; + } catch (n4) { } + "function" == typeof u4 || (null == u4 || false === u4 && "-" !== l4[4] ? n3.removeAttribute(l4) : n3.setAttribute(l4, "popover" == l4 && 1 == u4 ? "" : u4)); + } } -function M(n3) { +function F(n3) { return function(u4) { if (this.l) { var t4 = this.l[u4.type + n3]; - if (null == u4.t) - u4.t = e++; - else if (u4.t < t4.u) - return; + if (null == u4.t) u4.t = e++; + else if (u4.t < t4.u) return; return t4(l2.event ? l2.event(u4) : u4); } }; } -function O(n3, u4, t4, i4, o3, r3, f4, e3, c3, s4) { - var a3, h3, v3, p4, _3, g4, k4, b3, C4, x4, P7, S2, I3, H3, T4, A4 = u4.type; - if (void 0 !== u4.constructor) - return null; - 128 & t4.__u && (c3 = !!(32 & t4.__u), r3 = [e3 = u4.__e = t4.__e]), (a3 = l2.__b) && a3(u4); - n: - if ("function" == typeof A4) - try { - if (b3 = u4.props, C4 = (a3 = A4.contextType) && i4[a3.__c], x4 = a3 ? C4 ? C4.props.value : a3.__ : i4, t4.__c ? k4 = (h3 = u4.__c = t4.__c).__ = h3.__E : ("prototype" in A4 && A4.prototype.render ? u4.__c = h3 = new A4(b3, x4) : (u4.__c = h3 = new w(b3, x4), h3.constructor = A4, h3.render = q), C4 && C4.sub(h3), h3.props = b3, h3.state || (h3.state = {}), h3.context = x4, h3.__n = i4, v3 = h3.__d = true, h3.__h = [], h3._sb = []), null == h3.__s && (h3.__s = h3.state), null != A4.getDerivedStateFromProps && (h3.__s == h3.state && (h3.__s = d({}, h3.__s)), d(h3.__s, A4.getDerivedStateFromProps(b3, h3.__s))), p4 = h3.props, _3 = h3.state, h3.__v = u4, v3) - null == A4.getDerivedStateFromProps && null != h3.componentWillMount && h3.componentWillMount(), null != h3.componentDidMount && h3.__h.push(h3.componentDidMount); - else { - if (null == A4.getDerivedStateFromProps && b3 !== p4 && null != h3.componentWillReceiveProps && h3.componentWillReceiveProps(b3, x4), !h3.__e && (null != h3.shouldComponentUpdate && false === h3.shouldComponentUpdate(b3, h3.__s, x4) || u4.__v === t4.__v)) { - for (u4.__v !== t4.__v && (h3.props = b3, h3.state = h3.__s, h3.__d = false), u4.__e = t4.__e, u4.__k = t4.__k, u4.__k.forEach(function(n4) { - n4 && (n4.__ = u4); - }), P7 = 0; P7 < h3._sb.length; P7++) - h3.__h.push(h3._sb[P7]); - h3._sb = [], h3.__h.length && f4.push(h3); - break n; - } - null != h3.componentWillUpdate && h3.componentWillUpdate(b3, h3.__s, x4), null != h3.componentDidUpdate && h3.__h.push(function() { - h3.componentDidUpdate(p4, _3, g4); - }); - } - if (h3.context = x4, h3.props = b3, h3.__P = n3, h3.__e = false, S2 = l2.__r, I3 = 0, "prototype" in A4 && A4.prototype.render) { - for (h3.state = h3.__s, h3.__d = false, S2 && S2(u4), a3 = h3.render(h3.props, h3.state, h3.context), H3 = 0; H3 < h3._sb.length; H3++) - h3.__h.push(h3._sb[H3]); - h3._sb = []; - } else - do { - h3.__d = false, S2 && S2(u4), a3 = h3.render(h3.props, h3.state, h3.context), h3.state = h3.__s; - } while (h3.__d && ++I3 < 25); - h3.state = h3.__s, null != h3.getChildContext && (i4 = d(d({}, i4), h3.getChildContext())), v3 || null == h3.getSnapshotBeforeUpdate || (g4 = h3.getSnapshotBeforeUpdate(p4, _3)), $(n3, y(T4 = null != a3 && a3.type === m && null == a3.key ? a3.props.children : a3) ? T4 : [T4], u4, t4, i4, o3, r3, f4, e3, c3, s4), h3.base = u4.__e, u4.__u &= -161, h3.__h.length && f4.push(h3), k4 && (h3.__E = h3.__ = null); - } catch (n4) { - u4.__v = null, c3 || null != r3 ? (u4.__e = e3, u4.__u |= c3 ? 160 : 32, r3[r3.indexOf(e3)] = null) : (u4.__e = t4.__e, u4.__k = t4.__k), l2.__e(n4, u4, t4); +function O(n3, u4, t4, i4, o4, r4, f4, e3, c4, s4) { + var a4, h3, v3, p3, w5, _3, g4, m3, x4, C4, S2, M3, $3, I3, H3, L3, T4 = u4.type; + if (void 0 !== u4.constructor) return null; + 128 & t4.__u && (c4 = !!(32 & t4.__u), r4 = [e3 = u4.__e = t4.__e]), (a4 = l2.__b) && a4(u4); + n: if ("function" == typeof T4) try { + if (m3 = u4.props, x4 = "prototype" in T4 && T4.prototype.render, C4 = (a4 = T4.contextType) && i4[a4.__c], S2 = a4 ? C4 ? C4.props.value : a4.__ : i4, t4.__c ? g4 = (h3 = u4.__c = t4.__c).__ = h3.__E : (x4 ? u4.__c = h3 = new T4(m3, S2) : (u4.__c = h3 = new k(m3, S2), h3.constructor = T4, h3.render = q), C4 && C4.sub(h3), h3.props = m3, h3.state || (h3.state = {}), h3.context = S2, h3.__n = i4, v3 = h3.__d = true, h3.__h = [], h3._sb = []), x4 && null == h3.__s && (h3.__s = h3.state), x4 && null != T4.getDerivedStateFromProps && (h3.__s == h3.state && (h3.__s = d({}, h3.__s)), d(h3.__s, T4.getDerivedStateFromProps(m3, h3.__s))), p3 = h3.props, w5 = h3.state, h3.__v = u4, v3) x4 && null == T4.getDerivedStateFromProps && null != h3.componentWillMount && h3.componentWillMount(), x4 && null != h3.componentDidMount && h3.__h.push(h3.componentDidMount); + else { + if (x4 && null == T4.getDerivedStateFromProps && m3 !== p3 && null != h3.componentWillReceiveProps && h3.componentWillReceiveProps(m3, S2), !h3.__e && (null != h3.shouldComponentUpdate && false === h3.shouldComponentUpdate(m3, h3.__s, S2) || u4.__v === t4.__v)) { + for (u4.__v !== t4.__v && (h3.props = m3, h3.state = h3.__s, h3.__d = false), u4.__e = t4.__e, u4.__k = t4.__k, u4.__k.some(function(n4) { + n4 && (n4.__ = u4); + }), M3 = 0; M3 < h3._sb.length; M3++) h3.__h.push(h3._sb[M3]); + h3._sb = [], h3.__h.length && f4.push(h3); + break n; } - else - null == r3 && u4.__v === t4.__v ? (u4.__k = t4.__k, u4.__e = t4.__e) : u4.__e = z(t4.__e, u4, t4, i4, o3, r3, f4, c3, s4); - (a3 = l2.diffed) && a3(u4); + null != h3.componentWillUpdate && h3.componentWillUpdate(m3, h3.__s, S2), x4 && null != h3.componentDidUpdate && h3.__h.push(function() { + h3.componentDidUpdate(p3, w5, _3); + }); + } + if (h3.context = S2, h3.props = m3, h3.__P = n3, h3.__e = false, $3 = l2.__r, I3 = 0, x4) { + for (h3.state = h3.__s, h3.__d = false, $3 && $3(u4), a4 = h3.render(h3.props, h3.state, h3.context), H3 = 0; H3 < h3._sb.length; H3++) h3.__h.push(h3._sb[H3]); + h3._sb = []; + } else do { + h3.__d = false, $3 && $3(u4), a4 = h3.render(h3.props, h3.state, h3.context), h3.state = h3.__s; + } while (h3.__d && ++I3 < 25); + h3.state = h3.__s, null != h3.getChildContext && (i4 = d(d({}, i4), h3.getChildContext())), x4 && !v3 && null != h3.getSnapshotBeforeUpdate && (_3 = h3.getSnapshotBeforeUpdate(p3, w5)), P3(n3, y(L3 = null != a4 && a4.type === b && null == a4.key ? a4.props.children : a4) ? L3 : [L3], u4, t4, i4, o4, r4, f4, e3, c4, s4), h3.base = u4.__e, u4.__u &= -161, h3.__h.length && f4.push(h3), g4 && (h3.__E = h3.__ = null); + } catch (n4) { + if (u4.__v = null, c4 || null != r4) { + for (u4.__u |= c4 ? 160 : 128; e3 && 8 === e3.nodeType && e3.nextSibling; ) e3 = e3.nextSibling; + r4[r4.indexOf(e3)] = null, u4.__e = e3; + } else u4.__e = t4.__e, u4.__k = t4.__k; + l2.__e(n4, u4, t4); + } + else null == r4 && u4.__v === t4.__v ? (u4.__k = t4.__k, u4.__e = t4.__e) : u4.__e = z(t4.__e, u4, t4, i4, o4, r4, f4, c4, s4); + (a4 = l2.diffed) && a4(u4); } function j(n3, u4, t4) { u4.__d = void 0; - for (var i4 = 0; i4 < t4.length; i4++) - N(t4[i4], t4[++i4], t4[++i4]); + for (var i4 = 0; i4 < t4.length; i4++) N(t4[i4], t4[++i4], t4[++i4]); l2.__c && l2.__c(u4, n3), n3.some(function(u5) { try { n3 = u5.__h, u5.__h = [], n3.some(function(n4) { @@ -14524,227 +40738,209 @@ function j(n3, u4, t4) { } }); } -function z(l4, u4, t4, i4, o3, r3, f4, e3, c3) { - var s4, a3, v3, p4, d4, g4, k4, b3 = t4.props, m3 = u4.props, w6 = u4.type; - if ("svg" === w6 && (o3 = true), null != r3) { - for (s4 = 0; s4 < r3.length; s4++) - if ((d4 = r3[s4]) && "setAttribute" in d4 == !!w6 && (w6 ? d4.localName === w6 : 3 === d4.nodeType)) { - l4 = d4, r3[s4] = null; - break; - } +function z(u4, t4, i4, o4, r4, f4, e3, c4, s4) { + var a4, v3, p3, d3, _3, g4, m3, b3 = i4.props, k4 = t4.props, C4 = t4.type; + if ("svg" === C4 ? r4 = "http://www.w3.org/2000/svg" : "math" === C4 ? r4 = "http://www.w3.org/1998/Math/MathML" : r4 || (r4 = "http://www.w3.org/1999/xhtml"), null != f4) { + for (a4 = 0; a4 < f4.length; a4++) if ((_3 = f4[a4]) && "setAttribute" in _3 == !!C4 && (C4 ? _3.localName === C4 : 3 === _3.nodeType)) { + u4 = _3, f4[a4] = null; + break; + } } - if (null == l4) { - if (null === w6) - return document.createTextNode(m3); - l4 = o3 ? document.createElementNS("http://www.w3.org/2000/svg", w6) : document.createElement(w6, m3.is && m3), r3 = null, e3 = false; + if (null == u4) { + if (null === C4) return document.createTextNode(k4); + u4 = document.createElementNS(r4, C4, k4.is && k4), c4 && (l2.__m && l2.__m(t4, f4), c4 = false), f4 = null; } - if (null === w6) - b3 === m3 || e3 && l4.data === m3 || (l4.data = m3); + if (null === C4) b3 === k4 || c4 && u4.data === k4 || (u4.data = k4); else { - if (r3 = r3 && n2.call(l4.childNodes), b3 = t4.props || h, !e3 && null != r3) - for (b3 = {}, s4 = 0; s4 < l4.attributes.length; s4++) - b3[(d4 = l4.attributes[s4]).name] = d4.value; - for (s4 in b3) - if (d4 = b3[s4], "children" == s4) - ; - else if ("dangerouslySetInnerHTML" == s4) - v3 = d4; - else if ("key" !== s4 && !(s4 in m3)) { - if ("value" == s4 && "defaultValue" in m3 || "checked" == s4 && "defaultChecked" in m3) - continue; - L(l4, s4, null, d4, o3); - } - for (s4 in m3) - d4 = m3[s4], "children" == s4 ? p4 = d4 : "dangerouslySetInnerHTML" == s4 ? a3 = d4 : "value" == s4 ? g4 = d4 : "checked" == s4 ? k4 = d4 : "key" === s4 || e3 && "function" != typeof d4 || b3[s4] === d4 || L(l4, s4, d4, b3[s4], o3); - if (a3) - e3 || v3 && (a3.__html === v3.__html || a3.__html === l4.innerHTML) || (l4.innerHTML = a3.__html), u4.__k = []; - else if (v3 && (l4.innerHTML = ""), $(l4, y(p4) ? p4 : [p4], u4, t4, i4, o3 && "foreignObject" !== w6, r3, f4, r3 ? r3[0] : t4.__k && C(t4, 0), e3, c3), null != r3) - for (s4 = r3.length; s4--; ) - null != r3[s4] && _(r3[s4]); - e3 || (s4 = "value", void 0 !== g4 && (g4 !== l4[s4] || "progress" === w6 && !g4 || "option" === w6 && g4 !== b3[s4]) && L(l4, s4, g4, b3[s4], false), s4 = "checked", void 0 !== k4 && k4 !== l4[s4] && L(l4, s4, k4, b3[s4], false)); + if (f4 = f4 && n2.call(u4.childNodes), b3 = i4.props || h, !c4 && null != f4) for (b3 = {}, a4 = 0; a4 < u4.attributes.length; a4++) b3[(_3 = u4.attributes[a4]).name] = _3.value; + for (a4 in b3) if (_3 = b3[a4], "children" == a4) ; + else if ("dangerouslySetInnerHTML" == a4) p3 = _3; + else if (!(a4 in k4)) { + if ("value" == a4 && "defaultValue" in k4 || "checked" == a4 && "defaultChecked" in k4) continue; + A(u4, a4, null, _3, r4); + } + for (a4 in k4) _3 = k4[a4], "children" == a4 ? d3 = _3 : "dangerouslySetInnerHTML" == a4 ? v3 = _3 : "value" == a4 ? g4 = _3 : "checked" == a4 ? m3 = _3 : c4 && "function" != typeof _3 || b3[a4] === _3 || A(u4, a4, _3, b3[a4], r4); + if (v3) c4 || p3 && (v3.__html === p3.__html || v3.__html === u4.innerHTML) || (u4.innerHTML = v3.__html), t4.__k = []; + else if (p3 && (u4.innerHTML = ""), P3(u4, y(d3) ? d3 : [d3], t4, i4, o4, "foreignObject" === C4 ? "http://www.w3.org/1999/xhtml" : r4, f4, e3, f4 ? f4[0] : i4.__k && x(i4, 0), c4, s4), null != f4) for (a4 = f4.length; a4--; ) w(f4[a4]); + c4 || (a4 = "value", "progress" === C4 && null == g4 ? u4.removeAttribute("value") : void 0 !== g4 && (g4 !== u4[a4] || "progress" === C4 && !g4 || "option" === C4 && g4 !== b3[a4]) && A(u4, a4, g4, b3[a4], r4), a4 = "checked", void 0 !== m3 && m3 !== u4[a4] && A(u4, a4, m3, b3[a4], r4)); } - return l4; + return u4; } function N(n3, u4, t4) { try { - "function" == typeof n3 ? n3(u4) : n3.current = u4; + if ("function" == typeof n3) { + var i4 = "function" == typeof n3.__u; + i4 && n3.__u(), i4 && null == u4 || (n3.__u = n3(u4)); + } else n3.current = u4; } catch (n4) { l2.__e(n4, t4); } } function V(n3, u4, t4) { - var i4, o3; + var i4, o4; if (l2.unmount && l2.unmount(n3), (i4 = n3.ref) && (i4.current && i4.current !== n3.__e || N(i4, null, u4)), null != (i4 = n3.__c)) { - if (i4.componentWillUnmount) - try { - i4.componentWillUnmount(); - } catch (n4) { - l2.__e(n4, u4); - } + if (i4.componentWillUnmount) try { + i4.componentWillUnmount(); + } catch (n4) { + l2.__e(n4, u4); + } i4.base = i4.__P = null; } - if (i4 = n3.__k) - for (o3 = 0; o3 < i4.length; o3++) - i4[o3] && V(i4[o3], u4, t4 || "function" != typeof n3.type); - t4 || null == n3.__e || _(n3.__e), n3.__c = n3.__ = n3.__e = n3.__d = void 0; + if (i4 = n3.__k) for (o4 = 0; o4 < i4.length; o4++) i4[o4] && V(i4[o4], u4, t4 || "function" != typeof n3.type); + t4 || w(n3.__e), n3.__c = n3.__ = n3.__e = n3.__d = void 0; } function q(n3, l4, u4) { return this.constructor(n3, u4); } function B(u4, t4, i4) { - var o3, r3, f4, e3; - l2.__ && l2.__(u4, t4), r3 = (o3 = "function" == typeof i4) ? null : i4 && i4.__k || t4.__k, f4 = [], e3 = [], O(t4, u4 = (!o3 && i4 || t4).__k = g(m, null, [u4]), r3 || h, h, void 0 !== t4.ownerSVGElement, !o3 && i4 ? [i4] : r3 ? null : t4.firstChild ? n2.call(t4.childNodes) : null, f4, !o3 && i4 ? i4 : r3 ? r3.__e : t4.firstChild, o3, e3), j(f4, u4, e3); + var o4, r4, f4, e3; + l2.__ && l2.__(u4, t4), r4 = (o4 = "function" == typeof i4) ? null : i4 && i4.__k || t4.__k, f4 = [], e3 = [], O(t4, u4 = (!o4 && i4 || t4).__k = _(b, null, [u4]), r4 || h, h, t4.namespaceURI, !o4 && i4 ? [i4] : r4 ? null : t4.firstChild ? n2.call(t4.childNodes) : null, f4, !o4 && i4 ? i4 : r4 ? r4.__e : t4.firstChild, o4, e3), j(f4, u4, e3); } function D(n3, l4) { B(n3, l4, D); } function E(l4, u4, t4) { - var i4, o3, r3, f4, e3 = d({}, l4.props); - for (r3 in l4.type && l4.type.defaultProps && (f4 = l4.type.defaultProps), u4) - "key" == r3 ? i4 = u4[r3] : "ref" == r3 ? o3 = u4[r3] : e3[r3] = void 0 === u4[r3] && void 0 !== f4 ? f4[r3] : u4[r3]; - return arguments.length > 2 && (e3.children = arguments.length > 3 ? n2.call(arguments, 2) : t4), k(l4.type, e3, i4 || l4.key, o3 || l4.ref, null); + var i4, o4, r4, f4, e3 = d({}, l4.props); + for (r4 in l4.type && l4.type.defaultProps && (f4 = l4.type.defaultProps), u4) "key" == r4 ? i4 = u4[r4] : "ref" == r4 ? o4 = u4[r4] : e3[r4] = void 0 === u4[r4] && void 0 !== f4 ? f4[r4] : u4[r4]; + return arguments.length > 2 && (e3.children = arguments.length > 3 ? n2.call(arguments, 2) : t4), g(l4.type, e3, i4 || l4.key, o4 || l4.ref, null); } function G(n3, l4) { var u4 = { __c: l4 = "__cC" + a++, __: n3, Consumer: function(n4, l5) { return n4.children(l5); }, Provider: function(n4) { var u5, t4; - return this.getChildContext || (u5 = [], (t4 = {})[l4] = this, this.getChildContext = function() { + return this.getChildContext || (u5 = /* @__PURE__ */ new Set(), (t4 = {})[l4] = this, this.getChildContext = function() { return t4; + }, this.componentWillUnmount = function() { + u5 = null; }, this.shouldComponentUpdate = function(n5) { - this.props.value !== n5.value && u5.some(function(n6) { - n6.__e = true, P3(n6); + this.props.value !== n5.value && u5.forEach(function(n6) { + n6.__e = true, S(n6); }); }, this.sub = function(n5) { - u5.push(n5); + u5.add(n5); var l5 = n5.componentWillUnmount; n5.componentWillUnmount = function() { - u5.splice(u5.indexOf(n5), 1), l5 && l5.call(n5); + u5 && u5.delete(n5), l5 && l5.call(n5); }; }), n4.children; } }; return u4.Provider.__ = u4.Consumer.contextType = u4; } n2 = v.slice, l2 = { __e: function(n3, l4, u4, t4) { - for (var i4, o3, r3; l4 = l4.__; ) - if ((i4 = l4.__c) && !i4.__) - try { - if ((o3 = i4.constructor) && null != o3.getDerivedStateFromError && (i4.setState(o3.getDerivedStateFromError(n3)), r3 = i4.__d), null != i4.componentDidCatch && (i4.componentDidCatch(n3, t4 || {}), r3 = i4.__d), r3) - return i4.__E = i4; - } catch (l5) { - n3 = l5; - } + for (var i4, o4, r4; l4 = l4.__; ) if ((i4 = l4.__c) && !i4.__) try { + if ((o4 = i4.constructor) && null != o4.getDerivedStateFromError && (i4.setState(o4.getDerivedStateFromError(n3)), r4 = i4.__d), null != i4.componentDidCatch && (i4.componentDidCatch(n3, t4 || {}), r4 = i4.__d), r4) return i4.__E = i4; + } catch (l5) { + n3 = l5; + } throw n3; } }, u = 0, t = function(n3) { return null != n3 && null == n3.constructor; -}, w.prototype.setState = function(n3, l4) { +}, k.prototype.setState = function(n3, l4) { var u4; - u4 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = d({}, this.state), "function" == typeof n3 && (n3 = n3(d({}, u4), this.props)), n3 && d(u4, n3), null != n3 && this.__v && (l4 && this._sb.push(l4), P3(this)); -}, w.prototype.forceUpdate = function(n3) { - this.__v && (this.__e = true, n3 && this.__h.push(n3), P3(this)); -}, w.prototype.render = m, i = [], r = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, f = function(n3, l4) { + u4 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = d({}, this.state), "function" == typeof n3 && (n3 = n3(d({}, u4), this.props)), n3 && d(u4, n3), null != n3 && this.__v && (l4 && this._sb.push(l4), S(this)); +}, k.prototype.forceUpdate = function(n3) { + this.__v && (this.__e = true, n3 && this.__h.push(n3), S(this)); +}, k.prototype.render = b, i = [], r = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, f = function(n3, l4) { return n3.__v.__b - l4.__v.__b; -}, S.__r = 0, e = 0, c = M(false), s2 = M(true), a = 0; +}, M.__r = 0, e = 0, c = F(false), s2 = F(true), a = 0; -// node_modules/preact/hooks/dist/hooks.module.js +// node_modules/preact/hooks/dist/hooks.mjs var t2; var r2; var u2; var i2; var o2 = 0; var f2 = []; -var c2 = []; -var e2 = l2; -var a2 = e2.__b; -var v2 = e2.__r; -var l3 = e2.diffed; -var m2 = e2.__c; -var s3 = e2.unmount; -var d2 = e2.__; -function h2(n3, t4) { - e2.__h && e2.__h(r2, n3, o2 || t4), o2 = 0; +var c2 = l2; +var e2 = c2.__b; +var a2 = c2.__r; +var v2 = c2.diffed; +var l3 = c2.__c; +var m2 = c2.unmount; +var s3 = c2.__; +function d2(n3, t4) { + c2.__h && c2.__h(r2, n3, o2 || t4), o2 = 0; var u4 = r2.__H || (r2.__H = { __: [], __h: [] }); - return n3 >= u4.__.length && u4.__.push({ __V: c2 }), u4.__[n3]; + return n3 >= u4.__.length && u4.__.push({}), u4.__[n3]; } -function p2(n3) { - return o2 = 1, y2(D2, n3); +function h2(n3) { + return o2 = 1, p2(D2, n3); } -function y2(n3, u4, i4) { - var o3 = h2(t2++, 2); - if (o3.t = n3, !o3.__c && (o3.__ = [i4 ? i4(u4) : D2(void 0, u4), function(n4) { - var t4 = o3.__N ? o3.__N[0] : o3.__[0], r3 = o3.t(t4, n4); - t4 !== r3 && (o3.__N = [r3, o3.__[1]], o3.__c.setState({})); - }], o3.__c = r2, !r2.u)) { - var f4 = function(n4, t4, r3) { - if (!o3.__c.__H) - return true; - var u5 = o3.__c.__H.__.filter(function(n5) { +function p2(n3, u4, i4) { + var o4 = d2(t2++, 2); + if (o4.t = n3, !o4.__c && (o4.__ = [i4 ? i4(u4) : D2(void 0, u4), function(n4) { + var t4 = o4.__N ? o4.__N[0] : o4.__[0], r4 = o4.t(t4, n4); + t4 !== r4 && (o4.__N = [r4, o4.__[1]], o4.__c.setState({})); + }], o4.__c = r2, !r2.u)) { + var f4 = function(n4, t4, r4) { + if (!o4.__c.__H) return true; + var u5 = o4.__c.__H.__.filter(function(n5) { return !!n5.__c; }); if (u5.every(function(n5) { return !n5.__N; - })) - return !c3 || c3.call(this, n4, t4, r3); + })) return !c4 || c4.call(this, n4, t4, r4); var i5 = false; return u5.forEach(function(n5) { if (n5.__N) { var t5 = n5.__[0]; n5.__ = n5.__N, n5.__N = void 0, t5 !== n5.__[0] && (i5 = true); } - }), !(!i5 && o3.__c.props === n4) && (!c3 || c3.call(this, n4, t4, r3)); + }), !(!i5 && o4.__c.props === n4) && (!c4 || c4.call(this, n4, t4, r4)); }; r2.u = true; - var c3 = r2.shouldComponentUpdate, e3 = r2.componentWillUpdate; - r2.componentWillUpdate = function(n4, t4, r3) { + var c4 = r2.shouldComponentUpdate, e3 = r2.componentWillUpdate; + r2.componentWillUpdate = function(n4, t4, r4) { if (this.__e) { - var u5 = c3; - c3 = void 0, f4(n4, t4, r3), c3 = u5; + var u5 = c4; + c4 = void 0, f4(n4, t4, r4), c4 = u5; } - e3 && e3.call(this, n4, t4, r3); + e3 && e3.call(this, n4, t4, r4); }, r2.shouldComponentUpdate = f4; } - return o3.__N || o3.__; + return o4.__N || o4.__; +} +function y2(n3, u4) { + var i4 = d2(t2++, 3); + !c2.__s && C2(i4.__H, u4) && (i4.__ = n3, i4.i = u4, r2.__H.__h.push(i4)); } function _2(n3, u4) { - var i4 = h2(t2++, 3); - !e2.__s && C2(i4.__H, u4) && (i4.__ = n3, i4.i = u4, r2.__H.__h.push(i4)); + var i4 = d2(t2++, 4); + !c2.__s && C2(i4.__H, u4) && (i4.__ = n3, i4.i = u4, r2.__h.push(i4)); } -function A2(n3, u4) { - var i4 = h2(t2++, 4); - !e2.__s && C2(i4.__H, u4) && (i4.__ = n3, i4.i = u4, r2.__h.push(i4)); -} -function F2(n3) { - return o2 = 5, q2(function() { +function A2(n3) { + return o2 = 5, T2(function() { return { current: n3 }; }, []); } -function T2(n3, t4, r3) { - o2 = 6, A2(function() { +function F2(n3, t4, r4) { + o2 = 6, _2(function() { return "function" == typeof n3 ? (n3(t4()), function() { return n3(null); }) : n3 ? (n3.current = t4(), function() { return n3.current = null; }) : void 0; - }, null == r3 ? r3 : r3.concat(n3)); + }, null == r4 ? r4 : r4.concat(n3)); } -function q2(n3, r3) { - var u4 = h2(t2++, 7); - return C2(u4.__H, r3) ? (u4.__V = n3(), u4.i = r3, u4.__h = n3, u4.__V) : u4.__; +function T2(n3, r4) { + var u4 = d2(t2++, 7); + return C2(u4.__H, r4) && (u4.__ = n3(), u4.__H = r4, u4.__h = n3), u4.__; } -function x2(n3, t4) { - return o2 = 8, q2(function() { +function q2(n3, t4) { + return o2 = 8, T2(function() { return n3; }, t4); } -function P4(n3) { - var u4 = r2.context[n3.__c], i4 = h2(t2++, 9); +function x2(n3) { + var u4 = r2.context[n3.__c], i4 = d2(t2++, 9); return i4.c = n3, u4 ? (null == i4.__ && (i4.__ = true, u4.sub(r2)), u4.props.value) : n3.__; } -function V2(n3, t4) { - e2.useDebugValue && e2.useDebugValue(t4 ? t4(n3) : n3); +function P4(n3, t4) { + c2.useDebugValue && c2.useDebugValue(t4 ? t4(n3) : n3); } function b2(n3) { - var u4 = h2(t2++, 10), i4 = p2(); + var u4 = d2(t2++, 10), i4 = h2(); return u4.__ = n3, r2.componentDidCatch || (r2.componentDidCatch = function(n4, t4) { u4.__ && u4.__(n4, t4), i4[1](n4); }), [i4[0], function() { @@ -14752,69 +40948,66 @@ function b2(n3) { }]; } function g2() { - var n3 = h2(t2++, 11); + var n3 = d2(t2++, 11); if (!n3.__) { - for (var u4 = r2.__v; null !== u4 && !u4.__m && null !== u4.__; ) - u4 = u4.__; + for (var u4 = r2.__v; null !== u4 && !u4.__m && null !== u4.__; ) u4 = u4.__; var i4 = u4.__m || (u4.__m = [0, 0]); n3.__ = "P" + i4[0] + "-" + i4[1]++; } return n3.__; } function j2() { - for (var n3; n3 = f2.shift(); ) - if (n3.__P && n3.__H) - try { - n3.__H.__h.forEach(z2), n3.__H.__h.forEach(B2), n3.__H.__h = []; - } catch (t4) { - n3.__H.__h = [], e2.__e(t4, n3.__v); - } + for (var n3; n3 = f2.shift(); ) if (n3.__P && n3.__H) try { + n3.__H.__h.forEach(z2), n3.__H.__h.forEach(B2), n3.__H.__h = []; + } catch (t4) { + n3.__H.__h = [], c2.__e(t4, n3.__v); + } } -e2.__b = function(n3) { - r2 = null, a2 && a2(n3); -}, e2.__ = function(n3, t4) { - n3 && t4.__k && t4.__k.__m && (n3.__m = t4.__k.__m), d2 && d2(n3, t4); -}, e2.__r = function(n3) { - v2 && v2(n3), t2 = 0; +c2.__b = function(n3) { + r2 = null, e2 && e2(n3); +}, c2.__ = function(n3, t4) { + n3 && t4.__k && t4.__k.__m && (n3.__m = t4.__k.__m), s3 && s3(n3, t4); +}, c2.__r = function(n3) { + a2 && a2(n3), t2 = 0; var i4 = (r2 = n3.__c).__H; i4 && (u2 === r2 ? (i4.__h = [], r2.__h = [], i4.__.forEach(function(n4) { - n4.__N && (n4.__ = n4.__N), n4.__V = c2, n4.__N = n4.i = void 0; + n4.__N && (n4.__ = n4.__N), n4.i = n4.__N = void 0; })) : (i4.__h.forEach(z2), i4.__h.forEach(B2), i4.__h = [], t2 = 0)), u2 = r2; -}, e2.diffed = function(n3) { - l3 && l3(n3); +}, c2.diffed = function(n3) { + v2 && v2(n3); var t4 = n3.__c; - t4 && t4.__H && (t4.__H.__h.length && (1 !== f2.push(t4) && i2 === e2.requestAnimationFrame || ((i2 = e2.requestAnimationFrame) || w2)(j2)), t4.__H.__.forEach(function(n4) { - n4.i && (n4.__H = n4.i), n4.__V !== c2 && (n4.__ = n4.__V), n4.i = void 0, n4.__V = c2; + t4 && t4.__H && (t4.__H.__h.length && (1 !== f2.push(t4) && i2 === c2.requestAnimationFrame || ((i2 = c2.requestAnimationFrame) || w2)(j2)), t4.__H.__.forEach(function(n4) { + n4.i && (n4.__H = n4.i), n4.i = void 0; })), u2 = r2 = null; -}, e2.__c = function(n3, t4) { +}, c2.__c = function(n3, t4) { t4.some(function(n4) { try { n4.__h.forEach(z2), n4.__h = n4.__h.filter(function(n5) { return !n5.__ || B2(n5); }); - } catch (r3) { + } catch (r4) { t4.some(function(n5) { n5.__h && (n5.__h = []); - }), t4 = [], e2.__e(r3, n4.__v); + }), t4 = [], c2.__e(r4, n4.__v); } - }), m2 && m2(n3, t4); -}, e2.unmount = function(n3) { - s3 && s3(n3); - var t4, r3 = n3.__c; - r3 && r3.__H && (r3.__H.__.forEach(function(n4) { + }), l3 && l3(n3, t4); +}, c2.unmount = function(n3) { + m2 && m2(n3); + var t4, r4 = n3.__c; + r4 && r4.__H && (r4.__H.__.forEach(function(n4) { try { z2(n4); } catch (n5) { t4 = n5; } - }), r3.__H = void 0, t4 && e2.__e(t4, r3.__v)); + }), r4.__H = void 0, t4 && c2.__e(t4, r4.__v)); }; var k2 = "function" == typeof requestAnimationFrame; function w2(n3) { - var t4, r3 = function() { + var t4, r4 = function() { clearTimeout(u4), k2 && cancelAnimationFrame(t4), setTimeout(n3); - }, u4 = setTimeout(r3, 100); - k2 && (t4 = requestAnimationFrame(r3)); + }, u4 = setTimeout(r4, 100); + k2 && (t4 = requestAnimationFrame(r4)); } function z2(n3) { var t4 = r2, u4 = n3.__c; @@ -14825,344 +41018,329 @@ function B2(n3) { n3.__c = n3.__(), r2 = t4; } function C2(n3, t4) { - return !n3 || n3.length !== t4.length || t4.some(function(t5, r3) { - return t5 !== n3[r3]; + return !n3 || n3.length !== t4.length || t4.some(function(t5, r4) { + return t5 !== n3[r4]; }); } function D2(n3, t4) { return "function" == typeof t4 ? t4(n3) : t4; } -// node_modules/preact/compat/dist/compat.module.js +// node_modules/preact/compat/dist/compat.mjs function g3(n3, t4) { - for (var e3 in t4) - n3[e3] = t4[e3]; - return n3; -} -function E2(n3, t4) { - for (var e3 in n3) - if ("__source" !== e3 && !(e3 in t4)) - return true; - for (var r3 in t4) - if ("__source" !== r3 && n3[r3] !== t4[r3]) - return true; + for (var e3 in n3) if ("__source" !== e3 && !(e3 in t4)) return true; + for (var r4 in t4) if ("__source" !== r4 && n3[r4] !== t4[r4]) return true; return false; } -function C3(n3, t4) { +function E2(n3, t4) { this.props = n3, this.context = t4; } -function x3(n3, e3) { - function r3(n4) { - var t4 = this.props.ref, r4 = t4 == n4.ref; - return !r4 && t4 && (t4.call ? t4(null) : t4.current = null), e3 ? !e3(this.props, n4) || !r4 : E2(this.props, n4); +function C3(n3, e3) { + function r4(n4) { + var t4 = this.props.ref, r5 = t4 == n4.ref; + return !r5 && t4 && (t4.call ? t4(null) : t4.current = null), e3 ? !e3(this.props, n4) || !r5 : g3(this.props, n4); } function u4(e4) { - return this.shouldComponentUpdate = r3, g(n3, e4); + return this.shouldComponentUpdate = r4, _(n3, e4); } return u4.displayName = "Memo(" + (n3.displayName || n3.name) + ")", u4.prototype.isReactComponent = true, u4.__f = true, u4; } -(C3.prototype = new w()).isPureReactComponent = true, C3.prototype.shouldComponentUpdate = function(n3, t4) { - return E2(this.props, n3) || E2(this.state, t4); +(E2.prototype = new k()).isPureReactComponent = true, E2.prototype.shouldComponentUpdate = function(n3, t4) { + return g3(this.props, n3) || g3(this.state, t4); }; -var R = l2.__b; +var x3 = l2.__b; l2.__b = function(n3) { - n3.type && n3.type.__f && n3.ref && (n3.props.ref = n3.ref, n3.ref = null), R && R(n3); + n3.type && n3.type.__f && n3.ref && (n3.props.ref = n3.ref, n3.ref = null), x3 && x3(n3); }; -var w3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911; -function k3(n3) { +var R = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911; +function w3(n3) { function t4(t5) { - var e3 = g3({}, t5); - return delete e3.ref, n3(e3, t5.ref || null); + if (!("ref" in t5)) return n3(t5, null); + var e3 = t5.ref; + delete t5.ref; + var r4 = n3(t5, e3); + return t5.ref = e3, r4; } - return t4.$$typeof = w3, t4.render = t4, t4.prototype.isReactComponent = t4.__f = true, t4.displayName = "ForwardRef(" + (n3.displayName || n3.name) + ")", t4; + return t4.$$typeof = R, t4.render = t4, t4.prototype.isReactComponent = t4.__f = true, t4.displayName = "ForwardRef(" + (n3.displayName || n3.name) + ")", t4; } -var I2 = function(n3, t4) { - return null == n3 ? null : T(T(n3).map(t4)); +var k3 = function(n3, t4) { + return null == n3 ? null : H(H(n3).map(t4)); }; -var N2 = { map: I2, forEach: I2, count: function(n3) { - return n3 ? T(n3).length : 0; +var I2 = { map: k3, forEach: k3, count: function(n3) { + return n3 ? H(n3).length : 0; }, only: function(n3) { - var t4 = T(n3); - if (1 !== t4.length) - throw "Children.only"; + var t4 = H(n3); + if (1 !== t4.length) throw "Children.only"; return t4[0]; -}, toArray: T }; -var M2 = l2.__e; -l2.__e = function(n3, t4, e3, r3) { +}, toArray: H }; +var N2 = l2.__e; +l2.__e = function(n3, t4, e3, r4) { if (n3.then) { - for (var u4, o3 = t4; o3 = o3.__; ) - if ((u4 = o3.__c) && u4.__c) - return null == t4.__e && (t4.__e = e3.__e, t4.__k = e3.__k), u4.__c(n3, t4); + for (var u4, o4 = t4; o4 = o4.__; ) if ((u4 = o4.__c) && u4.__c) return null == t4.__e && (t4.__e = e3.__e, t4.__k = e3.__k), u4.__c(n3, t4); } - M2(n3, t4, e3, r3); + N2(n3, t4, e3, r4); }; -var T3 = l2.unmount; -function A3(n3, t4, e3) { +var M2 = l2.unmount; +function T3(n3, t4, e3) { return n3 && (n3.__c && n3.__c.__H && (n3.__c.__H.__.forEach(function(n4) { "function" == typeof n4.__c && n4.__c(); - }), n3.__c.__H = null), null != (n3 = g3({}, n3)).__c && (n3.__c.__P === e3 && (n3.__c.__P = t4), n3.__c = null), n3.__k = n3.__k && n3.__k.map(function(n4) { - return A3(n4, t4, e3); + }), n3.__c.__H = null), null != (n3 = function(n4, t5) { + for (var e4 in t5) n4[e4] = t5[e4]; + return n4; + }({}, n3)).__c && (n3.__c.__P === e3 && (n3.__c.__P = t4), n3.__c = null), n3.__k = n3.__k && n3.__k.map(function(n4) { + return T3(n4, t4, e3); })), n3; } -function D3(n3, t4, e3) { +function A3(n3, t4, e3) { return n3 && e3 && (n3.__v = null, n3.__k = n3.__k && n3.__k.map(function(n4) { - return D3(n4, t4, e3); + return A3(n4, t4, e3); }), n3.__c && n3.__c.__P === t4 && (n3.__e && e3.appendChild(n3.__e), n3.__c.__e = true, n3.__c.__P = e3)), n3; } -function L2() { +function D3() { this.__u = 0, this.t = null, this.__b = null; } -function O2(n3) { +function L2(n3) { var t4 = n3.__.__c; return t4 && t4.__a && t4.__a(n3); } -function F3(n3) { - var e3, r3, u4; - function o3(o4) { +function O2(n3) { + var e3, r4, u4; + function o4(o5) { if (e3 || (e3 = n3()).then(function(n4) { - r3 = n4.default || n4; + r4 = n4.default || n4; }, function(n4) { u4 = n4; - }), u4) - throw u4; - if (!r3) - throw e3; - return g(r3, o4); + }), u4) throw u4; + if (!r4) throw e3; + return _(r4, o5); } - return o3.displayName = "Lazy", o3.__f = true, o3; + return o4.displayName = "Lazy", o4.__f = true, o4; } -function U() { +function F3() { this.u = null, this.o = null; } l2.unmount = function(n3) { var t4 = n3.__c; - t4 && t4.__R && t4.__R(), t4 && 32 & n3.__u && (n3.type = null), T3 && T3(n3); -}, (L2.prototype = new w()).__c = function(n3, t4) { - var e3 = t4.__c, r3 = this; - null == r3.t && (r3.t = []), r3.t.push(e3); - var u4 = O2(r3.__v), o3 = false, i4 = function() { - o3 || (o3 = true, e3.__R = null, u4 ? u4(l4) : l4()); + t4 && t4.__R && t4.__R(), t4 && 32 & n3.__u && (n3.type = null), M2 && M2(n3); +}, (D3.prototype = new k()).__c = function(n3, t4) { + var e3 = t4.__c, r4 = this; + null == r4.t && (r4.t = []), r4.t.push(e3); + var u4 = L2(r4.__v), o4 = false, i4 = function() { + o4 || (o4 = true, e3.__R = null, u4 ? u4(c4) : c4()); }; e3.__R = i4; - var l4 = function() { - if (!--r3.__u) { - if (r3.state.__a) { - var n4 = r3.state.__a; - r3.__v.__k[0] = D3(n4, n4.__c.__P, n4.__c.__O); + var c4 = function() { + if (!--r4.__u) { + if (r4.state.__a) { + var n4 = r4.state.__a; + r4.__v.__k[0] = A3(n4, n4.__c.__P, n4.__c.__O); } var t5; - for (r3.setState({ __a: r3.__b = null }); t5 = r3.t.pop(); ) - t5.forceUpdate(); + for (r4.setState({ __a: r4.__b = null }); t5 = r4.t.pop(); ) t5.forceUpdate(); } }; - r3.__u++ || 32 & t4.__u || r3.setState({ __a: r3.__b = r3.__v.__k[0] }), n3.then(i4, i4); -}, L2.prototype.componentWillUnmount = function() { + r4.__u++ || 32 & t4.__u || r4.setState({ __a: r4.__b = r4.__v.__k[0] }), n3.then(i4, i4); +}, D3.prototype.componentWillUnmount = function() { this.t = []; -}, L2.prototype.render = function(n3, e3) { +}, D3.prototype.render = function(n3, e3) { if (this.__b) { if (this.__v.__k) { - var r3 = document.createElement("div"), o3 = this.__v.__k[0].__c; - this.__v.__k[0] = A3(this.__b, r3, o3.__O = o3.__P); + var r4 = document.createElement("div"), o4 = this.__v.__k[0].__c; + this.__v.__k[0] = T3(this.__b, r4, o4.__O = o4.__P); } this.__b = null; } - var i4 = e3.__a && g(m, null, n3.fallback); - return i4 && (i4.__u &= -33), [g(m, null, e3.__a ? null : n3.children), i4]; + var i4 = e3.__a && _(b, null, n3.fallback); + return i4 && (i4.__u &= -33), [_(b, null, e3.__a ? null : n3.children), i4]; }; -var V3 = function(n3, t4, e3) { - if (++e3[1] === e3[0] && n3.o.delete(t4), n3.props.revealOrder && ("t" !== n3.props.revealOrder[0] || !n3.o.size)) - for (e3 = n3.u; e3; ) { - for (; e3.length > 3; ) - e3.pop()(); - if (e3[1] < e3[0]) - break; - n3.u = e3 = e3[2]; - } +var U = function(n3, t4, e3) { + if (++e3[1] === e3[0] && n3.o.delete(t4), n3.props.revealOrder && ("t" !== n3.props.revealOrder[0] || !n3.o.size)) for (e3 = n3.u; e3; ) { + for (; e3.length > 3; ) e3.pop()(); + if (e3[1] < e3[0]) break; + n3.u = e3 = e3[2]; + } }; -function W(n3) { +function V2(n3) { return this.getChildContext = function() { return n3.context; }, n3.children; } -function P5(n3) { - var e3 = this, r3 = n3.i; +function W(n3) { + var e3 = this, r4 = n3.i; e3.componentWillUnmount = function() { B(null, e3.l), e3.l = null, e3.i = null; - }, e3.i && e3.i !== r3 && e3.componentWillUnmount(), e3.l || (e3.i = r3, e3.l = { nodeType: 1, parentNode: r3, childNodes: [], appendChild: function(n4) { + }, e3.i && e3.i !== r4 && e3.componentWillUnmount(), e3.l || (e3.i = r4, e3.l = { nodeType: 1, parentNode: r4, childNodes: [], contains: function() { + return true; + }, appendChild: function(n4) { this.childNodes.push(n4), e3.i.appendChild(n4); }, insertBefore: function(n4, t4) { this.childNodes.push(n4), e3.i.appendChild(n4); }, removeChild: function(n4) { this.childNodes.splice(this.childNodes.indexOf(n4) >>> 1, 1), e3.i.removeChild(n4); - } }), B(g(W, { context: e3.context }, n3.__v), e3.l); + } }), B(_(V2, { context: e3.context }, n3.__v), e3.l); } -function j3(n3, e3) { - var r3 = g(P5, { __v: n3, i: e3 }); - return r3.containerInfo = e3, r3; +function P5(n3, e3) { + var r4 = _(W, { __v: n3, i: e3 }); + return r4.containerInfo = e3, r4; } -(U.prototype = new w()).__a = function(n3) { - var t4 = this, e3 = O2(t4.__v), r3 = t4.o.get(n3); - return r3[0]++, function(u4) { - var o3 = function() { - t4.props.revealOrder ? (r3.push(u4), V3(t4, n3, r3)) : u4(); +(F3.prototype = new k()).__a = function(n3) { + var t4 = this, e3 = L2(t4.__v), r4 = t4.o.get(n3); + return r4[0]++, function(u4) { + var o4 = function() { + t4.props.revealOrder ? (r4.push(u4), U(t4, n3, r4)) : u4(); }; - e3 ? e3(o3) : o3(); + e3 ? e3(o4) : o4(); }; -}, U.prototype.render = function(n3) { +}, F3.prototype.render = function(n3) { this.u = null, this.o = /* @__PURE__ */ new Map(); - var t4 = T(n3.children); + var t4 = H(n3.children); n3.revealOrder && "b" === n3.revealOrder[0] && t4.reverse(); - for (var e3 = t4.length; e3--; ) - this.o.set(t4[e3], this.u = [1, 0, this.u]); + for (var e3 = t4.length; e3--; ) this.o.set(t4[e3], this.u = [1, 0, this.u]); return n3.children; -}, U.prototype.componentDidUpdate = U.prototype.componentDidMount = function() { +}, F3.prototype.componentDidUpdate = F3.prototype.componentDidMount = function() { var n3 = this; this.o.forEach(function(t4, e3) { - V3(n3, e3, t4); + U(n3, e3, t4); }); }; -var z3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; -var B3 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; -var H2 = /^on(Ani|Tra|Tou|BeforeInp|Compo)/; -var Z = /[A-Z0-9]/g; -var Y = "undefined" != typeof document; -var $2 = function(n3) { +var j3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; +var z3 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; +var B3 = /^on(Ani|Tra|Tou|BeforeInp|Compo)/; +var H2 = /[A-Z0-9]/g; +var Z = "undefined" != typeof document; +var Y = function(n3) { return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n3); }; -function q3(n3, t4, e3) { +function $2(n3, t4, e3) { return null == t4.__k && (t4.textContent = ""), B(n3, t4), "function" == typeof e3 && e3(), n3 ? n3.__c : null; } -function G2(n3, t4, e3) { +function q3(n3, t4, e3) { return D(n3, t4), "function" == typeof e3 && e3(), n3 ? n3.__c : null; } -w.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t4) { - Object.defineProperty(w.prototype, t4, { configurable: true, get: function() { +k.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t4) { + Object.defineProperty(k.prototype, t4, { configurable: true, get: function() { return this["UNSAFE_" + t4]; }, set: function(n3) { Object.defineProperty(this, t4, { configurable: true, writable: true, value: n3 }); } }); }); -var J = l2.event; -function K() { +var G2 = l2.event; +function J() { } -function Q() { +function K() { return this.cancelBubble; } -function X() { +function Q() { return this.defaultPrevented; } l2.event = function(n3) { - return J && (n3 = J(n3)), n3.persist = K, n3.isPropagationStopped = Q, n3.isDefaultPrevented = X, n3.nativeEvent = n3; + return G2 && (n3 = G2(n3)), n3.persist = J, n3.isPropagationStopped = K, n3.isDefaultPrevented = Q, n3.nativeEvent = n3; }; -var nn; -var tn = { enumerable: false, configurable: true, get: function() { +var X; +var nn = { enumerable: false, configurable: true, get: function() { return this.class; } }; -var en = l2.vnode; +var tn = l2.vnode; l2.vnode = function(n3) { "string" == typeof n3.type && function(n4) { - var t4 = n4.props, e3 = n4.type, u4 = {}; - for (var o3 in t4) { - var i4 = t4[o3]; - if (!("value" === o3 && "defaultValue" in t4 && null == i4 || Y && "children" === o3 && "noscript" === e3 || "class" === o3 || "className" === o3)) { - var l4 = o3.toLowerCase(); - "defaultValue" === o3 && "value" in t4 && null == t4.value ? o3 = "value" : "download" === o3 && true === i4 ? i4 = "" : "translate" === l4 && "no" === i4 ? i4 = false : "ondoubleclick" === l4 ? o3 = "ondblclick" : "onchange" !== l4 || "input" !== e3 && "textarea" !== e3 || $2(t4.type) ? "onfocus" === l4 ? o3 = "onfocusin" : "onblur" === l4 ? o3 = "onfocusout" : H2.test(o3) ? o3 = l4 : -1 === e3.indexOf("-") && B3.test(o3) ? o3 = o3.replace(Z, "-$&").toLowerCase() : null === i4 && (i4 = void 0) : l4 = o3 = "oninput", "oninput" === l4 && u4[o3 = l4] && (o3 = "oninputCapture"), u4[o3] = i4; + var t4 = n4.props, e3 = n4.type, u4 = {}, o4 = -1 === e3.indexOf("-"); + for (var i4 in t4) { + var c4 = t4[i4]; + if (!("value" === i4 && "defaultValue" in t4 && null == c4 || Z && "children" === i4 && "noscript" === e3 || "class" === i4 || "className" === i4)) { + var f4 = i4.toLowerCase(); + "defaultValue" === i4 && "value" in t4 && null == t4.value ? i4 = "value" : "download" === i4 && true === c4 ? c4 = "" : "translate" === f4 && "no" === c4 ? c4 = false : "o" === f4[0] && "n" === f4[1] ? "ondoubleclick" === f4 ? i4 = "ondblclick" : "onchange" !== f4 || "input" !== e3 && "textarea" !== e3 || Y(t4.type) ? "onfocus" === f4 ? i4 = "onfocusin" : "onblur" === f4 ? i4 = "onfocusout" : B3.test(i4) && (i4 = f4) : f4 = i4 = "oninput" : o4 && z3.test(i4) ? i4 = i4.replace(H2, "-$&").toLowerCase() : null === c4 && (c4 = void 0), "oninput" === f4 && u4[i4 = f4] && (i4 = "oninputCapture"), u4[i4] = c4; } } - "select" == e3 && u4.multiple && Array.isArray(u4.value) && (u4.value = T(t4.children).forEach(function(n5) { + "select" == e3 && u4.multiple && Array.isArray(u4.value) && (u4.value = H(t4.children).forEach(function(n5) { n5.props.selected = -1 != u4.value.indexOf(n5.props.value); - })), "select" == e3 && null != u4.defaultValue && (u4.value = T(t4.children).forEach(function(n5) { + })), "select" == e3 && null != u4.defaultValue && (u4.value = H(t4.children).forEach(function(n5) { n5.props.selected = u4.multiple ? -1 != u4.defaultValue.indexOf(n5.props.value) : u4.defaultValue == n5.props.value; - })), t4.class && !t4.className ? (u4.class = t4.class, Object.defineProperty(u4, "className", tn)) : (t4.className && !t4.class || t4.class && t4.className) && (u4.class = u4.className = t4.className), n4.props = u4; - }(n3), n3.$$typeof = z3, en && en(n3); + })), t4.class && !t4.className ? (u4.class = t4.class, Object.defineProperty(u4, "className", nn)) : (t4.className && !t4.class || t4.class && t4.className) && (u4.class = u4.className = t4.className), n4.props = u4; + }(n3), n3.$$typeof = j3, tn && tn(n3); }; -var rn = l2.__r; +var en = l2.__r; l2.__r = function(n3) { - rn && rn(n3), nn = n3.__c; + en && en(n3), X = n3.__c; }; -var un = l2.diffed; +var rn = l2.diffed; l2.diffed = function(n3) { - un && un(n3); + rn && rn(n3); var t4 = n3.props, e3 = n3.__e; - null != e3 && "textarea" === n3.type && "value" in t4 && t4.value !== e3.value && (e3.value = null == t4.value ? "" : t4.value), nn = null; + null != e3 && "textarea" === n3.type && "value" in t4 && t4.value !== e3.value && (e3.value = null == t4.value ? "" : t4.value), X = null; }; -var on = { ReactCurrentDispatcher: { current: { readContext: function(n3) { - return nn.__n[n3.__c].props.value; -}, useCallback: x2, useContext: P4, useDebugValue: V2, useDeferredValue: bn, useEffect: _2, useId: g2, useImperativeHandle: T2, useInsertionEffect: gn, useLayoutEffect: A2, useMemo: q2, useReducer: y2, useRef: F2, useState: p2, useSyncExternalStore: Cn, useTransition: Sn } } }; +var un = { ReactCurrentDispatcher: { current: { readContext: function(n3) { + return X.__n[n3.__c].props.value; +}, useCallback: q2, useContext: x2, useDebugValue: P4, useDeferredValue: _n, useEffect: y2, useId: g2, useImperativeHandle: F2, useInsertionEffect: Sn, useLayoutEffect: _2, useMemo: T2, useReducer: p2, useRef: A2, useState: h2, useSyncExternalStore: En, useTransition: bn } } }; function cn(n3) { - return g.bind(null, n3); + return _.bind(null, n3); } function fn(n3) { - return !!n3 && n3.$$typeof === z3; + return !!n3 && n3.$$typeof === j3; +} +function ln(n3) { + return fn(n3) && n3.type === b; } function an(n3) { - return fn(n3) && n3.type === m; -} -function sn(n3) { return !!n3 && !!n3.displayName && ("string" == typeof n3.displayName || n3.displayName instanceof String) && n3.displayName.startsWith("Memo("); } -function hn(n3) { +function sn(n3) { return fn(n3) ? E.apply(null, arguments) : n3; } -function vn(n3) { +function hn(n3) { return !!n3.__k && (B(null, n3), true); } -function dn(n3) { +function vn(n3) { return n3 && (n3.base || 1 === n3.nodeType && n3) || null; } +var dn = function(n3, t4) { + return n3(t4); +}; var pn = function(n3, t4) { return n3(t4); }; -var mn = function(n3, t4) { - return n3(t4); -}; -var yn = m; -function _n(n3) { +var mn = b; +function yn(n3) { n3(); } -function bn(n3) { +function _n(n3) { return n3; } -function Sn() { - return [false, _n]; +function bn() { + return [false, yn]; } -var gn = A2; -var En = fn; -function Cn(n3, t4) { - var e3 = t4(), r3 = p2({ h: { __: e3, v: t4 } }), u4 = r3[0].h, o3 = r3[1]; - return A2(function() { - u4.__ = e3, u4.v = t4, xn(u4) && o3({ h: u4 }); - }, [n3, e3, t4]), _2(function() { - return xn(u4) && o3({ h: u4 }), n3(function() { - xn(u4) && o3({ h: u4 }); +var Sn = _2; +var gn = fn; +function En(n3, t4) { + var e3 = t4(), r4 = h2({ h: { __: e3, v: t4 } }), u4 = r4[0].h, o4 = r4[1]; + return _2(function() { + u4.__ = e3, u4.v = t4, Cn(u4) && o4({ h: u4 }); + }, [n3, e3, t4]), y2(function() { + return Cn(u4) && o4({ h: u4 }), n3(function() { + Cn(u4) && o4({ h: u4 }); }); }, [n3]), e3; } -function xn(n3) { - var t4, e3, r3 = n3.v, u4 = n3.__; +function Cn(n3) { + var t4, e3, r4 = n3.v, u4 = n3.__; try { - var o3 = r3(); - return !((t4 = u4) === (e3 = o3) && (0 !== t4 || 1 / t4 == 1 / e3) || t4 != t4 && e3 != e3); + var o4 = r4(); + return !((t4 = u4) === (e3 = o4) && (0 !== t4 || 1 / t4 == 1 / e3) || t4 != t4 && e3 != e3); } catch (n4) { return true; } } -var Rn = { useState: p2, useId: g2, useReducer: y2, useEffect: _2, useLayoutEffect: A2, useInsertionEffect: gn, useTransition: Sn, useDeferredValue: bn, useSyncExternalStore: Cn, startTransition: _n, useRef: F2, useImperativeHandle: T2, useMemo: q2, useCallback: x2, useContext: P4, useDebugValue: V2, version: "17.0.2", Children: N2, render: q3, hydrate: G2, unmountComponentAtNode: vn, createPortal: j3, createElement: g, createContext: G, createFactory: cn, cloneElement: hn, createRef: b, Fragment: m, isValidElement: fn, isElement: En, isFragment: an, isMemo: sn, findDOMNode: dn, Component: w, PureComponent: C3, memo: x3, forwardRef: k3, flushSync: mn, unstable_batchedUpdates: pn, StrictMode: yn, Suspense: L2, SuspenseList: U, lazy: F3, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: on }; +var xn = { useState: h2, useId: g2, useReducer: p2, useEffect: y2, useLayoutEffect: _2, useInsertionEffect: Sn, useTransition: bn, useDeferredValue: _n, useSyncExternalStore: En, startTransition: yn, useRef: A2, useImperativeHandle: F2, useMemo: T2, useCallback: q2, useContext: x2, useDebugValue: P4, version: "18.3.1", Children: I2, render: $2, hydrate: q3, unmountComponentAtNode: hn, createPortal: P5, createElement: _, createContext: G, createFactory: cn, cloneElement: sn, createRef: m, Fragment: b, isValidElement: fn, isElement: gn, isFragment: ln, isMemo: an, findDOMNode: vn, Component: k, PureComponent: E2, memo: C3, forwardRef: w3, flushSync: pn, unstable_batchedUpdates: dn, StrictMode: mn, Suspense: D3, SuspenseList: F3, lazy: O2, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: un }; -// node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +// node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs var f3 = 0; var i3 = Array.isArray; -function u3(e3, t4, n3, o3, i4, u4) { +function u3(e3, t4, n3, o4, i4, u4) { t4 || (t4 = {}); - var a3, c3, p4 = t4; - if ("ref" in p4) - for (c3 in p4 = {}, t4) - "ref" == c3 ? a3 = t4[c3] : p4[c3] = t4[c3]; - var l4 = { type: e3, props: p4, key: n3, ref: a3, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: --f3, __i: -1, __u: 0, __source: i4, __self: u4 }; - if ("function" == typeof e3 && (a3 = e3.defaultProps)) - for (c3 in a3) - void 0 === p4[c3] && (p4[c3] = a3[c3]); - return l2.vnode && l2.vnode(l4), l4; + var a4, c4, l4 = t4; + "ref" in t4 && (a4 = t4.ref, delete t4.ref); + var p3 = { type: e3, props: l4, key: n3, ref: a4, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: --f3, __i: -1, __u: 0, __source: i4, __self: u4 }; + if ("function" == typeof e3 && (a4 = e3.defaultProps)) for (c4 in a4) void 0 === l4[c4] && (l4[c4] = a4[c4]); + return l2.vnode && l2.vnode(p3), p3; } // src/api/ui/embed.tsx @@ -15172,20 +41350,18 @@ function Embed({ sourcePath: maybeSourcePath }) { var _a; - const app = P4(APP_CONTEXT); - const component = P4(COMPONENT_CONTEXT); - const currentFile = P4(CURRENT_FILE_CONTEXT); + const app = x2(APP_CONTEXT); + const component = x2(COMPONENT_CONTEXT); + const currentFile = x2(CURRENT_FILE_CONTEXT); const sourcePath = (_a = maybeSourcePath != null ? maybeSourcePath : currentFile) != null ? _a : ""; - const container = F2(null); - const linkedFile = q2( + const container = A2(null); + const linkedFile = T2( () => app.metadataCache.getFirstLinkpathDest(link.path, sourcePath), [link.path, sourcePath] ); - _2(() => { - if (!container.current) - return; - if (!linkedFile) - return; + y2(() => { + if (!container.current) return; + if (!linkedFile) return; container.current.innerHTML = ""; const creator = app.embedRegistry.getEmbedCreator(linkedFile); let embedComponent = new creator( @@ -15214,21 +41390,21 @@ function Embed({ function LineSpanEmbed({ path, start, - end: end3, + end: end2, explain, showExplain = true }) { var _a; - const content = useLineSpan(path, start, end3); - const explainer = explain != null ? explain : `${getFileTitle(path)} (${start} - ${end3})`; - const workspace = (_a = P4(APP_CONTEXT)) == null ? void 0 : _a.workspace; - const onExplainClick = x2( + const content = useLineSpan(path, start, end2); + const explainer = explain != null ? explain : `${getFileTitle(path)} (${start} - ${end2})`; + const workspace = (_a = x2(APP_CONTEXT)) == null ? void 0 : _a.workspace; + const onExplainClick = q2( (event) => workspace == null ? void 0 : workspace.openLinkText(path, path, event.shiftKey), [path] ); switch (content.type) { case "loading": - return /* @__PURE__ */ u3(ErrorMessage, { message: `Reading ${path} (${start} - ${end3})` }); + return /* @__PURE__ */ u3(ErrorMessage, { message: `Reading ${path} (${start} - ${end2})` }); case "file-not-found": return /* @__PURE__ */ u3(ErrorMessage, { message: `Could not find a file at path: ${content.path}` }); case "error": @@ -15240,31 +41416,29 @@ function LineSpanEmbed({ ] }); } } -function useLineSpan(path, start, end3) { - const app = P4(APP_CONTEXT); - const datacore = P4(DATACORE_CONTEXT); - const [state2, update] = y2( - (state3, event) => { - if (state3.type == "loaded" && event.type !== "loaded") - return state3; - else - return event; +function useLineSpan(path, start, end2) { + const app = x2(APP_CONTEXT); + const datacore = x2(DATACORE_CONTEXT); + const [state, update] = p2( + (state2, event) => { + if (state2.type == "loaded" && event.type !== "loaded") return state2; + else return event; }, { type: "loading" } ); - _2(() => { + y2(() => { const file = app.vault.getFileByPath(path); if (file == null) { update({ type: "file-not-found", path }); return; } datacore.read(file).then((content) => { - update({ type: "loaded", content: lineRange(content, start, end3) }); + update({ type: "loaded", content: lineRange(content, start, end2) }); }).catch((error) => { update({ type: "error", message: error.message }); }); - }, [path, start, end3]); - return state2; + }, [path, start, end2]); + return state; } // src/ui/markdown.tsx @@ -15284,11 +41458,11 @@ function DatacoreContextProvider({ } function RawLink({ link, sourcePath: maybeSourcePath }) { var _a, _b; - const workspace = (_a = P4(APP_CONTEXT)) == null ? void 0 : _a.workspace; - const currentPath = P4(CURRENT_FILE_CONTEXT); + const workspace = (_a = x2(APP_CONTEXT)) == null ? void 0 : _a.workspace; + const currentPath = x2(CURRENT_FILE_CONTEXT); const sourcePath = (_b = maybeSourcePath != null ? maybeSourcePath : currentPath) != null ? _b : ""; - const parsed = q2(() => Literals.isLink(link) ? link : Link.infer(link), [link]); - const onClick = x2( + const parsed = T2(() => Literals.isLink(link) ? link : Link.infer(link), [link]); + const onClick = q2( (event) => { const newtab = event.shiftKey; workspace == null ? void 0 : workspace.openLinkText(parsed.obsidianLink(), sourcePath, newtab); @@ -15309,7 +41483,7 @@ function RawLink({ link, sourcePath: maybeSourcePath }) { } ); } -var ObsidianLink = x3(RawLink); +var ObsidianLink = C3(RawLink); function RawMarkdown({ content, sourcePath: maybeSourcePath, @@ -15318,19 +41492,17 @@ function RawMarkdown({ cls, onClick }) { - const container = F2(null); - const component = P4(COMPONENT_CONTEXT); - const defaultPath = P4(CURRENT_FILE_CONTEXT); - const app = P4(APP_CONTEXT); + const container = A2(null); + const component = x2(COMPONENT_CONTEXT); + const defaultPath = x2(CURRENT_FILE_CONTEXT); + const app = x2(APP_CONTEXT); const sourcePath = maybeSourcePath != null ? maybeSourcePath : defaultPath; - _2(() => { - if (!container.current) - return; + y2(() => { + if (!container.current) return; container.current.innerHTML = ""; import_obsidian.MarkdownRenderer.render(app, content, container.current, sourcePath, component).then(() => { var _a; - if (!container.current || !inline2) - return; + if (!container.current || !inline2) return; let paragraph = container.current.querySelector("p"); while (paragraph) { let children = paragraph.childNodes; @@ -15358,7 +41530,7 @@ function RawMarkdown({ }, [content, sourcePath, inline2, container.current]); return /* @__PURE__ */ u3("span", { ref: container, style, className: cls, onClick }); } -var Markdown = x3(RawMarkdown); +var Markdown = C3(RawMarkdown); function RawLit({ value, sourcePath: maybeSourcePath, @@ -15366,57 +41538,53 @@ function RawLit({ depth = 0 }) { var _a, _b; - const settings = P4(SETTINGS_CONTEXT); - const app = P4(APP_CONTEXT); - const defaultPath = P4(CURRENT_FILE_CONTEXT); + const settings = x2(SETTINGS_CONTEXT); + const app = x2(APP_CONTEXT); + const defaultPath = x2(CURRENT_FILE_CONTEXT); const sourcePath = maybeSourcePath != null ? maybeSourcePath : defaultPath; - if (depth >= settings.maxRecursiveRenderDepth) - return /* @__PURE__ */ u3(m, { children: "..." }); + if (depth >= settings.maxRecursiveRenderDepth) return /* @__PURE__ */ u3(b, { children: "..." }); if (Literals.isNull(value) || value === void 0) { return /* @__PURE__ */ u3(Markdown, { inline: inline2, content: settings.renderNullAs, sourcePath }); } else if (Literals.isString(value)) { return /* @__PURE__ */ u3(Markdown, { inline: inline2, content: value, sourcePath }); } else if (Literals.isNumber(value)) { - return /* @__PURE__ */ u3(m, { children: "" + value }); + return /* @__PURE__ */ u3(b, { children: "" + value }); } else if (Literals.isBoolean(value)) { - return /* @__PURE__ */ u3(m, { children: "" + value }); + return /* @__PURE__ */ u3(b, { children: "" + value }); } else if (Literals.isDate(value)) { - return /* @__PURE__ */ u3(m, { children: renderMinimalDate(value, settings.defaultDateFormat, settings.defaultDateTimeFormat, currentLocale()) }); + return /* @__PURE__ */ u3(b, { children: renderMinimalDate(value, settings.defaultDateFormat, settings.defaultDateTimeFormat, currentLocale()) }); } else if (Literals.isDuration(value)) { - return /* @__PURE__ */ u3(m, { children: renderMinimalDuration(value) }); + return /* @__PURE__ */ u3(b, { children: renderMinimalDuration(value) }); } else if (Literals.isLink(value)) { if (isImageEmbed(value)) { let realFile = app.metadataCache.getFirstLinkpathDest(value.path, sourcePath); - if (!realFile) - return /* @__PURE__ */ u3(Markdown, { content: value.markdown(), sourcePath }); + if (!realFile) return /* @__PURE__ */ u3(Markdown, { content: value.markdown(), sourcePath }); let dimensions = extractImageDimensions(value); let resourcePath = app.vault.getResourcePath(realFile); if (dimensions && dimensions.length == 2) return /* @__PURE__ */ u3("img", { alt: value.path, src: resourcePath, width: dimensions[0], height: dimensions[1] }); else if (dimensions && dimensions.length == 1) return /* @__PURE__ */ u3("img", { alt: value.path, src: resourcePath, width: dimensions[0] }); - else - return /* @__PURE__ */ u3("img", { alt: value.path, src: resourcePath }); + else return /* @__PURE__ */ u3("img", { alt: value.path, src: resourcePath }); } else if (value.embed) { return /* @__PURE__ */ u3(Embed, { link: value, sourcePath, inline: inline2 }); } return /* @__PURE__ */ u3(ObsidianLink, { link: value, sourcePath }); } else if (Literals.isFunction(value)) { - return /* @__PURE__ */ u3(m, { children: "" }); + return /* @__PURE__ */ u3(b, { children: "" }); } else if (Literals.isArray(value)) { if (!inline2) { return /* @__PURE__ */ u3("ul", { className: "dataview dataview-ul dataview-result-list-ul", children: value.map((subvalue) => /* @__PURE__ */ u3("li", { className: "dataview-result-list-li", children: /* @__PURE__ */ u3(Lit, { value: subvalue, sourcePath, inline: inline2, depth: depth + 1 }) })) }); } else { - if (value.length == 0) - return /* @__PURE__ */ u3(m, { children: "" }); - return /* @__PURE__ */ u3("span", { className: "dataview dataview-result-list-span", children: value.map((subvalue, index2) => /* @__PURE__ */ u3(m, { children: [ - index2 == 0 ? "" : ", ", + if (value.length == 0) return /* @__PURE__ */ u3(b, { children: "" }); + return /* @__PURE__ */ u3("span", { className: "dataview dataview-result-list-span", children: value.map((subvalue, index) => /* @__PURE__ */ u3(b, { children: [ + index == 0 ? "" : ", ", /* @__PURE__ */ u3(Lit, { value: subvalue, sourcePath, inline: inline2, depth: depth + 1 }) ] })) }); } } else if (Literals.isObject(value)) { if (((_a = value == null ? void 0 : value.constructor) == null ? void 0 : _a.name) && ((_b = value == null ? void 0 : value.constructor) == null ? void 0 : _b.name) != "Object") { - return /* @__PURE__ */ u3(m, { children: [ + return /* @__PURE__ */ u3(b, { children: [ "<", value.constructor.name, ">" @@ -15429,23 +41597,22 @@ function RawLit({ /* @__PURE__ */ u3(Lit, { value: value2, sourcePath, inline: inline2, depth: depth + 1 }) ] })) }); } else { - if (Object.keys(value).length == 0) - return /* @__PURE__ */ u3(m, { children: "" }); - return /* @__PURE__ */ u3("span", { className: "dataview dataview-result-object-span", children: Object.entries(value).map(([key, value2], index2) => /* @__PURE__ */ u3(m, { children: [ - index2 == 0 ? "" : ", ", + if (Object.keys(value).length == 0) return /* @__PURE__ */ u3(b, { children: "" }); + return /* @__PURE__ */ u3("span", { className: "dataview dataview-result-object-span", children: Object.entries(value).map(([key, value2], index) => /* @__PURE__ */ u3(b, { children: [ + index == 0 ? "" : ", ", key, ": ", /* @__PURE__ */ u3(Lit, { value: value2, sourcePath, inline: inline2, depth: depth + 1 }) ] })) }); } } - return /* @__PURE__ */ u3(m, { children: [ + return /* @__PURE__ */ u3(b, { children: [ "" ] }); } -var Lit = x3(RawLit); +var Lit = C3(RawLit); function ErrorMessage({ title, message, @@ -15468,20046 +41635,25 @@ function SimpleErrorBoundary({ if (error) { return /* @__PURE__ */ u3(ErrorMessage, { title, message, error: error.stack, reset }); } else { - return /* @__PURE__ */ u3(m, { children }); + return /* @__PURE__ */ u3(b, { children }); } } // src/ui/javascript.tsx var import_obsidian3 = require("obsidian"); -// node_modules/sucrase/dist/esm/parser/tokenizer/keywords.js -var ContextualKeyword; -(function(ContextualKeyword2) { - const NONE = 0; - ContextualKeyword2[ContextualKeyword2["NONE"] = NONE] = "NONE"; - const _abstract = NONE + 1; - ContextualKeyword2[ContextualKeyword2["_abstract"] = _abstract] = "_abstract"; - const _accessor = _abstract + 1; - ContextualKeyword2[ContextualKeyword2["_accessor"] = _accessor] = "_accessor"; - const _as = _accessor + 1; - ContextualKeyword2[ContextualKeyword2["_as"] = _as] = "_as"; - const _assert = _as + 1; - ContextualKeyword2[ContextualKeyword2["_assert"] = _assert] = "_assert"; - const _asserts = _assert + 1; - ContextualKeyword2[ContextualKeyword2["_asserts"] = _asserts] = "_asserts"; - const _async = _asserts + 1; - ContextualKeyword2[ContextualKeyword2["_async"] = _async] = "_async"; - const _await = _async + 1; - ContextualKeyword2[ContextualKeyword2["_await"] = _await] = "_await"; - const _checks = _await + 1; - ContextualKeyword2[ContextualKeyword2["_checks"] = _checks] = "_checks"; - const _constructor = _checks + 1; - ContextualKeyword2[ContextualKeyword2["_constructor"] = _constructor] = "_constructor"; - const _declare = _constructor + 1; - ContextualKeyword2[ContextualKeyword2["_declare"] = _declare] = "_declare"; - const _enum = _declare + 1; - ContextualKeyword2[ContextualKeyword2["_enum"] = _enum] = "_enum"; - const _exports = _enum + 1; - ContextualKeyword2[ContextualKeyword2["_exports"] = _exports] = "_exports"; - const _from = _exports + 1; - ContextualKeyword2[ContextualKeyword2["_from"] = _from] = "_from"; - const _get = _from + 1; - ContextualKeyword2[ContextualKeyword2["_get"] = _get] = "_get"; - const _global = _get + 1; - ContextualKeyword2[ContextualKeyword2["_global"] = _global] = "_global"; - const _implements = _global + 1; - ContextualKeyword2[ContextualKeyword2["_implements"] = _implements] = "_implements"; - const _infer = _implements + 1; - ContextualKeyword2[ContextualKeyword2["_infer"] = _infer] = "_infer"; - const _interface = _infer + 1; - ContextualKeyword2[ContextualKeyword2["_interface"] = _interface] = "_interface"; - const _is = _interface + 1; - ContextualKeyword2[ContextualKeyword2["_is"] = _is] = "_is"; - const _keyof = _is + 1; - ContextualKeyword2[ContextualKeyword2["_keyof"] = _keyof] = "_keyof"; - const _mixins = _keyof + 1; - ContextualKeyword2[ContextualKeyword2["_mixins"] = _mixins] = "_mixins"; - const _module = _mixins + 1; - ContextualKeyword2[ContextualKeyword2["_module"] = _module] = "_module"; - const _namespace = _module + 1; - ContextualKeyword2[ContextualKeyword2["_namespace"] = _namespace] = "_namespace"; - const _of = _namespace + 1; - ContextualKeyword2[ContextualKeyword2["_of"] = _of] = "_of"; - const _opaque = _of + 1; - ContextualKeyword2[ContextualKeyword2["_opaque"] = _opaque] = "_opaque"; - const _out = _opaque + 1; - ContextualKeyword2[ContextualKeyword2["_out"] = _out] = "_out"; - const _override = _out + 1; - ContextualKeyword2[ContextualKeyword2["_override"] = _override] = "_override"; - const _private = _override + 1; - ContextualKeyword2[ContextualKeyword2["_private"] = _private] = "_private"; - const _protected = _private + 1; - ContextualKeyword2[ContextualKeyword2["_protected"] = _protected] = "_protected"; - const _proto = _protected + 1; - ContextualKeyword2[ContextualKeyword2["_proto"] = _proto] = "_proto"; - const _public = _proto + 1; - ContextualKeyword2[ContextualKeyword2["_public"] = _public] = "_public"; - const _readonly = _public + 1; - ContextualKeyword2[ContextualKeyword2["_readonly"] = _readonly] = "_readonly"; - const _require = _readonly + 1; - ContextualKeyword2[ContextualKeyword2["_require"] = _require] = "_require"; - const _satisfies = _require + 1; - ContextualKeyword2[ContextualKeyword2["_satisfies"] = _satisfies] = "_satisfies"; - const _set = _satisfies + 1; - ContextualKeyword2[ContextualKeyword2["_set"] = _set] = "_set"; - const _static = _set + 1; - ContextualKeyword2[ContextualKeyword2["_static"] = _static] = "_static"; - const _symbol = _static + 1; - ContextualKeyword2[ContextualKeyword2["_symbol"] = _symbol] = "_symbol"; - const _type = _symbol + 1; - ContextualKeyword2[ContextualKeyword2["_type"] = _type] = "_type"; - const _unique = _type + 1; - ContextualKeyword2[ContextualKeyword2["_unique"] = _unique] = "_unique"; - const _using = _unique + 1; - ContextualKeyword2[ContextualKeyword2["_using"] = _using] = "_using"; -})(ContextualKeyword || (ContextualKeyword = {})); - -// node_modules/sucrase/dist/esm/parser/tokenizer/types.js -var TokenType; -(function(TokenType2) { - const PRECEDENCE_MASK = 15; - TokenType2[TokenType2["PRECEDENCE_MASK"] = PRECEDENCE_MASK] = "PRECEDENCE_MASK"; - const IS_KEYWORD = 1 << 4; - TokenType2[TokenType2["IS_KEYWORD"] = IS_KEYWORD] = "IS_KEYWORD"; - const IS_ASSIGN = 1 << 5; - TokenType2[TokenType2["IS_ASSIGN"] = IS_ASSIGN] = "IS_ASSIGN"; - const IS_RIGHT_ASSOCIATIVE = 1 << 6; - TokenType2[TokenType2["IS_RIGHT_ASSOCIATIVE"] = IS_RIGHT_ASSOCIATIVE] = "IS_RIGHT_ASSOCIATIVE"; - const IS_PREFIX = 1 << 7; - TokenType2[TokenType2["IS_PREFIX"] = IS_PREFIX] = "IS_PREFIX"; - const IS_POSTFIX = 1 << 8; - TokenType2[TokenType2["IS_POSTFIX"] = IS_POSTFIX] = "IS_POSTFIX"; - const IS_EXPRESSION_START = 1 << 9; - TokenType2[TokenType2["IS_EXPRESSION_START"] = IS_EXPRESSION_START] = "IS_EXPRESSION_START"; - const num = 512; - TokenType2[TokenType2["num"] = num] = "num"; - const bigint = 1536; - TokenType2[TokenType2["bigint"] = bigint] = "bigint"; - const decimal = 2560; - TokenType2[TokenType2["decimal"] = decimal] = "decimal"; - const regexp3 = 3584; - TokenType2[TokenType2["regexp"] = regexp3] = "regexp"; - const string2 = 4608; - TokenType2[TokenType2["string"] = string2] = "string"; - const name = 5632; - TokenType2[TokenType2["name"] = name] = "name"; - const eof = 6144; - TokenType2[TokenType2["eof"] = eof] = "eof"; - const bracketL = 7680; - TokenType2[TokenType2["bracketL"] = bracketL] = "bracketL"; - const bracketR = 8192; - TokenType2[TokenType2["bracketR"] = bracketR] = "bracketR"; - const braceL = 9728; - TokenType2[TokenType2["braceL"] = braceL] = "braceL"; - const braceBarL = 10752; - TokenType2[TokenType2["braceBarL"] = braceBarL] = "braceBarL"; - const braceR = 11264; - TokenType2[TokenType2["braceR"] = braceR] = "braceR"; - const braceBarR = 12288; - TokenType2[TokenType2["braceBarR"] = braceBarR] = "braceBarR"; - const parenL = 13824; - TokenType2[TokenType2["parenL"] = parenL] = "parenL"; - const parenR = 14336; - TokenType2[TokenType2["parenR"] = parenR] = "parenR"; - const comma = 15360; - TokenType2[TokenType2["comma"] = comma] = "comma"; - const semi = 16384; - TokenType2[TokenType2["semi"] = semi] = "semi"; - const colon = 17408; - TokenType2[TokenType2["colon"] = colon] = "colon"; - const doubleColon = 18432; - TokenType2[TokenType2["doubleColon"] = doubleColon] = "doubleColon"; - const dot = 19456; - TokenType2[TokenType2["dot"] = dot] = "dot"; - const question = 20480; - TokenType2[TokenType2["question"] = question] = "question"; - const questionDot = 21504; - TokenType2[TokenType2["questionDot"] = questionDot] = "questionDot"; - const arrow2 = 22528; - TokenType2[TokenType2["arrow"] = arrow2] = "arrow"; - const template = 23552; - TokenType2[TokenType2["template"] = template] = "template"; - const ellipsis = 24576; - TokenType2[TokenType2["ellipsis"] = ellipsis] = "ellipsis"; - const backQuote = 25600; - TokenType2[TokenType2["backQuote"] = backQuote] = "backQuote"; - const dollarBraceL = 27136; - TokenType2[TokenType2["dollarBraceL"] = dollarBraceL] = "dollarBraceL"; - const at = 27648; - TokenType2[TokenType2["at"] = at] = "at"; - const hash2 = 29184; - TokenType2[TokenType2["hash"] = hash2] = "hash"; - const eq = 29728; - TokenType2[TokenType2["eq"] = eq] = "eq"; - const assign2 = 30752; - TokenType2[TokenType2["assign"] = assign2] = "assign"; - const preIncDec = 32640; - TokenType2[TokenType2["preIncDec"] = preIncDec] = "preIncDec"; - const postIncDec = 33664; - TokenType2[TokenType2["postIncDec"] = postIncDec] = "postIncDec"; - const bang = 34432; - TokenType2[TokenType2["bang"] = bang] = "bang"; - const tilde = 35456; - TokenType2[TokenType2["tilde"] = tilde] = "tilde"; - const pipeline = 35841; - TokenType2[TokenType2["pipeline"] = pipeline] = "pipeline"; - const nullishCoalescing = 36866; - TokenType2[TokenType2["nullishCoalescing"] = nullishCoalescing] = "nullishCoalescing"; - const logicalOR = 37890; - TokenType2[TokenType2["logicalOR"] = logicalOR] = "logicalOR"; - const logicalAND = 38915; - TokenType2[TokenType2["logicalAND"] = logicalAND] = "logicalAND"; - const bitwiseOR = 39940; - TokenType2[TokenType2["bitwiseOR"] = bitwiseOR] = "bitwiseOR"; - const bitwiseXOR = 40965; - TokenType2[TokenType2["bitwiseXOR"] = bitwiseXOR] = "bitwiseXOR"; - const bitwiseAND = 41990; - TokenType2[TokenType2["bitwiseAND"] = bitwiseAND] = "bitwiseAND"; - const equality = 43015; - TokenType2[TokenType2["equality"] = equality] = "equality"; - const lessThan = 44040; - TokenType2[TokenType2["lessThan"] = lessThan] = "lessThan"; - const greaterThan = 45064; - TokenType2[TokenType2["greaterThan"] = greaterThan] = "greaterThan"; - const relationalOrEqual = 46088; - TokenType2[TokenType2["relationalOrEqual"] = relationalOrEqual] = "relationalOrEqual"; - const bitShiftL = 47113; - TokenType2[TokenType2["bitShiftL"] = bitShiftL] = "bitShiftL"; - const bitShiftR = 48137; - TokenType2[TokenType2["bitShiftR"] = bitShiftR] = "bitShiftR"; - const plus = 49802; - TokenType2[TokenType2["plus"] = plus] = "plus"; - const minus = 50826; - TokenType2[TokenType2["minus"] = minus] = "minus"; - const modulo = 51723; - TokenType2[TokenType2["modulo"] = modulo] = "modulo"; - const star = 52235; - TokenType2[TokenType2["star"] = star] = "star"; - const slash = 53259; - TokenType2[TokenType2["slash"] = slash] = "slash"; - const exponent = 54348; - TokenType2[TokenType2["exponent"] = exponent] = "exponent"; - const jsxName = 55296; - TokenType2[TokenType2["jsxName"] = jsxName] = "jsxName"; - const jsxText = 56320; - TokenType2[TokenType2["jsxText"] = jsxText] = "jsxText"; - const jsxEmptyText = 57344; - TokenType2[TokenType2["jsxEmptyText"] = jsxEmptyText] = "jsxEmptyText"; - const jsxTagStart = 58880; - TokenType2[TokenType2["jsxTagStart"] = jsxTagStart] = "jsxTagStart"; - const jsxTagEnd = 59392; - TokenType2[TokenType2["jsxTagEnd"] = jsxTagEnd] = "jsxTagEnd"; - const typeParameterStart = 60928; - TokenType2[TokenType2["typeParameterStart"] = typeParameterStart] = "typeParameterStart"; - const nonNullAssertion = 61440; - TokenType2[TokenType2["nonNullAssertion"] = nonNullAssertion] = "nonNullAssertion"; - const _break = 62480; - TokenType2[TokenType2["_break"] = _break] = "_break"; - const _case = 63504; - TokenType2[TokenType2["_case"] = _case] = "_case"; - const _catch = 64528; - TokenType2[TokenType2["_catch"] = _catch] = "_catch"; - const _continue = 65552; - TokenType2[TokenType2["_continue"] = _continue] = "_continue"; - const _debugger = 66576; - TokenType2[TokenType2["_debugger"] = _debugger] = "_debugger"; - const _default2 = 67600; - TokenType2[TokenType2["_default"] = _default2] = "_default"; - const _do = 68624; - TokenType2[TokenType2["_do"] = _do] = "_do"; - const _else = 69648; - TokenType2[TokenType2["_else"] = _else] = "_else"; - const _finally = 70672; - TokenType2[TokenType2["_finally"] = _finally] = "_finally"; - const _for = 71696; - TokenType2[TokenType2["_for"] = _for] = "_for"; - const _function = 73232; - TokenType2[TokenType2["_function"] = _function] = "_function"; - const _if = 73744; - TokenType2[TokenType2["_if"] = _if] = "_if"; - const _return = 74768; - TokenType2[TokenType2["_return"] = _return] = "_return"; - const _switch = 75792; - TokenType2[TokenType2["_switch"] = _switch] = "_switch"; - const _throw = 77456; - TokenType2[TokenType2["_throw"] = _throw] = "_throw"; - const _try = 77840; - TokenType2[TokenType2["_try"] = _try] = "_try"; - const _var = 78864; - TokenType2[TokenType2["_var"] = _var] = "_var"; - const _let = 79888; - TokenType2[TokenType2["_let"] = _let] = "_let"; - const _const = 80912; - TokenType2[TokenType2["_const"] = _const] = "_const"; - const _while = 81936; - TokenType2[TokenType2["_while"] = _while] = "_while"; - const _with = 82960; - TokenType2[TokenType2["_with"] = _with] = "_with"; - const _new = 84496; - TokenType2[TokenType2["_new"] = _new] = "_new"; - const _this = 85520; - TokenType2[TokenType2["_this"] = _this] = "_this"; - const _super = 86544; - TokenType2[TokenType2["_super"] = _super] = "_super"; - const _class = 87568; - TokenType2[TokenType2["_class"] = _class] = "_class"; - const _extends2 = 88080; - TokenType2[TokenType2["_extends"] = _extends2] = "_extends"; - const _export = 89104; - TokenType2[TokenType2["_export"] = _export] = "_export"; - const _import = 90640; - TokenType2[TokenType2["_import"] = _import] = "_import"; - const _yield = 91664; - TokenType2[TokenType2["_yield"] = _yield] = "_yield"; - const _null = 92688; - TokenType2[TokenType2["_null"] = _null] = "_null"; - const _true = 93712; - TokenType2[TokenType2["_true"] = _true] = "_true"; - const _false = 94736; - TokenType2[TokenType2["_false"] = _false] = "_false"; - const _in = 95256; - TokenType2[TokenType2["_in"] = _in] = "_in"; - const _instanceof = 96280; - TokenType2[TokenType2["_instanceof"] = _instanceof] = "_instanceof"; - const _typeof4 = 97936; - TokenType2[TokenType2["_typeof"] = _typeof4] = "_typeof"; - const _void = 98960; - TokenType2[TokenType2["_void"] = _void] = "_void"; - const _delete = 99984; - TokenType2[TokenType2["_delete"] = _delete] = "_delete"; - const _async = 100880; - TokenType2[TokenType2["_async"] = _async] = "_async"; - const _get = 101904; - TokenType2[TokenType2["_get"] = _get] = "_get"; - const _set = 102928; - TokenType2[TokenType2["_set"] = _set] = "_set"; - const _declare = 103952; - TokenType2[TokenType2["_declare"] = _declare] = "_declare"; - const _readonly = 104976; - TokenType2[TokenType2["_readonly"] = _readonly] = "_readonly"; - const _abstract = 106e3; - TokenType2[TokenType2["_abstract"] = _abstract] = "_abstract"; - const _static = 107024; - TokenType2[TokenType2["_static"] = _static] = "_static"; - const _public = 107536; - TokenType2[TokenType2["_public"] = _public] = "_public"; - const _private = 108560; - TokenType2[TokenType2["_private"] = _private] = "_private"; - const _protected = 109584; - TokenType2[TokenType2["_protected"] = _protected] = "_protected"; - const _override = 110608; - TokenType2[TokenType2["_override"] = _override] = "_override"; - const _as = 112144; - TokenType2[TokenType2["_as"] = _as] = "_as"; - const _enum = 113168; - TokenType2[TokenType2["_enum"] = _enum] = "_enum"; - const _type = 114192; - TokenType2[TokenType2["_type"] = _type] = "_type"; - const _implements = 115216; - TokenType2[TokenType2["_implements"] = _implements] = "_implements"; -})(TokenType || (TokenType = {})); -function formatTokenType(tokenType) { - switch (tokenType) { - case TokenType.num: - return "num"; - case TokenType.bigint: - return "bigint"; - case TokenType.decimal: - return "decimal"; - case TokenType.regexp: - return "regexp"; - case TokenType.string: - return "string"; - case TokenType.name: - return "name"; - case TokenType.eof: - return "eof"; - case TokenType.bracketL: - return "["; - case TokenType.bracketR: - return "]"; - case TokenType.braceL: - return "{"; - case TokenType.braceBarL: - return "{|"; - case TokenType.braceR: - return "}"; - case TokenType.braceBarR: - return "|}"; - case TokenType.parenL: - return "("; - case TokenType.parenR: - return ")"; - case TokenType.comma: - return ","; - case TokenType.semi: - return ";"; - case TokenType.colon: - return ":"; - case TokenType.doubleColon: - return "::"; - case TokenType.dot: - return "."; - case TokenType.question: - return "?"; - case TokenType.questionDot: - return "?."; - case TokenType.arrow: - return "=>"; - case TokenType.template: - return "template"; - case TokenType.ellipsis: - return "..."; - case TokenType.backQuote: - return "`"; - case TokenType.dollarBraceL: - return "${"; - case TokenType.at: - return "@"; - case TokenType.hash: - return "#"; - case TokenType.eq: - return "="; - case TokenType.assign: - return "_="; - case TokenType.preIncDec: - return "++/--"; - case TokenType.postIncDec: - return "++/--"; - case TokenType.bang: - return "!"; - case TokenType.tilde: - return "~"; - case TokenType.pipeline: - return "|>"; - case TokenType.nullishCoalescing: - return "??"; - case TokenType.logicalOR: - return "||"; - case TokenType.logicalAND: - return "&&"; - case TokenType.bitwiseOR: - return "|"; - case TokenType.bitwiseXOR: - return "^"; - case TokenType.bitwiseAND: - return "&"; - case TokenType.equality: - return "==/!="; - case TokenType.lessThan: - return "<"; - case TokenType.greaterThan: - return ">"; - case TokenType.relationalOrEqual: - return "<=/>="; - case TokenType.bitShiftL: - return "<<"; - case TokenType.bitShiftR: - return ">>/>>>"; - case TokenType.plus: - return "+"; - case TokenType.minus: - return "-"; - case TokenType.modulo: - return "%"; - case TokenType.star: - return "*"; - case TokenType.slash: - return "/"; - case TokenType.exponent: - return "**"; - case TokenType.jsxName: - return "jsxName"; - case TokenType.jsxText: - return "jsxText"; - case TokenType.jsxEmptyText: - return "jsxEmptyText"; - case TokenType.jsxTagStart: - return "jsxTagStart"; - case TokenType.jsxTagEnd: - return "jsxTagEnd"; - case TokenType.typeParameterStart: - return "typeParameterStart"; - case TokenType.nonNullAssertion: - return "nonNullAssertion"; - case TokenType._break: - return "break"; - case TokenType._case: - return "case"; - case TokenType._catch: - return "catch"; - case TokenType._continue: - return "continue"; - case TokenType._debugger: - return "debugger"; - case TokenType._default: - return "default"; - case TokenType._do: - return "do"; - case TokenType._else: - return "else"; - case TokenType._finally: - return "finally"; - case TokenType._for: - return "for"; - case TokenType._function: - return "function"; - case TokenType._if: - return "if"; - case TokenType._return: - return "return"; - case TokenType._switch: - return "switch"; - case TokenType._throw: - return "throw"; - case TokenType._try: - return "try"; - case TokenType._var: - return "var"; - case TokenType._let: - return "let"; - case TokenType._const: - return "const"; - case TokenType._while: - return "while"; - case TokenType._with: - return "with"; - case TokenType._new: - return "new"; - case TokenType._this: - return "this"; - case TokenType._super: - return "super"; - case TokenType._class: - return "class"; - case TokenType._extends: - return "extends"; - case TokenType._export: - return "export"; - case TokenType._import: - return "import"; - case TokenType._yield: - return "yield"; - case TokenType._null: - return "null"; - case TokenType._true: - return "true"; - case TokenType._false: - return "false"; - case TokenType._in: - return "in"; - case TokenType._instanceof: - return "instanceof"; - case TokenType._typeof: - return "typeof"; - case TokenType._void: - return "void"; - case TokenType._delete: - return "delete"; - case TokenType._async: - return "async"; - case TokenType._get: - return "get"; - case TokenType._set: - return "set"; - case TokenType._declare: - return "declare"; - case TokenType._readonly: - return "readonly"; - case TokenType._abstract: - return "abstract"; - case TokenType._static: - return "static"; - case TokenType._public: - return "public"; - case TokenType._private: - return "private"; - case TokenType._protected: - return "protected"; - case TokenType._override: - return "override"; - case TokenType._as: - return "as"; - case TokenType._enum: - return "enum"; - case TokenType._type: - return "type"; - case TokenType._implements: - return "implements"; - default: - return ""; - } -} - -// node_modules/sucrase/dist/esm/parser/tokenizer/state.js -var Scope = class { - constructor(startTokenIndex, endTokenIndex, isFunctionScope) { - this.startTokenIndex = startTokenIndex; - this.endTokenIndex = endTokenIndex; - this.isFunctionScope = isFunctionScope; - } -}; -var StateSnapshot = class { - constructor(potentialArrowAt, noAnonFunctionType, inDisallowConditionalTypesContext, tokensLength, scopesLength, pos, type, contextualKeyword, start, end3, isType, scopeDepth, error) { - ; - this.potentialArrowAt = potentialArrowAt; - this.noAnonFunctionType = noAnonFunctionType; - this.inDisallowConditionalTypesContext = inDisallowConditionalTypesContext; - this.tokensLength = tokensLength; - this.scopesLength = scopesLength; - this.pos = pos; - this.type = type; - this.contextualKeyword = contextualKeyword; - this.start = start; - this.end = end3; - this.isType = isType; - this.scopeDepth = scopeDepth; - this.error = error; - } -}; -var State = class { - constructor() { - State.prototype.__init.call(this); - State.prototype.__init2.call(this); - State.prototype.__init3.call(this); - State.prototype.__init4.call(this); - State.prototype.__init5.call(this); - State.prototype.__init6.call(this); - State.prototype.__init7.call(this); - State.prototype.__init8.call(this); - State.prototype.__init9.call(this); - State.prototype.__init10.call(this); - State.prototype.__init11.call(this); - State.prototype.__init12.call(this); - State.prototype.__init13.call(this); - } - // Used to signify the start of a potential arrow function - __init() { - this.potentialArrowAt = -1; - } - // Used by Flow to handle an edge case involving function type parsing. - __init2() { - this.noAnonFunctionType = false; - } - // Used by TypeScript to handle ambiguities when parsing conditional types. - __init3() { - this.inDisallowConditionalTypesContext = false; - } - // Token store. - __init4() { - this.tokens = []; - } - // Array of all observed scopes, ordered by their ending position. - __init5() { - this.scopes = []; - } - // The current position of the tokenizer in the input. - __init6() { - this.pos = 0; - } - // Information about the current token. - __init7() { - this.type = TokenType.eof; - } - __init8() { - this.contextualKeyword = ContextualKeyword.NONE; - } - __init9() { - this.start = 0; - } - __init10() { - this.end = 0; - } - __init11() { - this.isType = false; - } - __init12() { - this.scopeDepth = 0; - } - /** - * If the parser is in an error state, then the token is always tt.eof and all functions can - * keep executing but should be written so they don't get into an infinite loop in this situation. - * - * This approach, combined with the ability to snapshot and restore state, allows us to implement - * backtracking without exceptions and without needing to explicitly propagate error states - * everywhere. - */ - __init13() { - this.error = null; - } - snapshot() { - return new StateSnapshot( - this.potentialArrowAt, - this.noAnonFunctionType, - this.inDisallowConditionalTypesContext, - this.tokens.length, - this.scopes.length, - this.pos, - this.type, - this.contextualKeyword, - this.start, - this.end, - this.isType, - this.scopeDepth, - this.error - ); - } - restoreFromSnapshot(snapshot) { - this.potentialArrowAt = snapshot.potentialArrowAt; - this.noAnonFunctionType = snapshot.noAnonFunctionType; - this.inDisallowConditionalTypesContext = snapshot.inDisallowConditionalTypesContext; - this.tokens.length = snapshot.tokensLength; - this.scopes.length = snapshot.scopesLength; - this.pos = snapshot.pos; - this.type = snapshot.type; - this.contextualKeyword = snapshot.contextualKeyword; - this.start = snapshot.start; - this.end = snapshot.end; - this.isType = snapshot.isType; - this.scopeDepth = snapshot.scopeDepth; - this.error = snapshot.error; - } -}; - -// node_modules/sucrase/dist/esm/parser/util/charcodes.js -var charCodes; -(function(charCodes2) { - const backSpace = 8; - charCodes2[charCodes2["backSpace"] = backSpace] = "backSpace"; - const lineFeed = 10; - charCodes2[charCodes2["lineFeed"] = lineFeed] = "lineFeed"; - const tab = 9; - charCodes2[charCodes2["tab"] = tab] = "tab"; - const carriageReturn = 13; - charCodes2[charCodes2["carriageReturn"] = carriageReturn] = "carriageReturn"; - const shiftOut = 14; - charCodes2[charCodes2["shiftOut"] = shiftOut] = "shiftOut"; - const space = 32; - charCodes2[charCodes2["space"] = space] = "space"; - const exclamationMark = 33; - charCodes2[charCodes2["exclamationMark"] = exclamationMark] = "exclamationMark"; - const quotationMark = 34; - charCodes2[charCodes2["quotationMark"] = quotationMark] = "quotationMark"; - const numberSign = 35; - charCodes2[charCodes2["numberSign"] = numberSign] = "numberSign"; - const dollarSign = 36; - charCodes2[charCodes2["dollarSign"] = dollarSign] = "dollarSign"; - const percentSign = 37; - charCodes2[charCodes2["percentSign"] = percentSign] = "percentSign"; - const ampersand = 38; - charCodes2[charCodes2["ampersand"] = ampersand] = "ampersand"; - const apostrophe = 39; - charCodes2[charCodes2["apostrophe"] = apostrophe] = "apostrophe"; - const leftParenthesis = 40; - charCodes2[charCodes2["leftParenthesis"] = leftParenthesis] = "leftParenthesis"; - const rightParenthesis = 41; - charCodes2[charCodes2["rightParenthesis"] = rightParenthesis] = "rightParenthesis"; - const asterisk = 42; - charCodes2[charCodes2["asterisk"] = asterisk] = "asterisk"; - const plusSign = 43; - charCodes2[charCodes2["plusSign"] = plusSign] = "plusSign"; - const comma = 44; - charCodes2[charCodes2["comma"] = comma] = "comma"; - const dash = 45; - charCodes2[charCodes2["dash"] = dash] = "dash"; - const dot = 46; - charCodes2[charCodes2["dot"] = dot] = "dot"; - const slash = 47; - charCodes2[charCodes2["slash"] = slash] = "slash"; - const digit0 = 48; - charCodes2[charCodes2["digit0"] = digit0] = "digit0"; - const digit1 = 49; - charCodes2[charCodes2["digit1"] = digit1] = "digit1"; - const digit2 = 50; - charCodes2[charCodes2["digit2"] = digit2] = "digit2"; - const digit3 = 51; - charCodes2[charCodes2["digit3"] = digit3] = "digit3"; - const digit4 = 52; - charCodes2[charCodes2["digit4"] = digit4] = "digit4"; - const digit5 = 53; - charCodes2[charCodes2["digit5"] = digit5] = "digit5"; - const digit6 = 54; - charCodes2[charCodes2["digit6"] = digit6] = "digit6"; - const digit7 = 55; - charCodes2[charCodes2["digit7"] = digit7] = "digit7"; - const digit8 = 56; - charCodes2[charCodes2["digit8"] = digit8] = "digit8"; - const digit9 = 57; - charCodes2[charCodes2["digit9"] = digit9] = "digit9"; - const colon = 58; - charCodes2[charCodes2["colon"] = colon] = "colon"; - const semicolon2 = 59; - charCodes2[charCodes2["semicolon"] = semicolon2] = "semicolon"; - const lessThan = 60; - charCodes2[charCodes2["lessThan"] = lessThan] = "lessThan"; - const equalsTo = 61; - charCodes2[charCodes2["equalsTo"] = equalsTo] = "equalsTo"; - const greaterThan = 62; - charCodes2[charCodes2["greaterThan"] = greaterThan] = "greaterThan"; - const questionMark = 63; - charCodes2[charCodes2["questionMark"] = questionMark] = "questionMark"; - const atSign = 64; - charCodes2[charCodes2["atSign"] = atSign] = "atSign"; - const uppercaseA = 65; - charCodes2[charCodes2["uppercaseA"] = uppercaseA] = "uppercaseA"; - const uppercaseB = 66; - charCodes2[charCodes2["uppercaseB"] = uppercaseB] = "uppercaseB"; - const uppercaseC = 67; - charCodes2[charCodes2["uppercaseC"] = uppercaseC] = "uppercaseC"; - const uppercaseD = 68; - charCodes2[charCodes2["uppercaseD"] = uppercaseD] = "uppercaseD"; - const uppercaseE = 69; - charCodes2[charCodes2["uppercaseE"] = uppercaseE] = "uppercaseE"; - const uppercaseF = 70; - charCodes2[charCodes2["uppercaseF"] = uppercaseF] = "uppercaseF"; - const uppercaseG = 71; - charCodes2[charCodes2["uppercaseG"] = uppercaseG] = "uppercaseG"; - const uppercaseH = 72; - charCodes2[charCodes2["uppercaseH"] = uppercaseH] = "uppercaseH"; - const uppercaseI = 73; - charCodes2[charCodes2["uppercaseI"] = uppercaseI] = "uppercaseI"; - const uppercaseJ = 74; - charCodes2[charCodes2["uppercaseJ"] = uppercaseJ] = "uppercaseJ"; - const uppercaseK = 75; - charCodes2[charCodes2["uppercaseK"] = uppercaseK] = "uppercaseK"; - const uppercaseL = 76; - charCodes2[charCodes2["uppercaseL"] = uppercaseL] = "uppercaseL"; - const uppercaseM = 77; - charCodes2[charCodes2["uppercaseM"] = uppercaseM] = "uppercaseM"; - const uppercaseN = 78; - charCodes2[charCodes2["uppercaseN"] = uppercaseN] = "uppercaseN"; - const uppercaseO = 79; - charCodes2[charCodes2["uppercaseO"] = uppercaseO] = "uppercaseO"; - const uppercaseP = 80; - charCodes2[charCodes2["uppercaseP"] = uppercaseP] = "uppercaseP"; - const uppercaseQ = 81; - charCodes2[charCodes2["uppercaseQ"] = uppercaseQ] = "uppercaseQ"; - const uppercaseR = 82; - charCodes2[charCodes2["uppercaseR"] = uppercaseR] = "uppercaseR"; - const uppercaseS = 83; - charCodes2[charCodes2["uppercaseS"] = uppercaseS] = "uppercaseS"; - const uppercaseT = 84; - charCodes2[charCodes2["uppercaseT"] = uppercaseT] = "uppercaseT"; - const uppercaseU = 85; - charCodes2[charCodes2["uppercaseU"] = uppercaseU] = "uppercaseU"; - const uppercaseV = 86; - charCodes2[charCodes2["uppercaseV"] = uppercaseV] = "uppercaseV"; - const uppercaseW = 87; - charCodes2[charCodes2["uppercaseW"] = uppercaseW] = "uppercaseW"; - const uppercaseX = 88; - charCodes2[charCodes2["uppercaseX"] = uppercaseX] = "uppercaseX"; - const uppercaseY = 89; - charCodes2[charCodes2["uppercaseY"] = uppercaseY] = "uppercaseY"; - const uppercaseZ = 90; - charCodes2[charCodes2["uppercaseZ"] = uppercaseZ] = "uppercaseZ"; - const leftSquareBracket = 91; - charCodes2[charCodes2["leftSquareBracket"] = leftSquareBracket] = "leftSquareBracket"; - const backslash = 92; - charCodes2[charCodes2["backslash"] = backslash] = "backslash"; - const rightSquareBracket = 93; - charCodes2[charCodes2["rightSquareBracket"] = rightSquareBracket] = "rightSquareBracket"; - const caret2 = 94; - charCodes2[charCodes2["caret"] = caret2] = "caret"; - const underscore = 95; - charCodes2[charCodes2["underscore"] = underscore] = "underscore"; - const graveAccent = 96; - charCodes2[charCodes2["graveAccent"] = graveAccent] = "graveAccent"; - const lowercaseA = 97; - charCodes2[charCodes2["lowercaseA"] = lowercaseA] = "lowercaseA"; - const lowercaseB = 98; - charCodes2[charCodes2["lowercaseB"] = lowercaseB] = "lowercaseB"; - const lowercaseC = 99; - charCodes2[charCodes2["lowercaseC"] = lowercaseC] = "lowercaseC"; - const lowercaseD = 100; - charCodes2[charCodes2["lowercaseD"] = lowercaseD] = "lowercaseD"; - const lowercaseE = 101; - charCodes2[charCodes2["lowercaseE"] = lowercaseE] = "lowercaseE"; - const lowercaseF = 102; - charCodes2[charCodes2["lowercaseF"] = lowercaseF] = "lowercaseF"; - const lowercaseG = 103; - charCodes2[charCodes2["lowercaseG"] = lowercaseG] = "lowercaseG"; - const lowercaseH = 104; - charCodes2[charCodes2["lowercaseH"] = lowercaseH] = "lowercaseH"; - const lowercaseI = 105; - charCodes2[charCodes2["lowercaseI"] = lowercaseI] = "lowercaseI"; - const lowercaseJ = 106; - charCodes2[charCodes2["lowercaseJ"] = lowercaseJ] = "lowercaseJ"; - const lowercaseK = 107; - charCodes2[charCodes2["lowercaseK"] = lowercaseK] = "lowercaseK"; - const lowercaseL = 108; - charCodes2[charCodes2["lowercaseL"] = lowercaseL] = "lowercaseL"; - const lowercaseM = 109; - charCodes2[charCodes2["lowercaseM"] = lowercaseM] = "lowercaseM"; - const lowercaseN = 110; - charCodes2[charCodes2["lowercaseN"] = lowercaseN] = "lowercaseN"; - const lowercaseO = 111; - charCodes2[charCodes2["lowercaseO"] = lowercaseO] = "lowercaseO"; - const lowercaseP = 112; - charCodes2[charCodes2["lowercaseP"] = lowercaseP] = "lowercaseP"; - const lowercaseQ = 113; - charCodes2[charCodes2["lowercaseQ"] = lowercaseQ] = "lowercaseQ"; - const lowercaseR = 114; - charCodes2[charCodes2["lowercaseR"] = lowercaseR] = "lowercaseR"; - const lowercaseS = 115; - charCodes2[charCodes2["lowercaseS"] = lowercaseS] = "lowercaseS"; - const lowercaseT = 116; - charCodes2[charCodes2["lowercaseT"] = lowercaseT] = "lowercaseT"; - const lowercaseU = 117; - charCodes2[charCodes2["lowercaseU"] = lowercaseU] = "lowercaseU"; - const lowercaseV = 118; - charCodes2[charCodes2["lowercaseV"] = lowercaseV] = "lowercaseV"; - const lowercaseW = 119; - charCodes2[charCodes2["lowercaseW"] = lowercaseW] = "lowercaseW"; - const lowercaseX = 120; - charCodes2[charCodes2["lowercaseX"] = lowercaseX] = "lowercaseX"; - const lowercaseY = 121; - charCodes2[charCodes2["lowercaseY"] = lowercaseY] = "lowercaseY"; - const lowercaseZ = 122; - charCodes2[charCodes2["lowercaseZ"] = lowercaseZ] = "lowercaseZ"; - const leftCurlyBrace = 123; - charCodes2[charCodes2["leftCurlyBrace"] = leftCurlyBrace] = "leftCurlyBrace"; - const verticalBar = 124; - charCodes2[charCodes2["verticalBar"] = verticalBar] = "verticalBar"; - const rightCurlyBrace = 125; - charCodes2[charCodes2["rightCurlyBrace"] = rightCurlyBrace] = "rightCurlyBrace"; - const tilde = 126; - charCodes2[charCodes2["tilde"] = tilde] = "tilde"; - const nonBreakingSpace = 160; - charCodes2[charCodes2["nonBreakingSpace"] = nonBreakingSpace] = "nonBreakingSpace"; - const oghamSpaceMark = 5760; - charCodes2[charCodes2["oghamSpaceMark"] = oghamSpaceMark] = "oghamSpaceMark"; - const lineSeparator = 8232; - charCodes2[charCodes2["lineSeparator"] = lineSeparator] = "lineSeparator"; - const paragraphSeparator = 8233; - charCodes2[charCodes2["paragraphSeparator"] = paragraphSeparator] = "paragraphSeparator"; -})(charCodes || (charCodes = {})); - -// node_modules/sucrase/dist/esm/parser/traverser/base.js -var isJSXEnabled; -var isTypeScriptEnabled; -var isFlowEnabled; -var state; -var input; -var nextContextId; -function getNextContextId() { - return nextContextId++; -} -function augmentError(error) { - if ("pos" in error) { - const loc = locationForIndex(error.pos); - error.message += ` (${loc.line}:${loc.column})`; - error.loc = loc; - } - return error; -} -var Loc = class { - constructor(line2, column2) { - this.line = line2; - this.column = column2; - } -}; -function locationForIndex(pos) { - let line2 = 1; - let column2 = 1; - for (let i4 = 0; i4 < pos; i4++) { - if (input.charCodeAt(i4) === charCodes.lineFeed) { - line2++; - column2 = 1; - } else { - column2++; - } - } - return new Loc(line2, column2); -} -function initParser(inputCode, isJSXEnabledArg, isTypeScriptEnabledArg, isFlowEnabledArg) { - input = inputCode; - state = new State(); - nextContextId = 1; - isJSXEnabled = isJSXEnabledArg; - isTypeScriptEnabled = isTypeScriptEnabledArg; - isFlowEnabled = isFlowEnabledArg; -} - -// node_modules/sucrase/dist/esm/parser/traverser/util.js -function isContextual(contextualKeyword) { - return state.contextualKeyword === contextualKeyword; -} -function isLookaheadContextual(contextualKeyword) { - const l4 = lookaheadTypeAndKeyword(); - return l4.type === TokenType.name && l4.contextualKeyword === contextualKeyword; -} -function eatContextual(contextualKeyword) { - return state.contextualKeyword === contextualKeyword && eat(TokenType.name); -} -function expectContextual(contextualKeyword) { - if (!eatContextual(contextualKeyword)) { - unexpected(); - } -} -function canInsertSemicolon() { - return match2(TokenType.eof) || match2(TokenType.braceR) || hasPrecedingLineBreak(); -} -function hasPrecedingLineBreak() { - const prevToken = state.tokens[state.tokens.length - 1]; - const lastTokEnd = prevToken ? prevToken.end : 0; - for (let i4 = lastTokEnd; i4 < state.start; i4++) { - const code = input.charCodeAt(i4); - if (code === charCodes.lineFeed || code === charCodes.carriageReturn || code === 8232 || code === 8233) { - return true; - } - } - return false; -} -function hasFollowingLineBreak() { - const nextStart = nextTokenStart(); - for (let i4 = state.end; i4 < nextStart; i4++) { - const code = input.charCodeAt(i4); - if (code === charCodes.lineFeed || code === charCodes.carriageReturn || code === 8232 || code === 8233) { - return true; - } - } - return false; -} -function isLineTerminator() { - return eat(TokenType.semi) || canInsertSemicolon(); -} -function semicolon() { - if (!isLineTerminator()) { - unexpected('Unexpected token, expected ";"'); - } -} -function expect(type) { - const matched = eat(type); - if (!matched) { - unexpected(`Unexpected token, expected "${formatTokenType(type)}"`); - } -} -function unexpected(message = "Unexpected token", pos = state.start) { - if (state.error) { - return; - } - const err = new SyntaxError(message); - err.pos = pos; - state.error = err; - state.pos = input.length; - finishToken(TokenType.eof); -} - -// node_modules/sucrase/dist/esm/parser/util/whitespace.js -var WHITESPACE_CHARS = [ - 9, - 11, - 12, - charCodes.space, - charCodes.nonBreakingSpace, - charCodes.oghamSpaceMark, - 8192, - // EN QUAD - 8193, - // EM QUAD - 8194, - // EN SPACE - 8195, - // EM SPACE - 8196, - // THREE-PER-EM SPACE - 8197, - // FOUR-PER-EM SPACE - 8198, - // SIX-PER-EM SPACE - 8199, - // FIGURE SPACE - 8200, - // PUNCTUATION SPACE - 8201, - // THIN SPACE - 8202, - // HAIR SPACE - 8239, - // NARROW NO-BREAK SPACE - 8287, - // MEDIUM MATHEMATICAL SPACE - 12288, - // IDEOGRAPHIC SPACE - 65279 - // ZERO WIDTH NO-BREAK SPACE -]; -var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g; -var IS_WHITESPACE = new Uint8Array(65536); -for (const char2 of WHITESPACE_CHARS) { - IS_WHITESPACE[char2] = 1; -} - -// node_modules/sucrase/dist/esm/parser/util/identifier.js -function computeIsIdentifierChar(code) { - if (code < 48) - return code === 36; - if (code < 58) - return true; - if (code < 65) - return false; - if (code < 91) - return true; - if (code < 97) - return code === 95; - if (code < 123) - return true; - if (code < 128) - return false; - throw new Error("Should not be called with non-ASCII char code."); -} -var IS_IDENTIFIER_CHAR = new Uint8Array(65536); -for (let i4 = 0; i4 < 128; i4++) { - IS_IDENTIFIER_CHAR[i4] = computeIsIdentifierChar(i4) ? 1 : 0; -} -for (let i4 = 128; i4 < 65536; i4++) { - IS_IDENTIFIER_CHAR[i4] = 1; -} -for (const whitespaceChar of WHITESPACE_CHARS) { - IS_IDENTIFIER_CHAR[whitespaceChar] = 0; -} -IS_IDENTIFIER_CHAR[8232] = 0; -IS_IDENTIFIER_CHAR[8233] = 0; -var IS_IDENTIFIER_START = IS_IDENTIFIER_CHAR.slice(); -for (let numChar = charCodes.digit0; numChar <= charCodes.digit9; numChar++) { - IS_IDENTIFIER_START[numChar] = 0; -} - -// node_modules/sucrase/dist/esm/parser/tokenizer/readWordTree.js -var READ_WORD_TREE = new Int32Array([ - // "" - -1, - 27, - 783, - 918, - 1755, - 2376, - 2862, - 3483, - -1, - 3699, - -1, - 4617, - 4752, - 4833, - 5130, - 5508, - 5940, - -1, - 6480, - 6939, - 7749, - 8181, - 8451, - 8613, - -1, - 8829, - -1, - // "a" - -1, - -1, - 54, - 243, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 432, - -1, - -1, - -1, - 675, - -1, - -1, - -1, - // "ab" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 81, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "abs" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 108, - -1, - -1, - -1, - -1, - -1, - -1, - // "abst" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 135, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "abstr" - -1, - 162, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "abstra" - -1, - -1, - -1, - 189, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "abstrac" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 216, - -1, - -1, - -1, - -1, - -1, - -1, - // "abstract" - ContextualKeyword._abstract << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ac" - -1, - -1, - -1, - 270, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "acc" - -1, - -1, - -1, - -1, - -1, - 297, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "acce" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 324, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "acces" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 351, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "access" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 378, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "accesso" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 405, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "accessor" - ContextualKeyword._accessor << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "as" - ContextualKeyword._as << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 459, - -1, - -1, - -1, - -1, - -1, - 594, - -1, - // "ass" - -1, - -1, - -1, - -1, - -1, - 486, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "asse" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 513, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "asser" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 540, - -1, - -1, - -1, - -1, - -1, - -1, - // "assert" - ContextualKeyword._assert << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 567, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "asserts" - ContextualKeyword._asserts << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "asy" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 621, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "asyn" - -1, - -1, - -1, - 648, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "async" - ContextualKeyword._async << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "aw" - -1, - 702, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "awa" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 729, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "awai" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 756, - -1, - -1, - -1, - -1, - -1, - -1, - // "await" - ContextualKeyword._await << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "b" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 810, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "br" - -1, - -1, - -1, - -1, - -1, - 837, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "bre" - -1, - 864, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "brea" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 891, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "break" - (TokenType._break << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "c" - -1, - 945, - -1, - -1, - -1, - -1, - -1, - -1, - 1107, - -1, - -1, - -1, - 1242, - -1, - -1, - 1350, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ca" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 972, - 1026, - -1, - -1, - -1, - -1, - -1, - -1, - // "cas" - -1, - -1, - -1, - -1, - -1, - 999, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "case" - (TokenType._case << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "cat" - -1, - -1, - -1, - 1053, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "catc" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1080, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "catch" - (TokenType._catch << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ch" - -1, - -1, - -1, - -1, - -1, - 1134, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "che" - -1, - -1, - -1, - 1161, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "chec" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1188, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "check" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1215, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "checks" - ContextualKeyword._checks << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "cl" - -1, - 1269, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "cla" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1296, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "clas" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1323, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "class" - (TokenType._class << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "co" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1377, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "con" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1404, - 1620, - -1, - -1, - -1, - -1, - -1, - -1, - // "cons" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1431, - -1, - -1, - -1, - -1, - -1, - -1, - // "const" - (TokenType._const << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1458, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "constr" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1485, - -1, - -1, - -1, - -1, - -1, - // "constru" - -1, - -1, - -1, - 1512, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "construc" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1539, - -1, - -1, - -1, - -1, - -1, - -1, - // "construct" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1566, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "constructo" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1593, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "constructor" - ContextualKeyword._constructor << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "cont" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1647, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "conti" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1674, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "contin" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1701, - -1, - -1, - -1, - -1, - -1, - // "continu" - -1, - -1, - -1, - -1, - -1, - 1728, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "continue" - (TokenType._continue << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "d" - -1, - -1, - -1, - -1, - -1, - 1782, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2349, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "de" - -1, - -1, - 1809, - 1971, - -1, - -1, - 2106, - -1, - -1, - -1, - -1, - -1, - 2241, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "deb" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1836, - -1, - -1, - -1, - -1, - -1, - // "debu" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1863, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "debug" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1890, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "debugg" - -1, - -1, - -1, - -1, - -1, - 1917, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "debugge" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1944, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "debugger" - (TokenType._debugger << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "dec" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1998, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "decl" - -1, - 2025, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "decla" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2052, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "declar" - -1, - -1, - -1, - -1, - -1, - 2079, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "declare" - ContextualKeyword._declare << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "def" - -1, - 2133, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "defa" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2160, - -1, - -1, - -1, - -1, - -1, - // "defau" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2187, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "defaul" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2214, - -1, - -1, - -1, - -1, - -1, - -1, - // "default" - (TokenType._default << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "del" - -1, - -1, - -1, - -1, - -1, - 2268, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "dele" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2295, - -1, - -1, - -1, - -1, - -1, - -1, - // "delet" - -1, - -1, - -1, - -1, - -1, - 2322, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "delete" - (TokenType._delete << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "do" - (TokenType._do << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "e" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2403, - -1, - 2484, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2565, - -1, - -1, - // "el" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2430, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "els" - -1, - -1, - -1, - -1, - -1, - 2457, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "else" - (TokenType._else << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "en" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2511, - -1, - -1, - -1, - -1, - -1, - // "enu" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2538, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "enum" - ContextualKeyword._enum << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ex" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2592, - -1, - -1, - -1, - 2727, - -1, - -1, - -1, - -1, - -1, - -1, - // "exp" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2619, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "expo" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2646, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "expor" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2673, - -1, - -1, - -1, - -1, - -1, - -1, - // "export" - (TokenType._export << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2700, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "exports" - ContextualKeyword._exports << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ext" - -1, - -1, - -1, - -1, - -1, - 2754, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "exte" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2781, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "exten" - -1, - -1, - -1, - -1, - 2808, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "extend" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2835, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "extends" - (TokenType._extends << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "f" - -1, - 2889, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2997, - -1, - -1, - -1, - -1, - -1, - 3159, - -1, - -1, - 3213, - -1, - -1, - 3294, - -1, - -1, - -1, - -1, - -1, - // "fa" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2916, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fal" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2943, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fals" - -1, - -1, - -1, - -1, - -1, - 2970, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "false" - (TokenType._false << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3024, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fin" - -1, - 3051, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fina" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3078, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "final" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3105, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "finall" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3132, - -1, - // "finally" - (TokenType._finally << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fo" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3186, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "for" - (TokenType._for << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fr" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3240, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fro" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3267, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "from" - ContextualKeyword._from << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fu" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3321, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "fun" - -1, - -1, - -1, - 3348, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "func" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3375, - -1, - -1, - -1, - -1, - -1, - -1, - // "funct" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3402, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "functi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3429, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "functio" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3456, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "function" - (TokenType._function << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "g" - -1, - -1, - -1, - -1, - -1, - 3510, - -1, - -1, - -1, - -1, - -1, - -1, - 3564, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ge" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3537, - -1, - -1, - -1, - -1, - -1, - -1, - // "get" - ContextualKeyword._get << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "gl" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3591, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "glo" - -1, - -1, - 3618, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "glob" - -1, - 3645, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "globa" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3672, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "global" - ContextualKeyword._global << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "i" - -1, - -1, - -1, - -1, - -1, - -1, - 3726, - -1, - -1, - -1, - -1, - -1, - -1, - 3753, - 4077, - -1, - -1, - -1, - -1, - 4590, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "if" - (TokenType._if << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "im" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3780, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "imp" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3807, - -1, - -1, - 3996, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "impl" - -1, - -1, - -1, - -1, - -1, - 3834, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "imple" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3861, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "implem" - -1, - -1, - -1, - -1, - -1, - 3888, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "impleme" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3915, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "implemen" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3942, - -1, - -1, - -1, - -1, - -1, - -1, - // "implement" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3969, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "implements" - ContextualKeyword._implements << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "impo" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4023, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "impor" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4050, - -1, - -1, - -1, - -1, - -1, - -1, - // "import" - (TokenType._import << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "in" - (TokenType._in << 1) + 1, - -1, - -1, - -1, - -1, - -1, - 4104, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4185, - 4401, - -1, - -1, - -1, - -1, - -1, - -1, - // "inf" - -1, - -1, - -1, - -1, - -1, - 4131, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "infe" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4158, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "infer" - ContextualKeyword._infer << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ins" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4212, - -1, - -1, - -1, - -1, - -1, - -1, - // "inst" - -1, - 4239, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "insta" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4266, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "instan" - -1, - -1, - -1, - 4293, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "instanc" - -1, - -1, - -1, - -1, - -1, - 4320, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "instance" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4347, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "instanceo" - -1, - -1, - -1, - -1, - -1, - -1, - 4374, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "instanceof" - (TokenType._instanceof << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "int" - -1, - -1, - -1, - -1, - -1, - 4428, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "inte" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4455, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "inter" - -1, - -1, - -1, - -1, - -1, - -1, - 4482, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "interf" - -1, - 4509, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "interfa" - -1, - -1, - -1, - 4536, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "interfac" - -1, - -1, - -1, - -1, - -1, - 4563, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "interface" - ContextualKeyword._interface << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "is" - ContextualKeyword._is << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "k" - -1, - -1, - -1, - -1, - -1, - 4644, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ke" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4671, - -1, - // "key" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4698, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "keyo" - -1, - -1, - -1, - -1, - -1, - -1, - 4725, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "keyof" - ContextualKeyword._keyof << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "l" - -1, - -1, - -1, - -1, - -1, - 4779, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "le" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4806, - -1, - -1, - -1, - -1, - -1, - -1, - // "let" - (TokenType._let << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "m" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4860, - -1, - -1, - -1, - -1, - -1, - 4995, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "mi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4887, - -1, - -1, - // "mix" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4914, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "mixi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4941, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "mixin" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4968, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "mixins" - ContextualKeyword._mixins << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "mo" - -1, - -1, - -1, - -1, - 5022, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "mod" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5049, - -1, - -1, - -1, - -1, - -1, - // "modu" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5076, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "modul" - -1, - -1, - -1, - -1, - -1, - 5103, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "module" - ContextualKeyword._module << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "n" - -1, - 5157, - -1, - -1, - -1, - 5373, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5427, - -1, - -1, - -1, - -1, - -1, - // "na" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5184, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "nam" - -1, - -1, - -1, - -1, - -1, - 5211, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "name" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5238, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "names" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5265, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "namesp" - -1, - 5292, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "namespa" - -1, - -1, - -1, - 5319, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "namespac" - -1, - -1, - -1, - -1, - -1, - 5346, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "namespace" - ContextualKeyword._namespace << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ne" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5400, - -1, - -1, - -1, - // "new" - (TokenType._new << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "nu" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5454, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "nul" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5481, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "null" - (TokenType._null << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "o" - -1, - -1, - -1, - -1, - -1, - -1, - 5535, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5562, - -1, - -1, - -1, - -1, - 5697, - 5751, - -1, - -1, - -1, - -1, - // "of" - ContextualKeyword._of << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "op" - -1, - 5589, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "opa" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5616, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "opaq" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5643, - -1, - -1, - -1, - -1, - -1, - // "opaqu" - -1, - -1, - -1, - -1, - -1, - 5670, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "opaque" - ContextualKeyword._opaque << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ou" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5724, - -1, - -1, - -1, - -1, - -1, - -1, - // "out" - ContextualKeyword._out << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ov" - -1, - -1, - -1, - -1, - -1, - 5778, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ove" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5805, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "over" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5832, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "overr" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5859, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "overri" - -1, - -1, - -1, - -1, - 5886, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "overrid" - -1, - -1, - -1, - -1, - -1, - 5913, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "override" - ContextualKeyword._override << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "p" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5967, - -1, - -1, - 6345, - -1, - -1, - -1, - -1, - -1, - // "pr" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5994, - -1, - -1, - -1, - -1, - -1, - 6129, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "pri" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6021, - -1, - -1, - -1, - -1, - // "priv" - -1, - 6048, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "priva" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6075, - -1, - -1, - -1, - -1, - -1, - -1, - // "privat" - -1, - -1, - -1, - -1, - -1, - 6102, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "private" - ContextualKeyword._private << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "pro" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6156, - -1, - -1, - -1, - -1, - -1, - -1, - // "prot" - -1, - -1, - -1, - -1, - -1, - 6183, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6318, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "prote" - -1, - -1, - -1, - 6210, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "protec" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6237, - -1, - -1, - -1, - -1, - -1, - -1, - // "protect" - -1, - -1, - -1, - -1, - -1, - 6264, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "protecte" - -1, - -1, - -1, - -1, - 6291, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "protected" - ContextualKeyword._protected << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "proto" - ContextualKeyword._proto << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "pu" - -1, - -1, - 6372, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "pub" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6399, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "publ" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6426, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "publi" - -1, - -1, - -1, - 6453, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "public" - ContextualKeyword._public << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "r" - -1, - -1, - -1, - -1, - -1, - 6507, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "re" - -1, - 6534, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6696, - -1, - -1, - 6831, - -1, - -1, - -1, - -1, - -1, - -1, - // "rea" - -1, - -1, - -1, - -1, - 6561, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "read" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6588, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "reado" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6615, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "readon" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6642, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "readonl" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6669, - -1, - // "readonly" - ContextualKeyword._readonly << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "req" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6723, - -1, - -1, - -1, - -1, - -1, - // "requ" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6750, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "requi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6777, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "requir" - -1, - -1, - -1, - -1, - -1, - 6804, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "require" - ContextualKeyword._require << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ret" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6858, - -1, - -1, - -1, - -1, - -1, - // "retu" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6885, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "retur" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6912, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "return" - (TokenType._return << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "s" - -1, - 6966, - -1, - -1, - -1, - 7182, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7236, - 7371, - -1, - 7479, - -1, - 7614, - -1, - // "sa" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6993, - -1, - -1, - -1, - -1, - -1, - -1, - // "sat" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7020, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "sati" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7047, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "satis" - -1, - -1, - -1, - -1, - -1, - -1, - 7074, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "satisf" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7101, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "satisfi" - -1, - -1, - -1, - -1, - -1, - 7128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "satisfie" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7155, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "satisfies" - ContextualKeyword._satisfies << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "se" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7209, - -1, - -1, - -1, - -1, - -1, - -1, - // "set" - ContextualKeyword._set << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "st" - -1, - 7263, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "sta" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7290, - -1, - -1, - -1, - -1, - -1, - -1, - // "stat" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7317, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "stati" - -1, - -1, - -1, - 7344, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "static" - ContextualKeyword._static << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "su" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7398, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "sup" - -1, - -1, - -1, - -1, - -1, - 7425, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "supe" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7452, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "super" - (TokenType._super << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "sw" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7506, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "swi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7533, - -1, - -1, - -1, - -1, - -1, - -1, - // "swit" - -1, - -1, - -1, - 7560, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "switc" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7587, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "switch" - (TokenType._switch << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "sy" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7641, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "sym" - -1, - -1, - 7668, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "symb" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7695, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "symbo" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7722, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "symbol" - ContextualKeyword._symbol << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "t" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7776, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7938, - -1, - -1, - -1, - -1, - -1, - -1, - 8046, - -1, - // "th" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7803, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7857, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "thi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7830, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "this" - (TokenType._this << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "thr" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7884, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "thro" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7911, - -1, - -1, - -1, - // "throw" - (TokenType._throw << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "tr" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7965, - -1, - -1, - -1, - 8019, - -1, - // "tru" - -1, - -1, - -1, - -1, - -1, - 7992, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "true" - (TokenType._true << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "try" - (TokenType._try << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "ty" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8073, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "typ" - -1, - -1, - -1, - -1, - -1, - 8100, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "type" - ContextualKeyword._type << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8127, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "typeo" - -1, - -1, - -1, - -1, - -1, - -1, - 8154, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "typeof" - (TokenType._typeof << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "u" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8208, - -1, - -1, - -1, - -1, - 8343, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "un" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8235, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "uni" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8262, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "uniq" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8289, - -1, - -1, - -1, - -1, - -1, - // "uniqu" - -1, - -1, - -1, - -1, - -1, - 8316, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "unique" - ContextualKeyword._unique << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "us" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8370, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "usi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8397, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "usin" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8424, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "using" - ContextualKeyword._using << 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "v" - -1, - 8478, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8532, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "va" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8505, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "var" - (TokenType._var << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "vo" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8559, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "voi" - -1, - -1, - -1, - -1, - 8586, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "void" - (TokenType._void << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "w" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8640, - 8748, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "wh" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8667, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "whi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8694, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "whil" - -1, - -1, - -1, - -1, - -1, - 8721, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "while" - (TokenType._while << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "wi" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8775, - -1, - -1, - -1, - -1, - -1, - -1, - // "wit" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8802, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "with" - (TokenType._with << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "y" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8856, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "yi" - -1, - -1, - -1, - -1, - -1, - 8883, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "yie" - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8910, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "yiel" - -1, - -1, - -1, - -1, - 8937, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - // "yield" - (TokenType._yield << 1) + 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 -]); - -// node_modules/sucrase/dist/esm/parser/tokenizer/readWord.js -function readWord() { - let treePos = 0; - let code = 0; - let pos = state.pos; - while (pos < input.length) { - code = input.charCodeAt(pos); - if (code < charCodes.lowercaseA || code > charCodes.lowercaseZ) { - break; - } - const next3 = READ_WORD_TREE[treePos + (code - charCodes.lowercaseA) + 1]; - if (next3 === -1) { - break; - } else { - treePos = next3; - pos++; - } - } - const keywordValue = READ_WORD_TREE[treePos]; - if (keywordValue > -1 && !IS_IDENTIFIER_CHAR[code]) { - state.pos = pos; - if (keywordValue & 1) { - finishToken(keywordValue >>> 1); - } else { - finishToken(TokenType.name, keywordValue >>> 1); - } - return; - } - while (pos < input.length) { - const ch = input.charCodeAt(pos); - if (IS_IDENTIFIER_CHAR[ch]) { - pos++; - } else if (ch === charCodes.backslash) { - pos += 2; - if (input.charCodeAt(pos) === charCodes.leftCurlyBrace) { - while (pos < input.length && input.charCodeAt(pos) !== charCodes.rightCurlyBrace) { - pos++; - } - pos++; - } - } else if (ch === charCodes.atSign && input.charCodeAt(pos + 1) === charCodes.atSign) { - pos += 2; - } else { - break; - } - } - state.pos = pos; - finishToken(TokenType.name); -} - -// node_modules/sucrase/dist/esm/parser/tokenizer/index.js -var IdentifierRole; -(function(IdentifierRole2) { - const Access = 0; - IdentifierRole2[IdentifierRole2["Access"] = Access] = "Access"; - const ExportAccess = Access + 1; - IdentifierRole2[IdentifierRole2["ExportAccess"] = ExportAccess] = "ExportAccess"; - const TopLevelDeclaration = ExportAccess + 1; - IdentifierRole2[IdentifierRole2["TopLevelDeclaration"] = TopLevelDeclaration] = "TopLevelDeclaration"; - const FunctionScopedDeclaration = TopLevelDeclaration + 1; - IdentifierRole2[IdentifierRole2["FunctionScopedDeclaration"] = FunctionScopedDeclaration] = "FunctionScopedDeclaration"; - const BlockScopedDeclaration = FunctionScopedDeclaration + 1; - IdentifierRole2[IdentifierRole2["BlockScopedDeclaration"] = BlockScopedDeclaration] = "BlockScopedDeclaration"; - const ObjectShorthandTopLevelDeclaration = BlockScopedDeclaration + 1; - IdentifierRole2[IdentifierRole2["ObjectShorthandTopLevelDeclaration"] = ObjectShorthandTopLevelDeclaration] = "ObjectShorthandTopLevelDeclaration"; - const ObjectShorthandFunctionScopedDeclaration = ObjectShorthandTopLevelDeclaration + 1; - IdentifierRole2[IdentifierRole2["ObjectShorthandFunctionScopedDeclaration"] = ObjectShorthandFunctionScopedDeclaration] = "ObjectShorthandFunctionScopedDeclaration"; - const ObjectShorthandBlockScopedDeclaration = ObjectShorthandFunctionScopedDeclaration + 1; - IdentifierRole2[IdentifierRole2["ObjectShorthandBlockScopedDeclaration"] = ObjectShorthandBlockScopedDeclaration] = "ObjectShorthandBlockScopedDeclaration"; - const ObjectShorthand = ObjectShorthandBlockScopedDeclaration + 1; - IdentifierRole2[IdentifierRole2["ObjectShorthand"] = ObjectShorthand] = "ObjectShorthand"; - const ImportDeclaration = ObjectShorthand + 1; - IdentifierRole2[IdentifierRole2["ImportDeclaration"] = ImportDeclaration] = "ImportDeclaration"; - const ObjectKey = ImportDeclaration + 1; - IdentifierRole2[IdentifierRole2["ObjectKey"] = ObjectKey] = "ObjectKey"; - const ImportAccess = ObjectKey + 1; - IdentifierRole2[IdentifierRole2["ImportAccess"] = ImportAccess] = "ImportAccess"; -})(IdentifierRole || (IdentifierRole = {})); -var JSXRole; -(function(JSXRole2) { - const NoChildren = 0; - JSXRole2[JSXRole2["NoChildren"] = NoChildren] = "NoChildren"; - const OneChild = NoChildren + 1; - JSXRole2[JSXRole2["OneChild"] = OneChild] = "OneChild"; - const StaticChildren = OneChild + 1; - JSXRole2[JSXRole2["StaticChildren"] = StaticChildren] = "StaticChildren"; - const KeyAfterPropSpread = StaticChildren + 1; - JSXRole2[JSXRole2["KeyAfterPropSpread"] = KeyAfterPropSpread] = "KeyAfterPropSpread"; -})(JSXRole || (JSXRole = {})); -function isDeclaration(token2) { - const role = token2.identifierRole; - return role === IdentifierRole.TopLevelDeclaration || role === IdentifierRole.FunctionScopedDeclaration || role === IdentifierRole.BlockScopedDeclaration || role === IdentifierRole.ObjectShorthandTopLevelDeclaration || role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration || role === IdentifierRole.ObjectShorthandBlockScopedDeclaration; -} -function isNonTopLevelDeclaration(token2) { - const role = token2.identifierRole; - return role === IdentifierRole.FunctionScopedDeclaration || role === IdentifierRole.BlockScopedDeclaration || role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration || role === IdentifierRole.ObjectShorthandBlockScopedDeclaration; -} -function isTopLevelDeclaration(token2) { - const role = token2.identifierRole; - return role === IdentifierRole.TopLevelDeclaration || role === IdentifierRole.ObjectShorthandTopLevelDeclaration || role === IdentifierRole.ImportDeclaration; -} -function isBlockScopedDeclaration(token2) { - const role = token2.identifierRole; - return role === IdentifierRole.TopLevelDeclaration || role === IdentifierRole.BlockScopedDeclaration || role === IdentifierRole.ObjectShorthandTopLevelDeclaration || role === IdentifierRole.ObjectShorthandBlockScopedDeclaration; -} -function isFunctionScopedDeclaration(token2) { - const role = token2.identifierRole; - return role === IdentifierRole.FunctionScopedDeclaration || role === IdentifierRole.ObjectShorthandFunctionScopedDeclaration; -} -function isObjectShorthandDeclaration(token2) { - return token2.identifierRole === IdentifierRole.ObjectShorthandTopLevelDeclaration || token2.identifierRole === IdentifierRole.ObjectShorthandBlockScopedDeclaration || token2.identifierRole === IdentifierRole.ObjectShorthandFunctionScopedDeclaration; -} -var Token = class { - constructor() { - this.type = state.type; - this.contextualKeyword = state.contextualKeyword; - this.start = state.start; - this.end = state.end; - this.scopeDepth = state.scopeDepth; - this.isType = state.isType; - this.identifierRole = null; - this.jsxRole = null; - this.shadowsGlobal = false; - this.isAsyncOperation = false; - this.contextId = null; - this.rhsEndIndex = null; - this.isExpression = false; - this.numNullishCoalesceStarts = 0; - this.numNullishCoalesceEnds = 0; - this.isOptionalChainStart = false; - this.isOptionalChainEnd = false; - this.subscriptStartIndex = null; - this.nullishStartIndex = null; - } - // Initially false for all tokens, then may be computed in a follow-up step that does scope - // analysis. - // Initially false for all tokens, but may be set during transform to mark it as containing an - // await operation. - // For assignments, the index of the RHS. For export tokens, the end of the export. - // For class tokens, records if the class is a class expression or a class statement. - // Number of times to insert a `nullishCoalesce(` snippet before this token. - // Number of times to insert a `)` snippet after this token. - // If true, insert an `optionalChain([` snippet before this token. - // If true, insert a `])` snippet after this token. - // Tag for `.`, `?.`, `[`, `?.[`, `(`, and `?.(` to denote the "root" token for this - // subscript chain. This can be used to determine if this chain is an optional chain. - // Tag for `??` operators to denote the root token for this nullish coalescing call. -}; -function next() { - state.tokens.push(new Token()); - nextToken(); -} -function nextTemplateToken() { - state.tokens.push(new Token()); - state.start = state.pos; - readTmplToken(); -} -function retokenizeSlashAsRegex() { - if (state.type === TokenType.assign) { - --state.pos; - } - readRegexp(); -} -function pushTypeContext(existingTokensInType) { - for (let i4 = state.tokens.length - existingTokensInType; i4 < state.tokens.length; i4++) { - state.tokens[i4].isType = true; - } - const oldIsType = state.isType; - state.isType = true; - return oldIsType; -} -function popTypeContext(oldIsType) { - state.isType = oldIsType; -} -function eat(type) { - if (match2(type)) { - next(); - return true; - } else { - return false; - } -} -function eatTypeToken(tokenType) { - const oldIsType = state.isType; - state.isType = true; - eat(tokenType); - state.isType = oldIsType; -} -function match2(type) { - return state.type === type; -} -function lookaheadType() { - const snapshot = state.snapshot(); - next(); - const type = state.type; - state.restoreFromSnapshot(snapshot); - return type; -} -var TypeAndKeyword = class { - constructor(type, contextualKeyword) { - this.type = type; - this.contextualKeyword = contextualKeyword; - } -}; -function lookaheadTypeAndKeyword() { - const snapshot = state.snapshot(); - next(); - const type = state.type; - const contextualKeyword = state.contextualKeyword; - state.restoreFromSnapshot(snapshot); - return new TypeAndKeyword(type, contextualKeyword); -} -function nextTokenStart() { - return nextTokenStartSince(state.pos); -} -function nextTokenStartSince(pos) { - skipWhiteSpace.lastIndex = pos; - const skip = skipWhiteSpace.exec(input); - return pos + skip[0].length; -} -function lookaheadCharCode() { - return input.charCodeAt(nextTokenStart()); -} -function nextToken() { - skipSpace(); - state.start = state.pos; - if (state.pos >= input.length) { - const tokens = state.tokens; - if (tokens.length >= 2 && tokens[tokens.length - 1].start >= input.length && tokens[tokens.length - 2].start >= input.length) { - unexpected("Unexpectedly reached the end of input."); - } - finishToken(TokenType.eof); - return; - } - readToken(input.charCodeAt(state.pos)); -} -function readToken(code) { - if (IS_IDENTIFIER_START[code] || code === charCodes.backslash || code === charCodes.atSign && input.charCodeAt(state.pos + 1) === charCodes.atSign) { - readWord(); - } else { - getTokenFromCode(code); - } -} -function skipBlockComment() { - while (input.charCodeAt(state.pos) !== charCodes.asterisk || input.charCodeAt(state.pos + 1) !== charCodes.slash) { - state.pos++; - if (state.pos > input.length) { - unexpected("Unterminated comment", state.pos - 2); - return; - } - } - state.pos += 2; -} -function skipLineComment(startSkip) { - let ch = input.charCodeAt(state.pos += startSkip); - if (state.pos < input.length) { - while (ch !== charCodes.lineFeed && ch !== charCodes.carriageReturn && ch !== charCodes.lineSeparator && ch !== charCodes.paragraphSeparator && ++state.pos < input.length) { - ch = input.charCodeAt(state.pos); - } - } -} -function skipSpace() { - while (state.pos < input.length) { - const ch = input.charCodeAt(state.pos); - switch (ch) { - case charCodes.carriageReturn: - if (input.charCodeAt(state.pos + 1) === charCodes.lineFeed) { - ++state.pos; - } - case charCodes.lineFeed: - case charCodes.lineSeparator: - case charCodes.paragraphSeparator: - ++state.pos; - break; - case charCodes.slash: - switch (input.charCodeAt(state.pos + 1)) { - case charCodes.asterisk: - state.pos += 2; - skipBlockComment(); - break; - case charCodes.slash: - skipLineComment(2); - break; - default: - return; - } - break; - default: - if (IS_WHITESPACE[ch]) { - ++state.pos; - } else { - return; - } - } - } -} -function finishToken(type, contextualKeyword = ContextualKeyword.NONE) { - state.end = state.pos; - state.type = type; - state.contextualKeyword = contextualKeyword; -} -function readToken_dot() { - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar >= charCodes.digit0 && nextChar <= charCodes.digit9) { - readNumber(true); - return; - } - if (nextChar === charCodes.dot && input.charCodeAt(state.pos + 2) === charCodes.dot) { - state.pos += 3; - finishToken(TokenType.ellipsis); - } else { - ++state.pos; - finishToken(TokenType.dot); - } -} -function readToken_slash() { - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar === charCodes.equalsTo) { - finishOp(TokenType.assign, 2); - } else { - finishOp(TokenType.slash, 1); - } -} -function readToken_mult_modulo(code) { - let tokenType = code === charCodes.asterisk ? TokenType.star : TokenType.modulo; - let width = 1; - let nextChar = input.charCodeAt(state.pos + 1); - if (code === charCodes.asterisk && nextChar === charCodes.asterisk) { - width++; - nextChar = input.charCodeAt(state.pos + 2); - tokenType = TokenType.exponent; - } - if (nextChar === charCodes.equalsTo && input.charCodeAt(state.pos + 2) !== charCodes.greaterThan) { - width++; - tokenType = TokenType.assign; - } - finishOp(tokenType, width); -} -function readToken_pipe_amp(code) { - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar === code) { - if (input.charCodeAt(state.pos + 2) === charCodes.equalsTo) { - finishOp(TokenType.assign, 3); - } else { - finishOp(code === charCodes.verticalBar ? TokenType.logicalOR : TokenType.logicalAND, 2); - } - return; - } - if (code === charCodes.verticalBar) { - if (nextChar === charCodes.greaterThan) { - finishOp(TokenType.pipeline, 2); - return; - } else if (nextChar === charCodes.rightCurlyBrace && isFlowEnabled) { - finishOp(TokenType.braceBarR, 2); - return; - } - } - if (nextChar === charCodes.equalsTo) { - finishOp(TokenType.assign, 2); - return; - } - finishOp(code === charCodes.verticalBar ? TokenType.bitwiseOR : TokenType.bitwiseAND, 1); -} -function readToken_caret() { - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar === charCodes.equalsTo) { - finishOp(TokenType.assign, 2); - } else { - finishOp(TokenType.bitwiseXOR, 1); - } -} -function readToken_plus_min(code) { - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar === code) { - finishOp(TokenType.preIncDec, 2); - return; - } - if (nextChar === charCodes.equalsTo) { - finishOp(TokenType.assign, 2); - } else if (code === charCodes.plusSign) { - finishOp(TokenType.plus, 1); - } else { - finishOp(TokenType.minus, 1); - } -} -function readToken_lt() { - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar === charCodes.lessThan) { - if (input.charCodeAt(state.pos + 2) === charCodes.equalsTo) { - finishOp(TokenType.assign, 3); - return; - } - if (state.isType) { - finishOp(TokenType.lessThan, 1); - } else { - finishOp(TokenType.bitShiftL, 2); - } - return; - } - if (nextChar === charCodes.equalsTo) { - finishOp(TokenType.relationalOrEqual, 2); - } else { - finishOp(TokenType.lessThan, 1); - } -} -function readToken_gt() { - if (state.isType) { - finishOp(TokenType.greaterThan, 1); - return; - } - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar === charCodes.greaterThan) { - const size2 = input.charCodeAt(state.pos + 2) === charCodes.greaterThan ? 3 : 2; - if (input.charCodeAt(state.pos + size2) === charCodes.equalsTo) { - finishOp(TokenType.assign, size2 + 1); - return; - } - finishOp(TokenType.bitShiftR, size2); - return; - } - if (nextChar === charCodes.equalsTo) { - finishOp(TokenType.relationalOrEqual, 2); - } else { - finishOp(TokenType.greaterThan, 1); - } -} -function rescan_gt() { - if (state.type === TokenType.greaterThan) { - state.pos -= 1; - readToken_gt(); - } -} -function readToken_eq_excl(code) { - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar === charCodes.equalsTo) { - finishOp(TokenType.equality, input.charCodeAt(state.pos + 2) === charCodes.equalsTo ? 3 : 2); - return; - } - if (code === charCodes.equalsTo && nextChar === charCodes.greaterThan) { - state.pos += 2; - finishToken(TokenType.arrow); - return; - } - finishOp(code === charCodes.equalsTo ? TokenType.eq : TokenType.bang, 1); -} -function readToken_question() { - const nextChar = input.charCodeAt(state.pos + 1); - const nextChar2 = input.charCodeAt(state.pos + 2); - if (nextChar === charCodes.questionMark && // In Flow (but not TypeScript), ??string is a valid type that should be - // tokenized as two individual ? tokens. - !(isFlowEnabled && state.isType)) { - if (nextChar2 === charCodes.equalsTo) { - finishOp(TokenType.assign, 3); - } else { - finishOp(TokenType.nullishCoalescing, 2); - } - } else if (nextChar === charCodes.dot && !(nextChar2 >= charCodes.digit0 && nextChar2 <= charCodes.digit9)) { - state.pos += 2; - finishToken(TokenType.questionDot); - } else { - ++state.pos; - finishToken(TokenType.question); - } -} -function getTokenFromCode(code) { - switch (code) { - case charCodes.numberSign: - ++state.pos; - finishToken(TokenType.hash); - return; - case charCodes.dot: - readToken_dot(); - return; - case charCodes.leftParenthesis: - ++state.pos; - finishToken(TokenType.parenL); - return; - case charCodes.rightParenthesis: - ++state.pos; - finishToken(TokenType.parenR); - return; - case charCodes.semicolon: - ++state.pos; - finishToken(TokenType.semi); - return; - case charCodes.comma: - ++state.pos; - finishToken(TokenType.comma); - return; - case charCodes.leftSquareBracket: - ++state.pos; - finishToken(TokenType.bracketL); - return; - case charCodes.rightSquareBracket: - ++state.pos; - finishToken(TokenType.bracketR); - return; - case charCodes.leftCurlyBrace: - if (isFlowEnabled && input.charCodeAt(state.pos + 1) === charCodes.verticalBar) { - finishOp(TokenType.braceBarL, 2); - } else { - ++state.pos; - finishToken(TokenType.braceL); - } - return; - case charCodes.rightCurlyBrace: - ++state.pos; - finishToken(TokenType.braceR); - return; - case charCodes.colon: - if (input.charCodeAt(state.pos + 1) === charCodes.colon) { - finishOp(TokenType.doubleColon, 2); - } else { - ++state.pos; - finishToken(TokenType.colon); - } - return; - case charCodes.questionMark: - readToken_question(); - return; - case charCodes.atSign: - ++state.pos; - finishToken(TokenType.at); - return; - case charCodes.graveAccent: - ++state.pos; - finishToken(TokenType.backQuote); - return; - case charCodes.digit0: { - const nextChar = input.charCodeAt(state.pos + 1); - if (nextChar === charCodes.lowercaseX || nextChar === charCodes.uppercaseX || nextChar === charCodes.lowercaseO || nextChar === charCodes.uppercaseO || nextChar === charCodes.lowercaseB || nextChar === charCodes.uppercaseB) { - readRadixNumber(); - return; - } - } - case charCodes.digit1: - case charCodes.digit2: - case charCodes.digit3: - case charCodes.digit4: - case charCodes.digit5: - case charCodes.digit6: - case charCodes.digit7: - case charCodes.digit8: - case charCodes.digit9: - readNumber(false); - return; - case charCodes.quotationMark: - case charCodes.apostrophe: - readString(code); - return; - case charCodes.slash: - readToken_slash(); - return; - case charCodes.percentSign: - case charCodes.asterisk: - readToken_mult_modulo(code); - return; - case charCodes.verticalBar: - case charCodes.ampersand: - readToken_pipe_amp(code); - return; - case charCodes.caret: - readToken_caret(); - return; - case charCodes.plusSign: - case charCodes.dash: - readToken_plus_min(code); - return; - case charCodes.lessThan: - readToken_lt(); - return; - case charCodes.greaterThan: - readToken_gt(); - return; - case charCodes.equalsTo: - case charCodes.exclamationMark: - readToken_eq_excl(code); - return; - case charCodes.tilde: - finishOp(TokenType.tilde, 1); - return; - default: - break; - } - unexpected(`Unexpected character '${String.fromCharCode(code)}'`, state.pos); -} -function finishOp(type, size2) { - state.pos += size2; - finishToken(type); -} -function readRegexp() { - const start = state.pos; - let escaped = false; - let inClass = false; - for (; ; ) { - if (state.pos >= input.length) { - unexpected("Unterminated regular expression", start); - return; - } - const code = input.charCodeAt(state.pos); - if (escaped) { - escaped = false; - } else { - if (code === charCodes.leftSquareBracket) { - inClass = true; - } else if (code === charCodes.rightSquareBracket && inClass) { - inClass = false; - } else if (code === charCodes.slash && !inClass) { - break; - } - escaped = code === charCodes.backslash; - } - ++state.pos; - } - ++state.pos; - skipWord(); - finishToken(TokenType.regexp); -} -function readInt() { - while (true) { - const code = input.charCodeAt(state.pos); - if (code >= charCodes.digit0 && code <= charCodes.digit9 || code === charCodes.underscore) { - state.pos++; - } else { - break; - } - } -} -function readRadixNumber() { - state.pos += 2; - while (true) { - const code = input.charCodeAt(state.pos); - if (code >= charCodes.digit0 && code <= charCodes.digit9 || code >= charCodes.lowercaseA && code <= charCodes.lowercaseF || code >= charCodes.uppercaseA && code <= charCodes.uppercaseF || code === charCodes.underscore) { - state.pos++; - } else { - break; - } - } - const nextChar = input.charCodeAt(state.pos); - if (nextChar === charCodes.lowercaseN) { - ++state.pos; - finishToken(TokenType.bigint); - } else { - finishToken(TokenType.num); - } -} -function readNumber(startsWithDot) { - let isBigInt = false; - let isDecimal = false; - if (!startsWithDot) { - readInt(); - } - let nextChar = input.charCodeAt(state.pos); - if (nextChar === charCodes.dot) { - ++state.pos; - readInt(); - nextChar = input.charCodeAt(state.pos); - } - if (nextChar === charCodes.uppercaseE || nextChar === charCodes.lowercaseE) { - nextChar = input.charCodeAt(++state.pos); - if (nextChar === charCodes.plusSign || nextChar === charCodes.dash) { - ++state.pos; - } - readInt(); - nextChar = input.charCodeAt(state.pos); - } - if (nextChar === charCodes.lowercaseN) { - ++state.pos; - isBigInt = true; - } else if (nextChar === charCodes.lowercaseM) { - ++state.pos; - isDecimal = true; - } - if (isBigInt) { - finishToken(TokenType.bigint); - return; - } - if (isDecimal) { - finishToken(TokenType.decimal); - return; - } - finishToken(TokenType.num); -} -function readString(quote) { - state.pos++; - for (; ; ) { - if (state.pos >= input.length) { - unexpected("Unterminated string constant"); - return; - } - const ch = input.charCodeAt(state.pos); - if (ch === charCodes.backslash) { - state.pos++; - } else if (ch === quote) { - break; - } - state.pos++; - } - state.pos++; - finishToken(TokenType.string); -} -function readTmplToken() { - for (; ; ) { - if (state.pos >= input.length) { - unexpected("Unterminated template"); - return; - } - const ch = input.charCodeAt(state.pos); - if (ch === charCodes.graveAccent || ch === charCodes.dollarSign && input.charCodeAt(state.pos + 1) === charCodes.leftCurlyBrace) { - if (state.pos === state.start && match2(TokenType.template)) { - if (ch === charCodes.dollarSign) { - state.pos += 2; - finishToken(TokenType.dollarBraceL); - return; - } else { - ++state.pos; - finishToken(TokenType.backQuote); - return; - } - } - finishToken(TokenType.template); - return; - } - if (ch === charCodes.backslash) { - state.pos++; - } - state.pos++; - } -} -function skipWord() { - while (state.pos < input.length) { - const ch = input.charCodeAt(state.pos); - if (IS_IDENTIFIER_CHAR[ch]) { - state.pos++; - } else if (ch === charCodes.backslash) { - state.pos += 2; - if (input.charCodeAt(state.pos) === charCodes.leftCurlyBrace) { - while (state.pos < input.length && input.charCodeAt(state.pos) !== charCodes.rightCurlyBrace) { - state.pos++; - } - state.pos++; - } - } else { - break; - } - } -} - -// node_modules/sucrase/dist/esm/util/getImportExportSpecifierInfo.js -function getImportExportSpecifierInfo(tokens, index2 = tokens.currentIndex()) { - let endIndex = index2 + 1; - if (isSpecifierEnd(tokens, endIndex)) { - const name = tokens.identifierNameAtIndex(index2); - return { - isType: false, - leftName: name, - rightName: name, - endIndex - }; - } - endIndex++; - if (isSpecifierEnd(tokens, endIndex)) { - return { - isType: true, - leftName: null, - rightName: null, - endIndex - }; - } - endIndex++; - if (isSpecifierEnd(tokens, endIndex)) { - return { - isType: false, - leftName: tokens.identifierNameAtIndex(index2), - rightName: tokens.identifierNameAtIndex(index2 + 2), - endIndex - }; - } - endIndex++; - if (isSpecifierEnd(tokens, endIndex)) { - return { - isType: true, - leftName: null, - rightName: null, - endIndex - }; - } - throw new Error(`Unexpected import/export specifier at ${index2}`); -} -function isSpecifierEnd(tokens, index2) { - const token2 = tokens.tokens[index2]; - return token2.type === TokenType.braceR || token2.type === TokenType.comma; -} - -// node_modules/sucrase/dist/esm/parser/plugins/jsx/xhtml.js -var xhtml_default = /* @__PURE__ */ new Map([ - ["quot", '"'], - ["amp", "&"], - ["apos", "'"], - ["lt", "<"], - ["gt", ">"], - ["nbsp", "\xA0"], - ["iexcl", "\xA1"], - ["cent", "\xA2"], - ["pound", "\xA3"], - ["curren", "\xA4"], - ["yen", "\xA5"], - ["brvbar", "\xA6"], - ["sect", "\xA7"], - ["uml", "\xA8"], - ["copy", "\xA9"], - ["ordf", "\xAA"], - ["laquo", "\xAB"], - ["not", "\xAC"], - ["shy", "\xAD"], - ["reg", "\xAE"], - ["macr", "\xAF"], - ["deg", "\xB0"], - ["plusmn", "\xB1"], - ["sup2", "\xB2"], - ["sup3", "\xB3"], - ["acute", "\xB4"], - ["micro", "\xB5"], - ["para", "\xB6"], - ["middot", "\xB7"], - ["cedil", "\xB8"], - ["sup1", "\xB9"], - ["ordm", "\xBA"], - ["raquo", "\xBB"], - ["frac14", "\xBC"], - ["frac12", "\xBD"], - ["frac34", "\xBE"], - ["iquest", "\xBF"], - ["Agrave", "\xC0"], - ["Aacute", "\xC1"], - ["Acirc", "\xC2"], - ["Atilde", "\xC3"], - ["Auml", "\xC4"], - ["Aring", "\xC5"], - ["AElig", "\xC6"], - ["Ccedil", "\xC7"], - ["Egrave", "\xC8"], - ["Eacute", "\xC9"], - ["Ecirc", "\xCA"], - ["Euml", "\xCB"], - ["Igrave", "\xCC"], - ["Iacute", "\xCD"], - ["Icirc", "\xCE"], - ["Iuml", "\xCF"], - ["ETH", "\xD0"], - ["Ntilde", "\xD1"], - ["Ograve", "\xD2"], - ["Oacute", "\xD3"], - ["Ocirc", "\xD4"], - ["Otilde", "\xD5"], - ["Ouml", "\xD6"], - ["times", "\xD7"], - ["Oslash", "\xD8"], - ["Ugrave", "\xD9"], - ["Uacute", "\xDA"], - ["Ucirc", "\xDB"], - ["Uuml", "\xDC"], - ["Yacute", "\xDD"], - ["THORN", "\xDE"], - ["szlig", "\xDF"], - ["agrave", "\xE0"], - ["aacute", "\xE1"], - ["acirc", "\xE2"], - ["atilde", "\xE3"], - ["auml", "\xE4"], - ["aring", "\xE5"], - ["aelig", "\xE6"], - ["ccedil", "\xE7"], - ["egrave", "\xE8"], - ["eacute", "\xE9"], - ["ecirc", "\xEA"], - ["euml", "\xEB"], - ["igrave", "\xEC"], - ["iacute", "\xED"], - ["icirc", "\xEE"], - ["iuml", "\xEF"], - ["eth", "\xF0"], - ["ntilde", "\xF1"], - ["ograve", "\xF2"], - ["oacute", "\xF3"], - ["ocirc", "\xF4"], - ["otilde", "\xF5"], - ["ouml", "\xF6"], - ["divide", "\xF7"], - ["oslash", "\xF8"], - ["ugrave", "\xF9"], - ["uacute", "\xFA"], - ["ucirc", "\xFB"], - ["uuml", "\xFC"], - ["yacute", "\xFD"], - ["thorn", "\xFE"], - ["yuml", "\xFF"], - ["OElig", "\u0152"], - ["oelig", "\u0153"], - ["Scaron", "\u0160"], - ["scaron", "\u0161"], - ["Yuml", "\u0178"], - ["fnof", "\u0192"], - ["circ", "\u02C6"], - ["tilde", "\u02DC"], - ["Alpha", "\u0391"], - ["Beta", "\u0392"], - ["Gamma", "\u0393"], - ["Delta", "\u0394"], - ["Epsilon", "\u0395"], - ["Zeta", "\u0396"], - ["Eta", "\u0397"], - ["Theta", "\u0398"], - ["Iota", "\u0399"], - ["Kappa", "\u039A"], - ["Lambda", "\u039B"], - ["Mu", "\u039C"], - ["Nu", "\u039D"], - ["Xi", "\u039E"], - ["Omicron", "\u039F"], - ["Pi", "\u03A0"], - ["Rho", "\u03A1"], - ["Sigma", "\u03A3"], - ["Tau", "\u03A4"], - ["Upsilon", "\u03A5"], - ["Phi", "\u03A6"], - ["Chi", "\u03A7"], - ["Psi", "\u03A8"], - ["Omega", "\u03A9"], - ["alpha", "\u03B1"], - ["beta", "\u03B2"], - ["gamma", "\u03B3"], - ["delta", "\u03B4"], - ["epsilon", "\u03B5"], - ["zeta", "\u03B6"], - ["eta", "\u03B7"], - ["theta", "\u03B8"], - ["iota", "\u03B9"], - ["kappa", "\u03BA"], - ["lambda", "\u03BB"], - ["mu", "\u03BC"], - ["nu", "\u03BD"], - ["xi", "\u03BE"], - ["omicron", "\u03BF"], - ["pi", "\u03C0"], - ["rho", "\u03C1"], - ["sigmaf", "\u03C2"], - ["sigma", "\u03C3"], - ["tau", "\u03C4"], - ["upsilon", "\u03C5"], - ["phi", "\u03C6"], - ["chi", "\u03C7"], - ["psi", "\u03C8"], - ["omega", "\u03C9"], - ["thetasym", "\u03D1"], - ["upsih", "\u03D2"], - ["piv", "\u03D6"], - ["ensp", "\u2002"], - ["emsp", "\u2003"], - ["thinsp", "\u2009"], - ["zwnj", "\u200C"], - ["zwj", "\u200D"], - ["lrm", "\u200E"], - ["rlm", "\u200F"], - ["ndash", "\u2013"], - ["mdash", "\u2014"], - ["lsquo", "\u2018"], - ["rsquo", "\u2019"], - ["sbquo", "\u201A"], - ["ldquo", "\u201C"], - ["rdquo", "\u201D"], - ["bdquo", "\u201E"], - ["dagger", "\u2020"], - ["Dagger", "\u2021"], - ["bull", "\u2022"], - ["hellip", "\u2026"], - ["permil", "\u2030"], - ["prime", "\u2032"], - ["Prime", "\u2033"], - ["lsaquo", "\u2039"], - ["rsaquo", "\u203A"], - ["oline", "\u203E"], - ["frasl", "\u2044"], - ["euro", "\u20AC"], - ["image", "\u2111"], - ["weierp", "\u2118"], - ["real", "\u211C"], - ["trade", "\u2122"], - ["alefsym", "\u2135"], - ["larr", "\u2190"], - ["uarr", "\u2191"], - ["rarr", "\u2192"], - ["darr", "\u2193"], - ["harr", "\u2194"], - ["crarr", "\u21B5"], - ["lArr", "\u21D0"], - ["uArr", "\u21D1"], - ["rArr", "\u21D2"], - ["dArr", "\u21D3"], - ["hArr", "\u21D4"], - ["forall", "\u2200"], - ["part", "\u2202"], - ["exist", "\u2203"], - ["empty", "\u2205"], - ["nabla", "\u2207"], - ["isin", "\u2208"], - ["notin", "\u2209"], - ["ni", "\u220B"], - ["prod", "\u220F"], - ["sum", "\u2211"], - ["minus", "\u2212"], - ["lowast", "\u2217"], - ["radic", "\u221A"], - ["prop", "\u221D"], - ["infin", "\u221E"], - ["ang", "\u2220"], - ["and", "\u2227"], - ["or", "\u2228"], - ["cap", "\u2229"], - ["cup", "\u222A"], - ["int", "\u222B"], - ["there4", "\u2234"], - ["sim", "\u223C"], - ["cong", "\u2245"], - ["asymp", "\u2248"], - ["ne", "\u2260"], - ["equiv", "\u2261"], - ["le", "\u2264"], - ["ge", "\u2265"], - ["sub", "\u2282"], - ["sup", "\u2283"], - ["nsub", "\u2284"], - ["sube", "\u2286"], - ["supe", "\u2287"], - ["oplus", "\u2295"], - ["otimes", "\u2297"], - ["perp", "\u22A5"], - ["sdot", "\u22C5"], - ["lceil", "\u2308"], - ["rceil", "\u2309"], - ["lfloor", "\u230A"], - ["rfloor", "\u230B"], - ["lang", "\u2329"], - ["rang", "\u232A"], - ["loz", "\u25CA"], - ["spades", "\u2660"], - ["clubs", "\u2663"], - ["hearts", "\u2665"], - ["diams", "\u2666"] -]); - -// node_modules/sucrase/dist/esm/util/getJSXPragmaInfo.js -function getJSXPragmaInfo(options2) { - const [base, suffix] = splitPragma(options2.jsxPragma || "React.createElement"); - const [fragmentBase, fragmentSuffix] = splitPragma(options2.jsxFragmentPragma || "React.Fragment"); - return { base, suffix, fragmentBase, fragmentSuffix }; -} -function splitPragma(pragma) { - let dotIndex = pragma.indexOf("."); - if (dotIndex === -1) { - dotIndex = pragma.length; - } - return [pragma.slice(0, dotIndex), pragma.slice(dotIndex)]; -} - -// node_modules/sucrase/dist/esm/transformers/Transformer.js -var Transformer = class { - // Return true if anything was processed, false otherwise. - getPrefixCode() { - return ""; - } - getHoistedCode() { - return ""; - } - getSuffixCode() { - return ""; - } -}; - -// node_modules/sucrase/dist/esm/transformers/JSXTransformer.js -var JSXTransformer = class extends Transformer { - // State for calculating the line number of each JSX tag in development. - __init() { - this.lastLineNumber = 1; - } - __init2() { - this.lastIndex = 0; - } - // In development, variable name holding the name of the current file. - __init3() { - this.filenameVarName = null; - } - // Mapping of claimed names for imports in the automatic transform, e,g. - // {jsx: "_jsx"}. This determines which imports to generate in the prefix. - __init4() { - this.esmAutomaticImportNameResolutions = {}; - } - // When automatically adding imports in CJS mode, we store the variable name - // holding the imported CJS module so we can require it in the prefix. - __init5() { - this.cjsAutomaticModuleNameResolutions = {}; - } - constructor(rootTransformer, tokens, importProcessor, nameManager, options2) { - super(); - this.rootTransformer = rootTransformer; - this.tokens = tokens; - this.importProcessor = importProcessor; - this.nameManager = nameManager; - this.options = options2; - JSXTransformer.prototype.__init.call(this); - JSXTransformer.prototype.__init2.call(this); - JSXTransformer.prototype.__init3.call(this); - JSXTransformer.prototype.__init4.call(this); - JSXTransformer.prototype.__init5.call(this); - ; - this.jsxPragmaInfo = getJSXPragmaInfo(options2); - this.isAutomaticRuntime = options2.jsxRuntime === "automatic"; - this.jsxImportSource = options2.jsxImportSource || "react"; - } - process() { - if (this.tokens.matches1(TokenType.jsxTagStart)) { - this.processJSXTag(); - return true; - } - return false; - } - getPrefixCode() { - let prefix2 = ""; - if (this.filenameVarName) { - prefix2 += `const ${this.filenameVarName} = ${JSON.stringify(this.options.filePath || "")};`; - } - if (this.isAutomaticRuntime) { - if (this.importProcessor) { - for (const [path, resolvedName] of Object.entries(this.cjsAutomaticModuleNameResolutions)) { - prefix2 += `var ${resolvedName} = require("${path}");`; - } - } else { - const { createElement: createElementResolution, ...otherResolutions } = this.esmAutomaticImportNameResolutions; - if (createElementResolution) { - prefix2 += `import {createElement as ${createElementResolution}} from "${this.jsxImportSource}";`; - } - const importSpecifiers = Object.entries(otherResolutions).map(([name, resolvedName]) => `${name} as ${resolvedName}`).join(", "); - if (importSpecifiers) { - const importPath = this.jsxImportSource + (this.options.production ? "/jsx-runtime" : "/jsx-dev-runtime"); - prefix2 += `import {${importSpecifiers}} from "${importPath}";`; - } - } - } - return prefix2; - } - processJSXTag() { - const { jsxRole, start } = this.tokens.currentToken(); - const elementLocationCode = this.options.production ? null : this.getElementLocationCode(start); - if (this.isAutomaticRuntime && jsxRole !== JSXRole.KeyAfterPropSpread) { - this.transformTagToJSXFunc(elementLocationCode, jsxRole); - } else { - this.transformTagToCreateElement(elementLocationCode); - } - } - getElementLocationCode(firstTokenStart) { - const lineNumber = this.getLineNumberForIndex(firstTokenStart); - return `lineNumber: ${lineNumber}`; - } - /** - * Get the line number for this source position. This is calculated lazily and - * must be called in increasing order by index. - */ - getLineNumberForIndex(index2) { - const code = this.tokens.code; - while (this.lastIndex < index2 && this.lastIndex < code.length) { - if (code[this.lastIndex] === "\n") { - this.lastLineNumber++; - } - this.lastIndex++; - } - return this.lastLineNumber; - } - /** - * Convert the current JSX element to a call to jsx, jsxs, or jsxDEV. This is - * the primary transformation for the automatic transform. - * - * Example: - *
Hello{x}
- * becomes - * jsxs('div', {a: 1, children: ["Hello", x]}, 2) - */ - transformTagToJSXFunc(elementLocationCode, jsxRole) { - const isStatic = jsxRole === JSXRole.StaticChildren; - this.tokens.replaceToken(this.getJSXFuncInvocationCode(isStatic)); - let keyCode = null; - if (this.tokens.matches1(TokenType.jsxTagEnd)) { - this.tokens.replaceToken(`${this.getFragmentCode()}, {`); - this.processAutomaticChildrenAndEndProps(jsxRole); - } else { - this.processTagIntro(); - this.tokens.appendCode(", {"); - keyCode = this.processProps(true); - if (this.tokens.matches2(TokenType.slash, TokenType.jsxTagEnd)) { - this.tokens.appendCode("}"); - } else if (this.tokens.matches1(TokenType.jsxTagEnd)) { - this.tokens.removeToken(); - this.processAutomaticChildrenAndEndProps(jsxRole); - } else { - throw new Error("Expected either /> or > at the end of the tag."); - } - if (keyCode) { - this.tokens.appendCode(`, ${keyCode}`); - } - } - if (!this.options.production) { - if (keyCode === null) { - this.tokens.appendCode(", void 0"); - } - this.tokens.appendCode(`, ${isStatic}, ${this.getDevSource(elementLocationCode)}, this`); - } - this.tokens.removeInitialToken(); - while (!this.tokens.matches1(TokenType.jsxTagEnd)) { - this.tokens.removeToken(); - } - this.tokens.replaceToken(")"); - } - /** - * Convert the current JSX element to a createElement call. In the classic - * runtime, this is the only case. In the automatic runtime, this is called - * as a fallback in some situations. - * - * Example: - *
Hello{x}
- * becomes - * React.createElement('div', {a: 1, key: 2}, "Hello", x) - */ - transformTagToCreateElement(elementLocationCode) { - this.tokens.replaceToken(this.getCreateElementInvocationCode()); - if (this.tokens.matches1(TokenType.jsxTagEnd)) { - this.tokens.replaceToken(`${this.getFragmentCode()}, null`); - this.processChildren(true); - } else { - this.processTagIntro(); - this.processPropsObjectWithDevInfo(elementLocationCode); - if (this.tokens.matches2(TokenType.slash, TokenType.jsxTagEnd)) { - } else if (this.tokens.matches1(TokenType.jsxTagEnd)) { - this.tokens.removeToken(); - this.processChildren(true); - } else { - throw new Error("Expected either /> or > at the end of the tag."); - } - } - this.tokens.removeInitialToken(); - while (!this.tokens.matches1(TokenType.jsxTagEnd)) { - this.tokens.removeToken(); - } - this.tokens.replaceToken(")"); - } - /** - * Get the code for the relevant function for this context: jsx, jsxs, - * or jsxDEV. The following open-paren is included as well. - * - * These functions are only used for the automatic runtime, so they are always - * auto-imported, but the auto-import will be either CJS or ESM based on the - * target module format. - */ - getJSXFuncInvocationCode(isStatic) { - if (this.options.production) { - if (isStatic) { - return this.claimAutoImportedFuncInvocation("jsxs", "/jsx-runtime"); - } else { - return this.claimAutoImportedFuncInvocation("jsx", "/jsx-runtime"); - } - } else { - return this.claimAutoImportedFuncInvocation("jsxDEV", "/jsx-dev-runtime"); - } - } - /** - * Return the code to use for the createElement function, e.g. - * `React.createElement`, including the following open-paren. - * - * This is the main function to use for the classic runtime. For the - * automatic runtime, this function is used as a fallback function to - * preserve behavior when there is a prop spread followed by an explicit - * key. In that automatic runtime case, the function should be automatically - * imported. - */ - getCreateElementInvocationCode() { - if (this.isAutomaticRuntime) { - return this.claimAutoImportedFuncInvocation("createElement", ""); - } else { - const { jsxPragmaInfo } = this; - const resolvedPragmaBaseName = this.importProcessor ? this.importProcessor.getIdentifierReplacement(jsxPragmaInfo.base) || jsxPragmaInfo.base : jsxPragmaInfo.base; - return `${resolvedPragmaBaseName}${jsxPragmaInfo.suffix}(`; - } - } - /** - * Return the code to use as the component when compiling a shorthand - * fragment, e.g. `React.Fragment`. - * - * This may be called from either the classic or automatic runtime, and - * the value should be auto-imported for the automatic runtime. - */ - getFragmentCode() { - if (this.isAutomaticRuntime) { - return this.claimAutoImportedName( - "Fragment", - this.options.production ? "/jsx-runtime" : "/jsx-dev-runtime" - ); - } else { - const { jsxPragmaInfo } = this; - const resolvedFragmentPragmaBaseName = this.importProcessor ? this.importProcessor.getIdentifierReplacement(jsxPragmaInfo.fragmentBase) || jsxPragmaInfo.fragmentBase : jsxPragmaInfo.fragmentBase; - return resolvedFragmentPragmaBaseName + jsxPragmaInfo.fragmentSuffix; - } - } - /** - * Return code that invokes the given function. - * - * When the imports transform is enabled, use the CJSImportTransformer - * strategy of using `.call(void 0, ...` to avoid passing a `this` value in a - * situation that would otherwise look like a method call. - */ - claimAutoImportedFuncInvocation(funcName, importPathSuffix) { - const funcCode = this.claimAutoImportedName(funcName, importPathSuffix); - if (this.importProcessor) { - return `${funcCode}.call(void 0, `; - } else { - return `${funcCode}(`; - } - } - claimAutoImportedName(funcName, importPathSuffix) { - if (this.importProcessor) { - const path = this.jsxImportSource + importPathSuffix; - if (!this.cjsAutomaticModuleNameResolutions[path]) { - this.cjsAutomaticModuleNameResolutions[path] = this.importProcessor.getFreeIdentifierForPath(path); - } - return `${this.cjsAutomaticModuleNameResolutions[path]}.${funcName}`; - } else { - if (!this.esmAutomaticImportNameResolutions[funcName]) { - this.esmAutomaticImportNameResolutions[funcName] = this.nameManager.claimFreeName( - `_${funcName}` - ); - } - return this.esmAutomaticImportNameResolutions[funcName]; - } - } - /** - * Process the first part of a tag, before any props. - */ - processTagIntro() { - let introEnd = this.tokens.currentIndex() + 1; - while (this.tokens.tokens[introEnd].isType || !this.tokens.matches2AtIndex(introEnd - 1, TokenType.jsxName, TokenType.jsxName) && !this.tokens.matches2AtIndex(introEnd - 1, TokenType.greaterThan, TokenType.jsxName) && !this.tokens.matches1AtIndex(introEnd, TokenType.braceL) && !this.tokens.matches1AtIndex(introEnd, TokenType.jsxTagEnd) && !this.tokens.matches2AtIndex(introEnd, TokenType.slash, TokenType.jsxTagEnd)) { - introEnd++; - } - if (introEnd === this.tokens.currentIndex() + 1) { - const tagName = this.tokens.identifierName(); - if (startsWithLowerCase(tagName)) { - this.tokens.replaceToken(`'${tagName}'`); - } - } - while (this.tokens.currentIndex() < introEnd) { - this.rootTransformer.processToken(); - } - } - /** - * Starting at the beginning of the props, add the props argument to - * React.createElement, including the comma before it. - */ - processPropsObjectWithDevInfo(elementLocationCode) { - const devProps = this.options.production ? "" : `__self: this, __source: ${this.getDevSource(elementLocationCode)}`; - if (!this.tokens.matches1(TokenType.jsxName) && !this.tokens.matches1(TokenType.braceL)) { - if (devProps) { - this.tokens.appendCode(`, {${devProps}}`); - } else { - this.tokens.appendCode(`, null`); - } - return; - } - this.tokens.appendCode(`, {`); - this.processProps(false); - if (devProps) { - this.tokens.appendCode(` ${devProps}}`); - } else { - this.tokens.appendCode("}"); - } - } - /** - * Transform the core part of the props, assuming that a { has already been - * inserted before us and that a } will be inserted after us. - * - * If extractKeyCode is true (i.e. when using any jsx... function), any prop - * named "key" has its code captured and returned rather than being emitted to - * the output code. This shifts line numbers, and emitting the code later will - * correct line numbers again. If no key is found or if extractKeyCode is - * false, this function returns null. - */ - processProps(extractKeyCode) { - let keyCode = null; - while (true) { - if (this.tokens.matches2(TokenType.jsxName, TokenType.eq)) { - const propName = this.tokens.identifierName(); - if (extractKeyCode && propName === "key") { - if (keyCode !== null) { - this.tokens.appendCode(keyCode.replace(/[^\n]/g, "")); - } - this.tokens.removeToken(); - this.tokens.removeToken(); - const snapshot = this.tokens.snapshot(); - this.processPropValue(); - keyCode = this.tokens.dangerouslyGetAndRemoveCodeSinceSnapshot(snapshot); - continue; - } else { - this.processPropName(propName); - this.tokens.replaceToken(": "); - this.processPropValue(); - } - } else if (this.tokens.matches1(TokenType.jsxName)) { - const propName = this.tokens.identifierName(); - this.processPropName(propName); - this.tokens.appendCode(": true"); - } else if (this.tokens.matches1(TokenType.braceL)) { - this.tokens.replaceToken(""); - this.rootTransformer.processBalancedCode(); - this.tokens.replaceToken(""); - } else { - break; - } - this.tokens.appendCode(","); - } - return keyCode; - } - processPropName(propName) { - if (propName.includes("-")) { - this.tokens.replaceToken(`'${propName}'`); - } else { - this.tokens.copyToken(); - } - } - processPropValue() { - if (this.tokens.matches1(TokenType.braceL)) { - this.tokens.replaceToken(""); - this.rootTransformer.processBalancedCode(); - this.tokens.replaceToken(""); - } else if (this.tokens.matches1(TokenType.jsxTagStart)) { - this.processJSXTag(); - } else { - this.processStringPropValue(); - } - } - processStringPropValue() { - const token2 = this.tokens.currentToken(); - const valueCode = this.tokens.code.slice(token2.start + 1, token2.end - 1); - const replacementCode = formatJSXTextReplacement(valueCode); - const literalCode = formatJSXStringValueLiteral(valueCode); - this.tokens.replaceToken(literalCode + replacementCode); - } - /** - * Starting in the middle of the props object literal, produce an additional - * prop for the children and close the object literal. - */ - processAutomaticChildrenAndEndProps(jsxRole) { - if (jsxRole === JSXRole.StaticChildren) { - this.tokens.appendCode(" children: ["); - this.processChildren(false); - this.tokens.appendCode("]}"); - } else { - if (jsxRole === JSXRole.OneChild) { - this.tokens.appendCode(" children: "); - } - this.processChildren(false); - this.tokens.appendCode("}"); - } - } - /** - * Transform children into a comma-separated list, which will be either - * arguments to createElement or array elements of a children prop. - */ - processChildren(needsInitialComma) { - let needsComma = needsInitialComma; - while (true) { - if (this.tokens.matches2(TokenType.jsxTagStart, TokenType.slash)) { - return; - } - let didEmitElement = false; - if (this.tokens.matches1(TokenType.braceL)) { - if (this.tokens.matches2(TokenType.braceL, TokenType.braceR)) { - this.tokens.replaceToken(""); - this.tokens.replaceToken(""); - } else { - this.tokens.replaceToken(needsComma ? ", " : ""); - this.rootTransformer.processBalancedCode(); - this.tokens.replaceToken(""); - didEmitElement = true; - } - } else if (this.tokens.matches1(TokenType.jsxTagStart)) { - this.tokens.appendCode(needsComma ? ", " : ""); - this.processJSXTag(); - didEmitElement = true; - } else if (this.tokens.matches1(TokenType.jsxText) || this.tokens.matches1(TokenType.jsxEmptyText)) { - didEmitElement = this.processChildTextElement(needsComma); - } else { - throw new Error("Unexpected token when processing JSX children."); - } - if (didEmitElement) { - needsComma = true; - } - } - } - /** - * Turn a JSX text element into a string literal, or nothing at all if the JSX - * text resolves to the empty string. - * - * Returns true if a string literal is emitted, false otherwise. - */ - processChildTextElement(needsComma) { - const token2 = this.tokens.currentToken(); - const valueCode = this.tokens.code.slice(token2.start, token2.end); - const replacementCode = formatJSXTextReplacement(valueCode); - const literalCode = formatJSXTextLiteral(valueCode); - if (literalCode === '""') { - this.tokens.replaceToken(replacementCode); - return false; - } else { - this.tokens.replaceToken(`${needsComma ? ", " : ""}${literalCode}${replacementCode}`); - return true; - } - } - getDevSource(elementLocationCode) { - return `{fileName: ${this.getFilenameVarName()}, ${elementLocationCode}}`; - } - getFilenameVarName() { - if (!this.filenameVarName) { - this.filenameVarName = this.nameManager.claimFreeName("_jsxFileName"); - } - return this.filenameVarName; - } -}; -function startsWithLowerCase(s4) { - const firstChar = s4.charCodeAt(0); - return firstChar >= charCodes.lowercaseA && firstChar <= charCodes.lowercaseZ; -} -function formatJSXTextLiteral(text2) { - let result = ""; - let whitespace3 = ""; - let isInInitialLineWhitespace = false; - let seenNonWhitespace = false; - for (let i4 = 0; i4 < text2.length; i4++) { - const c3 = text2[i4]; - if (c3 === " " || c3 === " " || c3 === "\r") { - if (!isInInitialLineWhitespace) { - whitespace3 += c3; - } - } else if (c3 === "\n") { - whitespace3 = ""; - isInInitialLineWhitespace = true; - } else { - if (seenNonWhitespace && isInInitialLineWhitespace) { - result += " "; - } - result += whitespace3; - whitespace3 = ""; - if (c3 === "&") { - const { entity, newI } = processEntity(text2, i4 + 1); - i4 = newI - 1; - result += entity; - } else { - result += c3; - } - seenNonWhitespace = true; - isInInitialLineWhitespace = false; - } - } - if (!isInInitialLineWhitespace) { - result += whitespace3; - } - return JSON.stringify(result); -} -function formatJSXTextReplacement(text2) { - let numNewlines = 0; - let numSpaces = 0; - for (const c3 of text2) { - if (c3 === "\n") { - numNewlines++; - numSpaces = 0; - } else if (c3 === " ") { - numSpaces++; - } - } - return "\n".repeat(numNewlines) + " ".repeat(numSpaces); -} -function formatJSXStringValueLiteral(text2) { - let result = ""; - for (let i4 = 0; i4 < text2.length; i4++) { - const c3 = text2[i4]; - if (c3 === "\n") { - if (/\s/.test(text2[i4 + 1])) { - result += " "; - while (i4 < text2.length && /\s/.test(text2[i4 + 1])) { - i4++; - } - } else { - result += "\n"; - } - } else if (c3 === "&") { - const { entity, newI } = processEntity(text2, i4 + 1); - result += entity; - i4 = newI - 1; - } else { - result += c3; - } - } - return JSON.stringify(result); -} -function processEntity(text2, indexAfterAmpersand) { - let str = ""; - let count = 0; - let entity; - let i4 = indexAfterAmpersand; - if (text2[i4] === "#") { - let radix = 10; - i4++; - let numStart; - if (text2[i4] === "x") { - radix = 16; - i4++; - numStart = i4; - while (i4 < text2.length && isHexDigit(text2.charCodeAt(i4))) { - i4++; - } - } else { - numStart = i4; - while (i4 < text2.length && isDecimalDigit(text2.charCodeAt(i4))) { - i4++; - } - } - if (text2[i4] === ";") { - const numStr = text2.slice(numStart, i4); - if (numStr) { - i4++; - entity = String.fromCodePoint(parseInt(numStr, radix)); - } - } - } else { - while (i4 < text2.length && count++ < 10) { - const ch = text2[i4]; - i4++; - if (ch === ";") { - entity = xhtml_default.get(str); - break; - } - str += ch; - } - } - if (!entity) { - return { entity: "&", newI: indexAfterAmpersand }; - } - return { entity, newI: i4 }; -} -function isDecimalDigit(code) { - return code >= charCodes.digit0 && code <= charCodes.digit9; -} -function isHexDigit(code) { - return code >= charCodes.digit0 && code <= charCodes.digit9 || code >= charCodes.lowercaseA && code <= charCodes.lowercaseF || code >= charCodes.uppercaseA && code <= charCodes.uppercaseF; -} - -// node_modules/sucrase/dist/esm/util/getNonTypeIdentifiers.js -function getNonTypeIdentifiers(tokens, options2) { - const jsxPragmaInfo = getJSXPragmaInfo(options2); - const nonTypeIdentifiers = /* @__PURE__ */ new Set(); - for (let i4 = 0; i4 < tokens.tokens.length; i4++) { - const token2 = tokens.tokens[i4]; - if (token2.type === TokenType.name && !token2.isType && (token2.identifierRole === IdentifierRole.Access || token2.identifierRole === IdentifierRole.ObjectShorthand || token2.identifierRole === IdentifierRole.ExportAccess) && !token2.shadowsGlobal) { - nonTypeIdentifiers.add(tokens.identifierNameForToken(token2)); - } - if (token2.type === TokenType.jsxTagStart) { - nonTypeIdentifiers.add(jsxPragmaInfo.base); - } - if (token2.type === TokenType.jsxTagStart && i4 + 1 < tokens.tokens.length && tokens.tokens[i4 + 1].type === TokenType.jsxTagEnd) { - nonTypeIdentifiers.add(jsxPragmaInfo.base); - nonTypeIdentifiers.add(jsxPragmaInfo.fragmentBase); - } - if (token2.type === TokenType.jsxName && token2.identifierRole === IdentifierRole.Access) { - const identifierName = tokens.identifierNameForToken(token2); - if (!startsWithLowerCase(identifierName) || tokens.tokens[i4 + 1].type === TokenType.dot) { - nonTypeIdentifiers.add(tokens.identifierNameForToken(token2)); - } - } - } - return nonTypeIdentifiers; -} - -// node_modules/sucrase/dist/esm/CJSImportProcessor.js -var CJSImportProcessor = class { - __init() { - this.nonTypeIdentifiers = /* @__PURE__ */ new Set(); - } - __init2() { - this.importInfoByPath = /* @__PURE__ */ new Map(); - } - __init3() { - this.importsToReplace = /* @__PURE__ */ new Map(); - } - __init4() { - this.identifierReplacements = /* @__PURE__ */ new Map(); - } - __init5() { - this.exportBindingsByLocalName = /* @__PURE__ */ new Map(); - } - constructor(nameManager, tokens, enableLegacyTypeScriptModuleInterop, options2, isTypeScriptTransformEnabled, keepUnusedImports, helperManager) { - ; - this.nameManager = nameManager; - this.tokens = tokens; - this.enableLegacyTypeScriptModuleInterop = enableLegacyTypeScriptModuleInterop; - this.options = options2; - this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled; - this.keepUnusedImports = keepUnusedImports; - this.helperManager = helperManager; - CJSImportProcessor.prototype.__init.call(this); - CJSImportProcessor.prototype.__init2.call(this); - CJSImportProcessor.prototype.__init3.call(this); - CJSImportProcessor.prototype.__init4.call(this); - CJSImportProcessor.prototype.__init5.call(this); - } - preprocessTokens() { - for (let i4 = 0; i4 < this.tokens.tokens.length; i4++) { - if (this.tokens.matches1AtIndex(i4, TokenType._import) && !this.tokens.matches3AtIndex(i4, TokenType._import, TokenType.name, TokenType.eq)) { - this.preprocessImportAtIndex(i4); - } - if (this.tokens.matches1AtIndex(i4, TokenType._export) && !this.tokens.matches2AtIndex(i4, TokenType._export, TokenType.eq)) { - this.preprocessExportAtIndex(i4); - } - } - this.generateImportReplacements(); - } - /** - * In TypeScript, import statements that only import types should be removed. - * This includes `import {} from 'foo';`, but not `import 'foo';`. - */ - pruneTypeOnlyImports() { - this.nonTypeIdentifiers = getNonTypeIdentifiers(this.tokens, this.options); - for (const [path, importInfo] of this.importInfoByPath.entries()) { - if (importInfo.hasBareImport || importInfo.hasStarExport || importInfo.exportStarNames.length > 0 || importInfo.namedExports.length > 0) { - continue; - } - const names = [ - ...importInfo.defaultNames, - ...importInfo.wildcardNames, - ...importInfo.namedImports.map(({ localName }) => localName) - ]; - if (names.every((name) => this.shouldAutomaticallyElideImportedName(name))) { - this.importsToReplace.set(path, ""); - } - } - } - shouldAutomaticallyElideImportedName(name) { - return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && !this.nonTypeIdentifiers.has(name); - } - generateImportReplacements() { - for (const [path, importInfo] of this.importInfoByPath.entries()) { - const { - defaultNames, - wildcardNames, - namedImports, - namedExports, - exportStarNames, - hasStarExport - } = importInfo; - if (defaultNames.length === 0 && wildcardNames.length === 0 && namedImports.length === 0 && namedExports.length === 0 && exportStarNames.length === 0 && !hasStarExport) { - this.importsToReplace.set(path, `require('${path}');`); - continue; - } - const primaryImportName = this.getFreeIdentifierForPath(path); - let secondaryImportName; - if (this.enableLegacyTypeScriptModuleInterop) { - secondaryImportName = primaryImportName; - } else { - secondaryImportName = wildcardNames.length > 0 ? wildcardNames[0] : this.getFreeIdentifierForPath(path); - } - let requireCode = `var ${primaryImportName} = require('${path}');`; - if (wildcardNames.length > 0) { - for (const wildcardName of wildcardNames) { - const moduleExpr = this.enableLegacyTypeScriptModuleInterop ? primaryImportName : `${this.helperManager.getHelperName("interopRequireWildcard")}(${primaryImportName})`; - requireCode += ` var ${wildcardName} = ${moduleExpr};`; - } - } else if (exportStarNames.length > 0 && secondaryImportName !== primaryImportName) { - requireCode += ` var ${secondaryImportName} = ${this.helperManager.getHelperName( - "interopRequireWildcard" - )}(${primaryImportName});`; - } else if (defaultNames.length > 0 && secondaryImportName !== primaryImportName) { - requireCode += ` var ${secondaryImportName} = ${this.helperManager.getHelperName( - "interopRequireDefault" - )}(${primaryImportName});`; - } - for (const { importedName, localName } of namedExports) { - requireCode += ` ${this.helperManager.getHelperName( - "createNamedExportFrom" - )}(${primaryImportName}, '${localName}', '${importedName}');`; - } - for (const exportStarName of exportStarNames) { - requireCode += ` exports.${exportStarName} = ${secondaryImportName};`; - } - if (hasStarExport) { - requireCode += ` ${this.helperManager.getHelperName( - "createStarExport" - )}(${primaryImportName});`; - } - this.importsToReplace.set(path, requireCode); - for (const defaultName of defaultNames) { - this.identifierReplacements.set(defaultName, `${secondaryImportName}.default`); - } - for (const { importedName, localName } of namedImports) { - this.identifierReplacements.set(localName, `${primaryImportName}.${importedName}`); - } - } - } - getFreeIdentifierForPath(path) { - const components2 = path.split("/"); - const lastComponent = components2[components2.length - 1]; - const baseName = lastComponent.replace(/\W/g, ""); - return this.nameManager.claimFreeName(`_${baseName}`); - } - preprocessImportAtIndex(index2) { - const defaultNames = []; - const wildcardNames = []; - const namedImports = []; - index2++; - if ((this.tokens.matchesContextualAtIndex(index2, ContextualKeyword._type) || this.tokens.matches1AtIndex(index2, TokenType._typeof)) && !this.tokens.matches1AtIndex(index2 + 1, TokenType.comma) && !this.tokens.matchesContextualAtIndex(index2 + 1, ContextualKeyword._from)) { - return; - } - if (this.tokens.matches1AtIndex(index2, TokenType.parenL)) { - return; - } - if (this.tokens.matches1AtIndex(index2, TokenType.name)) { - defaultNames.push(this.tokens.identifierNameAtIndex(index2)); - index2++; - if (this.tokens.matches1AtIndex(index2, TokenType.comma)) { - index2++; - } - } - if (this.tokens.matches1AtIndex(index2, TokenType.star)) { - index2 += 2; - wildcardNames.push(this.tokens.identifierNameAtIndex(index2)); - index2++; - } - if (this.tokens.matches1AtIndex(index2, TokenType.braceL)) { - const result = this.getNamedImports(index2 + 1); - index2 = result.newIndex; - for (const namedImport of result.namedImports) { - if (namedImport.importedName === "default") { - defaultNames.push(namedImport.localName); - } else { - namedImports.push(namedImport); - } - } - } - if (this.tokens.matchesContextualAtIndex(index2, ContextualKeyword._from)) { - index2++; - } - if (!this.tokens.matches1AtIndex(index2, TokenType.string)) { - throw new Error("Expected string token at the end of import statement."); - } - const path = this.tokens.stringValueAtIndex(index2); - const importInfo = this.getImportInfo(path); - importInfo.defaultNames.push(...defaultNames); - importInfo.wildcardNames.push(...wildcardNames); - importInfo.namedImports.push(...namedImports); - if (defaultNames.length === 0 && wildcardNames.length === 0 && namedImports.length === 0) { - importInfo.hasBareImport = true; - } - } - preprocessExportAtIndex(index2) { - if (this.tokens.matches2AtIndex(index2, TokenType._export, TokenType._var) || this.tokens.matches2AtIndex(index2, TokenType._export, TokenType._let) || this.tokens.matches2AtIndex(index2, TokenType._export, TokenType._const)) { - this.preprocessVarExportAtIndex(index2); - } else if (this.tokens.matches2AtIndex(index2, TokenType._export, TokenType._function) || this.tokens.matches2AtIndex(index2, TokenType._export, TokenType._class)) { - const exportName = this.tokens.identifierNameAtIndex(index2 + 2); - this.addExportBinding(exportName, exportName); - } else if (this.tokens.matches3AtIndex(index2, TokenType._export, TokenType.name, TokenType._function)) { - const exportName = this.tokens.identifierNameAtIndex(index2 + 3); - this.addExportBinding(exportName, exportName); - } else if (this.tokens.matches2AtIndex(index2, TokenType._export, TokenType.braceL)) { - this.preprocessNamedExportAtIndex(index2); - } else if (this.tokens.matches2AtIndex(index2, TokenType._export, TokenType.star)) { - this.preprocessExportStarAtIndex(index2); - } - } - preprocessVarExportAtIndex(index2) { - let depth = 0; - for (let i4 = index2 + 2; ; i4++) { - if (this.tokens.matches1AtIndex(i4, TokenType.braceL) || this.tokens.matches1AtIndex(i4, TokenType.dollarBraceL) || this.tokens.matches1AtIndex(i4, TokenType.bracketL)) { - depth++; - } else if (this.tokens.matches1AtIndex(i4, TokenType.braceR) || this.tokens.matches1AtIndex(i4, TokenType.bracketR)) { - depth--; - } else if (depth === 0 && !this.tokens.matches1AtIndex(i4, TokenType.name)) { - break; - } else if (this.tokens.matches1AtIndex(1, TokenType.eq)) { - const endIndex = this.tokens.currentToken().rhsEndIndex; - if (endIndex == null) { - throw new Error("Expected = token with an end index."); - } - i4 = endIndex - 1; - } else { - const token2 = this.tokens.tokens[i4]; - if (isDeclaration(token2)) { - const exportName = this.tokens.identifierNameAtIndex(i4); - this.identifierReplacements.set(exportName, `exports.${exportName}`); - } - } - } - } - /** - * Walk this export statement just in case it's an export...from statement. - * If it is, combine it into the import info for that path. Otherwise, just - * bail out; it'll be handled later. - */ - preprocessNamedExportAtIndex(index2) { - index2 += 2; - const { newIndex, namedImports } = this.getNamedImports(index2); - index2 = newIndex; - if (this.tokens.matchesContextualAtIndex(index2, ContextualKeyword._from)) { - index2++; - } else { - for (const { importedName: localName, localName: exportedName } of namedImports) { - this.addExportBinding(localName, exportedName); - } - return; - } - if (!this.tokens.matches1AtIndex(index2, TokenType.string)) { - throw new Error("Expected string token at the end of import statement."); - } - const path = this.tokens.stringValueAtIndex(index2); - const importInfo = this.getImportInfo(path); - importInfo.namedExports.push(...namedImports); - } - preprocessExportStarAtIndex(index2) { - let exportedName = null; - if (this.tokens.matches3AtIndex(index2, TokenType._export, TokenType.star, TokenType._as)) { - index2 += 3; - exportedName = this.tokens.identifierNameAtIndex(index2); - index2 += 2; - } else { - index2 += 3; - } - if (!this.tokens.matches1AtIndex(index2, TokenType.string)) { - throw new Error("Expected string token at the end of star export statement."); - } - const path = this.tokens.stringValueAtIndex(index2); - const importInfo = this.getImportInfo(path); - if (exportedName !== null) { - importInfo.exportStarNames.push(exportedName); - } else { - importInfo.hasStarExport = true; - } - } - getNamedImports(index2) { - const namedImports = []; - while (true) { - if (this.tokens.matches1AtIndex(index2, TokenType.braceR)) { - index2++; - break; - } - const specifierInfo = getImportExportSpecifierInfo(this.tokens, index2); - index2 = specifierInfo.endIndex; - if (!specifierInfo.isType) { - namedImports.push({ - importedName: specifierInfo.leftName, - localName: specifierInfo.rightName - }); - } - if (this.tokens.matches2AtIndex(index2, TokenType.comma, TokenType.braceR)) { - index2 += 2; - break; - } else if (this.tokens.matches1AtIndex(index2, TokenType.braceR)) { - index2++; - break; - } else if (this.tokens.matches1AtIndex(index2, TokenType.comma)) { - index2++; - } else { - throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.tokens[index2])}`); - } - } - return { newIndex: index2, namedImports }; - } - /** - * Get a mutable import info object for this path, creating one if it doesn't - * exist yet. - */ - getImportInfo(path) { - const existingInfo = this.importInfoByPath.get(path); - if (existingInfo) { - return existingInfo; - } - const newInfo = { - defaultNames: [], - wildcardNames: [], - namedImports: [], - namedExports: [], - hasBareImport: false, - exportStarNames: [], - hasStarExport: false - }; - this.importInfoByPath.set(path, newInfo); - return newInfo; - } - addExportBinding(localName, exportedName) { - if (!this.exportBindingsByLocalName.has(localName)) { - this.exportBindingsByLocalName.set(localName, []); - } - this.exportBindingsByLocalName.get(localName).push(exportedName); - } - /** - * Return the code to use for the import for this path, or the empty string if - * the code has already been "claimed" by a previous import. - */ - claimImportCode(importPath) { - const result = this.importsToReplace.get(importPath); - this.importsToReplace.set(importPath, ""); - return result || ""; - } - getIdentifierReplacement(identifierName) { - return this.identifierReplacements.get(identifierName) || null; - } - /** - * Return a string like `exports.foo = exports.bar`. - */ - resolveExportBinding(assignedName) { - const exportedNames = this.exportBindingsByLocalName.get(assignedName); - if (!exportedNames || exportedNames.length === 0) { - return null; - } - return exportedNames.map((exportedName) => `exports.${exportedName}`).join(" = "); - } - /** - * Return all imported/exported names where we might be interested in whether usages of those - * names are shadowed. - */ - getGlobalNames() { - return /* @__PURE__ */ new Set([ - ...this.identifierReplacements.keys(), - ...this.exportBindingsByLocalName.keys() - ]); - } -}; - -// node_modules/sucrase/dist/esm/computeSourceMap.js -var import_gen_mapping = __toESM(require_gen_mapping_umd()); -function computeSourceMap({ code: generatedCode, mappings: rawMappings }, filePath, options2, source, tokens) { - const sourceColumns = computeSourceColumns(source, tokens); - const map = new import_gen_mapping.GenMapping({ file: options2.compiledFilename }); - let tokenIndex = 0; - let currentMapping = rawMappings[0]; - while (currentMapping === void 0 && tokenIndex < rawMappings.length - 1) { - tokenIndex++; - currentMapping = rawMappings[tokenIndex]; - } - let line2 = 0; - let lineStart = 0; - if (currentMapping !== lineStart) { - (0, import_gen_mapping.maybeAddSegment)(map, line2, 0, filePath, line2, 0); - } - for (let i4 = 0; i4 < generatedCode.length; i4++) { - if (i4 === currentMapping) { - const genColumn = currentMapping - lineStart; - const sourceColumn = sourceColumns[tokenIndex]; - (0, import_gen_mapping.maybeAddSegment)(map, line2, genColumn, filePath, line2, sourceColumn); - while ((currentMapping === i4 || currentMapping === void 0) && tokenIndex < rawMappings.length - 1) { - tokenIndex++; - currentMapping = rawMappings[tokenIndex]; - } - } - if (generatedCode.charCodeAt(i4) === charCodes.lineFeed) { - line2++; - lineStart = i4 + 1; - if (currentMapping !== lineStart) { - (0, import_gen_mapping.maybeAddSegment)(map, line2, 0, filePath, line2, 0); - } - } - } - const { sourceRoot, sourcesContent, ...sourceMap } = (0, import_gen_mapping.toEncodedMap)(map); - return sourceMap; -} -function computeSourceColumns(code, tokens) { - const sourceColumns = new Array(tokens.length); - let tokenIndex = 0; - let currentMapping = tokens[tokenIndex].start; - let lineStart = 0; - for (let i4 = 0; i4 < code.length; i4++) { - if (i4 === currentMapping) { - sourceColumns[tokenIndex] = currentMapping - lineStart; - tokenIndex++; - currentMapping = tokens[tokenIndex].start; - } - if (code.charCodeAt(i4) === charCodes.lineFeed) { - lineStart = i4 + 1; - } - } - return sourceColumns; -} - -// node_modules/sucrase/dist/esm/HelperManager.js -var HELPERS = { - require: ` - import {createRequire as CREATE_REQUIRE_NAME} from "module"; - const require = CREATE_REQUIRE_NAME(import.meta.url); - `, - interopRequireWildcard: ` - function interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } else { - var newObj = {}; - if (obj != null) { - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - newObj[key] = obj[key]; - } - } - } - newObj.default = obj; - return newObj; - } - } - `, - interopRequireDefault: ` - function interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - `, - createNamedExportFrom: ` - function createNamedExportFrom(obj, localName, importedName) { - Object.defineProperty(exports, localName, {enumerable: true, configurable: true, get: () => obj[importedName]}); - } - `, - // Note that TypeScript and Babel do this differently; TypeScript does a simple existence - // check in the exports object and does a plain assignment, whereas Babel uses - // defineProperty and builds an object of explicitly-exported names so that star exports can - // always take lower precedence. For now, we do the easier TypeScript thing. - createStarExport: ` - function createStarExport(obj) { - Object.keys(obj) - .filter((key) => key !== "default" && key !== "__esModule") - .forEach((key) => { - if (exports.hasOwnProperty(key)) { - return; - } - Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); - }); - } - `, - nullishCoalesce: ` - function nullishCoalesce(lhs, rhsFn) { - if (lhs != null) { - return lhs; - } else { - return rhsFn(); - } - } - `, - asyncNullishCoalesce: ` - async function asyncNullishCoalesce(lhs, rhsFn) { - if (lhs != null) { - return lhs; - } else { - return await rhsFn(); - } - } - `, - optionalChain: ` - function optionalChain(ops) { - let lastAccessLHS = undefined; - let value = ops[0]; - let i = 1; - while (i < ops.length) { - const op = ops[i]; - const fn = ops[i + 1]; - i += 2; - if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { - return undefined; - } - if (op === 'access' || op === 'optionalAccess') { - lastAccessLHS = value; - value = fn(value); - } else if (op === 'call' || op === 'optionalCall') { - value = fn((...args) => value.call(lastAccessLHS, ...args)); - lastAccessLHS = undefined; - } - } - return value; - } - `, - asyncOptionalChain: ` - async function asyncOptionalChain(ops) { - let lastAccessLHS = undefined; - let value = ops[0]; - let i = 1; - while (i < ops.length) { - const op = ops[i]; - const fn = ops[i + 1]; - i += 2; - if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { - return undefined; - } - if (op === 'access' || op === 'optionalAccess') { - lastAccessLHS = value; - value = await fn(value); - } else if (op === 'call' || op === 'optionalCall') { - value = await fn((...args) => value.call(lastAccessLHS, ...args)); - lastAccessLHS = undefined; - } - } - return value; - } - `, - optionalChainDelete: ` - function optionalChainDelete(ops) { - const result = OPTIONAL_CHAIN_NAME(ops); - return result == null ? true : result; - } - `, - asyncOptionalChainDelete: ` - async function asyncOptionalChainDelete(ops) { - const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops); - return result == null ? true : result; - } - ` -}; -var HelperManager = class { - __init() { - this.helperNames = {}; - } - __init2() { - this.createRequireName = null; - } - constructor(nameManager) { - ; - this.nameManager = nameManager; - HelperManager.prototype.__init.call(this); - HelperManager.prototype.__init2.call(this); - } - getHelperName(baseName) { - let helperName = this.helperNames[baseName]; - if (helperName) { - return helperName; - } - helperName = this.nameManager.claimFreeName(`_${baseName}`); - this.helperNames[baseName] = helperName; - return helperName; - } - emitHelpers() { - let resultCode = ""; - if (this.helperNames.optionalChainDelete) { - this.getHelperName("optionalChain"); - } - if (this.helperNames.asyncOptionalChainDelete) { - this.getHelperName("asyncOptionalChain"); - } - for (const [baseName, helperCodeTemplate] of Object.entries(HELPERS)) { - const helperName = this.helperNames[baseName]; - let helperCode = helperCodeTemplate; - if (baseName === "optionalChainDelete") { - helperCode = helperCode.replace("OPTIONAL_CHAIN_NAME", this.helperNames.optionalChain); - } else if (baseName === "asyncOptionalChainDelete") { - helperCode = helperCode.replace( - "ASYNC_OPTIONAL_CHAIN_NAME", - this.helperNames.asyncOptionalChain - ); - } else if (baseName === "require") { - if (this.createRequireName === null) { - this.createRequireName = this.nameManager.claimFreeName("_createRequire"); - } - helperCode = helperCode.replace(/CREATE_REQUIRE_NAME/g, this.createRequireName); - } - if (helperName) { - resultCode += " "; - resultCode += helperCode.replace(baseName, helperName).replace(/\s+/g, " ").trim(); - } - } - return resultCode; - } -}; - -// node_modules/sucrase/dist/esm/identifyShadowedGlobals.js -function identifyShadowedGlobals(tokens, scopes, globalNames) { - if (!hasShadowedGlobals(tokens, globalNames)) { - return; - } - markShadowedGlobals(tokens, scopes, globalNames); -} -function hasShadowedGlobals(tokens, globalNames) { - for (const token2 of tokens.tokens) { - if (token2.type === TokenType.name && !token2.isType && isNonTopLevelDeclaration(token2) && globalNames.has(tokens.identifierNameForToken(token2))) { - return true; - } - } - return false; -} -function markShadowedGlobals(tokens, scopes, globalNames) { - const scopeStack = []; - let scopeIndex = scopes.length - 1; - for (let i4 = tokens.tokens.length - 1; ; i4--) { - while (scopeStack.length > 0 && scopeStack[scopeStack.length - 1].startTokenIndex === i4 + 1) { - scopeStack.pop(); - } - while (scopeIndex >= 0 && scopes[scopeIndex].endTokenIndex === i4 + 1) { - scopeStack.push(scopes[scopeIndex]); - scopeIndex--; - } - if (i4 < 0) { - break; - } - const token2 = tokens.tokens[i4]; - const name = tokens.identifierNameForToken(token2); - if (scopeStack.length > 1 && !token2.isType && token2.type === TokenType.name && globalNames.has(name)) { - if (isBlockScopedDeclaration(token2)) { - markShadowedForScope(scopeStack[scopeStack.length - 1], tokens, name); - } else if (isFunctionScopedDeclaration(token2)) { - let stackIndex = scopeStack.length - 1; - while (stackIndex > 0 && !scopeStack[stackIndex].isFunctionScope) { - stackIndex--; - } - if (stackIndex < 0) { - throw new Error("Did not find parent function scope."); - } - markShadowedForScope(scopeStack[stackIndex], tokens, name); - } - } - } - if (scopeStack.length > 0) { - throw new Error("Expected empty scope stack after processing file."); - } -} -function markShadowedForScope(scope, tokens, name) { - for (let i4 = scope.startTokenIndex; i4 < scope.endTokenIndex; i4++) { - const token2 = tokens.tokens[i4]; - if ((token2.type === TokenType.name || token2.type === TokenType.jsxName) && tokens.identifierNameForToken(token2) === name) { - token2.shadowsGlobal = true; - } - } -} - -// node_modules/sucrase/dist/esm/util/getIdentifierNames.js -function getIdentifierNames(code, tokens) { - const names = []; - for (const token2 of tokens) { - if (token2.type === TokenType.name) { - names.push(code.slice(token2.start, token2.end)); - } - } - return names; -} - -// node_modules/sucrase/dist/esm/NameManager.js -var NameManager = class { - __init() { - this.usedNames = /* @__PURE__ */ new Set(); - } - constructor(code, tokens) { - ; - NameManager.prototype.__init.call(this); - this.usedNames = new Set(getIdentifierNames(code, tokens)); - } - claimFreeName(name) { - const newName = this.findFreeName(name); - this.usedNames.add(newName); - return newName; - } - findFreeName(name) { - if (!this.usedNames.has(name)) { - return name; - } - let suffixNum = 2; - while (this.usedNames.has(name + String(suffixNum))) { - suffixNum++; - } - return name + String(suffixNum); - } -}; - -// node_modules/sucrase/dist/esm/Options.js -var import_ts_interface_checker = __toESM(require_dist()); - -// node_modules/sucrase/dist/esm/Options-gen-types.js -var t3 = __toESM(require_dist()); -var Transform = t3.union( - t3.lit("jsx"), - t3.lit("typescript"), - t3.lit("flow"), - t3.lit("imports"), - t3.lit("react-hot-loader"), - t3.lit("jest") -); -var SourceMapOptions = t3.iface([], { - compiledFilename: "string" -}); -var Options = t3.iface([], { - transforms: t3.array("Transform"), - disableESTransforms: t3.opt("boolean"), - jsxRuntime: t3.opt(t3.union(t3.lit("classic"), t3.lit("automatic"), t3.lit("preserve"))), - production: t3.opt("boolean"), - jsxImportSource: t3.opt("string"), - jsxPragma: t3.opt("string"), - jsxFragmentPragma: t3.opt("string"), - keepUnusedImports: t3.opt("boolean"), - preserveDynamicImport: t3.opt("boolean"), - injectCreateRequireForImportRequire: t3.opt("boolean"), - enableLegacyTypeScriptModuleInterop: t3.opt("boolean"), - enableLegacyBabel5ModuleInterop: t3.opt("boolean"), - sourceMapOptions: t3.opt("SourceMapOptions"), - filePath: t3.opt("string") -}); -var exportedTypeSuite = { - Transform, - SourceMapOptions, - Options -}; -var Options_gen_types_default = exportedTypeSuite; - -// node_modules/sucrase/dist/esm/Options.js -var { Options: OptionsChecker } = (0, import_ts_interface_checker.createCheckers)(Options_gen_types_default); -function validateOptions(options2) { - OptionsChecker.strictCheck(options2); -} - -// node_modules/sucrase/dist/esm/parser/traverser/lval.js -function parseSpread() { - next(); - parseMaybeAssign(false); -} -function parseRest(isBlockScope) { - next(); - parseBindingAtom(isBlockScope); -} -function parseBindingIdentifier(isBlockScope) { - parseIdentifier(); - markPriorBindingIdentifier(isBlockScope); -} -function parseImportedIdentifier() { - parseIdentifier(); - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration; -} -function markPriorBindingIdentifier(isBlockScope) { - let identifierRole; - if (state.scopeDepth === 0) { - identifierRole = IdentifierRole.TopLevelDeclaration; - } else if (isBlockScope) { - identifierRole = IdentifierRole.BlockScopedDeclaration; - } else { - identifierRole = IdentifierRole.FunctionScopedDeclaration; - } - state.tokens[state.tokens.length - 1].identifierRole = identifierRole; -} -function parseBindingAtom(isBlockScope) { - switch (state.type) { - case TokenType._this: { - const oldIsType = pushTypeContext(0); - next(); - popTypeContext(oldIsType); - return; - } - case TokenType._yield: - case TokenType.name: { - state.type = TokenType.name; - parseBindingIdentifier(isBlockScope); - return; - } - case TokenType.bracketL: { - next(); - parseBindingList( - TokenType.bracketR, - isBlockScope, - true - /* allowEmpty */ - ); - return; - } - case TokenType.braceL: - parseObj(true, isBlockScope); - return; - default: - unexpected(); - } -} -function parseBindingList(close, isBlockScope, allowEmpty = false, allowModifiers = false, contextId = 0) { - let first = true; - let hasRemovedComma = false; - const firstItemTokenIndex = state.tokens.length; - while (!eat(close) && !state.error) { - if (first) { - first = false; - } else { - expect(TokenType.comma); - state.tokens[state.tokens.length - 1].contextId = contextId; - if (!hasRemovedComma && state.tokens[firstItemTokenIndex].isType) { - state.tokens[state.tokens.length - 1].isType = true; - hasRemovedComma = true; - } - } - if (allowEmpty && match2(TokenType.comma)) { - } else if (eat(close)) { - break; - } else if (match2(TokenType.ellipsis)) { - parseRest(isBlockScope); - parseAssignableListItemTypes(); - eat(TokenType.comma); - expect(close); - break; - } else { - parseAssignableListItem(allowModifiers, isBlockScope); - } - } -} -function parseAssignableListItem(allowModifiers, isBlockScope) { - if (allowModifiers) { - tsParseModifiers([ - ContextualKeyword._public, - ContextualKeyword._protected, - ContextualKeyword._private, - ContextualKeyword._readonly, - ContextualKeyword._override - ]); - } - parseMaybeDefault(isBlockScope); - parseAssignableListItemTypes(); - parseMaybeDefault( - isBlockScope, - true - /* leftAlreadyParsed */ - ); -} -function parseAssignableListItemTypes() { - if (isFlowEnabled) { - flowParseAssignableListItemTypes(); - } else if (isTypeScriptEnabled) { - tsParseAssignableListItemTypes(); - } -} -function parseMaybeDefault(isBlockScope, leftAlreadyParsed = false) { - if (!leftAlreadyParsed) { - parseBindingAtom(isBlockScope); - } - if (!eat(TokenType.eq)) { - return; - } - const eqIndex = state.tokens.length - 1; - parseMaybeAssign(); - state.tokens[eqIndex].rhsEndIndex = state.tokens.length; -} - -// node_modules/sucrase/dist/esm/parser/plugins/typescript.js -function tsIsIdentifier() { - return match2(TokenType.name); -} -function isLiteralPropertyName() { - return match2(TokenType.name) || Boolean(state.type & TokenType.IS_KEYWORD) || match2(TokenType.string) || match2(TokenType.num) || match2(TokenType.bigint) || match2(TokenType.decimal); -} -function tsNextTokenCanFollowModifier() { - const snapshot = state.snapshot(); - next(); - const canFollowModifier = (match2(TokenType.bracketL) || match2(TokenType.braceL) || match2(TokenType.star) || match2(TokenType.ellipsis) || match2(TokenType.hash) || isLiteralPropertyName()) && !hasPrecedingLineBreak(); - if (canFollowModifier) { - return true; - } else { - state.restoreFromSnapshot(snapshot); - return false; - } -} -function tsParseModifiers(allowedModifiers) { - while (true) { - const modifier = tsParseModifier(allowedModifiers); - if (modifier === null) { - break; - } - } -} -function tsParseModifier(allowedModifiers) { - if (!match2(TokenType.name)) { - return null; - } - const modifier = state.contextualKeyword; - if (allowedModifiers.indexOf(modifier) !== -1 && tsNextTokenCanFollowModifier()) { - switch (modifier) { - case ContextualKeyword._readonly: - state.tokens[state.tokens.length - 1].type = TokenType._readonly; - break; - case ContextualKeyword._abstract: - state.tokens[state.tokens.length - 1].type = TokenType._abstract; - break; - case ContextualKeyword._static: - state.tokens[state.tokens.length - 1].type = TokenType._static; - break; - case ContextualKeyword._public: - state.tokens[state.tokens.length - 1].type = TokenType._public; - break; - case ContextualKeyword._private: - state.tokens[state.tokens.length - 1].type = TokenType._private; - break; - case ContextualKeyword._protected: - state.tokens[state.tokens.length - 1].type = TokenType._protected; - break; - case ContextualKeyword._override: - state.tokens[state.tokens.length - 1].type = TokenType._override; - break; - case ContextualKeyword._declare: - state.tokens[state.tokens.length - 1].type = TokenType._declare; - break; - default: - break; - } - return modifier; - } - return null; -} -function tsParseEntityName() { - parseIdentifier(); - while (eat(TokenType.dot)) { - parseIdentifier(); - } -} -function tsParseTypeReference() { - tsParseEntityName(); - if (!hasPrecedingLineBreak() && match2(TokenType.lessThan)) { - tsParseTypeArguments(); - } -} -function tsParseThisTypePredicate() { - next(); - tsParseTypeAnnotation(); -} -function tsParseThisTypeNode() { - next(); -} -function tsParseTypeQuery() { - expect(TokenType._typeof); - if (match2(TokenType._import)) { - tsParseImportType(); - } else { - tsParseEntityName(); - } - if (!hasPrecedingLineBreak() && match2(TokenType.lessThan)) { - tsParseTypeArguments(); - } -} -function tsParseImportType() { - expect(TokenType._import); - expect(TokenType.parenL); - expect(TokenType.string); - expect(TokenType.parenR); - if (eat(TokenType.dot)) { - tsParseEntityName(); - } - if (match2(TokenType.lessThan)) { - tsParseTypeArguments(); - } -} -function tsParseTypeParameter() { - eat(TokenType._const); - const hadIn = eat(TokenType._in); - const hadOut = eatContextual(ContextualKeyword._out); - eat(TokenType._const); - if ((hadIn || hadOut) && !match2(TokenType.name)) { - state.tokens[state.tokens.length - 1].type = TokenType.name; - } else { - parseIdentifier(); - } - if (eat(TokenType._extends)) { - tsParseType(); - } - if (eat(TokenType.eq)) { - tsParseType(); - } -} -function tsTryParseTypeParameters() { - if (match2(TokenType.lessThan)) { - tsParseTypeParameters(); - } -} -function tsParseTypeParameters() { - const oldIsType = pushTypeContext(0); - if (match2(TokenType.lessThan) || match2(TokenType.typeParameterStart)) { - next(); - } else { - unexpected(); - } - while (!eat(TokenType.greaterThan) && !state.error) { - tsParseTypeParameter(); - eat(TokenType.comma); - } - popTypeContext(oldIsType); -} -function tsFillSignature(returnToken) { - const returnTokenRequired = returnToken === TokenType.arrow; - tsTryParseTypeParameters(); - expect(TokenType.parenL); - state.scopeDepth++; - tsParseBindingListForSignature( - false - /* isBlockScope */ - ); - state.scopeDepth--; - if (returnTokenRequired) { - tsParseTypeOrTypePredicateAnnotation(returnToken); - } else if (match2(returnToken)) { - tsParseTypeOrTypePredicateAnnotation(returnToken); - } -} -function tsParseBindingListForSignature(isBlockScope) { - parseBindingList(TokenType.parenR, isBlockScope); -} -function tsParseTypeMemberSemicolon() { - if (!eat(TokenType.comma)) { - semicolon(); - } -} -function tsParseSignatureMember() { - tsFillSignature(TokenType.colon); - tsParseTypeMemberSemicolon(); -} -function tsIsUnambiguouslyIndexSignature() { - const snapshot = state.snapshot(); - next(); - const isIndexSignature = eat(TokenType.name) && match2(TokenType.colon); - state.restoreFromSnapshot(snapshot); - return isIndexSignature; -} -function tsTryParseIndexSignature() { - if (!(match2(TokenType.bracketL) && tsIsUnambiguouslyIndexSignature())) { - return false; - } - const oldIsType = pushTypeContext(0); - expect(TokenType.bracketL); - parseIdentifier(); - tsParseTypeAnnotation(); - expect(TokenType.bracketR); - tsTryParseTypeAnnotation(); - tsParseTypeMemberSemicolon(); - popTypeContext(oldIsType); - return true; -} -function tsParsePropertyOrMethodSignature(isReadonly) { - eat(TokenType.question); - if (!isReadonly && (match2(TokenType.parenL) || match2(TokenType.lessThan))) { - tsFillSignature(TokenType.colon); - tsParseTypeMemberSemicolon(); - } else { - tsTryParseTypeAnnotation(); - tsParseTypeMemberSemicolon(); - } -} -function tsParseTypeMember() { - if (match2(TokenType.parenL) || match2(TokenType.lessThan)) { - tsParseSignatureMember(); - return; - } - if (match2(TokenType._new)) { - next(); - if (match2(TokenType.parenL) || match2(TokenType.lessThan)) { - tsParseSignatureMember(); - } else { - tsParsePropertyOrMethodSignature(false); - } - return; - } - const readonly = !!tsParseModifier([ContextualKeyword._readonly]); - const found = tsTryParseIndexSignature(); - if (found) { - return; - } - if ((isContextual(ContextualKeyword._get) || isContextual(ContextualKeyword._set)) && tsNextTokenCanFollowModifier()) { - } - parsePropertyName( - -1 - /* Types don't need context IDs. */ - ); - tsParsePropertyOrMethodSignature(readonly); -} -function tsParseTypeLiteral() { - tsParseObjectTypeMembers(); -} -function tsParseObjectTypeMembers() { - expect(TokenType.braceL); - while (!eat(TokenType.braceR) && !state.error) { - tsParseTypeMember(); - } -} -function tsLookaheadIsStartOfMappedType() { - const snapshot = state.snapshot(); - const isStartOfMappedType = tsIsStartOfMappedType(); - state.restoreFromSnapshot(snapshot); - return isStartOfMappedType; -} -function tsIsStartOfMappedType() { - next(); - if (eat(TokenType.plus) || eat(TokenType.minus)) { - return isContextual(ContextualKeyword._readonly); - } - if (isContextual(ContextualKeyword._readonly)) { - next(); - } - if (!match2(TokenType.bracketL)) { - return false; - } - next(); - if (!tsIsIdentifier()) { - return false; - } - next(); - return match2(TokenType._in); -} -function tsParseMappedTypeParameter() { - parseIdentifier(); - expect(TokenType._in); - tsParseType(); -} -function tsParseMappedType() { - expect(TokenType.braceL); - if (match2(TokenType.plus) || match2(TokenType.minus)) { - next(); - expectContextual(ContextualKeyword._readonly); - } else { - eatContextual(ContextualKeyword._readonly); - } - expect(TokenType.bracketL); - tsParseMappedTypeParameter(); - if (eatContextual(ContextualKeyword._as)) { - tsParseType(); - } - expect(TokenType.bracketR); - if (match2(TokenType.plus) || match2(TokenType.minus)) { - next(); - expect(TokenType.question); - } else { - eat(TokenType.question); - } - tsTryParseType(); - semicolon(); - expect(TokenType.braceR); -} -function tsParseTupleType() { - expect(TokenType.bracketL); - while (!eat(TokenType.bracketR) && !state.error) { - tsParseTupleElementType(); - eat(TokenType.comma); - } -} -function tsParseTupleElementType() { - if (eat(TokenType.ellipsis)) { - tsParseType(); - } else { - tsParseType(); - eat(TokenType.question); - } - if (eat(TokenType.colon)) { - tsParseType(); - } -} -function tsParseParenthesizedType() { - expect(TokenType.parenL); - tsParseType(); - expect(TokenType.parenR); -} -function tsParseTemplateLiteralType() { - nextTemplateToken(); - nextTemplateToken(); - while (!match2(TokenType.backQuote) && !state.error) { - expect(TokenType.dollarBraceL); - tsParseType(); - nextTemplateToken(); - nextTemplateToken(); - } - next(); -} -var FunctionType; -(function(FunctionType2) { - const TSFunctionType = 0; - FunctionType2[FunctionType2["TSFunctionType"] = TSFunctionType] = "TSFunctionType"; - const TSConstructorType = TSFunctionType + 1; - FunctionType2[FunctionType2["TSConstructorType"] = TSConstructorType] = "TSConstructorType"; - const TSAbstractConstructorType = TSConstructorType + 1; - FunctionType2[FunctionType2["TSAbstractConstructorType"] = TSAbstractConstructorType] = "TSAbstractConstructorType"; -})(FunctionType || (FunctionType = {})); -function tsParseFunctionOrConstructorType(type) { - if (type === FunctionType.TSAbstractConstructorType) { - expectContextual(ContextualKeyword._abstract); - } - if (type === FunctionType.TSConstructorType || type === FunctionType.TSAbstractConstructorType) { - expect(TokenType._new); - } - const oldInDisallowConditionalTypesContext = state.inDisallowConditionalTypesContext; - state.inDisallowConditionalTypesContext = false; - tsFillSignature(TokenType.arrow); - state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; -} -function tsParseNonArrayType() { - switch (state.type) { - case TokenType.name: - tsParseTypeReference(); - return; - case TokenType._void: - case TokenType._null: - next(); - return; - case TokenType.string: - case TokenType.num: - case TokenType.bigint: - case TokenType.decimal: - case TokenType._true: - case TokenType._false: - parseLiteral(); - return; - case TokenType.minus: - next(); - parseLiteral(); - return; - case TokenType._this: { - tsParseThisTypeNode(); - if (isContextual(ContextualKeyword._is) && !hasPrecedingLineBreak()) { - tsParseThisTypePredicate(); - } - return; - } - case TokenType._typeof: - tsParseTypeQuery(); - return; - case TokenType._import: - tsParseImportType(); - return; - case TokenType.braceL: - if (tsLookaheadIsStartOfMappedType()) { - tsParseMappedType(); - } else { - tsParseTypeLiteral(); - } - return; - case TokenType.bracketL: - tsParseTupleType(); - return; - case TokenType.parenL: - tsParseParenthesizedType(); - return; - case TokenType.backQuote: - tsParseTemplateLiteralType(); - return; - default: - if (state.type & TokenType.IS_KEYWORD) { - next(); - state.tokens[state.tokens.length - 1].type = TokenType.name; - return; - } - break; - } - unexpected(); -} -function tsParseArrayTypeOrHigher() { - tsParseNonArrayType(); - while (!hasPrecedingLineBreak() && eat(TokenType.bracketL)) { - if (!eat(TokenType.bracketR)) { - tsParseType(); - expect(TokenType.bracketR); - } - } -} -function tsParseInferType() { - expectContextual(ContextualKeyword._infer); - parseIdentifier(); - if (match2(TokenType._extends)) { - const snapshot = state.snapshot(); - expect(TokenType._extends); - const oldInDisallowConditionalTypesContext = state.inDisallowConditionalTypesContext; - state.inDisallowConditionalTypesContext = true; - tsParseType(); - state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; - if (state.error || !state.inDisallowConditionalTypesContext && match2(TokenType.question)) { - state.restoreFromSnapshot(snapshot); - } - } -} -function tsParseTypeOperatorOrHigher() { - if (isContextual(ContextualKeyword._keyof) || isContextual(ContextualKeyword._unique) || isContextual(ContextualKeyword._readonly)) { - next(); - tsParseTypeOperatorOrHigher(); - } else if (isContextual(ContextualKeyword._infer)) { - tsParseInferType(); - } else { - const oldInDisallowConditionalTypesContext = state.inDisallowConditionalTypesContext; - state.inDisallowConditionalTypesContext = false; - tsParseArrayTypeOrHigher(); - state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; - } -} -function tsParseIntersectionTypeOrHigher() { - eat(TokenType.bitwiseAND); - tsParseTypeOperatorOrHigher(); - if (match2(TokenType.bitwiseAND)) { - while (eat(TokenType.bitwiseAND)) { - tsParseTypeOperatorOrHigher(); - } - } -} -function tsParseUnionTypeOrHigher() { - eat(TokenType.bitwiseOR); - tsParseIntersectionTypeOrHigher(); - if (match2(TokenType.bitwiseOR)) { - while (eat(TokenType.bitwiseOR)) { - tsParseIntersectionTypeOrHigher(); - } - } -} -function tsIsStartOfFunctionType() { - if (match2(TokenType.lessThan)) { - return true; - } - return match2(TokenType.parenL) && tsLookaheadIsUnambiguouslyStartOfFunctionType(); -} -function tsSkipParameterStart() { - if (match2(TokenType.name) || match2(TokenType._this)) { - next(); - return true; - } - if (match2(TokenType.braceL) || match2(TokenType.bracketL)) { - let depth = 1; - next(); - while (depth > 0 && !state.error) { - if (match2(TokenType.braceL) || match2(TokenType.bracketL)) { - depth++; - } else if (match2(TokenType.braceR) || match2(TokenType.bracketR)) { - depth--; - } - next(); - } - return true; - } - return false; -} -function tsLookaheadIsUnambiguouslyStartOfFunctionType() { - const snapshot = state.snapshot(); - const isUnambiguouslyStartOfFunctionType = tsIsUnambiguouslyStartOfFunctionType(); - state.restoreFromSnapshot(snapshot); - return isUnambiguouslyStartOfFunctionType; -} -function tsIsUnambiguouslyStartOfFunctionType() { - next(); - if (match2(TokenType.parenR) || match2(TokenType.ellipsis)) { - return true; - } - if (tsSkipParameterStart()) { - if (match2(TokenType.colon) || match2(TokenType.comma) || match2(TokenType.question) || match2(TokenType.eq)) { - return true; - } - if (match2(TokenType.parenR)) { - next(); - if (match2(TokenType.arrow)) { - return true; - } - } - } - return false; -} -function tsParseTypeOrTypePredicateAnnotation(returnToken) { - const oldIsType = pushTypeContext(0); - expect(returnToken); - const finishedReturn = tsParseTypePredicateOrAssertsPrefix(); - if (!finishedReturn) { - tsParseType(); - } - popTypeContext(oldIsType); -} -function tsTryParseTypeOrTypePredicateAnnotation() { - if (match2(TokenType.colon)) { - tsParseTypeOrTypePredicateAnnotation(TokenType.colon); - } -} -function tsTryParseTypeAnnotation() { - if (match2(TokenType.colon)) { - tsParseTypeAnnotation(); - } -} -function tsTryParseType() { - if (eat(TokenType.colon)) { - tsParseType(); - } -} -function tsParseTypePredicateOrAssertsPrefix() { - const snapshot = state.snapshot(); - if (isContextual(ContextualKeyword._asserts)) { - next(); - if (eatContextual(ContextualKeyword._is)) { - tsParseType(); - return true; - } else if (tsIsIdentifier() || match2(TokenType._this)) { - next(); - if (eatContextual(ContextualKeyword._is)) { - tsParseType(); - } - return true; - } else { - state.restoreFromSnapshot(snapshot); - return false; - } - } else if (tsIsIdentifier() || match2(TokenType._this)) { - next(); - if (isContextual(ContextualKeyword._is) && !hasPrecedingLineBreak()) { - next(); - tsParseType(); - return true; - } else { - state.restoreFromSnapshot(snapshot); - return false; - } - } - return false; -} -function tsParseTypeAnnotation() { - const oldIsType = pushTypeContext(0); - expect(TokenType.colon); - tsParseType(); - popTypeContext(oldIsType); -} -function tsParseType() { - tsParseNonConditionalType(); - if (state.inDisallowConditionalTypesContext || hasPrecedingLineBreak() || !eat(TokenType._extends)) { - return; - } - const oldInDisallowConditionalTypesContext = state.inDisallowConditionalTypesContext; - state.inDisallowConditionalTypesContext = true; - tsParseNonConditionalType(); - state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext; - expect(TokenType.question); - tsParseType(); - expect(TokenType.colon); - tsParseType(); -} -function isAbstractConstructorSignature() { - return isContextual(ContextualKeyword._abstract) && lookaheadType() === TokenType._new; -} -function tsParseNonConditionalType() { - if (tsIsStartOfFunctionType()) { - tsParseFunctionOrConstructorType(FunctionType.TSFunctionType); - return; - } - if (match2(TokenType._new)) { - tsParseFunctionOrConstructorType(FunctionType.TSConstructorType); - return; - } else if (isAbstractConstructorSignature()) { - tsParseFunctionOrConstructorType(FunctionType.TSAbstractConstructorType); - return; - } - tsParseUnionTypeOrHigher(); -} -function tsParseTypeAssertion() { - const oldIsType = pushTypeContext(1); - tsParseType(); - expect(TokenType.greaterThan); - popTypeContext(oldIsType); - parseMaybeUnary(); -} -function tsTryParseJSXTypeArgument() { - if (eat(TokenType.jsxTagStart)) { - state.tokens[state.tokens.length - 1].type = TokenType.typeParameterStart; - const oldIsType = pushTypeContext(1); - while (!match2(TokenType.greaterThan) && !state.error) { - tsParseType(); - eat(TokenType.comma); - } - nextJSXTagToken(); - popTypeContext(oldIsType); - } -} -function tsParseHeritageClause() { - while (!match2(TokenType.braceL) && !state.error) { - tsParseExpressionWithTypeArguments(); - eat(TokenType.comma); - } -} -function tsParseExpressionWithTypeArguments() { - tsParseEntityName(); - if (match2(TokenType.lessThan)) { - tsParseTypeArguments(); - } -} -function tsParseInterfaceDeclaration() { - parseBindingIdentifier(false); - tsTryParseTypeParameters(); - if (eat(TokenType._extends)) { - tsParseHeritageClause(); - } - tsParseObjectTypeMembers(); -} -function tsParseTypeAliasDeclaration() { - parseBindingIdentifier(false); - tsTryParseTypeParameters(); - expect(TokenType.eq); - tsParseType(); - semicolon(); -} -function tsParseEnumMember() { - if (match2(TokenType.string)) { - parseLiteral(); - } else { - parseIdentifier(); - } - if (eat(TokenType.eq)) { - const eqIndex = state.tokens.length - 1; - parseMaybeAssign(); - state.tokens[eqIndex].rhsEndIndex = state.tokens.length; - } -} -function tsParseEnumDeclaration() { - parseBindingIdentifier(false); - expect(TokenType.braceL); - while (!eat(TokenType.braceR) && !state.error) { - tsParseEnumMember(); - eat(TokenType.comma); - } -} -function tsParseModuleBlock() { - expect(TokenType.braceL); - parseBlockBody( - /* end */ - TokenType.braceR - ); -} -function tsParseModuleOrNamespaceDeclaration() { - parseBindingIdentifier(false); - if (eat(TokenType.dot)) { - tsParseModuleOrNamespaceDeclaration(); - } else { - tsParseModuleBlock(); - } -} -function tsParseAmbientExternalModuleDeclaration() { - if (isContextual(ContextualKeyword._global)) { - parseIdentifier(); - } else if (match2(TokenType.string)) { - parseExprAtom(); - } else { - unexpected(); - } - if (match2(TokenType.braceL)) { - tsParseModuleBlock(); - } else { - semicolon(); - } -} -function tsParseImportEqualsDeclaration() { - parseImportedIdentifier(); - expect(TokenType.eq); - tsParseModuleReference(); - semicolon(); -} -function tsIsExternalModuleReference() { - return isContextual(ContextualKeyword._require) && lookaheadType() === TokenType.parenL; -} -function tsParseModuleReference() { - if (tsIsExternalModuleReference()) { - tsParseExternalModuleReference(); - } else { - tsParseEntityName(); - } -} -function tsParseExternalModuleReference() { - expectContextual(ContextualKeyword._require); - expect(TokenType.parenL); - if (!match2(TokenType.string)) { - unexpected(); - } - parseLiteral(); - expect(TokenType.parenR); -} -function tsTryParseDeclare() { - if (isLineTerminator()) { - return false; - } - switch (state.type) { - case TokenType._function: { - const oldIsType = pushTypeContext(1); - next(); - const functionStart = state.start; - parseFunction( - functionStart, - /* isStatement */ - true - ); - popTypeContext(oldIsType); - return true; - } - case TokenType._class: { - const oldIsType = pushTypeContext(1); - parseClass( - /* isStatement */ - true, - /* optionalId */ - false - ); - popTypeContext(oldIsType); - return true; - } - case TokenType._const: { - if (match2(TokenType._const) && isLookaheadContextual(ContextualKeyword._enum)) { - const oldIsType = pushTypeContext(1); - expect(TokenType._const); - expectContextual(ContextualKeyword._enum); - state.tokens[state.tokens.length - 1].type = TokenType._enum; - tsParseEnumDeclaration(); - popTypeContext(oldIsType); - return true; - } - } - case TokenType._var: - case TokenType._let: { - const oldIsType = pushTypeContext(1); - parseVarStatement(state.type !== TokenType._var); - popTypeContext(oldIsType); - return true; - } - case TokenType.name: { - const oldIsType = pushTypeContext(1); - const contextualKeyword = state.contextualKeyword; - let matched = false; - if (contextualKeyword === ContextualKeyword._global) { - tsParseAmbientExternalModuleDeclaration(); - matched = true; - } else { - matched = tsParseDeclaration( - contextualKeyword, - /* isBeforeToken */ - true - ); - } - popTypeContext(oldIsType); - return matched; - } - default: - return false; - } -} -function tsTryParseExportDeclaration() { - return tsParseDeclaration( - state.contextualKeyword, - /* isBeforeToken */ - true - ); -} -function tsParseExpressionStatement(contextualKeyword) { - switch (contextualKeyword) { - case ContextualKeyword._declare: { - const declareTokenIndex = state.tokens.length - 1; - const matched = tsTryParseDeclare(); - if (matched) { - state.tokens[declareTokenIndex].type = TokenType._declare; - return true; - } - break; - } - case ContextualKeyword._global: - if (match2(TokenType.braceL)) { - tsParseModuleBlock(); - return true; - } - break; - default: - return tsParseDeclaration( - contextualKeyword, - /* isBeforeToken */ - false - ); - } - return false; -} -function tsParseDeclaration(contextualKeyword, isBeforeToken) { - switch (contextualKeyword) { - case ContextualKeyword._abstract: - if (tsCheckLineTerminator(isBeforeToken) && match2(TokenType._class)) { - state.tokens[state.tokens.length - 1].type = TokenType._abstract; - parseClass( - /* isStatement */ - true, - /* optionalId */ - false - ); - return true; - } - break; - case ContextualKeyword._enum: - if (tsCheckLineTerminator(isBeforeToken) && match2(TokenType.name)) { - state.tokens[state.tokens.length - 1].type = TokenType._enum; - tsParseEnumDeclaration(); - return true; - } - break; - case ContextualKeyword._interface: - if (tsCheckLineTerminator(isBeforeToken) && match2(TokenType.name)) { - const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1); - tsParseInterfaceDeclaration(); - popTypeContext(oldIsType); - return true; - } - break; - case ContextualKeyword._module: - if (tsCheckLineTerminator(isBeforeToken)) { - if (match2(TokenType.string)) { - const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1); - tsParseAmbientExternalModuleDeclaration(); - popTypeContext(oldIsType); - return true; - } else if (match2(TokenType.name)) { - const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1); - tsParseModuleOrNamespaceDeclaration(); - popTypeContext(oldIsType); - return true; - } - } - break; - case ContextualKeyword._namespace: - if (tsCheckLineTerminator(isBeforeToken) && match2(TokenType.name)) { - const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1); - tsParseModuleOrNamespaceDeclaration(); - popTypeContext(oldIsType); - return true; - } - break; - case ContextualKeyword._type: - if (tsCheckLineTerminator(isBeforeToken) && match2(TokenType.name)) { - const oldIsType = pushTypeContext(isBeforeToken ? 2 : 1); - tsParseTypeAliasDeclaration(); - popTypeContext(oldIsType); - return true; - } - break; - default: - break; - } - return false; -} -function tsCheckLineTerminator(isBeforeToken) { - if (isBeforeToken) { - next(); - return true; - } else { - return !isLineTerminator(); - } -} -function tsTryParseGenericAsyncArrowFunction() { - const snapshot = state.snapshot(); - tsParseTypeParameters(); - parseFunctionParams(); - tsTryParseTypeOrTypePredicateAnnotation(); - expect(TokenType.arrow); - if (state.error) { - state.restoreFromSnapshot(snapshot); - return false; - } - parseFunctionBody(true); - return true; -} -function tsParseTypeArgumentsWithPossibleBitshift() { - if (state.type === TokenType.bitShiftL) { - state.pos -= 1; - finishToken(TokenType.lessThan); - } - tsParseTypeArguments(); -} -function tsParseTypeArguments() { - const oldIsType = pushTypeContext(0); - expect(TokenType.lessThan); - while (!match2(TokenType.greaterThan) && !state.error) { - tsParseType(); - eat(TokenType.comma); - } - if (!oldIsType) { - popTypeContext(oldIsType); - rescan_gt(); - expect(TokenType.greaterThan); - state.tokens[state.tokens.length - 1].isType = true; - } else { - expect(TokenType.greaterThan); - popTypeContext(oldIsType); - } -} -function tsIsDeclarationStart() { - if (match2(TokenType.name)) { - switch (state.contextualKeyword) { - case ContextualKeyword._abstract: - case ContextualKeyword._declare: - case ContextualKeyword._enum: - case ContextualKeyword._interface: - case ContextualKeyword._module: - case ContextualKeyword._namespace: - case ContextualKeyword._type: - return true; - default: - break; - } - } - return false; -} -function tsParseFunctionBodyAndFinish(functionStart, funcContextId) { - if (match2(TokenType.colon)) { - tsParseTypeOrTypePredicateAnnotation(TokenType.colon); - } - if (!match2(TokenType.braceL) && isLineTerminator()) { - let i4 = state.tokens.length - 1; - while (i4 >= 0 && (state.tokens[i4].start >= functionStart || state.tokens[i4].type === TokenType._default || state.tokens[i4].type === TokenType._export)) { - state.tokens[i4].isType = true; - i4--; - } - return; - } - parseFunctionBody(false, funcContextId); -} -function tsParseSubscript(startTokenIndex, noCalls, stopState) { - if (!hasPrecedingLineBreak() && eat(TokenType.bang)) { - state.tokens[state.tokens.length - 1].type = TokenType.nonNullAssertion; - return; - } - if (match2(TokenType.lessThan) || match2(TokenType.bitShiftL)) { - const snapshot = state.snapshot(); - if (!noCalls && atPossibleAsync()) { - const asyncArrowFn = tsTryParseGenericAsyncArrowFunction(); - if (asyncArrowFn) { - return; - } - } - tsParseTypeArgumentsWithPossibleBitshift(); - if (!noCalls && eat(TokenType.parenL)) { - state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex; - parseCallExpressionArguments(); - } else if (match2(TokenType.backQuote)) { - parseTemplate(); - } else if ( - // The remaining possible case is an instantiation expression, e.g. - // Array . Check for a few cases that would disqualify it and - // cause us to bail out. - // a>c is not (a)>c, but a<(b>>c) - state.type === TokenType.greaterThan || // ac is (ac - state.type !== TokenType.parenL && Boolean(state.type & TokenType.IS_EXPRESSION_START) && !hasPrecedingLineBreak() - ) { - unexpected(); - } - if (state.error) { - state.restoreFromSnapshot(snapshot); - } else { - return; - } - } else if (!noCalls && match2(TokenType.questionDot) && lookaheadType() === TokenType.lessThan) { - next(); - state.tokens[startTokenIndex].isOptionalChainStart = true; - state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex; - tsParseTypeArguments(); - expect(TokenType.parenL); - parseCallExpressionArguments(); - } - baseParseSubscript(startTokenIndex, noCalls, stopState); -} -function tsTryParseExport() { - if (eat(TokenType._import)) { - if (isContextual(ContextualKeyword._type) && lookaheadType() !== TokenType.eq) { - expectContextual(ContextualKeyword._type); - } - tsParseImportEqualsDeclaration(); - return true; - } else if (eat(TokenType.eq)) { - parseExpression(); - semicolon(); - return true; - } else if (eatContextual(ContextualKeyword._as)) { - expectContextual(ContextualKeyword._namespace); - parseIdentifier(); - semicolon(); - return true; - } else { - if (isContextual(ContextualKeyword._type)) { - const nextType = lookaheadType(); - if (nextType === TokenType.braceL || nextType === TokenType.star) { - next(); - } - } - return false; - } -} -function tsParseImportSpecifier() { - parseIdentifier(); - if (match2(TokenType.comma) || match2(TokenType.braceR)) { - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration; - return; - } - parseIdentifier(); - if (match2(TokenType.comma) || match2(TokenType.braceR)) { - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration; - state.tokens[state.tokens.length - 2].isType = true; - state.tokens[state.tokens.length - 1].isType = true; - return; - } - parseIdentifier(); - if (match2(TokenType.comma) || match2(TokenType.braceR)) { - state.tokens[state.tokens.length - 3].identifierRole = IdentifierRole.ImportAccess; - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration; - return; - } - parseIdentifier(); - state.tokens[state.tokens.length - 3].identifierRole = IdentifierRole.ImportAccess; - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportDeclaration; - state.tokens[state.tokens.length - 4].isType = true; - state.tokens[state.tokens.length - 3].isType = true; - state.tokens[state.tokens.length - 2].isType = true; - state.tokens[state.tokens.length - 1].isType = true; -} -function tsParseExportSpecifier() { - parseIdentifier(); - if (match2(TokenType.comma) || match2(TokenType.braceR)) { - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ExportAccess; - return; - } - parseIdentifier(); - if (match2(TokenType.comma) || match2(TokenType.braceR)) { - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ExportAccess; - state.tokens[state.tokens.length - 2].isType = true; - state.tokens[state.tokens.length - 1].isType = true; - return; - } - parseIdentifier(); - if (match2(TokenType.comma) || match2(TokenType.braceR)) { - state.tokens[state.tokens.length - 3].identifierRole = IdentifierRole.ExportAccess; - return; - } - parseIdentifier(); - state.tokens[state.tokens.length - 3].identifierRole = IdentifierRole.ExportAccess; - state.tokens[state.tokens.length - 4].isType = true; - state.tokens[state.tokens.length - 3].isType = true; - state.tokens[state.tokens.length - 2].isType = true; - state.tokens[state.tokens.length - 1].isType = true; -} -function tsTryParseExportDefaultExpression() { - if (isContextual(ContextualKeyword._abstract) && lookaheadType() === TokenType._class) { - state.type = TokenType._abstract; - next(); - parseClass(true, true); - return true; - } - if (isContextual(ContextualKeyword._interface)) { - const oldIsType = pushTypeContext(2); - tsParseDeclaration(ContextualKeyword._interface, true); - popTypeContext(oldIsType); - return true; - } - return false; -} -function tsTryParseStatementContent() { - if (state.type === TokenType._const) { - const ahead = lookaheadTypeAndKeyword(); - if (ahead.type === TokenType.name && ahead.contextualKeyword === ContextualKeyword._enum) { - expect(TokenType._const); - expectContextual(ContextualKeyword._enum); - state.tokens[state.tokens.length - 1].type = TokenType._enum; - tsParseEnumDeclaration(); - return true; - } - } - return false; -} -function tsTryParseClassMemberWithIsStatic(isStatic) { - const memberStartIndexAfterStatic = state.tokens.length; - tsParseModifiers([ - ContextualKeyword._abstract, - ContextualKeyword._readonly, - ContextualKeyword._declare, - ContextualKeyword._static, - ContextualKeyword._override - ]); - const modifiersEndIndex = state.tokens.length; - const found = tsTryParseIndexSignature(); - if (found) { - const memberStartIndex = isStatic ? memberStartIndexAfterStatic - 1 : memberStartIndexAfterStatic; - for (let i4 = memberStartIndex; i4 < modifiersEndIndex; i4++) { - state.tokens[i4].isType = true; - } - return true; - } - return false; -} -function tsParseIdentifierStatement(contextualKeyword) { - const matched = tsParseExpressionStatement(contextualKeyword); - if (!matched) { - semicolon(); - } -} -function tsParseExportDeclaration() { - const isDeclare = eatContextual(ContextualKeyword._declare); - if (isDeclare) { - state.tokens[state.tokens.length - 1].type = TokenType._declare; - } - let matchedDeclaration = false; - if (match2(TokenType.name)) { - if (isDeclare) { - const oldIsType = pushTypeContext(2); - matchedDeclaration = tsTryParseExportDeclaration(); - popTypeContext(oldIsType); - } else { - matchedDeclaration = tsTryParseExportDeclaration(); - } - } - if (!matchedDeclaration) { - if (isDeclare) { - const oldIsType = pushTypeContext(2); - parseStatement(true); - popTypeContext(oldIsType); - } else { - parseStatement(true); - } - } -} -function tsAfterParseClassSuper(hasSuper) { - if (hasSuper && (match2(TokenType.lessThan) || match2(TokenType.bitShiftL))) { - tsParseTypeArgumentsWithPossibleBitshift(); - } - if (eatContextual(ContextualKeyword._implements)) { - state.tokens[state.tokens.length - 1].type = TokenType._implements; - const oldIsType = pushTypeContext(1); - tsParseHeritageClause(); - popTypeContext(oldIsType); - } -} -function tsStartParseObjPropValue() { - tsTryParseTypeParameters(); -} -function tsStartParseFunctionParams() { - tsTryParseTypeParameters(); -} -function tsAfterParseVarHead() { - const oldIsType = pushTypeContext(0); - if (!hasPrecedingLineBreak()) { - eat(TokenType.bang); - } - tsTryParseTypeAnnotation(); - popTypeContext(oldIsType); -} -function tsStartParseAsyncArrowFromCallExpression() { - if (match2(TokenType.colon)) { - tsParseTypeAnnotation(); - } -} -function tsParseMaybeAssign(noIn, isWithinParens) { - if (isJSXEnabled) { - return tsParseMaybeAssignWithJSX(noIn, isWithinParens); - } else { - return tsParseMaybeAssignWithoutJSX(noIn, isWithinParens); - } -} -function tsParseMaybeAssignWithJSX(noIn, isWithinParens) { - if (!match2(TokenType.lessThan)) { - return baseParseMaybeAssign(noIn, isWithinParens); - } - const snapshot = state.snapshot(); - let wasArrow = baseParseMaybeAssign(noIn, isWithinParens); - if (state.error) { - state.restoreFromSnapshot(snapshot); - } else { - return wasArrow; - } - state.type = TokenType.typeParameterStart; - tsParseTypeParameters(); - wasArrow = baseParseMaybeAssign(noIn, isWithinParens); - if (!wasArrow) { - unexpected(); - } - return wasArrow; -} -function tsParseMaybeAssignWithoutJSX(noIn, isWithinParens) { - if (!match2(TokenType.lessThan)) { - return baseParseMaybeAssign(noIn, isWithinParens); - } - const snapshot = state.snapshot(); - tsParseTypeParameters(); - const wasArrow = baseParseMaybeAssign(noIn, isWithinParens); - if (!wasArrow) { - unexpected(); - } - if (state.error) { - state.restoreFromSnapshot(snapshot); - } else { - return wasArrow; - } - return baseParseMaybeAssign(noIn, isWithinParens); -} -function tsParseArrow() { - if (match2(TokenType.colon)) { - const snapshot = state.snapshot(); - tsParseTypeOrTypePredicateAnnotation(TokenType.colon); - if (canInsertSemicolon()) - unexpected(); - if (!match2(TokenType.arrow)) - unexpected(); - if (state.error) { - state.restoreFromSnapshot(snapshot); - } - } - return eat(TokenType.arrow); -} -function tsParseAssignableListItemTypes() { - const oldIsType = pushTypeContext(0); - eat(TokenType.question); - tsTryParseTypeAnnotation(); - popTypeContext(oldIsType); -} -function tsParseMaybeDecoratorArguments() { - if (match2(TokenType.lessThan) || match2(TokenType.bitShiftL)) { - tsParseTypeArgumentsWithPossibleBitshift(); - } - baseParseMaybeDecoratorArguments(); -} - -// node_modules/sucrase/dist/esm/parser/plugins/jsx/index.js -function jsxReadToken() { - let sawNewline = false; - let sawNonWhitespace = false; - while (true) { - if (state.pos >= input.length) { - unexpected("Unterminated JSX contents"); - return; - } - const ch = input.charCodeAt(state.pos); - if (ch === charCodes.lessThan || ch === charCodes.leftCurlyBrace) { - if (state.pos === state.start) { - if (ch === charCodes.lessThan) { - state.pos++; - finishToken(TokenType.jsxTagStart); - return; - } - getTokenFromCode(ch); - return; - } - if (sawNewline && !sawNonWhitespace) { - finishToken(TokenType.jsxEmptyText); - } else { - finishToken(TokenType.jsxText); - } - return; - } - if (ch === charCodes.lineFeed) { - sawNewline = true; - } else if (ch !== charCodes.space && ch !== charCodes.carriageReturn && ch !== charCodes.tab) { - sawNonWhitespace = true; - } - state.pos++; - } -} -function jsxReadString(quote) { - state.pos++; - for (; ; ) { - if (state.pos >= input.length) { - unexpected("Unterminated string constant"); - return; - } - const ch = input.charCodeAt(state.pos); - if (ch === quote) { - state.pos++; - break; - } - state.pos++; - } - finishToken(TokenType.string); -} -function jsxReadWord() { - let ch; - do { - if (state.pos > input.length) { - unexpected("Unexpectedly reached the end of input."); - return; - } - ch = input.charCodeAt(++state.pos); - } while (IS_IDENTIFIER_CHAR[ch] || ch === charCodes.dash); - finishToken(TokenType.jsxName); -} -function jsxParseIdentifier() { - nextJSXTagToken(); -} -function jsxParseNamespacedName(identifierRole) { - jsxParseIdentifier(); - if (!eat(TokenType.colon)) { - state.tokens[state.tokens.length - 1].identifierRole = identifierRole; - return; - } - jsxParseIdentifier(); -} -function jsxParseElementName() { - const firstTokenIndex = state.tokens.length; - jsxParseNamespacedName(IdentifierRole.Access); - let hadDot = false; - while (match2(TokenType.dot)) { - hadDot = true; - nextJSXTagToken(); - jsxParseIdentifier(); - } - if (!hadDot) { - const firstToken = state.tokens[firstTokenIndex]; - const firstChar = input.charCodeAt(firstToken.start); - if (firstChar >= charCodes.lowercaseA && firstChar <= charCodes.lowercaseZ) { - firstToken.identifierRole = null; - } - } -} -function jsxParseAttributeValue() { - switch (state.type) { - case TokenType.braceL: - next(); - parseExpression(); - nextJSXTagToken(); - return; - case TokenType.jsxTagStart: - jsxParseElement(); - nextJSXTagToken(); - return; - case TokenType.string: - nextJSXTagToken(); - return; - default: - unexpected("JSX value should be either an expression or a quoted JSX text"); - } -} -function jsxParseSpreadChild() { - expect(TokenType.ellipsis); - parseExpression(); -} -function jsxParseOpeningElement(initialTokenIndex) { - if (match2(TokenType.jsxTagEnd)) { - return false; - } - jsxParseElementName(); - if (isTypeScriptEnabled) { - tsTryParseJSXTypeArgument(); - } - let hasSeenPropSpread = false; - while (!match2(TokenType.slash) && !match2(TokenType.jsxTagEnd) && !state.error) { - if (eat(TokenType.braceL)) { - hasSeenPropSpread = true; - expect(TokenType.ellipsis); - parseMaybeAssign(); - nextJSXTagToken(); - continue; - } - if (hasSeenPropSpread && state.end - state.start === 3 && input.charCodeAt(state.start) === charCodes.lowercaseK && input.charCodeAt(state.start + 1) === charCodes.lowercaseE && input.charCodeAt(state.start + 2) === charCodes.lowercaseY) { - state.tokens[initialTokenIndex].jsxRole = JSXRole.KeyAfterPropSpread; - } - jsxParseNamespacedName(IdentifierRole.ObjectKey); - if (match2(TokenType.eq)) { - nextJSXTagToken(); - jsxParseAttributeValue(); - } - } - const isSelfClosing = match2(TokenType.slash); - if (isSelfClosing) { - nextJSXTagToken(); - } - return isSelfClosing; -} -function jsxParseClosingElement() { - if (match2(TokenType.jsxTagEnd)) { - return; - } - jsxParseElementName(); -} -function jsxParseElementAt() { - const initialTokenIndex = state.tokens.length - 1; - state.tokens[initialTokenIndex].jsxRole = JSXRole.NoChildren; - let numExplicitChildren = 0; - const isSelfClosing = jsxParseOpeningElement(initialTokenIndex); - if (!isSelfClosing) { - nextJSXExprToken(); - while (true) { - switch (state.type) { - case TokenType.jsxTagStart: - nextJSXTagToken(); - if (match2(TokenType.slash)) { - nextJSXTagToken(); - jsxParseClosingElement(); - if (state.tokens[initialTokenIndex].jsxRole !== JSXRole.KeyAfterPropSpread) { - if (numExplicitChildren === 1) { - state.tokens[initialTokenIndex].jsxRole = JSXRole.OneChild; - } else if (numExplicitChildren > 1) { - state.tokens[initialTokenIndex].jsxRole = JSXRole.StaticChildren; - } - } - return; - } - numExplicitChildren++; - jsxParseElementAt(); - nextJSXExprToken(); - break; - case TokenType.jsxText: - numExplicitChildren++; - nextJSXExprToken(); - break; - case TokenType.jsxEmptyText: - nextJSXExprToken(); - break; - case TokenType.braceL: - next(); - if (match2(TokenType.ellipsis)) { - jsxParseSpreadChild(); - nextJSXExprToken(); - numExplicitChildren += 2; - } else { - if (!match2(TokenType.braceR)) { - numExplicitChildren++; - parseExpression(); - } - nextJSXExprToken(); - } - break; - default: - unexpected(); - return; - } - } - } -} -function jsxParseElement() { - nextJSXTagToken(); - jsxParseElementAt(); -} -function nextJSXTagToken() { - state.tokens.push(new Token()); - skipSpace(); - state.start = state.pos; - const code = input.charCodeAt(state.pos); - if (IS_IDENTIFIER_START[code]) { - jsxReadWord(); - } else if (code === charCodes.quotationMark || code === charCodes.apostrophe) { - jsxReadString(code); - } else { - ++state.pos; - switch (code) { - case charCodes.greaterThan: - finishToken(TokenType.jsxTagEnd); - break; - case charCodes.lessThan: - finishToken(TokenType.jsxTagStart); - break; - case charCodes.slash: - finishToken(TokenType.slash); - break; - case charCodes.equalsTo: - finishToken(TokenType.eq); - break; - case charCodes.leftCurlyBrace: - finishToken(TokenType.braceL); - break; - case charCodes.dot: - finishToken(TokenType.dot); - break; - case charCodes.colon: - finishToken(TokenType.colon); - break; - default: - unexpected(); - } - } -} -function nextJSXExprToken() { - state.tokens.push(new Token()); - state.start = state.pos; - jsxReadToken(); -} - -// node_modules/sucrase/dist/esm/parser/plugins/types.js -function typedParseConditional(noIn) { - if (match2(TokenType.question)) { - const nextType = lookaheadType(); - if (nextType === TokenType.colon || nextType === TokenType.comma || nextType === TokenType.parenR) { - return; - } - } - baseParseConditional(noIn); -} -function typedParseParenItem() { - eatTypeToken(TokenType.question); - if (match2(TokenType.colon)) { - if (isTypeScriptEnabled) { - tsParseTypeAnnotation(); - } else if (isFlowEnabled) { - flowParseTypeAnnotation(); - } - } -} - -// node_modules/sucrase/dist/esm/parser/traverser/expression.js -var StopState = class { - constructor(stop) { - this.stop = stop; - } -}; -function parseExpression(noIn = false) { - parseMaybeAssign(noIn); - if (match2(TokenType.comma)) { - while (eat(TokenType.comma)) { - parseMaybeAssign(noIn); - } - } -} -function parseMaybeAssign(noIn = false, isWithinParens = false) { - if (isTypeScriptEnabled) { - return tsParseMaybeAssign(noIn, isWithinParens); - } else if (isFlowEnabled) { - return flowParseMaybeAssign(noIn, isWithinParens); - } else { - return baseParseMaybeAssign(noIn, isWithinParens); - } -} -function baseParseMaybeAssign(noIn, isWithinParens) { - if (match2(TokenType._yield)) { - parseYield(); - return false; - } - if (match2(TokenType.parenL) || match2(TokenType.name) || match2(TokenType._yield)) { - state.potentialArrowAt = state.start; - } - const wasArrow = parseMaybeConditional(noIn); - if (isWithinParens) { - parseParenItem(); - } - if (state.type & TokenType.IS_ASSIGN) { - next(); - parseMaybeAssign(noIn); - return false; - } - return wasArrow; -} -function parseMaybeConditional(noIn) { - const wasArrow = parseExprOps(noIn); - if (wasArrow) { - return true; - } - parseConditional(noIn); - return false; -} -function parseConditional(noIn) { - if (isTypeScriptEnabled || isFlowEnabled) { - typedParseConditional(noIn); - } else { - baseParseConditional(noIn); - } -} -function baseParseConditional(noIn) { - if (eat(TokenType.question)) { - parseMaybeAssign(); - expect(TokenType.colon); - parseMaybeAssign(noIn); - } -} -function parseExprOps(noIn) { - const startTokenIndex = state.tokens.length; - const wasArrow = parseMaybeUnary(); - if (wasArrow) { - return true; - } - parseExprOp(startTokenIndex, -1, noIn); - return false; -} -function parseExprOp(startTokenIndex, minPrec, noIn) { - if (isTypeScriptEnabled && (TokenType._in & TokenType.PRECEDENCE_MASK) > minPrec && !hasPrecedingLineBreak() && (eatContextual(ContextualKeyword._as) || eatContextual(ContextualKeyword._satisfies))) { - const oldIsType = pushTypeContext(1); - tsParseType(); - popTypeContext(oldIsType); - rescan_gt(); - parseExprOp(startTokenIndex, minPrec, noIn); - return; - } - const prec = state.type & TokenType.PRECEDENCE_MASK; - if (prec > 0 && (!noIn || !match2(TokenType._in))) { - if (prec > minPrec) { - const op = state.type; - next(); - if (op === TokenType.nullishCoalescing) { - state.tokens[state.tokens.length - 1].nullishStartIndex = startTokenIndex; - } - const rhsStartTokenIndex = state.tokens.length; - parseMaybeUnary(); - parseExprOp(rhsStartTokenIndex, op & TokenType.IS_RIGHT_ASSOCIATIVE ? prec - 1 : prec, noIn); - if (op === TokenType.nullishCoalescing) { - state.tokens[startTokenIndex].numNullishCoalesceStarts++; - state.tokens[state.tokens.length - 1].numNullishCoalesceEnds++; - } - parseExprOp(startTokenIndex, minPrec, noIn); - } - } -} -function parseMaybeUnary() { - if (isTypeScriptEnabled && !isJSXEnabled && eat(TokenType.lessThan)) { - tsParseTypeAssertion(); - return false; - } - if (isContextual(ContextualKeyword._module) && lookaheadCharCode() === charCodes.leftCurlyBrace && !hasFollowingLineBreak()) { - parseModuleExpression(); - return false; - } - if (state.type & TokenType.IS_PREFIX) { - next(); - parseMaybeUnary(); - return false; - } - const wasArrow = parseExprSubscripts(); - if (wasArrow) { - return true; - } - while (state.type & TokenType.IS_POSTFIX && !canInsertSemicolon()) { - if (state.type === TokenType.preIncDec) { - state.type = TokenType.postIncDec; - } - next(); - } - return false; -} -function parseExprSubscripts() { - const startTokenIndex = state.tokens.length; - const wasArrow = parseExprAtom(); - if (wasArrow) { - return true; - } - parseSubscripts(startTokenIndex); - if (state.tokens.length > startTokenIndex && state.tokens[startTokenIndex].isOptionalChainStart) { - state.tokens[state.tokens.length - 1].isOptionalChainEnd = true; - } - return false; -} -function parseSubscripts(startTokenIndex, noCalls = false) { - if (isFlowEnabled) { - flowParseSubscripts(startTokenIndex, noCalls); - } else { - baseParseSubscripts(startTokenIndex, noCalls); - } -} -function baseParseSubscripts(startTokenIndex, noCalls = false) { - const stopState = new StopState(false); - do { - parseSubscript(startTokenIndex, noCalls, stopState); - } while (!stopState.stop && !state.error); -} -function parseSubscript(startTokenIndex, noCalls, stopState) { - if (isTypeScriptEnabled) { - tsParseSubscript(startTokenIndex, noCalls, stopState); - } else if (isFlowEnabled) { - flowParseSubscript(startTokenIndex, noCalls, stopState); - } else { - baseParseSubscript(startTokenIndex, noCalls, stopState); - } -} -function baseParseSubscript(startTokenIndex, noCalls, stopState) { - if (!noCalls && eat(TokenType.doubleColon)) { - parseNoCallExpr(); - stopState.stop = true; - parseSubscripts(startTokenIndex, noCalls); - } else if (match2(TokenType.questionDot)) { - state.tokens[startTokenIndex].isOptionalChainStart = true; - if (noCalls && lookaheadType() === TokenType.parenL) { - stopState.stop = true; - return; - } - next(); - state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex; - if (eat(TokenType.bracketL)) { - parseExpression(); - expect(TokenType.bracketR); - } else if (eat(TokenType.parenL)) { - parseCallExpressionArguments(); - } else { - parseMaybePrivateName(); - } - } else if (eat(TokenType.dot)) { - state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex; - parseMaybePrivateName(); - } else if (eat(TokenType.bracketL)) { - state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex; - parseExpression(); - expect(TokenType.bracketR); - } else if (!noCalls && match2(TokenType.parenL)) { - if (atPossibleAsync()) { - const snapshot = state.snapshot(); - const asyncStartTokenIndex = state.tokens.length; - next(); - state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex; - const callContextId = getNextContextId(); - state.tokens[state.tokens.length - 1].contextId = callContextId; - parseCallExpressionArguments(); - state.tokens[state.tokens.length - 1].contextId = callContextId; - if (shouldParseAsyncArrow()) { - state.restoreFromSnapshot(snapshot); - stopState.stop = true; - state.scopeDepth++; - parseFunctionParams(); - parseAsyncArrowFromCallExpression(asyncStartTokenIndex); - } - } else { - next(); - state.tokens[state.tokens.length - 1].subscriptStartIndex = startTokenIndex; - const callContextId = getNextContextId(); - state.tokens[state.tokens.length - 1].contextId = callContextId; - parseCallExpressionArguments(); - state.tokens[state.tokens.length - 1].contextId = callContextId; - } - } else if (match2(TokenType.backQuote)) { - parseTemplate(); - } else { - stopState.stop = true; - } -} -function atPossibleAsync() { - return state.tokens[state.tokens.length - 1].contextualKeyword === ContextualKeyword._async && !canInsertSemicolon(); -} -function parseCallExpressionArguments() { - let first = true; - while (!eat(TokenType.parenR) && !state.error) { - if (first) { - first = false; - } else { - expect(TokenType.comma); - if (eat(TokenType.parenR)) { - break; - } - } - parseExprListItem(false); - } -} -function shouldParseAsyncArrow() { - return match2(TokenType.colon) || match2(TokenType.arrow); -} -function parseAsyncArrowFromCallExpression(startTokenIndex) { - if (isTypeScriptEnabled) { - tsStartParseAsyncArrowFromCallExpression(); - } else if (isFlowEnabled) { - flowStartParseAsyncArrowFromCallExpression(); - } - expect(TokenType.arrow); - parseArrowExpression(startTokenIndex); -} -function parseNoCallExpr() { - const startTokenIndex = state.tokens.length; - parseExprAtom(); - parseSubscripts(startTokenIndex, true); -} -function parseExprAtom() { - if (eat(TokenType.modulo)) { - parseIdentifier(); - return false; - } - if (match2(TokenType.jsxText) || match2(TokenType.jsxEmptyText)) { - parseLiteral(); - return false; - } else if (match2(TokenType.lessThan) && isJSXEnabled) { - state.type = TokenType.jsxTagStart; - jsxParseElement(); - next(); - return false; - } - const canBeArrow = state.potentialArrowAt === state.start; - switch (state.type) { - case TokenType.slash: - case TokenType.assign: - retokenizeSlashAsRegex(); - case TokenType._super: - case TokenType._this: - case TokenType.regexp: - case TokenType.num: - case TokenType.bigint: - case TokenType.decimal: - case TokenType.string: - case TokenType._null: - case TokenType._true: - case TokenType._false: - next(); - return false; - case TokenType._import: - next(); - if (match2(TokenType.dot)) { - state.tokens[state.tokens.length - 1].type = TokenType.name; - next(); - parseIdentifier(); - } - return false; - case TokenType.name: { - const startTokenIndex = state.tokens.length; - const functionStart = state.start; - const contextualKeyword = state.contextualKeyword; - parseIdentifier(); - if (contextualKeyword === ContextualKeyword._await) { - parseAwait(); - return false; - } else if (contextualKeyword === ContextualKeyword._async && match2(TokenType._function) && !canInsertSemicolon()) { - next(); - parseFunction(functionStart, false); - return false; - } else if (canBeArrow && contextualKeyword === ContextualKeyword._async && !canInsertSemicolon() && match2(TokenType.name)) { - state.scopeDepth++; - parseBindingIdentifier(false); - expect(TokenType.arrow); - parseArrowExpression(startTokenIndex); - return true; - } else if (match2(TokenType._do) && !canInsertSemicolon()) { - next(); - parseBlock(); - return false; - } - if (canBeArrow && !canInsertSemicolon() && match2(TokenType.arrow)) { - state.scopeDepth++; - markPriorBindingIdentifier(false); - expect(TokenType.arrow); - parseArrowExpression(startTokenIndex); - return true; - } - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.Access; - return false; - } - case TokenType._do: { - next(); - parseBlock(); - return false; - } - case TokenType.parenL: { - const wasArrow = parseParenAndDistinguishExpression(canBeArrow); - return wasArrow; - } - case TokenType.bracketL: - next(); - parseExprList(TokenType.bracketR, true); - return false; - case TokenType.braceL: - parseObj(false, false); - return false; - case TokenType._function: - parseFunctionExpression(); - return false; - case TokenType.at: - parseDecorators(); - case TokenType._class: - parseClass(false); - return false; - case TokenType._new: - parseNew(); - return false; - case TokenType.backQuote: - parseTemplate(); - return false; - case TokenType.doubleColon: { - next(); - parseNoCallExpr(); - return false; - } - case TokenType.hash: { - const code = lookaheadCharCode(); - if (IS_IDENTIFIER_START[code] || code === charCodes.backslash) { - parseMaybePrivateName(); - } else { - next(); - } - return false; - } - default: - unexpected(); - return false; - } -} -function parseMaybePrivateName() { - eat(TokenType.hash); - parseIdentifier(); -} -function parseFunctionExpression() { - const functionStart = state.start; - parseIdentifier(); - if (eat(TokenType.dot)) { - parseIdentifier(); - } - parseFunction(functionStart, false); -} -function parseLiteral() { - next(); -} -function parseParenExpression() { - expect(TokenType.parenL); - parseExpression(); - expect(TokenType.parenR); -} -function parseParenAndDistinguishExpression(canBeArrow) { - const snapshot = state.snapshot(); - const startTokenIndex = state.tokens.length; - expect(TokenType.parenL); - let first = true; - while (!match2(TokenType.parenR) && !state.error) { - if (first) { - first = false; - } else { - expect(TokenType.comma); - if (match2(TokenType.parenR)) { - break; - } - } - if (match2(TokenType.ellipsis)) { - parseRest( - false - /* isBlockScope */ - ); - parseParenItem(); - break; - } else { - parseMaybeAssign(false, true); - } - } - expect(TokenType.parenR); - if (canBeArrow && shouldParseArrow()) { - const wasArrow = parseArrow(); - if (wasArrow) { - state.restoreFromSnapshot(snapshot); - state.scopeDepth++; - parseFunctionParams(); - parseArrow(); - parseArrowExpression(startTokenIndex); - if (state.error) { - state.restoreFromSnapshot(snapshot); - parseParenAndDistinguishExpression(false); - return false; - } - return true; - } - } - return false; -} -function shouldParseArrow() { - return match2(TokenType.colon) || !canInsertSemicolon(); -} -function parseArrow() { - if (isTypeScriptEnabled) { - return tsParseArrow(); - } else if (isFlowEnabled) { - return flowParseArrow(); - } else { - return eat(TokenType.arrow); - } -} -function parseParenItem() { - if (isTypeScriptEnabled || isFlowEnabled) { - typedParseParenItem(); - } -} -function parseNew() { - expect(TokenType._new); - if (eat(TokenType.dot)) { - parseIdentifier(); - return; - } - parseNewCallee(); - if (isFlowEnabled) { - flowStartParseNewArguments(); - } - if (eat(TokenType.parenL)) { - parseExprList(TokenType.parenR); - } -} -function parseNewCallee() { - parseNoCallExpr(); - eat(TokenType.questionDot); -} -function parseTemplate() { - nextTemplateToken(); - nextTemplateToken(); - while (!match2(TokenType.backQuote) && !state.error) { - expect(TokenType.dollarBraceL); - parseExpression(); - nextTemplateToken(); - nextTemplateToken(); - } - next(); -} -function parseObj(isPattern, isBlockScope) { - const contextId = getNextContextId(); - let first = true; - next(); - state.tokens[state.tokens.length - 1].contextId = contextId; - while (!eat(TokenType.braceR) && !state.error) { - if (first) { - first = false; - } else { - expect(TokenType.comma); - if (eat(TokenType.braceR)) { - break; - } - } - let isGenerator = false; - if (match2(TokenType.ellipsis)) { - const previousIndex = state.tokens.length; - parseSpread(); - if (isPattern) { - if (state.tokens.length === previousIndex + 2) { - markPriorBindingIdentifier(isBlockScope); - } - if (eat(TokenType.braceR)) { - break; - } - } - continue; - } - if (!isPattern) { - isGenerator = eat(TokenType.star); - } - if (!isPattern && isContextual(ContextualKeyword._async)) { - if (isGenerator) - unexpected(); - parseIdentifier(); - if (match2(TokenType.colon) || match2(TokenType.parenL) || match2(TokenType.braceR) || match2(TokenType.eq) || match2(TokenType.comma)) { - } else { - if (match2(TokenType.star)) { - next(); - isGenerator = true; - } - parsePropertyName(contextId); - } - } else { - parsePropertyName(contextId); - } - parseObjPropValue(isPattern, isBlockScope, contextId); - } - state.tokens[state.tokens.length - 1].contextId = contextId; -} -function isGetterOrSetterMethod(isPattern) { - return !isPattern && (match2(TokenType.string) || // get "string"() {} - match2(TokenType.num) || // get 1() {} - match2(TokenType.bracketL) || // get ["string"]() {} - match2(TokenType.name) || // get foo() {} - !!(state.type & TokenType.IS_KEYWORD)); -} -function parseObjectMethod(isPattern, objectContextId) { - const functionStart = state.start; - if (match2(TokenType.parenL)) { - if (isPattern) - unexpected(); - parseMethod( - functionStart, - /* isConstructor */ - false - ); - return true; - } - if (isGetterOrSetterMethod(isPattern)) { - parsePropertyName(objectContextId); - parseMethod( - functionStart, - /* isConstructor */ - false - ); - return true; - } - return false; -} -function parseObjectProperty(isPattern, isBlockScope) { - if (eat(TokenType.colon)) { - if (isPattern) { - parseMaybeDefault(isBlockScope); - } else { - parseMaybeAssign(false); - } - return; - } - let identifierRole; - if (isPattern) { - if (state.scopeDepth === 0) { - identifierRole = IdentifierRole.ObjectShorthandTopLevelDeclaration; - } else if (isBlockScope) { - identifierRole = IdentifierRole.ObjectShorthandBlockScopedDeclaration; - } else { - identifierRole = IdentifierRole.ObjectShorthandFunctionScopedDeclaration; - } - } else { - identifierRole = IdentifierRole.ObjectShorthand; - } - state.tokens[state.tokens.length - 1].identifierRole = identifierRole; - parseMaybeDefault(isBlockScope, true); -} -function parseObjPropValue(isPattern, isBlockScope, objectContextId) { - if (isTypeScriptEnabled) { - tsStartParseObjPropValue(); - } else if (isFlowEnabled) { - flowStartParseObjPropValue(); - } - const wasMethod = parseObjectMethod(isPattern, objectContextId); - if (!wasMethod) { - parseObjectProperty(isPattern, isBlockScope); - } -} -function parsePropertyName(objectContextId) { - if (isFlowEnabled) { - flowParseVariance(); - } - if (eat(TokenType.bracketL)) { - state.tokens[state.tokens.length - 1].contextId = objectContextId; - parseMaybeAssign(); - expect(TokenType.bracketR); - state.tokens[state.tokens.length - 1].contextId = objectContextId; - } else { - if (match2(TokenType.num) || match2(TokenType.string) || match2(TokenType.bigint) || match2(TokenType.decimal)) { - parseExprAtom(); - } else { - parseMaybePrivateName(); - } - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ObjectKey; - state.tokens[state.tokens.length - 1].contextId = objectContextId; - } -} -function parseMethod(functionStart, isConstructor) { - const funcContextId = getNextContextId(); - state.scopeDepth++; - const startTokenIndex = state.tokens.length; - const allowModifiers = isConstructor; - parseFunctionParams(allowModifiers, funcContextId); - parseFunctionBodyAndFinish(functionStart, funcContextId); - const endTokenIndex = state.tokens.length; - state.scopes.push(new Scope(startTokenIndex, endTokenIndex, true)); - state.scopeDepth--; -} -function parseArrowExpression(startTokenIndex) { - parseFunctionBody(true); - const endTokenIndex = state.tokens.length; - state.scopes.push(new Scope(startTokenIndex, endTokenIndex, true)); - state.scopeDepth--; -} -function parseFunctionBodyAndFinish(functionStart, funcContextId = 0) { - if (isTypeScriptEnabled) { - tsParseFunctionBodyAndFinish(functionStart, funcContextId); - } else if (isFlowEnabled) { - flowParseFunctionBodyAndFinish(funcContextId); - } else { - parseFunctionBody(false, funcContextId); - } -} -function parseFunctionBody(allowExpression, funcContextId = 0) { - const isExpression = allowExpression && !match2(TokenType.braceL); - if (isExpression) { - parseMaybeAssign(); - } else { - parseBlock(true, funcContextId); - } -} -function parseExprList(close, allowEmpty = false) { - let first = true; - while (!eat(close) && !state.error) { - if (first) { - first = false; - } else { - expect(TokenType.comma); - if (eat(close)) - break; - } - parseExprListItem(allowEmpty); - } -} -function parseExprListItem(allowEmpty) { - if (allowEmpty && match2(TokenType.comma)) { - } else if (match2(TokenType.ellipsis)) { - parseSpread(); - parseParenItem(); - } else if (match2(TokenType.question)) { - next(); - } else { - parseMaybeAssign(false, true); - } -} -function parseIdentifier() { - next(); - state.tokens[state.tokens.length - 1].type = TokenType.name; -} -function parseAwait() { - parseMaybeUnary(); -} -function parseYield() { - next(); - if (!match2(TokenType.semi) && !canInsertSemicolon()) { - eat(TokenType.star); - parseMaybeAssign(); - } -} -function parseModuleExpression() { - expectContextual(ContextualKeyword._module); - expect(TokenType.braceL); - parseBlockBody(TokenType.braceR); -} - -// node_modules/sucrase/dist/esm/parser/plugins/flow.js -function isMaybeDefaultImport(lookahead) { - return (lookahead.type === TokenType.name || !!(lookahead.type & TokenType.IS_KEYWORD)) && lookahead.contextualKeyword !== ContextualKeyword._from; -} -function flowParseTypeInitialiser(tok) { - const oldIsType = pushTypeContext(0); - expect(tok || TokenType.colon); - flowParseType(); - popTypeContext(oldIsType); -} -function flowParsePredicate() { - expect(TokenType.modulo); - expectContextual(ContextualKeyword._checks); - if (eat(TokenType.parenL)) { - parseExpression(); - expect(TokenType.parenR); - } -} -function flowParseTypeAndPredicateInitialiser() { - const oldIsType = pushTypeContext(0); - expect(TokenType.colon); - if (match2(TokenType.modulo)) { - flowParsePredicate(); - } else { - flowParseType(); - if (match2(TokenType.modulo)) { - flowParsePredicate(); - } - } - popTypeContext(oldIsType); -} -function flowParseDeclareClass() { - next(); - flowParseInterfaceish( - /* isClass */ - true - ); -} -function flowParseDeclareFunction() { - next(); - parseIdentifier(); - if (match2(TokenType.lessThan)) { - flowParseTypeParameterDeclaration(); - } - expect(TokenType.parenL); - flowParseFunctionTypeParams(); - expect(TokenType.parenR); - flowParseTypeAndPredicateInitialiser(); - semicolon(); -} -function flowParseDeclare() { - if (match2(TokenType._class)) { - flowParseDeclareClass(); - } else if (match2(TokenType._function)) { - flowParseDeclareFunction(); - } else if (match2(TokenType._var)) { - flowParseDeclareVariable(); - } else if (eatContextual(ContextualKeyword._module)) { - if (eat(TokenType.dot)) { - flowParseDeclareModuleExports(); - } else { - flowParseDeclareModule(); - } - } else if (isContextual(ContextualKeyword._type)) { - flowParseDeclareTypeAlias(); - } else if (isContextual(ContextualKeyword._opaque)) { - flowParseDeclareOpaqueType(); - } else if (isContextual(ContextualKeyword._interface)) { - flowParseDeclareInterface(); - } else if (match2(TokenType._export)) { - flowParseDeclareExportDeclaration(); - } else { - unexpected(); - } -} -function flowParseDeclareVariable() { - next(); - flowParseTypeAnnotatableIdentifier(); - semicolon(); -} -function flowParseDeclareModule() { - if (match2(TokenType.string)) { - parseExprAtom(); - } else { - parseIdentifier(); - } - expect(TokenType.braceL); - while (!match2(TokenType.braceR) && !state.error) { - if (match2(TokenType._import)) { - next(); - parseImport(); - } else { - unexpected(); - } - } - expect(TokenType.braceR); -} -function flowParseDeclareExportDeclaration() { - expect(TokenType._export); - if (eat(TokenType._default)) { - if (match2(TokenType._function) || match2(TokenType._class)) { - flowParseDeclare(); - } else { - flowParseType(); - semicolon(); - } - } else if (match2(TokenType._var) || // declare export var ... - match2(TokenType._function) || // declare export function ... - match2(TokenType._class) || // declare export class ... - isContextual(ContextualKeyword._opaque)) { - flowParseDeclare(); - } else if (match2(TokenType.star) || // declare export * from '' - match2(TokenType.braceL) || // declare export {} ... - isContextual(ContextualKeyword._interface) || // declare export interface ... - isContextual(ContextualKeyword._type) || // declare export type ... - isContextual(ContextualKeyword._opaque)) { - parseExport(); - } else { - unexpected(); - } -} -function flowParseDeclareModuleExports() { - expectContextual(ContextualKeyword._exports); - flowParseTypeAnnotation(); - semicolon(); -} -function flowParseDeclareTypeAlias() { - next(); - flowParseTypeAlias(); -} -function flowParseDeclareOpaqueType() { - next(); - flowParseOpaqueType(true); -} -function flowParseDeclareInterface() { - next(); - flowParseInterfaceish(); -} -function flowParseInterfaceish(isClass = false) { - flowParseRestrictedIdentifier(); - if (match2(TokenType.lessThan)) { - flowParseTypeParameterDeclaration(); - } - if (eat(TokenType._extends)) { - do { - flowParseInterfaceExtends(); - } while (!isClass && eat(TokenType.comma)); - } - if (isContextual(ContextualKeyword._mixins)) { - next(); - do { - flowParseInterfaceExtends(); - } while (eat(TokenType.comma)); - } - if (isContextual(ContextualKeyword._implements)) { - next(); - do { - flowParseInterfaceExtends(); - } while (eat(TokenType.comma)); - } - flowParseObjectType(isClass, false, isClass); -} -function flowParseInterfaceExtends() { - flowParseQualifiedTypeIdentifier(false); - if (match2(TokenType.lessThan)) { - flowParseTypeParameterInstantiation(); - } -} -function flowParseInterface() { - flowParseInterfaceish(); -} -function flowParseRestrictedIdentifier() { - parseIdentifier(); -} -function flowParseTypeAlias() { - flowParseRestrictedIdentifier(); - if (match2(TokenType.lessThan)) { - flowParseTypeParameterDeclaration(); - } - flowParseTypeInitialiser(TokenType.eq); - semicolon(); -} -function flowParseOpaqueType(declare) { - expectContextual(ContextualKeyword._type); - flowParseRestrictedIdentifier(); - if (match2(TokenType.lessThan)) { - flowParseTypeParameterDeclaration(); - } - if (match2(TokenType.colon)) { - flowParseTypeInitialiser(TokenType.colon); - } - if (!declare) { - flowParseTypeInitialiser(TokenType.eq); - } - semicolon(); -} -function flowParseTypeParameter() { - flowParseVariance(); - flowParseTypeAnnotatableIdentifier(); - if (eat(TokenType.eq)) { - flowParseType(); - } -} -function flowParseTypeParameterDeclaration() { - const oldIsType = pushTypeContext(0); - if (match2(TokenType.lessThan) || match2(TokenType.typeParameterStart)) { - next(); - } else { - unexpected(); - } - do { - flowParseTypeParameter(); - if (!match2(TokenType.greaterThan)) { - expect(TokenType.comma); - } - } while (!match2(TokenType.greaterThan) && !state.error); - expect(TokenType.greaterThan); - popTypeContext(oldIsType); -} -function flowParseTypeParameterInstantiation() { - const oldIsType = pushTypeContext(0); - expect(TokenType.lessThan); - while (!match2(TokenType.greaterThan) && !state.error) { - flowParseType(); - if (!match2(TokenType.greaterThan)) { - expect(TokenType.comma); - } - } - expect(TokenType.greaterThan); - popTypeContext(oldIsType); -} -function flowParseInterfaceType() { - expectContextual(ContextualKeyword._interface); - if (eat(TokenType._extends)) { - do { - flowParseInterfaceExtends(); - } while (eat(TokenType.comma)); - } - flowParseObjectType(false, false, false); -} -function flowParseObjectPropertyKey() { - if (match2(TokenType.num) || match2(TokenType.string)) { - parseExprAtom(); - } else { - parseIdentifier(); - } -} -function flowParseObjectTypeIndexer() { - if (lookaheadType() === TokenType.colon) { - flowParseObjectPropertyKey(); - flowParseTypeInitialiser(); - } else { - flowParseType(); - } - expect(TokenType.bracketR); - flowParseTypeInitialiser(); -} -function flowParseObjectTypeInternalSlot() { - flowParseObjectPropertyKey(); - expect(TokenType.bracketR); - expect(TokenType.bracketR); - if (match2(TokenType.lessThan) || match2(TokenType.parenL)) { - flowParseObjectTypeMethodish(); - } else { - eat(TokenType.question); - flowParseTypeInitialiser(); - } -} -function flowParseObjectTypeMethodish() { - if (match2(TokenType.lessThan)) { - flowParseTypeParameterDeclaration(); - } - expect(TokenType.parenL); - while (!match2(TokenType.parenR) && !match2(TokenType.ellipsis) && !state.error) { - flowParseFunctionTypeParam(); - if (!match2(TokenType.parenR)) { - expect(TokenType.comma); - } - } - if (eat(TokenType.ellipsis)) { - flowParseFunctionTypeParam(); - } - expect(TokenType.parenR); - flowParseTypeInitialiser(); -} -function flowParseObjectTypeCallProperty() { - flowParseObjectTypeMethodish(); -} -function flowParseObjectType(allowStatic, allowExact, allowProto) { - let endDelim; - if (allowExact && match2(TokenType.braceBarL)) { - expect(TokenType.braceBarL); - endDelim = TokenType.braceBarR; - } else { - expect(TokenType.braceL); - endDelim = TokenType.braceR; - } - while (!match2(endDelim) && !state.error) { - if (allowProto && isContextual(ContextualKeyword._proto)) { - const lookahead = lookaheadType(); - if (lookahead !== TokenType.colon && lookahead !== TokenType.question) { - next(); - allowStatic = false; - } - } - if (allowStatic && isContextual(ContextualKeyword._static)) { - const lookahead = lookaheadType(); - if (lookahead !== TokenType.colon && lookahead !== TokenType.question) { - next(); - } - } - flowParseVariance(); - if (eat(TokenType.bracketL)) { - if (eat(TokenType.bracketL)) { - flowParseObjectTypeInternalSlot(); - } else { - flowParseObjectTypeIndexer(); - } - } else if (match2(TokenType.parenL) || match2(TokenType.lessThan)) { - flowParseObjectTypeCallProperty(); - } else { - if (isContextual(ContextualKeyword._get) || isContextual(ContextualKeyword._set)) { - const lookahead = lookaheadType(); - if (lookahead === TokenType.name || lookahead === TokenType.string || lookahead === TokenType.num) { - next(); - } - } - flowParseObjectTypeProperty(); - } - flowObjectTypeSemicolon(); - } - expect(endDelim); -} -function flowParseObjectTypeProperty() { - if (match2(TokenType.ellipsis)) { - expect(TokenType.ellipsis); - if (!eat(TokenType.comma)) { - eat(TokenType.semi); - } - if (match2(TokenType.braceR)) { - return; - } - flowParseType(); - } else { - flowParseObjectPropertyKey(); - if (match2(TokenType.lessThan) || match2(TokenType.parenL)) { - flowParseObjectTypeMethodish(); - } else { - eat(TokenType.question); - flowParseTypeInitialiser(); - } - } -} -function flowObjectTypeSemicolon() { - if (!eat(TokenType.semi) && !eat(TokenType.comma) && !match2(TokenType.braceR) && !match2(TokenType.braceBarR)) { - unexpected(); - } -} -function flowParseQualifiedTypeIdentifier(initialIdAlreadyParsed) { - if (!initialIdAlreadyParsed) { - parseIdentifier(); - } - while (eat(TokenType.dot)) { - parseIdentifier(); - } -} -function flowParseGenericType() { - flowParseQualifiedTypeIdentifier(true); - if (match2(TokenType.lessThan)) { - flowParseTypeParameterInstantiation(); - } -} -function flowParseTypeofType() { - expect(TokenType._typeof); - flowParsePrimaryType(); -} -function flowParseTupleType() { - expect(TokenType.bracketL); - while (state.pos < input.length && !match2(TokenType.bracketR)) { - flowParseType(); - if (match2(TokenType.bracketR)) { - break; - } - expect(TokenType.comma); - } - expect(TokenType.bracketR); -} -function flowParseFunctionTypeParam() { - const lookahead = lookaheadType(); - if (lookahead === TokenType.colon || lookahead === TokenType.question) { - parseIdentifier(); - eat(TokenType.question); - flowParseTypeInitialiser(); - } else { - flowParseType(); - } -} -function flowParseFunctionTypeParams() { - while (!match2(TokenType.parenR) && !match2(TokenType.ellipsis) && !state.error) { - flowParseFunctionTypeParam(); - if (!match2(TokenType.parenR)) { - expect(TokenType.comma); - } - } - if (eat(TokenType.ellipsis)) { - flowParseFunctionTypeParam(); - } -} -function flowParsePrimaryType() { - let isGroupedType = false; - const oldNoAnonFunctionType = state.noAnonFunctionType; - switch (state.type) { - case TokenType.name: { - if (isContextual(ContextualKeyword._interface)) { - flowParseInterfaceType(); - return; - } - parseIdentifier(); - flowParseGenericType(); - return; - } - case TokenType.braceL: - flowParseObjectType(false, false, false); - return; - case TokenType.braceBarL: - flowParseObjectType(false, true, false); - return; - case TokenType.bracketL: - flowParseTupleType(); - return; - case TokenType.lessThan: - flowParseTypeParameterDeclaration(); - expect(TokenType.parenL); - flowParseFunctionTypeParams(); - expect(TokenType.parenR); - expect(TokenType.arrow); - flowParseType(); - return; - case TokenType.parenL: - next(); - if (!match2(TokenType.parenR) && !match2(TokenType.ellipsis)) { - if (match2(TokenType.name)) { - const token2 = lookaheadType(); - isGroupedType = token2 !== TokenType.question && token2 !== TokenType.colon; - } else { - isGroupedType = true; - } - } - if (isGroupedType) { - state.noAnonFunctionType = false; - flowParseType(); - state.noAnonFunctionType = oldNoAnonFunctionType; - if (state.noAnonFunctionType || !(match2(TokenType.comma) || match2(TokenType.parenR) && lookaheadType() === TokenType.arrow)) { - expect(TokenType.parenR); - return; - } else { - eat(TokenType.comma); - } - } - flowParseFunctionTypeParams(); - expect(TokenType.parenR); - expect(TokenType.arrow); - flowParseType(); - return; - case TokenType.minus: - next(); - parseLiteral(); - return; - case TokenType.string: - case TokenType.num: - case TokenType._true: - case TokenType._false: - case TokenType._null: - case TokenType._this: - case TokenType._void: - case TokenType.star: - next(); - return; - default: - if (state.type === TokenType._typeof) { - flowParseTypeofType(); - return; - } else if (state.type & TokenType.IS_KEYWORD) { - next(); - state.tokens[state.tokens.length - 1].type = TokenType.name; - return; - } - } - unexpected(); -} -function flowParsePostfixType() { - flowParsePrimaryType(); - while (!canInsertSemicolon() && (match2(TokenType.bracketL) || match2(TokenType.questionDot))) { - eat(TokenType.questionDot); - expect(TokenType.bracketL); - if (eat(TokenType.bracketR)) { - } else { - flowParseType(); - expect(TokenType.bracketR); - } - } -} -function flowParsePrefixType() { - if (eat(TokenType.question)) { - flowParsePrefixType(); - } else { - flowParsePostfixType(); - } -} -function flowParseAnonFunctionWithoutParens() { - flowParsePrefixType(); - if (!state.noAnonFunctionType && eat(TokenType.arrow)) { - flowParseType(); - } -} -function flowParseIntersectionType() { - eat(TokenType.bitwiseAND); - flowParseAnonFunctionWithoutParens(); - while (eat(TokenType.bitwiseAND)) { - flowParseAnonFunctionWithoutParens(); - } -} -function flowParseUnionType() { - eat(TokenType.bitwiseOR); - flowParseIntersectionType(); - while (eat(TokenType.bitwiseOR)) { - flowParseIntersectionType(); - } -} -function flowParseType() { - flowParseUnionType(); -} -function flowParseTypeAnnotation() { - flowParseTypeInitialiser(); -} -function flowParseTypeAnnotatableIdentifier() { - parseIdentifier(); - if (match2(TokenType.colon)) { - flowParseTypeAnnotation(); - } -} -function flowParseVariance() { - if (match2(TokenType.plus) || match2(TokenType.minus)) { - next(); - state.tokens[state.tokens.length - 1].isType = true; - } -} -function flowParseFunctionBodyAndFinish(funcContextId) { - if (match2(TokenType.colon)) { - flowParseTypeAndPredicateInitialiser(); - } - parseFunctionBody(false, funcContextId); -} -function flowParseSubscript(startTokenIndex, noCalls, stopState) { - if (match2(TokenType.questionDot) && lookaheadType() === TokenType.lessThan) { - if (noCalls) { - stopState.stop = true; - return; - } - next(); - flowParseTypeParameterInstantiation(); - expect(TokenType.parenL); - parseCallExpressionArguments(); - return; - } else if (!noCalls && match2(TokenType.lessThan)) { - const snapshot = state.snapshot(); - flowParseTypeParameterInstantiation(); - expect(TokenType.parenL); - parseCallExpressionArguments(); - if (state.error) { - state.restoreFromSnapshot(snapshot); - } else { - return; - } - } - baseParseSubscript(startTokenIndex, noCalls, stopState); -} -function flowStartParseNewArguments() { - if (match2(TokenType.lessThan)) { - const snapshot = state.snapshot(); - flowParseTypeParameterInstantiation(); - if (state.error) { - state.restoreFromSnapshot(snapshot); - } - } -} -function flowTryParseStatement() { - if (match2(TokenType.name) && state.contextualKeyword === ContextualKeyword._interface) { - const oldIsType = pushTypeContext(0); - next(); - flowParseInterface(); - popTypeContext(oldIsType); - return true; - } else if (isContextual(ContextualKeyword._enum)) { - flowParseEnumDeclaration(); - return true; - } - return false; -} -function flowTryParseExportDefaultExpression() { - if (isContextual(ContextualKeyword._enum)) { - flowParseEnumDeclaration(); - return true; - } - return false; -} -function flowParseIdentifierStatement(contextualKeyword) { - if (contextualKeyword === ContextualKeyword._declare) { - if (match2(TokenType._class) || match2(TokenType.name) || match2(TokenType._function) || match2(TokenType._var) || match2(TokenType._export)) { - const oldIsType = pushTypeContext(1); - flowParseDeclare(); - popTypeContext(oldIsType); - } - } else if (match2(TokenType.name)) { - if (contextualKeyword === ContextualKeyword._interface) { - const oldIsType = pushTypeContext(1); - flowParseInterface(); - popTypeContext(oldIsType); - } else if (contextualKeyword === ContextualKeyword._type) { - const oldIsType = pushTypeContext(1); - flowParseTypeAlias(); - popTypeContext(oldIsType); - } else if (contextualKeyword === ContextualKeyword._opaque) { - const oldIsType = pushTypeContext(1); - flowParseOpaqueType(false); - popTypeContext(oldIsType); - } - } - semicolon(); -} -function flowShouldParseExportDeclaration() { - return isContextual(ContextualKeyword._type) || isContextual(ContextualKeyword._interface) || isContextual(ContextualKeyword._opaque) || isContextual(ContextualKeyword._enum); -} -function flowShouldDisallowExportDefaultSpecifier() { - return match2(TokenType.name) && (state.contextualKeyword === ContextualKeyword._type || state.contextualKeyword === ContextualKeyword._interface || state.contextualKeyword === ContextualKeyword._opaque || state.contextualKeyword === ContextualKeyword._enum); -} -function flowParseExportDeclaration() { - if (isContextual(ContextualKeyword._type)) { - const oldIsType = pushTypeContext(1); - next(); - if (match2(TokenType.braceL)) { - parseExportSpecifiers(); - parseExportFrom(); - } else { - flowParseTypeAlias(); - } - popTypeContext(oldIsType); - } else if (isContextual(ContextualKeyword._opaque)) { - const oldIsType = pushTypeContext(1); - next(); - flowParseOpaqueType(false); - popTypeContext(oldIsType); - } else if (isContextual(ContextualKeyword._interface)) { - const oldIsType = pushTypeContext(1); - next(); - flowParseInterface(); - popTypeContext(oldIsType); - } else { - parseStatement(true); - } -} -function flowShouldParseExportStar() { - return match2(TokenType.star) || isContextual(ContextualKeyword._type) && lookaheadType() === TokenType.star; -} -function flowParseExportStar() { - if (eatContextual(ContextualKeyword._type)) { - const oldIsType = pushTypeContext(2); - baseParseExportStar(); - popTypeContext(oldIsType); - } else { - baseParseExportStar(); - } -} -function flowAfterParseClassSuper(hasSuper) { - if (hasSuper && match2(TokenType.lessThan)) { - flowParseTypeParameterInstantiation(); - } - if (isContextual(ContextualKeyword._implements)) { - const oldIsType = pushTypeContext(0); - next(); - state.tokens[state.tokens.length - 1].type = TokenType._implements; - do { - flowParseRestrictedIdentifier(); - if (match2(TokenType.lessThan)) { - flowParseTypeParameterInstantiation(); - } - } while (eat(TokenType.comma)); - popTypeContext(oldIsType); - } -} -function flowStartParseObjPropValue() { - if (match2(TokenType.lessThan)) { - flowParseTypeParameterDeclaration(); - if (!match2(TokenType.parenL)) - unexpected(); - } -} -function flowParseAssignableListItemTypes() { - const oldIsType = pushTypeContext(0); - eat(TokenType.question); - if (match2(TokenType.colon)) { - flowParseTypeAnnotation(); - } - popTypeContext(oldIsType); -} -function flowStartParseImportSpecifiers() { - if (match2(TokenType._typeof) || isContextual(ContextualKeyword._type)) { - const lh = lookaheadTypeAndKeyword(); - if (isMaybeDefaultImport(lh) || lh.type === TokenType.braceL || lh.type === TokenType.star) { - next(); - } - } -} -function flowParseImportSpecifier() { - const isTypeKeyword = state.contextualKeyword === ContextualKeyword._type || state.type === TokenType._typeof; - if (isTypeKeyword) { - next(); - } else { - parseIdentifier(); - } - if (isContextual(ContextualKeyword._as) && !isLookaheadContextual(ContextualKeyword._as)) { - parseIdentifier(); - if (isTypeKeyword && !match2(TokenType.name) && !(state.type & TokenType.IS_KEYWORD)) { - } else { - parseIdentifier(); - } - } else { - if (isTypeKeyword && (match2(TokenType.name) || !!(state.type & TokenType.IS_KEYWORD))) { - parseIdentifier(); - } - if (eatContextual(ContextualKeyword._as)) { - parseIdentifier(); - } - } -} -function flowStartParseFunctionParams() { - if (match2(TokenType.lessThan)) { - const oldIsType = pushTypeContext(0); - flowParseTypeParameterDeclaration(); - popTypeContext(oldIsType); - } -} -function flowAfterParseVarHead() { - if (match2(TokenType.colon)) { - flowParseTypeAnnotation(); - } -} -function flowStartParseAsyncArrowFromCallExpression() { - if (match2(TokenType.colon)) { - const oldNoAnonFunctionType = state.noAnonFunctionType; - state.noAnonFunctionType = true; - flowParseTypeAnnotation(); - state.noAnonFunctionType = oldNoAnonFunctionType; - } -} -function flowParseMaybeAssign(noIn, isWithinParens) { - if (match2(TokenType.lessThan)) { - const snapshot = state.snapshot(); - let wasArrow = baseParseMaybeAssign(noIn, isWithinParens); - if (state.error) { - state.restoreFromSnapshot(snapshot); - state.type = TokenType.typeParameterStart; - } else { - return wasArrow; - } - const oldIsType = pushTypeContext(0); - flowParseTypeParameterDeclaration(); - popTypeContext(oldIsType); - wasArrow = baseParseMaybeAssign(noIn, isWithinParens); - if (wasArrow) { - return true; - } - unexpected(); - } - return baseParseMaybeAssign(noIn, isWithinParens); -} -function flowParseArrow() { - if (match2(TokenType.colon)) { - const oldIsType = pushTypeContext(0); - const snapshot = state.snapshot(); - const oldNoAnonFunctionType = state.noAnonFunctionType; - state.noAnonFunctionType = true; - flowParseTypeAndPredicateInitialiser(); - state.noAnonFunctionType = oldNoAnonFunctionType; - if (canInsertSemicolon()) - unexpected(); - if (!match2(TokenType.arrow)) - unexpected(); - if (state.error) { - state.restoreFromSnapshot(snapshot); - } - popTypeContext(oldIsType); - } - return eat(TokenType.arrow); -} -function flowParseSubscripts(startTokenIndex, noCalls = false) { - if (state.tokens[state.tokens.length - 1].contextualKeyword === ContextualKeyword._async && match2(TokenType.lessThan)) { - const snapshot = state.snapshot(); - const wasArrow = parseAsyncArrowWithTypeParameters(); - if (wasArrow && !state.error) { - return; - } - state.restoreFromSnapshot(snapshot); - } - baseParseSubscripts(startTokenIndex, noCalls); -} -function parseAsyncArrowWithTypeParameters() { - state.scopeDepth++; - const startTokenIndex = state.tokens.length; - parseFunctionParams(); - if (!parseArrow()) { - return false; - } - parseArrowExpression(startTokenIndex); - return true; -} -function flowParseEnumDeclaration() { - expectContextual(ContextualKeyword._enum); - state.tokens[state.tokens.length - 1].type = TokenType._enum; - parseIdentifier(); - flowParseEnumBody(); -} -function flowParseEnumBody() { - if (eatContextual(ContextualKeyword._of)) { - next(); - } - expect(TokenType.braceL); - flowParseEnumMembers(); - expect(TokenType.braceR); -} -function flowParseEnumMembers() { - while (!match2(TokenType.braceR) && !state.error) { - if (eat(TokenType.ellipsis)) { - break; - } - flowParseEnumMember(); - if (!match2(TokenType.braceR)) { - expect(TokenType.comma); - } - } -} -function flowParseEnumMember() { - parseIdentifier(); - if (eat(TokenType.eq)) { - next(); - } -} - -// node_modules/sucrase/dist/esm/parser/traverser/statement.js -function parseTopLevel() { - parseBlockBody(TokenType.eof); - state.scopes.push(new Scope(0, state.tokens.length, true)); - if (state.scopeDepth !== 0) { - throw new Error(`Invalid scope depth at end of file: ${state.scopeDepth}`); - } - return new File(state.tokens, state.scopes); -} -function parseStatement(declaration2) { - if (isFlowEnabled) { - if (flowTryParseStatement()) { - return; - } - } - if (match2(TokenType.at)) { - parseDecorators(); - } - parseStatementContent(declaration2); -} -function parseStatementContent(declaration2) { - if (isTypeScriptEnabled) { - if (tsTryParseStatementContent()) { - return; - } - } - const starttype = state.type; - switch (starttype) { - case TokenType._break: - case TokenType._continue: - parseBreakContinueStatement(); - return; - case TokenType._debugger: - parseDebuggerStatement(); - return; - case TokenType._do: - parseDoStatement(); - return; - case TokenType._for: - parseForStatement(); - return; - case TokenType._function: - if (lookaheadType() === TokenType.dot) - break; - if (!declaration2) - unexpected(); - parseFunctionStatement(); - return; - case TokenType._class: - if (!declaration2) - unexpected(); - parseClass(true); - return; - case TokenType._if: - parseIfStatement(); - return; - case TokenType._return: - parseReturnStatement(); - return; - case TokenType._switch: - parseSwitchStatement(); - return; - case TokenType._throw: - parseThrowStatement(); - return; - case TokenType._try: - parseTryStatement(); - return; - case TokenType._let: - case TokenType._const: - if (!declaration2) - unexpected(); - case TokenType._var: - parseVarStatement(starttype !== TokenType._var); - return; - case TokenType._while: - parseWhileStatement(); - return; - case TokenType.braceL: - parseBlock(); - return; - case TokenType.semi: - parseEmptyStatement(); - return; - case TokenType._export: - case TokenType._import: { - const nextType = lookaheadType(); - if (nextType === TokenType.parenL || nextType === TokenType.dot) { - break; - } - next(); - if (starttype === TokenType._import) { - parseImport(); - } else { - parseExport(); - } - return; - } - case TokenType.name: - if (state.contextualKeyword === ContextualKeyword._async) { - const functionStart = state.start; - const snapshot = state.snapshot(); - next(); - if (match2(TokenType._function) && !canInsertSemicolon()) { - expect(TokenType._function); - parseFunction(functionStart, true); - return; - } else { - state.restoreFromSnapshot(snapshot); - } - } else if (state.contextualKeyword === ContextualKeyword._using && !hasFollowingLineBreak() && // Statements like `using[0]` and `using in foo` aren't actual using - // declarations. - lookaheadType() === TokenType.name) { - parseVarStatement(true); - return; - } else if (startsAwaitUsing()) { - expectContextual(ContextualKeyword._await); - parseVarStatement(true); - return; - } - default: - break; - } - const initialTokensLength = state.tokens.length; - parseExpression(); - let simpleName = null; - if (state.tokens.length === initialTokensLength + 1) { - const token2 = state.tokens[state.tokens.length - 1]; - if (token2.type === TokenType.name) { - simpleName = token2.contextualKeyword; - } - } - if (simpleName == null) { - semicolon(); - return; - } - if (eat(TokenType.colon)) { - parseLabeledStatement(); - } else { - parseIdentifierStatement(simpleName); - } -} -function startsAwaitUsing() { - if (!isContextual(ContextualKeyword._await)) { - return false; - } - const snapshot = state.snapshot(); - next(); - if (!isContextual(ContextualKeyword._using) || hasPrecedingLineBreak()) { - state.restoreFromSnapshot(snapshot); - return false; - } - next(); - if (!match2(TokenType.name) || hasPrecedingLineBreak()) { - state.restoreFromSnapshot(snapshot); - return false; - } - state.restoreFromSnapshot(snapshot); - return true; -} -function parseDecorators() { - while (match2(TokenType.at)) { - parseDecorator(); - } -} -function parseDecorator() { - next(); - if (eat(TokenType.parenL)) { - parseExpression(); - expect(TokenType.parenR); - } else { - parseIdentifier(); - while (eat(TokenType.dot)) { - parseIdentifier(); - } - parseMaybeDecoratorArguments(); - } -} -function parseMaybeDecoratorArguments() { - if (isTypeScriptEnabled) { - tsParseMaybeDecoratorArguments(); - } else { - baseParseMaybeDecoratorArguments(); - } -} -function baseParseMaybeDecoratorArguments() { - if (eat(TokenType.parenL)) { - parseCallExpressionArguments(); - } -} -function parseBreakContinueStatement() { - next(); - if (!isLineTerminator()) { - parseIdentifier(); - semicolon(); - } -} -function parseDebuggerStatement() { - next(); - semicolon(); -} -function parseDoStatement() { - next(); - parseStatement(false); - expect(TokenType._while); - parseParenExpression(); - eat(TokenType.semi); -} -function parseForStatement() { - state.scopeDepth++; - const startTokenIndex = state.tokens.length; - parseAmbiguousForStatement(); - const endTokenIndex = state.tokens.length; - state.scopes.push(new Scope(startTokenIndex, endTokenIndex, false)); - state.scopeDepth--; -} -function isUsingInLoop() { - if (!isContextual(ContextualKeyword._using)) { - return false; - } - if (isLookaheadContextual(ContextualKeyword._of)) { - return false; - } - return true; -} -function parseAmbiguousForStatement() { - next(); - let forAwait = false; - if (isContextual(ContextualKeyword._await)) { - forAwait = true; - next(); - } - expect(TokenType.parenL); - if (match2(TokenType.semi)) { - if (forAwait) { - unexpected(); - } - parseFor(); - return; - } - const isAwaitUsing = startsAwaitUsing(); - if (isAwaitUsing || match2(TokenType._var) || match2(TokenType._let) || match2(TokenType._const) || isUsingInLoop()) { - if (isAwaitUsing) { - expectContextual(ContextualKeyword._await); - } - next(); - parseVar(true, state.type !== TokenType._var); - if (match2(TokenType._in) || isContextual(ContextualKeyword._of)) { - parseForIn(forAwait); - return; - } - parseFor(); - return; - } - parseExpression(true); - if (match2(TokenType._in) || isContextual(ContextualKeyword._of)) { - parseForIn(forAwait); - return; - } - if (forAwait) { - unexpected(); - } - parseFor(); -} -function parseFunctionStatement() { - const functionStart = state.start; - next(); - parseFunction(functionStart, true); -} -function parseIfStatement() { - next(); - parseParenExpression(); - parseStatement(false); - if (eat(TokenType._else)) { - parseStatement(false); - } -} -function parseReturnStatement() { - next(); - if (!isLineTerminator()) { - parseExpression(); - semicolon(); - } -} -function parseSwitchStatement() { - next(); - parseParenExpression(); - state.scopeDepth++; - const startTokenIndex = state.tokens.length; - expect(TokenType.braceL); - while (!match2(TokenType.braceR) && !state.error) { - if (match2(TokenType._case) || match2(TokenType._default)) { - const isCase = match2(TokenType._case); - next(); - if (isCase) { - parseExpression(); - } - expect(TokenType.colon); - } else { - parseStatement(true); - } - } - next(); - const endTokenIndex = state.tokens.length; - state.scopes.push(new Scope(startTokenIndex, endTokenIndex, false)); - state.scopeDepth--; -} -function parseThrowStatement() { - next(); - parseExpression(); - semicolon(); -} -function parseCatchClauseParam() { - parseBindingAtom( - true - /* isBlockScope */ - ); - if (isTypeScriptEnabled) { - tsTryParseTypeAnnotation(); - } -} -function parseTryStatement() { - next(); - parseBlock(); - if (match2(TokenType._catch)) { - next(); - let catchBindingStartTokenIndex = null; - if (match2(TokenType.parenL)) { - state.scopeDepth++; - catchBindingStartTokenIndex = state.tokens.length; - expect(TokenType.parenL); - parseCatchClauseParam(); - expect(TokenType.parenR); - } - parseBlock(); - if (catchBindingStartTokenIndex != null) { - const endTokenIndex = state.tokens.length; - state.scopes.push(new Scope(catchBindingStartTokenIndex, endTokenIndex, false)); - state.scopeDepth--; - } - } - if (eat(TokenType._finally)) { - parseBlock(); - } -} -function parseVarStatement(isBlockScope) { - next(); - parseVar(false, isBlockScope); - semicolon(); -} -function parseWhileStatement() { - next(); - parseParenExpression(); - parseStatement(false); -} -function parseEmptyStatement() { - next(); -} -function parseLabeledStatement() { - parseStatement(true); -} -function parseIdentifierStatement(contextualKeyword) { - if (isTypeScriptEnabled) { - tsParseIdentifierStatement(contextualKeyword); - } else if (isFlowEnabled) { - flowParseIdentifierStatement(contextualKeyword); - } else { - semicolon(); - } -} -function parseBlock(isFunctionScope = false, contextId = 0) { - const startTokenIndex = state.tokens.length; - state.scopeDepth++; - expect(TokenType.braceL); - if (contextId) { - state.tokens[state.tokens.length - 1].contextId = contextId; - } - parseBlockBody(TokenType.braceR); - if (contextId) { - state.tokens[state.tokens.length - 1].contextId = contextId; - } - const endTokenIndex = state.tokens.length; - state.scopes.push(new Scope(startTokenIndex, endTokenIndex, isFunctionScope)); - state.scopeDepth--; -} -function parseBlockBody(end3) { - while (!eat(end3) && !state.error) { - parseStatement(true); - } -} -function parseFor() { - expect(TokenType.semi); - if (!match2(TokenType.semi)) { - parseExpression(); - } - expect(TokenType.semi); - if (!match2(TokenType.parenR)) { - parseExpression(); - } - expect(TokenType.parenR); - parseStatement(false); -} -function parseForIn(forAwait) { - if (forAwait) { - eatContextual(ContextualKeyword._of); - } else { - next(); - } - parseExpression(); - expect(TokenType.parenR); - parseStatement(false); -} -function parseVar(isFor, isBlockScope) { - while (true) { - parseVarHead(isBlockScope); - if (eat(TokenType.eq)) { - const eqIndex = state.tokens.length - 1; - parseMaybeAssign(isFor); - state.tokens[eqIndex].rhsEndIndex = state.tokens.length; - } - if (!eat(TokenType.comma)) { - break; - } - } -} -function parseVarHead(isBlockScope) { - parseBindingAtom(isBlockScope); - if (isTypeScriptEnabled) { - tsAfterParseVarHead(); - } else if (isFlowEnabled) { - flowAfterParseVarHead(); - } -} -function parseFunction(functionStart, isStatement, optionalId = false) { - if (match2(TokenType.star)) { - next(); - } - if (isStatement && !optionalId && !match2(TokenType.name) && !match2(TokenType._yield)) { - unexpected(); - } - let nameScopeStartTokenIndex = null; - if (match2(TokenType.name)) { - if (!isStatement) { - nameScopeStartTokenIndex = state.tokens.length; - state.scopeDepth++; - } - parseBindingIdentifier(false); - } - const startTokenIndex = state.tokens.length; - state.scopeDepth++; - parseFunctionParams(); - parseFunctionBodyAndFinish(functionStart); - const endTokenIndex = state.tokens.length; - state.scopes.push(new Scope(startTokenIndex, endTokenIndex, true)); - state.scopeDepth--; - if (nameScopeStartTokenIndex !== null) { - state.scopes.push(new Scope(nameScopeStartTokenIndex, endTokenIndex, true)); - state.scopeDepth--; - } -} -function parseFunctionParams(allowModifiers = false, funcContextId = 0) { - if (isTypeScriptEnabled) { - tsStartParseFunctionParams(); - } else if (isFlowEnabled) { - flowStartParseFunctionParams(); - } - expect(TokenType.parenL); - if (funcContextId) { - state.tokens[state.tokens.length - 1].contextId = funcContextId; - } - parseBindingList( - TokenType.parenR, - false, - false, - allowModifiers, - funcContextId - ); - if (funcContextId) { - state.tokens[state.tokens.length - 1].contextId = funcContextId; - } -} -function parseClass(isStatement, optionalId = false) { - const contextId = getNextContextId(); - next(); - state.tokens[state.tokens.length - 1].contextId = contextId; - state.tokens[state.tokens.length - 1].isExpression = !isStatement; - let nameScopeStartTokenIndex = null; - if (!isStatement) { - nameScopeStartTokenIndex = state.tokens.length; - state.scopeDepth++; - } - parseClassId(isStatement, optionalId); - parseClassSuper(); - const openBraceIndex = state.tokens.length; - parseClassBody(contextId); - if (state.error) { - return; - } - state.tokens[openBraceIndex].contextId = contextId; - state.tokens[state.tokens.length - 1].contextId = contextId; - if (nameScopeStartTokenIndex !== null) { - const endTokenIndex = state.tokens.length; - state.scopes.push(new Scope(nameScopeStartTokenIndex, endTokenIndex, false)); - state.scopeDepth--; - } -} -function isClassProperty() { - return match2(TokenType.eq) || match2(TokenType.semi) || match2(TokenType.braceR) || match2(TokenType.bang) || match2(TokenType.colon); -} -function isClassMethod() { - return match2(TokenType.parenL) || match2(TokenType.lessThan); -} -function parseClassBody(classContextId) { - expect(TokenType.braceL); - while (!eat(TokenType.braceR) && !state.error) { - if (eat(TokenType.semi)) { - continue; - } - if (match2(TokenType.at)) { - parseDecorator(); - continue; - } - const memberStart = state.start; - parseClassMember(memberStart, classContextId); - } -} -function parseClassMember(memberStart, classContextId) { - if (isTypeScriptEnabled) { - tsParseModifiers([ - ContextualKeyword._declare, - ContextualKeyword._public, - ContextualKeyword._protected, - ContextualKeyword._private, - ContextualKeyword._override - ]); - } - let isStatic = false; - if (match2(TokenType.name) && state.contextualKeyword === ContextualKeyword._static) { - parseIdentifier(); - if (isClassMethod()) { - parseClassMethod( - memberStart, - /* isConstructor */ - false - ); - return; - } else if (isClassProperty()) { - parseClassProperty(); - return; - } - state.tokens[state.tokens.length - 1].type = TokenType._static; - isStatic = true; - if (match2(TokenType.braceL)) { - state.tokens[state.tokens.length - 1].contextId = classContextId; - parseBlock(); - return; - } - } - parseClassMemberWithIsStatic(memberStart, isStatic, classContextId); -} -function parseClassMemberWithIsStatic(memberStart, isStatic, classContextId) { - if (isTypeScriptEnabled) { - if (tsTryParseClassMemberWithIsStatic(isStatic)) { - return; - } - } - if (eat(TokenType.star)) { - parseClassPropertyName(classContextId); - parseClassMethod( - memberStart, - /* isConstructor */ - false - ); - return; - } - parseClassPropertyName(classContextId); - let isConstructor = false; - const token2 = state.tokens[state.tokens.length - 1]; - if (token2.contextualKeyword === ContextualKeyword._constructor) { - isConstructor = true; - } - parsePostMemberNameModifiers(); - if (isClassMethod()) { - parseClassMethod(memberStart, isConstructor); - } else if (isClassProperty()) { - parseClassProperty(); - } else if (token2.contextualKeyword === ContextualKeyword._async && !isLineTerminator()) { - state.tokens[state.tokens.length - 1].type = TokenType._async; - const isGenerator = match2(TokenType.star); - if (isGenerator) { - next(); - } - parseClassPropertyName(classContextId); - parsePostMemberNameModifiers(); - parseClassMethod( - memberStart, - false - /* isConstructor */ - ); - } else if ((token2.contextualKeyword === ContextualKeyword._get || token2.contextualKeyword === ContextualKeyword._set) && !(isLineTerminator() && match2(TokenType.star))) { - if (token2.contextualKeyword === ContextualKeyword._get) { - state.tokens[state.tokens.length - 1].type = TokenType._get; - } else { - state.tokens[state.tokens.length - 1].type = TokenType._set; - } - parseClassPropertyName(classContextId); - parseClassMethod( - memberStart, - /* isConstructor */ - false - ); - } else if (token2.contextualKeyword === ContextualKeyword._accessor && !isLineTerminator()) { - parseClassPropertyName(classContextId); - parseClassProperty(); - } else if (isLineTerminator()) { - parseClassProperty(); - } else { - unexpected(); - } -} -function parseClassMethod(functionStart, isConstructor) { - if (isTypeScriptEnabled) { - tsTryParseTypeParameters(); - } else if (isFlowEnabled) { - if (match2(TokenType.lessThan)) { - flowParseTypeParameterDeclaration(); - } - } - parseMethod(functionStart, isConstructor); -} -function parseClassPropertyName(classContextId) { - parsePropertyName(classContextId); -} -function parsePostMemberNameModifiers() { - if (isTypeScriptEnabled) { - const oldIsType = pushTypeContext(0); - eat(TokenType.question); - popTypeContext(oldIsType); - } -} -function parseClassProperty() { - if (isTypeScriptEnabled) { - eatTypeToken(TokenType.bang); - tsTryParseTypeAnnotation(); - } else if (isFlowEnabled) { - if (match2(TokenType.colon)) { - flowParseTypeAnnotation(); - } - } - if (match2(TokenType.eq)) { - const equalsTokenIndex = state.tokens.length; - next(); - parseMaybeAssign(); - state.tokens[equalsTokenIndex].rhsEndIndex = state.tokens.length; - } - semicolon(); -} -function parseClassId(isStatement, optionalId = false) { - if (isTypeScriptEnabled && (!isStatement || optionalId) && isContextual(ContextualKeyword._implements)) { - return; - } - if (match2(TokenType.name)) { - parseBindingIdentifier(true); - } - if (isTypeScriptEnabled) { - tsTryParseTypeParameters(); - } else if (isFlowEnabled) { - if (match2(TokenType.lessThan)) { - flowParseTypeParameterDeclaration(); - } - } -} -function parseClassSuper() { - let hasSuper = false; - if (eat(TokenType._extends)) { - parseExprSubscripts(); - hasSuper = true; - } else { - hasSuper = false; - } - if (isTypeScriptEnabled) { - tsAfterParseClassSuper(hasSuper); - } else if (isFlowEnabled) { - flowAfterParseClassSuper(hasSuper); - } -} -function parseExport() { - const exportIndex = state.tokens.length - 1; - if (isTypeScriptEnabled) { - if (tsTryParseExport()) { - return; - } - } - if (shouldParseExportStar()) { - parseExportStar(); - } else if (isExportDefaultSpecifier()) { - parseIdentifier(); - if (match2(TokenType.comma) && lookaheadType() === TokenType.star) { - expect(TokenType.comma); - expect(TokenType.star); - expectContextual(ContextualKeyword._as); - parseIdentifier(); - } else { - parseExportSpecifiersMaybe(); - } - parseExportFrom(); - } else if (eat(TokenType._default)) { - parseExportDefaultExpression(); - } else if (shouldParseExportDeclaration()) { - parseExportDeclaration(); - } else { - parseExportSpecifiers(); - parseExportFrom(); - } - state.tokens[exportIndex].rhsEndIndex = state.tokens.length; -} -function parseExportDefaultExpression() { - if (isTypeScriptEnabled) { - if (tsTryParseExportDefaultExpression()) { - return; - } - } - if (isFlowEnabled) { - if (flowTryParseExportDefaultExpression()) { - return; - } - } - const functionStart = state.start; - if (eat(TokenType._function)) { - parseFunction(functionStart, true, true); - } else if (isContextual(ContextualKeyword._async) && lookaheadType() === TokenType._function) { - eatContextual(ContextualKeyword._async); - eat(TokenType._function); - parseFunction(functionStart, true, true); - } else if (match2(TokenType._class)) { - parseClass(true, true); - } else if (match2(TokenType.at)) { - parseDecorators(); - parseClass(true, true); - } else { - parseMaybeAssign(); - semicolon(); - } -} -function parseExportDeclaration() { - if (isTypeScriptEnabled) { - tsParseExportDeclaration(); - } else if (isFlowEnabled) { - flowParseExportDeclaration(); - } else { - parseStatement(true); - } -} -function isExportDefaultSpecifier() { - if (isTypeScriptEnabled && tsIsDeclarationStart()) { - return false; - } else if (isFlowEnabled && flowShouldDisallowExportDefaultSpecifier()) { - return false; - } - if (match2(TokenType.name)) { - return state.contextualKeyword !== ContextualKeyword._async; - } - if (!match2(TokenType._default)) { - return false; - } - const _next = nextTokenStart(); - const lookahead = lookaheadTypeAndKeyword(); - const hasFrom = lookahead.type === TokenType.name && lookahead.contextualKeyword === ContextualKeyword._from; - if (lookahead.type === TokenType.comma) { - return true; - } - if (hasFrom) { - const nextAfterFrom = input.charCodeAt(nextTokenStartSince(_next + 4)); - return nextAfterFrom === charCodes.quotationMark || nextAfterFrom === charCodes.apostrophe; - } - return false; -} -function parseExportSpecifiersMaybe() { - if (eat(TokenType.comma)) { - parseExportSpecifiers(); - } -} -function parseExportFrom() { - if (eatContextual(ContextualKeyword._from)) { - parseExprAtom(); - maybeParseImportAttributes(); - } - semicolon(); -} -function shouldParseExportStar() { - if (isFlowEnabled) { - return flowShouldParseExportStar(); - } else { - return match2(TokenType.star); - } -} -function parseExportStar() { - if (isFlowEnabled) { - flowParseExportStar(); - } else { - baseParseExportStar(); - } -} -function baseParseExportStar() { - expect(TokenType.star); - if (isContextual(ContextualKeyword._as)) { - parseExportNamespace(); - } else { - parseExportFrom(); - } -} -function parseExportNamespace() { - next(); - state.tokens[state.tokens.length - 1].type = TokenType._as; - parseIdentifier(); - parseExportSpecifiersMaybe(); - parseExportFrom(); -} -function shouldParseExportDeclaration() { - return isTypeScriptEnabled && tsIsDeclarationStart() || isFlowEnabled && flowShouldParseExportDeclaration() || state.type === TokenType._var || state.type === TokenType._const || state.type === TokenType._let || state.type === TokenType._function || state.type === TokenType._class || isContextual(ContextualKeyword._async) || match2(TokenType.at); -} -function parseExportSpecifiers() { - let first = true; - expect(TokenType.braceL); - while (!eat(TokenType.braceR) && !state.error) { - if (first) { - first = false; - } else { - expect(TokenType.comma); - if (eat(TokenType.braceR)) { - break; - } - } - parseExportSpecifier(); - } -} -function parseExportSpecifier() { - if (isTypeScriptEnabled) { - tsParseExportSpecifier(); - return; - } - parseIdentifier(); - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ExportAccess; - if (eatContextual(ContextualKeyword._as)) { - parseIdentifier(); - } -} -function isImportReflection() { - const snapshot = state.snapshot(); - expectContextual(ContextualKeyword._module); - if (eatContextual(ContextualKeyword._from)) { - if (isContextual(ContextualKeyword._from)) { - state.restoreFromSnapshot(snapshot); - return true; - } else { - state.restoreFromSnapshot(snapshot); - return false; - } - } else if (match2(TokenType.comma)) { - state.restoreFromSnapshot(snapshot); - return false; - } else { - state.restoreFromSnapshot(snapshot); - return true; - } -} -function parseMaybeImportReflection() { - if (isContextual(ContextualKeyword._module) && isImportReflection()) { - next(); - } -} -function parseImport() { - if (isTypeScriptEnabled && match2(TokenType.name) && lookaheadType() === TokenType.eq) { - tsParseImportEqualsDeclaration(); - return; - } - if (isTypeScriptEnabled && isContextual(ContextualKeyword._type)) { - const lookahead = lookaheadTypeAndKeyword(); - if (lookahead.type === TokenType.name && lookahead.contextualKeyword !== ContextualKeyword._from) { - expectContextual(ContextualKeyword._type); - if (lookaheadType() === TokenType.eq) { - tsParseImportEqualsDeclaration(); - return; - } - } else if (lookahead.type === TokenType.star || lookahead.type === TokenType.braceL) { - expectContextual(ContextualKeyword._type); - } - } - if (match2(TokenType.string)) { - parseExprAtom(); - } else { - parseMaybeImportReflection(); - parseImportSpecifiers(); - expectContextual(ContextualKeyword._from); - parseExprAtom(); - } - maybeParseImportAttributes(); - semicolon(); -} -function shouldParseDefaultImport() { - return match2(TokenType.name); -} -function parseImportSpecifierLocal() { - parseImportedIdentifier(); -} -function parseImportSpecifiers() { - if (isFlowEnabled) { - flowStartParseImportSpecifiers(); - } - let first = true; - if (shouldParseDefaultImport()) { - parseImportSpecifierLocal(); - if (!eat(TokenType.comma)) - return; - } - if (match2(TokenType.star)) { - next(); - expectContextual(ContextualKeyword._as); - parseImportSpecifierLocal(); - return; - } - expect(TokenType.braceL); - while (!eat(TokenType.braceR) && !state.error) { - if (first) { - first = false; - } else { - if (eat(TokenType.colon)) { - unexpected( - "ES2015 named imports do not destructure. Use another statement for destructuring after the import." - ); - } - expect(TokenType.comma); - if (eat(TokenType.braceR)) { - break; - } - } - parseImportSpecifier(); - } -} -function parseImportSpecifier() { - if (isTypeScriptEnabled) { - tsParseImportSpecifier(); - return; - } - if (isFlowEnabled) { - flowParseImportSpecifier(); - return; - } - parseImportedIdentifier(); - if (isContextual(ContextualKeyword._as)) { - state.tokens[state.tokens.length - 1].identifierRole = IdentifierRole.ImportAccess; - next(); - parseImportedIdentifier(); - } -} -function maybeParseImportAttributes() { - if (match2(TokenType._with) || isContextual(ContextualKeyword._assert) && !hasPrecedingLineBreak()) { - next(); - parseObj(false, false); - } -} - -// node_modules/sucrase/dist/esm/parser/traverser/index.js -function parseFile() { - if (state.pos === 0 && input.charCodeAt(0) === charCodes.numberSign && input.charCodeAt(1) === charCodes.exclamationMark) { - skipLineComment(2); - } - nextToken(); - return parseTopLevel(); -} - -// node_modules/sucrase/dist/esm/parser/index.js -var File = class { - constructor(tokens, scopes) { - this.tokens = tokens; - this.scopes = scopes; - } -}; -function parse2(input2, isJSXEnabled2, isTypeScriptEnabled2, isFlowEnabled2) { - if (isFlowEnabled2 && isTypeScriptEnabled2) { - throw new Error("Cannot combine flow and typescript plugins."); - } - initParser(input2, isJSXEnabled2, isTypeScriptEnabled2, isFlowEnabled2); - const result = parseFile(); - if (state.error) { - throw augmentError(state.error); - } - return result; -} - -// node_modules/sucrase/dist/esm/util/isAsyncOperation.js -function isAsyncOperation(tokens) { - let index2 = tokens.currentIndex(); - let depth = 0; - const startToken = tokens.currentToken(); - do { - const token2 = tokens.tokens[index2]; - if (token2.isOptionalChainStart) { - depth++; - } - if (token2.isOptionalChainEnd) { - depth--; - } - depth += token2.numNullishCoalesceStarts; - depth -= token2.numNullishCoalesceEnds; - if (token2.contextualKeyword === ContextualKeyword._await && token2.identifierRole == null && token2.scopeDepth === startToken.scopeDepth) { - return true; - } - index2 += 1; - } while (depth > 0 && index2 < tokens.tokens.length); - return false; -} - -// node_modules/sucrase/dist/esm/TokenProcessor.js -var TokenProcessor = class { - __init() { - this.resultCode = ""; - } - // Array mapping input token index to optional string index position in the - // output code. - __init2() { - this.resultMappings = new Array(this.tokens.length); - } - __init3() { - this.tokenIndex = 0; - } - constructor(code, tokens, isFlowEnabled2, disableESTransforms, helperManager) { - ; - this.code = code; - this.tokens = tokens; - this.isFlowEnabled = isFlowEnabled2; - this.disableESTransforms = disableESTransforms; - this.helperManager = helperManager; - TokenProcessor.prototype.__init.call(this); - TokenProcessor.prototype.__init2.call(this); - TokenProcessor.prototype.__init3.call(this); - } - /** - * Snapshot the token state in a way that can be restored later, useful for - * things like lookahead. - * - * resultMappings do not need to be copied since in all use cases, they will - * be overwritten anyway after restore. - */ - snapshot() { - return { - resultCode: this.resultCode, - tokenIndex: this.tokenIndex - }; - } - restoreToSnapshot(snapshot) { - this.resultCode = snapshot.resultCode; - this.tokenIndex = snapshot.tokenIndex; - } - /** - * Remove and return the code generated since the snapshot, leaving the - * current token position in-place. Unlike most TokenProcessor operations, - * this operation can result in input/output line number mismatches because - * the removed code may contain newlines, so this operation should be used - * sparingly. - */ - dangerouslyGetAndRemoveCodeSinceSnapshot(snapshot) { - const result = this.resultCode.slice(snapshot.resultCode.length); - this.resultCode = snapshot.resultCode; - return result; - } - reset() { - this.resultCode = ""; - this.resultMappings = new Array(this.tokens.length); - this.tokenIndex = 0; - } - matchesContextualAtIndex(index2, contextualKeyword) { - return this.matches1AtIndex(index2, TokenType.name) && this.tokens[index2].contextualKeyword === contextualKeyword; - } - identifierNameAtIndex(index2) { - return this.identifierNameForToken(this.tokens[index2]); - } - identifierNameAtRelativeIndex(relativeIndex) { - return this.identifierNameForToken(this.tokenAtRelativeIndex(relativeIndex)); - } - identifierName() { - return this.identifierNameForToken(this.currentToken()); - } - identifierNameForToken(token2) { - return this.code.slice(token2.start, token2.end); - } - rawCodeForToken(token2) { - return this.code.slice(token2.start, token2.end); - } - stringValueAtIndex(index2) { - return this.stringValueForToken(this.tokens[index2]); - } - stringValue() { - return this.stringValueForToken(this.currentToken()); - } - stringValueForToken(token2) { - return this.code.slice(token2.start + 1, token2.end - 1); - } - matches1AtIndex(index2, t1) { - return this.tokens[index2].type === t1; - } - matches2AtIndex(index2, t1, t22) { - return this.tokens[index2].type === t1 && this.tokens[index2 + 1].type === t22; - } - matches3AtIndex(index2, t1, t22, t32) { - return this.tokens[index2].type === t1 && this.tokens[index2 + 1].type === t22 && this.tokens[index2 + 2].type === t32; - } - matches1(t1) { - return this.tokens[this.tokenIndex].type === t1; - } - matches2(t1, t22) { - return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t22; - } - matches3(t1, t22, t32) { - return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t22 && this.tokens[this.tokenIndex + 2].type === t32; - } - matches4(t1, t22, t32, t4) { - return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t22 && this.tokens[this.tokenIndex + 2].type === t32 && this.tokens[this.tokenIndex + 3].type === t4; - } - matches5(t1, t22, t32, t4, t5) { - return this.tokens[this.tokenIndex].type === t1 && this.tokens[this.tokenIndex + 1].type === t22 && this.tokens[this.tokenIndex + 2].type === t32 && this.tokens[this.tokenIndex + 3].type === t4 && this.tokens[this.tokenIndex + 4].type === t5; - } - matchesContextual(contextualKeyword) { - return this.matchesContextualAtIndex(this.tokenIndex, contextualKeyword); - } - matchesContextIdAndLabel(type, contextId) { - return this.matches1(type) && this.currentToken().contextId === contextId; - } - previousWhitespaceAndComments() { - let whitespaceAndComments = this.code.slice( - this.tokenIndex > 0 ? this.tokens[this.tokenIndex - 1].end : 0, - this.tokenIndex < this.tokens.length ? this.tokens[this.tokenIndex].start : this.code.length - ); - if (this.isFlowEnabled) { - whitespaceAndComments = whitespaceAndComments.replace(/@flow/g, ""); - } - return whitespaceAndComments; - } - replaceToken(newCode) { - this.resultCode += this.previousWhitespaceAndComments(); - this.appendTokenPrefix(); - this.resultMappings[this.tokenIndex] = this.resultCode.length; - this.resultCode += newCode; - this.appendTokenSuffix(); - this.tokenIndex++; - } - replaceTokenTrimmingLeftWhitespace(newCode) { - this.resultCode += this.previousWhitespaceAndComments().replace(/[^\r\n]/g, ""); - this.appendTokenPrefix(); - this.resultMappings[this.tokenIndex] = this.resultCode.length; - this.resultCode += newCode; - this.appendTokenSuffix(); - this.tokenIndex++; - } - removeInitialToken() { - this.replaceToken(""); - } - removeToken() { - this.replaceTokenTrimmingLeftWhitespace(""); - } - /** - * Remove all code until the next }, accounting for balanced braces. - */ - removeBalancedCode() { - let braceDepth = 0; - while (!this.isAtEnd()) { - if (this.matches1(TokenType.braceL)) { - braceDepth++; - } else if (this.matches1(TokenType.braceR)) { - if (braceDepth === 0) { - return; - } - braceDepth--; - } - this.removeToken(); - } - } - copyExpectedToken(tokenType) { - if (this.tokens[this.tokenIndex].type !== tokenType) { - throw new Error(`Expected token ${tokenType}`); - } - this.copyToken(); - } - copyToken() { - this.resultCode += this.previousWhitespaceAndComments(); - this.appendTokenPrefix(); - this.resultMappings[this.tokenIndex] = this.resultCode.length; - this.resultCode += this.code.slice( - this.tokens[this.tokenIndex].start, - this.tokens[this.tokenIndex].end - ); - this.appendTokenSuffix(); - this.tokenIndex++; - } - copyTokenWithPrefix(prefix2) { - this.resultCode += this.previousWhitespaceAndComments(); - this.appendTokenPrefix(); - this.resultCode += prefix2; - this.resultMappings[this.tokenIndex] = this.resultCode.length; - this.resultCode += this.code.slice( - this.tokens[this.tokenIndex].start, - this.tokens[this.tokenIndex].end - ); - this.appendTokenSuffix(); - this.tokenIndex++; - } - appendTokenPrefix() { - const token2 = this.currentToken(); - if (token2.numNullishCoalesceStarts || token2.isOptionalChainStart) { - token2.isAsyncOperation = isAsyncOperation(this); - } - if (this.disableESTransforms) { - return; - } - if (token2.numNullishCoalesceStarts) { - for (let i4 = 0; i4 < token2.numNullishCoalesceStarts; i4++) { - if (token2.isAsyncOperation) { - this.resultCode += "await "; - this.resultCode += this.helperManager.getHelperName("asyncNullishCoalesce"); - } else { - this.resultCode += this.helperManager.getHelperName("nullishCoalesce"); - } - this.resultCode += "("; - } - } - if (token2.isOptionalChainStart) { - if (token2.isAsyncOperation) { - this.resultCode += "await "; - } - if (this.tokenIndex > 0 && this.tokenAtRelativeIndex(-1).type === TokenType._delete) { - if (token2.isAsyncOperation) { - this.resultCode += this.helperManager.getHelperName("asyncOptionalChainDelete"); - } else { - this.resultCode += this.helperManager.getHelperName("optionalChainDelete"); - } - } else if (token2.isAsyncOperation) { - this.resultCode += this.helperManager.getHelperName("asyncOptionalChain"); - } else { - this.resultCode += this.helperManager.getHelperName("optionalChain"); - } - this.resultCode += "(["; - } - } - appendTokenSuffix() { - const token2 = this.currentToken(); - if (token2.isOptionalChainEnd && !this.disableESTransforms) { - this.resultCode += "])"; - } - if (token2.numNullishCoalesceEnds && !this.disableESTransforms) { - for (let i4 = 0; i4 < token2.numNullishCoalesceEnds; i4++) { - this.resultCode += "))"; - } - } - } - appendCode(code) { - this.resultCode += code; - } - currentToken() { - return this.tokens[this.tokenIndex]; - } - currentTokenCode() { - const token2 = this.currentToken(); - return this.code.slice(token2.start, token2.end); - } - tokenAtRelativeIndex(relativeIndex) { - return this.tokens[this.tokenIndex + relativeIndex]; - } - currentIndex() { - return this.tokenIndex; - } - /** - * Move to the next token. Only suitable in preprocessing steps. When - * generating new code, you should use copyToken or removeToken. - */ - nextToken() { - if (this.tokenIndex === this.tokens.length) { - throw new Error("Unexpectedly reached end of input."); - } - this.tokenIndex++; - } - previousToken() { - this.tokenIndex--; - } - finish() { - if (this.tokenIndex !== this.tokens.length) { - throw new Error("Tried to finish processing tokens before reaching the end."); - } - this.resultCode += this.previousWhitespaceAndComments(); - return { code: this.resultCode, mappings: this.resultMappings }; - } - isAtEnd() { - return this.tokenIndex === this.tokens.length; - } -}; - -// node_modules/sucrase/dist/esm/util/getClassInfo.js -function getClassInfo(rootTransformer, tokens, nameManager, disableESTransforms) { - const snapshot = tokens.snapshot(); - const headerInfo = processClassHeader(tokens); - let constructorInitializerStatements = []; - const instanceInitializerNames = []; - const staticInitializerNames = []; - let constructorInsertPos = null; - const fields = []; - const rangesToRemove = []; - const classContextId = tokens.currentToken().contextId; - if (classContextId == null) { - throw new Error("Expected non-null class context ID on class open-brace."); - } - tokens.nextToken(); - while (!tokens.matchesContextIdAndLabel(TokenType.braceR, classContextId)) { - if (tokens.matchesContextual(ContextualKeyword._constructor) && !tokens.currentToken().isType) { - ({ constructorInitializerStatements, constructorInsertPos } = processConstructor(tokens)); - } else if (tokens.matches1(TokenType.semi)) { - if (!disableESTransforms) { - rangesToRemove.push({ start: tokens.currentIndex(), end: tokens.currentIndex() + 1 }); - } - tokens.nextToken(); - } else if (tokens.currentToken().isType) { - tokens.nextToken(); - } else { - const statementStartIndex = tokens.currentIndex(); - let isStatic = false; - let isESPrivate = false; - let isDeclareOrAbstract = false; - while (isAccessModifier(tokens.currentToken())) { - if (tokens.matches1(TokenType._static)) { - isStatic = true; - } - if (tokens.matches1(TokenType.hash)) { - isESPrivate = true; - } - if (tokens.matches1(TokenType._declare) || tokens.matches1(TokenType._abstract)) { - isDeclareOrAbstract = true; - } - tokens.nextToken(); - } - if (isStatic && tokens.matches1(TokenType.braceL)) { - skipToNextClassElement(tokens, classContextId); - continue; - } - if (isESPrivate) { - skipToNextClassElement(tokens, classContextId); - continue; - } - if (tokens.matchesContextual(ContextualKeyword._constructor) && !tokens.currentToken().isType) { - ({ constructorInitializerStatements, constructorInsertPos } = processConstructor(tokens)); - continue; - } - const nameStartIndex = tokens.currentIndex(); - skipFieldName(tokens); - if (tokens.matches1(TokenType.lessThan) || tokens.matches1(TokenType.parenL)) { - skipToNextClassElement(tokens, classContextId); - continue; - } - while (tokens.currentToken().isType) { - tokens.nextToken(); - } - if (tokens.matches1(TokenType.eq)) { - const equalsIndex = tokens.currentIndex(); - const valueEnd = tokens.currentToken().rhsEndIndex; - if (valueEnd == null) { - throw new Error("Expected rhsEndIndex on class field assignment."); - } - tokens.nextToken(); - while (tokens.currentIndex() < valueEnd) { - rootTransformer.processToken(); - } - let initializerName; - if (isStatic) { - initializerName = nameManager.claimFreeName("__initStatic"); - staticInitializerNames.push(initializerName); - } else { - initializerName = nameManager.claimFreeName("__init"); - instanceInitializerNames.push(initializerName); - } - fields.push({ - initializerName, - equalsIndex, - start: nameStartIndex, - end: tokens.currentIndex() - }); - } else if (!disableESTransforms || isDeclareOrAbstract) { - rangesToRemove.push({ start: statementStartIndex, end: tokens.currentIndex() }); - } - } - } - tokens.restoreToSnapshot(snapshot); - if (disableESTransforms) { - return { - headerInfo, - constructorInitializerStatements, - instanceInitializerNames: [], - staticInitializerNames: [], - constructorInsertPos, - fields: [], - rangesToRemove - }; - } else { - return { - headerInfo, - constructorInitializerStatements, - instanceInitializerNames, - staticInitializerNames, - constructorInsertPos, - fields, - rangesToRemove - }; - } -} -function skipToNextClassElement(tokens, classContextId) { - tokens.nextToken(); - while (tokens.currentToken().contextId !== classContextId) { - tokens.nextToken(); - } - while (isAccessModifier(tokens.tokenAtRelativeIndex(-1))) { - tokens.previousToken(); - } -} -function processClassHeader(tokens) { - const classToken = tokens.currentToken(); - const contextId = classToken.contextId; - if (contextId == null) { - throw new Error("Expected context ID on class token."); - } - const isExpression = classToken.isExpression; - if (isExpression == null) { - throw new Error("Expected isExpression on class token."); - } - let className = null; - let hasSuperclass = false; - tokens.nextToken(); - if (tokens.matches1(TokenType.name)) { - className = tokens.identifierName(); - } - while (!tokens.matchesContextIdAndLabel(TokenType.braceL, contextId)) { - if (tokens.matches1(TokenType._extends) && !tokens.currentToken().isType) { - hasSuperclass = true; - } - tokens.nextToken(); - } - return { isExpression, className, hasSuperclass }; -} -function processConstructor(tokens) { - const constructorInitializerStatements = []; - tokens.nextToken(); - const constructorContextId = tokens.currentToken().contextId; - if (constructorContextId == null) { - throw new Error("Expected context ID on open-paren starting constructor params."); - } - while (!tokens.matchesContextIdAndLabel(TokenType.parenR, constructorContextId)) { - if (tokens.currentToken().contextId === constructorContextId) { - tokens.nextToken(); - if (isAccessModifier(tokens.currentToken())) { - tokens.nextToken(); - while (isAccessModifier(tokens.currentToken())) { - tokens.nextToken(); - } - const token2 = tokens.currentToken(); - if (token2.type !== TokenType.name) { - throw new Error("Expected identifier after access modifiers in constructor arg."); - } - const name = tokens.identifierNameForToken(token2); - constructorInitializerStatements.push(`this.${name} = ${name}`); - } - } else { - tokens.nextToken(); - } - } - tokens.nextToken(); - while (tokens.currentToken().isType) { - tokens.nextToken(); - } - let constructorInsertPos = tokens.currentIndex(); - let foundSuperCall = false; - while (!tokens.matchesContextIdAndLabel(TokenType.braceR, constructorContextId)) { - if (!foundSuperCall && tokens.matches2(TokenType._super, TokenType.parenL)) { - tokens.nextToken(); - const superCallContextId = tokens.currentToken().contextId; - if (superCallContextId == null) { - throw new Error("Expected a context ID on the super call"); - } - while (!tokens.matchesContextIdAndLabel(TokenType.parenR, superCallContextId)) { - tokens.nextToken(); - } - constructorInsertPos = tokens.currentIndex(); - foundSuperCall = true; - } - tokens.nextToken(); - } - tokens.nextToken(); - return { constructorInitializerStatements, constructorInsertPos }; -} -function isAccessModifier(token2) { - return [ - TokenType._async, - TokenType._get, - TokenType._set, - TokenType.plus, - TokenType.minus, - TokenType._readonly, - TokenType._static, - TokenType._public, - TokenType._private, - TokenType._protected, - TokenType._override, - TokenType._abstract, - TokenType.star, - TokenType._declare, - TokenType.hash - ].includes(token2.type); -} -function skipFieldName(tokens) { - if (tokens.matches1(TokenType.bracketL)) { - const startToken = tokens.currentToken(); - const classContextId = startToken.contextId; - if (classContextId == null) { - throw new Error("Expected class context ID on computed name open bracket."); - } - while (!tokens.matchesContextIdAndLabel(TokenType.bracketR, classContextId)) { - tokens.nextToken(); - } - tokens.nextToken(); - } else { - tokens.nextToken(); - } -} - -// node_modules/sucrase/dist/esm/util/elideImportEquals.js -function elideImportEquals(tokens) { - tokens.removeInitialToken(); - tokens.removeToken(); - tokens.removeToken(); - tokens.removeToken(); - if (tokens.matches1(TokenType.parenL)) { - tokens.removeToken(); - tokens.removeToken(); - tokens.removeToken(); - } else { - while (tokens.matches1(TokenType.dot)) { - tokens.removeToken(); - tokens.removeToken(); - } - } -} - -// node_modules/sucrase/dist/esm/util/getDeclarationInfo.js -var EMPTY_DECLARATION_INFO = { - typeDeclarations: /* @__PURE__ */ new Set(), - valueDeclarations: /* @__PURE__ */ new Set() -}; -function getDeclarationInfo(tokens) { - const typeDeclarations = /* @__PURE__ */ new Set(); - const valueDeclarations = /* @__PURE__ */ new Set(); - for (let i4 = 0; i4 < tokens.tokens.length; i4++) { - const token2 = tokens.tokens[i4]; - if (token2.type === TokenType.name && isTopLevelDeclaration(token2)) { - if (token2.isType) { - typeDeclarations.add(tokens.identifierNameForToken(token2)); - } else { - valueDeclarations.add(tokens.identifierNameForToken(token2)); - } - } - } - return { typeDeclarations, valueDeclarations }; -} - -// node_modules/sucrase/dist/esm/util/isExportFrom.js -function isExportFrom(tokens) { - let closeBraceIndex = tokens.currentIndex(); - while (!tokens.matches1AtIndex(closeBraceIndex, TokenType.braceR)) { - closeBraceIndex++; - } - return tokens.matchesContextualAtIndex(closeBraceIndex + 1, ContextualKeyword._from) && tokens.matches1AtIndex(closeBraceIndex + 2, TokenType.string); -} - -// node_modules/sucrase/dist/esm/util/removeMaybeImportAttributes.js -function removeMaybeImportAttributes(tokens) { - if (tokens.matches2(TokenType._with, TokenType.braceL) || tokens.matches2(TokenType.name, TokenType.braceL) && tokens.matchesContextual(ContextualKeyword._assert)) { - tokens.removeToken(); - tokens.removeToken(); - tokens.removeBalancedCode(); - tokens.removeToken(); - } -} - -// node_modules/sucrase/dist/esm/util/shouldElideDefaultExport.js -function shouldElideDefaultExport(isTypeScriptTransformEnabled, keepUnusedImports, tokens, declarationInfo) { - if (!isTypeScriptTransformEnabled || keepUnusedImports) { - return false; - } - const exportToken = tokens.currentToken(); - if (exportToken.rhsEndIndex == null) { - throw new Error("Expected non-null rhsEndIndex on export token."); - } - const numTokens = exportToken.rhsEndIndex - tokens.currentIndex(); - if (numTokens !== 3 && !(numTokens === 4 && tokens.matches1AtIndex(exportToken.rhsEndIndex - 1, TokenType.semi))) { - return false; - } - const identifierToken = tokens.tokenAtRelativeIndex(2); - if (identifierToken.type !== TokenType.name) { - return false; - } - const exportedName = tokens.identifierNameForToken(identifierToken); - return declarationInfo.typeDeclarations.has(exportedName) && !declarationInfo.valueDeclarations.has(exportedName); -} - -// node_modules/sucrase/dist/esm/transformers/CJSImportTransformer.js -var CJSImportTransformer = class extends Transformer { - __init() { - this.hadExport = false; - } - __init2() { - this.hadNamedExport = false; - } - __init3() { - this.hadDefaultExport = false; - } - constructor(rootTransformer, tokens, importProcessor, nameManager, helperManager, reactHotLoaderTransformer, enableLegacyBabel5ModuleInterop, enableLegacyTypeScriptModuleInterop, isTypeScriptTransformEnabled, isFlowTransformEnabled, preserveDynamicImport, keepUnusedImports) { - super(); - this.rootTransformer = rootTransformer; - this.tokens = tokens; - this.importProcessor = importProcessor; - this.nameManager = nameManager; - this.helperManager = helperManager; - this.reactHotLoaderTransformer = reactHotLoaderTransformer; - this.enableLegacyBabel5ModuleInterop = enableLegacyBabel5ModuleInterop; - this.enableLegacyTypeScriptModuleInterop = enableLegacyTypeScriptModuleInterop; - this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled; - this.isFlowTransformEnabled = isFlowTransformEnabled; - this.preserveDynamicImport = preserveDynamicImport; - this.keepUnusedImports = keepUnusedImports; - CJSImportTransformer.prototype.__init.call(this); - CJSImportTransformer.prototype.__init2.call(this); - CJSImportTransformer.prototype.__init3.call(this); - ; - this.declarationInfo = isTypeScriptTransformEnabled ? getDeclarationInfo(tokens) : EMPTY_DECLARATION_INFO; - } - getPrefixCode() { - let prefix2 = ""; - if (this.hadExport) { - prefix2 += 'Object.defineProperty(exports, "__esModule", {value: true});'; - } - return prefix2; - } - getSuffixCode() { - if (this.enableLegacyBabel5ModuleInterop && this.hadDefaultExport && !this.hadNamedExport) { - return "\nmodule.exports = exports.default;\n"; - } - return ""; - } - process() { - if (this.tokens.matches3(TokenType._import, TokenType.name, TokenType.eq)) { - return this.processImportEquals(); - } - if (this.tokens.matches1(TokenType._import)) { - this.processImport(); - return true; - } - if (this.tokens.matches2(TokenType._export, TokenType.eq)) { - this.tokens.replaceToken("module.exports"); - return true; - } - if (this.tokens.matches1(TokenType._export) && !this.tokens.currentToken().isType) { - this.hadExport = true; - return this.processExport(); - } - if (this.tokens.matches2(TokenType.name, TokenType.postIncDec)) { - if (this.processPostIncDec()) { - return true; - } - } - if (this.tokens.matches1(TokenType.name) || this.tokens.matches1(TokenType.jsxName)) { - return this.processIdentifier(); - } - if (this.tokens.matches1(TokenType.eq)) { - return this.processAssignment(); - } - if (this.tokens.matches1(TokenType.assign)) { - return this.processComplexAssignment(); - } - if (this.tokens.matches1(TokenType.preIncDec)) { - return this.processPreIncDec(); - } - return false; - } - processImportEquals() { - const importName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1); - if (this.importProcessor.shouldAutomaticallyElideImportedName(importName)) { - elideImportEquals(this.tokens); - } else { - this.tokens.replaceToken("const"); - } - return true; - } - /** - * Transform this: - * import foo, {bar} from 'baz'; - * into - * var _baz = require('baz'); var _baz2 = _interopRequireDefault(_baz); - * - * The import code was already generated in the import preprocessing step, so - * we just need to look it up. - */ - processImport() { - if (this.tokens.matches2(TokenType._import, TokenType.parenL)) { - if (this.preserveDynamicImport) { - this.tokens.copyToken(); - return; - } - const requireWrapper = this.enableLegacyTypeScriptModuleInterop ? "" : `${this.helperManager.getHelperName("interopRequireWildcard")}(`; - this.tokens.replaceToken(`Promise.resolve().then(() => ${requireWrapper}require`); - const contextId = this.tokens.currentToken().contextId; - if (contextId == null) { - throw new Error("Expected context ID on dynamic import invocation."); - } - this.tokens.copyToken(); - while (!this.tokens.matchesContextIdAndLabel(TokenType.parenR, contextId)) { - this.rootTransformer.processToken(); - } - this.tokens.replaceToken(requireWrapper ? ")))" : "))"); - return; - } - const shouldElideImport = this.removeImportAndDetectIfShouldElide(); - if (shouldElideImport) { - this.tokens.removeToken(); - } else { - const path = this.tokens.stringValue(); - this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path)); - this.tokens.appendCode(this.importProcessor.claimImportCode(path)); - } - removeMaybeImportAttributes(this.tokens); - if (this.tokens.matches1(TokenType.semi)) { - this.tokens.removeToken(); - } - } - /** - * Erase this import (since any CJS output would be completely different), and - * return true if this import is should be elided due to being a type-only - * import. Such imports will not be emitted at all to avoid side effects. - * - * Import elision only happens with the TypeScript or Flow transforms enabled. - * - * TODO: This function has some awkward overlap with - * CJSImportProcessor.pruneTypeOnlyImports , and the two should be unified. - * That function handles TypeScript implicit import name elision, and removes - * an import if all typical imported names (without `type`) are removed due - * to being type-only imports. This function handles Flow import removal and - * properly distinguishes `import 'foo'` from `import {} from 'foo'` for TS - * purposes. - * - * The position should end at the import string. - */ - removeImportAndDetectIfShouldElide() { - this.tokens.removeInitialToken(); - if (this.tokens.matchesContextual(ContextualKeyword._type) && !this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, TokenType.comma) && !this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._from)) { - this.removeRemainingImport(); - return true; - } - if (this.tokens.matches1(TokenType.name) || this.tokens.matches1(TokenType.star)) { - this.removeRemainingImport(); - return false; - } - if (this.tokens.matches1(TokenType.string)) { - return false; - } - let foundNonTypeImport = false; - let foundAnyNamedImport = false; - while (!this.tokens.matches1(TokenType.string)) { - if (!foundNonTypeImport && this.tokens.matches1(TokenType.braceL) || this.tokens.matches1(TokenType.comma)) { - this.tokens.removeToken(); - if (!this.tokens.matches1(TokenType.braceR)) { - foundAnyNamedImport = true; - } - if (this.tokens.matches2(TokenType.name, TokenType.comma) || this.tokens.matches2(TokenType.name, TokenType.braceR) || this.tokens.matches4(TokenType.name, TokenType.name, TokenType.name, TokenType.comma) || this.tokens.matches4(TokenType.name, TokenType.name, TokenType.name, TokenType.braceR)) { - foundNonTypeImport = true; - } - } - this.tokens.removeToken(); - } - if (this.keepUnusedImports) { - return false; - } - if (this.isTypeScriptTransformEnabled) { - return !foundNonTypeImport; - } else if (this.isFlowTransformEnabled) { - return foundAnyNamedImport && !foundNonTypeImport; - } else { - return false; - } - } - removeRemainingImport() { - while (!this.tokens.matches1(TokenType.string)) { - this.tokens.removeToken(); - } - } - processIdentifier() { - const token2 = this.tokens.currentToken(); - if (token2.shadowsGlobal) { - return false; - } - if (token2.identifierRole === IdentifierRole.ObjectShorthand) { - return this.processObjectShorthand(); - } - if (token2.identifierRole !== IdentifierRole.Access) { - return false; - } - const replacement = this.importProcessor.getIdentifierReplacement( - this.tokens.identifierNameForToken(token2) - ); - if (!replacement) { - return false; - } - let possibleOpenParenIndex = this.tokens.currentIndex() + 1; - while (possibleOpenParenIndex < this.tokens.tokens.length && this.tokens.tokens[possibleOpenParenIndex].type === TokenType.parenR) { - possibleOpenParenIndex++; - } - if (this.tokens.tokens[possibleOpenParenIndex].type === TokenType.parenL) { - if (this.tokens.tokenAtRelativeIndex(1).type === TokenType.parenL && this.tokens.tokenAtRelativeIndex(-1).type !== TokenType._new) { - this.tokens.replaceToken(`${replacement}.call(void 0, `); - this.tokens.removeToken(); - this.rootTransformer.processBalancedCode(); - this.tokens.copyExpectedToken(TokenType.parenR); - } else { - this.tokens.replaceToken(`(0, ${replacement})`); - } - } else { - this.tokens.replaceToken(replacement); - } - return true; - } - processObjectShorthand() { - const identifier2 = this.tokens.identifierName(); - const replacement = this.importProcessor.getIdentifierReplacement(identifier2); - if (!replacement) { - return false; - } - this.tokens.replaceToken(`${identifier2}: ${replacement}`); - return true; - } - processExport() { - if (this.tokens.matches2(TokenType._export, TokenType._enum) || this.tokens.matches3(TokenType._export, TokenType._const, TokenType._enum)) { - this.hadNamedExport = true; - return false; - } - if (this.tokens.matches2(TokenType._export, TokenType._default)) { - if (this.tokens.matches3(TokenType._export, TokenType._default, TokenType._enum)) { - this.hadDefaultExport = true; - return false; - } - this.processExportDefault(); - return true; - } else if (this.tokens.matches2(TokenType._export, TokenType.braceL)) { - this.processExportBindings(); - return true; - } else if (this.tokens.matches2(TokenType._export, TokenType.name) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._type)) { - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - if (this.tokens.matches1(TokenType.braceL)) { - while (!this.tokens.matches1(TokenType.braceR)) { - this.tokens.removeToken(); - } - this.tokens.removeToken(); - } else { - this.tokens.removeToken(); - if (this.tokens.matches1(TokenType._as)) { - this.tokens.removeToken(); - this.tokens.removeToken(); - } - } - if (this.tokens.matchesContextual(ContextualKeyword._from) && this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, TokenType.string)) { - this.tokens.removeToken(); - this.tokens.removeToken(); - removeMaybeImportAttributes(this.tokens); - } - return true; - } - this.hadNamedExport = true; - if (this.tokens.matches2(TokenType._export, TokenType._var) || this.tokens.matches2(TokenType._export, TokenType._let) || this.tokens.matches2(TokenType._export, TokenType._const)) { - this.processExportVar(); - return true; - } else if (this.tokens.matches2(TokenType._export, TokenType._function) || // export async function - this.tokens.matches3(TokenType._export, TokenType.name, TokenType._function)) { - this.processExportFunction(); - return true; - } else if (this.tokens.matches2(TokenType._export, TokenType._class) || this.tokens.matches3(TokenType._export, TokenType._abstract, TokenType._class) || this.tokens.matches2(TokenType._export, TokenType.at)) { - this.processExportClass(); - return true; - } else if (this.tokens.matches2(TokenType._export, TokenType.star)) { - this.processExportStar(); - return true; - } else { - throw new Error("Unrecognized export syntax."); - } - } - processAssignment() { - const index2 = this.tokens.currentIndex(); - const identifierToken = this.tokens.tokens[index2 - 1]; - if (identifierToken.isType || identifierToken.type !== TokenType.name) { - return false; - } - if (identifierToken.shadowsGlobal) { - return false; - } - if (index2 >= 2 && this.tokens.matches1AtIndex(index2 - 2, TokenType.dot)) { - return false; - } - if (index2 >= 2 && [TokenType._var, TokenType._let, TokenType._const].includes(this.tokens.tokens[index2 - 2].type)) { - return false; - } - const assignmentSnippet = this.importProcessor.resolveExportBinding( - this.tokens.identifierNameForToken(identifierToken) - ); - if (!assignmentSnippet) { - return false; - } - this.tokens.copyToken(); - this.tokens.appendCode(` ${assignmentSnippet} =`); - return true; - } - /** - * Process something like `a += 3`, where `a` might be an exported value. - */ - processComplexAssignment() { - const index2 = this.tokens.currentIndex(); - const identifierToken = this.tokens.tokens[index2 - 1]; - if (identifierToken.type !== TokenType.name) { - return false; - } - if (identifierToken.shadowsGlobal) { - return false; - } - if (index2 >= 2 && this.tokens.matches1AtIndex(index2 - 2, TokenType.dot)) { - return false; - } - const assignmentSnippet = this.importProcessor.resolveExportBinding( - this.tokens.identifierNameForToken(identifierToken) - ); - if (!assignmentSnippet) { - return false; - } - this.tokens.appendCode(` = ${assignmentSnippet}`); - this.tokens.copyToken(); - return true; - } - /** - * Process something like `++a`, where `a` might be an exported value. - */ - processPreIncDec() { - const index2 = this.tokens.currentIndex(); - const identifierToken = this.tokens.tokens[index2 + 1]; - if (identifierToken.type !== TokenType.name) { - return false; - } - if (identifierToken.shadowsGlobal) { - return false; - } - if (index2 + 2 < this.tokens.tokens.length && (this.tokens.matches1AtIndex(index2 + 2, TokenType.dot) || this.tokens.matches1AtIndex(index2 + 2, TokenType.bracketL) || this.tokens.matches1AtIndex(index2 + 2, TokenType.parenL))) { - return false; - } - const identifierName = this.tokens.identifierNameForToken(identifierToken); - const assignmentSnippet = this.importProcessor.resolveExportBinding(identifierName); - if (!assignmentSnippet) { - return false; - } - this.tokens.appendCode(`${assignmentSnippet} = `); - this.tokens.copyToken(); - return true; - } - /** - * Process something like `a++`, where `a` might be an exported value. - * This starts at the `a`, not at the `++`. - */ - processPostIncDec() { - const index2 = this.tokens.currentIndex(); - const identifierToken = this.tokens.tokens[index2]; - const operatorToken = this.tokens.tokens[index2 + 1]; - if (identifierToken.type !== TokenType.name) { - return false; - } - if (identifierToken.shadowsGlobal) { - return false; - } - if (index2 >= 1 && this.tokens.matches1AtIndex(index2 - 1, TokenType.dot)) { - return false; - } - const identifierName = this.tokens.identifierNameForToken(identifierToken); - const assignmentSnippet = this.importProcessor.resolveExportBinding(identifierName); - if (!assignmentSnippet) { - return false; - } - const operatorCode = this.tokens.rawCodeForToken(operatorToken); - const base = this.importProcessor.getIdentifierReplacement(identifierName) || identifierName; - if (operatorCode === "++") { - this.tokens.replaceToken(`(${base} = ${assignmentSnippet} = ${base} + 1, ${base} - 1)`); - } else if (operatorCode === "--") { - this.tokens.replaceToken(`(${base} = ${assignmentSnippet} = ${base} - 1, ${base} + 1)`); - } else { - throw new Error(`Unexpected operator: ${operatorCode}`); - } - this.tokens.removeToken(); - return true; - } - processExportDefault() { - let exportedRuntimeValue = true; - if (this.tokens.matches4(TokenType._export, TokenType._default, TokenType._function, TokenType.name) || // export default async function - this.tokens.matches5(TokenType._export, TokenType._default, TokenType.name, TokenType._function, TokenType.name) && this.tokens.matchesContextualAtIndex( - this.tokens.currentIndex() + 2, - ContextualKeyword._async - )) { - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - const name = this.processNamedFunction(); - this.tokens.appendCode(` exports.default = ${name};`); - } else if (this.tokens.matches4(TokenType._export, TokenType._default, TokenType._class, TokenType.name) || this.tokens.matches5(TokenType._export, TokenType._default, TokenType._abstract, TokenType._class, TokenType.name) || this.tokens.matches3(TokenType._export, TokenType._default, TokenType.at)) { - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - this.copyDecorators(); - if (this.tokens.matches1(TokenType._abstract)) { - this.tokens.removeToken(); - } - const name = this.rootTransformer.processNamedClass(); - this.tokens.appendCode(` exports.default = ${name};`); - } else if (shouldElideDefaultExport( - this.isTypeScriptTransformEnabled, - this.keepUnusedImports, - this.tokens, - this.declarationInfo - )) { - exportedRuntimeValue = false; - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - this.tokens.removeToken(); - } else if (this.reactHotLoaderTransformer) { - const defaultVarName = this.nameManager.claimFreeName("_default"); - this.tokens.replaceToken(`let ${defaultVarName}; exports.`); - this.tokens.copyToken(); - this.tokens.appendCode(` = ${defaultVarName} =`); - this.reactHotLoaderTransformer.setExtractedDefaultExportName(defaultVarName); - } else { - this.tokens.replaceToken("exports."); - this.tokens.copyToken(); - this.tokens.appendCode(" ="); - } - if (exportedRuntimeValue) { - this.hadDefaultExport = true; - } - } - copyDecorators() { - while (this.tokens.matches1(TokenType.at)) { - this.tokens.copyToken(); - if (this.tokens.matches1(TokenType.parenL)) { - this.tokens.copyExpectedToken(TokenType.parenL); - this.rootTransformer.processBalancedCode(); - this.tokens.copyExpectedToken(TokenType.parenR); - } else { - this.tokens.copyExpectedToken(TokenType.name); - while (this.tokens.matches1(TokenType.dot)) { - this.tokens.copyExpectedToken(TokenType.dot); - this.tokens.copyExpectedToken(TokenType.name); - } - if (this.tokens.matches1(TokenType.parenL)) { - this.tokens.copyExpectedToken(TokenType.parenL); - this.rootTransformer.processBalancedCode(); - this.tokens.copyExpectedToken(TokenType.parenR); - } - } - } - } - /** - * Transform a declaration like `export var`, `export let`, or `export const`. - */ - processExportVar() { - if (this.isSimpleExportVar()) { - this.processSimpleExportVar(); - } else { - this.processComplexExportVar(); - } - } - /** - * Determine if the export is of the form: - * export var/let/const [varName] = [expr]; - * In other words, determine if function name inference might apply. - */ - isSimpleExportVar() { - let tokenIndex = this.tokens.currentIndex(); - tokenIndex++; - tokenIndex++; - if (!this.tokens.matches1AtIndex(tokenIndex, TokenType.name)) { - return false; - } - tokenIndex++; - while (tokenIndex < this.tokens.tokens.length && this.tokens.tokens[tokenIndex].isType) { - tokenIndex++; - } - if (!this.tokens.matches1AtIndex(tokenIndex, TokenType.eq)) { - return false; - } - return true; - } - /** - * Transform an `export var` declaration initializing a single variable. - * - * For example, this: - * export const f = () => {}; - * becomes this: - * const f = () => {}; exports.f = f; - * - * The variable is unused (e.g. exports.f has the true value of the export). - * We need to produce an assignment of this form so that the function will - * have an inferred name of "f", which wouldn't happen in the more general - * case below. - */ - processSimpleExportVar() { - this.tokens.removeInitialToken(); - this.tokens.copyToken(); - const varName = this.tokens.identifierName(); - while (!this.tokens.matches1(TokenType.eq)) { - this.rootTransformer.processToken(); - } - const endIndex = this.tokens.currentToken().rhsEndIndex; - if (endIndex == null) { - throw new Error("Expected = token with an end index."); - } - while (this.tokens.currentIndex() < endIndex) { - this.rootTransformer.processToken(); - } - this.tokens.appendCode(`; exports.${varName} = ${varName}`); - } - /** - * Transform normal declaration exports, including handling destructuring. - * For example, this: - * export const {x: [a = 2, b], c} = d; - * becomes this: - * ({x: [exports.a = 2, exports.b], c: exports.c} = d;) - */ - processComplexExportVar() { - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - const needsParens = this.tokens.matches1(TokenType.braceL); - if (needsParens) { - this.tokens.appendCode("("); - } - let depth = 0; - while (true) { - if (this.tokens.matches1(TokenType.braceL) || this.tokens.matches1(TokenType.dollarBraceL) || this.tokens.matches1(TokenType.bracketL)) { - depth++; - this.tokens.copyToken(); - } else if (this.tokens.matches1(TokenType.braceR) || this.tokens.matches1(TokenType.bracketR)) { - depth--; - this.tokens.copyToken(); - } else if (depth === 0 && !this.tokens.matches1(TokenType.name) && !this.tokens.currentToken().isType) { - break; - } else if (this.tokens.matches1(TokenType.eq)) { - const endIndex = this.tokens.currentToken().rhsEndIndex; - if (endIndex == null) { - throw new Error("Expected = token with an end index."); - } - while (this.tokens.currentIndex() < endIndex) { - this.rootTransformer.processToken(); - } - } else { - const token2 = this.tokens.currentToken(); - if (isDeclaration(token2)) { - const name = this.tokens.identifierName(); - let replacement = this.importProcessor.getIdentifierReplacement(name); - if (replacement === null) { - throw new Error(`Expected a replacement for ${name} in \`export var\` syntax.`); - } - if (isObjectShorthandDeclaration(token2)) { - replacement = `${name}: ${replacement}`; - } - this.tokens.replaceToken(replacement); - } else { - this.rootTransformer.processToken(); - } - } - } - if (needsParens) { - const endIndex = this.tokens.currentToken().rhsEndIndex; - if (endIndex == null) { - throw new Error("Expected = token with an end index."); - } - while (this.tokens.currentIndex() < endIndex) { - this.rootTransformer.processToken(); - } - this.tokens.appendCode(")"); - } - } - /** - * Transform this: - * export function foo() {} - * into this: - * function foo() {} exports.foo = foo; - */ - processExportFunction() { - this.tokens.replaceToken(""); - const name = this.processNamedFunction(); - this.tokens.appendCode(` exports.${name} = ${name};`); - } - /** - * Skip past a function with a name and return that name. - */ - processNamedFunction() { - if (this.tokens.matches1(TokenType._function)) { - this.tokens.copyToken(); - } else if (this.tokens.matches2(TokenType.name, TokenType._function)) { - if (!this.tokens.matchesContextual(ContextualKeyword._async)) { - throw new Error("Expected async keyword in function export."); - } - this.tokens.copyToken(); - this.tokens.copyToken(); - } - if (this.tokens.matches1(TokenType.star)) { - this.tokens.copyToken(); - } - if (!this.tokens.matches1(TokenType.name)) { - throw new Error("Expected identifier for exported function name."); - } - const name = this.tokens.identifierName(); - this.tokens.copyToken(); - if (this.tokens.currentToken().isType) { - this.tokens.removeInitialToken(); - while (this.tokens.currentToken().isType) { - this.tokens.removeToken(); - } - } - this.tokens.copyExpectedToken(TokenType.parenL); - this.rootTransformer.processBalancedCode(); - this.tokens.copyExpectedToken(TokenType.parenR); - this.rootTransformer.processPossibleTypeRange(); - this.tokens.copyExpectedToken(TokenType.braceL); - this.rootTransformer.processBalancedCode(); - this.tokens.copyExpectedToken(TokenType.braceR); - return name; - } - /** - * Transform this: - * export class A {} - * into this: - * class A {} exports.A = A; - */ - processExportClass() { - this.tokens.removeInitialToken(); - this.copyDecorators(); - if (this.tokens.matches1(TokenType._abstract)) { - this.tokens.removeToken(); - } - const name = this.rootTransformer.processNamedClass(); - this.tokens.appendCode(` exports.${name} = ${name};`); - } - /** - * Transform this: - * export {a, b as c}; - * into this: - * exports.a = a; exports.c = b; - * - * OR - * - * Transform this: - * export {a, b as c} from './foo'; - * into the pre-generated Object.defineProperty code from the ImportProcessor. - * - * For the first case, if the TypeScript transform is enabled, we need to skip - * exports that are only defined as types. - */ - processExportBindings() { - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - const isReExport = isExportFrom(this.tokens); - const exportStatements = []; - while (true) { - if (this.tokens.matches1(TokenType.braceR)) { - this.tokens.removeToken(); - break; - } - const specifierInfo = getImportExportSpecifierInfo(this.tokens); - while (this.tokens.currentIndex() < specifierInfo.endIndex) { - this.tokens.removeToken(); - } - const shouldRemoveExport = specifierInfo.isType || !isReExport && this.shouldElideExportedIdentifier(specifierInfo.leftName); - if (!shouldRemoveExport) { - const exportedName = specifierInfo.rightName; - if (exportedName === "default") { - this.hadDefaultExport = true; - } else { - this.hadNamedExport = true; - } - const localName = specifierInfo.leftName; - const newLocalName = this.importProcessor.getIdentifierReplacement(localName); - exportStatements.push(`exports.${exportedName} = ${newLocalName || localName};`); - } - if (this.tokens.matches1(TokenType.braceR)) { - this.tokens.removeToken(); - break; - } - if (this.tokens.matches2(TokenType.comma, TokenType.braceR)) { - this.tokens.removeToken(); - this.tokens.removeToken(); - break; - } else if (this.tokens.matches1(TokenType.comma)) { - this.tokens.removeToken(); - } else { - throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.currentToken())}`); - } - } - if (this.tokens.matchesContextual(ContextualKeyword._from)) { - this.tokens.removeToken(); - const path = this.tokens.stringValue(); - this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path)); - removeMaybeImportAttributes(this.tokens); - } else { - this.tokens.appendCode(exportStatements.join(" ")); - } - if (this.tokens.matches1(TokenType.semi)) { - this.tokens.removeToken(); - } - } - processExportStar() { - this.tokens.removeInitialToken(); - while (!this.tokens.matches1(TokenType.string)) { - this.tokens.removeToken(); - } - const path = this.tokens.stringValue(); - this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path)); - removeMaybeImportAttributes(this.tokens); - if (this.tokens.matches1(TokenType.semi)) { - this.tokens.removeToken(); - } - } - shouldElideExportedIdentifier(name) { - return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && !this.declarationInfo.valueDeclarations.has(name); - } -}; - -// node_modules/sucrase/dist/esm/transformers/ESMImportTransformer.js -var ESMImportTransformer = class extends Transformer { - constructor(tokens, nameManager, helperManager, reactHotLoaderTransformer, isTypeScriptTransformEnabled, isFlowTransformEnabled, keepUnusedImports, options2) { - super(); - this.tokens = tokens; - this.nameManager = nameManager; - this.helperManager = helperManager; - this.reactHotLoaderTransformer = reactHotLoaderTransformer; - this.isTypeScriptTransformEnabled = isTypeScriptTransformEnabled; - this.isFlowTransformEnabled = isFlowTransformEnabled; - this.keepUnusedImports = keepUnusedImports; - ; - this.nonTypeIdentifiers = isTypeScriptTransformEnabled && !keepUnusedImports ? getNonTypeIdentifiers(tokens, options2) : /* @__PURE__ */ new Set(); - this.declarationInfo = isTypeScriptTransformEnabled && !keepUnusedImports ? getDeclarationInfo(tokens) : EMPTY_DECLARATION_INFO; - this.injectCreateRequireForImportRequire = Boolean(options2.injectCreateRequireForImportRequire); - } - process() { - if (this.tokens.matches3(TokenType._import, TokenType.name, TokenType.eq)) { - return this.processImportEquals(); - } - if (this.tokens.matches4(TokenType._import, TokenType.name, TokenType.name, TokenType.eq) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._type)) { - this.tokens.removeInitialToken(); - for (let i4 = 0; i4 < 7; i4++) { - this.tokens.removeToken(); - } - return true; - } - if (this.tokens.matches2(TokenType._export, TokenType.eq)) { - this.tokens.replaceToken("module.exports"); - return true; - } - if (this.tokens.matches5(TokenType._export, TokenType._import, TokenType.name, TokenType.name, TokenType.eq) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 2, ContextualKeyword._type)) { - this.tokens.removeInitialToken(); - for (let i4 = 0; i4 < 8; i4++) { - this.tokens.removeToken(); - } - return true; - } - if (this.tokens.matches1(TokenType._import)) { - return this.processImport(); - } - if (this.tokens.matches2(TokenType._export, TokenType._default)) { - return this.processExportDefault(); - } - if (this.tokens.matches2(TokenType._export, TokenType.braceL)) { - return this.processNamedExports(); - } - if (this.tokens.matches2(TokenType._export, TokenType.name) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._type)) { - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - if (this.tokens.matches1(TokenType.braceL)) { - while (!this.tokens.matches1(TokenType.braceR)) { - this.tokens.removeToken(); - } - this.tokens.removeToken(); - } else { - this.tokens.removeToken(); - if (this.tokens.matches1(TokenType._as)) { - this.tokens.removeToken(); - this.tokens.removeToken(); - } - } - if (this.tokens.matchesContextual(ContextualKeyword._from) && this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, TokenType.string)) { - this.tokens.removeToken(); - this.tokens.removeToken(); - removeMaybeImportAttributes(this.tokens); - } - return true; - } - return false; - } - processImportEquals() { - const importName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1); - if (this.shouldAutomaticallyElideImportedName(importName)) { - elideImportEquals(this.tokens); - } else if (this.injectCreateRequireForImportRequire) { - this.tokens.replaceToken("const"); - this.tokens.copyToken(); - this.tokens.copyToken(); - this.tokens.replaceToken(this.helperManager.getHelperName("require")); - } else { - this.tokens.replaceToken("const"); - } - return true; - } - processImport() { - if (this.tokens.matches2(TokenType._import, TokenType.parenL)) { - return false; - } - const snapshot = this.tokens.snapshot(); - const allImportsRemoved = this.removeImportTypeBindings(); - if (allImportsRemoved) { - this.tokens.restoreToSnapshot(snapshot); - while (!this.tokens.matches1(TokenType.string)) { - this.tokens.removeToken(); - } - this.tokens.removeToken(); - removeMaybeImportAttributes(this.tokens); - if (this.tokens.matches1(TokenType.semi)) { - this.tokens.removeToken(); - } - } - return true; - } - /** - * Remove type bindings from this import, leaving the rest of the import intact. - * - * Return true if this import was ONLY types, and thus is eligible for removal. This will bail out - * of the replacement operation, so we can return early here. - */ - removeImportTypeBindings() { - this.tokens.copyExpectedToken(TokenType._import); - if (this.tokens.matchesContextual(ContextualKeyword._type) && !this.tokens.matches1AtIndex(this.tokens.currentIndex() + 1, TokenType.comma) && !this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 1, ContextualKeyword._from)) { - return true; - } - if (this.tokens.matches1(TokenType.string)) { - this.tokens.copyToken(); - return false; - } - if (this.tokens.matchesContextual(ContextualKeyword._module) && this.tokens.matchesContextualAtIndex(this.tokens.currentIndex() + 2, ContextualKeyword._from)) { - this.tokens.copyToken(); - } - let foundNonTypeImport = false; - let foundAnyNamedImport = false; - let needsComma = false; - if (this.tokens.matches1(TokenType.name)) { - if (this.shouldAutomaticallyElideImportedName(this.tokens.identifierName())) { - this.tokens.removeToken(); - if (this.tokens.matches1(TokenType.comma)) { - this.tokens.removeToken(); - } - } else { - foundNonTypeImport = true; - this.tokens.copyToken(); - if (this.tokens.matches1(TokenType.comma)) { - needsComma = true; - this.tokens.removeToken(); - } - } - } - if (this.tokens.matches1(TokenType.star)) { - if (this.shouldAutomaticallyElideImportedName(this.tokens.identifierNameAtRelativeIndex(2))) { - this.tokens.removeToken(); - this.tokens.removeToken(); - this.tokens.removeToken(); - } else { - if (needsComma) { - this.tokens.appendCode(","); - } - foundNonTypeImport = true; - this.tokens.copyExpectedToken(TokenType.star); - this.tokens.copyExpectedToken(TokenType.name); - this.tokens.copyExpectedToken(TokenType.name); - } - } else if (this.tokens.matches1(TokenType.braceL)) { - if (needsComma) { - this.tokens.appendCode(","); - } - this.tokens.copyToken(); - while (!this.tokens.matches1(TokenType.braceR)) { - foundAnyNamedImport = true; - const specifierInfo = getImportExportSpecifierInfo(this.tokens); - if (specifierInfo.isType || this.shouldAutomaticallyElideImportedName(specifierInfo.rightName)) { - while (this.tokens.currentIndex() < specifierInfo.endIndex) { - this.tokens.removeToken(); - } - if (this.tokens.matches1(TokenType.comma)) { - this.tokens.removeToken(); - } - } else { - foundNonTypeImport = true; - while (this.tokens.currentIndex() < specifierInfo.endIndex) { - this.tokens.copyToken(); - } - if (this.tokens.matches1(TokenType.comma)) { - this.tokens.copyToken(); - } - } - } - this.tokens.copyExpectedToken(TokenType.braceR); - } - if (this.keepUnusedImports) { - return false; - } - if (this.isTypeScriptTransformEnabled) { - return !foundNonTypeImport; - } else if (this.isFlowTransformEnabled) { - return foundAnyNamedImport && !foundNonTypeImport; - } else { - return false; - } - } - shouldAutomaticallyElideImportedName(name) { - return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && !this.nonTypeIdentifiers.has(name); - } - processExportDefault() { - if (shouldElideDefaultExport( - this.isTypeScriptTransformEnabled, - this.keepUnusedImports, - this.tokens, - this.declarationInfo - )) { - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - this.tokens.removeToken(); - return true; - } - const alreadyHasName = this.tokens.matches4(TokenType._export, TokenType._default, TokenType._function, TokenType.name) || // export default async function - this.tokens.matches5(TokenType._export, TokenType._default, TokenType.name, TokenType._function, TokenType.name) && this.tokens.matchesContextualAtIndex( - this.tokens.currentIndex() + 2, - ContextualKeyword._async - ) || this.tokens.matches4(TokenType._export, TokenType._default, TokenType._class, TokenType.name) || this.tokens.matches5(TokenType._export, TokenType._default, TokenType._abstract, TokenType._class, TokenType.name); - if (!alreadyHasName && this.reactHotLoaderTransformer) { - const defaultVarName = this.nameManager.claimFreeName("_default"); - this.tokens.replaceToken(`let ${defaultVarName}; export`); - this.tokens.copyToken(); - this.tokens.appendCode(` ${defaultVarName} =`); - this.reactHotLoaderTransformer.setExtractedDefaultExportName(defaultVarName); - return true; - } - return false; - } - /** - * Handle a statement with one of these forms: - * export {a, type b}; - * export {c, type d} from 'foo'; - * - * In both cases, any explicit type exports should be removed. In the first - * case, we also need to handle implicit export elision for names declared as - * types. In the second case, we must NOT do implicit named export elision, - * but we must remove the runtime import if all exports are type exports. - */ - processNamedExports() { - if (!this.isTypeScriptTransformEnabled) { - return false; - } - this.tokens.copyExpectedToken(TokenType._export); - this.tokens.copyExpectedToken(TokenType.braceL); - const isReExport = isExportFrom(this.tokens); - let foundNonTypeExport = false; - while (!this.tokens.matches1(TokenType.braceR)) { - const specifierInfo = getImportExportSpecifierInfo(this.tokens); - if (specifierInfo.isType || !isReExport && this.shouldElideExportedName(specifierInfo.leftName)) { - while (this.tokens.currentIndex() < specifierInfo.endIndex) { - this.tokens.removeToken(); - } - if (this.tokens.matches1(TokenType.comma)) { - this.tokens.removeToken(); - } - } else { - foundNonTypeExport = true; - while (this.tokens.currentIndex() < specifierInfo.endIndex) { - this.tokens.copyToken(); - } - if (this.tokens.matches1(TokenType.comma)) { - this.tokens.copyToken(); - } - } - } - this.tokens.copyExpectedToken(TokenType.braceR); - if (!this.keepUnusedImports && isReExport && !foundNonTypeExport) { - this.tokens.removeToken(); - this.tokens.removeToken(); - removeMaybeImportAttributes(this.tokens); - } - return true; - } - /** - * ESM elides all imports with the rule that we only elide if we see that it's - * a type and never see it as a value. This is in contrast to CJS, which - * elides imports that are completely unknown. - */ - shouldElideExportedName(name) { - return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && this.declarationInfo.typeDeclarations.has(name) && !this.declarationInfo.valueDeclarations.has(name); - } -}; - -// node_modules/sucrase/dist/esm/transformers/FlowTransformer.js -var FlowTransformer = class extends Transformer { - constructor(rootTransformer, tokens, isImportsTransformEnabled) { - super(); - this.rootTransformer = rootTransformer; - this.tokens = tokens; - this.isImportsTransformEnabled = isImportsTransformEnabled; - ; - } - process() { - if (this.rootTransformer.processPossibleArrowParamEnd() || this.rootTransformer.processPossibleAsyncArrowWithTypeParams() || this.rootTransformer.processPossibleTypeRange()) { - return true; - } - if (this.tokens.matches1(TokenType._enum)) { - this.processEnum(); - return true; - } - if (this.tokens.matches2(TokenType._export, TokenType._enum)) { - this.processNamedExportEnum(); - return true; - } - if (this.tokens.matches3(TokenType._export, TokenType._default, TokenType._enum)) { - this.processDefaultExportEnum(); - return true; - } - return false; - } - /** - * Handle a declaration like: - * export enum E ... - * - * With this imports transform, this becomes: - * const E = [[enum]]; exports.E = E; - * - * otherwise, it becomes: - * export const E = [[enum]]; - */ - processNamedExportEnum() { - if (this.isImportsTransformEnabled) { - this.tokens.removeInitialToken(); - const enumName = this.tokens.identifierNameAtRelativeIndex(1); - this.processEnum(); - this.tokens.appendCode(` exports.${enumName} = ${enumName};`); - } else { - this.tokens.copyToken(); - this.processEnum(); - } - } - /** - * Handle a declaration like: - * export default enum E - * - * With the imports transform, this becomes: - * const E = [[enum]]; exports.default = E; - * - * otherwise, it becomes: - * const E = [[enum]]; export default E; - */ - processDefaultExportEnum() { - this.tokens.removeInitialToken(); - this.tokens.removeToken(); - const enumName = this.tokens.identifierNameAtRelativeIndex(1); - this.processEnum(); - if (this.isImportsTransformEnabled) { - this.tokens.appendCode(` exports.default = ${enumName};`); - } else { - this.tokens.appendCode(` export default ${enumName};`); - } - } - /** - * Transpile flow enums to invoke the "flow-enums-runtime" library. - * - * Currently, the transpiled code always uses `require("flow-enums-runtime")`, - * but if future flexibility is needed, we could expose a config option for - * this string (similar to configurable JSX). Even when targeting ESM, the - * default behavior of babel-plugin-transform-flow-enums is to use require - * rather than injecting an import. - * - * Flow enums are quite a bit simpler than TS enums and have some convenient - * constraints: - * - Element initializers must be either always present or always absent. That - * means that we can use fixed lookahead on the first element (if any) and - * assume that all elements are like that. - * - The right-hand side of an element initializer must be a literal value, - * not a complex expression and not referencing other elements. That means - * we can simply copy a single token. - * - * Enums can be broken up into three basic cases: - * - * Mirrored enums: - * enum E {A, B} - * -> - * const E = require("flow-enums-runtime").Mirrored(["A", "B"]); - * - * Initializer enums: - * enum E {A = 1, B = 2} - * -> - * const E = require("flow-enums-runtime")({A: 1, B: 2}); - * - * Symbol enums: - * enum E of symbol {A, B} - * -> - * const E = require("flow-enums-runtime")({A: Symbol("A"), B: Symbol("B")}); - * - * We can statically detect which of the three cases this is by looking at the - * "of" declaration (if any) and seeing if the first element has an initializer. - * Since the other transform details are so similar between the three cases, we - * use a single implementation and vary the transform within processEnumElement - * based on case. - */ - processEnum() { - this.tokens.replaceToken("const"); - this.tokens.copyExpectedToken(TokenType.name); - let isSymbolEnum = false; - if (this.tokens.matchesContextual(ContextualKeyword._of)) { - this.tokens.removeToken(); - isSymbolEnum = this.tokens.matchesContextual(ContextualKeyword._symbol); - this.tokens.removeToken(); - } - const hasInitializers = this.tokens.matches3(TokenType.braceL, TokenType.name, TokenType.eq); - this.tokens.appendCode(' = require("flow-enums-runtime")'); - const isMirrored = !isSymbolEnum && !hasInitializers; - this.tokens.replaceTokenTrimmingLeftWhitespace(isMirrored ? ".Mirrored([" : "({"); - while (!this.tokens.matches1(TokenType.braceR)) { - if (this.tokens.matches1(TokenType.ellipsis)) { - this.tokens.removeToken(); - break; - } - this.processEnumElement(isSymbolEnum, hasInitializers); - if (this.tokens.matches1(TokenType.comma)) { - this.tokens.copyToken(); - } - } - this.tokens.replaceToken(isMirrored ? "]);" : "});"); - } - /** - * Process an individual enum element, producing either an array element or an - * object element based on what type of enum this is. - */ - processEnumElement(isSymbolEnum, hasInitializers) { - if (isSymbolEnum) { - const elementName = this.tokens.identifierName(); - this.tokens.copyToken(); - this.tokens.appendCode(`: Symbol("${elementName}")`); - } else if (hasInitializers) { - this.tokens.copyToken(); - this.tokens.replaceTokenTrimmingLeftWhitespace(":"); - this.tokens.copyToken(); - } else { - this.tokens.replaceToken(`"${this.tokens.identifierName()}"`); - } - } -}; - -// node_modules/sucrase/dist/esm/transformers/JestHoistTransformer.js -function _optionalChain(ops) { - let lastAccessLHS = void 0; - let value = ops[0]; - let i4 = 1; - while (i4 < ops.length) { - const op = ops[i4]; - const fn2 = ops[i4 + 1]; - i4 += 2; - if ((op === "optionalAccess" || op === "optionalCall") && value == null) { - return void 0; - } - if (op === "access" || op === "optionalAccess") { - lastAccessLHS = value; - value = fn2(value); - } else if (op === "call" || op === "optionalCall") { - value = fn2((...args) => value.call(lastAccessLHS, ...args)); - lastAccessLHS = void 0; - } - } - return value; -} -var JEST_GLOBAL_NAME = "jest"; -var HOISTED_METHODS = ["mock", "unmock", "enableAutomock", "disableAutomock"]; -var JestHoistTransformer = class extends Transformer { - __init() { - this.hoistedFunctionNames = []; - } - constructor(rootTransformer, tokens, nameManager, importProcessor) { - super(); - this.rootTransformer = rootTransformer; - this.tokens = tokens; - this.nameManager = nameManager; - this.importProcessor = importProcessor; - JestHoistTransformer.prototype.__init.call(this); - ; - } - process() { - if (this.tokens.currentToken().scopeDepth === 0 && this.tokens.matches4(TokenType.name, TokenType.dot, TokenType.name, TokenType.parenL) && this.tokens.identifierName() === JEST_GLOBAL_NAME) { - if (_optionalChain([this, "access", (_3) => _3.importProcessor, "optionalAccess", (_22) => _22.getGlobalNames, "call", (_3) => _3(), "optionalAccess", (_4) => _4.has, "call", (_5) => _5(JEST_GLOBAL_NAME)])) { - return false; - } - return this.extractHoistedCalls(); - } - return false; - } - getHoistedCode() { - if (this.hoistedFunctionNames.length > 0) { - return this.hoistedFunctionNames.map((name) => `${name}();`).join(""); - } - return ""; - } - /** - * Extracts any methods calls on the jest-object that should be hoisted. - * - * According to the jest docs, https://jestjs.io/docs/en/jest-object#jestmockmodulename-factory-options, - * mock, unmock, enableAutomock, disableAutomock, are the methods that should be hoisted. - * - * We do not apply the same checks of the arguments as babel-plugin-jest-hoist does. - */ - extractHoistedCalls() { - this.tokens.removeToken(); - let followsNonHoistedJestCall = false; - while (this.tokens.matches3(TokenType.dot, TokenType.name, TokenType.parenL)) { - const methodName = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1); - const shouldHoist = HOISTED_METHODS.includes(methodName); - if (shouldHoist) { - const hoistedFunctionName = this.nameManager.claimFreeName("__jestHoist"); - this.hoistedFunctionNames.push(hoistedFunctionName); - this.tokens.replaceToken(`function ${hoistedFunctionName}(){${JEST_GLOBAL_NAME}.`); - this.tokens.copyToken(); - this.tokens.copyToken(); - this.rootTransformer.processBalancedCode(); - this.tokens.copyExpectedToken(TokenType.parenR); - this.tokens.appendCode(";}"); - followsNonHoistedJestCall = false; - } else { - if (followsNonHoistedJestCall) { - this.tokens.copyToken(); - } else { - this.tokens.replaceToken(`${JEST_GLOBAL_NAME}.`); - } - this.tokens.copyToken(); - this.tokens.copyToken(); - this.rootTransformer.processBalancedCode(); - this.tokens.copyExpectedToken(TokenType.parenR); - followsNonHoistedJestCall = true; - } - } - return true; - } -}; - -// node_modules/sucrase/dist/esm/transformers/NumericSeparatorTransformer.js -var NumericSeparatorTransformer = class extends Transformer { - constructor(tokens) { - super(); - this.tokens = tokens; - ; - } - process() { - if (this.tokens.matches1(TokenType.num)) { - const code = this.tokens.currentTokenCode(); - if (code.includes("_")) { - this.tokens.replaceToken(code.replace(/_/g, "")); - return true; - } - } - return false; - } -}; - -// node_modules/sucrase/dist/esm/transformers/OptionalCatchBindingTransformer.js -var OptionalCatchBindingTransformer = class extends Transformer { - constructor(tokens, nameManager) { - super(); - this.tokens = tokens; - this.nameManager = nameManager; - ; - } - process() { - if (this.tokens.matches2(TokenType._catch, TokenType.braceL)) { - this.tokens.copyToken(); - this.tokens.appendCode(` (${this.nameManager.claimFreeName("e")})`); - return true; - } - return false; - } -}; - -// node_modules/sucrase/dist/esm/transformers/OptionalChainingNullishTransformer.js -var OptionalChainingNullishTransformer = class extends Transformer { - constructor(tokens, nameManager) { - super(); - this.tokens = tokens; - this.nameManager = nameManager; - ; - } - process() { - if (this.tokens.matches1(TokenType.nullishCoalescing)) { - const token3 = this.tokens.currentToken(); - if (this.tokens.tokens[token3.nullishStartIndex].isAsyncOperation) { - this.tokens.replaceTokenTrimmingLeftWhitespace(", async () => ("); - } else { - this.tokens.replaceTokenTrimmingLeftWhitespace(", () => ("); - } - return true; - } - if (this.tokens.matches1(TokenType._delete)) { - const nextToken2 = this.tokens.tokenAtRelativeIndex(1); - if (nextToken2.isOptionalChainStart) { - this.tokens.removeInitialToken(); - return true; - } - } - const token2 = this.tokens.currentToken(); - const chainStart = token2.subscriptStartIndex; - if (chainStart != null && this.tokens.tokens[chainStart].isOptionalChainStart && // Super subscripts can't be optional (since super is never null/undefined), and the syntax - // relies on the subscript being intact, so leave this token alone. - this.tokens.tokenAtRelativeIndex(-1).type !== TokenType._super) { - const param = this.nameManager.claimFreeName("_"); - let arrowStartSnippet; - if (chainStart > 0 && this.tokens.matches1AtIndex(chainStart - 1, TokenType._delete) && this.isLastSubscriptInChain()) { - arrowStartSnippet = `${param} => delete ${param}`; - } else { - arrowStartSnippet = `${param} => ${param}`; - } - if (this.tokens.tokens[chainStart].isAsyncOperation) { - arrowStartSnippet = `async ${arrowStartSnippet}`; - } - if (this.tokens.matches2(TokenType.questionDot, TokenType.parenL) || this.tokens.matches2(TokenType.questionDot, TokenType.lessThan)) { - if (this.justSkippedSuper()) { - this.tokens.appendCode(".bind(this)"); - } - this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalCall', ${arrowStartSnippet}`); - } else if (this.tokens.matches2(TokenType.questionDot, TokenType.bracketL)) { - this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${arrowStartSnippet}`); - } else if (this.tokens.matches1(TokenType.questionDot)) { - this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${arrowStartSnippet}.`); - } else if (this.tokens.matches1(TokenType.dot)) { - this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${arrowStartSnippet}.`); - } else if (this.tokens.matches1(TokenType.bracketL)) { - this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${arrowStartSnippet}[`); - } else if (this.tokens.matches1(TokenType.parenL)) { - if (this.justSkippedSuper()) { - this.tokens.appendCode(".bind(this)"); - } - this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'call', ${arrowStartSnippet}(`); - } else { - throw new Error("Unexpected subscript operator in optional chain."); - } - return true; - } - return false; - } - /** - * Determine if the current token is the last of its chain, so that we know whether it's eligible - * to have a delete op inserted. - * - * We can do this by walking forward until we determine one way or another. Each - * isOptionalChainStart token must be paired with exactly one isOptionalChainEnd token after it in - * a nesting way, so we can track depth and walk to the end of the chain (the point where the - * depth goes negative) and see if any other subscript token is after us in the chain. - */ - isLastSubscriptInChain() { - let depth = 0; - for (let i4 = this.tokens.currentIndex() + 1; ; i4++) { - if (i4 >= this.tokens.tokens.length) { - throw new Error("Reached the end of the code while finding the end of the access chain."); - } - if (this.tokens.tokens[i4].isOptionalChainStart) { - depth++; - } else if (this.tokens.tokens[i4].isOptionalChainEnd) { - depth--; - } - if (depth < 0) { - return true; - } - if (depth === 0 && this.tokens.tokens[i4].subscriptStartIndex != null) { - return false; - } - } - } - /** - * Determine if we are the open-paren in an expression like super.a()?.b. - * - * We can do this by walking backward to find the previous subscript. If that subscript was - * preceded by a super, then we must be the subscript after it, so if this is a call expression, - * we'll need to attach the right context. - */ - justSkippedSuper() { - let depth = 0; - let index2 = this.tokens.currentIndex() - 1; - while (true) { - if (index2 < 0) { - throw new Error( - "Reached the start of the code while finding the start of the access chain." - ); - } - if (this.tokens.tokens[index2].isOptionalChainStart) { - depth--; - } else if (this.tokens.tokens[index2].isOptionalChainEnd) { - depth++; - } - if (depth < 0) { - return false; - } - if (depth === 0 && this.tokens.tokens[index2].subscriptStartIndex != null) { - return this.tokens.tokens[index2 - 1].type === TokenType._super; - } - index2--; - } - } -}; - -// node_modules/sucrase/dist/esm/transformers/ReactDisplayNameTransformer.js -var ReactDisplayNameTransformer = class extends Transformer { - constructor(rootTransformer, tokens, importProcessor, options2) { - super(); - this.rootTransformer = rootTransformer; - this.tokens = tokens; - this.importProcessor = importProcessor; - this.options = options2; - ; - } - process() { - const startIndex = this.tokens.currentIndex(); - if (this.tokens.identifierName() === "createReactClass") { - const newName = this.importProcessor && this.importProcessor.getIdentifierReplacement("createReactClass"); - if (newName) { - this.tokens.replaceToken(`(0, ${newName})`); - } else { - this.tokens.copyToken(); - } - this.tryProcessCreateClassCall(startIndex); - return true; - } - if (this.tokens.matches3(TokenType.name, TokenType.dot, TokenType.name) && this.tokens.identifierName() === "React" && this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 2) === "createClass") { - const newName = this.importProcessor ? this.importProcessor.getIdentifierReplacement("React") || "React" : "React"; - if (newName) { - this.tokens.replaceToken(newName); - this.tokens.copyToken(); - this.tokens.copyToken(); - } else { - this.tokens.copyToken(); - this.tokens.copyToken(); - this.tokens.copyToken(); - } - this.tryProcessCreateClassCall(startIndex); - return true; - } - return false; - } - /** - * This is called with the token position at the open-paren. - */ - tryProcessCreateClassCall(startIndex) { - const displayName = this.findDisplayName(startIndex); - if (!displayName) { - return; - } - if (this.classNeedsDisplayName()) { - this.tokens.copyExpectedToken(TokenType.parenL); - this.tokens.copyExpectedToken(TokenType.braceL); - this.tokens.appendCode(`displayName: '${displayName}',`); - this.rootTransformer.processBalancedCode(); - this.tokens.copyExpectedToken(TokenType.braceR); - this.tokens.copyExpectedToken(TokenType.parenR); - } - } - findDisplayName(startIndex) { - if (startIndex < 2) { - return null; - } - if (this.tokens.matches2AtIndex(startIndex - 2, TokenType.name, TokenType.eq)) { - return this.tokens.identifierNameAtIndex(startIndex - 2); - } - if (startIndex >= 2 && this.tokens.tokens[startIndex - 2].identifierRole === IdentifierRole.ObjectKey) { - return this.tokens.identifierNameAtIndex(startIndex - 2); - } - if (this.tokens.matches2AtIndex(startIndex - 2, TokenType._export, TokenType._default)) { - return this.getDisplayNameFromFilename(); - } - return null; - } - getDisplayNameFromFilename() { - const filePath = this.options.filePath || "unknown"; - const pathSegments = filePath.split("/"); - const filename = pathSegments[pathSegments.length - 1]; - const dotIndex = filename.lastIndexOf("."); - const baseFilename = dotIndex === -1 ? filename : filename.slice(0, dotIndex); - if (baseFilename === "index" && pathSegments[pathSegments.length - 2]) { - return pathSegments[pathSegments.length - 2]; - } else { - return baseFilename; - } - } - /** - * We only want to add a display name when this is a function call containing - * one argument, which is an object literal without `displayName` as an - * existing key. - */ - classNeedsDisplayName() { - let index2 = this.tokens.currentIndex(); - if (!this.tokens.matches2(TokenType.parenL, TokenType.braceL)) { - return false; - } - const objectStartIndex = index2 + 1; - const objectContextId = this.tokens.tokens[objectStartIndex].contextId; - if (objectContextId == null) { - throw new Error("Expected non-null context ID on object open-brace."); - } - for (; index2 < this.tokens.tokens.length; index2++) { - const token2 = this.tokens.tokens[index2]; - if (token2.type === TokenType.braceR && token2.contextId === objectContextId) { - index2++; - break; - } - if (this.tokens.identifierNameAtIndex(index2) === "displayName" && this.tokens.tokens[index2].identifierRole === IdentifierRole.ObjectKey && token2.contextId === objectContextId) { - return false; - } - } - if (index2 === this.tokens.tokens.length) { - throw new Error("Unexpected end of input when processing React class."); - } - return this.tokens.matches1AtIndex(index2, TokenType.parenR) || this.tokens.matches2AtIndex(index2, TokenType.comma, TokenType.parenR); - } -}; - -// node_modules/sucrase/dist/esm/transformers/ReactHotLoaderTransformer.js -var ReactHotLoaderTransformer = class extends Transformer { - __init() { - this.extractedDefaultExportName = null; - } - constructor(tokens, filePath) { - super(); - this.tokens = tokens; - this.filePath = filePath; - ReactHotLoaderTransformer.prototype.__init.call(this); - ; - } - setExtractedDefaultExportName(extractedDefaultExportName) { - this.extractedDefaultExportName = extractedDefaultExportName; - } - getPrefixCode() { - return ` - (function () { - var enterModule = require('react-hot-loader').enterModule; - enterModule && enterModule(module); - })();`.replace(/\s+/g, " ").trim(); - } - getSuffixCode() { - const topLevelNames = /* @__PURE__ */ new Set(); - for (const token2 of this.tokens.tokens) { - if (!token2.isType && isTopLevelDeclaration(token2) && token2.identifierRole !== IdentifierRole.ImportDeclaration) { - topLevelNames.add(this.tokens.identifierNameForToken(token2)); - } - } - const namesToRegister = Array.from(topLevelNames).map((name) => ({ - variableName: name, - uniqueLocalName: name - })); - if (this.extractedDefaultExportName) { - namesToRegister.push({ - variableName: this.extractedDefaultExportName, - uniqueLocalName: "default" - }); - } - return ` -;(function () { - var reactHotLoader = require('react-hot-loader').default; - var leaveModule = require('react-hot-loader').leaveModule; - if (!reactHotLoader) { - return; - } -${namesToRegister.map( - ({ variableName, uniqueLocalName }) => ` reactHotLoader.register(${variableName}, "${uniqueLocalName}", ${JSON.stringify( - this.filePath || "" - )});` - ).join("\n")} - leaveModule(module); -})();`; - } - process() { - return false; - } -}; - -// node_modules/sucrase/dist/esm/util/isIdentifier.js -var RESERVED_WORDS = /* @__PURE__ */ new Set([ - // Reserved keywords as of ECMAScript 2015 - "break", - "case", - "catch", - "class", - "const", - "continue", - "debugger", - "default", - "delete", - "do", - "else", - "export", - "extends", - "finally", - "for", - "function", - "if", - "import", - "in", - "instanceof", - "new", - "return", - "super", - "switch", - "this", - "throw", - "try", - "typeof", - "var", - "void", - "while", - "with", - "yield", - // Future reserved keywords - "enum", - "implements", - "interface", - "let", - "package", - "private", - "protected", - "public", - "static", - "await", - // Literals that cannot be used as identifiers - "false", - "null", - "true" -]); -function isIdentifier(name) { - if (name.length === 0) { - return false; - } - if (!IS_IDENTIFIER_START[name.charCodeAt(0)]) { - return false; - } - for (let i4 = 1; i4 < name.length; i4++) { - if (!IS_IDENTIFIER_CHAR[name.charCodeAt(i4)]) { - return false; - } - } - return !RESERVED_WORDS.has(name); -} - -// node_modules/sucrase/dist/esm/transformers/TypeScriptTransformer.js -var TypeScriptTransformer = class extends Transformer { - constructor(rootTransformer, tokens, isImportsTransformEnabled) { - super(); - this.rootTransformer = rootTransformer; - this.tokens = tokens; - this.isImportsTransformEnabled = isImportsTransformEnabled; - ; - } - process() { - if (this.rootTransformer.processPossibleArrowParamEnd() || this.rootTransformer.processPossibleAsyncArrowWithTypeParams() || this.rootTransformer.processPossibleTypeRange()) { - return true; - } - if (this.tokens.matches1(TokenType._public) || this.tokens.matches1(TokenType._protected) || this.tokens.matches1(TokenType._private) || this.tokens.matches1(TokenType._abstract) || this.tokens.matches1(TokenType._readonly) || this.tokens.matches1(TokenType._override) || this.tokens.matches1(TokenType.nonNullAssertion)) { - this.tokens.removeInitialToken(); - return true; - } - if (this.tokens.matches1(TokenType._enum) || this.tokens.matches2(TokenType._const, TokenType._enum)) { - this.processEnum(); - return true; - } - if (this.tokens.matches2(TokenType._export, TokenType._enum) || this.tokens.matches3(TokenType._export, TokenType._const, TokenType._enum)) { - this.processEnum(true); - return true; - } - return false; - } - processEnum(isExport = false) { - this.tokens.removeInitialToken(); - while (this.tokens.matches1(TokenType._const) || this.tokens.matches1(TokenType._enum)) { - this.tokens.removeToken(); - } - const enumName = this.tokens.identifierName(); - this.tokens.removeToken(); - if (isExport && !this.isImportsTransformEnabled) { - this.tokens.appendCode("export "); - } - this.tokens.appendCode(`var ${enumName}; (function (${enumName})`); - this.tokens.copyExpectedToken(TokenType.braceL); - this.processEnumBody(enumName); - this.tokens.copyExpectedToken(TokenType.braceR); - if (isExport && this.isImportsTransformEnabled) { - this.tokens.appendCode(`)(${enumName} || (exports.${enumName} = ${enumName} = {}));`); - } else { - this.tokens.appendCode(`)(${enumName} || (${enumName} = {}));`); - } - } - /** - * Transform an enum into equivalent JS. This has complexity in a few places: - * - TS allows string enums, numeric enums, and a mix of the two styles within an enum. - * - Enum keys are allowed to be referenced in later enum values. - * - Enum keys are allowed to be strings. - * - When enum values are omitted, they should follow an auto-increment behavior. - */ - processEnumBody(enumName) { - let previousValueCode = null; - while (true) { - if (this.tokens.matches1(TokenType.braceR)) { - break; - } - const { nameStringCode, variableName } = this.extractEnumKeyInfo(this.tokens.currentToken()); - this.tokens.removeInitialToken(); - if (this.tokens.matches3(TokenType.eq, TokenType.string, TokenType.comma) || this.tokens.matches3(TokenType.eq, TokenType.string, TokenType.braceR)) { - this.processStringLiteralEnumMember(enumName, nameStringCode, variableName); - } else if (this.tokens.matches1(TokenType.eq)) { - this.processExplicitValueEnumMember(enumName, nameStringCode, variableName); - } else { - this.processImplicitValueEnumMember( - enumName, - nameStringCode, - variableName, - previousValueCode - ); - } - if (this.tokens.matches1(TokenType.comma)) { - this.tokens.removeToken(); - } - if (variableName != null) { - previousValueCode = variableName; - } else { - previousValueCode = `${enumName}[${nameStringCode}]`; - } - } - } - /** - * Detect name information about this enum key, which will be used to determine which code to emit - * and whether we should declare a variable as part of this declaration. - * - * Some cases to keep in mind: - * - Enum keys can be implicitly referenced later, e.g. `X = 1, Y = X`. In Sucrase, we implement - * this by declaring a variable `X` so that later expressions can use it. - * - In addition to the usual identifier key syntax, enum keys are allowed to be string literals, - * e.g. `"hello world" = 3,`. Template literal syntax is NOT allowed. - * - Even if the enum key is defined as a string literal, it may still be referenced by identifier - * later, e.g. `"X" = 1, Y = X`. That means that we need to detect whether or not a string - * literal is identifier-like and emit a variable if so, even if the declaration did not use an - * identifier. - * - Reserved keywords like `break` are valid enum keys, but are not valid to be referenced later - * and would be a syntax error if we emitted a variable, so we need to skip the variable - * declaration in those cases. - * - * The variableName return value captures these nuances: if non-null, we can and must emit a - * variable declaration, and if null, we can't and shouldn't. - */ - extractEnumKeyInfo(nameToken) { - if (nameToken.type === TokenType.name) { - const name = this.tokens.identifierNameForToken(nameToken); - return { - nameStringCode: `"${name}"`, - variableName: isIdentifier(name) ? name : null - }; - } else if (nameToken.type === TokenType.string) { - const name = this.tokens.stringValueForToken(nameToken); - return { - nameStringCode: this.tokens.code.slice(nameToken.start, nameToken.end), - variableName: isIdentifier(name) ? name : null - }; - } else { - throw new Error("Expected name or string at beginning of enum element."); - } - } - /** - * Handle an enum member where the RHS is just a string literal (not omitted, not a number, and - * not a complex expression). This is the typical form for TS string enums, and in this case, we - * do *not* create a reverse mapping. - * - * This is called after deleting the key token, when the token processor is at the equals sign. - * - * Example 1: - * someKey = "some value" - * -> - * const someKey = "some value"; MyEnum["someKey"] = someKey; - * - * Example 2: - * "some key" = "some value" - * -> - * MyEnum["some key"] = "some value"; - */ - processStringLiteralEnumMember(enumName, nameStringCode, variableName) { - if (variableName != null) { - this.tokens.appendCode(`const ${variableName}`); - this.tokens.copyToken(); - this.tokens.copyToken(); - this.tokens.appendCode(`; ${enumName}[${nameStringCode}] = ${variableName};`); - } else { - this.tokens.appendCode(`${enumName}[${nameStringCode}]`); - this.tokens.copyToken(); - this.tokens.copyToken(); - this.tokens.appendCode(";"); - } - } - /** - * Handle an enum member initialized with an expression on the right-hand side (other than a - * string literal). In these cases, we should transform the expression and emit code that sets up - * a reverse mapping. - * - * The TypeScript implementation of this operation distinguishes between expressions that can be - * "constant folded" at compile time (i.e. consist of number literals and simple math operations - * on those numbers) and ones that are dynamic. For constant expressions, it emits the resolved - * numeric value, and auto-incrementing is only allowed in that case. Evaluating expressions at - * compile time would add significant complexity to Sucrase, so Sucrase instead leaves the - * expression as-is, and will later emit something like `MyEnum["previousKey"] + 1` to implement - * auto-incrementing. - * - * This is called after deleting the key token, when the token processor is at the equals sign. - * - * Example 1: - * someKey = 1 + 1 - * -> - * const someKey = 1 + 1; MyEnum[MyEnum["someKey"] = someKey] = "someKey"; - * - * Example 2: - * "some key" = 1 + 1 - * -> - * MyEnum[MyEnum["some key"] = 1 + 1] = "some key"; - */ - processExplicitValueEnumMember(enumName, nameStringCode, variableName) { - const rhsEndIndex = this.tokens.currentToken().rhsEndIndex; - if (rhsEndIndex == null) { - throw new Error("Expected rhsEndIndex on enum assign."); - } - if (variableName != null) { - this.tokens.appendCode(`const ${variableName}`); - this.tokens.copyToken(); - while (this.tokens.currentIndex() < rhsEndIndex) { - this.rootTransformer.processToken(); - } - this.tokens.appendCode( - `; ${enumName}[${enumName}[${nameStringCode}] = ${variableName}] = ${nameStringCode};` - ); - } else { - this.tokens.appendCode(`${enumName}[${enumName}[${nameStringCode}]`); - this.tokens.copyToken(); - while (this.tokens.currentIndex() < rhsEndIndex) { - this.rootTransformer.processToken(); - } - this.tokens.appendCode(`] = ${nameStringCode};`); - } - } - /** - * Handle an enum member with no right-hand side expression. In this case, the value is the - * previous value plus 1, or 0 if there was no previous value. We should also always emit a - * reverse mapping. - * - * Example 1: - * someKey2 - * -> - * const someKey2 = someKey1 + 1; MyEnum[MyEnum["someKey2"] = someKey2] = "someKey2"; - * - * Example 2: - * "some key 2" - * -> - * MyEnum[MyEnum["some key 2"] = someKey1 + 1] = "some key 2"; - */ - processImplicitValueEnumMember(enumName, nameStringCode, variableName, previousValueCode) { - let valueCode = previousValueCode != null ? `${previousValueCode} + 1` : "0"; - if (variableName != null) { - this.tokens.appendCode(`const ${variableName} = ${valueCode}; `); - valueCode = variableName; - } - this.tokens.appendCode( - `${enumName}[${enumName}[${nameStringCode}] = ${valueCode}] = ${nameStringCode};` - ); - } -}; - -// node_modules/sucrase/dist/esm/transformers/RootTransformer.js -var RootTransformer = class { - __init() { - this.transformers = []; - } - __init2() { - this.generatedVariables = []; - } - constructor(sucraseContext, transforms, enableLegacyBabel5ModuleInterop, options2) { - ; - RootTransformer.prototype.__init.call(this); - RootTransformer.prototype.__init2.call(this); - this.nameManager = sucraseContext.nameManager; - this.helperManager = sucraseContext.helperManager; - const { tokenProcessor, importProcessor } = sucraseContext; - this.tokens = tokenProcessor; - this.isImportsTransformEnabled = transforms.includes("imports"); - this.isReactHotLoaderTransformEnabled = transforms.includes("react-hot-loader"); - this.disableESTransforms = Boolean(options2.disableESTransforms); - if (!options2.disableESTransforms) { - this.transformers.push( - new OptionalChainingNullishTransformer(tokenProcessor, this.nameManager) - ); - this.transformers.push(new NumericSeparatorTransformer(tokenProcessor)); - this.transformers.push(new OptionalCatchBindingTransformer(tokenProcessor, this.nameManager)); - } - if (transforms.includes("jsx")) { - if (options2.jsxRuntime !== "preserve") { - this.transformers.push( - new JSXTransformer(this, tokenProcessor, importProcessor, this.nameManager, options2) - ); - } - this.transformers.push( - new ReactDisplayNameTransformer(this, tokenProcessor, importProcessor, options2) - ); - } - let reactHotLoaderTransformer = null; - if (transforms.includes("react-hot-loader")) { - if (!options2.filePath) { - throw new Error("filePath is required when using the react-hot-loader transform."); - } - reactHotLoaderTransformer = new ReactHotLoaderTransformer(tokenProcessor, options2.filePath); - this.transformers.push(reactHotLoaderTransformer); - } - if (transforms.includes("imports")) { - if (importProcessor === null) { - throw new Error("Expected non-null importProcessor with imports transform enabled."); - } - this.transformers.push( - new CJSImportTransformer( - this, - tokenProcessor, - importProcessor, - this.nameManager, - this.helperManager, - reactHotLoaderTransformer, - enableLegacyBabel5ModuleInterop, - Boolean(options2.enableLegacyTypeScriptModuleInterop), - transforms.includes("typescript"), - transforms.includes("flow"), - Boolean(options2.preserveDynamicImport), - Boolean(options2.keepUnusedImports) - ) - ); - } else { - this.transformers.push( - new ESMImportTransformer( - tokenProcessor, - this.nameManager, - this.helperManager, - reactHotLoaderTransformer, - transforms.includes("typescript"), - transforms.includes("flow"), - Boolean(options2.keepUnusedImports), - options2 - ) - ); - } - if (transforms.includes("flow")) { - this.transformers.push( - new FlowTransformer(this, tokenProcessor, transforms.includes("imports")) - ); - } - if (transforms.includes("typescript")) { - this.transformers.push( - new TypeScriptTransformer(this, tokenProcessor, transforms.includes("imports")) - ); - } - if (transforms.includes("jest")) { - this.transformers.push( - new JestHoistTransformer(this, tokenProcessor, this.nameManager, importProcessor) - ); - } - } - transform() { - this.tokens.reset(); - this.processBalancedCode(); - const shouldAddUseStrict = this.isImportsTransformEnabled; - let prefix2 = shouldAddUseStrict ? '"use strict";' : ""; - for (const transformer of this.transformers) { - prefix2 += transformer.getPrefixCode(); - } - prefix2 += this.helperManager.emitHelpers(); - prefix2 += this.generatedVariables.map((v3) => ` var ${v3};`).join(""); - for (const transformer of this.transformers) { - prefix2 += transformer.getHoistedCode(); - } - let suffix = ""; - for (const transformer of this.transformers) { - suffix += transformer.getSuffixCode(); - } - const result = this.tokens.finish(); - let { code } = result; - if (code.startsWith("#!")) { - let newlineIndex = code.indexOf("\n"); - if (newlineIndex === -1) { - newlineIndex = code.length; - code += "\n"; - } - return { - code: code.slice(0, newlineIndex + 1) + prefix2 + code.slice(newlineIndex + 1) + suffix, - // The hashbang line has no tokens, so shifting the tokens to account - // for prefix can happen normally. - mappings: this.shiftMappings(result.mappings, prefix2.length) - }; - } else { - return { - code: prefix2 + code + suffix, - mappings: this.shiftMappings(result.mappings, prefix2.length) - }; - } - } - processBalancedCode() { - let braceDepth = 0; - let parenDepth = 0; - while (!this.tokens.isAtEnd()) { - if (this.tokens.matches1(TokenType.braceL) || this.tokens.matches1(TokenType.dollarBraceL)) { - braceDepth++; - } else if (this.tokens.matches1(TokenType.braceR)) { - if (braceDepth === 0) { - return; - } - braceDepth--; - } - if (this.tokens.matches1(TokenType.parenL)) { - parenDepth++; - } else if (this.tokens.matches1(TokenType.parenR)) { - if (parenDepth === 0) { - return; - } - parenDepth--; - } - this.processToken(); - } - } - processToken() { - if (this.tokens.matches1(TokenType._class)) { - this.processClass(); - return; - } - for (const transformer of this.transformers) { - const wasProcessed = transformer.process(); - if (wasProcessed) { - return; - } - } - this.tokens.copyToken(); - } - /** - * Skip past a class with a name and return that name. - */ - processNamedClass() { - if (!this.tokens.matches2(TokenType._class, TokenType.name)) { - throw new Error("Expected identifier for exported class name."); - } - const name = this.tokens.identifierNameAtIndex(this.tokens.currentIndex() + 1); - this.processClass(); - return name; - } - processClass() { - const classInfo = getClassInfo(this, this.tokens, this.nameManager, this.disableESTransforms); - const needsCommaExpression = (classInfo.headerInfo.isExpression || !classInfo.headerInfo.className) && classInfo.staticInitializerNames.length + classInfo.instanceInitializerNames.length > 0; - let className = classInfo.headerInfo.className; - if (needsCommaExpression) { - className = this.nameManager.claimFreeName("_class"); - this.generatedVariables.push(className); - this.tokens.appendCode(` (${className} =`); - } - const classToken = this.tokens.currentToken(); - const contextId = classToken.contextId; - if (contextId == null) { - throw new Error("Expected class to have a context ID."); - } - this.tokens.copyExpectedToken(TokenType._class); - while (!this.tokens.matchesContextIdAndLabel(TokenType.braceL, contextId)) { - this.processToken(); - } - this.processClassBody(classInfo, className); - const staticInitializerStatements = classInfo.staticInitializerNames.map( - (name) => `${className}.${name}()` - ); - if (needsCommaExpression) { - this.tokens.appendCode( - `, ${staticInitializerStatements.map((s4) => `${s4}, `).join("")}${className})` - ); - } else if (classInfo.staticInitializerNames.length > 0) { - this.tokens.appendCode(` ${staticInitializerStatements.map((s4) => `${s4};`).join(" ")}`); - } - } - /** - * We want to just handle class fields in all contexts, since TypeScript supports them. Later, - * when some JS implementations support class fields, this should be made optional. - */ - processClassBody(classInfo, className) { - const { - headerInfo, - constructorInsertPos, - constructorInitializerStatements, - fields, - instanceInitializerNames, - rangesToRemove - } = classInfo; - let fieldIndex = 0; - let rangeToRemoveIndex = 0; - const classContextId = this.tokens.currentToken().contextId; - if (classContextId == null) { - throw new Error("Expected non-null context ID on class."); - } - this.tokens.copyExpectedToken(TokenType.braceL); - if (this.isReactHotLoaderTransformEnabled) { - this.tokens.appendCode( - "__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}" - ); - } - const needsConstructorInit = constructorInitializerStatements.length + instanceInitializerNames.length > 0; - if (constructorInsertPos === null && needsConstructorInit) { - const constructorInitializersCode = this.makeConstructorInitCode( - constructorInitializerStatements, - instanceInitializerNames, - className - ); - if (headerInfo.hasSuperclass) { - const argsName = this.nameManager.claimFreeName("args"); - this.tokens.appendCode( - `constructor(...${argsName}) { super(...${argsName}); ${constructorInitializersCode}; }` - ); - } else { - this.tokens.appendCode(`constructor() { ${constructorInitializersCode}; }`); - } - } - while (!this.tokens.matchesContextIdAndLabel(TokenType.braceR, classContextId)) { - if (fieldIndex < fields.length && this.tokens.currentIndex() === fields[fieldIndex].start) { - let needsCloseBrace = false; - if (this.tokens.matches1(TokenType.bracketL)) { - this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this`); - } else if (this.tokens.matches1(TokenType.string) || this.tokens.matches1(TokenType.num)) { - this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this[`); - needsCloseBrace = true; - } else { - this.tokens.copyTokenWithPrefix(`${fields[fieldIndex].initializerName}() {this.`); - } - while (this.tokens.currentIndex() < fields[fieldIndex].end) { - if (needsCloseBrace && this.tokens.currentIndex() === fields[fieldIndex].equalsIndex) { - this.tokens.appendCode("]"); - } - this.processToken(); - } - this.tokens.appendCode("}"); - fieldIndex++; - } else if (rangeToRemoveIndex < rangesToRemove.length && this.tokens.currentIndex() >= rangesToRemove[rangeToRemoveIndex].start) { - if (this.tokens.currentIndex() < rangesToRemove[rangeToRemoveIndex].end) { - this.tokens.removeInitialToken(); - } - while (this.tokens.currentIndex() < rangesToRemove[rangeToRemoveIndex].end) { - this.tokens.removeToken(); - } - rangeToRemoveIndex++; - } else if (this.tokens.currentIndex() === constructorInsertPos) { - this.tokens.copyToken(); - if (needsConstructorInit) { - this.tokens.appendCode( - `;${this.makeConstructorInitCode( - constructorInitializerStatements, - instanceInitializerNames, - className - )};` - ); - } - this.processToken(); - } else { - this.processToken(); - } - } - this.tokens.copyExpectedToken(TokenType.braceR); - } - makeConstructorInitCode(constructorInitializerStatements, instanceInitializerNames, className) { - return [ - ...constructorInitializerStatements, - ...instanceInitializerNames.map((name) => `${className}.prototype.${name}.call(this)`) - ].join(";"); - } - /** - * Normally it's ok to simply remove type tokens, but we need to be more careful when dealing with - * arrow function return types since they can confuse the parser. In that case, we want to move - * the close-paren to the same line as the arrow. - * - * See https://github.com/alangpierce/sucrase/issues/391 for more details. - */ - processPossibleArrowParamEnd() { - if (this.tokens.matches2(TokenType.parenR, TokenType.colon) && this.tokens.tokenAtRelativeIndex(1).isType) { - let nextNonTypeIndex = this.tokens.currentIndex() + 1; - while (this.tokens.tokens[nextNonTypeIndex].isType) { - nextNonTypeIndex++; - } - if (this.tokens.matches1AtIndex(nextNonTypeIndex, TokenType.arrow)) { - this.tokens.removeInitialToken(); - while (this.tokens.currentIndex() < nextNonTypeIndex) { - this.tokens.removeToken(); - } - this.tokens.replaceTokenTrimmingLeftWhitespace(") =>"); - return true; - } - } - return false; - } - /** - * An async arrow function might be of the form: - * - * async < - * T - * >() => {} - * - * in which case, removing the type parameters will cause a syntax error. Detect this case and - * move the open-paren earlier. - */ - processPossibleAsyncArrowWithTypeParams() { - if (!this.tokens.matchesContextual(ContextualKeyword._async) && !this.tokens.matches1(TokenType._async)) { - return false; - } - const nextToken2 = this.tokens.tokenAtRelativeIndex(1); - if (nextToken2.type !== TokenType.lessThan || !nextToken2.isType) { - return false; - } - let nextNonTypeIndex = this.tokens.currentIndex() + 1; - while (this.tokens.tokens[nextNonTypeIndex].isType) { - nextNonTypeIndex++; - } - if (this.tokens.matches1AtIndex(nextNonTypeIndex, TokenType.parenL)) { - this.tokens.replaceToken("async ("); - this.tokens.removeInitialToken(); - while (this.tokens.currentIndex() < nextNonTypeIndex) { - this.tokens.removeToken(); - } - this.tokens.removeToken(); - this.processBalancedCode(); - this.processToken(); - return true; - } - return false; - } - processPossibleTypeRange() { - if (this.tokens.currentToken().isType) { - this.tokens.removeInitialToken(); - while (this.tokens.currentToken().isType) { - this.tokens.removeToken(); - } - return true; - } - return false; - } - shiftMappings(mappings, prefixLength) { - for (let i4 = 0; i4 < mappings.length; i4++) { - const mapping = mappings[i4]; - if (mapping !== void 0) { - mappings[i4] = mapping + prefixLength; - } - } - return mappings; - } -}; - -// node_modules/sucrase/dist/esm/util/formatTokens.js -var import_lines_and_columns = __toESM(require_build()); - -// node_modules/sucrase/dist/esm/util/getTSImportedNames.js -function getTSImportedNames(tokens) { - const importedNames = /* @__PURE__ */ new Set(); - for (let i4 = 0; i4 < tokens.tokens.length; i4++) { - if (tokens.matches1AtIndex(i4, TokenType._import) && !tokens.matches3AtIndex(i4, TokenType._import, TokenType.name, TokenType.eq)) { - collectNamesForImport(tokens, i4, importedNames); - } - } - return importedNames; -} -function collectNamesForImport(tokens, index2, importedNames) { - index2++; - if (tokens.matches1AtIndex(index2, TokenType.parenL)) { - return; - } - if (tokens.matches1AtIndex(index2, TokenType.name)) { - importedNames.add(tokens.identifierNameAtIndex(index2)); - index2++; - if (tokens.matches1AtIndex(index2, TokenType.comma)) { - index2++; - } - } - if (tokens.matches1AtIndex(index2, TokenType.star)) { - index2 += 2; - importedNames.add(tokens.identifierNameAtIndex(index2)); - index2++; - } - if (tokens.matches1AtIndex(index2, TokenType.braceL)) { - index2++; - collectNamesForNamedImport(tokens, index2, importedNames); - } -} -function collectNamesForNamedImport(tokens, index2, importedNames) { - while (true) { - if (tokens.matches1AtIndex(index2, TokenType.braceR)) { - return; - } - const specifierInfo = getImportExportSpecifierInfo(tokens, index2); - index2 = specifierInfo.endIndex; - if (!specifierInfo.isType) { - importedNames.add(specifierInfo.rightName); - } - if (tokens.matches2AtIndex(index2, TokenType.comma, TokenType.braceR)) { - return; - } else if (tokens.matches1AtIndex(index2, TokenType.braceR)) { - return; - } else if (tokens.matches1AtIndex(index2, TokenType.comma)) { - index2++; - } else { - throw new Error(`Unexpected token: ${JSON.stringify(tokens.tokens[index2])}`); - } - } -} - -// node_modules/sucrase/dist/esm/index.js -function transform(code, options2) { - validateOptions(options2); - try { - const sucraseContext = getSucraseContext(code, options2); - const transformer = new RootTransformer( - sucraseContext, - options2.transforms, - Boolean(options2.enableLegacyBabel5ModuleInterop), - options2 - ); - const transformerResult = transformer.transform(); - let result = { code: transformerResult.code }; - if (options2.sourceMapOptions) { - if (!options2.filePath) { - throw new Error("filePath must be specified when generating a source map."); - } - result = { - ...result, - sourceMap: computeSourceMap( - transformerResult, - options2.filePath, - options2.sourceMapOptions, - code, - sucraseContext.tokenProcessor.tokens - ) - }; - } - return result; - } catch (e3) { - if (options2.filePath) { - e3.message = `Error transforming ${options2.filePath}: ${e3.message}`; - } - throw e3; - } -} -function getSucraseContext(code, options2) { - const isJSXEnabled2 = options2.transforms.includes("jsx"); - const isTypeScriptEnabled2 = options2.transforms.includes("typescript"); - const isFlowEnabled2 = options2.transforms.includes("flow"); - const disableESTransforms = options2.disableESTransforms === true; - const file = parse2(code, isJSXEnabled2, isTypeScriptEnabled2, isFlowEnabled2); - const tokens = file.tokens; - const scopes = file.scopes; - const nameManager = new NameManager(code, tokens); - const helperManager = new HelperManager(nameManager); - const tokenProcessor = new TokenProcessor( - code, - tokens, - isFlowEnabled2, - disableESTransforms, - helperManager - ); - const enableLegacyTypeScriptModuleInterop = Boolean(options2.enableLegacyTypeScriptModuleInterop); - let importProcessor = null; - if (options2.transforms.includes("imports")) { - importProcessor = new CJSImportProcessor( - nameManager, - tokenProcessor, - enableLegacyTypeScriptModuleInterop, - options2, - options2.transforms.includes("typescript"), - Boolean(options2.keepUnusedImports), - helperManager - ); - importProcessor.preprocessTokens(); - identifyShadowedGlobals(tokenProcessor, scopes, importProcessor.getGlobalNames()); - if (options2.transforms.includes("typescript") && !options2.keepUnusedImports) { - importProcessor.pruneTypeOnlyImports(); - } - } else if (options2.transforms.includes("typescript") && !options2.keepUnusedImports) { - identifyShadowedGlobals(tokenProcessor, scopes, getTSImportedNames(tokenProcessor)); - } - return { tokenProcessor, scopes, nameManager, importProcessor, helperManager }; -} - // src/utils/javascript.ts +var import_sucrase = __toESM(require_dist2()); function transpile(script, language) { switch (language) { case "js": return script; case "jsx": - return transform(script, { transforms: ["jsx"], jsxPragma: "h", jsxFragmentPragma: "Fragment" }).code; + return (0, import_sucrase.transform)(script, { transforms: ["jsx"], jsxPragma: "h", jsxFragmentPragma: "Fragment" }).code; case "ts": - return transform(script, { transforms: ["typescript"] }).code; + return (0, import_sucrase.transform)(script, { transforms: ["typescript"] }).code; case "tsx": - return transform(script, { + return (0, import_sucrase.transform)(script, { transforms: ["typescript", "jsx"], jsxPragma: "h", jsxFragmentPragma: "Fragment" @@ -35531,15 +41677,13 @@ async function asyncEvalInContext(script, variables) { // src/ui/hooks.ts var import_obsidian2 = require("obsidian"); function useIndexUpdates(datacore, settings) { - const [revision, setRevision] = p2(datacore.datastore.revision); - const debouncedRevision = q2(() => { + const [revision, setRevision] = h2(datacore.datastore.revision); + const debouncedRevision = T2(() => { var _a; - if ((settings == null ? void 0 : settings.debounce) && settings.debounce == 0) - return setRevision; - else - return (0, import_obsidian2.debounce)(setRevision, (_a = settings == null ? void 0 : settings.debounce) != null ? _a : 500); + if ((settings == null ? void 0 : settings.debounce) && settings.debounce == 0) return setRevision; + else return (0, import_obsidian2.debounce)(setRevision, (_a = settings == null ? void 0 : settings.debounce) != null ? _a : 500); }, [setRevision, settings == null ? void 0 : settings.debounce]); - _2(() => { + y2(() => { const ref = datacore.on("update", debouncedRevision); return () => datacore.offref(ref); }, []); @@ -35547,13 +41691,13 @@ function useIndexUpdates(datacore, settings) { } function useFileMetadata(datacore, path, settings) { const indexRevision = useIndexUpdates(datacore, settings); - return q2(() => datacore.datastore.load(path), [indexRevision, path]); + return T2(() => datacore.datastore.load(path), [indexRevision, path]); } function tryUseFullQuery(datacore, query, settings) { const indexRevision = useIndexUpdates(datacore, settings); const internedQuery = useInterning(query, Literals.equals); - const internedResult = F2(void 0); - return q2(() => { + const internedResult = A2(void 0); + return T2(() => { const newResult = datacore.datastore.search(query); if (!newResult.successful) { internedResult.current = Result.failure(newResult.error); @@ -35581,34 +41725,31 @@ function useQuery(datacore, query, settings) { return useFullQuery(datacore, query, settings).results; } function sameObjects(old, incoming) { - if (old.length != incoming.length) - return false; + if (old.length != incoming.length) return false; const olds = {}; for (const indexable of old) { olds[indexable.$id] = indexable.$revision; } for (const indexable of incoming) { const value = olds[indexable.$id]; - if (value == void 0) - return false; - if (value != indexable.$revision) - return false; + if (value == void 0) return false; + if (value != indexable.$revision) return false; } return true; } function useInterning(value, equality) { - const ref = F2(); + const ref = A2(); if (ref.current === void 0 || !equality(ref.current, value)) { ref.current = value; } return ref.current; } function useStableCallback(callback, deps) { - const ref = F2(); - _2(() => { + const ref = A2(); + y2(() => { ref.current = callback; }, [callback, ...deps]); - return x2( + return q2( (...args) => { ref.current(...args); }, @@ -35618,21 +41759,19 @@ function useStableCallback(callback, deps) { var NO_OP_UPDATE = (x4) => { }; function useControlledState(initialState, override, update) { - const [state2, setState] = p2(override != null ? override : initialState); + const [state, setState] = h2(override != null ? override : initialState); if (override !== void 0) { - if (state2 != override) - setState(override); + if (state != override) setState(override); return [override, update != null ? update : NO_OP_UPDATE]; } - const setStateWithUpdate = x2( + const setStateWithUpdate = q2( (value) => { setState(value); - if (update) - update(value); + if (update) update(value); }, [setState, update] ); - return [state2, setStateWithUpdate]; + return [state, setStateWithUpdate]; } // src/ui/loading-boundary.tsx @@ -35646,15 +41785,14 @@ function LoadingProgress({ datacore }) { ] }); } function LoadingBoundary({ children, datacore }) { - const [initialized, setInitialized] = p2(datacore.initialized); - _2(() => { - if (initialized) - return; + const [initialized, setInitialized] = h2(datacore.initialized); + y2(() => { + if (initialized) return; const ref = datacore.on("initialized", () => setInitialized(true)); return () => datacore.offref(ref); }, [initialized, datacore]); if (initialized) { - return /* @__PURE__ */ u3(m, { children }); + return /* @__PURE__ */ u3(b, { children }); } else { return /* @__PURE__ */ u3("div", { className: "datacore-loading-boundary", children: [ /* @__PURE__ */ u3("h4", { className: "datacore-loading-title", children: "Datacore is getting ready..." }), @@ -35666,9 +41804,9 @@ function ScriptContainer({ executor, sourcePath }) { - const [element, setElement] = p2(void 0); - const [error, setError] = p2(void 0); - _2(() => { + const [element, setElement] = h2(void 0); + const [error, setError] = h2(void 0); + y2(() => { setElement(void 0); setError(void 0); executor().then((result) => setElement(makeRenderableElement(result, sourcePath))).catch((error2) => setError(error2)); @@ -35676,13 +41814,13 @@ function ScriptContainer({ if (error) { throw error; } - return /* @__PURE__ */ u3(m, { children: element != null ? element : /* @__PURE__ */ u3(ErrorMessage, { message: "< View is rendering >" }) }); + return /* @__PURE__ */ u3(b, { children: element != null ? element : /* @__PURE__ */ u3(ErrorMessage, { message: "< View is rendering >" }) }); } function makeRenderableElement(object, sourcePath) { if (typeof object === "function") { - return g(object, {}); + return _(object, {}); } else if (Array.isArray(object)) { - return g( + return _( "div", {}, object.map((x4) => makeRenderableElement(x4, sourcePath)) @@ -35712,8 +41850,8 @@ var DatacoreJSRenderer = class extends import_obsidian3.MarkdownRenderChild { const renderer = async () => { return await asyncEvalInContext(primitiveScript, { dc: this.api, - h: g, - Fragment: m + h: _, + Fragment: b }); }; B( @@ -35737,8 +41875,7 @@ var DatacoreJSRenderer = class extends import_obsidian3.MarkdownRenderChild { } } onunload() { - if (this.loaded) - vn(this.container); + if (this.loaded) hn(this.container); this.loaded = false; } }; @@ -35767,19 +41904,17 @@ var ReactRenderer = class extends import_obsidian3.MarkdownRenderChild { ); } onunload() { - vn(this.container); + hn(this.container); } }; // src/api/ui/layout.tsx function Stack(props) { const { className, justify, align, style, children, ...rest } = props; - const extraStyle = q2(() => { + const extraStyle = T2(() => { let style2 = ""; - if (justify) - style2 += `justify-content: ${justify};`; - if (align) - style2 += `align-items: ${align};`; + if (justify) style2 += `justify-content: ${justify};`; + if (align) style2 += `align-items: ${align};`; return style2.length == 0 ? void 0 : style2; }, [justify, align]); return /* @__PURE__ */ u3( @@ -35794,12 +41929,10 @@ function Stack(props) { } function Group(props) { const { className, justify, align, style, children, ...rest } = props; - const extraStyle = q2(() => { + const extraStyle = T2(() => { let style2 = ""; - if (justify) - style2 += `justify-content: ${justify};`; - if (align) - style2 += `align-items: ${align};`; + if (justify) style2 += `justify-content: ${justify};`; + if (align) style2 += `align-items: ${align};`; return style2.length == 0 ? void 0 : style2; }, [justify, align]); return /* @__PURE__ */ u3( @@ -35848,7 +41981,7 @@ function Checkbox(props) { ...forwardingProps } = props; const [checked, setChecked] = useControlledState(defaultChecked != null ? defaultChecked : false, isChecked, onCheckChange); - const onChange3 = x2((event) => setChecked(event.currentTarget.checked), [setChecked]); + const onChange3 = q2((event) => setChecked(event.currentTarget.checked), [setChecked]); return /* @__PURE__ */ u3("label", { className: combineClasses("dc-checkbox", disabled2 ? "dc-checkbox-disabled" : void 0, className), children: [ /* @__PURE__ */ u3( "input", @@ -35867,7 +42000,7 @@ function Checkbox(props) { function Slider(props) { const { className, min: min2 = 0, max: max2 = 10, step = 1, value, defaultValue, onValueChange, ...forwardingProps } = props; const [slider, setSlider] = useControlledState(defaultValue != null ? defaultValue : 0, value, onValueChange); - const onChange3 = x2((event) => setSlider(parseFloat(event.currentTarget.value)), [setSlider]); + const onChange3 = q2((event) => setSlider(parseFloat(event.currentTarget.value)), [setSlider]); return /* @__PURE__ */ u3( "input", { @@ -35886,7 +42019,7 @@ function Slider(props) { function Switch(props) { const { className, disabled: disabled2, defaultChecked, checked, onToggleChange, ...forwardingProps } = props; const [toggled, setToggled] = useControlledState(defaultChecked != null ? defaultChecked : false, checked, onToggleChange); - const onChange3 = x2((event) => setToggled(event.currentTarget.checked), [setToggled]); + const onChange3 = q2((event) => setToggled(event.currentTarget.checked), [setToggled]); return /* @__PURE__ */ u3( "label", { @@ -35914,10 +42047,9 @@ function Switch(props) { function VanillaSelect(props) { var _a; const { className, options: options2 = [], value, defaultValue, onValueChange, ...forwardingProps } = props; - const [selectedValue, setSelectedValue] = Rn.useState((_a = value != null ? value : defaultValue) != null ? _a : ""); - Rn.useEffect(() => { - if (typeof value === "string") - setSelectedValue(value); + const [selectedValue, setSelectedValue] = xn.useState((_a = value != null ? value : defaultValue) != null ? _a : ""); + xn.useEffect(() => { + if (typeof value === "string") setSelectedValue(value); }, [value]); return /* @__PURE__ */ u3( "select", @@ -35934,19 +42066,18 @@ function VanillaSelect(props) { ); } function Icon(props) { - const { className, icon: icon3 } = props; - const ref = Rn.createRef(); - Rn.useEffect(() => { + const { className, icon: icon2 } = props; + const ref = xn.createRef(); + xn.useEffect(() => { if (ref.current) { - (0, import_obsidian4.setIcon)(ref.current, icon3); + (0, import_obsidian4.setIcon)(ref.current, icon2); } }, [ref]); - return /* @__PURE__ */ u3("span", { ref, className: combineClasses("dc-icon", className), "data-icon": icon3 }); + return /* @__PURE__ */ u3("span", { ref, className: combineClasses("dc-icon", className), "data-icon": icon2 }); } function combineClasses(fixed, ...rest) { - const nonempty = rest.filter((c3) => c3 !== void 0); - if (nonempty.length === 0) - return fixed; + const nonempty = rest.filter((c4) => c4 !== void 0); + if (nonempty.length === 0) return fixed; return [fixed, ...nonempty].join(" "); } @@ -35965,14 +42096,12 @@ var Fieldbearings; return object != null && typeof object === "object" && "field" in object && typeof object["field"] == "function"; } Fieldbearings2.isFieldbearing = isFieldbearing; - function get2(object, key) { + function get(object, key) { var _a; - if (isFieldbearing(object)) - return (_a = object.field(key)) == null ? void 0 : _a.value; - else - return object[key]; + if (isFieldbearing(object)) return (_a = object.field(key)) == null ? void 0 : _a.value; + else return object[key]; } - Fieldbearings2.get = get2; + Fieldbearings2.get = get; function getWithDefault(object, key, defaultValue) { return { key, @@ -35990,20 +42119,16 @@ var Fieldbearings; var Extractors; ((Extractors2) => { function isValidIntrinsic(object, key, exclude) { - if ((exclude == null ? void 0 : exclude.has(key)) || !key.startsWith("$")) - return false; + if ((exclude == null ? void 0 : exclude.has(key)) || !key.startsWith("$")) return false; const value = object[key]; - if (Literals.isFunction(value)) - return false; + if (Literals.isFunction(value)) return false; return true; } function* prototypeKeys(object) { - for (const key of Object.keys(object)) - yield key; + for (const key of Object.keys(object)) yield key; let proto = Object.getPrototypeOf(object); while (proto) { - for (const key of Object.getOwnPropertyNames(proto)) - yield key; + for (const key of Object.getOwnPropertyNames(proto)) yield key; proto = Object.getPrototypeOf(proto); } } @@ -36012,8 +42137,7 @@ var Extractors; if (key == null) { const fields = []; for (const key2 of prototypeKeys(object)) { - if (!isValidIntrinsic(object, key2, except)) - continue; + if (!isValidIntrinsic(object, key2, except)) continue; fields.push({ key: key2, value: object[key2] @@ -36037,8 +42161,7 @@ var Extractors; function frontmatter(front) { return (object, key) => { const frontmatter2 = front(object); - if (!frontmatter2) - return []; + if (!frontmatter2) return []; if (key == null) { const fields = []; for (const key2 of Object.keys(frontmatter2)) { @@ -36053,8 +42176,7 @@ var Extractors; return fields; } else { key = key.toLowerCase(); - if (!(key in frontmatter2)) - return []; + if (!(key in frontmatter2)) return []; const entry = frontmatter2[key]; return [ { @@ -36071,8 +42193,7 @@ var Extractors; function inlineFields(inlineMap) { return (object, key) => { const map = inlineMap(object); - if (!map) - return []; + if (!map) return []; if (key == null) { const fields = []; for (const field of Object.values(map)) { @@ -36091,8 +42212,7 @@ var Extractors; return fields; } else { key = key.toLowerCase(); - if (!(key in map)) - return []; + if (!(key in map)) return []; const field = map[key]; return [ { @@ -36111,15 +42231,14 @@ var Extractors; }; } Extractors2.inlineFields = inlineFields; - function merge2(...extractors) { + function merge(...extractors) { return (object, key) => { if (key == null) { const used = /* @__PURE__ */ new Set(); const fields = []; for (const extractor of extractors) { for (const field of extractor(object, void 0)) { - if (used.has(field.key.toLowerCase())) - continue; + if (used.has(field.key.toLowerCase())) continue; used.add(field.key.toLowerCase()); fields.push(field); } @@ -36128,18 +42247,18 @@ var Extractors; } else { for (const extractor of extractors) { const field = extractor(object, key); - if (field && field.length > 0) - return field; + if (field && field.length > 0) return field; } return []; } }; } - Extractors2.merge = merge2; + Extractors2.merge = merge; })(Extractors || (Extractors = {})); // src/index/import/inline-field.ts -var P6 = __toESM(require_parsimmon_umd_min()); +var P6 = __toESM(require_parsimmon()); +var import_emoji_regex3 = __toESM(require_emoji_regex()); // src/utils/data.ts function mapObjectValues(object, func) { @@ -36153,18 +42272,17 @@ function mapObjectValues(object, func) { // src/index/types/json/common.ts var JsonConversion; ((JsonConversion2) => { - JsonConversion2.NOOP_NORMALIZER = (input2) => input2; + JsonConversion2.NOOP_NORMALIZER = (input) => input; function json(literal) { const wrapped = Literals.wrapValue(literal); - if (!wrapped) - return null; + if (!wrapped) return null; switch (wrapped == null ? void 0 : wrapped.type) { case "array": return wrapped.value.map(JsonConversion2.json); case "object": return mapObjectValues(wrapped.value, JsonConversion2.json); case "date": - return { $_type: "date", value: wrapped.value.toISO({ extendedZone: true, includeOffset: true }) }; + return { $_type: "date", value: wrapped.value.toISO({ includeOffset: true }) }; case "link": return { $_type: "link", value: wrapped.value.toObject() }; case "duration": @@ -36180,17 +42298,16 @@ var JsonConversion; } JsonConversion2.json = json; function value(json2, normalizer = JsonConversion2.NOOP_NORMALIZER) { - if (json2 === null || json2 === void 0) - return null; + if (json2 === null || json2 === void 0) return null; if (Array.isArray(json2)) { - return normalizer(json2.map((input2) => JsonConversion2.value(input2, normalizer))); + return normalizer(json2.map((input) => JsonConversion2.value(input, normalizer))); } else if (typeof json2 === "object") { if (!("$_type" in json2)) return mapObjectValues(json2, (v3) => JsonConversion2.value(v3, normalizer)); const type = json2["$_type"]; switch (type) { case "date": - return normalizer(DateTime.fromISO(json2.value)); + return normalizer(DateTime.fromISO(json2.value, { setZone: true })); case "duration": return normalizer(Duration.fromISO(json2.value)); case "link": @@ -36218,8 +42335,8 @@ var INLINE_FIELD_WRAPPERS = Object.freeze({ function findClosing(line2, start, open, close) { let nesting = 0; let escaped = false; - for (let index2 = start; index2 < line2.length; index2++) { - let char2 = line2.charAt(index2); + for (let index = start; index < line2.length; index++) { + let char2 = line2.charAt(index); if (char2 == "\\") { escaped = !escaped; continue; @@ -36228,34 +42345,27 @@ function findClosing(line2, start, open, close) { escaped = false; continue; } - if (char2 == open) - nesting++; - else if (char2 == close) - nesting--; - if (nesting < 0) - return { value: line2.substring(start, index2).trim(), endIndex: index2 + 1 }; + if (char2 == open) nesting++; + else if (char2 == close) nesting--; + if (nesting < 0) return { value: line2.substring(start, index).trim(), endIndex: index + 1 }; escaped = false; } return void 0; } function findSeparator(line2, start) { let sep = line2.indexOf("::", start); - if (sep < 0) - return void 0; + if (sep < 0) return void 0; return { key: line2.substring(start, sep).trim(), valueIndex: sep + 2 }; } function findSpecificInlineField(line2, start) { let open = line2.charAt(start); let key = findSeparator(line2, start + 1); - if (key === void 0) - return void 0; + if (key === void 0) return void 0; for (let sep of Object.keys(INLINE_FIELD_WRAPPERS).concat(Object.values(INLINE_FIELD_WRAPPERS))) { - if (key.key.includes(sep)) - return void 0; + if (key.key.includes(sep)) return void 0; } let value = findClosing(line2, key.valueIndex, open, INLINE_FIELD_WRAPPERS[open]); - if (value === void 0) - return void 0; + if (value === void 0) return void 0; return { key: key.key, value: value.value, @@ -36279,9 +42389,8 @@ function extractInlineFields(line2, includeTaskFields = false) { foundIndex = line2.indexOf(wrapper, parsedField.end); } } - if (includeTaskFields) - fields = fields.concat(extractSpecialTaskFields(line2)); - fields.sort((a3, b3) => a3.start - b3.start); + if (includeTaskFields) fields = fields.concat(extractSpecialTaskFields(line2)); + fields.sort((a4, b3) => a4.start - b3.start); let filteredFields = []; for (let i4 = 0; i4 < fields.length; i4++) { if (i4 == 0 || filteredFields[filteredFields.length - 1].end < fields[i4].start) { @@ -36291,7 +42400,7 @@ function extractInlineFields(line2, includeTaskFields = false) { return filteredFields; } var FULL_LINE_KEY_PART = P6.alt( - P6.regexp(new RegExp(emoji_regex_default(), "u")), + P6.regexp(new RegExp((0, import_emoji_regex3.default)(), "u")), P6.regexp(/[0-9\p{Letter}\w\s_/-]+/u) ).many().map((parts) => parts.join("")); var FULL_LINE_KEY_PARSER = P6.regexp(/[^0-9\w\p{Letter}]*/u).then(FULL_LINE_KEY_PART).skip(P6.regexp(/[_\*~`]*/u)); @@ -36310,15 +42419,14 @@ var EMOJI_REGEXES = [ function extractSpecialTaskFields(line2) { let results = []; for (let { regex: regex2, key } of EMOJI_REGEXES) { - const match4 = regex2.exec(line2); - if (!match4) - continue; + const match3 = regex2.exec(line2); + if (!match3) continue; results.push({ key, - value: match4[1], - start: match4.index, - startValue: match4.index + 1, - end: match4.index + match4[0].length, + value: match3[1], + start: match3.index, + startValue: match3.index + 1, + end: match3.index + match3[0].length, wrapping: "emoji-shorthand" }); } @@ -36327,17 +42435,14 @@ function extractSpecialTaskFields(line2) { function setInlineField(source, key, value) { let existing = extractInlineFields(source); let existingKeys = existing.filter((f4) => f4.key == key); - if (existingKeys.length > 2 || existingKeys.length == 0 && !value) - return source; + if (existingKeys.length > 2 || existingKeys.length == 0 && !value) return source; let existingKey = existingKeys[0]; let annotation = value ? `[${key}:: ${value}]` : ""; if (existingKey) { let prefix2 = source.substring(0, existingKey.start); let suffix = source.substring(existingKey.end); - if (annotation) - return `${prefix2}${annotation}${suffix}`; - else - return `${prefix2}${suffix.trimStart()}`; + if (annotation) return `${prefix2}${annotation}${suffix}`; + else return `${prefix2}${suffix.trimStart()}`; } else if (annotation) { return `${source.trimEnd()} ${annotation}`; } @@ -36346,8 +42451,7 @@ function setInlineField(source, key, value) { function setEmojiShorthandCompletionField(source, value) { const existing = extractInlineFields(source, true); const existingKeys = existing.filter((f4) => f4.key === "completion" && f4.wrapping === "emoji-shorthand"); - if (existingKeys.length > 2 || existingKeys.length == 0 && !value) - return source; + if (existingKeys.length > 2 || existingKeys.length == 0 && !value) return source; const annotation = value ? ` \u2705 ${value}` : ""; let existingKey = existingKeys[0]; if (existingKey) { @@ -36360,7 +42464,7 @@ function setEmojiShorthandCompletionField(source, value) { } // src/index/types/markdown.ts -var _MarkdownPage = class { +var _MarkdownPage = class _MarkdownPage { constructor(init) { // Use static types for all markdown files. this.$types = _MarkdownPage.TYPES; @@ -36442,15 +42546,15 @@ var _MarkdownPage = class { }; } }; -var MarkdownPage = _MarkdownPage; /** All of the types that a markdown file is. */ -MarkdownPage.TYPES = [FILE_TYPE, "markdown", "page", TAGGABLE_TYPE, LINKABLE_TYPE, LINKBEARING_TYPE, FIELDBEARING_TYPE]; -MarkdownPage.FIELD_DEF = Extractors.merge( +_MarkdownPage.TYPES = [FILE_TYPE, "markdown", "page", TAGGABLE_TYPE, LINKABLE_TYPE, LINKBEARING_TYPE, FIELDBEARING_TYPE]; +_MarkdownPage.FIELD_DEF = Extractors.merge( Extractors.intrinsics(), Extractors.frontmatter((f4) => f4.$frontmatter), Extractors.inlineFields((f4) => f4.$infields) ); -var _MarkdownSection = class { +var MarkdownPage = _MarkdownPage; +var _MarkdownSection = class _MarkdownSection { constructor(init) { /** Path of the file that this section is in. */ this.$types = _MarkdownSection.TYPES; @@ -36516,14 +42620,14 @@ var _MarkdownSection = class { return `${file}/section${ordinal}/${first8}`; } }; -var MarkdownSection = _MarkdownSection; /** All of the types that a markdown section is. */ -MarkdownSection.TYPES = ["markdown", "section", TAGGABLE_TYPE, LINKABLE_TYPE, LINKBEARING_TYPE, FIELDBEARING_TYPE]; -MarkdownSection.FIELD_DEF = Extractors.merge( +_MarkdownSection.TYPES = ["markdown", "section", TAGGABLE_TYPE, LINKABLE_TYPE, LINKBEARING_TYPE, FIELDBEARING_TYPE]; +_MarkdownSection.FIELD_DEF = Extractors.merge( Extractors.intrinsics(), Extractors.inlineFields((f4) => f4.$infields) ); -var _MarkdownBlock = class { +var MarkdownSection = _MarkdownSection; +var _MarkdownBlock = class _MarkdownBlock { constructor(init) { this.$types = _MarkdownBlock.TYPES; this.$typename = "Block"; @@ -36551,10 +42655,8 @@ var _MarkdownBlock = class { } /** If this block has a block ID, the link to this block. */ get $link() { - if (this.$blockId) - return Link.block(this.$file, this.$blockId); - else - return void 0; + if (this.$blockId) return Link.block(this.$file, this.$blockId); + else return void 0; } /** All of the indexed fields in this object. */ get fields() { @@ -36585,13 +42687,13 @@ var _MarkdownBlock = class { return `${file}/block${ordinal}`; } }; -var MarkdownBlock = _MarkdownBlock; -MarkdownBlock.TYPES = ["markdown", "block", LINKBEARING_TYPE, TAGGABLE_TYPE, FIELDBEARING_TYPE]; -MarkdownBlock.FIELD_DEF = Extractors.merge( +_MarkdownBlock.TYPES = ["markdown", "block", LINKBEARING_TYPE, TAGGABLE_TYPE, FIELDBEARING_TYPE]; +_MarkdownBlock.FIELD_DEF = Extractors.merge( Extractors.intrinsics(), Extractors.inlineFields((f4) => f4.$infields) ); -var _MarkdownListBlock = class extends MarkdownBlock { +var MarkdownBlock = _MarkdownBlock; +var _MarkdownListBlock = class _MarkdownListBlock extends MarkdownBlock { constructor(init) { super(init); this.$types = _MarkdownListBlock.TYPES; @@ -36620,9 +42722,9 @@ var _MarkdownListBlock = class extends MarkdownBlock { }); } }; +_MarkdownListBlock.TYPES = ["markdown", "block", "block-list", TAGGABLE_TYPE, LINKBEARING_TYPE]; var MarkdownListBlock = _MarkdownListBlock; -MarkdownListBlock.TYPES = ["markdown", "block", "block-list", TAGGABLE_TYPE, LINKBEARING_TYPE]; -var _MarkdownCodeblock = class extends MarkdownBlock { +var _MarkdownCodeblock = class _MarkdownCodeblock extends MarkdownBlock { constructor(init) { super(init); this.$types = _MarkdownCodeblock.TYPES; @@ -36668,12 +42770,12 @@ var _MarkdownCodeblock = class extends MarkdownBlock { return `${file}/codeblock${line2}`; } }; -var MarkdownCodeblock = _MarkdownCodeblock; -MarkdownCodeblock.TYPES = ["markdown", "block", "codeblock", TAGGABLE_TYPE, LINKBEARING_TYPE, FIELDBEARING_TYPE]; -MarkdownCodeblock.SUB_FIELD_DEF = Extractors.merge( +_MarkdownCodeblock.TYPES = ["markdown", "block", "codeblock", TAGGABLE_TYPE, LINKBEARING_TYPE, FIELDBEARING_TYPE]; +_MarkdownCodeblock.SUB_FIELD_DEF = Extractors.merge( MarkdownBlock.FIELD_DEF ); -var _MarkdownDatablock = class extends MarkdownBlock { +var MarkdownCodeblock = _MarkdownCodeblock; +var _MarkdownDatablock = class _MarkdownDatablock extends MarkdownBlock { constructor(init) { super(init); this.$types = _MarkdownDatablock.TYPES; @@ -36718,13 +42820,13 @@ var _MarkdownDatablock = class extends MarkdownBlock { return `${file}/datablock${line2}`; } }; -var MarkdownDatablock = _MarkdownDatablock; -MarkdownDatablock.TYPES = ["markdown", "block", "datablock", TAGGABLE_TYPE, LINKBEARING_TYPE, FIELDBEARING_TYPE]; -MarkdownDatablock.SUB_FIELD_DEF = Extractors.merge( +_MarkdownDatablock.TYPES = ["markdown", "block", "datablock", TAGGABLE_TYPE, LINKBEARING_TYPE, FIELDBEARING_TYPE]; +_MarkdownDatablock.SUB_FIELD_DEF = Extractors.merge( MarkdownBlock.FIELD_DEF, Extractors.frontmatter((f4) => f4.$data) ); -var _MarkdownListItem = class { +var MarkdownDatablock = _MarkdownDatablock; +var _MarkdownListItem = class _MarkdownListItem { constructor(init) { this.$types = _MarkdownListItem.TYPES; this.$typename = "List Item"; @@ -36732,8 +42834,7 @@ var _MarkdownListItem = class { } /** Create a list item from a serialized object. */ static from(object, file, normalizer = NOOP_NORMALIZER) { - if (object.$type === "task") - return MarkdownTaskItem.from(object, file, normalizer); + if (object.$type === "task") return MarkdownTaskItem.from(object, file, normalizer); const elements = object.$elements.map((elem) => _MarkdownListItem.from(elem, file, normalizer)); return new _MarkdownListItem({ $file: file, @@ -36760,8 +42861,7 @@ var _MarkdownListItem = class { } /** Cleaned text that is garaunteed to be non-null and has indenation and inline fields removed. */ get $cleantext() { - if (!this.$text) - return ""; + if (!this.$text) return ""; return this.$text.replace(/(.*?)([\[\(][^:(\[]+::\s*.*?[\]\)]\s*)$/gm, "$1").trim(); } /** All of the indexed fields in this object. */ @@ -36796,13 +42896,13 @@ var _MarkdownListItem = class { return `${file}/list${line2}`; } }; -var MarkdownListItem = _MarkdownListItem; -MarkdownListItem.TYPES = ["markdown", "list-item", LINKBEARING_TYPE, TAGGABLE_TYPE, FIELDBEARING_TYPE]; -MarkdownListItem.FIELD_DEF = Extractors.merge( +_MarkdownListItem.TYPES = ["markdown", "list-item", LINKBEARING_TYPE, TAGGABLE_TYPE, FIELDBEARING_TYPE]; +_MarkdownListItem.FIELD_DEF = Extractors.merge( Extractors.intrinsics(), Extractors.inlineFields((f4) => f4.$infields) ); -var _MarkdownTaskItem = class extends MarkdownListItem { +var MarkdownListItem = _MarkdownListItem; +var _MarkdownTaskItem = class _MarkdownTaskItem extends MarkdownListItem { constructor(init) { super(init); this.$types = _MarkdownTaskItem.TYPES; @@ -36836,8 +42936,8 @@ var _MarkdownTaskItem = class extends MarkdownListItem { return this.$status === "x" || this.$status === "X"; } }; +_MarkdownTaskItem.TYPES = ["markdown", "list-item", "task", LINKBEARING_TYPE, TAGGABLE_TYPE, FIELDBEARING_TYPE]; var MarkdownTaskItem = _MarkdownTaskItem; -MarkdownTaskItem.TYPES = ["markdown", "list-item", "task", LINKBEARING_TYPE, TAGGABLE_TYPE, FIELDBEARING_TYPE]; function jsonFrontmatterEntry(raw) { return { key: raw.key, @@ -36852,63 +42952,53 @@ function valueFrontmatterEntry(raw) { raw: raw.raw }; } -function normalizeLinks(input2, normalizer) { - return Literals.mapLeaves(input2, (value) => { - if (Literals.isLink(value)) - return normalizer(value); - else - return value; +function normalizeLinks(input, normalizer) { + return Literals.mapLeaves(input, (value) => { + if (Literals.isLink(value)) return normalizer(value); + else return value; }); } -function gatherLinks(input2) { +function gatherLinks(input) { const result = []; - Literals.mapLeaves(input2, (value) => { - if (Literals.isLink(value)) - result.push(value); + Literals.mapLeaves(input, (value) => { + if (Literals.isLink(value)) result.push(value); return null; }); return result; } function gatherTags(data) { - function recurse(input2) { - if (Literals.isString(input2)) - return [input2.startsWith("#") ? input2 : "#" + input2]; - else if (Literals.isArray(input2)) - return input2.flatMap(recurse); - else - return []; + function recurse(input) { + if (Literals.isString(input)) return [input.startsWith("#") ? input : "#" + input]; + else if (Literals.isArray(input)) return input.flatMap(recurse); + else return []; } let tags = []; - if ("tag" in data) - tags = tags.concat(recurse(data["tags"])); - if ("tags" in data) - tags = tags.concat(recurse(data["tags"])); + if ("tag" in data) tags = tags.concat(recurse(data["tags"])); + if ("tags" in data) tags = tags.concat(recurse(data["tags"])); return tags; } var NOOP_NORMALIZER = (x4) => x4; // node_modules/@babel/runtime/helpers/esm/typeof.js -function _typeof(o3) { +function _typeof(o4) { "@babel/helpers - typeof"; - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o4) { - return typeof o4; - } : function(o4) { - return o4 && "function" == typeof Symbol && o4.constructor === Symbol && o4 !== Symbol.prototype ? "symbol" : typeof o4; - }, _typeof(o3); + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o5) { + return typeof o5; + } : function(o5) { + return o5 && "function" == typeof Symbol && o5.constructor === Symbol && o5 !== Symbol.prototype ? "symbol" : typeof o5; + }, _typeof(o4); } // node_modules/@babel/runtime/helpers/esm/toPrimitive.js -function toPrimitive(t4, r3) { - if ("object" != _typeof(t4) || !t4) - return t4; +function toPrimitive(t4, r4) { + if ("object" != _typeof(t4) || !t4) return t4; var e3 = t4[Symbol.toPrimitive]; if (void 0 !== e3) { - var i4 = e3.call(t4, r3 || "default"); - if ("object" != _typeof(i4)) - return i4; + var i4 = e3.call(t4, r4 || "default"); + if ("object" != _typeof(i4)) return i4; throw new TypeError("@@toPrimitive must return a primitive value."); } - return ("string" === r3 ? String : Number)(t4); + return ("string" === r4 ? String : Number)(t4); } // node_modules/@babel/runtime/helpers/esm/toPropertyKey.js @@ -36918,100 +43008,80 @@ function toPropertyKey(t4) { } // node_modules/@babel/runtime/helpers/esm/defineProperty.js -function _defineProperty(obj, key, value) { - key = toPropertyKey(key); - if (key in obj) { - Object.defineProperty(obj, key, { - value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - return obj; +function _defineProperty(e3, r4, t4) { + return (r4 = toPropertyKey(r4)) in e3 ? Object.defineProperty(e3, r4, { + value: t4, + enumerable: true, + configurable: true, + writable: true + }) : e3[r4] = t4, e3; } // node_modules/@babel/runtime/helpers/esm/objectSpread2.js -function ownKeys(e3, r3) { +function ownKeys(e3, r4) { var t4 = Object.keys(e3); if (Object.getOwnPropertySymbols) { - var o3 = Object.getOwnPropertySymbols(e3); - r3 && (o3 = o3.filter(function(r4) { - return Object.getOwnPropertyDescriptor(e3, r4).enumerable; - })), t4.push.apply(t4, o3); + var o4 = Object.getOwnPropertySymbols(e3); + r4 && (o4 = o4.filter(function(r5) { + return Object.getOwnPropertyDescriptor(e3, r5).enumerable; + })), t4.push.apply(t4, o4); } return t4; } function _objectSpread2(e3) { - for (var r3 = 1; r3 < arguments.length; r3++) { - var t4 = null != arguments[r3] ? arguments[r3] : {}; - r3 % 2 ? ownKeys(Object(t4), true).forEach(function(r4) { - _defineProperty(e3, r4, t4[r4]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e3, Object.getOwnPropertyDescriptors(t4)) : ownKeys(Object(t4)).forEach(function(r4) { - Object.defineProperty(e3, r4, Object.getOwnPropertyDescriptor(t4, r4)); + for (var r4 = 1; r4 < arguments.length; r4++) { + var t4 = null != arguments[r4] ? arguments[r4] : {}; + r4 % 2 ? ownKeys(Object(t4), true).forEach(function(r5) { + _defineProperty(e3, r5, t4[r5]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e3, Object.getOwnPropertyDescriptors(t4)) : ownKeys(Object(t4)).forEach(function(r5) { + Object.defineProperty(e3, r5, Object.getOwnPropertyDescriptor(t4, r5)); }); } return e3; } // node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js -function _arrayWithHoles(arr) { - if (Array.isArray(arr)) - return arr; +function _arrayWithHoles(r4) { + if (Array.isArray(r4)) return r4; } // node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js -function _iterableToArrayLimit(r3, l4) { - var t4 = null == r3 ? null : "undefined" != typeof Symbol && r3[Symbol.iterator] || r3["@@iterator"]; +function _iterableToArrayLimit(r4, l4) { + var t4 = null == r4 ? null : "undefined" != typeof Symbol && r4[Symbol.iterator] || r4["@@iterator"]; if (null != t4) { - var e3, n3, i4, u4, a3 = [], f4 = true, o3 = false; + var e3, n3, i4, u4, a4 = [], f4 = true, o4 = false; try { - if (i4 = (t4 = t4.call(r3)).next, 0 === l4) { - if (Object(t4) !== t4) - return; + if (i4 = (t4 = t4.call(r4)).next, 0 === l4) { + if (Object(t4) !== t4) return; f4 = false; - } else - for (; !(f4 = (e3 = i4.call(t4)).done) && (a3.push(e3.value), a3.length !== l4); f4 = true) - ; - } catch (r4) { - o3 = true, n3 = r4; + } else for (; !(f4 = (e3 = i4.call(t4)).done) && (a4.push(e3.value), a4.length !== l4); f4 = true) ; + } catch (r5) { + o4 = true, n3 = r5; } finally { try { - if (!f4 && null != t4["return"] && (u4 = t4["return"](), Object(u4) !== u4)) - return; + if (!f4 && null != t4["return"] && (u4 = t4["return"](), Object(u4) !== u4)) return; } finally { - if (o3) - throw n3; + if (o4) throw n3; } } - return a3; + return a4; } } // node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) - len = arr.length; - for (var i4 = 0, arr2 = new Array(len); i4 < len; i4++) - arr2[i4] = arr[i4]; - return arr2; +function _arrayLikeToArray(r4, a4) { + (null == a4 || a4 > r4.length) && (a4 = r4.length); + for (var e3 = 0, n3 = Array(a4); e3 < a4; e3++) n3[e3] = r4[e3]; + return n3; } // node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js -function _unsupportedIterableToArray(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray(o3, minLen); +function _unsupportedIterableToArray(r4, a4) { + if (r4) { + if ("string" == typeof r4) return _arrayLikeToArray(r4, a4); + var t4 = {}.toString.call(r4).slice(8, -1); + return "Object" === t4 && r4.constructor && (t4 = r4.constructor.name), "Map" === t4 || "Set" === t4 ? Array.from(r4) : "Arguments" === t4 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t4) ? _arrayLikeToArray(r4, a4) : void 0; + } } // node_modules/@babel/runtime/helpers/esm/nonIterableRest.js @@ -37020,72 +43090,59 @@ function _nonIterableRest() { } // node_modules/@babel/runtime/helpers/esm/slicedToArray.js -function _slicedToArray(arr, i4) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i4) || _unsupportedIterableToArray(arr, i4) || _nonIterableRest(); +function _slicedToArray(r4, e3) { + return _arrayWithHoles(r4) || _iterableToArrayLimit(r4, e3) || _unsupportedIterableToArray(r4, e3) || _nonIterableRest(); } // node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) - return {}; - var target = {}; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - if (excluded.indexOf(key) >= 0) - continue; - target[key] = source[key]; - } +function _objectWithoutPropertiesLoose(r4, e3) { + if (null == r4) return {}; + var t4 = {}; + for (var n3 in r4) if ({}.hasOwnProperty.call(r4, n3)) { + if (e3.includes(n3)) continue; + t4[n3] = r4[n3]; } - return target; + return t4; } // node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js -function _objectWithoutProperties(source, excluded) { - if (source == null) - return {}; - var target = _objectWithoutPropertiesLoose(source, excluded); - var key, i4; +function _objectWithoutProperties(e3, t4) { + if (null == e3) return {}; + var o4, r4, i4 = _objectWithoutPropertiesLoose(e3, t4); if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - for (i4 = 0; i4 < sourceSymbolKeys.length; i4++) { - key = sourceSymbolKeys[i4]; - if (excluded.indexOf(key) >= 0) - continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) - continue; - target[key] = source[key]; - } + var s4 = Object.getOwnPropertySymbols(e3); + for (r4 = 0; r4 < s4.length; r4++) o4 = s4[r4], t4.includes(o4) || {}.propertyIsEnumerable.call(e3, o4) && (i4[o4] = e3[o4]); } - return target; + return i4; } // node_modules/react-select/dist/useStateManager-7e1e8489.esm.js var _excluded = ["defaultInputValue", "defaultMenuIsOpen", "defaultValue", "inputValue", "menuIsOpen", "onChange", "onInputChange", "onMenuClose", "onMenuOpen", "value"]; -function useStateManager(_ref4) { - var _ref$defaultInputValu = _ref4.defaultInputValue, defaultInputValue = _ref$defaultInputValu === void 0 ? "" : _ref$defaultInputValu, _ref$defaultMenuIsOpe = _ref4.defaultMenuIsOpen, defaultMenuIsOpen = _ref$defaultMenuIsOpe === void 0 ? false : _ref$defaultMenuIsOpe, _ref$defaultValue = _ref4.defaultValue, defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue, propsInputValue = _ref4.inputValue, propsMenuIsOpen = _ref4.menuIsOpen, propsOnChange = _ref4.onChange, propsOnInputChange = _ref4.onInputChange, propsOnMenuClose = _ref4.onMenuClose, propsOnMenuOpen = _ref4.onMenuOpen, propsValue = _ref4.value, restSelectProps = _objectWithoutProperties(_ref4, _excluded); - var _useState = p2(propsInputValue !== void 0 ? propsInputValue : defaultInputValue), _useState2 = _slicedToArray(_useState, 2), stateInputValue = _useState2[0], setStateInputValue = _useState2[1]; - var _useState3 = p2(propsMenuIsOpen !== void 0 ? propsMenuIsOpen : defaultMenuIsOpen), _useState4 = _slicedToArray(_useState3, 2), stateMenuIsOpen = _useState4[0], setStateMenuIsOpen = _useState4[1]; - var _useState5 = p2(propsValue !== void 0 ? propsValue : defaultValue), _useState6 = _slicedToArray(_useState5, 2), stateValue = _useState6[0], setStateValue = _useState6[1]; - var onChange3 = x2(function(value2, actionMeta) { +function useStateManager(_ref3) { + var _ref$defaultInputValu = _ref3.defaultInputValue, defaultInputValue = _ref$defaultInputValu === void 0 ? "" : _ref$defaultInputValu, _ref$defaultMenuIsOpe = _ref3.defaultMenuIsOpen, defaultMenuIsOpen = _ref$defaultMenuIsOpe === void 0 ? false : _ref$defaultMenuIsOpe, _ref$defaultValue = _ref3.defaultValue, defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue, propsInputValue = _ref3.inputValue, propsMenuIsOpen = _ref3.menuIsOpen, propsOnChange = _ref3.onChange, propsOnInputChange = _ref3.onInputChange, propsOnMenuClose = _ref3.onMenuClose, propsOnMenuOpen = _ref3.onMenuOpen, propsValue = _ref3.value, restSelectProps = _objectWithoutProperties(_ref3, _excluded); + var _useState = h2(propsInputValue !== void 0 ? propsInputValue : defaultInputValue), _useState2 = _slicedToArray(_useState, 2), stateInputValue = _useState2[0], setStateInputValue = _useState2[1]; + var _useState3 = h2(propsMenuIsOpen !== void 0 ? propsMenuIsOpen : defaultMenuIsOpen), _useState4 = _slicedToArray(_useState3, 2), stateMenuIsOpen = _useState4[0], setStateMenuIsOpen = _useState4[1]; + var _useState5 = h2(propsValue !== void 0 ? propsValue : defaultValue), _useState6 = _slicedToArray(_useState5, 2), stateValue = _useState6[0], setStateValue = _useState6[1]; + var onChange3 = q2(function(value2, actionMeta) { if (typeof propsOnChange === "function") { propsOnChange(value2, actionMeta); } setStateValue(value2); }, [propsOnChange]); - var onInputChange = x2(function(value2, actionMeta) { + var onInputChange = q2(function(value2, actionMeta) { var newValue; if (typeof propsOnInputChange === "function") { newValue = propsOnInputChange(value2, actionMeta); } setStateInputValue(newValue !== void 0 ? newValue : value2); }, [propsOnInputChange]); - var onMenuOpen = x2(function() { + var onMenuOpen = q2(function() { if (typeof propsOnMenuOpen === "function") { propsOnMenuOpen(); } setStateMenuIsOpen(true); }, [propsOnMenuOpen]); - var onMenuClose = x2(function() { + var onMenuClose = q2(function() { if (typeof propsOnMenuClose === "function") { propsOnMenuClose(); } @@ -37107,83 +43164,59 @@ function useStateManager(_ref4) { // node_modules/@babel/runtime/helpers/esm/extends.js function _extends() { - _extends = Object.assign ? Object.assign.bind() : function(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4]; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } + return _extends = Object.assign ? Object.assign.bind() : function(n3) { + for (var e3 = 1; e3 < arguments.length; e3++) { + var t4 = arguments[e3]; + for (var r4 in t4) ({}).hasOwnProperty.call(t4, r4) && (n3[r4] = t4[r4]); } - return target; - }; - return _extends.apply(this, arguments); + return n3; + }, _extends.apply(null, arguments); } // node_modules/@babel/runtime/helpers/esm/classCallCheck.js -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } +function _classCallCheck(a4, n3) { + if (!(a4 instanceof n3)) throw new TypeError("Cannot call a class as a function"); } // node_modules/@babel/runtime/helpers/esm/createClass.js -function _defineProperties(target, props) { - for (var i4 = 0; i4 < props.length; i4++) { - var descriptor = props[i4]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor); +function _defineProperties(e3, r4) { + for (var t4 = 0; t4 < r4.length; t4++) { + var o4 = r4[t4]; + o4.enumerable = o4.enumerable || false, o4.configurable = true, "value" in o4 && (o4.writable = true), Object.defineProperty(e3, toPropertyKey(o4.key), o4); } } -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) - _defineProperties(Constructor.prototype, protoProps); - if (staticProps) - _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { +function _createClass(e3, r4, t4) { + return r4 && _defineProperties(e3.prototype, r4), t4 && _defineProperties(e3, t4), Object.defineProperty(e3, "prototype", { writable: false - }); - return Constructor; + }), e3; } // node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js -function _setPrototypeOf(o3, p4) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o4, p5) { - o4.__proto__ = p5; - return o4; - }; - return _setPrototypeOf(o3, p4); +function _setPrototypeOf(t4, e3) { + return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(t5, e4) { + return t5.__proto__ = e4, t5; + }, _setPrototypeOf(t4, e3); } // node_modules/@babel/runtime/helpers/esm/inherits.js -function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - subClass.prototype = Object.create(superClass && superClass.prototype, { +function _inherits(t4, e3) { + if ("function" != typeof e3 && null !== e3) throw new TypeError("Super expression must either be null or a function"); + t4.prototype = Object.create(e3 && e3.prototype, { constructor: { - value: subClass, + value: t4, writable: true, configurable: true } - }); - Object.defineProperty(subClass, "prototype", { + }), Object.defineProperty(t4, "prototype", { writable: false - }); - if (superClass) - _setPrototypeOf(subClass, superClass); + }), e3 && _setPrototypeOf(t4, e3); } // node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js -function _getPrototypeOf(o3) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf2(o4) { - return o4.__proto__ || Object.getPrototypeOf(o4); - }; - return _getPrototypeOf(o3); +function _getPrototypeOf(t4) { + return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t5) { + return t5.__proto__ || Object.getPrototypeOf(t5); + }, _getPrototypeOf(t4); } // node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js @@ -37199,48 +43232,39 @@ function _isNativeReflectConstruct() { } // node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js -function _assertThisInitialized(self2) { - if (self2 === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - return self2; +function _assertThisInitialized(e3) { + if (void 0 === e3) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e3; } // node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js -function _possibleConstructorReturn(self2, call) { - if (call && (_typeof(call) === "object" || typeof call === "function")) { - return call; - } else if (call !== void 0) { - throw new TypeError("Derived constructors may only return object or undefined"); - } - return _assertThisInitialized(self2); +function _possibleConstructorReturn(t4, e3) { + if (e3 && ("object" == _typeof(e3) || "function" == typeof e3)) return e3; + if (void 0 !== e3) throw new TypeError("Derived constructors may only return object or undefined"); + return _assertThisInitialized(t4); } // node_modules/@babel/runtime/helpers/esm/createSuper.js -function _createSuper(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); +function _createSuper(t4) { + var r4 = _isNativeReflectConstruct(); + return function() { + var e3, o4 = _getPrototypeOf(t4); + if (r4) { + var s4 = _getPrototypeOf(this).constructor; + e3 = Reflect.construct(o4, arguments, s4); + } else e3 = o4.apply(this, arguments); + return _possibleConstructorReturn(this, e3); }; } // node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) - return _arrayLikeToArray(arr); +function _arrayWithoutHoles(r4) { + if (Array.isArray(r4)) return _arrayLikeToArray(r4); } // node_modules/@babel/runtime/helpers/esm/iterableToArray.js -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) - return Array.from(iter); +function _iterableToArray(r4) { + if ("undefined" != typeof Symbol && null != r4[Symbol.iterator] || null != r4["@@iterator"]) return Array.from(r4); } // node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js @@ -37249,11 +43273,12 @@ function _nonIterableSpread() { } // node_modules/@babel/runtime/helpers/esm/toConsumableArray.js -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +function _toConsumableArray(r4) { + return _arrayWithoutHoles(r4) || _iterableToArray(r4) || _unsupportedIterableToArray(r4) || _nonIterableSpread(); } -// node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js +// node_modules/@emotion/sheet/dist/emotion-sheet.esm.js +var isDevelopment = false; function sheetForTag(tag) { if (tag.sheet) { return tag.sheet; @@ -37263,6 +43288,7 @@ function sheetForTag(tag) { return document.styleSheets[i4]; } } + return void 0; } function createStyleElement(options2) { var tag = document.createElement("style"); @@ -37293,7 +43319,7 @@ var StyleSheet = /* @__PURE__ */ function() { _this.container.insertBefore(tag, before); _this.tags.push(tag); }; - this.isSpeedy = options2.speedy === void 0 ? false : options2.speedy; + this.isSpeedy = options2.speedy === void 0 ? !isDevelopment : options2.speedy; this.tags = []; this.ctr = 0; this.nonce = options2.nonce; @@ -37312,21 +43338,11 @@ var StyleSheet = /* @__PURE__ */ function() { this._insertTag(createStyleElement(this)); } var tag = this.tags[this.tags.length - 1]; - if (true) { - var isImportRule3 = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105; - if (isImportRule3 && this._alreadyInsertedOrderInsensitiveRule) { - console.error("You're attempting to insert the following rule:\n" + rule + "\n\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules."); - } - this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule3; - } if (this.isSpeedy) { var sheet = sheetForTag(tag); try { sheet.insertRule(rule, sheet.cssRules.length); } catch (e3) { - if (!/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) { - console.error('There was a problem inserting the following rule: "' + rule + '"', e3); - } } } else { tag.appendChild(document.createTextNode(rule)); @@ -37335,13 +43351,11 @@ var StyleSheet = /* @__PURE__ */ function() { }; _proto.flush = function flush() { this.tags.forEach(function(tag) { - return tag.parentNode && tag.parentNode.removeChild(tag); + var _tag$parentNode; + return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag); }); this.tags = []; this.ctr = 0; - if (true) { - this._alreadyInsertedOrderInsensitiveRule = false; - } }; return StyleSheet2; }(); @@ -37367,7 +43381,7 @@ function hash(value, length2) { function trim(value) { return value.trim(); } -function match3(value, pattern) { +function match2(value, pattern) { return (value = pattern.exec(value)) ? value[0] : value; } function replace(value, pattern, replacement) { @@ -37376,11 +43390,11 @@ function replace(value, pattern, replacement) { function indexof(value, search) { return value.indexOf(search); } -function charat(value, index2) { - return value.charCodeAt(index2) | 0; +function charat(value, index) { + return value.charCodeAt(index) | 0; } -function substr(value, begin3, end3) { - return value.slice(begin3, end3); +function substr(value, begin2, end2) { + return value.slice(begin2, end2); } function strlen(value) { return value.length; @@ -37388,11 +43402,11 @@ function strlen(value) { function sizeof(value) { return value.length; } -function append(value, array2) { - return array2.push(value), value; +function append(value, array) { + return array.push(value), value; } -function combine(array2, callback) { - return array2.map(callback).join(""); +function combine(array, callback) { + return array.map(callback).join(""); } // node_modules/stylis/src/Tokenizer.js @@ -37417,7 +43431,7 @@ function prev() { column = 1, line--; return character; } -function next2() { +function next() { character = position < length ? charat(characters, position++) : 0; if (column++, character === 10) column = 1, line++; @@ -37429,17 +43443,19 @@ function peek() { function caret() { return position; } -function slice(begin3, end3) { - return substr(characters, begin3, end3); +function slice(begin2, end2) { + return substr(characters, begin2, end2); } function token(type) { switch (type) { + // \0 \t \n \r \s whitespace token case 0: case 9: case 10: case 13: case 32: return 5; + // ! + , / > @ ~ isolate token case 33: case 43: case 44: @@ -37447,17 +43463,21 @@ function token(type) { case 62: case 64: case 126: + // ; { } breakpoint token case 59: case 123: case 125: return 4; + // : accompanied token case 58: return 3; + // " ' ( [ opening delimit token case 34: case 39: case 40: case 91: return 2; + // ) ] closing delimit token case 41: case 93: return 1; @@ -37476,57 +43496,61 @@ function delimit(type) { function whitespace2(type) { while (character = peek()) if (character < 33) - next2(); + next(); else break; return token(type) > 2 || token(character) > 3 ? "" : " "; } -function escaping(index2, count) { - while (--count && next2()) +function escaping(index, count) { + while (--count && next()) if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) break; - return slice(index2, caret() + (count < 6 && peek() == 32 && next2() == 32)); + return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32)); } function delimiter(type) { - while (next2()) + while (next()) switch (character) { + // ] ) " ' case type: return position; + // " ' case 34: case 39: if (type !== 34 && type !== 39) delimiter(character); break; + // ( case 40: if (type === 41) delimiter(type); break; + // \ case 92: - next2(); + next(); break; } return position; } -function commenter(type, index2) { - while (next2()) +function commenter(type, index) { + while (next()) if (type + character === 47 + 10) break; else if (type + character === 42 + 42 && peek() === 47) break; - return "/*" + slice(index2, position - 1) + "*" + from(type === 47 ? type : next2()); + return "/*" + slice(index, position - 1) + "*" + from(type === 47 ? type : next()); } -function identifier(index2) { +function identifier(index) { while (!token(peek())) - next2(); - return slice(index2, position); + next(); + return slice(index, position); } // node_modules/stylis/src/Parser.js function compile(value) { - return dealloc(parse3("", null, null, null, [""], value = alloc(value), 0, [0], value)); + return dealloc(parse2("", null, null, null, [""], value = alloc(value), 0, [0], value)); } -function parse3(value, root, parent, rule, rules, rulesets, pseudo, points, declarations) { - var index2 = 0; +function parse2(value, root, parent, rule, rules, rulesets, pseudo, points, declarations) { + var index = 0; var offset3 = 0; var length2 = pseudo; var atrule = 0; @@ -37542,73 +43566,85 @@ function parse3(value, root, parent, rule, rules, rulesets, pseudo, points, decl var reference = rule; var characters2 = type; while (scanning) - switch (previous = character2, character2 = next2()) { + switch (previous = character2, character2 = next()) { + // ( case 40: if (previous != 108 && charat(characters2, length2 - 1) == 58) { if (indexof(characters2 += replace(delimit(character2), "&", "&\f"), "&\f") != -1) ampersand = -1; break; } + // " ' [ case 34: case 39: case 91: characters2 += delimit(character2); break; + // \t \n \r \s case 9: case 10: case 13: case 32: characters2 += whitespace2(previous); break; + // \ case 92: characters2 += escaping(caret() - 1, 7); continue; + // / case 47: switch (peek()) { case 42: case 47: - append(comment(commenter(next2(), caret()), root, parent), declarations); + append(comment(commenter(next(), caret()), root, parent), declarations); break; default: characters2 += "/"; } break; + // { case 123 * variable: - points[index2++] = strlen(characters2) * ampersand; + points[index++] = strlen(characters2) * ampersand; + // } ; \0 case 125 * variable: case 59: case 0: switch (character2) { + // \0 } case 0: case 125: scanning = 0; + // ; case 59 + offset3: - if (ampersand == -1) - characters2 = replace(characters2, /\f/g, ""); + if (ampersand == -1) characters2 = replace(characters2, /\f/g, ""); if (property > 0 && strlen(characters2) - length2) append(property > 32 ? declaration(characters2 + ";", rule, parent, length2 - 1) : declaration(replace(characters2, " ", "") + ";", rule, parent, length2 - 2), declarations); break; + // @ ; case 59: characters2 += ";"; + // { rule/at-rule default: - append(reference = ruleset(characters2, root, parent, index2, offset3, rules, points, type, props = [], children = [], length2), rulesets); + append(reference = ruleset(characters2, root, parent, index, offset3, rules, points, type, props = [], children = [], length2), rulesets); if (character2 === 123) if (offset3 === 0) - parse3(characters2, root, reference, reference, props, rulesets, length2, points, children); + parse2(characters2, root, reference, reference, props, rulesets, length2, points, children); else switch (atrule === 99 && charat(characters2, 3) === 110 ? 100 : atrule) { + // d l m s case 100: case 108: case 109: case 115: - parse3(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length2), children), rules, children, length2, points, rule ? props : children); + parse2(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length2), children), rules, children, length2, points, rule ? props : children); break; default: - parse3(characters2, reference, reference, reference, [""], children, 0, points, children); + parse2(characters2, reference, reference, reference, [""], children, 0, points, children); } } - index2 = offset3 = property = 0, variable = ampersand = 1, type = characters2 = "", length2 = pseudo; + index = offset3 = property = 0, variable = ampersand = 1, type = characters2 = "", length2 = pseudo; break; + // : case 58: length2 = 1 + strlen(characters2), property = previous; default: @@ -37619,17 +43655,21 @@ function parse3(value, root, parent, rule, rules, rulesets, pseudo, points, decl continue; } switch (characters2 += from(character2), character2 * variable) { + // & case 38: ampersand = offset3 > 0 ? 1 : (characters2 += "\f", -1); break; + // , case 44: - points[index2++] = (strlen(characters2) - 1) * ampersand, ampersand = 1; + points[index++] = (strlen(characters2) - 1) * ampersand, ampersand = 1; break; + // @ case 64: if (peek() === 45) - characters2 += delimit(next2()); + characters2 += delimit(next()); atrule = peek(), offset3 = length2 = strlen(type = characters2 += identifier(caret())), character2++; break; + // - case 45: if (previous === 45 && strlen(characters2) == 2) variable = 0; @@ -37637,13 +43677,13 @@ function parse3(value, root, parent, rule, rules, rulesets, pseudo, points, decl } return rulesets; } -function ruleset(value, root, parent, index2, offset3, rules, points, type, props, children, length2) { +function ruleset(value, root, parent, index, offset3, rules, points, type, props, children, length2) { var post = offset3 - 1; var rule = offset3 === 0 ? rules : [""]; var size2 = sizeof(rule); - for (var i4 = 0, j4 = 0, k4 = 0; i4 < index2; ++i4) - for (var x4 = 0, y3 = substr(value, post + 1, post = abs(j4 = points[i4])), z4 = value; x4 < size2; ++x4) - if (z4 = trim(j4 > 0 ? rule[x4] + " " + y3 : replace(y3, /&\f/g, rule[x4]))) + for (var i4 = 0, j4 = 0, k4 = 0; i4 < index; ++i4) + for (var x4 = 0, y4 = substr(value, post + 1, post = abs(j4 = points[i4])), z4 = value; x4 < size2; ++x4) + if (z4 = trim(j4 > 0 ? rule[x4] + " " + y4 : replace(y4, /&\f/g, rule[x4]))) props[k4++] = z4; return node(value, root, parent, offset3 === 0 ? RULESET : type, props, children, length2); } @@ -37662,11 +43702,10 @@ function serialize(children, callback) { output += callback(children[i4], i4, children, callback) || ""; return output; } -function stringify(element, index2, children, callback) { +function stringify(element, index, children, callback) { switch (element.type) { case LAYER: - if (element.children.length) - break; + if (element.children.length) break; case IMPORT: case DECLARATION: return element.return = element.return || element.value; @@ -37683,65 +43722,87 @@ function stringify(element, index2, children, callback) { // node_modules/stylis/src/Middleware.js function middleware(collection) { var length2 = sizeof(collection); - return function(element, index2, children, callback) { + return function(element, index, children, callback) { var output = ""; for (var i4 = 0; i4 < length2; i4++) - output += collection[i4](element, index2, children, callback) || ""; + output += collection[i4](element, index, children, callback) || ""; return output; }; } +function rulesheet(callback) { + return function(element) { + if (!element.root) { + if (element = element.return) + callback(element); + } + }; +} + +// node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js +var weakMemoize = function weakMemoize2(func) { + var cache = /* @__PURE__ */ new WeakMap(); + return function(arg) { + if (cache.has(arg)) { + return cache.get(arg); + } + var ret = func(arg); + cache.set(arg, ret); + return ret; + }; +}; // node_modules/@emotion/memoize/dist/emotion-memoize.esm.js function memoize(fn2) { var cache = /* @__PURE__ */ Object.create(null); return function(arg) { - if (cache[arg] === void 0) - cache[arg] = fn2(arg); + if (cache[arg] === void 0) cache[arg] = fn2(arg); return cache[arg]; }; } -// node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js -var identifierWithPointTracking = function identifierWithPointTracking2(begin3, points, index2) { +// node_modules/@emotion/cache/dist/emotion-cache.esm.js +var isBrowser = typeof document !== "undefined"; +var identifierWithPointTracking = function identifierWithPointTracking2(begin2, points, index) { var previous = 0; var character2 = 0; while (true) { previous = character2; character2 = peek(); if (previous === 38 && character2 === 12) { - points[index2] = 1; + points[index] = 1; } if (token(character2)) { break; } - next2(); + next(); } - return slice(begin3, position); + return slice(begin2, position); }; var toRules = function toRules2(parsed, points) { - var index2 = -1; + var index = -1; var character2 = 44; do { switch (token(character2)) { case 0: if (character2 === 38 && peek() === 12) { - points[index2] = 1; + points[index] = 1; } - parsed[index2] += identifierWithPointTracking(position - 1, points, index2); + parsed[index] += identifierWithPointTracking(position - 1, points, index); break; case 2: - parsed[index2] += delimit(character2); + parsed[index] += delimit(character2); break; case 4: if (character2 === 44) { - parsed[++index2] = peek() === 58 ? "&\f" : ""; - points[index2] = parsed[index2].length; + parsed[++index] = peek() === 58 ? "&\f" : ""; + points[index] = parsed[index].length; break; } + // fallthrough default: - parsed[index2] += from(character2); + parsed[index] += from(character2); } - } while (character2 = next2()); + } while (character2 = next()); return parsed; }; var getRules = function getRules2(value, points) { @@ -37758,8 +43819,7 @@ var compat = function compat2(element) { var isImplicitRule = element.column === parent.column && element.line === parent.line; while (parent.type !== "rule") { parent = parent.parent; - if (!parent) - return; + if (!parent) return; } if (element.props.length === 1 && value.charCodeAt(0) !== 58 && !fixedElements.get(parent)) { return; @@ -37790,73 +43850,12 @@ var removeLabel = function removeLabel2(element) { } } }; -var ignoreFlag = "emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason"; -var isIgnoringComment = function isIgnoringComment2(element) { - return element.type === "comm" && element.children.indexOf(ignoreFlag) > -1; -}; -var createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm2(cache) { - return function(element, index2, children) { - if (element.type !== "rule" || cache.compat) - return; - var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g); - if (unsafePseudoClasses) { - var isNested = !!element.parent; - var commentContainer = isNested ? element.parent.children : ( - // global rule at the root level - children - ); - for (var i4 = commentContainer.length - 1; i4 >= 0; i4--) { - var node2 = commentContainer[i4]; - if (node2.line < element.line) { - break; - } - if (node2.column < element.column) { - if (isIgnoringComment(node2)) { - return; - } - break; - } - } - unsafePseudoClasses.forEach(function(unsafePseudoClass) { - console.error('The pseudo class "' + unsafePseudoClass + '" is potentially unsafe when doing server-side rendering. Try changing it to "' + unsafePseudoClass.split("-child")[0] + '-of-type".'); - }); - } - }; -}; -var isImportRule = function isImportRule2(element) { - return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64; -}; -var isPrependedWithRegularRules = function isPrependedWithRegularRules2(index2, children) { - for (var i4 = index2 - 1; i4 >= 0; i4--) { - if (!isImportRule(children[i4])) { - return true; - } - } - return false; -}; -var nullifyElement = function nullifyElement2(element) { - element.type = ""; - element.value = ""; - element["return"] = ""; - element.children = ""; - element.props = ""; -}; -var incorrectImportAlarm = function incorrectImportAlarm2(element, index2, children) { - if (!isImportRule(element)) { - return; - } - if (element.parent) { - console.error("`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles."); - nullifyElement(element); - } else if (isPrependedWithRegularRules(index2, children)) { - console.error("`@import` rules can't be after other rules. Please put your `@import` rules before your other rules."); - nullifyElement(element); - } -}; function prefix(value, length2) { switch (hash(value, length2)) { + // color-adjust case 5103: return WEBKIT + "print-" + value + value; + // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function) case 5737: case 4201: case 3177: @@ -37864,18 +43863,21 @@ function prefix(value, length2) { case 1641: case 4457: case 2921: + // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break case 5572: case 6356: case 5844: case 3191: case 6645: case 3005: + // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite, case 6391: case 5879: case 5623: case 6135: case 4599: case 4855: + // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width) case 4215: case 6389: case 5109: @@ -37883,43 +43885,58 @@ function prefix(value, length2) { case 5621: case 3829: return WEBKIT + value + value; + // appearance, user-select, transform, hyphens, text-size-adjust case 5349: case 4246: case 4810: case 6968: case 2756: return WEBKIT + value + MOZ + value + MS + value + value; + // flex, flex-direction case 6828: case 4268: return WEBKIT + value + MS + value + value; + // order case 6165: return WEBKIT + value + MS + "flex-" + value + value; + // align-items case 5187: return WEBKIT + value + replace(value, /(\w+).+(:[^]+)/, WEBKIT + "box-$1$2" + MS + "flex-$1$2") + value; + // align-self case 5443: return WEBKIT + value + MS + "flex-item-" + replace(value, /flex-|-self/, "") + value; + // align-content case 4675: return WEBKIT + value + MS + "flex-line-pack" + replace(value, /align-content|flex-|-self/, "") + value; + // flex-shrink case 5548: return WEBKIT + value + MS + replace(value, "shrink", "negative") + value; + // flex-basis case 5292: return WEBKIT + value + MS + replace(value, "basis", "preferred-size") + value; + // flex-grow case 6060: return WEBKIT + "box-" + replace(value, "-grow", "") + WEBKIT + value + MS + replace(value, "grow", "positive") + value; + // transition case 4554: return WEBKIT + replace(value, /([^-])(transform)/g, "$1" + WEBKIT + "$2") + value; + // cursor case 6187: return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + "$1"), /(image-set)/, WEBKIT + "$1"), value, "") + value; + // background, background-image case 5495: case 3959: return replace(value, /(image-set\([^]*)/, WEBKIT + "$1$`$1"); + // justify-content case 4968: return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + "box-pack:$3" + MS + "flex-pack:$3"), /s.+-b[^;]+/, "justify") + WEBKIT + value + value; + // (margin|padding)-inline-(start|end) case 4095: case 3583: case 4068: case 2532: return replace(value, /(.+)-inline(.+)/, WEBKIT + "$1$2") + value; + // (min|max)?(width|height|inline-size|block-size) case 8116: case 7059: case 5753: @@ -37932,34 +43949,42 @@ function prefix(value, length2) { case 5789: case 5021: case 4765: - if (strlen(value) - 1 - length2 > 6) - switch (charat(value, length2 + 1)) { - case 109: - if (charat(value, length2 + 4) !== 45) - break; - case 102: - return replace(value, /(.+:)(.+)-([^]+)/, "$1" + WEBKIT + "$2-$3$1" + MOZ + (charat(value, length2 + 3) == 108 ? "$3" : "$2-$3")) + value; - case 115: - return ~indexof(value, "stretch") ? prefix(replace(value, "stretch", "fill-available"), length2) + value : value; - } + if (strlen(value) - 1 - length2 > 6) switch (charat(value, length2 + 1)) { + // (m)ax-content, (m)in-content + case 109: + if (charat(value, length2 + 4) !== 45) break; + // (f)ill-available, (f)it-content + case 102: + return replace(value, /(.+:)(.+)-([^]+)/, "$1" + WEBKIT + "$2-$3$1" + MOZ + (charat(value, length2 + 3) == 108 ? "$3" : "$2-$3")) + value; + // (s)tretch + case 115: + return ~indexof(value, "stretch") ? prefix(replace(value, "stretch", "fill-available"), length2) + value : value; + } break; + // position: sticky case 4949: - if (charat(value, length2 + 1) !== 115) - break; + if (charat(value, length2 + 1) !== 115) break; + // display: (flex|inline-flex) case 6444: switch (charat(value, strlen(value) - 3 - (~indexof(value, "!important") && 10))) { + // stic(k)y case 107: return replace(value, ":", ":" + WEBKIT) + value; + // (inline-)?fl(e)x case 101: return replace(value, /(.+:)([^;!]+)(;|!.+)?/, "$1" + WEBKIT + (charat(value, 14) === 45 ? "inline-" : "") + "box$3$1" + WEBKIT + "$2$3$1" + MS + "$2box$3") + value; } break; + // writing-mode case 5936: switch (charat(value, length2 + 11)) { + // vertical-l(r) case 114: return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "tb") + value; + // vertical-r(l) case 108: return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "tb-rl") + value; + // horizontal(-)tb case 45: return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "lr") + value; } @@ -37967,47 +43992,52 @@ function prefix(value, length2) { } return value; } -var prefixer = function prefixer2(element, index2, children, callback) { +var prefixer = function prefixer2(element, index, children, callback) { if (element.length > -1) { - if (!element["return"]) - switch (element.type) { - case DECLARATION: - element["return"] = prefix(element.value, element.length); - break; - case KEYFRAMES: - return serialize([copy(element, { - value: replace(element.value, "@", "@" + WEBKIT) - })], callback); - case RULESET: - if (element.length) - return combine(element.props, function(value) { - switch (match3(value, /(::plac\w+|:read-\w+)/)) { - case ":read-only": - case ":read-write": - return serialize([copy(element, { - props: [replace(value, /:(read-\w+)/, ":" + MOZ + "$1")] - })], callback); - case "::placeholder": - return serialize([copy(element, { - props: [replace(value, /:(plac\w+)/, ":" + WEBKIT + "input-$1")] - }), copy(element, { - props: [replace(value, /:(plac\w+)/, ":" + MOZ + "$1")] - }), copy(element, { - props: [replace(value, /:(plac\w+)/, MS + "input-$1")] - })], callback); - } - return ""; - }); - } + if (!element["return"]) switch (element.type) { + case DECLARATION: + element["return"] = prefix(element.value, element.length); + break; + case KEYFRAMES: + return serialize([copy(element, { + value: replace(element.value, "@", "@" + WEBKIT) + })], callback); + case RULESET: + if (element.length) return combine(element.props, function(value) { + switch (match2(value, /(::plac\w+|:read-\w+)/)) { + // :read-(only|write) + case ":read-only": + case ":read-write": + return serialize([copy(element, { + props: [replace(value, /:(read-\w+)/, ":" + MOZ + "$1")] + })], callback); + // :placeholder + case "::placeholder": + return serialize([copy(element, { + props: [replace(value, /:(plac\w+)/, ":" + WEBKIT + "input-$1")] + }), copy(element, { + props: [replace(value, /:(plac\w+)/, ":" + MOZ + "$1")] + }), copy(element, { + props: [replace(value, /:(plac\w+)/, MS + "input-$1")] + })], callback); + } + return ""; + }); + } } }; +var getServerStylisCache = isBrowser ? void 0 : weakMemoize(function() { + return memoize(function() { + var cache = {}; + return function(name) { + return cache[name]; + }; + }); +}); var defaultStylisPlugins = [prefixer]; var createCache = function createCache2(options2) { var key = options2.key; - if (!key) { - throw new Error("You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\nIf multiple caches share the same key they might \"fight\" for each other's style elements."); - } - if (key === "css") { + if (isBrowser && key === "css") { var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); Array.prototype.forEach.call(ssrStyles, function(node2) { var dataEmotionAttribute = node2.getAttribute("data-emotion"); @@ -38019,15 +44049,10 @@ var createCache = function createCache2(options2) { }); } var stylisPlugins = options2.stylisPlugins || defaultStylisPlugins; - if (true) { - if (/[^a-z-]/.test(key)) { - throw new Error('Emotion key must only contain lower case alphabetical characters and - but "' + key + '" was passed'); - } - } var inserted = {}; var container; var nodesToHydrate = []; - { + if (isBrowser) { container = options2.container || document.head; Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which @@ -38044,24 +44069,9 @@ var createCache = function createCache2(options2) { } var _insert; var omnipresentPlugins = [compat, removeLabel]; - if (true) { - omnipresentPlugins.push(createUnsafeSelectorsAlarm({ - get compat() { - return cache.compat; - } - }), incorrectImportAlarm); - } - { + if (isBrowser) { var currentSheet; - var finalizingPlugins = [stringify, true ? function(element) { - if (!element.root) { - if (element["return"]) { - currentSheet.insert(element["return"]); - } else if (element.value && element.type !== COMMENT) { - currentSheet.insert(element.value + "{}"); - } - } - } : rulesheet(function(rule) { + var finalizingPlugins = [stringify, rulesheet(function(rule) { currentSheet.insert(rule); })]; var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins)); @@ -38070,18 +44080,41 @@ var createCache = function createCache2(options2) { }; _insert = function insert(selector, serialized, sheet, shouldCache) { currentSheet = sheet; - if (serialized.map !== void 0) { - currentSheet = { - insert: function insert2(rule) { - sheet.insert(rule + serialized.map); - } - }; - } stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles); if (shouldCache) { cache.inserted[serialized.name] = true; } }; + } else { + var _finalizingPlugins = [stringify]; + var _serializer = middleware(omnipresentPlugins.concat(stylisPlugins, _finalizingPlugins)); + var _stylis = function _stylis2(styles2) { + return serialize(compile(styles2), _serializer); + }; + var serverStylisCache = getServerStylisCache(stylisPlugins)(key); + var getRules3 = function getRules4(selector, serialized) { + var name = serialized.name; + if (serverStylisCache[name] === void 0) { + serverStylisCache[name] = _stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles); + } + return serverStylisCache[name]; + }; + _insert = function _insert2(selector, serialized, sheet, shouldCache) { + var name = serialized.name; + var rules = getRules3(selector, serialized); + if (cache.compat === void 0) { + if (shouldCache) { + cache.inserted[name] = true; + } + return rules; + } else { + if (shouldCache) { + cache.inserted[name] = rules; + } else { + return rules; + } + } + }; } var cache = { key, @@ -38102,14 +44135,14 @@ var createCache = function createCache2(options2) { return cache; }; -// node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js -var isBrowser = true; +// node_modules/@emotion/utils/dist/emotion-utils.esm.js +var isBrowser2 = typeof document !== "undefined"; function getRegisteredStyles(registered, registeredStyles, classNames2) { var rawClassName = ""; classNames2.split(" ").forEach(function(className) { if (registered[className] !== void 0) { registeredStyles.push(registered[className] + ";"); - } else { + } else if (className) { rawClassName += className + " "; } }); @@ -38127,7 +44160,7 @@ var registerStyles = function registerStyles2(cache, serialized, isStringTag) { // in node since emotion-server relies on whether a style is in // the registered cache to know whether a style is global or not // also, note that this check will be dead code eliminated in the browser - isBrowser === false) && cache.registered[className] === void 0 + isBrowser2 === false && cache.compat !== void 0) && cache.registered[className] === void 0 ) { cache.registered[className] = serialized.styles; } @@ -38136,11 +44169,18 @@ var insertStyles = function insertStyles2(cache, serialized, isStringTag) { registerStyles(cache, serialized, isStringTag); var className = cache.key + "-" + serialized.name; if (cache.inserted[serialized.name] === void 0) { + var stylesForSSR = ""; var current = serialized; do { - cache.insert(serialized === current ? "." + className : "", current, cache.sheet, true); + var maybeStyles = cache.insert(serialized === current ? "." + className : "", current, cache.sheet, true); + if (!isBrowser2 && maybeStyles !== void 0) { + stylesForSSR += maybeStyles; + } current = current.next; } while (current !== void 0); + if (!isBrowser2 && stylesForSSR.length !== 0) { + return stylesForSSR; + } } }; @@ -38209,6 +44249,7 @@ var unitlessKeys = { opacity: 1, order: 1, orphans: 1, + scale: 1, tabSize: 1, widows: 1, zIndex: 1, @@ -38225,12 +44266,8 @@ var unitlessKeys = { strokeWidth: 1 }; -// node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js -var ILLEGAL_ESCAPE_SEQUENCE_ERROR = `You have illegal escape sequence in your template literal, most likely inside content's property value. -Because you write your CSS inside a JavaScript string you actually have to do double escaping, so for example "content: '\\00d7';" should become "content: '\\\\00d7';". -You can read more about this here: -https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences`; -var UNDEFINED_AS_OBJECT_KEY_ERROR = "You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key)."; +// node_modules/@emotion/serialize/dist/emotion-serialize.esm.js +var isDevelopment2 = false; var hyphenateRegex = /[A-Z]|^ms/g; var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g; var isCustomProperty = function isCustomProperty2(property) { @@ -38247,7 +44284,7 @@ var processStyleValue = function processStyleValue2(key, value) { case "animation": case "animationName": { if (typeof value === "string") { - return value.replace(animationRegex, function(match4, p1, p22) { + return value.replace(animationRegex, function(match3, p1, p22) { cursor = { name: p1, styles: p22, @@ -38263,75 +44300,43 @@ var processStyleValue = function processStyleValue2(key, value) { } return value; }; -if (true) { - contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\(|(no-)?(open|close)-quote/; - contentValues = ["normal", "none", "initial", "inherit", "unset"]; - oldProcessStyleValue = processStyleValue; - msPattern = /^-ms-/; - hyphenPattern = /-(.)/g; - hyphenatedCache = {}; - processStyleValue = function processStyleValue3(key, value) { - if (key === "content") { - if (typeof value !== "string" || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '"' && value.charAt(0) !== "'")) { - throw new Error("You seem to be using a value for 'content' without quotes, try replacing it with `content: '\"" + value + "\"'`"); - } - } - var processed = oldProcessStyleValue(key, value); - if (processed !== "" && !isCustomProperty(key) && key.indexOf("-") !== -1 && hyphenatedCache[key] === void 0) { - hyphenatedCache[key] = true; - console.error("Using kebab-case for css properties in objects is not supported. Did you mean " + key.replace(msPattern, "ms-").replace(hyphenPattern, function(str, _char) { - return _char.toUpperCase(); - }) + "?"); - } - return processed; - }; -} -var contentValuePattern; -var contentValues; -var oldProcessStyleValue; -var msPattern; -var hyphenPattern; -var hyphenatedCache; var noComponentSelectorMessage = "Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform."; function handleInterpolation(mergedProps, registered, interpolation) { if (interpolation == null) { return ""; } - if (interpolation.__emotion_styles !== void 0) { - if (interpolation.toString() === "NO_COMPONENT_SELECTOR") { - throw new Error(noComponentSelectorMessage); - } - return interpolation; + var componentSelector = interpolation; + if (componentSelector.__emotion_styles !== void 0) { + return componentSelector; } switch (typeof interpolation) { case "boolean": { return ""; } case "object": { - if (interpolation.anim === 1) { + var keyframes3 = interpolation; + if (keyframes3.anim === 1) { cursor = { - name: interpolation.name, - styles: interpolation.styles, + name: keyframes3.name, + styles: keyframes3.styles, next: cursor }; - return interpolation.name; + return keyframes3.name; } - if (interpolation.styles !== void 0) { - var next3 = interpolation.next; - if (next3 !== void 0) { - while (next3 !== void 0) { + var serializedStyles = interpolation; + if (serializedStyles.styles !== void 0) { + var next2 = serializedStyles.next; + if (next2 !== void 0) { + while (next2 !== void 0) { cursor = { - name: next3.name, - styles: next3.styles, + name: next2.name, + styles: next2.styles, next: cursor }; - next3 = next3.next; + next2 = next2.next; } } - var styles2 = interpolation.styles + ";"; - if (interpolation.map !== void 0) { - styles2 += interpolation.map; - } + var styles2 = serializedStyles.styles + ";"; return styles2; } return createStringFromObject(mergedProps, registered, interpolation); @@ -38342,30 +44347,16 @@ function handleInterpolation(mergedProps, registered, interpolation) { var result = interpolation(mergedProps); cursor = previousCursor; return handleInterpolation(mergedProps, registered, result); - } else if (true) { - console.error("Functions that are interpolated in css calls will be stringified.\nIf you want to have a css call based on props, create a function that returns a css call like this\nlet dynamicStyle = (props) => css`color: ${props.color}`\nIt can be called directly with props or interpolated in a styled call like this\nlet SomeComponent = styled('div')`${dynamicStyle}`"); } break; } - case "string": - if (true) { - var matched = []; - var replaced = interpolation.replace(animationRegex, function(match4, p1, p22) { - var fakeVarName = "animation" + matched.length; - matched.push("const " + fakeVarName + " = keyframes`" + p22.replace(/^@keyframes animation-\w+/, "") + "`"); - return "${" + fakeVarName + "}"; - }); - if (matched.length) { - console.error("`keyframes` output got interpolated into plain string, please wrap it with `css`.\n\nInstead of doing this:\n\n" + [].concat(matched, ["`" + replaced + "`"]).join("\n") + "\n\nYou should wrap it with `css` like this:\n\n" + ("css`" + replaced + "`")); - } - } - break; } + var asString = interpolation; if (registered == null) { - return interpolation; + return asString; } - var cached = registered[interpolation]; - return cached !== void 0 ? cached : interpolation; + var cached = registered[asString]; + return cached !== void 0 ? cached : asString; } function createStringFromObject(mergedProps, registered, obj) { var string2 = ""; @@ -38374,37 +44365,35 @@ function createStringFromObject(mergedProps, registered, obj) { string2 += handleInterpolation(mergedProps, registered, obj[i4]) + ";"; } } else { - for (var _key in obj) { - var value = obj[_key]; + for (var key in obj) { + var value = obj[key]; if (typeof value !== "object") { - if (registered != null && registered[value] !== void 0) { - string2 += _key + "{" + registered[value] + "}"; - } else if (isProcessableValue(value)) { - string2 += processStyleName(_key) + ":" + processStyleValue(_key, value) + ";"; + var asString = value; + if (registered != null && registered[asString] !== void 0) { + string2 += key + "{" + registered[asString] + "}"; + } else if (isProcessableValue(asString)) { + string2 += processStyleName(key) + ":" + processStyleValue(key, asString) + ";"; } } else { - if (_key === "NO_COMPONENT_SELECTOR" && true) { + if (key === "NO_COMPONENT_SELECTOR" && isDevelopment2) { throw new Error(noComponentSelectorMessage); } if (Array.isArray(value) && typeof value[0] === "string" && (registered == null || registered[value[0]] === void 0)) { for (var _i = 0; _i < value.length; _i++) { if (isProcessableValue(value[_i])) { - string2 += processStyleName(_key) + ":" + processStyleValue(_key, value[_i]) + ";"; + string2 += processStyleName(key) + ":" + processStyleValue(key, value[_i]) + ";"; } } } else { var interpolated = handleInterpolation(mergedProps, registered, value); - switch (_key) { + switch (key) { case "animation": case "animationName": { - string2 += processStyleName(_key) + ":" + interpolated + ";"; + string2 += processStyleName(key) + ":" + interpolated + ";"; break; } default: { - if (_key === "undefined") { - console.error(UNDEFINED_AS_OBJECT_KEY_ERROR); - } - string2 += _key + "{" + interpolated + "}"; + string2 += key + "{" + interpolated + "}"; } } } @@ -38413,13 +44402,9 @@ function createStringFromObject(mergedProps, registered, obj) { } return string2; } -var labelPattern = /label:\s*([^\s;\n{]+)\s*(;|$)/g; -var sourceMapPattern; -if (true) { - sourceMapPattern = /\/\*#\ssourceMappingURL=data:application\/json;\S+\s+\*\//g; -} +var labelPattern = /label:\s*([^\s;{]+)\s*(;|$)/g; var cursor; -var serializeStyles = function serializeStyles2(args, registered, mergedProps) { +function serializeStyles(args, registered, mergedProps) { if (args.length === 1 && typeof args[0] === "object" && args[0] !== null && args[0].styles !== void 0) { return args[0]; } @@ -38431,64 +44416,41 @@ var serializeStyles = function serializeStyles2(args, registered, mergedProps) { stringMode = false; styles2 += handleInterpolation(mergedProps, registered, strings); } else { - if (strings[0] === void 0) { - console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR); - } - styles2 += strings[0]; + var asTemplateStringsArr = strings; + styles2 += asTemplateStringsArr[0]; } for (var i4 = 1; i4 < args.length; i4++) { styles2 += handleInterpolation(mergedProps, registered, args[i4]); if (stringMode) { - if (strings[i4] === void 0) { - console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR); - } - styles2 += strings[i4]; + var templateStringsArr = strings; + styles2 += templateStringsArr[i4]; } } - var sourceMap; - if (true) { - styles2 = styles2.replace(sourceMapPattern, function(match5) { - sourceMap = match5; - return ""; - }); - } labelPattern.lastIndex = 0; var identifierName = ""; - var match4; - while ((match4 = labelPattern.exec(styles2)) !== null) { - identifierName += "-" + // $FlowFixMe we know it's not null - match4[1]; + var match3; + while ((match3 = labelPattern.exec(styles2)) !== null) { + identifierName += "-" + match3[1]; } var name = murmur2(styles2) + identifierName; - if (true) { - return { - name, - styles: styles2, - map: sourceMap, - next: cursor, - toString: function toString() { - return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; - } - }; - } return { name, styles: styles2, next: cursor }; -}; +} -// node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js +// node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.esm.js +var isBrowser3 = typeof document !== "undefined"; var syncFallback = function syncFallback2(create) { return create(); }; -var useInsertionEffect = gn ? gn : false; -var useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback; -var useInsertionEffectWithLayoutFallback = useInsertionEffect || A2; +var useInsertionEffect = Sn ? Sn : false; +var useInsertionEffectAlwaysWithSyncFallback = !isBrowser3 ? syncFallback : useInsertionEffect || syncFallback; -// node_modules/@emotion/react/dist/emotion-element-43c6fea0.browser.esm.js -var isBrowser2 = true; -var hasOwn = {}.hasOwnProperty; +// node_modules/@emotion/react/dist/emotion-element-b4c8b265.esm.js +var isDevelopment3 = false; +var isBrowser4 = typeof document !== "undefined"; var EmotionCacheContext = /* @__PURE__ */ G( // we're doing this to avoid preconstruct's dead code elimination in this one case // because this module is primarily intended for the browser and node @@ -38500,25 +44462,22 @@ var EmotionCacheContext = /* @__PURE__ */ G( key: "css" }) : null ); -if (true) { - EmotionCacheContext.displayName = "EmotionCacheContext"; -} var CacheProvider = EmotionCacheContext.Provider; var withEmotionCache = function withEmotionCache2(func) { - return /* @__PURE__ */ k3(function(props, ref) { - var cache = P4(EmotionCacheContext); + return /* @__PURE__ */ w3(function(props, ref) { + var cache = x2(EmotionCacheContext); return func(props, cache, ref); }); }; -if (!isBrowser2) { +if (!isBrowser4) { withEmotionCache = function withEmotionCache3(func) { return function(props) { - var cache = P4(EmotionCacheContext); + var cache = x2(EmotionCacheContext); if (cache === null) { cache = createCache({ key: "css" }); - return /* @__PURE__ */ g(EmotionCacheContext.Provider, { + return /* @__PURE__ */ _(EmotionCacheContext.Provider, { value: cache }, func(props, cache)); } else { @@ -38528,48 +44487,9 @@ if (!isBrowser2) { }; } var ThemeContext = /* @__PURE__ */ G({}); -if (true) { - ThemeContext.displayName = "EmotionThemeContext"; -} -var getLastPart = function getLastPart2(functionName) { - var parts = functionName.split("."); - return parts[parts.length - 1]; -}; -var getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine2(line2) { - var match4 = /^\s+at\s+([A-Za-z0-9$.]+)\s/.exec(line2); - if (match4) - return getLastPart(match4[1]); - match4 = /^([A-Za-z0-9$.]+)@/.exec(line2); - if (match4) - return getLastPart(match4[1]); - return void 0; -}; -var internalReactFunctionNames = /* @__PURE__ */ new Set(["renderWithHooks", "processChild", "finishClassComponent", "renderToString"]); -var sanitizeIdentifier = function sanitizeIdentifier2(identifier2) { - return identifier2.replace(/\$/g, "-"); -}; -var getLabelFromStackTrace = function getLabelFromStackTrace2(stackTrace) { - if (!stackTrace) - return void 0; - var lines = stackTrace.split("\n"); - for (var i4 = 0; i4 < lines.length; i4++) { - var functionName = getFunctionNameFromStackTraceLine(lines[i4]); - if (!functionName) - continue; - if (internalReactFunctionNames.has(functionName)) - break; - if (/^[A-Z]/.test(functionName)) - return sanitizeIdentifier(functionName); - } - return void 0; -}; +var hasOwn = {}.hasOwnProperty; var typePropName = "__EMOTION_TYPE_PLEASE_DO_NOT_USE__"; -var labelPropName = "__EMOTION_LABEL_PLEASE_DO_NOT_USE__"; var createEmotionProps = function createEmotionProps2(type, props) { - if (typeof props.css === "string" && // check if there is a css declaration - props.css.indexOf(":") !== -1) { - throw new Error("Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`" + props.css + "`"); - } var newProps = {}; for (var key in props) { if (hasOwn.call(props, key)) { @@ -38577,198 +44497,71 @@ var createEmotionProps = function createEmotionProps2(type, props) { } } newProps[typePropName] = type; - if (!!props.css && (typeof props.css !== "object" || typeof props.css.name !== "string" || props.css.name.indexOf("-") === -1)) { - var label = getLabelFromStackTrace(new Error().stack); - if (label) - newProps[labelPropName] = label; - } return newProps; }; -var Insertion = function Insertion2(_ref4) { - var cache = _ref4.cache, serialized = _ref4.serialized, isStringTag = _ref4.isStringTag; +var Insertion = function Insertion2(_ref3) { + var cache = _ref3.cache, serialized = _ref3.serialized, isStringTag = _ref3.isStringTag; registerStyles(cache, serialized, isStringTag); - useInsertionEffectAlwaysWithSyncFallback(function() { + var rules = useInsertionEffectAlwaysWithSyncFallback(function() { return insertStyles(cache, serialized, isStringTag); }); + if (!isBrowser4 && rules !== void 0) { + var _ref23; + var serializedNames = serialized.name; + var next2 = serialized.next; + while (next2 !== void 0) { + serializedNames += " " + next2.name; + next2 = next2.next; + } + return /* @__PURE__ */ _("style", (_ref23 = {}, _ref23["data-emotion"] = cache.key + " " + serializedNames, _ref23.dangerouslySetInnerHTML = { + __html: rules + }, _ref23.nonce = cache.sheet.nonce, _ref23)); + } return null; }; -var Emotion = /* @__PURE__ */ withEmotionCache(function(props, cache, ref) { - var cssProp = props.css; - if (typeof cssProp === "string" && cache.registered[cssProp] !== void 0) { - cssProp = cache.registered[cssProp]; - } - var WrappedComponent = props[typePropName]; - var registeredStyles = [cssProp]; - var className = ""; - if (typeof props.className === "string") { - className = getRegisteredStyles(cache.registered, registeredStyles, props.className); - } else if (props.className != null) { - className = props.className + " "; - } - var serialized = serializeStyles(registeredStyles, void 0, P4(ThemeContext)); - if (serialized.name.indexOf("-") === -1) { - var labelFromStack = props[labelPropName]; - if (labelFromStack) { - serialized = serializeStyles([serialized, "label:" + labelFromStack + ";"]); +var Emotion = /* @__PURE__ */ withEmotionCache( + /* */ + function(props, cache, ref) { + var cssProp = props.css; + if (typeof cssProp === "string" && cache.registered[cssProp] !== void 0) { + cssProp = cache.registered[cssProp]; } - } - className += cache.key + "-" + serialized.name; - var newProps = {}; - for (var key in props) { - if (hasOwn.call(props, key) && key !== "css" && key !== typePropName && key !== labelPropName) { - newProps[key] = props[key]; + var WrappedComponent = props[typePropName]; + var registeredStyles = [cssProp]; + var className = ""; + if (typeof props.className === "string") { + className = getRegisteredStyles(cache.registered, registeredStyles, props.className); + } else if (props.className != null) { + className = props.className + " "; } - } - newProps.ref = ref; - newProps.className = className; - return /* @__PURE__ */ g(m, null, /* @__PURE__ */ g(Insertion, { - cache, - serialized, - isStringTag: typeof WrappedComponent === "string" - }), /* @__PURE__ */ g(WrappedComponent, newProps)); -}); -if (true) { - Emotion.displayName = "EmotionCssPropInternal"; -} -var Emotion$1 = Emotion; - -// node_modules/@emotion/react/dist/emotion-react.browser.esm.js -var import_hoist_non_react_statics = __toESM(require_hoist_non_react_statics_cjs()); -var pkg = { - name: "@emotion/react", - version: "11.11.4", - main: "dist/emotion-react.cjs.js", - module: "dist/emotion-react.esm.js", - browser: { - "./dist/emotion-react.esm.js": "./dist/emotion-react.browser.esm.js" - }, - exports: { - ".": { - module: { - worker: "./dist/emotion-react.worker.esm.js", - browser: "./dist/emotion-react.browser.esm.js", - "default": "./dist/emotion-react.esm.js" - }, - "import": "./dist/emotion-react.cjs.mjs", - "default": "./dist/emotion-react.cjs.js" - }, - "./jsx-runtime": { - module: { - worker: "./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js", - browser: "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js" - }, - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js" - }, - "./_isolated-hnrs": { - module: { - worker: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js", - browser: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js" - }, - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js" - }, - "./jsx-dev-runtime": { - module: { - worker: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js", - browser: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js" - }, - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js" - }, - "./package.json": "./package.json", - "./types/css-prop": "./types/css-prop.d.ts", - "./macro": { - types: { - "import": "./macro.d.mts", - "default": "./macro.d.ts" - }, - "default": "./macro.js" - } - }, - types: "types/index.d.ts", - files: [ - "src", - "dist", - "jsx-runtime", - "jsx-dev-runtime", - "_isolated-hnrs", - "types/*.d.ts", - "macro.*" - ], - sideEffects: false, - author: "Emotion Contributors", - license: "MIT", - scripts: { - "test:typescript": "dtslint types" - }, - dependencies: { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "hoist-non-react-statics": "^3.3.1" - }, - peerDependencies: { - react: ">=16.8.0" - }, - peerDependenciesMeta: { - "@types/react": { - optional: true - } - }, - devDependencies: { - "@definitelytyped/dtslint": "0.0.112", - "@emotion/css": "11.11.2", - "@emotion/css-prettifier": "1.1.3", - "@emotion/server": "11.11.0", - "@emotion/styled": "11.11.0", - "html-tag-names": "^1.1.2", - react: "16.14.0", - "svg-tag-names": "^1.1.1", - typescript: "^4.5.5" - }, - repository: "https://github.com/emotion-js/emotion/tree/main/packages/react", - publishConfig: { - access: "public" - }, - "umd:main": "dist/emotion-react.umd.min.js", - preconstruct: { - entrypoints: [ - "./index.js", - "./jsx-runtime.js", - "./jsx-dev-runtime.js", - "./_isolated-hnrs.js" - ], - umdName: "emotionReact", - exports: { - envConditions: [ - "browser", - "worker" - ], - extra: { - "./types/css-prop": "./types/css-prop.d.ts", - "./macro": { - types: { - "import": "./macro.d.mts", - "default": "./macro.d.ts" - }, - "default": "./macro.js" - } + var serialized = serializeStyles(registeredStyles, void 0, x2(ThemeContext)); + className += cache.key + "-" + serialized.name; + var newProps = {}; + for (var key in props) { + if (hasOwn.call(props, key) && key !== "css" && key !== typePropName && !isDevelopment3) { + newProps[key] = props[key]; } } + newProps.className = className; + if (ref) { + newProps.ref = ref; + } + return /* @__PURE__ */ _(b, null, /* @__PURE__ */ _(Insertion, { + cache, + serialized, + isStringTag: typeof WrappedComponent === "string" + }), /* @__PURE__ */ _(WrappedComponent, newProps)); } -}; +); +var Emotion$1 = Emotion; + +// node_modules/@emotion/react/dist/emotion-react.esm.js +var import_extends2 = __toESM(require_extends()); +var import_hoist_non_react_statics = __toESM(require_hoist_non_react_statics_cjs()); var jsx = function jsx2(type, props) { var args = arguments; if (props == null || !hasOwn.call(props, "css")) { - return g.apply(void 0, args); + return _.apply(void 0, args); } var argsLength = args.length; var createElementArgArray = new Array(argsLength); @@ -38777,88 +44570,8 @@ var jsx = function jsx2(type, props) { for (var i4 = 2; i4 < argsLength; i4++) { createElementArgArray[i4] = args[i4]; } - return g.apply(null, createElementArgArray); + return _.apply(null, createElementArgArray); }; -var warnedAboutCssPropForGlobal = false; -var Global = /* @__PURE__ */ withEmotionCache(function(props, cache) { - if (!warnedAboutCssPropForGlobal && // check for className as well since the user is - // probably using the custom createElement which - // means it will be turned into a className prop - // $FlowFixMe I don't really want to add it to the type since it shouldn't be used - (props.className || props.css)) { - console.error("It looks like you're using the css prop on Global, did you mean to use the styles prop instead?"); - warnedAboutCssPropForGlobal = true; - } - var styles2 = props.styles; - var serialized = serializeStyles([styles2], void 0, P4(ThemeContext)); - if (!isBrowser2) { - var _ref4; - var serializedNames = serialized.name; - var serializedStyles = serialized.styles; - var next3 = serialized.next; - while (next3 !== void 0) { - serializedNames += " " + next3.name; - serializedStyles += next3.styles; - next3 = next3.next; - } - var shouldCache = cache.compat === true; - var rules = cache.insert("", { - name: serializedNames, - styles: serializedStyles - }, cache.sheet, shouldCache); - if (shouldCache) { - return null; - } - return /* @__PURE__ */ g("style", (_ref4 = {}, _ref4["data-emotion"] = cache.key + "-global " + serializedNames, _ref4.dangerouslySetInnerHTML = { - __html: rules - }, _ref4.nonce = cache.sheet.nonce, _ref4)); - } - var sheetRef = F2(); - useInsertionEffectWithLayoutFallback(function() { - var key = cache.key + "-global"; - var sheet = new cache.sheet.constructor({ - key, - nonce: cache.sheet.nonce, - container: cache.sheet.container, - speedy: cache.sheet.isSpeedy - }); - var rehydrating = false; - var node2 = document.querySelector('style[data-emotion="' + key + " " + serialized.name + '"]'); - if (cache.sheet.tags.length) { - sheet.before = cache.sheet.tags[0]; - } - if (node2 !== null) { - rehydrating = true; - node2.setAttribute("data-emotion", key); - sheet.hydrate([node2]); - } - sheetRef.current = [sheet, rehydrating]; - return function() { - sheet.flush(); - }; - }, [cache]); - useInsertionEffectWithLayoutFallback(function() { - var sheetRefCurrent = sheetRef.current; - var sheet = sheetRefCurrent[0], rehydrating = sheetRefCurrent[1]; - if (rehydrating) { - sheetRefCurrent[1] = false; - return; - } - if (serialized.next !== void 0) { - insertStyles(cache, serialized.next, true); - } - if (sheet.tags.length) { - var element = sheet.tags[sheet.tags.length - 1].nextElementSibling; - sheet.before = element; - sheet.flush(); - } - cache.insert("", serialized, sheet, false); - }, [cache, serialized.name]); - return null; -}); -if (true) { - Global.displayName = "EmotionGlobal"; -} function css() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; @@ -38877,128 +44590,12 @@ var keyframes = function keyframes2() { } }; }; -var classnames = function classnames2(args) { - var len = args.length; - var i4 = 0; - var cls = ""; - for (; i4 < len; i4++) { - var arg = args[i4]; - if (arg == null) - continue; - var toAdd = void 0; - switch (typeof arg) { - case "boolean": - break; - case "object": { - if (Array.isArray(arg)) { - toAdd = classnames2(arg); - } else { - if (arg.styles !== void 0 && arg.name !== void 0) { - console.error("You have passed styles created with `css` from `@emotion/react` package to the `cx`.\n`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component."); - } - toAdd = ""; - for (var k4 in arg) { - if (arg[k4] && k4) { - toAdd && (toAdd += " "); - toAdd += k4; - } - } - } - break; - } - default: { - toAdd = arg; - } - } - if (toAdd) { - cls && (cls += " "); - cls += toAdd; - } - } - return cls; -}; -function merge(registered, css6, className) { - var registeredStyles = []; - var rawClassName = getRegisteredStyles(registered, registeredStyles, className); - if (registeredStyles.length < 2) { - return className; - } - return rawClassName + css6(registeredStyles); -} -var Insertion3 = function Insertion4(_ref4) { - var cache = _ref4.cache, serializedArr = _ref4.serializedArr; - useInsertionEffectAlwaysWithSyncFallback(function() { - for (var i4 = 0; i4 < serializedArr.length; i4++) { - insertStyles(cache, serializedArr[i4], false); - } - }); - return null; -}; -var ClassNames = /* @__PURE__ */ withEmotionCache(function(props, cache) { - var hasRendered = false; - var serializedArr = []; - var css6 = function css7() { - if (hasRendered && true) { - throw new Error("css can only be used during render"); - } - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - var serialized = serializeStyles(args, cache.registered); - serializedArr.push(serialized); - registerStyles(cache, serialized, false); - return cache.key + "-" + serialized.name; - }; - var cx = function cx2() { - if (hasRendered && true) { - throw new Error("cx can only be used during render"); - } - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - return merge(cache.registered, css6, classnames(args)); - }; - var content = { - css: css6, - cx, - theme: P4(ThemeContext) - }; - var ele = props.children(content); - hasRendered = true; - return /* @__PURE__ */ g(m, null, /* @__PURE__ */ g(Insertion3, { - cache, - serializedArr - }), ele); -}); -if (true) { - ClassNames.displayName = "EmotionClassNames"; -} -if (true) { - isBrowser3 = true; - isTestEnv = typeof jest !== "undefined" || typeof vi !== "undefined"; - if (isBrowser3 && !isTestEnv) { - globalContext = // $FlowIgnore - typeof globalThis !== "undefined" ? globalThis : isBrowser3 ? window : global; - globalKey = "__EMOTION_REACT_" + pkg.version.split(".")[0] + "__"; - if (globalContext[globalKey]) { - console.warn("You are loading @emotion/react when it is already loaded. Running multiple instances may cause problems. This can happen if multiple versions are used, or if multiple builds of the same version are used."); - } - globalContext[globalKey] = true; - } -} -var isBrowser3; -var isTestEnv; -var globalContext; -var globalKey; // node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js -function _taggedTemplateLiteral(strings, raw) { - if (!raw) { - raw = strings.slice(0); - } - return Object.freeze(Object.defineProperties(strings, { +function _taggedTemplateLiteral(e3, t4) { + return t4 || (t4 = e3.slice(0)), Object.freeze(Object.defineProperties(e3, { raw: { - value: Object.freeze(raw) + value: Object.freeze(t4) } })); } @@ -39015,23 +44612,26 @@ var createCoords = (v3) => ({ function rectToClientRect(rect) { const { x: x4, - y: y3, + y: y4, width, height } = rect; return { width, height, - top: y3, + top: y4, left: x4, right: x4 + width, - bottom: y3 + height, + bottom: y4 + height, x: x4, - y: y3 + y: y4 }; } // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +function hasWindow() { + return typeof window !== "undefined"; +} function getNodeName(node2) { if (isNode(node2)) { return (node2.nodeName || "").toLowerCase(); @@ -39043,20 +44643,29 @@ function getWindow(node2) { return (node2 == null || (_node$ownerDocument = node2.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; } function getDocumentElement(node2) { - var _ref4; - return (_ref4 = (isNode(node2) ? node2.ownerDocument : node2.document) || window.document) == null ? void 0 : _ref4.documentElement; + var _ref3; + return (_ref3 = (isNode(node2) ? node2.ownerDocument : node2.document) || window.document) == null ? void 0 : _ref3.documentElement; } function isNode(value) { + if (!hasWindow()) { + return false; + } return value instanceof Node || value instanceof getWindow(value).Node; } function isElement(value) { + if (!hasWindow()) { + return false; + } return value instanceof Element || value instanceof getWindow(value).Element; } function isHTMLElement(value) { + if (!hasWindow()) { + return false; + } return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement; } function isShadowRoot(value) { - if (typeof ShadowRoot === "undefined") { + if (!hasWindow() || typeof ShadowRoot === "undefined") { return false; } return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot; @@ -39071,8 +44680,7 @@ function isOverflowElement(element) { return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !["inline", "contents"].includes(display); } function isWebKit() { - if (typeof CSS === "undefined" || !CSS.supports) - return false; + if (typeof CSS === "undefined" || !CSS.supports) return false; return CSS.supports("-webkit-backdrop-filter", "none"); } function isLastTraversableNode(node2) { @@ -39116,10 +44724,14 @@ function getOverflowAncestors(node2, list, traverseIframes) { const isBody = scrollableAncestor === ((_node$ownerDocument2 = node2.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); const win = getWindow(scrollableAncestor); if (isBody) { - return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []); + const frameElement = getFrameElement(win); + return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); } return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); } +function getFrameElement(win) { + return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; +} // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs function getCssDimensions(element) { @@ -39155,16 +44767,16 @@ function getScale(element) { $: $3 } = getCssDimensions(domElement); let x4 = ($3 ? round(rect.width) : rect.width) / width; - let y3 = ($3 ? round(rect.height) : rect.height) / height; + let y4 = ($3 ? round(rect.height) : rect.height) / height; if (!x4 || !Number.isFinite(x4)) { x4 = 1; } - if (!y3 || !Number.isFinite(y3)) { - y3 = 1; + if (!y4 || !Number.isFinite(y4)) { + y4 = 1; } return { x: x4, - y: y3 + y: y4 }; } var noOffsets = /* @__PURE__ */ createCoords(0); @@ -39208,14 +44820,14 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar } const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); let x4 = (clientRect.left + visualOffsets.x) / scale.x; - let y3 = (clientRect.top + visualOffsets.y) / scale.y; + let y4 = (clientRect.top + visualOffsets.y) / scale.y; let width = clientRect.width / scale.x; let height = clientRect.height / scale.y; if (domElement) { const win = getWindow(domElement); const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; let currentWin = win; - let currentIFrame = currentWin.frameElement; + let currentIFrame = getFrameElement(currentWin); while (currentIFrame && offsetParent && offsetWin !== currentWin) { const iframeScale = getScale(currentIFrame); const iframeRect = currentIFrame.getBoundingClientRect(); @@ -39223,20 +44835,20 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css6.paddingLeft)) * iframeScale.x; const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css6.paddingTop)) * iframeScale.y; x4 *= iframeScale.x; - y3 *= iframeScale.y; + y4 *= iframeScale.y; width *= iframeScale.x; height *= iframeScale.y; x4 += left; - y3 += top; + y4 += top; currentWin = getWindow(currentIFrame); - currentIFrame = currentWin.frameElement; + currentIFrame = getFrameElement(currentWin); } } return rectToClientRect({ width, height, x: x4, - y: y3 + y: y4 }); } function observeMove(element, onMove) { @@ -39332,8 +44944,8 @@ function autoUpdate(reference, floating, update, options2) { let reobserveFrame = -1; let resizeObserver = null; if (elementResize) { - resizeObserver = new ResizeObserver((_ref4) => { - let [firstEntry] = _ref4; + resizeObserver = new ResizeObserver((_ref3) => { + let [firstEntry] = _ref3; if (firstEntry && firstEntry.target === referenceEl && resizeObserver) { resizeObserver.unobserve(floating); cancelAnimationFrame(reobserveFrame); @@ -39378,11 +44990,8 @@ function autoUpdate(reference, floating, update, options2) { }; } -// node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js -var index = A2; -var use_isomorphic_layout_effect_browser_esm_default = index; - // node_modules/react-select/dist/index-a301f526.esm.js +var import_use_isomorphic_layout_effect = __toESM(require_use_isomorphic_layout_effect_cjs()); var _excluded$4 = ["className", "clearValue", "cx", "getStyles", "getClassNames", "getValue", "hasValue", "isMulti", "isRtl", "options", "selectOption", "selectProps", "setValue", "theme"]; var noop = function noop2() { }; @@ -39395,14 +45004,14 @@ function applyPrefixToName(prefix2, name) { return prefix2 + "__" + name; } } -function classNames(prefix2, state2) { +function classNames(prefix2, state) { for (var _len = arguments.length, classNameList = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { classNameList[_key - 2] = arguments[_key]; } var arr = [].concat(classNameList); - if (state2 && prefix2) { - for (var key in state2) { - if (state2.hasOwnProperty(key) && state2[key]) { + if (state && prefix2) { + for (var key in state) { + if (state.hasOwnProperty(key) && state[key]) { arr.push("".concat(applyPrefixToName(prefix2, key))); } } @@ -39414,10 +45023,8 @@ function classNames(prefix2, state2) { }).join(" "); } var cleanValue = function cleanValue2(value) { - if (isArray(value)) - return value.filter(Boolean); - if (_typeof(value) === "object" && value !== null) - return [value]; + if (isArray(value)) return value.filter(Boolean); + if (_typeof(value) === "object" && value !== null) return [value]; return []; }; var cleanCommonProps = function cleanCommonProps2(props) { @@ -39471,8 +45078,7 @@ function getScrollParent(element) { var style = getComputedStyle(element); var excludeStaticParent = style.position === "absolute"; var overflowRx = /(auto|scroll)/; - if (style.position === "fixed") - return document.documentElement; + if (style.position === "fixed") return document.documentElement; for (var parent = element; parent = parent.parentElement; ) { style = getComputedStyle(parent); if (excludeStaticParent && style.position === "static") { @@ -39484,8 +45090,8 @@ function getScrollParent(element) { } return document.documentElement; } -function easeOutCubic(t4, b3, c3, d4) { - return c3 * ((t4 = t4 / d4 - 1) * t4 * t4 + 1) + b3; +function easeOutCubic(t4, b3, c4, d3) { + return c4 * ((t4 = t4 / d3 - 1) * t4 * t4 + 1) + b3; } function animatedScrollTo(element, to) { var duration = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 200; @@ -39573,27 +45179,26 @@ var removeProps = function removeProps2(propsObj) { for (var _len2 = arguments.length, properties = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { properties[_key2 - 1] = arguments[_key2]; } - var propsMap = Object.entries(propsObj).filter(function(_ref4) { - var _ref23 = _slicedToArray(_ref4, 1), key = _ref23[0]; + var propsMap = Object.entries(propsObj).filter(function(_ref3) { + var _ref23 = _slicedToArray(_ref3, 1), key = _ref23[0]; return !properties.includes(key); }); - return propsMap.reduce(function(newProps, _ref32) { - var _ref4 = _slicedToArray(_ref32, 2), key = _ref4[0], val = _ref4[1]; + return propsMap.reduce(function(newProps, _ref3) { + var _ref4 = _slicedToArray(_ref3, 2), key = _ref4[0], val = _ref4[1]; newProps[key] = val; return newProps; }, {}); }; var _excluded$3 = ["children", "innerProps"]; var _excluded2$1 = ["children", "innerProps"]; -function getMenuPlacement(_ref4) { - var preferredMaxHeight = _ref4.maxHeight, menuEl = _ref4.menuEl, minHeight = _ref4.minHeight, preferredPlacement = _ref4.placement, shouldScroll = _ref4.shouldScroll, isFixedPosition = _ref4.isFixedPosition, controlHeight2 = _ref4.controlHeight; +function getMenuPlacement(_ref3) { + var preferredMaxHeight = _ref3.maxHeight, menuEl = _ref3.menuEl, minHeight = _ref3.minHeight, preferredPlacement = _ref3.placement, shouldScroll = _ref3.shouldScroll, isFixedPosition = _ref3.isFixedPosition, controlHeight2 = _ref3.controlHeight; var scrollParent = getScrollParent(menuEl); var defaultState = { placement: "bottom", maxHeight: preferredMaxHeight }; - if (!menuEl || !menuEl.offsetParent) - return defaultState; + if (!menuEl || !menuEl.offsetParent) return defaultState; var _scrollParent$getBoun = scrollParent.getBoundingClientRect(), scrollHeight = _scrollParent$getBoun.height; var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(), menuBottom = _menuEl$getBoundingCl.bottom, menuHeight = _menuEl$getBoundingCl.height, menuTop = _menuEl$getBoundingCl.top; var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(), containerTop = _menuEl$offsetParent$.top; @@ -39702,15 +45307,15 @@ function alignToControl(placement) { }; return placement ? placementToCSSProp[placement] : "bottom"; } -var coercePlacement = function coercePlacement2(p4) { - return p4 === "auto" ? "bottom" : p4; +var coercePlacement = function coercePlacement2(p3) { + return p3 === "auto" ? "bottom" : p3; }; var menuCSS = function menuCSS2(_ref23, unstyled) { - var _objectSpread24; + var _objectSpread22; var placement = _ref23.placement, _ref2$theme = _ref23.theme, borderRadius2 = _ref2$theme.borderRadius, spacing2 = _ref2$theme.spacing, colors2 = _ref2$theme.colors; - return _objectSpread2((_objectSpread24 = { + return _objectSpread2((_objectSpread22 = { label: "menu" - }, _defineProperty(_objectSpread24, alignToControl(placement), "100%"), _defineProperty(_objectSpread24, "position", "absolute"), _defineProperty(_objectSpread24, "width", "100%"), _defineProperty(_objectSpread24, "zIndex", 1), _objectSpread24), unstyled ? {} : { + }, _defineProperty(_objectSpread22, alignToControl(placement), "100%"), _defineProperty(_objectSpread22, "position", "absolute"), _defineProperty(_objectSpread22, "width", "100%"), _defineProperty(_objectSpread22, "zIndex", 1), _objectSpread22), unstyled ? {} : { backgroundColor: colors2.neutral0, borderRadius: borderRadius2, boxShadow: "0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)", @@ -39721,18 +45326,17 @@ var menuCSS = function menuCSS2(_ref23, unstyled) { var PortalPlacementContext = /* @__PURE__ */ G(null); var MenuPlacer = function MenuPlacer2(props) { var children = props.children, minMenuHeight = props.minMenuHeight, maxMenuHeight = props.maxMenuHeight, menuPlacement = props.menuPlacement, menuPosition = props.menuPosition, menuShouldScrollIntoView = props.menuShouldScrollIntoView, theme = props.theme; - var _ref32 = P4(PortalPlacementContext) || {}, setPortalPlacement = _ref32.setPortalPlacement; - var ref = F2(null); - var _useState = p2(maxMenuHeight), _useState2 = _slicedToArray(_useState, 2), maxHeight = _useState2[0], setMaxHeight = _useState2[1]; - var _useState3 = p2(null), _useState4 = _slicedToArray(_useState3, 2), placement = _useState4[0], setPlacement = _useState4[1]; + var _ref3 = x2(PortalPlacementContext) || {}, setPortalPlacement = _ref3.setPortalPlacement; + var ref = A2(null); + var _useState = h2(maxMenuHeight), _useState2 = _slicedToArray(_useState, 2), maxHeight = _useState2[0], setMaxHeight = _useState2[1]; + var _useState3 = h2(null), _useState4 = _slicedToArray(_useState3, 2), placement = _useState4[0], setPlacement = _useState4[1]; var controlHeight2 = theme.spacing.controlHeight; - use_isomorphic_layout_effect_browser_esm_default(function() { + (0, import_use_isomorphic_layout_effect.default)(function() { var menuEl = ref.current; - if (!menuEl) - return; + if (!menuEl) return; var isFixedPosition = menuPosition === "fixed"; var shouldScroll = menuShouldScrollIntoView && !isFixedPosition; - var state2 = getMenuPlacement({ + var state = getMenuPlacement({ maxHeight: maxMenuHeight, menuEl, minHeight: minMenuHeight, @@ -39741,9 +45345,9 @@ var MenuPlacer = function MenuPlacer2(props) { isFixedPosition, controlHeight: controlHeight2 }); - setMaxHeight(state2.maxHeight); - setPlacement(state2.placement); - setPortalPlacement === null || setPortalPlacement === void 0 ? void 0 : setPortalPlacement(state2.placement); + setMaxHeight(state.maxHeight); + setPlacement(state.placement); + setPortalPlacement === null || setPortalPlacement === void 0 ? void 0 : setPortalPlacement(state.placement); }, [maxMenuHeight, menuPlacement, menuPosition, menuShouldScrollIntoView, minMenuHeight, setPortalPlacement, controlHeight2]); return children({ ref, @@ -39827,18 +45431,17 @@ var menuPortalCSS = function menuPortalCSS2(_ref8) { }; var MenuPortal = function MenuPortal2(props) { var appendTo = props.appendTo, children = props.children, controlElement = props.controlElement, innerProps = props.innerProps, menuPlacement = props.menuPlacement, menuPosition = props.menuPosition; - var menuPortalRef = F2(null); - var cleanupRef = F2(null); - var _useState5 = p2(coercePlacement(menuPlacement)), _useState6 = _slicedToArray(_useState5, 2), placement = _useState6[0], setPortalPlacement = _useState6[1]; - var portalPlacementContext = q2(function() { + var menuPortalRef = A2(null); + var cleanupRef = A2(null); + var _useState5 = h2(coercePlacement(menuPlacement)), _useState6 = _slicedToArray(_useState5, 2), placement = _useState6[0], setPortalPlacement = _useState6[1]; + var portalPlacementContext = T2(function() { return { setPortalPlacement }; }, []); - var _useState7 = p2(null), _useState8 = _slicedToArray(_useState7, 2), computedPosition = _useState8[0], setComputedPosition = _useState8[1]; - var updateComputedPosition = x2(function() { - if (!controlElement) - return; + var _useState7 = h2(null), _useState8 = _slicedToArray(_useState7, 2), computedPosition = _useState8[0], setComputedPosition = _useState8[1]; + var updateComputedPosition = q2(function() { + if (!controlElement) return; var rect = getBoundingClientObj(controlElement); var scrollDistance = menuPosition === "fixed" ? 0 : window.pageYOffset; var offset3 = rect[placement] + scrollDistance; @@ -39849,10 +45452,10 @@ var MenuPortal = function MenuPortal2(props) { }); } }, [controlElement, menuPosition, placement, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width]); - use_isomorphic_layout_effect_browser_esm_default(function() { + (0, import_use_isomorphic_layout_effect.default)(function() { updateComputedPosition(); }, [updateComputedPosition]); - var runAutoUpdate = x2(function() { + var runAutoUpdate = q2(function() { if (typeof cleanupRef.current === "function") { cleanupRef.current(); cleanupRef.current = null; @@ -39863,15 +45466,14 @@ var MenuPortal = function MenuPortal2(props) { }); } }, [controlElement, updateComputedPosition]); - use_isomorphic_layout_effect_browser_esm_default(function() { + (0, import_use_isomorphic_layout_effect.default)(function() { runAutoUpdate(); }, [runAutoUpdate]); - var setMenuPortalElement = x2(function(menuPortalElement) { + var setMenuPortalElement = q2(function(menuPortalElement) { menuPortalRef.current = menuPortalElement; runAutoUpdate(); }, [runAutoUpdate]); - if (!appendTo && menuPosition !== "fixed" || !computedPosition) - return null; + if (!appendTo && menuPosition !== "fixed" || !computedPosition) return null; var menuWrapper = jsx("div", _extends({ ref: setMenuPortalElement }, getStyleProps(_objectSpread2(_objectSpread2({}, props), {}, { @@ -39883,10 +45485,10 @@ var MenuPortal = function MenuPortal2(props) { }), innerProps), children); return jsx(PortalPlacementContext.Provider, { value: portalPlacementContext - }, appendTo ? /* @__PURE__ */ j3(menuWrapper, appendTo) : menuWrapper); + }, appendTo ? /* @__PURE__ */ P5(menuWrapper, appendTo) : menuWrapper); }; -var containerCSS = function containerCSS2(_ref4) { - var isDisabled = _ref4.isDisabled, isRtl = _ref4.isRtl; +var containerCSS = function containerCSS2(_ref3) { + var isDisabled = _ref3.isDisabled, isRtl = _ref3.isRtl; return { label: "container", direction: isRtl ? "rtl" : void 0, @@ -39944,7 +45546,7 @@ var _excluded2 = ["innerProps", "isRtl", "size"]; function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } -var _ref2 = false ? { +var _ref2 = process.env.NODE_ENV === "production" ? { name: "8mmkcg", styles: "display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0" } : { @@ -39953,8 +45555,8 @@ var _ref2 = false ? { map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3R5bGVQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHtcbiAgc2l6ZSxcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU6IG51bWJlciB9KSA9PiAoXG4gIDxzdmdcbiAgICBoZWlnaHQ9e3NpemV9XG4gICAgd2lkdGg9e3NpemV9XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgY3NzPXt7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgbGluZUhlaWdodDogMSxcbiAgICAgIHN0cm9rZTogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBzdHJva2VXaWR0aDogMCxcbiAgICB9fVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIENyb3NzSWNvblByb3BzID0gSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZT86IG51bWJlciB9O1xuZXhwb3J0IGNvbnN0IENyb3NzSWNvbiA9IChwcm9wczogQ3Jvc3NJY29uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCB0eXBlIERvd25DaGV2cm9uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgRG93bkNoZXZyb24gPSAocHJvcHM6IERvd25DaGV2cm9uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiIC8+XG4gIDwvU3ZnPlxuKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBiYXNlQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTpcbiAgICB8IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbiAgICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICAgICc6aG92ZXInOiB7XG4gICAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgICAgICB9LFxuICAgICAgfSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBEcm9wZG93bkluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2Ryb3Bkb3duSW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NsZWFySW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPENyb3NzSWNvbiAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VwYXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaW5uZXJQcm9wcz86IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3BhbiddO1xufVxuXG5leHBvcnQgY29uc3QgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNEaXNhYmxlZCxcbiAgICB0aGVtZToge1xuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgICAgY29sb3JzLFxuICAgIH0sXG4gIH06IEluZGljYXRvclNlcGFyYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+LFxuICB1bnN0eWxlZDogYm9vbGVhblxuKTogQ1NTT2JqZWN0V2l0aExhYmVsID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yU2VwYXJhdG9yJyxcbiAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIHdpZHRoOiAxLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICAgICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICAgICAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHNpemUsXG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9ycyxcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICB9LFxuICB9OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICAgICAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICAgICAgfSksXG59KTtcblxuaW50ZXJmYWNlIExvYWRpbmdEb3RQcm9wcyB7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG9mZnNldDogYm9vbGVhbjtcbn1cbmNvbnN0IExvYWRpbmdEb3QgPSAoeyBkZWxheSwgb2Zmc2V0IH06IExvYWRpbmdEb3RQcm9wcykgPT4gKFxuICA8c3BhblxuICAgIGNzcz17e1xuICAgICAgYW5pbWF0aW9uOiBgJHtsb2FkaW5nRG90QW5pbWF0aW9uc30gMXMgZWFzZS1pbi1vdXQgJHtkZWxheX1tcyBpbmZpbml0ZTtgLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdJbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIFNldCBzaXplIG9mIHRoZSBjb250YWluZXIuICovXG4gIHNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaW5uZXJQcm9wcyxcbiAgaXNSdGwsXG4gIHNpemUgPSA0LFxuICAuLi5yZXN0UHJvcHNcbn06IExvYWRpbmdJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKFxuICAgICAgICB7IC4uLnJlc3RQcm9wcywgaW5uZXJQcm9wcywgaXNSdGwsIHNpemUgfSxcbiAgICAgICAgJ2xvYWRpbmdJbmRpY2F0b3InLFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH1cbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MH0gb2Zmc2V0PXtpc1J0bH0gLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXsxNjB9IG9mZnNldCAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezMyMH0gb2Zmc2V0PXshaXNSdGx9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19 */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ }; -var Svg = function Svg2(_ref4) { - var size2 = _ref4.size, props = _objectWithoutProperties(_ref4, _excluded$2); +var Svg = function Svg2(_ref3) { + var size2 = _ref3.size, props = _objectWithoutProperties(_ref3, _excluded$2); return jsx("svg", _extends({ height: size2, width: size2, @@ -39978,8 +45580,8 @@ var DownChevron = function DownChevron2(props) { d: "M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z" })); }; -var baseCSS = function baseCSS2(_ref32, unstyled) { - var isFocused = _ref32.isFocused, _ref3$theme = _ref32.theme, baseUnit2 = _ref3$theme.spacing.baseUnit, colors2 = _ref3$theme.colors; +var baseCSS = function baseCSS2(_ref3, unstyled) { + var isFocused = _ref3.isFocused, _ref3$theme = _ref3.theme, baseUnit2 = _ref3$theme.spacing.baseUnit, colors2 = _ref3$theme.colors; return _objectSpread2({ label: "indicatorContainer", display: "flex", @@ -40056,7 +45658,7 @@ var LoadingDot = function LoadingDot2(_ref6) { height: "1em", verticalAlign: "top", width: "1em" - }, false ? "" : ";label:LoadingDot;", false ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1RSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3R5bGVQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHtcbiAgc2l6ZSxcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU6IG51bWJlciB9KSA9PiAoXG4gIDxzdmdcbiAgICBoZWlnaHQ9e3NpemV9XG4gICAgd2lkdGg9e3NpemV9XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgY3NzPXt7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgbGluZUhlaWdodDogMSxcbiAgICAgIHN0cm9rZTogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBzdHJva2VXaWR0aDogMCxcbiAgICB9fVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIENyb3NzSWNvblByb3BzID0gSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZT86IG51bWJlciB9O1xuZXhwb3J0IGNvbnN0IENyb3NzSWNvbiA9IChwcm9wczogQ3Jvc3NJY29uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCB0eXBlIERvd25DaGV2cm9uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgRG93bkNoZXZyb24gPSAocHJvcHM6IERvd25DaGV2cm9uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiIC8+XG4gIDwvU3ZnPlxuKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBiYXNlQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTpcbiAgICB8IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbiAgICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICAgICc6aG92ZXInOiB7XG4gICAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgICAgICB9LFxuICAgICAgfSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBEcm9wZG93bkluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2Ryb3Bkb3duSW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NsZWFySW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPENyb3NzSWNvbiAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VwYXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaW5uZXJQcm9wcz86IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3BhbiddO1xufVxuXG5leHBvcnQgY29uc3QgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNEaXNhYmxlZCxcbiAgICB0aGVtZToge1xuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgICAgY29sb3JzLFxuICAgIH0sXG4gIH06IEluZGljYXRvclNlcGFyYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+LFxuICB1bnN0eWxlZDogYm9vbGVhblxuKTogQ1NTT2JqZWN0V2l0aExhYmVsID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yU2VwYXJhdG9yJyxcbiAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIHdpZHRoOiAxLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICAgICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICAgICAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHNpemUsXG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9ycyxcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICB9LFxuICB9OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICAgICAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICAgICAgfSksXG59KTtcblxuaW50ZXJmYWNlIExvYWRpbmdEb3RQcm9wcyB7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG9mZnNldDogYm9vbGVhbjtcbn1cbmNvbnN0IExvYWRpbmdEb3QgPSAoeyBkZWxheSwgb2Zmc2V0IH06IExvYWRpbmdEb3RQcm9wcykgPT4gKFxuICA8c3BhblxuICAgIGNzcz17e1xuICAgICAgYW5pbWF0aW9uOiBgJHtsb2FkaW5nRG90QW5pbWF0aW9uc30gMXMgZWFzZS1pbi1vdXQgJHtkZWxheX1tcyBpbmZpbml0ZTtgLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdJbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIFNldCBzaXplIG9mIHRoZSBjb250YWluZXIuICovXG4gIHNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaW5uZXJQcm9wcyxcbiAgaXNSdGwsXG4gIHNpemUgPSA0LFxuICAuLi5yZXN0UHJvcHNcbn06IExvYWRpbmdJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKFxuICAgICAgICB7IC4uLnJlc3RQcm9wcywgaW5uZXJQcm9wcywgaXNSdGwsIHNpemUgfSxcbiAgICAgICAgJ2xvYWRpbmdJbmRpY2F0b3InLFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH1cbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MH0gb2Zmc2V0PXtpc1J0bH0gLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXsxNjB9IG9mZnNldCAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezMyMH0gb2Zmc2V0PXshaXNSdGx9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19 */") + }, process.env.NODE_ENV === "production" ? "" : ";label:LoadingDot;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1RSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3R5bGVQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHtcbiAgc2l6ZSxcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU6IG51bWJlciB9KSA9PiAoXG4gIDxzdmdcbiAgICBoZWlnaHQ9e3NpemV9XG4gICAgd2lkdGg9e3NpemV9XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgY3NzPXt7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgbGluZUhlaWdodDogMSxcbiAgICAgIHN0cm9rZTogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBzdHJva2VXaWR0aDogMCxcbiAgICB9fVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIENyb3NzSWNvblByb3BzID0gSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZT86IG51bWJlciB9O1xuZXhwb3J0IGNvbnN0IENyb3NzSWNvbiA9IChwcm9wczogQ3Jvc3NJY29uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCB0eXBlIERvd25DaGV2cm9uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgRG93bkNoZXZyb24gPSAocHJvcHM6IERvd25DaGV2cm9uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiIC8+XG4gIDwvU3ZnPlxuKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBiYXNlQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTpcbiAgICB8IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbiAgICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICAgICc6aG92ZXInOiB7XG4gICAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgICAgICB9LFxuICAgICAgfSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBEcm9wZG93bkluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2Ryb3Bkb3duSW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NsZWFySW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPENyb3NzSWNvbiAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VwYXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaW5uZXJQcm9wcz86IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3BhbiddO1xufVxuXG5leHBvcnQgY29uc3QgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNEaXNhYmxlZCxcbiAgICB0aGVtZToge1xuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgICAgY29sb3JzLFxuICAgIH0sXG4gIH06IEluZGljYXRvclNlcGFyYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+LFxuICB1bnN0eWxlZDogYm9vbGVhblxuKTogQ1NTT2JqZWN0V2l0aExhYmVsID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yU2VwYXJhdG9yJyxcbiAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIHdpZHRoOiAxLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICAgICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICAgICAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHNpemUsXG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9ycyxcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICB9LFxuICB9OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICAgICAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICAgICAgfSksXG59KTtcblxuaW50ZXJmYWNlIExvYWRpbmdEb3RQcm9wcyB7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG9mZnNldDogYm9vbGVhbjtcbn1cbmNvbnN0IExvYWRpbmdEb3QgPSAoeyBkZWxheSwgb2Zmc2V0IH06IExvYWRpbmdEb3RQcm9wcykgPT4gKFxuICA8c3BhblxuICAgIGNzcz17e1xuICAgICAgYW5pbWF0aW9uOiBgJHtsb2FkaW5nRG90QW5pbWF0aW9uc30gMXMgZWFzZS1pbi1vdXQgJHtkZWxheX1tcyBpbmZpbml0ZTtgLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdJbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIFNldCBzaXplIG9mIHRoZSBjb250YWluZXIuICovXG4gIHNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaW5uZXJQcm9wcyxcbiAgaXNSdGwsXG4gIHNpemUgPSA0LFxuICAuLi5yZXN0UHJvcHNcbn06IExvYWRpbmdJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKFxuICAgICAgICB7IC4uLnJlc3RQcm9wcywgaW5uZXJQcm9wcywgaXNSdGwsIHNpemUgfSxcbiAgICAgICAgJ2xvYWRpbmdJbmRpY2F0b3InLFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH1cbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MH0gb2Zmc2V0PXtpc1J0bH0gLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXsxNjB9IG9mZnNldCAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezMyMH0gb2Zmc2V0PXshaXNSdGx9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19 */") }); }; var LoadingIndicator = function LoadingIndicator2(_ref7) { @@ -40079,8 +45681,8 @@ var LoadingIndicator = function LoadingIndicator2(_ref7) { offset: !isRtl })); }; -var css$1 = function css2(_ref4, unstyled) { - var isDisabled = _ref4.isDisabled, isFocused = _ref4.isFocused, _ref$theme = _ref4.theme, colors2 = _ref$theme.colors, borderRadius2 = _ref$theme.borderRadius, spacing2 = _ref$theme.spacing; +var css$1 = function css2(_ref3, unstyled) { + var isDisabled = _ref3.isDisabled, isFocused = _ref3.isFocused, _ref$theme = _ref3.theme, colors2 = _ref$theme.colors, borderRadius2 = _ref$theme.borderRadius, spacing2 = _ref$theme.spacing; return _objectSpread2({ label: "control", alignItems: "center", @@ -40119,8 +45721,8 @@ var Control = function Control2(props) { }; var Control$1 = Control; var _excluded$1 = ["data"]; -var groupCSS = function groupCSS2(_ref4, unstyled) { - var spacing2 = _ref4.theme.spacing; +var groupCSS = function groupCSS2(_ref3, unstyled) { + var spacing2 = _ref3.theme.spacing; return unstyled ? {} : { paddingBottom: spacing2.baseUnit * 2, paddingTop: spacing2.baseUnit * 2 @@ -40164,8 +45766,8 @@ var GroupHeading = function GroupHeading2(props) { }; var Group$1 = Group2; var _excluded3 = ["innerRef", "isDisabled", "isHidden", "inputClassName"]; -var inputCSS = function inputCSS2(_ref4, unstyled) { - var isDisabled = _ref4.isDisabled, value = _ref4.value, _ref$theme = _ref4.theme, spacing2 = _ref$theme.spacing, colors2 = _ref$theme.colors; +var inputCSS = function inputCSS2(_ref3, unstyled) { + var isDisabled = _ref3.isDisabled, value = _ref3.value, _ref$theme = _ref3.theme, spacing2 = _ref$theme.spacing, colors2 = _ref$theme.colors; return _objectSpread2(_objectSpread2({ visibility: isDisabled ? "hidden" : "visible", // force css to recompute when value change due to @emotion bug. @@ -40224,8 +45826,8 @@ var Input = function Input2(props) { }, innerProps))); }; var Input$1 = Input; -var multiValueCSS = function multiValueCSS2(_ref4, unstyled) { - var _ref$theme = _ref4.theme, spacing2 = _ref$theme.spacing, borderRadius2 = _ref$theme.borderRadius, colors2 = _ref$theme.colors; +var multiValueCSS = function multiValueCSS2(_ref3, unstyled) { + var _ref$theme = _ref3.theme, spacing2 = _ref$theme.spacing, borderRadius2 = _ref$theme.borderRadius, colors2 = _ref$theme.colors; return _objectSpread2({ label: "multiValue", display: "flex", @@ -40250,8 +45852,8 @@ var multiValueLabelCSS = function multiValueLabelCSS2(_ref23, unstyled) { paddingLeft: 6 }); }; -var multiValueRemoveCSS = function multiValueRemoveCSS2(_ref32, unstyled) { - var _ref3$theme = _ref32.theme, spacing2 = _ref3$theme.spacing, borderRadius2 = _ref3$theme.borderRadius, colors2 = _ref3$theme.colors, isFocused = _ref32.isFocused; +var multiValueRemoveCSS = function multiValueRemoveCSS2(_ref3, unstyled) { + var _ref3$theme = _ref3.theme, spacing2 = _ref3$theme.spacing, borderRadius2 = _ref3$theme.borderRadius, colors2 = _ref3$theme.colors, isFocused = _ref3.isFocused; return _objectSpread2({ alignItems: "center", display: "flex" @@ -40307,8 +45909,8 @@ var MultiValue = function MultiValue2(props) { })); }; var MultiValue$1 = MultiValue; -var optionCSS = function optionCSS2(_ref4, unstyled) { - var isDisabled = _ref4.isDisabled, isFocused = _ref4.isFocused, isSelected = _ref4.isSelected, _ref$theme = _ref4.theme, spacing2 = _ref$theme.spacing, colors2 = _ref$theme.colors; +var optionCSS = function optionCSS2(_ref3, unstyled) { + var isDisabled = _ref3.isDisabled, isFocused = _ref3.isFocused, isSelected = _ref3.isSelected, _ref$theme = _ref3.theme, spacing2 = _ref$theme.spacing, colors2 = _ref$theme.colors; return _objectSpread2({ label: "option", cursor: "default", @@ -40340,8 +45942,8 @@ var Option = function Option2(props) { }, innerProps), children); }; var Option$1 = Option; -var placeholderCSS = function placeholderCSS2(_ref4, unstyled) { - var _ref$theme = _ref4.theme, spacing2 = _ref$theme.spacing, colors2 = _ref$theme.colors; +var placeholderCSS = function placeholderCSS2(_ref3, unstyled) { + var _ref$theme = _ref3.theme, spacing2 = _ref$theme.spacing, colors2 = _ref$theme.colors; return _objectSpread2({ label: "placeholder", gridArea: "1 / 1 / 2 / 3" @@ -40358,8 +45960,8 @@ var Placeholder = function Placeholder2(props) { }), innerProps), children); }; var Placeholder$1 = Placeholder; -var css3 = function css4(_ref4, unstyled) { - var isDisabled = _ref4.isDisabled, _ref$theme = _ref4.theme, spacing2 = _ref$theme.spacing, colors2 = _ref$theme.colors; +var css3 = function css4(_ref3, unstyled) { + var isDisabled = _ref3.isDisabled, _ref$theme = _ref3.theme, spacing2 = _ref$theme.spacing, colors2 = _ref$theme.colors; return _objectSpread2({ label: "singleValue", gridArea: "1 / 1 / 2 / 3", @@ -40412,62 +46014,12 @@ var defaultComponents = function defaultComponents2(props) { return _objectSpread2(_objectSpread2({}, components), props.components); }; -// node_modules/memoize-one/dist/memoize-one.esm.js -var safeIsNaN = Number.isNaN || function ponyfill(value) { - return typeof value === "number" && value !== value; -}; -function isEqual(first, second) { - if (first === second) { - return true; - } - if (safeIsNaN(first) && safeIsNaN(second)) { - return true; - } - return false; -} -function areInputsEqual(newInputs, lastInputs) { - if (newInputs.length !== lastInputs.length) { - return false; - } - for (var i4 = 0; i4 < newInputs.length; i4++) { - if (!isEqual(newInputs[i4], lastInputs[i4])) { - return false; - } - } - return true; -} -function memoizeOne(resultFn, isEqual2) { - if (isEqual2 === void 0) { - isEqual2 = areInputsEqual; - } - var cache = null; - function memoized() { - var newArgs = []; - for (var _i = 0; _i < arguments.length; _i++) { - newArgs[_i] = arguments[_i]; - } - if (cache && cache.lastThis === this && isEqual2(newArgs, cache.lastArgs)) { - return cache.lastResult; - } - var lastResult = resultFn.apply(this, newArgs); - cache = { - lastResult, - lastArgs: newArgs, - lastThis: this - }; - return lastResult; - } - memoized.clear = function clear() { - cache = null; - }; - return memoized; -} - -// node_modules/react-select/dist/Select-49a62830.esm.js +// node_modules/react-select/dist/Select-1fd588c9.esm.js +var import_memoize_one = __toESM(require_memoize_one_cjs()); function _EMOTION_STRINGIFIED_CSS_ERROR__$2() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } -var _ref = false ? { +var _ref = process.env.NODE_ENV === "production" ? { name: "7pg0cj-a11yText", styles: "label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap" } : { @@ -40538,10 +46090,10 @@ var LiveRegion = function LiveRegion2(props) { var ariaLiveMessages = selectProps.ariaLiveMessages, getOptionLabel4 = selectProps.getOptionLabel, inputValue = selectProps.inputValue, isMulti = selectProps.isMulti, isOptionDisabled3 = selectProps.isOptionDisabled, isSearchable = selectProps.isSearchable, menuIsOpen = selectProps.menuIsOpen, options2 = selectProps.options, screenReaderStatus2 = selectProps.screenReaderStatus, tabSelectsValue = selectProps.tabSelectsValue, isLoading = selectProps.isLoading; var ariaLabel = selectProps["aria-label"]; var ariaLive = selectProps["aria-live"]; - var messages = q2(function() { + var messages = T2(function() { return _objectSpread2(_objectSpread2({}, defaultAriaLiveMessages), ariaLiveMessages || {}); }, [ariaLiveMessages]); - var ariaSelected = q2(function() { + var ariaSelected = T2(function() { var message = ""; if (ariaSelection && messages.onChange) { var option = ariaSelection.option, selectedOptions = ariaSelection.options, removedValue = ariaSelection.removedValue, removedValues = ariaSelection.removedValues, value = ariaSelection.value; @@ -40563,7 +46115,7 @@ var LiveRegion = function LiveRegion2(props) { } return message; }, [ariaSelection, messages, isOptionDisabled3, selectValue, getOptionLabel4]); - var ariaFocused = q2(function() { + var ariaFocused = T2(function() { var focusMsg = ""; var focused = focusedOption || focusedValue; var isSelected = !!(focusedOption && selectValue && selectValue.includes(focusedOption)); @@ -40582,7 +46134,7 @@ var LiveRegion = function LiveRegion2(props) { } return focusMsg; }, [focusedOption, focusedValue, getOptionLabel4, isOptionDisabled3, messages, focusableOptions, selectValue, isAppleDevice2]); - var ariaResults = q2(function() { + var ariaResults = T2(function() { var resultsMsg = ""; if (menuIsOpen && options2.length && !isLoading && messages.onFilter) { var resultsMessage = screenReaderStatus2({ @@ -40596,7 +46148,7 @@ var LiveRegion = function LiveRegion2(props) { return resultsMsg; }, [focusableOptions, inputValue, menuIsOpen, messages, options2, screenReaderStatus2, isLoading]); var isInitialFocus = (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === "initial-input-focus"; - var ariaGuidance = q2(function() { + var ariaGuidance = T2(function() { var guidanceMsg = ""; if (messages.guidance) { var context = focusedValue ? "value" : menuIsOpen ? "menu" : "input"; @@ -40612,7 +46164,7 @@ var LiveRegion = function LiveRegion2(props) { } return guidanceMsg; }, [ariaLabel, focusedOption, focusedValue, isMulti, isOptionDisabled3, isSearchable, menuIsOpen, messages, selectValue, tabSelectsValue, isInitialFocus]); - var ScreenReaderText = jsx(m, null, jsx("span", { + var ScreenReaderText = jsx(b, null, jsx("span", { id: "aria-selection" }, ariaSelected), jsx("span", { id: "aria-focused" @@ -40621,7 +46173,7 @@ var LiveRegion = function LiveRegion2(props) { }, ariaResults), jsx("span", { id: "aria-guidance" }, ariaGuidance)); - return jsx(m, null, jsx(A11yText$1, { + return jsx(b, null, jsx(A11yText$1, { id }, isInitialFocus && ScreenReaderText), jsx(A11yText$1, { "aria-live": ariaLive, @@ -40884,8 +46436,8 @@ var diacritics = [{ base: "z", letters: "z\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763" }]; -var anyDiacritic = new RegExp("[" + diacritics.map(function(d4) { - return d4.letters; +var anyDiacritic = new RegExp("[" + diacritics.map(function(d3) { + return d3.letters; }).join("") + "]", "g"); var diacriticToBase = {}; for (i4 = 0; i4 < diacritics.length; i4++) { @@ -40898,11 +46450,11 @@ var diacritic; var j4; var i4; var stripDiacritics = function stripDiacritics2(str) { - return str.replace(anyDiacritic, function(match4) { - return diacriticToBase[match4]; + return str.replace(anyDiacritic, function(match3) { + return diacriticToBase[match3]; }); }; -var memoizedStripDiacriticsForInput = memoizeOne(stripDiacritics); +var memoizedStripDiacriticsForInput = (0, import_memoize_one.default)(stripDiacritics); var trimString = function trimString2(str) { return str.replace(/^\s+|\s+$/g, ""); }; @@ -40911,8 +46463,7 @@ var defaultStringify = function defaultStringify2(option) { }; var createFilter = function createFilter2(config2) { return function(option, rawInput) { - if (option.data.__isNew__) - return true; + if (option.data.__isNew__) return true; var _ignoreCase$ignoreAcc = _objectSpread2({ ignoreCase: true, ignoreAccents: true, @@ -40920,22 +46471,22 @@ var createFilter = function createFilter2(config2) { trim: true, matchFrom: "any" }, config2), ignoreCase = _ignoreCase$ignoreAcc.ignoreCase, ignoreAccents = _ignoreCase$ignoreAcc.ignoreAccents, stringify2 = _ignoreCase$ignoreAcc.stringify, trim2 = _ignoreCase$ignoreAcc.trim, matchFrom = _ignoreCase$ignoreAcc.matchFrom; - var input2 = trim2 ? trimString(rawInput) : rawInput; + var input = trim2 ? trimString(rawInput) : rawInput; var candidate = trim2 ? trimString(stringify2(option)) : stringify2(option); if (ignoreCase) { - input2 = input2.toLowerCase(); + input = input.toLowerCase(); candidate = candidate.toLowerCase(); } if (ignoreAccents) { - input2 = memoizedStripDiacriticsForInput(input2); + input = memoizedStripDiacriticsForInput(input); candidate = stripDiacritics(candidate); } - return matchFrom === "start" ? candidate.substr(0, input2.length) === input2 : candidate.indexOf(input2) > -1; + return matchFrom === "start" ? candidate.substr(0, input.length) === input : candidate.indexOf(input) > -1; }; }; var _excluded4 = ["innerRef"]; -function DummyInput(_ref4) { - var innerRef = _ref4.innerRef, props = _objectWithoutProperties(_ref4, _excluded4); +function DummyInput(_ref3) { + var innerRef = _ref3.innerRef, props = _objectWithoutProperties(_ref3, _excluded4); var filteredProps = removeProps(props, "onExited", "in", "enter", "exit", "appear"); return jsx("input", _extends({ ref: innerRef @@ -40960,36 +46511,32 @@ function DummyInput(_ref4) { opacity: 0, position: "relative", transform: "scale(.01)" - }, false ? "" : ";label:DummyInput;", false ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCTSIsImZpbGUiOiJEdW1teUlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgcmVtb3ZlUHJvcHMgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIER1bW15SW5wdXQoe1xuICBpbm5lclJlZixcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snaW5wdXQnXSAmIHtcbiAgcmVhZG9ubHkgaW5uZXJSZWY6IFJlZjxIVE1MSW5wdXRFbGVtZW50Pjtcbn0pIHtcbiAgLy8gUmVtb3ZlIGFuaW1hdGlvbiBwcm9wcyBub3QgbWVhbnQgZm9yIEhUTUwgZWxlbWVudHNcbiAgY29uc3QgZmlsdGVyZWRQcm9wcyA9IHJlbW92ZVByb3BzKFxuICAgIHByb3BzLFxuICAgICdvbkV4aXRlZCcsXG4gICAgJ2luJyxcbiAgICAnZW50ZXInLFxuICAgICdleGl0JyxcbiAgICAnYXBwZWFyJ1xuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9e2lubmVyUmVmfVxuICAgICAgey4uLmZpbHRlcmVkUHJvcHN9XG4gICAgICBjc3M9e3tcbiAgICAgICAgbGFiZWw6ICdkdW1teUlucHV0JyxcbiAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgICBvdXRsaW5lOiAwLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgICB3aWR0aDogMSxcblxuICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG5cbiAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgICBsZWZ0OiAtMTAwLFxuICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoLjAxKScsXG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59XG4iXX0= */") + }, process.env.NODE_ENV === "production" ? "" : ";label:DummyInput;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCTSIsImZpbGUiOiJEdW1teUlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgcmVtb3ZlUHJvcHMgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIER1bW15SW5wdXQoe1xuICBpbm5lclJlZixcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snaW5wdXQnXSAmIHtcbiAgcmVhZG9ubHkgaW5uZXJSZWY6IFJlZjxIVE1MSW5wdXRFbGVtZW50Pjtcbn0pIHtcbiAgLy8gUmVtb3ZlIGFuaW1hdGlvbiBwcm9wcyBub3QgbWVhbnQgZm9yIEhUTUwgZWxlbWVudHNcbiAgY29uc3QgZmlsdGVyZWRQcm9wcyA9IHJlbW92ZVByb3BzKFxuICAgIHByb3BzLFxuICAgICdvbkV4aXRlZCcsXG4gICAgJ2luJyxcbiAgICAnZW50ZXInLFxuICAgICdleGl0JyxcbiAgICAnYXBwZWFyJ1xuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9e2lubmVyUmVmfVxuICAgICAgey4uLmZpbHRlcmVkUHJvcHN9XG4gICAgICBjc3M9e3tcbiAgICAgICAgbGFiZWw6ICdkdW1teUlucHV0JyxcbiAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgICBvdXRsaW5lOiAwLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgICB3aWR0aDogMSxcblxuICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG5cbiAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgICBsZWZ0OiAtMTAwLFxuICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoLjAxKScsXG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59XG4iXX0= */") })); } var cancelScroll = function cancelScroll2(event) { - if (event.cancelable) - event.preventDefault(); + if (event.cancelable) event.preventDefault(); event.stopPropagation(); }; -function useScrollCapture(_ref4) { - var isEnabled = _ref4.isEnabled, onBottomArrive = _ref4.onBottomArrive, onBottomLeave = _ref4.onBottomLeave, onTopArrive = _ref4.onTopArrive, onTopLeave = _ref4.onTopLeave; - var isBottom = F2(false); - var isTop = F2(false); - var touchStart = F2(0); - var scrollTarget = F2(null); - var handleEventDelta = x2(function(event, delta) { - if (scrollTarget.current === null) - return; +function useScrollCapture(_ref3) { + var isEnabled = _ref3.isEnabled, onBottomArrive = _ref3.onBottomArrive, onBottomLeave = _ref3.onBottomLeave, onTopArrive = _ref3.onTopArrive, onTopLeave = _ref3.onTopLeave; + var isBottom = A2(false); + var isTop = A2(false); + var touchStart = A2(0); + var scrollTarget = A2(null); + var handleEventDelta = q2(function(event, delta) { + if (scrollTarget.current === null) return; var _scrollTarget$current = scrollTarget.current, scrollTop = _scrollTarget$current.scrollTop, scrollHeight = _scrollTarget$current.scrollHeight, clientHeight = _scrollTarget$current.clientHeight; var target = scrollTarget.current; var isDeltaPositive = delta > 0; var availableScroll = scrollHeight - clientHeight - scrollTop; var shouldCancelScroll = false; if (availableScroll > delta && isBottom.current) { - if (onBottomLeave) - onBottomLeave(event); + if (onBottomLeave) onBottomLeave(event); isBottom.current = false; } if (isDeltaPositive && isTop.current) { - if (onTopLeave) - onTopLeave(event); + if (onTopLeave) onTopLeave(event); isTop.current = false; } if (isDeltaPositive && delta > availableScroll) { @@ -41011,19 +46558,18 @@ function useScrollCapture(_ref4) { cancelScroll(event); } }, [onBottomArrive, onBottomLeave, onTopArrive, onTopLeave]); - var onWheel = x2(function(event) { + var onWheel = q2(function(event) { handleEventDelta(event, event.deltaY); }, [handleEventDelta]); - var onTouchStart = x2(function(event) { + var onTouchStart = q2(function(event) { touchStart.current = event.changedTouches[0].clientY; }, []); - var onTouchMove = x2(function(event) { + var onTouchMove = q2(function(event) { var deltaY = touchStart.current - event.changedTouches[0].clientY; handleEventDelta(event, deltaY); }, [handleEventDelta]); - var startListening = x2(function(el) { - if (!el) - return; + var startListening = q2(function(el) { + if (!el) return; var notPassive = supportsPassiveEvents ? { passive: false } : false; @@ -41031,16 +46577,14 @@ function useScrollCapture(_ref4) { el.addEventListener("touchstart", onTouchStart, notPassive); el.addEventListener("touchmove", onTouchMove, notPassive); }, [onTouchMove, onTouchStart, onWheel]); - var stopListening = x2(function(el) { - if (!el) - return; + var stopListening = q2(function(el) { + if (!el) return; el.removeEventListener("wheel", onWheel, false); el.removeEventListener("touchstart", onTouchStart, false); el.removeEventListener("touchmove", onTouchMove, false); }, [onTouchMove, onTouchStart, onWheel]); - _2(function() { - if (!isEnabled) - return; + y2(function() { + if (!isEnabled) return; var element = scrollTarget.current; startListening(element); return function() { @@ -41060,7 +46604,7 @@ var LOCK_STYLES = { height: "100%" }; function preventTouchMove(e3) { - e3.preventDefault(); + if (e3.cancelable) e3.preventDefault(); } function allowTouchMove(e3) { e3.stopPropagation(); @@ -41084,13 +46628,12 @@ var listenerOptions = { capture: false, passive: false }; -function useScrollLock(_ref4) { - var isEnabled = _ref4.isEnabled, _ref$accountForScroll = _ref4.accountForScrollbars, accountForScrollbars = _ref$accountForScroll === void 0 ? true : _ref$accountForScroll; - var originalStyles = F2({}); - var scrollTarget = F2(null); - var addScrollLock = x2(function(touchScrollTarget) { - if (!canUseDOM) - return; +function useScrollLock(_ref3) { + var isEnabled = _ref3.isEnabled, _ref$accountForScroll = _ref3.accountForScrollbars, accountForScrollbars = _ref$accountForScroll === void 0 ? true : _ref$accountForScroll; + var originalStyles = A2({}); + var scrollTarget = A2(null); + var addScrollLock = q2(function(touchScrollTarget) { + if (!canUseDOM) return; var target = document.body; var targetStyle = target && target.style; if (accountForScrollbars) { @@ -41122,9 +46665,8 @@ function useScrollLock(_ref4) { } activeScrollLocks += 1; }, [accountForScrollbars]); - var removeScrollLock = x2(function(touchScrollTarget) { - if (!canUseDOM) - return; + var removeScrollLock = q2(function(touchScrollTarget) { + if (!canUseDOM) return; var target = document.body; var targetStyle = target && target.style; activeScrollLocks = Math.max(activeScrollLocks - 1, 0); @@ -41144,9 +46686,8 @@ function useScrollLock(_ref4) { } } }, [accountForScrollbars]); - _2(function() { - if (!isEnabled) - return; + y2(function() { + if (!isEnabled) return; var element = scrollTarget.current; addScrollLock(element); return function() { @@ -41164,7 +46705,7 @@ var blurSelectInput = function blurSelectInput2(event) { var element = event.target; return element.ownerDocument.activeElement && element.ownerDocument.activeElement.blur(); }; -var _ref2$1 = false ? { +var _ref2$1 = process.env.NODE_ENV === "production" ? { name: "1kfdb0e", styles: "position:fixed;left:0;bottom:0;right:0;top:0" } : { @@ -41173,8 +46714,8 @@ var _ref2$1 = false ? { map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcm9sbE1hbmFnZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9EVSIsImZpbGUiOiJTY3JvbGxNYW5hZ2VyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIFJlYWN0RWxlbWVudCwgUmVmQ2FsbGJhY2ssIE1vdXNlRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlU2Nyb2xsQ2FwdHVyZSBmcm9tICcuL3VzZVNjcm9sbENhcHR1cmUnO1xuaW1wb3J0IHVzZVNjcm9sbExvY2sgZnJvbSAnLi91c2VTY3JvbGxMb2NrJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IChyZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PikgPT4gUmVhY3RFbGVtZW50O1xuICByZWFkb25seSBsb2NrRW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FwdHVyZUVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9uQm90dG9tQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Cb3R0b21MZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uVG9wQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Ub3BMZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGJsdXJTZWxlY3RJbnB1dCA9IChldmVudDogTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuICAgIChlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuYmx1cigpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JvbGxNYW5hZ2VyKHtcbiAgY2hpbGRyZW4sXG4gIGxvY2tFbmFibGVkLFxuICBjYXB0dXJlRW5hYmxlZCA9IHRydWUsXG4gIG9uQm90dG9tQXJyaXZlLFxuICBvbkJvdHRvbUxlYXZlLFxuICBvblRvcEFycml2ZSxcbiAgb25Ub3BMZWF2ZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHNldFNjcm9sbENhcHR1cmVUYXJnZXQgPSB1c2VTY3JvbGxDYXB0dXJlKHtcbiAgICBpc0VuYWJsZWQ6IGNhcHR1cmVFbmFibGVkLFxuICAgIG9uQm90dG9tQXJyaXZlLFxuICAgIG9uQm90dG9tTGVhdmUsXG4gICAgb25Ub3BBcnJpdmUsXG4gICAgb25Ub3BMZWF2ZSxcbiAgfSk7XG4gIGNvbnN0IHNldFNjcm9sbExvY2tUYXJnZXQgPSB1c2VTY3JvbGxMb2NrKHsgaXNFbmFibGVkOiBsb2NrRW5hYmxlZCB9KTtcblxuICBjb25zdCB0YXJnZXRSZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PiA9IChlbGVtZW50KSA9PiB7XG4gICAgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldChlbGVtZW50KTtcbiAgICBzZXRTY3JvbGxMb2NrVGFyZ2V0KGVsZW1lbnQpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAge2xvY2tFbmFibGVkICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIG9uQ2xpY2s9e2JsdXJTZWxlY3RJbnB1dH1cbiAgICAgICAgICBjc3M9e3sgcG9zaXRpb246ICdmaXhlZCcsIGxlZnQ6IDAsIGJvdHRvbTogMCwgcmlnaHQ6IDAsIHRvcDogMCB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtjaGlsZHJlbih0YXJnZXRSZWYpfVxuICAgIDwvRnJhZ21lbnQ+XG4gICk7XG59XG4iXX0= */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1 }; -function ScrollManager(_ref4) { - var children = _ref4.children, lockEnabled = _ref4.lockEnabled, _ref$captureEnabled = _ref4.captureEnabled, captureEnabled = _ref$captureEnabled === void 0 ? true : _ref$captureEnabled, onBottomArrive = _ref4.onBottomArrive, onBottomLeave = _ref4.onBottomLeave, onTopArrive = _ref4.onTopArrive, onTopLeave = _ref4.onTopLeave; +function ScrollManager(_ref3) { + var children = _ref3.children, lockEnabled = _ref3.lockEnabled, _ref$captureEnabled = _ref3.captureEnabled, captureEnabled = _ref$captureEnabled === void 0 ? true : _ref$captureEnabled, onBottomArrive = _ref3.onBottomArrive, onBottomLeave = _ref3.onBottomLeave, onTopArrive = _ref3.onTopArrive, onTopLeave = _ref3.onTopLeave; var setScrollCaptureTarget = useScrollCapture({ isEnabled: captureEnabled, onBottomArrive, @@ -41189,7 +46730,7 @@ function ScrollManager(_ref4) { setScrollCaptureTarget(element); setScrollLockTarget(element); }; - return jsx(m, null, lockEnabled && jsx("div", { + return jsx(b, null, lockEnabled && jsx("div", { onClick: blurSelectInput, css: _ref2$1 }), children(targetRef)); @@ -41197,7 +46738,7 @@ function ScrollManager(_ref4) { function _EMOTION_STRINGIFIED_CSS_ERROR__2() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } -var _ref22 = false ? { +var _ref22 = process.env.NODE_ENV === "production" ? { name: "1a0ro4n-requiredInput", styles: "label:requiredInput;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;right:0;width:100%" } : { @@ -41206,8 +46747,8 @@ var _ref22 = false ? { map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJlcXVpcmVkSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNJIiwiZmlsZSI6IlJlcXVpcmVkSW5wdXQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBqc3gganN4ICovXG5pbXBvcnQgeyBGb2N1c0V2ZW50SGFuZGxlciwgRnVuY3Rpb25Db21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmNvbnN0IFJlcXVpcmVkSW5wdXQ6IEZ1bmN0aW9uQ29tcG9uZW50PHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb25Gb2N1czogRm9jdXNFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD47XG59PiA9ICh7IG5hbWUsIG9uRm9jdXMgfSkgPT4gKFxuICA8aW5wdXRcbiAgICByZXF1aXJlZFxuICAgIG5hbWU9e25hbWV9XG4gICAgdGFiSW5kZXg9ey0xfVxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAncmVxdWlyZWRJbnB1dCcsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBib3R0b206IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgIH19XG4gICAgLy8gUHJldmVudCBgU3dpdGNoaW5nIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWRgIGVycm9yXG4gICAgdmFsdWU9XCJcIlxuICAgIG9uQ2hhbmdlPXsoKSA9PiB7fX1cbiAgLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVpcmVkSW5wdXQ7XG4iXX0= */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__2 }; -var RequiredInput = function RequiredInput2(_ref4) { - var name = _ref4.name, onFocus2 = _ref4.onFocus; +var RequiredInput = function RequiredInput2(_ref3) { + var name = _ref3.name, onFocus2 = _ref3.onFocus; return jsx("input", { required: true, name, @@ -41349,8 +46890,8 @@ var defaultProps = { options: [], pageSize: 5, placeholder: "Select...", - screenReaderStatus: function screenReaderStatus(_ref4) { - var count = _ref4.count; + screenReaderStatus: function screenReaderStatus(_ref3) { + var count = _ref3.count; return "".concat(count, " result").concat(count !== 1 ? "s" : "", " available"); }, styles: {}, @@ -41358,7 +46899,7 @@ var defaultProps = { tabSelectsValue: true, unstyled: false }; -function toCategorizedOption(props, option, selectValue, index2) { +function toCategorizedOption(props, option, selectValue, index) { var isDisabled = _isOptionDisabled(props, option, selectValue); var isSelected = _isOptionSelected(props, option, selectValue); var label = getOptionLabel2(props, option); @@ -41370,7 +46911,7 @@ function toCategorizedOption(props, option, selectValue, index2) { isSelected, label, value, - index: index2 + index }; } function buildCategorizedOptions(props, selectValue) { @@ -41434,8 +46975,8 @@ function isFocusable(props, categorizedOption) { data }, inputValue); } -function getNextFocusedValue(state2, nextSelectValue) { - var focusedValue = state2.focusedValue, lastSelectValue = state2.selectValue; +function getNextFocusedValue(state, nextSelectValue) { + var focusedValue = state.focusedValue, lastSelectValue = state.selectValue; var lastFocusedIndex = lastSelectValue.indexOf(focusedValue); if (lastFocusedIndex > -1) { var nextFocusedIndex = nextSelectValue.indexOf(focusedValue); @@ -41447,8 +46988,8 @@ function getNextFocusedValue(state2, nextSelectValue) { } return null; } -function getNextFocusedOption(state2, options2) { - var lastFocusedOption = state2.focusedOption; +function getNextFocusedOption(state, options2) { + var lastFocusedOption = state.focusedOption; return lastFocusedOption && options2.indexOf(lastFocusedOption) > -1 ? lastFocusedOption : options2[0]; } var getFocusedOptionId = function getFocusedOptionId2(focusableOptionsWithIds, focusedOption) { @@ -41468,8 +47009,7 @@ function _isOptionDisabled(props, option, selectValue) { return typeof props.isOptionDisabled === "function" ? props.isOptionDisabled(option, selectValue) : false; } function _isOptionSelected(props, option, selectValue) { - if (selectValue.indexOf(option) > -1) - return true; + if (selectValue.indexOf(option) > -1) return true; if (typeof props.isOptionSelected === "function") { return props.isOptionSelected(option, selectValue); } @@ -41483,8 +47023,7 @@ function _filterOption(props, option, inputValue) { } var shouldHideSelectedOptions = function shouldHideSelectedOptions2(props) { var hideSelectedOptions = props.hideSelectedOptions, isMulti = props.isMulti; - if (hideSelectedOptions === void 0) - return isMulti; + if (hideSelectedOptions === void 0) return isMulti; return hideSelectedOptions; }; var instanceId = 1; @@ -41618,10 +47157,12 @@ var Select = /* @__PURE__ */ function(_Component) { var lastSelectedValue = selectValue[selectValue.length - 1]; var newValueArray = selectValue.slice(0, selectValue.length - 1); var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null); - _this.onChange(newValue, { - action: "pop-value", - removedValue: lastSelectedValue - }); + if (lastSelectedValue) { + _this.onChange(newValue, { + action: "pop-value", + removedValue: lastSelectedValue + }); + } }; _this.getFocusedOptionId = function(focusedOption) { return getFocusedOptionId(_this.state.focusableOptionsWithIds, focusedOption); @@ -41718,8 +47259,7 @@ var Select = /* @__PURE__ */ function(_Component) { if (event && event.type === "mousedown" && event.button !== 0) { return; } - if (_this.props.isDisabled) - return; + if (_this.props.isDisabled) return; var _this$props4 = _this.props, isMulti = _this$props4.isMulti, menuIsOpen = _this$props4.menuIsOpen; _this.focusInput(); if (menuIsOpen) { @@ -41774,8 +47314,8 @@ var Select = /* @__PURE__ */ function(_Component) { _this.initialTouchY = touch.clientY; _this.userIsDragging = false; }; - _this.onTouchMove = function(_ref32) { - var touches = _ref32.touches; + _this.onTouchMove = function(_ref3) { + var touches = _ref3.touches; var touch = touches && touches.item(0); if (!touch) { return; @@ -41786,8 +47326,7 @@ var Select = /* @__PURE__ */ function(_Component) { _this.userIsDragging = deltaX > moveThreshold || deltaY > moveThreshold; }; _this.onTouchEnd = function(event) { - if (_this.userIsDragging) - return; + if (_this.userIsDragging) return; if (_this.controlRef && !_this.controlRef.contains(event.target) && _this.menuListRef && !_this.menuListRef.contains(event.target)) { _this.blurInput(); } @@ -41795,18 +47334,15 @@ var Select = /* @__PURE__ */ function(_Component) { _this.initialTouchY = 0; }; _this.onControlTouchEnd = function(event) { - if (_this.userIsDragging) - return; + if (_this.userIsDragging) return; _this.onControlMouseDown(event); }; _this.onClearIndicatorTouchEnd = function(event) { - if (_this.userIsDragging) - return; + if (_this.userIsDragging) return; _this.onClearIndicatorMouseDown(event); }; _this.onDropdownIndicatorTouchEnd = function(event) { - if (_this.userIsDragging) - return; + if (_this.userIsDragging) return; _this.onDropdownIndicatorMouseDown(event); }; _this.handleInputChange = function(event) { @@ -41877,8 +47413,7 @@ var Select = /* @__PURE__ */ function(_Component) { _this.onKeyDown = function(event) { var _this$props5 = _this.props, isMulti = _this$props5.isMulti, backspaceRemovesValue = _this$props5.backspaceRemovesValue, escapeClearsValue = _this$props5.escapeClearsValue, inputValue = _this$props5.inputValue, isClearable = _this$props5.isClearable, isDisabled = _this$props5.isDisabled, menuIsOpen = _this$props5.menuIsOpen, onKeyDown = _this$props5.onKeyDown, tabSelectsValue = _this$props5.tabSelectsValue, openMenuOnFocus = _this$props5.openMenuOnFocus; var _this$state = _this.state, focusedOption = _this$state.focusedOption, focusedValue = _this$state.focusedValue, selectValue = _this$state.selectValue; - if (isDisabled) - return; + if (isDisabled) return; if (typeof onKeyDown === "function") { onKeyDown(event); if (event.defaultPrevented) { @@ -41888,24 +47423,20 @@ var Select = /* @__PURE__ */ function(_Component) { _this.blockOptionHover = true; switch (event.key) { case "ArrowLeft": - if (!isMulti || inputValue) - return; + if (!isMulti || inputValue) return; _this.focusValue("previous"); break; case "ArrowRight": - if (!isMulti || inputValue) - return; + if (!isMulti || inputValue) return; _this.focusValue("next"); break; case "Delete": case "Backspace": - if (inputValue) - return; + if (inputValue) return; if (focusedValue) { _this.removeValue(focusedValue); } else { - if (!backspaceRemovesValue) - return; + if (!backspaceRemovesValue) return; if (isMulti) { _this.popValue(); } else if (isClearable) { @@ -41914,8 +47445,7 @@ var Select = /* @__PURE__ */ function(_Component) { } break; case "Tab": - if (_this.isComposing) - return; + if (_this.isComposing) return; if (event.shiftKey || !menuIsOpen || !tabSelectsValue || !focusedOption || // don't capture the event if the menu opens on focus and the focused // option is already selected; it breaks the flow of navigation openMenuOnFocus && _this.isOptionSelected(focusedOption, selectValue)) { @@ -41928,10 +47458,8 @@ var Select = /* @__PURE__ */ function(_Component) { break; } if (menuIsOpen) { - if (!focusedOption) - return; - if (_this.isComposing) - return; + if (!focusedOption) return; + if (_this.isComposing) return; _this.selectOption(focusedOption); break; } @@ -41958,8 +47486,7 @@ var Select = /* @__PURE__ */ function(_Component) { _this.openMenu("first"); break; } - if (!focusedOption) - return; + if (!focusedOption) return; _this.selectOption(focusedOption); break; case "ArrowUp": @@ -41977,23 +47504,19 @@ var Select = /* @__PURE__ */ function(_Component) { } break; case "PageUp": - if (!menuIsOpen) - return; + if (!menuIsOpen) return; _this.focusOption("pageup"); break; case "PageDown": - if (!menuIsOpen) - return; + if (!menuIsOpen) return; _this.focusOption("pagedown"); break; case "Home": - if (!menuIsOpen) - return; + if (!menuIsOpen) return; _this.focusOption("first"); break; case "End": - if (!menuIsOpen) - return; + if (!menuIsOpen) return; _this.focusOption("last"); break; default: @@ -42089,15 +47612,13 @@ var Select = /* @__PURE__ */ function(_Component) { }, { key: "focusInput", value: function focusInput() { - if (!this.inputRef) - return; + if (!this.inputRef) return; this.inputRef.focus(); } }, { key: "blurInput", value: function blurInput() { - if (!this.inputRef) - return; + if (!this.inputRef) return; this.inputRef.blur(); } // aliased for consumers @@ -42128,8 +47649,7 @@ var Select = /* @__PURE__ */ function(_Component) { key: "focusValue", value: function focusValue(direction) { var _this$state3 = this.state, selectValue = _this$state3.selectValue, focusedValue = _this$state3.focusedValue; - if (!this.props.isMulti) - return; + if (!this.props.isMulti) return; this.setState({ focusedOption: null }); @@ -42139,8 +47659,7 @@ var Select = /* @__PURE__ */ function(_Component) { } var lastIndex = selectValue.length - 1; var nextFocus = -1; - if (!selectValue.length) - return; + if (!selectValue.length) return; switch (direction) { case "previous": if (focusedIndex === 0) { @@ -42169,8 +47688,7 @@ var Select = /* @__PURE__ */ function(_Component) { var pageSize = this.props.pageSize; var focusedOption = this.state.focusedOption; var options2 = this.getFocusableOptions(); - if (!options2.length) - return; + if (!options2.length) return; var nextFocus = 0; var focusedIndex = options2.indexOf(focusedOption); if (!focusedOption) { @@ -42182,12 +47700,10 @@ var Select = /* @__PURE__ */ function(_Component) { nextFocus = (focusedIndex + 1) % options2.length; } else if (direction === "pageup") { nextFocus = focusedIndex - pageSize; - if (nextFocus < 0) - nextFocus = 0; + if (nextFocus < 0) nextFocus = 0; } else if (direction === "pagedown") { nextFocus = focusedIndex + pageSize; - if (nextFocus > options2.length - 1) - nextFocus = options2.length - 1; + if (nextFocus > options2.length - 1) nextFocus = options2.length - 1; } else if (direction === "last") { nextFocus = options2.length - 1; } @@ -42251,8 +47767,7 @@ var Select = /* @__PURE__ */ function(_Component) { key: "isClearable", value: function isClearable() { var _this$props7 = this.props, isClearable2 = _this$props7.isClearable, isMulti = _this$props7.isMulti; - if (isClearable2 === void 0) - return isMulti; + if (isClearable2 === void 0) return isMulti; return isClearable2; } }, { @@ -42370,7 +47885,7 @@ var Select = /* @__PURE__ */ function(_Component) { "aria-describedby": this.getElementId("placeholder") }); if (!isSearchable) { - return /* @__PURE__ */ g(DummyInput, _extends({ + return /* @__PURE__ */ _(DummyInput, _extends({ id, innerRef: this.getInputRef, onBlur: this.onInputBlur, @@ -42383,7 +47898,7 @@ var Select = /* @__PURE__ */ function(_Component) { value: "" }, ariaAttributes)); } - return /* @__PURE__ */ g(Input3, _extends({}, commonProps, { + return /* @__PURE__ */ _(Input3, _extends({}, commonProps, { autoCapitalize: "none", autoComplete: "off", autoCorrect: "off", @@ -42411,7 +47926,7 @@ var Select = /* @__PURE__ */ function(_Component) { var _this$props9 = this.props, controlShouldRenderValue = _this$props9.controlShouldRenderValue, isDisabled = _this$props9.isDisabled, isMulti = _this$props9.isMulti, inputValue = _this$props9.inputValue, placeholder = _this$props9.placeholder; var _this$state5 = this.state, selectValue = _this$state5.selectValue, focusedValue = _this$state5.focusedValue, isFocused = _this$state5.isFocused; if (!this.hasValue() || !controlShouldRenderValue) { - return inputValue ? null : /* @__PURE__ */ g(Placeholder3, _extends({}, commonProps, { + return inputValue ? null : /* @__PURE__ */ _(Placeholder3, _extends({}, commonProps, { key: "placeholder", isDisabled, isFocused, @@ -42421,10 +47936,10 @@ var Select = /* @__PURE__ */ function(_Component) { }), placeholder); } if (isMulti) { - return selectValue.map(function(opt2, index2) { - var isOptionFocused = opt2 === focusedValue; - var key = "".concat(_this3.getOptionLabel(opt2), "-").concat(_this3.getOptionValue(opt2)); - return /* @__PURE__ */ g(MultiValue3, _extends({}, commonProps, { + return selectValue.map(function(opt, index) { + var isOptionFocused = opt === focusedValue; + var key = "".concat(_this3.getOptionLabel(opt), "-").concat(_this3.getOptionValue(opt)); + return /* @__PURE__ */ _(MultiValue3, _extends({}, commonProps, { components: { Container: MultiValueContainer2, Label: MultiValueLabel2, @@ -42433,27 +47948,27 @@ var Select = /* @__PURE__ */ function(_Component) { isFocused: isOptionFocused, isDisabled, key, - index: index2, + index, removeProps: { onClick: function onClick() { - return _this3.removeValue(opt2); + return _this3.removeValue(opt); }, onTouchEnd: function onTouchEnd() { - return _this3.removeValue(opt2); + return _this3.removeValue(opt); }, onMouseDown: function onMouseDown(e3) { e3.preventDefault(); } }, - data: opt2 - }), _this3.formatOptionLabel(opt2, "value")); + data: opt + }), _this3.formatOptionLabel(opt, "value")); }); } if (inputValue) { return null; } var singleValue = selectValue[0]; - return /* @__PURE__ */ g(SingleValue3, _extends({}, commonProps, { + return /* @__PURE__ */ _(SingleValue3, _extends({}, commonProps, { data: singleValue, isDisabled }), this.formatOptionLabel(singleValue, "value")); @@ -42473,7 +47988,7 @@ var Select = /* @__PURE__ */ function(_Component) { onTouchEnd: this.onClearIndicatorTouchEnd, "aria-hidden": "true" }; - return /* @__PURE__ */ g(ClearIndicator3, _extends({}, commonProps, { + return /* @__PURE__ */ _(ClearIndicator3, _extends({}, commonProps, { innerProps, isFocused })); @@ -42485,12 +48000,11 @@ var Select = /* @__PURE__ */ function(_Component) { var commonProps = this.commonProps; var _this$props11 = this.props, isDisabled = _this$props11.isDisabled, isLoading = _this$props11.isLoading; var isFocused = this.state.isFocused; - if (!LoadingIndicator3 || !isLoading) - return null; + if (!LoadingIndicator3 || !isLoading) return null; var innerProps = { "aria-hidden": "true" }; - return /* @__PURE__ */ g(LoadingIndicator3, _extends({}, commonProps, { + return /* @__PURE__ */ _(LoadingIndicator3, _extends({}, commonProps, { innerProps, isDisabled, isFocused @@ -42500,12 +48014,11 @@ var Select = /* @__PURE__ */ function(_Component) { key: "renderIndicatorSeparator", value: function renderIndicatorSeparator() { var _this$getComponents5 = this.getComponents(), DropdownIndicator3 = _this$getComponents5.DropdownIndicator, IndicatorSeparator3 = _this$getComponents5.IndicatorSeparator; - if (!DropdownIndicator3 || !IndicatorSeparator3) - return null; + if (!DropdownIndicator3 || !IndicatorSeparator3) return null; var commonProps = this.commonProps; var isDisabled = this.props.isDisabled; var isFocused = this.state.isFocused; - return /* @__PURE__ */ g(IndicatorSeparator3, _extends({}, commonProps, { + return /* @__PURE__ */ _(IndicatorSeparator3, _extends({}, commonProps, { isDisabled, isFocused })); @@ -42514,8 +48027,7 @@ var Select = /* @__PURE__ */ function(_Component) { key: "renderDropdownIndicator", value: function renderDropdownIndicator() { var _this$getComponents6 = this.getComponents(), DropdownIndicator3 = _this$getComponents6.DropdownIndicator; - if (!DropdownIndicator3) - return null; + if (!DropdownIndicator3) return null; var commonProps = this.commonProps; var isDisabled = this.props.isDisabled; var isFocused = this.state.isFocused; @@ -42524,7 +48036,7 @@ var Select = /* @__PURE__ */ function(_Component) { onTouchEnd: this.onDropdownIndicatorTouchEnd, "aria-hidden": "true" }; - return /* @__PURE__ */ g(DropdownIndicator3, _extends({}, commonProps, { + return /* @__PURE__ */ _(DropdownIndicator3, _extends({}, commonProps, { innerProps, isDisabled, isFocused @@ -42538,9 +48050,8 @@ var Select = /* @__PURE__ */ function(_Component) { var commonProps = this.commonProps; var focusedOption = this.state.focusedOption; var _this$props12 = this.props, captureMenuScroll = _this$props12.captureMenuScroll, inputValue = _this$props12.inputValue, isLoading = _this$props12.isLoading, loadingMessage2 = _this$props12.loadingMessage, minMenuHeight = _this$props12.minMenuHeight, maxMenuHeight = _this$props12.maxMenuHeight, menuIsOpen = _this$props12.menuIsOpen, menuPlacement = _this$props12.menuPlacement, menuPosition = _this$props12.menuPosition, menuPortalTarget = _this$props12.menuPortalTarget, menuShouldBlockScroll = _this$props12.menuShouldBlockScroll, menuShouldScrollIntoView = _this$props12.menuShouldScrollIntoView, noOptionsMessage2 = _this$props12.noOptionsMessage, onMenuScrollToTop = _this$props12.onMenuScrollToTop, onMenuScrollToBottom = _this$props12.onMenuScrollToBottom; - if (!menuIsOpen) - return null; - var render3 = function render4(props, id) { + if (!menuIsOpen) return null; + var render2 = function render3(props, id) { var type = props.type, data = props.data, isDisabled = props.isDisabled, isSelected = props.isSelected, label = props.label, value = props.value; var isFocused = focusedOption === data; var onHover = isDisabled ? void 0 : function() { @@ -42560,7 +48071,7 @@ var Select = /* @__PURE__ */ function(_Component) { "aria-selected": _this4.isAppleDevice ? void 0 : isSelected // is not supported on Apple devices }; - return /* @__PURE__ */ g(Option3, _extends({}, commonProps, { + return /* @__PURE__ */ _(Option3, _extends({}, commonProps, { innerProps, data, isDisabled, @@ -42580,7 +48091,7 @@ var Select = /* @__PURE__ */ function(_Component) { var _data = item.data, options2 = item.options, groupIndex = item.index; var groupId = "".concat(_this4.getElementId("group"), "-").concat(groupIndex); var headingId = "".concat(groupId, "-heading"); - return /* @__PURE__ */ g(Group4, _extends({}, commonProps, { + return /* @__PURE__ */ _(Group4, _extends({}, commonProps, { key: groupId, data: _data, options: options2, @@ -42591,26 +48102,24 @@ var Select = /* @__PURE__ */ function(_Component) { }, label: _this4.formatGroupLabel(item.data) }), item.options.map(function(option) { - return render3(option, "".concat(groupIndex, "-").concat(option.index)); + return render2(option, "".concat(groupIndex, "-").concat(option.index)); })); } else if (item.type === "option") { - return render3(item, "".concat(item.index)); + return render2(item, "".concat(item.index)); } }); } else if (isLoading) { var message = loadingMessage2({ inputValue }); - if (message === null) - return null; - menuUI = /* @__PURE__ */ g(LoadingMessage3, commonProps, message); + if (message === null) return null; + menuUI = /* @__PURE__ */ _(LoadingMessage3, commonProps, message); } else { var _message = noOptionsMessage2({ inputValue }); - if (_message === null) - return null; - menuUI = /* @__PURE__ */ g(NoOptionsMessage3, commonProps, _message); + if (_message === null) return null; + menuUI = /* @__PURE__ */ _(NoOptionsMessage3, commonProps, _message); } var menuPlacementProps = { minMenuHeight, @@ -42619,9 +48128,9 @@ var Select = /* @__PURE__ */ function(_Component) { menuPosition, menuShouldScrollIntoView }; - var menuElement = /* @__PURE__ */ g(MenuPlacer, _extends({}, commonProps, menuPlacementProps), function(_ref4) { + var menuElement = /* @__PURE__ */ _(MenuPlacer, _extends({}, commonProps, menuPlacementProps), function(_ref4) { var ref = _ref4.ref, _ref4$placerProps = _ref4.placerProps, placement = _ref4$placerProps.placement, maxHeight = _ref4$placerProps.maxHeight; - return /* @__PURE__ */ g(Menu4, _extends({}, commonProps, menuPlacementProps, { + return /* @__PURE__ */ _(Menu4, _extends({}, commonProps, menuPlacementProps, { innerRef: ref, innerProps: { onMouseDown: _this4.onMenuMouseDown, @@ -42629,13 +48138,13 @@ var Select = /* @__PURE__ */ function(_Component) { }, isLoading, placement - }), /* @__PURE__ */ g(ScrollManager, { + }), /* @__PURE__ */ _(ScrollManager, { captureEnabled: captureMenuScroll, onTopArrive: onMenuScrollToTop, onBottomArrive: onMenuScrollToBottom, lockEnabled: menuShouldBlockScroll }, function(scrollTargetRef) { - return /* @__PURE__ */ g(MenuList3, _extends({}, commonProps, { + return /* @__PURE__ */ _(MenuList3, _extends({}, commonProps, { innerRef: function innerRef(instance) { _this4.getMenuListRef(instance); scrollTargetRef(instance); @@ -42651,7 +48160,7 @@ var Select = /* @__PURE__ */ function(_Component) { }), menuUI); })); }); - return menuPortalTarget || menuPosition === "fixed" ? /* @__PURE__ */ g(MenuPortal3, _extends({}, commonProps, { + return menuPortalTarget || menuPosition === "fixed" ? /* @__PURE__ */ _(MenuPortal3, _extends({}, commonProps, { appendTo: menuPortalTarget, controlElement: this.controlRef, menuPlacement, @@ -42665,41 +48174,40 @@ var Select = /* @__PURE__ */ function(_Component) { var _this$props13 = this.props, delimiter2 = _this$props13.delimiter, isDisabled = _this$props13.isDisabled, isMulti = _this$props13.isMulti, name = _this$props13.name, required = _this$props13.required; var selectValue = this.state.selectValue; if (required && !this.hasValue() && !isDisabled) { - return /* @__PURE__ */ g(RequiredInput$1, { + return /* @__PURE__ */ _(RequiredInput$1, { name, onFocus: this.onValueInputFocus }); } - if (!name || isDisabled) - return; + if (!name || isDisabled) return; if (isMulti) { if (delimiter2) { - var value = selectValue.map(function(opt2) { - return _this5.getOptionValue(opt2); + var value = selectValue.map(function(opt) { + return _this5.getOptionValue(opt); }).join(delimiter2); - return /* @__PURE__ */ g("input", { + return /* @__PURE__ */ _("input", { name, type: "hidden", value }); } else { - var input2 = selectValue.length > 0 ? selectValue.map(function(opt2, i4) { - return /* @__PURE__ */ g("input", { + var input = selectValue.length > 0 ? selectValue.map(function(opt, i4) { + return /* @__PURE__ */ _("input", { key: "i-".concat(i4), name, type: "hidden", - value: _this5.getOptionValue(opt2) + value: _this5.getOptionValue(opt) }); - }) : /* @__PURE__ */ g("input", { + }) : /* @__PURE__ */ _("input", { name, type: "hidden", value: "" }); - return /* @__PURE__ */ g("div", null, input2); + return /* @__PURE__ */ _("div", null, input); } } else { var _value = selectValue[0] ? this.getOptionValue(selectValue[0]) : ""; - return /* @__PURE__ */ g("input", { + return /* @__PURE__ */ _("input", { name, type: "hidden", value: _value @@ -42712,7 +48220,7 @@ var Select = /* @__PURE__ */ function(_Component) { var commonProps = this.commonProps; var _this$state6 = this.state, ariaSelection = _this$state6.ariaSelection, focusedOption = _this$state6.focusedOption, focusedValue = _this$state6.focusedValue, isFocused = _this$state6.isFocused, selectValue = _this$state6.selectValue; var focusableOptions = this.getFocusableOptions(); - return /* @__PURE__ */ g(LiveRegion$1, _extends({}, commonProps, { + return /* @__PURE__ */ _(LiveRegion$1, _extends({}, commonProps, { id: this.getElementId("live-region"), ariaSelection, focusedOption, @@ -42725,12 +48233,12 @@ var Select = /* @__PURE__ */ function(_Component) { } }, { key: "render", - value: function render3() { + value: function render2() { var _this$getComponents8 = this.getComponents(), Control3 = _this$getComponents8.Control, IndicatorsContainer3 = _this$getComponents8.IndicatorsContainer, SelectContainer3 = _this$getComponents8.SelectContainer, ValueContainer3 = _this$getComponents8.ValueContainer; var _this$props14 = this.props, className = _this$props14.className, id = _this$props14.id, isDisabled = _this$props14.isDisabled, menuIsOpen = _this$props14.menuIsOpen; var isFocused = this.state.isFocused; var commonProps = this.commonProps = this.getCommonProps(); - return /* @__PURE__ */ g(SelectContainer3, _extends({}, commonProps, { + return /* @__PURE__ */ _(SelectContainer3, _extends({}, commonProps, { className, innerProps: { id, @@ -42738,7 +48246,7 @@ var Select = /* @__PURE__ */ function(_Component) { }, isDisabled, isFocused - }), this.renderLiveRegion(), /* @__PURE__ */ g(Control3, _extends({}, commonProps, { + }), this.renderLiveRegion(), /* @__PURE__ */ _(Control3, _extends({}, commonProps, { innerRef: this.getControlRef, innerProps: { onMouseDown: this.onControlMouseDown, @@ -42747,24 +48255,24 @@ var Select = /* @__PURE__ */ function(_Component) { isDisabled, isFocused, menuIsOpen - }), /* @__PURE__ */ g(ValueContainer3, _extends({}, commonProps, { + }), /* @__PURE__ */ _(ValueContainer3, _extends({}, commonProps, { isDisabled - }), this.renderPlaceholderOrValue(), this.renderInput()), /* @__PURE__ */ g(IndicatorsContainer3, _extends({}, commonProps, { + }), this.renderPlaceholderOrValue(), this.renderInput()), /* @__PURE__ */ _(IndicatorsContainer3, _extends({}, commonProps, { isDisabled }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField()); } }], [{ key: "getDerivedStateFromProps", - value: function getDerivedStateFromProps(props, state2) { - var prevProps = state2.prevProps, clearFocusValueOnUpdate = state2.clearFocusValueOnUpdate, inputIsHiddenAfterUpdate = state2.inputIsHiddenAfterUpdate, ariaSelection = state2.ariaSelection, isFocused = state2.isFocused, prevWasFocused = state2.prevWasFocused, instancePrefix = state2.instancePrefix; + value: function getDerivedStateFromProps(props, state) { + var prevProps = state.prevProps, clearFocusValueOnUpdate = state.clearFocusValueOnUpdate, inputIsHiddenAfterUpdate = state.inputIsHiddenAfterUpdate, ariaSelection = state.ariaSelection, isFocused = state.isFocused, prevWasFocused = state.prevWasFocused, instancePrefix = state.instancePrefix; var options2 = props.options, value = props.value, menuIsOpen = props.menuIsOpen, inputValue = props.inputValue, isMulti = props.isMulti; var selectValue = cleanValue(value); var newMenuOptionsState = {}; if (prevProps && (value !== prevProps.value || options2 !== prevProps.options || menuIsOpen !== prevProps.menuIsOpen || inputValue !== prevProps.inputValue)) { var focusableOptions = menuIsOpen ? buildFocusableOptions(props, selectValue) : []; var focusableOptionsWithIds = menuIsOpen ? buildFocusableOptionsWithIds(buildCategorizedOptions(props, selectValue), "".concat(instancePrefix, "-option")) : []; - var focusedValue = clearFocusValueOnUpdate ? getNextFocusedValue(state2, selectValue) : null; - var focusedOption = getNextFocusedOption(state2, focusableOptions); + var focusedValue = clearFocusValueOnUpdate ? getNextFocusedValue(state, selectValue) : null; + var focusedOption = getNextFocusedOption(state, focusableOptions); var focusedOptionId = getFocusedOptionId(focusableOptionsWithIds, focusedOption); newMenuOptionsState = { selectValue, @@ -42800,13 +48308,25 @@ var Select = /* @__PURE__ */ function(_Component) { } }]); return Select2; -}(w); +}(k); Select.defaultProps = defaultProps; // node_modules/react-select/dist/react-select.esm.js -var StateManagedSelect = /* @__PURE__ */ k3(function(props, ref) { +var import_objectSpread24 = __toESM(require_objectSpread2()); +var import_slicedToArray3 = __toESM(require_slicedToArray()); +var import_objectWithoutProperties4 = __toESM(require_objectWithoutProperties()); +var import_classCallCheck2 = __toESM(require_classCallCheck()); +var import_createClass2 = __toESM(require_createClass()); +var import_inherits2 = __toESM(require_inherits()); +var import_createSuper2 = __toESM(require_createSuper()); +var import_toConsumableArray2 = __toESM(require_toConsumableArray()); +var import_typeof5 = __toESM(require_typeof()); +var import_taggedTemplateLiteral2 = __toESM(require_taggedTemplateLiteral()); +var import_defineProperty3 = __toESM(require_defineProperty()); +var import_use_isomorphic_layout_effect2 = __toESM(require_use_isomorphic_layout_effect_cjs()); +var StateManagedSelect = /* @__PURE__ */ w3(function(props, ref) { var baseSelectProps = useStateManager(props); - return /* @__PURE__ */ g(Select, _extends({ + return /* @__PURE__ */ _(Select, _extends({ ref }, baseSelectProps)); }); @@ -42815,7 +48335,7 @@ var StateManagedSelect$1 = StateManagedSelect; // src/ui/fields/boolean-field.tsx function BooleanEditable(props) { var _a; - const [state2, dispatch] = useEditableDispatch({ + const [state, dispatch] = useEditableDispatch({ content: (_a = props.value) != null ? _a : props.defaultValue, updater: props.updater }); @@ -42825,15 +48345,15 @@ function BooleanEditable(props) { dispatch({ type: "content-changed", newValue }); dispatch({ type: "commit", newValue }); }, - [state2.content, state2, props.value] + [state.content, state, props.value] ); - return /* @__PURE__ */ u3("div", { onClick: onChange3, className: `checkbox-container${state2.content ? " is-enabled" : ""}`, children: /* @__PURE__ */ u3("input", { type: "checkbox" }) }); + return /* @__PURE__ */ u3("div", { onClick: onChange3, className: `checkbox-container${state.content ? " is-enabled" : ""}`, children: /* @__PURE__ */ u3("input", { type: "checkbox" }) }); } // src/ui/fields/progress-field.tsx function ProgressEditable(props) { - const val = F2(props.content); - _2(() => { + const val = A2(props.content); + y2(() => { props.dispatch({ type: "content-changed", newValue: val.current }); }, [val.current]); const finalize = async () => { @@ -42864,46 +48384,46 @@ function ProgressEditable(props) { // src/ui/fields/rating.tsx function RatingEditable({ value, updater, config: config2, defaultValue }) { - const [state2, dispatch] = useEditableDispatch({ + const [state, dispatch] = useEditableDispatch({ content: value != null ? value : defaultValue, updater }); - const parsedValue = q2(() => { - if (typeof state2.content == "string") { - if (state2.content.contains("/")) { - let split = state2.content.split("/"); + const parsedValue = T2(() => { + if (typeof state.content == "string") { + if (state.content.contains("/")) { + let split = state.content.split("/"); return parseInt(split[0]) / parseInt(split[1]); } - } else if (typeof state2.content == "number") { - return Math.min(state2.content, 5); + } else if (typeof state.content == "number") { + return Math.min(state.content, 5); } return 0; - }, [state2.content]); - const stars = q2(() => { + }, [state.content]); + const stars = T2(() => { var _a; - let r3 = []; + let r4 = []; for (let i4 = 0; i4 < ((_a = config2 == null ? void 0 : config2.max) != null ? _a : 5); i4++) { let clickCb = useStableCallback(() => { var _a2; let newValue = null; - if (typeof state2.content == "string") { - if (state2.content.contains("/")) { + if (typeof state.content == "string") { + if (state.content.contains("/")) { newValue = `${i4 + 1}/5`; } - } else if (typeof state2.content == "number") { + } else if (typeof state.content == "number") { newValue = Math.min(i4 + 1, (_a2 = config2 == null ? void 0 : config2.max) != null ? _a2 : 5); } dispatch({ type: "content-changed", newValue: newValue || i4 + 1 }); dispatch({ type: "commit", newValue: newValue || i4 + 1 }); - }, [state2, parsedValue, i4]); + }, [state, parsedValue, i4]); let classes = ["datacore-rating-star"]; classes.push(i4 < parsedValue ? "filled" : "empty"); - r3.push( + r4.push( /* @__PURE__ */ u3("span", { onClick: clickCb, className: classes.join(" "), children: "\u2605" }) ); } - return r3; - }, [parsedValue, state2]); + return r4; + }, [parsedValue, state]); return /* @__PURE__ */ u3("span", { className: "datacore-rating", children: stars }); } @@ -42911,8 +48431,7 @@ function RatingEditable({ value, updater, config: config2, defaultValue }) { function trimEndingLines(text2) { let parts = text2.split(/\r?\n/u); let trim2 = parts.length - 1; - while (trim2 > 0 && parts[trim2].trim() == "") - trim2--; + while (trim2 > 0 && parts[trim2].trim() == "") trim2--; return parts.join("\n"); } function setTaskCompletion(task, originalText, useEmojiShorthand, completionKey, completionDateFormat, complete) { @@ -42956,11 +48475,9 @@ async function rewriteTask(vault, core, task, desiredStatus, desiredText) { let rawFiletext = await vault.adapter.read(task.$file); let hasRN = rawFiletext.contains("\r"); let filetext = rawFiletext.split(/\r\n|\r|\n/u); - if (filetext.length < task.$line) - return; - let match4 = LIST_ITEM_REGEX.exec(filetext[task.$line]); - if (!match4 || ((_a = match4[2]) == null ? void 0 : _a.length) == 0) - return; + if (filetext.length < task.$line) return; + let match3 = LIST_ITEM_REGEX.exec(filetext[task.$line]); + if (!match3 || ((_a = match3[2]) == null ? void 0 : _a.length) == 0) return; let taskTextParts = task.$text.split("\n"); const statusPart = task instanceof MarkdownTaskItem ? `[${desiredStatus}]` : ""; let initialSpacing = /^[\s>]*/u.exec(filetext[task.$line])[0]; @@ -42976,15 +48493,13 @@ async function rewriteTask(vault, core, task, desiredStatus, desiredText) { let newText = filetext.join(hasRN ? "\r\n" : "\n"); await vault.adapter.write(task.$file, newText); const tfile = vault.getFileByPath(task.$file); - if (tfile) - core.reload(tfile); + if (tfile) core.reload(tfile); } async function completeTask(completed, task, vault, core) { const tasksToComplete = [task]; if (core.settings.recursiveTaskCompletion) { const forEach = (x4) => { - if (x4 instanceof MarkdownTaskItem) - tasksToComplete.push(x4); + if (x4 instanceof MarkdownTaskItem) tasksToComplete.push(x4); x4.$elements.forEach(forEach); }; task.$elements.forEach(forEach); @@ -43007,8 +48522,7 @@ var YamlConversion; ((YamlConversion2) => { function yaml(value) { const wrapped = Literals.wrapValue(literal); - if (!wrapped) - return null; + if (!wrapped) return null; switch (wrapped.type) { case "string": case "boolean": @@ -43057,14 +48571,11 @@ var YamlConversion; return value; } else if (typeof value === "string") { let dateParse = PRIMITIVES.date.parse(value); - if (dateParse.status) - return dateParse.value; + if (dateParse.status) return dateParse.value; let durationParse = PRIMITIVES.duration.parse(value); - if (durationParse.status) - return durationParse.value; + if (durationParse.status) return durationParse.value; let linkParse = PRIMITIVES.link.parse(value); - if (linkParse.status) - return linkParse.value; + if (linkParse.status) return linkParse.value; return value; } return null; @@ -43075,8 +48586,7 @@ var YamlConversion; // src/index/edit/field.ts async function editProvenance(app, provenance, value) { const file = app.vault.getFileByPath(provenance.file); - if (!file) - return Result.failure(`File with path ${provenance.file} does not exist.`); + if (!file) return Result.failure(`File with path ${provenance.file} does not exist.`); switch (provenance.type) { case "frontmatter": await app.fileManager.processFrontMatter(file, (frontmatter) => { @@ -43092,28 +48602,23 @@ async function editProvenance(app, provenance, value) { } async function editInlineField(app, file, line2, key, value) { const content = await app.vault.read(file); - if (!content) - return Result.failure(`File with path ${file.path} does not exist.`); + if (!content) return Result.failure(`File with path ${file.path} does not exist.`); const updated = lineReplace(content, line2, line2 + 1, (line3) => { - if (value == null) - return setInlineField(line3, key, void 0); - else - return setInlineField(line3, key, "" + YamlConversion.yaml(value)); + if (value == null) return setInlineField(line3, key, void 0); + else return setInlineField(line3, key, "" + YamlConversion.yaml(value)); }); - if (updated == content) - return Result.success(null); + if (updated == content) return Result.success(null); await app.vault.modify(file, updated); return Result.success(null); } // src/utils/fields.ts function useSetField(field, onChange3) { - const app = P4(APP_CONTEXT); - return x2( + const app = x2(APP_CONTEXT); + return q2( (newValue) => { editProvenance(app, field.provenance, newValue).then(() => { - if (onChange3) - onChange3(newValue); + if (onChange3) onChange3(newValue); }); }, [field, onChange3] @@ -43155,24 +48660,22 @@ function editableReducer({ content, updater, ...rest }, action) { } } function useEditableDispatch(initial2) { - const init = q2(() => typeof initial2 == "function" ? initial2() : initial2, [initial2]); - return y2(editableReducer, init, (s4) => init); + const init = T2(() => typeof initial2 == "function" ? initial2() : initial2, [initial2]); + return p2(editableReducer, init, (s4) => init); } -function Editable({ sourcePath, defaultRender, editor, dispatch, state: state2 }) { - const currentRef = F2(null); - const element = q2(() => { - if (state2.isEditing) { +function Editable({ sourcePath, defaultRender, editor, dispatch, state }) { + const currentRef = A2(null); + const element = T2(() => { + if (state.isEditing) { return editor; } else { - if (defaultRender) - return defaultRender; - else - return /* @__PURE__ */ u3(Lit, { value: state2.content, inline: true, sourcePath: "" }); + if (defaultRender) return defaultRender; + else return /* @__PURE__ */ u3(Lit, { value: state.content, inline: true, sourcePath: "" }); } - }, [state2.isEditing, state2.content, sourcePath, defaultRender]); - _2(() => { - dispatch && dispatch({ type: "content-changed", newValue: state2.content }); - }, [state2.content, state2.isEditing]); + }, [state.isEditing, state.content, sourcePath, defaultRender]); + y2(() => { + dispatch && dispatch({ type: "content-changed", newValue: state.content }); + }, [state.content, state.isEditing]); return /* @__PURE__ */ u3("span", { className: "datacore-editable-outer", ref: currentRef, children: element }); } function ControlledEditable({ @@ -43183,13 +48686,13 @@ function ControlledEditable({ props, sourcePath }) { - const [state2, dispatch] = useEditableDispatch(() => ({ + const [state, dispatch] = useEditableDispatch(() => ({ updater: onUpdate, content, inline: false, isEditing: false })); - return /* @__PURE__ */ u3(Editor, { dispatch, ...props, ...state2 }); + return /* @__PURE__ */ u3(Editor, { dispatch, ...props, ...state }); } function SelectableEditable({ isEditing, @@ -43214,7 +48717,7 @@ function SelectableEditable({ }, [config2, content, updater, isEditing] ); - const editor = q2(() => { + const editor = T2(() => { var _a, _b; return /* @__PURE__ */ u3( StateManagedSelect$1, @@ -43245,7 +48748,7 @@ function DateEditable({ sourcePath, ...rest }) { - const [state2, o3] = useEditableDispatch(() => { + const [state, o4] = useEditableDispatch(() => { var _a; return { isEditing: rest.isEditing, @@ -43254,7 +48757,7 @@ function DateEditable({ inline: (_a = rest.inline) != null ? _a : false }; }); - const settings = P4(SETTINGS_CONTEXT); + const settings = x2(SETTINGS_CONTEXT); const onChange3 = (evt) => { let v3 = new Date(Date.parse(evt.currentTarget.value)); dispatch({ @@ -43265,31 +48768,31 @@ function DateEditable({ type: "commit", newValue: !!v3 ? DateTime.fromJSDate(v3).toFormat(settings.defaultDateFormat) : null }); - o3({ + o4({ type: "commit", newValue: !!v3 ? DateTime.fromJSDate(v3).toFormat(settings.defaultDateFormat) : null }); }; - const jsDate = q2(() => { - return state2.content instanceof DateTime ? state2.content : typeof state2.content == "string" && !!state2.content ? DateTime.fromJSDate(new Date(Date.parse(state2.content))) : null; - }, [state2.content]); + const jsDate = T2(() => { + return state.content instanceof DateTime ? state.content : typeof state.content == "string" && !!state.content ? DateTime.fromJSDate(new Date(Date.parse(state.content))) : null; + }, [state.content]); const editorNode = /* @__PURE__ */ u3("input", { type: "date", onChange: onChange3, value: jsDate == null ? void 0 : jsDate.toFormat("yyyy-MM-dd") }); return /* @__PURE__ */ u3(Editable, { dispatch, state: rest, editor: editorNode }); } function NumberEditable(props) { - const cfc = P4(CURRENT_FILE_CONTEXT); - const [state2, dispatch] = useEditableDispatch(() => ({ + const cfc = x2(CURRENT_FILE_CONTEXT); + const [state, dispatch] = useEditableDispatch(() => ({ isEditing: false, content: props.content, updater: props.updater, inline: true })); - const value = F2(props.content); + const value = A2(props.content); const onChangeCb = useStableCallback( async (evt) => { value.current = parseFloat(evt.currentTarget.value); }, - [value.current, state2.content, state2.updater, state2.isEditing] + [value.current, state.content, state.updater, state.isEditing] ); const finalize = useFinalizer(value.current, dispatch); const onInput = useStableCallback( @@ -43298,7 +48801,7 @@ function NumberEditable(props) { await finalize(); } }, - [value.current, state2.updater, state2.content, state2.isEditing] + [value.current, state.updater, state.content, state.isEditing] ); const dblClick = useStableCallback( (e3) => { @@ -43307,15 +48810,15 @@ function NumberEditable(props) { newValue: true }); }, - [value.current, state2.updater, state2.isEditing, state2.content] + [value.current, state.updater, state.isEditing, state.content] ); const readonlyEl = /* @__PURE__ */ u3(Lit, { inline: false, sourcePath: cfc, value: value.current }); const editor = /* @__PURE__ */ u3("input", { className: "datacore-editable", type: "number", onChange: onChangeCb, onKeyUp: onInput }); - return /* @__PURE__ */ u3("span", { className: "has-texteditable", onDblClick: dblClick, children: /* @__PURE__ */ u3(Editable, { dispatch, editor, defaultRender: readonlyEl, state: state2 }) }); + return /* @__PURE__ */ u3("span", { className: "has-texteditable", onDblClick: dblClick, children: /* @__PURE__ */ u3(Editable, { dispatch, editor, defaultRender: readonlyEl, state }) }); } function TextEditable(props) { - const cfc = P4(CURRENT_FILE_CONTEXT); - const [state2, dispatch] = useEditableDispatch(() => { + const cfc = x2(CURRENT_FILE_CONTEXT); + const [state, dispatch] = useEditableDispatch(() => { var _a; return { isEditing: props.isEditing, @@ -43324,12 +48827,12 @@ function TextEditable(props) { inline: (_a = props.inline) != null ? _a : false }; }); - const text2 = F2("-"); - _2(() => { - text2.current = state2.content; - dispatch({ type: "content-changed", newValue: state2.content }); - }, [props.content, state2.content]); - const finalize = useFinalizer(state2.content, dispatch); + const text2 = A2("-"); + y2(() => { + text2.current = state.content; + dispatch({ type: "content-changed", newValue: state.content }); + }, [props.content, state.content]); + const finalize = useFinalizer(state.content, dispatch); const onInput = useStableCallback( async (e3) => { if (props.inline) { @@ -43343,7 +48846,7 @@ function TextEditable(props) { } } }, - [text2.current, props.sourcePath, state2.updater, state2.content, state2.isEditing] + [text2.current, props.sourcePath, state.updater, state.content, state.isEditing] ); const dblClick = useStableCallback( (e3) => { @@ -43352,11 +48855,11 @@ function TextEditable(props) { newValue: true }); }, - [text2.current, props.sourcePath, state2.updater, state2.isEditing, state2.content] + [text2.current, props.sourcePath, state.updater, state.isEditing, state.content] ); - const readonlyEl = /* @__PURE__ */ u3(m, { children: props.markdown ? /* @__PURE__ */ u3(Markdown, { content: text2.current, sourcePath: props.sourcePath || cfc, inline: false }) : /* @__PURE__ */ u3(Lit, { inline: false, sourcePath: props.sourcePath || cfc, value: text2.current }) }); + const readonlyEl = /* @__PURE__ */ u3(b, { children: props.markdown ? /* @__PURE__ */ u3(Markdown, { content: text2.current, sourcePath: props.sourcePath || cfc, inline: false }) : /* @__PURE__ */ u3(Lit, { inline: false, sourcePath: props.sourcePath || cfc, value: text2.current }) }); const editor = /* @__PURE__ */ u3(UncontrolledTextEditable, { onInput, inline: props.inline, dispatch, text: text2.current }); - return /* @__PURE__ */ u3("span", { className: "has-texteditable", onDblClick: dblClick, children: /* @__PURE__ */ u3(Editable, { dispatch, editor, defaultRender: readonlyEl, state: state2 }) }); + return /* @__PURE__ */ u3("span", { className: "has-texteditable", onDblClick: dblClick, children: /* @__PURE__ */ u3(Editable, { dispatch, editor, defaultRender: readonlyEl, state }) }); } function UncontrolledTextEditable({ inline: inline2, @@ -43364,8 +48867,8 @@ function UncontrolledTextEditable({ dispatch, onInput }) { - const [txt, setText] = p2(text2); - _2(() => { + const [txt, setText] = h2(text2); + y2(() => { dispatch && dispatch({ newValue: txt, type: "content-changed" }); }, [txt]); const onChangeCb = useStableCallback( @@ -43385,7 +48888,7 @@ function EditableListField({ renderAs, config: config2 }) { - const subEditor = q2(() => { + const subEditor = T2(() => { switch (renderAs) { case "progress": return type == "number" ? /* @__PURE__ */ u3( @@ -43429,7 +48932,7 @@ function EditableListField({ return null; } }, [parent, field, props.content, props.content, props, config2, renderAs]); - const editor = q2(() => { + const editor = T2(() => { switch (type) { case "date": return /* @__PURE__ */ u3( @@ -43454,7 +48957,7 @@ function EditableListField({ } ); case "string": - return /* @__PURE__ */ u3(m, { children: subEditor != null ? subEditor : /* @__PURE__ */ u3( + return /* @__PURE__ */ u3(b, { children: subEditor != null ? subEditor : /* @__PURE__ */ u3( TextEditable, { sourcePath: parent.$file, @@ -43464,7 +48967,7 @@ function EditableListField({ } ) }); case "number": - return /* @__PURE__ */ u3(m, { children: subEditor != null ? subEditor : /* @__PURE__ */ u3(NumberEditable, { content: props.content, updater: props.updater }) }); + return /* @__PURE__ */ u3(b, { children: subEditor != null ? subEditor : /* @__PURE__ */ u3(NumberEditable, { content: props.content, updater: props.updater }) }); default: return /* @__PURE__ */ u3( TextEditable, @@ -43492,7 +48995,7 @@ function EditableListField({ // src/api/ui/views/list.tsx function DefaultListElement({ element }) { - const sourcePath = P4(CURRENT_FILE_CONTEXT); + const sourcePath = x2(CURRENT_FILE_CONTEXT); return /* @__PURE__ */ u3(Lit, { inline: true, value: element, sourcePath }); } function EditableListElement({ @@ -43519,7 +49022,7 @@ function EditableListElement({ function TaskList({ rows: items, additionalStates: states, - renderer: listRenderer = (item, index2) => /* @__PURE__ */ u3( + renderer: listRenderer = (item, index) => /* @__PURE__ */ u3( EditableListElement, { onUpdate: useListItemEditing(item), @@ -43531,25 +49034,25 @@ function TaskList({ ), ...rest }) { - const content = q2(() => { + const content = T2(() => { return /* @__PURE__ */ u3("ul", { className: "datacore contains-task-list", children: items == null ? void 0 : items.map( - (item, ind) => item instanceof MarkdownTaskItem ? /* @__PURE__ */ u3(Task, { state: { ...rest, additionalStates: states }, item }) : /* @__PURE__ */ u3("li", { children: [ + (item, ind) => item instanceof MarkdownTaskItem ? /* @__PURE__ */ u3(Task, { state: { ...rest, additionalStates: states }, item }, item.$id) : /* @__PURE__ */ u3("li", { children: [ listRenderer(item, ind), /* @__PURE__ */ u3("div", { className: "datacore-list-item-fields", children: /* @__PURE__ */ u3(ListItemFields, { displayedFields: rest.displayedFields, item }) }) ] }) ) }); }, [items, states]); - return /* @__PURE__ */ u3(m, { children: !!items && content }); + return /* @__PURE__ */ u3(b, { children: !!items && content }); } function Task({ item, state: props }) { - const app = P4(APP_CONTEXT); - const core = P4(DATACORE_CONTEXT); + const app = x2(APP_CONTEXT); + const core = x2(DATACORE_CONTEXT); const { settings } = core; const states = [" ", ...props.additionalStates || [], "x"]; const nextState = () => { var _a; if (props.additionalStates && ((_a = props.additionalStates) == null ? void 0 : _a.length) > 0) { - let curIndex = states.findIndex((a3) => a3 === item.$status); + let curIndex = states.findIndex((a4) => a4 === item.$status); curIndex++; if (curIndex >= states.length) { curIndex = 0; @@ -43559,8 +49062,8 @@ function Task({ item, state: props }) { return item.$completed ? " " : "x"; } }; - const [status, setStatus] = p2(item.$status); - const completedRef2 = F2(null); + const [status, setStatus] = h2(item.$status); + const completedRef2 = A2(null); const onChecked = useStableCallback(async (evt) => { const completed = evt.currentTarget.checked; let newStatus; @@ -43574,8 +49077,8 @@ function Task({ item, state: props }) { const nv = completed ? DateTime.now().toFormat(settings.defaultDateFormat) : null; completedRef2.current && completedRef2.current({ type: "commit", newValue: nv }); }, []); - const checked = q2(() => item.$status !== " ", [item.$status]); - const eState = q2(() => { + const checked = T2(() => status !== " ", [item.$status, item, status]); + const eState = T2(() => { return { updater: useListItemEditing(item), content: item.$cleantext, @@ -43583,31 +49086,31 @@ function Task({ item, state: props }) { isEditing: false }; }, [item.$cleantext, item.$text]); - const theElement = q2( + const theElement = T2( () => /* @__PURE__ */ u3(TextEditable, { sourcePath: item.$file, ...eState }), [eState.content, item, props.rows] ); - const [collapsed, setCollapsed] = p2(false); + const [collapsed, setCollapsed] = h2(false); const hasChildren = item.$elements.length > 0; - _2(() => { + y2(() => { setCollapsed(!collapsed); }, []); - return /* @__PURE__ */ u3("li", { className: "datacore task-list-item" + (checked ? " is-checked" : ""), "data-task": status, children: [ + return /* @__PURE__ */ u3("li", { "data-testid": "datacore-task-item", className: "datacore task-list-item" + (checked ? " is-checked" : ""), "data-task": status, children: [ /* @__PURE__ */ u3( CollapseIndicator, { - onClick: () => setCollapsed((c3) => !c3), + onClick: () => setCollapsed((c4) => !c4), collapsed, hasChildren } ), - /* @__PURE__ */ u3("input", { className: "datacore task-list-item-checkbox", type: "checkbox", checked, onClick: onChecked }), + /* @__PURE__ */ u3("input", { className: "datacore task-list-item-checkbox", type: "checkbox", checked, onClick: onChecked, onChange: (e3) => console.log(e3.currentTarget.value) }), /* @__PURE__ */ u3("div", { children: /* @__PURE__ */ u3("div", { className: "datacore-list-item-content", children: [ theElement, /* @__PURE__ */ u3("div", { className: "datacore-list-item-fields", children: /* @__PURE__ */ u3(ListItemFields, { displayedFields: props.displayedFields, item }) }) ] }) }), hasChildren && !collapsed && /* @__PURE__ */ u3(TaskList, { ...props, rows: item.$elements }) - ] }); + ] }, item.$id); } function CollapseIndicator({ collapsed, @@ -43615,10 +49118,8 @@ function CollapseIndicator({ hasChildren }) { const toggleCnames = ["datacore-collapser"]; - if (collapsed) - toggleCnames.push("is-collapsed"); - if (!hasChildren) - toggleCnames.push("no-children"); + if (collapsed) toggleCnames.push("is-collapsed"); + if (!hasChildren) toggleCnames.push("no-children"); return /* @__PURE__ */ u3("div", { onClick, className: toggleCnames.join(" "), dir: "auto", children: /* @__PURE__ */ u3( "svg", { @@ -43640,12 +49141,11 @@ function ListItemFields({ displayedFields: displayedFieldsProp, item }) { - const app = P4(APP_CONTEXT); - const core = P4(DATACORE_CONTEXT); + const app = x2(APP_CONTEXT); + const core = x2(DATACORE_CONTEXT); const { settings } = core; - const displayedFields = q2(() => { - if (displayedFieldsProp != void 0) - return displayedFieldsProp; + const displayedFields = T2(() => { + if (displayedFieldsProp != void 0) return displayedFieldsProp; else { return Object.values(item.$infields).map((f4) => { return { @@ -43658,7 +49158,7 @@ function ListItemFields({ }); } }, [displayedFieldsProp, item.$infields, item]); - return /* @__PURE__ */ u3(m, { children: displayedFields.map((ifield) => { + return /* @__PURE__ */ u3(b, { children: displayedFields.map((ifield) => { var _a; ifield.key = ifield.key.toLocaleLowerCase(); let defVal = typeof ifield.defaultValue == "function" ? ifield.defaultValue() : ifield.defaultValue; @@ -43667,7 +49167,7 @@ function ListItemFields({ value: defVal, raw: Literals.toString(defVal) }; - const [fieldValue] = p2(((_a = item.$infields[ifield == null ? void 0 : ifield.key]) == null ? void 0 : _a.value) || defField.value); + const [fieldValue] = h2(((_a = item.$infields[ifield == null ? void 0 : ifield.key]) == null ? void 0 : _a.value) || defField.value); const [state2, dispatch] = useEditableDispatch({ content: fieldValue, isEditing: false, @@ -43677,8 +49177,7 @@ function ListItemFields({ const dateString = (v3) => v3 instanceof DateTime ? v3.toFormat(settings.defaultDateFormat) : v3 != null ? Literals.toString(v3) : void 0; let withFields = item.$text; if (withFields && item.$text) { - if (item.$infields[ifield.key]) - item.$infields[ifield.key].value = dateString(val); + if (item.$infields[ifield.key]) item.$infields[ifield.key].value = dateString(val); for (let field in item.$infields) { withFields = setInlineField( withFields, @@ -43720,9 +49219,9 @@ function ListItemFields({ }) }); } function useListItemEditing(item) { - const app = P4(APP_CONTEXT); - const core = P4(DATACORE_CONTEXT); - const status = q2(() => item instanceof MarkdownTaskItem ? item.$status : " ", [item]); + const app = x2(APP_CONTEXT); + const core = x2(DATACORE_CONTEXT); + const status = T2(() => item instanceof MarkdownTaskItem ? item.$status : " ", [item]); return useStableCallback( async (val) => { if (typeof val === "string") { @@ -43745,7 +49244,7 @@ function RawControlledPager({ }) { totalPages = Math.max(1, totalPages); const realPage = clamp(page, 0, totalPages - 1); - const visiblePages = q2(() => splitPages(realPage, totalPages), [realPage, totalPages]); + const visiblePages = T2(() => splitPages(realPage, totalPages), [realPage, totalPages]); return /* @__PURE__ */ u3("div", { className: "dc-paging-control", children: [ /* @__PURE__ */ u3( "button", @@ -43777,7 +49276,7 @@ function RawControlledPager({ ) } ), - visiblePages.map((pages, i4) => /* @__PURE__ */ u3(m, { children: [ + visiblePages.map((pages, i4) => /* @__PURE__ */ u3(b, { children: [ i4 > 0 && /* @__PURE__ */ u3( "button", { @@ -43829,12 +49328,12 @@ function RawControlledPager({ ] } ), - pages.map((p4) => /* @__PURE__ */ u3( + pages.map((p3) => /* @__PURE__ */ u3( "button", { - className: `dc-paging-control-page ${p4 === realPage ? " dc-paging-control-page-active" : ""}`, - onClick: (event) => setPage(p4), - children: p4 + 1 + className: `dc-paging-control-page ${p3 === realPage ? " dc-paging-control-page-active" : ""}`, + onClick: (event) => setPage(p3), + children: p3 + 1 } )) ] })), @@ -43870,15 +49369,15 @@ function RawControlledPager({ ) ] }); } -var ControlledPager = Rn.memo(RawControlledPager); +var ControlledPager = xn.memo(RawControlledPager); function usePaging({ initialPage = 0, pageSize, elements }) { const totalPages = Math.max(1, Math.ceil(elements / pageSize)); - const [pageStart, setPageStart] = p2(() => clamp(initialPage, 0, totalPages - 1)); - const setBoundedPage = x2( + const [pageStart, setPageStart] = h2(() => clamp(initialPage, 0, totalPages - 1)); + const setBoundedPage = q2( (page2) => setPageStart(clamp(page2, 0, totalPages - 1) * pageSize), [pageSize, totalPages] ); @@ -43892,12 +49391,12 @@ function useDatacorePaging({ elements, container }) { - const settings = P4(SETTINGS_CONTEXT); + const settings = x2(SETTINGS_CONTEXT); const pageSize = typeof paging === "number" ? paging : settings.defaultPageSize; const pagingEnabled = typeof paging === "number" || paging === true; const shouldScroll = typeof scrollOnPageChange === "number" && scrollOnPageChange >= pageSize || !!(scrollOnPageChange != null ? scrollOnPageChange : settings.scrollOnPageChange); const [page, totalPages, rawSetPage] = usePaging({ initialPage, pageSize, elements }); - const setPage = x2( + const setPage = q2( (newPage) => { var _a; if (page != newPage && container && shouldScroll) { @@ -43913,16 +49412,13 @@ function useDatacorePaging({ ); return { enabled: pagingEnabled, scroll: shouldScroll, page, pageSize, totalPages, setPage }; } -function clamp(input2, min2, max2) { - if (input2 < min2) - return min2; - if (input2 > max2) - return max2; - return input2; +function clamp(input, min2, max2) { + if (input < min2) return min2; + if (input > max2) return max2; + return input; } function splitPages(page, totalPages) { - if (totalPages < 12) - return [Array.from({ length: totalPages }, (_3, i4) => i4)]; + if (totalPages < 12) return [Array.from({ length: totalPages }, (_3, i4) => i4)]; if (page < 5) return [ [0, 1, 2, 3, 4, 5, 6, 7], @@ -43969,2841 +49465,28 @@ function isLeftSeperator(realPage, visiblePagesLength, seperatorIndex) { var faSortDown = { prefix: "fas", iconName: "sort-down", - icon: [320, 512, ["sort-desc"], "f0dd", "M182.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128z"] + icon: [320, 512, ["sort-desc"], "f0dd", "M182.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128z"] }; var faSort = { prefix: "fas", iconName: "sort", - icon: [320, 512, ["unsorted"], "f0dc", "M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z"] + icon: [320, 512, ["unsorted"], "f0dc", "M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8L32 224c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z"] }; var faSortUp = { prefix: "fas", iconName: "sort-up", - icon: [320, 512, ["sort-asc"], "f0de", "M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"] + icon: [320, 512, ["sort-asc"], "f0de", "M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z"] }; -// node_modules/@fortawesome/fontawesome-svg-core/index.mjs -function ownKeys2(object, enumerableOnly) { - var keys = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - enumerableOnly && (symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - })), keys.push.apply(keys, symbols); - } - return keys; -} -function _objectSpread22(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = null != arguments[i4] ? arguments[i4] : {}; - i4 % 2 ? ownKeys2(Object(source), true).forEach(function(key) { - _defineProperty2(target, key, source[key]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys2(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - return target; -} -function _typeof2(obj) { - "@babel/helpers - typeof"; - return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) { - return typeof obj2; - } : function(obj2) { - return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }, _typeof2(obj); -} -function _classCallCheck2(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} -function _defineProperties2(target, props) { - for (var i4 = 0; i4 < props.length; i4++) { - var descriptor = props[i4]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} -function _createClass2(Constructor, protoProps, staticProps) { - if (protoProps) - _defineProperties2(Constructor.prototype, protoProps); - if (staticProps) - _defineProperties2(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} -function _defineProperty2(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - return obj; -} -function _slicedToArray2(arr, i4) { - return _arrayWithHoles2(arr) || _iterableToArrayLimit2(arr, i4) || _unsupportedIterableToArray2(arr, i4) || _nonIterableRest2(); -} -function _toConsumableArray2(arr) { - return _arrayWithoutHoles2(arr) || _iterableToArray2(arr) || _unsupportedIterableToArray2(arr) || _nonIterableSpread2(); -} -function _arrayWithoutHoles2(arr) { - if (Array.isArray(arr)) - return _arrayLikeToArray2(arr); -} -function _arrayWithHoles2(arr) { - if (Array.isArray(arr)) - return arr; -} -function _iterableToArray2(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) - return Array.from(iter); -} -function _iterableToArrayLimit2(arr, i4) { - var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; - if (_i == null) - return; - var _arr = []; - var _n2 = true; - var _d = false; - var _s, _e; - try { - for (_i = _i.call(arr); !(_n2 = (_s = _i.next()).done); _n2 = true) { - _arr.push(_s.value); - if (i4 && _arr.length === i4) - break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n2 && _i["return"] != null) - _i["return"](); - } finally { - if (_d) - throw _e; - } - } - return _arr; -} -function _unsupportedIterableToArray2(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray2(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray2(o3, minLen); -} -function _arrayLikeToArray2(arr, len) { - if (len == null || len > arr.length) - len = arr.length; - for (var i4 = 0, arr2 = new Array(len); i4 < len; i4++) - arr2[i4] = arr[i4]; - return arr2; -} -function _nonIterableSpread2() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -function _nonIterableRest2() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -var noop3 = function noop4() { -}; -var _WINDOW = {}; -var _DOCUMENT = {}; -var _MUTATION_OBSERVER = null; -var _PERFORMANCE = { - mark: noop3, - measure: noop3 -}; -try { - if (typeof window !== "undefined") - _WINDOW = window; - if (typeof document !== "undefined") - _DOCUMENT = document; - if (typeof MutationObserver !== "undefined") - _MUTATION_OBSERVER = MutationObserver; - if (typeof performance !== "undefined") - _PERFORMANCE = performance; -} catch (e3) { -} -var _ref3 = _WINDOW.navigator || {}; -var _ref$userAgent = _ref3.userAgent; -var userAgent = _ref$userAgent === void 0 ? "" : _ref$userAgent; -var WINDOW = _WINDOW; -var DOCUMENT = _DOCUMENT; -var MUTATION_OBSERVER = _MUTATION_OBSERVER; -var PERFORMANCE = _PERFORMANCE; -var IS_BROWSER = !!WINDOW.document; -var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === "function" && typeof DOCUMENT.createElement === "function"; -var IS_IE = ~userAgent.indexOf("MSIE") || ~userAgent.indexOf("Trident/"); -var _familyProxy; -var _familyProxy2; -var _familyProxy3; -var _familyProxy4; -var _familyProxy5; -var NAMESPACE_IDENTIFIER = "___FONT_AWESOME___"; -var UNITS_IN_GRID = 16; -var DEFAULT_CSS_PREFIX = "fa"; -var DEFAULT_REPLACEMENT_CLASS = "svg-inline--fa"; -var DATA_FA_I2SVG = "data-fa-i2svg"; -var DATA_FA_PSEUDO_ELEMENT = "data-fa-pseudo-element"; -var DATA_FA_PSEUDO_ELEMENT_PENDING = "data-fa-pseudo-element-pending"; -var DATA_PREFIX = "data-prefix"; -var DATA_ICON = "data-icon"; -var HTML_CLASS_I2SVG_BASE_CLASS = "fontawesome-i2svg"; -var MUTATION_APPROACH_ASYNC = "async"; -var TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ["HTML", "HEAD", "STYLE", "SCRIPT"]; -var PRODUCTION = function() { - try { - return false; - } catch (e3) { - return false; - } -}(); -var FAMILY_CLASSIC = "classic"; -var FAMILY_SHARP = "sharp"; -var FAMILIES = [FAMILY_CLASSIC, FAMILY_SHARP]; -function familyProxy(obj) { - return new Proxy(obj, { - get: function get2(target, prop) { - return prop in target ? target[prop] : target[FAMILY_CLASSIC]; - } - }); -} -var PREFIX_TO_STYLE = familyProxy((_familyProxy = {}, _defineProperty2(_familyProxy, FAMILY_CLASSIC, { - "fa": "solid", - "fas": "solid", - "fa-solid": "solid", - "far": "regular", - "fa-regular": "regular", - "fal": "light", - "fa-light": "light", - "fat": "thin", - "fa-thin": "thin", - "fad": "duotone", - "fa-duotone": "duotone", - "fab": "brands", - "fa-brands": "brands", - "fak": "kit", - "fakd": "kit", - "fa-kit": "kit", - "fa-kit-duotone": "kit" -}), _defineProperty2(_familyProxy, FAMILY_SHARP, { - "fa": "solid", - "fass": "solid", - "fa-solid": "solid", - "fasr": "regular", - "fa-regular": "regular", - "fasl": "light", - "fa-light": "light", - "fast": "thin", - "fa-thin": "thin" -}), _familyProxy)); -var STYLE_TO_PREFIX = familyProxy((_familyProxy2 = {}, _defineProperty2(_familyProxy2, FAMILY_CLASSIC, { - solid: "fas", - regular: "far", - light: "fal", - thin: "fat", - duotone: "fad", - brands: "fab", - kit: "fak" -}), _defineProperty2(_familyProxy2, FAMILY_SHARP, { - solid: "fass", - regular: "fasr", - light: "fasl", - thin: "fast" -}), _familyProxy2)); -var PREFIX_TO_LONG_STYLE = familyProxy((_familyProxy3 = {}, _defineProperty2(_familyProxy3, FAMILY_CLASSIC, { - fab: "fa-brands", - fad: "fa-duotone", - fak: "fa-kit", - fal: "fa-light", - far: "fa-regular", - fas: "fa-solid", - fat: "fa-thin" -}), _defineProperty2(_familyProxy3, FAMILY_SHARP, { - fass: "fa-solid", - fasr: "fa-regular", - fasl: "fa-light", - fast: "fa-thin" -}), _familyProxy3)); -var LONG_STYLE_TO_PREFIX = familyProxy((_familyProxy4 = {}, _defineProperty2(_familyProxy4, FAMILY_CLASSIC, { - "fa-brands": "fab", - "fa-duotone": "fad", - "fa-kit": "fak", - "fa-light": "fal", - "fa-regular": "far", - "fa-solid": "fas", - "fa-thin": "fat" -}), _defineProperty2(_familyProxy4, FAMILY_SHARP, { - "fa-solid": "fass", - "fa-regular": "fasr", - "fa-light": "fasl", - "fa-thin": "fast" -}), _familyProxy4)); -var ICON_SELECTION_SYNTAX_PATTERN = /fa(s|r|l|t|d|b|k|ss|sr|sl|st)?[\-\ ]/; -var LAYERS_TEXT_CLASSNAME = "fa-layers-text"; -var FONT_FAMILY_PATTERN = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i; -var FONT_WEIGHT_TO_PREFIX = familyProxy((_familyProxy5 = {}, _defineProperty2(_familyProxy5, FAMILY_CLASSIC, { - 900: "fas", - 400: "far", - normal: "far", - 300: "fal", - 100: "fat" -}), _defineProperty2(_familyProxy5, FAMILY_SHARP, { - 900: "fass", - 400: "fasr", - 300: "fasl", - 100: "fast" -}), _familyProxy5)); -var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; -var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); -var ATTRIBUTES_WATCHED_FOR_MUTATION = ["class", "data-prefix", "data-icon", "data-fa-transform", "data-fa-mask"]; -var DUOTONE_CLASSES = { - GROUP: "duotone-group", - SWAP_OPACITY: "swap-opacity", - PRIMARY: "primary", - SECONDARY: "secondary" -}; -var prefixes = /* @__PURE__ */ new Set(); -Object.keys(STYLE_TO_PREFIX[FAMILY_CLASSIC]).map(prefixes.add.bind(prefixes)); -Object.keys(STYLE_TO_PREFIX[FAMILY_SHARP]).map(prefixes.add.bind(prefixes)); -var RESERVED_CLASSES = [].concat(FAMILIES, _toConsumableArray2(prefixes), ["2xs", "xs", "sm", "lg", "xl", "2xl", "beat", "border", "fade", "beat-fade", "bounce", "flip-both", "flip-horizontal", "flip-vertical", "flip", "fw", "inverse", "layers-counter", "layers-text", "layers", "li", "pull-left", "pull-right", "pulse", "rotate-180", "rotate-270", "rotate-90", "rotate-by", "shake", "spin-pulse", "spin-reverse", "spin", "stack-1x", "stack-2x", "stack", "ul", DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function(n3) { - return "".concat(n3, "x"); -})).concat(oneToTwenty.map(function(n3) { - return "w-".concat(n3); -})); -var initial = WINDOW.FontAwesomeConfig || {}; -function getAttrConfig(attr) { - var element = DOCUMENT.querySelector("script[" + attr + "]"); - if (element) { - return element.getAttribute(attr); - } -} -function coerce(val) { - if (val === "") - return true; - if (val === "false") - return false; - if (val === "true") - return true; - return val; -} -if (DOCUMENT && typeof DOCUMENT.querySelector === "function") { - attrs = [["data-family-prefix", "familyPrefix"], ["data-css-prefix", "cssPrefix"], ["data-family-default", "familyDefault"], ["data-style-default", "styleDefault"], ["data-replacement-class", "replacementClass"], ["data-auto-replace-svg", "autoReplaceSvg"], ["data-auto-add-css", "autoAddCss"], ["data-auto-a11y", "autoA11y"], ["data-search-pseudo-elements", "searchPseudoElements"], ["data-observe-mutations", "observeMutations"], ["data-mutate-approach", "mutateApproach"], ["data-keep-original-source", "keepOriginalSource"], ["data-measure-performance", "measurePerformance"], ["data-show-missing-icons", "showMissingIcons"]]; - attrs.forEach(function(_ref4) { - var _ref23 = _slicedToArray2(_ref4, 2), attr = _ref23[0], key = _ref23[1]; - var val = coerce(getAttrConfig(attr)); - if (val !== void 0 && val !== null) { - initial[key] = val; - } - }); -} -var attrs; -var _default = { - styleDefault: "solid", - familyDefault: "classic", - cssPrefix: DEFAULT_CSS_PREFIX, - replacementClass: DEFAULT_REPLACEMENT_CLASS, - autoReplaceSvg: true, - autoAddCss: true, - autoA11y: true, - searchPseudoElements: false, - observeMutations: true, - mutateApproach: "async", - keepOriginalSource: true, - measurePerformance: false, - showMissingIcons: true -}; -if (initial.familyPrefix) { - initial.cssPrefix = initial.familyPrefix; -} -var _config = _objectSpread22(_objectSpread22({}, _default), initial); -if (!_config.autoReplaceSvg) - _config.observeMutations = false; -var config = {}; -Object.keys(_default).forEach(function(key) { - Object.defineProperty(config, key, { - enumerable: true, - set: function set2(val) { - _config[key] = val; - _onChangeCb.forEach(function(cb) { - return cb(config); - }); - }, - get: function get2() { - return _config[key]; - } - }); -}); -Object.defineProperty(config, "familyPrefix", { - enumerable: true, - set: function set(val) { - _config.cssPrefix = val; - _onChangeCb.forEach(function(cb) { - return cb(config); - }); - }, - get: function get() { - return _config.cssPrefix; - } -}); -WINDOW.FontAwesomeConfig = config; -var _onChangeCb = []; -function onChange2(cb) { - _onChangeCb.push(cb); - return function() { - _onChangeCb.splice(_onChangeCb.indexOf(cb), 1); - }; -} -var d3 = UNITS_IN_GRID; -var meaninglessTransform = { - size: 16, - x: 0, - y: 0, - rotate: 0, - flipX: false, - flipY: false -}; -function insertCss(css6) { - if (!css6 || !IS_DOM) { - return; - } - var style = DOCUMENT.createElement("style"); - style.setAttribute("type", "text/css"); - style.innerHTML = css6; - var headChildren = DOCUMENT.head.childNodes; - var beforeChild = null; - for (var i4 = headChildren.length - 1; i4 > -1; i4--) { - var child = headChildren[i4]; - var tagName = (child.tagName || "").toUpperCase(); - if (["STYLE", "LINK"].indexOf(tagName) > -1) { - beforeChild = child; - } - } - DOCUMENT.head.insertBefore(style, beforeChild); - return css6; -} -var idPool = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; -function nextUniqueId() { - var size2 = 12; - var id = ""; - while (size2-- > 0) { - id += idPool[Math.random() * 62 | 0]; - } - return id; -} -function toArray(obj) { - var array2 = []; - for (var i4 = (obj || []).length >>> 0; i4--; ) { - array2[i4] = obj[i4]; - } - return array2; -} -function classArray(node2) { - if (node2.classList) { - return toArray(node2.classList); - } else { - return (node2.getAttribute("class") || "").split(" ").filter(function(i4) { - return i4; - }); - } -} -function htmlEscape(str) { - return "".concat(str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(//g, ">"); -} -function joinAttributes(attributes) { - return Object.keys(attributes || {}).reduce(function(acc, attributeName) { - return acc + "".concat(attributeName, '="').concat(htmlEscape(attributes[attributeName]), '" '); - }, "").trim(); -} -function joinStyles(styles2) { - return Object.keys(styles2 || {}).reduce(function(acc, styleName) { - return acc + "".concat(styleName, ": ").concat(styles2[styleName].trim(), ";"); - }, ""); -} -function transformIsMeaningful(transform2) { - return transform2.size !== meaninglessTransform.size || transform2.x !== meaninglessTransform.x || transform2.y !== meaninglessTransform.y || transform2.rotate !== meaninglessTransform.rotate || transform2.flipX || transform2.flipY; -} -function transformForSvg(_ref4) { - var transform2 = _ref4.transform, containerWidth = _ref4.containerWidth, iconWidth = _ref4.iconWidth; - var outer = { - transform: "translate(".concat(containerWidth / 2, " 256)") - }; - var innerTranslate = "translate(".concat(transform2.x * 32, ", ").concat(transform2.y * 32, ") "); - var innerScale = "scale(".concat(transform2.size / 16 * (transform2.flipX ? -1 : 1), ", ").concat(transform2.size / 16 * (transform2.flipY ? -1 : 1), ") "); - var innerRotate = "rotate(".concat(transform2.rotate, " 0 0)"); - var inner = { - transform: "".concat(innerTranslate, " ").concat(innerScale, " ").concat(innerRotate) - }; - var path = { - transform: "translate(".concat(iconWidth / 2 * -1, " -256)") - }; - return { - outer, - inner, - path - }; -} -function transformForCss(_ref23) { - var transform2 = _ref23.transform, _ref2$width = _ref23.width, width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width, _ref2$height = _ref23.height, height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height, _ref2$startCentered = _ref23.startCentered, startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered; - var val = ""; - if (startCentered && IS_IE) { - val += "translate(".concat(transform2.x / d3 - width / 2, "em, ").concat(transform2.y / d3 - height / 2, "em) "); - } else if (startCentered) { - val += "translate(calc(-50% + ".concat(transform2.x / d3, "em), calc(-50% + ").concat(transform2.y / d3, "em)) "); - } else { - val += "translate(".concat(transform2.x / d3, "em, ").concat(transform2.y / d3, "em) "); - } - val += "scale(".concat(transform2.size / d3 * (transform2.flipX ? -1 : 1), ", ").concat(transform2.size / d3 * (transform2.flipY ? -1 : 1), ") "); - val += "rotate(".concat(transform2.rotate, "deg) "); - return val; -} -var baseStyles = ':root, :host {\n --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid";\n --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Regular";\n --fa-font-light: normal 300 1em/1 "Font Awesome 6 Light";\n --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Thin";\n --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone";\n --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-thin: normal 100 1em/1 "Font Awesome 6 Sharp";\n --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";\n}\n\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\n overflow: visible;\n box-sizing: content-box;\n}\n\n.svg-inline--fa {\n display: var(--fa-display, inline-block);\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-2xs {\n vertical-align: 0.1em;\n}\n.svg-inline--fa.fa-xs {\n vertical-align: 0em;\n}\n.svg-inline--fa.fa-sm {\n vertical-align: -0.0714285705em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.2em;\n}\n.svg-inline--fa.fa-xl {\n vertical-align: -0.25em;\n}\n.svg-inline--fa.fa-2xl {\n vertical-align: -0.3125em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-li {\n width: var(--fa-li-width, 2em);\n top: 0.25em;\n}\n.svg-inline--fa.fa-fw {\n width: var(--fa-fw-width, 1.25em);\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: var(--fa-counter-background-color, #ff253a);\n border-radius: var(--fa-counter-border-radius, 1em);\n box-sizing: border-box;\n color: var(--fa-inverse, #fff);\n line-height: var(--fa-counter-line-height, 1);\n max-width: var(--fa-counter-max-width, 5em);\n min-width: var(--fa-counter-min-width, 1.5em);\n overflow: hidden;\n padding: var(--fa-counter-padding, 0.25em 0.5em);\n right: var(--fa-right, 0);\n text-overflow: ellipsis;\n top: var(--fa-top, 0);\n -webkit-transform: scale(var(--fa-counter-scale, 0.25));\n transform: scale(var(--fa-counter-scale, 0.25));\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: var(--fa-bottom, 0);\n right: var(--fa-right, 0);\n top: auto;\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: bottom right;\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: var(--fa-bottom, 0);\n left: var(--fa-left, 0);\n right: auto;\n top: auto;\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: bottom left;\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n top: var(--fa-top, 0);\n right: var(--fa-right, 0);\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: var(--fa-left, 0);\n right: auto;\n top: var(--fa-top, 0);\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: top left;\n transform-origin: top left;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-2xs {\n font-size: 0.625em;\n line-height: 0.1em;\n vertical-align: 0.225em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n line-height: 0.0833333337em;\n vertical-align: 0.125em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n line-height: 0.0714285718em;\n vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n font-size: 1.25em;\n line-height: 0.05em;\n vertical-align: -0.075em;\n}\n\n.fa-xl {\n font-size: 1.5em;\n line-height: 0.0416666682em;\n vertical-align: -0.125em;\n}\n\n.fa-2xl {\n font-size: 2em;\n line-height: 0.03125em;\n vertical-align: -0.1875em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: var(--fa-li-margin, 2.5em);\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: calc(var(--fa-li-width, 2em) * -1);\n position: absolute;\n text-align: center;\n width: var(--fa-li-width, 2em);\n line-height: inherit;\n}\n\n.fa-border {\n border-color: var(--fa-border-color, #eee);\n border-radius: var(--fa-border-radius, 0.1em);\n border-style: var(--fa-border-style, solid);\n border-width: var(--fa-border-width, 0.08em);\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n float: left;\n margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n float: right;\n margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n -webkit-animation-name: fa-beat;\n animation-name: fa-beat;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n -webkit-animation-name: fa-bounce;\n animation-name: fa-bounce;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n -webkit-animation-name: fa-fade;\n animation-name: fa-fade;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n -webkit-animation-name: fa-beat-fade;\n animation-name: fa-beat-fade;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n -webkit-animation-name: fa-flip;\n animation-name: fa-flip;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n -webkit-animation-name: fa-shake;\n animation-name: fa-shake;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n -webkit-animation-name: fa-spin;\n animation-name: fa-spin;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 2s);\n animation-duration: var(--fa-animation-duration, 2s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n -webkit-animation-name: fa-spin;\n animation-name: fa-spin;\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fa-beat,\n.fa-bounce,\n.fa-fade,\n.fa-beat-fade,\n.fa-flip,\n.fa-pulse,\n.fa-shake,\n.fa-spin,\n.fa-spin-pulse {\n -webkit-animation-delay: -1ms;\n animation-delay: -1ms;\n -webkit-animation-duration: 1ms;\n animation-duration: 1ms;\n -webkit-animation-iteration-count: 1;\n animation-iteration-count: 1;\n -webkit-transition-delay: 0s;\n transition-delay: 0s;\n -webkit-transition-duration: 0s;\n transition-duration: 0s;\n }\n}\n@-webkit-keyframes fa-beat {\n 0%, 90% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 45% {\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@keyframes fa-beat {\n 0%, 90% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 45% {\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@-webkit-keyframes fa-bounce {\n 0% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n}\n@keyframes fa-bounce {\n 0% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n}\n@-webkit-keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@-webkit-keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@-webkit-keyframes fa-flip {\n 50% {\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@keyframes fa-flip {\n 50% {\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@-webkit-keyframes fa-shake {\n 0% {\n -webkit-transform: rotate(-15deg);\n transform: rotate(-15deg);\n }\n 4% {\n -webkit-transform: rotate(15deg);\n transform: rotate(15deg);\n }\n 8%, 24% {\n -webkit-transform: rotate(-18deg);\n transform: rotate(-18deg);\n }\n 12%, 28% {\n -webkit-transform: rotate(18deg);\n transform: rotate(18deg);\n }\n 16% {\n -webkit-transform: rotate(-22deg);\n transform: rotate(-22deg);\n }\n 20% {\n -webkit-transform: rotate(22deg);\n transform: rotate(22deg);\n }\n 32% {\n -webkit-transform: rotate(-12deg);\n transform: rotate(-12deg);\n }\n 36% {\n -webkit-transform: rotate(12deg);\n transform: rotate(12deg);\n }\n 40%, 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n}\n@keyframes fa-shake {\n 0% {\n -webkit-transform: rotate(-15deg);\n transform: rotate(-15deg);\n }\n 4% {\n -webkit-transform: rotate(15deg);\n transform: rotate(15deg);\n }\n 8%, 24% {\n -webkit-transform: rotate(-18deg);\n transform: rotate(-18deg);\n }\n 12%, 28% {\n -webkit-transform: rotate(18deg);\n transform: rotate(18deg);\n }\n 16% {\n -webkit-transform: rotate(-22deg);\n transform: rotate(-22deg);\n }\n 20% {\n -webkit-transform: rotate(22deg);\n transform: rotate(22deg);\n }\n 32% {\n -webkit-transform: rotate(-12deg);\n transform: rotate(-12deg);\n }\n 36% {\n -webkit-transform: rotate(12deg);\n transform: rotate(12deg);\n }\n 40%, 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n}\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n -webkit-transform: rotate(var(--fa-rotate-angle, 0));\n transform: rotate(var(--fa-rotate-angle, 0));\n}\n\n.fa-stack {\n display: inline-block;\n vertical-align: middle;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n z-index: var(--fa-stack-z-index, auto);\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: var(--fa-inverse, #fff);\n}\n\n.sr-only,\n.fa-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse,\n.fa-duotone.fa-inverse {\n color: var(--fa-inverse, #fff);\n}'; -function css5() { - var dcp = DEFAULT_CSS_PREFIX; - var drc = DEFAULT_REPLACEMENT_CLASS; - var fp = config.cssPrefix; - var rc = config.replacementClass; - var s4 = baseStyles; - if (fp !== dcp || rc !== drc) { - var dPatt = new RegExp("\\.".concat(dcp, "\\-"), "g"); - var customPropPatt = new RegExp("\\--".concat(dcp, "\\-"), "g"); - var rPatt = new RegExp("\\.".concat(drc), "g"); - s4 = s4.replace(dPatt, ".".concat(fp, "-")).replace(customPropPatt, "--".concat(fp, "-")).replace(rPatt, ".".concat(rc)); - } - return s4; -} -var _cssInserted = false; -function ensureCss() { - if (config.autoAddCss && !_cssInserted) { - insertCss(css5()); - _cssInserted = true; - } -} -var InjectCSS = { - mixout: function mixout() { - return { - dom: { - css: css5, - insertCss: ensureCss - } - }; - }, - hooks: function hooks() { - return { - beforeDOMElementCreation: function beforeDOMElementCreation() { - ensureCss(); - }, - beforeI2svg: function beforeI2svg() { - ensureCss(); - } - }; - } -}; -var w5 = WINDOW || {}; -if (!w5[NAMESPACE_IDENTIFIER]) - w5[NAMESPACE_IDENTIFIER] = {}; -if (!w5[NAMESPACE_IDENTIFIER].styles) - w5[NAMESPACE_IDENTIFIER].styles = {}; -if (!w5[NAMESPACE_IDENTIFIER].hooks) - w5[NAMESPACE_IDENTIFIER].hooks = {}; -if (!w5[NAMESPACE_IDENTIFIER].shims) - w5[NAMESPACE_IDENTIFIER].shims = []; -var namespace = w5[NAMESPACE_IDENTIFIER]; -var functions = []; -var listener = function listener2() { - DOCUMENT.removeEventListener("DOMContentLoaded", listener2); - loaded = 1; - functions.map(function(fn2) { - return fn2(); - }); -}; -var loaded = false; -if (IS_DOM) { - loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState); - if (!loaded) - DOCUMENT.addEventListener("DOMContentLoaded", listener); -} -function domready(fn2) { - if (!IS_DOM) - return; - loaded ? setTimeout(fn2, 0) : functions.push(fn2); -} -function toHtml(abstractNodes) { - var tag = abstractNodes.tag, _abstractNodes$attrib = abstractNodes.attributes, attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib, _abstractNodes$childr = abstractNodes.children, children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr; - if (typeof abstractNodes === "string") { - return htmlEscape(abstractNodes); - } else { - return "<".concat(tag, " ").concat(joinAttributes(attributes), ">").concat(children.map(toHtml).join(""), ""); - } -} -function iconFromMapping(mapping, prefix2, iconName) { - if (mapping && mapping[prefix2] && mapping[prefix2][iconName]) { - return { - prefix: prefix2, - iconName, - icon: mapping[prefix2][iconName] - }; - } -} -var bindInternal4 = function bindInternal42(func, thisContext) { - return function(a3, b3, c3, d4) { - return func.call(thisContext, a3, b3, c3, d4); - }; -}; -var reduce = function fastReduceObject(subject, fn2, initialValue, thisContext) { - var keys = Object.keys(subject), length2 = keys.length, iterator = thisContext !== void 0 ? bindInternal4(fn2, thisContext) : fn2, i4, key, result; - if (initialValue === void 0) { - i4 = 1; - result = subject[keys[0]]; - } else { - i4 = 0; - result = initialValue; - } - for (; i4 < length2; i4++) { - key = keys[i4]; - result = iterator(result, subject[key], key, subject); - } - return result; -}; -function ucs2decode(string2) { - var output = []; - var counter2 = 0; - var length2 = string2.length; - while (counter2 < length2) { - var value = string2.charCodeAt(counter2++); - if (value >= 55296 && value <= 56319 && counter2 < length2) { - var extra = string2.charCodeAt(counter2++); - if ((extra & 64512) == 56320) { - output.push(((value & 1023) << 10) + (extra & 1023) + 65536); - } else { - output.push(value); - counter2--; - } - } else { - output.push(value); - } - } - return output; -} -function toHex(unicode) { - var decoded = ucs2decode(unicode); - return decoded.length === 1 ? decoded[0].toString(16) : null; -} -function codePointAt(string2, index2) { - var size2 = string2.length; - var first = string2.charCodeAt(index2); - var second; - if (first >= 55296 && first <= 56319 && size2 > index2 + 1) { - second = string2.charCodeAt(index2 + 1); - if (second >= 56320 && second <= 57343) { - return (first - 55296) * 1024 + second - 56320 + 65536; - } - } - return first; -} -function normalizeIcons(icons) { - return Object.keys(icons).reduce(function(acc, iconName) { - var icon3 = icons[iconName]; - var expanded = !!icon3.icon; - if (expanded) { - acc[icon3.iconName] = icon3.icon; - } else { - acc[iconName] = icon3; - } - return acc; - }, {}); -} -function defineIcons(prefix2, icons) { - var params = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; - var _params$skipHooks = params.skipHooks, skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks; - var normalized = normalizeIcons(icons); - if (typeof namespace.hooks.addPack === "function" && !skipHooks) { - namespace.hooks.addPack(prefix2, normalizeIcons(icons)); - } else { - namespace.styles[prefix2] = _objectSpread22(_objectSpread22({}, namespace.styles[prefix2] || {}), normalized); - } - if (prefix2 === "fas") { - defineIcons("fa", icons); - } -} -var _LONG_STYLE; -var _PREFIXES; -var _PREFIXES_FOR_FAMILY; -var styles = namespace.styles; -var shims = namespace.shims; -var LONG_STYLE = (_LONG_STYLE = {}, _defineProperty2(_LONG_STYLE, FAMILY_CLASSIC, Object.values(PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC])), _defineProperty2(_LONG_STYLE, FAMILY_SHARP, Object.values(PREFIX_TO_LONG_STYLE[FAMILY_SHARP])), _LONG_STYLE); -var _defaultUsablePrefix = null; -var _byUnicode = {}; -var _byLigature = {}; -var _byOldName = {}; -var _byOldUnicode = {}; -var _byAlias = {}; -var PREFIXES = (_PREFIXES = {}, _defineProperty2(_PREFIXES, FAMILY_CLASSIC, Object.keys(PREFIX_TO_STYLE[FAMILY_CLASSIC])), _defineProperty2(_PREFIXES, FAMILY_SHARP, Object.keys(PREFIX_TO_STYLE[FAMILY_SHARP])), _PREFIXES); -function isReserved(name) { - return ~RESERVED_CLASSES.indexOf(name); -} -function getIconName(cssPrefix, cls) { - var parts = cls.split("-"); - var prefix2 = parts[0]; - var iconName = parts.slice(1).join("-"); - if (prefix2 === cssPrefix && iconName !== "" && !isReserved(iconName)) { - return iconName; - } else { - return null; - } -} -var build = function build2() { - var lookup = function lookup2(reducer) { - return reduce(styles, function(o3, style, prefix2) { - o3[prefix2] = reduce(style, reducer, {}); - return o3; - }, {}); - }; - _byUnicode = lookup(function(acc, icon3, iconName) { - if (icon3[3]) { - acc[icon3[3]] = iconName; - } - if (icon3[2]) { - var aliases = icon3[2].filter(function(a3) { - return typeof a3 === "number"; - }); - aliases.forEach(function(alias) { - acc[alias.toString(16)] = iconName; - }); - } - return acc; - }); - _byLigature = lookup(function(acc, icon3, iconName) { - acc[iconName] = iconName; - if (icon3[2]) { - var aliases = icon3[2].filter(function(a3) { - return typeof a3 === "string"; - }); - aliases.forEach(function(alias) { - acc[alias] = iconName; - }); - } - return acc; - }); - _byAlias = lookup(function(acc, icon3, iconName) { - var aliases = icon3[2]; - acc[iconName] = iconName; - aliases.forEach(function(alias) { - acc[alias] = iconName; - }); - return acc; - }); - var hasRegular = "far" in styles || config.autoFetchSvg; - var shimLookups = reduce(shims, function(acc, shim) { - var maybeNameMaybeUnicode = shim[0]; - var prefix2 = shim[1]; - var iconName = shim[2]; - if (prefix2 === "far" && !hasRegular) { - prefix2 = "fas"; - } - if (typeof maybeNameMaybeUnicode === "string") { - acc.names[maybeNameMaybeUnicode] = { - prefix: prefix2, - iconName - }; - } - if (typeof maybeNameMaybeUnicode === "number") { - acc.unicodes[maybeNameMaybeUnicode.toString(16)] = { - prefix: prefix2, - iconName - }; - } - return acc; - }, { - names: {}, - unicodes: {} - }); - _byOldName = shimLookups.names; - _byOldUnicode = shimLookups.unicodes; - _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, { - family: config.familyDefault - }); -}; -onChange2(function(c3) { - _defaultUsablePrefix = getCanonicalPrefix(c3.styleDefault, { - family: config.familyDefault - }); -}); -build(); -function byUnicode(prefix2, unicode) { - return (_byUnicode[prefix2] || {})[unicode]; -} -function byLigature(prefix2, ligature) { - return (_byLigature[prefix2] || {})[ligature]; -} -function byAlias(prefix2, alias) { - return (_byAlias[prefix2] || {})[alias]; -} -function byOldName(name) { - return _byOldName[name] || { - prefix: null, - iconName: null - }; -} -function byOldUnicode(unicode) { - var oldUnicode = _byOldUnicode[unicode]; - var newUnicode = byUnicode("fas", unicode); - return oldUnicode || (newUnicode ? { - prefix: "fas", - iconName: newUnicode - } : null) || { - prefix: null, - iconName: null - }; -} -function getDefaultUsablePrefix() { - return _defaultUsablePrefix; -} -var emptyCanonicalIcon = function emptyCanonicalIcon2() { - return { - prefix: null, - iconName: null, - rest: [] - }; -}; -function getCanonicalPrefix(styleOrPrefix) { - var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var _params$family = params.family, family = _params$family === void 0 ? FAMILY_CLASSIC : _params$family; - var style = PREFIX_TO_STYLE[family][styleOrPrefix]; - var prefix2 = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style]; - var defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null; - return prefix2 || defined || null; -} -var PREFIXES_FOR_FAMILY = (_PREFIXES_FOR_FAMILY = {}, _defineProperty2(_PREFIXES_FOR_FAMILY, FAMILY_CLASSIC, Object.keys(PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC])), _defineProperty2(_PREFIXES_FOR_FAMILY, FAMILY_SHARP, Object.keys(PREFIX_TO_LONG_STYLE[FAMILY_SHARP])), _PREFIXES_FOR_FAMILY); -function getCanonicalIcon(values) { - var _famProps; - var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var _params$skipLookups = params.skipLookups, skipLookups = _params$skipLookups === void 0 ? false : _params$skipLookups; - var famProps = (_famProps = {}, _defineProperty2(_famProps, FAMILY_CLASSIC, "".concat(config.cssPrefix, "-").concat(FAMILY_CLASSIC)), _defineProperty2(_famProps, FAMILY_SHARP, "".concat(config.cssPrefix, "-").concat(FAMILY_SHARP)), _famProps); - var givenPrefix = null; - var family = FAMILY_CLASSIC; - if (values.includes(famProps[FAMILY_CLASSIC]) || values.some(function(v3) { - return PREFIXES_FOR_FAMILY[FAMILY_CLASSIC].includes(v3); - })) { - family = FAMILY_CLASSIC; - } - if (values.includes(famProps[FAMILY_SHARP]) || values.some(function(v3) { - return PREFIXES_FOR_FAMILY[FAMILY_SHARP].includes(v3); - })) { - family = FAMILY_SHARP; - } - var canonical = values.reduce(function(acc, cls) { - var iconName = getIconName(config.cssPrefix, cls); - if (styles[cls]) { - cls = LONG_STYLE[family].includes(cls) ? LONG_STYLE_TO_PREFIX[family][cls] : cls; - givenPrefix = cls; - acc.prefix = cls; - } else if (PREFIXES[family].indexOf(cls) > -1) { - givenPrefix = cls; - acc.prefix = getCanonicalPrefix(cls, { - family - }); - } else if (iconName) { - acc.iconName = iconName; - } else if (cls !== config.replacementClass && cls !== famProps[FAMILY_CLASSIC] && cls !== famProps[FAMILY_SHARP]) { - acc.rest.push(cls); - } - if (!skipLookups && acc.prefix && acc.iconName) { - var shim = givenPrefix === "fa" ? byOldName(acc.iconName) : {}; - var aliasIconName = byAlias(acc.prefix, acc.iconName); - if (shim.prefix) { - givenPrefix = null; - } - acc.iconName = shim.iconName || aliasIconName || acc.iconName; - acc.prefix = shim.prefix || acc.prefix; - if (acc.prefix === "far" && !styles["far"] && styles["fas"] && !config.autoFetchSvg) { - acc.prefix = "fas"; - } - } - return acc; - }, emptyCanonicalIcon()); - if (values.includes("fa-brands") || values.includes("fab")) { - canonical.prefix = "fab"; - } - if (values.includes("fa-duotone") || values.includes("fad")) { - canonical.prefix = "fad"; - } - if (!canonical.prefix && family === FAMILY_SHARP && (styles["fass"] || config.autoFetchSvg)) { - canonical.prefix = "fass"; - canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName; - } - if (canonical.prefix === "fa" || givenPrefix === "fa") { - canonical.prefix = getDefaultUsablePrefix() || "fas"; - } - return canonical; -} -var Library = /* @__PURE__ */ function() { - function Library2() { - _classCallCheck2(this, Library2); - this.definitions = {}; - } - _createClass2(Library2, [{ - key: "add", - value: function add() { - var _this = this; - for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) { - definitions[_key] = arguments[_key]; - } - var additions = definitions.reduce(this._pullDefinitions, {}); - Object.keys(additions).forEach(function(key) { - _this.definitions[key] = _objectSpread22(_objectSpread22({}, _this.definitions[key] || {}), additions[key]); - defineIcons(key, additions[key]); - var longPrefix = PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC][key]; - if (longPrefix) - defineIcons(longPrefix, additions[key]); - build(); - }); - } - }, { - key: "reset", - value: function reset() { - this.definitions = {}; - } - }, { - key: "_pullDefinitions", - value: function _pullDefinitions(additions, definition) { - var normalized = definition.prefix && definition.iconName && definition.icon ? { - 0: definition - } : definition; - Object.keys(normalized).map(function(key) { - var _normalized$key = normalized[key], prefix2 = _normalized$key.prefix, iconName = _normalized$key.iconName, icon3 = _normalized$key.icon; - var aliases = icon3[2]; - if (!additions[prefix2]) - additions[prefix2] = {}; - if (aliases.length > 0) { - aliases.forEach(function(alias) { - if (typeof alias === "string") { - additions[prefix2][alias] = icon3; - } - }); - } - additions[prefix2][iconName] = icon3; - }); - return additions; - } - }]); - return Library2; -}(); -var _plugins = []; -var _hooks = {}; -var providers = {}; -var defaultProviderKeys = Object.keys(providers); -function registerPlugins(nextPlugins, _ref4) { - var obj = _ref4.mixoutsTo; - _plugins = nextPlugins; - _hooks = {}; - Object.keys(providers).forEach(function(k4) { - if (defaultProviderKeys.indexOf(k4) === -1) { - delete providers[k4]; - } - }); - _plugins.forEach(function(plugin) { - var mixout8 = plugin.mixout ? plugin.mixout() : {}; - Object.keys(mixout8).forEach(function(tk) { - if (typeof mixout8[tk] === "function") { - obj[tk] = mixout8[tk]; - } - if (_typeof2(mixout8[tk]) === "object") { - Object.keys(mixout8[tk]).forEach(function(sk) { - if (!obj[tk]) { - obj[tk] = {}; - } - obj[tk][sk] = mixout8[tk][sk]; - }); - } - }); - if (plugin.hooks) { - var hooks8 = plugin.hooks(); - Object.keys(hooks8).forEach(function(hook) { - if (!_hooks[hook]) { - _hooks[hook] = []; - } - _hooks[hook].push(hooks8[hook]); - }); - } - if (plugin.provides) { - plugin.provides(providers); - } - }); - return obj; -} -function chainHooks(hook, accumulator) { - for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } - var hookFns = _hooks[hook] || []; - hookFns.forEach(function(hookFn) { - accumulator = hookFn.apply(null, [accumulator].concat(args)); - }); - return accumulator; -} -function callHooks(hook) { - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - args[_key2 - 1] = arguments[_key2]; - } - var hookFns = _hooks[hook] || []; - hookFns.forEach(function(hookFn) { - hookFn.apply(null, args); - }); - return void 0; -} -function callProvided() { - var hook = arguments[0]; - var args = Array.prototype.slice.call(arguments, 1); - return providers[hook] ? providers[hook].apply(null, args) : void 0; -} -function findIconDefinition(iconLookup) { - if (iconLookup.prefix === "fa") { - iconLookup.prefix = "fas"; - } - var iconName = iconLookup.iconName; - var prefix2 = iconLookup.prefix || getDefaultUsablePrefix(); - if (!iconName) - return; - iconName = byAlias(prefix2, iconName) || iconName; - return iconFromMapping(library.definitions, prefix2, iconName) || iconFromMapping(namespace.styles, prefix2, iconName); -} -var library = new Library(); -var noAuto = function noAuto2() { - config.autoReplaceSvg = false; - config.observeMutations = false; - callHooks("noAuto"); -}; -var dom = { - i2svg: function i2svg() { - var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; - if (IS_DOM) { - callHooks("beforeI2svg", params); - callProvided("pseudoElements2svg", params); - return callProvided("i2svg", params); - } else { - return Promise.reject("Operation requires a DOM of some kind."); - } - }, - watch: function watch() { - var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; - var autoReplaceSvgRoot = params.autoReplaceSvgRoot; - if (config.autoReplaceSvg === false) { - config.autoReplaceSvg = true; - } - config.observeMutations = true; - domready(function() { - autoReplace({ - autoReplaceSvgRoot - }); - callHooks("watch", params); - }); - } -}; -var parse4 = { - icon: function icon(_icon) { - if (_icon === null) { - return null; - } - if (_typeof2(_icon) === "object" && _icon.prefix && _icon.iconName) { - return { - prefix: _icon.prefix, - iconName: byAlias(_icon.prefix, _icon.iconName) || _icon.iconName - }; - } - if (Array.isArray(_icon) && _icon.length === 2) { - var iconName = _icon[1].indexOf("fa-") === 0 ? _icon[1].slice(3) : _icon[1]; - var prefix2 = getCanonicalPrefix(_icon[0]); - return { - prefix: prefix2, - iconName: byAlias(prefix2, iconName) || iconName - }; - } - if (typeof _icon === "string" && (_icon.indexOf("".concat(config.cssPrefix, "-")) > -1 || _icon.match(ICON_SELECTION_SYNTAX_PATTERN))) { - var canonicalIcon = getCanonicalIcon(_icon.split(" "), { - skipLookups: true - }); - return { - prefix: canonicalIcon.prefix || getDefaultUsablePrefix(), - iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName - }; - } - if (typeof _icon === "string") { - var _prefix = getDefaultUsablePrefix(); - return { - prefix: _prefix, - iconName: byAlias(_prefix, _icon) || _icon - }; - } - } -}; -var api = { - noAuto, - config, - dom, - parse: parse4, - library, - findIconDefinition, - toHtml -}; -var autoReplace = function autoReplace2() { - var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; - var _params$autoReplaceSv = params.autoReplaceSvgRoot, autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv; - if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) - api.dom.i2svg({ - node: autoReplaceSvgRoot - }); -}; -function domVariants(val, abstractCreator) { - Object.defineProperty(val, "abstract", { - get: abstractCreator - }); - Object.defineProperty(val, "html", { - get: function get2() { - return val.abstract.map(function(a3) { - return toHtml(a3); - }); - } - }); - Object.defineProperty(val, "node", { - get: function get2() { - if (!IS_DOM) - return; - var container = DOCUMENT.createElement("div"); - container.innerHTML = val.html; - return container.children; - } - }); - return val; -} -function asIcon(_ref4) { - var children = _ref4.children, main = _ref4.main, mask = _ref4.mask, attributes = _ref4.attributes, styles2 = _ref4.styles, transform2 = _ref4.transform; - if (transformIsMeaningful(transform2) && main.found && !mask.found) { - var width = main.width, height = main.height; - var offset3 = { - x: width / height / 2, - y: 0.5 - }; - attributes["style"] = joinStyles(_objectSpread22(_objectSpread22({}, styles2), {}, { - "transform-origin": "".concat(offset3.x + transform2.x / 16, "em ").concat(offset3.y + transform2.y / 16, "em") - })); - } - return [{ - tag: "svg", - attributes, - children - }]; -} -function asSymbol(_ref4) { - var prefix2 = _ref4.prefix, iconName = _ref4.iconName, children = _ref4.children, attributes = _ref4.attributes, symbol = _ref4.symbol; - var id = symbol === true ? "".concat(prefix2, "-").concat(config.cssPrefix, "-").concat(iconName) : symbol; - return [{ - tag: "svg", - attributes: { - style: "display: none;" - }, - children: [{ - tag: "symbol", - attributes: _objectSpread22(_objectSpread22({}, attributes), {}, { - id - }), - children - }] - }]; -} -function makeInlineSvgAbstract(params) { - var _params$icons = params.icons, main = _params$icons.main, mask = _params$icons.mask, prefix2 = params.prefix, iconName = params.iconName, transform2 = params.transform, symbol = params.symbol, title = params.title, maskId = params.maskId, titleId = params.titleId, extra = params.extra, _params$watchable = params.watchable, watchable = _params$watchable === void 0 ? false : _params$watchable; - var _ref4 = mask.found ? mask : main, width = _ref4.width, height = _ref4.height; - var isUploadedIcon = prefix2 === "fak"; - var attrClass = [config.replacementClass, iconName ? "".concat(config.cssPrefix, "-").concat(iconName) : ""].filter(function(c3) { - return extra.classes.indexOf(c3) === -1; - }).filter(function(c3) { - return c3 !== "" || !!c3; - }).concat(extra.classes).join(" "); - var content = { - children: [], - attributes: _objectSpread22(_objectSpread22({}, extra.attributes), {}, { - "data-prefix": prefix2, - "data-icon": iconName, - "class": attrClass, - "role": extra.attributes.role || "img", - "xmlns": "http://www.w3.org/2000/svg", - "viewBox": "0 0 ".concat(width, " ").concat(height) - }) - }; - var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf("fa-fw") ? { - width: "".concat(width / height * 16 * 0.0625, "em") - } : {}; - if (watchable) { - content.attributes[DATA_FA_I2SVG] = ""; - } - if (title) { - content.children.push({ - tag: "title", - attributes: { - id: content.attributes["aria-labelledby"] || "title-".concat(titleId || nextUniqueId()) - }, - children: [title] - }); - delete content.attributes.title; - } - var args = _objectSpread22(_objectSpread22({}, content), {}, { - prefix: prefix2, - iconName, - main, - mask, - maskId, - transform: transform2, - symbol, - styles: _objectSpread22(_objectSpread22({}, uploadedIconWidthStyle), extra.styles) - }); - var _ref23 = mask.found && main.found ? callProvided("generateAbstractMask", args) || { - children: [], - attributes: {} - } : callProvided("generateAbstractIcon", args) || { - children: [], - attributes: {} - }, children = _ref23.children, attributes = _ref23.attributes; - args.children = children; - args.attributes = attributes; - if (symbol) { - return asSymbol(args); - } else { - return asIcon(args); - } -} -function makeLayersTextAbstract(params) { - var content = params.content, width = params.width, height = params.height, transform2 = params.transform, title = params.title, extra = params.extra, _params$watchable2 = params.watchable, watchable = _params$watchable2 === void 0 ? false : _params$watchable2; - var attributes = _objectSpread22(_objectSpread22(_objectSpread22({}, extra.attributes), title ? { - "title": title - } : {}), {}, { - "class": extra.classes.join(" ") - }); - if (watchable) { - attributes[DATA_FA_I2SVG] = ""; - } - var styles2 = _objectSpread22({}, extra.styles); - if (transformIsMeaningful(transform2)) { - styles2["transform"] = transformForCss({ - transform: transform2, - startCentered: true, - width, - height - }); - styles2["-webkit-transform"] = styles2["transform"]; - } - var styleString = joinStyles(styles2); - if (styleString.length > 0) { - attributes["style"] = styleString; - } - var val = []; - val.push({ - tag: "span", - attributes, - children: [content] - }); - if (title) { - val.push({ - tag: "span", - attributes: { - class: "sr-only" - }, - children: [title] - }); - } - return val; -} -function makeLayersCounterAbstract(params) { - var content = params.content, title = params.title, extra = params.extra; - var attributes = _objectSpread22(_objectSpread22(_objectSpread22({}, extra.attributes), title ? { - "title": title - } : {}), {}, { - "class": extra.classes.join(" ") - }); - var styleString = joinStyles(extra.styles); - if (styleString.length > 0) { - attributes["style"] = styleString; - } - var val = []; - val.push({ - tag: "span", - attributes, - children: [content] - }); - if (title) { - val.push({ - tag: "span", - attributes: { - class: "sr-only" - }, - children: [title] - }); - } - return val; -} -var styles$1 = namespace.styles; -function asFoundIcon(icon3) { - var width = icon3[0]; - var height = icon3[1]; - var _icon$slice = icon3.slice(4), _icon$slice2 = _slicedToArray2(_icon$slice, 1), vectorData = _icon$slice2[0]; - var element = null; - if (Array.isArray(vectorData)) { - element = { - tag: "g", - attributes: { - class: "".concat(config.cssPrefix, "-").concat(DUOTONE_CLASSES.GROUP) - }, - children: [{ - tag: "path", - attributes: { - class: "".concat(config.cssPrefix, "-").concat(DUOTONE_CLASSES.SECONDARY), - fill: "currentColor", - d: vectorData[0] - } - }, { - tag: "path", - attributes: { - class: "".concat(config.cssPrefix, "-").concat(DUOTONE_CLASSES.PRIMARY), - fill: "currentColor", - d: vectorData[1] - } - }] - }; - } else { - element = { - tag: "path", - attributes: { - fill: "currentColor", - d: vectorData - } - }; - } - return { - found: true, - width, - height, - icon: element - }; -} -var missingIconResolutionMixin = { - found: false, - width: 512, - height: 512 -}; -function maybeNotifyMissing(iconName, prefix2) { - if (!PRODUCTION && !config.showMissingIcons && iconName) { - console.error('Icon with name "'.concat(iconName, '" and prefix "').concat(prefix2, '" is missing.')); - } -} -function findIcon(iconName, prefix2) { - var givenPrefix = prefix2; - if (prefix2 === "fa" && config.styleDefault !== null) { - prefix2 = getDefaultUsablePrefix(); - } - return new Promise(function(resolve, reject) { - var val = { - found: false, - width: 512, - height: 512, - icon: callProvided("missingIconAbstract") || {} - }; - if (givenPrefix === "fa") { - var shim = byOldName(iconName) || {}; - iconName = shim.iconName || iconName; - prefix2 = shim.prefix || prefix2; - } - if (iconName && prefix2 && styles$1[prefix2] && styles$1[prefix2][iconName]) { - var icon3 = styles$1[prefix2][iconName]; - return resolve(asFoundIcon(icon3)); - } - maybeNotifyMissing(iconName, prefix2); - resolve(_objectSpread22(_objectSpread22({}, missingIconResolutionMixin), {}, { - icon: config.showMissingIcons && iconName ? callProvided("missingIconAbstract") || {} : {} - })); - }); -} -var noop$1 = function noop5() { -}; -var p3 = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : { - mark: noop$1, - measure: noop$1 -}; -var preamble = 'FA "6.5.2"'; -var begin = function begin2(name) { - p3.mark("".concat(preamble, " ").concat(name, " begins")); - return function() { - return end(name); - }; -}; -var end = function end2(name) { - p3.mark("".concat(preamble, " ").concat(name, " ends")); - p3.measure("".concat(preamble, " ").concat(name), "".concat(preamble, " ").concat(name, " begins"), "".concat(preamble, " ").concat(name, " ends")); -}; -var perf = { - begin, - end -}; -var noop$2 = function noop6() { -}; -function isWatched(node2) { - var i2svg2 = node2.getAttribute ? node2.getAttribute(DATA_FA_I2SVG) : null; - return typeof i2svg2 === "string"; -} -function hasPrefixAndIcon(node2) { - var prefix2 = node2.getAttribute ? node2.getAttribute(DATA_PREFIX) : null; - var icon3 = node2.getAttribute ? node2.getAttribute(DATA_ICON) : null; - return prefix2 && icon3; -} -function hasBeenReplaced(node2) { - return node2 && node2.classList && node2.classList.contains && node2.classList.contains(config.replacementClass); -} -function getMutator() { - if (config.autoReplaceSvg === true) { - return mutators.replace; - } - var mutator = mutators[config.autoReplaceSvg]; - return mutator || mutators.replace; -} -function createElementNS(tag) { - return DOCUMENT.createElementNS("http://www.w3.org/2000/svg", tag); -} -function createElement(tag) { - return DOCUMENT.createElement(tag); -} -function convertSVG(abstractObj) { - var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var _params$ceFn = params.ceFn, ceFn = _params$ceFn === void 0 ? abstractObj.tag === "svg" ? createElementNS : createElement : _params$ceFn; - if (typeof abstractObj === "string") { - return DOCUMENT.createTextNode(abstractObj); - } - var tag = ceFn(abstractObj.tag); - Object.keys(abstractObj.attributes || []).forEach(function(key) { - tag.setAttribute(key, abstractObj.attributes[key]); - }); - var children = abstractObj.children || []; - children.forEach(function(child) { - tag.appendChild(convertSVG(child, { - ceFn - })); - }); - return tag; -} -function nodeAsComment(node2) { - var comment2 = " ".concat(node2.outerHTML, " "); - comment2 = "".concat(comment2, "Font Awesome fontawesome.com "); - return comment2; -} -var mutators = { - replace: function replace2(mutation) { - var node2 = mutation[0]; - if (node2.parentNode) { - mutation[1].forEach(function(_abstract) { - node2.parentNode.insertBefore(convertSVG(_abstract), node2); - }); - if (node2.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) { - var comment2 = DOCUMENT.createComment(nodeAsComment(node2)); - node2.parentNode.replaceChild(comment2, node2); - } else { - node2.remove(); - } - } - }, - nest: function nest(mutation) { - var node2 = mutation[0]; - var _abstract2 = mutation[1]; - if (~classArray(node2).indexOf(config.replacementClass)) { - return mutators.replace(mutation); - } - var forSvg = new RegExp("".concat(config.cssPrefix, "-.*")); - delete _abstract2[0].attributes.id; - if (_abstract2[0].attributes.class) { - var splitClasses = _abstract2[0].attributes.class.split(" ").reduce(function(acc, cls) { - if (cls === config.replacementClass || cls.match(forSvg)) { - acc.toSvg.push(cls); - } else { - acc.toNode.push(cls); - } - return acc; - }, { - toNode: [], - toSvg: [] - }); - _abstract2[0].attributes.class = splitClasses.toSvg.join(" "); - if (splitClasses.toNode.length === 0) { - node2.removeAttribute("class"); - } else { - node2.setAttribute("class", splitClasses.toNode.join(" ")); - } - } - var newInnerHTML = _abstract2.map(function(a3) { - return toHtml(a3); - }).join("\n"); - node2.setAttribute(DATA_FA_I2SVG, ""); - node2.innerHTML = newInnerHTML; - } -}; -function performOperationSync(op) { - op(); -} -function perform(mutations, callback) { - var callbackFunction = typeof callback === "function" ? callback : noop$2; - if (mutations.length === 0) { - callbackFunction(); - } else { - var frame = performOperationSync; - if (config.mutateApproach === MUTATION_APPROACH_ASYNC) { - frame = WINDOW.requestAnimationFrame || performOperationSync; - } - frame(function() { - var mutator = getMutator(); - var mark = perf.begin("mutate"); - mutations.map(mutator); - mark(); - callbackFunction(); - }); - } -} -var disabled = false; -function disableObservation() { - disabled = true; -} -function enableObservation() { - disabled = false; -} -var mo = null; -function observe(options2) { - if (!MUTATION_OBSERVER) { - return; - } - if (!config.observeMutations) { - return; - } - var _options$treeCallback = options2.treeCallback, treeCallback = _options$treeCallback === void 0 ? noop$2 : _options$treeCallback, _options$nodeCallback = options2.nodeCallback, nodeCallback = _options$nodeCallback === void 0 ? noop$2 : _options$nodeCallback, _options$pseudoElemen = options2.pseudoElementsCallback, pseudoElementsCallback = _options$pseudoElemen === void 0 ? noop$2 : _options$pseudoElemen, _options$observeMutat = options2.observeMutationsRoot, observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat; - mo = new MUTATION_OBSERVER(function(objects) { - if (disabled) - return; - var defaultPrefix = getDefaultUsablePrefix(); - toArray(objects).forEach(function(mutationRecord) { - if (mutationRecord.type === "childList" && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) { - if (config.searchPseudoElements) { - pseudoElementsCallback(mutationRecord.target); - } - treeCallback(mutationRecord.target); - } - if (mutationRecord.type === "attributes" && mutationRecord.target.parentNode && config.searchPseudoElements) { - pseudoElementsCallback(mutationRecord.target.parentNode); - } - if (mutationRecord.type === "attributes" && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) { - if (mutationRecord.attributeName === "class" && hasPrefixAndIcon(mutationRecord.target)) { - var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)), prefix2 = _getCanonicalIcon.prefix, iconName = _getCanonicalIcon.iconName; - mutationRecord.target.setAttribute(DATA_PREFIX, prefix2 || defaultPrefix); - if (iconName) - mutationRecord.target.setAttribute(DATA_ICON, iconName); - } else if (hasBeenReplaced(mutationRecord.target)) { - nodeCallback(mutationRecord.target); - } - } - }); - }); - if (!IS_DOM) - return; - mo.observe(observeMutationsRoot, { - childList: true, - attributes: true, - characterData: true, - subtree: true - }); -} -function disconnect() { - if (!mo) - return; - mo.disconnect(); -} -function styleParser(node2) { - var style = node2.getAttribute("style"); - var val = []; - if (style) { - val = style.split(";").reduce(function(acc, style2) { - var styles2 = style2.split(":"); - var prop = styles2[0]; - var value = styles2.slice(1); - if (prop && value.length > 0) { - acc[prop] = value.join(":").trim(); - } - return acc; - }, {}); - } - return val; -} -function classParser(node2) { - var existingPrefix = node2.getAttribute("data-prefix"); - var existingIconName = node2.getAttribute("data-icon"); - var innerText = node2.innerText !== void 0 ? node2.innerText.trim() : ""; - var val = getCanonicalIcon(classArray(node2)); - if (!val.prefix) { - val.prefix = getDefaultUsablePrefix(); - } - if (existingPrefix && existingIconName) { - val.prefix = existingPrefix; - val.iconName = existingIconName; - } - if (val.iconName && val.prefix) { - return val; - } - if (val.prefix && innerText.length > 0) { - val.iconName = byLigature(val.prefix, node2.innerText) || byUnicode(val.prefix, toHex(node2.innerText)); - } - if (!val.iconName && config.autoFetchSvg && node2.firstChild && node2.firstChild.nodeType === Node.TEXT_NODE) { - val.iconName = node2.firstChild.data; - } - return val; -} -function attributesParser(node2) { - var extraAttributes = toArray(node2.attributes).reduce(function(acc, attr) { - if (acc.name !== "class" && acc.name !== "style") { - acc[attr.name] = attr.value; - } - return acc; - }, {}); - var title = node2.getAttribute("title"); - var titleId = node2.getAttribute("data-fa-title-id"); - if (config.autoA11y) { - if (title) { - extraAttributes["aria-labelledby"] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId()); - } else { - extraAttributes["aria-hidden"] = "true"; - extraAttributes["focusable"] = "false"; - } - } - return extraAttributes; -} -function blankMeta() { - return { - iconName: null, - title: null, - titleId: null, - prefix: null, - transform: meaninglessTransform, - symbol: false, - mask: { - iconName: null, - prefix: null, - rest: [] - }, - maskId: null, - extra: { - classes: [], - styles: {}, - attributes: {} - } - }; -} -function parseMeta(node2) { - var parser = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : { - styleParser: true - }; - var _classParser = classParser(node2), iconName = _classParser.iconName, prefix2 = _classParser.prefix, extraClasses = _classParser.rest; - var extraAttributes = attributesParser(node2); - var pluginMeta = chainHooks("parseNodeAttributes", {}, node2); - var extraStyles = parser.styleParser ? styleParser(node2) : []; - return _objectSpread22({ - iconName, - title: node2.getAttribute("title"), - titleId: node2.getAttribute("data-fa-title-id"), - prefix: prefix2, - transform: meaninglessTransform, - mask: { - iconName: null, - prefix: null, - rest: [] - }, - maskId: null, - symbol: false, - extra: { - classes: extraClasses, - styles: extraStyles, - attributes: extraAttributes - } - }, pluginMeta); -} -var styles$2 = namespace.styles; -function generateMutation(node2) { - var nodeMeta = config.autoReplaceSvg === "nest" ? parseMeta(node2, { - styleParser: false - }) : parseMeta(node2); - if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) { - return callProvided("generateLayersText", node2, nodeMeta); - } else { - return callProvided("generateSvgReplacementMutation", node2, nodeMeta); - } -} -var knownPrefixes = /* @__PURE__ */ new Set(); -FAMILIES.map(function(family) { - knownPrefixes.add("fa-".concat(family)); -}); -Object.keys(PREFIX_TO_STYLE[FAMILY_CLASSIC]).map(knownPrefixes.add.bind(knownPrefixes)); -Object.keys(PREFIX_TO_STYLE[FAMILY_SHARP]).map(knownPrefixes.add.bind(knownPrefixes)); -knownPrefixes = _toConsumableArray2(knownPrefixes); -function onTree(root) { - var callback = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; - if (!IS_DOM) - return Promise.resolve(); - var htmlClassList = DOCUMENT.documentElement.classList; - var hclAdd = function hclAdd2(suffix) { - return htmlClassList.add("".concat(HTML_CLASS_I2SVG_BASE_CLASS, "-").concat(suffix)); - }; - var hclRemove = function hclRemove2(suffix) { - return htmlClassList.remove("".concat(HTML_CLASS_I2SVG_BASE_CLASS, "-").concat(suffix)); - }; - var prefixes2 = config.autoFetchSvg ? knownPrefixes : FAMILIES.map(function(f4) { - return "fa-".concat(f4); - }).concat(Object.keys(styles$2)); - if (!prefixes2.includes("fa")) { - prefixes2.push("fa"); - } - var prefixesDomQuery = [".".concat(LAYERS_TEXT_CLASSNAME, ":not([").concat(DATA_FA_I2SVG, "])")].concat(prefixes2.map(function(p4) { - return ".".concat(p4, ":not([").concat(DATA_FA_I2SVG, "])"); - })).join(", "); - if (prefixesDomQuery.length === 0) { - return Promise.resolve(); - } - var candidates = []; - try { - candidates = toArray(root.querySelectorAll(prefixesDomQuery)); - } catch (e3) { - } - if (candidates.length > 0) { - hclAdd("pending"); - hclRemove("complete"); - } else { - return Promise.resolve(); - } - var mark = perf.begin("onTree"); - var mutations = candidates.reduce(function(acc, node2) { - try { - var mutation = generateMutation(node2); - if (mutation) { - acc.push(mutation); - } - } catch (e3) { - if (!PRODUCTION) { - if (e3.name === "MissingIcon") { - console.error(e3); - } - } - } - return acc; - }, []); - return new Promise(function(resolve, reject) { - Promise.all(mutations).then(function(resolvedMutations) { - perform(resolvedMutations, function() { - hclAdd("active"); - hclAdd("complete"); - hclRemove("pending"); - if (typeof callback === "function") - callback(); - mark(); - resolve(); - }); - }).catch(function(e3) { - mark(); - reject(e3); - }); - }); -} -function onNode(node2) { - var callback = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; - generateMutation(node2).then(function(mutation) { - if (mutation) { - perform([mutation], callback); - } - }); -} -function resolveIcons(next3) { - return function(maybeIconDefinition) { - var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {}); - var mask = params.mask; - if (mask) { - mask = (mask || {}).icon ? mask : findIconDefinition(mask || {}); - } - return next3(iconDefinition, _objectSpread22(_objectSpread22({}, params), {}, { - mask - })); - }; -} -var render = function render2(iconDefinition) { - var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var _params$transform = params.transform, transform2 = _params$transform === void 0 ? meaninglessTransform : _params$transform, _params$symbol = params.symbol, symbol = _params$symbol === void 0 ? false : _params$symbol, _params$mask = params.mask, mask = _params$mask === void 0 ? null : _params$mask, _params$maskId = params.maskId, maskId = _params$maskId === void 0 ? null : _params$maskId, _params$title = params.title, title = _params$title === void 0 ? null : _params$title, _params$titleId = params.titleId, titleId = _params$titleId === void 0 ? null : _params$titleId, _params$classes = params.classes, classes = _params$classes === void 0 ? [] : _params$classes, _params$attributes = params.attributes, attributes = _params$attributes === void 0 ? {} : _params$attributes, _params$styles = params.styles, styles2 = _params$styles === void 0 ? {} : _params$styles; - if (!iconDefinition) - return; - var prefix2 = iconDefinition.prefix, iconName = iconDefinition.iconName, icon3 = iconDefinition.icon; - return domVariants(_objectSpread22({ - type: "icon" - }, iconDefinition), function() { - callHooks("beforeDOMElementCreation", { - iconDefinition, - params - }); - if (config.autoA11y) { - if (title) { - attributes["aria-labelledby"] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId()); - } else { - attributes["aria-hidden"] = "true"; - attributes["focusable"] = "false"; - } - } - return makeInlineSvgAbstract({ - icons: { - main: asFoundIcon(icon3), - mask: mask ? asFoundIcon(mask.icon) : { - found: false, - width: null, - height: null, - icon: {} - } - }, - prefix: prefix2, - iconName, - transform: _objectSpread22(_objectSpread22({}, meaninglessTransform), transform2), - symbol, - title, - maskId, - titleId, - extra: { - attributes, - styles: styles2, - classes - } - }); - }); -}; -var ReplaceElements = { - mixout: function mixout2() { - return { - icon: resolveIcons(render) - }; - }, - hooks: function hooks2() { - return { - mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) { - accumulator.treeCallback = onTree; - accumulator.nodeCallback = onNode; - return accumulator; - } - }; - }, - provides: function provides(providers$$1) { - providers$$1.i2svg = function(params) { - var _params$node = params.node, node2 = _params$node === void 0 ? DOCUMENT : _params$node, _params$callback = params.callback, callback = _params$callback === void 0 ? function() { - } : _params$callback; - return onTree(node2, callback); - }; - providers$$1.generateSvgReplacementMutation = function(node2, nodeMeta) { - var iconName = nodeMeta.iconName, title = nodeMeta.title, titleId = nodeMeta.titleId, prefix2 = nodeMeta.prefix, transform2 = nodeMeta.transform, symbol = nodeMeta.symbol, mask = nodeMeta.mask, maskId = nodeMeta.maskId, extra = nodeMeta.extra; - return new Promise(function(resolve, reject) { - Promise.all([findIcon(iconName, prefix2), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({ - found: false, - width: 512, - height: 512, - icon: {} - })]).then(function(_ref4) { - var _ref23 = _slicedToArray2(_ref4, 2), main = _ref23[0], mask2 = _ref23[1]; - resolve([node2, makeInlineSvgAbstract({ - icons: { - main, - mask: mask2 - }, - prefix: prefix2, - iconName, - transform: transform2, - symbol, - maskId, - title, - titleId, - extra, - watchable: true - })]); - }).catch(reject); - }); - }; - providers$$1.generateAbstractIcon = function(_ref32) { - var children = _ref32.children, attributes = _ref32.attributes, main = _ref32.main, transform2 = _ref32.transform, styles2 = _ref32.styles; - var styleString = joinStyles(styles2); - if (styleString.length > 0) { - attributes["style"] = styleString; - } - var nextChild; - if (transformIsMeaningful(transform2)) { - nextChild = callProvided("generateAbstractTransformGrouping", { - main, - transform: transform2, - containerWidth: main.width, - iconWidth: main.width - }); - } - children.push(nextChild || main.icon); - return { - children, - attributes - }; - }; - } -}; -var Layers = { - mixout: function mixout3() { - return { - layer: function layer2(assembler) { - var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var _params$classes = params.classes, classes = _params$classes === void 0 ? [] : _params$classes; - return domVariants({ - type: "layer" - }, function() { - callHooks("beforeDOMElementCreation", { - assembler, - params - }); - var children = []; - assembler(function(args) { - Array.isArray(args) ? args.map(function(a3) { - children = children.concat(a3.abstract); - }) : children = children.concat(args.abstract); - }); - return [{ - tag: "span", - attributes: { - class: ["".concat(config.cssPrefix, "-layers")].concat(_toConsumableArray2(classes)).join(" ") - }, - children - }]; - }); - } - }; - } -}; -var LayersCounter = { - mixout: function mixout4() { - return { - counter: function counter2(content) { - var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var _params$title = params.title, title = _params$title === void 0 ? null : _params$title, _params$classes = params.classes, classes = _params$classes === void 0 ? [] : _params$classes, _params$attributes = params.attributes, attributes = _params$attributes === void 0 ? {} : _params$attributes, _params$styles = params.styles, styles2 = _params$styles === void 0 ? {} : _params$styles; - return domVariants({ - type: "counter", - content - }, function() { - callHooks("beforeDOMElementCreation", { - content, - params - }); - return makeLayersCounterAbstract({ - content: content.toString(), - title, - extra: { - attributes, - styles: styles2, - classes: ["".concat(config.cssPrefix, "-layers-counter")].concat(_toConsumableArray2(classes)) - } - }); - }); - } - }; - } -}; -var LayersText = { - mixout: function mixout5() { - return { - text: function text2(content) { - var params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var _params$transform = params.transform, transform2 = _params$transform === void 0 ? meaninglessTransform : _params$transform, _params$title = params.title, title = _params$title === void 0 ? null : _params$title, _params$classes = params.classes, classes = _params$classes === void 0 ? [] : _params$classes, _params$attributes = params.attributes, attributes = _params$attributes === void 0 ? {} : _params$attributes, _params$styles = params.styles, styles2 = _params$styles === void 0 ? {} : _params$styles; - return domVariants({ - type: "text", - content - }, function() { - callHooks("beforeDOMElementCreation", { - content, - params - }); - return makeLayersTextAbstract({ - content, - transform: _objectSpread22(_objectSpread22({}, meaninglessTransform), transform2), - title, - extra: { - attributes, - styles: styles2, - classes: ["".concat(config.cssPrefix, "-layers-text")].concat(_toConsumableArray2(classes)) - } - }); - }); - } - }; - }, - provides: function provides2(providers$$1) { - providers$$1.generateLayersText = function(node2, nodeMeta) { - var title = nodeMeta.title, transform2 = nodeMeta.transform, extra = nodeMeta.extra; - var width = null; - var height = null; - if (IS_IE) { - var computedFontSize = parseInt(getComputedStyle(node2).fontSize, 10); - var boundingClientRect = node2.getBoundingClientRect(); - width = boundingClientRect.width / computedFontSize; - height = boundingClientRect.height / computedFontSize; - } - if (config.autoA11y && !title) { - extra.attributes["aria-hidden"] = "true"; - } - return Promise.resolve([node2, makeLayersTextAbstract({ - content: node2.innerHTML, - width, - height, - transform: transform2, - title, - extra, - watchable: true - })]); - }; - } -}; -var CLEAN_CONTENT_PATTERN = new RegExp('"', "ug"); -var SECONDARY_UNICODE_RANGE = [1105920, 1112319]; -function hexValueFromContent(content) { - var cleaned = content.replace(CLEAN_CONTENT_PATTERN, ""); - var codePoint = codePointAt(cleaned, 0); - var isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1]; - var isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false; - return { - value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned), - isSecondary: isPrependTen || isDoubled - }; -} -function replaceForPosition(node2, position2) { - var pendingAttribute = "".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position2.replace(":", "-")); - return new Promise(function(resolve, reject) { - if (node2.getAttribute(pendingAttribute) !== null) { - return resolve(); - } - var children = toArray(node2.children); - var alreadyProcessedPseudoElement = children.filter(function(c3) { - return c3.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position2; - })[0]; - var styles2 = WINDOW.getComputedStyle(node2, position2); - var fontFamily = styles2.getPropertyValue("font-family").match(FONT_FAMILY_PATTERN); - var fontWeight = styles2.getPropertyValue("font-weight"); - var content = styles2.getPropertyValue("content"); - if (alreadyProcessedPseudoElement && !fontFamily) { - node2.removeChild(alreadyProcessedPseudoElement); - return resolve(); - } else if (fontFamily && content !== "none" && content !== "") { - var _content = styles2.getPropertyValue("content"); - var family = ~["Sharp"].indexOf(fontFamily[2]) ? FAMILY_SHARP : FAMILY_CLASSIC; - var prefix2 = ~["Solid", "Regular", "Light", "Thin", "Duotone", "Brands", "Kit"].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[family][fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[family][fontWeight]; - var _hexValueFromContent = hexValueFromContent(_content), hexValue = _hexValueFromContent.value, isSecondary = _hexValueFromContent.isSecondary; - var isV4 = fontFamily[0].startsWith("FontAwesome"); - var iconName = byUnicode(prefix2, hexValue); - var iconIdentifier = iconName; - if (isV4) { - var iconName4 = byOldUnicode(hexValue); - if (iconName4.iconName && iconName4.prefix) { - iconName = iconName4.iconName; - prefix2 = iconName4.prefix; - } - } - if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix2 || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) { - node2.setAttribute(pendingAttribute, iconIdentifier); - if (alreadyProcessedPseudoElement) { - node2.removeChild(alreadyProcessedPseudoElement); - } - var meta = blankMeta(); - var extra = meta.extra; - extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position2; - findIcon(iconName, prefix2).then(function(main) { - var _abstract = makeInlineSvgAbstract(_objectSpread22(_objectSpread22({}, meta), {}, { - icons: { - main, - mask: emptyCanonicalIcon() - }, - prefix: prefix2, - iconName: iconIdentifier, - extra, - watchable: true - })); - var element = DOCUMENT.createElementNS("http://www.w3.org/2000/svg", "svg"); - if (position2 === "::before") { - node2.insertBefore(element, node2.firstChild); - } else { - node2.appendChild(element); - } - element.outerHTML = _abstract.map(function(a3) { - return toHtml(a3); - }).join("\n"); - node2.removeAttribute(pendingAttribute); - resolve(); - }).catch(reject); - } else { - resolve(); - } - } else { - resolve(); - } - }); -} -function replace3(node2) { - return Promise.all([replaceForPosition(node2, "::before"), replaceForPosition(node2, "::after")]); -} -function processable(node2) { - return node2.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node2.tagName.toUpperCase()) && !node2.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node2.parentNode || node2.parentNode.tagName !== "svg"); -} -function searchPseudoElements(root) { - if (!IS_DOM) - return; - return new Promise(function(resolve, reject) { - var operations = toArray(root.querySelectorAll("*")).filter(processable).map(replace3); - var end3 = perf.begin("searchPseudoElements"); - disableObservation(); - Promise.all(operations).then(function() { - end3(); - enableObservation(); - resolve(); - }).catch(function() { - end3(); - enableObservation(); - reject(); - }); - }); -} -var PseudoElements = { - hooks: function hooks3() { - return { - mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) { - accumulator.pseudoElementsCallback = searchPseudoElements; - return accumulator; - } - }; - }, - provides: function provides3(providers$$1) { - providers$$1.pseudoElements2svg = function(params) { - var _params$node = params.node, node2 = _params$node === void 0 ? DOCUMENT : _params$node; - if (config.searchPseudoElements) { - searchPseudoElements(node2); - } - }; - } -}; -var _unwatched = false; -var MutationObserver$1 = { - mixout: function mixout6() { - return { - dom: { - unwatch: function unwatch() { - disableObservation(); - _unwatched = true; - } - } - }; - }, - hooks: function hooks4() { - return { - bootstrap: function bootstrap() { - observe(chainHooks("mutationObserverCallbacks", {})); - }, - noAuto: function noAuto3() { - disconnect(); - }, - watch: function watch2(params) { - var observeMutationsRoot = params.observeMutationsRoot; - if (_unwatched) { - enableObservation(); - } else { - observe(chainHooks("mutationObserverCallbacks", { - observeMutationsRoot - })); - } - } - }; - } -}; -var parseTransformString = function parseTransformString2(transformString) { - var transform2 = { - size: 16, - x: 0, - y: 0, - flipX: false, - flipY: false, - rotate: 0 - }; - return transformString.toLowerCase().split(" ").reduce(function(acc, n3) { - var parts = n3.toLowerCase().split("-"); - var first = parts[0]; - var rest = parts.slice(1).join("-"); - if (first && rest === "h") { - acc.flipX = true; - return acc; - } - if (first && rest === "v") { - acc.flipY = true; - return acc; - } - rest = parseFloat(rest); - if (isNaN(rest)) { - return acc; - } - switch (first) { - case "grow": - acc.size = acc.size + rest; - break; - case "shrink": - acc.size = acc.size - rest; - break; - case "left": - acc.x = acc.x - rest; - break; - case "right": - acc.x = acc.x + rest; - break; - case "up": - acc.y = acc.y - rest; - break; - case "down": - acc.y = acc.y + rest; - break; - case "rotate": - acc.rotate = acc.rotate + rest; - break; - } - return acc; - }, transform2); -}; -var PowerTransforms = { - mixout: function mixout7() { - return { - parse: { - transform: function transform2(transformString) { - return parseTransformString(transformString); - } - } - }; - }, - hooks: function hooks5() { - return { - parseNodeAttributes: function parseNodeAttributes(accumulator, node2) { - var transformString = node2.getAttribute("data-fa-transform"); - if (transformString) { - accumulator.transform = parseTransformString(transformString); - } - return accumulator; - } - }; - }, - provides: function provides4(providers2) { - providers2.generateAbstractTransformGrouping = function(_ref4) { - var main = _ref4.main, transform2 = _ref4.transform, containerWidth = _ref4.containerWidth, iconWidth = _ref4.iconWidth; - var outer = { - transform: "translate(".concat(containerWidth / 2, " 256)") - }; - var innerTranslate = "translate(".concat(transform2.x * 32, ", ").concat(transform2.y * 32, ") "); - var innerScale = "scale(".concat(transform2.size / 16 * (transform2.flipX ? -1 : 1), ", ").concat(transform2.size / 16 * (transform2.flipY ? -1 : 1), ") "); - var innerRotate = "rotate(".concat(transform2.rotate, " 0 0)"); - var inner = { - transform: "".concat(innerTranslate, " ").concat(innerScale, " ").concat(innerRotate) - }; - var path = { - transform: "translate(".concat(iconWidth / 2 * -1, " -256)") - }; - var operations = { - outer, - inner, - path - }; - return { - tag: "g", - attributes: _objectSpread22({}, operations.outer), - children: [{ - tag: "g", - attributes: _objectSpread22({}, operations.inner), - children: [{ - tag: main.icon.tag, - children: main.icon.children, - attributes: _objectSpread22(_objectSpread22({}, main.icon.attributes), operations.path) - }] - }] - }; - }; - } -}; -var ALL_SPACE = { - x: 0, - y: 0, - width: "100%", - height: "100%" -}; -function fillBlack(_abstract) { - var force = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; - if (_abstract.attributes && (_abstract.attributes.fill || force)) { - _abstract.attributes.fill = "black"; - } - return _abstract; -} -function deGroup(_abstract2) { - if (_abstract2.tag === "g") { - return _abstract2.children; - } else { - return [_abstract2]; - } -} -var Masks = { - hooks: function hooks6() { - return { - parseNodeAttributes: function parseNodeAttributes(accumulator, node2) { - var maskData = node2.getAttribute("data-fa-mask"); - var mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(" ").map(function(i4) { - return i4.trim(); - })); - if (!mask.prefix) { - mask.prefix = getDefaultUsablePrefix(); - } - accumulator.mask = mask; - accumulator.maskId = node2.getAttribute("data-fa-mask-id"); - return accumulator; - } - }; - }, - provides: function provides5(providers2) { - providers2.generateAbstractMask = function(_ref4) { - var children = _ref4.children, attributes = _ref4.attributes, main = _ref4.main, mask = _ref4.mask, explicitMaskId = _ref4.maskId, transform2 = _ref4.transform; - var mainWidth = main.width, mainPath = main.icon; - var maskWidth = mask.width, maskPath = mask.icon; - var trans = transformForSvg({ - transform: transform2, - containerWidth: maskWidth, - iconWidth: mainWidth - }); - var maskRect = { - tag: "rect", - attributes: _objectSpread22(_objectSpread22({}, ALL_SPACE), {}, { - fill: "white" - }) - }; - var maskInnerGroupChildrenMixin = mainPath.children ? { - children: mainPath.children.map(fillBlack) - } : {}; - var maskInnerGroup = { - tag: "g", - attributes: _objectSpread22({}, trans.inner), - children: [fillBlack(_objectSpread22({ - tag: mainPath.tag, - attributes: _objectSpread22(_objectSpread22({}, mainPath.attributes), trans.path) - }, maskInnerGroupChildrenMixin))] - }; - var maskOuterGroup = { - tag: "g", - attributes: _objectSpread22({}, trans.outer), - children: [maskInnerGroup] - }; - var maskId = "mask-".concat(explicitMaskId || nextUniqueId()); - var clipId = "clip-".concat(explicitMaskId || nextUniqueId()); - var maskTag = { - tag: "mask", - attributes: _objectSpread22(_objectSpread22({}, ALL_SPACE), {}, { - id: maskId, - maskUnits: "userSpaceOnUse", - maskContentUnits: "userSpaceOnUse" - }), - children: [maskRect, maskOuterGroup] - }; - var defs = { - tag: "defs", - children: [{ - tag: "clipPath", - attributes: { - id: clipId - }, - children: deGroup(maskPath) - }, maskTag] - }; - children.push(defs, { - tag: "rect", - attributes: _objectSpread22({ - fill: "currentColor", - "clip-path": "url(#".concat(clipId, ")"), - mask: "url(#".concat(maskId, ")") - }, ALL_SPACE) - }); - return { - children, - attributes - }; - }; - } -}; -var MissingIconIndicator = { - provides: function provides6(providers2) { - var reduceMotion = false; - if (WINDOW.matchMedia) { - reduceMotion = WINDOW.matchMedia("(prefers-reduced-motion: reduce)").matches; - } - providers2.missingIconAbstract = function() { - var gChildren = []; - var FILL = { - fill: "currentColor" - }; - var ANIMATION_BASE = { - attributeType: "XML", - repeatCount: "indefinite", - dur: "2s" - }; - gChildren.push({ - tag: "path", - attributes: _objectSpread22(_objectSpread22({}, FILL), {}, { - d: "M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z" - }) - }); - var OPACITY_ANIMATE = _objectSpread22(_objectSpread22({}, ANIMATION_BASE), {}, { - attributeName: "opacity" - }); - var dot = { - tag: "circle", - attributes: _objectSpread22(_objectSpread22({}, FILL), {}, { - cx: "256", - cy: "364", - r: "28" - }), - children: [] - }; - if (!reduceMotion) { - dot.children.push({ - tag: "animate", - attributes: _objectSpread22(_objectSpread22({}, ANIMATION_BASE), {}, { - attributeName: "r", - values: "28;14;28;28;14;28;" - }) - }, { - tag: "animate", - attributes: _objectSpread22(_objectSpread22({}, OPACITY_ANIMATE), {}, { - values: "1;0;1;1;0;1;" - }) - }); - } - gChildren.push(dot); - gChildren.push({ - tag: "path", - attributes: _objectSpread22(_objectSpread22({}, FILL), {}, { - opacity: "1", - d: "M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z" - }), - children: reduceMotion ? [] : [{ - tag: "animate", - attributes: _objectSpread22(_objectSpread22({}, OPACITY_ANIMATE), {}, { - values: "1;0;0;0;0;1;" - }) - }] - }); - if (!reduceMotion) { - gChildren.push({ - tag: "path", - attributes: _objectSpread22(_objectSpread22({}, FILL), {}, { - opacity: "0", - d: "M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z" - }), - children: [{ - tag: "animate", - attributes: _objectSpread22(_objectSpread22({}, OPACITY_ANIMATE), {}, { - values: "0;0;1;1;0;0;" - }) - }] - }); - } - return { - tag: "g", - attributes: { - "class": "missing" - }, - children: gChildren - }; - }; - } -}; -var SvgSymbols = { - hooks: function hooks7() { - return { - parseNodeAttributes: function parseNodeAttributes(accumulator, node2) { - var symbolData = node2.getAttribute("data-fa-symbol"); - var symbol = symbolData === null ? false : symbolData === "" ? true : symbolData; - accumulator["symbol"] = symbol; - return accumulator; - } - }; - } -}; -var plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols]; -registerPlugins(plugins, { - mixoutsTo: api -}); -var noAuto$1 = api.noAuto; -var config$1 = api.config; -var library$1 = api.library; -var dom$1 = api.dom; -var parse$1 = api.parse; -var findIconDefinition$1 = api.findIconDefinition; -var toHtml$1 = api.toHtml; -var icon2 = api.icon; -var layer = api.layer; -var text = api.text; -var counter = api.counter; - -// node_modules/@fortawesome/react-fontawesome/index.es.js -var import_prop_types = __toESM(require_prop_types()); -function ownKeys3(object, enumerableOnly) { - var keys = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - enumerableOnly && (symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - })), keys.push.apply(keys, symbols); - } - return keys; -} -function _objectSpread23(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = null != arguments[i4] ? arguments[i4] : {}; - i4 % 2 ? ownKeys3(Object(source), true).forEach(function(key) { - _defineProperty3(target, key, source[key]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys3(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - return target; -} -function _typeof3(obj) { - "@babel/helpers - typeof"; - return _typeof3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) { - return typeof obj2; - } : function(obj2) { - return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }, _typeof3(obj); -} -function _defineProperty3(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - return obj; -} -function _objectWithoutPropertiesLoose2(source, excluded) { - if (source == null) - return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i4; - for (i4 = 0; i4 < sourceKeys.length; i4++) { - key = sourceKeys[i4]; - if (excluded.indexOf(key) >= 0) - continue; - target[key] = source[key]; - } - return target; -} -function _objectWithoutProperties2(source, excluded) { - if (source == null) - return {}; - var target = _objectWithoutPropertiesLoose2(source, excluded); - var key, i4; - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - for (i4 = 0; i4 < sourceSymbolKeys.length; i4++) { - key = sourceSymbolKeys[i4]; - if (excluded.indexOf(key) >= 0) - continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) - continue; - target[key] = source[key]; - } - } - return target; -} -function _toConsumableArray3(arr) { - return _arrayWithoutHoles3(arr) || _iterableToArray3(arr) || _unsupportedIterableToArray3(arr) || _nonIterableSpread3(); -} -function _arrayWithoutHoles3(arr) { - if (Array.isArray(arr)) - return _arrayLikeToArray3(arr); -} -function _iterableToArray3(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) - return Array.from(iter); -} -function _unsupportedIterableToArray3(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray3(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray3(o3, minLen); -} -function _arrayLikeToArray3(arr, len) { - if (len == null || len > arr.length) - len = arr.length; - for (var i4 = 0, arr2 = new Array(len); i4 < len; i4++) - arr2[i4] = arr[i4]; - return arr2; -} -function _nonIterableSpread3() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -function classList(props) { - var _classes; - var beat = props.beat, fade = props.fade, beatFade = props.beatFade, bounce = props.bounce, shake = props.shake, flash = props.flash, spin = props.spin, spinPulse = props.spinPulse, spinReverse = props.spinReverse, pulse = props.pulse, fixedWidth = props.fixedWidth, inverse = props.inverse, border = props.border, listItem = props.listItem, flip2 = props.flip, size2 = props.size, rotation = props.rotation, pull = props.pull; - var classes = (_classes = { - "fa-beat": beat, - "fa-fade": fade, - "fa-beat-fade": beatFade, - "fa-bounce": bounce, - "fa-shake": shake, - "fa-flash": flash, - "fa-spin": spin, - "fa-spin-reverse": spinReverse, - "fa-spin-pulse": spinPulse, - "fa-pulse": pulse, - "fa-fw": fixedWidth, - "fa-inverse": inverse, - "fa-border": border, - "fa-li": listItem, - "fa-flip": flip2 === true, - "fa-flip-horizontal": flip2 === "horizontal" || flip2 === "both", - "fa-flip-vertical": flip2 === "vertical" || flip2 === "both" - }, _defineProperty3(_classes, "fa-".concat(size2), typeof size2 !== "undefined" && size2 !== null), _defineProperty3(_classes, "fa-rotate-".concat(rotation), typeof rotation !== "undefined" && rotation !== null && rotation !== 0), _defineProperty3(_classes, "fa-pull-".concat(pull), typeof pull !== "undefined" && pull !== null), _defineProperty3(_classes, "fa-swap-opacity", props.swapOpacity), _classes); - return Object.keys(classes).map(function(key) { - return classes[key] ? key : null; - }).filter(function(key) { - return key; - }); -} -function _isNumerical(obj) { - obj = obj - 0; - return obj === obj; -} -function camelize(string2) { - if (_isNumerical(string2)) { - return string2; - } - string2 = string2.replace(/[\-_\s]+(.)?/g, function(match4, chr) { - return chr ? chr.toUpperCase() : ""; - }); - return string2.substr(0, 1).toLowerCase() + string2.substr(1); -} -var _excluded5 = ["style"]; -function capitalize(val) { - return val.charAt(0).toUpperCase() + val.slice(1); -} -function styleToObject(style) { - return style.split(";").map(function(s4) { - return s4.trim(); - }).filter(function(s4) { - return s4; - }).reduce(function(acc, pair) { - var i4 = pair.indexOf(":"); - var prop = camelize(pair.slice(0, i4)); - var value = pair.slice(i4 + 1).trim(); - prop.startsWith("webkit") ? acc[capitalize(prop)] = value : acc[prop] = value; - return acc; - }, {}); -} -function convert2(createElement2, element) { - var extraProps = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; - if (typeof element === "string") { - return element; - } - var children = (element.children || []).map(function(child) { - return convert2(createElement2, child); - }); - var mixins = Object.keys(element.attributes || {}).reduce(function(acc, key) { - var val = element.attributes[key]; - switch (key) { - case "class": - acc.attrs["className"] = val; - delete element.attributes["class"]; - break; - case "style": - acc.attrs["style"] = styleToObject(val); - break; - default: - if (key.indexOf("aria-") === 0 || key.indexOf("data-") === 0) { - acc.attrs[key.toLowerCase()] = val; - } else { - acc.attrs[camelize(key)] = val; - } - } - return acc; - }, { - attrs: {} - }); - var _extraProps$style = extraProps.style, existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style, remaining = _objectWithoutProperties2(extraProps, _excluded5); - mixins.attrs["style"] = _objectSpread23(_objectSpread23({}, mixins.attrs["style"]), existingStyle); - return createElement2.apply(void 0, [element.tag, _objectSpread23(_objectSpread23({}, mixins.attrs), remaining)].concat(_toConsumableArray3(children))); -} -var PRODUCTION2 = false; -try { - PRODUCTION2 = false; -} catch (e3) { -} -function log() { - if (!PRODUCTION2 && console && typeof console.error === "function") { - var _console; - (_console = console).error.apply(_console, arguments); - } -} -function normalizeIconArgs(icon3) { - if (icon3 && _typeof3(icon3) === "object" && icon3.prefix && icon3.iconName && icon3.icon) { - return icon3; - } - if (parse$1.icon) { - return parse$1.icon(icon3); - } - if (icon3 === null) { - return null; - } - if (icon3 && _typeof3(icon3) === "object" && icon3.prefix && icon3.iconName) { - return icon3; - } - if (Array.isArray(icon3) && icon3.length === 2) { - return { - prefix: icon3[0], - iconName: icon3[1] - }; - } - if (typeof icon3 === "string") { - return { - prefix: "fas", - iconName: icon3 - }; - } -} -function objectWithKey(key, value) { - return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty3({}, key, value) : {}; -} -var FontAwesomeIcon = /* @__PURE__ */ Rn.forwardRef(function(props, ref) { - var iconArgs = props.icon, maskArgs = props.mask, symbol = props.symbol, className = props.className, title = props.title, titleId = props.titleId, maskId = props.maskId; - var iconLookup = normalizeIconArgs(iconArgs); - var classes = objectWithKey("classes", [].concat(_toConsumableArray3(classList(props)), _toConsumableArray3(className.split(" ")))); - var transform2 = objectWithKey("transform", typeof props.transform === "string" ? parse$1.transform(props.transform) : props.transform); - var mask = objectWithKey("mask", normalizeIconArgs(maskArgs)); - var renderedIcon = icon2(iconLookup, _objectSpread23(_objectSpread23(_objectSpread23(_objectSpread23({}, classes), transform2), mask), {}, { - symbol, - title, - titleId, - maskId - })); - if (!renderedIcon) { - log("Could not find icon", iconLookup); - return null; - } - var abstract = renderedIcon.abstract; - var extraProps = { - ref - }; - Object.keys(props).forEach(function(key) { - if (!FontAwesomeIcon.defaultProps.hasOwnProperty(key)) { - extraProps[key] = props[key]; - } - }); - return convertCurry(abstract[0], extraProps); -}); -FontAwesomeIcon.displayName = "FontAwesomeIcon"; -FontAwesomeIcon.propTypes = { - beat: import_prop_types.default.bool, - border: import_prop_types.default.bool, - beatFade: import_prop_types.default.bool, - bounce: import_prop_types.default.bool, - className: import_prop_types.default.string, - fade: import_prop_types.default.bool, - flash: import_prop_types.default.bool, - mask: import_prop_types.default.oneOfType([import_prop_types.default.object, import_prop_types.default.array, import_prop_types.default.string]), - maskId: import_prop_types.default.string, - fixedWidth: import_prop_types.default.bool, - inverse: import_prop_types.default.bool, - flip: import_prop_types.default.oneOf([true, false, "horizontal", "vertical", "both"]), - icon: import_prop_types.default.oneOfType([import_prop_types.default.object, import_prop_types.default.array, import_prop_types.default.string]), - listItem: import_prop_types.default.bool, - pull: import_prop_types.default.oneOf(["right", "left"]), - pulse: import_prop_types.default.bool, - rotation: import_prop_types.default.oneOf([0, 90, 180, 270]), - shake: import_prop_types.default.bool, - size: import_prop_types.default.oneOf(["2xs", "xs", "sm", "lg", "xl", "2xl", "1x", "2x", "3x", "4x", "5x", "6x", "7x", "8x", "9x", "10x"]), - spin: import_prop_types.default.bool, - spinPulse: import_prop_types.default.bool, - spinReverse: import_prop_types.default.bool, - symbol: import_prop_types.default.oneOfType([import_prop_types.default.bool, import_prop_types.default.string]), - title: import_prop_types.default.string, - titleId: import_prop_types.default.string, - transform: import_prop_types.default.oneOfType([import_prop_types.default.string, import_prop_types.default.object]), - swapOpacity: import_prop_types.default.bool -}; -FontAwesomeIcon.defaultProps = { - border: false, - className: "", - mask: null, - maskId: null, - fixedWidth: false, - inverse: false, - flip: false, - icon: null, - listItem: false, - pull: null, - pulse: false, - rotation: null, - size: null, - spin: false, - spinPulse: false, - spinReverse: false, - beat: false, - fade: false, - beatFade: false, - bounce: false, - shake: false, - symbol: false, - title: "", - titleId: null, - transform: null, - swapOpacity: false -}; -var convertCurry = convert2.bind(null, Rn.createElement); - // src/api/ui/views/table.tsx +var import_react_fontawesome = __toESM(require_react_fontawesome()); function VanillaTable(props) { - const columns = useInterning(props.columns, (a3, b3) => { - if (a3.length != b3.length) - return false; - return a3.every((value, index2) => value == b3[index2]); + const columns = useInterning(props.columns, (a4, b3) => { + if (a4.length != b3.length) return false; + return a4.every((value, index) => value == b3[index]); }); - const tableRef = F2(null); - const totalElements = q2(() => Groupings.count(props.rows), [props.rows]); + const tableRef = A2(null); + const totalElements = T2(() => Groupings.count(props.rows), [props.rows]); const paging = useDatacorePaging({ initialPage: 0, paging: props.paging, @@ -46811,21 +49494,16 @@ function VanillaTable(props) { elements: totalElements, container: tableRef }); - const pagedRows = q2(() => { + const pagedRows = T2(() => { if (paging.enabled) return Groupings.slice(props.rows, paging.page * paging.pageSize, (paging.page + 1) * paging.pageSize); - else - return props.rows; + else return props.rows; }, [paging.page, paging.pageSize, paging.enabled, props.rows]); - const groupings = q2(() => { - if (!props.groupings) - return void 0; - if (Array.isArray(props.groupings)) - return props.groupings; - if (Literals.isFunction(props.groupings)) - return [{ render: props.groupings }]; - else - return [props.groupings]; + const groupings = T2(() => { + if (!props.groupings) return void 0; + if (Array.isArray(props.groupings)) return props.groupings; + if (Literals.isFunction(props.groupings)) return [{ render: props.groupings }]; + else return [props.groupings]; }, [props.groupings]); return /* @__PURE__ */ u3("div", { ref: tableRef, children: [ /* @__PURE__ */ u3("table", { className: "datacore-table", children: [ @@ -46836,7 +49514,7 @@ function VanillaTable(props) { ] }); } function VanillaTableHeaderCell({ column: column2 }) { - const header = q2(() => { + const header = T2(() => { if (!column2.title) { return column2.id; } else if (typeof column2.title === "function") { @@ -46845,7 +49523,7 @@ function VanillaTableHeaderCell({ column: column2 }) { return column2.title; } }, [column2.id, column2.title]); - const realWidth = q2( + const realWidth = T2( () => column2.width === "minimum" ? "1px" : column2.width === "maximum" ? "auto" : column2.width, [column2.width] ); @@ -46859,7 +49537,7 @@ function VanillaRowGroup({ }) { if (Groupings.isElementGroup(element)) { const groupingConfig = groupings ? groupings[Math.min(groupings.length - 1, level)] : void 0; - return /* @__PURE__ */ u3(m, { children: [ + return /* @__PURE__ */ u3(b, { children: [ /* @__PURE__ */ u3(TableGroupHeader, { level, value: element, width: columns.length, config: groupingConfig }), element.rows.map((row) => /* @__PURE__ */ u3(VanillaRowGroup, { level: level + 1, columns, element: row })) ] }); @@ -46873,10 +49551,9 @@ function TableGroupHeader({ width, config: config2 }) { - const sourcePath = P4(CURRENT_FILE_CONTEXT); - const rawRenderable = q2(() => { - if (config2 == null ? void 0 : config2.render) - return config2.render(value.key, value.rows); + const sourcePath = x2(CURRENT_FILE_CONTEXT); + const rawRenderable = T2(() => { + if (config2 == null ? void 0 : config2.render) return config2.render(value.key, value.rows); else return /* @__PURE__ */ u3("h2", { children: /* @__PURE__ */ u3(Lit, { sourcePath, inline: true, value: value.key }) }); }, [config2 == null ? void 0 : config2.render, value.key, value.rows]); @@ -46887,30 +49564,25 @@ function TableRow({ level, row, columns }) { return /* @__PURE__ */ u3("tr", { className: "datacore-table-row", style: level ? `padding-left: ${level * 5}px` : void 0, children: columns.map((col) => /* @__PURE__ */ u3(TableRowCell, { row, column: col })) }); } function TableRowCell({ row, column: column2 }) { - const value = q2(() => column2.value(row), [row, column2.value]); + const value = T2(() => column2.value(row), [row, column2.value]); const [editableState, dispatch] = useEditableDispatch({ content: value, isEditing: false, updater: (v3) => column2.onUpdate && column2.onUpdate(v3, row) }); - const renderable = q2(() => { + const renderable = T2(() => { if (column2.render) { - let r3 = column2.render(editableState.content, row); - if (r3 && typeof r3 == "object" && "props" in r3) - return { ...r3, props: { ...r3.props, dispatch } }; - return r3; - } else - return value; + let r4 = column2.render(editableState.content, row); + if (r4 && typeof r4 == "object" && "props" in r4) return { ...r4, props: { ...r4.props, dispatch } }; + return r4; + } else return value; }, [row, column2.render, value]); const rendered = useAsElement(renderable); - const Editor = q2(() => { + const Editor = T2(() => { let e3; - if (column2.editable && column2.editor) - e3 = column2.editor(editableState.content, row); - else - e3 = null; - if (e3) - return { ...e3, props: { ...e3.props, dispatch } }; + if (column2.editable && column2.editor) e3 = column2.editor(editableState.content, row); + else e3 = null; + if (e3) return { ...e3, props: { ...e3.props, dispatch } }; return e3; }, [row, column2.editor, column2.editable, value]); return /* @__PURE__ */ u3( @@ -46931,8 +49603,8 @@ function TableRowCell({ row, column: column2 }) { ); } function useAsElement(element) { - const sourcePath = P4(CURRENT_FILE_CONTEXT); - return q2(() => { + const sourcePath = x2(CURRENT_FILE_CONTEXT); + return T2(() => { if (t(element)) { return element; } else { @@ -46945,16 +49617,14 @@ function SortButton({ onClick, className }) { - const icon3 = q2(() => { - if (direction == "ascending") - return faSortDown; - else if (direction == "descending") - return faSortUp; + const icon2 = T2(() => { + if (direction == "ascending") return faSortDown; + else if (direction == "descending") return faSortUp; return faSort; }, [direction]); - return /* @__PURE__ */ u3("div", { onClick, className, children: /* @__PURE__ */ u3(FontAwesomeIcon, { icon: icon3 }) }); + return /* @__PURE__ */ u3("div", { onClick, className, children: /* @__PURE__ */ u3(import_react_fontawesome.FontAwesomeIcon, { icon: icon2 }) }); } -var DEFAULT_TABLE_COMPARATOR = (a3, b3, _ao, _bo) => Literals.compare(a3, b3); +var DEFAULT_TABLE_COMPARATOR = (a4, b3, _ao, _bo) => Literals.compare(a4, b3); // src/api/ui/views/callout.tsx var METADATA_SPLIT_REGEX = /\|(.*)/s; @@ -46964,7 +49634,7 @@ function Callout({ initialOpen, onOpenChange, title, - icon: icon3, + icon: icon2, children, type }) { @@ -46979,7 +49649,7 @@ function Callout({ className: combineClasses("datacore", "callout", collapsible ? "is-collapsible" : void 0), children: [ /* @__PURE__ */ u3("div", { className: "callout-title", onClick: () => collapsible && setOpen(!open), children: [ - icon3 && /* @__PURE__ */ u3("div", { className: "callout-icon", children: icon3 }), + icon2 && /* @__PURE__ */ u3("div", { className: "callout-icon", children: icon2 }), /* @__PURE__ */ u3("div", { className: "callout-title-inner", children: title }), collapsible && /* @__PURE__ */ u3("div", { className: combineClasses("callout-fold", !open ? "is-collapsed" : void 0), children: /* @__PURE__ */ u3( "svg", @@ -47006,20 +49676,18 @@ function Callout({ // src/api/ui/views/cards.tsx function Card(props) { - const cardTitle = q2(() => { + const cardTitle = T2(() => { if (typeof props.title === "function") { return props.title(props.value); } else { return props.title; } }, [props.value, props.title]); - const innerContent = q2(() => { - if (typeof props.content === "function") - return props.content(props.value); - else - return props.content; + const innerContent = T2(() => { + if (typeof props.content === "function") return props.content(props.value); + else return props.content; }, [props.value, props.content]); - const footerContent = q2(() => { + const footerContent = T2(() => { if (props.footer !== void 0) { if (typeof props.footer === "function") { return props.footer(props.value); @@ -47029,10 +49697,9 @@ function Card(props) { } return null; }, [props.footer, props.value]); - const titleClasses = q2(() => { + const titleClasses = T2(() => { let base = ["datacore-card-title"]; - if (props.centerTitle) - base = base.concat("centered"); + if (props.centerTitle) base = base.concat("centered"); return base; }, [props.centerTitle, props.title, props.content, props.value]); return /* @__PURE__ */ u3("div", { className: "datacore-card", children: [ @@ -47045,7 +49712,7 @@ function Card(props) { } // src/api/data-array.ts -var _DataArrayImpl = class { +var _DataArrayImpl = class _DataArrayImpl { constructor(values, defaultComparator = Literals.compare) { this.values = values; this.defaultComparator = defaultComparator; @@ -47071,26 +49738,24 @@ var _DataArrayImpl = class { } flatMap(f4) { let result = []; - for (let index2 = 0; index2 < this.length; index2++) { - let value = f4(this.values[index2], index2, this.values); - if (!value || value.length == 0) - continue; - for (let r3 of value) - result.push(r3); + for (let index = 0; index < this.length; index++) { + let value = f4(this.values[index], index, this.values); + if (!value || value.length == 0) continue; + for (let r4 of value) result.push(r4); } return this.lwrap(result); } mutate(f4) { - for (let index2 = 0; index2 < this.values.length; index2++) { - f4(this.values[index2], index2, this.values); + for (let index = 0; index < this.values.length; index++) { + f4(this.values[index], index, this.values); } return this; } limit(count) { return this.lwrap(this.values.slice(0, count)); } - slice(start, end3) { - return this.lwrap(this.values.slice(start, end3)); + slice(start, end2) { + return this.lwrap(this.values.slice(start, end2)); } concat(other) { return this.lwrap(this.values.concat(other.values)); @@ -47101,16 +49766,13 @@ var _DataArrayImpl = class { } /** Return the first element that satisfies the given predicate. */ find(pred) { - let index2 = this.findIndex(pred); - if (index2 == -1) - return void 0; - else - return this.values[index2]; + let index = this.findIndex(pred); + if (index == -1) return void 0; + else return this.values[index]; } findIndex(pred, fromIndex) { - for (let index2 = fromIndex != null ? fromIndex : 0; index2 < this.length; index2++) { - if (pred(this.values[index2], index2, this.values)) - return index2; + for (let index = fromIndex != null ? fromIndex : 0; index < this.length; index++) { + if (pred(this.values[index], index, this.values)) return index; } return -1; } @@ -47121,48 +49783,45 @@ var _DataArrayImpl = class { return this.map((s4) => Literals.toString(s4)).array().join(sep != null ? sep : ", "); } sort(key, direction, comparator) { - if (this.values.length == 0) - return this; + if (this.values.length == 0) return this; let realComparator = comparator != null ? comparator : this.defaultComparator; let realKey = key != null ? key : (l4) => l4; - let copy2 = [].concat(this.array()).map((elem, index2) => { - return { index: index2, value: elem }; + let copy2 = [].concat(this.array()).map((elem, index) => { + return { index, value: elem }; }); - copy2.sort((a3, b3) => { - let aKey = realKey(a3.value, a3.index, this.values); + copy2.sort((a4, b3) => { + let aKey = realKey(a4.value, a4.index, this.values); let bKey = realKey(b3.value, b3.index, this.values); return direction === "desc" ? -realComparator(aKey, bKey) : realComparator(aKey, bKey); }); return this.lwrap(copy2.map((e3) => e3.value)); } sortInPlace(key, direction, comparator) { - if (this.values.length == 0) - return this; + if (this.values.length == 0) return this; let realComparator = comparator != null ? comparator : this.defaultComparator; let realKey = key != null ? key : (l4) => l4; - this.values.sort((a3, b3) => { - let aKey = realKey(a3); + this.values.sort((a4, b3) => { + let aKey = realKey(a4); let bKey = realKey(b3); return direction == "desc" ? -realComparator(aKey, bKey) : realComparator(aKey, bKey); }); return this; } groupBy(key, comparator) { - if (this.values.length == 0) - return this.lwrap([]); + if (this.values.length == 0) return this.lwrap([]); let intermediate = this.sort(key, "asc", comparator); comparator = comparator != null ? comparator : this.defaultComparator; let result = []; let currentRow = [intermediate[0]]; let current = key(intermediate[0], 0, intermediate.values); - for (let index2 = 1; index2 < intermediate.length; index2++) { - let newKey = key(intermediate[index2], index2, intermediate.values); + for (let index = 1; index < intermediate.length; index++) { + let newKey = key(intermediate[index], index, intermediate.values); if (comparator(current, newKey) != 0) { result.push({ key: current, rows: currentRow }); current = newKey; - currentRow = [intermediate[index2]]; + currentRow = [intermediate[index]]; } else { - currentRow.push(intermediate[index2]); + currentRow.push(intermediate[index]); } } result.push({ key: current, rows: currentRow }); @@ -47181,17 +49840,16 @@ var _DataArrayImpl = class { } } distinct(key, comparator) { - if (this.values.length == 0) - return this; + if (this.values.length == 0) return this; let realKey = key != null ? key : (x4) => x4; - let intermediate = this.map((x4, index2) => { - return { key: realKey(x4, index2, this.values), value: x4 }; + let intermediate = this.map((x4, index) => { + return { key: realKey(x4, index, this.values), value: x4 }; }).sort((x4) => x4.key, "asc", comparator); comparator = comparator != null ? comparator : this.defaultComparator; let result = [intermediate[0].value]; - for (let index2 = 1; index2 < intermediate.length; index2++) { - if (comparator(intermediate[index2 - 1].key, intermediate[index2].key) != 0) { - result.push(intermediate[index2].value); + for (let index = 1; index < intermediate.length; index++) { + if (comparator(intermediate[index - 1].key, intermediate[index].key) != 0) { + result.push(intermediate[index].value); } } return this.lwrap(result); @@ -47203,7 +49861,7 @@ var _DataArrayImpl = class { return this.values.some(f4); } none(f4) { - return this.values.every((v3, i4, a3) => !f4(v3, i4, a3)); + return this.values.every((v3, i4, a4) => !f4(v3, i4, a4)); } first() { return this.values.length > 0 ? this.values[0] : void 0; @@ -47215,12 +49873,9 @@ var _DataArrayImpl = class { let result = []; for (let child of this.values) { let value = child[key]; - if (value === void 0 || value === null) - continue; - if (Array.isArray(value) || DataArray.isDataArray(value)) - value.forEach((v3) => result.push(v3)); - else - result.push(value); + if (value === void 0 || value === null) continue; + if (Array.isArray(value) || DataArray.isDataArray(value)) value.forEach((v3) => result.push(v3)); + else result.push(value); } return this.lwrap(result); } @@ -47228,8 +49883,7 @@ var _DataArrayImpl = class { let result = []; for (let child of this.values) { let value = child[key]; - if (value === void 0 || value === null) - continue; + if (value === void 0 || value === null) continue; result.push(value); } return this.lwrap(result); @@ -47238,23 +49892,19 @@ var _DataArrayImpl = class { let result = []; let queue = [].concat(this.values); while (queue.length > 0) { - let next3 = queue.pop(); - let value = next3[key]; - if (value === void 0 || value === null) - continue; - if (Array.isArray(value)) - value.forEach((v3) => queue.push(v3)); - else if (value instanceof _DataArrayImpl) - value.forEach((v3) => queue.push(v3)); - else - queue.push(value); - result.push(next3); + let next2 = queue.pop(); + let value = next2[key]; + if (value === void 0 || value === null) continue; + if (Array.isArray(value)) value.forEach((v3) => queue.push(v3)); + else if (value instanceof _DataArrayImpl) value.forEach((v3) => queue.push(v3)); + else queue.push(value); + result.push(next2); } return this.lwrap(result); } forEach(f4) { - for (let index2 = 0; index2 < this.values.length; index2++) { - f4(this.values[index2], index2, this.values); + for (let index = 0; index < this.values.length; index++) { + f4(this.values[index], index, this.values); } } array() { @@ -47267,8 +49917,7 @@ var _DataArrayImpl = class { return "[" + this.values.join(", ") + "]"; } }; -var DataArrayImpl = _DataArrayImpl; -DataArrayImpl.ARRAY_FUNCTIONS = /* @__PURE__ */ new Set([ +_DataArrayImpl.ARRAY_FUNCTIONS = /* @__PURE__ */ new Set([ "chain", "where", "filter", @@ -47305,35 +49954,28 @@ DataArrayImpl.ARRAY_FUNCTIONS = /* @__PURE__ */ new Set([ "toString", "settings" ]); -DataArrayImpl.ARRAY_PROXY = { +_DataArrayImpl.ARRAY_PROXY = { get: function(target, prop, reciever) { - if (typeof prop === "symbol") - return target[prop]; - else if (typeof prop === "number") - return target.values[prop]; - else if (prop === "constructor") - return target.values.constructor; - else if (!isNaN(parseInt(prop))) - return target.values[parseInt(prop)]; - else if (_DataArrayImpl.ARRAY_FUNCTIONS.has(prop.toString())) - return target[prop.toString()]; + if (typeof prop === "symbol") return target[prop]; + else if (typeof prop === "number") return target.values[prop]; + else if (prop === "constructor") return target.values.constructor; + else if (!isNaN(parseInt(prop))) return target.values[parseInt(prop)]; + else if (_DataArrayImpl.ARRAY_FUNCTIONS.has(prop.toString())) return target[prop.toString()]; return target.to(prop); } }; +var DataArrayImpl = _DataArrayImpl; var DataArray; ((DataArray2) => { function wrap(raw) { - if (isDataArray(raw)) - return raw; + if (isDataArray(raw)) return raw; return DataArrayImpl.wrap(raw); } DataArray2.wrap = wrap; function from2(raw) { - if (isDataArray(raw)) - return raw; + if (isDataArray(raw)) return raw; let data = []; - for (let elem of raw) - data.push(elem); + for (let elem of raw) data.push(elem); return DataArrayImpl.wrap(data); } DataArray2.from = from2; @@ -47352,8 +49994,7 @@ var Coerce; ((Coerce2) => { function string2(value) { const wrapped = Literals.wrapValue(value); - if (!wrapped) - return void 0; + if (!wrapped) return void 0; switch (wrapped.type) { case "string": return wrapped.value; @@ -47371,75 +50012,53 @@ var Coerce; } Coerce2.string = string2; function boolean(value) { - if (typeof value === "boolean") - return value; - else if (typeof value === "string" && value.toLowerCase() === "true") - return true; - else if (typeof value === "string" && value.toLowerCase() === "false") - return false; - else - return void 0; + if (typeof value === "boolean") return value; + else if (typeof value === "string" && value.toLowerCase() === "true") return true; + else if (typeof value === "string" && value.toLowerCase() === "false") return false; + else return void 0; } Coerce2.boolean = boolean; function number(value) { - if (typeof value === "number") - return value; + if (typeof value === "number") return value; else if (typeof value === "string") { const parsed = parseFloat(value); - if (!isNaN(parsed)) - return parsed; - else - return void 0; - } else - return void 0; + if (!isNaN(parsed)) return parsed; + else return void 0; + } else return void 0; } Coerce2.number = number; function date(value) { - if (value instanceof DateTime) - return value; + if (value instanceof DateTime) return value; else if (typeof value === "string") { const parsed = PRIMITIVES.datePlus.parse(value); - if (parsed.status) - return parsed.value; - else - return void 0; - } else - return void 0; + if (parsed.status) return parsed.value; + else return void 0; + } else return void 0; } Coerce2.date = date; function duration(value) { - if (value instanceof Duration) - return value; + if (value instanceof Duration) return value; else if (typeof value === "string") { const parsed = PRIMITIVES.duration.parse(value); - if (parsed.status) - return parsed.value; - else - return void 0; - } else - return void 0; + if (parsed.status) return parsed.value; + else return void 0; + } else return void 0; } Coerce2.duration = duration; function link(value) { - if (value instanceof Link) - return value; + if (value instanceof Link) return value; else if (typeof value === "string") { const parsed = PRIMITIVES.embedLink.parse(value); - if (parsed.status) - return parsed.value; - else - return void 0; - } else - return void 0; + if (parsed.status) return parsed.value; + else return void 0; + } else return void 0; } Coerce2.link = link; - function array2(value) { - if (Array.isArray(value)) - return value; - else - return [value]; + function array(value) { + if (Array.isArray(value)) return value; + else return [value]; } - Coerce2.array = array2; + Coerce2.array = array; })(Coerce || (Coerce = {})); // src/utils/deferred.ts @@ -47457,7 +50076,7 @@ function deferred() { } // src/api/script-cache.ts -var _ScriptCache = class { +var _ScriptCache = class _ScriptCache { constructor(store) { this.store = store; /** Caches scripts by fully qualified path. */ @@ -47468,8 +50087,7 @@ var _ScriptCache = class { const key = this.pathkey(path); const currentScript = this.scripts.get(key); if (currentScript) { - if (currentScript.type === "loaded") - return Result.success(currentScript.object); + if (currentScript.type === "loaded") return Result.success(currentScript.object); return Result.failure( `Failed to import script "${path.toString()}", as it is in the middle of being loaded. Do you have a circular dependency in your require() calls? The currently loaded or loading scripts are: @@ -47490,8 +50108,7 @@ var _ScriptCache = class { /** Load a script, directly bypassing the cache. */ async loadUncached(path, context) { const maybeSource = await this.resolveSource(path); - if (!maybeSource.successful) - return maybeSource; + if (!maybeSource.successful) return maybeSource; const { code, language } = maybeSource.value; let basic; try { @@ -47499,7 +50116,7 @@ var _ScriptCache = class { } catch (error) { return Result.failure(`Failed to import ${path.toString()} while transpiling from ${language}: ${error}`); } - const finalContext = Object.assign({ h: g, Fragment: m }, context); + const finalContext = Object.assign({ h: _, Fragment: b }, context); try { return Result.success(await asyncEvalInContext(basic, finalContext)); } catch (error) { @@ -47508,19 +50125,15 @@ var _ScriptCache = class { } /** Normalize a path or link to a textual path. */ pathkey(path) { - if (path instanceof Link) - return path.obsidianLink(); - else - return path; + if (path instanceof Link) return path.obsidianLink(); + else return path; } /** Attempts to resolve the source to load given a path or link to a markdown section. */ async resolveSource(path) { const object = this.store.resolveLink(path); - if (!object) - return Result.failure("Could not find a script at the given path: " + path.toString()); + if (!object) return Result.failure("Could not find a script at the given path: " + path.toString()); const tfile = this.store.vault.getFileByPath(object.$file); - if (!tfile) - return Result.failure(`File "${object.$file}" not found.`); + if (!tfile) return Result.failure(`File "${object.$file}" not found.`); if (tfile.extension.toLocaleLowerCase() in _ScriptCache.FILE_EXTENSIONS) { const language = _ScriptCache.FILE_EXTENSIONS[tfile.extension.toLocaleLowerCase()]; try { @@ -47557,8 +50170,7 @@ var _ScriptCache = class { block.$contentPosition.start, block.$contentPosition.end ); - if (block.$style === "fenced") - return Result.success(raw); + if (block.$style === "fenced") return Result.success(raw); else return Result.success( raw.split("\n").map((line2) => line2.trimStart()).join("\n") @@ -47568,9 +50180,8 @@ var _ScriptCache = class { } } }; -var ScriptCache = _ScriptCache; /** All of the tags we recognize for scripts. */ -ScriptCache.SCRIPT_LANGUAGES = { +_ScriptCache.SCRIPT_LANGUAGES = { js: "js", javascript: "js", datacorejs: "js", @@ -47583,12 +50194,13 @@ ScriptCache.SCRIPT_LANGUAGES = { datacoretsx: "tsx" }; /** All of the direct file extensions we can load. */ -ScriptCache.FILE_EXTENSIONS = { +_ScriptCache.FILE_EXTENSIONS = { tsx: "tsx", jsx: "jsx", js: "js", ts: "ts" }; +var ScriptCache = _ScriptCache; // src/ui/fields/editable-fields.tsx function FieldCheckbox(props) { @@ -47622,7 +50234,7 @@ function EditableTextField(props) { } function ControlledEditableTextField(props) { const { text: text2, inline: inline2, dispatch } = props; - const [textState, setText] = p2(text2); + const [textState, setText] = h2(text2); const onInput = async (e3) => { setText(e3.currentTarget.value); if (props.inline) { @@ -47687,7 +50299,7 @@ function FieldSelect({ field, (b3) => dispatch({ type: "content-changed", newValue: { ...field, value: b3 } }) ); - const onChange3 = x2( + const onChange3 = q2( (newValue) => { let normalized; if (Array.isArray(newValue)) { @@ -47699,12 +50311,12 @@ function FieldSelect({ }, [field, innerCallback] ); - const arrayVal = q2( + const arrayVal = T2( () => Array.isArray(field == null ? void 0 : field.value) ? field.value : !!field ? [field.value] : [defaultValue], [field] ); - const defVal = q2( - () => multi ? options2.filter((a3) => arrayVal.findIndex((b3) => b3 == a3.value) != -1) : options2.find((a3) => a3.value == (field == null ? void 0 : field.value)), + const defVal = T2( + () => multi ? options2.filter((a4) => arrayVal.findIndex((b3) => b3 == a4.value) != -1) : options2.find((a4) => a4.value == (field == null ? void 0 : field.value)), [options2, multi] ); return /* @__PURE__ */ u3( @@ -47737,10 +50349,8 @@ var TreeUtils; TreeUtils2.isTreeTableRowData = isTreeTableRowData; function countInTreeRow(node2, top = true) { let result = 0; - if (!top) - result++; - for (let n3 of node2.children) - result += countInTreeRow(n3, false); + if (!top) result++; + for (let n3 of node2.children) result += countInTreeRow(n3, false); return result; } TreeUtils2.countInTreeRow = countInTreeRow; @@ -47778,48 +50388,45 @@ var TreeUtils; return count(elements.rows); } else if (Groupings.isGrouping(elements)) { let result = 0; - for (let group of elements) - result += count(group.rows); + for (let group of elements) result += count(group.rows); return result; } else { return elements.reduce((pv, cv) => pv + countInTreeRow(cv), 0); } } TreeUtils2.count = count; - function sliceInTreeRow(elements, start, end3) { - if (end3 <= start) - return []; - let index2 = 0, seen = 0; - while (index2 < elements.length && seen + countInTreeRow(elements[index2]) <= start) { - seen += countInTreeRow(elements[index2]); - index2++; + function sliceInTreeRow(elements, start, end2) { + if (end2 <= start) return []; + let index = 0, seen = 0; + while (index < elements.length && seen + countInTreeRow(elements[index]) <= start) { + seen += countInTreeRow(elements[index]); + index++; } - if (index2 >= elements.length) - return []; + if (index >= elements.length) return []; const result = []; - while (index2 < elements.length && seen < end3) { - const group = elements[index2]; + while (index < elements.length && seen < end2) { + const group = elements[index]; const groupSize = countInTreeRow(group); const groupStart = Math.max(seen, start); - const groupEnd = Math.min(groupSize + seen, end3); + const groupEnd = Math.min(groupSize + seen, end2); result.push({ value: group.value, children: sliceInTreeRow(group.children, groupStart - seen, groupEnd - seen) }); seen += groupSize; - index2++; + index++; } return result; } - function slice2(elements, start, end3) { - let initial2 = [...Groupings.slice(elements, start, end3)]; - let index2 = 0, seen = 0; + function slice2(elements, start, end2) { + let initial2 = [...Groupings.slice(elements, start, end2)]; + let index = 0, seen = 0; for (let element of initial2) { if (Groupings.isElementGroup(element)) { let groupSize = Groupings.count(elements); let groupStart = Math.min(seen, start); - let groupEnd = Math.min(groupSize, end3); - initial2[index2].rows = Groupings.slice( + let groupEnd = Math.min(groupSize, end2); + initial2[index].rows = Groupings.slice( element.rows, groupStart, groupEnd @@ -47828,40 +50435,38 @@ var TreeUtils; } else { seen += countInTreeRow(element); } - index2++; + index++; } return initial2; } TreeUtils2.slice = slice2; function sort(rows, comparators) { - const realComparator = (a3, b3) => { + const realComparator = (a4, b3) => { for (let comp of comparators) { const direction = comp.direction.toLocaleLowerCase() === "ascending" ? 1 : -1; let result = 0; - if (Groupings.isElementGroup(a3) && Groupings.isElementGroup(b3)) { + if (Groupings.isElementGroup(a4) && Groupings.isElementGroup(b3)) { result = 0; - } else if (!Groupings.isElementGroup(a3) && !Groupings.isElementGroup(b3)) { - result = direction * comp.fn(comp.actualValue(a3.value), comp.actualValue(b3.value), a3.value, b3.value); + } else if (!Groupings.isElementGroup(a4) && !Groupings.isElementGroup(b3)) { + result = direction * comp.fn(comp.actualValue(a4.value), comp.actualValue(b3.value), a4.value, b3.value); } - if (result != 0) - return result; + if (result != 0) return result; } return 0; }; const map = (t4) => { - let r3; + let r4; if (Groupings.isElementGroup(t4)) - r3 = { ...t4, rows: sort(t4.rows, comparators).map(map) }; - else - r3 = { ...t4, children: sort(t4.children, comparators).map(map) }; - return r3; + r4 = { ...t4, rows: sort(t4.rows, comparators).map(map) }; + else r4 = { ...t4, children: sort(t4.children, comparators).map(map) }; + return r4; }; return rows.map(map).sort(realComparator); } TreeUtils2.sort = sort; })(TreeUtils || (TreeUtils = {})); function useKeyFn(id, ...deps) { - const ret = x2( + const ret = q2( (el) => { if (Groupings.isElementGroup(el)) { return el.key; @@ -47873,14 +50478,14 @@ function useKeyFn(id, ...deps) { ); return ret; } -function treeTableReducer(state2, action) { +function treeTableReducer(state, action) { switch (action.type) { case "sort-column": if (action.direction == void 0) { - return { ...state2, sortOn: void 0 }; + return { ...state, sortOn: void 0 }; } else { return { - ...state2, + ...state, sortOn: [ { type: "column", @@ -47892,21 +50497,19 @@ function treeTableReducer(state2, action) { } case "row-expand": const newMap = /* @__PURE__ */ new Map(); - if (!state2.openMap) - return { ...state2 }; - for (const k4 of state2.openMap.keys()) - newMap.set(k4, state2.openMap.get(k4)); - newMap.set(state2.id(action.row), action.newValue); - return { ...state2, openMap: newMap }; + if (!state.openMap) return { ...state }; + for (const k4 of state.openMap.keys()) newMap.set(k4, state.openMap.get(k4)); + newMap.set(state.id(action.row), action.newValue); + return { ...state, openMap: newMap }; case "open-map-changed": - return { ...state2, openMap: action.newValue }; + return { ...state, openMap: action.newValue }; } console.warn("datacore: Encountered unrecognized operation: " + action.type); - return state2; + return state; } function useTreeTableDispatch(initial2) { - const init = q2(() => typeof initial2 == "function" ? initial2() : initial2, []); - return y2(treeTableReducer, init); + const init = T2(() => typeof initial2 == "function" ? initial2() : initial2, []); + return p2(treeTableReducer, init); } var EXPANDED_CONTEXT = G(null); function TypedExpandedContext() { @@ -47917,27 +50520,21 @@ function TreeTableHeaderCell({ sort, sortable }) { - const { dispatch } = P4(TypedExpandedContext()); - const header = q2(() => { - if (!column2.title) - return column2.id; - else if (typeof column2.title === "function") - return column2.title(); - else - return column2.title; + const { dispatch } = x2(TypedExpandedContext()); + const header = T2(() => { + if (!column2.title) return column2.id; + else if (typeof column2.title === "function") return column2.title(); + else return column2.title; }, [column2.id, column2.title]); const sortClicked = useStableCallback( (_event) => { - if (sort == void 0) - dispatch({ type: "sort-column", column: column2.id, direction: "ascending" }); - else if (sort == "ascending") - dispatch({ type: "sort-column", column: column2.id, direction: "descending" }); - else - dispatch({ type: "sort-column", column: column2.id, direction: void 0 }); + if (sort == void 0) dispatch({ type: "sort-column", column: column2.id, direction: "ascending" }); + else if (sort == "ascending") dispatch({ type: "sort-column", column: column2.id, direction: "descending" }); + else dispatch({ type: "sort-column", column: column2.id, direction: void 0 }); }, [column2.id] ); - const realWidth = q2( + const realWidth = T2( () => column2.width === "minimum" ? "1px" : column2.width === "maximum" ? "auto" : column2.width + "px", [column2.width] ); @@ -47952,10 +50549,9 @@ function TreeTableGroupHeader({ width, config: config2 }) { - const sourcePath = P4(CURRENT_FILE_CONTEXT); - const rawRenderable = q2(() => { - if (config2 == null ? void 0 : config2.render) - return config2.render(value.key, value.rows); + const sourcePath = x2(CURRENT_FILE_CONTEXT); + const rawRenderable = T2(() => { + if (config2 == null ? void 0 : config2.render) return config2.render(value.key, value.rows); else return /* @__PURE__ */ u3("h2", { children: /* @__PURE__ */ u3(Lit, { sourcePath, inline: true, value: value.key }) }); }, [config2 == null ? void 0 : config2.render, value.key, value.rows]); @@ -47968,12 +50564,12 @@ function TreeTableRowGroup({ element, groupings }) { - const { id } = P4(TypedExpandedContext()); + const { id } = x2(TypedExpandedContext()); const keyFn = useKeyFn(id); const groupIndex = groupings ? Math.min(groupings.length - 1, level) : 0; if (Groupings.isElementGroup(element)) { const groupingConfig = groupings ? groupings[groupIndex] : void 0; - return /* @__PURE__ */ u3(m, { children: [ + return /* @__PURE__ */ u3(b, { children: [ /* @__PURE__ */ u3(TreeTableGroupHeader, { level, value: element, width: columns.length, config: groupingConfig }), element.rows.map((row) => /* @__PURE__ */ u3(TreeTableRowGroup, { level: level + 1, columns, element: row, groupings })) ] }, keyFn(element)); @@ -47982,8 +50578,8 @@ function TreeTableRowGroup({ } } function TreeTableRowExpander({ row, level }) { - const { openMap, dispatch, id } = P4(TypedExpandedContext()); - const open = q2(() => { + const { openMap, dispatch, id } = x2(TypedExpandedContext()); + const open = T2(() => { var _a; return (_a = openMap.get(id(row))) != null ? _a : false; }, [row, openMap, openMap.get(id(row)), dispatch]); @@ -48016,10 +50612,10 @@ function TreeTableRow({ row, columns }) { - const { openMap, id } = P4(TypedExpandedContext()); - const open = q2(() => openMap.get(id(row.value)), [openMap, openMap.get(id(row.value)), row, row.value]); - const hasChildren = q2(() => row.children.length > 0, [row, row.children, row.value]); - return /* @__PURE__ */ u3(m, { children: [ + const { openMap, id } = x2(TypedExpandedContext()); + const open = T2(() => openMap.get(id(row.value)), [openMap, openMap.get(id(row.value)), row, row.value]); + const hasChildren = T2(() => row.children.length > 0, [row, row.children, row.value]); + return /* @__PURE__ */ u3(b, { children: [ /* @__PURE__ */ u3("tr", { className: "datacore-table-row", children: [ hasChildren ? /* @__PURE__ */ u3(TreeTableRowExpander, { level, row: row.value }) : /* @__PURE__ */ u3("td", {}), columns.map((col, i4) => /* @__PURE__ */ u3(TreeTableRowCell, { row, column: col, level, isFirst: i4 == 0 })) @@ -48033,8 +50629,8 @@ function TreeTableRowCell({ level, isFirst = false }) { - const value = q2(() => column2.value(row.value), [row.value, column2.value, column2.value(row.value)]); - const updater = x2( + const value = T2(() => column2.value(row.value), [row.value, column2.value, column2.value(row.value)]); + const updater = q2( (v3) => { column2.onUpdate && column2.onUpdate(v3, row.value); }, @@ -48045,25 +50641,21 @@ function TreeTableRowCell({ isEditing: false, updater: (v3) => column2.onUpdate && column2.onUpdate(v3, row.value) }); - _2(() => { + y2(() => { dispatch({ type: "content-changed", newValue: value }); }, [value, updater]); let renderedColumn = column2.render ? column2.render(editableState.content, row.value) : value; - const renderable = q2(() => { + const renderable = T2(() => { if (renderedColumn && typeof renderedColumn == "object" && "props" in renderedColumn) return Object.assign(renderedColumn, { props: Object.assign(renderedColumn.props, { dispatch }) }); - else - return renderedColumn; + else return renderedColumn; }, [column2.render, value, editableState.content, renderedColumn, row.value, updater]); const rendered = useAsElement(renderable); - const Editor = q2(() => { + const Editor = T2(() => { let e3; - if (column2.editable && column2.editor) - e3 = column2.editor(editableState.content, row.value); - else - e3 = null; - if (e3) - return Object.assign(e3, { props: Object.assign(e3.props, { dispatch }) }); + if (column2.editable && column2.editor) e3 = column2.editor(editableState.content, row.value); + else e3 = null; + if (e3) return Object.assign(e3, { props: Object.assign(e3.props, { dispatch }) }); return e3; }, [column2.editor, column2.editable, editableState.content, row.value]); return /* @__PURE__ */ u3( @@ -48085,21 +50677,19 @@ function TreeTableRowCell({ ); } function ControlledTreeTableView(props) { - const columns = useInterning(props.columns, (a3, b3) => { - if (a3.length != b3.length) - return false; - return a3.every((value, index2) => value == b3[index2]); + const columns = useInterning(props.columns, (a4, b3) => { + if (a4.length != b3.length) return false; + return a4.every((value, index) => value == b3[index]); }); - const totalElements = q2(() => { - if (Groupings.isGrouping(props.rows)) - return Groupings.count(props.rows); + const totalElements = T2(() => { + if (Groupings.isGrouping(props.rows)) return Groupings.count(props.rows); else return props.rows.reduce( (pv, cv) => pv + TreeUtils.countInTreeRow(TreeUtils.ofNode(cv, props.childSelector)), 0 ); }, [props.rows]); - const tableRef = F2(null); + const tableRef = A2(null); const paging = useDatacorePaging({ initialPage: 0, paging: props.paging, @@ -48107,35 +50697,29 @@ function ControlledTreeTableView(props) { elements: totalElements, container: tableRef }); - const rawSorts = useInterning(props.sortOn, (a3, b3) => Literals.compare(a3, b3) == 0); - const sorts = q2(() => { + const rawSorts = useInterning(props.sortOn, (a4, b3) => Literals.compare(a4, b3) == 0); + const sorts = T2(() => { return rawSorts == null ? void 0 : rawSorts.filter((sort) => { var _a; const column2 = columns.find((col) => col.id == sort.id); return column2 && ((_a = column2.sortable) != null ? _a : true); }); }, [columns, rawSorts]); - const groupings = q2(() => { - if (!props.groupings) - return void 0; - if (Array.isArray(props.groupings)) - return props.groupings; - if (Literals.isFunction(props.groupings)) - return [{ render: props.groupings }]; - else - return [props.groupings]; + const groupings = T2(() => { + if (!props.groupings) return void 0; + if (Array.isArray(props.groupings)) return props.groupings; + if (Literals.isFunction(props.groupings)) return [{ render: props.groupings }]; + else return [props.groupings]; }, [props.groupings]); - const rawRows = q2(() => { - if (!Groupings.isGrouping(props.rows)) - return TreeUtils.ofArray(props.rows, props.childSelector); + const rawRows = T2(() => { + if (!Groupings.isGrouping(props.rows)) return TreeUtils.ofArray(props.rows, props.childSelector); return TreeUtils.ofGrouping(props.rows, props.childSelector); }, [props.rows]); - const rows = q2(() => { - if (sorts == void 0 || sorts.length == 0) - return rawRows; + const rows = T2(() => { + if (sorts == void 0 || sorts.length == 0) return rawRows; const comparators = sorts.map((x4) => { var _a; - const col = columns.find((y3) => y3.id == x4.id); + const col = columns.find((y4) => y4.id == x4.id); const comp = (_a = col == null ? void 0 : col.comparator) != null ? _a : DEFAULT_TABLE_COMPARATOR; return { fn: comp, @@ -48145,7 +50729,7 @@ function ControlledTreeTableView(props) { }); return TreeUtils.sort(rawRows, comparators); }, [rawRows, sorts]); - const pagedRows = q2(() => { + const pagedRows = T2(() => { if (paging.enabled) return TreeUtils.slice(rows, paging.page * paging.pageSize, (paging.page + 1) * paging.pageSize); return rows; @@ -48184,21 +50768,19 @@ function ControlledTreeTableView(props) { } function TreeTableView(props) { var _a; - const [state2, dispatch] = useTreeTableDispatch({ + const [state, dispatch] = useTreeTableDispatch({ sortOn: (_a = props.sortOn) != null ? _a : [], id: props.id ? props.id : (x4) => x4.$id }); - const refState = q2(() => F2(state2), [state2]); - if (state2.openMap !== void 0) - refState.current = state2; - else - refState.current.openMap = /* @__PURE__ */ new Map(); - _2(() => { + const refState = T2(() => A2(state), [state]); + if (state.openMap !== void 0) refState.current = state; + else refState.current.openMap = /* @__PURE__ */ new Map(); + y2(() => { var _a2; dispatch({ type: "open-map-changed", newValue: (_a2 = refState.current.openMap) != null ? _a2 : /* @__PURE__ */ new Map() }); }, [dispatch]); delete props.sortOn; - return /* @__PURE__ */ u3(ControlledTreeTableView, { dispatch, ...state2, ...props }); + return /* @__PURE__ */ u3(ControlledTreeTableView, { dispatch, ...state, ...props }); } // src/api/local-api.tsx @@ -48215,14 +50797,14 @@ var DatacoreLocalApi = class { // Hooks // ///////////// // Export the common preact hooks for people to use via `dc.`: - this.useState = p2; - this.useCallback = x2; - this.useReducer = y2; - this.useMemo = q2; - this.useEffect = _2; + this.useState = h2; + this.useCallback = q2; + this.useReducer = p2; + this.useMemo = T2; + this.useEffect = y2; this.createContext = G; - this.useContext = P4; - this.useRef = F2; + this.useContext = x2; + this.useRef = A2; this.useInterning = useInterning; this.useSetField = useSetField; ///////////////////// @@ -48235,7 +50817,7 @@ var DatacoreLocalApi = class { /** Renders a literal value in a pretty way that respects settings. */ this.Literal = (({ value, sourcePath, inline: inline2 }) => { var _a; - const implicitSourcePath = P4(CURRENT_FILE_CONTEXT); + const implicitSourcePath = x2(CURRENT_FILE_CONTEXT); return /* @__PURE__ */ u3(Lit, { value, sourcePath: (_a = sourcePath != null ? sourcePath : implicitSourcePath) != null ? _a : this.path, inline: inline2 }); }).bind(this); /** Renders markdown using the Obsidian markdown renderer, optionally attaching additional styles. */ @@ -48247,7 +50829,7 @@ var DatacoreLocalApi = class { className }) => { var _a; - const implicitSourcePath = P4(CURRENT_FILE_CONTEXT); + const implicitSourcePath = x2(CURRENT_FILE_CONTEXT); return /* @__PURE__ */ u3( Markdown, { @@ -48268,8 +50850,8 @@ var DatacoreLocalApi = class { sourcePath }) => { var _a; - const realLink = q2(() => typeof link === "string" ? Link.file(link) : link, [link]); - const implicitSourcePath = P4(CURRENT_FILE_CONTEXT); + const realLink = T2(() => typeof link === "string" ? Link.file(link) : link, [link]); + const implicitSourcePath = x2(CURRENT_FILE_CONTEXT); return /* @__PURE__ */ u3( Embed, { @@ -48283,14 +50865,14 @@ var DatacoreLocalApi = class { this.SpanEmbed = (({ path, start, - end: end3, + end: end2, explain, showExplain, sourcePath: maybeSourcePath }) => { const sourcePath = maybeSourcePath != null ? maybeSourcePath : this.path; - const resolvedPath = q2(() => this.resolvePath(path, sourcePath), [path, sourcePath]); - return /* @__PURE__ */ u3(LineSpanEmbed, { path: resolvedPath, start, end: end3, explain, showExplain }); + const resolvedPath = T2(() => this.resolvePath(path, sourcePath), [path, sourcePath]); + return /* @__PURE__ */ u3(LineSpanEmbed, { path: resolvedPath, start, end: end2, explain, showExplain }); }).bind(this); /** Renders an obsidian lucide icon. */ this.Icon = Icon; @@ -48336,7 +50918,7 @@ var DatacoreLocalApi = class { } /** Get access to preact functions. */ get preact() { - return preact_module_exports; + return preact_exports; } /** Central Obsidian app object. */ get app() { @@ -48402,8 +50984,8 @@ var DatacoreLocalApi = class { return this.api.tryParseLink(linktext); } /** Create a data array from a regular array. */ - array(input2) { - return DataArray.wrap(input2); + array(input) { + return DataArray.wrap(input); } /** Sets the text of a given task programmatically. */ setTaskText(newText, task) { @@ -48414,8 +50996,8 @@ var DatacoreLocalApi = class { completeTask(completed, task, this.app.vault, this.core); } /** Memoize the input automatically and process it using a Data Array; returns a vanilla array back. */ - useArray(input2, process2, deps) { - return q2(() => process2(DataArray.wrap(input2)).array(), [input2, ...deps != null ? deps : []]); + useArray(input, process2, deps) { + return T2(() => process2(DataArray.wrap(input)).array(), [input, ...deps != null ? deps : []]); } /** Use the file metadata for the current file. Automatically updates the view when the current file metadata changes. */ useCurrentFile(settings) { @@ -48448,7 +51030,7 @@ var DatacoreLocalApi = class { }; // src/api/api.ts -var import_parsimmon = __toESM(require_parsimmon_umd_min()); +var import_parsimmon = __toESM(require_parsimmon()); var DatacoreApi = class { constructor(core) { this.core = core; @@ -48464,7 +51046,7 @@ var DatacoreApi = class { } /** Get access to preact functions. */ get preact() { - return preact_module_exports; + return preact_exports; } /** Central Obsidian app object. */ get app() { @@ -48505,22 +51087,17 @@ var DatacoreApi = class { /** Resolve a local or absolute path or link to an absolute path. */ resolvePath(path, sourcePath) { const rawpath = path instanceof Link ? path.path : path; - if (rawpath.startsWith("/")) - return rawpath.substring(1); + if (rawpath.startsWith("/")) return rawpath.substring(1); const absolute = this.core.metadataCache.getFirstLinkpathDest(rawpath, sourcePath != null ? sourcePath : ""); - if (absolute) - return absolute.path; + if (absolute) return absolute.path; return rawpath; } /** Try to parse the given query, returning a monadic success/failure result. */ tryParseQuery(query) { - if (!(typeof query === "string")) - return Result.success(query); + if (!(typeof query === "string")) return Result.success(query); const result = QUERY.query.parse(query); - if (result.status) - return Result.success(result.value); - else - return Result.failure(import_parsimmon.default.formatError(query, result)); + if (result.status) return Result.success(result.value); + else return Result.failure(import_parsimmon.default.formatError(query, result)); } /** Try to parse the given query, throwing an error if it is invalid. */ parseQuery(query) { @@ -48545,13 +51122,12 @@ var DatacoreApi = class { /** Try to parse a link, returning a monadic success/failure result. */ tryParseLink(linktext) { const parsed = PRIMITIVES.embedLink.parse(linktext); - if (!parsed.status) - return Result.failure(import_parsimmon.default.formatError(linktext, parsed)); + if (!parsed.status) return Result.failure(import_parsimmon.default.formatError(linktext, parsed)); return Result.success(parsed.value); } /** Create a data array from a regular array. */ - array(input2) { - return DataArray.wrap(input2); + array(input) { + return DataArray.wrap(input); } ///////////////////// // Visual Elements // @@ -48604,7 +51180,7 @@ var DatacoreApi = class { // src/index/storage/folder.ts var import_obsidian5 = require("obsidian"); -var _FolderIndex = class { +var _FolderIndex = class _FolderIndex { constructor(vault) { this.vault = vault; } @@ -48631,10 +51207,8 @@ var _FolderIndex = class { } else if (folder instanceof import_obsidian5.TFolder) { const elements = /* @__PURE__ */ new Set(); for (const file of folder.children) { - if (!(file instanceof import_obsidian5.TFile)) - continue; - if (filter && !filter(file.path)) - continue; + if (!(file instanceof import_obsidian5.TFile)) continue; + if (filter && !filter(file.path)) continue; elements.add(file.path); } return elements; @@ -48658,15 +51232,11 @@ var _FolderIndex = class { * Use the in-memory prefix index to convert a relative path to an absolute one. */ resolveRelative(path, origin) { - if (!origin) - return path; - else if (path.startsWith("/")) - return path.substring(1); + if (!origin) return path; + else if (path.startsWith("/")) return path.substring(1); let relativePath = getParentFolder(origin) + "/" + path; - if (this.pathExists(relativePath)) - return relativePath; - else - return path; + if (this.pathExists(relativePath)) return relativePath; + else return path; } *walk(folder, filter) { for (const file of folder.children) { @@ -48678,20 +51248,19 @@ var _FolderIndex = class { } } }; -var FolderIndex = _FolderIndex; /** Empty placeholder set. */ -FolderIndex.EMPTY_SET = /* @__PURE__ */ new Set(); +_FolderIndex.EMPTY_SET = /* @__PURE__ */ new Set(); +var FolderIndex = _FolderIndex; // src/index/storage/inverted.ts -var _InvertedIndex = class { +var _InvertedIndex = class _InvertedIndex { constructor() { this.inverted = /* @__PURE__ */ new Map(); } /** Set the key to the given values. */ set(key, values) { for (let value of values) { - if (!this.inverted.has(value)) - this.inverted.set(value, /* @__PURE__ */ new Set()); + if (!this.inverted.has(value)) this.inverted.set(value, /* @__PURE__ */ new Set()); this.inverted.get(value).add(key); } } @@ -48703,11 +51272,11 @@ var _InvertedIndex = class { /** Delete a key from the set of associated values. */ delete(key, values) { for (let value of values) { - const set2 = this.inverted.get(value); - if (set2) { - set2.delete(key); + const set = this.inverted.get(value); + if (set) { + set.delete(key); } - if (set2 && set2.size == 0) { + if (set && set.size == 0) { this.inverted.delete(value); } } @@ -48716,8 +51285,8 @@ var _InvertedIndex = class { this.inverted.clear(); } }; +_InvertedIndex.EMPTY_SET = /* @__PURE__ */ new Set(); var InvertedIndex = _InvertedIndex; -InvertedIndex.EMPTY_SET = /* @__PURE__ */ new Set(); // node_modules/flatqueue/index.js var FlatQueue = class { @@ -48734,8 +51303,7 @@ var FlatQueue = class { while (pos > 0) { const parent = pos - 1 >> 1; const parentValue = this.values[parent]; - if (value >= parentValue) - break; + if (value >= parentValue) break; this.ids[pos] = this.ids[parent]; this.values[pos] = parentValue; pos = parent; @@ -48744,8 +51312,7 @@ var FlatQueue = class { this.values[pos] = value; } pop() { - if (this.length === 0) - return void 0; + if (this.length === 0) return void 0; const top = this.ids[0]; this.length--; if (this.length > 0) { @@ -48764,8 +51331,7 @@ var FlatQueue = class { bestIndex = this.ids[right]; bestValue = rightValue; } - if (bestValue >= value) - break; + if (bestValue >= value) break; this.ids[pos] = bestIndex; this.values[pos] = bestValue; pos = left; @@ -48776,13 +51342,11 @@ var FlatQueue = class { return top; } peek() { - if (this.length === 0) - return void 0; + if (this.length === 0) return void 0; return this.ids[0]; } peekValue() { - if (this.length === 0) - return void 0; + if (this.length === 0) return void 0; return this.values[0]; } shrink() { @@ -48814,8 +51378,7 @@ var IdFieldIndex = class { delete(id, value) { } equals(value) { - if (!Literals.isString(value)) - return void 0; + if (!Literals.isString(value)) return void 0; if (this.lookup(value)) { return /* @__PURE__ */ new Set([value]); } else { @@ -48844,10 +51407,10 @@ var SetFieldIndex = class { return void 0; } }; -var _BTreeFieldIndex = class { +var _BTreeFieldIndex = class _BTreeFieldIndex { constructor() { this.present = /* @__PURE__ */ new Set(); - this.values = new import_sorted_btree.default([], (a3, b3) => Literals.compare(a3, b3)); + this.values = new import_sorted_btree.default([], (a4, b3) => Literals.compare(a4, b3)); } /** Add an (object, value) pairing to the collection. */ add(id, value) { @@ -48858,9 +51421,9 @@ var _BTreeFieldIndex = class { /** Delete an (object, value) pairing from the collection. */ delete(id, value) { this.present.delete(id); - const set2 = this.values.get(value); - set2 == null ? void 0 : set2.delete(id); - if (set2 == null || set2.size == 0) { + const set = this.values.get(value); + set == null ? void 0 : set.delete(id); + if (set == null || set.size == 0) { this.values.delete(value); } } @@ -48873,29 +51436,29 @@ var _BTreeFieldIndex = class { return this.values.get(value, _BTreeFieldIndex.EMPTY_SET); } }; -var BTreeFieldIndex = _BTreeFieldIndex; /** Placeholder empty set. */ -BTreeFieldIndex.EMPTY_SET = /* @__PURE__ */ new Set(); +_BTreeFieldIndex.EMPTY_SET = /* @__PURE__ */ new Set(); +var BTreeFieldIndex = _BTreeFieldIndex; // src/expression/binaryop.ts -var BinaryOpHandler = class { +var BinaryOpHandler = class _BinaryOpHandler { static create() { - return new BinaryOpHandler(); + return new _BinaryOpHandler(); } constructor() { this.map = /* @__PURE__ */ new Map(); this.handleDefaultNulls = false; } register(left, op, right, func) { - this.map.set(BinaryOpHandler.repr(op, left, right), (a3, b3, c3) => Result.success(func(a3, b3, c3))); + this.map.set(_BinaryOpHandler.repr(op, left, right), (a4, b3, c4) => Result.success(func(a4, b3, c4))); return this; } registerResult(left, op, right, func) { - this.map.set(BinaryOpHandler.repr(op, left, right), func); + this.map.set(_BinaryOpHandler.repr(op, left, right), func); return this; } registerComm(left, op, right, func) { - return this.register(left, op, right, func).register(right, op, left, (a3, b3, ctx) => func(b3, a3, ctx)); + return this.register(left, op, right, func).register(right, op, left, (a4, b3, ctx) => func(b3, a4, ctx)); } /** If enabled, all null (op) null operations produce null. */ withDefaultNullHandling() { @@ -48904,30 +51467,23 @@ var BinaryOpHandler = class { } /** Implement a comparison function. */ compare(type, compare) { - return this.register(type, "<", type, (a3, b3, ctx) => compare(a3, b3, ctx) < 0).register(type, "<=", type, (a3, b3, ctx) => compare(a3, b3, ctx) <= 0).register(type, ">", type, (a3, b3, ctx) => compare(a3, b3, ctx) > 0).register(type, ">=", type, (a3, b3, ctx) => compare(a3, b3, ctx) >= 0).register(type, "=", type, (a3, b3, ctx) => compare(a3, b3, ctx) == 0).register(type, "!=", type, (a3, b3, ctx) => compare(a3, b3, ctx) != 0); + return this.register(type, "<", type, (a4, b3, ctx) => compare(a4, b3, ctx) < 0).register(type, "<=", type, (a4, b3, ctx) => compare(a4, b3, ctx) <= 0).register(type, ">", type, (a4, b3, ctx) => compare(a4, b3, ctx) > 0).register(type, ">=", type, (a4, b3, ctx) => compare(a4, b3, ctx) >= 0).register(type, "=", type, (a4, b3, ctx) => compare(a4, b3, ctx) == 0).register(type, "!=", type, (a4, b3, ctx) => compare(a4, b3, ctx) != 0); } /** Attempt to evaluate the given binary operator on the two literal fields. */ evaluate(op, left, right, ctx) { let leftType = Literals.typeOf(left); let rightType = Literals.typeOf(right); - if (!leftType) - return Result.failure(`Unrecognized value '${left}'`); - else if (!rightType) - return Result.failure(`Unrecognized value '${right}'`); - if (this.handleDefaultNulls && leftType === "null" && rightType === "null") - return Result.success(null); - let handler = this.map.get(BinaryOpHandler.repr(op, leftType, rightType)); - if (handler) - return handler(left, right, ctx); - let handler2 = this.map.get(BinaryOpHandler.repr(op, leftType, "*")); - if (handler2) - return handler2(left, right, ctx); - let handler3 = this.map.get(BinaryOpHandler.repr(op, "*", rightType)); - if (handler3) - return handler3(left, right, ctx); - let handler4 = this.map.get(BinaryOpHandler.repr(op, "*", "*")); - if (handler4) - return handler4(left, right, ctx); + if (!leftType) return Result.failure(`Unrecognized value '${left}'`); + else if (!rightType) return Result.failure(`Unrecognized value '${right}'`); + if (this.handleDefaultNulls && leftType === "null" && rightType === "null") return Result.success(null); + let handler = this.map.get(_BinaryOpHandler.repr(op, leftType, rightType)); + if (handler) return handler(left, right, ctx); + let handler2 = this.map.get(_BinaryOpHandler.repr(op, leftType, "*")); + if (handler2) return handler2(left, right, ctx); + let handler3 = this.map.get(_BinaryOpHandler.repr(op, "*", rightType)); + if (handler3) return handler3(left, right, ctx); + let handler4 = this.map.get(_BinaryOpHandler.repr(op, "*", "*")); + if (handler4) return handler4(left, right, ctx); return Result.failure(`No implementation found for '${leftType} ${op} ${rightType}'`); } /** Create a string representation of the given triplet for unique lookup in the map. */ @@ -48936,24 +51492,21 @@ var BinaryOpHandler = class { } }; function createBinaryOps(linkNormalizer) { - return BinaryOpHandler.create().compare("*", (a3, b3) => Literals.compare(a3, b3, linkNormalizer)).register("*", "&", "*", (a3, b3) => Literals.isTruthy(a3) && Literals.isTruthy(b3)).register("*", "|", "*", (a3, b3) => Literals.isTruthy(a3) || Literals.isTruthy(b3)).register("number", "+", "number", (a3, b3) => a3 + b3).register("number", "-", "number", (a3, b3) => a3 - b3).register("number", "*", "number", (a3, b3) => a3 * b3).register("number", "/", "number", (a3, b3) => a3 / b3).register("number", "%", "number", (a3, b3) => a3 % b3).register("string", "+", "*", (a3, b3, ctx) => a3 + Literals.toString(b3, stringSettings(ctx.settings))).register("*", "+", "string", (a3, b3, ctx) => Literals.toString(a3, stringSettings(ctx.settings)) + b3).registerComm("string", "*", "number", (a3, b3) => b3 < 0 ? "" : a3.repeat(b3)).register("date", "-", "date", (a3, b3) => { + return BinaryOpHandler.create().compare("*", (a4, b3) => Literals.compare(a4, b3, linkNormalizer)).register("*", "&", "*", (a4, b3) => Literals.isTruthy(a4) && Literals.isTruthy(b3)).register("*", "|", "*", (a4, b3) => Literals.isTruthy(a4) || Literals.isTruthy(b3)).register("number", "+", "number", (a4, b3) => a4 + b3).register("number", "-", "number", (a4, b3) => a4 - b3).register("number", "*", "number", (a4, b3) => a4 * b3).register("number", "/", "number", (a4, b3) => a4 / b3).register("number", "%", "number", (a4, b3) => a4 % b3).register("string", "+", "*", (a4, b3, ctx) => a4 + Literals.toString(b3, stringSettings(ctx.settings))).register("*", "+", "string", (a4, b3, ctx) => Literals.toString(a4, stringSettings(ctx.settings)) + b3).registerComm("string", "*", "number", (a4, b3) => b3 < 0 ? "" : a4.repeat(b3)).register("date", "-", "date", (a4, b3) => { return normalizeDuration( - a3.diff(b3, ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"]) + a4.diff(b3, ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"]) ); - }).register("date", "-", "duration", (a3, b3) => a3.minus(b3)).registerComm("date", "+", "duration", (a3, b3) => a3.plus(b3)).register("duration", "+", "duration", (a3, b3) => normalizeDuration(a3.plus(b3))).register("duration", "-", "duration", (a3, b3) => normalizeDuration(a3.minus(b3))).register("duration", "/", "number", (a3, b3) => normalizeDuration(a3.mapUnits((x4) => x4 / b3))).registerComm("duration", "*", "number", (a3, b3) => normalizeDuration(a3.mapUnits((x4) => x4 * b3))).register("array", "+", "array", (a3, b3) => [].concat(a3).concat(b3)).register("object", "+", "object", (a3, b3) => Object.assign({}, a3, b3)).register("array", "index", "number", (arr, idx) => { - if (idx < 0 || idx >= arr.length) - return null; + }).register("date", "-", "duration", (a4, b3) => a4.minus(b3)).registerComm("date", "+", "duration", (a4, b3) => a4.plus(b3)).register("duration", "+", "duration", (a4, b3) => normalizeDuration(a4.plus(b3))).register("duration", "-", "duration", (a4, b3) => normalizeDuration(a4.minus(b3))).register("duration", "/", "number", (a4, b3) => normalizeDuration(a4.mapUnits((x4) => x4 / b3))).registerComm("duration", "*", "number", (a4, b3) => normalizeDuration(a4.mapUnits((x4) => x4 * b3))).register("array", "+", "array", (a4, b3) => [].concat(a4).concat(b3)).register("object", "+", "object", (a4, b3) => Object.assign({}, a4, b3)).register("array", "index", "number", (arr, idx) => { + if (idx < 0 || idx >= arr.length) return null; return arr[idx]; }).registerResult("array", "index", "string", (arr, key, context) => { - if (arr.length == 0) - return Result.success([]); + if (arr.length == 0) return Result.success([]); const result = []; for (const element of arr) { const resolved = context.evaluate( Expressions.index(Expressions.literal(element), Expressions.literal(key)) ); - if (!resolved.successful) - return Result.failure(resolved.error); + if (!resolved.successful) return Result.failure(resolved.error); result.push(resolved.value); } return Result.success(result); @@ -48974,8 +51527,7 @@ function stringSettings(settings) { } function indexLink(link, key, context) { const object = context.linkHandler.resolve(link); - if (!object) - return Result.success(null); + if (!object) return Result.success(null); return context.evaluate(Expressions.index(Expressions.literal(object), Expressions.literal(key))); } function indexDate(date, key) { @@ -49038,7 +51590,7 @@ var FunctionBuilder = class { this.variants.push({ args: [argType], varargs: false, - impl: (c3, ...rest) => impl(rest[0], c3) + impl: (c4, ...rest) => impl(rest[0], c4) }); return this; } @@ -49047,7 +51599,7 @@ var FunctionBuilder = class { this.variants.push({ args: [arg1, arg2], varargs: false, - impl: (c3, ...rest) => impl(rest[0], rest[1], c3) + impl: (c4, ...rest) => impl(rest[0], rest[1], c4) }); return this; } @@ -49056,7 +51608,7 @@ var FunctionBuilder = class { this.variants.push({ args: [arg1, arg2, arg3], varargs: false, - impl: (c3, ...rest) => impl(rest[0], rest[1], rest[2], c3) + impl: (c4, ...rest) => impl(rest[0], rest[1], rest[2], c4) }); return this; } @@ -49071,23 +51623,22 @@ var FunctionBuilder = class { let types = []; for (let arg of args) { let argType = Literals.typeOf(arg); - if (!argType) - throw Error(`Unrecognized argument type for argument '${arg}'`); + if (!argType) throw Error(`Unrecognized argument type for argument '${arg}'`); types.push(argType); } if (this.vectorized[types.length]) { let vectorizedPositions = this.vectorized[types.length].filter((k4) => types[k4] == "array"); if (vectorizedPositions.length > 0) { - let minLength = vectorizedPositions.map((p4) => args[p4].length).reduce((p4, c3) => Math.min(p4, c3)); + let minLength = vectorizedPositions.map((p3) => args[p3].length).reduce((p3, c4) => Math.min(p3, c4)); let result = []; for (let vpos = 0; vpos < minLength; vpos++) { let subargs = []; - for (let index2 = 0; index2 < args.length; index2++) { - if (vectorizedPositions.includes(index2)) { - let arr = args[index2]; + for (let index = 0; index < args.length; index++) { + if (vectorizedPositions.includes(index)) { + let arr = args[index]; subargs.push(arr[vpos]); } else { - subargs.push(args[index2]); + subargs.push(args[index]); } } result.push(self2(context, ...subargs)); @@ -49095,18 +51646,14 @@ var FunctionBuilder = class { return result; } } - outer: - for (let variant of this.variants) { - if (variant.varargs) - return variant.impl(context, ...args); - if (variant.args.length != types.length) - continue; - for (let index2 = 0; index2 < variant.args.length; index2++) { - if (variant.args[index2] != "*" && variant.args[index2] != types[index2]) - continue outer; - } - return variant.impl(context, ...args); + outer: for (let variant of this.variants) { + if (variant.varargs) return variant.impl(context, ...args); + if (variant.args.length != types.length) continue; + for (let index = 0; index < variant.args.length; index++) { + if (variant.args[index] != "*" && variant.args[index] != types[index]) continue outer; } + return variant.impl(context, ...args); + } throw Error(`No implementation of '${this.name}' found for arguments: ${types.join(", ")}`); }; return self2; @@ -49130,118 +51677,97 @@ var Functions; var DefaultFunctions; ((DefaultFunctions2) => { DefaultFunctions2.typeOf = new FunctionBuilder("type").add1("array", (_3) => "array").add1("boolean", (_3) => "boolean").add1("date", (_3) => "date").add1("duration", (_3) => "duration").add1("function", (_3) => "function").add1("link", (_3) => "link").add1("null", (_3) => "null").add1("number", (_3) => "number").add1("object", (_3) => "object").add1("string", (_3) => "string").add1("*", (_3) => "unknown").build(); - DefaultFunctions2.length = new FunctionBuilder("length").add1("array", (a3) => a3.length).add1("object", (a3) => Object.keys(a3).length).add1("string", (a3) => a3.length).add1("null", (_a) => 0).build(); + DefaultFunctions2.length = new FunctionBuilder("length").add1("array", (a4) => a4.length).add1("object", (a4) => Object.keys(a4).length).add1("string", (a4) => a4.length).add1("null", (_a) => 0).build(); DefaultFunctions2.list = (_context, ...args) => args; DefaultFunctions2.object = (_context, ...args) => { - if (args.length % 2 != 0) - throw Error("object() requires an even number of arguments"); + if (args.length % 2 != 0) throw Error("object() requires an even number of arguments"); let result = {}; - for (let index2 = 0; index2 < args.length; index2 += 2) { - let key = args[index2]; - if (!Literals.isString(key)) - throw Error("keys should be of type string for object(key1, value1, ...)"); - result[key] = args[index2 + 1]; + for (let index = 0; index < args.length; index += 2) { + let key = args[index]; + if (!Literals.isString(key)) throw Error("keys should be of type string for object(key1, value1, ...)"); + result[key] = args[index + 1]; } return result; }; - DefaultFunctions2.link = new FunctionBuilder("link").add1("string", (a3, c3) => Link.file(c3.linkHandler.normalize(a3), false)).add1("link", (a3) => a3).add1("null", (_a) => null).vectorize(1, [0]).add2("string", "string", (t4, d4, c3) => Link.file(c3.linkHandler.normalize(t4), false, d4)).add3("string", "string", "boolean", (t4, d4, e3, c3) => Link.file(c3.linkHandler.normalize(t4), e3, d4)).add2("link", "string", (t4, d4) => t4.withDisplay(d4)).add2("null", "*", () => null).add2("*", "null", (t4, _n2, c3) => (0, DefaultFunctions2.link)(c3, t4)).vectorize(2, [0, 1]).build(); - DefaultFunctions2.embed = new FunctionBuilder("embed").add1("link", (l4) => l4.toEmbed()).vectorize(1, [0]).add2("link", "boolean", (l4, e3, c3) => e3 ? l4.toEmbed() : l4.fromEmbed()).add1("null", () => null).add2("null", "*", () => null).add2("*", "null", () => null).vectorize(2, [0, 1]).build(); + DefaultFunctions2.link = new FunctionBuilder("link").add1("string", (a4, c4) => Link.file(c4.linkHandler.normalize(a4), false)).add1("link", (a4) => a4).add1("null", (_a) => null).vectorize(1, [0]).add2("string", "string", (t4, d3, c4) => Link.file(c4.linkHandler.normalize(t4), false, d3)).add3("string", "string", "boolean", (t4, d3, e3, c4) => Link.file(c4.linkHandler.normalize(t4), e3, d3)).add2("link", "string", (t4, d3) => t4.withDisplay(d3)).add2("null", "*", () => null).add2("*", "null", (t4, _n2, c4) => (0, DefaultFunctions2.link)(c4, t4)).vectorize(2, [0, 1]).build(); + DefaultFunctions2.embed = new FunctionBuilder("embed").add1("link", (l4) => l4.toEmbed()).vectorize(1, [0]).add2("link", "boolean", (l4, e3, c4) => e3 ? l4.toEmbed() : l4.fromEmbed()).add1("null", () => null).add2("null", "*", () => null).add2("*", "null", () => null).vectorize(2, [0, 1]).build(); DefaultFunctions2.date = new FunctionBuilder("date").add1("string", (str) => { let parsedDate = PRIMITIVES.datePlus.parse(str); - if (parsedDate.status) - return parsedDate.value; - else - return null; - }).add1("date", (d4) => d4).add1("link", (link2, c3) => { + if (parsedDate.status) return parsedDate.value; + else return null; + }).add1("date", (d3) => d3).add1("link", (link2, c4) => { var _a, _b; if (link2.display) { let parsedDate2 = PRIMITIVES.date.parse(link2.display); - if (parsedDate2.status) - return parsedDate2.value; + if (parsedDate2.status) return parsedDate2.value; } let parsedDate = PRIMITIVES.date.parse(link2.path); - if (parsedDate.status) - return parsedDate.value; - let resolved = c3.linkHandler.resolve(link2.path); + if (parsedDate.status) return parsedDate.value; + let resolved = c4.linkHandler.resolve(link2.path); if (resolved && ((_a = resolved == null ? void 0 : resolved.file) == null ? void 0 : _a.day)) { return (_b = resolved == null ? void 0 : resolved.file) == null ? void 0 : _b.day; } return null; - }).add2("string", "string", (d4, f4) => { + }).add2("string", "string", (d3, f4) => { if (f4 === "x" || f4 === "X") { - let match4 = NUMBER_REGEX.exec(d4); - if (match4) - return DateTime.fromMillis(Number.parseInt(match4[0]) * (f4 === "X" ? 1e3 : 1)); + let match3 = NUMBER_REGEX.exec(d3); + if (match3) return DateTime.fromMillis(Number.parseInt(match3[0]) * (f4 === "X" ? 1e3 : 1)); else { throw Error("Not a number for format( (${ f }): ${ d }"); } } else { - let parsedDate = DateTime.fromFormat(d4, f4); - if (parsedDate.isValid) - return parsedDate; + let parsedDate = DateTime.fromFormat(d3, f4); + if (parsedDate.isValid) return parsedDate; else { - throw Error(`Can't handle format (${f4}) on date string (${d4})`); + throw Error(`Can't handle format (${f4}) on date string (${d3})`); } } }).add1("null", () => null).vectorize(1, [0]).build(); DefaultFunctions2.dur = new FunctionBuilder("dur").add1("string", (str) => { let parsedDur = PRIMITIVES.duration.parse(str.trim()); - if (parsedDur.status) - return parsedDur.value; - else - return null; - }).add1("duration", (d4) => d4).add1("null", (d4) => d4).vectorize(1, [0]).build(); + if (parsedDur.status) return parsedDur.value; + else return null; + }).add1("duration", (d3) => d3).add1("null", (d3) => d3).vectorize(1, [0]).build(); DefaultFunctions2.dateformat = new FunctionBuilder("dateformat").add2("date", "string", (date2, format) => date2.toFormat(format, { locale: currentLocale() })).add2("null", "string", (_nul, _format) => null).vectorize(2, [0]).build(); - DefaultFunctions2.localtime = new FunctionBuilder("localtime").add1("date", (d4) => d4.toLocal()).add1("null", () => null).vectorize(1, [0]).build(); + DefaultFunctions2.localtime = new FunctionBuilder("localtime").add1("date", (d3) => d3.toLocal()).add1("null", () => null).vectorize(1, [0]).build(); const NUMBER_REGEX = /-?[0-9]+(\.[0-9]+)?/; - DefaultFunctions2.number = new FunctionBuilder("number").add1("number", (a3) => a3).add1("string", (str) => { - let match4 = NUMBER_REGEX.exec(str); - if (match4) - return Number.parseFloat(match4[0]); - else - return null; + DefaultFunctions2.number = new FunctionBuilder("number").add1("number", (a4) => a4).add1("string", (str) => { + let match3 = NUMBER_REGEX.exec(str); + if (match3) return Number.parseFloat(match3[0]); + else return null; }).add1("null", () => null).vectorize(1, [0]).build(); - DefaultFunctions2.string = new FunctionBuilder("string").add1("*", (a3, ctx) => Literals.toString(a3, stringSettings(ctx.settings))).build(); - DefaultFunctions2.round = new FunctionBuilder("round").add1("number", (n3) => Math.round(n3)).add1("null", () => null).vectorize(1, [0]).add2("number", "number", (n3, p4) => { - if (p4 <= 0) - return Math.round(n3); - return parseFloat(n3.toFixed(p4)); + DefaultFunctions2.string = new FunctionBuilder("string").add1("*", (a4, ctx) => Literals.toString(a4, stringSettings(ctx.settings))).build(); + DefaultFunctions2.round = new FunctionBuilder("round").add1("number", (n3) => Math.round(n3)).add1("null", () => null).vectorize(1, [0]).add2("number", "number", (n3, p3) => { + if (p3 <= 0) return Math.round(n3); + return parseFloat(n3.toFixed(p3)); }).add2("number", "null", (n3) => Math.round(n3)).add2("null", "*", () => null).vectorize(2, [0]).build(); - DefaultFunctions2.min = new FunctionBuilder("min").add2("*", "null", (a3, _n2) => a3).add2("null", "*", (_n2, a3) => a3).add2("*", "*", (a3, b3, ctx) => Literals.compare(a3, b3, ctx.linkHandler.normalize) <= 0 ? a3 : b3).add1("array", (a3, ctx) => (0, DefaultFunctions2.min)(ctx, ...a3)).vararg((ctx, ...args) => args.length == 0 ? null : args.reduce((p4, c3) => (0, DefaultFunctions2.min)(ctx, p4, c3))).build(); - DefaultFunctions2.max = new FunctionBuilder("max").add2("*", "null", (a3, _n2) => a3).add2("null", "*", (_n2, a3) => a3).add2("*", "*", (a3, b3, ctx) => Literals.compare(a3, b3, ctx.linkHandler.normalize) > 0 ? a3 : b3).add1("array", (a3, ctx) => (0, DefaultFunctions2.max)(ctx, ...a3)).vararg((ctx, ...args) => args.length == 0 ? null : args.reduce((p4, c3) => (0, DefaultFunctions2.max)(ctx, p4, c3))).build(); + DefaultFunctions2.min = new FunctionBuilder("min").add2("*", "null", (a4, _n2) => a4).add2("null", "*", (_n2, a4) => a4).add2("*", "*", (a4, b3, ctx) => Literals.compare(a4, b3, ctx.linkHandler.normalize) <= 0 ? a4 : b3).add1("array", (a4, ctx) => (0, DefaultFunctions2.min)(ctx, ...a4)).vararg((ctx, ...args) => args.length == 0 ? null : args.reduce((p3, c4) => (0, DefaultFunctions2.min)(ctx, p3, c4))).build(); + DefaultFunctions2.max = new FunctionBuilder("max").add2("*", "null", (a4, _n2) => a4).add2("null", "*", (_n2, a4) => a4).add2("*", "*", (a4, b3, ctx) => Literals.compare(a4, b3, ctx.linkHandler.normalize) > 0 ? a4 : b3).add1("array", (a4, ctx) => (0, DefaultFunctions2.max)(ctx, ...a4)).vararg((ctx, ...args) => args.length == 0 ? null : args.reduce((p3, c4) => (0, DefaultFunctions2.max)(ctx, p3, c4))).build(); DefaultFunctions2.minby = new FunctionBuilder("minby").add2("array", "function", (arr, func, ctx) => { - if (arr.length == 0) - return null; + if (arr.length == 0) return null; let values = arr.map((v3) => { return { value: v3, mapped: func(ctx, v3) }; }); let filtered = values.filter((v3) => !Literals.isNull(v3.mapped)); - if (filtered.length == 0) - return arr[0]; - return filtered.reduce((p4, c3) => { - if (Literals.compare(p4.mapped, c3.mapped, ctx.linkHandler.normalize) <= 0) - return p4; - else - return c3; + if (filtered.length == 0) return arr[0]; + return filtered.reduce((p3, c4) => { + if (Literals.compare(p3.mapped, c4.mapped, ctx.linkHandler.normalize) <= 0) return p3; + else return c4; }).value; }).add2("null", "function", (_arr, _func, _ctx) => null).build(); DefaultFunctions2.maxby = new FunctionBuilder("maxby").add2("array", "function", (arr, func, ctx) => { - if (arr.length == 0) - return null; + if (arr.length == 0) return null; let values = arr.map((v3) => { return { value: v3, mapped: func(ctx, v3) }; }); let filtered = values.filter((v3) => !Literals.isNull(v3.mapped)); - if (filtered.length == 0) - return arr[0]; - return filtered.reduce((p4, c3) => { - if (Literals.compare(p4.mapped, c3.mapped, ctx.linkHandler.normalize) > 0) - return p4; - else - return c3; + if (filtered.length == 0) return arr[0]; + return filtered.reduce((p3, c4) => { + if (Literals.compare(p3.mapped, c4.mapped, ctx.linkHandler.normalize) > 0) return p3; + else return c4; }).value; }).add2("null", "function", (_arr, _func, _ctx) => null).build(); - DefaultFunctions2.striptime = new FunctionBuilder("striptime").add1("date", (d4) => DateTime.fromObject({ year: d4.year, month: d4.month, day: d4.day })).add1("null", (_n2) => null).vectorize(1, [0]).build(); + DefaultFunctions2.striptime = new FunctionBuilder("striptime").add1("date", (d3) => DateTime.fromObject({ year: d3.year, month: d3.month, day: d3.day })).add1("null", (_n2) => null).vectorize(1, [0]).build(); DefaultFunctions2.contains = new FunctionBuilder("contains").add2("array", "*", (l4, elem, context) => l4.some((e3) => (0, DefaultFunctions2.contains)(context, e3, elem))).add2("string", "string", (haystack, needle) => haystack.includes(needle)).add2("object", "string", (obj, key) => key in obj).add2( "*", "*", @@ -49273,50 +51799,42 @@ var DefaultFunctions; (hay, needle) => !!hay.match(new RegExp(".*\\b" + escapeRegex(needle) + "\\b.*", "i")) ).add2("null", "*", (_a, _b) => null).add2("*", "null", (_a, _b) => null).vectorize(2, [0, 1]).build(); DefaultFunctions2.extract = (context, ...args) => { - if (args.length == 0) - return "extract(object, key1, ...) requires at least 1 argument"; + if (args.length == 0) return "extract(object, key1, ...) requires at least 1 argument"; let object2 = args[0]; - if (Literals.isArray(object2)) - return object2.map((v3) => (0, DefaultFunctions2.extract)(context, v3, ...args.slice(1))); + if (Literals.isArray(object2)) return object2.map((v3) => (0, DefaultFunctions2.extract)(context, v3, ...args.slice(1))); let result = {}; - for (let index2 = 1; index2 < args.length; index2++) { - let key = args[index2]; - if (!Literals.isString(key)) - throw Error("extract(object, key1, ...) must be called with string keys"); + for (let index = 1; index < args.length; index++) { + let key = args[index]; + if (!Literals.isString(key)) throw Error("extract(object, key1, ...) must be called with string keys"); result[key] = context.evaluate(Expressions.index(Expressions.literal(object2), Expressions.literal(key))).orElseThrow(); } return result; }; DefaultFunctions2.reverse = new FunctionBuilder("reverse").add1("array", (l4) => { let result = []; - for (let index2 = l4.length - 1; index2 >= 0; index2--) - result.push(l4[index2]); + for (let index = l4.length - 1; index >= 0; index--) result.push(l4[index]); return result; }).add1("string", (l4) => { let result = ""; - for (let c3 = 0; c3 < l4.length; c3++) - result += l4[l4.length - c3 - 1]; + for (let c4 = 0; c4 < l4.length; c4++) result += l4[l4.length - c4 - 1]; return result; }).add1("*", (e3) => e3).build(); - DefaultFunctions2.sort = new FunctionBuilder("sort").add1("array", (list2, context) => (0, DefaultFunctions2.sort)(context, list2, (_ctx, a3) => a3)).add2("array", "function", (list2, key, context) => { + DefaultFunctions2.sort = new FunctionBuilder("sort").add1("array", (list2, context) => (0, DefaultFunctions2.sort)(context, list2, (_ctx, a4) => a4)).add2("array", "function", (list2, key, context) => { let result = [].concat(list2); - result.sort((a3, b3) => { - let akey = key(context, a3); + result.sort((a4, b3) => { + let akey = key(context, a4); let bkey = key(context, b3); let le = context.evaluate(Expressions.binaryOp(Expressions.literal(akey), "<", Expressions.literal(bkey))).orElseThrow(); - if (Literals.isTruthy(le)) - return -1; + if (Literals.isTruthy(le)) return -1; let eq = context.evaluate(Expressions.binaryOp(Expressions.literal(akey), "=", Expressions.literal(bkey))).orElseThrow(); - if (Literals.isTruthy(eq)) - return 0; + if (Literals.isTruthy(eq)) return 0; return 1; }); return result; }).add1("*", (e3) => e3).build(); DefaultFunctions2.regextest = new FunctionBuilder("regextest").add2("string", "string", (pattern, field) => RegExp(pattern).test(field)).add2("null", "*", (_n2, _a) => false).add2("*", "null", (_a, _n2) => false).vectorize(2, [0, 1]).build(); DefaultFunctions2.regexmatch = new FunctionBuilder("regexmatch").add2("string", "string", (pattern, field) => { - if (!pattern.startsWith("^") && !pattern.endsWith("$")) - pattern = "^" + pattern + "$"; + if (!pattern.startsWith("^") && !pattern.endsWith("$")) pattern = "^" + pattern + "$"; return !!field.match(pattern); }).add2("null", "*", (_n2, _a) => false).add2("*", "null", (_a, _n2) => false).vectorize(2, [0, 1]).build(); DefaultFunctions2.regexreplace = new FunctionBuilder("regexreplace").add3("string", "string", "string", (field, pat, rep) => { @@ -49336,7 +51854,7 @@ var DefaultFunctions; DefaultFunctions2.endswith = new FunctionBuilder("endswith").add2("string", "string", (str, ending) => str.endsWith(ending)).add2("null", "*", () => null).add2("*", "null", () => null).vectorize(2, [0, 1]).build(); DefaultFunctions2.padleft = new FunctionBuilder("padleft").add2("string", "number", (str, len) => str.padStart(len, " ")).add3("string", "number", "string", (str, len, padding) => str.padStart(len, padding)).add2("null", "*", () => null).add2("*", "null", () => null).add3("null", "*", "*", () => null).add3("*", "null", "*", () => null).add3("*", "*", "null", () => null).vectorize(2, [0, 1]).vectorize(3, [0, 1, 2]).build(); DefaultFunctions2.padright = new FunctionBuilder("padright").add2("string", "number", (str, len) => str.padEnd(len, " ")).add3("string", "number", "string", (str, len, padding) => str.padEnd(len, padding)).add2("null", "*", () => null).add2("*", "null", () => null).add3("null", "*", "*", () => null).add3("*", "null", "*", () => null).add3("*", "*", "null", () => null).vectorize(2, [0, 1]).vectorize(3, [0, 1, 2]).build(); - DefaultFunctions2.substring = new FunctionBuilder("substring").add2("string", "number", (str, start) => str.substring(start)).add3("string", "number", "number", (str, start, end3) => str.substring(start, end3)).add2("null", "*", () => null).add2("*", "null", () => null).add3("null", "*", "*", () => null).add3("*", "null", "*", () => null).add3("*", "*", "null", () => null).vectorize(2, [0, 1]).vectorize(3, [0, 1, 2]).build(); + DefaultFunctions2.substring = new FunctionBuilder("substring").add2("string", "number", (str, start) => str.substring(start)).add3("string", "number", "number", (str, start, end2) => str.substring(start, end2)).add2("null", "*", () => null).add2("*", "null", () => null).add3("null", "*", "*", () => null).add3("*", "null", "*", () => null).add3("*", "*", "null", () => null).vectorize(2, [0, 1]).vectorize(3, [0, 1, 2]).build(); DefaultFunctions2.truncate = new FunctionBuilder("truncate").add3("string", "number", "string", (str, length3, suffix) => { if (str.length > length3 - suffix.length) { return str.substring(0, Math.max(0, length3 - suffix.length)) + suffix; @@ -49348,36 +51866,31 @@ var DefaultFunctions; DefaultFunctions2.ldefault = new FunctionBuilder("ldefault").add2("*", "*", (v3, bk) => Literals.isNull(v3) ? bk : v3).build(); DefaultFunctions2.choice = new FunctionBuilder("choice").add3("*", "*", "*", (b3, left, right) => Literals.isTruthy(b3) ? left : right).vectorize(3, [0]).build(); DefaultFunctions2.reduce = new FunctionBuilder("reduce").add2("array", "string", (lis, op, context) => { - if (lis.length == 0) - return null; + if (lis.length == 0) return null; if (op != "+" && op != "-" && op != "*" && op != "/" && op != "&" && op != "|") throw Error("reduce(array, op) supports '+', '-', '/', '*', '&', and '|'"); let value = lis[0]; - for (let index2 = 1; index2 < lis.length; index2++) { - value = context.evaluate(Expressions.binaryOp(Expressions.literal(value), op, Expressions.literal(lis[index2]))).orElseThrow(); + for (let index = 1; index < lis.length; index++) { + value = context.evaluate(Expressions.binaryOp(Expressions.literal(value), op, Expressions.literal(lis[index]))).orElseThrow(); } return value; }).add2("array", "function", (lis, op, context) => { - if (lis.length == 0) - return null; + if (lis.length == 0) return null; let value = lis[0]; - for (let index2 = 1; index2 < lis.length; index2++) { - if (Literals.isNull(lis[index2])) - continue; - value = op(context, value, lis[index2]); + for (let index = 1; index < lis.length; index++) { + if (Literals.isNull(lis[index])) continue; + value = op(context, value, lis[index]); } return value; }).add2("null", "*", () => null).add2("*", "null", () => null).vectorize(2, [1]).build(); - DefaultFunctions2.sum = new FunctionBuilder("sum").add1("array", (arr, c3) => (0, DefaultFunctions2.reduce)(c3, arr, "+")).add1("*", (e3) => e3).build(); - DefaultFunctions2.average = new FunctionBuilder("average").add1("array", (array2, context) => { - if (array2.length == 0) - return null; - const add = (0, DefaultFunctions2.sum)(context, array2); - if (add == null || add == void 0) - return null; - return context.evaluate(Expressions.binaryOp(Expressions.literal(add), "/", Expressions.literal(array2.length))).orElseThrow(); + DefaultFunctions2.sum = new FunctionBuilder("sum").add1("array", (arr, c4) => (0, DefaultFunctions2.reduce)(c4, arr, "+")).add1("*", (e3) => e3).build(); + DefaultFunctions2.average = new FunctionBuilder("average").add1("array", (array, context) => { + if (array.length == 0) return null; + const add = (0, DefaultFunctions2.sum)(context, array); + if (add == null || add == void 0) return null; + return context.evaluate(Expressions.binaryOp(Expressions.literal(add), "/", Expressions.literal(array.length))).orElseThrow(); }).add1("*", (e3) => e3).build(); - DefaultFunctions2.product = new FunctionBuilder("product").add1("array", (arr, c3) => (0, DefaultFunctions2.reduce)(c3, arr, "*")).add1("*", (e3) => e3).build(); + DefaultFunctions2.product = new FunctionBuilder("product").add1("array", (arr, c4) => (0, DefaultFunctions2.reduce)(c4, arr, "*")).add1("*", (e3) => e3).build(); DefaultFunctions2.join = new FunctionBuilder("join").add2( "array", "string", @@ -49399,10 +51912,10 @@ var DefaultFunctions; type: link2.type }; }).build(); - DefaultFunctions2.flat = new FunctionBuilder("flat").add1("array", (a3) => { - return a3.flat(); - }).add2("array", "number", (a3, n3) => { - return a3.flat(n3); + DefaultFunctions2.flat = new FunctionBuilder("flat").add1("array", (a4) => { + return a4.flat(); + }).add2("array", "number", (a4, n3) => { + return a4.flat(n3); }).add1("null", () => null).build(); })(DefaultFunctions || (DefaultFunctions = {})); var DEFAULT_FUNCTIONS = { @@ -49503,13 +52016,10 @@ var Evaluator = class { case "literal": return Result.success(expr.value); case "variable": - if (expr.name === Expressions.ROW) - return Result.success(variables.all()); + if (expr.name === Expressions.ROW) return Result.success(variables.all()); const resolved = variables.resolve(expr.name); - if (resolved !== void 0) - return Result.success(resolved); - if (expr.name in this.globals) - return Result.success(this.globals[expr.name]); + if (resolved !== void 0) return Result.success(resolved); + if (expr.name in this.globals) return Result.success(this.globals[expr.name]); return Result.success(null); case "negated": return this.evaluate(expr.child, variables).map((s4) => !Literals.isTruthy(s4)); @@ -49517,14 +52027,13 @@ var Evaluator = class { return Result.flatMap2( this.evaluate(expr.left, variables), this.evaluate(expr.right, variables), - (a3, b3) => this.binaryOps.evaluate(expr.op, a3, b3, this) + (a4, b3) => this.binaryOps.evaluate(expr.op, a4, b3, this) ); case "list": let result = []; for (let child of expr.values) { let subeval = this.evaluate(child, variables); - if (!subeval.successful) - return subeval; + if (!subeval.successful) return subeval; result.push(subeval.value); } return Result.success(result); @@ -49532,8 +52041,7 @@ var Evaluator = class { let objResult = {}; for (let [key, child] of Object.entries(expr.values)) { let subeval = this.evaluate(child, variables); - if (!subeval.successful) - return subeval; + if (!subeval.successful) return subeval; objResult[key] = subeval.value; } return Result.success(objResult); @@ -49547,25 +52055,19 @@ var Evaluator = class { }); case "function": let rawFunc = expr.func.type == "variable" ? Result.success(expr.func.name) : this.evaluate(expr.func, variables); - if (!rawFunc.successful) - return rawFunc; + if (!rawFunc.successful) return rawFunc; let func = rawFunc.value; let args = []; for (let arg of expr.arguments) { let resolved2 = this.evaluate(arg, variables); - if (!resolved2.successful) - return resolved2; + if (!resolved2.successful) return resolved2; args.push(resolved2.value); } let call; - if (Literals.isFunction(func)) - call = func; - else if (Literals.isString(func) && func in this.functions) - call = this.functions[func]; - else if (Literals.isString(func)) - return Result.failure(`Unrecognized function name '${func}'`); - else - return Result.failure(`Cannot call type '${Literals.typeOf(func)}' as a function`); + if (Literals.isFunction(func)) call = func; + else if (Literals.isString(func) && func in this.functions) call = this.functions[func]; + else if (Literals.isString(func)) return Result.failure(`Unrecognized function name '${func}'`); + else return Result.failure(`Cannot call type '${Literals.typeOf(func)}' as a function`); try { return Result.success(call(this, ...args)); } catch (e3) { @@ -49645,19 +52147,15 @@ function denest(query) { case "and": const ands = query.elements.flatMap((element) => { const fixed = denest(element); - if (fixed.type === "and") - return fixed.elements; - else - return [fixed]; + if (fixed.type === "and") return fixed.elements; + else return [fixed]; }); return { type: "and", elements: ands }; case "or": const ors = query.elements.flatMap((element) => { const fixed = denest(element); - if (fixed.type === "or") - return fixed.elements; - else - return [fixed]; + if (fixed.type === "or") return fixed.elements; + else return [fixed]; }); return { type: "or", elements: ors }; case "not": @@ -49679,10 +52177,8 @@ function constantfold(query) { for (const child of query.elements) { const folded2 = constantfold(child); if (folded2.type === "constant") { - if (folded2.constant) - continue; - else - return { type: "constant", constant: false }; + if (folded2.constant) continue; + else return { type: "constant", constant: false }; } achildren.push(folded2); } @@ -49692,10 +52188,8 @@ function constantfold(query) { for (const child of query.elements) { const folded2 = constantfold(child); if (folded2.type === "constant") { - if (!folded2.constant) - continue; - else - return { type: "constant", constant: true }; + if (!folded2.constant) continue; + else return { type: "constant", constant: true }; } ochildren.push(folded2); } @@ -49709,28 +52203,22 @@ function constantfold(query) { case "child-of": const parents = constantfold(query.parents); if (parents.type === "constant") { - if (!parents.constant) - return { type: "constant", constant: false }; - else if (parents.constant && query.inclusive) - return { type: "constant", constant: true }; + if (!parents.constant) return { type: "constant", constant: false }; + else if (parents.constant && query.inclusive) return { type: "constant", constant: true }; } return Object.assign({}, query, { parents }); case "parent-of": const children = constantfold(query.children); if (children.type === "constant") { - if (!children.constant) - return { type: "constant", constant: false }; - else if (children.constant && query.inclusive) - return { type: "constant", constant: true }; + if (!children.constant) return { type: "constant", constant: false }; + else if (children.constant && query.inclusive) return { type: "constant", constant: true }; } return Object.assign({}, query, { children }); case "linked": const source = constantfold(query.source); if (source.type === "constant") { - if (!source.constant) - return { type: "constant", constant: false }; - else if (source.constant && query.inclusive) - return { type: "constant", constant: true }; + if (!source.constant) return { type: "constant", constant: false }; + else if (source.constant && query.inclusive) return { type: "constant", constant: true }; } return Object.assign({}, query, { source }); default: @@ -49749,17 +52237,14 @@ function simplify(query, resolver) { ); const other = []; const primitive = Filters.lazyIntersect(flattened, (element) => { - if (element.type === "filter") - return element.filter; + if (element.type === "filter") return element.filter; else { other.push(element); return void 0; } }); - if (primitive.type === "nothing") - return { type: "filter", filter: Filters.NOTHING }; - else if (primitive.type != "everything") - other.push(FilterTrees.filter(primitive)); + if (primitive.type === "nothing") return { type: "filter", filter: Filters.NOTHING }; + else if (primitive.type != "everything") other.push(FilterTrees.filter(primitive)); return FilterTrees.and(other); }); case "or": @@ -49767,17 +52252,14 @@ function simplify(query, resolver) { const flattened = elements.flatMap((element) => element.type === "or" ? element.elements : [element]); const other = []; const primitive = Filters.lazyUnion(flattened, (element) => { - if (element.type === "filter") - return element.filter; + if (element.type === "filter") return element.filter; else { other.push(element); return void 0; } }); - if (primitive.type === "everything") - return { type: "filter", filter: Filters.EVERYTHING }; - else if (primitive.type != "nothing") - other.push(FilterTrees.filter(primitive)); + if (primitive.type === "everything") return { type: "filter", filter: Filters.EVERYTHING }; + else if (primitive.type != "nothing") other.push(FilterTrees.filter(primitive)); return FilterTrees.or(other); }); case "not": @@ -49797,15 +52279,12 @@ function collapse(tree, resolver, evaluator, limit = Filters.EVERYTHING) { const primitives = tree.elements.filter((elem) => elem.type === "filter").map((f4) => f4.filter); let restrictedLimit = Filters.intersect([limit, ...primitives]); for (const element of tree.elements) { - if (element.type === "filter") - continue; + if (element.type === "filter") continue; const maybeEvaluated = collapse(element, resolver, evaluator, restrictedLimit); - if (!maybeEvaluated.successful) - return maybeEvaluated.cast(); + if (!maybeEvaluated.successful) return maybeEvaluated.cast(); const evaluated = maybeEvaluated.value; restrictedLimit = Filters.intersect([restrictedLimit, evaluated]); - if (restrictedLimit.type === "nothing") - return Result.success(Filters.NOTHING); + if (restrictedLimit.type === "nothing") return Result.success(Filters.NOTHING); } return Result.success(restrictedLimit); case "not": @@ -49821,22 +52300,19 @@ function filterScan(candidates, expr, evaluator, resolver) { const result = /* @__PURE__ */ new Set(); for (const candidate of candidates) { const object = resolver.load(candidate); - if (!object) - continue; + if (!object) continue; const value = evaluator.evaluate(expr, Variables.infer(object)); if (!value.successful) { return Result.failure(`Error while evaluating expression "${Expressions.toString(expr)}": ${value.error}`); } else { - if (Literals.isTruthy(value.value)) - result.add(candidate); + if (Literals.isTruthy(value.value)) result.add(candidate); } } return Result.success(result); } function hasVariables(expr, resolver) { const variables = Expressions.unboundVariables(expr, /* @__PURE__ */ new Set([Expressions.ROW, "this"])); - if (variables.size == 0) - return Filters.EVERYTHING; + if (variables.size == 0) return Filters.EVERYTHING; return Filters.lazyUnion(variables, (variable) => resolver.resolvePrimitive({ type: "field", value: variable })); } var FilterTrees; @@ -49846,28 +52322,20 @@ var FilterTrees; } FilterTrees2.filter = filter; function and(children) { - if (children.length == 0) - return filter(Filters.EVERYTHING); - else if (children.length == 1) - return children[0]; - else - return { type: "and", elements: children }; + if (children.length == 0) return filter(Filters.EVERYTHING); + else if (children.length == 1) return children[0]; + else return { type: "and", elements: children }; } FilterTrees2.and = and; function or(children) { - if (children.length == 0) - return filter(Filters.NOTHING); - else if (children.length == 1) - return children[0]; - else - return { type: "or", elements: children }; + if (children.length == 0) return filter(Filters.NOTHING); + else if (children.length == 1) return children[0]; + else return { type: "or", elements: children }; } FilterTrees2.or = or; function not(child) { - if (child.type === "filter") - return { type: "filter", filter: Filters.negate(child.filter) }; - else - return { type: "not", element: child }; + if (child.type === "filter") return { type: "filter", filter: Filters.negate(child.filter) }; + else return { type: "not", element: child }; } FilterTrees2.not = not; })(FilterTrees || (FilterTrees = {})); @@ -49900,7 +52368,7 @@ var Datastore = class { /** Load an object by ID or list of IDs. */ load(id) { if (Array.isArray(id)) { - return id.map((a3) => this.load(a3)).filter((obj) => obj !== void 0); + return id.map((a4) => this.load(a4)).filter((obj) => obj !== void 0); } return this.objects.get(id); } @@ -49943,8 +52411,7 @@ var Datastore = class { this.ids.add(object.$id); this.objects.set(object.$id, object); if (parent) { - if (!this.children.has(parent.$id)) - this.children.set(parent.$id, /* @__PURE__ */ new Set()); + if (!this.children.has(parent.$id)) this.children.set(parent.$id, /* @__PURE__ */ new Set()); this.children.get(parent.$id).add(object.$id); } this._index(object); @@ -49993,8 +52460,7 @@ var Datastore = class { if (object.$types.contains(FIELDBEARING_TYPE) && "fields" in object) { for (const field of object.fields) { const norm = field.key.toLowerCase(); - if (!this.fields.has(norm)) - this.fields.set(norm, new SetFieldIndex()); + if (!this.fields.has(norm)) this.fields.set(norm, new SetFieldIndex()); this.fields.get(norm).add(object.$id, field.value); } } @@ -50016,8 +52482,7 @@ var Datastore = class { if (object.$types.contains(FIELDBEARING_TYPE) && "fields" in object) { for (const field of object.fields) { const norm = field.key.toLowerCase(); - if (!this.fields.has(norm)) - continue; + if (!this.fields.has(norm)) continue; this.fields.get(norm).delete(object.$id, field.value); } } @@ -50039,29 +52504,22 @@ var Datastore = class { let link = typeof rawLink === "string" ? Link.parseInner(rawLink) : rawLink; if (sourcePath) { const linkdest = this.metadataCache.getFirstLinkpathDest(link.path, sourcePath); - if (linkdest) - link = link.withPath(linkdest.path); + if (linkdest) link = link.withPath(linkdest.path); } const file = this.objects.get(link.path); - if (!file) - return void 0; - if (link.type === "file") - return file; - if (!(file instanceof MarkdownPage)) - return void 0; + if (!file) return void 0; + if (link.type === "file") return file; + if (!(file instanceof MarkdownPage)) return void 0; if (link.type === "header") { const section = file.$sections.find( (sec) => normalizeHeaderForLink(sec.$title) == link.subpath || sec.$title == link.subpath ); - if (section) - return section; - else - return void 0; + if (section) return section; + else return void 0; } else if (link.type === "block") { for (const section of file.$sections) { const block = section.$blocks.find((bl) => bl.$blockId === link.subpath); - if (block) - return block; + if (block) return block; } return void 0; } else { @@ -50076,8 +52534,7 @@ var Datastore = class { var _a; const start = Date.now(); const maybeFilter = this._search(query, settings); - if (!maybeFilter.successful) - return maybeFilter.cast(); + if (!maybeFilter.successful) return maybeFilter.cast(); const result = Filters.resolve(maybeFilter.value, this.ids); const objects = []; let maxRevision = 0; @@ -50113,8 +52570,7 @@ var Datastore = class { }, this.settings ); - if (file) - evaluator.set("this", file); + if (file) evaluator.set("this", file); const resolver = { universe: this.ids, resolve: (leaf) => this._resolveSource(leaf, settings), @@ -50128,18 +52584,15 @@ var Datastore = class { switch (query.type) { case "child-of": const maybeParents = this._search(query.parents, settings); - if (!maybeParents.successful) - return maybeParents.cast(); + if (!maybeParents.successful) return maybeParents.cast(); const parents = maybeParents.value; if (Filters.empty(parents)) { return Result.success(Filters.NOTHING); } else if (parents.type === "everything") { - if (query.inclusive) - return Result.success(Filters.EVERYTHING); + if (query.inclusive) return Result.success(Filters.EVERYTHING); const allChildren = /* @__PURE__ */ new Set(); for (const element of this.objects.values()) { - if (element.$parent) - allChildren.add(element.$id); + if (element.$parent) allChildren.add(element.$id); } return Result.success(Filters.atom(allChildren)); } @@ -50153,14 +52606,12 @@ var Datastore = class { return Result.success(Filters.atom(childResults)); case "parent-of": const maybeChildren = this._search(query.children, settings); - if (!maybeChildren.successful) - return maybeChildren.cast(); + if (!maybeChildren.successful) return maybeChildren.cast(); const children = maybeChildren.value; if (Filters.empty(children)) { return Result.success(Filters.NOTHING); } else if (children.type === "everything") { - if (query.inclusive) - return Result.success(Filters.EVERYTHING); + if (query.inclusive) return Result.success(Filters.EVERYTHING); return Result.success(Filters.atom(new Set(this.children.keys()))); } const resolvedChildren = Filters.resolve(children, this.ids); @@ -50172,19 +52623,14 @@ var Datastore = class { } return Result.success(Filters.atom(parentResults)); case "linked": - if (query.distance && query.distance < 0) - return Result.success(Filters.NOTHING); + if (query.distance && query.distance < 0) return Result.success(Filters.NOTHING); const maybeSources = this._search(query.source, settings); - if (!maybeSources.successful) - return maybeSources.cast(); + if (!maybeSources.successful) return maybeSources.cast(); const sources = maybeSources.value; - if (Filters.empty(sources)) - return Result.success(Filters.NOTHING); + if (Filters.empty(sources)) return Result.success(Filters.NOTHING); else if (sources.type === "everything") { - if (query.inclusive) - return Result.success(Filters.EVERYTHING); - else - return Result.success(Filters.NOTHING); + if (query.inclusive) return Result.success(Filters.EVERYTHING); + else return Result.success(Filters.NOTHING); } const resolvedSources = Filters.resolve(sources, this.ids); const direction = (_a = query.direction) != null ? _a : "both"; @@ -50195,8 +52641,7 @@ var Datastore = class { ); if (!query.inclusive) return Result.success(Filters.atom(Filters.setIntersectNegation(results, resolvedSources))); - else - return Result.success(Filters.atom(results)); + else return Result.success(Filters.atom(results)); default: return Result.success(this._resolvePrimitive(query, settings)); } @@ -50231,12 +52676,10 @@ var Datastore = class { if (query.exact) { toplevel = this.folder.getExact(query.value); } else { - if (query.value == "" || query.value == "/") - return Filters.EVERYTHING; + if (query.value == "" || query.value == "/") return Filters.EVERYTHING; toplevel = this.folder.get(query.value); } - if (toplevel.size == 0) - return Filters.NOTHING; + if (toplevel.size == 0) return Filters.NOTHING; const result = new Set(toplevel); for (let top of toplevel) { for (let child of this._iterateChildren(top)) { @@ -50247,15 +52690,14 @@ var Datastore = class { case "field": const normkey = query.value.toLowerCase(); const fieldIndex = this.fields.get(normkey); - if (fieldIndex == null) - return Filters.NOTHING; + if (fieldIndex == null) return Filters.NOTHING; return Filters.atom(fieldIndex.all()); case "equal-value": return Filters.lazyUnion( query.values, (value) => this._filterFields( query.field, - (index2) => index2.equals(value), + (index) => index.equals(value), (field) => Literals.compare(value, field.value) == 0 ) ); @@ -50264,22 +52706,17 @@ var Datastore = class { /** Filter documents by field values, using the fast lookup if it returns a result and otherwise filtering over every document using the slow predicate. */ _filterFields(key, fast, slow) { const normkey = key.toLowerCase(); - const index2 = this.fields.get(normkey); - if (index2 == null) - return Filters.NOTHING; - const fastlookup = fast(index2); - if (fastlookup != null) - return Filters.atom(fastlookup); + const index = this.fields.get(normkey); + if (index == null) return Filters.NOTHING; + const fastlookup = fast(index); + if (fastlookup != null) return Filters.atom(fastlookup); const matches = /* @__PURE__ */ new Set(); - for (const objectId of index2.all()) { + for (const objectId of index.all()) { const object = this.objects.get(objectId); - if (!object || !object.$types.contains(FIELDBEARING_TYPE)) - continue; + if (!object || !object.$types.contains(FIELDBEARING_TYPE)) continue; const field = object.field(normkey); - if (!field) - continue; - if (slow(field)) - matches.add(objectId); + if (!field) continue; + if (slow(field)) matches.add(objectId); } return Filters.atom(matches); } @@ -50288,23 +52725,18 @@ var Datastore = class { * so remove them afterwards if you do not want them. */ _traverseLinked(sourceIds, distance, adjacent) { - if (distance < 0) - return /* @__PURE__ */ new Set(); - if (sourceIds.size == 0) - return /* @__PURE__ */ new Set(); + if (distance < 0) return /* @__PURE__ */ new Set(); + if (sourceIds.size == 0) return /* @__PURE__ */ new Set(); const visited = new Set(sourceIds); const queue = new FlatQueue(); - for (const element of sourceIds) - queue.push(element, 0); + for (const element of sourceIds) queue.push(element, 0); while (queue.length > 0) { const dist = queue.peekValue(); const element = queue.pop(); for (const neighbor of adjacent(element)) { - if (visited.has(neighbor)) - continue; + if (visited.has(neighbor)) continue; visited.add(neighbor); - if (dist < distance) - queue.push(neighbor, dist + 1); + if (dist < distance) queue.push(neighbor, dist + 1); } } return visited; @@ -50312,8 +52744,7 @@ var Datastore = class { /** Iterate all linked objects for the given object. */ *_iterateAdjacentLinked(id, direction) { const object = this.objects.get(id); - if (!object) - return; + if (!object) return; if ((direction === "both" || direction === "incoming") && "$link" in object && object["$link"]) { const incoming = this.links.get(object.$link.obsidianLink()); if (incoming) { @@ -50325,8 +52756,7 @@ var Datastore = class { if ((direction === "both" || direction === "outgoing") && object.$types.contains(LINKABLE_TYPE) && iterableExists(object, "$links")) { for (const link of object.$links) { const resolved = this.resolveLink(link); - if (resolved) - yield resolved.$id; + if (resolved) yield resolved.$id; } } } @@ -50391,10 +52821,8 @@ var LocalStorageCache = class { /** Drop old file keys that no longer exist. */ async synchronize(existing) { let keys = new Set(await this.allFiles()); - for (let exist of existing) - keys.delete(exist); - for (let key of keys) - await this.persister.removeItem(this.fileKey(key)); + for (let exist of existing) keys.delete(exist); + for (let key of keys) await this.persister.removeItem(this.fileKey(key)); return keys; } /** Obtain a list of all metadata keys. */ @@ -50423,7 +52851,7 @@ function inlineWorker(scriptText) { // src/index/web-worker/importer.worker.ts function Worker2() { - return inlineWorker('var il=Object.create;var Ws=Object.defineProperty,ol=Object.defineProperties,al=Object.getOwnPropertyDescriptor,ul=Object.getOwnPropertyDescriptors,ll=Object.getOwnPropertyNames,Vr=Object.getOwnPropertySymbols,cl=Object.getPrototypeOf,Hs=Object.prototype.hasOwnProperty,vo=Object.prototype.propertyIsEnumerable;var Oo=(n,e,t)=>e in n?Ws(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,$=(n,e)=>{for(var t in e||(e={}))Hs.call(e,t)&&Oo(n,t,e[t]);if(Vr)for(var t of Vr(e))vo.call(e,t)&&Oo(n,t,e[t]);return n},Fe=(n,e)=>ol(n,ul(e));var Ks=(n,e)=>{var t={};for(var r in n)Hs.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&Vr)for(var r of Vr(n))e.indexOf(r)<0&&vo.call(n,r)&&(t[r]=n[r]);return t};var Io=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var fl=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ll(e))!Hs.call(n,s)&&s!==t&&Ws(n,s,{get:()=>e[s],enumerable:!(r=al(e,s))||r.enumerable});return n};var qr=(n,e,t)=>(t=n!=null?il(cl(n)):{},fl(e||!n||!n.__esModule?Ws(t,"default",{value:n,enumerable:!0}):t,n));var ns=Io((hr,Ii)=>{(function(n,e){typeof hr=="object"&&typeof Ii=="object"?Ii.exports=e():typeof define=="function"&&define.amd?define([],e):typeof hr=="object"?hr.Parsimmon=e():n.Parsimmon=e()})(typeof self!="undefined"?self:hr,function(){return function(n){var e={};function t(r){if(e[r])return e[r].exports;var s=e[r]={i:r,l:!1,exports:{}};return n[r].call(s.exports,s,s.exports,t),s.l=!0,s.exports}return t.m=n,t.c=e,t.d=function(r,s,i){t.o(r,s)||Object.defineProperty(r,s,{configurable:!1,enumerable:!0,get:i})},t.r=function(r){Object.defineProperty(r,"__esModule",{value:!0})},t.n=function(r){var s=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(s,"a",s),s},t.o=function(r,s){return Object.prototype.hasOwnProperty.call(r,s)},t.p="",t(t.s=0)}([function(n,e,t){"use strict";function r(c){if(!(this instanceof r))return new r(c);this._=c}var s=r.prototype;function i(c,m){for(var E=0;E>7),buf:function(I){var N=o(function(L,q,ne,Se){return L.concat(ne===Se.length-1?Buffer.from([q,0]).readUInt16BE(0):Se.readUInt16BE(ne))},[],I);return Buffer.from(a(function(L){return(L<<1&65535)>>8},N))}(E.buf)}}),E}function l(){return typeof Buffer!="undefined"}function d(){if(!l())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function h(c){d();var m=o(function(N,L){return N+L},0,c);if(m%8!=0)throw new Error("The bits ["+c.join(", ")+"] add up to "+m+" which is not an even number of bytes; the total should be divisible by 8");var E,k=m/8,I=(E=function(N){return N>48},o(function(N,L){return N||(E(L)?L:N)},null,c));if(I)throw new Error(I+" bit range requested exceeds 48 bit (6 byte) Number max.");return new r(function(N,L){var q=k+L;return q>N.length?T(L,k.toString()+" bytes"):w(q,o(function(ne,Se){var ge=u(Se,ne.buf);return{coll:ne.coll.concat(ge.v),buf:ge.buf}},{coll:[],buf:N.slice(L,q)},c).coll)})}function p(c,m){return new r(function(E,k){return d(),k+m>E.length?T(k,m+" bytes for "+c):w(k+m,E.slice(k,k+m))})}function f(c,m){if(typeof(E=m)!="number"||Math.floor(E)!==E||m<0||m>6)throw new Error(c+" requires integer length in range [0, 6].");var E}function F(c){return f("uintBE",c),p("uintBE("+c+")",c).map(function(m){return m.readUIntBE(0,c)})}function g(c){return f("uintLE",c),p("uintLE("+c+")",c).map(function(m){return m.readUIntLE(0,c)})}function y(c){return f("intBE",c),p("intBE("+c+")",c).map(function(m){return m.readIntBE(0,c)})}function S(c){return f("intLE",c),p("intLE("+c+")",c).map(function(m){return m.readIntLE(0,c)})}function O(c){return c instanceof r}function v(c){return{}.toString.call(c)==="[object Array]"}function D(c){return l()&&Buffer.isBuffer(c)}function w(c,m){return{status:!0,index:c,value:m,furthest:-1,expected:[]}}function T(c,m){return v(m)||(m=[m]),{status:!1,index:-1,value:null,furthest:c,expected:m}}function C(c,m){if(!m||c.furthest>m.furthest)return c;var E=c.furthest===m.furthest?function(k,I){if(function(){if(r._supportsSet!==void 0)return r._supportsSet;var ht=typeof Set!="undefined";return r._supportsSet=ht,ht}()&&Array.from){for(var N=new Set(k),L=0;L=0;){if(L in E){k=E[L].line,N===0&&(N=E[L].lineStart);break}(c.charAt(L)===`\n`||c.charAt(L)==="\\r"&&c.charAt(L+1)!==`\n`)&&(I++,N===0&&(N=L+1)),L--}var q=k+I,ne=m-N;return E[m]={line:q,lineStart:N},{offset:m,line:q+1,column:ne+1}}function j(c){if(!O(c))throw new Error("not a parser: "+c)}function z(c,m){return typeof c=="string"?c.charAt(m):c[m]}function re(c){if(typeof c!="number")throw new Error("not a number: "+c)}function le(c){if(typeof c!="function")throw new Error("not a function: "+c)}function x(c){if(typeof c!="string")throw new Error("not a string: "+c)}var R=2,Q=3,ce=8,Ee=5*ce,Ve=4*ce,tn=" ";function Bt(c,m){return new Array(m+1).join(c)}function Pt(c,m,E){var k=m-c.length;return k<=0?c:Bt(E,k)+c}function Ae(c,m,E,k){return{from:c-m>0?c-m:0,to:c+E>k?k:c+E}}function $t(c,m){var E,k,I,N,L,q=m.index,ne=q.offset,Se=1;if(ne===c.length)return"Got the end of the input";if(D(c)){var ge=ne-ne%ce,dt=ne-ge,ve=Ae(ge,Ee,Ve+ce,c.length),ht=a(function(de){return a(function(rn){return Pt(rn.toString(16),2,"0")},de)},function(de,rn){var sn=de.length,Vt=[],on=0;if(sn<=rn)return[de.slice()];for(var an=0;an=4&&(E+=1),Se=2,I=a(function(de){return de.length<=4?de.join(" "):de.slice(0,4).join(" ")+" "+de.slice(4).join(" ")},ht),(L=(8*(N.to>0?N.to-1:N.to)).toString(16).length)<2&&(L=2)}else{var nn=c.split(/\\r\\n|[\\n\\r\\u2028\\u2029]/);E=q.column-1,k=q.line-1,N=Ae(k,R,Q,nn.length),I=nn.slice(N.from,N.to),L=N.to.toString().length}var sl=k-N.from;return D(c)&&(L=(8*(N.to>0?N.to-1:N.to)).toString(16).length)<2&&(L=2),o(function(de,rn,sn){var Vt,on=sn===sl,an=on?"> ":tn;return Vt=D(c)?Pt((8*(N.from+sn)).toString(16),L,"0"):Pt((N.from+sn+1).toString(),L," "),[].concat(de,[an+Vt+" | "+rn],on?[tn+Bt(" ",L)+" | "+Pt("",E," ")+Bt("^",Se)]:[])},[],I).join(`\n`)}function bo(c,m){return[`\n`,"-- PARSING FAILED "+Bt("-",50),`\n\n`,$t(c,m),`\n\n`,(E=m.expected,E.length===1?`Expected:\n\n`+E[0]:`Expected one of the following: \n\n`+E.join(", ")),`\n`].join("");var E}function Eo(c){return c.flags!==void 0?c.flags:[c.global?"g":"",c.ignoreCase?"i":"",c.multiline?"m":"",c.unicode?"u":"",c.sticky?"y":""].join("")}function Br(){for(var c=[].slice.call(arguments),m=c.length,E=0;E=2?re(m):m=0;var E=function(I){return RegExp("^(?:"+I.source+")",Eo(I))}(c),k=""+c;return r(function(I,N){var L=E.exec(I.slice(N));if(L){if(0<=m&&m<=L.length){var q=L[0],ne=L[m];return w(N+q.length,ne)}return T(N,"valid match group (0 to "+L.length+") in "+k)}return T(N,k)})}function jt(c){return r(function(m,E){return w(E,c)})}function $r(c){return r(function(m,E){return T(E,c)})}function Rr(c){if(O(c))return r(function(m,E){var k=c._(m,E);return k.index=E,k.value="",k});if(typeof c=="string")return Rr(_n(c));if(c instanceof RegExp)return Rr(ft(c));throw new Error("not a string, regexp, or parser: "+c)}function wo(c){return j(c),r(function(m,E){var k=c._(m,E),I=m.slice(E,k.index);return k.status?T(E,\'not "\'+I+\'"\'):w(E,null)})}function jr(c){return le(c),r(function(m,E){var k=z(m,E);return E=c.length?T(m,"any character/byte"):w(m+1,z(c,m))}),Gu=r(function(c,m){return w(c.length,c.slice(m))}),Us=r(function(c,m){return m=0}).desc(m)},r.optWhitespace=tl,r.Parser=r,r.range=function(c,m){return jr(function(E){return c<=E&&E<=m}).desc(c+"-"+m)},r.regex=ft,r.regexp=ft,r.sepBy=Fo,r.sepBy1=Vs,r.seq=Br,r.seqMap=Rt,r.seqObj=function(){for(var c,m={},E=0,k=(c=arguments,Array.prototype.slice.call(c)),I=k.length,N=0;N255)throw new Error("Value specified to byte constructor ("+c+"=0x"+c.toString(16)+") is larger in value than a single byte.");var m=(c>15?"0x":"0x0")+c.toString(16);return r(function(E,k){var I=z(E,k);return I===c?w(k+1,I):T(k,m)})},buffer:function(c){return p("buffer",c).map(function(m){return Buffer.from(m)})},encodedString:function(c,m){return p("string",m).map(function(E){return E.toString(c)})},uintBE:F,uint8BE:F(1),uint16BE:F(2),uint32BE:F(4),uintLE:g,uint8LE:g(1),uint16LE:g(2),uint32LE:g(4),intBE:y,int8BE:y(1),int16BE:y(2),int32BE:y(4),intLE:S,int8LE:S(1),int16LE:S(2),int32LE:S(4),floatBE:p("floatBE",4).map(function(c){return c.readFloatBE(0)}),floatLE:p("floatLE",4).map(function(c){return c.readFloatLE(0)}),doubleBE:p("doubleBE",8).map(function(c){return c.readDoubleBE(0)}),doubleLE:p("doubleLE",8).map(function(c){return c.readDoubleLE(0)})},n.exports=r}])})});var Mu=Io(Le=>{"use strict";var gf=Le&&Le.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,s){r.__proto__=s}||function(r,s){for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(r[i]=s[i])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(Le,"__esModule",{value:!0});Le.EmptyBTree=Le.asSet=Le.simpleComparator=Le.defaultComparator=void 0;function Nu(n,e){if(Number.isFinite(n)&&Number.isFinite(e))return n-e;var t=typeof n,r=typeof e;if(t!==r)return te?1:n===e?0:Number.isNaN(n)?Number.isNaN(e)?0:-1:Number.isNaN(e)?1:Array.isArray(n)?0:Number.NaN}Le.defaultComparator=Nu;function bf(n,e){return n>e?1:n=4?Math.min(r,256):32,this._compare=t||Nu,e&&this.setPairs(e)}return Object.defineProperty(n.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"length",{get:function(){return this._size},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"isEmpty",{get:function(){return this._size===0},enumerable:!1,configurable:!0}),n.prototype.clear=function(){this._root=uo,this._size=0},n.prototype.forEach=function(e,t){var r=this;return t!==void 0&&(e=e.bind(t)),this.forEachPair(function(s,i){return e(i,s,r)})},n.prototype.forEachPair=function(e,t){var r=this.minKey(),s=this.maxKey();return this.forRange(r,s,!0,e,t)},n.prototype.get=function(e,t){return this._root.get(e,t,this)},n.prototype.set=function(e,t,r){this._root.isShared&&(this._root=this._root.clone());var s=this._root.set(e,t,r,this);return s===!0||s===!1?s:(this._root=new Ff([this._root,s]),!0)},n.prototype.has=function(e){return this.forRange(e,e,!0,void 0)!==0},n.prototype.delete=function(e){return this.editRange(e,e,!0,vu)!==0},n.prototype.with=function(e,t,r){var s=this.clone();return s.set(e,t,r)||r?s:this},n.prototype.withPairs=function(e,t){var r=this.clone();return r.setPairs(e,t)!==0||t?r:this},n.prototype.withKeys=function(e,t){for(var r=this.clone(),s=!1,i=0;i=s.length){a=3;continue e}if(++i[l]0;l--)s[l-1]=s[l][i[l]].children,i[l-1]=0;o=s[0][i[0]],u=-1,a=t!==void 0?1:0;continue;case 3:return{done:!0,value:void 0}}})},n.prototype.entriesReversed=function(e,t,r){if(e===void 0&&(e=this.maxKey(),r=void 0,e===void 0))return Ln();var s=this.findPath(e)||this.findPath(this.maxKey()),i=s.nodequeue,o=s.nodeindex,a=s.leaf;Ne(!i[0]||a===i[0][o[0]],"wat!");var u=a.indexOf(e,0,this._compare);!r&&u=0)return{done:!1,value:[a.keys[u],a.values[u]]};l=2;continue;case 1:if(--u>=0)return t[0]=a.keys[u],t[1]=a.values[u],{done:!1,value:t};l=2;case 2:for(var d=-1;;){if(++d>=i.length){l=3;continue e}if(--o[d]>=0)break}for(;d>0;d--)i[d-1]=i[d][o[d]].children,o[d-1]=i[d-1].length-1;a=i[0][o[0]],u=a.keys.length,l=t!==void 0?1:0;continue;case 3:return{done:!0,value:void 0}}})},n.prototype.findPath=function(e){var t=this._root,r,s;if(t.isLeaf)r=Iu,s=Iu;else{r=[],s=[];for(var i=0;!t.isLeaf;i++){if(r[i]=t.children,s[i]=e===void 0?0:t.indexOf(e,0,this._compare),s[i]>=r[i].length)return;t=r[i][s[i]]}r.reverse(),s.reverse()}return{nodequeue:r,nodeindex:s,leaf:t}},n.prototype.diffAgainst=function(e,t,r,s){if(e._compare!==this._compare)throw new Error("Tree comparators are not the same.");if(this.isEmpty||e.isEmpty)return this.isEmpty&&e.isEmpty?void 0:this.isEmpty?r===void 0?void 0:n.stepToEnd(n.makeDiffCursor(e),r):t===void 0?void 0:n.stepToEnd(n.makeDiffCursor(this),t);for(var i=this._compare,o=n.makeDiffCursor(this),a=n.makeDiffCursor(e),u=!0,l=!0,d=n.compare(o,a,i);u&&l;){var h=n.compare(o,a,i),p=o.leaf,f=o.internalSpine,F=o.levelIndices,g=a.leaf,y=a.internalSpine,S=a.levelIndices;if(p||g){if(d!==0){if(h===0){if(p&&g&&s){var O=p.values[F[F.length-1]],v=g.values[S[S.length-1]];if(!Object.is(O,v)){var D=s(o.currentKey,O,v);if(D&&D.break)return D.break}}}else if(h>0){if(g&&r){var w=g.values[S[S.length-1]],D=r(a.currentKey,w);if(D&&D.break)return D.break}}else if(t&&p&&d!==0){var O=p.values[F[F.length-1]],D=t(o.currentKey,O);if(D&&D.break)return D.break}}}else if(!p&&!g&&h===0){var T=f.length-1,C=y.length-1,M=f[T][F[T]],V=y[C][S[C]];if(V===M){d=0,u=n.step(o,!0),l=n.step(a,!0);continue}}d=h,h<0?u=n.step(o):l=n.step(a)}if(u&&t)return n.finishCursorWalk(o,a,i,t);if(l&&r)return n.finishCursorWalk(a,o,i,r)},n.finishCursorWalk=function(e,t,r,s){var i=n.compare(e,t,r);if(i===0){if(!n.step(e))return}else i<0&&Ne(!1,"cursor walk terminated early");return n.stepToEnd(e,s)},n.stepToEnd=function(e,t){for(var r=!0;r;){var s=e.leaf,i=e.levelIndices,o=e.currentKey;if(s){var a=s.values[i[i.length-1]],u=t(o,a);if(u&&u.break)return u.break}r=n.step(e)}},n.makeDiffCursor=function(e){var t=e._root,r=e.height;return{height:r,internalSpine:[[t]],levelIndices:[0],leaf:void 0,currentKey:t.maxKey()}},n.step=function(e,t){var r=e.internalSpine,s=e.levelIndices,i=e.leaf;if(t===!0||i){var o=s.length;if(t===!0||s[o-1]===0){var a=r.length;if(a===0)return!1;for(var u=a-1,l=u;l>=0;){if(s[l]>0)return ls?wf:void 0}),i},n.prototype.setPairs=function(e,t){for(var r=0,s=0;s>1;i0)o=a;else{if(u===0)return a;if(e===e)return s.length;throw new Error("BTree: NaN was used as a key")}a=i+o>>1}return a^t},n.prototype.minKey=function(){return this.keys[0]},n.prototype.minPair=function(e){if(this.keys.length!==0)return e[0]=this.keys[0],e[1]=this.values[0],e},n.prototype.maxPair=function(e){if(this.keys.length!==0){var t=this.keys.length-1;return e[0]=this.keys[t],e[1]=this.values[t],e}},n.prototype.clone=function(){var e=this.values;return new n(this.keys.slice(0),e===be?e:e.slice(0))},n.prototype.greedyClone=function(e){return this.isShared&&!e?this:this.clone()},n.prototype.get=function(e,t,r){var s=this.indexOf(e,-1,r._compare);return s<0?t:this.values[s]},n.prototype.getPairOrNextLower=function(e,t,r,s){var i=this.indexOf(e,-1,t),o=i<0?~i-1:r?i:i-1;if(o>=0)return s[0]=this.keys[o],s[1]=this.values[o],s},n.prototype.getPairOrNextHigher=function(e,t,r,s){var i=this.indexOf(e,-1,t),o=i<0?~i:r?i:i+1,a=this.keys;if(o0,"empty leaf at depth",e,"and baseIndex",r),s},n.prototype.set=function(e,t,r,s){var i=this.indexOf(e,-1,s._compare);if(i<0){if(i=~i,s._size++,this.keys.lengththis.keys.length&&(i-=this.keys.length,a=o),a.insertInLeaf(i,e,t,s),o}else return r!==!1&&(t!==void 0&&this.reifyValues(),this.keys[i]=e,this.values[i]=t),!1},n.prototype.reifyValues=function(){return this.values===be?this.values=this.values.slice(0,this.keys.length):this.values},n.prototype.insertInLeaf=function(e,t,r,s){if(this.keys.splice(e,0,t),this.values===be){for(;be.length>1,t=this.keys.splice(e),r=this.values===be?be:this.values.splice(e);return new n(t,r)},n.prototype.forRange=function(e,t,r,s,i,o,a){var u=i._compare,l,d;if(t===e){if(!r||(d=(l=this.indexOf(e,-1,u))+1,l<0))return o}else l=this.indexOf(e,0,u),d=this.indexOf(t,-1,u),d<0?d=~d:r===!0&&d++;var h=this.keys,p=this.values;if(a!==void 0)for(var f=l;f=a.length)return this.maxPair(i);var u=a[o].getPairOrNextLower(t,r,s,i);return u===void 0&&o>0?a[o-1].maxPair(i):u},e.prototype.getPairOrNextHigher=function(t,r,s,i){var o=this.indexOf(t,0,r),a=this.children,u=a.length;if(!(o>=u)){var l=a[o].getPairOrNextHigher(t,r,s,i);return l===void 0&&o1||t>0,"internal node has length",i,"at depth",t,"baseIndex",s);for(var a=0,u=this.children,l=this.keys,d=0,h=0;h=d,"wtf",s),Ne(h===0||u[h-1].constructor===u[h].constructor,"type mismatch, baseIndex:",s),u[h].maxKey()!=l[h]&&Ne(!1,"keys[",h,"] =",l[h],"is wrong, should be ",u[h].maxKey(),"at depth",t,"baseIndex",s),h===0||r._compare(l[h-1],l[h])<0||Ne(!1,"sort violation at depth",t,"index",h,"keys",l[h-1],l[h]);var p=d===0;return(p||d>r.maxNodeSize*o)&&Ne(!1,p?"too few":"too many","children (",d,a,") at depth",t,"maxNodeSize:",r.maxNodeSize,"children.length:",o,"baseIndex:",s),a},e.prototype.set=function(t,r,s,i){var o=this.children,a=i._maxNodeSize,u=i._compare,l=Math.min(this.indexOf(t,0,u),o.length-1),d=o[l];if(d.isShared&&(o[l]=d=d.clone()),d.keys.length>=a){var h;l>0&&(h=o[l-1]).keys.length0&&(F=f,l-=this.keys.length),F.insert(l+1,p),f},e.prototype.insert=function(t,r){this.children.splice(t,0,r),this.keys.splice(t,0,r.maxKey())},e.prototype.splitOffRightSide=function(){var t=this.children.length>>1;return new e(this.children.splice(t),this.keys.splice(t))},e.prototype.takeFromRight=function(t){this.keys.push(t.keys.shift()),this.children.push(t.children.shift())},e.prototype.takeFromLeft=function(t){this.keys.unshift(t.keys.pop()),this.children.unshift(t.children.pop())},e.prototype.forRange=function(t,r,s,i,o,a,u){var l=o._compare,d=this.keys,h=this.children,p=this.indexOf(t,0,l),f=p,F=Math.min(r===t?p:this.indexOf(r,0,l),d.length-1);if(i){if(f<=F)try{for(;f<=F;f++){h[f].isShared&&(h[f]=h[f].clone());var g=h[f].forRange(t,r,s,i,o,a,u);if(d[f]=h[f].maxKey(),typeof g!="number")return g;a=g}}finally{var y=o._maxNodeSize>>1;for(p>0&&p--,f=F;f>=p;f--)h[f].keys.length<=y&&(h[f].keys.length!==0?this.tryMerge(f,o._maxNodeSize):(d.splice(f,1),h.splice(f,1)));h.length!==0&&h[0].keys.length===0&&Ne(!1,"emptiness bug")}}else for(;f<=F;f++){var g=h[f].forRange(t,r,s,i,o,a,u);if(typeof g!="number")return g;a=g}return a},e.prototype.tryMerge=function(t,r){var s=this.children;return t>=0&&t+1{let i=[e(s),s];return r&&t(r[0],i[0])===r[0]?r:i},null)[1]}function Mo(n,e){return e.reduce((t,r)=>(t[r]=n[r],t),{})}function kt(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function rt(n,e,t){return nr(n)&&n>=e&&n<=t}function dl(n,e){return n-e*Math.floor(n/e)}function ie(n,e=2){let t=n<0,r;return t?r="-"+(""+-n).padStart(e,"0"):r=(""+n).padStart(e,"0"),r}function Dt(n){if(!(U(n)||n===null||n===""))return parseInt(n,10)}function Ct(n){if(!(U(n)||n===null||n===""))return parseFloat(n)}function rr(n){if(!(U(n)||n===null||n==="")){let e=parseFloat("0."+n)*1e3;return Math.floor(e)}}function cn(n,e,t=!1){let r=10**e;return(t?Math.trunc:Math.round)(n*r)/r}function qt(n){return n%4===0&&(n%100!==0||n%400===0)}function Ut(n){return qt(n)?366:365}function fn(n,e){let t=dl(e-1,12)+1,r=n+(e-t)/12;return t===2?qt(r)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][t-1]}function sr(n){let e=Date.UTC(n.year,n.month-1,n.day,n.hour,n.minute,n.second,n.millisecond);return n.year<100&&n.year>=0&&(e=new Date(e),e.setUTCFullYear(e.getUTCFullYear()-1900)),+e}function dn(n){let e=(n+Math.floor(n/4)-Math.floor(n/100)+Math.floor(n/400))%7,t=n-1,r=(t+Math.floor(t/4)-Math.floor(t/100)+Math.floor(t/400))%7;return e===4||r===3?53:52}function ir(n){return n>99?n:n>60?1900+n:2e3+n}function Jr(n,e,t,r=null){let s=new Date(n),i={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(i.timeZone=r);let o=$({timeZoneName:e},i),a=new Intl.DateTimeFormat(t,o).formatToParts(s).find(u=>u.type.toLowerCase()==="timezonename");return a?a.value:null}function Wt(n,e){let t=parseInt(n,10);Number.isNaN(t)&&(t=0);let r=parseInt(e,10)||0,s=t<0||Object.is(t,-0)?-r:r;return t*60+s}function Zs(n){let e=Number(n);if(typeof n=="boolean"||n===""||Number.isNaN(e))throw new De(`Invalid unit value ${n}`);return e}function hn(n,e){let t={};for(let r in n)if(kt(n,r)){let s=n[r];if(s==null)continue;t[e(r)]=Zs(s)}return t}function xt(n,e){let t=Math.trunc(Math.abs(n/60)),r=Math.trunc(Math.abs(n%60)),s=n>=0?"+":"-";switch(e){case"short":return`${s}${ie(t,2)}:${ie(r,2)}`;case"narrow":return`${s}${t}${r>0?`:${r}`:""}`;case"techie":return`${s}${ie(t,2)}${ie(r,2)}`;default:throw new RangeError(`Value format ${e} is out of range for property format`)}}function or(n){return Mo(n,["hour","minute","second","millisecond"])}var Qs=/[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;var hl=["January","February","March","April","May","June","July","August","September","October","November","December"],Xs=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],pl=["J","F","M","A","M","J","J","A","S","O","N","D"];function ei(n){switch(n){case"narrow":return[...pl];case"short":return[...Xs];case"long":return[...hl];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var ti=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],ni=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],ml=["M","T","W","T","F","S","S"];function ri(n){switch(n){case"narrow":return[...ml];case"short":return[...ni];case"long":return[...ti];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var si=["AM","PM"],Dl=["Before Christ","Anno Domini"],yl=["BC","AD"],gl=["B","A"];function ii(n){switch(n){case"narrow":return[...gl];case"short":return[...yl];case"long":return[...Dl];default:return null}}function _o(n){return si[n.hour<12?0:1]}function Bo(n,e){return ri(e)[n.weekday-1]}function Po(n,e){return ei(e)[n.month-1]}function $o(n,e){return ii(e)[n.year<0?0:1]}function Ro(n,e,t="always",r=!1){let s={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},i=["hours","minutes","seconds"].indexOf(n)===-1;if(t==="auto"&&i){let h=n==="days";switch(e){case 1:return h?"tomorrow":`next ${s[n][0]}`;case-1:return h?"yesterday":`last ${s[n][0]}`;case 0:return h?"today":`this ${s[n][0]}`;default:}}let o=Object.is(e,-0)||e<0,a=Math.abs(e),u=a===1,l=s[n],d=r?u?l[1]:l[2]||l[1]:u?s[n][0]:n;return o?`${a} ${d} ago`:`in ${a} ${d}`}function jo(n,e){let t="";for(let r of n)r.literal?t+=r.val:t+=e(r.val);return t}var bl={D:ln,DD:Pn,DDD:$n,DDDD:Rn,t:jn,tt:Vn,ttt:qn,tttt:Un,T:Wn,TT:Hn,TTT:Kn,TTTT:Jn,f:zn,ff:Gn,fff:Qn,ffff:er,F:Yn,FF:Zn,FFF:Xn,FFFF:tr},fe=class{static create(e,t={}){return new fe(e,t)}static parseFormat(e){let t=null,r="",s=!1,i=[];for(let o=0;o0&&i.push({literal:s,val:r}),t=null,r="",s=!s):s||a===t?r+=a:(r.length>0&&i.push({literal:!1,val:r}),r=a,t=a)}return r.length>0&&i.push({literal:s,val:r}),i}static macroTokenToFormatOpts(e){return bl[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,$($({},this.opts),t)).format()}formatDateTime(e,t={}){return this.loc.dtFormatter(e,$($({},this.opts),t)).format()}formatDateTimeParts(e,t={}){return this.loc.dtFormatter(e,$($({},this.opts),t)).formatToParts()}resolvedOptions(e,t={}){return this.loc.dtFormatter(e,$($({},this.opts),t)).resolvedOptions()}num(e,t=0){if(this.opts.forceSimple)return ie(e,t);let r=$({},this.opts);return t>0&&(r.padTo=t),this.loc.numberFormatter(r).format(e)}formatDateTimeFromString(e,t){let r=this.loc.listingMode()==="en",s=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",i=(f,F)=>this.loc.extract(e,f,F),o=f=>e.isOffsetFixed&&e.offset===0&&f.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,f.format):"",a=()=>r?_o(e):i({hour:"numeric",hourCycle:"h12"},"dayperiod"),u=(f,F)=>r?Po(e,f):i(F?{month:f}:{month:f,day:"numeric"},"month"),l=(f,F)=>r?Bo(e,f):i(F?{weekday:f}:{weekday:f,month:"long",day:"numeric"},"weekday"),d=f=>{let F=fe.macroTokenToFormatOpts(f);return F?this.formatWithSystemDefault(e,F):f},h=f=>r?$o(e,f):i({era:f},"era"),p=f=>{switch(f){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12===0?12:e.hour%12);case"hh":return this.num(e.hour%12===0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return a();case"d":return s?i({day:"numeric"},"day"):this.num(e.day);case"dd":return s?i({day:"2-digit"},"day"):this.num(e.day,2);case"c":return this.num(e.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"E":return this.num(e.weekday);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return s?i({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return s?i({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return u("short",!0);case"LLLL":return u("long",!0);case"LLLLL":return u("narrow",!0);case"M":return s?i({month:"numeric"},"month"):this.num(e.month);case"MM":return s?i({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return u("short",!1);case"MMMM":return u("long",!1);case"MMMMM":return u("narrow",!1);case"y":return s?i({year:"numeric"},"year"):this.num(e.year);case"yy":return s?i({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return s?i({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return s?i({year:"numeric"},"year"):this.num(e.year,6);case"G":return h("short");case"GG":return h("long");case"GGGGG":return h("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return d(f)}};return jo(fe.parseFormat(t),p)}formatDurationFromString(e,t){let r=u=>{switch(u[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},s=u=>l=>{let d=r(l);return d?this.num(u.get(d),l.length):l},i=fe.parseFormat(t),o=i.reduce((u,{literal:l,val:d})=>l?u:u.concat(d),[]),a=e.shiftTo(...o.map(r).filter(u=>u));return jo(i,s(a))}};var ye=class{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}};var xe=class{get type(){throw new qe}get name(){throw new qe}get ianaName(){return this.name}get isUniversal(){throw new qe}offsetName(e,t){throw new qe}formatOffset(e,t){throw new qe}offset(e){throw new qe}equals(e){throw new qe}get isValid(){throw new qe}};var ai=null,Ot=class extends xe{static get instance(){return ai===null&&(ai=new Ot),ai}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:r}){return Jr(e,t,r)}formatOffset(e,t){return xt(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return e.type==="system"}get isValid(){return!0}};var Yr={};function El(n){return Yr[n]||(Yr[n]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:n,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),Yr[n]}var Fl={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function wl(n,e){let t=n.format(e).replace(/\\u200E/g,""),r=/(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(t),[,s,i,o,a,u,l,d]=r;return[o,s,i,a,u,l,d]}function Tl(n,e){let t=n.formatToParts(e),r=[];for(let s=0;s=0?F:1e3+F,(p-f)/(60*1e3)}equals(e){return e.type==="iana"&&e.name===this.name}get isValid(){return this.valid}};var ui=null,oe=class extends xe{static get utcInstance(){return ui===null&&(ui=new oe(0)),ui}static instance(e){return e===0?oe.utcInstance:new oe(e)}static parseSpecifier(e){if(e){let t=e.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);if(t)return new oe(Wt(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${xt(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${xt(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return xt(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return e.type==="fixed"&&e.fixed===this.fixed}get isValid(){return!0}};var pn=class extends xe{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function We(n,e){let t;if(U(n)||n===null)return e;if(n instanceof xe)return n;if(No(n)){let r=n.toLowerCase();return r==="local"||r==="system"?e:r==="utc"||r==="gmt"?oe.utcInstance:oe.parseSpecifier(r)||he.create(n)}else return nt(n)?oe.instance(n):typeof n=="object"&&n.offset&&typeof n.offset=="number"?n:new pn(n)}var Vo=()=>Date.now(),qo="system",Uo=null,Wo=null,Ho=null,Ko,X=class{static get now(){return Vo}static set now(e){Vo=e}static set defaultZone(e){qo=e}static get defaultZone(){return We(qo,Ot.instance)}static get defaultLocale(){return Uo}static set defaultLocale(e){Uo=e}static get defaultNumberingSystem(){return Wo}static set defaultNumberingSystem(e){Wo=e}static get defaultOutputCalendar(){return Ho}static set defaultOutputCalendar(e){Ho=e}static get throwOnInvalid(){return Ko}static set throwOnInvalid(e){Ko=e}static resetCaches(){Z.resetCache(),he.resetCache()}};var Jo={};function Sl(n,e={}){let t=JSON.stringify([n,e]),r=Jo[t];return r||(r=new Intl.ListFormat(n,e),Jo[t]=r),r}var li={};function ci(n,e={}){let t=JSON.stringify([n,e]),r=li[t];return r||(r=new Intl.DateTimeFormat(n,e),li[t]=r),r}var fi={};function kl(n,e={}){let t=JSON.stringify([n,e]),r=fi[t];return r||(r=new Intl.NumberFormat(n,e),fi[t]=r),r}var di={};function Cl(n,e={}){let o=e,{base:t}=o,r=Ks(o,["base"]),s=JSON.stringify([n,r]),i=di[s];return i||(i=new Intl.RelativeTimeFormat(n,e),di[s]=i),i}var ar=null;function xl(){return ar||(ar=new Intl.DateTimeFormat().resolvedOptions().locale,ar)}function Ol(n){let e=n.indexOf("-u-");if(e===-1)return[n];{let t,r=n.substring(0,e);try{t=ci(n).resolvedOptions()}catch(o){t=ci(r).resolvedOptions()}let{numberingSystem:s,calendar:i}=t;return[r,s,i]}}function vl(n,e,t){return(t||e)&&(n+="-u",t&&(n+=`-ca-${t}`),e&&(n+=`-nu-${e}`)),n}function Il(n){let e=[];for(let t=1;t<=12;t++){let r=B.utc(2016,t,1);e.push(n(r))}return e}function Nl(n){let e=[];for(let t=1;t<=7;t++){let r=B.utc(2016,11,13+t);e.push(n(r))}return e}function Gr(n,e,t,r,s){let i=n.listingMode(t);return i==="error"?null:i==="en"?r(e):s(e)}function Ll(n){return n.numberingSystem&&n.numberingSystem!=="latn"?!1:n.numberingSystem==="latn"||!n.locale||n.locale.startsWith("en")||new Intl.DateTimeFormat(n.intl).resolvedOptions().numberingSystem==="latn"}var hi=class{constructor(e,t,r){this.padTo=r.padTo||0,this.floor=r.floor||!1;let a=r,{padTo:s,floor:i}=a,o=Ks(a,["padTo","floor"]);if(!t||Object.keys(o).length>0){let u=$({useGrouping:!1},r);r.padTo>0&&(u.minimumIntegerDigits=r.padTo),this.inf=kl(e,u)}}format(e){if(this.inf){let t=this.floor?Math.floor(e):e;return this.inf.format(t)}else{let t=this.floor?Math.floor(e):cn(e,3);return ie(t,this.padTo)}}},pi=class{constructor(e,t,r){this.opts=r;let s;if(e.zone.isUniversal){let o=-1*(e.offset/60),a=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;e.offset!==0&&he.create(a).valid?(s=a,this.dt=e):(s="UTC",r.timeZoneName?this.dt=e:this.dt=e.offset===0?e:B.fromMillis(e.ts+e.offset*60*1e3))}else e.zone.type==="system"?this.dt=e:(this.dt=e,s=e.zone.name);let i=$({},this.opts);s&&(i.timeZone=s),this.dtf=ci(t,i)}format(){return this.dtf.format(this.dt.toJSDate())}formatToParts(){return this.dtf.formatToParts(this.dt.toJSDate())}resolvedOptions(){return this.dtf.resolvedOptions()}},mi=class{constructor(e,t,r){this.opts=$({style:"long"},r),!t&&Kr()&&(this.rtf=Cl(e,r))}format(e,t){return this.rtf?this.rtf.format(e,t):Ro(t,e,this.opts.numeric,this.opts.style!=="long")}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}},Z=class{static fromOpts(e){return Z.create(e.locale,e.numberingSystem,e.outputCalendar,e.defaultToEN)}static create(e,t,r,s=!1){let i=e||X.defaultLocale,o=i||(s?"en-US":xl()),a=t||X.defaultNumberingSystem,u=r||X.defaultOutputCalendar;return new Z(o,a,u,i)}static resetCache(){ar=null,li={},fi={},di={}}static fromObject({locale:e,numberingSystem:t,outputCalendar:r}={}){return Z.create(e,t,r)}constructor(e,t,r,s){let[i,o,a]=Ol(e);this.locale=i,this.numberingSystem=t||o||null,this.outputCalendar=r||a||null,this.intl=vl(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=Ll(this)),this.fastNumbersCached}listingMode(){let e=this.isEnglish(),t=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return e&&t?"en":"intl"}clone(e){return!e||Object.getOwnPropertyNames(e).length===0?this:Z.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,e.defaultToEN||!1)}redefaultToEN(e={}){return this.clone(Fe($({},e),{defaultToEN:!0}))}redefaultToSystem(e={}){return this.clone(Fe($({},e),{defaultToEN:!1}))}months(e,t=!1,r=!0){return Gr(this,e,r,ei,()=>{let s=t?{month:e,day:"numeric"}:{month:e},i=t?"format":"standalone";return this.monthsCache[i][e]||(this.monthsCache[i][e]=Il(o=>this.extract(o,s,"month"))),this.monthsCache[i][e]})}weekdays(e,t=!1,r=!0){return Gr(this,e,r,ri,()=>{let s=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},i=t?"format":"standalone";return this.weekdaysCache[i][e]||(this.weekdaysCache[i][e]=Nl(o=>this.extract(o,s,"weekday"))),this.weekdaysCache[i][e]})}meridiems(e=!0){return Gr(this,void 0,e,()=>si,()=>{if(!this.meridiemCache){let t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[B.utc(2016,11,13,9),B.utc(2016,11,13,19)].map(r=>this.extract(r,t,"dayperiod"))}return this.meridiemCache})}eras(e,t=!0){return Gr(this,e,t,ii,()=>{let r={era:e};return this.eraCache[e]||(this.eraCache[e]=[B.utc(-40,1,1),B.utc(2017,1,1)].map(s=>this.extract(s,r,"era"))),this.eraCache[e]})}extract(e,t,r){let s=this.dtFormatter(e,t),i=s.formatToParts(),o=i.find(a=>a.type.toLowerCase()===r);return o?o.value:null}numberFormatter(e={}){return new hi(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new pi(e,this.intl,t)}relFormatter(e={}){return new mi(this.intl,this.isEnglish(),e)}listFormatter(e={}){return Sl(this.intl,e)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}};function Dn(...n){let e=n.reduce((t,r)=>t+r.source,"");return RegExp(`^${e}$`)}function yn(...n){return e=>n.reduce(([t,r,s],i)=>{let[o,a,u]=i(e,s);return[$($({},t),o),a||r,u]},[{},null,1]).slice(0,2)}function gn(n,...e){if(n==null)return[null,null];for(let[t,r]of e){let s=t.exec(n);if(s)return r(s)}return[null,null]}function Yo(...n){return(e,t)=>{let r={},s;for(s=0;sf!==void 0&&(F||f&&d)?-f:f;return[{years:p(Ct(t)),months:p(Ct(r)),weeks:p(Ct(s)),days:p(Ct(i)),hours:p(Ct(o)),minutes:p(Ct(a)),seconds:p(Ct(u),u==="-0"),milliseconds:p(rr(l),h)}]}var Hl={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function gi(n,e,t,r,s,i,o){let a={year:e.length===2?ir(Dt(e)):Dt(e),month:Xs.indexOf(t)+1,day:Dt(r),hour:Dt(s),minute:Dt(i)};return o&&(a.second=Dt(o)),n&&(a.weekday=n.length>3?ti.indexOf(n)+1:ni.indexOf(n)+1),a}var Kl=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;function Jl(n){let[,e,t,r,s,i,o,a,u,l,d,h]=n,p=gi(e,s,r,t,i,o,a),f;return u?f=Hl[u]:l?f=0:f=Wt(d,h),[p,new oe(f)]}function zl(n){return n.replace(/\\([^()]*\\)|[\\n\\t]/g," ").replace(/(\\s\\s+)/g," ").trim()}var Yl=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,Gl=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,Zl=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;function zo(n){let[,e,t,r,s,i,o,a]=n;return[gi(e,s,r,t,i,o,a),oe.utcInstance]}function Ql(n){let[,e,t,r,s,i,o,a]=n;return[gi(e,a,t,r,s,i,o),oe.utcInstance]}var Xl=Dn(Ml,yi),ec=Dn(_l,yi),tc=Dn(Bl,yi),nc=Dn(Zo),Xo=yn(Vl,bn,ur,lr),rc=yn(Pl,bn,ur,lr),sc=yn($l,bn,ur,lr),ic=yn(bn,ur,lr);function ea(n){return gn(n,[Xl,Xo],[ec,rc],[tc,sc],[nc,ic])}function ta(n){return gn(zl(n),[Kl,Jl])}function na(n){return gn(n,[Yl,zo],[Gl,zo],[Zl,Ql])}function ra(n){return gn(n,[Ul,Wl])}var oc=yn(bn);function sa(n){return gn(n,[ql,oc])}var ac=Dn(Rl,jl),uc=Dn(Qo),lc=yn(bn,ur,lr);function ia(n){return gn(n,[ac,Xo],[uc,lc])}var cc="Invalid Duration",oa={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},fc=$({years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3}},oa),Me=146097/400,En=146097/4800,dc=$({years:{quarters:4,months:12,weeks:Me/7,days:Me,hours:Me*24,minutes:Me*24*60,seconds:Me*24*60*60,milliseconds:Me*24*60*60*1e3},quarters:{months:3,weeks:Me/28,days:Me/4,hours:Me*24/4,minutes:Me*24*60/4,seconds:Me*24*60*60/4,milliseconds:Me*24*60*60*1e3/4},months:{weeks:En/7,days:En,hours:En*24,minutes:En*24*60,seconds:En*24*60*60,milliseconds:En*24*60*60*1e3}},oa),Kt=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],hc=Kt.slice(0).reverse();function Ht(n,e,t=!1){let r={values:t?e.values:$($({},n.values),e.values||{}),loc:n.loc.clone(e.loc),conversionAccuracy:e.conversionAccuracy||n.conversionAccuracy};return new A(r)}function pc(n){return n<0?Math.floor(n):Math.ceil(n)}function aa(n,e,t,r,s){let i=n[s][t],o=e[t]/i,a=Math.sign(o)===Math.sign(r[s]),u=!a&&r[s]!==0&&Math.abs(o)<=1?pc(o):Math.trunc(o);r[s]+=u,e[t]-=u*i}function mc(n,e){hc.reduce((t,r)=>U(e[r])?t:(t&&aa(n,e,t,e,r),r),null)}var A=class{constructor(e){let t=e.conversionAccuracy==="longterm"||!1;this.values=e.values,this.loc=e.loc||Z.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=t?dc:fc,this.isLuxonDuration=!0}static fromMillis(e,t){return A.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(e==null||typeof e!="object")throw new De(`Duration.fromObject: argument expected to be an object, got ${e===null?"null":typeof e}`);return new A({values:hn(e,A.normalizeUnit),loc:Z.fromObject(t),conversionAccuracy:t.conversionAccuracy})}static fromDurationLike(e){if(nt(e))return A.fromMillis(e);if(A.isDuration(e))return e;if(typeof e=="object")return A.fromObject(e);throw new De(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){let[r]=ra(e);return r?A.fromObject(r,t):A.invalid("unparsable",`the input "${e}" can\'t be parsed as ISO 8601`)}static fromISOTime(e,t){let[r]=sa(e);return r?A.fromObject(r,t):A.invalid("unparsable",`the input "${e}" can\'t be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new De("need to specify a reason the Duration is invalid");let r=e instanceof ye?e:new ye(e,t);if(X.throwOnInvalid)throw new Hr(r);return new A({invalid:r})}static normalizeUnit(e){let t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e&&e.toLowerCase()];if(!t)throw new un(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){let r=Fe($({},t),{floor:t.round!==!1&&t.floor!==!1});return this.isValid?fe.create(this.loc,r).formatDurationFromString(this,e):cc}toHuman(e={}){let t=Kt.map(r=>{let s=this.values[r];return U(s)?null:this.loc.numberFormatter(Fe($({style:"unit",unitDisplay:"long"},e),{unit:r.slice(0,-1)})).format(s)}).filter(r=>r);return this.loc.listFormatter($({type:"conjunction",style:e.listStyle||"narrow"},e)).format(t)}toObject(){return this.isValid?$({},this.values):{}}toISO(){if(!this.isValid)return null;let e="P";return this.years!==0&&(e+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(e+=this.months+this.quarters*3+"M"),this.weeks!==0&&(e+=this.weeks+"W"),this.days!==0&&(e+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(e+="T"),this.hours!==0&&(e+=this.hours+"H"),this.minutes!==0&&(e+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(e+=cn(this.seconds+this.milliseconds/1e3,3)+"S"),e==="P"&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;let t=this.toMillis();if(t<0||t>=864e5)return null;e=$({suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended"},e);let r=this.shiftTo("hours","minutes","seconds","milliseconds"),s=e.format==="basic"?"hhmm":"hh:mm";(!e.suppressSeconds||r.seconds!==0||r.milliseconds!==0)&&(s+=e.format==="basic"?"ss":":ss",(!e.suppressMilliseconds||r.milliseconds!==0)&&(s+=".SSS"));let i=r.toFormat(s);return e.includePrefix&&(i="T"+i),i}toJSON(){return this.toISO()}toString(){return this.toISO()}toMillis(){return this.as("milliseconds")}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;let t=A.fromDurationLike(e),r={};for(let s of Kt)(kt(t.values,s)||kt(this.values,s))&&(r[s]=t.get(s)+this.get(s));return Ht(this,{values:r},!0)}minus(e){if(!this.isValid)return this;let t=A.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;let t={};for(let r of Object.keys(this.values))t[r]=Zs(e(this.values[r],r));return Ht(this,{values:t},!0)}get(e){return this[A.normalizeUnit(e)]}set(e){if(!this.isValid)return this;let t=$($({},this.values),hn(e,A.normalizeUnit));return Ht(this,{values:t})}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:r}={}){let s=this.loc.clone({locale:e,numberingSystem:t}),i={loc:s};return r&&(i.conversionAccuracy=r),Ht(this,i)}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;let e=this.toObject();return mc(this.matrix,e),Ht(this,{values:e},!0)}shiftTo(...e){if(!this.isValid)return this;if(e.length===0)return this;e=e.map(o=>A.normalizeUnit(o));let t={},r={},s=this.toObject(),i;for(let o of Kt)if(e.indexOf(o)>=0){i=o;let a=0;for(let l in r)a+=this.matrix[l][o]*r[l],r[l]=0;nt(s[o])&&(a+=s[o]);let u=Math.trunc(a);t[o]=u,r[o]=(a*1e3-u*1e3)/1e3;for(let l in s)Kt.indexOf(l)>Kt.indexOf(o)&&aa(this.matrix,s,l,t,o)}else nt(s[o])&&(r[o]=s[o]);for(let o in r)r[o]!==0&&(t[i]+=o===i?r[o]:r[o]/this.matrix[i][o]);return Ht(this,{values:t},!0).normalize()}negate(){if(!this.isValid)return this;let e={};for(let t of Object.keys(this.values))e[t]=this.values[t]===0?0:-this.values[t];return Ht(this,{values:e},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid||!this.loc.equals(e.loc))return!1;function t(r,s){return r===void 0||r===0?s===void 0||s===0:r===s}for(let r of Kt)if(!t(this.values[r],e.values[r]))return!1;return!0}};var cr="Invalid Interval";function Dc(n,e){return!n||!n.isValid?te.invalid("missing or invalid start"):!e||!e.isValid?te.invalid("missing or invalid end"):ee:!1}isBefore(e){return this.isValid?this.e<=e:!1}contains(e){return this.isValid?this.s<=e&&this.e>e:!1}set({start:e,end:t}={}){return this.isValid?te.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];let t=e.map(Fn).filter(o=>this.contains(o)).sort(),r=[],{s}=this,i=0;for(;s+this.e?this.e:o;r.push(te.fromDateTimes(s,a)),s=a,i+=1}return r}splitBy(e){let t=A.fromDurationLike(e);if(!this.isValid||!t.isValid||t.as("milliseconds")===0)return[];let{s:r}=this,s=1,i,o=[];for(;ru*s));i=+a>+this.e?this.e:a,o.push(te.fromDateTimes(r,i)),r=i,s+=1}return o}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e:!1}equals(e){return!this.isValid||!e.isValid?!1:this.s.equals(e.s)&&this.e.equals(e.e)}intersection(e){if(!this.isValid)return this;let t=this.s>e.s?this.s:e.s,r=this.e=r?null:te.fromDateTimes(t,r)}union(e){if(!this.isValid)return this;let t=this.se.e?this.e:e.e;return te.fromDateTimes(t,r)}static merge(e){let[t,r]=e.sort((s,i)=>s.s-i.s).reduce(([s,i],o)=>i?i.overlaps(o)||i.abutsStart(o)?[s,i.union(o)]:[s.concat([i]),o]:[s,o],[[],null]);return r&&t.push(r),t}static xor(e){let t=null,r=0,s=[],i=e.map(u=>[{time:u.s,type:"s"},{time:u.e,type:"e"}]),o=Array.prototype.concat(...i),a=o.sort((u,l)=>u.time-l.time);for(let u of a)r+=u.type==="s"?1:-1,r===1?t=u.time:(t&&+t!=+u.time&&s.push(te.fromDateTimes(t,u.time)),t=null);return te.merge(s)}difference(...e){return te.xor([this].concat(e)).map(t=>this.intersection(t)).filter(t=>t&&!t.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \\u2013 ${this.e.toISO()})`:cr}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:cr}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:cr}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:cr}toFormat(e,{separator:t=" \\u2013 "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:cr}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):A.invalid(this.invalidReason)}mapEndpoints(e){return te.fromDateTimes(e(this.s),e(this.e))}};var yt=class{static hasDST(e=X.defaultZone){let t=B.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return he.isValidZone(e)}static normalizeZone(e){return We(e,X.defaultZone)}static months(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null,outputCalendar:i="gregory"}={}){return(s||Z.create(t,r,i)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null,outputCalendar:i="gregory"}={}){return(s||Z.create(t,r,i)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null}={}){return(s||Z.create(t,r,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null}={}){return(s||Z.create(t,r,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return Z.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return Z.create(t,null,"gregory").eras(e)}static features(){return{relative:Kr()}}};function ua(n,e){let t=s=>s.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),r=t(e)-t(n);return Math.floor(A.fromMillis(r).as("days"))}function yc(n,e,t){let r=[["years",(a,u)=>u.year-a.year],["quarters",(a,u)=>u.quarter-a.quarter],["months",(a,u)=>u.month-a.month+(u.year-a.year)*12],["weeks",(a,u)=>{let l=ua(a,u);return(l-l%7)/7}],["days",ua]],s={},i,o;for(let[a,u]of r)if(t.indexOf(a)>=0){i=a;let l=u(n,e);o=n.plus({[a]:l}),o>e?(n=n.plus({[a]:l-1}),l-=1):n=o,s[a]=l}return[n,s,o,i]}function la(n,e,t,r){let[s,i,o,a]=yc(n,e,t),u=e-s,l=t.filter(h=>["hours","minutes","seconds","milliseconds"].indexOf(h)>=0);l.length===0&&(o0?A.fromMillis(u,r).shiftTo(...l).plus(d):d}var bi={arab:"[\\u0660-\\u0669]",arabext:"[\\u06F0-\\u06F9]",bali:"[\\u1B50-\\u1B59]",beng:"[\\u09E6-\\u09EF]",deva:"[\\u0966-\\u096F]",fullwide:"[\\uFF10-\\uFF19]",gujr:"[\\u0AE6-\\u0AEF]",hanidec:"[\\u3007|\\u4E00|\\u4E8C|\\u4E09|\\u56DB|\\u4E94|\\u516D|\\u4E03|\\u516B|\\u4E5D]",khmr:"[\\u17E0-\\u17E9]",knda:"[\\u0CE6-\\u0CEF]",laoo:"[\\u0ED0-\\u0ED9]",limb:"[\\u1946-\\u194F]",mlym:"[\\u0D66-\\u0D6F]",mong:"[\\u1810-\\u1819]",mymr:"[\\u1040-\\u1049]",orya:"[\\u0B66-\\u0B6F]",tamldec:"[\\u0BE6-\\u0BEF]",telu:"[\\u0C66-\\u0C6F]",thai:"[\\u0E50-\\u0E59]",tibt:"[\\u0F20-\\u0F29]",latn:"\\\\d"},ca={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},gc=bi.hanidec.replace(/[\\[|\\]]/g,"").split("");function fa(n){let e=parseInt(n,10);if(isNaN(e)){e="";for(let t=0;t=i&&r<=o&&(e+=r-i)}}return parseInt(e,10)}else return e}function _e({numberingSystem:n},e=""){return new RegExp(`${bi[n||"latn"]}${e}`)}var bc="missing Intl.DateTimeFormat.formatToParts support";function Y(n,e=t=>t){return{regex:n,deser:([t])=>e(fa(t))}}var Ec=String.fromCharCode(160),pa=`[ ${Ec}]`,ma=new RegExp(pa,"g");function Fc(n){return n.replace(/\\./g,"\\\\.?").replace(ma,pa)}function da(n){return n.replace(/\\./g,"").replace(ma," ").toLowerCase()}function He(n,e){return n===null?null:{regex:RegExp(n.map(Fc).join("|")),deser:([t])=>n.findIndex(r=>da(t)===da(r))+e}}function ha(n,e){return{regex:n,deser:([,t,r])=>Wt(t,r),groups:e}}function Ei(n){return{regex:n,deser:([e])=>e}}function wc(n){return n.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,"\\\\$&")}function Tc(n,e){let t=_e(e),r=_e(e,"{2}"),s=_e(e,"{3}"),i=_e(e,"{4}"),o=_e(e,"{6}"),a=_e(e,"{1,2}"),u=_e(e,"{1,3}"),l=_e(e,"{1,6}"),d=_e(e,"{1,9}"),h=_e(e,"{2,4}"),p=_e(e,"{4,6}"),f=y=>({regex:RegExp(wc(y.val)),deser:([S])=>S,literal:!0}),g=(y=>{if(n.literal)return f(y);switch(y.val){case"G":return He(e.eras("short",!1),0);case"GG":return He(e.eras("long",!1),0);case"y":return Y(l);case"yy":return Y(h,ir);case"yyyy":return Y(i);case"yyyyy":return Y(p);case"yyyyyy":return Y(o);case"M":return Y(a);case"MM":return Y(r);case"MMM":return He(e.months("short",!0,!1),1);case"MMMM":return He(e.months("long",!0,!1),1);case"L":return Y(a);case"LL":return Y(r);case"LLL":return He(e.months("short",!1,!1),1);case"LLLL":return He(e.months("long",!1,!1),1);case"d":return Y(a);case"dd":return Y(r);case"o":return Y(u);case"ooo":return Y(s);case"HH":return Y(r);case"H":return Y(a);case"hh":return Y(r);case"h":return Y(a);case"mm":return Y(r);case"m":return Y(a);case"q":return Y(a);case"qq":return Y(r);case"s":return Y(a);case"ss":return Y(r);case"S":return Y(u);case"SSS":return Y(s);case"u":return Ei(d);case"uu":return Ei(a);case"uuu":return Y(t);case"a":return He(e.meridiems(),0);case"kkkk":return Y(i);case"kk":return Y(h,ir);case"W":return Y(a);case"WW":return Y(r);case"E":case"c":return Y(t);case"EEE":return He(e.weekdays("short",!1,!1),1);case"EEEE":return He(e.weekdays("long",!1,!1),1);case"ccc":return He(e.weekdays("short",!0,!1),1);case"cccc":return He(e.weekdays("long",!0,!1),1);case"Z":case"ZZ":return ha(new RegExp(`([+-]${a.source})(?::(${r.source}))?`),2);case"ZZZ":return ha(new RegExp(`([+-]${a.source})(${r.source})?`),2);case"z":return Ei(/[a-z_+-/]{1,256}?/i);default:return f(y)}})(n)||{invalidReason:bc};return g.token=n,g}var Sc={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour:{numeric:"h","2-digit":"hh"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"}};function kc(n,e,t){let{type:r,value:s}=n;if(r==="literal")return{literal:!0,val:s};let i=t[r],o=Sc[r];if(typeof o=="object"&&(o=o[i]),o)return{literal:!1,val:o}}function Cc(n){return[`^${n.map(t=>t.regex).reduce((t,r)=>`${t}(${r.source})`,"")}$`,n]}function xc(n,e,t){let r=n.match(e);if(r){let s={},i=1;for(let o in t)if(kt(t,o)){let a=t[o],u=a.groups?a.groups+1:1;!a.literal&&a.token&&(s[a.token.val[0]]=a.deser(r.slice(i,i+u))),i+=u}return[r,s]}else return[r,{}]}function Oc(n){let e=i=>{switch(i){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},t=null,r;return U(n.z)||(t=he.create(n.z)),U(n.Z)||(t||(t=new oe(n.Z)),r=n.Z),U(n.q)||(n.M=(n.q-1)*3+1),U(n.h)||(n.h<12&&n.a===1?n.h+=12:n.h===12&&n.a===0&&(n.h=0)),n.G===0&&n.y&&(n.y=-n.y),U(n.u)||(n.S=rr(n.u)),[Object.keys(n).reduce((i,o)=>{let a=e(o);return a&&(i[a]=n[o]),i},{}),t,r]}var Fi=null;function vc(){return Fi||(Fi=B.fromMillis(1555555555555)),Fi}function Ic(n,e){if(n.literal)return n;let t=fe.macroTokenToFormatOpts(n.val);if(!t)return n;let i=fe.create(e,t).formatDateTimeParts(vc()).map(o=>kc(o,e,t));return i.includes(void 0)?n:i}function Nc(n,e){return Array.prototype.concat(...n.map(t=>Ic(t,e)))}function wi(n,e,t){let r=Nc(fe.parseFormat(t),n),s=r.map(o=>Tc(o,n)),i=s.find(o=>o.invalidReason);if(i)return{input:e,tokens:r,invalidReason:i.invalidReason};{let[o,a]=Cc(s),u=RegExp(o,"i"),[l,d]=xc(e,u,a),[h,p,f]=d?Oc(d):[null,null,void 0];if(kt(d,"a")&&kt(d,"H"))throw new mt("Can\'t include meridiem when specifying 24-hour format");return{input:e,tokens:r,regex:u,rawMatches:l,matches:d,result:h,zone:p,specificOffset:f}}}function Da(n,e,t){let{result:r,zone:s,specificOffset:i,invalidReason:o}=wi(n,e,t);return[r,s,i,o]}var ya=[0,31,59,90,120,151,181,212,243,273,304,334],ga=[0,31,60,91,121,152,182,213,244,274,305,335];function Be(n,e){return new ye("unit out of range",`you specified ${e} (of type ${typeof e}) as a ${n}, which is invalid`)}function ba(n,e,t){let r=new Date(Date.UTC(n,e-1,t));n<100&&n>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);let s=r.getUTCDay();return s===0?7:s}function Ea(n,e,t){return t+(qt(n)?ga:ya)[e-1]}function Fa(n,e){let t=qt(n)?ga:ya,r=t.findIndex(i=>idn(e)?(a=e+1,o=1):a=e,$({weekYear:a,weekNumber:o,weekday:i},or(n))}function Ti(n){let{weekYear:e,weekNumber:t,weekday:r}=n,s=ba(e,1,4),i=Ut(e),o=t*7+r-s-3,a;o<1?(a=e-1,o+=Ut(a)):o>i?(a=e+1,o-=Ut(e)):a=e;let{month:u,day:l}=Fa(a,o);return $({year:a,month:u,day:l},or(n))}function Qr(n){let{year:e,month:t,day:r}=n,s=Ea(e,t,r);return $({year:e,ordinal:s},or(n))}function Si(n){let{year:e,ordinal:t}=n,{month:r,day:s}=Fa(e,t);return $({year:e,month:r,day:s},or(n))}function wa(n){let e=nr(n.weekYear),t=rt(n.weekNumber,1,dn(n.weekYear)),r=rt(n.weekday,1,7);return e?t?r?!1:Be("weekday",n.weekday):Be("week",n.week):Be("weekYear",n.weekYear)}function Ta(n){let e=nr(n.year),t=rt(n.ordinal,1,Ut(n.year));return e?t?!1:Be("ordinal",n.ordinal):Be("year",n.year)}function ki(n){let e=nr(n.year),t=rt(n.month,1,12),r=rt(n.day,1,fn(n.year,n.month));return e?t?r?!1:Be("day",n.day):Be("month",n.month):Be("year",n.year)}function Ci(n){let{hour:e,minute:t,second:r,millisecond:s}=n,i=rt(e,0,23)||e===24&&t===0&&r===0&&s===0,o=rt(t,0,59),a=rt(r,0,59),u=rt(s,0,999);return i?o?a?u?!1:Be("millisecond",s):Be("second",r):Be("minute",t):Be("hour",e)}var xi="Invalid DateTime",Sa=864e13;function Xr(n){return new ye("unsupported zone",`the zone "${n.name}" is not supported`)}function Oi(n){return n.weekData===null&&(n.weekData=Zr(n.c)),n.weekData}function fr(n,e){let t={ts:n.ts,zone:n.zone,c:n.c,o:n.o,loc:n.loc,invalid:n.invalid};return new B(Fe($($({},t),e),{old:t}))}function La(n,e,t){let r=n-e*60*1e3,s=t.offset(r);if(e===s)return[r,e];r-=(s-e)*60*1e3;let i=t.offset(r);return s===i?[r,s]:[n-Math.min(s,i)*60*1e3,Math.max(s,i)]}function ka(n,e){n+=e*60*1e3;let t=new Date(n);return{year:t.getUTCFullYear(),month:t.getUTCMonth()+1,day:t.getUTCDate(),hour:t.getUTCHours(),minute:t.getUTCMinutes(),second:t.getUTCSeconds(),millisecond:t.getUTCMilliseconds()}}function ts(n,e,t){return La(sr(n),e,t)}function Ca(n,e){let t=n.o,r=n.c.year+Math.trunc(e.years),s=n.c.month+Math.trunc(e.months)+Math.trunc(e.quarters)*3,i=Fe($({},n.c),{year:r,month:s,day:Math.min(n.c.day,fn(r,s))+Math.trunc(e.days)+Math.trunc(e.weeks)*7}),o=A.fromObject({years:e.years-Math.trunc(e.years),quarters:e.quarters-Math.trunc(e.quarters),months:e.months-Math.trunc(e.months),weeks:e.weeks-Math.trunc(e.weeks),days:e.days-Math.trunc(e.days),hours:e.hours,minutes:e.minutes,seconds:e.seconds,milliseconds:e.milliseconds}).as("milliseconds"),a=sr(i),[u,l]=La(a,t,n.zone);return o!==0&&(u+=o,l=n.zone.offset(u)),{ts:u,o:l}}function dr(n,e,t,r,s,i){let{setZone:o,zone:a}=t;if(n&&Object.keys(n).length!==0){let u=e||a,l=B.fromObject(n,Fe($({},t),{zone:u,specificOffset:i}));return o?l:l.setZone(a)}else return B.invalid(new ye("unparsable",`the input "${s}" can\'t be parsed as ${r}`))}function es(n,e,t=!0){return n.isValid?fe.create(Z.create("en-US"),{allowZ:t,forceSimple:!0}).formatDateTimeFromString(n,e):null}function vi(n,e){let t=n.c.year>9999||n.c.year<0,r="";return t&&n.c.year>=0&&(r+="+"),r+=ie(n.c.year,t?6:4),e?(r+="-",r+=ie(n.c.month),r+="-",r+=ie(n.c.day)):(r+=ie(n.c.month),r+=ie(n.c.day)),r}function xa(n,e,t,r,s,i){let o=ie(n.c.hour);return e?(o+=":",o+=ie(n.c.minute),(n.c.second!==0||!t)&&(o+=":")):o+=ie(n.c.minute),(n.c.second!==0||!t)&&(o+=ie(n.c.second),(n.c.millisecond!==0||!r)&&(o+=".",o+=ie(n.c.millisecond,3))),s&&(n.isOffsetFixed&&n.offset===0&&!i?o+="Z":n.o<0?(o+="-",o+=ie(Math.trunc(-n.o/60)),o+=":",o+=ie(Math.trunc(-n.o%60))):(o+="+",o+=ie(Math.trunc(n.o/60)),o+=":",o+=ie(Math.trunc(n.o%60)))),i&&(o+="["+n.zone.ianaName+"]"),o}var Aa={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},Lc={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},Ac={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Ma=["year","month","day","hour","minute","second","millisecond"],Mc=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],_c=["year","ordinal","hour","minute","second","millisecond"];function Oa(n){let e={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[n.toLowerCase()];if(!e)throw new un(n);return e}function va(n,e){let t=We(e.zone,X.defaultZone),r=Z.fromObject(e),s=X.now(),i,o;if(U(n.year))i=s;else{for(let l of Ma)U(n[l])&&(n[l]=Aa[l]);let a=ki(n)||Ci(n);if(a)return B.invalid(a);let u=t.offset(s);[i,o]=ts(n,u,t)}return new B({ts:i,zone:t,loc:r,o})}function Ia(n,e,t){let r=U(t.round)?!0:t.round,s=(o,a)=>(o=cn(o,r||t.calendary?0:2,!0),e.loc.clone(t).relFormatter(t).format(o,a)),i=o=>t.calendary?e.hasSame(n,o)?0:e.startOf(o).diff(n.startOf(o),o).get(o):e.diff(n,o).get(o);if(t.unit)return s(i(t.unit),t.unit);for(let o of t.units){let a=i(o);if(Math.abs(a)>=1)return s(a,o)}return s(n>e?-0:0,t.units[t.units.length-1])}function Na(n){let e={},t;return n.length>0&&typeof n[n.length-1]=="object"?(e=n[n.length-1],t=Array.from(n).slice(0,n.length-1)):t=Array.from(n),[e,t]}var B=class{constructor(e){let t=e.zone||X.defaultZone,r=e.invalid||(Number.isNaN(e.ts)?new ye("invalid input"):null)||(t.isValid?null:Xr(t));this.ts=U(e.ts)?X.now():e.ts;let s=null,i=null;if(!r)if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[s,i]=[e.old.c,e.old.o];else{let a=t.offset(this.ts);s=ka(this.ts,a),r=Number.isNaN(s.year)?new ye("invalid input"):null,s=r?null:s,i=r?null:a}this._zone=t,this.loc=e.loc||Z.create(),this.invalid=r,this.weekData=null,this.c=s,this.o=i,this.isLuxonDateTime=!0}static now(){return new B({})}static local(){let[e,t]=Na(arguments),[r,s,i,o,a,u,l]=t;return va({year:r,month:s,day:i,hour:o,minute:a,second:u,millisecond:l},e)}static utc(){let[e,t]=Na(arguments),[r,s,i,o,a,u,l]=t;return e.zone=oe.utcInstance,va({year:r,month:s,day:i,hour:o,minute:a,second:u,millisecond:l},e)}static fromJSDate(e,t={}){let r=Lo(e)?e.valueOf():NaN;if(Number.isNaN(r))return B.invalid("invalid input");let s=We(t.zone,X.defaultZone);return s.isValid?new B({ts:r,zone:s,loc:Z.fromObject(t)}):B.invalid(Xr(s))}static fromMillis(e,t={}){if(nt(e))return e<-Sa||e>Sa?B.invalid("Timestamp out of range"):new B({ts:e,zone:We(t.zone,X.defaultZone),loc:Z.fromObject(t)});throw new De(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(nt(e))return new B({ts:e*1e3,zone:We(t.zone,X.defaultZone),loc:Z.fromObject(t)});throw new De("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};let r=We(t.zone,X.defaultZone);if(!r.isValid)return B.invalid(Xr(r));let s=X.now(),i=U(t.specificOffset)?r.offset(s):t.specificOffset,o=hn(e,Oa),a=!U(o.ordinal),u=!U(o.year),l=!U(o.month)||!U(o.day),d=u||l,h=o.weekYear||o.weekNumber,p=Z.fromObject(t);if((d||a)&&h)throw new mt("Can\'t mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&a)throw new mt("Can\'t mix ordinal dates with month/day");let f=h||o.weekday&&!d,F,g,y=ka(s,i);f?(F=Mc,g=Lc,y=Zr(y)):a?(F=_c,g=Ac,y=Qr(y)):(F=Ma,g=Aa);let S=!1;for(let M of F){let V=o[M];U(V)?S?o[M]=g[M]:o[M]=y[M]:S=!0}let O=f?wa(o):a?Ta(o):ki(o),v=O||Ci(o);if(v)return B.invalid(v);let D=f?Ti(o):a?Si(o):o,[w,T]=ts(D,i,r),C=new B({ts:w,zone:r,o:T,loc:p});return o.weekday&&d&&e.weekday!==C.weekday?B.invalid("mismatched weekday",`you can\'t specify both a weekday of ${o.weekday} and a date of ${C.toISO()}`):C}static fromISO(e,t={}){let[r,s]=ea(e);return dr(r,s,t,"ISO 8601",e)}static fromRFC2822(e,t={}){let[r,s]=ta(e);return dr(r,s,t,"RFC 2822",e)}static fromHTTP(e,t={}){let[r,s]=na(e);return dr(r,s,t,"HTTP",t)}static fromFormat(e,t,r={}){if(U(e)||U(t))throw new De("fromFormat requires an input string and a format");let{locale:s=null,numberingSystem:i=null}=r,o=Z.fromOpts({locale:s,numberingSystem:i,defaultToEN:!0}),[a,u,l,d]=Da(o,e,t);return d?B.invalid(d):dr(a,u,r,`format ${t}`,e,l)}static fromString(e,t,r={}){return B.fromFormat(e,t,r)}static fromSQL(e,t={}){let[r,s]=ia(e);return dr(r,s,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new De("need to specify a reason the DateTime is invalid");let r=e instanceof ye?e:new ye(e,t);if(X.throwOnInvalid)throw new Ur(r);return new B({invalid:r})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}get(e){return this[e]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Oi(this).weekYear:NaN}get weekNumber(){return this.isValid?Oi(this).weekNumber:NaN}get weekday(){return this.isValid?Oi(this).weekday:NaN}get ordinal(){return this.isValid?Qr(this.c).ordinal:NaN}get monthShort(){return this.isValid?yt.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?yt.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?yt.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?yt.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}get isInLeapYear(){return qt(this.year)}get daysInMonth(){return fn(this.year,this.month)}get daysInYear(){return this.isValid?Ut(this.year):NaN}get weeksInWeekYear(){return this.isValid?dn(this.weekYear):NaN}resolvedLocaleOptions(e={}){let{locale:t,numberingSystem:r,calendar:s}=fe.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:r,outputCalendar:s}}toUTC(e=0,t={}){return this.setZone(oe.instance(e),t)}toLocal(){return this.setZone(X.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:r=!1}={}){if(e=We(e,X.defaultZone),e.equals(this.zone))return this;if(e.isValid){let s=this.ts;if(t||r){let i=e.offset(this.ts),o=this.toObject();[s]=ts(o,i,e)}return fr(this,{ts:s,zone:e})}else return B.invalid(Xr(e))}reconfigure({locale:e,numberingSystem:t,outputCalendar:r}={}){let s=this.loc.clone({locale:e,numberingSystem:t,outputCalendar:r});return fr(this,{loc:s})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;let t=hn(e,Oa),r=!U(t.weekYear)||!U(t.weekNumber)||!U(t.weekday),s=!U(t.ordinal),i=!U(t.year),o=!U(t.month)||!U(t.day),a=i||o,u=t.weekYear||t.weekNumber;if((a||s)&&u)throw new mt("Can\'t mix weekYear/weekNumber units with year/month/day or ordinals");if(o&&s)throw new mt("Can\'t mix ordinal dates with month/day");let l;r?l=Ti($($({},Zr(this.c)),t)):U(t.ordinal)?(l=$($({},this.toObject()),t),U(t.day)&&(l.day=Math.min(fn(l.year,l.month),l.day))):l=Si($($({},Qr(this.c)),t));let[d,h]=ts(l,this.o,this.zone);return fr(this,{ts:d,o:h})}plus(e){if(!this.isValid)return this;let t=A.fromDurationLike(e);return fr(this,Ca(this,t))}minus(e){if(!this.isValid)return this;let t=A.fromDurationLike(e).negate();return fr(this,Ca(this,t))}startOf(e){if(!this.isValid)return this;let t={},r=A.normalizeUnit(e);switch(r){case"years":t.month=1;case"quarters":case"months":t.day=1;case"weeks":case"days":t.hour=0;case"hours":t.minute=0;case"minutes":t.second=0;case"seconds":t.millisecond=0;break;case"milliseconds":break}if(r==="weeks"&&(t.weekday=1),r==="quarters"){let s=Math.ceil(this.month/3);t.month=(s-1)*3+1}return this.set(t)}endOf(e){return this.isValid?this.plus({[e]:1}).startOf(e).minus(1):this}toFormat(e,t={}){return this.isValid?fe.create(this.loc.redefaultToEN(t)).formatDateTimeFromString(this,e):xi}toLocaleString(e=ln,t={}){return this.isValid?fe.create(this.loc.clone(t),e).formatDateTime(this):xi}toLocaleParts(e={}){return this.isValid?fe.create(this.loc.clone(e),e).formatDateTimeParts(this):[]}toISO({format:e="extended",suppressSeconds:t=!1,suppressMilliseconds:r=!1,includeOffset:s=!0,extendedZone:i=!1}={}){if(!this.isValid)return null;let o=e==="extended",a=vi(this,o);return a+="T",a+=xa(this,o,t,r,s,i),a}toISODate({format:e="extended"}={}){return this.isValid?vi(this,e==="extended"):null}toISOWeekDate(){return es(this,"kkkk-\'W\'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:r=!0,includePrefix:s=!1,extendedZone:i=!1,format:o="extended"}={}){return this.isValid?(s?"T":"")+xa(this,o==="extended",t,e,r,i):null}toRFC2822(){return es(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return es(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss \'GMT\'")}toSQLDate(){return this.isValid?vi(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:r=!0}={}){let s="HH:mm:ss.SSS";return(t||e)&&(r&&(s+=" "),t?s+="z":e&&(s+="ZZ")),es(this,s,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():xi}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};let t=$({},this.c);return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",r={}){if(!this.isValid||!e.isValid)return A.invalid("created by diffing an invalid DateTime");let s=$({locale:this.locale,numberingSystem:this.numberingSystem},r),i=Ao(t).map(A.normalizeUnit),o=e.valueOf()>this.valueOf(),a=o?this:e,u=o?e:this,l=la(a,u,i,s);return o?l.negate():l}diffNow(e="milliseconds",t={}){return this.diff(B.now(),e,t)}until(e){return this.isValid?te.fromDateTimes(this,e):this}hasSame(e,t){if(!this.isValid)return!1;let r=e.valueOf(),s=this.setZone(e.zone,{keepLocalTime:!0});return s.startOf(t)<=r&&r<=s.endOf(t)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;let t=e.base||B.fromObject({},{zone:this.zone}),r=e.padding?thist.valueOf(),Math.min)}static max(...e){if(!e.every(B.isDateTime))throw new De("max requires all arguments be DateTimes");return Gs(e,t=>t.valueOf(),Math.max)}static fromFormatExplain(e,t,r={}){let{locale:s=null,numberingSystem:i=null}=r,o=Z.fromOpts({locale:s,numberingSystem:i,defaultToEN:!0});return wi(o,e,t)}static fromStringExplain(e,t,r={}){return B.fromFormatExplain(e,t,r)}static get DATE_SHORT(){return ln}static get DATE_MED(){return Pn}static get DATE_MED_WITH_WEEKDAY(){return Js}static get DATE_FULL(){return $n}static get DATE_HUGE(){return Rn}static get TIME_SIMPLE(){return jn}static get TIME_WITH_SECONDS(){return Vn}static get TIME_WITH_SHORT_OFFSET(){return qn}static get TIME_WITH_LONG_OFFSET(){return Un}static get TIME_24_SIMPLE(){return Wn}static get TIME_24_WITH_SECONDS(){return Hn}static get TIME_24_WITH_SHORT_OFFSET(){return Kn}static get TIME_24_WITH_LONG_OFFSET(){return Jn}static get DATETIME_SHORT(){return zn}static get DATETIME_SHORT_WITH_SECONDS(){return Yn}static get DATETIME_MED(){return Gn}static get DATETIME_MED_WITH_SECONDS(){return Zn}static get DATETIME_MED_WITH_WEEKDAY(){return zs}static get DATETIME_FULL(){return Qn}static get DATETIME_FULL_WITH_SECONDS(){return Xn}static get DATETIME_HUGE(){return er}static get DATETIME_HUGE_WITH_SECONDS(){return tr}};function Fn(n){if(B.isDateTime(n))return n;if(n&&n.valueOf&&nt(n.valueOf()))return B.fromJSDate(n);if(n&&typeof n=="object")return B.fromObject(n);throw new De(`Unknown datetime argument: ${n}, of type ${typeof n}`)}var gt=qr(ns());var wn=()=>/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;function Ni(n){return n==null?n:n.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds").normalize()}function _a(n,e,t,r){return n.second==0&&n.minute==0&&n.hour==0?n.toLocal().toFormat(e,{locale:r}):n.toLocal().toFormat(t,{locale:r})}function Ba(n){n=Ni(n);let e="";return n.years&&(e+=`${n.years} years, `),n.months&&(e+=`${n.months} months, `),n.weeks&&(e+=`${n.weeks} weeks, `),n.days&&(e+=`${n.days} days, `),n.hours&&(e+=`${n.hours} hours, `),n.minutes&&(e+=`${n.minutes} minutes, `),n.seconds&&(e+=`${Math.round(n.seconds)} seconds, `),n.milliseconds&&(e+=`${Math.round(n.milliseconds)} ms, `),e.endsWith(", ")&&(e=e.substring(0,e.length-2)),e}function Tn(n){return n.includes("/")&&(n=n.substring(n.lastIndexOf("/")+1)),n.endsWith(".md")&&(n=n.substring(0,n.length-3)),n}function Pa(n){return n.includes(".")?n.substring(n.lastIndexOf(".")+1):""}var Bc=gt.alt(gt.regex(new RegExp(wn(),"")),gt.regex(/[0-9\\p{Letter}_-]+/u),gt.whitespace.map(n=>" "),gt.any.map(n=>" ")).many().map(n=>n.join("").split(/\\s+/).join(" ").trim());function $a(n){return Bc.tryParse(n)}var ee=class{static file(e,t=!1,r){return new ee({path:e,embed:t,display:r,subpath:void 0,type:"file"})}static infer(e,t=!1,r){if(e.includes("#^")){let s=e.split("#^");return ee.block(s[0],s[1],t,r)}else if(e.includes("#")){let s=e.split("#");return ee.header(s[0],s[1],t,r)}else return ee.file(e,t,r)}static header(e,t,r,s){return new ee({path:e,embed:r,display:s,subpath:$a(t),type:"header"})}static block(e,t,r,s){return new ee({path:e,embed:r,display:s,subpath:t,type:"block"})}static fromObject(e){return new ee(e)}static parseInner(e){let[t,r]=Pc(e);return ee.infer(t,!1,r)}constructor(e){Object.assign(this,e)}withPath(e){return new ee(Object.assign({},this,{path:e}))}withDisplay(e){return new ee(Object.assign({},this,{display:e}))}withEmbed(e){return this.embed==e?this:new ee(Object.assign({},this,{embed:e}))}withHeader(e){return ee.header(this.path,e,this.embed,this.display)}withBlock(e){return ee.block(this.path,e,this.embed,this.display)}equals(e){return e==null||e==null?!1:this.path==e.path&&this.type==e.type&&this.subpath==e.subpath}toString(){return this.markdown()}toObject(){return{path:this.path,type:this.type,subpath:this.subpath,display:this.display,embed:this.embed}}toFile(){return ee.file(this.path,this.embed,this.display)}toEmbed(){return this.withEmbed(!0)}fromEmbed(){return this.withEmbed(!1)}markdown(){let e=(this.embed?"!":"")+"[["+this.obsidianLink();return e+="|",e+=this.displayOrDefault(),e+="]]",e}displayOrDefault(){if(this.display)return this.display;{let e=Tn(this.path);return(this.type=="header"||this.type=="block")&&(e+=" > "+this.subpath),e}}obsidianLink(){var t,r;let e=this.path.replace("|","\\\\|");return this.type=="header"?e+"#"+((t=this.subpath)==null?void 0:t.replace("|","\\\\|")):this.type=="block"?e+"#^"+((r=this.subpath)==null?void 0:r.replace("|","\\\\|")):e}fileName(){return Tn(this.path)}};function Pc(n){let e=-1;for(;(e=n.indexOf("|",e+1))>=0;)if(!(e>0&&n[e-1]=="\\\\"))return[n.substring(0,e).replace(/\\\\\\|/g,"|"),n.substring(e+1)];return[n.replace(/\\\\\\|/g,"|"),void 0]}var rs=Symbol.for("yaml.alias"),ss=Symbol.for("yaml.document"),Ke=Symbol.for("yaml.map"),Li=Symbol.for("yaml.pair"),Pe=Symbol.for("yaml.scalar"),bt=Symbol.for("yaml.seq"),ke=Symbol.for("yaml.node.type"),Je=n=>!!n&&typeof n=="object"&&n[ke]===rs,Et=n=>!!n&&typeof n=="object"&&n[ke]===ss,ze=n=>!!n&&typeof n=="object"&&n[ke]===Ke,H=n=>!!n&&typeof n=="object"&&n[ke]===Li,W=n=>!!n&&typeof n=="object"&&n[ke]===Pe,Ye=n=>!!n&&typeof n=="object"&&n[ke]===bt;function G(n){if(n&&typeof n=="object")switch(n[ke]){case Ke:case bt:return!0}return!1}function K(n){if(n&&typeof n=="object")switch(n[ke]){case rs:case Ke:case Pe:case bt:return!0}return!1}var Ra=n=>(W(n)||G(n))&&!!n.anchor;var Oe=Symbol("break visit"),ja=Symbol("skip children"),st=Symbol("remove node");function Ge(n,e){let t=Va(e);Et(n)?Sn(null,n.contents,t,Object.freeze([n]))===st&&(n.contents=null):Sn(null,n,t,Object.freeze([]))}Ge.BREAK=Oe;Ge.SKIP=ja;Ge.REMOVE=st;function Sn(n,e,t,r){let s=qa(n,e,t,r);if(K(s)||H(s))return Ua(n,r,s),Sn(n,s,t,r);if(typeof s!="symbol"){if(G(e)){r=Object.freeze(r.concat(e));for(let i=0;in.replace(/[!,[\\]{}]/g,e=>$c[e]),pe=class{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},pe.defaultYaml,e),this.tags=Object.assign({},pe.defaultTags,t)}clone(){let e=new pe(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new pe(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:pe.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},pe.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:pe.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},pe.defaultTags),this.atNextDocument=!1);let r=e.trim().split(/[ \\t]+/),s=r.shift();switch(s){case"%TAG":{if(r.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),r.length<2))return!1;let[i,o]=r;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,r.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;let[i]=r;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{let o=/^\\d+\\.\\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${s}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){let o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren\'t resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}let[,r,s]=e.match(new RegExp("^(.*!)([^!]*)$","s"));s||t(`The ${e} tag has no suffix`);let i=this.tags[r];if(i)try{return i+decodeURIComponent(s)}catch(o){return t(String(o)),null}return r==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,r]of Object.entries(this.tags))if(e.startsWith(r))return t+Rc(e.substring(r.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],r=Object.entries(this.tags),s;if(e&&r.length>0&&K(e.contents)){let i={};Ge(e.contents,(o,a)=>{K(a)&&a.tag&&(i[a.tag]=!0)}),s=Object.keys(i)}else s=[];for(let[i,o]of r)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||s.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`\n`)}};pe.defaultYaml={explicit:!1,version:"1.2"};pe.defaultTags={"!!":"tag:yaml.org,2002:"};function os(n){if(/[\\x00-\\x19\\s,[\\]{}]/.test(n)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(n)}`;throw new Error(t)}return!0}function Ai(n){let e=new Set;return Ge(n,{Value(t,r){r.anchor&&e.add(r.anchor)}}),e}function Mi(n,e){for(let t=1;;++t){let r=`${n}${t}`;if(!e.has(r))return r}}function Wa(n,e){let t=[],r=new Map,s=null;return{onAnchor:i=>{t.push(i),s||(s=Ai(n));let o=Mi(e,s);return s.add(o),o},setAnchors:()=>{for(let i of t){let o=r.get(i);if(typeof o=="object"&&o.anchor&&(W(o.node)||G(o.node)))o.node.anchor=o.anchor;else{let a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=i,a}}},sourceObjects:r}}function vt(n,e,t,r){if(r&&typeof r=="object")if(Array.isArray(r))for(let s=0,i=r.length;sme(r,String(s),t));if(n&&typeof n.toJSON=="function"){if(!t||!Ra(n))return n.toJSON(e,t);let r={aliasCount:0,count:1,res:void 0};t.anchors.set(n,r),t.onCreate=i=>{r.res=i,delete t.onCreate};let s=n.toJSON(e,t);return t.onCreate&&t.onCreate(s),s}return typeof n=="bigint"&&!(t!=null&&t.keep)?Number(n):n}var It=class{constructor(e){Object.defineProperty(this,ke,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:r,onAnchor:s,reviver:i}={}){if(!Et(e))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof r=="number"?r:100},a=me(this,"",o);if(typeof s=="function")for(let{count:u,res:l}of o.anchors.values())s(l,u);return typeof i=="function"?vt(i,{"":a},"",a):a}};var Ft=class extends It{constructor(e){super(rs),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return Ge(e,{Node:(r,s)=>{if(s===this)return Ge.BREAK;s.anchor===this.source&&(t=s)}}),t}toJSON(e,t){if(!t)return{source:this.source};let{anchors:r,doc:s,maxAliasCount:i}=t,o=this.resolve(s);if(!o){let u=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(u)}let a=r.get(o);if(a||(me(o,null,t),a=r.get(o)),!a||a.res===void 0){let u="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(u)}if(i>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=as(s,o,r)),a.count*a.aliasCount>i)){let u="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(u)}return a.res}toString(e,t,r){let s=`*${this.source}`;if(e){if(os(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let i=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(i)}if(e.implicitKey)return`${s} `}return s}};function as(n,e,t){if(Je(e)){let r=e.resolve(n),s=t&&r&&t.get(r);return s?s.count*s.aliasCount:0}else if(G(e)){let r=0;for(let s of e.items){let i=as(n,s,t);i>r&&(r=i)}return r}else if(H(e)){let r=as(n,e.key,t),s=as(n,e.value,t);return Math.max(r,s)}return 1}var us=n=>!n||typeof n!="function"&&typeof n!="object",P=class extends It{constructor(e){super(Pe),this.value=e}toJSON(e,t){return t!=null&&t.keep?this.value:me(this.value,e,t)}toString(){return String(this.value)}};P.BLOCK_FOLDED="BLOCK_FOLDED";P.BLOCK_LITERAL="BLOCK_LITERAL";P.PLAIN="PLAIN";P.QUOTE_DOUBLE="QUOTE_DOUBLE";P.QUOTE_SINGLE="QUOTE_SINGLE";var jc="tag:yaml.org,2002:";function Vc(n,e,t){var r;if(e){let s=t.filter(o=>o.tag===e),i=(r=s.find(o=>!o.format))!=null?r:s[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return t.find(s=>{var i;return((i=s.identify)==null?void 0:i.call(s,n))&&!s.format})}function wt(n,e,t){var h,p,f;if(Et(n)&&(n=n.contents),K(n))return n;if(H(n)){let F=(p=(h=t.schema[Ke]).createNode)==null?void 0:p.call(h,t.schema,null,t);return F.items.push(n),F}(n instanceof String||n instanceof Number||n instanceof Boolean||typeof BigInt!="undefined"&&n instanceof BigInt)&&(n=n.valueOf());let{aliasDuplicateObjects:r,onAnchor:s,onTagObj:i,schema:o,sourceObjects:a}=t,u;if(r&&n&&typeof n=="object"){if(u=a.get(n),u)return u.anchor||(u.anchor=s(n)),new Ft(u.anchor);u={anchor:null,node:null},a.set(n,u)}e!=null&&e.startsWith("!!")&&(e=jc+e.slice(2));let l=Vc(n,e,o.tags);if(!l){if(n&&typeof n.toJSON=="function"&&(n=n.toJSON()),!n||typeof n!="object"){let F=new P(n);return u&&(u.node=F),F}l=n instanceof Map?o[Ke]:Symbol.iterator in Object(n)?o[bt]:o[Ke]}i&&(i(l),delete t.onTagObj);let d=l!=null&&l.createNode?l.createNode(t.schema,n,t):typeof((f=l==null?void 0:l.nodeClass)==null?void 0:f.from)=="function"?l.nodeClass.from(t.schema,n,t):new P(n);return e?d.tag=e:l.default||(d.tag=l.tag),u&&(u.node=d),d}function pr(n,e,t){let r=t;for(let s=e.length-1;s>=0;--s){let i=e[s];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){let o=[];o[i]=r,r=o}else r=new Map([[i,r]])}return wt(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:n,sourceObjects:new Map})}var Cn=n=>n==null||typeof n=="object"&&!!n[Symbol.iterator]().next().done,Jt=class extends It{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(r=>K(r)||H(r)?r.clone(e):r),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Cn(e))this.add(t);else{let[r,...s]=e,i=this.get(r,!0);if(G(i))i.addIn(s,t);else if(i===void 0&&this.schema)this.set(r,pr(this.schema,s,t));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${s}`)}}deleteIn(e){let[t,...r]=e;if(r.length===0)return this.delete(t);let s=this.get(t,!0);if(G(s))return s.deleteIn(r);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${r}`)}getIn(e,t){let[r,...s]=e,i=this.get(r,!0);return s.length===0?!t&&W(i)?i.value:i:G(i)?i.getIn(s,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!H(t))return!1;let r=t.value;return r==null||e&&W(r)&&r.value==null&&!r.commentBefore&&!r.comment&&!r.tag})}hasIn(e){let[t,...r]=e;if(r.length===0)return this.has(t);let s=this.get(t,!0);return G(s)?s.hasIn(r):!1}setIn(e,t){let[r,...s]=e;if(s.length===0)this.set(r,t);else{let i=this.get(r,!0);if(G(i))i.setIn(s,t);else if(i===void 0&&this.schema)this.set(r,pr(this.schema,s,t));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${s}`)}}};Jt.maxFlowStringSingleLineLength=60;var Ha=n=>n.replace(/^(?!$)(?: $)?/gm,"#");function $e(n,e){return/^\\n+$/.test(n)?n.substring(1):e?n.replace(/^(?! *$)/gm,e):n}var it=(n,e,t)=>n.endsWith(`\n`)?$e(t,e):t.includes(`\n`)?`\n`+$e(t,e):(n.endsWith(" ")?"":" ")+t;var _i="flow",ls="block",mr="quoted";function Dr(n,e,t="flow",{indentAtStart:r,lineWidth:s=80,minContentWidth:i=20,onFold:o,onOverflow:a}={}){if(!s||s<0)return n;let u=Math.max(1+i,1+s-e.length);if(n.length<=u)return n;let l=[],d={},h=s-e.length;typeof r=="number"&&(r>s-Math.max(2,i)?l.push(0):h=s-r);let p,f,F=!1,g=-1,y=-1,S=-1;t===ls&&(g=Ka(n,g,e.length),g!==-1&&(h=g+u));for(let v;v=n[g+=1];){if(t===mr&&v==="\\\\"){switch(y=g,n[g+1]){case"x":g+=3;break;case"u":g+=5;break;case"U":g+=9;break;default:g+=1}S=g}if(v===`\n`)t===ls&&(g=Ka(n,g,e.length)),h=g+e.length+u,p=void 0;else{if(v===" "&&f&&f!==" "&&f!==`\n`&&f!==" "){let D=n[g+1];D&&D!==" "&&D!==`\n`&&D!==" "&&(p=g)}if(g>=h)if(p)l.push(p),h=p+u,p=void 0;else if(t===mr){for(;f===" "||f===" ";)f=v,v=n[g+=1],F=!0;let D=g>S+1?g-2:y-1;if(d[D])return n;l.push(D),d[D]=!0,h=D+u,p=void 0}else F=!0}f=v}if(F&&a&&a(),l.length===0)return n;o&&o();let O=n.slice(0,l[0]);for(let v=0;v({indentAtStart:e?n.indent.length:n.indentAtStart,lineWidth:n.options.lineWidth,minContentWidth:n.options.minContentWidth}),ds=n=>/^(%|---|\\.\\.\\.)/m.test(n);function qc(n,e,t){if(!e||e<0)return!1;let r=e-t,s=n.length;if(s<=r)return!1;for(let i=0,o=0;ir)return!0;if(o=i+1,s-o<=r)return!1}return!0}function yr(n,e){let t=JSON.stringify(n);if(e.options.doubleQuotedAsJSON)return t;let{implicitKey:r}=e,s=e.options.doubleQuotedMinMultiLineLength,i=e.indent||(ds(n)?" ":""),o="",a=0;for(let u=0,l=t[u];l;l=t[++u])if(l===" "&&t[u+1]==="\\\\"&&t[u+2]==="n"&&(o+=t.slice(a,u)+"\\\\ ",u+=1,a=u,l="\\\\"),l==="\\\\")switch(t[u+1]){case"u":{o+=t.slice(a,u);let d=t.substr(u+2,4);switch(d){case"0000":o+="\\\\0";break;case"0007":o+="\\\\a";break;case"000b":o+="\\\\v";break;case"001b":o+="\\\\e";break;case"0085":o+="\\\\N";break;case"00a0":o+="\\\\_";break;case"2028":o+="\\\\L";break;case"2029":o+="\\\\P";break;default:d.substr(0,2)==="00"?o+="\\\\x"+d.substr(2):o+=t.substr(u,6)}u+=5,a=u+1}break;case"n":if(r||t[u+2]===\'"\'||t.length\n`;let h,p;for(p=t.length;p>0;--p){let T=t[p-1];if(T!==`\n`&&T!==" "&&T!==" ")break}let f=t.substring(p),F=f.indexOf(`\n`);F===-1?h="-":t===f||F!==f.length-1?(h="+",i&&i()):h="",f&&(t=t.slice(0,-f.length),f[f.length-1]===`\n`&&(f=f.slice(0,-1)),f=f.replace(Pi,`$&${l}`));let g=!1,y,S=-1;for(y=0;y")+(g?l?"2":"1":"")+h;if(n&&(D+=" "+a(n.replace(/ ?[\\r\\n]+/g," ")),s&&s()),d)return t=t.replace(/\\n+/g,`$&${l}`),`${D}\n${l}${O}${t}${f}`;t=t.replace(/\\n+/g,`\n$&`).replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g,"$1$2").replace(/\\n+/g,`$&${l}`);let w=Dr(`${O}${t}${f}`,l,ls,fs(r,!0));return`${D}\n${l}${w}`}function Uc(n,e,t,r){let{type:s,value:i}=n,{actualString:o,implicitKey:a,indent:u,indentStep:l,inFlow:d}=e;if(a&&i.includes(`\n`)||d&&/[[\\]{},]/.test(i))return xn(i,e);if(!i||/^[\\n\\t ,[\\]{}#&*!|>\'"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(i))return a||d||!i.includes(`\n`)?xn(i,e):cs(n,e,t,r);if(!a&&!d&&s!==P.PLAIN&&i.includes(`\n`))return cs(n,e,t,r);if(ds(i)){if(u==="")return e.forceBlockIndent=!0,cs(n,e,t,r);if(a&&u===l)return xn(i,e)}let h=i.replace(/\\n+/g,`$&\n${u}`);if(o){let p=g=>{var y;return g.default&&g.tag!=="tag:yaml.org,2002:str"&&((y=g.test)==null?void 0:y.test(h))},{compat:f,tags:F}=e.doc.schema;if(F.some(p)||f!=null&&f.some(p))return xn(i,e)}return a?h:Dr(h,u,_i,fs(e,!1))}function zt(n,e,t,r){let{implicitKey:s,inFlow:i}=e,o=typeof n.value=="string"?n:Object.assign({},n,{value:String(n.value)}),{type:a}=n;a!==P.QUOTE_DOUBLE&&/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(o.value)&&(a=P.QUOTE_DOUBLE);let u=d=>{switch(d){case P.BLOCK_FOLDED:case P.BLOCK_LITERAL:return s||i?xn(o.value,e):cs(o,e,t,r);case P.QUOTE_DOUBLE:return yr(o.value,e);case P.QUOTE_SINGLE:return Bi(o.value,e);case P.PLAIN:return Uc(o,e,t,r);default:return null}},l=u(a);if(l===null){let{defaultKeyType:d,defaultStringType:h}=e.options,p=s&&d||h;if(l=u(p),l===null)throw new Error(`Unsupported default string type ${p}`)}return l}function hs(n,e){let t=Object.assign({blockQuote:!0,commentString:Ha,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},n.schema.toStringOptions,e),r;switch(t.collectionStyle){case"block":r=!1;break;case"flow":r=!0;break;default:r=null}return{anchors:new Set,doc:n,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:r,options:t}}function Wc(n,e){var s,i,o,a;if(e.tag){let u=n.filter(l=>l.tag===e.tag);if(u.length>0)return(s=u.find(l=>l.format===e.format))!=null?s:u[0]}let t,r;if(W(e)){r=e.value;let u=n.filter(l=>{var d;return(d=l.identify)==null?void 0:d.call(l,r)});t=(i=u.find(l=>l.format===e.format))!=null?i:u.find(l=>!l.format)}else r=e,t=n.find(u=>u.nodeClass&&r instanceof u.nodeClass);if(!t){let u=(a=(o=r==null?void 0:r.constructor)==null?void 0:o.name)!=null?a:typeof r;throw new Error(`Tag not resolved for ${u} value`)}return t}function Hc(n,e,{anchors:t,doc:r}){if(!r.directives)return"";let s=[],i=(W(n)||G(n))&&n.anchor;i&&os(i)&&(t.add(i),s.push(`&${i}`));let o=n.tag?n.tag:e.default?null:e.tag;return o&&s.push(r.directives.tagString(o)),s.join(" ")}function Tt(n,e,t,r){var u,l;if(H(n))return n.toString(e,t,r);if(Je(n)){if(e.doc.directives)return n.toString(e);if((u=e.resolvedAliases)!=null&&u.has(n))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(n):e.resolvedAliases=new Set([n]),n=n.resolve(e.doc)}let s,i=K(n)?n:e.doc.createNode(n,{onTagObj:d=>s=d});s||(s=Wc(e.doc.schema.tags,i));let o=Hc(i,s,e);o.length>0&&(e.indentAtStart=((l=e.indentAtStart)!=null?l:0)+o.length+1);let a=typeof s.stringify=="function"?s.stringify(i,e,t,r):W(i)?zt(i,e,t,r):i.toString(e,t,r);return o?W(i)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}\n${e.indent}${a}`:a}function Ja({key:n,value:e},t,r,s){var C,M;let{allNullValues:i,doc:o,indent:a,indentStep:u,options:{commentString:l,indentSeq:d,simpleKeys:h}}=t,p=K(n)&&n.comment||null;if(h){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(G(n)){let V="With simple keys, collection cannot be used as a key value";throw new Error(V)}}let f=!h&&(!n||p&&e==null&&!t.inFlow||G(n)||(W(n)?n.type===P.BLOCK_FOLDED||n.type===P.BLOCK_LITERAL:typeof n=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!f&&(h||!i),indent:a+u});let F=!1,g=!1,y=Tt(n,t,()=>F=!0,()=>g=!0);if(!f&&!t.inFlow&&y.length>1024){if(h)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");f=!0}if(t.inFlow){if(i||e==null)return F&&r&&r(),y===""?"?":f?`? ${y}`:y}else if(i&&!h||e==null&&f)return y=`? ${y}`,p&&!F?y+=it(y,t.indent,l(p)):g&&s&&s(),y;F&&(p=null),f?(p&&(y+=it(y,t.indent,l(p))),y=`? ${y}\n${a}:`):(y=`${y}:`,p&&(y+=it(y,t.indent,l(p))));let S,O,v;K(e)?(S=!!e.spaceBefore,O=e.commentBefore,v=e.comment):(S=!1,O=null,v=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!f&&!p&&W(e)&&(t.indentAtStart=y.length+1),g=!1,!d&&u.length>=2&&!t.inFlow&&!f&&Ye(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let D=!1,w=Tt(e,t,()=>D=!0,()=>g=!0),T=" ";if(p||S||O){if(T=S?`\n`:"",O){let V=l(O);T+=`\n${$e(V,t.indent)}`}w===""&&!t.inFlow?T===`\n`&&(T=`\n\n`):T+=`\n${t.indent}`}else if(!f&&G(e)){let V=w[0],j=w.indexOf(`\n`),z=j!==-1,re=(M=(C=t.inFlow)!=null?C:e.flow)!=null?M:e.items.length===0;if(z||!re){let le=!1;if(z&&(V==="&"||V==="!")){let x=w.indexOf(" ");V==="&"&&x!==-1&&xn===za||W(n)&&n.value===za&&(!n.type||n.type===P.PLAIN);function $i(n,e,t){let r=n&&Je(t)?t.resolve(n.doc):t;if(!ze(r))throw new Error("Merge sources must be maps or map aliases");let s=r.toJSON(null,n,Map);for(let[i,o]of s)e instanceof Map?e.has(i)||e.set(i,o):e instanceof Set?e.add(i):Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}function Jc(n,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(K(n)&&(t!=null&&t.doc)){let r=hs(t.doc,{});r.anchors=new Set;for(let i of t.anchors.keys())r.anchors.add(i.anchor);r.inFlow=!0,r.inStringifyKey=!0;let s=n.toString(r);if(!t.mapKeyWarned){let i=JSON.stringify(s);i.length>40&&(i=i.substring(0,36)+\'..."\'),ps(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${i}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return s}return JSON.stringify(e)}function On(n,e,t){let r=wt(n,void 0,t),s=wt(e,void 0,t);return new se(r,s)}var se=class{constructor(e,t=null){Object.defineProperty(this,ke,{value:Li}),this.key=e,this.value=t}clone(e){let{key:t,value:r}=this;return K(t)&&(t=t.clone(e)),K(r)&&(r=r.clone(e)),new se(t,r)}toJSON(e,t){let r=t!=null&&t.mapAsMap?new Map:{};return ms(t,r,this)}toString(e,t,r){return e!=null&&e.doc?Ja(this,e,t,r):JSON.stringify(this)}};function ys(n,e,t){var i;return(((i=e.inFlow)!=null?i:n.flow)?Yc:zc)(n,e,t)}function zc({comment:n,items:e},t,{blockItemPrefix:r,flowChars:s,itemIndent:i,onChompKeep:o,onComment:a}){let{indent:u,options:{commentString:l}}=t,d=Object.assign({},t,{indent:i,type:null}),h=!1,p=[];for(let F=0;Fy=null,()=>h=!0);y&&(S+=it(S,i,l(y))),h&&y&&(h=!1),p.push(r+S)}let f;if(p.length===0)f=s.start+s.end;else{f=p[0];for(let F=1;Fy=null);Fd||S.includes(`\n`))&&(l=!0),h.push(S),d=h.length}let{start:p,end:f}=t;if(h.length===0)return p+f;if(!l){let F=h.reduce((g,y)=>g+y.length+2,2);l=e.options.lineWidth>0&&F>e.options.lineWidth}if(l){let F=p;for(let g of h)F+=g?`\n${i}${s}${g}`:`\n`;return`${F}\n${s}${f}`}else return`${p}${o}${h.join(" ")}${o}${f}`}function Ds({indent:n,options:{commentString:e}},t,r,s){if(r&&s&&(r=r.replace(/^\\n+/,"")),r){let i=$e(e(r),n);t.push(i.trimStart())}}function Nt(n,e){let t=W(e)?e.value:e;for(let r of n)if(H(r)&&(r.key===e||r.key===t||W(r.key)&&r.key.value===t))return r}var ue=class extends Jt{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Ke,e),this.items=[]}static from(e,t,r){let{keepUndefined:s,replacer:i}=r,o=new this(e),a=(u,l)=>{if(typeof i=="function")l=i.call(t,u,l);else if(Array.isArray(i)&&!i.includes(u))return;(l!==void 0||s)&&o.items.push(On(u,l,r))};if(t instanceof Map)for(let[u,l]of t)a(u,l);else if(t&&typeof t=="object")for(let u of Object.keys(t))a(u,t[u]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){var o;let r;H(e)?r=e:!e||typeof e!="object"||!("key"in e)?r=new se(e,e==null?void 0:e.value):r=new se(e.key,e.value);let s=Nt(this.items,r.key),i=(o=this.schema)==null?void 0:o.sortMapEntries;if(s){if(!t)throw new Error(`Key ${r.key} already set`);W(s.value)&&us(r.value)?s.value.value=r.value:s.value=r.value}else if(i){let a=this.items.findIndex(u=>i(r,u)<0);a===-1?this.items.push(r):this.items.splice(a,0,r)}else this.items.push(r)}delete(e){let t=Nt(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){var i;let r=Nt(this.items,e),s=r==null?void 0:r.value;return(i=!t&&W(s)?s.value:s)!=null?i:void 0}has(e){return!!Nt(this.items,e)}set(e,t){this.add(new se(e,t),!0)}toJSON(e,t,r){let s=r?new r:t!=null&&t.mapAsMap?new Map:{};t!=null&&t.onCreate&&t.onCreate(s);for(let i of this.items)ms(t,s,i);return s}toString(e,t,r){if(!e)return JSON.stringify(this);for(let s of this.items)if(!H(s))throw new Error(`Map items must all be pairs; found ${JSON.stringify(s)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),ys(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:r,onComment:t})}};var Ze={collection:"map",default:!0,nodeClass:ue,tag:"tag:yaml.org,2002:map",resolve(n,e){return ze(n)||e("Expected a mapping for this tag"),n},createNode:(n,e,t)=>ue.from(n,e,t)};var we=class extends Jt{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(bt,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=gs(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){let r=gs(e);if(typeof r!="number")return;let s=this.items[r];return!t&&W(s)?s.value:s}has(e){let t=gs(e);return typeof t=="number"&&t=0?e:null}var Qe={collection:"seq",default:!0,nodeClass:we,tag:"tag:yaml.org,2002:seq",resolve(n,e){return Ye(n)||e("Expected a sequence for this tag"),n},createNode:(n,e,t)=>we.from(n,e,t)};var Lt={identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify(n,e,t,r){return e=Object.assign({actualString:!0},e),zt(n,e,t,r)}};var Yt={identify:n=>n==null,createNode:()=>new P(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new P(null),stringify:({source:n},e)=>typeof n=="string"&&Yt.test.test(n)?n:e.options.nullStr};var gr={identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:n=>new P(n[0]==="t"||n[0]==="T"),stringify({source:n,value:e},t){if(n&&gr.test.test(n)){let r=n[0]==="t"||n[0]==="T";if(e===r)return n}return e?t.options.trueStr:t.options.falseStr}};function Te({format:n,minFractionDigits:e,tag:t,value:r}){if(typeof r=="bigint")return String(r);let s=typeof r=="number"?r:Number(r);if(!isFinite(s))return isNaN(s)?".nan":s<0?"-.inf":".inf";let i=JSON.stringify(r);if(!n&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\\d/.test(i)){let o=i.indexOf(".");o<0&&(o=i.length,i+=".");let a=e-(i.length-o-1);for(;a-- >0;)i+="0"}return i}var bs={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\\.(?:inf|Inf|INF|nan|NaN|NAN))$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Te},Es={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Te(n)}},Fs={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,resolve(n){let e=new P(parseFloat(n)),t=n.indexOf(".");return t!==-1&&n[n.length-1]==="0"&&(e.minFractionDigits=n.length-t-1),e},stringify:Te};var ws=n=>typeof n=="bigint"||Number.isInteger(n),Ri=(n,e,t,{intAsBigInt:r})=>r?BigInt(n):parseInt(n.substring(e),t);function Ya(n,e,t){let{value:r}=n;return ws(r)&&r>=0?t+r.toString(e):Te(n)}var Ts={identify:n=>ws(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(n,e,t)=>Ri(n,2,8,t),stringify:n=>Ya(n,8,"0o")},Ss={identify:ws,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(n,e,t)=>Ri(n,0,10,t),stringify:Te},ks={identify:n=>ws(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(n,e,t)=>Ri(n,2,16,t),stringify:n=>Ya(n,16,"0x")};var Ga=[Ze,Qe,Lt,Yt,gr,Ts,Ss,ks,bs,Es,Fs];function Za(n){return typeof n=="bigint"||Number.isInteger(n)}var Cs=({value:n})=>JSON.stringify(n),Gc=[{identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify:Cs},{identify:n=>n==null,createNode:()=>new P(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Cs},{identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:n=>n==="true",stringify:Cs},{identify:Za,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(n,e,{intAsBigInt:t})=>t?BigInt(n):parseInt(n,10),stringify:({value:n})=>Za(n)?n.toString():JSON.stringify(n)},{identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:n=>parseFloat(n),stringify:Cs}],Zc={default:!0,tag:"",test:/^/,resolve(n,e){return e(`Unresolved plain scalar ${JSON.stringify(n)}`),n}},Qa=[Ze,Qe].concat(Gc,Zc);var br={identify:n=>n instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(n,e){if(typeof Buffer=="function")return Buffer.from(n,"base64");if(typeof atob=="function"){let t=atob(n.replace(/[\\n\\r]/g,"")),r=new Uint8Array(t.length);for(let s=0;s1&&e("Each pair must have its own sequence indicator");let i=s.items[0]||new se(new P(null));if(s.commentBefore&&(i.key.commentBefore=i.key.commentBefore?`${s.commentBefore}\n${i.key.commentBefore}`:s.commentBefore),s.comment){let o=(t=i.value)!=null?t:i.key;o.comment=o.comment?`${s.comment}\n${o.comment}`:s.comment}s=i}n.items[r]=H(s)?s:new se(s)}}else e("Expected a sequence for this tag");return n}function Vi(n,e,t){let{replacer:r}=t,s=new we(n);s.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof r=="function"&&(o=r.call(e,String(i++),o));let a,u;if(Array.isArray(o))if(o.length===2)a=o[0],u=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){let l=Object.keys(o);if(l.length===1)a=l[0],u=o[a];else throw new TypeError(`Expected tuple with one key, not ${l.length} keys`)}else a=o;s.items.push(On(a,u,t))}return s}var Er={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:ji,createNode:Vi};var At=class extends we{constructor(){super(),this.add=ue.prototype.add.bind(this),this.delete=ue.prototype.delete.bind(this),this.get=ue.prototype.get.bind(this),this.has=ue.prototype.has.bind(this),this.set=ue.prototype.set.bind(this),this.tag=At.tag}toJSON(e,t){if(!t)return super.toJSON(e);let r=new Map;t!=null&&t.onCreate&&t.onCreate(r);for(let s of this.items){let i,o;if(H(s)?(i=me(s.key,"",t),o=me(s.value,i,t)):i=me(s,"",t),r.has(i))throw new Error("Ordered maps must not include duplicate keys");r.set(i,o)}return r}static from(e,t,r){let s=Vi(e,t,r),i=new this;return i.items=s.items,i}};At.tag="tag:yaml.org,2002:omap";var Fr={collection:"seq",identify:n=>n instanceof Map,nodeClass:At,default:!1,tag:"tag:yaml.org,2002:omap",resolve(n,e){let t=ji(n,e),r=[];for(let{key:s}of t.items)W(s)&&(r.includes(s.value)?e(`Ordered maps must not include duplicate keys: ${s.value}`):r.push(s.value));return Object.assign(new At,t)},createNode:(n,e,t)=>At.from(n,e,t)};function Xa({value:n,source:e},t){return e&&(n?qi:Ui).test.test(e)?e:n?t.options.trueStr:t.options.falseStr}var qi={identify:n=>n===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new P(!0),stringify:Xa},Ui={identify:n=>n===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new P(!1),stringify:Xa};var eu={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?\\.(?:inf|Inf|INF|nan|NaN|NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Te},tu={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n.replace(/_/g,"")),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Te(n)}},nu={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,resolve(n){let e=new P(parseFloat(n.replace(/_/g,""))),t=n.indexOf(".");if(t!==-1){let r=n.substring(t+1).replace(/_/g,"");r[r.length-1]==="0"&&(e.minFractionDigits=r.length)}return e},stringify:Te};var wr=n=>typeof n=="bigint"||Number.isInteger(n);function xs(n,e,t,{intAsBigInt:r}){let s=n[0];if((s==="-"||s==="+")&&(e+=1),n=n.substring(e).replace(/_/g,""),r){switch(t){case 2:n=`0b${n}`;break;case 8:n=`0o${n}`;break;case 16:n=`0x${n}`;break}let o=BigInt(n);return s==="-"?BigInt(-1)*o:o}let i=parseInt(n,t);return s==="-"?-1*i:i}function Wi(n,e,t){let{value:r}=n;if(wr(r)){let s=r.toString(e);return r<0?"-"+t+s.substr(1):t+s}return Te(n)}var ru={identify:wr,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(n,e,t)=>xs(n,2,2,t),stringify:n=>Wi(n,2,"0b")},su={identify:wr,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(n,e,t)=>xs(n,1,8,t),stringify:n=>Wi(n,8,"0")},iu={identify:wr,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(n,e,t)=>xs(n,0,10,t),stringify:Te},ou={identify:wr,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(n,e,t)=>xs(n,2,16,t),stringify:n=>Wi(n,16,"0x")};var Mt=class extends ue{constructor(e){super(e),this.tag=Mt.tag}add(e){let t;H(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new se(e.key,null):t=new se(e,null),Nt(this.items,t.key)||this.items.push(t)}get(e,t){let r=Nt(this.items,e);return!t&&H(r)?W(r.key)?r.key.value:r.key:r}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let r=Nt(this.items,e);r&&!t?this.items.splice(this.items.indexOf(r),1):!r&&t&&this.items.push(new se(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,r){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,r);throw new Error("Set items must all have null values")}static from(e,t,r){let{replacer:s}=r,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof s=="function"&&(o=s.call(t,o,o)),i.items.push(On(o,null,r));return i}};Mt.tag="tag:yaml.org,2002:set";var Tr={collection:"map",identify:n=>n instanceof Set,nodeClass:Mt,default:!1,tag:"tag:yaml.org,2002:set",createNode:(n,e,t)=>Mt.from(n,e,t),resolve(n,e){if(ze(n)){if(n.hasAllNullValues(!0))return Object.assign(new Mt,n);e("Set items must all have null values")}else e("Expected a mapping for this tag");return n}};function Hi(n,e){let t=n[0],r=t==="-"||t==="+"?n.substring(1):n,s=o=>e?BigInt(o):Number(o),i=r.replace(/_/g,"").split(":").reduce((o,a)=>o*s(60)+s(a),s(0));return t==="-"?s(-1)*i:i}function au(n){let{value:e}=n,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return Te(n);let r="";e<0&&(r="-",e*=t(-1));let s=t(60),i=[e%s];return e<60?i.unshift(0):(e=(e-i[0])/s,i.unshift(e%s),e>=60&&(e=(e-i[0])/s,i.unshift(e))),r+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\\d*$/,"")}var Os={identify:n=>typeof n=="bigint"||Number.isInteger(n),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(n,e,{intAsBigInt:t})=>Hi(n,t),stringify:au},vs={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,resolve:n=>Hi(n,!1),stringify:au},vn={identify:n=>n instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\\\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(n){let e=n.match(vn.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,r,s,i,o,a]=e.map(Number),u=e[7]?Number((e[7]+"00").substr(1,3)):0,l=Date.UTC(t,r-1,s,i||0,o||0,a||0,u),d=e[8];if(d&&d!=="Z"){let h=Hi(d,!1);Math.abs(h)<30&&(h*=60),l-=6e4*h}return new Date(l)},stringify:({value:n})=>n.toISOString().replace(/((T00:00)?:00)?\\.000Z$/,"")};var Ki=[Ze,Qe,Lt,Yt,qi,Ui,ru,su,iu,ou,eu,tu,nu,br,Fr,Er,Tr,Os,vs,vn];var uu=new Map([["core",Ga],["failsafe",[Ze,Qe,Lt]],["json",Qa],["yaml11",Ki],["yaml-1.1",Ki]]),lu={binary:br,bool:gr,float:Fs,floatExp:Es,floatNaN:bs,floatTime:vs,int:Ss,intHex:ks,intOct:Ts,intTime:Os,map:Ze,null:Yt,omap:Fr,pairs:Er,seq:Qe,set:Tr,timestamp:vn},cu={"tag:yaml.org,2002:binary":br,"tag:yaml.org,2002:omap":Fr,"tag:yaml.org,2002:pairs":Er,"tag:yaml.org,2002:set":Tr,"tag:yaml.org,2002:timestamp":vn};function Is(n,e){let t=uu.get(e);if(!t)if(Array.isArray(n))t=[];else{let r=Array.from(uu.keys()).filter(s=>s!=="yaml11").map(s=>JSON.stringify(s)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${r} or define customTags array`)}if(Array.isArray(n))for(let r of n)t=t.concat(r);else typeof n=="function"&&(t=n(t.slice()));return t.map(r=>{if(typeof r!="string")return r;let s=lu[r];if(s)return s;let i=Object.keys(lu).map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown custom tag "${r}"; use one of ${i}`)})}var Qc=(n,e)=>n.keye.key?1:0,Gt=class{constructor({compat:e,customTags:t,merge:r,resolveKnownTags:s,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Is(e,"compat"):e?Is(null,e):null,this.merge=!!r,this.name=typeof i=="string"&&i||"core",this.knownTags=s?cu:{},this.tags=Is(t,this.name),this.toStringOptions=a!=null?a:null,Object.defineProperty(this,Ke,{value:Ze}),Object.defineProperty(this,Pe,{value:Lt}),Object.defineProperty(this,bt,{value:Qe}),this.sortMapEntries=typeof o=="function"?o:o===!0?Qc:null}clone(){let e=Object.create(Gt.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};function fu(n,e){var u;let t=[],r=e.directives===!0;if(e.directives!==!1&&n.directives){let l=n.directives.toString(n);l?(t.push(l),r=!0):n.directives.docStart&&(r=!0)}r&&t.push("---");let s=hs(n,e),{commentString:i}=s.options;if(n.commentBefore){t.length!==1&&t.unshift("");let l=i(n.commentBefore);t.unshift($e(l,""))}let o=!1,a=null;if(n.contents){if(K(n.contents)){if(n.contents.spaceBefore&&r&&t.push(""),n.contents.commentBefore){let h=i(n.contents.commentBefore);t.push($e(h,""))}s.forceBlockIndent=!!n.comment,a=n.contents.comment}let l=a?void 0:()=>o=!0,d=Tt(n.contents,s,()=>a=null,l);a&&(d+=it(d,"",i(a))),(d[0]==="|"||d[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${d}`:t.push(d)}else t.push(Tt(n.contents,s));if((u=n.directives)!=null&&u.docEnd)if(n.comment){let l=i(n.comment);l.includes(`\n`)?(t.push("..."),t.push($e(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=n.comment;l&&o&&(l=l.replace(/^\\n+/,"")),l&&((!o||a)&&t[t.length-1]!==""&&t.push(""),t.push($e(i(l),"")))}return t.join(`\n`)+`\n`}var ot=class{constructor(e,t,r){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,ke,{value:ss});let s=null;typeof t=="function"||Array.isArray(t)?s=t:r===void 0&&t&&(r=t,t=void 0);let i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,uniqueKeys:!0,version:"1.2"},r);this.options=i;let{version:o}=i;r!=null&&r._directives?(this.directives=r._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new pe({version:o}),this.setSchema(o,r),this.contents=e===void 0?null:this.createNode(e,s,r)}clone(){let e=Object.create(ot.prototype,{[ke]:{value:ss}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=K(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){In(this.contents)&&this.contents.add(e)}addIn(e,t){In(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){let r=Ai(this);e.anchor=!t||r.has(t)?Mi(t||"a",r):t}return new Ft(e.anchor)}createNode(e,t,r){let s;if(typeof t=="function")e=t.call({"":e},"",e),s=t;else if(Array.isArray(t)){let y=O=>typeof O=="number"||O instanceof String||O instanceof Number,S=t.filter(y).map(String);S.length>0&&(t=t.concat(S)),s=t}else r===void 0&&t&&(r=t,t=void 0);let{aliasDuplicateObjects:i,anchorPrefix:o,flow:a,keepUndefined:u,onTagObj:l,tag:d}=r!=null?r:{},{onAnchor:h,setAnchors:p,sourceObjects:f}=Wa(this,o||"a"),F={aliasDuplicateObjects:i!=null?i:!0,keepUndefined:u!=null?u:!1,onAnchor:h,onTagObj:l,replacer:s,schema:this.schema,sourceObjects:f},g=wt(e,d,F);return a&&G(g)&&(g.flow=!0),p(),g}createPair(e,t,r={}){let s=this.createNode(e,null,r),i=this.createNode(t,null,r);return new se(s,i)}delete(e){return In(this.contents)?this.contents.delete(e):!1}deleteIn(e){return Cn(e)?this.contents==null?!1:(this.contents=null,!0):In(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return G(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return Cn(e)?!t&&W(this.contents)?this.contents.value:this.contents:G(this.contents)?this.contents.getIn(e,t):void 0}has(e){return G(this.contents)?this.contents.has(e):!1}hasIn(e){return Cn(e)?this.contents!==void 0:G(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=pr(this.schema,[e],t):In(this.contents)&&this.contents.set(e,t)}setIn(e,t){Cn(e)?this.contents=t:this.contents==null?this.contents=pr(this.schema,Array.from(e),t):In(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let r;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new pe({version:"1.1"}),r={merge:!0,resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new pe({version:e}),r={merge:!1,resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,r=null;break;default:{let s=JSON.stringify(e);throw new Error(`Expected \'1.1\', \'1.2\' or null as first argument, but found: ${s}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(r)this.schema=new Gt(Object.assign(r,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:r,maxAliasCount:s,onAnchor:i,reviver:o}={}){let a={anchors:new Map,doc:this,keep:!e,mapAsMap:r===!0,mapKeyWarned:!1,maxAliasCount:typeof s=="number"?s:100},u=me(this.contents,t!=null?t:"",a);if(typeof i=="function")for(let{count:l,res:d}of a.anchors.values())i(d,l);return typeof o=="function"?vt(o,{"":u},"",u):u}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return fu(this,e)}};function In(n){if(G(n))return!0;throw new Error("Expected a YAML collection as document contents")}var Sr=class extends Error{constructor(e,t,r,s){super(),this.name=e,this.code=r,this.message=s,this.pos=t}},Xe=class extends Sr{constructor(e,t,r){super("YAMLParseError",e,t,r)}},kr=class extends Sr{constructor(e,t,r){super("YAMLWarning",e,t,r)}},Ji=(n,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));let{line:r,col:s}=t.linePos[0];t.message+=` at line ${r}, column ${s}`;let i=s-1,o=n.substring(e.lineStarts[r-1],e.lineStarts[r]).replace(/[\\n\\r]+$/,"");if(i>=60&&o.length>80){let a=Math.min(i-39,o.length-79);o="\\u2026"+o.substring(a),i-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\\u2026"),r>1&&/^ *$/.test(o.substring(0,i))){let a=n.substring(e.lineStarts[r-2],e.lineStarts[r-1]);a.length>80&&(a=a.substring(0,79)+`\\u2026\n`),o=a+o}if(/[^ ]/.test(o)){let a=1,u=t.linePos[1];u&&u.line===r&&u.col>s&&(a=Math.max(1,Math.min(u.col-s,80-i)));let l=" ".repeat(i)+"^".repeat(a);t.message+=`:\n\n${o}\n${l}\n`}};function at(n,{flow:e,indicator:t,next:r,offset:s,onError:i,startOnNewline:o}){let a=!1,u=o,l=o,d="",h="",p=!1,f=!1,F=!1,g=null,y=null,S=null,O=null,v=null;for(let T of n)switch(F&&(T.type!=="space"&&T.type!=="newline"&&T.type!=="comma"&&i(T.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),F=!1),T.type){case"space":!e&&u&&t!=="doc-start"&&T.source[0]===" "&&i(T,"TAB_AS_INDENT","Tabs are not allowed as indentation"),l=!0;break;case"comment":{l||i(T,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let C=T.source.substring(1)||" ";d?d+=h+C:d=C,h="",u=!1;break}case"newline":u?d?d+=T.source:a=!0:h+=T.source,u=!0,p=!0,(g||y)&&(f=!0),l=!0;break;case"anchor":g&&i(T,"MULTIPLE_ANCHORS","A node can have at most one anchor"),T.source.endsWith(":")&&i(T.offset+T.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),g=T,v===null&&(v=T.offset),u=!1,l=!1,F=!0;break;case"tag":{y&&i(T,"MULTIPLE_TAGS","A node can have at most one tag"),y=T,v===null&&(v=T.offset),u=!1,l=!1,F=!0;break}case t:(g||y)&&i(T,"BAD_PROP_ORDER",`Anchors and tags must be after the ${T.source} indicator`),O&&i(T,"UNEXPECTED_TOKEN",`Unexpected ${T.source} in ${e!=null?e:"collection"}`),O=T,u=!1,l=!1;break;case"comma":if(e){S&&i(T,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),S=T,u=!1,l=!1;break}default:i(T,"UNEXPECTED_TOKEN",`Unexpected ${T.type} token`),u=!1,l=!1}let D=n[n.length-1],w=D?D.offset+D.source.length:s;return F&&r&&r.type!=="space"&&r.type!=="newline"&&r.type!=="comma"&&(r.type!=="scalar"||r.source!=="")&&i(r.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),{comma:S,found:O,spaceBefore:a,comment:d,hasNewline:p,hasNewlineAfterProp:f,anchor:g,tag:y,end:w,start:v!=null?v:w}}function _t(n){if(!n)return null;switch(n.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(n.source.includes(`\n`))return!0;if(n.end){for(let e of n.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of n.items){for(let t of e.start)if(t.type==="newline")return!0;if(e.sep){for(let t of e.sep)if(t.type==="newline")return!0}if(_t(e.key)||_t(e.value))return!0}return!1;default:return!0}}function Cr(n,e,t){if((e==null?void 0:e.type)==="flow-collection"){let r=e.end[0];r.indent===n&&(r.source==="]"||r.source==="}")&&_t(e)&&t(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}function Ns(n,e,t){let{uniqueKeys:r}=n.options;if(r===!1)return!1;let s=typeof r=="function"?r:(i,o)=>i===o||W(i)&&W(o)&&i.value===o.value&&!(i.value==="<<"&&n.schema.merge);return e.some(i=>s(i.key,t))}var du="All mapping items must start at the same column";function hu({composeNode:n,composeEmptyNode:e},t,r,s,i){var d,h;let o=(d=i==null?void 0:i.nodeClass)!=null?d:ue,a=new o(t.schema);t.atRoot&&(t.atRoot=!1);let u=r.offset,l=null;for(let p of r.items){let{start:f,key:F,sep:g,value:y}=p,S=at(f,{indicator:"explicit-key-ind",next:F!=null?F:g==null?void 0:g[0],offset:u,onError:s,startOnNewline:!0}),O=!S.found;if(O){if(F&&(F.type==="block-seq"?s(u,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in F&&F.indent!==r.indent&&s(u,"BAD_INDENT",du)),!S.anchor&&!S.tag&&!g){l=S.end,S.comment&&(a.comment?a.comment+=`\n`+S.comment:a.comment=S.comment);continue}(S.hasNewlineAfterProp||_t(F))&&s(F!=null?F:f[f.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else((h=S.found)==null?void 0:h.indent)!==r.indent&&s(u,"BAD_INDENT",du);let v=S.end,D=F?n(t,F,S,s):e(t,v,f,null,S,s);t.schema.compat&&Cr(r.indent,F,s),Ns(t,a.items,D)&&s(v,"DUPLICATE_KEY","Map keys must be unique");let w=at(g!=null?g:[],{indicator:"map-value-ind",next:y,offset:D.range[2],onError:s,startOnNewline:!F||F.type==="block-scalar"});if(u=w.end,w.found){O&&((y==null?void 0:y.type)==="block-map"&&!w.hasNewline&&s(u,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&S.startn&&(n.type==="block-map"||n.type==="block-seq");function mu({composeNode:n,composeEmptyNode:e},t,r,s,i){var y,S;let o=r.start.source==="{",a=o?"flow map":"flow sequence",u=(y=i==null?void 0:i.nodeClass)!=null?y:o?ue:we,l=new u(t.schema);l.flow=!0;let d=t.atRoot;d&&(t.atRoot=!1);let h=r.offset+r.start.source.length;for(let O=0;O0){let O=ut(F,g,t.options.strict,s);O.comment&&(l.comment?l.comment+=`\n`+O.comment:l.comment=O.comment),l.range=[r.offset,g,O.offset]}else l.range=[r.offset,g,g];return l}function Gi(n,e,t,r,s,i){let o=t.type==="block-map"?hu(n,e,t,r,i):t.type==="block-seq"?pu(n,e,t,r,i):mu(n,e,t,r,i),a=o.constructor;return s==="!"||s===a.tagName?(o.tag=a.tagName,o):(s&&(o.tag=s),o)}function Du(n,e,t,r,s){var h,p;let i=r?e.directives.tagName(r.source,f=>s(r,"TAG_RESOLVE_FAILED",f)):null,o=t.type==="block-map"?"map":t.type==="block-seq"?"seq":t.start.source==="{"?"map":"seq";if(!r||!i||i==="!"||i===ue.tagName&&o==="map"||i===we.tagName&&o==="seq"||!o)return Gi(n,e,t,s,i);let a=e.schema.tags.find(f=>f.tag===i&&f.collection===o);if(!a){let f=e.schema.knownTags[i];if(f&&f.collection===o)e.schema.tags.push(Object.assign({},f,{default:!1})),a=f;else return f!=null&&f.collection?s(r,"BAD_COLLECTION_TYPE",`${f.tag} used for ${o} collection, but expects ${f.collection}`,!0):s(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${i}`,!0),Gi(n,e,t,s,i)}let u=Gi(n,e,t,s,i,a),l=(p=(h=a.resolve)==null?void 0:h.call(a,u,f=>s(r,"TAG_RESOLVE_FAILED",f),e.options))!=null?p:u,d=K(l)?l:new P(l);return d.range=u.range,d.tag=i,a!=null&&a.format&&(d.format=a.format),d}function Zi(n,e,t){let r=n.offset,s=Xc(n,e,t);if(!s)return{value:"",type:null,comment:"",range:[r,r,r]};let i=s.mode===">"?P.BLOCK_FOLDED:P.BLOCK_LITERAL,o=n.source?ef(n.source):[],a=o.length;for(let g=o.length-1;g>=0;--g){let y=o[g][1];if(y===""||y==="\\r")a=g;else break}if(a===0){let g=s.chomp==="+"&&o.length>0?`\n`.repeat(Math.max(1,o.length-1)):"",y=r+s.length;return n.source&&(y+=n.source.length),{value:g,type:i,comment:s.comment,range:[r,y,y]}}let u=n.indent+s.indent,l=n.offset+s.length,d=0;for(let g=0;gu&&(u=y.length);else{if(y.length=a;--g)o[g][0].length>u&&(a=g+1);let h="",p="",f=!1;for(let g=0;gu||S[0]===" "?(p===" "?p=`\n`:!f&&p===`\n`&&(p=`\n\n`),h+=p+y.slice(u)+S,p=`\n`,f=!0):S===""?p===`\n`?h+=`\n`:p=`\n`:(h+=p+S,p=" ",f=!1)}switch(s.chomp){case"-":break;case"+":for(let g=a;gt(r+p,f,F);switch(s){case"scalar":a=P.PLAIN,u=tf(i,l);break;case"single-quoted-scalar":a=P.QUOTE_SINGLE,u=nf(i,l);break;case"double-quoted-scalar":a=P.QUOTE_DOUBLE,u=rf(i,l);break;default:return t(n,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${s}`),{value:"",type:null,comment:"",range:[r,r+i.length,r+i.length]}}let d=r+i.length,h=ut(o,d,e,t);return{value:u,type:a,comment:h.comment,range:[r,d,h.offset]}}function tf(n,e){let t="";switch(n[0]){case" ":t="a tab character";break;case",":t="flow indicator character ,";break;case"%":t="directive indicator character %";break;case"|":case">":{t=`block scalar indicator ${n[0]}`;break}case"@":case"`":{t=`reserved character ${n[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),yu(n)}function nf(n,e){return(n[n.length-1]!=="\'"||n.length===1)&&e(n.length,"MISSING_CHAR","Missing closing \'quote"),yu(n.slice(1,-1)).replace(/\'\'/g,"\'")}function yu(n){var u;let e,t;try{e=new RegExp(`(.*?)(?i?n.slice(i,r+1):s)}else t+=s}return(n[n.length-1]!==\'"\'||n.length===1)&&e(n.length,"MISSING_CHAR",\'Missing closing "quote\'),t}function sf(n,e){let t="",r=n[e+1];for(;(r===" "||r===" "||r===`\n`||r==="\\r")&&!(r==="\\r"&&n[e+2]!==`\n`);)r===`\n`&&(t+=`\n`),e+=1,r=n[e+1];return t||(t=" "),{fold:t,offset:e}}var of={0:"\\0",a:"\\x07",b:"\\b",e:"\\x1B",f:"\\f",n:`\n`,r:"\\r",t:" ",v:"\\v",N:"\\x85",_:"\\xA0",L:"\\u2028",P:"\\u2029"," ":" ",\'"\':\'"\',"/":"/","\\\\":"\\\\"," ":" "};function af(n,e,t,r){let s=n.substr(e,t),o=s.length===t&&/^[0-9a-fA-F]+$/.test(s)?parseInt(s,16):NaN;if(isNaN(o)){let a=n.substr(e-2,t+2);return r(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}function Xi(n,e,t,r){let{value:s,type:i,comment:o,range:a}=e.type==="block-scalar"?Zi(e,n.options.strict,r):Qi(e,n.options.strict,r),u=t?n.directives.tagName(t.source,h=>r(t,"TAG_RESOLVE_FAILED",h)):null,l=t&&u?uf(n.schema,s,u,t,r):e.type==="scalar"?lf(n,s,e,r):n.schema[Pe],d;try{let h=l.resolve(s,p=>r(t!=null?t:e,"TAG_RESOLVE_FAILED",p),n.options);d=W(h)?h:new P(h)}catch(h){let p=h instanceof Error?h.message:String(h);r(t!=null?t:e,"TAG_RESOLVE_FAILED",p),d=new P(s)}return d.range=a,d.source=s,i&&(d.type=i),u&&(d.tag=u),l.format&&(d.format=l.format),o&&(d.comment=o),d}function uf(n,e,t,r,s){var a;if(t==="!")return n[Pe];let i=[];for(let u of n.tags)if(!u.collection&&u.tag===t)if(u.default&&u.test)i.push(u);else return u;for(let u of i)if((a=u.test)!=null&&a.test(e))return u;let o=n.knownTags[t];return o&&!o.collection?(n.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(s(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),n[Pe])}function lf({directives:n,schema:e},t,r,s){var o;let i=e.tags.find(a=>{var u;return a.default&&((u=a.test)==null?void 0:u.test(t))})||e[Pe];if(e.compat){let a=(o=e.compat.find(u=>{var l;return u.default&&((l=u.test)==null?void 0:l.test(t))}))!=null?o:e[Pe];if(i.tag!==a.tag){let u=n.tagString(i.tag),l=n.tagString(a.tag),d=`Value may be parsed as either ${u} or ${l}`;s(r,"TAG_RESOLVE_FAILED",d,!0)}}return i}function gu(n,e,t){if(e){t===null&&(t=e.length);for(let r=t-1;r>=0;--r){let s=e[r];switch(s.type){case"space":case"comment":case"newline":n-=s.source.length;continue}for(s=e[++r];(s==null?void 0:s.type)==="space";)n+=s.source.length,s=e[++r];break}}return n}var cf={composeNode:eo,composeEmptyNode:Ls};function eo(n,e,t,r){let{spaceBefore:s,comment:i,anchor:o,tag:a}=t,u,l=!0;switch(e.type){case"alias":u=ff(n,e,r),(o||a)&&r(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":u=Xi(n,e,a,r),o&&(u.anchor=o.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":u=Du(cf,n,e,a,r),o&&(u.anchor=o.source.substring(1));break;default:{let d=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;r(e,"UNEXPECTED_TOKEN",d),u=Ls(n,e.offset,void 0,null,t,r),l=!1}}return o&&u.anchor===""&&r(o,"BAD_ALIAS","Anchor cannot be an empty string"),s&&(u.spaceBefore=!0),i&&(e.type==="scalar"&&e.source===""?u.comment=i:u.commentBefore=i),n.options.keepSourceTokens&&l&&(u.srcToken=e),u}function Ls(n,e,t,r,{spaceBefore:s,comment:i,anchor:o,tag:a,end:u},l){let d={type:"scalar",offset:gu(e,t,r),indent:-1,source:""},h=Xi(n,d,a,l);return o&&(h.anchor=o.source.substring(1),h.anchor===""&&l(o,"BAD_ALIAS","Anchor cannot be an empty string")),s&&(h.spaceBefore=!0),i&&(h.comment=i,h.range[2]=u),h}function ff({options:n},{offset:e,source:t,end:r},s){let i=new Ft(t.substring(1));i.source===""&&s(e,"BAD_ALIAS","Alias cannot be an empty string"),i.source.endsWith(":")&&s(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=e+t.length,a=ut(r,o,n.strict,s);return i.range=[e,o,a.offset],a.comment&&(i.comment=a.comment),i}function bu(n,e,{offset:t,start:r,value:s,end:i},o){let a=Object.assign({_directives:e},n),u=new ot(void 0,a),l={atRoot:!0,directives:u.directives,options:u.options,schema:u.schema},d=at(r,{indicator:"doc-start",next:s!=null?s:i==null?void 0:i[0],offset:t,onError:o,startOnNewline:!0});d.found&&(u.directives.docStart=!0,s&&(s.type==="block-map"||s.type==="block-seq")&&!d.hasNewline&&o(d.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),u.contents=s?eo(l,s,d,o):Ls(l,d.end,r,null,d,o);let h=u.contents.range[2],p=ut(i,h,!1,o);return p.comment&&(u.comment=p.comment),u.range=[t,h,p.offset],u}function xr(n){if(typeof n=="number")return[n,n+1];if(Array.isArray(n))return n.length===2?n:[n[0],n[1]];let{offset:e,source:t}=n;return[e,e+(typeof t=="string"?t.length:1)]}function Eu(n){var s;let e="",t=!1,r=!1;for(let i=0;i{let o=xr(t);i?this.warnings.push(new kr(o,r,s)):this.errors.push(new Xe(o,r,s))},this.directives=new pe({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:r,afterEmptyLine:s}=Eu(this.prelude);if(r){let i=e.contents;if(t)e.comment=e.comment?`${e.comment}\n${r}`:r;else if(s||e.directives.docStart||!i)e.commentBefore=r;else if(G(i)&&!i.flow&&i.items.length>0){let o=i.items[0];H(o)&&(o=o.key);let a=o.commentBefore;o.commentBefore=a?`${r}\n${a}`:r}else{let o=i.commentBefore;i.commentBefore=o?`${r}\n${o}`:r}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:Eu(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,r=-1){for(let s of e)yield*this.next(s);yield*this.end(t,r)}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(t,r,s)=>{let i=xr(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",r,s)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=bu(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,r=new Xe(xr(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(r):this.doc.errors.push(r);break}case"doc-end":{if(!this.doc){let r="Unexpected doc-end without preceding document";this.errors.push(new Xe(xr(e),"UNEXPECTED_TOKEN",r));break}this.doc.directives.docEnd=!0;let t=ut(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let r=this.doc.comment;this.doc.comment=r?`${r}\n${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new Xe(xr(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let r=Object.assign({_directives:this.directives},this.options),s=new ot(void 0,r);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),s.range=[0,t,t],this.decorate(s,!1),yield s}}};var to=Symbol("break visit"),df=Symbol("skip children"),Fu=Symbol("remove item");function Zt(n,e){"type"in n&&n.type==="document"&&(n={start:n.start,value:n.value}),wu(Object.freeze([]),n,e)}Zt.BREAK=to;Zt.SKIP=df;Zt.REMOVE=Fu;Zt.itemAtPath=(n,e)=>{let t=n;for(let[r,s]of e){let i=t==null?void 0:t[r];if(i&&"items"in i)t=i.items[s];else return}return t};Zt.parentCollection=(n,e)=>{let t=Zt.itemAtPath(n,e.slice(0,-1)),r=e[e.length-1][0],s=t==null?void 0:t[r];if(s&&"items"in s)return s;throw new Error("Parent collection not found")};function wu(n,e,t){let r=t(e,n);if(typeof r=="symbol")return r;for(let s of["key","value"]){let i=e[s];if(i&&"items"in i){for(let o=0;o":return"block-scalar-header"}return null}function Re(n){switch(n){case void 0:case" ":case`\n`:case"\\r":case" ":return!0;default:return!1}}var Su="0123456789ABCDEFabcdef".split(""),pf="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*\'()".split(""),io=",[]{}".split(""),mf=` ,[]{}\n\\r `.split(""),oo=n=>!n||mf.includes(n),vr=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){var s;e&&(this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null),this.atEnd=!t;let r=(s=this.next)!=null?s:"stream";for(;r&&(t||this.hasChars(1));)r=yield*this.parseNext(r)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;t===" "||t===" ";)t=this.buffer[++e];return!t||t==="#"||t===`\n`?!0:t==="\\r"?this.buffer[e+1]===`\n`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let r=0;for(;t===" ";)t=this.buffer[++r+e];if(t==="\\r"){let s=this.buffer[r+e+1];if(s===`\n`||!s&&!this.atEnd)return e+r+1}return t===`\n`||r>=this.indentNext||!t&&!this.atEnd?e+r:-1}if(t==="-"||t==="."){let r=this.buffer.substr(e,3);if((r==="---"||r==="...")&&Re(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&ethis.indentValue&&!Re(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&Re(t)){let r=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=r,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let e=this.getLine();if(e===null)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(oo),"doc";case\'"\':case"\'":return yield*this.parseQuotedScalar();case"|":case">":return t+=yield*this.parseBlockScalarHeader(),t+=yield*this.pushSpaces(!0),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t,r=-1;do e=yield*this.pushNewline(),e>0?(t=yield*this.pushSpaces(!1),this.indentValue=r=t):t=0,t+=yield*this.pushSpaces(!0);while(e+t>0);let s=this.getLine();if(s===null)return this.setNext("flow");if((r!==-1&&r"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if(t!=="-")break}return yield*this.pushUntil(t=>Re(t)||t==="#")}*parseBlockScalar(){let e=this.pos-1,t=0,r;e:for(let s=this.pos;r=this.buffer[s];++s)switch(r){case" ":t+=1;break;case`\n`:e=s,t=0;break;case"\\r":{let i=this.buffer[s+1];if(!i&&!this.atEnd)return this.setNext("block-scalar");if(i===`\n`)break}default:break e}if(!r&&!this.atEnd)return this.setNext("block-scalar");if(t>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=t:this.indentNext+=this.blockScalarIndent;do{let s=this.continueScalar(e+1);if(s===-1)break;e=this.buffer.indexOf(`\n`,s)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}if(!this.blockScalarKeep)do{let s=e-1,i=this.buffer[s];i==="\\r"&&(i=this.buffer[--s]);let o=s;for(;i===" "||i===" ";)i=this.buffer[--s];if(i===`\n`&&s>=this.pos&&s+1+t>o)e=s;else break}while(!0);return yield As,yield*this.pushToIndex(e+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e=this.flowLevel>0,t=this.pos-1,r=this.pos-1,s;for(;s=this.buffer[++r];)if(s===":"){let i=this.buffer[r+1];if(Re(i)||e&&i===",")break;t=r}else if(Re(s)){let i=this.buffer[r+1];if(s==="\\r"&&(i===`\n`?(r+=1,s=`\n`,i=this.buffer[r+1]):t=r),i==="#"||e&&io.includes(i))break;if(s===`\n`){let o=this.continueScalar(r+1);if(o===-1)break;r=Math.max(r,o-2)}}else{if(e&&io.includes(s))break;t=r}return!s&&!this.atEnd?this.setNext("plain-scalar"):(yield As,yield*this.pushToIndex(t+1,!0),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let r=this.buffer.slice(this.pos,e);return r?(yield r,this.pos+=r.length,r.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(oo))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(Re(t)||e&&io.includes(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!Re(t)&&t!==">";)t=this.buffer[++e];return yield*this.pushToIndex(t===">"?e+1:e,!1)}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(pf.includes(t))t=this.buffer[++e];else if(t==="%"&&Su.includes(this.buffer[e+1])&&Su.includes(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){let e=this.buffer[this.pos];return e===`\n`?yield*this.pushCount(1):e==="\\r"&&this.charAt(1)===`\n`?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,r;do r=this.buffer[++t];while(r===" "||e&&r===" ");let s=t-this.pos;return s>0&&(yield this.buffer.substr(this.pos,s),this.pos=t),s}*pushUntil(e){let t=this.pos,r=this.buffer[t];for(;!e(r);)r=this.buffer[++t];return yield*this.pushToIndex(t,!1)}};var Ir=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,r=this.lineStarts.length;for(;t>1;this.lineStarts[i]=0;)switch(n[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;((t=n[++e])==null?void 0:t.type)==="space";);return n.splice(e,n.length)}function Cu(n){if(n.start.type==="flow-seq-start")for(let e of n.items)e.sep&&!e.value&&!et(e.start,"explicit-key-ind")&&!et(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,xu(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var Nr=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new vr,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let r of this.lexer.lex(e,t))yield*this.next(r);t||(yield*this.end())}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=e.length;return}let t=Tu(e);if(t)if(t==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let r=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:r,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&(!e||e.type!=="doc-end")){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e!=null?e:this.stack.pop();if(t)if(this.stack.length===0)yield t;else{let r=this.peek(1);switch(t.type==="block-scalar"?t.indent="indent"in r?r.indent:0:t.type==="flow-collection"&&r.type==="document"&&(t.indent=0),t.type==="flow-collection"&&Cu(t),r.type){case"document":r.value=t;break;case"block-scalar":r.props.push(t);break;case"block-map":{let s=r.items[r.items.length-1];if(s.value){r.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(s.sep)s.value=t;else{Object.assign(s,{key:t,sep:[]}),this.onKeyLine=!et(s.start,"explicit-key-ind");return}break}case"block-seq":{let s=r.items[r.items.length-1];s.value?r.items.push({start:[],value:t}):s.value=t;break}case"flow-collection":{let s=r.items[r.items.length-1];!s||s.value?r.items.push({start:[],key:t,sep:[]}):s.sep?s.value=t:Object.assign(s,{key:t,sep:[]});return}default:yield*this.pop(),yield*this.pop(t)}if((r.type==="document"||r.type==="block-map"||r.type==="block-seq")&&(t.type==="block-map"||t.type==="block-seq")){let s=t.items[t.items.length-1];s&&!s.sep&&!s.value&&s.start.length>0&&ku(s.start)===-1&&(t.indent===0||s.start.every(i=>i.type!=="comment"||i.indent=e.indent){let s=!this.onKeyLine&&this.indent===e.indent&&t.sep&&this.type!=="seq-item-ind",i=[];if(s&&t.sep&&!t.value){let o=[];for(let a=0;ae.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(i=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":s||t.value?(i.push(this.sourceToken),e.items.push({start:i}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!et(t.start,"explicit-key-ind")?t.start.push(this.sourceToken):s||t.value?(i.push(this.sourceToken),e.items.push({start:i})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]}),this.onKeyLine=!0;return;case"map-value-ind":if(et(t.start,"explicit-key-ind"))if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(et(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(xu(t.key)&&!et(t.sep,"newline")){let o=Nn(t.start),a=t.key,u=t.sep;u.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:u}]})}else i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(et(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let o=Nn(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||s?e.items.push({start:i,key:null,sep:[this.sourceToken]}):et(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let o=this.flowScalar(this.type);s||t.value?(e.items.push({start:i,key:o,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(o):(Object.assign(t,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{let o=this.startBlockValue(e);if(o){s&&o.type!=="block-seq"&&et(t.start,"explicit-key-ind")&&e.items.push({start:i}),this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){var r;let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let s="end"in t.value?t.value.end:void 0,i=Array.isArray(s)?s[s.length-1]:void 0;(i==null?void 0:i.type)==="comment"?s==null||s.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let s=e.items[e.items.length-2],i=(r=s==null?void 0:s.value)==null?void 0:r.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||et(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let s=this.startBlockValue(e);if(s){this.stack.push(s);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let r;do yield*this.pop(),r=this.peek(1);while(r&&r.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let s=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:s,sep:[]}):t.sep?this.stack.push(s):Object.assign(t,{key:s,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let r=this.startBlockValue(e);r?this.stack.push(r):(yield*this.pop(),yield*this.step())}else{let r=this.peek(2);if(r.type==="block-map"&&(this.type==="map-value-ind"&&r.indent===e.indent||this.type==="newline"&&!r.items[r.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&r.type!=="flow-collection"){let s=Ms(r),i=Nn(s);Cu(e);let o=e.end.splice(1,e.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:i,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`\n`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`\n`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=Ms(e),r=Nn(t);return r.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r}]}}case"map-value-ind":{this.onKeyLine=!0;let t=Ms(e),r=Nn(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(r=>r.type==="newline"||r.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};function Df(n){let e=n.prettyErrors!==!1;return{lineCounter:n.lineCounter||e&&new Ir||null,prettyErrors:e}}function Ou(n,e={}){let{lineCounter:t,prettyErrors:r}=Df(e),s=new Nr(t==null?void 0:t.addNewLine),i=new Or(e),o=null;for(let a of i.compose(s.parse(n),!0,n.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Xe(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return r&&t&&(o.errors.forEach(Ji(n,t)),o.warnings.forEach(Ji(n,t))),o}function ao(n,e,t){let r;typeof e=="function"?r=e:t===void 0&&e&&typeof e=="object"&&(t=e);let s=Ou(n,t);if(!s)return null;if(s.warnings.forEach(i=>ps(s.options.logLevel,i)),s.errors.length>0){if(s.options.logLevel!=="silent")throw s.errors[0];s.errors=[]}return s.toJS(Object.assign({reviver:r},t))}var $s=qr(Mu());var b=qr(ns());var tt;(v=>{v.DEFAULT_TO_STRING={nullRepresentation:"-",dateFormat:"MMMM dd, yyyy",dateTimeFormat:"h:mm a - MMMM dd, yyyy"};function e(D,w=v.DEFAULT_TO_STRING,T=!1){let C=t(D);if(!C)return w.nullRepresentation;switch(C.type){case"null":return w.nullRepresentation;case"string":return C.value;case"number":case"boolean":return""+C.value;case"link":return C.value.markdown();case"function":return"";case"array":let M="";return T&&(M+="["),M+=C.value.map(V=>e(V,w,!0)).join(", "),T&&(M+="]"),M;case"object":return"{ "+Object.entries(C.value).map(V=>V[0]+": "+e(V[1],w,!0)).join(", ")+" }";case"date":return _a(C.value,w.dateFormat,w.dateTimeFormat);case"duration":return Ba(C.value)}}v.toString=e;function t(D){return f(D)?{type:"null",value:D}:d(D)?{type:"number",value:D}:l(D)?{type:"string",value:D}:g(D)?{type:"boolean",value:D}:p(D)?{type:"duration",value:D}:h(D)?{type:"date",value:D}:F(D)?{type:"array",value:D}:y(D)?{type:"link",value:D}:O(D)?{type:"function",value:D}:S(D)?{type:"object",value:D}:void 0}v.wrapValue=t;function r(D,w){if(S(D)){let T={};for(let[C,M]of Object.entries(D))T[C]=r(M,w);return T}else if(F(D)){let T=[];for(let C of D)T.push(r(C,w));return T}else return w(D)}v.mapLeaves=r;function s(D,w){return i(D,w)==0}v.equals=s;function i(D,w,T){var V,j;if(D===w||(D===void 0&&(D=null),w===void 0&&(w=null),D===null&&w===null))return 0;if(D===null)return-1;if(w===null)return 1;let C=t(D),M=t(w);if(C===void 0&&M===void 0)return 0;if(C===void 0)return-1;if(M===void 0)return 1;if(C.type!=M.type)return C.type.localeCompare(M.type);if(C.value===M.value)return 0;switch(C.type){case"string":return C.value.localeCompare(M.value);case"number":return C.valueAe,x=le(z.path).localeCompare(le(re.path));if(x!=0)return x;let R=z.type.localeCompare(re.type);return R!=0?R:z.subpath&&!re.subpath?1:!z.subpath&&re.subpath?-1:!z.subpath&&!re.subpath?0:((V=z.subpath)!=null?V:"").localeCompare((j=re.subpath)!=null?j:"");case"date":return C.value0;case"boolean":return w.value;case"link":return!!w.value.path;case"date":return w.value.toMillis()!=0;case"duration":return w.value.as("seconds")!=0;case"object":return Object.keys(w.value).length>0;case"array":return w.value.length>0;case"null":return!1;case"function":return!0}}v.isTruthy=a;function u(D){if(D==null)return D;if(v.isArray(D))return[].concat(D.map(w=>u(w)));if(v.isObject(D)){let w={};for(let[T,C]of Object.entries(D))w[T]=u(C);return w}else return D}v.deepCopy=u;function l(D){return typeof D=="string"}v.isString=l;function d(D){return typeof D=="number"}v.isNumber=d;function h(D){return D instanceof B}v.isDate=h;function p(D){return D instanceof A}v.isDuration=p;function f(D){return D==null}v.isNull=f;function F(D){return Array.isArray(D)}v.isArray=F;function g(D){return typeof D=="boolean"}v.isBoolean=g;function y(D){return D instanceof ee}v.isLink=y;function S(D){return D!==void 0&&typeof D=="object"&&!F(D)&&!p(D)&&!h(D)&&!y(D)&&!f(D)}v.isObject=S;function O(D){return typeof D=="function"}v.isFunction=O})(tt||(tt={}));var _u;(i=>{function n(o){return tt.isObject(o)&&Object.keys(o).length==2&&"key"in o&&"rows"in o}i.isElementGroup=n;function e(o){for(let a of o)if(!n(a))return!1;return!0}i.isGrouping=e;function t(o){for(let a of o)if(n(a))return!1;return!0}i.isLeaf=t;function r(o){if(n(o))return r(o.rows);if(e(o)){let a=0;for(let u of o)a+=r(u.rows);return a}else return o.length}i.count=r;function s(o,a,u){if(u<=a)return[];if(t(o))return o.slice(a,u);let l=0,d=0;for(;l=o.length)return[];let h=[];for(;l{function n(u){return new Ar(u)}a.success=n;function e(u){return new Mr(u)}a.failure=e;function t(u,l,d){return u.successful?l.successful?d(u.value,l.value):e(l.error):e(u.error)}a.flatMap2=t;function r(u,l,d){return t(u,l,(h,p)=>n(d(h,p)))}a.map2=r;function s(u,l){let d=[];for(let h of u){let p=l(h);if(!p.successful)return p.cast();d.push(p.value)}return a.success(d)}a.mapAll=s;function i(u){try{return a.success(u())}catch(l){return a.failure(l)}}a.trying=i;async function o(u){try{return a.success(await u)}catch(l){return a.failure(l)}}a.async=o})(Ce||(Ce={}));var Qt;(v=>{v.EVERYTHING={type:"everything"},v.NOTHING={type:"nothing"},v.EMPTY_SET=new Set;function r(D){return D.size==0?v.NOTHING:{type:"atom",value:D}}v.atom=r;function s(D){return D?v.EVERYTHING:v.NOTHING}v.constant=s;function i(D){return D!==void 0?r(D):v.NOTHING}v.nullableAtom=i;function o(D){return D.size==0?v.EVERYTHING:{type:"negated",value:D}}v.negated=o;function a(D){switch(D.type){case"everything":return v.NOTHING;case"nothing":return v.EVERYTHING;case"atom":return o(D.value);case"negated":return r(D.value)}}v.negate=a;function u(D){switch(D.type){case"everything":return!1;case"negated":return!1;case"atom":return D.value.size==0;case"nothing":return!0}}v.empty=u;function l(D,w){switch(D.type){case"everything":return w;case"nothing":return v.EMPTY_SET;case"atom":return D.value;case"negated":return O(w,D.value)}}v.resolve=l;function d(D){return h(D,w=>w)}v.intersect=d;function h(D,w){return p(D,T=>Ce.success(w(T))).orElseThrow()}v.lazyIntersect=h;function p(D,w){let T=[],C=[];for(let M of D){let V=w(M);if(!V.successful)return V.cast();let j=V.value;if(j!==void 0){if(u(j))return Ce.success(v.NOTHING);j.type!=="everything"&&(j.type=="atom"?T.push(j.value):j.type=="negated"&&C.push(j.value))}}return T.length==0&&C.length==0?Ce.success(v.EVERYTHING):T.length>0&&C.length==0?Ce.success(r(y(T))):T.length==0&&C.length>0?Ce.success(o(S(C))):Ce.success(v.atom(O(y(T),S(C))))}v.lazyFailableIntersection=p;function f(D){return F(D,w=>w)}v.union=f;function F(D,w){return g(D,T=>Ce.success(w(T))).orElseThrow()}v.lazyUnion=F;function g(D,w){let T=[],C=[];for(let M of D){let V=w(M);if(!V.successful)return V.cast();let j=V.value;if(j!==void 0){if(j.type==="everything")return Ce.success(v.EVERYTHING);u(j)||(j.type=="atom"?T.push(j.value):j.type=="negated"&&C.push(j.value))}}return T.length==0&&C.length==0?Ce.success(v.NOTHING):T.length>0&&C.length==0?Ce.success(v.atom(S(T))):T.length==0&&C.length>0?Ce.success(v.negated(y(C))):Ce.success(o(O(y(C),S(T))))}v.lazyFailableUnion=g;function y(D){if(D.length==0)return new Set;if(D.length==1)return D[0];let w=[].concat(D).sort((T,C)=>T.size-C.size);for(;w.length>1;){let T=new Set,C=w.pop();for(let M of w[0])C.has(M)&&T.add(M);w[0]=T}return w[0]}v.setIntersect=y;function S(D){if(D.length==0)return new Set;if(D.length==1)return D[0];let w=new Set;for(let T of D)for(let C of T)w.add(C);return w}v.setUnion=S;function O(D,w){if(D.size>w.size){let T=new Set(D);for(let C of w)T.delete(C);return T}else{let T=new Set;for(let C of D)w.has(C)||T.add(C);return T}}v.setIntersectNegation=O})(Qt||(Qt={}));var ae;(g=>{g.ROW="$row";function e(y){return{type:"variable",name:y}}g.variable=e;function t(y){return{type:"literal",value:y}}g.literal=t;function r(y,S,O){return{type:"binaryop",left:y,op:S,right:O}}g.binaryOp=r;function s(y,S){return{type:"binaryop",left:y,right:S,op:"index"}}g.index=s;function i(y){let S=y.split("."),O=g.variable(S[0]);for(let v=1;v"||y==">="||y=="!="||y=="="}g.isCompareOp=h;function p(y,S=new Set([g.ROW])){switch(y.type){case"binaryop":return y.op==="index"&&y.left.type=="variable"&&y.left.name==g.ROW&&y.right.type=="literal"&&tt.isString(y.right.value)?S.has(y.right.value)?new Set:new Set([y.right.value]):Qt.setUnion([p(y.left,S),p(y.right,S)]);case"function":return Qt.setUnion(y.arguments.map(v=>p(v,S)));case"lambda":let O=S!=null?S:new Set;for(let v of y.arguments)O.add(v);return p(y.value,O);case"list":return Qt.setUnion(y.values.map(v=>p(v,S)));case"negated":return p(y.child,S);case"object":return Qt.setUnion(Object.values(y.values).map(v=>p(v,S)));case"variable":return S&&S.has(y.name)?new Set:new Set([y.name]);case"literal":return new Set}}g.unboundVariables=p;function f(y){switch(y.type){case"binaryop":return y.op==="index"?`${f(y.left)}[${f(y.right)}]`:`${f(y.left)} ${y.op} ${f(y.right)}`;case"function":return`${f(y.func)}(${y.arguments.map(f).join(", ")})`;case"lambda":return`(${y.arguments.join(", ")}) => ${f(y.value)}`;case"list":return`[${y.values.map(f).join(", ")}]`;case"negated":return`!${f(y.child)}`;case"object":return`{${Object.entries(y.values).map(([O,v])=>`${O}: ${f(v)}`).join(", ")}}`;case"variable":return y.name;case"literal":let S=tt.wrapValue(y.value);if(!S)return"null";switch(S.type){case"string":return`"${S.value}"`;default:return tt.toString(S.value)}}}g.toString=f,g.NULL=g.literal(null)})(ae||(ae={}));var J=b.createLanguage({number:n=>b.regexp(/-?[0-9]+(\\.[0-9]+)?/).map(e=>Number.parseFloat(e)).desc("number"),string:n=>b.string(\'"\').then(b.alt(n.escapeCharacter,b.noneOf(\'"\\\\\')).atLeast(0).map(e=>e.join(""))).skip(b.string(\'"\')).desc("string"),escapeCharacter:n=>b.string("\\\\").then(b.any).map(e=>e===\'"\'?\'"\':e==="\\\\"?"\\\\":"\\\\"+e),bool:n=>b.regexp(/true|false|True|False/).map(e=>e.toLowerCase()=="true").desc("boolean"),tag:n=>b.seqMap(b.string("#"),b.alt(b.regexp(/[^\\u2000-\\u206F\\u2E00-\\u2E7F\'!"#$%&()*+,.:;<=>?@^`{|}~\\[\\]\\\\\\s]/).desc("text")).many(),(e,t)=>e+t.join("")).desc("tag"),identifier:n=>b.seqMap(b.alt(b.regexp(/[\\p{Letter}$]/u),b.regexp(Bu).desc("text")),b.alt(b.regexp(/[0-9\\p{Letter}$_-]/u),b.regexp(Bu).desc("text")).many(),(e,t)=>e+t.join("")).desc("variable"),link:n=>b.regexp(/\\[\\[([^\\[\\]]*?)\\]\\]/u,1).map(e=>ee.parseInner(e)).desc("file link"),embedLink:n=>b.seqMap(b.string("!").atMost(1),n.link,(e,t)=>(e.length>0&&(t.embed=!0),t)).desc("file link"),binaryPlusMinus:n=>b.regexp(/\\+|-/).map(e=>e).desc("\'+\' or \'-\'"),binaryMulDiv:n=>b.regexp(/\\*|\\/|%/).map(e=>e).desc("\'*\' or \'/\' or \'%\'"),binaryCompareOp:n=>b.regexp(/>=|<=|!=|>|<|=/).map(e=>e).desc("\'>=\' or \'<=\' or \'!=\' or \'=\' or \'>\' or \'<\'"),binaryAndOp:n=>b.regexp(/and|&/i).map(e=>"&").desc("\'and\'"),binaryOrOp:n=>b.regexp(/or|\\|/i).map(e=>"|").desc("\'or\'"),rootDate:n=>b.seqMap(b.regexp(/\\d{4}/),b.string("-"),b.regexp(/\\d{2}/),(e,t,r)=>B.fromObject({year:Number.parseInt(e),month:Number.parseInt(r)})).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),dateShorthand:n=>b.alt(...Object.keys($u).sort((e,t)=>t.length-e.length).map(b.string)),date:n=>Tf(n.rootDate,e=>b.seqMap(b.string("-"),b.regexp(/\\d{2}/),(t,r)=>e.set({day:Number.parseInt(r)})),e=>b.seqMap(b.string("T"),b.regexp(/\\d{2}/),(t,r)=>e.set({hour:Number.parseInt(r)})),e=>b.seqMap(b.string(":"),b.regexp(/\\d{2}/),(t,r)=>e.set({minute:Number.parseInt(r)})),e=>b.seqMap(b.string(":"),b.regexp(/\\d{2}/),(t,r)=>e.set({second:Number.parseInt(r)})),e=>b.alt(b.seqMap(b.string("."),b.regexp(/\\d{3}/),(t,r)=>e.set({millisecond:Number.parseInt(r)})),b.succeed(e)),e=>b.alt(b.seqMap(b.string("+").or(b.string("-")),b.regexp(/\\d{1,2}(:\\d{2})?/),(t,r)=>e.setZone("UTC"+t+r,{keepLocalTime:!0})),b.seqMap(b.string("Z"),()=>e.setZone("utc",{keepLocalTime:!0})),b.seqMap(b.string("["),b.regexp(/[0-9A-Za-z+-\\/]+/u),b.string("]"),(t,r,s)=>e.setZone(r,{keepLocalTime:!0})))).assert(e=>e.isValid,"valid date").desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),datePlus:n=>b.alt(n.dateShorthand.map(e=>$u[e]()),n.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"),durationType:n=>b.alt(...Object.keys(Pu).sort((e,t)=>t.length-e.length).map(b.string)),duration:n=>b.seqMap(n.number,b.optWhitespace,n.durationType,(e,t,r)=>Pu[r].mapUnits(s=>s*e)).sepBy1(b.string(",").trim(b.optWhitespace).or(b.optWhitespace)).map(e=>e.reduce((t,r)=>t.plus(r))).desc("duration like 4hr2min"),rawNull:n=>b.string("null"),atomInlineField:n=>b.alt(n.date,n.duration.map(e=>Ni(e)),n.string,n.tag,n.embedLink,n.bool,n.number,n.rawNull),inlineFieldList:n=>n.atomInlineField.sepBy(b.string(",").trim(b.optWhitespace).lookahead(n.atomInlineField)),inlineField:n=>b.alt(b.seqMap(n.atomInlineField,b.string(",").trim(b.optWhitespace),n.inlineFieldList,(e,t,r)=>[e].concat(r)),n.atomInlineField)}),Bu=new RegExp(wn(),""),Pu={year:A.fromObject({years:1}),years:A.fromObject({years:1}),yr:A.fromObject({years:1}),yrs:A.fromObject({years:1}),month:A.fromObject({months:1}),months:A.fromObject({months:1}),mo:A.fromObject({months:1}),mos:A.fromObject({months:1}),week:A.fromObject({weeks:1}),weeks:A.fromObject({weeks:1}),wk:A.fromObject({weeks:1}),wks:A.fromObject({weeks:1}),w:A.fromObject({weeks:1}),day:A.fromObject({days:1}),days:A.fromObject({days:1}),d:A.fromObject({days:1}),hour:A.fromObject({hours:1}),hours:A.fromObject({hours:1}),hr:A.fromObject({hours:1}),hrs:A.fromObject({hours:1}),h:A.fromObject({hours:1}),minute:A.fromObject({minutes:1}),minutes:A.fromObject({minutes:1}),min:A.fromObject({minutes:1}),mins:A.fromObject({minutes:1}),m:A.fromObject({minutes:1}),second:A.fromObject({seconds:1}),seconds:A.fromObject({seconds:1}),sec:A.fromObject({seconds:1}),secs:A.fromObject({seconds:1}),s:A.fromObject({seconds:1})},$u={now:()=>B.local(),today:()=>B.local().startOf("day"),yesterday:()=>B.local().startOf("day").minus(A.fromObject({days:1})),tomorrow:()=>B.local().startOf("day").plus(A.fromObject({days:1})),sow:()=>B.local().startOf("week"),"start-of-week":()=>B.local().startOf("week"),eow:()=>B.local().endOf("week"),"end-of-week":()=>B.local().endOf("week"),soy:()=>B.local().startOf("year"),"start-of-year":()=>B.local().startOf("year"),eoy:()=>B.local().endOf("year"),"end-of-year":()=>B.local().endOf("year"),som:()=>B.local().startOf("month"),"start-of-month":()=>B.local().startOf("month"),eom:()=>B.local().endOf("month"),"end-of-month":()=>B.local().endOf("month")},Ru=b.createLanguage({variable:n=>J.identifier.map(ae.variable).desc("variable"),number:n=>J.number.map(ae.literal).desc("number"),string:n=>J.string.map(ae.literal).desc("string"),bool:n=>J.bool.map(ae.literal).desc("boolean"),date:n=>St("date",J.datePlus).map(([e,t])=>ae.literal(t)).desc("date"),duration:n=>St("dur",J.duration).map(([e,t])=>ae.literal(t)).desc("duration"),null:n=>J.rawNull.map(e=>ae.NULL),link:n=>J.link.map(ae.literal),list:n=>n.expression.sepBy(b.string(",").trim(b.optWhitespace)).wrap(b.string("[").skip(b.optWhitespace),b.optWhitespace.then(b.string("]"))).map(e=>ae.list(e)).desc("list"),object:n=>b.seqMap(J.identifier.or(J.string),b.string(":").trim(b.optWhitespace),n.expression,(e,t,r)=>({name:e,value:r})).sepBy(b.string(",").trim(b.optWhitespace)).wrap(b.string("{").skip(b.optWhitespace),b.optWhitespace.then(b.string("}"))).map(e=>{let t={};for(let r of e)t[r.name]=r.value;return ae.object(t)}).desc("object (\'{ a: 1, b: 2 }\')"),atom:n=>b.alt(J.embedLink.map(e=>ae.literal(e)),n.negated,n.link,n.list,n.object,n.lambda,n.parens,n.bool,n.number,n.string,n.date,n.duration,n.null,n.variable),index:n=>b.seqMap(n.atom,b.alt(n.dotPostfix,n.indexPostfix,n.functionPostfix).many(),(e,t)=>{let r=e;for(let s of t)switch(s.type){case"dot":r=ae.index(r,ae.literal(s.expr));break;case"index":r=ae.index(r,s.expr);break;case"function":r=ae.func(r,s.exprs);break}return r}),negated:n=>b.seqMap(b.string("!"),n.index,(e,t)=>ae.negate(t)).desc("negated field"),parens:n=>n.expression.trim(b.optWhitespace).wrap(b.string("("),b.string(")")),lambda:n=>b.seqMap(J.identifier.sepBy(b.string(",").trim(b.optWhitespace)).wrap(b.string("(").trim(b.optWhitespace),b.string(")").trim(b.optWhitespace)),b.string("=>").trim(b.optWhitespace),n.expression,(e,t,r)=>({type:"lambda",arguments:e,value:r})),dotPostfix:n=>b.seqMap(b.string("."),J.identifier,(e,t)=>({type:"dot",expr:t})),indexPostfix:n=>b.seqMap(b.string("["),b.optWhitespace,n.expression,b.optWhitespace,b.string("]"),(e,t,r,s,i)=>({type:"index",expr:r})),functionPostfix:n=>b.seqMap(b.string("("),b.optWhitespace,n.expression.sepBy(b.string(",").trim(b.optWhitespace)),b.optWhitespace,b.string(")"),(e,t,r,s,i)=>({type:"function",exprs:r})),binaryMulDiv:n=>An(n.index,J.binaryMulDiv,ae.binaryOp),binaryPlusMinus:n=>An(n.binaryMulDiv,J.binaryPlusMinus,ae.binaryOp),binaryCompare:n=>An(n.binaryPlusMinus,J.binaryCompareOp,ae.binaryOp),binaryBoolean:n=>An(n.binaryCompare,J.binaryAndOp.or(J.binaryOrOp),ae.binaryOp),binaryOp:n=>n.binaryBoolean,expression:n=>n.binaryOp}),J0=b.createLanguage({queryTag:n=>J.tag.map(e=>({type:"tagged",value:e})),queryId:n=>St("id",J.string).map(([e,t])=>({type:"id",value:t})),queryType:n=>b.string("@").then(J.identifier).map(e=>({type:"typed",value:e})),queryPath:n=>St(b.regexp(/e?path/i).desc("[e]path"),J.string).map(([e,t])=>({type:"path",value:t,exact:e.toLowerCase()==="epath"})),queryParentOf:n=>St(b.regexp(/parentof|supertree/i).desc("parentof"),n.query).map(([e,t])=>({type:"parent-of",children:t,inclusive:e.toLowerCase()==="supertree"})),queryChildOf:n=>St(b.regexp(/childof|subtree/i).desc("childof"),n.query).map(([e,t])=>({type:"child-of",parents:t,inclusive:e.toLowerCase()==="subtree"})),querySimpleLinked:n=>J.link.map(e=>({type:"linked",source:{type:"link",value:e},direction:"incoming"})),queryLinked:n=>St(b.regexp(/linksto|linkedfrom|connected/i).desc("connected"),n.query).map(([e,t])=>({type:"linked",source:t,direction:e.toLowerCase()=="linksto"?"incoming":e.toLowerCase()=="linkedfrom"?"outgoing":"both"})),queryExists:n=>St(b.regexp(/exists/i).desc("exists"),J.identifier.or(J.string)).map(([e,t])=>({type:"field",value:t})),queryQuotedExpression:n=>St(b.regexp(/expr/i).desc("expr"),Ru.expression).map(([e,t])=>({type:"expression",expression:t})),queryRawExpression:n=>Ru.binaryCompare.map(e=>({type:"expression",expression:e})),queryParens:n=>n.query.trim(b.optWhitespace).wrap(b.string("("),b.string(")")),queryNegate:n=>b.string("!").skip(b.optWhitespace).then(n.queryAtom).map(e=>({type:"not",element:e})),queryAtom:n=>b.alt(n.queryParens,n.queryNegate,n.querySimpleLinked,n.queryTag,n.queryType,n.queryId,n.queryExists,n.queryChildOf,n.queryParentOf,n.queryLinked,n.queryPath,n.queryQuotedExpression,n.queryRawExpression),queryAnds:n=>An(n.queryAtom,J.binaryAndOp,(e,t,r)=>({type:"and",elements:[e,r]})),queryOrs:n=>An(n.queryAnds,J.binaryOrOp,(e,t,r)=>({type:"or",elements:[e,r]})),query:n=>n.queryOrs.trim(b.optWhitespace)});function An(n,e,t){return b.seqMap(n,b.seq(b.optWhitespace,e,b.optWhitespace,n).many(),(r,s)=>{if(s.length==0)return r;let i=t(r,s[0][1],s[0][3]);for(let o=1;o[r,s])}function Tf(n,...e){return b.custom((t,r)=>(s,i)=>{let o=n._(s,i);if(!o.status)return o;for(let a of e){let u=a(o.value)._(s,o.index);if(!u.status)return o;o=u}return o})}var en=qr(ns());function Xt(n,e){let t={};for(let[r,s]of Object.entries(n))t[r]=e(s);return t}var Mn;(r=>{r.NOOP_NORMALIZER=s=>s;function e(s){let i=tt.wrapValue(s);if(!i)return null;switch(i==null?void 0:i.type){case"array":return i.value.map(r.json);case"object":return Xt(i.value,r.json);case"date":return{$_type:"date",value:i.value.toISO({extendedZone:!0,includeOffset:!0})};case"link":return{$_type:"link",value:i.value.toObject()};case"duration":return{$_type:"duration",value:i.value.toISO()};case"boolean":case"number":case"string":return i.value;case"function":case"null":return null}}r.json=e;function t(s,i=r.NOOP_NORMALIZER){if(s==null)return null;if(Array.isArray(s))return i(s.map(o=>r.value(o,i)));if(typeof s=="object"){if(!("$_type"in s))return Xt(s,a=>r.value(a,i));let o=s.$_type;switch(o){case"date":return i(B.fromISO(s.value));case"duration":return i(A.fromISO(s.value));case"link":return i(ee.fromObject(s.value));default:throw new Error(`Unrecognized serialized type \'${o}\'!`)}}return i(s)}r.value=t})(Mn||(Mn={}));function ju(n){return Object.assign({},n,{value:Mn.json(n.value)})}function Bs(n,e){return Array.isArray(n)?n.map(t=>Bs(t,e)):{key:n.key,raw:n.value,value:Cf(n.value),position:{line:e,start:n.start,startValue:n.startValue,end:n.end},wrapping:n.wrapping}}var _s=Object.freeze({"[":"]","(":")"});function Sf(n,e,t,r){let s=0,i=!1;for(let o=e;o=0;){let o=kf(n,i);if(!o){i=n.indexOf(s,i+1);continue}t.push(o),i=n.indexOf(s,o.end)}}e&&(t=t.concat(_f(n))),t.sort((s,i)=>s.start-i.start);let r=[];for(let s=0;sn.join("")),Of=en.regexp(/[^0-9\\w\\p{Letter}]*/u).then(xf).skip(en.regexp(/[_\\*~`]*/u));function Uu(n){let e=Vu(n,0);if(!e)return;let t=Of.parse(e.key);if(t.status)return{key:t.value,value:n.substring(e.valueIndex).trim(),start:0,startValue:e.valueIndex,end:n.length}}var vf=/\\u{2795}\\s*(\\d{4}-\\d{2}-\\d{2})/u,If=/(?:\\u{1F4C5}|\\u{1F4C6}|\\u{1F5D3}\\u{FE0F}?)\\s*(\\d{4}-\\d{2}-\\d{2})/u,Nf=/\\u{2705}\\s*(\\d{4}-\\d{2}-\\d{2})/u,Lf=/[\\u{23F3}\\u{231B}]\\s*(\\d{4}-\\d{2}-\\d{2})/u,Af=/\\u{1F6EB}\\s*(\\d{4}-\\d{2}-\\d{2})/u,Mf=[{regex:vf,key:"created"},{regex:Af,key:"start"},{regex:Lf,key:"scheduled"},{regex:If,key:"due"},{regex:Nf,key:"completion"}];function _f(n){let e=[];for(let{regex:t,key:r}of Mf){let s=t.exec(n);s&&e.push({key:r,value:s[1],start:s.index,startValue:s.index+1,end:s.index+s[0].length,wrapping:"emoji-shorthand"})}return e}var Ps;(t=>{function n(r){let s=tt.wrapValue(e);if(!s)return null;switch(s.type){case"string":case"boolean":case"null":case"number":return s.value;case"array":return s.value.map(n);case"date":return s.value.toISO();case"duration":return s.value.toHuman();case"function":return null;case"link":return s.value.markdown();case"object":return Xt(s.value,n)}}t.yaml=n;function e(r){if(r==null)return null;if(typeof r=="object")if(Array.isArray(r)){let s=[];for(let i of r)s.push(e(i));return s}else{if(r instanceof Date)return B.fromJSDate(r);{let s=r,i={};for(let o in s)i[o]=e(s[o]);return i}}else{if(typeof r=="number")return r;if(typeof r=="boolean")return r;if(typeof r=="string"){let s=J.date.parse(r);if(s.status)return s.value;let i=J.duration.parse(r);if(i.status)return i.value;let o=J.link.parse(r);return o.status?o.value:r}}return null}t.literal=e})(Ps||(Ps={}));var Bf=/```yaml:data/i,Pf=/^(?:```|~~~)(.*)$/im,$f=/^[\\s>]*(\\d+\\.|\\d+\\)|\\*|-|\\+)\\s*(\\[.{0,1}\\])?\\s*(.*)$/mu;function Ku(n,e,t,r){let{lines:s,metadata:i,frontmatter:o,sections:a}=mo(n,e,t);return new lo(n,r,s.length,i,a,o).build()}function mo(n,e,t){var F,g,y,S,O,v,D,w,T,C,M,V,j,z,re,le;let r=t.frontmatter?Hu(t.frontmatter):void 0,s=e.split(/\\r\\n|\\r|\\n/),i=new je,o=[],a=(F=t.headings)!=null?F:[];a.sort((x,R)=>x.position.start.line-R.position.start.line);let u=new $s.default(void 0,(x,R)=>x-R);for(let x=0;x0&&!Wu(s,0,x.start)){let R=new _r(0,x.start,Tn(n),1,0);u.set(0,R)}}let l=new $s.default(void 0,(x,R)=>x-R),d=1;for(let x of t.sections||[]){if(x.type==="heading")continue;let R=x.position.start.line,Q=x.position.end.line+1,ce=s[R];if(x.type==="list")l.set(R,new co(R,Q,d++,x.id));else if(x.type=="code"&&Bf.test(ce)){let Ee=s.slice(R+1,Q-1).join(`\n`).replace(/\\t/gm," "),Ve=Hu(ao(Ee));l.set(R,new fo(R,Q,d++,Ve,x.id))}else if(x.type==="code"){let Ee=ce.match(Pf);if(!Ee)l.set(R,new Rs(R,Q,d++,[],"indent",R,Q,x.id));else{let Ve=Ee.length>1&&Ee[1]?Ee[1].split(","):[];l.set(R,new Rs(R,Q,d++,Ve,"fenced",R+1,Q-1,x.id))}}else l.set(R,new ho(R,Q,d++,x.type,x.id))}for(let x of l.values())(y=ct(x.start,u))==null||y.block(x);let h=/^[\\t\\f\\v ]*[\\-+\\*]\\s(\\[.\\]\\s)?/,p=/^(>?\\s?)*(\\t|\\s)*/g,f=new $s.default(void 0,(x,R)=>x-R);for(let x of t.listItems||[]){let Q=s[x.position.start.line].match($f),ce,Ee;Q&&(ce=Q[1],Ee=Q[3]);let Ve=new po(x.position.start.line,x.position.end.line+1,x.parent,ce,x.id,x.task,Ee);f.set(Ve.start,Ve)}for(let x of f.values())if(x.parentLine<0){let R=l.get(-x.parentLine);if(!R||R.type!=="list")continue;R.items.push(x)}else(S=f.get(x.parentLine))==null||S.elements.push(x);for(let x of(O=t.tags)!=null?O:[]){let R=x.tag.startsWith("#")?x.tag:"#"+x.tag,Q=x.position.start.line;i.tag(R),(v=ct(Q,u))==null||v.metadata.tag(R),(D=ct(Q,l))==null||D.metadata.tag(R),(w=ct(Q,f))==null||w.metadata.tag(R)}if(t.frontmatter)for(let x of Rf(t.frontmatter)){let R=x.startsWith("#")?x:"#"+x;i.tag(R)}for(let x of(T=t.links)!=null?T:[]){let R=ee.infer(x.link),Q=x.position.start.line;i.link(R),(C=ct(Q,u))==null||C.metadata.link(R),(M=ct(Q,l))==null||M.metadata.link(R),(V=ct(Q,f))==null||V.metadata.link(R)}for(let x of(j=t.frontmatterLinks)!=null?j:[])i.link(ee.infer(x.link,!1,x.displayText));for(let x of Do(s)){let R=x.position.line;i.inlineField(x),(z=ct(R,u))==null||z.metadata.inlineField(x),(re=ct(R,l))==null||re.metadata.inlineField(x),(le=ct(R,f))==null||le.metadata.inlineField(x)}return o.push(...u.values()),{lines:s,frontmatter:r,metadata:i,sections:o}}function Wu(n,e,t){for(let r=e;r32768||!t.includes("::"))continue;let r=qu(t);if(r.length>0)for(let s of r)yield Bs(s,e);else{let s=Uu(t);s&&(yield Bs(s,e))}}}function Hu(n){let e={};for(let t of Object.keys(n)){let r=n[t];e[t.toLowerCase()]={key:t,value:Mn.json(Ps.literal(r)),raw:r}}return e}function ct(n,e){var r;let t=(r=e.getPairOrNextLower(n))==null?void 0:r[1];if(t&&t.end>=n)return t}function Rf(n){return Object.keys(n).filter(t=>t.toLowerCase()=="tags"||t.toLowerCase()=="tag").map(t=>Ju(n[t],/[,\\s]+/)).reduce((t,r)=>t.concat(r),[]).map(t=>t.startsWith("#")?t:"#"+t)}function Ju(n,e){return n==null||n==null?[]:Array.isArray(n)?n.filter(t=>!!t).map(t=>Ju(t,e)).reduce((t,r)=>t.concat(r),[]):(""+n).split(e).filter(t=>!!t).map(t=>t.trim()).filter(t=>t.length>0)}var je=class{constructor(){this.tags=new Set;this.links=[];this.inlineFields={}}tag(e){this.tags.add(e)}link(e){this.links.find(t=>t.equals(e))||this.links.push(e)}inlineField(e){let t=e.key.toLowerCase();Object.keys(this.inlineFields).some(r=>r.toLowerCase()==t)||(this.inlineFields[t]=e)}finishTags(){return Array.from(this.tags)}finishLinks(){return this.links.map(e=>e.toObject())}finishInlineFields(){return Xt(this.inlineFields,ju)}},lo=class{constructor(e,t,r,s,i,o){this.path=e;this.stats=t;this.length=r;this.metadata=s;this.sections=i;this.frontmatter=o}build(){return{$path:this.path,$ctime:this.stats.ctime,$mtime:this.stats.mtime,$size:this.stats.size,$extension:Pa(this.path),$position:{start:0,end:this.length},$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$infields:this.metadata.finishInlineFields(),$sections:this.sections.map(e=>e.build()),$frontmatter:this.frontmatter}}},_r=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.title=r;this.level=s;this.ordinal=i;this.blocks=[];this.metadata=new je}block(e){this.blocks.push(e)}build(){return{$title:this.title,$ordinal:this.ordinal,$level:this.level,$tags:this.metadata.finishTags(),$infields:this.metadata.finishInlineFields(),$links:this.metadata.finishLinks(),$position:{start:this.start,end:this.end},$blocks:this.blocks.map(e=>e.build())}}},co=class{constructor(e,t,r,s){this.start=e;this.end=t;this.ordinal=r;this.blockId=s;this.type="list";this.metadata=new je;this.items=[]}build(){return{$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$type:"list",$blockId:this.blockId,$elements:this.items.map(e=>e.build())}}},Rs=class{constructor(e,t,r,s,i,o,a,u){this.start=e;this.end=t;this.ordinal=r;this.languages=s;this.style=i;this.contentStart=o;this.contentEnd=a;this.blockId=u;this.type="codeblock";this.metadata=new je}build(){return{$type:"codeblock",$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId,$languages:this.languages,$style:this.style,$contentPosition:{start:this.contentStart,end:this.contentEnd}}}},fo=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.ordinal=r;this.data=s;this.blockId=i;this.type="datablock";this.metadata=new je}build(){return{$type:"datablock",$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId,$data:this.data}}},ho=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.ordinal=r;this.type=s;this.blockId=i;this.metadata=new je}build(){return{$type:this.type,$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId}}},po=class{constructor(e,t,r,s,i,o,a){this.start=e;this.end=t;this.parentLine=r;this.symbol=s;this.blockId=i;this.status=o;this.text=a;this.metadata=new je;this.elements=[]}build(){return{$parentLine:this.parentLine,$position:{start:this.start,end:this.end},$blockId:this.blockId,$elements:this.elements.map(e=>e.build()),$type:this.status?"task":"list",$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$status:this.status,$symbol:this.symbol,$text:this.text}}};function zu(n,e,t,r){var o;let s=new go(n,r),i=JSON.parse(e);for(let a of i.nodes)if(a.type!="group")if(a.type=="text"){let{frontmatter:u,metadata:l,lines:d,sections:h}=mo(n,a.text,t.caches[a.id]),p=new js(n,a.id,a,u);h.forEach(f=>p.section(f)),s.card(p);for(let f in l.tags)s.metadata.tag(f);for(let f of(o=l.links)!=null?o:[])s.metadata.link(f);for(let f of Do(d))s.metadata.inlineField(f)}else{let u=new js(n,a.id,a);s.card(u)}return s.build()}var yo=class{constructor(e,t,r){this.path=e;this.id=t;this.nodeJson=r;this.metadata=new je}build(){return{$file:this.path,$id:this.id,$position:{x:this.nodeJson.x,y:this.nodeJson.y},$dimensions:{width:this.nodeJson.width,height:this.nodeJson.height},$color:this.nodeJson.color,$link:ee.file(this.path).withBlock(this.id).toObject()}}},js=class extends yo{constructor(t,r,s,i){super(t,r,s);this.path=t;this.id=r;this.nodeJson=s;this.frontmatter=i;this.sections=[]}section(t){return this.sections.push(t),t}build(){switch(this.nodeJson.type){case"text":return Fe($({},super.build()),{$infields:this.metadata.finishInlineFields(),$frontmatter:this.frontmatter,$sections:this.sections.map(t=>t.build()),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$type:"text-card",$color:this.nodeJson.color});case"file":return Fe($({},super.build()),{$linkedFile:this.nodeJson.file});case"link":return Fe($({},super.build()),{$url:this.nodeJson.url})}}},go=class{constructor(e,t){this.path=e;this.stats=t;this.cards=[];this.metadata=new je}card(e){return this.cards.push(e),e}build(){return{$cards:this.cards.map(e=>e.build()),$ctime:this.stats.ctime,$mtime:this.stats.mtime,$infields:this.metadata.finishInlineFields(),$links:this.metadata.finishLinks(),$tags:this.metadata.finishTags(),$path:this.path,$size:this.stats.size}}};onmessage=async n=>{try{let e=n.data;if(e.type==="markdown"){let t=Ku(e.path,e.contents,e.metadata,e.stat);postMessage({type:"markdown",result:t})}else if(e.type==="canvas"){let t=zu(e.path,e.contents,e.index,e.stat);postMessage({type:"canvas",result:t})}else postMessage({$error:"Unsupported import method."})}catch(e){console.error(`Datacore Indexer failed to index ${n.data.path}: ${e}`),postMessage({$error:e.message})}};\n'); + return inlineWorker('var cl=Object.create;var Js=Object.defineProperty,fl=Object.defineProperties,dl=Object.getOwnPropertyDescriptor,hl=Object.getOwnPropertyDescriptors,ml=Object.getOwnPropertyNames,qr=Object.getOwnPropertySymbols,pl=Object.getPrototypeOf,zs=Object.prototype.hasOwnProperty,Mo=Object.prototype.propertyIsEnumerable;var Hs=(n,e)=>(e=Symbol[n])?e:Symbol.for("Symbol."+n),Dl=n=>{throw TypeError(n)};var Ao=(n,e,t)=>e in n?Js(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,R=(n,e)=>{for(var t in e||(e={}))zs.call(e,t)&&Ao(n,t,e[t]);if(qr)for(var t of qr(e))Mo.call(e,t)&&Ao(n,t,e[t]);return n},ye=(n,e)=>fl(n,hl(e));var Ys=(n,e)=>{var t={};for(var r in n)zs.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&qr)for(var r of qr(n))e.indexOf(r)<0&&Mo.call(n,r)&&(t[r]=n[r]);return t};var _o=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var yl=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ml(e))!zs.call(n,s)&&s!==t&&Js(n,s,{get:()=>e[s],enumerable:!(r=dl(e,s))||r.enumerable});return n};var Vr=(n,e,t)=>(t=n!=null?cl(pl(n)):{},yl(e||!n||!n.__esModule?Js(t,"default",{value:n,enumerable:!0}):t,n));var gl=function(n,e){this[0]=n,this[1]=e};var S=n=>{var e=n[Hs("asyncIterator")],t=!1,r,s={};return e==null?(e=n[Hs("iterator")](),r=i=>s[i]=o=>e[i](o)):(e=e.call(n),r=i=>s[i]=o=>{if(t){if(t=!1,i==="throw")throw o;return o}return t=!0,{done:!1,value:new gl(new Promise(a=>{var u=e[i](o);u instanceof Object||Dl("Object expected"),a(u)}),1)}}),s[Hs("iterator")]=()=>s,r("next"),"throw"in e?r("throw"):s.throw=i=>{throw i},"return"in e&&r("return"),s};var ns=_o((mr,Ai)=>{(function(n,e){typeof mr=="object"&&typeof Ai=="object"?Ai.exports=e():typeof define=="function"&&define.amd?define([],e):typeof mr=="object"?mr.Parsimmon=e():n.Parsimmon=e()})(typeof self!="undefined"?self:mr,function(){return function(n){var e={};function t(r){if(e[r])return e[r].exports;var s=e[r]={i:r,l:!1,exports:{}};return n[r].call(s.exports,s,s.exports,t),s.l=!0,s.exports}return t.m=n,t.c=e,t.d=function(r,s,i){t.o(r,s)||Object.defineProperty(r,s,{configurable:!1,enumerable:!0,get:i})},t.r=function(r){Object.defineProperty(r,"__esModule",{value:!0})},t.n=function(r){var s=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(s,"a",s),s},t.o=function(r,s){return Object.prototype.hasOwnProperty.call(r,s)},t.p="",t(t.s=0)}([function(n,e,t){"use strict";function r(c){if(!(this instanceof r))return new r(c);this._=c}var s=r.prototype;function i(c,p){for(var E=0;E>7),buf:function(L){var A=o(function(M,U,te,Ee){return M.concat(te===Ee.length-1?Buffer.from([U,0]).readUInt16BE(0):Ee.readUInt16BE(te))},[],L);return Buffer.from(a(function(M){return(M<<1&65535)>>8},A))}(E.buf)}}),E}function l(){return typeof Buffer!="undefined"}function f(){if(!l())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function d(c){f();var p=o(function(A,M){return A+M},0,c);if(p%8!=0)throw new Error("The bits ["+c.join(", ")+"] add up to "+p+" which is not an even number of bytes; the total should be divisible by 8");var E,k=p/8,L=(E=function(A){return A>48},o(function(A,M){return A||(E(M)?M:A)},null,c));if(L)throw new Error(L+" bit range requested exceeds 48 bit (6 byte) Number max.");return new r(function(A,M){var U=k+M;return U>A.length?v(M,k.toString()+" bytes"):w(U,o(function(te,Ee){var me=u(Ee,te.buf);return{coll:te.coll.concat(me.v),buf:me.buf}},{coll:[],buf:A.slice(M,U)},c).coll)})}function m(c,p){return new r(function(E,k){return f(),k+p>E.length?v(k,p+" bytes for "+c):w(k+p,E.slice(k,k+p))})}function h(c,p){if(typeof(E=p)!="number"||Math.floor(E)!==E||p<0||p>6)throw new Error(c+" requires integer length in range [0, 6].");var E}function b(c){return h("uintBE",c),m("uintBE("+c+")",c).map(function(p){return p.readUIntBE(0,c)})}function g(c){return h("uintLE",c),m("uintLE("+c+")",c).map(function(p){return p.readUIntLE(0,c)})}function D(c){return h("intBE",c),m("intBE("+c+")",c).map(function(p){return p.readIntBE(0,c)})}function T(c){return h("intLE",c),m("intLE("+c+")",c).map(function(p){return p.readIntLE(0,c)})}function I(c){return c instanceof r}function N(c){return{}.toString.call(c)==="[object Array]"}function y(c){return l()&&Buffer.isBuffer(c)}function w(c,p){return{status:!0,index:c,value:p,furthest:-1,expected:[]}}function v(c,p){return N(p)||(p=[p]),{status:!1,index:-1,value:null,furthest:c,expected:p}}function x(c,p){if(!p||c.furthest>p.furthest)return c;var E=c.furthest===p.furthest?function(k,L){if(function(){if(r._supportsSet!==void 0)return r._supportsSet;var ht=typeof Set!="undefined";return r._supportsSet=ht,ht}()&&Array.from){for(var A=new Set(k),M=0;M=0;){if(M in E){k=E[M].line,A===0&&(A=E[M].lineStart);break}(c.charAt(M)===`\n`||c.charAt(M)==="\\r"&&c.charAt(M+1)!==`\n`)&&(L++,A===0&&(A=M+1)),M--}var U=k+L,te=p-A;return E[p]={line:U,lineStart:A},{offset:p,line:U+1,column:te+1}}function j(c){if(!I(c))throw new Error("not a parser: "+c)}function Y(c,p){return typeof c=="string"?c.charAt(p):c[p]}function ee(c){if(typeof c!="number")throw new Error("not a number: "+c)}function ae(c){if(typeof c!="function")throw new Error("not a function: "+c)}function O(c){if(typeof c!="string")throw new Error("not a string: "+c)}var $=2,Q=3,ue=8,De=5*ue,Re=4*ue,Qt=" ";function Mt(c,p){return new Array(p+1).join(c)}function _t(c,p,E){var k=p-c.length;return k<=0?c:Mt(E,k)+c}function Ae(c,p,E,k){return{from:c-p>0?c-p:0,to:c+E>k?k:c+E}}function Bt(c,p){var E,k,L,A,M,U=p.index,te=U.offset,Ee=1;if(te===c.length)return"Got the end of the input";if(y(c)){var me=te-te%ue,dt=te-me,ve=Ae(me,De,Re+ue,c.length),ht=a(function(le){return a(function(en){return _t(en.toString(16),2,"0")},le)},function(le,en){var tn=le.length,Rt=[],nn=0;if(tn<=en)return[le.slice()];for(var rn=0;rn=4&&(E+=1),Ee=2,L=a(function(le){return le.length<=4?le.join(" "):le.slice(0,4).join(" ")+" "+le.slice(4).join(" ")},ht),(M=(8*(A.to>0?A.to-1:A.to)).toString(16).length)<2&&(M=2)}else{var Xt=c.split(/\\r\\n|[\\n\\r\\u2028\\u2029]/);E=U.column-1,k=U.line-1,A=Ae(k,$,Q,Xt.length),L=Xt.slice(A.from,A.to),M=A.to.toString().length}var ll=k-A.from;return y(c)&&(M=(8*(A.to>0?A.to-1:A.to)).toString(16).length)<2&&(M=2),o(function(le,en,tn){var Rt,nn=tn===ll,rn=nn?"> ":Qt;return Rt=y(c)?_t((8*(A.from+tn)).toString(16),M,"0"):_t((A.from+tn+1).toString(),M," "),[].concat(le,[rn+Rt+" | "+en],nn?[Qt+Mt(" ",M)+" | "+_t("",E," ")+Mt("^",Ee)]:[])},[],L).join(`\n`)}function So(c,p){return[`\n`,"-- PARSING FAILED "+Mt("-",50),`\n\n`,Bt(c,p),`\n\n`,(E=p.expected,E.length===1?`Expected:\n\n`+E[0]:`Expected one of the following: \n\n`+E.join(", ")),`\n`].join("");var E}function ko(c){return c.flags!==void 0?c.flags:[c.global?"g":"",c.ignoreCase?"i":"",c.multiline?"m":"",c.unicode?"u":"",c.sticky?"y":""].join("")}function Br(){for(var c=[].slice.call(arguments),p=c.length,E=0;E=2?ee(p):p=0;var E=function(L){return RegExp("^(?:"+L.source+")",ko(L))}(c),k=""+c;return r(function(L,A){var M=E.exec(L.slice(A));if(M){if(0<=p&&p<=M.length){var U=M[0],te=M[p];return w(A+U.length,te)}return v(A,"valid match group (0 to "+M.length+") in "+k)}return v(A,k)})}function $t(c){return r(function(p,E){return w(E,c)})}function $r(c){return r(function(p,E){return v(E,c)})}function Rr(c){if(I(c))return r(function(p,E){var k=c._(p,E);return k.index=E,k.value="",k});if(typeof c=="string")return Rr(Bn(c));if(c instanceof RegExp)return Rr(ft(c));throw new Error("not a string, regexp, or parser: "+c)}function vo(c){return j(c),r(function(p,E){var k=c._(p,E),L=p.slice(E,k.index);return k.status?v(E,\'not "\'+L+\'"\'):w(E,null)})}function jr(c){return ae(c),r(function(p,E){var k=Y(p,E);return E=c.length?v(p,"any character/byte"):w(p+1,Y(c,p))}),tl=r(function(c,p){return w(c.length,c.slice(p))}),Ws=r(function(c,p){return p=0}).desc(p)},r.optWhitespace=ol,r.Parser=r,r.range=function(c,p){return jr(function(E){return c<=E&&E<=p}).desc(c+"-"+p)},r.regex=ft,r.regexp=ft,r.sepBy=Co,r.sepBy1=Us,r.seq=Br,r.seqMap=Pt,r.seqObj=function(){for(var c,p={},E=0,k=(c=arguments,Array.prototype.slice.call(c)),L=k.length,A=0;A255)throw new Error("Value specified to byte constructor ("+c+"=0x"+c.toString(16)+") is larger in value than a single byte.");var p=(c>15?"0x":"0x0")+c.toString(16);return r(function(E,k){var L=Y(E,k);return L===c?w(k+1,L):v(k,p)})},buffer:function(c){return m("buffer",c).map(function(p){return Buffer.from(p)})},encodedString:function(c,p){return m("string",p).map(function(E){return E.toString(c)})},uintBE:b,uint8BE:b(1),uint16BE:b(2),uint32BE:b(4),uintLE:g,uint8LE:g(1),uint16LE:g(2),uint32LE:g(4),intBE:D,int8BE:D(1),int16BE:D(2),int32BE:D(4),intLE:T,int8LE:T(1),int16LE:T(2),int32LE:T(4),floatBE:m("floatBE",4).map(function(c){return c.readFloatBE(0)}),floatLE:m("floatLE",4).map(function(c){return c.readFloatLE(0)}),doubleBE:m("doubleBE",8).map(function(c){return c.readDoubleBE(0)}),doubleLE:m("doubleLE",8).map(function(c){return c.readDoubleLE(0)})},n.exports=r}])})});var Ru=_o(Ne=>{"use strict";var Sf=Ne&&Ne.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,s){r.__proto__=s}||function(r,s){for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(r[i]=s[i])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(Ne,"__esModule",{value:!0});Ne.EmptyBTree=Ne.asSet=Ne.simpleComparator=Ne.defaultComparator=void 0;function Bu(n,e){if(Number.isFinite(n)&&Number.isFinite(e))return n-e;var t=typeof n,r=typeof e;if(t!==r)return te?1:n===e?0:Number.isNaN(n)?Number.isNaN(e)?0:-1:Number.isNaN(e)?1:Array.isArray(n)?0:Number.NaN}Ne.defaultComparator=Bu;function kf(n,e){return n>e?1:n=4?Math.min(r,256):32,this._compare=t||Bu,e&&this.setPairs(e)}return Object.defineProperty(n.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"length",{get:function(){return this._size},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"isEmpty",{get:function(){return this._size===0},enumerable:!1,configurable:!0}),n.prototype.clear=function(){this._root=fo,this._size=0},n.prototype.forEach=function(e,t){var r=this;return t!==void 0&&(e=e.bind(t)),this.forEachPair(function(s,i){return e(i,s,r)})},n.prototype.forEachPair=function(e,t){var r=this.minKey(),s=this.maxKey();return this.forRange(r,s,!0,e,t)},n.prototype.get=function(e,t){return this._root.get(e,t,this)},n.prototype.set=function(e,t,r){this._root.isShared&&(this._root=this._root.clone());var s=this._root.set(e,t,r,this);return s===!0||s===!1?s:(this._root=new vf([this._root,s]),!0)},n.prototype.has=function(e){return this.forRange(e,e,!0,void 0)!==0},n.prototype.delete=function(e){return this.editRange(e,e,!0,Mu)!==0},n.prototype.with=function(e,t,r){var s=this.clone();return s.set(e,t,r)||r?s:this},n.prototype.withPairs=function(e,t){var r=this.clone();return r.setPairs(e,t)!==0||t?r:this},n.prototype.withKeys=function(e,t){for(var r=this.clone(),s=!1,i=0;i=s.length){a=3;continue e}if(++i[l]0;l--)s[l-1]=s[l][i[l]].children,i[l-1]=0;o=s[0][i[0]],u=-1,a=t!==void 0?1:0;continue;case 3:return{done:!0,value:void 0}}})},n.prototype.entriesReversed=function(e,t,r){if(e===void 0&&(e=this.maxKey(),r=void 0,e===void 0))return An();var s=this.findPath(e)||this.findPath(this.maxKey()),i=s.nodequeue,o=s.nodeindex,a=s.leaf;Le(!i[0]||a===i[0][o[0]],"wat!");var u=a.indexOf(e,0,this._compare);!r&&u=0)return{done:!1,value:[a.keys[u],a.values[u]]};l=2;continue;case 1:if(--u>=0)return t[0]=a.keys[u],t[1]=a.values[u],{done:!1,value:t};l=2;case 2:for(var f=-1;;){if(++f>=i.length){l=3;continue e}if(--o[f]>=0)break}for(;f>0;f--)i[f-1]=i[f][o[f]].children,o[f-1]=i[f-1].length-1;a=i[0][o[0]],u=a.keys.length,l=t!==void 0?1:0;continue;case 3:return{done:!0,value:void 0}}})},n.prototype.findPath=function(e){var t=this._root,r,s;if(t.isLeaf)r=_u,s=_u;else{r=[],s=[];for(var i=0;!t.isLeaf;i++){if(r[i]=t.children,s[i]=e===void 0?0:t.indexOf(e,0,this._compare),s[i]>=r[i].length)return;t=r[i][s[i]]}r.reverse(),s.reverse()}return{nodequeue:r,nodeindex:s,leaf:t}},n.prototype.diffAgainst=function(e,t,r,s){if(e._compare!==this._compare)throw new Error("Tree comparators are not the same.");if(this.isEmpty||e.isEmpty)return this.isEmpty&&e.isEmpty?void 0:this.isEmpty?r===void 0?void 0:n.stepToEnd(n.makeDiffCursor(e),r):t===void 0?void 0:n.stepToEnd(n.makeDiffCursor(this),t);for(var i=this._compare,o=n.makeDiffCursor(this),a=n.makeDiffCursor(e),u=!0,l=!0,f=n.compare(o,a,i);u&&l;){var d=n.compare(o,a,i),m=o.leaf,h=o.internalSpine,b=o.levelIndices,g=a.leaf,D=a.internalSpine,T=a.levelIndices;if(m||g){if(f!==0){if(d===0){if(m&&g&&s){var I=m.values[b[b.length-1]],N=g.values[T[T.length-1]];if(!Object.is(I,N)){var y=s(o.currentKey,I,N);if(y&&y.break)return y.break}}}else if(d>0){if(g&&r){var w=g.values[T[T.length-1]],y=r(a.currentKey,w);if(y&&y.break)return y.break}}else if(t&&m&&f!==0){var I=m.values[b[b.length-1]],y=t(o.currentKey,I);if(y&&y.break)return y.break}}}else if(!m&&!g&&d===0){var v=h.length-1,x=D.length-1,C=h[v][b[v]],V=D[x][T[x]];if(V===C){f=0,u=n.step(o,!0),l=n.step(a,!0);continue}}f=d,d<0?u=n.step(o):l=n.step(a)}if(u&&t)return n.finishCursorWalk(o,a,i,t);if(l&&r)return n.finishCursorWalk(a,o,i,r)},n.finishCursorWalk=function(e,t,r,s){var i=n.compare(e,t,r);if(i===0){if(!n.step(e))return}else i<0&&Le(!1,"cursor walk terminated early");return n.stepToEnd(e,s)},n.stepToEnd=function(e,t){for(var r=!0;r;){var s=e.leaf,i=e.levelIndices,o=e.currentKey;if(s){var a=s.values[i[i.length-1]],u=t(o,a);if(u&&u.break)return u.break}r=n.step(e)}},n.makeDiffCursor=function(e){var t=e._root,r=e.height;return{height:r,internalSpine:[[t]],levelIndices:[0],leaf:void 0,currentKey:t.maxKey()}},n.step=function(e,t){var r=e.internalSpine,s=e.levelIndices,i=e.leaf;if(t===!0||i){var o=s.length;if(t===!0||s[o-1]===0){var a=r.length;if(a===0)return!1;for(var u=a-1,l=u;l>=0;){if(s[l]>0)return ls?xf:void 0}),i},n.prototype.setPairs=function(e,t){for(var r=0,s=0;s>1;i0)o=a;else{if(u===0)return a;if(e===e)return s.length;throw new Error("BTree: NaN was used as a key")}a=i+o>>1}return a^t},n.prototype.minKey=function(){return this.keys[0]},n.prototype.minPair=function(e){if(this.keys.length!==0)return e[0]=this.keys[0],e[1]=this.values[0],e},n.prototype.maxPair=function(e){if(this.keys.length!==0){var t=this.keys.length-1;return e[0]=this.keys[t],e[1]=this.values[t],e}},n.prototype.clone=function(){var e=this.values;return new n(this.keys.slice(0),e===pe?e:e.slice(0))},n.prototype.greedyClone=function(e){return this.isShared&&!e?this:this.clone()},n.prototype.get=function(e,t,r){var s=this.indexOf(e,-1,r._compare);return s<0?t:this.values[s]},n.prototype.getPairOrNextLower=function(e,t,r,s){var i=this.indexOf(e,-1,t),o=i<0?~i-1:r?i:i-1;if(o>=0)return s[0]=this.keys[o],s[1]=this.values[o],s},n.prototype.getPairOrNextHigher=function(e,t,r,s){var i=this.indexOf(e,-1,t),o=i<0?~i:r?i:i+1,a=this.keys;if(o0,"empty leaf at depth",e,"and baseIndex",r),s},n.prototype.set=function(e,t,r,s){var i=this.indexOf(e,-1,s._compare);if(i<0){if(i=~i,s._size++,this.keys.lengththis.keys.length&&(i-=this.keys.length,a=o),a.insertInLeaf(i,e,t,s),o}else return r!==!1&&(t!==void 0&&this.reifyValues(),this.keys[i]=e,this.values[i]=t),!1},n.prototype.reifyValues=function(){return this.values===pe?this.values=this.values.slice(0,this.keys.length):this.values},n.prototype.insertInLeaf=function(e,t,r,s){if(this.keys.splice(e,0,t),this.values===pe){for(;pe.length>1,t=this.keys.splice(e),r=this.values===pe?pe:this.values.splice(e);return new n(t,r)},n.prototype.forRange=function(e,t,r,s,i,o,a){var u=i._compare,l,f;if(t===e){if(!r||(f=(l=this.indexOf(e,-1,u))+1,l<0))return o}else l=this.indexOf(e,0,u),f=this.indexOf(t,-1,u),f<0?f=~f:r===!0&&f++;var d=this.keys,m=this.values;if(a!==void 0)for(var h=l;h=a.length)return this.maxPair(i);var u=a[o].getPairOrNextLower(t,r,s,i);return u===void 0&&o>0?a[o-1].maxPair(i):u},e.prototype.getPairOrNextHigher=function(t,r,s,i){var o=this.indexOf(t,0,r),a=this.children,u=a.length;if(!(o>=u)){var l=a[o].getPairOrNextHigher(t,r,s,i);return l===void 0&&o1||t>0,"internal node has length",i,"at depth",t,"baseIndex",s);for(var a=0,u=this.children,l=this.keys,f=0,d=0;d=f,"wtf",s),Le(d===0||u[d-1].constructor===u[d].constructor,"type mismatch, baseIndex:",s),u[d].maxKey()!=l[d]&&Le(!1,"keys[",d,"] =",l[d],"is wrong, should be ",u[d].maxKey(),"at depth",t,"baseIndex",s),d===0||r._compare(l[d-1],l[d])<0||Le(!1,"sort violation at depth",t,"index",d,"keys",l[d-1],l[d]);var m=f===0;return(m||f>r.maxNodeSize*o)&&Le(!1,m?"too few":"too many","children (",f,a,") at depth",t,"maxNodeSize:",r.maxNodeSize,"children.length:",o,"baseIndex:",s),a},e.prototype.set=function(t,r,s,i){var o=this.children,a=i._maxNodeSize,u=i._compare,l=Math.min(this.indexOf(t,0,u),o.length-1),f=o[l];if(f.isShared&&(o[l]=f=f.clone()),f.keys.length>=a){var d;l>0&&(d=o[l-1]).keys.length0&&(b=h,l-=this.keys.length),b.insert(l+1,m),h},e.prototype.insert=function(t,r){this.children.splice(t,0,r),this.keys.splice(t,0,r.maxKey())},e.prototype.splitOffRightSide=function(){var t=this.children.length>>1;return new e(this.children.splice(t),this.keys.splice(t))},e.prototype.takeFromRight=function(t){this.keys.push(t.keys.shift()),this.children.push(t.children.shift())},e.prototype.takeFromLeft=function(t){this.keys.unshift(t.keys.pop()),this.children.unshift(t.children.pop())},e.prototype.forRange=function(t,r,s,i,o,a,u){var l=o._compare,f=this.keys,d=this.children,m=this.indexOf(t,0,l),h=m,b=Math.min(r===t?m:this.indexOf(r,0,l),f.length-1);if(i){if(h<=b)try{for(;h<=b;h++){d[h].isShared&&(d[h]=d[h].clone());var g=d[h].forRange(t,r,s,i,o,a,u);if(f[h]=d[h].maxKey(),typeof g!="number")return g;a=g}}finally{var D=o._maxNodeSize>>1;for(m>0&&m--,h=b;h>=m;h--)d[h].keys.length<=D&&(d[h].keys.length!==0?this.tryMerge(h,o._maxNodeSize):(f.splice(h,1),d.splice(h,1)));d.length!==0&&d[0].keys.length===0&&Le(!1,"emptiness bug")}}else for(;h<=b;h++){var g=d[h].forRange(t,r,s,i,o,a,u);if(typeof g!="number")return g;a=g}return a},e.prototype.tryMerge=function(t,r){var s=this.children;return t>=0&&t+1{let i=[e(s),s];return r&&t(r[0],i[0])===r[0]?r:i},null)[1]}function Ro(n,e){return e.reduce((t,r)=>(t[r]=n[r],t),{})}function kt(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function nt(n,e,t){return rr(n)&&n>=e&&n<=t}function bl(n,e){return n-e*Math.floor(n/e)}function re(n,e=2){let t=n<0,r;return t?r="-"+(""+-n).padStart(e,"0"):r=(""+n).padStart(e,"0"),r}function Dt(n){if(!(W(n)||n===null||n===""))return parseInt(n,10)}function Ct(n){if(!(W(n)||n===null||n===""))return parseFloat(n)}function sr(n){if(!(W(n)||n===null||n==="")){let e=parseFloat("0."+n)*1e3;return Math.floor(e)}}function an(n,e,t=!1){let r=10**e;return(t?Math.trunc:Math.round)(n*r)/r}function jt(n){return n%4===0&&(n%100!==0||n%400===0)}function qt(n){return jt(n)?366:365}function un(n,e){let t=bl(e-1,12)+1,r=n+(e-t)/12;return t===2?jt(r)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][t-1]}function ir(n){let e=Date.UTC(n.year,n.month-1,n.day,n.hour,n.minute,n.second,n.millisecond);return n.year<100&&n.year>=0&&(e=new Date(e),e.setUTCFullYear(e.getUTCFullYear()-1900)),+e}function ln(n){let e=(n+Math.floor(n/4)-Math.floor(n/100)+Math.floor(n/400))%7,t=n-1,r=(t+Math.floor(t/4)-Math.floor(t/100)+Math.floor(t/400))%7;return e===4||r===3?53:52}function or(n){return n>99?n:n>60?1900+n:2e3+n}function Jr(n,e,t,r=null){let s=new Date(n),i={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(i.timeZone=r);let o=R({timeZoneName:e},i),a=new Intl.DateTimeFormat(t,o).formatToParts(s).find(u=>u.type.toLowerCase()==="timezonename");return a?a.value:null}function Vt(n,e){let t=parseInt(n,10);Number.isNaN(t)&&(t=0);let r=parseInt(e,10)||0,s=t<0||Object.is(t,-0)?-r:r;return t*60+s}function ei(n){let e=Number(n);if(typeof n=="boolean"||n===""||Number.isNaN(e))throw new fe(`Invalid unit value ${n}`);return e}function cn(n,e){let t={};for(let r in n)if(kt(n,r)){let s=n[r];if(s==null)continue;t[e(r)]=ei(s)}return t}function vt(n,e){let t=Math.trunc(Math.abs(n/60)),r=Math.trunc(Math.abs(n%60)),s=n>=0?"+":"-";switch(e){case"short":return`${s}${re(t,2)}:${re(r,2)}`;case"narrow":return`${s}${t}${r>0?`:${r}`:""}`;case"techie":return`${s}${re(t,2)}${re(r,2)}`;default:throw new RangeError(`Value format ${e} is out of range for property format`)}}function ar(n){return Ro(n,["hour","minute","second","millisecond"])}var ti=/[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;var Fl=["January","February","March","April","May","June","July","August","September","October","November","December"],ni=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],El=["J","F","M","A","M","J","J","A","S","O","N","D"];function ri(n){switch(n){case"narrow":return[...El];case"short":return[...ni];case"long":return[...Fl];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var si=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],ii=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],wl=["M","T","W","T","F","S","S"];function oi(n){switch(n){case"narrow":return[...wl];case"short":return[...ii];case"long":return[...si];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var ai=["AM","PM"],Tl=["Before Christ","Anno Domini"],Sl=["BC","AD"],kl=["B","A"];function ui(n){switch(n){case"narrow":return[...kl];case"short":return[...Sl];case"long":return[...Tl];default:return null}}function jo(n){return ai[n.hour<12?0:1]}function qo(n,e){return oi(e)[n.weekday-1]}function Vo(n,e){return ri(e)[n.month-1]}function Uo(n,e){return ui(e)[n.year<0?0:1]}function Ko(n,e,t="always",r=!1){let s={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},i=["hours","minutes","seconds"].indexOf(n)===-1;if(t==="auto"&&i){let d=n==="days";switch(e){case 1:return d?"tomorrow":`next ${s[n][0]}`;case-1:return d?"yesterday":`last ${s[n][0]}`;case 0:return d?"today":`this ${s[n][0]}`;default:}}let o=Object.is(e,-0)||e<0,a=Math.abs(e),u=a===1,l=s[n],f=r?u?l[1]:l[2]||l[1]:u?s[n][0]:n;return o?`${a} ${f} ago`:`in ${a} ${f}`}function Wo(n,e){let t="";for(let r of n)r.literal?t+=r.val:t+=e(r.val);return t}var Cl={D:on,DD:$n,DDD:Rn,DDDD:jn,t:qn,tt:Vn,ttt:Un,tttt:Kn,T:Wn,TT:Hn,TTT:Jn,TTTT:zn,f:Yn,ff:Zn,fff:Xn,ffff:tr,F:Gn,FF:Qn,FFF:er,FFFF:nr},we=class n{static create(e,t={}){return new n(e,t)}static parseFormat(e){let t=null,r="",s=!1,i=[];for(let o=0;o0&&i.push({literal:s,val:r}),t=null,r="",s=!s):s||a===t?r+=a:(r.length>0&&i.push({literal:!1,val:r}),r=a,t=a)}return r.length>0&&i.push({literal:s,val:r}),i}static macroTokenToFormatOpts(e){return Cl[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,R(R({},this.opts),t)).format()}formatDateTime(e,t={}){return this.loc.dtFormatter(e,R(R({},this.opts),t)).format()}formatDateTimeParts(e,t={}){return this.loc.dtFormatter(e,R(R({},this.opts),t)).formatToParts()}resolvedOptions(e,t={}){return this.loc.dtFormatter(e,R(R({},this.opts),t)).resolvedOptions()}num(e,t=0){if(this.opts.forceSimple)return re(e,t);let r=R({},this.opts);return t>0&&(r.padTo=t),this.loc.numberFormatter(r).format(e)}formatDateTimeFromString(e,t){let r=this.loc.listingMode()==="en",s=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",i=(h,b)=>this.loc.extract(e,h,b),o=h=>e.isOffsetFixed&&e.offset===0&&h.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,h.format):"",a=()=>r?jo(e):i({hour:"numeric",hourCycle:"h12"},"dayperiod"),u=(h,b)=>r?Vo(e,h):i(b?{month:h}:{month:h,day:"numeric"},"month"),l=(h,b)=>r?qo(e,h):i(b?{weekday:h}:{weekday:h,month:"long",day:"numeric"},"weekday"),f=h=>{let b=n.macroTokenToFormatOpts(h);return b?this.formatWithSystemDefault(e,b):h},d=h=>r?Uo(e,h):i({era:h},"era"),m=h=>{switch(h){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12===0?12:e.hour%12);case"hh":return this.num(e.hour%12===0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return a();case"d":return s?i({day:"numeric"},"day"):this.num(e.day);case"dd":return s?i({day:"2-digit"},"day"):this.num(e.day,2);case"c":return this.num(e.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"E":return this.num(e.weekday);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return s?i({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return s?i({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return u("short",!0);case"LLLL":return u("long",!0);case"LLLLL":return u("narrow",!0);case"M":return s?i({month:"numeric"},"month"):this.num(e.month);case"MM":return s?i({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return u("short",!1);case"MMMM":return u("long",!1);case"MMMMM":return u("narrow",!1);case"y":return s?i({year:"numeric"},"year"):this.num(e.year);case"yy":return s?i({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return s?i({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return s?i({year:"numeric"},"year"):this.num(e.year,6);case"G":return d("short");case"GG":return d("long");case"GGGGG":return d("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return f(h)}};return Wo(n.parseFormat(t),m)}formatDurationFromString(e,t){let r=u=>{switch(u[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},s=u=>l=>{let f=r(l);return f?this.num(u.get(f),l.length):l},i=n.parseFormat(t),o=i.reduce((u,{literal:l,val:f})=>l?u:u.concat(f),[]),a=e.shiftTo(...o.map(r).filter(u=>u));return Wo(i,s(a))}};var de=class{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}};var ke=class{get type(){throw new je}get name(){throw new je}get ianaName(){return this.name}get isUniversal(){throw new je}offsetName(e,t){throw new je}formatOffset(e,t){throw new je}offset(e){throw new je}equals(e){throw new je}get isValid(){throw new je}};var ci=null,fn=class n extends ke{static get instance(){return ci===null&&(ci=new n),ci}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:r}){return Jr(e,t,r)}formatOffset(e,t){return vt(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return e.type==="system"}get isValid(){return!0}};var Yr={};function vl(n){return Yr[n]||(Yr[n]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:n,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),Yr[n]}var xl={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function Ol(n,e){let t=n.format(e).replace(/\\u200E/g,""),r=/(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(t),[,s,i,o,a,u,l,f]=r;return[o,s,i,a,u,l,f]}function Il(n,e){let t=n.formatToParts(e),r=[];for(let s=0;s=0?b:1e3+b,(m-h)/(60*1e3)}equals(e){return e.type==="iana"&&e.name===this.name}get isValid(){return this.valid}};var fi=null,he=class n extends ke{static get utcInstance(){return fi===null&&(fi=new n(0)),fi}static instance(e){return e===0?n.utcInstance:new n(e)}static parseSpecifier(e){if(e){let t=e.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);if(t)return new n(Vt(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${vt(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${vt(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return vt(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return e.type==="fixed"&&e.fixed===this.fixed}get isValid(){return!0}};var dn=class extends ke{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function Ve(n,e){let t;if(W(n)||n===null)return e;if(n instanceof ke)return n;if(Bo(n)){let r=n.toLowerCase();return r==="local"||r==="system"?e:r==="utc"||r==="gmt"?he.utcInstance:he.parseSpecifier(r)||ge.create(n)}else return tt(n)?he.instance(n):typeof n=="object"&&n.offset&&typeof n.offset=="number"?n:new dn(n)}var Ho=()=>Date.now(),Jo="system",zo=null,Yo=null,Go=null,Zo,X=class{static get now(){return Ho}static set now(e){Ho=e}static set defaultZone(e){Jo=e}static get defaultZone(){return Ve(Jo,fn.instance)}static get defaultLocale(){return zo}static set defaultLocale(e){zo=e}static get defaultNumberingSystem(){return Yo}static set defaultNumberingSystem(e){Yo=e}static get defaultOutputCalendar(){return Go}static set defaultOutputCalendar(e){Go=e}static get throwOnInvalid(){return Zo}static set throwOnInvalid(e){Zo=e}static resetCaches(){ne.resetCache(),ge.resetCache()}};var Qo={};function Ll(n,e={}){let t=JSON.stringify([n,e]),r=Qo[t];return r||(r=new Intl.ListFormat(n,e),Qo[t]=r),r}var di={};function hi(n,e={}){let t=JSON.stringify([n,e]),r=di[t];return r||(r=new Intl.DateTimeFormat(n,e),di[t]=r),r}var mi={};function Nl(n,e={}){let t=JSON.stringify([n,e]),r=mi[t];return r||(r=new Intl.NumberFormat(n,e),mi[t]=r),r}var pi={};function Al(n,e={}){let o=e,{base:t}=o,r=Ys(o,["base"]),s=JSON.stringify([n,r]),i=pi[s];return i||(i=new Intl.RelativeTimeFormat(n,e),pi[s]=i),i}var ur=null;function Ml(){return ur||(ur=new Intl.DateTimeFormat().resolvedOptions().locale,ur)}function _l(n){let e=n.indexOf("-u-");if(e===-1)return[n];{let t,r=n.substring(0,e);try{t=hi(n).resolvedOptions()}catch(o){t=hi(r).resolvedOptions()}let{numberingSystem:s,calendar:i}=t;return[r,s,i]}}function Bl(n,e,t){return(t||e)&&(n+="-u",t&&(n+=`-ca-${t}`),e&&(n+=`-nu-${e}`)),n}function Pl(n){let e=[];for(let t=1;t<=12;t++){let r=q.utc(2016,t,1);e.push(n(r))}return e}function $l(n){let e=[];for(let t=1;t<=7;t++){let r=q.utc(2016,11,13+t);e.push(n(r))}return e}function Gr(n,e,t,r,s){let i=n.listingMode(t);return i==="error"?null:i==="en"?r(e):s(e)}function Rl(n){return n.numberingSystem&&n.numberingSystem!=="latn"?!1:n.numberingSystem==="latn"||!n.locale||n.locale.startsWith("en")||new Intl.DateTimeFormat(n.intl).resolvedOptions().numberingSystem==="latn"}var Di=class{constructor(e,t,r){this.padTo=r.padTo||0,this.floor=r.floor||!1;let a=r,{padTo:s,floor:i}=a,o=Ys(a,["padTo","floor"]);if(!t||Object.keys(o).length>0){let u=R({useGrouping:!1},r);r.padTo>0&&(u.minimumIntegerDigits=r.padTo),this.inf=Nl(e,u)}}format(e){if(this.inf){let t=this.floor?Math.floor(e):e;return this.inf.format(t)}else{let t=this.floor?Math.floor(e):an(e,3);return re(t,this.padTo)}}},yi=class{constructor(e,t,r){this.opts=r;let s;if(e.zone.isUniversal){let o=-1*(e.offset/60),a=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;e.offset!==0&&ge.create(a).valid?(s=a,this.dt=e):(s="UTC",r.timeZoneName?this.dt=e:this.dt=e.offset===0?e:q.fromMillis(e.ts+e.offset*60*1e3))}else e.zone.type==="system"?this.dt=e:(this.dt=e,s=e.zone.name);let i=R({},this.opts);s&&(i.timeZone=s),this.dtf=hi(t,i)}format(){return this.dtf.format(this.dt.toJSDate())}formatToParts(){return this.dtf.formatToParts(this.dt.toJSDate())}resolvedOptions(){return this.dtf.resolvedOptions()}},gi=class{constructor(e,t,r){this.opts=R({style:"long"},r),!t&&Hr()&&(this.rtf=Al(e,r))}format(e,t){return this.rtf?this.rtf.format(e,t):Ko(t,e,this.opts.numeric,this.opts.style!=="long")}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}},ne=class n{static fromOpts(e){return n.create(e.locale,e.numberingSystem,e.outputCalendar,e.defaultToEN)}static create(e,t,r,s=!1){let i=e||X.defaultLocale,o=i||(s?"en-US":Ml()),a=t||X.defaultNumberingSystem,u=r||X.defaultOutputCalendar;return new n(o,a,u,i)}static resetCache(){ur=null,di={},mi={},pi={}}static fromObject({locale:e,numberingSystem:t,outputCalendar:r}={}){return n.create(e,t,r)}constructor(e,t,r,s){let[i,o,a]=_l(e);this.locale=i,this.numberingSystem=t||o||null,this.outputCalendar=r||a||null,this.intl=Bl(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=Rl(this)),this.fastNumbersCached}listingMode(){let e=this.isEnglish(),t=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return e&&t?"en":"intl"}clone(e){return!e||Object.getOwnPropertyNames(e).length===0?this:n.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,e.defaultToEN||!1)}redefaultToEN(e={}){return this.clone(ye(R({},e),{defaultToEN:!0}))}redefaultToSystem(e={}){return this.clone(ye(R({},e),{defaultToEN:!1}))}months(e,t=!1,r=!0){return Gr(this,e,r,ri,()=>{let s=t?{month:e,day:"numeric"}:{month:e},i=t?"format":"standalone";return this.monthsCache[i][e]||(this.monthsCache[i][e]=Pl(o=>this.extract(o,s,"month"))),this.monthsCache[i][e]})}weekdays(e,t=!1,r=!0){return Gr(this,e,r,oi,()=>{let s=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},i=t?"format":"standalone";return this.weekdaysCache[i][e]||(this.weekdaysCache[i][e]=$l(o=>this.extract(o,s,"weekday"))),this.weekdaysCache[i][e]})}meridiems(e=!0){return Gr(this,void 0,e,()=>ai,()=>{if(!this.meridiemCache){let t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[q.utc(2016,11,13,9),q.utc(2016,11,13,19)].map(r=>this.extract(r,t,"dayperiod"))}return this.meridiemCache})}eras(e,t=!0){return Gr(this,e,t,ui,()=>{let r={era:e};return this.eraCache[e]||(this.eraCache[e]=[q.utc(-40,1,1),q.utc(2017,1,1)].map(s=>this.extract(s,r,"era"))),this.eraCache[e]})}extract(e,t,r){let s=this.dtFormatter(e,t),i=s.formatToParts(),o=i.find(a=>a.type.toLowerCase()===r);return o?o.value:null}numberFormatter(e={}){return new Di(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new yi(e,this.intl,t)}relFormatter(e={}){return new gi(this.intl,this.isEnglish(),e)}listFormatter(e={}){return Ll(this.intl,e)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}};function mn(...n){let e=n.reduce((t,r)=>t+r.source,"");return RegExp(`^${e}$`)}function pn(...n){return e=>n.reduce(([t,r,s],i)=>{let[o,a,u]=i(e,s);return[R(R({},t),o),a||r,u]},[{},null,1]).slice(0,2)}function Dn(n,...e){if(n==null)return[null,null];for(let[t,r]of e){let s=t.exec(n);if(s)return r(s)}return[null,null]}function ea(...n){return(e,t)=>{let r={},s;for(s=0;sh!==void 0&&(b||h&&f)?-h:h;return[{years:m(Ct(t)),months:m(Ct(r)),weeks:m(Ct(s)),days:m(Ct(i)),hours:m(Ct(o)),minutes:m(Ct(a)),seconds:m(Ct(u),u==="-0"),milliseconds:m(sr(l),d)}]}var Ql={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Ei(n,e,t,r,s,i,o){let a={year:e.length===2?or(Dt(e)):Dt(e),month:ni.indexOf(t)+1,day:Dt(r),hour:Dt(s),minute:Dt(i)};return o&&(a.second=Dt(o)),n&&(a.weekday=n.length>3?si.indexOf(n)+1:ii.indexOf(n)+1),a}var Xl=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;function ec(n){let[,e,t,r,s,i,o,a,u,l,f,d]=n,m=Ei(e,s,r,t,i,o,a),h;return u?h=Ql[u]:l?h=0:h=Vt(f,d),[m,new he(h)]}function tc(n){return n.replace(/\\([^()]*\\)|[\\n\\t]/g," ").replace(/(\\s\\s+)/g," ").trim()}var nc=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,rc=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,sc=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;function Xo(n){let[,e,t,r,s,i,o,a]=n;return[Ei(e,s,r,t,i,o,a),he.utcInstance]}function ic(n){let[,e,t,r,s,i,o,a]=n;return[Ei(e,a,t,r,s,i,o),he.utcInstance]}var oc=mn(ql,Fi),ac=mn(Vl,Fi),uc=mn(Ul,Fi),lc=mn(na),sa=pn(zl,yn,lr,cr),cc=pn(Kl,yn,lr,cr),fc=pn(Wl,yn,lr,cr),dc=pn(yn,lr,cr);function ia(n){return Dn(n,[oc,sa],[ac,cc],[uc,fc],[lc,dc])}function oa(n){return Dn(tc(n),[Xl,ec])}function aa(n){return Dn(n,[nc,Xo],[rc,Xo],[sc,ic])}function ua(n){return Dn(n,[Gl,Zl])}var hc=pn(yn);function la(n){return Dn(n,[Yl,hc])}var mc=mn(Hl,Jl),pc=mn(ra),Dc=pn(yn,lr,cr);function ca(n){return Dn(n,[mc,sa],[pc,Dc])}var yc="Invalid Duration",fa={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},gc=R({years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3}},fa),Me=146097/400,gn=146097/4800,bc=R({years:{quarters:4,months:12,weeks:Me/7,days:Me,hours:Me*24,minutes:Me*24*60,seconds:Me*24*60*60,milliseconds:Me*24*60*60*1e3},quarters:{months:3,weeks:Me/28,days:Me/4,hours:Me*24/4,minutes:Me*24*60/4,seconds:Me*24*60*60/4,milliseconds:Me*24*60*60*1e3/4},months:{weeks:gn/7,days:gn,hours:gn*24,minutes:gn*24*60,seconds:gn*24*60*60,milliseconds:gn*24*60*60*1e3}},fa),Kt=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],Fc=Kt.slice(0).reverse();function Ut(n,e,t=!1){let r={values:t?e.values:R(R({},n.values),e.values||{}),loc:n.loc.clone(e.loc),conversionAccuracy:e.conversionAccuracy||n.conversionAccuracy};return new B(r)}function Ec(n){return n<0?Math.floor(n):Math.ceil(n)}function da(n,e,t,r,s){let i=n[s][t],o=e[t]/i,a=Math.sign(o)===Math.sign(r[s]),u=!a&&r[s]!==0&&Math.abs(o)<=1?Ec(o):Math.trunc(o);r[s]+=u,e[t]-=u*i}function wc(n,e){Fc.reduce((t,r)=>W(e[r])?t:(t&&da(n,e,t,e,r),r),null)}var B=class n{constructor(e){let t=e.conversionAccuracy==="longterm"||!1;this.values=e.values,this.loc=e.loc||ne.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=t?bc:gc,this.isLuxonDuration=!0}static fromMillis(e,t){return n.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(e==null||typeof e!="object")throw new fe(`Duration.fromObject: argument expected to be an object, got ${e===null?"null":typeof e}`);return new n({values:cn(e,n.normalizeUnit),loc:ne.fromObject(t),conversionAccuracy:t.conversionAccuracy})}static fromDurationLike(e){if(tt(e))return n.fromMillis(e);if(n.isDuration(e))return e;if(typeof e=="object")return n.fromObject(e);throw new fe(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){let[r]=ua(e);return r?n.fromObject(r,t):n.invalid("unparsable",`the input "${e}" can\'t be parsed as ISO 8601`)}static fromISOTime(e,t){let[r]=la(e);return r?n.fromObject(r,t):n.invalid("unparsable",`the input "${e}" can\'t be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new fe("need to specify a reason the Duration is invalid");let r=e instanceof de?e:new de(e,t);if(X.throwOnInvalid)throw new Wr(r);return new n({invalid:r})}static normalizeUnit(e){let t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e&&e.toLowerCase()];if(!t)throw new sn(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){let r=ye(R({},t),{floor:t.round!==!1&&t.floor!==!1});return this.isValid?we.create(this.loc,r).formatDurationFromString(this,e):yc}toHuman(e={}){let t=Kt.map(r=>{let s=this.values[r];return W(s)?null:this.loc.numberFormatter(ye(R({style:"unit",unitDisplay:"long"},e),{unit:r.slice(0,-1)})).format(s)}).filter(r=>r);return this.loc.listFormatter(R({type:"conjunction",style:e.listStyle||"narrow"},e)).format(t)}toObject(){return this.isValid?R({},this.values):{}}toISO(){if(!this.isValid)return null;let e="P";return this.years!==0&&(e+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(e+=this.months+this.quarters*3+"M"),this.weeks!==0&&(e+=this.weeks+"W"),this.days!==0&&(e+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(e+="T"),this.hours!==0&&(e+=this.hours+"H"),this.minutes!==0&&(e+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(e+=an(this.seconds+this.milliseconds/1e3,3)+"S"),e==="P"&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;let t=this.toMillis();if(t<0||t>=864e5)return null;e=R({suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended"},e);let r=this.shiftTo("hours","minutes","seconds","milliseconds"),s=e.format==="basic"?"hhmm":"hh:mm";(!e.suppressSeconds||r.seconds!==0||r.milliseconds!==0)&&(s+=e.format==="basic"?"ss":":ss",(!e.suppressMilliseconds||r.milliseconds!==0)&&(s+=".SSS"));let i=r.toFormat(s);return e.includePrefix&&(i="T"+i),i}toJSON(){return this.toISO()}toString(){return this.toISO()}toMillis(){return this.as("milliseconds")}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;let t=n.fromDurationLike(e),r={};for(let s of Kt)(kt(t.values,s)||kt(this.values,s))&&(r[s]=t.get(s)+this.get(s));return Ut(this,{values:r},!0)}minus(e){if(!this.isValid)return this;let t=n.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;let t={};for(let r of Object.keys(this.values))t[r]=ei(e(this.values[r],r));return Ut(this,{values:t},!0)}get(e){return this[n.normalizeUnit(e)]}set(e){if(!this.isValid)return this;let t=R(R({},this.values),cn(e,n.normalizeUnit));return Ut(this,{values:t})}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:r}={}){let s=this.loc.clone({locale:e,numberingSystem:t}),i={loc:s};return r&&(i.conversionAccuracy=r),Ut(this,i)}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;let e=this.toObject();return wc(this.matrix,e),Ut(this,{values:e},!0)}shiftTo(...e){if(!this.isValid)return this;if(e.length===0)return this;e=e.map(o=>n.normalizeUnit(o));let t={},r={},s=this.toObject(),i;for(let o of Kt)if(e.indexOf(o)>=0){i=o;let a=0;for(let l in r)a+=this.matrix[l][o]*r[l],r[l]=0;tt(s[o])&&(a+=s[o]);let u=Math.trunc(a);t[o]=u,r[o]=(a*1e3-u*1e3)/1e3;for(let l in s)Kt.indexOf(l)>Kt.indexOf(o)&&da(this.matrix,s,l,t,o)}else tt(s[o])&&(r[o]=s[o]);for(let o in r)r[o]!==0&&(t[i]+=o===i?r[o]:r[o]/this.matrix[i][o]);return Ut(this,{values:t},!0).normalize()}negate(){if(!this.isValid)return this;let e={};for(let t of Object.keys(this.values))e[t]=this.values[t]===0?0:-this.values[t];return Ut(this,{values:e},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid||!this.loc.equals(e.loc))return!1;function t(r,s){return r===void 0||r===0?s===void 0||s===0:r===s}for(let r of Kt)if(!t(this.values[r],e.values[r]))return!1;return!0}};var fr="Invalid Interval";function Tc(n,e){return!n||!n.isValid?yt.invalid("missing or invalid start"):!e||!e.isValid?yt.invalid("missing or invalid end"):ee:!1}isBefore(e){return this.isValid?this.e<=e:!1}contains(e){return this.isValid?this.s<=e&&this.e>e:!1}set({start:e,end:t}={}){return this.isValid?n.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];let t=e.map(bn).filter(o=>this.contains(o)).sort(),r=[],{s}=this,i=0;for(;s+this.e?this.e:o;r.push(n.fromDateTimes(s,a)),s=a,i+=1}return r}splitBy(e){let t=B.fromDurationLike(e);if(!this.isValid||!t.isValid||t.as("milliseconds")===0)return[];let{s:r}=this,s=1,i,o=[];for(;ru*s));i=+a>+this.e?this.e:a,o.push(n.fromDateTimes(r,i)),r=i,s+=1}return o}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e:!1}equals(e){return!this.isValid||!e.isValid?!1:this.s.equals(e.s)&&this.e.equals(e.e)}intersection(e){if(!this.isValid)return this;let t=this.s>e.s?this.s:e.s,r=this.e=r?null:n.fromDateTimes(t,r)}union(e){if(!this.isValid)return this;let t=this.se.e?this.e:e.e;return n.fromDateTimes(t,r)}static merge(e){let[t,r]=e.sort((s,i)=>s.s-i.s).reduce(([s,i],o)=>i?i.overlaps(o)||i.abutsStart(o)?[s,i.union(o)]:[s.concat([i]),o]:[s,o],[[],null]);return r&&t.push(r),t}static xor(e){let t=null,r=0,s=[],i=e.map(u=>[{time:u.s,type:"s"},{time:u.e,type:"e"}]),o=Array.prototype.concat(...i),a=o.sort((u,l)=>u.time-l.time);for(let u of a)r+=u.type==="s"?1:-1,r===1?t=u.time:(t&&+t!=+u.time&&s.push(n.fromDateTimes(t,u.time)),t=null);return n.merge(s)}difference(...e){return n.xor([this].concat(e)).map(t=>this.intersection(t)).filter(t=>t&&!t.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \\u2013 ${this.e.toISO()})`:fr}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:fr}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:fr}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:fr}toFormat(e,{separator:t=" \\u2013 "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:fr}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):B.invalid(this.invalidReason)}mapEndpoints(e){return n.fromDateTimes(e(this.s),e(this.e))}};var gt=class{static hasDST(e=X.defaultZone){let t=q.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return ge.isValidZone(e)}static normalizeZone(e){return Ve(e,X.defaultZone)}static months(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null,outputCalendar:i="gregory"}={}){return(s||ne.create(t,r,i)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null,outputCalendar:i="gregory"}={}){return(s||ne.create(t,r,i)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null}={}){return(s||ne.create(t,r,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:r=null,locObj:s=null}={}){return(s||ne.create(t,r,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return ne.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return ne.create(t,null,"gregory").eras(e)}static features(){return{relative:Hr()}}};function ha(n,e){let t=s=>s.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),r=t(e)-t(n);return Math.floor(B.fromMillis(r).as("days"))}function Sc(n,e,t){let r=[["years",(a,u)=>u.year-a.year],["quarters",(a,u)=>u.quarter-a.quarter],["months",(a,u)=>u.month-a.month+(u.year-a.year)*12],["weeks",(a,u)=>{let l=ha(a,u);return(l-l%7)/7}],["days",ha]],s={},i,o;for(let[a,u]of r)if(t.indexOf(a)>=0){i=a;let l=u(n,e);o=n.plus({[a]:l}),o>e?(n=n.plus({[a]:l-1}),l-=1):n=o,s[a]=l}return[n,s,o,i]}function ma(n,e,t,r){let[s,i,o,a]=Sc(n,e,t),u=e-s,l=t.filter(d=>["hours","minutes","seconds","milliseconds"].indexOf(d)>=0);l.length===0&&(o0?B.fromMillis(u,r).shiftTo(...l).plus(f):f}var wi={arab:"[\\u0660-\\u0669]",arabext:"[\\u06F0-\\u06F9]",bali:"[\\u1B50-\\u1B59]",beng:"[\\u09E6-\\u09EF]",deva:"[\\u0966-\\u096F]",fullwide:"[\\uFF10-\\uFF19]",gujr:"[\\u0AE6-\\u0AEF]",hanidec:"[\\u3007|\\u4E00|\\u4E8C|\\u4E09|\\u56DB|\\u4E94|\\u516D|\\u4E03|\\u516B|\\u4E5D]",khmr:"[\\u17E0-\\u17E9]",knda:"[\\u0CE6-\\u0CEF]",laoo:"[\\u0ED0-\\u0ED9]",limb:"[\\u1946-\\u194F]",mlym:"[\\u0D66-\\u0D6F]",mong:"[\\u1810-\\u1819]",mymr:"[\\u1040-\\u1049]",orya:"[\\u0B66-\\u0B6F]",tamldec:"[\\u0BE6-\\u0BEF]",telu:"[\\u0C66-\\u0C6F]",thai:"[\\u0E50-\\u0E59]",tibt:"[\\u0F20-\\u0F29]",latn:"\\\\d"},pa={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},kc=wi.hanidec.replace(/[\\[|\\]]/g,"").split("");function Da(n){let e=parseInt(n,10);if(isNaN(e)){e="";for(let t=0;t=i&&r<=o&&(e+=r-i)}}return parseInt(e,10)}else return e}function _e({numberingSystem:n},e=""){return new RegExp(`${wi[n||"latn"]}${e}`)}var Cc="missing Intl.DateTimeFormat.formatToParts support";function G(n,e=t=>t){return{regex:n,deser:([t])=>e(Da(t))}}var vc="\\xA0",ba=`[ ${vc}]`,Fa=new RegExp(ba,"g");function xc(n){return n.replace(/\\./g,"\\\\.?").replace(Fa,ba)}function ya(n){return n.replace(/\\./g,"").replace(Fa," ").toLowerCase()}function Ue(n,e){return n===null?null:{regex:RegExp(n.map(xc).join("|")),deser:([t])=>n.findIndex(r=>ya(t)===ya(r))+e}}function ga(n,e){return{regex:n,deser:([,t,r])=>Vt(t,r),groups:e}}function Ti(n){return{regex:n,deser:([e])=>e}}function Oc(n){return n.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,"\\\\$&")}function Ic(n,e){let t=_e(e),r=_e(e,"{2}"),s=_e(e,"{3}"),i=_e(e,"{4}"),o=_e(e,"{6}"),a=_e(e,"{1,2}"),u=_e(e,"{1,3}"),l=_e(e,"{1,6}"),f=_e(e,"{1,9}"),d=_e(e,"{2,4}"),m=_e(e,"{4,6}"),h=D=>({regex:RegExp(Oc(D.val)),deser:([T])=>T,literal:!0}),g=(D=>{if(n.literal)return h(D);switch(D.val){case"G":return Ue(e.eras("short",!1),0);case"GG":return Ue(e.eras("long",!1),0);case"y":return G(l);case"yy":return G(d,or);case"yyyy":return G(i);case"yyyyy":return G(m);case"yyyyyy":return G(o);case"M":return G(a);case"MM":return G(r);case"MMM":return Ue(e.months("short",!0,!1),1);case"MMMM":return Ue(e.months("long",!0,!1),1);case"L":return G(a);case"LL":return G(r);case"LLL":return Ue(e.months("short",!1,!1),1);case"LLLL":return Ue(e.months("long",!1,!1),1);case"d":return G(a);case"dd":return G(r);case"o":return G(u);case"ooo":return G(s);case"HH":return G(r);case"H":return G(a);case"hh":return G(r);case"h":return G(a);case"mm":return G(r);case"m":return G(a);case"q":return G(a);case"qq":return G(r);case"s":return G(a);case"ss":return G(r);case"S":return G(u);case"SSS":return G(s);case"u":return Ti(f);case"uu":return Ti(a);case"uuu":return G(t);case"a":return Ue(e.meridiems(),0);case"kkkk":return G(i);case"kk":return G(d,or);case"W":return G(a);case"WW":return G(r);case"E":case"c":return G(t);case"EEE":return Ue(e.weekdays("short",!1,!1),1);case"EEEE":return Ue(e.weekdays("long",!1,!1),1);case"ccc":return Ue(e.weekdays("short",!0,!1),1);case"cccc":return Ue(e.weekdays("long",!0,!1),1);case"Z":case"ZZ":return ga(new RegExp(`([+-]${a.source})(?::(${r.source}))?`),2);case"ZZZ":return ga(new RegExp(`([+-]${a.source})(${r.source})?`),2);case"z":return Ti(/[a-z_+-/]{1,256}?/i);default:return h(D)}})(n)||{invalidReason:Cc};return g.token=n,g}var Lc={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour:{numeric:"h","2-digit":"hh"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"}};function Nc(n,e,t){let{type:r,value:s}=n;if(r==="literal")return{literal:!0,val:s};let i=t[r],o=Lc[r];if(typeof o=="object"&&(o=o[i]),o)return{literal:!1,val:o}}function Ac(n){return[`^${n.map(t=>t.regex).reduce((t,r)=>`${t}(${r.source})`,"")}$`,n]}function Mc(n,e,t){let r=n.match(e);if(r){let s={},i=1;for(let o in t)if(kt(t,o)){let a=t[o],u=a.groups?a.groups+1:1;!a.literal&&a.token&&(s[a.token.val[0]]=a.deser(r.slice(i,i+u))),i+=u}return[r,s]}else return[r,{}]}function _c(n){let e=i=>{switch(i){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},t=null,r;return W(n.z)||(t=ge.create(n.z)),W(n.Z)||(t||(t=new he(n.Z)),r=n.Z),W(n.q)||(n.M=(n.q-1)*3+1),W(n.h)||(n.h<12&&n.a===1?n.h+=12:n.h===12&&n.a===0&&(n.h=0)),n.G===0&&n.y&&(n.y=-n.y),W(n.u)||(n.S=sr(n.u)),[Object.keys(n).reduce((i,o)=>{let a=e(o);return a&&(i[a]=n[o]),i},{}),t,r]}var Si=null;function Bc(){return Si||(Si=q.fromMillis(1555555555555)),Si}function Pc(n,e){if(n.literal)return n;let t=we.macroTokenToFormatOpts(n.val);if(!t)return n;let i=we.create(e,t).formatDateTimeParts(Bc()).map(o=>Nc(o,e,t));return i.includes(void 0)?n:i}function $c(n,e){return Array.prototype.concat(...n.map(t=>Pc(t,e)))}function ki(n,e,t){let r=$c(we.parseFormat(t),n),s=r.map(o=>Ic(o,n)),i=s.find(o=>o.invalidReason);if(i)return{input:e,tokens:r,invalidReason:i.invalidReason};{let[o,a]=Ac(s),u=RegExp(o,"i"),[l,f]=Mc(e,u,a),[d,m,h]=f?_c(f):[null,null,void 0];if(kt(f,"a")&&kt(f,"H"))throw new pt("Can\'t include meridiem when specifying 24-hour format");return{input:e,tokens:r,regex:u,rawMatches:l,matches:f,result:d,zone:m,specificOffset:h}}}function Ea(n,e,t){let{result:r,zone:s,specificOffset:i,invalidReason:o}=ki(n,e,t);return[r,s,i,o]}var wa=[0,31,59,90,120,151,181,212,243,273,304,334],Ta=[0,31,60,91,121,152,182,213,244,274,305,335];function Be(n,e){return new de("unit out of range",`you specified ${e} (of type ${typeof e}) as a ${n}, which is invalid`)}function Sa(n,e,t){let r=new Date(Date.UTC(n,e-1,t));n<100&&n>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);let s=r.getUTCDay();return s===0?7:s}function ka(n,e,t){return t+(jt(n)?Ta:wa)[e-1]}function Ca(n,e){let t=jt(n)?Ta:wa,r=t.findIndex(i=>iln(e)?(a=e+1,o=1):a=e,R({weekYear:a,weekNumber:o,weekday:i},ar(n))}function Ci(n){let{weekYear:e,weekNumber:t,weekday:r}=n,s=Sa(e,1,4),i=qt(e),o=t*7+r-s-3,a;o<1?(a=e-1,o+=qt(a)):o>i?(a=e+1,o-=qt(e)):a=e;let{month:u,day:l}=Ca(a,o);return R({year:a,month:u,day:l},ar(n))}function Qr(n){let{year:e,month:t,day:r}=n,s=ka(e,t,r);return R({year:e,ordinal:s},ar(n))}function vi(n){let{year:e,ordinal:t}=n,{month:r,day:s}=Ca(e,t);return R({year:e,month:r,day:s},ar(n))}function va(n){let e=rr(n.weekYear),t=nt(n.weekNumber,1,ln(n.weekYear)),r=nt(n.weekday,1,7);return e?t?r?!1:Be("weekday",n.weekday):Be("week",n.week):Be("weekYear",n.weekYear)}function xa(n){let e=rr(n.year),t=nt(n.ordinal,1,qt(n.year));return e?t?!1:Be("ordinal",n.ordinal):Be("year",n.year)}function xi(n){let e=rr(n.year),t=nt(n.month,1,12),r=nt(n.day,1,un(n.year,n.month));return e?t?r?!1:Be("day",n.day):Be("month",n.month):Be("year",n.year)}function Oi(n){let{hour:e,minute:t,second:r,millisecond:s}=n,i=nt(e,0,23)||e===24&&t===0&&r===0&&s===0,o=nt(t,0,59),a=nt(r,0,59),u=nt(s,0,999);return i?o?a?u?!1:Be("millisecond",s):Be("second",r):Be("minute",t):Be("hour",e)}var Ii="Invalid DateTime",Oa=864e13;function Xr(n){return new de("unsupported zone",`the zone "${n.name}" is not supported`)}function Li(n){return n.weekData===null&&(n.weekData=Zr(n.c)),n.weekData}function dr(n,e){let t={ts:n.ts,zone:n.zone,c:n.c,o:n.o,loc:n.loc,invalid:n.invalid};return new q(ye(R(R({},t),e),{old:t}))}function Pa(n,e,t){let r=n-e*60*1e3,s=t.offset(r);if(e===s)return[r,e];r-=(s-e)*60*1e3;let i=t.offset(r);return s===i?[r,s]:[n-Math.min(s,i)*60*1e3,Math.max(s,i)]}function Ia(n,e){n+=e*60*1e3;let t=new Date(n);return{year:t.getUTCFullYear(),month:t.getUTCMonth()+1,day:t.getUTCDate(),hour:t.getUTCHours(),minute:t.getUTCMinutes(),second:t.getUTCSeconds(),millisecond:t.getUTCMilliseconds()}}function ts(n,e,t){return Pa(ir(n),e,t)}function La(n,e){let t=n.o,r=n.c.year+Math.trunc(e.years),s=n.c.month+Math.trunc(e.months)+Math.trunc(e.quarters)*3,i=ye(R({},n.c),{year:r,month:s,day:Math.min(n.c.day,un(r,s))+Math.trunc(e.days)+Math.trunc(e.weeks)*7}),o=B.fromObject({years:e.years-Math.trunc(e.years),quarters:e.quarters-Math.trunc(e.quarters),months:e.months-Math.trunc(e.months),weeks:e.weeks-Math.trunc(e.weeks),days:e.days-Math.trunc(e.days),hours:e.hours,minutes:e.minutes,seconds:e.seconds,milliseconds:e.milliseconds}).as("milliseconds"),a=ir(i),[u,l]=Pa(a,t,n.zone);return o!==0&&(u+=o,l=n.zone.offset(u)),{ts:u,o:l}}function hr(n,e,t,r,s,i){let{setZone:o,zone:a}=t;if(n&&Object.keys(n).length!==0){let u=e||a,l=q.fromObject(n,ye(R({},t),{zone:u,specificOffset:i}));return o?l:l.setZone(a)}else return q.invalid(new de("unparsable",`the input "${s}" can\'t be parsed as ${r}`))}function es(n,e,t=!0){return n.isValid?we.create(ne.create("en-US"),{allowZ:t,forceSimple:!0}).formatDateTimeFromString(n,e):null}function Ni(n,e){let t=n.c.year>9999||n.c.year<0,r="";return t&&n.c.year>=0&&(r+="+"),r+=re(n.c.year,t?6:4),e?(r+="-",r+=re(n.c.month),r+="-",r+=re(n.c.day)):(r+=re(n.c.month),r+=re(n.c.day)),r}function Na(n,e,t,r,s,i){let o=re(n.c.hour);return e?(o+=":",o+=re(n.c.minute),(n.c.second!==0||!t)&&(o+=":")):o+=re(n.c.minute),(n.c.second!==0||!t)&&(o+=re(n.c.second),(n.c.millisecond!==0||!r)&&(o+=".",o+=re(n.c.millisecond,3))),s&&(n.isOffsetFixed&&n.offset===0&&!i?o+="Z":n.o<0?(o+="-",o+=re(Math.trunc(-n.o/60)),o+=":",o+=re(Math.trunc(-n.o%60))):(o+="+",o+=re(Math.trunc(n.o/60)),o+=":",o+=re(Math.trunc(n.o%60)))),i&&(o+="["+n.zone.ianaName+"]"),o}var $a={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},Rc={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},jc={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Ra=["year","month","day","hour","minute","second","millisecond"],qc=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],Vc=["year","ordinal","hour","minute","second","millisecond"];function Aa(n){let e={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[n.toLowerCase()];if(!e)throw new sn(n);return e}function Ma(n,e){let t=Ve(e.zone,X.defaultZone),r=ne.fromObject(e),s=X.now(),i,o;if(W(n.year))i=s;else{for(let l of Ra)W(n[l])&&(n[l]=$a[l]);let a=xi(n)||Oi(n);if(a)return q.invalid(a);let u=t.offset(s);[i,o]=ts(n,u,t)}return new q({ts:i,zone:t,loc:r,o})}function _a(n,e,t){let r=W(t.round)?!0:t.round,s=(o,a)=>(o=an(o,r||t.calendary?0:2,!0),e.loc.clone(t).relFormatter(t).format(o,a)),i=o=>t.calendary?e.hasSame(n,o)?0:e.startOf(o).diff(n.startOf(o),o).get(o):e.diff(n,o).get(o);if(t.unit)return s(i(t.unit),t.unit);for(let o of t.units){let a=i(o);if(Math.abs(a)>=1)return s(a,o)}return s(n>e?-0:0,t.units[t.units.length-1])}function Ba(n){let e={},t;return n.length>0&&typeof n[n.length-1]=="object"?(e=n[n.length-1],t=Array.from(n).slice(0,n.length-1)):t=Array.from(n),[e,t]}var q=class n{constructor(e){let t=e.zone||X.defaultZone,r=e.invalid||(Number.isNaN(e.ts)?new de("invalid input"):null)||(t.isValid?null:Xr(t));this.ts=W(e.ts)?X.now():e.ts;let s=null,i=null;if(!r)if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[s,i]=[e.old.c,e.old.o];else{let a=t.offset(this.ts);s=Ia(this.ts,a),r=Number.isNaN(s.year)?new de("invalid input"):null,s=r?null:s,i=r?null:a}this._zone=t,this.loc=e.loc||ne.create(),this.invalid=r,this.weekData=null,this.c=s,this.o=i,this.isLuxonDateTime=!0}static now(){return new n({})}static local(){let[e,t]=Ba(arguments),[r,s,i,o,a,u,l]=t;return Ma({year:r,month:s,day:i,hour:o,minute:a,second:u,millisecond:l},e)}static utc(){let[e,t]=Ba(arguments),[r,s,i,o,a,u,l]=t;return e.zone=he.utcInstance,Ma({year:r,month:s,day:i,hour:o,minute:a,second:u,millisecond:l},e)}static fromJSDate(e,t={}){let r=Po(e)?e.valueOf():NaN;if(Number.isNaN(r))return n.invalid("invalid input");let s=Ve(t.zone,X.defaultZone);return s.isValid?new n({ts:r,zone:s,loc:ne.fromObject(t)}):n.invalid(Xr(s))}static fromMillis(e,t={}){if(tt(e))return e<-Oa||e>Oa?n.invalid("Timestamp out of range"):new n({ts:e,zone:Ve(t.zone,X.defaultZone),loc:ne.fromObject(t)});throw new fe(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(tt(e))return new n({ts:e*1e3,zone:Ve(t.zone,X.defaultZone),loc:ne.fromObject(t)});throw new fe("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};let r=Ve(t.zone,X.defaultZone);if(!r.isValid)return n.invalid(Xr(r));let s=X.now(),i=W(t.specificOffset)?r.offset(s):t.specificOffset,o=cn(e,Aa),a=!W(o.ordinal),u=!W(o.year),l=!W(o.month)||!W(o.day),f=u||l,d=o.weekYear||o.weekNumber,m=ne.fromObject(t);if((f||a)&&d)throw new pt("Can\'t mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&a)throw new pt("Can\'t mix ordinal dates with month/day");let h=d||o.weekday&&!f,b,g,D=Ia(s,i);h?(b=qc,g=Rc,D=Zr(D)):a?(b=Vc,g=jc,D=Qr(D)):(b=Ra,g=$a);let T=!1;for(let C of b){let V=o[C];W(V)?T?o[C]=g[C]:o[C]=D[C]:T=!0}let I=h?va(o):a?xa(o):xi(o),N=I||Oi(o);if(N)return n.invalid(N);let y=h?Ci(o):a?vi(o):o,[w,v]=ts(y,i,r),x=new n({ts:w,zone:r,o:v,loc:m});return o.weekday&&f&&e.weekday!==x.weekday?n.invalid("mismatched weekday",`you can\'t specify both a weekday of ${o.weekday} and a date of ${x.toISO()}`):x}static fromISO(e,t={}){let[r,s]=ia(e);return hr(r,s,t,"ISO 8601",e)}static fromRFC2822(e,t={}){let[r,s]=oa(e);return hr(r,s,t,"RFC 2822",e)}static fromHTTP(e,t={}){let[r,s]=aa(e);return hr(r,s,t,"HTTP",t)}static fromFormat(e,t,r={}){if(W(e)||W(t))throw new fe("fromFormat requires an input string and a format");let{locale:s=null,numberingSystem:i=null}=r,o=ne.fromOpts({locale:s,numberingSystem:i,defaultToEN:!0}),[a,u,l,f]=Ea(o,e,t);return f?n.invalid(f):hr(a,u,r,`format ${t}`,e,l)}static fromString(e,t,r={}){return n.fromFormat(e,t,r)}static fromSQL(e,t={}){let[r,s]=ca(e);return hr(r,s,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new fe("need to specify a reason the DateTime is invalid");let r=e instanceof de?e:new de(e,t);if(X.throwOnInvalid)throw new Ur(r);return new n({invalid:r})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}get(e){return this[e]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Li(this).weekYear:NaN}get weekNumber(){return this.isValid?Li(this).weekNumber:NaN}get weekday(){return this.isValid?Li(this).weekday:NaN}get ordinal(){return this.isValid?Qr(this.c).ordinal:NaN}get monthShort(){return this.isValid?gt.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?gt.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?gt.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?gt.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}get isInLeapYear(){return jt(this.year)}get daysInMonth(){return un(this.year,this.month)}get daysInYear(){return this.isValid?qt(this.year):NaN}get weeksInWeekYear(){return this.isValid?ln(this.weekYear):NaN}resolvedLocaleOptions(e={}){let{locale:t,numberingSystem:r,calendar:s}=we.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:r,outputCalendar:s}}toUTC(e=0,t={}){return this.setZone(he.instance(e),t)}toLocal(){return this.setZone(X.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:r=!1}={}){if(e=Ve(e,X.defaultZone),e.equals(this.zone))return this;if(e.isValid){let s=this.ts;if(t||r){let i=e.offset(this.ts),o=this.toObject();[s]=ts(o,i,e)}return dr(this,{ts:s,zone:e})}else return n.invalid(Xr(e))}reconfigure({locale:e,numberingSystem:t,outputCalendar:r}={}){let s=this.loc.clone({locale:e,numberingSystem:t,outputCalendar:r});return dr(this,{loc:s})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;let t=cn(e,Aa),r=!W(t.weekYear)||!W(t.weekNumber)||!W(t.weekday),s=!W(t.ordinal),i=!W(t.year),o=!W(t.month)||!W(t.day),a=i||o,u=t.weekYear||t.weekNumber;if((a||s)&&u)throw new pt("Can\'t mix weekYear/weekNumber units with year/month/day or ordinals");if(o&&s)throw new pt("Can\'t mix ordinal dates with month/day");let l;r?l=Ci(R(R({},Zr(this.c)),t)):W(t.ordinal)?(l=R(R({},this.toObject()),t),W(t.day)&&(l.day=Math.min(un(l.year,l.month),l.day))):l=vi(R(R({},Qr(this.c)),t));let[f,d]=ts(l,this.o,this.zone);return dr(this,{ts:f,o:d})}plus(e){if(!this.isValid)return this;let t=B.fromDurationLike(e);return dr(this,La(this,t))}minus(e){if(!this.isValid)return this;let t=B.fromDurationLike(e).negate();return dr(this,La(this,t))}startOf(e){if(!this.isValid)return this;let t={},r=B.normalizeUnit(e);switch(r){case"years":t.month=1;case"quarters":case"months":t.day=1;case"weeks":case"days":t.hour=0;case"hours":t.minute=0;case"minutes":t.second=0;case"seconds":t.millisecond=0;break;case"milliseconds":break}if(r==="weeks"&&(t.weekday=1),r==="quarters"){let s=Math.ceil(this.month/3);t.month=(s-1)*3+1}return this.set(t)}endOf(e){return this.isValid?this.plus({[e]:1}).startOf(e).minus(1):this}toFormat(e,t={}){return this.isValid?we.create(this.loc.redefaultToEN(t)).formatDateTimeFromString(this,e):Ii}toLocaleString(e=on,t={}){return this.isValid?we.create(this.loc.clone(t),e).formatDateTime(this):Ii}toLocaleParts(e={}){return this.isValid?we.create(this.loc.clone(e),e).formatDateTimeParts(this):[]}toISO({format:e="extended",suppressSeconds:t=!1,suppressMilliseconds:r=!1,includeOffset:s=!0,extendedZone:i=!1}={}){if(!this.isValid)return null;let o=e==="extended",a=Ni(this,o);return a+="T",a+=Na(this,o,t,r,s,i),a}toISODate({format:e="extended"}={}){return this.isValid?Ni(this,e==="extended"):null}toISOWeekDate(){return es(this,"kkkk-\'W\'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:r=!0,includePrefix:s=!1,extendedZone:i=!1,format:o="extended"}={}){return this.isValid?(s?"T":"")+Na(this,o==="extended",t,e,r,i):null}toRFC2822(){return es(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return es(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss \'GMT\'")}toSQLDate(){return this.isValid?Ni(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:r=!0}={}){let s="HH:mm:ss.SSS";return(t||e)&&(r&&(s+=" "),t?s+="z":e&&(s+="ZZ")),es(this,s,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():Ii}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};let t=R({},this.c);return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",r={}){if(!this.isValid||!e.isValid)return B.invalid("created by diffing an invalid DateTime");let s=R({locale:this.locale,numberingSystem:this.numberingSystem},r),i=$o(t).map(B.normalizeUnit),o=e.valueOf()>this.valueOf(),a=o?this:e,u=o?e:this,l=ma(a,u,i,s);return o?l.negate():l}diffNow(e="milliseconds",t={}){return this.diff(n.now(),e,t)}until(e){return this.isValid?yt.fromDateTimes(this,e):this}hasSame(e,t){if(!this.isValid)return!1;let r=e.valueOf(),s=this.setZone(e.zone,{keepLocalTime:!0});return s.startOf(t)<=r&&r<=s.endOf(t)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;let t=e.base||n.fromObject({},{zone:this.zone}),r=e.padding?thist.valueOf(),Math.min)}static max(...e){if(!e.every(n.isDateTime))throw new fe("max requires all arguments be DateTimes");return Xs(e,t=>t.valueOf(),Math.max)}static fromFormatExplain(e,t,r={}){let{locale:s=null,numberingSystem:i=null}=r,o=ne.fromOpts({locale:s,numberingSystem:i,defaultToEN:!0});return ki(o,e,t)}static fromStringExplain(e,t,r={}){return n.fromFormatExplain(e,t,r)}static get DATE_SHORT(){return on}static get DATE_MED(){return $n}static get DATE_MED_WITH_WEEKDAY(){return Gs}static get DATE_FULL(){return Rn}static get DATE_HUGE(){return jn}static get TIME_SIMPLE(){return qn}static get TIME_WITH_SECONDS(){return Vn}static get TIME_WITH_SHORT_OFFSET(){return Un}static get TIME_WITH_LONG_OFFSET(){return Kn}static get TIME_24_SIMPLE(){return Wn}static get TIME_24_WITH_SECONDS(){return Hn}static get TIME_24_WITH_SHORT_OFFSET(){return Jn}static get TIME_24_WITH_LONG_OFFSET(){return zn}static get DATETIME_SHORT(){return Yn}static get DATETIME_SHORT_WITH_SECONDS(){return Gn}static get DATETIME_MED(){return Zn}static get DATETIME_MED_WITH_SECONDS(){return Qn}static get DATETIME_MED_WITH_WEEKDAY(){return Zs}static get DATETIME_FULL(){return Xn}static get DATETIME_FULL_WITH_SECONDS(){return er}static get DATETIME_HUGE(){return tr}static get DATETIME_HUGE_WITH_SECONDS(){return nr}};function bn(n){if(q.isDateTime(n))return n;if(n&&n.valueOf&&tt(n.valueOf()))return q.fromJSDate(n);if(n&&typeof n=="object")return q.fromObject(n);throw new fe(`Unknown datetime argument: ${n}, of type ${typeof n}`)}var bt=Vr(ns());var Fn=()=>/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE89\\uDE8F-\\uDEC2\\uDEC6\\uDECE-\\uDEDC\\uDEDF-\\uDEE9]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;function Mi(n){return n==null?n:n.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds").normalize()}function ja(n,e,t,r){return n.second==0&&n.minute==0&&n.hour==0?n.toLocal().toFormat(e,{locale:r}):n.toLocal().toFormat(t,{locale:r})}function qa(n){n=Mi(n);let e="";return n.years&&(e+=`${n.years} years, `),n.months&&(e+=`${n.months} months, `),n.weeks&&(e+=`${n.weeks} weeks, `),n.days&&(e+=`${n.days} days, `),n.hours&&(e+=`${n.hours} hours, `),n.minutes&&(e+=`${n.minutes} minutes, `),n.seconds&&(e+=`${Math.round(n.seconds)} seconds, `),n.milliseconds&&(e+=`${Math.round(n.milliseconds)} ms, `),e.endsWith(", ")&&(e=e.substring(0,e.length-2)),e}function En(n){return n.includes("/")&&(n=n.substring(n.lastIndexOf("/")+1)),n.endsWith(".md")&&(n=n.substring(0,n.length-3)),n}function Va(n){return n.includes(".")?n.substring(n.lastIndexOf(".")+1):""}var Uc=bt.alt(bt.regex(new RegExp(Fn(),"")),bt.regex(/[0-9\\p{Letter}_-]+/u),bt.whitespace.map(n=>" "),bt.any.map(n=>" ")).many().map(n=>n.join("").split(/\\s+/).join(" ").trim());function Ua(n){return Uc.tryParse(n)}var Oe=class n{static file(e,t=!1,r){return new n({path:e,embed:t,display:r,subpath:void 0,type:"file"})}static infer(e,t=!1,r){if(e.includes("#^")){let s=e.split("#^");return n.block(s[0],s[1],t,r)}else if(e.includes("#")){let s=e.split("#");return n.header(s[0],s[1],t,r)}else return n.file(e,t,r)}static header(e,t,r,s){return new n({path:e,embed:r,display:s,subpath:Ua(t),type:"header"})}static block(e,t,r,s){return new n({path:e,embed:r,display:s,subpath:t,type:"block"})}static fromObject(e){return new n(e)}static parseInner(e){let[t,r]=Kc(e);return n.infer(t,!1,r)}constructor(e){Object.assign(this,e)}withPath(e){return new n(Object.assign({},this,{path:e}))}withDisplay(e){return new n(Object.assign({},this,{display:e}))}withEmbed(e){return this.embed==e?this:new n(Object.assign({},this,{embed:e}))}withHeader(e){return n.header(this.path,e,this.embed,this.display)}withBlock(e){return n.block(this.path,e,this.embed,this.display)}equals(e){return e==null||e==null?!1:this.path==e.path&&this.type==e.type&&this.subpath==e.subpath}toString(){return this.markdown()}toObject(){return{path:this.path,type:this.type,subpath:this.subpath,display:this.display,embed:this.embed}}toFile(){return n.file(this.path,this.embed,this.display)}toEmbed(){return this.withEmbed(!0)}fromEmbed(){return this.withEmbed(!1)}markdown(){let e=(this.embed?"!":"")+"[["+this.obsidianLink();return e+="|",e+=this.displayOrDefault(),e+="]]",e}displayOrDefault(){if(this.display)return this.display;{let e=En(this.path);return(this.type=="header"||this.type=="block")&&(e+=" > "+this.subpath),e}}obsidianLink(){var t,r;let e=this.path.replace("|","\\\\|");return this.type=="header"?e+"#"+((t=this.subpath)==null?void 0:t.replace("|","\\\\|")):this.type=="block"?e+"#^"+((r=this.subpath)==null?void 0:r.replace("|","\\\\|")):e}fileName(){return En(this.path)}};function Kc(n){let e=-1;for(;(e=n.indexOf("|",e+1))>=0;)if(!(e>0&&n[e-1]=="\\\\"))return[n.substring(0,e).replace(/\\\\\\|/g,"|"),n.substring(e+1)];return[n.replace(/\\\\\\|/g,"|"),void 0]}var rs=Symbol.for("yaml.alias"),ss=Symbol.for("yaml.document"),Ke=Symbol.for("yaml.map"),_i=Symbol.for("yaml.pair"),Ie=Symbol.for("yaml.scalar"),Ft=Symbol.for("yaml.seq"),Te=Symbol.for("yaml.node.type"),We=n=>!!n&&typeof n=="object"&&n[Te]===rs,rt=n=>!!n&&typeof n=="object"&&n[Te]===ss,He=n=>!!n&&typeof n=="object"&&n[Te]===Ke,H=n=>!!n&&typeof n=="object"&&n[Te]===_i,K=n=>!!n&&typeof n=="object"&&n[Te]===Ie,Je=n=>!!n&&typeof n=="object"&&n[Te]===Ft;function Z(n){if(n&&typeof n=="object")switch(n[Te]){case Ke:case Ft:return!0}return!1}function J(n){if(n&&typeof n=="object")switch(n[Te]){case rs:case Ke:case Ie:case Ft:return!0}return!1}var Ka=n=>(K(n)||Z(n))&&!!n.anchor;var Ce=Symbol("break visit"),Wa=Symbol("skip children"),st=Symbol("remove node");function ze(n,e){let t=Ha(e);rt(n)?wn(null,n.contents,t,Object.freeze([n]))===st&&(n.contents=null):wn(null,n,t,Object.freeze([]))}ze.BREAK=Ce;ze.SKIP=Wa;ze.REMOVE=st;function wn(n,e,t,r){let s=Ja(n,e,t,r);if(J(s)||H(s))return za(n,r,s),wn(n,s,t,r);if(typeof s!="symbol"){if(Z(e)){r=Object.freeze(r.concat(e));for(let i=0;in.replace(/[!,[\\]{}]/g,e=>Wc[e]),it=class n{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},n.defaultYaml,e),this.tags=Object.assign({},n.defaultTags,t)}clone(){let e=new n(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new n(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:n.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},n.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:n.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},n.defaultTags),this.atNextDocument=!1);let r=e.trim().split(/[ \\t]+/),s=r.shift();switch(s){case"%TAG":{if(r.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),r.length<2))return!1;let[i,o]=r;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,r.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;let[i]=r;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{let o=/^\\d+\\.\\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${s}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){let o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren\'t resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}let[,r,s]=e.match(new RegExp("^(.*!)([^!]*)$","s"));s||t(`The ${e} tag has no suffix`);let i=this.tags[r];if(i)try{return i+decodeURIComponent(s)}catch(o){return t(String(o)),null}return r==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,r]of Object.entries(this.tags))if(e.startsWith(r))return t+Hc(e.substring(r.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],r=Object.entries(this.tags),s;if(e&&r.length>0&&J(e.contents)){let i={};ze(e.contents,(o,a)=>{J(a)&&a.tag&&(i[a.tag]=!0)}),s=Object.keys(i)}else s=[];for(let[i,o]of r)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||s.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`\n`)}};it.defaultYaml={explicit:!1,version:"1.2"};it.defaultTags={"!!":"tag:yaml.org,2002:"};function os(n){if(/[\\x00-\\x19\\s,[\\]{}]/.test(n)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(n)}`;throw new Error(t)}return!0}function Bi(n){let e=new Set;return ze(n,{Value(t,r){r.anchor&&e.add(r.anchor)}}),e}function Pi(n,e){for(let t=1;;++t){let r=`${n}${t}`;if(!e.has(r))return r}}function Ya(n,e){let t=[],r=new Map,s=null;return{onAnchor:i=>{t.push(i),s||(s=Bi(n));let o=Pi(e,s);return s.add(o),o},setAnchors:()=>{for(let i of t){let o=r.get(i);if(typeof o=="object"&&o.anchor&&(K(o.node)||Z(o.node)))o.node.anchor=o.anchor;else{let a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=i,a}}},sourceObjects:r}}function xt(n,e,t,r){if(r&&typeof r=="object")if(Array.isArray(r))for(let s=0,i=r.length;sce(r,String(s),t));if(n&&typeof n.toJSON=="function"){if(!t||!Ka(n))return n.toJSON(e,t);let r={aliasCount:0,count:1,res:void 0};t.anchors.set(n,r),t.onCreate=i=>{r.res=i,delete t.onCreate};let s=n.toJSON(e,t);return t.onCreate&&t.onCreate(s),s}return typeof n=="bigint"&&!(t!=null&&t.keep)?Number(n):n}var Ot=class{constructor(e){Object.defineProperty(this,Te,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:r,onAnchor:s,reviver:i}={}){if(!rt(e))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof r=="number"?r:100},a=ce(this,"",o);if(typeof s=="function")for(let{count:u,res:l}of o.anchors.values())s(l,u);return typeof i=="function"?xt(i,{"":a},"",a):a}};var Et=class extends Ot{constructor(e){super(rs),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return ze(e,{Node:(r,s)=>{if(s===this)return ze.BREAK;s.anchor===this.source&&(t=s)}}),t}toJSON(e,t){if(!t)return{source:this.source};let{anchors:r,doc:s,maxAliasCount:i}=t,o=this.resolve(s);if(!o){let u=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(u)}let a=r.get(o);if(a||(ce(o,null,t),a=r.get(o)),!a||a.res===void 0){let u="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(u)}if(i>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=as(s,o,r)),a.count*a.aliasCount>i)){let u="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(u)}return a.res}toString(e,t,r){let s=`*${this.source}`;if(e){if(os(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let i=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(i)}if(e.implicitKey)return`${s} `}return s}};function as(n,e,t){if(We(e)){let r=e.resolve(n),s=t&&r&&t.get(r);return s?s.count*s.aliasCount:0}else if(Z(e)){let r=0;for(let s of e.items){let i=as(n,s,t);i>r&&(r=i)}return r}else if(H(e)){let r=as(n,e.key,t),s=as(n,e.value,t);return Math.max(r,s)}return 1}var us=n=>!n||typeof n!="function"&&typeof n!="object",P=class extends Ot{constructor(e){super(Ie),this.value=e}toJSON(e,t){return t!=null&&t.keep?this.value:ce(this.value,e,t)}toString(){return String(this.value)}};P.BLOCK_FOLDED="BLOCK_FOLDED";P.BLOCK_LITERAL="BLOCK_LITERAL";P.PLAIN="PLAIN";P.QUOTE_DOUBLE="QUOTE_DOUBLE";P.QUOTE_SINGLE="QUOTE_SINGLE";var Jc="tag:yaml.org,2002:";function zc(n,e,t){var r;if(e){let s=t.filter(o=>o.tag===e),i=(r=s.find(o=>!o.format))!=null?r:s[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return t.find(s=>{var i;return((i=s.identify)==null?void 0:i.call(s,n))&&!s.format})}function wt(n,e,t){var d,m,h;if(rt(n)&&(n=n.contents),J(n))return n;if(H(n)){let b=(m=(d=t.schema[Ke]).createNode)==null?void 0:m.call(d,t.schema,null,t);return b.items.push(n),b}(n instanceof String||n instanceof Number||n instanceof Boolean||typeof BigInt!="undefined"&&n instanceof BigInt)&&(n=n.valueOf());let{aliasDuplicateObjects:r,onAnchor:s,onTagObj:i,schema:o,sourceObjects:a}=t,u;if(r&&n&&typeof n=="object"){if(u=a.get(n),u)return u.anchor||(u.anchor=s(n)),new Et(u.anchor);u={anchor:null,node:null},a.set(n,u)}e!=null&&e.startsWith("!!")&&(e=Jc+e.slice(2));let l=zc(n,e,o.tags);if(!l){if(n&&typeof n.toJSON=="function"&&(n=n.toJSON()),!n||typeof n!="object"){let b=new P(n);return u&&(u.node=b),b}l=n instanceof Map?o[Ke]:Symbol.iterator in Object(n)?o[Ft]:o[Ke]}i&&(i(l),delete t.onTagObj);let f=l!=null&&l.createNode?l.createNode(t.schema,n,t):typeof((h=l==null?void 0:l.nodeClass)==null?void 0:h.from)=="function"?l.nodeClass.from(t.schema,n,t):new P(n);return e?f.tag=e:l.default||(f.tag=l.tag),u&&(u.node=f),f}function pr(n,e,t){let r=t;for(let s=e.length-1;s>=0;--s){let i=e[s];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){let o=[];o[i]=r,r=o}else r=new Map([[i,r]])}return wt(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:n,sourceObjects:new Map})}var kn=n=>n==null||typeof n=="object"&&!!n[Symbol.iterator]().next().done,Sn=class extends Ot{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(r=>J(r)||H(r)?r.clone(e):r),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(kn(e))this.add(t);else{let[r,...s]=e,i=this.get(r,!0);if(Z(i))i.addIn(s,t);else if(i===void 0&&this.schema)this.set(r,pr(this.schema,s,t));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${s}`)}}deleteIn(e){let[t,...r]=e;if(r.length===0)return this.delete(t);let s=this.get(t,!0);if(Z(s))return s.deleteIn(r);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${r}`)}getIn(e,t){let[r,...s]=e,i=this.get(r,!0);return s.length===0?!t&&K(i)?i.value:i:Z(i)?i.getIn(s,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!H(t))return!1;let r=t.value;return r==null||e&&K(r)&&r.value==null&&!r.commentBefore&&!r.comment&&!r.tag})}hasIn(e){let[t,...r]=e;if(r.length===0)return this.has(t);let s=this.get(t,!0);return Z(s)?s.hasIn(r):!1}setIn(e,t){let[r,...s]=e;if(s.length===0)this.set(r,t);else{let i=this.get(r,!0);if(Z(i))i.setIn(s,t);else if(i===void 0&&this.schema)this.set(r,pr(this.schema,s,t));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${s}`)}}};var Ga=n=>n.replace(/^(?!$)(?: $)?/gm,"#");function Pe(n,e){return/^\\n+$/.test(n)?n.substring(1):e?n.replace(/^(?! *$)/gm,e):n}var ot=(n,e,t)=>n.endsWith(`\n`)?Pe(t,e):t.includes(`\n`)?`\n`+Pe(t,e):(n.endsWith(" ")?"":" ")+t;var $i="flow",ls="block",Dr="quoted";function yr(n,e,t="flow",{indentAtStart:r,lineWidth:s=80,minContentWidth:i=20,onFold:o,onOverflow:a}={}){if(!s||s<0)return n;ss-Math.max(2,i)?l.push(0):d=s-r);let m,h,b=!1,g=-1,D=-1,T=-1;t===ls&&(g=Za(n,g,e.length),g!==-1&&(d=g+u));for(let N;N=n[g+=1];){if(t===Dr&&N==="\\\\"){switch(D=g,n[g+1]){case"x":g+=3;break;case"u":g+=5;break;case"U":g+=9;break;default:g+=1}T=g}if(N===`\n`)t===ls&&(g=Za(n,g,e.length)),d=g+e.length+u,m=void 0;else{if(N===" "&&h&&h!==" "&&h!==`\n`&&h!==" "){let y=n[g+1];y&&y!==" "&&y!==`\n`&&y!==" "&&(m=g)}if(g>=d)if(m)l.push(m),d=m+u,m=void 0;else if(t===Dr){for(;h===" "||h===" ";)h=N,N=n[g+=1],b=!0;let y=g>T+1?g-2:D-1;if(f[y])return n;l.push(y),f[y]=!0,d=y+u,m=void 0}else b=!0}h=N}if(b&&a&&a(),l.length===0)return n;o&&o();let I=n.slice(0,l[0]);for(let N=0;N({indentAtStart:e?n.indent.length:n.indentAtStart,lineWidth:n.options.lineWidth,minContentWidth:n.options.minContentWidth}),ds=n=>/^(%|---|\\.\\.\\.)/m.test(n);function Yc(n,e,t){if(!e||e<0)return!1;let r=e-t,s=n.length;if(s<=r)return!1;for(let i=0,o=0;ir)return!0;if(o=i+1,s-o<=r)return!1}return!0}function gr(n,e){let t=JSON.stringify(n);if(e.options.doubleQuotedAsJSON)return t;let{implicitKey:r}=e,s=e.options.doubleQuotedMinMultiLineLength,i=e.indent||(ds(n)?" ":""),o="",a=0;for(let u=0,l=t[u];l;l=t[++u])if(l===" "&&t[u+1]==="\\\\"&&t[u+2]==="n"&&(o+=t.slice(a,u)+"\\\\ ",u+=1,a=u,l="\\\\"),l==="\\\\")switch(t[u+1]){case"u":{o+=t.slice(a,u);let f=t.substr(u+2,4);switch(f){case"0000":o+="\\\\0";break;case"0007":o+="\\\\a";break;case"000b":o+="\\\\v";break;case"001b":o+="\\\\e";break;case"0085":o+="\\\\N";break;case"00a0":o+="\\\\_";break;case"2028":o+="\\\\L";break;case"2029":o+="\\\\P";break;default:f.substr(0,2)==="00"?o+="\\\\x"+f.substr(2):o+=t.substr(u,6)}u+=5,a=u+1}break;case"n":if(r||t[u+2]===\'"\'||t.length\n`;let d,m;for(m=t.length;m>0;--m){let v=t[m-1];if(v!==`\n`&&v!==" "&&v!==" ")break}let h=t.substring(m),b=h.indexOf(`\n`);b===-1?d="-":t===h||b!==h.length-1?(d="+",i&&i()):d="",h&&(t=t.slice(0,-h.length),h[h.length-1]===`\n`&&(h=h.slice(0,-1)),h=h.replace(ji,`$&${l}`));let g=!1,D,T=-1;for(D=0;D")+(g?l?"2":"1":"")+d;if(n&&(y+=" "+a(n.replace(/ ?[\\r\\n]+/g," ")),s&&s()),f)return t=t.replace(/\\n+/g,`$&${l}`),`${y}\n${l}${I}${t}${h}`;t=t.replace(/\\n+/g,`\n$&`).replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g,"$1$2").replace(/\\n+/g,`$&${l}`);let w=yr(`${I}${t}${h}`,l,ls,fs(r,!0));return`${y}\n${l}${w}`}function Gc(n,e,t,r){let{type:s,value:i}=n,{actualString:o,implicitKey:a,indent:u,indentStep:l,inFlow:f}=e;if(a&&i.includes(`\n`)||f&&/[[\\]{},]/.test(i))return Cn(i,e);if(!i||/^[\\n\\t ,[\\]{}#&*!|>\'"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(i))return a||f||!i.includes(`\n`)?Cn(i,e):cs(n,e,t,r);if(!a&&!f&&s!==P.PLAIN&&i.includes(`\n`))return cs(n,e,t,r);if(ds(i)){if(u==="")return e.forceBlockIndent=!0,cs(n,e,t,r);if(a&&u===l)return Cn(i,e)}let d=i.replace(/\\n+/g,`$&\n${u}`);if(o){let m=g=>{var D;return g.default&&g.tag!=="tag:yaml.org,2002:str"&&((D=g.test)==null?void 0:D.test(d))},{compat:h,tags:b}=e.doc.schema;if(b.some(m)||h!=null&&h.some(m))return Cn(i,e)}return a?d:yr(d,u,$i,fs(e,!1))}function Wt(n,e,t,r){let{implicitKey:s,inFlow:i}=e,o=typeof n.value=="string"?n:Object.assign({},n,{value:String(n.value)}),{type:a}=n;a!==P.QUOTE_DOUBLE&&/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(o.value)&&(a=P.QUOTE_DOUBLE);let u=f=>{switch(f){case P.BLOCK_FOLDED:case P.BLOCK_LITERAL:return s||i?Cn(o.value,e):cs(o,e,t,r);case P.QUOTE_DOUBLE:return gr(o.value,e);case P.QUOTE_SINGLE:return Ri(o.value,e);case P.PLAIN:return Gc(o,e,t,r);default:return null}},l=u(a);if(l===null){let{defaultKeyType:f,defaultStringType:d}=e.options,m=s&&f||d;if(l=u(m),l===null)throw new Error(`Unsupported default string type ${m}`)}return l}function hs(n,e){let t=Object.assign({blockQuote:!0,commentString:Ga,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},n.schema.toStringOptions,e),r;switch(t.collectionStyle){case"block":r=!1;break;case"flow":r=!0;break;default:r=null}return{anchors:new Set,doc:n,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:r,options:t}}function Zc(n,e){var s,i,o,a;if(e.tag){let u=n.filter(l=>l.tag===e.tag);if(u.length>0)return(s=u.find(l=>l.format===e.format))!=null?s:u[0]}let t,r;if(K(e)){r=e.value;let u=n.filter(l=>{var f;return(f=l.identify)==null?void 0:f.call(l,r)});if(u.length>1){let l=u.filter(f=>f.test);l.length>0&&(u=l)}t=(i=u.find(l=>l.format===e.format))!=null?i:u.find(l=>!l.format)}else r=e,t=n.find(u=>u.nodeClass&&r instanceof u.nodeClass);if(!t){let u=(a=(o=r==null?void 0:r.constructor)==null?void 0:o.name)!=null?a:typeof r;throw new Error(`Tag not resolved for ${u} value`)}return t}function Qc(n,e,{anchors:t,doc:r}){if(!r.directives)return"";let s=[],i=(K(n)||Z(n))&&n.anchor;i&&os(i)&&(t.add(i),s.push(`&${i}`));let o=n.tag?n.tag:e.default?null:e.tag;return o&&s.push(r.directives.tagString(o)),s.join(" ")}function Tt(n,e,t,r){var u,l;if(H(n))return n.toString(e,t,r);if(We(n)){if(e.doc.directives)return n.toString(e);if((u=e.resolvedAliases)!=null&&u.has(n))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(n):e.resolvedAliases=new Set([n]),n=n.resolve(e.doc)}let s,i=J(n)?n:e.doc.createNode(n,{onTagObj:f=>s=f});s||(s=Zc(e.doc.schema.tags,i));let o=Qc(i,s,e);o.length>0&&(e.indentAtStart=((l=e.indentAtStart)!=null?l:0)+o.length+1);let a=typeof s.stringify=="function"?s.stringify(i,e,t,r):K(i)?Wt(i,e,t,r):i.toString(e,t,r);return o?K(i)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}\n${e.indent}${a}`:a}function Qa({key:n,value:e},t,r,s){var x,C;let{allNullValues:i,doc:o,indent:a,indentStep:u,options:{commentString:l,indentSeq:f,simpleKeys:d}}=t,m=J(n)&&n.comment||null;if(d){if(m)throw new Error("With simple keys, key nodes cannot have comments");if(Z(n)||!J(n)&&typeof n=="object"){let V="With simple keys, collection cannot be used as a key value";throw new Error(V)}}let h=!d&&(!n||m&&e==null&&!t.inFlow||Z(n)||(K(n)?n.type===P.BLOCK_FOLDED||n.type===P.BLOCK_LITERAL:typeof n=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!h&&(d||!i),indent:a+u});let b=!1,g=!1,D=Tt(n,t,()=>b=!0,()=>g=!0);if(!h&&!t.inFlow&&D.length>1024){if(d)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");h=!0}if(t.inFlow){if(i||e==null)return b&&r&&r(),D===""?"?":h?`? ${D}`:D}else if(i&&!d||e==null&&h)return D=`? ${D}`,m&&!b?D+=ot(D,t.indent,l(m)):g&&s&&s(),D;b&&(m=null),h?(m&&(D+=ot(D,t.indent,l(m))),D=`? ${D}\n${a}:`):(D=`${D}:`,m&&(D+=ot(D,t.indent,l(m))));let T,I,N;J(e)?(T=!!e.spaceBefore,I=e.commentBefore,N=e.comment):(T=!1,I=null,N=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!h&&!m&&K(e)&&(t.indentAtStart=D.length+1),g=!1,!f&&u.length>=2&&!t.inFlow&&!h&&Je(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let y=!1,w=Tt(e,t,()=>y=!0,()=>g=!0),v=" ";if(m||T||I){if(v=T?`\n`:"",I){let V=l(I);v+=`\n${Pe(V,t.indent)}`}w===""&&!t.inFlow?v===`\n`&&(v=`\n\n`):v+=`\n${t.indent}`}else if(!h&&Z(e)){let V=w[0],j=w.indexOf(`\n`),Y=j!==-1,ee=(C=(x=t.inFlow)!=null?x:e.flow)!=null?C:e.items.length===0;if(Y||!ee){let ae=!1;if(Y&&(V==="&"||V==="!")){let O=w.indexOf(" ");V==="&"&&O!==-1&&On===ps||typeof n=="symbol"&&n.description===ps,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new P(Symbol(ps)),{addToJSMap:Vi}),stringify:()=>ps},Xa=(n,e)=>(Ye.identify(e)||K(e)&&(!e.type||e.type===P.PLAIN)&&Ye.identify(e.value))&&(n==null?void 0:n.doc.schema.tags.some(t=>t.tag===Ye.tag&&t.default));function Vi(n,e,t){if(t=n&&We(t)?t.resolve(n.doc):t,Je(t))for(let r of t.items)qi(n,e,r);else if(Array.isArray(t))for(let r of t)qi(n,e,r);else qi(n,e,t)}function qi(n,e,t){let r=n&&We(t)?t.resolve(n.doc):t;if(!He(r))throw new Error("Merge sources must be maps or map aliases");let s=r.toJSON(null,n,Map);for(let[i,o]of s)e instanceof Map?e.has(i)||e.set(i,o):e instanceof Set?e.add(i):Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}function Ds(n,e,{key:t,value:r}){if(J(t)&&t.addToJSMap)t.addToJSMap(n,e,r);else if(Xa(n,t))Vi(n,e,r);else{let s=ce(t,"",n);if(e instanceof Map)e.set(s,ce(r,s,n));else if(e instanceof Set)e.add(s);else{let i=Xc(t,s,n),o=ce(r,i,n);i in e?Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[i]=o}}return e}function Xc(n,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(J(n)&&(t!=null&&t.doc)){let r=hs(t.doc,{});r.anchors=new Set;for(let i of t.anchors.keys())r.anchors.add(i.anchor);r.inFlow=!0,r.inStringifyKey=!0;let s=n.toString(r);if(!t.mapKeyWarned){let i=JSON.stringify(s);i.length>40&&(i=i.substring(0,36)+\'..."\'),ms(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${i}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return s}return JSON.stringify(e)}function vn(n,e,t){let r=wt(n,void 0,t),s=wt(e,void 0,t);return new ie(r,s)}var ie=class n{constructor(e,t=null){Object.defineProperty(this,Te,{value:_i}),this.key=e,this.value=t}clone(e){let{key:t,value:r}=this;return J(t)&&(t=t.clone(e)),J(r)&&(r=r.clone(e)),new n(t,r)}toJSON(e,t){let r=t!=null&&t.mapAsMap?new Map:{};return Ds(t,r,this)}toString(e,t,r){return e!=null&&e.doc?Qa(this,e,t,r):JSON.stringify(this)}};function gs(n,e,t){var i;return(((i=e.inFlow)!=null?i:n.flow)?tf:ef)(n,e,t)}function ef({comment:n,items:e},t,{blockItemPrefix:r,flowChars:s,itemIndent:i,onChompKeep:o,onComment:a}){let{indent:u,options:{commentString:l}}=t,f=Object.assign({},t,{indent:i,type:null}),d=!1,m=[];for(let b=0;bD=null,()=>d=!0);D&&(T+=ot(T,i,l(D))),d&&D&&(d=!1),m.push(r+T)}let h;if(m.length===0)h=s.start+s.end;else{h=m[0];for(let b=1;bD=null);bf||T.includes(`\n`))&&(l=!0),d.push(T),f=d.length}let{start:m,end:h}=t;if(d.length===0)return m+h;if(!l){let b=d.reduce((g,D)=>g+D.length+2,2);l=e.options.lineWidth>0&&b>e.options.lineWidth}if(l){let b=m;for(let g of d)b+=g?`\n${i}${s}${g}`:`\n`;return`${b}\n${s}${h}`}else return`${m}${o}${d.join(" ")}${o}${h}`}function ys({indent:n,options:{commentString:e}},t,r,s){if(r&&s&&(r=r.replace(/^\\n+/,"")),r){let i=Pe(e(r),n);t.push(i.trimStart())}}function It(n,e){let t=K(e)?e.value:e;for(let r of n)if(H(r)&&(r.key===e||r.key===t||K(r.key)&&r.key.value===t))return r}var oe=class extends Sn{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Ke,e),this.items=[]}static from(e,t,r){let{keepUndefined:s,replacer:i}=r,o=new this(e),a=(u,l)=>{if(typeof i=="function")l=i.call(t,u,l);else if(Array.isArray(i)&&!i.includes(u))return;(l!==void 0||s)&&o.items.push(vn(u,l,r))};if(t instanceof Map)for(let[u,l]of t)a(u,l);else if(t&&typeof t=="object")for(let u of Object.keys(t))a(u,t[u]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){var o;let r;H(e)?r=e:!e||typeof e!="object"||!("key"in e)?r=new ie(e,e==null?void 0:e.value):r=new ie(e.key,e.value);let s=It(this.items,r.key),i=(o=this.schema)==null?void 0:o.sortMapEntries;if(s){if(!t)throw new Error(`Key ${r.key} already set`);K(s.value)&&us(r.value)?s.value.value=r.value:s.value=r.value}else if(i){let a=this.items.findIndex(u=>i(r,u)<0);a===-1?this.items.push(r):this.items.splice(a,0,r)}else this.items.push(r)}delete(e){let t=It(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){var i;let r=It(this.items,e),s=r==null?void 0:r.value;return(i=!t&&K(s)?s.value:s)!=null?i:void 0}has(e){return!!It(this.items,e)}set(e,t){this.add(new ie(e,t),!0)}toJSON(e,t,r){let s=r?new r:t!=null&&t.mapAsMap?new Map:{};t!=null&&t.onCreate&&t.onCreate(s);for(let i of this.items)Ds(t,s,i);return s}toString(e,t,r){if(!e)return JSON.stringify(this);for(let s of this.items)if(!H(s))throw new Error(`Map items must all be pairs; found ${JSON.stringify(s)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),gs(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:r,onComment:t})}};var Ge={collection:"map",default:!0,nodeClass:oe,tag:"tag:yaml.org,2002:map",resolve(n,e){return He(n)||e("Expected a mapping for this tag"),n},createNode:(n,e,t)=>oe.from(n,e,t)};var be=class extends Sn{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Ft,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=bs(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){let r=bs(e);if(typeof r!="number")return;let s=this.items[r];return!t&&K(s)?s.value:s}has(e){let t=bs(e);return typeof t=="number"&&t=0?e:null}var Ze={collection:"seq",default:!0,nodeClass:be,tag:"tag:yaml.org,2002:seq",resolve(n,e){return Je(n)||e("Expected a sequence for this tag"),n},createNode:(n,e,t)=>be.from(n,e,t)};var Lt={identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify(n,e,t,r){return e=Object.assign({actualString:!0},e),Wt(n,e,t,r)}};var Ht={identify:n=>n==null,createNode:()=>new P(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new P(null),stringify:({source:n},e)=>typeof n=="string"&&Ht.test.test(n)?n:e.options.nullStr};var br={identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:n=>new P(n[0]==="t"||n[0]==="T"),stringify({source:n,value:e},t){if(n&&br.test.test(n)){let r=n[0]==="t"||n[0]==="T";if(e===r)return n}return e?t.options.trueStr:t.options.falseStr}};function Fe({format:n,minFractionDigits:e,tag:t,value:r}){if(typeof r=="bigint")return String(r);let s=typeof r=="number"?r:Number(r);if(!isFinite(s))return isNaN(s)?".nan":s<0?"-.inf":".inf";let i=JSON.stringify(r);if(!n&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\\d/.test(i)){let o=i.indexOf(".");o<0&&(o=i.length,i+=".");let a=e-(i.length-o-1);for(;a-- >0;)i+="0"}return i}var Fs={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Fe},Es={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Fe(n)}},ws={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,resolve(n){let e=new P(parseFloat(n)),t=n.indexOf(".");return t!==-1&&n[n.length-1]==="0"&&(e.minFractionDigits=n.length-t-1),e},stringify:Fe};var Ts=n=>typeof n=="bigint"||Number.isInteger(n),Ui=(n,e,t,{intAsBigInt:r})=>r?BigInt(n):parseInt(n.substring(e),t);function eu(n,e,t){let{value:r}=n;return Ts(r)&&r>=0?t+r.toString(e):Fe(n)}var Ss={identify:n=>Ts(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(n,e,t)=>Ui(n,2,8,t),stringify:n=>eu(n,8,"0o")},ks={identify:Ts,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(n,e,t)=>Ui(n,0,10,t),stringify:Fe},Cs={identify:n=>Ts(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(n,e,t)=>Ui(n,2,16,t),stringify:n=>eu(n,16,"0x")};var tu=[Ge,Ze,Lt,Ht,br,Ss,ks,Cs,Fs,Es,ws];function nu(n){return typeof n=="bigint"||Number.isInteger(n)}var vs=({value:n})=>JSON.stringify(n),nf=[{identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify:vs},{identify:n=>n==null,createNode:()=>new P(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:vs},{identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:n=>n==="true",stringify:vs},{identify:nu,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(n,e,{intAsBigInt:t})=>t?BigInt(n):parseInt(n,10),stringify:({value:n})=>nu(n)?n.toString():JSON.stringify(n)},{identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:n=>parseFloat(n),stringify:vs}],rf={default:!0,tag:"",test:/^/,resolve(n,e){return e(`Unresolved plain scalar ${JSON.stringify(n)}`),n}},ru=[Ge,Ze].concat(nf,rf);var Fr={identify:n=>n instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(n,e){if(typeof Buffer=="function")return Buffer.from(n,"base64");if(typeof atob=="function"){let t=atob(n.replace(/[\\n\\r]/g,"")),r=new Uint8Array(t.length);for(let s=0;s1&&e("Each pair must have its own sequence indicator");let i=s.items[0]||new ie(new P(null));if(s.commentBefore&&(i.key.commentBefore=i.key.commentBefore?`${s.commentBefore}\n${i.key.commentBefore}`:s.commentBefore),s.comment){let o=(t=i.value)!=null?t:i.key;o.comment=o.comment?`${s.comment}\n${o.comment}`:s.comment}s=i}n.items[r]=H(s)?s:new ie(s)}}else e("Expected a sequence for this tag");return n}function Wi(n,e,t){let{replacer:r}=t,s=new be(n);s.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof r=="function"&&(o=r.call(e,String(i++),o));let a,u;if(Array.isArray(o))if(o.length===2)a=o[0],u=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){let l=Object.keys(o);if(l.length===1)a=l[0],u=o[a];else throw new TypeError(`Expected tuple with one key, not ${l.length} keys`)}else a=o;s.items.push(vn(a,u,t))}return s}var Er={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Ki,createNode:Wi};var xn=class n extends be{constructor(){super(),this.add=oe.prototype.add.bind(this),this.delete=oe.prototype.delete.bind(this),this.get=oe.prototype.get.bind(this),this.has=oe.prototype.has.bind(this),this.set=oe.prototype.set.bind(this),this.tag=n.tag}toJSON(e,t){if(!t)return super.toJSON(e);let r=new Map;t!=null&&t.onCreate&&t.onCreate(r);for(let s of this.items){let i,o;if(H(s)?(i=ce(s.key,"",t),o=ce(s.value,i,t)):i=ce(s,"",t),r.has(i))throw new Error("Ordered maps must not include duplicate keys");r.set(i,o)}return r}static from(e,t,r){let s=Wi(e,t,r),i=new this;return i.items=s.items,i}};xn.tag="tag:yaml.org,2002:omap";var wr={collection:"seq",identify:n=>n instanceof Map,nodeClass:xn,default:!1,tag:"tag:yaml.org,2002:omap",resolve(n,e){let t=Ki(n,e),r=[];for(let{key:s}of t.items)K(s)&&(r.includes(s.value)?e(`Ordered maps must not include duplicate keys: ${s.value}`):r.push(s.value));return Object.assign(new xn,t)},createNode:(n,e,t)=>xn.from(n,e,t)};function su({value:n,source:e},t){return e&&(n?Hi:Ji).test.test(e)?e:n?t.options.trueStr:t.options.falseStr}var Hi={identify:n=>n===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new P(!0),stringify:su},Ji={identify:n=>n===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new P(!1),stringify:su};var iu={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Fe},ou={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n.replace(/_/g,"")),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Fe(n)}},au={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,resolve(n){let e=new P(parseFloat(n.replace(/_/g,""))),t=n.indexOf(".");if(t!==-1){let r=n.substring(t+1).replace(/_/g,"");r[r.length-1]==="0"&&(e.minFractionDigits=r.length)}return e},stringify:Fe};var Tr=n=>typeof n=="bigint"||Number.isInteger(n);function xs(n,e,t,{intAsBigInt:r}){let s=n[0];if((s==="-"||s==="+")&&(e+=1),n=n.substring(e).replace(/_/g,""),r){switch(t){case 2:n=`0b${n}`;break;case 8:n=`0o${n}`;break;case 16:n=`0x${n}`;break}let o=BigInt(n);return s==="-"?BigInt(-1)*o:o}let i=parseInt(n,t);return s==="-"?-1*i:i}function zi(n,e,t){let{value:r}=n;if(Tr(r)){let s=r.toString(e);return r<0?"-"+t+s.substr(1):t+s}return Fe(n)}var uu={identify:Tr,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(n,e,t)=>xs(n,2,2,t),stringify:n=>zi(n,2,"0b")},lu={identify:Tr,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(n,e,t)=>xs(n,1,8,t),stringify:n=>zi(n,8,"0")},cu={identify:Tr,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(n,e,t)=>xs(n,0,10,t),stringify:Fe},fu={identify:Tr,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(n,e,t)=>xs(n,2,16,t),stringify:n=>zi(n,16,"0x")};var On=class n extends oe{constructor(e){super(e),this.tag=n.tag}add(e){let t;H(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new ie(e.key,null):t=new ie(e,null),It(this.items,t.key)||this.items.push(t)}get(e,t){let r=It(this.items,e);return!t&&H(r)?K(r.key)?r.key.value:r.key:r}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let r=It(this.items,e);r&&!t?this.items.splice(this.items.indexOf(r),1):!r&&t&&this.items.push(new ie(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,r){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,r);throw new Error("Set items must all have null values")}static from(e,t,r){let{replacer:s}=r,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof s=="function"&&(o=s.call(t,o,o)),i.items.push(vn(o,null,r));return i}};On.tag="tag:yaml.org,2002:set";var Sr={collection:"map",identify:n=>n instanceof Set,nodeClass:On,default:!1,tag:"tag:yaml.org,2002:set",createNode:(n,e,t)=>On.from(n,e,t),resolve(n,e){if(He(n)){if(n.hasAllNullValues(!0))return Object.assign(new On,n);e("Set items must all have null values")}else e("Expected a mapping for this tag");return n}};function Yi(n,e){let t=n[0],r=t==="-"||t==="+"?n.substring(1):n,s=o=>e?BigInt(o):Number(o),i=r.replace(/_/g,"").split(":").reduce((o,a)=>o*s(60)+s(a),s(0));return t==="-"?s(-1)*i:i}function du(n){let{value:e}=n,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return Fe(n);let r="";e<0&&(r="-",e*=t(-1));let s=t(60),i=[e%s];return e<60?i.unshift(0):(e=(e-i[0])/s,i.unshift(e%s),e>=60&&(e=(e-i[0])/s,i.unshift(e))),r+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\\d*$/,"")}var Os={identify:n=>typeof n=="bigint"||Number.isInteger(n),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(n,e,{intAsBigInt:t})=>Yi(n,t),stringify:du},Is={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,resolve:n=>Yi(n,!1),stringify:du},In={identify:n=>n instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\\\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(n){let e=n.match(In.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,r,s,i,o,a]=e.map(Number),u=e[7]?Number((e[7]+"00").substr(1,3)):0,l=Date.UTC(t,r-1,s,i||0,o||0,a||0,u),f=e[8];if(f&&f!=="Z"){let d=Yi(f,!1);Math.abs(d)<30&&(d*=60),l-=6e4*d}return new Date(l)},stringify:({value:n})=>n.toISOString().replace(/((T00:00)?:00)?\\.000Z$/,"")};var Gi=[Ge,Ze,Lt,Ht,Hi,Ji,uu,lu,cu,fu,iu,ou,au,Fr,Ye,wr,Er,Sr,Os,Is,In];var hu=new Map([["core",tu],["failsafe",[Ge,Ze,Lt]],["json",ru],["yaml11",Gi],["yaml-1.1",Gi]]),mu={binary:Fr,bool:br,float:ws,floatExp:Es,floatNaN:Fs,floatTime:Is,int:ks,intHex:Cs,intOct:Ss,intTime:Os,map:Ge,merge:Ye,null:Ht,omap:wr,pairs:Er,seq:Ze,set:Sr,timestamp:In},pu={"tag:yaml.org,2002:binary":Fr,"tag:yaml.org,2002:merge":Ye,"tag:yaml.org,2002:omap":wr,"tag:yaml.org,2002:pairs":Er,"tag:yaml.org,2002:set":Sr,"tag:yaml.org,2002:timestamp":In};function Ls(n,e,t){let r=hu.get(e);if(r&&!n)return t&&!r.includes(Ye)?r.concat(Ye):r.slice();let s=r;if(!s)if(Array.isArray(n))s=[];else{let i=Array.from(hu.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${i} or define customTags array`)}if(Array.isArray(n))for(let i of n)s=s.concat(i);else typeof n=="function"&&(s=n(s.slice()));return t&&(s=s.concat(Ye)),s.reduce((i,o)=>{let a=typeof o=="string"?mu[o]:o;if(!a){let u=JSON.stringify(o),l=Object.keys(mu).map(f=>JSON.stringify(f)).join(", ");throw new Error(`Unknown custom tag ${u}; use one of ${l}`)}return i.includes(a)||i.push(a),i},[])}var sf=(n,e)=>n.keye.key?1:0,kr=class n{constructor({compat:e,customTags:t,merge:r,resolveKnownTags:s,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Ls(e,"compat"):e?Ls(null,e):null,this.name=typeof i=="string"&&i||"core",this.knownTags=s?pu:{},this.tags=Ls(t,this.name,r),this.toStringOptions=a!=null?a:null,Object.defineProperty(this,Ke,{value:Ge}),Object.defineProperty(this,Ie,{value:Lt}),Object.defineProperty(this,Ft,{value:Ze}),this.sortMapEntries=typeof o=="function"?o:o===!0?sf:null}clone(){let e=Object.create(n.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};function Du(n,e){var u;let t=[],r=e.directives===!0;if(e.directives!==!1&&n.directives){let l=n.directives.toString(n);l?(t.push(l),r=!0):n.directives.docStart&&(r=!0)}r&&t.push("---");let s=hs(n,e),{commentString:i}=s.options;if(n.commentBefore){t.length!==1&&t.unshift("");let l=i(n.commentBefore);t.unshift(Pe(l,""))}let o=!1,a=null;if(n.contents){if(J(n.contents)){if(n.contents.spaceBefore&&r&&t.push(""),n.contents.commentBefore){let d=i(n.contents.commentBefore);t.push(Pe(d,""))}s.forceBlockIndent=!!n.comment,a=n.contents.comment}let l=a?void 0:()=>o=!0,f=Tt(n.contents,s,()=>a=null,l);a&&(f+=ot(f,"",i(a))),(f[0]==="|"||f[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${f}`:t.push(f)}else t.push(Tt(n.contents,s));if((u=n.directives)!=null&&u.docEnd)if(n.comment){let l=i(n.comment);l.includes(`\n`)?(t.push("..."),t.push(Pe(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=n.comment;l&&o&&(l=l.replace(/^\\n+/,"")),l&&((!o||a)&&t[t.length-1]!==""&&t.push(""),t.push(Pe(i(l),"")))}return t.join(`\n`)+`\n`}var Nt=class n{constructor(e,t,r){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Te,{value:ss});let s=null;typeof t=="function"||Array.isArray(t)?s=t:r===void 0&&t&&(r=t,t=void 0);let i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},r);this.options=i;let{version:o}=i;r!=null&&r._directives?(this.directives=r._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new it({version:o}),this.setSchema(o,r),this.contents=e===void 0?null:this.createNode(e,s,r)}clone(){let e=Object.create(n.prototype,{[Te]:{value:ss}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=J(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Ln(this.contents)&&this.contents.add(e)}addIn(e,t){Ln(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){let r=Bi(this);e.anchor=!t||r.has(t)?Pi(t||"a",r):t}return new Et(e.anchor)}createNode(e,t,r){let s;if(typeof t=="function")e=t.call({"":e},"",e),s=t;else if(Array.isArray(t)){let D=I=>typeof I=="number"||I instanceof String||I instanceof Number,T=t.filter(D).map(String);T.length>0&&(t=t.concat(T)),s=t}else r===void 0&&t&&(r=t,t=void 0);let{aliasDuplicateObjects:i,anchorPrefix:o,flow:a,keepUndefined:u,onTagObj:l,tag:f}=r!=null?r:{},{onAnchor:d,setAnchors:m,sourceObjects:h}=Ya(this,o||"a"),b={aliasDuplicateObjects:i!=null?i:!0,keepUndefined:u!=null?u:!1,onAnchor:d,onTagObj:l,replacer:s,schema:this.schema,sourceObjects:h},g=wt(e,f,b);return a&&Z(g)&&(g.flow=!0),m(),g}createPair(e,t,r={}){let s=this.createNode(e,null,r),i=this.createNode(t,null,r);return new ie(s,i)}delete(e){return Ln(this.contents)?this.contents.delete(e):!1}deleteIn(e){return kn(e)?this.contents==null?!1:(this.contents=null,!0):Ln(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return Z(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return kn(e)?!t&&K(this.contents)?this.contents.value:this.contents:Z(this.contents)?this.contents.getIn(e,t):void 0}has(e){return Z(this.contents)?this.contents.has(e):!1}hasIn(e){return kn(e)?this.contents!==void 0:Z(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=pr(this.schema,[e],t):Ln(this.contents)&&this.contents.set(e,t)}setIn(e,t){kn(e)?this.contents=t:this.contents==null?this.contents=pr(this.schema,Array.from(e),t):Ln(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let r;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new it({version:"1.1"}),r={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new it({version:e}),r={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,r=null;break;default:{let s=JSON.stringify(e);throw new Error(`Expected \'1.1\', \'1.2\' or null as first argument, but found: ${s}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(r)this.schema=new kr(Object.assign(r,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:r,maxAliasCount:s,onAnchor:i,reviver:o}={}){let a={anchors:new Map,doc:this,keep:!e,mapAsMap:r===!0,mapKeyWarned:!1,maxAliasCount:typeof s=="number"?s:100},u=ce(this.contents,t!=null?t:"",a);if(typeof i=="function")for(let{count:l,res:f}of a.anchors.values())i(f,l);return typeof o=="function"?xt(o,{"":u},"",u):u}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return Du(this,e)}};function Ln(n){if(Z(n))return!0;throw new Error("Expected a YAML collection as document contents")}var Cr=class extends Error{constructor(e,t,r,s){super(),this.name=e,this.code=r,this.message=s,this.pos=t}},Qe=class extends Cr{constructor(e,t,r){super("YAMLParseError",e,t,r)}},vr=class extends Cr{constructor(e,t,r){super("YAMLWarning",e,t,r)}},Zi=(n,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));let{line:r,col:s}=t.linePos[0];t.message+=` at line ${r}, column ${s}`;let i=s-1,o=n.substring(e.lineStarts[r-1],e.lineStarts[r]).replace(/[\\n\\r]+$/,"");if(i>=60&&o.length>80){let a=Math.min(i-39,o.length-79);o="\\u2026"+o.substring(a),i-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\\u2026"),r>1&&/^ *$/.test(o.substring(0,i))){let a=n.substring(e.lineStarts[r-2],e.lineStarts[r-1]);a.length>80&&(a=a.substring(0,79)+`\\u2026\n`),o=a+o}if(/[^ ]/.test(o)){let a=1,u=t.linePos[1];u&&u.line===r&&u.col>s&&(a=Math.max(1,Math.min(u.col-s,80-i)));let l=" ".repeat(i)+"^".repeat(a);t.message+=`:\n\n${o}\n${l}\n`}};function at(n,{flow:e,indicator:t,next:r,offset:s,onError:i,parentIndent:o,startOnNewline:a}){let u=!1,l=a,f=a,d="",m="",h=!1,b=!1,g=null,D=null,T=null,I=null,N=null,y=null,w=null;for(let C of n)switch(b&&(C.type!=="space"&&C.type!=="newline"&&C.type!=="comma"&&i(C.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),b=!1),g&&(l&&C.type!=="comment"&&C.type!=="newline"&&i(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),g=null),C.type){case"space":!e&&(t!=="doc-start"||(r==null?void 0:r.type)!=="flow-collection")&&C.source.includes(" ")&&(g=C),f=!0;break;case"comment":{f||i(C,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let V=C.source.substring(1)||" ";d?d+=m+V:d=V,m="",l=!1;break}case"newline":l?d?d+=C.source:u=!0:m+=C.source,l=!0,h=!0,(D||T)&&(I=C),f=!0;break;case"anchor":D&&i(C,"MULTIPLE_ANCHORS","A node can have at most one anchor"),C.source.endsWith(":")&&i(C.offset+C.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),D=C,w===null&&(w=C.offset),l=!1,f=!1,b=!0;break;case"tag":{T&&i(C,"MULTIPLE_TAGS","A node can have at most one tag"),T=C,w===null&&(w=C.offset),l=!1,f=!1,b=!0;break}case t:(D||T)&&i(C,"BAD_PROP_ORDER",`Anchors and tags must be after the ${C.source} indicator`),y&&i(C,"UNEXPECTED_TOKEN",`Unexpected ${C.source} in ${e!=null?e:"collection"}`),y=C,l=t==="seq-item-ind"||t==="explicit-key-ind",f=!1;break;case"comma":if(e){N&&i(C,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),N=C,l=!1,f=!1;break}default:i(C,"UNEXPECTED_TOKEN",`Unexpected ${C.type} token`),l=!1,f=!1}let v=n[n.length-1],x=v?v.offset+v.source.length:s;return b&&r&&r.type!=="space"&&r.type!=="newline"&&r.type!=="comma"&&(r.type!=="scalar"||r.source!=="")&&i(r.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),g&&(l&&g.indent<=o||(r==null?void 0:r.type)==="block-map"||(r==null?void 0:r.type)==="block-seq")&&i(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:N,found:y,spaceBefore:u,comment:d,hasNewline:h,anchor:D,tag:T,newlineAfterProp:I,end:x,start:w!=null?w:x}}function At(n){if(!n)return null;switch(n.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(n.source.includes(`\n`))return!0;if(n.end){for(let e of n.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of n.items){for(let t of e.start)if(t.type==="newline")return!0;if(e.sep){for(let t of e.sep)if(t.type==="newline")return!0}if(At(e.key)||At(e.value))return!0}return!1;default:return!0}}function xr(n,e,t){if((e==null?void 0:e.type)==="flow-collection"){let r=e.end[0];r.indent===n&&(r.source==="]"||r.source==="}")&&At(e)&&t(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}function Ns(n,e,t){let{uniqueKeys:r}=n.options;if(r===!1)return!1;let s=typeof r=="function"?r:(i,o)=>i===o||K(i)&&K(o)&&i.value===o.value;return e.some(i=>s(i.key,t))}var yu="All mapping items must start at the same column";function gu({composeNode:n,composeEmptyNode:e},t,r,s,i){var f,d;let o=(f=i==null?void 0:i.nodeClass)!=null?f:oe,a=new o(t.schema);t.atRoot&&(t.atRoot=!1);let u=r.offset,l=null;for(let m of r.items){let{start:h,key:b,sep:g,value:D}=m,T=at(h,{indicator:"explicit-key-ind",next:b!=null?b:g==null?void 0:g[0],offset:u,onError:s,parentIndent:r.indent,startOnNewline:!0}),I=!T.found;if(I){if(b&&(b.type==="block-seq"?s(u,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in b&&b.indent!==r.indent&&s(u,"BAD_INDENT",yu)),!T.anchor&&!T.tag&&!g){l=T.end,T.comment&&(a.comment?a.comment+=`\n`+T.comment:a.comment=T.comment);continue}(T.newlineAfterProp||At(b))&&s(b!=null?b:h[h.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else((d=T.found)==null?void 0:d.indent)!==r.indent&&s(u,"BAD_INDENT",yu);t.atKey=!0;let N=T.end,y=b?n(t,b,T,s):e(t,N,h,null,T,s);t.schema.compat&&xr(r.indent,b,s),t.atKey=!1,Ns(t,a.items,y)&&s(N,"DUPLICATE_KEY","Map keys must be unique");let w=at(g!=null?g:[],{indicator:"map-value-ind",next:D,offset:y.range[2],onError:s,parentIndent:r.indent,startOnNewline:!b||b.type==="block-scalar"});if(u=w.end,w.found){I&&((D==null?void 0:D.type)==="block-map"&&!w.hasNewline&&s(u,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&T.startn&&(n.type==="block-map"||n.type==="block-seq");function Fu({composeNode:n,composeEmptyNode:e},t,r,s,i){var D,T;let o=r.start.source==="{",a=o?"flow map":"flow sequence",u=(D=i==null?void 0:i.nodeClass)!=null?D:o?oe:be,l=new u(t.schema);l.flow=!0;let f=t.atRoot;f&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let d=r.offset+r.start.source.length;for(let I=0;I0){let I=ut(b,g,t.options.strict,s);I.comment&&(l.comment?l.comment+=`\n`+I.comment:l.comment=I.comment),l.range=[r.offset,g,I.offset]}else l.range=[r.offset,g,g];return l}function eo(n,e,t,r,s,i){let o=t.type==="block-map"?gu(n,e,t,r,i):t.type==="block-seq"?bu(n,e,t,r,i):Fu(n,e,t,r,i),a=o.constructor;return s==="!"||s===a.tagName?(o.tag=a.tagName,o):(s&&(o.tag=s),o)}function Eu(n,e,t,r,s){var m,h;let i=r.tag,o=i?e.directives.tagName(i.source,b=>s(i,"TAG_RESOLVE_FAILED",b)):null;if(t.type==="block-seq"){let{anchor:b,newlineAfterProp:g}=r,D=b&&i?b.offset>i.offset?b:i:b!=null?b:i;D&&(!g||g.offsetb.tag===o&&b.collection===a);if(!u){let b=e.schema.knownTags[o];if(b&&b.collection===a)e.schema.tags.push(Object.assign({},b,{default:!1})),u=b;else return b!=null&&b.collection?s(i,"BAD_COLLECTION_TYPE",`${b.tag} used for ${a} collection, but expects ${b.collection}`,!0):s(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),eo(n,e,t,s,o)}let l=eo(n,e,t,s,o,u),f=(h=(m=u.resolve)==null?void 0:m.call(u,l,b=>s(i,"TAG_RESOLVE_FAILED",b),e.options))!=null?h:l,d=J(f)?f:new P(f);return d.range=l.range,d.tag=o,u!=null&&u.format&&(d.format=u.format),d}function to(n,e,t){let r=e.offset,s=of(e,n.options.strict,t);if(!s)return{value:"",type:null,comment:"",range:[r,r,r]};let i=s.mode===">"?P.BLOCK_FOLDED:P.BLOCK_LITERAL,o=e.source?af(e.source):[],a=o.length;for(let g=o.length-1;g>=0;--g){let D=o[g][1];if(D===""||D==="\\r")a=g;else break}if(a===0){let g=s.chomp==="+"&&o.length>0?`\n`.repeat(Math.max(1,o.length-1)):"",D=r+s.length;return e.source&&(D+=e.source.length),{value:g,type:i,comment:s.comment,range:[r,D,D]}}let u=e.indent+s.indent,l=e.offset+s.length,f=0;for(let g=0;gu&&(u=D.length);else{D.length=a;--g)o[g][0].length>u&&(a=g+1);let d="",m="",h=!1;for(let g=0;gu||T[0]===" "?(m===" "?m=`\n`:!h&&m===`\n`&&(m=`\n\n`),d+=m+D.slice(u)+T,m=`\n`,h=!0):T===""?m===`\n`?d+=`\n`:m=`\n`:(d+=m+T,m=" ",h=!1)}switch(s.chomp){case"-":break;case"+":for(let g=a;gt(r+m,h,b);switch(s){case"scalar":a=P.PLAIN,u=uf(i,l);break;case"single-quoted-scalar":a=P.QUOTE_SINGLE,u=lf(i,l);break;case"double-quoted-scalar":a=P.QUOTE_DOUBLE,u=cf(i,l);break;default:return t(n,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${s}`),{value:"",type:null,comment:"",range:[r,r+i.length,r+i.length]}}let f=r+i.length,d=ut(o,f,e,t);return{value:u,type:a,comment:d.comment,range:[r,f,d.offset]}}function uf(n,e){let t="";switch(n[0]){case" ":t="a tab character";break;case",":t="flow indicator character ,";break;case"%":t="directive indicator character %";break;case"|":case">":{t=`block scalar indicator ${n[0]}`;break}case"@":case"`":{t=`reserved character ${n[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),wu(n)}function lf(n,e){return(n[n.length-1]!=="\'"||n.length===1)&&e(n.length,"MISSING_CHAR","Missing closing \'quote"),wu(n.slice(1,-1)).replace(/\'\'/g,"\'")}function wu(n){var u;let e,t;try{e=new RegExp(`(.*?)(?i?n.slice(i,r+1):s)}else t+=s}return(n[n.length-1]!==\'"\'||n.length===1)&&e(n.length,"MISSING_CHAR",\'Missing closing "quote\'),t}function ff(n,e){let t="",r=n[e+1];for(;(r===" "||r===" "||r===`\n`||r==="\\r")&&!(r==="\\r"&&n[e+2]!==`\n`);)r===`\n`&&(t+=`\n`),e+=1,r=n[e+1];return t||(t=" "),{fold:t,offset:e}}var df={0:"\\0",a:"\\x07",b:"\\b",e:"\\x1B",f:"\\f",n:`\n`,r:"\\r",t:" ",v:"\\v",N:"\\x85",_:"\\xA0",L:"\\u2028",P:"\\u2029"," ":" ",\'"\':\'"\',"/":"/","\\\\":"\\\\"," ":" "};function hf(n,e,t,r){let s=n.substr(e,t),o=s.length===t&&/^[0-9a-fA-F]+$/.test(s)?parseInt(s,16):NaN;if(isNaN(o)){let a=n.substr(e-2,t+2);return r(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}function ro(n,e,t,r){let{value:s,type:i,comment:o,range:a}=e.type==="block-scalar"?to(n,e,r):no(e,n.options.strict,r),u=t?n.directives.tagName(t.source,d=>r(t,"TAG_RESOLVE_FAILED",d)):null,l;n.options.stringKeys&&n.atKey?l=n.schema[Ie]:u?l=mf(n.schema,s,u,t,r):e.type==="scalar"?l=pf(n,s,e,r):l=n.schema[Ie];let f;try{let d=l.resolve(s,m=>r(t!=null?t:e,"TAG_RESOLVE_FAILED",m),n.options);f=K(d)?d:new P(d)}catch(d){let m=d instanceof Error?d.message:String(d);r(t!=null?t:e,"TAG_RESOLVE_FAILED",m),f=new P(s)}return f.range=a,f.source=s,i&&(f.type=i),u&&(f.tag=u),l.format&&(f.format=l.format),o&&(f.comment=o),f}function mf(n,e,t,r,s){var a;if(t==="!")return n[Ie];let i=[];for(let u of n.tags)if(!u.collection&&u.tag===t)if(u.default&&u.test)i.push(u);else return u;for(let u of i)if((a=u.test)!=null&&a.test(e))return u;let o=n.knownTags[t];return o&&!o.collection?(n.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(s(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),n[Ie])}function pf({atKey:n,directives:e,schema:t},r,s,i){var a;let o=t.tags.find(u=>{var l;return(u.default===!0||n&&u.default==="key")&&((l=u.test)==null?void 0:l.test(r))})||t[Ie];if(t.compat){let u=(a=t.compat.find(l=>{var f;return l.default&&((f=l.test)==null?void 0:f.test(r))}))!=null?a:t[Ie];if(o.tag!==u.tag){let l=e.tagString(o.tag),f=e.tagString(u.tag),d=`Value may be parsed as either ${l} or ${f}`;i(s,"TAG_RESOLVE_FAILED",d,!0)}}return o}function Tu(n,e,t){if(e){t===null&&(t=e.length);for(let r=t-1;r>=0;--r){let s=e[r];switch(s.type){case"space":case"comment":case"newline":n-=s.source.length;continue}for(s=e[++r];(s==null?void 0:s.type)==="space";)n+=s.source.length,s=e[++r];break}}return n}var Df={composeNode:so,composeEmptyNode:As};function so(n,e,t,r){let s=n.atKey,{spaceBefore:i,comment:o,anchor:a,tag:u}=t,l,f=!0;switch(e.type){case"alias":l=yf(n,e,r),(a||u)&&r(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":l=ro(n,e,u,r),a&&(l.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":l=Eu(Df,n,e,t,r),a&&(l.anchor=a.source.substring(1));break;default:{let d=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;r(e,"UNEXPECTED_TOKEN",d),l=As(n,e.offset,void 0,null,t,r),f=!1}}return a&&l.anchor===""&&r(a,"BAD_ALIAS","Anchor cannot be an empty string"),s&&n.options.stringKeys&&(!K(l)||typeof l.value!="string"||l.tag&&l.tag!=="tag:yaml.org,2002:str")&&r(u!=null?u:e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),i&&(l.spaceBefore=!0),o&&(e.type==="scalar"&&e.source===""?l.comment=o:l.commentBefore=o),n.options.keepSourceTokens&&f&&(l.srcToken=e),l}function As(n,e,t,r,{spaceBefore:s,comment:i,anchor:o,tag:a,end:u},l){let f={type:"scalar",offset:Tu(e,t,r),indent:-1,source:""},d=ro(n,f,a,l);return o&&(d.anchor=o.source.substring(1),d.anchor===""&&l(o,"BAD_ALIAS","Anchor cannot be an empty string")),s&&(d.spaceBefore=!0),i&&(d.comment=i,d.range[2]=u),d}function yf({options:n},{offset:e,source:t,end:r},s){let i=new Et(t.substring(1));i.source===""&&s(e,"BAD_ALIAS","Alias cannot be an empty string"),i.source.endsWith(":")&&s(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=e+t.length,a=ut(r,o,n.strict,s);return i.range=[e,o,a.offset],a.comment&&(i.comment=a.comment),i}function Su(n,e,{offset:t,start:r,value:s,end:i},o){let a=Object.assign({_directives:e},n),u=new Nt(void 0,a),l={atKey:!1,atRoot:!0,directives:u.directives,options:u.options,schema:u.schema},f=at(r,{indicator:"doc-start",next:s!=null?s:i==null?void 0:i[0],offset:t,onError:o,parentIndent:0,startOnNewline:!0});f.found&&(u.directives.docStart=!0,s&&(s.type==="block-map"||s.type==="block-seq")&&!f.hasNewline&&o(f.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),u.contents=s?so(l,s,f,o):As(l,f.end,r,null,f,o);let d=u.contents.range[2],m=ut(i,d,!1,o);return m.comment&&(u.comment=m.comment),u.range=[t,d,m.offset],u}function Or(n){if(typeof n=="number")return[n,n+1];if(Array.isArray(n))return n.length===2?n:[n[0],n[1]];let{offset:e,source:t}=n;return[e,e+(typeof t=="string"?t.length:1)]}function ku(n){var s;let e="",t=!1,r=!1;for(let i=0;i{let o=Or(t);i?this.warnings.push(new vr(o,r,s)):this.errors.push(new Qe(o,r,s))},this.directives=new it({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:r,afterEmptyLine:s}=ku(this.prelude);if(r){let i=e.contents;if(t)e.comment=e.comment?`${e.comment}\n${r}`:r;else if(s||e.directives.docStart||!i)e.commentBefore=r;else if(Z(i)&&!i.flow&&i.items.length>0){let o=i.items[0];H(o)&&(o=o.key);let a=o.commentBefore;o.commentBefore=a?`${r}\n${a}`:r}else{let o=i.commentBefore;i.commentBefore=o?`${r}\n${o}`:r}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:ku(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,r=-1){for(let s of e)yield*S(this.next(s));yield*S(this.end(t,r))}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(t,r,s)=>{let i=Or(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",r,s)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=Su(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,r=new Qe(Or(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(r):this.doc.errors.push(r);break}case"doc-end":{if(!this.doc){let r="Unexpected doc-end without preceding document";this.errors.push(new Qe(Or(e),"UNEXPECTED_TOKEN",r));break}this.doc.directives.docEnd=!0;let t=ut(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let r=this.doc.comment;this.doc.comment=r?`${r}\n${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new Qe(Or(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let r=Object.assign({_directives:this.directives},this.options),s=new Nt(void 0,r);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),s.range=[0,t,t],this.decorate(s,!1),yield s}}};var io=Symbol("break visit"),gf=Symbol("skip children"),Cu=Symbol("remove item");function Jt(n,e){"type"in n&&n.type==="document"&&(n={start:n.start,value:n.value}),vu(Object.freeze([]),n,e)}Jt.BREAK=io;Jt.SKIP=gf;Jt.REMOVE=Cu;Jt.itemAtPath=(n,e)=>{let t=n;for(let[r,s]of e){let i=t==null?void 0:t[r];if(i&&"items"in i)t=i.items[s];else return}return t};Jt.parentCollection=(n,e)=>{let t=Jt.itemAtPath(n,e.slice(0,-1)),r=e[e.length-1][0],s=t==null?void 0:t[r];if(s&&"items"in s)return s;throw new Error("Parent collection not found")};function vu(n,e,t){let r=t(e,n);if(typeof r=="symbol")return r;for(let s of["key","value"]){let i=e[s];if(i&&"items"in i){for(let o=0;o":return"block-scalar-header"}return null}function Xe(n){switch(n){case void 0:case" ":case`\n`:case"\\r":case" ":return!0;default:return!1}}var Ou=new Set("0123456789ABCDEFabcdef"),Ff=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*\'()"),_s=new Set(",[]{}"),Ef=new Set(` ,[]{}\n\\r `),lo=n=>!n||Ef.has(n),Lr=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){var s;if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let r=(s=this.next)!=null?s:"stream";for(;r&&(t||this.hasChars(1));)r=yield*S(this.parseNext(r))}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;t===" "||t===" ";)t=this.buffer[++e];return!t||t==="#"||t===`\n`?!0:t==="\\r"?this.buffer[e+1]===`\n`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let r=0;for(;t===" ";)t=this.buffer[++r+e];if(t==="\\r"){let s=this.buffer[r+e+1];if(s===`\n`||!s&&!this.atEnd)return e+r+1}return t===`\n`||r>=this.indentNext||!t&&!this.atEnd?e+r:-1}if(t==="-"||t==="."){let r=this.buffer.substr(e,3);if((r==="---"||r==="...")&&Xe(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&ethis.indentValue&&!Xe(this.charAt(1))&&(this.indentNext=this.indentValue),yield*S(this.parseBlockStart())}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&Xe(t)){let r=(yield*S(this.pushCount(1)))+(yield*S(this.pushSpaces(!0)));return this.indentNext=this.indentValue+1,this.indentValue+=r,yield*S(this.parseBlockStart())}return"doc"}*parseDocument(){yield*S(this.pushSpaces(!0));let e=this.getLine();if(e===null)return this.setNext("doc");let t=yield*S(this.pushIndicators());switch(e[t]){case"#":yield*S(this.pushCount(e.length-t));case void 0:return yield*S(this.pushNewline()),yield*S(this.parseLineStart());case"{":case"[":return yield*S(this.pushCount(1)),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*S(this.pushCount(1)),"doc";case"*":return yield*S(this.pushUntil(lo)),"doc";case\'"\':case"\'":return yield*S(this.parseQuotedScalar());case"|":case">":return t+=yield*S(this.parseBlockScalarHeader()),t+=yield*S(this.pushSpaces(!0)),yield*S(this.pushCount(e.length-t)),yield*S(this.pushNewline()),yield*S(this.parseBlockScalar());default:return yield*S(this.parsePlainScalar())}}*parseFlowCollection(){let e,t,r=-1;do e=yield*S(this.pushNewline()),e>0?(t=yield*S(this.pushSpaces(!1)),this.indentValue=r=t):t=0,t+=yield*S(this.pushSpaces(!0));while(e+t>0);let s=this.getLine();if(s===null)return this.setNext("flow");if((r!==-1&&r"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if(t!=="-")break}return yield*S(this.pushUntil(t=>Xe(t)||t==="#"))}*parseBlockScalar(){let e=this.pos-1,t=0,r;e:for(let i=this.pos;r=this.buffer[i];++i)switch(r){case" ":t+=1;break;case`\n`:e=i,t=0;break;case"\\r":{let o=this.buffer[i+1];if(!o&&!this.atEnd)return this.setNext("block-scalar");if(o===`\n`)break}default:break e}if(!r&&!this.atEnd)return this.setNext("block-scalar");if(t>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=t:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let i=this.continueScalar(e+1);if(i===-1)break;e=this.buffer.indexOf(`\n`,i)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let s=e+1;for(r=this.buffer[s];r===" ";)r=this.buffer[++s];if(r===" "){for(;r===" "||r===" "||r==="\\r"||r===`\n`;)r=this.buffer[++s];e=s-1}else if(!this.blockScalarKeep)do{let i=e-1,o=this.buffer[i];o==="\\r"&&(o=this.buffer[--i]);let a=i;for(;o===" ";)o=this.buffer[--i];if(o===`\n`&&i>=this.pos&&i+1+t>a)e=i;else break}while(!0);return yield Ms,yield*S(this.pushToIndex(e+1,!0)),yield*S(this.parseLineStart())}*parsePlainScalar(){let e=this.flowLevel>0,t=this.pos-1,r=this.pos-1,s;for(;s=this.buffer[++r];)if(s===":"){let i=this.buffer[r+1];if(Xe(i)||e&&_s.has(i))break;t=r}else if(Xe(s)){let i=this.buffer[r+1];if(s==="\\r"&&(i===`\n`?(r+=1,s=`\n`,i=this.buffer[r+1]):t=r),i==="#"||e&&_s.has(i))break;if(s===`\n`){let o=this.continueScalar(r+1);if(o===-1)break;r=Math.max(r,o-2)}}else{if(e&&_s.has(s))break;t=r}return!s&&!this.atEnd?this.setNext("plain-scalar"):(yield Ms,yield*S(this.pushToIndex(t+1,!0)),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let r=this.buffer.slice(this.pos,e);return r?(yield r,this.pos+=r.length,r.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*S(this.pushTag()))+(yield*S(this.pushSpaces(!0)))+(yield*S(this.pushIndicators()));case"&":return(yield*S(this.pushUntil(lo)))+(yield*S(this.pushSpaces(!0)))+(yield*S(this.pushIndicators()));case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(Xe(t)||e&&_s.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*S(this.pushCount(1)))+(yield*S(this.pushSpaces(!0)))+(yield*S(this.pushIndicators()))}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!Xe(t)&&t!==">";)t=this.buffer[++e];return yield*S(this.pushToIndex(t===">"?e+1:e,!1))}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(Ff.has(t))t=this.buffer[++e];else if(t==="%"&&Ou.has(this.buffer[e+1])&&Ou.has(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*S(this.pushToIndex(e,!1))}}*pushNewline(){let e=this.buffer[this.pos];return e===`\n`?yield*S(this.pushCount(1)):e==="\\r"&&this.charAt(1)===`\n`?yield*S(this.pushCount(2)):0}*pushSpaces(e){let t=this.pos-1,r;do r=this.buffer[++t];while(r===" "||e&&r===" ");let s=t-this.pos;return s>0&&(yield this.buffer.substr(this.pos,s),this.pos=t),s}*pushUntil(e){let t=this.pos,r=this.buffer[t];for(;!e(r);)r=this.buffer[++t];return yield*S(this.pushToIndex(t,!1))}};var Nr=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,r=this.lineStarts.length;for(;t>1;this.lineStarts[i]=0;)switch(n[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;((t=n[++e])==null?void 0:t.type)==="space";);return n.splice(e,n.length)}function Lu(n){if(n.start.type==="flow-seq-start")for(let e of n.items)e.sep&&!e.value&&!zt(e.start,"explicit-key-ind")&&!zt(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,Nu(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var Ar=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new Lr,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let r of this.lexer.lex(e,t))yield*S(this.next(r));t||(yield*S(this.end()))}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*S(this.step()),this.offset+=e.length;return}let t=xu(e);if(t)if(t==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*S(this.step()),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let r=`Not a YAML token: ${e}`;yield*S(this.pop({type:"error",offset:this.offset,message:r,source:e})),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*S(this.pop())}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&(!e||e.type!=="doc-end")){for(;this.stack.length>0;)yield*S(this.pop());this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*S(this.stream());switch(e.type){case"document":return yield*S(this.document(e));case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*S(this.scalar(e));case"block-scalar":return yield*S(this.blockScalar(e));case"block-map":return yield*S(this.blockMap(e));case"block-seq":return yield*S(this.blockSequence(e));case"flow-collection":return yield*S(this.flowCollection(e));case"doc-end":return yield*S(this.documentEnd(e))}yield*S(this.pop())}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e!=null?e:this.stack.pop();if(!t)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield t;else{let r=this.peek(1);switch(t.type==="block-scalar"?t.indent="indent"in r?r.indent:0:t.type==="flow-collection"&&r.type==="document"&&(t.indent=0),t.type==="flow-collection"&&Lu(t),r.type){case"document":r.value=t;break;case"block-scalar":r.props.push(t);break;case"block-map":{let s=r.items[r.items.length-1];if(s.value){r.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(s.sep)s.value=t;else{Object.assign(s,{key:t,sep:[]}),this.onKeyLine=!s.explicitKey;return}break}case"block-seq":{let s=r.items[r.items.length-1];s.value?r.items.push({start:[],value:t}):s.value=t;break}case"flow-collection":{let s=r.items[r.items.length-1];!s||s.value?r.items.push({start:[],key:t,sep:[]}):s.sep?s.value=t:Object.assign(s,{key:t,sep:[]});return}default:yield*S(this.pop()),yield*S(this.pop(t))}if((r.type==="document"||r.type==="block-map"||r.type==="block-seq")&&(t.type==="block-map"||t.type==="block-seq")){let s=t.items[t.items.length-1];s&&!s.sep&&!s.value&&s.start.length>0&&Iu(s.start)===-1&&(t.indent===0||s.start.every(i=>i.type!=="comment"||i.indent=e.indent){let s=!this.onKeyLine&&this.indent===e.indent,i=s&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind",o=[];if(i&&t.sep&&!t.value){let a=[];for(let u=0;ue.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(o=t.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":i||t.value?(o.push(this.sourceToken),e.items.push({start:o}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!t.explicitKey?(t.start.push(this.sourceToken),t.explicitKey=!0):i||t.value?(o.push(this.sourceToken),e.items.push({start:o,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(zt(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(Nu(t.key)&&!zt(t.sep,"newline")){let a=Nn(t.start),u=t.key,l=t.sep;l.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:u,sep:l}]})}else o.length>0?t.sep=t.sep.concat(o,this.sourceToken):t.sep.push(this.sourceToken);else if(zt(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let a=Nn(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||i?e.items.push({start:o,key:null,sep:[this.sourceToken]}):zt(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);i||t.value?(e.items.push({start:o,key:a,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(a):(Object.assign(t,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let a=this.startBlockValue(e);if(a){s&&a.type!=="block-seq"&&e.items.push({start:o}),this.stack.push(a);return}}}}yield*S(this.pop()),yield*S(this.step())}*blockSequence(e){var r;let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let s="end"in t.value?t.value.end:void 0,i=Array.isArray(s)?s[s.length-1]:void 0;(i==null?void 0:i.type)==="comment"?s==null||s.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let s=e.items[e.items.length-2],i=(r=s==null?void 0:s.value)==null?void 0:r.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||zt(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let s=this.startBlockValue(e);if(s){this.stack.push(s);return}}yield*S(this.pop()),yield*S(this.step())}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let r;do yield*S(this.pop()),r=this.peek(1);while(r&&r.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let s=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:s,sep:[]}):t.sep?this.stack.push(s):Object.assign(t,{key:s,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let r=this.startBlockValue(e);r?this.stack.push(r):(yield*S(this.pop()),yield*S(this.step()))}else{let r=this.peek(2);if(r.type==="block-map"&&(this.type==="map-value-ind"&&r.indent===e.indent||this.type==="newline"&&!r.items[r.items.length-1].sep))yield*S(this.pop()),yield*S(this.step());else if(this.type==="map-value-ind"&&r.type!=="flow-collection"){let s=Bs(r),i=Nn(s);Lu(e);let o=e.end.splice(1,e.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:i,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*S(this.lineEnd(e))}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`\n`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`\n`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=Bs(e),r=Nn(t);return r.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=Bs(e),r=Nn(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(r=>r.type==="newline"||r.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*S(this.pop())))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*S(this.pop()),yield*S(this.step());break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*S(this.pop()))}}};function wf(n){let e=n.prettyErrors!==!1;return{lineCounter:n.lineCounter||e&&new Nr||null,prettyErrors:e}}function Au(n,e={}){let{lineCounter:t,prettyErrors:r}=wf(e),s=new Ar(t==null?void 0:t.addNewLine),i=new Ir(e),o=null;for(let a of i.compose(s.parse(n),!0,n.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Qe(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return r&&t&&(o.errors.forEach(Zi(n,t)),o.warnings.forEach(Zi(n,t))),o}function co(n,e,t){let r;typeof e=="function"?r=e:t===void 0&&e&&typeof e=="object"&&(t=e);let s=Au(n,t);if(!s)return null;if(s.warnings.forEach(i=>ms(s.options.logLevel,i)),s.errors.length>0){if(s.options.logLevel!=="silent")throw s.errors[0];s.errors=[]}return s.toJS(Object.assign({reviver:r},t))}var js=Vr(Ru());var F=Vr(ns());var et;(N=>{N.DEFAULT_TO_STRING={nullRepresentation:"-",dateFormat:"MMMM dd, yyyy",dateTimeFormat:"h:mm a - MMMM dd, yyyy"};function e(y,w=N.DEFAULT_TO_STRING,v=!1){let x=t(y);if(!x)return w.nullRepresentation;switch(x.type){case"null":return w.nullRepresentation;case"string":return x.value;case"number":case"boolean":return""+x.value;case"link":return x.value.markdown();case"function":return"";case"array":let C="";return v&&(C+="["),C+=x.value.map(V=>e(V,w,!0)).join(", "),v&&(C+="]"),C;case"object":return"{ "+Object.entries(x.value).map(V=>V[0]+": "+e(V[1],w,!0)).join(", ")+" }";case"date":return ja(x.value,w.dateFormat,w.dateTimeFormat);case"duration":return qa(x.value)}}N.toString=e;function t(y){return h(y)?{type:"null",value:y}:f(y)?{type:"number",value:y}:l(y)?{type:"string",value:y}:g(y)?{type:"boolean",value:y}:m(y)?{type:"duration",value:y}:d(y)?{type:"date",value:y}:b(y)?{type:"array",value:y}:D(y)?{type:"link",value:y}:I(y)?{type:"function",value:y}:T(y)?{type:"object",value:y}:void 0}N.wrapValue=t;function r(y,w){if(T(y)){let v={};for(let[x,C]of Object.entries(y))v[x]=r(C,w);return v}else if(b(y)){let v=[];for(let x of y)v.push(r(x,w));return v}else return w(y)}N.mapLeaves=r;function s(y,w){return i(y,w)==0}N.equals=s;function i(y,w,v){var V,j;if(y===w||(y===void 0&&(y=null),w===void 0&&(w=null),y===null&&w===null))return 0;if(y===null)return-1;if(w===null)return 1;let x=t(y),C=t(w);if(x===void 0&&C===void 0)return 0;if(x===void 0)return-1;if(C===void 0)return 1;if(x.type!=C.type)return x.type.localeCompare(C.type);if(x.value===C.value)return 0;switch(x.type){case"string":return x.value.localeCompare(C.value);case"number":return x.valueAe,O=ae(Y.path).localeCompare(ae(ee.path));if(O!=0)return O;let $=Y.type.localeCompare(ee.type);return $!=0?$:Y.subpath&&!ee.subpath?1:!Y.subpath&&ee.subpath?-1:!Y.subpath&&!ee.subpath?0:((V=Y.subpath)!=null?V:"").localeCompare((j=ee.subpath)!=null?j:"");case"date":return x.value0;case"boolean":return w.value;case"link":return!!w.value.path;case"date":return w.value.toMillis()!=0;case"duration":return w.value.as("seconds")!=0;case"object":return Object.keys(w.value).length>0;case"array":return w.value.length>0;case"null":return!1;case"function":return!0}}N.isTruthy=a;function u(y){if(y==null)return y;if(N.isArray(y))return[].concat(y.map(w=>u(w)));if(N.isObject(y)){let w={};for(let[v,x]of Object.entries(y))w[v]=u(x);return w}else return y}N.deepCopy=u;function l(y){return typeof y=="string"}N.isString=l;function f(y){return typeof y=="number"}N.isNumber=f;function d(y){return y instanceof q}N.isDate=d;function m(y){return y instanceof B}N.isDuration=m;function h(y){return y==null}N.isNull=h;function b(y){return Array.isArray(y)}N.isArray=b;function g(y){return typeof y=="boolean"}N.isBoolean=g;function D(y){return y instanceof Oe}N.isLink=D;function T(y){return y!==void 0&&typeof y=="object"&&!b(y)&&!m(y)&&!d(y)&&!D(y)&&!h(y)}N.isObject=T;function I(y){return typeof y=="function"}N.isFunction=I})(et||(et={}));var ju;(i=>{function n(o){return et.isObject(o)&&Object.keys(o).length==2&&"key"in o&&"rows"in o}i.isElementGroup=n;function e(o){for(let a of o)if(!n(a))return!1;return!0}i.isGrouping=e;function t(o){for(let a of o)if(n(a))return!1;return!0}i.isLeaf=t;function r(o){if(n(o))return r(o.rows);if(e(o)){let a=0;for(let u of o)a+=r(u.rows);return a}else return o.length}i.count=r;function s(o,a,u){if(u<=a)return[];if(t(o))return o.slice(a,u);let l=0,f=0;for(;l=o.length)return[];let d=[];for(;l{function n(u){return new ho(u)}a.success=n;function e(u){return new mo(u)}a.failure=e;function t(u,l,f){return u.successful?l.successful?f(u.value,l.value):e(l.error):e(u.error)}a.flatMap2=t;function r(u,l,f){return t(u,l,(d,m)=>n(f(d,m)))}a.map2=r;function s(u,l){let f=[];for(let d of u){let m=l(d);if(!m.successful)return m.cast();f.push(m.value)}return a.success(f)}a.mapAll=s;function i(u){try{return a.success(u())}catch(l){return a.failure(l)}}a.trying=i;async function o(u){try{return a.success(await u)}catch(l){return a.failure(l)}}a.async=o})(Se||(Se={}));var Yt;(N=>{N.EVERYTHING={type:"everything"},N.NOTHING={type:"nothing"},N.EMPTY_SET=new Set;function r(y){return y.size==0?N.NOTHING:{type:"atom",value:y}}N.atom=r;function s(y){return y?N.EVERYTHING:N.NOTHING}N.constant=s;function i(y){return y!==void 0?r(y):N.NOTHING}N.nullableAtom=i;function o(y){return y.size==0?N.EVERYTHING:{type:"negated",value:y}}N.negated=o;function a(y){switch(y.type){case"everything":return N.NOTHING;case"nothing":return N.EVERYTHING;case"atom":return o(y.value);case"negated":return r(y.value)}}N.negate=a;function u(y){switch(y.type){case"everything":return!1;case"negated":return!1;case"atom":return y.value.size==0;case"nothing":return!0}}N.empty=u;function l(y,w){switch(y.type){case"everything":return w;case"nothing":return N.EMPTY_SET;case"atom":return y.value;case"negated":return I(w,y.value)}}N.resolve=l;function f(y){return d(y,w=>w)}N.intersect=f;function d(y,w){return m(y,v=>Se.success(w(v))).orElseThrow()}N.lazyIntersect=d;function m(y,w){let v=[],x=[];for(let C of y){let V=w(C);if(!V.successful)return V.cast();let j=V.value;if(j!==void 0){if(u(j))return Se.success(N.NOTHING);j.type!=="everything"&&(j.type=="atom"?v.push(j.value):j.type=="negated"&&x.push(j.value))}}return v.length==0&&x.length==0?Se.success(N.EVERYTHING):v.length>0&&x.length==0?Se.success(r(D(v))):v.length==0&&x.length>0?Se.success(o(T(x))):Se.success(N.atom(I(D(v),T(x))))}N.lazyFailableIntersection=m;function h(y){return b(y,w=>w)}N.union=h;function b(y,w){return g(y,v=>Se.success(w(v))).orElseThrow()}N.lazyUnion=b;function g(y,w){let v=[],x=[];for(let C of y){let V=w(C);if(!V.successful)return V.cast();let j=V.value;if(j!==void 0){if(j.type==="everything")return Se.success(N.EVERYTHING);u(j)||(j.type=="atom"?v.push(j.value):j.type=="negated"&&x.push(j.value))}}return v.length==0&&x.length==0?Se.success(N.NOTHING):v.length>0&&x.length==0?Se.success(N.atom(T(v))):v.length==0&&x.length>0?Se.success(N.negated(D(x))):Se.success(o(I(D(x),T(v))))}N.lazyFailableUnion=g;function D(y){if(y.length==0)return new Set;if(y.length==1)return y[0];let w=[].concat(y).sort((v,x)=>v.size-x.size);for(;w.length>1;){let v=new Set,x=w.pop();for(let C of w[0])x.has(C)&&v.add(C);w[0]=v}return w[0]}N.setIntersect=D;function T(y){if(y.length==0)return new Set;if(y.length==1)return y[0];let w=new Set;for(let v of y)for(let x of v)w.add(x);return w}N.setUnion=T;function I(y,w){if(y.size>w.size){let v=new Set(y);for(let x of w)v.delete(x);return v}else{let v=new Set;for(let x of y)w.has(x)||v.add(x);return v}}N.setIntersectNegation=I})(Yt||(Yt={}));var se;(g=>{g.ROW="$row";function e(D){return{type:"variable",name:D}}g.variable=e;function t(D){return{type:"literal",value:D}}g.literal=t;function r(D,T,I){return{type:"binaryop",left:D,op:T,right:I}}g.binaryOp=r;function s(D,T){return{type:"binaryop",left:D,right:T,op:"index"}}g.index=s;function i(D){let T=D.split("."),I=g.variable(T[0]);for(let N=1;N"||D==">="||D=="!="||D=="="}g.isCompareOp=d;function m(D,T=new Set([g.ROW])){switch(D.type){case"binaryop":return D.op==="index"&&D.left.type=="variable"&&D.left.name==g.ROW&&D.right.type=="literal"&&et.isString(D.right.value)?T.has(D.right.value)?new Set:new Set([D.right.value]):Yt.setUnion([m(D.left,T),m(D.right,T)]);case"function":return Yt.setUnion(D.arguments.map(N=>m(N,T)));case"lambda":let I=T!=null?T:new Set;for(let N of D.arguments)I.add(N);return m(D.value,I);case"list":return Yt.setUnion(D.values.map(N=>m(N,T)));case"negated":return m(D.child,T);case"object":return Yt.setUnion(Object.values(D.values).map(N=>m(N,T)));case"variable":return T&&T.has(D.name)?new Set:new Set([D.name]);case"literal":return new Set}}g.unboundVariables=m;function h(D){switch(D.type){case"binaryop":return D.op==="index"?`${h(D.left)}[${h(D.right)}]`:`${h(D.left)} ${D.op} ${h(D.right)}`;case"function":return`${h(D.func)}(${D.arguments.map(h).join(", ")})`;case"lambda":return`(${D.arguments.join(", ")}) => ${h(D.value)}`;case"list":return`[${D.values.map(h).join(", ")}]`;case"negated":return`!${h(D.child)}`;case"object":return`{${Object.entries(D.values).map(([I,N])=>`${I}: ${h(N)}`).join(", ")}}`;case"variable":return D.name;case"literal":let T=et.wrapValue(D.value);if(!T)return"null";switch(T.type){case"string":return`"${T.value}"`;default:return et.toString(T.value)}}}g.toString=h,g.NULL=g.literal(null)})(se||(se={}));var z=F.createLanguage({number:n=>F.regexp(/-?[0-9]+(\\.[0-9]+)?/).map(e=>Number.parseFloat(e)).desc("number"),string:n=>F.string(\'"\').then(F.alt(n.escapeCharacter,F.noneOf(\'"\\\\\')).atLeast(0).map(e=>e.join(""))).skip(F.string(\'"\')).desc("string"),escapeCharacter:n=>F.string("\\\\").then(F.any).map(e=>e===\'"\'?\'"\':e==="\\\\"?"\\\\":"\\\\"+e),bool:n=>F.regexp(/true|false|True|False/).map(e=>e.toLowerCase()=="true").desc("boolean"),tag:n=>F.seqMap(F.string("#"),F.alt(F.regexp(/[^\\u2000-\\u206F\\u2E00-\\u2E7F\'!"#$%&()*+,.:;<=>?@^`{|}~\\[\\]\\\\\\s]/).desc("text")).many(),(e,t)=>e+t.join("")).desc("tag"),identifier:n=>F.seqMap(F.alt(F.regexp(/[\\p{Letter}$]/u),F.regexp(qu).desc("text")),F.alt(F.regexp(/[0-9\\p{Letter}$_-]/u),F.regexp(qu).desc("text")).many(),(e,t)=>e+t.join("")).desc("variable"),link:n=>F.regexp(/\\[\\[([^\\[\\]]*?)\\]\\]/u,1).map(e=>Oe.parseInner(e)).desc("file link"),embedLink:n=>F.seqMap(F.string("!").atMost(1),n.link,(e,t)=>(e.length>0&&(t.embed=!0),t)).desc("file link"),binaryPlusMinus:n=>F.regexp(/\\+|-/).map(e=>e).desc("\'+\' or \'-\'"),binaryMulDiv:n=>F.regexp(/\\*|\\/|%/).map(e=>e).desc("\'*\' or \'/\' or \'%\'"),binaryCompareOp:n=>F.regexp(/>=|<=|!=|>|<|=/).map(e=>e).desc("\'>=\' or \'<=\' or \'!=\' or \'=\' or \'>\' or \'<\'"),binaryAndOp:n=>F.regexp(/and|&/i).map(e=>"&").desc("\'and\'"),binaryOrOp:n=>F.regexp(/or|\\|/i).map(e=>"|").desc("\'or\'"),rootDate:n=>F.seqMap(F.regexp(/\\d{4}/),F.string("-"),F.regexp(/\\d{2}/),(e,t,r)=>q.fromObject({year:Number.parseInt(e),month:Number.parseInt(r)})).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),dateShorthand:n=>F.alt(...Object.keys(Uu).sort((e,t)=>t.length-e.length).map(F.string)),date:n=>Of(n.rootDate,e=>F.seqMap(F.string("-"),F.regexp(/\\d{2}/),(t,r)=>e.set({day:Number.parseInt(r)})),e=>F.seqMap(F.string("T"),F.regexp(/\\d{2}/),(t,r)=>e.set({hour:Number.parseInt(r)})),e=>F.seqMap(F.string(":"),F.regexp(/\\d{2}/),(t,r)=>e.set({minute:Number.parseInt(r)})),e=>F.seqMap(F.string(":"),F.regexp(/\\d{2}/),(t,r)=>e.set({second:Number.parseInt(r)})),e=>F.alt(F.seqMap(F.string("."),F.regexp(/\\d{3}/),(t,r)=>e.set({millisecond:Number.parseInt(r)})),F.succeed(e)),e=>F.alt(F.seqMap(F.string("+").or(F.string("-")),F.regexp(/\\d{1,2}(:\\d{2})?/),(t,r)=>e.setZone("UTC"+t+r,{keepLocalTime:!0})),F.seqMap(F.string("Z"),()=>e.setZone("utc",{keepLocalTime:!0})),F.seqMap(F.string("["),F.regexp(/[0-9A-Za-z+-\\/]+/u),F.string("]"),(t,r,s)=>e.setZone(r,{keepLocalTime:!0})))).assert(e=>e.isValid,"valid date").desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),datePlus:n=>F.alt(n.dateShorthand.map(e=>Uu[e]()),n.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"),durationType:n=>F.alt(...Object.keys(Vu).sort((e,t)=>t.length-e.length).map(F.string)),duration:n=>F.seqMap(n.number,F.optWhitespace,n.durationType,(e,t,r)=>Vu[r].mapUnits(s=>s*e)).sepBy1(F.string(",").trim(F.optWhitespace).or(F.optWhitespace)).map(e=>e.reduce((t,r)=>t.plus(r))).desc("duration like 4hr2min"),rawNull:n=>F.string("null"),atomInlineField:n=>F.alt(n.date,n.duration.map(e=>Mi(e)),n.string,n.tag,n.embedLink,n.bool,n.number,n.rawNull),inlineFieldList:n=>n.atomInlineField.sepBy(F.string(",").trim(F.optWhitespace).lookahead(n.atomInlineField)),inlineField:n=>F.alt(F.seqMap(n.atomInlineField,F.string(",").trim(F.optWhitespace),n.inlineFieldList,(e,t,r)=>[e].concat(r)),n.atomInlineField)}),qu=new RegExp(Fn(),""),Vu={year:B.fromObject({years:1}),years:B.fromObject({years:1}),yr:B.fromObject({years:1}),yrs:B.fromObject({years:1}),month:B.fromObject({months:1}),months:B.fromObject({months:1}),mo:B.fromObject({months:1}),mos:B.fromObject({months:1}),week:B.fromObject({weeks:1}),weeks:B.fromObject({weeks:1}),wk:B.fromObject({weeks:1}),wks:B.fromObject({weeks:1}),w:B.fromObject({weeks:1}),day:B.fromObject({days:1}),days:B.fromObject({days:1}),d:B.fromObject({days:1}),hour:B.fromObject({hours:1}),hours:B.fromObject({hours:1}),hr:B.fromObject({hours:1}),hrs:B.fromObject({hours:1}),h:B.fromObject({hours:1}),minute:B.fromObject({minutes:1}),minutes:B.fromObject({minutes:1}),min:B.fromObject({minutes:1}),mins:B.fromObject({minutes:1}),m:B.fromObject({minutes:1}),second:B.fromObject({seconds:1}),seconds:B.fromObject({seconds:1}),sec:B.fromObject({seconds:1}),secs:B.fromObject({seconds:1}),s:B.fromObject({seconds:1})},Uu={now:()=>q.local(),today:()=>q.local().startOf("day"),yesterday:()=>q.local().startOf("day").minus(B.fromObject({days:1})),tomorrow:()=>q.local().startOf("day").plus(B.fromObject({days:1})),sow:()=>q.local().startOf("week"),"start-of-week":()=>q.local().startOf("week"),eow:()=>q.local().endOf("week"),"end-of-week":()=>q.local().endOf("week"),soy:()=>q.local().startOf("year"),"start-of-year":()=>q.local().startOf("year"),eoy:()=>q.local().endOf("year"),"end-of-year":()=>q.local().endOf("year"),som:()=>q.local().startOf("month"),"start-of-month":()=>q.local().startOf("month"),eom:()=>q.local().endOf("month"),"end-of-month":()=>q.local().endOf("month")},Ku=F.createLanguage({variable:n=>z.identifier.map(se.variable).desc("variable"),number:n=>z.number.map(se.literal).desc("number"),string:n=>z.string.map(se.literal).desc("string"),bool:n=>z.bool.map(se.literal).desc("boolean"),date:n=>St("date",z.datePlus).map(([e,t])=>se.literal(t)).desc("date"),duration:n=>St("dur",z.duration).map(([e,t])=>se.literal(t)).desc("duration"),null:n=>z.rawNull.map(e=>se.NULL),link:n=>z.link.map(se.literal),list:n=>n.expression.sepBy(F.string(",").trim(F.optWhitespace)).wrap(F.string("[").skip(F.optWhitespace),F.optWhitespace.then(F.string("]"))).map(e=>se.list(e)).desc("list"),object:n=>F.seqMap(z.identifier.or(z.string),F.string(":").trim(F.optWhitespace),n.expression,(e,t,r)=>({name:e,value:r})).sepBy(F.string(",").trim(F.optWhitespace)).wrap(F.string("{").skip(F.optWhitespace),F.optWhitespace.then(F.string("}"))).map(e=>{let t={};for(let r of e)t[r.name]=r.value;return se.object(t)}).desc("object (\'{ a: 1, b: 2 }\')"),atom:n=>F.alt(z.embedLink.map(e=>se.literal(e)),n.negated,n.link,n.list,n.object,n.lambda,n.parens,n.bool,n.number,n.string,n.date,n.duration,n.null,n.variable),index:n=>F.seqMap(n.atom,F.alt(n.dotPostfix,n.indexPostfix,n.functionPostfix).many(),(e,t)=>{let r=e;for(let s of t)switch(s.type){case"dot":r=se.index(r,se.literal(s.expr));break;case"index":r=se.index(r,s.expr);break;case"function":r=se.func(r,s.exprs);break}return r}),negated:n=>F.seqMap(F.string("!"),n.index,(e,t)=>se.negate(t)).desc("negated field"),parens:n=>n.expression.trim(F.optWhitespace).wrap(F.string("("),F.string(")")),lambda:n=>F.seqMap(z.identifier.sepBy(F.string(",").trim(F.optWhitespace)).wrap(F.string("(").trim(F.optWhitespace),F.string(")").trim(F.optWhitespace)),F.string("=>").trim(F.optWhitespace),n.expression,(e,t,r)=>({type:"lambda",arguments:e,value:r})),dotPostfix:n=>F.seqMap(F.string("."),z.identifier,(e,t)=>({type:"dot",expr:t})),indexPostfix:n=>F.seqMap(F.string("["),F.optWhitespace,n.expression,F.optWhitespace,F.string("]"),(e,t,r,s,i)=>({type:"index",expr:r})),functionPostfix:n=>F.seqMap(F.string("("),F.optWhitespace,n.expression.sepBy(F.string(",").trim(F.optWhitespace)),F.optWhitespace,F.string(")"),(e,t,r,s,i)=>({type:"function",exprs:r})),binaryMulDiv:n=>Mn(n.index,z.binaryMulDiv,se.binaryOp),binaryPlusMinus:n=>Mn(n.binaryMulDiv,z.binaryPlusMinus,se.binaryOp),binaryCompare:n=>Mn(n.binaryPlusMinus,z.binaryCompareOp,se.binaryOp),binaryBoolean:n=>Mn(n.binaryCompare,z.binaryAndOp.or(z.binaryOrOp),se.binaryOp),binaryOp:n=>n.binaryBoolean,expression:n=>n.binaryOp}),lb=F.createLanguage({queryTag:n=>z.tag.map(e=>({type:"tagged",value:e})),queryId:n=>St("id",z.string).map(([e,t])=>({type:"id",value:t})),queryType:n=>F.string("@").then(z.identifier).map(e=>({type:"typed",value:e})),queryPath:n=>St(F.regexp(/e?path/i).desc("[e]path"),z.string).map(([e,t])=>({type:"path",value:t,exact:e.toLowerCase()==="epath"})),queryParentOf:n=>St(F.regexp(/parentof|supertree/i).desc("parentof"),n.query).map(([e,t])=>({type:"parent-of",children:t,inclusive:e.toLowerCase()==="supertree"})),queryChildOf:n=>St(F.regexp(/childof|subtree/i).desc("childof"),n.query).map(([e,t])=>({type:"child-of",parents:t,inclusive:e.toLowerCase()==="subtree"})),querySimpleLinked:n=>z.link.map(e=>({type:"linked",source:{type:"link",value:e},direction:"incoming"})),queryLinked:n=>St(F.regexp(/linksto|linkedfrom|connected/i).desc("connected"),n.query).map(([e,t])=>({type:"linked",source:t,direction:e.toLowerCase()=="linksto"?"incoming":e.toLowerCase()=="linkedfrom"?"outgoing":"both"})),queryExists:n=>St(F.regexp(/exists/i).desc("exists"),z.identifier.or(z.string)).map(([e,t])=>({type:"field",value:t})),queryQuotedExpression:n=>St(F.regexp(/expr/i).desc("expr"),Ku.expression).map(([e,t])=>({type:"expression",expression:t})),queryRawExpression:n=>Ku.binaryCompare.map(e=>({type:"expression",expression:e})),queryParens:n=>n.query.trim(F.optWhitespace).wrap(F.string("("),F.string(")")),queryNegate:n=>F.string("!").skip(F.optWhitespace).then(n.queryAtom).map(e=>({type:"not",element:e})),queryAtom:n=>F.alt(n.queryParens,n.queryNegate,n.querySimpleLinked,n.queryTag,n.queryType,n.queryId,n.queryExists,n.queryChildOf,n.queryParentOf,n.queryLinked,n.queryPath,n.queryQuotedExpression,n.queryRawExpression),queryAnds:n=>Mn(n.queryAtom,z.binaryAndOp,(e,t,r)=>({type:"and",elements:[e,r]})),queryOrs:n=>Mn(n.queryAnds,z.binaryOrOp,(e,t,r)=>({type:"or",elements:[e,r]})),query:n=>n.queryOrs.trim(F.optWhitespace)});function Mn(n,e,t){return F.seqMap(n,F.seq(F.optWhitespace,e,F.optWhitespace,n).many(),(r,s)=>{if(s.length==0)return r;let i=t(r,s[0][1],s[0][3]);for(let o=1;o[r,s])}function Of(n,...e){return F.custom((t,r)=>(s,i)=>{let o=n._(s,i);if(!o.status)return o;for(let a of e){let u=a(o.value)._(s,o.index);if(!u.status)return o;o=u}return o})}var Zt=Vr(ns());function Gt(n,e){let t={};for(let[r,s]of Object.entries(n))t[r]=e(s);return t}var _n;(r=>{r.NOOP_NORMALIZER=s=>s;function e(s){let i=et.wrapValue(s);if(!i)return null;switch(i==null?void 0:i.type){case"array":return i.value.map(r.json);case"object":return Gt(i.value,r.json);case"date":return{$_type:"date",value:i.value.toISO({includeOffset:!0})};case"link":return{$_type:"link",value:i.value.toObject()};case"duration":return{$_type:"duration",value:i.value.toISO()};case"boolean":case"number":case"string":return i.value;case"function":case"null":return null}}r.json=e;function t(s,i=r.NOOP_NORMALIZER){if(s==null)return null;if(Array.isArray(s))return i(s.map(o=>r.value(o,i)));if(typeof s=="object"){if(!("$_type"in s))return Gt(s,a=>r.value(a,i));let o=s.$_type;switch(o){case"date":return i(q.fromISO(s.value,{setZone:!0}));case"duration":return i(B.fromISO(s.value));case"link":return i(Oe.fromObject(s.value));default:throw new Error(`Unrecognized serialized type \'${o}\'!`)}}return i(s)}r.value=t})(_n||(_n={}));function Wu(n){return Object.assign({},n,{value:_n.json(n.value)})}function $s(n,e){return Array.isArray(n)?n.map(t=>$s(t,e)):{key:n.key,raw:n.value,value:Nf(n.value),position:{line:e,start:n.start,startValue:n.startValue,end:n.end},wrapping:n.wrapping}}var Ps=Object.freeze({"[":"]","(":")"});function If(n,e,t,r){let s=0,i=!1;for(let o=e;o=0;){let o=Lf(n,i);if(!o){i=n.indexOf(s,i+1);continue}t.push(o),i=n.indexOf(s,o.end)}}e&&(t=t.concat(qf(n))),t.sort((s,i)=>s.start-i.start);let r=[];for(let s=0;sn.join("")),Mf=Zt.regexp(/[^0-9\\w\\p{Letter}]*/u).then(Af).skip(Zt.regexp(/[_\\*~`]*/u));function zu(n){let e=Hu(n,0);if(!e)return;let t=Mf.parse(e.key);if(t.status)return{key:t.value,value:n.substring(e.valueIndex).trim(),start:0,startValue:e.valueIndex,end:n.length}}var _f=/\\u{2795}\\s*(\\d{4}-\\d{2}-\\d{2})/u,Bf=/(?:\\u{1F4C5}|\\u{1F4C6}|\\u{1F5D3}\\u{FE0F}?)\\s*(\\d{4}-\\d{2}-\\d{2})/u,Pf=/\\u{2705}\\s*(\\d{4}-\\d{2}-\\d{2})/u,$f=/[\\u{23F3}\\u{231B}]\\s*(\\d{4}-\\d{2}-\\d{2})/u,Rf=/\\u{1F6EB}\\s*(\\d{4}-\\d{2}-\\d{2})/u,jf=[{regex:_f,key:"created"},{regex:Rf,key:"start"},{regex:$f,key:"scheduled"},{regex:Bf,key:"due"},{regex:Pf,key:"completion"}];function qf(n){let e=[];for(let{regex:t,key:r}of jf){let s=t.exec(n);s&&e.push({key:r,value:s[1],start:s.index,startValue:s.index+1,end:s.index+s[0].length,wrapping:"emoji-shorthand"})}return e}var Rs;(t=>{function n(r){let s=et.wrapValue(e);if(!s)return null;switch(s.type){case"string":case"boolean":case"null":case"number":return s.value;case"array":return s.value.map(n);case"date":return s.value.toISO();case"duration":return s.value.toHuman();case"function":return null;case"link":return s.value.markdown();case"object":return Gt(s.value,n)}}t.yaml=n;function e(r){if(r==null)return null;if(typeof r=="object")if(Array.isArray(r)){let s=[];for(let i of r)s.push(e(i));return s}else{if(r instanceof Date)return q.fromJSDate(r);{let s=r,i={};for(let o in s)i[o]=e(s[o]);return i}}else{if(typeof r=="number")return r;if(typeof r=="boolean")return r;if(typeof r=="string"){let s=z.date.parse(r);if(s.status)return s.value;let i=z.duration.parse(r);if(i.status)return i.value;let o=z.link.parse(r);return o.status?o.value:r}}return null}t.literal=e})(Rs||(Rs={}));var Vf=/```yaml:data/i,Uf=/^(?:```|~~~)(.*)$/im,Kf=/^[\\s>]*(\\d+\\.|\\d+\\)|\\*|-|\\+)\\s*(\\[.{0,1}\\])?\\s*(.*)$/mu;function Zu(n,e,t,r){let{lines:s,metadata:i,frontmatter:o,sections:a}=Fo(n,e,t);return new po(n,r,s.length,i,a,o).build()}function Fo(n,e,t){var b,g,D,T,I,N,y,w,v,x,C,V,j,Y,ee,ae;let r=t.frontmatter?Gu(t.frontmatter):void 0,s=e.split(/\\r\\n|\\r|\\n/),i=new $e,o=[],a=(b=t.headings)!=null?b:[];a.sort((O,$)=>O.position.start.line-$.position.start.line);let u=new js.default(void 0,(O,$)=>O-$);for(let O=0;O0&&!Yu(s,0,O.start)){let $=new _r(0,O.start,En(n),1,0);u.set(0,$)}}let l=new js.default(void 0,(O,$)=>O-$),f=1;for(let O of t.sections||[]){if(O.type==="heading")continue;let $=O.position.start.line,Q=O.position.end.line+1,ue=s[$];if(O.type==="list")l.set($,new Do($,Q,f++,O.id));else if(O.type=="code"&&Vf.test(ue)){let De=s.slice($+1,Q-1).join(`\n`).replace(/\\t/gm," "),Re=Gu(co(De));l.set($,new yo($,Q,f++,Re,O.id))}else if(O.type==="code"){let De=ue.match(Uf);if(!De)l.set($,new qs($,Q,f++,[],"indent",$,Q,O.id));else{let Re=De.length>1&&De[1]?De[1].split(","):[];l.set($,new qs($,Q,f++,Re,"fenced",$+1,Q-1,O.id))}}else l.set($,new go($,Q,f++,O.type,O.id))}for(let O of l.values())(D=ct(O.start,u))==null||D.block(O);let d=/^[\\t\\f\\v ]*[\\-+\\*]\\s(\\[.\\]\\s)?/,m=/^(>?\\s?)*(\\t|\\s)*/g,h=new js.default(void 0,(O,$)=>O-$);for(let O of t.listItems||[]){let Q=s[O.position.start.line].match(Kf),ue,De;Q&&(ue=Q[1],De=Q[3]);let Re=new bo(O.position.start.line,O.position.end.line+1,O.parent,ue,O.id,O.task,De);h.set(Re.start,Re)}for(let O of h.values())if(O.parentLine<0){let $=l.get(-O.parentLine);if(!$||$.type!=="list")continue;$.items.push(O)}else(T=h.get(O.parentLine))==null||T.elements.push(O);for(let O of(I=t.tags)!=null?I:[]){let $=O.tag.startsWith("#")?O.tag:"#"+O.tag,Q=O.position.start.line;i.tag($),(N=ct(Q,u))==null||N.metadata.tag($),(y=ct(Q,l))==null||y.metadata.tag($),(w=ct(Q,h))==null||w.metadata.tag($)}if(t.frontmatter)for(let O of Wf(t.frontmatter)){let $=O.startsWith("#")?O:"#"+O;i.tag($)}for(let O of(v=t.links)!=null?v:[]){let $=Oe.infer(O.link),Q=O.position.start.line;i.link($),(x=ct(Q,u))==null||x.metadata.link($),(C=ct(Q,l))==null||C.metadata.link($),(V=ct(Q,h))==null||V.metadata.link($)}for(let O of(j=t.frontmatterLinks)!=null?j:[])i.link(Oe.infer(O.link,!1,O.displayText));for(let O of Eo(s)){let $=O.position.line;i.inlineField(O),(Y=ct($,u))==null||Y.metadata.inlineField(O),(ee=ct($,l))==null||ee.metadata.inlineField(O),(ae=ct($,h))==null||ae.metadata.inlineField(O)}return o.push(...u.values()),{lines:s,frontmatter:r,metadata:i,sections:o}}function Yu(n,e,t){for(let r=e;r32768||!t.includes("::"))continue;let r=Ju(t);if(r.length>0)for(let s of r)yield $s(s,e);else{let s=zu(t);s&&(yield $s(s,e))}}}function Gu(n){let e={};for(let t of Object.keys(n)){let r=n[t];e[t.toLowerCase()]={key:t,value:_n.json(Rs.literal(r)),raw:r}}return e}function ct(n,e){var r;let t=(r=e.getPairOrNextLower(n))==null?void 0:r[1];if(t&&t.end>=n)return t}function Wf(n){return Object.keys(n).filter(t=>t.toLowerCase()=="tags"||t.toLowerCase()=="tag").map(t=>Qu(n[t],/[,\\s]+/)).reduce((t,r)=>t.concat(r),[]).map(t=>t.startsWith("#")?t:"#"+t)}function Qu(n,e){return n==null||n==null?[]:Array.isArray(n)?n.filter(t=>!!t).map(t=>Qu(t,e)).reduce((t,r)=>t.concat(r),[]):(""+n).split(e).filter(t=>!!t).map(t=>t.trim()).filter(t=>t.length>0)}var $e=class{constructor(){this.tags=new Set;this.links=[];this.inlineFields={}}tag(e){this.tags.add(e)}link(e){this.links.find(t=>t.equals(e))||this.links.push(e)}inlineField(e){let t=e.key.toLowerCase();Object.keys(this.inlineFields).some(r=>r.toLowerCase()==t)||(this.inlineFields[t]=e)}finishTags(){return Array.from(this.tags)}finishLinks(){return this.links.map(e=>e.toObject())}finishInlineFields(){return Gt(this.inlineFields,Wu)}},po=class{constructor(e,t,r,s,i,o){this.path=e;this.stats=t;this.length=r;this.metadata=s;this.sections=i;this.frontmatter=o}build(){return{$path:this.path,$ctime:this.stats.ctime,$mtime:this.stats.mtime,$size:this.stats.size,$extension:Va(this.path),$position:{start:0,end:this.length},$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$infields:this.metadata.finishInlineFields(),$sections:this.sections.map(e=>e.build()),$frontmatter:this.frontmatter}}},_r=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.title=r;this.level=s;this.ordinal=i;this.blocks=[];this.metadata=new $e}block(e){this.blocks.push(e)}build(){return{$title:this.title,$ordinal:this.ordinal,$level:this.level,$tags:this.metadata.finishTags(),$infields:this.metadata.finishInlineFields(),$links:this.metadata.finishLinks(),$position:{start:this.start,end:this.end},$blocks:this.blocks.map(e=>e.build())}}},Do=class{constructor(e,t,r,s){this.start=e;this.end=t;this.ordinal=r;this.blockId=s;this.type="list";this.metadata=new $e;this.items=[]}build(){return{$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$type:"list",$blockId:this.blockId,$elements:this.items.map(e=>e.build())}}},qs=class{constructor(e,t,r,s,i,o,a,u){this.start=e;this.end=t;this.ordinal=r;this.languages=s;this.style=i;this.contentStart=o;this.contentEnd=a;this.blockId=u;this.type="codeblock";this.metadata=new $e}build(){return{$type:"codeblock",$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId,$languages:this.languages,$style:this.style,$contentPosition:{start:this.contentStart,end:this.contentEnd}}}},yo=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.ordinal=r;this.data=s;this.blockId=i;this.type="datablock";this.metadata=new $e}build(){return{$type:"datablock",$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId,$data:this.data}}},go=class{constructor(e,t,r,s,i){this.start=e;this.end=t;this.ordinal=r;this.type=s;this.blockId=i;this.metadata=new $e}build(){return{$type:this.type,$ordinal:this.ordinal,$position:{start:this.start,end:this.end},$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$blockId:this.blockId}}},bo=class{constructor(e,t,r,s,i,o,a){this.start=e;this.end=t;this.parentLine=r;this.symbol=s;this.blockId=i;this.status=o;this.text=a;this.metadata=new $e;this.elements=[]}build(){return{$parentLine:this.parentLine,$position:{start:this.start,end:this.end},$blockId:this.blockId,$elements:this.elements.map(e=>e.build()),$type:this.status?"task":"list",$infields:this.metadata.finishInlineFields(),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$status:this.status,$symbol:this.symbol,$text:this.text}}};function Xu(n,e,t,r){var o;let s=new To(n,r),i=JSON.parse(e);for(let a of i.nodes)if(a.type!="group")if(a.type=="text"){let{frontmatter:u,metadata:l,lines:f,sections:d}=Fo(n,a.text,t.caches[a.id]),m=new Vs(n,a.id,a,u);d.forEach(h=>m.section(h)),s.card(m);for(let h in l.tags)s.metadata.tag(h);for(let h of(o=l.links)!=null?o:[])s.metadata.link(h);for(let h of Eo(f))s.metadata.inlineField(h)}else{let u=new Vs(n,a.id,a);s.card(u)}return s.build()}var wo=class{constructor(e,t,r){this.path=e;this.id=t;this.nodeJson=r;this.metadata=new $e}build(){return{$file:this.path,$id:this.id,$position:{x:this.nodeJson.x,y:this.nodeJson.y},$dimensions:{width:this.nodeJson.width,height:this.nodeJson.height},$color:this.nodeJson.color,$link:Oe.file(this.path).withBlock(this.id).toObject()}}},Vs=class extends wo{constructor(t,r,s,i){super(t,r,s);this.path=t;this.id=r;this.nodeJson=s;this.frontmatter=i;this.sections=[]}section(t){return this.sections.push(t),t}build(){switch(this.nodeJson.type){case"text":return ye(R({},super.build()),{$infields:this.metadata.finishInlineFields(),$frontmatter:this.frontmatter,$sections:this.sections.map(t=>t.build()),$tags:this.metadata.finishTags(),$links:this.metadata.finishLinks(),$type:"text-card",$color:this.nodeJson.color});case"file":return ye(R({},super.build()),{$linkedFile:this.nodeJson.file});case"link":return ye(R({},super.build()),{$url:this.nodeJson.url})}}},To=class{constructor(e,t){this.path=e;this.stats=t;this.cards=[];this.metadata=new $e}card(e){return this.cards.push(e),e}build(){return{$cards:this.cards.map(e=>e.build()),$ctime:this.stats.ctime,$mtime:this.stats.mtime,$infields:this.metadata.finishInlineFields(),$links:this.metadata.finishLinks(),$tags:this.metadata.finishTags(),$path:this.path,$size:this.stats.size}}};onmessage=async n=>{try{let e=n.data;if(e.type==="markdown"){let t=Zu(e.path,e.contents,e.metadata,e.stat);postMessage({type:"markdown",result:t})}else if(e.type==="canvas"){let t=Xu(e.path,e.contents,e.index,e.stat);postMessage({type:"canvas",result:t})}else postMessage({$error:"Unsupported import method."})}catch(e){console.error(`Datacore Indexer failed to index ${n.data.path}: ${e}`),postMessage({$error:e.message})}};\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vcGFyc2ltbW9uL2J1aWxkL3BhcnNpbW1vbi51bWQubWluLmpzIiwgIi4uLy4uL3NvcnRlZC1idHJlZS9iK3RyZWUuanMiLCAiLi4vLi4vbHV4b24vc3JjL2Vycm9ycy5qcyIsICIuLi8uLi9sdXhvbi9zcmMvaW1wbC9mb3JtYXRzLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL3V0aWwuanMiLCAiLi4vLi4vbHV4b24vc3JjL2ltcGwvZW5nbGlzaC5qcyIsICIuLi8uLi9sdXhvbi9zcmMvaW1wbC9mb3JtYXR0ZXIuanMiLCAiLi4vLi4vbHV4b24vc3JjL2ltcGwvaW52YWxpZC5qcyIsICIuLi8uLi9sdXhvbi9zcmMvem9uZS5qcyIsICIuLi8uLi9sdXhvbi9zcmMvem9uZXMvc3lzdGVtWm9uZS5qcyIsICIuLi8uLi9sdXhvbi9zcmMvem9uZXMvSUFOQVpvbmUuanMiLCAiLi4vLi4vbHV4b24vc3JjL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qcyIsICIuLi8uLi9sdXhvbi9zcmMvem9uZXMvaW52YWxpZFpvbmUuanMiLCAiLi4vLi4vbHV4b24vc3JjL2ltcGwvem9uZVV0aWwuanMiLCAiLi4vLi4vbHV4b24vc3JjL3NldHRpbmdzLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL2xvY2FsZS5qcyIsICIuLi8uLi9sdXhvbi9zcmMvaW1wbC9yZWdleFBhcnNlci5qcyIsICIuLi8uLi9sdXhvbi9zcmMvZHVyYXRpb24uanMiLCAiLi4vLi4vbHV4b24vc3JjL2ludGVydmFsLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbmZvLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL2RpZmYuanMiLCAiLi4vLi4vbHV4b24vc3JjL2ltcGwvZGlnaXRzLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL3Rva2VuUGFyc2VyLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9pbXBsL2NvbnZlcnNpb25zLmpzIiwgIi4uLy4uL2x1eG9uL3NyYy9kYXRldGltZS5qcyIsICIuLi8uLi8uLi9zcmMvdXRpbHMvbm9ybWFsaXplcnMudHMiLCAiLi4vLi4vZW1vamktcmVnZXgvaW5kZXgubWpzIiwgIi4uLy4uLy4uL3NyYy9leHByZXNzaW9uL2xpbmsudHMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvaWRlbnRpdHkuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvdmlzaXQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvZG9jL2RpcmVjdGl2ZXMuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvZG9jL2FuY2hvcnMuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvZG9jL2FwcGx5UmV2aXZlci5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9ub2Rlcy90b0pTLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L25vZGVzL05vZGUuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvQWxpYXMuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvU2NhbGFyLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2RvYy9jcmVhdGVOb2RlLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L25vZGVzL0NvbGxlY3Rpb24uanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc3RyaW5naWZ5L3N0cmluZ2lmeUNvbW1lbnQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc3RyaW5naWZ5L2ZvbGRGbG93TGluZXMuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc3RyaW5naWZ5L3N0cmluZ2lmeVN0cmluZy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zdHJpbmdpZnkvc3RyaW5naWZ5LmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3N0cmluZ2lmeS9zdHJpbmdpZnlQYWlyLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2xvZy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvbWVyZ2UuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvYWRkUGFpclRvSlNNYXAuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvbm9kZXMvUGFpci5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zdHJpbmdpZnkvc3RyaW5naWZ5Q29sbGVjdGlvbi5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9ub2Rlcy9ZQU1MTWFwLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS9jb21tb24vbWFwLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L25vZGVzL1lBTUxTZXEuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL2NvbW1vbi9zZXEuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL2NvbW1vbi9zdHJpbmcuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL2NvbW1vbi9udWxsLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS9jb3JlL2Jvb2wuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc3RyaW5naWZ5L3N0cmluZ2lmeU51bWJlci5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEvY29yZS9mbG9hdC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEvY29yZS9pbnQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL2NvcmUvc2NoZW1hLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS9qc29uL3NjaGVtYS5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvYmluYXJ5LmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS95YW1sLTEuMS9wYWlycy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvb21hcC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvYm9vbC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvZmxvYXQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL3lhbWwtMS4xL2ludC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEveWFtbC0xLjEvc2V0LmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3NjaGVtYS95YW1sLTEuMS90aW1lc3RhbXAuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3Qvc2NoZW1hL3lhbWwtMS4xL3NjaGVtYS5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEvdGFncy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9zY2hlbWEvU2NoZW1hLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3N0cmluZ2lmeS9zdHJpbmdpZnlEb2N1bWVudC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9kb2MvRG9jdW1lbnQuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvZXJyb3JzLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvcmVzb2x2ZS1wcm9wcy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL3V0aWwtY29udGFpbnMtbmV3bGluZS5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL3V0aWwtZmxvdy1pbmRlbnQtY2hlY2suanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvY29tcG9zZS91dGlsLW1hcC1pbmNsdWRlcy5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL3Jlc29sdmUtYmxvY2stbWFwLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvcmVzb2x2ZS1ibG9jay1zZXEuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvY29tcG9zZS9yZXNvbHZlLWVuZC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL3Jlc29sdmUtZmxvdy1jb2xsZWN0aW9uLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvY29tcG9zZS1jb2xsZWN0aW9uLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvcmVzb2x2ZS1ibG9jay1zY2FsYXIuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvY29tcG9zZS9yZXNvbHZlLWZsb3ctc2NhbGFyLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvY29tcG9zZS1zY2FsYXIuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvY29tcG9zZS91dGlsLWVtcHR5LXNjYWxhci1wb3NpdGlvbi5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL2NvbXBvc2Utbm9kZS5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9jb21wb3NlL2NvbXBvc2UtZG9jLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L2NvbXBvc2UvY29tcG9zZXIuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvcGFyc2UvY3N0LXZpc2l0LmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3BhcnNlL2NzdC5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9wYXJzZS9sZXhlci5qcyIsICIuLi8uLi95YW1sL2Jyb3dzZXIvZGlzdC9wYXJzZS9saW5lLWNvdW50ZXIuanMiLCAiLi4vLi4veWFtbC9icm93c2VyL2Rpc3QvcGFyc2UvcGFyc2VyLmpzIiwgIi4uLy4uL3lhbWwvYnJvd3Nlci9kaXN0L3B1YmxpYy1hcGkuanMiLCAiLi4vLi4vLi4vc3JjL2luZGV4L2ltcG9ydC9tYXJrZG93bi50cyIsICIuLi8uLi8uLi9zcmMvZXhwcmVzc2lvbi9wYXJzZXIudHMiLCAiLi4vLi4vLi4vc3JjL2V4cHJlc3Npb24vbGl0ZXJhbC50cyIsICIuLi8uLi8uLi9zcmMvYXBpL3Jlc3VsdC50cyIsICIuLi8uLi8uLi9zcmMvZXhwcmVzc2lvbi9maWx0ZXJzLnRzIiwgIi4uLy4uLy4uL3NyYy9leHByZXNzaW9uL2V4cHJlc3Npb24udHMiLCAiLi4vLi4vLi4vc3JjL2luZGV4L2ltcG9ydC9pbmxpbmUtZmllbGQudHMiLCAiLi4vLi4vLi4vc3JjL3V0aWxzL2RhdGEudHMiLCAiLi4vLi4vLi4vc3JjL2luZGV4L3R5cGVzL2pzb24vY29tbW9uLnRzIiwgIi4uLy4uLy4uL3NyYy9pbmRleC90eXBlcy95YW1sLnRzIiwgIi4uLy4uLy4uL3NyYy9pbmRleC9pbXBvcnQvY2FudmFzLnRzIiwgIi4uLy4uLy4uL3NyYy9pbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLndvcmtlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiIWZ1bmN0aW9uKG4sdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5QYXJzaW1tb249dCgpOm4uUGFyc2ltbW9uPXQoKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXt9O2Z1bmN0aW9uIHIoZSl7aWYodFtlXSlyZXR1cm4gdFtlXS5leHBvcnRzO3ZhciB1PXRbZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiBuW2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLHIpLHUubD0hMCx1LmV4cG9ydHN9cmV0dXJuIHIubT1uLHIuYz10LHIuZD1mdW5jdGlvbihuLHQsZSl7ci5vKG4sdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDplfSl9LHIucj1mdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sci5uPWZ1bmN0aW9uKG4pe3ZhciB0PW4mJm4uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIG59O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCl9LHIucD1cIlwiLHIoci5zPTApfShbZnVuY3Rpb24obix0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUobil7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpcmV0dXJuIG5ldyBlKG4pO3RoaXMuXz1ufXZhciB1PWUucHJvdG90eXBlO2Z1bmN0aW9uIG8obix0KXtmb3IodmFyIHI9MDtyPG47cisrKXQocil9ZnVuY3Rpb24gaShuLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7byh0Lmxlbmd0aCxmdW5jdGlvbihyKXtuKHRbcl0scix0KX0pfShmdW5jdGlvbihyLGUsdSl7dD1uKHQscixlLHUpfSxyKSx0fWZ1bmN0aW9uIGEobix0KXtyZXR1cm4gaShmdW5jdGlvbih0LHIsZSx1KXtyZXR1cm4gdC5jb25jYXQoW24ocixlLHUpXSl9LFtdLHQpfWZ1bmN0aW9uIGYobix0KXt2YXIgcj17djowLGJ1Zjp0fTtyZXR1cm4gbyhuLGZ1bmN0aW9uKCl7dmFyIG47cj17djpyLnY8PDF8KG49ci5idWYsblswXT4+NyksYnVmOmZ1bmN0aW9uKG4pe3ZhciB0PWkoZnVuY3Rpb24obix0LHIsZSl7cmV0dXJuIG4uY29uY2F0KHI9PT1lLmxlbmd0aC0xP0J1ZmZlci5mcm9tKFt0LDBdKS5yZWFkVUludDE2QkUoMCk6ZS5yZWFkVUludDE2QkUocikpfSxbXSxuKTtyZXR1cm4gQnVmZmVyLmZyb20oYShmdW5jdGlvbihuKXtyZXR1cm4objw8MSY2NTUzNSk+Pjh9LHQpKX0oci5idWYpfX0pLHJ9ZnVuY3Rpb24gYygpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXJ9ZnVuY3Rpb24gcygpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyIGdsb2JhbCBkb2VzIG5vdCBleGlzdDsgcGxlYXNlIHVzZSB3ZWJwYWNrIGlmIHlvdSBuZWVkIHRvIHBhcnNlIEJ1ZmZlcnMgaW4gdGhlIGJyb3dzZXIuXCIpfWZ1bmN0aW9uIGwobil7cygpO3ZhciB0PWkoZnVuY3Rpb24obix0KXtyZXR1cm4gbit0fSwwLG4pO2lmKHQlOCE9MCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYml0cyBbXCIrbi5qb2luKFwiLCBcIikrXCJdIGFkZCB1cCB0byBcIit0K1wiIHdoaWNoIGlzIG5vdCBhbiBldmVuIG51bWJlciBvZiBieXRlczsgdGhlIHRvdGFsIHNob3VsZCBiZSBkaXZpc2libGUgYnkgOFwiKTt2YXIgcix1PXQvOCxvPShyPWZ1bmN0aW9uKG4pe3JldHVybiBuPjQ4fSxpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG58fChyKHQpP3Q6bil9LG51bGwsbikpO2lmKG8pdGhyb3cgbmV3IEVycm9yKG8rXCIgYml0IHJhbmdlIHJlcXVlc3RlZCBleGNlZWRzIDQ4IGJpdCAoNiBieXRlKSBOdW1iZXIgbWF4LlwiKTtyZXR1cm4gbmV3IGUoZnVuY3Rpb24odCxyKXt2YXIgZT11K3I7cmV0dXJuIGU+dC5sZW5ndGg/eChyLHUudG9TdHJpbmcoKStcIiBieXRlc1wiKTpiKGUsaShmdW5jdGlvbihuLHQpe3ZhciByPWYodCxuLmJ1Zik7cmV0dXJue2NvbGw6bi5jb2xsLmNvbmNhdChyLnYpLGJ1ZjpyLmJ1Zn19LHtjb2xsOltdLGJ1Zjp0LnNsaWNlKHIsZSl9LG4pLmNvbGwpfSl9ZnVuY3Rpb24gaChuLHQpe3JldHVybiBuZXcgZShmdW5jdGlvbihyLGUpe3JldHVybiBzKCksZSt0PnIubGVuZ3RoP3goZSx0K1wiIGJ5dGVzIGZvciBcIituKTpiKGUrdCxyLnNsaWNlKGUsZSt0KSl9KX1mdW5jdGlvbiBwKG4sdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mKHI9dCl8fE1hdGguZmxvb3IocikhPT1yfHx0PDB8fHQ+Nil0aHJvdyBuZXcgRXJyb3IobitcIiByZXF1aXJlcyBpbnRlZ2VyIGxlbmd0aCBpbiByYW5nZSBbMCwgNl0uXCIpO3ZhciByfWZ1bmN0aW9uIGQobil7cmV0dXJuIHAoXCJ1aW50QkVcIixuKSxoKFwidWludEJFKFwiK24rXCIpXCIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50QkUoMCxuKX0pfWZ1bmN0aW9uIHYobil7cmV0dXJuIHAoXCJ1aW50TEVcIixuKSxoKFwidWludExFKFwiK24rXCIpXCIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50TEUoMCxuKX0pfWZ1bmN0aW9uIGcobil7cmV0dXJuIHAoXCJpbnRCRVwiLG4pLGgoXCJpbnRCRShcIituK1wiKVwiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50QkUoMCxuKX0pfWZ1bmN0aW9uIG0obil7cmV0dXJuIHAoXCJpbnRMRVwiLG4pLGgoXCJpbnRMRShcIituK1wiKVwiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50TEUoMCxuKX0pfWZ1bmN0aW9uIHkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBlfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09e30udG9TdHJpbmcuY2FsbChuKX1mdW5jdGlvbiB3KG4pe3JldHVybiBjKCkmJkJ1ZmZlci5pc0J1ZmZlcihuKX1mdW5jdGlvbiBiKG4sdCl7cmV0dXJue3N0YXR1czohMCxpbmRleDpuLHZhbHVlOnQsZnVydGhlc3Q6LTEsZXhwZWN0ZWQ6W119fWZ1bmN0aW9uIHgobix0KXtyZXR1cm4gRSh0KXx8KHQ9W3RdKSx7c3RhdHVzOiExLGluZGV4Oi0xLHZhbHVlOm51bGwsZnVydGhlc3Q6bixleHBlY3RlZDp0fX1mdW5jdGlvbiBCKG4sdCl7aWYoIXQpcmV0dXJuIG47aWYobi5mdXJ0aGVzdD50LmZ1cnRoZXN0KXJldHVybiBuO3ZhciByPW4uZnVydGhlc3Q9PT10LmZ1cnRoZXN0P2Z1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1lLl9zdXBwb3J0c1NldClyZXR1cm4gZS5fc3VwcG9ydHNTZXQ7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldDtyZXR1cm4gZS5fc3VwcG9ydHNTZXQ9bixufSgpJiZBcnJheS5mcm9tKXtmb3IodmFyIHI9bmV3IFNldChuKSx1PTA7dTx0Lmxlbmd0aDt1Kyspci5hZGQodFt1XSk7dmFyIG89QXJyYXkuZnJvbShyKTtyZXR1cm4gby5zb3J0KCksb31mb3IodmFyIGk9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWlbblthXV09ITA7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspaVt0W2ZdXT0hMDt2YXIgYz1bXTtmb3IodmFyIHMgaW4gaSkoe30pLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmYy5wdXNoKHMpO3JldHVybiBjLnNvcnQoKSxjfShuLmV4cGVjdGVkLHQuZXhwZWN0ZWQpOnQuZXhwZWN0ZWQ7cmV0dXJue3N0YXR1czpuLnN0YXR1cyxpbmRleDpuLmluZGV4LHZhbHVlOm4udmFsdWUsZnVydGhlc3Q6dC5mdXJ0aGVzdCxleHBlY3RlZDpyfX12YXIgaj17fTtmdW5jdGlvbiBTKG4sdCl7aWYodyhuKSlyZXR1cm57b2Zmc2V0OnQsbGluZTotMSxjb2x1bW46LTF9O24gaW4ganx8KGpbbl09e30pO2Zvcih2YXIgcj1qW25dLGU9MCx1PTAsbz0wLGk9dDtpPj0wOyl7aWYoaSBpbiByKXtlPXJbaV0ubGluZSwwPT09byYmKG89cltpXS5saW5lU3RhcnQpO2JyZWFrfShcIlxcblwiPT09bi5jaGFyQXQoaSl8fFwiXFxyXCI9PT1uLmNoYXJBdChpKSYmXCJcXG5cIiE9PW4uY2hhckF0KGkrMSkpJiYodSsrLDA9PT1vJiYobz1pKzEpKSxpLS19dmFyIGE9ZSt1LGY9dC1vO3JldHVybiByW3RdPXtsaW5lOmEsbGluZVN0YXJ0Om99LHtvZmZzZXQ6dCxsaW5lOmErMSxjb2x1bW46ZisxfX1mdW5jdGlvbiBfKG4pe2lmKCF5KG4pKXRocm93IG5ldyBFcnJvcihcIm5vdCBhIHBhcnNlcjogXCIrbil9ZnVuY3Rpb24gTChuLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuP24uY2hhckF0KHQpOm5bdF19ZnVuY3Rpb24gTyhuKXtpZihcIm51bWJlclwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBudW1iZXI6IFwiK24pfWZ1bmN0aW9uIGsobil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBmdW5jdGlvbjogXCIrbil9ZnVuY3Rpb24gUChuKXtpZihcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBzdHJpbmc6IFwiK24pfXZhciBxPTIsQT0zLEk9OCxGPTUqSSxNPTQqSSx6PVwiICBcIjtmdW5jdGlvbiBSKG4sdCl7cmV0dXJuIG5ldyBBcnJheSh0KzEpLmpvaW4obil9ZnVuY3Rpb24gVShuLHQscil7dmFyIGU9dC1uLmxlbmd0aDtyZXR1cm4gZTw9MD9uOlIocixlKStufWZ1bmN0aW9uIFcobix0LHIsZSl7cmV0dXJue2Zyb206bi10PjA/bi10OjAsdG86bityPmU/ZTpuK3J9fWZ1bmN0aW9uIEQobix0KXt2YXIgcixlLHUsbyxmLGM9dC5pbmRleCxzPWMub2Zmc2V0LGw9MTtpZihzPT09bi5sZW5ndGgpcmV0dXJuXCJHb3QgdGhlIGVuZCBvZiB0aGUgaW5wdXRcIjtpZih3KG4pKXt2YXIgaD1zLXMlSSxwPXMtaCxkPVcoaCxGLE0rSSxuLmxlbmd0aCksdj1hKGZ1bmN0aW9uKG4pe3JldHVybiBhKGZ1bmN0aW9uKG4pe3JldHVybiBVKG4udG9TdHJpbmcoMTYpLDIsXCIwXCIpfSxuKX0sZnVuY3Rpb24obix0KXt2YXIgcj1uLmxlbmd0aCxlPVtdLHU9MDtpZihyPD10KXJldHVybltuLnNsaWNlKCldO2Zvcih2YXIgbz0wO288cjtvKyspZVt1XXx8ZS5wdXNoKFtdKSxlW3VdLnB1c2gobltvXSksKG8rMSkldD09MCYmdSsrO3JldHVybiBlfShuLnNsaWNlKGQuZnJvbSxkLnRvKS50b0pTT04oKS5kYXRhLEkpKTtvPWZ1bmN0aW9uKG4pe3JldHVybiAwPT09bi5mcm9tJiYxPT09bi50bz97ZnJvbTpuLmZyb20sdG86bi50b306e2Zyb206bi5mcm9tL0ksdG86TWF0aC5mbG9vcihuLnRvL0kpfX0oZCksZT1oL0kscj0zKnAscD49NCYmKHIrPTEpLGw9Mix1PWEoZnVuY3Rpb24obil7cmV0dXJuIG4ubGVuZ3RoPD00P24uam9pbihcIiBcIik6bi5zbGljZSgwLDQpLmpvaW4oXCIgXCIpK1wiICBcIituLnNsaWNlKDQpLmpvaW4oXCIgXCIpfSx2KSwoZj0oOCooby50bz4wP28udG8tMTpvLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKGY9Mil9ZWxzZXt2YXIgZz1uLnNwbGl0KC9cXHJcXG58W1xcblxcclxcdTIwMjhcXHUyMDI5XS8pO3I9Yy5jb2x1bW4tMSxlPWMubGluZS0xLG89VyhlLHEsQSxnLmxlbmd0aCksdT1nLnNsaWNlKG8uZnJvbSxvLnRvKSxmPW8udG8udG9TdHJpbmcoKS5sZW5ndGh9dmFyIG09ZS1vLmZyb207cmV0dXJuIHcobikmJihmPSg4KihvLnRvPjA/by50by0xOm8udG8pKS50b1N0cmluZygxNikubGVuZ3RoKTwyJiYoZj0yKSxpKGZ1bmN0aW9uKHQsZSx1KXt2YXIgaSxhPXU9PT1tLGM9YT9cIj4gXCI6ejtyZXR1cm4gaT13KG4pP1UoKDgqKG8uZnJvbSt1KSkudG9TdHJpbmcoMTYpLGYsXCIwXCIpOlUoKG8uZnJvbSt1KzEpLnRvU3RyaW5nKCksZixcIiBcIiksW10uY29uY2F0KHQsW2MraStcIiB8IFwiK2VdLGE/W3orUihcIiBcIixmKStcIiB8IFwiK1UoXCJcIixyLFwiIFwiKStSKFwiXlwiLGwpXTpbXSl9LFtdLHUpLmpvaW4oXCJcXG5cIil9ZnVuY3Rpb24gTihuLHQpe3JldHVybltcIlxcblwiLFwiLS0gUEFSU0lORyBGQUlMRUQgXCIrUihcIi1cIiw1MCksXCJcXG5cXG5cIixEKG4sdCksXCJcXG5cXG5cIiwocj10LmV4cGVjdGVkLDE9PT1yLmxlbmd0aD9cIkV4cGVjdGVkOlxcblxcblwiK3JbMF06XCJFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXFxuXFxuXCIrci5qb2luKFwiLCBcIikpLFwiXFxuXCJdLmpvaW4oXCJcIik7dmFyIHJ9ZnVuY3Rpb24gRyhuKXtyZXR1cm4gdm9pZCAwIT09bi5mbGFncz9uLmZsYWdzOltuLmdsb2JhbD9cImdcIjpcIlwiLG4uaWdub3JlQ2FzZT9cImlcIjpcIlwiLG4ubXVsdGlsaW5lP1wibVwiOlwiXCIsbi51bmljb2RlP1widVwiOlwiXCIsbi5zdGlja3k/XCJ5XCI6XCJcIl0uam9pbihcIlwiKX1mdW5jdGlvbiBDKCl7Zm9yKHZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSx0PW4ubGVuZ3RoLHI9MDtyPHQ7cis9MSlfKG5bcl0pO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7Zm9yKHZhciB1LG89bmV3IEFycmF5KHQpLGk9MDtpPHQ7aSs9MSl7aWYoISh1PUIobltpXS5fKHIsZSksdSkpLnN0YXR1cylyZXR1cm4gdTtvW2ldPXUudmFsdWUsZT11LmluZGV4fXJldHVybiBCKGIoZSxvKSx1KX0pfWZ1bmN0aW9uIEooKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcInNlcU1hcCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnRcIik7dmFyIHQ9bi5wb3AoKTtyZXR1cm4gayh0KSxDLmFwcGx5KG51bGwsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KG51bGwsbil9KX1mdW5jdGlvbiBUKCl7dmFyIG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHQ9bi5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIFkoXCJ6ZXJvIGFsdGVybmF0ZXNcIik7Zm9yKHZhciByPTA7cjx0O3IrPTEpXyhuW3JdKTtyZXR1cm4gZShmdW5jdGlvbih0LHIpe2Zvcih2YXIgZSx1PTA7dTxuLmxlbmd0aDt1Kz0xKWlmKChlPUIoblt1XS5fKHQsciksZSkpLnN0YXR1cylyZXR1cm4gZTtyZXR1cm4gZX0pfWZ1bmN0aW9uIFYobix0KXtyZXR1cm4gSChuLHQpLm9yKFgoW10pKX1mdW5jdGlvbiBIKG4sdCl7cmV0dXJuIF8obiksXyh0KSxKKG4sdC50aGVuKG4pLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybltuXS5jb25jYXQodCl9KX1mdW5jdGlvbiBLKG4pe1Aobik7dmFyIHQ9XCInXCIrbitcIidcIjtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PWUrbi5sZW5ndGgsbz1yLnNsaWNlKGUsdSk7cmV0dXJuIG89PT1uP2IodSxvKTp4KGUsdCl9KX1mdW5jdGlvbiBRKG4sdCl7IWZ1bmN0aW9uKG4pe2lmKCEobiBpbnN0YW5jZW9mIFJlZ0V4cCkpdGhyb3cgbmV3IEVycm9yKFwibm90IGEgcmVnZXhwOiBcIituKTtmb3IodmFyIHQ9RyhuKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBlPXQuY2hhckF0KHIpO2lmKFwiaVwiIT09ZSYmXCJtXCIhPT1lJiZcInVcIiE9PWUmJlwic1wiIT09ZSl0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHJlZ2V4cCBmbGFnIFwiJytlKydcIjogJytuKX19KG4pLGFyZ3VtZW50cy5sZW5ndGg+PTI/Tyh0KTp0PTA7dmFyIHI9ZnVuY3Rpb24obil7cmV0dXJuIFJlZ0V4cChcIl4oPzpcIituLnNvdXJjZStcIilcIixHKG4pKX0obiksdT1cIlwiK247cmV0dXJuIGUoZnVuY3Rpb24obixlKXt2YXIgbz1yLmV4ZWMobi5zbGljZShlKSk7aWYobyl7aWYoMDw9dCYmdDw9by5sZW5ndGgpe3ZhciBpPW9bMF0sYT1vW3RdO3JldHVybiBiKGUraS5sZW5ndGgsYSl9cmV0dXJuIHgoZSxcInZhbGlkIG1hdGNoIGdyb3VwICgwIHRvIFwiK28ubGVuZ3RoK1wiKSBpbiBcIit1KX1yZXR1cm4geChlLHUpfSl9ZnVuY3Rpb24gWChuKXtyZXR1cm4gZShmdW5jdGlvbih0LHIpe3JldHVybiBiKHIsbil9KX1mdW5jdGlvbiBZKG4pe3JldHVybiBlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHgocixuKX0pfWZ1bmN0aW9uIFoobil7aWYoeShuKSlyZXR1cm4gZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpO3JldHVybiBlLmluZGV4PXIsZS52YWx1ZT1cIlwiLGV9KTtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gWihLKG4pKTtpZihuIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBaKFEobikpO3Rocm93IG5ldyBFcnJvcihcIm5vdCBhIHN0cmluZywgcmVnZXhwLCBvciBwYXJzZXI6IFwiK24pfWZ1bmN0aW9uICQobil7cmV0dXJuIF8obiksZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpLHU9dC5zbGljZShyLGUuaW5kZXgpO3JldHVybiBlLnN0YXR1cz94KHIsJ25vdCBcIicrdSsnXCInKTpiKHIsbnVsbCl9KX1mdW5jdGlvbiBubihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7dmFyIGU9TCh0LHIpO3JldHVybiByPHQubGVuZ3RoJiZuKGUpP2IocisxLGUpOngocixcImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgXCIrbil9KX1mdW5jdGlvbiB0bihuLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPXZvaWQgMCk7dmFyIHI9ZShmdW5jdGlvbihuLGUpe3JldHVybiByLl89dCgpLl8sci5fKG4sZSl9KTtyZXR1cm4gbj9yLmRlc2Mobik6cn1mdW5jdGlvbiBybigpe3JldHVybiBZKFwiZmFudGFzeS1sYW5kL2VtcHR5XCIpfXUucGFyc2U9ZnVuY3Rpb24obil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIG4mJiF3KG4pKXRocm93IG5ldyBFcnJvcihcIi5wYXJzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3RyaW5nIG9yIEJ1ZmZlciBhcyBpdHMgYXJndW1lbnRcIik7dmFyIHQscj10aGlzLnNraXAoYW4pLl8obiwwKTtyZXR1cm4gdD1yLnN0YXR1cz97c3RhdHVzOiEwLHZhbHVlOnIudmFsdWV9OntzdGF0dXM6ITEsaW5kZXg6UyhuLHIuZnVydGhlc3QpLGV4cGVjdGVkOnIuZXhwZWN0ZWR9LGRlbGV0ZSBqW25dLHR9LHUudHJ5UGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5wYXJzZShuKTtpZih0LnN0YXR1cylyZXR1cm4gdC52YWx1ZTt2YXIgcj1OKG4sdCksZT1uZXcgRXJyb3Iocik7dGhyb3cgZS50eXBlPVwiUGFyc2ltbW9uRXJyb3JcIixlLnJlc3VsdD10LGV9LHUuYXNzZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuY2hhaW4oZnVuY3Rpb24ocil7cmV0dXJuIG4ocik/WChyKTpZKHQpfSl9LHUub3I9ZnVuY3Rpb24obil7cmV0dXJuIFQodGhpcyxuKX0sdS50cmltPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLndyYXAobixuKX0sdS53cmFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEoobix0aGlzLHQsZnVuY3Rpb24obix0KXtyZXR1cm4gdH0pfSx1LnRocnU9ZnVuY3Rpb24obil7cmV0dXJuIG4odGhpcyl9LHUudGhlbj1mdW5jdGlvbihuKXtyZXR1cm4gXyhuKSxDKHRoaXMsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSl9LHUubWFueT1mdW5jdGlvbigpe3ZhciBuPXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9W10sdT12b2lkIDA7Oyl7aWYoISh1PUIobi5fKHQsciksdSkpLnN0YXR1cylyZXR1cm4gQihiKHIsZSksdSk7aWYocj09PXUuaW5kZXgpdGhyb3cgbmV3IEVycm9yKFwiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIGEgcGFyc2VyIHdoaWNoIGNhbiBhY2NlcHQgemVybyBjaGFyYWN0ZXJzIGlzIHVzdWFsbHkgdGhlIGNhdXNlXCIpO3I9dS5pbmRleCxlLnB1c2godS52YWx1ZSl9fSl9LHUudGllV2l0aD1mdW5jdGlvbihuKXtyZXR1cm4gUChuKSx0aGlzLm1hcChmdW5jdGlvbih0KXtpZihmdW5jdGlvbihuKXtpZighRShuKSl0aHJvdyBuZXcgRXJyb3IoXCJub3QgYW4gYXJyYXk6IFwiK24pfSh0KSx0Lmxlbmd0aCl7UCh0WzBdKTtmb3IodmFyIHI9dFswXSxlPTE7ZTx0Lmxlbmd0aDtlKyspUCh0W2VdKSxyKz1uK3RbZV07cmV0dXJuIHJ9cmV0dXJuXCJcIn0pfSx1LnRpZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpZVdpdGgoXCJcIil9LHUudGltZXM9ZnVuY3Rpb24obix0KXt2YXIgcj10aGlzO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PW4pLE8obiksTyh0KSxlKGZ1bmN0aW9uKGUsdSl7Zm9yKHZhciBvPVtdLGk9dm9pZCAwLGE9dm9pZCAwLGY9MDtmPG47Zis9MSl7aWYoYT1CKGk9ci5fKGUsdSksYSksIWkuc3RhdHVzKXJldHVybiBhO3U9aS5pbmRleCxvLnB1c2goaS52YWx1ZSl9Zm9yKDtmPHQmJihhPUIoaT1yLl8oZSx1KSxhKSxpLnN0YXR1cyk7Zis9MSl1PWkuaW5kZXgsby5wdXNoKGkudmFsdWUpO3JldHVybiBCKGIodSxvKSxhKX0pfSx1LnJlc3VsdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSx1LmF0TW9zdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50aW1lcygwLG4pfSx1LmF0TGVhc3Q9ZnVuY3Rpb24obil7cmV0dXJuIEoodGhpcy50aW1lcyhuKSx0aGlzLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybiBuLmNvbmNhdCh0KX0pfSx1Lm1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10Ll8ocixlKTtyZXR1cm4gdS5zdGF0dXM/QihiKHUuaW5kZXgsbih1LnZhbHVlKSksdSk6dX0pfSx1LmNvbnRyYW1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10LnBhcnNlKG4oci5zbGljZShlKSkpO3JldHVybiB1LnN0YXR1cz9iKGUrci5sZW5ndGgsdS52YWx1ZSk6dX0pfSx1LnByb21hcD1mdW5jdGlvbihuLHQpe3JldHVybiBrKG4pLGsodCksdGhpcy5jb250cmFtYXAobikubWFwKHQpfSx1LnNraXA9ZnVuY3Rpb24obil7cmV0dXJuIEModGhpcyxuKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG5bMF19KX0sdS5tYXJrPWZ1bmN0aW9uKCl7cmV0dXJuIEooZW4sdGhpcyxlbixmdW5jdGlvbihuLHQscil7cmV0dXJue3N0YXJ0Om4sdmFsdWU6dCxlbmQ6cn19KX0sdS5ub2RlPWZ1bmN0aW9uKG4pe3JldHVybiBKKGVuLHRoaXMsZW4sZnVuY3Rpb24odCxyLGUpe3JldHVybntuYW1lOm4sdmFsdWU6cixzdGFydDp0LGVuZDplfX0pfSx1LnNlcEJ5PWZ1bmN0aW9uKG4pe3JldHVybiBWKHRoaXMsbil9LHUuc2VwQnkxPWZ1bmN0aW9uKG4pe3JldHVybiBIKHRoaXMsbil9LHUubG9va2FoZWFkPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNraXAoWihuKSl9LHUubm90Rm9sbG93ZWRCeT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5za2lwKCQobikpfSx1LmRlc2M9ZnVuY3Rpb24obil7RShuKXx8KG49W25dKTt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzfHwodS5leHBlY3RlZD1uKSx1fSl9LHUuZmFsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMub3IoWChuKSl9LHUuYXA9ZnVuY3Rpb24obil7cmV0dXJuIEoobix0aGlzLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9KX0sdS5jaGFpbj1mdW5jdGlvbihuKXt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzP0Iobih1LnZhbHVlKS5fKHIsdS5pbmRleCksdSk6dX0pfSx1LmNvbmNhdD11Lm9yLHUuZW1wdHk9cm4sdS5vZj1YLHVbXCJmYW50YXN5LWxhbmQvYXBcIl09dS5hcCx1W1wiZmFudGFzeS1sYW5kL2NoYWluXCJdPXUuY2hhaW4sdVtcImZhbnRhc3ktbGFuZC9jb25jYXRcIl09dS5jb25jYXQsdVtcImZhbnRhc3ktbGFuZC9lbXB0eVwiXT11LmVtcHR5LHVbXCJmYW50YXN5LWxhbmQvb2ZcIl09dS5vZix1W1wiZmFudGFzeS1sYW5kL21hcFwiXT11Lm1hcDt2YXIgZW49ZShmdW5jdGlvbihuLHQpe3JldHVybiBiKHQsUyhuLHQpKX0pLHVuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gdD49bi5sZW5ndGg/eCh0LFwiYW55IGNoYXJhY3Rlci9ieXRlXCIpOmIodCsxLEwobix0KSl9KSxvbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGIobi5sZW5ndGgsbi5zbGljZSh0KSl9KSxhbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ8bi5sZW5ndGg/eCh0LFwiRU9GXCIpOmIodCxudWxsKX0pLGZuPVEoL1swLTldLykuZGVzYyhcImEgZGlnaXRcIiksY249USgvWzAtOV0qLykuZGVzYyhcIm9wdGlvbmFsIGRpZ2l0c1wiKSxzbj1RKC9bYS16XS9pKS5kZXNjKFwiYSBsZXR0ZXJcIiksbG49USgvW2Etel0qL2kpLmRlc2MoXCJvcHRpb25hbCBsZXR0ZXJzXCIpLGhuPVEoL1xccyovKS5kZXNjKFwib3B0aW9uYWwgd2hpdGVzcGFjZVwiKSxwbj1RKC9cXHMrLykuZGVzYyhcIndoaXRlc3BhY2VcIiksZG49SyhcIlxcclwiKSx2bj1LKFwiXFxuXCIpLGduPUsoXCJcXHJcXG5cIiksbW49VChnbix2bixkbikuZGVzYyhcIm5ld2xpbmVcIikseW49VChtbixhbik7ZS5hbGw9b24sZS5hbHQ9VCxlLmFueT11bixlLmNyPWRuLGUuY3JlYXRlTGFuZ3VhZ2U9ZnVuY3Rpb24obil7dmFyIHQ9e307Zm9yKHZhciByIGluIG4pKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJmZ1bmN0aW9uKHIpe3Rbcl09dG4oZnVuY3Rpb24oKXtyZXR1cm4gbltyXSh0KX0pfShyKTtyZXR1cm4gdH0sZS5jcmxmPWduLGUuY3VzdG9tPWZ1bmN0aW9uKG4pe3JldHVybiBlKG4oYix4KSl9LGUuZGlnaXQ9Zm4sZS5kaWdpdHM9Y24sZS5lbXB0eT1ybixlLmVuZD15bixlLmVvZj1hbixlLmZhaWw9WSxlLmZvcm1hdEVycm9yPU4sZS5pbmRleD1lbixlLmlzUGFyc2VyPXksZS5sYXp5PXRuLGUubGV0dGVyPXNuLGUubGV0dGVycz1sbixlLmxmPXZuLGUubG9va2FoZWFkPVosZS5tYWtlRmFpbHVyZT14LGUubWFrZVN1Y2Nlc3M9YixlLm5ld2xpbmU9bW4sZS5ub25lT2Y9ZnVuY3Rpb24obil7cmV0dXJuIG5uKGZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk8MH0pLmRlc2MoXCJub25lIG9mICdcIituK1wiJ1wiKX0sZS5ub3RGb2xsb3dlZEJ5PSQsZS5vZj1YLGUub25lT2Y9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4uc3BsaXQoXCJcIikscj0wO3I8dC5sZW5ndGg7cisrKXRbcl09XCInXCIrdFtyXStcIidcIjtyZXR1cm4gbm4oZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT49MH0pLmRlc2ModCl9LGUub3B0V2hpdGVzcGFjZT1obixlLlBhcnNlcj1lLGUucmFuZ2U9ZnVuY3Rpb24obix0KXtyZXR1cm4gbm4oZnVuY3Rpb24ocil7cmV0dXJuIG48PXImJnI8PXR9KS5kZXNjKG4rXCItXCIrdCl9LGUucmVnZXg9USxlLnJlZ2V4cD1RLGUuc2VwQnk9VixlLnNlcEJ5MT1ILGUuc2VxPUMsZS5zZXFNYXA9SixlLnNlcU9iaj1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXt9LHI9MCx1PShuPWFyZ3VtZW50cyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKSksbz11Lmxlbmd0aCxpPTA7aTxvO2krPTEpe3ZhciBhPXVbaV07aWYoIXkoYSkpe2lmKEUoYSkmJjI9PT1hLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGFbMF0mJnkoYVsxXSkpe3ZhciBmPWFbMF07aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZikpdGhyb3cgbmV3IEVycm9yKFwic2VxT2JqOiBkdXBsaWNhdGUga2V5IFwiK2YpO3RbZl09ITAscisrO2NvbnRpbnVlfXRocm93IG5ldyBFcnJvcihcInNlcU9iaiBhcmd1bWVudHMgbXVzdCBiZSBwYXJzZXJzIG9yIFtzdHJpbmcsIHBhcnNlcl0gYXJyYXkgcGFpcnMuXCIpfX1pZigwPT09cil0aHJvdyBuZXcgRXJyb3IoXCJzZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFyc2VyLCBmb3VuZCB6ZXJvXCIpO3JldHVybiBlKGZ1bmN0aW9uKG4sdCl7Zm9yKHZhciByLGU9e30saT0wO2k8bztpKz0xKXt2YXIgYSxmO2lmKEUodVtpXSk/KGE9dVtpXVswXSxmPXVbaV1bMV0pOihhPW51bGwsZj11W2ldKSwhKHI9QihmLl8obix0KSxyKSkuc3RhdHVzKXJldHVybiByO2EmJihlW2FdPXIudmFsdWUpLHQ9ci5pbmRleH1yZXR1cm4gQihiKHQsZSkscil9KX0sZS5zdHJpbmc9SyxlLnN1Y2NlZWQ9WCxlLnRha2VXaGlsZT1mdW5jdGlvbihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPXI7ZTx0Lmxlbmd0aCYmbihMKHQsZSkpOyllKys7cmV0dXJuIGIoZSx0LnNsaWNlKHIsZSkpfSl9LGUudGVzdD1ubixlLndoaXRlc3BhY2U9cG4sZVtcImZhbnRhc3ktbGFuZC9lbXB0eVwiXT1ybixlW1wiZmFudGFzeS1sYW5kL29mXCJdPVgsZS5CaW5hcnk9e2JpdFNlcTpsLGJpdFNlcU9iajpmdW5jdGlvbihuKXtzKCk7dmFyIHQ9e30scj0wLGU9YShmdW5jdGlvbihuKXtpZihFKG4pKXt2YXIgZT1uO2lmKDIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJbXCIrZS5qb2luKFwiLCBcIikrXCJdIHNob3VsZCBiZSBsZW5ndGggMiwgZ290IGxlbmd0aCBcIitlLmxlbmd0aCk7aWYoUChlWzBdKSxPKGVbMV0pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGVbMF0pKXRocm93IG5ldyBFcnJvcihcImR1cGxpY2F0ZSBrZXkgaW4gYml0U2VxT2JqOiBcIitlWzBdKTtyZXR1cm4gdFtlWzBdXT0hMCxyKyssZX1yZXR1cm4gTyhuKSxbbnVsbCxuXX0sbik7aWYocjwxKXRocm93IG5ldyBFcnJvcihcImJpdFNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYWlyLCBnb3QgW1wiK24uam9pbihcIiwgXCIpK1wiXVwiKTt2YXIgdT1hKGZ1bmN0aW9uKG4pe3JldHVybiBuWzBdfSxlKTtyZXR1cm4gbChhKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSxlKSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGwhPT10WzBdJiYoblt0WzBdXT10WzFdKSxufSx7fSxhKGZ1bmN0aW9uKHQscil7cmV0dXJuW3QsbltyXV19LHUpKX0pfSxieXRlOmZ1bmN0aW9uKG4pe2lmKHMoKSxPKG4pLG4+MjU1KXRocm93IG5ldyBFcnJvcihcIlZhbHVlIHNwZWNpZmllZCB0byBieXRlIGNvbnN0cnVjdG9yIChcIituK1wiPTB4XCIrbi50b1N0cmluZygxNikrXCIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuXCIpO3ZhciB0PShuPjE1P1wiMHhcIjpcIjB4MFwiKStuLnRvU3RyaW5nKDE2KTtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PUwocixlKTtyZXR1cm4gdT09PW4/YihlKzEsdSk6eChlLHQpfSl9LGJ1ZmZlcjpmdW5jdGlvbihuKXtyZXR1cm4gaChcImJ1ZmZlclwiLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gQnVmZmVyLmZyb20obil9KX0sZW5jb2RlZFN0cmluZzpmdW5jdGlvbihuLHQpe3JldHVybiBoKFwic3RyaW5nXCIsdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKG4pfSl9LHVpbnRCRTpkLHVpbnQ4QkU6ZCgxKSx1aW50MTZCRTpkKDIpLHVpbnQzMkJFOmQoNCksdWludExFOnYsdWludDhMRTp2KDEpLHVpbnQxNkxFOnYoMiksdWludDMyTEU6dig0KSxpbnRCRTpnLGludDhCRTpnKDEpLGludDE2QkU6ZygyKSxpbnQzMkJFOmcoNCksaW50TEU6bSxpbnQ4TEU6bSgxKSxpbnQxNkxFOm0oMiksaW50MzJMRTptKDQpLGZsb2F0QkU6aChcImZsb2F0QkVcIiw0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZEZsb2F0QkUoMCl9KSxmbG9hdExFOmgoXCJmbG9hdExFXCIsNCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWRGbG9hdExFKDApfSksZG91YmxlQkU6aChcImRvdWJsZUJFXCIsOCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWREb3VibGVCRSgwKX0pLGRvdWJsZUxFOmgoXCJkb3VibGVMRVwiLDgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWFkRG91YmxlTEUoMCl9KX0sbi5leHBvcnRzPWV9XSl9KTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmV4cG9ydHMuRW1wdHlCVHJlZSA9IGV4cG9ydHMuYXNTZXQgPSBleHBvcnRzLnNpbXBsZUNvbXBhcmF0b3IgPSBleHBvcnRzLmRlZmF1bHRDb21wYXJhdG9yID0gdm9pZCAwO1xyXG4vKipcclxuICogQ29tcGFyZXMgRGVmYXVsdENvbXBhcmFibGVzIHRvIGZvcm0gYSBzdHJpY3QgcGFydGlhbCBvcmRlcmluZy5cclxuICpcclxuICogSGFuZGxlcyArLy0wIGFuZCBOYU4gbGlrZSBNYXA6IE5hTiBpcyBlcXVhbCB0byBOYU4sIGFuZCAtMCBpcyBlcXVhbCB0byArMC5cclxuICpcclxuICogQXJyYXlzIGFyZSBjb21wYXJlZCB1c2luZyAnPCcgYW5kICc+Jywgd2hpY2ggbWF5IGNhdXNlIHVuZXhwZWN0ZWQgZXF1YWxpdHk6XHJcbiAqIGZvciBleGFtcGxlIFsxXSB3aWxsIGJlIGNvbnNpZGVyZWQgZXF1YWwgdG8gWycxJ10uXHJcbiAqXHJcbiAqIFR3byBvYmplY3RzIHdpdGggZXF1YWwgdmFsdWVPZiBjb21wYXJlIHRoZSBzYW1lLCBidXQgY29tcGFyZSB1bmVxdWFsIHRvXHJcbiAqIHByaW1pdGl2ZXMgdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmF0b3IoYSwgYikge1xyXG4gICAgLy8gU3BlY2lhbCBjYXNlIGZpbml0ZSBudW1iZXJzIGZpcnN0IGZvciBwZXJmb3JtYW5jZS5cclxuICAgIC8vIE5vdGUgdGhhdCB0aGUgdHJpY2sgb2YgdXNpbmcgJ2EgLSBiJyBhbmQgY2hlY2tpbmcgZm9yIE5hTiB0byBkZXRlY3Qgbm9uLW51bWJlcnNcclxuICAgIC8vIGRvZXMgbm90IHdvcmsgaWYgdGhlIHN0cmluZ3MgYXJlIG51bWVyaWMgKGV4OiBcIjVcIikuIFRoaXMgd291bGQgbGVhZGluZyBtb3N0IFxyXG4gICAgLy8gY29tcGFyaXNvbiBmdW5jdGlvbnMgdXNpbmcgdGhhdCBhcHByb2FjaCB0byBmYWlsIHRvIGhhdmUgdHJhbnNpdGl2aXR5LlxyXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShhKSAmJiBOdW1iZXIuaXNGaW5pdGUoYikpIHtcclxuICAgICAgICByZXR1cm4gYSAtIGI7XHJcbiAgICB9XHJcbiAgICAvLyBUaGUgZGVmYXVsdCA8IGFuZCA+IG9wZXJhdG9ycyBhcmUgbm90IHRvdGFsbHkgb3JkZXJlZC4gVG8gYWxsb3cgdHlwZXMgdG8gYmUgbWl4ZWRcclxuICAgIC8vIGluIGEgc2luZ2xlIGNvbGxlY3Rpb24sIGNvbXBhcmUgdHlwZXMgYW5kIG9yZGVyIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgYnkgdHlwZS5cclxuICAgIHZhciB0YSA9IHR5cGVvZiBhO1xyXG4gICAgdmFyIHRiID0gdHlwZW9mIGI7XHJcbiAgICBpZiAodGEgIT09IHRiKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhIDwgdGIgPyAtMSA6IDE7XHJcbiAgICB9XHJcbiAgICBpZiAodGEgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmRpemVkIEphdmFTY3JpcHQgYnVnOiBudWxsIGlzIG5vdCBhbiBvYmplY3QsIGJ1dCB0eXBlb2Ygc2F5cyBpdCBpc1xyXG4gICAgICAgIGlmIChhID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gYiA9PT0gbnVsbCA/IDAgOiAtMTtcclxuICAgICAgICBlbHNlIGlmIChiID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICBhID0gYS52YWx1ZU9mKCk7XHJcbiAgICAgICAgYiA9IGIudmFsdWVPZigpO1xyXG4gICAgICAgIHRhID0gdHlwZW9mIGE7XHJcbiAgICAgICAgdGIgPSB0eXBlb2YgYjtcclxuICAgICAgICAvLyBEZWFsIHdpdGggdGhlIHR3byB2YWx1ZU9mKClzIHByb2R1Y2luZyBkaWZmZXJlbnQgdHlwZXNcclxuICAgICAgICBpZiAodGEgIT09IHRiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0YSA8IHRiID8gLTEgOiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGEgYW5kIGIgYXJlIG5vdyB0aGUgc2FtZSB0eXBlLCBhbmQgd2lsbCBiZSBhIG51bWJlciwgc3RyaW5nIG9yIGFycmF5IFxyXG4gICAgLy8gKHdoaWNoIHdlIGFzc3VtZSBob2xkcyBudW1iZXJzIG9yIHN0cmluZ3MpLCBvciBzb21ldGhpbmcgdW5zdXBwb3J0ZWQuXHJcbiAgICBpZiAoYSA8IGIpXHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgaWYgKGEgPiBiKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgaWYgKGEgPT09IGIpXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAvLyBPcmRlciBOYU4gbGVzcyB0aGFuIG90aGVyIG51bWJlcnNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oYSkpXHJcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihiKSA/IDAgOiAtMTtcclxuICAgIGVsc2UgaWYgKE51bWJlci5pc05hTihiKSlcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIC8vIFRoaXMgY291bGQgYmUgdHdvIG9iamVjdHMgKGUuZy4gWzddIGFuZCBbJzcnXSkgdGhhdCBhcmVuJ3Qgb3JkZXJlZFxyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSkgPyAwIDogTnVtYmVyLk5hTjtcclxufVxyXG5leHBvcnRzLmRlZmF1bHRDb21wYXJhdG9yID0gZGVmYXVsdENvbXBhcmF0b3I7XHJcbjtcclxuZnVuY3Rpb24gc2ltcGxlQ29tcGFyYXRvcihhLCBiKSB7XHJcbiAgICByZXR1cm4gYSA+IGIgPyAxIDogYSA8IGIgPyAtMSA6IDA7XHJcbn1cclxuZXhwb3J0cy5zaW1wbGVDb21wYXJhdG9yID0gc2ltcGxlQ29tcGFyYXRvcjtcclxuO1xyXG4vKipcclxuICogQSByZWFzb25hYmx5IGZhc3QgY29sbGVjdGlvbiBvZiBrZXktdmFsdWUgcGFpcnMgd2l0aCBhIHBvd2VyZnVsIEFQSS5cclxuICogTGFyZ2VseSBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkIE1hcC4gQlRyZWUgaXMgYSBCKyB0cmVlIGRhdGEgc3RydWN0dXJlLFxyXG4gKiBzbyB0aGUgY29sbGVjdGlvbiBpcyBzb3J0ZWQgYnkga2V5LlxyXG4gKlxyXG4gKiBCKyB0cmVlcyB0ZW5kIHRvIHVzZSBtZW1vcnkgbW9yZSBlZmZpY2llbnRseSB0aGFuIGhhc2h0YWJsZXMgc3VjaCBhcyB0aGVcclxuICogc3RhbmRhcmQgTWFwLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGNvbGxlY3Rpb24gY29udGFpbnMgYSBsYXJnZSBudW1iZXIgb2ZcclxuICogaXRlbXMuIEhvd2V2ZXIsIG1haW50YWluaW5nIHRoZSBzb3J0IG9yZGVyIG1ha2VzIHRoZW0gbW9kZXN0bHkgc2xvd2VyOlxyXG4gKiBPKGxvZyBzaXplKSByYXRoZXIgdGhhbiBPKDEpLiBUaGlzIEIrIHRyZWUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgTygxKVxyXG4gKiBmYXN0IGNsb25pbmcuIEl0IGFsc28gc3VwcG9ydHMgZnJlZXplKCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0XHJcbiAqIGEgQlRyZWUgaXMgbm90IGNoYW5nZWQgYWNjaWRlbnRhbGx5LlxyXG4gKlxyXG4gKiBDb25mdXNpbmdseSwgdGhlIEVTNiBNYXAuZm9yRWFjaChjKSBtZXRob2QgY2FsbHMgYyh2YWx1ZSxrZXkpIGluc3RlYWQgb2ZcclxuICogYyhrZXksdmFsdWUpLCBpbiBjb250cmFzdCB0byBvdGhlciBtZXRob2RzIHN1Y2ggYXMgc2V0KCkgYW5kIGVudHJpZXMoKVxyXG4gKiB3aGljaCBwdXQgdGhlIGtleSBmaXJzdC4gSSBjYW4gb25seSBhc3N1bWUgdGhhdCB0aGUgb3JkZXIgd2FzIHJldmVyc2VkIG9uXHJcbiAqIHRoZSB0aGVvcnkgdGhhdCB1c2VycyB3b3VsZCB1c3VhbGx5IHdhbnQgdG8gZXhhbWluZSB2YWx1ZXMgYW5kIGlnbm9yZSBrZXlzLlxyXG4gKiBCVHJlZSdzIGZvckVhY2goKSB0aGVyZWZvcmUgd29ya3MgdGhlIHNhbWUgd2F5LCBidXQgYSBzZWNvbmQgbWV0aG9kXHJcbiAqIGAuZm9yRWFjaFBhaXIoKGtleSx2YWx1ZSk9PnsuLi59KWAgaXMgcHJvdmlkZWQgd2hpY2ggc2VuZHMgeW91IHRoZSBrZXlcclxuICogZmlyc3QgYW5kIHRoZSB2YWx1ZSBzZWNvbmQ7IHRoaXMgbWV0aG9kIGlzIHNsaWdodGx5IGZhc3RlciBiZWNhdXNlIGl0IGlzXHJcbiAqIHRoZSBcIm5hdGl2ZVwiIGZvci1lYWNoIG1ldGhvZCBmb3IgdGhpcyBjbGFzcy5cclxuICpcclxuICogT3V0IG9mIHRoZSBib3gsIEJUcmVlIHN1cHBvcnRzIGtleXMgdGhhdCBhcmUgbnVtYmVycywgc3RyaW5ncywgYXJyYXlzIG9mXHJcbiAqIG51bWJlcnMvc3RyaW5ncywgRGF0ZSwgYW5kIG9iamVjdHMgdGhhdCBoYXZlIGEgdmFsdWVPZigpIG1ldGhvZCByZXR1cm5pbmcgYVxyXG4gKiBudW1iZXIgb3Igc3RyaW5nLiBPdGhlciBkYXRhIHR5cGVzLCBzdWNoIGFzIGFycmF5cyBvZiBEYXRlIG9yIGN1c3RvbVxyXG4gKiBvYmplY3RzLCByZXF1aXJlIGEgY3VzdG9tIGNvbXBhcmF0b3IsIHdoaWNoIHlvdSBtdXN0IHBhc3MgYXMgdGhlIHNlY29uZFxyXG4gKiBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IgKHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBsaXN0IG9mXHJcbiAqIGluaXRpYWwgaXRlbXMpLiBTeW1ib2xzIGNhbm5vdCBiZSB1c2VkIGFzIGtleXMgYmVjYXVzZSB0aGV5IGFyZSB1bm9yZGVyZWRcclxuICogKG9uZSBTeW1ib2wgaXMgbmV2ZXIgXCJncmVhdGVyXCIgb3IgXCJsZXNzXCIgdGhhbiBhbm90aGVyKS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogR2l2ZW4gYSB7bmFtZTogc3RyaW5nLCBhZ2U6IG51bWJlcn0gb2JqZWN0LCB5b3UgY2FuIGNyZWF0ZSBhIHRyZWUgc29ydGVkIGJ5XHJcbiAqIG5hbWUgYW5kIHRoZW4gYnkgYWdlIGxpa2UgdGhpczpcclxuICpcclxuICogICAgIHZhciB0cmVlID0gbmV3IEJUcmVlKHVuZGVmaW5lZCwgKGEsIGIpID0+IHtcclxuICogICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSlcclxuICogICAgICAgICByZXR1cm4gMTsgLy8gUmV0dXJuIGEgbnVtYmVyID4wIHdoZW4gYSA+IGJcclxuICogICAgICAgZWxzZSBpZiAoYS5uYW1lIDwgYi5uYW1lKVxyXG4gKiAgICAgICAgIHJldHVybiAtMTsgLy8gUmV0dXJuIGEgbnVtYmVyIDwwIHdoZW4gYSA8IGJcclxuICogICAgICAgZWxzZSAvLyBuYW1lcyBhcmUgZXF1YWwgKG9yIGluY29tcGFyYWJsZSlcclxuICogICAgICAgICByZXR1cm4gYS5hZ2UgLSBiLmFnZTsgLy8gUmV0dXJuID4wIHdoZW4gYS5hZ2UgPiBiLmFnZVxyXG4gKiAgICAgfSk7XHJcbiAqXHJcbiAqICAgICB0cmVlLnNldCh7bmFtZTpcIkJpbGxcIiwgYWdlOjE3fSwgXCJoYXBweVwiKTtcclxuICogICAgIHRyZWUuc2V0KHtuYW1lOlwiRnJhblwiLCBhZ2U6NDB9LCBcImJ1c3kgJiBzdHJlc3NlZFwiKTtcclxuICogICAgIHRyZWUuc2V0KHtuYW1lOlwiQmlsbFwiLCBhZ2U6NTV9LCBcInJlY2VudGx5IGxhaWQgb2ZmXCIpO1xyXG4gKiAgICAgdHJlZS5mb3JFYWNoUGFpcigoaywgdikgPT4ge1xyXG4gKiAgICAgICBjb25zb2xlLmxvZyhgTmFtZTogJHtrLm5hbWV9IEFnZTogJHtrLmFnZX0gU3RhdHVzOiAke3Z9YCk7XHJcbiAqICAgICB9KTtcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBcInJhbmdlXCIgbWV0aG9kcyAoYGZvckVhY2gsIGZvclJhbmdlLCBlZGl0UmFuZ2VgKSB3aWxsIHJldHVybiB0aGUgbnVtYmVyXHJcbiAqIG9mIGVsZW1lbnRzIHRoYXQgd2VyZSBzY2FubmVkLiBJbiBhZGRpdGlvbiwgdGhlIGNhbGxiYWNrIGNhbiByZXR1cm4ge2JyZWFrOlJ9XHJcbiAqIHRvIHN0b3AgZWFybHkgYW5kIHJldHVybiBSIGZyb20gdGhlIG91dGVyIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiAtIFRPRE86IFRlc3QgcGVyZm9ybWFuY2Ugb2YgcHJlYWxsb2NhdGluZyB2YWx1ZXMgYXJyYXkgYXQgbWF4IHNpemVcclxuICogLSBUT0RPOiBBZGQgZmFzdCBpbml0aWFsaXphdGlvbiB3aGVuIGEgc29ydGVkIGFycmF5IGlzIHByb3ZpZGVkIHRvIGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEZvciBtb3JlIGRvY3VtZW50YXRpb24gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9xd2VydGllL2J0cmVlLXR5cGVzY3JpcHRcclxuICpcclxuICogQXJlIHlvdSBhIEMjIGRldmVsb3Blcj8gWW91IG1pZ2h0IGxpa2UgdGhlIHNpbWlsYXIgZGF0YSBzdHJ1Y3R1cmVzIEkgbWFkZSBmb3IgQyM6XHJcbiAqIEJEaWN0aW9uYXJ5LCBCTGlzdCwgZXRjLiBTZWUgaHR0cDovL2NvcmUubG95Yy5uZXQvY29sbGVjdGlvbnMvXHJcbiAqXHJcbiAqIEBhdXRob3IgRGF2aWQgUGllcGdyYXNzXHJcbiAqL1xyXG52YXIgQlRyZWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGFuIGVtcHR5IEIrIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gY29tcGFyZSBDdXN0b20gZnVuY3Rpb24gdG8gY29tcGFyZSBwYWlycyBvZiBlbGVtZW50cyBpbiB0aGUgdHJlZS5cclxuICAgICAqICAgSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdENvbXBhcmF0b3Igd2lsbCBiZSB1c2VkIHdoaWNoIGlzIHZhbGlkIGFzIGxvbmcgYXMgSyBleHRlbmRzIERlZmF1bHRDb21wYXJhYmxlLlxyXG4gICAgICogQHBhcmFtIGVudHJpZXMgQSBzZXQgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGluaXRpYWxpemUgdGhlIHRyZWVcclxuICAgICAqIEBwYXJhbSBtYXhOb2RlU2l6ZSBCcmFuY2hpbmcgZmFjdG9yIChtYXhpbXVtIGl0ZW1zIG9yIGNoaWxkcmVuIHBlciBub2RlKVxyXG4gICAgICogICBNdXN0IGJlIGluIHJhbmdlIDQuLjI1Ni4gSWYgdW5kZWZpbmVkIG9yIDw0IHRoZW4gZGVmYXVsdCBpcyB1c2VkOyBpZiA+MjU2IHRoZW4gMjU2LlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCVHJlZShlbnRyaWVzLCBjb21wYXJlLCBtYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuX3Jvb3QgPSBFbXB0eUxlYWY7XHJcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5fbWF4Tm9kZVNpemUgPSBtYXhOb2RlU2l6ZSA+PSA0ID8gTWF0aC5taW4obWF4Tm9kZVNpemUsIDI1NikgOiAzMjtcclxuICAgICAgICB0aGlzLl9jb21wYXJlID0gY29tcGFyZSB8fCBkZWZhdWx0Q29tcGFyYXRvcjtcclxuICAgICAgICBpZiAoZW50cmllcylcclxuICAgICAgICAgICAgdGhpcy5zZXRQYWlycyhlbnRyaWVzKTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCVHJlZS5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvLyBFUzYgTWFwPEssVj4gbWV0aG9kcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8qKiBHZXRzIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSB0cmVlLiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2l6ZTsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xyXG4gICAgICAgIC8qKiBHZXRzIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSB0cmVlLiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2l6ZTsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJpc0VtcHR5XCIsIHtcclxuICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmZiB0aGUgdHJlZSBjb250YWlucyBubyBrZXktdmFsdWUgcGFpcnMuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplID09PSAwOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogUmVsZWFzZXMgdGhlIHRyZWUgc28gdGhhdCBpdHMgc2l6ZSBpcyAwLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3Jvb3QgPSBFbXB0eUxlYWY7XHJcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJ1bnMgYSBmdW5jdGlvbiBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciwgaW4gb3JkZXIgZnJvbSBzbWFsbGVzdCB0b1xyXG4gICAgICogIGxhcmdlc3Qga2V5LiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEVTNiBNYXAsIHRoZSBhcmd1bWVudCBvcmRlciB0b1xyXG4gICAgICogIHRoZSBjYWxsYmFjayBpcyBiYWNrd2FyZHM6IHZhbHVlIGZpcnN0LCB0aGVuIGtleS4gQ2FsbCBmb3JFYWNoUGFpclxyXG4gICAgICogIGluc3RlYWQgdG8gcmVjZWl2ZSB0aGUga2V5IGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgICAqIEBwYXJhbSB0aGlzQXJnIElmIHByb3ZpZGVkLCB0aGlzIHBhcmFtZXRlciBpcyBhc3NpZ25lZCBhcyB0aGUgYHRoaXNgXHJcbiAgICAgKiAgICAgICAgdmFsdWUgZm9yIGVhY2ggY2FsbGJhY2suXHJcbiAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGF0IHdlcmUgc2VudCB0byB0aGUgY2FsbGJhY2ssXHJcbiAgICAgKiAgICAgICAgb3IgdGhlIFIgdmFsdWUgaWYgdGhlIGNhbGxiYWNrIHJldHVybmVkIHticmVhazpSfS4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAodGhpc0FyZyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpc0FyZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9yRWFjaFBhaXIoZnVuY3Rpb24gKGssIHYpIHsgcmV0dXJuIGNhbGxiYWNrKHYsIGssIF90aGlzKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJ1bnMgYSBmdW5jdGlvbiBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciwgaW4gb3JkZXIgZnJvbSBzbWFsbGVzdCB0b1xyXG4gICAgICogIGxhcmdlc3Qga2V5LiBUaGUgY2FsbGJhY2sgY2FuIHJldHVybiB7YnJlYWs6Un0gKHdoZXJlIFIgaXMgYW55IHZhbHVlXHJcbiAgICAgKiAgZXhjZXB0IHVuZGVmaW5lZCkgdG8gc3RvcCBpbW1lZGlhdGVseSBhbmQgcmV0dXJuIFIgZnJvbSBmb3JFYWNoUGFpci5cclxuICAgICAqIEBwYXJhbSBvbkZvdW5kIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIuIFRoaXNcclxuICAgICAqICAgICAgICBmdW5jdGlvbiBjYW4gcmV0dXJuIHticmVhazpSfSB0byBzdG9wIGVhcmx5IHdpdGggcmVzdWx0IFIuXHJcbiAgICAgKiAgICAgICAgVGhlIHJlYXNvbiB0aGF0IHlvdSBtdXN0IHJldHVybiB7YnJlYWs6Un0gaW5zdGVhZCBvZiBzaW1wbHkgUlxyXG4gICAgICogICAgICAgIGl0c2VsZiBpcyBmb3IgY29uc2lzdGVuY3kgd2l0aCBlZGl0UmFuZ2UoKSwgd2hpY2ggYWxsb3dzXHJcbiAgICAgKiAgICAgICAgbXVsdGlwbGUgYWN0aW9ucywgbm90IGp1c3QgYnJlYWtpbmcuXHJcbiAgICAgKiBAcGFyYW0gaW5pdGlhbENvdW50ZXIgVGhpcyBpcyB0aGUgdmFsdWUgb2YgdGhlIHRoaXJkIGFyZ3VtZW50IG9mXHJcbiAgICAgKiAgICAgICAgYG9uRm91bmRgIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhlIGNvdW50ZXIgaW5jcmVhc2VzXHJcbiAgICAgKiAgICAgICAgYnkgb25lIGVhY2ggdGltZSBgb25Gb3VuZGAgaXMgY2FsbGVkLiBEZWZhdWx0IHZhbHVlOiAwXHJcbiAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhaXJzIHNlbnQgdG8gdGhlIGNhbGxiYWNrIChwbHVzIGluaXRpYWxDb3VudGVyLFxyXG4gICAgICogICAgICAgIGlmIHlvdSBwcm92aWRlZCBvbmUpLiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQge2JyZWFrOlJ9IHRoZW5cclxuICAgICAqICAgICAgICB0aGUgUiB2YWx1ZSBpcyByZXR1cm5lZCBpbnN0ZWFkLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvckVhY2hQYWlyID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHZhciBsb3cgPSB0aGlzLm1pbktleSgpLCBoaWdoID0gdGhpcy5tYXhLZXkoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JSYW5nZShsb3csIGhpZ2gsIHRydWUsIGNhbGxiYWNrLCBpbml0aWFsQ291bnRlcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhIHBhaXIgaW4gdGhlIHRyZWUgYW5kIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIGEgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBrZXkgd2FzIG5vdCBmb3VuZC5cclxuICAgICAqIEByZXR1cm5zIHRoZSB2YWx1ZSwgb3IgZGVmYXVsdFZhbHVlIGlmIHRoZSBrZXkgd2FzIG5vdCBmb3VuZC5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obG9nIHNpemUpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5LCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXQoa2V5LCBkZWZhdWx0VmFsdWUsIHRoaXMpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBvciBvdmVyd3JpdGVzIGEga2V5LXZhbHVlIHBhaXIgaW4gdGhlIEIrIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHNvcnQgb3JkZXIgb2ZcclxuICAgICAqICAgICAgICBkYXRhIGluIHRoZSB0cmVlLlxyXG4gICAgICogQHBhcmFtIHZhbHVlIGRhdGEgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGtleSAob3B0aW9uYWwpXHJcbiAgICAgKiBAcGFyYW0gb3ZlcndyaXRlIFdoZXRoZXIgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGtleS12YWx1ZSBwYWlyXHJcbiAgICAgKiAgICAgICAgKGRlZmF1bHQ6IHRydWUpLiBJZiB0aGlzIGlzIGZhbHNlIGFuZCB0aGVyZSBpcyBhbiBleGlzdGluZ1xyXG4gICAgICogICAgICAgIGtleS12YWx1ZSBwYWlyIHRoZW4gdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcga2V5LXZhbHVlIHBhaXIgd2FzIGFkZGVkLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqIE5vdGU6IHdoZW4gb3ZlcndyaXRpbmcgYSBwcmV2aW91cyBlbnRyeSwgdGhlIGtleSBpcyB1cGRhdGVkXHJcbiAgICAgKiBhcyB3ZWxsIGFzIHRoZSB2YWx1ZS4gVGhpcyBoYXMgbm8gZWZmZWN0IHVubGVzcyB0aGUgbmV3IGtleVxyXG4gICAgICogaGFzIGRhdGEgdGhhdCBkb2VzIG5vdCBhZmZlY3QgaXRzIHNvcnQgb3JkZXIuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Jvb3QuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSB0aGlzLl9yb290LmNsb25lKCk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX3Jvb3Quc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSwgdGhpcyk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSB8fCByZXN1bHQgPT09IGZhbHNlKVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIC8vIFJvb3Qgbm9kZSBoYXMgc3BsaXQsIHNvIGNyZWF0ZSBhIG5ldyByb290IG5vZGUuXHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IG5ldyBCTm9kZUludGVybmFsKFt0aGlzLl9yb290LCByZXN1bHRdKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IGV4aXN0cyBpbiB0aGUgQisgdHJlZSwgZmFsc2UgaWYgbm90LlxyXG4gICAgICogVXNlIGdldCgpIGZvciBiZXN0IHBlcmZvcm1hbmNlOyB1c2UgaGFzKCkgaWYgeW91IG5lZWQgdG9cclxuICAgICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gXCJ1bmRlZmluZWQgdmFsdWVcIiBhbmQgXCJrZXkgbm90IHByZXNlbnRcIi5cclxuICAgICAqIEBwYXJhbSBrZXkgS2V5IHRvIGRldGVjdFxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JSYW5nZShrZXksIGtleSwgdHJ1ZSwgdW5kZWZpbmVkKSAhPT0gMDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBzaW5nbGUga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBrZXkgS2V5IHRvIGZpbmRcclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBwYWlyIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UmFuZ2Uoa2V5LCBrZXksIHRydWUsIERlbGV0ZVJhbmdlKSAhPT0gMDtcclxuICAgIH07XHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51LnNldChrZXksIHZhbHVlLCBvdmVyd3JpdGUpIHx8IG92ZXJ3cml0ZSA/IG51IDogdGhpcztcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS12YWx1ZSBwYWlycyBzZXQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aFBhaXJzID0gZnVuY3Rpb24gKHBhaXJzLCBvdmVyd3JpdGUpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51LnNldFBhaXJzKHBhaXJzLCBvdmVyd3JpdGUpICE9PSAwIHx8IG92ZXJ3cml0ZSA/IG51IDogdGhpcztcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleXMgcHJlc2VudC5cclxuICAgICAqICBAcGFyYW0ga2V5cyBUaGUga2V5cyB0byBhZGQuIElmIGEga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdHJlZSxcclxuICAgICAqICAgICAgICAgbmVpdGhlciB0aGUgZXhpc3Rpbmcga2V5IG5vciB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbW9kaWZpZWQuXHJcbiAgICAgKiAgQHBhcmFtIHJldHVyblRoaXNJZlVuY2hhbmdlZCBpZiB0cnVlLCByZXR1cm5zIHRoaXMgaWYgYWxsIGtleXMgYWxyZWFkeVxyXG4gICAgICogIGV4aXN0ZWQuIFBlcmZvcm1hbmNlIG5vdGU6IGR1ZSB0byB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY2xhc3MsIGFsbFxyXG4gICAgICogIG5vZGUocykgbGVhZGluZyB0byBleGlzdGluZyBrZXlzIGFyZSBjbG9uZWQgZXZlbiBpZiB0aGUgY29sbGVjdGlvbiBpc1xyXG4gICAgICogIHVsdGltYXRlbHkgdW5jaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoS2V5cyA9IGZ1bmN0aW9uIChrZXlzLCByZXR1cm5UaGlzSWZVbmNoYW5nZWQpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCksIGNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGNoYW5nZWQgPSBudS5zZXQoa2V5c1tpXSwgdW5kZWZpbmVkLCBmYWxzZSkgfHwgY2hhbmdlZDtcclxuICAgICAgICByZXR1cm4gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkICYmICFjaGFuZ2VkID8gdGhpcyA6IG51O1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IHJlbW92ZWQuXHJcbiAgICAgKiBAcGFyYW0gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkIGlmIHRydWUsIHJldHVybnMgdGhpcyBpZiB0aGUga2V5IGRpZG4ndCBleGlzdC5cclxuICAgICAqICBQZXJmb3JtYW5jZSBub3RlOiBkdWUgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGNsYXNzLCBub2RlKHMpIGxlYWRpbmdcclxuICAgICAqICB0byB3aGVyZSB0aGUga2V5IHdvdWxkIGhhdmUgYmVlbiBzdG9yZWQgYXJlIGNsb25lZCBldmVuIHdoZW4gdGhlIGtleVxyXG4gICAgICogIHR1cm5zIG91dCBub3QgdG8gZXhpc3QgYW5kIHRoZSBjb2xsZWN0aW9uIGlzIHVuY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLndpdGhvdXQgPSBmdW5jdGlvbiAoa2V5LCByZXR1cm5UaGlzSWZVbmNoYW5nZWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aXRob3V0UmFuZ2Uoa2V5LCBrZXksIHRydWUsIHJldHVyblRoaXNJZlVuY2hhbmdlZCk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXlzIHJlbW92ZWQuXHJcbiAgICAgKiBAcGFyYW0gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkIGlmIHRydWUsIHJldHVybnMgdGhpcyBpZiBub25lIG9mIHRoZSBrZXlzXHJcbiAgICAgKiAgZXhpc3RlZC4gUGVyZm9ybWFuY2Ugbm90ZTogZHVlIHRvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjbGFzcyxcclxuICAgICAqICBub2RlKHMpIGxlYWRpbmcgdG8gd2hlcmUgdGhlIGtleSB3b3VsZCBoYXZlIGJlZW4gc3RvcmVkIGFyZSBjbG9uZWRcclxuICAgICAqICBldmVuIHdoZW4gdGhlIGtleSB0dXJucyBvdXQgbm90IHRvIGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aG91dEtleXMgPSBmdW5jdGlvbiAoa2V5cywgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgICAgIHJldHVybiBudS5kZWxldGVLZXlzKGtleXMpIHx8ICFyZXR1cm5UaGlzSWZVbmNoYW5nZWQgPyBudSA6IHRoaXM7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCByYW5nZSBvZiBrZXlzIHJlbW92ZWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aG91dFJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICBpZiAobnUuZGVsZXRlUmFuZ2UobG93LCBoaWdoLCBpbmNsdWRlSGlnaCkgPT09IDAgJiYgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICByZXR1cm4gbnU7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggcGFpcnMgcmVtb3ZlZCB3aGVuZXZlciB0aGUgY2FsbGJhY2tcclxuICAgICAqICBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLiBgd2hlcmUoKWAgaXMgYSBzeW5vbnltIGZvciB0aGlzIG1ldGhvZC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuZ3JlZWR5Q2xvbmUoKTtcclxuICAgICAgICB2YXIgZGVsO1xyXG4gICAgICAgIG51LmVkaXRBbGwoZnVuY3Rpb24gKGssIHYsIGkpIHtcclxuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayhrLCB2LCBpKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBkZWwgPSBEZWxldGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFkZWwgJiYgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICByZXR1cm4gbnU7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggYWxsIHZhbHVlcyBhbHRlcmVkIGJ5IGEgY2FsbGJhY2sgZnVuY3Rpb24uICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubWFwVmFsdWVzID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIHRtcCA9IHt9O1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuZ3JlZWR5Q2xvbmUoKTtcclxuICAgICAgICBudS5lZGl0QWxsKGZ1bmN0aW9uIChrLCB2LCBpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXAudmFsdWUgPSBjYWxsYmFjayh2LCBrLCBpKSwgdG1wO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICBCVHJlZS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcclxuICAgICAgICB2YXIgaSA9IDAsIHAgPSBpbml0aWFsVmFsdWU7XHJcbiAgICAgICAgdmFyIGl0ID0gdGhpcy5lbnRyaWVzKHRoaXMubWluS2V5KCksIFJldXNlZEFycmF5KSwgbmV4dDtcclxuICAgICAgICB3aGlsZSAoIShuZXh0ID0gaXQubmV4dCgpKS5kb25lKVxyXG4gICAgICAgICAgICBwID0gY2FsbGJhY2socCwgbmV4dC52YWx1ZSwgaSsrLCB0aGlzKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gSXRlcmF0b3IgbWV0aG9kcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8qKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgcHJvdmlkZXMgaXRlbXMgaW4gb3JkZXIgKGFzY2VuZGluZyBvcmRlciBpZlxyXG4gICAgICogIHRoZSBjb2xsZWN0aW9uJ3MgY29tcGFyYXRvciB1c2VzIGFzY2VuZGluZyBvcmRlciwgYXMgaXMgdGhlIGRlZmF1bHQuKVxyXG4gICAgICogIEBwYXJhbSBsb3dlc3RLZXkgRmlyc3Qga2V5IHRvIGJlIGl0ZXJhdGVkLCBvciB1bmRlZmluZWQgdG8gc3RhcnQgYXRcclxuICAgICAqICAgICAgICAgbWluS2V5KCkuIElmIHRoZSBzcGVjaWZpZWQga2V5IGRvZXNuJ3QgZXhpc3QgdGhlbiBpdGVyYXRpb25cclxuICAgICAqICAgICAgICAgc3RhcnRzIGF0IHRoZSBuZXh0IGhpZ2hlciBrZXkgKGFjY29yZGluZyB0byB0aGUgY29tcGFyYXRvcikuXHJcbiAgICAgKiAgQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWVcclxuICAgICAqICAgICAgICAgcGFpcnMsIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGl0ZXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAobG93ZXN0S2V5LCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpbmZvID0gdGhpcy5maW5kUGF0aChsb3dlc3RLZXkpO1xyXG4gICAgICAgIGlmIChpbmZvID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcigpO1xyXG4gICAgICAgIHZhciBub2RlcXVldWUgPSBpbmZvLm5vZGVxdWV1ZSwgbm9kZWluZGV4ID0gaW5mby5ub2RlaW5kZXgsIGxlYWYgPSBpbmZvLmxlYWY7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gcmV1c2VkQXJyYXkgIT09IHVuZGVmaW5lZCA/IDEgOiAwO1xyXG4gICAgICAgIHZhciBpID0gKGxvd2VzdEtleSA9PT0gdW5kZWZpbmVkID8gLTEgOiBsZWFmLmluZGV4T2YobG93ZXN0S2V5LCAwLCB0aGlzLl9jb21wYXJlKSAtIDEpO1xyXG4gICAgICAgIHJldHVybiBpdGVyYXRvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGp1bXA6IGZvciAoOzspIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPCBsZWFmLmtleXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBbbGVhZi5rZXlzW2ldLCBsZWFmLnZhbHVlc1tpXV0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPCBsZWFmLmtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IGxlYWYua2V5c1tpXSwgcmV1c2VkQXJyYXlbMV0gPSBsZWFmLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV1c2VkQXJyYXkgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IGxlYWYgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsZXZlbCA9IC0xOzspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2xldmVsID49IG5vZGVxdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUganVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK25vZGVpbmRleFtsZXZlbF0gPCBub2RlcXVldWVbbGV2ZWxdLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGV2ZWwgPiAwOyBsZXZlbC0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlcXVldWVbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbF1bbm9kZWluZGV4W2xldmVsXV0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlaW5kZXhbbGV2ZWwgLSAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZiA9IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcmV1c2VkQXJyYXkgIT09IHVuZGVmaW5lZCA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgcHJvdmlkZXMgaXRlbXMgaW4gcmV2ZXJzZWQgb3JkZXIuXHJcbiAgICAgKiAgQHBhcmFtIGhpZ2hlc3RLZXkgS2V5IGF0IHdoaWNoIHRvIHN0YXJ0IGl0ZXJhdGluZywgb3IgdW5kZWZpbmVkIHRvXHJcbiAgICAgKiAgICAgICAgIHN0YXJ0IGF0IG1heEtleSgpLiBJZiB0aGUgc3BlY2lmaWVkIGtleSBkb2Vzbid0IGV4aXN0IHRoZW4gaXRlcmF0aW9uXHJcbiAgICAgKiAgICAgICAgIHN0YXJ0cyBhdCB0aGUgbmV4dCBsb3dlciBrZXkgKGFjY29yZGluZyB0byB0aGUgY29tcGFyYXRvcikuXHJcbiAgICAgKiAgQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWVcclxuICAgICAqICAgICAgICAgcGFpcnMsIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGl0ZXJhdGlvbi5cclxuICAgICAqICBAcGFyYW0gc2tpcEhpZ2hlc3QgSWZmIHRoaXMgZmxhZyBpcyB0cnVlIGFuZCB0aGUgaGlnaGVzdEtleSBleGlzdHMgaW4gdGhlXHJcbiAgICAgKiAgICAgICAgIGNvbGxlY3Rpb24sIHRoZSBwYWlyIG1hdGNoaW5nIGhpZ2hlc3RLZXkgaXMgc2tpcHBlZCwgbm90IGl0ZXJhdGVkLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZW50cmllc1JldmVyc2VkID0gZnVuY3Rpb24gKGhpZ2hlc3RLZXksIHJldXNlZEFycmF5LCBza2lwSGlnaGVzdCkge1xyXG4gICAgICAgIGlmIChoaWdoZXN0S2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaGlnaGVzdEtleSA9IHRoaXMubWF4S2V5KCk7XHJcbiAgICAgICAgICAgIHNraXBIaWdoZXN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBpZiAoaGlnaGVzdEtleSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7IC8vIGNvbGxlY3Rpb24gaXMgZW1wdHlcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIF9hID0gdGhpcy5maW5kUGF0aChoaWdoZXN0S2V5KSB8fCB0aGlzLmZpbmRQYXRoKHRoaXMubWF4S2V5KCkpLCBub2RlcXVldWUgPSBfYS5ub2RlcXVldWUsIG5vZGVpbmRleCA9IF9hLm5vZGVpbmRleCwgbGVhZiA9IF9hLmxlYWY7XHJcbiAgICAgICAgY2hlY2soIW5vZGVxdWV1ZVswXSB8fCBsZWFmID09PSBub2RlcXVldWVbMF1bbm9kZWluZGV4WzBdXSwgXCJ3YXQhXCIpO1xyXG4gICAgICAgIHZhciBpID0gbGVhZi5pbmRleE9mKGhpZ2hlc3RLZXksIDAsIHRoaXMuX2NvbXBhcmUpO1xyXG4gICAgICAgIGlmICghc2tpcEhpZ2hlc3QgJiYgaSA8IGxlYWYua2V5cy5sZW5ndGggJiYgdGhpcy5fY29tcGFyZShsZWFmLmtleXNbaV0sIGhpZ2hlc3RLZXkpIDw9IDApXHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICB2YXIgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAganVtcDogZm9yICg7Oykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0taSA+PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBbbGVhZi5rZXlzW2ldLCBsZWFmLnZhbHVlc1tpXV0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLWkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2VkQXJyYXlbMF0gPSBsZWFmLmtleXNbaV0sIHJldXNlZEFycmF5WzFdID0gbGVhZi52YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldXNlZEFycmF5IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBsZWFmIG5vZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbGV2ZWwgPSAtMTs7KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytsZXZlbCA+PSBub2RlcXVldWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGp1bXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1ub2RlaW5kZXhbbGV2ZWxdID49IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGxldmVsID4gMDsgbGV2ZWwtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXF1ZXVlW2xldmVsIC0gMV0gPSBub2RlcXVldWVbbGV2ZWxdW25vZGVpbmRleFtsZXZlbF1dLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZWluZGV4W2xldmVsIC0gMV0gPSBub2RlcXVldWVbbGV2ZWwgLSAxXS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYWYgPSBub2RlcXVldWVbMF1bbm9kZWluZGV4WzBdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGxlYWYua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcmV1c2VkQXJyYXkgIT09IHVuZGVmaW5lZCA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8qIFVzZWQgYnkgZW50cmllcygpIGFuZCBlbnRyaWVzUmV2ZXJzZWQoKSB0byBwcmVwYXJlIHRvIHN0YXJ0IGl0ZXJhdGluZy5cclxuICAgICAqIEl0IGRldmVsb3BzIGEgXCJub2RlIHF1ZXVlXCIgZm9yIGVhY2ggbm9uLWxlYWYgbGV2ZWwgb2YgdGhlIHRyZWUuXHJcbiAgICAgKiBMZXZlbHMgYXJlIG51bWJlcmVkIFwiYm90dG9tLXVwXCIgc28gdGhhdCBsZXZlbCAwIGlzIGEgbGlzdCBvZiBsZWFmXHJcbiAgICAgKiBub2RlcyBmcm9tIGEgbG93LWxldmVsIG5vbi1sZWFmIG5vZGUuIFRoZSBxdWV1ZSBhdCBhIGdpdmVuIGxldmVsIExcclxuICAgICAqIGNvbnNpc3RzIG9mIG5vZGVxdWV1ZVtMXSB3aGljaCBpcyB0aGUgY2hpbGRyZW4gb2YgYSBCTm9kZUludGVybmFsLFxyXG4gICAgICogYW5kIG5vZGVpbmRleFtMXSwgdGhlIGN1cnJlbnQgaW5kZXggd2l0aGluIHRoYXQgY2hpbGQgbGlzdCwgc3VjaFxyXG4gICAgICogc3VjaCB0aGF0IG5vZGVxdWV1ZVtMLTFdID09PSBub2RlcXVldWVbTF1bbm9kZWluZGV4W0xdXS5jaGlsZHJlbi5cclxuICAgICAqIChIb3dldmVyIGluc2lkZSB0aGlzIGZ1bmN0aW9uIHRoZSBvcmRlciBpcyByZXZlcnNlZC4pXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5maW5kUGF0aCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgbmV4dG5vZGUgPSB0aGlzLl9yb290O1xyXG4gICAgICAgIHZhciBub2RlcXVldWUsIG5vZGVpbmRleDtcclxuICAgICAgICBpZiAobmV4dG5vZGUuaXNMZWFmKSB7XHJcbiAgICAgICAgICAgIG5vZGVxdWV1ZSA9IEVtcHR5QXJyYXksIG5vZGVpbmRleCA9IEVtcHR5QXJyYXk7IC8vIGF2b2lkIGFsbG9jYXRpb25zXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBub2RlcXVldWUgPSBbXSwgbm9kZWluZGV4ID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGQgPSAwOyAhbmV4dG5vZGUuaXNMZWFmOyBkKyspIHtcclxuICAgICAgICAgICAgICAgIG5vZGVxdWV1ZVtkXSA9IG5leHRub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgbm9kZWluZGV4W2RdID0ga2V5ID09PSB1bmRlZmluZWQgPyAwIDogbmV4dG5vZGUuaW5kZXhPZihrZXksIDAsIHRoaXMuX2NvbXBhcmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVpbmRleFtkXSA+PSBub2RlcXVldWVbZF0ubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZmlyc3Qga2V5ID4gbWF4S2V5KClcclxuICAgICAgICAgICAgICAgIG5leHRub2RlID0gbm9kZXF1ZXVlW2RdW25vZGVpbmRleFtkXV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9kZXF1ZXVlLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgbm9kZWluZGV4LnJldmVyc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgbm9kZXF1ZXVlOiBub2RlcXVldWUsIG5vZGVpbmRleDogbm9kZWluZGV4LCBsZWFmOiBuZXh0bm9kZSB9O1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ29tcHV0ZXMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYHRoaXNgIGFuZCBgb3RoZXJgLlxyXG4gICAgICogRm9yIGVmZmljaWVuY3ksIHRoZSBkaWZmIGlzIHJldHVybmVkIHZpYSBpbnZvY2F0aW9ucyBvZiBzdXBwbGllZCBoYW5kbGVycy5cclxuICAgICAqIFRoZSBjb21wdXRhdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIGluIHdoaWNoIHRoZSB0d28gdHJlZXMgaGF2ZSBsYXJnZSBhbW91bnRzXHJcbiAgICAgKiBvZiBzaGFyZWQgZGF0YSAob2J0YWluZWQgYnkgY2FsbGluZyB0aGUgYGNsb25lYCBvciBgd2l0aGAgQVBJcykgYW5kIHdpbGwgYXZvaWRcclxuICAgICAqIGFueSBpdGVyYXRpb24gb2Ygc2hhcmVkIHN0YXRlLlxyXG4gICAgICogVGhlIGhhbmRsZXJzIGNhbiBjYXVzZSBjb21wdXRhdGlvbiB0byBlYXJseSBleGl0IGJ5IHJldHVybmluZyB7YnJlYWs6IFJ9LlxyXG4gICAgICogTmVpdGhlciBvZiB0aGUgY29sbGVjdGlvbnMgc2hvdWxkIGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBjb21wYXJpc29uIHByb2Nlc3MgKGluIHlvdXIgY2FsbGJhY2tzKSwgYXMgdGhpcyBtZXRob2QgYXNzdW1lcyB0aGV5IHdpbGwgbm90IGJlIG11dGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0gb3RoZXIgVGhlIHRyZWUgdG8gY29tcHV0ZSBhIGRpZmYgYWdhaW5zdC5cclxuICAgICAqIEBwYXJhbSBvbmx5VGhpcyBDYWxsYmFjayBpbnZva2VkIGZvciBhbGwga2V5cyBvbmx5IHByZXNlbnQgaW4gYHRoaXNgLlxyXG4gICAgICogQHBhcmFtIG9ubHlPdGhlciBDYWxsYmFjayBpbnZva2VkIGZvciBhbGwga2V5cyBvbmx5IHByZXNlbnQgaW4gYG90aGVyYC5cclxuICAgICAqIEBwYXJhbSBkaWZmZXJlbnQgQ2FsbGJhY2sgaW52b2tlZCBmb3IgYWxsIGtleXMgd2l0aCBkaWZmZXJpbmcgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGlmZkFnYWluc3QgPSBmdW5jdGlvbiAob3RoZXIsIG9ubHlUaGlzLCBvbmx5T3RoZXIsIGRpZmZlcmVudCkge1xyXG4gICAgICAgIGlmIChvdGhlci5fY29tcGFyZSAhPT0gdGhpcy5fY29tcGFyZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmVlIGNvbXBhcmF0b3JzIGFyZSBub3QgdGhlIHNhbWUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0VtcHR5IHx8IG90aGVyLmlzRW1wdHkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSAmJiBvdGhlci5pc0VtcHR5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgLy8gSWYgb25lIHRyZWUgaXMgZW1wdHksIGV2ZXJ5dGhpbmcgd2lsbCBiZSBhbiBvbmx5VGhpcy9vbmx5T3RoZXIuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb25seU90aGVyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBCVHJlZS5zdGVwVG9FbmQoQlRyZWUubWFrZURpZmZDdXJzb3Iob3RoZXIpLCBvbmx5T3RoZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gb25seVRoaXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEJUcmVlLnN0ZXBUb0VuZChCVHJlZS5tYWtlRGlmZkN1cnNvcih0aGlzKSwgb25seVRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDdXJzb3ItYmFzZWQgZGlmZiBhbGdvcml0aG0gaXMgYXMgZm9sbG93czpcclxuICAgICAgICAvLyAtIFVudGlsIG5laXRoZXIgY3Vyc29yIGhhcyBuYXZpZ2F0ZWQgdG8gdGhlIGVuZCBvZiB0aGUgdHJlZSwgZG8gdGhlIGZvbGxvd2luZzpcclxuICAgICAgICAvLyAgLSBJZiB0aGUgYHRoaXNgIGN1cnNvciBpcyBcImJlaGluZFwiIHRoZSBgb3RoZXJgIGN1cnNvciAoc3RyaWN0bHkgPCwgdmlhIGNvbXBhcmUpLCBhZHZhbmNlIGl0LlxyXG4gICAgICAgIC8vICAtIE90aGVyd2lzZSwgYWR2YW5jZSB0aGUgYG90aGVyYCBjdXJzb3IuXHJcbiAgICAgICAgLy8gIC0gQW55IHRpbWUgYSBjdXJzb3IgaXMgc3RlcHBlZCwgcGVyZm9ybSB0aGUgZm9sbG93aW5nOlxyXG4gICAgICAgIC8vICAgIC0gSWYgZWl0aGVyIGN1cnNvciBwb2ludHMgdG8gYSBrZXkvdmFsdWUgcGFpcjpcclxuICAgICAgICAvLyAgICAgIC0gSWYgdGhpc0N1cnNvciA9PT0gb3RoZXJDdXJzb3IgYW5kIHRoZSB2YWx1ZXMgZGlmZmVyLCBpdCBpcyBhIERpZmZlcmVudC5cclxuICAgICAgICAvLyAgICAgIC0gSWYgdGhpc0N1cnNvciA+IG90aGVyQ3Vyc29yIGFuZCBvdGhlckN1cnNvciBpcyBhdCBhIGtleS92YWx1ZSBwYWlyLCBpdCBpcyBhbiBPbmx5T3RoZXIuXHJcbiAgICAgICAgLy8gICAgICAtIElmIHRoaXNDdXJzb3IgPCBvdGhlckN1cnNvciBhbmQgdGhpc0N1cnNvciBpcyBhdCBhIGtleS92YWx1ZSBwYWlyLCBpdCBpcyBhbiBPbmx5VGhpcyBhcyBsb25nIGFzIHRoZSBtb3N0IHJlY2VudCBcclxuICAgICAgICAvLyAgICAgICAgY3Vyc29yIHN0ZXAgd2FzICpub3QqIG90aGVyQ3Vyc29yIGFkdmFuY2luZyBmcm9tIGEgdGllLiBUaGUgZXh0cmEgY29uZGl0aW9uIGF2b2lkcyBlcnJvbmVvdXMgT25seU90aGVyIGNhbGxzIFxyXG4gICAgICAgIC8vICAgICAgICB0aGF0IHdvdWxkIG9jY3VyIGR1ZSB0byBvdGhlckN1cnNvciBiZWluZyB0aGUgXCJsZWFkZXJcIi5cclxuICAgICAgICAvLyAgICAtIE90aGVyd2lzZSwgaWYgYm90aCBjdXJzb3JzIHBvaW50IHRvIG5vZGVzLCBjb21wYXJlIHRoZW0uIElmIHRoZXkgYXJlIGVxdWFsIGJ5IHJlZmVyZW5jZSAoc2hhcmVkKSwgc2tpcFxyXG4gICAgICAgIC8vICAgICAgYm90aCBjdXJzb3JzIHRvIHRoZSBuZXh0IG5vZGUgaW4gdGhlIHdhbGsuXHJcbiAgICAgICAgLy8gLSBPbmNlIG9uZSBjdXJzb3IgaGFzIGZpbmlzaGVkIHN0ZXBwaW5nLCBhbnkgcmVtYWluaW5nIHN0ZXBzIChpZiBhbnkpIGFyZSB0YWtlbiBhbmQga2V5L3ZhbHVlIHBhaXJzIGFyZSBsb2dnZWRcclxuICAgICAgICAvLyAgIGFzIE9ubHlPdGhlciAoaWYgb3RoZXJDdXJzb3IgaXMgc3RlcHBpbmcpIG9yIE9ubHlUaGlzIChpZiB0aGlzQ3Vyc29yIGlzIHN0ZXBwaW5nKS5cclxuICAgICAgICAvLyBUaGlzIGFsZ29yaXRobSBnaXZlcyB0aGUgY3JpdGljYWwgZ3VhcmFudGVlIHRoYXQgYWxsIGxvY2F0aW9ucyAoYm90aCBub2RlcyBhbmQga2V5L3ZhbHVlIHBhaXJzKSBpbiBib3RoIHRyZWVzIHRoYXQgXHJcbiAgICAgICAgLy8gYXJlIGlkZW50aWNhbCBieSB2YWx1ZSAoYW5kIHBvc3NpYmx5IGJ5IHJlZmVyZW5jZSkgd2lsbCBiZSB2aXNpdGVkICphdCB0aGUgc2FtZSB0aW1lKiBieSB0aGUgY3Vyc29ycy5cclxuICAgICAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGVtaXR0aW5nIGluY29ycmVjdCBkaWZmcywgYXMgd2VsbCBhcyBhbGxvd2luZyBmb3Igc2tpcHBpbmcgc2hhcmVkIG5vZGVzLlxyXG4gICAgICAgIHZhciBfY29tcGFyZSA9IHRoaXMuX2NvbXBhcmU7XHJcbiAgICAgICAgdmFyIHRoaXNDdXJzb3IgPSBCVHJlZS5tYWtlRGlmZkN1cnNvcih0aGlzKTtcclxuICAgICAgICB2YXIgb3RoZXJDdXJzb3IgPSBCVHJlZS5tYWtlRGlmZkN1cnNvcihvdGhlcik7XHJcbiAgICAgICAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgaG93IHRoaXNTdGVwcGVkTGFzdCBpcyBpbml0aWFsaXplZC5cclxuICAgICAgICAvLyBTdGVwIG9yZGVyIGlzIG9ubHkgdXNlZCB3aGVuIGVpdGhlciBjdXJzb3IgaXMgYXQgYSBsZWFmLCBhbmQgY3Vyc29ycyBhbHdheXMgc3RhcnQgYXQgYSBub2RlLlxyXG4gICAgICAgIHZhciB0aGlzU3VjY2VzcyA9IHRydWUsIG90aGVyU3VjY2VzcyA9IHRydWUsIHByZXZDdXJzb3JPcmRlciA9IEJUcmVlLmNvbXBhcmUodGhpc0N1cnNvciwgb3RoZXJDdXJzb3IsIF9jb21wYXJlKTtcclxuICAgICAgICB3aGlsZSAodGhpc1N1Y2Nlc3MgJiYgb3RoZXJTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJzb3JPcmRlciA9IEJUcmVlLmNvbXBhcmUodGhpc0N1cnNvciwgb3RoZXJDdXJzb3IsIF9jb21wYXJlKTtcclxuICAgICAgICAgICAgdmFyIHRoaXNMZWFmID0gdGhpc0N1cnNvci5sZWFmLCB0aGlzSW50ZXJuYWxTcGluZSA9IHRoaXNDdXJzb3IuaW50ZXJuYWxTcGluZSwgdGhpc0xldmVsSW5kaWNlcyA9IHRoaXNDdXJzb3IubGV2ZWxJbmRpY2VzO1xyXG4gICAgICAgICAgICB2YXIgb3RoZXJMZWFmID0gb3RoZXJDdXJzb3IubGVhZiwgb3RoZXJJbnRlcm5hbFNwaW5lID0gb3RoZXJDdXJzb3IuaW50ZXJuYWxTcGluZSwgb3RoZXJMZXZlbEluZGljZXMgPSBvdGhlckN1cnNvci5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzTGVhZiB8fCBvdGhlckxlYWYpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJzb3JzIHdlcmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gbGFzdCBzdGVwLCB0aGVuIHRoZXJlIGlzIG5vIHdvcmsgdG8gYmUgZG9uZS5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2Q3Vyc29yT3JkZXIgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yT3JkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNMZWFmICYmIG90aGVyTGVhZiAmJiBkaWZmZXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVxdWFsIGtleXMsIGNoZWNrIGZvciBtb2RpZmljYXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsVGhpcyA9IHRoaXNMZWFmLnZhbHVlc1t0aGlzTGV2ZWxJbmRpY2VzW3RoaXNMZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbE90aGVyID0gb3RoZXJMZWFmLnZhbHVlc1tvdGhlckxldmVsSW5kaWNlc1tvdGhlckxldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5pcyh2YWxUaGlzLCB2YWxPdGhlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZGlmZmVyZW50KHRoaXNDdXJzb3IuY3VycmVudEtleSwgdmFsVGhpcywgdmFsT3RoZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnNvck9yZGVyID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlLCB3ZSBrbm93IHRoYXQgZWl0aGVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAxLiBvdGhlckN1cnNvciBzdGVwcGVkIGxhc3QgZnJvbSBhIHN0YXJ0aW5nIHBvc2l0aW9uIHRoYXQgdHJhaWxlZCB0aGlzQ3Vyc29yLCBhbmQgaXMgc3RpbGwgYmVoaW5kLCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAyLiB0aGlzQ3Vyc29yIHN0ZXBwZWQgbGFzdCBhbmQgbGVhcGZyb2dnZWQgb3RoZXJDdXJzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIG9mIHRoZXNlIGNhc2VzIGlzIGFuIFwib25seSBvdGhlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckxlYWYgJiYgb25seU90aGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3RoZXJWYWwgPSBvdGhlckxlYWYudmFsdWVzW290aGVyTGV2ZWxJbmRpY2VzW290aGVyTGV2ZWxJbmRpY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvbmx5T3RoZXIob3RoZXJDdXJzb3IuY3VycmVudEtleSwgb3RoZXJWYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnJlYWspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5icmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvbmx5VGhpcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0xlYWYgJiYgcHJldkN1cnNvck9yZGVyICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsVGhpcyA9IHRoaXNMZWFmLnZhbHVlc1t0aGlzTGV2ZWxJbmRpY2VzW3RoaXNMZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9ubHlUaGlzKHRoaXNDdXJzb3IuY3VycmVudEtleSwgdmFsVGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5icmVhaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzTGVhZiAmJiAhb3RoZXJMZWFmICYmIGN1cnNvck9yZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdFRoaXMgPSB0aGlzSW50ZXJuYWxTcGluZS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxhc3RPdGhlciA9IG90aGVySW50ZXJuYWxTcGluZS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVUaGlzID0gdGhpc0ludGVybmFsU3BpbmVbbGFzdFRoaXNdW3RoaXNMZXZlbEluZGljZXNbbGFzdFRoaXNdXTtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlT3RoZXIgPSBvdGhlckludGVybmFsU3BpbmVbbGFzdE90aGVyXVtvdGhlckxldmVsSW5kaWNlc1tsYXN0T3RoZXJdXTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlT3RoZXIgPT09IG5vZGVUaGlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldkN1cnNvck9yZGVyID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzU3VjY2VzcyA9IEJUcmVlLnN0ZXAodGhpc0N1cnNvciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJTdWNjZXNzID0gQlRyZWUuc3RlcChvdGhlckN1cnNvciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkN1cnNvck9yZGVyID0gY3Vyc29yT3JkZXI7XHJcbiAgICAgICAgICAgIGlmIChjdXJzb3JPcmRlciA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXNTdWNjZXNzID0gQlRyZWUuc3RlcCh0aGlzQ3Vyc29yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG90aGVyU3VjY2VzcyA9IEJUcmVlLnN0ZXAob3RoZXJDdXJzb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzU3VjY2VzcyAmJiBvbmx5VGhpcylcclxuICAgICAgICAgICAgcmV0dXJuIEJUcmVlLmZpbmlzaEN1cnNvcldhbGsodGhpc0N1cnNvciwgb3RoZXJDdXJzb3IsIF9jb21wYXJlLCBvbmx5VGhpcyk7XHJcbiAgICAgICAgaWYgKG90aGVyU3VjY2VzcyAmJiBvbmx5T3RoZXIpXHJcbiAgICAgICAgICAgIHJldHVybiBCVHJlZS5maW5pc2hDdXJzb3JXYWxrKG90aGVyQ3Vyc29yLCB0aGlzQ3Vyc29yLCBfY29tcGFyZSwgb25seU90aGVyKTtcclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBkaWZmQWdhaW5zdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQlRyZWUuZmluaXNoQ3Vyc29yV2FsayA9IGZ1bmN0aW9uIChjdXJzb3IsIGN1cnNvckZpbmlzaGVkLCBjb21wYXJlS2V5cywgY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgY29tcGFyZWQgPSBCVHJlZS5jb21wYXJlKGN1cnNvciwgY3Vyc29yRmluaXNoZWQsIGNvbXBhcmVLZXlzKTtcclxuICAgICAgICBpZiAoY29tcGFyZWQgPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKCFCVHJlZS5zdGVwKGN1cnNvcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb21wYXJlZCA8IDApIHtcclxuICAgICAgICAgICAgY2hlY2soZmFsc2UsIFwiY3Vyc29yIHdhbGsgdGVybWluYXRlZCBlYXJseVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJUcmVlLnN0ZXBUb0VuZChjdXJzb3IsIGNhbGxiYWNrKTtcclxuICAgIH07XHJcbiAgICBCVHJlZS5zdGVwVG9FbmQgPSBmdW5jdGlvbiAoY3Vyc29yLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBjYW5TdGVwID0gdHJ1ZTtcclxuICAgICAgICB3aGlsZSAoY2FuU3RlcCkge1xyXG4gICAgICAgICAgICB2YXIgbGVhZiA9IGN1cnNvci5sZWFmLCBsZXZlbEluZGljZXMgPSBjdXJzb3IubGV2ZWxJbmRpY2VzLCBjdXJyZW50S2V5ID0gY3Vyc29yLmN1cnJlbnRLZXk7XHJcbiAgICAgICAgICAgIGlmIChsZWFmKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsZWFmLnZhbHVlc1tsZXZlbEluZGljZXNbbGV2ZWxJbmRpY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFjayhjdXJyZW50S2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5icmVhaylcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhblN0ZXAgPSBCVHJlZS5zdGVwKGN1cnNvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgQlRyZWUubWFrZURpZmZDdXJzb3IgPSBmdW5jdGlvbiAodHJlZSkge1xyXG4gICAgICAgIHZhciBfcm9vdCA9IHRyZWUuX3Jvb3QsIGhlaWdodCA9IHRyZWUuaGVpZ2h0O1xyXG4gICAgICAgIHJldHVybiB7IGhlaWdodDogaGVpZ2h0LCBpbnRlcm5hbFNwaW5lOiBbW19yb290XV0sIGxldmVsSW5kaWNlczogWzBdLCBsZWFmOiB1bmRlZmluZWQsIGN1cnJlbnRLZXk6IF9yb290Lm1heEtleSgpIH07XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZHZhbmNlcyB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIHdhbGsgb2YgaXRzIHRyZWUuXHJcbiAgICAgKiBDdXJzb3JzIGFyZSB3YWxrZWQgYmFja3dhcmRzIGluIHNvcnQgb3JkZXIsIGFzIHRoaXMgYWxsb3dzIHRoZW0gdG8gbGV2ZXJhZ2UgbWF4S2V5KCkgaW4gb3JkZXIgdG8gYmUgY29tcGFyZWQgaW4gTygxKS5cclxuICAgICAqIEBwYXJhbSBjdXJzb3IgVGhlIGN1cnNvciB0byBzdGVwXHJcbiAgICAgKiBAcGFyYW0gc3RlcFRvTm9kZSBJZiB0cnVlLCB0aGUgY3Vyc29yIHdpbGwgYmUgYWR2YW5jZWQgdG8gdGhlIG5leHQgbm9kZSAoc2tpcHBpbmcgdmFsdWVzKVxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RlcCB3YXMgY29tcGxldGVkIGFuZCBmYWxzZSBpZiB0aGUgc3RlcCB3b3VsZCBoYXZlIGNhdXNlZCB0aGUgY3Vyc29yIHRvIG1vdmUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHRyZWUuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnN0ZXAgPSBmdW5jdGlvbiAoY3Vyc29yLCBzdGVwVG9Ob2RlKSB7XHJcbiAgICAgICAgdmFyIGludGVybmFsU3BpbmUgPSBjdXJzb3IuaW50ZXJuYWxTcGluZSwgbGV2ZWxJbmRpY2VzID0gY3Vyc29yLmxldmVsSW5kaWNlcywgbGVhZiA9IGN1cnNvci5sZWFmO1xyXG4gICAgICAgIGlmIChzdGVwVG9Ob2RlID09PSB0cnVlIHx8IGxlYWYpIHtcclxuICAgICAgICAgICAgdmFyIGxldmVsc0xlbmd0aCA9IGxldmVsSW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIC8vIFN0ZXAgdG8gdGhlIG5leHQgbm9kZSBvbmx5IGlmOlxyXG4gICAgICAgICAgICAvLyAtIFdlIGFyZSBleHBsaWNpdGx5IGRpcmVjdGVkIHRvIHZpYSBzdGVwVG9Ob2RlLCBvclxyXG4gICAgICAgICAgICAvLyAtIFRoZXJlIGFyZSBubyBrZXkvdmFsdWUgcGFpcnMgbGVmdCB0byBzdGVwIHRvIGluIHRoaXMgbGVhZlxyXG4gICAgICAgICAgICBpZiAoc3RlcFRvTm9kZSA9PT0gdHJ1ZSB8fCBsZXZlbEluZGljZXNbbGV2ZWxzTGVuZ3RoIC0gMV0gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBzcGluZUxlbmd0aCA9IGludGVybmFsU3BpbmUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgLy8gUm9vdCBpcyBsZWFmXHJcbiAgICAgICAgICAgICAgICBpZiAoc3BpbmVMZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gV2FsayBiYWNrIHVwIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYSBuZXcgc3VidHJlZSB0byBkZXNjZW5kIGludG9cclxuICAgICAgICAgICAgICAgIHZhciBub2RlTGV2ZWxJbmRleCA9IHNwaW5lTGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIHZhciBsZXZlbEluZGV4V2Fsa0JhY2sgPSBub2RlTGV2ZWxJbmRleDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChsZXZlbEluZGV4V2Fsa0JhY2sgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbEluZGljZXNbbGV2ZWxJbmRleFdhbGtCYWNrXSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsSW5kZXhXYWxrQmFjayA8IGxldmVsc0xlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBsZWFmIHN0YXRlIGZyb20gY3Vyc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IubGVhZiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsSW5kaWNlcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3YWxrZWQgdXB3YXJkcyBwYXN0IGFueSBpbnRlcm5hbCBub2RlLCBzbGljZSB0aGVtIG91dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWxJbmRleFdhbGtCYWNrIDwgbm9kZUxldmVsSW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IuaW50ZXJuYWxTcGluZSA9IGludGVybmFsU3BpbmUuc2xpY2UoMCwgbGV2ZWxJbmRleFdhbGtCYWNrICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gbmV3IGludGVybmFsIG5vZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmN1cnJlbnRLZXkgPSBpbnRlcm5hbFNwaW5lW2xldmVsSW5kZXhXYWxrQmFja11bLS1sZXZlbEluZGljZXNbbGV2ZWxJbmRleFdhbGtCYWNrXV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXZlbEluZGV4V2Fsa0JhY2stLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEN1cnNvciBpcyBpbiB0aGUgZmFyIGxlZnQgbGVhZiBvZiB0aGUgdHJlZSwgbm8gbW9yZSBub2RlcyB0byBlbnVtZXJhdGVcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gbmV3IGxlYWYgdmFsdWVcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gLS1sZXZlbEluZGljZXNbbGV2ZWxzTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGxlYWYua2V5c1t2YWx1ZUluZGV4XTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBDdXJzb3IgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWx1ZSBpbiBhIGxlYWYsIHNvIG1vdmUgZG93bndhcmRzXHJcbiAgICAgICAgICAgIHZhciBuZXh0TGV2ZWwgPSBpbnRlcm5hbFNwaW5lLmxlbmd0aDtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRMZXZlbCA9IG5leHRMZXZlbCAtIDE7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gaW50ZXJuYWxTcGluZVtjdXJyZW50TGV2ZWxdW2xldmVsSW5kaWNlc1tjdXJyZW50TGV2ZWxdXTtcclxuICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWFmKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBFbnRlcmluZyBpbnRvIGEgbGVhZi4gU2V0IHRoZSBjdXJzb3IgdG8gcG9pbnQgYXQgdGhlIGxhc3Qga2V5L3ZhbHVlIHBhaXIuXHJcbiAgICAgICAgICAgICAgICBjdXJzb3IubGVhZiA9IG5vZGU7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVJbmRleCA9IGxldmVsSW5kaWNlc1tuZXh0TGV2ZWxdID0gbm9kZS52YWx1ZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGN1cnNvci5jdXJyZW50S2V5ID0gbm9kZS5rZXlzW3ZhbHVlSW5kZXhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsU3BpbmVbbmV4dExldmVsXSA9IGNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkSW5kZXggPSBjaGlsZHJlbi5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgbGV2ZWxJbmRpY2VzW25leHRMZXZlbF0gPSBjaGlsZEluZGV4O1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yLmN1cnJlbnRLZXkgPSBjaGlsZHJlbltjaGlsZEluZGV4XS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJlcyB0aGUgdHdvIGN1cnNvcnMuIFJldHVybnMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoaWNoIGN1cnNvciBpcyBhaGVhZCBpbiBhIHdhbGsuXHJcbiAgICAgKiBOb3RlIHRoYXQgY3Vyc29ycyBhcmUgYWR2YW5jZWQgaW4gcmV2ZXJzZSBzb3J0aW5nIG9yZGVyLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnNvckEsIGN1cnNvckIsIGNvbXBhcmVLZXlzKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodEEgPSBjdXJzb3JBLmhlaWdodCwgY3VycmVudEtleUEgPSBjdXJzb3JBLmN1cnJlbnRLZXksIGxldmVsSW5kaWNlc0EgPSBjdXJzb3JBLmxldmVsSW5kaWNlcztcclxuICAgICAgICB2YXIgaGVpZ2h0QiA9IGN1cnNvckIuaGVpZ2h0LCBjdXJyZW50S2V5QiA9IGN1cnNvckIuY3VycmVudEtleSwgbGV2ZWxJbmRpY2VzQiA9IGN1cnNvckIubGV2ZWxJbmRpY2VzO1xyXG4gICAgICAgIC8vIFJldmVyc2UgdGhlIGNvbXBhcmlzb24gb3JkZXIsIGFzIGN1cnNvcnMgYXJlIGFkdmFuY2VkIGluIHJldmVyc2Ugc29ydGluZyBvcmRlclxyXG4gICAgICAgIHZhciBrZXlDb21wYXJpc29uID0gY29tcGFyZUtleXMoY3VycmVudEtleUIsIGN1cnJlbnRLZXlBKTtcclxuICAgICAgICBpZiAoa2V5Q29tcGFyaXNvbiAhPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Q29tcGFyaXNvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTm9ybWFsaXplIGRlcHRoIHZhbHVlcyByZWxhdGl2ZSB0byB0aGUgc2hvcnRlc3QgdHJlZS5cclxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBjb25jdXJyZW50IGN1cnNvciB3YWxrcyBvZiB0cmVlcyBvZiBkaWZmZXJpbmcgaGVpZ2h0cyBjYW4gcmVsaWFibHkgbGFuZCBvbiBzaGFyZWQgbm9kZXMgYXQgdGhlIHNhbWUgdGltZS5cclxuICAgICAgICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIGEgY3Vyc29yIHRoYXQgaXMgb24gYW4gaW50ZXJuYWwgbm9kZSBhdCBkZXB0aCBEMSB3aXRoIG1heEtleSBYIGlzIGNvbnNpZGVyZWQgXCJiZWhpbmRcIiBhIGN1cnNvciBvbiBhblxyXG4gICAgICAgIC8vIGludGVybmFsIG5vZGUgYXQgZGVwdGggRDIgd2l0aCBtYXhLZXkgWSwgd2hlbiBEMSA8IEQyLiBUaHVzLCBhbHdheXMgd2Fsa2luZyB0aGUgY3Vyc29yIHRoYXQgaXMgXCJiZWhpbmRcIiB3aWxsIGFsbG93IHRoZSBjdXJzb3JcclxuICAgICAgICAvLyBhdCBzaGFsbG93ZXIgZGVwdGggKGJ1dCBlcXVhbCBtYXhLZXkpIHRvIFwiY2F0Y2ggdXBcIiBhbmQgbGFuZCBvbiBzaGFyZWQgbm9kZXMuXHJcbiAgICAgICAgdmFyIGhlaWdodE1pbiA9IGhlaWdodEEgPCBoZWlnaHRCID8gaGVpZ2h0QSA6IGhlaWdodEI7XHJcbiAgICAgICAgdmFyIGRlcHRoQU5vcm1hbGl6ZWQgPSBsZXZlbEluZGljZXNBLmxlbmd0aCAtIChoZWlnaHRBIC0gaGVpZ2h0TWluKTtcclxuICAgICAgICB2YXIgZGVwdGhCTm9ybWFsaXplZCA9IGxldmVsSW5kaWNlc0IubGVuZ3RoIC0gKGhlaWdodEIgLSBoZWlnaHRNaW4pO1xyXG4gICAgICAgIHJldHVybiBkZXB0aEFOb3JtYWxpemVkIC0gZGVwdGhCTm9ybWFsaXplZDtcclxuICAgIH07XHJcbiAgICAvLyBFbmQgb2YgaGVscGVyIG1ldGhvZHMgZm9yIGRpZmZBZ2FpbnN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLyoqIFJldHVybnMgYSBuZXcgaXRlcmF0b3IgZm9yIGl0ZXJhdGluZyB0aGUga2V5cyBvZiBlYWNoIHBhaXIgaW4gYXNjZW5kaW5nIG9yZGVyLlxyXG4gICAgICogIEBwYXJhbSBmaXJzdEtleTogTWluaW11bSBrZXkgdG8gaW5jbHVkZSBpbiB0aGUgb3V0cHV0LiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoZmlyc3RLZXkpIHtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXMoZmlyc3RLZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IGl0Lm5leHQoKTtcclxuICAgICAgICAgICAgaWYgKG4udmFsdWUpXHJcbiAgICAgICAgICAgICAgICBuLnZhbHVlID0gbi52YWx1ZVswXTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBuZXcgaXRlcmF0b3IgZm9yIGl0ZXJhdGluZyB0aGUgdmFsdWVzIG9mIGVhY2ggcGFpciBpbiBvcmRlciBieSBrZXkuXHJcbiAgICAgKiAgQHBhcmFtIGZpcnN0S2V5OiBNaW5pbXVtIGtleSB3aG9zZSBhc3NvY2lhdGVkIHZhbHVlIGlzIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKGZpcnN0S2V5KSB7XHJcbiAgICAgICAgdmFyIGl0ID0gdGhpcy5lbnRyaWVzKGZpcnN0S2V5LCBSZXVzZWRBcnJheSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIG4gPSBpdC5uZXh0KCk7XHJcbiAgICAgICAgICAgIGlmIChuLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgbi52YWx1ZSA9IG4udmFsdWVbMV07XHJcbiAgICAgICAgICAgIHJldHVybiBuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCVHJlZS5wcm90b3R5cGUsIFwibWF4Tm9kZVNpemVcIiwge1xyXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgLy8gQWRkaXRpb25hbCBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvKiogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4vdmFsdWVzIGJlZm9yZSBub2RlcyB3aWxsIHNwbGl0LiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4Tm9kZVNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqIEdldHMgdGhlIGxvd2VzdCBrZXkgaW4gdGhlIHRyZWUuIENvbXBsZXhpdHk6IE8obG9nIHNpemUpICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubWluS2V5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcm9vdC5taW5LZXkoKTsgfTtcclxuICAgIC8qKiBHZXRzIHRoZSBoaWdoZXN0IGtleSBpbiB0aGUgdHJlZS4gQ29tcGxleGl0eTogTygxKSAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm1heEtleSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3Jvb3QubWF4S2V5KCk7IH07XHJcbiAgICAvKiogUXVpY2tseSBjbG9uZXMgdGhlIHRyZWUgYnkgbWFya2luZyB0aGUgcm9vdCBub2RlIGFzIHNoYXJlZC5cclxuICAgICAqICBCb3RoIGNvcGllcyByZW1haW4gZWRpdGFibGUuIFdoZW4geW91IG1vZGlmeSBlaXRoZXIgY29weSwgYW55XHJcbiAgICAgKiAgbm9kZXMgdGhhdCBhcmUgc2hhcmVkIChvciBwb3RlbnRpYWxseSBzaGFyZWQpIGJldHdlZW4gdGhlIHR3b1xyXG4gICAgICogIGNvcGllcyBhcmUgY2xvbmVkIHNvIHRoYXQgdGhlIGNoYW5nZXMgZG8gbm90IGFmZmVjdCBvdGhlciBjb3BpZXMuXHJcbiAgICAgKiAgVGhpcyBpcyBrbm93biBhcyBjb3B5LW9uLXdyaXRlIGJlaGF2aW9yLCBvciBcImxhenkgY29weWluZ1wiLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuaXNTaGFyZWQgPSB0cnVlO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQlRyZWUodW5kZWZpbmVkLCB0aGlzLl9jb21wYXJlLCB0aGlzLl9tYXhOb2RlU2l6ZSk7XHJcbiAgICAgICAgcmVzdWx0Ll9yb290ID0gdGhpcy5fcm9vdDtcclxuICAgICAgICByZXN1bHQuX3NpemUgPSB0aGlzLl9zaXplO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgLyoqIFBlcmZvcm1zIGEgZ3JlZWR5IGNsb25lLCBpbW1lZGlhdGVseSBkdXBsaWNhdGluZyBhbnkgbm9kZXMgdGhhdCBhcmVcclxuICAgICAqICBub3QgY3VycmVudGx5IG1hcmtlZCBhcyBzaGFyZWQsIGluIG9yZGVyIHRvIGF2b2lkIG1hcmtpbmcgYW55XHJcbiAgICAgKiAgYWRkaXRpb25hbCBub2RlcyBhcyBzaGFyZWQuXHJcbiAgICAgKiAgQHBhcmFtIGZvcmNlIENsb25lIGFsbCBub2RlcywgZXZlbiBzaGFyZWQgb25lcy5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdyZWVkeUNsb25lID0gZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCVHJlZSh1bmRlZmluZWQsIHRoaXMuX2NvbXBhcmUsIHRoaXMuX21heE5vZGVTaXplKTtcclxuICAgICAgICByZXN1bHQuX3Jvb3QgPSB0aGlzLl9yb290LmdyZWVkeUNsb25lKGZvcmNlKTtcclxuICAgICAgICByZXN1bHQuX3NpemUgPSB0aGlzLl9zaXplO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgZmlsbGVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSB0cmVlLCBzb3J0ZWQgYnkga2V5ICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIChtYXhMZW5ndGgpIHtcclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSB2b2lkIDApIHsgbWF4TGVuZ3RoID0gMHg3RkZGRkZGRjsgfVxyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbktleSgpLCBtYXggPSB0aGlzLm1heEtleSgpO1xyXG4gICAgICAgIGlmIChtaW4gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2UobWluLCBtYXgsIHRydWUsIG1heExlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfTtcclxuICAgIC8qKiBHZXRzIGFuIGFycmF5IG9mIGFsbCBrZXlzLCBzb3J0ZWQgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5rZXlzQXJyYXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcclxuICAgICAgICB0aGlzLl9yb290LmZvclJhbmdlKHRoaXMubWluS2V5KCksIHRoaXMubWF4S2V5KCksIHRydWUsIGZhbHNlLCB0aGlzLCAwLCBmdW5jdGlvbiAoaywgdikgeyByZXN1bHRzLnB1c2goayk7IH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfTtcclxuICAgIC8qKiBHZXRzIGFuIGFycmF5IG9mIGFsbCB2YWx1ZXMsIHNvcnRlZCBieSBrZXkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS52YWx1ZXNBcnJheSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSwgdGhpcy5tYXhLZXkoKSwgdHJ1ZSwgZmFsc2UsIHRoaXMsIDAsIGZ1bmN0aW9uIChrLCB2KSB7IHJlc3VsdHMucHVzaCh2KTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0cmVlJ3MgZGF0YSBiYXNlZCBvbiB0b0FycmF5KCkuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9BcnJheSgpLnRvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFN0b3JlcyBhIGtleS12YWx1ZSBwYWlyIG9ubHkgaWYgdGhlIGtleSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyZWUuXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmV3IGtleSB3YXMgYWRkZWRcclxuICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuc2V0SWZOb3RQcmVzZW50ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXQoa2V5LCB2YWx1ZSwgZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IHBhaXIgd2hvc2Uga2V5IGlzIGxhcmdlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IChvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZSkuXHJcbiAgICAgKiBJZiBrZXkgPT09IHVuZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsb3dlc3QgcGFpci5cclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMsIHRvXHJcbiAgICAgKiBhdm9pZCBjcmVhdGluZyBhIG5ldyBhcnJheSBvbiBldmVyeSBpdGVyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0SGlnaGVyUGFpciA9IGZ1bmN0aW9uIChrZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV1c2VkQXJyYXkgPSByZXVzZWRBcnJheSB8fCBbXTtcclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmdldFBhaXJPck5leHRIaWdoZXIoa2V5LCB0aGlzLl9jb21wYXJlLCBmYWxzZSwgcmV1c2VkQXJyYXkpO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IGtleSBsYXJnZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGtleSwgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUuXHJcbiAgICAgKiAgQWxzbywgbmV4dEhpZ2hlcktleSh1bmRlZmluZWQpIHJldHVybnMgdGhlIGxvd2VzdCBrZXkuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0SGlnaGVyS2V5ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBwID0gdGhpcy5uZXh0SGlnaGVyUGFpcihrZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gcCAmJiBwWzBdO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IHBhaXIgd2hvc2Uga2V5IGlzIHNtYWxsZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGtleSAob3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUpLlxyXG4gICAgICogIElmIGtleSA9PT0gdW5kZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGhpZ2hlc3QgcGFpci5cclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMsIHRvXHJcbiAgICAgKiAgICAgICAgYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubmV4dExvd2VyUGFpciA9IGZ1bmN0aW9uIChrZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV1c2VkQXJyYXkgPSByZXVzZWRBcnJheSB8fCBbXTtcclxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmdldFBhaXJPck5leHRMb3dlcihrZXksIHRoaXMuX2NvbXBhcmUsIGZhbHNlLCByZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQga2V5IHNtYWxsZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGtleSwgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUuXHJcbiAgICAgKiAgQWxzbywgbmV4dExvd2VyS2V5KHVuZGVmaW5lZCkgcmV0dXJucyB0aGUgaGlnaGVzdCBrZXkuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0TG93ZXJLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLm5leHRMb3dlclBhaXIoa2V5LCBSZXVzZWRBcnJheSk7XHJcbiAgICAgICAgcmV0dXJuIHAgJiYgcFswXTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBwbGllZCBrZXkgaWYgaXQgZXhpc3RzXHJcbiAgICAgKiAgb3IgdGhlIHBhaXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXh0IGxvd2VyIHBhaXIgb3RoZXJ3aXNlLiBJZiB0aGVyZSBpcyBub1xyXG4gICAgICogIG5leHQgbG93ZXIgcGFpciwgdW5kZWZpbmVkIGlzIHJldHVybmVkLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqICAgICAgICBhdm9pZCBjcmVhdGluZyBhIG5ldyBhcnJheSBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcyBtZXRob2QuXHJcbiAgICAgKiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdldFBhaXJPck5leHRMb3dlciA9IGZ1bmN0aW9uIChrZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGtleSwgdGhpcy5fY29tcGFyZSwgdHJ1ZSwgcmV1c2VkQXJyYXkgfHwgW10pO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cHBsaWVkIGtleSBpZiBpdCBleGlzdHNcclxuICAgICAqICBvciB0aGUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIG5leHQgbG93ZXIgcGFpciBvdGhlcndpc2UuIElmIHRoZXJlIGlzIG5vXHJcbiAgICAgKiAgbmV4dCBsb3dlciBwYWlyLCB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSByZXVzZWRBcnJheSBPcHRpb25hbCBhcnJheSB1c2VkIHJlcGVhdGVkbHkgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLCB0b1xyXG4gICAgICogICAgICAgIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IGVhY2ggdGltZSB5b3UgY2FsbCB0aGlzIG1ldGhvZC5cclxuICAgICAqICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dEhpZ2hlciA9IGZ1bmN0aW9uIChrZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dEhpZ2hlcihrZXksIHRoaXMuX2NvbXBhcmUsIHRydWUsIHJldXNlZEFycmF5IHx8IFtdKTtcclxuICAgIH07XHJcbiAgICAvKiogRWRpdHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGtleSBpbiB0aGUgdHJlZSwgaWYgaXQgYWxyZWFkeSBleGlzdHMuXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgZXhpc3RlZCwgZmFsc2UgaWYgbm90LlxyXG4gICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5jaGFuZ2VJZlByZXNlbnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgZnVuY3Rpb24gKGssIHYpIHsgcmV0dXJuICh7IHZhbHVlOiB2YWx1ZSB9KTsgfSkgIT09IDA7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZHMgYW4gYXJyYXkgb2YgcGFpcnMgZnJvbSB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMsIHNvcnRlZCBieSBrZXkuXHJcbiAgICAgKiBFYWNoIHJldHVybmVkIHBhaXIgaXMgYWxzbyBhbiBhcnJheTogcGFpclswXSBpcyB0aGUga2V5LCBwYWlyWzFdIGlzIHRoZSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSBsb3cgVGhlIGZpcnN0IGtleSBpbiB0aGUgYXJyYXkgd2lsbCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGxvd2AuXHJcbiAgICAgKiBAcGFyYW0gaGlnaCBUaGlzIG1ldGhvZCByZXR1cm5zIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIElmIHRoZSBgaGlnaGAga2V5IGlzIHByZXNlbnQsIGl0cyBwYWlyIHdpbGwgYmUgaW5jbHVkZWRcclxuICAgICAqICAgICAgICBpbiB0aGUgb3V0cHV0IGlmIGFuZCBvbmx5IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUuIE5vdGU6IGlmIHRoZVxyXG4gICAgICogICAgICAgIGBsb3dgIGtleSBpcyBwcmVzZW50LCBpdCBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC5cclxuICAgICAqIEBwYXJhbSBtYXhMZW5ndGggTGVuZ3RoIGxpbWl0LiBnZXRSYW5nZSB3aWxsIHN0b3Agc2Nhbm5pbmcgdGhlIHRyZWUgd2hlblxyXG4gICAgICogICAgICAgICAgICAgICAgICB0aGUgYXJyYXkgcmVhY2hlcyB0aGlzIHNpemUuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKHJlc3VsdC5sZW5ndGggKyBsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdldFJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIG1heExlbmd0aCkge1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IHZvaWQgMCkgeyBtYXhMZW5ndGggPSAweDNGRkZGRkY7IH1cclxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuZm9yUmFuZ2UobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgZmFsc2UsIHRoaXMsIDAsIGZ1bmN0aW9uIChrLCB2KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChbaywgdl0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5sZW5ndGggPiBtYXhMZW5ndGggPyBCcmVhayA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH07XHJcbiAgICAvKiogQWRkcyBhbGwgcGFpcnMgZnJvbSBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLlxyXG4gICAgICogQHBhcmFtIHBhaXJzIFBhaXJzIHRvIGFkZCB0byB0aGlzIHRyZWUuIElmIHRoZXJlIGFyZSBkdXBsaWNhdGUga2V5cyxcclxuICAgICAqICAgICAgICBsYXRlciBwYWlycyBjdXJyZW50bHkgb3ZlcndyaXRlIGVhcmxpZXIgb25lcyAoZS5nLiBbWzAsMV0sWzAsN11dXHJcbiAgICAgKiAgICAgICAgYXNzb2NpYXRlcyAwIHdpdGggNy4pXHJcbiAgICAgKiBAcGFyYW0gb3ZlcndyaXRlIFdoZXRoZXIgdG8gb3ZlcndyaXRlIHBhaXJzIHRoYXQgYWxyZWFkeSBleGlzdCAoaWYgZmFsc2UsXHJcbiAgICAgKiAgICAgICAgcGFpcnNbaV0gaXMgaWdub3JlZCB3aGVuIHRoZSBrZXkgcGFpcnNbaV1bMF0gYWxyZWFkeSBleGlzdHMuKVxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBwYWlycyBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8ocGFpcnMubGVuZ3RoICogbG9nKHNpemUgKyBwYWlycy5sZW5ndGgpKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuc2V0UGFpcnMgPSBmdW5jdGlvbiAocGFpcnMsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBhZGRlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0KHBhaXJzW2ldWzBdLCBwYWlyc1tpXVsxXSwgb3ZlcndyaXRlKSlcclxuICAgICAgICAgICAgICAgIGFkZGVkKys7XHJcbiAgICAgICAgcmV0dXJuIGFkZGVkO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogU2NhbnMgdGhlIHNwZWNpZmllZCByYW5nZSBvZiBrZXlzLCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkga2V5LlxyXG4gICAgICogTm90ZTogdGhlIGNhbGxiYWNrIGBvbkZvdW5kYCBtdXN0IG5vdCBpbnNlcnQgb3IgcmVtb3ZlIGl0ZW1zIGluIHRoZVxyXG4gICAgICogY29sbGVjdGlvbi4gRG9pbmcgc28gbWF5IGNhdXNlIGluY29ycmVjdCBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlXHJcbiAgICAgKiBjYWxsYmFjayBhZnRlcndhcmQuXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIElmIHRoZSBgaGlnaGAga2V5IGlzIHByZXNlbnQsIGBvbkZvdW5kYCBpcyBjYWxsZWQgZm9yXHJcbiAgICAgKiAgICAgICAgdGhhdCBmaW5hbCBwYWlyIGlmIGFuZCBvbmx5IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUuXHJcbiAgICAgKiBAcGFyYW0gb25Gb3VuZCBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLiBUaGlzXHJcbiAgICAgKiAgICAgICAgZnVuY3Rpb24gY2FuIHJldHVybiB7YnJlYWs6Un0gdG8gc3RvcCBlYXJseSB3aXRoIHJlc3VsdCBSLlxyXG4gICAgICogQHBhcmFtIGluaXRpYWxDb3VudGVyIEluaXRpYWwgdGhpcmQgYXJndW1lbnQgb2Ygb25Gb3VuZC4gVGhpcyB2YWx1ZVxyXG4gICAgICogICAgICAgIGluY3JlYXNlcyBieSBvbmUgZWFjaCB0aW1lIGBvbkZvdW5kYCBpcyBjYWxsZWQuIERlZmF1bHQ6IDBcclxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgdmFsdWVzIGZvdW5kLCBvciBSIGlmIHRoZSBjYWxsYmFjayByZXR1cm5lZFxyXG4gICAgICogICAgICAgIGB7YnJlYWs6Un1gIHRvIHN0b3AgZWFybHkuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKG51bWJlciBvZiBpdGVtcyBzY2FubmVkICsgbG9nIHNpemUpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5mb3JSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHZhciByID0gdGhpcy5fcm9vdC5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBmYWxzZSwgdGhpcywgaW5pdGlhbENvdW50ZXIgfHwgMCwgb25Gb3VuZCk7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByID09PSBcIm51bWJlclwiID8gciA6IHIuYnJlYWs7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZXMgdmFsdWVzIGZvciBhIHN1YnNlcXVlbmNlIG9mIGtleXMuXHJcbiAgICAgKiBOb3RlOiB0aGUgY2FsbGJhY2sgYG9uRm91bmRgIHNob3VsZCBpZGVhbGx5IGJlIGEgcHVyZSBmdW5jdGlvbi5cclxuICAgICAqICAgU3BlY2ZpY2FsbHksIGl0IG11c3Qgbm90IGluc2VydCBpdGVtcywgY2FsbCBjbG9uZSgpLCBvciBjaGFuZ2VcclxuICAgICAqICAgdGhlIGNvbGxlY3Rpb24gZXhjZXB0IHZpYSByZXR1cm4gdmFsdWU7IG91dC1vZi1iYW5kIGVkaXRpbmcgbWF5XHJcbiAgICAgKiAgIGNhdXNlIGFuIGV4Y2VwdGlvbiBvciBtYXkgY2F1c2UgaW5jb3JyZWN0IGRhdGEgdG8gYmUgc2VudCB0b1xyXG4gICAgICogICB0aGUgY2FsbGJhY2sgKGR1cGxpY2F0ZSBvciBtaXNzZWQgaXRlbXMpLiBJdCBtdXN0IG5vdCBjYXVzZSBhXHJcbiAgICAgKiAgIGNsb25lKCkgb2YgdGhlIGNvbGxlY3Rpb24sIG90aGVyd2lzZSB0aGUgY2xvbmUgY291bGQgYmUgbW9kaWZpZWRcclxuICAgICAqICAgYnkgY2hhbmdlcyByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxiYWNrLlxyXG4gICAgICogQHBhcmFtIGxvdyBUaGUgZmlyc3Qga2V5IHNjYW5uZWQgd2lsbCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGxvd2AuXHJcbiAgICAgKiBAcGFyYW0gaGlnaCBTY2FubmluZyBzdG9wcyB3aGVuIGEga2V5IGxhcmdlciB0aGFuIHRoaXMgaXMgcmVhY2hlZC5cclxuICAgICAqIEBwYXJhbSBpbmNsdWRlSGlnaCBJZiB0aGUgYGhpZ2hgIGtleSBpcyBwcmVzZW50LCBgb25Gb3VuZGAgaXMgY2FsbGVkIGZvclxyXG4gICAgICogICAgICAgIHRoYXQgZmluYWwgcGFpciBpZiBhbmQgb25seSBpZiB0aGlzIHBhcmFtZXRlciBpcyB0cnVlLlxyXG4gICAgICogQHBhcmFtIG9uRm91bmQgQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmb3IgZWFjaCBrZXktdmFsdWUgcGFpci4gVGhpc1xyXG4gICAgICogICAgICAgIGZ1bmN0aW9uIGNhbiByZXR1cm4gYHt2YWx1ZTp2fWAgdG8gY2hhbmdlIHRoZSB2YWx1ZSBhc3NvY2lhdGVkXHJcbiAgICAgKiAgICAgICAgd2l0aCB0aGUgY3VycmVudCBrZXksIGB7ZGVsZXRlOnRydWV9YCB0byBkZWxldGUgdGhlIGN1cnJlbnQgcGFpcixcclxuICAgICAqICAgICAgICBge2JyZWFrOlJ9YCB0byBzdG9wIGVhcmx5IHdpdGggcmVzdWx0IFIsIG9yIGl0IGNhbiByZXR1cm4gbm90aGluZ1xyXG4gICAgICogICAgICAgICh1bmRlZmluZWQgb3Ige30pIHRvIGNhdXNlIG5vIGVmZmVjdCBhbmQgY29udGludWUgaXRlcmF0aW5nLlxyXG4gICAgICogICAgICAgIGB7YnJlYWs6Un1gIGNhbiBiZSBjb21iaW5lZCB3aXRoIG9uZSBvZiB0aGUgb3RoZXIgdHdvIGNvbW1hbmRzLlxyXG4gICAgICogICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBgY291bnRlcmAgaXMgdGhlIG51bWJlciBvZiBpdGVtcyBpdGVyYXRlZFxyXG4gICAgICogICAgICAgIHByZXZpb3VzbHk7IGl0IGVxdWFscyAwIHdoZW4gYG9uRm91bmRgIGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgdmFsdWVzIHNjYW5uZWQsIG9yIFIgaWYgdGhlIGNhbGxiYWNrIHJldHVybmVkXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgdG8gc3RvcCBlYXJseS5cclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogICBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obnVtYmVyIG9mIGl0ZW1zIHNjYW5uZWQgKyBsb2cgc2l6ZSlcclxuICAgICAqICAgTm90ZTogaWYgdGhlIHRyZWUgaGFzIGJlZW4gY2xvbmVkIHdpdGggY2xvbmUoKSwgYW55IHNoYXJlZFxyXG4gICAgICogICBub2RlcyBhcmUgY29waWVkIGJlZm9yZSBgb25Gb3VuZGAgaXMgY2FsbGVkLiBUaGlzIHRha2VzIE8obikgdGltZVxyXG4gICAgICogICB3aGVyZSBuIGlzIHByb3BvcnRpb25hbCB0byB0aGUgYW1vdW50IG9mIHNoYXJlZCBkYXRhIHNjYW5uZWQuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5lZGl0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgb25Gb3VuZCwgaW5pdGlhbENvdW50ZXIpIHtcclxuICAgICAgICB2YXIgcm9vdCA9IHRoaXMuX3Jvb3Q7XHJcbiAgICAgICAgaWYgKHJvb3QuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290ID0gcm9vdC5jbG9uZSgpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciByID0gcm9vdC5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCB0cnVlLCB0aGlzLCBpbml0aWFsQ291bnRlciB8fCAwLCBvbkZvdW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByID09PSBcIm51bWJlclwiID8gciA6IHIuYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB2YXIgaXNTaGFyZWQgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHdoaWxlIChyb290LmtleXMubGVuZ3RoIDw9IDEgJiYgIXJvb3QuaXNMZWFmKSB7XHJcbiAgICAgICAgICAgICAgICBpc1NoYXJlZCB8fCAoaXNTaGFyZWQgPSByb290LmlzU2hhcmVkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290ID0gcm9vdC5rZXlzLmxlbmd0aCA9PT0gMCA/IEVtcHR5TGVhZiA6XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5jaGlsZHJlblswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZiBhbnkgYW5jZXN0b3Igb2YgdGhlIG5ldyByb290IHdhcyBzaGFyZWQsIHRoZSBuZXcgcm9vdCBtdXN0IGFsc28gYmUgc2hhcmVkXHJcbiAgICAgICAgICAgIGlmIChpc1NoYXJlZCkge1xyXG4gICAgICAgICAgICAgICAgcm9vdC5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqIFNhbWUgYXMgYGVkaXRSYW5nZWAgZXhjZXB0IHRoYXQgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgYWxsIHBhaXJzLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmVkaXRBbGwgPSBmdW5jdGlvbiAob25Gb3VuZCwgaW5pdGlhbENvdW50ZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UmFuZ2UodGhpcy5taW5LZXkoKSwgdGhpcy5tYXhLZXkoKSwgdHJ1ZSwgb25Gb3VuZCwgaW5pdGlhbENvdW50ZXIpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHJhbmdlIG9mIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBCKyB0cmVlLlxyXG4gICAgICogQHBhcmFtIGxvdyBUaGUgZmlyc3Qga2V5IHNjYW5uZWQgd2lsbCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGxvd2AuXHJcbiAgICAgKiBAcGFyYW0gaGlnaCBTY2FubmluZyBzdG9wcyB3aGVuIGEga2V5IGxhcmdlciB0aGFuIHRoaXMgaXMgcmVhY2hlZC5cclxuICAgICAqIEBwYXJhbSBpbmNsdWRlSGlnaCBTcGVjaWZpZXMgd2hldGhlciB0aGUgYGhpZ2hgIGtleSwgaWYgcHJlc2VudCwgaXMgZGVsZXRlZC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgd2VyZSBkZWxldGVkLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSArIG51bWJlciBvZiBpdGVtcyBkZWxldGVkKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlUmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBEZWxldGVSYW5nZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIERlbGV0ZXMgYSBzZXJpZXMgb2Yga2V5cyBmcm9tIHRoZSBjb2xsZWN0aW9uLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmRlbGV0ZUtleXMgPSBmdW5jdGlvbiAoa2V5cykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCByID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGV0ZShrZXlzW2ldKSlcclxuICAgICAgICAgICAgICAgIHIrKztcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImhlaWdodFwiLCB7XHJcbiAgICAgICAgLyoqIEdldHMgdGhlIGhlaWdodCBvZiB0aGUgdHJlZTogdGhlIG51bWJlciBvZiBpbnRlcm5hbCBub2RlcyBiZXR3ZWVuIHRoZVxyXG4gICAgICAgICAqICBCVHJlZSBvYmplY3QgYW5kIGl0cyBsZWFmIG5vZGVzICh6ZXJvIGlmIHRoZXJlIGFyZSBubyBpbnRlcm5hbCBub2RlcykuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5fcm9vdDtcclxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IC0xO1xyXG4gICAgICAgICAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0Kys7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5pc0xlYWYgPyB1bmRlZmluZWQgOiBub2RlLmNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqIE1ha2VzIHRoZSBvYmplY3QgcmVhZC1vbmx5IHRvIGVuc3VyZSBpdCBpcyBub3QgYWNjaWRlbnRhbGx5IG1vZGlmaWVkLlxyXG4gICAgICogIEZyZWV6aW5nIGRvZXMgbm90IGhhdmUgdG8gYmUgcGVybWFuZW50OyB1bmZyZWV6ZSgpIHJldmVyc2VzIHRoZSBlZmZlY3QuXHJcbiAgICAgKiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgcmVwbGFjaW5nIG11dGF0b3IgZnVuY3Rpb25zIHdpdGggYSBmdW5jdGlvblxyXG4gICAgICogIHRoYXQgdGhyb3dzIGFuIEVycm9yLiBDb21wYXJlZCB0byB1c2luZyBhIHByb3BlcnR5IChlLmcuIHRoaXMuaXNGcm96ZW4pXHJcbiAgICAgKiAgdGhpcyBpbXBsZW1lbnRhdGlvbiBnaXZlcyBiZXR0ZXIgcGVyZm9ybWFuY2UgaW4gbm9uLWZyb3plbiBCVHJlZXMuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5mcmVlemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHQgPSB0aGlzO1xyXG4gICAgICAgIC8vIE5vdGU6IGFsbCBvdGhlciBtdXRhdG9ycyB1bHRpbWF0ZWx5IGNhbGwgc2V0KCkgb3IgZWRpdFJhbmdlKCkgXHJcbiAgICAgICAgLy8gICAgICAgc28gd2UgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSB0aG9zZSBvdGhlcnMuXHJcbiAgICAgICAgdC5jbGVhciA9IHQuc2V0ID0gdC5lZGl0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRlZCB0byBtb2RpZnkgYSBmcm96ZW4gQlRyZWVcIik7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICAvKiogRW5zdXJlcyBtdXRhdGlvbnMgYXJlIGFsbG93ZWQsIHJldmVyc2luZyB0aGUgZWZmZWN0IG9mIGZyZWV6ZSgpLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnVuZnJlZXplID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgXCJUaGUgb3BlcmFuZCBvZiBhICdkZWxldGUnIG9wZXJhdG9yIG11c3QgYmUgb3B0aW9uYWwuXCJcclxuICAgICAgICAvLyAgICAgICAgICAgICh3cm9uZzogZGVsZXRlIGRvZXMgbm90IGFmZmVjdCB0aGUgcHJvdG90eXBlLilcclxuICAgICAgICBkZWxldGUgdGhpcy5jbGVhcjtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgZGVsZXRlIHRoaXMuc2V0O1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBkZWxldGUgdGhpcy5lZGl0UmFuZ2U7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJpc0Zyb3plblwiLCB7XHJcbiAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHJlZSBhcHBlYXJzIHRvIGJlIGZyb3plbi4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoJ2VkaXRSYW5nZScpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIC8qKiBTY2FucyB0aGUgdHJlZSBmb3Igc2lnbnMgb2Ygc2VyaW91cyBidWdzIChlLmcuIHRoaXMuc2l6ZSBkb2Vzbid0IG1hdGNoXHJcbiAgICAgKiAgbnVtYmVyIG9mIGVsZW1lbnRzLCBpbnRlcm5hbCBub2RlcyBub3QgY2FjaGluZyBtYXggZWxlbWVudCBwcm9wZXJseS4uLilcclxuICAgICAqICBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obnVtYmVyIG9mIG5vZGVzKSwgaS5lLiBPKHNpemUpLiBUaGlzIG1ldGhvZFxyXG4gICAgICogIHNraXBzIHRoZSBtb3N0IGV4cGVuc2l2ZSB0ZXN0IC0gd2hldGhlciBhbGwga2V5cyBhcmUgc29ydGVkIC0gYnV0IGl0XHJcbiAgICAgKiAgZG9lcyBjaGVjayB0aGF0IG1heEtleSgpIG9mIHRoZSBjaGlsZHJlbiBvZiBpbnRlcm5hbCBub2RlcyBhcmUgc29ydGVkLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNoZWNrVmFsaWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLl9yb290LmNoZWNrVmFsaWQoMCwgdGhpcywgMCk7XHJcbiAgICAgICAgY2hlY2soc2l6ZSA9PT0gdGhpcy5zaXplLCBcInNpemUgbWlzbWF0Y2g6IGNvdW50ZWQgXCIsIHNpemUsIFwiYnV0IHN0b3JlZFwiLCB0aGlzLnNpemUpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCVHJlZTtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQlRyZWU7XHJcbi8qKiBBIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IHJldHVybnMgaXRzIGFyZ3VtZW50LCB0eXBlZCBhc1xyXG4gKiAgYElTb3J0ZWRTZXQ8Sz5gIGlmIHRoZSBCVHJlZSBpbXBsZW1lbnRzIGl0LCBhcyBpdCBkb2VzIGlmIGBWIGV4dGVuZHMgdW5kZWZpbmVkYC5cclxuICogIElmIGBWYCBjYW5ub3QgYmUgYHVuZGVmaW5lZGAsIGl0IHJldHVybnMgYHVua25vd25gIGluc3RlYWQuIE9yIGF0IGxlYXN0LCB0aGF0XHJcbiAqICB3YXMgdGhlIGludGVudGlvbiwgYnV0IFR5cGVTY3JpcHQgaXMgYWN0aW5nIHdlaXJkIGFuZCBtYXkgcmV0dXJuIGBJU29ydGVkU2V0PEs+YFxyXG4gKiAgZXZlbiBpZiBgVmAgY2FuJ3QgYmUgYHVuZGVmaW5lZGAgKGRpc2N1c3Npb246IGJ0cmVlLXR5cGVzY3JpcHQgaXNzdWUgIzE0KSAqL1xyXG5mdW5jdGlvbiBhc1NldChidHJlZSkge1xyXG4gICAgcmV0dXJuIGJ0cmVlO1xyXG59XHJcbmV4cG9ydHMuYXNTZXQgPSBhc1NldDtcclxuaWYgKFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3IpIC8vIGl0ZXJhdG9yIGlzIGVxdWl2YWxlbnQgdG8gZW50cmllcygpXHJcbiAgICBCVHJlZS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEJUcmVlLnByb3RvdHlwZS5lbnRyaWVzO1xyXG5CVHJlZS5wcm90b3R5cGUud2hlcmUgPSBCVHJlZS5wcm90b3R5cGUuZmlsdGVyO1xyXG5CVHJlZS5wcm90b3R5cGUuc2V0UmFuZ2UgPSBCVHJlZS5wcm90b3R5cGUuc2V0UGFpcnM7XHJcbkJUcmVlLnByb3RvdHlwZS5hZGQgPSBCVHJlZS5wcm90b3R5cGUuc2V0OyAvLyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIElTZXRTaW5rPEs+XHJcbmZ1bmN0aW9uIGl0ZXJhdG9yKG5leHQpIHtcclxuICAgIGlmIChuZXh0ID09PSB2b2lkIDApIHsgbmV4dCA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pOyB9KTsgfVxyXG4gICAgdmFyIHJlc3VsdCA9IHsgbmV4dDogbmV4dCB9O1xyXG4gICAgaWYgKFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3IpXHJcbiAgICAgICAgcmVzdWx0W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG4vKiogTGVhZiBub2RlIC8gYmFzZSBjbGFzcy4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbnZhciBCTm9kZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEJOb2RlKGtleXMsIHZhbHVlcykge1xyXG4gICAgICAgIGlmIChrZXlzID09PSB2b2lkIDApIHsga2V5cyA9IFtdOyB9XHJcbiAgICAgICAgdGhpcy5rZXlzID0ga2V5cztcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcyB8fCB1bmRlZlZhbHM7XHJcbiAgICAgICAgdGhpcy5pc1NoYXJlZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCTm9kZS5wcm90b3R5cGUsIFwiaXNMZWFmXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY2hpbGRyZW4gPT09IHVuZGVmaW5lZDsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBTaGFyZWQgbWV0aG9kcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5tYXhLZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5c1t0aGlzLmtleXMubGVuZ3RoIC0gMV07XHJcbiAgICB9O1xyXG4gICAgLy8gSWYga2V5IG5vdCBmb3VuZCwgcmV0dXJucyBpXmZhaWxYb3Igd2hlcmUgaSBpcyB0aGUgaW5zZXJ0aW9uIGluZGV4LlxyXG4gICAgLy8gQ2FsbGVycyB0aGF0IGRvbid0IGNhcmUgd2hldGhlciB0aGVyZSB3YXMgYSBtYXRjaCB3aWxsIHNldCBmYWlsWG9yPTAuXHJcbiAgICBCTm9kZS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIChrZXksIGZhaWxYb3IsIGNtcCkge1xyXG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xyXG4gICAgICAgIHZhciBsbyA9IDAsIGhpID0ga2V5cy5sZW5ndGgsIG1pZCA9IGhpID4+IDE7XHJcbiAgICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcclxuICAgICAgICAgICAgdmFyIGMgPSBjbXAoa2V5c1ttaWRdLCBrZXkpO1xyXG4gICAgICAgICAgICBpZiAoYyA8IDApXHJcbiAgICAgICAgICAgICAgICBsbyA9IG1pZCArIDE7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPiAwKSAvLyBrZXkgPCBrZXlzW21pZF1cclxuICAgICAgICAgICAgICAgIGhpID0gbWlkO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjIGlzIE5hTiBvciBvdGhlcndpc2UgaW52YWxpZFxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0ga2V5KSAvLyBhdCBsZWFzdCB0aGUgc2VhcmNoIGtleSBpcyBub3QgTmFOXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJUcmVlOiBOYU4gd2FzIHVzZWQgYXMgYSBrZXlcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkID0gKGxvICsgaGkpID4+IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtaWQgXiBmYWlsWG9yO1xyXG4gICAgICAgIC8vIFVucm9sbGVkIHZlcnNpb246IGJlbmNobWFya3Mgc2hvdyBzYW1lIHNwZWVkLCBub3Qgd29ydGggdXNpbmdcclxuICAgICAgICAvKnZhciBpID0gMSwgYzogbnVtYmVyID0gMCwgc3VtID0gMDtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gNCkge1xyXG4gICAgICAgICAgaSA9IDM7XHJcbiAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gOCkge1xyXG4gICAgICAgICAgICBpID0gNztcclxuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID49IDE2KSB7XHJcbiAgICAgICAgICAgICAgaSA9IDE1O1xyXG4gICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSAzMikge1xyXG4gICAgICAgICAgICAgICAgaSA9IDMxO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID49IDY0KSB7XHJcbiAgICAgICAgICAgICAgICAgIGkgPSAxMjc7XHJcbiAgICAgICAgICAgICAgICAgIGkgKz0gKGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDEpIDwgMCA/IDY0IDogLTY0O1xyXG4gICAgICAgICAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gMzIgOiAtMzI7XHJcbiAgICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gMTYgOiAtMTY7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gOCA6IC04O1xyXG4gICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgKz0gKGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDEpIDwgMCA/IDQgOiAtNDtcclxuICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAyIDogLTI7XHJcbiAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICB9XHJcbiAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gMSA6IC0xO1xyXG4gICAgICAgIGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDE7XHJcbiAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgaWYgKGMgPCAwKSB7XHJcbiAgICAgICAgICArK2k7XHJcbiAgICAgICAgICBjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxO1xyXG4gICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdW0gIT09IHN1bSkge1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0ga2V5KSAvLyBhdCBsZWFzdCB0aGUgc2VhcmNoIGtleSBpcyBub3QgTmFOXHJcbiAgICAgICAgICAgIHJldHVybiBrZXlzLmxlbmd0aCBeIGZhaWxYb3I7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJUcmVlOiBOYU4gd2FzIHVzZWQgYXMgYSBrZXlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjID09PSAwID8gaSA6IGkgXiBmYWlsWG9yOyovXHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIExlYWYgTm9kZTogbWlzYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWluS2V5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmtleXNbMF07XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLm1pblBhaXIgPSBmdW5jdGlvbiAocmV1c2VkQXJyYXkpIHtcclxuICAgICAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXVzZWRBcnJheVswXSA9IHRoaXMua2V5c1swXTtcclxuICAgICAgICByZXVzZWRBcnJheVsxXSA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWF4UGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIGlmICh0aGlzLmtleXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHZhciBsYXN0SW5kZXggPSB0aGlzLmtleXMubGVuZ3RoIC0gMTtcclxuICAgICAgICByZXVzZWRBcnJheVswXSA9IHRoaXMua2V5c1tsYXN0SW5kZXhdO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbbGFzdEluZGV4XTtcclxuICAgICAgICByZXR1cm4gcmV1c2VkQXJyYXk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gdGhpcy52YWx1ZXM7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCTm9kZSh0aGlzLmtleXMuc2xpY2UoMCksIHYgPT09IHVuZGVmVmFscyA/IHYgOiB2LnNsaWNlKDApKTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1NoYXJlZCAmJiAhZm9yY2UgPyB0aGlzIDogdGhpcy5jbG9uZSgpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5LCBkZWZhdWx0VmFsdWUsIHRyZWUpIHtcclxuICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXhPZihrZXksIC0xLCB0cmVlLl9jb21wYXJlKTtcclxuICAgICAgICByZXR1cm4gaSA8IDAgPyBkZWZhdWx0VmFsdWUgOiB0aGlzLnZhbHVlc1tpXTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIGNvbXBhcmUpO1xyXG4gICAgICAgIHZhciBpbmRleE9yTG93ZXIgPSBpIDwgMCA/IH5pIC0gMSA6IChpbmNsdXNpdmUgPyBpIDogaSAtIDEpO1xyXG4gICAgICAgIGlmIChpbmRleE9yTG93ZXIgPj0gMCkge1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IHRoaXMua2V5c1tpbmRleE9yTG93ZXJdO1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVsxXSA9IHRoaXMudmFsdWVzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dEhpZ2hlciA9IGZ1bmN0aW9uIChrZXksIGNvbXBhcmUsIGluY2x1c2l2ZSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXhPZihrZXksIC0xLCBjb21wYXJlKTtcclxuICAgICAgICB2YXIgaW5kZXhPckxvd2VyID0gaSA8IDAgPyB+aSA6IChpbmNsdXNpdmUgPyBpIDogaSArIDEpO1xyXG4gICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzO1xyXG4gICAgICAgIGlmIChpbmRleE9yTG93ZXIgPCBrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IGtleXNbaW5kZXhPckxvd2VyXTtcclxuICAgICAgICAgICAgcmV1c2VkQXJyYXlbMV0gPSB0aGlzLnZhbHVlc1tpbmRleE9yTG93ZXJdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV1c2VkQXJyYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmNoZWNrVmFsaWQgPSBmdW5jdGlvbiAoZGVwdGgsIHRyZWUsIGJhc2VJbmRleCkge1xyXG4gICAgICAgIHZhciBrTCA9IHRoaXMua2V5cy5sZW5ndGgsIHZMID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xyXG4gICAgICAgIGNoZWNrKHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMgPyBrTCA8PSB2TCA6IGtMID09PSB2TCwgXCJrZXlzL3ZhbHVlcyBsZW5ndGggbWlzbWF0Y2g6IGRlcHRoXCIsIGRlcHRoLCBcIndpdGggbGVuZ3Roc1wiLCBrTCwgdkwsIFwiYW5kIGJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIC8vIE5vdGU6IHdlIGRvbid0IGNoZWNrIGZvciBcIm5vZGUgdG9vIHNtYWxsXCIgYmVjYXVzZSBzb21ldGltZXMgYSBub2RlXHJcbiAgICAgICAgLy8gY2FuIGxlZ2l0aW1hdGVseSBoYXZlIHNpemUgMS4gVGhpcyBvY2N1cnMgaWYgdGhlcmUgaXMgYSBiYXRjaCBcclxuICAgICAgICAvLyBkZWxldGlvbiwgbGVhdmluZyBhIG5vZGUgb2Ygc2l6ZSAxLCBhbmQgdGhlIHNpYmxpbmdzIGFyZSBmdWxsIHNvXHJcbiAgICAgICAgLy8gaXQgY2FuJ3QgYmUgbWVyZ2VkIHdpdGggYWRqYWNlbnQgbm9kZXMuIEhvd2V2ZXIsIHRoZSBwYXJlbnQgd2lsbFxyXG4gICAgICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBhdmVyYWdlIG5vZGUgc2l6ZSBpcyBhdCBsZWFzdCBoYWxmIG9mIHRoZSBtYXhpbXVtLlxyXG4gICAgICAgIGNoZWNrKGRlcHRoID09IDAgfHwga0wgPiAwLCBcImVtcHR5IGxlYWYgYXQgZGVwdGhcIiwgZGVwdGgsIFwiYW5kIGJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIHJldHVybiBrTDtcclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTGVhZiBOb2RlOiBzZXQgJiBub2RlIHNwbGl0dGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAtMSwgdHJlZS5fY29tcGFyZSk7XHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAgIC8vIGtleSBkb2VzIG5vdCBleGlzdCB5ZXRcclxuICAgICAgICAgICAgaSA9IH5pO1xyXG4gICAgICAgICAgICB0cmVlLl9zaXplKys7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmtleXMubGVuZ3RoIDwgdHJlZS5fbWF4Tm9kZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluc2VydEluTGVhZihpLCBrZXksIHZhbHVlLCB0cmVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbGVhZiBub2RlIGlzIGZ1bGwgYW5kIG11c3Qgc3BsaXRcclxuICAgICAgICAgICAgICAgIHZhciBuZXdSaWdodFNpYmxpbmcgPSB0aGlzLnNwbGl0T2ZmUmlnaHRTaWRlKCksIHRhcmdldCA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IHRoaXMua2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpIC09IHRoaXMua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3UmlnaHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lmluc2VydEluTGVhZihpLCBrZXksIHZhbHVlLCB0cmVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEtleSBhbHJlYWR5IGV4aXN0c1xyXG4gICAgICAgICAgICBpZiAob3ZlcndyaXRlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWlmeVZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgLy8gdXN1YWxseSB0aGlzIGlzIGEgbm8tb3AsIGJ1dCBzb21lIHVzZXJzIG1heSB3aXNoIHRvIGVkaXQgdGhlIGtleVxyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5yZWlmeVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZXMgPT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXMuc2xpY2UoMCwgdGhpcy5rZXlzLmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5pbnNlcnRJbkxlYWYgPSBmdW5jdGlvbiAoaSwga2V5LCB2YWx1ZSwgdHJlZSkge1xyXG4gICAgICAgIHRoaXMua2V5cy5zcGxpY2UoaSwgMCwga2V5KTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZXMgPT09IHVuZGVmVmFscykge1xyXG4gICAgICAgICAgICB3aGlsZSAodW5kZWZWYWxzLmxlbmd0aCA8IHRyZWUuX21heE5vZGVTaXplKVxyXG4gICAgICAgICAgICAgICAgdW5kZWZWYWxzLnB1c2godW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB1bmRlZlZhbHMuc2xpY2UoMCwgdGhpcy5rZXlzLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVzLnNwbGljZShpLCAwLCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnRha2VGcm9tUmlnaHQgPSBmdW5jdGlvbiAocmhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICBpZiAocmhzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICB2LnB1c2godW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHYgPSB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgIHYucHVzaChyaHMudmFsdWVzLnNoaWZ0KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtleXMucHVzaChyaHMua2V5cy5zaGlmdCgpKTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUudGFrZUZyb21MZWZ0ID0gZnVuY3Rpb24gKGxocykge1xyXG4gICAgICAgIC8vIFJlbWluZGVyOiBwYXJlbnQgbm9kZSBtdXN0IHVwZGF0ZSBpdHMgY29weSBvZiBrZXkgZm9yIHRoaXMgbm9kZVxyXG4gICAgICAgIC8vIGFzc2VydDogbmVpdGhlciBub2RlIGlzIHNoYXJlZFxyXG4gICAgICAgIC8vIGFzc2VydCByaHMua2V5cy5sZW5ndGggPiAobWF4Tm9kZVNpemUvMiAmJiB0aGlzLmtleXMubGVuZ3RoPG1heE5vZGVTaXplKVxyXG4gICAgICAgIHZhciB2ID0gdGhpcy52YWx1ZXM7XHJcbiAgICAgICAgaWYgKGxocy52YWx1ZXMgPT09IHVuZGVmVmFscykge1xyXG4gICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZWYWxzKVxyXG4gICAgICAgICAgICAgICAgdi51bnNoaWZ0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2ID0gdGhpcy5yZWlmeVZhbHVlcygpO1xyXG4gICAgICAgICAgICB2LnVuc2hpZnQobGhzLnZhbHVlcy5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua2V5cy51bnNoaWZ0KGxocy5rZXlzLnBvcCgpKTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuc3BsaXRPZmZSaWdodFNpZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgdmFyIGhhbGYgPSB0aGlzLmtleXMubGVuZ3RoID4+IDEsIGtleXMgPSB0aGlzLmtleXMuc3BsaWNlKGhhbGYpO1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzID8gdW5kZWZWYWxzIDogdGhpcy52YWx1ZXMuc3BsaWNlKGhhbGYpO1xyXG4gICAgICAgIHJldHVybiBuZXcgQk5vZGUoa2V5cywgdmFsdWVzKTtcclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTGVhZiBOb2RlOiBzY2FubmluZyAmIGRlbGV0aW9ucyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5mb3JSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBlZGl0TW9kZSwgdHJlZSwgY291bnQsIG9uRm91bmQpIHtcclxuICAgICAgICB2YXIgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIgaUxvdywgaUhpZ2g7XHJcbiAgICAgICAgaWYgKGhpZ2ggPT09IGxvdykge1xyXG4gICAgICAgICAgICBpZiAoIWluY2x1ZGVIaWdoKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgICAgICAgICBpSGlnaCA9IChpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgLTEsIGNtcCkpICsgMTtcclxuICAgICAgICAgICAgaWYgKGlMb3cgPCAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaUxvdyA9IHRoaXMuaW5kZXhPZihsb3csIDAsIGNtcCk7XHJcbiAgICAgICAgICAgIGlIaWdoID0gdGhpcy5pbmRleE9mKGhpZ2gsIC0xLCBjbXApO1xyXG4gICAgICAgICAgICBpZiAoaUhpZ2ggPCAwKVxyXG4gICAgICAgICAgICAgICAgaUhpZ2ggPSB+aUhpZ2g7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGluY2x1ZGVIaWdoID09PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgaUhpZ2grKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMsIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xyXG4gICAgICAgIGlmIChvbkZvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGlMb3c7IGkgPCBpSGlnaDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvbkZvdW5kKGtleSwgdmFsdWVzW2ldLCBjb3VudCsrKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZGl0TW9kZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSBrZXlzW2ldIHx8IHRoaXMuaXNTaGFyZWQgPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCVHJlZSBpbGxlZ2FsbHkgY2hhbmdlZCBvciBjbG9uZWQgaW4gZWRpdFJhbmdlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRlbGV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlcyAhPT0gdW5kZWZWYWxzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUuX3NpemUtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlIaWdoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0Lmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSByZXN1bHQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5icmVhayAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY291bnQgKz0gaUhpZ2ggLSBpTG93O1xyXG4gICAgICAgIHJldHVybiBjb3VudDtcclxuICAgIH07XHJcbiAgICAvKiogQWRkcyBlbnRpcmUgY29udGVudHMgb2YgcmlnaHQtaGFuZCBzaWJsaW5nIChyaHMgaXMgbGVmdCB1bmNoYW5nZWQpICovXHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWVyZ2VTaWJsaW5nID0gZnVuY3Rpb24gKHJocywgXykge1xyXG4gICAgICAgIHRoaXMua2V5cy5wdXNoLmFwcGx5KHRoaXMua2V5cywgcmhzLmtleXMpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIGlmIChyaHMudmFsdWVzID09PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXMuc2xpY2UoMCwgdGhpcy5rZXlzLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVzLnB1c2guYXBwbHkodGhpcy52YWx1ZXMsIHJocy5yZWlmeVZhbHVlcygpKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQk5vZGU7XHJcbn0oKSk7XHJcbi8qKiBJbnRlcm5hbCBub2RlIChub24tbGVhZiBub2RlKSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxudmFyIEJOb2RlSW50ZXJuYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoQk5vZGVJbnRlcm5hbCwgX3N1cGVyKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBtYXJrIGBjaGlsZHJlbmAgYXMgc2hhcmVkLCBzbyBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlclxyXG4gICAgICogdG8gZW5zdXJlIGNoaWxkcmVuIGFyZSBlaXRoZXIgbWFya2VkIHNoYXJlZCwgb3IgYXJlbid0IGluY2x1ZGVkIGluIGFub3RoZXIgdHJlZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gQk5vZGVJbnRlcm5hbChjaGlsZHJlbiwga2V5cykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgIGtleXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIGtleXNbaV0gPSBjaGlsZHJlbltpXS5tYXhLZXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBrZXlzKSB8fCB0aGlzO1xyXG4gICAgICAgIF90aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5zbGljZSgwKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBjaGlsZHJlbltpXS5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCTm9kZUludGVybmFsKGNoaWxkcmVuLCB0aGlzLmtleXMuc2xpY2UoMCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmdyZWVkeUNsb25lID0gZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTaGFyZWQgJiYgIWZvcmNlKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB2YXIgbnUgPSBuZXcgQk5vZGVJbnRlcm5hbCh0aGlzLmNoaWxkcmVuLnNsaWNlKDApLCB0aGlzLmtleXMuc2xpY2UoMCkpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIG51LmNoaWxkcmVuW2ldID0gbnUuY2hpbGRyZW5baV0uZ3JlZWR5Q2xvbmUoZm9yY2UpO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ubWluS2V5KCk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUubWluUGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuWzBdLm1pblBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLm1heFBhaXIgPSBmdW5jdGlvbiAocmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdLm1heFBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlZSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgMCwgdHJlZS5fY29tcGFyZSksIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gaSA8IGNoaWxkcmVuLmxlbmd0aCA/IGNoaWxkcmVuW2ldLmdldChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlZSkgOiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgMCwgY29tcGFyZSksIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoaSA+PSBjaGlsZHJlbi5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1heFBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjaGlsZHJlbltpXS5nZXRQYWlyT3JOZXh0TG93ZXIoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgaSA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2kgLSAxXS5tYXhQYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgMCwgY29tcGFyZSksIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbiwgbGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGlmIChpID49IGxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGRyZW5baV0uZ2V0UGFpck9yTmV4dEhpZ2hlcihrZXksIGNvbXBhcmUsIGluY2x1c2l2ZSwgcmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBpIDwgbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baSArIDFdLm1pblBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmNoZWNrVmFsaWQgPSBmdW5jdGlvbiAoZGVwdGgsIHRyZWUsIGJhc2VJbmRleCkge1xyXG4gICAgICAgIHZhciBrTCA9IHRoaXMua2V5cy5sZW5ndGgsIGNMID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgY2hlY2soa0wgPT09IGNMLCBcImtleXMvY2hpbGRyZW4gbGVuZ3RoIG1pc21hdGNoOiBkZXB0aFwiLCBkZXB0aCwgXCJsZW5ndGhzXCIsIGtMLCBjTCwgXCJiYXNlSW5kZXhcIiwgYmFzZUluZGV4KTtcclxuICAgICAgICBjaGVjayhrTCA+IDEgfHwgZGVwdGggPiAwLCBcImludGVybmFsIG5vZGUgaGFzIGxlbmd0aFwiLCBrTCwgXCJhdCBkZXB0aFwiLCBkZXB0aCwgXCJiYXNlSW5kZXhcIiwgYmFzZUluZGV4KTtcclxuICAgICAgICB2YXIgc2l6ZSA9IDAsIGMgPSB0aGlzLmNoaWxkcmVuLCBrID0gdGhpcy5rZXlzLCBjaGlsZFNpemUgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY0w7IGkrKykge1xyXG4gICAgICAgICAgICBzaXplICs9IGNbaV0uY2hlY2tWYWxpZChkZXB0aCArIDEsIHRyZWUsIGJhc2VJbmRleCArIHNpemUpO1xyXG4gICAgICAgICAgICBjaGlsZFNpemUgKz0gY1tpXS5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgY2hlY2soc2l6ZSA+PSBjaGlsZFNpemUsIFwid3RmXCIsIGJhc2VJbmRleCk7IC8vIG5vIHdheSB0aGlzIHdpbGwgZXZlciBmYWlsXHJcbiAgICAgICAgICAgIGNoZWNrKGkgPT09IDAgfHwgY1tpIC0gMV0uY29uc3RydWN0b3IgPT09IGNbaV0uY29uc3RydWN0b3IsIFwidHlwZSBtaXNtYXRjaCwgYmFzZUluZGV4OlwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoY1tpXS5tYXhLZXkoKSAhPSBrW2ldKVxyXG4gICAgICAgICAgICAgICAgY2hlY2soZmFsc2UsIFwia2V5c1tcIiwgaSwgXCJdID1cIiwga1tpXSwgXCJpcyB3cm9uZywgc2hvdWxkIGJlIFwiLCBjW2ldLm1heEtleSgpLCBcImF0IGRlcHRoXCIsIGRlcHRoLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoIShpID09PSAwIHx8IHRyZWUuX2NvbXBhcmUoa1tpIC0gMV0sIGtbaV0pIDwgMCkpXHJcbiAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJzb3J0IHZpb2xhdGlvbiBhdCBkZXB0aFwiLCBkZXB0aCwgXCJpbmRleFwiLCBpLCBcImtleXNcIiwga1tpIC0gMV0sIGtbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAyMDIwLzA4OiBCVHJlZSBkb2Vzbid0IGFsd2F5cyBhdm9pZCBncm9zc2x5IHVuZGVyc2l6ZWQgbm9kZXMsXHJcbiAgICAgICAgLy8gYnV0IEFGQUlLIHN1Y2ggbm9kZXMgYXJlIHByZXR0eSBoYXJtbGVzcywgc28gYWNjZXB0IHRoZW0uXHJcbiAgICAgICAgdmFyIHRvb2ZldyA9IGNoaWxkU2l6ZSA9PT0gMDsgLy8gY2hpbGRTaXplIDwgKHRyZWUubWF4Tm9kZVNpemUgPj4gMSkqY0w7XHJcbiAgICAgICAgaWYgKHRvb2ZldyB8fCBjaGlsZFNpemUgPiB0cmVlLm1heE5vZGVTaXplICogY0wpXHJcbiAgICAgICAgICAgIGNoZWNrKGZhbHNlLCB0b29mZXcgPyBcInRvbyBmZXdcIiA6IFwidG9vIG1hbnlcIiwgXCJjaGlsZHJlbiAoXCIsIGNoaWxkU2l6ZSwgc2l6ZSwgXCIpIGF0IGRlcHRoXCIsIGRlcHRoLCBcIm1heE5vZGVTaXplOlwiLCB0cmVlLm1heE5vZGVTaXplLCBcImNoaWxkcmVuLmxlbmd0aDpcIiwgY0wsIFwiYmFzZUluZGV4OlwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIHJldHVybiBzaXplO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBJbnRlcm5hbCBOb2RlOiBzZXQgJiBub2RlIHNwbGl0dGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG92ZXJ3cml0ZSwgdHJlZSkge1xyXG4gICAgICAgIHZhciBjID0gdGhpcy5jaGlsZHJlbiwgbWF4ID0gdHJlZS5fbWF4Tm9kZVNpemUsIGNtcCA9IHRyZWUuX2NvbXBhcmU7XHJcbiAgICAgICAgdmFyIGkgPSBNYXRoLm1pbih0aGlzLmluZGV4T2Yoa2V5LCAwLCBjbXApLCBjLmxlbmd0aCAtIDEpLCBjaGlsZCA9IGNbaV07XHJcbiAgICAgICAgaWYgKGNoaWxkLmlzU2hhcmVkKVxyXG4gICAgICAgICAgICBjW2ldID0gY2hpbGQgPSBjaGlsZC5jbG9uZSgpO1xyXG4gICAgICAgIGlmIChjaGlsZC5rZXlzLmxlbmd0aCA+PSBtYXgpIHtcclxuICAgICAgICAgICAgLy8gY2hpbGQgaXMgZnVsbDsgaW5zZXJ0aW5nIGFueXRoaW5nIGVsc2Ugd2lsbCBjYXVzZSBhIHNwbGl0LlxyXG4gICAgICAgICAgICAvLyBTaGlmdGluZyBhbiBpdGVtIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IHNpYmxpbmcgbWF5IGF2b2lkIGEgc3BsaXQuXHJcbiAgICAgICAgICAgIC8vIFdlIGNhbiBkbyBhIHNoaWZ0IGlmIHRoZSBhZGphY2VudCBub2RlIGlzIG5vdCBmdWxsIGFuZCBpZiB0aGVcclxuICAgICAgICAgICAgLy8gY3VycmVudCBrZXkgY2FuIHN0aWxsIGJlIHBsYWNlZCBpbiB0aGUgc2FtZSBub2RlIGFmdGVyIHRoZSBzaGlmdC5cclxuICAgICAgICAgICAgdmFyIG90aGVyO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgKG90aGVyID0gY1tpIC0gMV0pLmtleXMubGVuZ3RoIDwgbWF4ICYmIGNtcChjaGlsZC5rZXlzWzBdLCBrZXkpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG90aGVyLmlzU2hhcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNbaSAtIDFdID0gb3RoZXIgPSBvdGhlci5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgb3RoZXIudGFrZUZyb21SaWdodChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXNbaSAtIDFdID0gb3RoZXIubWF4S2V5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKG90aGVyID0gY1tpICsgMV0pICE9PSB1bmRlZmluZWQgJiYgb3RoZXIua2V5cy5sZW5ndGggPCBtYXggJiYgY21wKGNoaWxkLm1heEtleSgpLCBrZXkpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG90aGVyLmlzU2hhcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNbaSArIDFdID0gb3RoZXIgPSBvdGhlci5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgb3RoZXIudGFrZUZyb21MZWZ0KGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5c1tpXSA9IGNbaV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkLnNldChrZXksIHZhbHVlLCBvdmVyd3JpdGUsIHRyZWUpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5rZXlzW2ldID0gY2hpbGQubWF4S2V5KCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgLy8gVGhlIGNoaWxkIGhhcyBzcGxpdCBhbmQgYHJlc3VsdGAgaXMgYSBuZXcgcmlnaHQgY2hpbGQuLi4gZG9lcyBpdCBmaXQ/XHJcbiAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPCBtYXgpIHsgLy8geWVzXHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0KGkgKyAxLCByZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIG5vLCB3ZSBtdXN0IHNwbGl0IGFsc29cclxuICAgICAgICAgICAgdmFyIG5ld1JpZ2h0U2libGluZyA9IHRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSwgdGFyZ2V0ID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKGNtcChyZXN1bHQubWF4S2V5KCksIHRoaXMubWF4S2V5KCkpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3UmlnaHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgaSAtPSB0aGlzLmtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhcmdldC5pbnNlcnQoaSArIDEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0cyBgY2hpbGRgIGF0IGluZGV4IGBpYC5cclxuICAgICAqIFRoaXMgZG9lcyBub3QgbWFyayBgY2hpbGRgIGFzIHNoYXJlZCwgc28gaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXJcclxuICAgICAqIHRvIGVuc3VyZSB0aGF0IGVpdGhlciBjaGlsZCBpcyBtYXJrZWQgc2hhcmVkLCBvciBpdCBpcyBub3QgaW5jbHVkZWQgaW4gYW5vdGhlciB0cmVlLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAoaSwgY2hpbGQpIHtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpLCAwLCBjaGlsZCk7XHJcbiAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpLCAwLCBjaGlsZC5tYXhLZXkoKSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTcGxpdCB0aGlzIG5vZGUuXHJcbiAgICAgKiBNb2RpZmllcyB0aGlzIHRvIHJlbW92ZSB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGl0ZW1zLCByZXR1cm5pbmcgYSBzZXBhcmF0ZSBub2RlIGNvbnRhaW5pbmcgdGhlbS5cclxuICAgICAqL1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuc3BsaXRPZmZSaWdodFNpZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gYXNzZXJ0ICF0aGlzLmlzU2hhcmVkO1xyXG4gICAgICAgIHZhciBoYWxmID0gdGhpcy5jaGlsZHJlbi5sZW5ndGggPj4gMTtcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlSW50ZXJuYWwodGhpcy5jaGlsZHJlbi5zcGxpY2UoaGFsZiksIHRoaXMua2V5cy5zcGxpY2UoaGFsZikpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLnRha2VGcm9tUmlnaHQgPSBmdW5jdGlvbiAocmhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdGhpcy5rZXlzLnB1c2gocmhzLmtleXMuc2hpZnQoKSk7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKHJocy5jaGlsZHJlbi5zaGlmdCgpKTtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS50YWtlRnJvbUxlZnQgPSBmdW5jdGlvbiAobGhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdGhpcy5rZXlzLnVuc2hpZnQobGhzLmtleXMucG9wKCkpO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4udW5zaGlmdChsaHMuY2hpbGRyZW4ucG9wKCkpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBJbnRlcm5hbCBOb2RlOiBzY2FubmluZyAmIGRlbGV0aW9ucyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTm90ZTogYGNvdW50YCBpcyB0aGUgbmV4dCB2YWx1ZSBvZiB0aGUgdGhpcmQgYXJndW1lbnQgdG8gYG9uRm91bmRgLiBcclxuICAgIC8vICAgICAgIEEgbGVhZiBub2RlJ3MgYGZvclJhbmdlYCBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IHZhbHVlIGZvciB0aGlzIGNvdW50ZXIsXHJcbiAgICAvLyAgICAgICB1bmxlc3MgdGhlIG9wZXJhdGlvbiBpcyB0byBzdG9wIGVhcmx5LlxyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZm9yUmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgZWRpdE1vZGUsIHRyZWUsIGNvdW50LCBvbkZvdW5kKSB7XHJcbiAgICAgICAgdmFyIGNtcCA9IHRyZWUuX2NvbXBhcmU7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMsIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICB2YXIgaUxvdyA9IHRoaXMuaW5kZXhPZihsb3csIDAsIGNtcCksIGkgPSBpTG93O1xyXG4gICAgICAgIHZhciBpSGlnaCA9IE1hdGgubWluKGhpZ2ggPT09IGxvdyA/IGlMb3cgOiB0aGlzLmluZGV4T2YoaGlnaCwgMCwgY21wKSwga2V5cy5sZW5ndGggLSAxKTtcclxuICAgICAgICBpZiAoIWVkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIFNpbXBsZSBjYXNlXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDw9IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjaGlsZHJlbltpXS5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBlZGl0TW9kZSwgdHJlZSwgY291bnQsIG9uRm91bmQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBjb3VudCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpIDw9IGlIaWdoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8PSBpSGlnaDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmlzU2hhcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IGNoaWxkcmVuW2ldLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogaWYgY2hpbGRyZW5baV0gaXMgZW1wdHkgdGhlbiBrZXlzW2ldPXVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBUaGlzIGlzIGFuIGludmFsaWQgc3RhdGUsIGJ1dCBpdCBpcyBmaXhlZCBiZWxvdy5cclxuICAgICAgICAgICAgICAgICAgICBrZXlzW2ldID0gY2hpbGRyZW5baV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgLy8gRGVsZXRpb25zIG1heSBoYXZlIG9jY3VycmVkLCBzbyBsb29rIGZvciBvcHBvcnR1bml0aWVzIHRvIG1lcmdlIG5vZGVzLlxyXG4gICAgICAgICAgICAgICAgdmFyIGhhbGYgPSB0cmVlLl9tYXhOb2RlU2l6ZSA+PiAxO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlMb3cgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIGlMb3ctLTtcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IGlIaWdoOyBpID49IGlMb3c7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5rZXlzLmxlbmd0aCA8PSBoYWxmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5rZXlzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlNZXJnZShpLCB0cmVlLl9tYXhOb2RlU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIGNoaWxkIGlzIGVtcHR5ISBkZWxldGUgaXQhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT09IDAgJiYgY2hpbGRyZW5bMF0ua2V5cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2soZmFsc2UsIFwiZW1wdGluZXNzIGJ1Z1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICB9O1xyXG4gICAgLyoqIE1lcmdlcyBjaGlsZCBpIHdpdGggY2hpbGQgaSsxIGlmIHRoZWlyIGNvbWJpbmVkIHNpemUgaXMgbm90IHRvbyBsYXJnZSAqL1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUudHJ5TWVyZ2UgPSBmdW5jdGlvbiAoaSwgbWF4U2l6ZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgICAgaWYgKGkgPj0gMCAmJiBpICsgMSA8IGNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ua2V5cy5sZW5ndGggKyBjaGlsZHJlbltpICsgMV0ua2V5cy5sZW5ndGggPD0gbWF4U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmlzU2hhcmVkKSAvLyBjbG9uZWQgYWxyZWFkeSBVTkxFU1MgaSBpcyBvdXRzaWRlIHNjYW4gcmFuZ2VcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IGNoaWxkcmVuW2ldLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5tZXJnZVNpYmxpbmcoY2hpbGRyZW5baSArIDFdLCBtYXhTaXplKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpICsgMSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGkgKyAxLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5c1tpXSA9IGNoaWxkcmVuW2ldLm1heEtleSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTW92ZSBjaGlsZHJlbiBmcm9tIGByaHNgIGludG8gdGhpcy5cclxuICAgICAqIGByaHNgIG11c3QgYmUgcGFydCBvZiB0aGlzIHRyZWUsIGFuZCBiZSByZW1vdmVkIGZyb20gaXQgYWZ0ZXIgdGhpcyBjYWxsXHJcbiAgICAgKiAob3RoZXJ3aXNlIGlzU2hhcmVkIGZvciBpdHMgY2hpbGRyZW4gY291bGQgYmUgaW5jb3JyZWN0KS5cclxuICAgICAqL1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUubWVyZ2VTaWJsaW5nID0gZnVuY3Rpb24gKHJocywgbWF4Tm9kZVNpemUpIHtcclxuICAgICAgICAvLyBhc3NlcnQgIXRoaXMuaXNTaGFyZWQ7XHJcbiAgICAgICAgdmFyIG9sZExlbmd0aCA9IHRoaXMua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5rZXlzLnB1c2guYXBwbHkodGhpcy5rZXlzLCByaHMua2V5cyk7XHJcbiAgICAgICAgdmFyIHJoc0NoaWxkcmVuID0gcmhzLmNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaC5hcHBseSh0aGlzLmNoaWxkcmVuLCByaHNDaGlsZHJlbik7XHJcbiAgICAgICAgaWYgKHJocy5pc1NoYXJlZCAmJiAhdGhpcy5pc1NoYXJlZCkge1xyXG4gICAgICAgICAgICAvLyBBbGwgY2hpbGRyZW4gb2YgYSBzaGFyZWQgbm9kZSBhcmUgaW1wbGljaXRseSBzaGFyZWQsIGFuZCBzaW5jZSB0aGVpciBuZXdcclxuICAgICAgICAgICAgLy8gcGFyZW50IGlzIG5vdCBzaGFyZWQsIHRoZXkgbXVzdCBub3cgYmUgZXhwbGljaXRseSBtYXJrZWQgYXMgc2hhcmVkLlxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJoc0NoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmhzQ2hpbGRyZW5baV0uaXNTaGFyZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBvdXIgY2hpbGRyZW4gYXJlIHRoZW1zZWx2ZXMgYWxtb3N0IGVtcHR5IGR1ZSB0byBhIG1hc3MtZGVsZXRlLFxyXG4gICAgICAgIC8vIHRoZXkgbWF5IG5lZWQgdG8gYmUgbWVyZ2VkIHRvbyAoYnV0IG9ubHkgdGhlIG9sZExlbmd0aC0xIGFuZCBpdHNcclxuICAgICAgICAvLyByaWdodCBzaWJsaW5nIHNob3VsZCBuZWVkIHRoaXMpLlxyXG4gICAgICAgIHRoaXMudHJ5TWVyZ2Uob2xkTGVuZ3RoIC0gMSwgbWF4Tm9kZVNpemUpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCTm9kZUludGVybmFsO1xyXG59KEJOb2RlKSk7XHJcbi8vIE9wdGltaXphdGlvbjogdGhpcyBhcnJheSBvZiBgdW5kZWZpbmVkYHMgaXMgdXNlZCBpbnN0ZWFkIG9mIGEgbm9ybWFsXHJcbi8vIGFycmF5IG9mIHZhbHVlcyBpbiBub2RlcyB3aGVyZSBgdW5kZWZpbmVkYCBpcyB0aGUgb25seSB2YWx1ZS5cclxuLy8gSXRzIGxlbmd0aCBpcyBleHRlbmRlZCB0byBtYXggbm9kZSBzaXplIG9uIGZpcnN0IHVzZTsgc2luY2UgaXQgY2FuXHJcbi8vIGJlIHNoYXJlZCBiZXR3ZWVuIHRyZWVzIHdpdGggZGlmZmVyZW50IG1heGltdW1zLCBpdHMgbGVuZ3RoIGNhbiBvbmx5XHJcbi8vIGluY3JlYXNlLCBuZXZlciBkZWNyZWFzZS4gSXRzIHR5cGUgc2hvdWxkIGJlIHVuZGVmaW5lZFtdIGJ1dCBzdHJhbmdlbHlcclxuLy8gVHlwZVNjcmlwdCB3b24ndCBhbGxvdyB0aGUgY29tcGFyaXNvbiBWW10gPT09IHVuZGVmaW5lZFtdLiBUbyBwcmV2ZW50XHJcbi8vIHVzZXJzIGZyb20gbWFraW5nIHRoaXMgYXJyYXkgdG9vIGxhcmdlLCBCVHJlZSBoYXMgYSBtYXhpbXVtIG5vZGUgc2l6ZS5cclxuLy9cclxuLy8gRkFROiB1bmRlZlZhbHNbaV0gaXMgYWxyZWFkeSB1bmRlZmluZWQsIHNvIHdoeSBpbmNyZWFzZSB0aGUgYXJyYXkgc2l6ZT9cclxuLy8gUmVhZGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgYW4gYXJyYXkgaXMgcmVsYXRpdmVseSBzbG93IGJlY2F1c2UgaXRcclxuLy8gaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBzY2FubmluZyB0aGUgcHJvdG90eXBlIGNoYWluLlxyXG52YXIgdW5kZWZWYWxzID0gW107XHJcbnZhciBEZWxldGUgPSB7IGRlbGV0ZTogdHJ1ZSB9LCBEZWxldGVSYW5nZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIERlbGV0ZTsgfTtcclxudmFyIEJyZWFrID0geyBicmVhazogdHJ1ZSB9O1xyXG52YXIgRW1wdHlMZWFmID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBuID0gbmV3IEJOb2RlKCk7XHJcbiAgICBuLmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgIHJldHVybiBuO1xyXG59KSgpO1xyXG52YXIgRW1wdHlBcnJheSA9IFtdO1xyXG52YXIgUmV1c2VkQXJyYXkgPSBbXTsgLy8gYXNzdW1lZCB0aHJlYWQtbG9jYWxcclxuZnVuY3Rpb24gY2hlY2soZmFjdCkge1xyXG4gICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmICghZmFjdCkge1xyXG4gICAgICAgIGFyZ3MudW5zaGlmdCgnQisgdHJlZScpOyAvLyBhdCBiZWdpbm5pbmcgb2YgbWVzc2FnZVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihhcmdzLmpvaW4oJyAnKSk7XHJcbiAgICB9XHJcbn1cclxuLyoqIEEgQlRyZWUgZnJvemVuIGluIHRoZSBlbXB0eSBzdGF0ZS4gKi9cclxuZXhwb3J0cy5FbXB0eUJUcmVlID0gKGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBuZXcgQlRyZWUoKTsgdC5mcmVlemUoKTsgcmV0dXJuIHQ7IH0pKCk7XHJcbiIsICIvLyB0aGVzZSBhcmVuJ3QgcmVhbGx5IHByaXZhdGUsIGJ1dCBub3IgYXJlIHRoZXkgcmVhbGx5IHVzZWZ1bCB0byBkb2N1bWVudFxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEx1eG9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRGF0ZVRpbWVFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBEYXRlVGltZTogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEludGVydmFsRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgSW50ZXJ2YWw6ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWREdXJhdGlvbkVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIER1cmF0aW9uOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFVuaXRFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih1bml0KSB7XG4gICAgc3VwZXIoYEludmFsaWQgdW5pdCAke3VuaXR9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFpvbmVJc0Fic3RyYWN0RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJab25lIGlzIGFuIGFic3RyYWN0IGNsYXNzXCIpO1xuICB9XG59XG4iLCAiLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNvbnN0IG4gPSBcIm51bWVyaWNcIixcbiAgcyA9IFwic2hvcnRcIixcbiAgbCA9IFwibG9uZ1wiO1xuXG5leHBvcnQgY29uc3QgREFURV9TSE9SVCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX01FRCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX01FRF9XSVRIX1dFRUtEQVkgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9GVUxMID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9TRUNPTkRTID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX1NFQ09ORFMgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NIT1JUID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRUQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBzLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfRlVMTCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGwsXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuIiwgIi8qXG4gIFRoaXMgaXMganVzdCBhIGp1bmsgZHJhd2VyLCBjb250YWluaW5nIGFueXRoaW5nIHVzZWQgYWNyb3NzIG11bHRpcGxlIGNsYXNzZXMuXG4gIEJlY2F1c2UgTHV4b24gaXMgc21hbGwoaXNoKSwgdGhpcyBzaG91bGQgc3RheSBzbWFsbCBhbmQgd2Ugd29uJ3Qgd29ycnkgYWJvdXQgc3BsaXR0aW5nXG4gIGl0IHVwIGludG8sIHNheSwgcGFyc2luZ1V0aWwuanMgYW5kIGJhc2ljVXRpbC5qcyBhbmQgc28gb24uIEJ1dCB0aGV5IGFyZSBkaXZpZGVkIHVwIGJ5IGZlYXR1cmUgYXJlYS5cbiovXG5cbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuLy8gVFlQRVNcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwibnVtYmVyXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwibnVtYmVyXCIgJiYgbyAlIDEgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyhvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZShvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09IFwiW29iamVjdCBEYXRlXVwiO1xufVxuXG4vLyBDQVBBQklMSVRJRVNcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1JlbGF0aXZlKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSW50bCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIUludGwuUmVsYXRpdmVUaW1lRm9ybWF0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIE9CSkVDVFMgQU5EIEFSUkFZU1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGJlc3QsIG5leHQpID0+IHtcbiAgICBjb25zdCBwYWlyID0gW2J5KG5leHQpLCBuZXh0XTtcbiAgICBpZiAoIWJlc3QpIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH0gZWxzZSBpZiAoY29tcGFyZShiZXN0WzBdLCBwYWlyWzBdKSA9PT0gYmVzdFswXSkge1xuICAgICAgcmV0dXJuIGJlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH1cbiAgfSwgbnVsbClbMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG9iaiwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGEsIGspID0+IHtcbiAgICBhW2tdID0gb2JqW2tdO1xuICAgIHJldHVybiBhO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG4vLyBOVU1CRVJTIEFORCBTVFJJTkdTXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHtcbiAgcmV0dXJuIGlzSW50ZWdlcih0aGluZykgJiYgdGhpbmcgPj0gYm90dG9tICYmIHRoaW5nIDw9IHRvcDtcbn1cblxuLy8geCAlIG4gYnV0IHRha2VzIHRoZSBzaWduIG9mIG4gaW5zdGVhZCBvZiB4XG5leHBvcnQgZnVuY3Rpb24gZmxvb3JNb2QoeCwgbikge1xuICByZXR1cm4geCAtIG4gKiBNYXRoLmZsb29yKHggLyBuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZFN0YXJ0KGlucHV0LCBuID0gMikge1xuICBjb25zdCBpc05lZyA9IGlucHV0IDwgMDtcbiAgbGV0IHBhZGRlZDtcbiAgaWYgKGlzTmVnKSB7XG4gICAgcGFkZGVkID0gXCItXCIgKyAoXCJcIiArIC1pbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9IGVsc2Uge1xuICAgIHBhZGRlZCA9IChcIlwiICsgaW5wdXQpLnBhZFN0YXJ0KG4sIFwiMFwiKTtcbiAgfVxuICByZXR1cm4gcGFkZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHN0cmluZykge1xuICBpZiAoaXNVbmRlZmluZWQoc3RyaW5nKSB8fCBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCAxMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmxvYXRpbmcoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWlsbGlzKGZyYWN0aW9uKSB7XG4gIC8vIFJldHVybiB1bmRlZmluZWQgKGluc3RlYWQgb2YgMCkgaW4gdGhlc2UgY2FzZXMsIHdoZXJlIGZyYWN0aW9uIGlzIG5vdCBzZXRcbiAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZiA9IHBhcnNlRmxvYXQoXCIwLlwiICsgZnJhY3Rpb24pICogMTAwMDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihmKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRUbyhudW1iZXIsIGRpZ2l0cywgdG93YXJkWmVybyA9IGZhbHNlKSB7XG4gIGNvbnN0IGZhY3RvciA9IDEwICoqIGRpZ2l0cyxcbiAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kO1xuICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xufVxuXG4vLyBEQVRFIEJBU0lDU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gIGNvbnN0IG1vZE1vbnRoID0gZmxvb3JNb2QobW9udGggLSAxLCAxMikgKyAxLFxuICAgIG1vZFllYXIgPSB5ZWFyICsgKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG5cbiAgaWYgKG1vZE1vbnRoID09PSAyKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdO1xuICB9XG59XG5cbi8vIGNvdmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGxvY2FsIHRpbWVzdGFtcCAoZXBvY2gsIGJ1dCB3aXRoIHRoZSBvZmZzZXQgYmFrZWQgaW4pXG5leHBvcnQgZnVuY3Rpb24gb2JqVG9Mb2NhbFRTKG9iaikge1xuICBsZXQgZCA9IERhdGUuVVRDKFxuICAgIG9iai55ZWFyLFxuICAgIG9iai5tb250aCAtIDEsXG4gICAgb2JqLmRheSxcbiAgICBvYmouaG91cixcbiAgICBvYmoubWludXRlLFxuICAgIG9iai5zZWNvbmQsXG4gICAgb2JqLm1pbGxpc2Vjb25kXG4gICk7XG5cbiAgLy8gZm9yIGxlZ2FjeSByZWFzb25zLCB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGFyZSBpbnRlcnByZXRlZCBhcyAxOVhYOyByZXZlcnQgdGhhdFxuICBpZiAob2JqLnllYXIgPCAxMDAgJiYgb2JqLnllYXIgPj0gMCkge1xuICAgIGQgPSBuZXcgRGF0ZShkKTtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG4gIHJldHVybiArZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcikge1xuICBjb25zdCBwMSA9XG4gICAgICAod2Vla1llYXIgK1xuICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gNCkgLVxuICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gMTAwKSArXG4gICAgICAgIE1hdGguZmxvb3Iod2Vla1llYXIgLyA0MDApKSAlXG4gICAgICA3LFxuICAgIGxhc3QgPSB3ZWVrWWVhciAtIDEsXG4gICAgcDIgPSAobGFzdCArIE1hdGguZmxvb3IobGFzdCAvIDQpIC0gTWF0aC5mbG9vcihsYXN0IC8gMTAwKSArIE1hdGguZmxvb3IobGFzdCAvIDQwMCkpICUgNztcbiAgcmV0dXJuIHAxID09PSA0IHx8IHAyID09PSAzID8gNTMgOiA1Mjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXIpIHtcbiAgaWYgKHllYXIgPiA5OSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2UgcmV0dXJuIHllYXIgPiA2MCA/IDE5MDAgKyB5ZWFyIDogMjAwMCArIHllYXI7XG59XG5cbi8vIFBBUlNJTkdcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWm9uZUluZm8odHMsIG9mZnNldEZvcm1hdCwgbG9jYWxlLCB0aW1lWm9uZSA9IG51bGwpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKSxcbiAgICBpbnRsT3B0cyA9IHtcbiAgICAgIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgbW9udGg6IFwiMi1kaWdpdFwiLFxuICAgICAgZGF5OiBcIjItZGlnaXRcIixcbiAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICB9O1xuXG4gIGlmICh0aW1lWm9uZSkge1xuICAgIGludGxPcHRzLnRpbWVab25lID0gdGltZVpvbmU7XG4gIH1cblxuICBjb25zdCBtb2RpZmllZCA9IHsgdGltZVpvbmVOYW1lOiBvZmZzZXRGb3JtYXQsIC4uLmludGxPcHRzIH07XG5cbiAgY29uc3QgcGFyc2VkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBtb2RpZmllZClcbiAgICAuZm9ybWF0VG9QYXJ0cyhkYXRlKVxuICAgIC5maW5kKChtKSA9PiBtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0aW1lem9uZW5hbWVcIik7XG4gIHJldHVybiBwYXJzZWQgPyBwYXJzZWQudmFsdWUgOiBudWxsO1xufVxuXG4vLyBzaWduZWRPZmZzZXQoJy01JywgJzMwJykgLT4gLTMzMFxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25lZE9mZnNldChvZmZIb3VyU3RyLCBvZmZNaW51dGVTdHIpIHtcbiAgbGV0IG9mZkhvdXIgPSBwYXJzZUludChvZmZIb3VyU3RyLCAxMCk7XG5cbiAgLy8gZG9uJ3QgfHwgdGhpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgLTBcbiAgaWYgKE51bWJlci5pc05hTihvZmZIb3VyKSkge1xuICAgIG9mZkhvdXIgPSAwO1xuICB9XG5cbiAgY29uc3Qgb2ZmTWluID0gcGFyc2VJbnQob2ZmTWludXRlU3RyLCAxMCkgfHwgMCxcbiAgICBvZmZNaW5TaWduZWQgPSBvZmZIb3VyIDwgMCB8fCBPYmplY3QuaXMob2ZmSG91ciwgLTApID8gLW9mZk1pbiA6IG9mZk1pbjtcbiAgcmV0dXJuIG9mZkhvdXIgKiA2MCArIG9mZk1pblNpZ25lZDtcbn1cblxuLy8gQ09FUkNJT05cblxuZXhwb3J0IGZ1bmN0aW9uIGFzTnVtYmVyKHZhbHVlKSB7XG4gIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlID09PSBcIlwiIHx8IE51bWJlci5pc05hTihudW1lcmljVmFsdWUpKVxuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSW52YWxpZCB1bml0IHZhbHVlICR7dmFsdWV9YCk7XG4gIHJldHVybiBudW1lcmljVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVyKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTtcbiAgZm9yIChjb25zdCB1IGluIG9iaikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIHUpKSB7XG4gICAgICBjb25zdCB2ID0gb2JqW3VdO1xuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplcih1KV0gPSBhc051bWJlcih2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPZmZzZXQob2Zmc2V0LCBmb3JtYXQpIHtcbiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAvIDYwKSksXG4gICAgbWludXRlcyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0ICUgNjApKSxcbiAgICBzaWduID0gb2Zmc2V0ID49IDAgPyBcIitcIiA6IFwiLVwiO1xuXG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke3BhZFN0YXJ0KGhvdXJzLCAyKX06JHtwYWRTdGFydChtaW51dGVzLCAyKX1gO1xuICAgIGNhc2UgXCJuYXJyb3dcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7aG91cnN9JHttaW51dGVzID4gMCA/IGA6JHttaW51dGVzfWAgOiBcIlwifWA7XG4gICAgY2FzZSBcInRlY2hpZVwiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtwYWRTdGFydChob3VycywgMil9JHtwYWRTdGFydChtaW51dGVzLCAyKX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVmFsdWUgZm9ybWF0ICR7Zm9ybWF0fSBpcyBvdXQgb2YgcmFuZ2UgZm9yIHByb3BlcnR5IGZvcm1hdGApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lT2JqZWN0KG9iaikge1xuICByZXR1cm4gcGljayhvYmosIFtcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIiwgXCJtaWxsaXNlY29uZFwiXSk7XG59XG5cbmV4cG9ydCBjb25zdCBpYW5hUmVnZXggPVxuICAvW0EtWmEtel8rLV17MSwyNTZ9KD86Oj9cXC9bQS1aYS16MC05XystXXsxLDI1Nn0oPzpcXC9bQS1aYS16MC05XystXXsxLDI1Nn0pPyk/LztcbiIsICJpbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNvbnN0IG1vbnRoc0xvbmcgPSBbXG4gIFwiSmFudWFyeVwiLFxuICBcIkZlYnJ1YXJ5XCIsXG4gIFwiTWFyY2hcIixcbiAgXCJBcHJpbFwiLFxuICBcIk1heVwiLFxuICBcIkp1bmVcIixcbiAgXCJKdWx5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiU2VwdGVtYmVyXCIsXG4gIFwiT2N0b2JlclwiLFxuICBcIk5vdmVtYmVyXCIsXG4gIFwiRGVjZW1iZXJcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNTaG9ydCA9IFtcbiAgXCJKYW5cIixcbiAgXCJGZWJcIixcbiAgXCJNYXJcIixcbiAgXCJBcHJcIixcbiAgXCJNYXlcIixcbiAgXCJKdW5cIixcbiAgXCJKdWxcIixcbiAgXCJBdWdcIixcbiAgXCJTZXBcIixcbiAgXCJPY3RcIixcbiAgXCJOb3ZcIixcbiAgXCJEZWNcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNOYXJyb3cgPSBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb250aHMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNOYXJyb3ddO1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNTaG9ydF07XG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ubW9udGhzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgY2FzZSBcIjItZGlnaXRcIjpcbiAgICAgIHJldHVybiBbXCIwMVwiLCBcIjAyXCIsIFwiMDNcIiwgXCIwNFwiLCBcIjA1XCIsIFwiMDZcIiwgXCIwN1wiLCBcIjA4XCIsIFwiMDlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c0xvbmcgPSBbXG4gIFwiTW9uZGF5XCIsXG4gIFwiVHVlc2RheVwiLFxuICBcIldlZG5lc2RheVwiLFxuICBcIlRodXJzZGF5XCIsXG4gIFwiRnJpZGF5XCIsXG4gIFwiU2F0dXJkYXlcIixcbiAgXCJTdW5kYXlcIixcbl07XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c1Nob3J0ID0gW1wiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCIsIFwiU3VuXCJdO1xuXG5leHBvcnQgY29uc3Qgd2Vla2RheXNOYXJyb3cgPSBbXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIiwgXCJTXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi53ZWVrZGF5c05hcnJvd107XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzU2hvcnRdO1xuICAgIGNhc2UgXCJsb25nXCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCJdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWVyaWRpZW1zID0gW1wiQU1cIiwgXCJQTVwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNMb25nID0gW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc1Nob3J0ID0gW1wiQkNcIiwgXCJBRFwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNOYXJyb3cgPSBbXCJCXCIsIFwiQVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVyYXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTmFycm93XTtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBbLi4uZXJhc1Nob3J0XTtcbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTG9uZ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSB7XG4gIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIHdlZWtkYXlzKGxlbmd0aClbZHQud2Vla2RheSAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBtb250aHMobGVuZ3RoKVtkdC5tb250aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljID0gXCJhbHdheXNcIiwgbmFycm93ID0gZmFsc2UpIHtcbiAgY29uc3QgdW5pdHMgPSB7XG4gICAgeWVhcnM6IFtcInllYXJcIiwgXCJ5ci5cIl0sXG4gICAgcXVhcnRlcnM6IFtcInF1YXJ0ZXJcIiwgXCJxdHIuXCJdLFxuICAgIG1vbnRoczogW1wibW9udGhcIiwgXCJtby5cIl0sXG4gICAgd2Vla3M6IFtcIndlZWtcIiwgXCJ3ay5cIl0sXG4gICAgZGF5czogW1wiZGF5XCIsIFwiZGF5XCIsIFwiZGF5c1wiXSxcbiAgICBob3VyczogW1wiaG91clwiLCBcImhyLlwiXSxcbiAgICBtaW51dGVzOiBbXCJtaW51dGVcIiwgXCJtaW4uXCJdLFxuICAgIHNlY29uZHM6IFtcInNlY29uZFwiLCBcInNlYy5cIl0sXG4gIH07XG5cbiAgY29uc3QgbGFzdGFibGUgPSBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdLmluZGV4T2YodW5pdCkgPT09IC0xO1xuXG4gIGlmIChudW1lcmljID09PSBcImF1dG9cIiAmJiBsYXN0YWJsZSkge1xuICAgIGNvbnN0IGlzRGF5ID0gdW5pdCA9PT0gXCJkYXlzXCI7XG4gICAgc3dpdGNoIChjb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvbW9ycm93XCIgOiBgbmV4dCAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInllc3RlcmRheVwiIDogYGxhc3QgJHt1bml0c1t1bml0XVswXX1gO1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvZGF5XCIgOiBgdGhpcyAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBkZWZhdWx0OiAvLyBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc0luUGFzdCA9IE9iamVjdC5pcyhjb3VudCwgLTApIHx8IGNvdW50IDwgMCxcbiAgICBmbXRWYWx1ZSA9IE1hdGguYWJzKGNvdW50KSxcbiAgICBzaW5ndWxhciA9IGZtdFZhbHVlID09PSAxLFxuICAgIGxpbFVuaXRzID0gdW5pdHNbdW5pdF0sXG4gICAgZm10VW5pdCA9IG5hcnJvd1xuICAgICAgPyBzaW5ndWxhclxuICAgICAgICA/IGxpbFVuaXRzWzFdXG4gICAgICAgIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV1cbiAgICAgIDogc2luZ3VsYXJcbiAgICAgID8gdW5pdHNbdW5pdF1bMF1cbiAgICAgIDogdW5pdDtcbiAgcmV0dXJuIGlzSW5QYXN0ID8gYCR7Zm10VmFsdWV9ICR7Zm10VW5pdH0gYWdvYCA6IGBpbiAke2ZtdFZhbHVlfSAke2ZtdFVuaXR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0cmluZyhrbm93bkZvcm1hdCkge1xuICAvLyB0aGVzZSBhbGwgaGF2ZSB0aGUgb2Zmc2V0cyByZW1vdmVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlbVxuICAvLyB3aXRob3V0IGFsbCB0aGUgaW50bCBzdHVmZiB0aGlzIGlzIGJhY2tmaWxsaW5nXG4gIGNvbnN0IGZpbHRlcmVkID0gcGljayhrbm93bkZvcm1hdCwgW1xuICAgICAgXCJ3ZWVrZGF5XCIsXG4gICAgICBcImVyYVwiLFxuICAgICAgXCJ5ZWFyXCIsXG4gICAgICBcIm1vbnRoXCIsXG4gICAgICBcImRheVwiLFxuICAgICAgXCJob3VyXCIsXG4gICAgICBcIm1pbnV0ZVwiLFxuICAgICAgXCJzZWNvbmRcIixcbiAgICAgIFwidGltZVpvbmVOYW1lXCIsXG4gICAgICBcImhvdXJDeWNsZVwiLFxuICAgIF0pLFxuICAgIGtleSA9IHN0cmluZ2lmeShmaWx0ZXJlZCksXG4gICAgZGF0ZVRpbWVIdWdlID0gXCJFRUVFLCBMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0ZVTEwpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0hVR0UpOlxuICAgICAgcmV0dXJuIFwiRUVFRSwgTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FX1NJTVBMRSk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcImg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfMjRfU0lNUExFKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJISDptbTpzc1wiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJISDptbVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTCk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfSFVHRSk6XG4gICAgICByZXR1cm4gZGF0ZVRpbWVIdWdlO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIGQgTExMIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIkVFRUUsIExMTEwgZCwgeXl5eSwgaDptbTpzcyBhXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkYXRlVGltZUh1Z2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCAqIGFzIEZvcm1hdHMgZnJvbSBcIi4vZm9ybWF0cy5qc1wiO1xuaW1wb3J0IHsgcGFkU3RhcnQgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVRva2VucyhzcGxpdHMsIHRva2VuVG9TdHJpbmcpIHtcbiAgbGV0IHMgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHNwbGl0cykge1xuICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICBzICs9IHRva2VuLnZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyArPSB0b2tlblRvU3RyaW5nKHRva2VuLnZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuXG5jb25zdCBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzID0ge1xuICBEOiBGb3JtYXRzLkRBVEVfU0hPUlQsXG4gIEREOiBGb3JtYXRzLkRBVEVfTUVELFxuICBEREQ6IEZvcm1hdHMuREFURV9GVUxMLFxuICBEREREOiBGb3JtYXRzLkRBVEVfSFVHRSxcbiAgdDogRm9ybWF0cy5USU1FX1NJTVBMRSxcbiAgdHQ6IEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFMsXG4gIHR0dDogRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VULFxuICB0dHR0OiBGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCxcbiAgVDogRm9ybWF0cy5USU1FXzI0X1NJTVBMRSxcbiAgVFQ6IEZvcm1hdHMuVElNRV8yNF9XSVRIX1NFQ09ORFMsXG4gIFRUVDogRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VULFxuICBUVFRUOiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCxcbiAgZjogRm9ybWF0cy5EQVRFVElNRV9TSE9SVCxcbiAgZmY6IEZvcm1hdHMuREFURVRJTUVfTUVELFxuICBmZmY6IEZvcm1hdHMuREFURVRJTUVfRlVMTCxcbiAgZmZmZjogRm9ybWF0cy5EQVRFVElNRV9IVUdFLFxuICBGOiBGb3JtYXRzLkRBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyxcbiAgRkY6IEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyxcbiAgRkZGOiBGb3JtYXRzLkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTLFxuICBGRkZGOiBGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTLFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEZvcm1hdHRlcihsb2NhbGUsIG9wdHMpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRm9ybWF0KGZtdCkge1xuICAgIGxldCBjdXJyZW50ID0gbnVsbCxcbiAgICAgIGN1cnJlbnRGdWxsID0gXCJcIixcbiAgICAgIGJyYWNrZXRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHNwbGl0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm10Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gZm10LmNoYXJBdChpKTtcbiAgICAgIGlmIChjID09PSBcIidcIikge1xuICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogYnJhY2tldGVkLCB2YWw6IGN1cnJlbnRGdWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICBjdXJyZW50RnVsbCA9IFwiXCI7XG4gICAgICAgIGJyYWNrZXRlZCA9ICFicmFja2V0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGJyYWNrZXRlZCkge1xuICAgICAgICBjdXJyZW50RnVsbCArPSBjO1xuICAgICAgfSBlbHNlIGlmIChjID09PSBjdXJyZW50KSB7XG4gICAgICAgIGN1cnJlbnRGdWxsICs9IGM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogZmFsc2UsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudEZ1bGwgPSBjO1xuICAgICAgICBjdXJyZW50ID0gYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgc3BsaXRzLnB1c2goeyBsaXRlcmFsOiBicmFja2V0ZWQsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwbGl0cztcbiAgfVxuXG4gIHN0YXRpYyBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuKSB7XG4gICAgcmV0dXJuIG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHNbdG9rZW5dO1xuICB9XG5cbiAgY29uc3RydWN0b3IobG9jYWxlLCBmb3JtYXRPcHRzKSB7XG4gICAgdGhpcy5vcHRzID0gZm9ybWF0T3B0cztcbiAgICB0aGlzLmxvYyA9IGxvY2FsZTtcbiAgICB0aGlzLnN5c3RlbUxvYyA9IG51bGw7XG4gIH1cblxuICBmb3JtYXRXaXRoU3lzdGVtRGVmYXVsdChkdCwgb3B0cykge1xuICAgIGlmICh0aGlzLnN5c3RlbUxvYyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5zeXN0ZW1Mb2MgPSB0aGlzLmxvYy5yZWRlZmF1bHRUb1N5c3RlbSgpO1xuICAgIH1cbiAgICBjb25zdCBkZiA9IHRoaXMuc3lzdGVtTG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYuZm9ybWF0KCk7XG4gIH1cblxuICBmb3JtYXREYXRlVGltZShkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdCgpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWVQYXJ0cyhkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdFRvUGFydHMoKTtcbiAgfVxuXG4gIHJlc29sdmVkT3B0aW9ucyhkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLnJlc29sdmVkT3B0aW9ucygpO1xuICB9XG5cbiAgbnVtKG4sIHAgPSAwKSB7XG4gICAgLy8gd2UgZ2V0IHNvbWUgcGVyZiBvdXQgb2YgZG9pbmcgdGhpcyBoZXJlLCBhbm5veWluZ2x5XG4gICAgaWYgKHRoaXMub3B0cy5mb3JjZVNpbXBsZSkge1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KG4sIHApO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuXG4gICAgaWYgKHAgPiAwKSB7XG4gICAgICBvcHRzLnBhZFRvID0gcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKG9wdHMpLmZvcm1hdChuKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm10KSB7XG4gICAgY29uc3Qga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gXCJlblwiLFxuICAgICAgdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAmJiB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAhPT0gXCJncmVnb3J5XCIsXG4gICAgICBzdHJpbmcgPSAob3B0cywgZXh0cmFjdCkgPT4gdGhpcy5sb2MuZXh0cmFjdChkdCwgb3B0cywgZXh0cmFjdCksXG4gICAgICBmb3JtYXRPZmZzZXQgPSAob3B0cykgPT4ge1xuICAgICAgICBpZiAoZHQuaXNPZmZzZXRGaXhlZCAmJiBkdC5vZmZzZXQgPT09IDAgJiYgb3B0cy5hbGxvd1opIHtcbiAgICAgICAgICByZXR1cm4gXCJaXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZHQuaXNWYWxpZCA/IGR0LnpvbmUuZm9ybWF0T2Zmc2V0KGR0LnRzLCBvcHRzLmZvcm1hdCkgOiBcIlwiO1xuICAgICAgfSxcbiAgICAgIG1lcmlkaWVtID0gKCkgPT5cbiAgICAgICAga25vd25FbmdsaXNoXG4gICAgICAgICAgPyBFbmdsaXNoLm1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpXG4gICAgICAgICAgOiBzdHJpbmcoeyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH0sIFwiZGF5cGVyaW9kXCIpLFxuICAgICAgbW9udGggPSAobGVuZ3RoLCBzdGFuZGFsb25lKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2hcbiAgICAgICAgICA/IEVuZ2xpc2gubW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKVxuICAgICAgICAgIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7IG1vbnRoOiBsZW5ndGggfSA6IHsgbW9udGg6IGxlbmd0aCwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpLFxuICAgICAgd2Vla2RheSA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+XG4gICAgICAgIGtub3duRW5nbGlzaFxuICAgICAgICAgID8gRW5nbGlzaC53ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aClcbiAgICAgICAgICA6IHN0cmluZyhcbiAgICAgICAgICAgICAgc3RhbmRhbG9uZSA/IHsgd2Vla2RheTogbGVuZ3RoIH0gOiB7IHdlZWtkYXk6IGxlbmd0aCwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH0sXG4gICAgICAgICAgICAgIFwid2Vla2RheVwiXG4gICAgICAgICAgICApLFxuICAgICAgbWF5YmVNYWNybyA9ICh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pO1xuICAgICAgICBpZiAoZm9ybWF0T3B0cykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBmb3JtYXRPcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcmEgPSAobGVuZ3RoKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2ggPyBFbmdsaXNoLmVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHsgZXJhOiBsZW5ndGggfSwgXCJlcmFcIiksXG4gICAgICB0b2tlblRvU3RyaW5nID0gKHRva2VuKSA9PiB7XG4gICAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwOi8vY2xkci51bmljb2RlLm9yZy90cmFuc2xhdGlvbi9kYXRlLXRpbWUtMS9kYXRlLXRpbWUjVE9DLVN0YW5kYWxvbmUtdnMuLUZvcm1hdC1TdHlsZXNcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgIC8vIG1zXG4gICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taWxsaXNlY29uZCk7XG4gICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICAgICAgY2FzZSBcIlNTU1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbGxpc2Vjb25kLCAzKTtcbiAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5zZWNvbmQpO1xuICAgICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnNlY29uZCwgMik7XG4gICAgICAgICAgLy8gZnJhY3Rpb25hbCBzZWNvbmRzXG4gICAgICAgICAgY2FzZSBcInV1XCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwKSwgMik7XG4gICAgICAgICAgY2FzZSBcInV1dVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZHQubWlsbGlzZWNvbmQgLyAxMDApKTtcbiAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taW51dGUpO1xuICAgICAgICAgIGNhc2UgXCJtbVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSwgMik7XG4gICAgICAgICAgLy8gaG91cnNcbiAgICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIgJSAxMiA9PT0gMCA/IDEyIDogZHQuaG91ciAlIDEyKTtcbiAgICAgICAgICBjYXNlIFwiaGhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMiwgMik7XG4gICAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyKTtcbiAgICAgICAgICBjYXNlIFwiSEhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyLCAyKTtcbiAgICAgICAgICAvLyBvZmZzZXRcbiAgICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArNlxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogXCJuYXJyb3dcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArMDY6MDBcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwic2hvcnRcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgKzA2MDBcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwidGVjaGllXCIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSBFU1RcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiBcInNob3J0XCIsIGxvY2FsZTogdGhpcy5sb2MubG9jYWxlIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSBFYXN0ZXJuIFN0YW5kYXJkIFRpbWVcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiBcImxvbmdcIiwgbG9jYWxlOiB0aGlzLmxvYy5sb2NhbGUgfSk7XG4gICAgICAgICAgLy8gem9uZVxuICAgICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFtZXJpY2EvTmV3X1lvcmtcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lTmFtZTtcbiAgICAgICAgICAvLyBtZXJpZGllbXNcbiAgICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgICAgcmV0dXJuIG1lcmlkaWVtKCk7XG4gICAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgZGF5OiBcIm51bWVyaWNcIiB9LCBcImRheVwiKSA6IHRoaXMubnVtKGR0LmRheSk7XG4gICAgICAgICAgY2FzZSBcImRkXCI6XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyBkYXk6IFwiMi1kaWdpdFwiIH0sIFwiZGF5XCIpIDogdGhpcy5udW0oZHQuZGF5LCAyKTtcbiAgICAgICAgICAvLyB3ZWVrZGF5cyAtIHN0YW5kYWxvbmVcbiAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7XG4gICAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwic2hvcnRcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcImxvbmdcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcImNjY2NjXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgICAgLy8gd2Vla2RheXMgLSBmb3JtYXRcbiAgICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7XG4gICAgICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwic2hvcnRcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzZGF5J1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJsb25nXCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiRUVFRUVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1QnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcIm5hcnJvd1wiLCBmYWxzZSk7XG4gICAgICAgICAgLy8gbW9udGhzIC0gc3RhbmRhbG9uZVxuICAgICAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIm51bWVyaWNcIiwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgpO1xuICAgICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMSwgZG9lc24ndCBzZWVtIHRvIHdvcmtcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIjItZGlnaXRcIiwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgsIDIpO1xuICAgICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFuXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJzaG9ydFwiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5XG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJsb25nXCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJMTExMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgICAgLy8gbW9udGhzIC0gZm9ybWF0XG4gICAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCk7XG4gICAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAxXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCIyLWRpZ2l0XCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoLCAyKTtcbiAgICAgICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphblxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwic2hvcnRcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphbnVhcnlcbiAgICAgICAgICAgIHJldHVybiBtb250aChcImxvbmdcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJNTU1NTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgZmFsc2UpO1xuICAgICAgICAgIC8vIHllYXJzXG4gICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMjAxNFxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpIDogdGhpcy5udW0oZHQueWVhcik7XG4gICAgICAgICAgY2FzZSBcInl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDE0XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIjItZGlnaXRcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTtcbiAgICAgICAgICBjYXNlIFwieXl5eVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMDEyXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIm51bWVyaWNcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLCA0KTtcbiAgICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAwMDAxMlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQueWVhciwgNik7XG4gICAgICAgICAgLy8gZXJhc1xuICAgICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFEXG4gICAgICAgICAgICByZXR1cm4gZXJhKFwic2hvcnRcIik7XG4gICAgICAgICAgY2FzZSBcIkdHXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFubm8gRG9taW5pXG4gICAgICAgICAgICByZXR1cm4gZXJhKFwibG9uZ1wiKTtcbiAgICAgICAgICBjYXNlIFwiR0dHR0dcIjpcbiAgICAgICAgICAgIHJldHVybiBlcmEoXCJuYXJyb3dcIik7XG4gICAgICAgICAgY2FzZSBcImtrXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuICAgICAgICAgIGNhc2UgXCJra2trXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIsIDQpO1xuICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlcik7XG4gICAgICAgICAgY2FzZSBcIldXXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlciwgMik7XG4gICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsKTtcbiAgICAgICAgICBjYXNlIFwib29vXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQub3JkaW5hbCwgMyk7XG4gICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIpO1xuICAgICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC50cyAvIDEwMDApKTtcbiAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnRzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG1heWJlTWFjcm8odG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSwgdG9rZW5Ub1N0cmluZyk7XG4gIH1cblxuICBmb3JtYXREdXJhdGlvbkZyb21TdHJpbmcoZHVyLCBmbXQpIHtcbiAgICBjb25zdCB0b2tlblRvRmllbGQgPSAodG9rZW4pID0+IHtcbiAgICAgICAgc3dpdGNoICh0b2tlblswXSkge1xuICAgICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtaWxsaXNlY29uZFwiO1xuICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIHJldHVybiBcIndlZWtcIjtcbiAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwieWVhclwiO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuVG9TdHJpbmcgPSAobGlsZHVyKSA9PiAodG9rZW4pID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTtcbiAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9rZW5zID0gRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZtdCksXG4gICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShcbiAgICAgICAgKGZvdW5kLCB7IGxpdGVyYWwsIHZhbCB9KSA9PiAobGl0ZXJhbCA/IGZvdW5kIDogZm91bmQuY29uY2F0KHZhbCkpLFxuICAgICAgICBbXVxuICAgICAgKSxcbiAgICAgIGNvbGxhcHNlZCA9IGR1ci5zaGlmdFRvKC4uLnJlYWxUb2tlbnMubWFwKHRva2VuVG9GaWVsZCkuZmlsdGVyKCh0KSA9PiB0KSk7XG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2Vucyh0b2tlbnMsIHRva2VuVG9TdHJpbmcoY29sbGFwc2VkKSk7XG4gIH1cbn1cbiIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZhbGlkIHtcbiAgY29uc3RydWN0b3IocmVhc29uLCBleHBsYW5hdGlvbikge1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIHRoaXMuZXhwbGFuYXRpb24gPSBleHBsYW5hdGlvbjtcbiAgfVxuXG4gIHRvTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5leHBsYW5hdGlvbikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucmVhc29ufTogJHt0aGlzLmV4cGxhbmF0aW9ufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBab25lSXNBYnN0cmFjdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5cbi8qKlxuICogQGludGVyZmFjZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBab25lIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHpvbmVcbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgdHlwZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbmFtZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgZ2V0IGlhbmFOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBvZmZzZXQgaXMga25vd24gdG8gYmUgZml4ZWQgZm9yIHRoZSB3aG9sZSB5ZWFyLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyBjb21tb24gbmFtZSAoc3VjaCBhcyBFU1QpIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgdG8gYWZmZWN0IHRoZSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLiBBY2NlcHRzICdsb25nJyBvciAnc2hvcnQnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5sb2NhbGUgLSBXaGF0IGxvY2FsZSB0byByZXR1cm4gdGhlIG9mZnNldCBuYW1lIGluLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBvZmZzZXROYW1lKHRzLCBvcHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyB2YWx1ZSBhcyBhIHN0cmluZ1xuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBnZXQgdGhlIG9mZnNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnbmFycm93JywgJ3Nob3J0Jywgb3IgJ3RlY2hpZScuIFJldHVybmluZyAnKzYnLCAnKzA2OjAwJywgb3IgJyswNjAwJyByZXNwZWN0aXZlbHlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgZm9yIHRoaXMgem9uZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWVzdGFtcC5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gY29tcHV0ZSB0aGUgb2Zmc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIG9mZnNldCh0cykge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIGVxdWFsIHRvIGFub3RoZXIgem9uZVxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXJab25lKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgdmFsaWQuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBmb3JtYXRPZmZzZXQsIHBhcnNlWm9uZUluZm8gfSBmcm9tIFwiLi4vaW1wbC91dGlsLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsb2NhbCB6b25lIGZvciB0aGlzIEphdmFTY3JpcHQgZW52aXJvbm1lbnQuXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBsb2NhbCB6b25lXG4gICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGluc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBTeXN0ZW1ab25lKCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJzeXN0ZW1cIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUodHMsIHsgZm9ybWF0LCBsb2NhbGUgfSkge1xuICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgcmV0dXJuIC1uZXcgRGF0ZSh0cykuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwic3lzdGVtXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgcGFyc2Vab25lSW5mbywgaXNVbmRlZmluZWQsIG9ialRvTG9jYWxUUyB9IGZyb20gXCIuLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbmxldCBkdGZDYWNoZSA9IHt9O1xuZnVuY3Rpb24gbWFrZURURih6b25lKSB7XG4gIGlmICghZHRmQ2FjaGVbem9uZV0pIHtcbiAgICBkdGZDYWNoZVt6b25lXSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tVVNcIiwge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiB6b25lLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgc2Vjb25kOiBcIjItZGlnaXRcIixcbiAgICAgIGVyYTogXCJzaG9ydFwiLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBkdGZDYWNoZVt6b25lXTtcbn1cblxuY29uc3QgdHlwZVRvUG9zID0ge1xuICB5ZWFyOiAwLFxuICBtb250aDogMSxcbiAgZGF5OiAyLFxuICBlcmE6IDMsXG4gIGhvdXI6IDQsXG4gIG1pbnV0ZTogNSxcbiAgc2Vjb25kOiA2LFxufTtcblxuZnVuY3Rpb24gaGFja3lPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXFx1MjAwRS9nLCBcIlwiKSxcbiAgICBwYXJzZWQgPSAvKFxcZCspXFwvKFxcZCspXFwvKFxcZCspIChBRHxCQyksPyAoXFxkKyk6KFxcZCspOihcXGQrKS8uZXhlYyhmb3JtYXR0ZWQpLFxuICAgIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZDtcbiAgcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmYWRPckJjLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF07XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0VG9QYXJ0cyhkYXRlKTtcbiAgY29uc3QgZmlsbGVkID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gZm9ybWF0dGVkW2ldO1xuICAgIGNvbnN0IHBvcyA9IHR5cGVUb1Bvc1t0eXBlXTtcblxuICAgIGlmICh0eXBlID09PSBcImVyYVwiKSB7XG4gICAgICBmaWxsZWRbcG9zXSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIWlzVW5kZWZpbmVkKHBvcykpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxlZDtcbn1cblxubGV0IGlhbmFab25lQ2FjaGUgPSB7fTtcbi8qKlxuICogQSB6b25lIGlkZW50aWZpZWQgYnkgYW4gSUFOQSBpZGVudGlmaWVyLCBsaWtlIEFtZXJpY2EvTmV3X1lvcmtcbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJQU5BWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBab25lIG5hbWVcbiAgICogQHJldHVybiB7SUFOQVpvbmV9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlKG5hbWUpIHtcbiAgICBpZiAoIWlhbmFab25lQ2FjaGVbbmFtZV0pIHtcbiAgICAgIGlhbmFab25lQ2FjaGVbbmFtZV0gPSBuZXcgSUFOQVpvbmUobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBpYW5hWm9uZUNhY2hlW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGxvY2FsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLlxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlc2V0Q2FjaGUoKSB7XG4gICAgaWFuYVpvbmVDYWNoZSA9IHt9O1xuICAgIGR0ZkNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaXMgYSB2YWxpZCBzcGVjaWZpZXIuIFRoaXMgb25seSBjaGVja3MgdGhlIHN0cmluZydzIGZvcm1hdCwgbm90IHRoYXQgdGhlIHNwZWNpZmllciBpZGVudGlmaWVzIGEga25vd24gem9uZTsgc2VlIGlzVmFsaWRab25lIGZvciB0aGF0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBzdHJpbmcgdG8gY2hlY2sgdmFsaWRpdHkgb25cbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIkFtZXJpY2EvTmV3X1lvcmtcIikgLy89PiB0cnVlXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoXCJTcG9ydH5+YmxvcnBcIikgLy89PiBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGZvciBzb21lIHZhbGlkIElBTkEgbmFtZXMuIFVzZSBpc1ZhbGlkWm9uZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRTcGVjaWZpZXIocykge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRab25lKHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlkZW50aWZpZXMgYSByZWFsIHpvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJGYW50YXNpYS9DYXN0bGVcIikgLy89PiBmYWxzZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZFpvbmUoem9uZSkge1xuICAgIGlmICghem9uZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7IHRpbWVab25lOiB6b25lIH0pLmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLnpvbmVOYW1lID0gbmFtZTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy52YWxpZCA9IElBTkFab25lLmlzVmFsaWRab25lKG5hbWUpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaWFuYVwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0TmFtZSh0cywgeyBmb3JtYXQsIGxvY2FsZSB9KSB7XG4gICAgcmV0dXJuIHBhcnNlWm9uZUluZm8odHMsIGZvcm1hdCwgbG9jYWxlLCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCh0cykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0cyk7XG5cbiAgICBpZiAoaXNOYU4oZGF0ZSkpIHJldHVybiBOYU47XG5cbiAgICBjb25zdCBkdGYgPSBtYWtlRFRGKHRoaXMubmFtZSk7XG4gICAgbGV0IFt5ZWFyLCBtb250aCwgZGF5LCBhZE9yQmMsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IGR0Zi5mb3JtYXRUb1BhcnRzXG4gICAgICA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSlcbiAgICAgIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKTtcblxuICAgIGlmIChhZE9yQmMgPT09IFwiQkNcIikge1xuICAgICAgeWVhciA9IC1NYXRoLmFicyh5ZWFyKSArIDE7XG4gICAgfVxuXG4gICAgLy8gYmVjYXVzZSB3ZSdyZSB1c2luZyBob3VyMTIgYW5kIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwMjU1NjQmY2FuPTImcT0lMjIyNCUzQTAwJTIyJTIwZGF0ZXRpbWVmb3JtYXRcbiAgICBjb25zdCBhZGp1c3RlZEhvdXIgPSBob3VyID09PSAyNCA/IDAgOiBob3VyO1xuXG4gICAgY29uc3QgYXNVVEMgPSBvYmpUb0xvY2FsVFMoe1xuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5LFxuICAgICAgaG91cjogYWRqdXN0ZWRIb3VyLFxuICAgICAgbWludXRlLFxuICAgICAgc2Vjb25kLFxuICAgICAgbWlsbGlzZWNvbmQ6IDAsXG4gICAgfSk7XG5cbiAgICBsZXQgYXNUUyA9ICtkYXRlO1xuICAgIGNvbnN0IG92ZXIgPSBhc1RTICUgMTAwMDtcbiAgICBhc1RTIC09IG92ZXIgPj0gMCA/IG92ZXIgOiAxMDAwICsgb3ZlcjtcbiAgICByZXR1cm4gKGFzVVRDIC0gYXNUUykgLyAoNjAgKiAxMDAwKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwiaWFuYVwiICYmIG90aGVyWm9uZS5uYW1lID09PSB0aGlzLm5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgc2lnbmVkT2Zmc2V0IH0gZnJvbSBcIi4uL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxubGV0IHNpbmdsZXRvbiA9IG51bGw7XG5cbi8qKlxuICogQSB6b25lIHdpdGggYSBmaXhlZCBvZmZzZXQgKG1lYW5pbmcgbm8gRFNUKVxuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpeGVkT2Zmc2V0Wm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIFVUQ1xuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IHV0Y0luc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBGaXhlZE9mZnNldFpvbmUoMCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIHdpdGggYSBzcGVjaWZpZWQgb2Zmc2V0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBUaGUgb2Zmc2V0IGluIG1pbnV0ZXNcbiAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfVxuICAgKi9cbiAgc3RhdGljIGluc3RhbmNlKG9mZnNldCkge1xuICAgIHJldHVybiBvZmZzZXQgPT09IDAgPyBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2UgOiBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIG9mIEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIGEgVVRDIG9mZnNldCBzdHJpbmcsIGxpa2UgXCJVVEMrNlwiXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIG9mZnNldCBzdHJpbmcgdG8gcGFyc2VcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDKzZcIilcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDKzA2XCIpXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQy02OjAwXCIpXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBwYXJzZVNwZWNpZmllcihzKSB7XG4gICAgaWYgKHMpIHtcbiAgICAgIGNvbnN0IHIgPSBzLm1hdGNoKC9edXRjKD86KFsrLV1cXGR7MSwyfSkoPzo6KFxcZHsyfSkpPyk/JC9pKTtcbiAgICAgIGlmIChyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRml4ZWRPZmZzZXRab25lKHNpZ25lZE9mZnNldChyWzFdLCByWzJdKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3Iob2Zmc2V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy5maXhlZCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImZpeGVkXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/IFwiVVRDXCIgOiBgVVRDJHtmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgfVxuXG4gIGdldCBpYW5hTmFtZSgpIHtcbiAgICBpZiAodGhpcy5maXhlZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiRXRjL1VUQ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYEV0Yy9HTVQke2Zvcm1hdE9mZnNldCgtdGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgICB9XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwiZml4ZWRcIiAmJiBvdGhlclpvbmUuZml4ZWQgPT09IHRoaXMuZml4ZWQ7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbi8qKlxuICogQSB6b25lIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZhbGlkWm9uZSBleHRlbmRzIFpvbmUge1xuICBjb25zdHJ1Y3Rvcih6b25lTmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqICBAcHJpdmF0ZSAqL1xuICAgIHRoaXMuem9uZU5hbWUgPSB6b25lTmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImludmFsaWRcIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnpvbmVOYW1lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXQoKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvKipcbiAqIEBwcml2YXRlXG4gKi9cblxuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IEludmFsaWRab25lIGZyb20gXCIuLi96b25lcy9pbnZhbGlkWm9uZS5qc1wiO1xuXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCwgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplWm9uZShpbnB1dCwgZGVmYXVsdFpvbmUpIHtcbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSB8fCBpbnB1dCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBkZWZhdWx0Wm9uZTtcbiAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFpvbmUpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgY29uc3QgbG93ZXJlZCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyZWQgPT09IFwibG9jYWxcIiB8fCBsb3dlcmVkID09PSBcInN5c3RlbVwiKSByZXR1cm4gZGVmYXVsdFpvbmU7XG4gICAgZWxzZSBpZiAobG93ZXJlZCA9PT0gXCJ1dGNcIiB8fCBsb3dlcmVkID09PSBcImdtdFwiKSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIGVsc2UgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihsb3dlcmVkKSB8fCBJQU5BWm9uZS5jcmVhdGUoaW5wdXQpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgIHJldHVybiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dC5vZmZzZXQgJiYgdHlwZW9mIGlucHV0Lm9mZnNldCA9PT0gXCJudW1iZXJcIikge1xuICAgIC8vIFRoaXMgaXMgZHVtYiwgYnV0IHRoZSBpbnN0YW5jZW9mIGNoZWNrIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byByZWFsbHkgd29ya1xuICAgIC8vIHNvIHdlJ3JlIGR1Y2sgY2hlY2tpbmcgaXRcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBJbnZhbGlkWm9uZShpbnB1dCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgU3lzdGVtWm9uZSBmcm9tIFwiLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcblxuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcblxubGV0IG5vdyA9ICgpID0+IERhdGUubm93KCksXG4gIGRlZmF1bHRab25lID0gXCJzeXN0ZW1cIixcbiAgZGVmYXVsdExvY2FsZSA9IG51bGwsXG4gIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudWxsLFxuICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBudWxsLFxuICB0aHJvd09uSW52YWxpZDtcblxuLyoqXG4gKiBTZXR0aW5ncyBjb250YWlucyBzdGF0aWMgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGF0IGNvbnRyb2wgTHV4b24ncyBvdmVyYWxsIGJlaGF2aW9yLiBMdXhvbiBpcyBhIHNpbXBsZSBsaWJyYXJ5IHdpdGggZmV3IG9wdGlvbnMsIGJ1dCB0aGUgb25lcyBpdCBkb2VzIGhhdmUgbGl2ZSBoZXJlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLlxuICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAqL1xuICBzdGF0aWMgZ2V0IG5vdygpIHtcbiAgICByZXR1cm4gbm93O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbnVtYmVyLCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIEVwb2NoIG1pbGxpc2Vjb25kIGNvdW50XG4gICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gRGF0ZS5ub3coKSArIDMwMDAgLy8gcHJldGVuZCBpdCBpcyAzIHNlY29uZHMgaW4gdGhlIGZ1dHVyZVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiAwIC8vIGFsd2F5cyBwcmV0ZW5kIGl0J3MgSmFuIDEsIDE5NzAgYXQgbWlkbmlnaHQgaW4gVVRDIHRpbWVcbiAgICovXG4gIHN0YXRpYyBzZXQgbm93KG4pIHtcbiAgICBub3cgPSBuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgdG8gY3JlYXRlIERhdGVUaW1lcyBpbi4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogVXNlIHRoZSB2YWx1ZSBcInN5c3RlbVwiIHRvIHJlc2V0IHRoaXMgdmFsdWUgdG8gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdFpvbmUoem9uZSkge1xuICAgIGRlZmF1bHRab25lID0gem9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgdGltZSB6b25lIG9iamVjdCBjdXJyZW50bHkgdXNlZCB0byBjcmVhdGUgRGF0ZVRpbWVzLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgc3lzdGVtJ3MgdGltZSB6b25lICh0aGUgb25lIHNldCBvbiB0aGUgbWFjaGluZSB0aGF0IHJ1bnMgdGhpcyBjb2RlKS5cbiAgICogQHR5cGUge1pvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRab25lKCkge1xuICAgIHJldHVybiBub3JtYWxpemVab25lKGRlZmF1bHRab25lLCBTeXN0ZW1ab25lLmluc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvY2FsZSgpIHtcbiAgICByZXR1cm4gZGVmYXVsdExvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdExvY2FsZShsb2NhbGUpIHtcbiAgICBkZWZhdWx0TG9jYWxlID0gbG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSgpIHtcbiAgICByZXR1cm4gZGVmYXVsdE51bWJlcmluZ1N5c3RlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbnVtYmVyaW5nIHN5c3RlbSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0obnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bWJlcmluZ1N5c3RlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgb3V0cHV0IGNhbGVuZGFyIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiBkZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IG91dHB1dCBjYWxlbmRhciB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHRPdXRwdXRDYWxlbmRhcihvdXRwdXRDYWxlbmRhcikge1xuICAgIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBnZXQgdGhyb3dPbkludmFsaWQoKSB7XG4gICAgcmV0dXJuIHRocm93T25JbnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBzZXQgdGhyb3dPbkludmFsaWQodCkge1xuICAgIHRocm93T25JbnZhbGlkID0gdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBMdXhvbidzIGdsb2JhbCBjYWNoZXMuIFNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpbiB0ZXN0aW5nIHNjZW5hcmlvcy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZXNldENhY2hlcygpIHtcbiAgICBMb2NhbGUucmVzZXRDYWNoZSgpO1xuICAgIElBTkFab25lLnJlc2V0Q2FjaGUoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IHBhZFN0YXJ0LCByb3VuZFRvLCBoYXNSZWxhdGl2ZSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuXG4vLyB0b2RvIC0gcmVtYXAgY2FjaGluZ1xuXG5sZXQgaW50bExGQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZExGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGR0ZiA9IGludGxMRkNhY2hlW2tleV07XG4gIGlmICghZHRmKSB7XG4gICAgZHRmID0gbmV3IEludGwuTGlzdEZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxMRkNhY2hlW2tleV0gPSBkdGY7XG4gIH1cbiAgcmV0dXJuIGR0Zjtcbn1cblxubGV0IGludGxEVENhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWREVEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgZHRmID0gaW50bERUQ2FjaGVba2V5XTtcbiAgaWYgKCFkdGYpIHtcbiAgICBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxEVENhY2hlW2tleV0gPSBkdGY7XG4gIH1cbiAgcmV0dXJuIGR0Zjtcbn1cblxubGV0IGludGxOdW1DYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkSU5GKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxOdW1DYWNoZVtrZXldO1xuICBpZiAoIWluZikge1xuICAgIGluZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxOdW1DYWNoZVtrZXldID0gaW5mO1xuICB9XG4gIHJldHVybiBpbmY7XG59XG5cbmxldCBpbnRsUmVsQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZFJURihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGJhc2UsIC4uLmNhY2hlS2V5T3B0cyB9ID0gb3B0czsgLy8gZXhjbHVkZSBgYmFzZWAgZnJvbSB0aGUgb3B0aW9uc1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBjYWNoZUtleU9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxSZWxDYWNoZVtrZXldO1xuICBpZiAoIWluZikge1xuICAgIGluZiA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxSZWxDYWNoZVtrZXldID0gaW5mO1xuICB9XG4gIHJldHVybiBpbmY7XG59XG5cbmxldCBzeXNMb2NhbGVDYWNoZSA9IG51bGw7XG5mdW5jdGlvbiBzeXN0ZW1Mb2NhbGUoKSB7XG4gIGlmIChzeXNMb2NhbGVDYWNoZSkge1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfSBlbHNlIHtcbiAgICBzeXNMb2NhbGVDYWNoZSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlO1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHtcbiAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlclxuICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDdcbiAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczpcblxuICAvLyBhKSBpZiB0aGUgc3RyaW5nIGhhcyBubyAtdSBleHRlbnNpb25zLCBqdXN0IGxlYXZlIGl0IGFsb25lXG4gIC8vIGIpIGlmIGl0IGRvZXMsIHVzZSBJbnRsIHRvIHJlc29sdmUgZXZlcnl0aGluZ1xuICAvLyBjKSBpZiBJbnRsIGZhaWxzLCB0cnkgYWdhaW4gd2l0aG91dCB0aGUgLXVcblxuICBjb25zdCB1SW5kZXggPSBsb2NhbGVTdHIuaW5kZXhPZihcIi11LVwiKTtcbiAgaWYgKHVJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gW2xvY2FsZVN0cl07XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgY29uc3Qgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTtcbiAgICB0cnkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihsb2NhbGVTdHIpLnJlc29sdmVkT3B0aW9ucygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYoc21hbGxlcikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBvcHRpb25zO1xuICAgIC8vIHJldHVybiB0aGUgc21hbGxlciBvbmUgc28gdGhhdCB3ZSBjYW4gYXBwZW5kIHRoZSBjYWxlbmRhciBhbmQgbnVtYmVyaW5nIG92ZXJyaWRlcyB0byBpdFxuICAgIHJldHVybiBbc21hbGxlciwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhcl07XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50bENvbmZpZ1N0cmluZyhsb2NhbGVTdHIsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpIHtcbiAgaWYgKG91dHB1dENhbGVuZGFyIHx8IG51bWJlcmluZ1N5c3RlbSkge1xuICAgIGxvY2FsZVN0ciArPSBcIi11XCI7XG5cbiAgICBpZiAob3V0cHV0Q2FsZW5kYXIpIHtcbiAgICAgIGxvY2FsZVN0ciArPSBgLWNhLSR7b3V0cHV0Q2FsZW5kYXJ9YDtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgICBsb2NhbGVTdHIgKz0gYC1udS0ke251bWJlcmluZ1N5c3RlbX1gO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxlU3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9udGhzKGYpIHtcbiAgY29uc3QgbXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMTYsIGksIDEpO1xuICAgIG1zLnB1c2goZihkdCkpO1xuICB9XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbWFwV2Vla2RheXMoZikge1xuICBjb25zdCBtcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSA3OyBpKyspIHtcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTtcbiAgICBtcy5wdXNoKGYoZHQpKTtcbiAgfVxuICByZXR1cm4gbXM7XG59XG5cbmZ1bmN0aW9uIGxpc3RTdHVmZihsb2MsIGxlbmd0aCwgZGVmYXVsdE9LLCBlbmdsaXNoRm4sIGludGxGbikge1xuICBjb25zdCBtb2RlID0gbG9jLmxpc3RpbmdNb2RlKGRlZmF1bHRPSyk7XG5cbiAgaWYgKG1vZGUgPT09IFwiZXJyb3JcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKG1vZGUgPT09IFwiZW5cIikge1xuICAgIHJldHVybiBlbmdsaXNoRm4obGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaW50bEZuKGxlbmd0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNGYXN0TnVtYmVycyhsb2MpIHtcbiAgaWYgKGxvYy5udW1iZXJpbmdTeXN0ZW0gJiYgbG9jLm51bWJlcmluZ1N5c3RlbSAhPT0gXCJsYXRuXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGxvYy5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiIHx8XG4gICAgICAhbG9jLmxvY2FsZSB8fFxuICAgICAgbG9jLmxvY2FsZS5zdGFydHNXaXRoKFwiZW5cIikgfHxcbiAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvYy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgUG9seU51bWJlckZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKGludGwsIGZvcmNlU2ltcGxlLCBvcHRzKSB7XG4gICAgdGhpcy5wYWRUbyA9IG9wdHMucGFkVG8gfHwgMDtcbiAgICB0aGlzLmZsb29yID0gb3B0cy5mbG9vciB8fCBmYWxzZTtcblxuICAgIGNvbnN0IHsgcGFkVG8sIGZsb29yLCAuLi5vdGhlck9wdHMgfSA9IG9wdHM7XG5cbiAgICBpZiAoIWZvcmNlU2ltcGxlIHx8IE9iamVjdC5rZXlzKG90aGVyT3B0cykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaW50bE9wdHMgPSB7IHVzZUdyb3VwaW5nOiBmYWxzZSwgLi4ub3B0cyB9O1xuICAgICAgaWYgKG9wdHMucGFkVG8gPiAwKSBpbnRsT3B0cy5taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG9wdHMucGFkVG87XG4gICAgICB0aGlzLmluZiA9IGdldENhY2hlZElORihpbnRsLCBpbnRsT3B0cyk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0KGkpIHtcbiAgICBpZiAodGhpcy5pbmYpIHtcbiAgICAgIGNvbnN0IGZpeGVkID0gdGhpcy5mbG9vciA/IE1hdGguZmxvb3IoaSkgOiBpO1xuICAgICAgcmV0dXJuIHRoaXMuaW5mLmZvcm1hdChmaXhlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRvIG1hdGNoIHRoZSBicm93c2VyJ3MgbnVtYmVyZm9ybWF0dGVyIGRlZmF1bHRzXG4gICAgICBjb25zdCBmaXhlZCA9IHRoaXMuZmxvb3IgPyBNYXRoLmZsb29yKGkpIDogcm91bmRUbyhpLCAzKTtcbiAgICAgIHJldHVybiBwYWRTdGFydChmaXhlZCwgdGhpcy5wYWRUbyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jbGFzcyBQb2x5RGF0ZUZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKGR0LCBpbnRsLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcblxuICAgIGxldCB6O1xuICAgIGlmIChkdC56b25lLmlzVW5pdmVyc2FsKSB7XG4gICAgICAvLyBVVEMtOCBvciBFdGMvVVRDLTggYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YSwgb25seSBFdGMvR01UKzggYW5kIHRoZSBsaWtlLlxuICAgICAgLy8gVGhhdCBpcyB3aHkgZml4ZWQtb2Zmc2V0IFRaIGlzIHNldCB0byB0aGF0IHVubGVzcyBpdCBpczpcbiAgICAgIC8vIDEuIFJlcHJlc2VudGluZyBvZmZzZXQgMCB3aGVuIFVUQyBpcyB1c2VkIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBiZWNvbWUgR01ULlxuICAgICAgLy8gMi4gVW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXI6XG4gICAgICAvLyAgICAtIHNvbWUgZG8gbm90IHN1cHBvcnQgRXRjL1xuICAgICAgLy8gICAgLSA8IEV0Yy9HTVQtMTQsID4gRXRjL0dNVCsxMiwgYW5kIDMwLW1pbnV0ZSBvciA0NS1taW51dGUgb2Zmc2V0cyBhcmUgbm90IHBhcnQgb2YgdHpkYXRhXG4gICAgICBjb25zdCBnbXRPZmZzZXQgPSAtMSAqIChkdC5vZmZzZXQgLyA2MCk7XG4gICAgICBjb25zdCBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyBgRXRjL0dNVCske2dtdE9mZnNldH1gIDogYEV0Yy9HTVQke2dtdE9mZnNldH1gO1xuICAgICAgaWYgKGR0Lm9mZnNldCAhPT0gMCAmJiBJQU5BWm9uZS5jcmVhdGUob2Zmc2V0WikudmFsaWQpIHtcbiAgICAgICAgeiA9IG9mZnNldFo7XG4gICAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBhbGwgZml4ZWQtb2Zmc2V0IHpvbmVzIGxpa2UgRXRjLys0OjMwIGFyZSBwcmVzZW50IGluIHR6ZGF0YS5cbiAgICAgICAgLy8gU28gd2UgaGF2ZSB0byBtYWtlIGRvLiBUd28gY2FzZXM6XG4gICAgICAgIC8vIDEuIFRoZSBmb3JtYXQgb3B0aW9ucyB0ZWxsIHVzIHRvIHNob3cgdGhlIHpvbmUuIFdlIGNhbid0IGRvIHRoYXQsIHNvIHRoZSBiZXN0XG4gICAgICAgIC8vIHdlIGNhbiBkbyBpcyBmb3JtYXQgdGhlIGRhdGUgaW4gVVRDLlxuICAgICAgICAvLyAyLiBUaGUgZm9ybWF0IG9wdGlvbnMgZG9uJ3QgdGVsbCB1cyB0byBzaG93IHRoZSB6b25lLiBUaGVuIHdlIGNhbiBhZGp1c3QgdGhlbVxuICAgICAgICAvLyB0aGUgdGltZSBhbmQgdGVsbCB0aGUgZm9ybWF0dGVyIHRvIHNob3cgaXQgdG8gdXMgaW4gVVRDLCBzbyB0aGF0IHRoZSB0aW1lIGlzIHJpZ2h0XG4gICAgICAgIC8vIGFuZCB0aGUgYmFkIHpvbmUgZG9lc24ndCBzaG93IHVwLlxuICAgICAgICB6ID0gXCJVVENcIjtcbiAgICAgICAgaWYgKG9wdHMudGltZVpvbmVOYW1lKSB7XG4gICAgICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IERhdGVUaW1lLmZyb21NaWxsaXMoZHQudHMgKyBkdC5vZmZzZXQgKiA2MCAqIDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09IFwic3lzdGVtXCIpIHtcbiAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgeiA9IGR0LnpvbmUubmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRsT3B0cyA9IHsgLi4udGhpcy5vcHRzIH07XG4gICAgaWYgKHopIHtcbiAgICAgIGludGxPcHRzLnRpbWVab25lID0gejtcbiAgICB9XG4gICAgdGhpcy5kdGYgPSBnZXRDYWNoZWREVEYoaW50bCwgaW50bE9wdHMpO1xuICB9XG5cbiAgZm9ybWF0KCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5mb3JtYXQodGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgfVxuXG4gIGZvcm1hdFRvUGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdFRvUGFydHModGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgfVxuXG4gIHJlc29sdmVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kdGYucmVzb2x2ZWRPcHRpb25zKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQb2x5UmVsRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoaW50bCwgaXNFbmdsaXNoLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0geyBzdHlsZTogXCJsb25nXCIsIC4uLm9wdHMgfTtcbiAgICBpZiAoIWlzRW5nbGlzaCAmJiBoYXNSZWxhdGl2ZSgpKSB7XG4gICAgICB0aGlzLnJ0ZiA9IGdldENhY2hlZFJURihpbnRsLCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRW5nbGlzaC5mb3JtYXRSZWxhdGl2ZVRpbWUodW5pdCwgY291bnQsIHRoaXMub3B0cy5udW1lcmljLCB0aGlzLm9wdHMuc3R5bGUgIT09IFwibG9uZ1wiKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KSB7XG4gICAgaWYgKHRoaXMucnRmKSB7XG4gICAgICByZXR1cm4gdGhpcy5ydGYuZm9ybWF0VG9QYXJ0cyhjb3VudCwgdW5pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsZSB7XG4gIHN0YXRpYyBmcm9tT3B0cyhvcHRzKSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUob3B0cy5sb2NhbGUsIG9wdHMubnVtYmVyaW5nU3lzdGVtLCBvcHRzLm91dHB1dENhbGVuZGFyLCBvcHRzLmRlZmF1bHRUb0VOKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCBkZWZhdWx0VG9FTiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc3BlY2lmaWVkTG9jYWxlID0gbG9jYWxlIHx8IFNldHRpbmdzLmRlZmF1bHRMb2NhbGU7XG4gICAgLy8gdGhlIHN5c3RlbSBsb2NhbGUgaXMgdXNlZnVsIGZvciBodW1hbiByZWFkYWJsZSBzdHJpbmdzIGJ1dCBhbm5veWluZyBmb3IgcGFyc2luZy9mb3JtYXR0aW5nIGtub3duIGZvcm1hdHNcbiAgICBjb25zdCBsb2NhbGVSID0gc3BlY2lmaWVkTG9jYWxlIHx8IChkZWZhdWx0VG9FTiA/IFwiZW4tVVNcIiA6IHN5c3RlbUxvY2FsZSgpKTtcbiAgICBjb25zdCBudW1iZXJpbmdTeXN0ZW1SID0gbnVtYmVyaW5nU3lzdGVtIHx8IFNldHRpbmdzLmRlZmF1bHROdW1iZXJpbmdTeXN0ZW07XG4gICAgY29uc3Qgb3V0cHV0Q2FsZW5kYXJSID0gb3V0cHV0Q2FsZW5kYXIgfHwgU2V0dGluZ3MuZGVmYXVsdE91dHB1dENhbGVuZGFyO1xuICAgIHJldHVybiBuZXcgTG9jYWxlKGxvY2FsZVIsIG51bWJlcmluZ1N5c3RlbVIsIG91dHB1dENhbGVuZGFyUiwgc3BlY2lmaWVkTG9jYWxlKTtcbiAgfVxuXG4gIHN0YXRpYyByZXNldENhY2hlKCkge1xuICAgIHN5c0xvY2FsZUNhY2hlID0gbnVsbDtcbiAgICBpbnRsRFRDYWNoZSA9IHt9O1xuICAgIGludGxOdW1DYWNoZSA9IHt9O1xuICAgIGludGxSZWxDYWNoZSA9IHt9O1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3QoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxvY2FsZSwgbnVtYmVyaW5nLCBvdXRwdXRDYWxlbmRhciwgc3BlY2lmaWVkTG9jYWxlKSB7XG4gICAgY29uc3QgW3BhcnNlZExvY2FsZSwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtLCBwYXJzZWRPdXRwdXRDYWxlbmRhcl0gPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpO1xuXG4gICAgdGhpcy5sb2NhbGUgPSBwYXJzZWRMb2NhbGU7XG4gICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmcgfHwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtIHx8IG51bGw7XG4gICAgdGhpcy5vdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyIHx8IHBhcnNlZE91dHB1dENhbGVuZGFyIHx8IG51bGw7XG4gICAgdGhpcy5pbnRsID0gaW50bENvbmZpZ1N0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sIHRoaXMub3V0cHV0Q2FsZW5kYXIpO1xuXG4gICAgdGhpcy53ZWVrZGF5c0NhY2hlID0geyBmb3JtYXQ6IHt9LCBzdGFuZGFsb25lOiB7fSB9O1xuICAgIHRoaXMubW9udGhzQ2FjaGUgPSB7IGZvcm1hdDoge30sIHN0YW5kYWxvbmU6IHt9IH07XG4gICAgdGhpcy5tZXJpZGllbUNhY2hlID0gbnVsbDtcbiAgICB0aGlzLmVyYUNhY2hlID0ge307XG5cbiAgICB0aGlzLnNwZWNpZmllZExvY2FsZSA9IHNwZWNpZmllZExvY2FsZTtcbiAgICB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID0gbnVsbDtcbiAgfVxuXG4gIGdldCBmYXN0TnVtYmVycygpIHtcbiAgICBpZiAodGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9PSBudWxsKSB7XG4gICAgICB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID0gc3VwcG9ydHNGYXN0TnVtYmVycyh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mYXN0TnVtYmVyc0NhY2hlZDtcbiAgfVxuXG4gIGxpc3RpbmdNb2RlKCkge1xuICAgIGNvbnN0IGlzQWN0dWFsbHlFbiA9IHRoaXMuaXNFbmdsaXNoKCk7XG4gICAgY29uc3QgaGFzTm9XZWlyZG5lc3MgPVxuICAgICAgKHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBudWxsIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBcImxhdG5cIikgJiZcbiAgICAgICh0aGlzLm91dHB1dENhbGVuZGFyID09PSBudWxsIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IFwiZ3JlZ29yeVwiKTtcbiAgICByZXR1cm4gaXNBY3R1YWxseUVuICYmIGhhc05vV2VpcmRuZXNzID8gXCJlblwiIDogXCJpbnRsXCI7XG4gIH1cblxuICBjbG9uZShhbHRzKSB7XG4gICAgaWYgKCFhbHRzIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKFxuICAgICAgICBhbHRzLmxvY2FsZSB8fCB0aGlzLnNwZWNpZmllZExvY2FsZSxcbiAgICAgICAgYWx0cy5udW1iZXJpbmdTeXN0ZW0gfHwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGFsdHMub3V0cHV0Q2FsZW5kYXIgfHwgdGhpcy5vdXRwdXRDYWxlbmRhcixcbiAgICAgICAgYWx0cy5kZWZhdWx0VG9FTiB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZWRlZmF1bHRUb0VOKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cywgZGVmYXVsdFRvRU46IHRydWUgfSk7XG4gIH1cblxuICByZWRlZmF1bHRUb1N5c3RlbShhbHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsIGRlZmF1bHRUb0VOOiBmYWxzZSB9KTtcbiAgfVxuXG4gIG1vbnRocyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlLCBkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgRW5nbGlzaC5tb250aHMsICgpID0+IHtcbiAgICAgIGNvbnN0IGludGwgPSBmb3JtYXQgPyB7IG1vbnRoOiBsZW5ndGgsIGRheTogXCJudW1lcmljXCIgfSA6IHsgbW9udGg6IGxlbmd0aCB9LFxuICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG4gICAgICBpZiAoIXRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdKSB7XG4gICAgICAgIHRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwTW9udGhzKChkdCkgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcIm1vbnRoXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIHdlZWtkYXlzKGxlbmd0aCwgZm9ybWF0ID0gZmFsc2UsIGRlZmF1bHRPSyA9IHRydWUpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCBFbmdsaXNoLndlZWtkYXlzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0gZm9ybWF0XG4gICAgICAgICAgPyB7IHdlZWtkYXk6IGxlbmd0aCwgeWVhcjogXCJudW1lcmljXCIsIG1vbnRoOiBcImxvbmdcIiwgZGF5OiBcIm51bWVyaWNcIiB9XG4gICAgICAgICAgOiB7IHdlZWtkYXk6IGxlbmd0aCB9LFxuICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG4gICAgICBpZiAoIXRoaXMud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcFdlZWtkYXlzKChkdCkgPT5cbiAgICAgICAgICB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwid2Vla2RheVwiKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICBtZXJpZGllbXMoZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYoXG4gICAgICB0aGlzLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdE9LLFxuICAgICAgKCkgPT4gRW5nbGlzaC5tZXJpZGllbXMsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBjb3VsZCBiZSBhcmliaXRyYXJ5IGRheSBwZXJpb2RzLiBXZSdyZSBnb25uYSBhc3N1bWUgdGhlcmUgYXJlIGV4YWN0bHkgdHdvXG4gICAgICAgIC8vIGZvciBBTSBhbmQgUE0uIFRoaXMgaXMgcHJvYmFibHkgd3JvbmcsIGJ1dCBpdCdzIG1ha2VzIHBhcnNpbmcgd2F5IGVhc2llci5cbiAgICAgICAgaWYgKCF0aGlzLm1lcmlkaWVtQ2FjaGUpIHtcbiAgICAgICAgICBjb25zdCBpbnRsID0geyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH07XG4gICAgICAgICAgdGhpcy5tZXJpZGllbUNhY2hlID0gW0RhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDkpLCBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCAxOSldLm1hcChcbiAgICAgICAgICAgIChkdCkgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcImRheXBlcmlvZFwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tZXJpZGllbUNhY2hlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBlcmFzKGxlbmd0aCwgZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIEVuZ2xpc2guZXJhcywgKCkgPT4ge1xuICAgICAgY29uc3QgaW50bCA9IHsgZXJhOiBsZW5ndGggfTtcblxuICAgICAgLy8gVGhpcyBpcyBwcm9ibGVtYXRpYy4gRGlmZmVyZW50IGNhbGVuZGFycyBhcmUgZ29pbmcgdG8gZGVmaW5lIGVyYXMgdG90YWxseSBkaWZmZXJlbnRseS4gV2hhdCBJIG5lZWQgaXMgdGhlIG1pbmltdW0gc2V0IG9mIGRhdGVzXG4gICAgICAvLyB0byBkZWZpbml0ZWx5IGVudW1lcmF0ZSB0aGVtLlxuICAgICAgaWYgKCF0aGlzLmVyYUNhY2hlW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy5lcmFDYWNoZVtsZW5ndGhdID0gW0RhdGVUaW1lLnV0YygtNDAsIDEsIDEpLCBEYXRlVGltZS51dGMoMjAxNywgMSwgMSldLm1hcCgoZHQpID0+XG4gICAgICAgICAgdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcImVyYVwiKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5lcmFDYWNoZVtsZW5ndGhdO1xuICAgIH0pO1xuICB9XG5cbiAgZXh0cmFjdChkdCwgaW50bE9wdHMsIGZpZWxkKSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyksXG4gICAgICByZXN1bHRzID0gZGYuZm9ybWF0VG9QYXJ0cygpLFxuICAgICAgbWF0Y2hpbmcgPSByZXN1bHRzLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBmaWVsZCk7XG4gICAgcmV0dXJuIG1hdGNoaW5nID8gbWF0Y2hpbmcudmFsdWUgOiBudWxsO1xuICB9XG5cbiAgbnVtYmVyRm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIC8vIHRoaXMgZm9yY2VzaW1wbGUgb3B0aW9uIGlzIG5ldmVyIHVzZWQgKHRoZSBvbmx5IGNhbGxlciBzaG9ydC1jaXJjdWl0cyBvbiBpdCwgYnV0IGl0IHNlZW1zIHNhZmVyIHRvIGxlYXZlKVxuICAgIC8vIChpbiBjb250cmFzdCwgdGhlIHJlc3Qgb2YgdGhlIGNvbmRpdGlvbiBpcyB1c2VkIGhlYXZpbHkpXG4gICAgcmV0dXJuIG5ldyBQb2x5TnVtYmVyRm9ybWF0dGVyKHRoaXMuaW50bCwgb3B0cy5mb3JjZVNpbXBsZSB8fCB0aGlzLmZhc3ROdW1iZXJzLCBvcHRzKTtcbiAgfVxuXG4gIGR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQb2x5RGF0ZUZvcm1hdHRlcihkdCwgdGhpcy5pbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICByZWxGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQb2x5UmVsRm9ybWF0dGVyKHRoaXMuaW50bCwgdGhpcy5pc0VuZ2xpc2goKSwgb3B0cyk7XG4gIH1cblxuICBsaXN0Rm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBnZXRDYWNoZWRMRih0aGlzLmludGwsIG9wdHMpO1xuICB9XG5cbiAgaXNFbmdsaXNoKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxvY2FsZSA9PT0gXCJlblwiIHx8XG4gICAgICB0aGlzLmxvY2FsZS50b0xvd2VyQ2FzZSgpID09PSBcImVuLXVzXCIgfHxcbiAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLnN0YXJ0c1dpdGgoXCJlbi11c1wiKVxuICAgICk7XG4gIH1cblxuICBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5sb2NhbGUgPT09IG90aGVyLmxvY2FsZSAmJlxuICAgICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IG90aGVyLm51bWJlcmluZ1N5c3RlbSAmJlxuICAgICAgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gb3RoZXIub3V0cHV0Q2FsZW5kYXJcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgdW50cnVuY2F0ZVllYXIsXG4gIHNpZ25lZE9mZnNldCxcbiAgcGFyc2VJbnRlZ2VyLFxuICBwYXJzZU1pbGxpcyxcbiAgaWFuYVJlZ2V4LFxuICBpc1VuZGVmaW5lZCxcbiAgcGFyc2VGbG9hdGluZ1xufSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuXG4vKlxuICogVGhpcyBmaWxlIGhhbmRsZXMgcGFyc2luZyBmb3Igd2VsbC1zcGVjaWZpZWQgZm9ybWF0cy4gSGVyZSdzIGhvdyBpdCB3b3JrczpcbiAqIFR3byB0aGluZ3MgZ28gaW50byBwYXJzaW5nOiBhIHJlZ2V4IHRvIG1hdGNoIHdpdGggYW5kIGFuIGV4dHJhY3RvciB0byB0YWtlIGFwYXJ0IHRoZSBncm91cHMgaW4gdGhlIG1hdGNoLlxuICogQW4gZXh0cmFjdG9yIGlzIGp1c3QgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgcmVnZXggbWF0Y2ggYXJyYXkgYW5kIHJldHVybnMgYSB7IHllYXI6IC4uLiwgbW9udGg6IC4uLiB9IG9iamVjdFxuICogcGFyc2UoKSBkb2VzIHRoZSB3b3JrIG9mIGV4ZWN1dGluZyB0aGUgcmVnZXggYW5kIGFwcGx5aW5nIHRoZSBleHRyYWN0b3IuIEl0IHRha2VzIG11bHRpcGxlIHJlZ2V4L2V4dHJhY3RvciBwYWlycyB0byB0cnkgaW4gc2VxdWVuY2UuXG4gKiBFeHRyYWN0b3JzIGNhbiB0YWtlIGEgXCJjdXJzb3JcIiByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBpbiB0aGUgbWF0Y2ggdG8gbG9vayBhdC4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGNvbWJpbmUgZXh0cmFjdG9ycy5cbiAqIGNvbWJpbmVFeHRyYWN0b3JzKCkgZG9lcyB0aGUgd29yayBvZiBjb21iaW5pbmcgdGhlbSwga2VlcGluZyB0cmFjayBvZiB0aGUgY3Vyc29yIHRocm91Z2ggbXVsdGlwbGUgZXh0cmFjdGlvbnMuXG4gKiBTb21lIGV4dHJhY3Rpb25zIGFyZSBzdXBlciBkdW1iIGFuZCBzaW1wbGVQYXJzZSBhbmQgZnJvbVN0cmluZ3MgaGVscCBEUlkgdGhlbS5cbiAqL1xuXG5mdW5jdGlvbiBjb21iaW5lUmVnZXhlcyguLi5yZWdleGVzKSB7XG4gIGNvbnN0IGZ1bGwgPSByZWdleGVzLnJlZHVjZSgoZiwgcikgPT4gZiArIHIuc291cmNlLCBcIlwiKTtcbiAgcmV0dXJuIFJlZ0V4cChgXiR7ZnVsbH0kYCk7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFeHRyYWN0b3JzKC4uLmV4dHJhY3RvcnMpIHtcbiAgcmV0dXJuIG0gPT5cbiAgICBleHRyYWN0b3JzXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW21lcmdlZFZhbHMsIG1lcmdlZFpvbmUsIGN1cnNvcl0sIGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgW3ZhbCwgem9uZSwgbmV4dF0gPSBleChtLCBjdXJzb3IpO1xuICAgICAgICAgIHJldHVybiBbeyAuLi5tZXJnZWRWYWxzLCAuLi52YWwgfSwgem9uZSB8fCBtZXJnZWRab25lLCBuZXh0XTtcbiAgICAgICAgfSxcbiAgICAgICAgW3t9LCBudWxsLCAxXVxuICAgICAgKVxuICAgICAgLnNsaWNlKDAsIDIpO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzLCAuLi5wYXR0ZXJucykge1xuICBpZiAocyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3JlZ2V4LCBleHRyYWN0b3JdIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWMocyk7XG4gICAgaWYgKG0pIHtcbiAgICAgIHJldHVybiBleHRyYWN0b3IobSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbbnVsbCwgbnVsbF07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVBhcnNlKC4uLmtleXMpIHtcbiAgcmV0dXJuIChtYXRjaCwgY3Vyc29yKSA9PiB7XG4gICAgY29uc3QgcmV0ID0ge307XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2tleXNbaV1dID0gcGFyc2VJbnRlZ2VyKG1hdGNoW2N1cnNvciArIGldKTtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXQsIG51bGwsIGN1cnNvciArIGldO1xuICB9O1xufVxuXG4vLyBJU08gYW5kIFNRTCBwYXJzaW5nXG5jb25zdCBvZmZzZXRSZWdleCA9IC8oPzooWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/KS87XG5jb25zdCBpc29FeHRlbmRlZFpvbmUgPSBgKD86JHtvZmZzZXRSZWdleC5zb3VyY2V9Pyg/OlxcXFxbKCR7aWFuYVJlZ2V4LnNvdXJjZX0pXFxcXF0pPyk/YDtcbmNvbnN0IGlzb1RpbWVCYXNlUmVnZXggPSAvKFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/OlsuLF0oXFxkezEsMzB9KSk/KT8pPy87XG5jb25zdCBpc29UaW1lUmVnZXggPSBSZWdFeHAoYCR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9JHtpc29FeHRlbmRlZFpvbmV9YCk7XG5jb25zdCBpc29UaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoYCg/OlQke2lzb1RpbWVSZWdleC5zb3VyY2V9KT9gKTtcbmNvbnN0IGlzb1ltZFJlZ2V4ID0gLyhbKy1dXFxkezZ9fFxcZHs0fSkoPzotPyhcXGRcXGQpKD86LT8oXFxkXFxkKSk/KT8vO1xuY29uc3QgaXNvV2Vla1JlZ2V4ID0gLyhcXGR7NH0pLT9XKFxcZFxcZCkoPzotPyhcXGQpKT8vO1xuY29uc3QgaXNvT3JkaW5hbFJlZ2V4ID0gLyhcXGR7NH0pLT8oXFxkezN9KS87XG5jb25zdCBleHRyYWN0SVNPV2Vla0RhdGEgPSBzaW1wbGVQYXJzZShcIndlZWtZZWFyXCIsIFwid2Vla051bWJlclwiLCBcIndlZWtEYXlcIik7XG5jb25zdCBleHRyYWN0SVNPT3JkaW5hbERhdGEgPSBzaW1wbGVQYXJzZShcInllYXJcIiwgXCJvcmRpbmFsXCIpO1xuY29uc3Qgc3FsWW1kUmVnZXggPSAvKFxcZHs0fSktKFxcZFxcZCktKFxcZFxcZCkvOyAvLyBkdW1iZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBJU08gb25lXG5jb25zdCBzcWxUaW1lUmVnZXggPSBSZWdFeHAoXG4gIGAke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSA/KD86JHtvZmZzZXRSZWdleC5zb3VyY2V9fCgke2lhbmFSZWdleC5zb3VyY2V9KSk/YFxuKTtcbmNvbnN0IHNxbFRpbWVFeHRlbnNpb25SZWdleCA9IFJlZ0V4cChgKD86ICR7c3FsVGltZVJlZ2V4LnNvdXJjZX0pP2ApO1xuXG5mdW5jdGlvbiBpbnQobWF0Y2gsIHBvcywgZmFsbGJhY2spIHtcbiAgY29uc3QgbSA9IG1hdGNoW3Bvc107XG4gIHJldHVybiBpc1VuZGVmaW5lZChtKSA/IGZhbGxiYWNrIDogcGFyc2VJbnRlZ2VyKG0pO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPWW1kKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICB5ZWFyOiBpbnQobWF0Y2gsIGN1cnNvciksXG4gICAgbW9udGg6IGludChtYXRjaCwgY3Vyc29yICsgMSwgMSksXG4gICAgZGF5OiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDEpXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT1RpbWUobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBpdGVtID0ge1xuICAgIGhvdXJzOiBpbnQobWF0Y2gsIGN1cnNvciwgMCksXG4gICAgbWludXRlczogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAwKSxcbiAgICBzZWNvbmRzOiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDApLFxuICAgIG1pbGxpc2Vjb25kczogcGFyc2VNaWxsaXMobWF0Y2hbY3Vyc29yICsgM10pXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyA0XTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT09mZnNldChtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGxvY2FsID0gIW1hdGNoW2N1cnNvcl0gJiYgIW1hdGNoW2N1cnNvciArIDFdLFxuICAgIGZ1bGxPZmZzZXQgPSBzaWduZWRPZmZzZXQobWF0Y2hbY3Vyc29yICsgMV0sIG1hdGNoW2N1cnNvciArIDJdKSxcbiAgICB6b25lID0gbG9jYWwgPyBudWxsIDogRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGZ1bGxPZmZzZXQpO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElBTkFab25lKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3Qgem9uZSA9IG1hdGNoW2N1cnNvcl0gPyBJQU5BWm9uZS5jcmVhdGUobWF0Y2hbY3Vyc29yXSkgOiBudWxsO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTtcbn1cblxuLy8gSVNPIHRpbWUgcGFyc2luZ1xuXG5jb25zdCBpc29UaW1lT25seSA9IFJlZ0V4cChgXlQ/JHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0kYCk7XG5cbi8vIElTTyBkdXJhdGlvbiBwYXJzaW5nXG5cbmNvbnN0IGlzb0R1cmF0aW9uID0gL14tP1AoPzooPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylZKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylXKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylEKT8oPzpUKD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pSCk/KD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pTSk/KD86KC0/XFxkezEsMjB9KSg/OlsuLF0oLT9cXGR7MSwyMH0pKT9TKT8pPykkLztcblxuZnVuY3Rpb24gZXh0cmFjdElTT0R1cmF0aW9uKG1hdGNoKSB7XG4gIGNvbnN0IFtcbiAgICBzLFxuICAgIHllYXJTdHIsXG4gICAgbW9udGhTdHIsXG4gICAgd2Vla1N0cixcbiAgICBkYXlTdHIsXG4gICAgaG91clN0cixcbiAgICBtaW51dGVTdHIsXG4gICAgc2Vjb25kU3RyLFxuICAgIG1pbGxpc2Vjb25kc1N0clxuICBdID0gbWF0Y2g7XG5cbiAgY29uc3QgaGFzTmVnYXRpdmVQcmVmaXggPSBzWzBdID09PSBcIi1cIjtcbiAgY29uc3QgbmVnYXRpdmVTZWNvbmRzID0gc2Vjb25kU3RyICYmIHNlY29uZFN0clswXSA9PT0gXCItXCI7XG5cbiAgY29uc3QgbWF5YmVOZWdhdGUgPSAobnVtLCBmb3JjZSA9IGZhbHNlKSA9PlxuICAgIG51bSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCAobnVtICYmIGhhc05lZ2F0aXZlUHJlZml4KSkgPyAtbnVtIDogbnVtO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgeWVhcnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoeWVhclN0cikpLFxuICAgICAgbW9udGhzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1vbnRoU3RyKSksXG4gICAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh3ZWVrU3RyKSksXG4gICAgICBkYXlzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKGRheVN0cikpLFxuICAgICAgaG91cnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoaG91clN0cikpLFxuICAgICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtaW51dGVTdHIpKSxcbiAgICAgIHNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoc2Vjb25kU3RyKSwgc2Vjb25kU3RyID09PSBcIi0wXCIpLFxuICAgICAgbWlsbGlzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZU1pbGxpcyhtaWxsaXNlY29uZHNTdHIpLCBuZWdhdGl2ZVNlY29uZHMpXG4gICAgfVxuICBdO1xufVxuXG4vLyBUaGVzZSBhcmUgYSBsaXR0bGUgYnJhaW5kZWFkLiBFRFQgKnNob3VsZCogdGVsbCB1cyB0aGF0IHdlJ3JlIGluLCBzYXksIEFtZXJpY2EvTmV3X1lvcmtcbi8vIGFuZCBub3QganVzdCB0aGF0IHdlJ3JlIGluIC0yNDAgKnJpZ2h0IG5vdyouIEJ1dCBzaW5jZSBJIGRvbid0IHRoaW5rIHRoZXNlIGFyZSB1c2VkIHRoYXQgb2Z0ZW5cbi8vIEknbSBqdXN0IGdvaW5nIHRvIGlnbm9yZSB0aGF0XG5jb25zdCBvYnNPZmZzZXRzID0ge1xuICBHTVQ6IDAsXG4gIEVEVDogLTQgKiA2MCxcbiAgRVNUOiAtNSAqIDYwLFxuICBDRFQ6IC01ICogNjAsXG4gIENTVDogLTYgKiA2MCxcbiAgTURUOiAtNiAqIDYwLFxuICBNU1Q6IC03ICogNjAsXG4gIFBEVDogLTcgKiA2MCxcbiAgUFNUOiAtOCAqIDYwXG59O1xuXG5mdW5jdGlvbiBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgeWVhcjogeWVhclN0ci5sZW5ndGggPT09IDIgPyB1bnRydW5jYXRlWWVhcihwYXJzZUludGVnZXIoeWVhclN0cikpIDogcGFyc2VJbnRlZ2VyKHllYXJTdHIpLFxuICAgIG1vbnRoOiBFbmdsaXNoLm1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpICsgMSxcbiAgICBkYXk6IHBhcnNlSW50ZWdlcihkYXlTdHIpLFxuICAgIGhvdXI6IHBhcnNlSW50ZWdlcihob3VyU3RyKSxcbiAgICBtaW51dGU6IHBhcnNlSW50ZWdlcihtaW51dGVTdHIpXG4gIH07XG5cbiAgaWYgKHNlY29uZFN0cikgcmVzdWx0LnNlY29uZCA9IHBhcnNlSW50ZWdlcihzZWNvbmRTdHIpO1xuICBpZiAod2Vla2RheVN0cikge1xuICAgIHJlc3VsdC53ZWVrZGF5ID1cbiAgICAgIHdlZWtkYXlTdHIubGVuZ3RoID4gM1xuICAgICAgICA/IEVuZ2xpc2gud2Vla2RheXNMb25nLmluZGV4T2Yod2Vla2RheVN0cikgKyAxXG4gICAgICAgIDogRW5nbGlzaC53ZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0cikgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gUkZDIDI4MjIvNTMyMlxuY29uc3QgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksXFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXFxkXFxkKShcXGRcXGQpKSkkLztcblxuZnVuY3Rpb24gZXh0cmFjdFJGQzI4MjIobWF0Y2gpIHtcbiAgY29uc3QgW1xuICAgICAgLFxuICAgICAgd2Vla2RheVN0cixcbiAgICAgIGRheVN0cixcbiAgICAgIG1vbnRoU3RyLFxuICAgICAgeWVhclN0cixcbiAgICAgIGhvdXJTdHIsXG4gICAgICBtaW51dGVTdHIsXG4gICAgICBzZWNvbmRTdHIsXG4gICAgICBvYnNPZmZzZXQsXG4gICAgICBtaWxPZmZzZXQsXG4gICAgICBvZmZIb3VyU3RyLFxuICAgICAgb2ZmTWludXRlU3RyXG4gICAgXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcblxuICBsZXQgb2Zmc2V0O1xuICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICB9IGVsc2UgaWYgKG1pbE9mZnNldCkge1xuICAgIG9mZnNldCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgb2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cik7XG4gIH1cblxuICByZXR1cm4gW3Jlc3VsdCwgbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpXTtcbn1cblxuZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICByZXR1cm4gc1xuICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCBcIiBcIilcbiAgICAudHJpbSgpO1xufVxuXG4vLyBodHRwIGRhdGVcblxuY29uc3QgcmZjMTEyMyA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcXGRcXGQpIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKFxcZHs0fSkgKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkgR01UJC8sXG4gIHJmYzg1MCA9IC9eKE1vbmRheXxUdWVzZGF5fFdlZG5lc2RheXxUaHVyc2RheXxGcmlkYXl8U2F0dXJkYXl8U3VuZGF5KSwgKFxcZFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgYXNjaWkgPSAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKCBcXGR8XFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSAoXFxkezR9KSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0UkZDMTEyM09yODUwKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIGRheVN0ciwgbW9udGhTdHIsIHllYXJTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBU0NJSShtYXRjaCkge1xuICBjb25zdCBbLCB3ZWVrZGF5U3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0ciwgeWVhclN0cl0gPSBtYXRjaCxcbiAgICByZXN1bHQgPSBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cik7XG4gIHJldHVybiBbcmVzdWx0LCBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2VdO1xufVxuXG5jb25zdCBpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvWW1kUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29XZWVrV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1dlZWtSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvT3JkaW5hbFJlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvVGltZUNvbWJpbmVkUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29UaW1lUmVnZXgpO1xuXG5jb25zdCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPWW1kLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoXG4gIGV4dHJhY3RJU09XZWVrRGF0YSxcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcbmNvbnN0IGV4dHJhY3RJU09PcmRpbmFsRGF0ZUFuZFRpbWUgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT09yZGluYWxEYXRhLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcblxuLypcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShcbiAgICBzLFxuICAgIFtpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldF0sXG4gICAgW2lzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXRdLFxuICAgIFtpc29PcmRpbmFsV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZV0sXG4gICAgW2lzb1RpbWVDb21iaW5lZFJlZ2V4LCBleHRyYWN0SVNPVGltZUFuZE9mZnNldF1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUkZDMjgyMkRhdGUocykge1xuICByZXR1cm4gcGFyc2UocHJlcHJvY2Vzc1JGQzI4MjIocyksIFtyZmMyODIyLCBleHRyYWN0UkZDMjgyMl0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIVFRQRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShcbiAgICBzLFxuICAgIFtyZmMxMTIzLCBleHRyYWN0UkZDMTEyM09yODUwXSxcbiAgICBbcmZjODUwLCBleHRyYWN0UkZDMTEyM09yODUwXSxcbiAgICBbYXNjaWksIGV4dHJhY3RBU0NJSV1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPRHVyYXRpb24ocykge1xuICByZXR1cm4gcGFyc2UocywgW2lzb0R1cmF0aW9uLCBleHRyYWN0SVNPRHVyYXRpb25dKTtcbn1cblxuY29uc3QgZXh0cmFjdElTT1RpbWVPbmx5ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09UaW1lT25seShzKSB7XG4gIHJldHVybiBwYXJzZShzLCBbaXNvVGltZU9ubHksIGV4dHJhY3RJU09UaW1lT25seV0pO1xufVxuXG5jb25zdCBzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsWW1kUmVnZXgsIHNxbFRpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBzcWxUaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKHNxbFRpbWVSZWdleCk7XG5cbmNvbnN0IGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmUgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU1FMKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW3NxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSxcbiAgICBbc3FsVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmVdXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWREdXJhdGlvbkVycm9yLCBJbnZhbGlkVW5pdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcbmltcG9ydCB7IHBhcnNlSVNPRHVyYXRpb24sIHBhcnNlSVNPVGltZU9ubHkgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBhc051bWJlcixcbiAgaGFzT3duUHJvcGVydHksXG4gIGlzTnVtYmVyLFxuICBpc1VuZGVmaW5lZCxcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuXG5jb25zdCBJTlZBTElEID0gXCJJbnZhbGlkIER1cmF0aW9uXCI7XG5cbi8vIHVuaXQgY29udmVyc2lvbiBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBsb3dPcmRlck1hdHJpeCA9IHtcbiAgICB3ZWVrczoge1xuICAgICAgZGF5czogNyxcbiAgICAgIGhvdXJzOiA3ICogMjQsXG4gICAgICBtaW51dGVzOiA3ICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgZGF5czoge1xuICAgICAgaG91cnM6IDI0LFxuICAgICAgbWludXRlczogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIGhvdXJzOiB7IG1pbnV0ZXM6IDYwLCBzZWNvbmRzOiA2MCAqIDYwLCBtaWxsaXNlY29uZHM6IDYwICogNjAgKiAxMDAwIH0sXG4gICAgbWludXRlczogeyBzZWNvbmRzOiA2MCwgbWlsbGlzZWNvbmRzOiA2MCAqIDEwMDAgfSxcbiAgICBzZWNvbmRzOiB7IG1pbGxpc2Vjb25kczogMTAwMCB9LFxuICB9LFxuICBjYXN1YWxNYXRyaXggPSB7XG4gICAgeWVhcnM6IHtcbiAgICAgIHF1YXJ0ZXJzOiA0LFxuICAgICAgbW9udGhzOiAxMixcbiAgICAgIHdlZWtzOiA1MixcbiAgICAgIGRheXM6IDM2NSxcbiAgICAgIGhvdXJzOiAzNjUgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDM2NSAqIDI0ICogNjAsXG4gICAgICBzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBxdWFydGVyczoge1xuICAgICAgbW9udGhzOiAzLFxuICAgICAgd2Vla3M6IDEzLFxuICAgICAgZGF5czogOTEsXG4gICAgICBob3VyczogOTEgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDkxICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiA5MSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBtb250aHM6IHtcbiAgICAgIHdlZWtzOiA0LFxuICAgICAgZGF5czogMzAsXG4gICAgICBob3VyczogMzAgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDMwICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcblxuICAgIC4uLmxvd09yZGVyTWF0cml4LFxuICB9LFxuICBkYXlzSW5ZZWFyQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQwMCxcbiAgZGF5c0luTW9udGhBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDgwMCxcbiAgYWNjdXJhdGVNYXRyaXggPSB7XG4gICAgeWVhcnM6IHtcbiAgICAgIHF1YXJ0ZXJzOiA0LFxuICAgICAgbW9udGhzOiAxMixcbiAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA3LFxuICAgICAgZGF5czogZGF5c0luWWVhckFjY3VyYXRlLFxuICAgICAgaG91cnM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0LFxuICAgICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIHF1YXJ0ZXJzOiB7XG4gICAgICBtb250aHM6IDMsXG4gICAgICB3ZWVrczogZGF5c0luWWVhckFjY3VyYXRlIC8gMjgsXG4gICAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA0LFxuICAgICAgaG91cnM6IChkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCkgLyA0LFxuICAgICAgbWludXRlczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjApIC8gNCxcbiAgICAgIHNlY29uZHM6IChkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjApIC8gNCxcbiAgICAgIG1pbGxpc2Vjb25kczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDApIC8gNCxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgd2Vla3M6IGRheXNJbk1vbnRoQWNjdXJhdGUgLyA3LFxuICAgICAgZGF5czogZGF5c0luTW9udGhBY2N1cmF0ZSxcbiAgICAgIGhvdXJzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQsXG4gICAgICBtaW51dGVzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgLi4ubG93T3JkZXJNYXRyaXgsXG4gIH07XG5cbi8vIHVuaXRzIG9yZGVyZWQgYnkgc2l6ZVxuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1xuICBcInllYXJzXCIsXG4gIFwicXVhcnRlcnNcIixcbiAgXCJtb250aHNcIixcbiAgXCJ3ZWVrc1wiLFxuICBcImRheXNcIixcbiAgXCJob3Vyc1wiLFxuICBcIm1pbnV0ZXNcIixcbiAgXCJzZWNvbmRzXCIsXG4gIFwibWlsbGlzZWNvbmRzXCIsXG5dO1xuXG5jb25zdCByZXZlcnNlVW5pdHMgPSBvcmRlcmVkVW5pdHMuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXG4vLyBjbG9uZSByZWFsbHkgbWVhbnMgXCJjcmVhdGUgYW5vdGhlciBpbnN0YW5jZSBqdXN0IGxpa2UgdGhpcyBvbmUsIGJ1dCB3aXRoIHRoZXNlIGNoYW5nZXNcIlxuZnVuY3Rpb24gY2xvbmUoZHVyLCBhbHRzLCBjbGVhciA9IGZhbHNlKSB7XG4gIC8vIGRlZXAgbWVyZ2UgZm9yIHZhbHNcbiAgY29uc3QgY29uZiA9IHtcbiAgICB2YWx1ZXM6IGNsZWFyID8gYWx0cy52YWx1ZXMgOiB7IC4uLmR1ci52YWx1ZXMsIC4uLihhbHRzLnZhbHVlcyB8fCB7fSkgfSxcbiAgICBsb2M6IGR1ci5sb2MuY2xvbmUoYWx0cy5sb2MpLFxuICAgIGNvbnZlcnNpb25BY2N1cmFjeTogYWx0cy5jb252ZXJzaW9uQWNjdXJhY3kgfHwgZHVyLmNvbnZlcnNpb25BY2N1cmFjeSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBEdXJhdGlvbihjb25mKTtcbn1cblxuZnVuY3Rpb24gYW50aVRydW5jKG4pIHtcbiAgcmV0dXJuIG4gPCAwID8gTWF0aC5mbG9vcihuKSA6IE1hdGguY2VpbChuKTtcbn1cblxuLy8gTkI6IG11dGF0ZXMgcGFyYW1ldGVyc1xuZnVuY3Rpb24gY29udmVydChtYXRyaXgsIGZyb21NYXAsIGZyb21Vbml0LCB0b01hcCwgdG9Vbml0KSB7XG4gIGNvbnN0IGNvbnYgPSBtYXRyaXhbdG9Vbml0XVtmcm9tVW5pdF0sXG4gICAgcmF3ID0gZnJvbU1hcFtmcm9tVW5pdF0gLyBjb252LFxuICAgIHNhbWVTaWduID0gTWF0aC5zaWduKHJhdykgPT09IE1hdGguc2lnbih0b01hcFt0b1VuaXRdKSxcbiAgICAvLyBvaywgc28gdGhpcyBpcyB3aWxkLCBidXQgc2VlIHRoZSBtYXRyaXggaW4gdGhlIHRlc3RzXG4gICAgYWRkZWQgPVxuICAgICAgIXNhbWVTaWduICYmIHRvTWFwW3RvVW5pdF0gIT09IDAgJiYgTWF0aC5hYnMocmF3KSA8PSAxID8gYW50aVRydW5jKHJhdykgOiBNYXRoLnRydW5jKHJhdyk7XG4gIHRvTWFwW3RvVW5pdF0gKz0gYWRkZWQ7XG4gIGZyb21NYXBbZnJvbVVuaXRdIC09IGFkZGVkICogY29udjtcbn1cblxuLy8gTkI6IG11dGF0ZXMgcGFyYW1ldGVyc1xuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWVzKG1hdHJpeCwgdmFscykge1xuICByZXZlcnNlVW5pdHMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgIGlmICghaXNVbmRlZmluZWQodmFsc1tjdXJyZW50XSkpIHtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICBjb252ZXJ0KG1hdHJpeCwgdmFscywgcHJldmlvdXMsIHZhbHMsIGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9XG4gIH0sIG51bGwpO1xufVxuXG4vKipcbiAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSBcIjIgbW9udGhzXCIgb3IgXCIxIGRheSwgMSBob3VyXCIuIENvbmNlcHR1YWxseSwgaXQncyBqdXN0IGEgbWFwIG9mIHVuaXRzIHRvIHRoZWlyIHF1YW50aXRpZXMsIGFjY29tcGFuaWVkIGJ5IHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGFuZCBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLiBUaGV5IGNhbiBiZSB1c2VkIG9uIHRoZWlyIG93biBvciBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIEx1eG9uIHR5cGVzOyBmb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Uge0BsaW5rIERhdGVUaW1lI3BsdXN9IHRvIGFkZCBhIER1cmF0aW9uIG9iamVjdCB0byBhIERhdGVUaW1lLCBwcm9kdWNpbmcgYW5vdGhlciBEYXRlVGltZS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIER1cmF0aW9uOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhIER1cmF0aW9uLCB1c2Uge0BsaW5rIER1cmF0aW9uI2Zyb21NaWxsaXN9LCB7QGxpbmsgRHVyYXRpb24jZnJvbU9iamVjdH0sIG9yIHtAbGluayBEdXJhdGlvbiNmcm9tSVNPfS5cbiAqICogKipVbml0IHZhbHVlcyoqIFNlZSB0aGUge0BsaW5rIER1cmF0aW9uI3llYXJzfSwge0BsaW5rIER1cmF0aW9uI21vbnRoc30sIHtAbGluayBEdXJhdGlvbiN3ZWVrc30sIHtAbGluayBEdXJhdGlvbiNkYXlzfSwge0BsaW5rIER1cmF0aW9uI2hvdXJzfSwge0BsaW5rIER1cmF0aW9uI21pbnV0ZXN9LCB7QGxpbmsgRHVyYXRpb24jc2Vjb25kc30sIHtAbGluayBEdXJhdGlvbiNtaWxsaXNlY29uZHN9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlICB7QGxpbmsgRHVyYXRpb24jbG9jYWxlfSBhbmQge0BsaW5rIER1cmF0aW9uI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG5ldyBEdXJhdGlvbnMgb3V0IG9mIG9sZCBvbmVzIHVzZSB7QGxpbmsgRHVyYXRpb24jcGx1c30sIHtAbGluayBEdXJhdGlvbiNtaW51c30sIHtAbGluayBEdXJhdGlvbiNub3JtYWxpemV9LCB7QGxpbmsgRHVyYXRpb24jc2V0fSwge0BsaW5rIER1cmF0aW9uI3JlY29uZmlndXJlfSwge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99LCBhbmQge0BsaW5rIER1cmF0aW9uI25lZ2F0ZX0uXG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgRHVyYXRpb24gaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgRHVyYXRpb24jYXN9LCB7QGxpbmsgRHVyYXRpb24jdG9JU099LCB7QGxpbmsgRHVyYXRpb24jdG9Gb3JtYXR9LCBhbmQge0BsaW5rIER1cmF0aW9uI3RvSlNPTn1cbiAqXG4gKiBUaGVyZSdzIGFyZSBtb3JlIG1ldGhvZHMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIHZhbGlkaXR5LCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09IFwibG9uZ3Rlcm1cIiB8fCBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGFjY3VyYXRlID8gXCJsb25ndGVybVwiIDogXCJjYXN1YWxcIjtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubWF0cml4ID0gYWNjdXJhdGUgPyBhY2N1cmF0ZU1hdHJpeCA6IGNhc3VhbE1hdHJpeDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EdXJhdGlvbiA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIER1cmF0aW9uIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgb2YgbWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tTWlsbGlzKGNvdW50LCBvcHRzKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IGNvdW50IH0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcnMnIGFuZCAnaG91cnMnLlxuICAgKiBJZiB0aGlzIG9iamVjdCBpcyBlbXB0eSB0aGVuIGEgemVybyBtaWxsaXNlY29uZHMgZHVyYXRpb24gaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSB0aGUgb2JqZWN0IHRvIGNyZWF0ZSB0aGUgRGF0ZVRpbWUgZnJvbVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnllYXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoucXVhcnRlcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmRheXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3Vyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz1bXV0gLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Qob2JqLCBvcHRzID0ge30pIHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgRHVyYXRpb24uZnJvbU9iamVjdDogYXJndW1lbnQgZXhwZWN0ZWQgdG8gYmUgYW4gb2JqZWN0LCBnb3QgJHtcbiAgICAgICAgICBvYmogPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBvYmpcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7XG4gICAgICB2YWx1ZXM6IG5vcm1hbGl6ZU9iamVjdChvYmosIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLFxuICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRzKSxcbiAgICAgIGNvbnZlcnNpb25BY2N1cmFjeTogb3B0cy5jb252ZXJzaW9uQWNjdXJhY3ksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBEdXJhdGlvbkxpa2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRHVyYXRpb259IGR1cmF0aW9uTGlrZVxuICAgKiBPbmUgb2Y6XG4gICAqIC0gb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuXG4gICAqIC0gbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHNcbiAgICogLSBEdXJhdGlvbiBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uTGlrZSkge1xuICAgIGlmIChpc051bWJlcihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSBpZiAoRHVyYXRpb24uaXNEdXJhdGlvbihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gZHVyYXRpb25MaWtlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uTGlrZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoZHVyYXRpb25MaWtlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAke2R1cmF0aW9uTGlrZX0gb2YgdHlwZSAke3R5cGVvZiBkdXJhdGlvbkxpa2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDNZNk0xVzREVDEySDMwTTVTJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDMsIG1vbnRoczogNiwgd2Vla3M6IDEsIGRheXM6IDQsIGhvdXJzOiAxMiwgbWludXRlczogMzAsIHNlY29uZHM6IDUgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQVDIzSCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyMyB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1A1WTNNJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDUsIG1vbnRoczogMyB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21JU08odGV4dCwgb3B0cykge1xuICAgIGNvbnN0IFtwYXJzZWRdID0gcGFyc2VJU09EdXJhdGlvbih0ZXh0KTtcbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSB0aW1lIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0ZXh0IHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVzXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMToyMjozMy40NDQnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDIyLCBzZWNvbmRzOiAzMywgbWlsbGlzZWNvbmRzOiA0NDQgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExOjAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPVGltZSh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3BhcnNlZF0gPSBwYXJzZUlTT1RpbWVPbmx5KHRleHQpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwidW5wYXJzYWJsZVwiLCBgdGhlIGlucHV0IFwiJHt0ZXh0fVwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgZGF0ZXRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRHVyYXRpb25FcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgIHllYXI6IFwieWVhcnNcIixcbiAgICAgIHllYXJzOiBcInllYXJzXCIsXG4gICAgICBxdWFydGVyOiBcInF1YXJ0ZXJzXCIsXG4gICAgICBxdWFydGVyczogXCJxdWFydGVyc1wiLFxuICAgICAgbW9udGg6IFwibW9udGhzXCIsXG4gICAgICBtb250aHM6IFwibW9udGhzXCIsXG4gICAgICB3ZWVrOiBcIndlZWtzXCIsXG4gICAgICB3ZWVrczogXCJ3ZWVrc1wiLFxuICAgICAgZGF5OiBcImRheXNcIixcbiAgICAgIGRheXM6IFwiZGF5c1wiLFxuICAgICAgaG91cjogXCJob3Vyc1wiLFxuICAgICAgaG91cnM6IFwiaG91cnNcIixcbiAgICAgIG1pbnV0ZTogXCJtaW51dGVzXCIsXG4gICAgICBtaW51dGVzOiBcIm1pbnV0ZXNcIixcbiAgICAgIHNlY29uZDogXCJzZWNvbmRzXCIsXG4gICAgICBzZWNvbmRzOiBcInNlY29uZHNcIixcbiAgICAgIG1pbGxpc2Vjb25kOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgICAgbWlsbGlzZWNvbmRzOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgIH1bdW5pdCA/IHVuaXQudG9Mb3dlckNhc2UoKSA6IHVuaXRdO1xuXG4gICAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhIER1cmF0aW9uLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNEdXJhdGlvbihvKSB7XG4gICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkR1cmF0aW9uKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgIHRoZSBsb2NhbGUgb2YgYSBEdXJhdGlvbiwgc3VjaCAnZW4tR0InXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyaW5nIHN5c3RlbSBvZiBhIER1cmF0aW9uLCBzdWNoICdiZW5nJy4gVGhlIG51bWJlcmluZyBzeXN0ZW0gaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIER1cmF0aW9uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gWW91IG1heSB1c2UgdGhlc2UgdG9rZW5zOlxuICAgKiAqIGBTYCBmb3IgbWlsbGlzZWNvbmRzXG4gICAqICogYHNgIGZvciBzZWNvbmRzXG4gICAqICogYG1gIGZvciBtaW51dGVzXG4gICAqICogYGhgIGZvciBob3Vyc1xuICAgKiAqIGBkYCBmb3IgZGF5c1xuICAgKiAqIGB3YCBmb3Igd2Vla3NcbiAgICogKiBgTWAgZm9yIG1vbnRoc1xuICAgKiAqIGB5YCBmb3IgeWVhcnNcbiAgICogTm90ZXM6XG4gICAqICogQWRkIHBhZGRpbmcgYnkgcmVwZWF0aW5nIHRoZSB0b2tlbiwgZS5nLiBcInl5XCIgcGFkcyB0aGUgeWVhcnMgdG8gdHdvIGRpZ2l0cywgXCJoaGhoXCIgcGFkcyB0aGUgaG91cnMgb3V0IHRvIGZvdXIgZGlnaXRzXG4gICAqICogVG9rZW5zIGNhbiBiZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cbiAgICogKiBUaGUgZHVyYXRpb24gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIHNldCBvZiB1bml0cyBpbiB0aGUgZm9ybWF0IHN0cmluZyB1c2luZyB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30gYW5kIHRoZSBEdXJhdGlvbnMncyBjb252ZXJzaW9uIGFjY3VyYWN5IHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbG9vcj10cnVlXSAtIGZsb29yIG51bWVyaWNhbCB2YWx1ZXNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieSBkIHNcIikgLy89PiBcIjEgNiAyXCJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieXkgZGQgc3NzXCIpIC8vPT4gXCIwMSAwNiAwMDJcIlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJNIFNcIikgLy89PiBcIjEyIDUxODQwMjAwMFwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgLy8gcmV2ZXJzZS1jb21wYXQgc2luY2UgMS4yOyB3ZSBhbHdheXMgcm91bmQgZG93biBub3csIG5ldmVyIHVwLCBhbmQgd2UgZG8gaXQgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGZtdE9wdHMgPSB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZmxvb3I6IG9wdHMucm91bmQgIT09IGZhbHNlICYmIG9wdHMuZmxvb3IgIT09IGZhbHNlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLCBmbXRPcHRzKS5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcodGhpcywgZm10KVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBEdXJhdGlvbiB3aXRoIGFsbCB1bml0cyBpbmNsdWRlZC5cbiAgICogVG8gbW9kaWZ5IGl0cyBiZWhhdmlvciB1c2UgdGhlIGBsaXN0U3R5bGVgIGFuZCBhbnkgSW50bC5OdW1iZXJGb3JtYXQgb3B0aW9uLCB0aG91Z2ggYHVuaXREaXNwbGF5YCBpcyBlc3BlY2lhbGx5IHJlbGV2YW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvTnVtYmVyRm9ybWF0XG4gICAqIEBwYXJhbSBvcHRzIC0gT24gb3B0aW9uIG9iamVjdCB0byBvdmVycmlkZSB0aGUgZm9ybWF0dGluZy4gQWNjZXB0cyB0aGUgc2FtZSBrZXlzIGFzIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnQuTnVtYmVyRm9ybWF0YCBjb25zdHJ1Y3RvciwgYXMgd2VsbCBhcyBgbGlzdFN0eWxlYC5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIGR1ciA9IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxLCBob3VyczogNSwgbWludXRlczogNiB9KVxuICAgKiBkdXIudG9IdW1hbigpIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCA2IG1pbnV0ZXMnXG4gICAqIGR1ci50b0h1bWFuKHsgbGlzdFN0eWxlOiBcImxvbmdcIiB9KSAvLz0+ICcxIGRheSwgNSBob3VycywgYW5kIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyB1bml0RGlzcGxheTogXCJzaG9ydFwiIH0pIC8vPT4gJzEgZGF5LCA1IGhyLCA2IG1pbidcbiAgICogYGBgXG4gICAqL1xuICB0b0h1bWFuKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGwgPSBvcmRlcmVkVW5pdHNcbiAgICAgIC5tYXAoKHVuaXQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZXNbdW5pdF07XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9jXG4gICAgICAgICAgLm51bWJlckZvcm1hdHRlcih7IHN0eWxlOiBcInVuaXRcIiwgdW5pdERpc3BsYXk6IFwibG9uZ1wiLCAuLi5vcHRzLCB1bml0OiB1bml0LnNsaWNlKDAsIC0xKSB9KVxuICAgICAgICAgIC5mb3JtYXQodmFsKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChuKSA9PiBuKTtcblxuICAgIHJldHVybiB0aGlzLmxvY1xuICAgICAgLmxpc3RGb3JtYXR0ZXIoeyB0eXBlOiBcImNvbmp1bmN0aW9uXCIsIHN0eWxlOiBvcHRzLmxpc3RTdHlsZSB8fCBcIm5hcnJvd1wiLCAuLi5vcHRzIH0pXG4gICAgICAuZm9ybWF0KGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoaXMgRHVyYXRpb24ncyB2YWx1ZXMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9XG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHRvT2JqZWN0KCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHsgLi4udGhpcy52YWx1ZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAzLCBzZWNvbmRzOiA0NSB9KS50b0lTTygpIC8vPT4gJ1AzWVQ0NVMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDQsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDRNVDQ1UydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNSB9KS50b0lTTygpIC8vPT4gJ1A1TSdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDUgfSkudG9JU08oKSAvLz0+ICdQVDVNJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWlsbGlzZWNvbmRzOiA2IH0pLnRvSVNPKCkgLy89PiAnUFQwLjAwNlMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKCkge1xuICAgIC8vIHdlIGNvdWxkIHVzZSB0aGUgZm9ybWF0dGVyLCBidXQgdGhpcyBpcyBhbiBlYXNpZXIgd2F5IHRvIGdldCB0aGUgbWluaW11bSBzdHJpbmdcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgcyA9IFwiUFwiO1xuICAgIGlmICh0aGlzLnllYXJzICE9PSAwKSBzICs9IHRoaXMueWVhcnMgKyBcIllcIjtcbiAgICBpZiAodGhpcy5tb250aHMgIT09IDAgfHwgdGhpcy5xdWFydGVycyAhPT0gMCkgcyArPSB0aGlzLm1vbnRocyArIHRoaXMucXVhcnRlcnMgKiAzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMud2Vla3MgIT09IDApIHMgKz0gdGhpcy53ZWVrcyArIFwiV1wiO1xuICAgIGlmICh0aGlzLmRheXMgIT09IDApIHMgKz0gdGhpcy5kYXlzICsgXCJEXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDAgfHwgdGhpcy5taW51dGVzICE9PSAwIHx8IHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMClcbiAgICAgIHMgKz0gXCJUXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDApIHMgKz0gdGhpcy5ob3VycyArIFwiSFwiO1xuICAgIGlmICh0aGlzLm1pbnV0ZXMgIT09IDApIHMgKz0gdGhpcy5taW51dGVzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMClcbiAgICAgIC8vIHRoaXMgd2lsbCBoYW5kbGUgXCJmbG9hdGluZyBwb2ludCBtYWRuZXNzXCIgYnkgcmVtb3ZpbmcgZXh0cmEgZGVjaW1hbCBwbGFjZXNcbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU4ODAwNC9pcy1mbG9hdGluZy1wb2ludC1tYXRoLWJyb2tlblxuICAgICAgcyArPSByb3VuZFRvKHRoaXMuc2Vjb25kcyArIHRoaXMubWlsbGlzZWNvbmRzIC8gMTAwMCwgMykgKyBcIlNcIjtcbiAgICBpZiAocyA9PT0gXCJQXCIpIHMgKz0gXCJUMFNcIjtcbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiwgZm9ybWF0dGVkIGFzIGEgdGltZSBvZiBkYXkuXG4gICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGR1cmF0aW9uIGlzIGludmFsaWQsIG5lZ2F0aXZlLCBvciBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMjQgaG91cnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzU2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIHNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVQcmVmaXg9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgYFRgIHByZWZpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXRcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoKSAvLz0+ICcxMTowMDowMC4wMDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NNaWxsaXNlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDA6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NTZWNvbmRzOiB0cnVlIH0pIC8vPT4gJzExOjAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBmb3JtYXQ6ICdiYXNpYycgfSkgLy89PiAnMTEwMDAwLjAwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09UaW1lKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1pbGxpcyA9IHRoaXMudG9NaWxsaXMoKTtcbiAgICBpZiAobWlsbGlzIDwgMCB8fCBtaWxsaXMgPj0gODY0MDAwMDApIHJldHVybiBudWxsO1xuXG4gICAgb3B0cyA9IHtcbiAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzU2Vjb25kczogZmFsc2UsXG4gICAgICBpbmNsdWRlUHJlZml4OiBmYWxzZSxcbiAgICAgIGZvcm1hdDogXCJleHRlbmRlZFwiLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNoaWZ0VG8oXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCIpO1xuXG4gICAgbGV0IGZtdCA9IG9wdHMuZm9ybWF0ID09PSBcImJhc2ljXCIgPyBcImhobW1cIiA6IFwiaGg6bW1cIjtcblxuICAgIGlmICghb3B0cy5zdXBwcmVzc1NlY29uZHMgfHwgdmFsdWUuc2Vjb25kcyAhPT0gMCB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgIGZtdCArPSBvcHRzLmZvcm1hdCA9PT0gXCJiYXNpY1wiID8gXCJzc1wiIDogXCI6c3NcIjtcbiAgICAgIGlmICghb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcyB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgICAgZm10ICs9IFwiLlNTU1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzdHIgPSB2YWx1ZS50b0Zvcm1hdChmbXQpO1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZVByZWZpeCkge1xuICAgICAgc3RyID0gXCJUXCIgKyBzdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBkZWJ1Z2dpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvSVNPKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXMoXCJtaWxsaXNlY29uZHNcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi4gQWxpYXMgb2Yge0BsaW5rIHRvTWlsbGlzfVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB2YWx1ZU9mKCkge1xuICAgIHJldHVybiB0aGlzLnRvTWlsbGlzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGlzIER1cmF0aW9uIGxvbmdlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBwbHVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShkdXIudmFsdWVzLCBrKSB8fCBoYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlcywgaykpIHtcbiAgICAgICAgcmVzdWx0W2tdID0gZHVyLmdldChrKSArIHRoaXMuZ2V0KGspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBzaG9ydGVyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbWludXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5wbHVzKGR1ci5uZWdhdGUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbGUgdGhpcyBEdXJhdGlvbiBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdW5pdC4gQXJpdHkgaXMgMSBvciAyOiB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYW5kLCBvcHRpb25hbGx5LCB0aGUgdW5pdCBuYW1lLiBNdXN0IHJldHVybiBhIG51bWJlci5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cyh4ID0+IHggKiAyKSAvLz0+IHsgaG91cnM6IDIsIG1pbnV0ZXM6IDYwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cygoeCwgdSkgPT4gdSA9PT0gXCJob3VyXCIgPyB4ICogMiA6IHgpIC8vPT4geyBob3VyczogMiwgbWludXRlczogMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG1hcFVuaXRzKGZuKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIHJlc3VsdFtrXSA9IGFzTnVtYmVyKGZuKHRoaXMudmFsdWVzW2tdLCBrKSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5J1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgneWVhcnMnKSAvLz0+IDJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ21vbnRocycpIC8vPT4gMFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnZGF5cycpIC8vPT4gM1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQodW5pdCkge1xuICAgIHJldHVybiB0aGlzW0R1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIHZhbHVlcyBvZiBzcGVjaWZpZWQgdW5pdHMuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnNcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IHllYXJzOiAyMDE3IH0pXG4gICAqIEBleGFtcGxlIGR1ci5zZXQoeyBob3VyczogOCwgbWludXRlczogMzAgfSlcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzZXQodmFsdWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgbWl4ZWQgPSB7IC4uLnRoaXMudmFsdWVzLCAuLi5ub3JtYWxpemVPYmplY3QodmFsdWVzLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSB9O1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogbWl4ZWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlIGFuZC9vciBudW1iZXJpbmdTeXN0ZW0uICBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIGR1ci5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIGNvbnZlcnNpb25BY2N1cmFjeSB9ID0ge30pIHtcbiAgICBjb25zdCBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtIH0pLFxuICAgICAgb3B0cyA9IHsgbG9jIH07XG5cbiAgICBpZiAoY29udmVyc2lvbkFjY3VyYWN5KSB7XG4gICAgICBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGNvbnZlcnNpb25BY2N1cmFjeTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUodGhpcywgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGR1cmF0aW9uIGluIHRoZSBzcGVjaWZpZWQgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlcycgb3IgJ2RheXMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAxfSkuYXMoJ2RheXMnKSAvLz0+IDM2NVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdtb250aHMnKSAvLz0+IDEyXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe2hvdXJzOiA2MH0pLmFzKCdkYXlzJykgLy89PiAyLjVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgYXModW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnNoaWZ0VG8odW5pdCkuZ2V0KHVuaXQpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGlzIER1cmF0aW9uIHRvIGl0cyBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gaW4gaXRzIGN1cnJlbnQgdW5pdHMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTIsIG1pbnV0ZXM6IC00NSB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDE1IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBub3JtYWxpemUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHZhbHMgPSB0aGlzLnRvT2JqZWN0KCk7XG4gICAgbm9ybWFsaXplVmFsdWVzKHRoaXMubWF0cml4LCB2YWxzKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IHZhbHMgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGlzIER1cmF0aW9uIGludG8gaXRzIHJlcHJlc2VudGF0aW9uIGluIGEgZGlmZmVyZW50IHNldCBvZiB1bml0cy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5zaGlmdFRvKCdtaW51dGVzJywgJ21pbGxpc2Vjb25kcycpLnRvT2JqZWN0KCkgLy89PiB7IG1pbnV0ZXM6IDYwLCBtaWxsaXNlY29uZHM6IDMwMDAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzaGlmdFRvKC4uLnVuaXRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdW5pdHMgPSB1bml0cy5tYXAoKHUpID0+IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodSkpO1xuXG4gICAgY29uc3QgYnVpbHQgPSB7fSxcbiAgICAgIGFjY3VtdWxhdGVkID0ge30sXG4gICAgICB2YWxzID0gdGhpcy50b09iamVjdCgpO1xuICAgIGxldCBsYXN0VW5pdDtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmICh1bml0cy5pbmRleE9mKGspID49IDApIHtcbiAgICAgICAgbGFzdFVuaXQgPSBrO1xuXG4gICAgICAgIGxldCBvd24gPSAwO1xuXG4gICAgICAgIC8vIGFueXRoaW5nIHdlIGhhdmVuJ3QgYm9pbGVkIGRvd24geWV0IHNob3VsZCBnZXQgYm9pbGVkIHRvIHRoaXMgdW5pdFxuICAgICAgICBmb3IgKGNvbnN0IGFrIGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICAgICAgb3duICs9IHRoaXMubWF0cml4W2FrXVtrXSAqIGFjY3VtdWxhdGVkW2FrXTtcbiAgICAgICAgICBhY2N1bXVsYXRlZFtha10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGx1cyBhbnl0aGluZyB0aGF0J3MgYWxyZWFkeSBpbiB0aGlzIHVuaXRcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgICAgb3duICs9IHZhbHNba107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpID0gTWF0aC50cnVuYyhvd24pO1xuICAgICAgICBidWlsdFtrXSA9IGk7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gKG93biAqIDEwMDAgLSBpICogMTAwMCkgLyAxMDAwO1xuXG4gICAgICAgIC8vIHBsdXMgYW55dGhpbmcgZnVydGhlciBkb3duIHRoZSBjaGFpbiB0aGF0IHNob3VsZCBiZSByb2xsZWQgdXAgaW4gdG8gdGhpc1xuICAgICAgICBmb3IgKGNvbnN0IGRvd24gaW4gdmFscykge1xuICAgICAgICAgIGlmIChvcmRlcmVkVW5pdHMuaW5kZXhPZihkb3duKSA+IG9yZGVyZWRVbml0cy5pbmRleE9mKGspKSB7XG4gICAgICAgICAgICBjb252ZXJ0KHRoaXMubWF0cml4LCB2YWxzLCBkb3duLCBidWlsdCwgayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgd2luZ3MgdG8gYm9pbCBpdCBsYXRlclxuICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkge1xuICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IHZhbHNba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYW55dGhpbmcgbGVmdG92ZXIgYmVjb21lcyB0aGUgZGVjaW1hbCBmb3IgdGhlIGxhc3QgdW5pdFxuICAgIC8vIGxhc3RVbml0IG11c3QgYmUgZGVmaW5lZCBzaW5jZSB1bml0cyBpcyBub3QgZW1wdHlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhY2N1bXVsYXRlZCkge1xuICAgICAgaWYgKGFjY3VtdWxhdGVkW2tleV0gIT09IDApIHtcbiAgICAgICAgYnVpbHRbbGFzdFVuaXRdICs9XG4gICAgICAgICAga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBidWlsdCB9LCB0cnVlKS5ub3JtYWxpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5lZ2F0aXZlIG9mIHRoaXMgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgc2Vjb25kczogMzAgfSkubmVnYXRlKCkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IC0xLCBzZWNvbmRzOiAtMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG5lZ2F0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgbmVnYXRlZCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIG5lZ2F0ZWRba10gPSB0aGlzLnZhbHVlc1trXSA9PT0gMCA/IDAgOiAtdGhpcy52YWx1ZXNba107XG4gICAgfVxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogbmVnYXRlZCB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHllYXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHllYXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy55ZWFycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcXVhcnRlcnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgcXVhcnRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnF1YXJ0ZXJzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb250aHMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbW9udGhzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5tb250aHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWtzXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLndlZWtzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXlzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmRheXMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGhvdXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGhvdXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5ob3VycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWludXRlcy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtaW51dGVzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taW51dGVzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgc2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuc2Vjb25kcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWlsbGlzZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taWxsaXNlY29uZHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIER1cmF0aW9uIGlzIGludmFsaWQuIEludmFsaWQgZHVyYXRpb25zIGFyZSByZXR1cm5lZCBieSBkaWZmIG9wZXJhdGlvbnNcbiAgICogb24gaW52YWxpZCBEYXRlVGltZXMgb3IgSW50ZXJ2YWxzLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNoZWNrXG4gICAqIFR3byBEdXJhdGlvbnMgYXJlIGVxdWFsIGlmZiB0aGV5IGhhdmUgdGhlIHNhbWUgdW5pdHMgYW5kIHRoZSBzYW1lIHZhbHVlcyBmb3IgZWFjaCB1bml0LlxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXEodjEsIHYyKSB7XG4gICAgICAvLyBDb25zaWRlciAwIGFuZCB1bmRlZmluZWQgYXMgZXF1YWxcbiAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkIHx8IHYxID09PSAwKSByZXR1cm4gdjIgPT09IHVuZGVmaW5lZCB8fCB2MiA9PT0gMDtcbiAgICAgIHJldHVybiB2MSA9PT0gdjI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB1IG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKCFlcSh0aGlzLnZhbHVlc1t1XSwgb3RoZXIudmFsdWVzW3VdKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCAiaW1wb3J0IERhdGVUaW1lLCB7IGZyaWVuZGx5RGF0ZVRpbWUgfSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkSW50ZXJ2YWxFcnJvciB9IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgSW50ZXJ2YWxcIjtcblxuLy8gY2hlY2tzIGlmIHRoZSBzdGFydCBpcyBlcXVhbCB0byBvciBiZWZvcmUgdGhlIGVuZFxuZnVuY3Rpb24gdmFsaWRhdGVTdGFydEVuZChzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQgfHwgIXN0YXJ0LmlzVmFsaWQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGFydFwiKTtcbiAgfSBlbHNlIGlmICghZW5kIHx8ICFlbmQuaXNWYWxpZCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFwibWlzc2luZyBvciBpbnZhbGlkIGVuZFwiKTtcbiAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFxuICAgICAgXCJlbmQgYmVmb3JlIHN0YXJ0XCIsXG4gICAgICBgVGhlIGVuZCBvZiBhbiBpbnRlcnZhbCBtdXN0IGJlIGFmdGVyIGl0cyBzdGFydCwgYnV0IHlvdSBoYWQgc3RhcnQ9JHtzdGFydC50b0lTTygpfSBhbmQgZW5kPSR7ZW5kLnRvSVNPKCl9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJbnRlcnZhbCBvYmplY3QgcmVwcmVzZW50cyBhIGhhbGYtb3BlbiBpbnRlcnZhbCBvZiB0aW1lLCB3aGVyZSBlYWNoIGVuZHBvaW50IGlzIGEge0BsaW5rIERhdGVUaW1lfS4gQ29uY2VwdHVhbGx5LCBpdCdzIGEgY29udGFpbmVyIGZvciB0aG9zZSB0d28gZW5kcG9pbnRzLCBhY2NvbXBhbmllZCBieSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgY29tcGFyaW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uXG4gKlxuICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgbWV0aG9kcyBhbmQgZ2V0dGVycyBpbiBJbnRlcnZhbDpcbiAqXG4gKiAqICoqQ3JlYXRpb24qKiBUbyBjcmVhdGUgYW4gSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjZnJvbURhdGVUaW1lc30sIHtAbGluayBJbnRlcnZhbCNhZnRlcn0sIHtAbGluayBJbnRlcnZhbCNiZWZvcmV9LCBvciB7QGxpbmsgSW50ZXJ2YWwjZnJvbUlTT30uXG4gKiAqICoqQWNjZXNzb3JzKiogVXNlIHtAbGluayBJbnRlcnZhbCNzdGFydH0gYW5kIHtAbGluayBJbnRlcnZhbCNlbmR9IHRvIGdldCB0aGUgc3RhcnQgYW5kIGVuZC5cbiAqICogKipJbnRlcnJvZ2F0aW9uKiogVG8gYW5hbHl6ZSB0aGUgSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjY291bnR9LCB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSwge0BsaW5rIEludGVydmFsI2hhc1NhbWV9LCB7QGxpbmsgSW50ZXJ2YWwjY29udGFpbnN9LCB7QGxpbmsgSW50ZXJ2YWwjaXNBZnRlcn0sIG9yIHtAbGluayBJbnRlcnZhbCNpc0JlZm9yZX0uXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgb3RoZXIgSW50ZXJ2YWxzIG91dCBvZiB0aGlzIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNzZXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRBdH0sIHtAbGluayBJbnRlcnZhbCNzcGxpdEJ5fSwge0BsaW5rIEludGVydmFsI2RpdmlkZUVxdWFsbHl9LCB7QGxpbmsgSW50ZXJ2YWwjbWVyZ2V9LCB7QGxpbmsgSW50ZXJ2YWwjeG9yfSwge0BsaW5rIEludGVydmFsI3VuaW9ufSwge0BsaW5rIEludGVydmFsI2ludGVyc2VjdGlvbn0sIG9yIHtAbGluayBJbnRlcnZhbCNkaWZmZXJlbmNlfS5cbiAqICogKipDb21wYXJpc29uKiogVG8gY29tcGFyZSB0aGlzIEludGVydmFsIHRvIGFub3RoZXIgb25lLCB1c2Uge0BsaW5rIEludGVydmFsI2VxdWFsc30sIHtAbGluayBJbnRlcnZhbCNvdmVybGFwc30sIHtAbGluayBJbnRlcnZhbCNhYnV0c1N0YXJ0fSwge0BsaW5rIEludGVydmFsI2FidXRzRW5kfSwge0BsaW5rIEludGVydmFsI2VuZ3VsZnN9XG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgSW50ZXJ2YWwgaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgSW50ZXJ2YWwjdG9TdHJpbmd9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU099LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09EYXRlfSwge0BsaW5rIEludGVydmFsI3RvSVNPVGltZX0sIHtAbGluayBJbnRlcnZhbCN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgSW50ZXJ2YWwjdG9EdXJhdGlvbn0uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludGVydmFsIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnMgPSBjb25maWcuc3RhcnQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5lID0gY29uZmlnLmVuZDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNMdXhvbkludGVydmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBJbnRlcnZhbCBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkSW50ZXJ2YWxFcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGFuIGVuZCBEYXRlVGltZS4gSW5jbHVzaXZlIG9mIHRoZSBzdGFydCBidXQgbm90IHRoZSBlbmQuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZFxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBmcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBidWlsdFN0YXJ0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCksXG4gICAgICBidWlsdEVuZCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlRXJyb3IgPSB2YWxpZGF0ZVN0YXJ0RW5kKGJ1aWx0U3RhcnQsIGJ1aWx0RW5kKTtcblxuICAgIGlmICh2YWxpZGF0ZUVycm9yID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoe1xuICAgICAgICBzdGFydDogYnVpbHRTdGFydCxcbiAgICAgICAgZW5kOiBidWlsdEVuZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYSBzdGFydCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgdG8uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0XG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC5cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgYWZ0ZXIoc3RhcnQsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0LCBkdC5wbHVzKGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIGVuZCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgYmFja3dhcmRzIHRvLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmRcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsLlxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBiZWZvcmUoZW5kLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQubWludXMoZHVyKSwgZHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIElTTyA4NjAxIHN0cmluZy5cbiAgICogQWNjZXB0cyBgPHN0YXJ0Pi88ZW5kPmAsIGA8c3RhcnQ+LzxkdXJhdGlvbj5gLCBhbmQgYDxkdXJhdGlvbj4vPGVuZD5gIGZvcm1hdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIElTTyBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIG9wdGlvbnMgdG8gcGFzcyB7QGxpbmsgRGF0ZVRpbWUjZnJvbUlTT30gYW5kIG9wdGlvbmFsbHkge0BsaW5rIER1cmF0aW9uI2Zyb21JU099XG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3MsIGVdID0gKHRleHQgfHwgXCJcIikuc3BsaXQoXCIvXCIsIDIpO1xuICAgIGlmIChzICYmIGUpIHtcbiAgICAgIGxldCBzdGFydCwgc3RhcnRJc1ZhbGlkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhcnQgPSBEYXRlVGltZS5mcm9tSVNPKHMsIG9wdHMpO1xuICAgICAgICBzdGFydElzVmFsaWQgPSBzdGFydC5pc1ZhbGlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdGFydElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVuZCwgZW5kSXNWYWxpZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVuZCA9IERhdGVUaW1lLmZyb21JU08oZSwgb3B0cyk7XG4gICAgICAgIGVuZElzVmFsaWQgPSBlbmQuaXNWYWxpZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZW5kSXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnRJc1ZhbGlkICYmIGVuZElzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydElzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhlLCBvcHRzKTtcbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmFmdGVyKHN0YXJ0LCBkdXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZElzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhzLCBvcHRzKTtcbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmJlZm9yZShlbmQsIGR1cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEludGVydmFsLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNJbnRlcnZhbChvKSB7XG4gICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkludGVydmFsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGFydCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IHN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnMgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVuZCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IGVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5lIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhdCBsZWFzdCBpdHMgc3RhcnQsIG1lYW5pbmcgdGhhdCB0aGUgSW50ZXJ2YWwgaXNuJ3QgJ2JhY2t3YXJkcycuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZFJlYXNvbiA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwgaW4gdGhlIHNwZWNpZmllZCB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byByZXR1cm4gdGhlIGxlbmd0aCBpbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgbGVuZ3RoKHVuaXQgPSBcIm1pbGxpc2Vjb25kc1wiKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9EdXJhdGlvbiguLi5bdW5pdF0pLmdldCh1bml0KSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiBtaW51dGVzLCBob3VycywgZGF5cywgbW9udGhzLCBvciB5ZWFycyBpbmNsdWRlZCBpbiB0aGUgSW50ZXJ2YWwsIGV2ZW4gaW4gcGFydC5cbiAgICogVW5saWtlIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9IHRoaXMgY291bnRzIHNlY3Rpb25zIG9mIHRoZSBjYWxlbmRhciwgbm90IHBlcmlvZHMgb2YgdGltZSwgZS5nLiBzcGVjaWZ5aW5nICdkYXknXG4gICAqIGFza3MgJ3doYXQgZGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMgaW50ZXJ2YWw/Jywgbm90ICdob3cgbWFueSBkYXlzIGxvbmcgaXMgdGhpcyBpbnRlcnZhbD8nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdD0nbWlsbGlzZWNvbmRzJ10gLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBjb3VudCh1bml0ID0gXCJtaWxsaXNlY29uZHNcIikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gTmFOO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGFydC5zdGFydE9mKHVuaXQpLFxuICAgICAgZW5kID0gdGhpcy5lbmQuc3RhcnRPZih1bml0KTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpKSArIDE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBhbmQgZW5kIGFyZSBib3RoIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NhbWUodW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsIHVuaXQpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBEYXRlVGltZXMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaXNBZnRlcihkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0JlZm9yZShkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZSA8PSBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWlucyhkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBkYXRlVGltZSAmJiB0aGlzLmUgPiBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldHNcIiB0aGUgc3RhcnQgYW5kL29yIGVuZCBkYXRlcy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gdGhlIHZhbHVlcyB0byBzZXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLnN0YXJ0IC0gdGhlIHN0YXJ0aW5nIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5lbmQgLSB0aGUgZW5kaW5nIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc2V0KHsgc3RhcnQsIGVuZCB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGF0IGVhY2ggb2YgdGhlIHNwZWNpZmllZCBEYXRlVGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzcGxpdEF0KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107XG4gICAgY29uc3Qgc29ydGVkID0gZGF0ZVRpbWVzXG4gICAgICAgIC5tYXAoZnJpZW5kbHlEYXRlVGltZSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gdGhpcy5jb250YWlucyhkKSlcbiAgICAgICAgLnNvcnQoKSxcbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICBsZXQgeyBzIH0gPSB0aGlzLFxuICAgICAgaSA9IDA7XG5cbiAgICB3aGlsZSAocyA8IHRoaXMuZSkge1xuICAgICAgY29uc3QgYWRkZWQgPSBzb3J0ZWRbaV0gfHwgdGhpcy5lLFxuICAgICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkO1xuICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpO1xuICAgICAgcyA9IG5leHQ7XG4gICAgICBpICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHNtYWxsZXIgSW50ZXJ2YWxzLCBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLlxuICAgKiBMZWZ0IG92ZXIgdGltZSBpcyBncm91cGVkIGludG8gYSBzbWFsbGVyIGludGVydmFsXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgbGVuZ3RoIG9mIGVhY2ggcmVzdWx0aW5nIGludGVydmFsLlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHNwbGl0QnkoZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFkdXIuaXNWYWxpZCB8fCBkdXIuYXMoXCJtaWxsaXNlY29uZHNcIikgPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgeyBzIH0gPSB0aGlzLFxuICAgICAgaWR4ID0gMSxcbiAgICAgIG5leHQ7XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgd2hpbGUgKHMgPCB0aGlzLmUpIHtcbiAgICAgIGNvbnN0IGFkZGVkID0gdGhpcy5zdGFydC5wbHVzKGR1ci5tYXBVbml0cygoeCkgPT4geCAqIGlkeCkpO1xuICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDtcbiAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIG5leHQpKTtcbiAgICAgIHMgPSBuZXh0O1xuICAgICAgaWR4ICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNtYWxsZXIgaW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyT2ZQYXJ0cyAtIFRoZSBudW1iZXIgb2YgSW50ZXJ2YWxzIHRvIGRpdmlkZSB0aGUgSW50ZXJ2YWwgaW50by5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBkaXZpZGVFcXVhbGx5KG51bWJlck9mUGFydHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnNwbGl0QnkodGhpcy5sZW5ndGgoKSAvIG51bWJlck9mUGFydHMpLnNsaWNlKDAsIG51bWJlck9mUGFydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgb3ZlcmxhcHMgd2l0aCB0aGUgc3BlY2lmaWVkIEludGVydmFsXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBvdmVybGFwcyhvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmUgPiBvdGhlci5zICYmIHRoaXMucyA8IG90aGVyLmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3Mgc3RhcnQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBhYnV0c1N0YXJ0KG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gK3RoaXMuZSA9PT0gK290aGVyLnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBlbmQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBhYnV0c0VuZChvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICtvdGhlci5lID09PSArdGhpcy5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgZW5ndWxmcyB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZW5ndWxmcyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBvdGhlci5zICYmIHRoaXMuZSA+PSBvdGhlci5lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgaGFzIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgYXMgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlci5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucy5lcXVhbHMob3RoZXIucykgJiYgdGhpcy5lLmVxdWFscyhvdGhlci5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0aW5nIEludGVydmFsIGhhcyB0aGUgbWF4aW11bSBzdGFydCB0aW1lIGFuZCB0aGUgbWluaW11bSBlbmQgdGltZSBvZiB0aGUgdHdvIEludGVydmFscy5cbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBpbnRlcnNlY3Rpb24gaXMgZW1wdHksIG1lYW5pbmcsIHRoZSBpbnRlcnZhbHMgZG9uJ3QgaW50ZXJzZWN0LlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIGludGVyc2VjdGlvbihvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBzID0gdGhpcy5zID4gb3RoZXIucyA/IHRoaXMucyA6IG90aGVyLnMsXG4gICAgICBlID0gdGhpcy5lIDwgb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7XG5cbiAgICBpZiAocyA+PSBlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1pbmltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1heGltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW5pb24ob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcyA9IHRoaXMucyA8IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLFxuICAgICAgZSA9IHRoaXMuZSA+IG90aGVyLmUgPyB0aGlzLmUgOiBvdGhlci5lO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGFuIGFycmF5IG9mIEludGVydmFscyBpbnRvIGEgZXF1aXZhbGVudCBtaW5pbWFsIHNldCBvZiBJbnRlcnZhbHMuXG4gICAqIENvbWJpbmVzIG92ZXJsYXBwaW5nIGFuZCBhZGphY2VudCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtZXJnZShpbnRlcnZhbHMpIHtcbiAgICBjb25zdCBbZm91bmQsIGZpbmFsXSA9IGludGVydmFsc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IGEucyAtIGIucylcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbc29mYXIsIGN1cnJlbnRdLCBpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBpdGVtXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQub3ZlcmxhcHMoaXRlbSkgfHwgY3VycmVudC5hYnV0c1N0YXJ0KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBjdXJyZW50LnVuaW9uKGl0ZW0pXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtzb2Zhci5jb25jYXQoW2N1cnJlbnRdKSwgaXRlbV07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbW10sIG51bGxdXG4gICAgICApO1xuICAgIGlmIChmaW5hbCkge1xuICAgICAgZm91bmQucHVzaChmaW5hbCk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIHJlcHJlc2VudGluZyB0aGUgc3BhbnMgb2YgdGltZSB0aGF0IG9ubHkgYXBwZWFyIGluIG9uZSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy5cbiAgICogQHBhcmFtIHtBcnJheX0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHhvcihpbnRlcnZhbHMpIHtcbiAgICBsZXQgc3RhcnQgPSBudWxsLFxuICAgICAgY3VycmVudENvdW50ID0gMDtcbiAgICBjb25zdCByZXN1bHRzID0gW10sXG4gICAgICBlbmRzID0gaW50ZXJ2YWxzLm1hcCgoaSkgPT4gW1xuICAgICAgICB7IHRpbWU6IGkucywgdHlwZTogXCJzXCIgfSxcbiAgICAgICAgeyB0aW1lOiBpLmUsIHR5cGU6IFwiZVwiIH0sXG4gICAgICBdKSxcbiAgICAgIGZsYXR0ZW5lZCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4uZW5kcyksXG4gICAgICBhcnIgPSBmbGF0dGVuZWQuc29ydCgoYSwgYikgPT4gYS50aW1lIC0gYi50aW1lKTtcblxuICAgIGZvciAoY29uc3QgaSBvZiBhcnIpIHtcbiAgICAgIGN1cnJlbnRDb3VudCArPSBpLnR5cGUgPT09IFwic1wiID8gMSA6IC0xO1xuXG4gICAgICBpZiAoY3VycmVudENvdW50ID09PSAxKSB7XG4gICAgICAgIHN0YXJ0ID0gaS50aW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXJ0ICYmICtzdGFydCAhPT0gK2kudGltZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBpLnRpbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gSW50ZXJ2YWwubWVyZ2UocmVzdWx0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgc3BhbiBvZiB0aW1lIGluIHRoaXMgSW50ZXJ2YWwgdGhhdCBkb2Vzbid0IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7Li4uSW50ZXJ2YWx9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIGRpZmZlcmVuY2UoLi4uaW50ZXJ2YWxzKSB7XG4gICAgcmV0dXJuIEludGVydmFsLnhvcihbdGhpc10uY29uY2F0KGludGVydmFscykpXG4gICAgICAubWFwKChpKSA9PiB0aGlzLmludGVyc2VjdGlvbihpKSlcbiAgICAgIC5maWx0ZXIoKGkpID0+IGkgJiYgIWkuaXNFbXB0eSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYXBwcm9wcmlhdGUgZm9yIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgWyR7dGhpcy5zLnRvSVNPKCl9IFx1MjAxMyAke3RoaXMuZS50b0lTTygpfSlgO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTTyhvcHRzKX0vJHt0aGlzLmUudG9JU08ob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZGF0ZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgdGltZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTT0RhdGUoKX0vJHt0aGlzLmUudG9JU09EYXRlKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZShvcHRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9JU09UaW1lKG9wdHMpfS8ke3RoaXMuZS50b0lTT1RpbWUob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlRm9ybWF0IC0gdGhlIGZvcm1hdCBzdHJpbmcuIFRoaXMgc3RyaW5nIGZvcm1hdHMgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZS4gU2VlIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0gZm9yIGRldGFpbHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuc2VwYXJhdG9yID0gICcgXHUyMDEzICddIC0gYSBzZXBhcmF0b3IgdG8gcGxhY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCByZXByZXNlbnRhdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXQoZGF0ZUZvcm1hdCwgeyBzZXBhcmF0b3IgPSBcIiBcdTIwMTMgXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9JHtzZXBhcmF0b3J9JHt0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHRpbWUgc3Bhbm5lZCBieSB0aGlzIGludGVydmFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA4ODQ4OTI1NyB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ2RheXMnKS50b09iamVjdCgpIC8vPT4geyBkYXlzOiAxLjAyNDE4MTIxNTI3Nzc3NzggfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LjgyMDk1IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbihbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LCBzZWNvbmRzOiA0OS4yNTcgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCdzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgc2Vjb25kczogODg0ODkuMjU3IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICB0b0R1cmF0aW9uKHVuaXQsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZS5kaWZmKHRoaXMucywgdW5pdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIG1hcEZuIG9uIHRoZSBpbnRlcnZhbCBzdGFydCBhbmQgZW5kLCByZXR1cm5pbmcgYSBuZXcgSW50ZXJ2YWwgZnJvbSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnRvVVRDKCkpXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpXG4gICAqL1xuICBtYXBFbmRwb2ludHMobWFwRm4pIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTtcbiAgfVxufVxuIiwgImltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5cbmltcG9ydCB7IGhhc1JlbGF0aXZlIH0gZnJvbSBcIi4vaW1wbC91dGlsLmpzXCI7XG5cbi8qKlxuICogVGhlIEluZm8gY2xhc3MgY29udGFpbnMgc3RhdGljIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgZ2VuZXJhbCB0aW1lIGFuZCBkYXRlIHJlbGF0ZWQgZGF0YS4gRm9yIGV4YW1wbGUsIGl0IGhhcyBtZXRob2RzIGZvciBmaW5kaW5nIG91dCBpZiBhIHRpbWUgem9uZSBoYXMgYSBEU1QsIGZvciBsaXN0aW5nIHRoZSBtb250aHMgaW4gYW55IHN1cHBvcnRlZCBsb2NhbGUsIGFuZCBmb3IgZGlzY292ZXJpbmcgd2hpY2ggb2YgTHV4b24gZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5mbyB7XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgY29udGFpbnMgYSBEU1QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gWm9uZSB0byBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIGVudmlyb25tZW50J3MgbG9jYWwgem9uZS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBoYXNEU1Qoem9uZSA9IFNldHRpbmdzLmRlZmF1bHRab25lKSB7XG4gICAgY29uc3QgcHJvdG8gPSBEYXRlVGltZS5ub3coKS5zZXRab25lKHpvbmUpLnNldCh7IG1vbnRoOiAxMiB9KTtcblxuICAgIHJldHVybiAhem9uZS5pc1VuaXZlcnNhbCAmJiBwcm90by5vZmZzZXQgIT09IHByb3RvLnNldCh7IG1vbnRoOiA2IH0pLm9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgaXMgYSB2YWxpZCBJQU5BIHNwZWNpZmllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBab25lIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZElBTkFab25lKHpvbmUpIHtcbiAgICByZXR1cm4gSUFOQVpvbmUuaXNWYWxpZFpvbmUoem9uZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGlucHV0IGludG8gYSB7QGxpbmsgWm9uZX0gaW5zdGFuY2UuXG4gICAqXG4gICAqICogSWYgYGlucHV0YCBpcyBhbHJlYWR5IGEgWm9uZSBpbnN0YW5jZSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHZhbGlkIHRpbWUgem9uZSBuYW1lLCBhIFpvbmUgaW5zdGFuY2VcbiAgICogICB3aXRoIHRoYXQgbmFtZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCByZWZlciB0byBhIGtub3duIHRpbWUgem9uZSwgYSBab25lXG4gICAqICAgaW5zdGFuY2Ugd2l0aCB7QGxpbmsgWm9uZSNpc1ZhbGlkfSA9PSBmYWxzZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXQgaXMgYSBudW1iZXIsIGEgWm9uZSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZml4ZWQgb2Zmc2V0XG4gICAqICAgaW4gbWludXRlcyBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgdGhlIGRlZmF1bHQgem9uZSBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZXxudW1iZXJ9IFtpbnB1dF0gLSB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkXG4gICAqIEByZXR1cm4ge1pvbmV9XG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplWm9uZShpbnB1dCkge1xuICAgIHJldHVybiBub3JtYWxpemVab25lKGlucHV0LCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgbW9udGggbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygpWzBdIC8vPT4gJ0phbnVhcnknXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcpWzBdIC8vPT4gJ0phbidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnKVswXSAvLz0+ICcxJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9IClbMF0gLy89PiAnamFudi4nXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdudW1lcmljJywgeyBsb2NhbGU6ICdhcicgfSlbMF0gLy89PiAnXHUwNjYxJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbG9uZycsIHsgb3V0cHV0Q2FsZW5kYXI6ICdpc2xhbWljJyB9KVswXSAvLz0+ICdSYWJpXHUwMkJCIEknXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1vbnRocyhcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCIgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCBtb250aCBuYW1lcy5cbiAgICogRm9ybWF0IG1vbnRocyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIG1vbnRocyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gdGhlIGRheSBvZiB0aGUgbW9udGguIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI21vbnRoc31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtb250aHNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsLCBvdXRwdXRDYWxlbmRhciA9IFwiZ3JlZ29yeVwiIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikpLm1vbnRocyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIHdlZWsgbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIHdlZWtkYXkgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygpWzBdIC8vPT4gJ01vbmRheSdcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnKVswXSAvLz0+ICdNb24nXG4gICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSlbMF0gLy89PiAnbHVuLidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICdcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MkJcdTA2NDZcdTA2NEFcdTA2NDYnXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHdlZWtkYXlzKGxlbmd0aCA9IFwibG9uZ1wiLCB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgbnVsbCkpLndlZWtkYXlzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCB3ZWVrIG5hbWVzLlxuICAgKiBGb3JtYXQgd2Vla2RheXMgZGlmZmVyIGZyb20gc3RhbmRhbG9uZSB3ZWVrZGF5cyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gbW9yZSBkYXRlIGluZm9ybWF0aW9uLiBJbiBzb21lIGxhbmd1YWdlcywgdGhhdFxuICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuXG4gICAqIFNlZSB7QGxpbmsgSW5mbyN3ZWVrZGF5c31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibmFycm93XCIsIFwic2hvcnRcIiwgXCJsb25nXCIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPW51bGxdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgd2Vla2RheXNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgbWVyaWRpZW1zLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoKSAvLz0+IFsgJ0FNJywgJ1BNJyBdXG4gICAqIEBleGFtcGxlIEluZm8ubWVyaWRpZW1zKHsgbG9jYWxlOiAnbXknIH0pIC8vPT4gWyAnXHUxMDE0XHUxMDM2XHUxMDE0XHUxMDAwXHUxMDNBJywgJ1x1MTAwQVx1MTAxNFx1MTAzMScgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtZXJpZGllbXMoeyBsb2NhbGUgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSkubWVyaWRpZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGVyYXMsIHN1Y2ggYXMgWydCQycsICdBRCddLiBUaGUgbG9jYWxlIGNhbiBiZSBzcGVjaWZpZWQsIGJ1dCB0aGUgY2FsZW5kYXIgc3lzdGVtIGlzIGFsd2F5cyBHcmVnb3JpYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdzaG9ydCddIC0gdGhlIGxlbmd0aCBvZiB0aGUgZXJhIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwic2hvcnRcIiBvciBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygpIC8vPT4gWyAnQkMnLCAnQUQnIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJykgLy89PiBbICdCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJyBdXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygnbG9uZycsIHsgbG9jYWxlOiAnZnInIH0pIC8vPT4gWyAnYXZhbnQgSlx1MDBFOXN1cy1DaHJpc3QnLCAnYXByXHUwMEU4cyBKXHUwMEU5c3VzLUNocmlzdCcgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBlcmFzKGxlbmd0aCA9IFwic2hvcnRcIiwgeyBsb2NhbGUgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVsbCwgXCJncmVnb3J5XCIpLmVyYXMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNldCBvZiBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhpcyBlbnZpcm9ubWVudC5cbiAgICogU29tZSBmZWF0dXJlcyBvZiBMdXhvbiBhcmUgbm90IGF2YWlsYWJsZSBpbiBhbGwgZW52aXJvbm1lbnRzLiBGb3IgZXhhbXBsZSwgb24gb2xkZXIgYnJvd3NlcnMsIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCdzIHRoZSBjYXNlLlxuICAgKiBLZXlzOlxuICAgKiAqIGByZWxhdGl2ZWA6IHdoZXRoZXIgdGhpcyBlbnZpcm9ubWVudCBzdXBwb3J0cyByZWxhdGl2ZSB0aW1lIGZvcm1hdHRpbmdcbiAgICogQGV4YW1wbGUgSW5mby5mZWF0dXJlcygpIC8vPT4geyByZWxhdGl2ZTogZmFsc2UgfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZmVhdHVyZXMoKSB7XG4gICAgcmV0dXJuIHsgcmVsYXRpdmU6IGhhc1JlbGF0aXZlKCkgfTtcbiAgfVxufVxuIiwgImltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gZGF5RGlmZihlYXJsaWVyLCBsYXRlcikge1xuICBjb25zdCB1dGNEYXlTdGFydCA9IChkdCkgPT4gZHQudG9VVEMoMCwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpLFxuICAgIG1zID0gdXRjRGF5U3RhcnQobGF0ZXIpIC0gdXRjRGF5U3RhcnQoZWFybGllcik7XG4gIHJldHVybiBNYXRoLmZsb29yKER1cmF0aW9uLmZyb21NaWxsaXMobXMpLmFzKFwiZGF5c1wiKSk7XG59XG5cbmZ1bmN0aW9uIGhpZ2hPcmRlckRpZmZzKGN1cnNvciwgbGF0ZXIsIHVuaXRzKSB7XG4gIGNvbnN0IGRpZmZlcnMgPSBbXG4gICAgW1wieWVhcnNcIiwgKGEsIGIpID0+IGIueWVhciAtIGEueWVhcl0sXG4gICAgW1wicXVhcnRlcnNcIiwgKGEsIGIpID0+IGIucXVhcnRlciAtIGEucXVhcnRlcl0sXG4gICAgW1wibW9udGhzXCIsIChhLCBiKSA9PiBiLm1vbnRoIC0gYS5tb250aCArIChiLnllYXIgLSBhLnllYXIpICogMTJdLFxuICAgIFtcbiAgICAgIFwid2Vla3NcIixcbiAgICAgIChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGRheXMgPSBkYXlEaWZmKGEsIGIpO1xuICAgICAgICByZXR1cm4gKGRheXMgLSAoZGF5cyAlIDcpKSAvIDc7XG4gICAgICB9LFxuICAgIF0sXG4gICAgW1wiZGF5c1wiLCBkYXlEaWZmXSxcbiAgXTtcblxuICBjb25zdCByZXN1bHRzID0ge307XG4gIGxldCBsb3dlc3RPcmRlciwgaGlnaFdhdGVyO1xuXG4gIGZvciAoY29uc3QgW3VuaXQsIGRpZmZlcl0gb2YgZGlmZmVycykge1xuICAgIGlmICh1bml0cy5pbmRleE9mKHVuaXQpID49IDApIHtcbiAgICAgIGxvd2VzdE9yZGVyID0gdW5pdDtcblxuICAgICAgbGV0IGRlbHRhID0gZGlmZmVyKGN1cnNvciwgbGF0ZXIpO1xuICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbdW5pdF06IGRlbHRhIH0pO1xuXG4gICAgICBpZiAoaGlnaFdhdGVyID4gbGF0ZXIpIHtcbiAgICAgICAgY3Vyc29yID0gY3Vyc29yLnBsdXMoeyBbdW5pdF06IGRlbHRhIC0gMSB9KTtcbiAgICAgICAgZGVsdGEgLT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnNvciA9IGhpZ2hXYXRlcjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0c1t1bml0XSA9IGRlbHRhO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGVhcmxpZXIsIGxhdGVyLCB1bml0cywgb3B0cykge1xuICBsZXQgW2N1cnNvciwgcmVzdWx0cywgaGlnaFdhdGVyLCBsb3dlc3RPcmRlcl0gPSBoaWdoT3JkZXJEaWZmcyhlYXJsaWVyLCBsYXRlciwgdW5pdHMpO1xuXG4gIGNvbnN0IHJlbWFpbmluZ01pbGxpcyA9IGxhdGVyIC0gY3Vyc29yO1xuXG4gIGNvbnN0IGxvd2VyT3JkZXJVbml0cyA9IHVuaXRzLmZpbHRlcihcbiAgICAodSkgPT4gW1wiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiXS5pbmRleE9mKHUpID49IDBcbiAgKTtcblxuICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChoaWdoV2F0ZXIgPCBsYXRlcikge1xuICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbbG93ZXN0T3JkZXJdOiAxIH0pO1xuICAgIH1cblxuICAgIGlmIChoaWdoV2F0ZXIgIT09IGN1cnNvcikge1xuICAgICAgcmVzdWx0c1tsb3dlc3RPcmRlcl0gPSAocmVzdWx0c1tsb3dlc3RPcmRlcl0gfHwgMCkgKyByZW1haW5pbmdNaWxsaXMgLyAoaGlnaFdhdGVyIC0gY3Vyc29yKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkdXJhdGlvbiA9IER1cmF0aW9uLmZyb21PYmplY3QocmVzdWx0cywgb3B0cyk7XG5cbiAgaWYgKGxvd2VyT3JkZXJVbml0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21NaWxsaXMocmVtYWluaW5nTWlsbGlzLCBvcHRzKVxuICAgICAgLnNoaWZ0VG8oLi4ubG93ZXJPcmRlclVuaXRzKVxuICAgICAgLnBsdXMoZHVyYXRpb24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkdXJhdGlvbjtcbiAgfVxufVxuIiwgImNvbnN0IG51bWJlcmluZ1N5c3RlbXMgPSB7XG4gIGFyYWI6IFwiW1xcdTA2NjAtXFx1MDY2OV1cIixcbiAgYXJhYmV4dDogXCJbXFx1MDZGMC1cXHUwNkY5XVwiLFxuICBiYWxpOiBcIltcXHUxQjUwLVxcdTFCNTldXCIsXG4gIGJlbmc6IFwiW1xcdTA5RTYtXFx1MDlFRl1cIixcbiAgZGV2YTogXCJbXFx1MDk2Ni1cXHUwOTZGXVwiLFxuICBmdWxsd2lkZTogXCJbXFx1RkYxMC1cXHVGRjE5XVwiLFxuICBndWpyOiBcIltcXHUwQUU2LVxcdTBBRUZdXCIsXG4gIGhhbmlkZWM6IFwiW1x1MzAwN3xcdTRFMDB8XHU0RThDfFx1NEUwOXxcdTU2REJ8XHU0RTk0fFx1NTE2RHxcdTRFMDN8XHU1MTZCfFx1NEU1RF1cIixcbiAga2htcjogXCJbXFx1MTdFMC1cXHUxN0U5XVwiLFxuICBrbmRhOiBcIltcXHUwQ0U2LVxcdTBDRUZdXCIsXG4gIGxhb286IFwiW1xcdTBFRDAtXFx1MEVEOV1cIixcbiAgbGltYjogXCJbXFx1MTk0Ni1cXHUxOTRGXVwiLFxuICBtbHltOiBcIltcXHUwRDY2LVxcdTBENkZdXCIsXG4gIG1vbmc6IFwiW1xcdTE4MTAtXFx1MTgxOV1cIixcbiAgbXltcjogXCJbXFx1MTA0MC1cXHUxMDQ5XVwiLFxuICBvcnlhOiBcIltcXHUwQjY2LVxcdTBCNkZdXCIsXG4gIHRhbWxkZWM6IFwiW1xcdTBCRTYtXFx1MEJFRl1cIixcbiAgdGVsdTogXCJbXFx1MEM2Ni1cXHUwQzZGXVwiLFxuICB0aGFpOiBcIltcXHUwRTUwLVxcdTBFNTldXCIsXG4gIHRpYnQ6IFwiW1xcdTBGMjAtXFx1MEYyOV1cIixcbiAgbGF0bjogXCJcXFxcZFwiLFxufTtcblxuY29uc3QgbnVtYmVyaW5nU3lzdGVtc1VURjE2ID0ge1xuICBhcmFiOiBbMTYzMiwgMTY0MV0sXG4gIGFyYWJleHQ6IFsxNzc2LCAxNzg1XSxcbiAgYmFsaTogWzY5OTIsIDcwMDFdLFxuICBiZW5nOiBbMjUzNCwgMjU0M10sXG4gIGRldmE6IFsyNDA2LCAyNDE1XSxcbiAgZnVsbHdpZGU6IFs2NTI5NiwgNjUzMDNdLFxuICBndWpyOiBbMjc5MCwgMjc5OV0sXG4gIGtobXI6IFs2MTEyLCA2MTIxXSxcbiAga25kYTogWzMzMDIsIDMzMTFdLFxuICBsYW9vOiBbMzc5MiwgMzgwMV0sXG4gIGxpbWI6IFs2NDcwLCA2NDc5XSxcbiAgbWx5bTogWzM0MzAsIDM0MzldLFxuICBtb25nOiBbNjE2MCwgNjE2OV0sXG4gIG15bXI6IFs0MTYwLCA0MTY5XSxcbiAgb3J5YTogWzI5MTgsIDI5MjddLFxuICB0YW1sZGVjOiBbMzA0NiwgMzA1NV0sXG4gIHRlbHU6IFszMTc0LCAzMTgzXSxcbiAgdGhhaTogWzM2NjQsIDM2NzNdLFxuICB0aWJ0OiBbMzg3MiwgMzg4MV0sXG59O1xuXG5jb25zdCBoYW5pZGVjQ2hhcnMgPSBudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMucmVwbGFjZSgvW1xcW3xcXF1dL2csIFwiXCIpLnNwbGl0KFwiXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEaWdpdHMoc3RyKSB7XG4gIGxldCB2YWx1ZSA9IHBhcnNlSW50KHN0ciwgMTApO1xuICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgIGlmIChzdHJbaV0uc2VhcmNoKG51bWJlcmluZ1N5c3RlbXMuaGFuaWRlYykgIT09IC0xKSB7XG4gICAgICAgIHZhbHVlICs9IGhhbmlkZWNDaGFycy5pbmRleE9mKHN0cltpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBudW1iZXJpbmdTeXN0ZW1zVVRGMTYpIHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gbnVtYmVyaW5nU3lzdGVtc1VURjE2W2tleV07XG4gICAgICAgICAgaWYgKGNvZGUgPj0gbWluICYmIGNvZGUgPD0gbWF4KSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBjb2RlIC0gbWluO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZ2l0UmVnZXgoeyBudW1iZXJpbmdTeXN0ZW0gfSwgYXBwZW5kID0gXCJcIikge1xuICByZXR1cm4gbmV3IFJlZ0V4cChgJHtudW1iZXJpbmdTeXN0ZW1zW251bWJlcmluZ1N5c3RlbSB8fCBcImxhdG5cIl19JHthcHBlbmR9YCk7XG59XG4iLCAiaW1wb3J0IHsgcGFyc2VNaWxsaXMsIGlzVW5kZWZpbmVkLCB1bnRydW5jYXRlWWVhciwgc2lnbmVkT2Zmc2V0LCBoYXNPd25Qcm9wZXJ0eSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi4vZGF0ZXRpbWUuanNcIjtcbmltcG9ydCB7IGRpZ2l0UmVnZXgsIHBhcnNlRGlnaXRzIH0gZnJvbSBcIi4vZGlnaXRzLmpzXCI7XG5pbXBvcnQgeyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcblxuY29uc3QgTUlTU0lOR19GVFAgPSBcIm1pc3NpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzIHN1cHBvcnRcIjtcblxuZnVuY3Rpb24gaW50VW5pdChyZWdleCwgcG9zdCA9IChpKSA9PiBpKSB7XG4gIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFtzXSkgPT4gcG9zdChwYXJzZURpZ2l0cyhzKSkgfTtcbn1cblxuY29uc3QgTkJTUCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTtcbmNvbnN0IHNwYWNlT3JOQlNQID0gYFsgJHtOQlNQfV1gO1xuY29uc3Qgc3BhY2VPck5CU1BSZWdFeHAgPSBuZXcgUmVnRXhwKHNwYWNlT3JOQlNQLCBcImdcIik7XG5cbmZ1bmN0aW9uIGZpeExpc3RSZWdleChzKSB7XG4gIC8vIG1ha2UgZG90cyBvcHRpb25hbCBhbmQgYWxzbyBtYWtlIHRoZW0gbGl0ZXJhbFxuICAvLyBtYWtlIHNwYWNlIGFuZCBub24gYnJlYWthYmxlIHNwYWNlIGNoYXJhY3RlcnMgaW50ZXJjaGFuZ2VhYmxlXG4gIHJldHVybiBzLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuP1wiKS5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBzcGFjZU9yTkJTUCk7XG59XG5cbmZ1bmN0aW9uIHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpIHtcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXCIpIC8vIGlnbm9yZSBkb3RzIHRoYXQgd2VyZSBtYWRlIG9wdGlvbmFsXG4gICAgLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIFwiIFwiKSAvLyBpbnRlcmNoYW5nZSBzcGFjZSBhbmQgbmJzcFxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBvbmVPZihzdHJpbmdzLCBzdGFydEluZGV4KSB7XG4gIGlmIChzdHJpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2V4OiBSZWdFeHAoc3RyaW5ncy5tYXAoZml4TGlzdFJlZ2V4KS5qb2luKFwifFwiKSksXG4gICAgICBkZXNlcjogKFtzXSkgPT5cbiAgICAgICAgc3RyaW5ncy5maW5kSW5kZXgoKGkpID0+IHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpID09PSBzdHJpcEluc2Vuc2l0aXZpdGllcyhpKSkgKyBzdGFydEluZGV4LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gb2Zmc2V0KHJlZ2V4LCBncm91cHMpIHtcbiAgcmV0dXJuIHsgcmVnZXgsIGRlc2VyOiAoWywgaCwgbV0pID0+IHNpZ25lZE9mZnNldChoLCBtKSwgZ3JvdXBzIH07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZShyZWdleCkge1xuICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbc10pID0+IHMgfTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVG9rZW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gdW5pdEZvclRva2VuKHRva2VuLCBsb2MpIHtcbiAgY29uc3Qgb25lID0gZGlnaXRSZWdleChsb2MpLFxuICAgIHR3byA9IGRpZ2l0UmVnZXgobG9jLCBcInsyfVwiKSxcbiAgICB0aHJlZSA9IGRpZ2l0UmVnZXgobG9jLCBcInszfVwiKSxcbiAgICBmb3VyID0gZGlnaXRSZWdleChsb2MsIFwiezR9XCIpLFxuICAgIHNpeCA9IGRpZ2l0UmVnZXgobG9jLCBcIns2fVwiKSxcbiAgICBvbmVPclR3byA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDJ9XCIpLFxuICAgIG9uZVRvVGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSwzfVwiKSxcbiAgICBvbmVUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDZ9XCIpLFxuICAgIG9uZVRvTmluZSA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDl9XCIpLFxuICAgIHR3b1RvRm91ciA9IGRpZ2l0UmVnZXgobG9jLCBcInsyLDR9XCIpLFxuICAgIGZvdXJUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCBcIns0LDZ9XCIpLFxuICAgIGxpdGVyYWwgPSAodCkgPT4gKHsgcmVnZXg6IFJlZ0V4cChlc2NhcGVUb2tlbih0LnZhbCkpLCBkZXNlcjogKFtzXSkgPT4gcywgbGl0ZXJhbDogdHJ1ZSB9KSxcbiAgICB1bml0YXRlID0gKHQpID0+IHtcbiAgICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBsaXRlcmFsKHQpO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0LnZhbCkge1xuICAgICAgICAvLyBlcmFcbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJzaG9ydFwiLCBmYWxzZSksIDApO1xuICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJsb25nXCIsIGZhbHNlKSwgMCk7XG4gICAgICAgIC8vIHllYXJzXG4gICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9TaXgpO1xuICAgICAgICBjYXNlIFwieXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d29Ub0ZvdXIsIHVudHJ1bmNhdGVZZWFyKTtcbiAgICAgICAgY2FzZSBcInl5eXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTtcbiAgICAgICAgY2FzZSBcInl5eXl5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91clRvU2l4KTtcbiAgICAgICAgY2FzZSBcInl5eXl5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHNpeCk7XG4gICAgICAgIC8vIG1vbnRoc1xuICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcImxvbmdcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcInNob3J0XCIsIGZhbHNlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwibG9uZ1wiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIC8vIG9yZGluYWxzXG4gICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9UaHJlZSk7XG4gICAgICAgIGNhc2UgXCJvb29cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7XG4gICAgICAgIC8vIHRpbWVcbiAgICAgICAgY2FzZSBcIkhIXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJoaFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwibW1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpO1xuICAgICAgICBjYXNlIFwiU1NTXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodGhyZWUpO1xuICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgIHJldHVybiBzaW1wbGUob25lVG9OaW5lKTtcbiAgICAgICAgY2FzZSBcInV1XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJ1dXVcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmUpO1xuICAgICAgICAvLyBtZXJpZGllbVxuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubWVyaWRpZW1zKCksIDApO1xuICAgICAgICAvLyB3ZWVrWWVhciAoaylcbiAgICAgICAgY2FzZSBcImtra2tcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTtcbiAgICAgICAgY2FzZSBcImtrXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvVG9Gb3VyLCB1bnRydW5jYXRlWWVhcik7XG4gICAgICAgIC8vIHdlZWtOdW1iZXIgKFcpXG4gICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiV1dcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICAvLyB3ZWVrZGF5c1xuICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7XG4gICAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJjY2NcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwibG9uZ1wiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICAvLyBvZmZzZXQvem9uZVxuICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgICByZXR1cm4gb2Zmc2V0KG5ldyBSZWdFeHAoYChbKy1dJHtvbmVPclR3by5zb3VyY2V9KSg/OjooJHt0d28uc291cmNlfSkpP2ApLCAyKTtcbiAgICAgICAgY2FzZSBcIlpaWlwiOlxuICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKCR7dHdvLnNvdXJjZX0pP2ApLCAyKTtcbiAgICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBaWlpaIChQU1QpIG9yIFpaWlpaIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpIGluIHBhcnNpbmdcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgYXJlXG4gICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZSgvW2Etel8rLS9dezEsMjU2fT8vaSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGxpdGVyYWwodCk7XG4gICAgICB9XG4gICAgfTtcblxuICBjb25zdCB1bml0ID0gdW5pdGF0ZSh0b2tlbikgfHwge1xuICAgIGludmFsaWRSZWFzb246IE1JU1NJTkdfRlRQLFxuICB9O1xuXG4gIHVuaXQudG9rZW4gPSB0b2tlbjtcblxuICByZXR1cm4gdW5pdDtcbn1cblxuY29uc3QgcGFydFR5cGVTdHlsZVRvVG9rZW5WYWwgPSB7XG4gIHllYXI6IHtcbiAgICBcIjItZGlnaXRcIjogXCJ5eVwiLFxuICAgIG51bWVyaWM6IFwieXl5eXlcIixcbiAgfSxcbiAgbW9udGg6IHtcbiAgICBudW1lcmljOiBcIk1cIixcbiAgICBcIjItZGlnaXRcIjogXCJNTVwiLFxuICAgIHNob3J0OiBcIk1NTVwiLFxuICAgIGxvbmc6IFwiTU1NTVwiLFxuICB9LFxuICBkYXk6IHtcbiAgICBudW1lcmljOiBcImRcIixcbiAgICBcIjItZGlnaXRcIjogXCJkZFwiLFxuICB9LFxuICB3ZWVrZGF5OiB7XG4gICAgc2hvcnQ6IFwiRUVFXCIsXG4gICAgbG9uZzogXCJFRUVFXCIsXG4gIH0sXG4gIGRheXBlcmlvZDogXCJhXCIsXG4gIGRheVBlcmlvZDogXCJhXCIsXG4gIGhvdXI6IHtcbiAgICBudW1lcmljOiBcImhcIixcbiAgICBcIjItZGlnaXRcIjogXCJoaFwiLFxuICB9LFxuICBtaW51dGU6IHtcbiAgICBudW1lcmljOiBcIm1cIixcbiAgICBcIjItZGlnaXRcIjogXCJtbVwiLFxuICB9LFxuICBzZWNvbmQ6IHtcbiAgICBudW1lcmljOiBcInNcIixcbiAgICBcIjItZGlnaXRcIjogXCJzc1wiLFxuICB9LFxufTtcblxuZnVuY3Rpb24gdG9rZW5Gb3JQYXJ0KHBhcnQsIGxvY2FsZSwgZm9ybWF0T3B0cykge1xuICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBwYXJ0O1xuXG4gIGlmICh0eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiB0cnVlLFxuICAgICAgdmFsOiB2YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc3R5bGUgPSBmb3JtYXRPcHRzW3R5cGVdO1xuXG4gIGxldCB2YWwgPSBwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbFt0eXBlXTtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICB2YWwgPSB2YWxbc3R5bGVdO1xuICB9XG5cbiAgaWYgKHZhbCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiBmYWxzZSxcbiAgICAgIHZhbCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZWdleCh1bml0cykge1xuICBjb25zdCByZSA9IHVuaXRzLm1hcCgodSkgPT4gdS5yZWdleCkucmVkdWNlKChmLCByKSA9PiBgJHtmfSgke3Iuc291cmNlfSlgLCBcIlwiKTtcbiAgcmV0dXJuIFtgXiR7cmV9JGAsIHVuaXRzXTtcbn1cblxuZnVuY3Rpb24gbWF0Y2goaW5wdXQsIHJlZ2V4LCBoYW5kbGVycykge1xuICBjb25zdCBtYXRjaGVzID0gaW5wdXQubWF0Y2gocmVnZXgpO1xuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3QgYWxsID0ge307XG4gICAgbGV0IG1hdGNoSW5kZXggPSAxO1xuICAgIGZvciAoY29uc3QgaSBpbiBoYW5kbGVycykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5KGhhbmRsZXJzLCBpKSkge1xuICAgICAgICBjb25zdCBoID0gaGFuZGxlcnNbaV0sXG4gICAgICAgICAgZ3JvdXBzID0gaC5ncm91cHMgPyBoLmdyb3VwcyArIDEgOiAxO1xuICAgICAgICBpZiAoIWgubGl0ZXJhbCAmJiBoLnRva2VuKSB7XG4gICAgICAgICAgYWxsW2gudG9rZW4udmFsWzBdXSA9IGguZGVzZXIobWF0Y2hlcy5zbGljZShtYXRjaEluZGV4LCBtYXRjaEluZGV4ICsgZ3JvdXBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgbWF0Y2hJbmRleCArPSBncm91cHM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbbWF0Y2hlcywgYWxsXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW21hdGNoZXMsIHt9XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkYXRlVGltZUZyb21NYXRjaGVzKG1hdGNoZXMpIHtcbiAgY29uc3QgdG9GaWVsZCA9ICh0b2tlbikgPT4ge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgIHJldHVybiBcIm1pbGxpc2Vjb25kXCI7XG4gICAgICBjYXNlIFwic1wiOlxuICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgIHJldHVybiBcIm1pbnV0ZVwiO1xuICAgICAgY2FzZSBcImhcIjpcbiAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgIHJldHVybiBcImRheVwiO1xuICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgcmV0dXJuIFwib3JkaW5hbFwiO1xuICAgICAgY2FzZSBcIkxcIjpcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgIHJldHVybiBcIm1vbnRoXCI7XG4gICAgICBjYXNlIFwieVwiOlxuICAgICAgICByZXR1cm4gXCJ5ZWFyXCI7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla2RheVwiO1xuICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla051bWJlclwiO1xuICAgICAgY2FzZSBcImtcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla1llYXJcIjtcbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBcInF1YXJ0ZXJcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBsZXQgem9uZSA9IG51bGw7XG4gIGxldCBzcGVjaWZpY09mZnNldDtcbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnopKSB7XG4gICAgem9uZSA9IElBTkFab25lLmNyZWF0ZShtYXRjaGVzLnopO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLlopKSB7XG4gICAgaWYgKCF6b25lKSB7XG4gICAgICB6b25lID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZShtYXRjaGVzLlopO1xuICAgIH1cbiAgICBzcGVjaWZpY09mZnNldCA9IG1hdGNoZXMuWjtcbiAgfVxuXG4gIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy5xKSkge1xuICAgIG1hdGNoZXMuTSA9IChtYXRjaGVzLnEgLSAxKSAqIDMgKyAxO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLmgpKSB7XG4gICAgaWYgKG1hdGNoZXMuaCA8IDEyICYmIG1hdGNoZXMuYSA9PT0gMSkge1xuICAgICAgbWF0Y2hlcy5oICs9IDEyO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlcy5oID09PSAxMiAmJiBtYXRjaGVzLmEgPT09IDApIHtcbiAgICAgIG1hdGNoZXMuaCA9IDA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hdGNoZXMuRyA9PT0gMCAmJiBtYXRjaGVzLnkpIHtcbiAgICBtYXRjaGVzLnkgPSAtbWF0Y2hlcy55O1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnUpKSB7XG4gICAgbWF0Y2hlcy5TID0gcGFyc2VNaWxsaXMobWF0Y2hlcy51KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHMgPSBPYmplY3Qua2V5cyhtYXRjaGVzKS5yZWR1Y2UoKHIsIGspID0+IHtcbiAgICBjb25zdCBmID0gdG9GaWVsZChrKTtcbiAgICBpZiAoZikge1xuICAgICAgcltmXSA9IG1hdGNoZXNba107XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gW3ZhbHMsIHpvbmUsIHNwZWNpZmljT2Zmc2V0XTtcbn1cblxubGV0IGR1bW15RGF0ZVRpbWVDYWNoZSA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldER1bW15RGF0ZVRpbWUoKSB7XG4gIGlmICghZHVtbXlEYXRlVGltZUNhY2hlKSB7XG4gICAgZHVtbXlEYXRlVGltZUNhY2hlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcygxNTU1NTU1NTU1NTU1KTtcbiAgfVxuXG4gIHJldHVybiBkdW1teURhdGVUaW1lQ2FjaGU7XG59XG5cbmZ1bmN0aW9uIG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0b2tlbiwgbG9jYWxlKSB7XG4gIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0T3B0cyA9IEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuLnZhbCk7XG5cbiAgaWYgKCFmb3JtYXRPcHRzKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0dGVyID0gRm9ybWF0dGVyLmNyZWF0ZShsb2NhbGUsIGZvcm1hdE9wdHMpO1xuICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXREYXRlVGltZVBhcnRzKGdldER1bW15RGF0ZVRpbWUoKSk7XG5cbiAgY29uc3QgdG9rZW5zID0gcGFydHMubWFwKChwKSA9PiB0b2tlbkZvclBhcnQocCwgbG9jYWxlLCBmb3JtYXRPcHRzKSk7XG5cbiAgaWYgKHRva2Vucy5pbmNsdWRlcyh1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZnVuY3Rpb24gZXhwYW5kTWFjcm9Ub2tlbnModG9rZW5zLCBsb2NhbGUpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4udG9rZW5zLm1hcCgodCkgPT4gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHQsIGxvY2FsZSkpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHtcbiAgY29uc3QgdG9rZW5zID0gZXhwYW5kTWFjcm9Ub2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZvcm1hdCksIGxvY2FsZSksXG4gICAgdW5pdHMgPSB0b2tlbnMubWFwKCh0KSA9PiB1bml0Rm9yVG9rZW4odCwgbG9jYWxlKSksXG4gICAgZGlzcXVhbGlmeWluZ1VuaXQgPSB1bml0cy5maW5kKCh0KSA9PiB0LmludmFsaWRSZWFzb24pO1xuXG4gIGlmIChkaXNxdWFsaWZ5aW5nVW5pdCkge1xuICAgIHJldHVybiB7IGlucHV0LCB0b2tlbnMsIGludmFsaWRSZWFzb246IGRpc3F1YWxpZnlpbmdVbml0LmludmFsaWRSZWFzb24gfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbcmVnZXhTdHJpbmcsIGhhbmRsZXJzXSA9IGJ1aWxkUmVnZXgodW5pdHMpLFxuICAgICAgcmVnZXggPSBSZWdFeHAocmVnZXhTdHJpbmcsIFwiaVwiKSxcbiAgICAgIFtyYXdNYXRjaGVzLCBtYXRjaGVzXSA9IG1hdGNoKGlucHV0LCByZWdleCwgaGFuZGxlcnMpLFxuICAgICAgW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXRdID0gbWF0Y2hlc1xuICAgICAgICA/IGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcylcbiAgICAgICAgOiBbbnVsbCwgbnVsbCwgdW5kZWZpbmVkXTtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkobWF0Y2hlcywgXCJhXCIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsIFwiSFwiKSkge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbid0IGluY2x1ZGUgbWVyaWRpZW0gd2hlbiBzcGVjaWZ5aW5nIDI0LWhvdXIgZm9ybWF0XCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7IGlucHV0LCB0b2tlbnMsIHJlZ2V4LCByYXdNYXRjaGVzLCBtYXRjaGVzLCByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0IH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHtcbiAgY29uc3QgeyByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkUmVhc29uIH0gPSBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpO1xuICByZXR1cm4gW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb25dO1xufVxuIiwgImltcG9ydCB7XG4gIGludGVnZXJCZXR3ZWVuLFxuICBpc0xlYXBZZWFyLFxuICB0aW1lT2JqZWN0LFxuICBkYXlzSW5ZZWFyLFxuICBkYXlzSW5Nb250aCxcbiAgd2Vla3NJbldlZWtZZWFyLFxuICBpc0ludGVnZXIsXG59IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBJbnZhbGlkIGZyb20gXCIuL2ludmFsaWQuanNcIjtcblxuY29uc3Qgbm9uTGVhcExhZGRlciA9IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF0sXG4gIGxlYXBMYWRkZXIgPSBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdO1xuXG5mdW5jdGlvbiB1bml0T3V0T2ZSYW5nZSh1bml0LCB2YWx1ZSkge1xuICByZXR1cm4gbmV3IEludmFsaWQoXG4gICAgXCJ1bml0IG91dCBvZiByYW5nZVwiLFxuICAgIGB5b3Ugc3BlY2lmaWVkICR7dmFsdWV9IChvZiB0eXBlICR7dHlwZW9mIHZhbHVlfSkgYXMgYSAke3VuaXR9LCB3aGljaCBpcyBpbnZhbGlkYFxuICApO1xufVxuXG5mdW5jdGlvbiBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTtcblxuICBpZiAoeWVhciA8IDEwMCAmJiB5ZWFyID49IDApIHtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG5cbiAgY29uc3QganMgPSBkLmdldFVUQ0RheSgpO1xuXG4gIHJldHVybiBqcyA9PT0gMCA/IDcgOiBqcztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSkge1xuICByZXR1cm4gZGF5ICsgKGlzTGVhcFllYXIoeWVhcikgPyBsZWFwTGFkZGVyIDogbm9uTGVhcExhZGRlcilbbW9udGggLSAxXTtcbn1cblxuZnVuY3Rpb24gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSB7XG4gIGNvbnN0IHRhYmxlID0gaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyLFxuICAgIG1vbnRoMCA9IHRhYmxlLmZpbmRJbmRleCgoaSkgPT4gaSA8IG9yZGluYWwpLFxuICAgIGRheSA9IG9yZGluYWwgLSB0YWJsZVttb250aDBdO1xuICByZXR1cm4geyBtb250aDogbW9udGgwICsgMSwgZGF5IH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JlZ29yaWFuVG9XZWVrKGdyZWdPYmopIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnT2JqLFxuICAgIG9yZGluYWwgPSBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KSxcbiAgICB3ZWVrZGF5ID0gZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpO1xuXG4gIGxldCB3ZWVrTnVtYmVyID0gTWF0aC5mbG9vcigob3JkaW5hbCAtIHdlZWtkYXkgKyAxMCkgLyA3KSxcbiAgICB3ZWVrWWVhcjtcblxuICBpZiAod2Vla051bWJlciA8IDEpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgLSAxO1xuICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhcikpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgKyAxO1xuICAgIHdlZWtOdW1iZXIgPSAxO1xuICB9IGVsc2Uge1xuICAgIHdlZWtZZWFyID0geWVhcjtcbiAgfVxuXG4gIHJldHVybiB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5LCAuLi50aW1lT2JqZWN0KGdyZWdPYmopIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrVG9HcmVnb3JpYW4od2Vla0RhdGEpIHtcbiAgY29uc3QgeyB3ZWVrWWVhciwgd2Vla051bWJlciwgd2Vla2RheSB9ID0gd2Vla0RhdGEsXG4gICAgd2Vla2RheU9mSmFuNCA9IGRheU9mV2Vlayh3ZWVrWWVhciwgMSwgNCksXG4gICAgeWVhckluRGF5cyA9IGRheXNJblllYXIod2Vla1llYXIpO1xuXG4gIGxldCBvcmRpbmFsID0gd2Vla051bWJlciAqIDcgKyB3ZWVrZGF5IC0gd2Vla2RheU9mSmFuNCAtIDMsXG4gICAgeWVhcjtcblxuICBpZiAob3JkaW5hbCA8IDEpIHtcbiAgICB5ZWFyID0gd2Vla1llYXIgLSAxO1xuICAgIG9yZGluYWwgKz0gZGF5c0luWWVhcih5ZWFyKTtcbiAgfSBlbHNlIGlmIChvcmRpbmFsID4geWVhckluRGF5cykge1xuICAgIHllYXIgPSB3ZWVrWWVhciArIDE7XG4gICAgb3JkaW5hbCAtPSBkYXlzSW5ZZWFyKHdlZWtZZWFyKTtcbiAgfSBlbHNlIHtcbiAgICB5ZWFyID0gd2Vla1llYXI7XG4gIH1cblxuICBjb25zdCB7IG1vbnRoLCBkYXkgfSA9IHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCk7XG4gIHJldHVybiB7IHllYXIsIG1vbnRoLCBkYXksIC4uLnRpbWVPYmplY3Qod2Vla0RhdGEpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub09yZGluYWwoZ3JlZ0RhdGEpIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnRGF0YTtcbiAgY29uc3Qgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpO1xuICByZXR1cm4geyB5ZWFyLCBvcmRpbmFsLCAuLi50aW1lT2JqZWN0KGdyZWdEYXRhKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkaW5hbFRvR3JlZ29yaWFuKG9yZGluYWxEYXRhKSB7XG4gIGNvbnN0IHsgeWVhciwgb3JkaW5hbCB9ID0gb3JkaW5hbERhdGE7XG4gIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdChvcmRpbmFsRGF0YSkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRXZWVrRGF0YShvYmopIHtcbiAgY29uc3QgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai53ZWVrWWVhciksXG4gICAgdmFsaWRXZWVrID0gaW50ZWdlckJldHdlZW4ob2JqLndlZWtOdW1iZXIsIDEsIHdlZWtzSW5XZWVrWWVhcihvYmoud2Vla1llYXIpKSxcbiAgICB2YWxpZFdlZWtkYXkgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla2RheSwgMSwgNyk7XG5cbiAgaWYgKCF2YWxpZFllYXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrWWVhclwiLCBvYmoud2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFdlZWspIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrXCIsIG9iai53ZWVrKTtcbiAgfSBlbHNlIGlmICghdmFsaWRXZWVrZGF5KSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwid2Vla2RheVwiLCBvYmoud2Vla2RheSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnZhbGlkT3JkaW5hbERhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgdmFsaWRPcmRpbmFsID0gaW50ZWdlckJldHdlZW4ob2JqLm9yZGluYWwsIDEsIGRheXNJblllYXIob2JqLnllYXIpKTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInllYXJcIiwgb2JqLnllYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE9yZGluYWwpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJvcmRpbmFsXCIsIG9iai5vcmRpbmFsKTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG9iaikge1xuICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLFxuICAgIHZhbGlkTW9udGggPSBpbnRlZ2VyQmV0d2VlbihvYmoubW9udGgsIDEsIDEyKSxcbiAgICB2YWxpZERheSA9IGludGVnZXJCZXR3ZWVuKG9iai5kYXksIDEsIGRheXNJbk1vbnRoKG9iai55ZWFyLCBvYmoubW9udGgpKTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInllYXJcIiwgb2JqLnllYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1vbnRoKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibW9udGhcIiwgb2JqLm1vbnRoKTtcbiAgfSBlbHNlIGlmICghdmFsaWREYXkpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJkYXlcIiwgb2JqLmRheSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnZhbGlkVGltZURhdGEob2JqKSB7XG4gIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0gPSBvYmo7XG4gIGNvbnN0IHZhbGlkSG91ciA9XG4gICAgICBpbnRlZ2VyQmV0d2Vlbihob3VyLCAwLCAyMykgfHxcbiAgICAgIChob3VyID09PSAyNCAmJiBtaW51dGUgPT09IDAgJiYgc2Vjb25kID09PSAwICYmIG1pbGxpc2Vjb25kID09PSAwKSxcbiAgICB2YWxpZE1pbnV0ZSA9IGludGVnZXJCZXR3ZWVuKG1pbnV0ZSwgMCwgNTkpLFxuICAgIHZhbGlkU2Vjb25kID0gaW50ZWdlckJldHdlZW4oc2Vjb25kLCAwLCA1OSksXG4gICAgdmFsaWRNaWxsaXNlY29uZCA9IGludGVnZXJCZXR3ZWVuKG1pbGxpc2Vjb25kLCAwLCA5OTkpO1xuXG4gIGlmICghdmFsaWRIb3VyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwiaG91clwiLCBob3VyKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNaW51dGUpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJtaW51dGVcIiwgbWludXRlKTtcbiAgfSBlbHNlIGlmICghdmFsaWRTZWNvbmQpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNaWxsaXNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cbiIsICJpbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBJbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgSW5mbyBmcm9tIFwiLi9pbmZvLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuaW1wb3J0IHtcbiAgaXNVbmRlZmluZWQsXG4gIG1heWJlQXJyYXksXG4gIGlzRGF0ZSxcbiAgaXNOdW1iZXIsXG4gIGJlc3RCeSxcbiAgZGF5c0luTW9udGgsXG4gIGRheXNJblllYXIsXG4gIGlzTGVhcFllYXIsXG4gIHdlZWtzSW5XZWVrWWVhcixcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxuICBvYmpUb0xvY2FsVFMsXG4gIHBhZFN0YXJ0LFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5pbXBvcnQgZGlmZiBmcm9tIFwiLi9pbXBsL2RpZmYuanNcIjtcbmltcG9ydCB7IHBhcnNlUkZDMjgyMkRhdGUsIHBhcnNlSVNPRGF0ZSwgcGFyc2VIVFRQRGF0ZSwgcGFyc2VTUUwgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUZyb21Ub2tlbnMsIGV4cGxhaW5Gcm9tVG9rZW5zIH0gZnJvbSBcIi4vaW1wbC90b2tlblBhcnNlci5qc1wiO1xuaW1wb3J0IHtcbiAgZ3JlZ29yaWFuVG9XZWVrLFxuICB3ZWVrVG9HcmVnb3JpYW4sXG4gIGdyZWdvcmlhblRvT3JkaW5hbCxcbiAgb3JkaW5hbFRvR3JlZ29yaWFuLFxuICBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YSxcbiAgaGFzSW52YWxpZFdlZWtEYXRhLFxuICBoYXNJbnZhbGlkT3JkaW5hbERhdGEsXG4gIGhhc0ludmFsaWRUaW1lRGF0YSxcbn0gZnJvbSBcIi4vaW1wbC9jb252ZXJzaW9ucy5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9pbXBsL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcixcbiAgSW52YWxpZFVuaXRFcnJvcixcbiAgSW52YWxpZERhdGVUaW1lRXJyb3IsXG59IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRGF0ZVRpbWVcIjtcbmNvbnN0IE1BWF9EQVRFID0gOC42NGUxNTtcblxuZnVuY3Rpb24gdW5zdXBwb3J0ZWRab25lKHpvbmUpIHtcbiAgcmV0dXJuIG5ldyBJbnZhbGlkKFwidW5zdXBwb3J0ZWQgem9uZVwiLCBgdGhlIHpvbmUgXCIke3pvbmUubmFtZX1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XG59XG5cbi8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlXG5mdW5jdGlvbiBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKGR0KSB7XG4gIGlmIChkdC53ZWVrRGF0YSA9PT0gbnVsbCkge1xuICAgIGR0LndlZWtEYXRhID0gZ3JlZ29yaWFuVG9XZWVrKGR0LmMpO1xuICB9XG4gIHJldHVybiBkdC53ZWVrRGF0YTtcbn1cblxuLy8gY2xvbmUgcmVhbGx5IG1lYW5zLCBcIm1ha2UgYSBuZXcgb2JqZWN0IHdpdGggdGhlc2UgbW9kaWZpY2F0aW9uc1wiLiBhbGwgXCJzZXR0ZXJzXCIgcmVhbGx5IHVzZSB0aGlzXG4vLyB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHdoaWxlIG9ubHkgY2hhbmdpbmcgc29tZSBvZiB0aGUgcHJvcGVydGllc1xuZnVuY3Rpb24gY2xvbmUoaW5zdCwgYWx0cykge1xuICBjb25zdCBjdXJyZW50ID0ge1xuICAgIHRzOiBpbnN0LnRzLFxuICAgIHpvbmU6IGluc3Quem9uZSxcbiAgICBjOiBpbnN0LmMsXG4gICAgbzogaW5zdC5vLFxuICAgIGxvYzogaW5zdC5sb2MsXG4gICAgaW52YWxpZDogaW5zdC5pbnZhbGlkLFxuICB9O1xuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgLi4uY3VycmVudCwgLi4uYWx0cywgb2xkOiBjdXJyZW50IH0pO1xufVxuXG4vLyBmaW5kIHRoZSByaWdodCBvZmZzZXQgYSBnaXZlbiBsb2NhbCB0aW1lLiBUaGUgbyBpbnB1dCBpcyBvdXIgZ3Vlc3MsIHdoaWNoIGRldGVybWluZXMgd2hpY2hcbi8vIG9mZnNldCB3ZSdsbCBwaWNrIGluIGFtYmlndW91cyBjYXNlcyAoZS5nLiB0aGVyZSBhcmUgdHdvIDMgQU1zIGIvYyBGYWxsYmFjayBEU1QpXG5mdW5jdGlvbiBmaXhPZmZzZXQobG9jYWxUUywgbywgdHopIHtcbiAgLy8gT3VyIFVUQyB0aW1lIGlzIGp1c3QgYSBndWVzcyBiZWNhdXNlIG91ciBvZmZzZXQgaXMganVzdCBhIGd1ZXNzXG4gIGxldCB1dGNHdWVzcyA9IGxvY2FsVFMgLSBvICogNjAgKiAxMDAwO1xuXG4gIC8vIFRlc3Qgd2hldGhlciB0aGUgem9uZSBtYXRjaGVzIHRoZSBvZmZzZXQgZm9yIHRoaXMgdHNcbiAgY29uc3QgbzIgPSB0ei5vZmZzZXQodXRjR3Vlc3MpO1xuXG4gIC8vIElmIHNvLCBvZmZzZXQgZGlkbid0IGNoYW5nZSBhbmQgd2UncmUgZG9uZVxuICBpZiAobyA9PT0gbzIpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvXTtcbiAgfVxuXG4gIC8vIElmIG5vdCwgY2hhbmdlIHRoZSB0cyBieSB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgb2Zmc2V0XG4gIHV0Y0d1ZXNzIC09IChvMiAtIG8pICogNjAgKiAxMDAwO1xuXG4gIC8vIElmIHRoYXQgZ2l2ZXMgdXMgdGhlIGxvY2FsIHRpbWUgd2Ugd2FudCwgd2UncmUgZG9uZVxuICBjb25zdCBvMyA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7XG4gIGlmIChvMiA9PT0gbzMpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvMl07XG4gIH1cblxuICAvLyBJZiBpdCdzIGRpZmZlcmVudCwgd2UncmUgaW4gYSBob2xlIHRpbWUuIFRoZSBvZmZzZXQgaGFzIGNoYW5nZWQsIGJ1dCB0aGUgd2UgZG9uJ3QgYWRqdXN0IHRoZSB0aW1lXG4gIHJldHVybiBbbG9jYWxUUyAtIE1hdGgubWluKG8yLCBvMykgKiA2MCAqIDEwMDAsIE1hdGgubWF4KG8yLCBvMyldO1xufVxuXG4vLyBjb252ZXJ0IGFuIGVwb2NoIHRpbWVzdGFtcCBpbnRvIGEgY2FsZW5kYXIgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG9mZnNldFxuZnVuY3Rpb24gdHNUb09iaih0cywgb2Zmc2V0KSB7XG4gIHRzICs9IG9mZnNldCAqIDYwICogMTAwMDtcblxuICBjb25zdCBkID0gbmV3IERhdGUodHMpO1xuXG4gIHJldHVybiB7XG4gICAgeWVhcjogZC5nZXRVVENGdWxsWWVhcigpLFxuICAgIG1vbnRoOiBkLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgIGRheTogZC5nZXRVVENEYXRlKCksXG4gICAgaG91cjogZC5nZXRVVENIb3VycygpLFxuICAgIG1pbnV0ZTogZC5nZXRVVENNaW51dGVzKCksXG4gICAgc2Vjb25kOiBkLmdldFVUQ1NlY29uZHMoKSxcbiAgICBtaWxsaXNlY29uZDogZC5nZXRVVENNaWxsaXNlY29uZHMoKSxcbiAgfTtcbn1cblxuLy8gY29udmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGVwb2NoIHRpbWVzdGFtcFxuZnVuY3Rpb24gb2JqVG9UUyhvYmosIG9mZnNldCwgem9uZSkge1xuICByZXR1cm4gZml4T2Zmc2V0KG9ialRvTG9jYWxUUyhvYmopLCBvZmZzZXQsIHpvbmUpO1xufVxuXG4vLyBjcmVhdGUgYSBuZXcgRFQgaW5zdGFuY2UgYnkgYWRkaW5nIGEgZHVyYXRpb24sIGFkanVzdGluZyBmb3IgRFNUc1xuZnVuY3Rpb24gYWRqdXN0VGltZShpbnN0LCBkdXIpIHtcbiAgY29uc3Qgb1ByZSA9IGluc3QubyxcbiAgICB5ZWFyID0gaW5zdC5jLnllYXIgKyBNYXRoLnRydW5jKGR1ci55ZWFycyksXG4gICAgbW9udGggPSBpbnN0LmMubW9udGggKyBNYXRoLnRydW5jKGR1ci5tb250aHMpICsgTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpICogMyxcbiAgICBjID0ge1xuICAgICAgLi4uaW5zdC5jLFxuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5OlxuICAgICAgICBNYXRoLm1pbihpbnN0LmMuZGF5LCBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpICtcbiAgICAgICAgTWF0aC50cnVuYyhkdXIuZGF5cykgK1xuICAgICAgICBNYXRoLnRydW5jKGR1ci53ZWVrcykgKiA3LFxuICAgIH0sXG4gICAgbWlsbGlzVG9BZGQgPSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtcbiAgICAgIHllYXJzOiBkdXIueWVhcnMgLSBNYXRoLnRydW5jKGR1ci55ZWFycyksXG4gICAgICBxdWFydGVyczogZHVyLnF1YXJ0ZXJzIC0gTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpLFxuICAgICAgbW9udGhzOiBkdXIubW9udGhzIC0gTWF0aC50cnVuYyhkdXIubW9udGhzKSxcbiAgICAgIHdlZWtzOiBkdXIud2Vla3MgLSBNYXRoLnRydW5jKGR1ci53ZWVrcyksXG4gICAgICBkYXlzOiBkdXIuZGF5cyAtIE1hdGgudHJ1bmMoZHVyLmRheXMpLFxuICAgICAgaG91cnM6IGR1ci5ob3VycyxcbiAgICAgIG1pbnV0ZXM6IGR1ci5taW51dGVzLFxuICAgICAgc2Vjb25kczogZHVyLnNlY29uZHMsXG4gICAgICBtaWxsaXNlY29uZHM6IGR1ci5taWxsaXNlY29uZHMsXG4gICAgfSkuYXMoXCJtaWxsaXNlY29uZHNcIiksXG4gICAgbG9jYWxUUyA9IG9ialRvTG9jYWxUUyhjKTtcblxuICBsZXQgW3RzLCBvXSA9IGZpeE9mZnNldChsb2NhbFRTLCBvUHJlLCBpbnN0LnpvbmUpO1xuXG4gIGlmIChtaWxsaXNUb0FkZCAhPT0gMCkge1xuICAgIHRzICs9IG1pbGxpc1RvQWRkO1xuICAgIC8vIHRoYXQgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQgYnkgZ29pbmcgb3ZlciBhIERTVCwgYnV0IHdlIHdhbnQgdG8ga2VlcCB0aGUgdHMgdGhlIHNhbWVcbiAgICBvID0gaW5zdC56b25lLm9mZnNldCh0cyk7XG4gIH1cblxuICByZXR1cm4geyB0cywgbyB9O1xufVxuXG4vLyBoZWxwZXIgdXNlZnVsIGluIHR1cm5pbmcgdGhlIHJlc3VsdHMgb2YgcGFyc2luZyBpbnRvIHJlYWwgZGF0ZXNcbi8vIGJ5IGhhbmRsaW5nIHRoZSB6b25lIG9wdGlvbnNcbmZ1bmN0aW9uIHBhcnNlRGF0YVRvRGF0ZVRpbWUocGFyc2VkLCBwYXJzZWRab25lLCBvcHRzLCBmb3JtYXQsIHRleHQsIHNwZWNpZmljT2Zmc2V0KSB7XG4gIGNvbnN0IHsgc2V0Wm9uZSwgem9uZSB9ID0gb3B0cztcbiAgaWYgKHBhcnNlZCAmJiBPYmplY3Qua2V5cyhwYXJzZWQpLmxlbmd0aCAhPT0gMCkge1xuICAgIGNvbnN0IGludGVycHJldGF0aW9uWm9uZSA9IHBhcnNlZFpvbmUgfHwgem9uZSxcbiAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICB6b25lOiBpbnRlcnByZXRhdGlvblpvbmUsXG4gICAgICAgIHNwZWNpZmljT2Zmc2V0LFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHNldFpvbmUgPyBpbnN0IDogaW5zdC5zZXRab25lKHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFxuICAgICAgbmV3IEludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7Zm9ybWF0fWApXG4gICAgKTtcbiAgfVxufVxuXG4vLyBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSB0ZWNobmljYWwgZm9ybWF0IChlLmcuIFJGQyAyODIyKSwgdGhpcyBoZWxwZXJcbi8vIGhlbHBzIGhhbmRsZSB0aGUgZGV0YWlsc1xuZnVuY3Rpb24gdG9UZWNoRm9ybWF0KGR0LCBmb3JtYXQsIGFsbG93WiA9IHRydWUpIHtcbiAgcmV0dXJuIGR0LmlzVmFsaWRcbiAgICA/IEZvcm1hdHRlci5jcmVhdGUoTG9jYWxlLmNyZWF0ZShcImVuLVVTXCIpLCB7XG4gICAgICAgIGFsbG93WixcbiAgICAgICAgZm9yY2VTaW1wbGU6IHRydWUsXG4gICAgICB9KS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZvcm1hdClcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvSVNPRGF0ZShvLCBleHRlbmRlZCkge1xuICBjb25zdCBsb25nRm9ybWF0ID0gby5jLnllYXIgPiA5OTk5IHx8IG8uYy55ZWFyIDwgMDtcbiAgbGV0IGMgPSBcIlwiO1xuICBpZiAobG9uZ0Zvcm1hdCAmJiBvLmMueWVhciA+PSAwKSBjICs9IFwiK1wiO1xuICBjICs9IHBhZFN0YXJ0KG8uYy55ZWFyLCBsb25nRm9ybWF0ID8gNiA6IDQpO1xuXG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubW9udGgpO1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gdG9JU09UaW1lKFxuICBvLFxuICBleHRlbmRlZCxcbiAgc3VwcHJlc3NTZWNvbmRzLFxuICBzdXBwcmVzc01pbGxpc2Vjb25kcyxcbiAgaW5jbHVkZU9mZnNldCxcbiAgZXh0ZW5kZWRab25lXG4pIHtcbiAgbGV0IGMgPSBwYWRTdGFydChvLmMuaG91cik7XG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCI6XCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcbiAgICBpZiAoby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgICBjICs9IFwiOlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpO1xuICB9XG5cbiAgaWYgKG8uYy5zZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzU2Vjb25kcykge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLnNlY29uZCk7XG5cbiAgICBpZiAoby5jLm1pbGxpc2Vjb25kICE9PSAwIHx8ICFzdXBwcmVzc01pbGxpc2Vjb25kcykge1xuICAgICAgYyArPSBcIi5cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbGxpc2Vjb25kLCAzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgIGlmIChvLmlzT2Zmc2V0Rml4ZWQgJiYgby5vZmZzZXQgPT09IDAgJiYgIWV4dGVuZGVkWm9uZSkge1xuICAgICAgYyArPSBcIlpcIjtcbiAgICB9IGVsc2UgaWYgKG8ubyA8IDApIHtcbiAgICAgIGMgKz0gXCItXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAvIDYwKSk7XG4gICAgICBjICs9IFwiOlwiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKC1vLm8gJSA2MCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjICs9IFwiK1wiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAvIDYwKSk7XG4gICAgICBjICs9IFwiOlwiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAlIDYwKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4dGVuZGVkWm9uZSkge1xuICAgIGMgKz0gXCJbXCIgKyBvLnpvbmUuaWFuYU5hbWUgKyBcIl1cIjtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuLy8gZGVmYXVsdHMgZm9yIHVuc3BlY2lmaWVkIHVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzXG5jb25zdCBkZWZhdWx0VW5pdFZhbHVlcyA9IHtcbiAgICBtb250aDogMSxcbiAgICBkYXk6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9LFxuICBkZWZhdWx0V2Vla1VuaXRWYWx1ZXMgPSB7XG4gICAgd2Vla051bWJlcjogMSxcbiAgICB3ZWVrZGF5OiAxLFxuICAgIGhvdXI6IDAsXG4gICAgbWludXRlOiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbiAgfSxcbiAgZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzID0ge1xuICAgIG9yZGluYWw6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9O1xuXG4vLyBVbml0cyBpbiB0aGUgc3VwcG9ydGVkIGNhbGVuZGFycywgc29ydGVkIGJ5IGJpZ25lc3NcbmNvbnN0IG9yZGVyZWRVbml0cyA9IFtcInllYXJcIiwgXCJtb250aFwiLCBcImRheVwiLCBcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIiwgXCJtaWxsaXNlY29uZFwiXSxcbiAgb3JkZXJlZFdlZWtVbml0cyA9IFtcbiAgICBcIndlZWtZZWFyXCIsXG4gICAgXCJ3ZWVrTnVtYmVyXCIsXG4gICAgXCJ3ZWVrZGF5XCIsXG4gICAgXCJob3VyXCIsXG4gICAgXCJtaW51dGVcIixcbiAgICBcInNlY29uZFwiLFxuICAgIFwibWlsbGlzZWNvbmRcIixcbiAgXSxcbiAgb3JkZXJlZE9yZGluYWxVbml0cyA9IFtcInllYXJcIiwgXCJvcmRpbmFsXCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdO1xuXG4vLyBzdGFuZGFyZGl6ZSBjYXNlIGFuZCBwbHVyYWxpdHkgaW4gdW5pdHNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXQodW5pdCkge1xuICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgIHllYXI6IFwieWVhclwiLFxuICAgIHllYXJzOiBcInllYXJcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIGhvdXI6IFwiaG91clwiLFxuICAgIGhvdXJzOiBcImhvdXJcIixcbiAgICBtaW51dGU6IFwibWludXRlXCIsXG4gICAgbWludXRlczogXCJtaW51dGVcIixcbiAgICBxdWFydGVyOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGVyczogXCJxdWFydGVyXCIsXG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWlsbGlzZWNvbmQ6IFwibWlsbGlzZWNvbmRcIixcbiAgICBtaWxsaXNlY29uZHM6IFwibWlsbGlzZWNvbmRcIixcbiAgICB3ZWVrZGF5OiBcIndlZWtkYXlcIixcbiAgICB3ZWVrZGF5czogXCJ3ZWVrZGF5XCIsXG4gICAgd2Vla251bWJlcjogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla3NudW1iZXI6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWtudW1iZXJzOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVreWVhcjogXCJ3ZWVrWWVhclwiLFxuICAgIHdlZWt5ZWFyczogXCJ3ZWVrWWVhclwiLFxuICAgIG9yZGluYWw6IFwib3JkaW5hbFwiLFxuICB9W3VuaXQudG9Mb3dlckNhc2UoKV07XG5cbiAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLy8gdGhpcyBpcyBhIGR1bWJlZCBkb3duIHZlcnNpb24gb2YgZnJvbU9iamVjdCgpIHRoYXQgcnVucyBhYm91dCA2MCUgZmFzdGVyXG4vLyBidXQgZG9lc24ndCBkbyBhbnkgdmFsaWRhdGlvbiwgbWFrZXMgYSBidW5jaCBvZiBhc3N1bXB0aW9ucyBhYm91dCB3aGF0IHVuaXRzXG4vLyBhcmUgcHJlc2VudCwgYW5kIHNvIG9uLlxuZnVuY3Rpb24gcXVpY2tEVChvYmosIG9wdHMpIHtcbiAgY29uc3Qgem9uZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyksXG4gICAgdHNOb3cgPSBTZXR0aW5ncy5ub3coKTtcblxuICBsZXQgdHMsIG87XG5cbiAgLy8gYXNzdW1lIHdlIGhhdmUgdGhlIGhpZ2hlci1vcmRlciB1bml0c1xuICBpZiAoIWlzVW5kZWZpbmVkKG9iai55ZWFyKSkge1xuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChvYmpbdV0pKSB7XG4gICAgICAgIG9ialt1XSA9IGRlZmF1bHRVbml0VmFsdWVzW3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHx8IGhhc0ludmFsaWRUaW1lRGF0YShvYmopO1xuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXRQcm92aXMgPSB6b25lLm9mZnNldCh0c05vdyk7XG4gICAgW3RzLCBvXSA9IG9ialRvVFMob2JqLCBvZmZzZXRQcm92aXMsIHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHRzID0gdHNOb3c7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgdHMsIHpvbmUsIGxvYywgbyB9KTtcbn1cblxuZnVuY3Rpb24gZGlmZlJlbGF0aXZlKHN0YXJ0LCBlbmQsIG9wdHMpIHtcbiAgY29uc3Qgcm91bmQgPSBpc1VuZGVmaW5lZChvcHRzLnJvdW5kKSA/IHRydWUgOiBvcHRzLnJvdW5kLFxuICAgIGZvcm1hdCA9IChjLCB1bml0KSA9PiB7XG4gICAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGVuZC5sb2MuY2xvbmUob3B0cykucmVsRm9ybWF0dGVyKG9wdHMpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoYywgdW5pdCk7XG4gICAgfSxcbiAgICBkaWZmZXIgPSAodW5pdCkgPT4ge1xuICAgICAgaWYgKG9wdHMuY2FsZW5kYXJ5KSB7XG4gICAgICAgIGlmICghZW5kLmhhc1NhbWUoc3RhcnQsIHVuaXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVuZC5zdGFydE9mKHVuaXQpLmRpZmYoc3RhcnQuc3RhcnRPZih1bml0KSwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsIHVuaXQpLmdldCh1bml0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGlmIChvcHRzLnVuaXQpIHtcbiAgICByZXR1cm4gZm9ybWF0KGRpZmZlcihvcHRzLnVuaXQpLCBvcHRzLnVuaXQpO1xuICB9XG5cbiAgZm9yIChjb25zdCB1bml0IG9mIG9wdHMudW5pdHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGRpZmZlcih1bml0KTtcbiAgICBpZiAoTWF0aC5hYnMoY291bnQpID49IDEpIHtcbiAgICAgIHJldHVybiBmb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHN0YXJ0ID4gZW5kID8gLTAgOiAwLCBvcHRzLnVuaXRzW29wdHMudW5pdHMubGVuZ3RoIC0gMV0pO1xufVxuXG5mdW5jdGlvbiBsYXN0T3B0cyhhcmdMaXN0KSB7XG4gIGxldCBvcHRzID0ge30sXG4gICAgYXJncztcbiAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSBcIm9iamVjdFwiKSB7XG4gICAgb3B0cyA9IGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXTtcbiAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpO1xuICB9XG4gIHJldHVybiBbb3B0cywgYXJnc107XG59XG5cbi8qKlxuICogQSBEYXRlVGltZSBpcyBhbiBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZGF0ZSBhbmQgdGltZSBhbmQgYWNjb21wYW55aW5nIG1ldGhvZHMuIEl0IGNvbnRhaW5zIGNsYXNzIGFuZCBpbnN0YW5jZSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLlxuICpcbiAqIEEgRGF0ZVRpbWUgY29tcHJpc2VzIG9mOlxuICogKiBBIHRpbWVzdGFtcC4gRWFjaCBEYXRlVGltZSBpbnN0YW5jZSByZWZlcnMgdG8gYSBzcGVjaWZpYyBtaWxsaXNlY29uZCBvZiB0aGUgVW5peCBlcG9jaC5cbiAqICogQSB0aW1lIHpvbmUuIEVhY2ggaW5zdGFuY2UgaXMgY29uc2lkZXJlZCBpbiB0aGUgY29udGV4dCBvZiBhIHNwZWNpZmljIHpvbmUgKGJ5IGRlZmF1bHQgdGhlIGxvY2FsIHN5c3RlbSdzIHpvbmUpLlxuICogKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdGhhdCBlZmZlY3QgaG93IG91dHB1dCBzdHJpbmdzIGFyZSBmb3JtYXR0ZWQsIHN1Y2ggYXMgYGxvY2FsZWAsIGBudW1iZXJpbmdTeXN0ZW1gLCBhbmQgYG91dHB1dENhbGVuZGFyYC5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzOlxuICpcbiAqICogKipDcmVhdGlvbioqOiBUbyBjcmVhdGUgYSBEYXRlVGltZSBmcm9tIGl0cyBjb21wb25lbnRzLCB1c2Ugb25lIG9mIGl0cyBmYWN0b3J5IGNsYXNzIG1ldGhvZHM6IHtAbGluayBEYXRlVGltZSNsb2NhbH0sIHtAbGluayBEYXRlVGltZSN1dGN9LCBhbmQgKG1vc3QgZmxleGlibHkpIHtAbGluayBEYXRlVGltZSNmcm9tT2JqZWN0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSVNPfSwge0BsaW5rIERhdGVUaW1lI2Zyb21IVFRQfSwgYW5kIHtAbGluayBEYXRlVGltZSNmcm9tUkZDMjgyMn0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIGN1c3RvbSBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21Gb3JtYXR9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBuYXRpdmUgSlMgZGF0ZSwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSlNEYXRlfS5cbiAqICogKipHcmVnb3JpYW4gY2FsZW5kYXIgYW5kIHRpbWUqKjogVG8gZXhhbWluZSB0aGUgR3JlZ29yaWFuIHByb3BlcnRpZXMgb2YgYSBEYXRlVGltZSBpbmRpdmlkdWFsbHkgKGkuZSBhcyBvcHBvc2VkIHRvIGNvbGxlY3RpdmVseSB0aHJvdWdoIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0pLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN5ZWFyfSwge0BsaW5rIERhdGVUaW1lI21vbnRofSxcbiAqIHtAbGluayBEYXRlVGltZSNkYXl9LCB7QGxpbmsgRGF0ZVRpbWUjaG91cn0sIHtAbGluayBEYXRlVGltZSNtaW51dGV9LCB7QGxpbmsgRGF0ZVRpbWUjc2Vjb25kfSwge0BsaW5rIERhdGVUaW1lI21pbGxpc2Vjb25kfSBhY2Nlc3NvcnMuXG4gKiAqICoqV2VlayBjYWxlbmRhcioqOiBGb3IgSVNPIHdlZWsgY2FsZW5kYXIgYXR0cmlidXRlcywgc2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjd2Vla1llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjd2Vla051bWJlcn0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjd2Vla2RheX0gYWNjZXNzb3JzLlxuICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgdGhlIHtAbGluayBEYXRlVGltZSNsb2NhbGV9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKjogVG8gdHJhbnNmb3JtIHRoZSBEYXRlVGltZSBpbnRvIG90aGVyIERhdGVUaW1lcywgdXNlIHtAbGluayBEYXRlVGltZSNzZXR9LCB7QGxpbmsgRGF0ZVRpbWUjcmVjb25maWd1cmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0sIHtAbGluayBEYXRlVGltZSNzZXRMb2NhbGV9LCB7QGxpbmsgRGF0ZVRpbWUucGx1c30sIHtAbGluayBEYXRlVGltZSNtaW51c30sIHtAbGluayBEYXRlVGltZSNlbmRPZn0sIHtAbGluayBEYXRlVGltZSNzdGFydE9mfSwge0BsaW5rIERhdGVUaW1lI3RvVVRDfSwgYW5kIHtAbGluayBEYXRlVGltZSN0b0xvY2FsfS5cbiAqICogKipPdXRwdXQqKjogVG8gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlfSwge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmVDYWxlbmRhcn0sIHtAbGluayBEYXRlVGltZSN0b0pTT059LCB7QGxpbmsgRGF0ZVRpbWUjdG9JU099LCB7QGxpbmsgRGF0ZVRpbWUjdG9IVFRQfSwge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSwge0BsaW5rIERhdGVUaW1lI3RvUkZDMjgyMn0sIHtAbGluayBEYXRlVGltZSN0b1N0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0sIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30gYW5kIHtAbGluayBEYXRlVGltZSN0b0pTRGF0ZX0uXG4gKlxuICogVGhlcmUncyBwbGVudHkgb3RoZXJzIGRvY3VtZW50ZWQgYmVsb3cuIEluIGFkZGl0aW9uLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdWJ0bGVyIHRvcGljcyBsaWtlIGludGVybmF0aW9uYWxpemF0aW9uLCB0aW1lIHpvbmVzLCBhbHRlcm5hdGl2ZSBjYWxlbmRhcnMsIHZhbGlkaXR5LCBhbmQgc28gb24sIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVRpbWUge1xuICAvKipcbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCB6b25lID0gY29uZmlnLnpvbmUgfHwgU2V0dGluZ3MuZGVmYXVsdFpvbmU7XG5cbiAgICBsZXQgaW52YWxpZCA9XG4gICAgICBjb25maWcuaW52YWxpZCB8fFxuICAgICAgKE51bWJlci5pc05hTihjb25maWcudHMpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbCkgfHxcbiAgICAgICghem9uZS5pc1ZhbGlkID8gdW5zdXBwb3J0ZWRab25lKHpvbmUpIDogbnVsbCk7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy50cyA9IGlzVW5kZWZpbmVkKGNvbmZpZy50cykgPyBTZXR0aW5ncy5ub3coKSA6IGNvbmZpZy50cztcblxuICAgIGxldCBjID0gbnVsbCxcbiAgICAgIG8gPSBudWxsO1xuICAgIGlmICghaW52YWxpZCkge1xuICAgICAgY29uc3QgdW5jaGFuZ2VkID0gY29uZmlnLm9sZCAmJiBjb25maWcub2xkLnRzID09PSB0aGlzLnRzICYmIGNvbmZpZy5vbGQuem9uZS5lcXVhbHMoem9uZSk7XG5cbiAgICAgIGlmICh1bmNoYW5nZWQpIHtcbiAgICAgICAgW2MsIG9dID0gW2NvbmZpZy5vbGQuYywgY29uZmlnLm9sZC5vXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG90ID0gem9uZS5vZmZzZXQodGhpcy50cyk7XG4gICAgICAgIGMgPSB0c1RvT2JqKHRoaXMudHMsIG90KTtcbiAgICAgICAgaW52YWxpZCA9IE51bWJlci5pc05hTihjLnllYXIpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbDtcbiAgICAgICAgYyA9IGludmFsaWQgPyBudWxsIDogYztcbiAgICAgICAgbyA9IGludmFsaWQgPyBudWxsIDogb3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fem9uZSA9IHpvbmU7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBpbnZhbGlkO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMud2Vla0RhdGEgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYyA9IGM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5vID0gbztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EYXRlVGltZSA9IHRydWU7XG4gIH1cblxuICAvLyBDT05TVFJVQ1RcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZm9yIHRoZSBjdXJyZW50IGluc3RhbnQsIGluIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqXG4gICAqIFVzZSBTZXR0aW5ncyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWVkZWQuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy9+PiBub3cgaW4gdGhlIElTTyBmb3JtYXRcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgbm93KCkge1xuICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvY2FsIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYGxvY2FsKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW51dGU9MF0gLSBUaGUgbWludXRlIG9mIHRoZSBob3VyLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmQ9MF0gLSBUaGUgc2Vjb25kIG9mIHRoZSBtaW51dGUsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCh7IHpvbmU6IFwiQW1lcmljYS9OZXdfWW9ya1wiIH0pICAgICAgLy9+PiBub3csIGluIFVTIGVhc3QgY29hc3QgdGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwLCB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgeyB6b25lOiBcInV0Y1wiIH0pICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwLCBpbiBVVENcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1KSAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1KSAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1XG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGxvY2FsKCkge1xuICAgIGNvbnN0IFtvcHRzLCBhcmdzXSA9IGxhc3RPcHRzKGFyZ3VtZW50cyksXG4gICAgICBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXSA9IGFyZ3M7XG4gICAgcmV0dXJuIHF1aWNrRFQoeyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgaW4gVVRDXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYHV0YygpYCB3aXRoIG5vIGFyZ3VtZW50cyksIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm91dHB1dENhbGVuZGFyXSAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm51bWJlcmluZ1N5c3RlbV0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDEtMDFUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTAsIDc2NSwgeyBsb2NhbGU6IFwiZnJcIiB9KSAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1WiB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyB1dGMoKSB7XG4gICAgY29uc3QgW29wdHMsIGFyZ3NdID0gbGFzdE9wdHMoYXJndW1lbnRzKSxcbiAgICAgIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdID0gYXJncztcblxuICAgIG9wdHMuem9uZSA9IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZTtcbiAgICByZXR1cm4gcXVpY2tEVCh7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCB9LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdC4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBhIEphdmFTY3JpcHQgRGF0ZSBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUpTRGF0ZShkYXRlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0cyA9IGlzRGF0ZShkYXRlKSA/IGRhdGUudmFsdWVPZigpIDogTmFOO1xuICAgIGlmIChOdW1iZXIuaXNOYU4odHMpKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcImludmFsaWQgaW5wdXRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICB0czogdHMsXG4gICAgICB6b25lOiB6b25lVG9Vc2UsXG4gICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAobWVhbmluZyBzaW5jZSAxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbU1pbGxpcyhtaWxsaXNlY29uZHMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNOdW1iZXIobWlsbGlzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgZnJvbU1pbGxpcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCwgYnV0IHJlY2VpdmVkIGEgJHt0eXBlb2YgbWlsbGlzZWNvbmRzfSB3aXRoIHZhbHVlICR7bWlsbGlzZWNvbmRzfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtaWxsaXNlY29uZHMgPCAtTUFYX0RBVEUgfHwgbWlsbGlzZWNvbmRzID4gTUFYX0RBVEUpIHtcbiAgICAgIC8vIHRoaXMgaXNuJ3QgcGVyZmVjdCBiZWNhdXNlIGJlY2F1c2Ugd2UgY2FuIHN0aWxsIGVuZCB1cCBvdXQgb2YgcmFuZ2UgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIHNoaWZ0aW5nLCBidXQgaXQncyBhIHN0YXJ0XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcIlRpbWVzdGFtcCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogbWlsbGlzZWNvbmRzLFxuICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLFxuICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcyAtIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNlY29uZHMoc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiZnJvbVNlY29uZHMgcmVxdWlyZXMgYSBudW1lcmljYWwgaW5wdXRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogc2Vjb25kcyAqIDEwMDAsXG4gICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFyJyBhbmQgJ2hvdXInIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhciAtIGEgeWVhciwgc3VjaCBhcyAxOTg3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGggLSBhIG1vbnRoLCAxLTEyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5IC0gYSBkYXkgb2YgdGhlIG1vbnRoLCAxLTMxLCBkZXBlbmRpbmcgb24gdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoub3JkaW5hbCAtIGRheSBvZiB0aGUgeWVhciwgMS0zNjUgb3IgMzY2XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla1llYXIgLSBhbiBJU08gd2VlayB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla051bWJlciAtIGFuIElTTyB3ZWVrIG51bWJlciwgYmV0d2VlbiAxIGFuZCA1MiBvciA1MywgZGVwZW5kaW5nIG9uIHRoZSB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla2RheSAtIGFuIElTTyB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmhvdXIgLSBob3VyIG9mIHRoZSBkYXksIDAtMjNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGUgLSBtaW51dGUgb2YgdGhlIGhvdXIsIDAtNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmQgLSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgMC01OVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kIC0gbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgMC05OTlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBpbnRlcnByZXQgdGhlIG51bWJlcnMgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIHpvbmUuIENhbiB0YWtlIGFueSB2YWx1ZSB0YWtlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gc2V0Wm9uZSgpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyLCBtb250aDogNSwgZGF5OiAyNX0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDEtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0pIC8vfj4gdG9kYXkgYXQgMTA6MjY6MDZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAndXRjJyB9KSxcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnbG9jYWwnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB3ZWVrWWVhcjogMjAxNiwgd2Vla051bWJlcjogMiwgd2Vla2RheTogMyB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDE2LTAxLTEzJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tT2JqZWN0KG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgb2JqID0gb2JqIHx8IHt9O1xuICAgIGNvbnN0IHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gICAgaWYgKCF6b25lVG9Vc2UuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRzTm93ID0gU2V0dGluZ3Mubm93KCksXG4gICAgICBvZmZzZXRQcm92aXMgPSAhaXNVbmRlZmluZWQob3B0cy5zcGVjaWZpY09mZnNldClcbiAgICAgICAgPyBvcHRzLnNwZWNpZmljT2Zmc2V0XG4gICAgICAgIDogem9uZVRvVXNlLm9mZnNldCh0c05vdyksXG4gICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KG9iaiwgbm9ybWFsaXplVW5pdCksXG4gICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLFxuICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLFxuICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCxcbiAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyLFxuICAgICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyk7XG5cbiAgICAvLyBjYXNlczpcbiAgICAvLyBqdXN0IGEgd2Vla2RheSAtPiB0aGlzIHdlZWsncyBpbnN0YW5jZSBvZiB0aGF0IHdlZWtkYXksIG5vIHdvcnJpZXNcbiAgICAvLyAoZ3JlZ29yaWFuIGRhdGEgb3Igb3JkaW5hbCkgKyAod2Vla1llYXIgb3Igd2Vla051bWJlcikgLT4gZXJyb3JcbiAgICAvLyAoZ3JlZ29yaWFuIG1vbnRoIG9yIGRheSkgKyBvcmRpbmFsIC0+IGVycm9yXG4gICAgLy8gb3RoZXJ3aXNlIGp1c3QgdXNlIHdlZWtzIG9yIG9yZGluYWxzIG9yIGdyZWdvcmlhbiwgZGVwZW5kaW5nIG9uIHdoYXQncyBzcGVjaWZpZWRcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VXZWVrRGF0YSA9IGRlZmluaXRlV2Vla0RlZiB8fCAobm9ybWFsaXplZC53ZWVrZGF5ICYmICFjb250YWluc0dyZWdvcik7XG5cbiAgICAvLyBjb25maWd1cmUgb3Vyc2VsdmVzIHRvIGRlYWwgd2l0aCBncmVnb3JpYW4gZGF0ZXMgb3Igd2VlayBzdHVmZlxuICAgIGxldCB1bml0cyxcbiAgICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgICBvYmpOb3cgPSB0c1RvT2JqKHRzTm93LCBvZmZzZXRQcm92aXMpO1xuICAgIGlmICh1c2VXZWVrRGF0YSkge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkV2Vla1VuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRXZWVrVW5pdFZhbHVlcztcbiAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvV2VlayhvYmpOb3cpO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRPcmRpbmFsVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzO1xuICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9PcmRpbmFsKG9iak5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZFVuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRVbml0VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZlxuICAgIGxldCBmb3VuZEZpcnN0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB1IG9mIHVuaXRzKSB7XG4gICAgICBjb25zdCB2ID0gbm9ybWFsaXplZFt1XTtcbiAgICAgIGlmICghaXNVbmRlZmluZWQodikpIHtcbiAgICAgICAgZm91bmRGaXJzdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGZvdW5kRmlyc3QpIHtcbiAgICAgICAgbm9ybWFsaXplZFt1XSA9IGRlZmF1bHRWYWx1ZXNbdV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gb2JqTm93W3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIHdlIGhhdmUgYXJlIGluIHJhbmdlXG4gICAgY29uc3QgaGlnaGVyT3JkZXJJbnZhbGlkID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyBoYXNJbnZhbGlkV2Vla0RhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBoYXNJbnZhbGlkT3JkaW5hbERhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShub3JtYWxpemVkKSxcbiAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIC8vIGNvbXB1dGUgdGhlIGFjdHVhbCB0aW1lXG4gICAgY29uc3QgZ3JlZ29yaWFuID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyB3ZWVrVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBvcmRpbmFsVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBub3JtYWxpemVkLFxuICAgICAgW3RzRmluYWwsIG9mZnNldEZpbmFsXSA9IG9ialRvVFMoZ3JlZ29yaWFuLCBvZmZzZXRQcm92aXMsIHpvbmVUb1VzZSksXG4gICAgICBpbnN0ID0gbmV3IERhdGVUaW1lKHtcbiAgICAgICAgdHM6IHRzRmluYWwsXG4gICAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgICAgbzogb2Zmc2V0RmluYWwsXG4gICAgICAgIGxvYyxcbiAgICAgIH0pO1xuXG4gICAgLy8gZ3JlZ29yaWFuIGRhdGEgKyB3ZWVrZGF5IHNlcnZlcyBvbmx5IHRvIHZhbGlkYXRlXG4gICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcbiAgICAgICAgXCJtaXNtYXRjaGVkIHdlZWtkYXlcIixcbiAgICAgICAgYHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICR7bm9ybWFsaXplZC53ZWVrZGF5fSBhbmQgYSBkYXRlIG9mICR7aW5zdC50b0lTTygpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBJU08gODYwMSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMrMDY6MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcsIHtzZXRab25lOiB0cnVlfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnLCB7em9uZTogJ3V0Yyd9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LVcwNS00JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUlTT0RhdGUodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJJU08gODYwMVwiLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIFJGQyAyODIyIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBSRkMgMjgyMiBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSB0aGUgb2Zmc2V0IGlzIGFsd2F5cyBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGUgaW50ZXJwcmV0YXRpb24gb2Ygc3RyaW5nLCBtZXJlbHkgdGhlIHpvbmUgdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpcyBleHByZXNzZWQgaW4uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMzoxMiBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tUkZDMjgyMignRnJpLCAyNSBOb3YgMjAxNiAxMzoyMzoxMiArMDYwMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMyBaJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJGQzI4MjIodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VSRkMyODIyRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIlJGQyAyODIyXCIsIHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gSFRUUCBoZWFkZXIgZGF0ZVxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZS4gU2luY2UgSFRUUCBkYXRlcyBhcmUgYWx3YXlzIGluIFVUQywgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggdGhlIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nLiBGb3IgSFRUUCBkYXRlcywgdGhpcyBpcyBhbHdheXMgVVRDLCBzbyB0aGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGB6b25lYCBvcHRpb24gdG8gJ3V0YycsIGJ1dCB0aGlzIG9wdGlvbiBpcyBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCBzaW1pbGFyIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4sIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSFRUUCgnU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUhUVFAodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VIVFRQRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIkhUVFBcIiwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBpbnB1dCBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmcuXG4gICAqIERlZmF1bHRzIHRvIGVuLVVTIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSdzIGxvY2FsZS4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvcGFyc2luZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIHRoZSBsaW5rIGJlbG93IGZvciB0aGUgZm9ybWF0cylcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIHVzZSB0aGlzIHpvbmUgaWYgbm8gb2Zmc2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgaW5wdXQgc3RyaW5nIGl0c2VsZi4gV2lsbCBhbHNvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIHRoaXMgem9uZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSBhIGxvY2FsZSBzdHJpbmcgdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIHRvIHRoaXMgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0ZXh0KSB8fCBpc1VuZGVmaW5lZChmbXQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRzLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KSxcbiAgICAgIFt2YWxzLCBwYXJzZWRab25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZF0gPSBwYXJzZUZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBgZm9ybWF0ICR7Zm10fWAsIHRleHQsIHNwZWNpZmljT2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXQgaW5zdGVhZFxuICAgKi9cbiAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgZm10LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBTUUwgZGF0ZSwgdGltZSwgb3IgZGF0ZXRpbWVcbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIrMDY6MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIgQW1lcmljYS9Mb3NfQW5nZWxlcycsIHsgc2V0Wm9uZTogdHJ1ZSB9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MicsIHsgem9uZTogJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzA5OjEyOjM0LjM0MicpXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGZyb21TUUwodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VTUUwodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJTUUxcIiwgdGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIERhdGVUaW1lIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZERhdGVUaW1lRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVRpbWUuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0RhdGVUaW1lKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRGF0ZVRpbWUpIHx8IGZhbHNlO1xuICB9XG5cbiAgLy8gSU5GT1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZScgb3IgJ2RheSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdtb250aCcpOyAvLz0+IDdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdkYXknKTsgLy89PiA0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXNbdW5pdF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyB2YWxpZC4gSW52YWxpZCBEYXRlVGltZXMgb2NjdXIgd2hlbjpcbiAgICogKiBUaGUgRGF0ZVRpbWUgd2FzIGNyZWF0ZWQgZnJvbSBpbnZhbGlkIGNhbGVuZGFyIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSAxM3RoIG1vbnRoIG9yIEZlYnJ1YXJ5IDMwXG4gICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGJ5IGFuIG9wZXJhdGlvbiBvbiBhbm90aGVyIGludmFsaWQgZGF0ZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIERhdGVUaW1lIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvY2FsZSBvZiBhIERhdGVUaW1lLCBzdWNoICdlbi1HQicuIFRoZSBsb2NhbGUgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyaW5nIHN5c3RlbSBvZiBhIERhdGVUaW1lLCBzdWNoICdiZW5nJy4gVGhlIG51bWJlcmluZyBzeXN0ZW0gaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3V0cHV0IGNhbGVuZGFyIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2lzbGFtaWMnLiBUaGUgb3V0cHV0IGNhbGVuZGFyIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0aW1lIHpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEB0eXBlIHtab25lfVxuICAgKi9cbiAgZ2V0IHpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3pvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0aW1lIHpvbmUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgem9uZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5uYW1lIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHllYXJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnllYXIgLy89PiAyMDE3XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgeWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnllYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBxdWFydGVyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5xdWFydGVyIC8vPT4gMlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHF1YXJ0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguY2VpbCh0aGlzLmMubW9udGggLyAzKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1vbnRoICgxLTEyKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm1vbnRoIC8vPT4gNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1vbnRoKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubW9udGggOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoICgxLTMwaXNoKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLmRheSAvLz0+IDI1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuZGF5IDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaG91ciBvZiB0aGUgZGF5ICgwLTIzKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDkpLmhvdXIgLy89PiA5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaG91cigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmhvdXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaW51dGUgb2YgdGhlIGhvdXIgKDAtNTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzApLm1pbnV0ZSAvLz0+IDMwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWludXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWludXRlIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgKDAtNTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzAsIDUyKS5zZWNvbmQgLy89PiA1MlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHNlY29uZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnNlY29uZCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQgKDAtOTk5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1MiwgNjU0KS5taWxsaXNlY29uZCAvLz0+IDY1NFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbGxpc2Vjb25kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWlsbGlzZWNvbmQgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIHllYXJcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDEyLCAzMSkud2Vla1llYXIgLy89PiAyMDE1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla1llYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIG51bWJlciBvZiB0aGUgd2VlayB5ZWFyICgxLTUyaXNoKS5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS53ZWVrTnVtYmVyIC8vPT4gMjFcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrTnVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtOdW1iZXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuXG4gICAqIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTEsIDMxKS53ZWVrZGF5IC8vPT4gNFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla2RheSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yZGluYWwgKG1lYW5pbmcgdGhlIGRheSBvZiB0aGUgeWVhcilcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm9yZGluYWwgLy89PiAxNDVcbiAgICogQHR5cGUge251bWJlcnxEYXRlVGltZX1cbiAgICovXG4gIGdldCBvcmRpbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKS5vcmRpbmFsIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgc2hvcnQgbW9udGggbmFtZSwgc3VjaCBhcyAnT2N0Jy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhTaG9ydCAvLz0+IE9jdFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG1vbnRoU2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ubW9udGhzKFwic2hvcnRcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdG9iZXInLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aExvbmcgLy89PiBPY3RvYmVyXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbW9udGhMb25nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLm1vbnRocyhcImxvbmdcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBzaG9ydCB3ZWVrZGF5LCBzdWNoIGFzICdNb24nLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5U2hvcnQgLy89PiBNb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB3ZWVrZGF5U2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoXCJzaG9ydFwiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgbG9uZyB3ZWVrZGF5LCBzdWNoIGFzICdNb25kYXknLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5TG9uZyAvLz0+IE1vbmRheVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXlMb25nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLndlZWtkYXlzKFwibG9uZ1wiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgVVRDIG9mZnNldCBvZiB0aGlzIERhdGVUaW1lIGluIG1pbnV0ZXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkub2Zmc2V0IC8vPT4gLTI0MFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5vZmZzZXQgLy89PiAwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgb2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyArdGhpcy5vIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2hvcnQgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgXCJFU1RcIiBvciBcIkVEVFwiLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBvZmZzZXROYW1lU2hvcnQoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHtcbiAgICAgICAgZm9ybWF0OiBcInNob3J0XCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZyBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSBcIkVhc3Rlcm4gU3RhbmRhcmQgVGltZVwiIG9yIFwiRWFzdGVybiBEYXlsaWdodCBUaW1lXCIuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG9mZnNldE5hbWVMb25nKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLCB7XG4gICAgICAgIGZvcm1hdDogXCJsb25nXCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoaXMgem9uZSdzIG9mZnNldCBldmVyIGNoYW5nZXMsIGFzIGluIGEgRFNULlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc09mZnNldEZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnpvbmUuaXNVbml2ZXJzYWwgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyBpbiBhIERTVC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNJbkRTVCgpIHtcbiAgICBpZiAodGhpcy5pc09mZnNldEZpeGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoeyBtb250aDogMSwgZGF5OiAxIH0pLm9mZnNldCB8fFxuICAgICAgICB0aGlzLm9mZnNldCA+IHRoaXMuc2V0KHsgbW9udGg6IDUgfSkub2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbiBhIGxlYXAgeWVhciwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmlzSW5MZWFwWWVhciAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuaXNJbkxlYXBZZWFyIC8vPT4gZmFsc2VcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNJbkxlYXBZZWFyKCkge1xuICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBEYXRlVGltZSdzIG1vbnRoXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDIpLmRheXNJbk1vbnRoIC8vPT4gMjlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMykuZGF5c0luTW9udGggLy89PiAzMVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXNJbk1vbnRoKCkge1xuICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIsIHRoaXMubW9udGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmRheXNJblllYXIgLy89PiAzNjZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuZGF5c0luWWVhciAvLz0+IDM2NVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXNJblllYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGRheXNJblllYXIodGhpcy55ZWFyKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2Vla3MgaW4gdGhpcyBEYXRlVGltZSdzIHllYXJcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMDQpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUyXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3NJbldlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB3ZWVrc0luV2Vla1llYXIodGhpcy53ZWVrWWVhcikgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgSW50bCBvcHRpb25zIGZvciB0aGlzIERhdGVUaW1lLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSB0aGUgc2FtZSBvcHRpb25zIGFzIHRvTG9jYWxlU3RyaW5nXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHJlc29sdmVkTG9jYWxlT3B0aW9ucyhvcHRzID0ge30pIHtcbiAgICBjb25zdCB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhciB9ID0gRm9ybWF0dGVyLmNyZWF0ZShcbiAgICAgIHRoaXMubG9jLmNsb25lKG9wdHMpLFxuICAgICAgb3B0c1xuICAgICkucmVzb2x2ZWRPcHRpb25zKHRoaXMpO1xuICAgIHJldHVybiB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcjogY2FsZW5kYXIgfTtcbiAgfVxuXG4gIC8vIFRSQU5TRk9STVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gVVRDLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9KCd1dGMnKVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXSAtIG9wdGlvbmFsbHksIGFuIG9mZnNldCBmcm9tIFVUQyBpbiBtaW51dGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz17fV0gLSBvcHRpb25zIHRvIHBhc3MgdG8gYHNldFpvbmUoKWBcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICB0b1VUQyhvZmZzZXQgPSAwLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShvZmZzZXQpLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gdGhlIGhvc3QncyBsb2NhbCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gYHNldFpvbmUoJ2xvY2FsJylgXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgdG9Mb2NhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gc3BlY2lmaWVkIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIHNldHRlciBrZWVwcyB0aGUgdW5kZXJseWluZyB0aW1lIHRoZSBzYW1lIChhcyBpbiwgdGhlIHNhbWUgdGltZXN0YW1wKSwgYnV0IHRoZSBuZXcgaW5zdGFuY2Ugd2lsbCByZXBvcnQgZGlmZmVyZW50IGxvY2FsIHRpbWVzIGFuZCBjb25zaWRlciBEU1RzIHdoZW4gbWFraW5nIGNvbXB1dGF0aW9ucywgYXMgd2l0aCB7QGxpbmsgRGF0ZVRpbWUjcGx1c30uIFlvdSBtYXkgd2lzaCB0byB1c2Uge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9IHdoaWNoIHByb3ZpZGUgc2ltcGxlIGNvbnZlbmllbmNlIHdyYXBwZXJzIGZvciBjb21tb25seSB1c2VkIHpvbmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbem9uZT0nbG9jYWwnXSAtIGEgem9uZSBpZGVudGlmaWVyLiBBcyBhIHN0cmluZywgdGhhdCBjYW4gYmUgYW55IElBTkEgem9uZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgZW52aXJvbm1lbnQsIG9yIGEgZml4ZWQtb2Zmc2V0IG5hbWUgb2YgdGhlIGZvcm0gJ1VUQyszJywgb3IgdGhlIHN0cmluZ3MgJ2xvY2FsJyBvciAndXRjJy4gWW91IG1heSBhbHNvIHN1cHBseSBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBEYXRlVGltZSNab25lfSBjbGFzcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMua2VlcExvY2FsVGltZT1mYWxzZV0gLSBJZiB0cnVlLCBhZGp1c3QgdGhlIHVuZGVybHlpbmcgdGltZSBzbyB0aGF0IHRoZSBsb2NhbCB0aW1lIHN0YXlzIHRoZSBzYW1lLCBidXQgaW4gdGhlIHRhcmdldCB6b25lLiBZb3Ugc2hvdWxkIHJhcmVseSBuZWVkIHRoaXMuXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWUgPSBmYWxzZSwga2VlcENhbGVuZGFyVGltZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHpvbmUgPSBub3JtYWxpemVab25lKHpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoem9uZS5lcXVhbHModGhpcy56b25lKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmICghem9uZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV3VFMgPSB0aGlzLnRzO1xuICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRHdWVzcyA9IHpvbmUub2Zmc2V0KHRoaXMudHMpO1xuICAgICAgICBjb25zdCBhc09iaiA9IHRoaXMudG9PYmplY3QoKTtcbiAgICAgICAgW25ld1RTXSA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzOiBuZXdUUywgem9uZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IGxvYyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICogSnVzdCBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIHJlY29uZmlndXJlKHsgbG9jYWxlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5zZXRMb2NhbGUoJ2VuLUdCJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjb25maWd1cmUoeyBsb2NhbGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciBcInNldHRpbmdcIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZSNzZXRab25lfS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIGEgbWFwcGluZyBvZiB1bml0cyB0byBudW1iZXJzXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgaG91cjogOCwgbWludXRlOiAzMCB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB3ZWVrZGF5OiA1IH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMDUsIG9yZGluYWw6IDIzNCB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KHZhbHVlcywgbm9ybWFsaXplVW5pdCksXG4gICAgICBzZXR0aW5nV2Vla1N0dWZmID1cbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLFxuICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksXG4gICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsXG4gICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlcjtcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWl4ZWQ7XG4gICAgaWYgKHNldHRpbmdXZWVrU3R1ZmYpIHtcbiAgICAgIG1peGVkID0gd2Vla1RvR3JlZ29yaWFuKHsgLi4uZ3JlZ29yaWFuVG9XZWVrKHRoaXMuYyksIC4uLm5vcm1hbGl6ZWQgfSk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSkge1xuICAgICAgbWl4ZWQgPSBvcmRpbmFsVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWl4ZWQgPSB7IC4uLnRoaXMudG9PYmplY3QoKSwgLi4ubm9ybWFsaXplZCB9O1xuXG4gICAgICAvLyBpZiB3ZSBkaWRuJ3Qgc2V0IHRoZSBkYXkgYnV0IHdlIGVuZGVkIHVwIG9uIGFuIG92ZXJmbG93IGRhdGUsXG4gICAgICAvLyB1c2UgdGhlIGxhc3QgZGF5IG9mIHRoZSByaWdodCBtb250aFxuICAgICAgaWYgKGlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSkge1xuICAgICAgICBtaXhlZC5kYXkgPSBNYXRoLm1pbihkYXlzSW5Nb250aChtaXhlZC55ZWFyLCBtaXhlZC5tb250aCksIG1peGVkLmRheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW3RzLCBvXSA9IG9ialRvVFMobWl4ZWQsIHRoaXMubywgdGhpcy56b25lKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB0cywgbyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZVxuICAgKlxuICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cygxMjMpIC8vfj4gaW4gMTIzIG1pbGxpc2Vjb25kc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pIC8vfj4gdGhpcyB0aW1lIHRvbW9ycm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAtMSB9KSAvL34+IHRoaXMgdGltZSB5ZXN0ZXJkYXlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pblxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMywgbWludXRlczogMTMgfSkpIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJ0cmFjdCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c31cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIG1pbnVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLm5lZ2F0ZSgpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdW5pdCBvZiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ21vbnRoJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3llYXInKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMS0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignd2VlaycpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAzJywgd2Vla3MgYWx3YXlzIHN0YXJ0IG9uIE1vbmRheXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2RheScpLnRvSVNPVGltZSgpOyAvLz0+ICcwMDowMC4wMDAtMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdob3VyJykudG9JU09UaW1lKCk7IC8vPT4gJzA1OjAwOjAwLjAwMC0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGFydE9mKHVuaXQpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgbyA9IHt9LFxuICAgICAgbm9ybWFsaXplZFVuaXQgPSBEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpO1xuICAgIHN3aXRjaCAobm9ybWFsaXplZFVuaXQpIHtcbiAgICAgIGNhc2UgXCJ5ZWFyc1wiOlxuICAgICAgICBvLm1vbnRoID0gMTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJxdWFydGVyc1wiOlxuICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICBvLmRheSA9IDE7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwid2Vla3NcIjpcbiAgICAgIGNhc2UgXCJkYXlzXCI6XG4gICAgICAgIG8uaG91ciA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwiaG91cnNcIjpcbiAgICAgICAgby5taW51dGUgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgby5zZWNvbmQgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgby5taWxsaXNlY29uZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kc1wiOlxuICAgICAgICBicmVhaztcbiAgICAgIC8vIG5vIGRlZmF1bHQsIGludmFsaWQgdW5pdHMgdGhyb3cgaW4gbm9ybWFsaXplVW5pdCgpXG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcIndlZWtzXCIpIHtcbiAgICAgIG8ud2Vla2RheSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcInF1YXJ0ZXJzXCIpIHtcbiAgICAgIGNvbnN0IHEgPSBNYXRoLmNlaWwodGhpcy5tb250aCAvIDMpO1xuICAgICAgby5tb250aCA9IChxIC0gMSkgKiAzICsgMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXQobyk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGlzIERhdGVUaW1lIHRvIHRoZSBlbmQgKG1lYW5pbmcgdGhlIGxhc3QgbWlsbGlzZWNvbmQpIG9mIGEgdW5pdCBvZiB0aW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gVGhlIHVuaXQgdG8gZ28gdG8gdGhlIGVuZCBvZi4gQ2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgb3IgJ21pbGxpc2Vjb25kJy5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ21vbnRoJykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0zMVQyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd5ZWFyJykudG9JU08oKTsgLy89PiAnMjAxNC0xMi0zMVQyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd3ZWVrJykudG9JU08oKTsgLy8gPT4gJzIwMTQtMDMtMDlUMjM6NTk6NTkuOTk5LTA1OjAwJywgd2Vla3Mgc3RhcnQgb24gTW9uZGF5c1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2RheScpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMjM6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2hvdXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTAzVDA1OjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBlbmRPZih1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyB0aGlzLnBsdXMoeyBbdW5pdF06IDEgfSlcbiAgICAgICAgICAuc3RhcnRPZih1bml0KVxuICAgICAgICAgIC5taW51cygxKVxuICAgICAgOiB0aGlzO1xuICB9XG5cbiAgLy8gT1VUUFVUXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy5cbiAgICogKipZb3UgbWF5IG5vdCB3YW50IHRoaXMuKiogU2VlIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9yIGEgbW9yZSBmbGV4aWJsZSBmb3JtYXR0aW5nIHRvb2wuIEZvciBhIHRhYmxlIG9mIHRva2VucyBhbmQgdGhlaXIgaW50ZXJwcmV0YXRpb25zLCBzZWUgW2hlcmVdKGh0dHBzOi8vbW9tZW50LmdpdGh1Yi5pby9sdXhvbi8jL2Zvcm1hdHRpbmc/aWQ9dGFibGUtb2YtdG9rZW5zKS5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnKSAvLz0+ICcyMDE3IEFwciAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKCdmcicpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJywgeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+ICcyMDE3IGF2ci4gMjInXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KFwiSEggJ2hvdXJzIGFuZCcgbW0gJ21pbnV0ZXMnXCIpIC8vPT4gJzIwIGhvdXJzIGFuZCA1NSBtaW51dGVzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0Zvcm1hdChmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5yZWRlZmF1bHRUb0VOKG9wdHMpKS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcodGhpcywgZm10KVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2NhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIGRhdGUuIEFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhcyB0aGUgSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBhbmQgYW55IHByZXNldHMgZGVmaW5lZCBieSBMdXhvbiwgc3VjaCBhcyBgRGF0ZVRpbWUuREFURV9GVUxMYCBvciBgRGF0ZVRpbWUuVElNRV9TSU1QTEVgLlxuICAgKiBUaGUgZXhhY3QgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2QgaXMgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGluIGdlbmVyYWwgaXQgd2lsbCByZXR1cm4gYW4gYXBwcm9wcmlhdGUgcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIERhdGVUaW1lIGluIHRoZSBhc3NpZ25lZCBsb2NhbGUuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0XG4gICAqIEBwYXJhbSBmb3JtYXRPcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZygpOyAvLz0+IDQvMjAvMjAxN1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2VuLWdiJykudG9Mb2NhbGVTdHJpbmcoKTsgLy89PiAnMjAvMDQvMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyBsb2NhbGU6ICdlbi1nYicgfSk7IC8vPT4gJzIwLzA0LzIwMTcnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfRlVMTCk7IC8vPT4gJ0FwcmlsIDIwLCAyMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5USU1FX1NJTVBMRSk7IC8vPT4gJzExOjMyIEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFVElNRV9TSE9SVCk7IC8vPT4gJzQvMjAvMjAxNywgMTE6MzIgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ2xvbmcnLCBtb250aDogJ2xvbmcnLCBkYXk6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1cnNkYXksIEFwcmlsIDIwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdzaG9ydCcsIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICcyLWRpZ2l0JywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1LCBBcHIgMjAsIDExOjI3IEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXJDeWNsZTogJ2gyMycgfSk7IC8vPT4gJzExOjMyJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0xvY2FsZVN0cmluZyhmb3JtYXRPcHRzID0gRm9ybWF0cy5EQVRFX1NIT1JULCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIGZvcm1hdE9wdHMpLmZvcm1hdERhdGVUaW1lKHRoaXMpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBmb3JtYXQgXCJwYXJ0c1wiLCBtZWFuaW5nIGluZGl2aWR1YWwgdG9rZW5zIGFsb25nIHdpdGggbWV0YWRhdGEuIFRoaXMgaXMgYWxsb3dzIGNhbGxlcnMgdG8gcG9zdC1wcm9jZXNzIGluZGl2aWR1YWwgc2VjdGlvbnMgb2YgdGhlIGZvcm1hdHRlZCBvdXRwdXQuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0L2Zvcm1hdFRvUGFydHNcbiAgICogQHBhcmFtIG9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMsIHNhbWUgYXMgYHRvTG9jYWxlU3RyaW5nYC5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVQYXJ0cygpOyAvLz0+IFtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdkYXknLCB2YWx1ZTogJzI1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbW9udGgnLCB2YWx1ZTogJzA1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAneWVhcicsIHZhbHVlOiAnMTk4MicgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiBdXG4gICAqL1xuICB0b0xvY2FsZVBhcnRzKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgb3B0cykuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKVxuICAgICAgOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MywgNSwgMjUpLnRvSVNPKCkgLy89PiAnMTk4Mi0wNS0yNVQwMDowMDowMC4wMDBaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTygpIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1LTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcyMDE3MDQyMlQyMDQ3MDUuMzM1LTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKHtcbiAgICBmb3JtYXQgPSBcImV4dGVuZGVkXCIsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSxcbiAgICBpbmNsdWRlT2Zmc2V0ID0gdHJ1ZSxcbiAgICBleHRlbmRlZFpvbmUgPSBmYWxzZSxcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dCA9IGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiO1xuXG4gICAgbGV0IGMgPSB0b0lTT0RhdGUodGhpcywgZXh0KTtcbiAgICBjICs9IFwiVFwiO1xuICAgIGMgKz0gdG9JU09UaW1lKHRoaXMsIGV4dCwgc3VwcHJlc3NTZWNvbmRzLCBzdXBwcmVzc01pbGxpc2Vjb25kcywgaW5jbHVkZU9mZnNldCwgZXh0ZW5kZWRab25lKTtcbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIGRhdGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDE5ODIsIDUsIDI1KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTA1LTI1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxOTgyMDUyNSdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09EYXRlKHsgZm9ybWF0ID0gXCJleHRlbmRlZFwiIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHdlZWsgZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPV2Vla0RhdGUoKSAvLz0+ICcxOTgyLVcyMS0yJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1dlZWtEYXRlKCkge1xuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgXCJra2trLSdXJ1dXLWNcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyB0aW1lIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSgpIC8vPT4gJzA3OjM0OjE5LjM2MVonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQsIHNlY29uZHM6IDAsIG1pbGxpc2Vjb25kczogMCB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMDc6MzRaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcwNzM0MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QwNzozNDoxOS4zNjFaJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1RpbWUoe1xuICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgaW5jbHVkZU9mZnNldCA9IHRydWUsXG4gICAgaW5jbHVkZVByZWZpeCA9IGZhbHNlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIixcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBjID0gaW5jbHVkZVByZWZpeCA/IFwiVFwiIDogXCJcIjtcbiAgICByZXR1cm4gKFxuICAgICAgYyArXG4gICAgICB0b0lTT1RpbWUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiLFxuICAgICAgICBzdXBwcmVzc1NlY29uZHMsXG4gICAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzLFxuICAgICAgICBpbmNsdWRlT2Zmc2V0LFxuICAgICAgICBleHRlbmRlZFpvbmVcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gUkZDIDI4MjItY29tcGF0aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgKzAwMDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1JGQzI4MjIoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIC0wNDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1JGQzI4MjIoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgWlpaXCIsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBIVFRQIGhlYWRlcnMuIFRoZSBvdXRwdXQgaXMgYWx3YXlzIGV4cHJlc3NlZCBpbiBHTVQuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHN0cmluZyBjb25mb3JtcyB0byBSRkMgMTEyMy5cbiAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMzLmh0bWwjc2VjMy4zLjFcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIEdNVCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzLCAxOSkudG9IVFRQKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAxOTowMDowMCBHTVQnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSFRUUCgpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMudG9VVEMoKSwgXCJFRUUsIGRkIExMTCB5eXl5IEhIOm1tOnNzICdHTVQnXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9TUUxEYXRlKCkgLy89PiAnMjAxNC0wNy0xMydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUxEYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRvSVNPRGF0ZSh0aGlzLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoKSAvLz0+ICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoeyBpbmNsdWRlWm9uZTogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1IEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU1FMVGltZSh7IGluY2x1ZGVPZmZzZXQgPSB0cnVlLCBpbmNsdWRlWm9uZSA9IGZhbHNlLCBpbmNsdWRlT2Zmc2V0U3BhY2UgPSB0cnVlIH0gPSB7fSkge1xuICAgIGxldCBmbXQgPSBcIkhIOm1tOnNzLlNTU1wiO1xuXG4gICAgaWYgKGluY2x1ZGVab25lIHx8IGluY2x1ZGVPZmZzZXQpIHtcbiAgICAgIGlmIChpbmNsdWRlT2Zmc2V0U3BhY2UpIHtcbiAgICAgICAgZm10ICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVab25lKSB7XG4gICAgICAgIGZtdCArPSBcInpcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgICAgICBmbXQgKz0gXCJaWlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgZm10LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVpvbmU9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgem9uZSwgc3VjaCBhcyAnQW1lcmljYS9OZXdfWW9yaycuIE92ZXJyaWRlcyBpbmNsdWRlT2Zmc2V0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldFNwYWNlPXRydWVdIC0gaW5jbHVkZSB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgdGltZSBhbmQgdGhlIG9mZnNldCwgc3VjaCBhcyAnMDU6MTU6MTYuMzQ1IC0wNDowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIC0wNDowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCh7IGluY2x1ZGVab25lOiB0cnVlIH0pIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU1FMKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy50b1NRTERhdGUoKX0gJHt0aGlzLnRvU1FMVGltZShvcHRzKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvSVNPKCkgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLiBBbGlhcyBvZiB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBtaWxsaXNlY29uZHMgb2YgdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1NlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIHNlY29uZHMgKGFzIGEgd2hvbGUgbnVtYmVyKSBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1VuaXhJbnRlZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgdG9CU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvSlNEYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEYXRlVGltZSdzIHllYXIsIG1vbnRoLCBkYXksIGFuZCBzbyBvbi5cbiAgICogQHBhcmFtIG9wdHMgLSBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlQ29uZmlnPWZhbHNlXSAtIGluY2x1ZGUgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzIGluIHRoZSBvdXRwdXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9PYmplY3QoKSAvLz0+IHsgeWVhcjogMjAxNywgbW9udGg6IDQsIGRheTogMjIsIGhvdXI6IDIwLCBtaW51dGU6IDQ5LCBzZWNvbmQ6IDQyLCBtaWxsaXNlY29uZDogMjY4IH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3Qob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGJhc2UgPSB7IC4uLnRoaXMuYyB9O1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykge1xuICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7XG4gICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTtcbiAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBEYXRlIGVxdWl2YWxlbnQgdG8gdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7RGF0ZX1cbiAgICovXG4gIHRvSlNEYXRlKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIDogTmFOKTtcbiAgfVxuXG4gIC8vIENPTVBBUkVcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIERhdGVUaW1lcyBhcyBhIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIERhdGVUaW1lIHRvIGNvbXBhcmUgdGhpcyBvbmUgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGkxID0gRGF0ZVRpbWUuZnJvbUlTTygnMTk4Mi0wNS0yNVQwOTo0NScpLFxuICAgKiAgICAgaTIgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgzLTEwLTE0VDEwOjMwJyk7XG4gICAqIGkyLmRpZmYoaTEpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogNDM4MDc1MDAwMDAgfVxuICAgKiBpMi5kaWZmKGkxLCAnaG91cnMnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTIxNjguNzUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LjAzMTI1IH1cbiAgICogaTIuZGlmZihpMSwgWydtb250aHMnLCAnZGF5cycsICdob3VycyddKS50b09iamVjdCgpIC8vPT4geyBtb250aHM6IDE2LCBkYXlzOiAxOSwgaG91cnM6IDAuNzUgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlckRhdGVUaW1lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyT3B0cyA9IHsgbG9jYWxlOiB0aGlzLmxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtOiB0aGlzLm51bWJlcmluZ1N5c3RlbSwgLi4ub3B0cyB9O1xuXG4gICAgY29uc3QgdW5pdHMgPSBtYXliZUFycmF5KHVuaXQpLm1hcChEdXJhdGlvbi5ub3JtYWxpemVVbml0KSxcbiAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksXG4gICAgICBlYXJsaWVyID0gb3RoZXJJc0xhdGVyID8gdGhpcyA6IG90aGVyRGF0ZVRpbWUsXG4gICAgICBsYXRlciA9IG90aGVySXNMYXRlciA/IG90aGVyRGF0ZVRpbWUgOiB0aGlzLFxuICAgICAgZGlmZmVkID0gZGlmZihlYXJsaWVyLCBsYXRlciwgdW5pdHMsIGR1ck9wdHMpO1xuXG4gICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCByaWdodCBub3cuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjZGlmZn1cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmZOb3codW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmRpZmYoRGF0ZVRpbWUubm93KCksIHVuaXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCBzcGFubmluZyBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIGFub3RoZXIgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBlbmQgcG9pbnQgb2YgdGhlIEludGVydmFsXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW50aWwob3RoZXJEYXRlVGltZSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIERhdGVUaW1lIGlzIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZSBhcyBhbm90aGVyIERhdGVUaW1lLlxuICAgKiBIaWdoZXItb3JkZXIgdW5pdHMgbXVzdCBhbHNvIGJlIGlkZW50aWNhbCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYHRydWVgLlxuICAgKiBOb3RlIHRoYXQgdGltZSB6b25lcyBhcmUgKippZ25vcmVkKiogaW4gdGhpcyBjb21wYXJpc29uLCB3aGljaCBjb21wYXJlcyB0aGUgKipsb2NhbCoqIGNhbGVuZGFyIHRpbWUuIFVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0gdG8gY29udmVydCBvbmUgb2YgdGhlIGRhdGVzIGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuaGFzU2FtZShvdGhlckRULCAnZGF5Jyk7IC8vfj4gdHJ1ZSBpZiBvdGhlckRUIGlzIGluIHRoZSBzYW1lIGN1cnJlbnQgY2FsZW5kYXIgZGF5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBoYXNTYW1lKG90aGVyRGF0ZVRpbWUsIHVuaXQpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgaW5wdXRNcyA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpO1xuICAgIGNvbnN0IGFkanVzdGVkVG9ab25lID0gdGhpcy5zZXRab25lKG90aGVyRGF0ZVRpbWUuem9uZSwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pO1xuICAgIHJldHVybiBhZGp1c3RlZFRvWm9uZS5zdGFydE9mKHVuaXQpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSBhZGp1c3RlZFRvWm9uZS5lbmRPZih1bml0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFcXVhbGl0eSBjaGVja1xuICAgKiBUd28gRGF0ZVRpbWVzIGFyZSBlcXVhbCBpZmYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgbWlsbGlzZWNvbmQsIGhhdmUgdGhlIHNhbWUgem9uZSBhbmQgbG9jYXRpb24sIGFuZCBhcmUgYm90aCB2YWxpZC5cbiAgICogVG8gY29tcGFyZSBqdXN0IHRoZSBtaWxsaXNlY29uZCB2YWx1ZXMsIHVzZSBgK2R0MSA9PT0gK2R0MmAuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyIC0gdGhlIG90aGVyIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1ZhbGlkICYmXG4gICAgICBvdGhlci5pc1ZhbGlkICYmXG4gICAgICB0aGlzLnZhbHVlT2YoKSA9PT0gb3RoZXIudmFsdWVPZigpICYmXG4gICAgICB0aGlzLnpvbmUuZXF1YWxzKG90aGVyLnpvbmUpICYmXG4gICAgICB0aGlzLmxvYy5lcXVhbHMob3RoZXIubG9jKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHRoaXMgdGltZSByZWxhdGl2ZSB0byBub3csIHN1Y2ggYXMgXCJpbiB0d28gZGF5c1wiLiBDYW4gb25seSBpbnRlcm5hdGlvbmFsaXplIGlmIHlvdXJcbiAgICogcGxhdGZvcm0gc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuIFJvdW5kcyBkb3duIGJ5IGRlZmF1bHQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT1cImxvbmdcIl0gLSB0aGUgc3R5bGUgb2YgdW5pdHMsIG11c3QgYmUgXCJsb25nXCIsIFwic2hvcnRcIiwgb3IgXCJuYXJyb3dcIlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdCBvciBhcnJheSBvZiB1bml0czsgaWYgb21pdHRlZCwgb3IgYW4gYXJyYXksIHRoZSBtZXRob2Qgd2lsbCBwaWNrIHRoZSBiZXN0IHVuaXQuIFVzZSBhbiBhcnJheSBvciBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIG9yIFwic2Vjb25kc1wiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucm91bmQ9dHJ1ZV0gLSB3aGV0aGVyIHRvIHJvdW5kIHRoZSBudW1iZXJzIGluIHRoZSBvdXRwdXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wYWRkaW5nPTBdIC0gcGFkZGluZyBpbiBtaWxsaXNlY29uZHMuIFRoaXMgYWxsb3dzIHlvdSB0byByb3VuZCB1cCB0aGUgcmVzdWx0IGlmIGl0IGZpdHMgaW5zaWRlIHRoZSB0aHJlc2hvbGQuIERvbid0IHVzZSBpbiBjb21iaW5hdGlvbiB3aXRoIHtyb3VuZDogZmFsc2V9IGJlY2F1c2UgdGhlIGRlY2ltYWwgb3V0cHV0IHdpbGwgaW5jbHVkZSB0aGUgcGFkZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubG9jYWxlIC0gb3ZlcnJpZGUgdGhlIGxvY2FsZSBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIG92ZXJyaWRlIHRoZSBudW1iZXJpbmdTeXN0ZW0gb2YgdGhpcyBEYXRlVGltZS4gVGhlIEludGwgc3lzdGVtIG1heSBjaG9vc2Ugbm90IHRvIGhvbm9yIHRoaXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCJpbiAxIGRheVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZShcImVzXCIpLnRvUmVsYXRpdmUoeyBkYXlzOiAxIH0pIC8vPT4gXCJkZW50cm8gZGUgMSBkXHUwMEVEYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGFucyAyMyBoZXVyZXNcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoeyB1bml0OiBcImhvdXJzXCIgfSkgLy89PiBcIjQ4IGhvdXJzIGFnb1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgaG91cnM6IDM2IH0pLnRvUmVsYXRpdmUoeyByb3VuZDogZmFsc2UgfSkgLy89PiBcIjEuNSBkYXlzIGFnb1wiXG4gICAqL1xuICB0b1JlbGF0aXZlKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyA/ICh0aGlzIDwgYmFzZSA/IC1vcHRpb25zLnBhZGRpbmcgOiBvcHRpb25zLnBhZGRpbmcpIDogMDtcbiAgICBsZXQgdW5pdHMgPSBbXCJ5ZWFyc1wiLCBcIm1vbnRoc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdO1xuICAgIGxldCB1bml0ID0gb3B0aW9ucy51bml0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudW5pdCkpIHtcbiAgICAgIHVuaXRzID0gb3B0aW9ucy51bml0O1xuICAgICAgdW5pdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShiYXNlLCB0aGlzLnBsdXMocGFkZGluZyksIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBudW1lcmljOiBcImFsd2F5c1wiLFxuICAgICAgdW5pdHMsXG4gICAgICB1bml0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkYXRlIHJlbGF0aXZlIHRvIHRvZGF5LCBzdWNoIGFzIFwieWVzdGVyZGF5XCIgb3IgXCJuZXh0IG1vbnRoXCIuXG4gICAqIE9ubHkgaW50ZXJuYXRpb25hbGl6ZXMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdDsgaWYgb21pdHRlZCwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIHVuaXQuIFVzZSBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgb3IgXCJkYXlzXCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+IFwidG9tb3Jyb3dcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcIlwibWFcdTAwRjFhbmFcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGVtYWluXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICovXG4gIHRvUmVsYXRpdmVDYWxlbmRhcihvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gZGlmZlJlbGF0aXZlKG9wdGlvbnMuYmFzZSB8fCBEYXRlVGltZS5mcm9tT2JqZWN0KHt9LCB7IHpvbmU6IHRoaXMuem9uZSB9KSwgdGhpcywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG51bWVyaWM6IFwiYXV0b1wiLFxuICAgICAgdW5pdHM6IFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiXSxcbiAgICAgIGNhbGVuZGFyeTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1pbiBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWluaW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1pbiBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuICBzdGF0aWMgbWluKC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtaW4gcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWluKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1heCBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWF4aW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1heCBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuICBzdGF0aWMgbWF4KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtYXggcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWF4KTtcbiAgfVxuXG4gIC8vIE1JU0NcblxuICAvKipcbiAgICogRXhwbGFpbiBob3cgYSBzdHJpbmcgd291bGQgYmUgcGFyc2VkIGJ5IGZyb21Gb3JtYXQoKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIGRlc2NyaXB0aW9uKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGFrZW4gYnkgZnJvbUZvcm1hdCgpXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBmcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCB9ID0gb3B0aW9ucyxcbiAgICAgIGxvY2FsZVRvVXNlID0gTG9jYWxlLmZyb21PcHRzKHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGRlZmF1bHRUb0VOOiB0cnVlLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZVRvVXNlLCB0ZXh0LCBmbXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmcm9tRm9ybWF0RXhwbGFpbiBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZ0V4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEZPUk1BVCBQUkVTRVRTXG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgMTAvMTQvMTk4M1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX1NIT1JUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfU0hPUlQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX01FRCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX01FRDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIE9jdCAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURV9NRURfV0lUSF9XRUVLREFZKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX0ZVTEwoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9GVUxMO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ1R1ZXNkYXksIE9jdG9iZXIgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfSFVHRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX0hVR0U7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9TSU1QTEUoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9TSU1QTEU7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX0xPTkdfT0ZGU0VUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCcsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1NJTVBMRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1NJTVBMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMycsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBFRFQnLCBhbHdheXMgMjQtaG91ci5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzEwLzE0LzE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfU0hPUlQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRUQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpLCAxNCBPY3QgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVk7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9GVUxMO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMsIDk6MzA6MzMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9IVUdFO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFM7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJpZW5kbHlEYXRlVGltZShkYXRlVGltZWlzaCkge1xuICBpZiAoRGF0ZVRpbWUuaXNEYXRlVGltZShkYXRlVGltZWlzaCkpIHtcbiAgICByZXR1cm4gZGF0ZVRpbWVpc2g7XG4gIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgZGF0ZVRpbWVpc2gudmFsdWVPZiAmJiBpc051bWJlcihkYXRlVGltZWlzaC52YWx1ZU9mKCkpKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21KU0RhdGUoZGF0ZVRpbWVpc2gpO1xuICB9IGVsc2UgaWYgKGRhdGVUaW1laXNoICYmIHR5cGVvZiBkYXRlVGltZWlzaCA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KGRhdGVUaW1laXNoKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICBgVW5rbm93biBkYXRldGltZSBhcmd1bWVudDogJHtkYXRlVGltZWlzaH0sIG9mIHR5cGUgJHt0eXBlb2YgZGF0ZVRpbWVpc2h9YFxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSBcImVtb2ppLXJlZ2V4XCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuXG4vKiogVGVzdC1lbnZpcm9ubWVudC1mcmllbmRseSBmdW5jdGlvbiB3aGljaCBmZXRjaGVzIHRoZSBjdXJyZW50IHN5c3RlbSBsb2NhbGUuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJlbi1VU1wiO1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlO1xufVxuXG4vLyBEYXRlL1RpbWUgUmVuZGVyaW5nXG5cbi8qKiBOb3JtYWxpemUgYSBkdXJhdGlvbiB0byBhbGwgb2YgdGhlIHByb3BlciB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEdXJhdGlvbihkdXI6IER1cmF0aW9uKSB7XG4gICAgaWYgKGR1ciA9PT0gdW5kZWZpbmVkIHx8IGR1ciA9PT0gbnVsbCkgcmV0dXJuIGR1cjtcblxuICAgIHJldHVybiBkdXIuc2hpZnRUbyhcInllYXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiKS5ub3JtYWxpemUoKTtcbn1cblxuLyoqIFN0cmlwIHRoZSB0aW1lIGNvbXBvbmVudHMgb2YgYSBkYXRlIHRpbWUgb2JqZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVGltZShkdDogRGF0ZVRpbWUpOiBEYXRlVGltZSB7XG4gICAgaWYgKGR0ID09PSBudWxsIHx8IGR0ID09PSB1bmRlZmluZWQpIHJldHVybiBkdDtcblxuICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHtcbiAgICAgICAgeWVhcjogZHQueWVhcixcbiAgICAgICAgbW9udGg6IGR0Lm1vbnRoLFxuICAgICAgICBkYXk6IGR0LmRheSxcbiAgICB9KTtcbn1cblxuLyoqIFRyeSB0byBleHRyYWN0IGEgWVlZWU1NREQgZGF0ZSBmcm9tIGEgc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRlKHN0cjogc3RyaW5nKTogRGF0ZVRpbWUgfCB1bmRlZmluZWQge1xuICAgIGxldCBkYXRlTWF0Y2ggPSAvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkvLmV4ZWMoc3RyKTtcbiAgICBpZiAoIWRhdGVNYXRjaCkgZGF0ZU1hdGNoID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KS8uZXhlYyhzdHIpO1xuICAgIGlmIChkYXRlTWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXIgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzFdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gTnVtYmVyLnBhcnNlSW50KGRhdGVNYXRjaFsyXSk7XG4gICAgICAgIGxldCBkYXkgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzNdKTtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyLCBtb250aCwgZGF5IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBSZW5kZXIgYSBEYXRlVGltZSBpbiBhIG1pbmltYWwgZm9ybWF0IHRvIHNhdmUgc3BhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWluaW1hbERhdGUodGltZTogRGF0ZVRpbWUsIGRhdGVGb3JtYXQ6IHN0cmluZywgZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyByZWxldmFudCB0aW1lIHNwZWNpZmllZCwgZmFsbCBiYWNrIHRvIGp1c3QgcmVuZGVyaW5nIHRoZSBkYXRlLlxuICAgIGlmICh0aW1lLnNlY29uZCA9PSAwICYmIHRpbWUubWludXRlID09IDAgJiYgdGltZS5ob3VyID09IDApIHtcbiAgICAgICAgcmV0dXJuIHRpbWUudG9Mb2NhbCgpLnRvRm9ybWF0KGRhdGVGb3JtYXQsIHsgbG9jYWxlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aW1lLnRvTG9jYWwoKS50b0Zvcm1hdChkYXRlVGltZUZvcm1hdCwgeyBsb2NhbGUgfSk7XG59XG5cbi8qKiBSZW5kZXIgYSBkdXJhdGlvbiBpbiBhIG1pbmltYWwgZm9ybWF0IHRvIHNhdmUgc3BhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWluaW1hbER1cmF0aW9uKGR1cjogRHVyYXRpb24pOiBzdHJpbmcge1xuICAgIGR1ciA9IG5vcm1hbGl6ZUR1cmF0aW9uKGR1cik7XG5cbiAgICAvLyBUT0RPOiBMdXhvbiBkb2VzIG5vdCBoYXZlIG11bHRpLWxpbmd1YWwvbG9jYWxlLWF3YXJlIGR1cmF0aW9uIHJlbmRlcmluZy5cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBpZiAoZHVyLnllYXJzKSByZXN1bHQgKz0gYCR7ZHVyLnllYXJzfSB5ZWFycywgYDtcbiAgICBpZiAoZHVyLm1vbnRocykgcmVzdWx0ICs9IGAke2R1ci5tb250aHN9IG1vbnRocywgYDtcbiAgICBpZiAoZHVyLndlZWtzKSByZXN1bHQgKz0gYCR7ZHVyLndlZWtzfSB3ZWVrcywgYDtcbiAgICBpZiAoZHVyLmRheXMpIHJlc3VsdCArPSBgJHtkdXIuZGF5c30gZGF5cywgYDtcbiAgICBpZiAoZHVyLmhvdXJzKSByZXN1bHQgKz0gYCR7ZHVyLmhvdXJzfSBob3VycywgYDtcbiAgICBpZiAoZHVyLm1pbnV0ZXMpIHJlc3VsdCArPSBgJHtkdXIubWludXRlc30gbWludXRlcywgYDtcbiAgICBpZiAoZHVyLnNlY29uZHMpIHJlc3VsdCArPSBgJHtNYXRoLnJvdW5kKGR1ci5zZWNvbmRzKX0gc2Vjb25kcywgYDtcbiAgICBpZiAoZHVyLm1pbGxpc2Vjb25kcykgcmVzdWx0ICs9IGAke01hdGgucm91bmQoZHVyLm1pbGxpc2Vjb25kcyl9IG1zLCBgO1xuXG4gICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIiwgXCIpKSByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIHJlc3VsdC5sZW5ndGggLSAyKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBQYXRoIHV0aWxpdGllcy5cblxuLyoqIEdldCB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGdpdmVuIHBhdGggKGkuZS4sIGxpa2UgY29tcHV0aW5nICdwYXRoLy4uJykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50Rm9sZGVyKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbn1cblxuLyoqIEdldCB0aGUgZmlsZSBuYW1lIGZvciB0aGUgZmlsZSByZWZlcmVuY2VkIGluIHRoZSBnaXZlbiBwYXRoLCBieSBzdHJpcHBpbmcgdGhlIHBhcmVudCBmb2xkZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVOYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguaW5jbHVkZXMoXCIvXCIpID8gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IHBhdGg7XG59XG5cbi8qKiBHZXQgdGhlIFwidGl0bGVcIiBmb3IgYSBmaWxlLCBieSBzdHJpcHBpbmcgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGggYXMgd2VsbCBhcyB0aGUgZXh0ZW5zaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVUaXRsZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiL1wiKSkgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKHBhdGguZW5kc1dpdGgoXCIubWRcIikpIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDMpO1xuICAgIHJldHVybiBwYXRoO1xufVxuXG4vKiogR2V0IHRoZSBleHRlbnNpb24gb2YgYSBmaWxlIGZyb20gdGhlIGZpbGUgcGF0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXBhdGguaW5jbHVkZXMoXCIuXCIpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi5cIikgKyAxKTtcbn1cblxuLy8gVGFnIGV4dHJhY3Rpb24uXG5cbi8qKiBQYXJzZSBhbGwgc3VidGFncyBvdXQgb2YgdGhlIGdpdmVuIHRhZy4gSS5lLiwgI2hlbGxvL2kvYW0gd291bGQgeWllbGQgWyNoZWxsby9pL2FtLCAjaGVsbG8vaSwgI2hlbGxvXS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3VidGFncyh0YWdzOiBzdHJpbmcgfCBJdGVyYWJsZTxzdHJpbmc+KTogc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCB0YWcgb2YgdHlwZW9mIHRhZ3MgPT09IFwic3RyaW5nXCIgPyBbdGFnc10gOiB0YWdzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRhZyk7XG4gICAgICAgIHdoaWxlICh0YWcuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgICAgICB0YWcgPSB0YWcuc3Vic3RyaW5nKDAsIHRhZy5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBTcGxpdCBlYWNoIGJsb2NrIGFuZCBzZWN0aW9uIGxpbmsgaW50byB0aGUgb3JpZ2luYWwgbGluayBhbmQgYSBjb3JyZXNwb25kaW5nIGZpbGUgbGluay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RmlsZUxpbmtzKGVsaW5rczogTGlua1tdKTogTGlua1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IExpbmtbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBlbGlua3MpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobGluayk7XG5cbiAgICAgICAgY29uc3QgZmlsZUxpbmsgPSBsaW5rLnRvRmlsZSgpO1xuICAgICAgICBpZiAobGluay50eXBlICE9IFwiZmlsZVwiICYmICFyZXN1bHQuZmluZCgoZXhpc3RpbmcpID0+IGV4aXN0aW5nLmVxdWFscyhmaWxlTGluaykpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChmaWxlTGluayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBTdHJpbmcgZXNjYXBpbmcgYW5kIGNhbm9uaWNhbGl6YXRpb24uXG5cbi8qKlxuICogRXNjYXBlIHJlZ2V4IGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9HdWlkZS9SZWd1bGFyX0V4cHJlc3Npb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuY29uc3QgSEVBREVSX0NBTk9OSUNBTElaRVI6IFAuUGFyc2VyPHN0cmluZz4gPSBQLmFsdChcbiAgICBQLnJlZ2V4KG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCBcIlwiKSksXG4gICAgUC5yZWdleCgvWzAtOVxccHtMZXR0ZXJ9Xy1dKy91KSxcbiAgICBQLndoaXRlc3BhY2UubWFwKChfKSA9PiBcIiBcIiksXG4gICAgUC5hbnkubWFwKChfKSA9PiBcIiBcIilcbilcbiAgICAubWFueSgpXG4gICAgLm1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQuam9pbihcIlwiKS5zcGxpdCgvXFxzKy8pLmpvaW4oXCIgXCIpLnRyaW0oKTtcbiAgICB9KTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIHRoZSB0ZXh0IGluIGEgaGVhZGVyIHRvIGJlIHNvbWV0aGluZyB0aGF0IGlzIGFjdHVhbGx5IGxpbmthYmxlIHRvLiBUaGlzIG1pbWljc1xuICogaG93IE9ic2lkaWFuIGRvZXMgaXQncyBub3JtYWxpemF0aW9uLCBjb2xsYXBzaW5nIHJlcGVhdGVkIHNwYWNlcyBhbmQgc3RyaXBwaW5nIG91dCBjb250cm9sIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSEVBREVSX0NBTk9OSUNBTElaRVIudHJ5UGFyc2UoaGVhZGVyKTtcbn1cblxuLy8gRmFzdCBleHRyYWN0aW9uIG9mIGxpbmUgcmFuZ2VzIGZyb20gbGFyZ2UgcGllY2VzIG9mIHRleHQuXG5cbi8qKiBVcGRhdGUgdGhlIGxpbmUgcmFuZ2UgZnJvbSBbc3RhcnQsIGVuZCkgd2l0aCB0aGUgZ2l2ZW4gZnVuY3Rpb24uICovXG5leHBvcnQgZnVuY3Rpb24gbGluZVJlcGxhY2UodGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZnVuYzogKGxpbmU6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBbZGF0YSwgb2Zmc2V0XSA9IGxpbmVTcGFuKHRleHQsIHN0YXJ0LCBlbmQpO1xuICAgIGlmICghb2Zmc2V0KSByZXR1cm4gdGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIGRhdGEuc3Vic3RyaW5nKDAsIG9mZnNldC5zdGFydCkgKyBmdW5jKGRhdGEuc3Vic3RyaW5nKG9mZnNldC5zdGFydCwgb2Zmc2V0LmVuZCkpICsgZGF0YS5zdWJzdHJpbmcob2Zmc2V0LmVuZClcbiAgICApO1xufVxuXG4vKiogRXh0cmFjdCB0aGUgbGluZXMgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kKSwgYXMgd2VsbCBhcyB0aGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIHN0YXJ0IGFuZCBlbmQuICovXG5leHBvcnQgZnVuY3Rpb24gbGluZVNwYW4oXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXJcbik6IFtzdHJpbmcsIHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB8IHVuZGVmaW5lZF0ge1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIDApO1xuICAgIGVuZCA9IE1hdGgubWF4KGVuZCwgMCk7XG5cbiAgICBpZiAoc3RhcnQgPj0gZW5kKSByZXR1cm4gW1wiXCIsIHVuZGVmaW5lZF07XG5cbiAgICAvLyBTdGFydCBieSBmaW5kaW5nIHRoZSBzdGFydGluZyBsaW5lIG9mZnNldC5cbiAgICBjb25zdCBzdGFydE9mZnNldCA9IHNraXBOZXdsaW5lcyh0ZXh0LCAwLCBzdGFydCk7XG4gICAgaWYgKHN0YXJ0T2Zmc2V0ID09IC0xKSByZXR1cm4gW1wiXCIsIHVuZGVmaW5lZF07XG5cbiAgICBjb25zdCBlbmRPZmZzZXQgPSBza2lwTmV3bGluZXModGV4dCwgc3RhcnRPZmZzZXQsIGVuZCAtIHN0YXJ0KTtcbiAgICBpZiAoZW5kT2Zmc2V0ID09IC0xKSByZXR1cm4gW3RleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0KSwgeyBzdGFydDogc3RhcnRPZmZzZXQsIGVuZDogdGV4dC5sZW5ndGggfV07XG4gICAgZWxzZSByZXR1cm4gW3RleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSAxKSwgeyBzdGFydDogc3RhcnRPZmZzZXQsIGVuZDogZW5kT2Zmc2V0IC0gMSB9XTtcbn1cblxuLyoqIEV4dHJhY3QgdGhlIGxpbmVzIGluIHRoZSByYW5nZSBbc3RhcnQsIGVuZCkuIFN0YXJ0IGlzIGluY2x1c2l2ZSwgZW5kIGlzIGV4Y2x1c2l2ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lUmFuZ2UodGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxpbmVTcGFuKHRleHQsIHN0YXJ0LCBlbmQpWzBdO1xufVxuXG4vKiogU2tpcCB7Y291bnR9IHRvdGFsIG5ld2xpbmVzLCByZXR1cm5pbmcgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHtjb3VudH0gbGluZXMgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZS4gSWYgY291bnQgaXMgMCwgdGhlIGluaXRpYWwgb2Zmc2V0IGlzIHJldHVybmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNraXBOZXdsaW5lcyh0ZXh0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gc3RhcnQ7XG5cbiAgICBsZXQgcG9zaXRpb24gPSBzdGFydDtcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIHBvc2l0aW9uID0gdGV4dC5pbmRleE9mKFwiXFxuXCIsIHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKHBvc2l0aW9uID09IC0xKSByZXR1cm4gLTE7XG5cbiAgICAgICAgY291bnQtLTtcbiAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuXHQvLyBodHRwczovL210aHMuYmUvZW1vamlcblx0cmV0dXJuIC9bIyowLTldXFx1RkUwRj9cXHUyMEUzfFtcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRUQtXFx1MjNFRlxcdTIzRjFcXHUyM0YyXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCXFx1MjVGQ1xcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTJcXHUyNjk0LVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBN1xcdTI2QUFcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzhcXHUyNkNGXFx1MjZEMVxcdTI2RTlcXHUyNkYwLVxcdTI2RjVcXHUyNkY3XFx1MjZGOFxcdTI2RkFcXHUyNzAyXFx1MjcwOFxcdTI3MDlcXHUyNzBGXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxRFxcdTI3MjFcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc1N1xcdTI3NjNcXHUyN0ExXFx1MjkzNFxcdTI5MzVcXHUyQjA1LVxcdTJCMDdcXHUyQjFCXFx1MkIxQ1xcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XVxcdUZFMEY/fFtcXHUyNjFEXFx1MjcwQ1xcdTI3MERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpP3xbXFx1MjcwQVxcdTI3MEJdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI2OTNcXHUyNkExXFx1MjZBQlxcdTI2QzVcXHUyNkNFXFx1MjZENFxcdTI2RUFcXHUyNkZEXFx1MjcwNVxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkI1MF18XFx1MjZEM1xcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E1KT98XFx1MjZGOSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1Mjc2NFxcdUZFMEY/KD86XFx1MjAwRCg/OlxcdUQ4M0RcXHVERDI1fFxcdUQ4M0VcXHVERTc5KSk/fFxcdUQ4M0MoPzpbXFx1REMwNFxcdURENzBcXHVERDcxXFx1REQ3RVxcdUREN0ZcXHVERTAyXFx1REUzN1xcdURGMjFcXHVERjI0LVxcdURGMkNcXHVERjM2XFx1REY3RFxcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RVxcdURGOUZcXHVERkNEXFx1REZDRVxcdURGRDQtXFx1REZERlxcdURGRjVcXHVERkY3XVxcdUZFMEY/fFtcXHVERjg1XFx1REZDMlxcdURGQzddKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURGQzRcXHVERkNBXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERkNCXFx1REZDQ10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjQzXFx1REY0NS1cXHVERjRBXFx1REY0Qy1cXHVERjdDXFx1REY3RS1cXHVERjg0XFx1REY4Ni1cXHVERjkzXFx1REZBMC1cXHVERkMxXFx1REZDNVxcdURGQzZcXHVERkM4XFx1REZDOVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjgtXFx1REZGRl18XFx1RERFNlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl18XFx1RERFN1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREU4XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjdcXHVEREZBLVxcdURERkZdfFxcdURERTlcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdfFxcdURERUFcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXXxcXHVEREVCXFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddfFxcdURERUNcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdfFxcdURERURcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV18XFx1RERFRVxcdUQ4M0NbXFx1RERFOC1cXHVEREVBXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XXxcXHVEREVGXFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XXxcXHVEREYwXFx1RDgzQ1tcXHVEREVBXFx1RERFQy1cXHVEREVFXFx1RERGMlxcdURERjNcXHVEREY1XFx1RERGN1xcdURERkNcXHVEREZFXFx1RERGRl18XFx1RERGMVxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXXxcXHVEREYyXFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXXxcXHVEREYzXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdfFxcdURERjRcXHVEODNDXFx1RERGMnxcXHVEREY1XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdfFxcdURERjZcXHVEODNDXFx1RERFNnxcXHVEREY3XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ118XFx1RERGOFxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl18XFx1RERGOVxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVEXFx1RERFRi1cXHVEREY0XFx1RERGN1xcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkZdfFxcdURERkFcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdfFxcdURERkJcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdfFxcdURERkNcXHVEODNDW1xcdURERUJcXHVEREY4XXxcXHVEREZEXFx1RDgzQ1xcdURERjB8XFx1RERGRVxcdUQ4M0NbXFx1RERFQVxcdURERjldfFxcdURERkZcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ118XFx1REY0NCg/OlxcdTIwMERcXHVEODNEXFx1REZFQik/fFxcdURGNEIoPzpcXHUyMDBEXFx1RDgzRFxcdURGRTkpP3xcXHVERkMzKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVERkYzXFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1MjZBN1xcdUZFMEY/fFxcdUQ4M0NcXHVERjA4KSk/fFxcdURGRjQoPzpcXHUyMDBEXFx1MjYyMFxcdUZFMEY/fFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjJcXHVEQjQwKD86XFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjd8XFx1REM3M1xcdURCNDBcXHVEQzYzXFx1REI0MFxcdURDNzR8XFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0YpPyl8XFx1RDgzRCg/OltcXHVEQzNGXFx1RENGRFxcdURENDlcXHVERDRBXFx1REQ2RlxcdURENzBcXHVERDczXFx1REQ3Ni1cXHVERDc5XFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREQTVcXHVEREE4XFx1RERCMVxcdUREQjJcXHVEREJDXFx1RERDMi1cXHVEREM0XFx1REREMS1cXHVEREQzXFx1REREQy1cXHVERERFXFx1RERFMVxcdURERTNcXHVEREU4XFx1RERFRlxcdURERjNcXHVEREZBXFx1REVDQlxcdURFQ0QtXFx1REVDRlxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUYwXFx1REVGM11cXHVGRTBGP3xbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3QVxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REM2RVxcdURDNzBcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjRcXHVERUI1XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDc0XFx1REQ5MF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/fFtcXHVEQzAwLVxcdURDMDdcXHVEQzA5LVxcdURDMTRcXHVEQzE2LVxcdURDMjVcXHVEQzI3LVxcdURDM0FcXHVEQzNDLVxcdURDM0VcXHVEQzQwXFx1REM0NFxcdURDNDVcXHVEQzUxLVxcdURDNjVcXHVEQzZBXFx1REM3OS1cXHVEQzdCXFx1REM3RC1cXHVEQzgwXFx1REM4NFxcdURDODgtXFx1REM4RVxcdURDOTBcXHVEQzkyLVxcdURDQTlcXHVEQ0FCLVxcdURDRkNcXHVEQ0ZGLVxcdUREM0RcXHVERDRCLVxcdURENEVcXHVERDUwLVxcdURENjdcXHVEREE0XFx1RERGQi1cXHVERTJEXFx1REUyRi1cXHVERTM0XFx1REUzNy1cXHVERTQxXFx1REU0M1xcdURFNDRcXHVERTQ4LVxcdURFNEFcXHVERTgwLVxcdURFQTJcXHVERUE0LVxcdURFQjNcXHVERUI3LVxcdURFQkZcXHVERUMxLVxcdURFQzVcXHVERUQwLVxcdURFRDJcXHVERUQ1LVxcdURFRDdcXHVERURDLVxcdURFREZcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQ1xcdURGRTAtXFx1REZFQlxcdURGRjBdfFxcdURDMDgoPzpcXHUyMDBEXFx1MkIxQik/fFxcdURDMTUoPzpcXHUyMDBEXFx1RDgzRVxcdUREQkEpP3xcXHVEQzI2KD86XFx1MjAwRCg/OlxcdTJCMUJ8XFx1RDgzRFxcdUREMjUpKT98XFx1REMzQig/OlxcdTIwMERcXHUyNzQ0XFx1RkUwRj8pP3xcXHVEQzQxXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURERThcXHVGRTBGPyk/fFxcdURDNjgoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OHxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNjkoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/W1xcdURDNjhcXHVEQzY5XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pP3xcXHVEQzY5XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2Rig/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERDc1KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERTJFKD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E4KT98XFx1REUzNSg/OlxcdTIwMERcXHVEODNEXFx1RENBQik/fFxcdURFMzYoPzpcXHUyMDBEXFx1RDgzQ1xcdURGMkJcXHVGRTBGPyk/fFxcdURFNDIoPzpcXHUyMDBEW1xcdTIxOTRcXHUyMTk1XVxcdUZFMEY/KT98XFx1REVCNig/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT8pfFxcdUQ4M0UoPzpbXFx1REQwQ1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDMwLVxcdUREMzRcXHVERDM2XFx1REQ3N1xcdUREQjVcXHVEREI2XFx1RERCQlxcdURERDJcXHVEREQzXFx1RERENVxcdURFQzMtXFx1REVDNVxcdURFRjBcXHVERUYyLVxcdURFRjhdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0RcXHVERENGXFx1RERENFxcdURERDYtXFx1RERERF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RERERVxcdUREREZdKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDBEXFx1REQwRVxcdUREMTAtXFx1REQxN1xcdUREMjAtXFx1REQyNVxcdUREMjctXFx1REQyRlxcdUREM0FcXHVERDNGLVxcdURENDVcXHVERDQ3LVxcdURENzZcXHVERDc4LVxcdUREQjRcXHVEREI3XFx1RERCQVxcdUREQkMtXFx1RERDQ1xcdURERDBcXHVEREUwLVxcdURERkZcXHVERTcwLVxcdURFN0NcXHVERTgwLVxcdURFODlcXHVERThGLVxcdURFQzJcXHVERUM2XFx1REVDRS1cXHVERURDXFx1REVERi1cXHVERUU5XXxcXHVERDNDKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGP3xcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xcXHVERENFKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEREQxXFx1MjAwRFxcdUQ4M0VcXHVEREQyKD86XFx1MjAwRFxcdUQ4M0VcXHVEREQyKT98XFx1REREMig/OlxcdTIwMERcXHVEODNFXFx1REREMik/KSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT8pKT98XFx1REVGMSg/OlxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKT98XFx1REZGQyg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pP3xcXHVERkZEKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSk/fFxcdURGRkUoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKT98XFx1REZGRig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSk/KSk/KS9nO1xufTtcbiIsICJpbXBvcnQgeyBnZXRGaWxlVGl0bGUsIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLyoqIFRoZSBPYnNpZGlhbiAnbGluaycsIHVzZWQgZm9yIHVuaXF1ZWx5IGRlc2NyaWJpbmcgYSBmaWxlLCBoZWFkZXIsIG9yIGJsb2NrLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgY2xhc3MgTGluayB7XG4gICAgLyoqIFRoZSBmaWxlIHBhdGggdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBwdWJsaWMgZGlzcGxheT86IHN0cmluZztcbiAgICAvKiogVGhlIGJsb2NrIElEIG9yIGhlYWRlciB0aGlzIGxpbmsgcG9pbnRzIHRvIHdpdGhpbiBhIGZpbGUsIGlmIHJlbGV2YW50LiAqL1xuICAgIHB1YmxpYyBzdWJwYXRoPzogc3RyaW5nO1xuICAgIC8qKiBJcyB0aGlzIGxpbmsgYW4gZW1iZWRkZWQgbGluayAob2YgZm9ybSAnIVtbaGVsbG9dXScpPyAqL1xuICAgIHB1YmxpYyBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgcHVibGljIHR5cGU6IFwiZmlsZVwiIHwgXCJoZWFkZXJcIiB8IFwiYmxvY2tcIjtcblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGZpbGUocGF0aDogc3RyaW5nLCBlbWJlZDogYm9vbGVhbiA9IGZhbHNlLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayh7XG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgZW1iZWQsXG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgc3VicGF0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBJbmZlciB0aGUgdHlwZSBvZiB0aGUgbGluayBmcm9tIHRoZSBmdWxsIGludGVybmFsIGxpbmsgcGF0aC4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGluZmVyKGxpbmtwYXRoOiBzdHJpbmcsIGVtYmVkOiBib29sZWFuID0gZmFsc2UsIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgaWYgKGxpbmtwYXRoLmluY2x1ZGVzKFwiI15cIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI15cIik7XG4gICAgICAgICAgICByZXR1cm4gTGluay5ibG9jayhzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIGlmIChsaW5rcGF0aC5pbmNsdWRlcyhcIiNcIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgIHJldHVybiBMaW5rLmhlYWRlcihzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBMaW5rLmZpbGUobGlua3BhdGgsIGVtYmVkLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGhlYWRlciBpbiB0aGF0IGZpbGUuICovXG4gICAgcHVibGljIHN0YXRpYyBoZWFkZXIocGF0aDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZywgZW1iZWQ/OiBib29sZWFuLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIC8vIEhlYWRlcnMgbmVlZCB0byBiZSBub3JtYWxpemVkIHRvIGFscGhhLW51bWVyaWMgJiB3aXRoIGV4dHJhIHNwYWNpbmcgcmVtb3ZlZC5cbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlciksXG4gICAgICAgICAgICB0eXBlOiBcImhlYWRlclwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGJsb2NrIGluIHRoYXQgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGJsb2NrKHBhdGg6IHN0cmluZywgYmxvY2tJZDogc3RyaW5nLCBlbWJlZD86IGJvb2xlYW4sIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBibG9ja0lkLFxuICAgICAgICAgICAgdHlwZTogXCJibG9ja1wiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBhIGxpbmsgZnJvbSBpdCdzIHJhdyBKU09OIHJlcHJlc2VudGF0aW9uLiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChvYmplY3Q6IEpzb25MaW5rKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIGJ5IHBhcnNpbmcgaXQncyBpbnRlcmlvciBwYXJ0IChpbnNpZGUgb2YgdGhlICdbW11dJykuICovXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUlubmVyKHJhd2xpbms6IHN0cmluZyk6IExpbmsge1xuICAgICAgICBsZXQgW2xpbmssIGRpc3BsYXldID0gc3BsaXRPblVuZXNjYXBlZFBpcGUocmF3bGluayk7XG4gICAgICAgIHJldHVybiBMaW5rLmluZmVyKGxpbmssIGZhbHNlLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGZpZWxkczogUGFydGlhbDxMaW5rPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGlzIGxpbmsgd2l0aCBhIG5ldyBwYXRoLiAqL1xuICAgIHB1YmxpYyB3aXRoUGF0aChwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHsgcGF0aCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIG5ldyBsaW5rIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBsb2NhdGlvbiBidXQgd2l0aCBhIG5ldyBkaXNwbGF5IHZhbHVlLiAqL1xuICAgIHB1YmxpYyB3aXRoRGlzcGxheShkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBuZXcgbGluayB3aGljaCBoYXMgdGhlIGdpdmVuIGVtYmVkZGVkIHN0YXR1cy4gKi9cbiAgICBwdWJsaWMgd2l0aEVtYmVkKGVtYmVkOiBib29sZWFuKTogTGluayB7XG4gICAgICAgIGlmICh0aGlzLmVtYmVkID09IGVtYmVkKSByZXR1cm4gdGhpcztcblxuICAgICAgICByZXR1cm4gbmV3IExpbmsoT2JqZWN0LmFzc2lnbih7fSwgdGhpcywgeyBlbWJlZCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgYSBmaWxlIGxpbmsgaW50byBhIGxpbmsgdG8gYSBzcGVjaWZpYyBoZWFkZXIuICovXG4gICAgcHVibGljIHdpdGhIZWFkZXIoaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWNiIGxvY2suICovXG4gICAgcHVibGljIHdpdGhCbG9jayhibG9jazogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHRoaXMucGF0aCwgYmxvY2ssIHRoaXMuZW1iZWQsIHRoaXMuZGlzcGxheSk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyBmb3IgbGluayBlcXVhbGl0eSAoaS5lLiwgdGhhdCB0aGUgbGlua3MgYXJlIHBvaW50aW5nIHRvIHRoZSBzYW1lIGV4YWN0IGxvY2F0aW9uKS4gKi9cbiAgICBwdWJsaWMgZXF1YWxzKG90aGVyOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChvdGhlciA9PSB1bmRlZmluZWQgfHwgb3RoZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBhdGggPT0gb3RoZXIucGF0aCAmJiB0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiB0aGlzLnN1YnBhdGggPT0gb3RoZXIuc3VicGF0aDtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gaXQncyBtYXJrZG93biByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2Rvd24oKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gYSByYXcgb2JqZWN0IHdoaWNoIGlzIHNlcmlhbGl6YXRpb24tZnJpZW5kbHkuICovXG4gICAgcHVibGljIHRvT2JqZWN0KCk6IEpzb25MaW5rIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHN1YnBhdGg6IHRoaXMuc3VicGF0aCxcbiAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgICAgICAgIGVtYmVkOiB0aGlzLmVtYmVkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqL1xuICAgIHB1YmxpYyB0b0ZpbGUoKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmZpbGUodGhpcy5wYXRoLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IHRoaXMgbGluayBpbnRvIGFuIGVtYmVkZGVkIGxpbmsuICovXG4gICAgcHVibGljIHRvRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhIG5vbi1lbWJlZGRlZCBsaW5rLiAqL1xuICAgIHB1YmxpYyBmcm9tRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIG1hcmtkb3duIHNvIGl0IGNhbiBiZSByZW5kZXJlZC4gKi9cbiAgICBwdWJsaWMgbWFya2Rvd24oKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICh0aGlzLmVtYmVkID8gXCIhXCIgOiBcIlwiKSArIFwiW1tcIiArIHRoaXMub2JzaWRpYW5MaW5rKCk7XG4gICAgICAgIHJlc3VsdCArPSBcInxcIjtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMuZGlzcGxheU9yRGVmYXVsdCgpO1xuICAgICAgICByZXN1bHQgKz0gXCJdXVwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGRpc3BsYXkgZm9yIHRoaXMgbGluayBpZiBwcmVzZW50LCBvciByZXR1cm4gYSBzaW1wbGUgZGVmYXVsdCBkaXNwbGF5LiAqL1xuICAgIHB1YmxpYyBkaXNwbGF5T3JEZWZhdWx0KCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBcImhlYWRlclwiIHx8IHRoaXMudHlwZSA9PSBcImJsb2NrXCIpIHJlc3VsdCArPSBcIiA+IFwiICsgdGhpcy5zdWJwYXRoO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGxpbmsgdG8gc29tZXRoaW5nIHRoYXQgT2JzaWRpYW4gY2FuIG9wZW4gLyB1bmRlcnN0YW5kLiAqL1xuICAgIHB1YmxpYyBvYnNpZGlhbkxpbmsoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMucGF0aC5yZXBsYWNlKFwifFwiLCBcIlxcXFx8XCIpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09IFwiaGVhZGVyXCIpIHJldHVybiBlc2NhcGVkICsgXCIjXCIgKyB0aGlzLnN1YnBhdGg/LnJlcGxhY2UoXCJ8XCIsIFwiXFxcXHxcIik7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJibG9ja1wiKSByZXR1cm4gZXNjYXBlZCArIFwiI15cIiArIHRoaXMuc3VicGF0aD8ucmVwbGFjZShcInxcIiwgXCJcXFxcfFwiKTtcbiAgICAgICAgZWxzZSByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIHN0cmlwcGVkIG5hbWUgb2YgdGhlIGZpbGUgdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgIH1cbn1cblxuLyoqIFNlcmlhbGl6ZWQgZm9ybSBvZiBhIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbmsge1xuICAgIC8qKiBUaGUgZmlsZSBwYXRoIHRoaXMgbGluayBwb2ludHMgdG8uICovXG4gICAgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBkaXNwbGF5Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgYmxvY2sgSUQgb3IgaGVhZGVyIHRoaXMgbGluayBwb2ludHMgdG8gd2l0aGluIGEgZmlsZSwgaWYgcmVsZXZhbnQuICovXG4gICAgc3VicGF0aD86IHN0cmluZztcbiAgICAvKiogSXMgdGhpcyBsaW5rIGFuIGVtYmVkZGVkIGxpbmsgKG9mIGZvcm0gJyFbW2hlbGxvXV0nKT8gKi9cbiAgICBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgdHlwZTogXCJmaWxlXCIgfCBcImhlYWRlclwiIHwgXCJibG9ja1wiO1xufVxuXG4vKiogU3BsaXQgb24gdW5lc2NhcGVkIHBpcGVzIGluIGFuIGlubmVyIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE9uVW5lc2NhcGVkUGlwZShsaW5rOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdIHtcbiAgICBsZXQgcGlwZSA9IC0xO1xuICAgIHdoaWxlICgocGlwZSA9IGxpbmsuaW5kZXhPZihcInxcIiwgcGlwZSArIDEpKSA+PSAwKSB7XG4gICAgICAgIGlmIChwaXBlID4gMCAmJiBsaW5rW3BpcGUgLSAxXSA9PSBcIlxcXFxcIikgY29udGludWU7XG4gICAgICAgIHJldHVybiBbbGluay5zdWJzdHJpbmcoMCwgcGlwZSkucmVwbGFjZSgvXFxcXFxcfC9nLCBcInxcIiksIGxpbmsuc3Vic3RyaW5nKHBpcGUgKyAxKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsaW5rLnJlcGxhY2UoL1xcXFxcXHwvZywgXCJ8XCIpLCB1bmRlZmluZWRdO1xufVxuIiwgImNvbnN0IEFMSUFTID0gU3ltYm9sLmZvcigneWFtbC5hbGlhcycpO1xuY29uc3QgRE9DID0gU3ltYm9sLmZvcigneWFtbC5kb2N1bWVudCcpO1xuY29uc3QgTUFQID0gU3ltYm9sLmZvcigneWFtbC5tYXAnKTtcbmNvbnN0IFBBSVIgPSBTeW1ib2wuZm9yKCd5YW1sLnBhaXInKTtcbmNvbnN0IFNDQUxBUiA9IFN5bWJvbC5mb3IoJ3lhbWwuc2NhbGFyJyk7XG5jb25zdCBTRVEgPSBTeW1ib2wuZm9yKCd5YW1sLnNlcScpO1xuY29uc3QgTk9ERV9UWVBFID0gU3ltYm9sLmZvcigneWFtbC5ub2RlLnR5cGUnKTtcbmNvbnN0IGlzQWxpYXMgPSAobm9kZSkgPT4gISFub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlW05PREVfVFlQRV0gPT09IEFMSUFTO1xuY29uc3QgaXNEb2N1bWVudCA9IChub2RlKSA9PiAhIW5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGVbTk9ERV9UWVBFXSA9PT0gRE9DO1xuY29uc3QgaXNNYXAgPSAobm9kZSkgPT4gISFub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlW05PREVfVFlQRV0gPT09IE1BUDtcbmNvbnN0IGlzUGFpciA9IChub2RlKSA9PiAhIW5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGVbTk9ERV9UWVBFXSA9PT0gUEFJUjtcbmNvbnN0IGlzU2NhbGFyID0gKG5vZGUpID0+ICEhbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgbm9kZVtOT0RFX1RZUEVdID09PSBTQ0FMQVI7XG5jb25zdCBpc1NlcSA9IChub2RlKSA9PiAhIW5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGVbTk9ERV9UWVBFXSA9PT0gU0VRO1xuZnVuY3Rpb24gaXNDb2xsZWN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICAgIHN3aXRjaCAobm9kZVtOT0RFX1RZUEVdKSB7XG4gICAgICAgICAgICBjYXNlIE1BUDpcbiAgICAgICAgICAgIGNhc2UgU0VROlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNOb2RlKG5vZGUpIHtcbiAgICBpZiAobm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICAgIHN3aXRjaCAobm9kZVtOT0RFX1RZUEVdKSB7XG4gICAgICAgICAgICBjYXNlIEFMSUFTOlxuICAgICAgICAgICAgY2FzZSBNQVA6XG4gICAgICAgICAgICBjYXNlIFNDQUxBUjpcbiAgICAgICAgICAgIGNhc2UgU0VROlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuY29uc3QgaGFzQW5jaG9yID0gKG5vZGUpID0+IChpc1NjYWxhcihub2RlKSB8fCBpc0NvbGxlY3Rpb24obm9kZSkpICYmICEhbm9kZS5hbmNob3I7XG5cbmV4cG9ydCB7IEFMSUFTLCBET0MsIE1BUCwgTk9ERV9UWVBFLCBQQUlSLCBTQ0FMQVIsIFNFUSwgaGFzQW5jaG9yLCBpc0FsaWFzLCBpc0NvbGxlY3Rpb24sIGlzRG9jdW1lbnQsIGlzTWFwLCBpc05vZGUsIGlzUGFpciwgaXNTY2FsYXIsIGlzU2VxIH07XG4iLCAiaW1wb3J0IHsgaXNEb2N1bWVudCwgaXNOb2RlLCBpc1BhaXIsIGlzQ29sbGVjdGlvbiwgaXNNYXAsIGlzU2VxLCBpc1NjYWxhciwgaXNBbGlhcyB9IGZyb20gJy4vbm9kZXMvaWRlbnRpdHkuanMnO1xuXG5jb25zdCBCUkVBSyA9IFN5bWJvbCgnYnJlYWsgdmlzaXQnKTtcbmNvbnN0IFNLSVAgPSBTeW1ib2woJ3NraXAgY2hpbGRyZW4nKTtcbmNvbnN0IFJFTU9WRSA9IFN5bWJvbCgncmVtb3ZlIG5vZGUnKTtcbi8qKlxuICogQXBwbHkgYSB2aXNpdG9yIHRvIGFuIEFTVCBub2RlIG9yIGRvY3VtZW50LlxuICpcbiAqIFdhbGtzIHRocm91Z2ggdGhlIHRyZWUgKGRlcHRoLWZpcnN0KSBzdGFydGluZyBmcm9tIGBub2RlYCwgY2FsbGluZyBhXG4gKiBgdmlzaXRvcmAgZnVuY3Rpb24gd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKiAgIC0gYGtleWA6IEZvciBzZXF1ZW5jZSB2YWx1ZXMgYW5kIG1hcCBgUGFpcmAsIHRoZSBub2RlJ3MgaW5kZXggaW4gdGhlXG4gKiAgICAgY29sbGVjdGlvbi4gV2l0aGluIGEgYFBhaXJgLCBgJ2tleSdgIG9yIGAndmFsdWUnYCwgY29ycmVzcG9uZGluZ2x5LlxuICogICAgIGBudWxsYCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAqICAgLSBgbm9kZWA6IFRoZSBjdXJyZW50IG5vZGUuXG4gKiAgIC0gYHBhdGhgOiBUaGUgYW5jZXN0cnkgb2YgdGhlIGN1cnJlbnQgbm9kZS5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB2aXNpdG9yIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHRyYXZlcnNhbDpcbiAqICAgLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IERvIG5vdGhpbmcgYW5kIGNvbnRpbnVlXG4gKiAgIC0gYHZpc2l0LlNLSVBgOiBEbyBub3QgdmlzaXQgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSwgY29udGludWUgd2l0aCBuZXh0XG4gKiAgICAgc2libGluZ1xuICogICAtIGB2aXNpdC5CUkVBS2A6IFRlcm1pbmF0ZSB0cmF2ZXJzYWwgY29tcGxldGVseVxuICogICAtIGB2aXNpdC5SRU1PVkVgOiBSZW1vdmUgdGhlIGN1cnJlbnQgbm9kZSwgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBuZXh0IG9uZVxuICogICAtIGBOb2RlYDogUmVwbGFjZSB0aGUgY3VycmVudCBub2RlLCB0aGVuIGNvbnRpbnVlIGJ5IHZpc2l0aW5nIGl0XG4gKiAgIC0gYG51bWJlcmA6IFdoaWxlIGl0ZXJhdGluZyB0aGUgaXRlbXMgb2YgYSBzZXF1ZW5jZSBvciBtYXAsIHNldCB0aGUgaW5kZXhcbiAqICAgICBvZiB0aGUgbmV4dCBzdGVwLiBUaGlzIGlzIHVzZWZ1bCBlc3BlY2lhbGx5IGlmIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudFxuICogICAgIG5vZGUgaGFzIGNoYW5nZWQuXG4gKlxuICogSWYgYHZpc2l0b3JgIGlzIGEgc2luZ2xlIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFsbCB2YWx1ZXNcbiAqIGVuY291bnRlcmVkIGluIHRoZSB0cmVlLCBpbmNsdWRpbmcgZS5nLiBgbnVsbGAgdmFsdWVzLiBBbHRlcm5hdGl2ZWx5LFxuICogc2VwYXJhdGUgdmlzaXRvciBmdW5jdGlvbnMgbWF5IGJlIGRlZmluZWQgZm9yIGVhY2ggYE1hcGAsIGBQYWlyYCwgYFNlcWAsXG4gKiBgQWxpYXNgIGFuZCBgU2NhbGFyYCBub2RlLiBUbyBkZWZpbmUgdGhlIHNhbWUgdmlzaXRvciBmdW5jdGlvbiBmb3IgbW9yZSB0aGFuXG4gKiBvbmUgbm9kZSB0eXBlLCB1c2UgdGhlIGBDb2xsZWN0aW9uYCAobWFwIGFuZCBzZXEpLCBgVmFsdWVgIChtYXAsIHNlcSAmIHNjYWxhcilcbiAqIGFuZCBgTm9kZWAgKGFsaWFzLCBtYXAsIHNlcSAmIHNjYWxhcikgdGFyZ2V0cy4gT2YgYWxsIHRoZXNlLCBvbmx5IHRoZSBtb3N0XG4gKiBzcGVjaWZpYyBkZWZpbmVkIG9uZSB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggbm9kZS5cbiAqL1xuZnVuY3Rpb24gdmlzaXQobm9kZSwgdmlzaXRvcikge1xuICAgIGNvbnN0IHZpc2l0b3JfID0gaW5pdFZpc2l0b3IodmlzaXRvcik7XG4gICAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2QgPSB2aXNpdF8obnVsbCwgbm9kZS5jb250ZW50cywgdmlzaXRvcl8sIE9iamVjdC5mcmVlemUoW25vZGVdKSk7XG4gICAgICAgIGlmIChjZCA9PT0gUkVNT1ZFKVxuICAgICAgICAgICAgbm9kZS5jb250ZW50cyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdmlzaXRfKG51bGwsIG5vZGUsIHZpc2l0b3JfLCBPYmplY3QuZnJlZXplKFtdKSk7XG59XG4vLyBXaXRob3V0IHRoZSBgYXMgc3ltYm9sYCBjYXN0cywgVFMgZGVjbGFyZXMgdGhlc2UgaW4gdGhlIGB2aXNpdGBcbi8vIG5hbWVzcGFjZSB1c2luZyBgdmFyYCwgYnV0IHRoZW4gY29tcGxhaW5zIGFib3V0IHRoYXQgYmVjYXVzZVxuLy8gYHVuaXF1ZSBzeW1ib2xgIG11c3QgYmUgYGNvbnN0YC5cbi8qKiBUZXJtaW5hdGUgdmlzaXQgdHJhdmVyc2FsIGNvbXBsZXRlbHkgKi9cbnZpc2l0LkJSRUFLID0gQlJFQUs7XG4vKiogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBub2RlICovXG52aXNpdC5TS0lQID0gU0tJUDtcbi8qKiBSZW1vdmUgdGhlIGN1cnJlbnQgbm9kZSAqL1xudmlzaXQuUkVNT1ZFID0gUkVNT1ZFO1xuZnVuY3Rpb24gdmlzaXRfKGtleSwgbm9kZSwgdmlzaXRvciwgcGF0aCkge1xuICAgIGNvbnN0IGN0cmwgPSBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpO1xuICAgIGlmIChpc05vZGUoY3RybCkgfHwgaXNQYWlyKGN0cmwpKSB7XG4gICAgICAgIHJlcGxhY2VOb2RlKGtleSwgcGF0aCwgY3RybCk7XG4gICAgICAgIHJldHVybiB2aXNpdF8oa2V5LCBjdHJsLCB2aXNpdG9yLCBwYXRoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjdHJsICE9PSAnc3ltYm9sJykge1xuICAgICAgICBpZiAoaXNDb2xsZWN0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICBwYXRoID0gT2JqZWN0LmZyZWV6ZShwYXRoLmNvbmNhdChub2RlKSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaSA9IHZpc2l0XyhpLCBub2RlLml0ZW1zW2ldLCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNpID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgaSA9IGNpIC0gMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCUkVBSztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuaXRlbXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICBpIC09IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUGFpcihub2RlKSkge1xuICAgICAgICAgICAgcGF0aCA9IE9iamVjdC5mcmVlemUocGF0aC5jb25jYXQobm9kZSkpO1xuICAgICAgICAgICAgY29uc3QgY2sgPSB2aXNpdF8oJ2tleScsIG5vZGUua2V5LCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjayA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2sgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLmtleSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBjdiA9IHZpc2l0XygndmFsdWUnLCBub2RlLnZhbHVlLCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjdiA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY3YgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3RybDtcbn1cbi8qKlxuICogQXBwbHkgYW4gYXN5bmMgdmlzaXRvciB0byBhbiBBU1Qgbm9kZSBvciBkb2N1bWVudC5cbiAqXG4gKiBXYWxrcyB0aHJvdWdoIHRoZSB0cmVlIChkZXB0aC1maXJzdCkgc3RhcnRpbmcgZnJvbSBgbm9kZWAsIGNhbGxpbmcgYVxuICogYHZpc2l0b3JgIGZ1bmN0aW9uIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogICAtIGBrZXlgOiBGb3Igc2VxdWVuY2UgdmFsdWVzIGFuZCBtYXAgYFBhaXJgLCB0aGUgbm9kZSdzIGluZGV4IGluIHRoZVxuICogICAgIGNvbGxlY3Rpb24uIFdpdGhpbiBhIGBQYWlyYCwgYCdrZXknYCBvciBgJ3ZhbHVlJ2AsIGNvcnJlc3BvbmRpbmdseS5cbiAqICAgICBgbnVsbGAgZm9yIHRoZSByb290IG5vZGUuXG4gKiAgIC0gYG5vZGVgOiBUaGUgY3VycmVudCBub2RlLlxuICogICAtIGBwYXRoYDogVGhlIGFuY2VzdHJ5IG9mIHRoZSBjdXJyZW50IG5vZGUuXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdmlzaXRvciBtYXkgYmUgdXNlZCB0byBjb250cm9sIHRoZSB0cmF2ZXJzYWw6XG4gKiAgIC0gYFByb21pc2VgOiBNdXN0IHJlc29sdmUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzXG4gKiAgIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiBEbyBub3RoaW5nIGFuZCBjb250aW51ZVxuICogICAtIGB2aXNpdC5TS0lQYDogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsIGNvbnRpbnVlIHdpdGggbmV4dFxuICogICAgIHNpYmxpbmdcbiAqICAgLSBgdmlzaXQuQlJFQUtgOiBUZXJtaW5hdGUgdHJhdmVyc2FsIGNvbXBsZXRlbHlcbiAqICAgLSBgdmlzaXQuUkVNT1ZFYDogUmVtb3ZlIHRoZSBjdXJyZW50IG5vZGUsIHRoZW4gY29udGludWUgd2l0aCB0aGUgbmV4dCBvbmVcbiAqICAgLSBgTm9kZWA6IFJlcGxhY2UgdGhlIGN1cnJlbnQgbm9kZSwgdGhlbiBjb250aW51ZSBieSB2aXNpdGluZyBpdFxuICogICAtIGBudW1iZXJgOiBXaGlsZSBpdGVyYXRpbmcgdGhlIGl0ZW1zIG9mIGEgc2VxdWVuY2Ugb3IgbWFwLCBzZXQgdGhlIGluZGV4XG4gKiAgICAgb2YgdGhlIG5leHQgc3RlcC4gVGhpcyBpcyB1c2VmdWwgZXNwZWNpYWxseSBpZiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnRcbiAqICAgICBub2RlIGhhcyBjaGFuZ2VkLlxuICpcbiAqIElmIGB2aXNpdG9yYCBpcyBhIHNpbmdsZSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbGwgdmFsdWVzXG4gKiBlbmNvdW50ZXJlZCBpbiB0aGUgdHJlZSwgaW5jbHVkaW5nIGUuZy4gYG51bGxgIHZhbHVlcy4gQWx0ZXJuYXRpdmVseSxcbiAqIHNlcGFyYXRlIHZpc2l0b3IgZnVuY3Rpb25zIG1heSBiZSBkZWZpbmVkIGZvciBlYWNoIGBNYXBgLCBgUGFpcmAsIGBTZXFgLFxuICogYEFsaWFzYCBhbmQgYFNjYWxhcmAgbm9kZS4gVG8gZGVmaW5lIHRoZSBzYW1lIHZpc2l0b3IgZnVuY3Rpb24gZm9yIG1vcmUgdGhhblxuICogb25lIG5vZGUgdHlwZSwgdXNlIHRoZSBgQ29sbGVjdGlvbmAgKG1hcCBhbmQgc2VxKSwgYFZhbHVlYCAobWFwLCBzZXEgJiBzY2FsYXIpXG4gKiBhbmQgYE5vZGVgIChhbGlhcywgbWFwLCBzZXEgJiBzY2FsYXIpIHRhcmdldHMuIE9mIGFsbCB0aGVzZSwgb25seSB0aGUgbW9zdFxuICogc3BlY2lmaWMgZGVmaW5lZCBvbmUgd2lsbCBiZSB1c2VkIGZvciBlYWNoIG5vZGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZpc2l0QXN5bmMobm9kZSwgdmlzaXRvcikge1xuICAgIGNvbnN0IHZpc2l0b3JfID0gaW5pdFZpc2l0b3IodmlzaXRvcik7XG4gICAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2QgPSBhd2FpdCB2aXNpdEFzeW5jXyhudWxsLCBub2RlLmNvbnRlbnRzLCB2aXNpdG9yXywgT2JqZWN0LmZyZWV6ZShbbm9kZV0pKTtcbiAgICAgICAgaWYgKGNkID09PSBSRU1PVkUpXG4gICAgICAgICAgICBub2RlLmNvbnRlbnRzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICBhd2FpdCB2aXNpdEFzeW5jXyhudWxsLCBub2RlLCB2aXNpdG9yXywgT2JqZWN0LmZyZWV6ZShbXSkpO1xufVxuLy8gV2l0aG91dCB0aGUgYGFzIHN5bWJvbGAgY2FzdHMsIFRTIGRlY2xhcmVzIHRoZXNlIGluIHRoZSBgdmlzaXRgXG4vLyBuYW1lc3BhY2UgdXNpbmcgYHZhcmAsIGJ1dCB0aGVuIGNvbXBsYWlucyBhYm91dCB0aGF0IGJlY2F1c2Vcbi8vIGB1bmlxdWUgc3ltYm9sYCBtdXN0IGJlIGBjb25zdGAuXG4vKiogVGVybWluYXRlIHZpc2l0IHRyYXZlcnNhbCBjb21wbGV0ZWx5ICovXG52aXNpdEFzeW5jLkJSRUFLID0gQlJFQUs7XG4vKiogRG8gbm90IHZpc2l0IHRoZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBub2RlICovXG52aXNpdEFzeW5jLlNLSVAgPSBTS0lQO1xuLyoqIFJlbW92ZSB0aGUgY3VycmVudCBub2RlICovXG52aXNpdEFzeW5jLlJFTU9WRSA9IFJFTU9WRTtcbmFzeW5jIGZ1bmN0aW9uIHZpc2l0QXN5bmNfKGtleSwgbm9kZSwgdmlzaXRvciwgcGF0aCkge1xuICAgIGNvbnN0IGN0cmwgPSBhd2FpdCBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpO1xuICAgIGlmIChpc05vZGUoY3RybCkgfHwgaXNQYWlyKGN0cmwpKSB7XG4gICAgICAgIHJlcGxhY2VOb2RlKGtleSwgcGF0aCwgY3RybCk7XG4gICAgICAgIHJldHVybiB2aXNpdEFzeW5jXyhrZXksIGN0cmwsIHZpc2l0b3IsIHBhdGgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGN0cmwgIT09ICdzeW1ib2wnKSB7XG4gICAgICAgIGlmIChpc0NvbGxlY3Rpb24obm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGggPSBPYmplY3QuZnJlZXplKHBhdGguY29uY2F0KG5vZGUpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5pdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpID0gYXdhaXQgdmlzaXRBc3luY18oaSwgbm9kZS5pdGVtc1tpXSwgdmlzaXRvciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgICAgIGkgPSBjaSAtIDE7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2kgPT09IEJSRUFLKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQlJFQUs7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2kgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1BhaXIobm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGggPSBPYmplY3QuZnJlZXplKHBhdGguY29uY2F0KG5vZGUpKTtcbiAgICAgICAgICAgIGNvbnN0IGNrID0gYXdhaXQgdmlzaXRBc3luY18oJ2tleScsIG5vZGUua2V5LCB2aXNpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGlmIChjayA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2sgPT09IFJFTU9WRSlcbiAgICAgICAgICAgICAgICBub2RlLmtleSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBjdiA9IGF3YWl0IHZpc2l0QXN5bmNfKCd2YWx1ZScsIG5vZGUudmFsdWUsIHZpc2l0b3IsIHBhdGgpO1xuICAgICAgICAgICAgaWYgKGN2ID09PSBCUkVBSylcbiAgICAgICAgICAgICAgICByZXR1cm4gQlJFQUs7XG4gICAgICAgICAgICBlbHNlIGlmIChjdiA9PT0gUkVNT1ZFKVxuICAgICAgICAgICAgICAgIG5vZGUudmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHJsO1xufVxuZnVuY3Rpb24gaW5pdFZpc2l0b3IodmlzaXRvcikge1xuICAgIGlmICh0eXBlb2YgdmlzaXRvciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgKHZpc2l0b3IuQ29sbGVjdGlvbiB8fCB2aXNpdG9yLk5vZGUgfHwgdmlzaXRvci5WYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgQWxpYXM6IHZpc2l0b3IuTm9kZSxcbiAgICAgICAgICAgIE1hcDogdmlzaXRvci5Ob2RlLFxuICAgICAgICAgICAgU2NhbGFyOiB2aXNpdG9yLk5vZGUsXG4gICAgICAgICAgICBTZXE6IHZpc2l0b3IuTm9kZVxuICAgICAgICB9LCB2aXNpdG9yLlZhbHVlICYmIHtcbiAgICAgICAgICAgIE1hcDogdmlzaXRvci5WYWx1ZSxcbiAgICAgICAgICAgIFNjYWxhcjogdmlzaXRvci5WYWx1ZSxcbiAgICAgICAgICAgIFNlcTogdmlzaXRvci5WYWx1ZVxuICAgICAgICB9LCB2aXNpdG9yLkNvbGxlY3Rpb24gJiYge1xuICAgICAgICAgICAgTWFwOiB2aXNpdG9yLkNvbGxlY3Rpb24sXG4gICAgICAgICAgICBTZXE6IHZpc2l0b3IuQ29sbGVjdGlvblxuICAgICAgICB9LCB2aXNpdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2l0b3I7XG59XG5mdW5jdGlvbiBjYWxsVmlzaXRvcihrZXksIG5vZGUsIHZpc2l0b3IsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIHZpc2l0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB2aXNpdG9yKGtleSwgbm9kZSwgcGF0aCk7XG4gICAgaWYgKGlzTWFwKG5vZGUpKVxuICAgICAgICByZXR1cm4gdmlzaXRvci5NYXA/LihrZXksIG5vZGUsIHBhdGgpO1xuICAgIGlmIChpc1NlcShub2RlKSlcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IuU2VxPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICBpZiAoaXNQYWlyKG5vZGUpKVxuICAgICAgICByZXR1cm4gdmlzaXRvci5QYWlyPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICBpZiAoaXNTY2FsYXIobm9kZSkpXG4gICAgICAgIHJldHVybiB2aXNpdG9yLlNjYWxhcj8uKGtleSwgbm9kZSwgcGF0aCk7XG4gICAgaWYgKGlzQWxpYXMobm9kZSkpXG4gICAgICAgIHJldHVybiB2aXNpdG9yLkFsaWFzPy4oa2V5LCBub2RlLCBwYXRoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVwbGFjZU5vZGUoa2V5LCBwYXRoLCBub2RlKSB7XG4gICAgY29uc3QgcGFyZW50ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIGlmIChpc0NvbGxlY3Rpb24ocGFyZW50KSkge1xuICAgICAgICBwYXJlbnQuaXRlbXNba2V5XSA9IG5vZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUGFpcihwYXJlbnQpKSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdrZXknKVxuICAgICAgICAgICAgcGFyZW50LmtleSA9IG5vZGU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhcmVudC52YWx1ZSA9IG5vZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRG9jdW1lbnQocGFyZW50KSkge1xuICAgICAgICBwYXJlbnQuY29udGVudHMgPSBub2RlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHQgPSBpc0FsaWFzKHBhcmVudCkgPyAnYWxpYXMnIDogJ3NjYWxhcic7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlcGxhY2Ugbm9kZSB3aXRoICR7cHR9IHBhcmVudGApO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgdmlzaXQsIHZpc2l0QXN5bmMgfTtcbiIsICJpbXBvcnQgeyBpc05vZGUgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyB2aXNpdCB9IGZyb20gJy4uL3Zpc2l0LmpzJztcblxuY29uc3QgZXNjYXBlQ2hhcnMgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICAnLCc6ICclMkMnLFxuICAgICdbJzogJyU1QicsXG4gICAgJ10nOiAnJTVEJyxcbiAgICAneyc6ICclN0InLFxuICAgICd9JzogJyU3RCdcbn07XG5jb25zdCBlc2NhcGVUYWdOYW1lID0gKHRuKSA9PiB0bi5yZXBsYWNlKC9bISxbXFxde31dL2csIGNoID0+IGVzY2FwZUNoYXJzW2NoXSk7XG5jbGFzcyBEaXJlY3RpdmVzIHtcbiAgICBjb25zdHJ1Y3Rvcih5YW1sLCB0YWdzKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGlyZWN0aXZlcy1lbmQvZG9jLXN0YXJ0IG1hcmtlciBgLS0tYC4gSWYgYG51bGxgLCBhIG1hcmtlciBtYXkgc3RpbGwgYmVcbiAgICAgICAgICogaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50J3Mgc3RyaW5naWZpZWQgcmVwcmVzZW50YXRpb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRvY1N0YXJ0ID0gbnVsbDtcbiAgICAgICAgLyoqIFRoZSBkb2MtZW5kIG1hcmtlciBgLi4uYC4gICovXG4gICAgICAgIHRoaXMuZG9jRW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMueWFtbCA9IE9iamVjdC5hc3NpZ24oe30sIERpcmVjdGl2ZXMuZGVmYXVsdFlhbWwsIHlhbWwpO1xuICAgICAgICB0aGlzLnRhZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBEaXJlY3RpdmVzLmRlZmF1bHRUYWdzLCB0YWdzKTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBuZXcgRGlyZWN0aXZlcyh0aGlzLnlhbWwsIHRoaXMudGFncyk7XG4gICAgICAgIGNvcHkuZG9jU3RhcnQgPSB0aGlzLmRvY1N0YXJ0O1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRHVyaW5nIHBhcnNpbmcsIGdldCBhIERpcmVjdGl2ZXMgaW5zdGFuY2UgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50IGFuZFxuICAgICAqIHVwZGF0ZSB0aGUgc3RyZWFtIHN0YXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCB2ZXJzaW9uJ3Mgc3BlYy5cbiAgICAgKi9cbiAgICBhdERvY3VtZW50KCkge1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgRGlyZWN0aXZlcyh0aGlzLnlhbWwsIHRoaXMudGFncyk7XG4gICAgICAgIHN3aXRjaCAodGhpcy55YW1sLnZlcnNpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJzEuMSc6XG4gICAgICAgICAgICAgICAgdGhpcy5hdE5leHREb2N1bWVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcxLjInOlxuICAgICAgICAgICAgICAgIHRoaXMuYXROZXh0RG9jdW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnlhbWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0OiBEaXJlY3RpdmVzLmRlZmF1bHRZYW1sLmV4cGxpY2l0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMS4yJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy50YWdzID0gT2JqZWN0LmFzc2lnbih7fSwgRGlyZWN0aXZlcy5kZWZhdWx0VGFncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIG9uRXJyb3IgLSBNYXkgYmUgY2FsbGVkIGV2ZW4gaWYgdGhlIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBvbiBzdWNjZXNzXG4gICAgICovXG4gICAgYWRkKGxpbmUsIG9uRXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuYXROZXh0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMueWFtbCA9IHsgZXhwbGljaXQ6IERpcmVjdGl2ZXMuZGVmYXVsdFlhbWwuZXhwbGljaXQsIHZlcnNpb246ICcxLjEnIH07XG4gICAgICAgICAgICB0aGlzLnRhZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBEaXJlY3RpdmVzLmRlZmF1bHRUYWdzKTtcbiAgICAgICAgICAgIHRoaXMuYXROZXh0RG9jdW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9bIFxcdF0rLyk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJyVUQUcnOiB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKDAsICclVEFHIGRpcmVjdGl2ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IHR3byBwYXJ0cycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoIDwgMilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgW2hhbmRsZSwgcHJlZml4XSA9IHBhcnRzO1xuICAgICAgICAgICAgICAgIHRoaXMudGFnc1toYW5kbGVdID0gcHJlZml4O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnJVlBTUwnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy55YW1sLmV4cGxpY2l0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoMCwgJyVZQU1MIGRpcmVjdGl2ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSBwYXJ0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgW3ZlcnNpb25dID0gcGFydHM7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPT09ICcxLjEnIHx8IHZlcnNpb24gPT09ICcxLjInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWFtbC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gL15cXGQrXFwuXFxkKyQvLnRlc3QodmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoNiwgYFVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiAke3ZlcnNpb259YCwgaXNWYWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG9uRXJyb3IoMCwgYFVua25vd24gZGlyZWN0aXZlICR7bmFtZX1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYSB0YWcsIG1hdGNoaW5nIGhhbmRsZXMgdG8gdGhvc2UgZGVmaW5lZCBpbiAlVEFHIGRpcmVjdGl2ZXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBSZXNvbHZlZCB0YWcsIHdoaWNoIG1heSBhbHNvIGJlIHRoZSBub24tc3BlY2lmaWMgdGFnIGAnISdgIG9yIGFcbiAgICAgKiAgIGAnIWxvY2FsJ2AgdGFnLCBvciBgbnVsbGAgaWYgdW5yZXNvbHZhYmxlLlxuICAgICAqL1xuICAgIHRhZ05hbWUoc291cmNlLCBvbkVycm9yKSB7XG4gICAgICAgIGlmIChzb3VyY2UgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiAnISc7IC8vIG5vbi1zcGVjaWZpYyB0YWdcbiAgICAgICAgaWYgKHNvdXJjZVswXSAhPT0gJyEnKSB7XG4gICAgICAgICAgICBvbkVycm9yKGBOb3QgYSB2YWxpZCB0YWc6ICR7c291cmNlfWApO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVsxXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiYXRpbSA9IHNvdXJjZS5zbGljZSgyLCAtMSk7XG4gICAgICAgICAgICBpZiAodmVyYmF0aW0gPT09ICchJyB8fCB2ZXJiYXRpbSA9PT0gJyEhJykge1xuICAgICAgICAgICAgICAgIG9uRXJyb3IoYFZlcmJhdGltIHRhZ3MgYXJlbid0IHJlc29sdmVkLCBzbyAke3NvdXJjZX0gaXMgaW52YWxpZC5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzb3VyY2Vbc291cmNlLmxlbmd0aCAtIDFdICE9PSAnPicpXG4gICAgICAgICAgICAgICAgb25FcnJvcignVmVyYmF0aW0gdGFncyBtdXN0IGVuZCB3aXRoIGEgPicpO1xuICAgICAgICAgICAgcmV0dXJuIHZlcmJhdGltO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFssIGhhbmRsZSwgc3VmZml4XSA9IHNvdXJjZS5tYXRjaCgvXiguKiEpKFteIV0qKSQvcyk7XG4gICAgICAgIGlmICghc3VmZml4KVxuICAgICAgICAgICAgb25FcnJvcihgVGhlICR7c291cmNlfSB0YWcgaGFzIG5vIHN1ZmZpeGApO1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLnRhZ3NbaGFuZGxlXTtcbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgZGVjb2RlVVJJQ29tcG9uZW50KHN1ZmZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvbkVycm9yKFN0cmluZyhlcnJvcikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGUgPT09ICchJylcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7IC8vIGxvY2FsIHRhZ1xuICAgICAgICBvbkVycm9yKGBDb3VsZCBub3QgcmVzb2x2ZSB0YWc6ICR7c291cmNlfWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBmdWxseSByZXNvbHZlZCB0YWcsIHJldHVybnMgaXRzIHByaW50YWJsZSBzdHJpbmcgZm9ybSxcbiAgICAgKiB0YWtpbmcgaW50byBhY2NvdW50IGN1cnJlbnQgdGFnIHByZWZpeGVzIGFuZCBkZWZhdWx0cy5cbiAgICAgKi9cbiAgICB0YWdTdHJpbmcodGFnKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2hhbmRsZSwgcHJlZml4XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnRhZ3MpKSB7XG4gICAgICAgICAgICBpZiAodGFnLnN0YXJ0c1dpdGgocHJlZml4KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlICsgZXNjYXBlVGFnTmFtZSh0YWcuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnWzBdID09PSAnIScgPyB0YWcgOiBgITwke3RhZ30+YDtcbiAgICB9XG4gICAgdG9TdHJpbmcoZG9jKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy55YW1sLmV4cGxpY2l0XG4gICAgICAgICAgICA/IFtgJVlBTUwgJHt0aGlzLnlhbWwudmVyc2lvbiB8fCAnMS4yJ31gXVxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgY29uc3QgdGFnRW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMudGFncyk7XG4gICAgICAgIGxldCB0YWdOYW1lcztcbiAgICAgICAgaWYgKGRvYyAmJiB0YWdFbnRyaWVzLmxlbmd0aCA+IDAgJiYgaXNOb2RlKGRvYy5jb250ZW50cykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSB7fTtcbiAgICAgICAgICAgIHZpc2l0KGRvYy5jb250ZW50cywgKF9rZXksIG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKG5vZGUpICYmIG5vZGUudGFnKVxuICAgICAgICAgICAgICAgICAgICB0YWdzW25vZGUudGFnXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRhZ05hbWVzID0gT2JqZWN0LmtleXModGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGFnTmFtZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbaGFuZGxlLCBwcmVmaXhdIG9mIHRhZ0VudHJpZXMpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGUgPT09ICchIScgJiYgcHJlZml4ID09PSAndGFnOnlhbWwub3JnLDIwMDI6JylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghZG9jIHx8IHRhZ05hbWVzLnNvbWUodG4gPT4gdG4uc3RhcnRzV2l0aChwcmVmaXgpKSlcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGAlVEFHICR7aGFuZGxlfSAke3ByZWZpeH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gICAgfVxufVxuRGlyZWN0aXZlcy5kZWZhdWx0WWFtbCA9IHsgZXhwbGljaXQ6IGZhbHNlLCB2ZXJzaW9uOiAnMS4yJyB9O1xuRGlyZWN0aXZlcy5kZWZhdWx0VGFncyA9IHsgJyEhJzogJ3RhZzp5YW1sLm9yZywyMDAyOicgfTtcblxuZXhwb3J0IHsgRGlyZWN0aXZlcyB9O1xuIiwgImltcG9ydCB7IGlzU2NhbGFyLCBpc0NvbGxlY3Rpb24gfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyB2aXNpdCB9IGZyb20gJy4uL3Zpc2l0LmpzJztcblxuLyoqXG4gKiBWZXJpZnkgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgdmFsaWQgYW5jaG9yLlxuICpcbiAqIFdpbGwgdGhyb3cgb24gZXJyb3JzLlxuICovXG5mdW5jdGlvbiBhbmNob3JJc1ZhbGlkKGFuY2hvcikge1xuICAgIGlmICgvW1xceDAwLVxceDE5XFxzLFtcXF17fV0vLnRlc3QoYW5jaG9yKSkge1xuICAgICAgICBjb25zdCBzYSA9IEpTT04uc3RyaW5naWZ5KGFuY2hvcik7XG4gICAgICAgIGNvbnN0IG1zZyA9IGBBbmNob3IgbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlIG9yIGNvbnRyb2wgY2hhcmFjdGVyczogJHtzYX1gO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBhbmNob3JOYW1lcyhyb290KSB7XG4gICAgY29uc3QgYW5jaG9ycyA9IG5ldyBTZXQoKTtcbiAgICB2aXNpdChyb290LCB7XG4gICAgICAgIFZhbHVlKF9rZXksIG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmFuY2hvcilcbiAgICAgICAgICAgICAgICBhbmNob3JzLmFkZChub2RlLmFuY2hvcik7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9ycztcbn1cbi8qKiBGaW5kIGEgbmV3IGFuY2hvciBuYW1lIHdpdGggdGhlIGdpdmVuIGBwcmVmaXhgIGFuZCBhIG9uZS1pbmRleGVkIHN1ZmZpeC4gKi9cbmZ1bmN0aW9uIGZpbmROZXdBbmNob3IocHJlZml4LCBleGNsdWRlKSB7XG4gICAgZm9yIChsZXQgaSA9IDE7IHRydWU7ICsraSkge1xuICAgICAgICBjb25zdCBuYW1lID0gYCR7cHJlZml4fSR7aX1gO1xuICAgICAgICBpZiAoIWV4Y2x1ZGUuaGFzKG5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlTm9kZUFuY2hvcnMoZG9jLCBwcmVmaXgpIHtcbiAgICBjb25zdCBhbGlhc09iamVjdHMgPSBbXTtcbiAgICBjb25zdCBzb3VyY2VPYmplY3RzID0gbmV3IE1hcCgpO1xuICAgIGxldCBwcmV2QW5jaG9ycyA9IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb25BbmNob3I6IChzb3VyY2UpID0+IHtcbiAgICAgICAgICAgIGFsaWFzT2JqZWN0cy5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoIXByZXZBbmNob3JzKVxuICAgICAgICAgICAgICAgIHByZXZBbmNob3JzID0gYW5jaG9yTmFtZXMoZG9jKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGZpbmROZXdBbmNob3IocHJlZml4LCBwcmV2QW5jaG9ycyk7XG4gICAgICAgICAgICBwcmV2QW5jaG9ycy5hZGQoYW5jaG9yKTtcbiAgICAgICAgICAgIHJldHVybiBhbmNob3I7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaXRoIGNpcmN1bGFyIHJlZmVyZW5jZXMsIHRoZSBzb3VyY2Ugbm9kZSBpcyBvbmx5IHJlc29sdmVkIGFmdGVyIGFsbFxuICAgICAgICAgKiBvZiBpdHMgY2hpbGQgbm9kZXMgYXJlLiBUaGlzIGlzIHdoeSBhbmNob3JzIGFyZSBzZXQgb25seSBhZnRlciBhbGwgb2ZcbiAgICAgICAgICogdGhlIG5vZGVzIGhhdmUgYmVlbiBjcmVhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgc2V0QW5jaG9yczogKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgYWxpYXNPYmplY3RzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmID0gc291cmNlT2JqZWN0cy5nZXQoc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVmLmFuY2hvciAmJlxuICAgICAgICAgICAgICAgICAgICAoaXNTY2FsYXIocmVmLm5vZGUpIHx8IGlzQ29sbGVjdGlvbihyZWYubm9kZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5ub2RlLmFuY2hvciA9IHJlZi5hbmNob3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgcmVwZWF0ZWQgb2JqZWN0ICh0aGlzIHNob3VsZCBub3QgaGFwcGVuKScpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlT2JqZWN0c1xuICAgIH07XG59XG5cbmV4cG9ydCB7IGFuY2hvcklzVmFsaWQsIGFuY2hvck5hbWVzLCBjcmVhdGVOb2RlQW5jaG9ycywgZmluZE5ld0FuY2hvciB9O1xuIiwgIi8qKlxuICogQXBwbGllcyB0aGUgSlNPTi5wYXJzZSByZXZpdmVyIGFsZ29yaXRobSBhcyBkZWZpbmVkIGluIHRoZSBFQ01BLTI2MiBzcGVjLFxuICogaW4gc2VjdGlvbiAyNC41LjEuMSBcIlJ1bnRpbWUgU2VtYW50aWNzOiBJbnRlcm5hbGl6ZUpTT05Qcm9wZXJ0eVwiIG9mIHRoZVxuICogMjAyMSBlZGl0aW9uOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24ucGFyc2VcbiAqXG4gKiBJbmNsdWRlcyBleHRlbnNpb25zIGZvciBoYW5kbGluZyBNYXAgYW5kIFNldCBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBhcHBseVJldml2ZXIocmV2aXZlciwgb2JqLCBrZXksIHZhbCkge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHZhbC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYwID0gdmFsW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHYxID0gYXBwbHlSZXZpdmVyKHJldml2ZXIsIHZhbCwgU3RyaW5nKGkpLCB2MCk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1hcnJheS1kZWxldGVcbiAgICAgICAgICAgICAgICBpZiAodjEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbFtpXTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2MSAhPT0gdjApXG4gICAgICAgICAgICAgICAgICAgIHZhbFtpXSA9IHYxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIEFycmF5LmZyb20odmFsLmtleXMoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2MCA9IHZhbC5nZXQoayk7XG4gICAgICAgICAgICAgICAgY29uc3QgdjEgPSBhcHBseVJldml2ZXIocmV2aXZlciwgdmFsLCBrLCB2MCk7XG4gICAgICAgICAgICAgICAgaWYgKHYxID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHZhbC5kZWxldGUoayk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodjEgIT09IHYwKVxuICAgICAgICAgICAgICAgICAgICB2YWwuc2V0KGssIHYxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdjAgb2YgQXJyYXkuZnJvbSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdjEgPSBhcHBseVJldml2ZXIocmV2aXZlciwgdmFsLCB2MCwgdjApO1xuICAgICAgICAgICAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB2YWwuZGVsZXRlKHYwKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2MSAhPT0gdjApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsLmRlbGV0ZSh2MCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbC5hZGQodjEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHYwXSBvZiBPYmplY3QuZW50cmllcyh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdjEgPSBhcHBseVJldml2ZXIocmV2aXZlciwgdmFsLCBrLCB2MCk7XG4gICAgICAgICAgICAgICAgaWYgKHYxID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWxba107XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodjEgIT09IHYwKVxuICAgICAgICAgICAgICAgICAgICB2YWxba10gPSB2MTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV2aXZlci5jYWxsKG9iaiwga2V5LCB2YWwpO1xufVxuXG5leHBvcnQgeyBhcHBseVJldml2ZXIgfTtcbiIsICJpbXBvcnQgeyBoYXNBbmNob3IgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjb252ZXJ0IGFueSBub2RlIG9yIGl0cyBjb250ZW50cyB0byBuYXRpdmUgSmF2YVNjcmlwdFxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnB1dCB2YWx1ZVxuICogQHBhcmFtIGFyZyAtIElmIGB2YWx1ZWAgZGVmaW5lcyBhIGB0b0pTT04oKWAgbWV0aG9kLCB1c2UgdGhpc1xuICogICBhcyBpdHMgZmlyc3QgYXJndW1lbnRcbiAqIEBwYXJhbSBjdHggLSBDb252ZXJzaW9uIGNvbnRleHQsIG9yaWdpbmFsbHkgc2V0IGluIERvY3VtZW50I3RvSlMoKS4gSWZcbiAqICAgYHsga2VlcDogdHJ1ZSB9YCBpcyBub3Qgc2V0LCBvdXRwdXQgc2hvdWxkIGJlIHN1aXRhYmxlIGZvciBKU09OXG4gKiAgIHN0cmluZ2lmaWNhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdG9KUyh2YWx1ZSwgYXJnLCBjdHgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHYsIGkpID0+IHRvSlModiwgU3RyaW5nKGkpLCBjdHgpKTtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgIGlmICghY3R4IHx8ICFoYXNBbmNob3IodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvSlNPTihhcmcsIGN0eCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IGFsaWFzQ291bnQ6IDAsIGNvdW50OiAxLCByZXM6IHVuZGVmaW5lZCB9O1xuICAgICAgICBjdHguYW5jaG9ycy5zZXQodmFsdWUsIGRhdGEpO1xuICAgICAgICBjdHgub25DcmVhdGUgPSByZXMgPT4ge1xuICAgICAgICAgICAgZGF0YS5yZXMgPSByZXM7XG4gICAgICAgICAgICBkZWxldGUgY3R4Lm9uQ3JlYXRlO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB2YWx1ZS50b0pTT04oYXJnLCBjdHgpO1xuICAgICAgICBpZiAoY3R4Lm9uQ3JlYXRlKVxuICAgICAgICAgICAgY3R4Lm9uQ3JlYXRlKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnICYmICFjdHg/LmtlZXApXG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IHsgdG9KUyB9O1xuIiwgImltcG9ydCB7IGFwcGx5UmV2aXZlciB9IGZyb20gJy4uL2RvYy9hcHBseVJldml2ZXIuanMnO1xuaW1wb3J0IHsgTk9ERV9UWVBFLCBpc0RvY3VtZW50IH0gZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyB0b0pTIH0gZnJvbSAnLi90b0pTLmpzJztcblxuY2xhc3MgTm9kZUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIE5PREVfVFlQRSwgeyB2YWx1ZTogdHlwZSB9KTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZSBhIGNvcHkgb2YgdGhpcyBub2RlLiAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY29weSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0aGlzKSk7XG4gICAgICAgIGlmICh0aGlzLnJhbmdlKVxuICAgICAgICAgICAgY29weS5yYW5nZSA9IHRoaXMucmFuZ2Uuc2xpY2UoKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIC8qKiBBIHBsYWluIEphdmFTY3JpcHQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBub2RlLiAqL1xuICAgIHRvSlMoZG9jLCB7IG1hcEFzTWFwLCBtYXhBbGlhc0NvdW50LCBvbkFuY2hvciwgcmV2aXZlciB9ID0ge30pIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50KGRvYykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIGRvY3VtZW50IGFyZ3VtZW50IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGFuY2hvcnM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGRvYyxcbiAgICAgICAgICAgIGtlZXA6IHRydWUsXG4gICAgICAgICAgICBtYXBBc01hcDogbWFwQXNNYXAgPT09IHRydWUsXG4gICAgICAgICAgICBtYXBLZXlXYXJuZWQ6IGZhbHNlLFxuICAgICAgICAgICAgbWF4QWxpYXNDb3VudDogdHlwZW9mIG1heEFsaWFzQ291bnQgPT09ICdudW1iZXInID8gbWF4QWxpYXNDb3VudCA6IDEwMFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXMgPSB0b0pTKHRoaXMsICcnLCBjdHgpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQW5jaG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGNvdW50LCByZXMgfSBvZiBjdHguYW5jaG9ycy52YWx1ZXMoKSlcbiAgICAgICAgICAgICAgICBvbkFuY2hvcihyZXMsIGNvdW50KTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGFwcGx5UmV2aXZlcihyZXZpdmVyLCB7ICcnOiByZXMgfSwgJycsIHJlcylcbiAgICAgICAgICAgIDogcmVzO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgTm9kZUJhc2UgfTtcbiIsICJpbXBvcnQgeyBhbmNob3JJc1ZhbGlkIH0gZnJvbSAnLi4vZG9jL2FuY2hvcnMuanMnO1xuaW1wb3J0IHsgdmlzaXQgfSBmcm9tICcuLi92aXNpdC5qcyc7XG5pbXBvcnQgeyBBTElBUywgaXNBbGlhcywgaXNDb2xsZWN0aW9uLCBpc1BhaXIgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IE5vZGVCYXNlIH0gZnJvbSAnLi9Ob2RlLmpzJztcbmltcG9ydCB7IHRvSlMgfSBmcm9tICcuL3RvSlMuanMnO1xuXG5jbGFzcyBBbGlhcyBleHRlbmRzIE5vZGVCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICAgICAgc3VwZXIoQUxJQVMpO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0YWcnLCB7XG4gICAgICAgICAgICBzZXQoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGlhcyBub2RlcyBjYW5ub3QgaGF2ZSB0YWdzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIHRoZSB2YWx1ZSBvZiB0aGlzIGFsaWFzIHdpdGhpbiBgZG9jYCwgZmluZGluZyB0aGUgbGFzdFxuICAgICAqIGluc3RhbmNlIG9mIHRoZSBgc291cmNlYCBhbmNob3IgYmVmb3JlIHRoaXMgbm9kZS5cbiAgICAgKi9cbiAgICByZXNvbHZlKGRvYykge1xuICAgICAgICBsZXQgZm91bmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZpc2l0KGRvYywge1xuICAgICAgICAgICAgTm9kZTogKF9rZXksIG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSA9PT0gdGhpcylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0LkJSRUFLO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmFuY2hvciA9PT0gdGhpcy5zb3VyY2UpXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gICAgdG9KU09OKF9hcmcsIGN0eCkge1xuICAgICAgICBpZiAoIWN0eClcbiAgICAgICAgICAgIHJldHVybiB7IHNvdXJjZTogdGhpcy5zb3VyY2UgfTtcbiAgICAgICAgY29uc3QgeyBhbmNob3JzLCBkb2MsIG1heEFsaWFzQ291bnQgfSA9IGN0eDtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlKGRvYyk7XG4gICAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgVW5yZXNvbHZlZCBhbGlhcyAodGhlIGFuY2hvciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGFsaWFzKTogJHt0aGlzLnNvdXJjZX1gO1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEgPSBhbmNob3JzLmdldChzb3VyY2UpO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIC8vIFJlc29sdmUgYW5jaG9ycyBmb3IgTm9kZS5wcm90b3R5cGUudG9KUygpXG4gICAgICAgICAgICB0b0pTKHNvdXJjZSwgbnVsbCwgY3R4KTtcbiAgICAgICAgICAgIGRhdGEgPSBhbmNob3JzLmdldChzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5yZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gJ1RoaXMgc2hvdWxkIG5vdCBoYXBwZW46IEFsaWFzIGFuY2hvciB3YXMgbm90IHJlc29sdmVkPyc7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4QWxpYXNDb3VudCA+PSAwKSB7XG4gICAgICAgICAgICBkYXRhLmNvdW50ICs9IDE7XG4gICAgICAgICAgICBpZiAoZGF0YS5hbGlhc0NvdW50ID09PSAwKVxuICAgICAgICAgICAgICAgIGRhdGEuYWxpYXNDb3VudCA9IGdldEFsaWFzQ291bnQoZG9jLCBzb3VyY2UsIGFuY2hvcnMpO1xuICAgICAgICAgICAgaWYgKGRhdGEuY291bnQgKiBkYXRhLmFsaWFzQ291bnQgPiBtYXhBbGlhc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gJ0V4Y2Vzc2l2ZSBhbGlhcyBjb3VudCBpbmRpY2F0ZXMgYSByZXNvdXJjZSBleGhhdXN0aW9uIGF0dGFjayc7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGEucmVzO1xuICAgIH1cbiAgICB0b1N0cmluZyhjdHgsIF9vbkNvbW1lbnQsIF9vbkNob21wS2VlcCkge1xuICAgICAgICBjb25zdCBzcmMgPSBgKiR7dGhpcy5zb3VyY2V9YDtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgYW5jaG9ySXNWYWxpZCh0aGlzLnNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoY3R4Lm9wdGlvbnMudmVyaWZ5QWxpYXNPcmRlciAmJiAhY3R4LmFuY2hvcnMuaGFzKHRoaXMuc291cmNlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBVbnJlc29sdmVkIGFsaWFzICh0aGUgYW5jaG9yIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYWxpYXMpOiAke3RoaXMuc291cmNlfWA7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3R4LmltcGxpY2l0S2V5KVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtzcmN9IGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRBbGlhc0NvdW50KGRvYywgbm9kZSwgYW5jaG9ycykge1xuICAgIGlmIChpc0FsaWFzKG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5vZGUucmVzb2x2ZShkb2MpO1xuICAgICAgICBjb25zdCBhbmNob3IgPSBhbmNob3JzICYmIHNvdXJjZSAmJiBhbmNob3JzLmdldChzb3VyY2UpO1xuICAgICAgICByZXR1cm4gYW5jaG9yID8gYW5jaG9yLmNvdW50ICogYW5jaG9yLmFsaWFzQ291bnQgOiAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0NvbGxlY3Rpb24obm9kZSkpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5vZGUuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBnZXRBbGlhc0NvdW50KGRvYywgaXRlbSwgYW5jaG9ycyk7XG4gICAgICAgICAgICBpZiAoYyA+IGNvdW50KVxuICAgICAgICAgICAgICAgIGNvdW50ID0gYztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUGFpcihub2RlKSkge1xuICAgICAgICBjb25zdCBrYyA9IGdldEFsaWFzQ291bnQoZG9jLCBub2RlLmtleSwgYW5jaG9ycyk7XG4gICAgICAgIGNvbnN0IHZjID0gZ2V0QWxpYXNDb3VudChkb2MsIG5vZGUudmFsdWUsIGFuY2hvcnMpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoa2MsIHZjKTtcbiAgICB9XG4gICAgcmV0dXJuIDE7XG59XG5cbmV4cG9ydCB7IEFsaWFzIH07XG4iLCAiaW1wb3J0IHsgU0NBTEFSIH0gZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBOb2RlQmFzZSB9IGZyb20gJy4vTm9kZS5qcyc7XG5pbXBvcnQgeyB0b0pTIH0gZnJvbSAnLi90b0pTLmpzJztcblxuY29uc3QgaXNTY2FsYXJWYWx1ZSA9ICh2YWx1ZSkgPT4gIXZhbHVlIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG5jbGFzcyBTY2FsYXIgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgc3VwZXIoU0NBTEFSKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICB0b0pTT04oYXJnLCBjdHgpIHtcbiAgICAgICAgcmV0dXJuIGN0eD8ua2VlcCA/IHRoaXMudmFsdWUgOiB0b0pTKHRoaXMudmFsdWUsIGFyZywgY3R4KTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGhpcy52YWx1ZSk7XG4gICAgfVxufVxuU2NhbGFyLkJMT0NLX0ZPTERFRCA9ICdCTE9DS19GT0xERUQnO1xuU2NhbGFyLkJMT0NLX0xJVEVSQUwgPSAnQkxPQ0tfTElURVJBTCc7XG5TY2FsYXIuUExBSU4gPSAnUExBSU4nO1xuU2NhbGFyLlFVT1RFX0RPVUJMRSA9ICdRVU9URV9ET1VCTEUnO1xuU2NhbGFyLlFVT1RFX1NJTkdMRSA9ICdRVU9URV9TSU5HTEUnO1xuXG5leHBvcnQgeyBTY2FsYXIsIGlzU2NhbGFyVmFsdWUgfTtcbiIsICJpbXBvcnQgeyBBbGlhcyB9IGZyb20gJy4uL25vZGVzL0FsaWFzLmpzJztcbmltcG9ydCB7IGlzTm9kZSwgaXNQYWlyLCBNQVAsIFNFUSwgaXNEb2N1bWVudCB9IGZyb20gJy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IFNjYWxhciB9IGZyb20gJy4uL25vZGVzL1NjYWxhci5qcyc7XG5cbmNvbnN0IGRlZmF1bHRUYWdQcmVmaXggPSAndGFnOnlhbWwub3JnLDIwMDI6JztcbmZ1bmN0aW9uIGZpbmRUYWdPYmplY3QodmFsdWUsIHRhZ05hbWUsIHRhZ3MpIHtcbiAgICBpZiAodGFnTmFtZSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRhZ3MuZmlsdGVyKHQgPT4gdC50YWcgPT09IHRhZ05hbWUpO1xuICAgICAgICBjb25zdCB0YWdPYmogPSBtYXRjaC5maW5kKHQgPT4gIXQuZm9ybWF0KSA/PyBtYXRjaFswXTtcbiAgICAgICAgaWYgKCF0YWdPYmopXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhZyAke3RhZ05hbWV9IG5vdCBmb3VuZGApO1xuICAgICAgICByZXR1cm4gdGFnT2JqO1xuICAgIH1cbiAgICByZXR1cm4gdGFncy5maW5kKHQgPT4gdC5pZGVudGlmeT8uKHZhbHVlKSAmJiAhdC5mb3JtYXQpO1xufVxuZnVuY3Rpb24gY3JlYXRlTm9kZSh2YWx1ZSwgdGFnTmFtZSwgY3R4KSB7XG4gICAgaWYgKGlzRG9jdW1lbnQodmFsdWUpKVxuICAgICAgICB2YWx1ZSA9IHZhbHVlLmNvbnRlbnRzO1xuICAgIGlmIChpc05vZGUodmFsdWUpKVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgaWYgKGlzUGFpcih2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbWFwID0gY3R4LnNjaGVtYVtNQVBdLmNyZWF0ZU5vZGU/LihjdHguc2NoZW1hLCBudWxsLCBjdHgpO1xuICAgICAgICBtYXAuaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fFxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fFxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4gfHxcbiAgICAgICAgKHR5cGVvZiBCaWdJbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmlnSW50KSAvLyBub3Qgc3VwcG9ydGVkIGV2ZXJ5d2hlcmVcbiAgICApIHtcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXJpYWxpemVqc29ucHJvcGVydHlcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWxpYXNEdXBsaWNhdGVPYmplY3RzLCBvbkFuY2hvciwgb25UYWdPYmosIHNjaGVtYSwgc291cmNlT2JqZWN0cyB9ID0gY3R4O1xuICAgIC8vIERldGVjdCBkdXBsaWNhdGUgcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBvYmplY3QgJiB1c2UgQWxpYXMgbm9kZXMgZm9yIGFsbFxuICAgIC8vIGFmdGVyIGZpcnN0LiBUaGUgYHJlZmAgd3JhcHBlciBhbGxvd3MgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgdG8gcmVzb2x2ZS5cbiAgICBsZXQgcmVmID0gdW5kZWZpbmVkO1xuICAgIGlmIChhbGlhc0R1cGxpY2F0ZU9iamVjdHMgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZWYgPSBzb3VyY2VPYmplY3RzLmdldCh2YWx1ZSk7XG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgIGlmICghcmVmLmFuY2hvcilcbiAgICAgICAgICAgICAgICByZWYuYW5jaG9yID0gb25BbmNob3IodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBbGlhcyhyZWYuYW5jaG9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlZiA9IHsgYW5jaG9yOiBudWxsLCBub2RlOiBudWxsIH07XG4gICAgICAgICAgICBzb3VyY2VPYmplY3RzLnNldCh2YWx1ZSwgcmVmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodGFnTmFtZT8uc3RhcnRzV2l0aCgnISEnKSlcbiAgICAgICAgdGFnTmFtZSA9IGRlZmF1bHRUYWdQcmVmaXggKyB0YWdOYW1lLnNsaWNlKDIpO1xuICAgIGxldCB0YWdPYmogPSBmaW5kVGFnT2JqZWN0KHZhbHVlLCB0YWdOYW1lLCBzY2hlbWEudGFncyk7XG4gICAgaWYgKCF0YWdPYmopIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IFNjYWxhcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocmVmKVxuICAgICAgICAgICAgICAgIHJlZi5ub2RlID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIHRhZ09iaiA9XG4gICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIE1hcFxuICAgICAgICAgICAgICAgID8gc2NoZW1hW01BUF1cbiAgICAgICAgICAgICAgICA6IFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gc2NoZW1hW1NFUV1cbiAgICAgICAgICAgICAgICAgICAgOiBzY2hlbWFbTUFQXTtcbiAgICB9XG4gICAgaWYgKG9uVGFnT2JqKSB7XG4gICAgICAgIG9uVGFnT2JqKHRhZ09iaik7XG4gICAgICAgIGRlbGV0ZSBjdHgub25UYWdPYmo7XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSB0YWdPYmo/LmNyZWF0ZU5vZGVcbiAgICAgICAgPyB0YWdPYmouY3JlYXRlTm9kZShjdHguc2NoZW1hLCB2YWx1ZSwgY3R4KVxuICAgICAgICA6IHR5cGVvZiB0YWdPYmo/Lm5vZGVDbGFzcz8uZnJvbSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyB0YWdPYmoubm9kZUNsYXNzLmZyb20oY3R4LnNjaGVtYSwgdmFsdWUsIGN0eClcbiAgICAgICAgICAgIDogbmV3IFNjYWxhcih2YWx1ZSk7XG4gICAgaWYgKHRhZ05hbWUpXG4gICAgICAgIG5vZGUudGFnID0gdGFnTmFtZTtcbiAgICBlbHNlIGlmICghdGFnT2JqLmRlZmF1bHQpXG4gICAgICAgIG5vZGUudGFnID0gdGFnT2JqLnRhZztcbiAgICBpZiAocmVmKVxuICAgICAgICByZWYubm9kZSA9IG5vZGU7XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZU5vZGUgfTtcbiIsICJpbXBvcnQgeyBjcmVhdGVOb2RlIH0gZnJvbSAnLi4vZG9jL2NyZWF0ZU5vZGUuanMnO1xuaW1wb3J0IHsgaXNOb2RlLCBpc1BhaXIsIGlzQ29sbGVjdGlvbiwgaXNTY2FsYXIgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IE5vZGVCYXNlIH0gZnJvbSAnLi9Ob2RlLmpzJztcblxuZnVuY3Rpb24gY29sbGVjdGlvbkZyb21QYXRoKHNjaGVtYSwgcGF0aCwgdmFsdWUpIHtcbiAgICBsZXQgdiA9IHZhbHVlO1xuICAgIGZvciAobGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIGNvbnN0IGsgPSBwYXRoW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIoaykgJiYgayA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gW107XG4gICAgICAgICAgICBhW2tdID0gdjtcbiAgICAgICAgICAgIHYgPSBhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdiA9IG5ldyBNYXAoW1trLCB2XV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVOb2RlKHYsIHVuZGVmaW5lZCwge1xuICAgICAgICBhbGlhc0R1cGxpY2F0ZU9iamVjdHM6IGZhbHNlLFxuICAgICAgICBrZWVwVW5kZWZpbmVkOiBmYWxzZSxcbiAgICAgICAgb25BbmNob3I6ICgpID0+IHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgcGxlYXNlIHJlcG9ydCBhIGJ1Zy4nKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBzb3VyY2VPYmplY3RzOiBuZXcgTWFwKClcbiAgICB9KTtcbn1cbi8vIFR5cGUgZ3VhcmQgaXMgaW50ZW50aW9uYWxseSBhIGxpdHRsZSB3cm9uZyBzbyBhcyB0byBiZSBtb3JlIHVzZWZ1bCxcbi8vIGFzIGl0IGRvZXMgbm90IGNvdmVyIHVudHlwYWJsZSBlbXB0eSBub24tc3RyaW5nIGl0ZXJhYmxlcyAoZS5nLiBbXSkuXG5jb25zdCBpc0VtcHR5UGF0aCA9IChwYXRoKSA9PiBwYXRoID09IG51bGwgfHxcbiAgICAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmICEhcGF0aFtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmUpO1xuY2xhc3MgQ29sbGVjdGlvbiBleHRlbmRzIE5vZGVCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBzY2hlbWEpIHtcbiAgICAgICAgc3VwZXIodHlwZSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgdmFsdWU6IHNjaGVtYSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGNvcHkgb2YgdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNjaGVtYSAtIElmIGRlZmluZWQsIG92ZXJ3cml0ZXMgdGhlIG9yaWdpbmFsJ3Mgc2NoZW1hXG4gICAgICovXG4gICAgY2xvbmUoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGhpcykpO1xuICAgICAgICBpZiAoc2NoZW1hKVxuICAgICAgICAgICAgY29weS5zY2hlbWEgPSBzY2hlbWE7XG4gICAgICAgIGNvcHkuaXRlbXMgPSBjb3B5Lml0ZW1zLm1hcChpdCA9PiBpc05vZGUoaXQpIHx8IGlzUGFpcihpdCkgPyBpdC5jbG9uZShzY2hlbWEpIDogaXQpO1xuICAgICAgICBpZiAodGhpcy5yYW5nZSlcbiAgICAgICAgICAgIGNvcHkucmFuZ2UgPSB0aGlzLnJhbmdlLnNsaWNlKCk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgdmFsdWUgdG8gdGhlIGNvbGxlY3Rpb24uIEZvciBgISFtYXBgIGFuZCBgISFvbWFwYCB0aGUgdmFsdWUgbXVzdFxuICAgICAqIGJlIGEgUGFpciBpbnN0YW5jZSBvciBhIGB7IGtleSwgdmFsdWUgfWAgb2JqZWN0LCB3aGljaCBtYXkgbm90IGhhdmUgYSBrZXlcbiAgICAgKiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBtYXAuXG4gICAgICovXG4gICAgYWRkSW4ocGF0aCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGlzRW1wdHlQYXRoKHBhdGgpKVxuICAgICAgICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0aDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgICAgICAgaWYgKGlzQ29sbGVjdGlvbihub2RlKSlcbiAgICAgICAgICAgICAgICBub2RlLmFkZEluKHJlc3QsIHZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNjaGVtYSlcbiAgICAgICAgICAgICAgICB0aGlzLnNldChrZXksIGNvbGxlY3Rpb25Gcm9tUGF0aCh0aGlzLnNjaGVtYSwgcmVzdCwgdmFsdWUpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFlBTUwgY29sbGVjdGlvbiBhdCAke2tleX0uIFJlbWFpbmluZyBwYXRoOiAke3Jlc3R9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpdGVtIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBkZWxldGVJbihwYXRoKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0aDtcbiAgICAgICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgICBpZiAoaXNDb2xsZWN0aW9uKG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGVsZXRlSW4ocmVzdCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0ICR7a2V5fS4gUmVtYWluaW5nIHBhdGg6ICR7cmVzdH1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpdGVtIGF0IGBrZXlgLCBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmQuIEJ5IGRlZmF1bHQgdW53cmFwc1xuICAgICAqIHNjYWxhciB2YWx1ZXMgZnJvbSB0aGVpciBzdXJyb3VuZGluZyBub2RlOyB0byBkaXNhYmxlIHNldCBga2VlcFNjYWxhcmAgdG9cbiAgICAgKiBgdHJ1ZWAgKGNvbGxlY3Rpb25zIGFyZSBhbHdheXMgcmV0dXJuZWQgaW50YWN0KS5cbiAgICAgKi9cbiAgICBnZXRJbihwYXRoLCBrZWVwU2NhbGFyKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0aDtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0KGtleSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiAha2VlcFNjYWxhciAmJiBpc1NjYWxhcihub2RlKSA/IG5vZGUudmFsdWUgOiBub2RlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uKG5vZGUpID8gbm9kZS5nZXRJbihyZXN0LCBrZWVwU2NhbGFyKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaGFzQWxsTnVsbFZhbHVlcyhhbGxvd1NjYWxhcikge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5ldmVyeShub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghaXNQYWlyKG5vZGUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIChuID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAoYWxsb3dTY2FsYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNTY2FsYXIobikgJiZcbiAgICAgICAgICAgICAgICAgICAgbi52YWx1ZSA9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICFuLmNvbW1lbnRCZWZvcmUgJiZcbiAgICAgICAgICAgICAgICAgICAgIW4uY29tbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAhbi50YWcpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgY29sbGVjdGlvbiBpbmNsdWRlcyBhIHZhbHVlIHdpdGggdGhlIGtleSBga2V5YC5cbiAgICAgKi9cbiAgICBoYXNJbihwYXRoKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0aDtcbiAgICAgICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzKGtleSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldChrZXksIHRydWUpO1xuICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uKG5vZGUpID8gbm9kZS5oYXNJbihyZXN0KSA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgdmFsdWUgaW4gdGhpcyBjb2xsZWN0aW9uLiBGb3IgYCEhc2V0YCwgYHZhbHVlYCBuZWVkcyB0byBiZSBhXG4gICAgICogYm9vbGVhbiB0byBhZGQvcmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIHNldC5cbiAgICAgKi9cbiAgICBzZXRJbihwYXRoLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBba2V5LCAuLi5yZXN0XSA9IHBhdGg7XG4gICAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXQoa2V5LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChpc0NvbGxlY3Rpb24obm9kZSkpXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRJbihyZXN0LCB2YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIGlmIChub2RlID09PSB1bmRlZmluZWQgJiYgdGhpcy5zY2hlbWEpXG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCBjb2xsZWN0aW9uRnJvbVBhdGgodGhpcy5zY2hlbWEsIHJlc3QsIHZhbHVlKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZQU1MIGNvbGxlY3Rpb24gYXQgJHtrZXl9LiBSZW1haW5pbmcgcGF0aDogJHtyZXN0fWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBDb2xsZWN0aW9uLCBjb2xsZWN0aW9uRnJvbVBhdGgsIGlzRW1wdHlQYXRoIH07XG4iLCAiLyoqXG4gKiBTdHJpbmdpZmllcyBhIGNvbW1lbnQuXG4gKlxuICogRW1wdHkgY29tbWVudCBsaW5lcyBhcmUgbGVmdCBlbXB0eSxcbiAqIGxpbmVzIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgc3BhY2UgYXJlIHJlcGxhY2VkIGJ5IGAjYCxcbiAqIGFuZCBhbGwgb3RoZXIgbGluZXMgYXJlIHByZWZpeGVkIHdpdGggYSBgI2AuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeUNvbW1lbnQgPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvXig/ISQpKD86ICQpPy9nbSwgJyMnKTtcbmZ1bmN0aW9uIGluZGVudENvbW1lbnQoY29tbWVudCwgaW5kZW50KSB7XG4gICAgaWYgKC9eXFxuKyQvLnRlc3QoY29tbWVudCkpXG4gICAgICAgIHJldHVybiBjb21tZW50LnN1YnN0cmluZygxKTtcbiAgICByZXR1cm4gaW5kZW50ID8gY29tbWVudC5yZXBsYWNlKC9eKD8hICokKS9nbSwgaW5kZW50KSA6IGNvbW1lbnQ7XG59XG5jb25zdCBsaW5lQ29tbWVudCA9IChzdHIsIGluZGVudCwgY29tbWVudCkgPT4gc3RyLmVuZHNXaXRoKCdcXG4nKVxuICAgID8gaW5kZW50Q29tbWVudChjb21tZW50LCBpbmRlbnQpXG4gICAgOiBjb21tZW50LmluY2x1ZGVzKCdcXG4nKVxuICAgICAgICA/ICdcXG4nICsgaW5kZW50Q29tbWVudChjb21tZW50LCBpbmRlbnQpXG4gICAgICAgIDogKHN0ci5lbmRzV2l0aCgnICcpID8gJycgOiAnICcpICsgY29tbWVudDtcblxuZXhwb3J0IHsgaW5kZW50Q29tbWVudCwgbGluZUNvbW1lbnQsIHN0cmluZ2lmeUNvbW1lbnQgfTtcbiIsICJjb25zdCBGT0xEX0ZMT1cgPSAnZmxvdyc7XG5jb25zdCBGT0xEX0JMT0NLID0gJ2Jsb2NrJztcbmNvbnN0IEZPTERfUVVPVEVEID0gJ3F1b3RlZCc7XG4vKipcbiAqIFRyaWVzIHRvIGtlZXAgaW5wdXQgYXQgdXAgdG8gYGxpbmVXaWR0aGAgY2hhcmFjdGVycywgc3BsaXR0aW5nIG9ubHkgb24gc3BhY2VzXG4gKiBub3QgZm9sbG93ZWQgYnkgbmV3bGluZXMgb3Igc3BhY2VzIHVubGVzcyBgbW9kZWAgaXMgYCdxdW90ZWQnYC4gTGluZXMgYXJlXG4gKiB0ZXJtaW5hdGVkIHdpdGggYFxcbmAgYW5kIHN0YXJ0ZWQgd2l0aCBgaW5kZW50YC5cbiAqL1xuZnVuY3Rpb24gZm9sZEZsb3dMaW5lcyh0ZXh0LCBpbmRlbnQsIG1vZGUgPSAnZmxvdycsIHsgaW5kZW50QXRTdGFydCwgbGluZVdpZHRoID0gODAsIG1pbkNvbnRlbnRXaWR0aCA9IDIwLCBvbkZvbGQsIG9uT3ZlcmZsb3cgfSA9IHt9KSB7XG4gICAgaWYgKCFsaW5lV2lkdGggfHwgbGluZVdpZHRoIDwgMClcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgaWYgKGxpbmVXaWR0aCA8IG1pbkNvbnRlbnRXaWR0aClcbiAgICAgICAgbWluQ29udGVudFdpZHRoID0gMDtcbiAgICBjb25zdCBlbmRTdGVwID0gTWF0aC5tYXgoMSArIG1pbkNvbnRlbnRXaWR0aCwgMSArIGxpbmVXaWR0aCAtIGluZGVudC5sZW5ndGgpO1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA8PSBlbmRTdGVwKVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICBjb25zdCBmb2xkcyA9IFtdO1xuICAgIGNvbnN0IGVzY2FwZWRGb2xkcyA9IHt9O1xuICAgIGxldCBlbmQgPSBsaW5lV2lkdGggLSBpbmRlbnQubGVuZ3RoO1xuICAgIGlmICh0eXBlb2YgaW5kZW50QXRTdGFydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGluZGVudEF0U3RhcnQgPiBsaW5lV2lkdGggLSBNYXRoLm1heCgyLCBtaW5Db250ZW50V2lkdGgpKVxuICAgICAgICAgICAgZm9sZHMucHVzaCgwKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZW5kID0gbGluZVdpZHRoIC0gaW5kZW50QXRTdGFydDtcbiAgICB9XG4gICAgbGV0IHNwbGl0ID0gdW5kZWZpbmVkO1xuICAgIGxldCBwcmV2ID0gdW5kZWZpbmVkO1xuICAgIGxldCBvdmVyZmxvdyA9IGZhbHNlO1xuICAgIGxldCBpID0gLTE7XG4gICAgbGV0IGVzY1N0YXJ0ID0gLTE7XG4gICAgbGV0IGVzY0VuZCA9IC0xO1xuICAgIGlmIChtb2RlID09PSBGT0xEX0JMT0NLKSB7XG4gICAgICAgIGkgPSBjb25zdW1lTW9yZUluZGVudGVkTGluZXModGV4dCwgaSwgaW5kZW50Lmxlbmd0aCk7XG4gICAgICAgIGlmIChpICE9PSAtMSlcbiAgICAgICAgICAgIGVuZCA9IGkgKyBlbmRTdGVwO1xuICAgIH1cbiAgICBmb3IgKGxldCBjaDsgKGNoID0gdGV4dFsoaSArPSAxKV0pOykge1xuICAgICAgICBpZiAobW9kZSA9PT0gRk9MRF9RVU9URUQgJiYgY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgZXNjU3RhcnQgPSBpO1xuICAgICAgICAgICAgc3dpdGNoICh0ZXh0W2kgKyAxXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICBpICs9IDM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICBpICs9IDU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1UnOlxuICAgICAgICAgICAgICAgICAgICBpICs9IDk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVzY0VuZCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSAnXFxuJykge1xuICAgICAgICAgICAgaWYgKG1vZGUgPT09IEZPTERfQkxPQ0spXG4gICAgICAgICAgICAgICAgaSA9IGNvbnN1bWVNb3JlSW5kZW50ZWRMaW5lcyh0ZXh0LCBpLCBpbmRlbnQubGVuZ3RoKTtcbiAgICAgICAgICAgIGVuZCA9IGkgKyBpbmRlbnQubGVuZ3RoICsgZW5kU3RlcDtcbiAgICAgICAgICAgIHNwbGl0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNoID09PSAnICcgJiZcbiAgICAgICAgICAgICAgICBwcmV2ICYmXG4gICAgICAgICAgICAgICAgcHJldiAhPT0gJyAnICYmXG4gICAgICAgICAgICAgICAgcHJldiAhPT0gJ1xcbicgJiZcbiAgICAgICAgICAgICAgICBwcmV2ICE9PSAnXFx0Jykge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIHN1cnJvdW5kZWQgYnkgbm9uLXNwYWNlIGNhbiBiZSByZXBsYWNlZCB3aXRoIG5ld2xpbmUgKyBpbmRlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gdGV4dFtpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dCAhPT0gJyAnICYmIG5leHQgIT09ICdcXG4nICYmIG5leHQgIT09ICdcXHQnKVxuICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+PSBlbmQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9sZHMucHVzaChzcGxpdCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IHNwbGl0ICsgZW5kU3RlcDtcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT09IEZPTERfUVVPVEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoaXRlLXNwYWNlIGNvbGxlY3RlZCBhdCBlbmQgbWF5IHN0cmV0Y2ggcGFzdCBsaW5lV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHByZXYgPT09ICcgJyB8fCBwcmV2ID09PSAnXFx0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0ZXh0WyhpICs9IDEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciBuZXdsaW5lIGVzY2FwZSwgYnV0IGRvbid0IGJyZWFrIHByZWNlZGluZyBlc2NhcGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaiA9IGkgPiBlc2NFbmQgKyAxID8gaSAtIDIgOiBlc2NTdGFydCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIGxpbmVXaWR0aCAmIG1pbkNvbnRlbnRXaWR0aCBhcmUgc2hvcnRlciB0aGFuIGFuIGVzY2FwZSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVzY2FwZWRGb2xkc1tqXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICAgICAgICAgICAgICBmb2xkcy5wdXNoKGopO1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGVkRm9sZHNbal0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBqICsgZW5kU3RlcDtcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBjaDtcbiAgICB9XG4gICAgaWYgKG92ZXJmbG93ICYmIG9uT3ZlcmZsb3cpXG4gICAgICAgIG9uT3ZlcmZsb3coKTtcbiAgICBpZiAoZm9sZHMubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICBpZiAob25Gb2xkKVxuICAgICAgICBvbkZvbGQoKTtcbiAgICBsZXQgcmVzID0gdGV4dC5zbGljZSgwLCBmb2xkc1swXSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBmb2xkID0gZm9sZHNbaV07XG4gICAgICAgIGNvbnN0IGVuZCA9IGZvbGRzW2kgKyAxXSB8fCB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGZvbGQgPT09IDApXG4gICAgICAgICAgICByZXMgPSBgXFxuJHtpbmRlbnR9JHt0ZXh0LnNsaWNlKDAsIGVuZCl9YDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gRk9MRF9RVU9URUQgJiYgZXNjYXBlZEZvbGRzW2ZvbGRdKVxuICAgICAgICAgICAgICAgIHJlcyArPSBgJHt0ZXh0W2ZvbGRdfVxcXFxgO1xuICAgICAgICAgICAgcmVzICs9IGBcXG4ke2luZGVudH0ke3RleHQuc2xpY2UoZm9sZCArIDEsIGVuZCl9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBQcmVzdW1lcyBgaSArIDFgIGlzIGF0IHRoZSBzdGFydCBvZiBhIGxpbmVcbiAqIEByZXR1cm5zIGluZGV4IG9mIGxhc3QgbmV3bGluZSBpbiBtb3JlLWluZGVudGVkIGJsb2NrXG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVNb3JlSW5kZW50ZWRMaW5lcyh0ZXh0LCBpLCBpbmRlbnQpIHtcbiAgICBsZXQgZW5kID0gaTtcbiAgICBsZXQgc3RhcnQgPSBpICsgMTtcbiAgICBsZXQgY2ggPSB0ZXh0W3N0YXJ0XTtcbiAgICB3aGlsZSAoY2ggPT09ICcgJyB8fCBjaCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgaWYgKGkgPCBzdGFydCArIGluZGVudCkge1xuICAgICAgICAgICAgY2ggPSB0ZXh0WysraV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgY2ggPSB0ZXh0WysraV07XG4gICAgICAgICAgICB9IHdoaWxlIChjaCAmJiBjaCAhPT0gJ1xcbicpO1xuICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICBjaCA9IHRleHRbc3RhcnRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbmQ7XG59XG5cbmV4cG9ydCB7IEZPTERfQkxPQ0ssIEZPTERfRkxPVywgRk9MRF9RVU9URUQsIGZvbGRGbG93TGluZXMgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi9ub2Rlcy9TY2FsYXIuanMnO1xuaW1wb3J0IHsgZm9sZEZsb3dMaW5lcywgRk9MRF9RVU9URUQsIEZPTERfRkxPVywgRk9MRF9CTE9DSyB9IGZyb20gJy4vZm9sZEZsb3dMaW5lcy5qcyc7XG5cbmNvbnN0IGdldEZvbGRPcHRpb25zID0gKGN0eCwgaXNCbG9jaykgPT4gKHtcbiAgICBpbmRlbnRBdFN0YXJ0OiBpc0Jsb2NrID8gY3R4LmluZGVudC5sZW5ndGggOiBjdHguaW5kZW50QXRTdGFydCxcbiAgICBsaW5lV2lkdGg6IGN0eC5vcHRpb25zLmxpbmVXaWR0aCxcbiAgICBtaW5Db250ZW50V2lkdGg6IGN0eC5vcHRpb25zLm1pbkNvbnRlbnRXaWR0aFxufSk7XG4vLyBBbHNvIGNoZWNrcyBmb3IgbGluZXMgc3RhcnRpbmcgd2l0aCAlLCBhcyBwYXJzaW5nIHRoZSBvdXRwdXQgYXMgWUFNTCAxLjEgd2lsbFxuLy8gcHJlc3VtZSB0aGF0J3Mgc3RhcnRpbmcgYSBuZXcgZG9jdW1lbnQuXG5jb25zdCBjb250YWluc0RvY3VtZW50TWFya2VyID0gKHN0cikgPT4gL14oJXwtLS18XFwuXFwuXFwuKS9tLnRlc3Qoc3RyKTtcbmZ1bmN0aW9uIGxpbmVMZW5ndGhPdmVyTGltaXQoc3RyLCBsaW5lV2lkdGgsIGluZGVudExlbmd0aCkge1xuICAgIGlmICghbGluZVdpZHRoIHx8IGxpbmVXaWR0aCA8IDApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBsaW1pdCA9IGxpbmVXaWR0aCAtIGluZGVudExlbmd0aDtcbiAgICBjb25zdCBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuICAgIGlmIChzdHJMZW4gPD0gbGltaXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMCwgc3RhcnQgPSAwOyBpIDwgc3RyTGVuOyArK2kpIHtcbiAgICAgICAgaWYgKHN0cltpXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiBsaW1pdClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICBpZiAoc3RyTGVuIC0gc3RhcnQgPD0gbGltaXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZG91YmxlUXVvdGVkU3RyaW5nKHZhbHVlLCBjdHgpIHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGlmIChjdHgub3B0aW9ucy5kb3VibGVRdW90ZWRBc0pTT04pXG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIGNvbnN0IHsgaW1wbGljaXRLZXkgfSA9IGN0eDtcbiAgICBjb25zdCBtaW5NdWx0aUxpbmVMZW5ndGggPSBjdHgub3B0aW9ucy5kb3VibGVRdW90ZWRNaW5NdWx0aUxpbmVMZW5ndGg7XG4gICAgY29uc3QgaW5kZW50ID0gY3R4LmluZGVudCB8fCAoY29udGFpbnNEb2N1bWVudE1hcmtlcih2YWx1ZSkgPyAnICAnIDogJycpO1xuICAgIGxldCBzdHIgPSAnJztcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBjaCA9IGpzb25baV07IGNoOyBjaCA9IGpzb25bKytpXSkge1xuICAgICAgICBpZiAoY2ggPT09ICcgJyAmJiBqc29uW2kgKyAxXSA9PT0gJ1xcXFwnICYmIGpzb25baSArIDJdID09PSAnbicpIHtcbiAgICAgICAgICAgIC8vIHNwYWNlIGJlZm9yZSBuZXdsaW5lIG5lZWRzIHRvIGJlIGVzY2FwZWQgdG8gbm90IGJlIGZvbGRlZFxuICAgICAgICAgICAgc3RyICs9IGpzb24uc2xpY2Uoc3RhcnQsIGkpICsgJ1xcXFwgJztcbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgIHN0YXJ0ID0gaTtcbiAgICAgICAgICAgIGNoID0gJ1xcXFwnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgc3dpdGNoIChqc29uW2kgKyAxXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0ganNvbi5zbGljZShzdGFydCwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0ganNvbi5zdWJzdHIoaSArIDIsIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMDAwMCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwMDA3JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXFxcYSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAwMGInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFx2JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMDAxYic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwMDg1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXFxcTic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAwYTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFxfJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMjAyOCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXEwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyMDI5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXFxcUCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlLnN1YnN0cigwLCAyKSA9PT0gJzAwJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxcXHgnICsgY29kZS5zdWJzdHIoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBqc29uLnN1YnN0cihpLCA2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbXBsaWNpdEtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbltpICsgMl0gPT09ICdcIicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ubGVuZ3RoIDwgbWluTXVsdGlMaW5lTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb2xkaW5nIHdpbGwgZWF0IGZpcnN0IG5ld2xpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBqc29uLnNsaWNlKHN0YXJ0LCBpKSArICdcXG5cXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25baSArIDJdID09PSAnXFxcXCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uW2kgKyAzXSA9PT0gJ24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbltpICsgNF0gIT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGluZGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwYWNlIGFmdGVyIG5ld2xpbmUgbmVlZHMgdG8gYmUgZXNjYXBlZCB0byBub3QgYmUgZm9sZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbltpICsgMl0gPT09ICcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcXFwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHN0ciA9IHN0YXJ0ID8gc3RyICsganNvbi5zbGljZShzdGFydCkgOiBqc29uO1xuICAgIHJldHVybiBpbXBsaWNpdEtleVxuICAgICAgICA/IHN0clxuICAgICAgICA6IGZvbGRGbG93TGluZXMoc3RyLCBpbmRlbnQsIEZPTERfUVVPVEVELCBnZXRGb2xkT3B0aW9ucyhjdHgsIGZhbHNlKSk7XG59XG5mdW5jdGlvbiBzaW5nbGVRdW90ZWRTdHJpbmcodmFsdWUsIGN0eCkge1xuICAgIGlmIChjdHgub3B0aW9ucy5zaW5nbGVRdW90ZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgKGN0eC5pbXBsaWNpdEtleSAmJiB2YWx1ZS5pbmNsdWRlcygnXFxuJykpIHx8XG4gICAgICAgIC9bIFxcdF1cXG58XFxuWyBcXHRdLy50ZXN0KHZhbHVlKSAvLyBzaW5nbGUgcXVvdGVkIHN0cmluZyBjYW4ndCBoYXZlIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhcm91bmQgbmV3bGluZVxuICAgIClcbiAgICAgICAgcmV0dXJuIGRvdWJsZVF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KTtcbiAgICBjb25zdCBpbmRlbnQgPSBjdHguaW5kZW50IHx8IChjb250YWluc0RvY3VtZW50TWFya2VyKHZhbHVlKSA/ICcgICcgOiAnJyk7XG4gICAgY29uc3QgcmVzID0gXCInXCIgKyB2YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIikucmVwbGFjZSgvXFxuKy9nLCBgJCZcXG4ke2luZGVudH1gKSArIFwiJ1wiO1xuICAgIHJldHVybiBjdHguaW1wbGljaXRLZXlcbiAgICAgICAgPyByZXNcbiAgICAgICAgOiBmb2xkRmxvd0xpbmVzKHJlcywgaW5kZW50LCBGT0xEX0ZMT1csIGdldEZvbGRPcHRpb25zKGN0eCwgZmFsc2UpKTtcbn1cbmZ1bmN0aW9uIHF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KSB7XG4gICAgY29uc3QgeyBzaW5nbGVRdW90ZSB9ID0gY3R4Lm9wdGlvbnM7XG4gICAgbGV0IHFzO1xuICAgIGlmIChzaW5nbGVRdW90ZSA9PT0gZmFsc2UpXG4gICAgICAgIHFzID0gZG91YmxlUXVvdGVkU3RyaW5nO1xuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBoYXNEb3VibGUgPSB2YWx1ZS5pbmNsdWRlcygnXCInKTtcbiAgICAgICAgY29uc3QgaGFzU2luZ2xlID0gdmFsdWUuaW5jbHVkZXMoXCInXCIpO1xuICAgICAgICBpZiAoaGFzRG91YmxlICYmICFoYXNTaW5nbGUpXG4gICAgICAgICAgICBxcyA9IHNpbmdsZVF1b3RlZFN0cmluZztcbiAgICAgICAgZWxzZSBpZiAoaGFzU2luZ2xlICYmICFoYXNEb3VibGUpXG4gICAgICAgICAgICBxcyA9IGRvdWJsZVF1b3RlZFN0cmluZztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcXMgPSBzaW5nbGVRdW90ZSA/IHNpbmdsZVF1b3RlZFN0cmluZyA6IGRvdWJsZVF1b3RlZFN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHFzKHZhbHVlLCBjdHgpO1xufVxuLy8gVGhlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgYXZvaWRzIGEgcG9seW5vbWlhbCBzZWFyY2gsXG4vLyBidXQgaXNuJ3Qgc3VwcG9ydGVkIHlldCBvbiBTYWZhcmk6IGh0dHBzOi8vY2FuaXVzZS5jb20vanMtcmVnZXhwLWxvb2tiZWhpbmRcbmxldCBibG9ja0VuZE5ld2xpbmVzO1xudHJ5IHtcbiAgICBibG9ja0VuZE5ld2xpbmVzID0gbmV3IFJlZ0V4cCgnKF58KD88IVxcbikpXFxuKyg/IVxcbnwkKScsICdnJyk7XG59XG5jYXRjaCB7XG4gICAgYmxvY2tFbmROZXdsaW5lcyA9IC9cXG4rKD8hXFxufCQpL2c7XG59XG5mdW5jdGlvbiBibG9ja1N0cmluZyh7IGNvbW1lbnQsIHR5cGUsIHZhbHVlIH0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgIGNvbnN0IHsgYmxvY2tRdW90ZSwgY29tbWVudFN0cmluZywgbGluZVdpZHRoIH0gPSBjdHgub3B0aW9ucztcbiAgICAvLyAxLiBCbG9jayBjYW4ndCBlbmQgaW4gd2hpdGVzcGFjZSB1bmxlc3MgdGhlIGxhc3QgbGluZSBpcyBub24tZW1wdHkuXG4gICAgLy8gMi4gU3RyaW5ncyBjb25zaXN0aW5nIG9mIG9ubHkgd2hpdGVzcGFjZSBhcmUgYmVzdCByZW5kZXJlZCBleHBsaWNpdGx5LlxuICAgIGlmICghYmxvY2tRdW90ZSB8fCAvXFxuW1xcdCBdKyQvLnRlc3QodmFsdWUpIHx8IC9eXFxzKiQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBxdW90ZWRTdHJpbmcodmFsdWUsIGN0eCk7XG4gICAgfVxuICAgIGNvbnN0IGluZGVudCA9IGN0eC5pbmRlbnQgfHxcbiAgICAgICAgKGN0eC5mb3JjZUJsb2NrSW5kZW50IHx8IGNvbnRhaW5zRG9jdW1lbnRNYXJrZXIodmFsdWUpID8gJyAgJyA6ICcnKTtcbiAgICBjb25zdCBsaXRlcmFsID0gYmxvY2tRdW90ZSA9PT0gJ2xpdGVyYWwnXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGJsb2NrUXVvdGUgPT09ICdmb2xkZWQnIHx8IHR5cGUgPT09IFNjYWxhci5CTE9DS19GT0xERURcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogdHlwZSA9PT0gU2NhbGFyLkJMT0NLX0xJVEVSQUxcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6ICFsaW5lTGVuZ3RoT3ZlckxpbWl0KHZhbHVlLCBsaW5lV2lkdGgsIGluZGVudC5sZW5ndGgpO1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBsaXRlcmFsID8gJ3xcXG4nIDogJz5cXG4nO1xuICAgIC8vIGRldGVybWluZSBjaG9tcGluZyBmcm9tIHdoaXRlc3BhY2UgYXQgdmFsdWUgZW5kXG4gICAgbGV0IGNob21wO1xuICAgIGxldCBlbmRTdGFydDtcbiAgICBmb3IgKGVuZFN0YXJ0ID0gdmFsdWUubGVuZ3RoOyBlbmRTdGFydCA+IDA7IC0tZW5kU3RhcnQpIHtcbiAgICAgICAgY29uc3QgY2ggPSB2YWx1ZVtlbmRTdGFydCAtIDFdO1xuICAgICAgICBpZiAoY2ggIT09ICdcXG4nICYmIGNoICE9PSAnXFx0JyAmJiBjaCAhPT0gJyAnKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGxldCBlbmQgPSB2YWx1ZS5zdWJzdHJpbmcoZW5kU3RhcnQpO1xuICAgIGNvbnN0IGVuZE5sUG9zID0gZW5kLmluZGV4T2YoJ1xcbicpO1xuICAgIGlmIChlbmRObFBvcyA9PT0gLTEpIHtcbiAgICAgICAgY2hvbXAgPSAnLSc7IC8vIHN0cmlwXG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlID09PSBlbmQgfHwgZW5kTmxQb3MgIT09IGVuZC5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNob21wID0gJysnOyAvLyBrZWVwXG4gICAgICAgIGlmIChvbkNob21wS2VlcClcbiAgICAgICAgICAgIG9uQ2hvbXBLZWVwKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaG9tcCA9ICcnOyAvLyBjbGlwXG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAtZW5kLmxlbmd0aCk7XG4gICAgICAgIGlmIChlbmRbZW5kLmxlbmd0aCAtIDFdID09PSAnXFxuJylcbiAgICAgICAgICAgIGVuZCA9IGVuZC5zbGljZSgwLCAtMSk7XG4gICAgICAgIGVuZCA9IGVuZC5yZXBsYWNlKGJsb2NrRW5kTmV3bGluZXMsIGAkJiR7aW5kZW50fWApO1xuICAgIH1cbiAgICAvLyBkZXRlcm1pbmUgaW5kZW50IGluZGljYXRvciBmcm9tIHdoaXRlc3BhY2UgYXQgdmFsdWUgc3RhcnRcbiAgICBsZXQgc3RhcnRXaXRoU3BhY2UgPSBmYWxzZTtcbiAgICBsZXQgc3RhcnRFbmQ7XG4gICAgbGV0IHN0YXJ0TmxQb3MgPSAtMTtcbiAgICBmb3IgKHN0YXJ0RW5kID0gMDsgc3RhcnRFbmQgPCB2YWx1ZS5sZW5ndGg7ICsrc3RhcnRFbmQpIHtcbiAgICAgICAgY29uc3QgY2ggPSB2YWx1ZVtzdGFydEVuZF07XG4gICAgICAgIGlmIChjaCA9PT0gJyAnKVxuICAgICAgICAgICAgc3RhcnRXaXRoU3BhY2UgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1xcbicpXG4gICAgICAgICAgICBzdGFydE5sUG9zID0gc3RhcnRFbmQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnRObFBvcyA8IHN0YXJ0RW5kID8gc3RhcnRObFBvcyArIDEgOiBzdGFydEVuZCk7XG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKHN0YXJ0Lmxlbmd0aCk7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQucmVwbGFjZSgvXFxuKy9nLCBgJCYke2luZGVudH1gKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZW50U2l6ZSA9IGluZGVudCA/ICcyJyA6ICcxJzsgLy8gcm9vdCBpcyBhdCAtMVxuICAgIGxldCBoZWFkZXIgPSAobGl0ZXJhbCA/ICd8JyA6ICc+JykgKyAoc3RhcnRXaXRoU3BhY2UgPyBpbmRlbnRTaXplIDogJycpICsgY2hvbXA7XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgaGVhZGVyICs9ICcgJyArIGNvbW1lbnRTdHJpbmcoY29tbWVudC5yZXBsYWNlKC8gP1tcXHJcXG5dKy9nLCAnICcpKTtcbiAgICAgICAgaWYgKG9uQ29tbWVudClcbiAgICAgICAgICAgIG9uQ29tbWVudCgpO1xuICAgIH1cbiAgICBpZiAobGl0ZXJhbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcbisvZywgYCQmJHtpbmRlbnR9YCk7XG4gICAgICAgIHJldHVybiBgJHtoZWFkZXJ9XFxuJHtpbmRlbnR9JHtzdGFydH0ke3ZhbHVlfSR7ZW5kfWA7XG4gICAgfVxuICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnJlcGxhY2UoL1xcbisvZywgJ1xcbiQmJylcbiAgICAgICAgLnJlcGxhY2UoLyg/Ol58XFxuKShbXFx0IF0uKikoPzooW1xcblxcdCBdKilcXG4oPyFbXFxuXFx0IF0pKT8vZywgJyQxJDInKSAvLyBtb3JlLWluZGVudGVkIGxpbmVzIGFyZW4ndCBmb2xkZWRcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgXiBtb3JlLWluZC4gXiBlbXB0eSAgICAgXiBjYXB0dXJlIG5leHQgZW1wdHkgbGluZXMgb25seSBhdCBlbmQgb2YgaW5kZW50XG4gICAgICAgIC5yZXBsYWNlKC9cXG4rL2csIGAkJiR7aW5kZW50fWApO1xuICAgIGNvbnN0IGJvZHkgPSBmb2xkRmxvd0xpbmVzKGAke3N0YXJ0fSR7dmFsdWV9JHtlbmR9YCwgaW5kZW50LCBGT0xEX0JMT0NLLCBnZXRGb2xkT3B0aW9ucyhjdHgsIHRydWUpKTtcbiAgICByZXR1cm4gYCR7aGVhZGVyfVxcbiR7aW5kZW50fSR7Ym9keX1gO1xufVxuZnVuY3Rpb24gcGxhaW5TdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICBjb25zdCB7IGFjdHVhbFN0cmluZywgaW1wbGljaXRLZXksIGluZGVudCwgaW5kZW50U3RlcCwgaW5GbG93IH0gPSBjdHg7XG4gICAgaWYgKChpbXBsaWNpdEtleSAmJiB2YWx1ZS5pbmNsdWRlcygnXFxuJykpIHx8XG4gICAgICAgIChpbkZsb3cgJiYgL1tbXFxde30sXS8udGVzdCh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBxdW90ZWRTdHJpbmcodmFsdWUsIGN0eCk7XG4gICAgfVxuICAgIGlmICghdmFsdWUgfHxcbiAgICAgICAgL15bXFxuXFx0ICxbXFxde30jJiohfD4nXCIlQGBdfF5bPy1dJHxeWz8tXVsgXFx0XXxbXFxuOl1bIFxcdF18WyBcXHRdXFxufFtcXG5cXHQgXSN8W1xcblxcdCA6XSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIC8vIG5vdCBhbGxvd2VkOlxuICAgICAgICAvLyAtIGVtcHR5IHN0cmluZywgJy0nIG9yICc/J1xuICAgICAgICAvLyAtIHN0YXJ0IHdpdGggYW4gaW5kaWNhdG9yIGNoYXJhY3RlciAoZXhjZXB0IFs/Oi1dKSBvciAvWz8tXSAvXG4gICAgICAgIC8vIC0gJ1xcbiAnLCAnOiAnIG9yICcgXFxuJyBhbnl3aGVyZVxuICAgICAgICAvLyAtICcjJyBub3QgcHJlY2VkZWQgYnkgYSBub24tc3BhY2UgY2hhclxuICAgICAgICAvLyAtIGVuZCB3aXRoICcgJyBvciAnOidcbiAgICAgICAgcmV0dXJuIGltcGxpY2l0S2V5IHx8IGluRmxvdyB8fCAhdmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICAgICAgICAgICA/IHF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KVxuICAgICAgICAgICAgOiBibG9ja1N0cmluZyhpdGVtLCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgIH1cbiAgICBpZiAoIWltcGxpY2l0S2V5ICYmXG4gICAgICAgICFpbkZsb3cgJiZcbiAgICAgICAgdHlwZSAhPT0gU2NhbGFyLlBMQUlOICYmXG4gICAgICAgIHZhbHVlLmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgICAvLyBXaGVyZSBhbGxvd2VkICYgdHlwZSBub3Qgc2V0IGV4cGxpY2l0bHksIHByZWZlciBibG9jayBzdHlsZSBmb3IgbXVsdGlsaW5lIHN0cmluZ3NcbiAgICAgICAgcmV0dXJuIGJsb2NrU3RyaW5nKGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gICAgfVxuICAgIGlmIChjb250YWluc0RvY3VtZW50TWFya2VyKHZhbHVlKSkge1xuICAgICAgICBpZiAoaW5kZW50ID09PSAnJykge1xuICAgICAgICAgICAgY3R4LmZvcmNlQmxvY2tJbmRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGJsb2NrU3RyaW5nKGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW1wbGljaXRLZXkgJiYgaW5kZW50ID09PSBpbmRlbnRTdGVwKSB7XG4gICAgICAgICAgICByZXR1cm4gcXVvdGVkU3RyaW5nKHZhbHVlLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0ciA9IHZhbHVlLnJlcGxhY2UoL1xcbisvZywgYCQmXFxuJHtpbmRlbnR9YCk7XG4gICAgLy8gVmVyaWZ5IHRoYXQgb3V0cHV0IHdpbGwgYmUgcGFyc2VkIGFzIGEgc3RyaW5nLCBhcyBlLmcuIHBsYWluIG51bWJlcnMgYW5kXG4gICAgLy8gYm9vbGVhbnMgZ2V0IHBhcnNlZCB3aXRoIHRob3NlIHR5cGVzIGluIHYxLjIgKGUuZy4gJzQyJywgJ3RydWUnICYgJzAuOWUtMycpLFxuICAgIC8vIGFuZCBvdGhlcnMgaW4gdjEuMS5cbiAgICBpZiAoYWN0dWFsU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRlc3QgPSAodGFnKSA9PiB0YWcuZGVmYXVsdCAmJiB0YWcudGFnICE9PSAndGFnOnlhbWwub3JnLDIwMDI6c3RyJyAmJiB0YWcudGVzdD8udGVzdChzdHIpO1xuICAgICAgICBjb25zdCB7IGNvbXBhdCwgdGFncyB9ID0gY3R4LmRvYy5zY2hlbWE7XG4gICAgICAgIGlmICh0YWdzLnNvbWUodGVzdCkgfHwgY29tcGF0Py5zb21lKHRlc3QpKVxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlZFN0cmluZyh2YWx1ZSwgY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIGltcGxpY2l0S2V5XG4gICAgICAgID8gc3RyXG4gICAgICAgIDogZm9sZEZsb3dMaW5lcyhzdHIsIGluZGVudCwgRk9MRF9GTE9XLCBnZXRGb2xkT3B0aW9ucyhjdHgsIGZhbHNlKSk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlTdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgY29uc3QgeyBpbXBsaWNpdEtleSwgaW5GbG93IH0gPSBjdHg7XG4gICAgY29uc3Qgc3MgPSB0eXBlb2YgaXRlbS52YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBpdGVtXG4gICAgICAgIDogT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwgeyB2YWx1ZTogU3RyaW5nKGl0ZW0udmFsdWUpIH0pO1xuICAgIGxldCB7IHR5cGUgfSA9IGl0ZW07XG4gICAgaWYgKHR5cGUgIT09IFNjYWxhci5RVU9URV9ET1VCTEUpIHtcbiAgICAgICAgLy8gZm9yY2UgZG91YmxlIHF1b3RlcyBvbiBjb250cm9sIGNoYXJhY3RlcnMgJiB1bnBhaXJlZCBzdXJyb2dhdGVzXG4gICAgICAgIGlmICgvW1xceDAwLVxceDA4XFx4MGItXFx4MWZcXHg3Zi1cXHg5ZlxcdXtEODAwfS1cXHV7REZGRn1dL3UudGVzdChzcy52YWx1ZSkpXG4gICAgICAgICAgICB0eXBlID0gU2NhbGFyLlFVT1RFX0RPVUJMRTtcbiAgICB9XG4gICAgY29uc3QgX3N0cmluZ2lmeSA9IChfdHlwZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKF90eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFNjYWxhci5CTE9DS19GT0xERUQ6XG4gICAgICAgICAgICBjYXNlIFNjYWxhci5CTE9DS19MSVRFUkFMOlxuICAgICAgICAgICAgICAgIHJldHVybiBpbXBsaWNpdEtleSB8fCBpbkZsb3dcbiAgICAgICAgICAgICAgICAgICAgPyBxdW90ZWRTdHJpbmcoc3MudmFsdWUsIGN0eCkgLy8gYmxvY2tzIGFyZSBub3QgdmFsaWQgaW5zaWRlIGZsb3cgY29udGFpbmVyc1xuICAgICAgICAgICAgICAgICAgICA6IGJsb2NrU3RyaW5nKHNzLCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgICAgICAgICAgY2FzZSBTY2FsYXIuUVVPVEVfRE9VQkxFOlxuICAgICAgICAgICAgICAgIHJldHVybiBkb3VibGVRdW90ZWRTdHJpbmcoc3MudmFsdWUsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIFNjYWxhci5RVU9URV9TSU5HTEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpbmdsZVF1b3RlZFN0cmluZyhzcy52YWx1ZSwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgU2NhbGFyLlBMQUlOOlxuICAgICAgICAgICAgICAgIHJldHVybiBwbGFpblN0cmluZyhzcywgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCByZXMgPSBfc3RyaW5naWZ5KHR5cGUpO1xuICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBkZWZhdWx0S2V5VHlwZSwgZGVmYXVsdFN0cmluZ1R5cGUgfSA9IGN0eC5vcHRpb25zO1xuICAgICAgICBjb25zdCB0ID0gKGltcGxpY2l0S2V5ICYmIGRlZmF1bHRLZXlUeXBlKSB8fCBkZWZhdWx0U3RyaW5nVHlwZTtcbiAgICAgICAgcmVzID0gX3N0cmluZ2lmeSh0KTtcbiAgICAgICAgaWYgKHJlcyA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGVmYXVsdCBzdHJpbmcgdHlwZSAke3R9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCB7IHN0cmluZ2lmeVN0cmluZyB9O1xuIiwgImltcG9ydCB7IGFuY2hvcklzVmFsaWQgfSBmcm9tICcuLi9kb2MvYW5jaG9ycy5qcyc7XG5pbXBvcnQgeyBpc1BhaXIsIGlzQWxpYXMsIGlzTm9kZSwgaXNTY2FsYXIsIGlzQ29sbGVjdGlvbiB9IGZyb20gJy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeUNvbW1lbnQgfSBmcm9tICcuL3N0cmluZ2lmeUNvbW1lbnQuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5U3RyaW5nIH0gZnJvbSAnLi9zdHJpbmdpZnlTdHJpbmcuanMnO1xuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdpZnlDb250ZXh0KGRvYywgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBibG9ja1F1b3RlOiB0cnVlLFxuICAgICAgICBjb21tZW50U3RyaW5nOiBzdHJpbmdpZnlDb21tZW50LFxuICAgICAgICBkZWZhdWx0S2V5VHlwZTogbnVsbCxcbiAgICAgICAgZGVmYXVsdFN0cmluZ1R5cGU6ICdQTEFJTicsXG4gICAgICAgIGRpcmVjdGl2ZXM6IG51bGwsXG4gICAgICAgIGRvdWJsZVF1b3RlZEFzSlNPTjogZmFsc2UsXG4gICAgICAgIGRvdWJsZVF1b3RlZE1pbk11bHRpTGluZUxlbmd0aDogNDAsXG4gICAgICAgIGZhbHNlU3RyOiAnZmFsc2UnLFxuICAgICAgICBmbG93Q29sbGVjdGlvblBhZGRpbmc6IHRydWUsXG4gICAgICAgIGluZGVudFNlcTogdHJ1ZSxcbiAgICAgICAgbGluZVdpZHRoOiA4MCxcbiAgICAgICAgbWluQ29udGVudFdpZHRoOiAyMCxcbiAgICAgICAgbnVsbFN0cjogJ251bGwnLFxuICAgICAgICBzaW1wbGVLZXlzOiBmYWxzZSxcbiAgICAgICAgc2luZ2xlUXVvdGU6IG51bGwsXG4gICAgICAgIHRydWVTdHI6ICd0cnVlJyxcbiAgICAgICAgdmVyaWZ5QWxpYXNPcmRlcjogdHJ1ZVxuICAgIH0sIGRvYy5zY2hlbWEudG9TdHJpbmdPcHRpb25zLCBvcHRpb25zKTtcbiAgICBsZXQgaW5GbG93O1xuICAgIHN3aXRjaCAob3B0LmNvbGxlY3Rpb25TdHlsZSkge1xuICAgICAgICBjYXNlICdibG9jayc6XG4gICAgICAgICAgICBpbkZsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmbG93JzpcbiAgICAgICAgICAgIGluRmxvdyA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGluRmxvdyA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGFuY2hvcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgZG9jLFxuICAgICAgICBmbG93Q29sbGVjdGlvblBhZGRpbmc6IG9wdC5mbG93Q29sbGVjdGlvblBhZGRpbmcgPyAnICcgOiAnJyxcbiAgICAgICAgaW5kZW50OiAnJyxcbiAgICAgICAgaW5kZW50U3RlcDogdHlwZW9mIG9wdC5pbmRlbnQgPT09ICdudW1iZXInID8gJyAnLnJlcGVhdChvcHQuaW5kZW50KSA6ICcgICcsXG4gICAgICAgIGluRmxvdyxcbiAgICAgICAgb3B0aW9uczogb3B0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFRhZ09iamVjdCh0YWdzLCBpdGVtKSB7XG4gICAgaWYgKGl0ZW0udGFnKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGFncy5maWx0ZXIodCA9PiB0LnRhZyA9PT0gaXRlbS50YWcpO1xuICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiBtYXRjaC5maW5kKHQgPT4gdC5mb3JtYXQgPT09IGl0ZW0uZm9ybWF0KSA/PyBtYXRjaFswXTtcbiAgICB9XG4gICAgbGV0IHRhZ09iaiA9IHVuZGVmaW5lZDtcbiAgICBsZXQgb2JqO1xuICAgIGlmIChpc1NjYWxhcihpdGVtKSkge1xuICAgICAgICBvYmogPSBpdGVtLnZhbHVlO1xuICAgICAgICBsZXQgbWF0Y2ggPSB0YWdzLmZpbHRlcih0ID0+IHQuaWRlbnRpZnk/LihvYmopKTtcbiAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RNYXRjaCA9IG1hdGNoLmZpbHRlcih0ID0+IHQudGVzdCk7XG4gICAgICAgICAgICBpZiAodGVzdE1hdGNoLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZXN0TWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgdGFnT2JqID1cbiAgICAgICAgICAgIG1hdGNoLmZpbmQodCA9PiB0LmZvcm1hdCA9PT0gaXRlbS5mb3JtYXQpID8/IG1hdGNoLmZpbmQodCA9PiAhdC5mb3JtYXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqID0gaXRlbTtcbiAgICAgICAgdGFnT2JqID0gdGFncy5maW5kKHQgPT4gdC5ub2RlQ2xhc3MgJiYgb2JqIGluc3RhbmNlb2YgdC5ub2RlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoIXRhZ09iaikge1xuICAgICAgICBjb25zdCBuYW1lID0gb2JqPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyB0eXBlb2Ygb2JqO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhZyBub3QgcmVzb2x2ZWQgZm9yICR7bmFtZX0gdmFsdWVgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhZ09iajtcbn1cbi8vIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdmFsdWUgc3RyaW5naWZpZXIgdG8gYWxsb3cgZm9yIGNpcmN1bGFyIGFuY2hvciByZWZzXG5mdW5jdGlvbiBzdHJpbmdpZnlQcm9wcyhub2RlLCB0YWdPYmosIHsgYW5jaG9ycywgZG9jIH0pIHtcbiAgICBpZiAoIWRvYy5kaXJlY3RpdmVzKVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgY29uc3QgcHJvcHMgPSBbXTtcbiAgICBjb25zdCBhbmNob3IgPSAoaXNTY2FsYXIobm9kZSkgfHwgaXNDb2xsZWN0aW9uKG5vZGUpKSAmJiBub2RlLmFuY2hvcjtcbiAgICBpZiAoYW5jaG9yICYmIGFuY2hvcklzVmFsaWQoYW5jaG9yKSkge1xuICAgICAgICBhbmNob3JzLmFkZChhbmNob3IpO1xuICAgICAgICBwcm9wcy5wdXNoKGAmJHthbmNob3J9YCk7XG4gICAgfVxuICAgIGNvbnN0IHRhZyA9IG5vZGUudGFnID8gbm9kZS50YWcgOiB0YWdPYmouZGVmYXVsdCA/IG51bGwgOiB0YWdPYmoudGFnO1xuICAgIGlmICh0YWcpXG4gICAgICAgIHByb3BzLnB1c2goZG9jLmRpcmVjdGl2ZXMudGFnU3RyaW5nKHRhZykpO1xuICAgIHJldHVybiBwcm9wcy5qb2luKCcgJyk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgaWYgKGlzUGFpcihpdGVtKSlcbiAgICAgICAgcmV0dXJuIGl0ZW0udG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcbiAgICBpZiAoaXNBbGlhcyhpdGVtKSkge1xuICAgICAgICBpZiAoY3R4LmRvYy5kaXJlY3RpdmVzKVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0udG9TdHJpbmcoY3R4KTtcbiAgICAgICAgaWYgKGN0eC5yZXNvbHZlZEFsaWFzZXM/LmhhcyhpdGVtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IHN0cmluZ2lmeSBjaXJjdWxhciBzdHJ1Y3R1cmUgd2l0aG91dCBhbGlhcyBub2Rlc2ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGN0eC5yZXNvbHZlZEFsaWFzZXMpXG4gICAgICAgICAgICAgICAgY3R4LnJlc29sdmVkQWxpYXNlcy5hZGQoaXRlbSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY3R4LnJlc29sdmVkQWxpYXNlcyA9IG5ldyBTZXQoW2l0ZW1dKTtcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnJlc29sdmUoY3R4LmRvYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRhZ09iaiA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBub2RlID0gaXNOb2RlKGl0ZW0pXG4gICAgICAgID8gaXRlbVxuICAgICAgICA6IGN0eC5kb2MuY3JlYXRlTm9kZShpdGVtLCB7IG9uVGFnT2JqOiBvID0+ICh0YWdPYmogPSBvKSB9KTtcbiAgICBpZiAoIXRhZ09iailcbiAgICAgICAgdGFnT2JqID0gZ2V0VGFnT2JqZWN0KGN0eC5kb2Muc2NoZW1hLnRhZ3MsIG5vZGUpO1xuICAgIGNvbnN0IHByb3BzID0gc3RyaW5naWZ5UHJvcHMobm9kZSwgdGFnT2JqLCBjdHgpO1xuICAgIGlmIChwcm9wcy5sZW5ndGggPiAwKVxuICAgICAgICBjdHguaW5kZW50QXRTdGFydCA9IChjdHguaW5kZW50QXRTdGFydCA/PyAwKSArIHByb3BzLmxlbmd0aCArIDE7XG4gICAgY29uc3Qgc3RyID0gdHlwZW9mIHRhZ09iai5zdHJpbmdpZnkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB0YWdPYmouc3RyaW5naWZ5KG5vZGUsIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcClcbiAgICAgICAgOiBpc1NjYWxhcihub2RlKVxuICAgICAgICAgICAgPyBzdHJpbmdpZnlTdHJpbmcobm9kZSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKVxuICAgICAgICAgICAgOiBub2RlLnRvU3RyaW5nKGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCk7XG4gICAgaWYgKCFwcm9wcylcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICByZXR1cm4gaXNTY2FsYXIobm9kZSkgfHwgc3RyWzBdID09PSAneycgfHwgc3RyWzBdID09PSAnWydcbiAgICAgICAgPyBgJHtwcm9wc30gJHtzdHJ9YFxuICAgICAgICA6IGAke3Byb3BzfVxcbiR7Y3R4LmluZGVudH0ke3N0cn1gO1xufVxuXG5leHBvcnQgeyBjcmVhdGVTdHJpbmdpZnlDb250ZXh0LCBzdHJpbmdpZnkgfTtcbiIsICJpbXBvcnQgeyBpc0NvbGxlY3Rpb24sIGlzTm9kZSwgaXNTY2FsYXIsIGlzU2VxIH0gZnJvbSAnLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vbm9kZXMvU2NhbGFyLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcbmltcG9ydCB7IGxpbmVDb21tZW50LCBpbmRlbnRDb21tZW50IH0gZnJvbSAnLi9zdHJpbmdpZnlDb21tZW50LmpzJztcblxuZnVuY3Rpb24gc3RyaW5naWZ5UGFpcih7IGtleSwgdmFsdWUgfSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgY29uc3QgeyBhbGxOdWxsVmFsdWVzLCBkb2MsIGluZGVudCwgaW5kZW50U3RlcCwgb3B0aW9uczogeyBjb21tZW50U3RyaW5nLCBpbmRlbnRTZXEsIHNpbXBsZUtleXMgfSB9ID0gY3R4O1xuICAgIGxldCBrZXlDb21tZW50ID0gKGlzTm9kZShrZXkpICYmIGtleS5jb21tZW50KSB8fCBudWxsO1xuICAgIGlmIChzaW1wbGVLZXlzKSB7XG4gICAgICAgIGlmIChrZXlDb21tZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dpdGggc2ltcGxlIGtleXMsIGtleSBub2RlcyBjYW5ub3QgaGF2ZSBjb21tZW50cycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NvbGxlY3Rpb24oa2V5KSB8fCAoIWlzTm9kZShrZXkpICYmIHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gJ1dpdGggc2ltcGxlIGtleXMsIGNvbGxlY3Rpb24gY2Fubm90IGJlIHVzZWQgYXMgYSBrZXkgdmFsdWUnO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGV4cGxpY2l0S2V5ID0gIXNpbXBsZUtleXMgJiZcbiAgICAgICAgKCFrZXkgfHxcbiAgICAgICAgICAgIChrZXlDb21tZW50ICYmIHZhbHVlID09IG51bGwgJiYgIWN0eC5pbkZsb3cpIHx8XG4gICAgICAgICAgICBpc0NvbGxlY3Rpb24oa2V5KSB8fFxuICAgICAgICAgICAgKGlzU2NhbGFyKGtleSlcbiAgICAgICAgICAgICAgICA/IGtleS50eXBlID09PSBTY2FsYXIuQkxPQ0tfRk9MREVEIHx8IGtleS50eXBlID09PSBTY2FsYXIuQkxPQ0tfTElURVJBTFxuICAgICAgICAgICAgICAgIDogdHlwZW9mIGtleSA9PT0gJ29iamVjdCcpKTtcbiAgICBjdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHtcbiAgICAgICAgYWxsTnVsbFZhbHVlczogZmFsc2UsXG4gICAgICAgIGltcGxpY2l0S2V5OiAhZXhwbGljaXRLZXkgJiYgKHNpbXBsZUtleXMgfHwgIWFsbE51bGxWYWx1ZXMpLFxuICAgICAgICBpbmRlbnQ6IGluZGVudCArIGluZGVudFN0ZXBcbiAgICB9KTtcbiAgICBsZXQga2V5Q29tbWVudERvbmUgPSBmYWxzZTtcbiAgICBsZXQgY2hvbXBLZWVwID0gZmFsc2U7XG4gICAgbGV0IHN0ciA9IHN0cmluZ2lmeShrZXksIGN0eCwgKCkgPT4gKGtleUNvbW1lbnREb25lID0gdHJ1ZSksICgpID0+IChjaG9tcEtlZXAgPSB0cnVlKSk7XG4gICAgaWYgKCFleHBsaWNpdEtleSAmJiAhY3R4LmluRmxvdyAmJiBzdHIubGVuZ3RoID4gMTAyNCkge1xuICAgICAgICBpZiAoc2ltcGxlS2V5cylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2l0aCBzaW1wbGUga2V5cywgc2luZ2xlIGxpbmUgc2NhbGFyIG11c3Qgbm90IHNwYW4gbW9yZSB0aGFuIDEwMjQgY2hhcmFjdGVycycpO1xuICAgICAgICBleHBsaWNpdEtleSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjdHguaW5GbG93KSB7XG4gICAgICAgIGlmIChhbGxOdWxsVmFsdWVzIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChrZXlDb21tZW50RG9uZSAmJiBvbkNvbW1lbnQpXG4gICAgICAgICAgICAgICAgb25Db21tZW50KCk7XG4gICAgICAgICAgICByZXR1cm4gc3RyID09PSAnJyA/ICc/JyA6IGV4cGxpY2l0S2V5ID8gYD8gJHtzdHJ9YCA6IHN0cjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgoYWxsTnVsbFZhbHVlcyAmJiAhc2ltcGxlS2V5cykgfHwgKHZhbHVlID09IG51bGwgJiYgZXhwbGljaXRLZXkpKSB7XG4gICAgICAgIHN0ciA9IGA/ICR7c3RyfWA7XG4gICAgICAgIGlmIChrZXlDb21tZW50ICYmICFrZXlDb21tZW50RG9uZSkge1xuICAgICAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgY3R4LmluZGVudCwgY29tbWVudFN0cmluZyhrZXlDb21tZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hvbXBLZWVwICYmIG9uQ2hvbXBLZWVwKVxuICAgICAgICAgICAgb25DaG9tcEtlZXAoKTtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgaWYgKGtleUNvbW1lbnREb25lKVxuICAgICAgICBrZXlDb21tZW50ID0gbnVsbDtcbiAgICBpZiAoZXhwbGljaXRLZXkpIHtcbiAgICAgICAgaWYgKGtleUNvbW1lbnQpXG4gICAgICAgICAgICBzdHIgKz0gbGluZUNvbW1lbnQoc3RyLCBjdHguaW5kZW50LCBjb21tZW50U3RyaW5nKGtleUNvbW1lbnQpKTtcbiAgICAgICAgc3RyID0gYD8gJHtzdHJ9XFxuJHtpbmRlbnR9OmA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdHIgPSBgJHtzdHJ9OmA7XG4gICAgICAgIGlmIChrZXlDb21tZW50KVxuICAgICAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgY3R4LmluZGVudCwgY29tbWVudFN0cmluZyhrZXlDb21tZW50KSk7XG4gICAgfVxuICAgIGxldCB2c2IsIHZjYiwgdmFsdWVDb21tZW50O1xuICAgIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgICAgIHZzYiA9ICEhdmFsdWUuc3BhY2VCZWZvcmU7XG4gICAgICAgIHZjYiA9IHZhbHVlLmNvbW1lbnRCZWZvcmU7XG4gICAgICAgIHZhbHVlQ29tbWVudCA9IHZhbHVlLmNvbW1lbnQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2c2IgPSBmYWxzZTtcbiAgICAgICAgdmNiID0gbnVsbDtcbiAgICAgICAgdmFsdWVDb21tZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICB2YWx1ZSA9IGRvYy5jcmVhdGVOb2RlKHZhbHVlKTtcbiAgICB9XG4gICAgY3R4LmltcGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgaWYgKCFleHBsaWNpdEtleSAmJiAha2V5Q29tbWVudCAmJiBpc1NjYWxhcih2YWx1ZSkpXG4gICAgICAgIGN0eC5pbmRlbnRBdFN0YXJ0ID0gc3RyLmxlbmd0aCArIDE7XG4gICAgY2hvbXBLZWVwID0gZmFsc2U7XG4gICAgaWYgKCFpbmRlbnRTZXEgJiZcbiAgICAgICAgaW5kZW50U3RlcC5sZW5ndGggPj0gMiAmJlxuICAgICAgICAhY3R4LmluRmxvdyAmJlxuICAgICAgICAhZXhwbGljaXRLZXkgJiZcbiAgICAgICAgaXNTZXEodmFsdWUpICYmXG4gICAgICAgICF2YWx1ZS5mbG93ICYmXG4gICAgICAgICF2YWx1ZS50YWcgJiZcbiAgICAgICAgIXZhbHVlLmFuY2hvcikge1xuICAgICAgICAvLyBJZiBpbmRlbnRTZXEgPT09IGZhbHNlLCBjb25zaWRlciAnLSAnIGFzIHBhcnQgb2YgaW5kZW50YXRpb24gd2hlcmUgcG9zc2libGVcbiAgICAgICAgY3R4LmluZGVudCA9IGN0eC5pbmRlbnQuc3Vic3RyaW5nKDIpO1xuICAgIH1cbiAgICBsZXQgdmFsdWVDb21tZW50RG9uZSA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbHVlU3RyID0gc3RyaW5naWZ5KHZhbHVlLCBjdHgsICgpID0+ICh2YWx1ZUNvbW1lbnREb25lID0gdHJ1ZSksICgpID0+IChjaG9tcEtlZXAgPSB0cnVlKSk7XG4gICAgbGV0IHdzID0gJyAnO1xuICAgIGlmIChrZXlDb21tZW50IHx8IHZzYiB8fCB2Y2IpIHtcbiAgICAgICAgd3MgPSB2c2IgPyAnXFxuJyA6ICcnO1xuICAgICAgICBpZiAodmNiKSB7XG4gICAgICAgICAgICBjb25zdCBjcyA9IGNvbW1lbnRTdHJpbmcodmNiKTtcbiAgICAgICAgICAgIHdzICs9IGBcXG4ke2luZGVudENvbW1lbnQoY3MsIGN0eC5pbmRlbnQpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlU3RyID09PSAnJyAmJiAhY3R4LmluRmxvdykge1xuICAgICAgICAgICAgaWYgKHdzID09PSAnXFxuJylcbiAgICAgICAgICAgICAgICB3cyA9ICdcXG5cXG4nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd3MgKz0gYFxcbiR7Y3R4LmluZGVudH1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKCFleHBsaWNpdEtleSAmJiBpc0NvbGxlY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHZzMCA9IHZhbHVlU3RyWzBdO1xuICAgICAgICBjb25zdCBubDAgPSB2YWx1ZVN0ci5pbmRleE9mKCdcXG4nKTtcbiAgICAgICAgY29uc3QgaGFzTmV3bGluZSA9IG5sMCAhPT0gLTE7XG4gICAgICAgIGNvbnN0IGZsb3cgPSBjdHguaW5GbG93ID8/IHZhbHVlLmZsb3cgPz8gdmFsdWUuaXRlbXMubGVuZ3RoID09PSAwO1xuICAgICAgICBpZiAoaGFzTmV3bGluZSB8fCAhZmxvdykge1xuICAgICAgICAgICAgbGV0IGhhc1Byb3BzTGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGhhc05ld2xpbmUgJiYgKHZzMCA9PT0gJyYnIHx8IHZzMCA9PT0gJyEnKSkge1xuICAgICAgICAgICAgICAgIGxldCBzcDAgPSB2YWx1ZVN0ci5pbmRleE9mKCcgJyk7XG4gICAgICAgICAgICAgICAgaWYgKHZzMCA9PT0gJyYnICYmXG4gICAgICAgICAgICAgICAgICAgIHNwMCAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgc3AwIDwgbmwwICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyW3NwMCArIDFdID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICAgICAgc3AwID0gdmFsdWVTdHIuaW5kZXhPZignICcsIHNwMCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3AwID09PSAtMSB8fCBubDAgPCBzcDApXG4gICAgICAgICAgICAgICAgICAgIGhhc1Byb3BzTGluZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc1Byb3BzTGluZSlcbiAgICAgICAgICAgICAgICB3cyA9IGBcXG4ke2N0eC5pbmRlbnR9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZVN0ciA9PT0gJycgfHwgdmFsdWVTdHJbMF0gPT09ICdcXG4nKSB7XG4gICAgICAgIHdzID0gJyc7XG4gICAgfVxuICAgIHN0ciArPSB3cyArIHZhbHVlU3RyO1xuICAgIGlmIChjdHguaW5GbG93KSB7XG4gICAgICAgIGlmICh2YWx1ZUNvbW1lbnREb25lICYmIG9uQ29tbWVudClcbiAgICAgICAgICAgIG9uQ29tbWVudCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZUNvbW1lbnQgJiYgIXZhbHVlQ29tbWVudERvbmUpIHtcbiAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgY3R4LmluZGVudCwgY29tbWVudFN0cmluZyh2YWx1ZUNvbW1lbnQpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hvbXBLZWVwICYmIG9uQ2hvbXBLZWVwKSB7XG4gICAgICAgIG9uQ2hvbXBLZWVwKCk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCB7IHN0cmluZ2lmeVBhaXIgfTtcbiIsICJmdW5jdGlvbiBkZWJ1Zyhsb2dMZXZlbCwgLi4ubWVzc2FnZXMpIHtcbiAgICBpZiAobG9nTGV2ZWwgPT09ICdkZWJ1ZycpXG4gICAgICAgIGNvbnNvbGUubG9nKC4uLm1lc3NhZ2VzKTtcbn1cbmZ1bmN0aW9uIHdhcm4obG9nTGV2ZWwsIHdhcm5pbmcpIHtcbiAgICBpZiAobG9nTGV2ZWwgPT09ICdkZWJ1ZycgfHwgbG9nTGV2ZWwgPT09ICd3YXJuJykge1xuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW1pdFdhcm5pbmcpXG4gICAgICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKHdhcm5pbmcpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBkZWJ1Zywgd2FybiB9O1xuIiwgImltcG9ydCB7IGlzU2NhbGFyLCBpc0FsaWFzLCBpc1NlcSwgaXNNYXAgfSBmcm9tICcuLi8uLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuXG4vLyBJZiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgbWVyZ2Uga2V5IGlzIGEgc2luZ2xlIG1hcHBpbmcgbm9kZSwgZWFjaCBvZlxuLy8gaXRzIGtleS92YWx1ZSBwYWlycyBpcyBpbnNlcnRlZCBpbnRvIHRoZSBjdXJyZW50IG1hcHBpbmcsIHVubGVzcyB0aGUga2V5XG4vLyBhbHJlYWR5IGV4aXN0cyBpbiBpdC4gSWYgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVyZ2Uga2V5IGlzIGFcbi8vIHNlcXVlbmNlLCB0aGVuIHRoaXMgc2VxdWVuY2UgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBtYXBwaW5nIG5vZGVzIGFuZCBlYWNoXG4vLyBvZiB0aGVzZSBub2RlcyBpcyBtZXJnZWQgaW4gdHVybiBhY2NvcmRpbmcgdG8gaXRzIG9yZGVyIGluIHRoZSBzZXF1ZW5jZS5cbi8vIEtleXMgaW4gbWFwcGluZyBub2RlcyBlYXJsaWVyIGluIHRoZSBzZXF1ZW5jZSBvdmVycmlkZSBrZXlzIHNwZWNpZmllZCBpblxuLy8gbGF0ZXIgbWFwcGluZyBub2Rlcy4gLS0gaHR0cDovL3lhbWwub3JnL3R5cGUvbWVyZ2UuaHRtbFxuY29uc3QgTUVSR0VfS0VZID0gJzw8JztcbmNvbnN0IG1lcmdlID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB2YWx1ZSA9PT0gTUVSR0VfS0VZIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnICYmIHZhbHVlLmRlc2NyaXB0aW9uID09PSBNRVJHRV9LRVkpLFxuICAgIGRlZmF1bHQ6ICdrZXknLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOm1lcmdlJyxcbiAgICB0ZXN0OiAvXjw8JC8sXG4gICAgcmVzb2x2ZTogKCkgPT4gT2JqZWN0LmFzc2lnbihuZXcgU2NhbGFyKFN5bWJvbChNRVJHRV9LRVkpKSwge1xuICAgICAgICBhZGRUb0pTTWFwOiBhZGRNZXJnZVRvSlNNYXBcbiAgICB9KSxcbiAgICBzdHJpbmdpZnk6ICgpID0+IE1FUkdFX0tFWVxufTtcbmNvbnN0IGlzTWVyZ2VLZXkgPSAoY3R4LCBrZXkpID0+IChtZXJnZS5pZGVudGlmeShrZXkpIHx8XG4gICAgKGlzU2NhbGFyKGtleSkgJiZcbiAgICAgICAgKCFrZXkudHlwZSB8fCBrZXkudHlwZSA9PT0gU2NhbGFyLlBMQUlOKSAmJlxuICAgICAgICBtZXJnZS5pZGVudGlmeShrZXkudmFsdWUpKSkgJiZcbiAgICBjdHg/LmRvYy5zY2hlbWEudGFncy5zb21lKHRhZyA9PiB0YWcudGFnID09PSBtZXJnZS50YWcgJiYgdGFnLmRlZmF1bHQpO1xuZnVuY3Rpb24gYWRkTWVyZ2VUb0pTTWFwKGN0eCwgbWFwLCB2YWx1ZSkge1xuICAgIHZhbHVlID0gY3R4ICYmIGlzQWxpYXModmFsdWUpID8gdmFsdWUucmVzb2x2ZShjdHguZG9jKSA6IHZhbHVlO1xuICAgIGlmIChpc1NlcSh2YWx1ZSkpXG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgdmFsdWUuaXRlbXMpXG4gICAgICAgICAgICBtZXJnZVZhbHVlKGN0eCwgbWFwLCBpdCk7XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgdmFsdWUpXG4gICAgICAgICAgICBtZXJnZVZhbHVlKGN0eCwgbWFwLCBpdCk7XG4gICAgZWxzZVxuICAgICAgICBtZXJnZVZhbHVlKGN0eCwgbWFwLCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBtZXJnZVZhbHVlKGN0eCwgbWFwLCB2YWx1ZSkge1xuICAgIGNvbnN0IHNvdXJjZSA9IGN0eCAmJiBpc0FsaWFzKHZhbHVlKSA/IHZhbHVlLnJlc29sdmUoY3R4LmRvYykgOiB2YWx1ZTtcbiAgICBpZiAoIWlzTWFwKHNvdXJjZSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWVyZ2Ugc291cmNlcyBtdXN0IGJlIG1hcHMgb3IgbWFwIGFsaWFzZXMnKTtcbiAgICBjb25zdCBzcmNNYXAgPSBzb3VyY2UudG9KU09OKG51bGwsIGN0eCwgTWFwKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzcmNNYXApIHtcbiAgICAgICAgaWYgKG1hcCBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgaWYgKCFtYXAuaGFzKGtleSkpXG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXAgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIG1hcC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwga2V5KSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1hcCwga2V5LCB7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCB7IGFkZE1lcmdlVG9KU01hcCwgaXNNZXJnZUtleSwgbWVyZ2UgfTtcbiIsICJpbXBvcnQgeyB3YXJuIH0gZnJvbSAnLi4vbG9nLmpzJztcbmltcG9ydCB7IGlzTWVyZ2VLZXksIGFkZE1lcmdlVG9KU01hcCB9IGZyb20gJy4uL3NjaGVtYS95YW1sLTEuMS9tZXJnZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdHJpbmdpZnlDb250ZXh0IH0gZnJvbSAnLi4vc3RyaW5naWZ5L3N0cmluZ2lmeS5qcyc7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IHRvSlMgfSBmcm9tICcuL3RvSlMuanMnO1xuXG5mdW5jdGlvbiBhZGRQYWlyVG9KU01hcChjdHgsIG1hcCwgeyBrZXksIHZhbHVlIH0pIHtcbiAgICBpZiAoaXNOb2RlKGtleSkgJiYga2V5LmFkZFRvSlNNYXApXG4gICAgICAgIGtleS5hZGRUb0pTTWFwKGN0eCwgbWFwLCB2YWx1ZSk7XG4gICAgLy8gVE9ETzogU2hvdWxkIGRyb3AgdGhpcyBzcGVjaWFsIGNhc2UgZm9yIGJhcmUgPDwgaGFuZGxpbmdcbiAgICBlbHNlIGlmIChpc01lcmdlS2V5KGN0eCwga2V5KSlcbiAgICAgICAgYWRkTWVyZ2VUb0pTTWFwKGN0eCwgbWFwLCB2YWx1ZSk7XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGpzS2V5ID0gdG9KUyhrZXksICcnLCBjdHgpO1xuICAgICAgICBpZiAobWFwIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICBtYXAuc2V0KGpzS2V5LCB0b0pTKHZhbHVlLCBqc0tleSwgY3R4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWFwIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICBtYXAuYWRkKGpzS2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ0tleSA9IHN0cmluZ2lmeUtleShrZXksIGpzS2V5LCBjdHgpO1xuICAgICAgICAgICAgY29uc3QganNWYWx1ZSA9IHRvSlModmFsdWUsIHN0cmluZ0tleSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChzdHJpbmdLZXkgaW4gbWFwKVxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtYXAsIHN0cmluZ0tleSwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToganNWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG1hcFtzdHJpbmdLZXldID0ganNWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5S2V5KGtleSwganNLZXksIGN0eCkge1xuICAgIGlmIChqc0tleSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIGlmICh0eXBlb2YganNLZXkgIT09ICdvYmplY3QnKVxuICAgICAgICByZXR1cm4gU3RyaW5nKGpzS2V5KTtcbiAgICBpZiAoaXNOb2RlKGtleSkgJiYgY3R4Py5kb2MpIHtcbiAgICAgICAgY29uc3Qgc3RyQ3R4ID0gY3JlYXRlU3RyaW5naWZ5Q29udGV4dChjdHguZG9jLCB7fSk7XG4gICAgICAgIHN0ckN0eC5hbmNob3JzID0gbmV3IFNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgY3R4LmFuY2hvcnMua2V5cygpKVxuICAgICAgICAgICAgc3RyQ3R4LmFuY2hvcnMuYWRkKG5vZGUuYW5jaG9yKTtcbiAgICAgICAgc3RyQ3R4LmluRmxvdyA9IHRydWU7XG4gICAgICAgIHN0ckN0eC5pblN0cmluZ2lmeUtleSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHN0cktleSA9IGtleS50b1N0cmluZyhzdHJDdHgpO1xuICAgICAgICBpZiAoIWN0eC5tYXBLZXlXYXJuZWQpIHtcbiAgICAgICAgICAgIGxldCBqc29uU3RyID0gSlNPTi5zdHJpbmdpZnkoc3RyS2V5KTtcbiAgICAgICAgICAgIGlmIChqc29uU3RyLmxlbmd0aCA+IDQwKVxuICAgICAgICAgICAgICAgIGpzb25TdHIgPSBqc29uU3RyLnN1YnN0cmluZygwLCAzNikgKyAnLi4uXCInO1xuICAgICAgICAgICAgd2FybihjdHguZG9jLm9wdGlvbnMubG9nTGV2ZWwsIGBLZXlzIHdpdGggY29sbGVjdGlvbiB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZCBkdWUgdG8gSlMgT2JqZWN0IHJlc3RyaWN0aW9uczogJHtqc29uU3RyfS4gU2V0IG1hcEFzTWFwOiB0cnVlIHRvIHVzZSBvYmplY3Qga2V5cy5gKTtcbiAgICAgICAgICAgIGN0eC5tYXBLZXlXYXJuZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJLZXk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc0tleSk7XG59XG5cbmV4cG9ydCB7IGFkZFBhaXJUb0pTTWFwIH07XG4iLCAiaW1wb3J0IHsgY3JlYXRlTm9kZSB9IGZyb20gJy4uL2RvYy9jcmVhdGVOb2RlLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeVBhaXIgfSBmcm9tICcuLi9zdHJpbmdpZnkvc3RyaW5naWZ5UGFpci5qcyc7XG5pbXBvcnQgeyBhZGRQYWlyVG9KU01hcCB9IGZyb20gJy4vYWRkUGFpclRvSlNNYXAuanMnO1xuaW1wb3J0IHsgTk9ERV9UWVBFLCBQQUlSLCBpc05vZGUgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuZnVuY3Rpb24gY3JlYXRlUGFpcihrZXksIHZhbHVlLCBjdHgpIHtcbiAgICBjb25zdCBrID0gY3JlYXRlTm9kZShrZXksIHVuZGVmaW5lZCwgY3R4KTtcbiAgICBjb25zdCB2ID0gY3JlYXRlTm9kZSh2YWx1ZSwgdW5kZWZpbmVkLCBjdHgpO1xuICAgIHJldHVybiBuZXcgUGFpcihrLCB2KTtcbn1cbmNsYXNzIFBhaXIge1xuICAgIGNvbnN0cnVjdG9yKGtleSwgdmFsdWUgPSBudWxsKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBOT0RFX1RZUEUsIHsgdmFsdWU6IFBBSVIgfSk7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGNsb25lKHNjaGVtYSkge1xuICAgICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXNOb2RlKGtleSkpXG4gICAgICAgICAgICBrZXkgPSBrZXkuY2xvbmUoc2NoZW1hKTtcbiAgICAgICAgaWYgKGlzTm9kZSh2YWx1ZSkpXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNsb25lKHNjaGVtYSk7XG4gICAgICAgIHJldHVybiBuZXcgUGFpcihrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgdG9KU09OKF8sIGN0eCkge1xuICAgICAgICBjb25zdCBwYWlyID0gY3R4Py5tYXBBc01hcCA/IG5ldyBNYXAoKSA6IHt9O1xuICAgICAgICByZXR1cm4gYWRkUGFpclRvSlNNYXAoY3R4LCBwYWlyLCB0aGlzKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgICAgIHJldHVybiBjdHg/LmRvY1xuICAgICAgICAgICAgPyBzdHJpbmdpZnlQYWlyKHRoaXMsIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcClcbiAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkodGhpcyk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBQYWlyLCBjcmVhdGVQYWlyIH07XG4iLCAiaW1wb3J0IHsgaXNOb2RlLCBpc1BhaXIgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5pbXBvcnQgeyBsaW5lQ29tbWVudCwgaW5kZW50Q29tbWVudCB9IGZyb20gJy4vc3RyaW5naWZ5Q29tbWVudC5qcyc7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNvbGxlY3Rpb24oY29sbGVjdGlvbiwgY3R4LCBvcHRpb25zKSB7XG4gICAgY29uc3QgZmxvdyA9IGN0eC5pbkZsb3cgPz8gY29sbGVjdGlvbi5mbG93O1xuICAgIGNvbnN0IHN0cmluZ2lmeSA9IGZsb3cgPyBzdHJpbmdpZnlGbG93Q29sbGVjdGlvbiA6IHN0cmluZ2lmeUJsb2NrQ29sbGVjdGlvbjtcbiAgICByZXR1cm4gc3RyaW5naWZ5KGNvbGxlY3Rpb24sIGN0eCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlCbG9ja0NvbGxlY3Rpb24oeyBjb21tZW50LCBpdGVtcyB9LCBjdHgsIHsgYmxvY2tJdGVtUHJlZml4LCBmbG93Q2hhcnMsIGl0ZW1JbmRlbnQsIG9uQ2hvbXBLZWVwLCBvbkNvbW1lbnQgfSkge1xuICAgIGNvbnN0IHsgaW5kZW50LCBvcHRpb25zOiB7IGNvbW1lbnRTdHJpbmcgfSB9ID0gY3R4O1xuICAgIGNvbnN0IGl0ZW1DdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHsgaW5kZW50OiBpdGVtSW5kZW50LCB0eXBlOiBudWxsIH0pO1xuICAgIGxldCBjaG9tcEtlZXAgPSBmYWxzZTsgLy8gZmxhZyBmb3IgdGhlIHByZWNlZGluZyBub2RlJ3Mgc3RhdHVzXG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgbGV0IGNvbW1lbnQgPSBudWxsO1xuICAgICAgICBpZiAoaXNOb2RlKGl0ZW0pKSB7XG4gICAgICAgICAgICBpZiAoIWNob21wS2VlcCAmJiBpdGVtLnNwYWNlQmVmb3JlKVxuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgICAgICAgICAgYWRkQ29tbWVudEJlZm9yZShjdHgsIGxpbmVzLCBpdGVtLmNvbW1lbnRCZWZvcmUsIGNob21wS2VlcCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5jb21tZW50KVxuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBpdGVtLmNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNQYWlyKGl0ZW0pKSB7XG4gICAgICAgICAgICBjb25zdCBpayA9IGlzTm9kZShpdGVtLmtleSkgPyBpdGVtLmtleSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaWspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNob21wS2VlcCAmJiBpay5zcGFjZUJlZm9yZSlcbiAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgYWRkQ29tbWVudEJlZm9yZShjdHgsIGxpbmVzLCBpay5jb21tZW50QmVmb3JlLCBjaG9tcEtlZXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNob21wS2VlcCA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RyID0gc3RyaW5naWZ5KGl0ZW0sIGl0ZW1DdHgsICgpID0+IChjb21tZW50ID0gbnVsbCksICgpID0+IChjaG9tcEtlZXAgPSB0cnVlKSk7XG4gICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgaXRlbUluZGVudCwgY29tbWVudFN0cmluZyhjb21tZW50KSk7XG4gICAgICAgIGlmIChjaG9tcEtlZXAgJiYgY29tbWVudClcbiAgICAgICAgICAgIGNob21wS2VlcCA9IGZhbHNlO1xuICAgICAgICBsaW5lcy5wdXNoKGJsb2NrSXRlbVByZWZpeCArIHN0cik7XG4gICAgfVxuICAgIGxldCBzdHI7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzdHIgPSBmbG93Q2hhcnMuc3RhcnQgKyBmbG93Q2hhcnMuZW5kO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3RyID0gbGluZXNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcbiAgICAgICAgICAgIHN0ciArPSBsaW5lID8gYFxcbiR7aW5kZW50fSR7bGluZX1gIDogJ1xcbic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgc3RyICs9ICdcXG4nICsgaW5kZW50Q29tbWVudChjb21tZW50U3RyaW5nKGNvbW1lbnQpLCBpbmRlbnQpO1xuICAgICAgICBpZiAob25Db21tZW50KVxuICAgICAgICAgICAgb25Db21tZW50KCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNob21wS2VlcCAmJiBvbkNob21wS2VlcClcbiAgICAgICAgb25DaG9tcEtlZXAoKTtcbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5Rmxvd0NvbGxlY3Rpb24oeyBpdGVtcyB9LCBjdHgsIHsgZmxvd0NoYXJzLCBpdGVtSW5kZW50IH0pIHtcbiAgICBjb25zdCB7IGluZGVudCwgaW5kZW50U3RlcCwgZmxvd0NvbGxlY3Rpb25QYWRkaW5nOiBmY1BhZGRpbmcsIG9wdGlvbnM6IHsgY29tbWVudFN0cmluZyB9IH0gPSBjdHg7XG4gICAgaXRlbUluZGVudCArPSBpbmRlbnRTdGVwO1xuICAgIGNvbnN0IGl0ZW1DdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHtcbiAgICAgICAgaW5kZW50OiBpdGVtSW5kZW50LFxuICAgICAgICBpbkZsb3c6IHRydWUsXG4gICAgICAgIHR5cGU6IG51bGxcbiAgICB9KTtcbiAgICBsZXQgcmVxTmV3bGluZSA9IGZhbHNlO1xuICAgIGxldCBsaW5lc0F0VmFsdWUgPSAwO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGxldCBjb21tZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKGlzTm9kZShpdGVtKSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uc3BhY2VCZWZvcmUpXG4gICAgICAgICAgICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICAgICAgICBhZGRDb21tZW50QmVmb3JlKGN0eCwgbGluZXMsIGl0ZW0uY29tbWVudEJlZm9yZSwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKGl0ZW0uY29tbWVudClcbiAgICAgICAgICAgICAgICBjb21tZW50ID0gaXRlbS5jb21tZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUGFpcihpdGVtKSkge1xuICAgICAgICAgICAgY29uc3QgaWsgPSBpc05vZGUoaXRlbS5rZXkpID8gaXRlbS5rZXkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlrLnNwYWNlQmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICBhZGRDb21tZW50QmVmb3JlKGN0eCwgbGluZXMsIGlrLmNvbW1lbnRCZWZvcmUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaWsuY29tbWVudClcbiAgICAgICAgICAgICAgICAgICAgcmVxTmV3bGluZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdiA9IGlzTm9kZShpdGVtLnZhbHVlKSA/IGl0ZW0udmFsdWUgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGl2KSB7XG4gICAgICAgICAgICAgICAgaWYgKGl2LmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBpdi5jb21tZW50O1xuICAgICAgICAgICAgICAgIGlmIChpdi5jb21tZW50QmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICByZXFOZXdsaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0udmFsdWUgPT0gbnVsbCAmJiBpaz8uY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBpay5jb21tZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgcmVxTmV3bGluZSA9IHRydWU7XG4gICAgICAgIGxldCBzdHIgPSBzdHJpbmdpZnkoaXRlbSwgaXRlbUN0eCwgKCkgPT4gKGNvbW1lbnQgPSBudWxsKSk7XG4gICAgICAgIGlmIChpIDwgaXRlbXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHN0ciArPSAnLCc7XG4gICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgc3RyICs9IGxpbmVDb21tZW50KHN0ciwgaXRlbUluZGVudCwgY29tbWVudFN0cmluZyhjb21tZW50KSk7XG4gICAgICAgIGlmICghcmVxTmV3bGluZSAmJiAobGluZXMubGVuZ3RoID4gbGluZXNBdFZhbHVlIHx8IHN0ci5pbmNsdWRlcygnXFxuJykpKVxuICAgICAgICAgICAgcmVxTmV3bGluZSA9IHRydWU7XG4gICAgICAgIGxpbmVzLnB1c2goc3RyKTtcbiAgICAgICAgbGluZXNBdFZhbHVlID0gbGluZXMubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGZsb3dDaGFycztcbiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzdGFydCArIGVuZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghcmVxTmV3bGluZSkge1xuICAgICAgICAgICAgY29uc3QgbGVuID0gbGluZXMucmVkdWNlKChzdW0sIGxpbmUpID0+IHN1bSArIGxpbmUubGVuZ3RoICsgMiwgMik7XG4gICAgICAgICAgICByZXFOZXdsaW5lID0gY3R4Lm9wdGlvbnMubGluZVdpZHRoID4gMCAmJiBsZW4gPiBjdHgub3B0aW9ucy5saW5lV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcU5ld2xpbmUpIHtcbiAgICAgICAgICAgIGxldCBzdHIgPSBzdGFydDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcylcbiAgICAgICAgICAgICAgICBzdHIgKz0gbGluZSA/IGBcXG4ke2luZGVudFN0ZXB9JHtpbmRlbnR9JHtsaW5lfWAgOiAnXFxuJztcbiAgICAgICAgICAgIHJldHVybiBgJHtzdHJ9XFxuJHtpbmRlbnR9JHtlbmR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtzdGFydH0ke2ZjUGFkZGluZ30ke2xpbmVzLmpvaW4oJyAnKX0ke2ZjUGFkZGluZ30ke2VuZH1gO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkQ29tbWVudEJlZm9yZSh7IGluZGVudCwgb3B0aW9uczogeyBjb21tZW50U3RyaW5nIH0gfSwgbGluZXMsIGNvbW1lbnQsIGNob21wS2VlcCkge1xuICAgIGlmIChjb21tZW50ICYmIGNob21wS2VlcClcbiAgICAgICAgY29tbWVudCA9IGNvbW1lbnQucmVwbGFjZSgvXlxcbisvLCAnJyk7XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWMgPSBpbmRlbnRDb21tZW50KGNvbW1lbnRTdHJpbmcoY29tbWVudCksIGluZGVudCk7XG4gICAgICAgIGxpbmVzLnB1c2goaWMudHJpbVN0YXJ0KCkpOyAvLyBBdm9pZCBkb3VibGUgaW5kZW50IG9uIGZpcnN0IGxpbmVcbiAgICB9XG59XG5cbmV4cG9ydCB7IHN0cmluZ2lmeUNvbGxlY3Rpb24gfTtcbiIsICJpbXBvcnQgeyBzdHJpbmdpZnlDb2xsZWN0aW9uIH0gZnJvbSAnLi4vc3RyaW5naWZ5L3N0cmluZ2lmeUNvbGxlY3Rpb24uanMnO1xuaW1wb3J0IHsgYWRkUGFpclRvSlNNYXAgfSBmcm9tICcuL2FkZFBhaXJUb0pTTWFwLmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24uanMnO1xuaW1wb3J0IHsgaXNQYWlyLCBpc1NjYWxhciwgTUFQIH0gZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBQYWlyLCBjcmVhdGVQYWlyIH0gZnJvbSAnLi9QYWlyLmpzJztcbmltcG9ydCB7IGlzU2NhbGFyVmFsdWUgfSBmcm9tICcuL1NjYWxhci5qcyc7XG5cbmZ1bmN0aW9uIGZpbmRQYWlyKGl0ZW1zLCBrZXkpIHtcbiAgICBjb25zdCBrID0gaXNTY2FsYXIoa2V5KSA/IGtleS52YWx1ZSA6IGtleTtcbiAgICBmb3IgKGNvbnN0IGl0IG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmIChpc1BhaXIoaXQpKSB7XG4gICAgICAgICAgICBpZiAoaXQua2V5ID09PSBrZXkgfHwgaXQua2V5ID09PSBrKVxuICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgIGlmIChpc1NjYWxhcihpdC5rZXkpICYmIGl0LmtleS52YWx1ZSA9PT0gaylcbiAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmNsYXNzIFlBTUxNYXAgZXh0ZW5kcyBDb2xsZWN0aW9uIHtcbiAgICBzdGF0aWMgZ2V0IHRhZ05hbWUoKSB7XG4gICAgICAgIHJldHVybiAndGFnOnlhbWwub3JnLDIwMDI6bWFwJztcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc2NoZW1hKSB7XG4gICAgICAgIHN1cGVyKE1BUCwgc2NoZW1hKTtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIGdlbmVyaWMgY29sbGVjdGlvbiBwYXJzaW5nIG1ldGhvZCB0aGF0IGNhbiBiZSBleHRlbmRlZFxuICAgICAqIHRvIG90aGVyIG5vZGUgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbSBZQU1MTWFwXG4gICAgICovXG4gICAgc3RhdGljIGZyb20oc2NoZW1hLCBvYmosIGN0eCkge1xuICAgICAgICBjb25zdCB7IGtlZXBVbmRlZmluZWQsIHJlcGxhY2VyIH0gPSBjdHg7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyB0aGlzKHNjaGVtYSk7XG4gICAgICAgIGNvbnN0IGFkZCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZXIuY2FsbChvYmosIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlcikgJiYgIXJlcGxhY2VyLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgfHwga2VlcFVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaChjcmVhdGVQYWlyKGtleSwgdmFsdWUsIGN0eCkpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmopXG4gICAgICAgICAgICAgICAgYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSlcbiAgICAgICAgICAgICAgICBhZGQoa2V5LCBvYmpba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuc29ydE1hcEVudHJpZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1hcC5pdGVtcy5zb3J0KHNjaGVtYS5zb3J0TWFwRW50cmllcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHZhbHVlIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG92ZXJ3cml0ZSAtIElmIG5vdCBzZXQgYHRydWVgLCB1c2luZyBhIGtleSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlXG4gICAgICogICBjb2xsZWN0aW9uIHdpbGwgdGhyb3cuIE90aGVyd2lzZSwgb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgdmFsdWUuXG4gICAgICovXG4gICAgYWRkKHBhaXIsIG92ZXJ3cml0ZSkge1xuICAgICAgICBsZXQgX3BhaXI7XG4gICAgICAgIGlmIChpc1BhaXIocGFpcikpXG4gICAgICAgICAgICBfcGFpciA9IHBhaXI7XG4gICAgICAgIGVsc2UgaWYgKCFwYWlyIHx8IHR5cGVvZiBwYWlyICE9PSAnb2JqZWN0JyB8fCAhKCdrZXknIGluIHBhaXIpKSB7XG4gICAgICAgICAgICAvLyBJbiBUeXBlU2NyaXB0LCB0aGlzIG5ldmVyIGhhcHBlbnMuXG4gICAgICAgICAgICBfcGFpciA9IG5ldyBQYWlyKHBhaXIsIHBhaXI/LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBfcGFpciA9IG5ldyBQYWlyKHBhaXIua2V5LCBwYWlyLnZhbHVlKTtcbiAgICAgICAgY29uc3QgcHJldiA9IGZpbmRQYWlyKHRoaXMuaXRlbXMsIF9wYWlyLmtleSk7XG4gICAgICAgIGNvbnN0IHNvcnRFbnRyaWVzID0gdGhpcy5zY2hlbWE/LnNvcnRNYXBFbnRyaWVzO1xuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgaWYgKCFvdmVyd3JpdGUpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtfcGFpci5rZXl9IGFscmVhZHkgc2V0YCk7XG4gICAgICAgICAgICAvLyBGb3Igc2NhbGFycywga2VlcCB0aGUgb2xkIG5vZGUgJiBpdHMgY29tbWVudHMgYW5kIGFuY2hvcnNcbiAgICAgICAgICAgIGlmIChpc1NjYWxhcihwcmV2LnZhbHVlKSAmJiBpc1NjYWxhclZhbHVlKF9wYWlyLnZhbHVlKSlcbiAgICAgICAgICAgICAgICBwcmV2LnZhbHVlLnZhbHVlID0gX3BhaXIudmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcHJldi52YWx1ZSA9IF9wYWlyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNvcnRFbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBzb3J0RW50cmllcyhfcGFpciwgaXRlbSkgPCAwKTtcbiAgICAgICAgICAgIGlmIChpID09PSAtMSlcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goX3BhaXIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGksIDAsIF9wYWlyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChfcGFpcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICBjb25zdCBpdCA9IGZpbmRQYWlyKHRoaXMuaXRlbXMsIGtleSk7XG4gICAgICAgIGlmICghaXQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRlbCA9IHRoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuaW5kZXhPZihpdCksIDEpO1xuICAgICAgICByZXR1cm4gZGVsLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGdldChrZXksIGtlZXBTY2FsYXIpIHtcbiAgICAgICAgY29uc3QgaXQgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgICAgICBjb25zdCBub2RlID0gaXQ/LnZhbHVlO1xuICAgICAgICByZXR1cm4gKCFrZWVwU2NhbGFyICYmIGlzU2NhbGFyKG5vZGUpID8gbm9kZS52YWx1ZSA6IG5vZGUpID8/IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmFkZChuZXcgUGFpcihrZXksIHZhbHVlKSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjdHggLSBDb252ZXJzaW9uIGNvbnRleHQsIG9yaWdpbmFsbHkgc2V0IGluIERvY3VtZW50I3RvSlMoKVxuICAgICAqIEBwYXJhbSB7Q2xhc3N9IFR5cGUgLSBJZiBzZXQsIGZvcmNlcyB0aGUgcmV0dXJuZWQgY29sbGVjdGlvbiB0eXBlXG4gICAgICogQHJldHVybnMgSW5zdGFuY2Ugb2YgVHlwZSwgTWFwLCBvciBPYmplY3RcbiAgICAgKi9cbiAgICB0b0pTT04oXywgY3R4LCBUeXBlKSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IFR5cGUgPyBuZXcgVHlwZSgpIDogY3R4Py5tYXBBc01hcCA/IG5ldyBNYXAoKSA6IHt9O1xuICAgICAgICBpZiAoY3R4Py5vbkNyZWF0ZSlcbiAgICAgICAgICAgIGN0eC5vbkNyZWF0ZShtYXApO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcylcbiAgICAgICAgICAgIGFkZFBhaXJUb0pTTWFwKGN0eCwgbWFwLCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgdG9TdHJpbmcoY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgICAgIGlmICghY3R4KVxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKCFpc1BhaXIoaXRlbSkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYXAgaXRlbXMgbXVzdCBhbGwgYmUgcGFpcnM7IGZvdW5kICR7SlNPTi5zdHJpbmdpZnkoaXRlbSl9IGluc3RlYWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eC5hbGxOdWxsVmFsdWVzICYmIHRoaXMuaGFzQWxsTnVsbFZhbHVlcyhmYWxzZSkpXG4gICAgICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKHt9LCBjdHgsIHsgYWxsTnVsbFZhbHVlczogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUNvbGxlY3Rpb24odGhpcywgY3R4LCB7XG4gICAgICAgICAgICBibG9ja0l0ZW1QcmVmaXg6ICcnLFxuICAgICAgICAgICAgZmxvd0NoYXJzOiB7IHN0YXJ0OiAneycsIGVuZDogJ30nIH0sXG4gICAgICAgICAgICBpdGVtSW5kZW50OiBjdHguaW5kZW50IHx8ICcnLFxuICAgICAgICAgICAgb25DaG9tcEtlZXAsXG4gICAgICAgICAgICBvbkNvbW1lbnRcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBZQU1MTWFwLCBmaW5kUGFpciB9O1xuIiwgImltcG9ydCB7IGlzTWFwIH0gZnJvbSAnLi4vLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgWUFNTE1hcCB9IGZyb20gJy4uLy4uL25vZGVzL1lBTUxNYXAuanMnO1xuXG5jb25zdCBtYXAgPSB7XG4gICAgY29sbGVjdGlvbjogJ21hcCcsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICBub2RlQ2xhc3M6IFlBTUxNYXAsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6bWFwJyxcbiAgICByZXNvbHZlKG1hcCwgb25FcnJvcikge1xuICAgICAgICBpZiAoIWlzTWFwKG1hcCkpXG4gICAgICAgICAgICBvbkVycm9yKCdFeHBlY3RlZCBhIG1hcHBpbmcgZm9yIHRoaXMgdGFnJyk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfSxcbiAgICBjcmVhdGVOb2RlOiAoc2NoZW1hLCBvYmosIGN0eCkgPT4gWUFNTE1hcC5mcm9tKHNjaGVtYSwgb2JqLCBjdHgpXG59O1xuXG5leHBvcnQgeyBtYXAgfTtcbiIsICJpbXBvcnQgeyBjcmVhdGVOb2RlIH0gZnJvbSAnLi4vZG9jL2NyZWF0ZU5vZGUuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5Q29sbGVjdGlvbiB9IGZyb20gJy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlDb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24uanMnO1xuaW1wb3J0IHsgU0VRLCBpc1NjYWxhciB9IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgaXNTY2FsYXJWYWx1ZSB9IGZyb20gJy4vU2NhbGFyLmpzJztcbmltcG9ydCB7IHRvSlMgfSBmcm9tICcuL3RvSlMuanMnO1xuXG5jbGFzcyBZQU1MU2VxIGV4dGVuZHMgQ29sbGVjdGlvbiB7XG4gICAgc3RhdGljIGdldCB0YWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3RhZzp5YW1sLm9yZywyMDAyOnNlcSc7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSkge1xuICAgICAgICBzdXBlcihTRVEsIHNjaGVtYSk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB9XG4gICAgYWRkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSB2YWx1ZSBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogYGtleWAgbXVzdCBjb250YWluIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBmb3IgdGhpcyB0byBzdWNjZWVkLlxuICAgICAqIEl0IG1heSBiZSB3cmFwcGVkIGluIGEgYFNjYWxhcmAuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZW0gd2FzIGZvdW5kIGFuZCByZW1vdmVkLlxuICAgICAqL1xuICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gYXNJdGVtSW5kZXgoa2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBkZWwgPSB0aGlzLml0ZW1zLnNwbGljZShpZHgsIDEpO1xuICAgICAgICByZXR1cm4gZGVsLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGdldChrZXksIGtlZXBTY2FsYXIpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gYXNJdGVtSW5kZXgoa2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgaXQgPSB0aGlzLml0ZW1zW2lkeF07XG4gICAgICAgIHJldHVybiAha2VlcFNjYWxhciAmJiBpc1NjYWxhcihpdCkgPyBpdC52YWx1ZSA6IGl0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGNvbGxlY3Rpb24gaW5jbHVkZXMgYSB2YWx1ZSB3aXRoIHRoZSBrZXkgYGtleWAuXG4gICAgICpcbiAgICAgKiBga2V5YCBtdXN0IGNvbnRhaW4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIGZvciB0aGlzIHRvIHN1Y2NlZWQuXG4gICAgICogSXQgbWF5IGJlIHdyYXBwZWQgaW4gYSBgU2NhbGFyYC5cbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGFzSXRlbUluZGV4KGtleSk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaWR4ID09PSAnbnVtYmVyJyAmJiBpZHggPCB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBhIHZhbHVlIGluIHRoaXMgY29sbGVjdGlvbi4gRm9yIGAhIXNldGAsIGB2YWx1ZWAgbmVlZHMgdG8gYmUgYVxuICAgICAqIGJvb2xlYW4gdG8gYWRkL3JlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBzZXQuXG4gICAgICpcbiAgICAgKiBJZiBga2V5YCBkb2VzIG5vdCBjb250YWluIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciwgdGhpcyB3aWxsIHRocm93LlxuICAgICAqIEl0IG1heSBiZSB3cmFwcGVkIGluIGEgYFNjYWxhcmAuXG4gICAgICovXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gYXNJdGVtSW5kZXgoa2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHZhbGlkIGluZGV4LCBub3QgJHtrZXl9LmApO1xuICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5pdGVtc1tpZHhdO1xuICAgICAgICBpZiAoaXNTY2FsYXIocHJldikgJiYgaXNTY2FsYXJWYWx1ZSh2YWx1ZSkpXG4gICAgICAgICAgICBwcmV2LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaWR4XSA9IHZhbHVlO1xuICAgIH1cbiAgICB0b0pTT04oXywgY3R4KSB7XG4gICAgICAgIGNvbnN0IHNlcSA9IFtdO1xuICAgICAgICBpZiAoY3R4Py5vbkNyZWF0ZSlcbiAgICAgICAgICAgIGN0eC5vbkNyZWF0ZShzZXEpO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKVxuICAgICAgICAgICAgc2VxLnB1c2godG9KUyhpdGVtLCBTdHJpbmcoaSsrKSwgY3R4KSk7XG4gICAgICAgIHJldHVybiBzZXE7XG4gICAgfVxuICAgIHRvU3RyaW5nKGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgICAgICBpZiAoIWN0eClcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUNvbGxlY3Rpb24odGhpcywgY3R4LCB7XG4gICAgICAgICAgICBibG9ja0l0ZW1QcmVmaXg6ICctICcsXG4gICAgICAgICAgICBmbG93Q2hhcnM6IHsgc3RhcnQ6ICdbJywgZW5kOiAnXScgfSxcbiAgICAgICAgICAgIGl0ZW1JbmRlbnQ6IChjdHguaW5kZW50IHx8ICcnKSArICcgICcsXG4gICAgICAgICAgICBvbkNob21wS2VlcCxcbiAgICAgICAgICAgIG9uQ29tbWVudFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIGZyb20oc2NoZW1hLCBvYmosIGN0eCkge1xuICAgICAgICBjb25zdCB7IHJlcGxhY2VyIH0gPSBjdHg7XG4gICAgICAgIGNvbnN0IHNlcSA9IG5ldyB0aGlzKHNjaGVtYSk7XG4gICAgICAgIGlmIChvYmogJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChvYmopKSB7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IG9iaiBpbnN0YW5jZW9mIFNldCA/IGl0IDogU3RyaW5nKGkrKyk7XG4gICAgICAgICAgICAgICAgICAgIGl0ID0gcmVwbGFjZXIuY2FsbChvYmosIGtleSwgaXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXEuaXRlbXMucHVzaChjcmVhdGVOb2RlKGl0LCB1bmRlZmluZWQsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXE7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNJdGVtSW5kZXgoa2V5KSB7XG4gICAgbGV0IGlkeCA9IGlzU2NhbGFyKGtleSkgPyBrZXkudmFsdWUgOiBrZXk7XG4gICAgaWYgKGlkeCAmJiB0eXBlb2YgaWR4ID09PSAnc3RyaW5nJylcbiAgICAgICAgaWR4ID0gTnVtYmVyKGlkeCk7XG4gICAgcmV0dXJuIHR5cGVvZiBpZHggPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIoaWR4KSAmJiBpZHggPj0gMFxuICAgICAgICA/IGlkeFxuICAgICAgICA6IG51bGw7XG59XG5cbmV4cG9ydCB7IFlBTUxTZXEgfTtcbiIsICJpbXBvcnQgeyBpc1NlcSB9IGZyb20gJy4uLy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IFlBTUxTZXEgfSBmcm9tICcuLi8uLi9ub2Rlcy9ZQU1MU2VxLmpzJztcblxuY29uc3Qgc2VxID0ge1xuICAgIGNvbGxlY3Rpb246ICdzZXEnLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgbm9kZUNsYXNzOiBZQU1MU2VxLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScsXG4gICAgcmVzb2x2ZShzZXEsIG9uRXJyb3IpIHtcbiAgICAgICAgaWYgKCFpc1NlcShzZXEpKVxuICAgICAgICAgICAgb25FcnJvcignRXhwZWN0ZWQgYSBzZXF1ZW5jZSBmb3IgdGhpcyB0YWcnKTtcbiAgICAgICAgcmV0dXJuIHNlcTtcbiAgICB9LFxuICAgIGNyZWF0ZU5vZGU6IChzY2hlbWEsIG9iaiwgY3R4KSA9PiBZQU1MU2VxLmZyb20oc2NoZW1hLCBvYmosIGN0eClcbn07XG5cbmV4cG9ydCB7IHNlcSB9O1xuIiwgImltcG9ydCB7IHN0cmluZ2lmeVN0cmluZyB9IGZyb20gJy4uLy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlTdHJpbmcuanMnO1xuXG5jb25zdCBzdHJpbmcgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLFxuICAgIHJlc29sdmU6IHN0ciA9PiBzdHIsXG4gICAgc3RyaW5naWZ5KGl0ZW0sIGN0eCwgb25Db21tZW50LCBvbkNob21wS2VlcCkge1xuICAgICAgICBjdHggPSBPYmplY3QuYXNzaWduKHsgYWN0dWFsU3RyaW5nOiB0cnVlIH0sIGN0eCk7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlTdHJpbmcoaXRlbSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKTtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBzdHJpbmcgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuXG5jb25zdCBudWxsVGFnID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB2YWx1ZSA9PSBudWxsLFxuICAgIGNyZWF0ZU5vZGU6ICgpID0+IG5ldyBTY2FsYXIobnVsbCksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpudWxsJyxcbiAgICB0ZXN0OiAvXig/On58W05uXXVsbHxOVUxMKT8kLyxcbiAgICByZXNvbHZlOiAoKSA9PiBuZXcgU2NhbGFyKG51bGwpLFxuICAgIHN0cmluZ2lmeTogKHsgc291cmNlIH0sIGN0eCkgPT4gdHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgJiYgbnVsbFRhZy50ZXN0LnRlc3Qoc291cmNlKVxuICAgICAgICA/IHNvdXJjZVxuICAgICAgICA6IGN0eC5vcHRpb25zLm51bGxTdHJcbn07XG5cbmV4cG9ydCB7IG51bGxUYWcgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuXG5jb25zdCBib29sVGFnID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmJvb2wnLFxuICAgIHRlc3Q6IC9eKD86W1R0XXJ1ZXxUUlVFfFtGZl1hbHNlfEZBTFNFKSQvLFxuICAgIHJlc29sdmU6IHN0ciA9PiBuZXcgU2NhbGFyKHN0clswXSA9PT0gJ3QnIHx8IHN0clswXSA9PT0gJ1QnKSxcbiAgICBzdHJpbmdpZnkoeyBzb3VyY2UsIHZhbHVlIH0sIGN0eCkge1xuICAgICAgICBpZiAoc291cmNlICYmIGJvb2xUYWcudGVzdC50ZXN0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN2ID0gc291cmNlWzBdID09PSAndCcgfHwgc291cmNlWzBdID09PSAnVCc7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHN2KVxuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlID8gY3R4Lm9wdGlvbnMudHJ1ZVN0ciA6IGN0eC5vcHRpb25zLmZhbHNlU3RyO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IGJvb2xUYWcgfTtcbiIsICJmdW5jdGlvbiBzdHJpbmdpZnlOdW1iZXIoeyBmb3JtYXQsIG1pbkZyYWN0aW9uRGlnaXRzLCB0YWcsIHZhbHVlIH0pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JylcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgY29uc3QgbnVtID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIWlzRmluaXRlKG51bSkpXG4gICAgICAgIHJldHVybiBpc05hTihudW0pID8gJy5uYW4nIDogbnVtIDwgMCA/ICctLmluZicgOiAnLmluZic7XG4gICAgbGV0IG4gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgaWYgKCFmb3JtYXQgJiZcbiAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgJiZcbiAgICAgICAgKCF0YWcgfHwgdGFnID09PSAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnKSAmJlxuICAgICAgICAvXlxcZC8udGVzdChuKSkge1xuICAgICAgICBsZXQgaSA9IG4uaW5kZXhPZignLicpO1xuICAgICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgICAgIGkgPSBuLmxlbmd0aDtcbiAgICAgICAgICAgIG4gKz0gJy4nO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkID0gbWluRnJhY3Rpb25EaWdpdHMgLSAobi5sZW5ndGggLSBpIC0gMSk7XG4gICAgICAgIHdoaWxlIChkLS0gPiAwKVxuICAgICAgICAgICAgbiArPSAnMCc7XG4gICAgfVxuICAgIHJldHVybiBuO1xufVxuXG5leHBvcnQgeyBzdHJpbmdpZnlOdW1iZXIgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5TnVtYmVyIH0gZnJvbSAnLi4vLi4vc3RyaW5naWZ5L3N0cmluZ2lmeU51bWJlci5qcyc7XG5cbmNvbnN0IGZsb2F0TmFOID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLFxuICAgIHRlc3Q6IC9eKD86Wy0rXT9cXC4oPzppbmZ8SW5mfElORil8XFwubmFufFxcLk5hTnxcXC5OQU4pJC8sXG4gICAgcmVzb2x2ZTogc3RyID0+IHN0ci5zbGljZSgtMykudG9Mb3dlckNhc2UoKSA9PT0gJ25hbidcbiAgICAgICAgPyBOYU5cbiAgICAgICAgOiBzdHJbMF0gPT09ICctJ1xuICAgICAgICAgICAgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICAgIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5TnVtYmVyXG59O1xuY29uc3QgZmxvYXRFeHAgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsXG4gICAgZm9ybWF0OiAnRVhQJyxcbiAgICB0ZXN0OiAvXlstK10/KD86XFwuWzAtOV0rfFswLTldKyg/OlxcLlswLTldKik/KVtlRV1bLStdP1swLTldKyQvLFxuICAgIHJlc29sdmU6IHN0ciA9PiBwYXJzZUZsb2F0KHN0ciksXG4gICAgc3RyaW5naWZ5KG5vZGUpIHtcbiAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKG5vZGUudmFsdWUpO1xuICAgICAgICByZXR1cm4gaXNGaW5pdGUobnVtKSA/IG51bS50b0V4cG9uZW50aWFsKCkgOiBzdHJpbmdpZnlOdW1iZXIobm9kZSk7XG4gICAgfVxufTtcbmNvbnN0IGZsb2F0ID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLFxuICAgIHRlc3Q6IC9eWy0rXT8oPzpcXC5bMC05XSt8WzAtOV0rXFwuWzAtOV0qKSQvLFxuICAgIHJlc29sdmUoc3RyKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgU2NhbGFyKHBhcnNlRmxvYXQoc3RyKSk7XG4gICAgICAgIGNvbnN0IGRvdCA9IHN0ci5pbmRleE9mKCcuJyk7XG4gICAgICAgIGlmIChkb3QgIT09IC0xICYmIHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICcwJylcbiAgICAgICAgICAgIG5vZGUubWluRnJhY3Rpb25EaWdpdHMgPSBzdHIubGVuZ3RoIC0gZG90IC0gMTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeU51bWJlclxufTtcblxuZXhwb3J0IHsgZmxvYXQsIGZsb2F0RXhwLCBmbG9hdE5hTiB9O1xuIiwgImltcG9ydCB7IHN0cmluZ2lmeU51bWJlciB9IGZyb20gJy4uLy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlOdW1iZXIuanMnO1xuXG5jb25zdCBpbnRJZGVudGlmeSA9ICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbmNvbnN0IGludFJlc29sdmUgPSAoc3RyLCBvZmZzZXQsIHJhZGl4LCB7IGludEFzQmlnSW50IH0pID0+IChpbnRBc0JpZ0ludCA/IEJpZ0ludChzdHIpIDogcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhvZmZzZXQpLCByYWRpeCkpO1xuZnVuY3Rpb24gaW50U3RyaW5naWZ5KG5vZGUsIHJhZGl4LCBwcmVmaXgpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBub2RlO1xuICAgIGlmIChpbnRJZGVudGlmeSh2YWx1ZSkgJiYgdmFsdWUgPj0gMClcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIHZhbHVlLnRvU3RyaW5nKHJhZGl4KTtcbiAgICByZXR1cm4gc3RyaW5naWZ5TnVtYmVyKG5vZGUpO1xufVxuY29uc3QgaW50T2N0ID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiBpbnRJZGVudGlmeSh2YWx1ZSkgJiYgdmFsdWUgPj0gMCxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmludCcsXG4gICAgZm9ybWF0OiAnT0NUJyxcbiAgICB0ZXN0OiAvXjBvWzAtN10rJC8sXG4gICAgcmVzb2x2ZTogKHN0ciwgX29uRXJyb3IsIG9wdCkgPT4gaW50UmVzb2x2ZShzdHIsIDIsIDgsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBub2RlID0+IGludFN0cmluZ2lmeShub2RlLCA4LCAnMG8nKVxufTtcbmNvbnN0IGludCA9IHtcbiAgICBpZGVudGlmeTogaW50SWRlbnRpZnksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICAgIHRlc3Q6IC9eWy0rXT9bMC05XSskLyxcbiAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgb3B0KSA9PiBpbnRSZXNvbHZlKHN0ciwgMCwgMTAsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlOdW1iZXJcbn07XG5jb25zdCBpbnRIZXggPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IGludElkZW50aWZ5KHZhbHVlKSAmJiB2YWx1ZSA+PSAwLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgICBmb3JtYXQ6ICdIRVgnLFxuICAgIHRlc3Q6IC9eMHhbMC05YS1mQS1GXSskLyxcbiAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgb3B0KSA9PiBpbnRSZXNvbHZlKHN0ciwgMiwgMTYsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBub2RlID0+IGludFN0cmluZ2lmeShub2RlLCAxNiwgJzB4Jylcbn07XG5cbmV4cG9ydCB7IGludCwgaW50SGV4LCBpbnRPY3QgfTtcbiIsICJpbXBvcnQgeyBtYXAgfSBmcm9tICcuLi9jb21tb24vbWFwLmpzJztcbmltcG9ydCB7IG51bGxUYWcgfSBmcm9tICcuLi9jb21tb24vbnVsbC5qcyc7XG5pbXBvcnQgeyBzZXEgfSBmcm9tICcuLi9jb21tb24vc2VxLmpzJztcbmltcG9ydCB7IHN0cmluZyB9IGZyb20gJy4uL2NvbW1vbi9zdHJpbmcuanMnO1xuaW1wb3J0IHsgYm9vbFRhZyB9IGZyb20gJy4vYm9vbC5qcyc7XG5pbXBvcnQgeyBmbG9hdE5hTiwgZmxvYXRFeHAsIGZsb2F0IH0gZnJvbSAnLi9mbG9hdC5qcyc7XG5pbXBvcnQgeyBpbnRPY3QsIGludCwgaW50SGV4IH0gZnJvbSAnLi9pbnQuanMnO1xuXG5jb25zdCBzY2hlbWEgPSBbXG4gICAgbWFwLFxuICAgIHNlcSxcbiAgICBzdHJpbmcsXG4gICAgbnVsbFRhZyxcbiAgICBib29sVGFnLFxuICAgIGludE9jdCxcbiAgICBpbnQsXG4gICAgaW50SGV4LFxuICAgIGZsb2F0TmFOLFxuICAgIGZsb2F0RXhwLFxuICAgIGZsb2F0XG5dO1xuXG5leHBvcnQgeyBzY2hlbWEgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi4vY29tbW9uL21hcC5qcyc7XG5pbXBvcnQgeyBzZXEgfSBmcm9tICcuLi9jb21tb24vc2VxLmpzJztcblxuZnVuY3Rpb24gaW50SWRlbnRpZnkodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbmNvbnN0IHN0cmluZ2lmeUpTT04gPSAoeyB2YWx1ZSB9KSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5jb25zdCBqc29uU2NhbGFycyA9IFtcbiAgICB7XG4gICAgICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpzdHInLFxuICAgICAgICByZXNvbHZlOiBzdHIgPT4gc3RyLFxuICAgICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeUpTT05cbiAgICB9LFxuICAgIHtcbiAgICAgICAgaWRlbnRpZnk6IHZhbHVlID0+IHZhbHVlID09IG51bGwsXG4gICAgICAgIGNyZWF0ZU5vZGU6ICgpID0+IG5ldyBTY2FsYXIobnVsbCksXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOm51bGwnLFxuICAgICAgICB0ZXN0OiAvXm51bGwkLyxcbiAgICAgICAgcmVzb2x2ZTogKCkgPT4gbnVsbCxcbiAgICAgICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlKU09OXG4gICAgfSxcbiAgICB7XG4gICAgICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsXG4gICAgICAgIHRlc3Q6IC9edHJ1ZXxmYWxzZSQvLFxuICAgICAgICByZXNvbHZlOiBzdHIgPT4gc3RyID09PSAndHJ1ZScsXG4gICAgICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5SlNPTlxuICAgIH0sXG4gICAge1xuICAgICAgICBpZGVudGlmeTogaW50SWRlbnRpZnksXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmludCcsXG4gICAgICAgIHRlc3Q6IC9eLT8oPzowfFsxLTldWzAtOV0qKSQvLFxuICAgICAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgeyBpbnRBc0JpZ0ludCB9KSA9PiBpbnRBc0JpZ0ludCA/IEJpZ0ludChzdHIpIDogcGFyc2VJbnQoc3RyLCAxMCksXG4gICAgICAgIHN0cmluZ2lmeTogKHsgdmFsdWUgfSkgPT4gaW50SWRlbnRpZnkodmFsdWUpID8gdmFsdWUudG9TdHJpbmcoKSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgIH0sXG4gICAge1xuICAgICAgICBpZGVudGlmeTogdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLFxuICAgICAgICB0ZXN0OiAvXi0/KD86MHxbMS05XVswLTldKikoPzpcXC5bMC05XSopPyg/OltlRV1bLStdP1swLTldKyk/JC8sXG4gICAgICAgIHJlc29sdmU6IHN0ciA9PiBwYXJzZUZsb2F0KHN0ciksXG4gICAgICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5SlNPTlxuICAgIH1cbl07XG5jb25zdCBqc29uRXJyb3IgPSB7XG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICcnLFxuICAgIHRlc3Q6IC9eLyxcbiAgICByZXNvbHZlKHN0ciwgb25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGBVbnJlc29sdmVkIHBsYWluIHNjYWxhciAke0pTT04uc3RyaW5naWZ5KHN0cil9YCk7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufTtcbmNvbnN0IHNjaGVtYSA9IFttYXAsIHNlcV0uY29uY2F0KGpzb25TY2FsYXJzLCBqc29uRXJyb3IpO1xuXG5leHBvcnQgeyBzY2hlbWEgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5U3RyaW5nIH0gZnJvbSAnLi4vLi4vc3RyaW5naWZ5L3N0cmluZ2lmeVN0cmluZy5qcyc7XG5cbmNvbnN0IGJpbmFyeSA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5LCAvLyBCdWZmZXIgaW5oZXJpdHMgZnJvbSBVaW50OEFycmF5XG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5JyxcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQnVmZmVyIGluIG5vZGUgYW5kIGFuIFVpbnQ4QXJyYXkgaW4gYnJvd3NlcnNcbiAgICAgKlxuICAgICAqIFRvIHVzZSB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBhcyBhbiBpbWFnZSwgeW91J2xsIHdhbnQgdG8gZG8gc29tZXRoaW5nIGxpa2U6XG4gICAgICpcbiAgICAgKiAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSlcbiAgICAgKiAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwaG90bycpLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgICAgKi9cbiAgICByZXNvbHZlKHNyYywgb25FcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNyYywgJ2Jhc2U2NCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhdG9iID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBPbiBJRSAxMSwgYXRvYigpIGNhbid0IGhhbmRsZSBuZXdsaW5lc1xuICAgICAgICAgICAgY29uc3Qgc3RyID0gYXRvYihzcmMucmVwbGFjZSgvW1xcblxccl0vZywgJycpKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHN0ci5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb25FcnJvcignVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgYmluYXJ5IHRhZ3M7IGVpdGhlciBCdWZmZXIgb3IgYXRvYiBpcyByZXF1aXJlZCcpO1xuICAgICAgICAgICAgcmV0dXJuIHNyYztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc3RyaW5naWZ5KHsgY29tbWVudCwgdHlwZSwgdmFsdWUgfSwgY3R4LCBvbkNvbW1lbnQsIG9uQ2hvbXBLZWVwKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IHZhbHVlOyAvLyBjaGVja2VkIGVhcmxpZXIgYnkgYmluYXJ5LmlkZW50aWZ5KClcbiAgICAgICAgbGV0IHN0cjtcbiAgICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0ciA9XG4gICAgICAgICAgICAgICAgYnVmIGluc3RhbmNlb2YgQnVmZmVyXG4gICAgICAgICAgICAgICAgICAgID8gYnVmLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKGJ1Zi5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbGV0IHMgPSAnJztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgICAgICAgICAgc3RyID0gYnRvYShzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHdyaXRpbmcgYmluYXJ5IHRhZ3M7IGVpdGhlciBCdWZmZXIgb3IgYnRvYSBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdHlwZSlcbiAgICAgICAgICAgIHR5cGUgPSBTY2FsYXIuQkxPQ0tfTElURVJBTDtcbiAgICAgICAgaWYgKHR5cGUgIT09IFNjYWxhci5RVU9URV9ET1VCTEUpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IE1hdGgubWF4KGN0eC5vcHRpb25zLmxpbmVXaWR0aCAtIGN0eC5pbmRlbnQubGVuZ3RoLCBjdHgub3B0aW9ucy5taW5Db250ZW50V2lkdGgpO1xuICAgICAgICAgICAgY29uc3QgbiA9IE1hdGguY2VpbChzdHIubGVuZ3RoIC8gbGluZVdpZHRoKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG8gPSAwOyBpIDwgbjsgKytpLCBvICs9IGxpbmVXaWR0aCkge1xuICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gc3RyLnN1YnN0cihvLCBsaW5lV2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyID0gbGluZXMuam9pbih0eXBlID09PSBTY2FsYXIuQkxPQ0tfTElURVJBTCA/ICdcXG4nIDogJyAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5U3RyaW5nKHsgY29tbWVudCwgdHlwZSwgdmFsdWU6IHN0ciB9LCBjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IGJpbmFyeSB9O1xuIiwgImltcG9ydCB7IGlzU2VxLCBpc1BhaXIsIGlzTWFwIH0gZnJvbSAnLi4vLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgUGFpciwgY3JlYXRlUGFpciB9IGZyb20gJy4uLy4uL25vZGVzL1BhaXIuanMnO1xuaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vLi4vbm9kZXMvU2NhbGFyLmpzJztcbmltcG9ydCB7IFlBTUxTZXEgfSBmcm9tICcuLi8uLi9ub2Rlcy9ZQU1MU2VxLmpzJztcblxuZnVuY3Rpb24gcmVzb2x2ZVBhaXJzKHNlcSwgb25FcnJvcikge1xuICAgIGlmIChpc1NlcShzZXEpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VxLml0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9IHNlcS5pdGVtc1tpXTtcbiAgICAgICAgICAgIGlmIChpc1BhaXIoaXRlbSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBlbHNlIGlmIChpc01hcChpdGVtKSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLml0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoJ0VhY2ggcGFpciBtdXN0IGhhdmUgaXRzIG93biBzZXF1ZW5jZSBpbmRpY2F0b3InKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWlyID0gaXRlbS5pdGVtc1swXSB8fCBuZXcgUGFpcihuZXcgU2NhbGFyKG51bGwpKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb21tZW50QmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICBwYWlyLmtleS5jb21tZW50QmVmb3JlID0gcGFpci5rZXkuY29tbWVudEJlZm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtLmNvbW1lbnRCZWZvcmV9XFxuJHtwYWlyLmtleS5jb21tZW50QmVmb3JlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS5jb21tZW50QmVmb3JlO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY24gPSBwYWlyLnZhbHVlID8/IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgICAgICBjbi5jb21tZW50ID0gY24uY29tbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtLmNvbW1lbnR9XFxuJHtjbi5jb21tZW50fWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS5jb21tZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtID0gcGFpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcS5pdGVtc1tpXSA9IGlzUGFpcihpdGVtKSA/IGl0ZW0gOiBuZXcgUGFpcihpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIG9uRXJyb3IoJ0V4cGVjdGVkIGEgc2VxdWVuY2UgZm9yIHRoaXMgdGFnJyk7XG4gICAgcmV0dXJuIHNlcTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVBhaXJzKHNjaGVtYSwgaXRlcmFibGUsIGN0eCkge1xuICAgIGNvbnN0IHsgcmVwbGFjZXIgfSA9IGN0eDtcbiAgICBjb25zdCBwYWlycyA9IG5ldyBZQU1MU2VxKHNjaGVtYSk7XG4gICAgcGFpcnMudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOnBhaXJzJztcbiAgICBsZXQgaSA9IDA7XG4gICAgaWYgKGl0ZXJhYmxlICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcmFibGUpKVxuICAgICAgICBmb3IgKGxldCBpdCBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICBpdCA9IHJlcGxhY2VyLmNhbGwoaXRlcmFibGUsIFN0cmluZyhpKyspLCBpdCk7XG4gICAgICAgICAgICBsZXQga2V5LCB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0KSkge1xuICAgICAgICAgICAgICAgIGlmIChpdC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaXRbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgW2tleSwgdmFsdWVdIHR1cGxlOiAke2l0fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXQgJiYgaXQgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaXQpO1xuICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0W2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCB0dXBsZSB3aXRoIG9uZSBrZXksIG5vdCAke2tleXMubGVuZ3RofSBrZXlzYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5ID0gaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWlycy5pdGVtcy5wdXNoKGNyZWF0ZVBhaXIoa2V5LCB2YWx1ZSwgY3R4KSk7XG4gICAgICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG59XG5jb25zdCBwYWlycyA9IHtcbiAgICBjb2xsZWN0aW9uOiAnc2VxJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpwYWlycycsXG4gICAgcmVzb2x2ZTogcmVzb2x2ZVBhaXJzLFxuICAgIGNyZWF0ZU5vZGU6IGNyZWF0ZVBhaXJzXG59O1xuXG5leHBvcnQgeyBjcmVhdGVQYWlycywgcGFpcnMsIHJlc29sdmVQYWlycyB9O1xuIiwgImltcG9ydCB7IGlzU2NhbGFyLCBpc1BhaXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyB0b0pTIH0gZnJvbSAnLi4vLi4vbm9kZXMvdG9KUy5qcyc7XG5pbXBvcnQgeyBZQU1MTWFwIH0gZnJvbSAnLi4vLi4vbm9kZXMvWUFNTE1hcC5qcyc7XG5pbXBvcnQgeyBZQU1MU2VxIH0gZnJvbSAnLi4vLi4vbm9kZXMvWUFNTFNlcS5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUGFpcnMsIGNyZWF0ZVBhaXJzIH0gZnJvbSAnLi9wYWlycy5qcyc7XG5cbmNsYXNzIFlBTUxPTWFwIGV4dGVuZHMgWUFNTFNlcSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWRkID0gWUFNTE1hcC5wcm90b3R5cGUuYWRkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVsZXRlID0gWUFNTE1hcC5wcm90b3R5cGUuZGVsZXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0ID0gWUFNTE1hcC5wcm90b3R5cGUuZ2V0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFzID0gWUFNTE1hcC5wcm90b3R5cGUuaGFzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0ID0gWUFNTE1hcC5wcm90b3R5cGUuc2V0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMudGFnID0gWUFNTE9NYXAudGFnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiBgY3R4YCBpcyBnaXZlbiwgdGhlIHJldHVybiB0eXBlIGlzIGFjdHVhbGx5IGBNYXA8dW5rbm93biwgdW5rbm93bj5gLFxuICAgICAqIGJ1dCBUeXBlU2NyaXB0IHdvbid0IGFsbG93IHdpZGVuaW5nIHRoZSBzaWduYXR1cmUgb2YgYSBjaGlsZCBtZXRob2QuXG4gICAgICovXG4gICAgdG9KU09OKF8sIGN0eCkge1xuICAgICAgICBpZiAoIWN0eClcbiAgICAgICAgICAgIHJldHVybiBzdXBlci50b0pTT04oXyk7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgaWYgKGN0eD8ub25DcmVhdGUpXG4gICAgICAgICAgICBjdHgub25DcmVhdGUobWFwKTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGxldCBrZXksIHZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzUGFpcihwYWlyKSkge1xuICAgICAgICAgICAgICAgIGtleSA9IHRvSlMocGFpci5rZXksICcnLCBjdHgpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9KUyhwYWlyLnZhbHVlLCBrZXksIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXkgPSB0b0pTKHBhaXIsICcnLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hcC5oYXMoa2V5KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09yZGVyZWQgbWFwcyBtdXN0IG5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBrZXlzJyk7XG4gICAgICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tKHNjaGVtYSwgaXRlcmFibGUsIGN0eCkge1xuICAgICAgICBjb25zdCBwYWlycyA9IGNyZWF0ZVBhaXJzKHNjaGVtYSwgaXRlcmFibGUsIGN0eCk7XG4gICAgICAgIGNvbnN0IG9tYXAgPSBuZXcgdGhpcygpO1xuICAgICAgICBvbWFwLml0ZW1zID0gcGFpcnMuaXRlbXM7XG4gICAgICAgIHJldHVybiBvbWFwO1xuICAgIH1cbn1cbllBTUxPTWFwLnRhZyA9ICd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJztcbmNvbnN0IG9tYXAgPSB7XG4gICAgY29sbGVjdGlvbjogJ3NlcScsXG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHZhbHVlIGluc3RhbmNlb2YgTWFwLFxuICAgIG5vZGVDbGFzczogWUFNTE9NYXAsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6b21hcCcsXG4gICAgcmVzb2x2ZShzZXEsIG9uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgcGFpcnMgPSByZXNvbHZlUGFpcnMoc2VxLCBvbkVycm9yKTtcbiAgICAgICAgY29uc3Qgc2VlbktleXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB7IGtleSB9IG9mIHBhaXJzLml0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXNTY2FsYXIoa2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWVuS2V5cy5pbmNsdWRlcyhrZXkudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoYE9yZGVyZWQgbWFwcyBtdXN0IG5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBrZXlzOiAke2tleS52YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5LZXlzLnB1c2goa2V5LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFlBTUxPTWFwKCksIHBhaXJzKTtcbiAgICB9LFxuICAgIGNyZWF0ZU5vZGU6IChzY2hlbWEsIGl0ZXJhYmxlLCBjdHgpID0+IFlBTUxPTWFwLmZyb20oc2NoZW1hLCBpdGVyYWJsZSwgY3R4KVxufTtcblxuZXhwb3J0IHsgWUFNTE9NYXAsIG9tYXAgfTtcbiIsICJpbXBvcnQgeyBTY2FsYXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9TY2FsYXIuanMnO1xuXG5mdW5jdGlvbiBib29sU3RyaW5naWZ5KHsgdmFsdWUsIHNvdXJjZSB9LCBjdHgpIHtcbiAgICBjb25zdCBib29sT2JqID0gdmFsdWUgPyB0cnVlVGFnIDogZmFsc2VUYWc7XG4gICAgaWYgKHNvdXJjZSAmJiBib29sT2JqLnRlc3QudGVzdChzb3VyY2UpKVxuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIHJldHVybiB2YWx1ZSA/IGN0eC5vcHRpb25zLnRydWVTdHIgOiBjdHgub3B0aW9ucy5mYWxzZVN0cjtcbn1cbmNvbnN0IHRydWVUYWcgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHZhbHVlID09PSB0cnVlLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsXG4gICAgdGVzdDogL14oPzpZfHl8W1l5XWVzfFlFU3xbVHRdcnVlfFRSVUV8W09vXW58T04pJC8sXG4gICAgcmVzb2x2ZTogKCkgPT4gbmV3IFNjYWxhcih0cnVlKSxcbiAgICBzdHJpbmdpZnk6IGJvb2xTdHJpbmdpZnlcbn07XG5jb25zdCBmYWxzZVRhZyA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdmFsdWUgPT09IGZhbHNlLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcsXG4gICAgdGVzdDogL14oPzpOfG58W05uXW98Tk98W0ZmXWFsc2V8RkFMU0V8W09vXWZmfE9GRikkLyxcbiAgICByZXNvbHZlOiAoKSA9PiBuZXcgU2NhbGFyKGZhbHNlKSxcbiAgICBzdHJpbmdpZnk6IGJvb2xTdHJpbmdpZnlcbn07XG5cbmV4cG9ydCB7IGZhbHNlVGFnLCB0cnVlVGFnIH07XG4iLCAiaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vLi4vbm9kZXMvU2NhbGFyLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeU51bWJlciB9IGZyb20gJy4uLy4uL3N0cmluZ2lmeS9zdHJpbmdpZnlOdW1iZXIuanMnO1xuXG5jb25zdCBmbG9hdE5hTiA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgICB0ZXN0OiAvXig/OlstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLm5hbnxcXC5OYU58XFwuTkFOKSQvLFxuICAgIHJlc29sdmU6IChzdHIpID0+IHN0ci5zbGljZSgtMykudG9Mb3dlckNhc2UoKSA9PT0gJ25hbidcbiAgICAgICAgPyBOYU5cbiAgICAgICAgOiBzdHJbMF0gPT09ICctJ1xuICAgICAgICAgICAgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICAgIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5TnVtYmVyXG59O1xuY29uc3QgZmxvYXRFeHAgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCcsXG4gICAgZm9ybWF0OiAnRVhQJyxcbiAgICB0ZXN0OiAvXlstK10/KD86WzAtOV1bMC05X10qKT8oPzpcXC5bMC05X10qKT9bZUVdWy0rXT9bMC05XSskLyxcbiAgICByZXNvbHZlOiAoc3RyKSA9PiBwYXJzZUZsb2F0KHN0ci5yZXBsYWNlKC9fL2csICcnKSksXG4gICAgc3RyaW5naWZ5KG5vZGUpIHtcbiAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKG5vZGUudmFsdWUpO1xuICAgICAgICByZXR1cm4gaXNGaW5pdGUobnVtKSA/IG51bS50b0V4cG9uZW50aWFsKCkgOiBzdHJpbmdpZnlOdW1iZXIobm9kZSk7XG4gICAgfVxufTtcbmNvbnN0IGZsb2F0ID0ge1xuICAgIGlkZW50aWZ5OiB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnLFxuICAgIHRlc3Q6IC9eWy0rXT8oPzpbMC05XVswLTlfXSopP1xcLlswLTlfXSokLyxcbiAgICByZXNvbHZlKHN0cikge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFNjYWxhcihwYXJzZUZsb2F0KHN0ci5yZXBsYWNlKC9fL2csICcnKSkpO1xuICAgICAgICBjb25zdCBkb3QgPSBzdHIuaW5kZXhPZignLicpO1xuICAgICAgICBpZiAoZG90ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZiA9IHN0ci5zdWJzdHJpbmcoZG90ICsgMSkucmVwbGFjZSgvXy9nLCAnJyk7XG4gICAgICAgICAgICBpZiAoZltmLmxlbmd0aCAtIDFdID09PSAnMCcpXG4gICAgICAgICAgICAgICAgbm9kZS5taW5GcmFjdGlvbkRpZ2l0cyA9IGYubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0sXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlOdW1iZXJcbn07XG5cbmV4cG9ydCB7IGZsb2F0LCBmbG9hdEV4cCwgZmxvYXROYU4gfTtcbiIsICJpbXBvcnQgeyBzdHJpbmdpZnlOdW1iZXIgfSBmcm9tICcuLi8uLi9zdHJpbmdpZnkvc3RyaW5naWZ5TnVtYmVyLmpzJztcblxuY29uc3QgaW50SWRlbnRpZnkgPSAodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgfHwgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG5mdW5jdGlvbiBpbnRSZXNvbHZlKHN0ciwgb2Zmc2V0LCByYWRpeCwgeyBpbnRBc0JpZ0ludCB9KSB7XG4gICAgY29uc3Qgc2lnbiA9IHN0clswXTtcbiAgICBpZiAoc2lnbiA9PT0gJy0nIHx8IHNpZ24gPT09ICcrJylcbiAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgc3RyID0gc3RyLnN1YnN0cmluZyhvZmZzZXQpLnJlcGxhY2UoL18vZywgJycpO1xuICAgIGlmIChpbnRBc0JpZ0ludCkge1xuICAgICAgICBzd2l0Y2ggKHJhZGl4KSB7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgc3RyID0gYDBiJHtzdHJ9YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICBzdHIgPSBgMG8ke3N0cn1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICBzdHIgPSBgMHgke3N0cn1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSBCaWdJbnQoc3RyKTtcbiAgICAgICAgcmV0dXJuIHNpZ24gPT09ICctJyA/IEJpZ0ludCgtMSkgKiBuIDogbjtcbiAgICB9XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KHN0ciwgcmFkaXgpO1xuICAgIHJldHVybiBzaWduID09PSAnLScgPyAtMSAqIG4gOiBuO1xufVxuZnVuY3Rpb24gaW50U3RyaW5naWZ5KG5vZGUsIHJhZGl4LCBwcmVmaXgpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBub2RlO1xuICAgIGlmIChpbnRJZGVudGlmeSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3Qgc3RyID0gdmFsdWUudG9TdHJpbmcocmFkaXgpO1xuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gJy0nICsgcHJlZml4ICsgc3RyLnN1YnN0cigxKSA6IHByZWZpeCArIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ2lmeU51bWJlcihub2RlKTtcbn1cbmNvbnN0IGludEJpbiA9IHtcbiAgICBpZGVudGlmeTogaW50SWRlbnRpZnksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICAgIGZvcm1hdDogJ0JJTicsXG4gICAgdGVzdDogL15bLStdPzBiWzAtMV9dKyQvLFxuICAgIHJlc29sdmU6IChzdHIsIF9vbkVycm9yLCBvcHQpID0+IGludFJlc29sdmUoc3RyLCAyLCAyLCBvcHQpLFxuICAgIHN0cmluZ2lmeTogbm9kZSA9PiBpbnRTdHJpbmdpZnkobm9kZSwgMiwgJzBiJylcbn07XG5jb25zdCBpbnRPY3QgPSB7XG4gICAgaWRlbnRpZnk6IGludElkZW50aWZ5LFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgICBmb3JtYXQ6ICdPQ1QnLFxuICAgIHRlc3Q6IC9eWy0rXT8wWzAtN19dKyQvLFxuICAgIHJlc29sdmU6IChzdHIsIF9vbkVycm9yLCBvcHQpID0+IGludFJlc29sdmUoc3RyLCAxLCA4LCBvcHQpLFxuICAgIHN0cmluZ2lmeTogbm9kZSA9PiBpbnRTdHJpbmdpZnkobm9kZSwgOCwgJzAnKVxufTtcbmNvbnN0IGludCA9IHtcbiAgICBpZGVudGlmeTogaW50SWRlbnRpZnksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICAgIHRlc3Q6IC9eWy0rXT9bMC05XVswLTlfXSokLyxcbiAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgb3B0KSA9PiBpbnRSZXNvbHZlKHN0ciwgMCwgMTAsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlOdW1iZXJcbn07XG5jb25zdCBpbnRIZXggPSB7XG4gICAgaWRlbnRpZnk6IGludElkZW50aWZ5LFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6aW50JyxcbiAgICBmb3JtYXQ6ICdIRVgnLFxuICAgIHRlc3Q6IC9eWy0rXT8weFswLTlhLWZBLUZfXSskLyxcbiAgICByZXNvbHZlOiAoc3RyLCBfb25FcnJvciwgb3B0KSA9PiBpbnRSZXNvbHZlKHN0ciwgMiwgMTYsIG9wdCksXG4gICAgc3RyaW5naWZ5OiBub2RlID0+IGludFN0cmluZ2lmeShub2RlLCAxNiwgJzB4Jylcbn07XG5cbmV4cG9ydCB7IGludCwgaW50QmluLCBpbnRIZXgsIGludE9jdCB9O1xuIiwgImltcG9ydCB7IGlzTWFwLCBpc1BhaXIsIGlzU2NhbGFyIH0gZnJvbSAnLi4vLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgUGFpciwgY3JlYXRlUGFpciB9IGZyb20gJy4uLy4uL25vZGVzL1BhaXIuanMnO1xuaW1wb3J0IHsgWUFNTE1hcCwgZmluZFBhaXIgfSBmcm9tICcuLi8uLi9ub2Rlcy9ZQU1MTWFwLmpzJztcblxuY2xhc3MgWUFNTFNldCBleHRlbmRzIFlBTUxNYXAge1xuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSkge1xuICAgICAgICBzdXBlcihzY2hlbWEpO1xuICAgICAgICB0aGlzLnRhZyA9IFlBTUxTZXQudGFnO1xuICAgIH1cbiAgICBhZGQoa2V5KSB7XG4gICAgICAgIGxldCBwYWlyO1xuICAgICAgICBpZiAoaXNQYWlyKGtleSkpXG4gICAgICAgICAgICBwYWlyID0ga2V5O1xuICAgICAgICBlbHNlIGlmIChrZXkgJiZcbiAgICAgICAgICAgIHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAna2V5JyBpbiBrZXkgJiZcbiAgICAgICAgICAgICd2YWx1ZScgaW4ga2V5ICYmXG4gICAgICAgICAgICBrZXkudmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICBwYWlyID0gbmV3IFBhaXIoa2V5LmtleSwgbnVsbCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhaXIgPSBuZXcgUGFpcihrZXksIG51bGwpO1xuICAgICAgICBjb25zdCBwcmV2ID0gZmluZFBhaXIodGhpcy5pdGVtcywgcGFpci5rZXkpO1xuICAgICAgICBpZiAoIXByZXYpXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocGFpcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGBrZWVwUGFpcmAgaXMgYHRydWVgLCByZXR1cm5zIHRoZSBQYWlyIG1hdGNoaW5nIGBrZXlgLlxuICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhhdCBQYWlyJ3Mga2V5LlxuICAgICAqL1xuICAgIGdldChrZXksIGtlZXBQYWlyKSB7XG4gICAgICAgIGNvbnN0IHBhaXIgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgICAgICByZXR1cm4gIWtlZXBQYWlyICYmIGlzUGFpcihwYWlyKVxuICAgICAgICAgICAgPyBpc1NjYWxhcihwYWlyLmtleSlcbiAgICAgICAgICAgICAgICA/IHBhaXIua2V5LnZhbHVlXG4gICAgICAgICAgICAgICAgOiBwYWlyLmtleVxuICAgICAgICAgICAgOiBwYWlyO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJvb2xlYW4gdmFsdWUgZm9yIHNldChrZXksIHZhbHVlKSBpbiBhIFlBTUwgc2V0LCBub3QgJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgICAgIGNvbnN0IHByZXYgPSBmaW5kUGFpcih0aGlzLml0ZW1zLCBrZXkpO1xuICAgICAgICBpZiAocHJldiAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuaW5kZXhPZihwcmV2KSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXByZXYgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChuZXcgUGFpcihrZXkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oXywgY3R4KSB7XG4gICAgICAgIHJldHVybiBzdXBlci50b0pTT04oXywgY3R4LCBTZXQpO1xuICAgIH1cbiAgICB0b1N0cmluZyhjdHgsIG9uQ29tbWVudCwgb25DaG9tcEtlZXApIHtcbiAgICAgICAgaWYgKCFjdHgpXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmhhc0FsbE51bGxWYWx1ZXModHJ1ZSkpXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoT2JqZWN0LmFzc2lnbih7fSwgY3R4LCB7IGFsbE51bGxWYWx1ZXM6IHRydWUgfSksIG9uQ29tbWVudCwgb25DaG9tcEtlZXApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldCBpdGVtcyBtdXN0IGFsbCBoYXZlIG51bGwgdmFsdWVzJyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tKHNjaGVtYSwgaXRlcmFibGUsIGN0eCkge1xuICAgICAgICBjb25zdCB7IHJlcGxhY2VyIH0gPSBjdHg7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyB0aGlzKHNjaGVtYSk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXJhYmxlKSlcbiAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZXBsYWNlci5jYWxsKGl0ZXJhYmxlLCB2YWx1ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHNldC5pdGVtcy5wdXNoKGNyZWF0ZVBhaXIodmFsdWUsIG51bGwsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0O1xuICAgIH1cbn1cbllBTUxTZXQudGFnID0gJ3RhZzp5YW1sLm9yZywyMDAyOnNldCc7XG5jb25zdCBzZXQgPSB7XG4gICAgY29sbGVjdGlvbjogJ21hcCcsXG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHZhbHVlIGluc3RhbmNlb2YgU2V0LFxuICAgIG5vZGVDbGFzczogWUFNTFNldCxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjpzZXQnLFxuICAgIGNyZWF0ZU5vZGU6IChzY2hlbWEsIGl0ZXJhYmxlLCBjdHgpID0+IFlBTUxTZXQuZnJvbShzY2hlbWEsIGl0ZXJhYmxlLCBjdHgpLFxuICAgIHJlc29sdmUobWFwLCBvbkVycm9yKSB7XG4gICAgICAgIGlmIChpc01hcChtYXApKSB7XG4gICAgICAgICAgICBpZiAobWFwLmhhc0FsbE51bGxWYWx1ZXModHJ1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFlBTUxTZXQoKSwgbWFwKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvbkVycm9yKCdTZXQgaXRlbXMgbXVzdCBhbGwgaGF2ZSBudWxsIHZhbHVlcycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9uRXJyb3IoJ0V4cGVjdGVkIGEgbWFwcGluZyBmb3IgdGhpcyB0YWcnKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBZQU1MU2V0LCBzZXQgfTtcbiIsICJpbXBvcnQgeyBzdHJpbmdpZnlOdW1iZXIgfSBmcm9tICcuLi8uLi9zdHJpbmdpZnkvc3RyaW5naWZ5TnVtYmVyLmpzJztcblxuLyoqIEludGVybmFsIHR5cGVzIGhhbmRsZSBiaWdpbnQgYXMgbnVtYmVyLCBiZWNhdXNlIFRTIGNhbid0IGZpZ3VyZSBpdCBvdXQuICovXG5mdW5jdGlvbiBwYXJzZVNleGFnZXNpbWFsKHN0ciwgYXNCaWdJbnQpIHtcbiAgICBjb25zdCBzaWduID0gc3RyWzBdO1xuICAgIGNvbnN0IHBhcnRzID0gc2lnbiA9PT0gJy0nIHx8IHNpZ24gPT09ICcrJyA/IHN0ci5zdWJzdHJpbmcoMSkgOiBzdHI7XG4gICAgY29uc3QgbnVtID0gKG4pID0+IGFzQmlnSW50ID8gQmlnSW50KG4pIDogTnVtYmVyKG4pO1xuICAgIGNvbnN0IHJlcyA9IHBhcnRzXG4gICAgICAgIC5yZXBsYWNlKC9fL2csICcnKVxuICAgICAgICAuc3BsaXQoJzonKVxuICAgICAgICAucmVkdWNlKChyZXMsIHApID0+IHJlcyAqIG51bSg2MCkgKyBudW0ocCksIG51bSgwKSk7XG4gICAgcmV0dXJuIChzaWduID09PSAnLScgPyBudW0oLTEpICogcmVzIDogcmVzKTtcbn1cbi8qKlxuICogaGhoaDptbTpzcy5zc3NcbiAqXG4gKiBJbnRlcm5hbCB0eXBlcyBoYW5kbGUgYmlnaW50IGFzIG51bWJlciwgYmVjYXVzZSBUUyBjYW4ndCBmaWd1cmUgaXQgb3V0LlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTZXhhZ2VzaW1hbChub2RlKSB7XG4gICAgbGV0IHsgdmFsdWUgfSA9IG5vZGU7XG4gICAgbGV0IG51bSA9IChuKSA9PiBuO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKVxuICAgICAgICBudW0gPSBuID0+IEJpZ0ludChuKTtcbiAgICBlbHNlIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeU51bWJlcihub2RlKTtcbiAgICBsZXQgc2lnbiA9ICcnO1xuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgdmFsdWUgKj0gbnVtKC0xKTtcbiAgICB9XG4gICAgY29uc3QgXzYwID0gbnVtKDYwKTtcbiAgICBjb25zdCBwYXJ0cyA9IFt2YWx1ZSAlIF82MF07IC8vIHNlY29uZHMsIGluY2x1ZGluZyBtc1xuICAgIGlmICh2YWx1ZSA8IDYwKSB7XG4gICAgICAgIHBhcnRzLnVuc2hpZnQoMCk7IC8vIGF0IGxlYXN0IG9uZSA6IGlzIHJlcXVpcmVkXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIHBhcnRzWzBdKSAvIF82MDtcbiAgICAgICAgcGFydHMudW5zaGlmdCh2YWx1ZSAlIF82MCk7IC8vIG1pbnV0ZXNcbiAgICAgICAgaWYgKHZhbHVlID49IDYwKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIHBhcnRzWzBdKSAvIF82MDtcbiAgICAgICAgICAgIHBhcnRzLnVuc2hpZnQodmFsdWUpOyAvLyBob3Vyc1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoc2lnbiArXG4gICAgICAgIHBhcnRzXG4gICAgICAgICAgICAubWFwKG4gPT4gU3RyaW5nKG4pLnBhZFN0YXJ0KDIsICcwJykpXG4gICAgICAgICAgICAuam9pbignOicpXG4gICAgICAgICAgICAucmVwbGFjZSgvMDAwMDAwXFxkKiQvLCAnJykgLy8gJSA2MCBtYXkgaW50cm9kdWNlIGVycm9yXG4gICAgKTtcbn1cbmNvbnN0IGludFRpbWUgPSB7XG4gICAgaWRlbnRpZnk6IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgfHwgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSksXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB0YWc6ICd0YWc6eWFtbC5vcmcsMjAwMjppbnQnLFxuICAgIGZvcm1hdDogJ1RJTUUnLFxuICAgIHRlc3Q6IC9eWy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pKyQvLFxuICAgIHJlc29sdmU6IChzdHIsIF9vbkVycm9yLCB7IGludEFzQmlnSW50IH0pID0+IHBhcnNlU2V4YWdlc2ltYWwoc3RyLCBpbnRBc0JpZ0ludCksXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlTZXhhZ2VzaW1hbFxufTtcbmNvbnN0IGZsb2F0VGltZSA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIHRhZzogJ3RhZzp5YW1sLm9yZywyMDAyOmZsb2F0JyxcbiAgICBmb3JtYXQ6ICdUSU1FJyxcbiAgICB0ZXN0OiAvXlstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXC5bMC05X10qJC8sXG4gICAgcmVzb2x2ZTogc3RyID0+IHBhcnNlU2V4YWdlc2ltYWwoc3RyLCBmYWxzZSksXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlTZXhhZ2VzaW1hbFxufTtcbmNvbnN0IHRpbWVzdGFtcCA9IHtcbiAgICBpZGVudGlmeTogdmFsdWUgPT4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgdGFnOiAndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJyxcbiAgICAvLyBJZiB0aGUgdGltZSB6b25lIGlzIG9taXR0ZWQsIHRoZSB0aW1lc3RhbXAgaXMgYXNzdW1lZCB0byBiZSBzcGVjaWZpZWQgaW4gVVRDLiBUaGUgdGltZSBwYXJ0XG4gICAgLy8gbWF5IGJlIG9taXR0ZWQgYWx0b2dldGhlciwgcmVzdWx0aW5nIGluIGEgZGF0ZSBmb3JtYXQuIEluIHN1Y2ggYSBjYXNlLCB0aGUgdGltZSBwYXJ0IGlzXG4gICAgLy8gYXNzdW1lZCB0byBiZSAwMDowMDowMFogKHN0YXJ0IG9mIGRheSwgVVRDKS5cbiAgICB0ZXN0OiBSZWdFeHAoJ14oWzAtOV17NH0pLShbMC05XXsxLDJ9KS0oWzAtOV17MSwyfSknICsgLy8gWVlZWS1NbS1EZFxuICAgICAgICAnKD86JyArIC8vIHRpbWUgaXMgb3B0aW9uYWxcbiAgICAgICAgJyg/OnR8VHxbIFxcXFx0XSspJyArIC8vIHQgfCBUIHwgd2hpdGVzcGFjZVxuICAgICAgICAnKFswLTldezEsMn0pOihbMC05XXsxLDJ9KTooWzAtOV17MSwyfShcXFxcLlswLTldKyk/KScgKyAvLyBIaDpNbTpTcyguc3MpP1xuICAgICAgICAnKD86WyBcXFxcdF0qKFp8Wy0rXVswMTJdP1swLTldKD86OlswLTldezJ9KT8pKT8nICsgLy8gWiB8ICs1IHwgLTAzOjMwXG4gICAgICAgICcpPyQnKSxcbiAgICByZXNvbHZlKHN0cikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHN0ci5tYXRjaCh0aW1lc3RhbXAudGVzdCk7XG4gICAgICAgIGlmICghbWF0Y2gpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyEhdGltZXN0YW1wIGV4cGVjdHMgYSBkYXRlLCBzdGFydGluZyB3aXRoIHl5eXktbW0tZGQnKTtcbiAgICAgICAgY29uc3QgWywgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRdID0gbWF0Y2gubWFwKE51bWJlcik7XG4gICAgICAgIGNvbnN0IG1pbGxpc2VjID0gbWF0Y2hbN10gPyBOdW1iZXIoKG1hdGNoWzddICsgJzAwJykuc3Vic3RyKDEsIDMpKSA6IDA7XG4gICAgICAgIGxldCBkYXRlID0gRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXksIGhvdXIgfHwgMCwgbWludXRlIHx8IDAsIHNlY29uZCB8fCAwLCBtaWxsaXNlYyk7XG4gICAgICAgIGNvbnN0IHR6ID0gbWF0Y2hbOF07XG4gICAgICAgIGlmICh0eiAmJiB0eiAhPT0gJ1onKSB7XG4gICAgICAgICAgICBsZXQgZCA9IHBhcnNlU2V4YWdlc2ltYWwodHosIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkKSA8IDMwKVxuICAgICAgICAgICAgICAgIGQgKj0gNjA7XG4gICAgICAgICAgICBkYXRlIC09IDYwMDAwICogZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSk7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6ICh7IHZhbHVlIH0pID0+IHZhbHVlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvKChUMDA6MDApPzowMCk/XFwuMDAwWiQvLCAnJylcbn07XG5cbmV4cG9ydCB7IGZsb2F0VGltZSwgaW50VGltZSwgdGltZXN0YW1wIH07XG4iLCAiaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi4vY29tbW9uL21hcC5qcyc7XG5pbXBvcnQgeyBudWxsVGFnIH0gZnJvbSAnLi4vY29tbW9uL251bGwuanMnO1xuaW1wb3J0IHsgc2VxIH0gZnJvbSAnLi4vY29tbW9uL3NlcS5qcyc7XG5pbXBvcnQgeyBzdHJpbmcgfSBmcm9tICcuLi9jb21tb24vc3RyaW5nLmpzJztcbmltcG9ydCB7IGJpbmFyeSB9IGZyb20gJy4vYmluYXJ5LmpzJztcbmltcG9ydCB7IHRydWVUYWcsIGZhbHNlVGFnIH0gZnJvbSAnLi9ib29sLmpzJztcbmltcG9ydCB7IGZsb2F0TmFOLCBmbG9hdEV4cCwgZmxvYXQgfSBmcm9tICcuL2Zsb2F0LmpzJztcbmltcG9ydCB7IGludEJpbiwgaW50T2N0LCBpbnQsIGludEhleCB9IGZyb20gJy4vaW50LmpzJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnLi9tZXJnZS5qcyc7XG5pbXBvcnQgeyBvbWFwIH0gZnJvbSAnLi9vbWFwLmpzJztcbmltcG9ydCB7IHBhaXJzIH0gZnJvbSAnLi9wYWlycy5qcyc7XG5pbXBvcnQgeyBzZXQgfSBmcm9tICcuL3NldC5qcyc7XG5pbXBvcnQgeyBpbnRUaW1lLCBmbG9hdFRpbWUsIHRpbWVzdGFtcCB9IGZyb20gJy4vdGltZXN0YW1wLmpzJztcblxuY29uc3Qgc2NoZW1hID0gW1xuICAgIG1hcCxcbiAgICBzZXEsXG4gICAgc3RyaW5nLFxuICAgIG51bGxUYWcsXG4gICAgdHJ1ZVRhZyxcbiAgICBmYWxzZVRhZyxcbiAgICBpbnRCaW4sXG4gICAgaW50T2N0LFxuICAgIGludCxcbiAgICBpbnRIZXgsXG4gICAgZmxvYXROYU4sXG4gICAgZmxvYXRFeHAsXG4gICAgZmxvYXQsXG4gICAgYmluYXJ5LFxuICAgIG1lcmdlLFxuICAgIG9tYXAsXG4gICAgcGFpcnMsXG4gICAgc2V0LFxuICAgIGludFRpbWUsXG4gICAgZmxvYXRUaW1lLFxuICAgIHRpbWVzdGFtcFxuXTtcblxuZXhwb3J0IHsgc2NoZW1hIH07XG4iLCAiaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9jb21tb24vbWFwLmpzJztcbmltcG9ydCB7IG51bGxUYWcgfSBmcm9tICcuL2NvbW1vbi9udWxsLmpzJztcbmltcG9ydCB7IHNlcSB9IGZyb20gJy4vY29tbW9uL3NlcS5qcyc7XG5pbXBvcnQgeyBzdHJpbmcgfSBmcm9tICcuL2NvbW1vbi9zdHJpbmcuanMnO1xuaW1wb3J0IHsgYm9vbFRhZyB9IGZyb20gJy4vY29yZS9ib29sLmpzJztcbmltcG9ydCB7IGZsb2F0LCBmbG9hdEV4cCwgZmxvYXROYU4gfSBmcm9tICcuL2NvcmUvZmxvYXQuanMnO1xuaW1wb3J0IHsgaW50LCBpbnRIZXgsIGludE9jdCB9IGZyb20gJy4vY29yZS9pbnQuanMnO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi9jb3JlL3NjaGVtYS5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgYXMgc2NoZW1hJDEgfSBmcm9tICcuL2pzb24vc2NoZW1hLmpzJztcbmltcG9ydCB7IGJpbmFyeSB9IGZyb20gJy4veWFtbC0xLjEvYmluYXJ5LmpzJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnLi95YW1sLTEuMS9tZXJnZS5qcyc7XG5pbXBvcnQgeyBvbWFwIH0gZnJvbSAnLi95YW1sLTEuMS9vbWFwLmpzJztcbmltcG9ydCB7IHBhaXJzIH0gZnJvbSAnLi95YW1sLTEuMS9wYWlycy5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgYXMgc2NoZW1hJDIgfSBmcm9tICcuL3lhbWwtMS4xL3NjaGVtYS5qcyc7XG5pbXBvcnQgeyBzZXQgfSBmcm9tICcuL3lhbWwtMS4xL3NldC5qcyc7XG5pbXBvcnQgeyB0aW1lc3RhbXAsIGZsb2F0VGltZSwgaW50VGltZSB9IGZyb20gJy4veWFtbC0xLjEvdGltZXN0YW1wLmpzJztcblxuY29uc3Qgc2NoZW1hcyA9IG5ldyBNYXAoW1xuICAgIFsnY29yZScsIHNjaGVtYV0sXG4gICAgWydmYWlsc2FmZScsIFttYXAsIHNlcSwgc3RyaW5nXV0sXG4gICAgWydqc29uJywgc2NoZW1hJDFdLFxuICAgIFsneWFtbDExJywgc2NoZW1hJDJdLFxuICAgIFsneWFtbC0xLjEnLCBzY2hlbWEkMl1cbl0pO1xuY29uc3QgdGFnc0J5TmFtZSA9IHtcbiAgICBiaW5hcnksXG4gICAgYm9vbDogYm9vbFRhZyxcbiAgICBmbG9hdCxcbiAgICBmbG9hdEV4cCxcbiAgICBmbG9hdE5hTixcbiAgICBmbG9hdFRpbWUsXG4gICAgaW50LFxuICAgIGludEhleCxcbiAgICBpbnRPY3QsXG4gICAgaW50VGltZSxcbiAgICBtYXAsXG4gICAgbWVyZ2UsXG4gICAgbnVsbDogbnVsbFRhZyxcbiAgICBvbWFwLFxuICAgIHBhaXJzLFxuICAgIHNlcSxcbiAgICBzZXQsXG4gICAgdGltZXN0YW1wXG59O1xuY29uc3QgY29yZUtub3duVGFncyA9IHtcbiAgICAndGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5JzogYmluYXJ5LFxuICAgICd0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSc6IG1lcmdlLFxuICAgICd0YWc6eWFtbC5vcmcsMjAwMjpvbWFwJzogb21hcCxcbiAgICAndGFnOnlhbWwub3JnLDIwMDI6cGFpcnMnOiBwYWlycyxcbiAgICAndGFnOnlhbWwub3JnLDIwMDI6c2V0Jzogc2V0LFxuICAgICd0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAnOiB0aW1lc3RhbXBcbn07XG5mdW5jdGlvbiBnZXRUYWdzKGN1c3RvbVRhZ3MsIHNjaGVtYU5hbWUsIGFkZE1lcmdlVGFnKSB7XG4gICAgY29uc3Qgc2NoZW1hVGFncyA9IHNjaGVtYXMuZ2V0KHNjaGVtYU5hbWUpO1xuICAgIGlmIChzY2hlbWFUYWdzICYmICFjdXN0b21UYWdzKSB7XG4gICAgICAgIHJldHVybiBhZGRNZXJnZVRhZyAmJiAhc2NoZW1hVGFncy5pbmNsdWRlcyhtZXJnZSlcbiAgICAgICAgICAgID8gc2NoZW1hVGFncy5jb25jYXQobWVyZ2UpXG4gICAgICAgICAgICA6IHNjaGVtYVRhZ3Muc2xpY2UoKTtcbiAgICB9XG4gICAgbGV0IHRhZ3MgPSBzY2hlbWFUYWdzO1xuICAgIGlmICghdGFncykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXN0b21UYWdzKSlcbiAgICAgICAgICAgIHRhZ3MgPSBbXTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gQXJyYXkuZnJvbShzY2hlbWFzLmtleXMoKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBrZXkgIT09ICd5YW1sMTEnKVxuICAgICAgICAgICAgICAgIC5tYXAoa2V5ID0+IEpTT04uc3RyaW5naWZ5KGtleSkpXG4gICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc2NoZW1hIFwiJHtzY2hlbWFOYW1lfVwiOyB1c2Ugb25lIG9mICR7a2V5c30gb3IgZGVmaW5lIGN1c3RvbVRhZ3MgYXJyYXlgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXN0b21UYWdzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiBjdXN0b21UYWdzKVxuICAgICAgICAgICAgdGFncyA9IHRhZ3MuY29uY2F0KHRhZyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjdXN0b21UYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRhZ3MgPSBjdXN0b21UYWdzKHRhZ3Muc2xpY2UoKSk7XG4gICAgfVxuICAgIGlmIChhZGRNZXJnZVRhZylcbiAgICAgICAgdGFncyA9IHRhZ3MuY29uY2F0KG1lcmdlKTtcbiAgICByZXR1cm4gdGFncy5yZWR1Y2UoKHRhZ3MsIHRhZykgPT4ge1xuICAgICAgICBjb25zdCB0YWdPYmogPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IHRhZ3NCeU5hbWVbdGFnXSA6IHRhZztcbiAgICAgICAgaWYgKCF0YWdPYmopIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSBKU09OLnN0cmluZ2lmeSh0YWcpO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRhZ3NCeU5hbWUpXG4gICAgICAgICAgICAgICAgLm1hcChrZXkgPT4gSlNPTi5zdHJpbmdpZnkoa2V5KSlcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjdXN0b20gdGFnICR7dGFnTmFtZX07IHVzZSBvbmUgb2YgJHtrZXlzfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFncy5pbmNsdWRlcyh0YWdPYmopKVxuICAgICAgICAgICAgdGFncy5wdXNoKHRhZ09iaik7XG4gICAgICAgIHJldHVybiB0YWdzO1xuICAgIH0sIFtdKTtcbn1cblxuZXhwb3J0IHsgY29yZUtub3duVGFncywgZ2V0VGFncyB9O1xuIiwgImltcG9ydCB7IE1BUCwgU0NBTEFSLCBTRVEgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICcuL2NvbW1vbi9tYXAuanMnO1xuaW1wb3J0IHsgc2VxIH0gZnJvbSAnLi9jb21tb24vc2VxLmpzJztcbmltcG9ydCB7IHN0cmluZyB9IGZyb20gJy4vY29tbW9uL3N0cmluZy5qcyc7XG5pbXBvcnQgeyBnZXRUYWdzLCBjb3JlS25vd25UYWdzIH0gZnJvbSAnLi90YWdzLmpzJztcblxuY29uc3Qgc29ydE1hcEVudHJpZXNCeUtleSA9IChhLCBiKSA9PiBhLmtleSA8IGIua2V5ID8gLTEgOiBhLmtleSA+IGIua2V5ID8gMSA6IDA7XG5jbGFzcyBTY2hlbWEge1xuICAgIGNvbnN0cnVjdG9yKHsgY29tcGF0LCBjdXN0b21UYWdzLCBtZXJnZSwgcmVzb2x2ZUtub3duVGFncywgc2NoZW1hLCBzb3J0TWFwRW50cmllcywgdG9TdHJpbmdEZWZhdWx0cyB9KSB7XG4gICAgICAgIHRoaXMuY29tcGF0ID0gQXJyYXkuaXNBcnJheShjb21wYXQpXG4gICAgICAgICAgICA/IGdldFRhZ3MoY29tcGF0LCAnY29tcGF0JylcbiAgICAgICAgICAgIDogY29tcGF0XG4gICAgICAgICAgICAgICAgPyBnZXRUYWdzKG51bGwsIGNvbXBhdClcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHRoaXMubmFtZSA9ICh0eXBlb2Ygc2NoZW1hID09PSAnc3RyaW5nJyAmJiBzY2hlbWEpIHx8ICdjb3JlJztcbiAgICAgICAgdGhpcy5rbm93blRhZ3MgPSByZXNvbHZlS25vd25UYWdzID8gY29yZUtub3duVGFncyA6IHt9O1xuICAgICAgICB0aGlzLnRhZ3MgPSBnZXRUYWdzKGN1c3RvbVRhZ3MsIHRoaXMubmFtZSwgbWVyZ2UpO1xuICAgICAgICB0aGlzLnRvU3RyaW5nT3B0aW9ucyA9IHRvU3RyaW5nRGVmYXVsdHMgPz8gbnVsbDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIE1BUCwgeyB2YWx1ZTogbWFwIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgU0NBTEFSLCB7IHZhbHVlOiBzdHJpbmcgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTRVEsIHsgdmFsdWU6IHNlcSB9KTtcbiAgICAgICAgLy8gVXNlZCBieSBjcmVhdGVNYXAoKVxuICAgICAgICB0aGlzLnNvcnRNYXBFbnRyaWVzID1cbiAgICAgICAgICAgIHR5cGVvZiBzb3J0TWFwRW50cmllcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gc29ydE1hcEVudHJpZXNcbiAgICAgICAgICAgICAgICA6IHNvcnRNYXBFbnRyaWVzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8gc29ydE1hcEVudHJpZXNCeUtleVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBjb3B5ID0gT2JqZWN0LmNyZWF0ZShTY2hlbWEucHJvdG90eXBlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0aGlzKSk7XG4gICAgICAgIGNvcHkudGFncyA9IHRoaXMudGFncy5zbGljZSgpO1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IFNjaGVtYSB9O1xuIiwgImltcG9ydCB7IGlzTm9kZSB9IGZyb20gJy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IGNyZWF0ZVN0cmluZ2lmeUNvbnRleHQsIHN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcbmltcG9ydCB7IGluZGVudENvbW1lbnQsIGxpbmVDb21tZW50IH0gZnJvbSAnLi9zdHJpbmdpZnlDb21tZW50LmpzJztcblxuZnVuY3Rpb24gc3RyaW5naWZ5RG9jdW1lbnQoZG9jLCBvcHRpb25zKSB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBsZXQgaGFzRGlyZWN0aXZlcyA9IG9wdGlvbnMuZGlyZWN0aXZlcyA9PT0gdHJ1ZTtcbiAgICBpZiAob3B0aW9ucy5kaXJlY3RpdmVzICE9PSBmYWxzZSAmJiBkb2MuZGlyZWN0aXZlcykge1xuICAgICAgICBjb25zdCBkaXIgPSBkb2MuZGlyZWN0aXZlcy50b1N0cmluZyhkb2MpO1xuICAgICAgICBpZiAoZGlyKSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKGRpcik7XG4gICAgICAgICAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkb2MuZGlyZWN0aXZlcy5kb2NTdGFydClcbiAgICAgICAgICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoaGFzRGlyZWN0aXZlcylcbiAgICAgICAgbGluZXMucHVzaCgnLS0tJyk7XG4gICAgY29uc3QgY3R4ID0gY3JlYXRlU3RyaW5naWZ5Q29udGV4dChkb2MsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHsgY29tbWVudFN0cmluZyB9ID0gY3R4Lm9wdGlvbnM7XG4gICAgaWYgKGRvYy5jb21tZW50QmVmb3JlKSB7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICBsaW5lcy51bnNoaWZ0KCcnKTtcbiAgICAgICAgY29uc3QgY3MgPSBjb21tZW50U3RyaW5nKGRvYy5jb21tZW50QmVmb3JlKTtcbiAgICAgICAgbGluZXMudW5zaGlmdChpbmRlbnRDb21tZW50KGNzLCAnJykpO1xuICAgIH1cbiAgICBsZXQgY2hvbXBLZWVwID0gZmFsc2U7XG4gICAgbGV0IGNvbnRlbnRDb21tZW50ID0gbnVsbDtcbiAgICBpZiAoZG9jLmNvbnRlbnRzKSB7XG4gICAgICAgIGlmIChpc05vZGUoZG9jLmNvbnRlbnRzKSkge1xuICAgICAgICAgICAgaWYgKGRvYy5jb250ZW50cy5zcGFjZUJlZm9yZSAmJiBoYXNEaXJlY3RpdmVzKVxuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgICAgICAgICAgaWYgKGRvYy5jb250ZW50cy5jb21tZW50QmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3MgPSBjb21tZW50U3RyaW5nKGRvYy5jb250ZW50cy5jb21tZW50QmVmb3JlKTtcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGluZGVudENvbW1lbnQoY3MsICcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0b3AtbGV2ZWwgYmxvY2sgc2NhbGFycyBuZWVkIHRvIGJlIGluZGVudGVkIGlmIGZvbGxvd2VkIGJ5IGEgY29tbWVudFxuICAgICAgICAgICAgY3R4LmZvcmNlQmxvY2tJbmRlbnQgPSAhIWRvYy5jb21tZW50O1xuICAgICAgICAgICAgY29udGVudENvbW1lbnQgPSBkb2MuY29udGVudHMuY29tbWVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbkNob21wS2VlcCA9IGNvbnRlbnRDb21tZW50ID8gdW5kZWZpbmVkIDogKCkgPT4gKGNob21wS2VlcCA9IHRydWUpO1xuICAgICAgICBsZXQgYm9keSA9IHN0cmluZ2lmeShkb2MuY29udGVudHMsIGN0eCwgKCkgPT4gKGNvbnRlbnRDb21tZW50ID0gbnVsbCksIG9uQ2hvbXBLZWVwKTtcbiAgICAgICAgaWYgKGNvbnRlbnRDb21tZW50KVxuICAgICAgICAgICAgYm9keSArPSBsaW5lQ29tbWVudChib2R5LCAnJywgY29tbWVudFN0cmluZyhjb250ZW50Q29tbWVudCkpO1xuICAgICAgICBpZiAoKGJvZHlbMF0gPT09ICd8JyB8fCBib2R5WzBdID09PSAnPicpICYmXG4gICAgICAgICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9PT0gJy0tLScpIHtcbiAgICAgICAgICAgIC8vIFRvcC1sZXZlbCBibG9jayBzY2FsYXJzIHdpdGggYSBwcmVjZWRpbmcgZG9jIG1hcmtlciBvdWdodCB0byB1c2UgdGhlXG4gICAgICAgICAgICAvLyBzYW1lIGxpbmUgZm9yIHRoZWlyIGhlYWRlci5cbiAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdID0gYC0tLSAke2JvZHl9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBsaW5lcy5wdXNoKGJvZHkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGluZXMucHVzaChzdHJpbmdpZnkoZG9jLmNvbnRlbnRzLCBjdHgpKTtcbiAgICB9XG4gICAgaWYgKGRvYy5kaXJlY3RpdmVzPy5kb2NFbmQpIHtcbiAgICAgICAgaWYgKGRvYy5jb21tZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjcyA9IGNvbW1lbnRTdHJpbmcoZG9jLmNvbW1lbnQpO1xuICAgICAgICAgICAgaWYgKGNzLmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJy4uLicpO1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goaW5kZW50Q29tbWVudChjcywgJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goYC4uLiAke2NzfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnLi4uJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBkYyA9IGRvYy5jb21tZW50O1xuICAgICAgICBpZiAoZGMgJiYgY2hvbXBLZWVwKVxuICAgICAgICAgICAgZGMgPSBkYy5yZXBsYWNlKC9eXFxuKy8sICcnKTtcbiAgICAgICAgaWYgKGRjKSB7XG4gICAgICAgICAgICBpZiAoKCFjaG9tcEtlZXAgfHwgY29udGVudENvbW1lbnQpICYmIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdICE9PSAnJylcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goaW5kZW50Q29tbWVudChjb21tZW50U3RyaW5nKGRjKSwgJycpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJykgKyAnXFxuJztcbn1cblxuZXhwb3J0IHsgc3RyaW5naWZ5RG9jdW1lbnQgfTtcbiIsICJpbXBvcnQgeyBBbGlhcyB9IGZyb20gJy4uL25vZGVzL0FsaWFzLmpzJztcbmltcG9ydCB7IGlzRW1wdHlQYXRoLCBjb2xsZWN0aW9uRnJvbVBhdGggfSBmcm9tICcuLi9ub2Rlcy9Db2xsZWN0aW9uLmpzJztcbmltcG9ydCB7IE5PREVfVFlQRSwgRE9DLCBpc05vZGUsIGlzQ29sbGVjdGlvbiwgaXNTY2FsYXIgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBQYWlyIH0gZnJvbSAnLi4vbm9kZXMvUGFpci5qcyc7XG5pbXBvcnQgeyB0b0pTIH0gZnJvbSAnLi4vbm9kZXMvdG9KUy5qcyc7XG5pbXBvcnQgeyBTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWEvU2NoZW1hLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeURvY3VtZW50IH0gZnJvbSAnLi4vc3RyaW5naWZ5L3N0cmluZ2lmeURvY3VtZW50LmpzJztcbmltcG9ydCB7IGFuY2hvck5hbWVzLCBmaW5kTmV3QW5jaG9yLCBjcmVhdGVOb2RlQW5jaG9ycyB9IGZyb20gJy4vYW5jaG9ycy5qcyc7XG5pbXBvcnQgeyBhcHBseVJldml2ZXIgfSBmcm9tICcuL2FwcGx5UmV2aXZlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVOb2RlIH0gZnJvbSAnLi9jcmVhdGVOb2RlLmpzJztcbmltcG9ydCB7IERpcmVjdGl2ZXMgfSBmcm9tICcuL2RpcmVjdGl2ZXMuanMnO1xuXG5jbGFzcyBEb2N1bWVudCB7XG4gICAgY29uc3RydWN0b3IodmFsdWUsIHJlcGxhY2VyLCBvcHRpb25zKSB7XG4gICAgICAgIC8qKiBBIGNvbW1lbnQgYmVmb3JlIHRoaXMgRG9jdW1lbnQgKi9cbiAgICAgICAgdGhpcy5jb21tZW50QmVmb3JlID0gbnVsbDtcbiAgICAgICAgLyoqIEEgY29tbWVudCBpbW1lZGlhdGVseSBhZnRlciB0aGlzIERvY3VtZW50ICovXG4gICAgICAgIHRoaXMuY29tbWVudCA9IG51bGw7XG4gICAgICAgIC8qKiBFcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHBhcnNpbmcuICovXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgIC8qKiBXYXJuaW5ncyBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZy4gKi9cbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgTk9ERV9UWVBFLCB7IHZhbHVlOiBET0MgfSk7XG4gICAgICAgIGxldCBfcmVwbGFjZXIgPSBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnZnVuY3Rpb24nIHx8IEFycmF5LmlzQXJyYXkocmVwbGFjZXIpKSB7XG4gICAgICAgICAgICBfcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgJiYgcmVwbGFjZXIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSByZXBsYWNlcjtcbiAgICAgICAgICAgIHJlcGxhY2VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgaW50QXNCaWdJbnQ6IGZhbHNlLFxuICAgICAgICAgICAga2VlcFNvdXJjZVRva2VuczogZmFsc2UsXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3dhcm4nLFxuICAgICAgICAgICAgcHJldHR5RXJyb3JzOiB0cnVlLFxuICAgICAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICAgICAgc3RyaW5nS2V5czogZmFsc2UsXG4gICAgICAgICAgICB1bmlxdWVLZXlzOiB0cnVlLFxuICAgICAgICAgICAgdmVyc2lvbjogJzEuMidcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdDtcbiAgICAgICAgbGV0IHsgdmVyc2lvbiB9ID0gb3B0O1xuICAgICAgICBpZiAob3B0aW9ucz8uX2RpcmVjdGl2ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IG9wdGlvbnMuX2RpcmVjdGl2ZXMuYXREb2N1bWVudCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcy55YW1sLmV4cGxpY2l0KVxuICAgICAgICAgICAgICAgIHZlcnNpb24gPSB0aGlzLmRpcmVjdGl2ZXMueWFtbC52ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IG5ldyBEaXJlY3RpdmVzKHsgdmVyc2lvbiB9KTtcbiAgICAgICAgdGhpcy5zZXRTY2hlbWEodmVyc2lvbiwgb3B0aW9ucyk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2FuJ3QgcmVhbGx5IGtub3cgdGhhdCB0aGlzIG1hdGNoZXMgQ29udGVudHMuXG4gICAgICAgIHRoaXMuY29udGVudHMgPVxuICAgICAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB0aGlzLmNyZWF0ZU5vZGUodmFsdWUsIF9yZXBsYWNlciwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGRlZXAgY29weSBvZiB0aGlzIERvY3VtZW50IGFuZCBpdHMgY29udGVudHMuXG4gICAgICpcbiAgICAgKiBDdXN0b20gTm9kZSB2YWx1ZXMgdGhhdCBpbmhlcml0IGZyb20gYE9iamVjdGAgc3RpbGwgcmVmZXIgdG8gdGhlaXIgb3JpZ2luYWwgaW5zdGFuY2VzLlxuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBjb3B5ID0gT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIFtOT0RFX1RZUEVdOiB7IHZhbHVlOiBET0MgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29weS5jb21tZW50QmVmb3JlID0gdGhpcy5jb21tZW50QmVmb3JlO1xuICAgICAgICBjb3B5LmNvbW1lbnQgPSB0aGlzLmNvbW1lbnQ7XG4gICAgICAgIGNvcHkuZXJyb3JzID0gdGhpcy5lcnJvcnMuc2xpY2UoKTtcbiAgICAgICAgY29weS53YXJuaW5ncyA9IHRoaXMud2FybmluZ3Muc2xpY2UoKTtcbiAgICAgICAgY29weS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcylcbiAgICAgICAgICAgIGNvcHkuZGlyZWN0aXZlcyA9IHRoaXMuZGlyZWN0aXZlcy5jbG9uZSgpO1xuICAgICAgICBjb3B5LnNjaGVtYSA9IHRoaXMuc2NoZW1hLmNsb25lKCk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2FuJ3QgcmVhbGx5IGtub3cgdGhhdCB0aGlzIG1hdGNoZXMgQ29udGVudHMuXG4gICAgICAgIGNvcHkuY29udGVudHMgPSBpc05vZGUodGhpcy5jb250ZW50cylcbiAgICAgICAgICAgID8gdGhpcy5jb250ZW50cy5jbG9uZShjb3B5LnNjaGVtYSlcbiAgICAgICAgICAgIDogdGhpcy5jb250ZW50cztcbiAgICAgICAgaWYgKHRoaXMucmFuZ2UpXG4gICAgICAgICAgICBjb3B5LnJhbmdlID0gdGhpcy5yYW5nZS5zbGljZSgpO1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG4gICAgLyoqIEFkZHMgYSB2YWx1ZSB0byB0aGUgZG9jdW1lbnQuICovXG4gICAgYWRkKHZhbHVlKSB7XG4gICAgICAgIGlmIChhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpKVxuICAgICAgICAgICAgdGhpcy5jb250ZW50cy5hZGQodmFsdWUpO1xuICAgIH1cbiAgICAvKiogQWRkcyBhIHZhbHVlIHRvIHRoZSBkb2N1bWVudC4gKi9cbiAgICBhZGRJbihwYXRoLCB2YWx1ZSkge1xuICAgICAgICBpZiAoYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSlcbiAgICAgICAgICAgIHRoaXMuY29udGVudHMuYWRkSW4ocGF0aCwgdmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgYEFsaWFzYCBub2RlLCBlbnN1cmluZyB0aGF0IHRoZSB0YXJnZXQgYG5vZGVgIGhhcyB0aGUgcmVxdWlyZWQgYW5jaG9yLlxuICAgICAqXG4gICAgICogSWYgYG5vZGVgIGFscmVhZHkgaGFzIGFuIGFuY2hvciwgYG5hbWVgIGlzIGlnbm9yZWQuXG4gICAgICogT3RoZXJ3aXNlLCB0aGUgYG5vZGUuYW5jaG9yYCB2YWx1ZSB3aWxsIGJlIHNldCB0byBgbmFtZWAsXG4gICAgICogb3IgaWYgYW4gYW5jaG9yIHdpdGggdGhhdCBuYW1lIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQsXG4gICAgICogYG5hbWVgIHdpbGwgYmUgdXNlZCBhcyBhIHByZWZpeCBmb3IgYSBuZXcgdW5pcXVlIGFuY2hvci5cbiAgICAgKiBJZiBgbmFtZWAgaXMgdW5kZWZpbmVkLCB0aGUgZ2VuZXJhdGVkIGFuY2hvciB3aWxsIHVzZSAnYScgYXMgYSBwcmVmaXguXG4gICAgICovXG4gICAgY3JlYXRlQWxpYXMobm9kZSwgbmFtZSkge1xuICAgICAgICBpZiAoIW5vZGUuYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gYW5jaG9yTmFtZXModGhpcyk7XG4gICAgICAgICAgICBub2RlLmFuY2hvciA9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItbnVsbGlzaC1jb2FsZXNjaW5nXG4gICAgICAgICAgICAgICAgIW5hbWUgfHwgcHJldi5oYXMobmFtZSkgPyBmaW5kTmV3QW5jaG9yKG5hbWUgfHwgJ2EnLCBwcmV2KSA6IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhcyhub2RlLmFuY2hvcik7XG4gICAgfVxuICAgIGNyZWF0ZU5vZGUodmFsdWUsIHJlcGxhY2VyLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBfcmVwbGFjZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZXIuY2FsbCh7ICcnOiB2YWx1ZSB9LCAnJywgdmFsdWUpO1xuICAgICAgICAgICAgX3JlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleVRvU3RyID0gKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB8fCB2IGluc3RhbmNlb2YgU3RyaW5nIHx8IHYgaW5zdGFuY2VvZiBOdW1iZXI7XG4gICAgICAgICAgICBjb25zdCBhc1N0ciA9IHJlcGxhY2VyLmZpbHRlcihrZXlUb1N0cikubWFwKFN0cmluZyk7XG4gICAgICAgICAgICBpZiAoYXNTdHIubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICByZXBsYWNlciA9IHJlcGxhY2VyLmNvbmNhdChhc1N0cik7XG4gICAgICAgICAgICBfcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgJiYgcmVwbGFjZXIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSByZXBsYWNlcjtcbiAgICAgICAgICAgIHJlcGxhY2VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYWxpYXNEdXBsaWNhdGVPYmplY3RzLCBhbmNob3JQcmVmaXgsIGZsb3csIGtlZXBVbmRlZmluZWQsIG9uVGFnT2JqLCB0YWcgfSA9IG9wdGlvbnMgPz8ge307XG4gICAgICAgIGNvbnN0IHsgb25BbmNob3IsIHNldEFuY2hvcnMsIHNvdXJjZU9iamVjdHMgfSA9IGNyZWF0ZU5vZGVBbmNob3JzKHRoaXMsIFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1udWxsaXNoLWNvYWxlc2NpbmdcbiAgICAgICAgYW5jaG9yUHJlZml4IHx8ICdhJyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGFsaWFzRHVwbGljYXRlT2JqZWN0czogYWxpYXNEdXBsaWNhdGVPYmplY3RzID8/IHRydWUsXG4gICAgICAgICAgICBrZWVwVW5kZWZpbmVkOiBrZWVwVW5kZWZpbmVkID8/IGZhbHNlLFxuICAgICAgICAgICAgb25BbmNob3IsXG4gICAgICAgICAgICBvblRhZ09iaixcbiAgICAgICAgICAgIHJlcGxhY2VyOiBfcmVwbGFjZXIsXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICAgICAgc291cmNlT2JqZWN0c1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBub2RlID0gY3JlYXRlTm9kZSh2YWx1ZSwgdGFnLCBjdHgpO1xuICAgICAgICBpZiAoZmxvdyAmJiBpc0NvbGxlY3Rpb24obm9kZSkpXG4gICAgICAgICAgICBub2RlLmZsb3cgPSB0cnVlO1xuICAgICAgICBzZXRBbmNob3JzKCk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEga2V5IGFuZCBhIHZhbHVlIGludG8gYSBgUGFpcmAgdXNpbmcgdGhlIGN1cnJlbnQgc2NoZW1hLFxuICAgICAqIHJlY3Vyc2l2ZWx5IHdyYXBwaW5nIGFsbCB2YWx1ZXMgYXMgYFNjYWxhcmAgb3IgYENvbGxlY3Rpb25gIG5vZGVzLlxuICAgICAqL1xuICAgIGNyZWF0ZVBhaXIoa2V5LCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGsgPSB0aGlzLmNyZWF0ZU5vZGUoa2V5LCBudWxsLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuY3JlYXRlTm9kZSh2YWx1ZSwgbnVsbCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFpcihrLCB2KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIGRvY3VtZW50LlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlbSB3YXMgZm91bmQgYW5kIHJlbW92ZWQuXG4gICAgICovXG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICByZXR1cm4gYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSA/IHRoaXMuY29udGVudHMuZGVsZXRlKGtleSkgOiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIGRvY3VtZW50LlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlbSB3YXMgZm91bmQgYW5kIHJlbW92ZWQuXG4gICAgICovXG4gICAgZGVsZXRlSW4ocGF0aCkge1xuICAgICAgICBpZiAoaXNFbXB0eVBhdGgocGF0aCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRzID09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBQcmVzdW1lZCBpbXBvc3NpYmxlIGlmIFN0cmljdCBleHRlbmRzIGZhbHNlXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3NlcnRDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpXG4gICAgICAgICAgICA/IHRoaXMuY29udGVudHMuZGVsZXRlSW4ocGF0aClcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaXRlbSBhdCBga2V5YCwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLiBCeSBkZWZhdWx0IHVud3JhcHNcbiAgICAgKiBzY2FsYXIgdmFsdWVzIGZyb20gdGhlaXIgc3Vycm91bmRpbmcgbm9kZTsgdG8gZGlzYWJsZSBzZXQgYGtlZXBTY2FsYXJgIHRvXG4gICAgICogYHRydWVgIChjb2xsZWN0aW9ucyBhcmUgYWx3YXlzIHJldHVybmVkIGludGFjdCkuXG4gICAgICovXG4gICAgZ2V0KGtleSwga2VlcFNjYWxhcikge1xuICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpXG4gICAgICAgICAgICA/IHRoaXMuY29udGVudHMuZ2V0KGtleSwga2VlcFNjYWxhcilcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGl0ZW0gYXQgYHBhdGhgLCBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmQuIEJ5IGRlZmF1bHQgdW53cmFwc1xuICAgICAqIHNjYWxhciB2YWx1ZXMgZnJvbSB0aGVpciBzdXJyb3VuZGluZyBub2RlOyB0byBkaXNhYmxlIHNldCBga2VlcFNjYWxhcmAgdG9cbiAgICAgKiBgdHJ1ZWAgKGNvbGxlY3Rpb25zIGFyZSBhbHdheXMgcmV0dXJuZWQgaW50YWN0KS5cbiAgICAgKi9cbiAgICBnZXRJbihwYXRoLCBrZWVwU2NhbGFyKSB7XG4gICAgICAgIGlmIChpc0VtcHR5UGF0aChwYXRoKSlcbiAgICAgICAgICAgIHJldHVybiAha2VlcFNjYWxhciAmJiBpc1NjYWxhcih0aGlzLmNvbnRlbnRzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5jb250ZW50cy52YWx1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5jb250ZW50cztcbiAgICAgICAgcmV0dXJuIGlzQ29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKVxuICAgICAgICAgICAgPyB0aGlzLmNvbnRlbnRzLmdldEluKHBhdGgsIGtlZXBTY2FsYXIpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBkb2N1bWVudCBpbmNsdWRlcyBhIHZhbHVlIHdpdGggdGhlIGtleSBga2V5YC5cbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBpc0NvbGxlY3Rpb24odGhpcy5jb250ZW50cykgPyB0aGlzLmNvbnRlbnRzLmhhcyhrZXkpIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZG9jdW1lbnQgaW5jbHVkZXMgYSB2YWx1ZSBhdCBgcGF0aGAuXG4gICAgICovXG4gICAgaGFzSW4ocGF0aCkge1xuICAgICAgICBpZiAoaXNFbXB0eVBhdGgocGF0aCkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50cyAhPT0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uKHRoaXMuY29udGVudHMpID8gdGhpcy5jb250ZW50cy5oYXNJbihwYXRoKSA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgdmFsdWUgaW4gdGhpcyBkb2N1bWVudC4gRm9yIGAhIXNldGAsIGB2YWx1ZWAgbmVlZHMgdG8gYmUgYVxuICAgICAqIGJvb2xlYW4gdG8gYWRkL3JlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBzZXQuXG4gICAgICovXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBXZSBjYW4ndCByZWFsbHkga25vdyB0aGF0IHRoaXMgbWF0Y2hlcyBDb250ZW50cy5cbiAgICAgICAgICAgIHRoaXMuY29udGVudHMgPSBjb2xsZWN0aW9uRnJvbVBhdGgodGhpcy5zY2hlbWEsIFtrZXldLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBhIHZhbHVlIGluIHRoaXMgZG9jdW1lbnQuIEZvciBgISFzZXRgLCBgdmFsdWVgIG5lZWRzIHRvIGJlIGFcbiAgICAgKiBib29sZWFuIHRvIGFkZC9yZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgc2V0LlxuICAgICAqL1xuICAgIHNldEluKHBhdGgsIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0VtcHR5UGF0aChwYXRoKSkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBXZSBjYW4ndCByZWFsbHkga25vdyB0aGF0IHRoaXMgbWF0Y2hlcyBDb250ZW50cy5cbiAgICAgICAgICAgIHRoaXMuY29udGVudHMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnRzID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2FuJ3QgcmVhbGx5IGtub3cgdGhhdCB0aGlzIG1hdGNoZXMgQ29udGVudHMuXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzID0gY29sbGVjdGlvbkZyb21QYXRoKHRoaXMuc2NoZW1hLCBBcnJheS5mcm9tKHBhdGgpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXNzZXJ0Q29sbGVjdGlvbih0aGlzLmNvbnRlbnRzKSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50cy5zZXRJbihwYXRoLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSBZQU1MIHZlcnNpb24gYW5kIHNjaGVtYSB1c2VkIGJ5IHRoZSBkb2N1bWVudC5cbiAgICAgKiBBIGBudWxsYCB2ZXJzaW9uIGRpc2FibGVzIHN1cHBvcnQgZm9yIGRpcmVjdGl2ZXMsIGV4cGxpY2l0IHRhZ3MsIGFuY2hvcnMsIGFuZCBhbGlhc2VzLlxuICAgICAqIEl0IGFsc28gcmVxdWlyZXMgdGhlIGBzY2hlbWFgIG9wdGlvbiB0byBiZSBnaXZlbiBhcyBhIGBTY2hlbWFgIGluc3RhbmNlIHZhbHVlLlxuICAgICAqXG4gICAgICogT3ZlcnJpZGVzIGFsbCBwcmV2aW91c2x5IHNldCBzY2hlbWEgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBzZXRTY2hlbWEodmVyc2lvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB2ZXJzaW9uID0gU3RyaW5nKHZlcnNpb24pO1xuICAgICAgICBsZXQgb3B0O1xuICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJzEuMSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbiA9ICcxLjEnO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXJlY3RpdmVzID0gbmV3IERpcmVjdGl2ZXMoeyB2ZXJzaW9uOiAnMS4xJyB9KTtcbiAgICAgICAgICAgICAgICBvcHQgPSB7IHJlc29sdmVLbm93blRhZ3M6IGZhbHNlLCBzY2hlbWE6ICd5YW1sLTEuMScgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzEuMic6XG4gICAgICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXJlY3RpdmVzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZXMueWFtbC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IG5ldyBEaXJlY3RpdmVzKHsgdmVyc2lvbiB9KTtcbiAgICAgICAgICAgICAgICBvcHQgPSB7IHJlc29sdmVLbm93blRhZ3M6IHRydWUsIHNjaGVtYTogJ2NvcmUnIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGlyZWN0aXZlcztcbiAgICAgICAgICAgICAgICBvcHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN2ID0gSlNPTi5zdHJpbmdpZnkodmVyc2lvbik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAnMS4xJywgJzEuMicgb3IgbnVsbCBhcyBmaXJzdCBhcmd1bWVudCwgYnV0IGZvdW5kOiAke3N2fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCB1c2luZyBgaW5zdGFuY2VvZiBTY2hlbWFgIHRvIGFsbG93IGZvciBkdWNrIHR5cGluZ1xuICAgICAgICBpZiAob3B0aW9ucy5zY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICB0aGlzLnNjaGVtYSA9IG9wdGlvbnMuc2NoZW1hO1xuICAgICAgICBlbHNlIGlmIChvcHQpXG4gICAgICAgICAgICB0aGlzLnNjaGVtYSA9IG5ldyBTY2hlbWEoT2JqZWN0LmFzc2lnbihvcHQsIG9wdGlvbnMpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaXRoIGEgbnVsbCBZQU1MIHZlcnNpb24sIHRoZSB7IHNjaGVtYTogU2NoZW1hIH0gb3B0aW9uIGlzIHJlcXVpcmVkYCk7XG4gICAgfVxuICAgIC8vIGpzb24gJiBqc29uQXJnIGFyZSBvbmx5IHVzZWQgZnJvbSB0b0pTT04oKVxuICAgIHRvSlMoeyBqc29uLCBqc29uQXJnLCBtYXBBc01hcCwgbWF4QWxpYXNDb3VudCwgb25BbmNob3IsIHJldml2ZXIgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGFuY2hvcnM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGRvYzogdGhpcyxcbiAgICAgICAgICAgIGtlZXA6ICFqc29uLFxuICAgICAgICAgICAgbWFwQXNNYXA6IG1hcEFzTWFwID09PSB0cnVlLFxuICAgICAgICAgICAgbWFwS2V5V2FybmVkOiBmYWxzZSxcbiAgICAgICAgICAgIG1heEFsaWFzQ291bnQ6IHR5cGVvZiBtYXhBbGlhc0NvdW50ID09PSAnbnVtYmVyJyA/IG1heEFsaWFzQ291bnQgOiAxMDBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0gdG9KUyh0aGlzLmNvbnRlbnRzLCBqc29uQXJnID8/ICcnLCBjdHgpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQW5jaG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGNvdW50LCByZXMgfSBvZiBjdHguYW5jaG9ycy52YWx1ZXMoKSlcbiAgICAgICAgICAgICAgICBvbkFuY2hvcihyZXMsIGNvdW50KTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGFwcGx5UmV2aXZlcihyZXZpdmVyLCB7ICcnOiByZXMgfSwgJycsIHJlcylcbiAgICAgICAgICAgIDogcmVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IGBjb250ZW50c2AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ganNvbkFyZyBVc2VkIGJ5IGBKU09OLnN0cmluZ2lmeWAgdG8gaW5kaWNhdGUgdGhlIGFycmF5IGluZGV4IG9yXG4gICAgICogICBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHRvSlNPTihqc29uQXJnLCBvbkFuY2hvcikge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTKHsganNvbjogdHJ1ZSwganNvbkFyZywgbWFwQXNNYXA6IGZhbHNlLCBvbkFuY2hvciB9KTtcbiAgICB9XG4gICAgLyoqIEEgWUFNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQuICovXG4gICAgdG9TdHJpbmcob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb2N1bWVudCB3aXRoIGVycm9ycyBjYW5ub3QgYmUgc3RyaW5naWZpZWQnKTtcbiAgICAgICAgaWYgKCdpbmRlbnQnIGluIG9wdGlvbnMgJiZcbiAgICAgICAgICAgICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmluZGVudCkgfHwgTnVtYmVyKG9wdGlvbnMuaW5kZW50KSA8PSAwKSkge1xuICAgICAgICAgICAgY29uc3QgcyA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuaW5kZW50KTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJpbmRlbnRcIiBvcHRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIG5vdCAke3N9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeURvY3VtZW50KHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydENvbGxlY3Rpb24oY29udGVudHMpIHtcbiAgICBpZiAoaXNDb2xsZWN0aW9uKGNvbnRlbnRzKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIFlBTUwgY29sbGVjdGlvbiBhcyBkb2N1bWVudCBjb250ZW50cycpO1xufVxuXG5leHBvcnQgeyBEb2N1bWVudCB9O1xuIiwgImNsYXNzIFlBTUxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBwb3MsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5wb3MgPSBwb3M7XG4gICAgfVxufVxuY2xhc3MgWUFNTFBhcnNlRXJyb3IgZXh0ZW5kcyBZQU1MRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHBvcywgY29kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcignWUFNTFBhcnNlRXJyb3InLCBwb3MsIGNvZGUsIG1lc3NhZ2UpO1xuICAgIH1cbn1cbmNsYXNzIFlBTUxXYXJuaW5nIGV4dGVuZHMgWUFNTEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihwb3MsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIoJ1lBTUxXYXJuaW5nJywgcG9zLCBjb2RlLCBtZXNzYWdlKTtcbiAgICB9XG59XG5jb25zdCBwcmV0dGlmeUVycm9yID0gKHNyYywgbGMpID0+IChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvci5wb3NbMF0gPT09IC0xKVxuICAgICAgICByZXR1cm47XG4gICAgZXJyb3IubGluZVBvcyA9IGVycm9yLnBvcy5tYXAocG9zID0+IGxjLmxpbmVQb3MocG9zKSk7XG4gICAgY29uc3QgeyBsaW5lLCBjb2wgfSA9IGVycm9yLmxpbmVQb3NbMF07XG4gICAgZXJyb3IubWVzc2FnZSArPSBgIGF0IGxpbmUgJHtsaW5lfSwgY29sdW1uICR7Y29sfWA7XG4gICAgbGV0IGNpID0gY29sIC0gMTtcbiAgICBsZXQgbGluZVN0ciA9IHNyY1xuICAgICAgICAuc3Vic3RyaW5nKGxjLmxpbmVTdGFydHNbbGluZSAtIDFdLCBsYy5saW5lU3RhcnRzW2xpbmVdKVxuICAgICAgICAucmVwbGFjZSgvW1xcblxccl0rJC8sICcnKTtcbiAgICAvLyBUcmltIHRvIG1heCA4MCBjaGFycywga2VlcGluZyBjb2wgcG9zaXRpb24gbmVhciB0aGUgbWlkZGxlXG4gICAgaWYgKGNpID49IDYwICYmIGxpbmVTdHIubGVuZ3RoID4gODApIHtcbiAgICAgICAgY29uc3QgdHJpbVN0YXJ0ID0gTWF0aC5taW4oY2kgLSAzOSwgbGluZVN0ci5sZW5ndGggLSA3OSk7XG4gICAgICAgIGxpbmVTdHIgPSAnXHUyMDI2JyArIGxpbmVTdHIuc3Vic3RyaW5nKHRyaW1TdGFydCk7XG4gICAgICAgIGNpIC09IHRyaW1TdGFydCAtIDE7XG4gICAgfVxuICAgIGlmIChsaW5lU3RyLmxlbmd0aCA+IDgwKVxuICAgICAgICBsaW5lU3RyID0gbGluZVN0ci5zdWJzdHJpbmcoMCwgNzkpICsgJ1x1MjAyNic7XG4gICAgLy8gSW5jbHVkZSBwcmV2aW91cyBsaW5lIGluIGNvbnRleHQgaWYgcG9pbnRpbmcgYXQgbGluZSBzdGFydFxuICAgIGlmIChsaW5lID4gMSAmJiAvXiAqJC8udGVzdChsaW5lU3RyLnN1YnN0cmluZygwLCBjaSkpKSB7XG4gICAgICAgIC8vIFJlZ2V4cCB3b24ndCBtYXRjaCBpZiBzdGFydCBpcyB0cmltbWVkXG4gICAgICAgIGxldCBwcmV2ID0gc3JjLnN1YnN0cmluZyhsYy5saW5lU3RhcnRzW2xpbmUgLSAyXSwgbGMubGluZVN0YXJ0c1tsaW5lIC0gMV0pO1xuICAgICAgICBpZiAocHJldi5sZW5ndGggPiA4MClcbiAgICAgICAgICAgIHByZXYgPSBwcmV2LnN1YnN0cmluZygwLCA3OSkgKyAnXHUyMDI2XFxuJztcbiAgICAgICAgbGluZVN0ciA9IHByZXYgKyBsaW5lU3RyO1xuICAgIH1cbiAgICBpZiAoL1teIF0vLnRlc3QobGluZVN0cikpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMTtcbiAgICAgICAgY29uc3QgZW5kID0gZXJyb3IubGluZVBvc1sxXTtcbiAgICAgICAgaWYgKGVuZCAmJiBlbmQubGluZSA9PT0gbGluZSAmJiBlbmQuY29sID4gY29sKSB7XG4gICAgICAgICAgICBjb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKGVuZC5jb2wgLSBjb2wsIDgwIC0gY2kpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludGVyID0gJyAnLnJlcGVhdChjaSkgKyAnXicucmVwZWF0KGNvdW50KTtcbiAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgOlxcblxcbiR7bGluZVN0cn1cXG4ke3BvaW50ZXJ9XFxuYDtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBZQU1MRXJyb3IsIFlBTUxQYXJzZUVycm9yLCBZQU1MV2FybmluZywgcHJldHRpZnlFcnJvciB9O1xuIiwgImZ1bmN0aW9uIHJlc29sdmVQcm9wcyh0b2tlbnMsIHsgZmxvdywgaW5kaWNhdG9yLCBuZXh0LCBvZmZzZXQsIG9uRXJyb3IsIHBhcmVudEluZGVudCwgc3RhcnRPbk5ld2xpbmUgfSkge1xuICAgIGxldCBzcGFjZUJlZm9yZSA9IGZhbHNlO1xuICAgIGxldCBhdE5ld2xpbmUgPSBzdGFydE9uTmV3bGluZTtcbiAgICBsZXQgaGFzU3BhY2UgPSBzdGFydE9uTmV3bGluZTtcbiAgICBsZXQgY29tbWVudCA9ICcnO1xuICAgIGxldCBjb21tZW50U2VwID0gJyc7XG4gICAgbGV0IGhhc05ld2xpbmUgPSBmYWxzZTtcbiAgICBsZXQgcmVxU3BhY2UgPSBmYWxzZTtcbiAgICBsZXQgdGFiID0gbnVsbDtcbiAgICBsZXQgYW5jaG9yID0gbnVsbDtcbiAgICBsZXQgdGFnID0gbnVsbDtcbiAgICBsZXQgbmV3bGluZUFmdGVyUHJvcCA9IG51bGw7XG4gICAgbGV0IGNvbW1hID0gbnVsbDtcbiAgICBsZXQgZm91bmQgPSBudWxsO1xuICAgIGxldCBzdGFydCA9IG51bGw7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgaWYgKHJlcVNwYWNlKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gJ3NwYWNlJyAmJlxuICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgIT09ICduZXdsaW5lJyAmJlxuICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgIT09ICdjb21tYScpXG4gICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbi5vZmZzZXQsICdNSVNTSU5HX0NIQVInLCAnVGFncyBhbmQgYW5jaG9ycyBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBuZXh0IHRva2VuIGJ5IHdoaXRlIHNwYWNlJyk7XG4gICAgICAgICAgICByZXFTcGFjZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YWIpIHtcbiAgICAgICAgICAgIGlmIChhdE5ld2xpbmUgJiYgdG9rZW4udHlwZSAhPT0gJ2NvbW1lbnQnICYmIHRva2VuLnR5cGUgIT09ICduZXdsaW5lJykge1xuICAgICAgICAgICAgICAgIG9uRXJyb3IodGFiLCAnVEFCX0FTX0lOREVOVCcsICdUYWJzIGFyZSBub3QgYWxsb3dlZCBhcyBpbmRlbnRhdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFiID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICAvLyBBdCB0aGUgZG9jIGxldmVsLCB0YWJzIGF0IGxpbmUgc3RhcnQgbWF5IGJlIHBhcnNlZFxuICAgICAgICAgICAgICAgIC8vIGFzIGxlYWRpbmcgd2hpdGUgc3BhY2UgcmF0aGVyIHRoYW4gaW5kZW50YXRpb24uXG4gICAgICAgICAgICAgICAgLy8gSW4gYSBmbG93IGNvbGxlY3Rpb24sIG9ubHkgdGhlIHBhcnNlciBoYW5kbGVzIGluZGVudC5cbiAgICAgICAgICAgICAgICBpZiAoIWZsb3cgJiZcbiAgICAgICAgICAgICAgICAgICAgKGluZGljYXRvciAhPT0gJ2RvYy1zdGFydCcgfHwgbmV4dD8udHlwZSAhPT0gJ2Zsb3ctY29sbGVjdGlvbicpICYmXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLnNvdXJjZS5pbmNsdWRlcygnXFx0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFiID0gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhc1NwYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOiB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNTcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ01JU1NJTkdfQ0hBUicsICdDb21tZW50cyBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIG90aGVyIHRva2VucyBieSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2IgPSB0b2tlbi5zb3VyY2Uuc3Vic3RyaW5nKDEpIHx8ICcgJztcbiAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjYjtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gY29tbWVudFNlcCArIGNiO1xuICAgICAgICAgICAgICAgIGNvbW1lbnRTZXAgPSAnJztcbiAgICAgICAgICAgICAgICBhdE5ld2xpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgIGlmIChhdE5ld2xpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ICs9IHRva2VuLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZWZvcmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRTZXAgKz0gdG9rZW4uc291cmNlO1xuICAgICAgICAgICAgICAgIGF0TmV3bGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaGFzTmV3bGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvciB8fCB0YWcpXG4gICAgICAgICAgICAgICAgICAgIG5ld2xpbmVBZnRlclByb3AgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBoYXNTcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhbmNob3InOlxuICAgICAgICAgICAgICAgIGlmIChhbmNob3IpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4sICdNVUxUSVBMRV9BTkNIT1JTJywgJ0Egbm9kZSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBhbmNob3InKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4uc291cmNlLmVuZHNXaXRoKCc6JykpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4ub2Zmc2V0ICsgdG9rZW4uc291cmNlLmxlbmd0aCAtIDEsICdCQURfQUxJQVMnLCAnQW5jaG9yIGVuZGluZyBpbiA6IGlzIGFtYmlndW91cycsIHRydWUpO1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tlbi5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgYXROZXdsaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaGFzU3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXFTcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0YWcnOiB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZylcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ01VTFRJUExFX1RBR1MnLCAnQSBub2RlIGNhbiBoYXZlIGF0IG1vc3Qgb25lIHRhZycpO1xuICAgICAgICAgICAgICAgIHRhZyA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tlbi5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgYXROZXdsaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaGFzU3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXFTcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIGluZGljYXRvcjpcbiAgICAgICAgICAgICAgICAvLyBDb3VsZCBoZXJlIGhhbmRsZSBwcmVjZWRpbmcgY29tbWVudHMgZGlmZmVyZW50bHlcbiAgICAgICAgICAgICAgICBpZiAoYW5jaG9yIHx8IHRhZylcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ0JBRF9QUk9QX09SREVSJywgYEFuY2hvcnMgYW5kIHRhZ3MgbXVzdCBiZSBhZnRlciB0aGUgJHt0b2tlbi5zb3VyY2V9IGluZGljYXRvcmApO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZClcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ1VORVhQRUNURURfVE9LRU4nLCBgVW5leHBlY3RlZCAke3Rva2VuLnNvdXJjZX0gaW4gJHtmbG93ID8/ICdjb2xsZWN0aW9uJ31gKTtcbiAgICAgICAgICAgICAgICBmb3VuZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGF0TmV3bGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGluZGljYXRvciA9PT0gJ3NlcS1pdGVtLWluZCcgfHwgaW5kaWNhdG9yID09PSAnZXhwbGljaXQta2V5LWluZCc7XG4gICAgICAgICAgICAgICAgaGFzU3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1hJzpcbiAgICAgICAgICAgICAgICBpZiAoZmxvdykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWEpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICwgaW4gJHtmbG93fWApO1xuICAgICAgICAgICAgICAgICAgICBjb21tYSA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBhdE5ld2xpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaGFzU3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWxzZSBmYWxsdGhyb3VnaFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICR7dG9rZW4udHlwZX0gdG9rZW5gKTtcbiAgICAgICAgICAgICAgICBhdE5ld2xpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBoYXNTcGFjZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGxhc3QgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGVuZCA9IGxhc3QgPyBsYXN0Lm9mZnNldCArIGxhc3Quc291cmNlLmxlbmd0aCA6IG9mZnNldDtcbiAgICBpZiAocmVxU3BhY2UgJiZcbiAgICAgICAgbmV4dCAmJlxuICAgICAgICBuZXh0LnR5cGUgIT09ICdzcGFjZScgJiZcbiAgICAgICAgbmV4dC50eXBlICE9PSAnbmV3bGluZScgJiZcbiAgICAgICAgbmV4dC50eXBlICE9PSAnY29tbWEnICYmXG4gICAgICAgIChuZXh0LnR5cGUgIT09ICdzY2FsYXInIHx8IG5leHQuc291cmNlICE9PSAnJykpIHtcbiAgICAgICAgb25FcnJvcihuZXh0Lm9mZnNldCwgJ01JU1NJTkdfQ0hBUicsICdUYWdzIGFuZCBhbmNob3JzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIG5leHQgdG9rZW4gYnkgd2hpdGUgc3BhY2UnKTtcbiAgICB9XG4gICAgaWYgKHRhYiAmJlxuICAgICAgICAoKGF0TmV3bGluZSAmJiB0YWIuaW5kZW50IDw9IHBhcmVudEluZGVudCkgfHxcbiAgICAgICAgICAgIG5leHQ/LnR5cGUgPT09ICdibG9jay1tYXAnIHx8XG4gICAgICAgICAgICBuZXh0Py50eXBlID09PSAnYmxvY2stc2VxJykpXG4gICAgICAgIG9uRXJyb3IodGFiLCAnVEFCX0FTX0lOREVOVCcsICdUYWJzIGFyZSBub3QgYWxsb3dlZCBhcyBpbmRlbnRhdGlvbicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hLFxuICAgICAgICBmb3VuZCxcbiAgICAgICAgc3BhY2VCZWZvcmUsXG4gICAgICAgIGNvbW1lbnQsXG4gICAgICAgIGhhc05ld2xpbmUsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgdGFnLFxuICAgICAgICBuZXdsaW5lQWZ0ZXJQcm9wLFxuICAgICAgICBlbmQsXG4gICAgICAgIHN0YXJ0OiBzdGFydCA/PyBlbmRcbiAgICB9O1xufVxuXG5leHBvcnQgeyByZXNvbHZlUHJvcHMgfTtcbiIsICJmdW5jdGlvbiBjb250YWluc05ld2xpbmUoa2V5KSB7XG4gICAgaWYgKCFrZXkpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHN3aXRjaCAoa2V5LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICBjYXNlICdkb3VibGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgIGNhc2UgJ3NpbmdsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgIGlmIChrZXkuc291cmNlLmluY2x1ZGVzKCdcXG4nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkuZW5kKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3Qgb2Yga2V5LmVuZClcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0LnR5cGUgPT09ICduZXdsaW5lJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlICdmbG93LWNvbGxlY3Rpb24nOlxuICAgICAgICAgICAgZm9yIChjb25zdCBpdCBvZiBrZXkuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0IG9mIGl0LnN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3QudHlwZSA9PT0gJ25ld2xpbmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdCBvZiBpdC5zZXApXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3QudHlwZSA9PT0gJ25ld2xpbmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChjb250YWluc05ld2xpbmUoaXQua2V5KSB8fCBjb250YWluc05ld2xpbmUoaXQudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgY29udGFpbnNOZXdsaW5lIH07XG4iLCAiaW1wb3J0IHsgY29udGFpbnNOZXdsaW5lIH0gZnJvbSAnLi91dGlsLWNvbnRhaW5zLW5ld2xpbmUuanMnO1xuXG5mdW5jdGlvbiBmbG93SW5kZW50Q2hlY2soaW5kZW50LCBmYywgb25FcnJvcikge1xuICAgIGlmIChmYz8udHlwZSA9PT0gJ2Zsb3ctY29sbGVjdGlvbicpIHtcbiAgICAgICAgY29uc3QgZW5kID0gZmMuZW5kWzBdO1xuICAgICAgICBpZiAoZW5kLmluZGVudCA9PT0gaW5kZW50ICYmXG4gICAgICAgICAgICAoZW5kLnNvdXJjZSA9PT0gJ10nIHx8IGVuZC5zb3VyY2UgPT09ICd9JykgJiZcbiAgICAgICAgICAgIGNvbnRhaW5zTmV3bGluZShmYykpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdGbG93IGVuZCBpbmRpY2F0b3Igc2hvdWxkIGJlIG1vcmUgaW5kZW50ZWQgdGhhbiBwYXJlbnQnO1xuICAgICAgICAgICAgb25FcnJvcihlbmQsICdCQURfSU5ERU5UJywgbXNnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHsgZmxvd0luZGVudENoZWNrIH07XG4iLCAiaW1wb3J0IHsgaXNTY2FsYXIgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5cbmZ1bmN0aW9uIG1hcEluY2x1ZGVzKGN0eCwgaXRlbXMsIHNlYXJjaCkge1xuICAgIGNvbnN0IHsgdW5pcXVlS2V5cyB9ID0gY3R4Lm9wdGlvbnM7XG4gICAgaWYgKHVuaXF1ZUtleXMgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaXNFcXVhbCA9IHR5cGVvZiB1bmlxdWVLZXlzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdW5pcXVlS2V5c1xuICAgICAgICA6IChhLCBiKSA9PiBhID09PSBiIHx8IChpc1NjYWxhcihhKSAmJiBpc1NjYWxhcihiKSAmJiBhLnZhbHVlID09PSBiLnZhbHVlKTtcbiAgICByZXR1cm4gaXRlbXMuc29tZShwYWlyID0+IGlzRXF1YWwocGFpci5rZXksIHNlYXJjaCkpO1xufVxuXG5leHBvcnQgeyBtYXBJbmNsdWRlcyB9O1xuIiwgImltcG9ydCB7IFBhaXIgfSBmcm9tICcuLi9ub2Rlcy9QYWlyLmpzJztcbmltcG9ydCB7IFlBTUxNYXAgfSBmcm9tICcuLi9ub2Rlcy9ZQU1MTWFwLmpzJztcbmltcG9ydCB7IHJlc29sdmVQcm9wcyB9IGZyb20gJy4vcmVzb2x2ZS1wcm9wcy5qcyc7XG5pbXBvcnQgeyBjb250YWluc05ld2xpbmUgfSBmcm9tICcuL3V0aWwtY29udGFpbnMtbmV3bGluZS5qcyc7XG5pbXBvcnQgeyBmbG93SW5kZW50Q2hlY2sgfSBmcm9tICcuL3V0aWwtZmxvdy1pbmRlbnQtY2hlY2suanMnO1xuaW1wb3J0IHsgbWFwSW5jbHVkZXMgfSBmcm9tICcuL3V0aWwtbWFwLWluY2x1ZGVzLmpzJztcblxuY29uc3Qgc3RhcnRDb2xNc2cgPSAnQWxsIG1hcHBpbmcgaXRlbXMgbXVzdCBzdGFydCBhdCB0aGUgc2FtZSBjb2x1bW4nO1xuZnVuY3Rpb24gcmVzb2x2ZUJsb2NrTWFwKHsgY29tcG9zZU5vZGUsIGNvbXBvc2VFbXB0eU5vZGUgfSwgY3R4LCBibSwgb25FcnJvciwgdGFnKSB7XG4gICAgY29uc3QgTm9kZUNsYXNzID0gdGFnPy5ub2RlQ2xhc3MgPz8gWUFNTE1hcDtcbiAgICBjb25zdCBtYXAgPSBuZXcgTm9kZUNsYXNzKGN0eC5zY2hlbWEpO1xuICAgIGlmIChjdHguYXRSb290KVxuICAgICAgICBjdHguYXRSb290ID0gZmFsc2U7XG4gICAgbGV0IG9mZnNldCA9IGJtLm9mZnNldDtcbiAgICBsZXQgY29tbWVudEVuZCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBjb2xsSXRlbSBvZiBibS5pdGVtcykge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBrZXksIHNlcCwgdmFsdWUgfSA9IGNvbGxJdGVtO1xuICAgICAgICAvLyBrZXkgcHJvcGVydGllc1xuICAgICAgICBjb25zdCBrZXlQcm9wcyA9IHJlc29sdmVQcm9wcyhzdGFydCwge1xuICAgICAgICAgICAgaW5kaWNhdG9yOiAnZXhwbGljaXQta2V5LWluZCcsXG4gICAgICAgICAgICBuZXh0OiBrZXkgPz8gc2VwPy5bMF0sXG4gICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICBvbkVycm9yLFxuICAgICAgICAgICAgcGFyZW50SW5kZW50OiBibS5pbmRlbnQsXG4gICAgICAgICAgICBzdGFydE9uTmV3bGluZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW1wbGljaXRLZXkgPSAha2V5UHJvcHMuZm91bmQ7XG4gICAgICAgIGlmIChpbXBsaWNpdEtleSkge1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkudHlwZSA9PT0gJ2Jsb2NrLXNlcScpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3Iob2Zmc2V0LCAnQkxPQ0tfQVNfSU1QTElDSVRfS0VZJywgJ0EgYmxvY2sgc2VxdWVuY2UgbWF5IG5vdCBiZSB1c2VkIGFzIGFuIGltcGxpY2l0IG1hcCBrZXknKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICgnaW5kZW50JyBpbiBrZXkgJiYga2V5LmluZGVudCAhPT0gYm0uaW5kZW50KVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ0JBRF9JTkRFTlQnLCBzdGFydENvbE1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWtleVByb3BzLmFuY2hvciAmJiAha2V5UHJvcHMudGFnICYmICFzZXApIHtcbiAgICAgICAgICAgICAgICBjb21tZW50RW5kID0ga2V5UHJvcHMuZW5kO1xuICAgICAgICAgICAgICAgIGlmIChrZXlQcm9wcy5jb21tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXAuY29tbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5jb21tZW50ICs9ICdcXG4nICsga2V5UHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwLmNvbW1lbnQgPSBrZXlQcm9wcy5jb21tZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXlQcm9wcy5uZXdsaW5lQWZ0ZXJQcm9wIHx8IGNvbnRhaW5zTmV3bGluZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcihrZXkgPz8gc3RhcnRbc3RhcnQubGVuZ3RoIC0gMV0sICdNVUxUSUxJTkVfSU1QTElDSVRfS0VZJywgJ0ltcGxpY2l0IGtleXMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5UHJvcHMuZm91bmQ/LmluZGVudCAhPT0gYm0uaW5kZW50KSB7XG4gICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ0JBRF9JTkRFTlQnLCBzdGFydENvbE1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8ga2V5IHZhbHVlXG4gICAgICAgIGN0eC5hdEtleSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGtleVN0YXJ0ID0ga2V5UHJvcHMuZW5kO1xuICAgICAgICBjb25zdCBrZXlOb2RlID0ga2V5XG4gICAgICAgICAgICA/IGNvbXBvc2VOb2RlKGN0eCwga2V5LCBrZXlQcm9wcywgb25FcnJvcilcbiAgICAgICAgICAgIDogY29tcG9zZUVtcHR5Tm9kZShjdHgsIGtleVN0YXJ0LCBzdGFydCwgbnVsbCwga2V5UHJvcHMsIG9uRXJyb3IpO1xuICAgICAgICBpZiAoY3R4LnNjaGVtYS5jb21wYXQpXG4gICAgICAgICAgICBmbG93SW5kZW50Q2hlY2soYm0uaW5kZW50LCBrZXksIG9uRXJyb3IpO1xuICAgICAgICBjdHguYXRLZXkgPSBmYWxzZTtcbiAgICAgICAgaWYgKG1hcEluY2x1ZGVzKGN0eCwgbWFwLml0ZW1zLCBrZXlOb2RlKSlcbiAgICAgICAgICAgIG9uRXJyb3Ioa2V5U3RhcnQsICdEVVBMSUNBVEVfS0VZJywgJ01hcCBrZXlzIG11c3QgYmUgdW5pcXVlJyk7XG4gICAgICAgIC8vIHZhbHVlIHByb3BlcnRpZXNcbiAgICAgICAgY29uc3QgdmFsdWVQcm9wcyA9IHJlc29sdmVQcm9wcyhzZXAgPz8gW10sIHtcbiAgICAgICAgICAgIGluZGljYXRvcjogJ21hcC12YWx1ZS1pbmQnLFxuICAgICAgICAgICAgbmV4dDogdmFsdWUsXG4gICAgICAgICAgICBvZmZzZXQ6IGtleU5vZGUucmFuZ2VbMl0sXG4gICAgICAgICAgICBvbkVycm9yLFxuICAgICAgICAgICAgcGFyZW50SW5kZW50OiBibS5pbmRlbnQsXG4gICAgICAgICAgICBzdGFydE9uTmV3bGluZTogIWtleSB8fCBrZXkudHlwZSA9PT0gJ2Jsb2NrLXNjYWxhcidcbiAgICAgICAgfSk7XG4gICAgICAgIG9mZnNldCA9IHZhbHVlUHJvcHMuZW5kO1xuICAgICAgICBpZiAodmFsdWVQcm9wcy5mb3VuZCkge1xuICAgICAgICAgICAgaWYgKGltcGxpY2l0S2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlPy50eXBlID09PSAnYmxvY2stbWFwJyAmJiAhdmFsdWVQcm9wcy5oYXNOZXdsaW5lKVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ0JMT0NLX0FTX0lNUExJQ0lUX0tFWScsICdOZXN0ZWQgbWFwcGluZ3MgYXJlIG5vdCBhbGxvd2VkIGluIGNvbXBhY3QgbWFwcGluZ3MnKTtcbiAgICAgICAgICAgICAgICBpZiAoY3R4Lm9wdGlvbnMuc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgICAgIGtleVByb3BzLnN0YXJ0IDwgdmFsdWVQcm9wcy5mb3VuZC5vZmZzZXQgLSAxMDI0KVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGtleU5vZGUucmFuZ2UsICdLRVlfT1ZFUl8xMDI0X0NIQVJTJywgJ1RoZSA6IGluZGljYXRvciBtdXN0IGJlIGF0IG1vc3QgMTAyNCBjaGFycyBhZnRlciB0aGUgc3RhcnQgb2YgYW4gaW1wbGljaXQgYmxvY2sgbWFwcGluZyBrZXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHZhbHVlIHZhbHVlXG4gICAgICAgICAgICBjb25zdCB2YWx1ZU5vZGUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgID8gY29tcG9zZU5vZGUoY3R4LCB2YWx1ZSwgdmFsdWVQcm9wcywgb25FcnJvcilcbiAgICAgICAgICAgICAgICA6IGNvbXBvc2VFbXB0eU5vZGUoY3R4LCBvZmZzZXQsIHNlcCwgbnVsbCwgdmFsdWVQcm9wcywgb25FcnJvcik7XG4gICAgICAgICAgICBpZiAoY3R4LnNjaGVtYS5jb21wYXQpXG4gICAgICAgICAgICAgICAgZmxvd0luZGVudENoZWNrKGJtLmluZGVudCwgdmFsdWUsIG9uRXJyb3IpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gdmFsdWVOb2RlLnJhbmdlWzJdO1xuICAgICAgICAgICAgY29uc3QgcGFpciA9IG5ldyBQYWlyKGtleU5vZGUsIHZhbHVlTm9kZSk7XG4gICAgICAgICAgICBpZiAoY3R4Lm9wdGlvbnMua2VlcFNvdXJjZVRva2VucylcbiAgICAgICAgICAgICAgICBwYWlyLnNyY1Rva2VuID0gY29sbEl0ZW07XG4gICAgICAgICAgICBtYXAuaXRlbXMucHVzaChwYWlyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGtleSB3aXRoIG5vIHZhbHVlXG4gICAgICAgICAgICBpZiAoaW1wbGljaXRLZXkpXG4gICAgICAgICAgICAgICAgb25FcnJvcihrZXlOb2RlLnJhbmdlLCAnTUlTU0lOR19DSEFSJywgJ0ltcGxpY2l0IG1hcCBrZXlzIG5lZWQgdG8gYmUgZm9sbG93ZWQgYnkgbWFwIHZhbHVlcycpO1xuICAgICAgICAgICAgaWYgKHZhbHVlUHJvcHMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChrZXlOb2RlLmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGtleU5vZGUuY29tbWVudCArPSAnXFxuJyArIHZhbHVlUHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGtleU5vZGUuY29tbWVudCA9IHZhbHVlUHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhaXIgPSBuZXcgUGFpcihrZXlOb2RlKTtcbiAgICAgICAgICAgIGlmIChjdHgub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zKVxuICAgICAgICAgICAgICAgIHBhaXIuc3JjVG9rZW4gPSBjb2xsSXRlbTtcbiAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHBhaXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb21tZW50RW5kICYmIGNvbW1lbnRFbmQgPCBvZmZzZXQpXG4gICAgICAgIG9uRXJyb3IoY29tbWVudEVuZCwgJ0lNUE9TU0lCTEUnLCAnTWFwIGNvbW1lbnQgd2l0aCB0cmFpbGluZyBjb250ZW50Jyk7XG4gICAgbWFwLnJhbmdlID0gW2JtLm9mZnNldCwgb2Zmc2V0LCBjb21tZW50RW5kID8/IG9mZnNldF07XG4gICAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IHsgcmVzb2x2ZUJsb2NrTWFwIH07XG4iLCAiaW1wb3J0IHsgWUFNTFNlcSB9IGZyb20gJy4uL25vZGVzL1lBTUxTZXEuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVByb3BzIH0gZnJvbSAnLi9yZXNvbHZlLXByb3BzLmpzJztcbmltcG9ydCB7IGZsb3dJbmRlbnRDaGVjayB9IGZyb20gJy4vdXRpbC1mbG93LWluZGVudC1jaGVjay5qcyc7XG5cbmZ1bmN0aW9uIHJlc29sdmVCbG9ja1NlcSh7IGNvbXBvc2VOb2RlLCBjb21wb3NlRW1wdHlOb2RlIH0sIGN0eCwgYnMsIG9uRXJyb3IsIHRhZykge1xuICAgIGNvbnN0IE5vZGVDbGFzcyA9IHRhZz8ubm9kZUNsYXNzID8/IFlBTUxTZXE7XG4gICAgY29uc3Qgc2VxID0gbmV3IE5vZGVDbGFzcyhjdHguc2NoZW1hKTtcbiAgICBpZiAoY3R4LmF0Um9vdClcbiAgICAgICAgY3R4LmF0Um9vdCA9IGZhbHNlO1xuICAgIGlmIChjdHguYXRLZXkpXG4gICAgICAgIGN0eC5hdEtleSA9IGZhbHNlO1xuICAgIGxldCBvZmZzZXQgPSBicy5vZmZzZXQ7XG4gICAgbGV0IGNvbW1lbnRFbmQgPSBudWxsO1xuICAgIGZvciAoY29uc3QgeyBzdGFydCwgdmFsdWUgfSBvZiBicy5pdGVtcykge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHJlc29sdmVQcm9wcyhzdGFydCwge1xuICAgICAgICAgICAgaW5kaWNhdG9yOiAnc2VxLWl0ZW0taW5kJyxcbiAgICAgICAgICAgIG5leHQ6IHZhbHVlLFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgb25FcnJvcixcbiAgICAgICAgICAgIHBhcmVudEluZGVudDogYnMuaW5kZW50LFxuICAgICAgICAgICAgc3RhcnRPbk5ld2xpbmU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcHJvcHMuZm91bmQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5hbmNob3IgfHwgcHJvcHMudGFnIHx8IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnR5cGUgPT09ICdibG9jay1zZXEnKVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHByb3BzLmVuZCwgJ0JBRF9JTkRFTlQnLCAnQWxsIHNlcXVlbmNlIGl0ZW1zIG11c3Qgc3RhcnQgYXQgdGhlIHNhbWUgY29sdW1uJyk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ01JU1NJTkdfQ0hBUicsICdTZXF1ZW5jZSBpdGVtIHdpdGhvdXQgLSBpbmRpY2F0b3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbW1lbnRFbmQgPSBwcm9wcy5lbmQ7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIHNlcS5jb21tZW50ID0gcHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub2RlID0gdmFsdWVcbiAgICAgICAgICAgID8gY29tcG9zZU5vZGUoY3R4LCB2YWx1ZSwgcHJvcHMsIG9uRXJyb3IpXG4gICAgICAgICAgICA6IGNvbXBvc2VFbXB0eU5vZGUoY3R4LCBwcm9wcy5lbmQsIHN0YXJ0LCBudWxsLCBwcm9wcywgb25FcnJvcik7XG4gICAgICAgIGlmIChjdHguc2NoZW1hLmNvbXBhdClcbiAgICAgICAgICAgIGZsb3dJbmRlbnRDaGVjayhicy5pbmRlbnQsIHZhbHVlLCBvbkVycm9yKTtcbiAgICAgICAgb2Zmc2V0ID0gbm9kZS5yYW5nZVsyXTtcbiAgICAgICAgc2VxLml0ZW1zLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIHNlcS5yYW5nZSA9IFticy5vZmZzZXQsIG9mZnNldCwgY29tbWVudEVuZCA/PyBvZmZzZXRdO1xuICAgIHJldHVybiBzZXE7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVCbG9ja1NlcSB9O1xuIiwgImZ1bmN0aW9uIHJlc29sdmVFbmQoZW5kLCBvZmZzZXQsIHJlcVNwYWNlLCBvbkVycm9yKSB7XG4gICAgbGV0IGNvbW1lbnQgPSAnJztcbiAgICBpZiAoZW5kKSB7XG4gICAgICAgIGxldCBoYXNTcGFjZSA9IGZhbHNlO1xuICAgICAgICBsZXQgc2VwID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZW5kKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvdXJjZSwgdHlwZSB9ID0gdG9rZW47XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NwYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcVNwYWNlICYmICFoYXNTcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4sICdNSVNTSU5HX0NIQVInLCAnQ29tbWVudHMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBvdGhlciB0b2tlbnMgYnkgd2hpdGUgc3BhY2UgY2hhcmFjdGVycycpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYiA9IHNvdXJjZS5zdWJzdHJpbmcoMSkgfHwgJyAnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY2I7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gc2VwICsgY2I7XG4gICAgICAgICAgICAgICAgICAgIHNlcCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwICs9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgaGFzU3BhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICR7dHlwZX0gYXQgbm9kZSBlbmRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGNvbW1lbnQsIG9mZnNldCB9O1xufVxuXG5leHBvcnQgeyByZXNvbHZlRW5kIH07XG4iLCAiaW1wb3J0IHsgaXNQYWlyIH0gZnJvbSAnLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgUGFpciB9IGZyb20gJy4uL25vZGVzL1BhaXIuanMnO1xuaW1wb3J0IHsgWUFNTE1hcCB9IGZyb20gJy4uL25vZGVzL1lBTUxNYXAuanMnO1xuaW1wb3J0IHsgWUFNTFNlcSB9IGZyb20gJy4uL25vZGVzL1lBTUxTZXEuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUVuZCB9IGZyb20gJy4vcmVzb2x2ZS1lbmQuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVByb3BzIH0gZnJvbSAnLi9yZXNvbHZlLXByb3BzLmpzJztcbmltcG9ydCB7IGNvbnRhaW5zTmV3bGluZSB9IGZyb20gJy4vdXRpbC1jb250YWlucy1uZXdsaW5lLmpzJztcbmltcG9ydCB7IG1hcEluY2x1ZGVzIH0gZnJvbSAnLi91dGlsLW1hcC1pbmNsdWRlcy5qcyc7XG5cbmNvbnN0IGJsb2NrTXNnID0gJ0Jsb2NrIGNvbGxlY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB3aXRoaW4gZmxvdyBjb2xsZWN0aW9ucyc7XG5jb25zdCBpc0Jsb2NrID0gKHRva2VuKSA9PiB0b2tlbiAmJiAodG9rZW4udHlwZSA9PT0gJ2Jsb2NrLW1hcCcgfHwgdG9rZW4udHlwZSA9PT0gJ2Jsb2NrLXNlcScpO1xuZnVuY3Rpb24gcmVzb2x2ZUZsb3dDb2xsZWN0aW9uKHsgY29tcG9zZU5vZGUsIGNvbXBvc2VFbXB0eU5vZGUgfSwgY3R4LCBmYywgb25FcnJvciwgdGFnKSB7XG4gICAgY29uc3QgaXNNYXAgPSBmYy5zdGFydC5zb3VyY2UgPT09ICd7JztcbiAgICBjb25zdCBmY05hbWUgPSBpc01hcCA/ICdmbG93IG1hcCcgOiAnZmxvdyBzZXF1ZW5jZSc7XG4gICAgY29uc3QgTm9kZUNsYXNzID0gKHRhZz8ubm9kZUNsYXNzID8/IChpc01hcCA/IFlBTUxNYXAgOiBZQU1MU2VxKSk7XG4gICAgY29uc3QgY29sbCA9IG5ldyBOb2RlQ2xhc3MoY3R4LnNjaGVtYSk7XG4gICAgY29sbC5mbG93ID0gdHJ1ZTtcbiAgICBjb25zdCBhdFJvb3QgPSBjdHguYXRSb290O1xuICAgIGlmIChhdFJvb3QpXG4gICAgICAgIGN0eC5hdFJvb3QgPSBmYWxzZTtcbiAgICBpZiAoY3R4LmF0S2V5KVxuICAgICAgICBjdHguYXRLZXkgPSBmYWxzZTtcbiAgICBsZXQgb2Zmc2V0ID0gZmMub2Zmc2V0ICsgZmMuc3RhcnQuc291cmNlLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZjLml0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGNvbGxJdGVtID0gZmMuaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGtleSwgc2VwLCB2YWx1ZSB9ID0gY29sbEl0ZW07XG4gICAgICAgIGNvbnN0IHByb3BzID0gcmVzb2x2ZVByb3BzKHN0YXJ0LCB7XG4gICAgICAgICAgICBmbG93OiBmY05hbWUsXG4gICAgICAgICAgICBpbmRpY2F0b3I6ICdleHBsaWNpdC1rZXktaW5kJyxcbiAgICAgICAgICAgIG5leHQ6IGtleSA/PyBzZXA/LlswXSxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIG9uRXJyb3IsXG4gICAgICAgICAgICBwYXJlbnRJbmRlbnQ6IGZjLmluZGVudCxcbiAgICAgICAgICAgIHN0YXJ0T25OZXdsaW5lOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFwcm9wcy5mb3VuZCkge1xuICAgICAgICAgICAgaWYgKCFwcm9wcy5hbmNob3IgJiYgIXByb3BzLnRhZyAmJiAhc2VwICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwICYmIHByb3BzLmNvbW1hKVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHByb3BzLmNvbW1hLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICwgaW4gJHtmY05hbWV9YCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA8IGZjLml0ZW1zLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IocHJvcHMuc3RhcnQsICdVTkVYUEVDVEVEX1RPS0VOJywgYFVuZXhwZWN0ZWQgZW1wdHkgaXRlbSBpbiAke2ZjTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbC5jb21tZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5jb21tZW50ICs9ICdcXG4nICsgcHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5jb21tZW50ID0gcHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJvcHMuZW5kO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc01hcCAmJiBjdHgub3B0aW9ucy5zdHJpY3QgJiYgY29udGFpbnNOZXdsaW5lKGtleSkpXG4gICAgICAgICAgICAgICAgb25FcnJvcihrZXksIC8vIGNoZWNrZWQgYnkgY29udGFpbnNOZXdsaW5lKClcbiAgICAgICAgICAgICAgICAnTVVMVElMSU5FX0lNUExJQ0lUX0tFWScsICdJbXBsaWNpdCBrZXlzIG9mIGZsb3cgc2VxdWVuY2UgcGFpcnMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb21tYSlcbiAgICAgICAgICAgICAgICBvbkVycm9yKHByb3BzLmNvbW1hLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBVbmV4cGVjdGVkICwgaW4gJHtmY05hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXByb3BzLmNvbW1hKVxuICAgICAgICAgICAgICAgIG9uRXJyb3IocHJvcHMuc3RhcnQsICdNSVNTSU5HX0NIQVInLCBgTWlzc2luZyAsIGJldHdlZW4gJHtmY05hbWV9IGl0ZW1zYCk7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGxldCBwcmV2SXRlbUNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgICBsb29wOiBmb3IgKGNvbnN0IHN0IG9mIHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29tbWEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkl0ZW1Db21tZW50ID0gc3Quc291cmNlLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcmV2SXRlbUNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBjb2xsLml0ZW1zW2NvbGwuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1BhaXIocHJldikpXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcHJldi52YWx1ZSA/PyBwcmV2LmtleTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYuY29tbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYuY29tbWVudCArPSAnXFxuJyArIHByZXZJdGVtQ29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5jb21tZW50ID0gcHJldkl0ZW1Db21tZW50O1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5jb21tZW50ID0gcHJvcHMuY29tbWVudC5zdWJzdHJpbmcocHJldkl0ZW1Db21tZW50Lmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzTWFwICYmICFzZXAgJiYgIXByb3BzLmZvdW5kKSB7XG4gICAgICAgICAgICAvLyBpdGVtIGlzIGEgdmFsdWUgaW4gYSBzZXFcbiAgICAgICAgICAgIC8vIFx1MjE5MiBrZXkgJiBzZXAgYXJlIGVtcHR5LCBzdGFydCBkb2VzIG5vdCBpbmNsdWRlID8gb3IgOlxuICAgICAgICAgICAgY29uc3QgdmFsdWVOb2RlID0gdmFsdWVcbiAgICAgICAgICAgICAgICA/IGNvbXBvc2VOb2RlKGN0eCwgdmFsdWUsIHByb3BzLCBvbkVycm9yKVxuICAgICAgICAgICAgICAgIDogY29tcG9zZUVtcHR5Tm9kZShjdHgsIHByb3BzLmVuZCwgc2VwLCBudWxsLCBwcm9wcywgb25FcnJvcik7XG4gICAgICAgICAgICBjb2xsLml0ZW1zLnB1c2godmFsdWVOb2RlKTtcbiAgICAgICAgICAgIG9mZnNldCA9IHZhbHVlTm9kZS5yYW5nZVsyXTtcbiAgICAgICAgICAgIGlmIChpc0Jsb2NrKHZhbHVlKSlcbiAgICAgICAgICAgICAgICBvbkVycm9yKHZhbHVlTm9kZS5yYW5nZSwgJ0JMT0NLX0lOX0ZMT1cnLCBibG9ja01zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBpdGVtIGlzIGEga2V5K3ZhbHVlIHBhaXJcbiAgICAgICAgICAgIC8vIGtleSB2YWx1ZVxuICAgICAgICAgICAgY3R4LmF0S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGtleVN0YXJ0ID0gcHJvcHMuZW5kO1xuICAgICAgICAgICAgY29uc3Qga2V5Tm9kZSA9IGtleVxuICAgICAgICAgICAgICAgID8gY29tcG9zZU5vZGUoY3R4LCBrZXksIHByb3BzLCBvbkVycm9yKVxuICAgICAgICAgICAgICAgIDogY29tcG9zZUVtcHR5Tm9kZShjdHgsIGtleVN0YXJ0LCBzdGFydCwgbnVsbCwgcHJvcHMsIG9uRXJyb3IpO1xuICAgICAgICAgICAgaWYgKGlzQmxvY2soa2V5KSlcbiAgICAgICAgICAgICAgICBvbkVycm9yKGtleU5vZGUucmFuZ2UsICdCTE9DS19JTl9GTE9XJywgYmxvY2tNc2cpO1xuICAgICAgICAgICAgY3R4LmF0S2V5ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyB2YWx1ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBjb25zdCB2YWx1ZVByb3BzID0gcmVzb2x2ZVByb3BzKHNlcCA/PyBbXSwge1xuICAgICAgICAgICAgICAgIGZsb3c6IGZjTmFtZSxcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6ICdtYXAtdmFsdWUtaW5kJyxcbiAgICAgICAgICAgICAgICBuZXh0OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IGtleU5vZGUucmFuZ2VbMl0sXG4gICAgICAgICAgICAgICAgb25FcnJvcixcbiAgICAgICAgICAgICAgICBwYXJlbnRJbmRlbnQ6IGZjLmluZGVudCxcbiAgICAgICAgICAgICAgICBzdGFydE9uTmV3bGluZTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHZhbHVlUHJvcHMuZm91bmQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTWFwICYmICFwcm9wcy5mb3VuZCAmJiBjdHgub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3Qgb2Ygc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ID09PSB2YWx1ZVByb3BzLmZvdW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3QudHlwZSA9PT0gJ25ld2xpbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3Ioc3QsICdNVUxUSUxJTkVfSU1QTElDSVRfS0VZJywgJ0ltcGxpY2l0IGtleXMgb2YgZmxvdyBzZXF1ZW5jZSBwYWlycyBuZWVkIHRvIGJlIG9uIGEgc2luZ2xlIGxpbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuc3RhcnQgPCB2YWx1ZVByb3BzLmZvdW5kLm9mZnNldCAtIDEwMjQpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHZhbHVlUHJvcHMuZm91bmQsICdLRVlfT1ZFUl8xMDI0X0NIQVJTJywgJ1RoZSA6IGluZGljYXRvciBtdXN0IGJlIGF0IG1vc3QgMTAyNCBjaGFycyBhZnRlciB0aGUgc3RhcnQgb2YgYW4gaW1wbGljaXQgZmxvdyBzZXF1ZW5jZSBrZXknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICgnc291cmNlJyBpbiB2YWx1ZSAmJiB2YWx1ZS5zb3VyY2UgJiYgdmFsdWUuc291cmNlWzBdID09PSAnOicpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodmFsdWUsICdNSVNTSU5HX0NIQVInLCBgTWlzc2luZyBzcGFjZSBhZnRlciA6IGluICR7ZmNOYW1lfWApO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcih2YWx1ZVByb3BzLnN0YXJ0LCAnTUlTU0lOR19DSEFSJywgYE1pc3NpbmcgLCBvciA6IGJldHdlZW4gJHtmY05hbWV9IGl0ZW1zYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB2YWx1ZSB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgdmFsdWVOb2RlID0gdmFsdWVcbiAgICAgICAgICAgICAgICA/IGNvbXBvc2VOb2RlKGN0eCwgdmFsdWUsIHZhbHVlUHJvcHMsIG9uRXJyb3IpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVByb3BzLmZvdW5kXG4gICAgICAgICAgICAgICAgICAgID8gY29tcG9zZUVtcHR5Tm9kZShjdHgsIHZhbHVlUHJvcHMuZW5kLCBzZXAsIG51bGwsIHZhbHVlUHJvcHMsIG9uRXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh2YWx1ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCbG9jayh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IodmFsdWVOb2RlLnJhbmdlLCAnQkxPQ0tfSU5fRkxPVycsIGJsb2NrTXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlUHJvcHMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChrZXlOb2RlLmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGtleU5vZGUuY29tbWVudCArPSAnXFxuJyArIHZhbHVlUHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGtleU5vZGUuY29tbWVudCA9IHZhbHVlUHJvcHMuY29tbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhaXIgPSBuZXcgUGFpcihrZXlOb2RlLCB2YWx1ZU5vZGUpO1xuICAgICAgICAgICAgaWYgKGN0eC5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMpXG4gICAgICAgICAgICAgICAgcGFpci5zcmNUb2tlbiA9IGNvbGxJdGVtO1xuICAgICAgICAgICAgaWYgKGlzTWFwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwID0gY29sbDtcbiAgICAgICAgICAgICAgICBpZiAobWFwSW5jbHVkZXMoY3R4LCBtYXAuaXRlbXMsIGtleU5vZGUpKVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGtleVN0YXJ0LCAnRFVQTElDQVRFX0tFWScsICdNYXAga2V5cyBtdXN0IGJlIHVuaXF1ZScpO1xuICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHBhaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwID0gbmV3IFlBTUxNYXAoY3R4LnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgbWFwLmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHBhaXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gKHZhbHVlTm9kZSA/PyBrZXlOb2RlKS5yYW5nZTtcbiAgICAgICAgICAgICAgICBtYXAucmFuZ2UgPSBba2V5Tm9kZS5yYW5nZVswXSwgZW5kUmFuZ2VbMV0sIGVuZFJhbmdlWzJdXTtcbiAgICAgICAgICAgICAgICBjb2xsLml0ZW1zLnB1c2gobWFwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCA9IHZhbHVlTm9kZSA/IHZhbHVlTm9kZS5yYW5nZVsyXSA6IHZhbHVlUHJvcHMuZW5kO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGV4cGVjdGVkRW5kID0gaXNNYXAgPyAnfScgOiAnXSc7XG4gICAgY29uc3QgW2NlLCAuLi5lZV0gPSBmYy5lbmQ7XG4gICAgbGV0IGNlUG9zID0gb2Zmc2V0O1xuICAgIGlmIChjZSAmJiBjZS5zb3VyY2UgPT09IGV4cGVjdGVkRW5kKVxuICAgICAgICBjZVBvcyA9IGNlLm9mZnNldCArIGNlLnNvdXJjZS5sZW5ndGg7XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmY05hbWVbMF0udG9VcHBlckNhc2UoKSArIGZjTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIGNvbnN0IG1zZyA9IGF0Um9vdFxuICAgICAgICAgICAgPyBgJHtuYW1lfSBtdXN0IGVuZCB3aXRoIGEgJHtleHBlY3RlZEVuZH1gXG4gICAgICAgICAgICA6IGAke25hbWV9IGluIGJsb2NrIGNvbGxlY3Rpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgaW5kZW50ZWQgYW5kIGVuZCB3aXRoIGEgJHtleHBlY3RlZEVuZH1gO1xuICAgICAgICBvbkVycm9yKG9mZnNldCwgYXRSb290ID8gJ01JU1NJTkdfQ0hBUicgOiAnQkFEX0lOREVOVCcsIG1zZyk7XG4gICAgICAgIGlmIChjZSAmJiBjZS5zb3VyY2UubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgZWUudW5zaGlmdChjZSk7XG4gICAgfVxuICAgIGlmIChlZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVuZCA9IHJlc29sdmVFbmQoZWUsIGNlUG9zLCBjdHgub3B0aW9ucy5zdHJpY3QsIG9uRXJyb3IpO1xuICAgICAgICBpZiAoZW5kLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChjb2xsLmNvbW1lbnQpXG4gICAgICAgICAgICAgICAgY29sbC5jb21tZW50ICs9ICdcXG4nICsgZW5kLmNvbW1lbnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY29sbC5jb21tZW50ID0gZW5kLmNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29sbC5yYW5nZSA9IFtmYy5vZmZzZXQsIGNlUG9zLCBlbmQub2Zmc2V0XTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbGwucmFuZ2UgPSBbZmMub2Zmc2V0LCBjZVBvcywgY2VQb3NdO1xuICAgIH1cbiAgICByZXR1cm4gY29sbDtcbn1cblxuZXhwb3J0IHsgcmVzb2x2ZUZsb3dDb2xsZWN0aW9uIH07XG4iLCAiaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSAnLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vbm9kZXMvU2NhbGFyLmpzJztcbmltcG9ydCB7IFlBTUxNYXAgfSBmcm9tICcuLi9ub2Rlcy9ZQU1MTWFwLmpzJztcbmltcG9ydCB7IFlBTUxTZXEgfSBmcm9tICcuLi9ub2Rlcy9ZQU1MU2VxLmpzJztcbmltcG9ydCB7IHJlc29sdmVCbG9ja01hcCB9IGZyb20gJy4vcmVzb2x2ZS1ibG9jay1tYXAuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUJsb2NrU2VxIH0gZnJvbSAnLi9yZXNvbHZlLWJsb2NrLXNlcS5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRmxvd0NvbGxlY3Rpb24gfSBmcm9tICcuL3Jlc29sdmUtZmxvdy1jb2xsZWN0aW9uLmpzJztcblxuZnVuY3Rpb24gcmVzb2x2ZUNvbGxlY3Rpb24oQ04sIGN0eCwgdG9rZW4sIG9uRXJyb3IsIHRhZ05hbWUsIHRhZykge1xuICAgIGNvbnN0IGNvbGwgPSB0b2tlbi50eXBlID09PSAnYmxvY2stbWFwJ1xuICAgICAgICA/IHJlc29sdmVCbG9ja01hcChDTiwgY3R4LCB0b2tlbiwgb25FcnJvciwgdGFnKVxuICAgICAgICA6IHRva2VuLnR5cGUgPT09ICdibG9jay1zZXEnXG4gICAgICAgICAgICA/IHJlc29sdmVCbG9ja1NlcShDTiwgY3R4LCB0b2tlbiwgb25FcnJvciwgdGFnKVxuICAgICAgICAgICAgOiByZXNvbHZlRmxvd0NvbGxlY3Rpb24oQ04sIGN0eCwgdG9rZW4sIG9uRXJyb3IsIHRhZyk7XG4gICAgY29uc3QgQ29sbCA9IGNvbGwuY29uc3RydWN0b3I7XG4gICAgLy8gSWYgd2UgZ290IGEgdGFnTmFtZSBtYXRjaGluZyB0aGUgY2xhc3MsIG9yIHRoZSB0YWcgbmFtZSBpcyAnIScsXG4gICAgLy8gdGhlbiB1c2UgdGhlIHRhZ05hbWUgZnJvbSB0aGUgbm9kZSBjbGFzcyB1c2VkIHRvIGNyZWF0ZSBpdC5cbiAgICBpZiAodGFnTmFtZSA9PT0gJyEnIHx8IHRhZ05hbWUgPT09IENvbGwudGFnTmFtZSkge1xuICAgICAgICBjb2xsLnRhZyA9IENvbGwudGFnTmFtZTtcbiAgICAgICAgcmV0dXJuIGNvbGw7XG4gICAgfVxuICAgIGlmICh0YWdOYW1lKVxuICAgICAgICBjb2xsLnRhZyA9IHRhZ05hbWU7XG4gICAgcmV0dXJuIGNvbGw7XG59XG5mdW5jdGlvbiBjb21wb3NlQ29sbGVjdGlvbihDTiwgY3R4LCB0b2tlbiwgcHJvcHMsIG9uRXJyb3IpIHtcbiAgICBjb25zdCB0YWdUb2tlbiA9IHByb3BzLnRhZztcbiAgICBjb25zdCB0YWdOYW1lID0gIXRhZ1Rva2VuXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGN0eC5kaXJlY3RpdmVzLnRhZ05hbWUodGFnVG9rZW4uc291cmNlLCBtc2cgPT4gb25FcnJvcih0YWdUb2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIG1zZykpO1xuICAgIGlmICh0b2tlbi50eXBlID09PSAnYmxvY2stc2VxJykge1xuICAgICAgICBjb25zdCB7IGFuY2hvciwgbmV3bGluZUFmdGVyUHJvcDogbmwgfSA9IHByb3BzO1xuICAgICAgICBjb25zdCBsYXN0UHJvcCA9IGFuY2hvciAmJiB0YWdUb2tlblxuICAgICAgICAgICAgPyBhbmNob3Iub2Zmc2V0ID4gdGFnVG9rZW4ub2Zmc2V0XG4gICAgICAgICAgICAgICAgPyBhbmNob3JcbiAgICAgICAgICAgICAgICA6IHRhZ1Rva2VuXG4gICAgICAgICAgICA6IChhbmNob3IgPz8gdGFnVG9rZW4pO1xuICAgICAgICBpZiAobGFzdFByb3AgJiYgKCFubCB8fCBubC5vZmZzZXQgPCBsYXN0UHJvcC5vZmZzZXQpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ01pc3NpbmcgbmV3bGluZSBhZnRlciBibG9jayBzZXF1ZW5jZSBwcm9wcyc7XG4gICAgICAgICAgICBvbkVycm9yKGxhc3RQcm9wLCAnTUlTU0lOR19DSEFSJywgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZXhwVHlwZSA9IHRva2VuLnR5cGUgPT09ICdibG9jay1tYXAnXG4gICAgICAgID8gJ21hcCdcbiAgICAgICAgOiB0b2tlbi50eXBlID09PSAnYmxvY2stc2VxJ1xuICAgICAgICAgICAgPyAnc2VxJ1xuICAgICAgICAgICAgOiB0b2tlbi5zdGFydC5zb3VyY2UgPT09ICd7J1xuICAgICAgICAgICAgICAgID8gJ21hcCdcbiAgICAgICAgICAgICAgICA6ICdzZXEnO1xuICAgIC8vIHNob3J0Y3V0OiBjaGVjayBpZiBpdCdzIGEgZ2VuZXJpYyBZQU1MTWFwIG9yIFlBTUxTZXFcbiAgICAvLyBiZWZvcmUganVtcGluZyBpbnRvIHRoZSBjdXN0b20gdGFnIGxvZ2ljLlxuICAgIGlmICghdGFnVG9rZW4gfHxcbiAgICAgICAgIXRhZ05hbWUgfHxcbiAgICAgICAgdGFnTmFtZSA9PT0gJyEnIHx8XG4gICAgICAgICh0YWdOYW1lID09PSBZQU1MTWFwLnRhZ05hbWUgJiYgZXhwVHlwZSA9PT0gJ21hcCcpIHx8XG4gICAgICAgICh0YWdOYW1lID09PSBZQU1MU2VxLnRhZ05hbWUgJiYgZXhwVHlwZSA9PT0gJ3NlcScpKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlQ29sbGVjdGlvbihDTiwgY3R4LCB0b2tlbiwgb25FcnJvciwgdGFnTmFtZSk7XG4gICAgfVxuICAgIGxldCB0YWcgPSBjdHguc2NoZW1hLnRhZ3MuZmluZCh0ID0+IHQudGFnID09PSB0YWdOYW1lICYmIHQuY29sbGVjdGlvbiA9PT0gZXhwVHlwZSk7XG4gICAgaWYgKCF0YWcpIHtcbiAgICAgICAgY29uc3Qga3QgPSBjdHguc2NoZW1hLmtub3duVGFnc1t0YWdOYW1lXTtcbiAgICAgICAgaWYgKGt0ICYmIGt0LmNvbGxlY3Rpb24gPT09IGV4cFR5cGUpIHtcbiAgICAgICAgICAgIGN0eC5zY2hlbWEudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGt0LCB7IGRlZmF1bHQ6IGZhbHNlIH0pKTtcbiAgICAgICAgICAgIHRhZyA9IGt0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGt0Py5jb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcih0YWdUb2tlbiwgJ0JBRF9DT0xMRUNUSU9OX1RZUEUnLCBgJHtrdC50YWd9IHVzZWQgZm9yICR7ZXhwVHlwZX0gY29sbGVjdGlvbiwgYnV0IGV4cGVjdHMgJHtrdC5jb2xsZWN0aW9ufWAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcih0YWdUb2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIGBVbnJlc29sdmVkIHRhZzogJHt0YWdOYW1lfWAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVDb2xsZWN0aW9uKENOLCBjdHgsIHRva2VuLCBvbkVycm9yLCB0YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2xsID0gcmVzb2x2ZUNvbGxlY3Rpb24oQ04sIGN0eCwgdG9rZW4sIG9uRXJyb3IsIHRhZ05hbWUsIHRhZyk7XG4gICAgY29uc3QgcmVzID0gdGFnLnJlc29sdmU/Lihjb2xsLCBtc2cgPT4gb25FcnJvcih0YWdUb2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIG1zZyksIGN0eC5vcHRpb25zKSA/PyBjb2xsO1xuICAgIGNvbnN0IG5vZGUgPSBpc05vZGUocmVzKVxuICAgICAgICA/IHJlc1xuICAgICAgICA6IG5ldyBTY2FsYXIocmVzKTtcbiAgICBub2RlLnJhbmdlID0gY29sbC5yYW5nZTtcbiAgICBub2RlLnRhZyA9IHRhZ05hbWU7XG4gICAgaWYgKHRhZz8uZm9ybWF0KVxuICAgICAgICBub2RlLmZvcm1hdCA9IHRhZy5mb3JtYXQ7XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCB7IGNvbXBvc2VDb2xsZWN0aW9uIH07XG4iLCAiaW1wb3J0IHsgU2NhbGFyIH0gZnJvbSAnLi4vbm9kZXMvU2NhbGFyLmpzJztcblxuZnVuY3Rpb24gcmVzb2x2ZUJsb2NrU2NhbGFyKGN0eCwgc2NhbGFyLCBvbkVycm9yKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzY2FsYXIub2Zmc2V0O1xuICAgIGNvbnN0IGhlYWRlciA9IHBhcnNlQmxvY2tTY2FsYXJIZWFkZXIoc2NhbGFyLCBjdHgub3B0aW9ucy5zdHJpY3QsIG9uRXJyb3IpO1xuICAgIGlmICghaGVhZGVyKVxuICAgICAgICByZXR1cm4geyB2YWx1ZTogJycsIHR5cGU6IG51bGwsIGNvbW1lbnQ6ICcnLCByYW5nZTogW3N0YXJ0LCBzdGFydCwgc3RhcnRdIH07XG4gICAgY29uc3QgdHlwZSA9IGhlYWRlci5tb2RlID09PSAnPicgPyBTY2FsYXIuQkxPQ0tfRk9MREVEIDogU2NhbGFyLkJMT0NLX0xJVEVSQUw7XG4gICAgY29uc3QgbGluZXMgPSBzY2FsYXIuc291cmNlID8gc3BsaXRMaW5lcyhzY2FsYXIuc291cmNlKSA6IFtdO1xuICAgIC8vIGRldGVybWluZSB0aGUgZW5kIG9mIGNvbnRlbnQgJiBzdGFydCBvZiBjaG9tcGluZ1xuICAgIGxldCBjaG9tcFN0YXJ0ID0gbGluZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSBsaW5lcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gbGluZXNbaV1bMV07XG4gICAgICAgIGlmIChjb250ZW50ID09PSAnJyB8fCBjb250ZW50ID09PSAnXFxyJylcbiAgICAgICAgICAgIGNob21wU3RhcnQgPSBpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gc2hvcnRjdXQgZm9yIGVtcHR5IGNvbnRlbnRzXG4gICAgaWYgKGNob21wU3RhcnQgPT09IDApIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXIuY2hvbXAgPT09ICcrJyAmJiBsaW5lcy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICdcXG4nLnJlcGVhdChNYXRoLm1heCgxLCBsaW5lcy5sZW5ndGggLSAxKSlcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIGxldCBlbmQgPSBzdGFydCArIGhlYWRlci5sZW5ndGg7XG4gICAgICAgIGlmIChzY2FsYXIuc291cmNlKVxuICAgICAgICAgICAgZW5kICs9IHNjYWxhci5zb3VyY2UubGVuZ3RoO1xuICAgICAgICByZXR1cm4geyB2YWx1ZSwgdHlwZSwgY29tbWVudDogaGVhZGVyLmNvbW1lbnQsIHJhbmdlOiBbc3RhcnQsIGVuZCwgZW5kXSB9O1xuICAgIH1cbiAgICAvLyBmaW5kIHRoZSBpbmRlbnRhdGlvbiBsZXZlbCB0byB0cmltIGZyb20gc3RhcnRcbiAgICBsZXQgdHJpbUluZGVudCA9IHNjYWxhci5pbmRlbnQgKyBoZWFkZXIuaW5kZW50O1xuICAgIGxldCBvZmZzZXQgPSBzY2FsYXIub2Zmc2V0ICsgaGVhZGVyLmxlbmd0aDtcbiAgICBsZXQgY29udGVudFN0YXJ0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNob21wU3RhcnQ7ICsraSkge1xuICAgICAgICBjb25zdCBbaW5kZW50LCBjb250ZW50XSA9IGxpbmVzW2ldO1xuICAgICAgICBpZiAoY29udGVudCA9PT0gJycgfHwgY29udGVudCA9PT0gJ1xccicpIHtcbiAgICAgICAgICAgIGlmIChoZWFkZXIuaW5kZW50ID09PSAwICYmIGluZGVudC5sZW5ndGggPiB0cmltSW5kZW50KVxuICAgICAgICAgICAgICAgIHRyaW1JbmRlbnQgPSBpbmRlbnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGluZGVudC5sZW5ndGggPCB0cmltSW5kZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdCbG9jayBzY2FsYXJzIHdpdGggbW9yZS1pbmRlbnRlZCBsZWFkaW5nIGVtcHR5IGxpbmVzIG11c3QgdXNlIGFuIGV4cGxpY2l0IGluZGVudGF0aW9uIGluZGljYXRvcic7XG4gICAgICAgICAgICAgICAgb25FcnJvcihvZmZzZXQgKyBpbmRlbnQubGVuZ3RoLCAnTUlTU0lOR19DSEFSJywgbWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGVhZGVyLmluZGVudCA9PT0gMClcbiAgICAgICAgICAgICAgICB0cmltSW5kZW50ID0gaW5kZW50Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRlbnRTdGFydCA9IGk7XG4gICAgICAgICAgICBpZiAodHJpbUluZGVudCA9PT0gMCAmJiAhY3R4LmF0Um9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnQmxvY2sgc2NhbGFyIHZhbHVlcyBpbiBjb2xsZWN0aW9ucyBtdXN0IGJlIGluZGVudGVkJztcbiAgICAgICAgICAgICAgICBvbkVycm9yKG9mZnNldCwgJ0JBRF9JTkRFTlQnLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG9mZnNldCArPSBpbmRlbnQubGVuZ3RoICsgY29udGVudC5sZW5ndGggKyAxO1xuICAgIH1cbiAgICAvLyBpbmNsdWRlIHRyYWlsaW5nIG1vcmUtaW5kZW50ZWQgZW1wdHkgbGluZXMgaW4gY29udGVudFxuICAgIGZvciAobGV0IGkgPSBsaW5lcy5sZW5ndGggLSAxOyBpID49IGNob21wU3RhcnQ7IC0taSkge1xuICAgICAgICBpZiAobGluZXNbaV1bMF0ubGVuZ3RoID4gdHJpbUluZGVudClcbiAgICAgICAgICAgIGNob21wU3RhcnQgPSBpICsgMTtcbiAgICB9XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgbGV0IHNlcCA9ICcnO1xuICAgIGxldCBwcmV2TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgLy8gbGVhZGluZyB3aGl0ZXNwYWNlIGlzIGtlcHQgaW50YWN0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50U3RhcnQ7ICsraSlcbiAgICAgICAgdmFsdWUgKz0gbGluZXNbaV1bMF0uc2xpY2UodHJpbUluZGVudCkgKyAnXFxuJztcbiAgICBmb3IgKGxldCBpID0gY29udGVudFN0YXJ0OyBpIDwgY2hvbXBTdGFydDsgKytpKSB7XG4gICAgICAgIGxldCBbaW5kZW50LCBjb250ZW50XSA9IGxpbmVzW2ldO1xuICAgICAgICBvZmZzZXQgKz0gaW5kZW50Lmxlbmd0aCArIGNvbnRlbnQubGVuZ3RoICsgMTtcbiAgICAgICAgY29uc3QgY3JsZiA9IGNvbnRlbnRbY29udGVudC5sZW5ndGggLSAxXSA9PT0gJ1xccic7XG4gICAgICAgIGlmIChjcmxmKVxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMCwgLTEpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgYWxyZWFkeSBjYXVnaHQgaW4gbGV4ZXIgKi9cbiAgICAgICAgaWYgKGNvbnRlbnQgJiYgaW5kZW50Lmxlbmd0aCA8IHRyaW1JbmRlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGhlYWRlci5pbmRlbnRcbiAgICAgICAgICAgICAgICA/ICdleHBsaWNpdCBpbmRlbnRhdGlvbiBpbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgOiAnZmlyc3QgbGluZSc7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYEJsb2NrIHNjYWxhciBsaW5lcyBtdXN0IG5vdCBiZSBsZXNzIGluZGVudGVkIHRoYW4gdGhlaXIgJHtzcmN9YDtcbiAgICAgICAgICAgIG9uRXJyb3Iob2Zmc2V0IC0gY29udGVudC5sZW5ndGggLSAoY3JsZiA/IDIgOiAxKSwgJ0JBRF9JTkRFTlQnLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGluZGVudCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSBTY2FsYXIuQkxPQ0tfTElURVJBTCkge1xuICAgICAgICAgICAgdmFsdWUgKz0gc2VwICsgaW5kZW50LnNsaWNlKHRyaW1JbmRlbnQpICsgY29udGVudDtcbiAgICAgICAgICAgIHNlcCA9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGluZGVudC5sZW5ndGggPiB0cmltSW5kZW50IHx8IGNvbnRlbnRbMF0gPT09ICdcXHQnKSB7XG4gICAgICAgICAgICAvLyBtb3JlLWluZGVudGVkIGNvbnRlbnQgd2l0aGluIGEgZm9sZGVkIGJsb2NrXG4gICAgICAgICAgICBpZiAoc2VwID09PSAnICcpXG4gICAgICAgICAgICAgICAgc2VwID0gJ1xcbic7XG4gICAgICAgICAgICBlbHNlIGlmICghcHJldk1vcmVJbmRlbnRlZCAmJiBzZXAgPT09ICdcXG4nKVxuICAgICAgICAgICAgICAgIHNlcCA9ICdcXG5cXG4nO1xuICAgICAgICAgICAgdmFsdWUgKz0gc2VwICsgaW5kZW50LnNsaWNlKHRyaW1JbmRlbnQpICsgY29udGVudDtcbiAgICAgICAgICAgIHNlcCA9ICdcXG4nO1xuICAgICAgICAgICAgcHJldk1vcmVJbmRlbnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udGVudCA9PT0gJycpIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IGxpbmVcbiAgICAgICAgICAgIGlmIChzZXAgPT09ICdcXG4nKVxuICAgICAgICAgICAgICAgIHZhbHVlICs9ICdcXG4nO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlcCA9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgKz0gc2VwICsgY29udGVudDtcbiAgICAgICAgICAgIHNlcCA9ICcgJztcbiAgICAgICAgICAgIHByZXZNb3JlSW5kZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKGhlYWRlci5jaG9tcCkge1xuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjaG9tcFN0YXJ0OyBpIDwgbGluZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJ1xcbicgKyBsaW5lc1tpXVswXS5zbGljZSh0cmltSW5kZW50KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSAhPT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJ1xcbic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhbHVlICs9ICdcXG4nO1xuICAgIH1cbiAgICBjb25zdCBlbmQgPSBzdGFydCArIGhlYWRlci5sZW5ndGggKyBzY2FsYXIuc291cmNlLmxlbmd0aDtcbiAgICByZXR1cm4geyB2YWx1ZSwgdHlwZSwgY29tbWVudDogaGVhZGVyLmNvbW1lbnQsIHJhbmdlOiBbc3RhcnQsIGVuZCwgZW5kXSB9O1xufVxuZnVuY3Rpb24gcGFyc2VCbG9ja1NjYWxhckhlYWRlcih7IG9mZnNldCwgcHJvcHMgfSwgc3RyaWN0LCBvbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmIHNob3VsZCBub3QgaGFwcGVuICovXG4gICAgaWYgKHByb3BzWzBdLnR5cGUgIT09ICdibG9jay1zY2FsYXItaGVhZGVyJykge1xuICAgICAgICBvbkVycm9yKHByb3BzWzBdLCAnSU1QT1NTSUJMRScsICdCbG9jayBzY2FsYXIgaGVhZGVyIG5vdCBmb3VuZCcpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgeyBzb3VyY2UgfSA9IHByb3BzWzBdO1xuICAgIGNvbnN0IG1vZGUgPSBzb3VyY2VbMF07XG4gICAgbGV0IGluZGVudCA9IDA7XG4gICAgbGV0IGNob21wID0gJyc7XG4gICAgbGV0IGVycm9yID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgY2ggPSBzb3VyY2VbaV07XG4gICAgICAgIGlmICghY2hvbXAgJiYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykpXG4gICAgICAgICAgICBjaG9tcCA9IGNoO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBOdW1iZXIoY2gpO1xuICAgICAgICAgICAgaWYgKCFpbmRlbnQgJiYgbilcbiAgICAgICAgICAgICAgICBpbmRlbnQgPSBuO1xuICAgICAgICAgICAgZWxzZSBpZiAoZXJyb3IgPT09IC0xKVxuICAgICAgICAgICAgICAgIGVycm9yID0gb2Zmc2V0ICsgaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXJyb3IgIT09IC0xKVxuICAgICAgICBvbkVycm9yKGVycm9yLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBCbG9jayBzY2FsYXIgaGVhZGVyIGluY2x1ZGVzIGV4dHJhIGNoYXJhY3RlcnM6ICR7c291cmNlfWApO1xuICAgIGxldCBoYXNTcGFjZSA9IGZhbHNlO1xuICAgIGxldCBjb21tZW50ID0gJyc7XG4gICAgbGV0IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwcm9wcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHByb3BzW2ldO1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICBoYXNTcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgbGVuZ3RoICs9IHRva2VuLnNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmICFoYXNTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0NvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMnO1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnTUlTU0lOR19DSEFSJywgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxlbmd0aCArPSB0b2tlbi5zb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB0b2tlbi5zb3VyY2Uuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICAgIG9uRXJyb3IodG9rZW4sICdVTkVYUEVDVEVEX1RPS0VOJywgdG9rZW4ubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgbGVuZ3RoICs9IHRva2VuLnNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVW5leHBlY3RlZCB0b2tlbiBpbiBibG9jayBzY2FsYXIgaGVhZGVyOiAke3Rva2VuLnR5cGV9YDtcbiAgICAgICAgICAgICAgICBvbkVycm9yKHRva2VuLCAnVU5FWFBFQ1RFRF9UT0tFTicsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRzID0gdG9rZW4uc291cmNlO1xuICAgICAgICAgICAgICAgIGlmICh0cyAmJiB0eXBlb2YgdHMgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gdHMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IG1vZGUsIGluZGVudCwgY2hvbXAsIGNvbW1lbnQsIGxlbmd0aCB9O1xufVxuLyoqIEByZXR1cm5zIEFycmF5IG9mIGxpbmVzIHNwbGl0IHVwIGFzIGBbaW5kZW50LCBjb250ZW50XWAgKi9cbmZ1bmN0aW9uIHNwbGl0TGluZXMoc291cmNlKSB7XG4gICAgY29uc3Qgc3BsaXQgPSBzb3VyY2Uuc3BsaXQoL1xcbiggKikvKTtcbiAgICBjb25zdCBmaXJzdCA9IHNwbGl0WzBdO1xuICAgIGNvbnN0IG0gPSBmaXJzdC5tYXRjaCgvXiggKikvKTtcbiAgICBjb25zdCBsaW5lMCA9IG0/LlsxXVxuICAgICAgICA/IFttWzFdLCBmaXJzdC5zbGljZShtWzFdLmxlbmd0aCldXG4gICAgICAgIDogWycnLCBmaXJzdF07XG4gICAgY29uc3QgbGluZXMgPSBbbGluZTBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXQubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgIGxpbmVzLnB1c2goW3NwbGl0W2ldLCBzcGxpdFtpICsgMV1dKTtcbiAgICByZXR1cm4gbGluZXM7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVCbG9ja1NjYWxhciB9O1xuIiwgImltcG9ydCB7IFNjYWxhciB9IGZyb20gJy4uL25vZGVzL1NjYWxhci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRW5kIH0gZnJvbSAnLi9yZXNvbHZlLWVuZC5qcyc7XG5cbmZ1bmN0aW9uIHJlc29sdmVGbG93U2NhbGFyKHNjYWxhciwgc3RyaWN0LCBvbkVycm9yKSB7XG4gICAgY29uc3QgeyBvZmZzZXQsIHR5cGUsIHNvdXJjZSwgZW5kIH0gPSBzY2FsYXI7XG4gICAgbGV0IF90eXBlO1xuICAgIGxldCB2YWx1ZTtcbiAgICBjb25zdCBfb25FcnJvciA9IChyZWwsIGNvZGUsIG1zZykgPT4gb25FcnJvcihvZmZzZXQgKyByZWwsIGNvZGUsIG1zZyk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgICAgICBfdHlwZSA9IFNjYWxhci5QTEFJTjtcbiAgICAgICAgICAgIHZhbHVlID0gcGxhaW5WYWx1ZShzb3VyY2UsIF9vbkVycm9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICBfdHlwZSA9IFNjYWxhci5RVU9URV9TSU5HTEU7XG4gICAgICAgICAgICB2YWx1ZSA9IHNpbmdsZVF1b3RlZFZhbHVlKHNvdXJjZSwgX29uRXJyb3IpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgIF90eXBlID0gU2NhbGFyLlFVT1RFX0RPVUJMRTtcbiAgICAgICAgICAgIHZhbHVlID0gZG91YmxlUXVvdGVkVmFsdWUoc291cmNlLCBfb25FcnJvcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgc2hvdWxkIG5vdCBoYXBwZW4gKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIG9uRXJyb3Ioc2NhbGFyLCAnVU5FWFBFQ1RFRF9UT0tFTicsIGBFeHBlY3RlZCBhIGZsb3cgc2NhbGFyIHZhbHVlLCBidXQgZm91bmQ6ICR7dHlwZX1gKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgICAgICAgICAgY29tbWVudDogJycsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtvZmZzZXQsIG9mZnNldCArIHNvdXJjZS5sZW5ndGgsIG9mZnNldCArIHNvdXJjZS5sZW5ndGhdXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZUVuZCA9IG9mZnNldCArIHNvdXJjZS5sZW5ndGg7XG4gICAgY29uc3QgcmUgPSByZXNvbHZlRW5kKGVuZCwgdmFsdWVFbmQsIHN0cmljdCwgb25FcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6IF90eXBlLFxuICAgICAgICBjb21tZW50OiByZS5jb21tZW50LFxuICAgICAgICByYW5nZTogW29mZnNldCwgdmFsdWVFbmQsIHJlLm9mZnNldF1cbiAgICB9O1xufVxuZnVuY3Rpb24gcGxhaW5WYWx1ZShzb3VyY2UsIG9uRXJyb3IpIHtcbiAgICBsZXQgYmFkQ2hhciA9ICcnO1xuICAgIHN3aXRjaCAoc291cmNlWzBdKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IHNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICAgICAgICBiYWRDaGFyID0gJ2EgdGFiIGNoYXJhY3Rlcic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnLCc6XG4gICAgICAgICAgICBiYWRDaGFyID0gJ2Zsb3cgaW5kaWNhdG9yIGNoYXJhY3RlciAsJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIGJhZENoYXIgPSAnZGlyZWN0aXZlIGluZGljYXRvciBjaGFyYWN0ZXIgJSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgIGNhc2UgJz4nOiB7XG4gICAgICAgICAgICBiYWRDaGFyID0gYGJsb2NrIHNjYWxhciBpbmRpY2F0b3IgJHtzb3VyY2VbMF19YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0AnOlxuICAgICAgICBjYXNlICdgJzoge1xuICAgICAgICAgICAgYmFkQ2hhciA9IGByZXNlcnZlZCBjaGFyYWN0ZXIgJHtzb3VyY2VbMF19YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChiYWRDaGFyKVxuICAgICAgICBvbkVycm9yKDAsICdCQURfU0NBTEFSX1NUQVJUJywgYFBsYWluIHZhbHVlIGNhbm5vdCBzdGFydCB3aXRoICR7YmFkQ2hhcn1gKTtcbiAgICByZXR1cm4gZm9sZExpbmVzKHNvdXJjZSk7XG59XG5mdW5jdGlvbiBzaW5nbGVRdW90ZWRWYWx1ZShzb3VyY2UsIG9uRXJyb3IpIHtcbiAgICBpZiAoc291cmNlW3NvdXJjZS5sZW5ndGggLSAxXSAhPT0gXCInXCIgfHwgc291cmNlLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgb25FcnJvcihzb3VyY2UubGVuZ3RoLCAnTUlTU0lOR19DSEFSJywgXCJNaXNzaW5nIGNsb3NpbmcgJ3F1b3RlXCIpO1xuICAgIHJldHVybiBmb2xkTGluZXMoc291cmNlLnNsaWNlKDEsIC0xKSkucmVwbGFjZSgvJycvZywgXCInXCIpO1xufVxuZnVuY3Rpb24gZm9sZExpbmVzKHNvdXJjZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBuZWdhdGl2ZSBsb29rYmVoaW5kIGhlcmUgYW5kIGluIHRoZSBgcmVgIFJlZ0V4cCBpcyB0b1xuICAgICAqIHByZXZlbnQgY2F1c2luZyBhIHBvbHlub21pYWwgc2VhcmNoIHRpbWUgaW4gY2VydGFpbiBjYXNlcy5cbiAgICAgKlxuICAgICAqIFRoZSB0cnktY2F0Y2ggaXMgZm9yIFNhZmFyaSwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHRoaXMgeWV0OlxuICAgICAqIGh0dHBzOi8vY2FuaXVzZS5jb20vanMtcmVnZXhwLWxvb2tiZWhpbmRcbiAgICAgKi9cbiAgICBsZXQgZmlyc3QsIGxpbmU7XG4gICAgdHJ5IHtcbiAgICAgICAgZmlyc3QgPSBuZXcgUmVnRXhwKCcoLio/KSg/PCFbIFxcdF0pWyBcXHRdKlxccj9cXG4nLCAnc3knKTtcbiAgICAgICAgbGluZSA9IG5ldyBSZWdFeHAoJ1sgXFx0XSooLio/KSg/Oig/PCFbIFxcdF0pWyBcXHRdKik/XFxyP1xcbicsICdzeScpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIGZpcnN0ID0gLyguKj8pWyBcXHRdKlxccj9cXG4vc3k7XG4gICAgICAgIGxpbmUgPSAvWyBcXHRdKiguKj8pWyBcXHRdKlxccj9cXG4vc3k7XG4gICAgfVxuICAgIGxldCBtYXRjaCA9IGZpcnN0LmV4ZWMoc291cmNlKTtcbiAgICBpZiAoIW1hdGNoKVxuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIGxldCByZXMgPSBtYXRjaFsxXTtcbiAgICBsZXQgc2VwID0gJyAnO1xuICAgIGxldCBwb3MgPSBmaXJzdC5sYXN0SW5kZXg7XG4gICAgbGluZS5sYXN0SW5kZXggPSBwb3M7XG4gICAgd2hpbGUgKChtYXRjaCA9IGxpbmUuZXhlYyhzb3VyY2UpKSkge1xuICAgICAgICBpZiAobWF0Y2hbMV0gPT09ICcnKSB7XG4gICAgICAgICAgICBpZiAoc2VwID09PSAnXFxuJylcbiAgICAgICAgICAgICAgICByZXMgKz0gc2VwO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlcCA9ICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzICs9IHNlcCArIG1hdGNoWzFdO1xuICAgICAgICAgICAgc2VwID0gJyAnO1xuICAgICAgICB9XG4gICAgICAgIHBvcyA9IGxpbmUubGFzdEluZGV4O1xuICAgIH1cbiAgICBjb25zdCBsYXN0ID0gL1sgXFx0XSooLiopL3N5O1xuICAgIGxhc3QubGFzdEluZGV4ID0gcG9zO1xuICAgIG1hdGNoID0gbGFzdC5leGVjKHNvdXJjZSk7XG4gICAgcmV0dXJuIHJlcyArIHNlcCArIChtYXRjaD8uWzFdID8/ICcnKTtcbn1cbmZ1bmN0aW9uIGRvdWJsZVF1b3RlZFZhbHVlKHNvdXJjZSwgb25FcnJvcikge1xuICAgIGxldCByZXMgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNvdXJjZS5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgY29uc3QgY2ggPSBzb3VyY2VbaV07XG4gICAgICAgIGlmIChjaCA9PT0gJ1xccicgJiYgc291cmNlW2kgKyAxXSA9PT0gJ1xcbicpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGNoID09PSAnXFxuJykge1xuICAgICAgICAgICAgY29uc3QgeyBmb2xkLCBvZmZzZXQgfSA9IGZvbGROZXdsaW5lKHNvdXJjZSwgaSk7XG4gICAgICAgICAgICByZXMgKz0gZm9sZDtcbiAgICAgICAgICAgIGkgPSBvZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgbGV0IG5leHQgPSBzb3VyY2VbKytpXTtcbiAgICAgICAgICAgIGNvbnN0IGNjID0gZXNjYXBlQ29kZXNbbmV4dF07XG4gICAgICAgICAgICBpZiAoY2MpXG4gICAgICAgICAgICAgICAgcmVzICs9IGNjO1xuICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAvLyBza2lwIGVzY2FwZWQgbmV3bGluZXMsIGJ1dCBzdGlsbCB0cmltIHRoZSBmb2xsb3dpbmcgbGluZVxuICAgICAgICAgICAgICAgIG5leHQgPSBzb3VyY2VbaSArIDFdO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0ID09PSAnICcgfHwgbmV4dCA9PT0gJ1xcdCcpXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBzb3VyY2VbKytpICsgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSAnXFxyJyAmJiBzb3VyY2VbaSArIDFdID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgIC8vIHNraXAgZXNjYXBlZCBDUkxGIG5ld2xpbmVzLCBidXQgc3RpbGwgdHJpbSB0aGUgZm9sbG93aW5nIGxpbmVcbiAgICAgICAgICAgICAgICBuZXh0ID0gc291cmNlWysraSArIDFdO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0ID09PSAnICcgfHwgbmV4dCA9PT0gJ1xcdCcpXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBzb3VyY2VbKytpICsgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSAneCcgfHwgbmV4dCA9PT0gJ3UnIHx8IG5leHQgPT09ICdVJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHsgeDogMiwgdTogNCwgVTogOCB9W25leHRdO1xuICAgICAgICAgICAgICAgIHJlcyArPSBwYXJzZUNoYXJDb2RlKHNvdXJjZSwgaSArIDEsIGxlbmd0aCwgb25FcnJvcik7XG4gICAgICAgICAgICAgICAgaSArPSBsZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXcgPSBzb3VyY2Uuc3Vic3RyKGkgLSAxLCAyKTtcbiAgICAgICAgICAgICAgICBvbkVycm9yKGkgLSAxLCAnQkFEX0RRX0VTQ0FQRScsIGBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSAke3Jhd31gKTtcbiAgICAgICAgICAgICAgICByZXMgKz0gcmF3O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKSB7XG4gICAgICAgICAgICAvLyB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICAgICAgICAgIGNvbnN0IHdzU3RhcnQgPSBpO1xuICAgICAgICAgICAgbGV0IG5leHQgPSBzb3VyY2VbaSArIDFdO1xuICAgICAgICAgICAgd2hpbGUgKG5leHQgPT09ICcgJyB8fCBuZXh0ID09PSAnXFx0JylcbiAgICAgICAgICAgICAgICBuZXh0ID0gc291cmNlWysraSArIDFdO1xuICAgICAgICAgICAgaWYgKG5leHQgIT09ICdcXG4nICYmICEobmV4dCA9PT0gJ1xccicgJiYgc291cmNlW2kgKyAyXSA9PT0gJ1xcbicpKVxuICAgICAgICAgICAgICAgIHJlcyArPSBpID4gd3NTdGFydCA/IHNvdXJjZS5zbGljZSh3c1N0YXJ0LCBpICsgMSkgOiBjaDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcyArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc291cmNlW3NvdXJjZS5sZW5ndGggLSAxXSAhPT0gJ1wiJyB8fCBzb3VyY2UubGVuZ3RoID09PSAxKVxuICAgICAgICBvbkVycm9yKHNvdXJjZS5sZW5ndGgsICdNSVNTSU5HX0NIQVInLCAnTWlzc2luZyBjbG9zaW5nIFwicXVvdGUnKTtcbiAgICByZXR1cm4gcmVzO1xufVxuLyoqXG4gKiBGb2xkIGEgc2luZ2xlIG5ld2xpbmUgaW50byBhIHNwYWNlLCBtdWx0aXBsZSBuZXdsaW5lcyB0byBOIC0gMSBuZXdsaW5lcy5cbiAqIFByZXN1bWVzIGBzb3VyY2Vbb2Zmc2V0XSA9PT0gJ1xcbidgXG4gKi9cbmZ1bmN0aW9uIGZvbGROZXdsaW5lKHNvdXJjZSwgb2Zmc2V0KSB7XG4gICAgbGV0IGZvbGQgPSAnJztcbiAgICBsZXQgY2ggPSBzb3VyY2Vbb2Zmc2V0ICsgMV07XG4gICAgd2hpbGUgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnIHx8IGNoID09PSAnXFxuJyB8fCBjaCA9PT0gJ1xccicpIHtcbiAgICAgICAgaWYgKGNoID09PSAnXFxyJyAmJiBzb3VyY2Vbb2Zmc2V0ICsgMl0gIT09ICdcXG4nKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChjaCA9PT0gJ1xcbicpXG4gICAgICAgICAgICBmb2xkICs9ICdcXG4nO1xuICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgY2ggPSBzb3VyY2Vbb2Zmc2V0ICsgMV07XG4gICAgfVxuICAgIGlmICghZm9sZClcbiAgICAgICAgZm9sZCA9ICcgJztcbiAgICByZXR1cm4geyBmb2xkLCBvZmZzZXQgfTtcbn1cbmNvbnN0IGVzY2FwZUNvZGVzID0ge1xuICAgICcwJzogJ1xcMCcsIC8vIG51bGwgY2hhcmFjdGVyXG4gICAgYTogJ1xceDA3JywgLy8gYmVsbCBjaGFyYWN0ZXJcbiAgICBiOiAnXFxiJywgLy8gYmFja3NwYWNlXG4gICAgZTogJ1xceDFiJywgLy8gZXNjYXBlIGNoYXJhY3RlclxuICAgIGY6ICdcXGYnLCAvLyBmb3JtIGZlZWRcbiAgICBuOiAnXFxuJywgLy8gbGluZSBmZWVkXG4gICAgcjogJ1xccicsIC8vIGNhcnJpYWdlIHJldHVyblxuICAgIHQ6ICdcXHQnLCAvLyBob3Jpem9udGFsIHRhYlxuICAgIHY6ICdcXHYnLCAvLyB2ZXJ0aWNhbCB0YWJcbiAgICBOOiAnXFx1MDA4NScsIC8vIFVuaWNvZGUgbmV4dCBsaW5lXG4gICAgXzogJ1xcdTAwYTAnLCAvLyBVbmljb2RlIG5vbi1icmVha2luZyBzcGFjZVxuICAgIEw6ICdcXHUyMDI4JywgLy8gVW5pY29kZSBsaW5lIHNlcGFyYXRvclxuICAgIFA6ICdcXHUyMDI5JywgLy8gVW5pY29kZSBwYXJhZ3JhcGggc2VwYXJhdG9yXG4gICAgJyAnOiAnICcsXG4gICAgJ1wiJzogJ1wiJyxcbiAgICAnLyc6ICcvJyxcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAnXFx0JzogJ1xcdCdcbn07XG5mdW5jdGlvbiBwYXJzZUNoYXJDb2RlKHNvdXJjZSwgb2Zmc2V0LCBsZW5ndGgsIG9uRXJyb3IpIHtcbiAgICBjb25zdCBjYyA9IHNvdXJjZS5zdWJzdHIob2Zmc2V0LCBsZW5ndGgpO1xuICAgIGNvbnN0IG9rID0gY2MubGVuZ3RoID09PSBsZW5ndGggJiYgL15bMC05YS1mQS1GXSskLy50ZXN0KGNjKTtcbiAgICBjb25zdCBjb2RlID0gb2sgPyBwYXJzZUludChjYywgMTYpIDogTmFOO1xuICAgIGlmIChpc05hTihjb2RlKSkge1xuICAgICAgICBjb25zdCByYXcgPSBzb3VyY2Uuc3Vic3RyKG9mZnNldCAtIDIsIGxlbmd0aCArIDIpO1xuICAgICAgICBvbkVycm9yKG9mZnNldCAtIDIsICdCQURfRFFfRVNDQVBFJywgYEludmFsaWQgZXNjYXBlIHNlcXVlbmNlICR7cmF3fWApO1xuICAgICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZSk7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVGbG93U2NhbGFyIH07XG4iLCAiaW1wb3J0IHsgaXNTY2FsYXIsIFNDQUxBUiB9IGZyb20gJy4uL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IFNjYWxhciB9IGZyb20gJy4uL25vZGVzL1NjYWxhci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlQmxvY2tTY2FsYXIgfSBmcm9tICcuL3Jlc29sdmUtYmxvY2stc2NhbGFyLmpzJztcbmltcG9ydCB7IHJlc29sdmVGbG93U2NhbGFyIH0gZnJvbSAnLi9yZXNvbHZlLWZsb3ctc2NhbGFyLmpzJztcblxuZnVuY3Rpb24gY29tcG9zZVNjYWxhcihjdHgsIHRva2VuLCB0YWdUb2tlbiwgb25FcnJvcikge1xuICAgIGNvbnN0IHsgdmFsdWUsIHR5cGUsIGNvbW1lbnQsIHJhbmdlIH0gPSB0b2tlbi50eXBlID09PSAnYmxvY2stc2NhbGFyJ1xuICAgICAgICA/IHJlc29sdmVCbG9ja1NjYWxhcihjdHgsIHRva2VuLCBvbkVycm9yKVxuICAgICAgICA6IHJlc29sdmVGbG93U2NhbGFyKHRva2VuLCBjdHgub3B0aW9ucy5zdHJpY3QsIG9uRXJyb3IpO1xuICAgIGNvbnN0IHRhZ05hbWUgPSB0YWdUb2tlblxuICAgICAgICA/IGN0eC5kaXJlY3RpdmVzLnRhZ05hbWUodGFnVG9rZW4uc291cmNlLCBtc2cgPT4gb25FcnJvcih0YWdUb2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIG1zZykpXG4gICAgICAgIDogbnVsbDtcbiAgICBsZXQgdGFnO1xuICAgIGlmIChjdHgub3B0aW9ucy5zdHJpbmdLZXlzICYmIGN0eC5hdEtleSkge1xuICAgICAgICB0YWcgPSBjdHguc2NoZW1hW1NDQUxBUl07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZ05hbWUpXG4gICAgICAgIHRhZyA9IGZpbmRTY2FsYXJUYWdCeU5hbWUoY3R4LnNjaGVtYSwgdmFsdWUsIHRhZ05hbWUsIHRhZ1Rva2VuLCBvbkVycm9yKTtcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSAnc2NhbGFyJylcbiAgICAgICAgdGFnID0gZmluZFNjYWxhclRhZ0J5VGVzdChjdHgsIHZhbHVlLCB0b2tlbiwgb25FcnJvcik7XG4gICAgZWxzZVxuICAgICAgICB0YWcgPSBjdHguc2NoZW1hW1NDQUxBUl07XG4gICAgbGV0IHNjYWxhcjtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0YWcucmVzb2x2ZSh2YWx1ZSwgbXNnID0+IG9uRXJyb3IodGFnVG9rZW4gPz8gdG9rZW4sICdUQUdfUkVTT0xWRV9GQUlMRUQnLCBtc2cpLCBjdHgub3B0aW9ucyk7XG4gICAgICAgIHNjYWxhciA9IGlzU2NhbGFyKHJlcykgPyByZXMgOiBuZXcgU2NhbGFyKHJlcyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIG9uRXJyb3IodGFnVG9rZW4gPz8gdG9rZW4sICdUQUdfUkVTT0xWRV9GQUlMRUQnLCBtc2cpO1xuICAgICAgICBzY2FsYXIgPSBuZXcgU2NhbGFyKHZhbHVlKTtcbiAgICB9XG4gICAgc2NhbGFyLnJhbmdlID0gcmFuZ2U7XG4gICAgc2NhbGFyLnNvdXJjZSA9IHZhbHVlO1xuICAgIGlmICh0eXBlKVxuICAgICAgICBzY2FsYXIudHlwZSA9IHR5cGU7XG4gICAgaWYgKHRhZ05hbWUpXG4gICAgICAgIHNjYWxhci50YWcgPSB0YWdOYW1lO1xuICAgIGlmICh0YWcuZm9ybWF0KVxuICAgICAgICBzY2FsYXIuZm9ybWF0ID0gdGFnLmZvcm1hdDtcbiAgICBpZiAoY29tbWVudClcbiAgICAgICAgc2NhbGFyLmNvbW1lbnQgPSBjb21tZW50O1xuICAgIHJldHVybiBzY2FsYXI7XG59XG5mdW5jdGlvbiBmaW5kU2NhbGFyVGFnQnlOYW1lKHNjaGVtYSwgdmFsdWUsIHRhZ05hbWUsIHRhZ1Rva2VuLCBvbkVycm9yKSB7XG4gICAgaWYgKHRhZ05hbWUgPT09ICchJylcbiAgICAgICAgcmV0dXJuIHNjaGVtYVtTQ0FMQVJdOyAvLyBub24tc3BlY2lmaWMgdGFnXG4gICAgY29uc3QgbWF0Y2hXaXRoVGVzdCA9IFtdO1xuICAgIGZvciAoY29uc3QgdGFnIG9mIHNjaGVtYS50YWdzKSB7XG4gICAgICAgIGlmICghdGFnLmNvbGxlY3Rpb24gJiYgdGFnLnRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgICAgICAgaWYgKHRhZy5kZWZhdWx0ICYmIHRhZy50ZXN0KVxuICAgICAgICAgICAgICAgIG1hdGNoV2l0aFRlc3QucHVzaCh0YWcpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiB0YWc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCB0YWcgb2YgbWF0Y2hXaXRoVGVzdClcbiAgICAgICAgaWYgKHRhZy50ZXN0Py50ZXN0KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiB0YWc7XG4gICAgY29uc3Qga3QgPSBzY2hlbWEua25vd25UYWdzW3RhZ05hbWVdO1xuICAgIGlmIChrdCAmJiAha3QuY29sbGVjdGlvbikge1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUga25vd24gdGFnIGlzIGF2YWlsYWJsZSBmb3Igc3RyaW5naWZ5aW5nLFxuICAgICAgICAvLyBidXQgZG9lcyBub3QgZ2V0IHVzZWQgYnkgZGVmYXVsdC5cbiAgICAgICAgc2NoZW1hLnRhZ3MucHVzaChPYmplY3QuYXNzaWduKHt9LCBrdCwgeyBkZWZhdWx0OiBmYWxzZSwgdGVzdDogdW5kZWZpbmVkIH0pKTtcbiAgICAgICAgcmV0dXJuIGt0O1xuICAgIH1cbiAgICBvbkVycm9yKHRhZ1Rva2VuLCAnVEFHX1JFU09MVkVfRkFJTEVEJywgYFVucmVzb2x2ZWQgdGFnOiAke3RhZ05hbWV9YCwgdGFnTmFtZSAhPT0gJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicpO1xuICAgIHJldHVybiBzY2hlbWFbU0NBTEFSXTtcbn1cbmZ1bmN0aW9uIGZpbmRTY2FsYXJUYWdCeVRlc3QoeyBhdEtleSwgZGlyZWN0aXZlcywgc2NoZW1hIH0sIHZhbHVlLCB0b2tlbiwgb25FcnJvcikge1xuICAgIGNvbnN0IHRhZyA9IHNjaGVtYS50YWdzLmZpbmQodGFnID0+ICh0YWcuZGVmYXVsdCA9PT0gdHJ1ZSB8fCAoYXRLZXkgJiYgdGFnLmRlZmF1bHQgPT09ICdrZXknKSkgJiZcbiAgICAgICAgdGFnLnRlc3Q/LnRlc3QodmFsdWUpKSB8fCBzY2hlbWFbU0NBTEFSXTtcbiAgICBpZiAoc2NoZW1hLmNvbXBhdCkge1xuICAgICAgICBjb25zdCBjb21wYXQgPSBzY2hlbWEuY29tcGF0LmZpbmQodGFnID0+IHRhZy5kZWZhdWx0ICYmIHRhZy50ZXN0Py50ZXN0KHZhbHVlKSkgPz9cbiAgICAgICAgICAgIHNjaGVtYVtTQ0FMQVJdO1xuICAgICAgICBpZiAodGFnLnRhZyAhPT0gY29tcGF0LnRhZykge1xuICAgICAgICAgICAgY29uc3QgdHMgPSBkaXJlY3RpdmVzLnRhZ1N0cmluZyh0YWcudGFnKTtcbiAgICAgICAgICAgIGNvbnN0IGNzID0gZGlyZWN0aXZlcy50YWdTdHJpbmcoY29tcGF0LnRhZyk7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgVmFsdWUgbWF5IGJlIHBhcnNlZCBhcyBlaXRoZXIgJHt0c30gb3IgJHtjc31gO1xuICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ1RBR19SRVNPTFZFX0ZBSUxFRCcsIG1zZywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhZztcbn1cblxuZXhwb3J0IHsgY29tcG9zZVNjYWxhciB9O1xuIiwgImZ1bmN0aW9uIGVtcHR5U2NhbGFyUG9zaXRpb24ob2Zmc2V0LCBiZWZvcmUsIHBvcykge1xuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgaWYgKHBvcyA9PT0gbnVsbClcbiAgICAgICAgICAgIHBvcyA9IGJlZm9yZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSBwb3MgLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgbGV0IHN0ID0gYmVmb3JlW2ldO1xuICAgICAgICAgICAgc3dpdGNoIChzdC50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgLT0gc3Quc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUZWNobmljYWxseSwgYW4gZW1wdHkgc2NhbGFyIGlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsYXN0IG5vbi1lbXB0eVxuICAgICAgICAgICAgLy8gbm9kZSwgYnV0IGl0J3MgbW9yZSB1c2VmdWwgdG8gcGxhY2UgaXQgYWZ0ZXIgYW55IHdoaXRlc3BhY2UuXG4gICAgICAgICAgICBzdCA9IGJlZm9yZVsrK2ldO1xuICAgICAgICAgICAgd2hpbGUgKHN0Py50eXBlID09PSAnc3BhY2UnKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHN0LnNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgc3QgPSBiZWZvcmVbKytpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG59XG5cbmV4cG9ydCB7IGVtcHR5U2NhbGFyUG9zaXRpb24gfTtcbiIsICJpbXBvcnQgeyBBbGlhcyB9IGZyb20gJy4uL25vZGVzL0FsaWFzLmpzJztcbmltcG9ydCB7IGlzU2NhbGFyIH0gZnJvbSAnLi4vbm9kZXMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgY29tcG9zZUNvbGxlY3Rpb24gfSBmcm9tICcuL2NvbXBvc2UtY29sbGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBjb21wb3NlU2NhbGFyIH0gZnJvbSAnLi9jb21wb3NlLXNjYWxhci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRW5kIH0gZnJvbSAnLi9yZXNvbHZlLWVuZC5qcyc7XG5pbXBvcnQgeyBlbXB0eVNjYWxhclBvc2l0aW9uIH0gZnJvbSAnLi91dGlsLWVtcHR5LXNjYWxhci1wb3NpdGlvbi5qcyc7XG5cbmNvbnN0IENOID0geyBjb21wb3NlTm9kZSwgY29tcG9zZUVtcHR5Tm9kZSB9O1xuZnVuY3Rpb24gY29tcG9zZU5vZGUoY3R4LCB0b2tlbiwgcHJvcHMsIG9uRXJyb3IpIHtcbiAgICBjb25zdCBhdEtleSA9IGN0eC5hdEtleTtcbiAgICBjb25zdCB7IHNwYWNlQmVmb3JlLCBjb21tZW50LCBhbmNob3IsIHRhZyB9ID0gcHJvcHM7XG4gICAgbGV0IG5vZGU7XG4gICAgbGV0IGlzU3JjVG9rZW4gPSB0cnVlO1xuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgICAgICBub2RlID0gY29tcG9zZUFsaWFzKGN0eCwgdG9rZW4sIG9uRXJyb3IpO1xuICAgICAgICAgICAgaWYgKGFuY2hvciB8fCB0YWcpXG4gICAgICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ0FMSUFTX1BST1BTJywgJ0FuIGFsaWFzIG5vZGUgbXVzdCBub3Qgc3BlY2lmeSBhbnkgcHJvcGVydGllcycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgIGNhc2UgJ3NpbmdsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgY2FzZSAnZG91YmxlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICBjYXNlICdibG9jay1zY2FsYXInOlxuICAgICAgICAgICAgbm9kZSA9IGNvbXBvc2VTY2FsYXIoY3R4LCB0b2tlbiwgdGFnLCBvbkVycm9yKTtcbiAgICAgICAgICAgIGlmIChhbmNob3IpXG4gICAgICAgICAgICAgICAgbm9kZS5hbmNob3IgPSBhbmNob3Iuc291cmNlLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdibG9jay1tYXAnOlxuICAgICAgICBjYXNlICdibG9jay1zZXEnOlxuICAgICAgICBjYXNlICdmbG93LWNvbGxlY3Rpb24nOlxuICAgICAgICAgICAgbm9kZSA9IGNvbXBvc2VDb2xsZWN0aW9uKENOLCBjdHgsIHRva2VuLCBwcm9wcywgb25FcnJvcik7XG4gICAgICAgICAgICBpZiAoYW5jaG9yKVxuICAgICAgICAgICAgICAgIG5vZGUuYW5jaG9yID0gYW5jaG9yLnNvdXJjZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRva2VuLnR5cGUgPT09ICdlcnJvcidcbiAgICAgICAgICAgICAgICA/IHRva2VuLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICA6IGBVbnN1cHBvcnRlZCB0b2tlbiAodHlwZTogJHt0b2tlbi50eXBlfSlgO1xuICAgICAgICAgICAgb25FcnJvcih0b2tlbiwgJ1VORVhQRUNURURfVE9LRU4nLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIG5vZGUgPSBjb21wb3NlRW1wdHlOb2RlKGN0eCwgdG9rZW4ub2Zmc2V0LCB1bmRlZmluZWQsIG51bGwsIHByb3BzLCBvbkVycm9yKTtcbiAgICAgICAgICAgIGlzU3JjVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYW5jaG9yICYmIG5vZGUuYW5jaG9yID09PSAnJylcbiAgICAgICAgb25FcnJvcihhbmNob3IsICdCQURfQUxJQVMnLCAnQW5jaG9yIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICBpZiAoYXRLZXkgJiZcbiAgICAgICAgY3R4Lm9wdGlvbnMuc3RyaW5nS2V5cyAmJlxuICAgICAgICAoIWlzU2NhbGFyKG5vZGUpIHx8XG4gICAgICAgICAgICB0eXBlb2Ygbm9kZS52YWx1ZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgIChub2RlLnRhZyAmJiBub2RlLnRhZyAhPT0gJ3RhZzp5YW1sLm9yZywyMDAyOnN0cicpKSkge1xuICAgICAgICBjb25zdCBtc2cgPSAnV2l0aCBzdHJpbmdLZXlzLCBhbGwga2V5cyBtdXN0IGJlIHN0cmluZ3MnO1xuICAgICAgICBvbkVycm9yKHRhZyA/PyB0b2tlbiwgJ05PTl9TVFJJTkdfS0VZJywgbXNnKTtcbiAgICB9XG4gICAgaWYgKHNwYWNlQmVmb3JlKVxuICAgICAgICBub2RlLnNwYWNlQmVmb3JlID0gdHJ1ZTtcbiAgICBpZiAoY29tbWVudCkge1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ3NjYWxhcicgJiYgdG9rZW4uc291cmNlID09PSAnJylcbiAgICAgICAgICAgIG5vZGUuY29tbWVudCA9IGNvbW1lbnQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5vZGUuY29tbWVudEJlZm9yZSA9IGNvbW1lbnQ7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZSBjaGVja2luZyBtaXNzZXMgbWVhbmluZyBvZiBpc1NyY1Rva2VuXG4gICAgaWYgKGN0eC5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMgJiYgaXNTcmNUb2tlbilcbiAgICAgICAgbm9kZS5zcmNUb2tlbiA9IHRva2VuO1xuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gY29tcG9zZUVtcHR5Tm9kZShjdHgsIG9mZnNldCwgYmVmb3JlLCBwb3MsIHsgc3BhY2VCZWZvcmUsIGNvbW1lbnQsIGFuY2hvciwgdGFnLCBlbmQgfSwgb25FcnJvcikge1xuICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgICB0eXBlOiAnc2NhbGFyJyxcbiAgICAgICAgb2Zmc2V0OiBlbXB0eVNjYWxhclBvc2l0aW9uKG9mZnNldCwgYmVmb3JlLCBwb3MpLFxuICAgICAgICBpbmRlbnQ6IC0xLFxuICAgICAgICBzb3VyY2U6ICcnXG4gICAgfTtcbiAgICBjb25zdCBub2RlID0gY29tcG9zZVNjYWxhcihjdHgsIHRva2VuLCB0YWcsIG9uRXJyb3IpO1xuICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgbm9kZS5hbmNob3IgPSBhbmNob3Iuc291cmNlLnN1YnN0cmluZygxKTtcbiAgICAgICAgaWYgKG5vZGUuYW5jaG9yID09PSAnJylcbiAgICAgICAgICAgIG9uRXJyb3IoYW5jaG9yLCAnQkFEX0FMSUFTJywgJ0FuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmIChzcGFjZUJlZm9yZSlcbiAgICAgICAgbm9kZS5zcGFjZUJlZm9yZSA9IHRydWU7XG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgbm9kZS5jb21tZW50ID0gY29tbWVudDtcbiAgICAgICAgbm9kZS5yYW5nZVsyXSA9IGVuZDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBjb21wb3NlQWxpYXMoeyBvcHRpb25zIH0sIHsgb2Zmc2V0LCBzb3VyY2UsIGVuZCB9LCBvbkVycm9yKSB7XG4gICAgY29uc3QgYWxpYXMgPSBuZXcgQWxpYXMoc291cmNlLnN1YnN0cmluZygxKSk7XG4gICAgaWYgKGFsaWFzLnNvdXJjZSA9PT0gJycpXG4gICAgICAgIG9uRXJyb3Iob2Zmc2V0LCAnQkFEX0FMSUFTJywgJ0FsaWFzIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICBpZiAoYWxpYXMuc291cmNlLmVuZHNXaXRoKCc6JykpXG4gICAgICAgIG9uRXJyb3Iob2Zmc2V0ICsgc291cmNlLmxlbmd0aCAtIDEsICdCQURfQUxJQVMnLCAnQWxpYXMgZW5kaW5nIGluIDogaXMgYW1iaWd1b3VzJywgdHJ1ZSk7XG4gICAgY29uc3QgdmFsdWVFbmQgPSBvZmZzZXQgKyBzb3VyY2UubGVuZ3RoO1xuICAgIGNvbnN0IHJlID0gcmVzb2x2ZUVuZChlbmQsIHZhbHVlRW5kLCBvcHRpb25zLnN0cmljdCwgb25FcnJvcik7XG4gICAgYWxpYXMucmFuZ2UgPSBbb2Zmc2V0LCB2YWx1ZUVuZCwgcmUub2Zmc2V0XTtcbiAgICBpZiAocmUuY29tbWVudClcbiAgICAgICAgYWxpYXMuY29tbWVudCA9IHJlLmNvbW1lbnQ7XG4gICAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgeyBjb21wb3NlRW1wdHlOb2RlLCBjb21wb3NlTm9kZSB9O1xuIiwgImltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnLi4vZG9jL0RvY3VtZW50LmpzJztcbmltcG9ydCB7IGNvbXBvc2VOb2RlLCBjb21wb3NlRW1wdHlOb2RlIH0gZnJvbSAnLi9jb21wb3NlLW5vZGUuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUVuZCB9IGZyb20gJy4vcmVzb2x2ZS1lbmQuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVByb3BzIH0gZnJvbSAnLi9yZXNvbHZlLXByb3BzLmpzJztcblxuZnVuY3Rpb24gY29tcG9zZURvYyhvcHRpb25zLCBkaXJlY3RpdmVzLCB7IG9mZnNldCwgc3RhcnQsIHZhbHVlLCBlbmQgfSwgb25FcnJvcikge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHsgX2RpcmVjdGl2ZXM6IGRpcmVjdGl2ZXMgfSwgb3B0aW9ucyk7XG4gICAgY29uc3QgZG9jID0gbmV3IERvY3VtZW50KHVuZGVmaW5lZCwgb3B0cyk7XG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgICBhdEtleTogZmFsc2UsXG4gICAgICAgIGF0Um9vdDogdHJ1ZSxcbiAgICAgICAgZGlyZWN0aXZlczogZG9jLmRpcmVjdGl2ZXMsXG4gICAgICAgIG9wdGlvbnM6IGRvYy5vcHRpb25zLFxuICAgICAgICBzY2hlbWE6IGRvYy5zY2hlbWFcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0gcmVzb2x2ZVByb3BzKHN0YXJ0LCB7XG4gICAgICAgIGluZGljYXRvcjogJ2RvYy1zdGFydCcsXG4gICAgICAgIG5leHQ6IHZhbHVlID8/IGVuZD8uWzBdLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIG9uRXJyb3IsXG4gICAgICAgIHBhcmVudEluZGVudDogMCxcbiAgICAgICAgc3RhcnRPbk5ld2xpbmU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAocHJvcHMuZm91bmQpIHtcbiAgICAgICAgZG9jLmRpcmVjdGl2ZXMuZG9jU3RhcnQgPSB0cnVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgICh2YWx1ZS50eXBlID09PSAnYmxvY2stbWFwJyB8fCB2YWx1ZS50eXBlID09PSAnYmxvY2stc2VxJykgJiZcbiAgICAgICAgICAgICFwcm9wcy5oYXNOZXdsaW5lKVxuICAgICAgICAgICAgb25FcnJvcihwcm9wcy5lbmQsICdNSVNTSU5HX0NIQVInLCAnQmxvY2sgY29sbGVjdGlvbiBjYW5ub3Qgc3RhcnQgb24gc2FtZSBsaW5lIHdpdGggZGlyZWN0aXZlcy1lbmQgbWFya2VyJyk7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSWYgQ29udGVudHMgaXMgc2V0LCBsZXQncyB0cnVzdCB0aGUgdXNlclxuICAgIGRvYy5jb250ZW50cyA9IHZhbHVlXG4gICAgICAgID8gY29tcG9zZU5vZGUoY3R4LCB2YWx1ZSwgcHJvcHMsIG9uRXJyb3IpXG4gICAgICAgIDogY29tcG9zZUVtcHR5Tm9kZShjdHgsIHByb3BzLmVuZCwgc3RhcnQsIG51bGwsIHByb3BzLCBvbkVycm9yKTtcbiAgICBjb25zdCBjb250ZW50RW5kID0gZG9jLmNvbnRlbnRzLnJhbmdlWzJdO1xuICAgIGNvbnN0IHJlID0gcmVzb2x2ZUVuZChlbmQsIGNvbnRlbnRFbmQsIGZhbHNlLCBvbkVycm9yKTtcbiAgICBpZiAocmUuY29tbWVudClcbiAgICAgICAgZG9jLmNvbW1lbnQgPSByZS5jb21tZW50O1xuICAgIGRvYy5yYW5nZSA9IFtvZmZzZXQsIGNvbnRlbnRFbmQsIHJlLm9mZnNldF07XG4gICAgcmV0dXJuIGRvYztcbn1cblxuZXhwb3J0IHsgY29tcG9zZURvYyB9O1xuIiwgImltcG9ydCB7IERpcmVjdGl2ZXMgfSBmcm9tICcuLi9kb2MvZGlyZWN0aXZlcy5qcyc7XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJy4uL2RvYy9Eb2N1bWVudC5qcyc7XG5pbXBvcnQgeyBZQU1MV2FybmluZywgWUFNTFBhcnNlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgaXNDb2xsZWN0aW9uLCBpc1BhaXIgfSBmcm9tICcuLi9ub2Rlcy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBjb21wb3NlRG9jIH0gZnJvbSAnLi9jb21wb3NlLWRvYy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRW5kIH0gZnJvbSAnLi9yZXNvbHZlLWVuZC5qcyc7XG5cbmZ1bmN0aW9uIGdldEVycm9yUG9zKHNyYykge1xuICAgIGlmICh0eXBlb2Ygc3JjID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIFtzcmMsIHNyYyArIDFdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNyYykpXG4gICAgICAgIHJldHVybiBzcmMubGVuZ3RoID09PSAyID8gc3JjIDogW3NyY1swXSwgc3JjWzFdXTtcbiAgICBjb25zdCB7IG9mZnNldCwgc291cmNlIH0gPSBzcmM7XG4gICAgcmV0dXJuIFtvZmZzZXQsIG9mZnNldCArICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHNvdXJjZS5sZW5ndGggOiAxKV07XG59XG5mdW5jdGlvbiBwYXJzZVByZWx1ZGUocHJlbHVkZSkge1xuICAgIGxldCBjb21tZW50ID0gJyc7XG4gICAgbGV0IGF0Q29tbWVudCA9IGZhbHNlO1xuICAgIGxldCBhZnRlckVtcHR5TGluZSA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlbHVkZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBwcmVsdWRlW2ldO1xuICAgICAgICBzd2l0Y2ggKHNvdXJjZVswXSkge1xuICAgICAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgICAgICAgY29tbWVudCArPVxuICAgICAgICAgICAgICAgICAgICAoY29tbWVudCA9PT0gJycgPyAnJyA6IGFmdGVyRW1wdHlMaW5lID8gJ1xcblxcbicgOiAnXFxuJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZS5zdWJzdHJpbmcoMSkgfHwgJyAnKTtcbiAgICAgICAgICAgICAgICBhdENvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFmdGVyRW1wdHlMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgICAgICBpZiAocHJlbHVkZVtpICsgMV0/LlswXSAhPT0gJyMnKVxuICAgICAgICAgICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICAgICAgYXRDb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGJlIHdyb25nIGFmdGVyIGRvYy1lbmQsIGJ1dCBpbiB0aGF0IGNhc2UgaXQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgICAgICAgICBpZiAoIWF0Q29tbWVudClcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJFbXB0eUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGF0Q29tbWVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGNvbW1lbnQsIGFmdGVyRW1wdHlMaW5lIH07XG59XG4vKipcbiAqIENvbXBvc2UgYSBzdHJlYW0gb2YgQ1NUIG5vZGVzIGludG8gYSBzdHJlYW0gb2YgWUFNTCBEb2N1bWVudHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IENvbXBvc2VyLCBQYXJzZXIgfSBmcm9tICd5YW1sJ1xuICpcbiAqIGNvbnN0IHNyYzogc3RyaW5nID0gLi4uXG4gKiBjb25zdCB0b2tlbnMgPSBuZXcgUGFyc2VyKCkucGFyc2Uoc3JjKVxuICogY29uc3QgZG9jcyA9IG5ldyBDb21wb3NlcigpLmNvbXBvc2UodG9rZW5zKVxuICogYGBgXG4gKi9cbmNsYXNzIENvbXBvc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5kb2MgPSBudWxsO1xuICAgICAgICB0aGlzLmF0RGlyZWN0aXZlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByZWx1ZGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICAgICAgICB0aGlzLm9uRXJyb3IgPSAoc291cmNlLCBjb2RlLCBtZXNzYWdlLCB3YXJuaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb3MgPSBnZXRFcnJvclBvcyhzb3VyY2UpO1xuICAgICAgICAgICAgaWYgKHdhcm5pbmcpXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKG5ldyBZQU1MV2FybmluZyhwb3MsIGNvZGUsIG1lc3NhZ2UpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBZQU1MUGFyc2VFcnJvcihwb3MsIGNvZGUsIG1lc3NhZ2UpKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItbnVsbGlzaC1jb2FsZXNjaW5nXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IG5ldyBEaXJlY3RpdmVzKHsgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uIHx8ICcxLjInIH0pO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICBkZWNvcmF0ZShkb2MsIGFmdGVyRG9jKSB7XG4gICAgICAgIGNvbnN0IHsgY29tbWVudCwgYWZ0ZXJFbXB0eUxpbmUgfSA9IHBhcnNlUHJlbHVkZSh0aGlzLnByZWx1ZGUpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHsgZGM6IGRvYy5jb21tZW50LCBwcmVsdWRlLCBjb21tZW50IH0pXG4gICAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgICAgICBjb25zdCBkYyA9IGRvYy5jb250ZW50cztcbiAgICAgICAgICAgIGlmIChhZnRlckRvYykge1xuICAgICAgICAgICAgICAgIGRvYy5jb21tZW50ID0gZG9jLmNvbW1lbnQgPyBgJHtkb2MuY29tbWVudH1cXG4ke2NvbW1lbnR9YCA6IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhZnRlckVtcHR5TGluZSB8fCBkb2MuZGlyZWN0aXZlcy5kb2NTdGFydCB8fCAhZGMpIHtcbiAgICAgICAgICAgICAgICBkb2MuY29tbWVudEJlZm9yZSA9IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NvbGxlY3Rpb24oZGMpICYmICFkYy5mbG93ICYmIGRjLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBkYy5pdGVtc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQYWlyKGl0KSlcbiAgICAgICAgICAgICAgICAgICAgaXQgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2IgPSBpdC5jb21tZW50QmVmb3JlO1xuICAgICAgICAgICAgICAgIGl0LmNvbW1lbnRCZWZvcmUgPSBjYiA/IGAke2NvbW1lbnR9XFxuJHtjYn1gIDogY29tbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNiID0gZGMuY29tbWVudEJlZm9yZTtcbiAgICAgICAgICAgICAgICBkYy5jb21tZW50QmVmb3JlID0gY2IgPyBgJHtjb21tZW50fVxcbiR7Y2J9YCA6IGNvbW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFmdGVyRG9jKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkb2MuZXJyb3JzLCB0aGlzLmVycm9ycyk7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkb2Mud2FybmluZ3MsIHRoaXMud2FybmluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZG9jLmVycm9ycyA9IHRoaXMuZXJyb3JzO1xuICAgICAgICAgICAgZG9jLndhcm5pbmdzID0gdGhpcy53YXJuaW5ncztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZWx1ZGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHN0cmVhbSBzdGF0dXMgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBNb3N0bHkgdXNlZnVsIGF0IHRoZSBlbmQgb2YgaW5wdXQgZm9yIGFuIGVtcHR5IHN0cmVhbS5cbiAgICAgKi9cbiAgICBzdHJlYW1JbmZvKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWVudDogcGFyc2VQcmVsdWRlKHRoaXMucHJlbHVkZSkuY29tbWVudCxcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IHRoaXMuZGlyZWN0aXZlcyxcbiAgICAgICAgICAgIGVycm9yczogdGhpcy5lcnJvcnMsXG4gICAgICAgICAgICB3YXJuaW5nczogdGhpcy53YXJuaW5nc1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wb3NlIHRva2VucyBpbnRvIGRvY3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb3JjZURvYyAtIElmIHRoZSBzdHJlYW0gY29udGFpbnMgbm8gZG9jdW1lbnQsIHN0aWxsIGVtaXQgYSBmaW5hbCBkb2N1bWVudCBpbmNsdWRpbmcgYW55IGNvbW1lbnRzIGFuZCBkaXJlY3RpdmVzIHRoYXQgd291bGQgYmUgYXBwbGllZCB0byBhIHN1YnNlcXVlbnQgZG9jdW1lbnQuXG4gICAgICogQHBhcmFtIGVuZE9mZnNldCAtIFNob3VsZCBiZSBzZXQgaWYgYGZvcmNlRG9jYCBpcyBhbHNvIHNldCwgdG8gc2V0IHRoZSBkb2N1bWVudCByYW5nZSBlbmQgYW5kIHRvIGluZGljYXRlIGVycm9ycyBjb3JyZWN0bHkuXG4gICAgICovXG4gICAgKmNvbXBvc2UodG9rZW5zLCBmb3JjZURvYyA9IGZhbHNlLCBlbmRPZmZzZXQgPSAtMSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2VucylcbiAgICAgICAgICAgIHlpZWxkKiB0aGlzLm5leHQodG9rZW4pO1xuICAgICAgICB5aWVsZCogdGhpcy5lbmQoZm9yY2VEb2MsIGVuZE9mZnNldCk7XG4gICAgfVxuICAgIC8qKiBBZHZhbmNlIHRoZSBjb21wb3NlciBieSBvbmUgQ1NUIHRva2VuLiAqL1xuICAgICpuZXh0KHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZGlyZWN0aXZlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZXMuYWRkKHRva2VuLnNvdXJjZSwgKG9mZnNldCwgbWVzc2FnZSwgd2FybmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBnZXRFcnJvclBvcyh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHBvc1swXSArPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihwb3MsICdCQURfRElSRUNUSVZFJywgbWVzc2FnZSwgd2FybmluZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVsdWRlLnB1c2godG9rZW4uc291cmNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF0RGlyZWN0aXZlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkb2N1bWVudCc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBjb21wb3NlRG9jKHRoaXMub3B0aW9ucywgdGhpcy5kaXJlY3RpdmVzLCB0b2tlbiwgdGhpcy5vbkVycm9yKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdERpcmVjdGl2ZXMgJiYgIWRvYy5kaXJlY3RpdmVzLmRvY1N0YXJ0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IodG9rZW4sICdNSVNTSU5HX0NIQVInLCAnTWlzc2luZyBkaXJlY3RpdmVzLWVuZC9kb2Mtc3RhcnQgaW5kaWNhdG9yIGxpbmUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlY29yYXRlKGRvYywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvYylcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdGhpcy5kb2M7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgICAgICAgICAgICAgdGhpcy5hdERpcmVjdGl2ZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2J5dGUtb3JkZXItbWFyayc6XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgIHRoaXMucHJlbHVkZS5wdXNoKHRva2VuLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlcnJvcic6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSB0b2tlbi5zb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgPyBgJHt0b2tlbi5tZXNzYWdlfTogJHtKU09OLnN0cmluZ2lmeSh0b2tlbi5zb3VyY2UpfWBcbiAgICAgICAgICAgICAgICAgICAgOiB0b2tlbi5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFlBTUxQYXJzZUVycm9yKGdldEVycm9yUG9zKHRva2VuKSwgJ1VORVhQRUNURURfVE9LRU4nLCBtc2cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0RGlyZWN0aXZlcyB8fCAhdGhpcy5kb2MpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2MuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnZG9jLWVuZCc6IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZG9jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdVbmV4cGVjdGVkIGRvYy1lbmQgd2l0aG91dCBwcmVjZWRpbmcgZG9jdW1lbnQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBZQU1MUGFyc2VFcnJvcihnZXRFcnJvclBvcyh0b2tlbiksICdVTkVYUEVDVEVEX1RPS0VOJywgbXNnKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRvYy5kaXJlY3RpdmVzLmRvY0VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gcmVzb2x2ZUVuZCh0b2tlbi5lbmQsIHRva2VuLm9mZnNldCArIHRva2VuLnNvdXJjZS5sZW5ndGgsIHRoaXMuZG9jLm9wdGlvbnMuc3RyaWN0LCB0aGlzLm9uRXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVjb3JhdGUodGhpcy5kb2MsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChlbmQuY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYyA9IHRoaXMuZG9jLmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jLmNvbW1lbnQgPSBkYyA/IGAke2RjfVxcbiR7ZW5kLmNvbW1lbnR9YCA6IGVuZC5jb21tZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRvYy5yYW5nZVsyXSA9IGVuZC5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IFlBTUxQYXJzZUVycm9yKGdldEVycm9yUG9zKHRva2VuKSwgJ1VORVhQRUNURURfVE9LRU4nLCBgVW5zdXBwb3J0ZWQgdG9rZW4gJHt0b2tlbi50eXBlfWApKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGF0IGVuZCBvZiBpbnB1dCB0byB5aWVsZCBhbnkgcmVtYWluaW5nIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGZvcmNlRG9jIC0gSWYgdGhlIHN0cmVhbSBjb250YWlucyBubyBkb2N1bWVudCwgc3RpbGwgZW1pdCBhIGZpbmFsIGRvY3VtZW50IGluY2x1ZGluZyBhbnkgY29tbWVudHMgYW5kIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBiZSBhcHBsaWVkIHRvIGEgc3Vic2VxdWVudCBkb2N1bWVudC5cbiAgICAgKiBAcGFyYW0gZW5kT2Zmc2V0IC0gU2hvdWxkIGJlIHNldCBpZiBgZm9yY2VEb2NgIGlzIGFsc28gc2V0LCB0byBzZXQgdGhlIGRvY3VtZW50IHJhbmdlIGVuZCBhbmQgdG8gaW5kaWNhdGUgZXJyb3JzIGNvcnJlY3RseS5cbiAgICAgKi9cbiAgICAqZW5kKGZvcmNlRG9jID0gZmFsc2UsIGVuZE9mZnNldCA9IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLmRvYykge1xuICAgICAgICAgICAgdGhpcy5kZWNvcmF0ZSh0aGlzLmRvYywgdHJ1ZSk7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmRvYztcbiAgICAgICAgICAgIHRoaXMuZG9jID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmb3JjZURvYykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oeyBfZGlyZWN0aXZlczogdGhpcy5kaXJlY3RpdmVzIH0sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRG9jdW1lbnQodW5kZWZpbmVkLCBvcHRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0RGlyZWN0aXZlcylcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoZW5kT2Zmc2V0LCAnTUlTU0lOR19DSEFSJywgJ01pc3NpbmcgZGlyZWN0aXZlcy1lbmQgaW5kaWNhdG9yIGxpbmUnKTtcbiAgICAgICAgICAgIGRvYy5yYW5nZSA9IFswLCBlbmRPZmZzZXQsIGVuZE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmRlY29yYXRlKGRvYywgZmFsc2UpO1xuICAgICAgICAgICAgeWllbGQgZG9jO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBDb21wb3NlciB9O1xuIiwgImNvbnN0IEJSRUFLID0gU3ltYm9sKCdicmVhayB2aXNpdCcpO1xuY29uc3QgU0tJUCA9IFN5bWJvbCgnc2tpcCBjaGlsZHJlbicpO1xuY29uc3QgUkVNT1ZFID0gU3ltYm9sKCdyZW1vdmUgaXRlbScpO1xuLyoqXG4gKiBBcHBseSBhIHZpc2l0b3IgdG8gYSBDU1QgZG9jdW1lbnQgb3IgaXRlbS5cbiAqXG4gKiBXYWxrcyB0aHJvdWdoIHRoZSB0cmVlIChkZXB0aC1maXJzdCkgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdCwgY2FsbGluZyBhXG4gKiBgdmlzaXRvcmAgZnVuY3Rpb24gd2l0aCB0d28gYXJndW1lbnRzIHdoZW4gZW50ZXJpbmcgZWFjaCBpdGVtOlxuICogICAtIGBpdGVtYDogVGhlIGN1cnJlbnQgaXRlbSwgd2hpY2ggaW5jbHVkZWQgdGhlIGZvbGxvd2luZyBtZW1iZXJzOlxuICogICAgIC0gYHN0YXJ0OiBTb3VyY2VUb2tlbltdYCBcdTIwMTMgU291cmNlIHRva2VucyBiZWZvcmUgdGhlIGtleSBvciB2YWx1ZSxcbiAqICAgICAgIHBvc3NpYmx5IGluY2x1ZGluZyBpdHMgYW5jaG9yIG9yIHRhZy5cbiAqICAgICAtIGBrZXk/OiBUb2tlbiB8IG51bGxgIFx1MjAxMyBTZXQgZm9yIHBhaXIgdmFsdWVzLiBNYXkgdGhlbiBiZSBgbnVsbGAsIGlmXG4gKiAgICAgICB0aGUga2V5IGJlZm9yZSB0aGUgYDpgIHNlcGFyYXRvciBpcyBlbXB0eS5cbiAqICAgICAtIGBzZXA/OiBTb3VyY2VUb2tlbltdYCBcdTIwMTMgU291cmNlIHRva2VucyBiZXR3ZWVuIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZSxcbiAqICAgICAgIHdoaWNoIHNob3VsZCBpbmNsdWRlIHRoZSBgOmAgbWFwIHZhbHVlIGluZGljYXRvciBpZiBgdmFsdWVgIGlzIHNldC5cbiAqICAgICAtIGB2YWx1ZT86IFRva2VuYCBcdTIwMTMgVGhlIHZhbHVlIG9mIGEgc2VxdWVuY2UgaXRlbSwgb3Igb2YgYSBtYXAgcGFpci5cbiAqICAgLSBgcGF0aGA6IFRoZSBzdGVwcyBmcm9tIHRoZSByb290IHRvIHRoZSBjdXJyZW50IG5vZGUsIGFzIGFuIGFycmF5IG9mXG4gKiAgICAgYFsna2V5JyB8ICd2YWx1ZScsIG51bWJlcl1gIHR1cGxlcy5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB2aXNpdG9yIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHRyYXZlcnNhbDpcbiAqICAgLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IERvIG5vdGhpbmcgYW5kIGNvbnRpbnVlXG4gKiAgIC0gYHZpc2l0LlNLSVBgOiBEbyBub3QgdmlzaXQgdGhlIGNoaWxkcmVuIG9mIHRoaXMgdG9rZW4sIGNvbnRpbnVlIHdpdGhcbiAqICAgICAgbmV4dCBzaWJsaW5nXG4gKiAgIC0gYHZpc2l0LkJSRUFLYDogVGVybWluYXRlIHRyYXZlcnNhbCBjb21wbGV0ZWx5XG4gKiAgIC0gYHZpc2l0LlJFTU9WRWA6IFJlbW92ZSB0aGUgY3VycmVudCBpdGVtLCB0aGVuIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgb25lXG4gKiAgIC0gYG51bWJlcmA6IFNldCB0aGUgaW5kZXggb2YgdGhlIG5leHQgc3RlcC4gVGhpcyBpcyB1c2VmdWwgZXNwZWNpYWxseSBpZlxuICogICAgIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCB0b2tlbiBoYXMgY2hhbmdlZC5cbiAqICAgLSBgZnVuY3Rpb25gOiBEZWZpbmUgdGhlIG5leHQgdmlzaXRvciBmb3IgdGhpcyBpdGVtLiBBZnRlciB0aGUgb3JpZ2luYWxcbiAqICAgICB2aXNpdG9yIGlzIGNhbGxlZCBvbiBpdGVtIGVudHJ5LCBuZXh0IHZpc2l0b3JzIGFyZSBjYWxsZWQgYWZ0ZXIgaGFuZGxpbmdcbiAqICAgICBhIG5vbi1lbXB0eSBga2V5YCBhbmQgd2hlbiBleGl0aW5nIHRoZSBpdGVtLlxuICovXG5mdW5jdGlvbiB2aXNpdChjc3QsIHZpc2l0b3IpIHtcbiAgICBpZiAoJ3R5cGUnIGluIGNzdCAmJiBjc3QudHlwZSA9PT0gJ2RvY3VtZW50JylcbiAgICAgICAgY3N0ID0geyBzdGFydDogY3N0LnN0YXJ0LCB2YWx1ZTogY3N0LnZhbHVlIH07XG4gICAgX3Zpc2l0KE9iamVjdC5mcmVlemUoW10pLCBjc3QsIHZpc2l0b3IpO1xufVxuLy8gV2l0aG91dCB0aGUgYGFzIHN5bWJvbGAgY2FzdHMsIFRTIGRlY2xhcmVzIHRoZXNlIGluIHRoZSBgdmlzaXRgXG4vLyBuYW1lc3BhY2UgdXNpbmcgYHZhcmAsIGJ1dCB0aGVuIGNvbXBsYWlucyBhYm91dCB0aGF0IGJlY2F1c2Vcbi8vIGB1bmlxdWUgc3ltYm9sYCBtdXN0IGJlIGBjb25zdGAuXG4vKiogVGVybWluYXRlIHZpc2l0IHRyYXZlcnNhbCBjb21wbGV0ZWx5ICovXG52aXNpdC5CUkVBSyA9IEJSRUFLO1xuLyoqIERvIG5vdCB2aXNpdCB0aGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgaXRlbSAqL1xudmlzaXQuU0tJUCA9IFNLSVA7XG4vKiogUmVtb3ZlIHRoZSBjdXJyZW50IGl0ZW0gKi9cbnZpc2l0LlJFTU9WRSA9IFJFTU9WRTtcbi8qKiBGaW5kIHRoZSBpdGVtIGF0IGBwYXRoYCBmcm9tIGBjc3RgIGFzIHRoZSByb290ICovXG52aXNpdC5pdGVtQXRQYXRoID0gKGNzdCwgcGF0aCkgPT4ge1xuICAgIGxldCBpdGVtID0gY3N0O1xuICAgIGZvciAoY29uc3QgW2ZpZWxkLCBpbmRleF0gb2YgcGF0aCkge1xuICAgICAgICBjb25zdCB0b2sgPSBpdGVtPy5bZmllbGRdO1xuICAgICAgICBpZiAodG9rICYmICdpdGVtcycgaW4gdG9rKSB7XG4gICAgICAgICAgICBpdGVtID0gdG9rLml0ZW1zW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbn07XG4vKipcbiAqIEdldCB0aGUgaW1tZWRpYXRlIHBhcmVudCBjb2xsZWN0aW9uIG9mIHRoZSBpdGVtIGF0IGBwYXRoYCBmcm9tIGBjc3RgIGFzIHRoZSByb290LlxuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgY29sbGVjdGlvbiBpcyBub3QgZm91bmQsIHdoaWNoIHNob3VsZCBuZXZlciBoYXBwZW4gaWYgdGhlIGl0ZW0gaXRzZWxmIGV4aXN0cy5cbiAqL1xudmlzaXQucGFyZW50Q29sbGVjdGlvbiA9IChjc3QsIHBhdGgpID0+IHtcbiAgICBjb25zdCBwYXJlbnQgPSB2aXNpdC5pdGVtQXRQYXRoKGNzdCwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIGNvbnN0IGZpZWxkID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdWzBdO1xuICAgIGNvbnN0IGNvbGwgPSBwYXJlbnQ/LltmaWVsZF07XG4gICAgaWYgKGNvbGwgJiYgJ2l0ZW1zJyBpbiBjb2xsKVxuICAgICAgICByZXR1cm4gY29sbDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBjb2xsZWN0aW9uIG5vdCBmb3VuZCcpO1xufTtcbmZ1bmN0aW9uIF92aXNpdChwYXRoLCBpdGVtLCB2aXNpdG9yKSB7XG4gICAgbGV0IGN0cmwgPSB2aXNpdG9yKGl0ZW0sIHBhdGgpO1xuICAgIGlmICh0eXBlb2YgY3RybCA9PT0gJ3N5bWJvbCcpXG4gICAgICAgIHJldHVybiBjdHJsO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgWydrZXknLCAndmFsdWUnXSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGl0ZW1bZmllbGRdO1xuICAgICAgICBpZiAodG9rZW4gJiYgJ2l0ZW1zJyBpbiB0b2tlbikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbi5pdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpID0gX3Zpc2l0KE9iamVjdC5mcmVlemUocGF0aC5jb25jYXQoW1tmaWVsZCwgaV1dKSksIHRva2VuLml0ZW1zW2ldLCB2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNpID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICAgICAgaSA9IGNpIC0gMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gQlJFQUspXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCUkVBSztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaSA9PT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3RybCA9PT0gJ2Z1bmN0aW9uJyAmJiBmaWVsZCA9PT0gJ2tleScpXG4gICAgICAgICAgICAgICAgY3RybCA9IGN0cmwoaXRlbSwgcGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBjdHJsID09PSAnZnVuY3Rpb24nID8gY3RybChpdGVtLCBwYXRoKSA6IGN0cmw7XG59XG5cbmV4cG9ydCB7IHZpc2l0IH07XG4iLCAiZXhwb3J0IHsgY3JlYXRlU2NhbGFyVG9rZW4sIHJlc29sdmVBc1NjYWxhciwgc2V0U2NhbGFyVmFsdWUgfSBmcm9tICcuL2NzdC1zY2FsYXIuanMnO1xuZXhwb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSAnLi9jc3Qtc3RyaW5naWZ5LmpzJztcbmV4cG9ydCB7IHZpc2l0IH0gZnJvbSAnLi9jc3QtdmlzaXQuanMnO1xuXG4vKiogVGhlIGJ5dGUgb3JkZXIgbWFyayAqL1xuY29uc3QgQk9NID0gJ1xcdXtGRUZGfSc7XG4vKiogU3RhcnQgb2YgZG9jLW1vZGUgKi9cbmNvbnN0IERPQ1VNRU5UID0gJ1xceDAyJzsgLy8gQzA6IFN0YXJ0IG9mIFRleHRcbi8qKiBVbmV4cGVjdGVkIGVuZCBvZiBmbG93LW1vZGUgKi9cbmNvbnN0IEZMT1dfRU5EID0gJ1xceDE4JzsgLy8gQzA6IENhbmNlbFxuLyoqIE5leHQgdG9rZW4gaXMgYSBzY2FsYXIgdmFsdWUgKi9cbmNvbnN0IFNDQUxBUiA9ICdcXHgxZic7IC8vIEMwOiBVbml0IFNlcGFyYXRvclxuLyoqIEByZXR1cm5zIGB0cnVlYCBpZiBgdG9rZW5gIGlzIGEgZmxvdyBvciBibG9jayBjb2xsZWN0aW9uICovXG5jb25zdCBpc0NvbGxlY3Rpb24gPSAodG9rZW4pID0+ICEhdG9rZW4gJiYgJ2l0ZW1zJyBpbiB0b2tlbjtcbi8qKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYHRva2VuYCBpcyBhIGZsb3cgb3IgYmxvY2sgc2NhbGFyOyBub3QgYW4gYWxpYXMgKi9cbmNvbnN0IGlzU2NhbGFyID0gKHRva2VuKSA9PiAhIXRva2VuICYmXG4gICAgKHRva2VuLnR5cGUgPT09ICdzY2FsYXInIHx8XG4gICAgICAgIHRva2VuLnR5cGUgPT09ICdzaW5nbGUtcXVvdGVkLXNjYWxhcicgfHxcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJyB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSAnYmxvY2stc2NhbGFyJyk7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuLyoqIEdldCBhIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIGxleGVyIHRva2VuICovXG5mdW5jdGlvbiBwcmV0dHlUb2tlbih0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSBCT006XG4gICAgICAgICAgICByZXR1cm4gJzxCT00+JztcbiAgICAgICAgY2FzZSBET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnPERPQz4nO1xuICAgICAgICBjYXNlIEZMT1dfRU5EOlxuICAgICAgICAgICAgcmV0dXJuICc8RkxPV19FTkQ+JztcbiAgICAgICAgY2FzZSBTQ0FMQVI6XG4gICAgICAgICAgICByZXR1cm4gJzxTQ0FMQVI+JztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0b2tlbik7XG4gICAgfVxufVxuLyoqIElkZW50aWZ5IHRoZSB0eXBlIG9mIGEgbGV4ZXIgdG9rZW4uIE1heSByZXR1cm4gYG51bGxgIGZvciB1bmtub3duIHRva2Vucy4gKi9cbmZ1bmN0aW9uIHRva2VuVHlwZShzb3VyY2UpIHtcbiAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgICBjYXNlIEJPTTpcbiAgICAgICAgICAgIHJldHVybiAnYnl0ZS1vcmRlci1tYXJrJztcbiAgICAgICAgY2FzZSBET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnZG9jLW1vZGUnO1xuICAgICAgICBjYXNlIEZMT1dfRU5EOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LWVycm9yLWVuZCc7XG4gICAgICAgIGNhc2UgU0NBTEFSOlxuICAgICAgICAgICAgcmV0dXJuICdzY2FsYXInO1xuICAgICAgICBjYXNlICctLS0nOlxuICAgICAgICAgICAgcmV0dXJuICdkb2Mtc3RhcnQnO1xuICAgICAgICBjYXNlICcuLi4nOlxuICAgICAgICAgICAgcmV0dXJuICdkb2MtZW5kJztcbiAgICAgICAgY2FzZSAnJzpcbiAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgY2FzZSAnXFxyXFxuJzpcbiAgICAgICAgICAgIHJldHVybiAnbmV3bGluZSc7XG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgcmV0dXJuICdzZXEtaXRlbS1pbmQnO1xuICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICAgIHJldHVybiAnZXhwbGljaXQta2V5LWluZCc7XG4gICAgICAgIGNhc2UgJzonOlxuICAgICAgICAgICAgcmV0dXJuICdtYXAtdmFsdWUtaW5kJztcbiAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICByZXR1cm4gJ2Zsb3ctbWFwLXN0YXJ0JztcbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICByZXR1cm4gJ2Zsb3ctbWFwLWVuZCc7XG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LXNlcS1zdGFydCc7XG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgICAgcmV0dXJuICdmbG93LXNlcS1lbmQnO1xuICAgICAgICBjYXNlICcsJzpcbiAgICAgICAgICAgIHJldHVybiAnY29tbWEnO1xuICAgIH1cbiAgICBzd2l0Y2ggKHNvdXJjZVswXSkge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgIHJldHVybiAnc3BhY2UnO1xuICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7XG4gICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgcmV0dXJuICdkaXJlY3RpdmUtbGluZSc7XG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgcmV0dXJuICdhbGlhcyc7XG4gICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgICAgcmV0dXJuICdhbmNob3InO1xuICAgICAgICBjYXNlICchJzpcbiAgICAgICAgICAgIHJldHVybiAndGFnJztcbiAgICAgICAgY2FzZSBcIidcIjpcbiAgICAgICAgICAgIHJldHVybiAnc2luZ2xlLXF1b3RlZC1zY2FsYXInO1xuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgICByZXR1cm4gJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJztcbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgICAgcmV0dXJuICdibG9jay1zY2FsYXItaGVhZGVyJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB7IEJPTSwgRE9DVU1FTlQsIEZMT1dfRU5ELCBTQ0FMQVIsIGlzQ29sbGVjdGlvbiwgaXNTY2FsYXIsIHByZXR0eVRva2VuLCB0b2tlblR5cGUgfTtcbiIsICJpbXBvcnQgeyBCT00sIERPQ1VNRU5ULCBGTE9XX0VORCwgU0NBTEFSIH0gZnJvbSAnLi9jc3QuanMnO1xuXG4vKlxuU1RBUlQgLT4gc3RyZWFtXG5cbnN0cmVhbVxuICBkaXJlY3RpdmUgLT4gbGluZS1lbmQgLT4gc3RyZWFtXG4gIGluZGVudCArIGxpbmUtZW5kIC0+IHN0cmVhbVxuICBbZWxzZV0gLT4gbGluZS1zdGFydFxuXG5saW5lLWVuZFxuICBjb21tZW50IC0+IGxpbmUtZW5kXG4gIG5ld2xpbmUgLT4gLlxuICBpbnB1dC1lbmQgLT4gRU5EXG5cbmxpbmUtc3RhcnRcbiAgZG9jLXN0YXJ0IC0+IGRvY1xuICBkb2MtZW5kIC0+IHN0cmVhbVxuICBbZWxzZV0gLT4gaW5kZW50IC0+IGJsb2NrLXN0YXJ0XG5cbmJsb2NrLXN0YXJ0XG4gIHNlcS1pdGVtLXN0YXJ0IC0+IGJsb2NrLXN0YXJ0XG4gIGV4cGxpY2l0LWtleS1zdGFydCAtPiBibG9jay1zdGFydFxuICBtYXAtdmFsdWUtc3RhcnQgLT4gYmxvY2stc3RhcnRcbiAgW2Vsc2VdIC0+IGRvY1xuXG5kb2NcbiAgbGluZS1lbmQgLT4gbGluZS1zdGFydFxuICBzcGFjZXMgLT4gZG9jXG4gIGFuY2hvciAtPiBkb2NcbiAgdGFnIC0+IGRvY1xuICBmbG93LXN0YXJ0IC0+IGZsb3cgLT4gZG9jXG4gIGZsb3ctZW5kIC0+IGVycm9yIC0+IGRvY1xuICBzZXEtaXRlbS1zdGFydCAtPiBlcnJvciAtPiBkb2NcbiAgZXhwbGljaXQta2V5LXN0YXJ0IC0+IGVycm9yIC0+IGRvY1xuICBtYXAtdmFsdWUtc3RhcnQgLT4gZG9jXG4gIGFsaWFzIC0+IGRvY1xuICBxdW90ZS1zdGFydCAtPiBxdW90ZWQtc2NhbGFyIC0+IGRvY1xuICBibG9jay1zY2FsYXItaGVhZGVyIC0+IGxpbmUtZW5kIC0+IGJsb2NrLXNjYWxhcihtaW4pIC0+IGxpbmUtc3RhcnRcbiAgW2Vsc2VdIC0+IHBsYWluLXNjYWxhcihmYWxzZSwgbWluKSAtPiBkb2NcblxuZmxvd1xuICBsaW5lLWVuZCAtPiBmbG93XG4gIHNwYWNlcyAtPiBmbG93XG4gIGFuY2hvciAtPiBmbG93XG4gIHRhZyAtPiBmbG93XG4gIGZsb3ctc3RhcnQgLT4gZmxvdyAtPiBmbG93XG4gIGZsb3ctZW5kIC0+IC5cbiAgc2VxLWl0ZW0tc3RhcnQgLT4gZXJyb3IgLT4gZmxvd1xuICBleHBsaWNpdC1rZXktc3RhcnQgLT4gZmxvd1xuICBtYXAtdmFsdWUtc3RhcnQgLT4gZmxvd1xuICBhbGlhcyAtPiBmbG93XG4gIHF1b3RlLXN0YXJ0IC0+IHF1b3RlZC1zY2FsYXIgLT4gZmxvd1xuICBjb21tYSAtPiBmbG93XG4gIFtlbHNlXSAtPiBwbGFpbi1zY2FsYXIodHJ1ZSwgMCkgLT4gZmxvd1xuXG5xdW90ZWQtc2NhbGFyXG4gIHF1b3RlLWVuZCAtPiAuXG4gIFtlbHNlXSAtPiBxdW90ZWQtc2NhbGFyXG5cbmJsb2NrLXNjYWxhcihtaW4pXG4gIG5ld2xpbmUgKyBwZWVrKGluZGVudCA8IG1pbikgLT4gLlxuICBbZWxzZV0gLT4gYmxvY2stc2NhbGFyKG1pbilcblxucGxhaW4tc2NhbGFyKGlzLWZsb3csIG1pbilcbiAgc2NhbGFyLWVuZChpcy1mbG93KSAtPiAuXG4gIHBlZWsobmV3bGluZSArIChpbmRlbnQgPCBtaW4pKSAtPiAuXG4gIFtlbHNlXSAtPiBwbGFpbi1zY2FsYXIobWluKVxuKi9cbmZ1bmN0aW9uIGlzRW1wdHkoY2gpIHtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgY2FzZSAnXFxyJzpcbiAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmNvbnN0IGhleERpZ2l0cyA9IG5ldyBTZXQoJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnKTtcbmNvbnN0IHRhZ0NoYXJzID0gbmV3IFNldChcIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LSM7Lz86QCY9KyRfLiF+KicoKVwiKTtcbmNvbnN0IGZsb3dJbmRpY2F0b3JDaGFycyA9IG5ldyBTZXQoJyxbXXt9Jyk7XG5jb25zdCBpbnZhbGlkQW5jaG9yQ2hhcnMgPSBuZXcgU2V0KCcgLFtde31cXG5cXHJcXHQnKTtcbmNvbnN0IGlzTm90QW5jaG9yQ2hhciA9IChjaCkgPT4gIWNoIHx8IGludmFsaWRBbmNob3JDaGFycy5oYXMoY2gpO1xuLyoqXG4gKiBTcGxpdHMgYW4gaW5wdXQgc3RyaW5nIGludG8gbGV4aWNhbCB0b2tlbnMsIGkuZS4gc21hbGxlciBzdHJpbmdzIHRoYXQgYXJlXG4gKiBlYXNpbHkgaWRlbnRpZmlhYmxlIGJ5IGB0b2tlbnMudG9rZW5UeXBlKClgLlxuICpcbiAqIExleGluZyBzdGFydHMgYWx3YXlzIGluIGEgXCJzdHJlYW1cIiBjb250ZXh0LiBJbmNvbXBsZXRlIGlucHV0IG1heSBiZSBidWZmZXJlZFxuICogdW50aWwgYSBjb21wbGV0ZSB0b2tlbiBjYW4gYmUgZW1pdHRlZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBzbGljZXMgb2YgdGhlIG9yaWdpbmFsIGlucHV0LCB0aGUgZm9sbG93aW5nIGNvbnRyb2wgY2hhcmFjdGVyc1xuICogbWF5IGFsc28gYmUgZW1pdHRlZDpcbiAqXG4gKiAtIGBcXHgwMmAgKFN0YXJ0IG9mIFRleHQpOiBBIGRvY3VtZW50IHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHRva2VuXG4gKiAtIGBcXHgxOGAgKENhbmNlbCk6IFVuZXhwZWN0ZWQgZW5kIG9mIGZsb3ctbW9kZSAoaW5kaWNhdGVzIGFuIGVycm9yKVxuICogLSBgXFx4MWZgIChVbml0IFNlcGFyYXRvcik6IE5leHQgdG9rZW4gaXMgYSBzY2FsYXIgdmFsdWVcbiAqIC0gYFxcdXtGRUZGfWAgKEJ5dGUgb3JkZXIgbWFyayk6IEVtaXR0ZWQgc2VwYXJhdGVseSBvdXRzaWRlIGRvY3VtZW50c1xuICovXG5jbGFzcyBMZXhlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBtYXJrcyB0aGUgZW5kIG9mXG4gICAgICAgICAqIGFsbCBpbnB1dFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdEVuZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRXhwbGljaXQgaW5kZW50IHNldCBpbiBibG9jayBzY2FsYXIgaGVhZGVyLCBhcyBhbiBvZmZzZXQgZnJvbSB0aGUgY3VycmVudFxuICAgICAgICAgKiBtaW5pbXVtIGluZGVudCwgc28gZS5nLiBzZXQgdG8gMSBmcm9tIGEgaGVhZGVyIGB8MitgLiBTZXQgdG8gLTEgaWYgbm90XG4gICAgICAgICAqIGV4cGxpY2l0bHkgc2V0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ibG9ja1NjYWxhckluZGVudCA9IC0xO1xuICAgICAgICAvKipcbiAgICAgICAgICogQmxvY2sgc2NhbGFycyB0aGF0IGluY2x1ZGUgYSArIChrZWVwKSBjaG9tcGluZyBpbmRpY2F0b3IgaW4gdGhlaXIgaGVhZGVyXG4gICAgICAgICAqIGluY2x1ZGUgdHJhaWxpbmcgZW1wdHkgbGluZXMsIHdoaWNoIGFyZSBvdGhlcndpc2UgZXhjbHVkZWQgZnJvbSB0aGVcbiAgICAgICAgICogc2NhbGFyJ3MgY29udGVudHMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJsb2NrU2NhbGFyS2VlcCA9IGZhbHNlO1xuICAgICAgICAvKiogQ3VycmVudCBpbnB1dCAqL1xuICAgICAgICB0aGlzLmJ1ZmZlciA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmxhZyBub3Rpbmcgd2hldGhlciB0aGUgbWFwIHZhbHVlIGluZGljYXRvciA6IGNhbiBpbW1lZGlhdGVseSBmb2xsb3cgdGhpc1xuICAgICAgICAgKiBub2RlIHdpdGhpbiBhIGZsb3cgY29udGV4dC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmxvd0tleSA9IGZhbHNlO1xuICAgICAgICAvKiogQ291bnQgb2Ygc3Vycm91bmRpbmcgZmxvdyBjb2xsZWN0aW9uIGxldmVscy4gKi9cbiAgICAgICAgdGhpcy5mbG93TGV2ZWwgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogTWluaW11bSBsZXZlbCBvZiBpbmRlbnRhdGlvbiByZXF1aXJlZCBmb3IgbmV4dCBsaW5lcyB0byBiZSBwYXJzZWQgYXMgYVxuICAgICAgICAgKiBwYXJ0IG9mIHRoZSBjdXJyZW50IHNjYWxhciB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5kZW50TmV4dCA9IDA7XG4gICAgICAgIC8qKiBJbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGUgY3VycmVudCBsaW5lLiAqL1xuICAgICAgICB0aGlzLmluZGVudFZhbHVlID0gMDtcbiAgICAgICAgLyoqIFBvc2l0aW9uIG9mIHRoZSBuZXh0IFxcbiBjaGFyYWN0ZXIuICovXG4gICAgICAgIHRoaXMubGluZUVuZFBvcyA9IG51bGw7XG4gICAgICAgIC8qKiBTdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBsZXhlciBpZiByZWFjaGluZyB0aGUgZW5kIG9mIGluY3BvbXBsZXRlIGlucHV0ICovXG4gICAgICAgIHRoaXMubmV4dCA9IG51bGw7XG4gICAgICAgIC8qKiBBIHBvaW50ZXIgdG8gYGJ1ZmZlcmA7IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBsZXhlci4gKi9cbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBZQU1MIHRva2VucyBmcm9tIHRoZSBgc291cmNlYCBzdHJpbmcuIElmIGBpbmNvbXBsZXRlYCxcbiAgICAgKiBhIHBhcnQgb2YgdGhlIGxhc3QgbGluZSBtYXkgYmUgbGVmdCBhcyBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgY2FsbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgZ2VuZXJhdG9yIG9mIGxleGljYWwgdG9rZW5zXG4gICAgICovXG4gICAgKmxleChzb3VyY2UsIGluY29tcGxldGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzb3VyY2UgaXMgbm90IGEgc3RyaW5nJyk7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyID8gdGhpcy5idWZmZXIgKyBzb3VyY2UgOiBzb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbmRQb3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXRFbmQgPSAhaW5jb21wbGV0ZTtcbiAgICAgICAgbGV0IG5leHQgPSB0aGlzLm5leHQgPz8gJ3N0cmVhbSc7XG4gICAgICAgIHdoaWxlIChuZXh0ICYmIChpbmNvbXBsZXRlIHx8IHRoaXMuaGFzQ2hhcnMoMSkpKVxuICAgICAgICAgICAgbmV4dCA9IHlpZWxkKiB0aGlzLnBhcnNlTmV4dChuZXh0KTtcbiAgICB9XG4gICAgYXRMaW5lRW5kKCkge1xuICAgICAgICBsZXQgaSA9IHRoaXMucG9zO1xuICAgICAgICBsZXQgY2ggPSB0aGlzLmJ1ZmZlcltpXTtcbiAgICAgICAgd2hpbGUgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKVxuICAgICAgICAgICAgY2ggPSB0aGlzLmJ1ZmZlclsrK2ldO1xuICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnIycgfHwgY2ggPT09ICdcXG4nKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChjaCA9PT0gJ1xccicpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJbaSArIDFdID09PSAnXFxuJztcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjaGFyQXQobikge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MgKyBuXTtcbiAgICB9XG4gICAgY29udGludWVTY2FsYXIob2Zmc2V0KSB7XG4gICAgICAgIGxldCBjaCA9IHRoaXMuYnVmZmVyW29mZnNldF07XG4gICAgICAgIGlmICh0aGlzLmluZGVudE5leHQgPiAwKSB7XG4gICAgICAgICAgICBsZXQgaW5kZW50ID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChjaCA9PT0gJyAnKVxuICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbKytpbmRlbnQgKyBvZmZzZXRdO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXFxyJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmJ1ZmZlcltpbmRlbnQgKyBvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJ1xcbicgfHwgKCFuZXh0ICYmICF0aGlzLmF0RW5kKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArIGluZGVudCArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2ggPT09ICdcXG4nIHx8IGluZGVudCA+PSB0aGlzLmluZGVudE5leHQgfHwgKCFjaCAmJiAhdGhpcy5hdEVuZClcbiAgICAgICAgICAgICAgICA/IG9mZnNldCArIGluZGVudFxuICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcuJykge1xuICAgICAgICAgICAgY29uc3QgZHQgPSB0aGlzLmJ1ZmZlci5zdWJzdHIob2Zmc2V0LCAzKTtcbiAgICAgICAgICAgIGlmICgoZHQgPT09ICctLS0nIHx8IGR0ID09PSAnLi4uJykgJiYgaXNFbXB0eSh0aGlzLmJ1ZmZlcltvZmZzZXQgKyAzXSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuICAgIGdldExpbmUoKSB7XG4gICAgICAgIGxldCBlbmQgPSB0aGlzLmxpbmVFbmRQb3M7XG4gICAgICAgIGlmICh0eXBlb2YgZW5kICE9PSAnbnVtYmVyJyB8fCAoZW5kICE9PSAtMSAmJiBlbmQgPCB0aGlzLnBvcykpIHtcbiAgICAgICAgICAgIGVuZCA9IHRoaXMuYnVmZmVyLmluZGV4T2YoJ1xcbicsIHRoaXMucG9zKTtcbiAgICAgICAgICAgIHRoaXMubGluZUVuZFBvcyA9IGVuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kID09PSAtMSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF0RW5kID8gdGhpcy5idWZmZXIuc3Vic3RyaW5nKHRoaXMucG9zKSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlcltlbmQgLSAxXSA9PT0gJ1xccicpXG4gICAgICAgICAgICBlbmQgLT0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnN1YnN0cmluZyh0aGlzLnBvcywgZW5kKTtcbiAgICB9XG4gICAgaGFzQ2hhcnMobikge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgKyBuIDw9IHRoaXMuYnVmZmVyLmxlbmd0aDtcbiAgICB9XG4gICAgc2V0TmV4dChzdGF0ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YnN0cmluZyh0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgdGhpcy5saW5lRW5kUG9zID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZXh0ID0gc3RhdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwZWVrKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnN1YnN0cih0aGlzLnBvcywgbik7XG4gICAgfVxuICAgICpwYXJzZU5leHQobmV4dCkge1xuICAgICAgICBzd2l0Y2ggKG5leHQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0cmVhbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnBhcnNlU3RyZWFtKCk7XG4gICAgICAgICAgICBjYXNlICdsaW5lLXN0YXJ0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VMaW5lU3RhcnQoKTtcbiAgICAgICAgICAgIGNhc2UgJ2Jsb2NrLXN0YXJ0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VCbG9ja1N0YXJ0KCk7XG4gICAgICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZURvY3VtZW50KCk7XG4gICAgICAgICAgICBjYXNlICdmbG93JzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VGbG93Q29sbGVjdGlvbigpO1xuICAgICAgICAgICAgY2FzZSAncXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnBhcnNlUXVvdGVkU2NhbGFyKCk7XG4gICAgICAgICAgICBjYXNlICdibG9jay1zY2FsYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZUJsb2NrU2NhbGFyKCk7XG4gICAgICAgICAgICBjYXNlICdwbGFpbi1zY2FsYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZVBsYWluU2NhbGFyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnBhcnNlU3RyZWFtKCkge1xuICAgICAgICBsZXQgbGluZSA9IHRoaXMuZ2V0TGluZSgpO1xuICAgICAgICBpZiAobGluZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldE5leHQoJ3N0cmVhbScpO1xuICAgICAgICBpZiAobGluZVswXSA9PT0gQk9NKSB7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQoMSk7XG4gICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmVbMF0gPT09ICclJykge1xuICAgICAgICAgICAgbGV0IGRpckVuZCA9IGxpbmUubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IGNzID0gbGluZS5pbmRleE9mKCcjJyk7XG4gICAgICAgICAgICB3aGlsZSAoY3MgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2ggPSBsaW5lW2NzIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpckVuZCA9IGNzIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjcyA9IGxpbmUuaW5kZXhPZignIycsIGNzICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaCA9IGxpbmVbZGlyRW5kIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHQnKVxuICAgICAgICAgICAgICAgICAgICBkaXJFbmQgLT0gMTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbiA9ICh5aWVsZCogdGhpcy5wdXNoQ291bnQoZGlyRW5kKSkgKyAoeWllbGQqIHRoaXMucHVzaFNwYWNlcyh0cnVlKSk7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQobGluZS5sZW5ndGggLSBuKTsgLy8gcG9zc2libGUgY29tbWVudFxuICAgICAgICAgICAgdGhpcy5wdXNoTmV3bGluZSgpO1xuICAgICAgICAgICAgcmV0dXJuICdzdHJlYW0nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmF0TGluZUVuZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBzcCA9IHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSk7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQobGluZS5sZW5ndGggLSBzcCk7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoTmV3bGluZSgpO1xuICAgICAgICAgICAgcmV0dXJuICdzdHJlYW0nO1xuICAgICAgICB9XG4gICAgICAgIHlpZWxkIERPQ1VNRU5UO1xuICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VMaW5lU3RhcnQoKTtcbiAgICB9XG4gICAgKnBhcnNlTGluZVN0YXJ0KCkge1xuICAgICAgICBjb25zdCBjaCA9IHRoaXMuY2hhckF0KDApO1xuICAgICAgICBpZiAoIWNoICYmICF0aGlzLmF0RW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgnbGluZS1zdGFydCcpO1xuICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJy4nKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYXRFbmQgJiYgIXRoaXMuaGFzQ2hhcnMoNCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgnbGluZS1zdGFydCcpO1xuICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMucGVlaygzKTtcbiAgICAgICAgICAgIGlmICgocyA9PT0gJy0tLScgfHwgcyA9PT0gJy4uLicpICYmIGlzRW1wdHkodGhpcy5jaGFyQXQoMykpKSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaENvdW50KDMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50VmFsdWUgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50TmV4dCA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMgPT09ICctLS0nID8gJ2RvYycgOiAnc3RyZWFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGVudFZhbHVlID0geWllbGQqIHRoaXMucHVzaFNwYWNlcyhmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLmluZGVudE5leHQgPiB0aGlzLmluZGVudFZhbHVlICYmICFpc0VtcHR5KHRoaXMuY2hhckF0KDEpKSlcbiAgICAgICAgICAgIHRoaXMuaW5kZW50TmV4dCA9IHRoaXMuaW5kZW50VmFsdWU7XG4gICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZUJsb2NrU3RhcnQoKTtcbiAgICB9XG4gICAgKnBhcnNlQmxvY2tTdGFydCgpIHtcbiAgICAgICAgY29uc3QgW2NoMCwgY2gxXSA9IHRoaXMucGVlaygyKTtcbiAgICAgICAgaWYgKCFjaDEgJiYgIXRoaXMuYXRFbmQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXROZXh0KCdibG9jay1zdGFydCcpO1xuICAgICAgICBpZiAoKGNoMCA9PT0gJy0nIHx8IGNoMCA9PT0gJz8nIHx8IGNoMCA9PT0gJzonKSAmJiBpc0VtcHR5KGNoMSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSAoeWllbGQqIHRoaXMucHVzaENvdW50KDEpKSArICh5aWVsZCogdGhpcy5wdXNoU3BhY2VzKHRydWUpKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZW50TmV4dCA9IHRoaXMuaW5kZW50VmFsdWUgKyAxO1xuICAgICAgICAgICAgdGhpcy5pbmRlbnRWYWx1ZSArPSBuO1xuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnBhcnNlQmxvY2tTdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnZG9jJztcbiAgICB9XG4gICAgKnBhcnNlRG9jdW1lbnQoKSB7XG4gICAgICAgIHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSk7XG4gICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmdldExpbmUoKTtcbiAgICAgICAgaWYgKGxpbmUgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXROZXh0KCdkb2MnKTtcbiAgICAgICAgbGV0IG4gPSB5aWVsZCogdGhpcy5wdXNoSW5kaWNhdG9ycygpO1xuICAgICAgICBzd2l0Y2ggKGxpbmVbbl0pIHtcbiAgICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hDb3VudChsaW5lLmxlbmd0aCAtIG4pO1xuICAgICAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hOZXdsaW5lKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnBhcnNlTGluZVN0YXJ0KCk7XG4gICAgICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hDb3VudCgxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dLZXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dMZXZlbCA9IDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmbG93JztcbiAgICAgICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgY2FzZSAnXSc6XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBlcnJvclxuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hDb3VudCgxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvYyc7XG4gICAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoVW50aWwoaXNOb3RBbmNob3JDaGFyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvYyc7XG4gICAgICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgICBjYXNlIFwiJ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZVF1b3RlZFNjYWxhcigpO1xuICAgICAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICAgICAgICBuICs9IHlpZWxkKiB0aGlzLnBhcnNlQmxvY2tTY2FsYXJIZWFkZXIoKTtcbiAgICAgICAgICAgICAgICBuICs9IHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaENvdW50KGxpbmUubGVuZ3RoIC0gbik7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaE5ld2xpbmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VCbG9ja1NjYWxhcigpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VQbGFpblNjYWxhcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgICpwYXJzZUZsb3dDb2xsZWN0aW9uKCkge1xuICAgICAgICBsZXQgbmwsIHNwO1xuICAgICAgICBsZXQgaW5kZW50ID0gLTE7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIG5sID0geWllbGQqIHRoaXMucHVzaE5ld2xpbmUoKTtcbiAgICAgICAgICAgIGlmIChubCA+IDApIHtcbiAgICAgICAgICAgICAgICBzcCA9IHlpZWxkKiB0aGlzLnB1c2hTcGFjZXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50VmFsdWUgPSBpbmRlbnQgPSBzcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNwID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwICs9IHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSk7XG4gICAgICAgIH0gd2hpbGUgKG5sICsgc3AgPiAwKTtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuZ2V0TGluZSgpO1xuICAgICAgICBpZiAobGluZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldE5leHQoJ2Zsb3cnKTtcbiAgICAgICAgaWYgKChpbmRlbnQgIT09IC0xICYmIGluZGVudCA8IHRoaXMuaW5kZW50TmV4dCAmJiBsaW5lWzBdICE9PSAnIycpIHx8XG4gICAgICAgICAgICAoaW5kZW50ID09PSAwICYmXG4gICAgICAgICAgICAgICAgKGxpbmUuc3RhcnRzV2l0aCgnLS0tJykgfHwgbGluZS5zdGFydHNXaXRoKCcuLi4nKSkgJiZcbiAgICAgICAgICAgICAgICBpc0VtcHR5KGxpbmVbM10pKSkge1xuICAgICAgICAgICAgLy8gQWxsb3dpbmcgZm9yIHRoZSB0ZXJtaW5hbCBdIG9yIH0gYXQgdGhlIHNhbWUgKHJhdGhlciB0aGFuIGdyZWF0ZXIpXG4gICAgICAgICAgICAvLyBpbmRlbnQgbGV2ZWwgYXMgdGhlIGluaXRpYWwgWyBvciB7IGlzIHRlY2huaWNhbGx5IGludmFsaWQsIGJ1dFxuICAgICAgICAgICAgLy8gZmFpbGluZyBoZXJlIHdvdWxkIGJlIHN1cnByaXNpbmcgdG8gdXNlcnMuXG4gICAgICAgICAgICBjb25zdCBhdEZsb3dFbmRNYXJrZXIgPSBpbmRlbnQgPT09IHRoaXMuaW5kZW50TmV4dCAtIDEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dMZXZlbCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIChsaW5lWzBdID09PSAnXScgfHwgbGluZVswXSA9PT0gJ30nKTtcbiAgICAgICAgICAgIGlmICghYXRGbG93RW5kTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBlcnJvclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvd0xldmVsID0gMDtcbiAgICAgICAgICAgICAgICB5aWVsZCBGTE9XX0VORDtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VMaW5lU3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbiA9IDA7XG4gICAgICAgIHdoaWxlIChsaW5lW25dID09PSAnLCcpIHtcbiAgICAgICAgICAgIG4gKz0geWllbGQqIHRoaXMucHVzaENvdW50KDEpO1xuICAgICAgICAgICAgbiArPSB5aWVsZCogdGhpcy5wdXNoU3BhY2VzKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbiArPSB5aWVsZCogdGhpcy5wdXNoSW5kaWNhdG9ycygpO1xuICAgICAgICBzd2l0Y2ggKGxpbmVbbl0pIHtcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZmxvdyc7XG4gICAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQobGluZS5sZW5ndGggLSBuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Zsb3cnO1xuICAgICAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICBjYXNlICdbJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQoMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5mbG93TGV2ZWwgKz0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Zsb3cnO1xuICAgICAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wdXNoQ291bnQoMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dMZXZlbCAtPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsb3dMZXZlbCA/ICdmbG93JyA6ICdkb2MnO1xuICAgICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaFVudGlsKGlzTm90QW5jaG9yQ2hhcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmbG93JztcbiAgICAgICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VRdW90ZWRTY2FsYXIoKTtcbiAgICAgICAgICAgIGNhc2UgJzonOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuY2hhckF0KDEpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb3dLZXkgfHwgaXNFbXB0eShuZXh0KSB8fCBuZXh0ID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG93S2V5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnB1c2hDb3VudCgxKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucHVzaFNwYWNlcyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdmbG93JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dLZXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucGFyc2VQbGFpblNjYWxhcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgICpwYXJzZVF1b3RlZFNjYWxhcigpIHtcbiAgICAgICAgY29uc3QgcXVvdGUgPSB0aGlzLmNoYXJBdCgwKTtcbiAgICAgICAgbGV0IGVuZCA9IHRoaXMuYnVmZmVyLmluZGV4T2YocXVvdGUsIHRoaXMucG9zICsgMSk7XG4gICAgICAgIGlmIChxdW90ZSA9PT0gXCInXCIpIHtcbiAgICAgICAgICAgIHdoaWxlIChlbmQgIT09IC0xICYmIHRoaXMuYnVmZmVyW2VuZCArIDFdID09PSBcIidcIilcbiAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLmJ1ZmZlci5pbmRleE9mKFwiJ1wiLCBlbmQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRvdWJsZS1xdW90ZVxuICAgICAgICAgICAgd2hpbGUgKGVuZCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgbiA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyW2VuZCAtIDEgLSBuXSA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgICAgICAgICBuICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKG4gJSAyID09PSAwKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLmJ1ZmZlci5pbmRleE9mKCdcIicsIGVuZCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgbG9va2luZyBmb3IgbmV3bGluZXMgd2l0aGluIHRoZSBxdW90ZXNcbiAgICAgICAgY29uc3QgcWIgPSB0aGlzLmJ1ZmZlci5zdWJzdHJpbmcoMCwgZW5kKTtcbiAgICAgICAgbGV0IG5sID0gcWIuaW5kZXhPZignXFxuJywgdGhpcy5wb3MpO1xuICAgICAgICBpZiAobmwgIT09IC0xKSB7XG4gICAgICAgICAgICB3aGlsZSAobmwgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3MgPSB0aGlzLmNvbnRpbnVlU2NhbGFyKG5sICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNzID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgbmwgPSBxYi5pbmRleE9mKCdcXG4nLCBjcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmwgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBlcnJvciBjYXVzZWQgYnkgYW4gdW5leHBlY3RlZCB1bmluZGVudFxuICAgICAgICAgICAgICAgIGVuZCA9IG5sIC0gKHFiW25sIC0gMV0gPT09ICdcXHInID8gMiA6IDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYXRFbmQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgncXVvdGVkLXNjYWxhcicpO1xuICAgICAgICAgICAgZW5kID0gdGhpcy5idWZmZXIubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHlpZWxkKiB0aGlzLnB1c2hUb0luZGV4KGVuZCArIDEsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxvd0xldmVsID8gJ2Zsb3cnIDogJ2RvYyc7XG4gICAgfVxuICAgICpwYXJzZUJsb2NrU2NhbGFySGVhZGVyKCkge1xuICAgICAgICB0aGlzLmJsb2NrU2NhbGFySW5kZW50ID0gLTE7XG4gICAgICAgIHRoaXMuYmxvY2tTY2FsYXJLZWVwID0gZmFsc2U7XG4gICAgICAgIGxldCBpID0gdGhpcy5wb3M7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBjaCA9IHRoaXMuYnVmZmVyWysraV07XG4gICAgICAgICAgICBpZiAoY2ggPT09ICcrJylcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrU2NhbGFyS2VlcCA9IHRydWU7XG4gICAgICAgICAgICBlbHNlIGlmIChjaCA+ICcwJyAmJiBjaCA8PSAnOScpXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja1NjYWxhckluZGVudCA9IE51bWJlcihjaCkgLSAxO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2ggIT09ICctJylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucHVzaFVudGlsKGNoID0+IGlzRW1wdHkoY2gpIHx8IGNoID09PSAnIycpO1xuICAgIH1cbiAgICAqcGFyc2VCbG9ja1NjYWxhcigpIHtcbiAgICAgICAgbGV0IG5sID0gdGhpcy5wb3MgLSAxOyAvLyBtYXkgYmUgLTEgaWYgdGhpcy5wb3MgPT09IDBcbiAgICAgICAgbGV0IGluZGVudCA9IDA7XG4gICAgICAgIGxldCBjaDtcbiAgICAgICAgbG9vcDogZm9yIChsZXQgaSA9IHRoaXMucG9zOyAoY2ggPSB0aGlzLmJ1ZmZlcltpXSk7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgICAgICAgICAgICAgbmwgPSBpO1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdcXHInOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmJ1ZmZlcltpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV4dCAmJiAhdGhpcy5hdEVuZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldE5leHQoJ2Jsb2NrLXNjYWxhcicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IC8vIGZhbGx0aHJvdWdoXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoICYmICF0aGlzLmF0RW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgnYmxvY2stc2NhbGFyJyk7XG4gICAgICAgIGlmIChpbmRlbnQgPj0gdGhpcy5pbmRlbnROZXh0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ibG9ja1NjYWxhckluZGVudCA9PT0gLTEpXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRlbnROZXh0ID0gaW5kZW50O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRlbnROZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9ja1NjYWxhckluZGVudCArICh0aGlzLmluZGVudE5leHQgPT09IDAgPyAxIDogdGhpcy5pbmRlbnROZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcyA9IHRoaXMuY29udGludWVTY2FsYXIobmwgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY3MgPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBubCA9IHRoaXMuYnVmZmVyLmluZGV4T2YoJ1xcbicsIGNzKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKG5sICE9PSAtMSk7XG4gICAgICAgICAgICBpZiAobmwgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF0RW5kKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXROZXh0KCdibG9jay1zY2FsYXInKTtcbiAgICAgICAgICAgICAgICBubCA9IHRoaXMuYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFpbGluZyBpbnN1ZmZpY2llbnRseSBpbmRlbnRlZCB0YWJzIGFyZSBpbnZhbGlkLlxuICAgICAgICAvLyBUbyBjYXRjaCB0aGF0IGR1cmluZyBwYXJzaW5nLCB3ZSBpbmNsdWRlIHRoZW0gaW4gdGhlIGJsb2NrIHNjYWxhciB2YWx1ZS5cbiAgICAgICAgbGV0IGkgPSBubCArIDE7XG4gICAgICAgIGNoID0gdGhpcy5idWZmZXJbaV07XG4gICAgICAgIHdoaWxlIChjaCA9PT0gJyAnKVxuICAgICAgICAgICAgY2ggPSB0aGlzLmJ1ZmZlclsrK2ldO1xuICAgICAgICBpZiAoY2ggPT09ICdcXHQnKSB7XG4gICAgICAgICAgICB3aGlsZSAoY2ggPT09ICdcXHQnIHx8IGNoID09PSAnICcgfHwgY2ggPT09ICdcXHInIHx8IGNoID09PSAnXFxuJylcbiAgICAgICAgICAgICAgICBjaCA9IHRoaXMuYnVmZmVyWysraV07XG4gICAgICAgICAgICBubCA9IGkgLSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmJsb2NrU2NhbGFyS2VlcCkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGxldCBpID0gbmwgLSAxO1xuICAgICAgICAgICAgICAgIGxldCBjaCA9IHRoaXMuYnVmZmVyW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xccicpXG4gICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbLS1pXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2hhciA9IGk7IC8vIERyb3AgdGhlIGxpbmUgaWYgbGFzdCBjaGFyIG5vdCBtb3JlIGluZGVudGVkXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoID09PSAnICcpXG4gICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbLS1pXTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXG4nICYmIGkgPj0gdGhpcy5wb3MgJiYgaSArIDEgKyBpbmRlbnQgPiBsYXN0Q2hhcilcbiAgICAgICAgICAgICAgICAgICAgbmwgPSBpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IHdoaWxlICh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBTQ0FMQVI7XG4gICAgICAgIHlpZWxkKiB0aGlzLnB1c2hUb0luZGV4KG5sICsgMSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wYXJzZUxpbmVTdGFydCgpO1xuICAgIH1cbiAgICAqcGFyc2VQbGFpblNjYWxhcigpIHtcbiAgICAgICAgY29uc3QgaW5GbG93ID0gdGhpcy5mbG93TGV2ZWwgPiAwO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5wb3MgLSAxO1xuICAgICAgICBsZXQgaSA9IHRoaXMucG9zIC0gMTtcbiAgICAgICAgbGV0IGNoO1xuICAgICAgICB3aGlsZSAoKGNoID0gdGhpcy5idWZmZXJbKytpXSkpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJzonKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuYnVmZmVyW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eShuZXh0KSB8fCAoaW5GbG93ICYmIGZsb3dJbmRpY2F0b3JDaGFycy5oYXMobmV4dCkpKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNFbXB0eShjaCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHRoaXMuYnVmZmVyW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSAnXFxuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0aGlzLmJ1ZmZlcltpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQgPT09ICcjJyB8fCAoaW5GbG93ICYmIGZsb3dJbmRpY2F0b3JDaGFycy5oYXMobmV4dCkpKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNzID0gdGhpcy5jb250aW51ZVNjYWxhcihpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcyA9PT0gLTEpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaSA9IE1hdGgubWF4KGksIGNzIC0gMik7IC8vIHRvIGFkdmFuY2UsIGJ1dCBzdGlsbCBhY2NvdW50IGZvciAnICMnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGluRmxvdyAmJiBmbG93SW5kaWNhdG9yQ2hhcnMuaGFzKGNoKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoICYmICF0aGlzLmF0RW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dCgncGxhaW4tc2NhbGFyJyk7XG4gICAgICAgIHlpZWxkIFNDQUxBUjtcbiAgICAgICAgeWllbGQqIHRoaXMucHVzaFRvSW5kZXgoZW5kICsgMSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBpbkZsb3cgPyAnZmxvdycgOiAnZG9jJztcbiAgICB9XG4gICAgKnB1c2hDb3VudChuKSB7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5idWZmZXIuc3Vic3RyKHRoaXMucG9zLCBuKTtcbiAgICAgICAgICAgIHRoaXMucG9zICs9IG47XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgKnB1c2hUb0luZGV4KGksIGFsbG93RW1wdHkpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zLCBpKTtcbiAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgIHlpZWxkIHM7XG4gICAgICAgICAgICB0aGlzLnBvcyArPSBzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbGxvd0VtcHR5KVxuICAgICAgICAgICAgeWllbGQgJyc7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAqcHVzaEluZGljYXRvcnMoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgIGNhc2UgJyEnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoKHlpZWxkKiB0aGlzLnB1c2hUYWcoKSkgK1xuICAgICAgICAgICAgICAgICAgICAoeWllbGQqIHRoaXMucHVzaFNwYWNlcyh0cnVlKSkgK1xuICAgICAgICAgICAgICAgICAgICAoeWllbGQqIHRoaXMucHVzaEluZGljYXRvcnMoKSkpO1xuICAgICAgICAgICAgY2FzZSAnJic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoeWllbGQqIHRoaXMucHVzaFVudGlsKGlzTm90QW5jaG9yQ2hhcikpICtcbiAgICAgICAgICAgICAgICAgICAgKHlpZWxkKiB0aGlzLnB1c2hTcGFjZXModHJ1ZSkpICtcbiAgICAgICAgICAgICAgICAgICAgKHlpZWxkKiB0aGlzLnB1c2hJbmRpY2F0b3JzKCkpKTtcbiAgICAgICAgICAgIGNhc2UgJy0nOiAvLyB0aGlzIGlzIGFuIGVycm9yXG4gICAgICAgICAgICBjYXNlICc/JzogLy8gdGhpcyBpcyBhbiBlcnJvciBvdXRzaWRlIGZsb3cgY29sbGVjdGlvbnNcbiAgICAgICAgICAgIGNhc2UgJzonOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5GbG93ID0gdGhpcy5mbG93TGV2ZWwgPiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoMSA9IHRoaXMuY2hhckF0KDEpO1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KGNoMSkgfHwgKGluRmxvdyAmJiBmbG93SW5kaWNhdG9yQ2hhcnMuaGFzKGNoMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5GbG93KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnROZXh0ID0gdGhpcy5pbmRlbnRWYWx1ZSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZmxvd0tleSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxvd0tleSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCh5aWVsZCogdGhpcy5wdXNoQ291bnQoMSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh5aWVsZCogdGhpcy5wdXNoU3BhY2VzKHRydWUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoeWllbGQqIHRoaXMucHVzaEluZGljYXRvcnMoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgKnB1c2hUYWcoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYXJBdCgxKSA9PT0gJzwnKSB7XG4gICAgICAgICAgICBsZXQgaSA9IHRoaXMucG9zICsgMjtcbiAgICAgICAgICAgIGxldCBjaCA9IHRoaXMuYnVmZmVyW2ldO1xuICAgICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGNoKSAmJiBjaCAhPT0gJz4nKVxuICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbKytpXTtcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wdXNoVG9JbmRleChjaCA9PT0gJz4nID8gaSArIDEgOiBpLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgaSA9IHRoaXMucG9zICsgMTtcbiAgICAgICAgICAgIGxldCBjaCA9IHRoaXMuYnVmZmVyW2ldO1xuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhZ0NoYXJzLmhhcyhjaCkpXG4gICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5idWZmZXJbKytpXTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJyUnICYmXG4gICAgICAgICAgICAgICAgICAgIGhleERpZ2l0cy5oYXModGhpcy5idWZmZXJbaSArIDFdKSAmJlxuICAgICAgICAgICAgICAgICAgICBoZXhEaWdpdHMuaGFzKHRoaXMuYnVmZmVyW2kgKyAyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLmJ1ZmZlclsoaSArPSAzKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucHVzaFRvSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgICpwdXNoTmV3bGluZSgpIHtcbiAgICAgICAgY29uc3QgY2ggPSB0aGlzLmJ1ZmZlclt0aGlzLnBvc107XG4gICAgICAgIGlmIChjaCA9PT0gJ1xcbicpXG4gICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMucHVzaENvdW50KDEpO1xuICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1xccicgJiYgdGhpcy5jaGFyQXQoMSkgPT09ICdcXG4nKVxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnB1c2hDb3VudCgyKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgICpwdXNoU3BhY2VzKGFsbG93VGFicykge1xuICAgICAgICBsZXQgaSA9IHRoaXMucG9zIC0gMTtcbiAgICAgICAgbGV0IGNoO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjaCA9IHRoaXMuYnVmZmVyWysraV07XG4gICAgICAgIH0gd2hpbGUgKGNoID09PSAnICcgfHwgKGFsbG93VGFicyAmJiBjaCA9PT0gJ1xcdCcpKTtcbiAgICAgICAgY29uc3QgbiA9IGkgLSB0aGlzLnBvcztcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MsIG4pO1xuICAgICAgICAgICAgdGhpcy5wb3MgPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuO1xuICAgIH1cbiAgICAqcHVzaFVudGlsKHRlc3QpIHtcbiAgICAgICAgbGV0IGkgPSB0aGlzLnBvcztcbiAgICAgICAgbGV0IGNoID0gdGhpcy5idWZmZXJbaV07XG4gICAgICAgIHdoaWxlICghdGVzdChjaCkpXG4gICAgICAgICAgICBjaCA9IHRoaXMuYnVmZmVyWysraV07XG4gICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5wdXNoVG9JbmRleChpLCBmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBMZXhlciB9O1xuIiwgIi8qKlxuICogVHJhY2tzIG5ld2xpbmVzIGR1cmluZyBwYXJzaW5nIGluIG9yZGVyIHRvIHByb3ZpZGUgYW4gZWZmaWNpZW50IEFQSSBmb3JcbiAqIGRldGVybWluaW5nIHRoZSBvbmUtaW5kZXhlZCBgeyBsaW5lLCBjb2wgfWAgcG9zaXRpb24gZm9yIGFueSBvZmZzZXRcbiAqIHdpdGhpbiB0aGUgaW5wdXQuXG4gKi9cbmNsYXNzIExpbmVDb3VudGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5saW5lU3RhcnRzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTaG91bGQgYmUgY2FsbGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBjYWxsXG4gICAgICAgICAqIGBsaW5lQ291bnRlci5saW5lU3RhcnRzLnNvcnQoKWAgYmVmb3JlIGNhbGxpbmcgYGxpbmVQb3MoKWAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZE5ld0xpbmUgPSAob2Zmc2V0KSA9PiB0aGlzLmxpbmVTdGFydHMucHVzaChvZmZzZXQpO1xuICAgICAgICAvKipcbiAgICAgICAgICogUGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoIGFuZCByZXR1cm5zIHRoZSAxLWluZGV4ZWQgeyBsaW5lLCBjb2wgfVxuICAgICAgICAgKiBwb3NpdGlvbiBvZiBgb2Zmc2V0YC4gSWYgYGxpbmUgPT09IDBgLCBgYWRkTmV3TGluZWAgaGFzIG5ldmVyIGJlZW5cbiAgICAgICAgICogY2FsbGVkIG9yIGBvZmZzZXRgIGlzIGJlZm9yZSB0aGUgZmlyc3Qga25vd24gbmV3bGluZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGluZVBvcyA9IChvZmZzZXQpID0+IHtcbiAgICAgICAgICAgIGxldCBsb3cgPSAwO1xuICAgICAgICAgICAgbGV0IGhpZ2ggPSB0aGlzLmxpbmVTdGFydHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaWQgPSAobG93ICsgaGlnaCkgPj4gMTsgLy8gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmVTdGFydHNbbWlkXSA8IG9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lU3RhcnRzW2xvd10gPT09IG9mZnNldClcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsaW5lOiBsb3cgKyAxLCBjb2w6IDEgfTtcbiAgICAgICAgICAgIGlmIChsb3cgPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogMCwgY29sOiBvZmZzZXQgfTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5saW5lU3RhcnRzW2xvdyAtIDFdO1xuICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogbG93LCBjb2w6IG9mZnNldCAtIHN0YXJ0ICsgMSB9O1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgTGluZUNvdW50ZXIgfTtcbiIsICJpbXBvcnQgeyB0b2tlblR5cGUgfSBmcm9tICcuL2NzdC5qcyc7XG5pbXBvcnQgeyBMZXhlciB9IGZyb20gJy4vbGV4ZXIuanMnO1xuXG5mdW5jdGlvbiBpbmNsdWRlc1Rva2VuKGxpc3QsIHR5cGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChsaXN0W2ldLnR5cGUgPT09IHR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBmaW5kTm9uRW1wdHlJbmRleChsaXN0KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHN3aXRjaCAobGlzdFtpXS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ25ld2xpbmUnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5mdW5jdGlvbiBpc0Zsb3dUb2tlbih0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4/LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgY2FzZSAnZmxvdy1jb2xsZWN0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFByZXZQcm9wcyhwYXJlbnQpIHtcbiAgICBzd2l0Y2ggKHBhcmVudC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2RvY3VtZW50JzpcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuc3RhcnQ7XG4gICAgICAgIGNhc2UgJ2Jsb2NrLW1hcCc6IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ID0gcGFyZW50Lml0ZW1zW3BhcmVudC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHJldHVybiBpdC5zZXAgPz8gaXQuc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnYmxvY2stc2VxJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuaXRlbXNbcGFyZW50Lml0ZW1zLmxlbmd0aCAtIDFdLnN0YXJ0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbi8qKiBOb3RlOiBNYXkgbW9kaWZ5IGlucHV0IGFycmF5ICovXG5mdW5jdGlvbiBnZXRGaXJzdEtleVN0YXJ0UHJvcHMocHJldikge1xuICAgIGlmIChwcmV2Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIGxldCBpID0gcHJldi5sZW5ndGg7XG4gICAgbG9vcDogd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgICAgIHN3aXRjaCAocHJldltpXS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdkb2Mtc3RhcnQnOlxuICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6XG4gICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ3NlcS1pdGVtLWluZCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlIChwcmV2WysraV0/LnR5cGUgPT09ICdzcGFjZScpIHtcbiAgICAgICAgLyogbG9vcCAqL1xuICAgIH1cbiAgICByZXR1cm4gcHJldi5zcGxpY2UoaSwgcHJldi5sZW5ndGgpO1xufVxuZnVuY3Rpb24gZml4Rmxvd1NlcUl0ZW1zKGZjKSB7XG4gICAgaWYgKGZjLnN0YXJ0LnR5cGUgPT09ICdmbG93LXNlcS1zdGFydCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBmYy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGl0LnNlcCAmJlxuICAgICAgICAgICAgICAgICFpdC52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICFpbmNsdWRlc1Rva2VuKGl0LnN0YXJ0LCAnZXhwbGljaXQta2V5LWluZCcpICYmXG4gICAgICAgICAgICAgICAgIWluY2x1ZGVzVG9rZW4oaXQuc2VwLCAnbWFwLXZhbHVlLWluZCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0LmtleSlcbiAgICAgICAgICAgICAgICAgICAgaXQudmFsdWUgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0LmtleTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGbG93VG9rZW4oaXQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZS5lbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpdC52YWx1ZS5lbmQsIGl0LnNlcCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlLmVuZCA9IGl0LnNlcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpdC5zdGFydCwgaXQuc2VwKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXQuc2VwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBBIFlBTUwgY29uY3JldGUgc3ludGF4IHRyZWUgKENTVCkgcGFyc2VyXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHNyYzogc3RyaW5nID0gLi4uXG4gKiBmb3IgKGNvbnN0IHRva2VuIG9mIG5ldyBQYXJzZXIoKS5wYXJzZShzcmMpKSB7XG4gKiAgIC8vIHRva2VuOiBUb2tlblxuICogfVxuICogYGBgXG4gKlxuICogVG8gdXNlIHRoZSBwYXJzZXIgd2l0aCBhIHVzZXItcHJvdmlkZWQgbGV4ZXI6XG4gKlxuICogYGBgdHNcbiAqIGZ1bmN0aW9uKiBwYXJzZShzb3VyY2U6IHN0cmluZywgbGV4ZXI6IExleGVyKSB7XG4gKiAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICogICBmb3IgKGNvbnN0IGxleGVtZSBvZiBsZXhlci5sZXgoc291cmNlKSlcbiAqICAgICB5aWVsZCogcGFyc2VyLm5leHQobGV4ZW1lKVxuICogICB5aWVsZCogcGFyc2VyLmVuZCgpXG4gKiB9XG4gKlxuICogY29uc3Qgc3JjOiBzdHJpbmcgPSAuLi5cbiAqIGNvbnN0IGxleGVyID0gbmV3IExleGVyKClcbiAqIGZvciAoY29uc3QgdG9rZW4gb2YgcGFyc2Uoc3JjLCBsZXhlcikpIHtcbiAqICAgLy8gdG9rZW46IFRva2VuXG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgUGFyc2VyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gb25OZXdMaW5lIC0gSWYgZGVmaW5lZCwgY2FsbGVkIHNlcGFyYXRlbHkgd2l0aCB0aGUgc3RhcnQgcG9zaXRpb24gb2ZcbiAgICAgKiAgIGVhY2ggbmV3IGxpbmUgKGluIGBwYXJzZSgpYCwgaW5jbHVkaW5nIHRoZSBzdGFydCBvZiBpbnB1dCkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob25OZXdMaW5lKSB7XG4gICAgICAgIC8qKiBJZiB0cnVlLCBzcGFjZSBhbmQgc2VxdWVuY2UgaW5kaWNhdG9ycyBjb3VudCBhcyBpbmRlbnRhdGlvbiAqL1xuICAgICAgICB0aGlzLmF0TmV3TGluZSA9IHRydWU7XG4gICAgICAgIC8qKiBJZiB0cnVlLCBuZXh0IHRva2VuIGlzIGEgc2NhbGFyIHZhbHVlICovXG4gICAgICAgIHRoaXMuYXRTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgLyoqIEN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgKi9cbiAgICAgICAgdGhpcy5pbmRlbnQgPSAwO1xuICAgICAgICAvKiogQ3VycmVudCBvZmZzZXQgc2luY2UgdGhlIHN0YXJ0IG9mIHBhcnNpbmcgKi9cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICAvKiogT24gdGhlIHNhbWUgbGluZSB3aXRoIGEgYmxvY2sgbWFwIGtleSAqL1xuICAgICAgICB0aGlzLm9uS2V5TGluZSA9IGZhbHNlO1xuICAgICAgICAvKiogVG9wIGluZGljYXRlcyB0aGUgbm9kZSB0aGF0J3MgY3VycmVudGx5IGJlaW5nIGJ1aWx0ICovXG4gICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgLyoqIFRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdG9rZW4sIHNldCBpbiBwYXJzZSgpICovXG4gICAgICAgIHRoaXMuc291cmNlID0gJyc7XG4gICAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCB0b2tlbiwgc2V0IGluIHBhcnNlKCkgKi9cbiAgICAgICAgdGhpcy50eXBlID0gJyc7XG4gICAgICAgIC8vIE11c3QgYmUgZGVmaW5lZCBhZnRlciBgbmV4dCgpYFxuICAgICAgICB0aGlzLmxleGVyID0gbmV3IExleGVyKCk7XG4gICAgICAgIHRoaXMub25OZXdMaW5lID0gb25OZXdMaW5lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBgc291cmNlYCBhcyBhIFlBTUwgc3RyZWFtLlxuICAgICAqIElmIGBpbmNvbXBsZXRlYCwgYSBwYXJ0IG9mIHRoZSBsYXN0IGxpbmUgbWF5IGJlIGxlZnQgYXMgYSBidWZmZXIgZm9yIHRoZSBuZXh0IGNhbGwuXG4gICAgICpcbiAgICAgKiBFcnJvcnMgYXJlIG5vdCB0aHJvd24sIGJ1dCB5aWVsZGVkIGFzIGB7IHR5cGU6ICdlcnJvcicsIG1lc3NhZ2UgfWAgdG9rZW5zLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBnZW5lcmF0b3Igb2YgdG9rZW5zIHJlcHJlc2VudGluZyBlYWNoIGRpcmVjdGl2ZSwgZG9jdW1lbnQsIGFuZCBvdGhlciBzdHJ1Y3R1cmUuXG4gICAgICovXG4gICAgKnBhcnNlKHNvdXJjZSwgaW5jb21wbGV0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSAmJiB0aGlzLm9mZnNldCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMub25OZXdMaW5lKDApO1xuICAgICAgICBmb3IgKGNvbnN0IGxleGVtZSBvZiB0aGlzLmxleGVyLmxleChzb3VyY2UsIGluY29tcGxldGUpKVxuICAgICAgICAgICAgeWllbGQqIHRoaXMubmV4dChsZXhlbWUpO1xuICAgICAgICBpZiAoIWluY29tcGxldGUpXG4gICAgICAgICAgICB5aWVsZCogdGhpcy5lbmQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWR2YW5jZSB0aGUgcGFyc2VyIGJ5IHRoZSBgc291cmNlYCBvZiBvbmUgbGV4aWNhbCB0b2tlbi5cbiAgICAgKi9cbiAgICAqbmV4dChzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIGlmICh0aGlzLmF0U2NhbGFyKSB7XG4gICAgICAgICAgICB0aGlzLmF0U2NhbGFyID0gZmFsc2U7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0b2tlblR5cGUoc291cmNlKTtcbiAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYE5vdCBhIFlBTUwgdG9rZW46ICR7c291cmNlfWA7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoeyB0eXBlOiAnZXJyb3InLCBvZmZzZXQ6IHRoaXMub2Zmc2V0LCBtZXNzYWdlLCBzb3VyY2UgfSk7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzY2FsYXInKSB7XG4gICAgICAgICAgICB0aGlzLmF0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hdFNjYWxhciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSAnc2NhbGFyJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0ICsgc291cmNlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXROZXdMaW5lICYmIHNvdXJjZVswXSA9PT0gJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgKz0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbWFwLXZhbHVlLWluZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VxLWl0ZW0taW5kJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXROZXdMaW5lKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgKz0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZG9jLW1vZGUnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb3ctZXJyb3ItZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9mZnNldCArPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBDYWxsIGF0IGVuZCBvZiBpbnB1dCB0byBwdXNoIG91dCBhbnkgcmVtYWluaW5nIGNvbnN0cnVjdGlvbnMgKi9cbiAgICAqZW5kKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5zdGFjay5sZW5ndGggPiAwKVxuICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgfVxuICAgIGdldCBzb3VyY2VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc3QgPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN0O1xuICAgIH1cbiAgICAqc3RlcCgpIHtcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5wZWVrKDEpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZG9jLWVuZCcgJiYgKCF0b3AgfHwgdG9wLnR5cGUgIT09ICdkb2MtZW5kJykpIHtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YWNrLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdkb2MtZW5kJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdG9wKVxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLnN0cmVhbSgpO1xuICAgICAgICBzd2l0Y2ggKHRvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdkb2N1bWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLmRvY3VtZW50KHRvcCk7XG4gICAgICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgY2FzZSAnc2luZ2xlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgY2FzZSAnZG91YmxlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5zY2FsYXIodG9wKTtcbiAgICAgICAgICAgIGNhc2UgJ2Jsb2NrLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiB0aGlzLmJsb2NrU2NhbGFyKHRvcCk7XG4gICAgICAgICAgICBjYXNlICdibG9jay1tYXAnOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5ibG9ja01hcCh0b3ApO1xuICAgICAgICAgICAgY2FzZSAnYmxvY2stc2VxJzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMuYmxvY2tTZXF1ZW5jZSh0b3ApO1xuICAgICAgICAgICAgY2FzZSAnZmxvdy1jb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMuZmxvd0NvbGxlY3Rpb24odG9wKTtcbiAgICAgICAgICAgIGNhc2UgJ2RvYy1lbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB5aWVsZCogdGhpcy5kb2N1bWVudEVuZCh0b3ApO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IHNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgIH1cbiAgICBwZWVrKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSBuXTtcbiAgICB9XG4gICAgKnBvcChlcnJvcikge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGVycm9yID8/IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ1RyaWVkIHRvIHBvcCBhbiBlbXB0eSBzdGFjayc7XG4gICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICdlcnJvcicsIG9mZnNldDogdGhpcy5vZmZzZXQsIHNvdXJjZTogJycsIG1lc3NhZ2UgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSB0aGlzLnBlZWsoMSk7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2Jsb2NrLXNjYWxhcicpIHtcbiAgICAgICAgICAgICAgICAvLyBCbG9jayBzY2FsYXJzIHVzZSB0aGVpciBwYXJlbnQgcmF0aGVyIHRoYW4gaGVhZGVyIGluZGVudFxuICAgICAgICAgICAgICAgIHRva2VuLmluZGVudCA9ICdpbmRlbnQnIGluIHRvcCA/IHRvcC5pbmRlbnQgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gJ2Zsb3ctY29sbGVjdGlvbicgJiYgdG9wLnR5cGUgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYWxsIGluZGVudCBmb3IgdG9wLWxldmVsIGZsb3cgY29sbGVjdGlvbnNcbiAgICAgICAgICAgICAgICB0b2tlbi5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdmbG93LWNvbGxlY3Rpb24nKVxuICAgICAgICAgICAgICAgIGZpeEZsb3dTZXFJdGVtcyh0b2tlbik7XG4gICAgICAgICAgICBzd2l0Y2ggKHRvcC50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZG9jdW1lbnQnOlxuICAgICAgICAgICAgICAgICAgICB0b3AudmFsdWUgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnYmxvY2stc2NhbGFyJzpcbiAgICAgICAgICAgICAgICAgICAgdG9wLnByb3BzLnB1c2godG9rZW4pOyAvLyBlcnJvclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdibG9jay1tYXAnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ID0gdG9wLml0ZW1zW3RvcC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AuaXRlbXMucHVzaCh7IHN0YXJ0OiBbXSwga2V5OiB0b2tlbiwgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdC5zZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0LCB7IGtleTogdG9rZW4sIHNlcDogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9ICFpdC5leHBsaWNpdEtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnYmxvY2stc2VxJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdCA9IHRvcC5pdGVtc1t0b3AuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5pdGVtcy5wdXNoKHsgc3RhcnQ6IFtdLCB2YWx1ZTogdG9rZW4gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdmbG93LWNvbGxlY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ID0gdG9wLml0ZW1zW3RvcC5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdCB8fCBpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5pdGVtcy5wdXNoKHsgc3RhcnQ6IFtdLCBrZXk6IHRva2VuLCBzZXA6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdC5zZXApXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC52YWx1ZSA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0LCB7IGtleTogdG9rZW4sIHNlcDogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgc2hvdWxkIG5vdCBoYXBwZW4gKi9cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodG9wLnR5cGUgPT09ICdkb2N1bWVudCcgfHxcbiAgICAgICAgICAgICAgICB0b3AudHlwZSA9PT0gJ2Jsb2NrLW1hcCcgfHxcbiAgICAgICAgICAgICAgICB0b3AudHlwZSA9PT0gJ2Jsb2NrLXNlcScpICYmXG4gICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09ICdibG9jay1tYXAnIHx8IHRva2VuLnR5cGUgPT09ICdibG9jay1zZXEnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSB0b2tlbi5pdGVtc1t0b2tlbi5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAmJlxuICAgICAgICAgICAgICAgICAgICAhbGFzdC5zZXAgJiZcbiAgICAgICAgICAgICAgICAgICAgIWxhc3QudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgbGFzdC5zdGFydC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbmROb25FbXB0eUluZGV4KGxhc3Quc3RhcnQpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAodG9rZW4uaW5kZW50ID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0LnN0YXJ0LmV2ZXJ5KHN0ID0+IHN0LnR5cGUgIT09ICdjb21tZW50JyB8fCBzdC5pbmRlbnQgPCB0b2tlbi5pbmRlbnQpKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9wLnR5cGUgPT09ICdkb2N1bWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AuZW5kID0gbGFzdC5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wLml0ZW1zLnB1c2goeyBzdGFydDogbGFzdC5zdGFydCB9KTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uaXRlbXMuc3BsaWNlKC0xLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnN0cmVhbSgpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RpcmVjdGl2ZS1saW5lJzpcbiAgICAgICAgICAgICAgICB5aWVsZCB7IHR5cGU6ICdkaXJlY3RpdmUnLCBvZmZzZXQ6IHRoaXMub2Zmc2V0LCBzb3VyY2U6IHRoaXMuc291cmNlIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAnYnl0ZS1vcmRlci1tYXJrJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgeWllbGQgdGhpcy5zb3VyY2VUb2tlbjtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdkb2MtbW9kZSc6XG4gICAgICAgICAgICBjYXNlICdkb2Mtc3RhcnQnOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9jID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdkb2Mtc3RhcnQnKVxuICAgICAgICAgICAgICAgICAgICBkb2Muc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZG9jKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCAke3RoaXMudHlwZX0gdG9rZW4gaW4gWUFNTCBzdHJlYW1gLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZVxuICAgICAgICB9O1xuICAgIH1cbiAgICAqZG9jdW1lbnQoZG9jKSB7XG4gICAgICAgIGlmIChkb2MudmFsdWUpXG4gICAgICAgICAgICByZXR1cm4geWllbGQqIHRoaXMubGluZUVuZChkb2MpO1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZG9jLXN0YXJ0Jzoge1xuICAgICAgICAgICAgICAgIGlmIChmaW5kTm9uRW1wdHlJbmRleChkb2Muc3RhcnQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGRvYy5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FuY2hvcic6XG4gICAgICAgICAgICBjYXNlICd0YWcnOlxuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBkb2Muc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnYgPSB0aGlzLnN0YXJ0QmxvY2tWYWx1ZShkb2MpO1xuICAgICAgICBpZiAoYnYpXG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goYnYpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgJHt0aGlzLnR5cGV9IHRva2VuIGluIFlBTUwgZG9jdW1lbnRgLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnNjYWxhcihzY2FsYXIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ21hcC12YWx1ZS1pbmQnKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gZ2V0UHJldlByb3BzKHRoaXMucGVlaygyKSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IGdldEZpcnN0S2V5U3RhcnRQcm9wcyhwcmV2KTtcbiAgICAgICAgICAgIGxldCBzZXA7XG4gICAgICAgICAgICBpZiAoc2NhbGFyLmVuZCkge1xuICAgICAgICAgICAgICAgIHNlcCA9IHNjYWxhci5lbmQ7XG4gICAgICAgICAgICAgICAgc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNjYWxhci5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VwID0gW3RoaXMuc291cmNlVG9rZW5dO1xuICAgICAgICAgICAgY29uc3QgbWFwID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogc2NhbGFyLm9mZnNldCxcbiAgICAgICAgICAgICAgICBpbmRlbnQ6IHNjYWxhci5pbmRlbnQsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0LCBrZXk6IHNjYWxhciwgc2VwIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdID0gbWFwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHlpZWxkKiB0aGlzLmxpbmVFbmQoc2NhbGFyKTtcbiAgICB9XG4gICAgKmJsb2NrU2NhbGFyKHNjYWxhcikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBzY2FsYXIucHJvcHMucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdzY2FsYXInOlxuICAgICAgICAgICAgICAgIHNjYWxhci5zb3VyY2UgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAvLyBibG9jay1zY2FsYXIgc291cmNlIGluY2x1ZGVzIHRyYWlsaW5nIG5ld2xpbmVcbiAgICAgICAgICAgICAgICB0aGlzLmF0TmV3TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uTmV3TGluZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmwgPSB0aGlzLnNvdXJjZS5pbmRleE9mKCdcXG4nKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChubCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5ld0xpbmUodGhpcy5vZmZzZXQgKyBubCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBubCA9IHRoaXMuc291cmNlLmluZGV4T2YoJ1xcbicsIG5sKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBzaG91bGQgbm90IGhhcHBlbiAqL1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKmJsb2NrTWFwKG1hcCkge1xuICAgICAgICBjb25zdCBpdCA9IG1hcC5pdGVtc1ttYXAuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIGl0LnNlcCBpcyB0cnVlLWlzaCBpZiBwYWlyIGFscmVhZHkgaGFzIGtleSBvciA6IHNlcGFyYXRvclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gJ2VuZCcgaW4gaXQudmFsdWUgPyBpdC52YWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBBcnJheS5pc0FycmF5KGVuZCkgPyBlbmRbZW5kLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdD8udHlwZSA9PT0gJ2NvbW1lbnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kPy5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgIGlmIChpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0SW5kZW50ZWRDb21tZW50KGl0LnN0YXJ0LCBtYXAuaW5kZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IG1hcC5pdGVtc1ttYXAuaXRlbXMubGVuZ3RoIC0gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBwcmV2Py52YWx1ZT8uZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW5kKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGVuZCwgaXQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGVudCA+PSBtYXAuaW5kZW50KSB7XG4gICAgICAgICAgICBjb25zdCBhdE1hcEluZGVudCA9ICF0aGlzLm9uS2V5TGluZSAmJiB0aGlzLmluZGVudCA9PT0gbWFwLmluZGVudDtcbiAgICAgICAgICAgIGNvbnN0IGF0TmV4dEl0ZW0gPSBhdE1hcEluZGVudCAmJlxuICAgICAgICAgICAgICAgIChpdC5zZXAgfHwgaXQuZXhwbGljaXRLZXkpICYmXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlICE9PSAnc2VxLWl0ZW0taW5kJztcbiAgICAgICAgICAgIC8vIEZvciBlbXB0eSBub2RlcywgYXNzaWduIG5ld2xpbmUtc2VwYXJhdGVkIG5vdCBpbmRlbnRlZCBlbXB0eSB0b2tlbnMgdG8gZm9sbG93aW5nIG5vZGVcbiAgICAgICAgICAgIGxldCBzdGFydCA9IFtdO1xuICAgICAgICAgICAgaWYgKGF0TmV4dEl0ZW0gJiYgaXQuc2VwICYmICFpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5sID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdC5zZXAubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3QgPSBpdC5zZXBbaV07XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmwucHVzaChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdC5pbmRlbnQgPiBtYXAuaW5kZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubC5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBubC5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChubC5sZW5ndGggPj0gMilcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpdC5zZXAuc3BsaWNlKG5sWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYW5jaG9yJzpcbiAgICAgICAgICAgICAgICBjYXNlICd0YWcnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoYXROZXh0SXRlbSB8fCBpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQuc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2V4cGxpY2l0LWtleS1pbmQnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0LnNlcCAmJiAhaXQuZXhwbGljaXRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5leHBsaWNpdEtleSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXROZXh0SXRlbSB8fCBpdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQsIGV4cGxpY2l0S2V5OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYmxvY2stbWFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0sIGV4cGxpY2l0S2V5OiB0cnVlIH1dXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlc1Rva2VuKGl0LnN0YXJ0LCAnbmV3bGluZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXQsIHsga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKGl0LnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQsIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0OiBbXSwga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluY2x1ZGVzVG9rZW4oaXQuc2VwLCAnbWFwLXZhbHVlLWluZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwga2V5OiBudWxsLCBzZXA6IFt0aGlzLnNvdXJjZVRva2VuXSB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG93VG9rZW4oaXQua2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbmNsdWRlc1Rva2VuKGl0LnNlcCwgJ25ld2xpbmUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKGl0LnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBpdC5rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwID0gaXQuc2VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZSBndWFyZCBpcyB3cm9uZyBoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0LmtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGUgZ3VhcmQgaXMgd3JvbmcgaGVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdC5zZXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwga2V5LCBzZXAgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYWN0dWFsbHkgYXQgbmV4dCBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc2VwID0gaXQuc2VwLmNvbmNhdChzdGFydCwgdGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXQuc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdCwgeyBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQudmFsdWUgfHwgYXROZXh0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQsIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmNsdWRlc1Rva2VuKGl0LnNlcCwgJ21hcC12YWx1ZS1pbmQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQ6IFtdLCBrZXk6IG51bGwsIHNlcDogW3RoaXMuc291cmNlVG9rZW5dIH1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdhbGlhcyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICdzaW5nbGUtcXVvdGVkLXNjYWxhcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnZG91YmxlLXF1b3RlZC1zY2FsYXInOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZzID0gdGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdE5leHRJdGVtIHx8IGl0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAuaXRlbXMucHVzaCh7IHN0YXJ0LCBrZXk6IGZzLCBzZXA6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbktleUxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXQsIHsga2V5OiBmcywgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnYgPSB0aGlzLnN0YXJ0QmxvY2tWYWx1ZShtYXApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdE1hcEluZGVudCAmJiBidi50eXBlICE9PSAnYmxvY2stc2VxJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5pdGVtcy5wdXNoKHsgc3RhcnQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goYnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgfVxuICAgICpibG9ja1NlcXVlbmNlKHNlcSkge1xuICAgICAgICBjb25zdCBpdCA9IHNlcS5pdGVtc1tzZXEuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gJ2VuZCcgaW4gaXQudmFsdWUgPyBpdC52YWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBBcnJheS5pc0FycmF5KGVuZCkgPyBlbmRbZW5kLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdD8udHlwZSA9PT0gJ2NvbW1lbnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kPy5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXEuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHNlcS5pdGVtcy5wdXNoKHsgc3RhcnQ6IFt0aGlzLnNvdXJjZVRva2VuXSB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXRJbmRlbnRlZENvbW1lbnQoaXQuc3RhcnQsIHNlcS5pbmRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gc2VxLml0ZW1zW3NlcS5pdGVtcy5sZW5ndGggLSAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IHByZXY/LnZhbHVlPy5lbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW5kLCBpdC5zdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxLml0ZW1zLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpdC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdhbmNob3InOlxuICAgICAgICAgICAgY2FzZSAndGFnJzpcbiAgICAgICAgICAgICAgICBpZiAoaXQudmFsdWUgfHwgdGhpcy5pbmRlbnQgPD0gc2VxLmluZGVudClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdzZXEtaXRlbS1pbmQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGVudCAhPT0gc2VxLmluZGVudClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgaWYgKGl0LnZhbHVlIHx8IGluY2x1ZGVzVG9rZW4oaXQuc3RhcnQsICdzZXEtaXRlbS1pbmQnKSlcbiAgICAgICAgICAgICAgICAgICAgc2VxLml0ZW1zLnB1c2goeyBzdGFydDogW3RoaXMuc291cmNlVG9rZW5dIH0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5kZW50ID4gc2VxLmluZGVudCkge1xuICAgICAgICAgICAgY29uc3QgYnYgPSB0aGlzLnN0YXJ0QmxvY2tWYWx1ZShzZXEpO1xuICAgICAgICAgICAgaWYgKGJ2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGJ2KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgIHlpZWxkKiB0aGlzLnN0ZXAoKTtcbiAgICB9XG4gICAgKmZsb3dDb2xsZWN0aW9uKGZjKSB7XG4gICAgICAgIGNvbnN0IGl0ID0gZmMuaXRlbXNbZmMuaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdmbG93LWVycm9yLWVuZCcpIHtcbiAgICAgICAgICAgIGxldCB0b3A7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgdG9wID0gdGhpcy5wZWVrKDEpO1xuICAgICAgICAgICAgfSB3aGlsZSAodG9wICYmIHRvcC50eXBlID09PSAnZmxvdy1jb2xsZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmMuZW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjb21tYSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXQgfHwgaXQuc2VwKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmMuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdCB8fCBpdC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjLml0ZW1zLnB1c2goeyBzdGFydDogW10sIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0LCB7IGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3bGluZSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnYW5jaG9yJzpcbiAgICAgICAgICAgICAgICBjYXNlICd0YWcnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0IHx8IGl0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmMuaXRlbXMucHVzaCh7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0LnNlcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0LnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnc2luZ2xlLXF1b3RlZC1zY2FsYXInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcyA9IHRoaXMuZmxvd1NjYWxhcih0aGlzLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0IHx8IGl0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmMuaXRlbXMucHVzaCh7IHN0YXJ0OiBbXSwga2V5OiBmcywgc2VwOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXQuc2VwKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZzKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdCwgeyBrZXk6IGZzLCBzZXA6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb3ctbWFwLWVuZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmxvdy1zZXEtZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgZmMuZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ2ID0gdGhpcy5zdGFydEJsb2NrVmFsdWUoZmMpO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2Ugc2hvdWxkIG5vdCBoYXBwZW4gKi9cbiAgICAgICAgICAgIGlmIChidilcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goYnYpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5wZWVrKDIpO1xuICAgICAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAnYmxvY2stbWFwJyAmJlxuICAgICAgICAgICAgICAgICgodGhpcy50eXBlID09PSAnbWFwLXZhbHVlLWluZCcgJiYgcGFyZW50LmluZGVudCA9PT0gZmMuaW5kZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy50eXBlID09PSAnbmV3bGluZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFwYXJlbnQuaXRlbXNbcGFyZW50Lml0ZW1zLmxlbmd0aCAtIDFdLnNlcCkpKSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMucG9wKCk7XG4gICAgICAgICAgICAgICAgeWllbGQqIHRoaXMuc3RlcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50eXBlID09PSAnbWFwLXZhbHVlLWluZCcgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQudHlwZSAhPT0gJ2Zsb3ctY29sbGVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gZ2V0UHJldlByb3BzKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBnZXRGaXJzdEtleVN0YXJ0UHJvcHMocHJldik7XG4gICAgICAgICAgICAgICAgZml4Rmxvd1NlcUl0ZW1zKGZjKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXAgPSBmYy5lbmQuc3BsaWNlKDEsIGZjLmVuZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogZmMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IGZjLmluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0LCBrZXk6IGZjLCBzZXAgfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub25LZXlMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV0gPSBtYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5saW5lRW5kKGZjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmbG93U2NhbGFyKHR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMub25OZXdMaW5lKSB7XG4gICAgICAgICAgICBsZXQgbmwgPSB0aGlzLnNvdXJjZS5pbmRleE9mKCdcXG4nKSArIDE7XG4gICAgICAgICAgICB3aGlsZSAobmwgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTmV3TGluZSh0aGlzLm9mZnNldCArIG5sKTtcbiAgICAgICAgICAgICAgICBubCA9IHRoaXMuc291cmNlLmluZGV4T2YoJ1xcbicsIG5sKSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhcnRCbG9ja1ZhbHVlKHBhcmVudCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYWxpYXMnOlxuICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzpcbiAgICAgICAgICAgIGNhc2UgJ3NpbmdsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZS1xdW90ZWQtc2NhbGFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7XG4gICAgICAgICAgICBjYXNlICdibG9jay1zY2FsYXItaGVhZGVyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYmxvY2stc2NhbGFyJyxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFt0aGlzLnNvdXJjZVRva2VuXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdmbG93LW1hcC1zdGFydCc6XG4gICAgICAgICAgICBjYXNlICdmbG93LXNlcS1zdGFydCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Zsb3ctY29sbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnNvdXJjZVRva2VuLFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnc2VxLWl0ZW0taW5kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYmxvY2stc2VxJyxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50OiB0aGlzLmluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFt7IHN0YXJ0OiBbdGhpcy5zb3VyY2VUb2tlbl0gfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZXhwbGljaXQta2V5LWluZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGdldFByZXZQcm9wcyhwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKHByZXYpO1xuICAgICAgICAgICAgICAgIHN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudDogdGhpcy5pbmRlbnQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbeyBzdGFydCwgZXhwbGljaXRLZXk6IHRydWUgfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWFwLXZhbHVlLWluZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGdldFByZXZQcm9wcyhwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0Rmlyc3RLZXlTdGFydFByb3BzKHByZXYpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdibG9jay1tYXAnLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogW3sgc3RhcnQsIGtleTogbnVsbCwgc2VwOiBbdGhpcy5zb3VyY2VUb2tlbl0gfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBhdEluZGVudGVkQ29tbWVudChzdGFydCwgaW5kZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdjb21tZW50JylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaW5kZW50IDw9IGluZGVudClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0LmV2ZXJ5KHN0ID0+IHN0LnR5cGUgPT09ICduZXdsaW5lJyB8fCBzdC50eXBlID09PSAnc3BhY2UnKTtcbiAgICB9XG4gICAgKmRvY3VtZW50RW5kKGRvY0VuZCkge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnZG9jLW1vZGUnKSB7XG4gICAgICAgICAgICBpZiAoZG9jRW5kLmVuZClcbiAgICAgICAgICAgICAgICBkb2NFbmQuZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9jRW5kLmVuZCA9IFt0aGlzLnNvdXJjZVRva2VuXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICduZXdsaW5lJylcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAqbGluZUVuZCh0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY29tbWEnOlxuICAgICAgICAgICAgY2FzZSAnZG9jLXN0YXJ0JzpcbiAgICAgICAgICAgIGNhc2UgJ2RvYy1lbmQnOlxuICAgICAgICAgICAgY2FzZSAnZmxvdy1zZXEtZW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ2Zsb3ctbWFwLWVuZCc6XG4gICAgICAgICAgICBjYXNlICdtYXAtdmFsdWUtaW5kJzpcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5wb3AoKTtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5zdGVwKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduZXdsaW5lJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgdmFsdWVzIGFyZSBlcnJvcnNcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4uZW5kKVxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5lbmQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLmVuZCA9IFt0aGlzLnNvdXJjZVRva2VuXTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbmV3bGluZScpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBQYXJzZXIgfTtcbiIsICJpbXBvcnQgeyBDb21wb3NlciB9IGZyb20gJy4vY29tcG9zZS9jb21wb3Nlci5qcyc7XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJy4vZG9jL0RvY3VtZW50LmpzJztcbmltcG9ydCB7IHByZXR0aWZ5RXJyb3IsIFlBTUxQYXJzZUVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgd2FybiB9IGZyb20gJy4vbG9nLmpzJztcbmltcG9ydCB7IGlzRG9jdW1lbnQgfSBmcm9tICcuL25vZGVzL2lkZW50aXR5LmpzJztcbmltcG9ydCB7IExpbmVDb3VudGVyIH0gZnJvbSAnLi9wYXJzZS9saW5lLWNvdW50ZXIuanMnO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnLi9wYXJzZS9wYXJzZXIuanMnO1xuXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IHByZXR0eUVycm9ycyA9IG9wdGlvbnMucHJldHR5RXJyb3JzICE9PSBmYWxzZTtcbiAgICBjb25zdCBsaW5lQ291bnRlciA9IG9wdGlvbnMubGluZUNvdW50ZXIgfHwgKHByZXR0eUVycm9ycyAmJiBuZXcgTGluZUNvdW50ZXIoKSkgfHwgbnVsbDtcbiAgICByZXR1cm4geyBsaW5lQ291bnRlciwgcHJldHR5RXJyb3JzIH07XG59XG4vKipcbiAqIFBhcnNlIHRoZSBpbnB1dCBhcyBhIHN0cmVhbSBvZiBZQU1MIGRvY3VtZW50cy5cbiAqXG4gKiBEb2N1bWVudHMgc2hvdWxkIGJlIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgYC4uLmAgb3IgYC0tLWAgbWFya2VyIGxpbmVzLlxuICpcbiAqIEByZXR1cm5zIElmIGFuIGVtcHR5IGBkb2NzYCBhcnJheSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBvZiB0eXBlXG4gKiAgIEVtcHR5U3RyZWFtIGFuZCBjb250YWluIGFkZGl0aW9uYWwgc3RyZWFtIGluZm9ybWF0aW9uLiBJblxuICogICBUeXBlU2NyaXB0LCB5b3Ugc2hvdWxkIHVzZSBgJ2VtcHR5JyBpbiBkb2NzYCBhcyBhIHR5cGUgZ3VhcmQgZm9yIGl0LlxuICovXG5mdW5jdGlvbiBwYXJzZUFsbERvY3VtZW50cyhzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbGluZUNvdW50ZXIsIHByZXR0eUVycm9ycyB9ID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIobGluZUNvdW50ZXI/LmFkZE5ld0xpbmUpO1xuICAgIGNvbnN0IGNvbXBvc2VyID0gbmV3IENvbXBvc2VyKG9wdGlvbnMpO1xuICAgIGNvbnN0IGRvY3MgPSBBcnJheS5mcm9tKGNvbXBvc2VyLmNvbXBvc2UocGFyc2VyLnBhcnNlKHNvdXJjZSkpKTtcbiAgICBpZiAocHJldHR5RXJyb3JzICYmIGxpbmVDb3VudGVyKVxuICAgICAgICBmb3IgKGNvbnN0IGRvYyBvZiBkb2NzKSB7XG4gICAgICAgICAgICBkb2MuZXJyb3JzLmZvckVhY2gocHJldHRpZnlFcnJvcihzb3VyY2UsIGxpbmVDb3VudGVyKSk7XG4gICAgICAgICAgICBkb2Mud2FybmluZ3MuZm9yRWFjaChwcmV0dGlmeUVycm9yKHNvdXJjZSwgbGluZUNvdW50ZXIpKTtcbiAgICAgICAgfVxuICAgIGlmIChkb2NzLmxlbmd0aCA+IDApXG4gICAgICAgIHJldHVybiBkb2NzO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFtdLCB7IGVtcHR5OiB0cnVlIH0sIGNvbXBvc2VyLnN0cmVhbUluZm8oKSk7XG59XG4vKiogUGFyc2UgYW4gaW5wdXQgc3RyaW5nIGludG8gYSBzaW5nbGUgWUFNTC5Eb2N1bWVudCAqL1xuZnVuY3Rpb24gcGFyc2VEb2N1bWVudChzb3VyY2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbGluZUNvdW50ZXIsIHByZXR0eUVycm9ycyB9ID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIobGluZUNvdW50ZXI/LmFkZE5ld0xpbmUpO1xuICAgIGNvbnN0IGNvbXBvc2VyID0gbmV3IENvbXBvc2VyKG9wdGlvbnMpO1xuICAgIC8vIGBkb2NgIGlzIGFsd2F5cyBzZXQgYnkgY29tcG9zZS5lbmQodHJ1ZSkgYXQgdGhlIHZlcnkgbGF0ZXN0XG4gICAgbGV0IGRvYyA9IG51bGw7XG4gICAgZm9yIChjb25zdCBfZG9jIG9mIGNvbXBvc2VyLmNvbXBvc2UocGFyc2VyLnBhcnNlKHNvdXJjZSksIHRydWUsIHNvdXJjZS5sZW5ndGgpKSB7XG4gICAgICAgIGlmICghZG9jKVxuICAgICAgICAgICAgZG9jID0gX2RvYztcbiAgICAgICAgZWxzZSBpZiAoZG9jLm9wdGlvbnMubG9nTGV2ZWwgIT09ICdzaWxlbnQnKSB7XG4gICAgICAgICAgICBkb2MuZXJyb3JzLnB1c2gobmV3IFlBTUxQYXJzZUVycm9yKF9kb2MucmFuZ2Uuc2xpY2UoMCwgMiksICdNVUxUSVBMRV9ET0NTJywgJ1NvdXJjZSBjb250YWlucyBtdWx0aXBsZSBkb2N1bWVudHM7IHBsZWFzZSB1c2UgWUFNTC5wYXJzZUFsbERvY3VtZW50cygpJykpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByZXR0eUVycm9ycyAmJiBsaW5lQ291bnRlcikge1xuICAgICAgICBkb2MuZXJyb3JzLmZvckVhY2gocHJldHRpZnlFcnJvcihzb3VyY2UsIGxpbmVDb3VudGVyKSk7XG4gICAgICAgIGRvYy53YXJuaW5ncy5mb3JFYWNoKHByZXR0aWZ5RXJyb3Ioc291cmNlLCBsaW5lQ291bnRlcikpO1xuICAgIH1cbiAgICByZXR1cm4gZG9jO1xufVxuZnVuY3Rpb24gcGFyc2Uoc3JjLCByZXZpdmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IF9yZXZpdmVyID0gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBfcmV2aXZlciA9IHJldml2ZXI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiByZXZpdmVyICYmIHR5cGVvZiByZXZpdmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvcHRpb25zID0gcmV2aXZlcjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gcGFyc2VEb2N1bWVudChzcmMsIG9wdGlvbnMpO1xuICAgIGlmICghZG9jKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBkb2Mud2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHdhcm4oZG9jLm9wdGlvbnMubG9nTGV2ZWwsIHdhcm5pbmcpKTtcbiAgICBpZiAoZG9jLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChkb2Mub3B0aW9ucy5sb2dMZXZlbCAhPT0gJ3NpbGVudCcpXG4gICAgICAgICAgICB0aHJvdyBkb2MuZXJyb3JzWzBdO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkb2MuZXJyb3JzID0gW107XG4gICAgfVxuICAgIHJldHVybiBkb2MudG9KUyhPYmplY3QuYXNzaWduKHsgcmV2aXZlcjogX3Jldml2ZXIgfSwgb3B0aW9ucykpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgb3B0aW9ucykge1xuICAgIGxldCBfcmVwbGFjZXIgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdmdW5jdGlvbicgfHwgQXJyYXkuaXNBcnJheShyZXBsYWNlcikpIHtcbiAgICAgICAgX3JlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiByZXBsYWNlcikge1xuICAgICAgICBvcHRpb25zID0gcmVwbGFjZXI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmxlbmd0aDtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IGluZGVudCA9IE1hdGgucm91bmQob3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnMgPSBpbmRlbnQgPCAxID8gdW5kZWZpbmVkIDogaW5kZW50ID4gOCA/IHsgaW5kZW50OiA4IH0gOiB7IGluZGVudCB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IGtlZXBVbmRlZmluZWQgfSA9IG9wdGlvbnMgPz8gcmVwbGFjZXIgPz8ge307XG4gICAgICAgIGlmICgha2VlcFVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpc0RvY3VtZW50KHZhbHVlKSAmJiAhX3JlcGxhY2VyKVxuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBEb2N1bWVudCh2YWx1ZSwgX3JlcGxhY2VyLCBvcHRpb25zKS50b1N0cmluZyhvcHRpb25zKTtcbn1cblxuZXhwb3J0IHsgcGFyc2UsIHBhcnNlQWxsRG9jdW1lbnRzLCBwYXJzZURvY3VtZW50LCBzdHJpbmdpZnkgfTtcbiIsICJpbXBvcnQgeyBKc29uTGluaywgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IGdldEV4dGVuc2lvbiwgZ2V0RmlsZVRpdGxlIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5pbXBvcnQgeyBDYWNoZWRNZXRhZGF0YSwgRmlsZVN0YXRzLCBGcm9udE1hdHRlckNhY2hlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVlhbWwgfSBmcm9tIFwieWFtbFwiO1xuaW1wb3J0IHtkZWZhdWx0IGFzIEJUcmVlfSBmcm9tIFwic29ydGVkLWJ0cmVlXCI7XG5pbXBvcnQge1xuICAgIElubGluZUZpZWxkLFxuICAgIEpzb25JbmxpbmVGaWVsZCxcbiAgICBhc0lubGluZUZpZWxkLFxuICAgIGV4dHJhY3RGdWxsTGluZUZpZWxkLFxuICAgIGV4dHJhY3RJbmxpbmVGaWVsZHMsXG4gICAganNvbklubGluZUZpZWxkLFxufSBmcm9tIFwiLi9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7XG4gICAgSnNvbk1hcmtkb3duQmxvY2ssXG4gICAgSnNvbk1hcmtkb3duTGlzdEJsb2NrLFxuICAgIEpzb25NYXJrZG93bkxpc3RJdGVtLFxuICAgIEpzb25NYXJrZG93blBhZ2UsXG4gICAgSnNvbk1hcmtkb3duU2VjdGlvbixcbiAgICBKc29uTWFya2Rvd25UYXNrSXRlbSxcbiAgICBKc29uTWFya2Rvd25EYXRhYmxvY2ssXG4gICAgSnNvbk1hcmtkb3duQ29kZWJsb2NrLFxuICAgIEpzb25Gcm9udG1hdHRlckVudHJ5LFxufSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9tYXJrZG93blwiO1xuaW1wb3J0IHsgSnNvbkNvbnZlcnNpb24gfSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9jb21tb25cIjtcbmltcG9ydCB7IFlhbWxDb252ZXJzaW9uIH0gZnJvbSBcImluZGV4L3R5cGVzL3lhbWxcIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5cbi8qKiBNYXRjaGVzIHlhbWwgZGF0YWJsb2Nrcywgd2hpY2ggc2hvdyB1cCBhcyBpbmRlcGVuZGVudCBvYmplY3RzIGluIHRoZSBkYXRhY29yZSBpbmRleC4gKi9cbmNvbnN0IFlBTUxfREFUQV9SRUdFWCA9IC9gYGB5YW1sOmRhdGEvaTtcbi8qKiBNYXRjaGVzIHRoZSBzdGFydCBvZiBhbnkgY29kZWJsb2NrIGZlbmNlLiAqL1xuY29uc3QgQ09ERUJMT0NLX0ZFTkNFX1JFR0VYID0gL14oPzpgYGB8fn5+KSguKikkL2ltO1xuLyoqIE1hdGNoZXMgbGlzdCBpdGVtcyAoaW5jbHVkaW5nIGluc2lkZSB0ZXh0IGJsb2NrcykuICovXG5jb25zdCBMSVNUX0lURU1fUkVHRVggPSAvXltcXHM+XSooXFxkK1xcLnxcXGQrXFwpfFxcKnwtfFxcKylcXHMqKFxcWy57MCwxfVxcXSk/XFxzKiguKikkL211O1xuXG4vKipcbiAqIEdpdmVuIHRoZSByYXcgc291cmNlIGFuZCBPYnNpZGlhbiBtZXRhZGF0YSBmb3IgYSBnaXZlbiBtYXJrZG93biBmaWxlLFxuICogcmV0dXJuIGZ1bGwgbWFya2Rvd24gZmlsZSBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duSW1wb3J0KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBtYXJrZG93bjogc3RyaW5nLFxuICAgIG1ldGFkYXRhOiBDYWNoZWRNZXRhZGF0YSxcbiAgICBzdGF0czogRmlsZVN0YXRzXG4pOiBKc29uTWFya2Rvd25QYWdlIHtcbiAgICBjb25zdCB7IGxpbmVzLCBtZXRhZGF0YTogcGFnZU1ldGFkYXRhLCBmcm9udG1hdHRlciwgc2VjdGlvbnMgfSA9IG1hcmtkb3duU291cmNlSW1wb3J0KHBhdGgsIG1hcmtkb3duLCBtZXRhZGF0YSk7XG4gICAgY29uc3QgcGFnZSA9IG5ldyBQYWdlRGF0YShwYXRoLCBzdGF0cywgbGluZXMubGVuZ3RoLCBwYWdlTWV0YWRhdGEsIHNlY3Rpb25zLCBmcm9udG1hdHRlcik7XG5cbiAgICByZXR1cm4gcGFnZS5idWlsZCgpO1xufVxuXG4vKiogSW1wb3J0IG1hcmtkb3duIGZpbGUgbWV0YWRhdGEsIHByb2R1Y2luZyBhbGwgcmVsZXZhbnQgbWFya2Rvd24gZGF0YS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93blNvdXJjZUltcG9ydChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbWFya2Rvd246IHN0cmluZyxcbiAgICBtZXRhZGF0YTogQ2FjaGVkTWV0YWRhdGFcbik6IHtcbiAgICBsaW5lczogc3RyaW5nW107XG4gICAgbWV0YWRhdGE6IE1ldGFkYXRhO1xuICAgIGZyb250bWF0dGVyPzogUmVjb3JkPHN0cmluZywgSnNvbkZyb250bWF0dGVyRW50cnk+O1xuICAgIHNlY3Rpb25zOiBTZWN0aW9uRGF0YVtdO1xufSB7XG4gICAgY29uc3QgZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIEpzb25Gcm9udG1hdHRlckVudHJ5PiB8IHVuZGVmaW5lZCA9IG1ldGFkYXRhLmZyb250bWF0dGVyXG4gICAgICAgID8gcGFyc2VGcm9udG1hdHRlckJsb2NrKG1ldGFkYXRhLmZyb250bWF0dGVyKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsaW5lcyA9IG1hcmtkb3duLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pO1xuICAgIGNvbnN0IG1hcmtkb3duTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcbiAgICBjb25zdCBzZWN0aW9uQXJyYXk6IFNlY3Rpb25EYXRhW10gPSBbXTtcbiAgICAvLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNlY3Rpb25zIC8vXG4gICAgLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IG1ldGFoZWFkaW5ncyA9IG1ldGFkYXRhLmhlYWRpbmdzID8/IFtdO1xuICAgIG1ldGFoZWFkaW5ncy5zb3J0KChhLCBiKSA9PiBhLnBvc2l0aW9uLnN0YXJ0LmxpbmUgLSBiLnBvc2l0aW9uLnN0YXJ0LmxpbmUpO1xuXG4gICAgY29uc3Qgc2VjdGlvbnMgPSBuZXcgQlRyZWU8bnVtYmVyLCBTZWN0aW9uRGF0YT4odW5kZWZpbmVkLCAoYSwgYikgPT4gYSAtIGIpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtZXRhaGVhZGluZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbWV0YWhlYWRpbmdzW2luZGV4XTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbnRyeS5wb3NpdGlvbi5zdGFydC5saW5lO1xuICAgICAgICBjb25zdCBlbmQgPSBpbmRleCA9PSBtZXRhaGVhZGluZ3MubGVuZ3RoIC0gMSA/IGxpbmVzLmxlbmd0aCA6IG1ldGFoZWFkaW5nc1tpbmRleCArIDFdLnBvc2l0aW9uLnN0YXJ0LmxpbmU7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uRGF0YShzdGFydCwgZW5kLCBlbnRyeS5oZWFkaW5nLCBlbnRyeS5sZXZlbCwgaW5kZXggKyAxKTtcbiAgICAgICAgc2VjdGlvbnMuc2V0KHN0YXJ0LCBzZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYW4gaW1wbGljaXQgc2VjdGlvbiBmb3IgdGhlIFwiaGVhZGluZ1wiIHNlY3Rpb24gb2YgdGhlIHBhZ2UgaWYgdGhlcmUgaXMgbm90IGFuIGltbWVkaWF0ZSBoZWFkZXIgYnV0IHRoZXJlIGlzXG4gICAgLy8gc29tZSBjb250ZW50IGluIHRoZSBmaWxlLiBJZiB0aGVyZSBhcmUgb3RoZXIgc2VjdGlvbnMsIHRoZW4gZ28gdXAgdG8gdGhhdCwgb3RoZXJ3aXNlLCBnbyBmb3IgdGhlIGVudGlyZSBmaWxlLlxuICAgIGlmIChzZWN0aW9ucy5zaXplID09IDApIHtcbiAgICAgICAgaWYgKCFlbXB0eWxpbmVzKGxpbmVzLCAwLCBsaW5lcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb25EYXRhKDAsIGxpbmVzLmxlbmd0aCwgZ2V0RmlsZVRpdGxlKHBhdGgpLCAxLCAwKTtcbiAgICAgICAgICAgIHNlY3Rpb25zLnNldCgwLCBzZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzZWN0aW9uLlxuICAgICAgICBjb25zdCBmaXJzdCA9IHNlY3Rpb25zLmdldFBhaXJPck5leHRIaWdoZXIoMCk/LlsxXSEhO1xuXG4gICAgICAgIGlmIChmaXJzdC5zdGFydCA+IDAgJiYgIWVtcHR5bGluZXMobGluZXMsIDAsIGZpcnN0LnN0YXJ0KSkge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uRGF0YSgwLCBmaXJzdC5zdGFydCwgZ2V0RmlsZVRpdGxlKHBhdGgpLCAxLCAwKTtcblxuICAgICAgICAgICAgc2VjdGlvbnMuc2V0KDAsIHNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vXG4gICAgLy8gQmxvY2tzIC8vXG4gICAgLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBBbGwgYmxvY2tzOyB3ZSB3aWxsIGFzc2lnbiB0YWdzIGFuZCBvdGhlciBtZXRhZGF0YSB0byBibG9ja3MgYXMgd2UgZW5jb3VudGVyIHRoZW0uIEF0IHRoZSBlbmQsIG9ubHkgYmxvY2tzIHRoYXRcbiAgICAvLyBoYXZlIGFjdHVhbCBtZXRhZGF0YSB3aWxsIGJlIHN0b3JlZCB0byBzYXZlIG9uIG1lbW9yeSBwcmVzc3VyZS5cbiAgICBjb25zdCBibG9ja3MgPSBuZXcgQlRyZWU8bnVtYmVyLCBCbG9ja0RhdGE+KHVuZGVmaW5lZCwgKGEsIGIpID0+IGEgLSBiKTtcbiAgICBsZXQgYmxvY2tPcmRpbmFsID0gMTtcbiAgICBmb3IgKGNvbnN0IGJsb2NrIG9mIG1ldGFkYXRhLnNlY3Rpb25zIHx8IFtdKSB7XG4gICAgICAgIC8vIFNraXAgaGVhZGluZ3MgYmxvY2tzLCB3ZSBoYW5kbGUgdGhlbSBzcGVjaWFsbHkgYXMgc2VjdGlvbnMuXG4gICAgICAgIGlmIChibG9jay50eXBlID09PSBcImhlYWRpbmdcIikgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBibG9jay5wb3NpdGlvbi5zdGFydC5saW5lO1xuICAgICAgICBjb25zdCBlbmQgPSBibG9jay5wb3NpdGlvbi5lbmQubGluZSArIDE7XG4gICAgICAgIGNvbnN0IHN0YXJ0TGluZSA9IGxpbmVzW3N0YXJ0XTsgLy8gdG8gdXNlIHRvIGNoZWNrIHRoZSBjb2RlYmxvY2sgdHlwZVxuXG4gICAgICAgIGlmIChibG9jay50eXBlID09PSBcImxpc3RcIikge1xuICAgICAgICAgICAgYmxvY2tzLnNldChzdGFydCwgbmV3IExpc3RCbG9ja0RhdGEoc3RhcnQsIGVuZCwgYmxvY2tPcmRpbmFsKyssIGJsb2NrLmlkKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmxvY2sudHlwZSA9PSBcImNvZGVcIiAmJiBZQU1MX0RBVEFfUkVHRVgudGVzdChzdGFydExpbmUpKSB7XG4gICAgICAgICAgICBjb25zdCB5YW1sOiBzdHJpbmcgPSBsaW5lc1xuICAgICAgICAgICAgICAgIC5zbGljZShzdGFydCArIDEsIGVuZCAtIDEpXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFx0L2dtLCBcIiAgXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3BsaXQ6IFJlY29yZDxzdHJpbmcsIEpzb25Gcm9udG1hdHRlckVudHJ5PiA9IHBhcnNlRnJvbnRtYXR0ZXJCbG9jayhwYXJzZVlhbWwoeWFtbCkpO1xuXG4gICAgICAgICAgICBibG9ja3Muc2V0KHN0YXJ0LCBuZXcgRGF0YWJsb2NrRGF0YShzdGFydCwgZW5kLCBibG9ja09yZGluYWwrKywgc3BsaXQsIGJsb2NrLmlkKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmxvY2sudHlwZSA9PT0gXCJjb2RlXCIpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBibG9jayBpcyBmZW5jZWQuXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHN0YXJ0TGluZS5tYXRjaChDT0RFQkxPQ0tfRkVOQ0VfUkVHRVgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW5kZW50ZWQtc3R5bGUgY29kZWJsb2NrLlxuICAgICAgICAgICAgICAgIGJsb2Nrcy5zZXQoc3RhcnQsIG5ldyBDb2RlYmxvY2tEYXRhKHN0YXJ0LCBlbmQsIGJsb2NrT3JkaW5hbCsrLCBbXSwgXCJpbmRlbnRcIiwgc3RhcnQsIGVuZCwgYmxvY2suaWQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2VzID0gbWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaFsxXSA/IG1hdGNoWzFdLnNwbGl0KFwiLFwiKSA6IFtdO1xuICAgICAgICAgICAgICAgIGJsb2Nrcy5zZXQoXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBuZXcgQ29kZWJsb2NrRGF0YShzdGFydCwgZW5kLCBibG9ja09yZGluYWwrKywgbGFuZ3VhZ2VzLCBcImZlbmNlZFwiLCBzdGFydCArIDEsIGVuZCAtIDEsIGJsb2NrLmlkKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBibG9ja3Muc2V0KHN0YXJ0LCBuZXcgQmFzZUJsb2NrRGF0YShzdGFydCwgZW5kLCBibG9ja09yZGluYWwrKywgYmxvY2sudHlwZSwgYmxvY2suaWQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBibG9ja3MgdG8gc2VjdGlvbnMuXG4gICAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MudmFsdWVzKCkpIHtcbiAgICAgICAgbG9va3VwKGJsb2NrLnN0YXJ0LCBzZWN0aW9ucyk/LmJsb2NrKGJsb2NrKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vL1xuICAgIC8vIExpc3RzIC8vXG4gICAgLy8vLy8vLy8vLy9cblxuICAgIC8vIEFsbCBsaXN0IGl0ZW1zIGluIGxpc3RzLiBTdGFydCB3aXRoIGEgc2ltcGxlIHRyaXZpYWwgcGFzcy5cbiAgICBjb25zdCBjb250ZW50UmVnZXggPSAvXltcXHRcXGZcXHYgXSpbXFwtK1xcKl1cXHMoXFxbLlxcXVxccyk/LztcbiAgICBjb25zdCBtYXJrZXJSZWdleCA9IC9eKD4/XFxzPykqKFxcdHxcXHMpKi9nO1xuICAgIGNvbnN0IGxpc3RJdGVtcyA9IG5ldyBCVHJlZTxudW1iZXIsIExpc3RJdGVtRGF0YT4odW5kZWZpbmVkLCAoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgZm9yIChjb25zdCBsaXN0IG9mIG1ldGFkYXRhLmxpc3RJdGVtcyB8fCBbXSkge1xuICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbbGlzdC5wb3NpdGlvbi5zdGFydC5saW5lXTtcblxuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgZmxhZyB3aGljaCBza2lwcyBpbmRleGluZyBsaXN0IGl0ZW1zLlxuICAgICAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goTElTVF9JVEVNX1JFR0VYKTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgc3ltYm9sID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB0ZXh0ID0gbWF0Y2hbM107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtID0gbmV3IExpc3RJdGVtRGF0YShcbiAgICAgICAgICAgIGxpc3QucG9zaXRpb24uc3RhcnQubGluZSxcbiAgICAgICAgICAgIGxpc3QucG9zaXRpb24uZW5kLmxpbmUgKyAxLFxuICAgICAgICAgICAgbGlzdC5wYXJlbnQsXG4gICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICBsaXN0LmlkLFxuICAgICAgICAgICAgbGlzdC50YXNrLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICApO1xuICAgICAgICBsaXN0SXRlbXMuc2V0KGl0ZW0uc3RhcnQsIGl0ZW0pO1xuICAgIH1cblxuICAgIC8vIEluIHRoZSBzZWNvbmQgbGlzdCBwYXNzLCBhY3R1YWxseSBjb25zdHJ1Y3QgdGhlIGxpc3QgaGVpcmFyY2h5LlxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0SXRlbXMudmFsdWVzKCkpIHtcbiAgICAgICAgaWYgKGl0ZW0ucGFyZW50TGluZSA8IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RCbG9jayA9IGJsb2Nrcy5nZXQoLWl0ZW0ucGFyZW50TGluZSk7XG4gICAgICAgICAgICBpZiAoIWxpc3RCbG9jayB8fCAhKGxpc3RCbG9jay50eXBlID09PSBcImxpc3RcIikpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAobGlzdEJsb2NrIGFzIExpc3RCbG9ja0RhdGEpLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0SXRlbXMuZ2V0KGl0ZW0ucGFyZW50TGluZSk/LmVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vXG4gICAgLy8gVGFncyAvL1xuICAgIC8vLy8vLy8vLy9cblxuICAgIC8vIEZvciBlYWNoIHRhZywgYXNzaWduIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIGFuZCBibG9jayB0aGF0IGl0IGlzIGEgcGFydCBvZi5cbiAgICBmb3IgKGNvbnN0IHRhZ2RlZiBvZiBtZXRhZGF0YS50YWdzID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IHRhZ2RlZi50YWcuc3RhcnRzV2l0aChcIiNcIikgPyB0YWdkZWYudGFnIDogXCIjXCIgKyB0YWdkZWYudGFnO1xuICAgICAgICBjb25zdCBsaW5lID0gdGFnZGVmLnBvc2l0aW9uLnN0YXJ0LmxpbmU7XG4gICAgICAgIG1hcmtkb3duTWV0YWRhdGEudGFnKHRhZyk7XG5cbiAgICAgICAgbG9va3VwKGxpbmUsIHNlY3Rpb25zKT8ubWV0YWRhdGEudGFnKHRhZyk7XG4gICAgICAgIGxvb2t1cChsaW5lLCBibG9ja3MpPy5tZXRhZGF0YS50YWcodGFnKTtcbiAgICAgICAgbG9va3VwKGxpbmUsIGxpc3RJdGVtcyk/Lm1ldGFkYXRhLnRhZyh0YWcpO1xuICAgIH1cblxuICAgIC8vIEFkZCBmcm9udG1hdHRlciB0YWdzLlxuICAgIGlmIChtZXRhZGF0YS5mcm9udG1hdHRlcikge1xuICAgICAgICBmb3IgKGNvbnN0IHJhd3RhZyBvZiBleHRyYWN0VGFncyhtZXRhZGF0YS5mcm9udG1hdHRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IHJhd3RhZy5zdGFydHNXaXRoKFwiI1wiKSA/IHJhd3RhZyA6IFwiI1wiICsgcmF3dGFnO1xuICAgICAgICAgICAgbWFya2Rvd25NZXRhZGF0YS50YWcodGFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vXG4gICAgLy8gTGlua3MgLy9cbiAgICAvLy8vLy8vLy8vL1xuXG4gICAgZm9yIChsZXQgbGlua2RlZiBvZiBtZXRhZGF0YS5saW5rcyA/PyBbXSkge1xuICAgICAgICBjb25zdCBsaW5rID0gTGluay5pbmZlcihsaW5rZGVmLmxpbmspO1xuICAgICAgICBjb25zdCBsaW5lID0gbGlua2RlZi5wb3NpdGlvbi5zdGFydC5saW5lO1xuICAgICAgICBtYXJrZG93bk1ldGFkYXRhLmxpbmsobGluayk7XG5cbiAgICAgICAgbG9va3VwKGxpbmUsIHNlY3Rpb25zKT8ubWV0YWRhdGEubGluayhsaW5rKTtcbiAgICAgICAgbG9va3VwKGxpbmUsIGJsb2Nrcyk/Lm1ldGFkYXRhLmxpbmsobGluayk7XG4gICAgICAgIGxvb2t1cChsaW5lLCBsaXN0SXRlbXMpPy5tZXRhZGF0YS5saW5rKGxpbmspO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRnJvbnRtYXR0ZXIgTGlua3MgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLy8gRnJvbnRtYXR0ZXIgbGlua3MgYXJlIG9ubHkgYXNzaWduZWQgdG8gdGhlIHBhZ2UuXG4gICAgZm9yIChjb25zdCBsaW5rZGVmIG9mIG1ldGFkYXRhLmZyb250bWF0dGVyTGlua3MgPz8gW10pIHtcbiAgICAgICAgbWFya2Rvd25NZXRhZGF0YS5saW5rKExpbmsuaW5mZXIobGlua2RlZi5saW5rLCBmYWxzZSwgbGlua2RlZi5kaXNwbGF5VGV4dCkpO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBJbmxpbmUgRmllbGRzIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBpdGVyYXRlSW5saW5lRmllbGRzKGxpbmVzKSkge1xuICAgICAgICBjb25zdCBsaW5lID0gZmllbGQucG9zaXRpb24ubGluZTtcbiAgICAgICAgbWFya2Rvd25NZXRhZGF0YS5pbmxpbmVGaWVsZChmaWVsZCk7XG5cbiAgICAgICAgbG9va3VwKGxpbmUsIHNlY3Rpb25zKT8ubWV0YWRhdGEuaW5saW5lRmllbGQoZmllbGQpO1xuICAgICAgICBsb29rdXAobGluZSwgYmxvY2tzKT8ubWV0YWRhdGEuaW5saW5lRmllbGQoZmllbGQpO1xuICAgICAgICBsb29rdXAobGluZSwgbGlzdEl0ZW1zKT8ubWV0YWRhdGEuaW5saW5lRmllbGQoZmllbGQpO1xuICAgIH1cbiAgICBzZWN0aW9uQXJyYXkucHVzaCguLi5zZWN0aW9ucy52YWx1ZXMoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGluZXMsXG4gICAgICAgIGZyb250bWF0dGVyLFxuICAgICAgICBtZXRhZGF0YTogbWFya2Rvd25NZXRhZGF0YSxcbiAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25BcnJheSxcbiAgICB9O1xufVxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBQYXJzaW5nIEFpZHMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKiogQ2hlY2sgaWYgdGhlIGdpdmVuIGxpbmUgcmFuZ2UgaXMgYWxsIGVtcHR5LiBTdGFydCBpcyBpbmNsdXNpdmUsIGVuZCBleGNsdXNpdmUuICovXG5mdW5jdGlvbiBlbXB0eWxpbmVzKGxpbmVzOiBzdHJpbmdbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IGVuZDsgaW5kZXgrKykge1xuICAgICAgICBpZiAobGluZXNbaW5kZXhdLnRyaW0oKSAhPT0gXCJcIikgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFlpZWxkcyBhbGwgaW5saW5lIGZpZWxkcyBmb3VuZCBpbiB0aGUgZG9jdW1lbnQgYnkgdHJhdmVyc2luZyBsaW5lIGJ5IGxpbmUgdGhyb3VnaCB0aGUgZG9jdW1lbnQuIFBlcmZvcm1zIHNvbWUgb3B0aW1pemF0aW9uc1xuICogdG8gc2tpcCBleHRyYS1sYXJnZSBsaW5lcywgYW5kIGNhbiBiZSBkaXNhYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlSW5saW5lRmllbGRzKGNvbnRlbnQ6IHN0cmluZ1tdKTogR2VuZXJhdG9yPElubGluZUZpZWxkPiB7XG4gICAgZm9yIChsZXQgbGluZW5vID0gMDsgbGluZW5vIDwgY29udGVudC5sZW5ndGg7IGxpbmVubysrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb250ZW50W2xpbmVub107XG5cbiAgICAgICAgLy8gRmFzdC1iYWlsb3V0IGZvciBsaW5lcyB0aGF0IGFyZSB0b28gbG9uZyBvciBkbyBub3QgY29udGFpbiAnOjonLlxuICAgICAgICBpZiAobGluZS5sZW5ndGggPiAzMjc2OCB8fCAhbGluZS5pbmNsdWRlcyhcIjo6XCIpKSBjb250aW51ZTtcblxuICAgICAgICAvLyBUT0RPOiBSZS1hZGQgc3VwcG9ydCBmb3IgdGhvc2UgY3VzdG9tIGVtb2ppIGZpZWxkcyBvbiB0YXNrcyBhbmQgc2ltaWxhci5cbiAgICAgICAgbGV0IGlubGluZUZpZWxkcyA9IGV4dHJhY3RJbmxpbmVGaWVsZHMobGluZSk7XG4gICAgICAgIGlmIChpbmxpbmVGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaWZpZWxkIG9mIGlubGluZUZpZWxkcykgeWllbGQgYXNJbmxpbmVGaWVsZChpZmllbGQsIGxpbmVubyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZnVsbExpbmUgPSBleHRyYWN0RnVsbExpbmVGaWVsZChsaW5lKTtcbiAgICAgICAgICAgIGlmIChmdWxsTGluZSkgeWllbGQgYXNJbmxpbmVGaWVsZChmdWxsTGluZSwgbGluZW5vKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIFRvcC1sZXZlbCBmdW5jdGlvbiB3aGljaCBtYXBzIGEgWUFNTCBibG9jayAtIGluY2x1ZGluZyBmcm9udG1hdHRlciAtIGludG8gZnJvbnRtYXR0ZXIgZW50cmllcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyb250bWF0dGVyQmxvY2soYmxvY2s6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBKc29uRnJvbnRtYXR0ZXJFbnRyeT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgSnNvbkZyb250bWF0dGVyRW50cnk+ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYmxvY2spKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYmxvY2tba2V5XTtcblxuICAgICAgICByZXN1bHRba2V5LnRvTG93ZXJDYXNlKCldID0ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogSnNvbkNvbnZlcnNpb24uanNvbihZYW1sQ29udmVyc2lvbi5saXRlcmFsKHZhbHVlKSksXG4gICAgICAgICAgICByYXc6IHZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBGaW5kcyBhbiBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHRoZSBnaXZlbiBsaW5lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cDxUIGV4dGVuZHMgeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PihsaW5lOiBudW1iZXIsIHRyZWU6IEJUcmVlPG51bWJlciwgVD4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0cmVlLmdldFBhaXJPck5leHRMb3dlcihsaW5lKT8uWzFdO1xuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmVuZCA+PSBsaW5lKSByZXR1cm4gdGFyZ2V0O1xuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIEV4dHJhY3QgdGFncyBpbnRlbGxpZ2VudGx5IGZyb20gZnJvbnRtYXR0ZXIuIEhhbmRsZXMgYXJyYXlzLCBudW1iZXJzLCBhbmQgc3RyaW5ncy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VGFncyhtZXRhZGF0YTogRnJvbnRNYXR0ZXJDYWNoZSk6IHN0cmluZ1tdIHtcbiAgICBsZXQgdGFnS2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5maWx0ZXIoKHQpID0+IHQudG9Mb3dlckNhc2UoKSA9PSBcInRhZ3NcIiB8fCB0LnRvTG93ZXJDYXNlKCkgPT0gXCJ0YWdcIik7XG5cbiAgICByZXR1cm4gdGFnS2V5c1xuICAgICAgICAubWFwKChrKSA9PiBzcGxpdEZyb250bWF0dGVyVGFnT3JBbGlhcyhtZXRhZGF0YVtrXSwgL1ssXFxzXSsvKSlcbiAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcC5jb25jYXQoYyksIFtdKVxuICAgICAgICAubWFwKChzdHIpID0+IChzdHIuc3RhcnRzV2l0aChcIiNcIikgPyBzdHIgOiBcIiNcIiArIHN0cikpO1xufVxuXG4vKiogU3BsaXQgYSBmcm9udG1hdHRlciBsaXN0IGludG8gc2VwYXJhdGUgZWxlbWVudHM7IGhhbmRsZXMgYWN0dWFsIGxpc3RzLCBjb21tYSBzZXBhcmF0ZWQgbGlzdHMsIGFuZCBzaW5nbGUgZWxlbWVudHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMoZGF0YTogYW55LCBvbjogUmVnRXhwKTogc3RyaW5nW10ge1xuICAgIGlmIChkYXRhID09IG51bGwgfHwgZGF0YSA9PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgLmZpbHRlcigocykgPT4gISFzKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMocywgb24pKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcC5jb25jYXQoYyksIFtdKTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSB0byBhIHN0cmluZyB0byBoYW5kbGUgbnVtYmVycyBhbmQgc28gb24uXG4gICAgcmV0dXJuIChcIlwiICsgZGF0YSlcbiAgICAgICAgLnNwbGl0KG9uKVxuICAgICAgICAuZmlsdGVyKCh0KSA9PiAhIXQpXG4gICAgICAgIC5tYXAoKHQpID0+IHQudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKCh0KSA9PiB0Lmxlbmd0aCA+IDApO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQnVpbGRlciBVdGlsaXRpZXMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKiBDb252aWVuZW50IHNoYXJlZCB1dGlsaXR5IGZvciB0cmFja2luZyBtZXRhZGF0YSAtIGxpbmtzLCB0YWdzLCBhbmQgc28gb24uICovXG5leHBvcnQgY2xhc3MgTWV0YWRhdGEge1xuICAgIHB1YmxpYyB0YWdzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgbGlua3M6IExpbmtbXSA9IFtdO1xuICAgIHB1YmxpYyBpbmxpbmVGaWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPiA9IHt9O1xuXG4gICAgLyoqIEFkZCBhIHRhZyB0byB0aGUgbWV0YWRhdGEuICovXG4gICAgcHVibGljIHRhZyh0YWc6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRhZ3MuYWRkKHRhZyk7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBhIGxpbmsgdG8gdGhlIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBsaW5rKGxpbms6IExpbmspIHtcbiAgICAgICAgaWYgKHRoaXMubGlua3MuZmluZCgodikgPT4gdi5lcXVhbHMobGluaykpKSByZXR1cm47XG4gICAgICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIGFuIGlubGluZSBmaWVsZCB0byB0aGUgbWV0YWRhdGEuICovXG4gICAgcHVibGljIGlubGluZUZpZWxkKGZpZWxkOiBJbmxpbmVGaWVsZCkge1xuICAgICAgICBjb25zdCBsb3dlciA9IGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5pbmxpbmVGaWVsZHMpLnNvbWUoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT0gbG93ZXIpKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5pbmxpbmVGaWVsZHNbbG93ZXJdID0gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIGxpc3Qgb2YgdW5pcXVlIGFkZGVkIHRhZ3MuICovXG4gICAgcHVibGljIGZpbmlzaFRhZ3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhZ3MpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBsaXN0IG9mIEpTT04tc2VyaWFsaXplZCBsaW5rcy4gKi9cbiAgICBwdWJsaWMgZmluaXNoTGlua3MoKTogSnNvbkxpbmtbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmtzLm1hcCgobGluaykgPT4gbGluay50b09iamVjdCgpKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIGEgbGlzdCBvZiBKU09OLXNlcmlhbGl6ZWQgaW5saW5lIGZpZWxkcy4gKi9cbiAgICBwdWJsaWMgZmluaXNoSW5saW5lRmllbGRzKCk6IFJlY29yZDxzdHJpbmcsIEpzb25JbmxpbmVGaWVsZD4ge1xuICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKHRoaXMuaW5saW5lRmllbGRzLCBqc29uSW5saW5lRmllbGQpO1xuICAgIH1cbn1cblxuLyoqIENvbnZpZW5lbnQgdXRpbGl0eSBmb3IgY29uc3RydWN0aW5nIHBhZ2Ugb2JqZWN0cy4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlRGF0YSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcGF0aDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgc3RhdHM6IEZpbGVTdGF0cyxcbiAgICAgICAgcHVibGljIGxlbmd0aDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhLFxuICAgICAgICBwdWJsaWMgc2VjdGlvbnM6IFNlY3Rpb25EYXRhW10sXG4gICAgICAgIHB1YmxpYyBmcm9udG1hdHRlcj86IFJlY29yZDxzdHJpbmcsIEpzb25Gcm9udG1hdHRlckVudHJ5PlxuICAgICkge31cblxuICAgIHB1YmxpYyBidWlsZCgpOiBKc29uTWFya2Rvd25QYWdlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgICAgICAkY3RpbWU6IHRoaXMuc3RhdHMuY3RpbWUsXG4gICAgICAgICAgICAkbXRpbWU6IHRoaXMuc3RhdHMubXRpbWUsXG4gICAgICAgICAgICAkc2l6ZTogdGhpcy5zdGF0cy5zaXplLFxuICAgICAgICAgICAgJGV4dGVuc2lvbjogZ2V0RXh0ZW5zaW9uKHRoaXMucGF0aCksXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IDAsIGVuZDogdGhpcy5sZW5ndGggfSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJGluZmllbGRzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLFxuICAgICAgICAgICAgJHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLm1hcCgoeCkgPT4geC5idWlsZCgpKSxcbiAgICAgICAgICAgICRmcm9udG1hdHRlcjogdGhpcy5mcm9udG1hdHRlcixcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8qKiBDb252aWVuZW50IHV0aWxpdHkgZm9yIGNvbnN0cnVjdGluZyBtYXJrZG93biBzZWN0aW9ucy4gKi9cbmV4cG9ydCBjbGFzcyBTZWN0aW9uRGF0YSB7XG4gICAgcHVibGljIGJsb2NrczogQmxvY2tEYXRhW10gPSBbXTtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzdGFydDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZW5kOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgbGV2ZWw6IG51bWJlcixcbiAgICAgICAgcHVibGljIG9yZGluYWw6IG51bWJlclxuICAgICkge31cblxuICAgIHB1YmxpYyBibG9jayhibG9jazogQmxvY2tEYXRhKSB7XG4gICAgICAgIHRoaXMuYmxvY2tzLnB1c2goYmxvY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZCgpOiBKc29uTWFya2Rvd25TZWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICR0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkbGV2ZWw6IHRoaXMubGV2ZWwsXG4gICAgICAgICAgICAkdGFnczogdGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksXG4gICAgICAgICAgICAkaW5maWVsZHM6IHRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogeyBzdGFydDogdGhpcy5zdGFydCwgZW5kOiB0aGlzLmVuZCB9LFxuICAgICAgICAgICAgJGJsb2NrczogdGhpcy5ibG9ja3MubWFwKChibG9jaykgPT4gYmxvY2suYnVpbGQoKSksXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKiogQ29uc3RydWN0cyBtYXJrZG93biBsaXN0IGJsb2NrcyBzcGVjaWZpY2FsbHkuICovXG5leHBvcnQgY2xhc3MgTGlzdEJsb2NrRGF0YSB7XG4gICAgcHVibGljIHR5cGU6IHN0cmluZyA9IFwibGlzdFwiO1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcbiAgICBwdWJsaWMgaXRlbXM6IExpc3RJdGVtRGF0YVtdID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHN0YXJ0OiBudW1iZXIsIHB1YmxpYyBlbmQ6IG51bWJlciwgcHVibGljIG9yZGluYWw6IG51bWJlciwgcHVibGljIGJsb2NrSWQ/OiBzdHJpbmcpIHt9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbk1hcmtkb3duTGlzdEJsb2NrIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IHRoaXMuc3RhcnQsIGVuZDogdGhpcy5lbmQgfSxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJHR5cGU6IFwibGlzdFwiLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgICAgICRlbGVtZW50czogdGhpcy5pdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uYnVpbGQoKSksXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKiogQ29uc3RydWN0cyBtYXJrZG93biBjb2RlYmxvY2tzIHNwZWNpZmljYWxseS4gKi9cbmV4cG9ydCBjbGFzcyBDb2RlYmxvY2tEYXRhIHtcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nID0gXCJjb2RlYmxvY2tcIjtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzdGFydDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZW5kOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBvcmRpbmFsOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBsYW5ndWFnZXM6IHN0cmluZ1tdLFxuICAgICAgICBwdWJsaWMgc3R5bGU6IFwiaW5kZW50XCIgfCBcImZlbmNlZFwiLFxuICAgICAgICBwdWJsaWMgY29udGVudFN0YXJ0OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBjb250ZW50RW5kOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBibG9ja0lkPzogc3RyaW5nXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGJ1aWxkKCk6IEpzb25NYXJrZG93bkNvZGVibG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkdHlwZTogXCJjb2RlYmxvY2tcIixcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IHRoaXMuc3RhcnQsIGVuZDogdGhpcy5lbmQgfSxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgICAgICRsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgICAgICAgJHN0eWxlOiB0aGlzLnN0eWxlLFxuICAgICAgICAgICAgJGNvbnRlbnRQb3NpdGlvbjogeyBzdGFydDogdGhpcy5jb250ZW50U3RhcnQsIGVuZDogdGhpcy5jb250ZW50RW5kIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKiogQ29uc3RydWN0cyBtYXJrZG93biBkYXRhYmxvY2tzIHNwZWNpZmljYWxseS4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhYmxvY2tEYXRhIHtcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nID0gXCJkYXRhYmxvY2tcIjtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzdGFydDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZW5kOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBvcmRpbmFsOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBKc29uRnJvbnRtYXR0ZXJFbnRyeT4sXG4gICAgICAgIHB1YmxpYyBibG9ja0lkPzogc3RyaW5nXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGJ1aWxkKCk6IEpzb25NYXJrZG93bkRhdGFibG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkdHlwZTogXCJkYXRhYmxvY2tcIixcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IHRoaXMuc3RhcnQsIGVuZDogdGhpcy5lbmQgfSxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgICAgICRkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKiogQmFzZSBibG9jayBtZXRhZGF0YSB1c2VkIGZvciBub24tc3BlY2lmaWMgYmxvY2tzLiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VCbG9ja0RhdGEge1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHN0YXJ0OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBlbmQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIG9yZGluYWw6IG51bWJlcixcbiAgICAgICAgcHVibGljIHR5cGU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGJsb2NrSWQ/OiBzdHJpbmdcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbk1hcmtkb3duQmxvY2sge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLm9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHsgc3RhcnQ6IHRoaXMuc3RhcnQsIGVuZDogdGhpcy5lbmQgfSxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIEJsb2NrRGF0YSA9IExpc3RCbG9ja0RhdGEgfCBDb2RlYmxvY2tEYXRhIHwgRGF0YWJsb2NrRGF0YSB8IEJhc2VCbG9ja0RhdGE7XG5cbi8qKiBVdGlsaXR5IGZvciBjb25zdHJ1Y3RpbmcgbWFya2Rvd24gbGlzdCBpdGVtcy4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0SXRlbURhdGEge1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcbiAgICBwdWJsaWMgZWxlbWVudHM6IExpc3RJdGVtRGF0YVtdID0gW107XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc3RhcnQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIGVuZDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcGFyZW50TGluZTogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgc3ltYm9sPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgYmxvY2tJZD86IHN0cmluZyxcbiAgICAgICAgcHVibGljIHN0YXR1cz86IHN0cmluZyxcbiAgICAgICAgcHVibGljIHRleHQ/OiBzdHJpbmdcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbk1hcmtkb3duTGlzdEl0ZW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJHBhcmVudExpbmU6IHRoaXMucGFyZW50TGluZSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogeyBzdGFydDogdGhpcy5zdGFydCwgZW5kOiB0aGlzLmVuZCB9LFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuYmxvY2tJZCxcbiAgICAgICAgICAgICRlbGVtZW50czogdGhpcy5lbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQuYnVpbGQoKSksXG4gICAgICAgICAgICAkdHlwZTogdGhpcy5zdGF0dXMgPyBcInRhc2tcIiA6IFwibGlzdFwiLFxuICAgICAgICAgICAgJGluZmllbGRzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksXG4gICAgICAgICAgICAkc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgICAgICRzeW1ib2w6IHRoaXMuc3ltYm9sLFxuICAgICAgICAgICAgJHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgfSBhcyBKc29uTWFya2Rvd25UYXNrSXRlbTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0ICogYXMgUCBmcm9tIFwicGFyc2ltbW9uXCI7XG5pbXBvcnQge1xuICAgIEJpbmFyeU9wLFxuICAgIEV4cHJlc3Npb24sXG4gICAgRXhwcmVzc2lvbnMsXG4gICAgTGFtYmRhRXhwcmVzc2lvbixcbiAgICBMaXN0RXhwcmVzc2lvbixcbiAgICBMaXRlcmFsRXhwcmVzc2lvbixcbiAgICBPYmplY3RFeHByZXNzaW9uLFxuICAgIFZhcmlhYmxlRXhwcmVzc2lvbixcbn0gZnJvbSBcIi4vZXhwcmVzc2lvblwiO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSBcImVtb2ppLXJlZ2V4XCI7XG5pbXBvcnQge1xuICAgIEluZGV4Q2hpbGRPZixcbiAgICBJbmRleFBhdGgsXG4gICAgSW5kZXhJZCxcbiAgICBJbmRleE5vdCxcbiAgICBJbmRleFBhcmVudE9mLFxuICAgIEluZGV4UXVlcnksXG4gICAgSW5kZXhUYWdnZWQsXG4gICAgSW5kZXhUeXBlZCxcbiAgICBJbmRleExpbmtlZCxcbiAgICBJbmRleEZpZWxkLFxuICAgIEluZGV4RXhwcmVzc2lvbixcbn0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4LXF1ZXJ5XCI7XG5pbXBvcnQgeyBub3JtYWxpemVEdXJhdGlvbiB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBQYXJzaW5nIFByaW1pdGl2ZXMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKiogUHJpbWl0aXZlIHBhcnNpbmcgZm9yIGNvbW1vbmx5IHNlZW4gdHlwZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFByaW1pdGl2ZXNMYW5ndWFnZSB7XG4gICAgbnVtYmVyOiBudW1iZXI7XG4gICAgc3RyaW5nOiBzdHJpbmc7XG4gICAgZXNjYXBlQ2hhcmFjdGVyOiBzdHJpbmc7XG4gICAgYm9vbDogYm9vbGVhbjtcbiAgICB0YWc6IHN0cmluZztcbiAgICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgbGluazogTGluaztcbiAgICBlbWJlZExpbms6IExpbms7XG4gICAgcm9vdERhdGU6IERhdGVUaW1lO1xuICAgIGRhdGVTaG9ydGhhbmQ6IGtleW9mIHR5cGVvZiBEQVRFX1NIT1JUSEFORFM7XG4gICAgZGF0ZTogRGF0ZVRpbWU7XG4gICAgZGF0ZVBsdXM6IERhdGVUaW1lO1xuICAgIGR1cmF0aW9uVHlwZToga2V5b2YgdHlwZW9mIERVUkFUSU9OX1RZUEVTO1xuICAgIGR1cmF0aW9uOiBEdXJhdGlvbjtcbiAgICByYXdOdWxsOiBzdHJpbmc7XG5cbiAgICBiaW5hcnlQbHVzTWludXM6IEJpbmFyeU9wO1xuICAgIGJpbmFyeU11bERpdjogQmluYXJ5T3A7XG4gICAgYmluYXJ5Q29tcGFyZU9wOiBCaW5hcnlPcDtcbiAgICBiaW5hcnlBbmRPcDogQmluYXJ5T3A7XG4gICAgYmluYXJ5T3JPcDogQmluYXJ5T3A7XG5cbiAgICAvLyBMaXRlcmFsIGZpZWxkIHBhcnNpbmcgZm9yIGluZ2VzdGluZyBpbmxpbmUgZmllbGRzIGFuZCBmcm9udG1hdHRlci5cbiAgICBhdG9tSW5saW5lRmllbGQ6IExpdGVyYWw7XG4gICAgaW5saW5lRmllbGRMaXN0OiBMaXRlcmFsW107XG4gICAgaW5saW5lRmllbGQ6IExpdGVyYWw7XG59XG5cbi8qKiBJbXBsZW1lbnRhdGlvbnMgZm9yIG1hbnkgcHJpbWl0aXZlcy4gKi9cbmV4cG9ydCBjb25zdCBQUklNSVRJVkVTID0gUC5jcmVhdGVMYW5ndWFnZTxQcmltaXRpdmVzTGFuZ3VhZ2U+KHtcbiAgICBudW1iZXI6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvLT9bMC05XSsoXFwuWzAtOV0rKT8vKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBOdW1iZXIucGFyc2VGbG9hdChzdHIpKVxuICAgICAgICAgICAgLmRlc2MoXCJudW1iZXJcIiksXG5cbiAgICAvLyBBIHF1b3RlLXN1cnJvdW5kZWQgc3RyaW5nIHdoaWNoIHN1cHBvcnRzIGVzY2FwZSBjaGFyYWN0ZXJzICgnXFwnKS5cbiAgICBzdHJpbmc6IChxKSA9PlxuICAgICAgICBQLnN0cmluZygnXCInKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgUC5hbHQocS5lc2NhcGVDaGFyYWN0ZXIsIFAubm9uZU9mKCdcIlxcXFwnKSlcbiAgICAgICAgICAgICAgICAgICAgLmF0TGVhc3QoMClcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hhcnMpID0+IGNoYXJzLmpvaW4oXCJcIikpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc2tpcChQLnN0cmluZygnXCInKSlcbiAgICAgICAgICAgIC5kZXNjKFwic3RyaW5nXCIpLFxuXG4gICAgZXNjYXBlQ2hhcmFjdGVyOiAoXykgPT5cbiAgICAgICAgUC5zdHJpbmcoXCJcXFxcXCIpXG4gICAgICAgICAgICAudGhlbihQLmFueSlcbiAgICAgICAgICAgIC5tYXAoKGVzY2FwZWQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgZXNjYXBpbmcgYSBiYWNrc2xhc2ggb3IgYSBxdW90ZSwgcGFzcyBpbiBvbiBpbiBlc2NhcGVkIGZvcm1cbiAgICAgICAgICAgICAgICBpZiAoZXNjYXBlZCA9PT0gJ1wiJykgcmV0dXJuICdcIic7XG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09IFwiXFxcXFwiKSByZXR1cm4gXCJcXFxcXCI7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gXCJcXFxcXCIgKyBlc2NhcGVkO1xuICAgICAgICAgICAgfSksXG5cbiAgICAvLyBBIGJvb2xlYW4gdHJ1ZS9mYWxzZSB2YWx1ZS5cbiAgICBib29sOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL3RydWV8ZmFsc2V8VHJ1ZXxGYWxzZS8pXG4gICAgICAgICAgICAubWFwKChzdHIpID0+IHN0ci50b0xvd2VyQ2FzZSgpID09IFwidHJ1ZVwiKVxuICAgICAgICAgICAgLmRlc2MoXCJib29sZWFuXCIpLFxuXG4gICAgLy8gQSB0YWcgb2YgdGhlIGZvcm0gJyNzdHVmZi9oZWxsby10aGVyZScuXG4gICAgdGFnOiAoXykgPT5cbiAgICAgICAgUC5zZXFNYXAoXG4gICAgICAgICAgICBQLnN0cmluZyhcIiNcIiksXG4gICAgICAgICAgICBQLmFsdChQLnJlZ2V4cCgvW15cXHUyMDAwLVxcdTIwNkZcXHUyRTAwLVxcdTJFN0YnIVwiIyQlJigpKissLjo7PD0+P0BeYHt8fX5cXFtcXF1cXFxcXFxzXS8pLmRlc2MoXCJ0ZXh0XCIpKS5tYW55KCksXG4gICAgICAgICAgICAoc3RhcnQsIHJlc3QpID0+IHN0YXJ0ICsgcmVzdC5qb2luKFwiXCIpXG4gICAgICAgICkuZGVzYyhcInRhZ1wiKSxcblxuICAgIC8vIEEgdmFyaWFibGUgaWRlbnRpZmllciwgd2hpY2ggaXMgYWxwaGFudW1lcmljIGFuZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IuLi4gZW1vamkuXG4gICAgaWRlbnRpZmllcjogKF8pID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5hbHQoUC5yZWdleHAoL1tcXHB7TGV0dGVyfSRdL3UpLCBQLnJlZ2V4cChFTU9KSV9SRUdFWCkuZGVzYyhcInRleHRcIikpLFxuICAgICAgICAgICAgUC5hbHQoUC5yZWdleHAoL1swLTlcXHB7TGV0dGVyfSRfLV0vdSksIFAucmVnZXhwKEVNT0pJX1JFR0VYKS5kZXNjKFwidGV4dFwiKSkubWFueSgpLFxuICAgICAgICAgICAgKGZpcnN0LCByZXN0KSA9PiBmaXJzdCArIHJlc3Quam9pbihcIlwiKVxuICAgICAgICApLmRlc2MoXCJ2YXJpYWJsZVwiKSxcblxuICAgIC8vIEFuIE9ic2lkaWFuIGxpbmsgb2YgdGhlIGZvcm0gW1s8bGluaz5dXS5cbiAgICBsaW5rOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL1xcW1xcWyhbXlxcW1xcXV0qPylcXF1cXF0vdSwgMSlcbiAgICAgICAgICAgIC5tYXAoKGxpbmtJbm5lcikgPT4gTGluay5wYXJzZUlubmVyKGxpbmtJbm5lcikpXG4gICAgICAgICAgICAuZGVzYyhcImZpbGUgbGlua1wiKSxcblxuICAgIC8vIEFuIGVtYmVkZGFibGUgbGluayB3aGljaCBjYW4gc3RhcnQgd2l0aCAnIScuIFRoaXMgb3ZlcmxhcHMgd2l0aCB0aGUgbm9ybWFsIG5lZ2F0aW9uIG9wZXJhdG9yLCBzbyBpdCBpcyBvbmx5XG4gICAgLy8gcHJvdmlkZWQgZm9yIG1ldGFkYXRhIHBhcnNpbmcuXG4gICAgZW1iZWRMaW5rOiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCIhXCIpLmF0TW9zdCgxKSwgcS5saW5rLCAocCwgbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHAubGVuZ3RoID4gMCkgbC5lbWJlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgfSkuZGVzYyhcImZpbGUgbGlua1wiKSxcblxuICAgIC8vIEJpbmFyeSBwbHVzIG9yIG1pbnVzIG9wZXJhdG9yLlxuICAgIGJpbmFyeVBsdXNNaW51czogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXCt8LS8pXG4gICAgICAgICAgICAubWFwKChzdHIpID0+IHN0ciBhcyBCaW5hcnlPcClcbiAgICAgICAgICAgIC5kZXNjKFwiJysnIG9yICctJ1wiKSxcblxuICAgIC8vIEJpbmFyeSB0aW1lcyBvciBkaXZpZGUgb3BlcmF0b3IuXG4gICAgYmluYXJ5TXVsRGl2OiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL1xcKnxcXC98JS8pXG4gICAgICAgICAgICAubWFwKChzdHIpID0+IHN0ciBhcyBCaW5hcnlPcClcbiAgICAgICAgICAgIC5kZXNjKFwiJyonIG9yICcvJyBvciAnJSdcIiksXG5cbiAgICAvLyBCaW5hcnkgY29tcGFyaXNvbiBvcGVyYXRvci5cbiAgICBiaW5hcnlDb21wYXJlT3A6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvPj18PD18IT18Pnw8fD0vKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIic+PScgb3IgJzw9JyBvciAnIT0nIG9yICc9JyBvciAnPicgb3IgJzwnXCIpLFxuXG4gICAgLy8gQmluYXJ5IGJvb2xlYW4gY29tYmluYXRpb24gb3BlcmF0b3IuXG4gICAgYmluYXJ5QW5kT3A6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvYW5kfCYvaSlcbiAgICAgICAgICAgIC5tYXAoKF9zdHIpID0+IFwiJlwiIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInYW5kJ1wiKSxcbiAgICBiaW5hcnlPck9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL29yfFxcfC9pKVxuICAgICAgICAgICAgLm1hcCgoX3N0cikgPT4gXCJ8XCIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIidvcidcIiksXG5cbiAgICAvLyBBIGRhdGUgd2hpY2ggY2FuIGJlIFlZWVktTU1bLUREVEhIOm1tOnNzXS5cbiAgICByb290RGF0ZTogKF8pID0+XG4gICAgICAgIFAuc2VxTWFwKFAucmVnZXhwKC9cXGR7NH0vKSwgUC5zdHJpbmcoXCItXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksICh5ZWFyLCBfLCBtb250aCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiBOdW1iZXIucGFyc2VJbnQoeWVhciksIG1vbnRoOiBOdW1iZXIucGFyc2VJbnQobW9udGgpIH0pO1xuICAgICAgICB9KS5kZXNjKFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXCIpLFxuICAgIGRhdGVTaG9ydGhhbmQ6IChfKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIC4uLk9iamVjdC5rZXlzKERBVEVfU0hPUlRIQU5EUylcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAubWFwKFAuc3RyaW5nKVxuICAgICAgICApIGFzIFAuUGFyc2VyPGtleW9mIHR5cGVvZiBEQVRFX1NIT1JUSEFORFM+LFxuICAgIGRhdGU6IChxKSA9PlxuICAgICAgICBjaGFpbk9wdDxEYXRlVGltZT4oXG4gICAgICAgICAgICBxLnJvb3REYXRlLFxuICAgICAgICAgICAgKHltOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIi1cIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIGRheSkgPT4geW0uc2V0KHsgZGF5OiBOdW1iZXIucGFyc2VJbnQoZGF5KSB9KSksXG4gICAgICAgICAgICAoeW1kOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIlRcIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIGhvdXIpID0+IHltZC5zZXQoeyBob3VyOiBOdW1iZXIucGFyc2VJbnQoaG91cikgfSkpLFxuICAgICAgICAgICAgKHltZGg6IERhdGVUaW1lKSA9PlxuICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiOlwiKSwgUC5yZWdleHAoL1xcZHsyfS8pLCAoXywgbWludXRlKSA9PlxuICAgICAgICAgICAgICAgICAgICB5bWRoLnNldCh7IG1pbnV0ZTogTnVtYmVyLnBhcnNlSW50KG1pbnV0ZSkgfSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHltZGhtOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIjpcIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIHNlY29uZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgeW1kaG0uc2V0KHsgc2Vjb25kOiBOdW1iZXIucGFyc2VJbnQoc2Vjb25kKSB9KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoeW1kaG1zOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLmFsdChcbiAgICAgICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCIuXCIpLCBQLnJlZ2V4cCgvXFxkezN9LyksIChfLCBtaWxsaXNlY29uZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHltZGhtcy5zZXQoeyBtaWxsaXNlY29uZDogTnVtYmVyLnBhcnNlSW50KG1pbGxpc2Vjb25kKSB9KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBQLnN1Y2NlZWQoeW1kaG1zKSAvLyBwYXNzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkdDogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiK1wiKS5vcihQLnN0cmluZyhcIi1cIikpLCBQLnJlZ2V4cCgvXFxkezEsMn0oOlxcZHsyfSk/LyksIChwbSwgaHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBkdC5zZXRab25lKFwiVVRDXCIgKyBwbSArIGhyLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCJaXCIpLCAoKSA9PiBkdC5zZXRab25lKFwidXRjXCIsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KSksXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiW1wiKSwgUC5yZWdleHAoL1swLTlBLVphLXorLVxcL10rL3UpLCBQLnN0cmluZyhcIl1cIiksIChfYSwgem9uZSwgX2IpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBkdC5zZXRab25lKHpvbmUsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgICAuYXNzZXJ0KChkdDogRGF0ZVRpbWUpID0+IGR0LmlzVmFsaWQsIFwidmFsaWQgZGF0ZVwiKVxuICAgICAgICAgICAgLmRlc2MoXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU11cIiksXG5cbiAgICAvLyBBIGRhdGUsIHBsdXMgdmFyaW91cyBzaG9ydGhhbmQgdGltZXMgb2YgZGF5IGl0IGNvdWxkIGJlLlxuICAgIGRhdGVQbHVzOiAocSkgPT5cbiAgICAgICAgUC5hbHQ8RGF0ZVRpbWU+KFxuICAgICAgICAgICAgcS5kYXRlU2hvcnRoYW5kLm1hcCgoZCkgPT4gREFURV9TSE9SVEhBTkRTW2RdKCkpLFxuICAgICAgICAgICAgcS5kYXRlXG4gICAgICAgICkuZGVzYyhcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXSBvciBpbiBzaG9ydGhhbmRcIiksXG5cbiAgICAvLyBBIGR1cmF0aW9uIG9mIHRpbWUuXG4gICAgZHVyYXRpb25UeXBlOiAoXykgPT5cbiAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhEVVJBVElPTl9UWVBFUylcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAubWFwKFAuc3RyaW5nKVxuICAgICAgICApIGFzIFAuUGFyc2VyPGtleW9mIHR5cGVvZiBEVVJBVElPTl9UWVBFUz4sXG4gICAgZHVyYXRpb246IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChxLm51bWJlciwgUC5vcHRXaGl0ZXNwYWNlLCBxLmR1cmF0aW9uVHlwZSwgKGNvdW50LCBfLCB0KSA9PlxuICAgICAgICAgICAgRFVSQVRJT05fVFlQRVNbdF0ubWFwVW5pdHMoKHgpID0+IHggKiBjb3VudClcbiAgICAgICAgKVxuICAgICAgICAgICAgLnNlcEJ5MShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLm9yKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAubWFwKChkdXJhdGlvbnMpID0+IGR1cmF0aW9ucy5yZWR1Y2UoKHAsIGMpID0+IHAucGx1cyhjKSkpXG4gICAgICAgICAgICAuZGVzYyhcImR1cmF0aW9uIGxpa2UgNGhyMm1pblwiKSxcblxuICAgIC8vIEEgcmF3IG51bGwgdmFsdWUuXG4gICAgcmF3TnVsbDogKF8pID0+IFAuc3RyaW5nKFwibnVsbFwiKSxcblxuICAgIC8vIElubGluZSBmaWVsZCB2YWx1ZSBwYXJzaW5nLlxuICAgIGF0b21JbmxpbmVGaWVsZDogKHEpID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgcS5kYXRlLFxuICAgICAgICAgICAgcS5kdXJhdGlvbi5tYXAoKGQpID0+IG5vcm1hbGl6ZUR1cmF0aW9uKGQpKSxcbiAgICAgICAgICAgIHEuc3RyaW5nLFxuICAgICAgICAgICAgcS50YWcsXG4gICAgICAgICAgICBxLmVtYmVkTGluayxcbiAgICAgICAgICAgIHEuYm9vbCxcbiAgICAgICAgICAgIHEubnVtYmVyLFxuICAgICAgICAgICAgcS5yYXdOdWxsXG4gICAgICAgICksXG4gICAgaW5saW5lRmllbGRMaXN0OiAocSkgPT4gcS5hdG9tSW5saW5lRmllbGQuc2VwQnkoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS5sb29rYWhlYWQocS5hdG9tSW5saW5lRmllbGQpKSxcbiAgICBpbmxpbmVGaWVsZDogKHEpID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgUC5zZXFNYXAocS5hdG9tSW5saW5lRmllbGQsIFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksIHEuaW5saW5lRmllbGRMaXN0LCAoZiwgX3MsIGwpID0+XG4gICAgICAgICAgICAgICAgW2ZdLmNvbmNhdChsKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHEuYXRvbUlubGluZUZpZWxkXG4gICAgICAgICksXG59KTtcblxuLyoqIEVtb2ppIHJlZ2V4LCBzdHJwcGluZyBhbnkgcmVnZXggZmxhZ3MgaXQgaGFzLiAqL1xuY29uc3QgRU1PSklfUkVHRVggPSBuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgXCJcIik7XG5cbi8qKiBQcm92aWRlcyBhIGxvb2t1cCB0YWJsZSBmb3IgdW5pdCBkdXJhdGlvbnMgb2YgdGhlIGdpdmVuIHR5cGUuICovXG5leHBvcnQgY29uc3QgRFVSQVRJT05fVFlQRVMgPSB7XG4gICAgeWVhcjogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLFxuICAgIHllYXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG4gICAgeXI6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSxcbiAgICB5cnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSxcblxuICAgIG1vbnRoOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLFxuICAgIG1vbnRoczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSxcbiAgICBtbzogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSxcbiAgICBtb3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG5cbiAgICB3ZWVrOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG4gICAgd2Vla3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3azogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLFxuICAgIHdrczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLFxuICAgIHc6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcblxuICAgIGRheTogRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEgfSksXG4gICAgZGF5czogRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEgfSksXG4gICAgZDogRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEgfSksXG5cbiAgICBob3VyOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG4gICAgaG91cnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBocjogRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLFxuICAgIGhyczogRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLFxuICAgIGg6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcblxuICAgIG1pbnV0ZTogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbWludXRlczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbWluOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSxcbiAgICBtaW5zOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSxcbiAgICBtOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSxcblxuICAgIHNlY29uZDogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgc2Vjb25kczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgc2VjOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSxcbiAgICBzZWNzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSxcbiAgICBzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSxcbn07XG5cbi8qKiBTaG9ydGhhbmQgZm9yIGNvbW1vbiBkYXRlcyAocmVsYXRpdmUgdG8gcmlnaHQgbm93KS4gKi9cbmV4cG9ydCBjb25zdCBEQVRFX1NIT1JUSEFORFMgPSB7XG4gICAgbm93OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLFxuICAgIHRvZGF5OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJkYXlcIiksXG4gICAgeWVzdGVyZGF5OiAoKSA9PlxuICAgICAgICBEYXRlVGltZS5sb2NhbCgpXG4gICAgICAgICAgICAuc3RhcnRPZihcImRheVwiKVxuICAgICAgICAgICAgLm1pbnVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pKSxcbiAgICB0b21vcnJvdzogKCkgPT5cbiAgICAgICAgRGF0ZVRpbWUubG9jYWwoKVxuICAgICAgICAgICAgLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgICAgICAgIC5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pKSxcbiAgICBzb3c6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcIndlZWtcIiksXG4gICAgXCJzdGFydC1vZi13ZWVrXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcIndlZWtcIiksXG4gICAgZW93OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwid2Vla1wiKSxcbiAgICBcImVuZC1vZi13ZWVrXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJ3ZWVrXCIpLFxuICAgIHNveTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwieWVhclwiKSxcbiAgICBcInN0YXJ0LW9mLXllYXJcIjogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwieWVhclwiKSxcbiAgICBlb3k6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJ5ZWFyXCIpLFxuICAgIFwiZW5kLW9mLXllYXJcIjogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZihcInllYXJcIiksXG4gICAgc29tOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJtb250aFwiKSxcbiAgICBcInN0YXJ0LW9mLW1vbnRoXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcIm1vbnRoXCIpLFxuICAgIGVvbTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZihcIm1vbnRoXCIpLFxuICAgIFwiZW5kLW9mLW1vbnRoXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJtb250aFwiKSxcbn07XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEV4cHJlc3Npb24gTGFuZ3VhZ2UgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IHR5cGUgUG9zdGZpeEZyYWdtZW50ID1cbiAgICB8IHsgdHlwZTogXCJkb3RcIjsgZXhwcjogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogXCJpbmRleFwiOyBleHByOiBFeHByZXNzaW9uIH1cbiAgICB8IHsgdHlwZTogXCJmdW5jdGlvblwiOyBleHByczogRXhwcmVzc2lvbltdIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwcmVzc2lvbkxhbmd1YWdlIHtcbiAgICB2YXJpYWJsZTogVmFyaWFibGVFeHByZXNzaW9uO1xuICAgIG51bWJlcjogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgYm9vbDogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgc3RyaW5nOiBMaXRlcmFsRXhwcmVzc2lvbjtcbiAgICBkYXRlOiBMaXRlcmFsRXhwcmVzc2lvbjtcbiAgICBkdXJhdGlvbjogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgbGluazogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgbnVsbDogTGl0ZXJhbEV4cHJlc3Npb247XG5cbiAgICBsaXN0OiBMaXN0RXhwcmVzc2lvbjtcbiAgICBvYmplY3Q6IE9iamVjdEV4cHJlc3Npb247XG5cbiAgICBuZWdhdGVkOiBFeHByZXNzaW9uO1xuICAgIGF0b206IEV4cHJlc3Npb247XG4gICAgaW5kZXg6IEV4cHJlc3Npb247XG4gICAgbGFtYmRhOiBMYW1iZGFFeHByZXNzaW9uO1xuXG4gICAgLy8gUG9zdGZpeCBwYXJzZXJzIGZvciBmdW5jdGlvbiBjYWxscyAmIHRoZSBsaWtlLlxuICAgIGRvdFBvc3RmaXg6IFBvc3RmaXhGcmFnbWVudDtcbiAgICBpbmRleFBvc3RmaXg6IFBvc3RmaXhGcmFnbWVudDtcbiAgICBmdW5jdGlvblBvc3RmaXg6IFBvc3RmaXhGcmFnbWVudDtcblxuICAgIC8vIEJpbmFyeSBvcCBwYXJzZXJzLlxuICAgIGJpbmFyeU11bERpdjogRXhwcmVzc2lvbjtcbiAgICBiaW5hcnlQbHVzTWludXM6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5Q29tcGFyZTogRXhwcmVzc2lvbjtcbiAgICBiaW5hcnlCb29sZWFuOiBFeHByZXNzaW9uO1xuICAgIGJpbmFyeU9wOiBFeHByZXNzaW9uO1xuICAgIHBhcmVuczogRXhwcmVzc2lvbjtcbiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIFBhcnNlIGZvciB0aGUgZGF0YWNvcmUgZXhwcmVzc2lvbiBsYW5ndWFnZSwgd2hpY2ggcHJvdmlkZXMgc2ltcGxlIGFuZCB2YWd1ZWx5IEpTLWxvb2tpbmcgY29tcHV0YXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBSRVNTSU9OID0gUC5jcmVhdGVMYW5ndWFnZTxFeHByZXNzaW9uTGFuZ3VhZ2U+KHtcbiAgICAvLyBGaWVsZCBwYXJzaW5nLlxuICAgIHZhcmlhYmxlOiAoXykgPT4gUFJJTUlUSVZFUy5pZGVudGlmaWVyLm1hcChFeHByZXNzaW9ucy52YXJpYWJsZSkuZGVzYyhcInZhcmlhYmxlXCIpLFxuICAgIG51bWJlcjogKF8pID0+IFBSSU1JVElWRVMubnVtYmVyLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKS5kZXNjKFwibnVtYmVyXCIpLFxuICAgIHN0cmluZzogKF8pID0+IFBSSU1JVElWRVMuc3RyaW5nLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKS5kZXNjKFwic3RyaW5nXCIpLFxuICAgIGJvb2w6IChfKSA9PiBQUklNSVRJVkVTLmJvb2wubWFwKEV4cHJlc3Npb25zLmxpdGVyYWwpLmRlc2MoXCJib29sZWFuXCIpLFxuICAgIGRhdGU6IChfKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihcImRhdGVcIiwgUFJJTUlUSVZFUy5kYXRlUGx1cylcbiAgICAgICAgICAgIC5tYXAoKFtfZnVuYywgZGF0ZV0pID0+IEV4cHJlc3Npb25zLmxpdGVyYWwoZGF0ZSkpXG4gICAgICAgICAgICAuZGVzYyhcImRhdGVcIiksXG4gICAgZHVyYXRpb246IChfKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihcImR1clwiLCBQUklNSVRJVkVTLmR1cmF0aW9uKVxuICAgICAgICAgICAgLm1hcCgoW19mdW5jLCBkdXJdKSA9PiBFeHByZXNzaW9ucy5saXRlcmFsKGR1cikpXG4gICAgICAgICAgICAuZGVzYyhcImR1cmF0aW9uXCIpLFxuICAgIG51bGw6IChfKSA9PiBQUklNSVRJVkVTLnJhd051bGwubWFwKChfKSA9PiBFeHByZXNzaW9ucy5OVUxMKSxcbiAgICBsaW5rOiAoXykgPT4gUFJJTUlUSVZFUy5saW5rLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKSxcbiAgICBsaXN0OiAocSkgPT5cbiAgICAgICAgcS5leHByZXNzaW9uXG4gICAgICAgICAgICAuc2VwQnkoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSlcbiAgICAgICAgICAgIC53cmFwKFAuc3RyaW5nKFwiW1wiKS5za2lwKFAub3B0V2hpdGVzcGFjZSksIFAub3B0V2hpdGVzcGFjZS50aGVuKFAuc3RyaW5nKFwiXVwiKSkpXG4gICAgICAgICAgICAubWFwKChsKSA9PiBFeHByZXNzaW9ucy5saXN0KGwpKVxuICAgICAgICAgICAgLmRlc2MoXCJsaXN0XCIpLFxuICAgIG9iamVjdDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUFJJTUlUSVZFUy5pZGVudGlmaWVyLm9yKFBSSU1JVElWRVMuc3RyaW5nKSxcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiOlwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksXG4gICAgICAgICAgICBxLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAobmFtZSwgX3NlcCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBuYW1lLCB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgICAgICAuc2VwQnkoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSlcbiAgICAgICAgICAgIC53cmFwKFAuc3RyaW5nKFwie1wiKS5za2lwKFAub3B0V2hpdGVzcGFjZSksIFAub3B0V2hpdGVzcGFjZS50aGVuKFAuc3RyaW5nKFwifVwiKSkpXG4gICAgICAgICAgICAubWFwKCh2YWxzKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlczogUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvbj4gPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiB2YWxzKSByZXNbZW50cnkubmFtZV0gPSBlbnRyeS52YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gRXhwcmVzc2lvbnMub2JqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmRlc2MoXCJvYmplY3QgKCd7IGE6IDEsIGI6IDIgfScpXCIpLFxuXG4gICAgYXRvbTogKHEpID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgLy8gUGxhY2UgZW1iZWQgbGlua3MgYWJvdmUgbmVnYXRlZCBmaWVsZHMgYXMgdGhleSBhcmUgdGhlIHNwZWNpYWwgcGFyc2VyIGNhc2UgJyFbW3RoaW5nXV0nIGFuZCBhcmUgZ2VuZXJhbGx5IHVuYW1iaWdpb3VzLlxuICAgICAgICAgICAgUFJJTUlUSVZFUy5lbWJlZExpbmsubWFwKChsKSA9PiBFeHByZXNzaW9ucy5saXRlcmFsKGwpKSxcbiAgICAgICAgICAgIHEubmVnYXRlZCxcbiAgICAgICAgICAgIHEubGluayxcbiAgICAgICAgICAgIHEubGlzdCxcbiAgICAgICAgICAgIHEub2JqZWN0LFxuICAgICAgICAgICAgcS5sYW1iZGEsXG4gICAgICAgICAgICBxLnBhcmVucyxcbiAgICAgICAgICAgIHEuYm9vbCxcbiAgICAgICAgICAgIHEubnVtYmVyLFxuICAgICAgICAgICAgcS5zdHJpbmcsXG4gICAgICAgICAgICBxLmRhdGUsXG4gICAgICAgICAgICBxLmR1cmF0aW9uLFxuICAgICAgICAgICAgcS5udWxsLFxuICAgICAgICAgICAgcS52YXJpYWJsZVxuICAgICAgICApLFxuICAgIGluZGV4OiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAocS5hdG9tLCBQLmFsdChxLmRvdFBvc3RmaXgsIHEuaW5kZXhQb3N0Zml4LCBxLmZ1bmN0aW9uUG9zdGZpeCkubWFueSgpLCAob2JqLCBwb3N0Zml4ZXMpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICBmb3IgKGxldCBwb3N0IG9mIHBvc3RmaXhlcykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocG9zdC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkb3RcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4cHJlc3Npb25zLmluZGV4KHJlc3VsdCwgRXhwcmVzc2lvbnMubGl0ZXJhbChwb3N0LmV4cHIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5kZXhcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4cHJlc3Npb25zLmluZGV4KHJlc3VsdCwgcG9zdC5leHByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4cHJlc3Npb25zLmZ1bmMocmVzdWx0LCBwb3N0LmV4cHJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSksXG4gICAgbmVnYXRlZDogKHEpID0+IFAuc2VxTWFwKFAuc3RyaW5nKFwiIVwiKSwgcS5pbmRleCwgKF8sIGZpZWxkKSA9PiBFeHByZXNzaW9ucy5uZWdhdGUoZmllbGQpKS5kZXNjKFwibmVnYXRlZCBmaWVsZFwiKSxcbiAgICBwYXJlbnM6IChxKSA9PiBxLmV4cHJlc3Npb24udHJpbShQLm9wdFdoaXRlc3BhY2UpLndyYXAoUC5zdHJpbmcoXCIoXCIpLCBQLnN0cmluZyhcIilcIikpLFxuICAgIGxhbWJkYTogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUFJJTUlUSVZFUy5pZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAgICAgLndyYXAoUC5zdHJpbmcoXCIoXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSwgUC5zdHJpbmcoXCIpXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSksXG4gICAgICAgICAgICBQLnN0cmluZyhcIj0+XCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKSxcbiAgICAgICAgICAgIHEuZXhwcmVzc2lvbixcbiAgICAgICAgICAgIChpZGVudCwgX2lnbm9yZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImxhbWJkYVwiLCBhcmd1bWVudHM6IGlkZW50LCB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApLFxuXG4gICAgZG90UG9zdGZpeDogKHEpID0+IFAuc2VxTWFwKFAuc3RyaW5nKFwiLlwiKSwgUFJJTUlUSVZFUy5pZGVudGlmaWVyLCAoXywgZXhwcikgPT4gKHsgdHlwZTogXCJkb3RcIiwgZXhwciB9KSksXG4gICAgaW5kZXhQb3N0Zml4OiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAoXG4gICAgICAgICAgICBQLnN0cmluZyhcIltcIiksXG4gICAgICAgICAgICBQLm9wdFdoaXRlc3BhY2UsXG4gICAgICAgICAgICBxLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBQLm9wdFdoaXRlc3BhY2UsXG4gICAgICAgICAgICBQLnN0cmluZyhcIl1cIiksXG4gICAgICAgICAgICAoXywgXzIsIGV4cHIsIF8zLCBfNCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiaW5kZXhcIiwgZXhwciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgIGZ1bmN0aW9uUG9zdGZpeDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCIoXCIpLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCIpXCIpLFxuICAgICAgICAgICAgKF8sIF8xLCBleHBycywgXzIsIF8zKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCBleHBycyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICApLFxuXG4gICAgLy8gVGhlIHByZWNlZGVuY2UgaGllcmFyY2h5IG9mIG9wZXJhdG9ycyAtIG11bHRpcGx5L2RpdmlkZSwgYWRkL3N1YnRyYWN0LCBjb21wYXJlLCBhbmQgdGhlbiBib29sZWFuIG9wZXJhdGlvbnMuXG4gICAgYmluYXJ5TXVsRGl2OiAocSkgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuaW5kZXgsIFBSSU1JVElWRVMuYmluYXJ5TXVsRGl2LCBFeHByZXNzaW9ucy5iaW5hcnlPcCksXG4gICAgYmluYXJ5UGx1c01pbnVzOiAocSkgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5TXVsRGl2LCBQUklNSVRJVkVTLmJpbmFyeVBsdXNNaW51cywgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeUNvbXBhcmU6IChxKSA9PiBjcmVhdGVCaW5hcnlQYXJzZXIocS5iaW5hcnlQbHVzTWludXMsIFBSSU1JVElWRVMuYmluYXJ5Q29tcGFyZU9wLCBFeHByZXNzaW9ucy5iaW5hcnlPcCksXG4gICAgYmluYXJ5Qm9vbGVhbjogKHEpID0+XG4gICAgICAgIGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeUNvbXBhcmUsIFBSSU1JVElWRVMuYmluYXJ5QW5kT3Aub3IoUFJJTUlUSVZFUy5iaW5hcnlPck9wKSwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeU9wOiAocSkgPT4gcS5iaW5hcnlCb29sZWFuLFxuXG4gICAgZXhwcmVzc2lvbjogKHEpID0+IHEuYmluYXJ5T3AsXG59KTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFF1ZXJ5IExhbmd1YWdlIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKiogU3VwcG9ydGVkIHR5cGVzIGluIHRoZSBncmFtbWFyIGZvciBpbmRleCBxdWVyaWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWVyeUxhbmd1YWdlIHtcbiAgICBxdWVyeVRhZzogSW5kZXhUYWdnZWQ7XG4gICAgcXVlcnlJZDogSW5kZXhJZDtcbiAgICBxdWVyeVR5cGU6IEluZGV4VHlwZWQ7XG4gICAgcXVlcnlQYXRoOiBJbmRleFBhdGg7XG4gICAgcXVlcnlQYXJlbnRPZjogSW5kZXhQYXJlbnRPZjtcbiAgICBxdWVyeUNoaWxkT2Y6IEluZGV4Q2hpbGRPZjtcbiAgICBxdWVyeVNpbXBsZUxpbmtlZDogSW5kZXhMaW5rZWQ7XG4gICAgcXVlcnlMaW5rZWQ6IEluZGV4TGlua2VkO1xuICAgIHF1ZXJ5RXhpc3RzOiBJbmRleEZpZWxkO1xuICAgIHF1ZXJ5UXVvdGVkRXhwcmVzc2lvbjogSW5kZXhFeHByZXNzaW9uO1xuICAgIHF1ZXJ5UmF3RXhwcmVzc2lvbjogSW5kZXhFeHByZXNzaW9uO1xuICAgIHF1ZXJ5TmVnYXRlOiBJbmRleE5vdDtcbiAgICBxdWVyeVBhcmVuczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeUF0b206IEluZGV4UXVlcnk7XG4gICAgcXVlcnlBbmRzOiBJbmRleFF1ZXJ5O1xuICAgIHF1ZXJ5T3JzOiBJbmRleFF1ZXJ5O1xuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5O1xufVxuXG4vKipcbiAqIFBhcnNlciBmb3IgdGhlIHF1ZXJ5IGxhbmd1YWdlLiBEaWQgSSByZWFsbHkgbmVlZCBhIHF1ZXJ5IGxhbmd1YWdlIGluc3RlYWQgb2YganVzdCBhIGJldHRlciBVST8gUHJvYmFibHkgbm90LlxuICogQnV0IHF1ZXJ5IGxhbmd1YWdlcyBhcmUgZnVuIGZvciB0aGUgd2hvbGUgZmFtaWx5IGFuZCBhdCBzb21lIHBvaW50IHlvdSBnZXQgc28gdXNlZCB0byB3cml0aW5nIHRoZW0gdGhhdFxuICogeW91IGRvbid0IHN0b3AgdG8gdGhpbmsgaWYgeW91ICpuZWVkKiB0byB3cml0ZSB0aGVtIGFueW1vcmUuIEl0J3MgZ29vZCB0eXBpbmcgcHJhY3RpY2UgZm9yIGV2ZXJ5b25lLlxuICovXG5leHBvcnQgY29uc3QgUVVFUlkgPSBQLmNyZWF0ZUxhbmd1YWdlPFF1ZXJ5TGFuZ3VhZ2U+KHtcbiAgICBxdWVyeVRhZzogKF8pID0+IFBSSU1JVElWRVMudGFnLm1hcCgodmFsdWUpID0+ICh7IHR5cGU6IFwidGFnZ2VkXCIsIHZhbHVlIH0pKSxcbiAgICBxdWVyeUlkOiAoXykgPT4gY3JlYXRlRnVuY3Rpb24oXCJpZFwiLCBQUklNSVRJVkVTLnN0cmluZykubWFwKChbXywgaWRdKSA9PiAoeyB0eXBlOiBcImlkXCIsIHZhbHVlOiBpZCB9KSksXG4gICAgcXVlcnlUeXBlOiAoXykgPT5cbiAgICAgICAgUC5zdHJpbmcoXCJAXCIpXG4gICAgICAgICAgICAudGhlbihQUklNSVRJVkVTLmlkZW50aWZpZXIpXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSkgPT4gKHsgdHlwZTogXCJ0eXBlZFwiLCB2YWx1ZTogdmFsdWUgfSkpLFxuXG4gICAgcXVlcnlQYXRoOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oUC5yZWdleHAoL2U/cGF0aC9pKS5kZXNjKFwiW2VdcGF0aFwiKSwgUFJJTUlUSVZFUy5zdHJpbmcpLm1hcCgoW2Z1bmMsIHBhdGhdKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJwYXRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogcGF0aCxcbiAgICAgICAgICAgIGV4YWN0OiBmdW5jLnRvTG93ZXJDYXNlKCkgPT09IFwiZXBhdGhcIixcbiAgICAgICAgfSkpLFxuXG4gICAgcXVlcnlQYXJlbnRPZjogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9wYXJlbnRvZnxzdXBlcnRyZWUvaSkuZGVzYyhcInBhcmVudG9mXCIpLCBxLnF1ZXJ5KS5tYXAoKFtmdW5jLCBjaGlsZHJlbl0pID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcInBhcmVudC1vZlwiLFxuICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PT0gXCJzdXBlcnRyZWVcIixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5Q2hpbGRPZjogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9jaGlsZG9mfHN1YnRyZWUvaSkuZGVzYyhcImNoaWxkb2ZcIiksIHEucXVlcnkpLm1hcCgoW2Z1bmMsIHBhcmVudHNdKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJjaGlsZC1vZlwiLFxuICAgICAgICAgICAgcGFyZW50cyxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZnVuYy50b0xvd2VyQ2FzZSgpID09PSBcInN1YnRyZWVcIixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5U2ltcGxlTGlua2VkOiAoXykgPT5cbiAgICAgICAgUFJJTUlUSVZFUy5saW5rLm1hcCgobGluaykgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwibGlua2VkXCIsXG4gICAgICAgICAgICBzb3VyY2U6IHsgdHlwZTogXCJsaW5rXCIsIHZhbHVlOiBsaW5rIH0sXG4gICAgICAgICAgICBkaXJlY3Rpb246IFwiaW5jb21pbmdcIixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5TGlua2VkOiAocSkgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oUC5yZWdleHAoL2xpbmtzdG98bGlua2VkZnJvbXxjb25uZWN0ZWQvaSkuZGVzYyhcImNvbm5lY3RlZFwiKSwgcS5xdWVyeSkubWFwKChbZnVuYywgc291cmNlXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwibGlua2VkXCIsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICBkaXJlY3Rpb246XG4gICAgICAgICAgICAgICAgZnVuYy50b0xvd2VyQ2FzZSgpID09IFwibGlua3N0b1wiID8gXCJpbmNvbWluZ1wiIDogZnVuYy50b0xvd2VyQ2FzZSgpID09IFwibGlua2VkZnJvbVwiID8gXCJvdXRnb2luZ1wiIDogXCJib3RoXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUV4aXN0czogKF8pID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9leGlzdHMvaSkuZGVzYyhcImV4aXN0c1wiKSwgUFJJTUlUSVZFUy5pZGVudGlmaWVyLm9yKFBSSU1JVElWRVMuc3RyaW5nKSkubWFwKFxuICAgICAgICAgICAgKFtfZnVuYywgaWRlbnRdKSA9PiAoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZmllbGRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogaWRlbnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgIHF1ZXJ5UXVvdGVkRXhwcmVzc2lvbjogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9leHByL2kpLmRlc2MoXCJleHByXCIpLCBFWFBSRVNTSU9OLmV4cHJlc3Npb24pLm1hcCgoW18sIGV4cHJdKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJleHByZXNzaW9uXCIsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICB9KSksXG4gICAgcXVlcnlSYXdFeHByZXNzaW9uOiAocSkgPT4gRVhQUkVTU0lPTi5iaW5hcnlDb21wYXJlLm1hcCgoZXhwcikgPT4gKHsgdHlwZTogXCJleHByZXNzaW9uXCIsIGV4cHJlc3Npb246IGV4cHIgfSkpLFxuXG4gICAgcXVlcnlQYXJlbnM6IChxKSA9PiBxLnF1ZXJ5LnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS53cmFwKFAuc3RyaW5nKFwiKFwiKSwgUC5zdHJpbmcoXCIpXCIpKSxcbiAgICBxdWVyeU5lZ2F0ZTogKHEpID0+XG4gICAgICAgIFAuc3RyaW5nKFwiIVwiKVxuICAgICAgICAgICAgLnNraXAoUC5vcHRXaGl0ZXNwYWNlKVxuICAgICAgICAgICAgLnRoZW4ocS5xdWVyeUF0b20pXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm5vdFwiLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHZhbHVlLFxuICAgICAgICAgICAgfSkpLFxuICAgIHF1ZXJ5QXRvbTogKHEpID0+XG4gICAgICAgIFAuYWx0PEluZGV4UXVlcnk+KFxuICAgICAgICAgICAgcS5xdWVyeVBhcmVucyxcbiAgICAgICAgICAgIHEucXVlcnlOZWdhdGUsXG4gICAgICAgICAgICBxLnF1ZXJ5U2ltcGxlTGlua2VkLFxuICAgICAgICAgICAgcS5xdWVyeVRhZyxcbiAgICAgICAgICAgIHEucXVlcnlUeXBlLFxuICAgICAgICAgICAgcS5xdWVyeUlkLFxuICAgICAgICAgICAgcS5xdWVyeUV4aXN0cyxcbiAgICAgICAgICAgIHEucXVlcnlDaGlsZE9mLFxuICAgICAgICAgICAgcS5xdWVyeVBhcmVudE9mLFxuICAgICAgICAgICAgcS5xdWVyeUxpbmtlZCxcbiAgICAgICAgICAgIHEucXVlcnlQYXRoLFxuICAgICAgICAgICAgcS5xdWVyeVF1b3RlZEV4cHJlc3Npb24sXG4gICAgICAgICAgICAvLyBFeHByZXNzaW9ucyBhcmUgZXNzZW50aWFsbHkgdGhlIFwiY2F0Y2gtYWxsXCIgb2Ygb3RoZXJ3aXNlIHVucGFyc2VhYmxlIHRlcm1zLCBzbyB0aGV5IHNob3VsZCBnbyBhYnNvbHV0ZSBsYXN0LlxuICAgICAgICAgICAgcS5xdWVyeVJhd0V4cHJlc3Npb25cbiAgICAgICAgKSxcbiAgICBxdWVyeUFuZHM6IChxKSA9PlxuICAgICAgICBjcmVhdGVCaW5hcnlQYXJzZXIocS5xdWVyeUF0b20sIFBSSU1JVElWRVMuYmluYXJ5QW5kT3AsIChsZWZ0LCBfb3AsIHJpZ2h0KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJhbmRcIixcbiAgICAgICAgICAgIGVsZW1lbnRzOiBbbGVmdCwgcmlnaHRdLFxuICAgICAgICB9KSksXG4gICAgcXVlcnlPcnM6IChxKSA9PlxuICAgICAgICBjcmVhdGVCaW5hcnlQYXJzZXIocS5xdWVyeUFuZHMsIFBSSU1JVElWRVMuYmluYXJ5T3JPcCwgKGxlZnQsIF9vcCwgcmlnaHQpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcIm9yXCIsXG4gICAgICAgICAgICBlbGVtZW50czogW2xlZnQsIHJpZ2h0XSxcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5OiAocSkgPT4gcS5xdWVyeU9ycy50cmltKFAub3B0V2hpdGVzcGFjZSksXG59KTtcblxuLyoqIFJldHVybiBhIG5ldyBwYXJzZXIgd2hpY2ggZXhlY3V0ZXMgdGhlIHVuZGVybHlpbmcgcGFyc2VyIGFuZCByZXR1cm5zIGl0J3MgcmF3IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlUmF3PFQ+KGJhc2U6IFAuUGFyc2VyPFQ+KTogUC5QYXJzZXI8W1QsIHN0cmluZ10+IHtcbiAgICByZXR1cm4gUC5jdXN0b20oKF9zdWNjZXNzLCBfZmFpbHVyZSkgPT4ge1xuICAgICAgICByZXR1cm4gKGlucHV0LCBpKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gKGJhc2UgYXMgYW55KS5fKGlucHV0LCBpKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXR1cykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlc3VsdCwgeyB2YWx1ZTogW3Jlc3VsdC52YWx1ZSwgaW5wdXQuc3Vic3RyaW5nKGksIHJlc3VsdC5pbmRleCldIH0pO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG4vKiogQ3JlYXRlIGEgbGVmdC1hc3NvY2lhdGl2ZSBiaW5hcnkgcGFyc2VyIHdoaWNoIHBhcnNlcyB0aGUgZ2l2ZW4gc3ViLWVsZW1lbnQgYW5kIHNlcGFyYXRvci4gSGFuZGxlcyB3aGl0ZXNwYWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJpbmFyeVBhcnNlcjxULCBVPihcbiAgICBjaGlsZDogUC5QYXJzZXI8VD4sXG4gICAgc2VwOiBQLlBhcnNlcjxVPixcbiAgICBjb21iaW5lOiAoYTogVCwgYjogVSwgYzogVCkgPT4gVFxuKTogUC5QYXJzZXI8VD4ge1xuICAgIHJldHVybiBQLnNlcU1hcChjaGlsZCwgUC5zZXEoUC5vcHRXaGl0ZXNwYWNlLCBzZXAsIFAub3B0V2hpdGVzcGFjZSwgY2hpbGQpLm1hbnkoKSwgKGZpcnN0LCByZXN0KSA9PiB7XG4gICAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PSAwKSByZXR1cm4gZmlyc3Q7XG5cbiAgICAgICAgbGV0IG5vZGUgPSBjb21iaW5lKGZpcnN0LCByZXN0WzBdWzFdLCByZXN0WzBdWzNdKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHJlc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBub2RlID0gY29tYmluZShub2RlLCByZXN0W2luZGV4XVsxXSwgcmVzdFtpbmRleF1bM10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhcnNlciB3aGljaCBwYXJzZXMgXFw8ZnVuY3Rpb25cXD4oXFw8YXJnc1xcPikuXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uPFQ+KGZ1bmM6IHN0cmluZyB8IFAuUGFyc2VyPHN0cmluZz4sIGFyZ3M6IFAuUGFyc2VyPFQ+KTogUC5QYXJzZXI8W3N0cmluZywgVF0+IHtcbiAgICBjb25zdCByZWFsRnVuYyA9IHR5cGVvZiBmdW5jID09PSBcInN0cmluZ1wiID8gUC5zdHJpbmcoZnVuYykgOiBmdW5jO1xuICAgIHJldHVybiBQLnNlcU1hcChcbiAgICAgICAgcmVhbEZ1bmMuc2tpcChQLm9wdFdoaXRlc3BhY2UpLFxuICAgICAgICBhcmdzLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS53cmFwKFAuc3RyaW5nKFwiKFwiKSwgUC5zdHJpbmcoXCIpXCIpKSxcbiAgICAgICAgKGYsIGEpID0+IFtmLCBhXVxuICAgICk7XG59XG5cbi8qKiBDaGFpbnMgYSBsaXN0IG9mIHBhcnNlcnM7IHRoZSBmaXJzdCBvbmUgbXVzdCBzdWNjZWVkLCBidXQgZm9sbG93aW5nIG9uZXMgbWF5IGZhaWwgd2l0aG91dCBmYWlsaW5nIHRoZSBvdmVyYWxsIHBhcnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluT3B0PFQ+KGJhc2U6IFAuUGFyc2VyPFQ+LCAuLi5mdW5jczogKChyOiBUKSA9PiBQLlBhcnNlcjxUPilbXSk6IFAuUGFyc2VyPFQ+IHtcbiAgICByZXR1cm4gUC5jdXN0b20oKF9zdWNjZXNzLCBfZmFpbHVyZSkgPT4ge1xuICAgICAgICByZXR1cm4gKGlucHV0LCBpKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gKGJhc2UgYXMgYW55KS5fKGlucHV0LCBpKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXR1cykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jcykge1xuICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gKGZ1bmMocmVzdWx0LnZhbHVlIGFzIFQpIGFzIGFueSkuXyhpbnB1dCwgcmVzdWx0LmluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHQuc3RhdHVzKSByZXR1cm4gcmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgZXhwcmVzc2lvbnNcbiAqL1xuaW1wb3J0IHsgRGF0ZVRpbWUsIER1cmF0aW9uIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgcmVuZGVyTWluaW1hbERhdGUsIHJlbmRlck1pbmltYWxEdXJhdGlvbiB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG4vLyBSZS1leHBvcnRzIG9mIHVzZWZ1bCBnZW5lcmljIHR5cGVzLlxuZXhwb3J0IHsgTGluayB9O1xuXG4vKiogU2hvcnRoYW5kIGZvciBhIG1hcHBpbmcgZnJvbSBrZXlzIHRvIHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIERhdGFPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuLyoqIFRoZSBsaXRlcmFsIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgcXVlcnkgZW5naW5lLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFR5cGUgPVxuICAgIHwgXCJib29sZWFuXCJcbiAgICB8IFwibnVtYmVyXCJcbiAgICB8IFwic3RyaW5nXCJcbiAgICB8IFwiZGF0ZVwiXG4gICAgfCBcImR1cmF0aW9uXCJcbiAgICB8IFwibGlua1wiXG4gICAgfCBcImFycmF5XCJcbiAgICB8IFwib2JqZWN0XCJcbiAgICB8IFwiZnVuY3Rpb25cIlxuICAgIHwgXCJudWxsXCI7XG4vKiogVGhlIHJhdyB2YWx1ZXMgdGhhdCBhIGxpdGVyYWwgY2FuIHRha2Ugb24uICovXG5leHBvcnQgdHlwZSBMaXRlcmFsID1cbiAgICB8IGJvb2xlYW5cbiAgICB8IG51bWJlclxuICAgIHwgc3RyaW5nXG4gICAgfCBEYXRlVGltZVxuICAgIHwgRHVyYXRpb25cbiAgICB8IExpbmtcbiAgICB8IEFycmF5PExpdGVyYWw+XG4gICAgfCBEYXRhT2JqZWN0XG4gICAgfCBGdW5jdGlvblxuICAgIHwgbnVsbDtcblxuLyoqIE1hcHMgdGhlIHN0cmluZyB0eXBlIHRvIGl0J3MgZXh0ZXJuYWwsIEFQSS1mYWNpbmcgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgdHlwZSBMaXRlcmFsUmVwcjxUIGV4dGVuZHMgTGl0ZXJhbFR5cGU+ID0gVCBleHRlbmRzIFwiYm9vbGVhblwiXG4gICAgPyBib29sZWFuXG4gICAgOiBUIGV4dGVuZHMgXCJudW1iZXJcIlxuICAgID8gbnVtYmVyXG4gICAgOiBUIGV4dGVuZHMgXCJzdHJpbmdcIlxuICAgID8gc3RyaW5nXG4gICAgOiBUIGV4dGVuZHMgXCJkdXJhdGlvblwiXG4gICAgPyBEdXJhdGlvblxuICAgIDogVCBleHRlbmRzIFwiZGF0ZVwiXG4gICAgPyBEYXRlVGltZVxuICAgIDogVCBleHRlbmRzIFwibnVsbFwiXG4gICAgPyBudWxsXG4gICAgOiBUIGV4dGVuZHMgXCJsaW5rXCJcbiAgICA/IExpbmtcbiAgICA6IFQgZXh0ZW5kcyBcImFycmF5XCJcbiAgICA/IEFycmF5PExpdGVyYWw+XG4gICAgOiBUIGV4dGVuZHMgXCJvYmplY3RcIlxuICAgID8gRGF0YU9iamVjdFxuICAgIDogVCBleHRlbmRzIFwiZnVuY3Rpb25cIlxuICAgID8gRnVuY3Rpb25cbiAgICA6IGFueTtcblxuLyoqIEEgd3JhcHBlZCBsaXRlcmFsIHZhbHVlIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBvbi4gKi9cbmV4cG9ydCB0eXBlIFdyYXBwZWRMaXRlcmFsID1cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwic3RyaW5nXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcIm51bWJlclwiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJib29sZWFuXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImRhdGVcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiZHVyYXRpb25cIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwibGlua1wiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJhcnJheVwiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJvYmplY3RcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiZnVuY3Rpb25cIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwibnVsbFwiPjtcblxuLyoqIENvbWJpbmVzIGEgdGV4dHVhbCB0eXBlIGFuZCB2YWx1ZTsgcHJpbWFyaWx5IHVzZWZ1bCBmb3Igc3dpdGNoaW5nIG9uLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpdGVyYWxXcmFwcGVyPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZT4ge1xuICAgIHR5cGU6IFQ7XG4gICAgdmFsdWU6IExpdGVyYWxSZXByPFQ+O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqICBVdGlsaXR5IGxpYnJhcnkgZm9yIGhhbmRsaW5nIGxpdGVyYWwgdmFsdWVzLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBMaXRlcmFscyB7XG4gICAgLyoqIFNldHRpbmdzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIGxpdGVyYWwgdmFsdWVzIHRvIHRleHQuICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBUb1N0cmluZ1NldHRpbmdzIHtcbiAgICAgICAgLyoqIFdoYXQgYSBudWxsIHdpbGwgcmVuZGVyIGFzLiAqL1xuICAgICAgICBudWxsUmVwcmVzZW50YXRpb246IHN0cmluZztcblxuICAgICAgICAvKiogRGF0ZSBmb3JtYXQuICovXG4gICAgICAgIGRhdGVGb3JtYXQ6IHN0cmluZztcblxuICAgICAgICAvKiogRGF0ZS10aW1lIGZvcm1hdC4gKi9cbiAgICAgICAgZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKiogU2FuZSwgRW5nbGlzaC1iYXNlZCBkZWZhdWx0cyBmb3IgZGF0ZSBmb3JtYXRzLiAqL1xuICAgIGV4cG9ydCBjb25zdCBERUZBVUxUX1RPX1NUUklORzogVG9TdHJpbmdTZXR0aW5ncyA9IHtcbiAgICAgICAgbnVsbFJlcHJlc2VudGF0aW9uOiBcIi1cIixcblxuICAgICAgICBkYXRlRm9ybWF0OiBcIk1NTU0gZGQsIHl5eXlcIixcbiAgICAgICAgZGF0ZVRpbWVGb3JtYXQ6IFwiaDptbSBhIC0gTU1NTSBkZCwgeXl5eVwiLFxuICAgIH07XG5cbiAgICAvKiogQ29udmVydCBhbiBhcmJpdHJhcnkgdmFsdWUgaW50byBhIHJlYXNvbmFibGUsIE1hcmtkb3duLWZyaWVuZGx5IHN0cmluZyBpZiBwb3NzaWJsZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcoXG4gICAgICAgIGZpZWxkOiBhbnksXG4gICAgICAgIHNldHRpbmc6IFRvU3RyaW5nU2V0dGluZ3MgPSBERUZBVUxUX1RPX1NUUklORyxcbiAgICAgICAgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIHNldHRpbmcubnVsbFJlcHJlc2VudGF0aW9uO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBzZXR0aW5nLm51bGxSZXByZXNlbnRhdGlvbjtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXJrZG93bigpO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiPGZ1bmN0aW9uPlwiO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgcmVzdWx0ICs9IFwiW1wiO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3cmFwcGVkLnZhbHVlLm1hcCgoZikgPT4gdG9TdHJpbmcoZiwgc2V0dGluZywgdHJ1ZSkpLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgICAgICAgICBpZiAocmVjdXJzaXZlKSByZXN1bHQgKz0gXCJdXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBcInsgXCIgK1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh3cmFwcGVkLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZSkgPT4gZVswXSArIFwiOiBcIiArIHRvU3RyaW5nKGVbMV0sIHNldHRpbmcsIHRydWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiIH1cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNaW5pbWFsRGF0ZSh3cmFwcGVkLnZhbHVlLCBzZXR0aW5nLmRhdGVGb3JtYXQsIHNldHRpbmcuZGF0ZVRpbWVGb3JtYXQpO1xuICAgICAgICAgICAgY2FzZSBcImR1cmF0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlck1pbmltYWxEdXJhdGlvbih3cmFwcGVkLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBXcmFwIGEgbGl0ZXJhbCB2YWx1ZSBzbyB5b3UgY2FuIHN3aXRjaCBvbiBpdCBlYXNpbHkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHdyYXBWYWx1ZSh2YWw6IExpdGVyYWwpOiBXcmFwcGVkTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc051bGwodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJudWxsXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJudW1iZXJcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc1N0cmluZyh2YWwpKSByZXR1cm4geyB0eXBlOiBcInN0cmluZ1wiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhbih2YWwpKSByZXR1cm4geyB0eXBlOiBcImJvb2xlYW5cIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0R1cmF0aW9uKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZHVyYXRpb25cIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJkYXRlXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKSByZXR1cm4geyB0eXBlOiBcImFycmF5XCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNMaW5rKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibGlua1wiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsKSkgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHJldHVybiB7IHR5cGU6IFwib2JqZWN0XCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBSZWN1cnNpdmVseSBtYXAgY29tcGxleCBvYmplY3RzIGF0IHRoZSBsZWF2ZXMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1hcExlYXZlcyh2YWw6IExpdGVyYWwsIGZ1bmM6ICh0OiBMaXRlcmFsKSA9PiBMaXRlcmFsKTogTGl0ZXJhbCB7XG4gICAgICAgIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBEYXRhT2JqZWN0ID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsKSkgcmVzdWx0W2tleV0gPSBtYXBMZWF2ZXModmFsdWUsIGZ1bmMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ6IExpdGVyYWxbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsKSByZXN1bHQucHVzaChtYXBMZWF2ZXModmFsdWUsIGZ1bmMpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuYyh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENoZWNrIGlmIHR3byBhcmJpdHJhcnkgbGl0ZXJhbHMgYXJlIGVxdWFsLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoZmlyc3Q6IExpdGVyYWwgfCB1bmRlZmluZWQsIHNlY29uZDogTGl0ZXJhbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY29tcGFyZShmaXJzdCwgc2Vjb25kKSA9PSAwO1xuICAgIH1cblxuICAgIC8qKiBDb21wYXJlIHR3byBhcmJpdHJhcnkgSmF2YVNjcmlwdCB2YWx1ZXMuIFByb2R1Y2VzIGEgdG90YWwgb3JkZXJpbmcgb3ZlciBBTlkgcG9zc2libGUgZGF0YWNvcmUgdmFsdWUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmUoXG4gICAgICAgIHZhbDE6IExpdGVyYWwgfCB1bmRlZmluZWQsXG4gICAgICAgIHZhbDI6IExpdGVyYWwgfCB1bmRlZmluZWQsXG4gICAgICAgIGxpbmtOb3JtYWxpemVyPzogKGxpbms6IHN0cmluZykgPT4gc3RyaW5nXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmVmZXJlbmNlIGVxdWFsaXR5IC0gc2hvcnQgY2lyY3VpdC5cbiAgICAgICAgaWYgKHZhbDEgPT09IHZhbDIpIHJldHVybiAwO1xuXG4gICAgICAgIC8vIEhhbmRsZSB1bmRlZmluZWQvbnVsbHMgZmlyc3QuXG4gICAgICAgIGlmICh2YWwxID09PSB1bmRlZmluZWQpIHZhbDEgPSBudWxsO1xuICAgICAgICBpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB2YWwyID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbDEgPT09IG51bGwgJiYgdmFsMiA9PT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKHZhbDEgPT09IG51bGwpIHJldHVybiAtMTtcbiAgICAgICAgZWxzZSBpZiAodmFsMiA9PT0gbnVsbCkgcmV0dXJuIDE7XG5cbiAgICAgICAgLy8gQSBub24tbnVsbCB2YWx1ZSBub3cgd2hpY2ggd2UgY2FuIHdyYXAgJiBjb21wYXJlIG9uLlxuICAgICAgICBsZXQgd3JhcDEgPSB3cmFwVmFsdWUodmFsMSk7XG4gICAgICAgIGxldCB3cmFwMiA9IHdyYXBWYWx1ZSh2YWwyKTtcblxuICAgICAgICBpZiAod3JhcDEgPT09IHVuZGVmaW5lZCAmJiB3cmFwMiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgICAgICAgZWxzZSBpZiAod3JhcDEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgICAgICBlbHNlIGlmICh3cmFwMiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcblxuICAgICAgICAvLyBTaG9ydC1jaXJjdWl0IG9uIGRpZmZlcmVudCB0eXBlcyBvciBvbiByZWZlcmVuY2UgZXF1YWxpdHkuXG4gICAgICAgIGlmICh3cmFwMS50eXBlICE9IHdyYXAyLnR5cGUpIHJldHVybiB3cmFwMS50eXBlLmxvY2FsZUNvbXBhcmUod3JhcDIudHlwZSk7XG4gICAgICAgIGlmICh3cmFwMS52YWx1ZSA9PT0gd3JhcDIudmFsdWUpIHJldHVybiAwO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcDEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZS5sb2NhbGVDb21wYXJlKHdyYXAyLnZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgaWYgKHdyYXAxLnZhbHVlIDwgKHdyYXAyLnZhbHVlIGFzIG51bWJlcikpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh3cmFwMS52YWx1ZSA9PSAod3JhcDIudmFsdWUgYXMgbnVtYmVyKSkgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICBpZiAod3JhcDEudmFsdWUgPT0gd3JhcDIudmFsdWUpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHdyYXAxLnZhbHVlID8gMSA6IC0xO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICBsZXQgbGluazEgPSB3cmFwMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgbGluazIgPSB3cmFwMi52YWx1ZSBhcyBMaW5rO1xuICAgICAgICAgICAgICAgIGxldCBub3JtYWxpemUgPSBsaW5rTm9ybWFsaXplciA/PyAoKHg6IHN0cmluZykgPT4geCk7XG5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBjb21wYXJlIGJ5IGZpbGUgbmFtZSBvciBkaXNwbGF5LCBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmsgZXF1YWxpdHkuIENvbXBhcmUgYnkgcGF0aC5cbiAgICAgICAgICAgICAgICBsZXQgcGF0aENvbXBhcmUgPSBub3JtYWxpemUobGluazEucGF0aCkubG9jYWxlQ29tcGFyZShub3JtYWxpemUobGluazIucGF0aCkpO1xuICAgICAgICAgICAgICAgIGlmIChwYXRoQ29tcGFyZSAhPSAwKSByZXR1cm4gcGF0aENvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbXBhcmUgYnkgdHlwZS5cbiAgICAgICAgICAgICAgICBsZXQgdHlwZUNvbXBhcmUgPSBsaW5rMS50eXBlLmxvY2FsZUNvbXBhcmUobGluazIudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVDb21wYXJlICE9IDApIHJldHVybiB0eXBlQ29tcGFyZTtcblxuICAgICAgICAgICAgICAgIC8vIFRoZW4gY29tcGFyZSBieSBzdWJwYXRoIGV4aXN0ZW5jZS5cbiAgICAgICAgICAgICAgICBpZiAobGluazEuc3VicGF0aCAmJiAhbGluazIuc3VicGF0aCkgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5rMS5zdWJwYXRoICYmIGxpbmsyLnN1YnBhdGgpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoIWxpbmsxLnN1YnBhdGggJiYgIWxpbmsyLnN1YnBhdGgpIHJldHVybiAwO1xuXG4gICAgICAgICAgICAgICAgLy8gU2luY2UgYm90aCBoYXZlIGEgc3VicGF0aCwgY29tcGFyZSBieSBzdWJwYXRoLlxuICAgICAgICAgICAgICAgIHJldHVybiAobGluazEuc3VicGF0aCA/PyBcIlwiKS5sb2NhbGVDb21wYXJlKGxpbmsyLnN1YnBhdGggPz8gXCJcIik7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZSA8ICh3cmFwMi52YWx1ZSBhcyBEYXRlVGltZSlcbiAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICA6IHdyYXAxLnZhbHVlLmVxdWFscyh3cmFwMi52YWx1ZSBhcyBEYXRlVGltZSlcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZSA8ICh3cmFwMi52YWx1ZSBhcyBEdXJhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICA6IHdyYXAxLnZhbHVlLmVxdWFscyh3cmFwMi52YWx1ZSBhcyBEdXJhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogMTtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGxldCBmMSA9IHdyYXAxLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBmMiA9IHdyYXAyLnZhbHVlIGFzIGFueVtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBNYXRoLm1pbihmMS5sZW5ndGgsIGYyLmxlbmd0aCk7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlKGYxW2luZGV4XSwgZjJbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAgIT0gMCkgcmV0dXJuIGNvbXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmMS5sZW5ndGggLSBmMi5sZW5ndGg7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgbGV0IG8xID0gd3JhcDEudmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IG8yID0gd3JhcDIudmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICAgICAgICBsZXQgazEgPSBBcnJheS5mcm9tKE9iamVjdC5rZXlzKG8xKSk7XG4gICAgICAgICAgICAgICAgbGV0IGsyID0gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvMikpO1xuICAgICAgICAgICAgICAgIGsxLnNvcnQoKTtcbiAgICAgICAgICAgICAgICBrMi5zb3J0KCk7XG5cbiAgICAgICAgICAgICAgICBsZXQga2V5Q29tcGFyZSA9IGNvbXBhcmUoazEsIGsyKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5Q29tcGFyZSAhPSAwKSByZXR1cm4ga2V5Q29tcGFyZTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiBrMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29tcCA9IGNvbXBhcmUobzFba2V5XSwgbzJba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wICE9IDApIHJldHVybiBjb21wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRmluZCB0aGUgY29ycmVzcG9uZGluZyBkYXRhY29yZSB0eXBlIGZvciBhbiBhcmJpdHJhcnkgdmFsdWUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHR5cGVPZih2YWw6IGFueSk6IExpdGVyYWxUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHdyYXBWYWx1ZSh2YWwpPy50eXBlO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIFwidHJ1dGh5XCIgKGkuZS4sIGlzIG5vbi1udWxsIGFuZCBoYXMgZGF0YSBpbiBpdCkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzVHJ1dGh5KGZpZWxkOiBMaXRlcmFsKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCB3cmFwcGVkID0gd3JhcFZhbHVlKGZpZWxkKTtcbiAgICAgICAgaWYgKCF3cmFwcGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgc3dpdGNoICh3cmFwcGVkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZSAhPSAwO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gISF3cmFwcGVkLnZhbHVlLnBhdGg7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvTWlsbGlzKCkgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmFzKFwic2Vjb25kc1wiKSAhPSAwO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3cmFwcGVkLnZhbHVlKS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGVlcCBjb3B5IGEgZmllbGQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQgZXh0ZW5kcyBMaXRlcmFsPihmaWVsZDogVCk6IFQge1xuICAgICAgICBpZiAoZmllbGQgPT09IG51bGwgfHwgZmllbGQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpZWxkO1xuXG4gICAgICAgIGlmIChMaXRlcmFscy5pc0FycmF5KGZpZWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIChbXSBhcyBMaXRlcmFsW10pLmNvbmNhdChmaWVsZC5tYXAoKHYpID0+IGRlZXBDb3B5KHYpKSkgYXMgVDtcbiAgICAgICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc09iamVjdChmaWVsZCkpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGQpKSByZXN1bHRba2V5XSA9IGRlZXBDb3B5KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWw6IGFueSk6IHZhbCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgbnVtYmVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWw6IGFueSk6IHZhbCBpcyBudW1iZXIge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSBcIm51bWJlclwiO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgZGF0ZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbDogYW55KTogdmFsIGlzIERhdGVUaW1lIHtcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIERhdGVUaW1lO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgZHVyYXRpb24uICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRHVyYXRpb24odmFsOiBhbnkpOiB2YWwgaXMgRHVyYXRpb24ge1xuICAgICAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbCh2YWw6IGFueSk6IHZhbCBpcyBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWw6IGFueSk6IHZhbCBpcyBhbnlbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsOiBhbnkpOiB2YWwgaXMgYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSBcImJvb2xlYW5cIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGxpbmsuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzTGluayh2YWw6IGFueSk6IHZhbCBpcyBMaW5rIHtcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIExpbms7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gb2JqZWN0IChhbmQgbm90IGFueSBvdGhlciBkYXRhY29yZS1yZWNvZ25pemVkIG9iamVjdC1saWtlIHR5cGUpLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2YWw6IGFueSk6IHZhbCBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHZhbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsID09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFpc0FycmF5KHZhbCkgJiZcbiAgICAgICAgICAgICFpc0R1cmF0aW9uKHZhbCkgJiZcbiAgICAgICAgICAgICFpc0RhdGUodmFsKSAmJlxuICAgICAgICAgICAgIWlzTGluayh2YWwpICYmXG4gICAgICAgICAgICAhaXNOdWxsKHZhbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBqYXZhc2NyaXB0IGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbDogYW55KTogdmFsIGlzIEZ1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJmdW5jdGlvblwiO1xuICAgIH1cbn1cblxuLyoqIEEgZ3JvdXBpbmcgb24gYSB0eXBlIHdoaWNoIHN1cHBvcnRzIHJlY3Vyc2l2ZWx5LW5lc3RlZCBncm91cHMuXG4gKiBAZ3JvdXAgQ29tbW9uIFR5cGVzXG4gKi9cbmV4cG9ydCB0eXBlIEdyb3VwRWxlbWVudDxUPiA9IHsga2V5OiBMaXRlcmFsOyByb3dzOiBHcm91cGluZzxUPiB9O1xuLyoqXG4gKiBBIGdyb3VwaW5nLCB3aGljaCBjYW4gYmUgZWl0aGVyOlxuICogLSBhbiBhcnJheSBvZiBlbGVtZW50cyBvZiB0eXBlIGBUYCwgb3JcbiAqIC0gYW4gYXJyYXkgb2Yge0BsaW5rIEdyb3VwZWxlbWVudH1zXG4gKlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBHcm91cGluZzxUPiA9IFRbXSB8IEdyb3VwRWxlbWVudDxUPltdO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgR3JvdXBpbmdzIHtcbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZ3JvdXAgZW50cnkgaXMgYSBzdGFuZGFsb25lIHZhbHVlLCBvciBhIGdyb3VwaW5nIG9mIHN1Yi1lbnRyaWVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnRHcm91cDxUPihlbnRyeTogYW55KTogZW50cnkgaXMgR3JvdXBFbGVtZW50PFQ+IHtcbiAgICAgICAgcmV0dXJuIExpdGVyYWxzLmlzT2JqZWN0KGVudHJ5KSAmJiBPYmplY3Qua2V5cyhlbnRyeSkubGVuZ3RoID09IDIgJiYgXCJrZXlcIiBpbiBlbnRyeSAmJiBcInJvd3NcIiBpbiBlbnRyeTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gYXJyYXkgaXMgYSBncm91cGluZyBhcnJheS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNHcm91cGluZzxUPihlbnRyeTogR3JvdXBpbmc8VD4pOiBlbnRyeSBpcyBHcm91cEVsZW1lbnQ8VD5bXSB7XG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZW50cnkpIGlmICghaXNFbGVtZW50R3JvdXAoZWxlbWVudCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gYXJyYXkgaXMgYSBsZWFmIGFuZCBoYXMgbm8gc3ViZ3JvdXBpbmdzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0xlYWY8VD4oZW50cnk6IEdyb3VwaW5nPFQ+KTogZW50cnkgaXMgVFtdIHtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbnRyeSkgaWYgKGlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIENvdW50IHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSByZWN1cnNpdmUgZ3JvdXBpbmcuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNvdW50PFQ+KGVsZW1lbnRzOiBHcm91cGluZzxUPiB8IEdyb3VwRWxlbWVudDxUPik6IG51bWJlciB7XG4gICAgICAgIGlmIChpc0VsZW1lbnRHcm91cChlbGVtZW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3VudChlbGVtZW50cy5yb3dzKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0dyb3VwaW5nKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBzdWJncm91cCBvZiBlbGVtZW50cykgcmVzdWx0ICs9IGNvdW50KHN1Ymdyb3VwLnJvd3MpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgc2xpY2UgYSBncm91cGluZywgcHJlc2VydmluZyB0aGUgZ3JvdXAgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgZWxlbWVudHMgW3N0YXJ0Li4uZW5kKS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gc2xpY2U8VD4oZWxlbWVudHM6IEdyb3VwaW5nPFQ+LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IEdyb3VwaW5nPFQ+IHtcbiAgICAgICAgaWYgKGVuZCA8PSBzdGFydCkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAoaXNMZWFmKGVsZW1lbnRzKSkgcmV0dXJuIGVsZW1lbnRzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGdyb3VwIHRoYXQgY29udGFpbnMgaW5kZXggYHN0YXJ0YC5cbiAgICAgICAgbGV0IGluZGV4ID0gMCxcbiAgICAgICAgICAgIHNlZW4gPSAwO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBlbGVtZW50cy5sZW5ndGggJiYgc2VlbiArIGNvdW50KGVsZW1lbnRzW2luZGV4XSkgPD0gc3RhcnQpIHtcbiAgICAgICAgICAgIHNlZW4gKz0gY291bnQoZWxlbWVudHNbaW5kZXhdKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdGFydCB3YXMgZ3JlYXRlciB0aGFuIHRoZSBlbnRpcmUgbGVuZ3RoIG9mIHRoZSBncm91cGluZ3MuXG4gICAgICAgIGlmIChpbmRleCA+PSBlbGVtZW50cy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IHsga2V5OiBMaXRlcmFsOyByb3dzOiBHcm91cGluZzxUPiB9W10gPSBbXTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgZWxlbWVudHMubGVuZ3RoICYmIHNlZW4gPCBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZWxlbWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBTaXplID0gY291bnQoZ3JvdXApO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBTdGFydCA9IE1hdGgubWF4KHNlZW4sIHN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRW5kID0gTWF0aC5taW4oZ3JvdXBTaXplICsgc2VlbiwgZW5kKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIGtleTogZ3JvdXAua2V5LFxuICAgICAgICAgICAgICAgIHJvd3M6IHNsaWNlKGdyb3VwLnJvd3MsIGdyb3VwU3RhcnQgLSBzZWVuLCBncm91cEVuZCAtIHNlZW4pLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNlZW4gKz0gZ3JvdXBTaXplO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwgIi8qKlxuICogQG1vZHVsZSBhcGlcbiAqL1xuLyoqXG4gKiAgRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuXG4gKiBAaGlkZGVuXG4gKiAqL1xuZXhwb3J0IGNsYXNzIFN1Y2Nlc3M8VCwgRT4ge1xuICAgIHB1YmxpYyBzdWNjZXNzZnVsOiB0cnVlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLnN1Y2Nlc3NmdWwgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXA8VT4oZjogKGE6IFQpID0+IFUpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gbmV3IFN1Y2Nlc3MoZih0aGlzLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXRNYXA8VT4oZjogKGE6IFQpID0+IFJlc3VsdDxVLCBFPik6IFJlc3VsdDxVLCBFPiB7XG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBFcnI8VT4oZjogKGU6IEUpID0+IFUpOiBSZXN1bHQ8VCwgVT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnkgYXMgUmVzdWx0PFQsIFU+O1xuICAgIH1cblxuICAgIHB1YmxpYyBiaW1hcDxUMiwgRTI+KHN1Y2M6IChhOiBUKSA9PiBUMiwgX2ZhaWw6IChiOiBFKSA9PiBFMik6IFJlc3VsdDxUMiwgRTI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwKHN1Y2MpIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3JFbHNlKF92YWx1ZTogVCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FzdDxVPigpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZVRocm93KF9tZXNzYWdlPzogKGU6IEUpID0+IHN0cmluZyk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG59XG5cbi8qKiBGdW5jdGlvbmFsIHJldHVybiB0eXBlIGZvciBlcnJvciBoYW5kbGluZy5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEZhaWx1cmU8VCwgRT4ge1xuICAgIHB1YmxpYyBzdWNjZXNzZnVsOiBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgZXJyb3I6IEUpIHtcbiAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcDxVPihfZjogKGE6IFQpID0+IFUpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnkgYXMgRmFpbHVyZTxVLCBFPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmxhdE1hcDxVPihfZjogKGE6IFQpID0+IFJlc3VsdDxVLCBFPik6IFJlc3VsdDxVLCBFPiB7XG4gICAgICAgIHJldHVybiB0aGlzIGFzIGFueSBhcyBGYWlsdXJlPFUsIEU+O1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBFcnI8VT4oZjogKGU6IEUpID0+IFUpOiBSZXN1bHQ8VCwgVT4ge1xuICAgICAgICByZXR1cm4gbmV3IEZhaWx1cmUoZih0aGlzLmVycm9yKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGJpbWFwPFQyLCBFMj4oX3N1Y2M6IChhOiBUKSA9PiBUMiwgZmFpbDogKGI6IEUpID0+IEUyKTogUmVzdWx0PFQyLCBFMj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBFcnIoZmFpbCkgYXMgYW55O1xuICAgIH1cblxuICAgIHB1YmxpYyBvckVsc2UodmFsdWU6IFQpOiBUIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYXN0PFU+KCk6IFJlc3VsdDxVLCBFPiB7XG4gICAgICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3JFbHNlVGhyb3cobWVzc2FnZT86IChlOiBFKSA9PiBzdHJpbmcpOiBUIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKHRoaXMuZXJyb3IpKTtcbiAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJcIiArIHRoaXMuZXJyb3IpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIG1vbmFkaWMgcmVzdWx0IHR5cGUgd2hpY2ggc3RvcmVzIGVpdGhlciBcInN1Y2Nlc3NcIiBvciBcImZhaWx1cmVcIi4gQW4gYWx0ZXJuYXRpdmUgaGFuZGxpbmcgZXhjZXB0aW9uYWwgYmVoYXZpb3JcbiAqIGJ5IHVzaW5nIHRoZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9IFN1Y2Nlc3M8VCwgRT4gfCBGYWlsdXJlPFQsIEU+O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIE1vbmFkaWMgJ1Jlc3VsdCcgdHlwZSB3aGljaCBlbmNhcHN1bGF0ZXMgd2hldGhlciBhIHByb2NlZHVyZSBzdWNjZWVkZWQgb3IgZmFpbGVkLCBhcyB3ZWxsIGFzIGl0J3MgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIFJlc3VsdCB7XG4gICAgLyoqIENvbnN0cnVjdCBhIG5ldyBzdWNjZXNzIHJlc3VsdCB3cmFwcGluZyB0aGUgZ2l2ZW4gdmFsdWUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3M8VCwgRT4odmFsdWU6IFQpOiBSZXN1bHQ8VCwgRT4ge1xuICAgICAgICByZXR1cm4gbmV3IFN1Y2Nlc3ModmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgZmFpbHVyZSB2YWx1ZSB3cmFwcGluZyB0aGUgZ2l2ZW4gZXJyb3IuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmU8VCwgRT4oZXJyb3I6IEUpOiBSZXN1bHQ8VCwgRT4ge1xuICAgICAgICByZXR1cm4gbmV3IEZhaWx1cmUoZXJyb3IpO1xuICAgIH1cblxuICAgIC8qKiBKb2luIHR3byByZXN1bHRzIHdpdGggYSBiaS1mdW5jdGlvbiBhbmQgcmV0dXJuIGEgbmV3IHJlc3VsdC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZmxhdE1hcDI8VDEsIFQyLCBPLCBFPihcbiAgICAgICAgZmlyc3Q6IFJlc3VsdDxUMSwgRT4sXG4gICAgICAgIHNlY29uZDogUmVzdWx0PFQyLCBFPixcbiAgICAgICAgZjogKGE6IFQxLCBiOiBUMikgPT4gUmVzdWx0PE8sIEU+XG4gICAgKTogUmVzdWx0PE8sIEU+IHtcbiAgICAgICAgaWYgKGZpcnN0LnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIGlmIChzZWNvbmQuc3VjY2Vzc2Z1bCkgcmV0dXJuIGYoZmlyc3QudmFsdWUsIHNlY29uZC52YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBmYWlsdXJlKHNlY29uZC5lcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZShmaXJzdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSm9pbiB0d28gcmVzdWx0cyB3aXRoIGEgYmktZnVuY3Rpb24gYW5kIHJldHVybiBhIG5ldyByZXN1bHQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1hcDI8VDEsIFQyLCBPLCBFPihcbiAgICAgICAgZmlyc3Q6IFJlc3VsdDxUMSwgRT4sXG4gICAgICAgIHNlY29uZDogUmVzdWx0PFQyLCBFPixcbiAgICAgICAgZjogKGE6IFQxLCBiOiBUMikgPT4gT1xuICAgICk6IFJlc3VsdDxPLCBFPiB7XG4gICAgICAgIHJldHVybiBmbGF0TWFwMihmaXJzdCwgc2Vjb25kLCAoYSwgYikgPT4gc3VjY2VzcyhmKGEsIGIpKSk7XG4gICAgfVxuXG4gICAgLyoqIE1hcCBhIGZhaWxhYmxlIGZ1bmN0aW9uIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoZSBsaXN0LCByZXR1cm5pbmcgZWFybHkgb24gZmFpbHVyZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbWFwQWxsPFQsIE8sIEU+KGlucHV0OiBJdGVyYWJsZTxUPiwgZnVuYzogKGlucHV0OiBUKSA9PiBSZXN1bHQ8TywgRT4pOiBSZXN1bHQ8T1tdLCBFPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogT1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpbnB1dCkge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZnVuYyhlbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghb3V0cHV0LnN1Y2Nlc3NmdWwpIHJldHVybiBvdXRwdXQuY2FzdCgpO1xuXG4gICAgICAgICAgICByZXN1bHQucHVzaChvdXRwdXQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqIENhdGNoIGFueSBlcnJvcnMgaW4gYSBjYWxsLCByZXR1cm5pbmcgYSByZXN1bHQgaW5zdGVhZC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdHJ5aW5nPFQ+KGNhbGw6ICgpID0+IFQpOiBSZXN1bHQ8VCwgRXJyb3I+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhjYWxsKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGEgcHJvbWlzZSB3aGljaCBtYXkgdGhyb3cgaW50byBhIHByb21pc2Ugd2hpY2ggcmV0dXJucyBhIHJlc3VsdCBvZiB0aGUgc3VjY2Vzc2Z1bCB2YWx1ZSBvciBhbiBlcnJvci4gKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmM8VD4ocHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2U8UmVzdWx0PFQsIEVycm9yPj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGF3YWl0IHByb21pc2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuXG4vKiogU3RhdGljIHNldCBlbGVtZW50IHdoaWNoIG1hdGNoZXMgZXZlcnl0aGluZy4gKi9cbmV4cG9ydCB0eXBlIEV2ZXJ5dGhpbmcgPSB7IHR5cGU6IFwiZXZlcnl0aGluZ1wiIH07XG4vKiogU3RhdGljIHNldCBlbGVtZW50IHdoaWNoIG1hdGNoZXMgbm90aGluZy4gKi9cbmV4cG9ydCB0eXBlIE5vdGhpbmcgPSB7IHR5cGU6IFwibm90aGluZ1wiIH07XG4vKiogU2V0IHdoaWNoIG1hdGNoZXMgdGhlIG5lZ2F0aW9uIG9mIGEgc2V0LiAqL1xuZXhwb3J0IHR5cGUgTmVnYXRlZDxUPiA9IHsgdHlwZTogXCJuZWdhdGVkXCI7IHZhbHVlOiBTZXQ8VD4gfTtcbi8qKiBTZXQgd2hpY2ggbWF0Y2hlcyBhbiBhY3R1YWwgc2V0IG9mIHZhbHVlcy4gICovXG5leHBvcnQgdHlwZSBBdG9tPFQ+ID0geyB0eXBlOiBcImF0b21cIjsgdmFsdWU6IFNldDxUPiB9O1xuXG4vKiogQWJzdHJhY3QgZmlsdGVyIHR5cGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyBmaWx0ZXIgb3BlcmF0aW9ucyB0byB0aGUgZGF0YSBzdG9yZS4gKi9cbmV4cG9ydCB0eXBlIEZpbHRlcjxUPiA9IEV2ZXJ5dGhpbmcgfCBOb3RoaW5nIHwgQXRvbTxUPiB8IE5lZ2F0ZWQ8VD47XG5cbi8qKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgZWZmaWNpZW50bHkgb3BlcmF0aW5nIG9uIGZpbHRlcnMuICovXG5leHBvcnQgbmFtZXNwYWNlIEZpbHRlcnMge1xuICAgIC8qKiBTdGF0aWMgZmlsdGVyIHdoaWNoIG1hdGNoZXMgZXZlcnl0aGluZy4gKi9cbiAgICBleHBvcnQgY29uc3QgRVZFUllUSElORzogRXZlcnl0aGluZyA9IHsgdHlwZTogXCJldmVyeXRoaW5nXCIgfTtcbiAgICAvKiogU3RhdGljIGZpbHRlciB3aGljaCBtYXRjaGVzIG5vdGhpbmcuICovXG4gICAgZXhwb3J0IGNvbnN0IE5PVEhJTkc6IE5vdGhpbmcgPSB7IHR5cGU6IFwibm90aGluZ1wiIH07XG4gICAgLyoqIEVtcHR5IHNldCBjb25zdGFudC4gKi9cbiAgICBleHBvcnQgY29uc3QgRU1QVFlfU0VUOiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcblxuICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgYXRvbSBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGF0b208VD4oc2V0OiBTZXQ8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBpZiAoc2V0LnNpemUgPT0gMCkgcmV0dXJuIE5PVEhJTkc7XG5cbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJhdG9tXCIsIHZhbHVlOiBzZXQgfTtcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgZmlsdGVyIHRoYXQgbWF0Y2hlcyBldmVyeXRoaW5nIG9yIG5vdGhpbmcuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNvbnN0YW50PFQ+KHZhbHVlOiBib29sZWFuKTogRmlsdGVyPFQ+IHtcbiAgICAgICAgaWYgKHZhbHVlKSByZXR1cm4gRVZFUllUSElORztcbiAgICAgICAgZWxzZSByZXR1cm4gTk9USElORztcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGF0b20gZmlsdGVyIHdoaWNoIGlzIE5PVEhJTkcgaWYgc2V0IGlzIHVuZGVmaW5lZC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbnVsbGFibGVBdG9tPFQ+KHNldDogU2V0PFQ+IHwgdW5kZWZpbmVkKTogRmlsdGVyPFQ+IHtcbiAgICAgICAgcmV0dXJuIHNldCAhPT0gdW5kZWZpbmVkID8gYXRvbShzZXQpIDogTk9USElORztcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmVnYXRlZCBhdG9tIGZpbHRlci4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbmVnYXRlZDxUPihzZXQ6IFNldDxUPik6IEZpbHRlcjxUPiB7XG4gICAgICAgIGlmIChzZXQuc2l6ZSA9PSAwKSByZXR1cm4gRVZFUllUSElORztcblxuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5lZ2F0ZWRcIiwgdmFsdWU6IHNldCB9O1xuICAgIH1cblxuICAgIC8qKiBQcm9kdWNlcyB0aGUgbmVnYXRpb24gb2YgYSBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZTxUPihmaWx0ZXI6IEZpbHRlcjxUPik6IEZpbHRlcjxUPiB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJldmVyeXRoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5PVEhJTkc7XG4gICAgICAgICAgICBjYXNlIFwibm90aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBFVkVSWVRISU5HO1xuICAgICAgICAgICAgY2FzZSBcImF0b21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVnYXRlZChmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXRvbShmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gZmlsdGVyIGlzIGRlZmluaXRpdmVseSBjdXJyZW50bHkgZW1wdHkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGVtcHR5PFQ+KGZpbHRlcjogRmlsdGVyPFQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJldmVyeXRoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIFwiYXRvbVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUuc2l6ZSA9PSAwO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXNvbHZlIGEgdG9wLWxldmVsIGZpbHRlciB3aXRoIHRoZSBzZXQgb2YgYWxsIGF2YWlsYWJsZSBvYmplY3RzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiByZXNvbHZlPFQ+KGZpbHRlcjogRmlsdGVyPFQ+LCBldmVyeXRoaW5nOiBTZXQ8VD4pOiBTZXQ8VD4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBldmVyeXRoaW5nO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfU0VUO1xuICAgICAgICAgICAgY2FzZSBcImF0b21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0SW50ZXJzZWN0TmVnYXRpb24oZXZlcnl0aGluZywgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBJbnRlcnNlY3QgYW4gaXRlcmFibGUgb2YgZmlsdGVycy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaW50ZXJzZWN0PFQ+KGVsZW1lbnRzOiBJdGVyYWJsZTxGaWx0ZXI8VD4+KTogRmlsdGVyPFQ+IHtcbiAgICAgICAgcmV0dXJuIGxhenlJbnRlcnNlY3QoZWxlbWVudHMsICh4KSA9PiB4KTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGZpbHRlcnMgbGF6aWx5LCBzaG9ydC1jaXJjdWl0aW5nIGlmIHRoZSBpbnRlcnNlY3Rpb24gd291bGQgcHJvZHVjZSBOT1RISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5SW50ZXJzZWN0PEksIFQ+KFxuICAgICAgICBlbGVtZW50czogSXRlcmFibGU8ST4sXG4gICAgICAgIHByb2R1Y2U6IChpbnB1dDogSSkgPT4gRmlsdGVyPFQ+IHwgdW5kZWZpbmVkXG4gICAgKTogRmlsdGVyPFQ+IHtcbiAgICAgICAgcmV0dXJuIGxhenlGYWlsYWJsZUludGVyc2VjdGlvbihlbGVtZW50cywgKHgpID0+IFJlc3VsdC5zdWNjZXNzKHByb2R1Y2UoeCkpKS5vckVsc2VUaHJvdygpO1xuICAgIH1cblxuICAgIC8qKiBJbnRlcnNlY3QgZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIGludGVyc2VjdGlvbiB3b3VsZCBwcm9kdWNlIE5PVEhJTkcuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGxhenlGYWlsYWJsZUludGVyc2VjdGlvbjxJLCBULCBFPihcbiAgICAgICAgZWxlbWVudHM6IEl0ZXJhYmxlPEk+LFxuICAgICAgICBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IFJlc3VsdDxGaWx0ZXI8VD4gfCB1bmRlZmluZWQsIEU+XG4gICAgKTogUmVzdWx0PEZpbHRlcjxUPiwgRT4ge1xuICAgICAgICBjb25zdCBhdG9tczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgbmVnYXRpb25zOiBTZXQ8VD5bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUZpbHRlciA9IHByb2R1Y2UoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIW1heWJlRmlsdGVyLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUZpbHRlci5jYXN0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG1heWJlRmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gRW1wdHkgZmlsdGVycyB3aWxsIHByb2R1Y2UgYW4gZW1wdHkgaW50ZXJzZWN0aW9uLlxuICAgICAgICAgICAgaWYgKGVtcHR5KGZpbHRlcikpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhOT1RISU5HKTtcbiAgICAgICAgICAgIC8vIEVWRVJZVEhJTkcgZmlsdGVycyBhcmUgcmVkdW5kYW50IGluIEFORHMsIHNraXAgdGhlbS5cbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gXCJldmVyeXRoaW5nXCIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBXaWxsIG9ubHkgYmUgbGVmdCB3aXRoIGF0b21zIG9yIG5lZ2F0aW9ucy5cbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PSBcImF0b21cIikgYXRvbXMucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZmlsdGVyLnR5cGUgPT0gXCJuZWdhdGVkXCIpIG5lZ2F0aW9ucy5wdXNoKGZpbHRlci52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBzdGFydCB3aXRoIHNvbWV0aGluZyBvZiB0aGUgZm9ybSBhICYmIGIgJiYgIWMgJiYgIWQuXG4gICAgICAgIC8vIElmIG5vIHRlcm1zLCB0aGVuIGV2ZXJ5dGhpbmcgd2FzIEVWRVJZVEhJTkcgc28gcmV0dXJuIHRoYXQuXG4gICAgICAgIC8vIElmIG9ubHkgYXRvbXMsIGp1c3QgaW50ZXJzZWN0IHRoZW0gKGEgJiYgYikuXG4gICAgICAgIC8vIElmIG9ubHkgbmVnYXRpb25zLCB0aGVuIHJld3JpdGUgIWMgJiYgIWQgPT4gIShjIHx8IGQpIGFuZCByZXR1cm4gbmVnYXRlZChjIHx8IGQpLlxuICAgICAgICAvLyBJZiBib3RoLCBjb21wdXRlIHggPSAoYSAmJiBiKSBhbmQgeSA9IChjIHx8IGQpLCBhbmQgdGhlbiBjb21wdXRlIHggJiYgIXkuXG5cbiAgICAgICAgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEVWRVJZVEhJTkcpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA+IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoYXRvbShzZXRJbnRlcnNlY3QoYXRvbXMpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXRvbXMubGVuZ3RoID09IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhuZWdhdGVkKHNldFVuaW9uKG5lZ2F0aW9ucykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oc2V0SW50ZXJzZWN0TmVnYXRpb24oc2V0SW50ZXJzZWN0KGF0b21zKSwgc2V0VW5pb24obmVnYXRpb25zKSkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBVbmlvbiBmaWx0ZXJzLCBwcm9kdWNpbmcgYSBzaW5nbGUgcmVzdWx0IGZpbHRlci4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdW5pb248VD4oZmlsdGVyczogSXRlcmFibGU8RmlsdGVyPFQ+Pik6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5VW5pb24oZmlsdGVycywgKHgpID0+IHgpO1xuICAgIH1cblxuICAgIC8qKiBVbmlvbiBmaWx0ZXJzIGxhemlseSwgc2hvcnQtY2lyY3VpdGluZyBpZiB0aGUgdW5pb24gd291bGQgcHJvZHVjZSBFVkVSWVRISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5VW5pb248SSwgVD4oZWxlbWVudHM6IEl0ZXJhYmxlPEk+LCBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IEZpbHRlcjxUPiB8IHVuZGVmaW5lZCk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5RmFpbGFibGVVbmlvbihlbGVtZW50cywgKHgpID0+IFJlc3VsdC5zdWNjZXNzKHByb2R1Y2UoeCkpKS5vckVsc2VUaHJvdygpO1xuICAgIH1cblxuICAgIC8qKiBVbmlvbiBmaWx0ZXJzIGxhemlseSwgc2hvcnQtY2lyY3VpdGluZyBpZiB0aGUgdW5pb24gd291bGQgcHJvZHVjZSBFVkVSWVRISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5RmFpbGFibGVVbmlvbjxJLCBULCBFPihcbiAgICAgICAgZWxlbWVudHM6IEl0ZXJhYmxlPEk+LFxuICAgICAgICBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IFJlc3VsdDxGaWx0ZXI8VD4gfCB1bmRlZmluZWQsIEU+XG4gICAgKTogUmVzdWx0PEZpbHRlcjxUPiwgRT4ge1xuICAgICAgICBjb25zdCBhdG9tczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgbmVnYXRpb25zOiBTZXQ8VD5bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUZpbHRlciA9IHByb2R1Y2UoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIW1heWJlRmlsdGVyLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUZpbHRlci5jYXN0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG1heWJlRmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gRVZFUllUSElORyBmaWx0ZXJzIHdpbGwgcHJvZHVjZSBldmVyeXRoaW5nIGFsd2F5cy5cbiAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gXCJldmVyeXRoaW5nXCIpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhFVkVSWVRISU5HKTtcbiAgICAgICAgICAgIC8vIEVtcHR5IGZpbHRlcnMgYXJlIHJlZHVuZGFudC5cbiAgICAgICAgICAgIGlmIChlbXB0eShmaWx0ZXIpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gV2lsbCBvbmx5IGJlIGxlZnQgd2l0aCBhdG9tcyBvciBuZWdhdGlvbnMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT0gXCJhdG9tXCIpIGF0b21zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbHRlci50eXBlID09IFwibmVnYXRlZFwiKSBuZWdhdGlvbnMucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3IgaXMgYSBiaXQgaGFyZGVyIHRoYW4gQU5EIHNpbmNlIHlvdSBjYW4gZW5kIHVwIHdpdGggc2NlbmFyaW9zIGxpa2UgYSB8fCAhYiwgd2hpY2ggYXJlXG4gICAgICAgIC8vIG5vdCBjb21wdXRhYmxlIGRpcmVjdGx5LiBIb3dldmVyLCB3ZSBjYW4gZG8gYm9vbGVhbiBsb2dpYyB0byBhbHdheXMgcHJvZHVjZSBhIHNpbmdsZVxuICAgICAgICAvLyBzZXQuXG4gICAgICAgIC8vIElmIG5vdGhpbmcgPT4gbm90aGluZywgbm8gbm9uLWVtcHR5IGZpbHRlcnMuXG4gICAgICAgIC8vIElmIGF0b21zIGJ1dCBubyBuZWdhdGlvbnMgKGEgfHwgYiB8fCBjKSA9PiBjb21wdXRlIHVuaW9uLlxuICAgICAgICAvLyBJZiBuZWdhdGlvbnMgYnV0IG5vIGF0b21zICghYSB8fCAhYiB8fCAhYykgPT4gcmV3cml0ZSBhcyAhKGEgJiYgYiAmJiBjKS5cbiAgICAgICAgLy8gSWYgYm90aDogKGEgfHwgYiB8fCAhYyB8fCAhZCkgPT4gY29tYmluZSBlYWNoIHBhcnQgaW50byAoYSB8fCBiKSB8fCAoIWMgfHwgIWQpID0+IChhIHx8IGIpIHx8ICEoYyAmJiBkKSA9PiBlIHx8ICFmID0+ICEoIWUgJiYgZikgd2hpY2hcbiAgICAgICAgLy8gY2FuIGJlIGNvbXB1dGVkIHVzaW5nIGludGVyc2VjdGlvbiBsb2dpYy5cblxuICAgICAgICBpZiAoYXRvbXMubGVuZ3RoID09IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoTk9USElORyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXRvbXMubGVuZ3RoID4gMCAmJiBuZWdhdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oc2V0VW5pb24oYXRvbXMpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXRvbXMubGVuZ3RoID09IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLm5lZ2F0ZWQoc2V0SW50ZXJzZWN0KG5lZ2F0aW9ucykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhuZWdhdGVkKHNldEludGVyc2VjdE5lZ2F0aW9uKHNldEludGVyc2VjdChuZWdhdGlvbnMpLCBzZXRVbmlvbihhdG9tcykpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHNldHMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyc2VjdDxUPihzZXRzOiBTZXQ8VD5bXSk6IFNldDxUPiB7XG4gICAgICAgIGlmIChzZXRzLmxlbmd0aCA9PSAwKSByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICBlbHNlIGlmIChzZXRzLmxlbmd0aCA9PSAxKSByZXR1cm4gc2V0c1swXTtcblxuICAgICAgICAvLyBTb3J0IGJ5IHNpemUgYW5kIGNvbWJpbmUgc21hbGxlc3QgYW5kIGxhcmdlc3Qgc2V0IHJlcGVhdGVkbHkuXG4gICAgICAgIGxldCBzb3J0ZWQgPSAoW10gYXMgU2V0PFQ+W10pLmNvbmNhdChzZXRzKS5zb3J0KChhLCBiKSA9PiBhLnNpemUgLSBiLnNpemUpO1xuXG4gICAgICAgIHdoaWxlIChzb3J0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxUPigpO1xuICAgICAgICAgICAgY29uc3QgbGFyZ2VzdCA9IHNvcnRlZC5wb3AoKSE7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2Ygc29ydGVkWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhcmdlc3QuaGFzKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzb3J0ZWRbMF0gPSByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc29ydGVkWzBdO1xuICAgIH1cblxuICAgIC8qKiBFZmZpY2llbnRseSBjb21wdXRlIHRoZSB1bmlvbiBvZiBzZXRzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRVbmlvbjxUPihzZXRzOiBTZXQ8VD5bXSk6IFNldDxUPiB7XG4gICAgICAgIGlmIChzZXRzLmxlbmd0aCA9PSAwKSByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICBlbHNlIGlmIChzZXRzLmxlbmd0aCA9PSAxKSByZXR1cm4gc2V0c1swXTtcblxuICAgICAgICAvLyBJJ20gbm90IHN1cmUgaWYgdGhlcmUgaXMgYW55IHVzZWZ1bCBvcHRpbWl6YXRpb24gZm9yIHNldCB1bmlvbnMsIHNvIGp1c3QgYWRkIHRoZW0gYWxsIEkgZ3Vlc3MuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICAgICAgZm9yIChjb25zdCBzZXQgb2Ygc2V0cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNldCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBFZmZpY2llbnRseSBjb21wdXRlIGF0b20gJiYgIW5lZ2F0ZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyc2VjdE5lZ2F0aW9uPFQ+KGF0b206IFNldDxUPiwgbmVnYXRlZDogU2V0PFQ+KTogU2V0PFQ+IHtcbiAgICAgICAgaWYgKGF0b20uc2l6ZSA+IG5lZ2F0ZWQuc2l6ZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogV291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29weSwgc2luY2UgSSdtIG5vdCBzdXJlIGl0J3MgYW55IGZhc3RlciB3aXRoIHRoZSBjb3B5LlxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldChhdG9tKTtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgbmVnYXRlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5kZWxldGUoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gLyogYXRvbS5zaXplIDwgbmVnYXRpb24uc2l6ZSAqLyBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgYXRvbSkge1xuICAgICAgICAgICAgICAgIGlmIChuZWdhdGVkLmhhcyhlbGVtZW50KSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IEZpbHRlcnMgfSBmcm9tIFwiLi9maWx0ZXJzXCI7XG5cbi8qKiBDb21wYXJpc29uIG9wZXJhdG9ycyB3aGljaCB5aWVsZCB0cnVlL2ZhbHNlLiAqL1xuZXhwb3J0IHR5cGUgQ29tcGFyZU9wID0gXCI+XCIgfCBcIj49XCIgfCBcIjw9XCIgfCBcIjxcIiB8IFwiPVwiIHwgXCIhPVwiO1xuLyoqIEFyaXRobWV0aWMgb3BlcmF0b3JzIHdoaWNoIHlpZWxkIG51bWJlcnMgYW5kIG90aGVyIHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIEFyaXRobWV0aWNPcCA9IFwiK1wiIHwgXCItXCIgfCBcIipcIiB8IFwiL1wiIHwgXCIlXCIgfCBcIiZcIiB8IFwifFwiO1xuLyoqIEluZGV4IGEgdmFsdWUgaW50byBhbm90aGVyIHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgTG9naWNhbE9wID0gXCJpbmRleFwiO1xuLyoqIEFsbCB2YWxpZCBiaW5hcnkgb3BlcmF0b3JzLiAqL1xuZXhwb3J0IHR5cGUgQmluYXJ5T3AgPSBDb21wYXJlT3AgfCBBcml0aG1ldGljT3AgfCBMb2dpY2FsT3A7XG5cbmV4cG9ydCB0eXBlIEV4cHJlc3Npb24gPVxuICAgIHwgTGl0ZXJhbEV4cHJlc3Npb25cbiAgICB8IFZhcmlhYmxlRXhwcmVzc2lvblxuICAgIHwgTGlzdEV4cHJlc3Npb25cbiAgICB8IE9iamVjdEV4cHJlc3Npb25cbiAgICB8IEJpbmFyeU9wRXhwcmVzc2lvblxuICAgIHwgRnVuY3Rpb25FeHByZXNzaW9uXG4gICAgfCBMYW1iZGFFeHByZXNzaW9uXG4gICAgfCBOZWdhdGVkRXhwcmVzc2lvbjtcblxuLyoqIExpdGVyYWwgcmVwcmVzZW50YXRpb24gb2Ygc29tZSBmaWVsZCB0eXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXRlcmFsRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJsaXRlcmFsXCI7XG4gICAgdmFsdWU6IExpdGVyYWw7XG59XG5cbi8qKiBBIHZhcmlhYmxlIGZpZWxkIGZvciBhIHZhcmlhYmxlIHdpdGggYSBnaXZlbiBuYW1lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYXJpYWJsZUV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwidmFyaWFibGVcIjtcbiAgICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBBIGxpc3QgbGl0ZXJhbCwgd2hpY2ggaXMgYW4gb3JkZXJlZCBjb2xsZWN0aW9uIG9mIGZpZWxkcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGlzdFwiO1xuICAgIHZhbHVlczogRXhwcmVzc2lvbltdO1xufVxuXG4vKiogQW4gb2JqZWN0IGxpdGVyYWwsIHdoaWNoIGlzIGEgbWFwcGluZyBvZiBuYW1lIHRvIGZpZWxkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcIm9iamVjdFwiO1xuICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvbj47XG59XG5cbi8qKiBBIGJpbmFyeSBvcGVyYXRvciBleHByZXNzaW9uIHdoaWNoIGNvbWJpbmVzIHR3byBzdWJub2RlcyBzb21laG93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5hcnlPcEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwiYmluYXJ5b3BcIjtcbiAgICBsZWZ0OiBFeHByZXNzaW9uO1xuICAgIHJpZ2h0OiBFeHByZXNzaW9uO1xuICAgIG9wOiBCaW5hcnlPcDtcbn1cblxuLyoqIEEgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aGljaCBjYWxscyBhIGZ1bmN0aW9uIG9uIDAgb3IgbW9yZSBhcmd1bWVudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJmdW5jdGlvblwiO1xuICAgIC8qKiBFaXRoZXIgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBvciBhIEZ1bmN0aW9uIG9iamVjdC4gKi9cbiAgICBmdW5jOiBFeHByZXNzaW9uO1xuICAgIC8qKiBUaGUgbGlzdCBvZiBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gKi9cbiAgICBhcmd1bWVudHM6IEV4cHJlc3Npb25bXTtcbn1cblxuLyoqIEFuIGlubGluZSBmdW5jdGlvbiBhY2NlcHRpbmcgb25lIG9yIG1vcmUgYXJndW1lbnRzIGFuZCBwcm9kdWNpbmcgYSB2YWx1ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJsYW1iZGFcIjtcbiAgICAvKiogQW4gb3JkZXJlZCBsaXN0IG9mIG5hbWVkIGFyZ3VtZW50cy4gKi9cbiAgICBhcmd1bWVudHM6IHN0cmluZ1tdO1xuICAgIC8qKiBUaGUgZmllbGQgd2hpY2ggd2lsbCBiZSBldmFsdWF0ZWQgdXNpbmcgdGhlIGFyZ3VtZW50cyBpbiBjb250ZXh0LiAqL1xuICAgIHZhbHVlOiBFeHByZXNzaW9uO1xufVxuXG4vKiogQW4gZXhwcmVzc2lvbiB3aGljaCBuZWdhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgZmllbGQuICovXG5leHBvcnQgaW50ZXJmYWNlIE5lZ2F0ZWRFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcIm5lZ2F0ZWRcIjtcblxuICAgIC8qKiBUaGUgY2hpbGQgZmllbGQgdG8gbmVnYXRlLiAqL1xuICAgIGNoaWxkOiBFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEV4cHJlc3Npb25zIHtcbiAgICAvKiogVGhlIGltcGxpY2l0IGZpZWxkIHJlZmVyZW5jaW5nIHRoZSBjdXJyZW50IGZpZWxkLiAqL1xuICAgIGV4cG9ydCBjb25zdCBST1c6IHN0cmluZyA9IFwiJHJvd1wiO1xuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IFZhcmlhYmxlRXhwcmVzc2lvbiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwidmFyaWFibGVcIiwgbmFtZSB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsKHZhbHVlOiBMaXRlcmFsKTogTGl0ZXJhbEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImxpdGVyYWxcIiwgdmFsdWUgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gYmluYXJ5T3AobGVmdDogRXhwcmVzc2lvbiwgb3A6IEJpbmFyeU9wLCByaWdodDogRXhwcmVzc2lvbik6IEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImJpbmFyeW9wXCIsIGxlZnQsIG9wLCByaWdodCB9IGFzIEJpbmFyeU9wRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gaW5kZXgob2JqOiBFeHByZXNzaW9uLCBpbmRleDogRXhwcmVzc2lvbik6IEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImJpbmFyeW9wXCIsIGxlZnQ6IG9iaiwgcmlnaHQ6IGluZGV4LCBvcDogXCJpbmRleFwiIH07XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnRzIGEgc3RyaW5nIGluIGRvdC1ub3RhdGlvbi1mb3JtYXQgaW50byBhIHZhcmlhYmxlIHdoaWNoIGluZGV4ZXMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluZGV4VmFyaWFibGUobmFtZTogc3RyaW5nKTogRXhwcmVzc2lvbiB7XG4gICAgICAgIGxldCBwYXJ0cyA9IG5hbWUuc3BsaXQoXCIuXCIpO1xuICAgICAgICBsZXQgcmVzdWx0OiBFeHByZXNzaW9uID0gRXhwcmVzc2lvbnMudmFyaWFibGUocGFydHNbMF0pO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcGFydHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIEV4cHJlc3Npb25zLmxpdGVyYWwocGFydHNbaW5kZXhdKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBsYW1iZGEoYXJnczogc3RyaW5nW10sIHZhbHVlOiBFeHByZXNzaW9uKTogTGFtYmRhRXhwcmVzc2lvbiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwibGFtYmRhXCIsIGFyZ3VtZW50czogYXJncywgdmFsdWUgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gZnVuYyhmdW5jOiBFeHByZXNzaW9uLCBhcmdzOiBFeHByZXNzaW9uW10pOiBGdW5jdGlvbkV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImZ1bmN0aW9uXCIsIGZ1bmMsIGFyZ3VtZW50czogYXJncyB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBsaXN0KHZhbHVlczogRXhwcmVzc2lvbltdKTogTGlzdEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImxpc3RcIiwgdmFsdWVzIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9iamVjdCh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+KTogT2JqZWN0RXhwcmVzc2lvbiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwib2JqZWN0XCIsIHZhbHVlcyB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBuZWdhdGUoY2hpbGQ6IEV4cHJlc3Npb24pOiBOZWdhdGVkRXhwcmVzc2lvbiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwibmVnYXRlZFwiLCBjaGlsZCB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhcmVPcChvcDogQmluYXJ5T3ApOiBvcCBpcyBDb21wYXJlT3Age1xuICAgICAgICByZXR1cm4gb3AgPT0gXCI8PVwiIHx8IG9wID09IFwiPFwiIHx8IG9wID09IFwiPlwiIHx8IG9wID09IFwiPj1cIiB8fCBvcCA9PSBcIiE9XCIgfHwgb3AgPT0gXCI9XCI7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYSBzZXQgb2YgYWxsIHVuYm91bmQgdmFyaWFibGVzIChpLmUuLCB2YXJpYWJsZXMgbm90IHByb3ZpZGVkIGJ5IGByb3dgLCBsYW1iZGFzLCBvciBzaW1pbGFyLikgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdW5ib3VuZFZhcmlhYmxlcyhleHByOiBFeHByZXNzaW9uLCBib3VuZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtST1ddKSk6IFNldDxzdHJpbmc+IHtcbiAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlvcFwiOlxuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBgcm93W1wiLi4uLlwiXWAuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBleHByLm9wID09PSBcImluZGV4XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgZXhwci5sZWZ0LnR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmXG4gICAgICAgICAgICAgICAgICAgIGV4cHIubGVmdC5uYW1lID09IFJPVyAmJlxuICAgICAgICAgICAgICAgICAgICBleHByLnJpZ2h0LnR5cGUgPT0gXCJsaXRlcmFsXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgTGl0ZXJhbHMuaXNTdHJpbmcoZXhwci5yaWdodC52YWx1ZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvdW5kLmhhcyhleHByLnJpZ2h0LnZhbHVlKSkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gbmV3IFNldChbZXhwci5yaWdodC52YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGNoZWNrIGxlZnQgYW5kIHJpZ2h0LlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKFt1bmJvdW5kVmFyaWFibGVzKGV4cHIubGVmdCwgYm91bmQpLCB1bmJvdW5kVmFyaWFibGVzKGV4cHIucmlnaHQsIGJvdW5kKV0pO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMuc2V0VW5pb24oZXhwci5hcmd1bWVudHMubWFwKChhKSA9PiB1bmJvdW5kVmFyaWFibGVzKGEsIGJvdW5kKSkpO1xuICAgICAgICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0JvdW5kID0gYm91bmQgPz8gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGV4cHIuYXJndW1lbnRzKSBuZXdCb3VuZC5hZGQoYXJnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB1bmJvdW5kVmFyaWFibGVzKGV4cHIudmFsdWUsIG5ld0JvdW5kKTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMuc2V0VW5pb24oZXhwci52YWx1ZXMubWFwKCh2KSA9PiB1bmJvdW5kVmFyaWFibGVzKHYsIGJvdW5kKSkpO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5ib3VuZFZhcmlhYmxlcyhleHByLmNoaWxkLCBib3VuZCk7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMuc2V0VW5pb24oT2JqZWN0LnZhbHVlcyhleHByLnZhbHVlcykubWFwKCh2KSA9PiB1bmJvdW5kVmFyaWFibGVzKHYsIGJvdW5kKSkpO1xuICAgICAgICAgICAgY2FzZSBcInZhcmlhYmxlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGJvdW5kICYmIGJvdW5kLmhhcyhleHByLm5hbWUpKSByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIG5ldyBTZXQoW2V4cHIubmFtZV0pO1xuICAgICAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbmRlciBhbiBleHByZXNzaW9uIGFzIGEgc3RyaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyhleHByOiBFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlvcFwiOlxuICAgICAgICAgICAgICAgIGlmIChleHByLm9wID09PSBcImluZGV4XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3RvU3RyaW5nKGV4cHIubGVmdCl9WyR7dG9TdHJpbmcoZXhwci5yaWdodCl9XWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RvU3RyaW5nKGV4cHIubGVmdCl9ICR7ZXhwci5vcH0gJHt0b1N0cmluZyhleHByLnJpZ2h0KX1gO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RvU3RyaW5nKGV4cHIuZnVuYyl9KCR7ZXhwci5hcmd1bWVudHMubWFwKHRvU3RyaW5nKS5qb2luKFwiLCBcIil9KWA7XG4gICAgICAgICAgICBjYXNlIFwibGFtYmRhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAoJHtleHByLmFyZ3VtZW50cy5qb2luKFwiLCBcIil9KSA9PiAke3RvU3RyaW5nKGV4cHIudmFsdWUpfWA7XG4gICAgICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgWyR7ZXhwci52YWx1ZXMubWFwKHRvU3RyaW5nKS5qb2luKFwiLCBcIil9XWA7XG4gICAgICAgICAgICBjYXNlIFwibmVnYXRlZFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgISR7dG9TdHJpbmcoZXhwci5jaGlsZCl9YDtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYHske09iamVjdC5lbnRyaWVzKGV4cHIudmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChbaywgdl0pID0+IGAke2t9OiAke3RvU3RyaW5nKHYpfWApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9fWA7XG4gICAgICAgICAgICBjYXNlIFwidmFyaWFibGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5uYW1lO1xuICAgICAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkID0gTGl0ZXJhbHMud3JhcFZhbHVlKGV4cHIudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXCIke3dyYXBwZWQudmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpdGVyYWxzLnRvU3RyaW5nKHdyYXBwZWQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCBjb25zdCBOVUxMID0gRXhwcmVzc2lvbnMubGl0ZXJhbChudWxsKTtcbn1cbiIsICIvKiogUGFyc2UgaW5saW5lIGZpZWxkcyBhbmQgb3RoZXIgZW1iZWRkZWQgbWV0YWRhdGEgaW4gYSBsaW5lLiAqL1xuXG5pbXBvcnQgeyBQUklNSVRJVkVTIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5pbXBvcnQgeyBMaXRlcmFsIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0ICogYXMgUCBmcm9tIFwicGFyc2ltbW9uXCI7XG5pbXBvcnQgZW1vamlSZWdleCBmcm9tIFwiZW1vamktcmVnZXhcIjtcbmltcG9ydCB7IEpzb25Db252ZXJzaW9uLCBKc29uTGl0ZXJhbCB9IGZyb20gXCJpbmRleC90eXBlcy9qc29uL2NvbW1vblwiO1xuXG4vKiogQSBwYXJzZWQgaW5saW5lIGZpZWxkIGZyb20gYSBzcGVjaWZpYyBsaW5lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbElubGluZUZpZWxkIHtcbiAgICAvKiogVGhlIHJhdyBwYXJzZWQga2V5LiAqL1xuICAgIGtleTogc3RyaW5nO1xuICAgIC8qKiBUaGUgcmF3IHZhbHVlIG9mIHRoZSBmaWVsZC4gKi9cbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICBzdGFydDogbnVtYmVyO1xuICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSAqdmFsdWUqIGZvciB0aGUgZmllbGQuICovXG4gICAgc3RhcnRWYWx1ZTogbnVtYmVyO1xuICAgIC8qKiBUaGUgZW5kIGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgZW5kOiBudW1iZXI7XG4gICAgLyoqIElmIHRoaXMgaW5saW5lIGZpZWxkIHdhcyBkZWZpbmVkIHZpYSBhIHdyYXBwaW5nICgnWycgb3IgJygnIG9yICdsaW5rJyksIHRoZW4gdGhlIHdyYXBwaW5nIHRoYXQgd2FzIHVzZWQuICovXG4gICAgd3JhcHBpbmc/OiBzdHJpbmc7XG59XG5cbi8qKiBGdWxsIGlubGluZSBmaWVsZCBtZXRhZGF0YSBmb3IgYW4gb2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVGaWVsZCB7XG4gICAgLyoqIFRoZSBhY3R1YWwga2V5IGRlc2NyaWJpbmcgdGhlIGlubGluZSBmaWVsZC4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgaW5saW5lIGZpZWxkLiAqL1xuICAgIHJhdzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFyc2VkIHZhbHVlLiAqL1xuICAgIHZhbHVlOiBMaXRlcmFsO1xuICAgIC8qKiBGdWxsIHBvc2l0aW9uIGluZm9ybWF0aW9uIGZvciB3aGVyZSB0aGUgaW5saW5lIGZpZWxkIGlzIGxvY2F0ZWQgaW4gdGhlIGRvY3VtZW50LiAqL1xuICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIC8qKiBUaGUgbGluZSBudW1iZXIgdGhlIGlubGluZSBmaWVsZCBhcHBlYXJzIG9uLiAqL1xuICAgICAgICBsaW5lOiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlICp2YWx1ZSogZm9yIHRoZSBmaWVsZC4gSW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICc6OicuICovXG4gICAgICAgIHN0YXJ0VmFsdWU6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBlbmQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfTtcbiAgICAvKiogSWYgdGhpcyBpbmxpbmUgZmllbGQgd2FzIGRlZmluZWQgdmlhIGEgd3JhcHBpbmcgKCdbJyBvciAnKCcgb3IgJ2xpbmsnKSwgdGhlbiB0aGUgd3JhcHBpbmcgdGhhdCB3YXMgdXNlZC4gKi9cbiAgICB3cmFwcGluZz86IHN0cmluZztcbn1cblxuLyoqIEpTT04sIHNlcmlhbGl6YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbmxpbmUgZmllbGQuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25JbmxpbmVGaWVsZCB7XG4gICAgLyoqIFRoZSBhY3R1YWwga2V5IGRlc2NyaWJpbmcgdGhlIGlubGluZSBmaWVsZC4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgaW5saW5lIGZpZWxkLiAqL1xuICAgIHJhdzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFyc2VkIHZhbHVlLiAqL1xuICAgIHZhbHVlOiBKc29uTGl0ZXJhbDtcbiAgICAvKiogRnVsbCBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3Igd2hlcmUgdGhlIGlubGluZSBmaWVsZCBpcyBsb2NhdGVkIGluIHRoZSBkb2N1bWVudC4gKi9cbiAgICBwb3NpdGlvbjoge1xuICAgICAgICAvKiogVGhlIGxpbmUgbnVtYmVyIHRoZSBpbmxpbmUgZmllbGQgYXBwZWFycyBvbi4gKi9cbiAgICAgICAgbGluZTogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSAqdmFsdWUqIGZvciB0aGUgZmllbGQuIEltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnOjonLiAqL1xuICAgICAgICBzdGFydFZhbHVlOiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgZW5kIGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgICAgIGVuZDogbnVtYmVyO1xuICAgIH07XG4gICAgLyoqIElmIHRoaXMgaW5saW5lIGZpZWxkIHdhcyBkZWZpbmVkIHZpYSBhIHdyYXBwaW5nICgnWycgb3IgJygnIG9yICdsaW5rJyksIHRoZW4gdGhlIHdyYXBwaW5nIHRoYXQgd2FzIHVzZWQuICovXG4gICAgd3JhcHBpbmc/OiBzdHJpbmc7XG59XG5cbi8qKiBDb252ZXJ0IGFuIGlubGluZSBmaWVsZCB0byBhIEpTT04gZm9ybWF0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25JbmxpbmVGaWVsZChmaWVsZDogSW5saW5lRmllbGQpOiBKc29uSW5saW5lRmllbGQge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaWVsZCwgeyB2YWx1ZTogSnNvbkNvbnZlcnNpb24uanNvbihmaWVsZC52YWx1ZSkgfSk7XG59XG5cbi8qKiBDb252ZXJ0IGEgSlNPTiBpbmxpbmUgZmllbGQgYmFjayB0byBhIHJlZ3VsYXIgZmllbGQuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVJbmxpbmVGaWVsZChmaWVsZDogSnNvbklubGluZUZpZWxkKTogSW5saW5lRmllbGQge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaWVsZCwgeyB2YWx1ZTogSnNvbkNvbnZlcnNpb24udmFsdWUoZmllbGQudmFsdWUpIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNJbmxpbmVGaWVsZChsb2NhbDogTG9jYWxJbmxpbmVGaWVsZCwgbGluZW5vOiBudW1iZXIpOiBJbmxpbmVGaWVsZDtcbmV4cG9ydCBmdW5jdGlvbiBhc0lubGluZUZpZWxkKGxvY2FsOiBMb2NhbElubGluZUZpZWxkW10sIGxpbmVubzogbnVtYmVyKTogSW5saW5lRmllbGRbXTtcbi8qKiBDb252ZXJ0IGEgbG9jYWwgaW5saW5lIGZpZWxkIGludG8gYSBmdWxsIGlubGluZSBmaWVsZCBieSBwZXJmb3JtaW5nIHBhcnNpbmcgYW5kIGFkZGluZyB0aGUgY29ycmVjdCBsaW5lIG51bWJlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0lubGluZUZpZWxkKFxuICAgIGxvY2FsOiBMb2NhbElubGluZUZpZWxkIHwgTG9jYWxJbmxpbmVGaWVsZFtdLFxuICAgIGxpbmVubzogbnVtYmVyXG4pOiBJbmxpbmVGaWVsZCB8IElubGluZUZpZWxkW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxvY2FsKSkge1xuICAgICAgICByZXR1cm4gbG9jYWwubWFwKChmKSA9PiBhc0lubGluZUZpZWxkKGYsIGxpbmVubykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleTogbG9jYWwua2V5LFxuICAgICAgICByYXc6IGxvY2FsLnZhbHVlLFxuICAgICAgICB2YWx1ZTogcGFyc2VJbmxpbmVWYWx1ZShsb2NhbC52YWx1ZSksXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lbm8sXG4gICAgICAgICAgICBzdGFydDogbG9jYWwuc3RhcnQsXG4gICAgICAgICAgICBzdGFydFZhbHVlOiBsb2NhbC5zdGFydFZhbHVlLFxuICAgICAgICAgICAgZW5kOiBsb2NhbC5lbmQsXG4gICAgICAgIH0sXG4gICAgICAgIHdyYXBwaW5nOiBsb2NhbC53cmFwcGluZyxcbiAgICB9O1xufVxuXG4vKiogVGhlIHdyYXBwZXIgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBpbmxpbmUgZmllbGQuICovXG5leHBvcnQgY29uc3QgSU5MSU5FX0ZJRUxEX1dSQVBQRVJTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IE9iamVjdC5mcmVlemUoe1xuICAgIFwiW1wiOiBcIl1cIixcbiAgICBcIihcIjogXCIpXCIsXG59KTtcblxuLyoqXG4gKiBGaW5kIGEgbWF0Y2hpbmcgY2xvc2luZyBicmFja2V0IHRoYXQgb2NjdXJzIGF0IG9yIGFmdGVyIGBzdGFydGAsIHJlc3BlY3RpbmcgbmVzdGluZyBhbmQgZXNjYXBlcy4gSWYgZm91bmQsXG4gKiByZXR1cm5zIHRoZSB2YWx1ZSBjb250YWluZWQgd2l0aGluIGFuZCB0aGUgc3RyaW5nIGluZGV4IGFmdGVyIHRoZSBlbmQgb2YgdGhlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2luZyhcbiAgICBsaW5lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBvcGVuOiBzdHJpbmcsXG4gICAgY2xvc2U6IHN0cmluZ1xuKTogeyB2YWx1ZTogc3RyaW5nOyBlbmRJbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIGxldCBuZXN0aW5nID0gMDtcbiAgICBsZXQgZXNjYXBlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnQ7IGluZGV4IDwgbGluZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbGV0IGNoYXIgPSBsaW5lLmNoYXJBdChpbmRleCk7XG5cbiAgICAgICAgLy8gQWxsb3dzIGZvciBkb3VibGUgZXNjYXBlcyBsaWtlICdcXFxcJyB0byBiZSByZW5kZXJlZCBub3JtYWxseS5cbiAgICAgICAgaWYgKGNoYXIgPT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgZXNjYXBlZCwgaWdub3JlIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgY29tcHV0aW5nIG5lc3RpbmcsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBpdCBpcy5cbiAgICAgICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXIgPT0gb3BlbikgbmVzdGluZysrO1xuICAgICAgICBlbHNlIGlmIChjaGFyID09IGNsb3NlKSBuZXN0aW5nLS07XG5cbiAgICAgICAgLy8gT25seSBvY2N1cnMgaWYgd2UgYXJlIG9uIGEgY2xvc2UgY2hhcmFjdGVyIGFuZCB0cmhlcmUgaXMgbm8gbW9yZSBuZXN0aW5nLlxuICAgICAgICBpZiAobmVzdGluZyA8IDApIHJldHVybiB7IHZhbHVlOiBsaW5lLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKSwgZW5kSW5kZXg6IGluZGV4ICsgMSB9O1xuXG4gICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogRmluZCB0aGUgJzo6JyBzZXBhcmF0b3IgaW4gYW4gaW5saW5lIGZpZWxkLiAqL1xuZnVuY3Rpb24gZmluZFNlcGFyYXRvcihsaW5lOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIpOiB7IGtleTogc3RyaW5nOyB2YWx1ZUluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNlcCA9IGxpbmUuaW5kZXhPZihcIjo6XCIsIHN0YXJ0KTtcbiAgICBpZiAoc2VwIDwgMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7IGtleTogbGluZS5zdWJzdHJpbmcoc3RhcnQsIHNlcCkudHJpbSgpLCB2YWx1ZUluZGV4OiBzZXAgKyAyIH07XG59XG5cbi8qKiBUcnkgdG8gY29tcGxldGVseSBwYXJzZSBhbiBpbmxpbmUgZmllbGQgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiBBc3N1bWVzIGBzdGFydGAgaXMgb24gYSB3cmFwcGluZyBjaGFyYWN0ZXIuICovXG5mdW5jdGlvbiBmaW5kU3BlY2lmaWNJbmxpbmVGaWVsZChsaW5lOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIpOiBMb2NhbElubGluZUZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgb3BlbiA9IGxpbmUuY2hhckF0KHN0YXJ0KTtcblxuICAgIGxldCBrZXkgPSBmaW5kU2VwYXJhdG9yKGxpbmUsIHN0YXJ0ICsgMSk7XG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gRmFpbCB0aGUgbWF0Y2ggaWYgd2UgZmluZCBhbnkgc2VwYXJhdG9yIGNoYXJhY3RlcnMgKG5vdCBhbGxvd2VkIGluIGtleXMpLlxuICAgIGZvciAobGV0IHNlcCBvZiBPYmplY3Qua2V5cyhJTkxJTkVfRklFTERfV1JBUFBFUlMpLmNvbmNhdChPYmplY3QudmFsdWVzKElOTElORV9GSUVMRF9XUkFQUEVSUykpKSB7XG4gICAgICAgIGlmIChrZXkua2V5LmluY2x1ZGVzKHNlcCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gZmluZENsb3NpbmcobGluZSwga2V5LnZhbHVlSW5kZXgsIG9wZW4sIElOTElORV9GSUVMRF9XUkFQUEVSU1tvcGVuXSk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGtleS5rZXksXG4gICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICBzdGFydFZhbHVlOiBrZXkudmFsdWVJbmRleCxcbiAgICAgICAgZW5kOiB2YWx1ZS5lbmRJbmRleCxcbiAgICAgICAgd3JhcHBpbmc6IG9wZW4sXG4gICAgfTtcbn1cblxuLyoqIFBhcnNlIGEgdGV4dHVhbCBpbmxpbmUgZmllbGQgdmFsdWUgaW50byBzb21ldGhpbmcgd2UgY2FuIHdvcmsgd2l0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlubGluZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBMaXRlcmFsIHtcbiAgICAvLyBFbXB0eSBpbmxpbmUgdmFsdWVzIChpLmUuLCBubyB0ZXh0KSBzaG91bGQgbWFwIHRvIG51bGwgdG8gbWF0Y2ggbG9uZy10ZXJtIERhdGF2aWV3IHNlbWFudGljcy5cbiAgICAvLyBOdWxsIGlzIGFsc28gYSBtb3JlIHVuaXZlcnNhbCB0eXBlIHRvIGRlYWwgd2l0aCB0aGFuIHN0cmluZ3MsIHNpbmNlIGFsbCBmdW5jdGlvbnMgYWNjZXB0IG51bGxzLlxuICAgIGlmICh2YWx1ZS50cmltKCkgPT0gXCJcIikgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBUaGUgc3RyaXBwZWQgbGl0ZXJhbCBmaWVsZCBwYXJzZXIgdW5kZXJzdGFuZHMgYWxsIG9mIHRoZSBub24tYXJyYXkvbm9uLW9iamVjdCBmaWVsZHMgYW5kIGNhbiBwYXJzZSB0aGVtIGZvciB1cy5cbiAgICAvLyBJbmxpbmUgZmllbGQgb2JqZWN0cyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQ7IGlubGluZSBhcnJheSBvYmplY3RzIGhhdmUgdG8gYmUgaGFuZGxlZCBieSB0aGUgcGFyc2VyXG4gICAgLy8gc2VwYXJhdGVseS5cbiAgICBsZXQgaW5saW5lID0gUFJJTUlUSVZFUy5pbmxpbmVGaWVsZC5wYXJzZSh2YWx1ZSk7XG4gICAgaWYgKGlubGluZS5zdGF0dXMpIHJldHVybiBpbmxpbmUudmFsdWU7XG4gICAgZWxzZSByZXR1cm4gdmFsdWU7XG59XG5cbi8qKiBFeHRyYWN0cyBpbmxpbmUgZmllbGRzIG9mIHRoZSBmb3JtICdba2V5OjogdmFsdWVdJyBmcm9tIGEgbGluZSBvZiB0ZXh0LiBUaGlzIGlzIGRvbmUgaW4gYSByZWxhdGl2ZWx5XG4gKiBcInJvYnVzdFwiIHdheSB0byBhdm9pZCBmYWlsaW5nIGR1ZSB0byBiYWQgbmVzdGluZyBvciBvdGhlciBpbnRlcmZlcmluZyBNYXJrZG93biBzeW1ib2xzOlxuICpcbiAqIC0gTG9vayBmb3IgYW55IHdyYXBwZXJzICgnWycgYW5kICcoJykgaW4gdGhlIGxpbmUsIHRyeWluZyB0byBwYXJzZSB3aGF0ZXZlciBjb21lcyBhZnRlciBpdCBhcyBhbiBpbmxpbmUga2V5OjouXG4gKiAtIElmIHN1Y2Nlc3NmdWwsIHNjYW4gdW50aWwgeW91IGZpbmQgYSBtYXRjaGluZyBlbmQgYnJhY2tldCwgYW5kIHBhcnNlIHdoYXRldmVyIHJlbWFpbnMgYXMgYW4gaW5saW5lIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdElubGluZUZpZWxkcyhsaW5lOiBzdHJpbmcsIGluY2x1ZGVUYXNrRmllbGRzOiBib29sZWFuID0gZmFsc2UpOiBMb2NhbElubGluZUZpZWxkW10ge1xuICAgIGxldCBmaWVsZHM6IExvY2FsSW5saW5lRmllbGRbXSA9IFtdO1xuICAgIGZvciAobGV0IHdyYXBwZXIgb2YgT2JqZWN0LmtleXMoSU5MSU5FX0ZJRUxEX1dSQVBQRVJTKSkge1xuICAgICAgICBsZXQgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyKTtcbiAgICAgICAgd2hpbGUgKGZvdW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZEZpZWxkID0gZmluZFNwZWNpZmljSW5saW5lRmllbGQobGluZSwgZm91bmRJbmRleCk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBmb3VuZEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKHBhcnNlZEZpZWxkKTtcbiAgICAgICAgICAgIGZvdW5kSW5kZXggPSBsaW5lLmluZGV4T2Yod3JhcHBlciwgcGFyc2VkRmllbGQuZW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlVGFza0ZpZWxkcykgZmllbGRzID0gZmllbGRzLmNvbmNhdChleHRyYWN0U3BlY2lhbFRhc2tGaWVsZHMobGluZSkpO1xuXG4gICAgZmllbGRzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KTtcblxuICAgIGxldCBmaWx0ZXJlZEZpZWxkczogTG9jYWxJbmxpbmVGaWVsZFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPT0gMCB8fCBmaWx0ZXJlZEZpZWxkc1tmaWx0ZXJlZEZpZWxkcy5sZW5ndGggLSAxXS5lbmQgPCBmaWVsZHNbaV0uc3RhcnQpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkRmllbGRzLnB1c2goZmllbGRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWRGaWVsZHM7XG59XG5cbi8qKiBWYWxpZGF0ZXMgdGhhdCBhIHJhdyBmaWVsZCBuYW1lIGhhcyBhIHZhbGlkIGZvcm0uICovXG5jb25zdCBGVUxMX0xJTkVfS0VZX1BBUlQ6IFAuUGFyc2VyPHN0cmluZz4gPSBQLmFsdChcbiAgICBQLnJlZ2V4cChuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgXCJ1XCIpKSxcbiAgICBQLnJlZ2V4cCgvWzAtOVxccHtMZXR0ZXJ9XFx3XFxzXy8tXSsvdSlcbilcbiAgICAubWFueSgpXG4gICAgLm1hcCgocGFydHMpID0+IHBhcnRzLmpvaW4oXCJcIikpO1xuXG5jb25zdCBGVUxMX0xJTkVfS0VZX1BBUlNFUjogUC5QYXJzZXI8c3RyaW5nPiA9IFAucmVnZXhwKC9bXjAtOVxcd1xccHtMZXR0ZXJ9XSovdSlcbiAgICAudGhlbihGVUxMX0xJTkVfS0VZX1BBUlQpXG4gICAgLnNraXAoUC5yZWdleHAoL1tfXFwqfmBdKi91KSk7XG5cbi8qKiBBdHRlbXB0IHRvIGV4dHJhY3QgYSBmdWxsLWxpbmUgZmllbGQgKEtleTo6IFZhbHVlIGNvbnN1bWluZyB0aGUgZW50aXJlIGNvbnRlbnQgbGluZSkuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEZ1bGxMaW5lRmllbGQodGV4dDogc3RyaW5nKTogTG9jYWxJbmxpbmVGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNlcCA9IGZpbmRTZXBhcmF0b3IodGV4dCwgMCk7XG4gICAgaWYgKCFzZXApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHBvc3QtcHJvY2VzcyB0aGUga2V5IHRvIGRyb3AgdW5uZWNlc3Nhcnkgb3BlbmluZyBhbm5vdGF0aW9ucyBhcyB3ZWxsIGFzXG4gICAgLy8gZHJvcCBzdXJyb3VuZGluZyBNYXJrZG93bi5cbiAgICBsZXQgcmVhbEtleSA9IEZVTExfTElORV9LRVlfUEFSU0VSLnBhcnNlKHNlcC5rZXkpO1xuICAgIGlmICghcmVhbEtleS5zdGF0dXMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHJlYWxLZXkudmFsdWUsXG4gICAgICAgIHZhbHVlOiB0ZXh0LnN1YnN0cmluZyhzZXAudmFsdWVJbmRleCkudHJpbSgpLFxuICAgICAgICBzdGFydDogMCxcbiAgICAgICAgc3RhcnRWYWx1ZTogc2VwLnZhbHVlSW5kZXgsXG4gICAgICAgIGVuZDogdGV4dC5sZW5ndGgsXG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENSRUFURURfREFURV9SRUdFWCA9IC9cXHV7Mjc5NX1cXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuZXhwb3J0IGNvbnN0IERVRV9EQVRFX1JFR0VYID0gLyg/OlxcdXsxRjRDNX18XFx1ezFGNEM2fXxcXHV7MUY1RDN9XFx1e0ZFMEZ9PylcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuZXhwb3J0IGNvbnN0IERPTkVfREFURV9SRUdFWCA9IC9cXHV7MjcwNX1cXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuZXhwb3J0IGNvbnN0IFNDSEVEVUxFRF9EQVRFX1JFR0VYID0gL1tcXHV7MjNGM31cXHV7MjMxQn1dXFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcbmV4cG9ydCBjb25zdCBTVEFSVF9EQVRFX1JFR0VYID0gL1xcdXsxRjZFQn1cXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuXG5leHBvcnQgY29uc3QgRU1PSklfUkVHRVhFUyA9IFtcbiAgICB7IHJlZ2V4OiBDUkVBVEVEX0RBVEVfUkVHRVgsIGtleTogXCJjcmVhdGVkXCIgfSxcbiAgICB7IHJlZ2V4OiBTVEFSVF9EQVRFX1JFR0VYLCBrZXk6IFwic3RhcnRcIiB9LFxuICAgIHsgcmVnZXg6IFNDSEVEVUxFRF9EQVRFX1JFR0VYLCBrZXk6IFwic2NoZWR1bGVkXCIgfSxcbiAgICB7IHJlZ2V4OiBEVUVfREFURV9SRUdFWCwga2V5OiBcImR1ZVwiIH0sXG4gICAgeyByZWdleDogRE9ORV9EQVRFX1JFR0VYLCBrZXk6IFwiY29tcGxldGlvblwiIH0sXG5dO1xuXG4vKiogUGFyc2Ugc3BlY2lhbCBjb21wbGV0ZWQvZHVlL2RvbmUgdGFzayBmaWVsZHMgd2hpY2ggYXJlIG1hcmtlZCB2aWEgZW1vamkuICovXG5mdW5jdGlvbiBleHRyYWN0U3BlY2lhbFRhc2tGaWVsZHMobGluZTogc3RyaW5nKTogTG9jYWxJbmxpbmVGaWVsZFtdIHtcbiAgICBsZXQgcmVzdWx0czogTG9jYWxJbmxpbmVGaWVsZFtdID0gW107XG5cbiAgICBmb3IgKGxldCB7IHJlZ2V4LCBrZXkgfSBvZiBFTU9KSV9SRUdFWEVTKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhsaW5lKTtcbiAgICAgICAgaWYgKCFtYXRjaCkgY29udGludWU7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXSxcbiAgICAgICAgICAgIHN0YXJ0OiBtYXRjaC5pbmRleCxcbiAgICAgICAgICAgIHN0YXJ0VmFsdWU6IG1hdGNoLmluZGV4ICsgMSxcbiAgICAgICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgsXG4gICAgICAgICAgICB3cmFwcGluZzogXCJlbW9qaS1zaG9ydGhhbmRcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSB2YWx1ZSBvZiBhbiBpbmxpbmUgZmllbGQ7IGlmIHRoZSB2YWx1ZSBpcyAndW5kZWZpbmVkJywgZGVsZXRlcyB0aGUga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldElubGluZUZpZWxkKHNvdXJjZTogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBleGlzdGluZyA9IGV4dHJhY3RJbmxpbmVGaWVsZHMoc291cmNlKTtcbiAgICBsZXQgZXhpc3RpbmdLZXlzID0gZXhpc3RpbmcuZmlsdGVyKChmKSA9PiBmLmtleSA9PSBrZXkpO1xuXG4gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzIE9SIHRoZSBrZXkgYWxyZWFkeSBkb2Vzbid0IGV4aXN0LlxuICAgIGlmIChleGlzdGluZ0tleXMubGVuZ3RoID4gMiB8fCAoZXhpc3RpbmdLZXlzLmxlbmd0aCA9PSAwICYmICF2YWx1ZSkpIHJldHVybiBzb3VyY2U7XG4gICAgbGV0IGV4aXN0aW5nS2V5ID0gZXhpc3RpbmdLZXlzWzBdO1xuXG4gICAgbGV0IGFubm90YXRpb24gPSB2YWx1ZSA/IGBbJHtrZXl9OjogJHt2YWx1ZX1dYCA6IFwiXCI7XG4gICAgaWYgKGV4aXN0aW5nS2V5KSB7XG4gICAgICAgIGxldCBwcmVmaXggPSBzb3VyY2Uuc3Vic3RyaW5nKDAsIGV4aXN0aW5nS2V5LnN0YXJ0KTtcbiAgICAgICAgbGV0IHN1ZmZpeCA9IHNvdXJjZS5zdWJzdHJpbmcoZXhpc3RpbmdLZXkuZW5kKTtcblxuICAgICAgICBpZiAoYW5ub3RhdGlvbikgcmV0dXJuIGAke3ByZWZpeH0ke2Fubm90YXRpb259JHtzdWZmaXh9YDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7cHJlZml4fSR7c3VmZml4LnRyaW1TdGFydCgpfWA7XG4gICAgfSBlbHNlIGlmIChhbm5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBgJHtzb3VyY2UudHJpbUVuZCgpfSAke2Fubm90YXRpb259YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RW1vamlTaG9ydGhhbmRDb21wbGV0aW9uRmllbGQoc291cmNlOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGV4dHJhY3RJbmxpbmVGaWVsZHMoc291cmNlLCB0cnVlKTtcbiAgICBjb25zdCBleGlzdGluZ0tleXMgPSBleGlzdGluZy5maWx0ZXIoKGYpID0+IGYua2V5ID09PSBcImNvbXBsZXRpb25cIiAmJiBmLndyYXBwaW5nID09PSBcImVtb2ppLXNob3J0aGFuZFwiKTtcblxuICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGUga2V5cyBPUiB0aGUga2V5IGFscmVhZHkgZG9lc24ndCBleGlzdC5cbiAgICBpZiAoZXhpc3RpbmdLZXlzLmxlbmd0aCA+IDIgfHwgKGV4aXN0aW5nS2V5cy5sZW5ndGggPT0gMCAmJiAhdmFsdWUpKSByZXR1cm4gc291cmNlO1xuXG4gICAgLyogTm8gd3JhcHBlciwgYWRkIG93biBzcGFjaW5nIGF0IHN0YXJ0ICovXG4gICAgY29uc3QgYW5ub3RhdGlvbiA9IHZhbHVlID8gYCBcdTI3MDUgJHt2YWx1ZX1gIDogXCJcIjtcbiAgICBsZXQgZXhpc3RpbmdLZXkgPSBleGlzdGluZ0tleXNbMF07XG4gICAgaWYgKGV4aXN0aW5nS2V5KSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgZXhpc3RpbmdLZXkuc3RhcnQpO1xuICAgICAgICBjb25zdCBzdWZmaXggPSBzb3VyY2Uuc3Vic3RyaW5nKGV4aXN0aW5nS2V5LmVuZCk7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXgudHJpbUVuZCgpfSR7YW5ub3RhdGlvbn0ke3N1ZmZpeH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgJHtzb3VyY2UudHJpbUVuZCgpfSR7YW5ub3RhdGlvbn1gO1xuICAgIH1cbn1cbiIsICIvKiogTWFwIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0LCByZXR1cm5pbmcgYSBuZXcgb2JqZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcE9iamVjdFZhbHVlczxWLCBVPihvYmplY3Q6IFJlY29yZDxzdHJpbmcsIFY+LCBmdW5jOiAoeDogVikgPT4gVSk6IFJlY29yZDxzdHJpbmcsIFU+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFU+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqZWN0KSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IGZ1bmModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCAiaW1wb3J0IHsgTGluaywgSnNvbkxpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcblxuLyoqIEpTT04tc2VyaWFsaXplZCBlcXVpdmFsZW50cyBmb3IgbGl0ZXJhbHMuICovXG5leHBvcnQgdHlwZSBKc29uTGl0ZXJhbCA9XG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgeyAkX3R5cGU6IFwiZGF0ZVwiOyB2YWx1ZTogc3RyaW5nIH1cbiAgICB8IHsgJF90eXBlOiBcImR1cmF0aW9uXCI7IHZhbHVlOiBzdHJpbmcgfVxuICAgIHwgeyAkX3R5cGU6IFwibGlua1wiOyB2YWx1ZTogSnNvbkxpbmsgfVxuICAgIHwgQXJyYXk8SnNvbkxpdGVyYWw+XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgfCBudWxsO1xuXG5leHBvcnQgbmFtZXNwYWNlIEpzb25Db252ZXJzaW9uIHtcbiAgICBleHBvcnQgY29uc3QgTk9PUF9OT1JNQUxJWkVSOiAoaW5wdXQ6IExpdGVyYWwpID0+IExpdGVyYWwgPSAoaW5wdXQpID0+IGlucHV0O1xuXG4gICAgLyoqIENvbnZlcnQgYSBsaXRlcmFsIHZhbHVlIHRvIGEgc2FmZSwgcGVyc2lzdGVudCBKU09OIGVxdWl2YWxlbnQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGpzb24obGl0ZXJhbDogTGl0ZXJhbCk6IEpzb25MaXRlcmFsIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShsaXRlcmFsKTtcbiAgICAgICAgaWYgKCF3cmFwcGVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQ/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm1hcChKc29uQ29udmVyc2lvbi5qc29uKTtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKHdyYXBwZWQudmFsdWUsIEpzb25Db252ZXJzaW9uLmpzb24pO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyAkX3R5cGU6IFwiZGF0ZVwiLCB2YWx1ZTogd3JhcHBlZC52YWx1ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IHRydWUgfSkgfTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJF90eXBlOiBcImxpbmtcIiwgdmFsdWU6IHdyYXBwZWQudmFsdWUudG9PYmplY3QoKSB9O1xuICAgICAgICAgICAgY2FzZSBcImR1cmF0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJF90eXBlOiBcImR1cmF0aW9uXCIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvSVNPKCkgfTtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgSlNPTiBsaXRlcmFsIHRvIGl0J3MgY29ycmVzcG9uZGluZyBoeWRyYXRlZCB2YWx1ZSwgb3B0aW9uYWxseSBhcHBseWluZ1xuICAgICAqIGEgbm9ybWFsaXphdGlvbiBzdGVwIHRvIHRoZSByZXN1bHRpbmcgdmFsdWUgYW5kIGFueSBsaXRlcmFscyBjb250YWluZWQgd2l0aGluIGl0XG4gICAgICogKHN1Y2ggYXMgaWYgdGhlIGxpdGVyYWwgaXMgYSBsaXN0IG9yIG9iamVjdCkuXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHZhbHVlKGpzb246IEpzb25MaXRlcmFsLCBub3JtYWxpemVyOiAoaW5wdXQ6IExpdGVyYWwpID0+IExpdGVyYWwgPSBOT09QX05PUk1BTElaRVIpOiBMaXRlcmFsIHtcbiAgICAgICAgaWYgKGpzb24gPT09IG51bGwgfHwganNvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoanNvbi5tYXAoKGlucHV0KSA9PiBKc29uQ29udmVyc2lvbi52YWx1ZShpbnB1dCwgbm9ybWFsaXplcikpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YganNvbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKCEoXCIkX3R5cGVcIiBpbiBqc29uKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKGpzb24sICh2KSA9PiBKc29uQ29udmVyc2lvbi52YWx1ZSh2IGFzIEpzb25MaXRlcmFsLCBub3JtYWxpemVyKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBqc29uW1wiJF90eXBlXCJdO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoRGF0ZVRpbWUuZnJvbUlTTyhqc29uLnZhbHVlLCB7IHNldFpvbmU6IHRydWUgfSkpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplcihEdXJhdGlvbi5mcm9tSVNPKGpzb24udmFsdWUpKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QoanNvbi52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZWQgdHlwZSAnJHt0eXBlfSchYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmltaXRpdmUgdHlwZSwgcmV0dXJuIGFzIGlzLlxuICAgICAgICByZXR1cm4gbm9ybWFsaXplcihqc29uIGFzIExpdGVyYWwpO1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG4vKiogVXRpbGl0aWVzIGZvciBjb252ZXJ0aW5nIGxpdGVyYWwgdHlwZXMgdG8gYW5kIGZyb20gdGhlaXIgWUFNTCBmcm9udG1hdHRlciByZXByZXNlbnRhdGlvbi4gKi9cblxuaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBQUklNSVRJVkVTIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcblxuLyoqIFlBTUwtZnJpZW5kbHkgcmVwcmVzZW50YXRpb24gZm9yIGEgbGl0ZXJhbC4gKi9cbmV4cG9ydCB0eXBlIFlhbWxMaXRlcmFsID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgQXJyYXk8WWFtbExpdGVyYWw+O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBZYW1sQ29udmVyc2lvbiB7XG4gICAgLyoqIENvbnZlcnQgYSBsaXRlcmFsIGludG8gYSB5YW1sIGZyaWVuZGx5IHJlcHJlc2VudGF0aW9uLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB5YW1sKHZhbHVlOiBMaXRlcmFsKTogWWFtbExpdGVyYWwge1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gTGl0ZXJhbHMud3JhcFZhbHVlKGxpdGVyYWwpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm1hcCh5YW1sKTtcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUudG9JU08oKTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvSHVtYW4oKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXJrZG93bigpO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXBPYmplY3RWYWx1ZXMod3JhcHBlZC52YWx1ZSwgeWFtbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgY29udmVydCBhIFlBTUwgbGl0ZXJhbCBpbnRvIGEgcmVndWxhciBsaXRlcmFsIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsKHZhbHVlOiBZYW1sTGl0ZXJhbCk6IExpdGVyYWwge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgdmFsdWUgYXMgQXJyYXk8YW55Pikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChsaXRlcmFsKGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGVQYXJzZSA9IERhdGVUaW1lLmZyb21KU0RhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlUGFyc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3QgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGxpdGVyYWwob2JqZWN0W2tleV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IGRhdGVQYXJzZSA9IFBSSU1JVElWRVMuZGF0ZS5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZGF0ZVBhcnNlLnN0YXR1cykgcmV0dXJuIGRhdGVQYXJzZS52YWx1ZTtcblxuICAgICAgICAgICAgbGV0IGR1cmF0aW9uUGFyc2UgPSBQUklNSVRJVkVTLmR1cmF0aW9uLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChkdXJhdGlvblBhcnNlLnN0YXR1cykgcmV0dXJuIGR1cmF0aW9uUGFyc2UudmFsdWU7XG5cbiAgICAgICAgICAgIGxldCBsaW5rUGFyc2UgPSBQUklNSVRJVkVTLmxpbmsucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGxpbmtQYXJzZS5zdGF0dXMpIHJldHVybiBsaW5rUGFyc2UudmFsdWU7XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhY2t1cCBpZiB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZSB0eXBlLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgRmlsZVN0YXRzIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBpdGVyYXRlSW5saW5lRmllbGRzLCBtYXJrZG93blNvdXJjZUltcG9ydCwgTWV0YWRhdGEsIFNlY3Rpb25EYXRhIH0gZnJvbSBcIi4vbWFya2Rvd25cIjtcbmltcG9ydCB7IEpzb25Gcm9udG1hdHRlckVudHJ5IH0gZnJvbSBcImluZGV4L3R5cGVzL2pzb24vbWFya2Rvd25cIjtcbmltcG9ydCB7XG4gICAgQ2FudmFzTWV0YWRhdGFJbmRleCxcbiAgICBKc29uQmFzZUNhbnZhc0NhcmQsXG4gICAgSnNvbkNhbnZhcyxcbiAgICBKc29uQ2FudmFzQ2FyZCxcbiAgICBKc29uQ2FudmFzRmlsZUNhcmQsXG4gICAgSnNvbkNhbnZhc1RleHRDYXJkLFxuICAgIEpzb25DYW52YXNXZWJDYXJkLFxufSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9jYW52YXNcIjtcbmltcG9ydCB7IENhbnZhc0ZpbGVEYXRhLCBDYW52YXNMaW5rRGF0YSwgQ2FudmFzVGV4dERhdGEsIENhbnZhc0RhdGEgYXMgSUNhbnZhcyB9IGZyb20gXCJvYnNpZGlhbi9jYW52YXNcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5cbi8qKiBJbXBvcnQgYSBjYW52YXMgZmlsZSB1c2luZyB0aGUgY2FudmFzIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc0ltcG9ydChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgaW5kZXg6IENhbnZhc01ldGFkYXRhSW5kZXhbXCJzdHJpbmdcIl0sXG4gICAgc3RhdHM6IEZpbGVTdGF0c1xuKTogSnNvbkNhbnZhcyB7XG4gICAgY29uc3QgY2FudmFzID0gbmV3IENhbnZhc0RhdGEocGF0aCwgc3RhdHMpO1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc291cmNlKSBhcyBJQ2FudmFzO1xuXG4gICAgZm9yIChjb25zdCBjIG9mIHBhcnNlZC5ub2Rlcykge1xuICAgICAgICBpZiAoYy50eXBlID09IFwiZ3JvdXBcIikgY29udGludWU7XG4gICAgICAgIGlmIChjLnR5cGUgPT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZnJvbnRtYXR0ZXIsIG1ldGFkYXRhLCBsaW5lcywgc2VjdGlvbnMgfSA9IG1hcmtkb3duU291cmNlSW1wb3J0KHBhdGgsIGMudGV4dCwgaW5kZXguY2FjaGVzW2MuaWRdKTtcbiAgICAgICAgICAgIGNvbnN0IGNhcmQgPSBuZXcgQ2FudmFzQ2FyZERhdGEocGF0aCwgYy5pZCwgYywgZnJvbnRtYXR0ZXIpO1xuICAgICAgICAgICAgc2VjdGlvbnMuZm9yRWFjaCgoaSkgPT4gY2FyZC5zZWN0aW9uKGkpKTtcbiAgICAgICAgICAgIGNhbnZhcy5jYXJkKGNhcmQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWcgaW4gbWV0YWRhdGEudGFncykgY2FudmFzLm1ldGFkYXRhLnRhZyh0YWcpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIG1ldGFkYXRhLmxpbmtzID8/IFtdKSBjYW52YXMubWV0YWRhdGEubGluayhsaW5rKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgaXRlcmF0ZUlubGluZUZpZWxkcyhsaW5lcykpIGNhbnZhcy5tZXRhZGF0YS5pbmxpbmVGaWVsZChmaWVsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkID0gbmV3IENhbnZhc0NhcmREYXRhKHBhdGgsIGMuaWQsIGMpO1xuICAgICAgICAgICAgY2FudmFzLmNhcmQoY2FyZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzLmJ1aWxkKCk7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3IgYSBzcGVjaWZpYyBjYW52YXMgY2FyZC4gKi9cbmFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q2FudmFzQ2FyZERhdGEge1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHBhdGg6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBub2RlSnNvbjogQ2FudmFzVGV4dERhdGEgfCBDYW52YXNMaW5rRGF0YSB8IENhbnZhc0ZpbGVEYXRhXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGJ1aWxkKCk6IEpzb25CYXNlQ2FudmFzQ2FyZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkZmlsZTogdGhpcy5wYXRoLFxuICAgICAgICAgICAgJGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogdGhpcy5ub2RlSnNvbi54LFxuICAgICAgICAgICAgICAgIHk6IHRoaXMubm9kZUpzb24ueSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAkZGltZW5zaW9uczoge1xuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLm5vZGVKc29uLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5ub2RlSnNvbi5oZWlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJGNvbG9yOiB0aGlzLm5vZGVKc29uLmNvbG9yLFxuICAgICAgICAgICAgJGxpbms6IExpbmsuZmlsZSh0aGlzLnBhdGgpLndpdGhCbG9jayh0aGlzLmlkKS50b09iamVjdCgpLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuLyoqIE1ldGFkYXRhIGZvciBhIHNwZWNpZmljIGNhcmQgaW4gYSBjYW52YXMgdmlldy4gKi9cbmV4cG9ydCBjbGFzcyBDYW52YXNDYXJkRGF0YSBleHRlbmRzIEFic3RyYWN0Q2FudmFzQ2FyZERhdGEge1xuICAgIHB1YmxpYyBzZWN0aW9uczogU2VjdGlvbkRhdGFbXSA9IFtdO1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHBhdGg6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBub2RlSnNvbjogQ2FudmFzVGV4dERhdGEgfCBDYW52YXNMaW5rRGF0YSB8IENhbnZhc0ZpbGVEYXRhLFxuICAgICAgICBwdWJsaWMgZnJvbnRtYXR0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBKc29uRnJvbnRtYXR0ZXJFbnRyeT5cbiAgICApIHtcbiAgICAgICAgc3VwZXIocGF0aCwgaWQsIG5vZGVKc29uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uRGF0YSk6IFNlY3Rpb25EYXRhIHtcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKHNlY3Rpb24pO1xuICAgICAgICByZXR1cm4gc2VjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbkNhbnZhc0NhcmQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMubm9kZUpzb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi4oc3VwZXIuYnVpbGQoKSBhcyBKc29uQmFzZUNhbnZhc0NhcmQpLFxuICAgICAgICAgICAgICAgICAgICAkaW5maWVsZHM6IHRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksXG4gICAgICAgICAgICAgICAgICAgICRmcm9udG1hdHRlcjogdGhpcy5mcm9udG1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgJHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLm1hcCgoeCkgPT4geC5idWlsZCgpKSxcbiAgICAgICAgICAgICAgICAgICAgJHRhZ3M6IHRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLFxuICAgICAgICAgICAgICAgICAgICAkbGlua3M6IHRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSxcbiAgICAgICAgICAgICAgICAgICAgJHR5cGU6IFwidGV4dC1jYXJkXCIsXG4gICAgICAgICAgICAgICAgICAgICRjb2xvcjogdGhpcy5ub2RlSnNvbi5jb2xvcixcbiAgICAgICAgICAgICAgICB9IGFzIEpzb25DYW52YXNUZXh0Q2FyZDtcbiAgICAgICAgICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3VwZXIuYnVpbGQoKSxcbiAgICAgICAgICAgICAgICAgICAgJGxpbmtlZEZpbGU6IHRoaXMubm9kZUpzb24uZmlsZSxcbiAgICAgICAgICAgICAgICB9IGFzIEpzb25DYW52YXNGaWxlQ2FyZDtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3VwZXIuYnVpbGQoKSxcbiAgICAgICAgICAgICAgICAgICAgJHVybDogdGhpcy5ub2RlSnNvbi51cmwsXG4gICAgICAgICAgICAgICAgfSBhcyBKc29uQ2FudmFzV2ViQ2FyZDtcbiAgICAgICAgICAgIC8vIHJldHVybiBuZXdcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIE1ldGFkYXRhIGZvciB0aGUgd2hvbGUgY2FudmFzIHBhZ2UgYXMgYSB3aG9sZS4gKi9cbmV4cG9ydCBjbGFzcyBDYW52YXNEYXRhIHtcbiAgICBwdWJsaWMgY2FyZHM6IENhbnZhc0NhcmREYXRhW10gPSBbXTtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHBhdGg6IHN0cmluZywgcHVibGljIHN0YXRzOiBGaWxlU3RhdHMpIHt9XG5cbiAgICBwdWJsaWMgY2FyZChkOiBDYW52YXNDYXJkRGF0YSk6IENhbnZhc0NhcmREYXRhIHtcbiAgICAgICAgdGhpcy5jYXJkcy5wdXNoKGQpO1xuICAgICAgICByZXR1cm4gZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogSnNvbkNhbnZhcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkY2FyZHM6IHRoaXMuY2FyZHMubWFwKCh4KSA9PiB4LmJ1aWxkKCkpLFxuICAgICAgICAgICAgJGN0aW1lOiB0aGlzLnN0YXRzLmN0aW1lLFxuICAgICAgICAgICAgJG10aW1lOiB0aGlzLnN0YXRzLm10aW1lLFxuICAgICAgICAgICAgJGluZmllbGRzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksXG4gICAgICAgICAgICAkdGFnczogdGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksXG4gICAgICAgICAgICAkcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgJHNpemU6IHRoaXMuc3RhdHMuc2l6ZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgY2FudmFzSW1wb3J0IH0gZnJvbSBcImluZGV4L2ltcG9ydC9jYW52YXNcIjtcbmltcG9ydCB7IG1hcmtkb3duSW1wb3J0IH0gZnJvbSBcImluZGV4L2ltcG9ydC9tYXJrZG93blwiO1xuaW1wb3J0IHsgQ2FudmFzSW1wb3J0UmVzdWx0LCBJbXBvcnRDb21tYW5kLCBNYXJrZG93bkltcG9ydFJlc3VsdCB9IGZyb20gXCJpbmRleC93ZWItd29ya2VyL21lc3NhZ2VcIjtcblxuLyoqIFdlYiB3b3JrZXIgZW50cnkgcG9pbnQgZm9yIGltcG9ydGluZy4gKi9cbm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5kYXRhIGFzIEltcG9ydENvbW1hbmQ7XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgICAgICBjb25zdCBtYXJrZG93biA9IG1hcmtkb3duSW1wb3J0KG1lc3NhZ2UucGF0aCwgbWVzc2FnZS5jb250ZW50cywgbWVzc2FnZS5tZXRhZGF0YSwgbWVzc2FnZS5zdGF0KTtcblxuICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwibWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICByZXN1bHQ6IG1hcmtkb3duLFxuICAgICAgICAgICAgfSBhcyBNYXJrZG93bkltcG9ydFJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS50eXBlID09PSBcImNhbnZhc1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjYW52YXMgPSBjYW52YXNJbXBvcnQobWVzc2FnZS5wYXRoLCBtZXNzYWdlLmNvbnRlbnRzLCBtZXNzYWdlLmluZGV4LCBtZXNzYWdlLnN0YXQpO1xuXG4gICAgICAgICAgICBwb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJjYW52YXNcIixcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGNhbnZhcyxcbiAgICAgICAgICAgIH0gYXMgQ2FudmFzSW1wb3J0UmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsgJGVycm9yOiBcIlVuc3VwcG9ydGVkIGltcG9ydCBtZXRob2QuXCIgfSk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBEYXRhY29yZSBJbmRleGVyIGZhaWxlZCB0byBpbmRleCAke2V2ZW50LmRhdGEucGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgIHBvc3RNZXNzYWdlKHsgJGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiMGpEQUFBLElBQUFBLEdBQUFDLEdBQUEsQ0FBQUMsR0FBQUMsS0FBQSxFQUFDLFNBQVMsRUFBRUMsRUFBRSxDQUFXLE9BQU9GLElBQWpCLFVBQW9DLE9BQU9DLElBQWpCLFNBQXdCQSxHQUFPLFFBQVFDLEVBQUUsRUFBYyxPQUFPLFFBQW5CLFlBQTJCLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRUEsQ0FBQyxFQUFZLE9BQU9GLElBQWpCLFNBQXlCQSxHQUFRLFVBQVVFLEVBQUUsRUFBRSxFQUFFLFVBQVVBLEVBQUUsQ0FBQyxHQUFlLE9BQU8sTUFBcEIsWUFBeUIsS0FBS0YsR0FBSyxVQUFVLENBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQyxJQUFJRSxFQUFFLENBQUMsRUFBRSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsR0FBR0YsRUFBRUUsQ0FBQyxFQUFFLE9BQU9GLEVBQUVFLENBQUMsRUFBRSxRQUFRLElBQUlDLEVBQUVILEVBQUVFLENBQUMsRUFBRSxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFQSxDQUFDLEVBQUUsS0FBS0MsRUFBRSxRQUFRQSxFQUFFQSxFQUFFLFFBQVFGLENBQUMsRUFBRUUsRUFBRSxFQUFFLEdBQUdBLEVBQUUsT0FBTyxDQUFDLE9BQU9GLEVBQUUsRUFBRSxFQUFFQSxFQUFFLEVBQUVELEVBQUVDLEVBQUUsRUFBRSxTQUFTRyxFQUFFSixFQUFFRSxFQUFFLENBQUNELEVBQUUsRUFBRUcsRUFBRUosQ0FBQyxHQUFHLE9BQU8sZUFBZUksRUFBRUosRUFBRSxDQUFDLGFBQWEsR0FBRyxXQUFXLEdBQUcsSUFBSUUsQ0FBQyxDQUFDLENBQUMsRUFBRUQsRUFBRSxFQUFFLFNBQVNHLEVBQUUsQ0FBQyxPQUFPLGVBQWVBLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRUgsRUFBRSxFQUFFLFNBQVNHLEVBQUUsQ0FBQyxJQUFJSixFQUFFSSxHQUFHQSxFQUFFLFdBQVcsVUFBVSxDQUFDLE9BQU9BLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPQSxDQUFDLEVBQUUsT0FBT0gsRUFBRSxFQUFFRCxFQUFFLElBQUlBLENBQUMsRUFBRUEsQ0FBQyxFQUFFQyxFQUFFLEVBQUUsU0FBU0csRUFBRUosRUFBRSxDQUFDLE9BQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0ksRUFBRUosQ0FBQyxDQUFDLEVBQUVDLEVBQUUsRUFBRSxHQUFHQSxFQUFFQSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUVELEVBQUVDLEVBQUUsQ0FBQyxhQUFhLFNBQVNDLEVBQUVFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCRixHQUFHLE9BQU8sSUFBSUEsRUFBRUUsQ0FBQyxFQUFFLEtBQUssRUFBRUEsQ0FBQyxDQUFDLElBQUlELEVBQUVELEVBQUUsVUFBVSxTQUFTRyxFQUFFRCxFQUFFSixFQUFFLENBQUMsUUFBUUMsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxJQUFJRCxFQUFFQyxDQUFDLENBQUMsQ0FBQyxTQUFTSyxFQUFFRixFQUFFSixFQUFFQyxFQUFFLENBQUMsT0FBTyxTQUFTRyxFQUFFSixFQUFFLENBQUNLLEVBQUVMLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQUNHLEVBQUVKLEVBQUVDLENBQUMsRUFBRUEsRUFBRUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQ0gsRUFBRUksRUFBRUosRUFBRUMsRUFBRUMsRUFBRUMsQ0FBQyxDQUFDLEVBQUVGLENBQUMsRUFBRUQsQ0FBQyxDQUFDLFNBQVMsRUFBRUksRUFBRUosRUFBRSxDQUFDLE9BQU9NLEVBQUUsU0FBU04sRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLE9BQU9ILEVBQUUsT0FBTyxDQUFDSSxFQUFFSCxFQUFFQyxFQUFFQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFSCxDQUFDLENBQUMsQ0FBQyxTQUFT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QUMsRUFBRSxFQUFFLFNBQVNKLEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUVJLEVBQUVILENBQUMsQ0FBQyxDQUFDLEVBQUVFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBU0MsRUFBRSxDQUFDLEdBQUdLLEVBQUUsRUFBRW1CLEdBQUV4QixDQUFDLEVBQUVBLEVBQUUsSUFBSSxNQUFNLElBQUksTUFBTSx3Q0FBd0NBLEVBQUUsTUFBTUEsRUFBRSxTQUFTLEVBQUUsRUFBRSwwQ0FBMEMsRUFBRSxJQUFJSixHQUFHSSxFQUFFLEdBQUcsS0FBSyxPQUFPQSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU9GLEVBQUUsU0FBU0QsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUV3QixFQUFFMUIsRUFBRUMsQ0FBQyxFQUFFLE9BQU9DLElBQUlDLEVBQUVRLEVBQUVWLEVBQUUsRUFBRUMsQ0FBQyxFQUFFUSxFQUFFVCxFQUFFRixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxTQUFTSSxFQUFFLENBQUMsT0FBT1MsRUFBRSxTQUFTVCxDQUFDLEVBQUUsSUFBSSxTQUFTQSxFQUFFLENBQUMsT0FBTyxPQUFPLEtBQUtBLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLFNBQVNBLEVBQUVKLEVBQUUsQ0FBQyxPQUFPYSxFQUFFLFNBQVNiLENBQUMsRUFBRSxJQUFJLFNBQVNBLEVBQUUsQ0FBQyxPQUFPQSxFQUFFLFNBQVNJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPVyxFQUFFLFFBQVFBLEVBQUUsQ0FBQyxFQUFFLFNBQVNBLEVBQUUsQ0FBQyxFQUFFLFNBQVNBLEVBQUUsQ0FBQyxFQUFFLE9BQU9DLEVBQUUsUUFBUUEsRUFBRSxDQUFDLEVBQUUsU0FBU0EsRUFBRSxDQUFDLEVBQUUsU0FBU0EsRUFBRSxDQUFDLEVBQUUsTUFBTUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsRUFBRSxRQUFRQSxFQUFFLENBQUMsRUFBRSxRQUFRQSxFQUFFLENBQUMsRUFBRSxNQUFN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QUFDLEVBQ3hDLE9BQVFBLEVBQVMsV0FBVyxDQUFFLE9BQVEsQ0FBRSxDQUFDLEVBQ3pDLEdBQUlBLEVBQVMsV0FBVyxDQUFFLE9BQVEsQ0FBRSxDQUFDLEVBQ3JDLElBQUtBLEVBQVMsV0FBVyxDQUFFLE9BQVEsQ0FBRSxDQUFDLEVBRXRDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3RDLE1BQU9BLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3ZDLEdBQUlBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3BDLElBQUtBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3JDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBRW5DLElBQUtBLEVBQVMsV0FBVyxDQUFFLEtBQU0sQ0FBRSxDQUFDLEVBQ3BDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLEtBQU0sQ0FBRSxDQUFDLEVBQ3JDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLEtBQU0sQ0FBRSxDQUFDLEVBRWxDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3RDLE1BQU9BLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3ZDLEdBQUlBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3BDLElBQUtBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBQ3JDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLE1BQU8sQ0FBRSxDQUFDLEVBRW5DLE9BQVFBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQzFDLFFBQVNBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQzNDLElBQUtBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQ3ZDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQ3hDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBRXJDLE9BQVFBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQzFDLFFBQVNBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQzNDLElBQUtBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQ3ZDLEtBQU1BLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLEVBQ3hDLEVBQUdBLEVBQVMsV0FBVyxDQUFFLFFBQVMsQ0FBRSxDQUFDLENBQ3pDLEVBR2EvQixHQUFrQixDQUMzQixJQUFLLElBQU1ELEVBQVMsTUFBTSxFQUMxQixNQUFPLElBQU1BLEVBQVMsTUFBTSxFQUFFLFFBQVEsS0FBSyxFQUMzQyxVQUFXLElBQ1BBLEVBQVMsTUFBTSxFQUNWLFFBQVEsS0FBSyxFQUNiLE1BQU1nQyxFQUFTLFdBQVcsQ0FBRSxLQUFNLENBQUUsQ0FBQyxDQUFDLEVBQy9DLFNBQVUsSUFDTmhDLEVBQVMsTUFBTSxFQUNWLFFBQVEsS0FBSyxFQUNiLEtBQUtnQyxFQUFTLFdBQVcsQ0FBRSxLQUFNLENBQUUsQ0FBQyxDQUFDLEVBQzlDLElBQUssSUFBTWhDLEVBQVMsTUFBTSxFQUFFLFFBQVEsTUFBTSxFQUMxQyxnQkFBaUIsSUFBTUEsRUFBUyxNQUFNLEVBQUUsUUFBUSxNQUFNLEVBQ3RELElBQUssSUFBTUEsRUFBUyxNQUFNLEVBQUUsTUFBTSxNQUFNLEVBQ3hDLGNBQWUsSUFBTUEsRUFBUyxNQUFNLEVBQUUsTUFBTSxNQUFNLEVBQ2xELElBQUssSUFBTUEsRUFBUyxNQUFNLEVBQUUsUUFBUSxNQUFNLEVBQzFDLGdCQUFpQixJQUFNQSxFQUFTLE1BQU0sRUFBRSxRQUFRLE1BQU0sRUFDdEQsSUFBSyxJQUFNQSxFQUFTLE1BQU0sRUFBRSxNQUFNLE1BQU0sRUFDeEMsY0FBZSxJQUFNQSxFQUFTLE1BQU0sRUFBRSxNQUFNLE1BQU0sRUFDbEQsSUFBSyxJQUFNQSxFQUFTLE1BQU0sRUFBRSxRQUFRLE9BQU8sRUFDM0MsaUJBQWtCLElBQU1BLEVBQVMsTUFBTSxFQUFFLFFBQVEsT0FBTyxFQUN4RCxJQUFLLElBQU1BLEVBQVMsTUFBTSxFQUFFLE1BQU0sT0FBTyxFQUN6QyxlQUFnQixJQUFNQSxFQUFTLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FDeEQsRUErQ2FpQyxHQUFlLGlCQUFtQyxDQUUzRCxTQUFXakQsR0FBTUQsRUFBVyxXQUFXLElBQUltRCxHQUFZLFFBQVEsRUFBRSxLQUFLLFVBQVUsRUFDaEYsT0FBU2xELEdBQU1ELEVBQVcsT0FBTyxJQUFJbUQsR0FBWSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQ3ZFLE9BQVNsRCxHQUFNRCxFQUFXLE9BQU8sSUFBSW1ELEdBQVksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUN2RSxLQUFPbEQsR0FBTUQsRUFBVyxLQUFLLElBQUltRCxHQUFZLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFDcEUsS0FBT2xELEdBQ0htRCxHQUFlLE9BQVFwRCxFQUFXLFFBQVEsRUFDckMsSUFBSSxDQUFDLENBQUNxRCxFQUFPQyxDQUFJLElBQU1ILEdBQVksUUFBUUcsQ0FBSSxDQUFDLEVBQ2hELEtBQUssTUFBTSxFQUNwQixTQUFXckQsR0FDUG1ELEdBQWUsTUFBT3BELEVBQVcsUUFBUSxFQUNwQyxJQUFJLENBQUMsQ0FBQ3FELEVBQU9FLENBQUcsSUFBTUosR0FBWSxRQUFRSSxDQUFHLENBQUMsRUFDOUMsS0FBSyxVQUFVLEVBQ3hCLEtBQU90RCxHQUFNRCxFQUFXLFFBQVEsSUFBS0MsR0FBTWtELEdBQVksSUFBSSxFQUMzRCxLQUFPbEQsR0FBTUQsRUFBVyxLQUFLLElBQUltRCxHQUFZLE9BQU8sRUFDcEQsS0FBT2hELEdBQ0hBLEVBQUUsV0FDRyxNQUFRLFNBQU8sR0FBRyxFQUFFLEtBQU8sZUFBYSxDQUFDLEVBQ3pDLEtBQU8sU0FBTyxHQUFHLEVBQUUsS0FBTyxlQUFhLEVBQUssZ0JBQWMsS0FBTyxTQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQzdFLElBQUtVLEdBQU1zQyxHQUFZLEtBQUt0QyxDQUFDLENBQUMsRUFDOUIsS0FBSyxNQUFNLEVBQ3BCLE9BQVNWLEdBQ0gsU0FDRUgsRUFBVyxXQUFXLEdBQUdBLEVBQVcsTUFBTSxFQUN4QyxTQUFPLEdBQUcsRUFBRSxLQUFPLGVBQWEsRUFDbENHLEVBQUUsV0FDRixDQUFDcUQsRUFBTUMsRUFBTUMsS0FDRixDQUFFLEtBQUFGLEVBQU0sTUFBQUUsQ0FBTSxFQUU3QixFQUNLLE1BQVEsU0FBTyxHQUFHLEVBQUUsS0FBTyxlQUFhLENBQUMsRUFDekMsS0FBTyxTQUFPLEdBQUcsRUFBRSxLQUFPLGVBQWEsRUFBSyxnQkFBYyxLQUFPLFNBQU8sR0FBRyxDQUFDLENBQUMsRUFDN0UsSUFBS0MsR0FBUyxDQUNYLElBQUlDLEVBQWtDLENBQUMsRUFDdkMsUUFBU0MsS0FBU0YsRUFBTUMsRUFBSUMsRUFBTSxJQUFJLEVBQUlBLEVBQU0sTUFDaEQsT0FBT1YsR0FBWSxPQUFPUyxDQUFHLENBQ2pDLENBQUMsRUFDQSxLQUFLLDJCQUEyQixFQUV6QyxLQUFPekQsR0FDRCxNQUVFSCxFQUFXLFVBQVUsSUFBS2EsR0FBTXNDLEdBQVksUUFBUXRDLENBQUMsQ0FBQyxFQUN0RFYsRUFBRSxRQUNGQSxFQUFFLEtBQ0ZBLEVBQUUsS0FDRkEsRUFBRSxPQUNGQSxFQUFFLE9BQ0ZBLEVBQUUsT0FDRkEsRUFBRSxLQUNGQSxFQUFFLE9BQ0ZBLEVBQUUsT0FDRkEsRUFBRSxLQUNGQSxFQUFFLFNBQ0ZBLEVBQUUsS0FDRkEsRUFBRSxRQUNOLEVBQ0osTUFBUUEsR0FDRixTQUFPQSxFQUFFLEtBQVEsTUFBSUEsRUFBRSxXQUFZQSxFQUFFLGFBQWNBLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRyxDQUFDMkQsRUFBS0MsSUFBYyxDQUNoRyxJQUFJQyxFQUFTRixFQUNiLFFBQVNHLEtBQVFGLEVBQ2IsT0FBUUUsRUFBSyxLQUFNLENBQ2YsSUFBSyxNQUNERCxFQUFTYixHQUFZLE1BQU1hLEVBQVFiLEdBQVksUUFBUWMsRUFBSyxJQUFJLENBQUMsRUFDakUsTUFDSixJQUFLLFFBQ0RELEVBQVNiLEdBQVksTUFBTWEsRUFBUUMsRUFBSyxJQUFJLEVBQzVDLE1BQ0osSUFBSyxXQUNERCxFQUFTYixHQUFZLEtBQUthLEVBQVFDLEVBQUssS0FBSyxFQUM1QyxLQUNSLENBR0osT0FBT0QsQ0FDWCxDQUFDLEVBQ0wsUUFBVTdELEdBQVEsU0FBUyxTQUFPLEdBQUcsRUFBR0EsRUFBRSxNQUFPLENBQUNGLEVBQUdpRSxJQUFVZixHQUFZLE9BQU9lLENBQUssQ0FBQyxFQUFFLEtBQUssZUFBZSxFQUM5RyxPQUFTL0QsR0FBTUEsRUFBRSxXQUFXLEtBQU8sZUFBYSxFQUFFLEtBQU8sU0FBTyxHQUFHLEVBQUssU0FBTyxHQUFHLENBQUMsRUFDbkYsT0FBU0EsR0FDSCxTQUNFSCxFQUFXLFdBQ04sTUFBUSxTQUFPLEdBQUcsRUFBRSxLQUFPLGVBQWEsQ0FBQyxFQUN6QyxLQUFPLFNBQU8sR0FBRyxFQUFFLEtBQU8sZUFBYSxFQUFLLFNBQU8sR0FBRyxFQUFFLEtBQU8sZUFBYSxDQUFDLEVBQ2hGLFNBQU8sSUFBSSxFQUFFLEtBQU8sZUFBYSxFQUNuQ0csRUFBRSxXQUNGLENBQUNnRSxFQUFPQyxFQUFTVixLQUNOLENBQUUsS0FBTSxTQUFVLFVBQVdTLEVBQU8sTUFBQVQsQ0FBTSxFQUV6RCxFQUVKLFdBQWF2RCxHQUFRLFNBQVMsU0FBTyxHQUFHLEVBQUdILEVBQVcsV0FBWSxDQUFDQyxFQUFHb0UsS0FBVSxDQUFFLEtBQU0sTUFBTyxLQUFBQSxDQUFLLEVBQUUsRUFDdEcsYUFBZWxFLEdBQ1QsU0FDSSxTQUFPLEdBQUcsRUFDVixnQkFDRkEsRUFBRSxXQUNBLGdCQUNBLFNBQU8sR0FBRyxFQUNaLENBQUNGLEVBQUdxRSxFQUFJRCxFQUFNRSxFQUFJQyxLQUNQLENBQUUsS0FBTSxRQUFTLEtBQUFILENBQUssRUFFckMsRUFDSixnQkFBa0JsRSxHQUNaLFNBQ0ksU0FBTyxHQUFHLEVBQ1YsZ0JBQ0ZBLEVBQUUsV0FBVyxNQUFRLFNBQU8sR0FBRyxFQUFFLEtBQU8sZUFBYSxDQUFDLEVBQ3BELGdCQUNBLFNBQU8sR0FBRyxFQUNaLENBQUNGLEVBQUd3RSxFQUFJQyxFQUFPSixFQUFJQyxLQUNSLENBQUUsS0FBTSxXQUFZLE1BQUFHLENBQU0sRUFFekMsRUFHSixhQUFldkUsR0FBTXdFLEdBQW1CeEUsRUFBRSxNQUFPSCxFQUFXLGFBQWNtRCxHQUFZLFFBQVEsRUFDOUYsZ0JBQWtCaEQsR0FBTXdFLEdBQW1CeEUsRUFBRSxhQUFjSCxFQUFXLGdCQUFpQm1ELEdBQVksUUFBUSxFQUMzRyxjQUFnQmhELEdBQU13RSxHQUFtQnhFLEVBQUUsZ0JBQWlCSCxFQUFXLGdCQUFpQm1ELEdBQVksUUFBUSxFQUM1RyxjQUFnQmhELEdBQ1p3RSxHQUFtQnhFLEVBQUUsY0FBZUgsRUFBVyxZQUFZLEdBQUdBLEVBQVcsVUFBVSxFQUFHbUQsR0FBWSxRQUFRLEVBQzlHLFNBQVdoRCxHQUFNQSxFQUFFLGNBRW5CLFdBQWFBLEdBQU1BLEVBQUUsUUFDekIsQ0FBQyxFQWdDWXlFLEdBQVUsaUJBQThCLENBQ2pELFNBQVczRSxHQUFNRCxFQUFXLElBQUksSUFBSzBELElBQVcsQ0FBRSxLQUFNLFNBQVUsTUFBQUEsQ0FBTSxFQUFFLEVBQzFFLFFBQVV6RCxHQUFNbUQsR0FBZSxLQUFNcEQsRUFBVyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUNDLEVBQUc0RSxDQUFFLEtBQU8sQ0FBRSxLQUFNLEtBQU0sTUFBT0EsQ0FBRyxFQUFFLEVBQ3BHLFVBQVk1RSxHQUNOLFNBQU8sR0FBRyxFQUNQLEtBQUtELEVBQVcsVUFBVSxFQUMxQixJQUFLMEQsSUFBVyxDQUFFLEtBQU0sUUFBUyxNQUFPQSxDQUFNLEVBQUUsRUFFekQsVUFBWXpELEdBQ1JtRCxHQUFpQixTQUFPLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBR3BELEVBQVcsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDOEUsRUFBTUMsQ0FBSSxLQUFPLENBQzFGLEtBQU0sT0FDTixNQUFPQSxFQUNQLE1BQU9ELEVBQUssWUFBWSxJQUFNLE9BQ2xDLEVBQUUsRUFFTixjQUFnQjNFLEdBQ1ppRCxHQUFpQixTQUFPLHFCQUFxQixFQUFFLEtBQUssVUFBVSxFQUFHakQsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMyRSxFQUFNRSxDQUFRLEtBQU8sQ0FDakcsS0FBTSxZQUNOLFNBQUFBLEVBQ0EsVUFBV0YsRUFBSyxZQUFZLElBQU0sV0FDdEMsRUFBRSxFQUNOLGFBQWUzRSxHQUNYaUQsR0FBaUIsU0FBTyxrQkFBa0IsRUFBRSxLQUFLLFNBQVMsRUFBR2pELEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDMkUsRUFBTUcsQ0FBTyxLQUFPLENBQzVGLEtBQU0sV0FDTixRQUFBQSxFQUNBLFVBQVdILEVBQUssWUFBWSxJQUFNLFNBQ3RDLEVBQUUsRUFDTixrQkFBb0I3RSxHQUNoQkQsRUFBVyxLQUFLLElBQUtrRixJQUFVLENBQzNCLEtBQU0sU0FDTixPQUFRLENBQUUsS0FBTSxPQUFRLE1BQU9BLENBQUssRUFDcEMsVUFBVyxVQUNmLEVBQUUsRUFDTixZQUFjL0UsR0FDVmlELEdBQWlCLFNBQU8sK0JBQStCLEVBQUUsS0FBSyxXQUFXLEVBQUdqRCxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzJFLEVBQU1LLENBQU0sS0FBTyxDQUMxRyxLQUFNLFNBQ04sT0FBQUEsRUFDQSxVQUNJTCxFQUFLLFlBQVksR0FBSyxVQUFZLFdBQWFBLEVBQUssWUFBWSxHQUFLLGFBQWUsV0FBYSxNQUN6RyxFQUFFLEVBQ04sWUFBYzdFLEdBQ1ZtRCxHQUFpQixTQUFPLFNBQVMsRUFBRSxLQUFLLFFBQVEsRUFBR3BELEVBQVcsV0FBVyxHQUFHQSxFQUFXLE1BQU0sQ0FBQyxFQUFFLElBQzVGLENBQUMsQ0FBQ3FELEVBQU9jLENBQUssS0FBTyxDQUNqQixLQUFNLFFBQ04sTUFBT0EsQ0FDWCxFQUNKLEVBQ0osc0JBQXdCaEUsR0FDcEJpRCxHQUFpQixTQUFPLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBR0YsR0FBVyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUNqRCxFQUFHb0UsQ0FBSSxLQUFPLENBQ3RGLEtBQU0sYUFDTixXQUFZQSxDQUNoQixFQUFFLEVBQ04sbUJBQXFCbEUsR0FBTStDLEdBQVcsY0FBYyxJQUFLbUIsSUFBVSxDQUFFLEtBQU0sYUFBYyxXQUFZQSxDQUFLLEVBQUUsRUFFNUcsWUFBY2xFLEdBQU1BLEVBQUUsTUFBTSxLQUFPLGVBQWEsRUFBRSxLQUFPLFNBQU8sR0FBRyxFQUFLLFNBQU8sR0FBRyxDQUFDLEVBQ25GLFlBQWNBLEdBQ1IsU0FBTyxHQUFHLEVBQ1AsS0FBTyxlQUFhLEVBQ3BCLEtBQUtBLEVBQUUsU0FBUyxFQUNoQixJQUFLdUQsSUFBVyxDQUNiLEtBQU0sTUFDTixRQUFTQSxDQUNiLEVBQUUsRUFDVixVQUFZdkQsR0FDTixNQUNFQSxFQUFFLFlBQ0ZBLEVBQUUsWUFDRkEsRUFBRSxrQkFDRkEsRUFBRSxTQUNGQSxFQUFFLFVBQ0ZBLEVBQUUsUUFDRkEsRUFBRSxZQUNGQSxFQUFFLGFBQ0ZBLEVBQUUsY0FDRkEsRUFBRSxZQUNGQSxFQUFFLFVBQ0ZBLEVBQUUsc0JBRUZBLEVBQUUsa0JBQ04sRUFDSixVQUFZQSxHQUNSd0UsR0FBbUJ4RSxFQUFFLFVBQVdILEVBQVcsWUFBYSxDQUFDb0YsRUFBTUMsRUFBS0MsS0FBVyxDQUMzRSxLQUFNLE1BQ04sU0FBVSxDQUFDRixFQUFNRSxDQUFLLENBQzFCLEVBQUUsRUFDTixTQUFXbkYsR0FDUHdFLEdBQW1CeEUsRUFBRSxVQUFXSCxFQUFXLFdBQVksQ0FBQ29GLEVBQU1DLEVBQUtDLEtBQVcsQ0FDMUUsS0FBTSxLQUNOLFNBQVUsQ0FBQ0YsRUFBTUUsQ0FBSyxDQUMxQixFQUFFLEVBQ04sTUFBUW5GLEdBQU1BLEVBQUUsU0FBUyxLQUFPLGVBQWEsQ0FDakQsQ0FBQyxFQWVNLFNBQVNvRixHQUNaQyxFQUNBQyxFQUNBQyxFQUNXLENBQ1gsT0FBUyxTQUFPRixFQUFTLE1BQU0sZ0JBQWVDLEVBQU8sZ0JBQWVELENBQUssRUFBRSxLQUFLLEVBQUcsQ0FBQ0csRUFBT0MsSUFBUyxDQUNoRyxHQUFJQSxFQUFLLFFBQVUsRUFBRyxPQUFPRCxFQUU3QixJQUFJRSxFQUFPSCxFQUFRQyxFQUFPQyxFQUFLLENBQUMsRUFBRSxDQUFDLEVBQUdBLEVBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNoRCxRQUFTRSxFQUFRLEVBQUdBLEVBQVFGLEVBQUssT0FBUUUsSUFDckNELEVBQU9ILEVBQVFHLEVBQU1ELEVBQUtFLENBQUssRUFBRSxDQUFDLEVBQUdGLEVBQUtFLENBQUssRUFBRSxDQUFDLENBQUMsRUFFdkQsT0FBT0QsQ0FDWCxDQUFDLENBQ0wsQ0FLTyxTQUFTRSxHQUFrQkMsRUFBaUNDLEVBQTBDLENBQ3pHLElBQU1DLEVBQVcsT0FBT0YsR0FBUyxTQUFhLFNBQU9BLENBQUksRUFBSUEsRUFDN0QsT0FBUyxTQUNMRSxFQUFTLEtBQU8sZUFBYSxFQUM3QkQsRUFBSyxLQUFPLGVBQWEsRUFBRSxLQUFPLFNBQU8sR0FBRyxFQUFLLFNBQU8sR0FBRyxDQUFDLEVBQzVELENBQUNFLEVBQUdDLElBQU0sQ0FBQ0QsRUFBR0MsQ0FBQyxDQUNuQixDQUNKLENBR08sU0FBU0MsR0FBWUMsS0FBc0JDLEVBQStDLENBQzdGLE9BQVMsU0FBTyxDQUFDQyxFQUFVQyxJQUNoQixDQUFDQyxFQUFPLElBQU0sQ0FDakIsSUFBSUMsRUFBVUwsRUFBYSxFQUFFSSxFQUFPLENBQUMsRUFDckMsR0FBSSxDQUFDQyxFQUFPLE9BQVEsT0FBT0EsRUFFM0IsUUFBU1gsS0FBUU8sRUFBTyxDQUNwQixJQUFJSyxFQUFRWixFQUFLVyxFQUFPLEtBQVUsRUFBVSxFQUFFRCxFQUFPQyxFQUFPLEtBQUssRUFDakUsR0FBSSxDQUFDQyxFQUFLLE9BQVEsT0FBT0QsRUFFekJBLEVBQVNDLENBQ2IsQ0FFQSxPQUFPRCxDQUNYLENBQ0gsQ0FDTCxDSzVwQkEsSUFBQUUsR0FBbUIsU0NIWixTQUFTQyxHQUFzQkMsRUFBMkJDLEVBQXNDLENBQ25HLElBQU1DLEVBQTRCLENBQUMsRUFDbkMsT0FBVyxDQUFDQyxFQUFLQyxDQUFLLElBQUssT0FBTyxRQUFRSixDQUFNLEVBQzVDRSxFQUFPQyxDQUFHLEVBQUlGLEVBQUtHLENBQUssRUFHNUIsT0FBT0YsQ0FDWCxDQ1NPLElBQVVHLE9BQVYsQ0FDVUEsRUFBQSxnQkFBZ0RDLEdBQVVBLEVBR2hFLFNBQVNDLEVBQUtDLEVBQStCLENBQ2hELElBQU1DLEVBQVVDLEdBQVMsVUFBVUYsQ0FBTyxFQUMxQyxHQUFJLENBQUNDLEVBQVMsT0FBTyxLQUVyQixPQUFRQSxHQUFBLFlBQUFBLEVBQVMsS0FBTSxDQUNuQixJQUFLLFFBQ0QsT0FBT0EsRUFBUSxNQUFNLElBQUlKLEVBQWUsSUFBSSxFQUNoRCxJQUFLLFNBQ0QsT0FBT00sR0FBZ0JGLEVBQVEsTUFBT0osRUFBZSxJQUFJLEVBQzdELElBQUssT0FDRCxNQUFPLENBQUUsT0FBUSxPQUFRLE1BQU9JLEVBQVEsTUFBTSxNQUFNLENBQUUsY0FBZSxFQUFLLENBQUMsQ0FBRSxFQUNqRixJQUFLLE9BQ0QsTUFBTyxDQUFFLE9BQVEsT0FBUSxNQUFPQSxFQUFRLE1BQU0sU0FBUyxDQUFFLEVBQzdELElBQUssV0FDRCxNQUFPLENBQUUsT0FBUSxXQUFZLE1BQU9BLEVBQVEsTUFBTSxNQUFNLENBQUUsRUFDOUQsSUFBSyxVQUNMLElBQUssU0FDTCxJQUFLLFNBQ0QsT0FBT0EsRUFBUSxNQUNuQixJQUFLLFdBQ0wsSUFBSyxPQUNELE9BQU8sSUFDZixDQUNKLENBdkJPSixFQUFTLEtBQUFFLEVBOEJULFNBQVNLLEVBQU1MLEVBQW1CTSxFQUEwQ1IsRUFBQSxnQkFBMEIsQ0FDekcsR0FBSUUsR0FBUyxLQUE0QixPQUFPLEtBRWhELEdBQUksTUFBTSxRQUFRQSxDQUFJLEVBQ2xCLE9BQU9NLEVBQVdOLEVBQUssSUFBS0QsR0FBVUQsRUFBZSxNQUFNQyxFQUFPTyxDQUFVLENBQUMsQ0FBQyxFQUMzRSxHQUFJLE9BQU9OLEdBQVMsU0FBVSxDQUNqQyxHQUFJLEVBQUUsV0FBWUEsR0FDZCxPQUFPSSxHQUFnQkosRUFBT08sR0FBTVQsRUFBZSxNQUFNUyxFQUFrQkQsQ0FBVSxDQUFDLEVBRTFGLElBQU1FLEVBQU9SLEVBQUssT0FDbEIsT0FBUVEsRUFBTSxDQUNWLElBQUssT0FDRCxPQUFPRixFQUFXRyxFQUFTLFFBQVFULEVBQUssTUFBTyxDQUFFLFFBQVMsRUFBSyxDQUFDLENBQUMsRUFDckUsSUFBSyxXQUNELE9BQU9NLEVBQVdJLEVBQVMsUUFBUVYsRUFBSyxLQUFLLENBQUMsRUFDbEQsSUFBSyxPQUNELE9BQU9NLEVBQVdLLEdBQUssV0FBV1gsRUFBSyxLQUFLLENBQUMsRUFDakQsUUFDSSxNQUFNLElBQUksTUFBTSxpQ0FBaUNRLENBQUksSUFBSSxDQUNqRSxDQUNKLENBR0EsT0FBT0YsRUFBV04sQ0FBZSxDQUNyQyxDQXhCT0YsRUFBUyxNQUFBTyxJQWxDSFAsUUFBQSxLRnNEVixTQUFTYyxHQUFnQkMsRUFBcUMsQ0FDakUsT0FBTyxPQUFPLE9BQU8sQ0FBQyxFQUFHQSxFQUFPLENBQUUsTUFBT0MsR0FBZSxLQUFLRCxFQUFNLEtBQUssQ0FBRSxDQUFDLENBQy9FLENBVU8sU0FBU0UsR0FDWkMsRUFDQUMsRUFDMkIsQ0FDM0IsT0FBSSxNQUFNLFFBQVFELENBQUssRUFDWkEsRUFBTSxJQUFLRSxHQUFNSCxHQUFjRyxFQUFHRCxDQUFNLENBQUMsRUFHN0MsQ0FDSCxJQUFLRCxFQUFNLElBQ1gsSUFBS0EsRUFBTSxNQUNYLE1BQU9HLEdBQWlCSCxFQUFNLEtBQUssRUFDbkMsU0FBVSxDQUNOLEtBQU1DLEVBQ04sTUFBT0QsRUFBTSxNQUNiLFdBQVlBLEVBQU0sV0FDbEIsSUFBS0EsRUFBTSxHQUNmLEVBQ0EsU0FBVUEsRUFBTSxRQUNwQixDQUNKLENBR08sSUFBTUksR0FBMEQsT0FBTyxPQUFPLENBQ2pGLElBQUssSUFDTCxJQUFLLEdBQ1QsQ0FBQyxFQU1ELFNBQVNDLEdBQ0xDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQytDLENBQy9DLElBQUlDLEVBQVUsRUFDVkMsRUFBVSxHQUNkLFFBQVNDLEVBQVFMLEVBQU9LLEVBQVFOLEVBQUssT0FBUU0sSUFBUyxDQUNsRCxJQUFJQyxFQUFPUCxFQUFLLE9BQU9NLENBQUssRUFHNUIsR0FBSUMsR0FBUSxLQUFNLENBQ2RGLEVBQVUsQ0FBQ0EsRUFDWCxRQUNKLENBR0EsR0FBSUEsRUFBUyxDQUNUQSxFQUFVLEdBQ1YsUUFDSixDQU1BLEdBSklFLEdBQVFMLEVBQU1FLElBQ1RHLEdBQVFKLEdBQU9DLElBR3BCQSxFQUFVLEVBQUcsTUFBTyxDQUFFLE1BQU9KLEVBQUssVUFBVUMsRUFBT0ssQ0FBSyxFQUFFLEtBQUssRUFBRyxTQUFVQSxFQUFRLENBQUUsRUFFMUZELEVBQVUsRUFDZCxDQUdKLENBR0EsU0FBU0csR0FBY1IsRUFBY0MsRUFBZ0UsQ0FDakcsSUFBSVEsRUFBTVQsRUFBSyxRQUFRLEtBQU1DLENBQUssRUFDbEMsR0FBSSxFQUFBUSxFQUFNLEdBRVYsTUFBTyxDQUFFLElBQUtULEVBQUssVUFBVUMsRUFBT1EsQ0FBRyxFQUFFLEtBQUssRUFBRyxXQUFZQSxFQUFNLENBQUUsQ0FDekUsQ0FHQSxTQUFTQyxHQUF3QlYsRUFBY0MsRUFBNkMsQ0FDeEYsSUFBSUMsRUFBT0YsRUFBSyxPQUFPQyxDQUFLLEVBRXhCVSxFQUFNSCxHQUFjUixFQUFNQyxFQUFRLENBQUMsRUFDdkMsR0FBSVUsSUFBUSxPQUFXLE9BR3ZCLFFBQVNGLEtBQU8sT0FBTyxLQUFLWCxFQUFxQixFQUFFLE9BQU8sT0FBTyxPQUFPQSxFQUFxQixDQUFDLEVBQzFGLEdBQUlhLEVBQUksSUFBSSxTQUFTRixDQUFHLEVBQUcsT0FHL0IsSUFBSUcsRUFBUWIsR0FBWUMsRUFBTVcsRUFBSSxXQUFZVCxFQUFNSixHQUFzQkksQ0FBSSxDQUFDLEVBQy9FLEdBQUlVLElBQVUsT0FFZCxNQUFPLENBQ0gsSUFBS0QsRUFBSSxJQUNULE1BQU9DLEVBQU0sTUFDYixNQUFPWCxFQUNQLFdBQVlVLEVBQUksV0FDaEIsSUFBS0MsRUFBTSxTQUNYLFNBQVVWLENBQ2QsQ0FDSixDQUdPLFNBQVNMLEdBQWlCZSxFQUF3QixDQUdyRCxHQUFJQSxFQUFNLEtBQUssR0FBSyxHQUFJLE9BQU8sS0FLL0IsSUFBSUMsRUFBU0MsRUFBVyxZQUFZLE1BQU1GLENBQUssRUFDL0MsT0FBSUMsRUFBTyxPQUFlQSxFQUFPLE1BQ3JCRCxDQUNoQixDQVFPLFNBQVNHLEdBQW9CZixFQUFjZ0IsRUFBNkIsR0FBMkIsQ0FDdEcsSUFBSUMsRUFBNkIsQ0FBQyxFQUNsQyxRQUFTQyxLQUFXLE9BQU8sS0FBS3BCLEVBQXFCLEVBQUcsQ0FDcEQsSUFBSXFCLEVBQWFuQixFQUFLLFFBQVFrQixDQUFPLEVBQ3JDLEtBQU9DLEdBQWMsR0FBRyxDQUNwQixJQUFJQyxFQUFjVixHQUF3QlYsRUFBTW1CLENBQVUsRUFDMUQsR0FBSSxDQUFDQyxFQUFhLENBQ2RELEVBQWFuQixFQUFLLFFBQVFrQixFQUFTQyxFQUFhLENBQUMsRUFDakQsUUFDSixDQUVBRixFQUFPLEtBQUtHLENBQVcsRUFDdkJELEVBQWFuQixFQUFLLFFBQVFrQixFQUFTRSxFQUFZLEdBQUcsQ0FDdEQsQ0FDSixDQUVJSixJQUFtQkMsRUFBU0EsRUFBTyxPQUFPSSxHQUF5QnJCLENBQUksQ0FBQyxHQUU1RWlCLEVBQU8sS0FBSyxDQUFDSyxFQUFHQyxJQUFNRCxFQUFFLE1BQVFDLEVBQUUsS0FBSyxFQUV2QyxJQUFJQyxFQUFxQyxDQUFDLEVBQzFDLFFBQVNDLEVBQUksRUFBR0EsRUFBSVIsRUFBTyxPQUFRUSxLQUMzQkEsR0FBSyxHQUFLRCxFQUFlQSxFQUFlLE9BQVMsQ0FBQyxFQUFFLElBQU1QLEVBQU9RLENBQUMsRUFBRSxRQUNwRUQsRUFBZSxLQUFLUCxFQUFPUSxDQUFDLENBQUMsRUFHckMsT0FBT0QsQ0FDWCxDQUdBLElBQU1FLEdBQXlDLE9BQ3pDLFVBQU8sSUFBSSxPQUFPQyxHQUFXLEVBQUcsR0FBRyxDQUFDLEVBQ3BDLFVBQU8sMEJBQTBCLENBQ3ZDLEVBQ0ssS0FBSyxFQUNMLElBQUtDLEdBQVVBLEVBQU0sS0FBSyxFQUFFLENBQUMsRUFFNUJDLEdBQTJDLFVBQU8sc0JBQXNCLEVBQ3pFLEtBQUtILEVBQWtCLEVBQ3ZCLEtBQU8sVUFBTyxXQUFXLENBQUMsRUFHeEIsU0FBU0ksR0FBcUJDLEVBQTRDLENBQzdFLElBQUl0QixFQUFNRCxHQUFjdUIsRUFBTSxDQUFDLEVBQy9CLEdBQUksQ0FBQ3RCLEVBQUssT0FJVixJQUFJdUIsRUFBVUgsR0FBcUIsTUFBTXBCLEVBQUksR0FBRyxFQUNoRCxHQUFLdUIsRUFBUSxPQUViLE1BQU8sQ0FDSCxJQUFLQSxFQUFRLE1BQ2IsTUFBT0QsRUFBSyxVQUFVdEIsRUFBSSxVQUFVLEVBQUUsS0FBSyxFQUMzQyxNQUFPLEVBQ1AsV0FBWUEsRUFBSSxXQUNoQixJQUFLc0IsRUFBSyxNQUNkLENBQ0osQ0FFTyxJQUFNRSxHQUFxQixrQ0FDckJDLEdBQWlCLG9FQUNqQkMsR0FBa0Isa0NBQ2xCQyxHQUF1Qiw0Q0FDdkJDLEdBQW1CLG1DQUVuQkMsR0FBZ0IsQ0FDekIsQ0FBRSxNQUFPTCxHQUFvQixJQUFLLFNBQVUsRUFDNUMsQ0FBRSxNQUFPSSxHQUFrQixJQUFLLE9BQVEsRUFDeEMsQ0FBRSxNQUFPRCxHQUFzQixJQUFLLFdBQVksRUFDaEQsQ0FBRSxNQUFPRixHQUFnQixJQUFLLEtBQU0sRUFDcEMsQ0FBRSxNQUFPQyxHQUFpQixJQUFLLFlBQWEsQ0FDaEQsRUFHQSxTQUFTZCxHQUF5QnJCLEVBQWtDLENBQ2hFLElBQUl1QyxFQUE4QixDQUFDLEVBRW5DLE9BQVMsQ0FBRSxNQUFBQyxFQUFPLElBQUE3QixDQUFJLElBQUsyQixHQUFlLENBQ3RDLElBQU1HLEVBQVFELEVBQU0sS0FBS3hDLENBQUksRUFDeEJ5QyxHQUVMRixFQUFRLEtBQUssQ0FDVCxJQUFBNUIsRUFDQSxNQUFPOEIsRUFBTSxDQUFDLEVBQ2QsTUFBT0EsRUFBTSxNQUNiLFdBQVlBLEVBQU0sTUFBUSxFQUMxQixJQUFLQSxFQUFNLE1BQVFBLEVBQU0sQ0FBQyxFQUFFLE9BQzVCLFNBQVUsaUJBQ2QsQ0FBQyxDQUNMLENBRUEsT0FBT0YsQ0FDWCxDR3pSTyxJQUFVRyxPQUFWLENBRUksU0FBU0MsRUFBS0MsRUFBNkIsQ0FDOUMsSUFBTUMsRUFBVUMsR0FBUyxVQUFVQyxDQUFPLEVBQzFDLEdBQUksQ0FBQ0YsRUFBUyxPQUFPLEtBRXJCLE9BQVFBLEVBQVEsS0FBTSxDQUNsQixJQUFLLFNBQ0wsSUFBSyxVQUNMLElBQUssT0FDTCxJQUFLLFNBQ0QsT0FBT0EsRUFBUSxNQUNuQixJQUFLLFFBQ0QsT0FBT0EsRUFBUSxNQUFNLElBQUlGLENBQUksRUFDakMsSUFBSyxPQUNELE9BQU9FLEVBQVEsTUFBTSxNQUFNLEVBQy9CLElBQUssV0FDRCxPQUFPQSxFQUFRLE1BQU0sUUFBUSxFQUNqQyxJQUFLLFdBQ0QsT0FBTyxLQUNYLElBQUssT0FDRCxPQUFPQSxFQUFRLE1BQU0sU0FBUyxFQUNsQyxJQUFLLFNBQ0QsT0FBT0csR0FBZ0JILEVBQVEsTUFBT0YsQ0FBSSxDQUNsRCxDQUNKLENBdkJPRCxFQUFTLEtBQUFDLEVBMEJULFNBQVNJLEVBQVFILEVBQTZCLENBQ2pELEdBQUlBLEdBQVMsS0FDVCxPQUFPLEtBQ0osR0FBSSxPQUFPQSxHQUFVLFNBQ3hCLEdBQUksTUFBTSxRQUFRQSxDQUFLLEVBQUcsQ0FDdEIsSUFBSUssRUFBUyxDQUFDLEVBQ2QsUUFBU0MsS0FBU04sRUFDZEssRUFBTyxLQUFLRixFQUFRRyxDQUFLLENBQUMsRUFHOUIsT0FBT0QsQ0FDWCxLQUFPLElBQUlMLGFBQWlCLEtBRXhCLE9BRGdCTyxFQUFTLFdBQVdQLENBQUssRUFFdEMsQ0FDSCxJQUFJUSxFQUFTUixFQUNUSyxFQUFrQyxDQUFDLEVBQ3ZDLFFBQVNJLEtBQU9ELEVBQ1pILEVBQU9JLENBQUcsRUFBSU4sRUFBUUssRUFBT0MsQ0FBRyxDQUFDLEVBR3JDLE9BQU9KLENBQ1gsTUFDRyxJQUFJLE9BQU9MLEdBQVUsU0FDeEIsT0FBT0EsRUFDSixHQUFJLE9BQU9BLEdBQVUsVUFDeEIsT0FBT0EsRUFDSixHQUFJLE9BQU9BLEdBQVUsU0FBVSxDQUNsQyxJQUFJVSxFQUFZQyxFQUFXLEtBQUssTUFBTVgsQ0FBSyxFQUMzQyxHQUFJVSxFQUFVLE9BQVEsT0FBT0EsRUFBVSxNQUV2QyxJQUFJRSxFQUFnQkQsRUFBVyxTQUFTLE1BQU1YLENBQUssRUFDbkQsR0FBSVksRUFBYyxPQUFRLE9BQU9BLEVBQWMsTUFFL0MsSUFBSUMsRUFBWUYsRUFBVyxLQUFLLE1BQU1YLENBQUssRUFDM0MsT0FBSWEsRUFBVSxPQUFlQSxFQUFVLE1BRWhDYixDQUNYLEVBR0EsT0FBTyxJQUNYLENBMUNPRixFQUFTLFFBQUFLLElBNUJITCxRQUFBLEtUY2pCLElBQU1nQixHQUFrQixnQkFFbEJDLEdBQXdCLHNCQUV4QkMsR0FBa0IseURBTWpCLFNBQVNDLEdBQ1pDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ2dCLENBQ2hCLEdBQU0sQ0FBRSxNQUFBQyxFQUFPLFNBQVVDLEVBQWMsWUFBQUMsRUFBYSxTQUFBQyxDQUFTLEVBQUlDLEdBQXFCUixFQUFNQyxFQUFVQyxDQUFRLEVBRzlHLE9BRmEsSUFBSU8sR0FBU1QsRUFBTUcsRUFBT0MsRUFBTSxPQUFRQyxFQUFjRSxFQUFVRCxDQUFXLEVBRTVFLE1BQU0sQ0FDdEIsQ0FHTyxTQUFTRSxHQUNaUixFQUNBQyxFQUNBQyxFQU1GLENBN0RGLElBQUFRLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUFDLEdBOERJLElBQU1uQixFQUFnRUosRUFBUyxZQUN6RXdCLEdBQXNCeEIsRUFBUyxXQUFXLEVBQzFDLE9BQ0FFLEVBQVFILEVBQVMsTUFBTSxZQUFZLEVBQ25DMEIsRUFBbUIsSUFBSUMsR0FDdkJDLEVBQThCLENBQUMsRUFLL0JDLEdBQWVwQixFQUFBUixFQUFTLFdBQVQsS0FBQVEsRUFBcUIsQ0FBQyxFQUMzQ29CLEVBQWEsS0FBSyxDQUFDQyxFQUFHQyxJQUFNRCxFQUFFLFNBQVMsTUFBTSxLQUFPQyxFQUFFLFNBQVMsTUFBTSxJQUFJLEVBRXpFLElBQU16QixFQUFXLElBQUksR0FBQTBCLFFBQTJCLE9BQVcsQ0FBQ0YsRUFBR0MsSUFBTUQsRUFBSUMsQ0FBQyxFQUMxRSxRQUFTRSxFQUFRLEVBQUdBLEVBQVFKLEVBQWEsT0FBUUksSUFBUyxDQUN0RCxJQUFNQyxFQUFRTCxFQUFhSSxDQUFLLEVBQzFCRSxFQUFRRCxFQUFNLFNBQVMsTUFBTSxLQUM3QkUsR0FBTUgsR0FBU0osRUFBYSxPQUFTLEVBQUkxQixFQUFNLE9BQVMwQixFQUFhSSxFQUFRLENBQUMsRUFBRSxTQUFTLE1BQU0sS0FFL0ZJLEdBQVUsSUFBSUMsR0FBWUgsRUFBT0MsR0FBS0YsRUFBTSxRQUFTQSxFQUFNLE1BQU9ELEVBQVEsQ0FBQyxFQUNqRjNCLEVBQVMsSUFBSTZCLEVBQU9FLEVBQU8sQ0FDL0IsQ0FJQSxHQUFJL0IsRUFBUyxNQUFRLEdBQ2pCLEdBQUksQ0FBQ2lDLEdBQVdwQyxFQUFPLEVBQUdBLEVBQU0sTUFBTSxFQUFHLENBQ3JDLElBQU1rQyxFQUFVLElBQUlDLEdBQVksRUFBR25DLEVBQU0sT0FBUXFDLEdBQWF6QyxDQUFJLEVBQUcsRUFBRyxDQUFDLEVBQ3pFTyxFQUFTLElBQUksRUFBRytCLENBQU8sQ0FDM0IsTUFDRyxDQUVILElBQU1JLEdBQVEvQixFQUFBSixFQUFTLG9CQUFvQixDQUFDLElBQTlCLFlBQUFJLEVBQWtDLEdBRWhELEdBQUkrQixFQUFNLE1BQVEsR0FBSyxDQUFDRixHQUFXcEMsRUFBTyxFQUFHc0MsRUFBTSxLQUFLLEVBQUcsQ0FDdkQsSUFBTUosRUFBVSxJQUFJQyxHQUFZLEVBQUdHLEVBQU0sTUFBT0QsR0FBYXpDLENBQUksRUFBRyxFQUFHLENBQUMsRUFFeEVPLEVBQVMsSUFBSSxFQUFHK0IsQ0FBTyxDQUMzQixDQUNKLENBUUEsSUFBTUssRUFBUyxJQUFJLEdBQUFWLFFBQXlCLE9BQVcsQ0FBQ0YsRUFBR0MsSUFBTUQsRUFBSUMsQ0FBQyxFQUNsRVksRUFBZSxFQUNuQixRQUFXQyxLQUFTM0MsRUFBUyxVQUFZLENBQUMsRUFBRyxDQUV6QyxHQUFJMkMsRUFBTSxPQUFTLFVBQVcsU0FFOUIsSUFBTVQsRUFBUVMsRUFBTSxTQUFTLE1BQU0sS0FDN0JSLEVBQU1RLEVBQU0sU0FBUyxJQUFJLEtBQU8sRUFDaENDLEdBQVkxQyxFQUFNZ0MsQ0FBSyxFQUU3QixHQUFJUyxFQUFNLE9BQVMsT0FDZkYsRUFBTyxJQUFJUCxFQUFPLElBQUlXLEdBQWNYLEVBQU9DLEVBQUtPLElBQWdCQyxFQUFNLEVBQUUsQ0FBQyxVQUNsRUEsRUFBTSxNQUFRLFFBQVVqRCxHQUFnQixLQUFLa0QsRUFBUyxFQUFHLENBQ2hFLElBQU1FLEdBQWU1QyxFQUNoQixNQUFNZ0MsRUFBUSxFQUFHQyxFQUFNLENBQUMsRUFDeEIsS0FBSztBQUFBLENBQUksRUFDVCxRQUFRLE9BQVEsSUFBSSxFQUNuQlksR0FBOEN2QixHQUFzQndCLEdBQVVGLEVBQUksQ0FBQyxFQUV6RkwsRUFBTyxJQUFJUCxFQUFPLElBQUllLEdBQWNmLEVBQU9DLEVBQUtPLElBQWdCSyxHQUFPSixFQUFNLEVBQUUsQ0FBQyxDQUNwRixTQUFXQSxFQUFNLE9BQVMsT0FBUSxDQUU5QixJQUFNTyxHQUFRTixHQUFVLE1BQU1qRCxFQUFxQixFQUNuRCxHQUFJLENBQUN1RCxHQUVEVCxFQUFPLElBQUlQLEVBQU8sSUFBSWlCLEdBQWNqQixFQUFPQyxFQUFLTyxJQUFnQixDQUFDLEVBQUcsU0FBVVIsRUFBT0MsRUFBS1EsRUFBTSxFQUFFLENBQUMsTUFDaEcsQ0FDSCxJQUFNUyxHQUFZRixHQUFNLE9BQVMsR0FBS0EsR0FBTSxDQUFDLEVBQUlBLEdBQU0sQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFJLENBQUMsRUFDeEVULEVBQU8sSUFDSFAsRUFDQSxJQUFJaUIsR0FBY2pCLEVBQU9DLEVBQUtPLElBQWdCVSxHQUFXLFNBQVVsQixFQUFRLEVBQUdDLEVBQU0sRUFBR1EsRUFBTSxFQUFFLENBQ25HLENBQ0osQ0FDSixNQUNJRixFQUFPLElBQUlQLEVBQU8sSUFBSW1CLEdBQWNuQixFQUFPQyxFQUFLTyxJQUFnQkMsRUFBTSxLQUFNQSxFQUFNLEVBQUUsQ0FBQyxDQUU3RixDQUdBLFFBQVdBLEtBQVNGLEVBQU8sT0FBTyxHQUM5Qi9CLEVBQUE0QyxHQUFPWCxFQUFNLE1BQU90QyxDQUFRLElBQTVCLE1BQUFLLEVBQStCLE1BQU1pQyxHQVF6QyxJQUFNWSxFQUFlLGlDQUNmQyxFQUFjLHFCQUNkQyxFQUFZLElBQUksR0FBQTFCLFFBQTRCLE9BQVcsQ0FBQ0YsRUFBR0MsSUFBTUQsRUFBSUMsQ0FBQyxFQUU1RSxRQUFXNEIsS0FBUTFELEVBQVMsV0FBYSxDQUFDLEVBQUcsQ0FJekMsSUFBTWtELEVBSE9oRCxFQUFNd0QsRUFBSyxTQUFTLE1BQU0sSUFBSSxFQUd4QixNQUFNOUQsRUFBZSxFQUNwQytELEdBQ0FDLEdBQ0FWLElBQ0FTLEdBQVNULEVBQU0sQ0FBQyxFQUNoQlUsR0FBT1YsRUFBTSxDQUFDLEdBR2xCLElBQU1XLEdBQU8sSUFBSUMsR0FDYkosRUFBSyxTQUFTLE1BQU0sS0FDcEJBLEVBQUssU0FBUyxJQUFJLEtBQU8sRUFDekJBLEVBQUssT0FDTEMsR0FDQUQsRUFBSyxHQUNMQSxFQUFLLEtBQ0xFLEVBQ0osRUFDQUgsRUFBVSxJQUFJSSxHQUFLLE1BQU9BLEVBQUksQ0FDbEMsQ0FHQSxRQUFXQSxLQUFRSixFQUFVLE9BQU8sRUFDaEMsR0FBSUksRUFBSyxXQUFhLEVBQUcsQ0FDckIsSUFBTUUsRUFBWXRCLEVBQU8sSUFBSSxDQUFDb0IsRUFBSyxVQUFVLEVBQzdDLEdBQUksQ0FBQ0UsR0FBZUEsRUFBVSxPQUFTLE9BQVMsU0FFL0NBLEVBQTRCLE1BQU0sS0FBS0YsQ0FBSSxDQUNoRCxNQUNJbEQsRUFBQThDLEVBQVUsSUFBSUksRUFBSyxVQUFVLElBQTdCLE1BQUFsRCxFQUFnQyxTQUFTLEtBQUtrRCxHQVN0RCxRQUFXRyxLQUFVcEQsRUFBQVosRUFBUyxPQUFULEtBQUFZLEVBQWlCLENBQUMsRUFBRyxDQUN0QyxJQUFNcUQsRUFBTUQsRUFBTyxJQUFJLFdBQVcsR0FBRyxFQUFJQSxFQUFPLElBQU0sSUFBTUEsRUFBTyxJQUM3REUsRUFBT0YsRUFBTyxTQUFTLE1BQU0sS0FDbkN2QyxFQUFpQixJQUFJd0MsQ0FBRyxHQUV4QnBELEVBQUF5QyxHQUFPWSxFQUFNN0QsQ0FBUSxJQUFyQixNQUFBUSxFQUF3QixTQUFTLElBQUlvRCxJQUNyQ25ELEVBQUF3QyxHQUFPWSxFQUFNekIsQ0FBTSxJQUFuQixNQUFBM0IsRUFBc0IsU0FBUyxJQUFJbUQsSUFDbkNsRCxFQUFBdUMsR0FBT1ksRUFBTVQsQ0FBUyxJQUF0QixNQUFBMUMsRUFBeUIsU0FBUyxJQUFJa0QsRUFDMUMsQ0FHQSxHQUFJakUsRUFBUyxZQUNULFFBQVdtRSxLQUFVQyxHQUFZcEUsRUFBUyxXQUFXLEVBQUcsQ0FDcEQsSUFBTWlFLEVBQU1FLEVBQU8sV0FBVyxHQUFHLEVBQUlBLEVBQVMsSUFBTUEsRUFDcEQxQyxFQUFpQixJQUFJd0MsQ0FBRyxDQUM1QixDQU9KLFFBQVNJLEtBQVdyRCxFQUFBaEIsRUFBUyxRQUFULEtBQUFnQixFQUFrQixDQUFDLEVBQUcsQ0FDdEMsSUFBTXNELEVBQU9DLEdBQUssTUFBTUYsRUFBUSxJQUFJLEVBQzlCSCxFQUFPRyxFQUFRLFNBQVMsTUFBTSxLQUNwQzVDLEVBQWlCLEtBQUs2QyxDQUFJLEdBRTFCckQsRUFBQXFDLEdBQU9ZLEVBQU03RCxDQUFRLElBQXJCLE1BQUFZLEVBQXdCLFNBQVMsS0FBS3FELElBQ3RDcEQsRUFBQW9DLEdBQU9ZLEVBQU16QixDQUFNLElBQW5CLE1BQUF2QixFQUFzQixTQUFTLEtBQUtvRCxJQUNwQ25ELEVBQUFtQyxHQUFPWSxFQUFNVCxDQUFTLElBQXRCLE1BQUF0QyxFQUF5QixTQUFTLEtBQUttRCxFQUMzQyxDQU9BLFFBQVdELEtBQVdqRCxFQUFBcEIsRUFBUyxtQkFBVCxLQUFBb0IsRUFBNkIsQ0FBQyxFQUNoREssRUFBaUIsS0FBSzhDLEdBQUssTUFBTUYsRUFBUSxLQUFNLEdBQU9BLEVBQVEsV0FBVyxDQUFDLEVBTzlFLFFBQVdHLEtBQVNDLEdBQW9CdkUsQ0FBSyxFQUFHLENBQzVDLElBQU1nRSxFQUFPTSxFQUFNLFNBQVMsS0FDNUIvQyxFQUFpQixZQUFZK0MsQ0FBSyxHQUVsQ25ELEVBQUFpQyxHQUFPWSxFQUFNN0QsQ0FBUSxJQUFyQixNQUFBZ0IsRUFBd0IsU0FBUyxZQUFZbUQsSUFDN0NsRCxHQUFBZ0MsR0FBT1ksRUFBTXpCLENBQU0sSUFBbkIsTUFBQW5CLEdBQXNCLFNBQVMsWUFBWWtELElBQzNDakQsR0FBQStCLEdBQU9ZLEVBQU1ULENBQVMsSUFBdEIsTUFBQWxDLEdBQXlCLFNBQVMsWUFBWWlELEVBQ2xELENBQ0EsT0FBQTdDLEVBQWEsS0FBSyxHQUFHdEIsRUFBUyxPQUFPLENBQUMsRUFDL0IsQ0FDSCxNQUFBSCxFQUNBLFlBQUFFLEVBQ0EsU0FBVXFCLEVBQ1YsU0FBVUUsQ0FDZCxDQUNKLENBTUEsU0FBU1csR0FBV3BDLEVBQWlCZ0MsRUFBZUMsRUFBc0IsQ0FDdEUsUUFBU0gsRUFBUUUsRUFBT0YsRUFBUUcsRUFBS0gsSUFDakMsR0FBSTlCLEVBQU04QixDQUFLLEVBQUUsS0FBSyxJQUFNLEdBQUksTUFBTyxHQUczQyxNQUFPLEVBQ1gsQ0FNTyxTQUFVeUMsR0FBb0JDLEVBQTJDLENBQzVFLFFBQVNDLEVBQVMsRUFBR0EsRUFBU0QsRUFBUSxPQUFRQyxJQUFVLENBQ3BELElBQU1ULEVBQU9RLEVBQVFDLENBQU0sRUFHM0IsR0FBSVQsRUFBSyxPQUFTLE9BQVMsQ0FBQ0EsRUFBSyxTQUFTLElBQUksRUFBRyxTQUdqRCxJQUFJVSxFQUFlQyxHQUFvQlgsQ0FBSSxFQUMzQyxHQUFJVSxFQUFhLE9BQVMsRUFDdEIsUUFBU0UsS0FBVUYsRUFBYyxNQUFNRyxHQUFjRCxFQUFRSCxDQUFNLE1BQ2hFLENBQ0gsSUFBSUssRUFBV0MsR0FBcUJmLENBQUksRUFDcENjLElBQVUsTUFBTUQsR0FBY0MsRUFBVUwsQ0FBTSxFQUN0RCxDQUNKLENBQ0osQ0FHTyxTQUFTbkQsR0FBc0JtQixFQUFrRSxDQUNwRyxJQUFNdUMsRUFBK0MsQ0FBQyxFQUN0RCxRQUFXQyxLQUFPLE9BQU8sS0FBS3hDLENBQUssRUFBRyxDQUNsQyxJQUFNeUMsRUFBUXpDLEVBQU13QyxDQUFHLEVBRXZCRCxFQUFPQyxFQUFJLFlBQVksQ0FBQyxFQUFJLENBQ3hCLElBQUtBLEVBQ0wsTUFBT0UsR0FBZSxLQUFLQyxHQUFlLFFBQVFGLENBQUssQ0FBQyxFQUN4RCxJQUFLQSxDQUNULENBQ0osQ0FFQSxPQUFPRixDQUNYLENBR08sU0FBUzVCLEdBQWlEWSxFQUFjcUIsRUFBdUMsQ0EzVHRILElBQUEvRSxFQTRUSSxJQUFNZ0YsR0FBU2hGLEVBQUErRSxFQUFLLG1CQUFtQnJCLENBQUksSUFBNUIsWUFBQTFELEVBQWdDLEdBQy9DLEdBQUlnRixHQUFVQSxFQUFPLEtBQU90QixFQUFNLE9BQU9zQixDQUc3QyxDQUdPLFNBQVNwQixHQUFZcEUsRUFBc0MsQ0FHOUQsT0FGYyxPQUFPLEtBQUtBLENBQVEsRUFBRSxPQUFRLEdBQU0sRUFBRSxZQUFZLEdBQUssUUFBVSxFQUFFLFlBQVksR0FBSyxLQUFLLEVBR2xHLElBQUt5RixHQUFNQyxHQUEyQjFGLEVBQVN5RixDQUFDLEVBQUcsUUFBUSxDQUFDLEVBQzVELE9BQU8sQ0FBQ0UsRUFBR0MsSUFBTUQsRUFBRSxPQUFPQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQ2hDLElBQUtDLEdBQVNBLEVBQUksV0FBVyxHQUFHLEVBQUlBLEVBQU0sSUFBTUEsQ0FBSSxDQUM3RCxDQUdPLFNBQVNILEdBQTJCSSxFQUFXQyxFQUFzQixDQUN4RSxPQUFJRCxHQUFRLE1BQVFBLEdBQVEsS0FBa0IsQ0FBQyxFQUMzQyxNQUFNLFFBQVFBLENBQUksRUFDWEEsRUFDRixPQUFRRSxHQUFNLENBQUMsQ0FBQ0EsQ0FBQyxFQUNqQixJQUFLQSxHQUFNTixHQUEyQk0sRUFBR0QsQ0FBRSxDQUFDLEVBQzVDLE9BQU8sQ0FBQ0osRUFBR0MsSUFBTUQsRUFBRSxPQUFPQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEdBSWpDLEdBQUtFLEdBQ1IsTUFBTUMsQ0FBRSxFQUNSLE9BQVEsR0FBTSxDQUFDLENBQUMsQ0FBQyxFQUNqQixJQUFLLEdBQU0sRUFBRSxLQUFLLENBQUMsRUFDbkIsT0FBUSxHQUFNLEVBQUUsT0FBUyxDQUFDLENBQ25DLENBT08sSUFBTXJFLEdBQU4sS0FBZSxDQUFmLGNBQ0gsS0FBTyxLQUFvQixJQUFJLElBQy9CLEtBQU8sTUFBZ0IsQ0FBQyxFQUN4QixLQUFPLGFBQTRDLENBQUMsRUFHN0MsSUFBSXVDLEVBQWEsQ0FDcEIsS0FBSyxLQUFLLElBQUlBLENBQUcsQ0FDckIsQ0FHTyxLQUFLSyxFQUFZLENBQ2hCLEtBQUssTUFBTSxLQUFNMkIsR0FBTUEsRUFBRSxPQUFPM0IsQ0FBSSxDQUFDLEdBQ3pDLEtBQUssTUFBTSxLQUFLQSxDQUFJLENBQ3hCLENBR08sWUFBWUUsRUFBb0IsQ0FDbkMsSUFBTTBCLEVBQVExQixFQUFNLElBQUksWUFBWSxFQUNoQyxPQUFPLEtBQUssS0FBSyxZQUFZLEVBQUUsS0FBTVcsR0FBUUEsRUFBSSxZQUFZLEdBQUtlLENBQUssSUFFM0UsS0FBSyxhQUFhQSxDQUFLLEVBQUkxQixFQUMvQixDQUdPLFlBQXVCLENBQzFCLE9BQU8sTUFBTSxLQUFLLEtBQUssSUFBSSxDQUMvQixDQUdPLGFBQTBCLENBQzdCLE9BQU8sS0FBSyxNQUFNLElBQUtGLEdBQVNBLEVBQUssU0FBUyxDQUFDLENBQ25ELENBR08sb0JBQXNELENBQ3pELE9BQU82QixHQUFnQixLQUFLLGFBQWNDLEVBQWUsQ0FDN0QsQ0FDSixFQUdhN0YsR0FBTixLQUFlLENBQ1gsWUFDSVQsRUFDQUcsRUFDQW9HLEVBQ0FyRyxFQUNBSyxFQUNBRCxFQUNULENBTlMsVUFBQU4sRUFDQSxXQUFBRyxFQUNBLFlBQUFvRyxFQUNBLGNBQUFyRyxFQUNBLGNBQUFLLEVBQ0EsaUJBQUFELENBQ1IsQ0FFSSxPQUEwQixDQUM3QixNQUFPLENBQ0gsTUFBTyxLQUFLLEtBQ1osT0FBUSxLQUFLLE1BQU0sTUFDbkIsT0FBUSxLQUFLLE1BQU0sTUFDbkIsTUFBTyxLQUFLLE1BQU0sS0FDbEIsV0FBWWtHLEdBQWEsS0FBSyxJQUFJLEVBQ2xDLFVBQVcsQ0FBRSxNQUFPLEVBQUcsSUFBSyxLQUFLLE1BQU8sRUFDeEMsTUFBTyxLQUFLLFNBQVMsV0FBVyxFQUNoQyxPQUFRLEtBQUssU0FBUyxZQUFZLEVBQ2xDLFVBQVcsS0FBSyxTQUFTLG1CQUFtQixFQUM1QyxVQUFXLEtBQUssU0FBUyxJQUFLQyxHQUFNQSxFQUFFLE1BQU0sQ0FBQyxFQUM3QyxhQUFjLEtBQUssV0FDdkIsQ0FDSixDQUNKLEVBR2FsRSxHQUFOLEtBQWtCLENBSWQsWUFDSUgsRUFDQUMsRUFDQXFFLEVBQ0FDLEVBQ0FDLEVBQ1QsQ0FMUyxXQUFBeEUsRUFDQSxTQUFBQyxFQUNBLFdBQUFxRSxFQUNBLFdBQUFDLEVBQ0EsYUFBQUMsRUFSWCxLQUFPLE9BQXNCLENBQUMsRUFDOUIsS0FBTyxTQUFxQixJQUFJaEYsRUFRN0IsQ0FFSSxNQUFNaUIsRUFBa0IsQ0FDM0IsS0FBSyxPQUFPLEtBQUtBLENBQUssQ0FDMUIsQ0FFTyxPQUE2QixDQUNoQyxNQUFPLENBQ0gsT0FBUSxLQUFLLE1BQ2IsU0FBVSxLQUFLLFFBQ2YsT0FBUSxLQUFLLE1BQ2IsTUFBTyxLQUFLLFNBQVMsV0FBVyxFQUNoQyxVQUFXLEtBQUssU0FBUyxtQkFBbUIsRUFDNUMsT0FBUSxLQUFLLFNBQVMsWUFBWSxFQUNsQyxVQUFXLENBQUUsTUFBTyxLQUFLLE1BQU8sSUFBSyxLQUFLLEdBQUksRUFDOUMsUUFBUyxLQUFLLE9BQU8sSUFBS0EsR0FBVUEsRUFBTSxNQUFNLENBQUMsQ0FDckQsQ0FDSixDQUNKLEVBR2FFLEdBQU4sS0FBb0IsQ0FLaEIsWUFBbUJYLEVBQXNCQyxFQUFvQnVFLEVBQXdCQyxFQUFrQixDQUFwRixXQUFBekUsRUFBc0IsU0FBQUMsRUFBb0IsYUFBQXVFLEVBQXdCLGFBQUFDLEVBSjVGLEtBQU8sS0FBZSxPQUN0QixLQUFPLFNBQXFCLElBQUlqRixHQUNoQyxLQUFPLE1BQXdCLENBQUMsQ0FFK0UsQ0FFeEcsT0FBK0IsQ0FDbEMsTUFBTyxDQUNILFNBQVUsS0FBSyxRQUNmLFVBQVcsQ0FBRSxNQUFPLEtBQUssTUFBTyxJQUFLLEtBQUssR0FBSSxFQUM5QyxVQUFXLEtBQUssU0FBUyxtQkFBbUIsRUFDNUMsTUFBTyxLQUFLLFNBQVMsV0FBVyxFQUNoQyxPQUFRLEtBQUssU0FBUyxZQUFZLEVBQ2xDLE1BQU8sT0FDUCxTQUFVLEtBQUssUUFDZixVQUFXLEtBQUssTUFBTSxJQUFLbUMsR0FBU0EsRUFBSyxNQUFNLENBQUMsQ0FDcEQsQ0FDSixDQUNKLEVBR2FWLEdBQU4sS0FBb0IsQ0FJaEIsWUFDSWpCLEVBQ0FDLEVBQ0F1RSxFQUNBdEQsRUFDQXdELEVBQ0FDLEVBQ0FDLEVBQ0FILEVBQ1QsQ0FSUyxXQUFBekUsRUFDQSxTQUFBQyxFQUNBLGFBQUF1RSxFQUNBLGVBQUF0RCxFQUNBLFdBQUF3RCxFQUNBLGtCQUFBQyxFQUNBLGdCQUFBQyxFQUNBLGFBQUFILEVBWFgsS0FBTyxLQUFlLFlBQ3RCLEtBQU8sU0FBcUIsSUFBSWpGLEVBVzdCLENBRUksT0FBK0IsQ0FDbEMsTUFBTyxDQUNILE1BQU8sWUFDUCxTQUFVLEtBQUssUUFDZixVQUFXLENBQUUsTUFBTyxLQUFLLE1BQU8sSUFBSyxLQUFLLEdBQUksRUFDOUMsVUFBVyxLQUFLLFNBQVMsbUJBQW1CLEVBQzVDLE1BQU8sS0FBSyxTQUFTLFdBQVcsRUFDaEMsT0FBUSxLQUFLLFNBQVMsWUFBWSxFQUNsQyxTQUFVLEtBQUssUUFDZixXQUFZLEtBQUssVUFDakIsT0FBUSxLQUFLLE1BQ2IsaUJBQWtCLENBQUUsTUFBTyxLQUFLLGFBQWMsSUFBSyxLQUFLLFVBQVcsQ0FDdkUsQ0FDSixDQUNKLEVBR2F1QixHQUFOLEtBQW9CLENBSWhCLFlBQ0lmLEVBQ0FDLEVBQ0F1RSxFQUNBWixFQUNBYSxFQUNULENBTFMsV0FBQXpFLEVBQ0EsU0FBQUMsRUFDQSxhQUFBdUUsRUFDQSxVQUFBWixFQUNBLGFBQUFhLEVBUlgsS0FBTyxLQUFlLFlBQ3RCLEtBQU8sU0FBcUIsSUFBSWpGLEVBUTdCLENBRUksT0FBK0IsQ0FDbEMsTUFBTyxDQUNILE1BQU8sWUFDUCxTQUFVLEtBQUssUUFDZixVQUFXLENBQUUsTUFBTyxLQUFLLE1BQU8sSUFBSyxLQUFLLEdBQUksRUFDOUMsVUFBVyxLQUFLLFNBQVMsbUJBQW1CLEVBQzVDLE1BQU8sS0FBSyxTQUFTLFdBQVcsRUFDaEMsT0FBUSxLQUFLLFNBQVMsWUFBWSxFQUNsQyxTQUFVLEtBQUssUUFDZixNQUFPLEtBQUssSUFDaEIsQ0FDSixDQUNKLEVBR2EyQixHQUFOLEtBQW9CLENBR2hCLFlBQ0luQixFQUNBQyxFQUNBdUUsRUFDQUssRUFDQUosRUFDVCxDQUxTLFdBQUF6RSxFQUNBLFNBQUFDLEVBQ0EsYUFBQXVFLEVBQ0EsVUFBQUssRUFDQSxhQUFBSixFQVBYLEtBQU8sU0FBcUIsSUFBSWpGLEVBUTdCLENBRUksT0FBMkIsQ0FDOUIsTUFBTyxDQUNILE1BQU8sS0FBSyxLQUNaLFNBQVUsS0FBSyxRQUNmLFVBQVcsQ0FBRSxNQUFPLEtBQUssTUFBTyxJQUFLLEtBQUssR0FBSSxFQUM5QyxVQUFXLEtBQUssU0FBUyxtQkFBbUIsRUFDNUMsTUFBTyxLQUFLLFNBQVMsV0FBVyxFQUNoQyxPQUFRLEtBQUssU0FBUyxZQUFZLEVBQ2xDLFNBQVUsS0FBSyxPQUNuQixDQUNKLENBQ0osRUFLYW9DLEdBQU4sS0FBbUIsQ0FHZixZQUNJNUIsRUFDQUMsRUFDQTZFLEVBQ0FyRCxFQUNBZ0QsRUFDQU0sRUFDQXJELEVBQ1QsQ0FQUyxXQUFBMUIsRUFDQSxTQUFBQyxFQUNBLGdCQUFBNkUsRUFDQSxZQUFBckQsRUFDQSxhQUFBZ0QsRUFDQSxZQUFBTSxFQUNBLFVBQUFyRCxFQVRYLEtBQU8sU0FBcUIsSUFBSWxDLEdBQ2hDLEtBQU8sU0FBMkIsQ0FBQyxDQVNoQyxDQUVJLE9BQThCLENBQ2pDLE1BQU8sQ0FDSCxZQUFhLEtBQUssV0FDbEIsVUFBVyxDQUFFLE1BQU8sS0FBSyxNQUFPLElBQUssS0FBSyxHQUFJLEVBQzlDLFNBQVUsS0FBSyxRQUNmLFVBQVcsS0FBSyxTQUFTLElBQUt3RixHQUFZQSxFQUFRLE1BQU0sQ0FBQyxFQUN6RCxNQUFPLEtBQUssT0FBUyxPQUFTLE9BQzlCLFVBQVcsS0FBSyxTQUFTLG1CQUFtQixFQUM1QyxNQUFPLEtBQUssU0FBUyxXQUFXLEVBQ2hDLE9BQVEsS0FBSyxTQUFTLFlBQVksRUFDbEMsUUFBUyxLQUFLLE9BQ2QsUUFBUyxLQUFLLE9BQ2QsTUFBTyxLQUFLLElBQ2hCLENBQ0osQ0FDSixFVS9qQk8sU0FBU0MsR0FDWkMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDVSxDQXJCZCxJQUFBQyxFQXNCSSxJQUFNQyxFQUFTLElBQUlDLEdBQVdOLEVBQU1HLENBQUssRUFDbkNJLEVBQVMsS0FBSyxNQUFNTixDQUFNLEVBRWhDLFFBQVdPLEtBQUtELEVBQU8sTUFDbkIsR0FBSUMsRUFBRSxNQUFRLFFBQ2QsR0FBSUEsRUFBRSxNQUFRLE9BQVEsQ0FDbEIsR0FBTSxDQUFFLFlBQUFDLEVBQWEsU0FBQUMsRUFBVSxNQUFBQyxFQUFPLFNBQUFDLENBQVMsRUFBSUMsR0FBcUJiLEVBQU1RLEVBQUUsS0FBTU4sRUFBTSxPQUFPTSxFQUFFLEVBQUUsQ0FBQyxFQUNsR00sRUFBTyxJQUFJQyxHQUFlZixFQUFNUSxFQUFFLEdBQUlBLEVBQUdDLENBQVcsRUFDMURHLEVBQVMsUUFBU0ksR0FBTUYsRUFBSyxRQUFRRSxDQUFDLENBQUMsRUFDdkNYLEVBQU8sS0FBS1MsQ0FBSSxFQUNoQixRQUFXRyxLQUFPUCxFQUFTLEtBQU1MLEVBQU8sU0FBUyxJQUFJWSxDQUFHLEVBQ3hELFFBQVdDLEtBQVFkLEVBQUFNLEVBQVMsUUFBVCxLQUFBTixFQUFrQixDQUFDLEVBQUdDLEVBQU8sU0FBUyxLQUFLYSxDQUFJLEVBQ2xFLFFBQVdDLEtBQVNDLEdBQW9CVCxDQUFLLEVBQUdOLEVBQU8sU0FBUyxZQUFZYyxDQUFLLENBQ3JGLEtBQU8sQ0FDSCxJQUFNTCxFQUFPLElBQUlDLEdBQWVmLEVBQU1RLEVBQUUsR0FBSUEsQ0FBQyxFQUM3Q0gsRUFBTyxLQUFLUyxDQUFJLENBQ3BCLENBR0osT0FBT1QsRUFBTyxNQUFNLENBQ3hCLENBR0EsSUFBZWdCLEdBQWYsS0FBc0MsQ0FHM0IsWUFDSXJCLEVBQ0FzQixFQUNHQyxFQUNaLENBSFMsVUFBQXZCLEVBQ0EsUUFBQXNCLEVBQ0csY0FBQUMsRUFMZCxLQUFPLFNBQXFCLElBQUlDLEVBTTdCLENBRUksT0FBNEIsQ0FDL0IsTUFBTyxDQUNILE1BQU8sS0FBSyxLQUNaLElBQUssS0FBSyxHQUNWLFVBQVcsQ0FDUCxFQUFHLEtBQUssU0FBUyxFQUNqQixFQUFHLEtBQUssU0FBUyxDQUNyQixFQUNBLFlBQWEsQ0FDVCxNQUFPLEtBQUssU0FBUyxNQUNyQixPQUFRLEtBQUssU0FBUyxNQUMxQixFQUNBLE9BQVEsS0FBSyxTQUFTLE1BQ3RCLE1BQU9DLEdBQUssS0FBSyxLQUFLLElBQUksRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLFNBQVMsQ0FDNUQsQ0FDSixDQUNKLEVBR2FWLEdBQU4sY0FBNkJNLEVBQXVCLENBRWhELFlBQ0lyQixFQUNBc0IsRUFDR0MsRUFDSGQsRUFDVCxDQUNFLE1BQU1ULEVBQU1zQixFQUFJQyxDQUFRLEVBTGpCLFVBQUF2QixFQUNBLFFBQUFzQixFQUNHLGNBQUFDLEVBQ0gsaUJBQUFkLEVBTFgsS0FBTyxTQUEwQixDQUFDLENBUWxDLENBRU8sUUFBUWlCLEVBQW1DLENBQzlDLFlBQUssU0FBUyxLQUFLQSxDQUFPLEVBQ25CQSxDQUNYLENBRU8sT0FBd0IsQ0FDM0IsT0FBUSxLQUFLLFNBQVMsS0FBTSxDQUN4QixJQUFLLE9BQ0QsT0FBT0MsR0FBQUMsRUFBQSxHQUNDLE1BQU0sTUFBTSxHQURiLENBRUgsVUFBVyxLQUFLLFNBQVMsbUJBQW1CLEVBQzVDLGFBQWMsS0FBSyxZQUNuQixVQUFXLEtBQUssU0FBUyxJQUFLQyxHQUFNQSxFQUFFLE1BQU0sQ0FBQyxFQUM3QyxNQUFPLEtBQUssU0FBUyxXQUFXLEVBQ2hDLE9BQVEsS0FBSyxTQUFTLFlBQVksRUFDbEMsTUFBTyxZQUNQLE9BQVEsS0FBSyxTQUFTLEtBQzFCLEdBQ0osSUFBSyxPQUNELE9BQU9GLEdBQUFDLEVBQUEsR0FDQSxNQUFNLE1BQU0sR0FEWixDQUVILFlBQWEsS0FBSyxTQUFTLElBQy9CLEdBQ0osSUFBSyxPQUNELE9BQU9ELEdBQUFDLEVBQUEsR0FDQSxNQUFNLE1BQU0sR0FEWixDQUVILEtBQU0sS0FBSyxTQUFTLEdBQ3hCLEVBRVIsQ0FDSixDQUNKLEVBR2F0QixHQUFOLEtBQWlCLENBSWIsWUFBbUJOLEVBQXFCRyxFQUFrQixDQUF2QyxVQUFBSCxFQUFxQixXQUFBRyxFQUgvQyxLQUFPLE1BQTBCLENBQUMsRUFDbEMsS0FBTyxTQUFxQixJQUFJcUIsRUFFa0MsQ0FFM0QsS0FBS00sRUFBbUMsQ0FDM0MsWUFBSyxNQUFNLEtBQUtBLENBQUMsRUFDVkEsQ0FDWCxDQUVPLE9BQW9CLENBQ3ZCLE1BQU8sQ0FDSCxPQUFRLEtBQUssTUFBTSxJQUFLRCxHQUFNQSxFQUFFLE1BQU0sQ0FBQyxFQUN2QyxPQUFRLEtBQUssTUFBTSxNQUNuQixPQUFRLEtBQUssTUFBTSxNQUNuQixVQUFXLEtBQUssU0FBUyxtQkFBbUIsRUFDNUMsT0FBUSxLQUFLLFNBQVMsWUFBWSxFQUNsQyxNQUFPLEtBQUssU0FBUyxXQUFXLEVBQ2hDLE1BQU8sS0FBSyxLQUNaLE1BQU8sS0FBSyxNQUFNLElBQ3RCLENBQ0osQ0FDSixFQ3hJQSxVQUFZLE1BQU9FLEdBQVUsQ0FDekIsR0FBSSxDQUNBLElBQU1DLEVBQVVELEVBQU0sS0FFdEIsR0FBSUMsRUFBUSxPQUFTLFdBQVksQ0FDN0IsSUFBTUMsRUFBV0MsR0FBZUYsRUFBUSxLQUFNQSxFQUFRLFNBQVVBLEVBQVEsU0FBVUEsRUFBUSxJQUFJLEVBRTlGLFlBQVksQ0FDUixLQUFNLFdBQ04sT0FBUUMsQ0FDWixDQUF5QixDQUM3QixTQUFXRCxFQUFRLE9BQVMsU0FBVSxDQUNsQyxJQUFNRyxFQUFTQyxHQUFhSixFQUFRLEtBQU1BLEVBQVEsU0FBVUEsRUFBUSxNQUFPQSxFQUFRLElBQUksRUFFdkYsWUFBWSxDQUNSLEtBQU0sU0FDTixPQUFRRyxDQUNaLENBQXVCLENBQzNCLE1BQ0ksWUFBWSxDQUFFLE9BQVEsNEJBQTZCLENBQUMsQ0FFNUQsT0FBU0UsRUFBTyxDQUNaLFFBQVEsTUFBTSxvQ0FBb0NOLEVBQU0sS0FBSyxJQUFJLEtBQUtNLENBQUssRUFBRSxFQUM3RSxZQUFZLENBQUUsT0FBUUEsRUFBTSxPQUFRLENBQUMsQ0FDekMsQ0FDSiIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX3BhcnNpbW1vbl91bWRfbWluIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidCIsICJyIiwgImUiLCAidSIsICJuIiwgIm8iLCAiaSIsICJmIiwgImMiLCAicyIsICJsIiwgIngiLCAiYiIsICJoIiwgInAiLCAiZCIsICJ2IiwgImciLCAibSIsICJ5IiwgIkUiLCAidyIsICJCIiwgImEiLCAiaiIsICJTIiwgIl8iLCAiTCIsICJPIiwgImsiLCAiUCIsICJxIiwgIkEiLCAiSSIsICJGIiwgIk0iLCAieiIsICJSIiwgIlUiLCAiVyIsICJEIiwgIk4iLCAiRyIsICJDIiwgIkoiLCAiVCIsICJZIiwgIlYiLCAiSCIsICJYIiwgIksiLCAiUSIsICJaIiwgIiQiLCAibm4iLCAidG4iLCAicm4iLCAiYW4iLCAiZW4iLCAidW4iLCAib24iLCAiZm4iLCAiY24iLCAic24iLCAibG4iLCAiaG4iLCAicG4iLCAiZG4iLCAidm4iLCAiZ24iLCAibW4iLCAieW4iLCAicmVxdWlyZV9iX3RyZWUiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIl9fZXh0ZW5kcyIsICJleHRlbmRTdGF0aWNzIiwgImQiLCAiYiIsICJwIiwgIl9fIiwgImRlZmF1bHRDb21wYXJhdG9yIiwgImEiLCAidGEiLCAidGIiLCAic2ltcGxlQ29tcGFyYXRvciIsICJCVHJlZSIsICJlbnRyaWVzIiwgImNvbXBhcmUiLCAibWF4Tm9kZVNpemUiLCAiRW1wdHlMZWFmIiwgImNhbGxiYWNrIiwgInRoaXNBcmciLCAiX3RoaXMiLCAiayIsICJ2IiwgImluaXRpYWxDb3VudGVyIiwgImxvdyIsICJoaWdoIiwgImtleSIsICJkZWZhdWx0VmFsdWUiLCAidmFsdWUiLCAib3ZlcndyaXRlIiwgInJlc3VsdCIsICJCTm9kZUludGVybmFsIiwgIkRlbGV0ZVJhbmdlIiwgIm51IiwgInBhaXJzIiwgImtleXMiLCAicmV0dXJuVGhpc0lmVW5jaGFuZ2VkIiwgImNoYW5nZWQiLCAiaW5jbHVkZUhpZ2giLCAiZGVsIiwgImkiLCAiRGVsZXRlIiwgInRtcCIsICJpbml0aWFsVmFsdWUiLCAiaXQiLCAiUmV1c2VkQXJyYXkiLCAibmV4dCIsICJsb3dlc3RLZXkiLCAicmV1c2VkQXJyYXkiLCAiaW5mbyIsICJpdGVyYXRvciIsICJub2RlcXVldWUiLCAibm9kZWluZGV4IiwgImxlYWYiLCAic3RhdGUiLCAianVtcCIsICJsZXZlbCIsICJoaWdoZXN0S2V5IiwgInNraXBIaWdoZXN0IiwgIl9hIiwgImNoZWNrIiwgIm5leHRub2RlIiwgIkVtcHR5QXJyYXkiLCAib3RoZXIiLCAib25seVRoaXMiLCAib25seU90aGVyIiwgImRpZmZlcmVudCIsICJfY29tcGFyZSIsICJ0aGlzQ3Vyc29yIiwgIm90aGVyQ3Vyc29yIiwgInRoaXNTdWNjZXNzIiwgIm90aGVyU3VjY2VzcyIsICJwcmV2Q3Vyc29yT3JkZXIiLCAiY3Vyc29yT3JkZXIiLCAidGhpc0xlYWYiLCAidGhpc0ludGVybmFsU3BpbmUiLCAidGhpc0xldmVsSW5kaWNlcyIsICJvdGhlckxlYWYiLCAib3RoZXJJbnRlcm5hbFNwaW5lIiwgIm90aGVyTGV2ZWxJbmRpY2VzIiwgInZhbFRoaXMiLCAidmFsT3RoZXIiLCAib3RoZXJWYWwiLCAibGFzdFRoaXMiLCAibGFzdE90aGVyIiwgIm5vZGVUaGlzIiwgIm5vZGVPdGhlciIsICJjdXJzb3IiLCAiY3Vyc29yRmluaXNoZWQiLCAiY29tcGFyZUtleXMiLCAiY29tcGFyZWQiLCAiY2FuU3RlcCIsICJsZXZlbEluZGljZXMiLCAiY3VycmVudEtleSIsICJ0cmVlIiwgIl9yb290IiwgImhlaWdodCIsICJzdGVwVG9Ob2RlIiwgImludGVybmFsU3BpbmUiLCAibGV2ZWxzTGVuZ3RoIiwgInNwaW5lTGVuZ3RoIiwgIm5vZGVMZXZlbEluZGV4IiwgImxldmVsSW5kZXhXYWxrQmFjayIsICJ2YWx1ZUluZGV4IiwgIm5leHRMZXZlbCIsICJjdXJyZW50TGV2ZWwiLCAibm9kZSIsICJjaGlsZHJlbiIsICJjaGlsZEluZGV4IiwgImN1cnNvckEiLCAiY3Vyc29yQiIsICJoZWlnaHRBIiwgImN1cnJlbnRLZXlBIiwgImxldmVsSW5kaWNlc0EiLCAiaGVpZ2h0QiIsICJjdXJyZW50S2V5QiIsICJsZXZlbEluZGljZXNCIiwgImtleUNvbXBhcmlzb24iLCAiaGVpZ2h0TWluIiwgImRlcHRoQU5vcm1hbGl6ZWQiLCAiZGVwdGhCTm9ybWFsaXplZCIsICJmaXJzdEtleSIsICJuIiwgImZvcmNlIiwgIm1heExlbmd0aCIsICJtaW4iLCAibWF4IiwgInJlc3VsdHMiLCAiQnJlYWsiLCAiYWRkZWQiLCAib25Gb3VuZCIsICJyIiwgInJvb3QiLCAiaXNTaGFyZWQiLCAidCIsICJzaXplIiwgImFzU2V0IiwgImJ0cmVlIiwgIkJOb2RlIiwgInZhbHVlcyIsICJ1bmRlZlZhbHMiLCAiZmFpbFhvciIsICJjbXAiLCAibG8iLCAiaGkiLCAibWlkIiwgImMiLCAibGFzdEluZGV4IiwgImluY2x1c2l2ZSIsICJpbmRleE9yTG93ZXIiLCAiZGVwdGgiLCAiYmFzZUluZGV4IiwgImtMIiwgInZMIiwgIm5ld1JpZ2h0U2libGluZyIsICJ0YXJnZXQiLCAicmhzIiwgImxocyIsICJoYWxmIiwgImVkaXRNb2RlIiwgImNvdW50IiwgImlMb3ciLCAiaUhpZ2giLCAiXyIsICJfc3VwZXIiLCAibGVuZ3RoIiwgImNMIiwgImNoaWxkU2l6ZSIsICJ0b29mZXciLCAiY2hpbGQiLCAibWF4U2l6ZSIsICJvbGRMZW5ndGgiLCAicmhzQ2hpbGRyZW4iLCAiZmFjdCIsICJhcmdzIiwgIl9pIiwgIkx1eG9uRXJyb3IiLCAiSW52YWxpZERhdGVUaW1lRXJyb3IiLCAicmVhc29uIiwgIkludmFsaWRJbnRlcnZhbEVycm9yIiwgIkludmFsaWREdXJhdGlvbkVycm9yIiwgIkNvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yIiwgIkludmFsaWRVbml0RXJyb3IiLCAidW5pdCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJab25lSXNBYnN0cmFjdEVycm9yIiwgIm4iLCAicyIsICJsIiwgIkRBVEVfU0hPUlQiLCAiREFURV9NRUQiLCAiREFURV9NRURfV0lUSF9XRUVLREFZIiwgIkRBVEVfRlVMTCIsICJEQVRFX0hVR0UiLCAiVElNRV9TSU1QTEUiLCAiVElNRV9XSVRIX1NFQ09ORFMiLCAiVElNRV9XSVRIX1NIT1JUX09GRlNFVCIsICJUSU1FX1dJVEhfTE9OR19PRkZTRVQiLCAiVElNRV8yNF9TSU1QTEUiLCAiVElNRV8yNF9XSVRIX1NFQ09ORFMiLCAiVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCIsICJUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQiLCAiREFURVRJTUVfU0hPUlQiLCAiREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX01FRCIsICJEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkiLCAiREFURVRJTUVfRlVMTCIsICJEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyIsICJEQVRFVElNRV9IVUdFIiwgIkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTIiwgImlzVW5kZWZpbmVkIiwgIm8iLCAiaXNOdW1iZXIiLCAiaXNJbnRlZ2VyIiwgImlzU3RyaW5nIiwgImlzRGF0ZSIsICJoYXNSZWxhdGl2ZSIsICJlIiwgIm1heWJlQXJyYXkiLCAidGhpbmciLCAiYmVzdEJ5IiwgImFyciIsICJieSIsICJjb21wYXJlIiwgImJlc3QiLCAibmV4dCIsICJwYWlyIiwgInBpY2siLCAib2JqIiwgImtleXMiLCAiYSIsICJrIiwgImhhc093blByb3BlcnR5IiwgInByb3AiLCAiaW50ZWdlckJldHdlZW4iLCAiYm90dG9tIiwgInRvcCIsICJmbG9vck1vZCIsICJ4IiwgIm4iLCAicGFkU3RhcnQiLCAiaW5wdXQiLCAiaXNOZWciLCAicGFkZGVkIiwgInBhcnNlSW50ZWdlciIsICJzdHJpbmciLCAicGFyc2VGbG9hdGluZyIsICJwYXJzZU1pbGxpcyIsICJmcmFjdGlvbiIsICJmIiwgInJvdW5kVG8iLCAibnVtYmVyIiwgImRpZ2l0cyIsICJ0b3dhcmRaZXJvIiwgImZhY3RvciIsICJpc0xlYXBZZWFyIiwgInllYXIiLCAiZGF5c0luWWVhciIsICJkYXlzSW5Nb250aCIsICJtb250aCIsICJtb2RNb250aCIsICJtb2RZZWFyIiwgIm9ialRvTG9jYWxUUyIsICJkIiwgIndlZWtzSW5XZWVrWWVhciIsICJ3ZWVrWWVhciIsICJwMSIsICJsYXN0IiwgInAyIiwgInVudHJ1bmNhdGVZZWFyIiwgInBhcnNlWm9uZUluZm8iLCAidHMiLCAib2Zmc2V0Rm9ybWF0IiwgImxvY2FsZSIsICJ0aW1lWm9uZSIsICJkYXRlIiwgImludGxPcHRzIiwgIm1vZGlmaWVkIiwgIl9fc3ByZWFkVmFsdWVzIiwgInBhcnNlZCIsICJtIiwgInNpZ25lZE9mZnNldCIsICJvZmZIb3VyU3RyIiwgIm9mZk1pbnV0ZVN0ciIsICJvZmZIb3VyIiwgIm9mZk1pbiIsICJvZmZNaW5TaWduZWQiLCAiYXNOdW1iZXIiLCAidmFsdWUiLCAibnVtZXJpY1ZhbHVlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm5vcm1hbGl6ZU9iamVjdCIsICJub3JtYWxpemVyIiwgIm5vcm1hbGl6ZWQiLCAidSIsICJ2IiwgImZvcm1hdE9mZnNldCIsICJvZmZzZXQiLCAiZm9ybWF0IiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAic2lnbiIsICJ0aW1lT2JqZWN0IiwgImlhbmFSZWdleCIsICJtb250aHNMb25nIiwgIm1vbnRoc1Nob3J0IiwgIm1vbnRoc05hcnJvdyIsICJtb250aHMiLCAibGVuZ3RoIiwgIndlZWtkYXlzTG9uZyIsICJ3ZWVrZGF5c1Nob3J0IiwgIndlZWtkYXlzTmFycm93IiwgIndlZWtkYXlzIiwgIm1lcmlkaWVtcyIsICJlcmFzTG9uZyIsICJlcmFzU2hvcnQiLCAiZXJhc05hcnJvdyIsICJlcmFzIiwgIm1lcmlkaWVtRm9yRGF0ZVRpbWUiLCAiZHQiLCAid2Vla2RheUZvckRhdGVUaW1lIiwgIm1vbnRoRm9yRGF0ZVRpbWUiLCAiZXJhRm9yRGF0ZVRpbWUiLCAiZm9ybWF0UmVsYXRpdmVUaW1lIiwgInVuaXQiLCAiY291bnQiLCAibnVtZXJpYyIsICJuYXJyb3ciLCAidW5pdHMiLCAibGFzdGFibGUiLCAiaXNEYXkiLCAiaXNJblBhc3QiLCAiZm10VmFsdWUiLCAic2luZ3VsYXIiLCAibGlsVW5pdHMiLCAiZm10VW5pdCIsICJzdHJpbmdpZnlUb2tlbnMiLCAic3BsaXRzIiwgInRva2VuVG9TdHJpbmciLCAicyIsICJ0b2tlbiIsICJtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzIiwgIkRBVEVfU0hPUlQiLCAiREFURV9NRUQiLCAiREFURV9GVUxMIiwgIkRBVEVfSFVHRSIsICJUSU1FX1NJTVBMRSIsICJUSU1FX1dJVEhfU0VDT05EUyIsICJUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUIiwgIlRJTUVfV0lUSF9MT05HX09GRlNFVCIsICJUSU1FXzI0X1NJTVBMRSIsICJUSU1FXzI0X1dJVEhfU0VDT05EUyIsICJUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUIiwgIlRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCIsICJEQVRFVElNRV9TSE9SVCIsICJEQVRFVElNRV9NRUQiLCAiREFURVRJTUVfRlVMTCIsICJEQVRFVElNRV9IVUdFIiwgIkRBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyIsICJEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTIiwgIkZvcm1hdHRlciIsICJfRm9ybWF0dGVyIiwgImxvY2FsZSIsICJvcHRzIiwgImZtdCIsICJjdXJyZW50IiwgImN1cnJlbnRGdWxsIiwgImJyYWNrZXRlZCIsICJpIiwgImMiLCAiZm9ybWF0T3B0cyIsICJkdCIsICJfX3NwcmVhZFZhbHVlcyIsICJuIiwgInAiLCAicGFkU3RhcnQiLCAia25vd25FbmdsaXNoIiwgInVzZURhdGVUaW1lRm9ybWF0dGVyIiwgInN0cmluZyIsICJleHRyYWN0IiwgImZvcm1hdE9mZnNldCIsICJtZXJpZGllbSIsICJtZXJpZGllbUZvckRhdGVUaW1lIiwgIm1vbnRoIiwgImxlbmd0aCIsICJzdGFuZGFsb25lIiwgIm1vbnRoRm9yRGF0ZVRpbWUiLCAid2Vla2RheSIsICJ3ZWVrZGF5Rm9yRGF0ZVRpbWUiLCAibWF5YmVNYWNybyIsICJlcmEiLCAiZXJhRm9yRGF0ZVRpbWUiLCAiZHVyIiwgInRva2VuVG9GaWVsZCIsICJsaWxkdXIiLCAibWFwcGVkIiwgInRva2VucyIsICJyZWFsVG9rZW5zIiwgImZvdW5kIiwgImxpdGVyYWwiLCAidmFsIiwgImNvbGxhcHNlZCIsICJ0IiwgIkludmFsaWQiLCAicmVhc29uIiwgImV4cGxhbmF0aW9uIiwgIlpvbmUiLCAiWm9uZUlzQWJzdHJhY3RFcnJvciIsICJ0cyIsICJvcHRzIiwgImZvcm1hdCIsICJvdGhlclpvbmUiLCAic2luZ2xldG9uIiwgIlN5c3RlbVpvbmUiLCAiX1N5c3RlbVpvbmUiLCAiWm9uZSIsICJ0cyIsICJmb3JtYXQiLCAibG9jYWxlIiwgInBhcnNlWm9uZUluZm8iLCAiZm9ybWF0T2Zmc2V0IiwgIm90aGVyWm9uZSIsICJkdGZDYWNoZSIsICJtYWtlRFRGIiwgInpvbmUiLCAidHlwZVRvUG9zIiwgImhhY2t5T2Zmc2V0IiwgImR0ZiIsICJkYXRlIiwgImZvcm1hdHRlZCIsICJwYXJzZWQiLCAiZk1vbnRoIiwgImZEYXkiLCAiZlllYXIiLCAiZmFkT3JCYyIsICJmSG91ciIsICJmTWludXRlIiwgImZTZWNvbmQiLCAicGFydHNPZmZzZXQiLCAiZmlsbGVkIiwgImkiLCAidHlwZSIsICJ2YWx1ZSIsICJwb3MiLCAiaXNVbmRlZmluZWQiLCAiaWFuYVpvbmVDYWNoZSIsICJJQU5BWm9uZSIsICJfSUFOQVpvbmUiLCAiWm9uZSIsICJuYW1lIiwgInMiLCAiZSIsICJ0cyIsICJmb3JtYXQiLCAibG9jYWxlIiwgInBhcnNlWm9uZUluZm8iLCAiZm9ybWF0T2Zmc2V0IiwgInllYXIiLCAibW9udGgiLCAiZGF5IiwgImFkT3JCYyIsICJob3VyIiwgIm1pbnV0ZSIsICJzZWNvbmQiLCAiYXNVVEMiLCAib2JqVG9Mb2NhbFRTIiwgImFzVFMiLCAib3ZlciIsICJvdGhlclpvbmUiLCAic2luZ2xldG9uIiwgIkZpeGVkT2Zmc2V0Wm9uZSIsICJfRml4ZWRPZmZzZXRab25lIiwgIlpvbmUiLCAib2Zmc2V0IiwgInMiLCAiciIsICJzaWduZWRPZmZzZXQiLCAiZm9ybWF0T2Zmc2V0IiwgInRzIiwgImZvcm1hdCIsICJvdGhlclpvbmUiLCAiSW52YWxpZFpvbmUiLCAiWm9uZSIsICJ6b25lTmFtZSIsICJub3JtYWxpemVab25lIiwgImlucHV0IiwgImRlZmF1bHRab25lIiwgIm9mZnNldCIsICJpc1VuZGVmaW5lZCIsICJab25lIiwgImlzU3RyaW5nIiwgImxvd2VyZWQiLCAiRml4ZWRPZmZzZXRab25lIiwgIklBTkFab25lIiwgImlzTnVtYmVyIiwgIkludmFsaWRab25lIiwgIm5vdyIsICJkZWZhdWx0Wm9uZSIsICJkZWZhdWx0TG9jYWxlIiwgImRlZmF1bHROdW1iZXJpbmdTeXN0ZW0iLCAiZGVmYXVsdE91dHB1dENhbGVuZGFyIiwgInRocm93T25JbnZhbGlkIiwgIlNldHRpbmdzIiwgIm4iLCAiem9uZSIsICJub3JtYWxpemVab25lIiwgIlN5c3RlbVpvbmUiLCAibG9jYWxlIiwgIm51bWJlcmluZ1N5c3RlbSIsICJvdXRwdXRDYWxlbmRhciIsICJ0IiwgIkxvY2FsZSIsICJJQU5BWm9uZSIsICJpbnRsTEZDYWNoZSIsICJnZXRDYWNoZWRMRiIsICJsb2NTdHJpbmciLCAib3B0cyIsICJrZXkiLCAiZHRmIiwgImludGxEVENhY2hlIiwgImdldENhY2hlZERURiIsICJpbnRsTnVtQ2FjaGUiLCAiZ2V0Q2FjaGVkSU5GIiwgImluZiIsICJpbnRsUmVsQ2FjaGUiLCAiZ2V0Q2FjaGVkUlRGIiwgIl9hIiwgImJhc2UiLCAiY2FjaGVLZXlPcHRzIiwgIl9fb2JqUmVzdCIsICJzeXNMb2NhbGVDYWNoZSIsICJzeXN0ZW1Mb2NhbGUiLCAicGFyc2VMb2NhbGVTdHJpbmciLCAibG9jYWxlU3RyIiwgInVJbmRleCIsICJvcHRpb25zIiwgInNtYWxsZXIiLCAiZSIsICJudW1iZXJpbmdTeXN0ZW0iLCAiY2FsZW5kYXIiLCAiaW50bENvbmZpZ1N0cmluZyIsICJvdXRwdXRDYWxlbmRhciIsICJtYXBNb250aHMiLCAiZiIsICJtcyIsICJpIiwgImR0IiwgIkRhdGVUaW1lIiwgIm1hcFdlZWtkYXlzIiwgImxpc3RTdHVmZiIsICJsb2MiLCAibGVuZ3RoIiwgImRlZmF1bHRPSyIsICJlbmdsaXNoRm4iLCAiaW50bEZuIiwgIm1vZGUiLCAic3VwcG9ydHNGYXN0TnVtYmVycyIsICJQb2x5TnVtYmVyRm9ybWF0dGVyIiwgImludGwiLCAiZm9yY2VTaW1wbGUiLCAicGFkVG8iLCAiZmxvb3IiLCAib3RoZXJPcHRzIiwgImludGxPcHRzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImZpeGVkIiwgInJvdW5kVG8iLCAicGFkU3RhcnQiLCAiUG9seURhdGVGb3JtYXR0ZXIiLCAieiIsICJnbXRPZmZzZXQiLCAib2Zmc2V0WiIsICJJQU5BWm9uZSIsICJQb2x5UmVsRm9ybWF0dGVyIiwgImlzRW5nbGlzaCIsICJoYXNSZWxhdGl2ZSIsICJjb3VudCIsICJ1bml0IiwgImZvcm1hdFJlbGF0aXZlVGltZSIsICJMb2NhbGUiLCAiX0xvY2FsZSIsICJsb2NhbGUiLCAiZGVmYXVsdFRvRU4iLCAic3BlY2lmaWVkTG9jYWxlIiwgIlNldHRpbmdzIiwgImxvY2FsZVIiLCAibnVtYmVyaW5nU3lzdGVtUiIsICJvdXRwdXRDYWxlbmRhclIiLCAibnVtYmVyaW5nIiwgInBhcnNlZExvY2FsZSIsICJwYXJzZWROdW1iZXJpbmdTeXN0ZW0iLCAicGFyc2VkT3V0cHV0Q2FsZW5kYXIiLCAiaXNBY3R1YWxseUVuIiwgImhhc05vV2VpcmRuZXNzIiwgImFsdHMiLCAiX19zcHJlYWRQcm9wcyIsICJmb3JtYXQiLCAibW9udGhzIiwgImZvcm1hdFN0ciIsICJ3ZWVrZGF5cyIsICJtZXJpZGllbXMiLCAiZXJhcyIsICJmaWVsZCIsICJkZiIsICJyZXN1bHRzIiwgIm1hdGNoaW5nIiwgIm0iLCAib3RoZXIiLCAiY29tYmluZVJlZ2V4ZXMiLCAicmVnZXhlcyIsICJmdWxsIiwgImYiLCAiY29tYmluZUV4dHJhY3RvcnMiLCAiZXh0cmFjdG9ycyIsICJtIiwgIm1lcmdlZFZhbHMiLCAibWVyZ2VkWm9uZSIsICJjdXJzb3IiLCAiZXgiLCAidmFsIiwgInpvbmUiLCAibmV4dCIsICJfX3NwcmVhZFZhbHVlcyIsICJwYXJzZSIsICJzIiwgInBhdHRlcm5zIiwgInJlZ2V4IiwgImV4dHJhY3RvciIsICJzaW1wbGVQYXJzZSIsICJrZXlzIiwgIm1hdGNoIiwgInJldCIsICJpIiwgInBhcnNlSW50ZWdlciIsICJvZmZzZXRSZWdleCIsICJpc29FeHRlbmRlZFpvbmUiLCAiaWFuYVJlZ2V4IiwgImlzb1RpbWVCYXNlUmVnZXgiLCAiaXNvVGltZVJlZ2V4IiwgImlzb1RpbWVFeHRlbnNpb25SZWdleCIsICJpc29ZbWRSZWdleCIsICJpc29XZWVrUmVnZXgiLCAiaXNvT3JkaW5hbFJlZ2V4IiwgImV4dHJhY3RJU09XZWVrRGF0YSIsICJleHRyYWN0SVNPT3JkaW5hbERhdGEiLCAic3FsWW1kUmVnZXgiLCAic3FsVGltZVJlZ2V4IiwgInNxbFRpbWVFeHRlbnNpb25SZWdleCIsICJpbnQiLCAicG9zIiwgImZhbGxiYWNrIiwgImlzVW5kZWZpbmVkIiwgImV4dHJhY3RJU09ZbWQiLCAiZXh0cmFjdElTT1RpbWUiLCAicGFyc2VNaWxsaXMiLCAiZXh0cmFjdElTT09mZnNldCIsICJsb2NhbCIsICJmdWxsT2Zmc2V0IiwgInNpZ25lZE9mZnNldCIsICJGaXhlZE9mZnNldFpvbmUiLCAiZXh0cmFjdElBTkFab25lIiwgIklBTkFab25lIiwgImlzb1RpbWVPbmx5IiwgImlzb0R1cmF0aW9uIiwgImV4dHJhY3RJU09EdXJhdGlvbiIsICJ5ZWFyU3RyIiwgIm1vbnRoU3RyIiwgIndlZWtTdHIiLCAiZGF5U3RyIiwgImhvdXJTdHIiLCAibWludXRlU3RyIiwgInNlY29uZFN0ciIsICJtaWxsaXNlY29uZHNTdHIiLCAiaGFzTmVnYXRpdmVQcmVmaXgiLCAibmVnYXRpdmVTZWNvbmRzIiwgIm1heWJlTmVnYXRlIiwgIm51bSIsICJmb3JjZSIsICJwYXJzZUZsb2F0aW5nIiwgIm9ic09mZnNldHMiLCAiZnJvbVN0cmluZ3MiLCAid2Vla2RheVN0ciIsICJyZXN1bHQiLCAidW50cnVuY2F0ZVllYXIiLCAibW9udGhzU2hvcnQiLCAid2Vla2RheXNMb25nIiwgIndlZWtkYXlzU2hvcnQiLCAicmZjMjgyMiIsICJleHRyYWN0UkZDMjgyMiIsICJvYnNPZmZzZXQiLCAibWlsT2Zmc2V0IiwgIm9mZkhvdXJTdHIiLCAib2ZmTWludXRlU3RyIiwgIm9mZnNldCIsICJwcmVwcm9jZXNzUkZDMjgyMiIsICJyZmMxMTIzIiwgInJmYzg1MCIsICJhc2NpaSIsICJleHRyYWN0UkZDMTEyM09yODUwIiwgImV4dHJhY3RBU0NJSSIsICJpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwgImlzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwgImlzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwgImlzb1RpbWVDb21iaW5lZFJlZ2V4IiwgImV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0IiwgImV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldCIsICJleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lIiwgImV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0IiwgInBhcnNlSVNPRGF0ZSIsICJwYXJzZVJGQzI4MjJEYXRlIiwgInBhcnNlSFRUUERhdGUiLCAicGFyc2VJU09EdXJhdGlvbiIsICJleHRyYWN0SVNPVGltZU9ubHkiLCAicGFyc2VJU09UaW1lT25seSIsICJzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwgInNxbFRpbWVDb21iaW5lZFJlZ2V4IiwgImV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmUiLCAicGFyc2VTUUwiLCAiSU5WQUxJRCIsICJsb3dPcmRlck1hdHJpeCIsICJjYXN1YWxNYXRyaXgiLCAiX19zcHJlYWRWYWx1ZXMiLCAiZGF5c0luWWVhckFjY3VyYXRlIiwgImRheXNJbk1vbnRoQWNjdXJhdGUiLCAiYWNjdXJhdGVNYXRyaXgiLCAib3JkZXJlZFVuaXRzIiwgInJldmVyc2VVbml0cyIsICJjbG9uZSIsICJkdXIiLCAiYWx0cyIsICJjbGVhciIsICJjb25mIiwgIkR1cmF0aW9uIiwgImFudGlUcnVuYyIsICJjb252ZXJ0IiwgIm1hdHJpeCIsICJmcm9tTWFwIiwgImZyb21Vbml0IiwgInRvTWFwIiwgInRvVW5pdCIsICJjb252IiwgInJhdyIsICJzYW1lU2lnbiIsICJhZGRlZCIsICJub3JtYWxpemVWYWx1ZXMiLCAidmFscyIsICJwcmV2aW91cyIsICJjdXJyZW50IiwgImlzVW5kZWZpbmVkIiwgIl9EdXJhdGlvbiIsICJjb25maWciLCAiYWNjdXJhdGUiLCAiTG9jYWxlIiwgImNvdW50IiwgIm9wdHMiLCAib2JqIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm5vcm1hbGl6ZU9iamVjdCIsICJkdXJhdGlvbkxpa2UiLCAiaXNOdW1iZXIiLCAidGV4dCIsICJwYXJzZWQiLCAicGFyc2VJU09EdXJhdGlvbiIsICJwYXJzZUlTT1RpbWVPbmx5IiwgInJlYXNvbiIsICJleHBsYW5hdGlvbiIsICJpbnZhbGlkIiwgIkludmFsaWQiLCAiU2V0dGluZ3MiLCAiSW52YWxpZER1cmF0aW9uRXJyb3IiLCAidW5pdCIsICJub3JtYWxpemVkIiwgIkludmFsaWRVbml0RXJyb3IiLCAibyIsICJmbXQiLCAiZm10T3B0cyIsICJfX3NwcmVhZFByb3BzIiwgIkZvcm1hdHRlciIsICJsIiwgInZhbCIsICJuIiwgInMiLCAicm91bmRUbyIsICJtaWxsaXMiLCAidmFsdWUiLCAic3RyIiwgImR1cmF0aW9uIiwgInJlc3VsdCIsICJrIiwgImhhc093blByb3BlcnR5IiwgImZuIiwgImFzTnVtYmVyIiwgInZhbHVlcyIsICJtaXhlZCIsICJsb2NhbGUiLCAibnVtYmVyaW5nU3lzdGVtIiwgImNvbnZlcnNpb25BY2N1cmFjeSIsICJsb2MiLCAidW5pdHMiLCAidSIsICJidWlsdCIsICJhY2N1bXVsYXRlZCIsICJsYXN0VW5pdCIsICJvd24iLCAiYWsiLCAiaSIsICJkb3duIiwgImtleSIsICJuZWdhdGVkIiwgIm90aGVyIiwgImVxIiwgInYxIiwgInYyIiwgIklOVkFMSUQiLCAidmFsaWRhdGVTdGFydEVuZCIsICJzdGFydCIsICJlbmQiLCAiSW50ZXJ2YWwiLCAiX0ludGVydmFsIiwgImNvbmZpZyIsICJyZWFzb24iLCAiZXhwbGFuYXRpb24iLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaW52YWxpZCIsICJJbnZhbGlkIiwgIlNldHRpbmdzIiwgIkludmFsaWRJbnRlcnZhbEVycm9yIiwgImJ1aWx0U3RhcnQiLCAiZnJpZW5kbHlEYXRlVGltZSIsICJidWlsdEVuZCIsICJ2YWxpZGF0ZUVycm9yIiwgImR1cmF0aW9uIiwgImR1ciIsICJEdXJhdGlvbiIsICJkdCIsICJ0ZXh0IiwgIm9wdHMiLCAicyIsICJlIiwgInN0YXJ0SXNWYWxpZCIsICJEYXRlVGltZSIsICJlbmRJc1ZhbGlkIiwgIm8iLCAidW5pdCIsICJkYXRlVGltZSIsICJkYXRlVGltZXMiLCAic29ydGVkIiwgImQiLCAicmVzdWx0cyIsICJhZGRlZCIsICJuZXh0IiwgImlkeCIsICJ4IiwgIm51bWJlck9mUGFydHMiLCAib3RoZXIiLCAiaW50ZXJ2YWxzIiwgImZvdW5kIiwgImZpbmFsIiwgImEiLCAiYiIsICJzb2ZhciIsICJjdXJyZW50IiwgIml0ZW0iLCAiY3VycmVudENvdW50IiwgImVuZHMiLCAiaSIsICJmbGF0dGVuZWQiLCAiYXJyIiwgImRhdGVGb3JtYXQiLCAic2VwYXJhdG9yIiwgIm1hcEZuIiwgIkluZm8iLCAiem9uZSIsICJTZXR0aW5ncyIsICJwcm90byIsICJEYXRlVGltZSIsICJJQU5BWm9uZSIsICJpbnB1dCIsICJub3JtYWxpemVab25lIiwgImxlbmd0aCIsICJsb2NhbGUiLCAibnVtYmVyaW5nU3lzdGVtIiwgImxvY09iaiIsICJvdXRwdXRDYWxlbmRhciIsICJMb2NhbGUiLCAiaGFzUmVsYXRpdmUiLCAiZGF5RGlmZiIsICJlYXJsaWVyIiwgImxhdGVyIiwgInV0Y0RheVN0YXJ0IiwgImR0IiwgIm1zIiwgIkR1cmF0aW9uIiwgImhpZ2hPcmRlckRpZmZzIiwgImN1cnNvciIsICJ1bml0cyIsICJkaWZmZXJzIiwgImIiLCAiZGF5cyIsICJyZXN1bHRzIiwgImxvd2VzdE9yZGVyIiwgImhpZ2hXYXRlciIsICJ1bml0IiwgImRpZmZlciIsICJkZWx0YSIsICJkaWZmX2RlZmF1bHQiLCAib3B0cyIsICJyZW1haW5pbmdNaWxsaXMiLCAibG93ZXJPcmRlclVuaXRzIiwgInUiLCAiZHVyYXRpb24iLCAibnVtYmVyaW5nU3lzdGVtcyIsICJudW1iZXJpbmdTeXN0ZW1zVVRGMTYiLCAiaGFuaWRlY0NoYXJzIiwgInBhcnNlRGlnaXRzIiwgInN0ciIsICJ2YWx1ZSIsICJpIiwgImNvZGUiLCAia2V5IiwgIm1pbiIsICJtYXgiLCAiZGlnaXRSZWdleCIsICJudW1iZXJpbmdTeXN0ZW0iLCAiYXBwZW5kIiwgIk1JU1NJTkdfRlRQIiwgImludFVuaXQiLCAicmVnZXgiLCAicG9zdCIsICJpIiwgInMiLCAicGFyc2VEaWdpdHMiLCAiTkJTUCIsICJzcGFjZU9yTkJTUCIsICJzcGFjZU9yTkJTUFJlZ0V4cCIsICJmaXhMaXN0UmVnZXgiLCAic3RyaXBJbnNlbnNpdGl2aXRpZXMiLCAib25lT2YiLCAic3RyaW5ncyIsICJzdGFydEluZGV4IiwgIm9mZnNldCIsICJncm91cHMiLCAiaCIsICJtIiwgInNpZ25lZE9mZnNldCIsICJzaW1wbGUiLCAiZXNjYXBlVG9rZW4iLCAidmFsdWUiLCAidW5pdEZvclRva2VuIiwgInRva2VuIiwgImxvYyIsICJvbmUiLCAiZGlnaXRSZWdleCIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJzaXgiLCAib25lT3JUd28iLCAib25lVG9UaHJlZSIsICJvbmVUb1NpeCIsICJvbmVUb05pbmUiLCAidHdvVG9Gb3VyIiwgImZvdXJUb1NpeCIsICJsaXRlcmFsIiwgInQiLCAidW5pdCIsICJ1bnRydW5jYXRlWWVhciIsICJwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbCIsICJ0b2tlbkZvclBhcnQiLCAicGFydCIsICJsb2NhbGUiLCAiZm9ybWF0T3B0cyIsICJ0eXBlIiwgInN0eWxlIiwgInZhbCIsICJidWlsZFJlZ2V4IiwgInVuaXRzIiwgInUiLCAiZiIsICJtYXRjaCIsICJpbnB1dCIsICJoYW5kbGVycyIsICJtYXRjaGVzIiwgImFsbCIsICJtYXRjaEluZGV4IiwgImhhc093blByb3BlcnR5IiwgImRhdGVUaW1lRnJvbU1hdGNoZXMiLCAidG9GaWVsZCIsICJ6b25lIiwgInNwZWNpZmljT2Zmc2V0IiwgImlzVW5kZWZpbmVkIiwgIklBTkFab25lIiwgIkZpeGVkT2Zmc2V0Wm9uZSIsICJwYXJzZU1pbGxpcyIsICJyIiwgImsiLCAiZHVtbXlEYXRlVGltZUNhY2hlIiwgImdldER1bW15RGF0ZVRpbWUiLCAiRGF0ZVRpbWUiLCAibWF5YmVFeHBhbmRNYWNyb1Rva2VuIiwgIkZvcm1hdHRlciIsICJ0b2tlbnMiLCAicCIsICJleHBhbmRNYWNyb1Rva2VucyIsICJleHBsYWluRnJvbVRva2VucyIsICJmb3JtYXQiLCAiZGlzcXVhbGlmeWluZ1VuaXQiLCAicmVnZXhTdHJpbmciLCAicmF3TWF0Y2hlcyIsICJyZXN1bHQiLCAiQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IiLCAicGFyc2VGcm9tVG9rZW5zIiwgImludmFsaWRSZWFzb24iLCAibm9uTGVhcExhZGRlciIsICJsZWFwTGFkZGVyIiwgInVuaXRPdXRPZlJhbmdlIiwgInVuaXQiLCAidmFsdWUiLCAiSW52YWxpZCIsICJkYXlPZldlZWsiLCAieWVhciIsICJtb250aCIsICJkYXkiLCAiZCIsICJqcyIsICJjb21wdXRlT3JkaW5hbCIsICJpc0xlYXBZZWFyIiwgInVuY29tcHV0ZU9yZGluYWwiLCAib3JkaW5hbCIsICJ0YWJsZSIsICJtb250aDAiLCAiZ3JlZ29yaWFuVG9XZWVrIiwgImdyZWdPYmoiLCAid2Vla2RheSIsICJ3ZWVrTnVtYmVyIiwgIndlZWtZZWFyIiwgIndlZWtzSW5XZWVrWWVhciIsICJfX3NwcmVhZFZhbHVlcyIsICJ0aW1lT2JqZWN0IiwgIndlZWtUb0dyZWdvcmlhbiIsICJ3ZWVrRGF0YSIsICJ3ZWVrZGF5T2ZKYW40IiwgInllYXJJbkRheXMiLCAiZGF5c0luWWVhciIsICJncmVnb3JpYW5Ub09yZGluYWwiLCAiZ3JlZ0RhdGEiLCAib3JkaW5hbFRvR3JlZ29yaWFuIiwgIm9yZGluYWxEYXRhIiwgImhhc0ludmFsaWRXZWVrRGF0YSIsICJvYmoiLCAidmFsaWRZZWFyIiwgImlzSW50ZWdlciIsICJ2YWxpZFdlZWsiLCAiaW50ZWdlckJldHdlZW4iLCAidmFsaWRXZWVrZGF5IiwgImhhc0ludmFsaWRPcmRpbmFsRGF0YSIsICJ2YWxpZE9yZGluYWwiLCAiaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEiLCAidmFsaWRNb250aCIsICJ2YWxpZERheSIsICJkYXlzSW5Nb250aCIsICJoYXNJbnZhbGlkVGltZURhdGEiLCAiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIiwgInZhbGlkSG91ciIsICJ2YWxpZE1pbnV0ZSIsICJ2YWxpZFNlY29uZCIsICJ2YWxpZE1pbGxpc2Vjb25kIiwgIklOVkFMSUQiLCAiTUFYX0RBVEUiLCAidW5zdXBwb3J0ZWRab25lIiwgInpvbmUiLCAiSW52YWxpZCIsICJwb3NzaWJseUNhY2hlZFdlZWtEYXRhIiwgImR0IiwgImdyZWdvcmlhblRvV2VlayIsICJjbG9uZSIsICJpbnN0IiwgImFsdHMiLCAiY3VycmVudCIsICJEYXRlVGltZSIsICJfX3NwcmVhZFByb3BzIiwgIl9fc3ByZWFkVmFsdWVzIiwgImZpeE9mZnNldCIsICJsb2NhbFRTIiwgIm8iLCAidHoiLCAidXRjR3Vlc3MiLCAibzIiLCAibzMiLCAidHNUb09iaiIsICJ0cyIsICJvZmZzZXQiLCAiZCIsICJvYmpUb1RTIiwgIm9iaiIsICJvYmpUb0xvY2FsVFMiLCAiYWRqdXN0VGltZSIsICJkdXIiLCAib1ByZSIsICJ5ZWFyIiwgIm1vbnRoIiwgImMiLCAiZGF5c0luTW9udGgiLCAibWlsbGlzVG9BZGQiLCAiRHVyYXRpb24iLCAicGFyc2VEYXRhVG9EYXRlVGltZSIsICJwYXJzZWQiLCAicGFyc2VkWm9uZSIsICJvcHRzIiwgImZvcm1hdCIsICJ0ZXh0IiwgInNwZWNpZmljT2Zmc2V0IiwgInNldFpvbmUiLCAiaW50ZXJwcmV0YXRpb25ab25lIiwgInRvVGVjaEZvcm1hdCIsICJhbGxvd1oiLCAiRm9ybWF0dGVyIiwgIkxvY2FsZSIsICJ0b0lTT0RhdGUiLCAiZXh0ZW5kZWQiLCAibG9uZ0Zvcm1hdCIsICJwYWRTdGFydCIsICJ0b0lTT1RpbWUiLCAic3VwcHJlc3NTZWNvbmRzIiwgInN1cHByZXNzTWlsbGlzZWNvbmRzIiwgImluY2x1ZGVPZmZzZXQiLCAiZXh0ZW5kZWRab25lIiwgImRlZmF1bHRVbml0VmFsdWVzIiwgImRlZmF1bHRXZWVrVW5pdFZhbHVlcyIsICJkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXMiLCAib3JkZXJlZFVuaXRzIiwgIm9yZGVyZWRXZWVrVW5pdHMiLCAib3JkZXJlZE9yZGluYWxVbml0cyIsICJub3JtYWxpemVVbml0IiwgInVuaXQiLCAibm9ybWFsaXplZCIsICJJbnZhbGlkVW5pdEVycm9yIiwgInF1aWNrRFQiLCAibm9ybWFsaXplWm9uZSIsICJTZXR0aW5ncyIsICJsb2MiLCAidHNOb3ciLCAiaXNVbmRlZmluZWQiLCAidSIsICJpbnZhbGlkIiwgImhhc0ludmFsaWRHcmVnb3JpYW5EYXRhIiwgImhhc0ludmFsaWRUaW1lRGF0YSIsICJvZmZzZXRQcm92aXMiLCAiZGlmZlJlbGF0aXZlIiwgInN0YXJ0IiwgImVuZCIsICJyb3VuZCIsICJyb3VuZFRvIiwgImRpZmZlciIsICJjb3VudCIsICJsYXN0T3B0cyIsICJhcmdMaXN0IiwgImFyZ3MiLCAiX0RhdGVUaW1lIiwgImNvbmZpZyIsICJvdCIsICJkYXkiLCAiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIiwgIkZpeGVkT2Zmc2V0Wm9uZSIsICJkYXRlIiwgIm9wdGlvbnMiLCAiaXNEYXRlIiwgInpvbmVUb1VzZSIsICJtaWxsaXNlY29uZHMiLCAiaXNOdW1iZXIiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAic2Vjb25kcyIsICJub3JtYWxpemVPYmplY3QiLCAiY29udGFpbnNPcmRpbmFsIiwgImNvbnRhaW5zR3JlZ29yWWVhciIsICJjb250YWluc0dyZWdvck1EIiwgImNvbnRhaW5zR3JlZ29yIiwgImRlZmluaXRlV2Vla0RlZiIsICJDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciIsICJ1c2VXZWVrRGF0YSIsICJ1bml0cyIsICJkZWZhdWx0VmFsdWVzIiwgIm9iak5vdyIsICJncmVnb3JpYW5Ub09yZGluYWwiLCAiZm91bmRGaXJzdCIsICJ2IiwgImhpZ2hlck9yZGVySW52YWxpZCIsICJoYXNJbnZhbGlkV2Vla0RhdGEiLCAiaGFzSW52YWxpZE9yZGluYWxEYXRhIiwgImdyZWdvcmlhbiIsICJ3ZWVrVG9HcmVnb3JpYW4iLCAib3JkaW5hbFRvR3JlZ29yaWFuIiwgInRzRmluYWwiLCAib2Zmc2V0RmluYWwiLCAidmFscyIsICJwYXJzZUlTT0RhdGUiLCAicGFyc2VSRkMyODIyRGF0ZSIsICJwYXJzZUhUVFBEYXRlIiwgImZtdCIsICJsb2NhbGUiLCAibnVtYmVyaW5nU3lzdGVtIiwgImxvY2FsZVRvVXNlIiwgInBhcnNlRnJvbVRva2VucyIsICJwYXJzZVNRTCIsICJyZWFzb24iLCAiZXhwbGFuYXRpb24iLCAiSW52YWxpZERhdGVUaW1lRXJyb3IiLCAiSW5mbyIsICJpc0xlYXBZZWFyIiwgImRheXNJblllYXIiLCAid2Vla3NJbldlZWtZZWFyIiwgImNhbGVuZGFyIiwgImtlZXBMb2NhbFRpbWUiLCAia2VlcENhbGVuZGFyVGltZSIsICJuZXdUUyIsICJvZmZzZXRHdWVzcyIsICJhc09iaiIsICJvdXRwdXRDYWxlbmRhciIsICJ2YWx1ZXMiLCAic2V0dGluZ1dlZWtTdHVmZiIsICJtaXhlZCIsICJkdXJhdGlvbiIsICJub3JtYWxpemVkVW5pdCIsICJxIiwgImZvcm1hdE9wdHMiLCAiREFURV9TSE9SVCIsICJleHQiLCAiaW5jbHVkZVByZWZpeCIsICJpbmNsdWRlWm9uZSIsICJpbmNsdWRlT2Zmc2V0U3BhY2UiLCAiYmFzZSIsICJvdGhlckRhdGVUaW1lIiwgImR1ck9wdHMiLCAibWF5YmVBcnJheSIsICJvdGhlcklzTGF0ZXIiLCAiZWFybGllciIsICJsYXRlciIsICJkaWZmZWQiLCAiZGlmZl9kZWZhdWx0IiwgIkludGVydmFsIiwgImlucHV0TXMiLCAiYWRqdXN0ZWRUb1pvbmUiLCAib3RoZXIiLCAicGFkZGluZyIsICJkYXRlVGltZXMiLCAiYmVzdEJ5IiwgImkiLCAiZXhwbGFpbkZyb21Ub2tlbnMiLCAiREFURV9NRUQiLCAiREFURV9NRURfV0lUSF9XRUVLREFZIiwgIkRBVEVfRlVMTCIsICJEQVRFX0hVR0UiLCAiVElNRV9TSU1QTEUiLCAiVElNRV9XSVRIX1NFQ09ORFMiLCAiVElNRV9XSVRIX1NIT1JUX09GRlNFVCIsICJUSU1FX1dJVEhfTE9OR19PRkZTRVQiLCAiVElNRV8yNF9TSU1QTEUiLCAiVElNRV8yNF9XSVRIX1NFQ09ORFMiLCAiVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCIsICJUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQiLCAiREFURVRJTUVfU0hPUlQiLCAiREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX01FRCIsICJEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTIiwgIkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkiLCAiREFURVRJTUVfRlVMTCIsICJEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyIsICJEQVRFVElNRV9IVUdFIiwgIkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTIiwgImZyaWVuZGx5RGF0ZVRpbWUiLCAiZGF0ZVRpbWVpc2giLCAiUCIsICJlbW9qaV9yZWdleF9kZWZhdWx0IiwgIm5vcm1hbGl6ZUR1cmF0aW9uIiwgImR1ciIsICJyZW5kZXJNaW5pbWFsRGF0ZSIsICJ0aW1lIiwgImRhdGVGb3JtYXQiLCAiZGF0ZVRpbWVGb3JtYXQiLCAibG9jYWxlIiwgInJlbmRlck1pbmltYWxEdXJhdGlvbiIsICJkdXIiLCAibm9ybWFsaXplRHVyYXRpb24iLCAicmVzdWx0IiwgImdldEZpbGVUaXRsZSIsICJwYXRoIiwgImdldEV4dGVuc2lvbiIsICJIRUFERVJfQ0FOT05JQ0FMSVpFUiIsICJlbW9qaV9yZWdleF9kZWZhdWx0IiwgIl8iLCAicmVzdWx0IiwgIm5vcm1hbGl6ZUhlYWRlckZvckxpbmsiLCAiaGVhZGVyIiwgIkxpbmsiLCAiX0xpbmsiLCAicGF0aCIsICJlbWJlZCIsICJkaXNwbGF5IiwgImxpbmtwYXRoIiwgInNwbGl0IiwgImhlYWRlciIsICJub3JtYWxpemVIZWFkZXJGb3JMaW5rIiwgImJsb2NrSWQiLCAib2JqZWN0IiwgInJhd2xpbmsiLCAibGluayIsICJzcGxpdE9uVW5lc2NhcGVkUGlwZSIsICJmaWVsZHMiLCAiYmxvY2siLCAib3RoZXIiLCAicmVzdWx0IiwgImdldEZpbGVUaXRsZSIsICJfYSIsICJfYiIsICJlc2NhcGVkIiwgInBpcGUiLCAiQUxJQVMiLCAiRE9DIiwgIk1BUCIsICJQQUlSIiwgIlNDQUxBUiIsICJTRVEiLCAiTk9ERV9UWVBFIiwgImlzQWxpYXMiLCAibm9kZSIsICJpc0RvY3VtZW50IiwgImlzTWFwIiwgImlzUGFpciIsICJpc1NjYWxhciIsICJpc1NlcSIsICJpc0NvbGxlY3Rpb24iLCAiaXNOb2RlIiwgImhhc0FuY2hvciIsICJCUkVBSyIsICJTS0lQIiwgIlJFTU9WRSIsICJ2aXNpdCIsICJub2RlIiwgInZpc2l0b3IiLCAidmlzaXRvcl8iLCAiaW5pdFZpc2l0b3IiLCAiaXNEb2N1bWVudCIsICJ2aXNpdF8iLCAia2V5IiwgInBhdGgiLCAiY3RybCIsICJjYWxsVmlzaXRvciIsICJpc05vZGUiLCAiaXNQYWlyIiwgInJlcGxhY2VOb2RlIiwgImlzQ29sbGVjdGlvbiIsICJjaSIsICJjayIsICJjdiIsICJ2aXNpdEFzeW5jIiwgInZpc2l0QXN5bmNfIiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgIl9lIiwgImlzTWFwIiwgImlzU2VxIiwgImlzU2NhbGFyIiwgImlzQWxpYXMiLCAicGFyZW50IiwgInB0IiwgImVzY2FwZUNoYXJzIiwgImVzY2FwZVRhZ05hbWUiLCAidG4iLCAiY2giLCAiRGlyZWN0aXZlcyIsICJfRGlyZWN0aXZlcyIsICJ5YW1sIiwgInRhZ3MiLCAiY29weSIsICJyZXMiLCAibGluZSIsICJvbkVycm9yIiwgInBhcnRzIiwgIm5hbWUiLCAiaGFuZGxlIiwgInByZWZpeCIsICJ2ZXJzaW9uIiwgImlzVmFsaWQiLCAic291cmNlIiwgInZlcmJhdGltIiwgInN1ZmZpeCIsICJlcnJvciIsICJ0YWciLCAiZG9jIiwgImxpbmVzIiwgInRhZ0VudHJpZXMiLCAidGFnTmFtZXMiLCAiaXNOb2RlIiwgInZpc2l0IiwgIl9rZXkiLCAibm9kZSIsICJhbmNob3JJc1ZhbGlkIiwgImFuY2hvciIsICJtc2ciLCAiYW5jaG9yTmFtZXMiLCAicm9vdCIsICJhbmNob3JzIiwgInZpc2l0IiwgIl9rZXkiLCAibm9kZSIsICJmaW5kTmV3QW5jaG9yIiwgInByZWZpeCIsICJleGNsdWRlIiwgImkiLCAibmFtZSIsICJjcmVhdGVOb2RlQW5jaG9ycyIsICJkb2MiLCAiYWxpYXNPYmplY3RzIiwgInNvdXJjZU9iamVjdHMiLCAicHJldkFuY2hvcnMiLCAic291cmNlIiwgInJlZiIsICJpc1NjYWxhciIsICJpc0NvbGxlY3Rpb24iLCAiZXJyb3IiLCAiYXBwbHlSZXZpdmVyIiwgInJldml2ZXIiLCAib2JqIiwgImtleSIsICJ2YWwiLCAiaSIsICJsZW4iLCAidjAiLCAidjEiLCAiayIsICJ0b0pTIiwgInZhbHVlIiwgImFyZyIsICJjdHgiLCAidiIsICJpIiwgImhhc0FuY2hvciIsICJkYXRhIiwgInJlcyIsICJOb2RlQmFzZSIsICJ0eXBlIiwgIk5PREVfVFlQRSIsICJjb3B5IiwgImRvYyIsICJtYXBBc01hcCIsICJtYXhBbGlhc0NvdW50IiwgIm9uQW5jaG9yIiwgInJldml2ZXIiLCAiaXNEb2N1bWVudCIsICJjdHgiLCAicmVzIiwgInRvSlMiLCAiY291bnQiLCAiYXBwbHlSZXZpdmVyIiwgIkFsaWFzIiwgIk5vZGVCYXNlIiwgInNvdXJjZSIsICJBTElBUyIsICJkb2MiLCAiZm91bmQiLCAidmlzaXQiLCAiX2tleSIsICJub2RlIiwgIl9hcmciLCAiY3R4IiwgImFuY2hvcnMiLCAibWF4QWxpYXNDb3VudCIsICJtc2ciLCAiZGF0YSIsICJ0b0pTIiwgImdldEFsaWFzQ291bnQiLCAiX29uQ29tbWVudCIsICJfb25DaG9tcEtlZXAiLCAic3JjIiwgImFuY2hvcklzVmFsaWQiLCAiaXNBbGlhcyIsICJhbmNob3IiLCAiaXNDb2xsZWN0aW9uIiwgImNvdW50IiwgIml0ZW0iLCAiYyIsICJpc1BhaXIiLCAia2MiLCAidmMiLCAiaXNTY2FsYXJWYWx1ZSIsICJ2YWx1ZSIsICJTY2FsYXIiLCAiTm9kZUJhc2UiLCAiU0NBTEFSIiwgImFyZyIsICJjdHgiLCAidG9KUyIsICJkZWZhdWx0VGFnUHJlZml4IiwgImZpbmRUYWdPYmplY3QiLCAidmFsdWUiLCAidGFnTmFtZSIsICJ0YWdzIiwgIl9hIiwgIm1hdGNoIiwgInQiLCAidGFnT2JqIiwgImNyZWF0ZU5vZGUiLCAiY3R4IiwgIl9iIiwgIl9jIiwgImlzRG9jdW1lbnQiLCAiaXNOb2RlIiwgImlzUGFpciIsICJtYXAiLCAiTUFQIiwgImFsaWFzRHVwbGljYXRlT2JqZWN0cyIsICJvbkFuY2hvciIsICJvblRhZ09iaiIsICJzY2hlbWEiLCAic291cmNlT2JqZWN0cyIsICJyZWYiLCAiQWxpYXMiLCAibm9kZSIsICJTY2FsYXIiLCAiU0VRIiwgImNvbGxlY3Rpb25Gcm9tUGF0aCIsICJzY2hlbWEiLCAicGF0aCIsICJ2YWx1ZSIsICJ2IiwgImkiLCAiayIsICJhIiwgImNyZWF0ZU5vZGUiLCAiaXNFbXB0eVBhdGgiLCAiQ29sbGVjdGlvbiIsICJOb2RlQmFzZSIsICJ0eXBlIiwgImNvcHkiLCAiaXQiLCAiaXNOb2RlIiwgImlzUGFpciIsICJrZXkiLCAicmVzdCIsICJub2RlIiwgImlzQ29sbGVjdGlvbiIsICJrZWVwU2NhbGFyIiwgImlzU2NhbGFyIiwgImFsbG93U2NhbGFyIiwgIm4iLCAic3RyaW5naWZ5Q29tbWVudCIsICJzdHIiLCAiaW5kZW50Q29tbWVudCIsICJjb21tZW50IiwgImluZGVudCIsICJsaW5lQ29tbWVudCIsICJGT0xEX0ZMT1ciLCAiRk9MRF9CTE9DSyIsICJGT0xEX1FVT1RFRCIsICJmb2xkRmxvd0xpbmVzIiwgInRleHQiLCAiaW5kZW50IiwgIm1vZGUiLCAiaW5kZW50QXRTdGFydCIsICJsaW5lV2lkdGgiLCAibWluQ29udGVudFdpZHRoIiwgIm9uRm9sZCIsICJvbk92ZXJmbG93IiwgImVuZFN0ZXAiLCAiZm9sZHMiLCAiZXNjYXBlZEZvbGRzIiwgImVuZCIsICJzcGxpdCIsICJwcmV2IiwgIm92ZXJmbG93IiwgImkiLCAiZXNjU3RhcnQiLCAiZXNjRW5kIiwgImNvbnN1bWVNb3JlSW5kZW50ZWRMaW5lcyIsICJjaCIsICJuZXh0IiwgImoiLCAicmVzIiwgImZvbGQiLCAic3RhcnQiLCAiZ2V0Rm9sZE9wdGlvbnMiLCAiY3R4IiwgImlzQmxvY2siLCAiY29udGFpbnNEb2N1bWVudE1hcmtlciIsICJzdHIiLCAibGluZUxlbmd0aE92ZXJMaW1pdCIsICJsaW5lV2lkdGgiLCAiaW5kZW50TGVuZ3RoIiwgImxpbWl0IiwgInN0ckxlbiIsICJzdGFydCIsICJkb3VibGVRdW90ZWRTdHJpbmciLCAidmFsdWUiLCAianNvbiIsICJpbXBsaWNpdEtleSIsICJtaW5NdWx0aUxpbmVMZW5ndGgiLCAiaW5kZW50IiwgImkiLCAiY2giLCAiY29kZSIsICJmb2xkRmxvd0xpbmVzIiwgIkZPTERfUVVPVEVEIiwgInNpbmdsZVF1b3RlZFN0cmluZyIsICJyZXMiLCAiRk9MRF9GTE9XIiwgInF1b3RlZFN0cmluZyIsICJzaW5nbGVRdW90ZSIsICJxcyIsICJoYXNEb3VibGUiLCAiaGFzU2luZ2xlIiwgImJsb2NrRW5kTmV3bGluZXMiLCAiZSIsICJibG9ja1N0cmluZyIsICJjb21tZW50IiwgInR5cGUiLCAib25Db21tZW50IiwgIm9uQ2hvbXBLZWVwIiwgImJsb2NrUXVvdGUiLCAiY29tbWVudFN0cmluZyIsICJsaXRlcmFsIiwgIlNjYWxhciIsICJjaG9tcCIsICJlbmRTdGFydCIsICJlbmQiLCAiZW5kTmxQb3MiLCAic3RhcnRXaXRoU3BhY2UiLCAic3RhcnRFbmQiLCAic3RhcnRObFBvcyIsICJoZWFkZXIiLCAiYm9keSIsICJGT0xEX0JMT0NLIiwgInBsYWluU3RyaW5nIiwgIml0ZW0iLCAiYWN0dWFsU3RyaW5nIiwgImluZGVudFN0ZXAiLCAiaW5GbG93IiwgInRlc3QiLCAidGFnIiwgIl9hIiwgImNvbXBhdCIsICJ0YWdzIiwgInN0cmluZ2lmeVN0cmluZyIsICJzcyIsICJfc3RyaW5naWZ5IiwgIl90eXBlIiwgImRlZmF1bHRLZXlUeXBlIiwgImRlZmF1bHRTdHJpbmdUeXBlIiwgInQiLCAiY3JlYXRlU3RyaW5naWZ5Q29udGV4dCIsICJkb2MiLCAib3B0aW9ucyIsICJvcHQiLCAic3RyaW5naWZ5Q29tbWVudCIsICJpbkZsb3ciLCAiZ2V0VGFnT2JqZWN0IiwgInRhZ3MiLCAiaXRlbSIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJtYXRjaCIsICJ0IiwgInRhZ09iaiIsICJvYmoiLCAiaXNTY2FsYXIiLCAidGVzdE1hdGNoIiwgIm5hbWUiLCAic3RyaW5naWZ5UHJvcHMiLCAibm9kZSIsICJhbmNob3JzIiwgInByb3BzIiwgImFuY2hvciIsICJpc0NvbGxlY3Rpb24iLCAiYW5jaG9ySXNWYWxpZCIsICJ0YWciLCAic3RyaW5naWZ5IiwgImN0eCIsICJvbkNvbW1lbnQiLCAib25DaG9tcEtlZXAiLCAiaXNQYWlyIiwgImlzQWxpYXMiLCAiaXNOb2RlIiwgIm8iLCAic3RyIiwgInN0cmluZ2lmeVN0cmluZyIsICJzdHJpbmdpZnlQYWlyIiwgImtleSIsICJ2YWx1ZSIsICJjdHgiLCAib25Db21tZW50IiwgIm9uQ2hvbXBLZWVwIiwgIl9hIiwgIl9iIiwgImFsbE51bGxWYWx1ZXMiLCAiZG9jIiwgImluZGVudCIsICJpbmRlbnRTdGVwIiwgImNvbW1lbnRTdHJpbmciLCAiaW5kZW50U2VxIiwgInNpbXBsZUtleXMiLCAia2V5Q29tbWVudCIsICJpc05vZGUiLCAiaXNDb2xsZWN0aW9uIiwgIm1zZyIsICJleHBsaWNpdEtleSIsICJpc1NjYWxhciIsICJTY2FsYXIiLCAia2V5Q29tbWVudERvbmUiLCAiY2hvbXBLZWVwIiwgInN0ciIsICJzdHJpbmdpZnkiLCAibGluZUNvbW1lbnQiLCAidnNiIiwgInZjYiIsICJ2YWx1ZUNvbW1lbnQiLCAiaXNTZXEiLCAidmFsdWVDb21tZW50RG9uZSIsICJ2YWx1ZVN0ciIsICJ3cyIsICJjcyIsICJpbmRlbnRDb21tZW50IiwgInZzMCIsICJubDAiLCAiaGFzTmV3bGluZSIsICJmbG93IiwgImhhc1Byb3BzTGluZSIsICJzcDAiLCAid2FybiIsICJsb2dMZXZlbCIsICJ3YXJuaW5nIiwgIk1FUkdFX0tFWSIsICJtZXJnZSIsICJ2YWx1ZSIsICJTY2FsYXIiLCAiYWRkTWVyZ2VUb0pTTWFwIiwgImlzTWVyZ2VLZXkiLCAiY3R4IiwgImtleSIsICJpc1NjYWxhciIsICJ0YWciLCAibWFwIiwgImlzQWxpYXMiLCAiaXNTZXEiLCAiaXQiLCAibWVyZ2VWYWx1ZSIsICJzb3VyY2UiLCAiaXNNYXAiLCAic3JjTWFwIiwgImFkZFBhaXJUb0pTTWFwIiwgImN0eCIsICJtYXAiLCAia2V5IiwgInZhbHVlIiwgImlzTm9kZSIsICJpc01lcmdlS2V5IiwgImFkZE1lcmdlVG9KU01hcCIsICJqc0tleSIsICJ0b0pTIiwgInN0cmluZ0tleSIsICJzdHJpbmdpZnlLZXkiLCAianNWYWx1ZSIsICJzdHJDdHgiLCAiY3JlYXRlU3RyaW5naWZ5Q29udGV4dCIsICJub2RlIiwgInN0cktleSIsICJqc29uU3RyIiwgIndhcm4iLCAiY3JlYXRlUGFpciIsICJrZXkiLCAidmFsdWUiLCAiY3R4IiwgImsiLCAiY3JlYXRlTm9kZSIsICJ2IiwgIlBhaXIiLCAiX1BhaXIiLCAiTk9ERV9UWVBFIiwgIlBBSVIiLCAic2NoZW1hIiwgImlzTm9kZSIsICJfIiwgInBhaXIiLCAiYWRkUGFpclRvSlNNYXAiLCAib25Db21tZW50IiwgIm9uQ2hvbXBLZWVwIiwgInN0cmluZ2lmeVBhaXIiLCAic3RyaW5naWZ5Q29sbGVjdGlvbiIsICJjb2xsZWN0aW9uIiwgImN0eCIsICJvcHRpb25zIiwgIl9hIiwgInN0cmluZ2lmeUZsb3dDb2xsZWN0aW9uIiwgInN0cmluZ2lmeUJsb2NrQ29sbGVjdGlvbiIsICJjb21tZW50IiwgIml0ZW1zIiwgImJsb2NrSXRlbVByZWZpeCIsICJmbG93Q2hhcnMiLCAiaXRlbUluZGVudCIsICJvbkNob21wS2VlcCIsICJvbkNvbW1lbnQiLCAiaW5kZW50IiwgImNvbW1lbnRTdHJpbmciLCAiaXRlbUN0eCIsICJjaG9tcEtlZXAiLCAibGluZXMiLCAiaSIsICJpdGVtIiwgImlzTm9kZSIsICJhZGRDb21tZW50QmVmb3JlIiwgImlzUGFpciIsICJpayIsICJzdHIiLCAic3RyaW5naWZ5IiwgImxpbmVDb21tZW50IiwgImxpbmUiLCAiaW5kZW50Q29tbWVudCIsICJpbmRlbnRTdGVwIiwgImZjUGFkZGluZyIsICJyZXFOZXdsaW5lIiwgImxpbmVzQXRWYWx1ZSIsICJpdiIsICJzdGFydCIsICJlbmQiLCAibGVuIiwgInN1bSIsICJpYyIsICJmaW5kUGFpciIsICJpdGVtcyIsICJrZXkiLCAiayIsICJpc1NjYWxhciIsICJpdCIsICJpc1BhaXIiLCAiWUFNTE1hcCIsICJDb2xsZWN0aW9uIiwgInNjaGVtYSIsICJNQVAiLCAib2JqIiwgImN0eCIsICJrZWVwVW5kZWZpbmVkIiwgInJlcGxhY2VyIiwgIm1hcCIsICJhZGQiLCAidmFsdWUiLCAiY3JlYXRlUGFpciIsICJwYWlyIiwgIm92ZXJ3cml0ZSIsICJfYSIsICJfcGFpciIsICJQYWlyIiwgInByZXYiLCAic29ydEVudHJpZXMiLCAiaXNTY2FsYXJWYWx1ZSIsICJpIiwgIml0ZW0iLCAia2VlcFNjYWxhciIsICJub2RlIiwgIl8iLCAiVHlwZSIsICJhZGRQYWlyVG9KU01hcCIsICJvbkNvbW1lbnQiLCAib25DaG9tcEtlZXAiLCAic3RyaW5naWZ5Q29sbGVjdGlvbiIsICJtYXAiLCAiWUFNTE1hcCIsICJvbkVycm9yIiwgImlzTWFwIiwgInNjaGVtYSIsICJvYmoiLCAiY3R4IiwgIllBTUxTZXEiLCAiQ29sbGVjdGlvbiIsICJzY2hlbWEiLCAiU0VRIiwgInZhbHVlIiwgImtleSIsICJpZHgiLCAiYXNJdGVtSW5kZXgiLCAia2VlcFNjYWxhciIsICJpdCIsICJpc1NjYWxhciIsICJwcmV2IiwgImlzU2NhbGFyVmFsdWUiLCAiXyIsICJjdHgiLCAic2VxIiwgImkiLCAiaXRlbSIsICJ0b0pTIiwgIm9uQ29tbWVudCIsICJvbkNob21wS2VlcCIsICJzdHJpbmdpZnlDb2xsZWN0aW9uIiwgIm9iaiIsICJyZXBsYWNlciIsICJjcmVhdGVOb2RlIiwgInNlcSIsICJZQU1MU2VxIiwgIm9uRXJyb3IiLCAiaXNTZXEiLCAic2NoZW1hIiwgIm9iaiIsICJjdHgiLCAic3RyaW5nIiwgInZhbHVlIiwgInN0ciIsICJpdGVtIiwgImN0eCIsICJvbkNvbW1lbnQiLCAib25DaG9tcEtlZXAiLCAic3RyaW5naWZ5U3RyaW5nIiwgIm51bGxUYWciLCAidmFsdWUiLCAiU2NhbGFyIiwgInNvdXJjZSIsICJjdHgiLCAiYm9vbFRhZyIsICJ2YWx1ZSIsICJzdHIiLCAiU2NhbGFyIiwgInNvdXJjZSIsICJjdHgiLCAic3YiLCAic3RyaW5naWZ5TnVtYmVyIiwgImZvcm1hdCIsICJtaW5GcmFjdGlvbkRpZ2l0cyIsICJ0YWciLCAidmFsdWUiLCAibnVtIiwgIm4iLCAiaSIsICJkIiwgImZsb2F0TmFOIiwgInZhbHVlIiwgInN0ciIsICJzdHJpbmdpZnlOdW1iZXIiLCAiZmxvYXRFeHAiLCAibm9kZSIsICJudW0iLCAiZmxvYXQiLCAiU2NhbGFyIiwgImRvdCIsICJpbnRJZGVudGlmeSIsICJ2YWx1ZSIsICJpbnRSZXNvbHZlIiwgInN0ciIsICJvZmZzZXQiLCAicmFkaXgiLCAiaW50QXNCaWdJbnQiLCAiaW50U3RyaW5naWZ5IiwgIm5vZGUiLCAicHJlZml4IiwgInN0cmluZ2lmeU51bWJlciIsICJpbnRPY3QiLCAiX29uRXJyb3IiLCAib3B0IiwgImludCIsICJpbnRIZXgiLCAic2NoZW1hIiwgIm1hcCIsICJzZXEiLCAic3RyaW5nIiwgIm51bGxUYWciLCAiYm9vbFRhZyIsICJpbnRPY3QiLCAiaW50IiwgImludEhleCIsICJmbG9hdE5hTiIsICJmbG9hdEV4cCIsICJmbG9hdCIsICJpbnRJZGVudGlmeSIsICJ2YWx1ZSIsICJzdHJpbmdpZnlKU09OIiwgImpzb25TY2FsYXJzIiwgInN0ciIsICJTY2FsYXIiLCAiX29uRXJyb3IiLCAiaW50QXNCaWdJbnQiLCAianNvbkVycm9yIiwgIm9uRXJyb3IiLCAic2NoZW1hIiwgIm1hcCIsICJzZXEiLCAiYmluYXJ5IiwgInZhbHVlIiwgInNyYyIsICJvbkVycm9yIiwgInN0ciIsICJidWZmZXIiLCAiaSIsICJjb21tZW50IiwgInR5cGUiLCAiY3R4IiwgIm9uQ29tbWVudCIsICJvbkNob21wS2VlcCIsICJidWYiLCAicyIsICJTY2FsYXIiLCAibGluZVdpZHRoIiwgIm4iLCAibGluZXMiLCAibyIsICJzdHJpbmdpZnlTdHJpbmciLCAicmVzb2x2ZVBhaXJzIiwgInNlcSIsICJvbkVycm9yIiwgIl9hIiwgImlzU2VxIiwgImkiLCAiaXRlbSIsICJpc1BhaXIiLCAiaXNNYXAiLCAicGFpciIsICJQYWlyIiwgIlNjYWxhciIsICJjbiIsICJjcmVhdGVQYWlycyIsICJzY2hlbWEiLCAiaXRlcmFibGUiLCAiY3R4IiwgInJlcGxhY2VyIiwgInBhaXJzIiwgIllBTUxTZXEiLCAiaXQiLCAia2V5IiwgInZhbHVlIiwgImtleXMiLCAiY3JlYXRlUGFpciIsICJZQU1MT01hcCIsICJfWUFNTE9NYXAiLCAiWUFNTFNlcSIsICJZQU1MTWFwIiwgIl8iLCAiY3R4IiwgIm1hcCIsICJwYWlyIiwgImtleSIsICJ2YWx1ZSIsICJpc1BhaXIiLCAidG9KUyIsICJzY2hlbWEiLCAiaXRlcmFibGUiLCAicGFpcnMiLCAiY3JlYXRlUGFpcnMiLCAib21hcCIsICJzZXEiLCAib25FcnJvciIsICJyZXNvbHZlUGFpcnMiLCAic2VlbktleXMiLCAiaXNTY2FsYXIiLCAiYm9vbFN0cmluZ2lmeSIsICJ2YWx1ZSIsICJzb3VyY2UiLCAiY3R4IiwgInRydWVUYWciLCAiZmFsc2VUYWciLCAiU2NhbGFyIiwgImZsb2F0TmFOIiwgInZhbHVlIiwgInN0ciIsICJzdHJpbmdpZnlOdW1iZXIiLCAiZmxvYXRFeHAiLCAibm9kZSIsICJudW0iLCAiZmxvYXQiLCAiU2NhbGFyIiwgImRvdCIsICJmIiwgImludElkZW50aWZ5IiwgInZhbHVlIiwgImludFJlc29sdmUiLCAic3RyIiwgIm9mZnNldCIsICJyYWRpeCIsICJpbnRBc0JpZ0ludCIsICJzaWduIiwgIm4iLCAiaW50U3RyaW5naWZ5IiwgIm5vZGUiLCAicHJlZml4IiwgInN0cmluZ2lmeU51bWJlciIsICJpbnRCaW4iLCAiX29uRXJyb3IiLCAib3B0IiwgImludE9jdCIsICJpbnQiLCAiaW50SGV4IiwgIllBTUxTZXQiLCAiX1lBTUxTZXQiLCAiWUFNTE1hcCIsICJzY2hlbWEiLCAia2V5IiwgInBhaXIiLCAiaXNQYWlyIiwgIlBhaXIiLCAiZmluZFBhaXIiLCAia2VlcFBhaXIiLCAiaXNTY2FsYXIiLCAidmFsdWUiLCAicHJldiIsICJfIiwgImN0eCIsICJvbkNvbW1lbnQiLCAib25DaG9tcEtlZXAiLCAiaXRlcmFibGUiLCAicmVwbGFjZXIiLCAic2V0IiwgImNyZWF0ZVBhaXIiLCAibWFwIiwgIm9uRXJyb3IiLCAiaXNNYXAiLCAicGFyc2VTZXhhZ2VzaW1hbCIsICJzdHIiLCAiYXNCaWdJbnQiLCAic2lnbiIsICJwYXJ0cyIsICJudW0iLCAibiIsICJyZXMiLCAicCIsICJzdHJpbmdpZnlTZXhhZ2VzaW1hbCIsICJub2RlIiwgInZhbHVlIiwgInN0cmluZ2lmeU51bWJlciIsICJfNjAiLCAiaW50VGltZSIsICJfb25FcnJvciIsICJpbnRBc0JpZ0ludCIsICJmbG9hdFRpbWUiLCAidGltZXN0YW1wIiwgIm1hdGNoIiwgInllYXIiLCAibW9udGgiLCAiZGF5IiwgImhvdXIiLCAibWludXRlIiwgInNlY29uZCIsICJtaWxsaXNlYyIsICJkYXRlIiwgInR6IiwgInNjaGVtYSIsICJtYXAiLCAic2VxIiwgInN0cmluZyIsICJudWxsVGFnIiwgInRydWVUYWciLCAiZmFsc2VUYWciLCAiaW50QmluIiwgImludE9jdCIsICJpbnQiLCAiaW50SGV4IiwgImZsb2F0TmFOIiwgImZsb2F0RXhwIiwgImZsb2F0IiwgImJpbmFyeSIsICJtZXJnZSIsICJvbWFwIiwgInBhaXJzIiwgInNldCIsICJpbnRUaW1lIiwgImZsb2F0VGltZSIsICJ0aW1lc3RhbXAiLCAic2NoZW1hcyIsICJzY2hlbWEiLCAibWFwIiwgInNlcSIsICJzdHJpbmciLCAidGFnc0J5TmFtZSIsICJiaW5hcnkiLCAiYm9vbFRhZyIsICJmbG9hdCIsICJmbG9hdEV4cCIsICJmbG9hdE5hTiIsICJmbG9hdFRpbWUiLCAiaW50IiwgImludEhleCIsICJpbnRPY3QiLCAiaW50VGltZSIsICJtZXJnZSIsICJudWxsVGFnIiwgIm9tYXAiLCAicGFpcnMiLCAic2V0IiwgInRpbWVzdGFtcCIsICJjb3JlS25vd25UYWdzIiwgImdldFRhZ3MiLCAiY3VzdG9tVGFncyIsICJzY2hlbWFOYW1lIiwgImFkZE1lcmdlVGFnIiwgInNjaGVtYVRhZ3MiLCAidGFncyIsICJrZXlzIiwgImtleSIsICJ0YWciLCAidGFnT2JqIiwgInRhZ05hbWUiLCAic29ydE1hcEVudHJpZXNCeUtleSIsICJhIiwgImIiLCAiU2NoZW1hIiwgIl9TY2hlbWEiLCAiY29tcGF0IiwgImN1c3RvbVRhZ3MiLCAibWVyZ2UiLCAicmVzb2x2ZUtub3duVGFncyIsICJzY2hlbWEiLCAic29ydE1hcEVudHJpZXMiLCAidG9TdHJpbmdEZWZhdWx0cyIsICJnZXRUYWdzIiwgImNvcmVLbm93blRhZ3MiLCAiTUFQIiwgIm1hcCIsICJTQ0FMQVIiLCAic3RyaW5nIiwgIlNFUSIsICJzZXEiLCAiY29weSIsICJzdHJpbmdpZnlEb2N1bWVudCIsICJkb2MiLCAib3B0aW9ucyIsICJfYSIsICJsaW5lcyIsICJoYXNEaXJlY3RpdmVzIiwgImRpciIsICJjdHgiLCAiY3JlYXRlU3RyaW5naWZ5Q29udGV4dCIsICJjb21tZW50U3RyaW5nIiwgImNzIiwgImluZGVudENvbW1lbnQiLCAiY2hvbXBLZWVwIiwgImNvbnRlbnRDb21tZW50IiwgImlzTm9kZSIsICJvbkNob21wS2VlcCIsICJib2R5IiwgInN0cmluZ2lmeSIsICJsaW5lQ29tbWVudCIsICJkYyIsICJEb2N1bWVudCIsICJfRG9jdW1lbnQiLCAidmFsdWUiLCAicmVwbGFjZXIiLCAib3B0aW9ucyIsICJOT0RFX1RZUEUiLCAiRE9DIiwgIl9yZXBsYWNlciIsICJvcHQiLCAidmVyc2lvbiIsICJEaXJlY3RpdmVzIiwgImNvcHkiLCAiaXNOb2RlIiwgImFzc2VydENvbGxlY3Rpb24iLCAicGF0aCIsICJub2RlIiwgIm5hbWUiLCAicHJldiIsICJhbmNob3JOYW1lcyIsICJmaW5kTmV3QW5jaG9yIiwgIkFsaWFzIiwgImtleVRvU3RyIiwgInYiLCAiYXNTdHIiLCAiYWxpYXNEdXBsaWNhdGVPYmplY3RzIiwgImFuY2hvclByZWZpeCIsICJmbG93IiwgImtlZXBVbmRlZmluZWQiLCAib25UYWdPYmoiLCAidGFnIiwgIm9uQW5jaG9yIiwgInNldEFuY2hvcnMiLCAic291cmNlT2JqZWN0cyIsICJjcmVhdGVOb2RlQW5jaG9ycyIsICJjdHgiLCAiY3JlYXRlTm9kZSIsICJpc0NvbGxlY3Rpb24iLCAia2V5IiwgImsiLCAiUGFpciIsICJpc0VtcHR5UGF0aCIsICJrZWVwU2NhbGFyIiwgImlzU2NhbGFyIiwgImNvbGxlY3Rpb25Gcm9tUGF0aCIsICJzdiIsICJTY2hlbWEiLCAianNvbiIsICJqc29uQXJnIiwgIm1hcEFzTWFwIiwgIm1heEFsaWFzQ291bnQiLCAicmV2aXZlciIsICJyZXMiLCAidG9KUyIsICJjb3VudCIsICJhcHBseVJldml2ZXIiLCAicyIsICJzdHJpbmdpZnlEb2N1bWVudCIsICJjb250ZW50cyIsICJZQU1MRXJyb3IiLCAibmFtZSIsICJwb3MiLCAiY29kZSIsICJtZXNzYWdlIiwgIllBTUxQYXJzZUVycm9yIiwgIllBTUxXYXJuaW5nIiwgInByZXR0aWZ5RXJyb3IiLCAic3JjIiwgImxjIiwgImVycm9yIiwgImxpbmUiLCAiY29sIiwgImNpIiwgImxpbmVTdHIiLCAidHJpbVN0YXJ0IiwgInByZXYiLCAiY291bnQiLCAiZW5kIiwgInBvaW50ZXIiLCAicmVzb2x2ZVByb3BzIiwgInRva2VucyIsICJmbG93IiwgImluZGljYXRvciIsICJuZXh0IiwgIm9mZnNldCIsICJvbkVycm9yIiwgInBhcmVudEluZGVudCIsICJzdGFydE9uTmV3bGluZSIsICJzcGFjZUJlZm9yZSIsICJhdE5ld2xpbmUiLCAiaGFzU3BhY2UiLCAiY29tbWVudCIsICJjb21tZW50U2VwIiwgImhhc05ld2xpbmUiLCAicmVxU3BhY2UiLCAidGFiIiwgImFuY2hvciIsICJ0YWciLCAibmV3bGluZUFmdGVyUHJvcCIsICJjb21tYSIsICJmb3VuZCIsICJzdGFydCIsICJ0b2tlbiIsICJjYiIsICJsYXN0IiwgImVuZCIsICJjb250YWluc05ld2xpbmUiLCAia2V5IiwgInN0IiwgIml0IiwgImZsb3dJbmRlbnRDaGVjayIsICJpbmRlbnQiLCAiZmMiLCAib25FcnJvciIsICJlbmQiLCAiY29udGFpbnNOZXdsaW5lIiwgIm1hcEluY2x1ZGVzIiwgImN0eCIsICJpdGVtcyIsICJzZWFyY2giLCAidW5pcXVlS2V5cyIsICJpc0VxdWFsIiwgImEiLCAiYiIsICJpc1NjYWxhciIsICJwYWlyIiwgInN0YXJ0Q29sTXNnIiwgInJlc29sdmVCbG9ja01hcCIsICJjb21wb3NlTm9kZSIsICJjb21wb3NlRW1wdHlOb2RlIiwgImN0eCIsICJibSIsICJvbkVycm9yIiwgInRhZyIsICJfYSIsICJfYiIsICJOb2RlQ2xhc3MiLCAiWUFNTE1hcCIsICJtYXAiLCAib2Zmc2V0IiwgImNvbW1lbnRFbmQiLCAiY29sbEl0ZW0iLCAic3RhcnQiLCAia2V5IiwgInNlcCIsICJ2YWx1ZSIsICJrZXlQcm9wcyIsICJyZXNvbHZlUHJvcHMiLCAiaW1wbGljaXRLZXkiLCAiY29udGFpbnNOZXdsaW5lIiwgImtleVN0YXJ0IiwgImtleU5vZGUiLCAiZmxvd0luZGVudENoZWNrIiwgIm1hcEluY2x1ZGVzIiwgInZhbHVlUHJvcHMiLCAidmFsdWVOb2RlIiwgInBhaXIiLCAiUGFpciIsICJyZXNvbHZlQmxvY2tTZXEiLCAiY29tcG9zZU5vZGUiLCAiY29tcG9zZUVtcHR5Tm9kZSIsICJjdHgiLCAiYnMiLCAib25FcnJvciIsICJ0YWciLCAiX2EiLCAiTm9kZUNsYXNzIiwgIllBTUxTZXEiLCAic2VxIiwgIm9mZnNldCIsICJjb21tZW50RW5kIiwgInN0YXJ0IiwgInZhbHVlIiwgInByb3BzIiwgInJlc29sdmVQcm9wcyIsICJub2RlIiwgImZsb3dJbmRlbnRDaGVjayIsICJyZXNvbHZlRW5kIiwgImVuZCIsICJvZmZzZXQiLCAicmVxU3BhY2UiLCAib25FcnJvciIsICJjb21tZW50IiwgImhhc1NwYWNlIiwgInNlcCIsICJ0b2tlbiIsICJzb3VyY2UiLCAidHlwZSIsICJjYiIsICJibG9ja01zZyIsICJpc0Jsb2NrIiwgInRva2VuIiwgInJlc29sdmVGbG93Q29sbGVjdGlvbiIsICJjb21wb3NlTm9kZSIsICJjb21wb3NlRW1wdHlOb2RlIiwgImN0eCIsICJmYyIsICJvbkVycm9yIiwgInRhZyIsICJfYSIsICJfYiIsICJpc01hcCIsICJmY05hbWUiLCAiTm9kZUNsYXNzIiwgIllBTUxNYXAiLCAiWUFNTFNlcSIsICJjb2xsIiwgImF0Um9vdCIsICJvZmZzZXQiLCAiaSIsICJjb2xsSXRlbSIsICJzdGFydCIsICJrZXkiLCAic2VwIiwgInZhbHVlIiwgInByb3BzIiwgInJlc29sdmVQcm9wcyIsICJjb250YWluc05ld2xpbmUiLCAicHJldkl0ZW1Db21tZW50IiwgImxvb3AiLCAic3QiLCAicHJldiIsICJpc1BhaXIiLCAidmFsdWVOb2RlIiwgImtleVN0YXJ0IiwgImtleU5vZGUiLCAidmFsdWVQcm9wcyIsICJwYWlyIiwgIlBhaXIiLCAibWFwIiwgIm1hcEluY2x1ZGVzIiwgImVuZFJhbmdlIiwgImV4cGVjdGVkRW5kIiwgImNlIiwgImVlIiwgImNlUG9zIiwgIm5hbWUiLCAibXNnIiwgImVuZCIsICJyZXNvbHZlRW5kIiwgInJlc29sdmVDb2xsZWN0aW9uIiwgIkNOIiwgImN0eCIsICJ0b2tlbiIsICJvbkVycm9yIiwgInRhZ05hbWUiLCAidGFnIiwgImNvbGwiLCAicmVzb2x2ZUJsb2NrTWFwIiwgInJlc29sdmVCbG9ja1NlcSIsICJyZXNvbHZlRmxvd0NvbGxlY3Rpb24iLCAiQ29sbCIsICJjb21wb3NlQ29sbGVjdGlvbiIsICJwcm9wcyIsICJfYSIsICJfYiIsICJ0YWdUb2tlbiIsICJtc2ciLCAiYW5jaG9yIiwgIm5sIiwgImxhc3RQcm9wIiwgImV4cFR5cGUiLCAiWUFNTE1hcCIsICJZQU1MU2VxIiwgInQiLCAia3QiLCAicmVzIiwgIm5vZGUiLCAiaXNOb2RlIiwgIlNjYWxhciIsICJyZXNvbHZlQmxvY2tTY2FsYXIiLCAiY3R4IiwgInNjYWxhciIsICJvbkVycm9yIiwgInN0YXJ0IiwgImhlYWRlciIsICJwYXJzZUJsb2NrU2NhbGFySGVhZGVyIiwgInR5cGUiLCAiU2NhbGFyIiwgImxpbmVzIiwgInNwbGl0TGluZXMiLCAiY2hvbXBTdGFydCIsICJpIiwgImNvbnRlbnQiLCAidmFsdWUiLCAiZW5kIiwgInRyaW1JbmRlbnQiLCAib2Zmc2V0IiwgImNvbnRlbnRTdGFydCIsICJpbmRlbnQiLCAic2VwIiwgInByZXZNb3JlSW5kZW50ZWQiLCAiY3JsZiIsICJtZXNzYWdlIiwgInByb3BzIiwgInN0cmljdCIsICJzb3VyY2UiLCAibW9kZSIsICJjaG9tcCIsICJlcnJvciIsICJjaCIsICJuIiwgImhhc1NwYWNlIiwgImNvbW1lbnQiLCAibGVuZ3RoIiwgInRva2VuIiwgInRzIiwgInNwbGl0IiwgImZpcnN0IiwgIm0iLCAicmVzb2x2ZUZsb3dTY2FsYXIiLCAic2NhbGFyIiwgInN0cmljdCIsICJvbkVycm9yIiwgIm9mZnNldCIsICJ0eXBlIiwgInNvdXJjZSIsICJlbmQiLCAiX3R5cGUiLCAidmFsdWUiLCAiX29uRXJyb3IiLCAicmVsIiwgImNvZGUiLCAibXNnIiwgIlNjYWxhciIsICJwbGFpblZhbHVlIiwgInNpbmdsZVF1b3RlZFZhbHVlIiwgImRvdWJsZVF1b3RlZFZhbHVlIiwgInZhbHVlRW5kIiwgInJlIiwgInJlc29sdmVFbmQiLCAiYmFkQ2hhciIsICJmb2xkTGluZXMiLCAiX2EiLCAiZmlyc3QiLCAibGluZSIsICJlIiwgIm1hdGNoIiwgInJlcyIsICJzZXAiLCAicG9zIiwgImxhc3QiLCAiaSIsICJjaCIsICJmb2xkIiwgImZvbGROZXdsaW5lIiwgIm5leHQiLCAiY2MiLCAiZXNjYXBlQ29kZXMiLCAibGVuZ3RoIiwgInBhcnNlQ2hhckNvZGUiLCAicmF3IiwgIndzU3RhcnQiLCAiY29tcG9zZVNjYWxhciIsICJjdHgiLCAidG9rZW4iLCAidGFnVG9rZW4iLCAib25FcnJvciIsICJ2YWx1ZSIsICJ0eXBlIiwgImNvbW1lbnQiLCAicmFuZ2UiLCAicmVzb2x2ZUJsb2NrU2NhbGFyIiwgInJlc29sdmVGbG93U2NhbGFyIiwgInRhZ05hbWUiLCAibXNnIiwgInRhZyIsICJTQ0FMQVIiLCAiZmluZFNjYWxhclRhZ0J5TmFtZSIsICJmaW5kU2NhbGFyVGFnQnlUZXN0IiwgInNjYWxhciIsICJyZXMiLCAiaXNTY2FsYXIiLCAiU2NhbGFyIiwgImVycm9yIiwgInNjaGVtYSIsICJfYSIsICJtYXRjaFdpdGhUZXN0IiwgImt0IiwgImF0S2V5IiwgImRpcmVjdGl2ZXMiLCAiY29tcGF0IiwgInRzIiwgImNzIiwgImVtcHR5U2NhbGFyUG9zaXRpb24iLCAib2Zmc2V0IiwgImJlZm9yZSIsICJwb3MiLCAiaSIsICJzdCIsICJDTiIsICJjb21wb3NlTm9kZSIsICJjb21wb3NlRW1wdHlOb2RlIiwgImN0eCIsICJ0b2tlbiIsICJwcm9wcyIsICJvbkVycm9yIiwgImF0S2V5IiwgInNwYWNlQmVmb3JlIiwgImNvbW1lbnQiLCAiYW5jaG9yIiwgInRhZyIsICJub2RlIiwgImlzU3JjVG9rZW4iLCAiY29tcG9zZUFsaWFzIiwgImNvbXBvc2VTY2FsYXIiLCAiY29tcG9zZUNvbGxlY3Rpb24iLCAibWVzc2FnZSIsICJpc1NjYWxhciIsICJvZmZzZXQiLCAiYmVmb3JlIiwgInBvcyIsICJlbmQiLCAiZW1wdHlTY2FsYXJQb3NpdGlvbiIsICJvcHRpb25zIiwgInNvdXJjZSIsICJhbGlhcyIsICJBbGlhcyIsICJ2YWx1ZUVuZCIsICJyZSIsICJyZXNvbHZlRW5kIiwgImNvbXBvc2VEb2MiLCAib3B0aW9ucyIsICJkaXJlY3RpdmVzIiwgIm9mZnNldCIsICJzdGFydCIsICJ2YWx1ZSIsICJlbmQiLCAib25FcnJvciIsICJvcHRzIiwgImRvYyIsICJEb2N1bWVudCIsICJjdHgiLCAicHJvcHMiLCAicmVzb2x2ZVByb3BzIiwgImNvbXBvc2VOb2RlIiwgImNvbXBvc2VFbXB0eU5vZGUiLCAiY29udGVudEVuZCIsICJyZSIsICJyZXNvbHZlRW5kIiwgImdldEVycm9yUG9zIiwgInNyYyIsICJvZmZzZXQiLCAic291cmNlIiwgInBhcnNlUHJlbHVkZSIsICJwcmVsdWRlIiwgIl9hIiwgImNvbW1lbnQiLCAiYXRDb21tZW50IiwgImFmdGVyRW1wdHlMaW5lIiwgIkNvbXBvc2VyIiwgIm9wdGlvbnMiLCAiY29kZSIsICJtZXNzYWdlIiwgIndhcm5pbmciLCAicG9zIiwgIllBTUxXYXJuaW5nIiwgIllBTUxQYXJzZUVycm9yIiwgIkRpcmVjdGl2ZXMiLCAiZG9jIiwgImFmdGVyRG9jIiwgImRjIiwgImlzQ29sbGVjdGlvbiIsICJpdCIsICJpc1BhaXIiLCAiY2IiLCAidG9rZW5zIiwgImZvcmNlRG9jIiwgImVuZE9mZnNldCIsICJ0b2tlbiIsICJfX3lpZWxkU3RhciIsICJjb21wb3NlRG9jIiwgIm1zZyIsICJlcnJvciIsICJlbmQiLCAicmVzb2x2ZUVuZCIsICJvcHRzIiwgIkRvY3VtZW50IiwgIkJSRUFLIiwgIlNLSVAiLCAiUkVNT1ZFIiwgInZpc2l0IiwgImNzdCIsICJ2aXNpdG9yIiwgIl92aXNpdCIsICJwYXRoIiwgIml0ZW0iLCAiZmllbGQiLCAiaW5kZXgiLCAidG9rIiwgInBhcmVudCIsICJjb2xsIiwgImN0cmwiLCAidG9rZW4iLCAiaSIsICJjaSIsICJCT00iLCAiRE9DVU1FTlQiLCAiRkxPV19FTkQiLCAiU0NBTEFSIiwgInRva2VuVHlwZSIsICJzb3VyY2UiLCAiQk9NIiwgIkRPQ1VNRU5UIiwgIkZMT1dfRU5EIiwgIlNDQUxBUiIsICJpc0VtcHR5IiwgImNoIiwgImhleERpZ2l0cyIsICJ0YWdDaGFycyIsICJmbG93SW5kaWNhdG9yQ2hhcnMiLCAiaW52YWxpZEFuY2hvckNoYXJzIiwgImlzTm90QW5jaG9yQ2hhciIsICJMZXhlciIsICJzb3VyY2UiLCAiaW5jb21wbGV0ZSIsICJfYSIsICJuZXh0IiwgIl9feWllbGRTdGFyIiwgImkiLCAibiIsICJvZmZzZXQiLCAiaW5kZW50IiwgImR0IiwgImVuZCIsICJzdGF0ZSIsICJsaW5lIiwgIkJPTSIsICJkaXJFbmQiLCAiY3MiLCAic3AiLCAiRE9DVU1FTlQiLCAicyIsICJjaDAiLCAiY2gxIiwgIm5sIiwgIkZMT1dfRU5EIiwgInF1b3RlIiwgInFiIiwgImxvb3AiLCAibGFzdENoYXIiLCAiU0NBTEFSIiwgImluRmxvdyIsICJhbGxvd0VtcHR5IiwgImFsbG93VGFicyIsICJ0ZXN0IiwgIkxpbmVDb3VudGVyIiwgIm9mZnNldCIsICJsb3ciLCAiaGlnaCIsICJtaWQiLCAic3RhcnQiLCAiaW5jbHVkZXNUb2tlbiIsICJsaXN0IiwgInR5cGUiLCAiaSIsICJmaW5kTm9uRW1wdHlJbmRleCIsICJpc0Zsb3dUb2tlbiIsICJ0b2tlbiIsICJnZXRQcmV2UHJvcHMiLCAicGFyZW50IiwgIl9hIiwgIml0IiwgImdldEZpcnN0S2V5U3RhcnRQcm9wcyIsICJwcmV2IiwgImxvb3AiLCAiZml4Rmxvd1NlcUl0ZW1zIiwgImZjIiwgIlBhcnNlciIsICJvbk5ld0xpbmUiLCAiTGV4ZXIiLCAic291cmNlIiwgImluY29tcGxldGUiLCAibGV4ZW1lIiwgIl9feWllbGRTdGFyIiwgInRva2VuVHlwZSIsICJtZXNzYWdlIiwgInRvcCIsICJuIiwgImVycm9yIiwgImxhc3QiLCAic3QiLCAiZG9jIiwgImJ2IiwgInNjYWxhciIsICJzdGFydCIsICJzZXAiLCAibWFwIiwgIm5sIiwgImVuZCIsICJhdE1hcEluZGVudCIsICJhdE5leHRJdGVtIiwgImtleSIsICJmcyIsICJzZXEiLCAiaW5kZW50IiwgImRvY0VuZCIsICJwYXJzZU9wdGlvbnMiLCAib3B0aW9ucyIsICJwcmV0dHlFcnJvcnMiLCAiTGluZUNvdW50ZXIiLCAicGFyc2VEb2N1bWVudCIsICJzb3VyY2UiLCAib3B0aW9ucyIsICJsaW5lQ291bnRlciIsICJwcmV0dHlFcnJvcnMiLCAicGFyc2VPcHRpb25zIiwgInBhcnNlciIsICJQYXJzZXIiLCAiY29tcG9zZXIiLCAiQ29tcG9zZXIiLCAiZG9jIiwgIl9kb2MiLCAiWUFNTFBhcnNlRXJyb3IiLCAicHJldHRpZnlFcnJvciIsICJwYXJzZSIsICJzcmMiLCAicmV2aXZlciIsICJfcmV2aXZlciIsICJ3YXJuaW5nIiwgIndhcm4iLCAiaW1wb3J0X3NvcnRlZF9idHJlZSIsICJQIiwgIkxpdGVyYWxzIiwgInRvU3RyaW5nIiwgImZpZWxkIiwgInNldHRpbmciLCAicmVjdXJzaXZlIiwgIndyYXBwZWQiLCAid3JhcFZhbHVlIiwgInJlc3VsdCIsICJmIiwgImUiLCAicmVuZGVyTWluaW1hbERhdGUiLCAicmVuZGVyTWluaW1hbER1cmF0aW9uIiwgInZhbCIsICJpc051bGwiLCAiaXNOdW1iZXIiLCAiaXNTdHJpbmciLCAiaXNCb29sZWFuIiwgImlzRHVyYXRpb24iLCAiaXNEYXRlIiwgImlzQXJyYXkiLCAiaXNMaW5rIiwgImlzRnVuY3Rpb24iLCAiaXNPYmplY3QiLCAibWFwTGVhdmVzIiwgImZ1bmMiLCAia2V5IiwgInZhbHVlIiwgImVxdWFscyIsICJmaXJzdCIsICJzZWNvbmQiLCAiY29tcGFyZSIsICJ2YWwxIiwgInZhbDIiLCAibGlua05vcm1hbGl6ZXIiLCAiX2EiLCAiX2IiLCAid3JhcDEiLCAid3JhcDIiLCAibGluazEiLCAibGluazIiLCAibm9ybWFsaXplIiwgIngiLCAicGF0aENvbXBhcmUiLCAidHlwZUNvbXBhcmUiLCAiZjEiLCAiZjIiLCAiaW5kZXgiLCAiY29tcCIsICJvMSIsICJvMiIsICJrMSIsICJrMiIsICJrZXlDb21wYXJlIiwgInR5cGVPZiIsICJpc1RydXRoeSIsICJkZWVwQ29weSIsICJ2IiwgIkRhdGVUaW1lIiwgIkR1cmF0aW9uIiwgIkxpbmsiLCAiR3JvdXBpbmdzIiwgImlzRWxlbWVudEdyb3VwIiwgImVudHJ5IiwgImlzR3JvdXBpbmciLCAiZWxlbWVudCIsICJpc0xlYWYiLCAiY291bnQiLCAiZWxlbWVudHMiLCAic3ViZ3JvdXAiLCAic2xpY2UiLCAic3RhcnQiLCAiZW5kIiwgInNlZW4iLCAiZ3JvdXAiLCAiZ3JvdXBTaXplIiwgImdyb3VwU3RhcnQiLCAiZ3JvdXBFbmQiLCAiU3VjY2VzcyIsICJfU3VjY2VzcyIsICJ2YWx1ZSIsICJmIiwgInN1Y2MiLCAiX2ZhaWwiLCAiX3ZhbHVlIiwgIl9tZXNzYWdlIiwgIkZhaWx1cmUiLCAiX0ZhaWx1cmUiLCAiZXJyb3IiLCAiX2YiLCAiX3N1Y2MiLCAiZmFpbCIsICJtZXNzYWdlIiwgIlJlc3VsdCIsICJzdWNjZXNzIiwgImZhaWx1cmUiLCAiZmxhdE1hcDIiLCAiZmlyc3QiLCAic2Vjb25kIiwgIm1hcDIiLCAiYSIsICJiIiwgIm1hcEFsbCIsICJpbnB1dCIsICJmdW5jIiwgInJlc3VsdCIsICJlbGVtZW50IiwgIm91dHB1dCIsICJ0cnlpbmciLCAiY2FsbCIsICJhc3luYyIsICJwcm9taXNlIiwgIkZpbHRlcnMiLCAiYXRvbSIsICJzZXQiLCAiY29uc3RhbnQiLCAidmFsdWUiLCAibnVsbGFibGVBdG9tIiwgIm5lZ2F0ZWQiLCAibmVnYXRlIiwgImZpbHRlciIsICJlbXB0eSIsICJyZXNvbHZlIiwgImV2ZXJ5dGhpbmciLCAic2V0SW50ZXJzZWN0TmVnYXRpb24iLCAiaW50ZXJzZWN0IiwgImVsZW1lbnRzIiwgImxhenlJbnRlcnNlY3QiLCAieCIsICJwcm9kdWNlIiwgImxhenlGYWlsYWJsZUludGVyc2VjdGlvbiIsICJSZXN1bHQiLCAiYXRvbXMiLCAibmVnYXRpb25zIiwgImVsZW1lbnQiLCAibWF5YmVGaWx0ZXIiLCAic2V0SW50ZXJzZWN0IiwgInNldFVuaW9uIiwgInVuaW9uIiwgImZpbHRlcnMiLCAibGF6eVVuaW9uIiwgImxhenlGYWlsYWJsZVVuaW9uIiwgInNldHMiLCAic29ydGVkIiwgImEiLCAiYiIsICJyZXN1bHQiLCAibGFyZ2VzdCIsICJFeHByZXNzaW9ucyIsICJ2YXJpYWJsZSIsICJuYW1lIiwgImxpdGVyYWwiLCAidmFsdWUiLCAiYmluYXJ5T3AiLCAibGVmdCIsICJvcCIsICJyaWdodCIsICJpbmRleCIsICJvYmoiLCAiaW5kZXhWYXJpYWJsZSIsICJwYXJ0cyIsICJyZXN1bHQiLCAibGFtYmRhIiwgImFyZ3MiLCAiZnVuYyIsICJsaXN0IiwgInZhbHVlcyIsICJvYmplY3QiLCAibmVnYXRlIiwgImNoaWxkIiwgImlzQ29tcGFyZU9wIiwgInVuYm91bmRWYXJpYWJsZXMiLCAiZXhwciIsICJib3VuZCIsICJMaXRlcmFscyIsICJGaWx0ZXJzIiwgImEiLCAibmV3Qm91bmQiLCAiYXJnIiwgInYiLCAidG9TdHJpbmciLCAiayIsICJ3cmFwcGVkIiwgIlBSSU1JVElWRVMiLCAiXyIsICJzdHIiLCAicSIsICJjaGFycyIsICJlc2NhcGVkIiwgInN0YXJ0IiwgInJlc3QiLCAiRU1PSklfUkVHRVgiLCAiZmlyc3QiLCAibGlua0lubmVyIiwgIkxpbmsiLCAicCIsICJsIiwgIl9zdHIiLCAieWVhciIsICJtb250aCIsICJEYXRlVGltZSIsICJEQVRFX1NIT1JUSEFORFMiLCAiYSIsICJiIiwgImNoYWluT3B0IiwgInltIiwgImRheSIsICJ5bWQiLCAiaG91ciIsICJ5bWRoIiwgIm1pbnV0ZSIsICJ5bWRobSIsICJzZWNvbmQiLCAieW1kaG1zIiwgIm1pbGxpc2Vjb25kIiwgImR0IiwgInBtIiwgImhyIiwgIl9hIiwgInpvbmUiLCAiX2IiLCAiZCIsICJEVVJBVElPTl9UWVBFUyIsICJjb3VudCIsICJ0IiwgIngiLCAiZHVyYXRpb25zIiwgImMiLCAibm9ybWFsaXplRHVyYXRpb24iLCAiZiIsICJfcyIsICJlbW9qaV9yZWdleF9kZWZhdWx0IiwgIkR1cmF0aW9uIiwgIkVYUFJFU1NJT04iLCAiRXhwcmVzc2lvbnMiLCAiY3JlYXRlRnVuY3Rpb24iLCAiX2Z1bmMiLCAiZGF0ZSIsICJkdXIiLCAibmFtZSIsICJfc2VwIiwgInZhbHVlIiwgInZhbHMiLCAicmVzIiwgImVudHJ5IiwgIm9iaiIsICJwb3N0Zml4ZXMiLCAicmVzdWx0IiwgInBvc3QiLCAiZmllbGQiLCAiaWRlbnQiLCAiX2lnbm9yZSIsICJleHByIiwgIl8yIiwgIl8zIiwgIl80IiwgIl8xIiwgImV4cHJzIiwgImNyZWF0ZUJpbmFyeVBhcnNlciIsICJRVUVSWSIsICJpZCIsICJmdW5jIiwgInBhdGgiLCAiY2hpbGRyZW4iLCAicGFyZW50cyIsICJsaW5rIiwgInNvdXJjZSIsICJsZWZ0IiwgIl9vcCIsICJyaWdodCIsICJjcmVhdGVCaW5hcnlQYXJzZXIiLCAiY2hpbGQiLCAic2VwIiwgImNvbWJpbmUiLCAiZmlyc3QiLCAicmVzdCIsICJub2RlIiwgImluZGV4IiwgImNyZWF0ZUZ1bmN0aW9uIiwgImZ1bmMiLCAiYXJncyIsICJyZWFsRnVuYyIsICJmIiwgImEiLCAiY2hhaW5PcHQiLCAiYmFzZSIsICJmdW5jcyIsICJfc3VjY2VzcyIsICJfZmFpbHVyZSIsICJpbnB1dCIsICJyZXN1bHQiLCAibmV4dCIsICJQIiwgIm1hcE9iamVjdFZhbHVlcyIsICJvYmplY3QiLCAiZnVuYyIsICJyZXN1bHQiLCAia2V5IiwgInZhbHVlIiwgIkpzb25Db252ZXJzaW9uIiwgImlucHV0IiwgImpzb24iLCAibGl0ZXJhbCIsICJ3cmFwcGVkIiwgIkxpdGVyYWxzIiwgIm1hcE9iamVjdFZhbHVlcyIsICJ2YWx1ZSIsICJub3JtYWxpemVyIiwgInYiLCAidHlwZSIsICJEYXRlVGltZSIsICJEdXJhdGlvbiIsICJMaW5rIiwgImpzb25JbmxpbmVGaWVsZCIsICJmaWVsZCIsICJKc29uQ29udmVyc2lvbiIsICJhc0lubGluZUZpZWxkIiwgImxvY2FsIiwgImxpbmVubyIsICJmIiwgInBhcnNlSW5saW5lVmFsdWUiLCAiSU5MSU5FX0ZJRUxEX1dSQVBQRVJTIiwgImZpbmRDbG9zaW5nIiwgImxpbmUiLCAic3RhcnQiLCAib3BlbiIsICJjbG9zZSIsICJuZXN0aW5nIiwgImVzY2FwZWQiLCAiaW5kZXgiLCAiY2hhciIsICJmaW5kU2VwYXJhdG9yIiwgInNlcCIsICJmaW5kU3BlY2lmaWNJbmxpbmVGaWVsZCIsICJrZXkiLCAidmFsdWUiLCAiaW5saW5lIiwgIlBSSU1JVElWRVMiLCAiZXh0cmFjdElubGluZUZpZWxkcyIsICJpbmNsdWRlVGFza0ZpZWxkcyIsICJmaWVsZHMiLCAid3JhcHBlciIsICJmb3VuZEluZGV4IiwgInBhcnNlZEZpZWxkIiwgImV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyIsICJhIiwgImIiLCAiZmlsdGVyZWRGaWVsZHMiLCAiaSIsICJGVUxMX0xJTkVfS0VZX1BBUlQiLCAiZW1vamlfcmVnZXhfZGVmYXVsdCIsICJwYXJ0cyIsICJGVUxMX0xJTkVfS0VZX1BBUlNFUiIsICJleHRyYWN0RnVsbExpbmVGaWVsZCIsICJ0ZXh0IiwgInJlYWxLZXkiLCAiQ1JFQVRFRF9EQVRFX1JFR0VYIiwgIkRVRV9EQVRFX1JFR0VYIiwgIkRPTkVfREFURV9SRUdFWCIsICJTQ0hFRFVMRURfREFURV9SRUdFWCIsICJTVEFSVF9EQVRFX1JFR0VYIiwgIkVNT0pJX1JFR0VYRVMiLCAicmVzdWx0cyIsICJyZWdleCIsICJtYXRjaCIsICJZYW1sQ29udmVyc2lvbiIsICJ5YW1sIiwgInZhbHVlIiwgIndyYXBwZWQiLCAiTGl0ZXJhbHMiLCAibGl0ZXJhbCIsICJtYXBPYmplY3RWYWx1ZXMiLCAicmVzdWx0IiwgImNoaWxkIiwgIkRhdGVUaW1lIiwgIm9iamVjdCIsICJrZXkiLCAiZGF0ZVBhcnNlIiwgIlBSSU1JVElWRVMiLCAiZHVyYXRpb25QYXJzZSIsICJsaW5rUGFyc2UiLCAiWUFNTF9EQVRBX1JFR0VYIiwgIkNPREVCTE9DS19GRU5DRV9SRUdFWCIsICJMSVNUX0lURU1fUkVHRVgiLCAibWFya2Rvd25JbXBvcnQiLCAicGF0aCIsICJtYXJrZG93biIsICJtZXRhZGF0YSIsICJzdGF0cyIsICJsaW5lcyIsICJwYWdlTWV0YWRhdGEiLCAiZnJvbnRtYXR0ZXIiLCAic2VjdGlvbnMiLCAibWFya2Rvd25Tb3VyY2VJbXBvcnQiLCAiUGFnZURhdGEiLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAiX2UiLCAiX2YiLCAiX2ciLCAiX2giLCAiX2kiLCAiX2oiLCAiX2siLCAiX2wiLCAiX20iLCAiX24iLCAiX28iLCAiX3AiLCAicGFyc2VGcm9udG1hdHRlckJsb2NrIiwgIm1hcmtkb3duTWV0YWRhdGEiLCAiTWV0YWRhdGEiLCAic2VjdGlvbkFycmF5IiwgIm1ldGFoZWFkaW5ncyIsICJhIiwgImIiLCAiQlRyZWUiLCAiaW5kZXgiLCAiZW50cnkiLCAic3RhcnQiLCAiZW5kIiwgInNlY3Rpb24iLCAiU2VjdGlvbkRhdGEiLCAiZW1wdHlsaW5lcyIsICJnZXRGaWxlVGl0bGUiLCAiZmlyc3QiLCAiYmxvY2tzIiwgImJsb2NrT3JkaW5hbCIsICJibG9jayIsICJzdGFydExpbmUiLCAiTGlzdEJsb2NrRGF0YSIsICJ5YW1sIiwgInNwbGl0IiwgInBhcnNlIiwgIkRhdGFibG9ja0RhdGEiLCAibWF0Y2giLCAiQ29kZWJsb2NrRGF0YSIsICJsYW5ndWFnZXMiLCAiQmFzZUJsb2NrRGF0YSIsICJsb29rdXAiLCAiY29udGVudFJlZ2V4IiwgIm1hcmtlclJlZ2V4IiwgImxpc3RJdGVtcyIsICJsaXN0IiwgInN5bWJvbCIsICJ0ZXh0IiwgIml0ZW0iLCAiTGlzdEl0ZW1EYXRhIiwgImxpc3RCbG9jayIsICJ0YWdkZWYiLCAidGFnIiwgImxpbmUiLCAicmF3dGFnIiwgImV4dHJhY3RUYWdzIiwgImxpbmtkZWYiLCAibGluayIsICJMaW5rIiwgImZpZWxkIiwgIml0ZXJhdGVJbmxpbmVGaWVsZHMiLCAiY29udGVudCIsICJsaW5lbm8iLCAiaW5saW5lRmllbGRzIiwgImV4dHJhY3RJbmxpbmVGaWVsZHMiLCAiaWZpZWxkIiwgImFzSW5saW5lRmllbGQiLCAiZnVsbExpbmUiLCAiZXh0cmFjdEZ1bGxMaW5lRmllbGQiLCAicmVzdWx0IiwgImtleSIsICJ2YWx1ZSIsICJKc29uQ29udmVyc2lvbiIsICJZYW1sQ29udmVyc2lvbiIsICJ0cmVlIiwgInRhcmdldCIsICJrIiwgInNwbGl0RnJvbnRtYXR0ZXJUYWdPckFsaWFzIiwgInAiLCAiYyIsICJzdHIiLCAiZGF0YSIsICJvbiIsICJzIiwgInYiLCAibG93ZXIiLCAibWFwT2JqZWN0VmFsdWVzIiwgImpzb25JbmxpbmVGaWVsZCIsICJsZW5ndGgiLCAiZ2V0RXh0ZW5zaW9uIiwgIngiLCAidGl0bGUiLCAibGV2ZWwiLCAib3JkaW5hbCIsICJibG9ja0lkIiwgInN0eWxlIiwgImNvbnRlbnRTdGFydCIsICJjb250ZW50RW5kIiwgInR5cGUiLCAicGFyZW50TGluZSIsICJzdGF0dXMiLCAiZWxlbWVudCIsICJjYW52YXNJbXBvcnQiLCAicGF0aCIsICJzb3VyY2UiLCAiaW5kZXgiLCAic3RhdHMiLCAiX2EiLCAiY2FudmFzIiwgIkNhbnZhc0RhdGEiLCAicGFyc2VkIiwgImMiLCAiZnJvbnRtYXR0ZXIiLCAibWV0YWRhdGEiLCAibGluZXMiLCAic2VjdGlvbnMiLCAibWFya2Rvd25Tb3VyY2VJbXBvcnQiLCAiY2FyZCIsICJDYW52YXNDYXJkRGF0YSIsICJpIiwgInRhZyIsICJsaW5rIiwgImZpZWxkIiwgIml0ZXJhdGVJbmxpbmVGaWVsZHMiLCAiQWJzdHJhY3RDYW52YXNDYXJkRGF0YSIsICJpZCIsICJub2RlSnNvbiIsICJNZXRhZGF0YSIsICJMaW5rIiwgInNlY3Rpb24iLCAiX19zcHJlYWRQcm9wcyIsICJfX3NwcmVhZFZhbHVlcyIsICJ4IiwgImQiLCAiZXZlbnQiLCAibWVzc2FnZSIsICJtYXJrZG93biIsICJtYXJrZG93bkltcG9ydCIsICJjYW52YXMiLCAiY2FudmFzSW1wb3J0IiwgImVycm9yIl0KfQo=\n'); } // src/index/web-worker/importer.ts @@ -50452,8 +52880,7 @@ var FileImporter = class extends import_obsidian6.Component { */ import(file) { let existing = this.outstanding.get(file.path); - if (existing) - return existing; + if (existing) return existing; let promise = deferred(); this.outstanding.set(file.path, promise); this.queue.enqueue([file, promise]); @@ -50468,11 +52895,9 @@ var FileImporter = class extends import_obsidian6.Component { } /** Poll from the queue and execute if there is an available worker. */ async schedule() { - if (this.queue.size() == 0 || this.shutdown) - return; + if (this.queue.size() == 0 || this.shutdown) return; const worker = this.availableWorker(); - if (!worker) - return; + if (!worker) return; const [file, promise] = this.queue.dequeue(); worker.active = [file, promise, Date.now()]; try { @@ -50513,10 +52938,8 @@ var FileImporter = class extends import_obsidian6.Component { return; } const [file, promise, start] = worker.active; - if ("$error" in data) - promise.reject(data["$error"]); - else - promise.resolve(data); + if ("$error" in data) promise.reject(data["$error"]); + else promise.resolve(data); this.outstanding.delete(file.path); if (this.workers.size > this.throttle().workers) { this.workers.delete(worker.id); @@ -50574,8 +52997,7 @@ var FileImporter = class extends import_obsidian6.Component { }; function terminate(worker) { worker.worker.terminate(); - if (worker.active) - worker.active[1].reject("Terminated"); + if (worker.active) worker.active[1].reject("Terminated"); worker.active = void 0; } @@ -50583,7 +53005,7 @@ function terminate(worker) { var import_obsidian8 = require("obsidian"); // src/index/types/files.ts -var _GenericFile = class { +var _GenericFile = class _GenericFile { constructor(path, ctime, mtime, size2) { this.$types = _GenericFile.TYPES; this.$typename = "File"; @@ -50619,9 +53041,9 @@ var _GenericFile = class { return Link.file(this.$path); } }; +_GenericFile.TYPES = [FILE_TYPE, FIELDBEARING_TYPE, LINKABLE_TYPE]; +_GenericFile.FIELD_DEF = Extractors.intrinsics(); var GenericFile = _GenericFile; -GenericFile.TYPES = [FILE_TYPE, FIELDBEARING_TYPE, LINKABLE_TYPE]; -GenericFile.FIELD_DEF = Extractors.intrinsics(); // src/index/embed-queue.ts var import_queue2 = __toESM(require_queue2()); @@ -50642,8 +53064,7 @@ var EmbedQueue = class extends import_obsidian7.Component { } /** Read a file asynchronously, controlling concurrency to prevent too many files being loaded simultaneously. */ async read(file) { - if (this.shutdown) - return Promise.reject("Embed queue is shutdown."); + if (this.shutdown) return Promise.reject("Embed queue is shutdown."); const promise = deferred(); if (!this.promises.has(file.path)) { this.queue.push(file); @@ -50688,7 +53109,7 @@ var EmbedQueue = class extends import_obsidian7.Component { }; // src/index/types/canvas.ts -var _Canvas = class { +var _Canvas = class _Canvas { constructor(init) { this.$types = _Canvas.TYPES; this.$typename = "Canvas"; @@ -50750,12 +53171,12 @@ var _Canvas = class { }); } }; -var Canvas = _Canvas; -Canvas.TYPES = [FILE_TYPE, "canvas", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE]; -Canvas.FIELD_DEF = Extractors.merge( +_Canvas.TYPES = [FILE_TYPE, "canvas", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE]; +_Canvas.FIELD_DEF = Extractors.merge( Extractors.inlineFields((f4) => f4.$infields), Extractors.intrinsics() ); +var Canvas = _Canvas; var BaseCanvasCard = class { constructor(init) { Object.assign(this, init); @@ -50775,7 +53196,7 @@ var BaseCanvasCard = class { }; } }; -var _CanvasTextCard = class extends BaseCanvasCard { +var _CanvasTextCard = class _CanvasTextCard extends BaseCanvasCard { constructor(init) { super(init); this.$types = _CanvasTextCard.TYPES; @@ -50795,7 +53216,7 @@ var _CanvasTextCard = class extends BaseCanvasCard { $links: this.$links, $tags: this.$tags, $type: "text-card", - $sections: this.$sections.map((a3) => a3.json()) + $sections: this.$sections.map((a4) => a4.json()) }); } static from(raw, file, normalizer = NOOP_NORMALIZER) { @@ -50813,14 +53234,14 @@ var _CanvasTextCard = class extends BaseCanvasCard { }); } }; -var CanvasTextCard = _CanvasTextCard; -CanvasTextCard.TYPES = ["canvas-card", "markdown", "canvas-text-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE]; -CanvasTextCard.FIELD_DEF = Extractors.merge( +_CanvasTextCard.TYPES = ["canvas-card", "markdown", "canvas-text-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE]; +_CanvasTextCard.FIELD_DEF = Extractors.merge( Extractors.intrinsics(), Extractors.inlineFields((f4) => f4.$infields), Extractors.frontmatter((f4) => f4.$frontmatter) ); -var _CanvasFileCard = class extends BaseCanvasCard { +var CanvasTextCard = _CanvasTextCard; +var _CanvasFileCard = class _CanvasFileCard extends BaseCanvasCard { constructor(init) { super(init); this.$types = CanvasTextCard.TYPES; @@ -50843,9 +53264,9 @@ var _CanvasFileCard = class extends BaseCanvasCard { }); } }; +_CanvasFileCard.TYPES = ["canvas-card", "markdown", "canvas-file-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE]; var CanvasFileCard = _CanvasFileCard; -CanvasFileCard.TYPES = ["canvas-card", "markdown", "canvas-file-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE]; -var _CanvasWebCard = class extends BaseCanvasCard { +var _CanvasWebCard = class _CanvasWebCard extends BaseCanvasCard { constructor(init) { super(init); this.$types = CanvasTextCard.TYPES; @@ -50868,8 +53289,8 @@ var _CanvasWebCard = class extends BaseCanvasCard { }); } }; +_CanvasWebCard.TYPES = ["canvas-card", "markdown", "canvas-web-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE]; var CanvasWebCard = _CanvasWebCard; -CanvasWebCard.TYPES = ["canvas-card", "markdown", "canvas-web-card", TAGGABLE_TYPE, LINKABLE_TYPE, FIELDBEARING_TYPE]; // src/index/datacore.ts var Datacore = class extends import_obsidian8.Component { @@ -50904,19 +53325,15 @@ var Datacore = class extends import_obsidian8.Component { this.registerEvent(this.vault.on("rename", this.rename, this)); this.registerEvent( this.vault.on("create", (file) => { - if (!(file instanceof import_obsidian8.TFile)) - return; - if (INDEXABLE_EXTENSIONS.has(file.extension.toLowerCase())) - return; + if (!(file instanceof import_obsidian8.TFile)) return; + if (INDEXABLE_EXTENSIONS.has(file.extension.toLowerCase())) return; this.reload(file); }) ); this.registerEvent( this.vault.on("modify", (file) => { - if (!(file instanceof import_obsidian8.TFile)) - return; - if (INDEXABLE_EXTENSIONS.has(file.extension.toLowerCase())) - return; + if (!(file instanceof import_obsidian8.TFile)) return; + if (INDEXABLE_EXTENSIONS.has(file.extension.toLowerCase())) return; this.reload(file); }) ); @@ -50980,10 +53397,8 @@ var Datacore = class extends import_obsidian8.Component { } else if (result.type === "markdown") { const parsed = MarkdownPage.from(result.result, (link) => { const rpath = this.metadataCache.getFirstLinkpathDest(link.path, result.result.$path); - if (rpath) - return link.withPath(rpath.path); - else - return link; + if (rpath) return link.withPath(rpath.path); + else return link; }); this.storeMarkdown(parsed); this.persister.storeFile(parsed.$path, parsed.json()); @@ -50992,10 +53407,8 @@ var Datacore = class extends import_obsidian8.Component { } else if (result.type === "canvas") { const parsed = Canvas.from(result.result, (link) => { const rpath = this.metadataCache.getFirstLinkpathDest(link.path, result.result.$path); - if (rpath) - return link.withPath(rpath.path); - else - return link; + if (rpath) return link.withPath(rpath.path); + else return link; }); this.storeCanvas(parsed); this.persister.storeFile(parsed.$path, parsed.json()); @@ -51049,7 +53462,7 @@ var Datacore = class extends import_obsidian8.Component { this.events.trigger(evt, ...args); } }; -var _DatacoreInitializer = class extends import_obsidian8.Component { +var _DatacoreInitializer = class _DatacoreInitializer extends import_obsidian8.Component { constructor(core) { super(); this.core = core; @@ -51082,12 +53495,12 @@ var _DatacoreInitializer = class extends import_obsidian8.Component { if (!this.active || this.current.length >= _DatacoreInitializer.BATCH_SIZE) { return; } - const next3 = this.queue.pop(); - if (next3) { - this.current.push(next3); - this.init(next3).then((result) => this.handleResult(next3, result)).catch((result) => this.handleResult(next3, result)); + const next2 = this.queue.pop(); + if (next2) { + this.current.push(next2); + this.init(next2).then((result) => this.handleResult(next2, result)).catch((result) => this.handleResult(next2, result)); this.runNext(); - } else if (!next3 && this.current.length == 0) { + } else if (!next2 && this.current.length == 0) { this.active = false; this.done.resolve({ durationMs: Date.now() - this.start, @@ -51102,12 +53515,9 @@ var _DatacoreInitializer = class extends import_obsidian8.Component { handleResult(file, result) { this.current.remove(file); this.initialized++; - if (result.status === "skipped") - this.skipped++; - else if (result.status === "imported") - this.imported++; - else if (result.status === "cached") - this.cached++; + if (result.status === "skipped") this.skipped++; + else if (result.status === "imported") this.imported++; + else if (result.status === "cached") this.cached++; this.runNext(); } /** Initialize a specific file. */ @@ -51129,9 +53539,9 @@ var _DatacoreInitializer = class extends import_obsidian8.Component { } } }; -var DatacoreInitializer = _DatacoreInitializer; /** Number of concurrent operations the initializer will perform. */ -DatacoreInitializer.BATCH_SIZE = 8; +_DatacoreInitializer.BATCH_SIZE = 8; +var DatacoreInitializer = _DatacoreInitializer; // src/main.ts var import_obsidian10 = require("obsidian"); @@ -51160,15 +53570,15 @@ var import_obsidian9 = require("obsidian"); var VIEW_TYPE_DATACOREJS = "datacorejs-view"; var CUSTOM_VIEW_CONTEXT = G(void 0); function DatacoreViewSettings() { - const view = P4(CUSTOM_VIEW_CONTEXT); - const setViewState = q2( - () => (0, import_obsidian9.debounce)((state2) => view.setState(state2, { history: false }), 500), + const view = x2(CUSTOM_VIEW_CONTEXT); + const setViewState = T2( + () => (0, import_obsidian9.debounce)((state) => view.setState(state, { history: false }), 500), [view] ); - const [localState, setLocalState] = p2(view.getState()); - const setState = x2( - (state2) => { - const finalState = { ...localState, ...state2 }; + const [localState, setLocalState] = h2(view.getState()); + const setState = q2( + (state) => { + const finalState = { ...localState, ...state }; setLocalState(finalState); setViewState(finalState); }, @@ -51229,9 +53639,9 @@ function CurrentFileSelector({ defaultValue, onChange: onChange3 }) { - const core = P4(DATACORE_CONTEXT); + const core = x2(DATACORE_CONTEXT); const revision = useIndexUpdates(core, { debounce: 2e3 }); - const options2 = q2(() => { + const options2 = T2(() => { return core.vault.getMarkdownFiles().map((f4) => ({ label: f4.path, value: f4.path })); }, [revision]); const defaultOption = defaultValue ? { label: "No file", value: void 0 } : { label: defaultValue, value: defaultValue }; @@ -51297,16 +53707,13 @@ var DatacoreQueryView = class extends import_obsidian9.ItemView { this.rerender(); } onunload() { - if (this.activeView) - this.removeChild(this.activeView); + if (this.activeView) this.removeChild(this.activeView); } /** Synchronizes the screen state to properly reflect the current internal state. */ rerender() { this.leaf.tabHeaderInnerTitleEl.textContent = this.titleEl.textContent = this.getDisplayText(); - if (this.activeViewType == this.internalState.view) - return; - if (this.activeView) - this.removeChild(this.activeView); + if (this.activeViewType == this.internalState.view) return; + if (this.activeView) this.removeChild(this.activeView); if (this.internalState.view === "settings") { this.activeViewType = "settings"; this.activeView = new ReactRenderer( @@ -51342,8 +53749,8 @@ var DatacoreQueryView = class extends import_obsidian9.ItemView { return this.internalState; } /** Update the state of this view with new metadata. Generally controlled by the settings pane. */ - async setState(state2, _result) { - this.internalState = state2; + async setState(state, _result) { + this.internalState = state; this.rerender(); } /** Swap the active view. */ @@ -51461,7 +53868,7 @@ var DatacorePlugin = class extends import_obsidian10.Plugin { } /** Render datacore indexing status using the index. */ mountIndexState(root, core) { - B(g(IndexStatusBar, { datacore: core }), root); + B(_(IndexStatusBar, { datacore: core }), root); this.register(() => B(null, root)); } }; @@ -51489,12 +53896,10 @@ var GeneralSettingsTab = class extends import_obsidian10.PluginSettingTab { "500": "500" }; const current = "" + this.plugin.settings.defaultPageSize; - if (!(current in OPTIONS)) - OPTIONS[current] = current; + if (!(current in OPTIONS)) OPTIONS[current] = current; dropdown.addOptions(OPTIONS).setValue(current).onChange(async (value) => { const parsed = parseFloat(value); - if (isNaN(parsed)) - return; + if (isNaN(parsed)) return; await this.plugin.updateSettings({ defaultPageSize: parsed | 0 }); }); }); @@ -51551,16 +53956,14 @@ var GeneralSettingsTab = class extends import_obsidian10.PluginSettingTab { new import_obsidian10.Setting(this.containerEl).setName("Importer Threads").setDesc("The number of importer threads to use for parsing metadata.").addText((text2) => { text2.setValue("" + this.plugin.settings.importerNumThreads).onChange(async (value) => { const parsed = parseInt(value); - if (isNaN(parsed)) - return; + if (isNaN(parsed)) return; await this.plugin.updateSettings({ importerNumThreads: parsed }); }); }); new import_obsidian10.Setting(this.containerEl).setName("Importer Utilization").setDesc("How much CPU time each importer thread should use, as a fraction (0.1 - 1.0).").addText((text2) => { text2.setValue(this.plugin.settings.importerUtilization.toFixed(2)).onChange(async (value) => { const parsed = parseFloat(value); - if (isNaN(parsed)) - return; + if (isNaN(parsed)) return; const limited = Math.max(0.1, Math.min(1, parsed)); await this.plugin.updateSettings({ importerUtilization: limited }); }); @@ -51570,8 +53973,7 @@ var GeneralSettingsTab = class extends import_obsidian10.PluginSettingTab { ).addText((text2) => { text2.setValue(this.plugin.settings.maxRecursiveRenderDepth.toString()).onChange(async (value) => { const parsed = parseInt(value); - if (isNaN(parsed)) - return; + if (isNaN(parsed)) return; await this.plugin.updateSettings({ maxRecursiveRenderDepth: parsed }); }); }); @@ -51600,6 +54002,16 @@ var GeneralSettingsTab = class extends import_obsidian10.PluginSettingTab { //! Provides utilities for executing queries against the storage layer. /*! Bundled license information: +react-is/cjs/react-is.production.min.js: + (** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + react-is/cjs/react-is.development.js: (** @license React v16.13.1 * react-is.development.js @@ -51633,4 +54045,6 @@ localforage/dist/localforage.js: * @class *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL3BhcnNpbW1vbi9idWlsZC9wYXJzaW1tb24udW1kLm1pbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvc2V0LWFycmF5L3NyYy9zZXQtYXJyYXkudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9zcmMvc291cmNlbWFwLWNvZGVjLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9yZXNvbHZlLXVyaS9zcmMvcmVzb2x2ZS11cmkudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvc3JjL3Jlc29sdmUudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvc3JjL3N0cmlwLWZpbGVuYW1lLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy9zb3VyY2VtYXAtc2VnbWVudC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvc29ydC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvYmluYXJ5LXNlYXJjaC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvYnktc291cmNlLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy9hbnktbWFwLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy90cmFjZS1tYXBwaW5nLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9nZW4tbWFwcGluZy9zcmMvc291cmNlbWFwLXNlZ21lbnQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nL3NyYy9nZW4tbWFwcGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvdHMtaW50ZXJmYWNlLWNoZWNrZXIvZGlzdC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy90cy1pbnRlcmZhY2UtY2hlY2tlci9kaXN0L3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy90cy1pbnRlcmZhY2UtY2hlY2tlci9kaXN0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9saW5lcy1hbmQtY29sdW1ucy9idWlsZC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9oYXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NvcnRlZC1idHJlZS9iK3RyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2xvY2FsZm9yYWdlL2Rpc3QvbG9jYWxmb3JhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZS9zcmMvcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZS9pbmRleC5qcyIsICIuLi8uLi9zcmMvbWFpbi50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2x1eG9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9lbmdsaXNoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXR0ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2ludmFsaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvc3lzdGVtWm9uZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL3pvbmVzL0lBTkFab25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvZml4ZWRPZmZzZXRab25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvaW52YWxpZFpvbmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL3pvbmVVdGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvc2V0dGluZ3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2xvY2FsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvcmVnZXhQYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9kdXJhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ludGVydmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlmZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlnaXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC90b2tlblBhcnNlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9kYXRldGltZS5qcyIsICIuLi8uLi9zcmMvdXRpbHMvbm9ybWFsaXplcnMudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Vtb2ppLXJlZ2V4L2luZGV4Lm1qcyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9saW5rLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL3BhcnNlci50cyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9saXRlcmFsLnRzIiwgIi4uLy4uL3NyYy9hcGkvcmVzdWx0LnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2ZpbHRlcnMudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vZXhwcmVzc2lvbi50cyIsICIuLi8uLi9zcmMvdWkvbWFya2Rvd24udHN4IiwgIi4uLy4uL3NyYy91dGlscy9tZWRpYS50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9vcHRpb25zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NyZWF0ZS1lbGVtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbXBvbmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL3Byb3BzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NyZWF0ZS1jb250ZXh0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvY2hpbGRyZW4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9yZW5kZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY2xvbmUtZWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL2NhdGNoLWVycm9yLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3Mvc3JjL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9QdXJlQ29tcG9uZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9tZW1vLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9mb3J3YXJkUmVmLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9DaGlsZHJlbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvc3VzcGVuc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL3N1c3BlbnNlLWxpc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY29uc3RhbnRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9wb3J0YWxzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9yZW5kZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvanN4LXJ1bnRpbWUvc3JjL3V0aWxzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL3NyYy9pbmRleC5qcyIsICIuLi8uLi9zcmMvYXBpL3VpL2VtYmVkLnRzeCIsICIuLi8uLi9zcmMvdWkvamF2YXNjcmlwdC50c3giLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3Rva2VuaXplci9rZXl3b3Jkcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvdG9rZW5pemVyL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci90b2tlbml6ZXIvc3RhdGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3V0aWwvY2hhcmNvZGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci90cmF2ZXJzZXIvYmFzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvdHJhdmVyc2VyL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3V0aWwvd2hpdGVzcGFjZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvdXRpbC9pZGVudGlmaWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci90b2tlbml6ZXIvcmVhZFdvcmRUcmVlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci90b2tlbml6ZXIvcmVhZFdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3Rva2VuaXplci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS91dGlsL2dldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3BsdWdpbnMvanN4L3hodG1sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZ2V0SlNYUHJhZ21hSW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS90cmFuc2Zvcm1lcnMvVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdHJhbnNmb3JtZXJzL0pTWFRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL0NKU0ltcG9ydFByb2Nlc3Nvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9jb21wdXRlU291cmNlTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL0hlbHBlck1hbmFnZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9nZXRJZGVudGlmaWVyTmFtZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vTmFtZU1hbmFnZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vT3B0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9PcHRpb25zLWdlbi10eXBlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvdHJhdmVyc2VyL2x2YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3BsdWdpbnMvdHlwZXNjcmlwdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvcGx1Z2lucy9qc3gvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3BsdWdpbnMvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3RyYXZlcnNlci9leHByZXNzaW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3BhcnNlci9wbHVnaW5zL2Zsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3RyYXZlcnNlci9zdGF0ZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vcGFyc2VyL3RyYXZlcnNlci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS9wYXJzZXIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9pc0FzeW5jT3BlcmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL1Rva2VuUHJvY2Vzc29yLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZ2V0Q2xhc3NJbmZvLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZWxpZGVJbXBvcnRFcXVhbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9nZXREZWNsYXJhdGlvbkluZm8uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9pc0V4cG9ydEZyb20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdHJhbnNmb3JtZXJzL0NKU0ltcG9ydFRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9FU01JbXBvcnRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS90cmFuc2Zvcm1lcnMvRmxvd1RyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9KZXN0SG9pc3RUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS90cmFuc2Zvcm1lcnMvTnVtZXJpY1NlcGFyYXRvclRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9PcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3RyYW5zZm9ybWVycy9SZWFjdERpc3BsYXlOYW1lVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdHJhbnNmb3JtZXJzL1JlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdXRpbC9pc0lkZW50aWZpZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9lc20vdHJhbnNmb3JtZXJzL1R5cGVTY3JpcHRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2VzbS90cmFuc2Zvcm1lcnMvUm9vdFRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZm9ybWF0VG9rZW5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL3V0aWwvZ2V0VFNJbXBvcnRlZE5hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uL3NyYy91dGlscy9qYXZhc2NyaXB0LnRzIiwgIi4uLy4uL3NyYy91aS9ob29rcy50cyIsICIuLi8uLi9zcmMvdWkvbG9hZGluZy1ib3VuZGFyeS50c3giLCAiLi4vLi4vc3JjL2FwaS91aS9sYXlvdXQudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvYmFzaWNzLnRzeCIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvaW5kZXhhYmxlLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2ZpZWxkLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkLnRzIiwgIi4uLy4uL3NyYy91dGlscy9kYXRhLnRzIiwgIi4uLy4uL3NyYy9pbmRleC90eXBlcy9qc29uL2NvbW1vbi50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvbWFya2Rvd24udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVTdXBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuYnJvd3Nlci5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5icm93c2VyLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC00M2M2ZmVhMC5icm93c2VyLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMuZG9tLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QvZGlzdC91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmJyb3dzZXIuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9pbmRleC1hMzAxZjUyNi5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9TZWxlY3QtNDlhNjI4MzAuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9yZWFjdC1zZWxlY3QuZXNtLmpzIiwgIi4uLy4uL3NyYy91aS9maWVsZHMvYm9vbGVhbi1maWVsZC50c3giLCAiLi4vLi4vc3JjL3VpL2ZpZWxkcy9wcm9ncmVzcy1maWVsZC50c3giLCAiLi4vLi4vc3JjL3VpL2ZpZWxkcy9yYXRpbmcudHN4IiwgIi4uLy4uL3NyYy91dGlscy90YXNrLnRzIiwgIi4uLy4uL3NyYy9pbmRleC90eXBlcy95YW1sLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9lZGl0L2ZpZWxkLnRzIiwgIi4uLy4uL3NyYy91dGlscy9maWVsZHMudHMiLCAiLi4vLi4vc3JjL3VpL2ZpZWxkcy9lZGl0YWJsZS50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9saXN0LnRzeCIsICIuLi8uLi9zcmMvYXBpL3VpL3ZpZXdzL3Rhc2sudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvcGFnaW5nLnRzeCIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlL2luZGV4Lm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lL2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvdGFibGUudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvY2FsbG91dC50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9jYXJkcy50c3giLCAiLi4vLi4vc3JjL2FwaS9kYXRhLWFycmF5LnRzIiwgIi4uLy4uL3NyYy9hcGkvY29lcmNlLnRzIiwgIi4uLy4uL3NyYy91dGlscy9kZWZlcnJlZC50cyIsICIuLi8uLi9zcmMvYXBpL3NjcmlwdC1jYWNoZS50cyIsICIuLi8uLi9zcmMvdWkvZmllbGRzL2VkaXRhYmxlLWZpZWxkcy50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy90cmVlLXRhYmxlLnRzeCIsICIuLi8uLi9zcmMvYXBpL2xvY2FsLWFwaS50c3giLCAiLi4vLi4vc3JjL2FwaS9hcGkudHMiLCAiLi4vLi4vc3JjL2luZGV4L3N0b3JhZ2UvZm9sZGVyLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9zdG9yYWdlL2ludmVydGVkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mbGF0cXVldWUvaW5kZXguanMiLCAiLi4vLi4vc3JjL2luZGV4L3N0b3JhZ2UvZmllbGRzLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2JpbmFyeW9wLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2Z1bmN0aW9ucy50cyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9ldmFsdWF0b3IudHMiLCAiLi4vLi4vc3JjL2luZGV4L3N0b3JhZ2UvcXVlcnktZXhlY3V0b3IudHMiLCAiLi4vLi4vc3JjL2luZGV4L2RhdGFzdG9yZS50cyIsICIuLi8uLi9zcmMvaW5kZXgvcGVyc2lzdGVyLnRzIiwgImlubGluZS13b3JrZXI6X19pbmxpbmUtd29ya2VyIiwgIi4uLy4uL3NyYy9pbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLndvcmtlci50cyIsICIuLi8uLi9zcmMvaW5kZXgvd2ViLXdvcmtlci9pbXBvcnRlci50cyIsICIuLi8uLi9zcmMvaW5kZXgvZGF0YWNvcmUudHMiLCAiLi4vLi4vc3JjL2luZGV4L3R5cGVzL2ZpbGVzLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9lbWJlZC1xdWV1ZS50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvY2FudmFzLnRzIiwgIi4uLy4uL3NyYy9zZXR0aW5ncy50cyIsICIuLi8uLi9zcmMvdWkvdmlldy1wYWdlLnRzeCIsICIuLi8uLi9zcmMvdWkvaW5kZXgtc3RhdHVzLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiIWZ1bmN0aW9uKG4sdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5QYXJzaW1tb249dCgpOm4uUGFyc2ltbW9uPXQoKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXt9O2Z1bmN0aW9uIHIoZSl7aWYodFtlXSlyZXR1cm4gdFtlXS5leHBvcnRzO3ZhciB1PXRbZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiBuW2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLHIpLHUubD0hMCx1LmV4cG9ydHN9cmV0dXJuIHIubT1uLHIuYz10LHIuZD1mdW5jdGlvbihuLHQsZSl7ci5vKG4sdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDplfSl9LHIucj1mdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sci5uPWZ1bmN0aW9uKG4pe3ZhciB0PW4mJm4uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIG59O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCl9LHIucD1cIlwiLHIoci5zPTApfShbZnVuY3Rpb24obix0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUobil7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpcmV0dXJuIG5ldyBlKG4pO3RoaXMuXz1ufXZhciB1PWUucHJvdG90eXBlO2Z1bmN0aW9uIG8obix0KXtmb3IodmFyIHI9MDtyPG47cisrKXQocil9ZnVuY3Rpb24gaShuLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7byh0Lmxlbmd0aCxmdW5jdGlvbihyKXtuKHRbcl0scix0KX0pfShmdW5jdGlvbihyLGUsdSl7dD1uKHQscixlLHUpfSxyKSx0fWZ1bmN0aW9uIGEobix0KXtyZXR1cm4gaShmdW5jdGlvbih0LHIsZSx1KXtyZXR1cm4gdC5jb25jYXQoW24ocixlLHUpXSl9LFtdLHQpfWZ1bmN0aW9uIGYobix0KXt2YXIgcj17djowLGJ1Zjp0fTtyZXR1cm4gbyhuLGZ1bmN0aW9uKCl7dmFyIG47cj17djpyLnY8PDF8KG49ci5idWYsblswXT4+NyksYnVmOmZ1bmN0aW9uKG4pe3ZhciB0PWkoZnVuY3Rpb24obix0LHIsZSl7cmV0dXJuIG4uY29uY2F0KHI9PT1lLmxlbmd0aC0xP0J1ZmZlci5mcm9tKFt0LDBdKS5yZWFkVUludDE2QkUoMCk6ZS5yZWFkVUludDE2QkUocikpfSxbXSxuKTtyZXR1cm4gQnVmZmVyLmZyb20oYShmdW5jdGlvbihuKXtyZXR1cm4objw8MSY2NTUzNSk+Pjh9LHQpKX0oci5idWYpfX0pLHJ9ZnVuY3Rpb24gYygpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXJ9ZnVuY3Rpb24gcygpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyIGdsb2JhbCBkb2VzIG5vdCBleGlzdDsgcGxlYXNlIHVzZSB3ZWJwYWNrIGlmIHlvdSBuZWVkIHRvIHBhcnNlIEJ1ZmZlcnMgaW4gdGhlIGJyb3dzZXIuXCIpfWZ1bmN0aW9uIGwobil7cygpO3ZhciB0PWkoZnVuY3Rpb24obix0KXtyZXR1cm4gbit0fSwwLG4pO2lmKHQlOCE9MCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYml0cyBbXCIrbi5qb2luKFwiLCBcIikrXCJdIGFkZCB1cCB0byBcIit0K1wiIHdoaWNoIGlzIG5vdCBhbiBldmVuIG51bWJlciBvZiBieXRlczsgdGhlIHRvdGFsIHNob3VsZCBiZSBkaXZpc2libGUgYnkgOFwiKTt2YXIgcix1PXQvOCxvPShyPWZ1bmN0aW9uKG4pe3JldHVybiBuPjQ4fSxpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG58fChyKHQpP3Q6bil9LG51bGwsbikpO2lmKG8pdGhyb3cgbmV3IEVycm9yKG8rXCIgYml0IHJhbmdlIHJlcXVlc3RlZCBleGNlZWRzIDQ4IGJpdCAoNiBieXRlKSBOdW1iZXIgbWF4LlwiKTtyZXR1cm4gbmV3IGUoZnVuY3Rpb24odCxyKXt2YXIgZT11K3I7cmV0dXJuIGU+dC5sZW5ndGg/eChyLHUudG9TdHJpbmcoKStcIiBieXRlc1wiKTpiKGUsaShmdW5jdGlvbihuLHQpe3ZhciByPWYodCxuLmJ1Zik7cmV0dXJue2NvbGw6bi5jb2xsLmNvbmNhdChyLnYpLGJ1ZjpyLmJ1Zn19LHtjb2xsOltdLGJ1Zjp0LnNsaWNlKHIsZSl9LG4pLmNvbGwpfSl9ZnVuY3Rpb24gaChuLHQpe3JldHVybiBuZXcgZShmdW5jdGlvbihyLGUpe3JldHVybiBzKCksZSt0PnIubGVuZ3RoP3goZSx0K1wiIGJ5dGVzIGZvciBcIituKTpiKGUrdCxyLnNsaWNlKGUsZSt0KSl9KX1mdW5jdGlvbiBwKG4sdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mKHI9dCl8fE1hdGguZmxvb3IocikhPT1yfHx0PDB8fHQ+Nil0aHJvdyBuZXcgRXJyb3IobitcIiByZXF1aXJlcyBpbnRlZ2VyIGxlbmd0aCBpbiByYW5nZSBbMCwgNl0uXCIpO3ZhciByfWZ1bmN0aW9uIGQobil7cmV0dXJuIHAoXCJ1aW50QkVcIixuKSxoKFwidWludEJFKFwiK24rXCIpXCIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50QkUoMCxuKX0pfWZ1bmN0aW9uIHYobil7cmV0dXJuIHAoXCJ1aW50TEVcIixuKSxoKFwidWludExFKFwiK24rXCIpXCIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50TEUoMCxuKX0pfWZ1bmN0aW9uIGcobil7cmV0dXJuIHAoXCJpbnRCRVwiLG4pLGgoXCJpbnRCRShcIituK1wiKVwiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50QkUoMCxuKX0pfWZ1bmN0aW9uIG0obil7cmV0dXJuIHAoXCJpbnRMRVwiLG4pLGgoXCJpbnRMRShcIituK1wiKVwiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50TEUoMCxuKX0pfWZ1bmN0aW9uIHkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBlfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09e30udG9TdHJpbmcuY2FsbChuKX1mdW5jdGlvbiB3KG4pe3JldHVybiBjKCkmJkJ1ZmZlci5pc0J1ZmZlcihuKX1mdW5jdGlvbiBiKG4sdCl7cmV0dXJue3N0YXR1czohMCxpbmRleDpuLHZhbHVlOnQsZnVydGhlc3Q6LTEsZXhwZWN0ZWQ6W119fWZ1bmN0aW9uIHgobix0KXtyZXR1cm4gRSh0KXx8KHQ9W3RdKSx7c3RhdHVzOiExLGluZGV4Oi0xLHZhbHVlOm51bGwsZnVydGhlc3Q6bixleHBlY3RlZDp0fX1mdW5jdGlvbiBCKG4sdCl7aWYoIXQpcmV0dXJuIG47aWYobi5mdXJ0aGVzdD50LmZ1cnRoZXN0KXJldHVybiBuO3ZhciByPW4uZnVydGhlc3Q9PT10LmZ1cnRoZXN0P2Z1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1lLl9zdXBwb3J0c1NldClyZXR1cm4gZS5fc3VwcG9ydHNTZXQ7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldDtyZXR1cm4gZS5fc3VwcG9ydHNTZXQ9bixufSgpJiZBcnJheS5mcm9tKXtmb3IodmFyIHI9bmV3IFNldChuKSx1PTA7dTx0Lmxlbmd0aDt1Kyspci5hZGQodFt1XSk7dmFyIG89QXJyYXkuZnJvbShyKTtyZXR1cm4gby5zb3J0KCksb31mb3IodmFyIGk9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWlbblthXV09ITA7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspaVt0W2ZdXT0hMDt2YXIgYz1bXTtmb3IodmFyIHMgaW4gaSkoe30pLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmYy5wdXNoKHMpO3JldHVybiBjLnNvcnQoKSxjfShuLmV4cGVjdGVkLHQuZXhwZWN0ZWQpOnQuZXhwZWN0ZWQ7cmV0dXJue3N0YXR1czpuLnN0YXR1cyxpbmRleDpuLmluZGV4LHZhbHVlOm4udmFsdWUsZnVydGhlc3Q6dC5mdXJ0aGVzdCxleHBlY3RlZDpyfX12YXIgaj17fTtmdW5jdGlvbiBTKG4sdCl7aWYodyhuKSlyZXR1cm57b2Zmc2V0OnQsbGluZTotMSxjb2x1bW46LTF9O24gaW4ganx8KGpbbl09e30pO2Zvcih2YXIgcj1qW25dLGU9MCx1PTAsbz0wLGk9dDtpPj0wOyl7aWYoaSBpbiByKXtlPXJbaV0ubGluZSwwPT09byYmKG89cltpXS5saW5lU3RhcnQpO2JyZWFrfShcIlxcblwiPT09bi5jaGFyQXQoaSl8fFwiXFxyXCI9PT1uLmNoYXJBdChpKSYmXCJcXG5cIiE9PW4uY2hhckF0KGkrMSkpJiYodSsrLDA9PT1vJiYobz1pKzEpKSxpLS19dmFyIGE9ZSt1LGY9dC1vO3JldHVybiByW3RdPXtsaW5lOmEsbGluZVN0YXJ0Om99LHtvZmZzZXQ6dCxsaW5lOmErMSxjb2x1bW46ZisxfX1mdW5jdGlvbiBfKG4pe2lmKCF5KG4pKXRocm93IG5ldyBFcnJvcihcIm5vdCBhIHBhcnNlcjogXCIrbil9ZnVuY3Rpb24gTChuLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuP24uY2hhckF0KHQpOm5bdF19ZnVuY3Rpb24gTyhuKXtpZihcIm51bWJlclwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBudW1iZXI6IFwiK24pfWZ1bmN0aW9uIGsobil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBmdW5jdGlvbjogXCIrbil9ZnVuY3Rpb24gUChuKXtpZihcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBzdHJpbmc6IFwiK24pfXZhciBxPTIsQT0zLEk9OCxGPTUqSSxNPTQqSSx6PVwiICBcIjtmdW5jdGlvbiBSKG4sdCl7cmV0dXJuIG5ldyBBcnJheSh0KzEpLmpvaW4obil9ZnVuY3Rpb24gVShuLHQscil7dmFyIGU9dC1uLmxlbmd0aDtyZXR1cm4gZTw9MD9uOlIocixlKStufWZ1bmN0aW9uIFcobix0LHIsZSl7cmV0dXJue2Zyb206bi10PjA/bi10OjAsdG86bityPmU/ZTpuK3J9fWZ1bmN0aW9uIEQobix0KXt2YXIgcixlLHUsbyxmLGM9dC5pbmRleCxzPWMub2Zmc2V0LGw9MTtpZihzPT09bi5sZW5ndGgpcmV0dXJuXCJHb3QgdGhlIGVuZCBvZiB0aGUgaW5wdXRcIjtpZih3KG4pKXt2YXIgaD1zLXMlSSxwPXMtaCxkPVcoaCxGLE0rSSxuLmxlbmd0aCksdj1hKGZ1bmN0aW9uKG4pe3JldHVybiBhKGZ1bmN0aW9uKG4pe3JldHVybiBVKG4udG9TdHJpbmcoMTYpLDIsXCIwXCIpfSxuKX0sZnVuY3Rpb24obix0KXt2YXIgcj1uLmxlbmd0aCxlPVtdLHU9MDtpZihyPD10KXJldHVybltuLnNsaWNlKCldO2Zvcih2YXIgbz0wO288cjtvKyspZVt1XXx8ZS5wdXNoKFtdKSxlW3VdLnB1c2gobltvXSksKG8rMSkldD09MCYmdSsrO3JldHVybiBlfShuLnNsaWNlKGQuZnJvbSxkLnRvKS50b0pTT04oKS5kYXRhLEkpKTtvPWZ1bmN0aW9uKG4pe3JldHVybiAwPT09bi5mcm9tJiYxPT09bi50bz97ZnJvbTpuLmZyb20sdG86bi50b306e2Zyb206bi5mcm9tL0ksdG86TWF0aC5mbG9vcihuLnRvL0kpfX0oZCksZT1oL0kscj0zKnAscD49NCYmKHIrPTEpLGw9Mix1PWEoZnVuY3Rpb24obil7cmV0dXJuIG4ubGVuZ3RoPD00P24uam9pbihcIiBcIik6bi5zbGljZSgwLDQpLmpvaW4oXCIgXCIpK1wiICBcIituLnNsaWNlKDQpLmpvaW4oXCIgXCIpfSx2KSwoZj0oOCooby50bz4wP28udG8tMTpvLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKGY9Mil9ZWxzZXt2YXIgZz1uLnNwbGl0KC9cXHJcXG58W1xcblxcclxcdTIwMjhcXHUyMDI5XS8pO3I9Yy5jb2x1bW4tMSxlPWMubGluZS0xLG89VyhlLHEsQSxnLmxlbmd0aCksdT1nLnNsaWNlKG8uZnJvbSxvLnRvKSxmPW8udG8udG9TdHJpbmcoKS5sZW5ndGh9dmFyIG09ZS1vLmZyb207cmV0dXJuIHcobikmJihmPSg4KihvLnRvPjA/by50by0xOm8udG8pKS50b1N0cmluZygxNikubGVuZ3RoKTwyJiYoZj0yKSxpKGZ1bmN0aW9uKHQsZSx1KXt2YXIgaSxhPXU9PT1tLGM9YT9cIj4gXCI6ejtyZXR1cm4gaT13KG4pP1UoKDgqKG8uZnJvbSt1KSkudG9TdHJpbmcoMTYpLGYsXCIwXCIpOlUoKG8uZnJvbSt1KzEpLnRvU3RyaW5nKCksZixcIiBcIiksW10uY29uY2F0KHQsW2MraStcIiB8IFwiK2VdLGE/W3orUihcIiBcIixmKStcIiB8IFwiK1UoXCJcIixyLFwiIFwiKStSKFwiXlwiLGwpXTpbXSl9LFtdLHUpLmpvaW4oXCJcXG5cIil9ZnVuY3Rpb24gTihuLHQpe3JldHVybltcIlxcblwiLFwiLS0gUEFSU0lORyBGQUlMRUQgXCIrUihcIi1cIiw1MCksXCJcXG5cXG5cIixEKG4sdCksXCJcXG5cXG5cIiwocj10LmV4cGVjdGVkLDE9PT1yLmxlbmd0aD9cIkV4cGVjdGVkOlxcblxcblwiK3JbMF06XCJFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXFxuXFxuXCIrci5qb2luKFwiLCBcIikpLFwiXFxuXCJdLmpvaW4oXCJcIik7dmFyIHJ9ZnVuY3Rpb24gRyhuKXtyZXR1cm4gdm9pZCAwIT09bi5mbGFncz9uLmZsYWdzOltuLmdsb2JhbD9cImdcIjpcIlwiLG4uaWdub3JlQ2FzZT9cImlcIjpcIlwiLG4ubXVsdGlsaW5lP1wibVwiOlwiXCIsbi51bmljb2RlP1widVwiOlwiXCIsbi5zdGlja3k/XCJ5XCI6XCJcIl0uam9pbihcIlwiKX1mdW5jdGlvbiBDKCl7Zm9yKHZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSx0PW4ubGVuZ3RoLHI9MDtyPHQ7cis9MSlfKG5bcl0pO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7Zm9yKHZhciB1LG89bmV3IEFycmF5KHQpLGk9MDtpPHQ7aSs9MSl7aWYoISh1PUIobltpXS5fKHIsZSksdSkpLnN0YXR1cylyZXR1cm4gdTtvW2ldPXUudmFsdWUsZT11LmluZGV4fXJldHVybiBCKGIoZSxvKSx1KX0pfWZ1bmN0aW9uIEooKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcInNlcU1hcCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnRcIik7dmFyIHQ9bi5wb3AoKTtyZXR1cm4gayh0KSxDLmFwcGx5KG51bGwsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KG51bGwsbil9KX1mdW5jdGlvbiBUKCl7dmFyIG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHQ9bi5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIFkoXCJ6ZXJvIGFsdGVybmF0ZXNcIik7Zm9yKHZhciByPTA7cjx0O3IrPTEpXyhuW3JdKTtyZXR1cm4gZShmdW5jdGlvbih0LHIpe2Zvcih2YXIgZSx1PTA7dTxuLmxlbmd0aDt1Kz0xKWlmKChlPUIoblt1XS5fKHQsciksZSkpLnN0YXR1cylyZXR1cm4gZTtyZXR1cm4gZX0pfWZ1bmN0aW9uIFYobix0KXtyZXR1cm4gSChuLHQpLm9yKFgoW10pKX1mdW5jdGlvbiBIKG4sdCl7cmV0dXJuIF8obiksXyh0KSxKKG4sdC50aGVuKG4pLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybltuXS5jb25jYXQodCl9KX1mdW5jdGlvbiBLKG4pe1Aobik7dmFyIHQ9XCInXCIrbitcIidcIjtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PWUrbi5sZW5ndGgsbz1yLnNsaWNlKGUsdSk7cmV0dXJuIG89PT1uP2IodSxvKTp4KGUsdCl9KX1mdW5jdGlvbiBRKG4sdCl7IWZ1bmN0aW9uKG4pe2lmKCEobiBpbnN0YW5jZW9mIFJlZ0V4cCkpdGhyb3cgbmV3IEVycm9yKFwibm90IGEgcmVnZXhwOiBcIituKTtmb3IodmFyIHQ9RyhuKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBlPXQuY2hhckF0KHIpO2lmKFwiaVwiIT09ZSYmXCJtXCIhPT1lJiZcInVcIiE9PWUmJlwic1wiIT09ZSl0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHJlZ2V4cCBmbGFnIFwiJytlKydcIjogJytuKX19KG4pLGFyZ3VtZW50cy5sZW5ndGg+PTI/Tyh0KTp0PTA7dmFyIHI9ZnVuY3Rpb24obil7cmV0dXJuIFJlZ0V4cChcIl4oPzpcIituLnNvdXJjZStcIilcIixHKG4pKX0obiksdT1cIlwiK247cmV0dXJuIGUoZnVuY3Rpb24obixlKXt2YXIgbz1yLmV4ZWMobi5zbGljZShlKSk7aWYobyl7aWYoMDw9dCYmdDw9by5sZW5ndGgpe3ZhciBpPW9bMF0sYT1vW3RdO3JldHVybiBiKGUraS5sZW5ndGgsYSl9cmV0dXJuIHgoZSxcInZhbGlkIG1hdGNoIGdyb3VwICgwIHRvIFwiK28ubGVuZ3RoK1wiKSBpbiBcIit1KX1yZXR1cm4geChlLHUpfSl9ZnVuY3Rpb24gWChuKXtyZXR1cm4gZShmdW5jdGlvbih0LHIpe3JldHVybiBiKHIsbil9KX1mdW5jdGlvbiBZKG4pe3JldHVybiBlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHgocixuKX0pfWZ1bmN0aW9uIFoobil7aWYoeShuKSlyZXR1cm4gZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpO3JldHVybiBlLmluZGV4PXIsZS52YWx1ZT1cIlwiLGV9KTtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gWihLKG4pKTtpZihuIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBaKFEobikpO3Rocm93IG5ldyBFcnJvcihcIm5vdCBhIHN0cmluZywgcmVnZXhwLCBvciBwYXJzZXI6IFwiK24pfWZ1bmN0aW9uICQobil7cmV0dXJuIF8obiksZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpLHU9dC5zbGljZShyLGUuaW5kZXgpO3JldHVybiBlLnN0YXR1cz94KHIsJ25vdCBcIicrdSsnXCInKTpiKHIsbnVsbCl9KX1mdW5jdGlvbiBubihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7dmFyIGU9TCh0LHIpO3JldHVybiByPHQubGVuZ3RoJiZuKGUpP2IocisxLGUpOngocixcImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgXCIrbil9KX1mdW5jdGlvbiB0bihuLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPXZvaWQgMCk7dmFyIHI9ZShmdW5jdGlvbihuLGUpe3JldHVybiByLl89dCgpLl8sci5fKG4sZSl9KTtyZXR1cm4gbj9yLmRlc2Mobik6cn1mdW5jdGlvbiBybigpe3JldHVybiBZKFwiZmFudGFzeS1sYW5kL2VtcHR5XCIpfXUucGFyc2U9ZnVuY3Rpb24obil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIG4mJiF3KG4pKXRocm93IG5ldyBFcnJvcihcIi5wYXJzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3RyaW5nIG9yIEJ1ZmZlciBhcyBpdHMgYXJndW1lbnRcIik7dmFyIHQscj10aGlzLnNraXAoYW4pLl8obiwwKTtyZXR1cm4gdD1yLnN0YXR1cz97c3RhdHVzOiEwLHZhbHVlOnIudmFsdWV9OntzdGF0dXM6ITEsaW5kZXg6UyhuLHIuZnVydGhlc3QpLGV4cGVjdGVkOnIuZXhwZWN0ZWR9LGRlbGV0ZSBqW25dLHR9LHUudHJ5UGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5wYXJzZShuKTtpZih0LnN0YXR1cylyZXR1cm4gdC52YWx1ZTt2YXIgcj1OKG4sdCksZT1uZXcgRXJyb3Iocik7dGhyb3cgZS50eXBlPVwiUGFyc2ltbW9uRXJyb3JcIixlLnJlc3VsdD10LGV9LHUuYXNzZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuY2hhaW4oZnVuY3Rpb24ocil7cmV0dXJuIG4ocik/WChyKTpZKHQpfSl9LHUub3I9ZnVuY3Rpb24obil7cmV0dXJuIFQodGhpcyxuKX0sdS50cmltPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLndyYXAobixuKX0sdS53cmFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEoobix0aGlzLHQsZnVuY3Rpb24obix0KXtyZXR1cm4gdH0pfSx1LnRocnU9ZnVuY3Rpb24obil7cmV0dXJuIG4odGhpcyl9LHUudGhlbj1mdW5jdGlvbihuKXtyZXR1cm4gXyhuKSxDKHRoaXMsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSl9LHUubWFueT1mdW5jdGlvbigpe3ZhciBuPXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9W10sdT12b2lkIDA7Oyl7aWYoISh1PUIobi5fKHQsciksdSkpLnN0YXR1cylyZXR1cm4gQihiKHIsZSksdSk7aWYocj09PXUuaW5kZXgpdGhyb3cgbmV3IEVycm9yKFwiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIGEgcGFyc2VyIHdoaWNoIGNhbiBhY2NlcHQgemVybyBjaGFyYWN0ZXJzIGlzIHVzdWFsbHkgdGhlIGNhdXNlXCIpO3I9dS5pbmRleCxlLnB1c2godS52YWx1ZSl9fSl9LHUudGllV2l0aD1mdW5jdGlvbihuKXtyZXR1cm4gUChuKSx0aGlzLm1hcChmdW5jdGlvbih0KXtpZihmdW5jdGlvbihuKXtpZighRShuKSl0aHJvdyBuZXcgRXJyb3IoXCJub3QgYW4gYXJyYXk6IFwiK24pfSh0KSx0Lmxlbmd0aCl7UCh0WzBdKTtmb3IodmFyIHI9dFswXSxlPTE7ZTx0Lmxlbmd0aDtlKyspUCh0W2VdKSxyKz1uK3RbZV07cmV0dXJuIHJ9cmV0dXJuXCJcIn0pfSx1LnRpZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpZVdpdGgoXCJcIil9LHUudGltZXM9ZnVuY3Rpb24obix0KXt2YXIgcj10aGlzO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PW4pLE8obiksTyh0KSxlKGZ1bmN0aW9uKGUsdSl7Zm9yKHZhciBvPVtdLGk9dm9pZCAwLGE9dm9pZCAwLGY9MDtmPG47Zis9MSl7aWYoYT1CKGk9ci5fKGUsdSksYSksIWkuc3RhdHVzKXJldHVybiBhO3U9aS5pbmRleCxvLnB1c2goaS52YWx1ZSl9Zm9yKDtmPHQmJihhPUIoaT1yLl8oZSx1KSxhKSxpLnN0YXR1cyk7Zis9MSl1PWkuaW5kZXgsby5wdXNoKGkudmFsdWUpO3JldHVybiBCKGIodSxvKSxhKX0pfSx1LnJlc3VsdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSx1LmF0TW9zdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50aW1lcygwLG4pfSx1LmF0TGVhc3Q9ZnVuY3Rpb24obil7cmV0dXJuIEoodGhpcy50aW1lcyhuKSx0aGlzLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybiBuLmNvbmNhdCh0KX0pfSx1Lm1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10Ll8ocixlKTtyZXR1cm4gdS5zdGF0dXM/QihiKHUuaW5kZXgsbih1LnZhbHVlKSksdSk6dX0pfSx1LmNvbnRyYW1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10LnBhcnNlKG4oci5zbGljZShlKSkpO3JldHVybiB1LnN0YXR1cz9iKGUrci5sZW5ndGgsdS52YWx1ZSk6dX0pfSx1LnByb21hcD1mdW5jdGlvbihuLHQpe3JldHVybiBrKG4pLGsodCksdGhpcy5jb250cmFtYXAobikubWFwKHQpfSx1LnNraXA9ZnVuY3Rpb24obil7cmV0dXJuIEModGhpcyxuKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG5bMF19KX0sdS5tYXJrPWZ1bmN0aW9uKCl7cmV0dXJuIEooZW4sdGhpcyxlbixmdW5jdGlvbihuLHQscil7cmV0dXJue3N0YXJ0Om4sdmFsdWU6dCxlbmQ6cn19KX0sdS5ub2RlPWZ1bmN0aW9uKG4pe3JldHVybiBKKGVuLHRoaXMsZW4sZnVuY3Rpb24odCxyLGUpe3JldHVybntuYW1lOm4sdmFsdWU6cixzdGFydDp0LGVuZDplfX0pfSx1LnNlcEJ5PWZ1bmN0aW9uKG4pe3JldHVybiBWKHRoaXMsbil9LHUuc2VwQnkxPWZ1bmN0aW9uKG4pe3JldHVybiBIKHRoaXMsbil9LHUubG9va2FoZWFkPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNraXAoWihuKSl9LHUubm90Rm9sbG93ZWRCeT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5za2lwKCQobikpfSx1LmRlc2M9ZnVuY3Rpb24obil7RShuKXx8KG49W25dKTt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzfHwodS5leHBlY3RlZD1uKSx1fSl9LHUuZmFsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMub3IoWChuKSl9LHUuYXA9ZnVuY3Rpb24obil7cmV0dXJuIEoobix0aGlzLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9KX0sdS5jaGFpbj1mdW5jdGlvbihuKXt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzP0Iobih1LnZhbHVlKS5fKHIsdS5pbmRleCksdSk6dX0pfSx1LmNvbmNhdD11Lm9yLHUuZW1wdHk9cm4sdS5vZj1YLHVbXCJmYW50YXN5LWxhbmQvYXBcIl09dS5hcCx1W1wiZmFudGFzeS1sYW5kL2NoYWluXCJdPXUuY2hhaW4sdVtcImZhbnRhc3ktbGFuZC9jb25jYXRcIl09dS5jb25jYXQsdVtcImZhbnRhc3ktbGFuZC9lbXB0eVwiXT11LmVtcHR5LHVbXCJmYW50YXN5LWxhbmQvb2ZcIl09dS5vZix1W1wiZmFudGFzeS1sYW5kL21hcFwiXT11Lm1hcDt2YXIgZW49ZShmdW5jdGlvbihuLHQpe3JldHVybiBiKHQsUyhuLHQpKX0pLHVuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gdD49bi5sZW5ndGg/eCh0LFwiYW55IGNoYXJhY3Rlci9ieXRlXCIpOmIodCsxLEwobix0KSl9KSxvbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGIobi5sZW5ndGgsbi5zbGljZSh0KSl9KSxhbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ8bi5sZW5ndGg/eCh0LFwiRU9GXCIpOmIodCxudWxsKX0pLGZuPVEoL1swLTldLykuZGVzYyhcImEgZGlnaXRcIiksY249USgvWzAtOV0qLykuZGVzYyhcIm9wdGlvbmFsIGRpZ2l0c1wiKSxzbj1RKC9bYS16XS9pKS5kZXNjKFwiYSBsZXR0ZXJcIiksbG49USgvW2Etel0qL2kpLmRlc2MoXCJvcHRpb25hbCBsZXR0ZXJzXCIpLGhuPVEoL1xccyovKS5kZXNjKFwib3B0aW9uYWwgd2hpdGVzcGFjZVwiKSxwbj1RKC9cXHMrLykuZGVzYyhcIndoaXRlc3BhY2VcIiksZG49SyhcIlxcclwiKSx2bj1LKFwiXFxuXCIpLGduPUsoXCJcXHJcXG5cIiksbW49VChnbix2bixkbikuZGVzYyhcIm5ld2xpbmVcIikseW49VChtbixhbik7ZS5hbGw9b24sZS5hbHQ9VCxlLmFueT11bixlLmNyPWRuLGUuY3JlYXRlTGFuZ3VhZ2U9ZnVuY3Rpb24obil7dmFyIHQ9e307Zm9yKHZhciByIGluIG4pKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJmZ1bmN0aW9uKHIpe3Rbcl09dG4oZnVuY3Rpb24oKXtyZXR1cm4gbltyXSh0KX0pfShyKTtyZXR1cm4gdH0sZS5jcmxmPWduLGUuY3VzdG9tPWZ1bmN0aW9uKG4pe3JldHVybiBlKG4oYix4KSl9LGUuZGlnaXQ9Zm4sZS5kaWdpdHM9Y24sZS5lbXB0eT1ybixlLmVuZD15bixlLmVvZj1hbixlLmZhaWw9WSxlLmZvcm1hdEVycm9yPU4sZS5pbmRleD1lbixlLmlzUGFyc2VyPXksZS5sYXp5PXRuLGUubGV0dGVyPXNuLGUubGV0dGVycz1sbixlLmxmPXZuLGUubG9va2FoZWFkPVosZS5tYWtlRmFpbHVyZT14LGUubWFrZVN1Y2Nlc3M9YixlLm5ld2xpbmU9bW4sZS5ub25lT2Y9ZnVuY3Rpb24obil7cmV0dXJuIG5uKGZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk8MH0pLmRlc2MoXCJub25lIG9mICdcIituK1wiJ1wiKX0sZS5ub3RGb2xsb3dlZEJ5PSQsZS5vZj1YLGUub25lT2Y9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4uc3BsaXQoXCJcIikscj0wO3I8dC5sZW5ndGg7cisrKXRbcl09XCInXCIrdFtyXStcIidcIjtyZXR1cm4gbm4oZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT49MH0pLmRlc2ModCl9LGUub3B0V2hpdGVzcGFjZT1obixlLlBhcnNlcj1lLGUucmFuZ2U9ZnVuY3Rpb24obix0KXtyZXR1cm4gbm4oZnVuY3Rpb24ocil7cmV0dXJuIG48PXImJnI8PXR9KS5kZXNjKG4rXCItXCIrdCl9LGUucmVnZXg9USxlLnJlZ2V4cD1RLGUuc2VwQnk9VixlLnNlcEJ5MT1ILGUuc2VxPUMsZS5zZXFNYXA9SixlLnNlcU9iaj1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXt9LHI9MCx1PShuPWFyZ3VtZW50cyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKSksbz11Lmxlbmd0aCxpPTA7aTxvO2krPTEpe3ZhciBhPXVbaV07aWYoIXkoYSkpe2lmKEUoYSkmJjI9PT1hLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGFbMF0mJnkoYVsxXSkpe3ZhciBmPWFbMF07aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZikpdGhyb3cgbmV3IEVycm9yKFwic2VxT2JqOiBkdXBsaWNhdGUga2V5IFwiK2YpO3RbZl09ITAscisrO2NvbnRpbnVlfXRocm93IG5ldyBFcnJvcihcInNlcU9iaiBhcmd1bWVudHMgbXVzdCBiZSBwYXJzZXJzIG9yIFtzdHJpbmcsIHBhcnNlcl0gYXJyYXkgcGFpcnMuXCIpfX1pZigwPT09cil0aHJvdyBuZXcgRXJyb3IoXCJzZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFyc2VyLCBmb3VuZCB6ZXJvXCIpO3JldHVybiBlKGZ1bmN0aW9uKG4sdCl7Zm9yKHZhciByLGU9e30saT0wO2k8bztpKz0xKXt2YXIgYSxmO2lmKEUodVtpXSk/KGE9dVtpXVswXSxmPXVbaV1bMV0pOihhPW51bGwsZj11W2ldKSwhKHI9QihmLl8obix0KSxyKSkuc3RhdHVzKXJldHVybiByO2EmJihlW2FdPXIudmFsdWUpLHQ9ci5pbmRleH1yZXR1cm4gQihiKHQsZSkscil9KX0sZS5zdHJpbmc9SyxlLnN1Y2NlZWQ9WCxlLnRha2VXaGlsZT1mdW5jdGlvbihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPXI7ZTx0Lmxlbmd0aCYmbihMKHQsZSkpOyllKys7cmV0dXJuIGIoZSx0LnNsaWNlKHIsZSkpfSl9LGUudGVzdD1ubixlLndoaXRlc3BhY2U9cG4sZVtcImZhbnRhc3ktbGFuZC9lbXB0eVwiXT1ybixlW1wiZmFudGFzeS1sYW5kL29mXCJdPVgsZS5CaW5hcnk9e2JpdFNlcTpsLGJpdFNlcU9iajpmdW5jdGlvbihuKXtzKCk7dmFyIHQ9e30scj0wLGU9YShmdW5jdGlvbihuKXtpZihFKG4pKXt2YXIgZT1uO2lmKDIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJbXCIrZS5qb2luKFwiLCBcIikrXCJdIHNob3VsZCBiZSBsZW5ndGggMiwgZ290IGxlbmd0aCBcIitlLmxlbmd0aCk7aWYoUChlWzBdKSxPKGVbMV0pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGVbMF0pKXRocm93IG5ldyBFcnJvcihcImR1cGxpY2F0ZSBrZXkgaW4gYml0U2VxT2JqOiBcIitlWzBdKTtyZXR1cm4gdFtlWzBdXT0hMCxyKyssZX1yZXR1cm4gTyhuKSxbbnVsbCxuXX0sbik7aWYocjwxKXRocm93IG5ldyBFcnJvcihcImJpdFNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYWlyLCBnb3QgW1wiK24uam9pbihcIiwgXCIpK1wiXVwiKTt2YXIgdT1hKGZ1bmN0aW9uKG4pe3JldHVybiBuWzBdfSxlKTtyZXR1cm4gbChhKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSxlKSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGwhPT10WzBdJiYoblt0WzBdXT10WzFdKSxufSx7fSxhKGZ1bmN0aW9uKHQscil7cmV0dXJuW3QsbltyXV19LHUpKX0pfSxieXRlOmZ1bmN0aW9uKG4pe2lmKHMoKSxPKG4pLG4+MjU1KXRocm93IG5ldyBFcnJvcihcIlZhbHVlIHNwZWNpZmllZCB0byBieXRlIGNvbnN0cnVjdG9yIChcIituK1wiPTB4XCIrbi50b1N0cmluZygxNikrXCIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuXCIpO3ZhciB0PShuPjE1P1wiMHhcIjpcIjB4MFwiKStuLnRvU3RyaW5nKDE2KTtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PUwocixlKTtyZXR1cm4gdT09PW4/YihlKzEsdSk6eChlLHQpfSl9LGJ1ZmZlcjpmdW5jdGlvbihuKXtyZXR1cm4gaChcImJ1ZmZlclwiLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gQnVmZmVyLmZyb20obil9KX0sZW5jb2RlZFN0cmluZzpmdW5jdGlvbihuLHQpe3JldHVybiBoKFwic3RyaW5nXCIsdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKG4pfSl9LHVpbnRCRTpkLHVpbnQ4QkU6ZCgxKSx1aW50MTZCRTpkKDIpLHVpbnQzMkJFOmQoNCksdWludExFOnYsdWludDhMRTp2KDEpLHVpbnQxNkxFOnYoMiksdWludDMyTEU6dig0KSxpbnRCRTpnLGludDhCRTpnKDEpLGludDE2QkU6ZygyKSxpbnQzMkJFOmcoNCksaW50TEU6bSxpbnQ4TEU6bSgxKSxpbnQxNkxFOm0oMiksaW50MzJMRTptKDQpLGZsb2F0QkU6aChcImZsb2F0QkVcIiw0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZEZsb2F0QkUoMCl9KSxmbG9hdExFOmgoXCJmbG9hdExFXCIsNCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWRGbG9hdExFKDApfSksZG91YmxlQkU6aChcImRvdWJsZUJFXCIsOCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWREb3VibGVCRSgwKX0pLGRvdWJsZUxFOmgoXCJkb3VibGVMRVwiLDgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWFkRG91YmxlTEUoMCl9KX0sbi5leHBvcnRzPWV9XSl9KTsiLCAidHlwZSBLZXkgPSBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w7XG5cbi8qKlxuICogU2V0QXJyYXkgYWN0cyBsaWtlIGEgYFNldGAgKGFsbG93aW5nIG9ubHkgb25lIG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgYGtleWApLCBidXQgcHJvdmlkZXMgdGhlXG4gKiBpbmRleCBvZiB0aGUgYGtleWAgaW4gdGhlIGJhY2tpbmcgYXJyYXkuXG4gKlxuICogVGhpcyBpcyBkZXNpZ25lZCB0byBhbGxvdyBzeW5jaHJvbml6aW5nIGEgc2Vjb25kIGFycmF5IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBiYWNraW5nIGFycmF5LFxuICogbGlrZSBob3cgaW4gYSBzb3VyY2VtYXAgYHNvdXJjZXNDb250ZW50W2ldYCBpcyB0aGUgc291cmNlIGNvbnRlbnQgYXNzb2NpYXRlZCB3aXRoIGBzb3VyY2VbaV1gLFxuICogYW5kIHRoZXJlIGFyZSBuZXZlciBkdXBsaWNhdGVzLlxuICovXG5leHBvcnQgY2xhc3MgU2V0QXJyYXk8VCBleHRlbmRzIEtleSA9IEtleT4ge1xuICBwcml2YXRlIGRlY2xhcmUgX2luZGV4ZXM6IFJlY29yZDxULCBudW1iZXIgfCB1bmRlZmluZWQ+O1xuICBkZWNsYXJlIGFycmF5OiByZWFkb25seSBUW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faW5kZXhlcyA9IHsgX19wcm90b19fOiBudWxsIH0gYXMgYW55O1xuICAgIHRoaXMuYXJyYXkgPSBbXTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUHVibGljU2V0PFQgZXh0ZW5kcyBLZXk+IHtcbiAgYXJyYXk6IFRbXTtcbiAgX2luZGV4ZXM6IFNldEFycmF5PFQ+WydfaW5kZXhlcyddO1xufVxuXG4vKipcbiAqIFR5cGVzY3JpcHQgZG9lc24ndCBhbGxvdyBmcmllbmQgYWNjZXNzIHRvIHByaXZhdGUgZmllbGRzLCBzbyB0aGlzIGp1c3QgY2FzdHMgdGhlIHNldCBpbnRvIGEgdHlwZVxuICogd2l0aCBwdWJsaWMgYWNjZXNzIG1vZGlmaWVycy5cbiAqL1xuZnVuY3Rpb24gY2FzdDxUIGV4dGVuZHMgS2V5PihzZXQ6IFNldEFycmF5PFQ+KTogUHVibGljU2V0PFQ+IHtcbiAgcmV0dXJuIHNldCBhcyBhbnk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXNzb2NpYXRlZCB3aXRoIGBrZXlgIGluIHRoZSBiYWNraW5nIGFycmF5LCBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQ8VCBleHRlbmRzIEtleT4oc2V0YXJyOiBTZXRBcnJheTxUPiwga2V5OiBUKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNhc3Qoc2V0YXJyKS5faW5kZXhlc1trZXldO1xufVxuXG4vKipcbiAqIFB1dHMgYGtleWAgaW50byB0aGUgYmFja2luZyBhcnJheSwgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudC4gUmV0dXJuc1xuICogdGhlIGluZGV4IG9mIHRoZSBga2V5YCBpbiB0aGUgYmFja2luZyBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1dDxUIGV4dGVuZHMgS2V5PihzZXRhcnI6IFNldEFycmF5PFQ+LCBrZXk6IFQpOiBudW1iZXIge1xuICAvLyBUaGUga2V5IG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQuIElmIGl0IGlzIHByZXNlbnQsIGl0J3MgYSBudW1iZXIuXG4gIGNvbnN0IGluZGV4ID0gZ2V0KHNldGFyciwga2V5KTtcbiAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHJldHVybiBpbmRleDtcblxuICBjb25zdCB7IGFycmF5LCBfaW5kZXhlczogaW5kZXhlcyB9ID0gY2FzdChzZXRhcnIpO1xuXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5LnB1c2goa2V5KTtcbiAgcmV0dXJuIChpbmRleGVzW2tleV0gPSBsZW5ndGggLSAxKTtcbn1cblxuLyoqXG4gKiBQb3BzIHRoZSBsYXN0IGFkZGVkIGl0ZW0gb3V0IG9mIHRoZSBTZXRBcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcDxUIGV4dGVuZHMgS2V5PihzZXRhcnI6IFNldEFycmF5PFQ+KTogdm9pZCB7XG4gIGNvbnN0IHsgYXJyYXksIF9pbmRleGVzOiBpbmRleGVzIH0gPSBjYXN0KHNldGFycik7XG4gIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICBjb25zdCBsYXN0ID0gYXJyYXkucG9wKCkhO1xuICBpbmRleGVzW2xhc3RdID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGtleSwgaWYgaXQgZXhpc3RzIGluIHRoZSBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmU8VCBleHRlbmRzIEtleT4oc2V0YXJyOiBTZXRBcnJheTxUPiwga2V5OiBUKTogdm9pZCB7XG4gIGNvbnN0IGluZGV4ID0gZ2V0KHNldGFyciwga2V5KTtcbiAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICBjb25zdCB7IGFycmF5LCBfaW5kZXhlczogaW5kZXhlcyB9ID0gY2FzdChzZXRhcnIpO1xuICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrID0gYXJyYXlbaV07XG4gICAgYXJyYXlbaSAtIDFdID0gaztcbiAgICBpbmRleGVzW2tdIS0tO1xuICB9XG4gIGluZGV4ZXNba2V5XSA9IHVuZGVmaW5lZDtcbiAgYXJyYXkucG9wKCk7XG59XG4iLCAiZXhwb3J0IHR5cGUgU291cmNlTWFwU2VnbWVudCA9XG4gIHwgW251bWJlcl1cbiAgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxuICB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5leHBvcnQgdHlwZSBTb3VyY2VNYXBMaW5lID0gU291cmNlTWFwU2VnbWVudFtdO1xuZXhwb3J0IHR5cGUgU291cmNlTWFwTWFwcGluZ3MgPSBTb3VyY2VNYXBMaW5lW107XG5cbmNvbnN0IGNvbW1hID0gJywnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBzZW1pY29sb24gPSAnOycuY2hhckNvZGVBdCgwKTtcbmNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuY29uc3QgaW50VG9DaGFyID0gbmV3IFVpbnQ4QXJyYXkoNjQpOyAvLyA2NCBwb3NzaWJsZSBjaGFycy5cbmNvbnN0IGNoYXJUb0ludCA9IG5ldyBVaW50OEFycmF5KDEyOCk7IC8vIHogaXMgMTIyIGluIEFTQ0lJXG5cbmZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgY29uc3QgYyA9IGNoYXJzLmNoYXJDb2RlQXQoaSk7XG4gIGludFRvQ2hhcltpXSA9IGM7XG4gIGNoYXJUb0ludFtjXSA9IGk7XG59XG5cbi8vIFByb3ZpZGUgYSBmYWxsYmFjayBmb3Igb2xkZXIgZW52aXJvbm1lbnRzLlxuY29uc3QgdGQgPVxuICB0eXBlb2YgVGV4dERlY29kZXIgIT09ICd1bmRlZmluZWQnXG4gICAgPyAvKiAjX19QVVJFX18gKi8gbmV3IFRleHREZWNvZGVyKClcbiAgICA6IHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnXG4gICAgPyB7XG4gICAgICAgIGRlY29kZShidWY6IFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgZGVjb2RlKGJ1ZjogVWludDhBcnJheSkge1xuICAgICAgICAgIGxldCBvdXQgPSAnJztcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUobWFwcGluZ3M6IHN0cmluZyk6IFNvdXJjZU1hcE1hcHBpbmdzIHtcbiAgY29uc3Qgc3RhdGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBuZXcgSW50MzJBcnJheSg1KSBhcyBhbnk7XG4gIGNvbnN0IGRlY29kZWQ6IFNvdXJjZU1hcE1hcHBpbmdzID0gW107XG5cbiAgbGV0IGluZGV4ID0gMDtcbiAgZG8ge1xuICAgIGNvbnN0IHNlbWkgPSBpbmRleE9mKG1hcHBpbmdzLCBpbmRleCk7XG4gICAgY29uc3QgbGluZTogU291cmNlTWFwTGluZSA9IFtdO1xuICAgIGxldCBzb3J0ZWQgPSB0cnVlO1xuICAgIGxldCBsYXN0Q29sID0gMDtcbiAgICBzdGF0ZVswXSA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCBzZW1pOyBpKyspIHtcbiAgICAgIGxldCBzZWc6IFNvdXJjZU1hcFNlZ21lbnQ7XG5cbiAgICAgIGkgPSBkZWNvZGVJbnRlZ2VyKG1hcHBpbmdzLCBpLCBzdGF0ZSwgMCk7IC8vIGdlbkNvbHVtblxuICAgICAgY29uc3QgY29sID0gc3RhdGVbMF07XG4gICAgICBpZiAoY29sIDwgbGFzdENvbCkgc29ydGVkID0gZmFsc2U7XG4gICAgICBsYXN0Q29sID0gY29sO1xuXG4gICAgICBpZiAoaGFzTW9yZVZscShtYXBwaW5ncywgaSwgc2VtaSkpIHtcbiAgICAgICAgaSA9IGRlY29kZUludGVnZXIobWFwcGluZ3MsIGksIHN0YXRlLCAxKTsgLy8gc291cmNlc0luZGV4XG4gICAgICAgIGkgPSBkZWNvZGVJbnRlZ2VyKG1hcHBpbmdzLCBpLCBzdGF0ZSwgMik7IC8vIHNvdXJjZUxpbmVcbiAgICAgICAgaSA9IGRlY29kZUludGVnZXIobWFwcGluZ3MsIGksIHN0YXRlLCAzKTsgLy8gc291cmNlQ29sdW1uXG5cbiAgICAgICAgaWYgKGhhc01vcmVWbHEobWFwcGluZ3MsIGksIHNlbWkpKSB7XG4gICAgICAgICAgaSA9IGRlY29kZUludGVnZXIobWFwcGluZ3MsIGksIHN0YXRlLCA0KTsgLy8gbmFtZXNJbmRleFxuICAgICAgICAgIHNlZyA9IFtjb2wsIHN0YXRlWzFdLCBzdGF0ZVsyXSwgc3RhdGVbM10sIHN0YXRlWzRdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWcgPSBbY29sLCBzdGF0ZVsxXSwgc3RhdGVbMl0sIHN0YXRlWzNdXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnID0gW2NvbF07XG4gICAgICB9XG5cbiAgICAgIGxpbmUucHVzaChzZWcpO1xuICAgIH1cblxuICAgIGlmICghc29ydGVkKSBzb3J0KGxpbmUpO1xuICAgIGRlY29kZWQucHVzaChsaW5lKTtcbiAgICBpbmRleCA9IHNlbWkgKyAxO1xuICB9IHdoaWxlIChpbmRleCA8PSBtYXBwaW5ncy5sZW5ndGgpO1xuXG4gIHJldHVybiBkZWNvZGVkO1xufVxuXG5mdW5jdGlvbiBpbmRleE9mKG1hcHBpbmdzOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBpZHggPSBtYXBwaW5ncy5pbmRleE9mKCc7JywgaW5kZXgpO1xuICByZXR1cm4gaWR4ID09PSAtMSA/IG1hcHBpbmdzLmxlbmd0aCA6IGlkeDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihtYXBwaW5nczogc3RyaW5nLCBwb3M6IG51bWJlciwgc3RhdGU6IFNvdXJjZU1hcFNlZ21lbnQsIGo6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB2YWx1ZSA9IDA7XG4gIGxldCBzaGlmdCA9IDA7XG4gIGxldCBpbnRlZ2VyID0gMDtcblxuICBkbyB7XG4gICAgY29uc3QgYyA9IG1hcHBpbmdzLmNoYXJDb2RlQXQocG9zKyspO1xuICAgIGludGVnZXIgPSBjaGFyVG9JbnRbY107XG4gICAgdmFsdWUgfD0gKGludGVnZXIgJiAzMSkgPDwgc2hpZnQ7XG4gICAgc2hpZnQgKz0gNTtcbiAgfSB3aGlsZSAoaW50ZWdlciAmIDMyKTtcblxuICBjb25zdCBzaG91bGROZWdhdGUgPSB2YWx1ZSAmIDE7XG4gIHZhbHVlID4+Pj0gMTtcblxuICBpZiAoc2hvdWxkTmVnYXRlKSB7XG4gICAgdmFsdWUgPSAtMHg4MDAwMDAwMCB8IC12YWx1ZTtcbiAgfVxuXG4gIHN0YXRlW2pdICs9IHZhbHVlO1xuICByZXR1cm4gcG9zO1xufVxuXG5mdW5jdGlvbiBoYXNNb3JlVmxxKG1hcHBpbmdzOiBzdHJpbmcsIGk6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgaWYgKGkgPj0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBtYXBwaW5ncy5jaGFyQ29kZUF0KGkpICE9PSBjb21tYTtcbn1cblxuZnVuY3Rpb24gc29ydChsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10pIHtcbiAgbGluZS5zb3J0KHNvcnRDb21wYXJhdG9yKTtcbn1cblxuZnVuY3Rpb24gc29ydENvbXBhcmF0b3IoYTogU291cmNlTWFwU2VnbWVudCwgYjogU291cmNlTWFwU2VnbWVudCk6IG51bWJlciB7XG4gIHJldHVybiBhWzBdIC0gYlswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShkZWNvZGVkOiBTb3VyY2VNYXBNYXBwaW5ncyk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoZGVjb2RlZDogUmVhZG9ubHk8U291cmNlTWFwTWFwcGluZ3M+KTogc3RyaW5nO1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShkZWNvZGVkOiBSZWFkb25seTxTb3VyY2VNYXBNYXBwaW5ncz4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IG5ldyBJbnQzMkFycmF5KDUpIGFzIGFueTtcbiAgY29uc3QgYnVmTGVuZ3RoID0gMTAyNCAqIDE2O1xuICBjb25zdCBzdWJMZW5ndGggPSBidWZMZW5ndGggLSAzNjtcbiAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYnVmTGVuZ3RoKTtcbiAgY29uc3Qgc3ViID0gYnVmLnN1YmFycmF5KDAsIHN1Ykxlbmd0aCk7XG4gIGxldCBwb3MgPSAwO1xuICBsZXQgb3V0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbGluZSA9IGRlY29kZWRbaV07XG4gICAgaWYgKGkgPiAwKSB7XG4gICAgICBpZiAocG9zID09PSBidWZMZW5ndGgpIHtcbiAgICAgICAgb3V0ICs9IHRkLmRlY29kZShidWYpO1xuICAgICAgICBwb3MgPSAwO1xuICAgICAgfVxuICAgICAgYnVmW3BvcysrXSA9IHNlbWljb2xvbjtcbiAgICB9XG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgIHN0YXRlWzBdID0gMDtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc2VnbWVudCA9IGxpbmVbal07XG4gICAgICAvLyBXZSBjYW4gcHVzaCB1cCB0byA1IGludHMsIGVhY2ggaW50IGNhbiB0YWtlIGF0IG1vc3QgNyBjaGFycywgYW5kIHdlXG4gICAgICAvLyBtYXkgcHVzaCBhIGNvbW1hLlxuICAgICAgaWYgKHBvcyA+IHN1Ykxlbmd0aCkge1xuICAgICAgICBvdXQgKz0gdGQuZGVjb2RlKHN1Yik7XG4gICAgICAgIGJ1Zi5jb3B5V2l0aGluKDAsIHN1Ykxlbmd0aCwgcG9zKTtcbiAgICAgICAgcG9zIC09IHN1Ykxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmIChqID4gMCkgYnVmW3BvcysrXSA9IGNvbW1hO1xuXG4gICAgICBwb3MgPSBlbmNvZGVJbnRlZ2VyKGJ1ZiwgcG9zLCBzdGF0ZSwgc2VnbWVudCwgMCk7IC8vIGdlbkNvbHVtblxuXG4gICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDEpIGNvbnRpbnVlO1xuICAgICAgcG9zID0gZW5jb2RlSW50ZWdlcihidWYsIHBvcywgc3RhdGUsIHNlZ21lbnQsIDEpOyAvLyBzb3VyY2VzSW5kZXhcbiAgICAgIHBvcyA9IGVuY29kZUludGVnZXIoYnVmLCBwb3MsIHN0YXRlLCBzZWdtZW50LCAyKTsgLy8gc291cmNlTGluZVxuICAgICAgcG9zID0gZW5jb2RlSW50ZWdlcihidWYsIHBvcywgc3RhdGUsIHNlZ21lbnQsIDMpOyAvLyBzb3VyY2VDb2x1bW5cblxuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSA0KSBjb250aW51ZTtcbiAgICAgIHBvcyA9IGVuY29kZUludGVnZXIoYnVmLCBwb3MsIHN0YXRlLCBzZWdtZW50LCA0KTsgLy8gbmFtZXNJbmRleFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQgKyB0ZC5kZWNvZGUoYnVmLnN1YmFycmF5KDAsIHBvcykpO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVJbnRlZ2VyKFxuICBidWY6IFVpbnQ4QXJyYXksXG4gIHBvczogbnVtYmVyLFxuICBzdGF0ZTogU291cmNlTWFwU2VnbWVudCxcbiAgc2VnbWVudDogU291cmNlTWFwU2VnbWVudCxcbiAgajogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgbmV4dCA9IHNlZ21lbnRbal07XG4gIGxldCBudW0gPSBuZXh0IC0gc3RhdGVbal07XG4gIHN0YXRlW2pdID0gbmV4dDtcblxuICBudW0gPSBudW0gPCAwID8gKC1udW0gPDwgMSkgfCAxIDogbnVtIDw8IDE7XG4gIGRvIHtcbiAgICBsZXQgY2xhbXBlZCA9IG51bSAmIDBiMDExMTExO1xuICAgIG51bSA+Pj49IDU7XG4gICAgaWYgKG51bSA+IDApIGNsYW1wZWQgfD0gMGIxMDAwMDA7XG4gICAgYnVmW3BvcysrXSA9IGludFRvQ2hhcltjbGFtcGVkXTtcbiAgfSB3aGlsZSAobnVtID4gMCk7XG5cbiAgcmV0dXJuIHBvcztcbn1cbiIsICIvLyBNYXRjaGVzIHRoZSBzY2hlbWUgb2YgYSBVUkwsIGVnIFwiaHR0cDovL1wiXG5jb25zdCBzY2hlbWVSZWdleCA9IC9eW1xcdysuLV0rOlxcL1xcLy87XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgcGFydHMgb2YgYSBVUkw6XG4gKiAxLiBTY2hlbWUsIGluY2x1ZGluZyBcIjpcIiwgZ3VhcmFudGVlZC5cbiAqIDIuIFVzZXIvcGFzc3dvcmQsIGluY2x1ZGluZyBcIkBcIiwgb3B0aW9uYWwuXG4gKiAzLiBIb3N0LCBndWFyYW50ZWVkLlxuICogNC4gUG9ydCwgaW5jbHVkaW5nIFwiOlwiLCBvcHRpb25hbC5cbiAqIDUuIFBhdGgsIGluY2x1ZGluZyBcIi9cIiwgb3B0aW9uYWwuXG4gKiA2LiBRdWVyeSwgaW5jbHVkaW5nIFwiP1wiLCBvcHRpb25hbC5cbiAqIDcuIEhhc2gsIGluY2x1ZGluZyBcIiNcIiwgb3B0aW9uYWwuXG4gKi9cbmNvbnN0IHVybFJlZ2V4ID0gL14oW1xcdysuLV0rOilcXC9cXC8oW15ALyM/XSpAKT8oW146LyM/XSopKDpcXGQrKT8oXFwvW14jP10qKT8oXFw/W14jXSopPygjLiopPy87XG5cbi8qKlxuICogRmlsZSBVUkxzIGFyZSB3ZWlyZC4gVGhleSBkb250JyBuZWVkIHRoZSByZWd1bGFyIGAvL2AgaW4gdGhlIHNjaGVtZSwgdGhleSBtYXkgb3IgbWF5IG5vdCBzdGFydFxuICogd2l0aCBhIGxlYWRpbmcgYC9gLCB0aGV5IGNhbiBoYXZlIGEgZG9tYWluIChidXQgb25seSBpZiB0aGV5IGRvbid0IHN0YXJ0IHdpdGggYSBXaW5kb3dzIGRyaXZlKS5cbiAqXG4gKiAxLiBIb3N0LCBvcHRpb25hbC5cbiAqIDIuIFBhdGgsIHdoaWNoIG1heSBpbmNsdWRlIFwiL1wiLCBndWFyYW50ZWVkLlxuICogMy4gUXVlcnksIGluY2x1ZGluZyBcIj9cIiwgb3B0aW9uYWwuXG4gKiA0LiBIYXNoLCBpbmNsdWRpbmcgXCIjXCIsIG9wdGlvbmFsLlxuICovXG5jb25zdCBmaWxlUmVnZXggPSAvXmZpbGU6KD86XFwvXFwvKCg/IVthLXpdOilbXi8jP10qKT8pPyhcXC8/W14jP10qKShcXD9bXiNdKik/KCMuKik/L2k7XG5cbnR5cGUgVXJsID0ge1xuICBzY2hlbWU6IHN0cmluZztcbiAgdXNlcjogc3RyaW5nO1xuICBob3N0OiBzdHJpbmc7XG4gIHBvcnQ6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBxdWVyeTogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIHR5cGU6IFVybFR5cGU7XG59O1xuXG5jb25zdCBlbnVtIFVybFR5cGUge1xuICBFbXB0eSA9IDEsXG4gIEhhc2ggPSAyLFxuICBRdWVyeSA9IDMsXG4gIFJlbGF0aXZlUGF0aCA9IDQsXG4gIEFic29sdXRlUGF0aCA9IDUsXG4gIFNjaGVtZVJlbGF0aXZlID0gNixcbiAgQWJzb2x1dGUgPSA3LFxufVxuXG5mdW5jdGlvbiBpc0Fic29sdXRlVXJsKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNjaGVtZVJlZ2V4LnRlc3QoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBpc1NjaGVtZVJlbGF0aXZlVXJsKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0LnN0YXJ0c1dpdGgoJy8vJyk7XG59XG5cbmZ1bmN0aW9uIGlzQWJzb2x1dGVQYXRoKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0LnN0YXJ0c1dpdGgoJy8nKTtcbn1cblxuZnVuY3Rpb24gaXNGaWxlVXJsKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0LnN0YXJ0c1dpdGgoJ2ZpbGU6Jyk7XG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmUoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15bLj8jXS8udGVzdChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQWJzb2x1dGVVcmwoaW5wdXQ6IHN0cmluZyk6IFVybCB7XG4gIGNvbnN0IG1hdGNoID0gdXJsUmVnZXguZXhlYyhpbnB1dCkhO1xuICByZXR1cm4gbWFrZVVybChcbiAgICBtYXRjaFsxXSxcbiAgICBtYXRjaFsyXSB8fCAnJyxcbiAgICBtYXRjaFszXSxcbiAgICBtYXRjaFs0XSB8fCAnJyxcbiAgICBtYXRjaFs1XSB8fCAnLycsXG4gICAgbWF0Y2hbNl0gfHwgJycsXG4gICAgbWF0Y2hbN10gfHwgJycsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsZVVybChpbnB1dDogc3RyaW5nKTogVXJsIHtcbiAgY29uc3QgbWF0Y2ggPSBmaWxlUmVnZXguZXhlYyhpbnB1dCkhO1xuICBjb25zdCBwYXRoID0gbWF0Y2hbMl07XG4gIHJldHVybiBtYWtlVXJsKFxuICAgICdmaWxlOicsXG4gICAgJycsXG4gICAgbWF0Y2hbMV0gfHwgJycsXG4gICAgJycsXG4gICAgaXNBYnNvbHV0ZVBhdGgocGF0aCkgPyBwYXRoIDogJy8nICsgcGF0aCxcbiAgICBtYXRjaFszXSB8fCAnJyxcbiAgICBtYXRjaFs0XSB8fCAnJyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gbWFrZVVybChcbiAgc2NoZW1lOiBzdHJpbmcsXG4gIHVzZXI6IHN0cmluZyxcbiAgaG9zdDogc3RyaW5nLFxuICBwb3J0OiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgcXVlcnk6IHN0cmluZyxcbiAgaGFzaDogc3RyaW5nLFxuKTogVXJsIHtcbiAgcmV0dXJuIHtcbiAgICBzY2hlbWUsXG4gICAgdXNlcixcbiAgICBob3N0LFxuICAgIHBvcnQsXG4gICAgcGF0aCxcbiAgICBxdWVyeSxcbiAgICBoYXNoLFxuICAgIHR5cGU6IFVybFR5cGUuQWJzb2x1dGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKGlucHV0OiBzdHJpbmcpOiBVcmwge1xuICBpZiAoaXNTY2hlbWVSZWxhdGl2ZVVybChpbnB1dCkpIHtcbiAgICBjb25zdCB1cmwgPSBwYXJzZUFic29sdXRlVXJsKCdodHRwOicgKyBpbnB1dCk7XG4gICAgdXJsLnNjaGVtZSA9ICcnO1xuICAgIHVybC50eXBlID0gVXJsVHlwZS5TY2hlbWVSZWxhdGl2ZTtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgaWYgKGlzQWJzb2x1dGVQYXRoKGlucHV0KSkge1xuICAgIGNvbnN0IHVybCA9IHBhcnNlQWJzb2x1dGVVcmwoJ2h0dHA6Ly9mb28uY29tJyArIGlucHV0KTtcbiAgICB1cmwuc2NoZW1lID0gJyc7XG4gICAgdXJsLmhvc3QgPSAnJztcbiAgICB1cmwudHlwZSA9IFVybFR5cGUuQWJzb2x1dGVQYXRoO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBpZiAoaXNGaWxlVXJsKGlucHV0KSkgcmV0dXJuIHBhcnNlRmlsZVVybChpbnB1dCk7XG5cbiAgaWYgKGlzQWJzb2x1dGVVcmwoaW5wdXQpKSByZXR1cm4gcGFyc2VBYnNvbHV0ZVVybChpbnB1dCk7XG5cbiAgY29uc3QgdXJsID0gcGFyc2VBYnNvbHV0ZVVybCgnaHR0cDovL2Zvby5jb20vJyArIGlucHV0KTtcbiAgdXJsLnNjaGVtZSA9ICcnO1xuICB1cmwuaG9zdCA9ICcnO1xuICB1cmwudHlwZSA9IGlucHV0XG4gICAgPyBpbnB1dC5zdGFydHNXaXRoKCc/JylcbiAgICAgID8gVXJsVHlwZS5RdWVyeVxuICAgICAgOiBpbnB1dC5zdGFydHNXaXRoKCcjJylcbiAgICAgID8gVXJsVHlwZS5IYXNoXG4gICAgICA6IFVybFR5cGUuUmVsYXRpdmVQYXRoXG4gICAgOiBVcmxUeXBlLkVtcHR5O1xuICByZXR1cm4gdXJsO1xufVxuXG5mdW5jdGlvbiBzdHJpcFBhdGhGaWxlbmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBJZiBhIHBhdGggZW5kcyB3aXRoIGEgcGFyZW50IGRpcmVjdG9yeSBcIi4uXCIsIHRoZW4gaXQncyBhIHJlbGF0aXZlIHBhdGggd2l0aCBleGNlc3MgcGFyZW50XG4gIC8vIHBhdGhzLiBJdCdzIG5vdCBhIGZpbGUsIHNvIHdlIGNhbid0IHN0cmlwIGl0LlxuICBpZiAocGF0aC5lbmRzV2l0aCgnLy4uJykpIHJldHVybiBwYXRoO1xuICBjb25zdCBpbmRleCA9IHBhdGgubGFzdEluZGV4T2YoJy8nKTtcbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgaW5kZXggKyAxKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VQYXRocyh1cmw6IFVybCwgYmFzZTogVXJsKSB7XG4gIG5vcm1hbGl6ZVBhdGgoYmFzZSwgYmFzZS50eXBlKTtcblxuICAvLyBJZiB0aGUgcGF0aCBpcyBqdXN0IGEgXCIvXCIsIHRoZW4gaXQgd2FzIGFuIGVtcHR5IHBhdGggdG8gYmVnaW4gd2l0aCAocmVtZW1iZXIsIHdlJ3JlIGEgcmVsYXRpdmVcbiAgLy8gcGF0aCkuXG4gIGlmICh1cmwucGF0aCA9PT0gJy8nKSB7XG4gICAgdXJsLnBhdGggPSBiYXNlLnBhdGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVzb2x1dGlvbiBoYXBwZW5zIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHBhdGgncyBkaXJlY3RvcnksIG5vdCB0aGUgZmlsZS5cbiAgICB1cmwucGF0aCA9IHN0cmlwUGF0aEZpbGVuYW1lKGJhc2UucGF0aCkgKyB1cmwucGF0aDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBwYXRoIGNhbiBoYXZlIGVtcHR5IGRpcmVjdG9yaWVzIFwiLy9cIiwgdW5uZWVkZWQgcGFyZW50cyBcImZvby8uLlwiLCBvciBjdXJyZW50IGRpcmVjdG9yeVxuICogXCJmb28vLlwiLiBXZSBuZWVkIHRvIG5vcm1hbGl6ZSB0byBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHVybDogVXJsLCB0eXBlOiBVcmxUeXBlKSB7XG4gIGNvbnN0IHJlbCA9IHR5cGUgPD0gVXJsVHlwZS5SZWxhdGl2ZVBhdGg7XG4gIGNvbnN0IHBpZWNlcyA9IHVybC5wYXRoLnNwbGl0KCcvJyk7XG5cbiAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZmlyc3QgcGllY2UgYWx3YXlzLCBzbyB0aGF0IHdlIG91dHB1dCBhIGxlYWRpbmcgc2xhc2guIFRoZSBpdGVtIGF0XG4gIC8vIHBpZWNlc1swXSBpcyBhbiBlbXB0eSBzdHJpbmcuXG4gIGxldCBwb2ludGVyID0gMTtcblxuICAvLyBQb3NpdGl2ZSBpcyB0aGUgbnVtYmVyIG9mIHJlYWwgZGlyZWN0b3JpZXMgd2UndmUgb3V0cHV0LCB1c2VkIGZvciBwb3BwaW5nIGEgcGFyZW50IGRpcmVjdG9yeS5cbiAgLy8gRWcsIFwiZm9vL2Jhci8uLlwiIHdpbGwgaGF2ZSBhIHBvc2l0aXZlIDIsIGFuZCB3ZSBjYW4gZGVjcmVtZW50IHRvIGJlIGxlZnQgd2l0aCBqdXN0IFwiZm9vXCIuXG4gIGxldCBwb3NpdGl2ZSA9IDA7XG5cbiAgLy8gV2UgbmVlZCB0byBrZWVwIGEgdHJhaWxpbmcgc2xhc2ggaWYgd2UgZW5jb3VudGVyIGFuIGVtcHR5IGRpcmVjdG9yeSAoZWcsIHNwbGl0dGluZyBcImZvby9cIiB3aWxsXG4gIC8vIGdlbmVyYXRlIGBbXCJmb29cIiwgXCJcIl1gIHBpZWNlcykuIEFuZCwgaWYgd2UgcG9wIGEgcGFyZW50IGRpcmVjdG9yeS4gQnV0IG9uY2Ugd2UgZW5jb3VudGVyIGFcbiAgLy8gcmVhbCBkaXJlY3RvcnksIHdlIHdvbid0IG5lZWQgdG8gYXBwZW5kLCB1bmxlc3MgdGhlIG90aGVyIGNvbmRpdGlvbnMgaGFwcGVuIGFnYWluLlxuICBsZXQgYWRkVHJhaWxpbmdTbGFzaCA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcGllY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcGllY2UgPSBwaWVjZXNbaV07XG5cbiAgICAvLyBBbiBlbXB0eSBkaXJlY3RvcnksIGNvdWxkIGJlIGEgdHJhaWxpbmcgc2xhc2gsIG9yIGp1c3QgYSBkb3VibGUgXCIvL1wiIGluIHRoZSBwYXRoLlxuICAgIGlmICghcGllY2UpIHtcbiAgICAgIGFkZFRyYWlsaW5nU2xhc2ggPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgcmVhbCBkaXJlY3RvcnksIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBhcHBlbmQgYW55bW9yZS5cbiAgICBhZGRUcmFpbGluZ1NsYXNoID0gZmFsc2U7XG5cbiAgICAvLyBBIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCB3ZSBjYW4gYWx3YXlzIGRyb3AuXG4gICAgaWYgKHBpZWNlID09PSAnLicpIGNvbnRpbnVlO1xuXG4gICAgLy8gQSBwYXJlbnQgZGlyZWN0b3J5LCB3ZSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlYWwgZGlyZWN0b3JpZXMgd2UgY2FuIHBvcC4gRWxzZSwgd2VcbiAgICAvLyBoYXZlIGFuIGV4Y2VzcyBvZiBwYXJlbnRzLCBhbmQgd2UnbGwgbmVlZCB0byBrZWVwIHRoZSBcIi4uXCIuXG4gICAgaWYgKHBpZWNlID09PSAnLi4nKSB7XG4gICAgICBpZiAocG9zaXRpdmUpIHtcbiAgICAgICAgYWRkVHJhaWxpbmdTbGFzaCA9IHRydWU7XG4gICAgICAgIHBvc2l0aXZlLS07XG4gICAgICAgIHBvaW50ZXItLTtcbiAgICAgIH0gZWxzZSBpZiAocmVsKSB7XG4gICAgICAgIC8vIElmIHdlJ3JlIGluIGEgcmVsYXRpdmVQYXRoLCB0aGVuIHdlIG5lZWQgdG8ga2VlcCB0aGUgZXhjZXNzIHBhcmVudHMuIEVsc2UsIGluIGFuIGFic29sdXRlXG4gICAgICAgIC8vIFVSTCwgcHJvdG9jb2wgcmVsYXRpdmUgVVJMLCBvciBhbiBhYnNvbHV0ZSBwYXRoLCB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgZXhjZXNzLlxuICAgICAgICBwaWVjZXNbcG9pbnRlcisrXSA9IHBpZWNlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gV2UndmUgZW5jb3VudGVyZWQgYSByZWFsIGRpcmVjdG9yeS4gTW92ZSBpdCB0byB0aGUgbmV4dCBpbnNlcnRpb24gcG9pbnRlciwgd2hpY2ggYWNjb3VudHMgZm9yXG4gICAgLy8gYW55IHBvcHBlZCBvciBkcm9wcGVkIGRpcmVjdG9yaWVzLlxuICAgIHBpZWNlc1twb2ludGVyKytdID0gcGllY2U7XG4gICAgcG9zaXRpdmUrKztcbiAgfVxuXG4gIGxldCBwYXRoID0gJyc7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRlcjsgaSsrKSB7XG4gICAgcGF0aCArPSAnLycgKyBwaWVjZXNbaV07XG4gIH1cbiAgaWYgKCFwYXRoIHx8IChhZGRUcmFpbGluZ1NsYXNoICYmICFwYXRoLmVuZHNXaXRoKCcvLi4nKSkpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuICB1cmwucGF0aCA9IHBhdGg7XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gcmVzb2x2ZSBgaW5wdXRgIFVSTC9wYXRoIHJlbGF0aXZlIHRvIGBiYXNlYC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZShpbnB1dDogc3RyaW5nLCBiYXNlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoIWlucHV0ICYmICFiYXNlKSByZXR1cm4gJyc7XG5cbiAgY29uc3QgdXJsID0gcGFyc2VVcmwoaW5wdXQpO1xuICBsZXQgaW5wdXRUeXBlID0gdXJsLnR5cGU7XG5cbiAgaWYgKGJhc2UgJiYgaW5wdXRUeXBlICE9PSBVcmxUeXBlLkFic29sdXRlKSB7XG4gICAgY29uc3QgYmFzZVVybCA9IHBhcnNlVXJsKGJhc2UpO1xuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVVybC50eXBlO1xuXG4gICAgc3dpdGNoIChpbnB1dFR5cGUpIHtcbiAgICAgIGNhc2UgVXJsVHlwZS5FbXB0eTpcbiAgICAgICAgdXJsLmhhc2ggPSBiYXNlVXJsLmhhc2g7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBVcmxUeXBlLkhhc2g6XG4gICAgICAgIHVybC5xdWVyeSA9IGJhc2VVcmwucXVlcnk7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBVcmxUeXBlLlF1ZXJ5OlxuICAgICAgY2FzZSBVcmxUeXBlLlJlbGF0aXZlUGF0aDpcbiAgICAgICAgbWVyZ2VQYXRocyh1cmwsIGJhc2VVcmwpO1xuICAgICAgLy8gZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgVXJsVHlwZS5BYnNvbHV0ZVBhdGg6XG4gICAgICAgIC8vIFRoZSBob3N0LCB1c2VyLCBhbmQgcG9ydCBhcmUgam9pbmVkLCB5b3UgY2FuJ3QgY29weSBvbmUgd2l0aG91dCB0aGUgb3RoZXJzLlxuICAgICAgICB1cmwudXNlciA9IGJhc2VVcmwudXNlcjtcbiAgICAgICAgdXJsLmhvc3QgPSBiYXNlVXJsLmhvc3Q7XG4gICAgICAgIHVybC5wb3J0ID0gYmFzZVVybC5wb3J0O1xuICAgICAgLy8gZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgVXJsVHlwZS5TY2hlbWVSZWxhdGl2ZTpcbiAgICAgICAgLy8gVGhlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhIHNjaGVtYSBhdCBsZWFzdCwgc28gd2UgbmVlZCB0byBjb3B5IGF0IGxlYXN0IHRoYXQgb3Zlci5cbiAgICAgICAgdXJsLnNjaGVtZSA9IGJhc2VVcmwuc2NoZW1lO1xuICAgIH1cbiAgICBpZiAoYmFzZVR5cGUgPiBpbnB1dFR5cGUpIGlucHV0VHlwZSA9IGJhc2VUeXBlO1xuICB9XG5cbiAgbm9ybWFsaXplUGF0aCh1cmwsIGlucHV0VHlwZSk7XG5cbiAgY29uc3QgcXVlcnlIYXNoID0gdXJsLnF1ZXJ5ICsgdXJsLmhhc2g7XG4gIHN3aXRjaCAoaW5wdXRUeXBlKSB7XG4gICAgLy8gVGhpcyBpcyBpbXBvc3NpYmxlLCBiZWNhdXNlIG9mIHRoZSBlbXB0eSBjaGVja3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbi5cbiAgICAvLyBjYXNlIFVybFR5cGUuRW1wdHk6XG5cbiAgICBjYXNlIFVybFR5cGUuSGFzaDpcbiAgICBjYXNlIFVybFR5cGUuUXVlcnk6XG4gICAgICByZXR1cm4gcXVlcnlIYXNoO1xuXG4gICAgY2FzZSBVcmxUeXBlLlJlbGF0aXZlUGF0aDoge1xuICAgICAgLy8gVGhlIGZpcnN0IGNoYXIgaXMgYWx3YXlzIGEgXCIvXCIsIGFuZCB3ZSBuZWVkIGl0IHRvIGJlIHJlbGF0aXZlLlxuICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRoLnNsaWNlKDEpO1xuXG4gICAgICBpZiAoIXBhdGgpIHJldHVybiBxdWVyeUhhc2ggfHwgJy4nO1xuXG4gICAgICBpZiAoaXNSZWxhdGl2ZShiYXNlIHx8IGlucHV0KSAmJiAhaXNSZWxhdGl2ZShwYXRoKSkge1xuICAgICAgICAvLyBJZiBiYXNlIHN0YXJ0ZWQgd2l0aCBhIGxlYWRpbmcgXCIuXCIsIG9yIHRoZXJlIGlzIG5vIGJhc2UgYW5kIGlucHV0IHN0YXJ0ZWQgd2l0aCBhIFwiLlwiLFxuICAgICAgICAvLyB0aGVuIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlbGF0aXZlIHBhdGggc3RhcnRzIHdpdGggYSBcIi5cIi4gV2UgZG9uJ3Qga25vdyBpZlxuICAgICAgICAvLyByZWxhdGl2ZSBzdGFydHMgd2l0aCBhIFwiLi5cIiwgdGhvdWdoLCBzbyBjaGVjayBiZWZvcmUgcHJlcGVuZGluZy5cbiAgICAgICAgcmV0dXJuICcuLycgKyBwYXRoICsgcXVlcnlIYXNoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGF0aCArIHF1ZXJ5SGFzaDtcbiAgICB9XG5cbiAgICBjYXNlIFVybFR5cGUuQWJzb2x1dGVQYXRoOlxuICAgICAgcmV0dXJuIHVybC5wYXRoICsgcXVlcnlIYXNoO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1cmwuc2NoZW1lICsgJy8vJyArIHVybC51c2VyICsgdXJsLmhvc3QgKyB1cmwucG9ydCArIHVybC5wYXRoICsgcXVlcnlIYXNoO1xuICB9XG59XG4iLCAiaW1wb3J0IHJlc29sdmVVcmkgZnJvbSAnQGpyaWRnZXdlbGwvcmVzb2x2ZS11cmknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlKGlucHV0OiBzdHJpbmcsIGJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIC8vIFRoZSBiYXNlIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGEgZGlyZWN0b3J5LCBpZiBpdCdzIG5vdCBlbXB0eS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9ibG9iLzhjYjNlZTU3L2xpYi91dGlsLmpzI0wzMjdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nocm9taXVtL2Nocm9taXVtL2Jsb2IvZGE0YWRiYjMvdGhpcmRfcGFydHkvYmxpbmsvcmVuZGVyZXIvZGV2dG9vbHMvZnJvbnRfZW5kL3Nkay9Tb3VyY2VNYXAuanMjTDQwMC1MNDAxXG4gIGlmIChiYXNlICYmICFiYXNlLmVuZHNXaXRoKCcvJykpIGJhc2UgKz0gJy8nO1xuXG4gIHJldHVybiByZXNvbHZlVXJpKGlucHV0LCBiYXNlKTtcbn1cbiIsICIvKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBcIi9cIiwgYnV0IGxlYXZlcyB0aGUgc2xhc2guXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwRmlsZW5hbWUocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmICghcGF0aCkgcmV0dXJuICcnO1xuICBjb25zdCBpbmRleCA9IHBhdGgubGFzdEluZGV4T2YoJy8nKTtcbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgaW5kZXggKyAxKTtcbn1cbiIsICJ0eXBlIEdlbmVyYXRlZENvbHVtbiA9IG51bWJlcjtcbnR5cGUgU291cmNlc0luZGV4ID0gbnVtYmVyO1xudHlwZSBTb3VyY2VMaW5lID0gbnVtYmVyO1xudHlwZSBTb3VyY2VDb2x1bW4gPSBudW1iZXI7XG50eXBlIE5hbWVzSW5kZXggPSBudW1iZXI7XG5cbnR5cGUgR2VuZXJhdGVkTGluZSA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgU291cmNlTWFwU2VnbWVudCA9XG4gIHwgW0dlbmVyYXRlZENvbHVtbl1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uLCBTb3VyY2VzSW5kZXgsIFNvdXJjZUxpbmUsIFNvdXJjZUNvbHVtbl1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uLCBTb3VyY2VzSW5kZXgsIFNvdXJjZUxpbmUsIFNvdXJjZUNvbHVtbiwgTmFtZXNJbmRleF07XG5cbmV4cG9ydCB0eXBlIFJldmVyc2VTZWdtZW50ID0gW1NvdXJjZUNvbHVtbiwgR2VuZXJhdGVkTGluZSwgR2VuZXJhdGVkQ29sdW1uXTtcblxuZXhwb3J0IGNvbnN0IENPTFVNTiA9IDA7XG5leHBvcnQgY29uc3QgU09VUkNFU19JTkRFWCA9IDE7XG5leHBvcnQgY29uc3QgU09VUkNFX0xJTkUgPSAyO1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9DT0xVTU4gPSAzO1xuZXhwb3J0IGNvbnN0IE5BTUVTX0lOREVYID0gNDtcblxuZXhwb3J0IGNvbnN0IFJFVl9HRU5FUkFURURfTElORSA9IDE7XG5leHBvcnQgY29uc3QgUkVWX0dFTkVSQVRFRF9DT0xVTU4gPSAyO1xuIiwgImltcG9ydCB7IENPTFVNTiB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWF5YmVTb3J0KFxuICBtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sXG4gIG93bmVkOiBib29sZWFuLFxuKTogU291cmNlTWFwU2VnbWVudFtdW10ge1xuICBjb25zdCB1bnNvcnRlZEluZGV4ID0gbmV4dFVuc29ydGVkU2VnbWVudExpbmUobWFwcGluZ3MsIDApO1xuICBpZiAodW5zb3J0ZWRJbmRleCA9PT0gbWFwcGluZ3MubGVuZ3RoKSByZXR1cm4gbWFwcGluZ3M7XG5cbiAgLy8gSWYgd2Ugb3duIHRoZSBhcnJheSAobWVhbmluZyB3ZSBwYXJzZWQgaXQgZnJvbSBKU09OKSwgdGhlbiB3ZSdyZSBmcmVlIHRvIGRpcmVjdGx5IG11dGF0ZSBpdC4gSWZcbiAgLy8gbm90LCB3ZSBkbyBub3Qgd2FudCB0byBtb2RpZnkgdGhlIGNvbnN1bWVyJ3MgaW5wdXQgYXJyYXkuXG4gIGlmICghb3duZWQpIG1hcHBpbmdzID0gbWFwcGluZ3Muc2xpY2UoKTtcblxuICBmb3IgKGxldCBpID0gdW5zb3J0ZWRJbmRleDsgaSA8IG1hcHBpbmdzLmxlbmd0aDsgaSA9IG5leHRVbnNvcnRlZFNlZ21lbnRMaW5lKG1hcHBpbmdzLCBpICsgMSkpIHtcbiAgICBtYXBwaW5nc1tpXSA9IHNvcnRTZWdtZW50cyhtYXBwaW5nc1tpXSwgb3duZWQpO1xuICB9XG4gIHJldHVybiBtYXBwaW5ncztcbn1cblxuZnVuY3Rpb24gbmV4dFVuc29ydGVkU2VnbWVudExpbmUobWFwcGluZ3M6IFNvdXJjZU1hcFNlZ21lbnRbXVtdLCBzdGFydDogbnVtYmVyKTogbnVtYmVyIHtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWlzU29ydGVkKG1hcHBpbmdzW2ldKSkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmdzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNTb3J0ZWQobGluZTogU291cmNlTWFwU2VnbWVudFtdKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGogPSAxOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgIGlmIChsaW5lW2pdW0NPTFVNTl0gPCBsaW5lW2ogLSAxXVtDT0xVTU5dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzb3J0U2VnbWVudHMobGluZTogU291cmNlTWFwU2VnbWVudFtdLCBvd25lZDogYm9vbGVhbik6IFNvdXJjZU1hcFNlZ21lbnRbXSB7XG4gIGlmICghb3duZWQpIGxpbmUgPSBsaW5lLnNsaWNlKCk7XG4gIHJldHVybiBsaW5lLnNvcnQoc29ydENvbXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBzb3J0Q29tcGFyYXRvcihhOiBTb3VyY2VNYXBTZWdtZW50LCBiOiBTb3VyY2VNYXBTZWdtZW50KTogbnVtYmVyIHtcbiAgcmV0dXJuIGFbQ09MVU1OXSAtIGJbQ09MVU1OXTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQsIFJldmVyc2VTZWdtZW50IH0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5pbXBvcnQgeyBDT0xVTU4gfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuZXhwb3J0IHR5cGUgTWVtb1N0YXRlID0ge1xuICBsYXN0S2V5OiBudW1iZXI7XG4gIGxhc3ROZWVkbGU6IG51bWJlcjtcbiAgbGFzdEluZGV4OiBudW1iZXI7XG59O1xuXG5leHBvcnQgbGV0IGZvdW5kID0gZmFsc2U7XG5cbi8qKlxuICogQSBiaW5hcnkgc2VhcmNoIGltcGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyB0aGUgaW5kZXggaWYgYSBtYXRjaCBpcyBmb3VuZC5cbiAqIElmIG5vIG1hdGNoIGlzIGZvdW5kLCB0aGVuIHRoZSBsZWZ0LWluZGV4ICh0aGUgaW5kZXggYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVtIHRoYXQgY29tZXMganVzdFxuICogYmVmb3JlIHRoZSBkZXNpcmVkIGluZGV4KSBpcyByZXR1cm5lZC4gVG8gbWFpbnRhaW4gcHJvcGVyIHNvcnQgb3JkZXIsIGEgc3BsaWNlIHdvdWxkIGhhcHBlbiBhdFxuICogdGhlIG5leHQgaW5kZXg6XG4gKlxuICogYGBganNcbiAqIGNvbnN0IGFycmF5ID0gWzEsIDNdO1xuICogY29uc3QgbmVlZGxlID0gMjtcbiAqIGNvbnN0IGluZGV4ID0gYmluYXJ5U2VhcmNoKGFycmF5LCBuZWVkbGUsIChpdGVtLCBuZWVkbGUpID0+IGl0ZW0gLSBuZWVkbGUpO1xuICpcbiAqIGFzc2VydC5lcXVhbChpbmRleCwgMCk7XG4gKiBhcnJheS5zcGxpY2UoaW5kZXggKyAxLCAwLCBuZWVkbGUpO1xuICogYXNzZXJ0LmRlZXBFcXVhbChhcnJheSwgWzEsIDIsIDNdKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluYXJ5U2VhcmNoKFxuICBoYXlzdGFjazogU291cmNlTWFwU2VnbWVudFtdIHwgUmV2ZXJzZVNlZ21lbnRbXSxcbiAgbmVlZGxlOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBoaWdoOiBudW1iZXIsXG4pOiBudW1iZXIge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWQgPSBsb3cgKyAoKGhpZ2ggLSBsb3cpID4+IDEpO1xuICAgIGNvbnN0IGNtcCA9IGhheXN0YWNrW21pZF1bQ09MVU1OXSAtIG5lZWRsZTtcblxuICAgIGlmIChjbXAgPT09IDApIHtcbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuXG4gICAgaWYgKGNtcCA8IDApIHtcbiAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2ggPSBtaWQgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGZvdW5kID0gZmFsc2U7XG4gIHJldHVybiBsb3cgLSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBwZXJCb3VuZChcbiAgaGF5c3RhY2s6IFNvdXJjZU1hcFNlZ21lbnRbXSB8IFJldmVyc2VTZWdtZW50W10sXG4gIG5lZWRsZTogbnVtYmVyLFxuICBpbmRleDogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaW5kZXggPSBpKyspIHtcbiAgICBpZiAoaGF5c3RhY2tbaV1bQ09MVU1OXSAhPT0gbmVlZGxlKSBicmVhaztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb3dlckJvdW5kKFxuICBoYXlzdGFjazogU291cmNlTWFwU2VnbWVudFtdIHwgUmV2ZXJzZVNlZ21lbnRbXSxcbiAgbmVlZGxlOiBudW1iZXIsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGluZGV4ID0gaS0tKSB7XG4gICAgaWYgKGhheXN0YWNrW2ldW0NPTFVNTl0gIT09IG5lZWRsZSkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVtb2l6ZWRTdGF0ZSgpOiBNZW1vU3RhdGUge1xuICByZXR1cm4ge1xuICAgIGxhc3RLZXk6IC0xLFxuICAgIGxhc3ROZWVkbGU6IC0xLFxuICAgIGxhc3RJbmRleDogLTEsXG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBvdmVybHkgY29tcGxpY2F0ZWQgYmVhc3QgaXMganVzdCB0byByZWNvcmQgdGhlIGxhc3QgdGVzdGVkIGxpbmUvY29sdW1uIGFuZCB0aGUgcmVzdWx0aW5nXG4gKiBpbmRleCwgYWxsb3dpbmcgdXMgdG8gc2tpcCBhIGZldyB0ZXN0cyBpZiBtYXBwaW5ncyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtb2l6ZWRCaW5hcnlTZWFyY2goXG4gIGhheXN0YWNrOiBTb3VyY2VNYXBTZWdtZW50W10gfCBSZXZlcnNlU2VnbWVudFtdLFxuICBuZWVkbGU6IG51bWJlcixcbiAgc3RhdGU6IE1lbW9TdGF0ZSxcbiAga2V5OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCB7IGxhc3RLZXksIGxhc3ROZWVkbGUsIGxhc3RJbmRleCB9ID0gc3RhdGU7XG5cbiAgbGV0IGxvdyA9IDA7XG4gIGxldCBoaWdoID0gaGF5c3RhY2subGVuZ3RoIC0gMTtcbiAgaWYgKGtleSA9PT0gbGFzdEtleSkge1xuICAgIGlmIChuZWVkbGUgPT09IGxhc3ROZWVkbGUpIHtcbiAgICAgIGZvdW5kID0gbGFzdEluZGV4ICE9PSAtMSAmJiBoYXlzdGFja1tsYXN0SW5kZXhdW0NPTFVNTl0gPT09IG5lZWRsZTtcbiAgICAgIHJldHVybiBsYXN0SW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRsZSA+PSBsYXN0TmVlZGxlKSB7XG4gICAgICAvLyBsYXN0SW5kZXggbWF5IGJlIC0xIGlmIHRoZSBwcmV2aW91cyBuZWVkbGUgd2FzIG5vdCBmb3VuZC5cbiAgICAgIGxvdyA9IGxhc3RJbmRleCA9PT0gLTEgPyAwIDogbGFzdEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdoID0gbGFzdEluZGV4O1xuICAgIH1cbiAgfVxuICBzdGF0ZS5sYXN0S2V5ID0ga2V5O1xuICBzdGF0ZS5sYXN0TmVlZGxlID0gbmVlZGxlO1xuXG4gIHJldHVybiAoc3RhdGUubGFzdEluZGV4ID0gYmluYXJ5U2VhcmNoKGhheXN0YWNrLCBuZWVkbGUsIGxvdywgaGlnaCkpO1xufVxuIiwgImltcG9ydCB7IENPTFVNTiwgU09VUkNFU19JTkRFWCwgU09VUkNFX0xJTkUsIFNPVVJDRV9DT0xVTU4gfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmltcG9ydCB7IG1lbW9pemVkQmluYXJ5U2VhcmNoLCB1cHBlckJvdW5kIH0gZnJvbSAnLi9iaW5hcnktc2VhcmNoJztcblxuaW1wb3J0IHR5cGUgeyBSZXZlcnNlU2VnbWVudCwgU291cmNlTWFwU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuaW1wb3J0IHR5cGUgeyBNZW1vU3RhdGUgfSBmcm9tICcuL2JpbmFyeS1zZWFyY2gnO1xuXG5leHBvcnQgdHlwZSBTb3VyY2UgPSB7XG4gIF9fcHJvdG9fXzogbnVsbDtcbiAgW2xpbmU6IG51bWJlcl06IEV4Y2x1ZGU8UmV2ZXJzZVNlZ21lbnQsIFtudW1iZXJdPltdO1xufTtcblxuLy8gUmVidWlsZHMgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcywgd2l0aCBtYXBwaW5ncyB0aGF0IGFyZSBvcmRlcmVkIGJ5IHNvdXJjZSBsaW5lL2NvbHVtbiBpbnN0ZWFkXG4vLyBvZiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEJ5U291cmNlcyhcbiAgZGVjb2RlZDogcmVhZG9ubHkgU291cmNlTWFwU2VnbWVudFtdW10sXG4gIG1lbW9zOiBNZW1vU3RhdGVbXSxcbik6IFNvdXJjZVtdIHtcbiAgY29uc3Qgc291cmNlczogU291cmNlW10gPSBtZW1vcy5tYXAoYnVpbGROdWxsQXJyYXkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBkZWNvZGVkW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc2VnID0gbGluZVtqXTtcbiAgICAgIGlmIChzZWcubGVuZ3RoID09PSAxKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzZWdbU09VUkNFU19JTkRFWF07XG4gICAgICBjb25zdCBzb3VyY2VMaW5lID0gc2VnW1NPVVJDRV9MSU5FXTtcbiAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbiA9IHNlZ1tTT1VSQ0VfQ09MVU1OXTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU291cmNlID0gc291cmNlc1tzb3VyY2VJbmRleF07XG4gICAgICBjb25zdCBvcmlnaW5hbExpbmUgPSAob3JpZ2luYWxTb3VyY2Vbc291cmNlTGluZV0gfHw9IFtdKTtcbiAgICAgIGNvbnN0IG1lbW8gPSBtZW1vc1tzb3VyY2VJbmRleF07XG5cbiAgICAgIC8vIFRoZSBiaW5hcnkgc2VhcmNoIGVpdGhlciBmb3VuZCBhIG1hdGNoLCBvciBpdCBmb3VuZCB0aGUgbGVmdC1pbmRleCBqdXN0IGJlZm9yZSB3aGVyZSB0aGVcbiAgICAgIC8vIHNlZ21lbnQgc2hvdWxkIGdvLiBFaXRoZXIgd2F5LCB3ZSB3YW50IHRvIGluc2VydCBhZnRlciB0aGF0LiBBbmQgdGhlcmUgbWF5IGJlIG11bHRpcGxlXG4gICAgICAvLyBnZW5lcmF0ZWQgc2VnbWVudHMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbmFsIGxvY2F0aW9uLCBzbyB0aGVyZSBtYXkgbmVlZCB0byBtb3ZlIHNldmVyYWxcbiAgICAgIC8vIGluZGV4ZXMgYmVmb3JlIHdlIGZpbmQgd2hlcmUgd2UgbmVlZCB0byBpbnNlcnQuXG4gICAgICBsZXQgaW5kZXggPSB1cHBlckJvdW5kKFxuICAgICAgICBvcmlnaW5hbExpbmUsXG4gICAgICAgIHNvdXJjZUNvbHVtbixcbiAgICAgICAgbWVtb2l6ZWRCaW5hcnlTZWFyY2gob3JpZ2luYWxMaW5lLCBzb3VyY2VDb2x1bW4sIG1lbW8sIHNvdXJjZUxpbmUpLFxuICAgICAgKTtcblxuICAgICAgbWVtby5sYXN0SW5kZXggPSArK2luZGV4O1xuICAgICAgaW5zZXJ0KG9yaWdpbmFsTGluZSwgaW5kZXgsIFtzb3VyY2VDb2x1bW4sIGksIHNlZ1tDT0xVTU5dXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydDxUPihhcnJheTogVFtdLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogVCkge1xuICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoOyBpID4gaW5kZXg7IGktLSkge1xuICAgIGFycmF5W2ldID0gYXJyYXlbaSAtIDFdO1xuICB9XG4gIGFycmF5W2luZGV4XSA9IHZhbHVlO1xufVxuXG4vLyBOdWxsIGFycmF5cyBhbGxvdyB1cyB0byB1c2Ugb3JkZXJlZCBpbmRleCBrZXlzIHdpdGhvdXQgYWN0dWFsbHkgYWxsb2NhdGluZyBjb250aWd1b3VzIG1lbW9yeSBsaWtlXG4vLyBhIHJlYWwgYXJyYXkuIFdlIHVzZSBhIG51bGwtcHJvdG90eXBlIG9iamVjdCB0byBhdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uIGFuZCBkZW9wdGltaXphdGlvbnMuXG4vLyBOdW1lcmljIHByb3BlcnRpZXMgb24gb2JqZWN0cyBhcmUgbWFnaWNhbGx5IHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIGVuZ2luZSByZWdhcmRsZXNzIG9mXG4vLyB0aGUgaW5zZXJ0aW9uIG9yZGVyLiBTbywgYnkgc2V0dGluZyBhbnkgbnVtZXJpYyBrZXlzLCBldmVuIG91dCBvZiBvcmRlciwgd2UnbGwgZ2V0IGFzY2VuZGluZ1xuLy8gb3JkZXIgd2hlbiBpdGVyYXRpbmcgd2l0aCBmb3ItaW4uXG5mdW5jdGlvbiBidWlsZE51bGxBcnJheTxUIGV4dGVuZHMgeyBfX3Byb3RvX186IG51bGwgfT4oKTogVCB7XG4gIHJldHVybiB7IF9fcHJvdG9fXzogbnVsbCB9IGFzIFQ7XG59XG4iLCAiaW1wb3J0IHsgVHJhY2VNYXAsIHByZXNvcnRlZERlY29kZWRNYXAsIGRlY29kZWRNYXBwaW5ncyB9IGZyb20gJy4vdHJhY2UtbWFwcGluZyc7XG5pbXBvcnQge1xuICBDT0xVTU4sXG4gIFNPVVJDRVNfSU5ERVgsXG4gIFNPVVJDRV9MSU5FLFxuICBTT1VSQ0VfQ09MVU1OLFxuICBOQU1FU19JTkRFWCxcbn0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRGVjb2RlZFNvdXJjZU1hcCxcbiAgRGVjb2RlZFNvdXJjZU1hcFhJbnB1dCxcbiAgRW5jb2RlZFNvdXJjZU1hcFhJbnB1dCxcbiAgU2VjdGlvbmVkU291cmNlTWFwWElucHV0LFxuICBTZWN0aW9uZWRTb3VyY2VNYXBJbnB1dCxcbiAgU2VjdGlvblhJbnB1dCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxudHlwZSBBbnlNYXAgPSB7XG4gIG5ldyAobWFwOiBTZWN0aW9uZWRTb3VyY2VNYXBJbnB1dCwgbWFwVXJsPzogc3RyaW5nIHwgbnVsbCk6IFRyYWNlTWFwO1xuICAobWFwOiBTZWN0aW9uZWRTb3VyY2VNYXBJbnB1dCwgbWFwVXJsPzogc3RyaW5nIHwgbnVsbCk6IFRyYWNlTWFwO1xufTtcblxuZXhwb3J0IGNvbnN0IEFueU1hcDogQW55TWFwID0gZnVuY3Rpb24gKG1hcCwgbWFwVXJsKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlKG1hcCk7XG5cbiAgaWYgKCEoJ3NlY3Rpb25zJyBpbiBwYXJzZWQpKSB7XG4gICAgcmV0dXJuIG5ldyBUcmFjZU1hcChwYXJzZWQgYXMgRGVjb2RlZFNvdXJjZU1hcFhJbnB1dCB8IEVuY29kZWRTb3VyY2VNYXBYSW5wdXQsIG1hcFVybCk7XG4gIH1cblxuICBjb25zdCBtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10gPSBbXTtcbiAgY29uc3Qgc291cmNlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc291cmNlc0NvbnRlbnQ6IChzdHJpbmcgfCBudWxsKVtdID0gW107XG4gIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBpZ25vcmVMaXN0OiBudW1iZXJbXSA9IFtdO1xuXG4gIHJlY3Vyc2UoXG4gICAgcGFyc2VkLFxuICAgIG1hcFVybCxcbiAgICBtYXBwaW5ncyxcbiAgICBzb3VyY2VzLFxuICAgIHNvdXJjZXNDb250ZW50LFxuICAgIG5hbWVzLFxuICAgIGlnbm9yZUxpc3QsXG4gICAgMCxcbiAgICAwLFxuICAgIEluZmluaXR5LFxuICAgIEluZmluaXR5LFxuICApO1xuXG4gIGNvbnN0IGpvaW5lZDogRGVjb2RlZFNvdXJjZU1hcCA9IHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6IHBhcnNlZC5maWxlLFxuICAgIG5hbWVzLFxuICAgIHNvdXJjZXMsXG4gICAgc291cmNlc0NvbnRlbnQsXG4gICAgbWFwcGluZ3MsXG4gICAgaWdub3JlTGlzdCxcbiAgfTtcblxuICByZXR1cm4gcHJlc29ydGVkRGVjb2RlZE1hcChqb2luZWQpO1xufSBhcyBBbnlNYXA7XG5cbmZ1bmN0aW9uIHBhcnNlPFQ+KG1hcDogVCk6IEV4Y2x1ZGU8VCwgc3RyaW5nPiB7XG4gIHJldHVybiB0eXBlb2YgbWFwID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UobWFwKSA6IG1hcDtcbn1cblxuZnVuY3Rpb24gcmVjdXJzZShcbiAgaW5wdXQ6IFNlY3Rpb25lZFNvdXJjZU1hcFhJbnB1dCxcbiAgbWFwVXJsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sXG4gIHNvdXJjZXM6IHN0cmluZ1tdLFxuICBzb3VyY2VzQ29udGVudDogKHN0cmluZyB8IG51bGwpW10sXG4gIG5hbWVzOiBzdHJpbmdbXSxcbiAgaWdub3JlTGlzdDogbnVtYmVyW10sXG4gIGxpbmVPZmZzZXQ6IG51bWJlcixcbiAgY29sdW1uT2Zmc2V0OiBudW1iZXIsXG4gIHN0b3BMaW5lOiBudW1iZXIsXG4gIHN0b3BDb2x1bW46IG51bWJlcixcbikge1xuICBjb25zdCB7IHNlY3Rpb25zIH0gPSBpbnB1dDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHsgbWFwLCBvZmZzZXQgfSA9IHNlY3Rpb25zW2ldO1xuXG4gICAgbGV0IHNsID0gc3RvcExpbmU7XG4gICAgbGV0IHNjID0gc3RvcENvbHVtbjtcbiAgICBpZiAoaSArIDEgPCBzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSBzZWN0aW9uc1tpICsgMV0ub2Zmc2V0O1xuICAgICAgc2wgPSBNYXRoLm1pbihzdG9wTGluZSwgbGluZU9mZnNldCArIG5leHRPZmZzZXQubGluZSk7XG5cbiAgICAgIGlmIChzbCA9PT0gc3RvcExpbmUpIHtcbiAgICAgICAgc2MgPSBNYXRoLm1pbihzdG9wQ29sdW1uLCBjb2x1bW5PZmZzZXQgKyBuZXh0T2Zmc2V0LmNvbHVtbik7XG4gICAgICB9IGVsc2UgaWYgKHNsIDwgc3RvcExpbmUpIHtcbiAgICAgICAgc2MgPSBjb2x1bW5PZmZzZXQgKyBuZXh0T2Zmc2V0LmNvbHVtbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRTZWN0aW9uKFxuICAgICAgbWFwLFxuICAgICAgbWFwVXJsLFxuICAgICAgbWFwcGluZ3MsXG4gICAgICBzb3VyY2VzLFxuICAgICAgc291cmNlc0NvbnRlbnQsXG4gICAgICBuYW1lcyxcbiAgICAgIGlnbm9yZUxpc3QsXG4gICAgICBsaW5lT2Zmc2V0ICsgb2Zmc2V0LmxpbmUsXG4gICAgICBjb2x1bW5PZmZzZXQgKyBvZmZzZXQuY29sdW1uLFxuICAgICAgc2wsXG4gICAgICBzYyxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFNlY3Rpb24oXG4gIGlucHV0OiBTZWN0aW9uWElucHV0WydtYXAnXSxcbiAgbWFwVXJsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sXG4gIHNvdXJjZXM6IHN0cmluZ1tdLFxuICBzb3VyY2VzQ29udGVudDogKHN0cmluZyB8IG51bGwpW10sXG4gIG5hbWVzOiBzdHJpbmdbXSxcbiAgaWdub3JlTGlzdDogbnVtYmVyW10sXG4gIGxpbmVPZmZzZXQ6IG51bWJlcixcbiAgY29sdW1uT2Zmc2V0OiBudW1iZXIsXG4gIHN0b3BMaW5lOiBudW1iZXIsXG4gIHN0b3BDb2x1bW46IG51bWJlcixcbikge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZShpbnB1dCk7XG4gIGlmICgnc2VjdGlvbnMnIGluIHBhcnNlZCkgcmV0dXJuIHJlY3Vyc2UoLi4uKGFyZ3VtZW50cyBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHJlY3Vyc2U+KSk7XG5cbiAgY29uc3QgbWFwID0gbmV3IFRyYWNlTWFwKHBhcnNlZCwgbWFwVXJsKTtcbiAgY29uc3Qgc291cmNlc09mZnNldCA9IHNvdXJjZXMubGVuZ3RoO1xuICBjb25zdCBuYW1lc09mZnNldCA9IG5hbWVzLmxlbmd0aDtcbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZWRNYXBwaW5ncyhtYXApO1xuICBjb25zdCB7IHJlc29sdmVkU291cmNlcywgc291cmNlc0NvbnRlbnQ6IGNvbnRlbnRzLCBpZ25vcmVMaXN0OiBpZ25vcmVzIH0gPSBtYXA7XG5cbiAgYXBwZW5kKHNvdXJjZXMsIHJlc29sdmVkU291cmNlcyk7XG4gIGFwcGVuZChuYW1lcywgbWFwLm5hbWVzKTtcblxuICBpZiAoY29udGVudHMpIGFwcGVuZChzb3VyY2VzQ29udGVudCwgY29udGVudHMpO1xuICBlbHNlIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzb2x2ZWRTb3VyY2VzLmxlbmd0aDsgaSsrKSBzb3VyY2VzQ29udGVudC5wdXNoKG51bGwpO1xuXG4gIGlmIChpZ25vcmVzKSBmb3IgKGxldCBpID0gMDsgaSA8IGlnbm9yZXMubGVuZ3RoOyBpKyspIGlnbm9yZUxpc3QucHVzaChpZ25vcmVzW2ldICsgc291cmNlc09mZnNldCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbGluZUkgPSBsaW5lT2Zmc2V0ICsgaTtcblxuICAgIC8vIFdlIGNhbiBvbmx5IGFkZCBzbyBtYW55IGxpbmVzIGJlZm9yZSB3ZSBzdGVwIGludG8gdGhlIHJhbmdlIHRoYXQgdGhlIG5leHQgc2VjdGlvbidzIG1hcFxuICAgIC8vIGNvbnRyb2xzLiBXaGVuIHdlIGdldCB0byB0aGUgbGFzdCBsaW5lLCB0aGVuIHdlJ2xsIHN0YXJ0IGNoZWNraW5nIHRoZSBzZWdtZW50cyB0byBzZWUgaWZcbiAgICAvLyB0aGV5J3ZlIGNyb3NzZWQgaW50byB0aGUgY29sdW1uIHJhbmdlLiBCdXQgaXQgbWF5IG5vdCBoYXZlIGFueSBjb2x1bW5zIHRoYXQgb3ZlcnN0ZXAsIHNvIHdlXG4gICAgLy8gc3RpbGwgbmVlZCB0byBjaGVjayB0aGF0IHdlIGRvbid0IG92ZXJzdGVwIGxpbmVzLCB0b28uXG4gICAgaWYgKGxpbmVJID4gc3RvcExpbmUpIHJldHVybjtcblxuICAgIC8vIFRoZSBvdXQgbGluZSBtYXkgYWxyZWFkeSBleGlzdCBpbiBtYXBwaW5ncyAoaWYgd2UncmUgY29udGludWluZyB0aGUgbGluZSBzdGFydGVkIGJ5IGFcbiAgICAvLyBwcmV2aW91cyBzZWN0aW9uKS4gT3IsIHdlIG1heSBoYXZlIGp1bXBlZCBhaGVhZCBzZXZlcmFsIGxpbmVzIHRvIHN0YXJ0IHRoaXMgc2VjdGlvbi5cbiAgICBjb25zdCBvdXQgPSBnZXRMaW5lKG1hcHBpbmdzLCBsaW5lSSk7XG4gICAgLy8gT24gdGhlIDB0aCBsb29wLCB0aGUgc2VjdGlvbidzIGNvbHVtbiBvZmZzZXQgc2hpZnRzIHVzIGZvcndhcmQuIE9uIGFsbCBvdGhlciBsaW5lcyAoc2luY2UgdGhlXG4gICAgLy8gbWFwIGNhbiBiZSBtdWx0aXBsZSBsaW5lcyksIGl0IGRvZXNuJ3QuXG4gICAgY29uc3QgY09mZnNldCA9IGkgPT09IDAgPyBjb2x1bW5PZmZzZXQgOiAwO1xuXG4gICAgY29uc3QgbGluZSA9IGRlY29kZWRbaV07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBzZWcgPSBsaW5lW2pdO1xuICAgICAgY29uc3QgY29sdW1uID0gY09mZnNldCArIHNlZ1tDT0xVTU5dO1xuXG4gICAgICAvLyBJZiB0aGlzIHNlZ21lbnQgc3RlcHMgaW50byB0aGUgY29sdW1uIHJhbmdlIHRoYXQgdGhlIG5leHQgc2VjdGlvbidzIG1hcCBjb250cm9scywgd2UgbmVlZFxuICAgICAgLy8gdG8gc3RvcCBlYXJseS5cbiAgICAgIGlmIChsaW5lSSA9PT0gc3RvcExpbmUgJiYgY29sdW1uID49IHN0b3BDb2x1bW4pIHJldHVybjtcblxuICAgICAgaWYgKHNlZy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgb3V0LnB1c2goW2NvbHVtbl0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlc0luZGV4ID0gc291cmNlc09mZnNldCArIHNlZ1tTT1VSQ0VTX0lOREVYXTtcbiAgICAgIGNvbnN0IHNvdXJjZUxpbmUgPSBzZWdbU09VUkNFX0xJTkVdO1xuICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gc2VnW1NPVVJDRV9DT0xVTU5dO1xuICAgICAgb3V0LnB1c2goXG4gICAgICAgIHNlZy5sZW5ndGggPT09IDRcbiAgICAgICAgICA/IFtjb2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uXVxuICAgICAgICAgIDogW2NvbHVtbiwgc291cmNlc0luZGV4LCBzb3VyY2VMaW5lLCBzb3VyY2VDb2x1bW4sIG5hbWVzT2Zmc2V0ICsgc2VnW05BTUVTX0lOREVYXV0sXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmQ8VD4oYXJyOiBUW10sIG90aGVyOiBUW10pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdGhlci5sZW5ndGg7IGkrKykgYXJyLnB1c2gob3RoZXJbaV0pO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5lPFQ+KGFycjogVFtdW10sIGluZGV4OiBudW1iZXIpOiBUW10ge1xuICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aDsgaSA8PSBpbmRleDsgaSsrKSBhcnJbaV0gPSBbXTtcbiAgcmV0dXJuIGFycltpbmRleF07XG59XG4iLCAiaW1wb3J0IHsgZW5jb2RlLCBkZWNvZGUgfSBmcm9tICdAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICcuL3Jlc29sdmUnO1xuaW1wb3J0IHN0cmlwRmlsZW5hbWUgZnJvbSAnLi9zdHJpcC1maWxlbmFtZSc7XG5pbXBvcnQgbWF5YmVTb3J0IGZyb20gJy4vc29ydCc7XG5pbXBvcnQgYnVpbGRCeVNvdXJjZXMgZnJvbSAnLi9ieS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgbWVtb2l6ZWRTdGF0ZSxcbiAgbWVtb2l6ZWRCaW5hcnlTZWFyY2gsXG4gIHVwcGVyQm91bmQsXG4gIGxvd2VyQm91bmQsXG4gIGZvdW5kIGFzIGJzRm91bmQsXG59IGZyb20gJy4vYmluYXJ5LXNlYXJjaCc7XG5pbXBvcnQge1xuICBDT0xVTU4sXG4gIFNPVVJDRVNfSU5ERVgsXG4gIFNPVVJDRV9MSU5FLFxuICBTT1VSQ0VfQ09MVU1OLFxuICBOQU1FU19JTkRFWCxcbiAgUkVWX0dFTkVSQVRFRF9MSU5FLFxuICBSRVZfR0VORVJBVEVEX0NPTFVNTixcbn0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5cbmltcG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCwgUmV2ZXJzZVNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmltcG9ydCB0eXBlIHtcbiAgU291cmNlTWFwVjMsXG4gIERlY29kZWRTb3VyY2VNYXAsXG4gIEVuY29kZWRTb3VyY2VNYXAsXG4gIEludmFsaWRPcmlnaW5hbE1hcHBpbmcsXG4gIE9yaWdpbmFsTWFwcGluZyxcbiAgSW52YWxpZEdlbmVyYXRlZE1hcHBpbmcsXG4gIEdlbmVyYXRlZE1hcHBpbmcsXG4gIFNvdXJjZU1hcElucHV0LFxuICBOZWVkbGUsXG4gIFNvdXJjZU5lZWRsZSxcbiAgU291cmNlTWFwLFxuICBFYWNoTWFwcGluZyxcbiAgQmlhcyxcbiAgWElucHV0LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU291cmNlIH0gZnJvbSAnLi9ieS1zb3VyY2UnO1xuaW1wb3J0IHR5cGUgeyBNZW1vU3RhdGUgfSBmcm9tICcuL2JpbmFyeS1zZWFyY2gnO1xuXG5leHBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmV4cG9ydCB0eXBlIHtcbiAgU291cmNlTWFwLFxuICBEZWNvZGVkU291cmNlTWFwLFxuICBFbmNvZGVkU291cmNlTWFwLFxuICBTZWN0aW9uLFxuICBTZWN0aW9uZWRTb3VyY2VNYXAsXG4gIFNvdXJjZU1hcFYzLFxuICBCaWFzLFxuICBFYWNoTWFwcGluZyxcbiAgR2VuZXJhdGVkTWFwcGluZyxcbiAgSW52YWxpZEdlbmVyYXRlZE1hcHBpbmcsXG4gIEludmFsaWRPcmlnaW5hbE1hcHBpbmcsXG4gIE5lZWRsZSxcbiAgT3JpZ2luYWxNYXBwaW5nLFxuICBPcmlnaW5hbE1hcHBpbmcgYXMgTWFwcGluZyxcbiAgU2VjdGlvbmVkU291cmNlTWFwSW5wdXQsXG4gIFNvdXJjZU1hcElucHV0LFxuICBTb3VyY2VOZWVkbGUsXG4gIFhJbnB1dCxcbiAgRW5jb2RlZFNvdXJjZU1hcFhJbnB1dCxcbiAgRGVjb2RlZFNvdXJjZU1hcFhJbnB1dCxcbiAgU2VjdGlvbmVkU291cmNlTWFwWElucHV0LFxuICBTZWN0aW9uWElucHV0LFxufSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFB1YmxpY01hcCB7XG4gIF9lbmNvZGVkOiBUcmFjZU1hcFsnX2VuY29kZWQnXTtcbiAgX2RlY29kZWQ6IFRyYWNlTWFwWydfZGVjb2RlZCddO1xuICBfZGVjb2RlZE1lbW86IFRyYWNlTWFwWydfZGVjb2RlZE1lbW8nXTtcbiAgX2J5U291cmNlczogVHJhY2VNYXBbJ19ieVNvdXJjZXMnXTtcbiAgX2J5U291cmNlTWVtb3M6IFRyYWNlTWFwWydfYnlTb3VyY2VNZW1vcyddO1xufVxuXG5jb25zdCBMSU5FX0dUUl9aRVJPID0gJ2BsaW5lYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIChsaW5lcyBzdGFydCBhdCBsaW5lIDEpJztcbmNvbnN0IENPTF9HVFJfRVFfWkVSTyA9ICdgY29sdW1uYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwIChjb2x1bW5zIHN0YXJ0IGF0IGNvbHVtbiAwKSc7XG5cbmV4cG9ydCBjb25zdCBMRUFTVF9VUFBFUl9CT1VORCA9IC0xO1xuZXhwb3J0IGNvbnN0IEdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcblxuZXhwb3J0IHsgQW55TWFwIH0gZnJvbSAnLi9hbnktbWFwJztcblxuZXhwb3J0IGNsYXNzIFRyYWNlTWFwIGltcGxlbWVudHMgU291cmNlTWFwIHtcbiAgZGVjbGFyZSB2ZXJzaW9uOiBTb3VyY2VNYXBWM1sndmVyc2lvbiddO1xuICBkZWNsYXJlIGZpbGU6IFNvdXJjZU1hcFYzWydmaWxlJ107XG4gIGRlY2xhcmUgbmFtZXM6IFNvdXJjZU1hcFYzWyduYW1lcyddO1xuICBkZWNsYXJlIHNvdXJjZVJvb3Q6IFNvdXJjZU1hcFYzWydzb3VyY2VSb290J107XG4gIGRlY2xhcmUgc291cmNlczogU291cmNlTWFwVjNbJ3NvdXJjZXMnXTtcbiAgZGVjbGFyZSBzb3VyY2VzQ29udGVudDogU291cmNlTWFwVjNbJ3NvdXJjZXNDb250ZW50J107XG4gIGRlY2xhcmUgaWdub3JlTGlzdDogU291cmNlTWFwVjNbJ2lnbm9yZUxpc3QnXTtcblxuICBkZWNsYXJlIHJlc29sdmVkU291cmNlczogc3RyaW5nW107XG4gIHByaXZhdGUgZGVjbGFyZSBfZW5jb2RlZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgZGVjbGFyZSBfZGVjb2RlZDogU291cmNlTWFwU2VnbWVudFtdW10gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZGVjbGFyZSBfZGVjb2RlZE1lbW86IE1lbW9TdGF0ZTtcblxuICBwcml2YXRlIGRlY2xhcmUgX2J5U291cmNlczogU291cmNlW10gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZGVjbGFyZSBfYnlTb3VyY2VNZW1vczogTWVtb1N0YXRlW10gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IobWFwOiBTb3VyY2VNYXBJbnB1dCwgbWFwVXJsPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIG1hcCA9PT0gJ3N0cmluZyc7XG5cbiAgICBpZiAoIWlzU3RyaW5nICYmIChtYXAgYXMgdW5rbm93biBhcyB7IF9kZWNvZGVkTWVtbzogYW55IH0pLl9kZWNvZGVkTWVtbykgcmV0dXJuIG1hcCBhcyBUcmFjZU1hcDtcblxuICAgIGNvbnN0IHBhcnNlZCA9IChpc1N0cmluZyA/IEpTT04ucGFyc2UobWFwKSA6IG1hcCkgYXMgRGVjb2RlZFNvdXJjZU1hcCB8IEVuY29kZWRTb3VyY2VNYXA7XG5cbiAgICBjb25zdCB7IHZlcnNpb24sIGZpbGUsIG5hbWVzLCBzb3VyY2VSb290LCBzb3VyY2VzLCBzb3VyY2VzQ29udGVudCB9ID0gcGFyc2VkO1xuICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgdGhpcy5maWxlID0gZmlsZTtcbiAgICB0aGlzLm5hbWVzID0gbmFtZXMgfHwgW107XG4gICAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgICB0aGlzLnNvdXJjZXMgPSBzb3VyY2VzO1xuICAgIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgICB0aGlzLmlnbm9yZUxpc3QgPSBwYXJzZWQuaWdub3JlTGlzdCB8fCAocGFyc2VkIGFzIFhJbnB1dCkueF9nb29nbGVfaWdub3JlTGlzdCB8fCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBmcm9tID0gcmVzb2x2ZShzb3VyY2VSb290IHx8ICcnLCBzdHJpcEZpbGVuYW1lKG1hcFVybCkpO1xuICAgIHRoaXMucmVzb2x2ZWRTb3VyY2VzID0gc291cmNlcy5tYXAoKHMpID0+IHJlc29sdmUocyB8fCAnJywgZnJvbSkpO1xuXG4gICAgY29uc3QgeyBtYXBwaW5ncyB9ID0gcGFyc2VkO1xuICAgIGlmICh0eXBlb2YgbWFwcGluZ3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9lbmNvZGVkID0gbWFwcGluZ3M7XG4gICAgICB0aGlzLl9kZWNvZGVkID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbmNvZGVkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZGVjb2RlZCA9IG1heWJlU29ydChtYXBwaW5ncywgaXNTdHJpbmcpO1xuICAgIH1cblxuICAgIHRoaXMuX2RlY29kZWRNZW1vID0gbWVtb2l6ZWRTdGF0ZSgpO1xuICAgIHRoaXMuX2J5U291cmNlcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9ieVNvdXJjZU1lbW9zID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogVHlwZXNjcmlwdCBkb2Vzbid0IGFsbG93IGZyaWVuZCBhY2Nlc3MgdG8gcHJpdmF0ZSBmaWVsZHMsIHNvIHRoaXMganVzdCBjYXN0cyB0aGUgbWFwIGludG8gYSB0eXBlXG4gKiB3aXRoIHB1YmxpYyBhY2Nlc3MgbW9kaWZpZXJzLlxuICovXG5mdW5jdGlvbiBjYXN0KG1hcDogdW5rbm93bik6IFB1YmxpY01hcCB7XG4gIHJldHVybiBtYXAgYXMgYW55O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVuY29kZWQgKFZMUSBzdHJpbmcpIGZvcm0gb2YgdGhlIFNvdXJjZU1hcCdzIG1hcHBpbmdzIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlZE1hcHBpbmdzKG1hcDogVHJhY2VNYXApOiBFbmNvZGVkU291cmNlTWFwWydtYXBwaW5ncyddIHtcbiAgcmV0dXJuIChjYXN0KG1hcCkuX2VuY29kZWQgPz89IGVuY29kZShjYXN0KG1hcCkuX2RlY29kZWQhKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVjb2RlZCAoYXJyYXkgb2YgbGluZXMgb2Ygc2VnbWVudHMpIGZvcm0gb2YgdGhlIFNvdXJjZU1hcCdzIG1hcHBpbmdzIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlZE1hcHBpbmdzKG1hcDogVHJhY2VNYXApOiBSZWFkb25seTxEZWNvZGVkU291cmNlTWFwWydtYXBwaW5ncyddPiB7XG4gIHJldHVybiAoY2FzdChtYXApLl9kZWNvZGVkIHx8PSBkZWNvZGUoY2FzdChtYXApLl9lbmNvZGVkISkpO1xufVxuXG4vKipcbiAqIEEgbG93LWxldmVsIEFQSSB0byBmaW5kIHRoZSBzZWdtZW50IGFzc29jaWF0ZWQgd2l0aCBhIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiAodGhpbmssIGZyb20gYVxuICogc3RhY2sgdHJhY2UpLiBMaW5lIGFuZCBjb2x1bW4gaGVyZSBhcmUgMC1iYXNlZCwgdW5saWtlIGBvcmlnaW5hbFBvc2l0aW9uRm9yYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlU2VnbWVudChcbiAgbWFwOiBUcmFjZU1hcCxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbik6IFJlYWRvbmx5PFNvdXJjZU1hcFNlZ21lbnQ+IHwgbnVsbCB7XG4gIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVkTWFwcGluZ3MobWFwKTtcblxuICAvLyBJdCdzIGNvbW1vbiBmb3IgcGFyZW50IHNvdXJjZSBtYXBzIHRvIGhhdmUgcG9pbnRlcnMgdG8gbGluZXMgdGhhdCBoYXZlIG5vXG4gIC8vIG1hcHBpbmcgKGxpa2UgYSBcIi8vIyBzb3VyY2VNYXBwaW5nVVJMPVwiKSBhdCB0aGUgZW5kIG9mIHRoZSBjaGlsZCBmaWxlLlxuICBpZiAobGluZSA+PSBkZWNvZGVkLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBkZWNvZGVkW2xpbmVdO1xuICBjb25zdCBpbmRleCA9IHRyYWNlU2VnbWVudEludGVybmFsKFxuICAgIHNlZ21lbnRzLFxuICAgIGNhc3QobWFwKS5fZGVjb2RlZE1lbW8sXG4gICAgbGluZSxcbiAgICBjb2x1bW4sXG4gICAgR1JFQVRFU1RfTE9XRVJfQk9VTkQsXG4gICk7XG5cbiAgcmV0dXJuIGluZGV4ID09PSAtMSA/IG51bGwgOiBzZWdtZW50c1tpbmRleF07XG59XG5cbi8qKlxuICogQSBoaWdoZXItbGV2ZWwgQVBJIHRvIGZpbmQgdGhlIHNvdXJjZS9saW5lL2NvbHVtbiBhc3NvY2lhdGVkIHdpdGggYSBnZW5lcmF0ZWQgbGluZS9jb2x1bW5cbiAqICh0aGluaywgZnJvbSBhIHN0YWNrIHRyYWNlKS4gTGluZSBpcyAxLWJhc2VkLCBidXQgY29sdW1uIGlzIDAtYmFzZWQsIGR1ZSB0byBsZWdhY3kgYmVoYXZpb3IgaW5cbiAqIGBzb3VyY2UtbWFwYCBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JpZ2luYWxQb3NpdGlvbkZvcihcbiAgbWFwOiBUcmFjZU1hcCxcbiAgbmVlZGxlOiBOZWVkbGUsXG4pOiBPcmlnaW5hbE1hcHBpbmcgfCBJbnZhbGlkT3JpZ2luYWxNYXBwaW5nIHtcbiAgbGV0IHsgbGluZSwgY29sdW1uLCBiaWFzIH0gPSBuZWVkbGU7XG4gIGxpbmUtLTtcbiAgaWYgKGxpbmUgPCAwKSB0aHJvdyBuZXcgRXJyb3IoTElORV9HVFJfWkVSTyk7XG4gIGlmIChjb2x1bW4gPCAwKSB0aHJvdyBuZXcgRXJyb3IoQ09MX0dUUl9FUV9aRVJPKTtcblxuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG5cbiAgLy8gSXQncyBjb21tb24gZm9yIHBhcmVudCBzb3VyY2UgbWFwcyB0byBoYXZlIHBvaW50ZXJzIHRvIGxpbmVzIHRoYXQgaGF2ZSBub1xuICAvLyBtYXBwaW5nIChsaWtlIGEgXCIvLyMgc291cmNlTWFwcGluZ1VSTD1cIikgYXQgdGhlIGVuZCBvZiB0aGUgY2hpbGQgZmlsZS5cbiAgaWYgKGxpbmUgPj0gZGVjb2RlZC5sZW5ndGgpIHJldHVybiBPTWFwcGluZyhudWxsLCBudWxsLCBudWxsLCBudWxsKTtcblxuICBjb25zdCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV07XG4gIGNvbnN0IGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gICAgc2VnbWVudHMsXG4gICAgY2FzdChtYXApLl9kZWNvZGVkTWVtbyxcbiAgICBsaW5lLFxuICAgIGNvbHVtbixcbiAgICBiaWFzIHx8IEdSRUFURVNUX0xPV0VSX0JPVU5ELFxuICApO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBPTWFwcGluZyhudWxsLCBudWxsLCBudWxsLCBudWxsKTtcblxuICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaW5kZXhdO1xuICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDEpIHJldHVybiBPTWFwcGluZyhudWxsLCBudWxsLCBudWxsLCBudWxsKTtcblxuICBjb25zdCB7IG5hbWVzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcbiAgcmV0dXJuIE9NYXBwaW5nKFxuICAgIHJlc29sdmVkU291cmNlc1tzZWdtZW50W1NPVVJDRVNfSU5ERVhdXSxcbiAgICBzZWdtZW50W1NPVVJDRV9MSU5FXSArIDEsXG4gICAgc2VnbWVudFtTT1VSQ0VfQ09MVU1OXSxcbiAgICBzZWdtZW50Lmxlbmd0aCA9PT0gNSA/IG5hbWVzW3NlZ21lbnRbTkFNRVNfSU5ERVhdXSA6IG51bGwsXG4gICk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBwb3NpdGlvbiBvZiB0aGUgcHJvdmlkZWQgc291cmNlL2xpbmUvY29sdW1uIHNvdXJjZSBwb3NpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uRm9yKFxuICBtYXA6IFRyYWNlTWFwLFxuICBuZWVkbGU6IFNvdXJjZU5lZWRsZSxcbik6IEdlbmVyYXRlZE1hcHBpbmcgfCBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyB7XG4gIGNvbnN0IHsgc291cmNlLCBsaW5lLCBjb2x1bW4sIGJpYXMgfSA9IG5lZWRsZTtcbiAgcmV0dXJuIGdlbmVyYXRlZFBvc2l0aW9uKG1hcCwgc291cmNlLCBsaW5lLCBjb2x1bW4sIGJpYXMgfHwgR1JFQVRFU1RfTE9XRVJfQk9VTkQsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgZ2VuZXJhdGVkIGxpbmUvY29sdW1uIHBvc2l0aW9ucyBvZiB0aGUgcHJvdmlkZWQgc291cmNlL2xpbmUvY29sdW1uIHNvdXJjZSBwb3NpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvcihtYXA6IFRyYWNlTWFwLCBuZWVkbGU6IFNvdXJjZU5lZWRsZSk6IEdlbmVyYXRlZE1hcHBpbmdbXSB7XG4gIGNvbnN0IHsgc291cmNlLCBsaW5lLCBjb2x1bW4sIGJpYXMgfSA9IG5lZWRsZTtcbiAgLy8gU291cmNlTWFwQ29uc3VtZXIgdXNlcyBMRUFTVF9VUFBFUl9CT1VORCBmb3Igc29tZSByZWFzb24sIHNvIHdlIGZvbGxvdyBzdWl0LlxuICByZXR1cm4gZ2VuZXJhdGVkUG9zaXRpb24obWFwLCBzb3VyY2UsIGxpbmUsIGNvbHVtbiwgYmlhcyB8fCBMRUFTVF9VUFBFUl9CT1VORCwgdHJ1ZSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgZWFjaCBtYXBwaW5nIGluIGdlbmVyYXRlZCBwb3NpdGlvbiBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2hNYXBwaW5nKG1hcDogVHJhY2VNYXAsIGNiOiAobWFwcGluZzogRWFjaE1hcHBpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZWRNYXBwaW5ncyhtYXApO1xuICBjb25zdCB7IG5hbWVzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lID0gZGVjb2RlZFtpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHNlZyA9IGxpbmVbal07XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlZExpbmUgPSBpICsgMTtcbiAgICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbiA9IHNlZ1swXTtcbiAgICAgIGxldCBzb3VyY2UgPSBudWxsO1xuICAgICAgbGV0IG9yaWdpbmFsTGluZSA9IG51bGw7XG4gICAgICBsZXQgb3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICAgICAgbGV0IG5hbWUgPSBudWxsO1xuICAgICAgaWYgKHNlZy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgc291cmNlID0gcmVzb2x2ZWRTb3VyY2VzW3NlZ1sxXV07XG4gICAgICAgIG9yaWdpbmFsTGluZSA9IHNlZ1syXSArIDE7XG4gICAgICAgIG9yaWdpbmFsQ29sdW1uID0gc2VnWzNdO1xuICAgICAgfVxuICAgICAgaWYgKHNlZy5sZW5ndGggPT09IDUpIG5hbWUgPSBuYW1lc1tzZWdbNF1dO1xuXG4gICAgICBjYih7XG4gICAgICAgIGdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbixcbiAgICAgICAgc291cmNlLFxuICAgICAgICBvcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lLFxuICAgICAgfSBhcyBFYWNoTWFwcGluZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUluZGV4KG1hcDogVHJhY2VNYXAsIHNvdXJjZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgeyBzb3VyY2VzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcbiAgbGV0IGluZGV4ID0gc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG4gIGlmIChpbmRleCA9PT0gLTEpIGluZGV4ID0gcmVzb2x2ZWRTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgcGFydGljdWxhciBzb3VyY2UsIGlmIGl0cyBmb3VuZC4gUmV0dXJucyBudWxsIGlmIG5vdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZUNvbnRlbnRGb3IobWFwOiBUcmFjZU1hcCwgc291cmNlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyBzb3VyY2VzQ29udGVudCB9ID0gbWFwO1xuICBpZiAoc291cmNlc0NvbnRlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGluZGV4ID0gc291cmNlSW5kZXgobWFwLCBzb3VyY2UpO1xuICByZXR1cm4gaW5kZXggPT09IC0xID8gbnVsbCA6IHNvdXJjZXNDb250ZW50W2luZGV4XTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBzb3VyY2UgaXMgbWFya2VkIHRvIGlnbm9yZSBieSB0aGUgc291cmNlIG1hcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWdub3JlZChtYXA6IFRyYWNlTWFwLCBzb3VyY2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB7IGlnbm9yZUxpc3QgfSA9IG1hcDtcbiAgaWYgKGlnbm9yZUxpc3QgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpbmRleCA9IHNvdXJjZUluZGV4KG1hcCwgc291cmNlKTtcbiAgcmV0dXJuIGluZGV4ID09PSAtMSA/IGZhbHNlIDogaWdub3JlTGlzdC5pbmNsdWRlcyhpbmRleCk7XG59XG5cbi8qKlxuICogQSBoZWxwZXIgdGhhdCBza2lwcyBzb3J0aW5nIG9mIHRoZSBpbnB1dCBtYXAncyBtYXBwaW5ncyBhcnJheSwgd2hpY2ggY2FuIGJlIGV4cGVuc2l2ZSBmb3IgbGFyZ2VyXG4gKiBtYXBzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc29ydGVkRGVjb2RlZE1hcChtYXA6IERlY29kZWRTb3VyY2VNYXAsIG1hcFVybD86IHN0cmluZyk6IFRyYWNlTWFwIHtcbiAgY29uc3QgdHJhY2VyID0gbmV3IFRyYWNlTWFwKGNsb25lKG1hcCwgW10pLCBtYXBVcmwpO1xuICBjYXN0KHRyYWNlcikuX2RlY29kZWQgPSBtYXAubWFwcGluZ3M7XG4gIHJldHVybiB0cmFjZXI7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZW1hcCBvYmplY3QgKHdpdGggZGVjb2RlZCBtYXBwaW5ncykgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSBsaWJyYXJ5IHRoYXQgZXhwZWN0c1xuICogYSBzb3VyY2VtYXAsIG9yIHRvIEpTT04uc3RyaW5naWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlZE1hcChcbiAgbWFwOiBUcmFjZU1hcCxcbik6IE9taXQ8RGVjb2RlZFNvdXJjZU1hcCwgJ21hcHBpbmdzJz4gJiB7IG1hcHBpbmdzOiByZWFkb25seSBTb3VyY2VNYXBTZWdtZW50W11bXSB9IHtcbiAgcmV0dXJuIGNsb25lKG1hcCwgZGVjb2RlZE1hcHBpbmdzKG1hcCkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzb3VyY2VtYXAgb2JqZWN0ICh3aXRoIGVuY29kZWQgbWFwcGluZ3MpIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGEgbGlicmFyeSB0aGF0IGV4cGVjdHNcbiAqIGEgc291cmNlbWFwLCBvciB0byBKU09OLnN0cmluZ2lmeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZWRNYXAobWFwOiBUcmFjZU1hcCk6IEVuY29kZWRTb3VyY2VNYXAge1xuICByZXR1cm4gY2xvbmUobWFwLCBlbmNvZGVkTWFwcGluZ3MobWFwKSk7XG59XG5cbmZ1bmN0aW9uIGNsb25lPFQgZXh0ZW5kcyBzdHJpbmcgfCByZWFkb25seSBTb3VyY2VNYXBTZWdtZW50W11bXT4oXG4gIG1hcDogVHJhY2VNYXAgfCBEZWNvZGVkU291cmNlTWFwLFxuICBtYXBwaW5nczogVCxcbik6IFQgZXh0ZW5kcyBzdHJpbmcgPyBFbmNvZGVkU291cmNlTWFwIDogRGVjb2RlZFNvdXJjZU1hcCB7XG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogbWFwLnZlcnNpb24sXG4gICAgZmlsZTogbWFwLmZpbGUsXG4gICAgbmFtZXM6IG1hcC5uYW1lcyxcbiAgICBzb3VyY2VSb290OiBtYXAuc291cmNlUm9vdCxcbiAgICBzb3VyY2VzOiBtYXAuc291cmNlcyxcbiAgICBzb3VyY2VzQ29udGVudDogbWFwLnNvdXJjZXNDb250ZW50LFxuICAgIG1hcHBpbmdzLFxuICAgIGlnbm9yZUxpc3Q6IG1hcC5pZ25vcmVMaXN0IHx8IChtYXAgYXMgWElucHV0KS54X2dvb2dsZV9pZ25vcmVMaXN0LFxuICB9IGFzIGFueTtcbn1cblxuZnVuY3Rpb24gT01hcHBpbmcoc291cmNlOiBudWxsLCBsaW5lOiBudWxsLCBjb2x1bW46IG51bGwsIG5hbWU6IG51bGwpOiBJbnZhbGlkT3JpZ2luYWxNYXBwaW5nO1xuZnVuY3Rpb24gT01hcHBpbmcoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBuYW1lOiBzdHJpbmcgfCBudWxsLFxuKTogT3JpZ2luYWxNYXBwaW5nO1xuZnVuY3Rpb24gT01hcHBpbmcoXG4gIHNvdXJjZTogc3RyaW5nIHwgbnVsbCxcbiAgbGluZTogbnVtYmVyIHwgbnVsbCxcbiAgY29sdW1uOiBudW1iZXIgfCBudWxsLFxuICBuYW1lOiBzdHJpbmcgfCBudWxsLFxuKTogT3JpZ2luYWxNYXBwaW5nIHwgSW52YWxpZE9yaWdpbmFsTWFwcGluZyB7XG4gIHJldHVybiB7IHNvdXJjZSwgbGluZSwgY29sdW1uLCBuYW1lIH0gYXMgYW55O1xufVxuXG5mdW5jdGlvbiBHTWFwcGluZyhsaW5lOiBudWxsLCBjb2x1bW46IG51bGwpOiBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZztcbmZ1bmN0aW9uIEdNYXBwaW5nKGxpbmU6IG51bWJlciwgY29sdW1uOiBudW1iZXIpOiBHZW5lcmF0ZWRNYXBwaW5nO1xuZnVuY3Rpb24gR01hcHBpbmcoXG4gIGxpbmU6IG51bWJlciB8IG51bGwsXG4gIGNvbHVtbjogbnVtYmVyIHwgbnVsbCxcbik6IEdlbmVyYXRlZE1hcHBpbmcgfCBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyB7XG4gIHJldHVybiB7IGxpbmUsIGNvbHVtbiB9IGFzIGFueTtcbn1cblxuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gIHNlZ21lbnRzOiBTb3VyY2VNYXBTZWdtZW50W10sXG4gIG1lbW86IE1lbW9TdGF0ZSxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbik6IG51bWJlcjtcbmZ1bmN0aW9uIHRyYWNlU2VnbWVudEludGVybmFsKFxuICBzZWdtZW50czogUmV2ZXJzZVNlZ21lbnRbXSxcbiAgbWVtbzogTWVtb1N0YXRlLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuKTogbnVtYmVyO1xuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gIHNlZ21lbnRzOiBTb3VyY2VNYXBTZWdtZW50W10gfCBSZXZlcnNlU2VnbWVudFtdLFxuICBtZW1vOiBNZW1vU3RhdGUsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIGJpYXM6IEJpYXMsXG4pOiBudW1iZXIge1xuICBsZXQgaW5kZXggPSBtZW1vaXplZEJpbmFyeVNlYXJjaChzZWdtZW50cywgY29sdW1uLCBtZW1vLCBsaW5lKTtcbiAgaWYgKGJzRm91bmQpIHtcbiAgICBpbmRleCA9IChiaWFzID09PSBMRUFTVF9VUFBFUl9CT1VORCA/IHVwcGVyQm91bmQgOiBsb3dlckJvdW5kKShzZWdtZW50cywgY29sdW1uLCBpbmRleCk7XG4gIH0gZWxzZSBpZiAoYmlhcyA9PT0gTEVBU1RfVVBQRVJfQk9VTkQpIGluZGV4Kys7XG5cbiAgaWYgKGluZGV4ID09PSAtMSB8fCBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoKSByZXR1cm4gLTE7XG4gIHJldHVybiBpbmRleDtcbn1cblxuZnVuY3Rpb24gc2xpY2VHZW5lcmF0ZWRQb3NpdGlvbnMoXG4gIHNlZ21lbnRzOiBSZXZlcnNlU2VnbWVudFtdLFxuICBtZW1vOiBNZW1vU3RhdGUsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIGJpYXM6IEJpYXMsXG4pOiBHZW5lcmF0ZWRNYXBwaW5nW10ge1xuICBsZXQgbWluID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuXG4gIC8vIFdlIGlnbm9yZWQgdGhlIGJpYXMgd2hlbiB0cmFjaW5nIHRoZSBzZWdtZW50IHNvIHRoYXQgd2UncmUgZ3Vhcm5hdGVlZCB0byBmaW5kIHRoZSBmaXJzdCAoaW5cbiAgLy8gaW5zZXJ0aW9uIG9yZGVyKSBzZWdtZW50IHRoYXQgbWF0Y2hlZC4gRXZlbiBpZiB3ZSBkaWQgcmVzcGVjdCB0aGUgYmlhcyB3aGVuIHRyYWNpbmcsIHdlIHdvdWxkXG4gIC8vIHN0aWxsIG5lZWQgdG8gY2FsbCBgbG93ZXJCb3VuZCgpYCB0byBmaW5kIHRoZSBmaXJzdCBzZWdtZW50LCB3aGljaCBpcyBzbG93ZXIgdGhhbiBqdXN0IGxvb2tpbmdcbiAgLy8gZm9yIHRoZSBHUkVBVEVTVF9MT1dFUl9CT1VORCB0byBiZWdpbiB3aXRoLiBUaGUgb25seSBkaWZmZXJlbmNlIHRoYXQgbWF0dGVycyBmb3IgdXMgaXMgd2hlbiB0aGVcbiAgLy8gYmluYXJ5IHNlYXJjaCBkaWRuJ3QgbWF0Y2gsIGluIHdoaWNoIGNhc2UgR1JFQVRFU1RfTE9XRVJfQk9VTkQganVzdCBuZWVkcyB0byBpbmNyZW1lbnQgdG9cbiAgLy8gbWF0Y2ggTEVBU1RfVVBQRVJfQk9VTkQuXG4gIGlmICghYnNGb3VuZCAmJiBiaWFzID09PSBMRUFTVF9VUFBFUl9CT1VORCkgbWluKys7XG5cbiAgaWYgKG1pbiA9PT0gLTEgfHwgbWluID09PSBzZWdtZW50cy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAvLyBXZSBtYXkgaGF2ZSBmb3VuZCB0aGUgc2VnbWVudCB0aGF0IHN0YXJ0ZWQgYXQgYW4gZWFybGllciBjb2x1bW4uIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZW4gd2VcbiAgLy8gbmVlZCB0byBzbGljZSBhbGwgZ2VuZXJhdGVkIHNlZ21lbnRzIHRoYXQgbWF0Y2ggX3RoYXRfIGNvbHVtbiwgYmVjYXVzZSBhbGwgc3VjaCBzZWdtZW50cyBzcGFuXG4gIC8vIHRvIG91ciBkZXNpcmVkIGNvbHVtbi5cbiAgY29uc3QgbWF0Y2hlZENvbHVtbiA9IGJzRm91bmQgPyBjb2x1bW4gOiBzZWdtZW50c1ttaW5dW0NPTFVNTl07XG5cbiAgLy8gVGhlIGJpbmFyeSBzZWFyY2ggaXMgbm90IGd1YXJhbnRlZWQgdG8gZmluZCB0aGUgbG93ZXIgYm91bmQgd2hlbiBhIG1hdGNoIHdhc24ndCBmb3VuZC5cbiAgaWYgKCFic0ZvdW5kKSBtaW4gPSBsb3dlckJvdW5kKHNlZ21lbnRzLCBtYXRjaGVkQ29sdW1uLCBtaW4pO1xuICBjb25zdCBtYXggPSB1cHBlckJvdW5kKHNlZ21lbnRzLCBtYXRjaGVkQ29sdW1uLCBtaW4pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKDsgbWluIDw9IG1heDsgbWluKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbbWluXTtcbiAgICByZXN1bHQucHVzaChHTWFwcGluZyhzZWdtZW50W1JFVl9HRU5FUkFURURfTElORV0gKyAxLCBzZWdtZW50W1JFVl9HRU5FUkFURURfQ09MVU1OXSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uKFxuICBtYXA6IFRyYWNlTWFwLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbiAgYWxsOiBmYWxzZSxcbik6IEdlbmVyYXRlZE1hcHBpbmcgfCBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZztcbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uKFxuICBtYXA6IFRyYWNlTWFwLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbiAgYWxsOiB0cnVlLFxuKTogR2VuZXJhdGVkTWFwcGluZ1tdO1xuZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb24oXG4gIG1hcDogVHJhY2VNYXAsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuICBhbGw6IGJvb2xlYW4sXG4pOiBHZW5lcmF0ZWRNYXBwaW5nIHwgSW52YWxpZEdlbmVyYXRlZE1hcHBpbmcgfCBHZW5lcmF0ZWRNYXBwaW5nW10ge1xuICBsaW5lLS07XG4gIGlmIChsaW5lIDwgMCkgdGhyb3cgbmV3IEVycm9yKExJTkVfR1RSX1pFUk8pO1xuICBpZiAoY29sdW1uIDwgMCkgdGhyb3cgbmV3IEVycm9yKENPTF9HVFJfRVFfWkVSTyk7XG5cbiAgY29uc3QgeyBzb3VyY2VzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcbiAgbGV0IHNvdXJjZUluZGV4ID0gc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG4gIGlmIChzb3VyY2VJbmRleCA9PT0gLTEpIHNvdXJjZUluZGV4ID0gcmVzb2x2ZWRTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcbiAgaWYgKHNvdXJjZUluZGV4ID09PSAtMSkgcmV0dXJuIGFsbCA/IFtdIDogR01hcHBpbmcobnVsbCwgbnVsbCk7XG5cbiAgY29uc3QgZ2VuZXJhdGVkID0gKGNhc3QobWFwKS5fYnlTb3VyY2VzIHx8PSBidWlsZEJ5U291cmNlcyhcbiAgICBkZWNvZGVkTWFwcGluZ3MobWFwKSxcbiAgICAoY2FzdChtYXApLl9ieVNvdXJjZU1lbW9zID0gc291cmNlcy5tYXAobWVtb2l6ZWRTdGF0ZSkpLFxuICApKTtcblxuICBjb25zdCBzZWdtZW50cyA9IGdlbmVyYXRlZFtzb3VyY2VJbmRleF1bbGluZV07XG4gIGlmIChzZWdtZW50cyA9PSBudWxsKSByZXR1cm4gYWxsID8gW10gOiBHTWFwcGluZyhudWxsLCBudWxsKTtcblxuICBjb25zdCBtZW1vID0gY2FzdChtYXApLl9ieVNvdXJjZU1lbW9zIVtzb3VyY2VJbmRleF07XG5cbiAgaWYgKGFsbCkgcmV0dXJuIHNsaWNlR2VuZXJhdGVkUG9zaXRpb25zKHNlZ21lbnRzLCBtZW1vLCBsaW5lLCBjb2x1bW4sIGJpYXMpO1xuXG4gIGNvbnN0IGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcyk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBHTWFwcGluZyhudWxsLCBudWxsKTtcblxuICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaW5kZXhdO1xuICByZXR1cm4gR01hcHBpbmcoc2VnbWVudFtSRVZfR0VORVJBVEVEX0xJTkVdICsgMSwgc2VnbWVudFtSRVZfR0VORVJBVEVEX0NPTFVNTl0pO1xufVxuIiwgInR5cGUgR2VuZXJhdGVkQ29sdW1uID0gbnVtYmVyO1xudHlwZSBTb3VyY2VzSW5kZXggPSBudW1iZXI7XG50eXBlIFNvdXJjZUxpbmUgPSBudW1iZXI7XG50eXBlIFNvdXJjZUNvbHVtbiA9IG51bWJlcjtcbnR5cGUgTmFtZXNJbmRleCA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgU291cmNlTWFwU2VnbWVudCA9XG4gIHwgW0dlbmVyYXRlZENvbHVtbl1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uLCBTb3VyY2VzSW5kZXgsIFNvdXJjZUxpbmUsIFNvdXJjZUNvbHVtbl1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uLCBTb3VyY2VzSW5kZXgsIFNvdXJjZUxpbmUsIFNvdXJjZUNvbHVtbiwgTmFtZXNJbmRleF07XG5cbmV4cG9ydCBjb25zdCBDT0xVTU4gPSAwO1xuZXhwb3J0IGNvbnN0IFNPVVJDRVNfSU5ERVggPSAxO1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9MSU5FID0gMjtcbmV4cG9ydCBjb25zdCBTT1VSQ0VfQ09MVU1OID0gMztcbmV4cG9ydCBjb25zdCBOQU1FU19JTkRFWCA9IDQ7XG4iLCAiaW1wb3J0IHsgU2V0QXJyYXksIHB1dCwgcmVtb3ZlIH0gZnJvbSAnQGpyaWRnZXdlbGwvc2V0LWFycmF5JztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJ0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyc7XG5pbXBvcnQgeyBUcmFjZU1hcCwgZGVjb2RlZE1hcHBpbmdzIH0gZnJvbSAnQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyc7XG5cbmltcG9ydCB7XG4gIENPTFVNTixcbiAgU09VUkNFU19JTkRFWCxcbiAgU09VUkNFX0xJTkUsXG4gIFNPVVJDRV9DT0xVTU4sXG4gIE5BTUVTX0lOREVYLFxufSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBJbnB1dCB9IGZyb20gJ0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBTZWdtZW50IH0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5pbXBvcnQgdHlwZSB7IERlY29kZWRTb3VyY2VNYXAsIEVuY29kZWRTb3VyY2VNYXAsIFBvcywgTWFwcGluZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSB7IERlY29kZWRTb3VyY2VNYXAsIEVuY29kZWRTb3VyY2VNYXAsIE1hcHBpbmcgfTtcblxuZXhwb3J0IHR5cGUgT3B0aW9ucyA9IHtcbiAgZmlsZT86IHN0cmluZyB8IG51bGw7XG4gIHNvdXJjZVJvb3Q/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgTk9fTkFNRSA9IC0xO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBzdGF0ZSB0byBnZW5lcmF0ZSBhIHNvdXJjZW1hcC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdlbk1hcHBpbmcge1xuICBwcml2YXRlIGRlY2xhcmUgX25hbWVzOiBTZXRBcnJheTxzdHJpbmc+O1xuICBwcml2YXRlIGRlY2xhcmUgX3NvdXJjZXM6IFNldEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgZGVjbGFyZSBfc291cmNlc0NvbnRlbnQ6IChzdHJpbmcgfCBudWxsKVtdO1xuICBwcml2YXRlIGRlY2xhcmUgX21hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXTtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9pZ25vcmVMaXN0OiBTZXRBcnJheTxudW1iZXI+O1xuICBkZWNsYXJlIGZpbGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgc291cmNlUm9vdDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcih7IGZpbGUsIHNvdXJjZVJvb3QgfTogT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXcgU2V0QXJyYXkoKTtcbiAgICB0aGlzLl9zb3VyY2VzID0gbmV3IFNldEFycmF5KCk7XG4gICAgdGhpcy5fc291cmNlc0NvbnRlbnQgPSBbXTtcbiAgICB0aGlzLl9tYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgICB0aGlzLl9pZ25vcmVMaXN0ID0gbmV3IFNldEFycmF5KCk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFB1YmxpY01hcCB7XG4gIF9uYW1lczogR2VuTWFwcGluZ1snX25hbWVzJ107XG4gIF9zb3VyY2VzOiBHZW5NYXBwaW5nWydfc291cmNlcyddO1xuICBfc291cmNlc0NvbnRlbnQ6IEdlbk1hcHBpbmdbJ19zb3VyY2VzQ29udGVudCddO1xuICBfbWFwcGluZ3M6IEdlbk1hcHBpbmdbJ19tYXBwaW5ncyddO1xuICBfaWdub3JlTGlzdDogR2VuTWFwcGluZ1snX2lnbm9yZUxpc3QnXTtcbn1cblxuLyoqXG4gKiBUeXBlc2NyaXB0IGRvZXNuJ3QgYWxsb3cgZnJpZW5kIGFjY2VzcyB0byBwcml2YXRlIGZpZWxkcywgc28gdGhpcyBqdXN0IGNhc3RzIHRoZSBtYXAgaW50byBhIHR5cGVcbiAqIHdpdGggcHVibGljIGFjY2VzcyBtb2RpZmllcnMuXG4gKi9cbmZ1bmN0aW9uIGNhc3QobWFwOiB1bmtub3duKTogUHVibGljTWFwIHtcbiAgcmV0dXJuIG1hcCBhcyBhbnk7XG59XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgQVBJIHRvIGFzc29jaWF0ZSBhIGdlbmVyYXRlZCBwb3NpdGlvbiB3aXRoIGFuIG9yaWdpbmFsIHNvdXJjZSBwb3NpdGlvbi4gTGluZSBhbmRcbiAqIGNvbHVtbiBoZXJlIGFyZSAwLWJhc2VkLCB1bmxpa2UgYGFkZE1hcHBpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudChcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBnZW5MaW5lOiBudW1iZXIsXG4gIGdlbkNvbHVtbjogbnVtYmVyLFxuICBzb3VyY2U/OiBudWxsLFxuICBzb3VyY2VMaW5lPzogbnVsbCxcbiAgc291cmNlQ29sdW1uPzogbnVsbCxcbiAgbmFtZT86IG51bGwsXG4gIGNvbnRlbnQ/OiBudWxsLFxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBhZGRTZWdtZW50KFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIGdlbkxpbmU6IG51bWJlcixcbiAgZ2VuQ29sdW1uOiBudW1iZXIsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBzb3VyY2VMaW5lOiBudW1iZXIsXG4gIHNvdXJjZUNvbHVtbjogbnVtYmVyLFxuICBuYW1lPzogbnVsbCxcbiAgY29udGVudD86IHN0cmluZyB8IG51bGwsXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlZ21lbnQoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgZ2VuTGluZTogbnVtYmVyLFxuICBnZW5Db2x1bW46IG51bWJlcixcbiAgc291cmNlOiBzdHJpbmcsXG4gIHNvdXJjZUxpbmU6IG51bWJlcixcbiAgc291cmNlQ29sdW1uOiBudW1iZXIsXG4gIG5hbWU6IHN0cmluZyxcbiAgY29udGVudD86IHN0cmluZyB8IG51bGwsXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlZ21lbnQoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgZ2VuTGluZTogbnVtYmVyLFxuICBnZW5Db2x1bW46IG51bWJlcixcbiAgc291cmNlPzogc3RyaW5nIHwgbnVsbCxcbiAgc291cmNlTGluZT86IG51bWJlciB8IG51bGwsXG4gIHNvdXJjZUNvbHVtbj86IG51bWJlciB8IG51bGwsXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsLFxuICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbCxcbik6IHZvaWQge1xuICByZXR1cm4gYWRkU2VnbWVudEludGVybmFsKFxuICAgIGZhbHNlLFxuICAgIG1hcCxcbiAgICBnZW5MaW5lLFxuICAgIGdlbkNvbHVtbixcbiAgICBzb3VyY2UsXG4gICAgc291cmNlTGluZSxcbiAgICBzb3VyY2VDb2x1bW4sXG4gICAgbmFtZSxcbiAgICBjb250ZW50LFxuICApO1xufVxuXG4vKipcbiAqIEEgaGlnaC1sZXZlbCBBUEkgdG8gYXNzb2NpYXRlIGEgZ2VuZXJhdGVkIHBvc2l0aW9uIHdpdGggYW4gb3JpZ2luYWwgc291cmNlIHBvc2l0aW9uLiBMaW5lIGlzXG4gKiAxLWJhc2VkLCBidXQgY29sdW1uIGlzIDAtYmFzZWQsIGR1ZSB0byBsZWdhY3kgYmVoYXZpb3IgaW4gYHNvdXJjZS1tYXBgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRNYXBwaW5nKFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIG1hcHBpbmc6IHtcbiAgICBnZW5lcmF0ZWQ6IFBvcztcbiAgICBzb3VyY2U/OiBudWxsO1xuICAgIG9yaWdpbmFsPzogbnVsbDtcbiAgICBuYW1lPzogbnVsbDtcbiAgICBjb250ZW50PzogbnVsbDtcbiAgfSxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkTWFwcGluZyhcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBtYXBwaW5nOiB7XG4gICAgZ2VuZXJhdGVkOiBQb3M7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgb3JpZ2luYWw6IFBvcztcbiAgICBuYW1lPzogbnVsbDtcbiAgICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgfSxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkTWFwcGluZyhcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBtYXBwaW5nOiB7XG4gICAgZ2VuZXJhdGVkOiBQb3M7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgb3JpZ2luYWw6IFBvcztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29udGVudD86IHN0cmluZyB8IG51bGw7XG4gIH0sXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE1hcHBpbmcoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgbWFwcGluZzoge1xuICAgIGdlbmVyYXRlZDogUG9zO1xuICAgIHNvdXJjZT86IHN0cmluZyB8IG51bGw7XG4gICAgb3JpZ2luYWw/OiBQb3MgfCBudWxsO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCBudWxsO1xuICB9LFxuKTogdm9pZCB7XG4gIHJldHVybiBhZGRNYXBwaW5nSW50ZXJuYWwoZmFsc2UsIG1hcCwgbWFwcGluZyBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhZGRNYXBwaW5nSW50ZXJuYWw+WzJdKTtcbn1cblxuLyoqXG4gKiBTYW1lIGFzIGBhZGRTZWdtZW50YCwgYnV0IHdpbGwgb25seSBhZGQgdGhlIHNlZ21lbnQgaWYgaXQgZ2VuZXJhdGVzIHVzZWZ1bCBpbmZvcm1hdGlvbiBpbiB0aGVcbiAqIHJlc3VsdGluZyBtYXAuIFRoaXMgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgc2VnbWVudHMgYXJlIGFkZGVkICoqaW4gb3JkZXIqKiwgbWVhbmluZyB5b3Ugc2hvdWxkXG4gKiBub3QgYWRkIGEgc2VnbWVudCB3aXRoIGEgbG93ZXIgZ2VuZXJhdGVkIGxpbmUvY29sdW1uIHRoYW4gb25lIHRoYXQgY2FtZSBiZWZvcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUFkZFNlZ21lbnQ6IHR5cGVvZiBhZGRTZWdtZW50ID0gKFxuICBtYXAsXG4gIGdlbkxpbmUsXG4gIGdlbkNvbHVtbixcbiAgc291cmNlLFxuICBzb3VyY2VMaW5lLFxuICBzb3VyY2VDb2x1bW4sXG4gIG5hbWUsXG4gIGNvbnRlbnQsXG4pID0+IHtcbiAgcmV0dXJuIGFkZFNlZ21lbnRJbnRlcm5hbChcbiAgICB0cnVlLFxuICAgIG1hcCxcbiAgICBnZW5MaW5lLFxuICAgIGdlbkNvbHVtbixcbiAgICBzb3VyY2UsXG4gICAgc291cmNlTGluZSxcbiAgICBzb3VyY2VDb2x1bW4sXG4gICAgbmFtZSxcbiAgICBjb250ZW50LFxuICApO1xufTtcblxuLyoqXG4gKiBTYW1lIGFzIGBhZGRNYXBwaW5nYCwgYnV0IHdpbGwgb25seSBhZGQgdGhlIG1hcHBpbmcgaWYgaXQgZ2VuZXJhdGVzIHVzZWZ1bCBpbmZvcm1hdGlvbiBpbiB0aGVcbiAqIHJlc3VsdGluZyBtYXAuIFRoaXMgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgbWFwcGluZ3MgYXJlIGFkZGVkICoqaW4gb3JkZXIqKiwgbWVhbmluZyB5b3Ugc2hvdWxkXG4gKiBub3QgYWRkIGEgbWFwcGluZyB3aXRoIGEgbG93ZXIgZ2VuZXJhdGVkIGxpbmUvY29sdW1uIHRoYW4gb25lIHRoYXQgY2FtZSBiZWZvcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXliZUFkZE1hcHBpbmc6IHR5cGVvZiBhZGRNYXBwaW5nID0gKG1hcCwgbWFwcGluZykgPT4ge1xuICByZXR1cm4gYWRkTWFwcGluZ0ludGVybmFsKHRydWUsIG1hcCwgbWFwcGluZyBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhZGRNYXBwaW5nSW50ZXJuYWw+WzJdKTtcbn07XG5cbi8qKlxuICogQWRkcy9yZW1vdmVzIHRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgc291cmNlIG1hcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFNvdXJjZUNvbnRlbnQobWFwOiBHZW5NYXBwaW5nLCBzb3VyY2U6IHN0cmluZywgY29udGVudDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICBjb25zdCB7IF9zb3VyY2VzOiBzb3VyY2VzLCBfc291cmNlc0NvbnRlbnQ6IHNvdXJjZXNDb250ZW50IH0gPSBjYXN0KG1hcCk7XG4gIGNvbnN0IGluZGV4ID0gcHV0KHNvdXJjZXMsIHNvdXJjZSk7XG4gIHNvdXJjZXNDb250ZW50W2luZGV4XSA9IGNvbnRlbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJZ25vcmUobWFwOiBHZW5NYXBwaW5nLCBzb3VyY2U6IHN0cmluZywgaWdub3JlID0gdHJ1ZSkge1xuICBjb25zdCB7IF9zb3VyY2VzOiBzb3VyY2VzLCBfc291cmNlc0NvbnRlbnQ6IHNvdXJjZXNDb250ZW50LCBfaWdub3JlTGlzdDogaWdub3JlTGlzdCB9ID0gY2FzdChtYXApO1xuICBjb25zdCBpbmRleCA9IHB1dChzb3VyY2VzLCBzb3VyY2UpO1xuICBpZiAoaW5kZXggPT09IHNvdXJjZXNDb250ZW50Lmxlbmd0aCkgc291cmNlc0NvbnRlbnRbaW5kZXhdID0gbnVsbDtcbiAgaWYgKGlnbm9yZSkgcHV0KGlnbm9yZUxpc3QsIGluZGV4KTtcbiAgZWxzZSByZW1vdmUoaWdub3JlTGlzdCwgaW5kZXgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzb3VyY2VtYXAgb2JqZWN0ICh3aXRoIGRlY29kZWQgbWFwcGluZ3MpIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGEgbGlicmFyeSB0aGF0IGV4cGVjdHNcbiAqIGEgc291cmNlbWFwLCBvciB0byBKU09OLnN0cmluZ2lmeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGVjb2RlZE1hcChtYXA6IEdlbk1hcHBpbmcpOiBEZWNvZGVkU291cmNlTWFwIHtcbiAgY29uc3Qge1xuICAgIF9tYXBwaW5nczogbWFwcGluZ3MsXG4gICAgX3NvdXJjZXM6IHNvdXJjZXMsXG4gICAgX3NvdXJjZXNDb250ZW50OiBzb3VyY2VzQ29udGVudCxcbiAgICBfbmFtZXM6IG5hbWVzLFxuICAgIF9pZ25vcmVMaXN0OiBpZ25vcmVMaXN0LFxuICB9ID0gY2FzdChtYXApO1xuICByZW1vdmVFbXB0eUZpbmFsTGluZXMobWFwcGluZ3MpO1xuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogMyxcbiAgICBmaWxlOiBtYXAuZmlsZSB8fCB1bmRlZmluZWQsXG4gICAgbmFtZXM6IG5hbWVzLmFycmF5LFxuICAgIHNvdXJjZVJvb3Q6IG1hcC5zb3VyY2VSb290IHx8IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VzOiBzb3VyY2VzLmFycmF5LFxuICAgIHNvdXJjZXNDb250ZW50LFxuICAgIG1hcHBpbmdzLFxuICAgIGlnbm9yZUxpc3Q6IGlnbm9yZUxpc3QuYXJyYXksXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZW1hcCBvYmplY3QgKHdpdGggZW5jb2RlZCBtYXBwaW5ncykgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSBsaWJyYXJ5IHRoYXQgZXhwZWN0c1xuICogYSBzb3VyY2VtYXAsIG9yIHRvIEpTT04uc3RyaW5naWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FbmNvZGVkTWFwKG1hcDogR2VuTWFwcGluZyk6IEVuY29kZWRTb3VyY2VNYXAge1xuICBjb25zdCBkZWNvZGVkID0gdG9EZWNvZGVkTWFwKG1hcCk7XG4gIHJldHVybiB7XG4gICAgLi4uZGVjb2RlZCxcbiAgICBtYXBwaW5nczogZW5jb2RlKGRlY29kZWQubWFwcGluZ3MgYXMgU291cmNlTWFwU2VnbWVudFtdW10pLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgR2VuTWFwcGluZywgdXNpbmcgdGhlIGFscmVhZHkgcHJlc2VudCBtYXBwaW5ncyBvZiB0aGUgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWFwKGlucHV0OiBTb3VyY2VNYXBJbnB1dCk6IEdlbk1hcHBpbmcge1xuICBjb25zdCBtYXAgPSBuZXcgVHJhY2VNYXAoaW5wdXQpO1xuICBjb25zdCBnZW4gPSBuZXcgR2VuTWFwcGluZyh7IGZpbGU6IG1hcC5maWxlLCBzb3VyY2VSb290OiBtYXAuc291cmNlUm9vdCB9KTtcblxuICBwdXRBbGwoY2FzdChnZW4pLl9uYW1lcywgbWFwLm5hbWVzKTtcbiAgcHV0QWxsKGNhc3QoZ2VuKS5fc291cmNlcywgbWFwLnNvdXJjZXMgYXMgc3RyaW5nW10pO1xuICBjYXN0KGdlbikuX3NvdXJjZXNDb250ZW50ID0gbWFwLnNvdXJjZXNDb250ZW50IHx8IG1hcC5zb3VyY2VzLm1hcCgoKSA9PiBudWxsKTtcbiAgY2FzdChnZW4pLl9tYXBwaW5ncyA9IGRlY29kZWRNYXBwaW5ncyhtYXApIGFzIEdlbk1hcHBpbmdbJ19tYXBwaW5ncyddO1xuICBpZiAobWFwLmlnbm9yZUxpc3QpIHB1dEFsbChjYXN0KGdlbikuX2lnbm9yZUxpc3QsIG1hcC5pZ25vcmVMaXN0KTtcblxuICByZXR1cm4gZ2VuO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgaGlnaC1sZXZlbCBtYXBwaW5nIG9iamVjdHMgZm9yIGV2ZXJ5IHJlY29yZGVkIHNlZ21lbnQsIHdoaWNoIGNvdWxkIHRoZW4gYmVcbiAqIHBhc3NlZCB0byB0aGUgYHNvdXJjZS1tYXBgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxNYXBwaW5ncyhtYXA6IEdlbk1hcHBpbmcpOiBNYXBwaW5nW10ge1xuICBjb25zdCBvdXQ6IE1hcHBpbmdbXSA9IFtdO1xuICBjb25zdCB7IF9tYXBwaW5nczogbWFwcGluZ3MsIF9zb3VyY2VzOiBzb3VyY2VzLCBfbmFtZXM6IG5hbWVzIH0gPSBjYXN0KG1hcCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBtYXBwaW5nc1tpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHNlZyA9IGxpbmVbal07XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlZCA9IHsgbGluZTogaSArIDEsIGNvbHVtbjogc2VnW0NPTFVNTl0gfTtcbiAgICAgIGxldCBzb3VyY2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCBvcmlnaW5hbDogUG9zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHNlZy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgc291cmNlID0gc291cmNlcy5hcnJheVtzZWdbU09VUkNFU19JTkRFWF1dO1xuICAgICAgICBvcmlnaW5hbCA9IHsgbGluZTogc2VnW1NPVVJDRV9MSU5FXSArIDEsIGNvbHVtbjogc2VnW1NPVVJDRV9DT0xVTU5dIH07XG5cbiAgICAgICAgaWYgKHNlZy5sZW5ndGggPT09IDUpIG5hbWUgPSBuYW1lcy5hcnJheVtzZWdbTkFNRVNfSU5ERVhdXTtcbiAgICAgIH1cblxuICAgICAgb3V0LnB1c2goeyBnZW5lcmF0ZWQsIHNvdXJjZSwgb3JpZ2luYWwsIG5hbWUgfSBhcyBNYXBwaW5nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG4vLyBUaGlzIHNwbGl0IGRlY2xhcmF0aW9uIGlzIG9ubHkgc28gdGhhdCB0ZXJzZXIgY2FuIGVsbWluaWF0ZSB0aGUgc3RhdGljIGluaXRpYWxpemF0aW9uIGJsb2NrLlxuZnVuY3Rpb24gYWRkU2VnbWVudEludGVybmFsPFMgZXh0ZW5kcyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPihcbiAgc2tpcGFibGU6IGJvb2xlYW4sXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgZ2VuTGluZTogbnVtYmVyLFxuICBnZW5Db2x1bW46IG51bWJlcixcbiAgc291cmNlOiBTLFxuICBzb3VyY2VMaW5lOiBTIGV4dGVuZHMgc3RyaW5nID8gbnVtYmVyIDogbnVsbCB8IHVuZGVmaW5lZCxcbiAgc291cmNlQ29sdW1uOiBTIGV4dGVuZHMgc3RyaW5nID8gbnVtYmVyIDogbnVsbCB8IHVuZGVmaW5lZCxcbiAgbmFtZTogUyBleHRlbmRzIHN0cmluZyA/IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgOiBudWxsIHwgdW5kZWZpbmVkLFxuICBjb250ZW50OiBTIGV4dGVuZHMgc3RyaW5nID8gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA6IG51bGwgfCB1bmRlZmluZWQsXG4pOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIF9tYXBwaW5nczogbWFwcGluZ3MsXG4gICAgX3NvdXJjZXM6IHNvdXJjZXMsXG4gICAgX3NvdXJjZXNDb250ZW50OiBzb3VyY2VzQ29udGVudCxcbiAgICBfbmFtZXM6IG5hbWVzLFxuICB9ID0gY2FzdChtYXApO1xuICBjb25zdCBsaW5lID0gZ2V0TGluZShtYXBwaW5ncywgZ2VuTGluZSk7XG4gIGNvbnN0IGluZGV4ID0gZ2V0Q29sdW1uSW5kZXgobGluZSwgZ2VuQ29sdW1uKTtcblxuICBpZiAoIXNvdXJjZSkge1xuICAgIGlmIChza2lwYWJsZSAmJiBza2lwU291cmNlbGVzcyhsaW5lLCBpbmRleCkpIHJldHVybjtcbiAgICByZXR1cm4gaW5zZXJ0KGxpbmUsIGluZGV4LCBbZ2VuQ29sdW1uXSk7XG4gIH1cblxuICAvLyBTaWdoLCBUeXBlU2NyaXB0IGNhbid0IGZpZ3VyZSBvdXQgc291cmNlTGluZSBhbmQgc291cmNlQ29sdW1uIGFyZW4ndCBudWxsaXNoIGlmIHNvdXJjZVxuICAvLyBpc24ndCBudWxsaXNoLlxuICBhc3NlcnQ8bnVtYmVyPihzb3VyY2VMaW5lKTtcbiAgYXNzZXJ0PG51bWJlcj4oc291cmNlQ29sdW1uKTtcblxuICBjb25zdCBzb3VyY2VzSW5kZXggPSBwdXQoc291cmNlcywgc291cmNlKTtcbiAgY29uc3QgbmFtZXNJbmRleCA9IG5hbWUgPyBwdXQobmFtZXMsIG5hbWUpIDogTk9fTkFNRTtcbiAgaWYgKHNvdXJjZXNJbmRleCA9PT0gc291cmNlc0NvbnRlbnQubGVuZ3RoKSBzb3VyY2VzQ29udGVudFtzb3VyY2VzSW5kZXhdID0gY29udGVudCA/PyBudWxsO1xuXG4gIGlmIChza2lwYWJsZSAmJiBza2lwU291cmNlKGxpbmUsIGluZGV4LCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbiwgbmFtZXNJbmRleCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gaW5zZXJ0KFxuICAgIGxpbmUsXG4gICAgaW5kZXgsXG4gICAgbmFtZVxuICAgICAgPyBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbiwgbmFtZXNJbmRleF1cbiAgICAgIDogW2dlbkNvbHVtbiwgc291cmNlc0luZGV4LCBzb3VyY2VMaW5lLCBzb3VyY2VDb2x1bW5dLFxuICApO1xufVxuXG5mdW5jdGlvbiBhc3NlcnQ8VD4oX3ZhbDogdW5rbm93bik6IGFzc2VydHMgX3ZhbCBpcyBUIHtcbiAgLy8gbm9vcC5cbn1cblxuZnVuY3Rpb24gZ2V0TGluZShtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sIGluZGV4OiBudW1iZXIpOiBTb3VyY2VNYXBTZWdtZW50W10ge1xuICBmb3IgKGxldCBpID0gbWFwcGluZ3MubGVuZ3RoOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICBtYXBwaW5nc1tpXSA9IFtdO1xuICB9XG4gIHJldHVybiBtYXBwaW5nc1tpbmRleF07XG59XG5cbmZ1bmN0aW9uIGdldENvbHVtbkluZGV4KGxpbmU6IFNvdXJjZU1hcFNlZ21lbnRbXSwgZ2VuQ29sdW1uOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgaW5kZXggPSBsaW5lLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpbmRleCA9IGktLSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBsaW5lW2ldO1xuICAgIGlmIChnZW5Db2x1bW4gPj0gY3VycmVudFtDT0xVTU5dKSBicmVhaztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGluc2VydDxUPihhcnJheTogVFtdLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogVCkge1xuICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoOyBpID4gaW5kZXg7IGktLSkge1xuICAgIGFycmF5W2ldID0gYXJyYXlbaSAtIDFdO1xuICB9XG4gIGFycmF5W2luZGV4XSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFbXB0eUZpbmFsTGluZXMobWFwcGluZ3M6IFNvdXJjZU1hcFNlZ21lbnRbXVtdKSB7XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBtYXBwaW5ncztcbiAgbGV0IGxlbiA9IGxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgbGVuID0gaSwgaS0tKSB7XG4gICAgaWYgKG1hcHBpbmdzW2ldLmxlbmd0aCA+IDApIGJyZWFrO1xuICB9XG4gIGlmIChsZW4gPCBsZW5ndGgpIG1hcHBpbmdzLmxlbmd0aCA9IGxlbjtcbn1cblxuZnVuY3Rpb24gcHV0QWxsPFQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXI+KHNldGFycjogU2V0QXJyYXk8VD4sIGFycmF5OiBUW10pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgcHV0KHNldGFyciwgYXJyYXlbaV0pO1xufVxuXG5mdW5jdGlvbiBza2lwU291cmNlbGVzcyhsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgLy8gVGhlIHN0YXJ0IG9mIGEgbGluZSBpcyBhbHJlYWR5IHNvdXJjZWxlc3MsIHNvIGFkZGluZyBhIHNvdXJjZWxlc3Mgc2VnbWVudCB0byB0aGUgYmVnaW5uaW5nXG4gIC8vIGRvZXNuJ3QgZ2VuZXJhdGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbi5cbiAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBwcmV2ID0gbGluZVtpbmRleCAtIDFdO1xuICAvLyBJZiB0aGUgcHJldmlvdXMgc2VnbWVudCBpcyBhbHNvIHNvdXJjZWxlc3MsIHRoZW4gYWRkaW5nIGFub3RoZXIgc291cmNlbGVzcyBzZWdtZW50IGRvZXNuJ3RcbiAgLy8gZ2VucmF0ZSBhbnkgbmV3IGluZm9ybWF0aW9uLiBFbHNlLCB0aGlzIHNlZ21lbnQgd2lsbCBlbmQgdGhlIHNvdXJjZS9uYW1lZCBzZWdtZW50IGFuZCBwb2ludCB0b1xuICAvLyBhIHNvdXJjZWxlc3MgcG9zaXRpb24sIHdoaWNoIGlzIHVzZWZ1bC5cbiAgcmV0dXJuIHByZXYubGVuZ3RoID09PSAxO1xufVxuXG5mdW5jdGlvbiBza2lwU291cmNlKFxuICBsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10sXG4gIGluZGV4OiBudW1iZXIsXG4gIHNvdXJjZXNJbmRleDogbnVtYmVyLFxuICBzb3VyY2VMaW5lOiBudW1iZXIsXG4gIHNvdXJjZUNvbHVtbjogbnVtYmVyLFxuICBuYW1lc0luZGV4OiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgLy8gQSBzb3VyY2UvbmFtZWQgc2VnbWVudCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIGdpdmVzIHBvc2l0aW9uIGF0IHRoYXQgZ2VuQ29sdW1uXG4gIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHByZXYgPSBsaW5lW2luZGV4IC0gMV07XG5cbiAgLy8gSWYgdGhlIHByZXZpb3VzIHNlZ21lbnQgaXMgc291cmNlbGVzcywgdGhlbiB3ZSdyZSB0cmFuc2l0aW9uaW5nIHRvIGEgc291cmNlLlxuICBpZiAocHJldi5sZW5ndGggPT09IDEpIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGUgcHJldmlvdXMgc2VnbWVudCBtYXBzIHRvIHRoZSBleGFjdCBzYW1lIHNvdXJjZSBwb3NpdGlvbiwgdGhlbiB0aGlzIHNlZ21lbnQgZG9lc24ndFxuICAvLyBwcm92aWRlIGFueSBuZXcgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gIHJldHVybiAoXG4gICAgc291cmNlc0luZGV4ID09PSBwcmV2W1NPVVJDRVNfSU5ERVhdICYmXG4gICAgc291cmNlTGluZSA9PT0gcHJldltTT1VSQ0VfTElORV0gJiZcbiAgICBzb3VyY2VDb2x1bW4gPT09IHByZXZbU09VUkNFX0NPTFVNTl0gJiZcbiAgICBuYW1lc0luZGV4ID09PSAocHJldi5sZW5ndGggPT09IDUgPyBwcmV2W05BTUVTX0lOREVYXSA6IE5PX05BTUUpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkZE1hcHBpbmdJbnRlcm5hbDxTIGV4dGVuZHMgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oXG4gIHNraXBhYmxlOiBib29sZWFuLFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIG1hcHBpbmc6IHtcbiAgICBnZW5lcmF0ZWQ6IFBvcztcbiAgICBzb3VyY2U6IFM7XG4gICAgb3JpZ2luYWw6IFMgZXh0ZW5kcyBzdHJpbmcgPyBQb3MgOiBudWxsIHwgdW5kZWZpbmVkO1xuICAgIG5hbWU6IFMgZXh0ZW5kcyBzdHJpbmcgPyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIDogbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBjb250ZW50OiBTIGV4dGVuZHMgc3RyaW5nID8gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA6IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0sXG4pIHtcbiAgY29uc3QgeyBnZW5lcmF0ZWQsIHNvdXJjZSwgb3JpZ2luYWwsIG5hbWUsIGNvbnRlbnQgfSA9IG1hcHBpbmc7XG4gIGlmICghc291cmNlKSB7XG4gICAgcmV0dXJuIGFkZFNlZ21lbnRJbnRlcm5hbChcbiAgICAgIHNraXBhYmxlLFxuICAgICAgbWFwLFxuICAgICAgZ2VuZXJhdGVkLmxpbmUgLSAxLFxuICAgICAgZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICk7XG4gIH1cbiAgYXNzZXJ0PFBvcz4ob3JpZ2luYWwpO1xuICByZXR1cm4gYWRkU2VnbWVudEludGVybmFsKFxuICAgIHNraXBhYmxlLFxuICAgIG1hcCxcbiAgICBnZW5lcmF0ZWQubGluZSAtIDEsXG4gICAgZ2VuZXJhdGVkLmNvbHVtbixcbiAgICBzb3VyY2UgYXMgc3RyaW5nLFxuICAgIG9yaWdpbmFsLmxpbmUgLSAxLFxuICAgIG9yaWdpbmFsLmNvbHVtbixcbiAgICBuYW1lLFxuICAgIGNvbnRlbnQsXG4gICk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGV0YWlsQ29udGV4dCA9IGV4cG9ydHMuTm9vcENvbnRleHQgPSBleHBvcnRzLlZFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogRXJyb3IgdGhyb3duIGJ5IHZhbGlkYXRpb24uIEJlc2lkZXMgYW4gaW5mb3JtYXRpdmUgbWVzc2FnZSwgaXQgaW5jbHVkZXMgdGhlIHBhdGggdG8gdGhlXG4gKiBwcm9wZXJ0eSB3aGljaCB0cmlnZ2VyZWQgdGhlIGZhaWx1cmUuXG4gKi9cbnZhciBWRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWRXJyb3IocGF0aCwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrIGZvciBpbmZvIGFib3V0IHRoaXMgd29ya2Fyb3VuZC5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBWRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gVkVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5WRXJyb3IgPSBWRXJyb3I7XG4vKipcbiAqIEZhc3QgaW1wbGVtZW50YXRpb24gb2YgSUNvbnRleHQgdXNlZCBmb3IgZmlyc3QtcGFzcyB2YWxpZGF0aW9uLiBJZiB0aGF0IGZhaWxzLCB3ZSBjYW4gdmFsaWRhdGVcbiAqIHVzaW5nIERldGFpbENvbnRleHQgdG8gY29sbGVjdCBlcnJvciBtZXNzYWdlcy4gVGhhdCdzIGZhc3RlciBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZW4gbWVzc2FnZXNcbiAqIG5vcm1hbGx5IHBhc3MgdmFsaWRhdGlvbi5cbiAqL1xudmFyIE5vb3BDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BDb250ZXh0KCkge1xuICAgIH1cbiAgICBOb29wQ29udGV4dC5wcm90b3R5cGUuZmFpbCA9IGZ1bmN0aW9uIChyZWxQYXRoLCBtZXNzYWdlLCBzY29yZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dC5wcm90b3R5cGUudW5pb25SZXNvbHZlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG4gICAgTm9vcENvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgIE5vb3BDb250ZXh0LnByb3RvdHlwZS5yZXNvbHZlVW5pb24gPSBmdW5jdGlvbiAodXIpIHsgfTtcbiAgICByZXR1cm4gTm9vcENvbnRleHQ7XG59KCkpO1xuZXhwb3J0cy5Ob29wQ29udGV4dCA9IE5vb3BDb250ZXh0O1xuLyoqXG4gKiBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJQ29udGV4dCB0aGF0IGNvbGxlY3RzIG1lYW5pbmdmdWxsIGVycm9ycy5cbiAqL1xudmFyIERldGFpbENvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGV0YWlsQ29udGV4dCgpIHtcbiAgICAgICAgLy8gU3RhY2sgb2YgcHJvcGVydHkgbmFtZXMgYW5kIGFzc29jaWF0ZWQgbWVzc2FnZXMgZm9yIHJlcG9ydGluZyBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICB0aGlzLl9wcm9wTmFtZXMgPSBbXCJcIl07XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW251bGxdO1xuICAgICAgICAvLyBTY29yZSBpcyB1c2VkIHRvIGNob29zZSB0aGUgYmVzdCB1bmlvbiBtZW1iZXIgd2hvc2UgRGV0YWlsQ29udGV4dCB0byB1c2UgZm9yIHJlcG9ydGluZy5cbiAgICAgICAgLy8gSGlnaGVyIHNjb3JlIG1lYW5zIGJldHRlciBtYXRjaCAob3IgcmF0aGVyIGxlc3Mgc2V2ZXJlIG1pc21hdGNoKS5cbiAgICAgICAgdGhpcy5fc2NvcmUgPSAwO1xuICAgIH1cbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5mYWlsID0gZnVuY3Rpb24gKHJlbFBhdGgsIG1lc3NhZ2UsIHNjb3JlKSB7XG4gICAgICAgIHRoaXMuX3Byb3BOYW1lcy5wdXNoKHJlbFBhdGgpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLl9zY29yZSArPSBzY29yZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRGV0YWlsQ29udGV4dC5wcm90b3R5cGUudW5pb25SZXNvbHZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWxVbmlvblJlc29sdmVyKCk7XG4gICAgfTtcbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5yZXNvbHZlVW5pb24gPSBmdW5jdGlvbiAodW5pb25SZXNvbHZlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgdSA9IHVuaW9uUmVzb2x2ZXI7XG4gICAgICAgIHZhciBiZXN0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYyA9IHUuY29udGV4dHM7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgY3R4ID0gX2NbX2ldO1xuICAgICAgICAgICAgaWYgKCFiZXN0IHx8IGN0eC5fc2NvcmUgPj0gYmVzdC5fc2NvcmUpIHtcbiAgICAgICAgICAgICAgICBiZXN0ID0gY3R4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZXN0ICYmIGJlc3QuX3Njb3JlID4gMCkge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5fcHJvcE5hbWVzKS5wdXNoLmFwcGx5KF9hLCBiZXN0Ll9wcm9wTmFtZXMpO1xuICAgICAgICAgICAgKF9iID0gdGhpcy5fbWVzc2FnZXMpLnB1c2guYXBwbHkoX2IsIGJlc3QuX21lc3NhZ2VzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGV0YWlsQ29udGV4dC5wcm90b3R5cGUuZ2V0RXJyb3IgPSBmdW5jdGlvbiAocGF0aCkge1xuICAgICAgICB2YXIgbXNnUGFydHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3Byb3BOYW1lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wcm9wTmFtZXNbaV07XG4gICAgICAgICAgICBwYXRoICs9ICh0eXBlb2YgcCA9PT0gXCJudW1iZXJcIikgPyBcIltcIiArIHAgKyBcIl1cIiA6IChwID8gXCIuXCIgKyBwIDogXCJcIik7XG4gICAgICAgICAgICB2YXIgbSA9IHRoaXMuX21lc3NhZ2VzW2ldO1xuICAgICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgICAgICBtc2dQYXJ0cy5wdXNoKHBhdGggKyBcIiBcIiArIG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVkVycm9yKHBhdGgsIG1zZ1BhcnRzLmpvaW4oXCI7IFwiKSk7XG4gICAgfTtcbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5nZXRFcnJvckRldGFpbCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHZhciBkZXRhaWxzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9wcm9wTmFtZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcHJvcE5hbWVzW2ldO1xuICAgICAgICAgICAgcGF0aCArPSAodHlwZW9mIHAgPT09IFwibnVtYmVyXCIpID8gXCJbXCIgKyBwICsgXCJdXCIgOiAocCA/IFwiLlwiICsgcCA6IFwiXCIpO1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZGV0YWlscy5wdXNoKHsgcGF0aDogcGF0aCwgbWVzc2FnZTogbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZGV0YWlsID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IGRldGFpbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChkZXRhaWwpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzW2ldLm5lc3RlZCA9IFtkZXRhaWxdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGV0YWlsID0gZGV0YWlsc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGV0YWlsO1xuICAgIH07XG4gICAgcmV0dXJuIERldGFpbENvbnRleHQ7XG59KCkpO1xuZXhwb3J0cy5EZXRhaWxDb250ZXh0ID0gRGV0YWlsQ29udGV4dDtcbnZhciBEZXRhaWxVbmlvblJlc29sdmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERldGFpbFVuaW9uUmVzb2x2ZXIoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB9XG4gICAgRGV0YWlsVW5pb25SZXNvbHZlci5wcm90b3R5cGUuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN0eCA9IG5ldyBEZXRhaWxDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dHMucHVzaChjdHgpO1xuICAgICAgICByZXR1cm4gY3R4O1xuICAgIH07XG4gICAgcmV0dXJuIERldGFpbFVuaW9uUmVzb2x2ZXI7XG59KCkpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIG5vZGVzIHVzZWQgdG8gZGVmaW5lIHR5cGVzIGFuZCB2YWxpZGF0aW9ucyBmb3Igb2JqZWN0cyBhbmQgaW50ZXJmYWNlcy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGU6bm8tc2hhZG93ZWQtdmFyaWFibGUgcHJlZmVyLWZvci1vZlxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhc2ljVHlwZXMgPSBleHBvcnRzLkJhc2ljVHlwZSA9IGV4cG9ydHMuVFBhcmFtTGlzdCA9IGV4cG9ydHMuVFBhcmFtID0gZXhwb3J0cy5wYXJhbSA9IGV4cG9ydHMuVEZ1bmMgPSBleHBvcnRzLmZ1bmMgPSBleHBvcnRzLlRQcm9wID0gZXhwb3J0cy5UT3B0aW9uYWwgPSBleHBvcnRzLm9wdCA9IGV4cG9ydHMuVElmYWNlID0gZXhwb3J0cy5pZmFjZSA9IGV4cG9ydHMuVEVudW1MaXRlcmFsID0gZXhwb3J0cy5lbnVtbGl0ID0gZXhwb3J0cy5URW51bVR5cGUgPSBleHBvcnRzLmVudW10eXBlID0gZXhwb3J0cy5USW50ZXJzZWN0aW9uID0gZXhwb3J0cy5pbnRlcnNlY3Rpb24gPSBleHBvcnRzLlRVbmlvbiA9IGV4cG9ydHMudW5pb24gPSBleHBvcnRzLlRUdXBsZSA9IGV4cG9ydHMudHVwbGUgPSBleHBvcnRzLlRBcnJheSA9IGV4cG9ydHMuYXJyYXkgPSBleHBvcnRzLlRMaXRlcmFsID0gZXhwb3J0cy5saXQgPSBleHBvcnRzLlROYW1lID0gZXhwb3J0cy5uYW1lID0gZXhwb3J0cy5UVHlwZSA9IHZvaWQgMDtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuLyoqIE5vZGUgdGhhdCByZXByZXNlbnRzIGEgdHlwZS4gKi9cbnZhciBUVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUVHlwZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIFRUeXBlO1xufSgpKTtcbmV4cG9ydHMuVFR5cGUgPSBUVHlwZTtcbi8qKiBQYXJzZXMgYSB0eXBlIHNwZWMgaW50byBhIFRUeXBlIG5vZGUuICovXG5mdW5jdGlvbiBwYXJzZVNwZWModHlwZVNwZWMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHR5cGVTcGVjID09PSBcInN0cmluZ1wiID8gbmFtZSh0eXBlU3BlYykgOiB0eXBlU3BlYztcbn1cbmZ1bmN0aW9uIGdldE5hbWVkVHlwZShzdWl0ZSwgbmFtZSkge1xuICAgIHZhciB0dHlwZSA9IHN1aXRlW25hbWVdO1xuICAgIGlmICghdHR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biB0eXBlIFwiICsgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0dHlwZTtcbn1cbi8qKlxuICogRGVmaW5lcyBhIHR5cGUgbmFtZSwgZWl0aGVyIGJ1aWx0LWluLCBvciBkZWZpbmVkIGluIHRoaXMgc3VpdGUuIEl0IGNhbiB0eXBpY2FsbHkgYmUgaW5jbHVkZWQgaW5cbiAqIHRoZSBzcGVjcyBhcyBqdXN0IGEgcGxhaW4gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBuYW1lKHZhbHVlKSB7IHJldHVybiBuZXcgVE5hbWUodmFsdWUpOyB9XG5leHBvcnRzLm5hbWUgPSBuYW1lO1xudmFyIFROYW1lID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUTmFtZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUTmFtZShuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm90IGEgXCIgKyBuYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFROYW1lLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QsIGFsbG93ZWRQcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgdHR5cGUgPSBnZXROYW1lZFR5cGUoc3VpdGUsIHRoaXMubmFtZSk7XG4gICAgICAgIHZhciBjaGVja2VyID0gdHR5cGUuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0LCBhbGxvd2VkUHJvcHMpO1xuICAgICAgICBpZiAodHR5cGUgaW5zdGFuY2VvZiBCYXNpY1R5cGUgfHwgdHR5cGUgaW5zdGFuY2VvZiBUTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrZXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIGNvbXBsZXggdHlwZXMsIGFkZCBhbiBhZGRpdGlvbmFsIFwiaXMgbm90IGEgPFR5cGU+XCIgbWVzc2FnZSBvbiBmYWlsdXJlLlxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHsgcmV0dXJuIGNoZWNrZXIodmFsdWUsIGN0eCkgPyB0cnVlIDogY3R4LmZhaWwobnVsbCwgX3RoaXMuX2ZhaWxNc2csIDApOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIFROYW1lO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UTmFtZSA9IFROYW1lO1xuLyoqXG4gKiBEZWZpbmVzIGEgbGl0ZXJhbCB2YWx1ZSwgZS5nLiBsaXQoJ2hlbGxvJykgb3IgbGl0KDEyMykuXG4gKi9cbmZ1bmN0aW9uIGxpdCh2YWx1ZSkgeyByZXR1cm4gbmV3IFRMaXRlcmFsKHZhbHVlKTsgfVxuZXhwb3J0cy5saXQgPSBsaXQ7XG52YXIgVExpdGVyYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRMaXRlcmFsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIF90aGlzLm5hbWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIF90aGlzLl9mYWlsTXNnID0gXCJpcyBub3QgXCIgKyBfdGhpcy5uYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRMaXRlcmFsLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7IHJldHVybiAodmFsdWUgPT09IF90aGlzLnZhbHVlKSA/IHRydWUgOiBjdHguZmFpbChudWxsLCBfdGhpcy5fZmFpbE1zZywgLTEpOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRMaXRlcmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UTGl0ZXJhbCA9IFRMaXRlcmFsO1xuLyoqXG4gKiBEZWZpbmVzIGFuIGFycmF5IHR5cGUsIGUuZy4gYXJyYXkoJ251bWJlcicpLlxuICovXG5mdW5jdGlvbiBhcnJheSh0eXBlU3BlYykgeyByZXR1cm4gbmV3IFRBcnJheShwYXJzZVNwZWModHlwZVNwZWMpKTsgfVxuZXhwb3J0cy5hcnJheSA9IGFycmF5O1xudmFyIFRBcnJheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEFycmF5LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRBcnJheSh0dHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRBcnJheS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpdGVtQ2hlY2tlciA9IHRoaXMudHR5cGUuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIFwiaXMgbm90IGFuIGFycmF5XCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvayA9IGl0ZW1DaGVja2VyKHZhbHVlW2ldLCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKGksIG51bGwsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRBcnJheTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVEFycmF5ID0gVEFycmF5O1xuLyoqXG4gKiBEZWZpbmVzIGEgdHVwbGUgdHlwZSwgZS5nLiB0dXBsZSgnc3RyaW5nJywgJ251bWJlcicpLlxuICovXG5mdW5jdGlvbiB0dXBsZSgpIHtcbiAgICB2YXIgdHlwZVNwZWMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3BlY1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRUdXBsZSh0eXBlU3BlYy5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHBhcnNlU3BlYyh0KTsgfSkpO1xufVxuZXhwb3J0cy50dXBsZSA9IHR1cGxlO1xudmFyIFRUdXBsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVFR1cGxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRUdXBsZSh0dHlwZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGVzID0gdHR5cGVzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRUdXBsZS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpdGVtQ2hlY2tlcnMgPSB0aGlzLnR0eXBlcy5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0KTsgfSk7XG4gICAgICAgIHZhciBjaGVja2VyID0gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmZhaWwobnVsbCwgXCJpcyBub3QgYW4gYXJyYXlcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1DaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvayA9IGl0ZW1DaGVja2Vyc1tpXSh2YWx1ZVtpXSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChpLCBudWxsLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKCFjaGVja2VyKHZhbHVlLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA8PSBpdGVtQ2hlY2tlcnMubGVuZ3RoID8gdHJ1ZSA6XG4gICAgICAgICAgICAgICAgY3R4LmZhaWwoaXRlbUNoZWNrZXJzLmxlbmd0aCwgXCJpcyBleHRyYW5lb3VzXCIsIDIpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRUdXBsZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVFR1cGxlID0gVFR1cGxlO1xuLyoqXG4gKiBEZWZpbmVzIGEgdW5pb24gdHlwZSwgZS5nLiB1bmlvbignbnVtYmVyJywgJ251bGwnKS5cbiAqL1xuZnVuY3Rpb24gdW5pb24oKSB7XG4gICAgdmFyIHR5cGVTcGVjID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdHlwZVNwZWNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUVW5pb24odHlwZVNwZWMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiBwYXJzZVNwZWModCk7IH0pKTtcbn1cbmV4cG9ydHMudW5pb24gPSB1bmlvbjtcbnZhciBUVW5pb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRVbmlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUVW5pb24odHR5cGVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnR0eXBlcyA9IHR0eXBlcztcbiAgICAgICAgdmFyIG5hbWVzID0gdHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdCBpbnN0YW5jZW9mIFROYW1lIHx8IHQgaW5zdGFuY2VvZiBUTGl0ZXJhbCA/IHQubmFtZSA6IG51bGw7IH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuOyB9KTtcbiAgICAgICAgdmFyIG90aGVyVHlwZXMgPSB0dHlwZXMubGVuZ3RoIC0gbmFtZXMubGVuZ3RoO1xuICAgICAgICBpZiAobmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3RoZXJUeXBlcyA+IDApIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKG90aGVyVHlwZXMgKyBcIiBtb3JlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuX2ZhaWxNc2cgPSBcImlzIG5vbmUgb2YgXCIgKyBuYW1lcy5qb2luKFwiLCBcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm9uZSBvZiBcIiArIG90aGVyVHlwZXMgKyBcIiB0eXBlc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVFVuaW9uLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGl0ZW1DaGVja2VycyA9IHRoaXMudHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5nZXRDaGVja2VyKHN1aXRlLCBzdHJpY3QpOyB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICB2YXIgdXIgPSBjdHgudW5pb25SZXNvbHZlcigpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgb2sgPSBpdGVtQ2hlY2tlcnNbaV0odmFsdWUsIHVyLmNyZWF0ZUNvbnRleHQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5yZXNvbHZlVW5pb24odXIpO1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAwKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUVW5pb247XG59KFRUeXBlKSk7XG5leHBvcnRzLlRVbmlvbiA9IFRVbmlvbjtcbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcnNlY3Rpb24gdHlwZSwgZS5nLiBpbnRlcnNlY3Rpb24oJ251bWJlcicsICdudWxsJykuXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdGlvbigpIHtcbiAgICB2YXIgdHlwZVNwZWMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3BlY1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRJbnRlcnNlY3Rpb24odHlwZVNwZWMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiBwYXJzZVNwZWModCk7IH0pKTtcbn1cbmV4cG9ydHMuaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uO1xudmFyIFRJbnRlcnNlY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRJbnRlcnNlY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEludGVyc2VjdGlvbih0dHlwZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGVzID0gdHR5cGVzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRJbnRlcnNlY3Rpb24ucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgYWxsb3dlZFByb3BzID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXJzID0gdGhpcy50dHlwZXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCwgYWxsb3dlZFByb3BzKTsgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgdmFyIG9rID0gaXRlbUNoZWNrZXJzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVja2VyKSB7IHJldHVybiBjaGVja2VyKHZhbHVlLCBjdHgpOyB9KTtcbiAgICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIG51bGwsIDApO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRJbnRlcnNlY3Rpb247XG59KFRUeXBlKSk7XG5leHBvcnRzLlRJbnRlcnNlY3Rpb24gPSBUSW50ZXJzZWN0aW9uO1xuLyoqXG4gKiBEZWZpbmVzIGFuIGVudW0gdHlwZSwgZS5nLiBlbnVtKHsnQSc6IDEsICdCJzogMn0pLlxuICovXG5mdW5jdGlvbiBlbnVtdHlwZSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gbmV3IFRFbnVtVHlwZSh2YWx1ZXMpO1xufVxuZXhwb3J0cy5lbnVtdHlwZSA9IGVudW10eXBlO1xudmFyIFRFbnVtVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEVudW1UeXBlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRFbnVtVHlwZShtZW1iZXJzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm1lbWJlcnMgPSBtZW1iZXJzO1xuICAgICAgICBfdGhpcy52YWxpZFZhbHVlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgX3RoaXMuX2ZhaWxNc2cgPSBcImlzIG5vdCBhIHZhbGlkIGVudW0gdmFsdWVcIjtcbiAgICAgICAgX3RoaXMudmFsaWRWYWx1ZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG1lbWJlcnMpLm1hcChmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWVtYmVyc1tuYW1lXTsgfSkpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRFbnVtVHlwZS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIChfdGhpcy52YWxpZFZhbHVlcy5oYXModmFsdWUpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAwKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVEVudW1UeXBlO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URW51bVR5cGUgPSBURW51bVR5cGU7XG4vKipcbiAqIERlZmluZXMgYSBsaXRlcmFsIGVudW0gdmFsdWUsIHN1Y2ggYXMgRGlyZWN0aW9uLlVwLCBzcGVjaWZpZWQgYXMgZW51bWxpdChcIkRpcmVjdGlvblwiLCBcIlVwXCIpLlxuICovXG5mdW5jdGlvbiBlbnVtbGl0KG5hbWUsIHByb3ApIHtcbiAgICByZXR1cm4gbmV3IFRFbnVtTGl0ZXJhbChuYW1lLCBwcm9wKTtcbn1cbmV4cG9ydHMuZW51bWxpdCA9IGVudW1saXQ7XG52YXIgVEVudW1MaXRlcmFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhURW51bUxpdGVyYWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEVudW1MaXRlcmFsKGVudW1OYW1lLCBwcm9wKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmVudW1OYW1lID0gZW51bU5hbWU7XG4gICAgICAgIF90aGlzLnByb3AgPSBwcm9wO1xuICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm90IFwiICsgZW51bU5hbWUgKyBcIi5cIiArIHByb3A7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVEVudW1MaXRlcmFsLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHR0eXBlID0gZ2V0TmFtZWRUeXBlKHN1aXRlLCB0aGlzLmVudW1OYW1lKTtcbiAgICAgICAgaWYgKCEodHR5cGUgaW5zdGFuY2VvZiBURW51bVR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIFwiICsgdGhpcy5lbnVtTmFtZSArIFwiIHVzZWQgaW4gZW51bWxpdCBpcyBub3QgYW4gZW51bSB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWwgPSB0dHlwZS5tZW1iZXJzW3RoaXMucHJvcF07XG4gICAgICAgIGlmICghdHR5cGUubWVtYmVycy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb3ApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHZhbHVlIFwiICsgdGhpcy5lbnVtTmFtZSArIFwiLlwiICsgdGhpcy5wcm9wICsgXCIgdXNlZCBpbiBlbnVtbGl0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkgeyByZXR1cm4gKHZhbHVlID09PSB2YWwpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAtMSk7IH07XG4gICAgfTtcbiAgICByZXR1cm4gVEVudW1MaXRlcmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URW51bUxpdGVyYWwgPSBURW51bUxpdGVyYWw7XG5mdW5jdGlvbiBtYWtlSWZhY2VQcm9wcyhwcm9wcykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYWtlSWZhY2VQcm9wKG5hbWUsIHByb3BzW25hbWVdKTsgfSk7XG59XG5mdW5jdGlvbiBtYWtlSWZhY2VQcm9wKG5hbWUsIHByb3ApIHtcbiAgICByZXR1cm4gcHJvcCBpbnN0YW5jZW9mIFRPcHRpb25hbCA/XG4gICAgICAgIG5ldyBUUHJvcChuYW1lLCBwcm9wLnR0eXBlLCB0cnVlKSA6XG4gICAgICAgIG5ldyBUUHJvcChuYW1lLCBwYXJzZVNwZWMocHJvcCksIGZhbHNlKTtcbn1cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmZhY2UuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSBvZiBpbnRlcmZhY2VzIHRoYXQgaXQgZXh0ZW5kcywgYW5kIHRoZVxuICogc2Vjb25kIGlzIGFuIGFycmF5IG9mIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGlmYWNlKGJhc2VzLCBwcm9wcykge1xuICAgIHJldHVybiBuZXcgVElmYWNlKGJhc2VzLCBtYWtlSWZhY2VQcm9wcyhwcm9wcykpO1xufVxuZXhwb3J0cy5pZmFjZSA9IGlmYWNlO1xudmFyIFRJZmFjZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVElmYWNlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRJZmFjZShiYXNlcywgcHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYmFzZXMgPSBiYXNlcztcbiAgICAgICAgX3RoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgICAgX3RoaXMucHJvcFNldCA9IG5ldyBTZXQocHJvcHMubWFwKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLm5hbWU7IH0pKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUSWZhY2UucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCwgYWxsb3dlZFByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBiYXNlQ2hlY2tlcnMgPSB0aGlzLmJhc2VzLm1hcChmdW5jdGlvbiAoYikgeyByZXR1cm4gZ2V0TmFtZWRUeXBlKHN1aXRlLCBiKS5nZXRDaGVja2VyKHN1aXRlLCBzdHJpY3QpOyB9KTtcbiAgICAgICAgdmFyIHByb3BDaGVja2VycyA9IHRoaXMucHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7IHJldHVybiBwcm9wLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7IH0pO1xuICAgICAgICB2YXIgdGVzdEN0eCA9IG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKTtcbiAgICAgICAgLy8gQ29uc2lkZXIgYSBwcm9wIHJlcXVpcmVkIGlmIGl0J3Mgbm90IG9wdGlvbmFsIEFORCBkb2VzIG5vdCBhbGxvdyBmb3IgdW5kZWZpbmVkIGFzIGEgdmFsdWUuXG4gICAgICAgIHZhciBpc1Byb3BSZXF1aXJlZCA9IHRoaXMucHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gIXByb3AuaXNPcHQgJiYgIXByb3BDaGVja2Vyc1tpXSh1bmRlZmluZWQsIHRlc3RDdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhbiBvYmplY3RcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2VDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZUNoZWNrZXJzW2ldKHZhbHVlLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBfdGhpcy5wcm9wc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdmFsdWVbbmFtZV8xXTtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb3BSZXF1aXJlZFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG5hbWVfMSwgXCJpcyBtaXNzaW5nXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBwcm9wQ2hlY2tlcnNbaV0odiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG5hbWVfMSwgbnVsbCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VyO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm9wU2V0ID0gdGhpcy5wcm9wU2V0O1xuICAgICAgICBpZiAoYWxsb3dlZFByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BTZXQuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkgeyByZXR1cm4gYWxsb3dlZFByb3BzLmFkZChwcm9wKTsgfSk7XG4gICAgICAgICAgICBwcm9wU2V0ID0gYWxsb3dlZFByb3BzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluIHN0cmljdCBtb2RlLCBjaGVjayBhbHNvIGZvciB1bmtub3duIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoIWNoZWNrZXIodmFsdWUsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wU2V0Lmhhcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmZhaWwocHJvcCwgXCJpcyBleHRyYW5lb3VzXCIsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRJZmFjZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVElmYWNlID0gVElmYWNlO1xuLyoqXG4gKiBEZWZpbmVzIGFuIG9wdGlvbmFsIHByb3BlcnR5IG9uIGFuIGludGVyZmFjZS5cbiAqL1xuZnVuY3Rpb24gb3B0KHR5cGVTcGVjKSB7IHJldHVybiBuZXcgVE9wdGlvbmFsKHBhcnNlU3BlYyh0eXBlU3BlYykpOyB9XG5leHBvcnRzLm9wdCA9IG9wdDtcbnZhciBUT3B0aW9uYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRPcHRpb25hbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUT3B0aW9uYWwodHR5cGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGUgPSB0dHlwZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUT3B0aW9uYWwucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXIgPSB0aGlzLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgaXRlbUNoZWNrZXIodmFsdWUsIGN0eCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVE9wdGlvbmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UT3B0aW9uYWwgPSBUT3B0aW9uYWw7XG4vKipcbiAqIERlZmluZXMgYSBwcm9wZXJ0eSBpbiBhbiBpbnRlcmZhY2UuXG4gKi9cbnZhciBUUHJvcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUUHJvcChuYW1lLCB0dHlwZSwgaXNPcHQpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICB0aGlzLmlzT3B0ID0gaXNPcHQ7XG4gICAgfVxuICAgIHJldHVybiBUUHJvcDtcbn0oKSk7XG5leHBvcnRzLlRQcm9wID0gVFByb3A7XG4vKipcbiAqIERlZmluZXMgYSBmdW5jdGlvbi4gVGhlIGZpcnN0IGFyZ3VtZW50IGRlY2xhcmVzIHRoZSBmdW5jdGlvbidzIHJldHVybiB0eXBlLCB0aGUgcmVzdCBkZWNsYXJlXG4gKiBpdHMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gZnVuYyhyZXN1bHRTcGVjKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHBhcmFtc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBURnVuYyhuZXcgVFBhcmFtTGlzdChwYXJhbXMpLCBwYXJzZVNwZWMocmVzdWx0U3BlYykpO1xufVxuZXhwb3J0cy5mdW5jID0gZnVuYztcbnZhciBURnVuYyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEZ1bmMsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEZ1bmMocGFyYW1MaXN0LCByZXN1bHQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyYW1MaXN0ID0gcGFyYW1MaXN0O1xuICAgICAgICBfdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVEZ1bmMucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRydWUgOiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhIGZ1bmN0aW9uXCIsIDApO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRGdW5jO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URnVuYyA9IFRGdW5jO1xuLyoqXG4gKiBEZWZpbmVzIGEgZnVuY3Rpb24gcGFyYW1ldGVyLlxuICovXG5mdW5jdGlvbiBwYXJhbShuYW1lLCB0eXBlU3BlYywgaXNPcHQpIHtcbiAgICByZXR1cm4gbmV3IFRQYXJhbShuYW1lLCBwYXJzZVNwZWModHlwZVNwZWMpLCBCb29sZWFuKGlzT3B0KSk7XG59XG5leHBvcnRzLnBhcmFtID0gcGFyYW07XG52YXIgVFBhcmFtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRQYXJhbShuYW1lLCB0dHlwZSwgaXNPcHQpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICB0aGlzLmlzT3B0ID0gaXNPcHQ7XG4gICAgfVxuICAgIHJldHVybiBUUGFyYW07XG59KCkpO1xuZXhwb3J0cy5UUGFyYW0gPSBUUGFyYW07XG4vKipcbiAqIERlZmluZXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgbGlzdC5cbiAqL1xudmFyIFRQYXJhbUxpc3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRQYXJhbUxpc3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVFBhcmFtTGlzdChwYXJhbXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRQYXJhbUxpc3QucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXJzID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7IH0pO1xuICAgICAgICB2YXIgdGVzdEN0eCA9IG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKTtcbiAgICAgICAgdmFyIGlzUGFyYW1SZXF1aXJlZCA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0sIGkpIHtcbiAgICAgICAgICAgIHJldHVybiAhcGFyYW0uaXNPcHQgJiYgIWl0ZW1DaGVja2Vyc1tpXSh1bmRlZmluZWQsIHRlc3RDdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhbiBhcnJheVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBfdGhpcy5wYXJhbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW1SZXF1aXJlZFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKHAubmFtZSwgXCJpcyBtaXNzaW5nXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBpdGVtQ2hlY2tlcnNbaV0odmFsdWVbaV0sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChwLm5hbWUsIG51bGwsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RyaWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2tlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tlcih2YWx1ZSwgY3R4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPD0gaXRlbUNoZWNrZXJzLmxlbmd0aCA/IHRydWUgOlxuICAgICAgICAgICAgICAgIGN0eC5mYWlsKGl0ZW1DaGVja2Vycy5sZW5ndGgsIFwiaXMgZXh0cmFuZW91c1wiLCAyKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUUGFyYW1MaXN0O1xufShUVHlwZSkpO1xuZXhwb3J0cy5UUGFyYW1MaXN0ID0gVFBhcmFtTGlzdDtcbi8qKlxuICogU2luZ2xlIFRUeXBlIGltcGxlbWVudGF0aW9uIGZvciBhbGwgYmFzaWMgYnVpbHQtaW4gdHlwZXMuXG4gKi9cbnZhciBCYXNpY1R5cGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJhc2ljVHlwZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCYXNpY1R5cGUodmFsaWRhdG9yLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjtcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQmFzaWNUeXBlLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7IHJldHVybiBfdGhpcy52YWxpZGF0b3IodmFsdWUpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLm1lc3NhZ2UsIDApOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIEJhc2ljVHlwZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuQmFzaWNUeXBlID0gQmFzaWNUeXBlO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzdWl0ZSBvZiBiYXNpYyB0eXBlcy5cbiAqL1xuZXhwb3J0cy5iYXNpY1R5cGVzID0ge1xuICAgIGFueTogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gdHJ1ZTsgfSwgXCJpcyBpbnZhbGlkXCIpLFxuICAgIG51bWJlcjogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKTsgfSwgXCJpcyBub3QgYSBudW1iZXJcIiksXG4gICAgb2JqZWN0OiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdik7IH0sIFwiaXMgbm90IGFuIG9iamVjdFwiKSxcbiAgICBib29sZWFuOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKTsgfSwgXCJpcyBub3QgYSBib29sZWFuXCIpLFxuICAgIHN0cmluZzogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKTsgfSwgXCJpcyBub3QgYSBzdHJpbmdcIiksXG4gICAgc3ltYm9sOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwic3ltYm9sXCIpOyB9LCBcImlzIG5vdCBhIHN5bWJvbFwiKSxcbiAgICB2b2lkOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodiA9PSBudWxsKTsgfSwgXCJpcyBub3Qgdm9pZFwiKSxcbiAgICB1bmRlZmluZWQ6IG5ldyBCYXNpY1R5cGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2ID09PSB1bmRlZmluZWQpOyB9LCBcImlzIG5vdCB1bmRlZmluZWRcIiksXG4gICAgbnVsbDogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHYgPT09IG51bGwpOyB9LCBcImlzIG5vdCBudWxsXCIpLFxuICAgIG5ldmVyOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiBmYWxzZTsgfSwgXCJpcyB1bmV4cGVjdGVkXCIpLFxuICAgIERhdGU6IG5ldyBCYXNpY1R5cGUoZ2V0SXNOYXRpdmVDaGVja2VyKFwiW29iamVjdCBEYXRlXVwiKSwgXCJpcyBub3QgYSBEYXRlXCIpLFxuICAgIFJlZ0V4cDogbmV3IEJhc2ljVHlwZShnZXRJc05hdGl2ZUNoZWNrZXIoXCJbb2JqZWN0IFJlZ0V4cF1cIiksIFwiaXMgbm90IGEgUmVnRXhwXCIpLFxufTtcbi8vIFRoaXMgYXBwcm9hY2ggZm9yIGNoZWNraW5nIG5hdGl2ZSBvYmplY3QgdHlwZXMgbWlycm9ycyB0aGF0IG9mIGxvZGFzaC4gSXRzIGFkdmFudGFnZSBvdmVyXG4vLyBgaXNpbnN0YW5jZWAgaXMgdGhhdCBpdCBjYW4gc3RpbGwgcmV0dXJuIHRydWUgZm9yIG5hdGl2ZSBvYmplY3RzIGNyZWF0ZWQgaW4gZGlmZmVyZW50IEpTXG4vLyBleGVjdXRpb24gZW52aXJvbm1lbnRzLlxudmFyIG5hdGl2ZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIGdldElzTmF0aXZlQ2hlY2tlcih0YWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgJiYgbmF0aXZlVG9TdHJpbmcuY2FsbCh2KSA9PT0gdGFnOyB9O1xufVxuaWYgKHR5cGVvZiBCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBleHBvcnRzLmJhc2ljVHlwZXMuQnVmZmVyID0gbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHYpOyB9LCBcImlzIG5vdCBhIEJ1ZmZlclwiKTtcbn1cbnZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGFycmF5XzEpIHtcbiAgICBleHBvcnRzLmJhc2ljVHlwZXNbYXJyYXlfMS5uYW1lXSA9IG5ldyBCYXNpY1R5cGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2IGluc3RhbmNlb2YgYXJyYXlfMSk7IH0sIFwiaXMgbm90IGEgXCIgKyBhcnJheV8xLm5hbWUpO1xufTtcbi8vIFN1cHBvcnQgdHlwZWQgYXJyYXlzIG9mIHZhcmlvdXMgZmxhdm9yc1xuZm9yICh2YXIgX2kgPSAwLCBfYSA9IFtJbnQ4QXJyYXksIFVpbnQ4QXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSxcbiAgICBJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXksIEFycmF5QnVmZmVyXTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgYXJyYXlfMSA9IF9hW19pXTtcbiAgICBfbG9vcF8xKGFycmF5XzEpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNoZWNrZXIgPSBleHBvcnRzLmNyZWF0ZUNoZWNrZXJzID0gdm9pZCAwO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuLyoqXG4gKiBFeHBvcnQgZnVuY3Rpb25zIHVzZWQgdG8gZGVmaW5lIGludGVyZmFjZXMuXG4gKi9cbnZhciB0eXBlc18yID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUQXJyYXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuVEFycmF5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVEVudW1UeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRFbnVtVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRFbnVtTGl0ZXJhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5URW51bUxpdGVyYWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJURnVuY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5URnVuYzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRJZmFjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5USWZhY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUTGl0ZXJhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UTGl0ZXJhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlROYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlROYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVE9wdGlvbmFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRPcHRpb25hbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRQYXJhbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UUGFyYW07IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUGFyYW1MaXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRQYXJhbUxpc3Q7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUHJvcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UUHJvcDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRUdXBsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVHVwbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRVbmlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVW5pb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUSW50ZXJzZWN0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRJbnRlcnNlY3Rpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcnJheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5hcnJheTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudW1saXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuZW51bWxpdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudW10eXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLmVudW10eXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZnVuY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5mdW5jOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaWZhY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuaWZhY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIubGl0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5uYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3B0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLm9wdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcmFtXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLnBhcmFtOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHVwbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIudHVwbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi51bmlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5pbnRlcnNlY3Rpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNpY1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuQmFzaWNUeXBlOyB9IH0pO1xudmFyIHV0aWxfMiA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxfMi5WRXJyb3I7IH0gfSk7XG4vKipcbiAqIFRha2VzIG9uZSBvZiBtb3JlIHR5cGUgc3VpdGVzIChlLmcuIGEgbW9kdWxlIGdlbmVyYXRlZCBieSBgdHMtaW50ZXJmYWNlLWJ1aWxkZXJgKSwgYW5kIGNvbWJpbmVzXG4gKiB0aGVtIGludG8gYSBzdWl0ZSBvZiBpbnRlcmZhY2UgY2hlY2tlcnMuIElmIGEgdHlwZSBpcyB1c2VkIGJ5IG5hbWUsIHRoYXQgbmFtZSBzaG91bGQgYmUgcHJlc2VudFxuICogYW1vbmcgdGhlIHBhc3NlZC1pbiB0eXBlIHN1aXRlcy5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0IG1hcHMgdHlwZSBuYW1lcyB0byBDaGVja2VyIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrZXJzKCkge1xuICAgIHZhciB0eXBlU3VpdGUgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3VpdGVbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGZ1bGxTdWl0ZSA9IE9iamVjdC5hc3NpZ24uYXBwbHkoT2JqZWN0LCBfX3NwcmVhZEFycmF5cyhbe30sIHR5cGVzXzEuYmFzaWNUeXBlc10sIHR5cGVTdWl0ZSkpO1xuICAgIHZhciBjaGVja2VycyA9IHt9O1xuICAgIGZvciAodmFyIF9hID0gMCwgdHlwZVN1aXRlXzEgPSB0eXBlU3VpdGU7IF9hIDwgdHlwZVN1aXRlXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgIHZhciBzdWl0ZV8xID0gdHlwZVN1aXRlXzFbX2FdO1xuICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gT2JqZWN0LmtleXMoc3VpdGVfMSk7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IF9jW19iXTtcbiAgICAgICAgICAgIGNoZWNrZXJzW25hbWVdID0gbmV3IENoZWNrZXIoZnVsbFN1aXRlLCBzdWl0ZV8xW25hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tlcnM7XG59XG5leHBvcnRzLmNyZWF0ZUNoZWNrZXJzID0gY3JlYXRlQ2hlY2tlcnM7XG4vKipcbiAqIENoZWNrZXIgaW1wbGVtZW50cyB2YWxpZGF0aW9uIG9mIG9iamVjdHMsIGFuZCBhbHNvIGluY2x1ZGVzIGFjY2Vzc29ycyB0byB2YWxpZGF0ZSBtZXRob2QgY2FsbHMuXG4gKiBDaGVja2VycyBzaG91bGQgYmUgY3JlYXRlZCB1c2luZyBgY3JlYXRlQ2hlY2tlcnMoKWAuXG4gKi9cbnZhciBDaGVja2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8vIENyZWF0ZSBjaGVja2VycyBieSB1c2luZyBgY3JlYXRlQ2hlY2tlcnMoKWAgZnVuY3Rpb24uXG4gICAgZnVuY3Rpb24gQ2hlY2tlcihzdWl0ZSwgdHR5cGUsIF9wYXRoKSB7XG4gICAgICAgIGlmIChfcGF0aCA9PT0gdm9pZCAwKSB7IF9wYXRoID0gJ3ZhbHVlJzsgfVxuICAgICAgICB0aGlzLnN1aXRlID0gc3VpdGU7XG4gICAgICAgIHRoaXMudHR5cGUgPSB0dHlwZTtcbiAgICAgICAgdGhpcy5fcGF0aCA9IF9wYXRoO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAodHR5cGUgaW5zdGFuY2VvZiB0eXBlc18xLlRJZmFjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHR0eXBlLnByb3BzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIHZhciBwID0gX2FbX2ldO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0KHAubmFtZSwgcC50dHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja2VyUGxhaW4gPSB0aGlzLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jaGVja2VyU3RyaWN0ID0gdGhpcy50dHlwZS5nZXRDaGVja2VyKHN1aXRlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwYXRoIHRvIHJlcG9ydCBpbiBlcnJvcnMsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXCJ2YWx1ZVwiLiAoRS5nLiBpZiB0aGUgQ2hlY2tlciBpcyBmb3JcbiAgICAgKiBhIFwicGVyc29uXCIgaW50ZXJmYWNlLCBzZXQgcGF0aCB0byBcInBlcnNvblwiIHRvIHJlcG9ydCBlLmcuIFwicGVyc29uLm5hbWUgaXMgbm90IGEgc3RyaW5nXCIuKVxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnNldFJlcG9ydGVkUGF0aCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHRoaXMuX3BhdGggPSBwYXRoO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgY2hlY2tlcidzIHR5cGUsIG9yIHRocm93IEVycm9yLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLmNoZWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9kb0NoZWNrKHRoaXMuY2hlY2tlclBsYWluLCB2YWx1ZSk7IH07XG4gICAgLyoqXG4gICAgICogQSBmYXN0IGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgQ2hlY2tlcidzIHR5cGUuIFRoaXMgcmV0dXJuc1xuICAgICAqIHRydWUgb3IgZmFsc2UsIGRvZXMgbm90IHByb2R1Y2UgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIGlzIGZhc3QgYm90aCBvbiBzdWNjZXNzIGFuZCBvbiBmYWlsdXJlLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlclBsYWluKHZhbHVlLCBuZXcgdXRpbF8xLk5vb3BDb250ZXh0KCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBlcnJvciBvYmplY3QgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGlmIHRoZSBnaXZlbiB2YWx1ZSBkb2VzIG5vdCBzYXRpc2Z5IHRoaXNcbiAgICAgKiBDaGVja2VyJ3MgdHlwZSwgb3IgbnVsbCBpZiBpdCBkb2VzLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb1ZhbGlkYXRlKHRoaXMuY2hlY2tlclBsYWluLCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IHRoZSBnaXZlbiB2YWx1ZSBzYXRpc2ZpZXMgdGhpcyBjaGVja2VyJ3MgdHlwZSBzdHJpY3RseS4gVGhpcyBjaGVja3MgdGhhdCBvYmplY3RzXG4gICAgICogYW5kIHR1cGxlcyBoYXZlIG5vIGV4dHJhIG1lbWJlcnMuIE5vdGUgdGhhdCB0aGlzIHByZXZlbnRzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNvIHVzdWFsbHlcbiAgICAgKiBhIHBsYWluIGNoZWNrKCkgaXMgbW9yZSBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5zdHJpY3RDaGVjayA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdGhpcy5fZG9DaGVjayh0aGlzLmNoZWNrZXJTdHJpY3QsIHZhbHVlKTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZhc3Qgc3RyaWN0IGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgQ2hlY2tlcidzIHR5cGUuIFJldHVybnNcbiAgICAgKiB0cnVlIG9yIGZhbHNlLCBkb2VzIG5vdCBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UsIGFuZCBpcyBmYXN0IGJvdGggb24gc3VjY2VzcyBhbmQgb24gZmFpbHVyZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5zdHJpY3RUZXN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrZXJTdHJpY3QodmFsdWUsIG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGVycm9yIG9iamVjdCBkZXNjcmliaW5nIHRoZSBlcnJvcnMgaWYgdGhlIGdpdmVuIHZhbHVlIGRvZXMgbm90IHNhdGlzZnkgdGhpc1xuICAgICAqIENoZWNrZXIncyB0eXBlIHN0cmljdGx5LCBvciBudWxsIGlmIGl0IGRvZXMuXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUuc3RyaWN0VmFsaWRhdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvVmFsaWRhdGUodGhpcy5jaGVja2VyU3RyaWN0LCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGFuIGludGVyZmFjZSwgcmV0dXJucyBhIENoZWNrZXIgZm9yIHRoZSB0eXBlIHJlcXVpcmVkIGZvciB0aGUgZ2l2ZW5cbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGlzIGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRQcm9wID0gZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5wcm9wcy5nZXQocHJvcCk7XG4gICAgICAgIGlmICghdHR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlR5cGUgaGFzIG5vIHByb3BlcnR5IFwiICsgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHR0eXBlLCB0aGlzLl9wYXRoICsgXCIuXCIgKyBwcm9wKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIElmIHRoaXMgY2hlY2tlciBpcyBmb3IgYW4gaW50ZXJmYWNlLCByZXR1cm5zIGEgQ2hlY2tlciBmb3IgdGhlIGFyZ3VtZW50LWxpc3QgcmVxdWlyZWQgdG8gY2FsbFxuICAgICAqIHRoZSBnaXZlbiBtZXRob2Qgb2YgdGhpcyBpbnRlcmZhY2UuIEUuZy4gaWYgdGhpcyBDaGVja2VyIGlzIGZvciB0aGUgaW50ZXJmYWNlOlxuICAgICAqICAgIGludGVyZmFjZSBGb28ge1xuICAgICAqICAgICAgZmluZChzOiBzdHJpbmcsIHBvcz86IG51bWJlcik6IG51bWJlcjtcbiAgICAgKiAgICB9XG4gICAgICogVGhlbiBtZXRob2RBcmdzKFwiZmluZFwiKS5jaGVjayguLi4pIHdpbGwgc3VjY2VlZCBmb3IgW1wiZm9vXCJdIGFuZCBbXCJmb29cIiwgM10sIGJ1dCBub3QgZm9yIFsxN10uXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUubWV0aG9kQXJncyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0ZnVuYyA9IHRoaXMuX2dldE1ldGhvZChtZXRob2ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRmdW5jLnBhcmFtTGlzdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGFuIGludGVyZmFjZSwgcmV0dXJucyBhIENoZWNrZXIgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGdpdmVuXG4gICAgICogbWV0aG9kIG9mIHRoaXMgaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLm1ldGhvZFJlc3VsdCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0ZnVuYyA9IHRoaXMuX2dldE1ldGhvZChtZXRob2ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRmdW5jLnJlc3VsdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGEgZnVuY3Rpb24sIHJldHVybnMgYSBDaGVja2VyIGZvciBpdHMgYXJndW1lbnQtbGlzdC5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRBcmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISh0aGlzLnR0eXBlIGluc3RhbmNlb2YgdHlwZXNfMS5URnVuYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImdldEFyZ3MoKSBhcHBsaWVkIHRvIG5vbi1mdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENoZWNrZXIodGhpcy5zdWl0ZSwgdGhpcy50dHlwZS5wYXJhbUxpc3QpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBjaGVja2VyIGlzIGZvciBhIGZ1bmN0aW9uLCByZXR1cm5zIGEgQ2hlY2tlciBmb3IgaXRzIHJlc3VsdC5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRSZXN1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghKHRoaXMudHR5cGUgaW5zdGFuY2VvZiB0eXBlc18xLlRGdW5jKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2V0UmVzdWx0KCkgYXBwbGllZCB0byBub24tZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRoaXMudHR5cGUucmVzdWx0KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgdHlwZSBmb3Igd2hpY2ggdGhpcyBpcyBhIGNoZWNrZXIuXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHR5cGU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgY2hlY2soKSBhbmQgc3RyaWN0Q2hlY2soKS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5fZG9DaGVjayA9IGZ1bmN0aW9uIChjaGVja2VyRnVuYywgdmFsdWUpIHtcbiAgICAgICAgdmFyIG5vb3BDdHggPSBuZXcgdXRpbF8xLk5vb3BDb250ZXh0KCk7XG4gICAgICAgIGlmICghY2hlY2tlckZ1bmModmFsdWUsIG5vb3BDdHgpKSB7XG4gICAgICAgICAgICB2YXIgZGV0YWlsQ3R4ID0gbmV3IHV0aWxfMS5EZXRhaWxDb250ZXh0KCk7XG4gICAgICAgICAgICBjaGVja2VyRnVuYyh2YWx1ZSwgZGV0YWlsQ3R4KTtcbiAgICAgICAgICAgIHRocm93IGRldGFpbEN0eC5nZXRFcnJvcih0aGlzLl9wYXRoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ2hlY2tlci5wcm90b3R5cGUuX2RvVmFsaWRhdGUgPSBmdW5jdGlvbiAoY2hlY2tlckZ1bmMsIHZhbHVlKSB7XG4gICAgICAgIHZhciBub29wQ3R4ID0gbmV3IHV0aWxfMS5Ob29wQ29udGV4dCgpO1xuICAgICAgICBpZiAoY2hlY2tlckZ1bmModmFsdWUsIG5vb3BDdHgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGV0YWlsQ3R4ID0gbmV3IHV0aWxfMS5EZXRhaWxDb250ZXh0KCk7XG4gICAgICAgIGNoZWNrZXJGdW5jKHZhbHVlLCBkZXRhaWxDdHgpO1xuICAgICAgICByZXR1cm4gZGV0YWlsQ3R4LmdldEVycm9yRGV0YWlsKHRoaXMuX3BhdGgpO1xuICAgIH07XG4gICAgQ2hlY2tlci5wcm90b3R5cGUuX2dldE1ldGhvZCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0dHlwZSA9IHRoaXMucHJvcHMuZ2V0KG1ldGhvZE5hbWUpO1xuICAgICAgICBpZiAoIXR0eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIGhhcyBubyBwcm9wZXJ0eSBcIiArIG1ldGhvZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHR0eXBlIGluc3RhbmNlb2YgdHlwZXNfMS5URnVuYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3BlcnR5IFwiICsgbWV0aG9kTmFtZSArIFwiIGlzIG5vdCBhIG1ldGhvZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHR5cGU7XG4gICAgfTtcbiAgICByZXR1cm4gQ2hlY2tlcjtcbn0oKSk7XG5leHBvcnRzLkNoZWNrZXIgPSBDaGVja2VyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuTGluZXNBbmRDb2x1bW5zID0gdm9pZCAwO1xudmFyIExGID0gJ1xcbic7XG52YXIgQ1IgPSAnXFxyJztcbnZhciBMaW5lc0FuZENvbHVtbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTGluZXNBbmRDb2x1bW5zKHN0cmluZykge1xuICAgICAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICAgICAgdmFyIG9mZnNldHMgPSBbMF07XG4gICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IHN0cmluZy5sZW5ndGg7KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZ1tvZmZzZXRdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBMRjpcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IExGLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ1I6XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBDUi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdbb2Zmc2V0XSA9PT0gTEYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBMRi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldHMgPSBvZmZzZXRzO1xuICAgIH1cbiAgICBMaW5lc0FuZENvbHVtbnMucHJvdG90eXBlLmxvY2F0aW9uRm9ySW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpbmUgPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0cyA9IHRoaXMub2Zmc2V0cztcbiAgICAgICAgd2hpbGUgKG9mZnNldHNbbGluZSArIDFdIDw9IGluZGV4KSB7XG4gICAgICAgICAgICBsaW5lKys7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbHVtbiA9IGluZGV4IC0gb2Zmc2V0c1tsaW5lXTtcbiAgICAgICAgcmV0dXJuIHsgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICB9O1xuICAgIExpbmVzQW5kQ29sdW1ucy5wcm90b3R5cGUuaW5kZXhGb3JMb2NhdGlvbiA9IGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmUsIGNvbHVtbiA9IGxvY2F0aW9uLmNvbHVtbjtcbiAgICAgICAgaWYgKGxpbmUgPCAwIHx8IGxpbmUgPj0gdGhpcy5vZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbiA8IDAgfHwgY29sdW1uID4gdGhpcy5sZW5ndGhPZkxpbmUobGluZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldHNbbGluZV0gKyBjb2x1bW47XG4gICAgfTtcbiAgICBMaW5lc0FuZENvbHVtbnMucHJvdG90eXBlLmxlbmd0aE9mTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldHNbbGluZV07XG4gICAgICAgIHZhciBuZXh0T2Zmc2V0ID0gbGluZSA9PT0gdGhpcy5vZmZzZXRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gdGhpcy5zdHJpbmcubGVuZ3RoXG4gICAgICAgICAgICA6IHRoaXMub2Zmc2V0c1tsaW5lICsgMV07XG4gICAgICAgIHJldHVybiBuZXh0T2Zmc2V0IC0gb2Zmc2V0O1xuICAgIH07XG4gICAgcmV0dXJuIExpbmVzQW5kQ29sdW1ucztcbn0oKSk7XG5leHBvcnRzLkxpbmVzQW5kQ29sdW1ucyA9IExpbmVzQW5kQ29sdW1ucztcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gTGluZXNBbmRDb2x1bW5zO1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwgIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5FbXB0eUJUcmVlID0gZXhwb3J0cy5hc1NldCA9IGV4cG9ydHMuc2ltcGxlQ29tcGFyYXRvciA9IGV4cG9ydHMuZGVmYXVsdENvbXBhcmF0b3IgPSB2b2lkIDA7XHJcbi8qKlxyXG4gKiBDb21wYXJlcyBEZWZhdWx0Q29tcGFyYWJsZXMgdG8gZm9ybSBhIHN0cmljdCBwYXJ0aWFsIG9yZGVyaW5nLlxyXG4gKlxyXG4gKiBIYW5kbGVzICsvLTAgYW5kIE5hTiBsaWtlIE1hcDogTmFOIGlzIGVxdWFsIHRvIE5hTiwgYW5kIC0wIGlzIGVxdWFsIHRvICswLlxyXG4gKlxyXG4gKiBBcnJheXMgYXJlIGNvbXBhcmVkIHVzaW5nICc8JyBhbmQgJz4nLCB3aGljaCBtYXkgY2F1c2UgdW5leHBlY3RlZCBlcXVhbGl0eTpcclxuICogZm9yIGV4YW1wbGUgWzFdIHdpbGwgYmUgY29uc2lkZXJlZCBlcXVhbCB0byBbJzEnXS5cclxuICpcclxuICogVHdvIG9iamVjdHMgd2l0aCBlcXVhbCB2YWx1ZU9mIGNvbXBhcmUgdGhlIHNhbWUsIGJ1dCBjb21wYXJlIHVuZXF1YWwgdG9cclxuICogcHJpbWl0aXZlcyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcihhLCBiKSB7XHJcbiAgICAvLyBTcGVjaWFsIGNhc2UgZmluaXRlIG51bWJlcnMgZmlyc3QgZm9yIHBlcmZvcm1hbmNlLlxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB0cmljayBvZiB1c2luZyAnYSAtIGInIGFuZCBjaGVja2luZyBmb3IgTmFOIHRvIGRldGVjdCBub24tbnVtYmVyc1xyXG4gICAgLy8gZG9lcyBub3Qgd29yayBpZiB0aGUgc3RyaW5ncyBhcmUgbnVtZXJpYyAoZXg6IFwiNVwiKS4gVGhpcyB3b3VsZCBsZWFkaW5nIG1vc3QgXHJcbiAgICAvLyBjb21wYXJpc29uIGZ1bmN0aW9ucyB1c2luZyB0aGF0IGFwcHJvYWNoIHRvIGZhaWwgdG8gaGF2ZSB0cmFuc2l0aXZpdHkuXHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGEpICYmIE51bWJlci5pc0Zpbml0ZShiKSkge1xyXG4gICAgICAgIHJldHVybiBhIC0gYjtcclxuICAgIH1cclxuICAgIC8vIFRoZSBkZWZhdWx0IDwgYW5kID4gb3BlcmF0b3JzIGFyZSBub3QgdG90YWxseSBvcmRlcmVkLiBUbyBhbGxvdyB0eXBlcyB0byBiZSBtaXhlZFxyXG4gICAgLy8gaW4gYSBzaW5nbGUgY29sbGVjdGlvbiwgY29tcGFyZSB0eXBlcyBhbmQgb3JkZXIgdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBieSB0eXBlLlxyXG4gICAgdmFyIHRhID0gdHlwZW9mIGE7XHJcbiAgICB2YXIgdGIgPSB0eXBlb2YgYjtcclxuICAgIGlmICh0YSAhPT0gdGIpIHtcclxuICAgICAgICByZXR1cm4gdGEgPCB0YiA/IC0xIDogMTtcclxuICAgIH1cclxuICAgIGlmICh0YSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAvLyBzdGFuZGFyZGl6ZWQgSmF2YVNjcmlwdCBidWc6IG51bGwgaXMgbm90IGFuIG9iamVjdCwgYnV0IHR5cGVvZiBzYXlzIGl0IGlzXHJcbiAgICAgICAgaWYgKGEgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBiID09PSBudWxsID8gMCA6IC0xO1xyXG4gICAgICAgIGVsc2UgaWYgKGIgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGEgPSBhLnZhbHVlT2YoKTtcclxuICAgICAgICBiID0gYi52YWx1ZU9mKCk7XHJcbiAgICAgICAgdGEgPSB0eXBlb2YgYTtcclxuICAgICAgICB0YiA9IHR5cGVvZiBiO1xyXG4gICAgICAgIC8vIERlYWwgd2l0aCB0aGUgdHdvIHZhbHVlT2YoKXMgcHJvZHVjaW5nIGRpZmZlcmVudCB0eXBlc1xyXG4gICAgICAgIGlmICh0YSAhPT0gdGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRhIDwgdGIgPyAtMSA6IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gYSBhbmQgYiBhcmUgbm93IHRoZSBzYW1lIHR5cGUsIGFuZCB3aWxsIGJlIGEgbnVtYmVyLCBzdHJpbmcgb3IgYXJyYXkgXHJcbiAgICAvLyAod2hpY2ggd2UgYXNzdW1lIGhvbGRzIG51bWJlcnMgb3Igc3RyaW5ncyksIG9yIHNvbWV0aGluZyB1bnN1cHBvcnRlZC5cclxuICAgIGlmIChhIDwgYilcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICBpZiAoYSA+IGIpXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICBpZiAoYSA9PT0gYilcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIC8vIE9yZGVyIE5hTiBsZXNzIHRoYW4gb3RoZXIgbnVtYmVyc1xyXG4gICAgaWYgKE51bWJlci5pc05hTihhKSlcclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGIpID8gMCA6IC0xO1xyXG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzTmFOKGIpKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgLy8gVGhpcyBjb3VsZCBiZSB0d28gb2JqZWN0cyAoZS5nLiBbN10gYW5kIFsnNyddKSB0aGF0IGFyZW4ndCBvcmRlcmVkXHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhKSA/IDAgOiBOdW1iZXIuTmFOO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdENvbXBhcmF0b3IgPSBkZWZhdWx0Q29tcGFyYXRvcjtcclxuO1xyXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJhdG9yKGEsIGIpIHtcclxuICAgIHJldHVybiBhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMDtcclxufVxyXG5leHBvcnRzLnNpbXBsZUNvbXBhcmF0b3IgPSBzaW1wbGVDb21wYXJhdG9yO1xyXG47XHJcbi8qKlxyXG4gKiBBIHJlYXNvbmFibHkgZmFzdCBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyB3aXRoIGEgcG93ZXJmdWwgQVBJLlxyXG4gKiBMYXJnZWx5IGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQgTWFwLiBCVHJlZSBpcyBhIEIrIHRyZWUgZGF0YSBzdHJ1Y3R1cmUsXHJcbiAqIHNvIHRoZSBjb2xsZWN0aW9uIGlzIHNvcnRlZCBieSBrZXkuXHJcbiAqXHJcbiAqIEIrIHRyZWVzIHRlbmQgdG8gdXNlIG1lbW9yeSBtb3JlIGVmZmljaWVudGx5IHRoYW4gaGFzaHRhYmxlcyBzdWNoIGFzIHRoZVxyXG4gKiBzdGFuZGFyZCBNYXAsIGVzcGVjaWFsbHkgd2hlbiB0aGUgY29sbGVjdGlvbiBjb250YWlucyBhIGxhcmdlIG51bWJlciBvZlxyXG4gKiBpdGVtcy4gSG93ZXZlciwgbWFpbnRhaW5pbmcgdGhlIHNvcnQgb3JkZXIgbWFrZXMgdGhlbSBtb2Rlc3RseSBzbG93ZXI6XHJcbiAqIE8obG9nIHNpemUpIHJhdGhlciB0aGFuIE8oMSkuIFRoaXMgQisgdHJlZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBPKDEpXHJcbiAqIGZhc3QgY2xvbmluZy4gSXQgYWxzbyBzdXBwb3J0cyBmcmVlemUoKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXRcclxuICogYSBCVHJlZSBpcyBub3QgY2hhbmdlZCBhY2NpZGVudGFsbHkuXHJcbiAqXHJcbiAqIENvbmZ1c2luZ2x5LCB0aGUgRVM2IE1hcC5mb3JFYWNoKGMpIG1ldGhvZCBjYWxscyBjKHZhbHVlLGtleSkgaW5zdGVhZCBvZlxyXG4gKiBjKGtleSx2YWx1ZSksIGluIGNvbnRyYXN0IHRvIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBzZXQoKSBhbmQgZW50cmllcygpXHJcbiAqIHdoaWNoIHB1dCB0aGUga2V5IGZpcnN0LiBJIGNhbiBvbmx5IGFzc3VtZSB0aGF0IHRoZSBvcmRlciB3YXMgcmV2ZXJzZWQgb25cclxuICogdGhlIHRoZW9yeSB0aGF0IHVzZXJzIHdvdWxkIHVzdWFsbHkgd2FudCB0byBleGFtaW5lIHZhbHVlcyBhbmQgaWdub3JlIGtleXMuXHJcbiAqIEJUcmVlJ3MgZm9yRWFjaCgpIHRoZXJlZm9yZSB3b3JrcyB0aGUgc2FtZSB3YXksIGJ1dCBhIHNlY29uZCBtZXRob2RcclxuICogYC5mb3JFYWNoUGFpcigoa2V5LHZhbHVlKT0+ey4uLn0pYCBpcyBwcm92aWRlZCB3aGljaCBzZW5kcyB5b3UgdGhlIGtleVxyXG4gKiBmaXJzdCBhbmQgdGhlIHZhbHVlIHNlY29uZDsgdGhpcyBtZXRob2QgaXMgc2xpZ2h0bHkgZmFzdGVyIGJlY2F1c2UgaXQgaXNcclxuICogdGhlIFwibmF0aXZlXCIgZm9yLWVhY2ggbWV0aG9kIGZvciB0aGlzIGNsYXNzLlxyXG4gKlxyXG4gKiBPdXQgb2YgdGhlIGJveCwgQlRyZWUgc3VwcG9ydHMga2V5cyB0aGF0IGFyZSBudW1iZXJzLCBzdHJpbmdzLCBhcnJheXMgb2ZcclxuICogbnVtYmVycy9zdHJpbmdzLCBEYXRlLCBhbmQgb2JqZWN0cyB0aGF0IGhhdmUgYSB2YWx1ZU9mKCkgbWV0aG9kIHJldHVybmluZyBhXHJcbiAqIG51bWJlciBvciBzdHJpbmcuIE90aGVyIGRhdGEgdHlwZXMsIHN1Y2ggYXMgYXJyYXlzIG9mIERhdGUgb3IgY3VzdG9tXHJcbiAqIG9iamVjdHMsIHJlcXVpcmUgYSBjdXN0b20gY29tcGFyYXRvciwgd2hpY2ggeW91IG11c3QgcGFzcyBhcyB0aGUgc2Vjb25kXHJcbiAqIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciAodGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2ZcclxuICogaW5pdGlhbCBpdGVtcykuIFN5bWJvbHMgY2Fubm90IGJlIHVzZWQgYXMga2V5cyBiZWNhdXNlIHRoZXkgYXJlIHVub3JkZXJlZFxyXG4gKiAob25lIFN5bWJvbCBpcyBuZXZlciBcImdyZWF0ZXJcIiBvciBcImxlc3NcIiB0aGFuIGFub3RoZXIpLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBHaXZlbiBhIHtuYW1lOiBzdHJpbmcsIGFnZTogbnVtYmVyfSBvYmplY3QsIHlvdSBjYW4gY3JlYXRlIGEgdHJlZSBzb3J0ZWQgYnlcclxuICogbmFtZSBhbmQgdGhlbiBieSBhZ2UgbGlrZSB0aGlzOlxyXG4gKlxyXG4gKiAgICAgdmFyIHRyZWUgPSBuZXcgQlRyZWUodW5kZWZpbmVkLCAoYSwgYikgPT4ge1xyXG4gKiAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKVxyXG4gKiAgICAgICAgIHJldHVybiAxOyAvLyBSZXR1cm4gYSBudW1iZXIgPjAgd2hlbiBhID4gYlxyXG4gKiAgICAgICBlbHNlIGlmIChhLm5hbWUgPCBiLm5hbWUpXHJcbiAqICAgICAgICAgcmV0dXJuIC0xOyAvLyBSZXR1cm4gYSBudW1iZXIgPDAgd2hlbiBhIDwgYlxyXG4gKiAgICAgICBlbHNlIC8vIG5hbWVzIGFyZSBlcXVhbCAob3IgaW5jb21wYXJhYmxlKVxyXG4gKiAgICAgICAgIHJldHVybiBhLmFnZSAtIGIuYWdlOyAvLyBSZXR1cm4gPjAgd2hlbiBhLmFnZSA+IGIuYWdlXHJcbiAqICAgICB9KTtcclxuICpcclxuICogICAgIHRyZWUuc2V0KHtuYW1lOlwiQmlsbFwiLCBhZ2U6MTd9LCBcImhhcHB5XCIpO1xyXG4gKiAgICAgdHJlZS5zZXQoe25hbWU6XCJGcmFuXCIsIGFnZTo0MH0sIFwiYnVzeSAmIHN0cmVzc2VkXCIpO1xyXG4gKiAgICAgdHJlZS5zZXQoe25hbWU6XCJCaWxsXCIsIGFnZTo1NX0sIFwicmVjZW50bHkgbGFpZCBvZmZcIik7XHJcbiAqICAgICB0cmVlLmZvckVhY2hQYWlyKChrLCB2KSA9PiB7XHJcbiAqICAgICAgIGNvbnNvbGUubG9nKGBOYW1lOiAke2submFtZX0gQWdlOiAke2suYWdlfSBTdGF0dXM6ICR7dn1gKTtcclxuICogICAgIH0pO1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIFwicmFuZ2VcIiBtZXRob2RzIChgZm9yRWFjaCwgZm9yUmFuZ2UsIGVkaXRSYW5nZWApIHdpbGwgcmV0dXJuIHRoZSBudW1iZXJcclxuICogb2YgZWxlbWVudHMgdGhhdCB3ZXJlIHNjYW5uZWQuIEluIGFkZGl0aW9uLCB0aGUgY2FsbGJhY2sgY2FuIHJldHVybiB7YnJlYWs6Un1cclxuICogdG8gc3RvcCBlYXJseSBhbmQgcmV0dXJuIFIgZnJvbSB0aGUgb3V0ZXIgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIC0gVE9ETzogVGVzdCBwZXJmb3JtYW5jZSBvZiBwcmVhbGxvY2F0aW5nIHZhbHVlcyBhcnJheSBhdCBtYXggc2l6ZVxyXG4gKiAtIFRPRE86IEFkZCBmYXN0IGluaXRpYWxpemF0aW9uIHdoZW4gYSBzb3J0ZWQgYXJyYXkgaXMgcHJvdmlkZWQgdG8gY29uc3RydWN0b3JcclxuICpcclxuICogRm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3F3ZXJ0aWUvYnRyZWUtdHlwZXNjcmlwdFxyXG4gKlxyXG4gKiBBcmUgeW91IGEgQyMgZGV2ZWxvcGVyPyBZb3UgbWlnaHQgbGlrZSB0aGUgc2ltaWxhciBkYXRhIHN0cnVjdHVyZXMgSSBtYWRlIGZvciBDIzpcclxuICogQkRpY3Rpb25hcnksIEJMaXN0LCBldGMuIFNlZSBodHRwOi8vY29yZS5sb3ljLm5ldC9jb2xsZWN0aW9ucy9cclxuICpcclxuICogQGF1dGhvciBEYXZpZCBQaWVwZ3Jhc3NcclxuICovXHJcbnZhciBCVHJlZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gZW1wdHkgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBjb21wYXJlIEN1c3RvbSBmdW5jdGlvbiB0byBjb21wYXJlIHBhaXJzIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlLlxyXG4gICAgICogICBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0Q29tcGFyYXRvciB3aWxsIGJlIHVzZWQgd2hpY2ggaXMgdmFsaWQgYXMgbG9uZyBhcyBLIGV4dGVuZHMgRGVmYXVsdENvbXBhcmFibGUuXHJcbiAgICAgKiBAcGFyYW0gZW50cmllcyBBIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZVxyXG4gICAgICogQHBhcmFtIG1heE5vZGVTaXplIEJyYW5jaGluZyBmYWN0b3IgKG1heGltdW0gaXRlbXMgb3IgY2hpbGRyZW4gcGVyIG5vZGUpXHJcbiAgICAgKiAgIE11c3QgYmUgaW4gcmFuZ2UgNC4uMjU2LiBJZiB1bmRlZmluZWQgb3IgPDQgdGhlbiBkZWZhdWx0IGlzIHVzZWQ7IGlmID4yNTYgdGhlbiAyNTYuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJUcmVlKGVudHJpZXMsIGNvbXBhcmUsIG1heE5vZGVTaXplKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IEVtcHR5TGVhZjtcclxuICAgICAgICB0aGlzLl9zaXplID0gMDtcclxuICAgICAgICB0aGlzLl9tYXhOb2RlU2l6ZSA9IG1heE5vZGVTaXplID49IDQgPyBNYXRoLm1pbihtYXhOb2RlU2l6ZSwgMjU2KSA6IDMyO1xyXG4gICAgICAgIHRoaXMuX2NvbXBhcmUgPSBjb21wYXJlIHx8IGRlZmF1bHRDb21wYXJhdG9yO1xyXG4gICAgICAgIGlmIChlbnRyaWVzKVxyXG4gICAgICAgICAgICB0aGlzLnNldFBhaXJzKGVudHJpZXMpO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8vIEVTNiBNYXA8SyxWPiBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIHRyZWUuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XHJcbiAgICAgICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIHRyZWUuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImlzRW1wdHlcIiwge1xyXG4gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWZmIHRoZSB0cmVlIGNvbnRhaW5zIG5vIGtleS12YWx1ZSBwYWlycy4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NpemUgPT09IDA7IH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIC8qKiBSZWxlYXNlcyB0aGUgdHJlZSBzbyB0aGF0IGl0cyBzaXplIGlzIDAuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IEVtcHR5TGVhZjtcclxuICAgICAgICB0aGlzLl9zaXplID0gMDtcclxuICAgIH07XHJcbiAgICAvKiogUnVucyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLCBpbiBvcmRlciBmcm9tIHNtYWxsZXN0IHRvXHJcbiAgICAgKiAgbGFyZ2VzdCBrZXkuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggRVM2IE1hcCwgdGhlIGFyZ3VtZW50IG9yZGVyIHRvXHJcbiAgICAgKiAgdGhlIGNhbGxiYWNrIGlzIGJhY2t3YXJkczogdmFsdWUgZmlyc3QsIHRoZW4ga2V5LiBDYWxsIGZvckVhY2hQYWlyXHJcbiAgICAgKiAgaW5zdGVhZCB0byByZWNlaXZlIHRoZSBrZXkgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAgICogQHBhcmFtIHRoaXNBcmcgSWYgcHJvdmlkZWQsIHRoaXMgcGFyYW1ldGVyIGlzIGFzc2lnbmVkIGFzIHRoZSBgdGhpc2BcclxuICAgICAqICAgICAgICB2YWx1ZSBmb3IgZWFjaCBjYWxsYmFjay5cclxuICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIHRoYXQgd2VyZSBzZW50IHRvIHRoZSBjYWxsYmFjayxcclxuICAgICAqICAgICAgICBvciB0aGUgUiB2YWx1ZSBpZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQge2JyZWFrOlJ9LiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzQXJnICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JFYWNoUGFpcihmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gY2FsbGJhY2sodiwgaywgX3RoaXMpOyB9KTtcclxuICAgIH07XHJcbiAgICAvKiogUnVucyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLCBpbiBvcmRlciBmcm9tIHNtYWxsZXN0IHRvXHJcbiAgICAgKiAgbGFyZ2VzdCBrZXkuIFRoZSBjYWxsYmFjayBjYW4gcmV0dXJuIHticmVhazpSfSAod2hlcmUgUiBpcyBhbnkgdmFsdWVcclxuICAgICAqICBleGNlcHQgdW5kZWZpbmVkKSB0byBzdG9wIGltbWVkaWF0ZWx5IGFuZCByZXR1cm4gUiBmcm9tIGZvckVhY2hQYWlyLlxyXG4gICAgICogQHBhcmFtIG9uRm91bmQgQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmb3IgZWFjaCBrZXktdmFsdWUgcGFpci4gVGhpc1xyXG4gICAgICogICAgICAgIGZ1bmN0aW9uIGNhbiByZXR1cm4ge2JyZWFrOlJ9IHRvIHN0b3AgZWFybHkgd2l0aCByZXN1bHQgUi5cclxuICAgICAqICAgICAgICBUaGUgcmVhc29uIHRoYXQgeW91IG11c3QgcmV0dXJuIHticmVhazpSfSBpbnN0ZWFkIG9mIHNpbXBseSBSXHJcbiAgICAgKiAgICAgICAgaXRzZWxmIGlzIGZvciBjb25zaXN0ZW5jeSB3aXRoIGVkaXRSYW5nZSgpLCB3aGljaCBhbGxvd3NcclxuICAgICAqICAgICAgICBtdWx0aXBsZSBhY3Rpb25zLCBub3QganVzdCBicmVha2luZy5cclxuICAgICAqIEBwYXJhbSBpbml0aWFsQ291bnRlciBUaGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdGhpcmQgYXJndW1lbnQgb2ZcclxuICAgICAqICAgICAgICBgb25Gb3VuZGAgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLiBUaGUgY291bnRlciBpbmNyZWFzZXNcclxuICAgICAqICAgICAgICBieSBvbmUgZWFjaCB0aW1lIGBvbkZvdW5kYCBpcyBjYWxsZWQuIERlZmF1bHQgdmFsdWU6IDBcclxuICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFpcnMgc2VudCB0byB0aGUgY2FsbGJhY2sgKHBsdXMgaW5pdGlhbENvdW50ZXIsXHJcbiAgICAgKiAgICAgICAgaWYgeW91IHByb3ZpZGVkIG9uZSkuIElmIHRoZSBjYWxsYmFjayByZXR1cm5lZCB7YnJlYWs6Un0gdGhlblxyXG4gICAgICogICAgICAgIHRoZSBSIHZhbHVlIGlzIHJldHVybmVkIGluc3RlYWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZm9yRWFjaFBhaXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxDb3VudGVyKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9IHRoaXMubWluS2V5KCksIGhpZ2ggPSB0aGlzLm1heEtleSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKGxvdywgaGlnaCwgdHJ1ZSwgY2FsbGJhY2ssIGluaXRpYWxDb3VudGVyKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgcGFpciBpbiB0aGUgdHJlZSBhbmQgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgYSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGtleSB3YXMgbm90IGZvdW5kLlxyXG4gICAgICogQHJldHVybnMgdGhlIHZhbHVlLCBvciBkZWZhdWx0VmFsdWUgaWYgdGhlIGtleSB3YXMgbm90IGZvdW5kLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmdldChrZXksIGRlZmF1bHRWYWx1ZSwgdGhpcyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIG9yIG92ZXJ3cml0ZXMgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc29ydCBvcmRlciBvZlxyXG4gICAgICogICAgICAgIGRhdGEgaW4gdGhlIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUga2V5IChvcHRpb25hbClcclxuICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgV2hldGhlciB0byBvdmVyd3JpdGUgYW4gZXhpc3Rpbmcga2V5LXZhbHVlIHBhaXJcclxuICAgICAqICAgICAgICAoZGVmYXVsdDogdHJ1ZSkuIElmIHRoaXMgaXMgZmFsc2UgYW5kIHRoZXJlIGlzIGFuIGV4aXN0aW5nXHJcbiAgICAgKiAgICAgICAga2V5LXZhbHVlIHBhaXIgdGhlbiB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LlxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIG5ldyBrZXktdmFsdWUgcGFpciB3YXMgYWRkZWQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICogTm90ZTogd2hlbiBvdmVyd3JpdGluZyBhIHByZXZpb3VzIGVudHJ5LCB0aGUga2V5IGlzIHVwZGF0ZWRcclxuICAgICAqIGFzIHdlbGwgYXMgdGhlIHZhbHVlLiBUaGlzIGhhcyBubyBlZmZlY3QgdW5sZXNzIHRoZSBuZXcga2V5XHJcbiAgICAgKiBoYXMgZGF0YSB0aGF0IGRvZXMgbm90IGFmZmVjdCBpdHMgc29ydCBvcmRlci5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fcm9vdC5pc1NoYXJlZClcclxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHRoaXMuX3Jvb3QuY2xvbmUoKTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fcm9vdC5zZXQoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0aGlzKTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgLy8gUm9vdCBub2RlIGhhcyBzcGxpdCwgc28gY3JlYXRlIGEgbmV3IHJvb3Qgbm9kZS5cclxuICAgICAgICB0aGlzLl9yb290ID0gbmV3IEJOb2RlSW50ZXJuYWwoW3RoaXMuX3Jvb3QsIHJlc3VsdF0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgZXhpc3RzIGluIHRoZSBCKyB0cmVlLCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKiBVc2UgZ2V0KCkgZm9yIGJlc3QgcGVyZm9ybWFuY2U7IHVzZSBoYXMoKSBpZiB5b3UgbmVlZCB0b1xyXG4gICAgICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBcInVuZGVmaW5lZCB2YWx1ZVwiIGFuZCBcImtleSBub3QgcHJlc2VudFwiLlxyXG4gICAgICogQHBhcmFtIGtleSBLZXkgdG8gZGV0ZWN0XHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKGtleSwga2V5LCB0cnVlLCB1bmRlZmluZWQpICE9PSAwO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHNpbmdsZSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBCKyB0cmVlLlxyXG4gICAgICogQHBhcmFtIGtleSBLZXkgdG8gZmluZFxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHBhaXIgd2FzIGZvdW5kIGFuZCByZW1vdmVkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgRGVsZXRlUmFuZ2UpICE9PSAwO1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICByZXR1cm4gbnUuc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSkgfHwgb3ZlcndyaXRlID8gbnUgOiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LXZhbHVlIHBhaXJzIHNldC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoUGFpcnMgPSBmdW5jdGlvbiAocGFpcnMsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICByZXR1cm4gbnUuc2V0UGFpcnMocGFpcnMsIG92ZXJ3cml0ZSkgIT09IDAgfHwgb3ZlcndyaXRlID8gbnUgOiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5cyBwcmVzZW50LlxyXG4gICAgICogIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGFkZC4gSWYgYSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB0cmVlLFxyXG4gICAgICogICAgICAgICBuZWl0aGVyIHRoZSBleGlzdGluZyBrZXkgbm9yIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBtb2RpZmllZC5cclxuICAgICAqICBAcGFyYW0gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkIGlmIHRydWUsIHJldHVybnMgdGhpcyBpZiBhbGwga2V5cyBhbHJlYWR5XHJcbiAgICAgKiAgZXhpc3RlZC4gUGVyZm9ybWFuY2Ugbm90ZTogZHVlIHRvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjbGFzcywgYWxsXHJcbiAgICAgKiAgbm9kZShzKSBsZWFkaW5nIHRvIGV4aXN0aW5nIGtleXMgYXJlIGNsb25lZCBldmVuIGlmIHRoZSBjb2xsZWN0aW9uIGlzXHJcbiAgICAgKiAgdWx0aW1hdGVseSB1bmNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLndpdGhLZXlzID0gZnVuY3Rpb24gKGtleXMsIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKSwgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgY2hhbmdlZCA9IG51LnNldChrZXlzW2ldLCB1bmRlZmluZWQsIGZhbHNlKSB8fCBjaGFuZ2VkO1xyXG4gICAgICAgIHJldHVybiByZXR1cm5UaGlzSWZVbmNoYW5nZWQgJiYgIWNoYW5nZWQgPyB0aGlzIDogbnU7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSByZXR1cm5UaGlzSWZVbmNoYW5nZWQgaWYgdHJ1ZSwgcmV0dXJucyB0aGlzIGlmIHRoZSBrZXkgZGlkbid0IGV4aXN0LlxyXG4gICAgICogIFBlcmZvcm1hbmNlIG5vdGU6IGR1ZSB0byB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY2xhc3MsIG5vZGUocykgbGVhZGluZ1xyXG4gICAgICogIHRvIHdoZXJlIHRoZSBrZXkgd291bGQgaGF2ZSBiZWVuIHN0b3JlZCBhcmUgY2xvbmVkIGV2ZW4gd2hlbiB0aGUga2V5XHJcbiAgICAgKiAgdHVybnMgb3V0IG5vdCB0byBleGlzdCBhbmQgdGhlIGNvbGxlY3Rpb24gaXMgdW5jaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aG91dCA9IGZ1bmN0aW9uIChrZXksIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpdGhvdXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleXMgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSByZXR1cm5UaGlzSWZVbmNoYW5nZWQgaWYgdHJ1ZSwgcmV0dXJucyB0aGlzIGlmIG5vbmUgb2YgdGhlIGtleXNcclxuICAgICAqICBleGlzdGVkLiBQZXJmb3JtYW5jZSBub3RlOiBkdWUgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGNsYXNzLFxyXG4gICAgICogIG5vZGUocykgbGVhZGluZyB0byB3aGVyZSB0aGUga2V5IHdvdWxkIGhhdmUgYmVlbiBzdG9yZWQgYXJlIGNsb25lZFxyXG4gICAgICogIGV2ZW4gd2hlbiB0aGUga2V5IHR1cm5zIG91dCBub3QgdG8gZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRob3V0S2V5cyA9IGZ1bmN0aW9uIChrZXlzLCByZXR1cm5UaGlzSWZVbmNoYW5nZWQpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51LmRlbGV0ZUtleXMoa2V5cykgfHwgIXJldHVyblRoaXNJZlVuY2hhbmdlZCA/IG51IDogdGhpcztcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMgcmVtb3ZlZC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRob3V0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgICAgIGlmIChudS5kZWxldGVSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoKSA9PT0gMCAmJiByZXR1cm5UaGlzSWZVbmNoYW5nZWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCBwYWlycyByZW1vdmVkIHdoZW5ldmVyIHRoZSBjYWxsYmFja1xyXG4gICAgICogIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuIGB3aGVyZSgpYCBpcyBhIHN5bm9ueW0gZm9yIHRoaXMgbWV0aG9kLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5ncmVlZHlDbG9uZSgpO1xyXG4gICAgICAgIHZhciBkZWw7XHJcbiAgICAgICAgbnUuZWRpdEFsbChmdW5jdGlvbiAoaywgdiwgaSkge1xyXG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrKGssIHYsIGkpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbCA9IERlbGV0ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIWRlbCAmJiByZXR1cm5UaGlzSWZVbmNoYW5nZWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCBhbGwgdmFsdWVzIGFsdGVyZWQgYnkgYSBjYWxsYmFjayBmdW5jdGlvbi4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5tYXBWYWx1ZXMgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgdG1wID0ge307XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5ncmVlZHlDbG9uZSgpO1xyXG4gICAgICAgIG51LmVkaXRBbGwoZnVuY3Rpb24gKGssIHYsIGkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcC52YWx1ZSA9IGNhbGxiYWNrKHYsIGssIGkpLCB0bXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51O1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgIHZhciBpID0gMCwgcCA9IGluaXRpYWxWYWx1ZTtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXModGhpcy5taW5LZXkoKSwgUmV1c2VkQXJyYXkpLCBuZXh0O1xyXG4gICAgICAgIHdoaWxlICghKG5leHQgPSBpdC5uZXh0KCkpLmRvbmUpXHJcbiAgICAgICAgICAgIHAgPSBjYWxsYmFjayhwLCBuZXh0LnZhbHVlLCBpKyssIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBJdGVyYXRvciBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlcyBpdGVtcyBpbiBvcmRlciAoYXNjZW5kaW5nIG9yZGVyIGlmXHJcbiAgICAgKiAgdGhlIGNvbGxlY3Rpb24ncyBjb21wYXJhdG9yIHVzZXMgYXNjZW5kaW5nIG9yZGVyLCBhcyBpcyB0aGUgZGVmYXVsdC4pXHJcbiAgICAgKiAgQHBhcmFtIGxvd2VzdEtleSBGaXJzdCBrZXkgdG8gYmUgaXRlcmF0ZWQsIG9yIHVuZGVmaW5lZCB0byBzdGFydCBhdFxyXG4gICAgICogICAgICAgICBtaW5LZXkoKS4gSWYgdGhlIHNwZWNpZmllZCBrZXkgZG9lc24ndCBleGlzdCB0aGVuIGl0ZXJhdGlvblxyXG4gICAgICogICAgICAgICBzdGFydHMgYXQgdGhlIG5leHQgaGlnaGVyIGtleSAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYXJhdG9yKS5cclxuICAgICAqICBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZVxyXG4gICAgICogICAgICAgICBwYWlycywgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgb24gZXZlcnkgaXRlcmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uIChsb3dlc3RLZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGluZm8gPSB0aGlzLmZpbmRQYXRoKGxvd2VzdEtleSk7XHJcbiAgICAgICAgaWYgKGluZm8gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7XHJcbiAgICAgICAgdmFyIG5vZGVxdWV1ZSA9IGluZm8ubm9kZXF1ZXVlLCBub2RlaW5kZXggPSBpbmZvLm5vZGVpbmRleCwgbGVhZiA9IGluZm8ubGVhZjtcclxuICAgICAgICB2YXIgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgdmFyIGkgPSAobG93ZXN0S2V5ID09PSB1bmRlZmluZWQgPyAtMSA6IGxlYWYuaW5kZXhPZihsb3dlc3RLZXksIDAsIHRoaXMuX2NvbXBhcmUpIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAganVtcDogZm9yICg7Oykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA8IGxlYWYua2V5cy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtsZWFmLmtleXNbaV0sIGxlYWYudmFsdWVzW2ldXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA8IGxlYWYua2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0gbGVhZi5rZXlzW2ldLCByZXVzZWRBcnJheVsxXSA9IGxlYWYudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXVzZWRBcnJheSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMjtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgbGVhZiBub2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxldmVsID0gLTE7Oykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbGV2ZWwgPj0gbm9kZXF1ZXVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBqdW1wO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbm9kZWluZGV4W2xldmVsXSA8IG5vZGVxdWV1ZVtsZXZlbF0ubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsZXZlbCA+IDA7IGxldmVsLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVxdWV1ZVtsZXZlbCAtIDFdID0gbm9kZXF1ZXVlW2xldmVsXVtub2RlaW5kZXhbbGV2ZWxdXS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVpbmRleFtsZXZlbCAtIDFdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFmID0gbm9kZXF1ZXVlWzBdW25vZGVpbmRleFswXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlcyBpdGVtcyBpbiByZXZlcnNlZCBvcmRlci5cclxuICAgICAqICBAcGFyYW0gaGlnaGVzdEtleSBLZXkgYXQgd2hpY2ggdG8gc3RhcnQgaXRlcmF0aW5nLCBvciB1bmRlZmluZWQgdG9cclxuICAgICAqICAgICAgICAgc3RhcnQgYXQgbWF4S2V5KCkuIElmIHRoZSBzcGVjaWZpZWQga2V5IGRvZXNuJ3QgZXhpc3QgdGhlbiBpdGVyYXRpb25cclxuICAgICAqICAgICAgICAgc3RhcnRzIGF0IHRoZSBuZXh0IGxvd2VyIGtleSAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYXJhdG9yKS5cclxuICAgICAqICBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZVxyXG4gICAgICogICAgICAgICBwYWlycywgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgb24gZXZlcnkgaXRlcmF0aW9uLlxyXG4gICAgICogIEBwYXJhbSBza2lwSGlnaGVzdCBJZmYgdGhpcyBmbGFnIGlzIHRydWUgYW5kIHRoZSBoaWdoZXN0S2V5IGV4aXN0cyBpbiB0aGVcclxuICAgICAqICAgICAgICAgY29sbGVjdGlvbiwgdGhlIHBhaXIgbWF0Y2hpbmcgaGlnaGVzdEtleSBpcyBza2lwcGVkLCBub3QgaXRlcmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5lbnRyaWVzUmV2ZXJzZWQgPSBmdW5jdGlvbiAoaGlnaGVzdEtleSwgcmV1c2VkQXJyYXksIHNraXBIaWdoZXN0KSB7XHJcbiAgICAgICAgaWYgKGhpZ2hlc3RLZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBoaWdoZXN0S2V5ID0gdGhpcy5tYXhLZXkoKTtcclxuICAgICAgICAgICAgc2tpcEhpZ2hlc3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmIChoaWdoZXN0S2V5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKTsgLy8gY29sbGVjdGlvbiBpcyBlbXB0eVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2EgPSB0aGlzLmZpbmRQYXRoKGhpZ2hlc3RLZXkpIHx8IHRoaXMuZmluZFBhdGgodGhpcy5tYXhLZXkoKSksIG5vZGVxdWV1ZSA9IF9hLm5vZGVxdWV1ZSwgbm9kZWluZGV4ID0gX2Eubm9kZWluZGV4LCBsZWFmID0gX2EubGVhZjtcclxuICAgICAgICBjaGVjayghbm9kZXF1ZXVlWzBdIHx8IGxlYWYgPT09IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dLCBcIndhdCFcIik7XHJcbiAgICAgICAgdmFyIGkgPSBsZWFmLmluZGV4T2YoaGlnaGVzdEtleSwgMCwgdGhpcy5fY29tcGFyZSk7XHJcbiAgICAgICAgaWYgKCFza2lwSGlnaGVzdCAmJiBpIDwgbGVhZi5rZXlzLmxlbmd0aCAmJiB0aGlzLl9jb21wYXJlKGxlYWYua2V5c1tpXSwgaGlnaGVzdEtleSkgPD0gMClcclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IHJldXNlZEFycmF5ICE9PSB1bmRlZmluZWQgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBqdW1wOiBmb3IgKDs7KSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1pID49IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtsZWFmLmtleXNbaV0sIGxlYWYudmFsdWVzW2ldXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0taSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IGxlYWYua2V5c1tpXSwgcmV1c2VkQXJyYXlbMV0gPSBsZWFmLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV1c2VkQXJyYXkgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IGxlYWYgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsZXZlbCA9IC0xOzspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2xldmVsID49IG5vZGVxdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUganVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLW5vZGVpbmRleFtsZXZlbF0gPj0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGV2ZWwgPiAwOyBsZXZlbC0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlcXVldWVbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbF1bbm9kZWluZGV4W2xldmVsXV0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlaW5kZXhbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbCAtIDFdLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZiA9IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gbGVhZi5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyogVXNlZCBieSBlbnRyaWVzKCkgYW5kIGVudHJpZXNSZXZlcnNlZCgpIHRvIHByZXBhcmUgdG8gc3RhcnQgaXRlcmF0aW5nLlxyXG4gICAgICogSXQgZGV2ZWxvcHMgYSBcIm5vZGUgcXVldWVcIiBmb3IgZWFjaCBub24tbGVhZiBsZXZlbCBvZiB0aGUgdHJlZS5cclxuICAgICAqIExldmVscyBhcmUgbnVtYmVyZWQgXCJib3R0b20tdXBcIiBzbyB0aGF0IGxldmVsIDAgaXMgYSBsaXN0IG9mIGxlYWZcclxuICAgICAqIG5vZGVzIGZyb20gYSBsb3ctbGV2ZWwgbm9uLWxlYWYgbm9kZS4gVGhlIHF1ZXVlIGF0IGEgZ2l2ZW4gbGV2ZWwgTFxyXG4gICAgICogY29uc2lzdHMgb2Ygbm9kZXF1ZXVlW0xdIHdoaWNoIGlzIHRoZSBjaGlsZHJlbiBvZiBhIEJOb2RlSW50ZXJuYWwsXHJcbiAgICAgKiBhbmQgbm9kZWluZGV4W0xdLCB0aGUgY3VycmVudCBpbmRleCB3aXRoaW4gdGhhdCBjaGlsZCBsaXN0LCBzdWNoXHJcbiAgICAgKiBzdWNoIHRoYXQgbm9kZXF1ZXVlW0wtMV0gPT09IG5vZGVxdWV1ZVtMXVtub2RlaW5kZXhbTF1dLmNoaWxkcmVuLlxyXG4gICAgICogKEhvd2V2ZXIgaW5zaWRlIHRoaXMgZnVuY3Rpb24gdGhlIG9yZGVyIGlzIHJldmVyc2VkLilcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZpbmRQYXRoID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBuZXh0bm9kZSA9IHRoaXMuX3Jvb3Q7XHJcbiAgICAgICAgdmFyIG5vZGVxdWV1ZSwgbm9kZWluZGV4O1xyXG4gICAgICAgIGlmIChuZXh0bm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgbm9kZXF1ZXVlID0gRW1wdHlBcnJheSwgbm9kZWluZGV4ID0gRW1wdHlBcnJheTsgLy8gYXZvaWQgYWxsb2NhdGlvbnNcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGVxdWV1ZSA9IFtdLCBub2RlaW5kZXggPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7ICFuZXh0bm9kZS5pc0xlYWY7IGQrKykge1xyXG4gICAgICAgICAgICAgICAgbm9kZXF1ZXVlW2RdID0gbmV4dG5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBub2RlaW5kZXhbZF0gPSBrZXkgPT09IHVuZGVmaW5lZCA/IDAgOiBuZXh0bm9kZS5pbmRleE9mKGtleSwgMCwgdGhpcy5fY29tcGFyZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZWluZGV4W2RdID49IG5vZGVxdWV1ZVtkXS5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBmaXJzdCBrZXkgPiBtYXhLZXkoKVxyXG4gICAgICAgICAgICAgICAgbmV4dG5vZGUgPSBub2RlcXVldWVbZF1bbm9kZWluZGV4W2RdXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlcXVldWUucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICBub2RlaW5kZXgucmV2ZXJzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBub2RlcXVldWU6IG5vZGVxdWV1ZSwgbm9kZWluZGV4OiBub2RlaW5kZXgsIGxlYWY6IG5leHRub2RlIH07XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgdGhpc2AgYW5kIGBvdGhlcmAuXHJcbiAgICAgKiBGb3IgZWZmaWNpZW5jeSwgdGhlIGRpZmYgaXMgcmV0dXJuZWQgdmlhIGludm9jYXRpb25zIG9mIHN1cHBsaWVkIGhhbmRsZXJzLlxyXG4gICAgICogVGhlIGNvbXB1dGF0aW9uIGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2UgaW4gd2hpY2ggdGhlIHR3byB0cmVlcyBoYXZlIGxhcmdlIGFtb3VudHNcclxuICAgICAqIG9mIHNoYXJlZCBkYXRhIChvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBgY2xvbmVgIG9yIGB3aXRoYCBBUElzKSBhbmQgd2lsbCBhdm9pZFxyXG4gICAgICogYW55IGl0ZXJhdGlvbiBvZiBzaGFyZWQgc3RhdGUuXHJcbiAgICAgKiBUaGUgaGFuZGxlcnMgY2FuIGNhdXNlIGNvbXB1dGF0aW9uIHRvIGVhcmx5IGV4aXQgYnkgcmV0dXJuaW5nIHticmVhazogUn0uXHJcbiAgICAgKiBOZWl0aGVyIG9mIHRoZSBjb2xsZWN0aW9ucyBzaG91bGQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGNvbXBhcmlzb24gcHJvY2VzcyAoaW4geW91ciBjYWxsYmFja3MpLCBhcyB0aGlzIG1ldGhvZCBhc3N1bWVzIHRoZXkgd2lsbCBub3QgYmUgbXV0YXRlZC5cclxuICAgICAqIEBwYXJhbSBvdGhlciBUaGUgdHJlZSB0byBjb21wdXRlIGEgZGlmZiBhZ2FpbnN0LlxyXG4gICAgICogQHBhcmFtIG9ubHlUaGlzIENhbGxiYWNrIGludm9rZWQgZm9yIGFsbCBrZXlzIG9ubHkgcHJlc2VudCBpbiBgdGhpc2AuXHJcbiAgICAgKiBAcGFyYW0gb25seU90aGVyIENhbGxiYWNrIGludm9rZWQgZm9yIGFsbCBrZXlzIG9ubHkgcHJlc2VudCBpbiBgb3RoZXJgLlxyXG4gICAgICogQHBhcmFtIGRpZmZlcmVudCBDYWxsYmFjayBpbnZva2VkIGZvciBhbGwga2V5cyB3aXRoIGRpZmZlcmluZyB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5kaWZmQWdhaW5zdCA9IGZ1bmN0aW9uIChvdGhlciwgb25seVRoaXMsIG9ubHlPdGhlciwgZGlmZmVyZW50KSB7XHJcbiAgICAgICAgaWYgKG90aGVyLl9jb21wYXJlICE9PSB0aGlzLl9jb21wYXJlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWUgY29tcGFyYXRvcnMgYXJlIG5vdCB0aGUgc2FtZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkgfHwgb3RoZXIuaXNFbXB0eSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5ICYmIG90aGVyLmlzRW1wdHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAvLyBJZiBvbmUgdHJlZSBpcyBlbXB0eSwgZXZlcnl0aGluZyB3aWxsIGJlIGFuIG9ubHlUaGlzL29ubHlPdGhlci5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBvbmx5T3RoZXIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEJUcmVlLnN0ZXBUb0VuZChCVHJlZS5tYWtlRGlmZkN1cnNvcihvdGhlciksIG9ubHlPdGhlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBvbmx5VGhpcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogQlRyZWUuc3RlcFRvRW5kKEJUcmVlLm1ha2VEaWZmQ3Vyc29yKHRoaXMpLCBvbmx5VGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEN1cnNvci1iYXNlZCBkaWZmIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxyXG4gICAgICAgIC8vIC0gVW50aWwgbmVpdGhlciBjdXJzb3IgaGFzIG5hdmlnYXRlZCB0byB0aGUgZW5kIG9mIHRoZSB0cmVlLCBkbyB0aGUgZm9sbG93aW5nOlxyXG4gICAgICAgIC8vICAtIElmIHRoZSBgdGhpc2AgY3Vyc29yIGlzIFwiYmVoaW5kXCIgdGhlIGBvdGhlcmAgY3Vyc29yIChzdHJpY3RseSA8LCB2aWEgY29tcGFyZSksIGFkdmFuY2UgaXQuXHJcbiAgICAgICAgLy8gIC0gT3RoZXJ3aXNlLCBhZHZhbmNlIHRoZSBgb3RoZXJgIGN1cnNvci5cclxuICAgICAgICAvLyAgLSBBbnkgdGltZSBhIGN1cnNvciBpcyBzdGVwcGVkLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmc6XHJcbiAgICAgICAgLy8gICAgLSBJZiBlaXRoZXIgY3Vyc29yIHBvaW50cyB0byBhIGtleS92YWx1ZSBwYWlyOlxyXG4gICAgICAgIC8vICAgICAgLSBJZiB0aGlzQ3Vyc29yID09PSBvdGhlckN1cnNvciBhbmQgdGhlIHZhbHVlcyBkaWZmZXIsIGl0IGlzIGEgRGlmZmVyZW50LlxyXG4gICAgICAgIC8vICAgICAgLSBJZiB0aGlzQ3Vyc29yID4gb3RoZXJDdXJzb3IgYW5kIG90aGVyQ3Vyc29yIGlzIGF0IGEga2V5L3ZhbHVlIHBhaXIsIGl0IGlzIGFuIE9ubHlPdGhlci5cclxuICAgICAgICAvLyAgICAgIC0gSWYgdGhpc0N1cnNvciA8IG90aGVyQ3Vyc29yIGFuZCB0aGlzQ3Vyc29yIGlzIGF0IGEga2V5L3ZhbHVlIHBhaXIsIGl0IGlzIGFuIE9ubHlUaGlzIGFzIGxvbmcgYXMgdGhlIG1vc3QgcmVjZW50IFxyXG4gICAgICAgIC8vICAgICAgICBjdXJzb3Igc3RlcCB3YXMgKm5vdCogb3RoZXJDdXJzb3IgYWR2YW5jaW5nIGZyb20gYSB0aWUuIFRoZSBleHRyYSBjb25kaXRpb24gYXZvaWRzIGVycm9uZW91cyBPbmx5T3RoZXIgY2FsbHMgXHJcbiAgICAgICAgLy8gICAgICAgIHRoYXQgd291bGQgb2NjdXIgZHVlIHRvIG90aGVyQ3Vyc29yIGJlaW5nIHRoZSBcImxlYWRlclwiLlxyXG4gICAgICAgIC8vICAgIC0gT3RoZXJ3aXNlLCBpZiBib3RoIGN1cnNvcnMgcG9pbnQgdG8gbm9kZXMsIGNvbXBhcmUgdGhlbS4gSWYgdGhleSBhcmUgZXF1YWwgYnkgcmVmZXJlbmNlIChzaGFyZWQpLCBza2lwXHJcbiAgICAgICAgLy8gICAgICBib3RoIGN1cnNvcnMgdG8gdGhlIG5leHQgbm9kZSBpbiB0aGUgd2Fsay5cclxuICAgICAgICAvLyAtIE9uY2Ugb25lIGN1cnNvciBoYXMgZmluaXNoZWQgc3RlcHBpbmcsIGFueSByZW1haW5pbmcgc3RlcHMgKGlmIGFueSkgYXJlIHRha2VuIGFuZCBrZXkvdmFsdWUgcGFpcnMgYXJlIGxvZ2dlZFxyXG4gICAgICAgIC8vICAgYXMgT25seU90aGVyIChpZiBvdGhlckN1cnNvciBpcyBzdGVwcGluZykgb3IgT25seVRoaXMgKGlmIHRoaXNDdXJzb3IgaXMgc3RlcHBpbmcpLlxyXG4gICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIGdpdmVzIHRoZSBjcml0aWNhbCBndWFyYW50ZWUgdGhhdCBhbGwgbG9jYXRpb25zIChib3RoIG5vZGVzIGFuZCBrZXkvdmFsdWUgcGFpcnMpIGluIGJvdGggdHJlZXMgdGhhdCBcclxuICAgICAgICAvLyBhcmUgaWRlbnRpY2FsIGJ5IHZhbHVlIChhbmQgcG9zc2libHkgYnkgcmVmZXJlbmNlKSB3aWxsIGJlIHZpc2l0ZWQgKmF0IHRoZSBzYW1lIHRpbWUqIGJ5IHRoZSBjdXJzb3JzLlxyXG4gICAgICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgcG9zc2liaWxpdHkgb2YgZW1pdHRpbmcgaW5jb3JyZWN0IGRpZmZzLCBhcyB3ZWxsIGFzIGFsbG93aW5nIGZvciBza2lwcGluZyBzaGFyZWQgbm9kZXMuXHJcbiAgICAgICAgdmFyIF9jb21wYXJlID0gdGhpcy5fY29tcGFyZTtcclxuICAgICAgICB2YXIgdGhpc0N1cnNvciA9IEJUcmVlLm1ha2VEaWZmQ3Vyc29yKHRoaXMpO1xyXG4gICAgICAgIHZhciBvdGhlckN1cnNvciA9IEJUcmVlLm1ha2VEaWZmQ3Vyc29yKG90aGVyKTtcclxuICAgICAgICAvLyBJdCBkb2Vzbid0IG1hdHRlciBob3cgdGhpc1N0ZXBwZWRMYXN0IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICAgIC8vIFN0ZXAgb3JkZXIgaXMgb25seSB1c2VkIHdoZW4gZWl0aGVyIGN1cnNvciBpcyBhdCBhIGxlYWYsIGFuZCBjdXJzb3JzIGFsd2F5cyBzdGFydCBhdCBhIG5vZGUuXHJcbiAgICAgICAgdmFyIHRoaXNTdWNjZXNzID0gdHJ1ZSwgb3RoZXJTdWNjZXNzID0gdHJ1ZSwgcHJldkN1cnNvck9yZGVyID0gQlRyZWUuY29tcGFyZSh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzU3VjY2VzcyAmJiBvdGhlclN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnNvck9yZGVyID0gQlRyZWUuY29tcGFyZSh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUpO1xyXG4gICAgICAgICAgICB2YXIgdGhpc0xlYWYgPSB0aGlzQ3Vyc29yLmxlYWYsIHRoaXNJbnRlcm5hbFNwaW5lID0gdGhpc0N1cnNvci5pbnRlcm5hbFNwaW5lLCB0aGlzTGV2ZWxJbmRpY2VzID0gdGhpc0N1cnNvci5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgICAgIHZhciBvdGhlckxlYWYgPSBvdGhlckN1cnNvci5sZWFmLCBvdGhlckludGVybmFsU3BpbmUgPSBvdGhlckN1cnNvci5pbnRlcm5hbFNwaW5lLCBvdGhlckxldmVsSW5kaWNlcyA9IG90aGVyQ3Vyc29yLmxldmVsSW5kaWNlcztcclxuICAgICAgICAgICAgaWYgKHRoaXNMZWFmIHx8IG90aGVyTGVhZikge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnNvcnMgd2VyZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBsYXN0IHN0ZXAsIHRoZW4gdGhlcmUgaXMgbm8gd29yayB0byBiZSBkb25lLlxyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZDdXJzb3JPcmRlciAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJzb3JPcmRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0xlYWYgJiYgb3RoZXJMZWFmICYmIGRpZmZlcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXF1YWwga2V5cywgY2hlY2sgZm9yIG1vZGlmaWNhdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gdGhpc0xlYWYudmFsdWVzW3RoaXNMZXZlbEluZGljZXNbdGhpc0xldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlckxlYWYudmFsdWVzW290aGVyTGV2ZWxJbmRpY2VzW290aGVyTGV2ZWxJbmRpY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmlzKHZhbFRoaXMsIHZhbE90aGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBkaWZmZXJlbnQodGhpc0N1cnNvci5jdXJyZW50S2V5LCB2YWxUaGlzLCB2YWxPdGhlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnJlYWspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vyc29yT3JkZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIGtub3cgdGhhdCBlaXRoZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEuIG90aGVyQ3Vyc29yIHN0ZXBwZWQgbGFzdCBmcm9tIGEgc3RhcnRpbmcgcG9zaXRpb24gdGhhdCB0cmFpbGVkIHRoaXNDdXJzb3IsIGFuZCBpcyBzdGlsbCBiZWhpbmQsIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIuIHRoaXNDdXJzb3Igc3RlcHBlZCBsYXN0IGFuZCBsZWFwZnJvZ2dlZCBvdGhlckN1cnNvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgb2YgdGhlc2UgY2FzZXMgaXMgYW4gXCJvbmx5IG90aGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyTGVhZiAmJiBvbmx5T3RoZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlclZhbCA9IG90aGVyTGVhZi52YWx1ZXNbb3RoZXJMZXZlbEluZGljZXNbb3RoZXJMZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9ubHlPdGhlcihvdGhlckN1cnNvci5jdXJyZW50S2V5LCBvdGhlclZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5icmVhaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9ubHlUaGlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzTGVhZiAmJiBwcmV2Q3Vyc29yT3JkZXIgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gdGhpc0xlYWYudmFsdWVzW3RoaXNMZXZlbEluZGljZXNbdGhpc0xldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb25seVRoaXModGhpc0N1cnNvci5jdXJyZW50S2V5LCB2YWxUaGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXNMZWFmICYmICFvdGhlckxlYWYgJiYgY3Vyc29yT3JkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBsYXN0VGhpcyA9IHRoaXNJbnRlcm5hbFNwaW5lLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdE90aGVyID0gb3RoZXJJbnRlcm5hbFNwaW5lLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZVRoaXMgPSB0aGlzSW50ZXJuYWxTcGluZVtsYXN0VGhpc11bdGhpc0xldmVsSW5kaWNlc1tsYXN0VGhpc11dO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVPdGhlciA9IG90aGVySW50ZXJuYWxTcGluZVtsYXN0T3RoZXJdW290aGVyTGV2ZWxJbmRpY2VzW2xhc3RPdGhlcl1dO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVPdGhlciA9PT0gbm9kZVRoaXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2Q3Vyc29yT3JkZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNTdWNjZXNzID0gQlRyZWUuc3RlcCh0aGlzQ3Vyc29yLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBvdGhlclN1Y2Nlc3MgPSBCVHJlZS5zdGVwKG90aGVyQ3Vyc29yLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2Q3Vyc29yT3JkZXIgPSBjdXJzb3JPcmRlcjtcclxuICAgICAgICAgICAgaWYgKGN1cnNvck9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1N1Y2Nlc3MgPSBCVHJlZS5zdGVwKHRoaXNDdXJzb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3RoZXJTdWNjZXNzID0gQlRyZWUuc3RlcChvdGhlckN1cnNvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXNTdWNjZXNzICYmIG9ubHlUaGlzKVxyXG4gICAgICAgICAgICByZXR1cm4gQlRyZWUuZmluaXNoQ3Vyc29yV2Fsayh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUsIG9ubHlUaGlzKTtcclxuICAgICAgICBpZiAob3RoZXJTdWNjZXNzICYmIG9ubHlPdGhlcilcclxuICAgICAgICAgICAgcmV0dXJuIEJUcmVlLmZpbmlzaEN1cnNvcldhbGsob3RoZXJDdXJzb3IsIHRoaXNDdXJzb3IsIF9jb21wYXJlLCBvbmx5T3RoZXIpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGRpZmZBZ2FpbnN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCVHJlZS5maW5pc2hDdXJzb3JXYWxrID0gZnVuY3Rpb24gKGN1cnNvciwgY3Vyc29yRmluaXNoZWQsIGNvbXBhcmVLZXlzLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBjb21wYXJlZCA9IEJUcmVlLmNvbXBhcmUoY3Vyc29yLCBjdXJzb3JGaW5pc2hlZCwgY29tcGFyZUtleXMpO1xyXG4gICAgICAgIGlmIChjb21wYXJlZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIUJUcmVlLnN0ZXAoY3Vyc29yKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmVkIDwgMCkge1xyXG4gICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJjdXJzb3Igd2FsayB0ZXJtaW5hdGVkIGVhcmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQlRyZWUuc3RlcFRvRW5kKGN1cnNvciwgY2FsbGJhY2spO1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnN0ZXBUb0VuZCA9IGZ1bmN0aW9uIChjdXJzb3IsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIGNhblN0ZXAgPSB0cnVlO1xyXG4gICAgICAgIHdoaWxlIChjYW5TdGVwKSB7XHJcbiAgICAgICAgICAgIHZhciBsZWFmID0gY3Vyc29yLmxlYWYsIGxldmVsSW5kaWNlcyA9IGN1cnNvci5sZXZlbEluZGljZXMsIGN1cnJlbnRLZXkgPSBjdXJzb3IuY3VycmVudEtleTtcclxuICAgICAgICAgICAgaWYgKGxlYWYpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxlYWYudmFsdWVzW2xldmVsSW5kaWNlc1tsZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKGN1cnJlbnRLZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FuU3RlcCA9IEJUcmVlLnN0ZXAoY3Vyc29yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCVHJlZS5tYWtlRGlmZkN1cnNvciA9IGZ1bmN0aW9uICh0cmVlKSB7XHJcbiAgICAgICAgdmFyIF9yb290ID0gdHJlZS5fcm9vdCwgaGVpZ2h0ID0gdHJlZS5oZWlnaHQ7XHJcbiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0OiBoZWlnaHQsIGludGVybmFsU3BpbmU6IFtbX3Jvb3RdXSwgbGV2ZWxJbmRpY2VzOiBbMF0sIGxlYWY6IHVuZGVmaW5lZCwgY3VycmVudEtleTogX3Jvb3QubWF4S2V5KCkgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkdmFuY2VzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc3RlcCBpbiB0aGUgd2FsayBvZiBpdHMgdHJlZS5cclxuICAgICAqIEN1cnNvcnMgYXJlIHdhbGtlZCBiYWNrd2FyZHMgaW4gc29ydCBvcmRlciwgYXMgdGhpcyBhbGxvd3MgdGhlbSB0byBsZXZlcmFnZSBtYXhLZXkoKSBpbiBvcmRlciB0byBiZSBjb21wYXJlZCBpbiBPKDEpLlxyXG4gICAgICogQHBhcmFtIGN1cnNvciBUaGUgY3Vyc29yIHRvIHN0ZXBcclxuICAgICAqIEBwYXJhbSBzdGVwVG9Ob2RlIElmIHRydWUsIHRoZSBjdXJzb3Igd2lsbCBiZSBhZHZhbmNlZCB0byB0aGUgbmV4dCBub2RlIChza2lwcGluZyB2YWx1ZXMpXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzdGVwIHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIHRoZSBzdGVwIHdvdWxkIGhhdmUgY2F1c2VkIHRoZSBjdXJzb3IgdG8gbW92ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgdHJlZS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUuc3RlcCA9IGZ1bmN0aW9uIChjdXJzb3IsIHN0ZXBUb05vZGUpIHtcclxuICAgICAgICB2YXIgaW50ZXJuYWxTcGluZSA9IGN1cnNvci5pbnRlcm5hbFNwaW5lLCBsZXZlbEluZGljZXMgPSBjdXJzb3IubGV2ZWxJbmRpY2VzLCBsZWFmID0gY3Vyc29yLmxlYWY7XHJcbiAgICAgICAgaWYgKHN0ZXBUb05vZGUgPT09IHRydWUgfHwgbGVhZikge1xyXG4gICAgICAgICAgICB2YXIgbGV2ZWxzTGVuZ3RoID0gbGV2ZWxJbmRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgLy8gU3RlcCB0byB0aGUgbmV4dCBub2RlIG9ubHkgaWY6XHJcbiAgICAgICAgICAgIC8vIC0gV2UgYXJlIGV4cGxpY2l0bHkgZGlyZWN0ZWQgdG8gdmlhIHN0ZXBUb05vZGUsIG9yXHJcbiAgICAgICAgICAgIC8vIC0gVGhlcmUgYXJlIG5vIGtleS92YWx1ZSBwYWlycyBsZWZ0IHRvIHN0ZXAgdG8gaW4gdGhpcyBsZWFmXHJcbiAgICAgICAgICAgIGlmIChzdGVwVG9Ob2RlID09PSB0cnVlIHx8IGxldmVsSW5kaWNlc1tsZXZlbHNMZW5ndGggLSAxXSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNwaW5lTGVuZ3RoID0gaW50ZXJuYWxTcGluZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAvLyBSb290IGlzIGxlYWZcclxuICAgICAgICAgICAgICAgIGlmIChzcGluZUxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBXYWxrIGJhY2sgdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIG5ldyBzdWJ0cmVlIHRvIGRlc2NlbmQgaW50b1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVMZXZlbEluZGV4ID0gc3BpbmVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxldmVsSW5kZXhXYWxrQmFjayA9IG5vZGVMZXZlbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGxldmVsSW5kZXhXYWxrQmFjayA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsSW5kaWNlc1tsZXZlbEluZGV4V2Fsa0JhY2tdID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWxJbmRleFdhbGtCYWNrIDwgbGV2ZWxzTGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGxlYWYgc3RhdGUgZnJvbSBjdXJzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5sZWFmID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxJbmRpY2VzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdhbGtlZCB1cHdhcmRzIHBhc3QgYW55IGludGVybmFsIG5vZGUsIHNsaWNlIHRoZW0gb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbEluZGV4V2Fsa0JhY2sgPCBub2RlTGV2ZWxJbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5pbnRlcm5hbFNwaW5lID0gaW50ZXJuYWxTcGluZS5zbGljZSgwLCBsZXZlbEluZGV4V2Fsa0JhY2sgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0byBuZXcgaW50ZXJuYWwgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGludGVybmFsU3BpbmVbbGV2ZWxJbmRleFdhbGtCYWNrXVstLWxldmVsSW5kaWNlc1tsZXZlbEluZGV4V2Fsa0JhY2tdXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsSW5kZXhXYWxrQmFjay0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gQ3Vyc29yIGlzIGluIHRoZSBmYXIgbGVmdCBsZWFmIG9mIHRoZSB0cmVlLCBubyBtb3JlIG5vZGVzIHRvIGVudW1lcmF0ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTW92ZSB0byBuZXcgbGVhZiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlSW5kZXggPSAtLWxldmVsSW5kaWNlc1tsZXZlbHNMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIGN1cnNvci5jdXJyZW50S2V5ID0gbGVhZi5rZXlzW3ZhbHVlSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIEN1cnNvciBkb2VzIG5vdCBwb2ludCB0byBhIHZhbHVlIGluIGEgbGVhZiwgc28gbW92ZSBkb3dud2FyZHNcclxuICAgICAgICAgICAgdmFyIG5leHRMZXZlbCA9IGludGVybmFsU3BpbmUubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExldmVsID0gbmV4dExldmVsIC0gMTtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBpbnRlcm5hbFNwaW5lW2N1cnJlbnRMZXZlbF1bbGV2ZWxJbmRpY2VzW2N1cnJlbnRMZXZlbF1dO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgICAgIC8vIEVudGVyaW5nIGludG8gYSBsZWFmLiBTZXQgdGhlIGN1cnNvciB0byBwb2ludCBhdCB0aGUgbGFzdCBrZXkvdmFsdWUgcGFpci5cclxuICAgICAgICAgICAgICAgIGN1cnNvci5sZWFmID0gbm9kZTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gbGV2ZWxJbmRpY2VzW25leHRMZXZlbF0gPSBub2RlLnZhbHVlcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yLmN1cnJlbnRLZXkgPSBub2RlLmtleXNbdmFsdWVJbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxTcGluZVtuZXh0TGV2ZWxdID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRJbmRleCA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBsZXZlbEluZGljZXNbbmV4dExldmVsXSA9IGNoaWxkSW5kZXg7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGNoaWxkcmVuW2NoaWxkSW5kZXhdLm1heEtleSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmVzIHRoZSB0d28gY3Vyc29ycy4gUmV0dXJucyBhIHZhbHVlIGluZGljYXRpbmcgd2hpY2ggY3Vyc29yIGlzIGFoZWFkIGluIGEgd2Fsay5cclxuICAgICAqIE5vdGUgdGhhdCBjdXJzb3JzIGFyZSBhZHZhbmNlZCBpbiByZXZlcnNlIHNvcnRpbmcgb3JkZXIuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3Vyc29yQSwgY3Vyc29yQiwgY29tcGFyZUtleXMpIHtcclxuICAgICAgICB2YXIgaGVpZ2h0QSA9IGN1cnNvckEuaGVpZ2h0LCBjdXJyZW50S2V5QSA9IGN1cnNvckEuY3VycmVudEtleSwgbGV2ZWxJbmRpY2VzQSA9IGN1cnNvckEubGV2ZWxJbmRpY2VzO1xyXG4gICAgICAgIHZhciBoZWlnaHRCID0gY3Vyc29yQi5oZWlnaHQsIGN1cnJlbnRLZXlCID0gY3Vyc29yQi5jdXJyZW50S2V5LCBsZXZlbEluZGljZXNCID0gY3Vyc29yQi5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgY29tcGFyaXNvbiBvcmRlciwgYXMgY3Vyc29ycyBhcmUgYWR2YW5jZWQgaW4gcmV2ZXJzZSBzb3J0aW5nIG9yZGVyXHJcbiAgICAgICAgdmFyIGtleUNvbXBhcmlzb24gPSBjb21wYXJlS2V5cyhjdXJyZW50S2V5QiwgY3VycmVudEtleUEpO1xyXG4gICAgICAgIGlmIChrZXlDb21wYXJpc29uICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXlDb21wYXJpc29uO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBOb3JtYWxpemUgZGVwdGggdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSBzaG9ydGVzdCB0cmVlLlxyXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGNvbmN1cnJlbnQgY3Vyc29yIHdhbGtzIG9mIHRyZWVzIG9mIGRpZmZlcmluZyBoZWlnaHRzIGNhbiByZWxpYWJseSBsYW5kIG9uIHNoYXJlZCBub2RlcyBhdCB0aGUgc2FtZSB0aW1lLlxyXG4gICAgICAgIC8vIFRvIGFjY29tcGxpc2ggdGhpcywgYSBjdXJzb3IgdGhhdCBpcyBvbiBhbiBpbnRlcm5hbCBub2RlIGF0IGRlcHRoIEQxIHdpdGggbWF4S2V5IFggaXMgY29uc2lkZXJlZCBcImJlaGluZFwiIGEgY3Vyc29yIG9uIGFuXHJcbiAgICAgICAgLy8gaW50ZXJuYWwgbm9kZSBhdCBkZXB0aCBEMiB3aXRoIG1heEtleSBZLCB3aGVuIEQxIDwgRDIuIFRodXMsIGFsd2F5cyB3YWxraW5nIHRoZSBjdXJzb3IgdGhhdCBpcyBcImJlaGluZFwiIHdpbGwgYWxsb3cgdGhlIGN1cnNvclxyXG4gICAgICAgIC8vIGF0IHNoYWxsb3dlciBkZXB0aCAoYnV0IGVxdWFsIG1heEtleSkgdG8gXCJjYXRjaCB1cFwiIGFuZCBsYW5kIG9uIHNoYXJlZCBub2Rlcy5cclxuICAgICAgICB2YXIgaGVpZ2h0TWluID0gaGVpZ2h0QSA8IGhlaWdodEIgPyBoZWlnaHRBIDogaGVpZ2h0QjtcclxuICAgICAgICB2YXIgZGVwdGhBTm9ybWFsaXplZCA9IGxldmVsSW5kaWNlc0EubGVuZ3RoIC0gKGhlaWdodEEgLSBoZWlnaHRNaW4pO1xyXG4gICAgICAgIHZhciBkZXB0aEJOb3JtYWxpemVkID0gbGV2ZWxJbmRpY2VzQi5sZW5ndGggLSAoaGVpZ2h0QiAtIGhlaWdodE1pbik7XHJcbiAgICAgICAgcmV0dXJuIGRlcHRoQU5vcm1hbGl6ZWQgLSBkZXB0aEJOb3JtYWxpemVkO1xyXG4gICAgfTtcclxuICAgIC8vIEVuZCBvZiBoZWxwZXIgbWV0aG9kcyBmb3IgZGlmZkFnYWluc3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvKiogUmV0dXJucyBhIG5ldyBpdGVyYXRvciBmb3IgaXRlcmF0aW5nIHRoZSBrZXlzIG9mIGVhY2ggcGFpciBpbiBhc2NlbmRpbmcgb3JkZXIuXHJcbiAgICAgKiAgQHBhcmFtIGZpcnN0S2V5OiBNaW5pbXVtIGtleSB0byBpbmNsdWRlIGluIHRoZSBvdXRwdXQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uIChmaXJzdEtleSkge1xyXG4gICAgICAgIHZhciBpdCA9IHRoaXMuZW50cmllcyhmaXJzdEtleSwgUmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBpdGVyYXRvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBuID0gaXQubmV4dCgpO1xyXG4gICAgICAgICAgICBpZiAobi52YWx1ZSlcclxuICAgICAgICAgICAgICAgIG4udmFsdWUgPSBuLnZhbHVlWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIG5ldyBpdGVyYXRvciBmb3IgaXRlcmF0aW5nIHRoZSB2YWx1ZXMgb2YgZWFjaCBwYWlyIGluIG9yZGVyIGJ5IGtleS5cclxuICAgICAqICBAcGFyYW0gZmlyc3RLZXk6IE1pbmltdW0ga2V5IHdob3NlIGFzc29jaWF0ZWQgdmFsdWUgaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoZmlyc3RLZXkpIHtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXMoZmlyc3RLZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IGl0Lm5leHQoKTtcclxuICAgICAgICAgICAgaWYgKG4udmFsdWUpXHJcbiAgICAgICAgICAgICAgICBuLnZhbHVlID0gbi52YWx1ZVsxXTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJtYXhOb2RlU2l6ZVwiLCB7XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvLyBBZGRpdGlvbmFsIG1ldGhvZHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8qKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbi92YWx1ZXMgYmVmb3JlIG5vZGVzIHdpbGwgc3BsaXQuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhOb2RlU2l6ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogR2V0cyB0aGUgbG93ZXN0IGtleSBpbiB0aGUgdHJlZS4gQ29tcGxleGl0eTogTyhsb2cgc2l6ZSkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9yb290Lm1pbktleSgpOyB9O1xyXG4gICAgLyoqIEdldHMgdGhlIGhpZ2hlc3Qga2V5IGluIHRoZSB0cmVlLiBDb21wbGV4aXR5OiBPKDEpICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubWF4S2V5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcm9vdC5tYXhLZXkoKTsgfTtcclxuICAgIC8qKiBRdWlja2x5IGNsb25lcyB0aGUgdHJlZSBieSBtYXJraW5nIHRoZSByb290IG5vZGUgYXMgc2hhcmVkLlxyXG4gICAgICogIEJvdGggY29waWVzIHJlbWFpbiBlZGl0YWJsZS4gV2hlbiB5b3UgbW9kaWZ5IGVpdGhlciBjb3B5LCBhbnlcclxuICAgICAqICBub2RlcyB0aGF0IGFyZSBzaGFyZWQgKG9yIHBvdGVudGlhbGx5IHNoYXJlZCkgYmV0d2VlbiB0aGUgdHdvXHJcbiAgICAgKiAgY29waWVzIGFyZSBjbG9uZWQgc28gdGhhdCB0aGUgY2hhbmdlcyBkbyBub3QgYWZmZWN0IG90aGVyIGNvcGllcy5cclxuICAgICAqICBUaGlzIGlzIGtub3duIGFzIGNvcHktb24td3JpdGUgYmVoYXZpb3IsIG9yIFwibGF6eSBjb3B5aW5nXCIuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdC5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCVHJlZSh1bmRlZmluZWQsIHRoaXMuX2NvbXBhcmUsIHRoaXMuX21heE5vZGVTaXplKTtcclxuICAgICAgICByZXN1bHQuX3Jvb3QgPSB0aGlzLl9yb290O1xyXG4gICAgICAgIHJlc3VsdC5fc2l6ZSA9IHRoaXMuX3NpemU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICAvKiogUGVyZm9ybXMgYSBncmVlZHkgY2xvbmUsIGltbWVkaWF0ZWx5IGR1cGxpY2F0aW5nIGFueSBub2RlcyB0aGF0IGFyZVxyXG4gICAgICogIG5vdCBjdXJyZW50bHkgbWFya2VkIGFzIHNoYXJlZCwgaW4gb3JkZXIgdG8gYXZvaWQgbWFya2luZyBhbnlcclxuICAgICAqICBhZGRpdGlvbmFsIG5vZGVzIGFzIHNoYXJlZC5cclxuICAgICAqICBAcGFyYW0gZm9yY2UgQ2xvbmUgYWxsIG5vZGVzLCBldmVuIHNoYXJlZCBvbmVzLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEJUcmVlKHVuZGVmaW5lZCwgdGhpcy5fY29tcGFyZSwgdGhpcy5fbWF4Tm9kZVNpemUpO1xyXG4gICAgICAgIHJlc3VsdC5fcm9vdCA9IHRoaXMuX3Jvb3QuZ3JlZWR5Q2xvbmUoZm9yY2UpO1xyXG4gICAgICAgIHJlc3VsdC5fc2l6ZSA9IHRoaXMuX3NpemU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICAvKiogR2V0cyBhbiBhcnJheSBmaWxsZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHRyZWUsIHNvcnRlZCBieSBrZXkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKG1heExlbmd0aCkge1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IHZvaWQgMCkgeyBtYXhMZW5ndGggPSAweDdGRkZGRkZGOyB9XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluS2V5KCksIG1heCA9IHRoaXMubWF4S2V5KCk7XHJcbiAgICAgICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZShtaW4sIG1heCwgdHJ1ZSwgbWF4TGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgb2YgYWxsIGtleXMsIHNvcnRlZCAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmtleXNBcnJheSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSwgdGhpcy5tYXhLZXkoKSwgdHJ1ZSwgZmFsc2UsIHRoaXMsIDAsIGZ1bmN0aW9uIChrLCB2KSB7IHJlc3VsdHMucHVzaChrKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgb2YgYWxsIHZhbHVlcywgc29ydGVkIGJ5IGtleSAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnZhbHVlc0FycmF5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcm9vdC5mb3JSYW5nZSh0aGlzLm1pbktleSgpLCB0aGlzLm1heEtleSgpLCB0cnVlLCBmYWxzZSwgdGhpcywgMCwgZnVuY3Rpb24gKGssIHYpIHsgcmVzdWx0cy5wdXNoKHYpOyB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH07XHJcbiAgICAvKiogR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRyZWUncyBkYXRhIGJhc2VkIG9uIHRvQXJyYXkoKS4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KCkudG9TdHJpbmcoKTtcclxuICAgIH07XHJcbiAgICAvKiogU3RvcmVzIGEga2V5LXZhbHVlIHBhaXIgb25seSBpZiB0aGUga2V5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJlZS5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcga2V5IHdhcyBhZGRlZFxyXG4gICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXRJZk5vdFByZXNlbnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldChrZXksIHZhbHVlLCBmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQgcGFpciB3aG9zZSBrZXkgaXMgbGFyZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCBrZXkgKG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBub25lKS5cclxuICAgICAqIElmIGtleSA9PT0gdW5kZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxvd2VzdCBwYWlyLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGl0ZXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRIaWdoZXJQYWlyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXVzZWRBcnJheSA9IHJldXNlZEFycmF5IHx8IFtdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5taW5QYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dEhpZ2hlcihrZXksIHRoaXMuX2NvbXBhcmUsIGZhbHNlLCByZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQga2V5IGxhcmdlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cclxuICAgICAqICBBbHNvLCBuZXh0SGlnaGVyS2V5KHVuZGVmaW5lZCkgcmV0dXJucyB0aGUgbG93ZXN0IGtleS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRIaWdoZXJLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLm5leHRIaWdoZXJQYWlyKGtleSwgUmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBwICYmIHBbMF07XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQgcGFpciB3aG9zZSBrZXkgaXMgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IChvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZSkuXHJcbiAgICAgKiAgSWYga2V5ID09PSB1bmRlZmluZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaGlnaGVzdCBwYWlyLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqICAgICAgICBhdm9pZCBjcmVhdGluZyBhIG5ldyBhcnJheSBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcyBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0TG93ZXJQYWlyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXVzZWRBcnJheSA9IHJldXNlZEFycmF5IHx8IFtdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5tYXhQYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGtleSwgdGhpcy5fY29tcGFyZSwgZmFsc2UsIHJldXNlZEFycmF5KTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyB0aGUgbmV4dCBrZXkgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cclxuICAgICAqICBBbHNvLCBuZXh0TG93ZXJLZXkodW5kZWZpbmVkKSByZXR1cm5zIHRoZSBoaWdoZXN0IGtleS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRMb3dlcktleSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgcCA9IHRoaXMubmV4dExvd2VyUGFpcihrZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gcCAmJiBwWzBdO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cHBsaWVkIGtleSBpZiBpdCBleGlzdHNcclxuICAgICAqICBvciB0aGUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIG5leHQgbG93ZXIgcGFpciBvdGhlcndpc2UuIElmIHRoZXJlIGlzIG5vXHJcbiAgICAgKiAgbmV4dCBsb3dlciBwYWlyLCB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSByZXVzZWRBcnJheSBPcHRpb25hbCBhcnJheSB1c2VkIHJlcGVhdGVkbHkgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLCB0b1xyXG4gICAgICogICAgICAgIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IGVhY2ggdGltZSB5b3UgY2FsbCB0aGlzIG1ldGhvZC5cclxuICAgICAqICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0TG93ZXIoa2V5LCB0aGlzLl9jb21wYXJlLCB0cnVlLCByZXVzZWRBcnJheSB8fCBbXSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VwcGxpZWQga2V5IGlmIGl0IGV4aXN0c1xyXG4gICAgICogIG9yIHRoZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV4dCBsb3dlciBwYWlyIG90aGVyd2lzZS4gSWYgdGhlcmUgaXMgbm9cclxuICAgICAqICBuZXh0IGxvd2VyIHBhaXIsIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMsIHRvXHJcbiAgICAgKiAgICAgICAgYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMgbWV0aG9kLlxyXG4gICAgICogKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0SGlnaGVyKGtleSwgdGhpcy5fY29tcGFyZSwgdHJ1ZSwgcmV1c2VkQXJyYXkgfHwgW10pO1xyXG4gICAgfTtcclxuICAgIC8qKiBFZGl0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEga2V5IGluIHRoZSB0cmVlLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGtleSBleGlzdGVkLCBmYWxzZSBpZiBub3QuXHJcbiAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNoYW5nZUlmUHJlc2VudCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFJhbmdlKGtleSwga2V5LCB0cnVlLCBmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gKHsgdmFsdWU6IHZhbHVlIH0pOyB9KSAhPT0gMDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBwYWlycyBmcm9tIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2Yga2V5cywgc29ydGVkIGJ5IGtleS5cclxuICAgICAqIEVhY2ggcmV0dXJuZWQgcGFpciBpcyBhbHNvIGFuIGFycmF5OiBwYWlyWzBdIGlzIHRoZSBrZXksIHBhaXJbMV0gaXMgdGhlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIGxvdyBUaGUgZmlyc3Qga2V5IGluIHRoZSBhcnJheSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFRoaXMgbWV0aG9kIHJldHVybnMgd2hlbiBhIGtleSBsYXJnZXIgdGhhbiB0aGlzIGlzIHJlYWNoZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUhpZ2ggSWYgdGhlIGBoaWdoYCBrZXkgaXMgcHJlc2VudCwgaXRzIHBhaXIgd2lsbCBiZSBpbmNsdWRlZFxyXG4gICAgICogICAgICAgIGluIHRoZSBvdXRwdXQgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZS4gTm90ZTogaWYgdGhlXHJcbiAgICAgKiAgICAgICAgYGxvd2Aga2V5IGlzIHByZXNlbnQsIGl0IGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LlxyXG4gICAgICogQHBhcmFtIG1heExlbmd0aCBMZW5ndGggbGltaXQuIGdldFJhbmdlIHdpbGwgc3RvcCBzY2FubmluZyB0aGUgdHJlZSB3aGVuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgIHRoZSBhcnJheSByZWFjaGVzIHRoaXMgc2l6ZS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8ocmVzdWx0Lmxlbmd0aCArIGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gdm9pZCAwKSB7IG1heExlbmd0aCA9IDB4M0ZGRkZGRjsgfVxyXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcm9vdC5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBmYWxzZSwgdGhpcywgMCwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKFtrLCB2XSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmxlbmd0aCA+IG1heExlbmd0aCA/IEJyZWFrIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfTtcclxuICAgIC8qKiBBZGRzIGFsbCBwYWlycyBmcm9tIGEgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnMuXHJcbiAgICAgKiBAcGFyYW0gcGFpcnMgUGFpcnMgdG8gYWRkIHRvIHRoaXMgdHJlZS4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzLFxyXG4gICAgICogICAgICAgIGxhdGVyIHBhaXJzIGN1cnJlbnRseSBvdmVyd3JpdGUgZWFybGllciBvbmVzIChlLmcuIFtbMCwxXSxbMCw3XV1cclxuICAgICAqICAgICAgICBhc3NvY2lhdGVzIDAgd2l0aCA3LilcclxuICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgV2hldGhlciB0byBvdmVyd3JpdGUgcGFpcnMgdGhhdCBhbHJlYWR5IGV4aXN0IChpZiBmYWxzZSxcclxuICAgICAqICAgICAgICBwYWlyc1tpXSBpcyBpZ25vcmVkIHdoZW4gdGhlIGtleSBwYWlyc1tpXVswXSBhbHJlYWR5IGV4aXN0cy4pXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHBhaXJzIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhwYWlycy5sZW5ndGggKiBsb2coc2l6ZSArIHBhaXJzLmxlbmd0aCkpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXRQYWlycyA9IGZ1bmN0aW9uIChwYWlycywgb3ZlcndyaXRlKSB7XHJcbiAgICAgICAgdmFyIGFkZGVkID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXQocGFpcnNbaV1bMF0sIHBhaXJzW2ldWzFdLCBvdmVyd3JpdGUpKVxyXG4gICAgICAgICAgICAgICAgYWRkZWQrKztcclxuICAgICAgICByZXR1cm4gYWRkZWQ7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMsIGluIGFzY2VuZGluZyBvcmRlciBieSBrZXkuXHJcbiAgICAgKiBOb3RlOiB0aGUgY2FsbGJhY2sgYG9uRm91bmRgIG11c3Qgbm90IGluc2VydCBvciByZW1vdmUgaXRlbXMgaW4gdGhlXHJcbiAgICAgKiBjb2xsZWN0aW9uLiBEb2luZyBzbyBtYXkgY2F1c2UgaW5jb3JyZWN0IGRhdGEgdG8gYmUgc2VudCB0byB0aGVcclxuICAgICAqIGNhbGxiYWNrIGFmdGVyd2FyZC5cclxuICAgICAqIEBwYXJhbSBsb3cgVGhlIGZpcnN0IGtleSBzY2FubmVkIHdpbGwgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsb3dgLlxyXG4gICAgICogQHBhcmFtIGhpZ2ggU2Nhbm5pbmcgc3RvcHMgd2hlbiBhIGtleSBsYXJnZXIgdGhhbiB0aGlzIGlzIHJlYWNoZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUhpZ2ggSWYgdGhlIGBoaWdoYCBrZXkgaXMgcHJlc2VudCwgYG9uRm91bmRgIGlzIGNhbGxlZCBmb3JcclxuICAgICAqICAgICAgICB0aGF0IGZpbmFsIHBhaXIgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZS5cclxuICAgICAqIEBwYXJhbSBvbkZvdW5kIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIuIFRoaXNcclxuICAgICAqICAgICAgICBmdW5jdGlvbiBjYW4gcmV0dXJuIHticmVhazpSfSB0byBzdG9wIGVhcmx5IHdpdGggcmVzdWx0IFIuXHJcbiAgICAgKiBAcGFyYW0gaW5pdGlhbENvdW50ZXIgSW5pdGlhbCB0aGlyZCBhcmd1bWVudCBvZiBvbkZvdW5kLiBUaGlzIHZhbHVlXHJcbiAgICAgKiAgICAgICAgaW5jcmVhc2VzIGJ5IG9uZSBlYWNoIHRpbWUgYG9uRm91bmRgIGlzIGNhbGxlZC4gRGVmYXVsdDogMFxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB2YWx1ZXMgZm91bmQsIG9yIFIgaWYgdGhlIGNhbGxiYWNrIHJldHVybmVkXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgdG8gc3RvcCBlYXJseS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obnVtYmVyIG9mIGl0ZW1zIHNjYW5uZWQgKyBsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvclJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIG9uRm91bmQsIGluaXRpYWxDb3VudGVyKSB7XHJcbiAgICAgICAgdmFyIHIgPSB0aGlzLl9yb290LmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGZhbHNlLCB0aGlzLCBpbml0aWFsQ291bnRlciB8fCAwLCBvbkZvdW5kKTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09IFwibnVtYmVyXCIgPyByIDogci5icmVhaztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllcyB2YWx1ZXMgZm9yIGEgc3Vic2VxdWVuY2Ugb2Yga2V5cy5cclxuICAgICAqIE5vdGU6IHRoZSBjYWxsYmFjayBgb25Gb3VuZGAgc2hvdWxkIGlkZWFsbHkgYmUgYSBwdXJlIGZ1bmN0aW9uLlxyXG4gICAgICogICBTcGVjZmljYWxseSwgaXQgbXVzdCBub3QgaW5zZXJ0IGl0ZW1zLCBjYWxsIGNsb25lKCksIG9yIGNoYW5nZVxyXG4gICAgICogICB0aGUgY29sbGVjdGlvbiBleGNlcHQgdmlhIHJldHVybiB2YWx1ZTsgb3V0LW9mLWJhbmQgZWRpdGluZyBtYXlcclxuICAgICAqICAgY2F1c2UgYW4gZXhjZXB0aW9uIG9yIG1heSBjYXVzZSBpbmNvcnJlY3QgZGF0YSB0byBiZSBzZW50IHRvXHJcbiAgICAgKiAgIHRoZSBjYWxsYmFjayAoZHVwbGljYXRlIG9yIG1pc3NlZCBpdGVtcykuIEl0IG11c3Qgbm90IGNhdXNlIGFcclxuICAgICAqICAgY2xvbmUoKSBvZiB0aGUgY29sbGVjdGlvbiwgb3RoZXJ3aXNlIHRoZSBjbG9uZSBjb3VsZCBiZSBtb2RpZmllZFxyXG4gICAgICogICBieSBjaGFuZ2VzIHJlcXVlc3RlZCBieSB0aGUgY2FsbGJhY2suXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIElmIHRoZSBgaGlnaGAga2V5IGlzIHByZXNlbnQsIGBvbkZvdW5kYCBpcyBjYWxsZWQgZm9yXHJcbiAgICAgKiAgICAgICAgdGhhdCBmaW5hbCBwYWlyIGlmIGFuZCBvbmx5IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUuXHJcbiAgICAgKiBAcGFyYW0gb25Gb3VuZCBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLiBUaGlzXHJcbiAgICAgKiAgICAgICAgZnVuY3Rpb24gY2FuIHJldHVybiBge3ZhbHVlOnZ9YCB0byBjaGFuZ2UgdGhlIHZhbHVlIGFzc29jaWF0ZWRcclxuICAgICAqICAgICAgICB3aXRoIHRoZSBjdXJyZW50IGtleSwgYHtkZWxldGU6dHJ1ZX1gIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBwYWlyLFxyXG4gICAgICogICAgICAgIGB7YnJlYWs6Un1gIHRvIHN0b3AgZWFybHkgd2l0aCByZXN1bHQgUiwgb3IgaXQgY2FuIHJldHVybiBub3RoaW5nXHJcbiAgICAgKiAgICAgICAgKHVuZGVmaW5lZCBvciB7fSkgdG8gY2F1c2Ugbm8gZWZmZWN0IGFuZCBjb250aW51ZSBpdGVyYXRpbmcuXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgY2FuIGJlIGNvbWJpbmVkIHdpdGggb25lIG9mIHRoZSBvdGhlciB0d28gY29tbWFuZHMuXHJcbiAgICAgKiAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50IGBjb3VudGVyYCBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGl0ZXJhdGVkXHJcbiAgICAgKiAgICAgICAgcHJldmlvdXNseTsgaXQgZXF1YWxzIDAgd2hlbiBgb25Gb3VuZGAgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lLlxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB2YWx1ZXMgc2Nhbm5lZCwgb3IgUiBpZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWRcclxuICAgICAqICAgICAgICBge2JyZWFrOlJ9YCB0byBzdG9wIGVhcmx5LlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiAgIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhudW1iZXIgb2YgaXRlbXMgc2Nhbm5lZCArIGxvZyBzaXplKVxyXG4gICAgICogICBOb3RlOiBpZiB0aGUgdHJlZSBoYXMgYmVlbiBjbG9uZWQgd2l0aCBjbG9uZSgpLCBhbnkgc2hhcmVkXHJcbiAgICAgKiAgIG5vZGVzIGFyZSBjb3BpZWQgYmVmb3JlIGBvbkZvdW5kYCBpcyBjYWxsZWQuIFRoaXMgdGFrZXMgTyhuKSB0aW1lXHJcbiAgICAgKiAgIHdoZXJlIG4gaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBhbW91bnQgb2Ygc2hhcmVkIGRhdGEgc2Nhbm5lZC5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmVkaXRSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHZhciByb290ID0gdGhpcy5fcm9vdDtcclxuICAgICAgICBpZiAocm9vdC5pc1NoYXJlZClcclxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3QgPSByb290LmNsb25lKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHIgPSByb290LmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIHRydWUsIHRoaXMsIGluaXRpYWxDb3VudGVyIHx8IDAsIG9uRm91bmQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09IFwibnVtYmVyXCIgPyByIDogci5icmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHZhciBpc1NoYXJlZCA9IHZvaWQgMDtcclxuICAgICAgICAgICAgd2hpbGUgKHJvb3Qua2V5cy5sZW5ndGggPD0gMSAmJiAhcm9vdC5pc0xlYWYpIHtcclxuICAgICAgICAgICAgICAgIGlzU2hhcmVkIHx8IChpc1NoYXJlZCA9IHJvb3QuaXNTaGFyZWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3QgPSByb290LmtleXMubGVuZ3RoID09PSAwID8gRW1wdHlMZWFmIDpcclxuICAgICAgICAgICAgICAgICAgICByb290LmNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElmIGFueSBhbmNlc3RvciBvZiB0aGUgbmV3IHJvb3Qgd2FzIHNoYXJlZCwgdGhlIG5ldyByb290IG11c3QgYWxzbyBiZSBzaGFyZWRcclxuICAgICAgICAgICAgaWYgKGlzU2hhcmVkKSB7XHJcbiAgICAgICAgICAgICAgICByb290LmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKiogU2FtZSBhcyBgZWRpdFJhbmdlYCBleGNlcHQgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBhbGwgcGFpcnMuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZWRpdEFsbCA9IGZ1bmN0aW9uIChvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZSh0aGlzLm1pbktleSgpLCB0aGlzLm1heEtleSgpLCB0cnVlLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgcmFuZ2Ugb2Yga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIEIrIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBgaGlnaGAga2V5LCBpZiBwcmVzZW50LCBpcyBkZWxldGVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgdGhhdCB3ZXJlIGRlbGV0ZWQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplICsgbnVtYmVyIG9mIGl0ZW1zIGRlbGV0ZWQpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5kZWxldGVSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIERlbGV0ZVJhbmdlKTtcclxuICAgIH07XHJcbiAgICAvKiogRGVsZXRlcyBhIHNlcmllcyBvZiBrZXlzIGZyb20gdGhlIGNvbGxlY3Rpb24uICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlS2V5cyA9IGZ1bmN0aW9uIChrZXlzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlKGtleXNbaV0pKVxyXG4gICAgICAgICAgICAgICAgcisrO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCVHJlZS5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcclxuICAgICAgICAvKiogR2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSB0cmVlOiB0aGUgbnVtYmVyIG9mIGludGVybmFsIG5vZGVzIGJldHdlZW4gdGhlXHJcbiAgICAgICAgICogIEJUcmVlIG9iamVjdCBhbmQgaXRzIGxlYWYgbm9kZXMgKHplcm8gaWYgdGhlcmUgYXJlIG5vIGludGVybmFsIG5vZGVzKS4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9yb290O1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gLTE7XHJcbiAgICAgICAgICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQrKztcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmlzTGVhZiA/IHVuZGVmaW5lZCA6IG5vZGUuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogTWFrZXMgdGhlIG9iamVjdCByZWFkLW9ubHkgdG8gZW5zdXJlIGl0IGlzIG5vdCBhY2NpZGVudGFsbHkgbW9kaWZpZWQuXHJcbiAgICAgKiAgRnJlZXppbmcgZG9lcyBub3QgaGF2ZSB0byBiZSBwZXJtYW5lbnQ7IHVuZnJlZXplKCkgcmV2ZXJzZXMgdGhlIGVmZmVjdC5cclxuICAgICAqICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSByZXBsYWNpbmcgbXV0YXRvciBmdW5jdGlvbnMgd2l0aCBhIGZ1bmN0aW9uXHJcbiAgICAgKiAgdGhhdCB0aHJvd3MgYW4gRXJyb3IuIENvbXBhcmVkIHRvIHVzaW5nIGEgcHJvcGVydHkgKGUuZy4gdGhpcy5pc0Zyb3plbilcclxuICAgICAqICB0aGlzIGltcGxlbWVudGF0aW9uIGdpdmVzIGJldHRlciBwZXJmb3JtYW5jZSBpbiBub24tZnJvemVuIEJUcmVlcy5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZyZWV6ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdCA9IHRoaXM7XHJcbiAgICAgICAgLy8gTm90ZTogYWxsIG90aGVyIG11dGF0b3JzIHVsdGltYXRlbHkgY2FsbCBzZXQoKSBvciBlZGl0UmFuZ2UoKSBcclxuICAgICAgICAvLyAgICAgICBzbyB3ZSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIHRob3NlIG90aGVycy5cclxuICAgICAgICB0LmNsZWFyID0gdC5zZXQgPSB0LmVkaXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGVkIHRvIG1vZGlmeSBhIGZyb3plbiBCVHJlZVwiKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIC8qKiBFbnN1cmVzIG11dGF0aW9ucyBhcmUgYWxsb3dlZCwgcmV2ZXJzaW5nIHRoZSBlZmZlY3Qgb2YgZnJlZXplKCkuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudW5mcmVlemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcIlRoZSBvcGVyYW5kIG9mIGEgJ2RlbGV0ZScgb3BlcmF0b3IgbXVzdCBiZSBvcHRpb25hbC5cIlxyXG4gICAgICAgIC8vICAgICAgICAgICAgKHdyb25nOiBkZWxldGUgZG9lcyBub3QgYWZmZWN0IHRoZSBwcm90b3R5cGUuKVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNsZWFyO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBkZWxldGUgdGhpcy5zZXQ7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSYW5nZTtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImlzRnJvemVuXCIsIHtcclxuICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0cmVlIGFwcGVhcnMgdG8gYmUgZnJvemVuLiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgnZWRpdFJhbmdlJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqIFNjYW5zIHRoZSB0cmVlIGZvciBzaWducyBvZiBzZXJpb3VzIGJ1Z3MgKGUuZy4gdGhpcy5zaXplIGRvZXNuJ3QgbWF0Y2hcclxuICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMsIGludGVybmFsIG5vZGVzIG5vdCBjYWNoaW5nIG1heCBlbGVtZW50IHByb3Blcmx5Li4uKVxyXG4gICAgICogIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhudW1iZXIgb2Ygbm9kZXMpLCBpLmUuIE8oc2l6ZSkuIFRoaXMgbWV0aG9kXHJcbiAgICAgKiAgc2tpcHMgdGhlIG1vc3QgZXhwZW5zaXZlIHRlc3QgLSB3aGV0aGVyIGFsbCBrZXlzIGFyZSBzb3J0ZWQgLSBidXQgaXRcclxuICAgICAqICBkb2VzIGNoZWNrIHRoYXQgbWF4S2V5KCkgb2YgdGhlIGNoaWxkcmVuIG9mIGludGVybmFsIG5vZGVzIGFyZSBzb3J0ZWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3Jvb3QuY2hlY2tWYWxpZCgwLCB0aGlzLCAwKTtcclxuICAgICAgICBjaGVjayhzaXplID09PSB0aGlzLnNpemUsIFwic2l6ZSBtaXNtYXRjaDogY291bnRlZCBcIiwgc2l6ZSwgXCJidXQgc3RvcmVkXCIsIHRoaXMuc2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJUcmVlO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBCVHJlZTtcclxuLyoqIEEgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBzaW1wbHkgcmV0dXJucyBpdHMgYXJndW1lbnQsIHR5cGVkIGFzXHJcbiAqICBgSVNvcnRlZFNldDxLPmAgaWYgdGhlIEJUcmVlIGltcGxlbWVudHMgaXQsIGFzIGl0IGRvZXMgaWYgYFYgZXh0ZW5kcyB1bmRlZmluZWRgLlxyXG4gKiAgSWYgYFZgIGNhbm5vdCBiZSBgdW5kZWZpbmVkYCwgaXQgcmV0dXJucyBgdW5rbm93bmAgaW5zdGVhZC4gT3IgYXQgbGVhc3QsIHRoYXRcclxuICogIHdhcyB0aGUgaW50ZW50aW9uLCBidXQgVHlwZVNjcmlwdCBpcyBhY3Rpbmcgd2VpcmQgYW5kIG1heSByZXR1cm4gYElTb3J0ZWRTZXQ8Sz5gXHJcbiAqICBldmVuIGlmIGBWYCBjYW4ndCBiZSBgdW5kZWZpbmVkYCAoZGlzY3Vzc2lvbjogYnRyZWUtdHlwZXNjcmlwdCBpc3N1ZSAjMTQpICovXHJcbmZ1bmN0aW9uIGFzU2V0KGJ0cmVlKSB7XHJcbiAgICByZXR1cm4gYnRyZWU7XHJcbn1cclxuZXhwb3J0cy5hc1NldCA9IGFzU2V0O1xyXG5pZiAoU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcikgLy8gaXRlcmF0b3IgaXMgZXF1aXZhbGVudCB0byBlbnRyaWVzKClcclxuICAgIEJUcmVlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gQlRyZWUucHJvdG90eXBlLmVudHJpZXM7XHJcbkJUcmVlLnByb3RvdHlwZS53aGVyZSA9IEJUcmVlLnByb3RvdHlwZS5maWx0ZXI7XHJcbkJUcmVlLnByb3RvdHlwZS5zZXRSYW5nZSA9IEJUcmVlLnByb3RvdHlwZS5zZXRQYWlycztcclxuQlRyZWUucHJvdG90eXBlLmFkZCA9IEJUcmVlLnByb3RvdHlwZS5zZXQ7IC8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSVNldFNpbms8Sz5cclxuZnVuY3Rpb24gaXRlcmF0b3IobmV4dCkge1xyXG4gICAgaWYgKG5leHQgPT09IHZvaWQgMCkgeyBuZXh0ID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7IH0pOyB9XHJcbiAgICB2YXIgcmVzdWx0ID0geyBuZXh0OiBuZXh0IH07XHJcbiAgICBpZiAoU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcilcclxuICAgICAgICByZXN1bHRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbi8qKiBMZWFmIG5vZGUgLyBiYXNlIGNsYXNzLiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxudmFyIEJOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQk5vZGUoa2V5cywgdmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGtleXMgPT09IHZvaWQgMCkgeyBrZXlzID0gW107IH1cclxuICAgICAgICB0aGlzLmtleXMgPSBrZXlzO1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzIHx8IHVuZGVmVmFscztcclxuICAgICAgICB0aGlzLmlzU2hhcmVkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJOb2RlLnByb3RvdHlwZSwgXCJpc0xlYWZcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIFNoYXJlZCBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLm1heEtleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXlzW3RoaXMua2V5cy5sZW5ndGggLSAxXTtcclxuICAgIH07XHJcbiAgICAvLyBJZiBrZXkgbm90IGZvdW5kLCByZXR1cm5zIGleZmFpbFhvciB3aGVyZSBpIGlzIHRoZSBpbnNlcnRpb24gaW5kZXguXHJcbiAgICAvLyBDYWxsZXJzIHRoYXQgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlIHdhcyBhIG1hdGNoIHdpbGwgc2V0IGZhaWxYb3I9MC5cclxuICAgIEJOb2RlLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKGtleSwgZmFpbFhvciwgY21wKSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcbiAgICAgICAgdmFyIGxvID0gMCwgaGkgPSBrZXlzLmxlbmd0aCwgbWlkID0gaGkgPj4gMTtcclxuICAgICAgICB3aGlsZSAobG8gPCBoaSkge1xyXG4gICAgICAgICAgICB2YXIgYyA9IGNtcChrZXlzW21pZF0sIGtleSk7XHJcbiAgICAgICAgICAgIGlmIChjIDwgMClcclxuICAgICAgICAgICAgICAgIGxvID0gbWlkICsgMTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoYyA+IDApIC8vIGtleSA8IGtleXNbbWlkXVxyXG4gICAgICAgICAgICAgICAgaGkgPSBtaWQ7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGMgaXMgTmFOIG9yIG90aGVyd2lzZSBpbnZhbGlkXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBrZXkpIC8vIGF0IGxlYXN0IHRoZSBzZWFyY2gga2V5IGlzIG5vdCBOYU5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQlRyZWU6IE5hTiB3YXMgdXNlZCBhcyBhIGtleVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgPj4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1pZCBeIGZhaWxYb3I7XHJcbiAgICAgICAgLy8gVW5yb2xsZWQgdmVyc2lvbjogYmVuY2htYXJrcyBzaG93IHNhbWUgc3BlZWQsIG5vdCB3b3J0aCB1c2luZ1xyXG4gICAgICAgIC8qdmFyIGkgPSAxLCBjOiBudW1iZXIgPSAwLCBzdW0gPSAwO1xyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICBpID0gMztcclxuICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSA4KSB7XHJcbiAgICAgICAgICAgIGkgPSA3O1xyXG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gMTYpIHtcclxuICAgICAgICAgICAgICBpID0gMTU7XHJcbiAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID49IDMyKSB7XHJcbiAgICAgICAgICAgICAgICBpID0gMzE7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gNjQpIHtcclxuICAgICAgICAgICAgICAgICAgaSA9IDEyNztcclxuICAgICAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gNjQgOiAtNjQ7XHJcbiAgICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAzMiA6IC0zMjtcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAxNiA6IC0xNjtcclxuICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyA4IDogLTg7XHJcbiAgICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gNCA6IC00O1xyXG4gICAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkgKz0gKGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDEpIDwgMCA/IDIgOiAtMjtcclxuICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAxIDogLTE7XHJcbiAgICAgICAgYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMTtcclxuICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICBpZiAoYyA8IDApIHtcclxuICAgICAgICAgICsraTtcclxuICAgICAgICAgIGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDE7XHJcbiAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN1bSAhPT0gc3VtKSB7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSBrZXkpIC8vIGF0IGxlYXN0IHRoZSBzZWFyY2gga2V5IGlzIG5vdCBOYU5cclxuICAgICAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoIF4gZmFpbFhvcjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQlRyZWU6IE5hTiB3YXMgdXNlZCBhcyBhIGtleVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGMgPT09IDAgPyBpIDogaSBeIGZhaWxYb3I7Ki9cclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTGVhZiBOb2RlOiBtaXNjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5c1swXTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWluUGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIGlmICh0aGlzLmtleXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzWzBdO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgcmV0dXJuIHJldXNlZEFycmF5O1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5tYXhQYWlyID0gZnVuY3Rpb24gKHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IHRoaXMua2V5cy5sZW5ndGggLSAxO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzW2xhc3RJbmRleF07XHJcbiAgICAgICAgcmV1c2VkQXJyYXlbMV0gPSB0aGlzLnZhbHVlc1tsYXN0SW5kZXhdO1xyXG4gICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlKHRoaXMua2V5cy5zbGljZSgwKSwgdiA9PT0gdW5kZWZWYWxzID8gdiA6IHYuc2xpY2UoMCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5ncmVlZHlDbG9uZSA9IGZ1bmN0aW9uIChmb3JjZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzU2hhcmVkICYmICFmb3JjZSA/IHRoaXMgOiB0aGlzLmNsb25lKCk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlZSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIHRyZWUuX2NvbXBhcmUpO1xyXG4gICAgICAgIHJldHVybiBpIDwgMCA/IGRlZmF1bHRWYWx1ZSA6IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAtMSwgY29tcGFyZSk7XHJcbiAgICAgICAgdmFyIGluZGV4T3JMb3dlciA9IGkgPCAwID8gfmkgLSAxIDogKGluY2x1c2l2ZSA/IGkgOiBpIC0gMSk7XHJcbiAgICAgICAgaWYgKGluZGV4T3JMb3dlciA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbaW5kZXhPckxvd2VyXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldXNlZEFycmF5O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIGNvbXBhcmUpO1xyXG4gICAgICAgIHZhciBpbmRleE9yTG93ZXIgPSBpIDwgMCA/IH5pIDogKGluY2x1c2l2ZSA/IGkgOiBpICsgMSk7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcbiAgICAgICAgaWYgKGluZGV4T3JMb3dlciA8IGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0ga2V5c1tpbmRleE9yTG93ZXJdO1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVsxXSA9IHRoaXMudmFsdWVzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uIChkZXB0aCwgdHJlZSwgYmFzZUluZGV4KSB7XHJcbiAgICAgICAgdmFyIGtMID0gdGhpcy5rZXlzLmxlbmd0aCwgdkwgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcbiAgICAgICAgY2hlY2sodGhpcy52YWx1ZXMgPT09IHVuZGVmVmFscyA/IGtMIDw9IHZMIDoga0wgPT09IHZMLCBcImtleXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaDogZGVwdGhcIiwgZGVwdGgsIFwid2l0aCBsZW5ndGhzXCIsIGtMLCB2TCwgXCJhbmQgYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgY2hlY2sgZm9yIFwibm9kZSB0b28gc21hbGxcIiBiZWNhdXNlIHNvbWV0aW1lcyBhIG5vZGVcclxuICAgICAgICAvLyBjYW4gbGVnaXRpbWF0ZWx5IGhhdmUgc2l6ZSAxLiBUaGlzIG9jY3VycyBpZiB0aGVyZSBpcyBhIGJhdGNoIFxyXG4gICAgICAgIC8vIGRlbGV0aW9uLCBsZWF2aW5nIGEgbm9kZSBvZiBzaXplIDEsIGFuZCB0aGUgc2libGluZ3MgYXJlIGZ1bGwgc29cclxuICAgICAgICAvLyBpdCBjYW4ndCBiZSBtZXJnZWQgd2l0aCBhZGphY2VudCBub2Rlcy4gSG93ZXZlciwgdGhlIHBhcmVudCB3aWxsXHJcbiAgICAgICAgLy8gdmVyaWZ5IHRoYXQgdGhlIGF2ZXJhZ2Ugbm9kZSBzaXplIGlzIGF0IGxlYXN0IGhhbGYgb2YgdGhlIG1heGltdW0uXHJcbiAgICAgICAgY2hlY2soZGVwdGggPT0gMCB8fCBrTCA+IDAsIFwiZW1wdHkgbGVhZiBhdCBkZXB0aFwiLCBkZXB0aCwgXCJhbmQgYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIGtMO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBMZWFmIE5vZGU6IHNldCAmIG5vZGUgc3BsaXR0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUsIHRyZWUpIHtcclxuICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXhPZihrZXksIC0xLCB0cmVlLl9jb21wYXJlKTtcclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgLy8ga2V5IGRvZXMgbm90IGV4aXN0IHlldFxyXG4gICAgICAgICAgICBpID0gfmk7XHJcbiAgICAgICAgICAgIHRyZWUuX3NpemUrKztcclxuICAgICAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPCB0cmVlLl9tYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0SW5MZWFmKGksIGtleSwgdmFsdWUsIHRyZWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBsZWFmIG5vZGUgaXMgZnVsbCBhbmQgbXVzdCBzcGxpdFxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1JpZ2h0U2libGluZyA9IHRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSwgdGFyZ2V0ID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmIChpID4gdGhpcy5rZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGkgLT0gdGhpcy5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0SW5MZWFmKGksIGtleSwgdmFsdWUsIHRyZWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1JpZ2h0U2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gS2V5IGFscmVhZHkgZXhpc3RzXHJcbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB1c3VhbGx5IHRoaXMgaXMgYSBuby1vcCwgYnV0IHNvbWUgdXNlcnMgbWF5IHdpc2ggdG8gZWRpdCB0aGUga2V5XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXNbaV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnJlaWZ5VmFsdWVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmluc2VydEluTGVhZiA9IGZ1bmN0aW9uIChpLCBrZXksIHZhbHVlLCB0cmVlKSB7XHJcbiAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpLCAwLCBrZXkpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIHdoaWxlICh1bmRlZlZhbHMubGVuZ3RoIDwgdHJlZS5fbWF4Tm9kZVNpemUpXHJcbiAgICAgICAgICAgICAgICB1bmRlZlZhbHMucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHVuZGVmVmFscy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKGksIDAsIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUudGFrZUZyb21SaWdodCA9IGZ1bmN0aW9uIChyaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB2YXIgdiA9IHRoaXMudmFsdWVzO1xyXG4gICAgICAgIGlmIChyaHMudmFsdWVzID09PSB1bmRlZlZhbHMpIHtcclxuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgICAgIHYucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdiA9IHRoaXMucmVpZnlWYWx1ZXMoKTtcclxuICAgICAgICAgICAgdi5wdXNoKHJocy52YWx1ZXMuc2hpZnQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua2V5cy5wdXNoKHJocy5rZXlzLnNoaWZ0KCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS50YWtlRnJvbUxlZnQgPSBmdW5jdGlvbiAobGhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICBpZiAobGhzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICB2LnVuc2hpZnQodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHYgPSB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgIHYudW5zaGlmdChsaHMudmFsdWVzLnBvcCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rZXlzLnVuc2hpZnQobGhzLmtleXMucG9wKCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICB2YXIgaGFsZiA9IHRoaXMua2V5cy5sZW5ndGggPj4gMSwga2V5cyA9IHRoaXMua2V5cy5zcGxpY2UoaGFsZik7XHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMgPyB1bmRlZlZhbHMgOiB0aGlzLnZhbHVlcy5zcGxpY2UoaGFsZik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCTm9kZShrZXlzLCB2YWx1ZXMpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBMZWFmIE5vZGU6IHNjYW5uaW5nICYgZGVsZXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmZvclJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCkge1xyXG4gICAgICAgIHZhciBjbXAgPSB0cmVlLl9jb21wYXJlO1xyXG4gICAgICAgIHZhciBpTG93LCBpSGlnaDtcclxuICAgICAgICBpZiAoaGlnaCA9PT0gbG93KSB7XHJcbiAgICAgICAgICAgIGlmICghaW5jbHVkZUhpZ2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICAgICAgICAgIGlIaWdoID0gKGlMb3cgPSB0aGlzLmluZGV4T2YobG93LCAtMSwgY21wKSkgKyAxO1xyXG4gICAgICAgICAgICBpZiAoaUxvdyA8IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgMCwgY21wKTtcclxuICAgICAgICAgICAgaUhpZ2ggPSB0aGlzLmluZGV4T2YoaGlnaCwgLTEsIGNtcCk7XHJcbiAgICAgICAgICAgIGlmIChpSGlnaCA8IDApXHJcbiAgICAgICAgICAgICAgICBpSGlnaCA9IH5pSGlnaDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5jbHVkZUhpZ2ggPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICBpSGlnaCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cywgdmFsdWVzID0gdGhpcy52YWx1ZXM7XHJcbiAgICAgICAgaWYgKG9uRm91bmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gaUxvdzsgaSA8IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9uRm91bmQoa2V5LCB2YWx1ZXNbaV0sIGNvdW50KyspO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGtleXNbaV0gfHwgdGhpcy5pc1NoYXJlZCA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJUcmVlIGlsbGVnYWxseSBjaGFuZ2VkIG9yIGNsb25lZCBpbiBlZGl0UmFuZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGVsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZS5fc2l6ZS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaUhpZ2gtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpXSA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmJyZWFrICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjb3VudCArPSBpSGlnaCAtIGlMb3c7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgfTtcclxuICAgIC8qKiBBZGRzIGVudGlyZSBjb250ZW50cyBvZiByaWdodC1oYW5kIHNpYmxpbmcgKHJocyBpcyBsZWZ0IHVuY2hhbmdlZCkgKi9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5tZXJnZVNpYmxpbmcgPSBmdW5jdGlvbiAocmhzLCBfKSB7XHJcbiAgICAgICAgdGhpcy5rZXlzLnB1c2guYXBwbHkodGhpcy5rZXlzLCByaHMua2V5cyk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMpIHtcclxuICAgICAgICAgICAgaWYgKHJocy52YWx1ZXMgPT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaC5hcHBseSh0aGlzLnZhbHVlcywgcmhzLnJlaWZ5VmFsdWVzKCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCTm9kZTtcclxufSgpKTtcclxuLyoqIEludGVybmFsIG5vZGUgKG5vbi1sZWFmIG5vZGUpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG52YXIgQk5vZGVJbnRlcm5hbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhCTm9kZUludGVybmFsLCBfc3VwZXIpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGRvZXMgbm90IG1hcmsgYGNoaWxkcmVuYCBhcyBzaGFyZWQsIHNvIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyXHJcbiAgICAgKiB0byBlbnN1cmUgY2hpbGRyZW4gYXJlIGVpdGhlciBtYXJrZWQgc2hhcmVkLCBvciBhcmVuJ3QgaW5jbHVkZWQgaW4gYW5vdGhlciB0cmVlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCTm9kZUludGVybmFsKGNoaWxkcmVuLCBrZXlzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAga2V5cyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAga2V5c1tpXSA9IGNoaWxkcmVuW2ldLm1heEtleSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGtleXMpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLnNsaWNlKDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlSW50ZXJuYWwoY2hpbGRyZW4sIHRoaXMua2V5cy5zbGljZSgwKSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1NoYXJlZCAmJiAhZm9yY2UpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHZhciBudSA9IG5ldyBCTm9kZUludGVybmFsKHRoaXMuY2hpbGRyZW4uc2xpY2UoMCksIHRoaXMua2V5cy5zbGljZSgwKSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudS5jaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgbnUuY2hpbGRyZW5baV0gPSBudS5jaGlsZHJlbltpXS5ncmVlZHlDbG9uZShmb3JjZSk7XHJcbiAgICAgICAgcmV0dXJuIG51O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLm1pbktleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXS5taW5LZXkoKTtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5taW5QYWlyID0gZnVuY3Rpb24gKHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUubWF4UGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV0ubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSwgZGVmYXVsdFZhbHVlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCB0cmVlLl9jb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBpIDwgY2hpbGRyZW4ubGVuZ3RoID8gY2hpbGRyZW5baV0uZ2V0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVlKSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCBjb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIGlmIChpID49IGNoaWxkcmVuLmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmdldFBhaXJPck5leHRMb3dlcihrZXksIGNvbXBhcmUsIGluY2x1c2l2ZSwgcmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baSAtIDFdLm1heFBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCBjb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLCBsZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjaGlsZHJlbltpXS5nZXRQYWlyT3JOZXh0SGlnaGVyKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkICYmIGkgPCBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpICsgMV0ubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uIChkZXB0aCwgdHJlZSwgYmFzZUluZGV4KSB7XHJcbiAgICAgICAgdmFyIGtMID0gdGhpcy5rZXlzLmxlbmd0aCwgY0wgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBjaGVjayhrTCA9PT0gY0wsIFwia2V5cy9jaGlsZHJlbiBsZW5ndGggbWlzbWF0Y2g6IGRlcHRoXCIsIGRlcHRoLCBcImxlbmd0aHNcIiwga0wsIGNMLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIGNoZWNrKGtMID4gMSB8fCBkZXB0aCA+IDAsIFwiaW50ZXJuYWwgbm9kZSBoYXMgbGVuZ3RoXCIsIGtMLCBcImF0IGRlcHRoXCIsIGRlcHRoLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIHZhciBzaXplID0gMCwgYyA9IHRoaXMuY2hpbGRyZW4sIGsgPSB0aGlzLmtleXMsIGNoaWxkU2l6ZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjTDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNpemUgKz0gY1tpXS5jaGVja1ZhbGlkKGRlcHRoICsgMSwgdHJlZSwgYmFzZUluZGV4ICsgc2l6ZSk7XHJcbiAgICAgICAgICAgIGNoaWxkU2l6ZSArPSBjW2ldLmtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjaGVjayhzaXplID49IGNoaWxkU2l6ZSwgXCJ3dGZcIiwgYmFzZUluZGV4KTsgLy8gbm8gd2F5IHRoaXMgd2lsbCBldmVyIGZhaWxcclxuICAgICAgICAgICAgY2hlY2soaSA9PT0gMCB8fCBjW2kgLSAxXS5jb25zdHJ1Y3RvciA9PT0gY1tpXS5jb25zdHJ1Y3RvciwgXCJ0eXBlIG1pc21hdGNoLCBiYXNlSW5kZXg6XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChjW2ldLm1heEtleSgpICE9IGtbaV0pXHJcbiAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJrZXlzW1wiLCBpLCBcIl0gPVwiLCBrW2ldLCBcImlzIHdyb25nLCBzaG91bGQgYmUgXCIsIGNbaV0ubWF4S2V5KCksIFwiYXQgZGVwdGhcIiwgZGVwdGgsIFwiYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgICAgIGlmICghKGkgPT09IDAgfHwgdHJlZS5fY29tcGFyZShrW2kgLSAxXSwga1tpXSkgPCAwKSlcclxuICAgICAgICAgICAgICAgIGNoZWNrKGZhbHNlLCBcInNvcnQgdmlvbGF0aW9uIGF0IGRlcHRoXCIsIGRlcHRoLCBcImluZGV4XCIsIGksIFwia2V5c1wiLCBrW2kgLSAxXSwga1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDIwMjAvMDg6IEJUcmVlIGRvZXNuJ3QgYWx3YXlzIGF2b2lkIGdyb3NzbHkgdW5kZXJzaXplZCBub2RlcyxcclxuICAgICAgICAvLyBidXQgQUZBSUsgc3VjaCBub2RlcyBhcmUgcHJldHR5IGhhcm1sZXNzLCBzbyBhY2NlcHQgdGhlbS5cclxuICAgICAgICB2YXIgdG9vZmV3ID0gY2hpbGRTaXplID09PSAwOyAvLyBjaGlsZFNpemUgPCAodHJlZS5tYXhOb2RlU2l6ZSA+PiAxKSpjTDtcclxuICAgICAgICBpZiAodG9vZmV3IHx8IGNoaWxkU2l6ZSA+IHRyZWUubWF4Tm9kZVNpemUgKiBjTClcclxuICAgICAgICAgICAgY2hlY2soZmFsc2UsIHRvb2ZldyA/IFwidG9vIGZld1wiIDogXCJ0b28gbWFueVwiLCBcImNoaWxkcmVuIChcIiwgY2hpbGRTaXplLCBzaXplLCBcIikgYXQgZGVwdGhcIiwgZGVwdGgsIFwibWF4Tm9kZVNpemU6XCIsIHRyZWUubWF4Tm9kZVNpemUsIFwiY2hpbGRyZW4ubGVuZ3RoOlwiLCBjTCwgXCJiYXNlSW5kZXg6XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHNpemU7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEludGVybmFsIE5vZGU6IHNldCAmIG5vZGUgc3BsaXR0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGMgPSB0aGlzLmNoaWxkcmVuLCBtYXggPSB0cmVlLl9tYXhOb2RlU2l6ZSwgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIgaSA9IE1hdGgubWluKHRoaXMuaW5kZXhPZihrZXksIDAsIGNtcCksIGMubGVuZ3RoIC0gMSksIGNoaWxkID0gY1tpXTtcclxuICAgICAgICBpZiAoY2hpbGQuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgIGNbaV0gPSBjaGlsZCA9IGNoaWxkLmNsb25lKCk7XHJcbiAgICAgICAgaWYgKGNoaWxkLmtleXMubGVuZ3RoID49IG1heCkge1xyXG4gICAgICAgICAgICAvLyBjaGlsZCBpcyBmdWxsOyBpbnNlcnRpbmcgYW55dGhpbmcgZWxzZSB3aWxsIGNhdXNlIGEgc3BsaXQuXHJcbiAgICAgICAgICAgIC8vIFNoaWZ0aW5nIGFuIGl0ZW0gdG8gdGhlIGxlZnQgb3IgcmlnaHQgc2libGluZyBtYXkgYXZvaWQgYSBzcGxpdC5cclxuICAgICAgICAgICAgLy8gV2UgY2FuIGRvIGEgc2hpZnQgaWYgdGhlIGFkamFjZW50IG5vZGUgaXMgbm90IGZ1bGwgYW5kIGlmIHRoZVxyXG4gICAgICAgICAgICAvLyBjdXJyZW50IGtleSBjYW4gc3RpbGwgYmUgcGxhY2VkIGluIHRoZSBzYW1lIG5vZGUgYWZ0ZXIgdGhlIHNoaWZ0LlxyXG4gICAgICAgICAgICB2YXIgb3RoZXI7XHJcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiAob3RoZXIgPSBjW2kgLSAxXSkua2V5cy5sZW5ndGggPCBtYXggJiYgY21wKGNoaWxkLmtleXNbMF0sIGtleSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXIuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY1tpIC0gMV0gPSBvdGhlciA9IG90aGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBvdGhlci50YWtlRnJvbVJpZ2h0KGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5c1tpIC0gMV0gPSBvdGhlci5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgob3RoZXIgPSBjW2kgKyAxXSkgIT09IHVuZGVmaW5lZCAmJiBvdGhlci5rZXlzLmxlbmd0aCA8IG1heCAmJiBjbXAoY2hpbGQubWF4S2V5KCksIGtleSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXIuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY1tpICsgMV0gPSBvdGhlciA9IG90aGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBvdGhlci50YWtlRnJvbUxlZnQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0gY1tpXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGQuc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSwgdHJlZSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmtleXNbaV0gPSBjaGlsZC5tYXhLZXkoKTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAvLyBUaGUgY2hpbGQgaGFzIHNwbGl0IGFuZCBgcmVzdWx0YCBpcyBhIG5ldyByaWdodCBjaGlsZC4uLiBkb2VzIGl0IGZpdD9cclxuICAgICAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA8IG1heCkgeyAvLyB5ZXNcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnQoaSArIDEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHsgLy8gbm8sIHdlIG11c3Qgc3BsaXQgYWxzb1xyXG4gICAgICAgICAgICB2YXIgbmV3UmlnaHRTaWJsaW5nID0gdGhpcy5zcGxpdE9mZlJpZ2h0U2lkZSgpLCB0YXJnZXQgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAoY21wKHJlc3VsdC5tYXhLZXkoKSwgdGhpcy5tYXhLZXkoKSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBpIC09IHRoaXMua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0Lmluc2VydChpICsgMSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld1JpZ2h0U2libGluZztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnRzIGBjaGlsZGAgYXQgaW5kZXggYGlgLlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBtYXJrIGBjaGlsZGAgYXMgc2hhcmVkLCBzbyBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlclxyXG4gICAgICogdG8gZW5zdXJlIHRoYXQgZWl0aGVyIGNoaWxkIGlzIG1hcmtlZCBzaGFyZWQsIG9yIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiBhbm90aGVyIHRyZWUuXHJcbiAgICAgKi9cclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChpLCBjaGlsZCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDAsIGNoaWxkKTtcclxuICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGksIDAsIGNoaWxkLm1heEtleSgpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNwbGl0IHRoaXMgbm9kZS5cclxuICAgICAqIE1vZGlmaWVzIHRoaXMgdG8gcmVtb3ZlIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgaXRlbXMsIHJldHVybmluZyBhIHNlcGFyYXRlIG5vZGUgY29udGFpbmluZyB0aGVtLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBhc3NlcnQgIXRoaXMuaXNTaGFyZWQ7XHJcbiAgICAgICAgdmFyIGhhbGYgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+PiAxO1xyXG4gICAgICAgIHJldHVybiBuZXcgQk5vZGVJbnRlcm5hbCh0aGlzLmNoaWxkcmVuLnNwbGljZShoYWxmKSwgdGhpcy5rZXlzLnNwbGljZShoYWxmKSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUudGFrZUZyb21SaWdodCA9IGZ1bmN0aW9uIChyaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB0aGlzLmtleXMucHVzaChyaHMua2V5cy5zaGlmdCgpKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2gocmhzLmNoaWxkcmVuLnNoaWZ0KCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLnRha2VGcm9tTGVmdCA9IGZ1bmN0aW9uIChsaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB0aGlzLmtleXMudW5zaGlmdChsaHMua2V5cy5wb3AoKSk7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGxocy5jaGlsZHJlbi5wb3AoKSk7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEludGVybmFsIE5vZGU6IHNjYW5uaW5nICYgZGVsZXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBOb3RlOiBgY291bnRgIGlzIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSB0aGlyZCBhcmd1bWVudCB0byBgb25Gb3VuZGAuIFxyXG4gICAgLy8gICAgICAgQSBsZWFmIG5vZGUncyBgZm9yUmFuZ2VgIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgdmFsdWUgZm9yIHRoaXMgY291bnRlcixcclxuICAgIC8vICAgICAgIHVubGVzcyB0aGUgb3BlcmF0aW9uIGlzIHRvIHN0b3AgZWFybHkuXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5mb3JSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBlZGl0TW9kZSwgdHJlZSwgY291bnQsIG9uRm91bmQpIHtcclxuICAgICAgICB2YXIgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cywgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgMCwgY21wKSwgaSA9IGlMb3c7XHJcbiAgICAgICAgdmFyIGlIaWdoID0gTWF0aC5taW4oaGlnaCA9PT0gbG93ID8gaUxvdyA6IHRoaXMuaW5kZXhPZihoaWdoLCAwLCBjbXApLCBrZXlzLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgIGlmICghZWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgLy8gU2ltcGxlIGNhc2VcclxuICAgICAgICAgICAgZm9yICg7IGkgPD0gaUhpZ2g7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGkgPD0gaUhpZ2gpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGZvciAoOyBpIDw9IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0uY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGRyZW5baV0uZm9yUmFuZ2UobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgZWRpdE1vZGUsIHRyZWUsIGNvdW50LCBvbkZvdW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBpZiBjaGlsZHJlbltpXSBpcyBlbXB0eSB0aGVuIGtleXNbaV09dW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgIFRoaXMgaXMgYW4gaW52YWxpZCBzdGF0ZSwgYnV0IGl0IGlzIGZpeGVkIGJlbG93LlxyXG4gICAgICAgICAgICAgICAgICAgIGtleXNbaV0gPSBjaGlsZHJlbltpXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEZWxldGlvbnMgbWF5IGhhdmUgb2NjdXJyZWQsIHNvIGxvb2sgZm9yIG9wcG9ydHVuaXRpZXMgdG8gbWVyZ2Ugbm9kZXMuXHJcbiAgICAgICAgICAgICAgICB2YXIgaGFsZiA9IHRyZWUuX21heE5vZGVTaXplID4+IDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoaUxvdyA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaUxvdy0tO1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gaUhpZ2g7IGkgPj0gaUxvdzsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmtleXMubGVuZ3RoIDw9IGhhbGYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmtleXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeU1lcmdlKGksIHRyZWUuX21heE5vZGVTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gY2hpbGQgaXMgZW1wdHkhIGRlbGV0ZSBpdCFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPT0gMCAmJiBjaGlsZHJlblswXS5rZXlzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJlbXB0aW5lc3MgYnVnXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudDtcclxuICAgIH07XHJcbiAgICAvKiogTWVyZ2VzIGNoaWxkIGkgd2l0aCBjaGlsZCBpKzEgaWYgdGhlaXIgY29tYmluZWQgc2l6ZSBpcyBub3QgdG9vIGxhcmdlICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS50cnlNZXJnZSA9IGZ1bmN0aW9uIChpLCBtYXhTaXplKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoaSA+PSAwICYmIGkgKyAxIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5rZXlzLmxlbmd0aCArIGNoaWxkcmVuW2kgKyAxXS5rZXlzLmxlbmd0aCA8PSBtYXhTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uaXNTaGFyZWQpIC8vIGNsb25lZCBhbHJlYWR5IFVOTEVTUyBpIGlzIG91dHNpZGUgc2NhbiByYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0uY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLm1lcmdlU2libGluZyhjaGlsZHJlbltpICsgMV0sIG1heFNpemUpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGkgKyAxLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5cy5zcGxpY2UoaSArIDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0gY2hpbGRyZW5baV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlIGNoaWxkcmVuIGZyb20gYHJoc2AgaW50byB0aGlzLlxyXG4gICAgICogYHJoc2AgbXVzdCBiZSBwYXJ0IG9mIHRoaXMgdHJlZSwgYW5kIGJlIHJlbW92ZWQgZnJvbSBpdCBhZnRlciB0aGlzIGNhbGxcclxuICAgICAqIChvdGhlcndpc2UgaXNTaGFyZWQgZm9yIGl0cyBjaGlsZHJlbiBjb3VsZCBiZSBpbmNvcnJlY3QpLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5tZXJnZVNpYmxpbmcgPSBmdW5jdGlvbiAocmhzLCBtYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgIC8vIGFzc2VydCAhdGhpcy5pc1NoYXJlZDtcclxuICAgICAgICB2YXIgb2xkTGVuZ3RoID0gdGhpcy5rZXlzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmtleXMucHVzaC5hcHBseSh0aGlzLmtleXMsIHJocy5rZXlzKTtcclxuICAgICAgICB2YXIgcmhzQ2hpbGRyZW4gPSByaHMuY2hpbGRyZW47XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoLmFwcGx5KHRoaXMuY2hpbGRyZW4sIHJoc0NoaWxkcmVuKTtcclxuICAgICAgICBpZiAocmhzLmlzU2hhcmVkICYmICF0aGlzLmlzU2hhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEFsbCBjaGlsZHJlbiBvZiBhIHNoYXJlZCBub2RlIGFyZSBpbXBsaWNpdGx5IHNoYXJlZCwgYW5kIHNpbmNlIHRoZWlyIG5ld1xyXG4gICAgICAgICAgICAvLyBwYXJlbnQgaXMgbm90IHNoYXJlZCwgdGhleSBtdXN0IG5vdyBiZSBleHBsaWNpdGx5IG1hcmtlZCBhcyBzaGFyZWQuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmhzQ2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICByaHNDaGlsZHJlbltpXS5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIG91ciBjaGlsZHJlbiBhcmUgdGhlbXNlbHZlcyBhbG1vc3QgZW1wdHkgZHVlIHRvIGEgbWFzcy1kZWxldGUsXHJcbiAgICAgICAgLy8gdGhleSBtYXkgbmVlZCB0byBiZSBtZXJnZWQgdG9vIChidXQgb25seSB0aGUgb2xkTGVuZ3RoLTEgYW5kIGl0c1xyXG4gICAgICAgIC8vIHJpZ2h0IHNpYmxpbmcgc2hvdWxkIG5lZWQgdGhpcykuXHJcbiAgICAgICAgdGhpcy50cnlNZXJnZShvbGRMZW5ndGggLSAxLCBtYXhOb2RlU2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJOb2RlSW50ZXJuYWw7XHJcbn0oQk5vZGUpKTtcclxuLy8gT3B0aW1pemF0aW9uOiB0aGlzIGFycmF5IG9mIGB1bmRlZmluZWRgcyBpcyB1c2VkIGluc3RlYWQgb2YgYSBub3JtYWxcclxuLy8gYXJyYXkgb2YgdmFsdWVzIGluIG5vZGVzIHdoZXJlIGB1bmRlZmluZWRgIGlzIHRoZSBvbmx5IHZhbHVlLlxyXG4vLyBJdHMgbGVuZ3RoIGlzIGV4dGVuZGVkIHRvIG1heCBub2RlIHNpemUgb24gZmlyc3QgdXNlOyBzaW5jZSBpdCBjYW5cclxuLy8gYmUgc2hhcmVkIGJldHdlZW4gdHJlZXMgd2l0aCBkaWZmZXJlbnQgbWF4aW11bXMsIGl0cyBsZW5ndGggY2FuIG9ubHlcclxuLy8gaW5jcmVhc2UsIG5ldmVyIGRlY3JlYXNlLiBJdHMgdHlwZSBzaG91bGQgYmUgdW5kZWZpbmVkW10gYnV0IHN0cmFuZ2VseVxyXG4vLyBUeXBlU2NyaXB0IHdvbid0IGFsbG93IHRoZSBjb21wYXJpc29uIFZbXSA9PT0gdW5kZWZpbmVkW10uIFRvIHByZXZlbnRcclxuLy8gdXNlcnMgZnJvbSBtYWtpbmcgdGhpcyBhcnJheSB0b28gbGFyZ2UsIEJUcmVlIGhhcyBhIG1heGltdW0gbm9kZSBzaXplLlxyXG4vL1xyXG4vLyBGQVE6IHVuZGVmVmFsc1tpXSBpcyBhbHJlYWR5IHVuZGVmaW5lZCwgc28gd2h5IGluY3JlYXNlIHRoZSBhcnJheSBzaXplP1xyXG4vLyBSZWFkaW5nIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBhbiBhcnJheSBpcyByZWxhdGl2ZWx5IHNsb3cgYmVjYXVzZSBpdFxyXG4vLyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNjYW5uaW5nIHRoZSBwcm90b3R5cGUgY2hhaW4uXHJcbnZhciB1bmRlZlZhbHMgPSBbXTtcclxudmFyIERlbGV0ZSA9IHsgZGVsZXRlOiB0cnVlIH0sIERlbGV0ZVJhbmdlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gRGVsZXRlOyB9O1xyXG52YXIgQnJlYWsgPSB7IGJyZWFrOiB0cnVlIH07XHJcbnZhciBFbXB0eUxlYWYgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG4gPSBuZXcgQk5vZGUoKTtcclxuICAgIG4uaXNTaGFyZWQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG47XHJcbn0pKCk7XHJcbnZhciBFbXB0eUFycmF5ID0gW107XHJcbnZhciBSZXVzZWRBcnJheSA9IFtdOyAvLyBhc3N1bWVkIHRocmVhZC1sb2NhbFxyXG5mdW5jdGlvbiBjaGVjayhmYWN0KSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmYWN0KSB7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KCdCKyB0cmVlJyk7IC8vIGF0IGJlZ2lubmluZyBvZiBtZXNzYWdlXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFyZ3Muam9pbignICcpKTtcclxuICAgIH1cclxufVxyXG4vKiogQSBCVHJlZSBmcm96ZW4gaW4gdGhlIGVtcHR5IHN0YXRlLiAqL1xyXG5leHBvcnRzLkVtcHR5QlRyZWUgPSAoZnVuY3Rpb24gKCkgeyB2YXIgdCA9IG5ldyBCVHJlZSgpOyB0LmZyZWV6ZSgpOyByZXR1cm4gdDsgfSkoKTtcclxuIiwgIi8qIVxuICAgIGxvY2FsRm9yYWdlIC0tIE9mZmxpbmUgU3RvcmFnZSwgSW1wcm92ZWRcbiAgICBWZXJzaW9uIDEuMTAuMFxuICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlXG4gICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjBcbiovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5sb2NhbGZvcmFnZSA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyAoZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLCBmKX12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcbnZhciBNdXRhdGlvbiA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXG52YXIgc2NoZWR1bGVEcmFpbjtcblxue1xuICBpZiAoTXV0YXRpb24pIHtcbiAgICB2YXIgY2FsbGVkID0gMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb24obmV4dFRpY2spO1xuICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgZWxlbWVudC5kYXRhID0gKGNhbGxlZCA9ICsrY2FsbGVkICUgMik7XG4gICAgfTtcbiAgfSBlbHNlIGlmICghZ2xvYmFsLnNldEltbWVkaWF0ZSAmJiB0eXBlb2YgZ2xvYmFsLk1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBjaGFubmVsID0gbmV3IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbmV4dFRpY2s7XG4gICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgnZG9jdW1lbnQnIGluIGdsb2JhbCAmJiAnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICB2YXIgc2NyaXB0RWwgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5leHRUaWNrKCk7XG5cbiAgICAgICAgc2NyaXB0RWwub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgc2NyaXB0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHRFbCk7XG4gICAgICAgIHNjcmlwdEVsID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBnbG9iYWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdEVsKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRUaW1lb3V0KG5leHRUaWNrLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBkcmFpbmluZztcbnZhciBxdWV1ZSA9IFtdO1xuLy9uYW1lZCBuZXh0VGljayBmb3IgbGVzcyBjb25mdXNpbmcgc3RhY2sgdHJhY2VzXG5mdW5jdGlvbiBuZXh0VGljaygpIHtcbiAgZHJhaW5pbmcgPSB0cnVlO1xuICB2YXIgaSwgb2xkUXVldWU7XG4gIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChsZW4pIHtcbiAgICBvbGRRdWV1ZSA9IHF1ZXVlO1xuICAgIHF1ZXVlID0gW107XG4gICAgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgIG9sZFF1ZXVlW2ldKCk7XG4gICAgfVxuICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgfVxuICBkcmFpbmluZyA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGltbWVkaWF0ZTtcbmZ1bmN0aW9uIGltbWVkaWF0ZSh0YXNrKSB7XG4gIGlmIChxdWV1ZS5wdXNoKHRhc2spID09PSAxICYmICFkcmFpbmluZykge1xuICAgIHNjaGVkdWxlRHJhaW4oKTtcbiAgfVxufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbn0se31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIGltbWVkaWF0ZSA9IF9kZXJlcV8oMSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBJTlRFUk5BTCgpIHt9XG5cbnZhciBoYW5kbGVycyA9IHt9O1xuXG52YXIgUkVKRUNURUQgPSBbJ1JFSkVDVEVEJ107XG52YXIgRlVMRklMTEVEID0gWydGVUxGSUxMRUQnXTtcbnZhciBQRU5ESU5HID0gWydQRU5ESU5HJ107XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikge1xuICBpZiAodHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdGhpcy5zdGF0ZSA9IFBFTkRJTkc7XG4gIHRoaXMucXVldWUgPSBbXTtcbiAgdGhpcy5vdXRjb21lID0gdm9pZCAwO1xuICBpZiAocmVzb2x2ZXIgIT09IElOVEVSTkFMKSB7XG4gICAgc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHRoaXMsIHJlc29sdmVyKTtcbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVtcImNhdGNoXCJdID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gRlVMRklMTEVEIHx8XG4gICAgdHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKElOVEVSTkFMKTtcbiAgaWYgKHRoaXMuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgPyBvbkZ1bGZpbGxlZCA6IG9uUmVqZWN0ZWQ7XG4gICAgdW53cmFwKHByb21pc2UsIHJlc29sdmVyLCB0aGlzLm91dGNvbWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucXVldWUucHVzaChuZXcgUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5mdW5jdGlvbiBRdWV1ZUl0ZW0ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSBvbkZ1bGZpbGxlZDtcbiAgICB0aGlzLmNhbGxGdWxmaWxsZWQgPSB0aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZDtcbiAgfVxuICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBvblJlamVjdGVkO1xuICAgIHRoaXMuY2FsbFJlamVjdGVkID0gdGhpcy5vdGhlckNhbGxSZWplY3RlZDtcbiAgfVxufVxuUXVldWVJdGVtLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlc29sdmUodGhpcy5wcm9taXNlLCB2YWx1ZSk7XG59O1xuUXVldWVJdGVtLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdW53cmFwKHRoaXMucHJvbWlzZSwgdGhpcy5vbkZ1bGZpbGxlZCwgdmFsdWUpO1xufTtcblF1ZXVlSXRlbS5wcm90b3R5cGUuY2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlamVjdCh0aGlzLnByb21pc2UsIHZhbHVlKTtcbn07XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHVud3JhcCh0aGlzLnByb21pc2UsIHRoaXMub25SZWplY3RlZCwgdmFsdWUpO1xufTtcblxuZnVuY3Rpb24gdW53cmFwKHByb21pc2UsIGZ1bmMsIHZhbHVlKSB7XG4gIGltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgZSk7XG4gICAgfVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmhhbmRsZXJzLnJlc29sdmUgPSBmdW5jdGlvbiAoc2VsZiwgdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKGdldFRoZW4sIHZhbHVlKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4gaGFuZGxlcnMucmVqZWN0KHNlbGYsIHJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgdmFyIHRoZW5hYmxlID0gcmVzdWx0LnZhbHVlO1xuXG4gIGlmICh0aGVuYWJsZSkge1xuICAgIHNhZmVseVJlc29sdmVUaGVuYWJsZShzZWxmLCB0aGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICBzZWxmLm91dGNvbWUgPSB2YWx1ZTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHZhciBsZW4gPSBzZWxmLnF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICBzZWxmLnF1ZXVlW2ldLmNhbGxGdWxmaWxsZWQodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VsZjtcbn07XG5oYW5kbGVycy5yZWplY3QgPSBmdW5jdGlvbiAoc2VsZiwgZXJyb3IpIHtcbiAgc2VsZi5zdGF0ZSA9IFJFSkVDVEVEO1xuICBzZWxmLm91dGNvbWUgPSBlcnJvcjtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgc2VsZi5xdWV1ZVtpXS5jYWxsUmVqZWN0ZWQoZXJyb3IpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufTtcblxuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBhY2Nlc3NvciBvbmNlIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG4gIHZhciB0aGVuID0gb2JqICYmIG9iai50aGVuO1xuICBpZiAob2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiBhcHB5VGhlbigpIHtcbiAgICAgIHRoZW4uYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHNlbGYsIHRoZW5hYmxlKSB7XG4gIC8vIEVpdGhlciBmdWxmaWxsLCByZWplY3Qgb3IgcmVqZWN0IHdpdGggZXJyb3JcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbkVycm9yKHZhbHVlKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGhhbmRsZXJzLnJlamVjdChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblN1Y2Nlc3ModmFsdWUpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgaGFuZGxlcnMucmVzb2x2ZShzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlUb1Vud3JhcCgpIHtcbiAgICB0aGVuYWJsZShvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHRyeVRvVW53cmFwKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICBvbkVycm9yKHJlc3VsdC52YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2F0Y2goZnVuYywgdmFsdWUpIHtcbiAgdmFyIG91dCA9IHt9O1xuICB0cnkge1xuICAgIG91dC52YWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIG91dC5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvdXQuc3RhdHVzID0gJ2Vycm9yJztcbiAgICBvdXQudmFsdWUgPSBlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cblByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHRoaXMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzLnJlc29sdmUobmV3IHRoaXMoSU5URVJOQUwpLCB2YWx1ZSk7XG59XG5cblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKElOVEVSTkFMKTtcbiAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCByZWFzb24pO1xufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcbmZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7XG4gIH1cblxuICB2YXIgbGVuID0gaXRlcmFibGUubGVuZ3RoO1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGlmICghbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7XG4gIH1cblxuICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gIHZhciByZXNvbHZlZCA9IDA7XG4gIHZhciBpID0gLTE7XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMoSU5URVJOQUwpO1xuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhbGxSZXNvbHZlcihpdGVyYWJsZVtpXSwgaSk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2U7XG4gIGZ1bmN0aW9uIGFsbFJlc29sdmVyKHZhbHVlLCBpKSB7XG4gICAgc2VsZi5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmVGcm9tQWxsLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZyb21BbGwob3V0VmFsdWUpIHtcbiAgICAgIHZhbHVlc1tpXSA9IG91dFZhbHVlO1xuICAgICAgaWYgKCsrcmVzb2x2ZWQgPT09IGxlbiAmJiAhY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgdmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXJhYmxlKSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgIHJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCdtdXN0IGJlIGFuIGFycmF5JykpO1xuICB9XG5cbiAgdmFyIGxlbiA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBpZiAoIWxlbikge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmUoW10pO1xuICB9XG5cbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7XG5cbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHJlc29sdmVyKGl0ZXJhYmxlW2ldKTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbiAgZnVuY3Rpb24gcmVzb2x2ZXIodmFsdWUpIHtcbiAgICBzZWxmLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBoYW5kbGVycy5yZXNvbHZlKHByb21pc2UsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxufSx7XCIxXCI6MX1dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuaWYgKHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICBnbG9iYWwuUHJvbWlzZSA9IF9kZXJlcV8oMik7XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7XCIyXCI6Mn1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGdldElEQigpIHtcbiAgICAvKiBnbG9iYWwgaW5kZXhlZERCLHdlYmtpdEluZGV4ZWREQixtb3pJbmRleGVkREIsT0luZGV4ZWREQixtc0luZGV4ZWREQiAqL1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZWREQjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdlYmtpdEluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWJraXRJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtb3pJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbW96SW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgT0luZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPSW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbXNJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbnZhciBpZGIgPSBnZXRJREIoKTtcblxuZnVuY3Rpb24gaXNJbmRleGVkREJWYWxpZCgpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbml0aWFsaXplIEluZGV4ZWREQjsgZmFsbCBiYWNrIHRvIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uc1xuICAgICAgICAvLyBpZiBuZWVkZWQuXG4gICAgICAgIGlmICghaWRiIHx8ICFpZGIub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pbWljIFBvdWNoREIgaGVyZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgdGVzdCBmb3Igb3BlbkRhdGFiYXNlIGJlY2F1c2UgSUUgTW9iaWxlIGlkZW50aWZpZXMgaXRzZWxmXG4gICAgICAgIC8vIGFzIFNhZmFyaS4gT2ggdGhlIGx1bHouLi5cbiAgICAgICAgdmFyIGlzU2FmYXJpID0gdHlwZW9mIG9wZW5EYXRhYmFzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9CbGFja0JlcnJ5Ly50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbiAgICAgICAgdmFyIGhhc0ZldGNoID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIGZldGNoLnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgIT09IC0xO1xuXG4gICAgICAgIC8vIFNhZmFyaSA8MTAuMSBkb2VzIG5vdCBtZWV0IG91ciByZXF1aXJlbWVudHMgZm9yIElEQiBzdXBwb3J0XG4gICAgICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvaXNzdWVzLzU1NzIpLlxuICAgICAgICAvLyBTYWZhcmkgMTAuMSBzaGlwcGVkIHdpdGggZmV0Y2gsIHdlIGNhbiB1c2UgdGhhdCB0byBkZXRlY3QgaXQuXG4gICAgICAgIC8vIE5vdGU6IHRoaXMgY3JlYXRlcyBpc3N1ZXMgd2l0aCBgd2luZG93LmZldGNoYCBwb2x5ZmlsbHMgYW5kXG4gICAgICAgIC8vIG92ZXJyaWRlczsgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9jYWxGb3JhZ2UvbG9jYWxGb3JhZ2UvaXNzdWVzLzg1NlxuICAgICAgICByZXR1cm4gKCFpc1NhZmFyaSB8fCBoYXNGZXRjaCkgJiYgdHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgLy8gc29tZSBvdXRkYXRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIHRoYXQgYXBwZWFyIG9uIFNhbXN1bmdcbiAgICAgICAgLy8gYW5kIEhUQyBBbmRyb2lkIGRldmljZXMgPDQuNCBhcmUgbWlzc2luZyBJREJLZXlSYW5nZVxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL2lzc3Vlcy8xMjhcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMjcyXG4gICAgICAgIHR5cGVvZiBJREJLZXlSYW5nZSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBBYnN0cmFjdHMgY29uc3RydWN0aW5nIGEgQmxvYiBvYmplY3QsIHNvIGl0IGFsc28gd29ya3MgaW4gb2xkZXJcbi8vIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgbmF0aXZlIEJsb2IgY29uc3RydWN0b3IuIChpLmUuXG4vLyBvbGQgUXRXZWJLaXQgdmVyc2lvbnMsIGF0IGxlYXN0KS5cbi8vIEFic3RyYWN0cyBjb25zdHJ1Y3RpbmcgYSBCbG9iIG9iamVjdCwgc28gaXQgYWxzbyB3b3JrcyBpbiBvbGRlclxuLy8gYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBuYXRpdmUgQmxvYiBjb25zdHJ1Y3Rvci4gKGkuZS5cbi8vIG9sZCBRdFdlYktpdCB2ZXJzaW9ucywgYXQgbGVhc3QpLlxuZnVuY3Rpb24gY3JlYXRlQmxvYihwYXJ0cywgcHJvcGVydGllcykge1xuICAgIC8qIGdsb2JhbCBCbG9iQnVpbGRlcixNU0Jsb2JCdWlsZGVyLE1vekJsb2JCdWlsZGVyLFdlYktpdEJsb2JCdWlsZGVyICovXG4gICAgcGFydHMgPSBwYXJ0cyB8fCBbXTtcbiAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2IocGFydHMsIHByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTVNCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBNU0Jsb2JCdWlsZGVyIDogdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1vekJsb2JCdWlsZGVyIDogV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IocHJvcGVydGllcy50eXBlKTtcbiAgICB9XG59XG5cbi8vIFRoaXMgaXMgQ29tbW9uSlMgYmVjYXVzZSBsaWUgaXMgYW4gZXh0ZXJuYWwgZGVwZW5kZW5jeSwgc28gUm9sbHVwXG4vLyBjYW4ganVzdCBpZ25vcmUgaXQuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gdGhlIFwibm9wcm9taXNlc1wiIGJ1aWxkIHRoaXMgd2lsbCBqdXN0IHRocm93IGlmIHlvdSBkb24ndCBoYXZlXG4gICAgLy8gYSBnbG9iYWwgcHJvbWlzZSBvYmplY3QsIGJ1dCBpdCB3b3VsZCB0aHJvdyBhbnl3YXkgbGF0ZXIuXG4gICAgX2RlcmVxXygzKTtcbn1cbnZhciBQcm9taXNlJDEgPSBQcm9taXNlO1xuXG5mdW5jdGlvbiBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2UudGhlbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2VbXCJjYXRjaFwiXShlcnJvckNhbGxiYWNrKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAgICAvLyBDYXN0IHRoZSBrZXkgdG8gYSBzdHJpbmcsIGFzIHRoYXQncyBhbGwgd2UgY2FuIHNldCBhcyBhIGtleS5cbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGtleSArICcgdXNlZCBhcyBhIGtleSwgYnV0IGl0IGlzIG5vdCBhIHN0cmluZy4nKTtcbiAgICAgICAga2V5ID0gU3RyaW5nKGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2soKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggJiYgdHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgfVxufVxuXG4vLyBTb21lIGNvZGUgb3JpZ2luYWxseSBmcm9tIGFzeW5jX3N0b3JhZ2UuanMgaW5cbi8vIFtHYWlhXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS1iMmcvZ2FpYSkuXG5cbnZhciBERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFID0gJ2xvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0JztcbnZhciBzdXBwb3J0c0Jsb2JzID0gdm9pZCAwO1xudmFyIGRiQ29udGV4dHMgPSB7fTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFRyYW5zYWN0aW9uIE1vZGVzXG52YXIgUkVBRF9PTkxZID0gJ3JlYWRvbmx5JztcbnZhciBSRUFEX1dSSVRFID0gJ3JlYWR3cml0ZSc7XG5cbi8vIFRyYW5zZm9ybSBhIGJpbmFyeSBzdHJpbmcgdG8gYW4gYXJyYXkgYnVmZmVyLCBiZWNhdXNlIG90aGVyd2lzZVxuLy8gd2VpcmQgc3R1ZmYgaGFwcGVucyB3aGVuIHlvdSB0cnkgdG8gd29yayB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nIGRpcmVjdGx5LlxuLy8gSXQgaXMga25vd24uXG4vLyBGcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQ5Njc2NDcvIChjb250aW51ZXMgb24gbmV4dCBsaW5lKVxuLy8gZW5jb2RlLWRlY29kZS1pbWFnZS13aXRoLWJhc2U2NC1icmVha3MtaW1hZ2UgKDIwMTMtMDQtMjEpXG5mdW5jdGlvbiBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihiaW4pIHtcbiAgICB2YXIgbGVuZ3RoID0gYmluLmxlbmd0aDtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuLy9cbi8vIEJsb2JzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGFsbCB2ZXJzaW9ucyBvZiBJbmRleGVkREIsIG5vdGFibHlcbi8vIENocm9tZSA8MzcgYW5kIEFuZHJvaWQgPDUuIEluIHRob3NlIHZlcnNpb25zLCBzdG9yaW5nIGEgYmxvYiB3aWxsIHRocm93LlxuLy9cbi8vIFZhcmlvdXMgb3RoZXIgYmxvYiBidWdzIGV4aXN0IGluIENocm9tZSB2MzctNDIgKGluY2x1c2l2ZSkuXG4vLyBEZXRlY3RpbmcgdGhlbSBpcyBleHBlbnNpdmUgYW5kIGNvbmZ1c2luZyB0byB1c2VycywgYW5kIENocm9tZSAzNy00MlxuLy8gaXMgYXQgdmVyeSBsb3cgdXNhZ2Ugd29ybGR3aWRlLCBzbyB3ZSBkbyBhIGhhY2t5IHVzZXJBZ2VudCBjaGVjayBpbnN0ZWFkLlxuLy9cbi8vIGNvbnRlbnQtdHlwZSBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00MDgxMjBcbi8vIDQwNCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDc5MTZcbi8vIEZpbGVSZWFkZXIgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3ODM2XG4vL1xuLy8gQ29kZSBib3Jyb3dlZCBmcm9tIFBvdWNoREIuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvbm9kZV9tb2R1bGVzL3BvdWNoZGItYWRhcHRlci1pZGIvc3JjL2Jsb2JTdXBwb3J0LmpzXG4vL1xuZnVuY3Rpb24gX2NoZWNrQmxvYlN1cHBvcnRXaXRob3V0Q2FjaGluZyhpZGIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICB2YXIgdHhuID0gaWRiLnRyYW5zYWN0aW9uKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUsIFJFQURfV1JJVEUpO1xuICAgICAgICB2YXIgYmxvYiA9IGNyZWF0ZUJsb2IoWycnXSk7XG4gICAgICAgIHR4bi5vYmplY3RTdG9yZShERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFKS5wdXQoYmxvYiwgJ2tleScpO1xuXG4gICAgICAgIHR4bi5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBhYm9ydHMgbm93IGl0cyBkdWUgdG8gbm90IGJlaW5nIGFibGUgdG9cbiAgICAgICAgICAgIC8vIHdyaXRlIHRvIHRoZSBkYXRhYmFzZSwgbGlrZWx5IGR1ZSB0byB0aGUgZGlzayBiZWluZyBmdWxsXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHhuLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlZENocm9tZSA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgdmFyIG1hdGNoZWRFZGdlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLy8pO1xuICAgICAgICAgICAgLy8gTVMgRWRnZSBwcmV0ZW5kcyB0byBiZSBDaHJvbWUgNDI6XG4gICAgICAgICAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hoODY5MzAxJTI4dj12cy44NSUyOS5hc3B4XG4gICAgICAgICAgICByZXNvbHZlKG1hdGNoZWRFZGdlIHx8ICFtYXRjaGVkQ2hyb21lIHx8IHBhcnNlSW50KG1hdGNoZWRDaHJvbWVbMV0sIDEwKSA+PSA0Myk7XG4gICAgICAgIH07XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXJyb3IsIHNvIGFzc3VtZSB1bnN1cHBvcnRlZFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfY2hlY2tCbG9iU3VwcG9ydChpZGIpIHtcbiAgICBpZiAodHlwZW9mIHN1cHBvcnRzQmxvYnMgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoc3VwcG9ydHNCbG9icyk7XG4gICAgfVxuICAgIHJldHVybiBfY2hlY2tCbG9iU3VwcG9ydFdpdGhvdXRDYWNoaW5nKGlkYikudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3VwcG9ydHNCbG9icyA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNCbG9icztcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2RlZmVyUmVhZGluZXNzKGRiSW5mbykge1xuICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXTtcblxuICAgIC8vIENyZWF0ZSBhIGRlZmVycmVkIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IHt9O1xuXG4gICAgZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5xdWV1ZSB0aGUgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChkZWZlcnJlZE9wZXJhdGlvbik7XG5cbiAgICAvLyBDaGFpbiBpdHMgcHJvbWlzZSB0byB0aGUgZGF0YWJhc2UgcmVhZGluZXNzLlxuICAgIGlmICghZGJDb250ZXh0LmRiUmVhZHkpIHtcbiAgICAgICAgZGJDb250ZXh0LmRiUmVhZHkgPSBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGJDb250ZXh0LmRiUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pIHtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyBEZXF1ZXVlIGEgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7XG5cbiAgICAvLyBSZXNvbHZlIGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0UmVhZGluZXNzKGRiSW5mbywgZXJyKSB7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gRGVxdWV1ZSBhIGRlZmVycmVkIG9wZXJhdGlvbi5cbiAgICB2YXIgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gICAgLy8gUmVqZWN0IGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRDb25uZWN0aW9uKGRiSW5mbywgdXBncmFkZU5lZWRlZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSB8fCBjcmVhdGVEYkNvbnRleHQoKTtcblxuICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICAgICAgICAgIGRiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkYkluZm8uZGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRiQXJncyA9IFtkYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgICAgICAgIGRiQXJncy5wdXNoKGRiSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVucmVxID0gaWRiLm9wZW4uYXBwbHkoaWRiLCBkYkFyZ3MpO1xuXG4gICAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgICAgICBvcGVucmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRiID0gb3BlbnJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLm9sZFZlcnNpb24gPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkZWQgd2hlbiBzdXBwb3J0IGZvciBibG9iIHNoaW1zIHdhcyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ0NvbnN0cmFpbnRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArICcgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcgKyBlLm9sZFZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGUubmV3VmVyc2lvbiArICcsIGJ1dCB0aGUgc3RvcmFnZSBcIicgKyBkYkluZm8uc3RvcmVOYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlbnJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJlamVjdChvcGVucmVxLmVycm9yKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvcGVucmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYiA9IG9wZW5yZXEucmVzdWx0O1xuICAgICAgICAgICAgZGIub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgd2hlbiB0aGUgZGF0YWJhc2UgaXMgbW9kaWZpZWQgKGUuZy4gYWRkaW5nIGFuIG9iamVjdFN0b3JlKSBvclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWQgKGV2ZW4gd2hlbiBpbml0aWF0ZWQgYnkgb3RoZXIgc2Vzc2lvbnMgaW4gZGlmZmVyZW50IHRhYnMpLlxuICAgICAgICAgICAgICAgIC8vIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGVyZSBwcmV2ZW50cyB0aG9zZSBvcGVyYXRpb25zIGZyb20gYmVpbmcgYmxvY2tlZC5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2UgaXMgYWNjZXNzZWQgYWdhaW4gbGF0ZXIgYnkgdGhpcyBpbnN0YW5jZSwgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHJlb3BlbmVkIG9yIHRoZSBkYXRhYmFzZSByZWNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0T3JpZ2luYWxDb25uZWN0aW9uKGRiSW5mbykge1xuICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pIHtcbiAgICByZXR1cm4gX2dldENvbm5lY3Rpb24oZGJJbmZvLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gX2lzVXBncmFkZU5lZWRlZChkYkluZm8sIGRlZmF1bHRWZXJzaW9uKSB7XG4gICAgaWYgKCFkYkluZm8uZGIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGlzTmV3U3RvcmUgPSAhZGJJbmZvLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgdmFyIGlzRG93bmdyYWRlID0gZGJJbmZvLnZlcnNpb24gPCBkYkluZm8uZGIudmVyc2lvbjtcbiAgICB2YXIgaXNVcGdyYWRlID0gZGJJbmZvLnZlcnNpb24gPiBkYkluZm8uZGIudmVyc2lvbjtcblxuICAgIGlmIChpc0Rvd25ncmFkZSkge1xuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyBub3QgdGhlIGRlZmF1bHQgb25lXG4gICAgICAgIC8vIHRoZW4gd2FybiBmb3IgaW1wb3NzaWJsZSBkb3duZ3JhZGUuXG4gICAgICAgIGlmIChkYkluZm8udmVyc2lvbiAhPT0gZGVmYXVsdFZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArIFwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uIFwiICsgZGJJbmZvLmRiLnZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGRiSW5mby52ZXJzaW9uICsgJy4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbGlnbiB0aGUgdmVyc2lvbnMgdG8gcHJldmVudCBlcnJvcnMuXG4gICAgICAgIGRiSW5mby52ZXJzaW9uID0gZGJJbmZvLmRiLnZlcnNpb247XG4gICAgfVxuXG4gICAgaWYgKGlzVXBncmFkZSB8fCBpc05ld1N0b3JlKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdG9yZSBpcyBuZXcgdGhlbiBpbmNyZW1lbnQgdGhlIHZlcnNpb24gKGlmIG5lZWRlZCkuXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGFuIFwidXBncmFkZW5lZWRlZFwiIGV2ZW50IHdoaWNoIGlzIHJlcXVpcmVkXG4gICAgICAgIC8vIGZvciBjcmVhdGluZyBhIHN0b3JlLlxuICAgICAgICBpZiAoaXNOZXdTdG9yZSkge1xuICAgICAgICAgICAgdmFyIGluY1ZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICBpZiAoaW5jVmVyc2lvbiA+IGRiSW5mby52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBpbmNWZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBlbmNvZGUgYSBibG9iIGZvciBpbmRleGVkZGIgZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnQgYmxvYnNcbmZ1bmN0aW9uIF9lbmNvZGVCbG9iKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgYmFzZTY0ID0gYnRvYShlLnRhcmdldC5yZXN1bHQgfHwgJycpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGJhc2U2NCxcbiAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpO1xuICAgIH0pO1xufVxuXG4vLyBkZWNvZGUgYW4gZW5jb2RlZCBibG9iXG5mdW5jdGlvbiBfZGVjb2RlQmxvYihlbmNvZGVkQmxvYikge1xuICAgIHZhciBhcnJheUJ1ZmYgPSBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGVuY29kZWRCbG9iLmRhdGEpKTtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYXJyYXlCdWZmXSwgeyB0eXBlOiBlbmNvZGVkQmxvYi50eXBlIH0pO1xufVxuXG4vLyBpcyB0aGlzIG9uZSBvZiBvdXIgZmFuY3kgZW5jb2RlZCBibG9icz9cbmZ1bmN0aW9uIF9pc0VuY29kZWRCbG9iKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjtcbn1cblxuLy8gU3BlY2lhbGl6ZSB0aGUgZGVmYXVsdCBgcmVhZHkoKWAgZnVuY3Rpb24gYnkgbWFraW5nIGl0IGRlcGVuZGVudFxuLy8gb24gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9ucy4gVGh1cywgdGhlIGRyaXZlciB3aWxsIGJlIGFjdHVhbGx5XG4vLyByZWFkeSB3aGVuIGl0J3MgYmVlbiBpbml0aWFsaXplZCAoZGVmYXVsdCkgKmFuZCogdGhlcmUgYXJlIG5vIHBlbmRpbmdcbi8vIG9wZXJhdGlvbnMgb24gdGhlIGRhdGFiYXNlIChpbml0aWF0ZWQgYnkgc29tZSBvdGhlciBpbnN0YW5jZXMpLlxuZnVuY3Rpb24gX2Z1bGx5UmVhZHkoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2luaXRSZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tzZWxmLl9kYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKGRiQ29udGV4dCAmJiBkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIGRiQ29udGV4dC5kYlJlYWR5O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHByb21pc2UsIGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFRyeSB0byBlc3RhYmxpc2ggYSBuZXcgZGIgY29ubmVjdGlvbiB0byByZXBsYWNlIHRoZVxuLy8gY3VycmVudCBvbmUgd2hpY2ggaXMgYnJva2VuIChpLmUuIGV4cGVyaWVuY2luZ1xuLy8gSW52YWxpZFN0YXRlRXJyb3Igd2hpbGUgY3JlYXRpbmcgYSB0cmFuc2FjdGlvbikuXG5mdW5jdGlvbiBfdHJ5UmVjb25uZWN0KGRiSW5mbykge1xuICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuXG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuICAgIHZhciBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgIGlmIChmb3JhZ2UuX2RiSW5mby5kYikge1xuICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYkluZm8uZGIgPSBudWxsO1xuXG4gICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvKSkge1xuICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgcmV0dXJuIF9nZXRVcGdyYWRlZENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGI7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgLy8gc3RvcmUgdGhlIGxhdGVzdCBkYiByZWZlcmVuY2VcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgZGIgd2FzIHVwZ3JhZGVkXG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvcmFnZXNbaV0uX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICB9XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIF9yZWplY3RSZWFkaW5lc3MoZGJJbmZvLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG5cbi8vIEZGIGRvZXNuJ3QgbGlrZSBQcm9taXNlcyAobWljcm8tdGFza3MpIGFuZCBJRERCIHN0b3JlIG9wZXJhdGlvbnMsXG4vLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IHdpdGggY2FsbGJhY2tzXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvbihkYkluZm8sIG1vZGUsIGNhbGxiYWNrLCByZXRyaWVzKSB7XG4gICAgaWYgKHJldHJpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRyaWVzID0gMTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICB2YXIgdHggPSBkYkluZm8uZGIudHJhbnNhY3Rpb24oZGJJbmZvLnN0b3JlTmFtZSwgbW9kZSk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHR4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJldHJpZXMgPiAwICYmICghZGJJbmZvLmRiIHx8IGVyci5uYW1lID09PSAnSW52YWxpZFN0YXRlRXJyb3InIHx8IGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiSW5mby5kYiB8fCBlcnIubmFtZSA9PT0gJ05vdEZvdW5kRXJyb3InICYmICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lKSAmJiBkYkluZm8udmVyc2lvbiA8PSBkYkluZm8uZGIudmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgZGIgdmVyc2lvbiwgdG8gY3JlYXRlIHRoZSBuZXcgT2JqZWN0U3RvcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRiSW5mby5kYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdHJ5UmVjb25uZWN0KGRiSW5mbykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURiQ29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBSdW5uaW5nIGxvY2FsRm9yYWdlcyBzaGFyaW5nIGEgZGF0YWJhc2UuXG4gICAgICAgIGZvcmFnZXM6IFtdLFxuICAgICAgICAvLyBTaGFyZWQgZGF0YWJhc2UuXG4gICAgICAgIGRiOiBudWxsLFxuICAgICAgICAvLyBEYXRhYmFzZSByZWFkaW5lc3MgKHByb21pc2UpLlxuICAgICAgICBkYlJlYWR5OiBudWxsLFxuICAgICAgICAvLyBEZWZlcnJlZCBvcGVyYXRpb25zIG9uIHRoZSBkYXRhYmFzZS5cbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb25zOiBbXVxuICAgIH07XG59XG5cbi8vIE9wZW4gdGhlIEluZGV4ZWREQiBkYXRhYmFzZSAoYXV0b21hdGljYWxseSBjcmVhdGVzIG9uZSBpZiBvbmUgZGlkbid0XG4vLyBwcmV2aW91c2x5IGV4aXN0KSwgdXNpbmcgYW55IG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2Uob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgZGF0YWJhc2U7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gLi4ub3IgY3JlYXRlIGEgbmV3IGNvbnRleHQuXG4gICAgaWYgKCFkYkNvbnRleHQpIHtcbiAgICAgICAgZGJDb250ZXh0ID0gY3JlYXRlRGJDb250ZXh0KCk7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgcnVubmluZyBsb2NhbEZvcmFnZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgIGRiQ29udGV4dC5mb3JhZ2VzLnB1c2goc2VsZik7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBkZWZhdWx0IGByZWFkeSgpYCBmdW5jdGlvbiB3aXRoIHRoZSBzcGVjaWFsaXplZCBvbmUuXG4gICAgaWYgKCFzZWxmLl9pbml0UmVhZHkpIHtcbiAgICAgICAgc2VsZi5faW5pdFJlYWR5ID0gc2VsZi5yZWFkeTtcbiAgICAgICAgc2VsZi5yZWFkeSA9IF9mdWxseVJlYWR5O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsaXphdGlvbiBzdGF0ZXMgb2YgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgIHZhciBpbml0UHJvbWlzZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUVycm9ycygpIHtcbiAgICAgICAgLy8gRG9uJ3QgaGFuZGxlIGVycm9ycyBoZXJlLFxuICAgICAgICAvLyBqdXN0IG1ha2VzIHN1cmUgcmVsYXRlZCBsb2NhbEZvcmFnZXMgYXJlbid0IHBlbmRpbmcuXG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGJDb250ZXh0LmZvcmFnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGRiQ29udGV4dC5mb3JhZ2VzW2pdO1xuICAgICAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICAgICAgICAvLyBEb24ndCB3YWl0IGZvciBpdHNlbGYuLi5cbiAgICAgICAgICAgIGluaXRQcm9taXNlcy5wdXNoKGZvcmFnZS5faW5pdFJlYWR5KClbXCJjYXRjaFwiXShpZ25vcmVFcnJvcnMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRha2UgYSBzbmFwc2hvdCBvZiB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcy5zbGljZSgwKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBvbmx5IHdoZW5cbiAgICAvLyBhbGwgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzIGFyZW4ndCBwZW5kaW5nLlxuICAgIHJldHVybiBQcm9taXNlJDEuYWxsKGluaXRQcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYjtcbiAgICAgICAgLy8gR2V0IHRoZSBjb25uZWN0aW9uIG9yIG9wZW4gYSBuZXcgb25lIHdpdGhvdXQgdXBncmFkZS5cbiAgICAgICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvLCBzZWxmLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYjtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAvLyBTaGFyZSB0aGUgZmluYWwgY29ubmVjdGlvbiBhbW9uZ3N0IHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGZvcmFnZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2tdO1xuICAgICAgICAgICAgaWYgKGZvcmFnZSAhPT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFNlbGYgaXMgYWxyZWFkeSB1cC10by1kYXRlLlxuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gZGJJbmZvLmRiO1xuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBkYkluZm8udmVyc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9kZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIEl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuZnVuY3Rpb24gaXRlcmF0ZShpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5DdXJzb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbk51bWJlciA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3Vyc29yLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfZGVjb2RlQmxvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvcih2YWx1ZSwgY3Vyc29yLmtleSwgaXRlcmF0aW9uTnVtYmVyKyspO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3IgY2FsbGJhY2sgcmV0dXJucyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobm9uLWB1bmRlZmluZWRgKSB2YWx1ZSwgdGhlbiB3ZSBzdG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGl0ZXJhdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHNldEl0ZW0oa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBkYkluZm87XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGlmICh0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jaGVja0Jsb2JTdXBwb3J0KGRiSW5mby5kYikudGhlbihmdW5jdGlvbiAoYmxvYlN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2JTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbmNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IF9zYXZlXyBudWxsIGlzIGJlY2F1c2UgSUUgMTAgZG9lc1xuICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3VwcG9ydCBzYXZpbmcgdGhlIGBudWxsYCB0eXBlIGluIEluZGV4ZWREQi4gSG93XG4gICAgICAgICAgICAgICAgICAgIC8vIGlyb25pYywgZ2l2ZW4gdGhlIGJ1ZyBiZWxvdyFcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMTYxXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0IHRvIHVuZGVmaW5lZCBzbyB0aGUgdmFsdWUgcGFzc2VkIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFjay9wcm9taXNlIGlzIHRoZSBzYW1lIGFzIHdoYXQgb25lIHdvdWxkIGdldCBvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGBnZXRJdGVtKClgIGxhdGVyLiBUaGlzIGxlYWRzIHRvIHNvbWUgd2VpcmRuZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAoc2V0SXRlbSgnZm9vJywgdW5kZWZpbmVkKSB3aWxsIHJldHVybiBgbnVsbGApLCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IG15IGZhdWx0IGxvY2FsU3RvcmFnZSBpcyBvdXIgYmFzZWxpbmUgYW5kIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgd2VpcmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlcS5lcnJvciA/IHJlcS5lcnJvciA6IHJlcS50cmFuc2FjdGlvbi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgR3J1bnQgdGFzayB0byBtYWtlIHRoaXMgc2FmZSBmb3IgSUUgYW5kIHNvbWVcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgQW5kcm9pZCAoaW5jbHVkaW5nIHRob3NlIHVzZWQgYnkgQ29yZG92YSkuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGx5IElFIHdvbid0IGxpa2UgYC5kZWxldGUoKWAgYW5kIHdpbGwgaW5zaXN0IG9uXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIGBbJ2RlbGV0ZSddKClgLCBidXQgd2UgaGF2ZSBhIGJ1aWxkIHN0ZXAgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyBmaXhlcyB0aGlzIGZvciB1cyBub3cuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZVtcImRlbGV0ZVwiXShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdCB3aWxsIGJlIGFsc28gYmUgYWJvcnRlZCBpZiB3ZSd2ZSBleGNlZWRlZCBvdXIgc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAvLyBzcGFjZS5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXEuZXJyb3IgPyByZXEuZXJyb3IgOiByZXEudHJhbnNhY3Rpb24uZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gY2xlYXIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfV1JJVEUsIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gcmVxLmVycm9yID8gcmVxLmVycm9yIDogcmVxLnRyYW5zYWN0aW9uLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aChjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuY291bnQoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXkobiwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5LZXlDdXJzb3IoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZW4ndCBlbm91Z2gga2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0aGUgZmlyc3Qga2V5LCByZXR1cm4gaXQgaWYgdGhhdCdzIHdoYXQgdGhleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhbnRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXNrIHRoZSBjdXJzb3IgdG8gc2tpcCBhaGVhZCBuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY29yZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2Uobik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2UndmUgZ290IHRoZSBudGgga2V5LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5vcGVuS2V5Q3Vyc29yKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3Vyc29yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JbXCJjb250aW51ZVwiXSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZShvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHZhciBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNDdXJyZW50RGIgPSBvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSAmJiBzZWxmLl9kYkluZm8uZGI7XG5cbiAgICAgICAgdmFyIGRiUHJvbWlzZSA9IGlzQ3VycmVudERiID8gUHJvbWlzZSQxLnJlc29sdmUoc2VsZi5fZGJJbmZvLmRiKSA6IF9nZXRPcmlnaW5hbENvbm5lY3Rpb24ob3B0aW9ucykudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3JhZ2VzW2ldLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgcHJvbWlzZSA9IGRiUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BEQlByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IGlkYi5kZWxldGVEYXRhYmFzZShvcHRpb25zLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2luZyBhbGwgb3BlbiBjb25uZWN0aW9ucyBpbiBvbnZlcnNpb25jaGFuZ2UgaGFuZGxlciBzaG91bGQgcHJldmVudCB0aGlzIHNpdHVhdGlvbiwgYnV0IGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkbyBnZXQgaGVyZSwgaXQganVzdCBtZWFucyB0aGUgcmVxdWVzdCByZW1haW5zIHBlbmRpbmcgLSBldmVudHVhbGx5IGl0IHdpbGwgc3VjY2VlZCBvciBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdkcm9wSW5zdGFuY2UgYmxvY2tlZCBmb3IgZGF0YWJhc2UgXCInICsgb3B0aW9ucy5uYW1lICsgJ1wiIHVudGlsIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wREJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UuX2RiSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9yZWplY3RSZWFkaW5lc3Mob3B0aW9ucywgZXJyKSB8fCBQcm9taXNlJDEucmVzb2x2ZSgpKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlID0gZGJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG9wdGlvbnMuc3RvcmVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSBkYi52ZXJzaW9uICsgMTtcblxuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkcm9wT2JqZWN0UHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gaWRiLm9wZW4ob3B0aW9ucy5uYW1lLCBuZXdWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5kZWxldGVPYmplY3RTdG9yZShvcHRpb25zLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJvcE9iamVjdFByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9yYWdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mb3JhZ2UyID0gZm9yYWdlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mb3JhZ2UyLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UyLl9kYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIChfcmVqZWN0UmVhZGluZXNzKG9wdGlvbnMsIGVycikgfHwgUHJvbWlzZSQxLnJlc29sdmUoKSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGFzeW5jU3RvcmFnZSA9IHtcbiAgICBfZHJpdmVyOiAnYXN5bmNTdG9yYWdlJyxcbiAgICBfaW5pdFN0b3JhZ2U6IF9pbml0U3RvcmFnZSxcbiAgICBfc3VwcG9ydDogaXNJbmRleGVkREJWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSxcbiAgICBzZXRJdGVtOiBzZXRJdGVtLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0sXG4gICAgY2xlYXI6IGNsZWFyLFxuICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgIGtleToga2V5LFxuICAgIGtleXM6IGtleXMsXG4gICAgZHJvcEluc3RhbmNlOiBkcm9wSW5zdGFuY2Vcbn07XG5cbmZ1bmN0aW9uIGlzV2ViU1FMVmFsaWQoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvcGVuRGF0YWJhc2UgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vIFNhZGx5LCB0aGUgYmVzdCB3YXkgdG8gc2F2ZSBiaW5hcnkgZGF0YSBpbiBXZWJTUUwvbG9jYWxTdG9yYWdlIGlzIHNlcmlhbGl6aW5nXG4vLyBpdCB0byBCYXNlNjQsIHNvIHRoaXMgaXMgaG93IHdlIHN0b3JlIGl0IHRvIHByZXZlbnQgdmVyeSBzdHJhbmdlIGVycm9ycyB3aXRoIGxlc3Ncbi8vIHZlcmJvc2Ugd2F5cyBvZiBiaW5hcnkgPC0+IHN0cmluZyBkYXRhIHN0b3JhZ2UuXG52YXIgQkFTRV9DSEFSUyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxudmFyIEJMT0JfVFlQRV9QUkVGSVggPSAnfn5sb2NhbF9mb3JhZ2VfdHlwZX4nO1xudmFyIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVggPSAvXn5+bG9jYWxfZm9yYWdlX3R5cGV+KFtefl0rKX4vO1xuXG52YXIgU0VSSUFMSVpFRF9NQVJLRVIgPSAnX19sZnNjX186JztcbnZhciBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUi5sZW5ndGg7XG5cbi8vIE9NRyB0aGUgc2VyaWFsaXphdGlvbnMhXG52YXIgVFlQRV9BUlJBWUJVRkZFUiA9ICdhcmJmJztcbnZhciBUWVBFX0JMT0IgPSAnYmxvYic7XG52YXIgVFlQRV9JTlQ4QVJSQVkgPSAnc2kwOCc7XG52YXIgVFlQRV9VSU5UOEFSUkFZID0gJ3VpMDgnO1xudmFyIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVkgPSAndWljOCc7XG52YXIgVFlQRV9JTlQxNkFSUkFZID0gJ3NpMTYnO1xudmFyIFRZUEVfSU5UMzJBUlJBWSA9ICdzaTMyJztcbnZhciBUWVBFX1VJTlQxNkFSUkFZID0gJ3VyMTYnO1xudmFyIFRZUEVfVUlOVDMyQVJSQVkgPSAndWkzMic7XG52YXIgVFlQRV9GTE9BVDMyQVJSQVkgPSAnZmwzMic7XG52YXIgVFlQRV9GTE9BVDY0QVJSQVkgPSAnZmw2NCc7XG52YXIgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggKyBUWVBFX0FSUkFZQlVGRkVSLmxlbmd0aDtcblxudmFyIHRvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlcihzZXJpYWxpemVkU3RyaW5nKSB7XG4gICAgLy8gRmlsbCB0aGUgc3RyaW5nIGludG8gYSBBcnJheUJ1ZmZlci5cbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gc2VyaWFsaXplZFN0cmluZy5sZW5ndGggKiAwLjc1O1xuICAgIHZhciBsZW4gPSBzZXJpYWxpemVkU3RyaW5nLmxlbmd0aDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGVuY29kZWQxLCBlbmNvZGVkMiwgZW5jb2RlZDMsIGVuY29kZWQ0O1xuXG4gICAgaWYgKHNlcmlhbGl6ZWRTdHJpbmdbc2VyaWFsaXplZFN0cmluZy5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICBpZiAoc2VyaWFsaXplZFN0cmluZ1tzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpO1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICAgICAgZW5jb2RlZDEgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpXSk7XG4gICAgICAgIGVuY29kZWQyID0gQkFTRV9DSEFSUy5pbmRleE9mKHNlcmlhbGl6ZWRTdHJpbmdbaSArIDFdKTtcbiAgICAgICAgZW5jb2RlZDMgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpICsgMl0pO1xuICAgICAgICBlbmNvZGVkNCA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2kgKyAzXSk7XG5cbiAgICAgICAgLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuICAgICAgICBieXRlc1twKytdID0gZW5jb2RlZDEgPDwgMiB8IGVuY29kZWQyID4+IDQ7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDIgJiAxNSkgPDwgNCB8IGVuY29kZWQzID4+IDI7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDMgJiAzKSA8PCA2IHwgZW5jb2RlZDQgJiA2MztcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLy8gQ29udmVydHMgYSBidWZmZXIgdG8gYSBzdHJpbmcgdG8gc3RvcmUsIHNlcmlhbGl6ZWQsIGluIHRoZSBiYWNrZW5kXG4vLyBzdG9yYWdlIGxpYnJhcnkuXG5mdW5jdGlvbiBidWZmZXJUb1N0cmluZyhidWZmZXIpIHtcbiAgICAvLyBiYXNlNjQtYXJyYXlidWZmZXJcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIHZhciBiYXNlNjRTdHJpbmcgPSAnJztcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAvKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2ldID4+IDJdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaV0gJiAzKSA8PCA0IHwgYnl0ZXNbaSArIDFdID4+IDRdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpICsgMl0gPj4gNl07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZXMubGVuZ3RoICUgMyA9PT0gMikge1xuICAgICAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcuc3Vic3RyaW5nKDAsIGJhc2U2NFN0cmluZy5sZW5ndGggLSAxKSArICc9JztcbiAgICB9IGVsc2UgaWYgKGJ5dGVzLmxlbmd0aCAlIDMgPT09IDEpIHtcbiAgICAgICAgYmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnN1YnN0cmluZygwLCBiYXNlNjRTdHJpbmcubGVuZ3RoIC0gMikgKyAnPT0nO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG59XG5cbi8vIFNlcmlhbGl6ZSBhIHZhbHVlLCBhZnRlcndhcmRzIGV4ZWN1dGluZyBhIGNhbGxiYWNrICh3aGljaCB1c3VhbGx5XG4vLyBpbnN0cnVjdHMgdGhlIGBzZXRJdGVtKClgIGNhbGxiYWNrL3Byb21pc2UgdG8gYmUgZXhlY3V0ZWQpLiBUaGlzIGlzIGhvd1xuLy8gd2Ugc3RvcmUgYmluYXJ5IGRhdGEgd2l0aCBsb2NhbFN0b3JhZ2UuXG5mdW5jdGlvbiBzZXJpYWxpemUodmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlVHlwZSA9ICcnO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZVR5cGUgPSB0b1N0cmluZyQxLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENhbm5vdCB1c2UgYHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJgIG9yIHN1Y2ggaGVyZSwgYXMgdGhlc2VcbiAgICAvLyBjaGVja3MgZmFpbCB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIHVzaW5nIGNhc3Blci5qcy4uLlxuICAgIC8vXG4gICAgLy8gVE9ETzogU2VlIHdoeSB0aG9zZSB0ZXN0cyBmYWlsIGFuZCB1c2UgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgaWYgKHZhbHVlICYmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScgfHwgdmFsdWUuYnVmZmVyICYmIHRvU3RyaW5nJDEuY2FsbCh2YWx1ZS5idWZmZXIpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSkge1xuICAgICAgICAvLyBDb252ZXJ0IGJpbmFyeSBhcnJheXMgdG8gYSBzdHJpbmcgYW5kIHByZWZpeCB0aGUgc3RyaW5nIHdpdGhcbiAgICAgICAgLy8gYSBzcGVjaWFsIG1hcmtlci5cbiAgICAgICAgdmFyIGJ1ZmZlcjtcbiAgICAgICAgdmFyIG1hcmtlciA9IFNFUklBTElaRURfTUFSS0VSO1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0FSUkFZQlVGRkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyID0gdmFsdWUuYnVmZmVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQ4QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDhBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBVaW50OEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOENMQU1QRURBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQxNkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMTZBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDY0QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUNjRBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IHR5cGUgZm9yIEJpbmFyeUFycmF5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sobWFya2VyICsgYnVmZmVyVG9TdHJpbmcoYnVmZmVyKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAvLyBDb252ZXIgdGhlIGJsb2IgdG8gYSBiaW5hcnlBcnJheSBhbmQgdGhlbiB0byBhIHN0cmluZy5cbiAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgcHJlZml4IGZvciB0aGUgYmxvYiB0eXBlLlxuICAgICAgICAgICAgdmFyIHN0ciA9IEJMT0JfVFlQRV9QUkVGSVggKyB2YWx1ZS50eXBlICsgJ34nICsgYnVmZmVyVG9TdHJpbmcodGhpcy5yZXN1bHQpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhTRVJJQUxJWkVEX01BUktFUiArIFRZUEVfQkxPQiArIHN0cik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZG4ndCBjb252ZXJ0IHZhbHVlIGludG8gYSBKU09OIHN0cmluZzogXCIsIHZhbHVlKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIERlc2VyaWFsaXplIGRhdGEgd2UndmUgaW5zZXJ0ZWQgaW50byBhIHZhbHVlIGNvbHVtbi9maWVsZC4gV2UgcGxhY2Vcbi8vIHNwZWNpYWwgbWFya2VycyBpbnRvIG91ciBzdHJpbmdzIHRvIG1hcmsgdGhlbSBhcyBlbmNvZGVkOyB0aGlzIGlzbid0XG4vLyBhcyBuaWNlIGFzIGEgbWV0YSBmaWVsZCwgYnV0IGl0J3MgdGhlIG9ubHkgc2FuZSB0aGluZyB3ZSBjYW4gZG8gd2hpbHN0XG4vLyBrZWVwaW5nIGxvY2FsU3RvcmFnZSBzdXBwb3J0IGludGFjdC5cbi8vXG4vLyBPZnRlbnRpbWVzIHRoaXMgd2lsbCBqdXN0IGRlc2VyaWFsaXplIEpTT04gY29udGVudCwgYnV0IGlmIHdlIGhhdmUgYVxuLy8gc3BlY2lhbCBtYXJrZXIgKFNFUklBTElaRURfTUFSS0VSLCBkZWZpbmVkIGFib3ZlKSwgd2Ugd2lsbCBleHRyYWN0XG4vLyBzb21lIGtpbmQgb2YgYXJyYXlidWZmZXIvYmluYXJ5IGRhdGEvdHlwZWQgYXJyYXkgb3V0IG9mIHRoZSBzdHJpbmcuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgbWFya2VkIHRoaXMgc3RyaW5nIGFzIGJlaW5nIHNwZWNpYWxseSBzZXJpYWxpemVkIChpLmUuXG4gICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gc2VyaWFsaXplZCBKU09OKSwgd2UgY2FuIGp1c3QgcmV0dXJuIGl0IGFuZCBiZVxuICAgIC8vIGRvbmUgd2l0aCBpdC5cbiAgICBpZiAodmFsdWUuc3Vic3RyaW5nKDAsIFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCkgIT09IFNFUklBTElaRURfTUFSS0VSKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgZGVhbHMgd2l0aCBkZXNlcmlhbGl6aW5nIHNvbWUga2luZCBvZiBCbG9iIG9yXG4gICAgLy8gVHlwZWRBcnJheS4gRmlyc3Qgd2Ugc2VwYXJhdGUgb3V0IHRoZSB0eXBlIG9mIGRhdGEgd2UncmUgZGVhbGluZ1xuICAgIC8vIHdpdGggZnJvbSB0aGUgZGF0YSBpdHNlbGYuXG4gICAgdmFyIHNlcmlhbGl6ZWRTdHJpbmcgPSB2YWx1ZS5zdWJzdHJpbmcoVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuICAgIHZhciB0eXBlID0gdmFsdWUuc3Vic3RyaW5nKFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCwgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuXG4gICAgdmFyIGJsb2JUeXBlO1xuICAgIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGJsb2IgdHlwZSBzZXJpYWxpemF0aW9uIHN0cmF0ZWd5LlxuICAgIC8vIERCcyBjcmVhdGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgbG9jYWxGb3JhZ2Ugd2lsbCBzaW1wbHkgbm90IGhhdmUgdGhlIGJsb2IgdHlwZS5cbiAgICBpZiAodHlwZSA9PT0gVFlQRV9CTE9CICYmIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVgudGVzdChzZXJpYWxpemVkU3RyaW5nKSkge1xuICAgICAgICB2YXIgbWF0Y2hlciA9IHNlcmlhbGl6ZWRTdHJpbmcubWF0Y2goQkxPQl9UWVBFX1BSRUZJWF9SRUdFWCk7XG4gICAgICAgIGJsb2JUeXBlID0gbWF0Y2hlclsxXTtcbiAgICAgICAgc2VyaWFsaXplZFN0cmluZyA9IHNlcmlhbGl6ZWRTdHJpbmcuc3Vic3RyaW5nKG1hdGNoZXJbMF0ubGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyKHNlcmlhbGl6ZWRTdHJpbmcpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSByaWdodCB0eXBlIGJhc2VkIG9uIHRoZSBjb2RlL3R5cGUgc2V0IGR1cmluZ1xuICAgIC8vIHNlcmlhbGl6YXRpb24uXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVFlQRV9BUlJBWUJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIGNhc2UgVFlQRV9CTE9COlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogYmxvYlR5cGUgfSk7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQ4QVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQxNkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UMTZBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX1VJTlQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfRkxPQVQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0ZMT0FUNjRBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG52YXIgbG9jYWxmb3JhZ2VTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgIGRlc2VyaWFsaXplOiBkZXNlcmlhbGl6ZSxcbiAgICBzdHJpbmdUb0J1ZmZlcjogc3RyaW5nVG9CdWZmZXIsXG4gICAgYnVmZmVyVG9TdHJpbmc6IGJ1ZmZlclRvU3RyaW5nXG59O1xuXG4vKlxuICogSW5jbHVkZXMgY29kZSBmcm9tOlxuICpcbiAqIGJhc2U2NC1hcnJheWJ1ZmZlclxuICogaHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlclxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiBOaWtsYXMgdm9uIEhlcnR6ZW5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYlRhYmxlKHQsIGRiSW5mbywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICB0LmV4ZWN1dGVTcWwoJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyAnICsgJyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBrZXkgdW5pcXVlLCB2YWx1ZSknLCBbXSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xufVxuXG4vLyBPcGVuIHRoZSBXZWJTUUwgZGF0YWJhc2UgKGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBvbmUgaWYgb25lIGRpZG4ndFxuLy8gcHJldmlvdXNseSBleGlzdCksIHVzaW5nIGFueSBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDEob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IHR5cGVvZiBvcHRpb25zW2ldICE9PSAnc3RyaW5nJyA/IG9wdGlvbnNbaV0udG9TdHJpbmcoKSA6IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGJJbmZvUHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBPcGVuIHRoZSBkYXRhYmFzZTsgdGhlIG9wZW5EYXRhYmFzZSBBUEkgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIC8vIGNyZWF0ZSBpdCBmb3IgdXMgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRiSW5mby5kYiA9IG9wZW5EYXRhYmFzZShkYkluZm8ubmFtZSwgU3RyaW5nKGRiSW5mby52ZXJzaW9uKSwgZGJJbmZvLmRlc2NyaXB0aW9uLCBkYkluZm8uc2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgb3VyIGtleS92YWx1ZSB0YWJsZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNyZWF0ZURiVGFibGUodCwgZGJJbmZvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuICAgIHJldHVybiBkYkluZm9Qcm9taXNlO1xufVxuXG5mdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgc3FsU3RhdGVtZW50LCBhcmdzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IGVycm9yLlNZTlRBWF9FUlIpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA9ID9cIiwgW2RiSW5mby5zdG9yZU5hbWVdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy5yb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGFibGUgaXMgbWlzc2luZyAod2FzIGRlbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlLWNyZWF0ZSBpdCB0YWJsZSBhbmQgcmV0cnlcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGJUYWJsZSh0LCBkYkluZm8sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayh0LCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrKHQsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0sIGVycm9yQ2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtJDEoa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUICogRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPyBMSU1JVCAxJywgW2tleV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLnJvd3MubGVuZ3RoID8gcmVzdWx0cy5yb3dzLml0ZW0oMCkudmFsdWUgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQgY29udGVudCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHVucGFjay5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRlJDEoaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcblxuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgKiBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSByZXN1bHRzLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSByb3dzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHJvd3MuaXRlbShpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBzZXJpYWxpemVkIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdW5wYWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgaXRlbS5rZXksIGkgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdm9pZCgwKSBwcmV2ZW50cyBwcm9ibGVtcyB3aXRoIHJlZGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYHVuZGVmaW5lZGAuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIF9zZXRJdGVtKGtleSwgdmFsdWUsIGNhbGxiYWNrLCByZXRyaWVzTGVmdCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVGhlIGxvY2FsU3RvcmFnZSBBUEkgZG9lc24ndCByZXR1cm4gdW5kZWZpbmVkIHZhbHVlcyBpbiBhblxuICAgICAgICAgICAgLy8gXCJleHBlY3RlZFwiIHdheSwgc28gdW5kZWZpbmVkIGlzIGFsd2F5cyBjYXN0IHRvIG51bGwgaW4gYWxsXG4gICAgICAgICAgICAvLyBkcml2ZXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3B1bGwvNDJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgJyArICcoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KScsIFtrZXksIHZhbHVlXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChzcWxFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIGZhaWxlZDsgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgcXVvdGEgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3FsRXJyb3IuY29kZSA9PT0gc3FsRXJyb3IuUVVPVEFfRVJSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVqZWN0IHRoZSBjYWxsYmFjayBvdXRyaWdodCBmb3Igbm93LCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHdvcnRoIHRyeWluZyB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHVzZXIgYWNjZXB0cyB0aGUgcHJvbXB0IHRvIHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgc3RvcmFnZSBvbiBTYWZhcmksIHRoaXMgZXJyb3Igd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIGNhbGxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyaWVzTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfc2V0SXRlbS5hcHBseShzZWxmLCBba2V5LCBvcmlnaW5hbFZhbHVlLCBjYWxsYmFjaywgcmV0cmllc0xlZnQgLSAxXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBzZXRJdGVtJDEoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gX3NldEl0ZW0uYXBwbHkodGhpcywgW2tleSwgdmFsdWUsIGNhbGxiYWNrLCAxXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPycsIFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBEZWxldGVzIGV2ZXJ5IGl0ZW0gaW4gdGhlIHRhYmxlLlxuLy8gVE9ETzogRmluZCBvdXQgaWYgdGhpcyByZXNldHMgdGhlIEFVVE9fSU5DUkVNRU5UIG51bWJlci5cbmZ1bmN0aW9uIGNsZWFyJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIERvZXMgYSBzaW1wbGUgYENPVU5UKGtleSlgIHRvIGdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpblxuLy8gbG9jYWxGb3JhZ2UuXG5mdW5jdGlvbiBsZW5ndGgkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBBaGhoLCBTUUwgbWFrZXMgdGhpcyBvbmUgc29vb29vbyBlYXN5LlxuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMucm93cy5pdGVtKDApLmM7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXR1cm4gdGhlIGtleSBsb2NhdGVkIGF0IGtleSBpbmRleCBYOyBlc3NlbnRpYWxseSBnZXRzIHRoZSBrZXkgZnJvbSBhXG4vLyBgV0hFUkUgaWQgPSA/YC4gVGhpcyBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IEkgY2FuIHRoaW5rIHRvIGltcGxlbWVudFxuLy8gdGhpcyByYXJlbHktdXNlZCAoaW4gbXkgZXhwZXJpZW5jZSkgcGFydCBvZiB0aGUgQVBJLCBidXQgaXQgY2FuIHNlZW1cbi8vIGluY29uc2lzdGVudCwgYmVjYXVzZSB3ZSBkbyBgSU5TRVJUIE9SIFJFUExBQ0UgSU5UT2Agb24gYHNldEl0ZW0oKWAsIHNvXG4vLyB0aGUgSUQgb2YgZWFjaCBrZXkgd2lsbCBjaGFuZ2UgZXZlcnkgdGltZSBpdCdzIHVwZGF0ZWQuIFBlcmhhcHMgYSBzdG9yZWRcbi8vIHByb2NlZHVyZSBmb3IgdGhlIGBzZXRJdGVtKClgIFNRTCB3b3VsZCBzb2x2ZSB0aGlzIHByb2JsZW0/XG4vLyBUT0RPOiBEb24ndCBjaGFuZ2UgSUQgb24gYHNldEl0ZW0oKWAuXG5mdW5jdGlvbiBrZXkkMShuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCBrZXkgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUgaWQgPSA/IExJTUlUIDEnLCBbbiArIDFdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVzdWx0cy5yb3dzLmxlbmd0aCA/IHJlc3VsdHMucm93cy5pdGVtKDApLmtleSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1Qga2V5IEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gocmVzdWx0cy5yb3dzLml0ZW0oaSkua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRhdGFiYXNlLyNkYXRhYmFzZXNcbi8vID4gVGhlcmUgaXMgbm8gd2F5IHRvIGVudW1lcmF0ZSBvciBkZWxldGUgdGhlIGRhdGFiYXNlcyBhdmFpbGFibGUgZm9yIGFuIG9yaWdpbiBmcm9tIHRoaXMgQVBJLlxuZnVuY3Rpb24gZ2V0QWxsU3RvcmVOYW1lcyhkYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA8PiAnX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fJ1wiLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RvcmVOYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVOYW1lcy5wdXNoKHJlc3VsdHMucm93cy5pdGVtKGkpLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBkYjogZGIsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlTmFtZXM6IHN0b3JlTmFtZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICByZWplY3Qoc3FsRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlJDEob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IGN1cnJlbnRDb25maWcubmFtZTtcbiAgICAgICAgb3B0aW9ucy5zdG9yZU5hbWUgPSBvcHRpb25zLnN0b3JlTmFtZSB8fCBjdXJyZW50Q29uZmlnLnN0b3JlTmFtZTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoJ0ludmFsaWQgYXJndW1lbnRzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHZhciBkYjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZGIgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgZGIgPSBzZWxmLl9kYkluZm8uZGI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKG9wdGlvbnMubmFtZSwgJycsICcnLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIGRyb3AgYWxsIGRhdGFiYXNlIHRhYmxlc1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZ2V0QWxsU3RvcmVOYW1lcyhkYikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZGI6IGRiLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZU5hbWVzOiBbb3B0aW9ucy5zdG9yZU5hbWVdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25JbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyb3BUYWJsZShzdG9yZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoJ0RST1AgVEFCTEUgSUYgRVhJU1RTICcgKyBzdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9wZXJhdGlvbkluZm8uc3RvcmVOYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGRyb3BUYWJsZShvcGVyYXRpb25JbmZvLnN0b3JlTmFtZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UkMS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIHdlYlNRTFN0b3JhZ2UgPSB7XG4gICAgX2RyaXZlcjogJ3dlYlNRTFN0b3JhZ2UnLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDEsXG4gICAgX3N1cHBvcnQ6IGlzV2ViU1FMVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDEsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQxLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMSxcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDEsXG4gICAgY2xlYXI6IGNsZWFyJDEsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMSxcbiAgICBrZXk6IGtleSQxLFxuICAgIGtleXM6IGtleXMkMSxcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQxXG59O1xuXG5mdW5jdGlvbiBpc0xvY2FsU3RvcmFnZVZhbGlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiAnc2V0SXRlbScgaW4gbG9jYWxTdG9yYWdlICYmXG4gICAgICAgIC8vIGluIElFOCB0eXBlb2YgbG9jYWxTdG9yYWdlLnNldEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICEhbG9jYWxTdG9yYWdlLnNldEl0ZW07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIGRlZmF1bHRDb25maWcpIHtcbiAgICB2YXIga2V5UHJlZml4ID0gb3B0aW9ucy5uYW1lICsgJy8nO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RvcmVOYW1lICE9PSBkZWZhdWx0Q29uZmlnLnN0b3JlTmFtZSkge1xuICAgICAgICBrZXlQcmVmaXggKz0gb3B0aW9ucy5zdG9yZU5hbWUgKyAnLyc7XG4gICAgfVxuICAgIHJldHVybiBrZXlQcmVmaXg7XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSB0aHJvd3Mgd2hlbiBzYXZpbmcgYW4gaXRlbVxuZnVuY3Rpb24gY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHtcbiAgICB2YXIgbG9jYWxTdG9yYWdlVGVzdEtleSA9ICdfbG9jYWxmb3JhZ2Vfc3VwcG9ydF90ZXN0JztcblxuICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU3RvcmFnZVRlc3RLZXksIHRydWUpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsb2NhbFN0b3JhZ2VUZXN0S2V5KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSBpcyB1c2FibGUgYW5kIGFsbG93cyB0byBzYXZlIGFuIGl0ZW1cbi8vIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBsb2NhbFN0b3JhZ2UgaXMgdXNhYmxlIGluIFNhZmFyaSBQcml2YXRlIEJyb3dzaW5nXG4vLyBtb2RlLCBvciBpbiBhbnkgb3RoZXIgY2FzZSB3aGVyZSB0aGUgYXZhaWxhYmxlIHF1b3RhIGZvciBsb2NhbFN0b3JhZ2Vcbi8vIGlzIDAgYW5kIHRoZXJlIHdhc24ndCBhbnkgc2F2ZWQgaXRlbXMgeWV0LlxuZnVuY3Rpb24gX2lzTG9jYWxTdG9yYWdlVXNhYmxlKCkge1xuICAgIHJldHVybiAhY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHx8IGxvY2FsU3RvcmFnZS5sZW5ndGggPiAwO1xufVxuXG4vLyBDb25maWcgdGhlIGxvY2FsU3RvcmFnZSBiYWNrZW5kLCB1c2luZyBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDIob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge307XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYkluZm9baV0gPSBvcHRpb25zW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGJJbmZvLmtleVByZWZpeCA9IF9nZXRLZXlQcmVmaXgob3B0aW9ucywgc2VsZi5fZGVmYXVsdENvbmZpZyk7XG5cbiAgICBpZiAoIV9pc0xvY2FsU3RvcmFnZVVzYWJsZSgpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCk7XG4gICAgfVxuXG4gICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuXG4gICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG59XG5cbi8vIFJlbW92ZSBhbGwga2V5cyBmcm9tIHRoZSBkYXRhc3RvcmUsIGVmZmVjdGl2ZWx5IGRlc3Ryb3lpbmcgYWxsIGRhdGEgaW5cbi8vIHRoZSBhcHAncyBrZXkvdmFsdWUgc3RvcmUhXG5mdW5jdGlvbiBjbGVhciQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gc2VsZi5fZGJJbmZvLmtleVByZWZpeDtcblxuICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcblxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGtleVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXRyaWV2ZSBhbiBpdGVtIGZyb20gdGhlIHN0b3JlLiBVbmxpa2UgdGhlIG9yaWdpbmFsIGFzeW5jX3N0b3JhZ2Vcbi8vIGxpYnJhcnkgaW4gR2FpYSwgd2UgZG9uJ3QgbW9kaWZ5IHJldHVybiB2YWx1ZXMgYXQgYWxsLiBJZiBhIGtleSdzIHZhbHVlXG4vLyBpcyBgdW5kZWZpbmVkYCwgd2UgcGFzcyB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGRiSW5mby5rZXlQcmVmaXggKyBrZXkpO1xuXG4gICAgICAgIC8vIElmIGEgcmVzdWx0IHdhcyBmb3VuZCwgcGFyc2UgaXQgZnJvbSB0aGUgc2VyaWFsaXplZFxuICAgICAgICAvLyBzdHJpbmcgaW50byBhIEpTIG9iamVjdC4gSWYgcmVzdWx0IGlzbid0IHRydXRoeSwgdGhlIGtleVxuICAgICAgICAvLyBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0IHRvIHRoZVxuICAgICAgICAvLyBjYWxsYmFjay5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBJdGVyYXRlIG92ZXIgYWxsIGl0ZW1zIGluIHRoZSBzdG9yZS5cbmZ1bmN0aW9uIGl0ZXJhdGUkMihpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGRiSW5mby5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlQcmVmaXhMZW5ndGggPSBrZXlQcmVmaXgubGVuZ3RoO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcblxuICAgICAgICAvLyBXZSB1c2UgYSBkZWRpY2F0ZWQgaXRlcmF0b3IgaW5zdGVhZCBvZiB0aGUgYGlgIHZhcmlhYmxlIGJlbG93XG4gICAgICAgIC8vIHNvIG90aGVyIGtleXMgd2UgZmV0Y2ggaW4gbG9jYWxTdG9yYWdlIGFyZW4ndCBjb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBgaXRlcmF0aW9uTnVtYmVyYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlKClgXG4gICAgICAgIC8vIGNhbGxiYWNrLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGdpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9wdWxsLzQzNSNkaXNjdXNzaW9uX3IzODA2MTUzMFxuICAgICAgICB2YXIgaXRlcmF0aW9uTnVtYmVyID0gMTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihrZXlQcmVmaXgpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXG4gICAgICAgICAgICAvLyBJZiBhIHJlc3VsdCB3YXMgZm91bmQsIHBhcnNlIGl0IGZyb20gdGhlIHNlcmlhbGl6ZWRcbiAgICAgICAgICAgIC8vIHN0cmluZyBpbnRvIGEgSlMgb2JqZWN0LiBJZiByZXN1bHQgaXNuJ3QgdHJ1dGh5LCB0aGVcbiAgICAgICAgICAgIC8vIGtleSBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0XG4gICAgICAgICAgICAvLyB0byB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwga2V5LnN1YnN0cmluZyhrZXlQcmVmaXhMZW5ndGgpLCBpdGVyYXRpb25OdW1iZXIrKyk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTYW1lIGFzIGxvY2FsU3RvcmFnZSdzIGtleSgpIG1ldGhvZCwgZXhjZXB0IHRha2VzIGEgY2FsbGJhY2suXG5mdW5jdGlvbiBrZXkkMihuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5rZXkobik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXggZnJvbSB0aGUga2V5LCBpZiBhIGtleSBpcyBmb3VuZC5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZyhkYkluZm8ua2V5UHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5cyQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbUtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG4gICAgICAgICAgICBpZiAoaXRlbUtleS5pbmRleE9mKGRiSW5mby5rZXlQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGl0ZW1LZXkuc3Vic3RyaW5nKGRiSW5mby5rZXlQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFN1cHBseSB0aGUgbnVtYmVyIG9mIGtleXMgaW4gdGhlIGRhdGFzdG9yZSB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5mdW5jdGlvbiBsZW5ndGgkMihjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYua2V5cygpLnRoZW4oZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgc3RvcmUsIG5pY2UgYW5kIHNpbXBsZS5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZGJJbmZvLmtleVByZWZpeCArIGtleSk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTZXQgYSBrZXkncyB2YWx1ZSBhbmQgcnVuIGFuIG9wdGlvbmFsIGNhbGxiYWNrIG9uY2UgdGhlIHZhbHVlIGlzIHNldC5cbi8vIFVubGlrZSBHYWlhJ3MgaW1wbGVtZW50YXRpb24sIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHZhbHVlLFxuLy8gaW4gY2FzZSB5b3Ugd2FudCB0byBvcGVyYXRlIG9uIHRoYXQgdmFsdWUgb25seSBhZnRlciB5b3UncmUgc3VyZSBpdFxuLy8gc2F2ZWQsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuXG5mdW5jdGlvbiBzZXRJdGVtJDIoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDb252ZXJ0IHVuZGVmaW5lZCB2YWx1ZXMgdG8gbnVsbC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvcHVsbC80MlxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5zZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlLCBlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShkYkluZm8ua2V5UHJlZml4ICsga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UgY2FwYWNpdHkgZXhjZWVkZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYSBzcGVjaWZpYyBlcnJvci9ldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdRdW90YUV4Y2VlZGVkRXJyb3InIHx8IGUubmFtZSA9PT0gJ05TX0VSUk9SX0RPTV9RVU9UQV9SRUFDSEVEJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZSQyKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUob3B0aW9ucy5uYW1lICsgJy8nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIHNlbGYuX2RlZmF1bHRDb25maWcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2V5UHJlZml4KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2Yoa2V5UHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGxvY2FsU3RvcmFnZVdyYXBwZXIgPSB7XG4gICAgX2RyaXZlcjogJ2xvY2FsU3RvcmFnZVdyYXBwZXInLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDIsXG4gICAgX3N1cHBvcnQ6IGlzTG9jYWxTdG9yYWdlVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDIsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQyLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMixcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDIsXG4gICAgY2xlYXI6IGNsZWFyJDIsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMixcbiAgICBrZXk6IGtleSQyLFxuICAgIGtleXM6IGtleXMkMixcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQyXG59O1xuXG52YXIgc2FtZVZhbHVlID0gZnVuY3Rpb24gc2FtZVZhbHVlKHgsIHkpIHtcbiAgICByZXR1cm4geCA9PT0geSB8fCB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT09ICdudW1iZXInICYmIGlzTmFOKHgpICYmIGlzTmFOKHkpO1xufTtcblxudmFyIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHNlYXJjaEVsZW1lbnQpIHtcbiAgICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBpZiAoc2FtZVZhbHVlKGFycmF5W2ldLCBzZWFyY2hFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLy8gRHJpdmVycyBhcmUgc3RvcmVkIGhlcmUgd2hlbiBgZGVmaW5lRHJpdmVyKClgIGlzIGNhbGxlZC5cbi8vIFRoZXkgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZiBsb2NhbEZvcmFnZS5cbnZhciBEZWZpbmVkRHJpdmVycyA9IHt9O1xuXG52YXIgRHJpdmVyU3VwcG9ydCA9IHt9O1xuXG52YXIgRGVmYXVsdERyaXZlcnMgPSB7XG4gICAgSU5ERVhFRERCOiBhc3luY1N0b3JhZ2UsXG4gICAgV0VCU1FMOiB3ZWJTUUxTdG9yYWdlLFxuICAgIExPQ0FMU1RPUkFHRTogbG9jYWxTdG9yYWdlV3JhcHBlclxufTtcblxudmFyIERlZmF1bHREcml2ZXJPcmRlciA9IFtEZWZhdWx0RHJpdmVycy5JTkRFWEVEREIuX2RyaXZlciwgRGVmYXVsdERyaXZlcnMuV0VCU1FMLl9kcml2ZXIsIERlZmF1bHREcml2ZXJzLkxPQ0FMU1RPUkFHRS5fZHJpdmVyXTtcblxudmFyIE9wdGlvbmFsRHJpdmVyTWV0aG9kcyA9IFsnZHJvcEluc3RhbmNlJ107XG5cbnZhciBMaWJyYXJ5TWV0aG9kcyA9IFsnY2xlYXInLCAnZ2V0SXRlbScsICdpdGVyYXRlJywgJ2tleScsICdrZXlzJywgJ2xlbmd0aCcsICdyZW1vdmVJdGVtJywgJ3NldEl0ZW0nXS5jb25jYXQoT3B0aW9uYWxEcml2ZXJNZXRob2RzKTtcblxudmFyIERlZmF1bHRDb25maWcgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRyaXZlcjogRGVmYXVsdERyaXZlck9yZGVyLnNsaWNlKCksXG4gICAgbmFtZTogJ2xvY2FsZm9yYWdlJyxcbiAgICAvLyBEZWZhdWx0IERCIHNpemUgaXMgX0pVU1QgVU5ERVJfIDVNQiwgYXMgaXQncyB0aGUgaGlnaGVzdCBzaXplXG4gICAgLy8gd2UgY2FuIHVzZSB3aXRob3V0IGEgcHJvbXB0LlxuICAgIHNpemU6IDQ5ODA3MzYsXG4gICAgc3RvcmVOYW1lOiAna2V5dmFsdWVwYWlycycsXG4gICAgdmVyc2lvbjogMS4wXG59O1xuXG5mdW5jdGlvbiBjYWxsV2hlblJlYWR5KGxvY2FsRm9yYWdlSW5zdGFuY2UsIGxpYnJhcnlNZXRob2QpIHtcbiAgICBsb2NhbEZvcmFnZUluc3RhbmNlW2xpYnJhcnlNZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2FyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBsb2NhbEZvcmFnZUluc3RhbmNlLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxGb3JhZ2VJbnN0YW5jZVtsaWJyYXJ5TWV0aG9kXS5hcHBseShsb2NhbEZvcmFnZUluc3RhbmNlLCBfYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gYXJnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShhcmdbX2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF1bX2tleV0gPSBhcmdbX2tleV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXVtfa2V5XSA9IGFyZ1tfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmd1bWVudHNbMF07XG59XG5cbnZhciBMb2NhbEZvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMb2NhbEZvcmFnZShvcHRpb25zKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb2NhbEZvcmFnZSk7XG5cbiAgICAgICAgZm9yICh2YXIgZHJpdmVyVHlwZUtleSBpbiBEZWZhdWx0RHJpdmVycykge1xuICAgICAgICAgICAgaWYgKERlZmF1bHREcml2ZXJzLmhhc093blByb3BlcnR5KGRyaXZlclR5cGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlciA9IERlZmF1bHREcml2ZXJzW2RyaXZlclR5cGVLZXldO1xuICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyLl9kcml2ZXI7XG4gICAgICAgICAgICAgICAgdGhpc1tkcml2ZXJUeXBlS2V5XSA9IGRyaXZlck5hbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoIURlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IGRyaXZlcnMgY2FuIGJlIGRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBibG9ja2luZyBtYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEcml2ZXIoZHJpdmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29uZmlnID0gZXh0ZW5kKHt9LCBEZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gZXh0ZW5kKHt9LCB0aGlzLl9kZWZhdWx0Q29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW5pdERyaXZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RiSW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCk7XG4gICAgICAgIHRoaXMuc2V0RHJpdmVyKHRoaXMuX2NvbmZpZy5kcml2ZXIpW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge30pO1xuICAgIH1cblxuICAgIC8vIFNldCBhbnkgY29uZmlnIHZhbHVlcyBmb3IgbG9jYWxGb3JhZ2U7IGNhbiBiZSBjYWxsZWQgYW55dGltZSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgQVBJIGNhbGwgKGUuZy4gYGdldEl0ZW1gLCBgc2V0SXRlbWApLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBvcHRpb25zIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWdcbiAgICAvLyB2YWx1ZXMuXG5cblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jb25maWcgPSBmdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICAgICAgICAvLyBJZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBpcyBhbiBvYmplY3QsIHdlIHVzZSBpdCB0byBzZXQgdmFsdWVzLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHJldHVybiBlaXRoZXIgYSBzcGVjaWZpZWQgY29uZmlnIHZhbHVlIG9yIGFsbFxuICAgICAgICAvLyBjb25maWcgdmFsdWVzLlxuICAgICAgICBpZiAoKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvcHRpb25zKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGZvcmFnZSBpcyByZWFkeSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQsIHdlIGNhbid0IHNldFxuICAgICAgICAgICAgLy8gYW55IG5ldyBjb25maWd1cmF0aW9uIHZhbHVlcy4gSW5zdGVhZCwgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkNhbid0IGNhbGwgY29uZmlnKCkgYWZ0ZXIgbG9jYWxmb3JhZ2UgXCIgKyAnaGFzIGJlZW4gdXNlZC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09ICdzdG9yZU5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBvcHRpb25zW2ldLnJlcGxhY2UoL1xcVy9nLCAnXycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAndmVyc2lvbicgJiYgdHlwZW9mIG9wdGlvbnNbaV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0RhdGFiYXNlIHZlcnNpb24gbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25maWdbaV0gPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZnRlciBhbGwgY29uZmlnIG9wdGlvbnMgYXJlIHNldCBhbmRcbiAgICAgICAgICAgIC8vIHRoZSBkcml2ZXIgb3B0aW9uIGlzIHVzZWQsIHRyeSBzZXR0aW5nIGl0XG4gICAgICAgICAgICBpZiAoJ2RyaXZlcicgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmRyaXZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldERyaXZlcih0aGlzLl9jb25maWcuZHJpdmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnW29wdGlvbnNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBVc2VkIHRvIGRlZmluZSBhIGN1c3RvbSBkcml2ZXIsIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZlxuICAgIC8vIGxvY2FsRm9yYWdlLlxuXG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZGVmaW5lRHJpdmVyID0gZnVuY3Rpb24gZGVmaW5lRHJpdmVyKGRyaXZlck9iamVjdCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXJPYmplY3QuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxpYW5jZUVycm9yID0gbmV3IEVycm9yKCdDdXN0b20gZHJpdmVyIG5vdCBjb21wbGlhbnQ7IHNlZSAnICsgJ2h0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vbG9jYWxGb3JhZ2UvI2RlZmluZWRyaXZlcicpO1xuXG4gICAgICAgICAgICAgICAgLy8gQSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgZGVmaW5lZCBhbmQgbm90IG92ZXJsYXAgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBsaWJyYXJ5LWRlZmluZWQsIGRlZmF1bHQgZHJpdmVycy5cbiAgICAgICAgICAgICAgICBpZiAoIWRyaXZlck9iamVjdC5fZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjb21wbGlhbmNlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck1ldGhvZHMgPSBMaWJyYXJ5TWV0aG9kcy5jb25jYXQoJ19pbml0U3RvcmFnZScpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkcml2ZXJNZXRob2RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJNZXRob2ROYW1lID0gZHJpdmVyTWV0aG9kc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGEgbWV0aG9kIGV2ZW4gd2hlbiBvcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZXF1aXJlZCA9ICFpbmNsdWRlcyhPcHRpb25hbERyaXZlck1ldGhvZHMsIGRyaXZlck1ldGhvZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzUmVxdWlyZWQgfHwgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdKSAmJiB0eXBlb2YgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoY29tcGxpYW5jZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmVNaXNzaW5nTWV0aG9kcyA9IGZ1bmN0aW9uIGNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5ID0gZnVuY3Rpb24gbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5KG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdNZXRob2QgJyArIG1ldGhvZE5hbWUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuID0gT3B0aW9uYWxEcml2ZXJNZXRob2RzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxEcml2ZXJNZXRob2QgPSBPcHRpb25hbERyaXZlck1ldGhvZHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkcml2ZXJPYmplY3Rbb3B0aW9uYWxEcml2ZXJNZXRob2RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0W29wdGlvbmFsRHJpdmVyTWV0aG9kXSA9IG1ldGhvZE5vdEltcGxlbWVudGVkRmFjdG9yeShvcHRpb25hbERyaXZlck1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZmlndXJlTWlzc2luZ01ldGhvZHMoKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXREcml2ZXJTdXBwb3J0ID0gZnVuY3Rpb24gc2V0RHJpdmVyU3VwcG9ydChzdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdSZWRlZmluaW5nIExvY2FsRm9yYWdlIGRyaXZlcjogJyArIGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdID0gZHJpdmVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBEcml2ZXJTdXBwb3J0W2RyaXZlck5hbWVdID0gc3VwcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIGEgdGhlbiwgc28gdGhhdCB3ZSBjYW4gZGVmaW5lXG4gICAgICAgICAgICAgICAgICAgIC8vIGRyaXZlcnMgdGhhdCBoYXZlIHNpbXBsZSBfc3VwcG9ydCBtZXRob2RzXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGEgYmxvY2tpbmcgbWFubmVyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCdfc3VwcG9ydCcgaW4gZHJpdmVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXJPYmplY3QuX3N1cHBvcnQgJiYgdHlwZW9mIGRyaXZlck9iamVjdC5fc3VwcG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0Ll9zdXBwb3J0KCkudGhlbihzZXREcml2ZXJTdXBwb3J0LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHJpdmVyU3VwcG9ydCghIWRyaXZlck9iamVjdC5fc3VwcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXREcml2ZXJTdXBwb3J0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmRyaXZlciA9IGZ1bmN0aW9uIGRyaXZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyaXZlciB8fCBudWxsO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0RHJpdmVyID0gZnVuY3Rpb24gZ2V0RHJpdmVyKGRyaXZlck5hbWUsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBnZXREcml2ZXJQcm9taXNlID0gRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0gPyBQcm9taXNlJDEucmVzb2x2ZShEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkgOiBQcm9taXNlJDEucmVqZWN0KG5ldyBFcnJvcignRHJpdmVyIG5vdCBmb3VuZC4nKSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhnZXREcml2ZXJQcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBnZXREcml2ZXJQcm9taXNlO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplciA9IGZ1bmN0aW9uIGdldFNlcmlhbGl6ZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlcmlhbGl6ZXJQcm9taXNlID0gUHJvbWlzZSQxLnJlc29sdmUobG9jYWxmb3JhZ2VTZXJpYWxpemVyKTtcbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhzZXJpYWxpemVyUHJvbWlzZSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplclByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uIHJlYWR5KGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2RyaXZlclNldC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9yZWFkeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdERyaXZlcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZHk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5zZXREcml2ZXIgPSBmdW5jdGlvbiBzZXREcml2ZXIoZHJpdmVycywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghaXNBcnJheShkcml2ZXJzKSkge1xuICAgICAgICAgICAgZHJpdmVycyA9IFtkcml2ZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ZWREcml2ZXJzID0gdGhpcy5fZ2V0U3VwcG9ydGVkRHJpdmVycyhkcml2ZXJzKTtcblxuICAgICAgICBmdW5jdGlvbiBzZXREcml2ZXJUb0NvbmZpZygpIHtcbiAgICAgICAgICAgIHNlbGYuX2NvbmZpZy5kcml2ZXIgPSBzZWxmLmRyaXZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kU2VsZldpdGhEcml2ZXIoZHJpdmVyKSB7XG4gICAgICAgICAgICBzZWxmLl9leHRlbmQoZHJpdmVyKTtcbiAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdFN0b3JhZ2Uoc2VsZi5fY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluaXREcml2ZXIoc3VwcG9ydGVkRHJpdmVycykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudERyaXZlckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyaXZlclByb21pc2VMb29wKCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudERyaXZlckluZGV4IDwgc3VwcG9ydGVkRHJpdmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1tjdXJyZW50RHJpdmVySW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERyaXZlckluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGV4dGVuZFNlbGZXaXRoRHJpdmVyKVtcImNhdGNoXCJdKGRyaXZlclByb21pc2VMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXJTZXQgPSBQcm9taXNlJDEucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RyaXZlclNldDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJpdmVyUHJvbWlzZUxvb3AoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBhIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiBwcm9ncmVzc1xuICAgICAgICAvLyBzbyB3YWl0IGZvciBpdCB0byBmaW5pc2ggaW4gb3JkZXIgdG8gYXZvaWQgYSBwb3NzaWJsZVxuICAgICAgICAvLyByYWNlIGNvbmRpdGlvbiB0byBzZXQgX2RiSW5mb1xuICAgICAgICB2YXIgb2xkRHJpdmVyU2V0RG9uZSA9IHRoaXMuX2RyaXZlclNldCAhPT0gbnVsbCA/IHRoaXMuX2RyaXZlclNldFtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgICAgICB9KSA6IFByb21pc2UkMS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gb2xkRHJpdmVyU2V0RG9uZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1swXTtcbiAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGZ1bmN0aW9uIChkcml2ZXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICBzZXREcml2ZXJUb0NvbmZpZygpO1xuICAgICAgICAgICAgICAgIHNlbGYuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2luaXREcml2ZXIgPSBpbml0RHJpdmVyKHN1cHBvcnRlZERyaXZlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgc2VsZi5fZHJpdmVyU2V0ID0gUHJvbWlzZSQxLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyU2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHRoaXMuX2RyaXZlclNldCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJpdmVyU2V0O1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuc3VwcG9ydHMgPSBmdW5jdGlvbiBzdXBwb3J0cyhkcml2ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiAhIURyaXZlclN1cHBvcnRbZHJpdmVyTmFtZV07XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZXh0ZW5kID0gZnVuY3Rpb24gX2V4dGVuZChsaWJyYXJ5TWV0aG9kc0FuZFByb3BlcnRpZXMpIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGxpYnJhcnlNZXRob2RzQW5kUHJvcGVydGllcyk7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZ2V0U3VwcG9ydGVkRHJpdmVycyA9IGZ1bmN0aW9uIF9nZXRTdXBwb3J0ZWREcml2ZXJzKGRyaXZlcnMpIHtcbiAgICAgICAgdmFyIHN1cHBvcnRlZERyaXZlcnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRyaXZlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRzKGRyaXZlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkRHJpdmVycy5wdXNoKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWREcml2ZXJzO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSA9IGZ1bmN0aW9uIF93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKSB7XG4gICAgICAgIC8vIEFkZCBhIHN0dWIgZm9yIGVhY2ggZHJpdmVyIEFQSSBtZXRob2QgdGhhdCBkZWxheXMgdGhlIGNhbGwgdG8gdGhlXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ldGhvZCB1bnRpbCBsb2NhbEZvcmFnZSBpcyByZWFkeS4gVGhlc2Ugc3R1YnNcbiAgICAgICAgLy8gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZHJpdmVyIG1ldGhvZHMgYXMgc29vbiBhcyB0aGUgZHJpdmVyIGlzXG4gICAgICAgIC8vIGxvYWRlZCwgc28gdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgaW1wYWN0LlxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gTGlicmFyeU1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGxXaGVuUmVhZHkodGhpcywgTGlicmFyeU1ldGhvZHNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jcmVhdGVJbnN0YW5jZSA9IGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbEZvcmFnZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExvY2FsRm9yYWdlO1xufSgpO1xuXG4vLyBUaGUgYWN0dWFsIGxvY2FsRm9yYWdlIG9iamVjdCB0aGF0IHdlIGV4cG9zZSBhcyBhIG1vZHVsZSBvciB2aWEgYVxuLy8gZ2xvYmFsLiBJdCdzIGV4dGVuZGVkIGJ5IHB1bGxpbmcgaW4gb25lIG9mIG91ciBvdGhlciBsaWJyYXJpZXMuXG5cblxudmFyIGxvY2FsZm9yYWdlX2pzID0gbmV3IExvY2FsRm9yYWdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9jYWxmb3JhZ2VfanM7XG5cbn0se1wiM1wiOjN9XX0se30sWzRdKSg0KVxufSk7XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBNSVRcbiAqIEBjb3B5cmlnaHQgMjAyMCBFeWFzIFJhbmpvdXMgPGV5YXMucmFuam91c0BnbWFpbC5jb20+XG4gKlxuICogQGNsYXNzXG4gKi9cbmNsYXNzIFF1ZXVlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBxdWV1ZS5cbiAgICogQHBhcmFtIHthcnJheX0gW2VsZW1lbnRzXVxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudHMpIHtcbiAgICB0aGlzLl9lbGVtZW50cyA9IEFycmF5LmlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbXTtcbiAgICB0aGlzLl9vZmZzZXQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZWxlbWVudCB0byB0aGUgYmFjayBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfG9iamVjdH0gZWxlbWVudFxuICAgKi9cbiAgZW5xdWV1ZShlbGVtZW50KSB7XG4gICAgdGhpcy5fZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ3xvYmplY3R9IGVsZW1lbnRcbiAgICovXG4gIHB1c2goZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVucXVldWUoZWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZXMgdGhlIGZyb250IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIGRlcXVldWUoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSgpID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5mcm9udCgpO1xuICAgIHRoaXMuX29mZnNldCArPSAxO1xuXG4gICAgaWYgKHRoaXMuX29mZnNldCAqIDIgPCB0aGlzLl9lbGVtZW50cy5sZW5ndGgpIHJldHVybiBmaXJzdDtcblxuICAgIC8vIG9ubHkgcmVtb3ZlIGRlcXVldWVkIGVsZW1lbnRzIHdoZW4gcmVhY2hpbmcgaGFsZiBzaXplXG4gICAgLy8gdG8gZGVjcmVhc2UgbGF0ZW5jeSBvZiBzaGlmdGluZyBlbGVtZW50cy5cbiAgICB0aGlzLl9lbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRzLnNsaWNlKHRoaXMuX29mZnNldCk7XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgICByZXR1cm4gZmlyc3Q7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZXMgdGhlIGZyb250IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIHBvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXF1ZXVlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZnJvbnQgZWxlbWVudCBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcnxzdHJpbmd8b2JqZWN0fVxuICAgKi9cbiAgZnJvbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSgpID4gMCA/IHRoaXMuX2VsZW1lbnRzW3RoaXMuX29mZnNldF0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJhY2sgZWxlbWVudCBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcnxzdHJpbmd8b2JqZWN0fVxuICAgKi9cbiAgYmFjaygpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplKCkgPiAwID8gdGhpcy5fZWxlbWVudHNbdGhpcy5fZWxlbWVudHMubGVuZ3RoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzLmxlbmd0aCAtIHRoaXMuX29mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplKCkgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZSBxdWV1ZSBhcyBhbiBhcnJheS5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAqL1xuICB0b0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50cy5zbGljZSh0aGlzLl9vZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX2VsZW1lbnRzID0gW107XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBxdWV1ZS5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgUXVldWUodGhpcy5fZWxlbWVudHMuc2xpY2UodGhpcy5fb2Zmc2V0KSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHF1ZXVlIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gICAqIEBwdWJsaWNcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge2FycmF5fSBlbGVtZW50c1xuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tQXJyYXkoZWxlbWVudHMpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXVlKGVsZW1lbnRzKTtcbiAgfVxufVxuXG5leHBvcnRzLlF1ZXVlID0gUXVldWU7XG4iLCAiY29uc3QgeyBRdWV1ZSB9ID0gcmVxdWlyZSgnLi9zcmMvcXVldWUnKTtcblxuZXhwb3J0cy5RdWV1ZSA9IFF1ZXVlO1xuIiwgImltcG9ydCB7IERhdGFjb3JlQXBpIH0gZnJvbSBcImFwaS9hcGlcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgQXBwLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHJlbmRlciB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IERFRkFVTFRfU0VUVElOR1MsIFNldHRpbmdzIH0gZnJvbSBcInNldHRpbmdzXCI7XG5pbXBvcnQgeyBEYXRhY29yZVF1ZXJ5VmlldyBhcyBEYXRhY29yZUpTVmlldywgVklFV19UWVBFX0RBVEFDT1JFSlMgfSBmcm9tIFwidWkvdmlldy1wYWdlXCI7XG5pbXBvcnQgeyBJbmRleFN0YXR1c0JhciB9IGZyb20gXCJ1aS9pbmRleC1zdGF0dXNcIjtcblxuLyoqIFJlYWN0aXZlIGRhdGEgZW5naW5lIGZvciB5b3VyIE9ic2lkaWFuLm1kIHZhdWx0LiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWNvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICAgIC8qKiBQbHVnaW4td2lkZSBkZWZhdWx0IHNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBzZXR0aW5nczogU2V0dGluZ3M7XG5cbiAgICAvKiogQ2VudHJhbCBpbnRlcm5hbCBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgY29yZTogRGF0YWNvcmU7XG4gICAgLyoqIEV4dGVybmFsbHkgdmlzaWJsZSBBUEkgZm9yIHF1ZXJ5aW5nLiAqL1xuICAgIHB1YmxpYyBhcGk6IERhdGFjb3JlQXBpO1xuXG4gICAgYXN5bmMgb25sb2FkKCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgKGF3YWl0IHRoaXMubG9hZERhdGEoKSkgPz8ge30pO1xuICAgICAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IEdlbmVyYWxTZXR0aW5nc1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNvcmUgQVBJIGZvciB1c2FnZSBpbiBhbGwgdmlld3MgYW5kIGRvd25zdHJlYW0gYXBwcy5cbiAgICAgICAgdGhpcy5hZGRDaGlsZCgodGhpcy5jb3JlID0gbmV3IERhdGFjb3JlKHRoaXMuYXBwLCB0aGlzLm1hbmlmZXN0LnZlcnNpb24sIHRoaXMuc2V0dGluZ3MpKSk7XG4gICAgICAgIHRoaXMuYXBpID0gbmV3IERhdGFjb3JlQXBpKHRoaXMuY29yZSk7XG5cbiAgICAgICAgLy8gQWRkIGEgdmlzdWFsIGFpZCBmb3Igd2hhdCBkYXRhY29yZSBpcyBjdXJyZW50bHkgZG9pbmcuXG4gICAgICAgIHRoaXMubW91bnRJbmRleFN0YXRlKHRoaXMuYWRkU3RhdHVzQmFySXRlbSgpLCB0aGlzLmNvcmUpO1xuXG4gICAgICAgIC8vIFByaW1hcnkgdmlzdWFsIGVsZW1lbnRzIChEYXRhY29yZUpTIGFuZCBEYXRhY29yZSBibG9ja3MpLlxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXG4gICAgICAgICAgICBcImRhdGFjb3JlanNcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZUpzKHNvdXJjZSwgZWwsIGN0eCwgY3R4LnNvdXJjZVBhdGgpLFxuICAgICAgICAgICAgLTEwMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwiZGF0YWNvcmVqc3hcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZUpzeChzb3VyY2UsIGVsLCBjdHgsIGN0eC5zb3VyY2VQYXRoKSxcbiAgICAgICAgICAgIC0xMDBcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXG4gICAgICAgICAgICBcImRhdGFjb3JldHNcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZVRzKHNvdXJjZSwgZWwsIGN0eCwgY3R4LnNvdXJjZVBhdGgpLFxuICAgICAgICAgICAgLTEwMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwiZGF0YWNvcmV0c3hcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZVRzeChzb3VyY2UsIGVsLCBjdHgsIGN0eC5zb3VyY2VQYXRoKSxcbiAgICAgICAgICAgIC0xMDBcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBWaWV3czogRGF0YWNvcmVKUyB2aWV3LlxuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlldyhWSUVXX1RZUEVfREFUQUNPUkVKUywgKGxlYWYpID0+IG5ldyBEYXRhY29yZUpTVmlldyhsZWFmLCB0aGlzLmFwaSkpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNvbW1hbmQgZm9yIGNyZWF0aW5nIGEgbmV3IHZpZXcgcGFnZS5cbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgICAgICAgIGlkOiBcImRhdGFjb3JlLWFkZC12aWV3LXBhZ2VcIixcbiAgICAgICAgICAgIG5hbWU6IFwiQ3JlYXRlIFZpZXcgUGFnZVwiLFxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldExlYWYoXCJ0YWJcIik7XG4gICAgICAgICAgICAgICAgbmV3TGVhZi5zZXRWaWV3U3RhdGUoeyB0eXBlOiBWSUVXX1RZUEVfREFUQUNPUkVKUywgYWN0aXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5zZXRBY3RpdmVMZWFmKG5ld0xlYWYsIHsgZm9jdXM6IHRydWUgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWdpc3RlciBKUyBoaWdobGlnaHRpbmcgZm9yIGNvZGVibG9ja3MuXG4gICAgICAgIHRoaXMucmVnaXN0ZXIodGhpcy5yZWdpc3RlckNvZGVibG9ja0hpZ2hsaWdodGluZygpKTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIGFzIHNvb24gYXMgdGhlIHdvcmtzcGFjZSBpcyByZWFkeS5cbiAgICAgICAgaWYgKCF0aGlzLmFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KGFzeW5jICgpID0+IHRoaXMuY29yZS5pbml0aWFsaXplKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb3JlLmluaXRpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgdGhlIEFQSSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZyb20gYW55IGNvbnRleHQuXG4gICAgICAgIHdpbmRvdy5kYXRhY29yZSA9IHRoaXMuYXBpO1xuXG4gICAgICAgIC8vIGJvbiBhcHBldGl0XG4gICAgICAgIGNvbnNvbGUubG9nKGBEYXRhY29yZTogdmVyc2lvbiAke3RoaXMubWFuaWZlc3QudmVyc2lvbn0gKHJlcXVpcmVzIG9ic2lkaWFuICR7dGhpcy5tYW5pZmVzdC5taW5BcHBWZXJzaW9ufSlgKTtcbiAgICB9XG5cbiAgICBvbnVubG9hZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coYERhdGFjb3JlOiB2ZXJzaW9uICR7dGhpcy5tYW5pZmVzdC52ZXJzaW9ufSB1bmxvYWRlZC5gKTtcbiAgICB9XG5cbiAgICAvKiogUmVnaXN0ZXIgY29kZWJsb2NrIGhpZ2hsaWdodGluZyBhbmQgcmV0dXJuIGEgY2xvc3VyZSB3aGljaCB1bnJlZ2lzdGVycy4gKi9cbiAgICByZWdpc3RlckNvZGVibG9ja0hpZ2hsaWdodGluZygpOiAoKSA9PiB2b2lkIHtcbiAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JlanNcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwiamF2YXNjcmlwdFwiKSk7XG4gICAgICAgIHdpbmRvdy5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkYXRhY29yZWpzeFwiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJqc3hcIikpO1xuICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmV0c1wiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJqYXZhc2NyaXB0XCIpKTtcbiAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JldHN4XCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcImpzeFwiKSk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkYXRhY29yZWpzXCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcIm51bGxcIikpO1xuICAgICAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JlanN4XCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcIm51bGxcIikpO1xuICAgICAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JldHNcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwibnVsbFwiKSk7XG4gICAgICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmV0c3hcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwibnVsbFwiKSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGUgZ2l2ZW4gc2V0dGluZ3MgdG8gbmV3IHZhbHVlcy4gKi9cbiAgICBhc3luYyB1cGRhdGVTZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxTZXR0aW5ncz4pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnNldHRpbmdzLCBzZXR0aW5ncyk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFJlbmRlciBkYXRhY29yZSBpbmRleGluZyBzdGF0dXMgdXNpbmcgdGhlIGluZGV4LiAqL1xuICAgIHByaXZhdGUgbW91bnRJbmRleFN0YXRlKHJvb3Q6IEhUTUxFbGVtZW50LCBjb3JlOiBEYXRhY29yZSk6IHZvaWQge1xuICAgICAgICByZW5kZXIoY3JlYXRlRWxlbWVudChJbmRleFN0YXR1c0JhciwgeyBkYXRhY29yZTogY29yZSB9KSwgcm9vdCk7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlcigoKSA9PiByZW5kZXIobnVsbCwgcm9vdCkpO1xuICAgIH1cbn1cblxuLyoqIERhdGFjb3JlIFNldHRpbmdzIFRhYi4gKi9cbmNsYXNzIEdlbmVyYWxTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwcml2YXRlIHBsdWdpbjogRGF0YWNvcmVQbHVnaW4pIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG5cbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJWaWV3c1wiIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2luYXRpb25cIilcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiSWYgZW5hYmxlZCwgc3BsaXRzIHVwIHZpZXdzIGludG8gcGFnZXMgb2YgcmVzdWx0cyB3aGljaCBjYW4gYmUgdHJhdmVyc2VkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ2aWEgYnV0dG9ucyBhdCB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGhlIHZpZXcuIFRoaXMgc3Vic3RhbnRpYWxseSBpbXByb3ZlcyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwidGhlIHBlcmZvcm1hbmNlIG9mIGxhcmdlIHZpZXdzLCBhbmQgY2FuIGhlbHAgd2l0aCB2aXN1YWwgY2x1dHRlci4gTm90ZSB0aGF0IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ0aGlzIHNldHRpbmcgY2FuIGFsc28gYmUgc2V0IG9uIGEgcGVyLXZpZXcgYmFzaXMuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0UGFnaW5nRW5hYmxlZCkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgZGVmYXVsdFBhZ2luZ0VuYWJsZWQ6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBQYWdlIFNpemVcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIHNob3cgcGVyIHBhZ2UsIGJ5IGRlZmF1bHQuIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBvbiBhIHBlci12aWV3IGJhc2lzLlwiKVxuICAgICAgICAgICAgLmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IE9QVElPTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIFwiMjVcIjogXCIyNVwiLFxuICAgICAgICAgICAgICAgICAgICBcIjUwXCI6IFwiNTBcIixcbiAgICAgICAgICAgICAgICAgICAgXCIxMDBcIjogXCIxMDBcIixcbiAgICAgICAgICAgICAgICAgICAgXCIyMDBcIjogXCIyMDBcIixcbiAgICAgICAgICAgICAgICAgICAgXCI1MDBcIjogXCI1MDBcIixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBcIlwiICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVmYXVsdFBhZ2VTaXplO1xuICAgICAgICAgICAgICAgIGlmICghKGN1cnJlbnQgaW4gT1BUSU9OUykpIE9QVElPTlNbY3VycmVudF0gPSBjdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgLmFkZE9wdGlvbnMoT1BUSU9OUylcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKGN1cnJlbnQpXG4gICAgICAgICAgICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBkZWZhdWx0UGFnZVNpemU6IHBhcnNlZCB8IDAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiU2Nyb2xsIG9uIFBhZ2UgQ2hhbmdlXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIklmIGVuYWJsZWQsIHRhYmxlIHRoYXQgYXJlIHBhZ2VkIHdpbGwgc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIHRhYmxlIHdoZW4gdGhlIHBhZ2UgY2hhbmdlcy4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIlRoaXMgY2FuIGJlIG92ZXJyaWRlbiBvbiBhIHBlci12aWV3IGJhc2lzLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2Nyb2xsT25QYWdlQ2hhbmdlKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBzY3JvbGxPblBhZ2VDaGFuZ2U6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkVuYWJsZSBKYXZhc2NyaXB0XCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgSmF2YXNjcmlwdCBjb2RlYmxvY2tzIHdpbGwgYmUgZXZhbHVhdGVkLlwiKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUpzKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBlbmFibGVKczogdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIkZvcm1hdHRpbmdcIiB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJFbXB0eSBWYWx1ZXNcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiV2hhdCB0byBzaG93IGZvciB1bnNldC9lbXB0eSBwcm9wZXJ0aWVzLlwiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnJlbmRlck51bGxBcykub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgcmVuZGVyTnVsbEFzOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkRlZmF1bHQgRGF0ZSBGb3JtYXRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiVGhlIGRlZmF1bHQgZm9ybWF0IHRoYXQgZGF0ZXMgYXJlIHJlbmRlcmVkIGluLiBVc2VzIGx1eG9uIGRhdGUgZm9ybWF0dGluZyAoaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9sdXhvbi9ibG9iL21hc3Rlci9kb2NzL2Zvcm1hdHRpbmcubWQjZm9ybWF0dGluZy13aXRoLXRva2Vucy1zdHJpbmdzLWZvci1jdGh1bGh1KS5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0KS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZGF0ZSBmb3JtYXQgaXMgdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lLmZyb21NaWxsaXMoRGF0ZS5ub3coKSkudG9Gb3JtYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IGRlZmF1bHREYXRlRm9ybWF0OiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkRlZmF1bHQgRGF0ZS1UaW1lIGZvcm1hdFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJUaGUgZGVmYXVsdCBmb3JtYXQgdGhhdCBkYXRlLXRpbWVzIGFyZSByZW5kZXJlZCBpbi4gVXNlcyBsdXhvbiBkYXRlIGZvcm1hdHRpbmcgKGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbHV4b24vYmxvYi9tYXN0ZXIvZG9jcy9mb3JtYXR0aW5nLm1kI2Zvcm1hdHRpbmctd2l0aC10b2tlbnMtc3RyaW5ncy1mb3ItY3RodWxodSkuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0RGF0ZVRpbWVGb3JtYXQpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUuZnJvbU1pbGxpcyhEYXRlLm5vdygpKS50b0Zvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgZGVmYXVsdERhdGVUaW1lRm9ybWF0OiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiUGVyZm9ybWFuY2UgVHVuaW5nXCIgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiSW5saW5lIEZpZWxkc1wiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJJZiBlbmFibGVkLCBpbmxpbmUgZmllbGRzIHdpbGwgYmUgcGFyc2VkIGluIGFsbCBkb2N1bWVudHMuIEZpbmRpbmcgaW5saW5lIGZpZWxkcyByZXF1aXJlcyBhIGZ1bGwgdGV4dCBzY2FuIHRocm91Z2ggZWFjaCBkb2N1bWVudCwgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIndoaWNoIG5vdGljYWJseSBzbG93cyBkb3duIGluZGV4aW5nIGZvciBsYXJnZSB2YXVsdHMuIERpc2FibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2lsbCBtZWFuIG1ldGFkYXRhIHdpbGwgb25seSBjb21lIGZyb20gdGFncywgbGlua3MsIGFuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiUHJvcGVydGllcyAvIGZyb250bWF0dGVyXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbmRleElubGluZUZpZWxkcykub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgaW5kZXhJbmxpbmVGaWVsZHM6IHZhbHVlIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlcXVlc3QgYSBmdWxsIGluZGV4IGRyb3AgKyByZWluZGV4IGZvciBjb3JyZWN0bmVzcy5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkltcG9ydGVyIFRocmVhZHNcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIG51bWJlciBvZiBpbXBvcnRlciB0aHJlYWRzIHRvIHVzZSBmb3IgcGFyc2luZyBtZXRhZGF0YS5cIilcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZShcIlwiICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1wb3J0ZXJOdW1UaHJlYWRzKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgaW1wb3J0ZXJOdW1UaHJlYWRzOiBwYXJzZWQgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJJbXBvcnRlciBVdGlsaXphdGlvblwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJIb3cgbXVjaCBDUFUgdGltZSBlYWNoIGltcG9ydGVyIHRocmVhZCBzaG91bGQgdXNlLCBhcyBhIGZyYWN0aW9uICgwLjEgLSAxLjApLlwiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmltcG9ydGVyVXRpbGl6YXRpb24udG9GaXhlZCgyKSkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ZWQgPSBNYXRoLm1heCgwLjEsIE1hdGgubWluKDEuMCwgcGFyc2VkKSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgaW1wb3J0ZXJVdGlsaXphdGlvbjogbGltaXRlZCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIk1heGltdW0gUmVjdXJzaXZlIFJlbmRlciBEZXB0aFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJNYXhpbXVtIGRlcHRoIHRoYXQgb2JqZWN0cyB3aWxsIGJlIHJlbmRlcmVkIHRvIChpLmUuLCBob3cgbWFueSBsZXZlbHMgb2Ygc3VicHJvcGVydGllc1wiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ3aWxsIGJlIHJlbmRlcmVkIGJ5IGRlZmF1bHQpLiBUaGlzIGF2b2lkcyBpbmZpbml0ZSByZWN1cnNpb24gZHVlIHRvIHNlbGYtcmVmZXJlbnRpYWwgb2JqZWN0c1wiICtcbiAgICAgICAgICAgICAgICAgICAgXCJhbmQgZW5zdXJlcyB0aGF0IHJlbmRlcmluZyBvYmplY3RzIGlzIGFjY2VwdGFibHkgcGVyZm9ybWFudC5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm1heFJlY3Vyc2l2ZVJlbmRlckRlcHRoLnRvU3RyaW5nKCkpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgbWF4UmVjdXJzaXZlUmVuZGVyRGVwdGg6IHBhcnNlZCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJSZWN1cnNpdmUgc3VidGFzayBjb21wbGV0aW9uXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgb3Igbm90IHN1YnRhc2tzIHNob3VsZCBiZSBjb21wbGV0ZWQgYWxvbmcgd2l0aCB0aGVpciBwYXJlbnQgaW4gZGF0YWNvcmUgdGFzayB2aWV3c1wiKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodGIpID0+IHtcbiAgICAgICAgICAgICAgICB0Yi5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5yZWN1cnNpdmVUYXNrQ29tcGxldGlvbikub25DaGFuZ2UoYXN5bmMgKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IHJlY3Vyc2l2ZVRhc2tDb21wbGV0aW9uOiB2YWwgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIlRhc2tzXCIgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiVGFzayBDb21wbGV0aW9uIFRleHRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiTmFtZSBvZiBpbmxpbmUgZmllbGQgaW4gd2hpY2ggdG8gc3RvcmUgdGFzayBjb21wbGV0aW9uIGRhdGUvdGltZVwiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhc2tDb21wbGV0aW9uVGV4dCkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgdGFza0NvbXBsZXRpb25UZXh0OiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlVzZSBFbW9qaSBTaG9ydGhhbmQgZm9yIFRhc2sgQ29tcGxldGlvblwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJJZiBlbmFibGVkLCBhdXRvbWF0aWMgY29tcGxldGlvbiB3aWxsIHVzZSBhbiBlbW9qaSBzaG9ydGhhbmQgXHUyNzA1IFlZWVktTU0tRERcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiaW5zdGVhZCBvZiBbY29tcGxldGlvbjo6IGRhdGVdLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0YikgPT4ge1xuICAgICAgICAgICAgICAgIHRiLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRhc2tDb21wbGV0aW9uVXNlRW1vamlTaG9ydGhhbmQpLm9uQ2hhbmdlKGFzeW5jICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyB0YXNrQ29tcGxldGlvblVzZUVtb2ppU2hvcnRoYW5kOiB2YWwgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBJbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IEluZm8gZnJvbSBcIi4vaW5mby5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4vem9uZS5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IEludmFsaWRab25lIGZyb20gXCIuL3pvbmVzL2ludmFsaWRab25lLmpzXCI7XG5pbXBvcnQgU3lzdGVtWm9uZSBmcm9tIFwiLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcblxuY29uc3QgVkVSU0lPTiA9IFwiMi41LjJcIjtcblxuZXhwb3J0IHtcbiAgVkVSU0lPTixcbiAgRGF0ZVRpbWUsXG4gIER1cmF0aW9uLFxuICBJbnRlcnZhbCxcbiAgSW5mbyxcbiAgWm9uZSxcbiAgRml4ZWRPZmZzZXRab25lLFxuICBJQU5BWm9uZSxcbiAgSW52YWxpZFpvbmUsXG4gIFN5c3RlbVpvbmUsXG4gIFNldHRpbmdzLFxufTtcbiIsICIvLyB0aGVzZSBhcmVuJ3QgcmVhbGx5IHByaXZhdGUsIGJ1dCBub3IgYXJlIHRoZXkgcmVhbGx5IHVzZWZ1bCB0byBkb2N1bWVudFxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEx1eG9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRGF0ZVRpbWVFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBEYXRlVGltZTogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEludGVydmFsRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgSW50ZXJ2YWw6ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWREdXJhdGlvbkVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIER1cmF0aW9uOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFVuaXRFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih1bml0KSB7XG4gICAgc3VwZXIoYEludmFsaWQgdW5pdCAke3VuaXR9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFpvbmVJc0Fic3RyYWN0RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJab25lIGlzIGFuIGFic3RyYWN0IGNsYXNzXCIpO1xuICB9XG59XG4iLCAiLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNvbnN0IG4gPSBcIm51bWVyaWNcIixcbiAgcyA9IFwic2hvcnRcIixcbiAgbCA9IFwibG9uZ1wiO1xuXG5leHBvcnQgY29uc3QgREFURV9TSE9SVCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX01FRCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX01FRF9XSVRIX1dFRUtEQVkgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9GVUxMID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9TRUNPTkRTID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX1NFQ09ORFMgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICBob3VyQ3ljbGU6IFwiaDIzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBzLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX1NIT1JUID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRUQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBzLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfRlVMTCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGwsXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuIiwgIi8qXG4gIFRoaXMgaXMganVzdCBhIGp1bmsgZHJhd2VyLCBjb250YWluaW5nIGFueXRoaW5nIHVzZWQgYWNyb3NzIG11bHRpcGxlIGNsYXNzZXMuXG4gIEJlY2F1c2UgTHV4b24gaXMgc21hbGwoaXNoKSwgdGhpcyBzaG91bGQgc3RheSBzbWFsbCBhbmQgd2Ugd29uJ3Qgd29ycnkgYWJvdXQgc3BsaXR0aW5nXG4gIGl0IHVwIGludG8sIHNheSwgcGFyc2luZ1V0aWwuanMgYW5kIGJhc2ljVXRpbC5qcyBhbmQgc28gb24uIEJ1dCB0aGV5IGFyZSBkaXZpZGVkIHVwIGJ5IGZlYXR1cmUgYXJlYS5cbiovXG5cbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuLy8gVFlQRVNcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwibnVtYmVyXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwibnVtYmVyXCIgJiYgbyAlIDEgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyhvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZShvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09IFwiW29iamVjdCBEYXRlXVwiO1xufVxuXG4vLyBDQVBBQklMSVRJRVNcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1JlbGF0aXZlKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSW50bCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIUludGwuUmVsYXRpdmVUaW1lRm9ybWF0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIE9CSkVDVFMgQU5EIEFSUkFZU1xuXG5leHBvcnQgZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGJlc3QsIG5leHQpID0+IHtcbiAgICBjb25zdCBwYWlyID0gW2J5KG5leHQpLCBuZXh0XTtcbiAgICBpZiAoIWJlc3QpIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH0gZWxzZSBpZiAoY29tcGFyZShiZXN0WzBdLCBwYWlyWzBdKSA9PT0gYmVzdFswXSkge1xuICAgICAgcmV0dXJuIGJlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYWlyO1xuICAgIH1cbiAgfSwgbnVsbClbMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKG9iaiwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGEsIGspID0+IHtcbiAgICBhW2tdID0gb2JqW2tdO1xuICAgIHJldHVybiBhO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG4vLyBOVU1CRVJTIEFORCBTVFJJTkdTXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHtcbiAgcmV0dXJuIGlzSW50ZWdlcih0aGluZykgJiYgdGhpbmcgPj0gYm90dG9tICYmIHRoaW5nIDw9IHRvcDtcbn1cblxuLy8geCAlIG4gYnV0IHRha2VzIHRoZSBzaWduIG9mIG4gaW5zdGVhZCBvZiB4XG5leHBvcnQgZnVuY3Rpb24gZmxvb3JNb2QoeCwgbikge1xuICByZXR1cm4geCAtIG4gKiBNYXRoLmZsb29yKHggLyBuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZFN0YXJ0KGlucHV0LCBuID0gMikge1xuICBjb25zdCBpc05lZyA9IGlucHV0IDwgMDtcbiAgbGV0IHBhZGRlZDtcbiAgaWYgKGlzTmVnKSB7XG4gICAgcGFkZGVkID0gXCItXCIgKyAoXCJcIiArIC1pbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9IGVsc2Uge1xuICAgIHBhZGRlZCA9IChcIlwiICsgaW5wdXQpLnBhZFN0YXJ0KG4sIFwiMFwiKTtcbiAgfVxuICByZXR1cm4gcGFkZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHN0cmluZykge1xuICBpZiAoaXNVbmRlZmluZWQoc3RyaW5nKSB8fCBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCAxMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmxvYXRpbmcoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWlsbGlzKGZyYWN0aW9uKSB7XG4gIC8vIFJldHVybiB1bmRlZmluZWQgKGluc3RlYWQgb2YgMCkgaW4gdGhlc2UgY2FzZXMsIHdoZXJlIGZyYWN0aW9uIGlzIG5vdCBzZXRcbiAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZiA9IHBhcnNlRmxvYXQoXCIwLlwiICsgZnJhY3Rpb24pICogMTAwMDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihmKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRUbyhudW1iZXIsIGRpZ2l0cywgdG93YXJkWmVybyA9IGZhbHNlKSB7XG4gIGNvbnN0IGZhY3RvciA9IDEwICoqIGRpZ2l0cyxcbiAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kO1xuICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xufVxuXG4vLyBEQVRFIEJBU0lDU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gIGNvbnN0IG1vZE1vbnRoID0gZmxvb3JNb2QobW9udGggLSAxLCAxMikgKyAxLFxuICAgIG1vZFllYXIgPSB5ZWFyICsgKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG5cbiAgaWYgKG1vZE1vbnRoID09PSAyKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdO1xuICB9XG59XG5cbi8vIGNvdmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGxvY2FsIHRpbWVzdGFtcCAoZXBvY2gsIGJ1dCB3aXRoIHRoZSBvZmZzZXQgYmFrZWQgaW4pXG5leHBvcnQgZnVuY3Rpb24gb2JqVG9Mb2NhbFRTKG9iaikge1xuICBsZXQgZCA9IERhdGUuVVRDKFxuICAgIG9iai55ZWFyLFxuICAgIG9iai5tb250aCAtIDEsXG4gICAgb2JqLmRheSxcbiAgICBvYmouaG91cixcbiAgICBvYmoubWludXRlLFxuICAgIG9iai5zZWNvbmQsXG4gICAgb2JqLm1pbGxpc2Vjb25kXG4gICk7XG5cbiAgLy8gZm9yIGxlZ2FjeSByZWFzb25zLCB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGFyZSBpbnRlcnByZXRlZCBhcyAxOVhYOyByZXZlcnQgdGhhdFxuICBpZiAob2JqLnllYXIgPCAxMDAgJiYgb2JqLnllYXIgPj0gMCkge1xuICAgIGQgPSBuZXcgRGF0ZShkKTtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG4gIHJldHVybiArZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcikge1xuICBjb25zdCBwMSA9XG4gICAgICAod2Vla1llYXIgK1xuICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gNCkgLVxuICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gMTAwKSArXG4gICAgICAgIE1hdGguZmxvb3Iod2Vla1llYXIgLyA0MDApKSAlXG4gICAgICA3LFxuICAgIGxhc3QgPSB3ZWVrWWVhciAtIDEsXG4gICAgcDIgPSAobGFzdCArIE1hdGguZmxvb3IobGFzdCAvIDQpIC0gTWF0aC5mbG9vcihsYXN0IC8gMTAwKSArIE1hdGguZmxvb3IobGFzdCAvIDQwMCkpICUgNztcbiAgcmV0dXJuIHAxID09PSA0IHx8IHAyID09PSAzID8gNTMgOiA1Mjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXIpIHtcbiAgaWYgKHllYXIgPiA5OSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2UgcmV0dXJuIHllYXIgPiA2MCA/IDE5MDAgKyB5ZWFyIDogMjAwMCArIHllYXI7XG59XG5cbi8vIFBBUlNJTkdcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWm9uZUluZm8odHMsIG9mZnNldEZvcm1hdCwgbG9jYWxlLCB0aW1lWm9uZSA9IG51bGwpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKSxcbiAgICBpbnRsT3B0cyA9IHtcbiAgICAgIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgbW9udGg6IFwiMi1kaWdpdFwiLFxuICAgICAgZGF5OiBcIjItZGlnaXRcIixcbiAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICB9O1xuXG4gIGlmICh0aW1lWm9uZSkge1xuICAgIGludGxPcHRzLnRpbWVab25lID0gdGltZVpvbmU7XG4gIH1cblxuICBjb25zdCBtb2RpZmllZCA9IHsgdGltZVpvbmVOYW1lOiBvZmZzZXRGb3JtYXQsIC4uLmludGxPcHRzIH07XG5cbiAgY29uc3QgcGFyc2VkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBtb2RpZmllZClcbiAgICAuZm9ybWF0VG9QYXJ0cyhkYXRlKVxuICAgIC5maW5kKChtKSA9PiBtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0aW1lem9uZW5hbWVcIik7XG4gIHJldHVybiBwYXJzZWQgPyBwYXJzZWQudmFsdWUgOiBudWxsO1xufVxuXG4vLyBzaWduZWRPZmZzZXQoJy01JywgJzMwJykgLT4gLTMzMFxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25lZE9mZnNldChvZmZIb3VyU3RyLCBvZmZNaW51dGVTdHIpIHtcbiAgbGV0IG9mZkhvdXIgPSBwYXJzZUludChvZmZIb3VyU3RyLCAxMCk7XG5cbiAgLy8gZG9uJ3QgfHwgdGhpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgLTBcbiAgaWYgKE51bWJlci5pc05hTihvZmZIb3VyKSkge1xuICAgIG9mZkhvdXIgPSAwO1xuICB9XG5cbiAgY29uc3Qgb2ZmTWluID0gcGFyc2VJbnQob2ZmTWludXRlU3RyLCAxMCkgfHwgMCxcbiAgICBvZmZNaW5TaWduZWQgPSBvZmZIb3VyIDwgMCB8fCBPYmplY3QuaXMob2ZmSG91ciwgLTApID8gLW9mZk1pbiA6IG9mZk1pbjtcbiAgcmV0dXJuIG9mZkhvdXIgKiA2MCArIG9mZk1pblNpZ25lZDtcbn1cblxuLy8gQ09FUkNJT05cblxuZXhwb3J0IGZ1bmN0aW9uIGFzTnVtYmVyKHZhbHVlKSB7XG4gIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlID09PSBcIlwiIHx8IE51bWJlci5pc05hTihudW1lcmljVmFsdWUpKVxuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSW52YWxpZCB1bml0IHZhbHVlICR7dmFsdWV9YCk7XG4gIHJldHVybiBudW1lcmljVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVyKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTtcbiAgZm9yIChjb25zdCB1IGluIG9iaikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIHUpKSB7XG4gICAgICBjb25zdCB2ID0gb2JqW3VdO1xuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplcih1KV0gPSBhc051bWJlcih2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPZmZzZXQob2Zmc2V0LCBmb3JtYXQpIHtcbiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAvIDYwKSksXG4gICAgbWludXRlcyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0ICUgNjApKSxcbiAgICBzaWduID0gb2Zmc2V0ID49IDAgPyBcIitcIiA6IFwiLVwiO1xuXG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke3BhZFN0YXJ0KGhvdXJzLCAyKX06JHtwYWRTdGFydChtaW51dGVzLCAyKX1gO1xuICAgIGNhc2UgXCJuYXJyb3dcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7aG91cnN9JHttaW51dGVzID4gMCA/IGA6JHttaW51dGVzfWAgOiBcIlwifWA7XG4gICAgY2FzZSBcInRlY2hpZVwiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtwYWRTdGFydChob3VycywgMil9JHtwYWRTdGFydChtaW51dGVzLCAyKX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVmFsdWUgZm9ybWF0ICR7Zm9ybWF0fSBpcyBvdXQgb2YgcmFuZ2UgZm9yIHByb3BlcnR5IGZvcm1hdGApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lT2JqZWN0KG9iaikge1xuICByZXR1cm4gcGljayhvYmosIFtcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIiwgXCJtaWxsaXNlY29uZFwiXSk7XG59XG5cbmV4cG9ydCBjb25zdCBpYW5hUmVnZXggPVxuICAvW0EtWmEtel8rLV17MSwyNTZ9KD86Oj9cXC9bQS1aYS16MC05XystXXsxLDI1Nn0oPzpcXC9bQS1aYS16MC05XystXXsxLDI1Nn0pPyk/LztcbiIsICJpbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNvbnN0IG1vbnRoc0xvbmcgPSBbXG4gIFwiSmFudWFyeVwiLFxuICBcIkZlYnJ1YXJ5XCIsXG4gIFwiTWFyY2hcIixcbiAgXCJBcHJpbFwiLFxuICBcIk1heVwiLFxuICBcIkp1bmVcIixcbiAgXCJKdWx5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiU2VwdGVtYmVyXCIsXG4gIFwiT2N0b2JlclwiLFxuICBcIk5vdmVtYmVyXCIsXG4gIFwiRGVjZW1iZXJcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNTaG9ydCA9IFtcbiAgXCJKYW5cIixcbiAgXCJGZWJcIixcbiAgXCJNYXJcIixcbiAgXCJBcHJcIixcbiAgXCJNYXlcIixcbiAgXCJKdW5cIixcbiAgXCJKdWxcIixcbiAgXCJBdWdcIixcbiAgXCJTZXBcIixcbiAgXCJPY3RcIixcbiAgXCJOb3ZcIixcbiAgXCJEZWNcIixcbl07XG5cbmV4cG9ydCBjb25zdCBtb250aHNOYXJyb3cgPSBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb250aHMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNOYXJyb3ddO1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNTaG9ydF07XG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ubW9udGhzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgY2FzZSBcIjItZGlnaXRcIjpcbiAgICAgIHJldHVybiBbXCIwMVwiLCBcIjAyXCIsIFwiMDNcIiwgXCIwNFwiLCBcIjA1XCIsIFwiMDZcIiwgXCIwN1wiLCBcIjA4XCIsIFwiMDlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c0xvbmcgPSBbXG4gIFwiTW9uZGF5XCIsXG4gIFwiVHVlc2RheVwiLFxuICBcIldlZG5lc2RheVwiLFxuICBcIlRodXJzZGF5XCIsXG4gIFwiRnJpZGF5XCIsXG4gIFwiU2F0dXJkYXlcIixcbiAgXCJTdW5kYXlcIixcbl07XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c1Nob3J0ID0gW1wiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCIsIFwiU3VuXCJdO1xuXG5leHBvcnQgY29uc3Qgd2Vla2RheXNOYXJyb3cgPSBbXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIiwgXCJTXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi53ZWVrZGF5c05hcnJvd107XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzU2hvcnRdO1xuICAgIGNhc2UgXCJsb25nXCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzTG9uZ107XG4gICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIHJldHVybiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCJdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWVyaWRpZW1zID0gW1wiQU1cIiwgXCJQTVwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNMb25nID0gW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc1Nob3J0ID0gW1wiQkNcIiwgXCJBRFwiXTtcblxuZXhwb3J0IGNvbnN0IGVyYXNOYXJyb3cgPSBbXCJCXCIsIFwiQVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVyYXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTmFycm93XTtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBbLi4uZXJhc1Nob3J0XTtcbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTG9uZ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSB7XG4gIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIHdlZWtkYXlzKGxlbmd0aClbZHQud2Vla2RheSAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBtb250aHMobGVuZ3RoKVtkdC5tb250aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljID0gXCJhbHdheXNcIiwgbmFycm93ID0gZmFsc2UpIHtcbiAgY29uc3QgdW5pdHMgPSB7XG4gICAgeWVhcnM6IFtcInllYXJcIiwgXCJ5ci5cIl0sXG4gICAgcXVhcnRlcnM6IFtcInF1YXJ0ZXJcIiwgXCJxdHIuXCJdLFxuICAgIG1vbnRoczogW1wibW9udGhcIiwgXCJtby5cIl0sXG4gICAgd2Vla3M6IFtcIndlZWtcIiwgXCJ3ay5cIl0sXG4gICAgZGF5czogW1wiZGF5XCIsIFwiZGF5XCIsIFwiZGF5c1wiXSxcbiAgICBob3VyczogW1wiaG91clwiLCBcImhyLlwiXSxcbiAgICBtaW51dGVzOiBbXCJtaW51dGVcIiwgXCJtaW4uXCJdLFxuICAgIHNlY29uZHM6IFtcInNlY29uZFwiLCBcInNlYy5cIl0sXG4gIH07XG5cbiAgY29uc3QgbGFzdGFibGUgPSBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdLmluZGV4T2YodW5pdCkgPT09IC0xO1xuXG4gIGlmIChudW1lcmljID09PSBcImF1dG9cIiAmJiBsYXN0YWJsZSkge1xuICAgIGNvbnN0IGlzRGF5ID0gdW5pdCA9PT0gXCJkYXlzXCI7XG4gICAgc3dpdGNoIChjb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvbW9ycm93XCIgOiBgbmV4dCAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInllc3RlcmRheVwiIDogYGxhc3QgJHt1bml0c1t1bml0XVswXX1gO1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvZGF5XCIgOiBgdGhpcyAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBkZWZhdWx0OiAvLyBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cblxuICBjb25zdCBpc0luUGFzdCA9IE9iamVjdC5pcyhjb3VudCwgLTApIHx8IGNvdW50IDwgMCxcbiAgICBmbXRWYWx1ZSA9IE1hdGguYWJzKGNvdW50KSxcbiAgICBzaW5ndWxhciA9IGZtdFZhbHVlID09PSAxLFxuICAgIGxpbFVuaXRzID0gdW5pdHNbdW5pdF0sXG4gICAgZm10VW5pdCA9IG5hcnJvd1xuICAgICAgPyBzaW5ndWxhclxuICAgICAgICA/IGxpbFVuaXRzWzFdXG4gICAgICAgIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV1cbiAgICAgIDogc2luZ3VsYXJcbiAgICAgID8gdW5pdHNbdW5pdF1bMF1cbiAgICAgIDogdW5pdDtcbiAgcmV0dXJuIGlzSW5QYXN0ID8gYCR7Zm10VmFsdWV9ICR7Zm10VW5pdH0gYWdvYCA6IGBpbiAke2ZtdFZhbHVlfSAke2ZtdFVuaXR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0cmluZyhrbm93bkZvcm1hdCkge1xuICAvLyB0aGVzZSBhbGwgaGF2ZSB0aGUgb2Zmc2V0cyByZW1vdmVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlbVxuICAvLyB3aXRob3V0IGFsbCB0aGUgaW50bCBzdHVmZiB0aGlzIGlzIGJhY2tmaWxsaW5nXG4gIGNvbnN0IGZpbHRlcmVkID0gcGljayhrbm93bkZvcm1hdCwgW1xuICAgICAgXCJ3ZWVrZGF5XCIsXG4gICAgICBcImVyYVwiLFxuICAgICAgXCJ5ZWFyXCIsXG4gICAgICBcIm1vbnRoXCIsXG4gICAgICBcImRheVwiLFxuICAgICAgXCJob3VyXCIsXG4gICAgICBcIm1pbnV0ZVwiLFxuICAgICAgXCJzZWNvbmRcIixcbiAgICAgIFwidGltZVpvbmVOYW1lXCIsXG4gICAgICBcImhvdXJDeWNsZVwiLFxuICAgIF0pLFxuICAgIGtleSA9IHN0cmluZ2lmeShmaWx0ZXJlZCksXG4gICAgZGF0ZVRpbWVIdWdlID0gXCJFRUVFLCBMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0ZVTEwpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX0hVR0UpOlxuICAgICAgcmV0dXJuIFwiRUVFRSwgTExMTCBkLCB5eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FX1NJTVBMRSk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcImg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfMjRfU0lNUExFKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJISDptbTpzc1wiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCk6XG4gICAgICByZXR1cm4gXCJISDptbVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9TSE9SVCk6XG4gICAgICByZXR1cm4gXCJNL2QveXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9NRUQpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTCk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfSFVHRSk6XG4gICAgICByZXR1cm4gZGF0ZVRpbWVIdWdlO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMIGQsIHl5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSk6XG4gICAgICByZXR1cm4gXCJFRUUsIGQgTExMIHl5eXksIGg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTExMTCBkLCB5eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIkVFRUUsIExMTEwgZCwgeXl5eSwgaDptbTpzcyBhXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkYXRlVGltZUh1Z2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCAqIGFzIEZvcm1hdHMgZnJvbSBcIi4vZm9ybWF0cy5qc1wiO1xuaW1wb3J0IHsgcGFkU3RhcnQgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVRva2VucyhzcGxpdHMsIHRva2VuVG9TdHJpbmcpIHtcbiAgbGV0IHMgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHNwbGl0cykge1xuICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICBzICs9IHRva2VuLnZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyArPSB0b2tlblRvU3RyaW5nKHRva2VuLnZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuXG5jb25zdCBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzID0ge1xuICBEOiBGb3JtYXRzLkRBVEVfU0hPUlQsXG4gIEREOiBGb3JtYXRzLkRBVEVfTUVELFxuICBEREQ6IEZvcm1hdHMuREFURV9GVUxMLFxuICBEREREOiBGb3JtYXRzLkRBVEVfSFVHRSxcbiAgdDogRm9ybWF0cy5USU1FX1NJTVBMRSxcbiAgdHQ6IEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFMsXG4gIHR0dDogRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VULFxuICB0dHR0OiBGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVCxcbiAgVDogRm9ybWF0cy5USU1FXzI0X1NJTVBMRSxcbiAgVFQ6IEZvcm1hdHMuVElNRV8yNF9XSVRIX1NFQ09ORFMsXG4gIFRUVDogRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VULFxuICBUVFRUOiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCxcbiAgZjogRm9ybWF0cy5EQVRFVElNRV9TSE9SVCxcbiAgZmY6IEZvcm1hdHMuREFURVRJTUVfTUVELFxuICBmZmY6IEZvcm1hdHMuREFURVRJTUVfRlVMTCxcbiAgZmZmZjogRm9ybWF0cy5EQVRFVElNRV9IVUdFLFxuICBGOiBGb3JtYXRzLkRBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyxcbiAgRkY6IEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyxcbiAgRkZGOiBGb3JtYXRzLkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTLFxuICBGRkZGOiBGb3JtYXRzLkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTLFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEZvcm1hdHRlcihsb2NhbGUsIG9wdHMpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRm9ybWF0KGZtdCkge1xuICAgIGxldCBjdXJyZW50ID0gbnVsbCxcbiAgICAgIGN1cnJlbnRGdWxsID0gXCJcIixcbiAgICAgIGJyYWNrZXRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHNwbGl0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm10Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gZm10LmNoYXJBdChpKTtcbiAgICAgIGlmIChjID09PSBcIidcIikge1xuICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogYnJhY2tldGVkLCB2YWw6IGN1cnJlbnRGdWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICBjdXJyZW50RnVsbCA9IFwiXCI7XG4gICAgICAgIGJyYWNrZXRlZCA9ICFicmFja2V0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGJyYWNrZXRlZCkge1xuICAgICAgICBjdXJyZW50RnVsbCArPSBjO1xuICAgICAgfSBlbHNlIGlmIChjID09PSBjdXJyZW50KSB7XG4gICAgICAgIGN1cnJlbnRGdWxsICs9IGM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogZmFsc2UsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudEZ1bGwgPSBjO1xuICAgICAgICBjdXJyZW50ID0gYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkge1xuICAgICAgc3BsaXRzLnB1c2goeyBsaXRlcmFsOiBicmFja2V0ZWQsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwbGl0cztcbiAgfVxuXG4gIHN0YXRpYyBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuKSB7XG4gICAgcmV0dXJuIG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHNbdG9rZW5dO1xuICB9XG5cbiAgY29uc3RydWN0b3IobG9jYWxlLCBmb3JtYXRPcHRzKSB7XG4gICAgdGhpcy5vcHRzID0gZm9ybWF0T3B0cztcbiAgICB0aGlzLmxvYyA9IGxvY2FsZTtcbiAgICB0aGlzLnN5c3RlbUxvYyA9IG51bGw7XG4gIH1cblxuICBmb3JtYXRXaXRoU3lzdGVtRGVmYXVsdChkdCwgb3B0cykge1xuICAgIGlmICh0aGlzLnN5c3RlbUxvYyA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5zeXN0ZW1Mb2MgPSB0aGlzLmxvYy5yZWRlZmF1bHRUb1N5c3RlbSgpO1xuICAgIH1cbiAgICBjb25zdCBkZiA9IHRoaXMuc3lzdGVtTG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYuZm9ybWF0KCk7XG4gIH1cblxuICBmb3JtYXREYXRlVGltZShkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdCgpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWVQYXJ0cyhkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdFRvUGFydHMoKTtcbiAgfVxuXG4gIHJlc29sdmVkT3B0aW9ucyhkdCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7XG4gICAgcmV0dXJuIGRmLnJlc29sdmVkT3B0aW9ucygpO1xuICB9XG5cbiAgbnVtKG4sIHAgPSAwKSB7XG4gICAgLy8gd2UgZ2V0IHNvbWUgcGVyZiBvdXQgb2YgZG9pbmcgdGhpcyBoZXJlLCBhbm5veWluZ2x5XG4gICAgaWYgKHRoaXMub3B0cy5mb3JjZVNpbXBsZSkge1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KG4sIHApO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuXG4gICAgaWYgKHAgPiAwKSB7XG4gICAgICBvcHRzLnBhZFRvID0gcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKG9wdHMpLmZvcm1hdChuKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm10KSB7XG4gICAgY29uc3Qga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gXCJlblwiLFxuICAgICAgdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAmJiB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAhPT0gXCJncmVnb3J5XCIsXG4gICAgICBzdHJpbmcgPSAob3B0cywgZXh0cmFjdCkgPT4gdGhpcy5sb2MuZXh0cmFjdChkdCwgb3B0cywgZXh0cmFjdCksXG4gICAgICBmb3JtYXRPZmZzZXQgPSAob3B0cykgPT4ge1xuICAgICAgICBpZiAoZHQuaXNPZmZzZXRGaXhlZCAmJiBkdC5vZmZzZXQgPT09IDAgJiYgb3B0cy5hbGxvd1opIHtcbiAgICAgICAgICByZXR1cm4gXCJaXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZHQuaXNWYWxpZCA/IGR0LnpvbmUuZm9ybWF0T2Zmc2V0KGR0LnRzLCBvcHRzLmZvcm1hdCkgOiBcIlwiO1xuICAgICAgfSxcbiAgICAgIG1lcmlkaWVtID0gKCkgPT5cbiAgICAgICAga25vd25FbmdsaXNoXG4gICAgICAgICAgPyBFbmdsaXNoLm1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpXG4gICAgICAgICAgOiBzdHJpbmcoeyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH0sIFwiZGF5cGVyaW9kXCIpLFxuICAgICAgbW9udGggPSAobGVuZ3RoLCBzdGFuZGFsb25lKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2hcbiAgICAgICAgICA/IEVuZ2xpc2gubW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKVxuICAgICAgICAgIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7IG1vbnRoOiBsZW5ndGggfSA6IHsgbW9udGg6IGxlbmd0aCwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpLFxuICAgICAgd2Vla2RheSA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+XG4gICAgICAgIGtub3duRW5nbGlzaFxuICAgICAgICAgID8gRW5nbGlzaC53ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aClcbiAgICAgICAgICA6IHN0cmluZyhcbiAgICAgICAgICAgICAgc3RhbmRhbG9uZSA/IHsgd2Vla2RheTogbGVuZ3RoIH0gOiB7IHdlZWtkYXk6IGxlbmd0aCwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH0sXG4gICAgICAgICAgICAgIFwid2Vla2RheVwiXG4gICAgICAgICAgICApLFxuICAgICAgbWF5YmVNYWNybyA9ICh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pO1xuICAgICAgICBpZiAoZm9ybWF0T3B0cykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBmb3JtYXRPcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcmEgPSAobGVuZ3RoKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2ggPyBFbmdsaXNoLmVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHsgZXJhOiBsZW5ndGggfSwgXCJlcmFcIiksXG4gICAgICB0b2tlblRvU3RyaW5nID0gKHRva2VuKSA9PiB7XG4gICAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwOi8vY2xkci51bmljb2RlLm9yZy90cmFuc2xhdGlvbi9kYXRlLXRpbWUtMS9kYXRlLXRpbWUjVE9DLVN0YW5kYWxvbmUtdnMuLUZvcm1hdC1TdHlsZXNcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgIC8vIG1zXG4gICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taWxsaXNlY29uZCk7XG4gICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICAgICAgY2FzZSBcIlNTU1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbGxpc2Vjb25kLCAzKTtcbiAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5zZWNvbmQpO1xuICAgICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnNlY29uZCwgMik7XG4gICAgICAgICAgLy8gZnJhY3Rpb25hbCBzZWNvbmRzXG4gICAgICAgICAgY2FzZSBcInV1XCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwKSwgMik7XG4gICAgICAgICAgY2FzZSBcInV1dVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZHQubWlsbGlzZWNvbmQgLyAxMDApKTtcbiAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taW51dGUpO1xuICAgICAgICAgIGNhc2UgXCJtbVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSwgMik7XG4gICAgICAgICAgLy8gaG91cnNcbiAgICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIgJSAxMiA9PT0gMCA/IDEyIDogZHQuaG91ciAlIDEyKTtcbiAgICAgICAgICBjYXNlIFwiaGhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMiwgMik7XG4gICAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyKTtcbiAgICAgICAgICBjYXNlIFwiSEhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyLCAyKTtcbiAgICAgICAgICAvLyBvZmZzZXRcbiAgICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArNlxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogXCJuYXJyb3dcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArMDY6MDBcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwic2hvcnRcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgKzA2MDBcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoeyBmb3JtYXQ6IFwidGVjaGllXCIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTtcbiAgICAgICAgICBjYXNlIFwiWlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSBFU1RcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiBcInNob3J0XCIsIGxvY2FsZTogdGhpcy5sb2MubG9jYWxlIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSBFYXN0ZXJuIFN0YW5kYXJkIFRpbWVcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiBcImxvbmdcIiwgbG9jYWxlOiB0aGlzLmxvYy5sb2NhbGUgfSk7XG4gICAgICAgICAgLy8gem9uZVxuICAgICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFtZXJpY2EvTmV3X1lvcmtcbiAgICAgICAgICAgIHJldHVybiBkdC56b25lTmFtZTtcbiAgICAgICAgICAvLyBtZXJpZGllbXNcbiAgICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgICAgcmV0dXJuIG1lcmlkaWVtKCk7XG4gICAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgZGF5OiBcIm51bWVyaWNcIiB9LCBcImRheVwiKSA6IHRoaXMubnVtKGR0LmRheSk7XG4gICAgICAgICAgY2FzZSBcImRkXCI6XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyBkYXk6IFwiMi1kaWdpdFwiIH0sIFwiZGF5XCIpIDogdGhpcy5udW0oZHQuZGF5LCAyKTtcbiAgICAgICAgICAvLyB3ZWVrZGF5cyAtIHN0YW5kYWxvbmVcbiAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7XG4gICAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwic2hvcnRcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcImxvbmdcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcImNjY2NjXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgICAgLy8gd2Vla2RheXMgLSBmb3JtYXRcbiAgICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7XG4gICAgICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwic2hvcnRcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzZGF5J1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJsb25nXCIsIGZhbHNlKTtcbiAgICAgICAgICBjYXNlIFwiRUVFRUVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1QnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcIm5hcnJvd1wiLCBmYWxzZSk7XG4gICAgICAgICAgLy8gbW9udGhzIC0gc3RhbmRhbG9uZVxuICAgICAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIm51bWVyaWNcIiwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgpO1xuICAgICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMSwgZG9lc24ndCBzZWVtIHRvIHdvcmtcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIjItZGlnaXRcIiwgZGF5OiBcIm51bWVyaWNcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgsIDIpO1xuICAgICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFuXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJzaG9ydFwiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5XG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJsb25nXCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJMTExMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgICAgLy8gbW9udGhzIC0gZm9ybWF0XG4gICAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCk7XG4gICAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAxXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCIyLWRpZ2l0XCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoLCAyKTtcbiAgICAgICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphblxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwic2hvcnRcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphbnVhcnlcbiAgICAgICAgICAgIHJldHVybiBtb250aChcImxvbmdcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJNTU1NTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgZmFsc2UpO1xuICAgICAgICAgIC8vIHllYXJzXG4gICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMjAxNFxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpIDogdGhpcy5udW0oZHQueWVhcik7XG4gICAgICAgICAgY2FzZSBcInl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDE0XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIjItZGlnaXRcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTtcbiAgICAgICAgICBjYXNlIFwieXl5eVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMDEyXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIm51bWVyaWNcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLCA0KTtcbiAgICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAwMDAxMlxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgeWVhcjogXCJudW1lcmljXCIgfSwgXCJ5ZWFyXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQueWVhciwgNik7XG4gICAgICAgICAgLy8gZXJhc1xuICAgICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFEXG4gICAgICAgICAgICByZXR1cm4gZXJhKFwic2hvcnRcIik7XG4gICAgICAgICAgY2FzZSBcIkdHXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEFubm8gRG9taW5pXG4gICAgICAgICAgICByZXR1cm4gZXJhKFwibG9uZ1wiKTtcbiAgICAgICAgICBjYXNlIFwiR0dHR0dcIjpcbiAgICAgICAgICAgIHJldHVybiBlcmEoXCJuYXJyb3dcIik7XG4gICAgICAgICAgY2FzZSBcImtrXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuICAgICAgICAgIGNhc2UgXCJra2trXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIsIDQpO1xuICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlcik7XG4gICAgICAgICAgY2FzZSBcIldXXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlciwgMik7XG4gICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsKTtcbiAgICAgICAgICBjYXNlIFwib29vXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQub3JkaW5hbCwgMyk7XG4gICAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIpO1xuICAgICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpO1xuICAgICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC50cyAvIDEwMDApKTtcbiAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnRzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG1heWJlTWFjcm8odG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSwgdG9rZW5Ub1N0cmluZyk7XG4gIH1cblxuICBmb3JtYXREdXJhdGlvbkZyb21TdHJpbmcoZHVyLCBmbXQpIHtcbiAgICBjb25zdCB0b2tlblRvRmllbGQgPSAodG9rZW4pID0+IHtcbiAgICAgICAgc3dpdGNoICh0b2tlblswXSkge1xuICAgICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtaWxsaXNlY29uZFwiO1xuICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIHJldHVybiBcIndlZWtcIjtcbiAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwieWVhclwiO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRva2VuVG9TdHJpbmcgPSAobGlsZHVyKSA9PiAodG9rZW4pID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTtcbiAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9rZW5zID0gRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZtdCksXG4gICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShcbiAgICAgICAgKGZvdW5kLCB7IGxpdGVyYWwsIHZhbCB9KSA9PiAobGl0ZXJhbCA/IGZvdW5kIDogZm91bmQuY29uY2F0KHZhbCkpLFxuICAgICAgICBbXVxuICAgICAgKSxcbiAgICAgIGNvbGxhcHNlZCA9IGR1ci5zaGlmdFRvKC4uLnJlYWxUb2tlbnMubWFwKHRva2VuVG9GaWVsZCkuZmlsdGVyKCh0KSA9PiB0KSk7XG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2Vucyh0b2tlbnMsIHRva2VuVG9TdHJpbmcoY29sbGFwc2VkKSk7XG4gIH1cbn1cbiIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZhbGlkIHtcbiAgY29uc3RydWN0b3IocmVhc29uLCBleHBsYW5hdGlvbikge1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIHRoaXMuZXhwbGFuYXRpb24gPSBleHBsYW5hdGlvbjtcbiAgfVxuXG4gIHRvTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5leHBsYW5hdGlvbikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucmVhc29ufTogJHt0aGlzLmV4cGxhbmF0aW9ufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBab25lSXNBYnN0cmFjdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5cbi8qKlxuICogQGludGVyZmFjZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBab25lIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHpvbmVcbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgdHlwZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbmFtZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgZ2V0IGlhbmFOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBvZmZzZXQgaXMga25vd24gdG8gYmUgZml4ZWQgZm9yIHRoZSB3aG9sZSB5ZWFyLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyBjb21tb24gbmFtZSAoc3VjaCBhcyBFU1QpIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgdG8gYWZmZWN0IHRoZSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLiBBY2NlcHRzICdsb25nJyBvciAnc2hvcnQnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5sb2NhbGUgLSBXaGF0IGxvY2FsZSB0byByZXR1cm4gdGhlIG9mZnNldCBuYW1lIGluLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBvZmZzZXROYW1lKHRzLCBvcHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyB2YWx1ZSBhcyBhIHN0cmluZ1xuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBnZXQgdGhlIG9mZnNldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IC0gV2hhdCBzdHlsZSBvZiBvZmZzZXQgdG8gcmV0dXJuLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnbmFycm93JywgJ3Nob3J0Jywgb3IgJ3RlY2hpZScuIFJldHVybmluZyAnKzYnLCAnKzA2OjAwJywgb3IgJyswNjAwJyByZXNwZWN0aXZlbHlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgZm9yIHRoaXMgem9uZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWVzdGFtcC5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gY29tcHV0ZSB0aGUgb2Zmc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIG9mZnNldCh0cykge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIGVxdWFsIHRvIGFub3RoZXIgem9uZVxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXJab25lKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgdmFsaWQuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBmb3JtYXRPZmZzZXQsIHBhcnNlWm9uZUluZm8gfSBmcm9tIFwiLi4vaW1wbC91dGlsLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsb2NhbCB6b25lIGZvciB0aGlzIEphdmFTY3JpcHQgZW52aXJvbm1lbnQuXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBsb2NhbCB6b25lXG4gICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGluc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBTeXN0ZW1ab25lKCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJzeXN0ZW1cIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUodHMsIHsgZm9ybWF0LCBsb2NhbGUgfSkge1xuICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgcmV0dXJuIC1uZXcgRGF0ZSh0cykuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwic3lzdGVtXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgcGFyc2Vab25lSW5mbywgaXNVbmRlZmluZWQsIG9ialRvTG9jYWxUUyB9IGZyb20gXCIuLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbmxldCBkdGZDYWNoZSA9IHt9O1xuZnVuY3Rpb24gbWFrZURURih6b25lKSB7XG4gIGlmICghZHRmQ2FjaGVbem9uZV0pIHtcbiAgICBkdGZDYWNoZVt6b25lXSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tVVNcIiwge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiB6b25lLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgc2Vjb25kOiBcIjItZGlnaXRcIixcbiAgICAgIGVyYTogXCJzaG9ydFwiLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBkdGZDYWNoZVt6b25lXTtcbn1cblxuY29uc3QgdHlwZVRvUG9zID0ge1xuICB5ZWFyOiAwLFxuICBtb250aDogMSxcbiAgZGF5OiAyLFxuICBlcmE6IDMsXG4gIGhvdXI6IDQsXG4gIG1pbnV0ZTogNSxcbiAgc2Vjb25kOiA2LFxufTtcblxuZnVuY3Rpb24gaGFja3lPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXFx1MjAwRS9nLCBcIlwiKSxcbiAgICBwYXJzZWQgPSAvKFxcZCspXFwvKFxcZCspXFwvKFxcZCspIChBRHxCQyksPyAoXFxkKyk6KFxcZCspOihcXGQrKS8uZXhlYyhmb3JtYXR0ZWQpLFxuICAgIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZDtcbiAgcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmYWRPckJjLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF07XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0VG9QYXJ0cyhkYXRlKTtcbiAgY29uc3QgZmlsbGVkID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gZm9ybWF0dGVkW2ldO1xuICAgIGNvbnN0IHBvcyA9IHR5cGVUb1Bvc1t0eXBlXTtcblxuICAgIGlmICh0eXBlID09PSBcImVyYVwiKSB7XG4gICAgICBmaWxsZWRbcG9zXSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIWlzVW5kZWZpbmVkKHBvcykpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxlZDtcbn1cblxubGV0IGlhbmFab25lQ2FjaGUgPSB7fTtcbi8qKlxuICogQSB6b25lIGlkZW50aWZpZWQgYnkgYW4gSUFOQSBpZGVudGlmaWVyLCBsaWtlIEFtZXJpY2EvTmV3X1lvcmtcbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJQU5BWm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBab25lIG5hbWVcbiAgICogQHJldHVybiB7SUFOQVpvbmV9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlKG5hbWUpIHtcbiAgICBpZiAoIWlhbmFab25lQ2FjaGVbbmFtZV0pIHtcbiAgICAgIGlhbmFab25lQ2FjaGVbbmFtZV0gPSBuZXcgSUFOQVpvbmUobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBpYW5hWm9uZUNhY2hlW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGxvY2FsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLlxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlc2V0Q2FjaGUoKSB7XG4gICAgaWFuYVpvbmVDYWNoZSA9IHt9O1xuICAgIGR0ZkNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaXMgYSB2YWxpZCBzcGVjaWZpZXIuIFRoaXMgb25seSBjaGVja3MgdGhlIHN0cmluZydzIGZvcm1hdCwgbm90IHRoYXQgdGhlIHNwZWNpZmllciBpZGVudGlmaWVzIGEga25vd24gem9uZTsgc2VlIGlzVmFsaWRab25lIGZvciB0aGF0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBzdHJpbmcgdG8gY2hlY2sgdmFsaWRpdHkgb25cbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIkFtZXJpY2EvTmV3X1lvcmtcIikgLy89PiB0cnVlXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoXCJTcG9ydH5+YmxvcnBcIikgLy89PiBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGZvciBzb21lIHZhbGlkIElBTkEgbmFtZXMuIFVzZSBpc1ZhbGlkWm9uZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRTcGVjaWZpZXIocykge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRab25lKHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlkZW50aWZpZXMgYSByZWFsIHpvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBUaGUgc3RyaW5nIHRvIGNoZWNrXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJGYW50YXNpYS9DYXN0bGVcIikgLy89PiBmYWxzZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZFpvbmUoem9uZSkge1xuICAgIGlmICghem9uZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7IHRpbWVab25lOiB6b25lIH0pLmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLnpvbmVOYW1lID0gbmFtZTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy52YWxpZCA9IElBTkFab25lLmlzVmFsaWRab25lKG5hbWUpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaWFuYVwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0TmFtZSh0cywgeyBmb3JtYXQsIGxvY2FsZSB9KSB7XG4gICAgcmV0dXJuIHBhcnNlWm9uZUluZm8odHMsIGZvcm1hdCwgbG9jYWxlLCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCh0cykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0cyk7XG5cbiAgICBpZiAoaXNOYU4oZGF0ZSkpIHJldHVybiBOYU47XG5cbiAgICBjb25zdCBkdGYgPSBtYWtlRFRGKHRoaXMubmFtZSk7XG4gICAgbGV0IFt5ZWFyLCBtb250aCwgZGF5LCBhZE9yQmMsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IGR0Zi5mb3JtYXRUb1BhcnRzXG4gICAgICA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSlcbiAgICAgIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKTtcblxuICAgIGlmIChhZE9yQmMgPT09IFwiQkNcIikge1xuICAgICAgeWVhciA9IC1NYXRoLmFicyh5ZWFyKSArIDE7XG4gICAgfVxuXG4gICAgLy8gYmVjYXVzZSB3ZSdyZSB1c2luZyBob3VyMTIgYW5kIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwMjU1NjQmY2FuPTImcT0lMjIyNCUzQTAwJTIyJTIwZGF0ZXRpbWVmb3JtYXRcbiAgICBjb25zdCBhZGp1c3RlZEhvdXIgPSBob3VyID09PSAyNCA/IDAgOiBob3VyO1xuXG4gICAgY29uc3QgYXNVVEMgPSBvYmpUb0xvY2FsVFMoe1xuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5LFxuICAgICAgaG91cjogYWRqdXN0ZWRIb3VyLFxuICAgICAgbWludXRlLFxuICAgICAgc2Vjb25kLFxuICAgICAgbWlsbGlzZWNvbmQ6IDAsXG4gICAgfSk7XG5cbiAgICBsZXQgYXNUUyA9ICtkYXRlO1xuICAgIGNvbnN0IG92ZXIgPSBhc1RTICUgMTAwMDtcbiAgICBhc1RTIC09IG92ZXIgPj0gMCA/IG92ZXIgOiAxMDAwICsgb3ZlcjtcbiAgICByZXR1cm4gKGFzVVRDIC0gYXNUUykgLyAoNjAgKiAxMDAwKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwiaWFuYVwiICYmIG90aGVyWm9uZS5uYW1lID09PSB0aGlzLm5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgc2lnbmVkT2Zmc2V0IH0gZnJvbSBcIi4uL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxubGV0IHNpbmdsZXRvbiA9IG51bGw7XG5cbi8qKlxuICogQSB6b25lIHdpdGggYSBmaXhlZCBvZmZzZXQgKG1lYW5pbmcgbm8gRFNUKVxuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpeGVkT2Zmc2V0Wm9uZSBleHRlbmRzIFpvbmUge1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIFVUQ1xuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IHV0Y0luc3RhbmNlKCkge1xuICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiA9IG5ldyBGaXhlZE9mZnNldFpvbmUoMCk7XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIHdpdGggYSBzcGVjaWZpZWQgb2Zmc2V0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBUaGUgb2Zmc2V0IGluIG1pbnV0ZXNcbiAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfVxuICAgKi9cbiAgc3RhdGljIGluc3RhbmNlKG9mZnNldCkge1xuICAgIHJldHVybiBvZmZzZXQgPT09IDAgPyBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2UgOiBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIG9mIEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIGEgVVRDIG9mZnNldCBzdHJpbmcsIGxpa2UgXCJVVEMrNlwiXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIG9mZnNldCBzdHJpbmcgdG8gcGFyc2VcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDKzZcIilcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDKzA2XCIpXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQy02OjAwXCIpXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBwYXJzZVNwZWNpZmllcihzKSB7XG4gICAgaWYgKHMpIHtcbiAgICAgIGNvbnN0IHIgPSBzLm1hdGNoKC9edXRjKD86KFsrLV1cXGR7MSwyfSkoPzo6KFxcZHsyfSkpPyk/JC9pKTtcbiAgICAgIGlmIChyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRml4ZWRPZmZzZXRab25lKHNpZ25lZE9mZnNldChyWzFdLCByWzJdKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3Iob2Zmc2V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogQHByaXZhdGUgKiovXG4gICAgdGhpcy5maXhlZCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImZpeGVkXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/IFwiVVRDXCIgOiBgVVRDJHtmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgfVxuXG4gIGdldCBpYW5hTmFtZSgpIHtcbiAgICBpZiAodGhpcy5maXhlZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiRXRjL1VUQ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYEV0Yy9HTVQke2Zvcm1hdE9mZnNldCgtdGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgICB9XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwiZml4ZWRcIiAmJiBvdGhlclpvbmUuZml4ZWQgPT09IHRoaXMuZml4ZWQ7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbi8qKlxuICogQSB6b25lIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnZhbGlkWm9uZSBleHRlbmRzIFpvbmUge1xuICBjb25zdHJ1Y3Rvcih6b25lTmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqICBAcHJpdmF0ZSAqL1xuICAgIHRoaXMuem9uZU5hbWUgPSB6b25lTmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImludmFsaWRcIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnpvbmVOYW1lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXQoKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGVxdWFscygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvKipcbiAqIEBwcml2YXRlXG4gKi9cblxuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IEludmFsaWRab25lIGZyb20gXCIuLi96b25lcy9pbnZhbGlkWm9uZS5qc1wiO1xuXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCwgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplWm9uZShpbnB1dCwgZGVmYXVsdFpvbmUpIHtcbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSB8fCBpbnB1dCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBkZWZhdWx0Wm9uZTtcbiAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFpvbmUpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgY29uc3QgbG93ZXJlZCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyZWQgPT09IFwibG9jYWxcIiB8fCBsb3dlcmVkID09PSBcInN5c3RlbVwiKSByZXR1cm4gZGVmYXVsdFpvbmU7XG4gICAgZWxzZSBpZiAobG93ZXJlZCA9PT0gXCJ1dGNcIiB8fCBsb3dlcmVkID09PSBcImdtdFwiKSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIGVsc2UgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihsb3dlcmVkKSB8fCBJQU5BWm9uZS5jcmVhdGUoaW5wdXQpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgIHJldHVybiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoaW5wdXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dC5vZmZzZXQgJiYgdHlwZW9mIGlucHV0Lm9mZnNldCA9PT0gXCJudW1iZXJcIikge1xuICAgIC8vIFRoaXMgaXMgZHVtYiwgYnV0IHRoZSBpbnN0YW5jZW9mIGNoZWNrIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byByZWFsbHkgd29ya1xuICAgIC8vIHNvIHdlJ3JlIGR1Y2sgY2hlY2tpbmcgaXRcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBJbnZhbGlkWm9uZShpbnB1dCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgU3lzdGVtWm9uZSBmcm9tIFwiLi96b25lcy9zeXN0ZW1ab25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcblxuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcblxubGV0IG5vdyA9ICgpID0+IERhdGUubm93KCksXG4gIGRlZmF1bHRab25lID0gXCJzeXN0ZW1cIixcbiAgZGVmYXVsdExvY2FsZSA9IG51bGwsXG4gIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudWxsLFxuICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBudWxsLFxuICB0aHJvd09uSW52YWxpZDtcblxuLyoqXG4gKiBTZXR0aW5ncyBjb250YWlucyBzdGF0aWMgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGF0IGNvbnRyb2wgTHV4b24ncyBvdmVyYWxsIGJlaGF2aW9yLiBMdXhvbiBpcyBhIHNpbXBsZSBsaWJyYXJ5IHdpdGggZmV3IG9wdGlvbnMsIGJ1dCB0aGUgb25lcyBpdCBkb2VzIGhhdmUgbGl2ZSBoZXJlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLlxuICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAqL1xuICBzdGF0aWMgZ2V0IG5vdygpIHtcbiAgICByZXR1cm4gbm93O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbnVtYmVyLCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIEVwb2NoIG1pbGxpc2Vjb25kIGNvdW50XG4gICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gRGF0ZS5ub3coKSArIDMwMDAgLy8gcHJldGVuZCBpdCBpcyAzIHNlY29uZHMgaW4gdGhlIGZ1dHVyZVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiAwIC8vIGFsd2F5cyBwcmV0ZW5kIGl0J3MgSmFuIDEsIDE5NzAgYXQgbWlkbmlnaHQgaW4gVVRDIHRpbWVcbiAgICovXG4gIHN0YXRpYyBzZXQgbm93KG4pIHtcbiAgICBub3cgPSBuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgdG8gY3JlYXRlIERhdGVUaW1lcyBpbi4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogVXNlIHRoZSB2YWx1ZSBcInN5c3RlbVwiIHRvIHJlc2V0IHRoaXMgdmFsdWUgdG8gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdFpvbmUoem9uZSkge1xuICAgIGRlZmF1bHRab25lID0gem9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgdGltZSB6b25lIG9iamVjdCBjdXJyZW50bHkgdXNlZCB0byBjcmVhdGUgRGF0ZVRpbWVzLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgc3lzdGVtJ3MgdGltZSB6b25lICh0aGUgb25lIHNldCBvbiB0aGUgbWFjaGluZSB0aGF0IHJ1bnMgdGhpcyBjb2RlKS5cbiAgICogQHR5cGUge1pvbmV9XG4gICAqL1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRab25lKCkge1xuICAgIHJldHVybiBub3JtYWxpemVab25lKGRlZmF1bHRab25lLCBTeXN0ZW1ab25lLmluc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvY2FsZSgpIHtcbiAgICByZXR1cm4gZGVmYXVsdExvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdExvY2FsZShsb2NhbGUpIHtcbiAgICBkZWZhdWx0TG9jYWxlID0gbG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSgpIHtcbiAgICByZXR1cm4gZGVmYXVsdE51bWJlcmluZ1N5c3RlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbnVtYmVyaW5nIHN5c3RlbSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0obnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bWJlcmluZ1N5c3RlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgb3V0cHV0IGNhbGVuZGFyIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiBkZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IG91dHB1dCBjYWxlbmRhciB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgc2V0IGRlZmF1bHRPdXRwdXRDYWxlbmRhcihvdXRwdXRDYWxlbmRhcikge1xuICAgIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBnZXQgdGhyb3dPbkludmFsaWQoKSB7XG4gICAgcmV0dXJuIHRocm93T25JbnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBzZXQgdGhyb3dPbkludmFsaWQodCkge1xuICAgIHRocm93T25JbnZhbGlkID0gdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBMdXhvbidzIGdsb2JhbCBjYWNoZXMuIFNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpbiB0ZXN0aW5nIHNjZW5hcmlvcy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZXNldENhY2hlcygpIHtcbiAgICBMb2NhbGUucmVzZXRDYWNoZSgpO1xuICAgIElBTkFab25lLnJlc2V0Q2FjaGUoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IHBhZFN0YXJ0LCByb3VuZFRvLCBoYXNSZWxhdGl2ZSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuXG4vLyB0b2RvIC0gcmVtYXAgY2FjaGluZ1xuXG5sZXQgaW50bExGQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZExGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGR0ZiA9IGludGxMRkNhY2hlW2tleV07XG4gIGlmICghZHRmKSB7XG4gICAgZHRmID0gbmV3IEludGwuTGlzdEZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxMRkNhY2hlW2tleV0gPSBkdGY7XG4gIH1cbiAgcmV0dXJuIGR0Zjtcbn1cblxubGV0IGludGxEVENhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWREVEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgZHRmID0gaW50bERUQ2FjaGVba2V5XTtcbiAgaWYgKCFkdGYpIHtcbiAgICBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxEVENhY2hlW2tleV0gPSBkdGY7XG4gIH1cbiAgcmV0dXJuIGR0Zjtcbn1cblxubGV0IGludGxOdW1DYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkSU5GKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxOdW1DYWNoZVtrZXldO1xuICBpZiAoIWluZikge1xuICAgIGluZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxOdW1DYWNoZVtrZXldID0gaW5mO1xuICB9XG4gIHJldHVybiBpbmY7XG59XG5cbmxldCBpbnRsUmVsQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZFJURihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGJhc2UsIC4uLmNhY2hlS2V5T3B0cyB9ID0gb3B0czsgLy8gZXhjbHVkZSBgYmFzZWAgZnJvbSB0aGUgb3B0aW9uc1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBjYWNoZUtleU9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxSZWxDYWNoZVtrZXldO1xuICBpZiAoIWluZikge1xuICAgIGluZiA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpO1xuICAgIGludGxSZWxDYWNoZVtrZXldID0gaW5mO1xuICB9XG4gIHJldHVybiBpbmY7XG59XG5cbmxldCBzeXNMb2NhbGVDYWNoZSA9IG51bGw7XG5mdW5jdGlvbiBzeXN0ZW1Mb2NhbGUoKSB7XG4gIGlmIChzeXNMb2NhbGVDYWNoZSkge1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfSBlbHNlIHtcbiAgICBzeXNMb2NhbGVDYWNoZSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlO1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHtcbiAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlclxuICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDdcbiAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczpcblxuICAvLyBhKSBpZiB0aGUgc3RyaW5nIGhhcyBubyAtdSBleHRlbnNpb25zLCBqdXN0IGxlYXZlIGl0IGFsb25lXG4gIC8vIGIpIGlmIGl0IGRvZXMsIHVzZSBJbnRsIHRvIHJlc29sdmUgZXZlcnl0aGluZ1xuICAvLyBjKSBpZiBJbnRsIGZhaWxzLCB0cnkgYWdhaW4gd2l0aG91dCB0aGUgLXVcblxuICBjb25zdCB1SW5kZXggPSBsb2NhbGVTdHIuaW5kZXhPZihcIi11LVwiKTtcbiAgaWYgKHVJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gW2xvY2FsZVN0cl07XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgY29uc3Qgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTtcbiAgICB0cnkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihsb2NhbGVTdHIpLnJlc29sdmVkT3B0aW9ucygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYoc21hbGxlcikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBvcHRpb25zO1xuICAgIC8vIHJldHVybiB0aGUgc21hbGxlciBvbmUgc28gdGhhdCB3ZSBjYW4gYXBwZW5kIHRoZSBjYWxlbmRhciBhbmQgbnVtYmVyaW5nIG92ZXJyaWRlcyB0byBpdFxuICAgIHJldHVybiBbc21hbGxlciwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhcl07XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50bENvbmZpZ1N0cmluZyhsb2NhbGVTdHIsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpIHtcbiAgaWYgKG91dHB1dENhbGVuZGFyIHx8IG51bWJlcmluZ1N5c3RlbSkge1xuICAgIGxvY2FsZVN0ciArPSBcIi11XCI7XG5cbiAgICBpZiAob3V0cHV0Q2FsZW5kYXIpIHtcbiAgICAgIGxvY2FsZVN0ciArPSBgLWNhLSR7b3V0cHV0Q2FsZW5kYXJ9YDtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgICBsb2NhbGVTdHIgKz0gYC1udS0ke251bWJlcmluZ1N5c3RlbX1gO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxlU3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9udGhzKGYpIHtcbiAgY29uc3QgbXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMTYsIGksIDEpO1xuICAgIG1zLnB1c2goZihkdCkpO1xuICB9XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbWFwV2Vla2RheXMoZikge1xuICBjb25zdCBtcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSA3OyBpKyspIHtcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTtcbiAgICBtcy5wdXNoKGYoZHQpKTtcbiAgfVxuICByZXR1cm4gbXM7XG59XG5cbmZ1bmN0aW9uIGxpc3RTdHVmZihsb2MsIGxlbmd0aCwgZGVmYXVsdE9LLCBlbmdsaXNoRm4sIGludGxGbikge1xuICBjb25zdCBtb2RlID0gbG9jLmxpc3RpbmdNb2RlKGRlZmF1bHRPSyk7XG5cbiAgaWYgKG1vZGUgPT09IFwiZXJyb3JcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKG1vZGUgPT09IFwiZW5cIikge1xuICAgIHJldHVybiBlbmdsaXNoRm4obGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaW50bEZuKGxlbmd0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNGYXN0TnVtYmVycyhsb2MpIHtcbiAgaWYgKGxvYy5udW1iZXJpbmdTeXN0ZW0gJiYgbG9jLm51bWJlcmluZ1N5c3RlbSAhPT0gXCJsYXRuXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGxvYy5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiIHx8XG4gICAgICAhbG9jLmxvY2FsZSB8fFxuICAgICAgbG9jLmxvY2FsZS5zdGFydHNXaXRoKFwiZW5cIikgfHxcbiAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvYy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgUG9seU51bWJlckZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKGludGwsIGZvcmNlU2ltcGxlLCBvcHRzKSB7XG4gICAgdGhpcy5wYWRUbyA9IG9wdHMucGFkVG8gfHwgMDtcbiAgICB0aGlzLmZsb29yID0gb3B0cy5mbG9vciB8fCBmYWxzZTtcblxuICAgIGNvbnN0IHsgcGFkVG8sIGZsb29yLCAuLi5vdGhlck9wdHMgfSA9IG9wdHM7XG5cbiAgICBpZiAoIWZvcmNlU2ltcGxlIHx8IE9iamVjdC5rZXlzKG90aGVyT3B0cykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaW50bE9wdHMgPSB7IHVzZUdyb3VwaW5nOiBmYWxzZSwgLi4ub3B0cyB9O1xuICAgICAgaWYgKG9wdHMucGFkVG8gPiAwKSBpbnRsT3B0cy5taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG9wdHMucGFkVG87XG4gICAgICB0aGlzLmluZiA9IGdldENhY2hlZElORihpbnRsLCBpbnRsT3B0cyk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0KGkpIHtcbiAgICBpZiAodGhpcy5pbmYpIHtcbiAgICAgIGNvbnN0IGZpeGVkID0gdGhpcy5mbG9vciA/IE1hdGguZmxvb3IoaSkgOiBpO1xuICAgICAgcmV0dXJuIHRoaXMuaW5mLmZvcm1hdChmaXhlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRvIG1hdGNoIHRoZSBicm93c2VyJ3MgbnVtYmVyZm9ybWF0dGVyIGRlZmF1bHRzXG4gICAgICBjb25zdCBmaXhlZCA9IHRoaXMuZmxvb3IgPyBNYXRoLmZsb29yKGkpIDogcm91bmRUbyhpLCAzKTtcbiAgICAgIHJldHVybiBwYWRTdGFydChmaXhlZCwgdGhpcy5wYWRUbyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jbGFzcyBQb2x5RGF0ZUZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKGR0LCBpbnRsLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcblxuICAgIGxldCB6O1xuICAgIGlmIChkdC56b25lLmlzVW5pdmVyc2FsKSB7XG4gICAgICAvLyBVVEMtOCBvciBFdGMvVVRDLTggYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YSwgb25seSBFdGMvR01UKzggYW5kIHRoZSBsaWtlLlxuICAgICAgLy8gVGhhdCBpcyB3aHkgZml4ZWQtb2Zmc2V0IFRaIGlzIHNldCB0byB0aGF0IHVubGVzcyBpdCBpczpcbiAgICAgIC8vIDEuIFJlcHJlc2VudGluZyBvZmZzZXQgMCB3aGVuIFVUQyBpcyB1c2VkIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBiZWNvbWUgR01ULlxuICAgICAgLy8gMi4gVW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXI6XG4gICAgICAvLyAgICAtIHNvbWUgZG8gbm90IHN1cHBvcnQgRXRjL1xuICAgICAgLy8gICAgLSA8IEV0Yy9HTVQtMTQsID4gRXRjL0dNVCsxMiwgYW5kIDMwLW1pbnV0ZSBvciA0NS1taW51dGUgb2Zmc2V0cyBhcmUgbm90IHBhcnQgb2YgdHpkYXRhXG4gICAgICBjb25zdCBnbXRPZmZzZXQgPSAtMSAqIChkdC5vZmZzZXQgLyA2MCk7XG4gICAgICBjb25zdCBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyBgRXRjL0dNVCske2dtdE9mZnNldH1gIDogYEV0Yy9HTVQke2dtdE9mZnNldH1gO1xuICAgICAgaWYgKGR0Lm9mZnNldCAhPT0gMCAmJiBJQU5BWm9uZS5jcmVhdGUob2Zmc2V0WikudmFsaWQpIHtcbiAgICAgICAgeiA9IG9mZnNldFo7XG4gICAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBhbGwgZml4ZWQtb2Zmc2V0IHpvbmVzIGxpa2UgRXRjLys0OjMwIGFyZSBwcmVzZW50IGluIHR6ZGF0YS5cbiAgICAgICAgLy8gU28gd2UgaGF2ZSB0byBtYWtlIGRvLiBUd28gY2FzZXM6XG4gICAgICAgIC8vIDEuIFRoZSBmb3JtYXQgb3B0aW9ucyB0ZWxsIHVzIHRvIHNob3cgdGhlIHpvbmUuIFdlIGNhbid0IGRvIHRoYXQsIHNvIHRoZSBiZXN0XG4gICAgICAgIC8vIHdlIGNhbiBkbyBpcyBmb3JtYXQgdGhlIGRhdGUgaW4gVVRDLlxuICAgICAgICAvLyAyLiBUaGUgZm9ybWF0IG9wdGlvbnMgZG9uJ3QgdGVsbCB1cyB0byBzaG93IHRoZSB6b25lLiBUaGVuIHdlIGNhbiBhZGp1c3QgdGhlbVxuICAgICAgICAvLyB0aGUgdGltZSBhbmQgdGVsbCB0aGUgZm9ybWF0dGVyIHRvIHNob3cgaXQgdG8gdXMgaW4gVVRDLCBzbyB0aGF0IHRoZSB0aW1lIGlzIHJpZ2h0XG4gICAgICAgIC8vIGFuZCB0aGUgYmFkIHpvbmUgZG9lc24ndCBzaG93IHVwLlxuICAgICAgICB6ID0gXCJVVENcIjtcbiAgICAgICAgaWYgKG9wdHMudGltZVpvbmVOYW1lKSB7XG4gICAgICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IERhdGVUaW1lLmZyb21NaWxsaXMoZHQudHMgKyBkdC5vZmZzZXQgKiA2MCAqIDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09IFwic3lzdGVtXCIpIHtcbiAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgeiA9IGR0LnpvbmUubmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRsT3B0cyA9IHsgLi4udGhpcy5vcHRzIH07XG4gICAgaWYgKHopIHtcbiAgICAgIGludGxPcHRzLnRpbWVab25lID0gejtcbiAgICB9XG4gICAgdGhpcy5kdGYgPSBnZXRDYWNoZWREVEYoaW50bCwgaW50bE9wdHMpO1xuICB9XG5cbiAgZm9ybWF0KCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5mb3JtYXQodGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgfVxuXG4gIGZvcm1hdFRvUGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdFRvUGFydHModGhpcy5kdC50b0pTRGF0ZSgpKTtcbiAgfVxuXG4gIHJlc29sdmVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kdGYucmVzb2x2ZWRPcHRpb25zKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQb2x5UmVsRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoaW50bCwgaXNFbmdsaXNoLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0geyBzdHlsZTogXCJsb25nXCIsIC4uLm9wdHMgfTtcbiAgICBpZiAoIWlzRW5nbGlzaCAmJiBoYXNSZWxhdGl2ZSgpKSB7XG4gICAgICB0aGlzLnJ0ZiA9IGdldENhY2hlZFJURihpbnRsLCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRW5nbGlzaC5mb3JtYXRSZWxhdGl2ZVRpbWUodW5pdCwgY291bnQsIHRoaXMub3B0cy5udW1lcmljLCB0aGlzLm9wdHMuc3R5bGUgIT09IFwibG9uZ1wiKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KSB7XG4gICAgaWYgKHRoaXMucnRmKSB7XG4gICAgICByZXR1cm4gdGhpcy5ydGYuZm9ybWF0VG9QYXJ0cyhjb3VudCwgdW5pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsZSB7XG4gIHN0YXRpYyBmcm9tT3B0cyhvcHRzKSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUob3B0cy5sb2NhbGUsIG9wdHMubnVtYmVyaW5nU3lzdGVtLCBvcHRzLm91dHB1dENhbGVuZGFyLCBvcHRzLmRlZmF1bHRUb0VOKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCBkZWZhdWx0VG9FTiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc3BlY2lmaWVkTG9jYWxlID0gbG9jYWxlIHx8IFNldHRpbmdzLmRlZmF1bHRMb2NhbGU7XG4gICAgLy8gdGhlIHN5c3RlbSBsb2NhbGUgaXMgdXNlZnVsIGZvciBodW1hbiByZWFkYWJsZSBzdHJpbmdzIGJ1dCBhbm5veWluZyBmb3IgcGFyc2luZy9mb3JtYXR0aW5nIGtub3duIGZvcm1hdHNcbiAgICBjb25zdCBsb2NhbGVSID0gc3BlY2lmaWVkTG9jYWxlIHx8IChkZWZhdWx0VG9FTiA/IFwiZW4tVVNcIiA6IHN5c3RlbUxvY2FsZSgpKTtcbiAgICBjb25zdCBudW1iZXJpbmdTeXN0ZW1SID0gbnVtYmVyaW5nU3lzdGVtIHx8IFNldHRpbmdzLmRlZmF1bHROdW1iZXJpbmdTeXN0ZW07XG4gICAgY29uc3Qgb3V0cHV0Q2FsZW5kYXJSID0gb3V0cHV0Q2FsZW5kYXIgfHwgU2V0dGluZ3MuZGVmYXVsdE91dHB1dENhbGVuZGFyO1xuICAgIHJldHVybiBuZXcgTG9jYWxlKGxvY2FsZVIsIG51bWJlcmluZ1N5c3RlbVIsIG91dHB1dENhbGVuZGFyUiwgc3BlY2lmaWVkTG9jYWxlKTtcbiAgfVxuXG4gIHN0YXRpYyByZXNldENhY2hlKCkge1xuICAgIHN5c0xvY2FsZUNhY2hlID0gbnVsbDtcbiAgICBpbnRsRFRDYWNoZSA9IHt9O1xuICAgIGludGxOdW1DYWNoZSA9IHt9O1xuICAgIGludGxSZWxDYWNoZSA9IHt9O1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3QoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxvY2FsZSwgbnVtYmVyaW5nLCBvdXRwdXRDYWxlbmRhciwgc3BlY2lmaWVkTG9jYWxlKSB7XG4gICAgY29uc3QgW3BhcnNlZExvY2FsZSwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtLCBwYXJzZWRPdXRwdXRDYWxlbmRhcl0gPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpO1xuXG4gICAgdGhpcy5sb2NhbGUgPSBwYXJzZWRMb2NhbGU7XG4gICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmcgfHwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtIHx8IG51bGw7XG4gICAgdGhpcy5vdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyIHx8IHBhcnNlZE91dHB1dENhbGVuZGFyIHx8IG51bGw7XG4gICAgdGhpcy5pbnRsID0gaW50bENvbmZpZ1N0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sIHRoaXMub3V0cHV0Q2FsZW5kYXIpO1xuXG4gICAgdGhpcy53ZWVrZGF5c0NhY2hlID0geyBmb3JtYXQ6IHt9LCBzdGFuZGFsb25lOiB7fSB9O1xuICAgIHRoaXMubW9udGhzQ2FjaGUgPSB7IGZvcm1hdDoge30sIHN0YW5kYWxvbmU6IHt9IH07XG4gICAgdGhpcy5tZXJpZGllbUNhY2hlID0gbnVsbDtcbiAgICB0aGlzLmVyYUNhY2hlID0ge307XG5cbiAgICB0aGlzLnNwZWNpZmllZExvY2FsZSA9IHNwZWNpZmllZExvY2FsZTtcbiAgICB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID0gbnVsbDtcbiAgfVxuXG4gIGdldCBmYXN0TnVtYmVycygpIHtcbiAgICBpZiAodGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9PSBudWxsKSB7XG4gICAgICB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID0gc3VwcG9ydHNGYXN0TnVtYmVycyh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mYXN0TnVtYmVyc0NhY2hlZDtcbiAgfVxuXG4gIGxpc3RpbmdNb2RlKCkge1xuICAgIGNvbnN0IGlzQWN0dWFsbHlFbiA9IHRoaXMuaXNFbmdsaXNoKCk7XG4gICAgY29uc3QgaGFzTm9XZWlyZG5lc3MgPVxuICAgICAgKHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBudWxsIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBcImxhdG5cIikgJiZcbiAgICAgICh0aGlzLm91dHB1dENhbGVuZGFyID09PSBudWxsIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IFwiZ3JlZ29yeVwiKTtcbiAgICByZXR1cm4gaXNBY3R1YWxseUVuICYmIGhhc05vV2VpcmRuZXNzID8gXCJlblwiIDogXCJpbnRsXCI7XG4gIH1cblxuICBjbG9uZShhbHRzKSB7XG4gICAgaWYgKCFhbHRzIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKFxuICAgICAgICBhbHRzLmxvY2FsZSB8fCB0aGlzLnNwZWNpZmllZExvY2FsZSxcbiAgICAgICAgYWx0cy5udW1iZXJpbmdTeXN0ZW0gfHwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGFsdHMub3V0cHV0Q2FsZW5kYXIgfHwgdGhpcy5vdXRwdXRDYWxlbmRhcixcbiAgICAgICAgYWx0cy5kZWZhdWx0VG9FTiB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZWRlZmF1bHRUb0VOKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cywgZGVmYXVsdFRvRU46IHRydWUgfSk7XG4gIH1cblxuICByZWRlZmF1bHRUb1N5c3RlbShhbHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsIGRlZmF1bHRUb0VOOiBmYWxzZSB9KTtcbiAgfVxuXG4gIG1vbnRocyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlLCBkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgRW5nbGlzaC5tb250aHMsICgpID0+IHtcbiAgICAgIGNvbnN0IGludGwgPSBmb3JtYXQgPyB7IG1vbnRoOiBsZW5ndGgsIGRheTogXCJudW1lcmljXCIgfSA6IHsgbW9udGg6IGxlbmd0aCB9LFxuICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG4gICAgICBpZiAoIXRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdKSB7XG4gICAgICAgIHRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwTW9udGhzKChkdCkgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcIm1vbnRoXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIHdlZWtkYXlzKGxlbmd0aCwgZm9ybWF0ID0gZmFsc2UsIGRlZmF1bHRPSyA9IHRydWUpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCBFbmdsaXNoLndlZWtkYXlzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0gZm9ybWF0XG4gICAgICAgICAgPyB7IHdlZWtkYXk6IGxlbmd0aCwgeWVhcjogXCJudW1lcmljXCIsIG1vbnRoOiBcImxvbmdcIiwgZGF5OiBcIm51bWVyaWNcIiB9XG4gICAgICAgICAgOiB7IHdlZWtkYXk6IGxlbmd0aCB9LFxuICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG4gICAgICBpZiAoIXRoaXMud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcFdlZWtkYXlzKChkdCkgPT5cbiAgICAgICAgICB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwid2Vla2RheVwiKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICBtZXJpZGllbXMoZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYoXG4gICAgICB0aGlzLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdE9LLFxuICAgICAgKCkgPT4gRW5nbGlzaC5tZXJpZGllbXMsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBjb3VsZCBiZSBhcmliaXRyYXJ5IGRheSBwZXJpb2RzLiBXZSdyZSBnb25uYSBhc3N1bWUgdGhlcmUgYXJlIGV4YWN0bHkgdHdvXG4gICAgICAgIC8vIGZvciBBTSBhbmQgUE0uIFRoaXMgaXMgcHJvYmFibHkgd3JvbmcsIGJ1dCBpdCdzIG1ha2VzIHBhcnNpbmcgd2F5IGVhc2llci5cbiAgICAgICAgaWYgKCF0aGlzLm1lcmlkaWVtQ2FjaGUpIHtcbiAgICAgICAgICBjb25zdCBpbnRsID0geyBob3VyOiBcIm51bWVyaWNcIiwgaG91ckN5Y2xlOiBcImgxMlwiIH07XG4gICAgICAgICAgdGhpcy5tZXJpZGllbUNhY2hlID0gW0RhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDkpLCBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCAxOSldLm1hcChcbiAgICAgICAgICAgIChkdCkgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcImRheXBlcmlvZFwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tZXJpZGllbUNhY2hlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBlcmFzKGxlbmd0aCwgZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIEVuZ2xpc2guZXJhcywgKCkgPT4ge1xuICAgICAgY29uc3QgaW50bCA9IHsgZXJhOiBsZW5ndGggfTtcblxuICAgICAgLy8gVGhpcyBpcyBwcm9ibGVtYXRpYy4gRGlmZmVyZW50IGNhbGVuZGFycyBhcmUgZ29pbmcgdG8gZGVmaW5lIGVyYXMgdG90YWxseSBkaWZmZXJlbnRseS4gV2hhdCBJIG5lZWQgaXMgdGhlIG1pbmltdW0gc2V0IG9mIGRhdGVzXG4gICAgICAvLyB0byBkZWZpbml0ZWx5IGVudW1lcmF0ZSB0aGVtLlxuICAgICAgaWYgKCF0aGlzLmVyYUNhY2hlW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy5lcmFDYWNoZVtsZW5ndGhdID0gW0RhdGVUaW1lLnV0YygtNDAsIDEsIDEpLCBEYXRlVGltZS51dGMoMjAxNywgMSwgMSldLm1hcCgoZHQpID0+XG4gICAgICAgICAgdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcImVyYVwiKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5lcmFDYWNoZVtsZW5ndGhdO1xuICAgIH0pO1xuICB9XG5cbiAgZXh0cmFjdChkdCwgaW50bE9wdHMsIGZpZWxkKSB7XG4gICAgY29uc3QgZGYgPSB0aGlzLmR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyksXG4gICAgICByZXN1bHRzID0gZGYuZm9ybWF0VG9QYXJ0cygpLFxuICAgICAgbWF0Y2hpbmcgPSByZXN1bHRzLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBmaWVsZCk7XG4gICAgcmV0dXJuIG1hdGNoaW5nID8gbWF0Y2hpbmcudmFsdWUgOiBudWxsO1xuICB9XG5cbiAgbnVtYmVyRm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIC8vIHRoaXMgZm9yY2VzaW1wbGUgb3B0aW9uIGlzIG5ldmVyIHVzZWQgKHRoZSBvbmx5IGNhbGxlciBzaG9ydC1jaXJjdWl0cyBvbiBpdCwgYnV0IGl0IHNlZW1zIHNhZmVyIHRvIGxlYXZlKVxuICAgIC8vIChpbiBjb250cmFzdCwgdGhlIHJlc3Qgb2YgdGhlIGNvbmRpdGlvbiBpcyB1c2VkIGhlYXZpbHkpXG4gICAgcmV0dXJuIG5ldyBQb2x5TnVtYmVyRm9ybWF0dGVyKHRoaXMuaW50bCwgb3B0cy5mb3JjZVNpbXBsZSB8fCB0aGlzLmZhc3ROdW1iZXJzLCBvcHRzKTtcbiAgfVxuXG4gIGR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQb2x5RGF0ZUZvcm1hdHRlcihkdCwgdGhpcy5pbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICByZWxGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQb2x5UmVsRm9ybWF0dGVyKHRoaXMuaW50bCwgdGhpcy5pc0VuZ2xpc2goKSwgb3B0cyk7XG4gIH1cblxuICBsaXN0Rm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBnZXRDYWNoZWRMRih0aGlzLmludGwsIG9wdHMpO1xuICB9XG5cbiAgaXNFbmdsaXNoKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxvY2FsZSA9PT0gXCJlblwiIHx8XG4gICAgICB0aGlzLmxvY2FsZS50b0xvd2VyQ2FzZSgpID09PSBcImVuLXVzXCIgfHxcbiAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLnN0YXJ0c1dpdGgoXCJlbi11c1wiKVxuICAgICk7XG4gIH1cblxuICBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5sb2NhbGUgPT09IG90aGVyLmxvY2FsZSAmJlxuICAgICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IG90aGVyLm51bWJlcmluZ1N5c3RlbSAmJlxuICAgICAgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gb3RoZXIub3V0cHV0Q2FsZW5kYXJcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgdW50cnVuY2F0ZVllYXIsXG4gIHNpZ25lZE9mZnNldCxcbiAgcGFyc2VJbnRlZ2VyLFxuICBwYXJzZU1pbGxpcyxcbiAgaWFuYVJlZ2V4LFxuICBpc1VuZGVmaW5lZCxcbiAgcGFyc2VGbG9hdGluZ1xufSBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgKiBhcyBFbmdsaXNoIGZyb20gXCIuL2VuZ2xpc2guanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuXG4vKlxuICogVGhpcyBmaWxlIGhhbmRsZXMgcGFyc2luZyBmb3Igd2VsbC1zcGVjaWZpZWQgZm9ybWF0cy4gSGVyZSdzIGhvdyBpdCB3b3JrczpcbiAqIFR3byB0aGluZ3MgZ28gaW50byBwYXJzaW5nOiBhIHJlZ2V4IHRvIG1hdGNoIHdpdGggYW5kIGFuIGV4dHJhY3RvciB0byB0YWtlIGFwYXJ0IHRoZSBncm91cHMgaW4gdGhlIG1hdGNoLlxuICogQW4gZXh0cmFjdG9yIGlzIGp1c3QgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgcmVnZXggbWF0Y2ggYXJyYXkgYW5kIHJldHVybnMgYSB7IHllYXI6IC4uLiwgbW9udGg6IC4uLiB9IG9iamVjdFxuICogcGFyc2UoKSBkb2VzIHRoZSB3b3JrIG9mIGV4ZWN1dGluZyB0aGUgcmVnZXggYW5kIGFwcGx5aW5nIHRoZSBleHRyYWN0b3IuIEl0IHRha2VzIG11bHRpcGxlIHJlZ2V4L2V4dHJhY3RvciBwYWlycyB0byB0cnkgaW4gc2VxdWVuY2UuXG4gKiBFeHRyYWN0b3JzIGNhbiB0YWtlIGEgXCJjdXJzb3JcIiByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBpbiB0aGUgbWF0Y2ggdG8gbG9vayBhdC4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGNvbWJpbmUgZXh0cmFjdG9ycy5cbiAqIGNvbWJpbmVFeHRyYWN0b3JzKCkgZG9lcyB0aGUgd29yayBvZiBjb21iaW5pbmcgdGhlbSwga2VlcGluZyB0cmFjayBvZiB0aGUgY3Vyc29yIHRocm91Z2ggbXVsdGlwbGUgZXh0cmFjdGlvbnMuXG4gKiBTb21lIGV4dHJhY3Rpb25zIGFyZSBzdXBlciBkdW1iIGFuZCBzaW1wbGVQYXJzZSBhbmQgZnJvbVN0cmluZ3MgaGVscCBEUlkgdGhlbS5cbiAqL1xuXG5mdW5jdGlvbiBjb21iaW5lUmVnZXhlcyguLi5yZWdleGVzKSB7XG4gIGNvbnN0IGZ1bGwgPSByZWdleGVzLnJlZHVjZSgoZiwgcikgPT4gZiArIHIuc291cmNlLCBcIlwiKTtcbiAgcmV0dXJuIFJlZ0V4cChgXiR7ZnVsbH0kYCk7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFeHRyYWN0b3JzKC4uLmV4dHJhY3RvcnMpIHtcbiAgcmV0dXJuIG0gPT5cbiAgICBleHRyYWN0b3JzXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoW21lcmdlZFZhbHMsIG1lcmdlZFpvbmUsIGN1cnNvcl0sIGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgW3ZhbCwgem9uZSwgbmV4dF0gPSBleChtLCBjdXJzb3IpO1xuICAgICAgICAgIHJldHVybiBbeyAuLi5tZXJnZWRWYWxzLCAuLi52YWwgfSwgem9uZSB8fCBtZXJnZWRab25lLCBuZXh0XTtcbiAgICAgICAgfSxcbiAgICAgICAgW3t9LCBudWxsLCAxXVxuICAgICAgKVxuICAgICAgLnNsaWNlKDAsIDIpO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzLCAuLi5wYXR0ZXJucykge1xuICBpZiAocyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3JlZ2V4LCBleHRyYWN0b3JdIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWMocyk7XG4gICAgaWYgKG0pIHtcbiAgICAgIHJldHVybiBleHRyYWN0b3IobSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbbnVsbCwgbnVsbF07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVBhcnNlKC4uLmtleXMpIHtcbiAgcmV0dXJuIChtYXRjaCwgY3Vyc29yKSA9PiB7XG4gICAgY29uc3QgcmV0ID0ge307XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2tleXNbaV1dID0gcGFyc2VJbnRlZ2VyKG1hdGNoW2N1cnNvciArIGldKTtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXQsIG51bGwsIGN1cnNvciArIGldO1xuICB9O1xufVxuXG4vLyBJU08gYW5kIFNRTCBwYXJzaW5nXG5jb25zdCBvZmZzZXRSZWdleCA9IC8oPzooWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/KS87XG5jb25zdCBpc29FeHRlbmRlZFpvbmUgPSBgKD86JHtvZmZzZXRSZWdleC5zb3VyY2V9Pyg/OlxcXFxbKCR7aWFuYVJlZ2V4LnNvdXJjZX0pXFxcXF0pPyk/YDtcbmNvbnN0IGlzb1RpbWVCYXNlUmVnZXggPSAvKFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/OlsuLF0oXFxkezEsMzB9KSk/KT8pPy87XG5jb25zdCBpc29UaW1lUmVnZXggPSBSZWdFeHAoYCR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9JHtpc29FeHRlbmRlZFpvbmV9YCk7XG5jb25zdCBpc29UaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoYCg/OlQke2lzb1RpbWVSZWdleC5zb3VyY2V9KT9gKTtcbmNvbnN0IGlzb1ltZFJlZ2V4ID0gLyhbKy1dXFxkezZ9fFxcZHs0fSkoPzotPyhcXGRcXGQpKD86LT8oXFxkXFxkKSk/KT8vO1xuY29uc3QgaXNvV2Vla1JlZ2V4ID0gLyhcXGR7NH0pLT9XKFxcZFxcZCkoPzotPyhcXGQpKT8vO1xuY29uc3QgaXNvT3JkaW5hbFJlZ2V4ID0gLyhcXGR7NH0pLT8oXFxkezN9KS87XG5jb25zdCBleHRyYWN0SVNPV2Vla0RhdGEgPSBzaW1wbGVQYXJzZShcIndlZWtZZWFyXCIsIFwid2Vla051bWJlclwiLCBcIndlZWtEYXlcIik7XG5jb25zdCBleHRyYWN0SVNPT3JkaW5hbERhdGEgPSBzaW1wbGVQYXJzZShcInllYXJcIiwgXCJvcmRpbmFsXCIpO1xuY29uc3Qgc3FsWW1kUmVnZXggPSAvKFxcZHs0fSktKFxcZFxcZCktKFxcZFxcZCkvOyAvLyBkdW1iZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBJU08gb25lXG5jb25zdCBzcWxUaW1lUmVnZXggPSBSZWdFeHAoXG4gIGAke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSA/KD86JHtvZmZzZXRSZWdleC5zb3VyY2V9fCgke2lhbmFSZWdleC5zb3VyY2V9KSk/YFxuKTtcbmNvbnN0IHNxbFRpbWVFeHRlbnNpb25SZWdleCA9IFJlZ0V4cChgKD86ICR7c3FsVGltZVJlZ2V4LnNvdXJjZX0pP2ApO1xuXG5mdW5jdGlvbiBpbnQobWF0Y2gsIHBvcywgZmFsbGJhY2spIHtcbiAgY29uc3QgbSA9IG1hdGNoW3Bvc107XG4gIHJldHVybiBpc1VuZGVmaW5lZChtKSA/IGZhbGxiYWNrIDogcGFyc2VJbnRlZ2VyKG0pO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPWW1kKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICB5ZWFyOiBpbnQobWF0Y2gsIGN1cnNvciksXG4gICAgbW9udGg6IGludChtYXRjaCwgY3Vyc29yICsgMSwgMSksXG4gICAgZGF5OiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDEpXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT1RpbWUobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBpdGVtID0ge1xuICAgIGhvdXJzOiBpbnQobWF0Y2gsIGN1cnNvciwgMCksXG4gICAgbWludXRlczogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAwKSxcbiAgICBzZWNvbmRzOiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDApLFxuICAgIG1pbGxpc2Vjb25kczogcGFyc2VNaWxsaXMobWF0Y2hbY3Vyc29yICsgM10pXG4gIH07XG5cbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyA0XTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT09mZnNldChtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGxvY2FsID0gIW1hdGNoW2N1cnNvcl0gJiYgIW1hdGNoW2N1cnNvciArIDFdLFxuICAgIGZ1bGxPZmZzZXQgPSBzaWduZWRPZmZzZXQobWF0Y2hbY3Vyc29yICsgMV0sIG1hdGNoW2N1cnNvciArIDJdKSxcbiAgICB6b25lID0gbG9jYWwgPyBudWxsIDogRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGZ1bGxPZmZzZXQpO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElBTkFab25lKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3Qgem9uZSA9IG1hdGNoW2N1cnNvcl0gPyBJQU5BWm9uZS5jcmVhdGUobWF0Y2hbY3Vyc29yXSkgOiBudWxsO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTtcbn1cblxuLy8gSVNPIHRpbWUgcGFyc2luZ1xuXG5jb25zdCBpc29UaW1lT25seSA9IFJlZ0V4cChgXlQ/JHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0kYCk7XG5cbi8vIElTTyBkdXJhdGlvbiBwYXJzaW5nXG5cbmNvbnN0IGlzb0R1cmF0aW9uID0gL14tP1AoPzooPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylZKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylXKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylEKT8oPzpUKD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pSCk/KD86KC0/XFxkezEsMjB9KD86XFwuXFxkezEsMjB9KT8pTSk/KD86KC0/XFxkezEsMjB9KSg/OlsuLF0oLT9cXGR7MSwyMH0pKT9TKT8pPykkLztcblxuZnVuY3Rpb24gZXh0cmFjdElTT0R1cmF0aW9uKG1hdGNoKSB7XG4gIGNvbnN0IFtcbiAgICBzLFxuICAgIHllYXJTdHIsXG4gICAgbW9udGhTdHIsXG4gICAgd2Vla1N0cixcbiAgICBkYXlTdHIsXG4gICAgaG91clN0cixcbiAgICBtaW51dGVTdHIsXG4gICAgc2Vjb25kU3RyLFxuICAgIG1pbGxpc2Vjb25kc1N0clxuICBdID0gbWF0Y2g7XG5cbiAgY29uc3QgaGFzTmVnYXRpdmVQcmVmaXggPSBzWzBdID09PSBcIi1cIjtcbiAgY29uc3QgbmVnYXRpdmVTZWNvbmRzID0gc2Vjb25kU3RyICYmIHNlY29uZFN0clswXSA9PT0gXCItXCI7XG5cbiAgY29uc3QgbWF5YmVOZWdhdGUgPSAobnVtLCBmb3JjZSA9IGZhbHNlKSA9PlxuICAgIG51bSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCAobnVtICYmIGhhc05lZ2F0aXZlUHJlZml4KSkgPyAtbnVtIDogbnVtO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgeWVhcnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoeWVhclN0cikpLFxuICAgICAgbW9udGhzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1vbnRoU3RyKSksXG4gICAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh3ZWVrU3RyKSksXG4gICAgICBkYXlzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKGRheVN0cikpLFxuICAgICAgaG91cnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoaG91clN0cikpLFxuICAgICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtaW51dGVTdHIpKSxcbiAgICAgIHNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoc2Vjb25kU3RyKSwgc2Vjb25kU3RyID09PSBcIi0wXCIpLFxuICAgICAgbWlsbGlzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZU1pbGxpcyhtaWxsaXNlY29uZHNTdHIpLCBuZWdhdGl2ZVNlY29uZHMpXG4gICAgfVxuICBdO1xufVxuXG4vLyBUaGVzZSBhcmUgYSBsaXR0bGUgYnJhaW5kZWFkLiBFRFQgKnNob3VsZCogdGVsbCB1cyB0aGF0IHdlJ3JlIGluLCBzYXksIEFtZXJpY2EvTmV3X1lvcmtcbi8vIGFuZCBub3QganVzdCB0aGF0IHdlJ3JlIGluIC0yNDAgKnJpZ2h0IG5vdyouIEJ1dCBzaW5jZSBJIGRvbid0IHRoaW5rIHRoZXNlIGFyZSB1c2VkIHRoYXQgb2Z0ZW5cbi8vIEknbSBqdXN0IGdvaW5nIHRvIGlnbm9yZSB0aGF0XG5jb25zdCBvYnNPZmZzZXRzID0ge1xuICBHTVQ6IDAsXG4gIEVEVDogLTQgKiA2MCxcbiAgRVNUOiAtNSAqIDYwLFxuICBDRFQ6IC01ICogNjAsXG4gIENTVDogLTYgKiA2MCxcbiAgTURUOiAtNiAqIDYwLFxuICBNU1Q6IC03ICogNjAsXG4gIFBEVDogLTcgKiA2MCxcbiAgUFNUOiAtOCAqIDYwXG59O1xuXG5mdW5jdGlvbiBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgeWVhcjogeWVhclN0ci5sZW5ndGggPT09IDIgPyB1bnRydW5jYXRlWWVhcihwYXJzZUludGVnZXIoeWVhclN0cikpIDogcGFyc2VJbnRlZ2VyKHllYXJTdHIpLFxuICAgIG1vbnRoOiBFbmdsaXNoLm1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpICsgMSxcbiAgICBkYXk6IHBhcnNlSW50ZWdlcihkYXlTdHIpLFxuICAgIGhvdXI6IHBhcnNlSW50ZWdlcihob3VyU3RyKSxcbiAgICBtaW51dGU6IHBhcnNlSW50ZWdlcihtaW51dGVTdHIpXG4gIH07XG5cbiAgaWYgKHNlY29uZFN0cikgcmVzdWx0LnNlY29uZCA9IHBhcnNlSW50ZWdlcihzZWNvbmRTdHIpO1xuICBpZiAod2Vla2RheVN0cikge1xuICAgIHJlc3VsdC53ZWVrZGF5ID1cbiAgICAgIHdlZWtkYXlTdHIubGVuZ3RoID4gM1xuICAgICAgICA/IEVuZ2xpc2gud2Vla2RheXNMb25nLmluZGV4T2Yod2Vla2RheVN0cikgKyAxXG4gICAgICAgIDogRW5nbGlzaC53ZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0cikgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gUkZDIDI4MjIvNTMyMlxuY29uc3QgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksXFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXFxkXFxkKShcXGRcXGQpKSkkLztcblxuZnVuY3Rpb24gZXh0cmFjdFJGQzI4MjIobWF0Y2gpIHtcbiAgY29uc3QgW1xuICAgICAgLFxuICAgICAgd2Vla2RheVN0cixcbiAgICAgIGRheVN0cixcbiAgICAgIG1vbnRoU3RyLFxuICAgICAgeWVhclN0cixcbiAgICAgIGhvdXJTdHIsXG4gICAgICBtaW51dGVTdHIsXG4gICAgICBzZWNvbmRTdHIsXG4gICAgICBvYnNPZmZzZXQsXG4gICAgICBtaWxPZmZzZXQsXG4gICAgICBvZmZIb3VyU3RyLFxuICAgICAgb2ZmTWludXRlU3RyXG4gICAgXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcblxuICBsZXQgb2Zmc2V0O1xuICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICB9IGVsc2UgaWYgKG1pbE9mZnNldCkge1xuICAgIG9mZnNldCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgb2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cik7XG4gIH1cblxuICByZXR1cm4gW3Jlc3VsdCwgbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpXTtcbn1cblxuZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICByZXR1cm4gc1xuICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCBcIiBcIilcbiAgICAudHJpbSgpO1xufVxuXG4vLyBodHRwIGRhdGVcblxuY29uc3QgcmZjMTEyMyA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcXGRcXGQpIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKFxcZHs0fSkgKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkgR01UJC8sXG4gIHJmYzg1MCA9IC9eKE1vbmRheXxUdWVzZGF5fFdlZG5lc2RheXxUaHVyc2RheXxGcmlkYXl8U2F0dXJkYXl8U3VuZGF5KSwgKFxcZFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgYXNjaWkgPSAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKCBcXGR8XFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSAoXFxkezR9KSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0UkZDMTEyM09yODUwKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIGRheVN0ciwgbW9udGhTdHIsIHllYXJTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBU0NJSShtYXRjaCkge1xuICBjb25zdCBbLCB3ZWVrZGF5U3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0ciwgeWVhclN0cl0gPSBtYXRjaCxcbiAgICByZXN1bHQgPSBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cik7XG4gIHJldHVybiBbcmVzdWx0LCBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2VdO1xufVxuXG5jb25zdCBpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvWW1kUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29XZWVrV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1dlZWtSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvT3JkaW5hbFJlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvVGltZUNvbWJpbmVkUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29UaW1lUmVnZXgpO1xuXG5jb25zdCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPWW1kLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoXG4gIGV4dHJhY3RJU09XZWVrRGF0YSxcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcbmNvbnN0IGV4dHJhY3RJU09PcmRpbmFsRGF0ZUFuZFRpbWUgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT09yZGluYWxEYXRhLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcblxuLypcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShcbiAgICBzLFxuICAgIFtpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldF0sXG4gICAgW2lzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXRdLFxuICAgIFtpc29PcmRpbmFsV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZV0sXG4gICAgW2lzb1RpbWVDb21iaW5lZFJlZ2V4LCBleHRyYWN0SVNPVGltZUFuZE9mZnNldF1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUkZDMjgyMkRhdGUocykge1xuICByZXR1cm4gcGFyc2UocHJlcHJvY2Vzc1JGQzI4MjIocyksIFtyZmMyODIyLCBleHRyYWN0UkZDMjgyMl0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIVFRQRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShcbiAgICBzLFxuICAgIFtyZmMxMTIzLCBleHRyYWN0UkZDMTEyM09yODUwXSxcbiAgICBbcmZjODUwLCBleHRyYWN0UkZDMTEyM09yODUwXSxcbiAgICBbYXNjaWksIGV4dHJhY3RBU0NJSV1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPRHVyYXRpb24ocykge1xuICByZXR1cm4gcGFyc2UocywgW2lzb0R1cmF0aW9uLCBleHRyYWN0SVNPRHVyYXRpb25dKTtcbn1cblxuY29uc3QgZXh0cmFjdElTT1RpbWVPbmx5ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09UaW1lT25seShzKSB7XG4gIHJldHVybiBwYXJzZShzLCBbaXNvVGltZU9ubHksIGV4dHJhY3RJU09UaW1lT25seV0pO1xufVxuXG5jb25zdCBzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsWW1kUmVnZXgsIHNxbFRpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBzcWxUaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKHNxbFRpbWVSZWdleCk7XG5cbmNvbnN0IGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmUgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1RpbWUsXG4gIGV4dHJhY3RJU09PZmZzZXQsXG4gIGV4dHJhY3RJQU5BWm9uZVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU1FMKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW3NxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSxcbiAgICBbc3FsVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmVdXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWREdXJhdGlvbkVycm9yLCBJbnZhbGlkVW5pdEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcbmltcG9ydCB7IHBhcnNlSVNPRHVyYXRpb24sIHBhcnNlSVNPVGltZU9ubHkgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBhc051bWJlcixcbiAgaGFzT3duUHJvcGVydHksXG4gIGlzTnVtYmVyLFxuICBpc1VuZGVmaW5lZCxcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuXG5jb25zdCBJTlZBTElEID0gXCJJbnZhbGlkIER1cmF0aW9uXCI7XG5cbi8vIHVuaXQgY29udmVyc2lvbiBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBsb3dPcmRlck1hdHJpeCA9IHtcbiAgICB3ZWVrczoge1xuICAgICAgZGF5czogNyxcbiAgICAgIGhvdXJzOiA3ICogMjQsXG4gICAgICBtaW51dGVzOiA3ICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgZGF5czoge1xuICAgICAgaG91cnM6IDI0LFxuICAgICAgbWludXRlczogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIGhvdXJzOiB7IG1pbnV0ZXM6IDYwLCBzZWNvbmRzOiA2MCAqIDYwLCBtaWxsaXNlY29uZHM6IDYwICogNjAgKiAxMDAwIH0sXG4gICAgbWludXRlczogeyBzZWNvbmRzOiA2MCwgbWlsbGlzZWNvbmRzOiA2MCAqIDEwMDAgfSxcbiAgICBzZWNvbmRzOiB7IG1pbGxpc2Vjb25kczogMTAwMCB9LFxuICB9LFxuICBjYXN1YWxNYXRyaXggPSB7XG4gICAgeWVhcnM6IHtcbiAgICAgIHF1YXJ0ZXJzOiA0LFxuICAgICAgbW9udGhzOiAxMixcbiAgICAgIHdlZWtzOiA1MixcbiAgICAgIGRheXM6IDM2NSxcbiAgICAgIGhvdXJzOiAzNjUgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDM2NSAqIDI0ICogNjAsXG4gICAgICBzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBxdWFydGVyczoge1xuICAgICAgbW9udGhzOiAzLFxuICAgICAgd2Vla3M6IDEzLFxuICAgICAgZGF5czogOTEsXG4gICAgICBob3VyczogOTEgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDkxICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiA5MSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBtb250aHM6IHtcbiAgICAgIHdlZWtzOiA0LFxuICAgICAgZGF5czogMzAsXG4gICAgICBob3VyczogMzAgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDMwICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcblxuICAgIC4uLmxvd09yZGVyTWF0cml4LFxuICB9LFxuICBkYXlzSW5ZZWFyQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQwMCxcbiAgZGF5c0luTW9udGhBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDgwMCxcbiAgYWNjdXJhdGVNYXRyaXggPSB7XG4gICAgeWVhcnM6IHtcbiAgICAgIHF1YXJ0ZXJzOiA0LFxuICAgICAgbW9udGhzOiAxMixcbiAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA3LFxuICAgICAgZGF5czogZGF5c0luWWVhckFjY3VyYXRlLFxuICAgICAgaG91cnM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0LFxuICAgICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIHF1YXJ0ZXJzOiB7XG4gICAgICBtb250aHM6IDMsXG4gICAgICB3ZWVrczogZGF5c0luWWVhckFjY3VyYXRlIC8gMjgsXG4gICAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA0LFxuICAgICAgaG91cnM6IChkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCkgLyA0LFxuICAgICAgbWludXRlczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjApIC8gNCxcbiAgICAgIHNlY29uZHM6IChkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjApIC8gNCxcbiAgICAgIG1pbGxpc2Vjb25kczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDApIC8gNCxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgd2Vla3M6IGRheXNJbk1vbnRoQWNjdXJhdGUgLyA3LFxuICAgICAgZGF5czogZGF5c0luTW9udGhBY2N1cmF0ZSxcbiAgICAgIGhvdXJzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQsXG4gICAgICBtaW51dGVzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgLi4ubG93T3JkZXJNYXRyaXgsXG4gIH07XG5cbi8vIHVuaXRzIG9yZGVyZWQgYnkgc2l6ZVxuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1xuICBcInllYXJzXCIsXG4gIFwicXVhcnRlcnNcIixcbiAgXCJtb250aHNcIixcbiAgXCJ3ZWVrc1wiLFxuICBcImRheXNcIixcbiAgXCJob3Vyc1wiLFxuICBcIm1pbnV0ZXNcIixcbiAgXCJzZWNvbmRzXCIsXG4gIFwibWlsbGlzZWNvbmRzXCIsXG5dO1xuXG5jb25zdCByZXZlcnNlVW5pdHMgPSBvcmRlcmVkVW5pdHMuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXG4vLyBjbG9uZSByZWFsbHkgbWVhbnMgXCJjcmVhdGUgYW5vdGhlciBpbnN0YW5jZSBqdXN0IGxpa2UgdGhpcyBvbmUsIGJ1dCB3aXRoIHRoZXNlIGNoYW5nZXNcIlxuZnVuY3Rpb24gY2xvbmUoZHVyLCBhbHRzLCBjbGVhciA9IGZhbHNlKSB7XG4gIC8vIGRlZXAgbWVyZ2UgZm9yIHZhbHNcbiAgY29uc3QgY29uZiA9IHtcbiAgICB2YWx1ZXM6IGNsZWFyID8gYWx0cy52YWx1ZXMgOiB7IC4uLmR1ci52YWx1ZXMsIC4uLihhbHRzLnZhbHVlcyB8fCB7fSkgfSxcbiAgICBsb2M6IGR1ci5sb2MuY2xvbmUoYWx0cy5sb2MpLFxuICAgIGNvbnZlcnNpb25BY2N1cmFjeTogYWx0cy5jb252ZXJzaW9uQWNjdXJhY3kgfHwgZHVyLmNvbnZlcnNpb25BY2N1cmFjeSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBEdXJhdGlvbihjb25mKTtcbn1cblxuZnVuY3Rpb24gYW50aVRydW5jKG4pIHtcbiAgcmV0dXJuIG4gPCAwID8gTWF0aC5mbG9vcihuKSA6IE1hdGguY2VpbChuKTtcbn1cblxuLy8gTkI6IG11dGF0ZXMgcGFyYW1ldGVyc1xuZnVuY3Rpb24gY29udmVydChtYXRyaXgsIGZyb21NYXAsIGZyb21Vbml0LCB0b01hcCwgdG9Vbml0KSB7XG4gIGNvbnN0IGNvbnYgPSBtYXRyaXhbdG9Vbml0XVtmcm9tVW5pdF0sXG4gICAgcmF3ID0gZnJvbU1hcFtmcm9tVW5pdF0gLyBjb252LFxuICAgIHNhbWVTaWduID0gTWF0aC5zaWduKHJhdykgPT09IE1hdGguc2lnbih0b01hcFt0b1VuaXRdKSxcbiAgICAvLyBvaywgc28gdGhpcyBpcyB3aWxkLCBidXQgc2VlIHRoZSBtYXRyaXggaW4gdGhlIHRlc3RzXG4gICAgYWRkZWQgPVxuICAgICAgIXNhbWVTaWduICYmIHRvTWFwW3RvVW5pdF0gIT09IDAgJiYgTWF0aC5hYnMocmF3KSA8PSAxID8gYW50aVRydW5jKHJhdykgOiBNYXRoLnRydW5jKHJhdyk7XG4gIHRvTWFwW3RvVW5pdF0gKz0gYWRkZWQ7XG4gIGZyb21NYXBbZnJvbVVuaXRdIC09IGFkZGVkICogY29udjtcbn1cblxuLy8gTkI6IG11dGF0ZXMgcGFyYW1ldGVyc1xuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWVzKG1hdHJpeCwgdmFscykge1xuICByZXZlcnNlVW5pdHMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgIGlmICghaXNVbmRlZmluZWQodmFsc1tjdXJyZW50XSkpIHtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICBjb252ZXJ0KG1hdHJpeCwgdmFscywgcHJldmlvdXMsIHZhbHMsIGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9XG4gIH0sIG51bGwpO1xufVxuXG4vKipcbiAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSBcIjIgbW9udGhzXCIgb3IgXCIxIGRheSwgMSBob3VyXCIuIENvbmNlcHR1YWxseSwgaXQncyBqdXN0IGEgbWFwIG9mIHVuaXRzIHRvIHRoZWlyIHF1YW50aXRpZXMsIGFjY29tcGFuaWVkIGJ5IHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGFuZCBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLiBUaGV5IGNhbiBiZSB1c2VkIG9uIHRoZWlyIG93biBvciBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIEx1eG9uIHR5cGVzOyBmb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Uge0BsaW5rIERhdGVUaW1lI3BsdXN9IHRvIGFkZCBhIER1cmF0aW9uIG9iamVjdCB0byBhIERhdGVUaW1lLCBwcm9kdWNpbmcgYW5vdGhlciBEYXRlVGltZS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIER1cmF0aW9uOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhIER1cmF0aW9uLCB1c2Uge0BsaW5rIER1cmF0aW9uI2Zyb21NaWxsaXN9LCB7QGxpbmsgRHVyYXRpb24jZnJvbU9iamVjdH0sIG9yIHtAbGluayBEdXJhdGlvbiNmcm9tSVNPfS5cbiAqICogKipVbml0IHZhbHVlcyoqIFNlZSB0aGUge0BsaW5rIER1cmF0aW9uI3llYXJzfSwge0BsaW5rIER1cmF0aW9uI21vbnRoc30sIHtAbGluayBEdXJhdGlvbiN3ZWVrc30sIHtAbGluayBEdXJhdGlvbiNkYXlzfSwge0BsaW5rIER1cmF0aW9uI2hvdXJzfSwge0BsaW5rIER1cmF0aW9uI21pbnV0ZXN9LCB7QGxpbmsgRHVyYXRpb24jc2Vjb25kc30sIHtAbGluayBEdXJhdGlvbiNtaWxsaXNlY29uZHN9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlICB7QGxpbmsgRHVyYXRpb24jbG9jYWxlfSBhbmQge0BsaW5rIER1cmF0aW9uI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG5ldyBEdXJhdGlvbnMgb3V0IG9mIG9sZCBvbmVzIHVzZSB7QGxpbmsgRHVyYXRpb24jcGx1c30sIHtAbGluayBEdXJhdGlvbiNtaW51c30sIHtAbGluayBEdXJhdGlvbiNub3JtYWxpemV9LCB7QGxpbmsgRHVyYXRpb24jc2V0fSwge0BsaW5rIER1cmF0aW9uI3JlY29uZmlndXJlfSwge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99LCBhbmQge0BsaW5rIER1cmF0aW9uI25lZ2F0ZX0uXG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgRHVyYXRpb24gaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgRHVyYXRpb24jYXN9LCB7QGxpbmsgRHVyYXRpb24jdG9JU099LCB7QGxpbmsgRHVyYXRpb24jdG9Gb3JtYXR9LCBhbmQge0BsaW5rIER1cmF0aW9uI3RvSlNPTn1cbiAqXG4gKiBUaGVyZSdzIGFyZSBtb3JlIG1ldGhvZHMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIHZhbGlkaXR5LCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09IFwibG9uZ3Rlcm1cIiB8fCBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGFjY3VyYXRlID8gXCJsb25ndGVybVwiIDogXCJjYXN1YWxcIjtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubWF0cml4ID0gYWNjdXJhdGUgPyBhY2N1cmF0ZU1hdHJpeCA6IGNhc3VhbE1hdHJpeDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EdXJhdGlvbiA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIER1cmF0aW9uIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgb2YgbWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tTWlsbGlzKGNvdW50LCBvcHRzKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IGNvdW50IH0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcnMnIGFuZCAnaG91cnMnLlxuICAgKiBJZiB0aGlzIG9iamVjdCBpcyBlbXB0eSB0aGVuIGEgemVybyBtaWxsaXNlY29uZHMgZHVyYXRpb24gaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSB0aGUgb2JqZWN0IHRvIGNyZWF0ZSB0aGUgRGF0ZVRpbWUgZnJvbVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnllYXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoucXVhcnRlcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmRheXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3Vyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz1bXV0gLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Qob2JqLCBvcHRzID0ge30pIHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgRHVyYXRpb24uZnJvbU9iamVjdDogYXJndW1lbnQgZXhwZWN0ZWQgdG8gYmUgYW4gb2JqZWN0LCBnb3QgJHtcbiAgICAgICAgICBvYmogPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBvYmpcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7XG4gICAgICB2YWx1ZXM6IG5vcm1hbGl6ZU9iamVjdChvYmosIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLFxuICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRzKSxcbiAgICAgIGNvbnZlcnNpb25BY2N1cmFjeTogb3B0cy5jb252ZXJzaW9uQWNjdXJhY3ksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBEdXJhdGlvbkxpa2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRHVyYXRpb259IGR1cmF0aW9uTGlrZVxuICAgKiBPbmUgb2Y6XG4gICAqIC0gb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuXG4gICAqIC0gbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHNcbiAgICogLSBEdXJhdGlvbiBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uTGlrZSkge1xuICAgIGlmIChpc051bWJlcihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSBpZiAoRHVyYXRpb24uaXNEdXJhdGlvbihkdXJhdGlvbkxpa2UpKSB7XG4gICAgICByZXR1cm4gZHVyYXRpb25MaWtlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uTGlrZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoZHVyYXRpb25MaWtlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAke2R1cmF0aW9uTGlrZX0gb2YgdHlwZSAke3R5cGVvZiBkdXJhdGlvbkxpa2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDNZNk0xVzREVDEySDMwTTVTJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDMsIG1vbnRoczogNiwgd2Vla3M6IDEsIGRheXM6IDQsIGhvdXJzOiAxMiwgbWludXRlczogMzAsIHNlY29uZHM6IDUgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQVDIzSCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyMyB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1A1WTNNJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDUsIG1vbnRoczogMyB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21JU08odGV4dCwgb3B0cykge1xuICAgIGNvbnN0IFtwYXJzZWRdID0gcGFyc2VJU09EdXJhdGlvbih0ZXh0KTtcbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSB0aW1lIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0ZXh0IHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVzXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMToyMjozMy40NDQnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDIyLCBzZWNvbmRzOiAzMywgbWlsbGlzZWNvbmRzOiA0NDQgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExOjAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPVGltZSh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3BhcnNlZF0gPSBwYXJzZUlTT1RpbWVPbmx5KHRleHQpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwidW5wYXJzYWJsZVwiLCBgdGhlIGlucHV0IFwiJHt0ZXh0fVwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgZGF0ZXRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRHVyYXRpb25FcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgIHllYXI6IFwieWVhcnNcIixcbiAgICAgIHllYXJzOiBcInllYXJzXCIsXG4gICAgICBxdWFydGVyOiBcInF1YXJ0ZXJzXCIsXG4gICAgICBxdWFydGVyczogXCJxdWFydGVyc1wiLFxuICAgICAgbW9udGg6IFwibW9udGhzXCIsXG4gICAgICBtb250aHM6IFwibW9udGhzXCIsXG4gICAgICB3ZWVrOiBcIndlZWtzXCIsXG4gICAgICB3ZWVrczogXCJ3ZWVrc1wiLFxuICAgICAgZGF5OiBcImRheXNcIixcbiAgICAgIGRheXM6IFwiZGF5c1wiLFxuICAgICAgaG91cjogXCJob3Vyc1wiLFxuICAgICAgaG91cnM6IFwiaG91cnNcIixcbiAgICAgIG1pbnV0ZTogXCJtaW51dGVzXCIsXG4gICAgICBtaW51dGVzOiBcIm1pbnV0ZXNcIixcbiAgICAgIHNlY29uZDogXCJzZWNvbmRzXCIsXG4gICAgICBzZWNvbmRzOiBcInNlY29uZHNcIixcbiAgICAgIG1pbGxpc2Vjb25kOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgICAgbWlsbGlzZWNvbmRzOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgIH1bdW5pdCA/IHVuaXQudG9Mb3dlckNhc2UoKSA6IHVuaXRdO1xuXG4gICAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhIER1cmF0aW9uLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNEdXJhdGlvbihvKSB7XG4gICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkR1cmF0aW9uKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgIHRoZSBsb2NhbGUgb2YgYSBEdXJhdGlvbiwgc3VjaCAnZW4tR0InXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyaW5nIHN5c3RlbSBvZiBhIER1cmF0aW9uLCBzdWNoICdiZW5nJy4gVGhlIG51bWJlcmluZyBzeXN0ZW0gaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIER1cmF0aW9uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gWW91IG1heSB1c2UgdGhlc2UgdG9rZW5zOlxuICAgKiAqIGBTYCBmb3IgbWlsbGlzZWNvbmRzXG4gICAqICogYHNgIGZvciBzZWNvbmRzXG4gICAqICogYG1gIGZvciBtaW51dGVzXG4gICAqICogYGhgIGZvciBob3Vyc1xuICAgKiAqIGBkYCBmb3IgZGF5c1xuICAgKiAqIGB3YCBmb3Igd2Vla3NcbiAgICogKiBgTWAgZm9yIG1vbnRoc1xuICAgKiAqIGB5YCBmb3IgeWVhcnNcbiAgICogTm90ZXM6XG4gICAqICogQWRkIHBhZGRpbmcgYnkgcmVwZWF0aW5nIHRoZSB0b2tlbiwgZS5nLiBcInl5XCIgcGFkcyB0aGUgeWVhcnMgdG8gdHdvIGRpZ2l0cywgXCJoaGhoXCIgcGFkcyB0aGUgaG91cnMgb3V0IHRvIGZvdXIgZGlnaXRzXG4gICAqICogVG9rZW5zIGNhbiBiZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cbiAgICogKiBUaGUgZHVyYXRpb24gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIHNldCBvZiB1bml0cyBpbiB0aGUgZm9ybWF0IHN0cmluZyB1c2luZyB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30gYW5kIHRoZSBEdXJhdGlvbnMncyBjb252ZXJzaW9uIGFjY3VyYWN5IHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbG9vcj10cnVlXSAtIGZsb29yIG51bWVyaWNhbCB2YWx1ZXNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieSBkIHNcIikgLy89PiBcIjEgNiAyXCJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieXkgZGQgc3NzXCIpIC8vPT4gXCIwMSAwNiAwMDJcIlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJNIFNcIikgLy89PiBcIjEyIDUxODQwMjAwMFwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgLy8gcmV2ZXJzZS1jb21wYXQgc2luY2UgMS4yOyB3ZSBhbHdheXMgcm91bmQgZG93biBub3csIG5ldmVyIHVwLCBhbmQgd2UgZG8gaXQgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGZtdE9wdHMgPSB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZmxvb3I6IG9wdHMucm91bmQgIT09IGZhbHNlICYmIG9wdHMuZmxvb3IgIT09IGZhbHNlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLCBmbXRPcHRzKS5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcodGhpcywgZm10KVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBEdXJhdGlvbiB3aXRoIGFsbCB1bml0cyBpbmNsdWRlZC5cbiAgICogVG8gbW9kaWZ5IGl0cyBiZWhhdmlvciB1c2UgdGhlIGBsaXN0U3R5bGVgIGFuZCBhbnkgSW50bC5OdW1iZXJGb3JtYXQgb3B0aW9uLCB0aG91Z2ggYHVuaXREaXNwbGF5YCBpcyBlc3BlY2lhbGx5IHJlbGV2YW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvTnVtYmVyRm9ybWF0XG4gICAqIEBwYXJhbSBvcHRzIC0gT24gb3B0aW9uIG9iamVjdCB0byBvdmVycmlkZSB0aGUgZm9ybWF0dGluZy4gQWNjZXB0cyB0aGUgc2FtZSBrZXlzIGFzIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnQuTnVtYmVyRm9ybWF0YCBjb25zdHJ1Y3RvciwgYXMgd2VsbCBhcyBgbGlzdFN0eWxlYC5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIGR1ciA9IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxLCBob3VyczogNSwgbWludXRlczogNiB9KVxuICAgKiBkdXIudG9IdW1hbigpIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCA2IG1pbnV0ZXMnXG4gICAqIGR1ci50b0h1bWFuKHsgbGlzdFN0eWxlOiBcImxvbmdcIiB9KSAvLz0+ICcxIGRheSwgNSBob3VycywgYW5kIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyB1bml0RGlzcGxheTogXCJzaG9ydFwiIH0pIC8vPT4gJzEgZGF5LCA1IGhyLCA2IG1pbidcbiAgICogYGBgXG4gICAqL1xuICB0b0h1bWFuKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGwgPSBvcmRlcmVkVW5pdHNcbiAgICAgIC5tYXAoKHVuaXQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZXNbdW5pdF07XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9jXG4gICAgICAgICAgLm51bWJlckZvcm1hdHRlcih7IHN0eWxlOiBcInVuaXRcIiwgdW5pdERpc3BsYXk6IFwibG9uZ1wiLCAuLi5vcHRzLCB1bml0OiB1bml0LnNsaWNlKDAsIC0xKSB9KVxuICAgICAgICAgIC5mb3JtYXQodmFsKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChuKSA9PiBuKTtcblxuICAgIHJldHVybiB0aGlzLmxvY1xuICAgICAgLmxpc3RGb3JtYXR0ZXIoeyB0eXBlOiBcImNvbmp1bmN0aW9uXCIsIHN0eWxlOiBvcHRzLmxpc3RTdHlsZSB8fCBcIm5hcnJvd1wiLCAuLi5vcHRzIH0pXG4gICAgICAuZm9ybWF0KGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoaXMgRHVyYXRpb24ncyB2YWx1ZXMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9XG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHRvT2JqZWN0KCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHsgLi4udGhpcy52YWx1ZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAzLCBzZWNvbmRzOiA0NSB9KS50b0lTTygpIC8vPT4gJ1AzWVQ0NVMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDQsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDRNVDQ1UydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNSB9KS50b0lTTygpIC8vPT4gJ1A1TSdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDUgfSkudG9JU08oKSAvLz0+ICdQVDVNJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWlsbGlzZWNvbmRzOiA2IH0pLnRvSVNPKCkgLy89PiAnUFQwLjAwNlMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKCkge1xuICAgIC8vIHdlIGNvdWxkIHVzZSB0aGUgZm9ybWF0dGVyLCBidXQgdGhpcyBpcyBhbiBlYXNpZXIgd2F5IHRvIGdldCB0aGUgbWluaW11bSBzdHJpbmdcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgcyA9IFwiUFwiO1xuICAgIGlmICh0aGlzLnllYXJzICE9PSAwKSBzICs9IHRoaXMueWVhcnMgKyBcIllcIjtcbiAgICBpZiAodGhpcy5tb250aHMgIT09IDAgfHwgdGhpcy5xdWFydGVycyAhPT0gMCkgcyArPSB0aGlzLm1vbnRocyArIHRoaXMucXVhcnRlcnMgKiAzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMud2Vla3MgIT09IDApIHMgKz0gdGhpcy53ZWVrcyArIFwiV1wiO1xuICAgIGlmICh0aGlzLmRheXMgIT09IDApIHMgKz0gdGhpcy5kYXlzICsgXCJEXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDAgfHwgdGhpcy5taW51dGVzICE9PSAwIHx8IHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMClcbiAgICAgIHMgKz0gXCJUXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDApIHMgKz0gdGhpcy5ob3VycyArIFwiSFwiO1xuICAgIGlmICh0aGlzLm1pbnV0ZXMgIT09IDApIHMgKz0gdGhpcy5taW51dGVzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMClcbiAgICAgIC8vIHRoaXMgd2lsbCBoYW5kbGUgXCJmbG9hdGluZyBwb2ludCBtYWRuZXNzXCIgYnkgcmVtb3ZpbmcgZXh0cmEgZGVjaW1hbCBwbGFjZXNcbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU4ODAwNC9pcy1mbG9hdGluZy1wb2ludC1tYXRoLWJyb2tlblxuICAgICAgcyArPSByb3VuZFRvKHRoaXMuc2Vjb25kcyArIHRoaXMubWlsbGlzZWNvbmRzIC8gMTAwMCwgMykgKyBcIlNcIjtcbiAgICBpZiAocyA9PT0gXCJQXCIpIHMgKz0gXCJUMFNcIjtcbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiwgZm9ybWF0dGVkIGFzIGEgdGltZSBvZiBkYXkuXG4gICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGR1cmF0aW9uIGlzIGludmFsaWQsIG5lZ2F0aXZlLCBvciBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMjQgaG91cnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzU2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIHNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVQcmVmaXg9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgYFRgIHByZWZpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXRcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoKSAvLz0+ICcxMTowMDowMC4wMDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NNaWxsaXNlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDA6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NTZWNvbmRzOiB0cnVlIH0pIC8vPT4gJzExOjAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBmb3JtYXQ6ICdiYXNpYycgfSkgLy89PiAnMTEwMDAwLjAwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09UaW1lKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1pbGxpcyA9IHRoaXMudG9NaWxsaXMoKTtcbiAgICBpZiAobWlsbGlzIDwgMCB8fCBtaWxsaXMgPj0gODY0MDAwMDApIHJldHVybiBudWxsO1xuXG4gICAgb3B0cyA9IHtcbiAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzU2Vjb25kczogZmFsc2UsXG4gICAgICBpbmNsdWRlUHJlZml4OiBmYWxzZSxcbiAgICAgIGZvcm1hdDogXCJleHRlbmRlZFwiLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNoaWZ0VG8oXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCIpO1xuXG4gICAgbGV0IGZtdCA9IG9wdHMuZm9ybWF0ID09PSBcImJhc2ljXCIgPyBcImhobW1cIiA6IFwiaGg6bW1cIjtcblxuICAgIGlmICghb3B0cy5zdXBwcmVzc1NlY29uZHMgfHwgdmFsdWUuc2Vjb25kcyAhPT0gMCB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgIGZtdCArPSBvcHRzLmZvcm1hdCA9PT0gXCJiYXNpY1wiID8gXCJzc1wiIDogXCI6c3NcIjtcbiAgICAgIGlmICghb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcyB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgICAgZm10ICs9IFwiLlNTU1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzdHIgPSB2YWx1ZS50b0Zvcm1hdChmbXQpO1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZVByZWZpeCkge1xuICAgICAgc3RyID0gXCJUXCIgKyBzdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBkZWJ1Z2dpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvSVNPKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXMoXCJtaWxsaXNlY29uZHNcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi4gQWxpYXMgb2Yge0BsaW5rIHRvTWlsbGlzfVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB2YWx1ZU9mKCkge1xuICAgIHJldHVybiB0aGlzLnRvTWlsbGlzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGlzIER1cmF0aW9uIGxvbmdlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBwbHVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICByZXN1bHQgPSB7fTtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShkdXIudmFsdWVzLCBrKSB8fCBoYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlcywgaykpIHtcbiAgICAgICAgcmVzdWx0W2tdID0gZHVyLmdldChrKSArIHRoaXMuZ2V0KGspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBzaG9ydGVyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbWludXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5wbHVzKGR1ci5uZWdhdGUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbGUgdGhpcyBEdXJhdGlvbiBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdW5pdC4gQXJpdHkgaXMgMSBvciAyOiB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYW5kLCBvcHRpb25hbGx5LCB0aGUgdW5pdCBuYW1lLiBNdXN0IHJldHVybiBhIG51bWJlci5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cyh4ID0+IHggKiAyKSAvLz0+IHsgaG91cnM6IDIsIG1pbnV0ZXM6IDYwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cygoeCwgdSkgPT4gdSA9PT0gXCJob3VyXCIgPyB4ICogMiA6IHgpIC8vPT4geyBob3VyczogMiwgbWludXRlczogMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG1hcFVuaXRzKGZuKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIHJlc3VsdFtrXSA9IGFzTnVtYmVyKGZuKHRoaXMudmFsdWVzW2tdLCBrKSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5J1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgneWVhcnMnKSAvLz0+IDJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ21vbnRocycpIC8vPT4gMFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnZGF5cycpIC8vPT4gM1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQodW5pdCkge1xuICAgIHJldHVybiB0aGlzW0R1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIHZhbHVlcyBvZiBzcGVjaWZpZWQgdW5pdHMuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnNcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IHllYXJzOiAyMDE3IH0pXG4gICAqIEBleGFtcGxlIGR1ci5zZXQoeyBob3VyczogOCwgbWludXRlczogMzAgfSlcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzZXQodmFsdWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgbWl4ZWQgPSB7IC4uLnRoaXMudmFsdWVzLCAuLi5ub3JtYWxpemVPYmplY3QodmFsdWVzLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSB9O1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogbWl4ZWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlIGFuZC9vciBudW1iZXJpbmdTeXN0ZW0uICBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIGR1ci5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIGNvbnZlcnNpb25BY2N1cmFjeSB9ID0ge30pIHtcbiAgICBjb25zdCBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtIH0pLFxuICAgICAgb3B0cyA9IHsgbG9jIH07XG5cbiAgICBpZiAoY29udmVyc2lvbkFjY3VyYWN5KSB7XG4gICAgICBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGNvbnZlcnNpb25BY2N1cmFjeTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUodGhpcywgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGR1cmF0aW9uIGluIHRoZSBzcGVjaWZpZWQgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlcycgb3IgJ2RheXMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAxfSkuYXMoJ2RheXMnKSAvLz0+IDM2NVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdtb250aHMnKSAvLz0+IDEyXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe2hvdXJzOiA2MH0pLmFzKCdkYXlzJykgLy89PiAyLjVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgYXModW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnNoaWZ0VG8odW5pdCkuZ2V0KHVuaXQpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGlzIER1cmF0aW9uIHRvIGl0cyBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gaW4gaXRzIGN1cnJlbnQgdW5pdHMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTIsIG1pbnV0ZXM6IC00NSB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDE1IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBub3JtYWxpemUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHZhbHMgPSB0aGlzLnRvT2JqZWN0KCk7XG4gICAgbm9ybWFsaXplVmFsdWVzKHRoaXMubWF0cml4LCB2YWxzKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IHZhbHMgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGlzIER1cmF0aW9uIGludG8gaXRzIHJlcHJlc2VudGF0aW9uIGluIGEgZGlmZmVyZW50IHNldCBvZiB1bml0cy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5zaGlmdFRvKCdtaW51dGVzJywgJ21pbGxpc2Vjb25kcycpLnRvT2JqZWN0KCkgLy89PiB7IG1pbnV0ZXM6IDYwLCBtaWxsaXNlY29uZHM6IDMwMDAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzaGlmdFRvKC4uLnVuaXRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdW5pdHMgPSB1bml0cy5tYXAoKHUpID0+IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodSkpO1xuXG4gICAgY29uc3QgYnVpbHQgPSB7fSxcbiAgICAgIGFjY3VtdWxhdGVkID0ge30sXG4gICAgICB2YWxzID0gdGhpcy50b09iamVjdCgpO1xuICAgIGxldCBsYXN0VW5pdDtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmICh1bml0cy5pbmRleE9mKGspID49IDApIHtcbiAgICAgICAgbGFzdFVuaXQgPSBrO1xuXG4gICAgICAgIGxldCBvd24gPSAwO1xuXG4gICAgICAgIC8vIGFueXRoaW5nIHdlIGhhdmVuJ3QgYm9pbGVkIGRvd24geWV0IHNob3VsZCBnZXQgYm9pbGVkIHRvIHRoaXMgdW5pdFxuICAgICAgICBmb3IgKGNvbnN0IGFrIGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICAgICAgb3duICs9IHRoaXMubWF0cml4W2FrXVtrXSAqIGFjY3VtdWxhdGVkW2FrXTtcbiAgICAgICAgICBhY2N1bXVsYXRlZFtha10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGx1cyBhbnl0aGluZyB0aGF0J3MgYWxyZWFkeSBpbiB0aGlzIHVuaXRcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgICAgb3duICs9IHZhbHNba107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpID0gTWF0aC50cnVuYyhvd24pO1xuICAgICAgICBidWlsdFtrXSA9IGk7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gKG93biAqIDEwMDAgLSBpICogMTAwMCkgLyAxMDAwO1xuXG4gICAgICAgIC8vIHBsdXMgYW55dGhpbmcgZnVydGhlciBkb3duIHRoZSBjaGFpbiB0aGF0IHNob3VsZCBiZSByb2xsZWQgdXAgaW4gdG8gdGhpc1xuICAgICAgICBmb3IgKGNvbnN0IGRvd24gaW4gdmFscykge1xuICAgICAgICAgIGlmIChvcmRlcmVkVW5pdHMuaW5kZXhPZihkb3duKSA+IG9yZGVyZWRVbml0cy5pbmRleE9mKGspKSB7XG4gICAgICAgICAgICBjb252ZXJ0KHRoaXMubWF0cml4LCB2YWxzLCBkb3duLCBidWlsdCwgayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgd2luZ3MgdG8gYm9pbCBpdCBsYXRlclxuICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkge1xuICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IHZhbHNba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYW55dGhpbmcgbGVmdG92ZXIgYmVjb21lcyB0aGUgZGVjaW1hbCBmb3IgdGhlIGxhc3QgdW5pdFxuICAgIC8vIGxhc3RVbml0IG11c3QgYmUgZGVmaW5lZCBzaW5jZSB1bml0cyBpcyBub3QgZW1wdHlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhY2N1bXVsYXRlZCkge1xuICAgICAgaWYgKGFjY3VtdWxhdGVkW2tleV0gIT09IDApIHtcbiAgICAgICAgYnVpbHRbbGFzdFVuaXRdICs9XG4gICAgICAgICAga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBidWlsdCB9LCB0cnVlKS5ub3JtYWxpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5lZ2F0aXZlIG9mIHRoaXMgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgc2Vjb25kczogMzAgfSkubmVnYXRlKCkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IC0xLCBzZWNvbmRzOiAtMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG5lZ2F0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgbmVnYXRlZCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIG5lZ2F0ZWRba10gPSB0aGlzLnZhbHVlc1trXSA9PT0gMCA/IDAgOiAtdGhpcy52YWx1ZXNba107XG4gICAgfVxuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogbmVnYXRlZCB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHllYXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHllYXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy55ZWFycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcXVhcnRlcnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgcXVhcnRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnF1YXJ0ZXJzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb250aHMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbW9udGhzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5tb250aHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWtzXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLndlZWtzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXlzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmRheXMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGhvdXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGhvdXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5ob3VycyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWludXRlcy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtaW51dGVzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taW51dGVzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgc2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuc2Vjb25kcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWlsbGlzZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taWxsaXNlY29uZHMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIER1cmF0aW9uIGlzIGludmFsaWQuIEludmFsaWQgZHVyYXRpb25zIGFyZSByZXR1cm5lZCBieSBkaWZmIG9wZXJhdGlvbnNcbiAgICogb24gaW52YWxpZCBEYXRlVGltZXMgb3IgSW50ZXJ2YWxzLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNoZWNrXG4gICAqIFR3byBEdXJhdGlvbnMgYXJlIGVxdWFsIGlmZiB0aGV5IGhhdmUgdGhlIHNhbWUgdW5pdHMgYW5kIHRoZSBzYW1lIHZhbHVlcyBmb3IgZWFjaCB1bml0LlxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXEodjEsIHYyKSB7XG4gICAgICAvLyBDb25zaWRlciAwIGFuZCB1bmRlZmluZWQgYXMgZXF1YWxcbiAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkIHx8IHYxID09PSAwKSByZXR1cm4gdjIgPT09IHVuZGVmaW5lZCB8fCB2MiA9PT0gMDtcbiAgICAgIHJldHVybiB2MSA9PT0gdjI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB1IG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKCFlcSh0aGlzLnZhbHVlc1t1XSwgb3RoZXIudmFsdWVzW3VdKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCAiaW1wb3J0IERhdGVUaW1lLCB7IGZyaWVuZGx5RGF0ZVRpbWUgfSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbnZhbGlkSW50ZXJ2YWxFcnJvciB9IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgSW50ZXJ2YWxcIjtcblxuLy8gY2hlY2tzIGlmIHRoZSBzdGFydCBpcyBlcXVhbCB0byBvciBiZWZvcmUgdGhlIGVuZFxuZnVuY3Rpb24gdmFsaWRhdGVTdGFydEVuZChzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQgfHwgIXN0YXJ0LmlzVmFsaWQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGFydFwiKTtcbiAgfSBlbHNlIGlmICghZW5kIHx8ICFlbmQuaXNWYWxpZCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFwibWlzc2luZyBvciBpbnZhbGlkIGVuZFwiKTtcbiAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFxuICAgICAgXCJlbmQgYmVmb3JlIHN0YXJ0XCIsXG4gICAgICBgVGhlIGVuZCBvZiBhbiBpbnRlcnZhbCBtdXN0IGJlIGFmdGVyIGl0cyBzdGFydCwgYnV0IHlvdSBoYWQgc3RhcnQ9JHtzdGFydC50b0lTTygpfSBhbmQgZW5kPSR7ZW5kLnRvSVNPKCl9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJbnRlcnZhbCBvYmplY3QgcmVwcmVzZW50cyBhIGhhbGYtb3BlbiBpbnRlcnZhbCBvZiB0aW1lLCB3aGVyZSBlYWNoIGVuZHBvaW50IGlzIGEge0BsaW5rIERhdGVUaW1lfS4gQ29uY2VwdHVhbGx5LCBpdCdzIGEgY29udGFpbmVyIGZvciB0aG9zZSB0d28gZW5kcG9pbnRzLCBhY2NvbXBhbmllZCBieSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgY29tcGFyaW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uXG4gKlxuICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgbWV0aG9kcyBhbmQgZ2V0dGVycyBpbiBJbnRlcnZhbDpcbiAqXG4gKiAqICoqQ3JlYXRpb24qKiBUbyBjcmVhdGUgYW4gSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjZnJvbURhdGVUaW1lc30sIHtAbGluayBJbnRlcnZhbCNhZnRlcn0sIHtAbGluayBJbnRlcnZhbCNiZWZvcmV9LCBvciB7QGxpbmsgSW50ZXJ2YWwjZnJvbUlTT30uXG4gKiAqICoqQWNjZXNzb3JzKiogVXNlIHtAbGluayBJbnRlcnZhbCNzdGFydH0gYW5kIHtAbGluayBJbnRlcnZhbCNlbmR9IHRvIGdldCB0aGUgc3RhcnQgYW5kIGVuZC5cbiAqICogKipJbnRlcnJvZ2F0aW9uKiogVG8gYW5hbHl6ZSB0aGUgSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjY291bnR9LCB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSwge0BsaW5rIEludGVydmFsI2hhc1NhbWV9LCB7QGxpbmsgSW50ZXJ2YWwjY29udGFpbnN9LCB7QGxpbmsgSW50ZXJ2YWwjaXNBZnRlcn0sIG9yIHtAbGluayBJbnRlcnZhbCNpc0JlZm9yZX0uXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgb3RoZXIgSW50ZXJ2YWxzIG91dCBvZiB0aGlzIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNzZXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRBdH0sIHtAbGluayBJbnRlcnZhbCNzcGxpdEJ5fSwge0BsaW5rIEludGVydmFsI2RpdmlkZUVxdWFsbHl9LCB7QGxpbmsgSW50ZXJ2YWwjbWVyZ2V9LCB7QGxpbmsgSW50ZXJ2YWwjeG9yfSwge0BsaW5rIEludGVydmFsI3VuaW9ufSwge0BsaW5rIEludGVydmFsI2ludGVyc2VjdGlvbn0sIG9yIHtAbGluayBJbnRlcnZhbCNkaWZmZXJlbmNlfS5cbiAqICogKipDb21wYXJpc29uKiogVG8gY29tcGFyZSB0aGlzIEludGVydmFsIHRvIGFub3RoZXIgb25lLCB1c2Uge0BsaW5rIEludGVydmFsI2VxdWFsc30sIHtAbGluayBJbnRlcnZhbCNvdmVybGFwc30sIHtAbGluayBJbnRlcnZhbCNhYnV0c1N0YXJ0fSwge0BsaW5rIEludGVydmFsI2FidXRzRW5kfSwge0BsaW5rIEludGVydmFsI2VuZ3VsZnN9XG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgSW50ZXJ2YWwgaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgSW50ZXJ2YWwjdG9TdHJpbmd9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU099LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09EYXRlfSwge0BsaW5rIEludGVydmFsI3RvSVNPVGltZX0sIHtAbGluayBJbnRlcnZhbCN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgSW50ZXJ2YWwjdG9EdXJhdGlvbn0uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludGVydmFsIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnMgPSBjb25maWcuc3RhcnQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5lID0gY29uZmlnLmVuZDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNMdXhvbkludGVydmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBJbnRlcnZhbCBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkSW50ZXJ2YWxFcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGFuIGVuZCBEYXRlVGltZS4gSW5jbHVzaXZlIG9mIHRoZSBzdGFydCBidXQgbm90IHRoZSBlbmQuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZFxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBmcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBidWlsdFN0YXJ0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCksXG4gICAgICBidWlsdEVuZCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlRXJyb3IgPSB2YWxpZGF0ZVN0YXJ0RW5kKGJ1aWx0U3RhcnQsIGJ1aWx0RW5kKTtcblxuICAgIGlmICh2YWxpZGF0ZUVycm9yID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoe1xuICAgICAgICBzdGFydDogYnVpbHRTdGFydCxcbiAgICAgICAgZW5kOiBidWlsdEVuZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYSBzdGFydCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgdG8uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0XG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC5cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgYWZ0ZXIoc3RhcnQsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0LCBkdC5wbHVzKGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIGVuZCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgYmFja3dhcmRzIHRvLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmRcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsLlxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBiZWZvcmUoZW5kLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQubWludXMoZHVyKSwgZHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIElTTyA4NjAxIHN0cmluZy5cbiAgICogQWNjZXB0cyBgPHN0YXJ0Pi88ZW5kPmAsIGA8c3RhcnQ+LzxkdXJhdGlvbj5gLCBhbmQgYDxkdXJhdGlvbj4vPGVuZD5gIGZvcm1hdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIElTTyBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIG9wdGlvbnMgdG8gcGFzcyB7QGxpbmsgRGF0ZVRpbWUjZnJvbUlTT30gYW5kIG9wdGlvbmFsbHkge0BsaW5rIER1cmF0aW9uI2Zyb21JU099XG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3MsIGVdID0gKHRleHQgfHwgXCJcIikuc3BsaXQoXCIvXCIsIDIpO1xuICAgIGlmIChzICYmIGUpIHtcbiAgICAgIGxldCBzdGFydCwgc3RhcnRJc1ZhbGlkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhcnQgPSBEYXRlVGltZS5mcm9tSVNPKHMsIG9wdHMpO1xuICAgICAgICBzdGFydElzVmFsaWQgPSBzdGFydC5pc1ZhbGlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdGFydElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVuZCwgZW5kSXNWYWxpZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVuZCA9IERhdGVUaW1lLmZyb21JU08oZSwgb3B0cyk7XG4gICAgICAgIGVuZElzVmFsaWQgPSBlbmQuaXNWYWxpZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZW5kSXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnRJc1ZhbGlkICYmIGVuZElzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydElzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhlLCBvcHRzKTtcbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmFmdGVyKHN0YXJ0LCBkdXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZElzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhzLCBvcHRzKTtcbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmJlZm9yZShlbmQsIGR1cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEludGVydmFsLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNJbnRlcnZhbChvKSB7XG4gICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkludGVydmFsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGFydCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IHN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnMgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVuZCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IGVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5lIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhdCBsZWFzdCBpdHMgc3RhcnQsIG1lYW5pbmcgdGhhdCB0aGUgSW50ZXJ2YWwgaXNuJ3QgJ2JhY2t3YXJkcycuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZFJlYXNvbiA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwgaW4gdGhlIHNwZWNpZmllZCB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byByZXR1cm4gdGhlIGxlbmd0aCBpbi5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgbGVuZ3RoKHVuaXQgPSBcIm1pbGxpc2Vjb25kc1wiKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9EdXJhdGlvbiguLi5bdW5pdF0pLmdldCh1bml0KSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiBtaW51dGVzLCBob3VycywgZGF5cywgbW9udGhzLCBvciB5ZWFycyBpbmNsdWRlZCBpbiB0aGUgSW50ZXJ2YWwsIGV2ZW4gaW4gcGFydC5cbiAgICogVW5saWtlIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9IHRoaXMgY291bnRzIHNlY3Rpb25zIG9mIHRoZSBjYWxlbmRhciwgbm90IHBlcmlvZHMgb2YgdGltZSwgZS5nLiBzcGVjaWZ5aW5nICdkYXknXG4gICAqIGFza3MgJ3doYXQgZGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMgaW50ZXJ2YWw/Jywgbm90ICdob3cgbWFueSBkYXlzIGxvbmcgaXMgdGhpcyBpbnRlcnZhbD8nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdD0nbWlsbGlzZWNvbmRzJ10gLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBjb3VudCh1bml0ID0gXCJtaWxsaXNlY29uZHNcIikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gTmFOO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGFydC5zdGFydE9mKHVuaXQpLFxuICAgICAgZW5kID0gdGhpcy5lbmQuc3RhcnRPZih1bml0KTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpKSArIDE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBhbmQgZW5kIGFyZSBib3RoIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NhbWUodW5pdCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsIHVuaXQpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBEYXRlVGltZXMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaXNBZnRlcihkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0JlZm9yZShkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZSA8PSBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWlucyhkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBkYXRlVGltZSAmJiB0aGlzLmUgPiBkYXRlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldHNcIiB0aGUgc3RhcnQgYW5kL29yIGVuZCBkYXRlcy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gdGhlIHZhbHVlcyB0byBzZXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLnN0YXJ0IC0gdGhlIHN0YXJ0aW5nIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5lbmQgLSB0aGUgZW5kaW5nIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc2V0KHsgc3RhcnQsIGVuZCB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGF0IGVhY2ggb2YgdGhlIHNwZWNpZmllZCBEYXRlVGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzcGxpdEF0KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107XG4gICAgY29uc3Qgc29ydGVkID0gZGF0ZVRpbWVzXG4gICAgICAgIC5tYXAoZnJpZW5kbHlEYXRlVGltZSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gdGhpcy5jb250YWlucyhkKSlcbiAgICAgICAgLnNvcnQoKSxcbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICBsZXQgeyBzIH0gPSB0aGlzLFxuICAgICAgaSA9IDA7XG5cbiAgICB3aGlsZSAocyA8IHRoaXMuZSkge1xuICAgICAgY29uc3QgYWRkZWQgPSBzb3J0ZWRbaV0gfHwgdGhpcy5lLFxuICAgICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkO1xuICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpO1xuICAgICAgcyA9IG5leHQ7XG4gICAgICBpICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHNtYWxsZXIgSW50ZXJ2YWxzLCBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLlxuICAgKiBMZWZ0IG92ZXIgdGltZSBpcyBncm91cGVkIGludG8gYSBzbWFsbGVyIGludGVydmFsXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgbGVuZ3RoIG9mIGVhY2ggcmVzdWx0aW5nIGludGVydmFsLlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHNwbGl0QnkoZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFkdXIuaXNWYWxpZCB8fCBkdXIuYXMoXCJtaWxsaXNlY29uZHNcIikgPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgeyBzIH0gPSB0aGlzLFxuICAgICAgaWR4ID0gMSxcbiAgICAgIG5leHQ7XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgd2hpbGUgKHMgPCB0aGlzLmUpIHtcbiAgICAgIGNvbnN0IGFkZGVkID0gdGhpcy5zdGFydC5wbHVzKGR1ci5tYXBVbml0cygoeCkgPT4geCAqIGlkeCkpO1xuICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDtcbiAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIG5leHQpKTtcbiAgICAgIHMgPSBuZXh0O1xuICAgICAgaWR4ICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNtYWxsZXIgaW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyT2ZQYXJ0cyAtIFRoZSBudW1iZXIgb2YgSW50ZXJ2YWxzIHRvIGRpdmlkZSB0aGUgSW50ZXJ2YWwgaW50by5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBkaXZpZGVFcXVhbGx5KG51bWJlck9mUGFydHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnNwbGl0QnkodGhpcy5sZW5ndGgoKSAvIG51bWJlck9mUGFydHMpLnNsaWNlKDAsIG51bWJlck9mUGFydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgb3ZlcmxhcHMgd2l0aCB0aGUgc3BlY2lmaWVkIEludGVydmFsXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBvdmVybGFwcyhvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmUgPiBvdGhlci5zICYmIHRoaXMucyA8IG90aGVyLmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3Mgc3RhcnQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBhYnV0c1N0YXJ0KG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gK3RoaXMuZSA9PT0gK290aGVyLnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBlbmQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBhYnV0c0VuZChvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICtvdGhlci5lID09PSArdGhpcy5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgZW5ndWxmcyB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZW5ndWxmcyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBvdGhlci5zICYmIHRoaXMuZSA+PSBvdGhlci5lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgaGFzIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgYXMgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlci5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucy5lcXVhbHMob3RoZXIucykgJiYgdGhpcy5lLmVxdWFscyhvdGhlci5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0aW5nIEludGVydmFsIGhhcyB0aGUgbWF4aW11bSBzdGFydCB0aW1lIGFuZCB0aGUgbWluaW11bSBlbmQgdGltZSBvZiB0aGUgdHdvIEludGVydmFscy5cbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBpbnRlcnNlY3Rpb24gaXMgZW1wdHksIG1lYW5pbmcsIHRoZSBpbnRlcnZhbHMgZG9uJ3QgaW50ZXJzZWN0LlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIGludGVyc2VjdGlvbihvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBzID0gdGhpcy5zID4gb3RoZXIucyA/IHRoaXMucyA6IG90aGVyLnMsXG4gICAgICBlID0gdGhpcy5lIDwgb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7XG5cbiAgICBpZiAocyA+PSBlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1pbmltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1heGltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW5pb24ob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcyA9IHRoaXMucyA8IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLFxuICAgICAgZSA9IHRoaXMuZSA+IG90aGVyLmUgPyB0aGlzLmUgOiBvdGhlci5lO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGFuIGFycmF5IG9mIEludGVydmFscyBpbnRvIGEgZXF1aXZhbGVudCBtaW5pbWFsIHNldCBvZiBJbnRlcnZhbHMuXG4gICAqIENvbWJpbmVzIG92ZXJsYXBwaW5nIGFuZCBhZGphY2VudCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtZXJnZShpbnRlcnZhbHMpIHtcbiAgICBjb25zdCBbZm91bmQsIGZpbmFsXSA9IGludGVydmFsc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IGEucyAtIGIucylcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbc29mYXIsIGN1cnJlbnRdLCBpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBpdGVtXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQub3ZlcmxhcHMoaXRlbSkgfHwgY3VycmVudC5hYnV0c1N0YXJ0KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBjdXJyZW50LnVuaW9uKGl0ZW0pXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtzb2Zhci5jb25jYXQoW2N1cnJlbnRdKSwgaXRlbV07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbW10sIG51bGxdXG4gICAgICApO1xuICAgIGlmIChmaW5hbCkge1xuICAgICAgZm91bmQucHVzaChmaW5hbCk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIHJlcHJlc2VudGluZyB0aGUgc3BhbnMgb2YgdGltZSB0aGF0IG9ubHkgYXBwZWFyIGluIG9uZSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy5cbiAgICogQHBhcmFtIHtBcnJheX0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHhvcihpbnRlcnZhbHMpIHtcbiAgICBsZXQgc3RhcnQgPSBudWxsLFxuICAgICAgY3VycmVudENvdW50ID0gMDtcbiAgICBjb25zdCByZXN1bHRzID0gW10sXG4gICAgICBlbmRzID0gaW50ZXJ2YWxzLm1hcCgoaSkgPT4gW1xuICAgICAgICB7IHRpbWU6IGkucywgdHlwZTogXCJzXCIgfSxcbiAgICAgICAgeyB0aW1lOiBpLmUsIHR5cGU6IFwiZVwiIH0sXG4gICAgICBdKSxcbiAgICAgIGZsYXR0ZW5lZCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4uZW5kcyksXG4gICAgICBhcnIgPSBmbGF0dGVuZWQuc29ydCgoYSwgYikgPT4gYS50aW1lIC0gYi50aW1lKTtcblxuICAgIGZvciAoY29uc3QgaSBvZiBhcnIpIHtcbiAgICAgIGN1cnJlbnRDb3VudCArPSBpLnR5cGUgPT09IFwic1wiID8gMSA6IC0xO1xuXG4gICAgICBpZiAoY3VycmVudENvdW50ID09PSAxKSB7XG4gICAgICAgIHN0YXJ0ID0gaS50aW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXJ0ICYmICtzdGFydCAhPT0gK2kudGltZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBpLnRpbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gSW50ZXJ2YWwubWVyZ2UocmVzdWx0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgc3BhbiBvZiB0aW1lIGluIHRoaXMgSW50ZXJ2YWwgdGhhdCBkb2Vzbid0IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7Li4uSW50ZXJ2YWx9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIGRpZmZlcmVuY2UoLi4uaW50ZXJ2YWxzKSB7XG4gICAgcmV0dXJuIEludGVydmFsLnhvcihbdGhpc10uY29uY2F0KGludGVydmFscykpXG4gICAgICAubWFwKChpKSA9PiB0aGlzLmludGVyc2VjdGlvbihpKSlcbiAgICAgIC5maWx0ZXIoKGkpID0+IGkgJiYgIWkuaXNFbXB0eSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYXBwcm9wcmlhdGUgZm9yIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgWyR7dGhpcy5zLnRvSVNPKCl9IFx1MjAxMyAke3RoaXMuZS50b0lTTygpfSlgO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTTyhvcHRzKX0vJHt0aGlzLmUudG9JU08ob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZGF0ZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgdGltZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTT0RhdGUoKX0vJHt0aGlzLmUudG9JU09EYXRlKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZShvcHRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9JU09UaW1lKG9wdHMpfS8ke3RoaXMuZS50b0lTT1RpbWUob3B0cyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlRm9ybWF0IC0gdGhlIGZvcm1hdCBzdHJpbmcuIFRoaXMgc3RyaW5nIGZvcm1hdHMgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZS4gU2VlIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0gZm9yIGRldGFpbHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuc2VwYXJhdG9yID0gICcgXHUyMDEzICddIC0gYSBzZXBhcmF0b3IgdG8gcGxhY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCByZXByZXNlbnRhdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXQoZGF0ZUZvcm1hdCwgeyBzZXBhcmF0b3IgPSBcIiBcdTIwMTMgXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9JHtzZXBhcmF0b3J9JHt0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHRpbWUgc3Bhbm5lZCBieSB0aGlzIGludGVydmFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA4ODQ4OTI1NyB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ2RheXMnKS50b09iamVjdCgpIC8vPT4geyBkYXlzOiAxLjAyNDE4MTIxNTI3Nzc3NzggfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LjgyMDk1IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbihbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LCBzZWNvbmRzOiA0OS4yNTcgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCdzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgc2Vjb25kczogODg0ODkuMjU3IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICB0b0R1cmF0aW9uKHVuaXQsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZS5kaWZmKHRoaXMucywgdW5pdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIG1hcEZuIG9uIHRoZSBpbnRlcnZhbCBzdGFydCBhbmQgZW5kLCByZXR1cm5pbmcgYSBuZXcgSW50ZXJ2YWwgZnJvbSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnRvVVRDKCkpXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpXG4gICAqL1xuICBtYXBFbmRwb2ludHMobWFwRm4pIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTtcbiAgfVxufVxuIiwgImltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5cbmltcG9ydCB7IGhhc1JlbGF0aXZlIH0gZnJvbSBcIi4vaW1wbC91dGlsLmpzXCI7XG5cbi8qKlxuICogVGhlIEluZm8gY2xhc3MgY29udGFpbnMgc3RhdGljIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgZ2VuZXJhbCB0aW1lIGFuZCBkYXRlIHJlbGF0ZWQgZGF0YS4gRm9yIGV4YW1wbGUsIGl0IGhhcyBtZXRob2RzIGZvciBmaW5kaW5nIG91dCBpZiBhIHRpbWUgem9uZSBoYXMgYSBEU1QsIGZvciBsaXN0aW5nIHRoZSBtb250aHMgaW4gYW55IHN1cHBvcnRlZCBsb2NhbGUsIGFuZCBmb3IgZGlzY292ZXJpbmcgd2hpY2ggb2YgTHV4b24gZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5mbyB7XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgY29udGFpbnMgYSBEU1QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gWm9uZSB0byBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIGVudmlyb25tZW50J3MgbG9jYWwgem9uZS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBoYXNEU1Qoem9uZSA9IFNldHRpbmdzLmRlZmF1bHRab25lKSB7XG4gICAgY29uc3QgcHJvdG8gPSBEYXRlVGltZS5ub3coKS5zZXRab25lKHpvbmUpLnNldCh7IG1vbnRoOiAxMiB9KTtcblxuICAgIHJldHVybiAhem9uZS5pc1VuaXZlcnNhbCAmJiBwcm90by5vZmZzZXQgIT09IHByb3RvLnNldCh7IG1vbnRoOiA2IH0pLm9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgaXMgYSB2YWxpZCBJQU5BIHNwZWNpZmllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHpvbmUgLSBab25lIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZElBTkFab25lKHpvbmUpIHtcbiAgICByZXR1cm4gSUFOQVpvbmUuaXNWYWxpZFpvbmUoem9uZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGlucHV0IGludG8gYSB7QGxpbmsgWm9uZX0gaW5zdGFuY2UuXG4gICAqXG4gICAqICogSWYgYGlucHV0YCBpcyBhbHJlYWR5IGEgWm9uZSBpbnN0YW5jZSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHZhbGlkIHRpbWUgem9uZSBuYW1lLCBhIFpvbmUgaW5zdGFuY2VcbiAgICogICB3aXRoIHRoYXQgbmFtZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCByZWZlciB0byBhIGtub3duIHRpbWUgem9uZSwgYSBab25lXG4gICAqICAgaW5zdGFuY2Ugd2l0aCB7QGxpbmsgWm9uZSNpc1ZhbGlkfSA9PSBmYWxzZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXQgaXMgYSBudW1iZXIsIGEgWm9uZSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZml4ZWQgb2Zmc2V0XG4gICAqICAgaW4gbWludXRlcyBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgdGhlIGRlZmF1bHQgem9uZSBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZXxudW1iZXJ9IFtpbnB1dF0gLSB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkXG4gICAqIEByZXR1cm4ge1pvbmV9XG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplWm9uZShpbnB1dCkge1xuICAgIHJldHVybiBub3JtYWxpemVab25lKGlucHV0LCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgbW9udGggbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygpWzBdIC8vPT4gJ0phbnVhcnknXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcpWzBdIC8vPT4gJ0phbidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnKVswXSAvLz0+ICcxJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9IClbMF0gLy89PiAnamFudi4nXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdudW1lcmljJywgeyBsb2NhbGU6ICdhcicgfSlbMF0gLy89PiAnXHUwNjYxJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbG9uZycsIHsgb3V0cHV0Q2FsZW5kYXI6ICdpc2xhbWljJyB9KVswXSAvLz0+ICdSYWJpXHUwMkJCIEknXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1vbnRocyhcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCIgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCBtb250aCBuYW1lcy5cbiAgICogRm9ybWF0IG1vbnRocyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIG1vbnRocyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gdGhlIGRheSBvZiB0aGUgbW9udGguIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI21vbnRoc31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibnVtZXJpY1wiLCBcIjItZGlnaXRcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhclxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtb250aHNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsLCBvdXRwdXRDYWxlbmRhciA9IFwiZ3JlZ29yeVwiIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikpLm1vbnRocyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIHdlZWsgbmFtZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIHdlZWtkYXkgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygpWzBdIC8vPT4gJ01vbmRheSdcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnKVswXSAvLz0+ICdNb24nXG4gICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSlbMF0gLy89PiAnbHVuLidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICdcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MkJcdTA2NDZcdTA2NEFcdTA2NDYnXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIHdlZWtkYXlzKGxlbmd0aCA9IFwibG9uZ1wiLCB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgbnVsbCkpLndlZWtkYXlzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCB3ZWVrIG5hbWVzLlxuICAgKiBGb3JtYXQgd2Vla2RheXMgZGlmZmVyIGZyb20gc3RhbmRhbG9uZSB3ZWVrZGF5cyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gbW9yZSBkYXRlIGluZm9ybWF0aW9uLiBJbiBzb21lIGxhbmd1YWdlcywgdGhhdFxuICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuXG4gICAqIFNlZSB7QGxpbmsgSW5mbyN3ZWVrZGF5c31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibmFycm93XCIsIFwic2hvcnRcIiwgXCJsb25nXCIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPW51bGxdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgd2Vla2RheXNGb3JtYXQoXG4gICAgbGVuZ3RoID0gXCJsb25nXCIsXG4gICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgbWVyaWRpZW1zLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoKSAvLz0+IFsgJ0FNJywgJ1BNJyBdXG4gICAqIEBleGFtcGxlIEluZm8ubWVyaWRpZW1zKHsgbG9jYWxlOiAnbXknIH0pIC8vPT4gWyAnXHUxMDE0XHUxMDM2XHUxMDE0XHUxMDAwXHUxMDNBJywgJ1x1MTAwQVx1MTAxNFx1MTAzMScgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBtZXJpZGllbXMoeyBsb2NhbGUgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSkubWVyaWRpZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGVyYXMsIHN1Y2ggYXMgWydCQycsICdBRCddLiBUaGUgbG9jYWxlIGNhbiBiZSBzcGVjaWZpZWQsIGJ1dCB0aGUgY2FsZW5kYXIgc3lzdGVtIGlzIGFsd2F5cyBHcmVnb3JpYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdzaG9ydCddIC0gdGhlIGxlbmd0aCBvZiB0aGUgZXJhIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwic2hvcnRcIiBvciBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygpIC8vPT4gWyAnQkMnLCAnQUQnIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJykgLy89PiBbICdCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJyBdXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygnbG9uZycsIHsgbG9jYWxlOiAnZnInIH0pIC8vPT4gWyAnYXZhbnQgSlx1MDBFOXN1cy1DaHJpc3QnLCAnYXByXHUwMEU4cyBKXHUwMEU5c3VzLUNocmlzdCcgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyBlcmFzKGxlbmd0aCA9IFwic2hvcnRcIiwgeyBsb2NhbGUgPSBudWxsIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVsbCwgXCJncmVnb3J5XCIpLmVyYXMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNldCBvZiBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhpcyBlbnZpcm9ubWVudC5cbiAgICogU29tZSBmZWF0dXJlcyBvZiBMdXhvbiBhcmUgbm90IGF2YWlsYWJsZSBpbiBhbGwgZW52aXJvbm1lbnRzLiBGb3IgZXhhbXBsZSwgb24gb2xkZXIgYnJvd3NlcnMsIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCdzIHRoZSBjYXNlLlxuICAgKiBLZXlzOlxuICAgKiAqIGByZWxhdGl2ZWA6IHdoZXRoZXIgdGhpcyBlbnZpcm9ubWVudCBzdXBwb3J0cyByZWxhdGl2ZSB0aW1lIGZvcm1hdHRpbmdcbiAgICogQGV4YW1wbGUgSW5mby5mZWF0dXJlcygpIC8vPT4geyByZWxhdGl2ZTogZmFsc2UgfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZmVhdHVyZXMoKSB7XG4gICAgcmV0dXJuIHsgcmVsYXRpdmU6IGhhc1JlbGF0aXZlKCkgfTtcbiAgfVxufVxuIiwgImltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gZGF5RGlmZihlYXJsaWVyLCBsYXRlcikge1xuICBjb25zdCB1dGNEYXlTdGFydCA9IChkdCkgPT4gZHQudG9VVEMoMCwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpLFxuICAgIG1zID0gdXRjRGF5U3RhcnQobGF0ZXIpIC0gdXRjRGF5U3RhcnQoZWFybGllcik7XG4gIHJldHVybiBNYXRoLmZsb29yKER1cmF0aW9uLmZyb21NaWxsaXMobXMpLmFzKFwiZGF5c1wiKSk7XG59XG5cbmZ1bmN0aW9uIGhpZ2hPcmRlckRpZmZzKGN1cnNvciwgbGF0ZXIsIHVuaXRzKSB7XG4gIGNvbnN0IGRpZmZlcnMgPSBbXG4gICAgW1wieWVhcnNcIiwgKGEsIGIpID0+IGIueWVhciAtIGEueWVhcl0sXG4gICAgW1wicXVhcnRlcnNcIiwgKGEsIGIpID0+IGIucXVhcnRlciAtIGEucXVhcnRlcl0sXG4gICAgW1wibW9udGhzXCIsIChhLCBiKSA9PiBiLm1vbnRoIC0gYS5tb250aCArIChiLnllYXIgLSBhLnllYXIpICogMTJdLFxuICAgIFtcbiAgICAgIFwid2Vla3NcIixcbiAgICAgIChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGRheXMgPSBkYXlEaWZmKGEsIGIpO1xuICAgICAgICByZXR1cm4gKGRheXMgLSAoZGF5cyAlIDcpKSAvIDc7XG4gICAgICB9LFxuICAgIF0sXG4gICAgW1wiZGF5c1wiLCBkYXlEaWZmXSxcbiAgXTtcblxuICBjb25zdCByZXN1bHRzID0ge307XG4gIGxldCBsb3dlc3RPcmRlciwgaGlnaFdhdGVyO1xuXG4gIGZvciAoY29uc3QgW3VuaXQsIGRpZmZlcl0gb2YgZGlmZmVycykge1xuICAgIGlmICh1bml0cy5pbmRleE9mKHVuaXQpID49IDApIHtcbiAgICAgIGxvd2VzdE9yZGVyID0gdW5pdDtcblxuICAgICAgbGV0IGRlbHRhID0gZGlmZmVyKGN1cnNvciwgbGF0ZXIpO1xuICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbdW5pdF06IGRlbHRhIH0pO1xuXG4gICAgICBpZiAoaGlnaFdhdGVyID4gbGF0ZXIpIHtcbiAgICAgICAgY3Vyc29yID0gY3Vyc29yLnBsdXMoeyBbdW5pdF06IGRlbHRhIC0gMSB9KTtcbiAgICAgICAgZGVsdGEgLT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnNvciA9IGhpZ2hXYXRlcjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0c1t1bml0XSA9IGRlbHRhO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGVhcmxpZXIsIGxhdGVyLCB1bml0cywgb3B0cykge1xuICBsZXQgW2N1cnNvciwgcmVzdWx0cywgaGlnaFdhdGVyLCBsb3dlc3RPcmRlcl0gPSBoaWdoT3JkZXJEaWZmcyhlYXJsaWVyLCBsYXRlciwgdW5pdHMpO1xuXG4gIGNvbnN0IHJlbWFpbmluZ01pbGxpcyA9IGxhdGVyIC0gY3Vyc29yO1xuXG4gIGNvbnN0IGxvd2VyT3JkZXJVbml0cyA9IHVuaXRzLmZpbHRlcihcbiAgICAodSkgPT4gW1wiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiXS5pbmRleE9mKHUpID49IDBcbiAgKTtcblxuICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChoaWdoV2F0ZXIgPCBsYXRlcikge1xuICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbbG93ZXN0T3JkZXJdOiAxIH0pO1xuICAgIH1cblxuICAgIGlmIChoaWdoV2F0ZXIgIT09IGN1cnNvcikge1xuICAgICAgcmVzdWx0c1tsb3dlc3RPcmRlcl0gPSAocmVzdWx0c1tsb3dlc3RPcmRlcl0gfHwgMCkgKyByZW1haW5pbmdNaWxsaXMgLyAoaGlnaFdhdGVyIC0gY3Vyc29yKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkdXJhdGlvbiA9IER1cmF0aW9uLmZyb21PYmplY3QocmVzdWx0cywgb3B0cyk7XG5cbiAgaWYgKGxvd2VyT3JkZXJVbml0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21NaWxsaXMocmVtYWluaW5nTWlsbGlzLCBvcHRzKVxuICAgICAgLnNoaWZ0VG8oLi4ubG93ZXJPcmRlclVuaXRzKVxuICAgICAgLnBsdXMoZHVyYXRpb24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkdXJhdGlvbjtcbiAgfVxufVxuIiwgImNvbnN0IG51bWJlcmluZ1N5c3RlbXMgPSB7XG4gIGFyYWI6IFwiW1xcdTA2NjAtXFx1MDY2OV1cIixcbiAgYXJhYmV4dDogXCJbXFx1MDZGMC1cXHUwNkY5XVwiLFxuICBiYWxpOiBcIltcXHUxQjUwLVxcdTFCNTldXCIsXG4gIGJlbmc6IFwiW1xcdTA5RTYtXFx1MDlFRl1cIixcbiAgZGV2YTogXCJbXFx1MDk2Ni1cXHUwOTZGXVwiLFxuICBmdWxsd2lkZTogXCJbXFx1RkYxMC1cXHVGRjE5XVwiLFxuICBndWpyOiBcIltcXHUwQUU2LVxcdTBBRUZdXCIsXG4gIGhhbmlkZWM6IFwiW1x1MzAwN3xcdTRFMDB8XHU0RThDfFx1NEUwOXxcdTU2REJ8XHU0RTk0fFx1NTE2RHxcdTRFMDN8XHU1MTZCfFx1NEU1RF1cIixcbiAga2htcjogXCJbXFx1MTdFMC1cXHUxN0U5XVwiLFxuICBrbmRhOiBcIltcXHUwQ0U2LVxcdTBDRUZdXCIsXG4gIGxhb286IFwiW1xcdTBFRDAtXFx1MEVEOV1cIixcbiAgbGltYjogXCJbXFx1MTk0Ni1cXHUxOTRGXVwiLFxuICBtbHltOiBcIltcXHUwRDY2LVxcdTBENkZdXCIsXG4gIG1vbmc6IFwiW1xcdTE4MTAtXFx1MTgxOV1cIixcbiAgbXltcjogXCJbXFx1MTA0MC1cXHUxMDQ5XVwiLFxuICBvcnlhOiBcIltcXHUwQjY2LVxcdTBCNkZdXCIsXG4gIHRhbWxkZWM6IFwiW1xcdTBCRTYtXFx1MEJFRl1cIixcbiAgdGVsdTogXCJbXFx1MEM2Ni1cXHUwQzZGXVwiLFxuICB0aGFpOiBcIltcXHUwRTUwLVxcdTBFNTldXCIsXG4gIHRpYnQ6IFwiW1xcdTBGMjAtXFx1MEYyOV1cIixcbiAgbGF0bjogXCJcXFxcZFwiLFxufTtcblxuY29uc3QgbnVtYmVyaW5nU3lzdGVtc1VURjE2ID0ge1xuICBhcmFiOiBbMTYzMiwgMTY0MV0sXG4gIGFyYWJleHQ6IFsxNzc2LCAxNzg1XSxcbiAgYmFsaTogWzY5OTIsIDcwMDFdLFxuICBiZW5nOiBbMjUzNCwgMjU0M10sXG4gIGRldmE6IFsyNDA2LCAyNDE1XSxcbiAgZnVsbHdpZGU6IFs2NTI5NiwgNjUzMDNdLFxuICBndWpyOiBbMjc5MCwgMjc5OV0sXG4gIGtobXI6IFs2MTEyLCA2MTIxXSxcbiAga25kYTogWzMzMDIsIDMzMTFdLFxuICBsYW9vOiBbMzc5MiwgMzgwMV0sXG4gIGxpbWI6IFs2NDcwLCA2NDc5XSxcbiAgbWx5bTogWzM0MzAsIDM0MzldLFxuICBtb25nOiBbNjE2MCwgNjE2OV0sXG4gIG15bXI6IFs0MTYwLCA0MTY5XSxcbiAgb3J5YTogWzI5MTgsIDI5MjddLFxuICB0YW1sZGVjOiBbMzA0NiwgMzA1NV0sXG4gIHRlbHU6IFszMTc0LCAzMTgzXSxcbiAgdGhhaTogWzM2NjQsIDM2NzNdLFxuICB0aWJ0OiBbMzg3MiwgMzg4MV0sXG59O1xuXG5jb25zdCBoYW5pZGVjQ2hhcnMgPSBudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMucmVwbGFjZSgvW1xcW3xcXF1dL2csIFwiXCIpLnNwbGl0KFwiXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEaWdpdHMoc3RyKSB7XG4gIGxldCB2YWx1ZSA9IHBhcnNlSW50KHN0ciwgMTApO1xuICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgIGlmIChzdHJbaV0uc2VhcmNoKG51bWJlcmluZ1N5c3RlbXMuaGFuaWRlYykgIT09IC0xKSB7XG4gICAgICAgIHZhbHVlICs9IGhhbmlkZWNDaGFycy5pbmRleE9mKHN0cltpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBudW1iZXJpbmdTeXN0ZW1zVVRGMTYpIHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gbnVtYmVyaW5nU3lzdGVtc1VURjE2W2tleV07XG4gICAgICAgICAgaWYgKGNvZGUgPj0gbWluICYmIGNvZGUgPD0gbWF4KSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBjb2RlIC0gbWluO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZ2l0UmVnZXgoeyBudW1iZXJpbmdTeXN0ZW0gfSwgYXBwZW5kID0gXCJcIikge1xuICByZXR1cm4gbmV3IFJlZ0V4cChgJHtudW1iZXJpbmdTeXN0ZW1zW251bWJlcmluZ1N5c3RlbSB8fCBcImxhdG5cIl19JHthcHBlbmR9YCk7XG59XG4iLCAiaW1wb3J0IHsgcGFyc2VNaWxsaXMsIGlzVW5kZWZpbmVkLCB1bnRydW5jYXRlWWVhciwgc2lnbmVkT2Zmc2V0LCBoYXNPd25Qcm9wZXJ0eSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuLi96b25lcy9maXhlZE9mZnNldFpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi4vem9uZXMvSUFOQVpvbmUuanNcIjtcbmltcG9ydCBEYXRlVGltZSBmcm9tIFwiLi4vZGF0ZXRpbWUuanNcIjtcbmltcG9ydCB7IGRpZ2l0UmVnZXgsIHBhcnNlRGlnaXRzIH0gZnJvbSBcIi4vZGlnaXRzLmpzXCI7XG5pbXBvcnQgeyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcblxuY29uc3QgTUlTU0lOR19GVFAgPSBcIm1pc3NpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzIHN1cHBvcnRcIjtcblxuZnVuY3Rpb24gaW50VW5pdChyZWdleCwgcG9zdCA9IChpKSA9PiBpKSB7XG4gIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFtzXSkgPT4gcG9zdChwYXJzZURpZ2l0cyhzKSkgfTtcbn1cblxuY29uc3QgTkJTUCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTtcbmNvbnN0IHNwYWNlT3JOQlNQID0gYFsgJHtOQlNQfV1gO1xuY29uc3Qgc3BhY2VPck5CU1BSZWdFeHAgPSBuZXcgUmVnRXhwKHNwYWNlT3JOQlNQLCBcImdcIik7XG5cbmZ1bmN0aW9uIGZpeExpc3RSZWdleChzKSB7XG4gIC8vIG1ha2UgZG90cyBvcHRpb25hbCBhbmQgYWxzbyBtYWtlIHRoZW0gbGl0ZXJhbFxuICAvLyBtYWtlIHNwYWNlIGFuZCBub24gYnJlYWthYmxlIHNwYWNlIGNoYXJhY3RlcnMgaW50ZXJjaGFuZ2VhYmxlXG4gIHJldHVybiBzLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuP1wiKS5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBzcGFjZU9yTkJTUCk7XG59XG5cbmZ1bmN0aW9uIHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpIHtcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXCIpIC8vIGlnbm9yZSBkb3RzIHRoYXQgd2VyZSBtYWRlIG9wdGlvbmFsXG4gICAgLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIFwiIFwiKSAvLyBpbnRlcmNoYW5nZSBzcGFjZSBhbmQgbmJzcFxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBvbmVPZihzdHJpbmdzLCBzdGFydEluZGV4KSB7XG4gIGlmIChzdHJpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2V4OiBSZWdFeHAoc3RyaW5ncy5tYXAoZml4TGlzdFJlZ2V4KS5qb2luKFwifFwiKSksXG4gICAgICBkZXNlcjogKFtzXSkgPT5cbiAgICAgICAgc3RyaW5ncy5maW5kSW5kZXgoKGkpID0+IHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpID09PSBzdHJpcEluc2Vuc2l0aXZpdGllcyhpKSkgKyBzdGFydEluZGV4LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gb2Zmc2V0KHJlZ2V4LCBncm91cHMpIHtcbiAgcmV0dXJuIHsgcmVnZXgsIGRlc2VyOiAoWywgaCwgbV0pID0+IHNpZ25lZE9mZnNldChoLCBtKSwgZ3JvdXBzIH07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZShyZWdleCkge1xuICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbc10pID0+IHMgfTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVG9rZW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gdW5pdEZvclRva2VuKHRva2VuLCBsb2MpIHtcbiAgY29uc3Qgb25lID0gZGlnaXRSZWdleChsb2MpLFxuICAgIHR3byA9IGRpZ2l0UmVnZXgobG9jLCBcInsyfVwiKSxcbiAgICB0aHJlZSA9IGRpZ2l0UmVnZXgobG9jLCBcInszfVwiKSxcbiAgICBmb3VyID0gZGlnaXRSZWdleChsb2MsIFwiezR9XCIpLFxuICAgIHNpeCA9IGRpZ2l0UmVnZXgobG9jLCBcIns2fVwiKSxcbiAgICBvbmVPclR3byA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDJ9XCIpLFxuICAgIG9uZVRvVGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSwzfVwiKSxcbiAgICBvbmVUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDZ9XCIpLFxuICAgIG9uZVRvTmluZSA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDl9XCIpLFxuICAgIHR3b1RvRm91ciA9IGRpZ2l0UmVnZXgobG9jLCBcInsyLDR9XCIpLFxuICAgIGZvdXJUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCBcIns0LDZ9XCIpLFxuICAgIGxpdGVyYWwgPSAodCkgPT4gKHsgcmVnZXg6IFJlZ0V4cChlc2NhcGVUb2tlbih0LnZhbCkpLCBkZXNlcjogKFtzXSkgPT4gcywgbGl0ZXJhbDogdHJ1ZSB9KSxcbiAgICB1bml0YXRlID0gKHQpID0+IHtcbiAgICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBsaXRlcmFsKHQpO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0LnZhbCkge1xuICAgICAgICAvLyBlcmFcbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJzaG9ydFwiLCBmYWxzZSksIDApO1xuICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJsb25nXCIsIGZhbHNlKSwgMCk7XG4gICAgICAgIC8vIHllYXJzXG4gICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9TaXgpO1xuICAgICAgICBjYXNlIFwieXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d29Ub0ZvdXIsIHVudHJ1bmNhdGVZZWFyKTtcbiAgICAgICAgY2FzZSBcInl5eXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTtcbiAgICAgICAgY2FzZSBcInl5eXl5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91clRvU2l4KTtcbiAgICAgICAgY2FzZSBcInl5eXl5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHNpeCk7XG4gICAgICAgIC8vIG1vbnRoc1xuICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcImxvbmdcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcInNob3J0XCIsIGZhbHNlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwibG9uZ1wiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgLy8gZGF0ZXNcbiAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIC8vIG9yZGluYWxzXG4gICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9UaHJlZSk7XG4gICAgICAgIGNhc2UgXCJvb29cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7XG4gICAgICAgIC8vIHRpbWVcbiAgICAgICAgY2FzZSBcIkhIXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJoaFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwibW1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwic3NcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpO1xuICAgICAgICBjYXNlIFwiU1NTXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodGhyZWUpO1xuICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgIHJldHVybiBzaW1wbGUob25lVG9OaW5lKTtcbiAgICAgICAgY2FzZSBcInV1XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJ1dXVcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmUpO1xuICAgICAgICAvLyBtZXJpZGllbVxuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubWVyaWRpZW1zKCksIDApO1xuICAgICAgICAvLyB3ZWVrWWVhciAoaylcbiAgICAgICAgY2FzZSBcImtra2tcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTtcbiAgICAgICAgY2FzZSBcImtrXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvVG9Gb3VyLCB1bnRydW5jYXRlWWVhcik7XG4gICAgICAgIC8vIHdlZWtOdW1iZXIgKFcpXG4gICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiV1dcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICAvLyB3ZWVrZGF5c1xuICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7XG4gICAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJjY2NcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwibG9uZ1wiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICAvLyBvZmZzZXQvem9uZVxuICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgICByZXR1cm4gb2Zmc2V0KG5ldyBSZWdFeHAoYChbKy1dJHtvbmVPclR3by5zb3VyY2V9KSg/OjooJHt0d28uc291cmNlfSkpP2ApLCAyKTtcbiAgICAgICAgY2FzZSBcIlpaWlwiOlxuICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKCR7dHdvLnNvdXJjZX0pP2ApLCAyKTtcbiAgICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBaWlpaIChQU1QpIG9yIFpaWlpaIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpIGluIHBhcnNpbmdcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgYXJlXG4gICAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZSgvW2Etel8rLS9dezEsMjU2fT8vaSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGxpdGVyYWwodCk7XG4gICAgICB9XG4gICAgfTtcblxuICBjb25zdCB1bml0ID0gdW5pdGF0ZSh0b2tlbikgfHwge1xuICAgIGludmFsaWRSZWFzb246IE1JU1NJTkdfRlRQLFxuICB9O1xuXG4gIHVuaXQudG9rZW4gPSB0b2tlbjtcblxuICByZXR1cm4gdW5pdDtcbn1cblxuY29uc3QgcGFydFR5cGVTdHlsZVRvVG9rZW5WYWwgPSB7XG4gIHllYXI6IHtcbiAgICBcIjItZGlnaXRcIjogXCJ5eVwiLFxuICAgIG51bWVyaWM6IFwieXl5eXlcIixcbiAgfSxcbiAgbW9udGg6IHtcbiAgICBudW1lcmljOiBcIk1cIixcbiAgICBcIjItZGlnaXRcIjogXCJNTVwiLFxuICAgIHNob3J0OiBcIk1NTVwiLFxuICAgIGxvbmc6IFwiTU1NTVwiLFxuICB9LFxuICBkYXk6IHtcbiAgICBudW1lcmljOiBcImRcIixcbiAgICBcIjItZGlnaXRcIjogXCJkZFwiLFxuICB9LFxuICB3ZWVrZGF5OiB7XG4gICAgc2hvcnQ6IFwiRUVFXCIsXG4gICAgbG9uZzogXCJFRUVFXCIsXG4gIH0sXG4gIGRheXBlcmlvZDogXCJhXCIsXG4gIGRheVBlcmlvZDogXCJhXCIsXG4gIGhvdXI6IHtcbiAgICBudW1lcmljOiBcImhcIixcbiAgICBcIjItZGlnaXRcIjogXCJoaFwiLFxuICB9LFxuICBtaW51dGU6IHtcbiAgICBudW1lcmljOiBcIm1cIixcbiAgICBcIjItZGlnaXRcIjogXCJtbVwiLFxuICB9LFxuICBzZWNvbmQ6IHtcbiAgICBudW1lcmljOiBcInNcIixcbiAgICBcIjItZGlnaXRcIjogXCJzc1wiLFxuICB9LFxufTtcblxuZnVuY3Rpb24gdG9rZW5Gb3JQYXJ0KHBhcnQsIGxvY2FsZSwgZm9ybWF0T3B0cykge1xuICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBwYXJ0O1xuXG4gIGlmICh0eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiB0cnVlLFxuICAgICAgdmFsOiB2YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc3R5bGUgPSBmb3JtYXRPcHRzW3R5cGVdO1xuXG4gIGxldCB2YWwgPSBwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbFt0eXBlXTtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICB2YWwgPSB2YWxbc3R5bGVdO1xuICB9XG5cbiAgaWYgKHZhbCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXRlcmFsOiBmYWxzZSxcbiAgICAgIHZhbCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZWdleCh1bml0cykge1xuICBjb25zdCByZSA9IHVuaXRzLm1hcCgodSkgPT4gdS5yZWdleCkucmVkdWNlKChmLCByKSA9PiBgJHtmfSgke3Iuc291cmNlfSlgLCBcIlwiKTtcbiAgcmV0dXJuIFtgXiR7cmV9JGAsIHVuaXRzXTtcbn1cblxuZnVuY3Rpb24gbWF0Y2goaW5wdXQsIHJlZ2V4LCBoYW5kbGVycykge1xuICBjb25zdCBtYXRjaGVzID0gaW5wdXQubWF0Y2gocmVnZXgpO1xuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3QgYWxsID0ge307XG4gICAgbGV0IG1hdGNoSW5kZXggPSAxO1xuICAgIGZvciAoY29uc3QgaSBpbiBoYW5kbGVycykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5KGhhbmRsZXJzLCBpKSkge1xuICAgICAgICBjb25zdCBoID0gaGFuZGxlcnNbaV0sXG4gICAgICAgICAgZ3JvdXBzID0gaC5ncm91cHMgPyBoLmdyb3VwcyArIDEgOiAxO1xuICAgICAgICBpZiAoIWgubGl0ZXJhbCAmJiBoLnRva2VuKSB7XG4gICAgICAgICAgYWxsW2gudG9rZW4udmFsWzBdXSA9IGguZGVzZXIobWF0Y2hlcy5zbGljZShtYXRjaEluZGV4LCBtYXRjaEluZGV4ICsgZ3JvdXBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgbWF0Y2hJbmRleCArPSBncm91cHM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbbWF0Y2hlcywgYWxsXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW21hdGNoZXMsIHt9XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkYXRlVGltZUZyb21NYXRjaGVzKG1hdGNoZXMpIHtcbiAgY29uc3QgdG9GaWVsZCA9ICh0b2tlbikgPT4ge1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgIHJldHVybiBcIm1pbGxpc2Vjb25kXCI7XG4gICAgICBjYXNlIFwic1wiOlxuICAgICAgICByZXR1cm4gXCJzZWNvbmRcIjtcbiAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgIHJldHVybiBcIm1pbnV0ZVwiO1xuICAgICAgY2FzZSBcImhcIjpcbiAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgIHJldHVybiBcImhvdXJcIjtcbiAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgIHJldHVybiBcImRheVwiO1xuICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgcmV0dXJuIFwib3JkaW5hbFwiO1xuICAgICAgY2FzZSBcIkxcIjpcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgIHJldHVybiBcIm1vbnRoXCI7XG4gICAgICBjYXNlIFwieVwiOlxuICAgICAgICByZXR1cm4gXCJ5ZWFyXCI7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla2RheVwiO1xuICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla051bWJlclwiO1xuICAgICAgY2FzZSBcImtcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla1llYXJcIjtcbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBcInF1YXJ0ZXJcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBsZXQgem9uZSA9IG51bGw7XG4gIGxldCBzcGVjaWZpY09mZnNldDtcbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnopKSB7XG4gICAgem9uZSA9IElBTkFab25lLmNyZWF0ZShtYXRjaGVzLnopO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLlopKSB7XG4gICAgaWYgKCF6b25lKSB7XG4gICAgICB6b25lID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZShtYXRjaGVzLlopO1xuICAgIH1cbiAgICBzcGVjaWZpY09mZnNldCA9IG1hdGNoZXMuWjtcbiAgfVxuXG4gIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy5xKSkge1xuICAgIG1hdGNoZXMuTSA9IChtYXRjaGVzLnEgLSAxKSAqIDMgKyAxO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLmgpKSB7XG4gICAgaWYgKG1hdGNoZXMuaCA8IDEyICYmIG1hdGNoZXMuYSA9PT0gMSkge1xuICAgICAgbWF0Y2hlcy5oICs9IDEyO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlcy5oID09PSAxMiAmJiBtYXRjaGVzLmEgPT09IDApIHtcbiAgICAgIG1hdGNoZXMuaCA9IDA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hdGNoZXMuRyA9PT0gMCAmJiBtYXRjaGVzLnkpIHtcbiAgICBtYXRjaGVzLnkgPSAtbWF0Y2hlcy55O1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnUpKSB7XG4gICAgbWF0Y2hlcy5TID0gcGFyc2VNaWxsaXMobWF0Y2hlcy51KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHMgPSBPYmplY3Qua2V5cyhtYXRjaGVzKS5yZWR1Y2UoKHIsIGspID0+IHtcbiAgICBjb25zdCBmID0gdG9GaWVsZChrKTtcbiAgICBpZiAoZikge1xuICAgICAgcltmXSA9IG1hdGNoZXNba107XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gW3ZhbHMsIHpvbmUsIHNwZWNpZmljT2Zmc2V0XTtcbn1cblxubGV0IGR1bW15RGF0ZVRpbWVDYWNoZSA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldER1bW15RGF0ZVRpbWUoKSB7XG4gIGlmICghZHVtbXlEYXRlVGltZUNhY2hlKSB7XG4gICAgZHVtbXlEYXRlVGltZUNhY2hlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcygxNTU1NTU1NTU1NTU1KTtcbiAgfVxuXG4gIHJldHVybiBkdW1teURhdGVUaW1lQ2FjaGU7XG59XG5cbmZ1bmN0aW9uIG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0b2tlbiwgbG9jYWxlKSB7XG4gIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0T3B0cyA9IEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuLnZhbCk7XG5cbiAgaWYgKCFmb3JtYXRPcHRzKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0dGVyID0gRm9ybWF0dGVyLmNyZWF0ZShsb2NhbGUsIGZvcm1hdE9wdHMpO1xuICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXREYXRlVGltZVBhcnRzKGdldER1bW15RGF0ZVRpbWUoKSk7XG5cbiAgY29uc3QgdG9rZW5zID0gcGFydHMubWFwKChwKSA9PiB0b2tlbkZvclBhcnQocCwgbG9jYWxlLCBmb3JtYXRPcHRzKSk7XG5cbiAgaWYgKHRva2Vucy5pbmNsdWRlcyh1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZnVuY3Rpb24gZXhwYW5kTWFjcm9Ub2tlbnModG9rZW5zLCBsb2NhbGUpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4udG9rZW5zLm1hcCgodCkgPT4gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHQsIGxvY2FsZSkpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHtcbiAgY29uc3QgdG9rZW5zID0gZXhwYW5kTWFjcm9Ub2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZvcm1hdCksIGxvY2FsZSksXG4gICAgdW5pdHMgPSB0b2tlbnMubWFwKCh0KSA9PiB1bml0Rm9yVG9rZW4odCwgbG9jYWxlKSksXG4gICAgZGlzcXVhbGlmeWluZ1VuaXQgPSB1bml0cy5maW5kKCh0KSA9PiB0LmludmFsaWRSZWFzb24pO1xuXG4gIGlmIChkaXNxdWFsaWZ5aW5nVW5pdCkge1xuICAgIHJldHVybiB7IGlucHV0LCB0b2tlbnMsIGludmFsaWRSZWFzb246IGRpc3F1YWxpZnlpbmdVbml0LmludmFsaWRSZWFzb24gfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbcmVnZXhTdHJpbmcsIGhhbmRsZXJzXSA9IGJ1aWxkUmVnZXgodW5pdHMpLFxuICAgICAgcmVnZXggPSBSZWdFeHAocmVnZXhTdHJpbmcsIFwiaVwiKSxcbiAgICAgIFtyYXdNYXRjaGVzLCBtYXRjaGVzXSA9IG1hdGNoKGlucHV0LCByZWdleCwgaGFuZGxlcnMpLFxuICAgICAgW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXRdID0gbWF0Y2hlc1xuICAgICAgICA/IGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcylcbiAgICAgICAgOiBbbnVsbCwgbnVsbCwgdW5kZWZpbmVkXTtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkobWF0Y2hlcywgXCJhXCIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsIFwiSFwiKSkge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbid0IGluY2x1ZGUgbWVyaWRpZW0gd2hlbiBzcGVjaWZ5aW5nIDI0LWhvdXIgZm9ybWF0XCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7IGlucHV0LCB0b2tlbnMsIHJlZ2V4LCByYXdNYXRjaGVzLCBtYXRjaGVzLCByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0IH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHtcbiAgY29uc3QgeyByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkUmVhc29uIH0gPSBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpO1xuICByZXR1cm4gW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb25dO1xufVxuIiwgImltcG9ydCB7XG4gIGludGVnZXJCZXR3ZWVuLFxuICBpc0xlYXBZZWFyLFxuICB0aW1lT2JqZWN0LFxuICBkYXlzSW5ZZWFyLFxuICBkYXlzSW5Nb250aCxcbiAgd2Vla3NJbldlZWtZZWFyLFxuICBpc0ludGVnZXIsXG59IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCBJbnZhbGlkIGZyb20gXCIuL2ludmFsaWQuanNcIjtcblxuY29uc3Qgbm9uTGVhcExhZGRlciA9IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF0sXG4gIGxlYXBMYWRkZXIgPSBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdO1xuXG5mdW5jdGlvbiB1bml0T3V0T2ZSYW5nZSh1bml0LCB2YWx1ZSkge1xuICByZXR1cm4gbmV3IEludmFsaWQoXG4gICAgXCJ1bml0IG91dCBvZiByYW5nZVwiLFxuICAgIGB5b3Ugc3BlY2lmaWVkICR7dmFsdWV9IChvZiB0eXBlICR7dHlwZW9mIHZhbHVlfSkgYXMgYSAke3VuaXR9LCB3aGljaCBpcyBpbnZhbGlkYFxuICApO1xufVxuXG5mdW5jdGlvbiBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTtcblxuICBpZiAoeWVhciA8IDEwMCAmJiB5ZWFyID49IDApIHtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG5cbiAgY29uc3QganMgPSBkLmdldFVUQ0RheSgpO1xuXG4gIHJldHVybiBqcyA9PT0gMCA/IDcgOiBqcztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSkge1xuICByZXR1cm4gZGF5ICsgKGlzTGVhcFllYXIoeWVhcikgPyBsZWFwTGFkZGVyIDogbm9uTGVhcExhZGRlcilbbW9udGggLSAxXTtcbn1cblxuZnVuY3Rpb24gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSB7XG4gIGNvbnN0IHRhYmxlID0gaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyLFxuICAgIG1vbnRoMCA9IHRhYmxlLmZpbmRJbmRleCgoaSkgPT4gaSA8IG9yZGluYWwpLFxuICAgIGRheSA9IG9yZGluYWwgLSB0YWJsZVttb250aDBdO1xuICByZXR1cm4geyBtb250aDogbW9udGgwICsgMSwgZGF5IH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JlZ29yaWFuVG9XZWVrKGdyZWdPYmopIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnT2JqLFxuICAgIG9yZGluYWwgPSBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KSxcbiAgICB3ZWVrZGF5ID0gZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpO1xuXG4gIGxldCB3ZWVrTnVtYmVyID0gTWF0aC5mbG9vcigob3JkaW5hbCAtIHdlZWtkYXkgKyAxMCkgLyA3KSxcbiAgICB3ZWVrWWVhcjtcblxuICBpZiAod2Vla051bWJlciA8IDEpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgLSAxO1xuICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhcikpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgKyAxO1xuICAgIHdlZWtOdW1iZXIgPSAxO1xuICB9IGVsc2Uge1xuICAgIHdlZWtZZWFyID0geWVhcjtcbiAgfVxuXG4gIHJldHVybiB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5LCAuLi50aW1lT2JqZWN0KGdyZWdPYmopIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrVG9HcmVnb3JpYW4od2Vla0RhdGEpIHtcbiAgY29uc3QgeyB3ZWVrWWVhciwgd2Vla051bWJlciwgd2Vla2RheSB9ID0gd2Vla0RhdGEsXG4gICAgd2Vla2RheU9mSmFuNCA9IGRheU9mV2Vlayh3ZWVrWWVhciwgMSwgNCksXG4gICAgeWVhckluRGF5cyA9IGRheXNJblllYXIod2Vla1llYXIpO1xuXG4gIGxldCBvcmRpbmFsID0gd2Vla051bWJlciAqIDcgKyB3ZWVrZGF5IC0gd2Vla2RheU9mSmFuNCAtIDMsXG4gICAgeWVhcjtcblxuICBpZiAob3JkaW5hbCA8IDEpIHtcbiAgICB5ZWFyID0gd2Vla1llYXIgLSAxO1xuICAgIG9yZGluYWwgKz0gZGF5c0luWWVhcih5ZWFyKTtcbiAgfSBlbHNlIGlmIChvcmRpbmFsID4geWVhckluRGF5cykge1xuICAgIHllYXIgPSB3ZWVrWWVhciArIDE7XG4gICAgb3JkaW5hbCAtPSBkYXlzSW5ZZWFyKHdlZWtZZWFyKTtcbiAgfSBlbHNlIHtcbiAgICB5ZWFyID0gd2Vla1llYXI7XG4gIH1cblxuICBjb25zdCB7IG1vbnRoLCBkYXkgfSA9IHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCk7XG4gIHJldHVybiB7IHllYXIsIG1vbnRoLCBkYXksIC4uLnRpbWVPYmplY3Qod2Vla0RhdGEpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub09yZGluYWwoZ3JlZ0RhdGEpIHtcbiAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnRGF0YTtcbiAgY29uc3Qgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpO1xuICByZXR1cm4geyB5ZWFyLCBvcmRpbmFsLCAuLi50aW1lT2JqZWN0KGdyZWdEYXRhKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkaW5hbFRvR3JlZ29yaWFuKG9yZGluYWxEYXRhKSB7XG4gIGNvbnN0IHsgeWVhciwgb3JkaW5hbCB9ID0gb3JkaW5hbERhdGE7XG4gIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdChvcmRpbmFsRGF0YSkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRXZWVrRGF0YShvYmopIHtcbiAgY29uc3QgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai53ZWVrWWVhciksXG4gICAgdmFsaWRXZWVrID0gaW50ZWdlckJldHdlZW4ob2JqLndlZWtOdW1iZXIsIDEsIHdlZWtzSW5XZWVrWWVhcihvYmoud2Vla1llYXIpKSxcbiAgICB2YWxpZFdlZWtkYXkgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla2RheSwgMSwgNyk7XG5cbiAgaWYgKCF2YWxpZFllYXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrWWVhclwiLCBvYmoud2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFdlZWspIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrXCIsIG9iai53ZWVrKTtcbiAgfSBlbHNlIGlmICghdmFsaWRXZWVrZGF5KSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwid2Vla2RheVwiLCBvYmoud2Vla2RheSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnZhbGlkT3JkaW5hbERhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgdmFsaWRPcmRpbmFsID0gaW50ZWdlckJldHdlZW4ob2JqLm9yZGluYWwsIDEsIGRheXNJblllYXIob2JqLnllYXIpKTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInllYXJcIiwgb2JqLnllYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE9yZGluYWwpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJvcmRpbmFsXCIsIG9iai5vcmRpbmFsKTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG9iaikge1xuICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLFxuICAgIHZhbGlkTW9udGggPSBpbnRlZ2VyQmV0d2VlbihvYmoubW9udGgsIDEsIDEyKSxcbiAgICB2YWxpZERheSA9IGludGVnZXJCZXR3ZWVuKG9iai5kYXksIDEsIGRheXNJbk1vbnRoKG9iai55ZWFyLCBvYmoubW9udGgpKTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInllYXJcIiwgb2JqLnllYXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1vbnRoKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibW9udGhcIiwgb2JqLm1vbnRoKTtcbiAgfSBlbHNlIGlmICghdmFsaWREYXkpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJkYXlcIiwgb2JqLmRheSk7XG4gIH0gZWxzZSByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnZhbGlkVGltZURhdGEob2JqKSB7XG4gIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0gPSBvYmo7XG4gIGNvbnN0IHZhbGlkSG91ciA9XG4gICAgICBpbnRlZ2VyQmV0d2Vlbihob3VyLCAwLCAyMykgfHxcbiAgICAgIChob3VyID09PSAyNCAmJiBtaW51dGUgPT09IDAgJiYgc2Vjb25kID09PSAwICYmIG1pbGxpc2Vjb25kID09PSAwKSxcbiAgICB2YWxpZE1pbnV0ZSA9IGludGVnZXJCZXR3ZWVuKG1pbnV0ZSwgMCwgNTkpLFxuICAgIHZhbGlkU2Vjb25kID0gaW50ZWdlckJldHdlZW4oc2Vjb25kLCAwLCA1OSksXG4gICAgdmFsaWRNaWxsaXNlY29uZCA9IGludGVnZXJCZXR3ZWVuKG1pbGxpc2Vjb25kLCAwLCA5OTkpO1xuXG4gIGlmICghdmFsaWRIb3VyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwiaG91clwiLCBob3VyKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNaW51dGUpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJtaW51dGVcIiwgbWludXRlKTtcbiAgfSBlbHNlIGlmICghdmFsaWRTZWNvbmQpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNaWxsaXNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cbiIsICJpbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBJbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgSW5mbyBmcm9tIFwiLi9pbmZvLmpzXCI7XG5pbXBvcnQgRm9ybWF0dGVyIGZyb20gXCIuL2ltcGwvZm9ybWF0dGVyLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuaW1wb3J0IHtcbiAgaXNVbmRlZmluZWQsXG4gIG1heWJlQXJyYXksXG4gIGlzRGF0ZSxcbiAgaXNOdW1iZXIsXG4gIGJlc3RCeSxcbiAgZGF5c0luTW9udGgsXG4gIGRheXNJblllYXIsXG4gIGlzTGVhcFllYXIsXG4gIHdlZWtzSW5XZWVrWWVhcixcbiAgbm9ybWFsaXplT2JqZWN0LFxuICByb3VuZFRvLFxuICBvYmpUb0xvY2FsVFMsXG4gIHBhZFN0YXJ0LFxufSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVpvbmUgfSBmcm9tIFwiLi9pbXBsL3pvbmVVdGlsLmpzXCI7XG5pbXBvcnQgZGlmZiBmcm9tIFwiLi9pbXBsL2RpZmYuanNcIjtcbmltcG9ydCB7IHBhcnNlUkZDMjgyMkRhdGUsIHBhcnNlSVNPRGF0ZSwgcGFyc2VIVFRQRGF0ZSwgcGFyc2VTUUwgfSBmcm9tIFwiLi9pbXBsL3JlZ2V4UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUZyb21Ub2tlbnMsIGV4cGxhaW5Gcm9tVG9rZW5zIH0gZnJvbSBcIi4vaW1wbC90b2tlblBhcnNlci5qc1wiO1xuaW1wb3J0IHtcbiAgZ3JlZ29yaWFuVG9XZWVrLFxuICB3ZWVrVG9HcmVnb3JpYW4sXG4gIGdyZWdvcmlhblRvT3JkaW5hbCxcbiAgb3JkaW5hbFRvR3JlZ29yaWFuLFxuICBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YSxcbiAgaGFzSW52YWxpZFdlZWtEYXRhLFxuICBoYXNJbnZhbGlkT3JkaW5hbERhdGEsXG4gIGhhc0ludmFsaWRUaW1lRGF0YSxcbn0gZnJvbSBcIi4vaW1wbC9jb252ZXJzaW9ucy5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9pbXBsL2Zvcm1hdHMuanNcIjtcbmltcG9ydCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcixcbiAgSW52YWxpZFVuaXRFcnJvcixcbiAgSW52YWxpZERhdGVUaW1lRXJyb3IsXG59IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW1wbC9pbnZhbGlkLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRGF0ZVRpbWVcIjtcbmNvbnN0IE1BWF9EQVRFID0gOC42NGUxNTtcblxuZnVuY3Rpb24gdW5zdXBwb3J0ZWRab25lKHpvbmUpIHtcbiAgcmV0dXJuIG5ldyBJbnZhbGlkKFwidW5zdXBwb3J0ZWQgem9uZVwiLCBgdGhlIHpvbmUgXCIke3pvbmUubmFtZX1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XG59XG5cbi8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlXG5mdW5jdGlvbiBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKGR0KSB7XG4gIGlmIChkdC53ZWVrRGF0YSA9PT0gbnVsbCkge1xuICAgIGR0LndlZWtEYXRhID0gZ3JlZ29yaWFuVG9XZWVrKGR0LmMpO1xuICB9XG4gIHJldHVybiBkdC53ZWVrRGF0YTtcbn1cblxuLy8gY2xvbmUgcmVhbGx5IG1lYW5zLCBcIm1ha2UgYSBuZXcgb2JqZWN0IHdpdGggdGhlc2UgbW9kaWZpY2F0aW9uc1wiLiBhbGwgXCJzZXR0ZXJzXCIgcmVhbGx5IHVzZSB0aGlzXG4vLyB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHdoaWxlIG9ubHkgY2hhbmdpbmcgc29tZSBvZiB0aGUgcHJvcGVydGllc1xuZnVuY3Rpb24gY2xvbmUoaW5zdCwgYWx0cykge1xuICBjb25zdCBjdXJyZW50ID0ge1xuICAgIHRzOiBpbnN0LnRzLFxuICAgIHpvbmU6IGluc3Quem9uZSxcbiAgICBjOiBpbnN0LmMsXG4gICAgbzogaW5zdC5vLFxuICAgIGxvYzogaW5zdC5sb2MsXG4gICAgaW52YWxpZDogaW5zdC5pbnZhbGlkLFxuICB9O1xuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgLi4uY3VycmVudCwgLi4uYWx0cywgb2xkOiBjdXJyZW50IH0pO1xufVxuXG4vLyBmaW5kIHRoZSByaWdodCBvZmZzZXQgYSBnaXZlbiBsb2NhbCB0aW1lLiBUaGUgbyBpbnB1dCBpcyBvdXIgZ3Vlc3MsIHdoaWNoIGRldGVybWluZXMgd2hpY2hcbi8vIG9mZnNldCB3ZSdsbCBwaWNrIGluIGFtYmlndW91cyBjYXNlcyAoZS5nLiB0aGVyZSBhcmUgdHdvIDMgQU1zIGIvYyBGYWxsYmFjayBEU1QpXG5mdW5jdGlvbiBmaXhPZmZzZXQobG9jYWxUUywgbywgdHopIHtcbiAgLy8gT3VyIFVUQyB0aW1lIGlzIGp1c3QgYSBndWVzcyBiZWNhdXNlIG91ciBvZmZzZXQgaXMganVzdCBhIGd1ZXNzXG4gIGxldCB1dGNHdWVzcyA9IGxvY2FsVFMgLSBvICogNjAgKiAxMDAwO1xuXG4gIC8vIFRlc3Qgd2hldGhlciB0aGUgem9uZSBtYXRjaGVzIHRoZSBvZmZzZXQgZm9yIHRoaXMgdHNcbiAgY29uc3QgbzIgPSB0ei5vZmZzZXQodXRjR3Vlc3MpO1xuXG4gIC8vIElmIHNvLCBvZmZzZXQgZGlkbid0IGNoYW5nZSBhbmQgd2UncmUgZG9uZVxuICBpZiAobyA9PT0gbzIpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvXTtcbiAgfVxuXG4gIC8vIElmIG5vdCwgY2hhbmdlIHRoZSB0cyBieSB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgb2Zmc2V0XG4gIHV0Y0d1ZXNzIC09IChvMiAtIG8pICogNjAgKiAxMDAwO1xuXG4gIC8vIElmIHRoYXQgZ2l2ZXMgdXMgdGhlIGxvY2FsIHRpbWUgd2Ugd2FudCwgd2UncmUgZG9uZVxuICBjb25zdCBvMyA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7XG4gIGlmIChvMiA9PT0gbzMpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvMl07XG4gIH1cblxuICAvLyBJZiBpdCdzIGRpZmZlcmVudCwgd2UncmUgaW4gYSBob2xlIHRpbWUuIFRoZSBvZmZzZXQgaGFzIGNoYW5nZWQsIGJ1dCB0aGUgd2UgZG9uJ3QgYWRqdXN0IHRoZSB0aW1lXG4gIHJldHVybiBbbG9jYWxUUyAtIE1hdGgubWluKG8yLCBvMykgKiA2MCAqIDEwMDAsIE1hdGgubWF4KG8yLCBvMyldO1xufVxuXG4vLyBjb252ZXJ0IGFuIGVwb2NoIHRpbWVzdGFtcCBpbnRvIGEgY2FsZW5kYXIgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG9mZnNldFxuZnVuY3Rpb24gdHNUb09iaih0cywgb2Zmc2V0KSB7XG4gIHRzICs9IG9mZnNldCAqIDYwICogMTAwMDtcblxuICBjb25zdCBkID0gbmV3IERhdGUodHMpO1xuXG4gIHJldHVybiB7XG4gICAgeWVhcjogZC5nZXRVVENGdWxsWWVhcigpLFxuICAgIG1vbnRoOiBkLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgIGRheTogZC5nZXRVVENEYXRlKCksXG4gICAgaG91cjogZC5nZXRVVENIb3VycygpLFxuICAgIG1pbnV0ZTogZC5nZXRVVENNaW51dGVzKCksXG4gICAgc2Vjb25kOiBkLmdldFVUQ1NlY29uZHMoKSxcbiAgICBtaWxsaXNlY29uZDogZC5nZXRVVENNaWxsaXNlY29uZHMoKSxcbiAgfTtcbn1cblxuLy8gY29udmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGVwb2NoIHRpbWVzdGFtcFxuZnVuY3Rpb24gb2JqVG9UUyhvYmosIG9mZnNldCwgem9uZSkge1xuICByZXR1cm4gZml4T2Zmc2V0KG9ialRvTG9jYWxUUyhvYmopLCBvZmZzZXQsIHpvbmUpO1xufVxuXG4vLyBjcmVhdGUgYSBuZXcgRFQgaW5zdGFuY2UgYnkgYWRkaW5nIGEgZHVyYXRpb24sIGFkanVzdGluZyBmb3IgRFNUc1xuZnVuY3Rpb24gYWRqdXN0VGltZShpbnN0LCBkdXIpIHtcbiAgY29uc3Qgb1ByZSA9IGluc3QubyxcbiAgICB5ZWFyID0gaW5zdC5jLnllYXIgKyBNYXRoLnRydW5jKGR1ci55ZWFycyksXG4gICAgbW9udGggPSBpbnN0LmMubW9udGggKyBNYXRoLnRydW5jKGR1ci5tb250aHMpICsgTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpICogMyxcbiAgICBjID0ge1xuICAgICAgLi4uaW5zdC5jLFxuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5OlxuICAgICAgICBNYXRoLm1pbihpbnN0LmMuZGF5LCBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpICtcbiAgICAgICAgTWF0aC50cnVuYyhkdXIuZGF5cykgK1xuICAgICAgICBNYXRoLnRydW5jKGR1ci53ZWVrcykgKiA3LFxuICAgIH0sXG4gICAgbWlsbGlzVG9BZGQgPSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtcbiAgICAgIHllYXJzOiBkdXIueWVhcnMgLSBNYXRoLnRydW5jKGR1ci55ZWFycyksXG4gICAgICBxdWFydGVyczogZHVyLnF1YXJ0ZXJzIC0gTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpLFxuICAgICAgbW9udGhzOiBkdXIubW9udGhzIC0gTWF0aC50cnVuYyhkdXIubW9udGhzKSxcbiAgICAgIHdlZWtzOiBkdXIud2Vla3MgLSBNYXRoLnRydW5jKGR1ci53ZWVrcyksXG4gICAgICBkYXlzOiBkdXIuZGF5cyAtIE1hdGgudHJ1bmMoZHVyLmRheXMpLFxuICAgICAgaG91cnM6IGR1ci5ob3VycyxcbiAgICAgIG1pbnV0ZXM6IGR1ci5taW51dGVzLFxuICAgICAgc2Vjb25kczogZHVyLnNlY29uZHMsXG4gICAgICBtaWxsaXNlY29uZHM6IGR1ci5taWxsaXNlY29uZHMsXG4gICAgfSkuYXMoXCJtaWxsaXNlY29uZHNcIiksXG4gICAgbG9jYWxUUyA9IG9ialRvTG9jYWxUUyhjKTtcblxuICBsZXQgW3RzLCBvXSA9IGZpeE9mZnNldChsb2NhbFRTLCBvUHJlLCBpbnN0LnpvbmUpO1xuXG4gIGlmIChtaWxsaXNUb0FkZCAhPT0gMCkge1xuICAgIHRzICs9IG1pbGxpc1RvQWRkO1xuICAgIC8vIHRoYXQgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQgYnkgZ29pbmcgb3ZlciBhIERTVCwgYnV0IHdlIHdhbnQgdG8ga2VlcCB0aGUgdHMgdGhlIHNhbWVcbiAgICBvID0gaW5zdC56b25lLm9mZnNldCh0cyk7XG4gIH1cblxuICByZXR1cm4geyB0cywgbyB9O1xufVxuXG4vLyBoZWxwZXIgdXNlZnVsIGluIHR1cm5pbmcgdGhlIHJlc3VsdHMgb2YgcGFyc2luZyBpbnRvIHJlYWwgZGF0ZXNcbi8vIGJ5IGhhbmRsaW5nIHRoZSB6b25lIG9wdGlvbnNcbmZ1bmN0aW9uIHBhcnNlRGF0YVRvRGF0ZVRpbWUocGFyc2VkLCBwYXJzZWRab25lLCBvcHRzLCBmb3JtYXQsIHRleHQsIHNwZWNpZmljT2Zmc2V0KSB7XG4gIGNvbnN0IHsgc2V0Wm9uZSwgem9uZSB9ID0gb3B0cztcbiAgaWYgKHBhcnNlZCAmJiBPYmplY3Qua2V5cyhwYXJzZWQpLmxlbmd0aCAhPT0gMCkge1xuICAgIGNvbnN0IGludGVycHJldGF0aW9uWm9uZSA9IHBhcnNlZFpvbmUgfHwgem9uZSxcbiAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICB6b25lOiBpbnRlcnByZXRhdGlvblpvbmUsXG4gICAgICAgIHNwZWNpZmljT2Zmc2V0LFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHNldFpvbmUgPyBpbnN0IDogaW5zdC5zZXRab25lKHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFxuICAgICAgbmV3IEludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7Zm9ybWF0fWApXG4gICAgKTtcbiAgfVxufVxuXG4vLyBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSB0ZWNobmljYWwgZm9ybWF0IChlLmcuIFJGQyAyODIyKSwgdGhpcyBoZWxwZXJcbi8vIGhlbHBzIGhhbmRsZSB0aGUgZGV0YWlsc1xuZnVuY3Rpb24gdG9UZWNoRm9ybWF0KGR0LCBmb3JtYXQsIGFsbG93WiA9IHRydWUpIHtcbiAgcmV0dXJuIGR0LmlzVmFsaWRcbiAgICA/IEZvcm1hdHRlci5jcmVhdGUoTG9jYWxlLmNyZWF0ZShcImVuLVVTXCIpLCB7XG4gICAgICAgIGFsbG93WixcbiAgICAgICAgZm9yY2VTaW1wbGU6IHRydWUsXG4gICAgICB9KS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZvcm1hdClcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvSVNPRGF0ZShvLCBleHRlbmRlZCkge1xuICBjb25zdCBsb25nRm9ybWF0ID0gby5jLnllYXIgPiA5OTk5IHx8IG8uYy55ZWFyIDwgMDtcbiAgbGV0IGMgPSBcIlwiO1xuICBpZiAobG9uZ0Zvcm1hdCAmJiBvLmMueWVhciA+PSAwKSBjICs9IFwiK1wiO1xuICBjICs9IHBhZFN0YXJ0KG8uYy55ZWFyLCBsb25nRm9ybWF0ID8gNiA6IDQpO1xuXG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubW9udGgpO1xuICAgIGMgKz0gXCItXCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBwYWRTdGFydChvLmMuZGF5KTtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gdG9JU09UaW1lKFxuICBvLFxuICBleHRlbmRlZCxcbiAgc3VwcHJlc3NTZWNvbmRzLFxuICBzdXBwcmVzc01pbGxpc2Vjb25kcyxcbiAgaW5jbHVkZU9mZnNldCxcbiAgZXh0ZW5kZWRab25lXG4pIHtcbiAgbGV0IGMgPSBwYWRTdGFydChvLmMuaG91cik7XG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCI6XCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcbiAgICBpZiAoby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgICBjICs9IFwiOlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpO1xuICB9XG5cbiAgaWYgKG8uYy5zZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzU2Vjb25kcykge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLnNlY29uZCk7XG5cbiAgICBpZiAoby5jLm1pbGxpc2Vjb25kICE9PSAwIHx8ICFzdXBwcmVzc01pbGxpc2Vjb25kcykge1xuICAgICAgYyArPSBcIi5cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbGxpc2Vjb25kLCAzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgIGlmIChvLmlzT2Zmc2V0Rml4ZWQgJiYgby5vZmZzZXQgPT09IDAgJiYgIWV4dGVuZGVkWm9uZSkge1xuICAgICAgYyArPSBcIlpcIjtcbiAgICB9IGVsc2UgaWYgKG8ubyA8IDApIHtcbiAgICAgIGMgKz0gXCItXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAvIDYwKSk7XG4gICAgICBjICs9IFwiOlwiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKC1vLm8gJSA2MCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjICs9IFwiK1wiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAvIDYwKSk7XG4gICAgICBjICs9IFwiOlwiO1xuICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAlIDYwKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4dGVuZGVkWm9uZSkge1xuICAgIGMgKz0gXCJbXCIgKyBvLnpvbmUuaWFuYU5hbWUgKyBcIl1cIjtcbiAgfVxuICByZXR1cm4gYztcbn1cblxuLy8gZGVmYXVsdHMgZm9yIHVuc3BlY2lmaWVkIHVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzXG5jb25zdCBkZWZhdWx0VW5pdFZhbHVlcyA9IHtcbiAgICBtb250aDogMSxcbiAgICBkYXk6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9LFxuICBkZWZhdWx0V2Vla1VuaXRWYWx1ZXMgPSB7XG4gICAgd2Vla051bWJlcjogMSxcbiAgICB3ZWVrZGF5OiAxLFxuICAgIGhvdXI6IDAsXG4gICAgbWludXRlOiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbiAgfSxcbiAgZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzID0ge1xuICAgIG9yZGluYWw6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9O1xuXG4vLyBVbml0cyBpbiB0aGUgc3VwcG9ydGVkIGNhbGVuZGFycywgc29ydGVkIGJ5IGJpZ25lc3NcbmNvbnN0IG9yZGVyZWRVbml0cyA9IFtcInllYXJcIiwgXCJtb250aFwiLCBcImRheVwiLCBcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIiwgXCJtaWxsaXNlY29uZFwiXSxcbiAgb3JkZXJlZFdlZWtVbml0cyA9IFtcbiAgICBcIndlZWtZZWFyXCIsXG4gICAgXCJ3ZWVrTnVtYmVyXCIsXG4gICAgXCJ3ZWVrZGF5XCIsXG4gICAgXCJob3VyXCIsXG4gICAgXCJtaW51dGVcIixcbiAgICBcInNlY29uZFwiLFxuICAgIFwibWlsbGlzZWNvbmRcIixcbiAgXSxcbiAgb3JkZXJlZE9yZGluYWxVbml0cyA9IFtcInllYXJcIiwgXCJvcmRpbmFsXCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdO1xuXG4vLyBzdGFuZGFyZGl6ZSBjYXNlIGFuZCBwbHVyYWxpdHkgaW4gdW5pdHNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXQodW5pdCkge1xuICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgIHllYXI6IFwieWVhclwiLFxuICAgIHllYXJzOiBcInllYXJcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIGhvdXI6IFwiaG91clwiLFxuICAgIGhvdXJzOiBcImhvdXJcIixcbiAgICBtaW51dGU6IFwibWludXRlXCIsXG4gICAgbWludXRlczogXCJtaW51dGVcIixcbiAgICBxdWFydGVyOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGVyczogXCJxdWFydGVyXCIsXG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWlsbGlzZWNvbmQ6IFwibWlsbGlzZWNvbmRcIixcbiAgICBtaWxsaXNlY29uZHM6IFwibWlsbGlzZWNvbmRcIixcbiAgICB3ZWVrZGF5OiBcIndlZWtkYXlcIixcbiAgICB3ZWVrZGF5czogXCJ3ZWVrZGF5XCIsXG4gICAgd2Vla251bWJlcjogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla3NudW1iZXI6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWtudW1iZXJzOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVreWVhcjogXCJ3ZWVrWWVhclwiLFxuICAgIHdlZWt5ZWFyczogXCJ3ZWVrWWVhclwiLFxuICAgIG9yZGluYWw6IFwib3JkaW5hbFwiLFxuICB9W3VuaXQudG9Mb3dlckNhc2UoKV07XG5cbiAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLy8gdGhpcyBpcyBhIGR1bWJlZCBkb3duIHZlcnNpb24gb2YgZnJvbU9iamVjdCgpIHRoYXQgcnVucyBhYm91dCA2MCUgZmFzdGVyXG4vLyBidXQgZG9lc24ndCBkbyBhbnkgdmFsaWRhdGlvbiwgbWFrZXMgYSBidW5jaCBvZiBhc3N1bXB0aW9ucyBhYm91dCB3aGF0IHVuaXRzXG4vLyBhcmUgcHJlc2VudCwgYW5kIHNvIG9uLlxuZnVuY3Rpb24gcXVpY2tEVChvYmosIG9wdHMpIHtcbiAgY29uc3Qgem9uZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyksXG4gICAgdHNOb3cgPSBTZXR0aW5ncy5ub3coKTtcblxuICBsZXQgdHMsIG87XG5cbiAgLy8gYXNzdW1lIHdlIGhhdmUgdGhlIGhpZ2hlci1vcmRlciB1bml0c1xuICBpZiAoIWlzVW5kZWZpbmVkKG9iai55ZWFyKSkge1xuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChvYmpbdV0pKSB7XG4gICAgICAgIG9ialt1XSA9IGRlZmF1bHRVbml0VmFsdWVzW3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHx8IGhhc0ludmFsaWRUaW1lRGF0YShvYmopO1xuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXRQcm92aXMgPSB6b25lLm9mZnNldCh0c05vdyk7XG4gICAgW3RzLCBvXSA9IG9ialRvVFMob2JqLCBvZmZzZXRQcm92aXMsIHpvbmUpO1xuICB9IGVsc2Uge1xuICAgIHRzID0gdHNOb3c7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGVUaW1lKHsgdHMsIHpvbmUsIGxvYywgbyB9KTtcbn1cblxuZnVuY3Rpb24gZGlmZlJlbGF0aXZlKHN0YXJ0LCBlbmQsIG9wdHMpIHtcbiAgY29uc3Qgcm91bmQgPSBpc1VuZGVmaW5lZChvcHRzLnJvdW5kKSA/IHRydWUgOiBvcHRzLnJvdW5kLFxuICAgIGZvcm1hdCA9IChjLCB1bml0KSA9PiB7XG4gICAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGVuZC5sb2MuY2xvbmUob3B0cykucmVsRm9ybWF0dGVyKG9wdHMpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoYywgdW5pdCk7XG4gICAgfSxcbiAgICBkaWZmZXIgPSAodW5pdCkgPT4ge1xuICAgICAgaWYgKG9wdHMuY2FsZW5kYXJ5KSB7XG4gICAgICAgIGlmICghZW5kLmhhc1NhbWUoc3RhcnQsIHVuaXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGVuZC5zdGFydE9mKHVuaXQpLmRpZmYoc3RhcnQuc3RhcnRPZih1bml0KSwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsIHVuaXQpLmdldCh1bml0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGlmIChvcHRzLnVuaXQpIHtcbiAgICByZXR1cm4gZm9ybWF0KGRpZmZlcihvcHRzLnVuaXQpLCBvcHRzLnVuaXQpO1xuICB9XG5cbiAgZm9yIChjb25zdCB1bml0IG9mIG9wdHMudW5pdHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGRpZmZlcih1bml0KTtcbiAgICBpZiAoTWF0aC5hYnMoY291bnQpID49IDEpIHtcbiAgICAgIHJldHVybiBmb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHN0YXJ0ID4gZW5kID8gLTAgOiAwLCBvcHRzLnVuaXRzW29wdHMudW5pdHMubGVuZ3RoIC0gMV0pO1xufVxuXG5mdW5jdGlvbiBsYXN0T3B0cyhhcmdMaXN0KSB7XG4gIGxldCBvcHRzID0ge30sXG4gICAgYXJncztcbiAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSBcIm9iamVjdFwiKSB7XG4gICAgb3B0cyA9IGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXTtcbiAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpO1xuICB9XG4gIHJldHVybiBbb3B0cywgYXJnc107XG59XG5cbi8qKlxuICogQSBEYXRlVGltZSBpcyBhbiBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZGF0ZSBhbmQgdGltZSBhbmQgYWNjb21wYW55aW5nIG1ldGhvZHMuIEl0IGNvbnRhaW5zIGNsYXNzIGFuZCBpbnN0YW5jZSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLlxuICpcbiAqIEEgRGF0ZVRpbWUgY29tcHJpc2VzIG9mOlxuICogKiBBIHRpbWVzdGFtcC4gRWFjaCBEYXRlVGltZSBpbnN0YW5jZSByZWZlcnMgdG8gYSBzcGVjaWZpYyBtaWxsaXNlY29uZCBvZiB0aGUgVW5peCBlcG9jaC5cbiAqICogQSB0aW1lIHpvbmUuIEVhY2ggaW5zdGFuY2UgaXMgY29uc2lkZXJlZCBpbiB0aGUgY29udGV4dCBvZiBhIHNwZWNpZmljIHpvbmUgKGJ5IGRlZmF1bHQgdGhlIGxvY2FsIHN5c3RlbSdzIHpvbmUpLlxuICogKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdGhhdCBlZmZlY3QgaG93IG91dHB1dCBzdHJpbmdzIGFyZSBmb3JtYXR0ZWQsIHN1Y2ggYXMgYGxvY2FsZWAsIGBudW1iZXJpbmdTeXN0ZW1gLCBhbmQgYG91dHB1dENhbGVuZGFyYC5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzOlxuICpcbiAqICogKipDcmVhdGlvbioqOiBUbyBjcmVhdGUgYSBEYXRlVGltZSBmcm9tIGl0cyBjb21wb25lbnRzLCB1c2Ugb25lIG9mIGl0cyBmYWN0b3J5IGNsYXNzIG1ldGhvZHM6IHtAbGluayBEYXRlVGltZSNsb2NhbH0sIHtAbGluayBEYXRlVGltZSN1dGN9LCBhbmQgKG1vc3QgZmxleGlibHkpIHtAbGluayBEYXRlVGltZSNmcm9tT2JqZWN0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSVNPfSwge0BsaW5rIERhdGVUaW1lI2Zyb21IVFRQfSwgYW5kIHtAbGluayBEYXRlVGltZSNmcm9tUkZDMjgyMn0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIGN1c3RvbSBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21Gb3JtYXR9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBuYXRpdmUgSlMgZGF0ZSwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSlNEYXRlfS5cbiAqICogKipHcmVnb3JpYW4gY2FsZW5kYXIgYW5kIHRpbWUqKjogVG8gZXhhbWluZSB0aGUgR3JlZ29yaWFuIHByb3BlcnRpZXMgb2YgYSBEYXRlVGltZSBpbmRpdmlkdWFsbHkgKGkuZSBhcyBvcHBvc2VkIHRvIGNvbGxlY3RpdmVseSB0aHJvdWdoIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0pLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN5ZWFyfSwge0BsaW5rIERhdGVUaW1lI21vbnRofSxcbiAqIHtAbGluayBEYXRlVGltZSNkYXl9LCB7QGxpbmsgRGF0ZVRpbWUjaG91cn0sIHtAbGluayBEYXRlVGltZSNtaW51dGV9LCB7QGxpbmsgRGF0ZVRpbWUjc2Vjb25kfSwge0BsaW5rIERhdGVUaW1lI21pbGxpc2Vjb25kfSBhY2Nlc3NvcnMuXG4gKiAqICoqV2VlayBjYWxlbmRhcioqOiBGb3IgSVNPIHdlZWsgY2FsZW5kYXIgYXR0cmlidXRlcywgc2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjd2Vla1llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjd2Vla051bWJlcn0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjd2Vla2RheX0gYWNjZXNzb3JzLlxuICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgdGhlIHtAbGluayBEYXRlVGltZSNsb2NhbGV9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKjogVG8gdHJhbnNmb3JtIHRoZSBEYXRlVGltZSBpbnRvIG90aGVyIERhdGVUaW1lcywgdXNlIHtAbGluayBEYXRlVGltZSNzZXR9LCB7QGxpbmsgRGF0ZVRpbWUjcmVjb25maWd1cmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0sIHtAbGluayBEYXRlVGltZSNzZXRMb2NhbGV9LCB7QGxpbmsgRGF0ZVRpbWUucGx1c30sIHtAbGluayBEYXRlVGltZSNtaW51c30sIHtAbGluayBEYXRlVGltZSNlbmRPZn0sIHtAbGluayBEYXRlVGltZSNzdGFydE9mfSwge0BsaW5rIERhdGVUaW1lI3RvVVRDfSwgYW5kIHtAbGluayBEYXRlVGltZSN0b0xvY2FsfS5cbiAqICogKipPdXRwdXQqKjogVG8gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlfSwge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmVDYWxlbmRhcn0sIHtAbGluayBEYXRlVGltZSN0b0pTT059LCB7QGxpbmsgRGF0ZVRpbWUjdG9JU099LCB7QGxpbmsgRGF0ZVRpbWUjdG9IVFRQfSwge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSwge0BsaW5rIERhdGVUaW1lI3RvUkZDMjgyMn0sIHtAbGluayBEYXRlVGltZSN0b1N0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0sIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30gYW5kIHtAbGluayBEYXRlVGltZSN0b0pTRGF0ZX0uXG4gKlxuICogVGhlcmUncyBwbGVudHkgb3RoZXJzIGRvY3VtZW50ZWQgYmVsb3cuIEluIGFkZGl0aW9uLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdWJ0bGVyIHRvcGljcyBsaWtlIGludGVybmF0aW9uYWxpemF0aW9uLCB0aW1lIHpvbmVzLCBhbHRlcm5hdGl2ZSBjYWxlbmRhcnMsIHZhbGlkaXR5LCBhbmQgc28gb24sIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVRpbWUge1xuICAvKipcbiAgICogQGFjY2VzcyBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBjb25zdCB6b25lID0gY29uZmlnLnpvbmUgfHwgU2V0dGluZ3MuZGVmYXVsdFpvbmU7XG5cbiAgICBsZXQgaW52YWxpZCA9XG4gICAgICBjb25maWcuaW52YWxpZCB8fFxuICAgICAgKE51bWJlci5pc05hTihjb25maWcudHMpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbCkgfHxcbiAgICAgICghem9uZS5pc1ZhbGlkID8gdW5zdXBwb3J0ZWRab25lKHpvbmUpIDogbnVsbCk7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy50cyA9IGlzVW5kZWZpbmVkKGNvbmZpZy50cykgPyBTZXR0aW5ncy5ub3coKSA6IGNvbmZpZy50cztcblxuICAgIGxldCBjID0gbnVsbCxcbiAgICAgIG8gPSBudWxsO1xuICAgIGlmICghaW52YWxpZCkge1xuICAgICAgY29uc3QgdW5jaGFuZ2VkID0gY29uZmlnLm9sZCAmJiBjb25maWcub2xkLnRzID09PSB0aGlzLnRzICYmIGNvbmZpZy5vbGQuem9uZS5lcXVhbHMoem9uZSk7XG5cbiAgICAgIGlmICh1bmNoYW5nZWQpIHtcbiAgICAgICAgW2MsIG9dID0gW2NvbmZpZy5vbGQuYywgY29uZmlnLm9sZC5vXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG90ID0gem9uZS5vZmZzZXQodGhpcy50cyk7XG4gICAgICAgIGMgPSB0c1RvT2JqKHRoaXMudHMsIG90KTtcbiAgICAgICAgaW52YWxpZCA9IE51bWJlci5pc05hTihjLnllYXIpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbDtcbiAgICAgICAgYyA9IGludmFsaWQgPyBudWxsIDogYztcbiAgICAgICAgbyA9IGludmFsaWQgPyBudWxsIDogb3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fem9uZSA9IHpvbmU7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmludmFsaWQgPSBpbnZhbGlkO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMud2Vla0RhdGEgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYyA9IGM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5vID0gbztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzTHV4b25EYXRlVGltZSA9IHRydWU7XG4gIH1cblxuICAvLyBDT05TVFJVQ1RcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZm9yIHRoZSBjdXJyZW50IGluc3RhbnQsIGluIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqXG4gICAqIFVzZSBTZXR0aW5ncyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWVkZWQuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy9+PiBub3cgaW4gdGhlIElTTyBmb3JtYXRcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgbm93KCkge1xuICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvY2FsIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYGxvY2FsKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW51dGU9MF0gLSBUaGUgbWludXRlIG9mIHRoZSBob3VyLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmQ9MF0gLSBUaGUgc2Vjb25kIG9mIHRoZSBtaW51dGUsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCh7IHpvbmU6IFwiQW1lcmljYS9OZXdfWW9ya1wiIH0pICAgICAgLy9+PiBub3csIGluIFVTIGVhc3QgY29hc3QgdGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwLCB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgeyB6b25lOiBcInV0Y1wiIH0pICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwLCBpbiBVVENcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1KSAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTBcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1KSAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1XG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGxvY2FsKCkge1xuICAgIGNvbnN0IFtvcHRzLCBhcmdzXSA9IGxhc3RPcHRzKGFyZ3VtZW50cyksXG4gICAgICBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXSA9IGFyZ3M7XG4gICAgcmV0dXJuIHF1aWNrRFQoeyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgaW4gVVRDXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYHV0YygpYCB3aXRoIG5vIGFyZ3VtZW50cyksIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm91dHB1dENhbGVuZGFyXSAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm51bWJlcmluZ1N5c3RlbV0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vd1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDEtMDFUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgeyBsb2NhbGU6IFwiZnJcIiB9KSAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTAsIDc2NSwgeyBsb2NhbGU6IFwiZnJcIiB9KSAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1WiB3aXRoIGEgRnJlbmNoIGxvY2FsZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyB1dGMoKSB7XG4gICAgY29uc3QgW29wdHMsIGFyZ3NdID0gbGFzdE9wdHMoYXJndW1lbnRzKSxcbiAgICAgIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdID0gYXJncztcblxuICAgIG9wdHMuem9uZSA9IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZTtcbiAgICByZXR1cm4gcXVpY2tEVCh7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCB9LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdC4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBhIEphdmFTY3JpcHQgRGF0ZSBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUpTRGF0ZShkYXRlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0cyA9IGlzRGF0ZShkYXRlKSA/IGRhdGUudmFsdWVPZigpIDogTmFOO1xuICAgIGlmIChOdW1iZXIuaXNOYU4odHMpKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcImludmFsaWQgaW5wdXRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICB0czogdHMsXG4gICAgICB6b25lOiB6b25lVG9Vc2UsXG4gICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAobWVhbmluZyBzaW5jZSAxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbU1pbGxpcyhtaWxsaXNlY29uZHMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNOdW1iZXIobWlsbGlzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgZnJvbU1pbGxpcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCwgYnV0IHJlY2VpdmVkIGEgJHt0eXBlb2YgbWlsbGlzZWNvbmRzfSB3aXRoIHZhbHVlICR7bWlsbGlzZWNvbmRzfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtaWxsaXNlY29uZHMgPCAtTUFYX0RBVEUgfHwgbWlsbGlzZWNvbmRzID4gTUFYX0RBVEUpIHtcbiAgICAgIC8vIHRoaXMgaXNuJ3QgcGVyZmVjdCBiZWNhdXNlIGJlY2F1c2Ugd2UgY2FuIHN0aWxsIGVuZCB1cCBvdXQgb2YgcmFuZ2UgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIHNoaWZ0aW5nLCBidXQgaXQncyBhIHN0YXJ0XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcIlRpbWVzdGFtcCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogbWlsbGlzZWNvbmRzLFxuICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLFxuICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcyAtIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNlY29uZHMoc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiZnJvbVNlY29uZHMgcmVxdWlyZXMgYSBudW1lcmljYWwgaW5wdXRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogc2Vjb25kcyAqIDEwMDAsXG4gICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFyJyBhbmQgJ2hvdXInIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhciAtIGEgeWVhciwgc3VjaCBhcyAxOTg3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGggLSBhIG1vbnRoLCAxLTEyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5IC0gYSBkYXkgb2YgdGhlIG1vbnRoLCAxLTMxLCBkZXBlbmRpbmcgb24gdGhlIG1vbnRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoub3JkaW5hbCAtIGRheSBvZiB0aGUgeWVhciwgMS0zNjUgb3IgMzY2XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla1llYXIgLSBhbiBJU08gd2VlayB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla051bWJlciAtIGFuIElTTyB3ZWVrIG51bWJlciwgYmV0d2VlbiAxIGFuZCA1MiBvciA1MywgZGVwZW5kaW5nIG9uIHRoZSB5ZWFyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla2RheSAtIGFuIElTTyB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmhvdXIgLSBob3VyIG9mIHRoZSBkYXksIDAtMjNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGUgLSBtaW51dGUgb2YgdGhlIGhvdXIsIDAtNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmQgLSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgMC01OVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kIC0gbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgMC05OTlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBpbnRlcnByZXQgdGhlIG51bWJlcnMgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIHpvbmUuIENhbiB0YWtlIGFueSB2YWx1ZSB0YWtlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gc2V0Wm9uZSgpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyLCBtb250aDogNSwgZGF5OiAyNX0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDEtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0pIC8vfj4gdG9kYXkgYXQgMTA6MjY6MDZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAndXRjJyB9KSxcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnbG9jYWwnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB3ZWVrWWVhcjogMjAxNiwgd2Vla051bWJlcjogMiwgd2Vla2RheTogMyB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDE2LTAxLTEzJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tT2JqZWN0KG9iaiwgb3B0cyA9IHt9KSB7XG4gICAgb2JqID0gb2JqIHx8IHt9O1xuICAgIGNvbnN0IHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gICAgaWYgKCF6b25lVG9Vc2UuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRzTm93ID0gU2V0dGluZ3Mubm93KCksXG4gICAgICBvZmZzZXRQcm92aXMgPSAhaXNVbmRlZmluZWQob3B0cy5zcGVjaWZpY09mZnNldClcbiAgICAgICAgPyBvcHRzLnNwZWNpZmljT2Zmc2V0XG4gICAgICAgIDogem9uZVRvVXNlLm9mZnNldCh0c05vdyksXG4gICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KG9iaiwgbm9ybWFsaXplVW5pdCksXG4gICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLFxuICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLFxuICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCxcbiAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyLFxuICAgICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyk7XG5cbiAgICAvLyBjYXNlczpcbiAgICAvLyBqdXN0IGEgd2Vla2RheSAtPiB0aGlzIHdlZWsncyBpbnN0YW5jZSBvZiB0aGF0IHdlZWtkYXksIG5vIHdvcnJpZXNcbiAgICAvLyAoZ3JlZ29yaWFuIGRhdGEgb3Igb3JkaW5hbCkgKyAod2Vla1llYXIgb3Igd2Vla051bWJlcikgLT4gZXJyb3JcbiAgICAvLyAoZ3JlZ29yaWFuIG1vbnRoIG9yIGRheSkgKyBvcmRpbmFsIC0+IGVycm9yXG4gICAgLy8gb3RoZXJ3aXNlIGp1c3QgdXNlIHdlZWtzIG9yIG9yZGluYWxzIG9yIGdyZWdvcmlhbiwgZGVwZW5kaW5nIG9uIHdoYXQncyBzcGVjaWZpZWRcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VXZWVrRGF0YSA9IGRlZmluaXRlV2Vla0RlZiB8fCAobm9ybWFsaXplZC53ZWVrZGF5ICYmICFjb250YWluc0dyZWdvcik7XG5cbiAgICAvLyBjb25maWd1cmUgb3Vyc2VsdmVzIHRvIGRlYWwgd2l0aCBncmVnb3JpYW4gZGF0ZXMgb3Igd2VlayBzdHVmZlxuICAgIGxldCB1bml0cyxcbiAgICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgICBvYmpOb3cgPSB0c1RvT2JqKHRzTm93LCBvZmZzZXRQcm92aXMpO1xuICAgIGlmICh1c2VXZWVrRGF0YSkge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkV2Vla1VuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRXZWVrVW5pdFZhbHVlcztcbiAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvV2VlayhvYmpOb3cpO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRPcmRpbmFsVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzO1xuICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9PcmRpbmFsKG9iak5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZFVuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRVbml0VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZlxuICAgIGxldCBmb3VuZEZpcnN0ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB1IG9mIHVuaXRzKSB7XG4gICAgICBjb25zdCB2ID0gbm9ybWFsaXplZFt1XTtcbiAgICAgIGlmICghaXNVbmRlZmluZWQodikpIHtcbiAgICAgICAgZm91bmRGaXJzdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGZvdW5kRmlyc3QpIHtcbiAgICAgICAgbm9ybWFsaXplZFt1XSA9IGRlZmF1bHRWYWx1ZXNbdV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gb2JqTm93W3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIHdlIGhhdmUgYXJlIGluIHJhbmdlXG4gICAgY29uc3QgaGlnaGVyT3JkZXJJbnZhbGlkID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyBoYXNJbnZhbGlkV2Vla0RhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBoYXNJbnZhbGlkT3JkaW5hbERhdGEobm9ybWFsaXplZClcbiAgICAgICAgOiBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShub3JtYWxpemVkKSxcbiAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIC8vIGNvbXB1dGUgdGhlIGFjdHVhbCB0aW1lXG4gICAgY29uc3QgZ3JlZ29yaWFuID0gdXNlV2Vla0RhdGFcbiAgICAgICAgPyB3ZWVrVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBjb250YWluc09yZGluYWxcbiAgICAgICAgPyBvcmRpbmFsVG9HcmVnb3JpYW4obm9ybWFsaXplZClcbiAgICAgICAgOiBub3JtYWxpemVkLFxuICAgICAgW3RzRmluYWwsIG9mZnNldEZpbmFsXSA9IG9ialRvVFMoZ3JlZ29yaWFuLCBvZmZzZXRQcm92aXMsIHpvbmVUb1VzZSksXG4gICAgICBpbnN0ID0gbmV3IERhdGVUaW1lKHtcbiAgICAgICAgdHM6IHRzRmluYWwsXG4gICAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgICAgbzogb2Zmc2V0RmluYWwsXG4gICAgICAgIGxvYyxcbiAgICAgIH0pO1xuXG4gICAgLy8gZ3JlZ29yaWFuIGRhdGEgKyB3ZWVrZGF5IHNlcnZlcyBvbmx5IHRvIHZhbGlkYXRlXG4gICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcbiAgICAgICAgXCJtaXNtYXRjaGVkIHdlZWtkYXlcIixcbiAgICAgICAgYHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICR7bm9ybWFsaXplZC53ZWVrZGF5fSBhbmQgYSBkYXRlIG9mICR7aW5zdC50b0lTTygpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBJU08gODYwMSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMrMDY6MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcsIHtzZXRab25lOiB0cnVlfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnLCB7em9uZTogJ3V0Yyd9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LVcwNS00JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUlTT0RhdGUodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJJU08gODYwMVwiLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIFJGQyAyODIyIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBSRkMgMjgyMiBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSB0aGUgb2Zmc2V0IGlzIGFsd2F5cyBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGUgaW50ZXJwcmV0YXRpb24gb2Ygc3RyaW5nLCBtZXJlbHkgdGhlIHpvbmUgdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpcyBleHByZXNzZWQgaW4uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMzoxMiBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tUkZDMjgyMignRnJpLCAyNSBOb3YgMjAxNiAxMzoyMzoxMiArMDYwMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMyBaJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJGQzI4MjIodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VSRkMyODIyRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIlJGQyAyODIyXCIsIHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gSFRUUCBoZWFkZXIgZGF0ZVxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZS4gU2luY2UgSFRUUCBkYXRlcyBhcmUgYWx3YXlzIGluIFVUQywgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggdGhlIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nLiBGb3IgSFRUUCBkYXRlcywgdGhpcyBpcyBhbHdheXMgVVRDLCBzbyB0aGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGB6b25lYCBvcHRpb24gdG8gJ3V0YycsIGJ1dCB0aGlzIG9wdGlvbiBpcyBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCBzaW1pbGFyIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4sIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSFRUUCgnU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUhUVFAodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VIVFRQRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIkhUVFBcIiwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBpbnB1dCBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmcuXG4gICAqIERlZmF1bHRzIHRvIGVuLVVTIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSdzIGxvY2FsZS4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvcGFyc2luZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIHRoZSBsaW5rIGJlbG93IGZvciB0aGUgZm9ybWF0cylcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIHVzZSB0aGlzIHpvbmUgaWYgbm8gb2Zmc2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgaW5wdXQgc3RyaW5nIGl0c2VsZi4gV2lsbCBhbHNvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIHRoaXMgem9uZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSBhIGxvY2FsZSBzdHJpbmcgdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIHRvIHRoaXMgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0ZXh0KSB8fCBpc1VuZGVmaW5lZChmbXQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRzLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KSxcbiAgICAgIFt2YWxzLCBwYXJzZWRab25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZF0gPSBwYXJzZUZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBgZm9ybWF0ICR7Zm10fWAsIHRleHQsIHNwZWNpZmljT2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXQgaW5zdGVhZFxuICAgKi9cbiAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgZm10LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBTUUwgZGF0ZSwgdGltZSwgb3IgZGF0ZXRpbWVcbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIrMDY6MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIgQW1lcmljYS9Mb3NfQW5nZWxlcycsIHsgc2V0Wm9uZTogdHJ1ZSB9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MicsIHsgem9uZTogJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzA5OjEyOjM0LjM0MicpXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGZyb21TUUwodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VTUUwodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJTUUxcIiwgdGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIERhdGVUaW1lIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pO1xuXG4gICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZERhdGVUaW1lRXJyb3IoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoeyBpbnZhbGlkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVRpbWUuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0RhdGVUaW1lKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRGF0ZVRpbWUpIHx8IGZhbHNlO1xuICB9XG5cbiAgLy8gSU5GT1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZScgb3IgJ2RheSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdtb250aCcpOyAvLz0+IDdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdkYXknKTsgLy89PiA0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXNbdW5pdF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyB2YWxpZC4gSW52YWxpZCBEYXRlVGltZXMgb2NjdXIgd2hlbjpcbiAgICogKiBUaGUgRGF0ZVRpbWUgd2FzIGNyZWF0ZWQgZnJvbSBpbnZhbGlkIGNhbGVuZGFyIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSAxM3RoIG1vbnRoIG9yIEZlYnJ1YXJ5IDMwXG4gICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGJ5IGFuIG9wZXJhdGlvbiBvbiBhbm90aGVyIGludmFsaWQgZGF0ZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIERhdGVUaW1lIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvY2FsZSBvZiBhIERhdGVUaW1lLCBzdWNoICdlbi1HQicuIFRoZSBsb2NhbGUgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyaW5nIHN5c3RlbSBvZiBhIERhdGVUaW1lLCBzdWNoICdiZW5nJy4gVGhlIG51bWJlcmluZyBzeXN0ZW0gaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3V0cHV0IGNhbGVuZGFyIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2lzbGFtaWMnLiBUaGUgb3V0cHV0IGNhbGVuZGFyIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0aW1lIHpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEB0eXBlIHtab25lfVxuICAgKi9cbiAgZ2V0IHpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3pvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0aW1lIHpvbmUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgem9uZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5uYW1lIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHllYXJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnllYXIgLy89PiAyMDE3XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgeWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnllYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBxdWFydGVyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5xdWFydGVyIC8vPT4gMlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHF1YXJ0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguY2VpbCh0aGlzLmMubW9udGggLyAzKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1vbnRoICgxLTEyKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm1vbnRoIC8vPT4gNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1vbnRoKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubW9udGggOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoICgxLTMwaXNoKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLmRheSAvLz0+IDI1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuZGF5IDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaG91ciBvZiB0aGUgZGF5ICgwLTIzKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDkpLmhvdXIgLy89PiA5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaG91cigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmhvdXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaW51dGUgb2YgdGhlIGhvdXIgKDAtNTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzApLm1pbnV0ZSAvLz0+IDMwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWludXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWludXRlIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgKDAtNTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzAsIDUyKS5zZWNvbmQgLy89PiA1MlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHNlY29uZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnNlY29uZCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQgKDAtOTk5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1MiwgNjU0KS5taWxsaXNlY29uZCAvLz0+IDY1NFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbGxpc2Vjb25kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWlsbGlzZWNvbmQgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIHllYXJcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDEyLCAzMSkud2Vla1llYXIgLy89PiAyMDE1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla1llYXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3ZWVrIG51bWJlciBvZiB0aGUgd2VlayB5ZWFyICgxLTUyaXNoKS5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS53ZWVrTnVtYmVyIC8vPT4gMjFcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrTnVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtOdW1iZXIgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuXG4gICAqIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTEsIDMxKS53ZWVrZGF5IC8vPT4gNFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla2RheSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yZGluYWwgKG1lYW5pbmcgdGhlIGRheSBvZiB0aGUgeWVhcilcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm9yZGluYWwgLy89PiAxNDVcbiAgICogQHR5cGUge251bWJlcnxEYXRlVGltZX1cbiAgICovXG4gIGdldCBvcmRpbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKS5vcmRpbmFsIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgc2hvcnQgbW9udGggbmFtZSwgc3VjaCBhcyAnT2N0Jy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhTaG9ydCAvLz0+IE9jdFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG1vbnRoU2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ubW9udGhzKFwic2hvcnRcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdG9iZXInLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aExvbmcgLy89PiBPY3RvYmVyXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbW9udGhMb25nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLm1vbnRocyhcImxvbmdcIiwgeyBsb2NPYmo6IHRoaXMubG9jIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBzaG9ydCB3ZWVrZGF5LCBzdWNoIGFzICdNb24nLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5U2hvcnQgLy89PiBNb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB3ZWVrZGF5U2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoXCJzaG9ydFwiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgbG9uZyB3ZWVrZGF5LCBzdWNoIGFzICdNb25kYXknLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5TG9uZyAvLz0+IE1vbmRheVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXlMb25nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLndlZWtkYXlzKFwibG9uZ1wiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgVVRDIG9mZnNldCBvZiB0aGlzIERhdGVUaW1lIGluIG1pbnV0ZXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkub2Zmc2V0IC8vPT4gLTI0MFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5vZmZzZXQgLy89PiAwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgb2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyArdGhpcy5vIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2hvcnQgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgXCJFU1RcIiBvciBcIkVEVFwiLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBvZmZzZXROYW1lU2hvcnQoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHtcbiAgICAgICAgZm9ybWF0OiBcInNob3J0XCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZyBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSBcIkVhc3Rlcm4gU3RhbmRhcmQgVGltZVwiIG9yIFwiRWFzdGVybiBEYXlsaWdodCBUaW1lXCIuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG9mZnNldE5hbWVMb25nKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLCB7XG4gICAgICAgIGZvcm1hdDogXCJsb25nXCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoaXMgem9uZSdzIG9mZnNldCBldmVyIGNoYW5nZXMsIGFzIGluIGEgRFNULlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc09mZnNldEZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnpvbmUuaXNVbml2ZXJzYWwgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyBpbiBhIERTVC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNJbkRTVCgpIHtcbiAgICBpZiAodGhpcy5pc09mZnNldEZpeGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoeyBtb250aDogMSwgZGF5OiAxIH0pLm9mZnNldCB8fFxuICAgICAgICB0aGlzLm9mZnNldCA+IHRoaXMuc2V0KHsgbW9udGg6IDUgfSkub2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbiBhIGxlYXAgeWVhciwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmlzSW5MZWFwWWVhciAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuaXNJbkxlYXBZZWFyIC8vPT4gZmFsc2VcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNJbkxlYXBZZWFyKCkge1xuICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBEYXRlVGltZSdzIG1vbnRoXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDIpLmRheXNJbk1vbnRoIC8vPT4gMjlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMykuZGF5c0luTW9udGggLy89PiAzMVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXNJbk1vbnRoKCkge1xuICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIsIHRoaXMubW9udGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmRheXNJblllYXIgLy89PiAzNjZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuZGF5c0luWWVhciAvLz0+IDM2NVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGRheXNJblllYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGRheXNJblllYXIodGhpcy55ZWFyKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2Vla3MgaW4gdGhpcyBEYXRlVGltZSdzIHllYXJcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMDQpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUyXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla3NJbldlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB3ZWVrc0luV2Vla1llYXIodGhpcy53ZWVrWWVhcikgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgSW50bCBvcHRpb25zIGZvciB0aGlzIERhdGVUaW1lLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSB0aGUgc2FtZSBvcHRpb25zIGFzIHRvTG9jYWxlU3RyaW5nXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHJlc29sdmVkTG9jYWxlT3B0aW9ucyhvcHRzID0ge30pIHtcbiAgICBjb25zdCB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhciB9ID0gRm9ybWF0dGVyLmNyZWF0ZShcbiAgICAgIHRoaXMubG9jLmNsb25lKG9wdHMpLFxuICAgICAgb3B0c1xuICAgICkucmVzb2x2ZWRPcHRpb25zKHRoaXMpO1xuICAgIHJldHVybiB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcjogY2FsZW5kYXIgfTtcbiAgfVxuXG4gIC8vIFRSQU5TRk9STVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gVVRDLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8ge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9KCd1dGMnKVxuICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXSAtIG9wdGlvbmFsbHksIGFuIG9mZnNldCBmcm9tIFVUQyBpbiBtaW51dGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz17fV0gLSBvcHRpb25zIHRvIHBhc3MgdG8gYHNldFpvbmUoKWBcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICB0b1VUQyhvZmZzZXQgPSAwLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShvZmZzZXQpLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gdGhlIGhvc3QncyBsb2NhbCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gYHNldFpvbmUoJ2xvY2FsJylgXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgdG9Mb2NhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRab25lKFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gc3BlY2lmaWVkIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIHNldHRlciBrZWVwcyB0aGUgdW5kZXJseWluZyB0aW1lIHRoZSBzYW1lIChhcyBpbiwgdGhlIHNhbWUgdGltZXN0YW1wKSwgYnV0IHRoZSBuZXcgaW5zdGFuY2Ugd2lsbCByZXBvcnQgZGlmZmVyZW50IGxvY2FsIHRpbWVzIGFuZCBjb25zaWRlciBEU1RzIHdoZW4gbWFraW5nIGNvbXB1dGF0aW9ucywgYXMgd2l0aCB7QGxpbmsgRGF0ZVRpbWUjcGx1c30uIFlvdSBtYXkgd2lzaCB0byB1c2Uge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9IHdoaWNoIHByb3ZpZGUgc2ltcGxlIGNvbnZlbmllbmNlIHdyYXBwZXJzIGZvciBjb21tb25seSB1c2VkIHpvbmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbem9uZT0nbG9jYWwnXSAtIGEgem9uZSBpZGVudGlmaWVyLiBBcyBhIHN0cmluZywgdGhhdCBjYW4gYmUgYW55IElBTkEgem9uZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgZW52aXJvbm1lbnQsIG9yIGEgZml4ZWQtb2Zmc2V0IG5hbWUgb2YgdGhlIGZvcm0gJ1VUQyszJywgb3IgdGhlIHN0cmluZ3MgJ2xvY2FsJyBvciAndXRjJy4gWW91IG1heSBhbHNvIHN1cHBseSBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBEYXRlVGltZSNab25lfSBjbGFzcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMua2VlcExvY2FsVGltZT1mYWxzZV0gLSBJZiB0cnVlLCBhZGp1c3QgdGhlIHVuZGVybHlpbmcgdGltZSBzbyB0aGF0IHRoZSBsb2NhbCB0aW1lIHN0YXlzIHRoZSBzYW1lLCBidXQgaW4gdGhlIHRhcmdldCB6b25lLiBZb3Ugc2hvdWxkIHJhcmVseSBuZWVkIHRoaXMuXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWUgPSBmYWxzZSwga2VlcENhbGVuZGFyVGltZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHpvbmUgPSBub3JtYWxpemVab25lKHpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoem9uZS5lcXVhbHModGhpcy56b25lKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmICghem9uZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV3VFMgPSB0aGlzLnRzO1xuICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRHdWVzcyA9IHpvbmUub2Zmc2V0KHRoaXMudHMpO1xuICAgICAgICBjb25zdCBhc09iaiA9IHRoaXMudG9PYmplY3QoKTtcbiAgICAgICAgW25ld1RTXSA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzOiBuZXdUUywgem9uZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IGxvYyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICogSnVzdCBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIHJlY29uZmlndXJlKHsgbG9jYWxlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5zZXRMb2NhbGUoJ2VuLUdCJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjb25maWd1cmUoeyBsb2NhbGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciBcInNldHRpbmdcIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZSNzZXRab25lfS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIGEgbWFwcGluZyBvZiB1bml0cyB0byBudW1iZXJzXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgaG91cjogOCwgbWludXRlOiAzMCB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB3ZWVrZGF5OiA1IH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMDUsIG9yZGluYWw6IDIzNCB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KHZhbHVlcywgbm9ybWFsaXplVW5pdCksXG4gICAgICBzZXR0aW5nV2Vla1N0dWZmID1cbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8XG4gICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLFxuICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksXG4gICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsXG4gICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlcjtcblxuICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWl4ZWQ7XG4gICAgaWYgKHNldHRpbmdXZWVrU3R1ZmYpIHtcbiAgICAgIG1peGVkID0gd2Vla1RvR3JlZ29yaWFuKHsgLi4uZ3JlZ29yaWFuVG9XZWVrKHRoaXMuYyksIC4uLm5vcm1hbGl6ZWQgfSk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSkge1xuICAgICAgbWl4ZWQgPSBvcmRpbmFsVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWl4ZWQgPSB7IC4uLnRoaXMudG9PYmplY3QoKSwgLi4ubm9ybWFsaXplZCB9O1xuXG4gICAgICAvLyBpZiB3ZSBkaWRuJ3Qgc2V0IHRoZSBkYXkgYnV0IHdlIGVuZGVkIHVwIG9uIGFuIG92ZXJmbG93IGRhdGUsXG4gICAgICAvLyB1c2UgdGhlIGxhc3QgZGF5IG9mIHRoZSByaWdodCBtb250aFxuICAgICAgaWYgKGlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSkge1xuICAgICAgICBtaXhlZC5kYXkgPSBNYXRoLm1pbihkYXlzSW5Nb250aChtaXhlZC55ZWFyLCBtaXhlZC5tb250aCksIG1peGVkLmRheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW3RzLCBvXSA9IG9ialRvVFMobWl4ZWQsIHRoaXMubywgdGhpcy56b25lKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB0cywgbyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZVxuICAgKlxuICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cygxMjMpIC8vfj4gaW4gMTIzIG1pbGxpc2Vjb25kc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pIC8vfj4gdGhpcyB0aW1lIHRvbW9ycm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAtMSB9KSAvL34+IHRoaXMgdGltZSB5ZXN0ZXJkYXlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pblxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMywgbWludXRlczogMTMgfSkpIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJ0cmFjdCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c31cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpXG4gICBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIG1pbnVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLm5lZ2F0ZSgpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdW5pdCBvZiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ21vbnRoJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3llYXInKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMS0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignd2VlaycpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAzJywgd2Vla3MgYWx3YXlzIHN0YXJ0IG9uIE1vbmRheXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2RheScpLnRvSVNPVGltZSgpOyAvLz0+ICcwMDowMC4wMDAtMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdob3VyJykudG9JU09UaW1lKCk7IC8vPT4gJzA1OjAwOjAwLjAwMC0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGFydE9mKHVuaXQpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgbyA9IHt9LFxuICAgICAgbm9ybWFsaXplZFVuaXQgPSBEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpO1xuICAgIHN3aXRjaCAobm9ybWFsaXplZFVuaXQpIHtcbiAgICAgIGNhc2UgXCJ5ZWFyc1wiOlxuICAgICAgICBvLm1vbnRoID0gMTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJxdWFydGVyc1wiOlxuICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICBvLmRheSA9IDE7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwid2Vla3NcIjpcbiAgICAgIGNhc2UgXCJkYXlzXCI6XG4gICAgICAgIG8uaG91ciA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwiaG91cnNcIjpcbiAgICAgICAgby5taW51dGUgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgby5zZWNvbmQgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgby5taWxsaXNlY29uZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kc1wiOlxuICAgICAgICBicmVhaztcbiAgICAgIC8vIG5vIGRlZmF1bHQsIGludmFsaWQgdW5pdHMgdGhyb3cgaW4gbm9ybWFsaXplVW5pdCgpXG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcIndlZWtzXCIpIHtcbiAgICAgIG8ud2Vla2RheSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSBcInF1YXJ0ZXJzXCIpIHtcbiAgICAgIGNvbnN0IHEgPSBNYXRoLmNlaWwodGhpcy5tb250aCAvIDMpO1xuICAgICAgby5tb250aCA9IChxIC0gMSkgKiAzICsgMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXQobyk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGlzIERhdGVUaW1lIHRvIHRoZSBlbmQgKG1lYW5pbmcgdGhlIGxhc3QgbWlsbGlzZWNvbmQpIG9mIGEgdW5pdCBvZiB0aW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gVGhlIHVuaXQgdG8gZ28gdG8gdGhlIGVuZCBvZi4gQ2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgb3IgJ21pbGxpc2Vjb25kJy5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ21vbnRoJykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0zMVQyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd5ZWFyJykudG9JU08oKTsgLy89PiAnMjAxNC0xMi0zMVQyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd3ZWVrJykudG9JU08oKTsgLy8gPT4gJzIwMTQtMDMtMDlUMjM6NTk6NTkuOTk5LTA1OjAwJywgd2Vla3Mgc3RhcnQgb24gTW9uZGF5c1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2RheScpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMjM6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2hvdXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTAzVDA1OjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBlbmRPZih1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyB0aGlzLnBsdXMoeyBbdW5pdF06IDEgfSlcbiAgICAgICAgICAuc3RhcnRPZih1bml0KVxuICAgICAgICAgIC5taW51cygxKVxuICAgICAgOiB0aGlzO1xuICB9XG5cbiAgLy8gT1VUUFVUXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy5cbiAgICogKipZb3UgbWF5IG5vdCB3YW50IHRoaXMuKiogU2VlIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9yIGEgbW9yZSBmbGV4aWJsZSBmb3JtYXR0aW5nIHRvb2wuIEZvciBhIHRhYmxlIG9mIHRva2VucyBhbmQgdGhlaXIgaW50ZXJwcmV0YXRpb25zLCBzZWUgW2hlcmVdKGh0dHBzOi8vbW9tZW50LmdpdGh1Yi5pby9sdXhvbi8jL2Zvcm1hdHRpbmc/aWQ9dGFibGUtb2YtdG9rZW5zKS5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCBzdHJpbmdcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnKSAvLz0+ICcyMDE3IEFwciAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKCdmcicpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJywgeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+ICcyMDE3IGF2ci4gMjInXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KFwiSEggJ2hvdXJzIGFuZCcgbW0gJ21pbnV0ZXMnXCIpIC8vPT4gJzIwIGhvdXJzIGFuZCA1NSBtaW51dGVzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0Zvcm1hdChmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5yZWRlZmF1bHRUb0VOKG9wdHMpKS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcodGhpcywgZm10KVxuICAgICAgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2NhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIGRhdGUuIEFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhcyB0aGUgSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBhbmQgYW55IHByZXNldHMgZGVmaW5lZCBieSBMdXhvbiwgc3VjaCBhcyBgRGF0ZVRpbWUuREFURV9GVUxMYCBvciBgRGF0ZVRpbWUuVElNRV9TSU1QTEVgLlxuICAgKiBUaGUgZXhhY3QgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2QgaXMgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGluIGdlbmVyYWwgaXQgd2lsbCByZXR1cm4gYW4gYXBwcm9wcmlhdGUgcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIERhdGVUaW1lIGluIHRoZSBhc3NpZ25lZCBsb2NhbGUuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0XG4gICAqIEBwYXJhbSBmb3JtYXRPcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZygpOyAvLz0+IDQvMjAvMjAxN1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2VuLWdiJykudG9Mb2NhbGVTdHJpbmcoKTsgLy89PiAnMjAvMDQvMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyBsb2NhbGU6ICdlbi1nYicgfSk7IC8vPT4gJzIwLzA0LzIwMTcnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfRlVMTCk7IC8vPT4gJ0FwcmlsIDIwLCAyMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5USU1FX1NJTVBMRSk7IC8vPT4gJzExOjMyIEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFVElNRV9TSE9SVCk7IC8vPT4gJzQvMjAvMjAxNywgMTE6MzIgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ2xvbmcnLCBtb250aDogJ2xvbmcnLCBkYXk6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1cnNkYXksIEFwcmlsIDIwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdzaG9ydCcsIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICcyLWRpZ2l0JywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1LCBBcHIgMjAsIDExOjI3IEFNJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXJDeWNsZTogJ2gyMycgfSk7IC8vPT4gJzExOjMyJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0xvY2FsZVN0cmluZyhmb3JtYXRPcHRzID0gRm9ybWF0cy5EQVRFX1NIT1JULCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIGZvcm1hdE9wdHMpLmZvcm1hdERhdGVUaW1lKHRoaXMpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBmb3JtYXQgXCJwYXJ0c1wiLCBtZWFuaW5nIGluZGl2aWR1YWwgdG9rZW5zIGFsb25nIHdpdGggbWV0YWRhdGEuIFRoaXMgaXMgYWxsb3dzIGNhbGxlcnMgdG8gcG9zdC1wcm9jZXNzIGluZGl2aWR1YWwgc2VjdGlvbnMgb2YgdGhlIGZvcm1hdHRlZCBvdXRwdXQuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0L2Zvcm1hdFRvUGFydHNcbiAgICogQHBhcmFtIG9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMsIHNhbWUgYXMgYHRvTG9jYWxlU3RyaW5nYC5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVQYXJ0cygpOyAvLz0+IFtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdkYXknLCB2YWx1ZTogJzI1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbW9udGgnLCB2YWx1ZTogJzA1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAneWVhcicsIHZhbHVlOiAnMTk4MicgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiBdXG4gICAqL1xuICB0b0xvY2FsZVBhcnRzKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgb3B0cykuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKVxuICAgICAgOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MywgNSwgMjUpLnRvSVNPKCkgLy89PiAnMTk4Mi0wNS0yNVQwMDowMDowMC4wMDBaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTygpIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1LTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcyMDE3MDQyMlQyMDQ3MDUuMzM1LTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPKHtcbiAgICBmb3JtYXQgPSBcImV4dGVuZGVkXCIsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSxcbiAgICBpbmNsdWRlT2Zmc2V0ID0gdHJ1ZSxcbiAgICBleHRlbmRlZFpvbmUgPSBmYWxzZSxcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dCA9IGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiO1xuXG4gICAgbGV0IGMgPSB0b0lTT0RhdGUodGhpcywgZXh0KTtcbiAgICBjICs9IFwiVFwiO1xuICAgIGMgKz0gdG9JU09UaW1lKHRoaXMsIGV4dCwgc3VwcHJlc3NTZWNvbmRzLCBzdXBwcmVzc01pbGxpc2Vjb25kcywgaW5jbHVkZU9mZnNldCwgZXh0ZW5kZWRab25lKTtcbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIGRhdGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDE5ODIsIDUsIDI1KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTA1LTI1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxOTgyMDUyNSdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09EYXRlKHsgZm9ybWF0ID0gXCJleHRlbmRlZFwiIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHdlZWsgZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPV2Vla0RhdGUoKSAvLz0+ICcxOTgyLVcyMS0yJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1dlZWtEYXRlKCkge1xuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgXCJra2trLSdXJ1dXLWNcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyB0aW1lIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSgpIC8vPT4gJzA3OjM0OjE5LjM2MVonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQsIHNlY29uZHM6IDAsIG1pbGxpc2Vjb25kczogMCB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMDc6MzRaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcwNzM0MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QwNzozNDoxOS4zNjFaJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1RpbWUoe1xuICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgaW5jbHVkZU9mZnNldCA9IHRydWUsXG4gICAgaW5jbHVkZVByZWZpeCA9IGZhbHNlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIixcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBjID0gaW5jbHVkZVByZWZpeCA/IFwiVFwiIDogXCJcIjtcbiAgICByZXR1cm4gKFxuICAgICAgYyArXG4gICAgICB0b0lTT1RpbWUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiLFxuICAgICAgICBzdXBwcmVzc1NlY29uZHMsXG4gICAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzLFxuICAgICAgICBpbmNsdWRlT2Zmc2V0LFxuICAgICAgICBleHRlbmRlZFpvbmVcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gUkZDIDI4MjItY29tcGF0aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgKzAwMDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1JGQzI4MjIoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIC0wNDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1JGQzI4MjIoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgWlpaXCIsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBIVFRQIGhlYWRlcnMuIFRoZSBvdXRwdXQgaXMgYWx3YXlzIGV4cHJlc3NlZCBpbiBHTVQuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHN0cmluZyBjb25mb3JtcyB0byBSRkMgMTEyMy5cbiAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMzLmh0bWwjc2VjMy4zLjFcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIEdNVCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzLCAxOSkudG9IVFRQKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAxOTowMDowMCBHTVQnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSFRUUCgpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMudG9VVEMoKSwgXCJFRUUsIGRkIExMTCB5eXl5IEhIOm1tOnNzICdHTVQnXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9TUUxEYXRlKCkgLy89PiAnMjAxNC0wNy0xMydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUxEYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRvSVNPRGF0ZSh0aGlzLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoKSAvLz0+ICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoeyBpbmNsdWRlWm9uZTogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1IEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU1FMVGltZSh7IGluY2x1ZGVPZmZzZXQgPSB0cnVlLCBpbmNsdWRlWm9uZSA9IGZhbHNlLCBpbmNsdWRlT2Zmc2V0U3BhY2UgPSB0cnVlIH0gPSB7fSkge1xuICAgIGxldCBmbXQgPSBcIkhIOm1tOnNzLlNTU1wiO1xuXG4gICAgaWYgKGluY2x1ZGVab25lIHx8IGluY2x1ZGVPZmZzZXQpIHtcbiAgICAgIGlmIChpbmNsdWRlT2Zmc2V0U3BhY2UpIHtcbiAgICAgICAgZm10ICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVab25lKSB7XG4gICAgICAgIGZtdCArPSBcInpcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgICAgICBmbXQgKz0gXCJaWlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgZm10LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVpvbmU9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgem9uZSwgc3VjaCBhcyAnQW1lcmljYS9OZXdfWW9yaycuIE92ZXJyaWRlcyBpbmNsdWRlT2Zmc2V0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldFNwYWNlPXRydWVdIC0gaW5jbHVkZSB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgdGltZSBhbmQgdGhlIG9mZnNldCwgc3VjaCBhcyAnMDU6MTU6MTYuMzQ1IC0wNDowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIC0wNDowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCh7IGluY2x1ZGVab25lOiB0cnVlIH0pIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU1FMKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy50b1NRTERhdGUoKX0gJHt0aGlzLnRvU1FMVGltZShvcHRzKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvSVNPKCkgOiBJTlZBTElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLiBBbGlhcyBvZiB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBtaWxsaXNlY29uZHMgb2YgdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdG9NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1NlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIHNlY29uZHMgKGFzIGEgd2hvbGUgbnVtYmVyKSBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b1VuaXhJbnRlZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgdG9CU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvSlNEYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEYXRlVGltZSdzIHllYXIsIG1vbnRoLCBkYXksIGFuZCBzbyBvbi5cbiAgICogQHBhcmFtIG9wdHMgLSBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlQ29uZmlnPWZhbHNlXSAtIGluY2x1ZGUgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzIGluIHRoZSBvdXRwdXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9PYmplY3QoKSAvLz0+IHsgeWVhcjogMjAxNywgbW9udGg6IDQsIGRheTogMjIsIGhvdXI6IDIwLCBtaW51dGU6IDQ5LCBzZWNvbmQ6IDQyLCBtaWxsaXNlY29uZDogMjY4IH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3Qob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGJhc2UgPSB7IC4uLnRoaXMuYyB9O1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykge1xuICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7XG4gICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTtcbiAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBEYXRlIGVxdWl2YWxlbnQgdG8gdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7RGF0ZX1cbiAgICovXG4gIHRvSlNEYXRlKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIDogTmFOKTtcbiAgfVxuXG4gIC8vIENPTVBBUkVcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIERhdGVUaW1lcyBhcyBhIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIERhdGVUaW1lIHRvIGNvbXBhcmUgdGhpcyBvbmUgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGkxID0gRGF0ZVRpbWUuZnJvbUlTTygnMTk4Mi0wNS0yNVQwOTo0NScpLFxuICAgKiAgICAgaTIgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgzLTEwLTE0VDEwOjMwJyk7XG4gICAqIGkyLmRpZmYoaTEpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogNDM4MDc1MDAwMDAgfVxuICAgKiBpMi5kaWZmKGkxLCAnaG91cnMnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTIxNjguNzUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LjAzMTI1IH1cbiAgICogaTIuZGlmZihpMSwgWydtb250aHMnLCAnZGF5cycsICdob3VycyddKS50b09iamVjdCgpIC8vPT4geyBtb250aHM6IDE2LCBkYXlzOiAxOSwgaG91cnM6IDAuNzUgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlckRhdGVUaW1lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyT3B0cyA9IHsgbG9jYWxlOiB0aGlzLmxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtOiB0aGlzLm51bWJlcmluZ1N5c3RlbSwgLi4ub3B0cyB9O1xuXG4gICAgY29uc3QgdW5pdHMgPSBtYXliZUFycmF5KHVuaXQpLm1hcChEdXJhdGlvbi5ub3JtYWxpemVVbml0KSxcbiAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksXG4gICAgICBlYXJsaWVyID0gb3RoZXJJc0xhdGVyID8gdGhpcyA6IG90aGVyRGF0ZVRpbWUsXG4gICAgICBsYXRlciA9IG90aGVySXNMYXRlciA/IG90aGVyRGF0ZVRpbWUgOiB0aGlzLFxuICAgICAgZGlmZmVkID0gZGlmZihlYXJsaWVyLCBsYXRlciwgdW5pdHMsIGR1ck9wdHMpO1xuXG4gICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCByaWdodCBub3cuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjZGlmZn1cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIGRpZmZOb3codW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmRpZmYoRGF0ZVRpbWUubm93KCksIHVuaXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCBzcGFubmluZyBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIGFub3RoZXIgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBlbmQgcG9pbnQgb2YgdGhlIEludGVydmFsXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgdW50aWwob3RoZXJEYXRlVGltZSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIERhdGVUaW1lIGlzIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZSBhcyBhbm90aGVyIERhdGVUaW1lLlxuICAgKiBIaWdoZXItb3JkZXIgdW5pdHMgbXVzdCBhbHNvIGJlIGlkZW50aWNhbCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYHRydWVgLlxuICAgKiBOb3RlIHRoYXQgdGltZSB6b25lcyBhcmUgKippZ25vcmVkKiogaW4gdGhpcyBjb21wYXJpc29uLCB3aGljaCBjb21wYXJlcyB0aGUgKipsb2NhbCoqIGNhbGVuZGFyIHRpbWUuIFVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0gdG8gY29udmVydCBvbmUgb2YgdGhlIGRhdGVzIGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuaGFzU2FtZShvdGhlckRULCAnZGF5Jyk7IC8vfj4gdHJ1ZSBpZiBvdGhlckRUIGlzIGluIHRoZSBzYW1lIGN1cnJlbnQgY2FsZW5kYXIgZGF5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBoYXNTYW1lKG90aGVyRGF0ZVRpbWUsIHVuaXQpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgaW5wdXRNcyA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpO1xuICAgIGNvbnN0IGFkanVzdGVkVG9ab25lID0gdGhpcy5zZXRab25lKG90aGVyRGF0ZVRpbWUuem9uZSwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pO1xuICAgIHJldHVybiBhZGp1c3RlZFRvWm9uZS5zdGFydE9mKHVuaXQpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSBhZGp1c3RlZFRvWm9uZS5lbmRPZih1bml0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFcXVhbGl0eSBjaGVja1xuICAgKiBUd28gRGF0ZVRpbWVzIGFyZSBlcXVhbCBpZmYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgbWlsbGlzZWNvbmQsIGhhdmUgdGhlIHNhbWUgem9uZSBhbmQgbG9jYXRpb24sIGFuZCBhcmUgYm90aCB2YWxpZC5cbiAgICogVG8gY29tcGFyZSBqdXN0IHRoZSBtaWxsaXNlY29uZCB2YWx1ZXMsIHVzZSBgK2R0MSA9PT0gK2R0MmAuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyIC0gdGhlIG90aGVyIERhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1ZhbGlkICYmXG4gICAgICBvdGhlci5pc1ZhbGlkICYmXG4gICAgICB0aGlzLnZhbHVlT2YoKSA9PT0gb3RoZXIudmFsdWVPZigpICYmXG4gICAgICB0aGlzLnpvbmUuZXF1YWxzKG90aGVyLnpvbmUpICYmXG4gICAgICB0aGlzLmxvYy5lcXVhbHMob3RoZXIubG9jKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHRoaXMgdGltZSByZWxhdGl2ZSB0byBub3csIHN1Y2ggYXMgXCJpbiB0d28gZGF5c1wiLiBDYW4gb25seSBpbnRlcm5hdGlvbmFsaXplIGlmIHlvdXJcbiAgICogcGxhdGZvcm0gc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuIFJvdW5kcyBkb3duIGJ5IGRlZmF1bHQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT1cImxvbmdcIl0gLSB0aGUgc3R5bGUgb2YgdW5pdHMsIG11c3QgYmUgXCJsb25nXCIsIFwic2hvcnRcIiwgb3IgXCJuYXJyb3dcIlxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdCBvciBhcnJheSBvZiB1bml0czsgaWYgb21pdHRlZCwgb3IgYW4gYXJyYXksIHRoZSBtZXRob2Qgd2lsbCBwaWNrIHRoZSBiZXN0IHVuaXQuIFVzZSBhbiBhcnJheSBvciBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIG9yIFwic2Vjb25kc1wiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucm91bmQ9dHJ1ZV0gLSB3aGV0aGVyIHRvIHJvdW5kIHRoZSBudW1iZXJzIGluIHRoZSBvdXRwdXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wYWRkaW5nPTBdIC0gcGFkZGluZyBpbiBtaWxsaXNlY29uZHMuIFRoaXMgYWxsb3dzIHlvdSB0byByb3VuZCB1cCB0aGUgcmVzdWx0IGlmIGl0IGZpdHMgaW5zaWRlIHRoZSB0aHJlc2hvbGQuIERvbid0IHVzZSBpbiBjb21iaW5hdGlvbiB3aXRoIHtyb3VuZDogZmFsc2V9IGJlY2F1c2UgdGhlIGRlY2ltYWwgb3V0cHV0IHdpbGwgaW5jbHVkZSB0aGUgcGFkZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubG9jYWxlIC0gb3ZlcnJpZGUgdGhlIGxvY2FsZSBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIG92ZXJyaWRlIHRoZSBudW1iZXJpbmdTeXN0ZW0gb2YgdGhpcyBEYXRlVGltZS4gVGhlIEludGwgc3lzdGVtIG1heSBjaG9vc2Ugbm90IHRvIGhvbm9yIHRoaXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCJpbiAxIGRheVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZShcImVzXCIpLnRvUmVsYXRpdmUoeyBkYXlzOiAxIH0pIC8vPT4gXCJkZW50cm8gZGUgMSBkXHUwMEVEYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGFucyAyMyBoZXVyZXNcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoeyB1bml0OiBcImhvdXJzXCIgfSkgLy89PiBcIjQ4IGhvdXJzIGFnb1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgaG91cnM6IDM2IH0pLnRvUmVsYXRpdmUoeyByb3VuZDogZmFsc2UgfSkgLy89PiBcIjEuNSBkYXlzIGFnb1wiXG4gICAqL1xuICB0b1JlbGF0aXZlKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyA/ICh0aGlzIDwgYmFzZSA/IC1vcHRpb25zLnBhZGRpbmcgOiBvcHRpb25zLnBhZGRpbmcpIDogMDtcbiAgICBsZXQgdW5pdHMgPSBbXCJ5ZWFyc1wiLCBcIm1vbnRoc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdO1xuICAgIGxldCB1bml0ID0gb3B0aW9ucy51bml0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudW5pdCkpIHtcbiAgICAgIHVuaXRzID0gb3B0aW9ucy51bml0O1xuICAgICAgdW5pdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShiYXNlLCB0aGlzLnBsdXMocGFkZGluZyksIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBudW1lcmljOiBcImFsd2F5c1wiLFxuICAgICAgdW5pdHMsXG4gICAgICB1bml0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkYXRlIHJlbGF0aXZlIHRvIHRvZGF5LCBzdWNoIGFzIFwieWVzdGVyZGF5XCIgb3IgXCJuZXh0IG1vbnRoXCIuXG4gICAqIE9ubHkgaW50ZXJuYXRpb25hbGl6ZXMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdDsgaWYgb21pdHRlZCwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIHVuaXQuIFVzZSBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgb3IgXCJkYXlzXCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+IFwidG9tb3Jyb3dcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcIlwibWFcdTAwRjFhbmFcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGVtYWluXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICovXG4gIHRvUmVsYXRpdmVDYWxlbmRhcihvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gZGlmZlJlbGF0aXZlKG9wdGlvbnMuYmFzZSB8fCBEYXRlVGltZS5mcm9tT2JqZWN0KHt9LCB7IHpvbmU6IHRoaXMuem9uZSB9KSwgdGhpcywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG51bWVyaWM6IFwiYXV0b1wiLFxuICAgICAgdW5pdHM6IFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiXSxcbiAgICAgIGNhbGVuZGFyeTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1pbiBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWluaW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1pbiBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuICBzdGF0aWMgbWluKC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtaW4gcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWluKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1heCBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWF4aW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1heCBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuICBzdGF0aWMgbWF4KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtYXggcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWF4KTtcbiAgfVxuXG4gIC8vIE1JU0NcblxuICAvKipcbiAgICogRXhwbGFpbiBob3cgYSBzdHJpbmcgd291bGQgYmUgcGFyc2VkIGJ5IGZyb21Gb3JtYXQoKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIGRlc2NyaXB0aW9uKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGFrZW4gYnkgZnJvbUZvcm1hdCgpXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBmcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCB9ID0gb3B0aW9ucyxcbiAgICAgIGxvY2FsZVRvVXNlID0gTG9jYWxlLmZyb21PcHRzKHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICAgIGRlZmF1bHRUb0VOOiB0cnVlLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZVRvVXNlLCB0ZXh0LCBmbXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmcm9tRm9ybWF0RXhwbGFpbiBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZ0V4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEZPUk1BVCBQUkVTRVRTXG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgMTAvMTQvMTk4M1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX1NIT1JUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfU0hPUlQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX01FRCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX01FRDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIE9jdCAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURV9NRURfV0lUSF9XRUVLREFZKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX0ZVTEwoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9GVUxMO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ1R1ZXNkYXksIE9jdG9iZXIgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfSFVHRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX0hVR0U7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9TSU1QTEUoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9TSU1QTEU7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX1NIT1JUX09GRlNFVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX0xPTkdfT0ZGU0VUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfV0lUSF9MT05HX09GRlNFVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCcsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1NJTVBMRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1NJTVBMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMycsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBFRFQnLCBhbHdheXMgMjQtaG91ci5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzEwLzE0LzE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfU0hPUlQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRUQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpLCAxNCBPY3QgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVk7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9GVUxMO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMsIDk6MzA6MzMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9IVUdFO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFM7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJpZW5kbHlEYXRlVGltZShkYXRlVGltZWlzaCkge1xuICBpZiAoRGF0ZVRpbWUuaXNEYXRlVGltZShkYXRlVGltZWlzaCkpIHtcbiAgICByZXR1cm4gZGF0ZVRpbWVpc2g7XG4gIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgZGF0ZVRpbWVpc2gudmFsdWVPZiAmJiBpc051bWJlcihkYXRlVGltZWlzaC52YWx1ZU9mKCkpKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21KU0RhdGUoZGF0ZVRpbWVpc2gpO1xuICB9IGVsc2UgaWYgKGRhdGVUaW1laXNoICYmIHR5cGVvZiBkYXRlVGltZWlzaCA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KGRhdGVUaW1laXNoKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICBgVW5rbm93biBkYXRldGltZSBhcmd1bWVudDogJHtkYXRlVGltZWlzaH0sIG9mIHR5cGUgJHt0eXBlb2YgZGF0ZVRpbWVpc2h9YFxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSBcImVtb2ppLXJlZ2V4XCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuXG4vKiogVGVzdC1lbnZpcm9ubWVudC1mcmllbmRseSBmdW5jdGlvbiB3aGljaCBmZXRjaGVzIHRoZSBjdXJyZW50IHN5c3RlbSBsb2NhbGUuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJlbi1VU1wiO1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlO1xufVxuXG4vLyBEYXRlL1RpbWUgUmVuZGVyaW5nXG5cbi8qKiBOb3JtYWxpemUgYSBkdXJhdGlvbiB0byBhbGwgb2YgdGhlIHByb3BlciB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEdXJhdGlvbihkdXI6IER1cmF0aW9uKSB7XG4gICAgaWYgKGR1ciA9PT0gdW5kZWZpbmVkIHx8IGR1ciA9PT0gbnVsbCkgcmV0dXJuIGR1cjtcblxuICAgIHJldHVybiBkdXIuc2hpZnRUbyhcInllYXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiKS5ub3JtYWxpemUoKTtcbn1cblxuLyoqIFN0cmlwIHRoZSB0aW1lIGNvbXBvbmVudHMgb2YgYSBkYXRlIHRpbWUgb2JqZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVGltZShkdDogRGF0ZVRpbWUpOiBEYXRlVGltZSB7XG4gICAgaWYgKGR0ID09PSBudWxsIHx8IGR0ID09PSB1bmRlZmluZWQpIHJldHVybiBkdDtcblxuICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHtcbiAgICAgICAgeWVhcjogZHQueWVhcixcbiAgICAgICAgbW9udGg6IGR0Lm1vbnRoLFxuICAgICAgICBkYXk6IGR0LmRheSxcbiAgICB9KTtcbn1cblxuLyoqIFRyeSB0byBleHRyYWN0IGEgWVlZWU1NREQgZGF0ZSBmcm9tIGEgc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRlKHN0cjogc3RyaW5nKTogRGF0ZVRpbWUgfCB1bmRlZmluZWQge1xuICAgIGxldCBkYXRlTWF0Y2ggPSAvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkvLmV4ZWMoc3RyKTtcbiAgICBpZiAoIWRhdGVNYXRjaCkgZGF0ZU1hdGNoID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KS8uZXhlYyhzdHIpO1xuICAgIGlmIChkYXRlTWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXIgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzFdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gTnVtYmVyLnBhcnNlSW50KGRhdGVNYXRjaFsyXSk7XG4gICAgICAgIGxldCBkYXkgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzNdKTtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyLCBtb250aCwgZGF5IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBSZW5kZXIgYSBEYXRlVGltZSBpbiBhIG1pbmltYWwgZm9ybWF0IHRvIHNhdmUgc3BhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWluaW1hbERhdGUodGltZTogRGF0ZVRpbWUsIGRhdGVGb3JtYXQ6IHN0cmluZywgZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyByZWxldmFudCB0aW1lIHNwZWNpZmllZCwgZmFsbCBiYWNrIHRvIGp1c3QgcmVuZGVyaW5nIHRoZSBkYXRlLlxuICAgIGlmICh0aW1lLnNlY29uZCA9PSAwICYmIHRpbWUubWludXRlID09IDAgJiYgdGltZS5ob3VyID09IDApIHtcbiAgICAgICAgcmV0dXJuIHRpbWUudG9Mb2NhbCgpLnRvRm9ybWF0KGRhdGVGb3JtYXQsIHsgbG9jYWxlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aW1lLnRvTG9jYWwoKS50b0Zvcm1hdChkYXRlVGltZUZvcm1hdCwgeyBsb2NhbGUgfSk7XG59XG5cbi8qKiBSZW5kZXIgYSBkdXJhdGlvbiBpbiBhIG1pbmltYWwgZm9ybWF0IHRvIHNhdmUgc3BhY2UuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWluaW1hbER1cmF0aW9uKGR1cjogRHVyYXRpb24pOiBzdHJpbmcge1xuICAgIGR1ciA9IG5vcm1hbGl6ZUR1cmF0aW9uKGR1cik7XG5cbiAgICAvLyBUT0RPOiBMdXhvbiBkb2VzIG5vdCBoYXZlIG11bHRpLWxpbmd1YWwvbG9jYWxlLWF3YXJlIGR1cmF0aW9uIHJlbmRlcmluZy5cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBpZiAoZHVyLnllYXJzKSByZXN1bHQgKz0gYCR7ZHVyLnllYXJzfSB5ZWFycywgYDtcbiAgICBpZiAoZHVyLm1vbnRocykgcmVzdWx0ICs9IGAke2R1ci5tb250aHN9IG1vbnRocywgYDtcbiAgICBpZiAoZHVyLndlZWtzKSByZXN1bHQgKz0gYCR7ZHVyLndlZWtzfSB3ZWVrcywgYDtcbiAgICBpZiAoZHVyLmRheXMpIHJlc3VsdCArPSBgJHtkdXIuZGF5c30gZGF5cywgYDtcbiAgICBpZiAoZHVyLmhvdXJzKSByZXN1bHQgKz0gYCR7ZHVyLmhvdXJzfSBob3VycywgYDtcbiAgICBpZiAoZHVyLm1pbnV0ZXMpIHJlc3VsdCArPSBgJHtkdXIubWludXRlc30gbWludXRlcywgYDtcbiAgICBpZiAoZHVyLnNlY29uZHMpIHJlc3VsdCArPSBgJHtNYXRoLnJvdW5kKGR1ci5zZWNvbmRzKX0gc2Vjb25kcywgYDtcbiAgICBpZiAoZHVyLm1pbGxpc2Vjb25kcykgcmVzdWx0ICs9IGAke01hdGgucm91bmQoZHVyLm1pbGxpc2Vjb25kcyl9IG1zLCBgO1xuXG4gICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIiwgXCIpKSByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIHJlc3VsdC5sZW5ndGggLSAyKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBQYXRoIHV0aWxpdGllcy5cblxuLyoqIEdldCB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGdpdmVuIHBhdGggKGkuZS4sIGxpa2UgY29tcHV0aW5nICdwYXRoLy4uJykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50Rm9sZGVyKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbn1cblxuLyoqIEdldCB0aGUgZmlsZSBuYW1lIGZvciB0aGUgZmlsZSByZWZlcmVuY2VkIGluIHRoZSBnaXZlbiBwYXRoLCBieSBzdHJpcHBpbmcgdGhlIHBhcmVudCBmb2xkZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVOYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguaW5jbHVkZXMoXCIvXCIpID8gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IHBhdGg7XG59XG5cbi8qKiBHZXQgdGhlIFwidGl0bGVcIiBmb3IgYSBmaWxlLCBieSBzdHJpcHBpbmcgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGggYXMgd2VsbCBhcyB0aGUgZXh0ZW5zaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVUaXRsZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiL1wiKSkgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKHBhdGguZW5kc1dpdGgoXCIubWRcIikpIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDMpO1xuICAgIHJldHVybiBwYXRoO1xufVxuXG4vKiogR2V0IHRoZSBleHRlbnNpb24gb2YgYSBmaWxlIGZyb20gdGhlIGZpbGUgcGF0aC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXBhdGguaW5jbHVkZXMoXCIuXCIpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi5cIikgKyAxKTtcbn1cblxuLy8gVGFnIGV4dHJhY3Rpb24uXG5cbi8qKiBQYXJzZSBhbGwgc3VidGFncyBvdXQgb2YgdGhlIGdpdmVuIHRhZy4gSS5lLiwgI2hlbGxvL2kvYW0gd291bGQgeWllbGQgWyNoZWxsby9pL2FtLCAjaGVsbG8vaSwgI2hlbGxvXS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3VidGFncyh0YWdzOiBzdHJpbmcgfCBJdGVyYWJsZTxzdHJpbmc+KTogc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCB0YWcgb2YgdHlwZW9mIHRhZ3MgPT09IFwic3RyaW5nXCIgPyBbdGFnc10gOiB0YWdzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRhZyk7XG4gICAgICAgIHdoaWxlICh0YWcuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgICAgICB0YWcgPSB0YWcuc3Vic3RyaW5nKDAsIHRhZy5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBTcGxpdCBlYWNoIGJsb2NrIGFuZCBzZWN0aW9uIGxpbmsgaW50byB0aGUgb3JpZ2luYWwgbGluayBhbmQgYSBjb3JyZXNwb25kaW5nIGZpbGUgbGluay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RmlsZUxpbmtzKGVsaW5rczogTGlua1tdKTogTGlua1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IExpbmtbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBlbGlua3MpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobGluayk7XG5cbiAgICAgICAgY29uc3QgZmlsZUxpbmsgPSBsaW5rLnRvRmlsZSgpO1xuICAgICAgICBpZiAobGluay50eXBlICE9IFwiZmlsZVwiICYmICFyZXN1bHQuZmluZCgoZXhpc3RpbmcpID0+IGV4aXN0aW5nLmVxdWFscyhmaWxlTGluaykpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChmaWxlTGluayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBTdHJpbmcgZXNjYXBpbmcgYW5kIGNhbm9uaWNhbGl6YXRpb24uXG5cbi8qKlxuICogRXNjYXBlIHJlZ2V4IGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9HdWlkZS9SZWd1bGFyX0V4cHJlc3Npb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuY29uc3QgSEVBREVSX0NBTk9OSUNBTElaRVI6IFAuUGFyc2VyPHN0cmluZz4gPSBQLmFsdChcbiAgICBQLnJlZ2V4KG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCBcIlwiKSksXG4gICAgUC5yZWdleCgvWzAtOVxccHtMZXR0ZXJ9Xy1dKy91KSxcbiAgICBQLndoaXRlc3BhY2UubWFwKChfKSA9PiBcIiBcIiksXG4gICAgUC5hbnkubWFwKChfKSA9PiBcIiBcIilcbilcbiAgICAubWFueSgpXG4gICAgLm1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQuam9pbihcIlwiKS5zcGxpdCgvXFxzKy8pLmpvaW4oXCIgXCIpLnRyaW0oKTtcbiAgICB9KTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIHRoZSB0ZXh0IGluIGEgaGVhZGVyIHRvIGJlIHNvbWV0aGluZyB0aGF0IGlzIGFjdHVhbGx5IGxpbmthYmxlIHRvLiBUaGlzIG1pbWljc1xuICogaG93IE9ic2lkaWFuIGRvZXMgaXQncyBub3JtYWxpemF0aW9uLCBjb2xsYXBzaW5nIHJlcGVhdGVkIHNwYWNlcyBhbmQgc3RyaXBwaW5nIG91dCBjb250cm9sIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSEVBREVSX0NBTk9OSUNBTElaRVIudHJ5UGFyc2UoaGVhZGVyKTtcbn1cblxuLy8gRmFzdCBleHRyYWN0aW9uIG9mIGxpbmUgcmFuZ2VzIGZyb20gbGFyZ2UgcGllY2VzIG9mIHRleHQuXG5cbi8qKiBVcGRhdGUgdGhlIGxpbmUgcmFuZ2UgZnJvbSBbc3RhcnQsIGVuZCkgd2l0aCB0aGUgZ2l2ZW4gZnVuY3Rpb24uICovXG5leHBvcnQgZnVuY3Rpb24gbGluZVJlcGxhY2UodGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZnVuYzogKGxpbmU6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBbZGF0YSwgb2Zmc2V0XSA9IGxpbmVTcGFuKHRleHQsIHN0YXJ0LCBlbmQpO1xuICAgIGlmICghb2Zmc2V0KSByZXR1cm4gdGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIGRhdGEuc3Vic3RyaW5nKDAsIG9mZnNldC5zdGFydCkgKyBmdW5jKGRhdGEuc3Vic3RyaW5nKG9mZnNldC5zdGFydCwgb2Zmc2V0LmVuZCkpICsgZGF0YS5zdWJzdHJpbmcob2Zmc2V0LmVuZClcbiAgICApO1xufVxuXG4vKiogRXh0cmFjdCB0aGUgbGluZXMgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kKSwgYXMgd2VsbCBhcyB0aGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIHN0YXJ0IGFuZCBlbmQuICovXG5leHBvcnQgZnVuY3Rpb24gbGluZVNwYW4oXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXJcbik6IFtzdHJpbmcsIHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB8IHVuZGVmaW5lZF0ge1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIDApO1xuICAgIGVuZCA9IE1hdGgubWF4KGVuZCwgMCk7XG5cbiAgICBpZiAoc3RhcnQgPj0gZW5kKSByZXR1cm4gW1wiXCIsIHVuZGVmaW5lZF07XG5cbiAgICAvLyBTdGFydCBieSBmaW5kaW5nIHRoZSBzdGFydGluZyBsaW5lIG9mZnNldC5cbiAgICBjb25zdCBzdGFydE9mZnNldCA9IHNraXBOZXdsaW5lcyh0ZXh0LCAwLCBzdGFydCk7XG4gICAgaWYgKHN0YXJ0T2Zmc2V0ID09IC0xKSByZXR1cm4gW1wiXCIsIHVuZGVmaW5lZF07XG5cbiAgICBjb25zdCBlbmRPZmZzZXQgPSBza2lwTmV3bGluZXModGV4dCwgc3RhcnRPZmZzZXQsIGVuZCAtIHN0YXJ0KTtcbiAgICBpZiAoZW5kT2Zmc2V0ID09IC0xKSByZXR1cm4gW3RleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0KSwgeyBzdGFydDogc3RhcnRPZmZzZXQsIGVuZDogdGV4dC5sZW5ndGggfV07XG4gICAgZWxzZSByZXR1cm4gW3RleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSAxKSwgeyBzdGFydDogc3RhcnRPZmZzZXQsIGVuZDogZW5kT2Zmc2V0IC0gMSB9XTtcbn1cblxuLyoqIEV4dHJhY3QgdGhlIGxpbmVzIGluIHRoZSByYW5nZSBbc3RhcnQsIGVuZCkuIFN0YXJ0IGlzIGluY2x1c2l2ZSwgZW5kIGlzIGV4Y2x1c2l2ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lUmFuZ2UodGV4dDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxpbmVTcGFuKHRleHQsIHN0YXJ0LCBlbmQpWzBdO1xufVxuXG4vKiogU2tpcCB7Y291bnR9IHRvdGFsIG5ld2xpbmVzLCByZXR1cm5pbmcgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHtjb3VudH0gbGluZXMgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZS4gSWYgY291bnQgaXMgMCwgdGhlIGluaXRpYWwgb2Zmc2V0IGlzIHJldHVybmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNraXBOZXdsaW5lcyh0ZXh0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gc3RhcnQ7XG5cbiAgICBsZXQgcG9zaXRpb24gPSBzdGFydDtcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIHBvc2l0aW9uID0gdGV4dC5pbmRleE9mKFwiXFxuXCIsIHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKHBvc2l0aW9uID09IC0xKSByZXR1cm4gLTE7XG5cbiAgICAgICAgY291bnQtLTtcbiAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuXHQvLyBodHRwczovL210aHMuYmUvZW1vamlcblx0cmV0dXJuIC9bIyowLTldXFx1RkUwRj9cXHUyMEUzfFtcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRUQtXFx1MjNFRlxcdTIzRjFcXHUyM0YyXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCXFx1MjVGQ1xcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTJcXHUyNjk0LVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBN1xcdTI2QUFcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzhcXHUyNkNGXFx1MjZEMVxcdTI2RTlcXHUyNkYwLVxcdTI2RjVcXHUyNkY3XFx1MjZGOFxcdTI2RkFcXHUyNzAyXFx1MjcwOFxcdTI3MDlcXHUyNzBGXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxRFxcdTI3MjFcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc1N1xcdTI3NjNcXHUyN0ExXFx1MjkzNFxcdTI5MzVcXHUyQjA1LVxcdTJCMDdcXHUyQjFCXFx1MkIxQ1xcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XVxcdUZFMEY/fFtcXHUyNjFEXFx1MjcwQ1xcdTI3MERdKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjcwQVxcdTI3MEJdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI2OTNcXHUyNkExXFx1MjZBQlxcdTI2QzVcXHUyNkNFXFx1MjZENFxcdTI2RUFcXHUyNkZEXFx1MjcwNVxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkI1MF18XFx1MjZEM1xcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E1KT98XFx1MjZGOSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1Mjc2NFxcdUZFMEY/KD86XFx1MjAwRCg/OlxcdUQ4M0RcXHVERDI1fFxcdUQ4M0VcXHVERTc5KSk/fFxcdUQ4M0MoPzpbXFx1REMwNFxcdURENzBcXHVERDcxXFx1REQ3RVxcdUREN0ZcXHVERTAyXFx1REUzN1xcdURGMjFcXHVERjI0LVxcdURGMkNcXHVERjM2XFx1REY3RFxcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RVxcdURGOUZcXHVERkNEXFx1REZDRVxcdURGRDQtXFx1REZERlxcdURGRjVcXHVERkY3XVxcdUZFMEY/fFtcXHVERjg1XFx1REZDMlxcdURGQzddKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURGQzRcXHVERkNBXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERkNCXFx1REZDQ10oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjQzXFx1REY0NS1cXHVERjRBXFx1REY0Qy1cXHVERjdDXFx1REY3RS1cXHVERjg0XFx1REY4Ni1cXHVERjkzXFx1REZBMC1cXHVERkMxXFx1REZDNVxcdURGQzZcXHVERkM4XFx1REZDOVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjgtXFx1REZGRl18XFx1RERFNlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl18XFx1RERFN1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREU4XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjVcXHVEREY3XFx1RERGQS1cXHVEREZGXXxcXHVEREU5XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXXxcXHVEREVBXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV18XFx1RERFQlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XXxcXHVEREVDXFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXXxcXHVEREVEXFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdfFxcdURERUVcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV18XFx1RERFRlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV18XFx1RERGMFxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERjFcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV18XFx1RERGMlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl18XFx1RERGM1xcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXXxcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RERGNVxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXXxcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RERGN1xcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdfFxcdURERjhcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdfFxcdURERjlcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXXxcXHVEREZBXFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXXxcXHVEREZCXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXXxcXHVEREZDXFx1RDgzQ1tcXHVEREVCXFx1RERGOF18XFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdURERkVcXHVEODNDW1xcdURERUFcXHVEREY5XXxcXHVEREZGXFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdfFxcdURGNDQoPzpcXHUyMDBEXFx1RDgzRFxcdURGRUIpP3xcXHVERjRCKD86XFx1MjAwRFxcdUQ4M0RcXHVERkU5KT98XFx1REZDMyg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT98XFx1REZGM1xcdUZFMEY/KD86XFx1MjAwRCg/OlxcdTI2QTdcXHVGRTBGP3xcXHVEODNDXFx1REYwOCkpP3xcXHVERkY0KD86XFx1MjAwRFxcdTI2MjBcXHVGRTBGP3xcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyXFx1REI0MCg/OlxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczKVxcdURCNDBcXHVEQzdGKT8pfFxcdUQ4M0QoPzpbXFx1REMzRlxcdURDRkRcXHVERDQ5XFx1REQ0QVxcdURENkZcXHVERDcwXFx1REQ3M1xcdURENzYtXFx1REQ3OVxcdUREODdcXHVERDhBLVxcdUREOERcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQVxcdURFQ0JcXHVERUNELVxcdURFQ0ZcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVGMFxcdURFRjNdXFx1RkUwRj98W1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2NlxcdURDNjdcXHVEQzZCLVxcdURDNkRcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDOEZcXHVEQzkxXFx1RENBQVxcdUREN0FcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURDNkVcXHVEQzcwXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0XFx1REVCNV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQ3NFxcdUREOTBdKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REMwMC1cXHVEQzA3XFx1REMwOS1cXHVEQzE0XFx1REMxNi1cXHVEQzI1XFx1REMyNy1cXHVEQzNBXFx1REMzQy1cXHVEQzNFXFx1REM0MFxcdURDNDRcXHVEQzQ1XFx1REM1MS1cXHVEQzY1XFx1REM2QVxcdURDNzktXFx1REM3QlxcdURDN0QtXFx1REM4MFxcdURDODRcXHVEQzg4LVxcdURDOEVcXHVEQzkwXFx1REM5Mi1cXHVEQ0E5XFx1RENBQi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1RERBNFxcdURERkItXFx1REUyRFxcdURFMkYtXFx1REUzNFxcdURFMzctXFx1REU0MVxcdURFNDNcXHVERTQ0XFx1REU0OC1cXHVERTRBXFx1REU4MC1cXHVERUEyXFx1REVBNC1cXHVERUIzXFx1REVCNy1cXHVERUJGXFx1REVDMS1cXHVERUM1XFx1REVEMC1cXHVERUQyXFx1REVENS1cXHVERUQ3XFx1REVEQy1cXHVERURGXFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkNcXHVERkUwLVxcdURGRUJcXHVERkYwXXxcXHVEQzA4KD86XFx1MjAwRFxcdTJCMUIpP3xcXHVEQzE1KD86XFx1MjAwRFxcdUQ4M0VcXHVEREJBKT98XFx1REMyNig/OlxcdTIwMEQoPzpcXHUyQjFCfFxcdUQ4M0RcXHVERDI1KSk/fFxcdURDM0IoPzpcXHUyMDBEXFx1Mjc0NFxcdUZFMEY/KT98XFx1REM0MVxcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEREU4XFx1RkUwRj8pP3xcXHVEQzY4KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjh8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV1cXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVEQzY5KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1tcXHVEQzY4XFx1REM2OV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT98XFx1REM2OVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPykpfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNkYoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REQ3NSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REUyRSg/OlxcdTIwMERcXHVEODNEXFx1RENBOCk/fFxcdURFMzUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQUIpP3xcXHVERTM2KD86XFx1MjAwRFxcdUQ4M0NcXHVERjJCXFx1RkUwRj8pP3xcXHVERTQyKD86XFx1MjAwRFtcXHUyMTk0XFx1MjE5NV1cXHVGRTBGPyk/fFxcdURFQjYoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMEQoPzpbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98XFx1MjdBMVxcdUZFMEY/KSk/KXxcXHVEODNFKD86W1xcdUREMENcXHVERDBGXFx1REQxOC1cXHVERDFGXFx1REQzMC1cXHVERDM0XFx1REQzNlxcdURENzdcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyXFx1REREM1xcdURERDVcXHVERUMzLVxcdURFQzVcXHVERUYwXFx1REVGMi1cXHVERUY4XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVERDI2XFx1REQzNVxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENEXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREREVcXHVERERGXSg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQwRFxcdUREMEVcXHVERDEwLVxcdUREMTdcXHVERDIwLVxcdUREMjVcXHVERDI3LVxcdUREMkZcXHVERDNBXFx1REQzRi1cXHVERDQ1XFx1REQ0Ny1cXHVERDc2XFx1REQ3OC1cXHVEREI0XFx1RERCN1xcdUREQkFcXHVEREJDLVxcdUREQ0NcXHVEREQwXFx1RERFMC1cXHVEREZGXFx1REU3MC1cXHVERTdDXFx1REU4MC1cXHVERTg4XFx1REU5MC1cXHVERUJEXFx1REVCRi1cXHVERUMyXFx1REVDRS1cXHVERURCXFx1REVFMC1cXHVERUU4XXxcXHVERDNDKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGP3xcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xcXHVERENFKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEREQxXFx1MjAwRFxcdUQ4M0VcXHVEREQyKD86XFx1MjAwRFxcdUQ4M0VcXHVEREQyKT98XFx1REREMig/OlxcdTIwMERcXHVEODNFXFx1REREMik/KSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT8pKT98XFx1REVGMSg/OlxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKT98XFx1REZGQyg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pP3xcXHVERkZEKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSk/fFxcdURGRkUoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKT98XFx1REZGRig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSk/KSk/KS9nO1xufTtcbiIsICJpbXBvcnQgeyBnZXRGaWxlVGl0bGUsIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLyoqIFRoZSBPYnNpZGlhbiAnbGluaycsIHVzZWQgZm9yIHVuaXF1ZWx5IGRlc2NyaWJpbmcgYSBmaWxlLCBoZWFkZXIsIG9yIGJsb2NrLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgY2xhc3MgTGluayB7XG4gICAgLyoqIFRoZSBmaWxlIHBhdGggdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBwdWJsaWMgZGlzcGxheT86IHN0cmluZztcbiAgICAvKiogVGhlIGJsb2NrIElEIG9yIGhlYWRlciB0aGlzIGxpbmsgcG9pbnRzIHRvIHdpdGhpbiBhIGZpbGUsIGlmIHJlbGV2YW50LiAqL1xuICAgIHB1YmxpYyBzdWJwYXRoPzogc3RyaW5nO1xuICAgIC8qKiBJcyB0aGlzIGxpbmsgYW4gZW1iZWRkZWQgbGluayAob2YgZm9ybSAnIVtbaGVsbG9dXScpPyAqL1xuICAgIHB1YmxpYyBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgcHVibGljIHR5cGU6IFwiZmlsZVwiIHwgXCJoZWFkZXJcIiB8IFwiYmxvY2tcIjtcblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGZpbGUocGF0aDogc3RyaW5nLCBlbWJlZDogYm9vbGVhbiA9IGZhbHNlLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayh7XG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgZW1iZWQsXG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgc3VicGF0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBJbmZlciB0aGUgdHlwZSBvZiB0aGUgbGluayBmcm9tIHRoZSBmdWxsIGludGVybmFsIGxpbmsgcGF0aC4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGluZmVyKGxpbmtwYXRoOiBzdHJpbmcsIGVtYmVkOiBib29sZWFuID0gZmFsc2UsIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgaWYgKGxpbmtwYXRoLmluY2x1ZGVzKFwiI15cIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI15cIik7XG4gICAgICAgICAgICByZXR1cm4gTGluay5ibG9jayhzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIGlmIChsaW5rcGF0aC5pbmNsdWRlcyhcIiNcIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgIHJldHVybiBMaW5rLmhlYWRlcihzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBMaW5rLmZpbGUobGlua3BhdGgsIGVtYmVkLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGhlYWRlciBpbiB0aGF0IGZpbGUuICovXG4gICAgcHVibGljIHN0YXRpYyBoZWFkZXIocGF0aDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZywgZW1iZWQ/OiBib29sZWFuLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIC8vIEhlYWRlcnMgbmVlZCB0byBiZSBub3JtYWxpemVkIHRvIGFscGhhLW51bWVyaWMgJiB3aXRoIGV4dHJhIHNwYWNpbmcgcmVtb3ZlZC5cbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlciksXG4gICAgICAgICAgICB0eXBlOiBcImhlYWRlclwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGJsb2NrIGluIHRoYXQgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGJsb2NrKHBhdGg6IHN0cmluZywgYmxvY2tJZDogc3RyaW5nLCBlbWJlZD86IGJvb2xlYW4sIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBibG9ja0lkLFxuICAgICAgICAgICAgdHlwZTogXCJibG9ja1wiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBhIGxpbmsgZnJvbSBpdCdzIHJhdyBKU09OIHJlcHJlc2VudGF0aW9uLiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChvYmplY3Q6IEpzb25MaW5rKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIGJ5IHBhcnNpbmcgaXQncyBpbnRlcmlvciBwYXJ0IChpbnNpZGUgb2YgdGhlICdbW11dJykuICovXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUlubmVyKHJhd2xpbms6IHN0cmluZyk6IExpbmsge1xuICAgICAgICBsZXQgW2xpbmssIGRpc3BsYXldID0gc3BsaXRPblVuZXNjYXBlZFBpcGUocmF3bGluayk7XG4gICAgICAgIHJldHVybiBMaW5rLmluZmVyKGxpbmssIGZhbHNlLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGZpZWxkczogUGFydGlhbDxMaW5rPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGlzIGxpbmsgd2l0aCBhIG5ldyBwYXRoLiAqL1xuICAgIHB1YmxpYyB3aXRoUGF0aChwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHsgcGF0aCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIG5ldyBsaW5rIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBsb2NhdGlvbiBidXQgd2l0aCBhIG5ldyBkaXNwbGF5IHZhbHVlLiAqL1xuICAgIHB1YmxpYyB3aXRoRGlzcGxheShkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBuZXcgbGluayB3aGljaCBoYXMgdGhlIGdpdmVuIGVtYmVkZGVkIHN0YXR1cy4gKi9cbiAgICBwdWJsaWMgd2l0aEVtYmVkKGVtYmVkOiBib29sZWFuKTogTGluayB7XG4gICAgICAgIGlmICh0aGlzLmVtYmVkID09IGVtYmVkKSByZXR1cm4gdGhpcztcblxuICAgICAgICByZXR1cm4gbmV3IExpbmsoT2JqZWN0LmFzc2lnbih7fSwgdGhpcywgeyBlbWJlZCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgYSBmaWxlIGxpbmsgaW50byBhIGxpbmsgdG8gYSBzcGVjaWZpYyBoZWFkZXIuICovXG4gICAgcHVibGljIHdpdGhIZWFkZXIoaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWNiIGxvY2suICovXG4gICAgcHVibGljIHdpdGhCbG9jayhibG9jazogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHRoaXMucGF0aCwgYmxvY2ssIHRoaXMuZW1iZWQsIHRoaXMuZGlzcGxheSk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyBmb3IgbGluayBlcXVhbGl0eSAoaS5lLiwgdGhhdCB0aGUgbGlua3MgYXJlIHBvaW50aW5nIHRvIHRoZSBzYW1lIGV4YWN0IGxvY2F0aW9uKS4gKi9cbiAgICBwdWJsaWMgZXF1YWxzKG90aGVyOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChvdGhlciA9PSB1bmRlZmluZWQgfHwgb3RoZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBhdGggPT0gb3RoZXIucGF0aCAmJiB0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiB0aGlzLnN1YnBhdGggPT0gb3RoZXIuc3VicGF0aDtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gaXQncyBtYXJrZG93biByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2Rvd24oKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gYSByYXcgb2JqZWN0IHdoaWNoIGlzIHNlcmlhbGl6YXRpb24tZnJpZW5kbHkuICovXG4gICAgcHVibGljIHRvT2JqZWN0KCk6IEpzb25MaW5rIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHN1YnBhdGg6IHRoaXMuc3VicGF0aCxcbiAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgICAgICAgIGVtYmVkOiB0aGlzLmVtYmVkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqL1xuICAgIHB1YmxpYyB0b0ZpbGUoKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmZpbGUodGhpcy5wYXRoLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IHRoaXMgbGluayBpbnRvIGFuIGVtYmVkZGVkIGxpbmsuICovXG4gICAgcHVibGljIHRvRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhIG5vbi1lbWJlZGRlZCBsaW5rLiAqL1xuICAgIHB1YmxpYyBmcm9tRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIG1hcmtkb3duIHNvIGl0IGNhbiBiZSByZW5kZXJlZC4gKi9cbiAgICBwdWJsaWMgbWFya2Rvd24oKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICh0aGlzLmVtYmVkID8gXCIhXCIgOiBcIlwiKSArIFwiW1tcIiArIHRoaXMub2JzaWRpYW5MaW5rKCk7XG4gICAgICAgIHJlc3VsdCArPSBcInxcIjtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMuZGlzcGxheU9yRGVmYXVsdCgpO1xuICAgICAgICByZXN1bHQgKz0gXCJdXVwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGRpc3BsYXkgZm9yIHRoaXMgbGluayBpZiBwcmVzZW50LCBvciByZXR1cm4gYSBzaW1wbGUgZGVmYXVsdCBkaXNwbGF5LiAqL1xuICAgIHB1YmxpYyBkaXNwbGF5T3JEZWZhdWx0KCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBcImhlYWRlclwiIHx8IHRoaXMudHlwZSA9PSBcImJsb2NrXCIpIHJlc3VsdCArPSBcIiA+IFwiICsgdGhpcy5zdWJwYXRoO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGxpbmsgdG8gc29tZXRoaW5nIHRoYXQgT2JzaWRpYW4gY2FuIG9wZW4gLyB1bmRlcnN0YW5kLiAqL1xuICAgIHB1YmxpYyBvYnNpZGlhbkxpbmsoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMucGF0aC5yZXBsYWNlKFwifFwiLCBcIlxcXFx8XCIpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09IFwiaGVhZGVyXCIpIHJldHVybiBlc2NhcGVkICsgXCIjXCIgKyB0aGlzLnN1YnBhdGg/LnJlcGxhY2UoXCJ8XCIsIFwiXFxcXHxcIik7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJibG9ja1wiKSByZXR1cm4gZXNjYXBlZCArIFwiI15cIiArIHRoaXMuc3VicGF0aD8ucmVwbGFjZShcInxcIiwgXCJcXFxcfFwiKTtcbiAgICAgICAgZWxzZSByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIHN0cmlwcGVkIG5hbWUgb2YgdGhlIGZpbGUgdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgIH1cbn1cblxuLyoqIFNlcmlhbGl6ZWQgZm9ybSBvZiBhIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbmsge1xuICAgIC8qKiBUaGUgZmlsZSBwYXRoIHRoaXMgbGluayBwb2ludHMgdG8uICovXG4gICAgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBkaXNwbGF5Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgYmxvY2sgSUQgb3IgaGVhZGVyIHRoaXMgbGluayBwb2ludHMgdG8gd2l0aGluIGEgZmlsZSwgaWYgcmVsZXZhbnQuICovXG4gICAgc3VicGF0aD86IHN0cmluZztcbiAgICAvKiogSXMgdGhpcyBsaW5rIGFuIGVtYmVkZGVkIGxpbmsgKG9mIGZvcm0gJyFbW2hlbGxvXV0nKT8gKi9cbiAgICBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgdHlwZTogXCJmaWxlXCIgfCBcImhlYWRlclwiIHwgXCJibG9ja1wiO1xufVxuXG4vKiogU3BsaXQgb24gdW5lc2NhcGVkIHBpcGVzIGluIGFuIGlubmVyIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE9uVW5lc2NhcGVkUGlwZShsaW5rOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdIHtcbiAgICBsZXQgcGlwZSA9IC0xO1xuICAgIHdoaWxlICgocGlwZSA9IGxpbmsuaW5kZXhPZihcInxcIiwgcGlwZSArIDEpKSA+PSAwKSB7XG4gICAgICAgIGlmIChwaXBlID4gMCAmJiBsaW5rW3BpcGUgLSAxXSA9PSBcIlxcXFxcIikgY29udGludWU7XG4gICAgICAgIHJldHVybiBbbGluay5zdWJzdHJpbmcoMCwgcGlwZSkucmVwbGFjZSgvXFxcXFxcfC9nLCBcInxcIiksIGxpbmsuc3Vic3RyaW5nKHBpcGUgKyAxKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsaW5rLnJlcGxhY2UoL1xcXFxcXHwvZywgXCJ8XCIpLCB1bmRlZmluZWRdO1xufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IHtcbiAgICBCaW5hcnlPcCxcbiAgICBFeHByZXNzaW9uLFxuICAgIEV4cHJlc3Npb25zLFxuICAgIExhbWJkYUV4cHJlc3Npb24sXG4gICAgTGlzdEV4cHJlc3Npb24sXG4gICAgTGl0ZXJhbEV4cHJlc3Npb24sXG4gICAgT2JqZWN0RXhwcmVzc2lvbixcbiAgICBWYXJpYWJsZUV4cHJlc3Npb24sXG59IGZyb20gXCIuL2V4cHJlc3Npb25cIjtcbmltcG9ydCBlbW9qaVJlZ2V4IGZyb20gXCJlbW9qaS1yZWdleFwiO1xuaW1wb3J0IHtcbiAgICBJbmRleENoaWxkT2YsXG4gICAgSW5kZXhQYXRoLFxuICAgIEluZGV4SWQsXG4gICAgSW5kZXhOb3QsXG4gICAgSW5kZXhQYXJlbnRPZixcbiAgICBJbmRleFF1ZXJ5LFxuICAgIEluZGV4VGFnZ2VkLFxuICAgIEluZGV4VHlwZWQsXG4gICAgSW5kZXhMaW5rZWQsXG4gICAgSW5kZXhGaWVsZCxcbiAgICBJbmRleEV4cHJlc3Npb24sXG59IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgbm9ybWFsaXplRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUGFyc2luZyBQcmltaXRpdmVzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFByaW1pdGl2ZSBwYXJzaW5nIGZvciBjb21tb25seSBzZWVuIHR5cGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmltaXRpdmVzTGFuZ3VhZ2Uge1xuICAgIG51bWJlcjogbnVtYmVyO1xuICAgIHN0cmluZzogc3RyaW5nO1xuICAgIGVzY2FwZUNoYXJhY3Rlcjogc3RyaW5nO1xuICAgIGJvb2w6IGJvb2xlYW47XG4gICAgdGFnOiBzdHJpbmc7XG4gICAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAgIGxpbms6IExpbms7XG4gICAgZW1iZWRMaW5rOiBMaW5rO1xuICAgIHJvb3REYXRlOiBEYXRlVGltZTtcbiAgICBkYXRlU2hvcnRoYW5kOiBrZXlvZiB0eXBlb2YgREFURV9TSE9SVEhBTkRTO1xuICAgIGRhdGU6IERhdGVUaW1lO1xuICAgIGRhdGVQbHVzOiBEYXRlVGltZTtcbiAgICBkdXJhdGlvblR5cGU6IGtleW9mIHR5cGVvZiBEVVJBVElPTl9UWVBFUztcbiAgICBkdXJhdGlvbjogRHVyYXRpb247XG4gICAgcmF3TnVsbDogc3RyaW5nO1xuXG4gICAgYmluYXJ5UGx1c01pbnVzOiBCaW5hcnlPcDtcbiAgICBiaW5hcnlNdWxEaXY6IEJpbmFyeU9wO1xuICAgIGJpbmFyeUNvbXBhcmVPcDogQmluYXJ5T3A7XG4gICAgYmluYXJ5QW5kT3A6IEJpbmFyeU9wO1xuICAgIGJpbmFyeU9yT3A6IEJpbmFyeU9wO1xuXG4gICAgLy8gTGl0ZXJhbCBmaWVsZCBwYXJzaW5nIGZvciBpbmdlc3RpbmcgaW5saW5lIGZpZWxkcyBhbmQgZnJvbnRtYXR0ZXIuXG4gICAgYXRvbUlubGluZUZpZWxkOiBMaXRlcmFsO1xuICAgIGlubGluZUZpZWxkTGlzdDogTGl0ZXJhbFtdO1xuICAgIGlubGluZUZpZWxkOiBMaXRlcmFsO1xufVxuXG4vKiogSW1wbGVtZW50YXRpb25zIGZvciBtYW55IHByaW1pdGl2ZXMuICovXG5leHBvcnQgY29uc3QgUFJJTUlUSVZFUyA9IFAuY3JlYXRlTGFuZ3VhZ2U8UHJpbWl0aXZlc0xhbmd1YWdlPih7XG4gICAgbnVtYmVyOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoLy0/WzAtOV0rKFxcLlswLTldKyk/LylcbiAgICAgICAgICAgIC5tYXAoKHN0cikgPT4gTnVtYmVyLnBhcnNlRmxvYXQoc3RyKSlcbiAgICAgICAgICAgIC5kZXNjKFwibnVtYmVyXCIpLFxuXG4gICAgLy8gQSBxdW90ZS1zdXJyb3VuZGVkIHN0cmluZyB3aGljaCBzdXBwb3J0cyBlc2NhcGUgY2hhcmFjdGVycyAoJ1xcJykuXG4gICAgc3RyaW5nOiAocSkgPT5cbiAgICAgICAgUC5zdHJpbmcoJ1wiJylcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgIFAuYWx0KHEuZXNjYXBlQ2hhcmFjdGVyLCBQLm5vbmVPZignXCJcXFxcJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdExlYXN0KDApXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoYXJzKSA9PiBjaGFycy5qb2luKFwiXCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnNraXAoUC5zdHJpbmcoJ1wiJykpXG4gICAgICAgICAgICAuZGVzYyhcInN0cmluZ1wiKSxcblxuICAgIGVzY2FwZUNoYXJhY3RlcjogKF8pID0+XG4gICAgICAgIFAuc3RyaW5nKFwiXFxcXFwiKVxuICAgICAgICAgICAgLnRoZW4oUC5hbnkpXG4gICAgICAgICAgICAubWFwKChlc2NhcGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGVzY2FwaW5nIGEgYmFja3NsYXNoIG9yIGEgcXVvdGUsIHBhc3MgaW4gb24gaW4gZXNjYXBlZCBmb3JtXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09ICdcIicpIHJldHVybiAnXCInO1xuICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkID09PSBcIlxcXFxcIikgcmV0dXJuIFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFwiXFxcXFwiICsgZXNjYXBlZDtcbiAgICAgICAgICAgIH0pLFxuXG4gICAgLy8gQSBib29sZWFuIHRydWUvZmFsc2UgdmFsdWUuXG4gICAgYm9vbDogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC90cnVlfGZhbHNlfFRydWV8RmFsc2UvKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIudG9Mb3dlckNhc2UoKSA9PSBcInRydWVcIilcbiAgICAgICAgICAgIC5kZXNjKFwiYm9vbGVhblwiKSxcblxuICAgIC8vIEEgdGFnIG9mIHRoZSBmb3JtICcjc3R1ZmYvaGVsbG8tdGhlcmUnLlxuICAgIHRhZzogKF8pID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCIjXCIpLFxuICAgICAgICAgICAgUC5hbHQoUC5yZWdleHAoL1teXFx1MjAwMC1cXHUyMDZGXFx1MkUwMC1cXHUyRTdGJyFcIiMkJSYoKSorLC46Ozw9Pj9AXmB7fH1+XFxbXFxdXFxcXFxcc10vKS5kZXNjKFwidGV4dFwiKSkubWFueSgpLFxuICAgICAgICAgICAgKHN0YXJ0LCByZXN0KSA9PiBzdGFydCArIHJlc3Quam9pbihcIlwiKVxuICAgICAgICApLmRlc2MoXCJ0YWdcIiksXG5cbiAgICAvLyBBIHZhcmlhYmxlIGlkZW50aWZpZXIsIHdoaWNoIGlzIGFscGhhbnVtZXJpYyBhbmQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIG9yLi4uIGVtb2ppLlxuICAgIGlkZW50aWZpZXI6IChfKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFAuYWx0KFAucmVnZXhwKC9bXFxwe0xldHRlcn0kXS91KSwgUC5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoXCJ0ZXh0XCIpKSxcbiAgICAgICAgICAgIFAuYWx0KFAucmVnZXhwKC9bMC05XFxwe0xldHRlcn0kXy1dL3UpLCBQLnJlZ2V4cChFTU9KSV9SRUdFWCkuZGVzYyhcInRleHRcIikpLm1hbnkoKSxcbiAgICAgICAgICAgIChmaXJzdCwgcmVzdCkgPT4gZmlyc3QgKyByZXN0LmpvaW4oXCJcIilcbiAgICAgICAgKS5kZXNjKFwidmFyaWFibGVcIiksXG5cbiAgICAvLyBBbiBPYnNpZGlhbiBsaW5rIG9mIHRoZSBmb3JtIFtbPGxpbms+XV0uXG4gICAgbGluazogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXFtcXFsoW15cXFtcXF1dKj8pXFxdXFxdL3UsIDEpXG4gICAgICAgICAgICAubWFwKChsaW5rSW5uZXIpID0+IExpbmsucGFyc2VJbm5lcihsaW5rSW5uZXIpKVxuICAgICAgICAgICAgLmRlc2MoXCJmaWxlIGxpbmtcIiksXG5cbiAgICAvLyBBbiBlbWJlZGRhYmxlIGxpbmsgd2hpY2ggY2FuIHN0YXJ0IHdpdGggJyEnLiBUaGlzIG92ZXJsYXBzIHdpdGggdGhlIG5vcm1hbCBuZWdhdGlvbiBvcGVyYXRvciwgc28gaXQgaXMgb25seVxuICAgIC8vIHByb3ZpZGVkIGZvciBtZXRhZGF0YSBwYXJzaW5nLlxuICAgIGVtYmVkTGluazogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiIVwiKS5hdE1vc3QoMSksIHEubGluaywgKHAsIGwpID0+IHtcbiAgICAgICAgICAgIGlmIChwLmxlbmd0aCA+IDApIGwuZW1iZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgIH0pLmRlc2MoXCJmaWxlIGxpbmtcIiksXG5cbiAgICAvLyBCaW5hcnkgcGx1cyBvciBtaW51cyBvcGVyYXRvci5cbiAgICBiaW5hcnlQbHVzTWludXM6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvXFwrfC0vKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIicrJyBvciAnLSdcIiksXG5cbiAgICAvLyBCaW5hcnkgdGltZXMgb3IgZGl2aWRlIG9wZXJhdG9yLlxuICAgIGJpbmFyeU11bERpdjogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXCp8XFwvfCUvKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIicqJyBvciAnLycgb3IgJyUnXCIpLFxuXG4gICAgLy8gQmluYXJ5IGNvbXBhcmlzb24gb3BlcmF0b3IuXG4gICAgYmluYXJ5Q29tcGFyZU9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoLz49fDw9fCE9fD58PHw9LylcbiAgICAgICAgICAgIC5tYXAoKHN0cikgPT4gc3RyIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInPj0nIG9yICc8PScgb3IgJyE9JyBvciAnPScgb3IgJz4nIG9yICc8J1wiKSxcblxuICAgIC8vIEJpbmFyeSBib29sZWFuIGNvbWJpbmF0aW9uIG9wZXJhdG9yLlxuICAgIGJpbmFyeUFuZE9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL2FuZHwmL2kpXG4gICAgICAgICAgICAubWFwKChfc3RyKSA9PiBcIiZcIiBhcyBCaW5hcnlPcClcbiAgICAgICAgICAgIC5kZXNjKFwiJ2FuZCdcIiksXG4gICAgYmluYXJ5T3JPcDogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9vcnxcXHwvaSlcbiAgICAgICAgICAgIC5tYXAoKF9zdHIpID0+IFwifFwiIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInb3InXCIpLFxuXG4gICAgLy8gQSBkYXRlIHdoaWNoIGNhbiBiZSBZWVlZLU1NWy1ERFRISDptbTpzc10uXG4gICAgcm9vdERhdGU6IChfKSA9PlxuICAgICAgICBQLnNlcU1hcChQLnJlZ2V4cCgvXFxkezR9LyksIFAuc3RyaW5nKFwiLVwiKSwgUC5yZWdleHAoL1xcZHsyfS8pLCAoeWVhciwgXywgbW9udGgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogTnVtYmVyLnBhcnNlSW50KHllYXIpLCBtb250aDogTnVtYmVyLnBhcnNlSW50KG1vbnRoKSB9KTtcbiAgICAgICAgfSkuZGVzYyhcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXVwiKSxcbiAgICBkYXRlU2hvcnRoYW5kOiAoXykgPT5cbiAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhEQVRFX1NIT1JUSEFORFMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLm1hcChQLnN0cmluZylcbiAgICAgICAgKSBhcyBQLlBhcnNlcjxrZXlvZiB0eXBlb2YgREFURV9TSE9SVEhBTkRTPixcbiAgICBkYXRlOiAocSkgPT5cbiAgICAgICAgY2hhaW5PcHQ8RGF0ZVRpbWU+KFxuICAgICAgICAgICAgcS5yb290RGF0ZSxcbiAgICAgICAgICAgICh5bTogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCItXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBkYXkpID0+IHltLnNldCh7IGRheTogTnVtYmVyLnBhcnNlSW50KGRheSkgfSkpLFxuICAgICAgICAgICAgKHltZDogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCJUXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBob3VyKSA9PiB5bWQuc2V0KHsgaG91cjogTnVtYmVyLnBhcnNlSW50KGhvdXIpIH0pKSxcbiAgICAgICAgICAgICh5bWRoOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIjpcIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIG1pbnV0ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgeW1kaC5zZXQoeyBtaW51dGU6IE51bWJlci5wYXJzZUludChtaW51dGUpIH0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh5bWRobTogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCI6XCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBzZWNvbmQpID0+XG4gICAgICAgICAgICAgICAgICAgIHltZGhtLnNldCh7IHNlY29uZDogTnVtYmVyLnBhcnNlSW50KHNlY29uZCkgfSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHltZGhtczogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiLlwiKSwgUC5yZWdleHAoL1xcZHszfS8pLCAoXywgbWlsbGlzZWNvbmQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB5bWRobXMuc2V0KHsgbWlsbGlzZWNvbmQ6IE51bWJlci5wYXJzZUludChtaWxsaXNlY29uZCkgfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgUC5zdWNjZWVkKHltZGhtcykgLy8gcGFzc1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZHQ6IERhdGVUaW1lKSA9PlxuICAgICAgICAgICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIitcIikub3IoUC5zdHJpbmcoXCItXCIpKSwgUC5yZWdleHAoL1xcZHsxLDJ9KDpcXGR7Mn0pPy8pLCAocG0sIGhyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZHQuc2V0Wm9uZShcIlVUQ1wiICsgcG0gKyBociwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiWlwiKSwgKCkgPT4gZHQuc2V0Wm9uZShcInV0Y1wiLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkpLFxuICAgICAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIltcIiksIFAucmVnZXhwKC9bMC05QS1aYS16Ky1cXC9dKy91KSwgUC5zdHJpbmcoXCJdXCIpLCAoX2EsIHpvbmUsIF9iKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZHQuc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgICAgLmFzc2VydCgoZHQ6IERhdGVUaW1lKSA9PiBkdC5pc1ZhbGlkLCBcInZhbGlkIGRhdGVcIilcbiAgICAgICAgICAgIC5kZXNjKFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXCIpLFxuXG4gICAgLy8gQSBkYXRlLCBwbHVzIHZhcmlvdXMgc2hvcnRoYW5kIHRpbWVzIG9mIGRheSBpdCBjb3VsZCBiZS5cbiAgICBkYXRlUGx1czogKHEpID0+XG4gICAgICAgIFAuYWx0PERhdGVUaW1lPihcbiAgICAgICAgICAgIHEuZGF0ZVNob3J0aGFuZC5tYXAoKGQpID0+IERBVEVfU0hPUlRIQU5EU1tkXSgpKSxcbiAgICAgICAgICAgIHEuZGF0ZVxuICAgICAgICApLmRlc2MoXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10gb3IgaW4gc2hvcnRoYW5kXCIpLFxuXG4gICAgLy8gQSBkdXJhdGlvbiBvZiB0aW1lLlxuICAgIGR1cmF0aW9uVHlwZTogKF8pID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoRFVSQVRJT05fVFlQRVMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLm1hcChQLnN0cmluZylcbiAgICAgICAgKSBhcyBQLlBhcnNlcjxrZXlvZiB0eXBlb2YgRFVSQVRJT05fVFlQRVM+LFxuICAgIGR1cmF0aW9uOiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAocS5udW1iZXIsIFAub3B0V2hpdGVzcGFjZSwgcS5kdXJhdGlvblR5cGUsIChjb3VudCwgXywgdCkgPT5cbiAgICAgICAgICAgIERVUkFUSU9OX1RZUEVTW3RdLm1hcFVuaXRzKCh4KSA9PiB4ICogY291bnQpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5zZXBCeTEoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS5vcihQLm9wdFdoaXRlc3BhY2UpKVxuICAgICAgICAgICAgLm1hcCgoZHVyYXRpb25zKSA9PiBkdXJhdGlvbnMucmVkdWNlKChwLCBjKSA9PiBwLnBsdXMoYykpKVxuICAgICAgICAgICAgLmRlc2MoXCJkdXJhdGlvbiBsaWtlIDRocjJtaW5cIiksXG5cbiAgICAvLyBBIHJhdyBudWxsIHZhbHVlLlxuICAgIHJhd051bGw6IChfKSA9PiBQLnN0cmluZyhcIm51bGxcIiksXG5cbiAgICAvLyBJbmxpbmUgZmllbGQgdmFsdWUgcGFyc2luZy5cbiAgICBhdG9tSW5saW5lRmllbGQ6IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIHEuZGF0ZSxcbiAgICAgICAgICAgIHEuZHVyYXRpb24ubWFwKChkKSA9PiBub3JtYWxpemVEdXJhdGlvbihkKSksXG4gICAgICAgICAgICBxLnN0cmluZyxcbiAgICAgICAgICAgIHEudGFnLFxuICAgICAgICAgICAgcS5lbWJlZExpbmssXG4gICAgICAgICAgICBxLmJvb2wsXG4gICAgICAgICAgICBxLm51bWJlcixcbiAgICAgICAgICAgIHEucmF3TnVsbFxuICAgICAgICApLFxuICAgIGlubGluZUZpZWxkTGlzdDogKHEpID0+IHEuYXRvbUlubGluZUZpZWxkLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkubG9va2FoZWFkKHEuYXRvbUlubGluZUZpZWxkKSksXG4gICAgaW5saW5lRmllbGQ6IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIFAuc2VxTWFwKHEuYXRvbUlubGluZUZpZWxkLCBQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLCBxLmlubGluZUZpZWxkTGlzdCwgKGYsIF9zLCBsKSA9PlxuICAgICAgICAgICAgICAgIFtmXS5jb25jYXQobClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBxLmF0b21JbmxpbmVGaWVsZFxuICAgICAgICApLFxufSk7XG5cbi8qKiBFbW9qaSByZWdleCwgc3RycHBpbmcgYW55IHJlZ2V4IGZsYWdzIGl0IGhhcy4gKi9cbmNvbnN0IEVNT0pJX1JFR0VYID0gbmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksIFwiXCIpO1xuXG4vKiogUHJvdmlkZXMgYSBsb29rdXAgdGFibGUgZm9yIHVuaXQgZHVyYXRpb25zIG9mIHRoZSBnaXZlbiB0eXBlLiAqL1xuZXhwb3J0IGNvbnN0IERVUkFUSU9OX1RZUEVTID0ge1xuICAgIHllYXI6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSxcbiAgICB5ZWFyczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLFxuICAgIHlyOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG4gICAgeXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG5cbiAgICBtb250aDogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSxcbiAgICBtb250aHM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG4gICAgbW86IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG4gICAgbW9zOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLFxuXG4gICAgd2VlazogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLFxuICAgIHdlZWtzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG4gICAgd2s6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3a3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3OiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG5cbiAgICBkYXk6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuICAgIGRheXM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuICAgIGQ6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuXG4gICAgaG91cjogRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLFxuICAgIGhvdXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG4gICAgaHI6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBocnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBoOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG5cbiAgICBtaW51dGU6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLFxuICAgIG1pbnV0ZXM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLFxuICAgIG1pbjogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbWluczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbTogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG5cbiAgICBzZWNvbmQ6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLFxuICAgIHNlY29uZHM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLFxuICAgIHNlYzogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgc2VjczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG59O1xuXG4vKiogU2hvcnRoYW5kIGZvciBjb21tb24gZGF0ZXMgKHJlbGF0aXZlIHRvIHJpZ2h0IG5vdykuICovXG5leHBvcnQgY29uc3QgREFURV9TSE9SVEhBTkRTID0ge1xuICAgIG5vdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKSxcbiAgICB0b2RheTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwiZGF5XCIpLFxuICAgIHllc3RlcmRheTogKCkgPT5cbiAgICAgICAgRGF0ZVRpbWUubG9jYWwoKVxuICAgICAgICAgICAgLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgICAgICAgIC5taW51cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksXG4gICAgdG9tb3Jyb3c6ICgpID0+XG4gICAgICAgIERhdGVUaW1lLmxvY2FsKClcbiAgICAgICAgICAgIC5zdGFydE9mKFwiZGF5XCIpXG4gICAgICAgICAgICAucGx1cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksXG4gICAgc293OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJ3ZWVrXCIpLFxuICAgIFwic3RhcnQtb2Ytd2Vla1wiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJ3ZWVrXCIpLFxuICAgIGVvdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZihcIndlZWtcIiksXG4gICAgXCJlbmQtb2Ytd2Vla1wiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwid2Vla1wiKSxcbiAgICBzb3k6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcInllYXJcIiksXG4gICAgXCJzdGFydC1vZi15ZWFyXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcInllYXJcIiksXG4gICAgZW95OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwieWVhclwiKSxcbiAgICBcImVuZC1vZi15ZWFyXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJ5ZWFyXCIpLFxuICAgIHNvbTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwibW9udGhcIiksXG4gICAgXCJzdGFydC1vZi1tb250aFwiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJtb250aFwiKSxcbiAgICBlb206ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJtb250aFwiKSxcbiAgICBcImVuZC1vZi1tb250aFwiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwibW9udGhcIiksXG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBFeHByZXNzaW9uIExhbmd1YWdlIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFBvc3RmaXhGcmFnbWVudCA9XG4gICAgfCB7IHR5cGU6IFwiZG90XCI7IGV4cHI6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6IFwiaW5kZXhcIjsgZXhwcjogRXhwcmVzc2lvbiB9XG4gICAgfCB7IHR5cGU6IFwiZnVuY3Rpb25cIjsgZXhwcnM6IEV4cHJlc3Npb25bXSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cHJlc3Npb25MYW5ndWFnZSB7XG4gICAgdmFyaWFibGU6IFZhcmlhYmxlRXhwcmVzc2lvbjtcbiAgICBudW1iZXI6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIGJvb2w6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIHN0cmluZzogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgZGF0ZTogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgZHVyYXRpb246IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIGxpbms6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIG51bGw6IExpdGVyYWxFeHByZXNzaW9uO1xuXG4gICAgbGlzdDogTGlzdEV4cHJlc3Npb247XG4gICAgb2JqZWN0OiBPYmplY3RFeHByZXNzaW9uO1xuXG4gICAgbmVnYXRlZDogRXhwcmVzc2lvbjtcbiAgICBhdG9tOiBFeHByZXNzaW9uO1xuICAgIGluZGV4OiBFeHByZXNzaW9uO1xuICAgIGxhbWJkYTogTGFtYmRhRXhwcmVzc2lvbjtcblxuICAgIC8vIFBvc3RmaXggcGFyc2VycyBmb3IgZnVuY3Rpb24gY2FsbHMgJiB0aGUgbGlrZS5cbiAgICBkb3RQb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG4gICAgaW5kZXhQb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG4gICAgZnVuY3Rpb25Qb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG5cbiAgICAvLyBCaW5hcnkgb3AgcGFyc2Vycy5cbiAgICBiaW5hcnlNdWxEaXY6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5UGx1c01pbnVzOiBFeHByZXNzaW9uO1xuICAgIGJpbmFyeUNvbXBhcmU6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5Qm9vbGVhbjogRXhwcmVzc2lvbjtcbiAgICBiaW5hcnlPcDogRXhwcmVzc2lvbjtcbiAgICBwYXJlbnM6IEV4cHJlc3Npb247XG4gICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBQYXJzZSBmb3IgdGhlIGRhdGFjb3JlIGV4cHJlc3Npb24gbGFuZ3VhZ2UsIHdoaWNoIHByb3ZpZGVzIHNpbXBsZSBhbmQgdmFndWVseSBKUy1sb29raW5nIGNvbXB1dGF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgRVhQUkVTU0lPTiA9IFAuY3JlYXRlTGFuZ3VhZ2U8RXhwcmVzc2lvbkxhbmd1YWdlPih7XG4gICAgLy8gRmllbGQgcGFyc2luZy5cbiAgICB2YXJpYWJsZTogKF8pID0+IFBSSU1JVElWRVMuaWRlbnRpZmllci5tYXAoRXhwcmVzc2lvbnMudmFyaWFibGUpLmRlc2MoXCJ2YXJpYWJsZVwiKSxcbiAgICBudW1iZXI6IChfKSA9PiBQUklNSVRJVkVTLm51bWJlci5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCkuZGVzYyhcIm51bWJlclwiKSxcbiAgICBzdHJpbmc6IChfKSA9PiBQUklNSVRJVkVTLnN0cmluZy5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCkuZGVzYyhcInN0cmluZ1wiKSxcbiAgICBib29sOiAoXykgPT4gUFJJTUlUSVZFUy5ib29sLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKS5kZXNjKFwiYm9vbGVhblwiKSxcbiAgICBkYXRlOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oXCJkYXRlXCIsIFBSSU1JVElWRVMuZGF0ZVBsdXMpXG4gICAgICAgICAgICAubWFwKChbX2Z1bmMsIGRhdGVdKSA9PiBFeHByZXNzaW9ucy5saXRlcmFsKGRhdGUpKVxuICAgICAgICAgICAgLmRlc2MoXCJkYXRlXCIpLFxuICAgIGR1cmF0aW9uOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oXCJkdXJcIiwgUFJJTUlUSVZFUy5kdXJhdGlvbilcbiAgICAgICAgICAgIC5tYXAoKFtfZnVuYywgZHVyXSkgPT4gRXhwcmVzc2lvbnMubGl0ZXJhbChkdXIpKVxuICAgICAgICAgICAgLmRlc2MoXCJkdXJhdGlvblwiKSxcbiAgICBudWxsOiAoXykgPT4gUFJJTUlUSVZFUy5yYXdOdWxsLm1hcCgoXykgPT4gRXhwcmVzc2lvbnMuTlVMTCksXG4gICAgbGluazogKF8pID0+IFBSSU1JVElWRVMubGluay5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCksXG4gICAgbGlzdDogKHEpID0+XG4gICAgICAgIHEuZXhwcmVzc2lvblxuICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAud3JhcChQLnN0cmluZyhcIltcIikuc2tpcChQLm9wdFdoaXRlc3BhY2UpLCBQLm9wdFdoaXRlc3BhY2UudGhlbihQLnN0cmluZyhcIl1cIikpKVxuICAgICAgICAgICAgLm1hcCgobCkgPT4gRXhwcmVzc2lvbnMubGlzdChsKSlcbiAgICAgICAgICAgIC5kZXNjKFwibGlzdFwiKSxcbiAgICBvYmplY3Q6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFBSSU1JVElWRVMuaWRlbnRpZmllci5vcihQUklNSVRJVkVTLnN0cmluZyksXG4gICAgICAgICAgICBQLnN0cmluZyhcIjpcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLFxuICAgICAgICAgICAgKG5hbWUsIF9zZXAsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAud3JhcChQLnN0cmluZyhcIntcIikuc2tpcChQLm9wdFdoaXRlc3BhY2UpLCBQLm9wdFdoaXRlc3BhY2UudGhlbihQLnN0cmluZyhcIn1cIikpKVxuICAgICAgICAgICAgLm1hcCgodmFscykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgdmFscykgcmVzW2VudHJ5Lm5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEV4cHJlc3Npb25zLm9iamVjdChyZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kZXNjKFwib2JqZWN0ICgneyBhOiAxLCBiOiAyIH0nKVwiKSxcblxuICAgIGF0b206IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIC8vIFBsYWNlIGVtYmVkIGxpbmtzIGFib3ZlIG5lZ2F0ZWQgZmllbGRzIGFzIHRoZXkgYXJlIHRoZSBzcGVjaWFsIHBhcnNlciBjYXNlICchW1t0aGluZ11dJyBhbmQgYXJlIGdlbmVyYWxseSB1bmFtYmlnaW91cy5cbiAgICAgICAgICAgIFBSSU1JVElWRVMuZW1iZWRMaW5rLm1hcCgobCkgPT4gRXhwcmVzc2lvbnMubGl0ZXJhbChsKSksXG4gICAgICAgICAgICBxLm5lZ2F0ZWQsXG4gICAgICAgICAgICBxLmxpbmssXG4gICAgICAgICAgICBxLmxpc3QsXG4gICAgICAgICAgICBxLm9iamVjdCxcbiAgICAgICAgICAgIHEubGFtYmRhLFxuICAgICAgICAgICAgcS5wYXJlbnMsXG4gICAgICAgICAgICBxLmJvb2wsXG4gICAgICAgICAgICBxLm51bWJlcixcbiAgICAgICAgICAgIHEuc3RyaW5nLFxuICAgICAgICAgICAgcS5kYXRlLFxuICAgICAgICAgICAgcS5kdXJhdGlvbixcbiAgICAgICAgICAgIHEubnVsbCxcbiAgICAgICAgICAgIHEudmFyaWFibGVcbiAgICAgICAgKSxcbiAgICBpbmRleDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKHEuYXRvbSwgUC5hbHQocS5kb3RQb3N0Zml4LCBxLmluZGV4UG9zdGZpeCwgcS5mdW5jdGlvblBvc3RmaXgpLm1hbnkoKSwgKG9iaiwgcG9zdGZpeGVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JqO1xuICAgICAgICAgICAgZm9yIChsZXQgcG9zdCBvZiBwb3N0Zml4ZXMpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZG90XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIEV4cHJlc3Npb25zLmxpdGVyYWwocG9zdC5leHByKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluZGV4XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIHBvc3QuZXhwcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5mdW5jKHJlc3VsdCwgcG9zdC5leHBycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pLFxuICAgIG5lZ2F0ZWQ6IChxKSA9PiBQLnNlcU1hcChQLnN0cmluZyhcIiFcIiksIHEuaW5kZXgsIChfLCBmaWVsZCkgPT4gRXhwcmVzc2lvbnMubmVnYXRlKGZpZWxkKSkuZGVzYyhcIm5lZ2F0ZWQgZmllbGRcIiksXG4gICAgcGFyZW5zOiAocSkgPT4gcS5leHByZXNzaW9uLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS53cmFwKFAuc3RyaW5nKFwiKFwiKSwgUC5zdHJpbmcoXCIpXCIpKSxcbiAgICBsYW1iZGE6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFBSSU1JVElWRVMuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIC5zZXBCeShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpKVxuICAgICAgICAgICAgICAgIC53cmFwKFAuc3RyaW5nKFwiKFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksIFAuc3RyaW5nKFwiKVwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCI9PlwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksXG4gICAgICAgICAgICBxLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAoaWRlbnQsIF9pZ25vcmUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsYW1iZGFcIiwgYXJndW1lbnRzOiBpZGVudCwgdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcblxuICAgIGRvdFBvc3RmaXg6IChxKSA9PiBQLnNlcU1hcChQLnN0cmluZyhcIi5cIiksIFBSSU1JVElWRVMuaWRlbnRpZmllciwgKF8sIGV4cHIpID0+ICh7IHR5cGU6IFwiZG90XCIsIGV4cHIgfSkpLFxuICAgIGluZGV4UG9zdGZpeDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCJbXCIpLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCJdXCIpLFxuICAgICAgICAgICAgKF8sIF8yLCBleHByLCBfMywgXzQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImluZGV4XCIsIGV4cHIgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICBmdW5jdGlvblBvc3RmaXg6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiKFwiKSxcbiAgICAgICAgICAgIFAub3B0V2hpdGVzcGFjZSxcbiAgICAgICAgICAgIHEuZXhwcmVzc2lvbi5zZXBCeShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpKSxcbiAgICAgICAgICAgIFAub3B0V2hpdGVzcGFjZSxcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiKVwiKSxcbiAgICAgICAgICAgIChfLCBfMSwgZXhwcnMsIF8yLCBfMykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiZnVuY3Rpb25cIiwgZXhwcnMgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcblxuICAgIC8vIFRoZSBwcmVjZWRlbmNlIGhpZXJhcmNoeSBvZiBvcGVyYXRvcnMgLSBtdWx0aXBseS9kaXZpZGUsIGFkZC9zdWJ0cmFjdCwgY29tcGFyZSwgYW5kIHRoZW4gYm9vbGVhbiBvcGVyYXRpb25zLlxuICAgIGJpbmFyeU11bERpdjogKHEpID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmluZGV4LCBQUklNSVRJVkVTLmJpbmFyeU11bERpdiwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeVBsdXNNaW51czogKHEpID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeU11bERpdiwgUFJJTUlUSVZFUy5iaW5hcnlQbHVzTWludXMsIEV4cHJlc3Npb25zLmJpbmFyeU9wKSxcbiAgICBiaW5hcnlDb21wYXJlOiAocSkgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5UGx1c01pbnVzLCBQUklNSVRJVkVTLmJpbmFyeUNvbXBhcmVPcCwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeUJvb2xlYW46IChxKSA9PlxuICAgICAgICBjcmVhdGVCaW5hcnlQYXJzZXIocS5iaW5hcnlDb21wYXJlLCBQUklNSVRJVkVTLmJpbmFyeUFuZE9wLm9yKFBSSU1JVElWRVMuYmluYXJ5T3JPcCksIEV4cHJlc3Npb25zLmJpbmFyeU9wKSxcbiAgICBiaW5hcnlPcDogKHEpID0+IHEuYmluYXJ5Qm9vbGVhbixcblxuICAgIGV4cHJlc3Npb246IChxKSA9PiBxLmJpbmFyeU9wLFxufSk7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBRdWVyeSBMYW5ndWFnZSAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFN1cHBvcnRlZCB0eXBlcyBpbiB0aGUgZ3JhbW1hciBmb3IgaW5kZXggcXVlcmllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlMYW5ndWFnZSB7XG4gICAgcXVlcnlUYWc6IEluZGV4VGFnZ2VkO1xuICAgIHF1ZXJ5SWQ6IEluZGV4SWQ7XG4gICAgcXVlcnlUeXBlOiBJbmRleFR5cGVkO1xuICAgIHF1ZXJ5UGF0aDogSW5kZXhQYXRoO1xuICAgIHF1ZXJ5UGFyZW50T2Y6IEluZGV4UGFyZW50T2Y7XG4gICAgcXVlcnlDaGlsZE9mOiBJbmRleENoaWxkT2Y7XG4gICAgcXVlcnlTaW1wbGVMaW5rZWQ6IEluZGV4TGlua2VkO1xuICAgIHF1ZXJ5TGlua2VkOiBJbmRleExpbmtlZDtcbiAgICBxdWVyeUV4aXN0czogSW5kZXhGaWVsZDtcbiAgICBxdWVyeVF1b3RlZEV4cHJlc3Npb246IEluZGV4RXhwcmVzc2lvbjtcbiAgICBxdWVyeVJhd0V4cHJlc3Npb246IEluZGV4RXhwcmVzc2lvbjtcbiAgICBxdWVyeU5lZ2F0ZTogSW5kZXhOb3Q7XG4gICAgcXVlcnlQYXJlbnM6IEluZGV4UXVlcnk7XG4gICAgcXVlcnlBdG9tOiBJbmRleFF1ZXJ5O1xuICAgIHF1ZXJ5QW5kczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeU9yczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeTogSW5kZXhRdWVyeTtcbn1cblxuLyoqXG4gKiBQYXJzZXIgZm9yIHRoZSBxdWVyeSBsYW5ndWFnZS4gRGlkIEkgcmVhbGx5IG5lZWQgYSBxdWVyeSBsYW5ndWFnZSBpbnN0ZWFkIG9mIGp1c3QgYSBiZXR0ZXIgVUk/IFByb2JhYmx5IG5vdC5cbiAqIEJ1dCBxdWVyeSBsYW5ndWFnZXMgYXJlIGZ1biBmb3IgdGhlIHdob2xlIGZhbWlseSBhbmQgYXQgc29tZSBwb2ludCB5b3UgZ2V0IHNvIHVzZWQgdG8gd3JpdGluZyB0aGVtIHRoYXRcbiAqIHlvdSBkb24ndCBzdG9wIHRvIHRoaW5rIGlmIHlvdSAqbmVlZCogdG8gd3JpdGUgdGhlbSBhbnltb3JlLiBJdCdzIGdvb2QgdHlwaW5nIHByYWN0aWNlIGZvciBldmVyeW9uZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVRVJZID0gUC5jcmVhdGVMYW5ndWFnZTxRdWVyeUxhbmd1YWdlPih7XG4gICAgcXVlcnlUYWc6IChfKSA9PiBQUklNSVRJVkVTLnRhZy5tYXAoKHZhbHVlKSA9PiAoeyB0eXBlOiBcInRhZ2dlZFwiLCB2YWx1ZSB9KSksXG4gICAgcXVlcnlJZDogKF8pID0+IGNyZWF0ZUZ1bmN0aW9uKFwiaWRcIiwgUFJJTUlUSVZFUy5zdHJpbmcpLm1hcCgoW18sIGlkXSkgPT4gKHsgdHlwZTogXCJpZFwiLCB2YWx1ZTogaWQgfSkpLFxuICAgIHF1ZXJ5VHlwZTogKF8pID0+XG4gICAgICAgIFAuc3RyaW5nKFwiQFwiKVxuICAgICAgICAgICAgLnRoZW4oUFJJTUlUSVZFUy5pZGVudGlmaWVyKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7IHR5cGU6IFwidHlwZWRcIiwgdmFsdWU6IHZhbHVlIH0pKSxcblxuICAgIHF1ZXJ5UGF0aDogKF8pID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9lP3BhdGgvaSkuZGVzYyhcIltlXXBhdGhcIiksIFBSSU1JVElWRVMuc3RyaW5nKS5tYXAoKFtmdW5jLCBwYXRoXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwicGF0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHBhdGgsXG4gICAgICAgICAgICBleGFjdDogZnVuYy50b0xvd2VyQ2FzZSgpID09PSBcImVwYXRoXCIsXG4gICAgICAgIH0pKSxcblxuICAgIHF1ZXJ5UGFyZW50T2Y6IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvcGFyZW50b2Z8c3VwZXJ0cmVlL2kpLmRlc2MoXCJwYXJlbnRvZlwiKSwgcS5xdWVyeSkubWFwKChbZnVuYywgY2hpbGRyZW5dKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJwYXJlbnQtb2ZcIixcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmdW5jLnRvTG93ZXJDYXNlKCkgPT09IFwic3VwZXJ0cmVlXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUNoaWxkT2Y6IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvY2hpbGRvZnxzdWJ0cmVlL2kpLmRlc2MoXCJjaGlsZG9mXCIpLCBxLnF1ZXJ5KS5tYXAoKFtmdW5jLCBwYXJlbnRzXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY2hpbGQtb2ZcIixcbiAgICAgICAgICAgIHBhcmVudHMsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PT0gXCJzdWJ0cmVlXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeVNpbXBsZUxpbmtlZDogKF8pID0+XG4gICAgICAgIFBSSU1JVElWRVMubGluay5tYXAoKGxpbmspID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcImxpbmtlZFwiLFxuICAgICAgICAgICAgc291cmNlOiB7IHR5cGU6IFwibGlua1wiLCB2YWx1ZTogbGluayB9LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBcImluY29taW5nXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUxpbmtlZDogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9saW5rc3RvfGxpbmtlZGZyb218Y29ubmVjdGVkL2kpLmRlc2MoXCJjb25uZWN0ZWRcIiksIHEucXVlcnkpLm1hcCgoW2Z1bmMsIHNvdXJjZV0pID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcImxpbmtlZFwiLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgZGlyZWN0aW9uOlxuICAgICAgICAgICAgICAgIGZ1bmMudG9Mb3dlckNhc2UoKSA9PSBcImxpbmtzdG9cIiA/IFwiaW5jb21pbmdcIiA6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PSBcImxpbmtlZGZyb21cIiA/IFwib3V0Z29pbmdcIiA6IFwiYm90aFwiLFxuICAgICAgICB9KSksXG4gICAgcXVlcnlFeGlzdHM6IChfKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvZXhpc3RzL2kpLmRlc2MoXCJleGlzdHNcIiksIFBSSU1JVElWRVMuaWRlbnRpZmllci5vcihQUklNSVRJVkVTLnN0cmluZykpLm1hcChcbiAgICAgICAgICAgIChbX2Z1bmMsIGlkZW50XSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZpZWxkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGlkZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICBxdWVyeVF1b3RlZEV4cHJlc3Npb246IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvZXhwci9pKS5kZXNjKFwiZXhwclwiKSwgRVhQUkVTU0lPTi5leHByZXNzaW9uKS5tYXAoKFtfLCBleHByXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5UmF3RXhwcmVzc2lvbjogKHEpID0+IEVYUFJFU1NJT04uYmluYXJ5Q29tcGFyZS5tYXAoKGV4cHIpID0+ICh7IHR5cGU6IFwiZXhwcmVzc2lvblwiLCBleHByZXNzaW9uOiBleHByIH0pKSxcblxuICAgIHF1ZXJ5UGFyZW5zOiAocSkgPT4gcS5xdWVyeS50cmltKFAub3B0V2hpdGVzcGFjZSkud3JhcChQLnN0cmluZyhcIihcIiksIFAuc3RyaW5nKFwiKVwiKSksXG4gICAgcXVlcnlOZWdhdGU6IChxKSA9PlxuICAgICAgICBQLnN0cmluZyhcIiFcIilcbiAgICAgICAgICAgIC5za2lwKFAub3B0V2hpdGVzcGFjZSlcbiAgICAgICAgICAgIC50aGVuKHEucXVlcnlBdG9tKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJub3RcIixcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB2YWx1ZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICBxdWVyeUF0b206IChxKSA9PlxuICAgICAgICBQLmFsdDxJbmRleFF1ZXJ5PihcbiAgICAgICAgICAgIHEucXVlcnlQYXJlbnMsXG4gICAgICAgICAgICBxLnF1ZXJ5TmVnYXRlLFxuICAgICAgICAgICAgcS5xdWVyeVNpbXBsZUxpbmtlZCxcbiAgICAgICAgICAgIHEucXVlcnlUYWcsXG4gICAgICAgICAgICBxLnF1ZXJ5VHlwZSxcbiAgICAgICAgICAgIHEucXVlcnlJZCxcbiAgICAgICAgICAgIHEucXVlcnlFeGlzdHMsXG4gICAgICAgICAgICBxLnF1ZXJ5Q2hpbGRPZixcbiAgICAgICAgICAgIHEucXVlcnlQYXJlbnRPZixcbiAgICAgICAgICAgIHEucXVlcnlMaW5rZWQsXG4gICAgICAgICAgICBxLnF1ZXJ5UGF0aCxcbiAgICAgICAgICAgIHEucXVlcnlRdW90ZWRFeHByZXNzaW9uLFxuICAgICAgICAgICAgLy8gRXhwcmVzc2lvbnMgYXJlIGVzc2VudGlhbGx5IHRoZSBcImNhdGNoLWFsbFwiIG9mIG90aGVyd2lzZSB1bnBhcnNlYWJsZSB0ZXJtcywgc28gdGhleSBzaG91bGQgZ28gYWJzb2x1dGUgbGFzdC5cbiAgICAgICAgICAgIHEucXVlcnlSYXdFeHByZXNzaW9uXG4gICAgICAgICksXG4gICAgcXVlcnlBbmRzOiAocSkgPT5cbiAgICAgICAgY3JlYXRlQmluYXJ5UGFyc2VyKHEucXVlcnlBdG9tLCBQUklNSVRJVkVTLmJpbmFyeUFuZE9wLCAobGVmdCwgX29wLCByaWdodCkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiYW5kXCIsXG4gICAgICAgICAgICBlbGVtZW50czogW2xlZnQsIHJpZ2h0XSxcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5T3JzOiAocSkgPT5cbiAgICAgICAgY3JlYXRlQmluYXJ5UGFyc2VyKHEucXVlcnlBbmRzLCBQUklNSVRJVkVTLmJpbmFyeU9yT3AsIChsZWZ0LCBfb3AsIHJpZ2h0KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJvclwiLFxuICAgICAgICAgICAgZWxlbWVudHM6IFtsZWZ0LCByaWdodF0sXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeTogKHEpID0+IHEucXVlcnlPcnMudHJpbShQLm9wdFdoaXRlc3BhY2UpLFxufSk7XG5cbi8qKiBSZXR1cm4gYSBuZXcgcGFyc2VyIHdoaWNoIGV4ZWN1dGVzIHRoZSB1bmRlcmx5aW5nIHBhcnNlciBhbmQgcmV0dXJucyBpdCdzIHJhdyBzdHJpbmcgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZVJhdzxUPihiYXNlOiBQLlBhcnNlcjxUPik6IFAuUGFyc2VyPFtULCBzdHJpbmddPiB7XG4gICAgcmV0dXJuIFAuY3VzdG9tKChfc3VjY2VzcywgX2ZhaWx1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IChiYXNlIGFzIGFueSkuXyhpbnB1dCwgaSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGF0dXMpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZXN1bHQsIHsgdmFsdWU6IFtyZXN1bHQudmFsdWUsIGlucHV0LnN1YnN0cmluZyhpLCByZXN1bHQuaW5kZXgpXSB9KTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuLyoqIENyZWF0ZSBhIGxlZnQtYXNzb2NpYXRpdmUgYmluYXJ5IHBhcnNlciB3aGljaCBwYXJzZXMgdGhlIGdpdmVuIHN1Yi1lbGVtZW50IGFuZCBzZXBhcmF0b3IuIEhhbmRsZXMgd2hpdGVzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCaW5hcnlQYXJzZXI8VCwgVT4oXG4gICAgY2hpbGQ6IFAuUGFyc2VyPFQ+LFxuICAgIHNlcDogUC5QYXJzZXI8VT4sXG4gICAgY29tYmluZTogKGE6IFQsIGI6IFUsIGM6IFQpID0+IFRcbik6IFAuUGFyc2VyPFQ+IHtcbiAgICByZXR1cm4gUC5zZXFNYXAoY2hpbGQsIFAuc2VxKFAub3B0V2hpdGVzcGFjZSwgc2VwLCBQLm9wdFdoaXRlc3BhY2UsIGNoaWxkKS5tYW55KCksIChmaXJzdCwgcmVzdCkgPT4ge1xuICAgICAgICBpZiAocmVzdC5sZW5ndGggPT0gMCkgcmV0dXJuIGZpcnN0O1xuXG4gICAgICAgIGxldCBub2RlID0gY29tYmluZShmaXJzdCwgcmVzdFswXVsxXSwgcmVzdFswXVszXSk7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgbm9kZSA9IGNvbWJpbmUobm9kZSwgcmVzdFtpbmRleF1bMV0sIHJlc3RbaW5kZXhdWzNdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXJzZXIgd2hpY2ggcGFyc2VzIFxcPGZ1bmN0aW9uXFw+KFxcPGFyZ3NcXD4pLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbjxUPihmdW5jOiBzdHJpbmcgfCBQLlBhcnNlcjxzdHJpbmc+LCBhcmdzOiBQLlBhcnNlcjxUPik6IFAuUGFyc2VyPFtzdHJpbmcsIFRdPiB7XG4gICAgY29uc3QgcmVhbEZ1bmMgPSB0eXBlb2YgZnVuYyA9PT0gXCJzdHJpbmdcIiA/IFAuc3RyaW5nKGZ1bmMpIDogZnVuYztcbiAgICByZXR1cm4gUC5zZXFNYXAoXG4gICAgICAgIHJlYWxGdW5jLnNraXAoUC5vcHRXaGl0ZXNwYWNlKSxcbiAgICAgICAgYXJncy50cmltKFAub3B0V2hpdGVzcGFjZSkud3JhcChQLnN0cmluZyhcIihcIiksIFAuc3RyaW5nKFwiKVwiKSksXG4gICAgICAgIChmLCBhKSA9PiBbZiwgYV1cbiAgICApO1xufVxuXG4vKiogQ2hhaW5zIGEgbGlzdCBvZiBwYXJzZXJzOyB0aGUgZmlyc3Qgb25lIG11c3Qgc3VjY2VlZCwgYnV0IGZvbGxvd2luZyBvbmVzIG1heSBmYWlsIHdpdGhvdXQgZmFpbGluZyB0aGUgb3ZlcmFsbCBwYXJzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbk9wdDxUPihiYXNlOiBQLlBhcnNlcjxUPiwgLi4uZnVuY3M6ICgocjogVCkgPT4gUC5QYXJzZXI8VD4pW10pOiBQLlBhcnNlcjxUPiB7XG4gICAgcmV0dXJuIFAuY3VzdG9tKChfc3VjY2VzcywgX2ZhaWx1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IChiYXNlIGFzIGFueSkuXyhpbnB1dCwgaSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGF0dXMpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IChmdW5jKHJlc3VsdC52YWx1ZSBhcyBUKSBhcyBhbnkpLl8oaW5wdXQsIHJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0LnN0YXR1cykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGV4cHJlc3Npb25zXG4gKi9cbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IHJlbmRlck1pbmltYWxEYXRlLCByZW5kZXJNaW5pbWFsRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLy8gUmUtZXhwb3J0cyBvZiB1c2VmdWwgZ2VuZXJpYyB0eXBlcy5cbmV4cG9ydCB7IExpbmsgfTtcblxuLyoqIFNob3J0aGFuZCBmb3IgYSBtYXBwaW5nIGZyb20ga2V5cyB0byB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBEYXRhT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgYW55Pjtcbi8qKiBUaGUgbGl0ZXJhbCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIHF1ZXJ5IGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIExpdGVyYWxUeXBlID1cbiAgICB8IFwiYm9vbGVhblwiXG4gICAgfCBcIm51bWJlclwiXG4gICAgfCBcInN0cmluZ1wiXG4gICAgfCBcImRhdGVcIlxuICAgIHwgXCJkdXJhdGlvblwiXG4gICAgfCBcImxpbmtcIlxuICAgIHwgXCJhcnJheVwiXG4gICAgfCBcIm9iamVjdFwiXG4gICAgfCBcImZ1bmN0aW9uXCJcbiAgICB8IFwibnVsbFwiO1xuLyoqIFRoZSByYXcgdmFsdWVzIHRoYXQgYSBsaXRlcmFsIGNhbiB0YWtlIG9uLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbCA9XG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgRGF0ZVRpbWVcbiAgICB8IER1cmF0aW9uXG4gICAgfCBMaW5rXG4gICAgfCBBcnJheTxMaXRlcmFsPlxuICAgIHwgRGF0YU9iamVjdFxuICAgIHwgRnVuY3Rpb25cbiAgICB8IG51bGw7XG5cbi8qKiBNYXBzIHRoZSBzdHJpbmcgdHlwZSB0byBpdCdzIGV4dGVybmFsLCBBUEktZmFjaW5nIHJlcHJlc2VudGF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFJlcHI8VCBleHRlbmRzIExpdGVyYWxUeXBlPiA9IFQgZXh0ZW5kcyBcImJvb2xlYW5cIlxuICAgID8gYm9vbGVhblxuICAgIDogVCBleHRlbmRzIFwibnVtYmVyXCJcbiAgICA/IG51bWJlclxuICAgIDogVCBleHRlbmRzIFwic3RyaW5nXCJcbiAgICA/IHN0cmluZ1xuICAgIDogVCBleHRlbmRzIFwiZHVyYXRpb25cIlxuICAgID8gRHVyYXRpb25cbiAgICA6IFQgZXh0ZW5kcyBcImRhdGVcIlxuICAgID8gRGF0ZVRpbWVcbiAgICA6IFQgZXh0ZW5kcyBcIm51bGxcIlxuICAgID8gbnVsbFxuICAgIDogVCBleHRlbmRzIFwibGlua1wiXG4gICAgPyBMaW5rXG4gICAgOiBUIGV4dGVuZHMgXCJhcnJheVwiXG4gICAgPyBBcnJheTxMaXRlcmFsPlxuICAgIDogVCBleHRlbmRzIFwib2JqZWN0XCJcbiAgICA/IERhdGFPYmplY3RcbiAgICA6IFQgZXh0ZW5kcyBcImZ1bmN0aW9uXCJcbiAgICA/IEZ1bmN0aW9uXG4gICAgOiBhbnk7XG5cbi8qKiBBIHdyYXBwZWQgbGl0ZXJhbCB2YWx1ZSB3aGljaCBjYW4gYmUgc3dpdGNoZWQgb24uICovXG5leHBvcnQgdHlwZSBXcmFwcGVkTGl0ZXJhbCA9XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcInN0cmluZ1wiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJudW1iZXJcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiYm9vbGVhblwiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJkYXRlXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImR1cmF0aW9uXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImxpbmtcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiYXJyYXlcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwib2JqZWN0XCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImZ1bmN0aW9uXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcIm51bGxcIj47XG5cbi8qKiBDb21iaW5lcyBhIHRleHR1YWwgdHlwZSBhbmQgdmFsdWU7IHByaW1hcmlseSB1c2VmdWwgZm9yIHN3aXRjaGluZyBvbi5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXRlcmFsV3JhcHBlcjxUIGV4dGVuZHMgTGl0ZXJhbFR5cGU+IHtcbiAgICB0eXBlOiBUO1xuICAgIHZhbHVlOiBMaXRlcmFsUmVwcjxUPjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgVXRpbGl0eSBsaWJyYXJ5IGZvciBoYW5kbGluZyBsaXRlcmFsIHZhbHVlcy4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgTGl0ZXJhbHMge1xuICAgIC8qKiBTZXR0aW5ncyB1c2VkIHdoZW4gZm9ybWF0dGluZyBsaXRlcmFsIHZhbHVlcyB0byB0ZXh0LiAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVG9TdHJpbmdTZXR0aW5ncyB7XG4gICAgICAgIC8qKiBXaGF0IGEgbnVsbCB3aWxsIHJlbmRlciBhcy4gKi9cbiAgICAgICAgbnVsbFJlcHJlc2VudGF0aW9uOiBzdHJpbmc7XG5cbiAgICAgICAgLyoqIERhdGUgZm9ybWF0LiAqL1xuICAgICAgICBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgICAgICAgLyoqIERhdGUtdGltZSBmb3JtYXQuICovXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqIFNhbmUsIEVuZ2xpc2gtYmFzZWQgZGVmYXVsdHMgZm9yIGRhdGUgZm9ybWF0cy4gKi9cbiAgICBleHBvcnQgY29uc3QgREVGQVVMVF9UT19TVFJJTkc6IFRvU3RyaW5nU2V0dGluZ3MgPSB7XG4gICAgICAgIG51bGxSZXByZXNlbnRhdGlvbjogXCItXCIsXG5cbiAgICAgICAgZGF0ZUZvcm1hdDogXCJNTU1NIGRkLCB5eXl5XCIsXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcIixcbiAgICB9O1xuXG4gICAgLyoqIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlIGludG8gYSByZWFzb25hYmxlLCBNYXJrZG93bi1mcmllbmRseSBzdHJpbmcgaWYgcG9zc2libGUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKFxuICAgICAgICBmaWVsZDogYW55LFxuICAgICAgICBzZXR0aW5nOiBUb1N0cmluZ1NldHRpbmdzID0gREVGQVVMVF9UT19TVFJJTkcsXG4gICAgICAgIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwVmFsdWUoZmllbGQpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBzZXR0aW5nLm51bGxSZXByZXNlbnRhdGlvbjtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZy5udWxsUmVwcmVzZW50YXRpb247XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIjxmdW5jdGlvbj5cIjtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpIHJlc3VsdCArPSBcIltcIjtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd3JhcHBlZC52YWx1ZS5tYXAoKGYpID0+IHRvU3RyaW5nKGYsIHNldHRpbmcsIHRydWUpKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgcmVzdWx0ICs9IFwiXVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgXCJ7IFwiICtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMod3JhcHBlZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGUpID0+IGVbMF0gKyBcIjogXCIgKyB0b1N0cmluZyhlWzFdLCBzZXR0aW5nLCB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIiB9XCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyTWluaW1hbERhdGUod3JhcHBlZC52YWx1ZSwgc2V0dGluZy5kYXRlRm9ybWF0LCBzZXR0aW5nLmRhdGVUaW1lRm9ybWF0KTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNaW5pbWFsRHVyYXRpb24od3JhcHBlZC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogV3JhcCBhIGxpdGVyYWwgdmFsdWUgc28geW91IGNhbiBzd2l0Y2ggb24gaXQgZWFzaWx5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB3cmFwVmFsdWUodmFsOiBMaXRlcmFsKTogV3JhcHBlZExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNOdWxsKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibnVsbFwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJzdHJpbmdcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW4odmFsKSkgcmV0dXJuIHsgdHlwZTogXCJib29sZWFuXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNEdXJhdGlvbih2YWwpKSByZXR1cm4geyB0eXBlOiBcImR1cmF0aW9uXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZGF0ZVwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJhcnJheVwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzTGluayh2YWwpKSByZXR1cm4geyB0eXBlOiBcImxpbmtcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZnVuY3Rpb25cIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc09iamVjdCh2YWwpKSByZXR1cm4geyB0eXBlOiBcIm9iamVjdFwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgbWFwIGNvbXBsZXggb2JqZWN0cyBhdCB0aGUgbGVhdmVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtYXBMZWF2ZXModmFsOiBMaXRlcmFsLCBmdW5jOiAodDogTGl0ZXJhbCkgPT4gTGl0ZXJhbCk6IExpdGVyYWwge1xuICAgICAgICBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDogRGF0YU9iamVjdCA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbCkpIHJlc3VsdFtrZXldID0gbWFwTGVhdmVzKHZhbHVlLCBmdW5jKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBMaXRlcmFsW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbCkgcmVzdWx0LnB1c2gobWFwTGVhdmVzKHZhbHVlLCBmdW5jKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiB0d28gYXJiaXRyYXJ5IGxpdGVyYWxzIGFyZSBlcXVhbC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZXF1YWxzKGZpcnN0OiBMaXRlcmFsIHwgdW5kZWZpbmVkLCBzZWNvbmQ6IExpdGVyYWwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmUoZmlyc3QsIHNlY29uZCkgPT0gMDtcbiAgICB9XG5cbiAgICAvKiogQ29tcGFyZSB0d28gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdmFsdWVzLiBQcm9kdWNlcyBhIHRvdGFsIG9yZGVyaW5nIG92ZXIgQU5ZIHBvc3NpYmxlIGRhdGFjb3JlIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKFxuICAgICAgICB2YWwxOiBMaXRlcmFsIHwgdW5kZWZpbmVkLFxuICAgICAgICB2YWwyOiBMaXRlcmFsIHwgdW5kZWZpbmVkLFxuICAgICAgICBsaW5rTm9ybWFsaXplcj86IChsaW5rOiBzdHJpbmcpID0+IHN0cmluZ1xuICAgICk6IG51bWJlciB7XG4gICAgICAgIC8vIFJlZmVyZW5jZSBlcXVhbGl0eSAtIHNob3J0IGNpcmN1aXQuXG4gICAgICAgIGlmICh2YWwxID09PSB2YWwyKSByZXR1cm4gMDtcblxuICAgICAgICAvLyBIYW5kbGUgdW5kZWZpbmVkL251bGxzIGZpcnN0LlxuICAgICAgICBpZiAodmFsMSA9PT0gdW5kZWZpbmVkKSB2YWwxID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbDIgPT09IHVuZGVmaW5lZCkgdmFsMiA9IG51bGw7XG4gICAgICAgIGlmICh2YWwxID09PSBudWxsICYmIHZhbDIgPT09IG51bGwpIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmICh2YWwxID09PSBudWxsKSByZXR1cm4gLTE7XG4gICAgICAgIGVsc2UgaWYgKHZhbDIgPT09IG51bGwpIHJldHVybiAxO1xuXG4gICAgICAgIC8vIEEgbm9uLW51bGwgdmFsdWUgbm93IHdoaWNoIHdlIGNhbiB3cmFwICYgY29tcGFyZSBvbi5cbiAgICAgICAgbGV0IHdyYXAxID0gd3JhcFZhbHVlKHZhbDEpO1xuICAgICAgICBsZXQgd3JhcDIgPSB3cmFwVmFsdWUodmFsMik7XG5cbiAgICAgICAgaWYgKHdyYXAxID09PSB1bmRlZmluZWQgJiYgd3JhcDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKHdyYXAxID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICAgICAgZWxzZSBpZiAod3JhcDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG5cbiAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCBvbiBkaWZmZXJlbnQgdHlwZXMgb3Igb24gcmVmZXJlbmNlIGVxdWFsaXR5LlxuICAgICAgICBpZiAod3JhcDEudHlwZSAhPSB3cmFwMi50eXBlKSByZXR1cm4gd3JhcDEudHlwZS5sb2NhbGVDb21wYXJlKHdyYXAyLnR5cGUpO1xuICAgICAgICBpZiAod3JhcDEudmFsdWUgPT09IHdyYXAyLnZhbHVlKSByZXR1cm4gMDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXAxLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUubG9jYWxlQ29tcGFyZSh3cmFwMi52YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGlmICh3cmFwMS52YWx1ZSA8ICh3cmFwMi52YWx1ZSBhcyBudW1iZXIpKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAod3JhcDEudmFsdWUgPT0gKHdyYXAyLnZhbHVlIGFzIG51bWJlcikpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgaWYgKHdyYXAxLnZhbHVlID09IHdyYXAyLnZhbHVlKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB3cmFwMS52YWx1ZSA/IDEgOiAtMTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgbGV0IGxpbmsxID0gd3JhcDEudmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmsyID0gd3JhcDIudmFsdWUgYXMgTGluaztcbiAgICAgICAgICAgICAgICBsZXQgbm9ybWFsaXplID0gbGlua05vcm1hbGl6ZXIgPz8gKCh4OiBzdHJpbmcpID0+IHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgY29tcGFyZSBieSBmaWxlIG5hbWUgb3IgZGlzcGxheSwgc2luY2UgdGhhdCB3b3VsZCBicmVhayBsaW5rIGVxdWFsaXR5LiBDb21wYXJlIGJ5IHBhdGguXG4gICAgICAgICAgICAgICAgbGV0IHBhdGhDb21wYXJlID0gbm9ybWFsaXplKGxpbmsxLnBhdGgpLmxvY2FsZUNvbXBhcmUobm9ybWFsaXplKGxpbmsyLnBhdGgpKTtcbiAgICAgICAgICAgICAgICBpZiAocGF0aENvbXBhcmUgIT0gMCkgcmV0dXJuIHBhdGhDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlbiBjb21wYXJlIGJ5IHR5cGUuXG4gICAgICAgICAgICAgICAgbGV0IHR5cGVDb21wYXJlID0gbGluazEudHlwZS5sb2NhbGVDb21wYXJlKGxpbmsyLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZSAhPSAwKSByZXR1cm4gdHlwZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbXBhcmUgYnkgc3VicGF0aCBleGlzdGVuY2UuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmsxLnN1YnBhdGggJiYgIWxpbmsyLnN1YnBhdGgpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIGlmICghbGluazEuc3VicGF0aCAmJiBsaW5rMi5zdWJwYXRoKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5rMS5zdWJwYXRoICYmICFsaW5rMi5zdWJwYXRoKSByZXR1cm4gMDtcblxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIGJvdGggaGF2ZSBhIHN1YnBhdGgsIGNvbXBhcmUgYnkgc3VicGF0aC5cbiAgICAgICAgICAgICAgICByZXR1cm4gKGxpbmsxLnN1YnBhdGggPz8gXCJcIikubG9jYWxlQ29tcGFyZShsaW5rMi5zdWJwYXRoID8/IFwiXCIpO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCAod3JhcDIudmFsdWUgYXMgRGF0ZVRpbWUpXG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUgYXMgRGF0ZVRpbWUpXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCAod3JhcDIudmFsdWUgYXMgRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUgYXMgRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICBsZXQgZjEgPSB3cmFwMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgZjIgPSB3cmFwMi52YWx1ZSBhcyBhbnlbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5taW4oZjEubGVuZ3RoLCBmMi5sZW5ndGgpOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wID0gY29tcGFyZShmMVtpbmRleF0sIGYyW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wICE9IDApIHJldHVybiBjb21wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZjEubGVuZ3RoIC0gZjIubGVuZ3RoO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIGxldCBvMSA9IHdyYXAxLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBvMiA9IHdyYXAyLnZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICAgICAgICAgICAgbGV0IGsxID0gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvMSkpO1xuICAgICAgICAgICAgICAgIGxldCBrMiA9IEFycmF5LmZyb20oT2JqZWN0LmtleXMobzIpKTtcbiAgICAgICAgICAgICAgICBrMS5zb3J0KCk7XG4gICAgICAgICAgICAgICAgazIuc29ydCgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGtleUNvbXBhcmUgPSBjb21wYXJlKGsxLCBrMik7XG4gICAgICAgICAgICAgICAgaWYgKGtleUNvbXBhcmUgIT0gMCkgcmV0dXJuIGtleUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgazEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlKG8xW2tleV0sIG8yW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAhPSAwKSByZXR1cm4gY29tcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YWNvcmUgdHlwZSBmb3IgYW4gYXJiaXRyYXJ5IHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0eXBlT2YodmFsOiBhbnkpOiBMaXRlcmFsVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB3cmFwVmFsdWUodmFsKT8udHlwZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBcInRydXRoeVwiIChpLmUuLCBpcyBub24tbnVsbCBhbmQgaGFzIGRhdGEgaW4gaXQpLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShmaWVsZDogTGl0ZXJhbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhd3JhcHBlZC52YWx1ZS5wYXRoO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b01pbGxpcygpICE9IDA7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5hcyhcInNlY29uZHNcIikgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod3JhcHBlZC52YWx1ZSkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERlZXAgY29weSBhIGZpZWxkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUIGV4dGVuZHMgTGl0ZXJhbD4oZmllbGQ6IFQpOiBUIHtcbiAgICAgICAgaWYgKGZpZWxkID09PSBudWxsIHx8IGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBmaWVsZDtcblxuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNBcnJheShmaWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAoW10gYXMgTGl0ZXJhbFtdKS5jb25jYXQoZmllbGQubWFwKCh2KSA9PiBkZWVwQ29weSh2KSkpIGFzIFQ7XG4gICAgICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNPYmplY3QoZmllbGQpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkKSkgcmVzdWx0W2tleV0gPSBkZWVwQ29weSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsOiBhbnkpOiB2YWwgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlci4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsOiBhbnkpOiB2YWwgaXMgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGRhdGUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWw6IGFueSk6IHZhbCBpcyBEYXRlVGltZSB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEYXRlVGltZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGR1cmF0aW9uLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0R1cmF0aW9uKHZhbDogYW55KTogdmFsIGlzIER1cmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc051bGwodmFsOiBhbnkpOiB2YWwgaXMgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYW4gYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodmFsOiBhbnkpOiB2YWwgaXMgYW55W10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbDogYW55KTogdmFsIGlzIGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJib29sZWFuXCI7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYSBsaW5rLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0xpbmsodmFsOiBhbnkpOiB2YWwgaXMgTGluayB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBMaW5rO1xuICAgIH1cblxuICAgIC8qKiBDaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdCAoYW5kIG5vdCBhbnkgb3RoZXIgZGF0YWNvcmUtcmVjb2duaXplZCBvYmplY3QtbGlrZSB0eXBlKS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsOiBhbnkpOiB2YWwgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbCA9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhaXNBcnJheSh2YWwpICYmXG4gICAgICAgICAgICAhaXNEdXJhdGlvbih2YWwpICYmXG4gICAgICAgICAgICAhaXNEYXRlKHZhbCkgJiZcbiAgICAgICAgICAgICFpc0xpbmsodmFsKSAmJlxuICAgICAgICAgICAgIWlzTnVsbCh2YWwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgamF2YXNjcmlwdCBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWw6IGFueSk6IHZhbCBpcyBGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09IFwiZnVuY3Rpb25cIjtcbiAgICB9XG59XG5cbi8qKiBBIGdyb3VwaW5nIG9uIGEgdHlwZSB3aGljaCBzdXBwb3J0cyByZWN1cnNpdmVseS1uZXN0ZWQgZ3JvdXBzLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBHcm91cEVsZW1lbnQ8VD4gPSB7IGtleTogTGl0ZXJhbDsgcm93czogR3JvdXBpbmc8VD4gfTtcbi8qKlxuICogQSBncm91cGluZywgd2hpY2ggY2FuIGJlIGVpdGhlcjpcbiAqIC0gYW4gYXJyYXkgb2YgZWxlbWVudHMgb2YgdHlwZSBgVGAsIG9yXG4gKiAtIGFuIGFycmF5IG9mIHtAbGluayBHcm91cGVsZW1lbnR9c1xuICpcbiAqIEBncm91cCBDb21tb24gVHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgR3JvdXBpbmc8VD4gPSBUW10gfCBHcm91cEVsZW1lbnQ8VD5bXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgbmFtZXNwYWNlIEdyb3VwaW5ncyB7XG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGdyb3VwIGVudHJ5IGlzIGEgc3RhbmRhbG9uZSB2YWx1ZSwgb3IgYSBncm91cGluZyBvZiBzdWItZW50cmllcy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50R3JvdXA8VD4oZW50cnk6IGFueSk6IGVudHJ5IGlzIEdyb3VwRWxlbWVudDxUPiB7XG4gICAgICAgIHJldHVybiBMaXRlcmFscy5pc09iamVjdChlbnRyeSkgJiYgT2JqZWN0LmtleXMoZW50cnkpLmxlbmd0aCA9PSAyICYmIFwia2V5XCIgaW4gZW50cnkgJiYgXCJyb3dzXCIgaW4gZW50cnk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgZ3JvdXBpbmcgYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzR3JvdXBpbmc8VD4oZW50cnk6IEdyb3VwaW5nPFQ+KTogZW50cnkgaXMgR3JvdXBFbGVtZW50PFQ+W10ge1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVudHJ5KSBpZiAoIWlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgbGVhZiBhbmQgaGFzIG5vIHN1Ymdyb3VwaW5ncy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNMZWFmPFQ+KGVudHJ5OiBHcm91cGluZzxUPik6IGVudHJ5IGlzIFRbXSB7XG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZW50cnkpIGlmIChpc0VsZW1lbnRHcm91cChlbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBDb3VudCB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgcmVjdXJzaXZlIGdyb3VwaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihlbGVtZW50czogR3JvdXBpbmc8VD4gfCBHcm91cEVsZW1lbnQ8VD4pOiBudW1iZXIge1xuICAgICAgICBpZiAoaXNFbGVtZW50R3JvdXAoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291bnQoZWxlbWVudHMucm93cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNHcm91cGluZyhlbGVtZW50cykpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgc3ViZ3JvdXAgb2YgZWxlbWVudHMpIHJlc3VsdCArPSBjb3VudChzdWJncm91cC5yb3dzKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlY3Vyc2l2ZWx5IHNsaWNlIGEgZ3JvdXBpbmcsIHByZXNlcnZpbmcgdGhlIGdyb3VwIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGVsZW1lbnRzIFtzdGFydC4uLmVuZCkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNsaWNlPFQ+KGVsZW1lbnRzOiBHcm91cGluZzxUPiwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBHcm91cGluZzxUPiB7XG4gICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKGlzTGVhZihlbGVtZW50cykpIHJldHVybiBlbGVtZW50cy5zbGljZShzdGFydCwgZW5kKTtcblxuICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBncm91cCB0aGF0IGNvbnRhaW5zIGluZGV4IGBzdGFydGAuXG4gICAgICAgIGxldCBpbmRleCA9IDAsXG4gICAgICAgICAgICBzZWVuID0gMDtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgZWxlbWVudHMubGVuZ3RoICYmIHNlZW4gKyBjb3VudChlbGVtZW50c1tpbmRleF0pIDw9IHN0YXJ0KSB7XG4gICAgICAgICAgICBzZWVuICs9IGNvdW50KGVsZW1lbnRzW2luZGV4XSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RhcnQgd2FzIGdyZWF0ZXIgdGhhbiB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUgZ3JvdXBpbmdzLlxuICAgICAgICBpZiAoaW5kZXggPj0gZWxlbWVudHMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IGtleTogTGl0ZXJhbDsgcm93czogR3JvdXBpbmc8VD4gfVtdID0gW107XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGVsZW1lbnRzLmxlbmd0aCAmJiBzZWVuIDwgZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU2l6ZSA9IGNvdW50KGdyb3VwKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhcnQgPSBNYXRoLm1heChzZWVuLCBzdGFydCk7XG4gICAgICAgICAgICBjb25zdCBncm91cEVuZCA9IE1hdGgubWluKGdyb3VwU2l6ZSArIHNlZW4sIGVuZCk7XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IGdyb3VwLmtleSxcbiAgICAgICAgICAgICAgICByb3dzOiBzbGljZShncm91cC5yb3dzLCBncm91cFN0YXJ0IC0gc2VlbiwgZ3JvdXBFbmQgLSBzZWVuKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWVuICs9IGdyb3VwU2l6ZTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgYXBpXG4gKi9cbi8qKlxuICogIEZ1bmN0aW9uYWwgcmV0dXJuIHR5cGUgZm9yIGVycm9yIGhhbmRsaW5nLlxuICogQGhpZGRlblxuICogKi9cbmV4cG9ydCBjbGFzcyBTdWNjZXNzPFQsIEU+IHtcbiAgICBwdWJsaWMgc3VjY2Vzc2Z1bDogdHJ1ZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwPFU+KGY6IChhOiBUKSA9PiBVKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKGYodGhpcy52YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0TWFwPFU+KGY6IChhOiBUKSA9PiBSZXN1bHQ8VSwgRT4pOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwRXJyPFU+KGY6IChlOiBFKSA9PiBVKTogUmVzdWx0PFQsIFU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55IGFzIFJlc3VsdDxULCBVPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmltYXA8VDIsIEUyPihzdWNjOiAoYTogVCkgPT4gVDIsIF9mYWlsOiAoYjogRSkgPT4gRTIpOiBSZXN1bHQ8VDIsIEUyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcChzdWNjKSBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZShfdmFsdWU6IFQpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNhc3Q8VT4oKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICAgIH1cblxuICAgIHB1YmxpYyBvckVsc2VUaHJvdyhfbWVzc2FnZT86IChlOiBFKSA9PiBzdHJpbmcpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuXG4vKiogRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWlsdXJlPFQsIEU+IHtcbiAgICBwdWJsaWMgc3VjY2Vzc2Z1bDogZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGVycm9yOiBFKSB7XG4gICAgICAgIHRoaXMuc3VjY2Vzc2Z1bCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXA8VT4oX2Y6IChhOiBUKSA9PiBVKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55IGFzIEZhaWx1cmU8VSwgRT47XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXRNYXA8VT4oX2Y6IChhOiBUKSA9PiBSZXN1bHQ8VSwgRT4pOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnkgYXMgRmFpbHVyZTxVLCBFPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwRXJyPFU+KGY6IChlOiBFKSA9PiBVKTogUmVzdWx0PFQsIFU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGYodGhpcy5lcnJvcikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBiaW1hcDxUMiwgRTI+KF9zdWNjOiAoYTogVCkgPT4gVDIsIGZhaWw6IChiOiBFKSA9PiBFMik6IFJlc3VsdDxUMiwgRTI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRXJyKGZhaWwpIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3JFbHNlKHZhbHVlOiBUKTogVCB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FzdDxVPigpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZVRocm93KG1lc3NhZ2U/OiAoZTogRSkgPT4gc3RyaW5nKTogVCB7XG4gICAgICAgIGlmIChtZXNzYWdlKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSh0aGlzLmVycm9yKSk7XG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiXCIgKyB0aGlzLmVycm9yKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBtb25hZGljIHJlc3VsdCB0eXBlIHdoaWNoIHN0b3JlcyBlaXRoZXIgXCJzdWNjZXNzXCIgb3IgXCJmYWlsdXJlXCIuIEFuIGFsdGVybmF0aXZlIGhhbmRsaW5nIGV4Y2VwdGlvbmFsIGJlaGF2aW9yXG4gKiBieSB1c2luZyB0aGUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgYW4gZXhjZXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRT4gPSBTdWNjZXNzPFQsIEU+IHwgRmFpbHVyZTxULCBFPjtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBNb25hZGljICdSZXN1bHQnIHR5cGUgd2hpY2ggZW5jYXBzdWxhdGVzIHdoZXRoZXIgYSBwcm9jZWR1cmUgc3VjY2VlZGVkIG9yIGZhaWxlZCwgYXMgd2VsbCBhcyBpdCdzIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBSZXN1bHQge1xuICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgc3VjY2VzcyByZXN1bHQgd3JhcHBpbmcgdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzPFQsIEU+KHZhbHVlOiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGZhaWx1cmUgdmFsdWUgd3JhcHBpbmcgdGhlIGdpdmVuIGVycm9yLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBmYWlsdXJlPFQsIEU+KGVycm9yOiBFKTogUmVzdWx0PFQsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGVycm9yKTtcbiAgICB9XG5cbiAgICAvKiogSm9pbiB0d28gcmVzdWx0cyB3aXRoIGEgYmktZnVuY3Rpb24gYW5kIHJldHVybiBhIG5ldyByZXN1bHQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZsYXRNYXAyPFQxLCBUMiwgTywgRT4oXG4gICAgICAgIGZpcnN0OiBSZXN1bHQ8VDEsIEU+LFxuICAgICAgICBzZWNvbmQ6IFJlc3VsdDxUMiwgRT4sXG4gICAgICAgIGY6IChhOiBUMSwgYjogVDIpID0+IFJlc3VsdDxPLCBFPlxuICAgICk6IFJlc3VsdDxPLCBFPiB7XG4gICAgICAgIGlmIChmaXJzdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBpZiAoc2Vjb25kLnN1Y2Nlc3NmdWwpIHJldHVybiBmKGZpcnN0LnZhbHVlLCBzZWNvbmQudmFsdWUpO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFpbHVyZShzZWNvbmQuZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoZmlyc3QuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEpvaW4gdHdvIHJlc3VsdHMgd2l0aCBhIGJpLWZ1bmN0aW9uIGFuZCByZXR1cm4gYSBuZXcgcmVzdWx0LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtYXAyPFQxLCBUMiwgTywgRT4oXG4gICAgICAgIGZpcnN0OiBSZXN1bHQ8VDEsIEU+LFxuICAgICAgICBzZWNvbmQ6IFJlc3VsdDxUMiwgRT4sXG4gICAgICAgIGY6IChhOiBUMSwgYjogVDIpID0+IE9cbiAgICApOiBSZXN1bHQ8TywgRT4ge1xuICAgICAgICByZXR1cm4gZmxhdE1hcDIoZmlyc3QsIHNlY29uZCwgKGEsIGIpID0+IHN1Y2Nlc3MoZihhLCBiKSkpO1xuICAgIH1cblxuICAgIC8qKiBNYXAgYSBmYWlsYWJsZSBmdW5jdGlvbiBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCwgcmV0dXJuaW5nIGVhcmx5IG9uIGZhaWx1cmUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1hcEFsbDxULCBPLCBFPihpbnB1dDogSXRlcmFibGU8VD4sIGZ1bmM6IChpbnB1dDogVCkgPT4gUmVzdWx0PE8sIEU+KTogUmVzdWx0PE9bXSwgRT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IE9bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGZ1bmMoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIW91dHB1dC5zdWNjZXNzZnVsKSByZXR1cm4gb3V0cHV0LmNhc3QoKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2gob3V0cHV0LnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKiBDYXRjaCBhbnkgZXJyb3JzIGluIGEgY2FsbCwgcmV0dXJuaW5nIGEgcmVzdWx0IGluc3RlYWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRyeWluZzxUPihjYWxsOiAoKSA9PiBUKTogUmVzdWx0PFQsIEVycm9yPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoY2FsbCgpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29udmVydCBhIHByb21pc2Ugd2hpY2ggbWF5IHRocm93IGludG8gYSBwcm9taXNlIHdoaWNoIHJldHVybnMgYSByZXN1bHQgb2YgdGhlIHN1Y2Nlc3NmdWwgdmFsdWUgb3IgYW4gZXJyb3IuICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jPFQ+KHByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFJlc3VsdDxULCBFcnJvcj4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyhhd2FpdCBwcm9taXNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcblxuLyoqIFN0YXRpYyBzZXQgZWxlbWVudCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovXG5leHBvcnQgdHlwZSBFdmVyeXRoaW5nID0geyB0eXBlOiBcImV2ZXJ5dGhpbmdcIiB9O1xuLyoqIFN0YXRpYyBzZXQgZWxlbWVudCB3aGljaCBtYXRjaGVzIG5vdGhpbmcuICovXG5leHBvcnQgdHlwZSBOb3RoaW5nID0geyB0eXBlOiBcIm5vdGhpbmdcIiB9O1xuLyoqIFNldCB3aGljaCBtYXRjaGVzIHRoZSBuZWdhdGlvbiBvZiBhIHNldC4gKi9cbmV4cG9ydCB0eXBlIE5lZ2F0ZWQ8VD4gPSB7IHR5cGU6IFwibmVnYXRlZFwiOyB2YWx1ZTogU2V0PFQ+IH07XG4vKiogU2V0IHdoaWNoIG1hdGNoZXMgYW4gYWN0dWFsIHNldCBvZiB2YWx1ZXMuICAqL1xuZXhwb3J0IHR5cGUgQXRvbTxUPiA9IHsgdHlwZTogXCJhdG9tXCI7IHZhbHVlOiBTZXQ8VD4gfTtcblxuLyoqIEFic3RyYWN0IGZpbHRlciB0eXBlIHdoaWNoIHJlcHJlc2VudHMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgZmlsdGVyIG9wZXJhdGlvbnMgdG8gdGhlIGRhdGEgc3RvcmUuICovXG5leHBvcnQgdHlwZSBGaWx0ZXI8VD4gPSBFdmVyeXRoaW5nIHwgTm90aGluZyB8IEF0b208VD4gfCBOZWdhdGVkPFQ+O1xuXG4vKiogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVmZmljaWVudGx5IG9wZXJhdGluZyBvbiBmaWx0ZXJzLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBGaWx0ZXJzIHtcbiAgICAvKiogU3RhdGljIGZpbHRlciB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovXG4gICAgZXhwb3J0IGNvbnN0IEVWRVJZVEhJTkc6IEV2ZXJ5dGhpbmcgPSB7IHR5cGU6IFwiZXZlcnl0aGluZ1wiIH07XG4gICAgLyoqIFN0YXRpYyBmaWx0ZXIgd2hpY2ggbWF0Y2hlcyBub3RoaW5nLiAqL1xuICAgIGV4cG9ydCBjb25zdCBOT1RISU5HOiBOb3RoaW5nID0geyB0eXBlOiBcIm5vdGhpbmdcIiB9O1xuICAgIC8qKiBFbXB0eSBzZXQgY29uc3RhbnQuICovXG4gICAgZXhwb3J0IGNvbnN0IEVNUFRZX1NFVDogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGF0b20gZmlsdGVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBhdG9tPFQ+KHNldDogU2V0PFQ+KTogRmlsdGVyPFQ+IHtcbiAgICAgICAgaWYgKHNldC5zaXplID09IDApIHJldHVybiBOT1RISU5HO1xuXG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiYXRvbVwiLCB2YWx1ZTogc2V0IH07XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIGZpbHRlciB0aGF0IG1hdGNoZXMgZXZlcnl0aGluZyBvciBub3RoaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb25zdGFudDxUPih2YWx1ZTogYm9vbGVhbik6IEZpbHRlcjxUPiB7XG4gICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuIEVWRVJZVEhJTkc7XG4gICAgICAgIGVsc2UgcmV0dXJuIE5PVEhJTkc7XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIG5ldyBhdG9tIGZpbHRlciB3aGljaCBpcyBOT1RISU5HIGlmIHNldCBpcyB1bmRlZmluZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG51bGxhYmxlQXRvbTxUPihzZXQ6IFNldDxUPiB8IHVuZGVmaW5lZCk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBzZXQgIT09IHVuZGVmaW5lZCA/IGF0b20oc2V0KSA6IE5PVEhJTkc7XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIG5lZ2F0ZWQgYXRvbSBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWQ8VD4oc2V0OiBTZXQ8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBpZiAoc2V0LnNpemUgPT0gMCkgcmV0dXJuIEVWRVJZVEhJTkc7XG5cbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJuZWdhdGVkXCIsIHZhbHVlOiBzZXQgfTtcbiAgICB9XG5cbiAgICAvKiogUHJvZHVjZXMgdGhlIG5lZ2F0aW9uIG9mIGEgZmlsdGVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBuZWdhdGU8VD4oZmlsdGVyOiBGaWx0ZXI8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBOT1RISU5HO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRVZFUllUSElORztcbiAgICAgICAgICAgIGNhc2UgXCJhdG9tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lZ2F0ZWQoZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0b20oZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIGZpbHRlciBpcyBkZWZpbml0aXZlbHkgY3VycmVudGx5IGVtcHR5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBlbXB0eTxUPihmaWx0ZXI6IEZpbHRlcjxUPik6IGJvb2xlYW4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcImF0b21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlLnNpemUgPT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJub3RoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVzb2x2ZSBhIHRvcC1sZXZlbCBmaWx0ZXIgd2l0aCB0aGUgc2V0IG9mIGFsbCBhdmFpbGFibGUgb2JqZWN0cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZTxUPihmaWx0ZXI6IEZpbHRlcjxUPiwgZXZlcnl0aGluZzogU2V0PFQ+KTogU2V0PFQ+IHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImV2ZXJ5dGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlcnl0aGluZztcbiAgICAgICAgICAgIGNhc2UgXCJub3RoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NFVDtcbiAgICAgICAgICAgIGNhc2UgXCJhdG9tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldEludGVyc2VjdE5lZ2F0aW9uKGV2ZXJ5dGhpbmcsIGZpbHRlci52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGFuIGl0ZXJhYmxlIG9mIGZpbHRlcnMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdDxUPihlbGVtZW50czogSXRlcmFibGU8RmlsdGVyPFQ+Pik6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5SW50ZXJzZWN0KGVsZW1lbnRzLCAoeCkgPT4geCk7XG4gICAgfVxuXG4gICAgLyoqIEludGVyc2VjdCBmaWx0ZXJzIGxhemlseSwgc2hvcnQtY2lyY3VpdGluZyBpZiB0aGUgaW50ZXJzZWN0aW9uIHdvdWxkIHByb2R1Y2UgTk9USElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eUludGVyc2VjdDxJLCBUPihcbiAgICAgICAgZWxlbWVudHM6IEl0ZXJhYmxlPEk+LFxuICAgICAgICBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IEZpbHRlcjxUPiB8IHVuZGVmaW5lZFxuICAgICk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5RmFpbGFibGVJbnRlcnNlY3Rpb24oZWxlbWVudHMsICh4KSA9PiBSZXN1bHQuc3VjY2Vzcyhwcm9kdWNlKHgpKSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGZpbHRlcnMgbGF6aWx5LCBzaG9ydC1jaXJjdWl0aW5nIGlmIHRoZSBpbnRlcnNlY3Rpb24gd291bGQgcHJvZHVjZSBOT1RISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5RmFpbGFibGVJbnRlcnNlY3Rpb248SSwgVCwgRT4oXG4gICAgICAgIGVsZW1lbnRzOiBJdGVyYWJsZTxJPixcbiAgICAgICAgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBSZXN1bHQ8RmlsdGVyPFQ+IHwgdW5kZWZpbmVkLCBFPlxuICAgICk6IFJlc3VsdDxGaWx0ZXI8VD4sIEU+IHtcbiAgICAgICAgY29uc3QgYXRvbXM6IFNldDxUPltdID0gW107XG4gICAgICAgIGNvbnN0IG5lZ2F0aW9uczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVGaWx0ZXIgPSBwcm9kdWNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXliZUZpbHRlci5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVGaWx0ZXIuY2FzdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBtYXliZUZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEVtcHR5IGZpbHRlcnMgd2lsbCBwcm9kdWNlIGFuIGVtcHR5IGludGVyc2VjdGlvbi5cbiAgICAgICAgICAgIGlmIChlbXB0eShmaWx0ZXIpKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoTk9USElORyk7XG4gICAgICAgICAgICAvLyBFVkVSWVRISU5HIGZpbHRlcnMgYXJlIHJlZHVuZGFudCBpbiBBTkRzLCBza2lwIHRoZW0uXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gV2lsbCBvbmx5IGJlIGxlZnQgd2l0aCBhdG9tcyBvciBuZWdhdGlvbnMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT0gXCJhdG9tXCIpIGF0b21zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbHRlci50eXBlID09IFwibmVnYXRlZFwiKSBuZWdhdGlvbnMucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2Ugc3RhcnQgd2l0aCBzb21ldGhpbmcgb2YgdGhlIGZvcm0gYSAmJiBiICYmICFjICYmICFkLlxuICAgICAgICAvLyBJZiBubyB0ZXJtcywgdGhlbiBldmVyeXRoaW5nIHdhcyBFVkVSWVRISU5HIHNvIHJldHVybiB0aGF0LlxuICAgICAgICAvLyBJZiBvbmx5IGF0b21zLCBqdXN0IGludGVyc2VjdCB0aGVtIChhICYmIGIpLlxuICAgICAgICAvLyBJZiBvbmx5IG5lZ2F0aW9ucywgdGhlbiByZXdyaXRlICFjICYmICFkID0+ICEoYyB8fCBkKSBhbmQgcmV0dXJuIG5lZ2F0ZWQoYyB8fCBkKS5cbiAgICAgICAgLy8gSWYgYm90aCwgY29tcHV0ZSB4ID0gKGEgJiYgYikgYW5kIHkgPSAoYyB8fCBkKSwgYW5kIHRoZW4gY29tcHV0ZSB4ICYmICF5LlxuXG4gICAgICAgIGlmIChhdG9tcy5sZW5ndGggPT0gMCAmJiBuZWdhdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhFVkVSWVRISU5HKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdG9tcy5sZW5ndGggPiAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGF0b20oc2V0SW50ZXJzZWN0KGF0b21zKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobmVnYXRlZChzZXRVbmlvbihuZWdhdGlvbnMpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHNldEludGVyc2VjdE5lZ2F0aW9uKHNldEludGVyc2VjdChhdG9tcyksIHNldFVuaW9uKG5lZ2F0aW9ucykpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycywgcHJvZHVjaW5nIGEgc2luZ2xlIHJlc3VsdCBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVuaW9uPFQ+KGZpbHRlcnM6IEl0ZXJhYmxlPEZpbHRlcjxUPj4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbGF6eVVuaW9uKGZpbHRlcnMsICh4KSA9PiB4KTtcbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIHVuaW9uIHdvdWxkIHByb2R1Y2UgRVZFUllUSElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eVVuaW9uPEksIFQ+KGVsZW1lbnRzOiBJdGVyYWJsZTxJPiwgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBGaWx0ZXI8VD4gfCB1bmRlZmluZWQpOiBGaWx0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbGF6eUZhaWxhYmxlVW5pb24oZWxlbWVudHMsICh4KSA9PiBSZXN1bHQuc3VjY2Vzcyhwcm9kdWNlKHgpKSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIHVuaW9uIHdvdWxkIHByb2R1Y2UgRVZFUllUSElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eUZhaWxhYmxlVW5pb248SSwgVCwgRT4oXG4gICAgICAgIGVsZW1lbnRzOiBJdGVyYWJsZTxJPixcbiAgICAgICAgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBSZXN1bHQ8RmlsdGVyPFQ+IHwgdW5kZWZpbmVkLCBFPlxuICAgICk6IFJlc3VsdDxGaWx0ZXI8VD4sIEU+IHtcbiAgICAgICAgY29uc3QgYXRvbXM6IFNldDxUPltdID0gW107XG4gICAgICAgIGNvbnN0IG5lZ2F0aW9uczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVGaWx0ZXIgPSBwcm9kdWNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXliZUZpbHRlci5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVGaWx0ZXIuY2FzdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBtYXliZUZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEVWRVJZVEhJTkcgZmlsdGVycyB3aWxsIHByb2R1Y2UgZXZlcnl0aGluZyBhbHdheXMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRVZFUllUSElORyk7XG4gICAgICAgICAgICAvLyBFbXB0eSBmaWx0ZXJzIGFyZSByZWR1bmRhbnQuXG4gICAgICAgICAgICBpZiAoZW1wdHkoZmlsdGVyKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFdpbGwgb25seSBiZSBsZWZ0IHdpdGggYXRvbXMgb3IgbmVnYXRpb25zLlxuICAgICAgICAgICAgaWYgKGZpbHRlci50eXBlID09IFwiYXRvbVwiKSBhdG9tcy5wdXNoKGZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIGlmIChmaWx0ZXIudHlwZSA9PSBcIm5lZ2F0ZWRcIikgbmVnYXRpb25zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9yIGlzIGEgYml0IGhhcmRlciB0aGFuIEFORCBzaW5jZSB5b3UgY2FuIGVuZCB1cCB3aXRoIHNjZW5hcmlvcyBsaWtlIGEgfHwgIWIsIHdoaWNoIGFyZVxuICAgICAgICAvLyBub3QgY29tcHV0YWJsZSBkaXJlY3RseS4gSG93ZXZlciwgd2UgY2FuIGRvIGJvb2xlYW4gbG9naWMgdG8gYWx3YXlzIHByb2R1Y2UgYSBzaW5nbGVcbiAgICAgICAgLy8gc2V0LlxuICAgICAgICAvLyBJZiBub3RoaW5nID0+IG5vdGhpbmcsIG5vIG5vbi1lbXB0eSBmaWx0ZXJzLlxuICAgICAgICAvLyBJZiBhdG9tcyBidXQgbm8gbmVnYXRpb25zIChhIHx8IGIgfHwgYykgPT4gY29tcHV0ZSB1bmlvbi5cbiAgICAgICAgLy8gSWYgbmVnYXRpb25zIGJ1dCBubyBhdG9tcyAoIWEgfHwgIWIgfHwgIWMpID0+IHJld3JpdGUgYXMgIShhICYmIGIgJiYgYykuXG4gICAgICAgIC8vIElmIGJvdGg6IChhIHx8IGIgfHwgIWMgfHwgIWQpID0+IGNvbWJpbmUgZWFjaCBwYXJ0IGludG8gKGEgfHwgYikgfHwgKCFjIHx8ICFkKSA9PiAoYSB8fCBiKSB8fCAhKGMgJiYgZCkgPT4gZSB8fCAhZiA9PiAhKCFlICYmIGYpIHdoaWNoXG4gICAgICAgIC8vIGNhbiBiZSBjb21wdXRlZCB1c2luZyBpbnRlcnNlY3Rpb24gbG9naWMuXG5cbiAgICAgICAgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKE5PVEhJTkcpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA+IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHNldFVuaW9uKGF0b21zKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5uZWdhdGVkKHNldEludGVyc2VjdChuZWdhdGlvbnMpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobmVnYXRlZChzZXRJbnRlcnNlY3ROZWdhdGlvbihzZXRJbnRlcnNlY3QobmVnYXRpb25zKSwgc2V0VW5pb24oYXRvbXMpKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVmZmljaWVudGx5IGNvbXB1dGUgdGhlIGludGVyc2VjdGlvbiBvZiBzZXRzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcnNlY3Q8VD4oc2V0czogU2V0PFQ+W10pOiBTZXQ8VD4ge1xuICAgICAgICBpZiAoc2V0cy5sZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgZWxzZSBpZiAoc2V0cy5sZW5ndGggPT0gMSkgcmV0dXJuIHNldHNbMF07XG5cbiAgICAgICAgLy8gU29ydCBieSBzaXplIGFuZCBjb21iaW5lIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHNldCByZXBlYXRlZGx5LlxuICAgICAgICBsZXQgc29ydGVkID0gKFtdIGFzIFNldDxUPltdKS5jb25jYXQoc2V0cykuc29ydCgoYSwgYikgPT4gYS5zaXplIC0gYi5zaXplKTtcblxuICAgICAgICB3aGlsZSAoc29ydGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICAgICAgICAgIGNvbnN0IGxhcmdlc3QgPSBzb3J0ZWQucG9wKCkhO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNvcnRlZFswXSkge1xuICAgICAgICAgICAgICAgIGlmIChsYXJnZXN0LmhhcyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc29ydGVkWzBdID0gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvcnRlZFswXTtcbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSB0aGUgdW5pb24gb2Ygc2V0cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gc2V0VW5pb248VD4oc2V0czogU2V0PFQ+W10pOiBTZXQ8VD4ge1xuICAgICAgICBpZiAoc2V0cy5sZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgZWxzZSBpZiAoc2V0cy5sZW5ndGggPT0gMSkgcmV0dXJuIHNldHNbMF07XG5cbiAgICAgICAgLy8gSSdtIG5vdCBzdXJlIGlmIHRoZXJlIGlzIGFueSB1c2VmdWwgb3B0aW1pemF0aW9uIGZvciBzZXQgdW5pb25zLCBzbyBqdXN0IGFkZCB0aGVtIGFsbCBJIGd1ZXNzLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PFQ+KCk7XG4gICAgICAgIGZvciAoY29uc3Qgc2V0IG9mIHNldHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZXQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSBhdG9tICYmICFuZWdhdGVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcnNlY3ROZWdhdGlvbjxUPihhdG9tOiBTZXQ8VD4sIG5lZ2F0ZWQ6IFNldDxUPik6IFNldDxUPiB7XG4gICAgICAgIGlmIChhdG9tLnNpemUgPiBuZWdhdGVkLnNpemUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIGNvcHksIHNpbmNlIEknbSBub3Qgc3VyZSBpdCdzIGFueSBmYXN0ZXIgd2l0aCB0aGUgY29weS5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoYXRvbSk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIG5lZ2F0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IC8qIGF0b20uc2l6ZSA8IG5lZ2F0aW9uLnNpemUgKi8gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PFQ+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGF0b20pIHtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRlZC5oYXMoZWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBGaWx0ZXJzIH0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuXG4vKiogQ29tcGFyaXNvbiBvcGVyYXRvcnMgd2hpY2ggeWllbGQgdHJ1ZS9mYWxzZS4gKi9cbmV4cG9ydCB0eXBlIENvbXBhcmVPcCA9IFwiPlwiIHwgXCI+PVwiIHwgXCI8PVwiIHwgXCI8XCIgfCBcIj1cIiB8IFwiIT1cIjtcbi8qKiBBcml0aG1ldGljIG9wZXJhdG9ycyB3aGljaCB5aWVsZCBudW1iZXJzIGFuZCBvdGhlciB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBBcml0aG1ldGljT3AgPSBcIitcIiB8IFwiLVwiIHwgXCIqXCIgfCBcIi9cIiB8IFwiJVwiIHwgXCImXCIgfCBcInxcIjtcbi8qKiBJbmRleCBhIHZhbHVlIGludG8gYW5vdGhlciB2YWx1ZS4gKi9cbmV4cG9ydCB0eXBlIExvZ2ljYWxPcCA9IFwiaW5kZXhcIjtcbi8qKiBBbGwgdmFsaWQgYmluYXJ5IG9wZXJhdG9ycy4gKi9cbmV4cG9ydCB0eXBlIEJpbmFyeU9wID0gQ29tcGFyZU9wIHwgQXJpdGhtZXRpY09wIHwgTG9naWNhbE9wO1xuXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uID1cbiAgICB8IExpdGVyYWxFeHByZXNzaW9uXG4gICAgfCBWYXJpYWJsZUV4cHJlc3Npb25cbiAgICB8IExpc3RFeHByZXNzaW9uXG4gICAgfCBPYmplY3RFeHByZXNzaW9uXG4gICAgfCBCaW5hcnlPcEV4cHJlc3Npb25cbiAgICB8IEZ1bmN0aW9uRXhwcmVzc2lvblxuICAgIHwgTGFtYmRhRXhwcmVzc2lvblxuICAgIHwgTmVnYXRlZEV4cHJlc3Npb247XG5cbi8qKiBMaXRlcmFsIHJlcHJlc2VudGF0aW9uIG9mIHNvbWUgZmllbGQgdHlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl0ZXJhbEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBMaXRlcmFsO1xufVxuXG4vKiogQSB2YXJpYWJsZSBmaWVsZCBmb3IgYSB2YXJpYWJsZSB3aXRoIGEgZ2l2ZW4gbmFtZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcInZhcmlhYmxlXCI7XG4gICAgbmFtZTogc3RyaW5nO1xufVxuXG4vKiogQSBsaXN0IGxpdGVyYWwsIHdoaWNoIGlzIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBmaWVsZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcImxpc3RcIjtcbiAgICB2YWx1ZXM6IEV4cHJlc3Npb25bXTtcbn1cblxuLyoqIEFuIG9iamVjdCBsaXRlcmFsLCB3aGljaCBpcyBhIG1hcHBpbmcgb2YgbmFtZSB0byBmaWVsZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0RXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJvYmplY3RcIjtcbiAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+O1xufVxuXG4vKiogQSBiaW5hcnkgb3BlcmF0b3IgZXhwcmVzc2lvbiB3aGljaCBjb21iaW5lcyB0d28gc3Vibm9kZXMgc29tZWhvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluYXJ5T3BFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcImJpbmFyeW9wXCI7XG4gICAgbGVmdDogRXhwcmVzc2lvbjtcbiAgICByaWdodDogRXhwcmVzc2lvbjtcbiAgICBvcDogQmluYXJ5T3A7XG59XG5cbi8qKiBBIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2hpY2ggY2FsbHMgYSBmdW5jdGlvbiBvbiAwIG9yIG1vcmUgYXJndW1lbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwiZnVuY3Rpb25cIjtcbiAgICAvKiogRWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgb3IgYSBGdW5jdGlvbiBvYmplY3QuICovXG4gICAgZnVuYzogRXhwcmVzc2lvbjtcbiAgICAvKiogVGhlIGxpc3Qgb2YgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICovXG4gICAgYXJndW1lbnRzOiBFeHByZXNzaW9uW107XG59XG5cbi8qKiBBbiBpbmxpbmUgZnVuY3Rpb24gYWNjZXB0aW5nIG9uZSBvciBtb3JlIGFyZ3VtZW50cyBhbmQgcHJvZHVjaW5nIGEgdmFsdWUuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGFtYmRhXCI7XG4gICAgLyoqIEFuIG9yZGVyZWQgbGlzdCBvZiBuYW1lZCBhcmd1bWVudHMuICovXG4gICAgYXJndW1lbnRzOiBzdHJpbmdbXTtcbiAgICAvKiogVGhlIGZpZWxkIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHVzaW5nIHRoZSBhcmd1bWVudHMgaW4gY29udGV4dC4gKi9cbiAgICB2YWx1ZTogRXhwcmVzc2lvbjtcbn1cblxuLyoqIEFuIGV4cHJlc3Npb24gd2hpY2ggbmVnYXRlcyB0aGUgdmFsdWUgb2YgdGhlIG9yaWdpbmFsIGZpZWxkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZWdhdGVkRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJuZWdhdGVkXCI7XG5cbiAgICAvKiogVGhlIGNoaWxkIGZpZWxkIHRvIG5lZ2F0ZS4gKi9cbiAgICBjaGlsZDogRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBFeHByZXNzaW9ucyB7XG4gICAgLyoqIFRoZSBpbXBsaWNpdCBmaWVsZCByZWZlcmVuY2luZyB0aGUgY3VycmVudCBmaWVsZC4gKi9cbiAgICBleHBvcnQgY29uc3QgUk9XOiBzdHJpbmcgPSBcIiRyb3dcIjtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZShuYW1lOiBzdHJpbmcpOiBWYXJpYWJsZUV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcInZhcmlhYmxlXCIsIG5hbWUgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZTogTGl0ZXJhbCk6IExpdGVyYWxFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJpbmFyeU9wKGxlZnQ6IEV4cHJlc3Npb24sIG9wOiBCaW5hcnlPcCwgcmlnaHQ6IEV4cHJlc3Npb24pOiBFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiaW5hcnlvcFwiLCBsZWZ0LCBvcCwgcmlnaHQgfSBhcyBCaW5hcnlPcEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluZGV4KG9iajogRXhwcmVzc2lvbiwgaW5kZXg6IEV4cHJlc3Npb24pOiBFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiaW5hcnlvcFwiLCBsZWZ0OiBvYmosIHJpZ2h0OiBpbmRleCwgb3A6IFwiaW5kZXhcIiB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0cyBhIHN0cmluZyBpbiBkb3Qtbm90YXRpb24tZm9ybWF0IGludG8gYSB2YXJpYWJsZSB3aGljaCBpbmRleGVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpbmRleFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IEV4cHJlc3Npb24ge1xuICAgICAgICBsZXQgcGFydHMgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbiA9IEV4cHJlc3Npb25zLnZhcmlhYmxlKHBhcnRzWzBdKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhcnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgcmVzdWx0ID0gRXhwcmVzc2lvbnMuaW5kZXgocmVzdWx0LCBFeHByZXNzaW9ucy5saXRlcmFsKHBhcnRzW2luZGV4XSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGFtYmRhKGFyZ3M6IHN0cmluZ1tdLCB2YWx1ZTogRXhwcmVzc2lvbik6IExhbWJkYUV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImxhbWJkYVwiLCBhcmd1bWVudHM6IGFyZ3MsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZ1bmMoZnVuYzogRXhwcmVzc2lvbiwgYXJnczogRXhwcmVzc2lvbltdKTogRnVuY3Rpb25FeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCBmdW5jLCBhcmd1bWVudHM6IGFyZ3MgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGlzdCh2YWx1ZXM6IEV4cHJlc3Npb25bXSk6IExpc3RFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsaXN0XCIsIHZhbHVlcyB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBvYmplY3QodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBFeHByZXNzaW9uPik6IE9iamVjdEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm9iamVjdFwiLCB2YWx1ZXMgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbmVnYXRlKGNoaWxkOiBFeHByZXNzaW9uKTogTmVnYXRlZEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5lZ2F0ZWRcIiwgY2hpbGQgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNDb21wYXJlT3Aob3A6IEJpbmFyeU9wKTogb3AgaXMgQ29tcGFyZU9wIHtcbiAgICAgICAgcmV0dXJuIG9wID09IFwiPD1cIiB8fCBvcCA9PSBcIjxcIiB8fCBvcCA9PSBcIj5cIiB8fCBvcCA9PSBcIj49XCIgfHwgb3AgPT0gXCIhPVwiIHx8IG9wID09IFwiPVwiO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGEgc2V0IG9mIGFsbCB1bmJvdW5kIHZhcmlhYmxlcyAoaS5lLiwgdmFyaWFibGVzIG5vdCBwcm92aWRlZCBieSBgcm93YCwgbGFtYmRhcywgb3Igc2ltaWxhci4pICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVuYm91bmRWYXJpYWJsZXMoZXhwcjogRXhwcmVzc2lvbiwgYm91bmQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbUk9XXSkpOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgYHJvd1tcIi4uLi5cIl1gLlxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZXhwci5vcCA9PT0gXCJpbmRleFwiICYmXG4gICAgICAgICAgICAgICAgICAgIGV4cHIubGVmdC50eXBlID09IFwidmFyaWFibGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICBleHByLmxlZnQubmFtZSA9PSBST1cgJiZcbiAgICAgICAgICAgICAgICAgICAgZXhwci5yaWdodC50eXBlID09IFwibGl0ZXJhbFwiICYmXG4gICAgICAgICAgICAgICAgICAgIExpdGVyYWxzLmlzU3RyaW5nKGV4cHIucmlnaHQudmFsdWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib3VuZC5oYXMoZXhwci5yaWdodC52YWx1ZSkpIHJldHVybiBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIG5ldyBTZXQoW2V4cHIucmlnaHQudmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBjaGVjayBsZWZ0IGFuZCByaWdodC5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5zZXRVbmlvbihbdW5ib3VuZFZhcmlhYmxlcyhleHByLmxlZnQsIGJvdW5kKSwgdW5ib3VuZFZhcmlhYmxlcyhleHByLnJpZ2h0LCBib3VuZCldKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKGV4cHIuYXJndW1lbnRzLm1hcCgoYSkgPT4gdW5ib3VuZFZhcmlhYmxlcyhhLCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJsYW1iZGFcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZCA9IGJvdW5kID8/IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBleHByLmFyZ3VtZW50cykgbmV3Qm91bmQuYWRkKGFyZyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5ib3VuZFZhcmlhYmxlcyhleHByLnZhbHVlLCBuZXdCb3VuZCk7XG4gICAgICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKGV4cHIudmFsdWVzLm1hcCgodikgPT4gdW5ib3VuZFZhcmlhYmxlcyh2LCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuYm91bmRWYXJpYWJsZXMoZXhwci5jaGlsZCwgYm91bmQpO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKE9iamVjdC52YWx1ZXMoZXhwci52YWx1ZXMpLm1hcCgodikgPT4gdW5ib3VuZFZhcmlhYmxlcyh2LCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YXJpYWJsZVwiOlxuICAgICAgICAgICAgICAgIGlmIChib3VuZCAmJiBib3VuZC5oYXMoZXhwci5uYW1lKSkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBuZXcgU2V0KFtleHByLm5hbWVdKTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW5kZXIgYW4gZXhwcmVzc2lvbiBhcyBhIHN0cmluZy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcoZXhwcjogRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5vcCA9PT0gXCJpbmRleFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmxlZnQpfVske3RvU3RyaW5nKGV4cHIucmlnaHQpfV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmxlZnQpfSAke2V4cHIub3B9ICR7dG9TdHJpbmcoZXhwci5yaWdodCl9YDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmZ1bmMpfSgke2V4cHIuYXJndW1lbnRzLm1hcCh0b1N0cmluZykuam9pbihcIiwgXCIpfSlgO1xuICAgICAgICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgKCR7ZXhwci5hcmd1bWVudHMuam9pbihcIiwgXCIpfSkgPT4gJHt0b1N0cmluZyhleHByLnZhbHVlKX1gO1xuICAgICAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFske2V4cHIudmFsdWVzLm1hcCh0b1N0cmluZykuam9pbihcIiwgXCIpfV1gO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCEke3RvU3RyaW5nKGV4cHIuY2hpbGQpfWA7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGB7JHtPYmplY3QuZW50cmllcyhleHByLnZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfTogJHt0b1N0cmluZyh2KX1gKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfX1gO1xuICAgICAgICAgICAgY2FzZSBcInZhcmlhYmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubmFtZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShleHByLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFwiJHt3cmFwcGVkLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaXRlcmFscy50b1N0cmluZyh3cmFwcGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY29uc3QgTlVMTCA9IEV4cHJlc3Npb25zLmxpdGVyYWwobnVsbCk7XG59XG4iLCAiLyoqIFByb3ZpZGVzIGNvcmUgcHJlYWN0IC8gcmVuZGVyaW5nIHV0aWxpdGllcyBmb3IgYWxsIHZpZXcgdHlwZXMuXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IEFwcCwgTWFya2Rvd25SZW5kZXJlciB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3VycmVudExvY2FsZSwgcmVuZGVyTWluaW1hbERhdGUsIHJlbmRlck1pbmltYWxEdXJhdGlvbiB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEltYWdlRGltZW5zaW9ucywgaXNJbWFnZUVtYmVkIH0gZnJvbSBcInV0aWxzL21lZGlhXCI7XG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIEZyYWdtZW50LCByZW5kZXIgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUVycm9yQm91bmRhcnkgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzLCBQcm9wc1dpdGhDaGlsZHJlbiwgbWVtbyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBFbWJlZCB9IGZyb20gXCJhcGkvdWkvZW1iZWRcIjtcblxuaW1wb3J0IFwiLi9lcnJvcnMuY3NzXCI7XG5cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8Q29tcG9uZW50Pih1bmRlZmluZWQhKTtcbmV4cG9ydCBjb25zdCBBUFBfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8QXBwPih1bmRlZmluZWQhKTtcbmV4cG9ydCBjb25zdCBEQVRBQ09SRV9DT05URVhUID0gY3JlYXRlQ29udGV4dDxEYXRhY29yZT4odW5kZWZpbmVkISk7XG5leHBvcnQgY29uc3QgU0VUVElOR1NfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8U2V0dGluZ3M+KHVuZGVmaW5lZCEpO1xuZXhwb3J0IGNvbnN0IENVUlJFTlRfRklMRV9DT05URVhUID0gY3JlYXRlQ29udGV4dDxzdHJpbmc+KFwiXCIpO1xuXG4vKiogTW9yZSBjb21wYWN0IHByb3ZpZGVyIGZvciBhbGwgb2YgdGhlIGRhdGFjb3JlIHJlYWN0IGNvbnRleHRzLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERhdGFjb3JlQ29udGV4dFByb3ZpZGVyKHtcbiAgICBjaGlsZHJlbixcbiAgICBhcHAsXG4gICAgY29tcG9uZW50LFxuICAgIGRhdGFjb3JlLFxuICAgIHNldHRpbmdzLFxufTogUHJvcHNXaXRoQ2hpbGRyZW48e1xuICAgIGFwcDogQXBwO1xuICAgIGNvbXBvbmVudDogQ29tcG9uZW50O1xuICAgIGRhdGFjb3JlOiBEYXRhY29yZTtcbiAgICBzZXR0aW5nczogU2V0dGluZ3M7XG59Pikge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDT01QT05FTlRfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17Y29tcG9uZW50fT5cbiAgICAgICAgICAgIDxBUFBfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17YXBwfT5cbiAgICAgICAgICAgICAgICA8REFUQUNPUkVfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17ZGF0YWNvcmV9PlxuICAgICAgICAgICAgICAgICAgICA8U0VUVElOR1NfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17c2V0dGluZ3N9PntjaGlsZHJlbn08L1NFVFRJTkdTX0NPTlRFWFQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9EQVRBQ09SRV9DT05URVhULlByb3ZpZGVyPlxuICAgICAgICAgICAgPC9BUFBfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgPC9DT01QT05FTlRfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICApO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpbmsoeyBsaW5rLCBzb3VyY2VQYXRoOiBtYXliZVNvdXJjZVBhdGggfTogeyBsaW5rOiBMaW5rIHwgc3RyaW5nOyBzb3VyY2VQYXRoPzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCB3b3Jrc3BhY2UgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKT8ud29ya3NwYWNlO1xuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyBjdXJyZW50UGF0aCA/PyBcIlwiO1xuICAgIGNvbnN0IHBhcnNlZCA9IHVzZU1lbW8oKCkgPT4gKExpdGVyYWxzLmlzTGluayhsaW5rKSA/IGxpbmsgOiBMaW5rLmluZmVyKGxpbmspKSwgW2xpbmtdKTtcblxuICAgIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXd0YWIgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgICAgIHdvcmtzcGFjZT8ub3BlbkxpbmtUZXh0KHBhcnNlZC5vYnNpZGlhbkxpbmsoKSwgc291cmNlUGF0aCwgbmV3dGFiKTtcbiAgICAgICAgfSxcbiAgICAgICAgW3BhcnNlZCwgc291cmNlUGF0aF1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGFcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3BhcnNlZC5kaXNwbGF5T3JEZWZhdWx0KCl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW50ZXJuYWwtbGlua1wiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgcmVsPVwibm9vcGVuZXJcIlxuICAgICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgIGRhdGEtaHJlZj17cGFyc2VkLm9ic2lkaWFuTGluaygpfVxuICAgICAgICA+XG4gICAgICAgICAgICB7cGFyc2VkLmRpc3BsYXlPckRlZmF1bHQoKX1cbiAgICAgICAgPC9hPlxuICAgICk7XG59XG5cbi8qKlxuICogQ29waWVzIGhvdyBhbiBPYnNpZGlhbiBsaW5rIGlzIHJlbmRlcmVkIGJ1dCBpcyBhYm91dCBhbiBvcmRlciBvZiBtYWduaXR1ZGUgZmFzdGVyIHRvIHJlbmRlciB0aGFuIHZpYSBtYXJrZG93biByZW5kZXJpbmcuICovXG5leHBvcnQgY29uc3QgT2JzaWRpYW5MaW5rID0gbWVtbyhSYXdMaW5rKTtcblxuLyoqQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd01hcmtkb3duKHtcbiAgICBjb250ZW50LFxuICAgIHNvdXJjZVBhdGg6IG1heWJlU291cmNlUGF0aCxcbiAgICBpbmxpbmUgPSB0cnVlLFxuICAgIHN0eWxlLFxuICAgIGNscyxcbiAgICBvbkNsaWNrLFxufToge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzO1xuICAgIGNscz86IHN0cmluZztcbiAgICBvbkNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBhbnk7XG59KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdXNlUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdXNlQ29udGV4dChDT01QT05FTlRfQ09OVEVYVCk7XG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcblxuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBtYXliZVNvdXJjZVBhdGggPz8gZGVmYXVsdFBhdGg7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRhaW5lci5jdXJyZW50KSByZXR1cm47XG5cbiAgICAgICAgY29udGFpbmVyLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgTWFya2Rvd25SZW5kZXJlci5yZW5kZXIoYXBwLCBjb250ZW50LCBjb250YWluZXIuY3VycmVudCwgc291cmNlUGF0aCwgY29tcG9uZW50KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLmN1cnJlbnQgfHwgIWlubGluZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBVbndyYXAgYW55IGNyZWF0ZWQgcGFyYWdyYXBoIGVsZW1lbnRzIGlmIHdlIGFyZSBpbmxpbmUuXG4gICAgICAgICAgICBsZXQgcGFyYWdyYXBoID0gY29udGFpbmVyLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInBcIik7XG4gICAgICAgICAgICB3aGlsZSAocGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gcGFyYWdyYXBoLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoLnJlcGxhY2VXaXRoKC4uLkFycmF5LmZyb20oY2hpbGRyZW4pKTtcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGggPSBjb250YWluZXIuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwicFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGF2ZSBlbWJlZHMgYWN0dWFsbHkgbG9hZCBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgYXMgcGxhaW4gdGV4dC5cbiAgICAgICAgICAgIGxldCBlbWJlZCA9IGNvbnRhaW5lci5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJzcGFuLmludGVybmFsLWVtYmVkOm5vdCguaXMtbG9hZGVkKVwiKTtcbiAgICAgICAgICAgIHdoaWxlIChlbWJlZCkge1xuICAgICAgICAgICAgICAgIGVtYmVkLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgICAgICA8QVBQX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e2FwcH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RW1iZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rPXtMaW5rLnBhcnNlSW5uZXIoZW1iZWQuZ2V0QXR0cmlidXRlKFwic3JjXCIpID8/IFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9BUFBfQ09OVEVYVC5Qcm92aWRlcj4sXG4gICAgICAgICAgICAgICAgICAgIGVtYmVkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbWJlZC5hZGRDbGFzcyhcImlzLWxvYWRlZFwiKTtcbiAgICAgICAgICAgICAgICBlbWJlZCA9IGNvbnRhaW5lci5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJzcGFuLmludGVybmFsLWVtYmVkOm5vdCguaXMtbG9hZGVkKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgW2NvbnRlbnQsIHNvdXJjZVBhdGgsIGlubGluZSwgY29udGFpbmVyLmN1cnJlbnRdKTtcblxuICAgIHJldHVybiA8c3BhbiByZWY9e2NvbnRhaW5lcn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2Nsc30gb25DbGljaz17b25DbGlja30+PC9zcGFuPjtcbn1cblxuLyoqXG4gKiBIYWNreSBwcmVhY3QgY29tcG9uZW50IHdoaWNoIHdyYXBzIE9ic2lkaWFuJ3MgbWFya2Rvd24gcmVuZGVyZXIgaW50byBhIG5lYXQgY29tcG9uZW50LiAqL1xuZXhwb3J0IGNvbnN0IE1hcmtkb3duID0gbWVtbyhSYXdNYXJrZG93bik7XG5cbi8qKlxuICogQGhpZGRlblxuICogIEludGVsbGlnZW50bHkgcmVuZGVyIGFuIGFyYml0cmFyeSBsaXRlcmFsIHZhbHVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpdCh7XG4gICAgdmFsdWUsXG4gICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxuICAgIGlubGluZSA9IGZhbHNlLFxuICAgIGRlcHRoID0gMCxcbn06IFByb3BzV2l0aENoaWxkcmVuPHtcbiAgICB2YWx1ZTogTGl0ZXJhbCB8IHVuZGVmaW5lZDtcbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgZGVwdGg/OiBudW1iZXI7XG59Pikge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdXNlQ29udGV4dChTRVRUSU5HU19DT05URVhUKTtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuXG4gICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyBkZWZhdWx0UGF0aDtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYmV5b25kIHRoZSBtYXhpbXVtIHJlbmRlciBkZXB0aC5cbiAgICBpZiAoZGVwdGggPj0gc2V0dGluZ3MubWF4UmVjdXJzaXZlUmVuZGVyRGVwdGgpIHJldHVybiA8RnJhZ21lbnQ+Li4uPC9GcmFnbWVudD47XG5cbiAgICBpZiAoTGl0ZXJhbHMuaXNOdWxsKHZhbHVlKSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiA8TWFya2Rvd24gaW5saW5lPXtpbmxpbmV9IGNvbnRlbnQ9e3NldHRpbmdzLnJlbmRlck51bGxBc30gc291cmNlUGF0aD17c291cmNlUGF0aH0gLz47XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxNYXJrZG93biBpbmxpbmU9e2lubGluZX0gY29udGVudD17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiA8RnJhZ21lbnQ+e1wiXCIgKyB2YWx1ZX08L0ZyYWdtZW50PjtcbiAgICB9IGVsc2UgaWYgKExpdGVyYWxzLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57XCJcIiArIHZhbHVlfTwvRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHtyZW5kZXJNaW5pbWFsRGF0ZSh2YWx1ZSwgc2V0dGluZ3MuZGVmYXVsdERhdGVGb3JtYXQsIHNldHRpbmdzLmRlZmF1bHREYXRlVGltZUZvcm1hdCwgY3VycmVudExvY2FsZSgpKX1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc0R1cmF0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gPEZyYWdtZW50PntyZW5kZXJNaW5pbWFsRHVyYXRpb24odmFsdWUpfTwvRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNMaW5rKHZhbHVlKSkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxpbmcgb2YgaW1hZ2UvdmlkZW8vZXRjIGVtYmVkZGluZ3MgdG8gYnlwYXNzIHRoZSBPYnNpZGlhbiBBUEkgbm90IHdvcmtpbmcuXG4gICAgICAgIGlmIChpc0ltYWdlRW1iZWQodmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgcmVhbEZpbGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdCh2YWx1ZS5wYXRoLCBzb3VyY2VQYXRoKTtcbiAgICAgICAgICAgIGlmICghcmVhbEZpbGUpIHJldHVybiA8TWFya2Rvd24gY29udGVudD17dmFsdWUubWFya2Rvd24oKX0gc291cmNlUGF0aD17c291cmNlUGF0aH0gLz47XG5cbiAgICAgICAgICAgIGxldCBkaW1lbnNpb25zID0gZXh0cmFjdEltYWdlRGltZW5zaW9ucyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgcmVzb3VyY2VQYXRoID0gYXBwLnZhdWx0LmdldFJlc291cmNlUGF0aChyZWFsRmlsZSk7XG5cbiAgICAgICAgICAgIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMubGVuZ3RoID09IDIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpbWcgYWx0PXt2YWx1ZS5wYXRofSBzcmM9e3Jlc291cmNlUGF0aH0gd2lkdGg9e2RpbWVuc2lvbnNbMF19IGhlaWdodD17ZGltZW5zaW9uc1sxXX0gLz47XG4gICAgICAgICAgICBlbHNlIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMubGVuZ3RoID09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpbWcgYWx0PXt2YWx1ZS5wYXRofSBzcmM9e3Jlc291cmNlUGF0aH0gd2lkdGg9e2RpbWVuc2lvbnNbMF19IC8+O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gPGltZyBhbHQ9e3ZhbHVlLnBhdGh9IHNyYz17cmVzb3VyY2VQYXRofSAvPjtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lbWJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIDxFbWJlZCBsaW5rPXt2YWx1ZX0gc291cmNlUGF0aD17c291cmNlUGF0aH0gaW5saW5lPXtpbmxpbmV9IC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxPYnNpZGlhbkxpbmsgbGluaz17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD4mbHQ7ZnVuY3Rpb24mZ3Q7PC9GcmFnbWVudD47XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIWlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXtcImRhdGF2aWV3IGRhdGF2aWV3LXVsIGRhdGF2aWV3LXJlc3VsdC1saXN0LXVsXCJ9PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKChzdWJ2YWx1ZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cImRhdGF2aWV3LXJlc3VsdC1saXN0LWxpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpdCB2YWx1ZT17c3VidmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDApIHJldHVybiA8RnJhZ21lbnQ+Jmx0O0VtcHR5IExpc3QmZ3Q7PC9GcmFnbWVudD47XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZGF0YXZpZXcgZGF0YXZpZXctcmVzdWx0LWxpc3Qtc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKChzdWJ2YWx1ZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW5kZXggPT0gMCA/IFwiXCIgOiBcIiwgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpdCB2YWx1ZT17c3VidmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIC8vIERvbid0IHJlbmRlciBjbGFzc2VzIGluIGNhc2UgdGhleSBoYXZlIHJlY3Vyc2l2ZSByZWZlcmVuY2VzOyBzcG9vcHkuXG4gICAgICAgIGlmICh2YWx1ZT8uY29uc3RydWN0b3I/Lm5hbWUgJiYgdmFsdWU/LmNvbnN0cnVjdG9yPy5uYW1lICE9IFwiT2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiA8RnJhZ21lbnQ+Jmx0O3t2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfSZndDs8L0ZyYWdtZW50PjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJkYXRhdmlldyBkYXRhdmlldy11bCBkYXRhdmlldy1yZXN1bHQtb2JqZWN0LXVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHtPYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChba2V5LCB2YWx1ZV0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJkYXRhdmlldyBkYXRhdmlldy1saSBkYXRhdmlldy1yZXN1bHQtb2JqZWN0LWxpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2tleX06IDxMaXQgdmFsdWU9e3ZhbHVlfSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSBpbmxpbmU9e2lubGluZX0gZGVwdGg9e2RlcHRoICsgMX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT0gMCkgcmV0dXJuIDxGcmFnbWVudD4mbHQ7RW1wdHkgT2JqZWN0Jmd0OzwvRnJhZ21lbnQ+O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRhdGF2aWV3IGRhdGF2aWV3LXJlc3VsdC1vYmplY3Qtc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICB7T2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2tleSwgdmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbmRleCA9PSAwID8gXCJcIiA6IFwiLCBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7a2V5fTogPExpdCB2YWx1ZT17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiA8RnJhZ21lbnQ+Jmx0O1VucmVjb2duaXplZDoge0pTT04uc3RyaW5naWZ5KHZhbHVlKX0mZ3Q7PC9GcmFnbWVudD47XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogSW50ZWxsaWdlbnRseSByZW5kZXIgYW4gYXJiaXRyYXJ5IGxpdGVyYWwgdmFsdWUuICovXG5leHBvcnQgY29uc3QgTGl0ID0gbWVtbyhSYXdMaXQpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFJlbmRlciBhIHByZXR0eSBjZW50ZXJlZCBlcnJvciBtZXNzYWdlIGluIGEgYm94LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVycm9yTWVzc2FnZSh7XG4gICAgdGl0bGUsXG4gICAgbWVzc2FnZSxcbiAgICBlcnJvcixcbiAgICByZXNldCxcbn06IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHJlc2V0PzogKCkgPT4gdm9pZDtcbn0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLWVycm9yLWJveFwiPlxuICAgICAgICAgICAge3RpdGxlICYmIDxoNCBjbGFzc05hbWU9XCJkYXRhY29yZS1lcnJvci10aXRsZVwiPnt0aXRsZX08L2g0Pn1cbiAgICAgICAgICAgIHttZXNzYWdlICYmIDxwIGNsYXNzTmFtZT1cImRhdGFjb3JlLWVycm9yLW1lc3NhZ2VcIj57bWVzc2FnZX08L3A+fVxuICAgICAgICAgICAge2Vycm9yICYmIDxwcmUgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZXJyb3ItcHJlXCI+e2Vycm9yfTwvcHJlPn1cbiAgICAgICAgICAgIHtyZXNldCAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJkYXRhY29yZS1lcnJvci1yZXRyeVwiIG9uQ2xpY2s9e3Jlc2V0fT5cbiAgICAgICAgICAgICAgICAgICAgUmVydW5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG5cbi8qKiBBIHNpbXBsZSBlcnJvciBib3VuZGFyeSB3aGljaCByZW5kZXJzIGEgbWVzc2FnZSBvbiBmYWlsdXJlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpbXBsZUVycm9yQm91bmRhcnkoe1xuICAgIHRpdGxlLFxuICAgIG1lc3NhZ2UsXG4gICAgY2hpbGRyZW4sXG59OiBQcm9wc1dpdGhDaGlsZHJlbjx7IHRpdGxlPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0+KSB7XG4gICAgY29uc3QgW2Vycm9yLCByZXNldF0gPSB1c2VFcnJvckJvdW5kYXJ5KCk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgdGl0bGU9e3RpdGxlfSBtZXNzYWdlPXttZXNzYWdlfSBlcnJvcj17ZXJyb3Iuc3RhY2t9IHJlc2V0PXtyZXNldH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57Y2hpbGRyZW59PC9GcmFnbWVudD47XG4gICAgfVxufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5cbmV4cG9ydCBjb25zdCBJTUFHRV9FWFRFTlNJT05TID0gT2JqZWN0LmZyZWV6ZShcbiAgICBuZXcgU2V0KFtcbiAgICAgICAgXCIudGlmXCIsXG4gICAgICAgIFwiLnRpZmZcIixcbiAgICAgICAgXCIuZ2lmXCIsXG4gICAgICAgIFwiLnBuZ1wiLFxuICAgICAgICBcIi5hcG5nXCIsXG4gICAgICAgIFwiLmF2aWZcIixcbiAgICAgICAgXCIuanBnXCIsXG4gICAgICAgIFwiLmpwZWdcIixcbiAgICAgICAgXCIuamZpZlwiLFxuICAgICAgICBcIi5wamVwZ1wiLFxuICAgICAgICBcIi5wanBcIixcbiAgICAgICAgXCIuc3ZnXCIsXG4gICAgICAgIFwiLndlYnBcIixcbiAgICAgICAgXCIuYm1wXCIsXG4gICAgICAgIFwiLmljb1wiLFxuICAgICAgICBcIi5jdXJcIixcbiAgICBdKVxuKTtcblxuLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGxpbmsgcG9pbnRzIHRvIGFuIGVtYmVkZGVkIGltYWdlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW1hZ2VFbWJlZChsaW5rOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgaWYgKCFsaW5rLnBhdGguY29udGFpbnMoXCIuXCIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgZXh0ZW5zaW9uID0gbGluay5wYXRoLnN1YnN0cmluZyhsaW5rLnBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICByZXR1cm4gbGluay50eXBlID09IFwiZmlsZVwiICYmIGxpbmsuZW1iZWQgJiYgSU1BR0VfRVhURU5TSU9OUy5oYXMoZXh0ZW5zaW9uKTtcbn1cblxuLyoqIEV4dHJhY3QgdGV4dCBvZiB0aGUgZm9ybSAnV3hIJyBvciAnVycgZnJvbSB0aGUgZGlzcGxheSBvZiBhIGxpbmsuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEltYWdlRGltZW5zaW9ucyhsaW5rOiBMaW5rKTogW251bWJlciwgbnVtYmVyXSB8IFtudW1iZXJdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWxpbmsuZGlzcGxheSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBtYXRjaCA9IC9eKFxcZCspeChcXGQrKSQvaXUuZXhlYyhsaW5rLmRpc3BsYXkpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIFtwYXJzZUludChtYXRjaFsxXSksIHBhcnNlSW50KG1hdGNoWzJdKV07XG5cbiAgICBsZXQgbWF0Y2gyID0gL14oXFxkKykvLmV4ZWMobGluay5kaXNwbGF5KTtcbiAgICBpZiAobWF0Y2gyKSByZXR1cm4gW3BhcnNlSW50KG1hdGNoMlsxXSldO1xuXG4gICAgLy8gTm8gbWF0Y2guXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKiogTm9ybWFsIGh5ZHJhdGlvbiB0aGF0IGF0dGFjaGVzIHRvIGEgRE9NIHRyZWUgYnV0IGRvZXMgbm90IGRpZmYgaXQuICovXG5leHBvcnQgY29uc3QgTU9ERV9IWURSQVRFID0gMSA8PCA1O1xuLyoqIFNpZ25pZmllcyB0aGlzIFZOb2RlIHN1c3BlbmRlZCBvbiB0aGUgcHJldmlvdXMgcmVuZGVyICovXG5leHBvcnQgY29uc3QgTU9ERV9TVVNQRU5ERUQgPSAxIDw8IDc7XG4vKiogSW5kaWNhdGVzIHRoYXQgdGhpcyBub2RlIG5lZWRzIHRvIGJlIGluc2VydGVkIHdoaWxlIHBhdGNoaW5nIGNoaWxkcmVuICovXG5leHBvcnQgY29uc3QgSU5TRVJUX1ZOT0RFID0gMSA8PCAxNjtcbi8qKiBJbmRpY2F0ZXMgYSBWTm9kZSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYW5vdGhlciBWTm9kZSBpbiB0aGUgZGlmZiAqL1xuZXhwb3J0IGNvbnN0IE1BVENIRUQgPSAxIDw8IDE3O1xuXG4vKiogUmVzZXQgYWxsIG1vZGUgZmxhZ3MgKi9cbmV4cG9ydCBjb25zdCBSRVNFVF9NT0RFID0gfihNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRCk7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9PQkogPSAvKiogQHR5cGUge2FueX0gKi8gKHt9KTtcbmV4cG9ydCBjb25zdCBFTVBUWV9BUlIgPSBbXTtcbmV4cG9ydCBjb25zdCBJU19OT05fRElNRU5TSU9OQUwgPVxuXHQvYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pO1xuIiwgImltcG9ydCB7IEVNUFRZX0FSUiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIEFzc2lnbiBwcm9wZXJ0aWVzIGZyb20gYHByb3BzYCB0byBgb2JqYFxuICogQHRlbXBsYXRlIE8sIFAgVGhlIG9iaiBhbmQgcHJvcHMgdHlwZXNcbiAqIEBwYXJhbSB7T30gb2JqIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvXG4gKiBAcGFyYW0ge1B9IHByb3BzIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm5zIHtPICYgUH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihvYmosIHByb3BzKSB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2hhbmdlIHRoZSB0eXBlIG9mIGBvYmpgIHRvIGJlIGBPICYgUGBcblx0Zm9yIChsZXQgaSBpbiBwcm9wcykgb2JqW2ldID0gcHJvcHNbaV07XG5cdHJldHVybiAvKiogQHR5cGUge08gJiBQfSAqLyAob2JqKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjaGlsZCBub2RlIGZyb20gaXRzIHBhcmVudCBpZiBhdHRhY2hlZC4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yXG4gKiBJRTExIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlKClgLiBVc2luZyB0aGlzIGZ1bmN0aW9uXG4gKiBpcyBzbWFsbGVyIHRoYW4gaW5jbHVkaW5nIGEgZGVkaWNhdGVkIHBvbHlmaWxsLlxuICogQHBhcmFtIHtwcmVhY3QuQ29udGFpbmVyTm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5vZGUobm9kZSkge1xuXHRsZXQgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0aWYgKHBhcmVudE5vZGUpIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzbGljZSA9IEVNUFRZX0FSUi5zbGljZTtcbiIsICJpbXBvcnQgeyBfY2F0Y2hFcnJvciB9IGZyb20gJy4vZGlmZi9jYXRjaC1lcnJvcic7XG5cbi8qKlxuICogVGhlIGBvcHRpb25gIG9iamVjdCBjYW4gcG90ZW50aWFsbHkgY29udGFpbiBjYWxsYmFjayBmdW5jdGlvbnNcbiAqIHRoYXQgYXJlIGNhbGxlZCBkdXJpbmcgdmFyaW91cyBzdGFnZXMgb2Ygb3VyIHJlbmRlcmVyLiBUaGlzIGlzIHRoZVxuICogZm91bmRhdGlvbiBvbiB3aGljaCBhbGwgb3VyIGFkZG9ucyBsaWtlIGBwcmVhY3QvZGVidWdgLCBgcHJlYWN0L2NvbXBhdGAsXG4gKiBhbmQgYHByZWFjdC9ob29rc2AgYXJlIGJhc2VkIG9uLiBTZWUgdGhlIGBPcHRpb25zYCB0eXBlIGluIGBpbnRlcm5hbC5kLnRzYFxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb24gaG9va3MgKG1vc3QgZWRpdG9ycy9JREVzIGFsbG93IHlvdSB0b1xuICogY3RybCtjbGljayBvciBjbWQrY2xpY2sgb24gbWFjIHRoZSB0eXBlIGRlZmluaXRpb24gYmVsb3cpLlxuICogQHR5cGUge09wdGlvbnN9XG4gKi9cbmNvbnN0IG9wdGlvbnMgPSB7XG5cdF9jYXRjaEVycm9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBvcHRpb25zO1xuIiwgImltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5cbmxldCB2bm9kZUlkID0gMDtcblxuLyoqXG4gKiBDcmVhdGUgYW4gdmlydHVhbCBub2RlICh1c2VkIGZvciBKU1gpXG4gKiBAcGFyYW0ge1ZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudCBjb25zdHJ1Y3RvciBmb3IgdGhpc1xuICogdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGwgfCB1bmRlZmluZWR9IFtwcm9wc10gVGhlIHByb3BlcnRpZXMgb2YgdGhlIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4nKS5Db21wb25lbnRDaGlsZHJlbj59IFtjaGlsZHJlbl0gVGhlIGNoaWxkcmVuIG9mIHRoZVxuICogdmlydHVhbCBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuXHRsZXQgbm9ybWFsaXplZFByb3BzID0ge30sXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRpO1xuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0fVxuXG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jaGlsZHJlbiA9XG5cdFx0XHRhcmd1bWVudHMubGVuZ3RoID4gMyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGNoaWxkcmVuO1xuXHR9XG5cblx0Ly8gSWYgYSBDb21wb25lbnQgVk5vZGUsIGNoZWNrIGZvciBhbmQgYXBwbHkgZGVmYXVsdFByb3BzXG5cdC8vIE5vdGU6IHR5cGUgbWF5IGJlIHVuZGVmaW5lZCBpbiBkZXZlbG9wbWVudCwgbXVzdCBuZXZlciBlcnJvciBoZXJlLlxuXHRpZiAodHlwZW9mIHR5cGUgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlLmRlZmF1bHRQcm9wcyAhPSBudWxsKSB7XG5cdFx0Zm9yIChpIGluIHR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzW2ldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gdHlwZS5kZWZhdWx0UHJvcHNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIG5vcm1hbGl6ZWRQcm9wcywga2V5LCByZWYsIG51bGwpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIFZOb2RlICh1c2VkIGludGVybmFsbHkgYnkgUHJlYWN0KVxuICogQHBhcmFtIHtWTm9kZVtcInR5cGVcIl19IHR5cGUgVGhlIG5vZGUgbmFtZSBvciBDb21wb25lbnRcbiAqIENvbnN0cnVjdG9yIGZvciB0aGlzIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3QgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBwcm9wcyBUaGUgcHJvcGVydGllcyBvZiB0aGlzIHZpcnR1YWwgbm9kZS5cbiAqIElmIHRoaXMgdmlydHVhbCBub2RlIHJlcHJlc2VudHMgYSB0ZXh0IG5vZGUsIHRoaXMgaXMgdGhlIHRleHQgb2YgdGhlIG5vZGUgKHN0cmluZyBvciBudW1iZXIpLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBrZXkgVGhlIGtleSBmb3IgdGhpcyB2aXJ0dWFsIG5vZGUsIHVzZWQgd2hlblxuICogZGlmZmluZyBpdCBhZ2FpbnN0IGl0cyBjaGlsZHJlblxuICogQHBhcmFtIHtWTm9kZVtcInJlZlwiXX0gcmVmIFRoZSByZWYgcHJvcGVydHkgdGhhdCB3aWxsXG4gKiByZWNlaXZlIGEgcmVmZXJlbmNlIHRvIGl0cyBjcmVhdGVkIGNoaWxkXG4gKiBAcmV0dXJucyB7Vk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywga2V5LCByZWYsIG9yaWdpbmFsKSB7XG5cdC8vIFY4IHNlZW1zIHRvIGJlIGJldHRlciBhdCBkZXRlY3RpbmcgdHlwZSBzaGFwZXMgaWYgdGhlIG9iamVjdCBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBjYWxsIHNpdGVcblx0Ly8gRG8gbm90IGlubGluZSBpbnRvIGNyZWF0ZUVsZW1lbnQgYW5kIGNvZXJjZVRvVk5vZGUhXG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGNvbnN0IHZub2RlID0ge1xuXHRcdHR5cGUsXG5cdFx0cHJvcHMsXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRfY2hpbGRyZW46IG51bGwsXG5cdFx0X3BhcmVudDogbnVsbCxcblx0XHRfZGVwdGg6IDAsXG5cdFx0X2RvbTogbnVsbCxcblx0XHQvLyBfbmV4dERvbSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHVuZGVmaW5lZCBiL2MgaXQgd2lsbCBldmVudHVhbGx5XG5cdFx0Ly8gYmUgc2V0IHRvIGRvbS5uZXh0U2libGluZyB3aGljaCBjYW4gcmV0dXJuIGBudWxsYCBhbmQgaXQgaXMgaW1wb3J0YW50XG5cdFx0Ly8gdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIHVuaW5pdGlhbGl6ZWQgX25leHREb20gYW5kXG5cdFx0Ly8gYSBfbmV4dERvbSB0aGF0IGhhcyBiZWVuIHNldCB0byBgbnVsbGBcblx0XHRfbmV4dERvbTogdW5kZWZpbmVkLFxuXHRcdF9jb21wb25lbnQ6IG51bGwsXG5cdFx0Y29uc3RydWN0b3I6IHVuZGVmaW5lZCxcblx0XHRfb3JpZ2luYWw6IG9yaWdpbmFsID09IG51bGwgPyArK3Zub2RlSWQgOiBvcmlnaW5hbCxcblx0XHRfaW5kZXg6IC0xLFxuXHRcdF9mbGFnczogMFxuXHR9O1xuXG5cdC8vIE9ubHkgaW52b2tlIHRoZSB2bm9kZSBob29rIGlmIHRoaXMgd2FzICpub3QqIGEgZGlyZWN0IGNvcHk6XG5cdGlmIChvcmlnaW5hbCA9PSBudWxsICYmIG9wdGlvbnMudm5vZGUgIT0gbnVsbCkgb3B0aW9ucy52bm9kZSh2bm9kZSk7XG5cblx0cmV0dXJuIHZub2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuXHRyZXR1cm4geyBjdXJyZW50OiBudWxsIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGcmFnbWVudChwcm9wcykge1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCBQcmVhY3QgVk5vZGUuXG4gKiBAcGFyYW0geyp9IHZub2RlXG4gKiBAcmV0dXJucyB7dm5vZGUgaXMgVk5vZGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1ZhbGlkRWxlbWVudCA9IHZub2RlID0+XG5cdHZub2RlICE9IG51bGwgJiYgdm5vZGUuY29uc3RydWN0b3IgPT0gdW5kZWZpbmVkO1xuIiwgImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBkaWZmLCBjb21taXRSb290IH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgTU9ERV9IWURSQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEJhc2UgQ29tcG9uZW50IGNsYXNzLiBQcm92aWRlcyBgc2V0U3RhdGUoKWAgYW5kIGBmb3JjZVVwZGF0ZSgpYCwgd2hpY2hcbiAqIHRyaWdnZXIgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgVGhlIGluaXRpYWwgY29tcG9uZW50IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdH0gY29udGV4dCBUaGUgaW5pdGlhbCBjb250ZXh0IGZyb20gcGFyZW50IGNvbXBvbmVudHMnXG4gKiBnZXRDaGlsZENvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2VDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcblx0dGhpcy5wcm9wcyA9IHByb3BzO1xuXHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBjb21wb25lbnQgc3RhdGUgYW5kIHNjaGVkdWxlIGEgcmUtcmVuZGVyLlxuICogQHRoaXMge0NvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgKChzOiBvYmplY3QsIHA6IG9iamVjdCkgPT4gb2JqZWN0KX0gdXBkYXRlIEEgaGFzaCBvZiBzdGF0ZVxuICogcHJvcGVydGllcyB0byB1cGRhdGUgd2l0aCBuZXcgdmFsdWVzIG9yIGEgZnVuY3Rpb24gdGhhdCBnaXZlbiB0aGUgY3VycmVudFxuICogc3RhdGUgYW5kIHByb3BzIHJldHVybnMgYSBuZXcgcGFydGlhbCBzdGF0ZVxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uY2UgY29tcG9uZW50IHN0YXRlIGlzXG4gKiB1cGRhdGVkXG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHVwZGF0ZSwgY2FsbGJhY2spIHtcblx0Ly8gb25seSBjbG9uZSBzdGF0ZSB3aGVuIGNvcHlpbmcgdG8gbmV4dFN0YXRlIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgcztcblx0aWYgKHRoaXMuX25leHRTdGF0ZSAhPSBudWxsICYmIHRoaXMuX25leHRTdGF0ZSAhPT0gdGhpcy5zdGF0ZSkge1xuXHRcdHMgPSB0aGlzLl9uZXh0U3RhdGU7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IHRoaXMuX25leHRTdGF0ZSA9IGFzc2lnbih7fSwgdGhpcy5zdGF0ZSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHVwZGF0ZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gU29tZSBsaWJyYXJpZXMgbGlrZSBgaW1tZXJgIG1hcmsgdGhlIGN1cnJlbnQgc3RhdGUgYXMgcmVhZG9ubHksXG5cdFx0Ly8gcHJldmVudGluZyB1cyBmcm9tIG11dGF0aW5nIGl0LCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LiBTZWUgIzI3MTZcblx0XHR1cGRhdGUgPSB1cGRhdGUoYXNzaWduKHt9LCBzKSwgdGhpcy5wcm9wcyk7XG5cdH1cblxuXHRpZiAodXBkYXRlKSB7XG5cdFx0YXNzaWduKHMsIHVwZGF0ZSk7XG5cdH1cblxuXHQvLyBTa2lwIHVwZGF0ZSBpZiB1cGRhdGVyIGZ1bmN0aW9uIHJldHVybmVkIG51bGxcblx0aWYgKHVwZGF0ZSA9PSBudWxsKSByZXR1cm47XG5cblx0aWYgKHRoaXMuX3Zub2RlKSB7XG5cdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLl9zdGF0ZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHR9XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBJbW1lZGlhdGVseSBwZXJmb3JtIGEgc3luY2hyb25vdXMgcmUtcmVuZGVyIG9mIHRoZSBjb21wb25lbnRcbiAqIEB0aGlzIHtDb21wb25lbnR9XG4gKiBAcGFyYW0geygpID0+IHZvaWR9IFtjYWxsYmFja10gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzXG4gKiByZS1yZW5kZXJlZFxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRpZiAodGhpcy5fdm5vZGUpIHtcblx0XHQvLyBTZXQgcmVuZGVyIG1vZGUgc28gdGhhdCB3ZSBjYW4gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgcmVuZGVyIHJlcXVlc3Rcblx0XHQvLyBpcyBjb21pbmcgZnJvbS4gV2UgbmVlZCB0aGlzIGJlY2F1c2UgZm9yY2VVcGRhdGUgc2hvdWxkIG5ldmVyIGNhbGxcblx0XHQvLyBzaG91bGRDb21wb25lbnRVcGRhdGVcblx0XHR0aGlzLl9mb3JjZSA9IHRydWU7XG5cdFx0aWYgKGNhbGxiYWNrKSB0aGlzLl9yZW5kZXJDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBBY2NlcHRzIGBwcm9wc2AgYW5kIGBzdGF0ZWAsIGFuZCByZXR1cm5zIGEgbmV3IFZpcnR1YWwgRE9NIHRyZWUgdG8gYnVpbGQuXG4gKiBWaXJ0dWFsIERPTSBpcyBnZW5lcmFsbHkgY29uc3RydWN0ZWQgdmlhIFtKU1hdKGh0dHA6Ly9qYXNvbmZvcm1hdC5jb20vd3RmLWlzLWpzeCkuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgUHJvcHMgKGVnOiBKU1ggYXR0cmlidXRlcykgcmVjZWl2ZWQgZnJvbSBwYXJlbnRcbiAqIGVsZW1lbnQvY29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgVGhlIGNvbXBvbmVudCdzIGN1cnJlbnQgc3RhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IENvbnRleHQgb2JqZWN0LCBhcyByZXR1cm5lZCBieSB0aGUgbmVhcmVzdFxuICogYW5jZXN0b3IncyBgZ2V0Q2hpbGRDb250ZXh0KClgXG4gKiBAcmV0dXJucyB7Q29tcG9uZW50Q2hpbGRyZW4gfCB2b2lkfVxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBGcmFnbWVudDtcblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsfSBbY2hpbGRJbmRleF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERvbVNpYmxpbmcodm5vZGUsIGNoaWxkSW5kZXgpIHtcblx0aWYgKGNoaWxkSW5kZXggPT0gbnVsbCkge1xuXHRcdC8vIFVzZSBjaGlsZEluZGV4PT1udWxsIGFzIGEgc2lnbmFsIHRvIHJlc3VtZSB0aGUgc2VhcmNoIGZyb20gdGhlIHZub2RlJ3Mgc2libGluZ1xuXHRcdHJldHVybiB2bm9kZS5fcGFyZW50XG5cdFx0XHQ/IGdldERvbVNpYmxpbmcodm5vZGUuX3BhcmVudCwgdm5vZGUuX2luZGV4ICsgMSlcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdGxldCBzaWJsaW5nO1xuXHRmb3IgKDsgY2hpbGRJbmRleCA8IHZub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdHNpYmxpbmcgPSB2bm9kZS5fY2hpbGRyZW5bY2hpbGRJbmRleF07XG5cblx0XHRpZiAoc2libGluZyAhPSBudWxsICYmIHNpYmxpbmcuX2RvbSAhPSBudWxsKSB7XG5cdFx0XHQvLyBTaW5jZSB1cGRhdGVQYXJlbnREb21Qb2ludGVycyBrZWVwcyBfZG9tIHBvaW50ZXIgY29ycmVjdCxcblx0XHRcdC8vIHdlIGNhbiByZWx5IG9uIF9kb20gdG8gdGVsbCB1cyBpZiB0aGlzIHN1YnRyZWUgY29udGFpbnMgYVxuXHRcdFx0Ly8gcmVuZGVyZWQgRE9NIG5vZGUsIGFuZCB3aGF0IHRoZSBmaXJzdCByZW5kZXJlZCBET00gbm9kZSBpc1xuXHRcdFx0cmV0dXJuIHNpYmxpbmcuX2RvbTtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBub3QgZm91bmQgYSBET00gbm9kZSBpbiB0aGlzIHZub2RlJ3MgY2hpbGRyZW4uXG5cdC8vIFdlIG11c3QgcmVzdW1lIGZyb20gdGhpcyB2bm9kZSdzIHNpYmxpbmcgKGluIGl0J3MgcGFyZW50IF9jaGlsZHJlbiBhcnJheSlcblx0Ly8gT25seSBjbGltYiB1cCBhbmQgc2VhcmNoIHRoZSBwYXJlbnQgaWYgd2UgYXJlbid0IHNlYXJjaGluZyB0aHJvdWdoIGEgRE9NXG5cdC8vIFZOb2RlIChtZWFuaW5nIHdlIHJlYWNoZWQgdGhlIERPTSBwYXJlbnQgb2YgdGhlIG9yaWdpbmFsIHZub2RlIHRoYXQgYmVnYW5cblx0Ly8gdGhlIHNlYXJjaClcblx0cmV0dXJuIHR5cGVvZiB2bm9kZS50eXBlID09ICdmdW5jdGlvbicgPyBnZXREb21TaWJsaW5nKHZub2RlKSA6IG51bGw7XG59XG5cbi8qKlxuICogVHJpZ2dlciBpbi1wbGFjZSByZS1yZW5kZXJpbmcgb2YgYSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50IFRoZSBjb21wb25lbnQgdG8gcmVyZW5kZXJcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRsZXQgb2xkVk5vZGUgPSBjb21wb25lbnQuX3Zub2RlLFxuXHRcdG9sZERvbSA9IG9sZFZOb2RlLl9kb20sXG5cdFx0Y29tbWl0UXVldWUgPSBbXSxcblx0XHRyZWZRdWV1ZSA9IFtdO1xuXG5cdGlmIChjb21wb25lbnQuX3BhcmVudERvbSkge1xuXHRcdGNvbnN0IG5ld1ZOb2RlID0gYXNzaWduKHt9LCBvbGRWTm9kZSk7XG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsICsgMTtcblx0XHRpZiAob3B0aW9ucy52bm9kZSkgb3B0aW9ucy52bm9kZShuZXdWTm9kZSk7XG5cblx0XHRkaWZmKFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Y29tcG9uZW50Ll9nbG9iYWxDb250ZXh0LFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20ub3duZXJTVkdFbGVtZW50ICE9PSB1bmRlZmluZWQsXG5cdFx0XHRvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUgPyBbb2xkRG9tXSA6IG51bGwsXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdG9sZERvbSA9PSBudWxsID8gZ2V0RG9tU2libGluZyhvbGRWTm9kZSkgOiBvbGREb20sXG5cdFx0XHQhIShvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsO1xuXHRcdG5ld1ZOb2RlLl9wYXJlbnQuX2NoaWxkcmVuW25ld1ZOb2RlLl9pbmRleF0gPSBuZXdWTm9kZTtcblx0XHRjb21taXRSb290KGNvbW1pdFF1ZXVlLCBuZXdWTm9kZSwgcmVmUXVldWUpO1xuXG5cdFx0aWYgKG5ld1ZOb2RlLl9kb20gIT0gb2xkRG9tKSB7XG5cdFx0XHR1cGRhdGVQYXJlbnREb21Qb2ludGVycyhuZXdWTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUGFyZW50RG9tUG9pbnRlcnModm5vZGUpIHtcblx0aWYgKCh2bm9kZSA9IHZub2RlLl9wYXJlbnQpICE9IG51bGwgJiYgdm5vZGUuX2NvbXBvbmVudCAhPSBudWxsKSB7XG5cdFx0dm5vZGUuX2RvbSA9IHZub2RlLl9jb21wb25lbnQuYmFzZSA9IG51bGw7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCBjaGlsZCA9IHZub2RlLl9jaGlsZHJlbltpXTtcblx0XHRcdGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLl9kb20gIT0gbnVsbCkge1xuXHRcdFx0XHR2bm9kZS5fZG9tID0gdm5vZGUuX2NvbXBvbmVudC5iYXNlID0gY2hpbGQuX2RvbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzKHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSByZW5kZXIgcXVldWVcbiAqIEB0eXBlIHtBcnJheTxDb21wb25lbnQ+fVxuICovXG5sZXQgcmVyZW5kZXJRdWV1ZSA9IFtdO1xuXG4vKlxuICogVGhlIHZhbHVlIG9mIGBDb21wb25lbnQuZGVib3VuY2VgIG11c3QgYXN5bmNocm9ub3VzbHkgaW52b2tlIHRoZSBwYXNzZWQgaW4gY2FsbGJhY2suIEl0IGlzXG4gKiBpbXBvcnRhbnQgdGhhdCBjb250cmlidXRvcnMgdG8gUHJlYWN0IGNhbiBjb25zaXN0ZW50bHkgcmVhc29uIGFib3V0IHdoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCwgZXRjLlxuICogZG8sIGFuZCB3aGVuIHRoZWlyIGVmZmVjdHMgd2lsbCBiZSBhcHBsaWVkLiBTZWUgdGhlIGxpbmtzIGJlbG93IGZvciBzb21lIGZ1cnRoZXIgcmVhZGluZyBvbiBkZXNpZ25pbmdcbiAqIGFzeW5jaHJvbm91cyBBUElzLlxuICogKiBbRGVzaWduaW5nIEFQSXMgZm9yIEFzeW5jaHJvbnldKGh0dHBzOi8vYmxvZy5penMubWUvMjAxMy8wOC9kZXNpZ25pbmctYXBpcy1mb3ItYXN5bmNocm9ueSlcbiAqICogW0NhbGxiYWNrcyBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzXShodHRwczovL2Jsb2cub21ldGVyLmNvbS8yMDExLzA3LzI0L2NhbGxiYWNrcy1zeW5jaHJvbm91cy1hbmQtYXN5bmNocm9ub3VzLylcbiAqL1xuXG5sZXQgcHJldkRlYm91bmNlO1xuXG5jb25zdCBkZWZlciA9XG5cdHR5cGVvZiBQcm9taXNlID09ICdmdW5jdGlvbidcblx0XHQ/IFByb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSlcblx0XHQ6IHNldFRpbWVvdXQ7XG5cbi8qKlxuICogRW5xdWV1ZSBhIHJlcmVuZGVyIG9mIGEgY29tcG9uZW50XG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gYyBUaGUgY29tcG9uZW50IHRvIHJlcmVuZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnF1ZXVlUmVuZGVyKGMpIHtcblx0aWYgKFxuXHRcdCghYy5fZGlydHkgJiZcblx0XHRcdChjLl9kaXJ0eSA9IHRydWUpICYmXG5cdFx0XHRyZXJlbmRlclF1ZXVlLnB1c2goYykgJiZcblx0XHRcdCFwcm9jZXNzLl9yZXJlbmRlckNvdW50KyspIHx8XG5cdFx0cHJldkRlYm91bmNlICE9PSBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nXG5cdCkge1xuXHRcdHByZXZEZWJvdW5jZSA9IG9wdGlvbnMuZGVib3VuY2VSZW5kZXJpbmc7XG5cdFx0KHByZXZEZWJvdW5jZSB8fCBkZWZlcikocHJvY2Vzcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gYVxuICogQHBhcmFtIHtDb21wb25lbnR9IGJcbiAqL1xuY29uc3QgZGVwdGhTb3J0ID0gKGEsIGIpID0+IGEuX3Zub2RlLl9kZXB0aCAtIGIuX3Zub2RlLl9kZXB0aDtcblxuLyoqIEZsdXNoIHRoZSByZW5kZXIgcXVldWUgYnkgcmVyZW5kZXJpbmcgYWxsIHF1ZXVlZCBjb21wb25lbnRzICovXG5mdW5jdGlvbiBwcm9jZXNzKCkge1xuXHRsZXQgYztcblx0cmVyZW5kZXJRdWV1ZS5zb3J0KGRlcHRoU29ydCk7XG5cdC8vIERvbid0IHVwZGF0ZSBgcmVuZGVyQ291bnRgIHlldC4gS2VlcCBpdHMgdmFsdWUgbm9uLXplcm8gdG8gcHJldmVudCB1bm5lY2Vzc2FyeVxuXHQvLyBwcm9jZXNzKCkgY2FsbHMgZnJvbSBnZXR0aW5nIHNjaGVkdWxlZCB3aGlsZSBgcXVldWVgIGlzIHN0aWxsIGJlaW5nIGNvbnN1bWVkLlxuXHR3aGlsZSAoKGMgPSByZXJlbmRlclF1ZXVlLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKGMuX2RpcnR5KSB7XG5cdFx0XHRsZXQgcmVuZGVyUXVldWVMZW5ndGggPSByZXJlbmRlclF1ZXVlLmxlbmd0aDtcblx0XHRcdHJlbmRlckNvbXBvbmVudChjKTtcblx0XHRcdGlmIChyZXJlbmRlclF1ZXVlLmxlbmd0aCA+IHJlbmRlclF1ZXVlTGVuZ3RoKSB7XG5cdFx0XHRcdC8vIFdoZW4gaS5lLiByZXJlbmRlcmluZyBhIHByb3ZpZGVyIGFkZGl0aW9uYWwgbmV3IGl0ZW1zIGNhbiBiZSBpbmplY3RlZCwgd2Ugd2FudCB0b1xuXHRcdFx0XHQvLyBrZWVwIHRoZSBvcmRlciBmcm9tIHRvcCB0byBib3R0b20gd2l0aCB0aG9zZSBuZXcgaXRlbXMgc28gd2UgY2FuIGhhbmRsZSB0aGVtIGluIGFcblx0XHRcdFx0Ly8gc2luZ2xlIHBhc3Ncblx0XHRcdFx0cmVyZW5kZXJRdWV1ZS5zb3J0KGRlcHRoU29ydCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHByb2Nlc3MuX3JlcmVuZGVyQ291bnQgPSAwO1xufVxuXG5wcm9jZXNzLl9yZXJlbmRlckNvdW50ID0gMDtcbiIsICJpbXBvcnQgeyBJU19OT05fRElNRU5TSU9OQUwgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi4vb3B0aW9ucyc7XG5cbmZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlLCBrZXksIHZhbHVlKSB7XG5cdGlmIChrZXlbMF0gPT09ICctJykge1xuXHRcdHN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuXHR9IGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcblx0XHRzdHlsZVtrZXldID0gJyc7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9ICdudW1iZXInIHx8IElTX05PTl9ESU1FTlNJT05BTC50ZXN0KGtleSkpIHtcblx0XHRzdHlsZVtrZXldID0gdmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGVba2V5XSA9IHZhbHVlICsgJ3B4Jztcblx0fVxufVxuXG4vLyBBIGxvZ2ljYWwgY2xvY2sgdG8gc29sdmUgaXNzdWVzIGxpa2UgaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9pc3N1ZXMvMzkyNy5cbi8vIFdoZW4gdGhlIERPTSBwZXJmb3JtcyBhbiBldmVudCBpdCBsZWF2ZXMgbWljcm8tdGlja3MgaW4gYmV0d2VlbiBidWJibGluZyB1cCB3aGljaCBtZWFucyB0aGF0XG4vLyBhbiBldmVudCBjYW4gdHJpZ2dlciBvbiBhIG5ld2x5IHJlYXRlZCBET00tbm9kZSB3aGlsZSB0aGUgZXZlbnQgYnViYmxlcyB1cC5cbi8vXG4vLyBPcmlnaW5hbGx5IGluc3BpcmVkIGJ5IFZ1ZVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb3JlL2Jsb2IvY2FlYjhhNjg4MTFhMWIwZjc5L3BhY2thZ2VzL3J1bnRpbWUtZG9tL3NyYy9tb2R1bGVzL2V2ZW50cy50cyNMOTAtTDEwMSksXG4vLyBidXQgbW9kaWZpZWQgdG8gdXNlIGEgbG9naWNhbCBjbG9jayBpbnN0ZWFkIG9mIERhdGUubm93KCkgaW4gY2FzZSBldmVudCBoYW5kbGVycyBnZXQgYXR0YWNoZWRcbi8vIGFuZCBldmVudHMgZ2V0IGRpc3BhdGNoZWQgZHVyaW5nIHRoZSBzYW1lIG1pbGxpc2Vjb25kLlxuLy9cbi8vIFRoZSBjbG9jayBpcyBpbmNyZW1lbnRlZCBhZnRlciBlYWNoIG5ldyBldmVudCBkaXNwYXRjaC4gVGhpcyBhbGxvd3MgMSAwMDAgMDAwIG5ldyBldmVudHNcbi8vIHBlciBzZWNvbmQgZm9yIG92ZXIgMjgwIHllYXJzIGJlZm9yZSB0aGUgdmFsdWUgcmVhY2hlcyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAoMioqNTMgLSAxKS5cbmxldCBldmVudENsb2NrID0gMDtcblxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvbiBhIERPTSBub2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIG5vZGUgdG8gbW9kaWZ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0XG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvXG4gKiBAcGFyYW0geyp9IG9sZFZhbHVlIFRoZSBvbGQgdmFsdWUgdGhlIHByb3BlcnR5IGhhZFxuICogQHBhcmFtIHtib29sZWFufSBpc1N2ZyBXaGV0aGVyIG9yIG5vdCB0aGlzIERPTSBub2RlIGlzIGFuIFNWRyBub2RlIG9yIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoZG9tLCBuYW1lLCB2YWx1ZSwgb2xkVmFsdWUsIGlzU3ZnKSB7XG5cdGxldCB1c2VDYXB0dXJlO1xuXG5cdG86IGlmIChuYW1lID09PSAnc3R5bGUnKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0ZG9tLnN0eWxlLmNzc1RleHQgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHR5cGVvZiBvbGRWYWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRkb20uc3R5bGUuY3NzVGV4dCA9IG9sZFZhbHVlID0gJyc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbGRWYWx1ZSkge1xuXHRcdFx0XHRmb3IgKG5hbWUgaW4gb2xkVmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoISh2YWx1ZSAmJiBuYW1lIGluIHZhbHVlKSkge1xuXHRcdFx0XHRcdFx0c2V0U3R5bGUoZG9tLnN0eWxlLCBuYW1lLCAnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRmb3IgKG5hbWUgaW4gdmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoIW9sZFZhbHVlIHx8IHZhbHVlW25hbWVdICE9PSBvbGRWYWx1ZVtuYW1lXSkge1xuXHRcdFx0XHRcdFx0c2V0U3R5bGUoZG9tLnN0eWxlLCBuYW1lLCB2YWx1ZVtuYW1lXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIEJlbmNobWFyayBmb3IgY29tcGFyaXNvbjogaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81NzRjOTU0YmRiOTY1YjlhMDA5NjVhYzZcblx0ZWxzZSBpZiAobmFtZVswXSA9PT0gJ28nICYmIG5hbWVbMV0gPT09ICduJykge1xuXHRcdHVzZUNhcHR1cmUgPVxuXHRcdFx0bmFtZSAhPT0gKG5hbWUgPSBuYW1lLnJlcGxhY2UoLyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksICckMScpKTtcblxuXHRcdC8vIEluZmVyIGNvcnJlY3QgY2FzaW5nIGZvciBET00gYnVpbHQtaW4gZXZlbnRzOlxuXHRcdGlmIChcblx0XHRcdG5hbWUudG9Mb3dlckNhc2UoKSBpbiBkb20gfHxcblx0XHRcdG5hbWUgPT09ICdvbkZvY3VzT3V0JyB8fFxuXHRcdFx0bmFtZSA9PT0gJ29uRm9jdXNJbidcblx0XHQpXG5cdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDIpO1xuXHRcdGVsc2UgbmFtZSA9IG5hbWUuc2xpY2UoMik7XG5cblx0XHRpZiAoIWRvbS5fbGlzdGVuZXJzKSBkb20uX2xpc3RlbmVycyA9IHt9O1xuXHRcdGRvbS5fbGlzdGVuZXJzW25hbWUgKyB1c2VDYXB0dXJlXSA9IHZhbHVlO1xuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRpZiAoIW9sZFZhbHVlKSB7XG5cdFx0XHRcdHZhbHVlLl9hdHRhY2hlZCA9IGV2ZW50Q2xvY2s7XG5cdFx0XHRcdGRvbS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdXNlQ2FwdHVyZSA/IGV2ZW50UHJveHlDYXB0dXJlIDogZXZlbnRQcm94eSxcbiAgICAgICAgICB1c2VDYXB0dXJlXG4gICAgICAgICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWx1ZS5fYXR0YWNoZWQgPSBvbGRWYWx1ZS5fYXR0YWNoZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHR1c2VDYXB0dXJlID8gZXZlbnRQcm94eUNhcHR1cmUgOiBldmVudFByb3h5LFxuXHRcdFx0XHR1c2VDYXB0dXJlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoaXNTdmcpIHtcblx0XHRcdC8vIE5vcm1hbGl6ZSBpbmNvcnJlY3QgcHJvcCB1c2FnZSBmb3IgU1ZHOlxuXHRcdFx0Ly8gLSB4bGluazpocmVmIC8geGxpbmtIcmVmIC0tPiBocmVmICh4bGluazpocmVmIHdhcyByZW1vdmVkIGZyb20gU1ZHIGFuZCBpc24ndCBuZWVkZWQpXG5cdFx0XHQvLyAtIGNsYXNzTmFtZSAtLT4gY2xhc3Ncblx0XHRcdG5hbWUgPSBuYW1lLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywgJ2gnKS5yZXBsYWNlKC9zTmFtZSQvLCAncycpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRuYW1lICE9ICd3aWR0aCcgJiZcblx0XHRcdG5hbWUgIT0gJ2hlaWdodCcgJiZcblx0XHRcdG5hbWUgIT0gJ2hyZWYnICYmXG5cdFx0XHRuYW1lICE9ICdsaXN0JyAmJlxuXHRcdFx0bmFtZSAhPSAnZm9ybScgJiZcblx0XHRcdC8vIERlZmF1bHQgdmFsdWUgaW4gYnJvd3NlcnMgaXMgYC0xYCBhbmQgYW4gZW1wdHkgc3RyaW5nIGlzXG5cdFx0XHQvLyBjYXN0IHRvIGAwYCBpbnN0ZWFkXG5cdFx0XHRuYW1lICE9ICd0YWJJbmRleCcgJiZcblx0XHRcdG5hbWUgIT0gJ2Rvd25sb2FkJyAmJlxuXHRcdFx0bmFtZSAhPSAncm93U3BhbicgJiZcblx0XHRcdG5hbWUgIT0gJ2NvbFNwYW4nICYmXG5cdFx0XHRuYW1lICE9ICdyb2xlJyAmJlxuXHRcdFx0bmFtZSBpbiBkb21cblx0XHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRvbVtuYW1lXSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xuXHRcdFx0XHQvLyBsYWJlbGxlZCBicmVhayBpcyAxYiBzbWFsbGVyIGhlcmUgdGhhbiBhIHJldHVybiBzdGF0ZW1lbnQgKHNvcnJ5KVxuXHRcdFx0XHRicmVhayBvO1xuXHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHR9XG5cblx0XHQvLyBhcmlhLSBhbmQgZGF0YS0gYXR0cmlidXRlcyBoYXZlIG5vIGJvb2xlYW4gcmVwcmVzZW50YXRpb24uXG5cdFx0Ly8gQSBgZmFsc2VgIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBhdHRyaWJ1dGUgbm90IGJlaW5nXG5cdFx0Ly8gcHJlc2VudCwgc28gd2UgY2FuJ3QgcmVtb3ZlIGl0LiBGb3Igbm9uLWJvb2xlYW4gYXJpYVxuXHRcdC8vIGF0dHJpYnV0ZXMgd2UgY291bGQgdHJlYXQgZmFsc2UgYXMgYSByZW1vdmFsLCBidXQgdGhlXG5cdFx0Ly8gYW1vdW50IG9mIGV4Y2VwdGlvbnMgd291bGQgY29zdCB0b28gbWFueSBieXRlcy4gT24gdG9wIG9mXG5cdFx0Ly8gdGhhdCBvdGhlciBmcmFtZXdvcmtzIGdlbmVyYWxseSBzdHJpbmdpZnkgYGZhbHNlYC5cblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gbmV2ZXIgc2VyaWFsaXplIGZ1bmN0aW9ucyBhcyBhdHRyaWJ1dGUgdmFsdWVzXG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSAhPT0gZmFsc2UgfHwgbmFtZVs0XSA9PT0gJy0nKSkge1xuXHRcdFx0ZG9tLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGV2ZW50IHByb3h5IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSB1c2VDYXB0dXJlIElzIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgY2FwdHVyZSBwaGFzZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50UHJveHkodXNlQ2FwdHVyZSkge1xuXHQvKipcblx0ICogUHJveHkgYW4gZXZlbnQgdG8gaG9va2VkIGV2ZW50IGhhbmRsZXJzXG5cdCAqIEBwYXJhbSB7UHJlYWN0RXZlbnR9IGUgVGhlIGV2ZW50IG9iamVjdCBmcm9tIHRoZSBicm93c2VyXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRyZXR1cm4gZnVuY3Rpb24gKGUpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG5cdFx0XHRjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnNbZS50eXBlICsgdXNlQ2FwdHVyZV07XG5cdFx0XHRpZiAoZS5fZGlzcGF0Y2hlZCA9PSBudWxsKSB7XG5cdFx0XHRcdGUuX2Rpc3BhdGNoZWQgPSBldmVudENsb2NrKys7XG5cblx0XHRcdFx0Ly8gV2hlbiBgZS5fZGlzcGF0Y2hlZGAgaXMgc21hbGxlciB0aGFuIHRoZSB0aW1lIHdoZW4gdGhlIHRhcmdldGVkIGV2ZW50XG5cdFx0XHRcdC8vIGhhbmRsZXIgd2FzIGF0dGFjaGVkIHdlIGtub3cgd2UgaGF2ZSBidWJibGVkIHVwIHRvIGFuIGVsZW1lbnQgdGhhdCB3YXMgYWRkZWRcblx0XHRcdFx0Ly8gZHVyaW5nIHBhdGNoaW5nIHRoZSBET00uXG5cdFx0XHR9IGVsc2UgaWYgKGUuX2Rpc3BhdGNoZWQgPCBldmVudEhhbmRsZXIuX2F0dGFjaGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBldmVudEhhbmRsZXIob3B0aW9ucy5ldmVudCA/IG9wdGlvbnMuZXZlbnQoZSkgOiBlKTtcblx0XHR9XG5cdH07XG59XG5cbmNvbnN0IGV2ZW50UHJveHkgPSBjcmVhdGVFdmVudFByb3h5KGZhbHNlKTtcbmNvbnN0IGV2ZW50UHJveHlDYXB0dXJlID0gY3JlYXRlRXZlbnRQcm94eSh0cnVlKTtcbiIsICJpbXBvcnQgeyBlbnF1ZXVlUmVuZGVyIH0gZnJvbSAnLi9jb21wb25lbnQnO1xuXG5leHBvcnQgbGV0IGkgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udGV4dChkZWZhdWx0VmFsdWUsIGNvbnRleHRJZCkge1xuXHRjb250ZXh0SWQgPSAnX19jQycgKyBpKys7XG5cblx0Y29uc3QgY29udGV4dCA9IHtcblx0XHRfaWQ6IGNvbnRleHRJZCxcblx0XHRfZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRDb25zdW1lcihwcm9wcywgY29udGV4dFZhbHVlKSB7XG5cdFx0XHQvLyByZXR1cm4gcHJvcHMuY2hpbGRyZW4oXG5cdFx0XHQvLyBcdGNvbnRleHRbY29udGV4dElkXSA/IGNvbnRleHRbY29udGV4dElkXS5wcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZVxuXHRcdFx0Ly8gKTtcblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbihjb250ZXh0VmFsdWUpO1xuXHRcdH0sXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRQcm92aWRlcihwcm9wcykge1xuXHRcdFx0aWYgKCF0aGlzLmdldENoaWxkQ29udGV4dCkge1xuXHRcdFx0XHQvKiogQHR5cGUge0NvbXBvbmVudFtdfSAqL1xuXHRcdFx0XHRsZXQgc3VicyA9IFtdO1xuXHRcdFx0XHRsZXQgY3R4ID0ge307XG5cdFx0XHRcdGN0eFtjb250ZXh0SWRdID0gdGhpcztcblxuXHRcdFx0XHR0aGlzLmdldENoaWxkQ29udGV4dCA9ICgpID0+IGN0eDtcblxuXHRcdFx0XHR0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChfcHJvcHMpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gX3Byb3BzLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHQvLyBJIHRoaW5rIHRoZSBmb3JjZWQgdmFsdWUgcHJvcGFnYXRpb24gaGVyZSB3YXMgb25seSBuZWVkZWQgd2hlbiBgb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZ2Agd2FzIGJlaW5nIGJ5cGFzc2VkOlxuXHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9jb21taXQvNGQzMzlmYjgwM2JlYTA5ZTlmMTk4YWJmMzhjYTFiZjhlYTRiNzc3MSNkaWZmLTU0NjgyY2UzODA5MzVhNzE3ZTQxYjhiZmM1NDczN2Y2UjM1OFxuXHRcdFx0XHRcdFx0Ly8gSW4gdGhvc2UgY2FzZXMgdGhvdWdoLCBldmVuIHdpdGggdGhlIHZhbHVlIGNvcnJlY3RlZCwgd2UncmUgZG91YmxlLXJlbmRlcmluZyBhbGwgbm9kZXMuXG5cdFx0XHRcdFx0XHQvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCB0ZWxsIGZvbGtzIG5vdCB0byB1c2UgZm9yY2Utc3luYyBtb2RlLlxuXHRcdFx0XHRcdFx0Ly8gQ3VycmVudGx5LCB1c2luZyBgdXNlQ29udGV4dCgpYCBpbiBhIGNsYXNzIGNvbXBvbmVudCB3aWxsIG92ZXJ3cml0ZSBpdHMgYHRoaXMuY29udGV4dGAgdmFsdWUuXG5cdFx0XHRcdFx0XHQvLyBzdWJzLnNvbWUoYyA9PiB7XG5cdFx0XHRcdFx0XHQvLyBcdGMuY29udGV4dCA9IF9wcm9wcy52YWx1ZTtcblx0XHRcdFx0XHRcdC8vIFx0ZW5xdWV1ZVJlbmRlcihjKTtcblx0XHRcdFx0XHRcdC8vIH0pO1xuXG5cdFx0XHRcdFx0XHQvLyBzdWJzLnNvbWUoYyA9PiB7XG5cdFx0XHRcdFx0XHQvLyBcdGMuY29udGV4dFtjb250ZXh0SWRdID0gX3Byb3BzLnZhbHVlO1xuXHRcdFx0XHRcdFx0Ly8gXHRlbnF1ZXVlUmVuZGVyKGMpO1xuXHRcdFx0XHRcdFx0Ly8gfSk7XG5cdFx0XHRcdFx0XHRzdWJzLnNvbWUoYyA9PiB7XG5cdFx0XHRcdFx0XHRcdGMuX2ZvcmNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZW5xdWV1ZVJlbmRlcihjKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLnN1YiA9IGMgPT4ge1xuXHRcdFx0XHRcdHN1YnMucHVzaChjKTtcblx0XHRcdFx0XHRsZXQgb2xkID0gYy5jb21wb25lbnRXaWxsVW5tb3VudDtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0c3Vicy5zcGxpY2Uoc3Vicy5pbmRleE9mKGMpLCAxKTtcblx0XHRcdFx0XHRcdGlmIChvbGQpIG9sZC5jYWxsKGMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcblx0XHR9XG5cdH07XG5cblx0Ly8gRGV2dG9vbHMgbmVlZHMgYWNjZXNzIHRvIHRoZSBjb250ZXh0IG9iamVjdCB3aGVuIGl0XG5cdC8vIGVuY291bnRlcnMgYSBQcm92aWRlci4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydFxuXHQvLyBzZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gdGhlIGNvbnRleHQgb2JqZWN0IGluc3RlYWRcblx0Ly8gb2Ygb24gdGhlIGNvbXBvbmVudCBpdHNlbGYuIFNlZTpcblx0Ly8gaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2NvbnRleHQuaHRtbCNjb250ZXh0ZGlzcGxheW5hbWVcblxuXHRyZXR1cm4gKGNvbnRleHQuUHJvdmlkZXIuX2NvbnRleHRSZWYgPSBjb250ZXh0LkNvbnN1bWVyLmNvbnRleHRUeXBlID1cblx0XHRjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBkaWZmLCB1bm1vdW50LCBhcHBseVJlZiB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUsIEZyYWdtZW50IH0gZnJvbSAnLi4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgRU1QVFlfT0JKLCBFTVBUWV9BUlIsIElOU0VSVF9WTk9ERSwgTUFUQ0hFRCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBnZXREb21TaWJsaW5nIH0gZnJvbSAnLi4vY29tcG9uZW50JztcblxuLyoqXG4gKiBEaWZmIHRoZSBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHdob3NlIGNoaWxkcmVuIGFyZSBiZWluZ1xuICogZGlmZmVkXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVuW119IHJlbmRlclJlc3VsdFxuICogQHBhcmFtIHtWTm9kZX0gbmV3UGFyZW50Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGUgd2hvc2UgY2hpbGRyZW4gc2hvdWxkIGJlXG4gKiBkaWZmJ2VkIGFnYWluc3Qgb2xkUGFyZW50Vk5vZGVcbiAqIEBwYXJhbSB7Vk5vZGV9IG9sZFBhcmVudFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlIHdob3NlIGNoaWxkcmVuIHNob3VsZCBiZVxuICogZGlmZidlZCBhZ2FpbnN0IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdCAtIG1vZGlmaWVkIGJ5XG4gKiBnZXRDaGlsZENvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdmcgV2hldGhlciBvciBub3QgdGhpcyBET00gbm9kZSBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBvbGREb20gVGhlIGN1cnJlbnQgYXR0YWNoZWQgRE9NIGVsZW1lbnQgYW55IG5ldyBkb21cbiAqIGVsZW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXJvdW5kLiBMaWtlbHkgYG51bGxgIG9uIGZpcnN0IHJlbmRlciAoZXhjZXB0IHdoZW5cbiAqIGh5ZHJhdGluZykuIENhbiBiZSBhIHNpYmxpbmcgRE9NIGVsZW1lbnQgd2hlbiBkaWZmaW5nIEZyYWdtZW50cyB0aGF0IGhhdmVcbiAqIHNpYmxpbmdzLiBJbiBtb3N0IGNhc2VzLCBpdCBzdGFydHMgb3V0IGFzIGBvbGRDaGlsZHJlblswXS5fZG9tYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQ2hpbGRyZW4oXG5cdHBhcmVudERvbSxcblx0cmVuZGVyUmVzdWx0LFxuXHRuZXdQYXJlbnRWTm9kZSxcblx0b2xkUGFyZW50Vk5vZGUsXG5cdGdsb2JhbENvbnRleHQsXG5cdGlzU3ZnLFxuXHRleGNlc3NEb21DaGlsZHJlbixcblx0Y29tbWl0UXVldWUsXG5cdG9sZERvbSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IGksXG5cdFx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0XHRvbGRWTm9kZSxcblx0XHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRcdGNoaWxkVk5vZGUsXG5cdFx0LyoqIEB0eXBlIHtQcmVhY3RFbGVtZW50fSAqL1xuXHRcdG5ld0RvbSxcblx0XHQvKiogQHR5cGUge1ByZWFjdEVsZW1lbnR9ICovXG5cdFx0Zmlyc3RDaGlsZERvbTtcblxuXHQvLyBUaGlzIGlzIGEgY29tcHJlc3Npb24gb2Ygb2xkUGFyZW50Vk5vZGUhPW51bGwgJiYgb2xkUGFyZW50Vk5vZGUgIT0gRU1QVFlfT0JKICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbiB8fCBFTVBUWV9BUlJcblx0Ly8gYXMgRU1QVFlfT0JKLl9jaGlsZHJlbiBzaG91bGQgYmUgYHVuZGVmaW5lZGAuXG5cdC8qKiBAdHlwZSB7Vk5vZGVbXX0gKi9cblx0bGV0IG9sZENoaWxkcmVuID0gKG9sZFBhcmVudFZOb2RlICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbikgfHwgRU1QVFlfQVJSO1xuXG5cdGxldCBuZXdDaGlsZHJlbkxlbmd0aCA9IHJlbmRlclJlc3VsdC5sZW5ndGg7XG5cblx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBvbGREb207XG5cdGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkobmV3UGFyZW50Vk5vZGUsIHJlbmRlclJlc3VsdCwgb2xkQ2hpbGRyZW4pO1xuXHRvbGREb20gPSBuZXdQYXJlbnRWTm9kZS5fbmV4dERvbTtcblxuXHRmb3IgKGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW5MZW5ndGg7IGkrKykge1xuXHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV07XG5cdFx0aWYgKFxuXHRcdFx0Y2hpbGRWTm9kZSA9PSBudWxsIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnYm9vbGVhbicgfHxcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdmdW5jdGlvbidcblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIEF0IHRoaXMgcG9pbnQsIGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkgaGFzIGFzc2lnbmVkIF9pbmRleCB0byBiZSB0aGVcblx0XHQvLyBtYXRjaGluZ0luZGV4IGZvciB0aGlzIFZOb2RlJ3Mgb2xkVk5vZGUgKG9yIC0xIGlmIHRoZXJlIGlzIG5vIG9sZFZOb2RlKS5cblx0XHRpZiAoY2hpbGRWTm9kZS5faW5kZXggPT09IC0xKSB7XG5cdFx0XHRvbGRWTm9kZSA9IEVNUFRZX09CSjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlbltjaGlsZFZOb2RlLl9pbmRleF0gfHwgRU1QVFlfT0JKO1xuXHRcdH1cblxuXHRcdC8vIFVwZGF0ZSBjaGlsZFZOb2RlLl9pbmRleCB0byBpdHMgZmluYWwgaW5kZXhcblx0XHRjaGlsZFZOb2RlLl9pbmRleCA9IGk7XG5cblx0XHQvLyBNb3JwaCB0aGUgb2xkIGVsZW1lbnQgaW50byB0aGUgbmV3IG9uZSwgYnV0IGRvbid0IGFwcGVuZCBpdCB0byB0aGUgZG9tIHlldFxuXHRcdGRpZmYoXG5cdFx0XHRwYXJlbnREb20sXG5cdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0aXNTdmcsXG5cdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0b2xkRG9tLFxuXHRcdFx0aXNIeWRyYXRpbmcsXG5cdFx0XHRyZWZRdWV1ZVxuXHRcdCk7XG5cblx0XHQvLyBBZGp1c3QgRE9NIG5vZGVzXG5cdFx0bmV3RG9tID0gY2hpbGRWTm9kZS5fZG9tO1xuXHRcdGlmIChjaGlsZFZOb2RlLnJlZiAmJiBvbGRWTm9kZS5yZWYgIT0gY2hpbGRWTm9kZS5yZWYpIHtcblx0XHRcdGlmIChvbGRWTm9kZS5yZWYpIHtcblx0XHRcdFx0YXBwbHlSZWYob2xkVk5vZGUucmVmLCBudWxsLCBjaGlsZFZOb2RlKTtcblx0XHRcdH1cblx0XHRcdHJlZlF1ZXVlLnB1c2goXG5cdFx0XHRcdGNoaWxkVk5vZGUucmVmLFxuXHRcdFx0XHRjaGlsZFZOb2RlLl9jb21wb25lbnQgfHwgbmV3RG9tLFxuXHRcdFx0XHRjaGlsZFZOb2RlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChmaXJzdENoaWxkRG9tID09IG51bGwgJiYgbmV3RG9tICE9IG51bGwpIHtcblx0XHRcdGZpcnN0Q2hpbGREb20gPSBuZXdEb207XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgJiBJTlNFUlRfVk5PREUgfHxcblx0XHRcdG9sZFZOb2RlLl9jaGlsZHJlbiA9PT0gY2hpbGRWTm9kZS5fY2hpbGRyZW5cblx0XHQpIHtcblx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3Igb2xEb20gc2hvdWxkIGJlIHByZXNlbnQgb24gYSBET00gbm9kZVxuXHRcdFx0aWYgKG9sZERvbSAmJiAhb2xkRG9tLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRcdG9sZERvbSA9IGdldERvbVNpYmxpbmcob2xkVk5vZGUpO1xuXHRcdFx0fVxuXHRcdFx0b2xkRG9tID0gaW5zZXJ0KGNoaWxkVk5vZGUsIG9sZERvbSwgcGFyZW50RG9tKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUudHlwZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0XHRjaGlsZFZOb2RlLl9uZXh0RG9tICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdC8vIFNpbmNlIEZyYWdtZW50cyBvciBjb21wb25lbnRzIHRoYXQgcmV0dXJuIEZyYWdtZW50IGxpa2UgVk5vZGVzIGNhblxuXHRcdFx0Ly8gY29udGFpbiBtdWx0aXBsZSBET00gbm9kZXMgYXMgdGhlIHNhbWUgbGV2ZWwsIGNvbnRpbnVlIHRoZSBkaWZmIGZyb21cblx0XHRcdC8vIHRoZSBzaWJsaW5nIG9mIGxhc3QgRE9NIGNoaWxkIG9mIHRoaXMgY2hpbGQgVk5vZGVcblx0XHRcdG9sZERvbSA9IGNoaWxkVk5vZGUuX25leHREb207XG5cdFx0fSBlbHNlIGlmIChuZXdEb20pIHtcblx0XHRcdG9sZERvbSA9IG5ld0RvbS5uZXh0U2libGluZztcblx0XHR9XG5cblx0XHQvLyBFYWdlcmx5IGNsZWFudXAgX25leHREb20uIFdlIGRvbid0IG5lZWQgdG8gcGVyc2lzdCB0aGUgdmFsdWUgYmVjYXVzZSBpdFxuXHRcdC8vIGlzIG9ubHkgdXNlZCBieSBgZGlmZkNoaWxkcmVuYCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcmVzdW1lIHRoZSBkaWZmXG5cdFx0Ly8gYWZ0ZXIgZGlmZmluZyBDb21wb25lbnRzIGFuZCBGcmFnbWVudHMuIE9uY2Ugd2Ugc3RvcmUgaXQgdGhlIG5leHRET01cblx0XHQvLyBsb2NhbCB2YXIsIHdlIGNhbiBjbGVhbiB1cCB0aGUgcHJvcGVydHkuIEFsc28gcHJldmVudHMgdXMgaGFuZ2luZyBvbiB0b1xuXHRcdC8vIERPTSBub2RlcyB0aGF0IG1heSBoYXZlIGJlZW4gdW5tb3VudGVkLlxuXHRcdGNoaWxkVk5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG5cblx0XHQvLyBVbnNldCBkaWZmaW5nIGZsYWdzXG5cdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgJj0gfihJTlNFUlRfVk5PREUgfCBNQVRDSEVEKTtcblx0fVxuXG5cdC8vIFRPRE86IFdpdGggbmV3IGNoaWxkIGRpZmZpbmcgYWxnbywgY29uc2lkZXIgYWx0IHdheXMgdG8gZGlmZiBGcmFnbWVudHMuXG5cdC8vIFN1Y2ggYXMgZHJvcHBpbmcgb2xkRG9tIGFuZCBtb3ZpbmcgZnJhZ21lbnRzIGluIHBsYWNlXG5cdC8vXG5cdC8vIEJlY2F1c2UgdGhlIG5ld1BhcmVudFZOb2RlIGlzIEZyYWdtZW50LWxpa2UsIHdlIG5lZWQgdG8gc2V0IGl0J3Ncblx0Ly8gX25leHREb20gcHJvcGVydHkgdG8gdGhlIG5leHRTaWJsaW5nIG9mIGl0cyBsYXN0IGNoaWxkIERPTSBub2RlLlxuXHQvL1xuXHQvLyBgb2xkRG9tYCBjb250YWlucyB0aGUgY29ycmVjdCB2YWx1ZSBoZXJlIGJlY2F1c2UgaWYgdGhlIGxhc3QgY2hpbGRcblx0Ly8gaXMgYSBGcmFnbWVudC1saWtlLCB0aGVuIG9sZERvbSBoYXMgYWxyZWFkeSBiZWVuIHNldCB0byB0aGF0IGNoaWxkJ3MgX25leHREb20uXG5cdC8vIElmIHRoZSBsYXN0IGNoaWxkIGlzIGEgRE9NIFZOb2RlLCB0aGVuIG9sZERvbSB3aWxsIGJlIHNldCB0byB0aGF0IERPTVxuXHQvLyBub2RlJ3MgbmV4dFNpYmxpbmcuXG5cdG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tID0gb2xkRG9tO1xuXHRuZXdQYXJlbnRWTm9kZS5fZG9tID0gZmlyc3RDaGlsZERvbTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdQYXJlbnRWTm9kZVxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZHJlbltdfSByZW5kZXJSZXN1bHRcbiAqIEBwYXJhbSB7Vk5vZGVbXX0gb2xkQ2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheShuZXdQYXJlbnRWTm9kZSwgcmVuZGVyUmVzdWx0LCBvbGRDaGlsZHJlbikge1xuXHQvKiogQHR5cGUge251bWJlcn0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGxldCBjaGlsZFZOb2RlO1xuXHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRsZXQgb2xkVk5vZGU7XG5cblx0Y29uc3QgbmV3Q2hpbGRyZW5MZW5ndGggPSByZW5kZXJSZXN1bHQubGVuZ3RoO1xuXHRsZXQgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGgsXG5cdFx0cmVtYWluaW5nT2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbkxlbmd0aDtcblxuXHRsZXQgc2tldyA9IDA7XG5cblx0bmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuID0gW107XG5cdGZvciAoaSA9IDA7IGkgPCBuZXdDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBXZSBhcmUgcmV1c2luZyB0aGUgY2hpbGRWTm9kZSB2YXJpYWJsZSB0byBob2xkIGJvdGggdGhlXG5cdFx0Ly8gcHJlIGFuZCBwb3N0IG5vcm1hbGl6ZWQgY2hpbGRWTm9kZVxuXHRcdGNoaWxkVk5vZGUgPSByZW5kZXJSZXN1bHRbaV07XG5cblx0XHRpZiAoXG5cdFx0XHRjaGlsZFZOb2RlID09IG51bGwgfHxcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdib29sZWFuJyB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2Z1bmN0aW9uJ1xuXHRcdCkge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IG51bGw7XG5cdFx0fVxuXHRcdC8vIElmIHRoaXMgbmV3Vk5vZGUgaXMgYmVpbmcgcmV1c2VkIChlLmcuIDxkaXY+e3JldXNlfXtyZXVzZX08L2Rpdj4pIGluIHRoZSBzYW1lIGRpZmYsXG5cdFx0Ly8gb3Igd2UgYXJlIHJlbmRlcmluZyBhIGNvbXBvbmVudCAoZS5nLiBzZXRTdGF0ZSkgY29weSB0aGUgb2xkVk5vZGVzIHNvIGl0IGNhbiBoYXZlXG5cdFx0Ly8gaXQncyBvd24gRE9NICYgZXRjLiBwb2ludGVyc1xuXHRcdGVsc2UgaWYgKFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ3N0cmluZycgfHxcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdudW1iZXInIHx8XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdmFsaWQtdHlwZW9mXG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnYmlnaW50JyB8fFxuXHRcdFx0Y2hpbGRWTm9kZS5jb25zdHJ1Y3RvciA9PSBTdHJpbmdcblx0XHQpIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0Y2hpbGRWTm9kZSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGlzQXJyYXkoY2hpbGRWTm9kZSkpIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdHsgY2hpbGRyZW46IGNoaWxkVk5vZGUgfSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGNoaWxkVk5vZGUuY29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCAmJiBjaGlsZFZOb2RlLl9kZXB0aCA+IDApIHtcblx0XHRcdC8vIFZOb2RlIGlzIGFscmVhZHkgaW4gdXNlLCBjbG9uZSBpdC4gVGhpcyBjYW4gaGFwcGVuIGluIHRoZSBmb2xsb3dpbmdcblx0XHRcdC8vIHNjZW5hcmlvOlxuXHRcdFx0Ly8gICBjb25zdCByZXVzZSA9IDxkaXYgLz5cblx0XHRcdC8vICAgPGRpdj57cmV1c2V9PHNwYW4gLz57cmV1c2V9PC9kaXY+XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY3JlYXRlVk5vZGUoXG5cdFx0XHRcdGNoaWxkVk5vZGUudHlwZSxcblx0XHRcdFx0Y2hpbGRWTm9kZS5wcm9wcyxcblx0XHRcdFx0Y2hpbGRWTm9kZS5rZXksXG5cdFx0XHRcdGNoaWxkVk5vZGUucmVmID8gY2hpbGRWTm9kZS5yZWYgOiBudWxsLFxuXHRcdFx0XHRjaGlsZFZOb2RlLl9vcmlnaW5hbFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNoaWxkVk5vZGU7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2tld2VkSW5kZXggPSBpICsgc2tldztcblxuXHRcdC8vIEhhbmRsZSB1bm1vdW50aW5nIG51bGwgcGxhY2Vob2xkZXJzLCBpLmUuIFZOb2RlID0+IG51bGwgaW4gdW5rZXllZCBjaGlsZHJlblxuXHRcdGlmIChjaGlsZFZOb2RlID09IG51bGwpIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bc2tld2VkSW5kZXhdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvbGRWTm9kZSAmJlxuXHRcdFx0XHRvbGRWTm9kZS5rZXkgPT0gbnVsbCAmJlxuXHRcdFx0XHRvbGRWTm9kZS5fZG9tICYmXG5cdFx0XHRcdChvbGRWTm9kZS5fZmxhZ3MgJiBNQVRDSEVEKSA9PT0gMFxuXHRcdFx0KSB7XG5cdFx0XHRcdGlmIChvbGRWTm9kZS5fZG9tID09IG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tKSB7XG5cdFx0XHRcdFx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBnZXREb21TaWJsaW5nKG9sZFZOb2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHVubW91bnQob2xkVk5vZGUsIG9sZFZOb2RlLCBmYWxzZSk7XG5cblx0XHRcdFx0Ly8gRXhwbGljaXRseSBudWxsaWZ5IHRoaXMgcG9zaXRpb24gaW4gb2xkQ2hpbGRyZW4gaW5zdGVhZCBvZiBqdXN0XG5cdFx0XHRcdC8vIHNldHRpbmcgYF9tYXRjaD10cnVlYCB0byBwcmV2ZW50IG90aGVyIHJvdXRpbmVzIChlLmcuXG5cdFx0XHRcdC8vIGBmaW5kTWF0Y2hpbmdJbmRleGAgb3IgYGdldERvbVNpYmxpbmdgKSBmcm9tIHRoaW5raW5nIFZOb2RlcyBvciBET01cblx0XHRcdFx0Ly8gbm9kZXMgaW4gdGhpcyBwb3NpdGlvbiBhcmUgc3RpbGwgYXZhaWxhYmxlIHRvIGJlIHVzZWQgaW4gZGlmZmluZyB3aGVuXG5cdFx0XHRcdC8vIHRoZXkgaGF2ZSBhY3R1YWxseSBhbHJlYWR5IGJlZW4gdW5tb3VudGVkLiBGb3IgZXhhbXBsZSwgYnkgb25seVxuXHRcdFx0XHQvLyBzZXR0aW5nIGBfbWF0Y2g9dHJ1ZWAgaGVyZSwgdGhlIHVubW91bnRpbmcgbG9vcCBsYXRlciB3b3VsZCBhdHRlbXB0XG5cdFx0XHRcdC8vIHRvIHVubW91bnQgdGhpcyBWTm9kZSBhZ2FpbiBzZWVpbmcgYF9tYXRjaD09dHJ1ZWAuICBGdXJ0aGVyLFxuXHRcdFx0XHQvLyBnZXREb21TaWJsaW5nIGRvZXNuJ3Qga25vdyBhYm91dCBfbWF0Y2ggYW5kIHNvIHdvdWxkIGluY29ycmVjdGx5XG5cdFx0XHRcdC8vIGFzc3VtZSBET00gbm9kZXMgaW4gdGhpcyBzdWJ0cmVlIGFyZSBtb3VudGVkIGFuZCB1c2FibGUuXG5cdFx0XHRcdG9sZENoaWxkcmVuW3NrZXdlZEluZGV4XSA9IG51bGw7XG5cdFx0XHRcdHJlbWFpbmluZ09sZENoaWxkcmVuLS07XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjaGlsZFZOb2RlLl9wYXJlbnQgPSBuZXdQYXJlbnRWTm9kZTtcblx0XHRjaGlsZFZOb2RlLl9kZXB0aCA9IG5ld1BhcmVudFZOb2RlLl9kZXB0aCArIDE7XG5cblx0XHRjb25zdCBtYXRjaGluZ0luZGV4ID0gZmluZE1hdGNoaW5nSW5kZXgoXG5cdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0b2xkQ2hpbGRyZW4sXG5cdFx0XHRza2V3ZWRJbmRleCxcblx0XHRcdHJlbWFpbmluZ09sZENoaWxkcmVuXG5cdFx0KTtcblxuXHRcdC8vIFRlbXBvcmFyaWx5IHN0b3JlIHRoZSBtYXRjaGluZ0luZGV4IG9uIHRoZSBfaW5kZXggcHJvcGVydHkgc28gd2UgY2FuIHB1bGxcblx0XHQvLyBvdXQgdGhlIG9sZFZOb2RlIGluIGRpZmZDaGlsZHJlbi4gV2UnbGwgb3ZlcnJpZGUgdGhpcyB0byB0aGUgVk5vZGUnc1xuXHRcdC8vIGZpbmFsIGluZGV4IGFmdGVyIHVzaW5nIHRoaXMgcHJvcGVydHkgdG8gZ2V0IHRoZSBvbGRWTm9kZVxuXHRcdGNoaWxkVk5vZGUuX2luZGV4ID0gbWF0Y2hpbmdJbmRleDtcblxuXHRcdG9sZFZOb2RlID0gbnVsbDtcblx0XHRpZiAobWF0Y2hpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bbWF0Y2hpbmdJbmRleF07XG5cdFx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbi0tO1xuXHRcdFx0aWYgKG9sZFZOb2RlKSB7XG5cdFx0XHRcdG9sZFZOb2RlLl9mbGFncyB8PSBNQVRDSEVEO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEhlcmUsIHdlIGRlZmluZSBpc01vdW50aW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIHNrZXcgZGlmZmluZ1xuXHRcdC8vIGFsZ29yaXRobS4gTm9kZXMgdGhhdCBhcmUgdW5zdXNwZW5kaW5nIGFyZSBjb25zaWRlcmVkIG1vdW50aW5nIGFuZCB3ZSBkZXRlY3Rcblx0XHQvLyB0aGlzIGJ5IGNoZWNraW5nIGlmIG9sZFZOb2RlLl9vcmlnaW5hbCA9PT0gbnVsbFxuXHRcdGNvbnN0IGlzTW91bnRpbmcgPSBvbGRWTm9kZSA9PSBudWxsIHx8IG9sZFZOb2RlLl9vcmlnaW5hbCA9PT0gbnVsbDtcblxuXHRcdGlmIChpc01vdW50aW5nKSB7XG5cdFx0XHRpZiAobWF0Y2hpbmdJbmRleCA9PSAtMSkge1xuXHRcdFx0XHRza2V3LS07XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHdlIGFyZSBtb3VudGluZyBhIERPTSBWTm9kZSwgbWFyayBpdCBmb3IgaW5zZXJ0aW9uXG5cdFx0XHRpZiAodHlwZW9mIGNoaWxkVk5vZGUudHlwZSAhPSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzIHw9IElOU0VSVF9WTk9ERTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1hdGNoaW5nSW5kZXggIT09IHNrZXdlZEluZGV4KSB7XG5cdFx0XHRpZiAobWF0Y2hpbmdJbmRleCA9PT0gc2tld2VkSW5kZXggKyAxKSB7XG5cdFx0XHRcdHNrZXcrKztcblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCA+IHNrZXdlZEluZGV4KSB7XG5cdFx0XHRcdGlmIChyZW1haW5pbmdPbGRDaGlsZHJlbiA+IG5ld0NoaWxkcmVuTGVuZ3RoIC0gc2tld2VkSW5kZXgpIHtcblx0XHRcdFx0XHRza2V3ICs9IG1hdGNoaW5nSW5kZXggLSBza2V3ZWRJbmRleDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRza2V3LS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCA8IHNrZXdlZEluZGV4KSB7XG5cdFx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID09IHNrZXdlZEluZGV4IC0gMSkge1xuXHRcdFx0XHRcdHNrZXcgPSBtYXRjaGluZ0luZGV4IC0gc2tld2VkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNrZXcgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNb3ZlIHRoaXMgVk5vZGUncyBET00gaWYgdGhlIG9yaWdpbmFsIGluZGV4IChtYXRjaGluZ0luZGV4KSBkb2Vzbid0XG5cdFx0XHQvLyBtYXRjaCB0aGUgbmV3IHNrZXcgaW5kZXggKGkgKyBuZXcgc2tldylcblx0XHRcdGlmIChtYXRjaGluZ0luZGV4ICE9PSBpICsgc2tldykge1xuXHRcdFx0XHRjaGlsZFZOb2RlLl9mbGFncyB8PSBJTlNFUlRfVk5PREU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHJlbWFpbmluZyBvbGRDaGlsZHJlbiBpZiB0aGVyZSBhcmUgYW55LiBMb29wIGZvcndhcmRzIHNvIHRoYXQgYXMgd2Vcblx0Ly8gdW5tb3VudCBET00gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvbGRDaGlsZHJlbiwgd2UgY2FuIGFkanVzdCBvbGREb20gdG9cblx0Ly8gcG9pbnQgdG8gdGhlIG5leHQgY2hpbGQsIHdoaWNoIG5lZWRzIHRvIGJlIHRoZSBmaXJzdCBET00gbm9kZSB0aGF0IHdvbid0IGJlXG5cdC8vIHVubW91bnRlZC5cblx0aWYgKHJlbWFpbmluZ09sZENoaWxkcmVuKSB7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG9sZENoaWxkcmVuTGVuZ3RoOyBpKyspIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5baV07XG5cdFx0XHRpZiAob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApIHtcblx0XHRcdFx0aWYgKG9sZFZOb2RlLl9kb20gPT0gbmV3UGFyZW50Vk5vZGUuX25leHREb20pIHtcblx0XHRcdFx0XHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IGdldERvbVNpYmxpbmcob2xkVk5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dW5tb3VudChvbGRWTm9kZSwgb2xkVk5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHBhcmVudFZOb2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IG9sZERvbVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb21cbiAqIEByZXR1cm5zIHtQcmVhY3RFbGVtZW50fVxuICovXG5mdW5jdGlvbiBpbnNlcnQocGFyZW50Vk5vZGUsIG9sZERvbSwgcGFyZW50RG9tKSB7XG5cdC8vIE5vdGU6IFZOb2RlcyBpbiBuZXN0ZWQgc3VzcGVuZGVkIHRyZWVzIG1heSBiZSBtaXNzaW5nIF9jaGlsZHJlbi5cblxuXHRpZiAodHlwZW9mIHBhcmVudFZOb2RlLnR5cGUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdGxldCBjaGlsZHJlbiA9IHBhcmVudFZOb2RlLl9jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBpID0gMDsgY2hpbGRyZW4gJiYgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoY2hpbGRyZW5baV0pIHtcblx0XHRcdFx0Ly8gSWYgd2UgZW50ZXIgdGhpcyBjb2RlIHBhdGggb24gc0NVIGJhaWxvdXQsIHdoZXJlIHdlIGNvcHlcblx0XHRcdFx0Ly8gb2xkVk5vZGUuX2NoaWxkcmVuIHRvIG5ld1ZOb2RlLl9jaGlsZHJlbiwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIG9sZFxuXHRcdFx0XHQvLyBjaGlsZHJlbidzIF9wYXJlbnQgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbmV3Vk5vZGUgKHBhcmVudFZOb2RlXG5cdFx0XHRcdC8vIGhlcmUpLlxuXHRcdFx0XHRjaGlsZHJlbltpXS5fcGFyZW50ID0gcGFyZW50Vk5vZGU7XG5cdFx0XHRcdG9sZERvbSA9IGluc2VydChjaGlsZHJlbltpXSwgb2xkRG9tLCBwYXJlbnREb20pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvbGREb207XG5cdH0gZWxzZSBpZiAocGFyZW50Vk5vZGUuX2RvbSAhPSBvbGREb20pIHtcblx0XHRwYXJlbnREb20uaW5zZXJ0QmVmb3JlKHBhcmVudFZOb2RlLl9kb20sIG9sZERvbSB8fCBudWxsKTtcblx0XHRvbGREb20gPSBwYXJlbnRWTm9kZS5fZG9tO1xuXHR9XG5cblx0ZG8ge1xuXHRcdG9sZERvbSA9IG9sZERvbSAmJiBvbGREb20ubmV4dFNpYmxpbmc7XG5cdH0gd2hpbGUgKG9sZERvbSAhPSBudWxsICYmIG9sZERvbS5ub2RlVHlwZSA9PT0gOCk7XG5cblx0cmV0dXJuIG9sZERvbTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGFuZCBsb29wIHRocm91Z2ggdGhlIGNoaWxkcmVuIG9mIGEgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVufSBjaGlsZHJlbiBUaGUgdW5mbGF0dGVuZWQgY2hpbGRyZW4gb2YgYSB2aXJ0dWFsXG4gKiBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGVbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2hpbGRBcnJheShjaGlsZHJlbiwgb3V0KSB7XG5cdG91dCA9IG91dCB8fCBbXTtcblx0aWYgKGNoaWxkcmVuID09IG51bGwgfHwgdHlwZW9mIGNoaWxkcmVuID09ICdib29sZWFuJykge1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG5cdFx0Y2hpbGRyZW4uc29tZShjaGlsZCA9PiB7XG5cdFx0XHR0b0NoaWxkQXJyYXkoY2hpbGQsIG91dCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0LnB1c2goY2hpbGRyZW4pO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gY2hpbGRWTm9kZVxuICogQHBhcmFtIHtWTm9kZVtdfSBvbGRDaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdlZEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gcmVtYWluaW5nT2xkQ2hpbGRyZW5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGZpbmRNYXRjaGluZ0luZGV4KFxuXHRjaGlsZFZOb2RlLFxuXHRvbGRDaGlsZHJlbixcblx0c2tld2VkSW5kZXgsXG5cdHJlbWFpbmluZ09sZENoaWxkcmVuXG4pIHtcblx0Y29uc3Qga2V5ID0gY2hpbGRWTm9kZS5rZXk7XG5cdGNvbnN0IHR5cGUgPSBjaGlsZFZOb2RlLnR5cGU7XG5cdGxldCB4ID0gc2tld2VkSW5kZXggLSAxO1xuXHRsZXQgeSA9IHNrZXdlZEluZGV4ICsgMTtcblx0bGV0IG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bc2tld2VkSW5kZXhdO1xuXG5cdC8vIFdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGlmIHRoZXJlIGFyZSBtb3JlIGNoaWxkcmVuXG5cdC8vIChyZW1haW5pbmdPbGRDaGlsZHJlbikgdG8gc2VhcmNoLiBIb3dldmVyLCBpZiB0aGUgb2xkVk5vZGUgd2UganVzdCBsb29rZWRcblx0Ly8gYXQgc2tld2VkSW5kZXggd2FzIG5vdCBhbHJlYWR5IHVzZWQgaW4gdGhpcyBkaWZmLCB0aGVuIHRoZXJlIG11c3QgYmUgYXRcblx0Ly8gbGVhc3QgMSBvdGhlciAoc28gZ3JlYXRlciB0aGFuIDEpIHJlbWFpbmluZ09sZENoaWxkcmVuIHRvIGF0dGVtcHQgdG8gbWF0Y2hcblx0Ly8gYWdhaW5zdC4gU28gdGhlIGZvbGxvd2luZyBjb25kaXRpb24gY2hlY2tzIHRoYXQgZW5zdXJpbmdcblx0Ly8gcmVtYWluaW5nT2xkQ2hpbGRyZW4gPiAxIGlmIHRoZSBvbGRWTm9kZSBpcyBub3QgYWxyZWFkeSB1c2VkL21hdGNoZWQuIEVsc2Vcblx0Ly8gaWYgdGhlIG9sZFZOb2RlIHdhcyBudWxsIG9yIG1hdGNoZWQsIHRoZW4gdGhlcmUgY291bGQgbmVlZHMgdG8gYmUgYXQgbGVhc3Rcblx0Ly8gMSAoYWthIGByZW1haW5pbmdPbGRDaGlsZHJlbiA+IDBgKSBjaGlsZHJlbiB0byBmaW5kIGFuZCBjb21wYXJlIGFnYWluc3QuXG5cdGxldCBzaG91bGRTZWFyY2ggPVxuXHRcdHJlbWFpbmluZ09sZENoaWxkcmVuID5cblx0XHQob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgPyAxIDogMCk7XG5cblx0aWYgKFxuXHRcdG9sZFZOb2RlID09PSBudWxsIHx8XG5cdFx0KG9sZFZOb2RlICYmXG5cdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHR0eXBlID09PSBvbGRWTm9kZS50eXBlICYmXG5cdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApXG5cdCkge1xuXHRcdHJldHVybiBza2V3ZWRJbmRleDtcblx0fSBlbHNlIGlmIChzaG91bGRTZWFyY2gpIHtcblx0XHR3aGlsZSAoeCA+PSAwIHx8IHkgPCBvbGRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdGlmICh4ID49IDApIHtcblx0XHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblt4XTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9sZFZOb2RlICYmXG5cdFx0XHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwICYmXG5cdFx0XHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0XHRcdHR5cGUgPT09IG9sZFZOb2RlLnR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHg7XG5cdFx0XHRcdH1cblx0XHRcdFx0eC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoeSA8IG9sZENoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRvbGRWTm9kZSA9IG9sZENoaWxkcmVuW3ldO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b2xkVk5vZGUgJiZcblx0XHRcdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgJiZcblx0XHRcdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHRcdFx0dHlwZSA9PT0gb2xkVk5vZGUudHlwZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4geTtcblx0XHRcdFx0fVxuXHRcdFx0XHR5Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIC0xO1xufVxuIiwgImltcG9ydCB7XG5cdEVNUFRZX09CSixcblx0TU9ERV9IWURSQVRFLFxuXHRNT0RFX1NVU1BFTkRFRCxcblx0UkVTRVRfTU9ERVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgZ2V0RG9tU2libGluZyB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCB7IGRpZmZDaGlsZHJlbiB9IGZyb20gJy4vY2hpbGRyZW4nO1xuaW1wb3J0IHsgc2V0UHJvcGVydHkgfSBmcm9tICcuL3Byb3BzJztcbmltcG9ydCB7IGFzc2lnbiwgaXNBcnJheSwgcmVtb3ZlTm9kZSwgc2xpY2UgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4uL29wdGlvbnMnO1xuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgYW5kIGFwcGx5IHByb3BlciBjaGFuZ2VzIHRvIHRoZSBET01cbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBwYXJlbnQgb2YgdGhlIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdWTm9kZSBUaGUgbmV3IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtWTm9kZX0gb2xkVk5vZGUgVGhlIG9sZCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxDb250ZXh0IFRoZSBjdXJyZW50IGNvbnRleHQgb2JqZWN0LiBNb2RpZmllZCBieVxuICogZ2V0Q2hpbGRDb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzU3ZnIFdoZXRoZXIgb3Igbm90IHRoaXMgZWxlbWVudCBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBvbGREb20gVGhlIGN1cnJlbnQgYXR0YWNoZWQgRE9NIGVsZW1lbnQgYW55IG5ldyBkb21cbiAqIGVsZW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXJvdW5kLiBMaWtlbHkgYG51bGxgIG9uIGZpcnN0IHJlbmRlciAoZXhjZXB0IHdoZW5cbiAqIGh5ZHJhdGluZykuIENhbiBiZSBhIHNpYmxpbmcgRE9NIGVsZW1lbnQgd2hlbiBkaWZmaW5nIEZyYWdtZW50cyB0aGF0IGhhdmVcbiAqIHNpYmxpbmdzLiBJbiBtb3N0IGNhc2VzLCBpdCBzdGFydHMgb3V0IGFzIGBvbGRDaGlsZHJlblswXS5fZG9tYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmKFxuXHRwYXJlbnREb20sXG5cdG5ld1ZOb2RlLFxuXHRvbGRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0aXNTdmcsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0b2xkRG9tLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IHRtcCxcblx0XHRuZXdUeXBlID0gbmV3Vk5vZGUudHlwZTtcblxuXHQvLyBXaGVuIHBhc3NpbmcgdGhyb3VnaCBjcmVhdGVFbGVtZW50IGl0IGFzc2lnbnMgdGhlIG9iamVjdFxuXHQvLyBjb25zdHJ1Y3RvciBhcyB1bmRlZmluZWQuIFRoaXMgdG8gcHJldmVudCBKU09OLWluamVjdGlvbi5cblx0aWYgKG5ld1ZOb2RlLmNvbnN0cnVjdG9yICE9PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuXG5cdC8vIElmIHRoZSBwcmV2aW91cyBkaWZmIGJhaWxlZCBvdXQsIHJlc3VtZSBjcmVhdGluZy9oeWRyYXRpbmcuXG5cdGlmIChvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX1NVU1BFTkRFRCkge1xuXHRcdGlzSHlkcmF0aW5nID0gISEob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKTtcblx0XHRvbGREb20gPSBuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IFtvbGREb21dO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLl9kaWZmKSkgdG1wKG5ld1ZOb2RlKTtcblxuXHRvdXRlcjogaWYgKHR5cGVvZiBuZXdUeXBlID09ICdmdW5jdGlvbicpIHtcblx0XHR0cnkge1xuXHRcdFx0bGV0IGMsIGlzTmV3LCBvbGRQcm9wcywgb2xkU3RhdGUsIHNuYXBzaG90LCBjbGVhclByb2Nlc3NpbmdFeGNlcHRpb247XG5cdFx0XHRsZXQgbmV3UHJvcHMgPSBuZXdWTm9kZS5wcm9wcztcblxuXHRcdFx0Ly8gTmVjZXNzYXJ5IGZvciBjcmVhdGVDb250ZXh0IGFwaS4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgcGFzc1xuXHRcdFx0Ly8gdGhlIGNvbnRleHQgdmFsdWUgYXMgYHRoaXMuY29udGV4dGAganVzdCBmb3IgdGhpcyBjb21wb25lbnQuXG5cdFx0XHR0bXAgPSBuZXdUeXBlLmNvbnRleHRUeXBlO1xuXHRcdFx0bGV0IHByb3ZpZGVyID0gdG1wICYmIGdsb2JhbENvbnRleHRbdG1wLl9pZF07XG5cdFx0XHRsZXQgY29tcG9uZW50Q29udGV4dCA9IHRtcFxuXHRcdFx0XHQ/IHByb3ZpZGVyXG5cdFx0XHRcdFx0PyBwcm92aWRlci5wcm9wcy52YWx1ZVxuXHRcdFx0XHRcdDogdG1wLl9kZWZhdWx0VmFsdWVcblx0XHRcdFx0OiBnbG9iYWxDb250ZXh0O1xuXG5cdFx0XHQvLyBHZXQgY29tcG9uZW50IGFuZCBzZXQgaXQgdG8gYGNgXG5cdFx0XHRpZiAob2xkVk5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0XHRjID0gbmV3Vk5vZGUuX2NvbXBvbmVudCA9IG9sZFZOb2RlLl9jb21wb25lbnQ7XG5cdFx0XHRcdGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbiA9IGMuX3Byb2Nlc3NpbmdFeGNlcHRpb24gPSBjLl9wZW5kaW5nRXJyb3I7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnN0YW50aWF0ZSB0aGUgbmV3IGNvbXBvbmVudFxuXHRcdFx0XHRpZiAoJ3Byb3RvdHlwZScgaW4gbmV3VHlwZSAmJiBuZXdUeXBlLnByb3RvdHlwZS5yZW5kZXIpIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBjaGVjayBhYm92ZSB2ZXJpZmllcyB0aGF0IG5ld1R5cGUgaXMgc3VwcG9zZSB0byBiZSBjb25zdHJ1Y3RlZFxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jb21wb25lbnQgPSBjID0gbmV3IG5ld1R5cGUobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRydXN0IG1lLCBDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIHdlIHdhbnRcblx0XHRcdFx0XHRuZXdWTm9kZS5fY29tcG9uZW50ID0gYyA9IG5ldyBCYXNlQ29tcG9uZW50KFxuXHRcdFx0XHRcdFx0bmV3UHJvcHMsXG5cdFx0XHRcdFx0XHRjb21wb25lbnRDb250ZXh0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjLmNvbnN0cnVjdG9yID0gbmV3VHlwZTtcblx0XHRcdFx0XHRjLnJlbmRlciA9IGRvUmVuZGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm92aWRlcikgcHJvdmlkZXIuc3ViKGMpO1xuXG5cdFx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdFx0aWYgKCFjLnN0YXRlKSBjLnN0YXRlID0ge307XG5cdFx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRcdGMuX2dsb2JhbENvbnRleHQgPSBnbG9iYWxDb250ZXh0O1xuXHRcdFx0XHRpc05ldyA9IGMuX2RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9XG5cblx0XHRcdC8vIEludm9rZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcblx0XHRcdGlmIChjLl9uZXh0U3RhdGUgPT0gbnVsbCkge1xuXHRcdFx0XHRjLl9uZXh0U3RhdGUgPSBjLnN0YXRlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAoYy5fbmV4dFN0YXRlID09IGMuc3RhdGUpIHtcblx0XHRcdFx0XHRjLl9uZXh0U3RhdGUgPSBhc3NpZ24oe30sIGMuX25leHRTdGF0ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhc3NpZ24oXG5cdFx0XHRcdFx0Yy5fbmV4dFN0YXRlLFxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5ld1Byb3BzLCBjLl9uZXh0U3RhdGUpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdG9sZFByb3BzID0gYy5wcm9wcztcblx0XHRcdG9sZFN0YXRlID0gYy5zdGF0ZTtcblx0XHRcdGMuX3Zub2RlID0gbmV3Vk5vZGU7XG5cblx0XHRcdC8vIEludm9rZSBwcmUtcmVuZGVyIGxpZmVjeWNsZSBtZXRob2RzXG5cdFx0XHRpZiAoaXNOZXcpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09IG51bGwgJiZcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxNb3VudCAhPSBudWxsXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbE1vdW50KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYy5jb21wb25lbnREaWRNb3VudCAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5jb21wb25lbnREaWRNb3VudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRuZXdUeXBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PSBudWxsICYmXG5cdFx0XHRcdFx0bmV3UHJvcHMgIT09IG9sZFByb3BzICYmXG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICE9IG51bGxcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBjb21wb25lbnRDb250ZXh0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhYy5fZm9yY2UgJiZcblx0XHRcdFx0XHQoKGMuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9IG51bGwgJiZcblx0XHRcdFx0XHRcdGMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuXHRcdFx0XHRcdFx0XHRuZXdQcm9wcyxcblx0XHRcdFx0XHRcdFx0Yy5fbmV4dFN0YXRlLFxuXHRcdFx0XHRcdFx0XHRjb21wb25lbnRDb250ZXh0XG5cdFx0XHRcdFx0XHQpID09PSBmYWxzZSkgfHxcblx0XHRcdFx0XHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9PT0gb2xkVk5vZGUuX29yaWdpbmFsKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBNb3JlIGluZm8gYWJvdXQgdGhpcyBoZXJlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9Kb3ZpRGVDcm9vY2svYmVjNWYyY2U5MzU0NGQyZTYwNzBlZjhlMDAzNmU0ZThcblx0XHRcdFx0XHRpZiAobmV3Vk5vZGUuX29yaWdpbmFsICE9PSBvbGRWTm9kZS5fb3JpZ2luYWwpIHtcblx0XHRcdFx0XHRcdC8vIFdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGJhaWwgYmVjYXVzZSBvZiBzQ1Ugd2UgaGF2ZSB0byB1cGRhdGVcblx0XHRcdFx0XHRcdC8vIHRoZSBwcm9wcywgc3RhdGUgYW5kIGRpcnR5LXN0YXRlLlxuXHRcdFx0XHRcdFx0Ly8gd2hlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIHN0cmljdC1lcXVhbGl0eSB3ZSBkb24ndCBhcyB0aGUgY2hpbGQgY291bGQgc3RpbGxcblx0XHRcdFx0XHRcdC8vIGJlIGRpcnRpZWQgc2VlICMzODgzXG5cdFx0XHRcdFx0XHRjLnByb3BzID0gbmV3UHJvcHM7XG5cdFx0XHRcdFx0XHRjLnN0YXRlID0gYy5fbmV4dFN0YXRlO1xuXHRcdFx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRcdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBvbGRWTm9kZS5fY2hpbGRyZW47XG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuLmZvckVhY2godm5vZGUgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHZub2RlKSB2bm9kZS5fcGFyZW50ID0gbmV3Vk5vZGU7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGMuX3N0YXRlQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MucHVzaChjLl9zdGF0ZUNhbGxiYWNrc1tpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cblx0XHRcdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y29tbWl0UXVldWUucHVzaChjKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhayBvdXRlcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjLmNvbXBvbmVudFdpbGxVcGRhdGUgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgYy5fbmV4dFN0YXRlLCBjb21wb25lbnRDb250ZXh0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjLmNvbXBvbmVudERpZFVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0Yy5jb21wb25lbnREaWRVcGRhdGUob2xkUHJvcHMsIG9sZFN0YXRlLCBzbmFwc2hvdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Yy5jb250ZXh0ID0gY29tcG9uZW50Q29udGV4dDtcblx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdGMuX3BhcmVudERvbSA9IHBhcmVudERvbTtcblx0XHRcdGMuX2ZvcmNlID0gZmFsc2U7XG5cblx0XHRcdGxldCByZW5kZXJIb29rID0gb3B0aW9ucy5fcmVuZGVyLFxuXHRcdFx0XHRjb3VudCA9IDA7XG5cdFx0XHRpZiAoJ3Byb3RvdHlwZScgaW4gbmV3VHlwZSAmJiBuZXdUeXBlLnByb3RvdHlwZS5yZW5kZXIpIHtcblx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0dG1wID0gYy5yZW5kZXIoYy5wcm9wcywgYy5zdGF0ZSwgYy5jb250ZXh0KTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGMuX3N0YXRlQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5fc3RhdGVDYWxsYmFja3NbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0XHR0bXAgPSBjLnJlbmRlcihjLnByb3BzLCBjLnN0YXRlLCBjLmNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIHNldFN0YXRlIGNhbGxlZCBpbiByZW5kZXIsIHNlZSAjMjU1M1xuXHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdH0gd2hpbGUgKGMuX2RpcnR5ICYmICsrY291bnQgPCAyNSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBzZXRTdGF0ZSBjYWxsZWQgaW4gcmVuZGVyLCBzZWUgIzI1NTNcblx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cblx0XHRcdGlmIChjLmdldENoaWxkQ29udGV4dCAhPSBudWxsKSB7XG5cdFx0XHRcdGdsb2JhbENvbnRleHQgPSBhc3NpZ24oYXNzaWduKHt9LCBnbG9iYWxDb250ZXh0KSwgYy5nZXRDaGlsZENvbnRleHQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNOZXcgJiYgYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdHNuYXBzaG90ID0gYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShvbGRQcm9wcywgb2xkU3RhdGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgaXNUb3BMZXZlbEZyYWdtZW50ID1cblx0XHRcdFx0dG1wICE9IG51bGwgJiYgdG1wLnR5cGUgPT09IEZyYWdtZW50ICYmIHRtcC5rZXkgPT0gbnVsbDtcblx0XHRcdGxldCByZW5kZXJSZXN1bHQgPSBpc1RvcExldmVsRnJhZ21lbnQgPyB0bXAucHJvcHMuY2hpbGRyZW4gOiB0bXA7XG5cblx0XHRcdGRpZmZDaGlsZHJlbihcblx0XHRcdFx0cGFyZW50RG9tLFxuXHRcdFx0XHRpc0FycmF5KHJlbmRlclJlc3VsdCkgPyByZW5kZXJSZXN1bHQgOiBbcmVuZGVyUmVzdWx0XSxcblx0XHRcdFx0bmV3Vk5vZGUsXG5cdFx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0XHRpc1N2Zyxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0XHRvbGREb20sXG5cdFx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0XHRyZWZRdWV1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Yy5iYXNlID0gbmV3Vk5vZGUuX2RvbTtcblxuXHRcdFx0Ly8gV2Ugc3VjY2Vzc2Z1bGx5IHJlbmRlcmVkIHRoaXMgVk5vZGUsIHVuc2V0IGFueSBzdG9yZWQgaHlkcmF0aW9uL2JhaWxvdXQgc3RhdGU6XG5cdFx0XHRuZXdWTm9kZS5fZmxhZ3MgJj0gUkVTRVRfTU9ERTtcblxuXHRcdFx0aWYgKGMuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29tbWl0UXVldWUucHVzaChjKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0XHRjLl9wZW5kaW5nRXJyb3IgPSBjLl9wcm9jZXNzaW5nRXhjZXB0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdFx0Ly8gaWYgaHlkcmF0aW5nIG9yIGNyZWF0aW5nIGluaXRpYWwgdHJlZSwgYmFpbG91dCBwcmVzZXJ2ZXMgRE9NOlxuXHRcdFx0aWYgKGlzSHlkcmF0aW5nIHx8IGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZERvbTtcblx0XHRcdFx0bmV3Vk5vZGUuX2ZsYWdzIHw9IGlzSHlkcmF0aW5nXG5cdFx0XHRcdFx0PyBNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRFxuXHRcdFx0XHRcdDogTU9ERV9IWURSQVRFO1xuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbltleGNlc3NEb21DaGlsZHJlbi5pbmRleE9mKG9sZERvbSldID0gbnVsbDtcblx0XHRcdFx0Ly8gXiBjb3VsZCBwb3NzaWJseSBiZSBzaW1wbGlmaWVkIHRvOlxuXHRcdFx0XHQvLyBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGggPSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdH1cblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgbmV3Vk5vZGUsIG9sZFZOb2RlKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPT0gbnVsbCAmJlxuXHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9PT0gb2xkVk5vZGUuX29yaWdpbmFsXG5cdCkge1xuXHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0fSBlbHNlIHtcblx0XHRuZXdWTm9kZS5fZG9tID0gZGlmZkVsZW1lbnROb2Rlcyhcblx0XHRcdG9sZFZOb2RlLl9kb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdGlzU3ZnLFxuXHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLmRpZmZlZCkpIHRtcChuZXdWTm9kZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHNcbiAqIHdoaWNoIGhhdmUgY2FsbGJhY2tzIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge1ZOb2RlfSByb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXRSb290KGNvbW1pdFF1ZXVlLCByb290LCByZWZRdWV1ZSkge1xuXHRyb290Ll9uZXh0RG9tID0gdW5kZWZpbmVkO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmVmUXVldWUubGVuZ3RoOyBpKyspIHtcblx0XHRhcHBseVJlZihyZWZRdWV1ZVtpXSwgcmVmUXVldWVbKytpXSwgcmVmUXVldWVbKytpXSk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5fY29tbWl0KSBvcHRpb25zLl9jb21taXQocm9vdCwgY29tbWl0UXVldWUpO1xuXG5cdGNvbW1pdFF1ZXVlLnNvbWUoYyA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgUmV1c2UgdGhlIGNvbW1pdFF1ZXVlIHZhcmlhYmxlIGhlcmUgc28gdGhlIHR5cGUgY2hhbmdlc1xuXHRcdFx0Y29tbWl0UXVldWUgPSBjLl9yZW5kZXJDYWxsYmFja3M7XG5cdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdGNvbW1pdFF1ZXVlLnNvbWUoY2IgPT4ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFNlZSBhYm92ZSBjb21tZW50IG9uIGNvbW1pdFF1ZXVlXG5cdFx0XHRcdGNiLmNhbGwoYyk7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIGMuX3Zub2RlKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgcmVwcmVzZW50aW5nIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSB2aXJ0dWFsIG5vZGVzXG4gKiBiZWluZyBkaWZmZWRcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1ZOb2RlIFRoZSBuZXcgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge1ZOb2RlfSBvbGRWTm9kZSBUaGUgb2xkIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbENvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdmcgV2hldGhlciBvciBub3QgdGhpcyBET00gbm9kZSBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtib29sZWFufSBpc0h5ZHJhdGluZyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKiBAcGFyYW0ge2FueVtdfSByZWZRdWV1ZSBhbiBhcnJheSBvZiBlbGVtZW50cyBuZWVkZWQgdG8gaW52b2tlIHJlZnNcbiAqIEByZXR1cm5zIHtQcmVhY3RFbGVtZW50fVxuICovXG5mdW5jdGlvbiBkaWZmRWxlbWVudE5vZGVzKFxuXHRkb20sXG5cdG5ld1ZOb2RlLFxuXHRvbGRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0aXNTdmcsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IG9sZFByb3BzID0gb2xkVk5vZGUucHJvcHM7XG5cdGxldCBuZXdQcm9wcyA9IG5ld1ZOb2RlLnByb3BzO1xuXHRsZXQgbm9kZVR5cGUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5ld1ZOb2RlLnR5cGUpO1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG5ld0h0bWw7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG9sZEh0bWw7XG5cdC8qKiBAdHlwZSB7Q29tcG9uZW50Q2hpbGRyZW59ICovXG5cdGxldCBuZXdDaGlsZHJlbjtcblx0bGV0IHZhbHVlO1xuXHRsZXQgaW5wdXRWYWx1ZTtcblx0bGV0IGNoZWNrZWQ7XG5cblx0Ly8gVHJhY2tzIGVudGVyaW5nIGFuZCBleGl0aW5nIFNWRyBuYW1lc3BhY2Ugd2hlbiBkZXNjZW5kaW5nIHRocm91Z2ggdGhlIHRyZWUuXG5cdGlmIChub2RlVHlwZSA9PT0gJ3N2ZycpIGlzU3ZnID0gdHJ1ZTtcblxuXHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdGZvciAoaSA9IDA7IGkgPCBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFsdWUgPSBleGNlc3NEb21DaGlsZHJlbltpXTtcblxuXHRcdFx0Ly8gaWYgbmV3Vk5vZGUgbWF0Y2hlcyBhbiBlbGVtZW50IGluIGV4Y2Vzc0RvbUNoaWxkcmVuIG9yIHRoZSBgZG9tYFxuXHRcdFx0Ly8gYXJndW1lbnQgbWF0Y2hlcyBhbiBlbGVtZW50IGluIGV4Y2Vzc0RvbUNoaWxkcmVuLCByZW1vdmUgaXQgZnJvbVxuXHRcdFx0Ly8gZXhjZXNzRG9tQ2hpbGRyZW4gc28gaXQgaXNuJ3QgbGF0ZXIgcmVtb3ZlZCBpbiBkaWZmQ2hpbGRyZW5cblx0XHRcdGlmIChcblx0XHRcdFx0dmFsdWUgJiZcblx0XHRcdFx0J3NldEF0dHJpYnV0ZScgaW4gdmFsdWUgPT09ICEhbm9kZVR5cGUgJiZcblx0XHRcdFx0KG5vZGVUeXBlID8gdmFsdWUubG9jYWxOYW1lID09PSBub2RlVHlwZSA6IHZhbHVlLm5vZGVUeXBlID09PSAzKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRvbSA9IHZhbHVlO1xuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbltpXSA9IG51bGw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChkb20gPT0gbnVsbCkge1xuXHRcdGlmIChub2RlVHlwZSA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld1Byb3BzKTtcblx0XHR9XG5cblx0XHRpZiAoaXNTdmcpIHtcblx0XHRcdGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBub2RlVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZVR5cGUsIG5ld1Byb3BzLmlzICYmIG5ld1Byb3BzKTtcblx0XHR9XG5cblx0XHQvLyB3ZSBjcmVhdGVkIGEgbmV3IHBhcmVudCwgc28gbm9uZSBvZiB0aGUgcHJldmlvdXNseSBhdHRhY2hlZCBjaGlsZHJlbiBjYW4gYmUgcmV1c2VkOlxuXHRcdGV4Y2Vzc0RvbUNoaWxkcmVuID0gbnVsbDtcblx0XHQvLyB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgbm9kZSwgc28gd2UgY2FuIGFzc3VtZSB0aGlzIGlzIGEgbmV3IHN1YnRyZWUgKGluXG5cdFx0Ly8gY2FzZSB3ZSBhcmUgaHlkcmF0aW5nKSwgdGhpcyBkZW9wdHMgdGhlIGh5ZHJhdGVcblx0XHRpc0h5ZHJhdGluZyA9IGZhbHNlO1xuXHR9XG5cblx0aWYgKG5vZGVUeXBlID09PSBudWxsKSB7XG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgd2Ugc3RpbGwgaGF2ZSB0byBzcGxpdCBtZXJnZWQgdGV4dCBmcm9tIFNTUidkIEhUTUwuXG5cdFx0aWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyAmJiAoIWlzSHlkcmF0aW5nIHx8IGRvbS5kYXRhICE9PSBuZXdQcm9wcykpIHtcblx0XHRcdGRvbS5kYXRhID0gbmV3UHJvcHM7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIElmIGV4Y2Vzc0RvbUNoaWxkcmVuIHdhcyBub3QgbnVsbCwgcmVwb3B1bGF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBjaGlsZHJlbjpcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IGV4Y2Vzc0RvbUNoaWxkcmVuICYmIHNsaWNlLmNhbGwoZG9tLmNoaWxkTm9kZXMpO1xuXG5cdFx0b2xkUHJvcHMgPSBvbGRWTm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7XG5cblx0XHQvLyBJZiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgYXJlIG5vdCBoeWRyYXRpbmcgYnV0IGFyZSB1c2luZ1xuXHRcdC8vIGV4aXN0aW5nIERPTSAoZS5nLiByZXBsYWNlTm9kZSkgd2Ugc2hvdWxkIHJlYWQgdGhlIGV4aXN0aW5nIERPTVxuXHRcdC8vIGF0dHJpYnV0ZXMgdG8gZGlmZiB0aGVtXG5cdFx0aWYgKCFpc0h5ZHJhdGluZyAmJiBleGNlc3NEb21DaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRvbGRQcm9wcyA9IHt9O1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRvbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhbHVlID0gZG9tLmF0dHJpYnV0ZXNbaV07XG5cdFx0XHRcdG9sZFByb3BzW3ZhbHVlLm5hbWVdID0gdmFsdWUudmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpIGluIG9sZFByb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG9sZFByb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0b2xkSHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpICE9PSAna2V5JyAmJiAhKGkgaW4gbmV3UHJvcHMpKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoaSA9PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIG5ld1Byb3BzKSB8fFxuXHRcdFx0XHRcdChpID09ICdjaGVja2VkJyAmJiAnZGVmYXVsdENoZWNrZWQnIGluIG5ld1Byb3BzKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIG51bGwsIHZhbHVlLCBpc1N2Zyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgcHJvcHMgYXJlIG5vdCBkaWZmZWQgYXQgYWxsIChpbmNsdWRpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpXG5cdFx0Ly8gQFRPRE8gd2Ugc2hvdWxkIHdhcm4gaW4gZGVidWcgbW9kZSB3aGVuIHByb3BzIGRvbid0IG1hdGNoIGhlcmUuXG5cdFx0Zm9yIChpIGluIG5ld1Byb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG5ld1Byb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0XHRuZXdDaGlsZHJlbiA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0bmV3SHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICd2YWx1ZScpIHtcblx0XHRcdFx0aW5wdXRWYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdjaGVja2VkJykge1xuXHRcdFx0XHRjaGVja2VkID0gdmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRpICE9PSAna2V5JyAmJlxuXHRcdFx0XHQoIWlzSHlkcmF0aW5nIHx8IHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0XHRvbGRQcm9wc1tpXSAhPT0gdmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIHZhbHVlLCBvbGRQcm9wc1tpXSwgaXNTdmcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBuZXcgdm5vZGUgZGlkbid0IGhhdmUgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsIGRpZmYgaXRzIGNoaWxkcmVuXG5cdFx0aWYgKG5ld0h0bWwpIHtcblx0XHRcdC8vIEF2b2lkIHJlLWFwcGx5aW5nIHRoZSBzYW1lICdfX2h0bWwnIGlmIGl0IGRpZCBub3QgY2hhbmdlZCBiZXR3ZWVuIHJlLXJlbmRlclxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhaXNIeWRyYXRpbmcgJiZcblx0XHRcdFx0KCFvbGRIdG1sIHx8XG5cdFx0XHRcdFx0KG5ld0h0bWwuX19odG1sICE9PSBvbGRIdG1sLl9faHRtbCAmJlxuXHRcdFx0XHRcdFx0bmV3SHRtbC5fX2h0bWwgIT09IGRvbS5pbm5lckhUTUwpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRvbS5pbm5lckhUTUwgPSBuZXdIdG1sLl9faHRtbDtcblx0XHRcdH1cblxuXHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChvbGRIdG1sKSBkb20uaW5uZXJIVE1MID0gJyc7XG5cblx0XHRcdGRpZmZDaGlsZHJlbihcblx0XHRcdFx0ZG9tLFxuXHRcdFx0XHRpc0FycmF5KG5ld0NoaWxkcmVuKSA/IG5ld0NoaWxkcmVuIDogW25ld0NoaWxkcmVuXSxcblx0XHRcdFx0bmV3Vk5vZGUsXG5cdFx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0XHRpc1N2ZyAmJiBub2RlVHlwZSAhPT0gJ2ZvcmVpZ25PYmplY3QnLFxuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuXG5cdFx0XHRcdFx0PyBleGNlc3NEb21DaGlsZHJlblswXVxuXHRcdFx0XHRcdDogb2xkVk5vZGUuX2NoaWxkcmVuICYmIGdldERvbVNpYmxpbmcob2xkVk5vZGUsIDApLFxuXHRcdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdFx0cmVmUXVldWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBub3QgcGFydCBvZiBhbnkgdm5vZGUuXG5cdFx0XHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdFx0XHRmb3IgKGkgPSBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGktLTsgKSB7XG5cdFx0XHRcdFx0aWYgKGV4Y2Vzc0RvbUNoaWxkcmVuW2ldICE9IG51bGwpIHJlbW92ZU5vZGUoZXhjZXNzRG9tQ2hpbGRyZW5baV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQXMgYWJvdmUsIGRvbid0IGRpZmYgcHJvcHMgZHVyaW5nIGh5ZHJhdGlvblxuXHRcdGlmICghaXNIeWRyYXRpbmcpIHtcblx0XHRcdGkgPSAndmFsdWUnO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0Ly8gIzI3NTYgRm9yIHRoZSA8cHJvZ3Jlc3M+LWVsZW1lbnQgdGhlIGluaXRpYWwgdmFsdWUgaXMgMCxcblx0XHRcdFx0Ly8gZGVzcGl0ZSB0aGUgYXR0cmlidXRlIG5vdCBiZWluZyBwcmVzZW50LiBXaGVuIHRoZSBhdHRyaWJ1dGVcblx0XHRcdFx0Ly8gaXMgbWlzc2luZyB0aGUgcHJvZ3Jlc3MgYmFyIGlzIHRyZWF0ZWQgYXMgaW5kZXRlcm1pbmF0ZS5cblx0XHRcdFx0Ly8gVG8gZml4IHRoYXQgd2UnbGwgYWx3YXlzIHVwZGF0ZSBpdCB3aGVuIGl0IGlzIDAgZm9yIHByb2dyZXNzIGVsZW1lbnRzXG5cdFx0XHRcdChpbnB1dFZhbHVlICE9PSBkb21baV0gfHxcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdwcm9ncmVzcycgJiYgIWlucHV0VmFsdWUpIHx8XG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBvbmx5IGZvciBJRSAxMSB0byBmaXggPHNlbGVjdD4gdmFsdWUgbm90IGJlaW5nIHVwZGF0ZWQuXG5cdFx0XHRcdFx0Ly8gVG8gYXZvaWQgYSBzdGFsZSBzZWxlY3QgdmFsdWUgd2UgbmVlZCB0byBzZXQgdGhlIG9wdGlvbi52YWx1ZVxuXHRcdFx0XHRcdC8vIGFnYWluLCB3aGljaCB0cmlnZ2VycyBJRTExIHRvIHJlLWV2YWx1YXRlIHRoZSBzZWxlY3QgdmFsdWVcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdvcHRpb24nICYmIGlucHV0VmFsdWUgIT09IG9sZFByb3BzW2ldKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGlucHV0VmFsdWUsIG9sZFByb3BzW2ldLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSAnY2hlY2tlZCc7XG5cdFx0XHRpZiAoY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIGNoZWNrZWQgIT09IGRvbVtpXSkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGNoZWNrZWQsIG9sZFByb3BzW2ldLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRvbTtcbn1cblxuLyoqXG4gKiBJbnZva2Ugb3IgdXBkYXRlIGEgcmVmLCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcyBhIGZ1bmN0aW9uIG9yIG9iamVjdCByZWYuXG4gKiBAcGFyYW0ge1JlZjxhbnk+fSByZWZcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UmVmKHJlZiwgdmFsdWUsIHZub2RlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiByZWYgPT0gJ2Z1bmN0aW9uJykgcmVmKHZhbHVlKTtcblx0XHRlbHNlIHJlZi5jdXJyZW50ID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFVubW91bnQgYSB2aXJ0dWFsIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgYXBwbHkgRE9NIGNoYW5nZXNcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gdW5tb3VudFxuICogQHBhcmFtIHtWTm9kZX0gcGFyZW50Vk5vZGUgVGhlIHBhcmVudCBvZiB0aGUgVk5vZGUgdGhhdCBpbml0aWF0ZWQgdGhlIHVubW91bnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBSZW1vdmVdIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBhIHBhcmVudCBub2RlIG9mIHRoZVxuICogY3VycmVudCBlbGVtZW50IGlzIGFscmVhZHkgZGV0YWNoZWQgZnJvbSB0aGUgRE9NLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudCh2bm9kZSwgcGFyZW50Vk5vZGUsIHNraXBSZW1vdmUpIHtcblx0bGV0IHI7XG5cdGlmIChvcHRpb25zLnVubW91bnQpIG9wdGlvbnMudW5tb3VudCh2bm9kZSk7XG5cblx0aWYgKChyID0gdm5vZGUucmVmKSkge1xuXHRcdGlmICghci5jdXJyZW50IHx8IHIuY3VycmVudCA9PT0gdm5vZGUuX2RvbSkge1xuXHRcdFx0YXBwbHlSZWYociwgbnVsbCwgcGFyZW50Vk5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdGlmICgociA9IHZub2RlLl9jb21wb25lbnQpICE9IG51bGwpIHtcblx0XHRpZiAoci5jb21wb25lbnRXaWxsVW5tb3VudCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHBhcmVudFZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyLmJhc2UgPSByLl9wYXJlbnREb20gPSBudWxsO1xuXHR9XG5cblx0aWYgKChyID0gdm5vZGUuX2NoaWxkcmVuKSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHJbaV0pIHtcblx0XHRcdFx0dW5tb3VudChcblx0XHRcdFx0XHRyW2ldLFxuXHRcdFx0XHRcdHBhcmVudFZOb2RlLFxuXHRcdFx0XHRcdHNraXBSZW1vdmUgfHwgdHlwZW9mIHZub2RlLnR5cGUgIT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICghc2tpcFJlbW92ZSAmJiB2bm9kZS5fZG9tICE9IG51bGwpIHtcblx0XHRyZW1vdmVOb2RlKHZub2RlLl9kb20pO1xuXHR9XG5cblx0Ly8gTXVzdCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYF9uZXh0RG9tYFxuXHQvLyBmb3Igd2hpY2ggYG51bGxgIGlzIGEgdmFsaWQgdmFsdWUuIFNlZSBjb21tZW50IGluIGBjcmVhdGUtZWxlbWVudC5qc2Bcblx0dm5vZGUuX2NvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQgPSB2bm9kZS5fZG9tID0gdm5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgYC5yZW5kZXIoKWAgbWV0aG9kIGZvciBhIFBGQyBiYWNraW5nIGluc3RhbmNlLiAqL1xuZnVuY3Rpb24gZG9SZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KSB7XG5cdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBFTVBUWV9PQkogfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb21taXRSb290LCBkaWZmIH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAnLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFJlbmRlciBhIFByZWFjdCB2aXJ0dWFsIG5vZGUgaW50byBhIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHJlbmRlclxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnQgfCBvYmplY3R9IFtyZXBsYWNlTm9kZV0gT3B0aW9uYWw6IEF0dGVtcHQgdG8gcmUtdXNlIGFuXG4gKiBleGlzdGluZyBET00gdHJlZSByb290ZWQgYXQgYHJlcGxhY2VOb2RlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKHZub2RlLCBwYXJlbnREb20sIHJlcGxhY2VOb2RlKSB7XG5cdGlmIChvcHRpb25zLl9yb290KSBvcHRpb25zLl9yb290KHZub2RlLCBwYXJlbnREb20pO1xuXG5cdC8vIFdlIGFidXNlIHRoZSBgcmVwbGFjZU5vZGVgIHBhcmFtZXRlciBpbiBgaHlkcmF0ZSgpYCB0byBzaWduYWwgaWYgd2UgYXJlIGluXG5cdC8vIGh5ZHJhdGlvbiBtb2RlIG9yIG5vdCBieSBwYXNzaW5nIHRoZSBgaHlkcmF0ZWAgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIERPTVxuXHQvLyBlbGVtZW50Li5cblx0bGV0IGlzSHlkcmF0aW5nID0gdHlwZW9mIHJlcGxhY2VOb2RlID09ICdmdW5jdGlvbic7XG5cblx0Ly8gVG8gYmUgYWJsZSB0byBzdXBwb3J0IGNhbGxpbmcgYHJlbmRlcigpYCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZVxuXHQvLyBET00gbm9kZSwgd2UgbmVlZCB0byBvYnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIHRyZWUuIFdlIGRvXG5cdC8vIHRoaXMgYnkgYXNzaWduaW5nIGEgbmV3IGBfY2hpbGRyZW5gIHByb3BlcnR5IHRvIERPTSBub2RlcyB3aGljaCBwb2ludHNcblx0Ly8gdG8gdGhlIGxhc3QgcmVuZGVyZWQgdHJlZS4gQnkgZGVmYXVsdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50LCB3aGljaFxuXHQvLyBtZWFucyB0aGF0IHdlIGFyZSBtb3VudGluZyBhIG5ldyB0cmVlIGZvciB0aGUgZmlyc3QgdGltZS5cblx0bGV0IG9sZFZOb2RlID0gaXNIeWRyYXRpbmdcblx0XHQ/IG51bGxcblx0XHQ6IChyZXBsYWNlTm9kZSAmJiByZXBsYWNlTm9kZS5fY2hpbGRyZW4pIHx8IHBhcmVudERvbS5fY2hpbGRyZW47XG5cblx0dm5vZGUgPSAoKCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZSkgfHwgcGFyZW50RG9tKS5fY2hpbGRyZW4gPVxuXHRcdGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIFt2bm9kZV0pO1xuXG5cdC8vIExpc3Qgb2YgZWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZmZpbmcuXG5cdGxldCBjb21taXRRdWV1ZSA9IFtdLFxuXHRcdHJlZlF1ZXVlID0gW107XG5cdGRpZmYoXG5cdFx0cGFyZW50RG9tLFxuXHRcdC8vIERldGVybWluZSB0aGUgbmV3IHZub2RlIHRyZWUgYW5kIHN0b3JlIGl0IG9uIHRoZSBET00gZWxlbWVudCBvblxuXHRcdC8vIG91ciBjdXN0b20gYF9jaGlsZHJlbmAgcHJvcGVydHkuXG5cdFx0dm5vZGUsXG5cdFx0b2xkVk5vZGUgfHwgRU1QVFlfT0JKLFxuXHRcdEVNUFRZX09CSixcblx0XHRwYXJlbnREb20ub3duZXJTVkdFbGVtZW50ICE9PSB1bmRlZmluZWQsXG5cdFx0IWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlXG5cdFx0XHQ/IFtyZXBsYWNlTm9kZV1cblx0XHRcdDogb2xkVk5vZGVcblx0XHRcdD8gbnVsbFxuXHRcdFx0OiBwYXJlbnREb20uZmlyc3RDaGlsZFxuXHRcdFx0PyBzbGljZS5jYWxsKHBhcmVudERvbS5jaGlsZE5vZGVzKVxuXHRcdFx0OiBudWxsLFxuXHRcdGNvbW1pdFF1ZXVlLFxuXHRcdCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZVxuXHRcdFx0PyByZXBsYWNlTm9kZVxuXHRcdFx0OiBvbGRWTm9kZVxuXHRcdFx0PyBvbGRWTm9kZS5fZG9tXG5cdFx0XHQ6IHBhcmVudERvbS5maXJzdENoaWxkLFxuXHRcdGlzSHlkcmF0aW5nLFxuXHRcdHJlZlF1ZXVlXG5cdCk7XG5cblx0Ly8gRmx1c2ggYWxsIHF1ZXVlZCBlZmZlY3RzXG5cdGNvbW1pdFJvb3QoY29tbWl0UXVldWUsIHZub2RlLCByZWZRdWV1ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIERPTSBlbGVtZW50IHdpdGggZGF0YSBmcm9tIGEgUHJlYWN0IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZH0gdm5vZGUgVGhlIHZpcnR1YWwgbm9kZSB0byByZW5kZXJcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBET00gZWxlbWVudCB0byB1cGRhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGUodm5vZGUsIHBhcmVudERvbSkge1xuXHRyZW5kZXIodm5vZGUsIHBhcmVudERvbSwgaHlkcmF0ZSk7XG59XG4iLCAiaW1wb3J0IHsgYXNzaWduLCBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVWTm9kZSB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuXG4vKipcbiAqIENsb25lcyB0aGUgZ2l2ZW4gVk5vZGUsIG9wdGlvbmFsbHkgYWRkaW5nIGF0dHJpYnV0ZXMvcHJvcHMgYW5kIHJlcGxhY2luZyBpdHNcbiAqIGNoaWxkcmVuLlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGUgVGhlIHZpcnR1YWwgRE9NIGVsZW1lbnQgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBBdHRyaWJ1dGVzL3Byb3BzIHRvIGFkZCB3aGVuIGNsb25pbmdcbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Q2hpbGRyZW4+fSByZXN0IEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWRcbiAqIGFzIHJlcGxhY2VtZW50IGNoaWxkcmVuLlxuICogQHJldHVybnMge1ZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVFbGVtZW50KHZub2RlLCBwcm9wcywgY2hpbGRyZW4pIHtcblx0bGV0IG5vcm1hbGl6ZWRQcm9wcyA9IGFzc2lnbih7fSwgdm5vZGUucHJvcHMpLFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRsZXQgZGVmYXVsdFByb3BzO1xuXG5cdGlmICh2bm9kZS50eXBlICYmIHZub2RlLnR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0ZGVmYXVsdFByb3BzID0gdm5vZGUudHlwZS5kZWZhdWx0UHJvcHM7XG5cdH1cblxuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAocHJvcHNbaV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gZGVmYXVsdFByb3BzW2ldO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0XHR9XG5cdH1cblxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4gPVxuXHRcdFx0YXJndW1lbnRzLmxlbmd0aCA+IDMgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBjaGlsZHJlbjtcblx0fVxuXG5cdHJldHVybiBjcmVhdGVWTm9kZShcblx0XHR2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXkgfHwgdm5vZGUua2V5LFxuXHRcdHJlZiB8fCB2bm9kZS5yZWYsXG5cdFx0bnVsbFxuXHQpO1xufVxuIiwgIi8qKlxuICogRmluZCB0aGUgY2xvc2VzdCBlcnJvciBib3VuZGFyeSB0byBhIHRocm93biBlcnJvciBhbmQgY2FsbCBpdFxuICogQHBhcmFtIHtvYmplY3R9IGVycm9yIFRoZSB0aHJvd24gdmFsdWVcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlIFRoZSB2bm9kZSB0aGF0IHRocmV3IHRoZSBlcnJvciB0aGF0IHdhcyBjYXVnaHQgKGV4Y2VwdFxuICogZm9yIHVubW91bnRpbmcgd2hlbiB0aGlzIHBhcmFtZXRlciBpcyB0aGUgaGlnaGVzdCBwYXJlbnQgdGhhdCB3YXMgYmVpbmdcbiAqIHVubW91bnRlZClcbiAqIEBwYXJhbSB7Vk5vZGV9IFtvbGRWTm9kZV1cbiAqIEBwYXJhbSB7RXJyb3JJbmZvfSBbZXJyb3JJbmZvXVxuICovXG5leHBvcnQgZnVuY3Rpb24gX2NhdGNoRXJyb3IoZXJyb3IsIHZub2RlLCBvbGRWTm9kZSwgZXJyb3JJbmZvKSB7XG5cdC8qKiBAdHlwZSB7Q29tcG9uZW50fSAqL1xuXHRsZXQgY29tcG9uZW50LFxuXHRcdC8qKiBAdHlwZSB7Q29tcG9uZW50VHlwZX0gKi9cblx0XHRjdG9yLFxuXHRcdC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cblx0XHRoYW5kbGVkO1xuXG5cdGZvciAoOyAodm5vZGUgPSB2bm9kZS5fcGFyZW50KTsgKSB7XG5cdFx0aWYgKChjb21wb25lbnQgPSB2bm9kZS5fY29tcG9uZW50KSAmJiAhY29tcG9uZW50Ll9wcm9jZXNzaW5nRXhjZXB0aW9uKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjdG9yID0gY29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG5cdFx0XHRcdGlmIChjdG9yICYmIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9IG51bGwpIHtcblx0XHRcdFx0XHRjb21wb25lbnQuc2V0U3RhdGUoY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpKTtcblx0XHRcdFx0XHRoYW5kbGVkID0gY29tcG9uZW50Ll9kaXJ0eTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2ggIT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbXBvbmVudC5jb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvIHx8IHt9KTtcblx0XHRcdFx0XHRoYW5kbGVkID0gY29tcG9uZW50Ll9kaXJ0eTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRoaXMgaXMgYW4gZXJyb3IgYm91bmRhcnkuIE1hcmsgaXQgYXMgaGF2aW5nIGJhaWxlZCBvdXQsIGFuZCB3aGV0aGVyIGl0IHdhcyBtaWQtaHlkcmF0aW9uLlxuXHRcdFx0XHRpZiAoaGFuZGxlZCkge1xuXHRcdFx0XHRcdHJldHVybiAoY29tcG9uZW50Ll9wZW5kaW5nRXJyb3IgPSBjb21wb25lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGVycm9yID0gZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aHJvdyBlcnJvcjtcbn1cbiIsICJpbXBvcnQgeyBvcHRpb25zIGFzIF9vcHRpb25zIH0gZnJvbSAncHJlYWN0JztcblxuLyoqIEB0eXBlIHtudW1iZXJ9ICovXG5sZXQgY3VycmVudEluZGV4O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cbmxldCBjdXJyZW50Q29tcG9uZW50O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cbmxldCBwcmV2aW91c0NvbXBvbmVudDtcblxuLyoqIEB0eXBlIHtudW1iZXJ9ICovXG5sZXQgY3VycmVudEhvb2sgPSAwO1xuXG4vKiogQHR5cGUge0FycmF5PGltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudD59ICovXG5sZXQgYWZ0ZXJQYWludEVmZmVjdHMgPSBbXTtcblxubGV0IEVNUFRZID0gW107XG5cbi8vIENhc3QgdG8gdXNlIGludGVybmFsIE9wdGlvbnMgdHlwZVxuY29uc3Qgb3B0aW9ucyA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuT3B0aW9uc30gKi8gKF9vcHRpb25zKTtcblxubGV0IG9sZEJlZm9yZURpZmYgPSBvcHRpb25zLl9kaWZmO1xubGV0IG9sZEJlZm9yZVJlbmRlciA9IG9wdGlvbnMuX3JlbmRlcjtcbmxldCBvbGRBZnRlckRpZmYgPSBvcHRpb25zLmRpZmZlZDtcbmxldCBvbGRDb21taXQgPSBvcHRpb25zLl9jb21taXQ7XG5sZXQgb2xkQmVmb3JlVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcbmxldCBvbGRSb290ID0gb3B0aW9ucy5fcm9vdDtcblxuY29uc3QgUkFGX1RJTUVPVVQgPSAxMDA7XG5sZXQgcHJldlJhZjtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fZGlmZiA9IHZub2RlID0+IHtcblx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG5cdGlmIChvbGRCZWZvcmVEaWZmKSBvbGRCZWZvcmVEaWZmKHZub2RlKTtcbn07XG5cbm9wdGlvbnMuX3Jvb3QgPSAodm5vZGUsIHBhcmVudERvbSkgPT4ge1xuXHRpZiAodm5vZGUgJiYgcGFyZW50RG9tLl9jaGlsZHJlbiAmJiBwYXJlbnREb20uX2NoaWxkcmVuLl9tYXNrKSB7XG5cdFx0dm5vZGUuX21hc2sgPSBwYXJlbnREb20uX2NoaWxkcmVuLl9tYXNrO1xuXHR9XG5cblx0aWYgKG9sZFJvb3QpIG9sZFJvb3Qodm5vZGUsIHBhcmVudERvbSk7XG59O1xuXG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUpID0+IHZvaWR9ICovXG5vcHRpb25zLl9yZW5kZXIgPSB2bm9kZSA9PiB7XG5cdGlmIChvbGRCZWZvcmVSZW5kZXIpIG9sZEJlZm9yZVJlbmRlcih2bm9kZSk7XG5cblx0Y3VycmVudENvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGN1cnJlbnRJbmRleCA9IDA7XG5cblx0Y29uc3QgaG9va3MgPSBjdXJyZW50Q29tcG9uZW50Ll9faG9va3M7XG5cdGlmIChob29rcykge1xuXHRcdGlmIChwcmV2aW91c0NvbXBvbmVudCA9PT0gY3VycmVudENvbXBvbmVudCkge1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzID0gW107XG5cdFx0XHRjdXJyZW50Q29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdGhvb2tzLl9saXN0LmZvckVhY2goaG9va0l0ZW0gPT4ge1xuXHRcdFx0XHRpZiAoaG9va0l0ZW0uX25leHRWYWx1ZSkge1xuXHRcdFx0XHRcdGhvb2tJdGVtLl92YWx1ZSA9IGhvb2tJdGVtLl9uZXh0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aG9va0l0ZW0uX3BlbmRpbmdWYWx1ZSA9IEVNUFRZO1xuXHRcdFx0XHRob29rSXRlbS5fbmV4dFZhbHVlID0gaG9va0l0ZW0uX3BlbmRpbmdBcmdzID0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUNsZWFudXApO1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzLmZvckVhY2goaW52b2tlRWZmZWN0KTtcblx0XHRcdGhvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdFx0Y3VycmVudEluZGV4ID0gMDtcblx0XHR9XG5cdH1cblx0cHJldmlvdXNDb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50O1xufTtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy5kaWZmZWQgPSB2bm9kZSA9PiB7XG5cdGlmIChvbGRBZnRlckRpZmYpIG9sZEFmdGVyRGlmZih2bm9kZSk7XG5cblx0Y29uc3QgYyA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjICYmIGMuX19ob29rcykge1xuXHRcdGlmIChjLl9faG9va3MuX3BlbmRpbmdFZmZlY3RzLmxlbmd0aCkgYWZ0ZXJQYWludChhZnRlclBhaW50RWZmZWN0cy5wdXNoKGMpKTtcblx0XHRjLl9faG9va3MuX2xpc3QuZm9yRWFjaChob29rSXRlbSA9PiB7XG5cdFx0XHRpZiAoaG9va0l0ZW0uX3BlbmRpbmdBcmdzKSB7XG5cdFx0XHRcdGhvb2tJdGVtLl9hcmdzID0gaG9va0l0ZW0uX3BlbmRpbmdBcmdzO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGhvb2tJdGVtLl9wZW5kaW5nVmFsdWUgIT09IEVNUFRZKSB7XG5cdFx0XHRcdGhvb2tJdGVtLl92YWx1ZSA9IGhvb2tJdGVtLl9wZW5kaW5nVmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRob29rSXRlbS5fcGVuZGluZ0FyZ3MgPSB1bmRlZmluZWQ7XG5cdFx0XHRob29rSXRlbS5fcGVuZGluZ1ZhbHVlID0gRU1QVFk7XG5cdFx0fSk7XG5cdH1cblx0cHJldmlvdXNDb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcbn07XG5cbi8vIFRPRE86IEltcHJvdmUgdHlwaW5nIG9mIGNvbW1pdFF1ZXVlIHBhcmFtZXRlclxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlLCBjb21taXRRdWV1ZTogYW55KSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fY29tbWl0ID0gKHZub2RlLCBjb21taXRRdWV1ZSkgPT4ge1xuXHRjb21taXRRdWV1ZS5zb21lKGNvbXBvbmVudCA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmZvckVhY2goaW52b2tlQ2xlYW51cCk7XG5cdFx0XHRjb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcyA9IGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmZpbHRlcihjYiA9PlxuXHRcdFx0XHRjYi5fdmFsdWUgPyBpbnZva2VFZmZlY3QoY2IpIDogdHJ1ZVxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb21taXRRdWV1ZS5zb21lKGMgPT4ge1xuXHRcdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzKSBjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdH0pO1xuXHRcdFx0Y29tbWl0UXVldWUgPSBbXTtcblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgY29tcG9uZW50Ll92bm9kZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRpZiAob2xkQ29tbWl0KSBvbGRDb21taXQodm5vZGUsIGNvbW1pdFF1ZXVlKTtcbn07XG5cbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMudW5tb3VudCA9IHZub2RlID0+IHtcblx0aWYgKG9sZEJlZm9yZVVubW91bnQpIG9sZEJlZm9yZVVubW91bnQodm5vZGUpO1xuXG5cdGNvbnN0IGMgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRpZiAoYyAmJiBjLl9faG9va3MpIHtcblx0XHRsZXQgaGFzRXJyb3JlZDtcblx0XHRjLl9faG9va3MuX2xpc3QuZm9yRWFjaChzID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGludm9rZUNsZWFudXAocyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGhhc0Vycm9yZWQgPSBlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGMuX19ob29rcyA9IHVuZGVmaW5lZDtcblx0XHRpZiAoaGFzRXJyb3JlZCkgb3B0aW9ucy5fY2F0Y2hFcnJvcihoYXNFcnJvcmVkLCBjLl92bm9kZSk7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0IGEgaG9vaydzIHN0YXRlIGZyb20gdGhlIGN1cnJlbnRDb21wb25lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGhvb2sgdG8gZ2V0XG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZSBUaGUgaW5kZXggb2YgdGhlIGhvb2sgdG8gZ2V0XG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBnZXRIb29rU3RhdGUoaW5kZXgsIHR5cGUpIHtcblx0aWYgKG9wdGlvbnMuX2hvb2spIHtcblx0XHRvcHRpb25zLl9ob29rKGN1cnJlbnRDb21wb25lbnQsIGluZGV4LCBjdXJyZW50SG9vayB8fCB0eXBlKTtcblx0fVxuXHRjdXJyZW50SG9vayA9IDA7XG5cblx0Ly8gTGFyZ2VseSBpbnNwaXJlZCBieTpcblx0Ly8gKiBodHRwczovL2dpdGh1Yi5jb20vbWljaGFlbC1rbGVpbi9mdW5jeS5qcy9ibG9iL2Y2YmU3MzQ2OGU2ZWM0NmIwZmY1YWEzY2M0YzliYWY3MmEyOTAyNWEvc3JjL2hvb2tzL2NvcmVfaG9va3MubWpzXG5cdC8vICogaHR0cHM6Ly9naXRodWIuY29tL21pY2hhZWwta2xlaW4vZnVuY3kuanMvYmxvYi82NTBiZWFhNThjNDNjMzNhNzQ4MjBhM2M5OGIzYzcwNzljZjJlMzMzL3NyYy9yZW5kZXJlci5tanNcblx0Ly8gT3RoZXIgaW1wbGVtZW50YXRpb25zIHRvIGxvb2sgYXQ6XG5cdC8vICogaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL21ub3gwNXFwOFxuXHRjb25zdCBob29rcyA9XG5cdFx0Y3VycmVudENvbXBvbmVudC5fX2hvb2tzIHx8XG5cdFx0KGN1cnJlbnRDb21wb25lbnQuX19ob29rcyA9IHtcblx0XHRcdF9saXN0OiBbXSxcblx0XHRcdF9wZW5kaW5nRWZmZWN0czogW11cblx0XHR9KTtcblxuXHRpZiAoaW5kZXggPj0gaG9va3MuX2xpc3QubGVuZ3RoKSB7XG5cdFx0aG9va3MuX2xpc3QucHVzaCh7IF9wZW5kaW5nVmFsdWU6IEVNUFRZIH0pO1xuXHR9XG5cblx0cmV0dXJuIGhvb2tzLl9saXN0W2luZGV4XTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuRGlzcGF0Y2g8aW1wb3J0KCcuL2luZGV4JykuU3RhdGVVcGRhdGVyPFM+Pn0gW2luaXRpYWxTdGF0ZV1cbiAqIEByZXR1cm5zIHtbUywgKHN0YXRlOiBTKSA9PiB2b2lkXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuXHRjdXJyZW50SG9vayA9IDE7XG5cdHJldHVybiB1c2VSZWR1Y2VyKGludm9rZU9yUmV0dXJuLCBpbml0aWFsU3RhdGUpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gU1xuICogQHRlbXBsYXRlIHt1bmtub3dufSBBXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLlJlZHVjZXI8UywgQT59IHJlZHVjZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuRGlzcGF0Y2g8aW1wb3J0KCcuL2luZGV4JykuU3RhdGVVcGRhdGVyPFM+Pn0gaW5pdGlhbFN0YXRlXG4gKiBAcGFyYW0geyhpbml0aWFsU3RhdGU6IGFueSkgPT4gdm9pZH0gW2luaXRdXG4gKiBAcmV0dXJucyB7WyBTLCAoc3RhdGU6IFMpID0+IHZvaWQgXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbFN0YXRlLCBpbml0KSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuUmVkdWNlckhvb2tTdGF0ZX0gKi9cblx0Y29uc3QgaG9va1N0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAyKTtcblx0aG9va1N0YXRlLl9yZWR1Y2VyID0gcmVkdWNlcjtcblx0aWYgKCFob29rU3RhdGUuX2NvbXBvbmVudCkge1xuXHRcdGhvb2tTdGF0ZS5fdmFsdWUgPSBbXG5cdFx0XHQhaW5pdCA/IGludm9rZU9yUmV0dXJuKHVuZGVmaW5lZCwgaW5pdGlhbFN0YXRlKSA6IGluaXQoaW5pdGlhbFN0YXRlKSxcblxuXHRcdFx0YWN0aW9uID0+IHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gaG9va1N0YXRlLl9uZXh0VmFsdWVcblx0XHRcdFx0XHQ/IGhvb2tTdGF0ZS5fbmV4dFZhbHVlWzBdXG5cdFx0XHRcdFx0OiBob29rU3RhdGUuX3ZhbHVlWzBdO1xuXHRcdFx0XHRjb25zdCBuZXh0VmFsdWUgPSBob29rU3RhdGUuX3JlZHVjZXIoY3VycmVudFZhbHVlLCBhY3Rpb24pO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgIT09IG5leHRWYWx1ZSkge1xuXHRcdFx0XHRcdGhvb2tTdGF0ZS5fbmV4dFZhbHVlID0gW25leHRWYWx1ZSwgaG9va1N0YXRlLl92YWx1ZVsxXV07XG5cdFx0XHRcdFx0aG9va1N0YXRlLl9jb21wb25lbnQuc2V0U3RhdGUoe30pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XTtcblxuXHRcdGhvb2tTdGF0ZS5fY29tcG9uZW50ID0gY3VycmVudENvbXBvbmVudDtcblxuXHRcdGlmICghY3VycmVudENvbXBvbmVudC5faGFzU2N1RnJvbUhvb2tzKSB7XG5cdFx0XHRjdXJyZW50Q29tcG9uZW50Ll9oYXNTY3VGcm9tSG9va3MgPSB0cnVlO1xuXHRcdFx0bGV0IHByZXZTY3UgPSBjdXJyZW50Q29tcG9uZW50LnNob3VsZENvbXBvbmVudFVwZGF0ZTtcblx0XHRcdGNvbnN0IHByZXZDV1UgPSBjdXJyZW50Q29tcG9uZW50LmNvbXBvbmVudFdpbGxVcGRhdGU7XG5cblx0XHRcdC8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZvcmNlZCB1cGRhdGUgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAgd2lsbFxuXHRcdFx0Ly8gbm90IGJlIGNhbGxlZC4gQnV0IHdlIHVzZSB0aGF0IHRvIHVwZGF0ZSB0aGUgaG9vayB2YWx1ZXMsIHNvIHdlXG5cdFx0XHQvLyBuZWVkIHRvIGNhbGwgaXQuXG5cdFx0XHRjdXJyZW50Q29tcG9uZW50LmNvbXBvbmVudFdpbGxVcGRhdGUgPSBmdW5jdGlvbiAocCwgcywgYykge1xuXHRcdFx0XHRpZiAodGhpcy5fZm9yY2UpIHtcblx0XHRcdFx0XHRsZXQgdG1wID0gcHJldlNjdTtcblx0XHRcdFx0XHQvLyBDbGVhciB0byBhdm9pZCBvdGhlciBzQ1UgaG9va3MgZnJvbSBiZWluZyBjYWxsZWRcblx0XHRcdFx0XHRwcmV2U2N1ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdHVwZGF0ZUhvb2tTdGF0ZShwLCBzLCBjKTtcblx0XHRcdFx0XHRwcmV2U2N1ID0gdG1wO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHByZXZDV1UpIHByZXZDV1UuY2FsbCh0aGlzLCBwLCBzLCBjKTtcblx0XHRcdH07XG5cblx0XHRcdC8vIFRoaXMgU0NVIGhhcyB0aGUgcHVycG9zZSBvZiBiYWlsaW5nIG91dCBhZnRlciByZXBlYXRlZCB1cGRhdGVzXG5cdFx0XHQvLyB0byBzdGF0ZWZ1bCBob29rcy5cblx0XHRcdC8vIHdlIHN0b3JlIHRoZSBuZXh0IHZhbHVlIGluIF9uZXh0VmFsdWVbMF0gYW5kIGtlZXAgZG9pbmcgdGhhdCBmb3IgYWxsXG5cdFx0XHQvLyBzdGF0ZSBzZXR0ZXJzLCBpZiB3ZSBoYXZlIG5leHQgc3RhdGVzIGFuZFxuXHRcdFx0Ly8gYWxsIG5leHQgc3RhdGVzIHdpdGhpbiBhIGNvbXBvbmVudCBlbmQgdXAgYmVpbmcgZXF1YWwgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGVcblx0XHRcdC8vIHdlIGFyZSBzYWZlIHRvIGJhaWwgb3V0IGZvciB0aGlzIHNwZWNpZmljIGNvbXBvbmVudC5cblx0XHRcdC8qKlxuXHRcdFx0ICpcblx0XHRcdCAqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnRbXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIl19XG5cdFx0XHQgKi9cblx0XHRcdC8vIEB0cy1pZ25vcmUgLSBXZSBkb24ndCB1c2UgVFMgdG8gZG93bnRyYW5zcGlsZVxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWlubmVyLWRlY2xhcmF0aW9uc1xuXHRcdFx0ZnVuY3Rpb24gdXBkYXRlSG9va1N0YXRlKHAsIHMsIGMpIHtcblx0XHRcdFx0aWYgKCFob29rU3RhdGUuX2NvbXBvbmVudC5fX2hvb2tzKSByZXR1cm4gdHJ1ZTtcblxuXHRcdFx0XHQvKiogQHR5cGUgeyh4OiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5Ib29rU3RhdGUpID0+IHggaXMgaW1wb3J0KCcuL2ludGVybmFsJykuUmVkdWNlckhvb2tTdGF0ZX0gKi9cblx0XHRcdFx0Y29uc3QgaXNTdGF0ZUhvb2sgPSB4ID0+ICEheC5fY29tcG9uZW50O1xuXHRcdFx0XHRjb25zdCBzdGF0ZUhvb2tzID1cblx0XHRcdFx0XHRob29rU3RhdGUuX2NvbXBvbmVudC5fX2hvb2tzLl9saXN0LmZpbHRlcihpc1N0YXRlSG9vayk7XG5cblx0XHRcdFx0Y29uc3QgYWxsSG9va3NFbXB0eSA9IHN0YXRlSG9va3MuZXZlcnkoeCA9PiAheC5fbmV4dFZhbHVlKTtcblx0XHRcdFx0Ly8gV2hlbiB3ZSBoYXZlIG5vIHVwZGF0ZWQgaG9va3MgaW4gdGhlIGNvbXBvbmVudCB3ZSBpbnZva2UgdGhlIHByZXZpb3VzIFNDVSBvclxuXHRcdFx0XHQvLyB0cmF2ZXJzZSB0aGUgVkRPTSB0cmVlIGZ1cnRoZXIuXG5cdFx0XHRcdGlmIChhbGxIb29rc0VtcHR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByZXZTY3UgPyBwcmV2U2N1LmNhbGwodGhpcywgcCwgcywgYykgOiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgY2hlY2sgd2hldGhlciB3ZSBoYXZlIGNvbXBvbmVudHMgd2l0aCBhIG5leHRWYWx1ZSBzZXQgdGhhdFxuXHRcdFx0XHQvLyBoYXZlIHZhbHVlcyB0aGF0IGFyZW4ndCBlcXVhbCB0byBvbmUgYW5vdGhlciB0aGlzIHB1c2hlc1xuXHRcdFx0XHQvLyB1cyB0byB1cGRhdGUgZnVydGhlciBkb3duIHRoZSB0cmVlXG5cdFx0XHRcdGxldCBzaG91bGRVcGRhdGUgPSBmYWxzZTtcblx0XHRcdFx0c3RhdGVIb29rcy5mb3JFYWNoKGhvb2tJdGVtID0+IHtcblx0XHRcdFx0XHRpZiAoaG9va0l0ZW0uX25leHRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gaG9va0l0ZW0uX3ZhbHVlWzBdO1xuXHRcdFx0XHRcdFx0aG9va0l0ZW0uX3ZhbHVlID0gaG9va0l0ZW0uX25leHRWYWx1ZTtcblx0XHRcdFx0XHRcdGhvb2tJdGVtLl9uZXh0VmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudFZhbHVlICE9PSBob29rSXRlbS5fdmFsdWVbMF0pIHNob3VsZFVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gc2hvdWxkVXBkYXRlIHx8IGhvb2tTdGF0ZS5fY29tcG9uZW50LnByb3BzICE9PSBwXG5cdFx0XHRcdFx0PyBwcmV2U2N1XG5cdFx0XHRcdFx0XHQ/IHByZXZTY3UuY2FsbCh0aGlzLCBwLCBzLCBjKVxuXHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0OiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudENvbXBvbmVudC5zaG91bGRDb21wb25lbnRVcGRhdGUgPSB1cGRhdGVIb29rU3RhdGU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGhvb2tTdGF0ZS5fbmV4dFZhbHVlIHx8IGhvb2tTdGF0ZS5fdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3R9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VFZmZlY3QoY2FsbGJhY2ssIGFyZ3MpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAzKTtcblx0aWYgKCFvcHRpb25zLl9za2lwRWZmZWN0cyAmJiBhcmdzQ2hhbmdlZChzdGF0ZS5fYXJncywgYXJncykpIHtcblx0XHRzdGF0ZS5fdmFsdWUgPSBjYWxsYmFjaztcblx0XHRzdGF0ZS5fcGVuZGluZ0FyZ3MgPSBhcmdzO1xuXG5cdFx0Y3VycmVudENvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5wdXNoKHN0YXRlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuRWZmZWN0fSBjYWxsYmFja1xuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNhbGxiYWNrLCBhcmdzKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuRWZmZWN0SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgNCk7XG5cdGlmICghb3B0aW9ucy5fc2tpcEVmZmVjdHMgJiYgYXJnc0NoYW5nZWQoc3RhdGUuX2FyZ3MsIGFyZ3MpKSB7XG5cdFx0c3RhdGUuX3ZhbHVlID0gY2FsbGJhY2s7XG5cdFx0c3RhdGUuX3BlbmRpbmdBcmdzID0gYXJncztcblxuXHRcdGN1cnJlbnRDb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcy5wdXNoKHN0YXRlKTtcblx0fVxufVxuXG4vKiogQHR5cGUgeyhpbml0aWFsVmFsdWU6IHVua25vd24pID0+IHVua25vd259ICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuXHRjdXJyZW50SG9vayA9IDU7XG5cdHJldHVybiB1c2VNZW1vKCgpID0+ICh7IGN1cnJlbnQ6IGluaXRpYWxWYWx1ZSB9KSwgW10pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7KCkgPT4gb2JqZWN0fSBjcmVhdGVIYW5kbGVcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBhcmdzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGVIYW5kbGUsIGFyZ3MpIHtcblx0Y3VycmVudEhvb2sgPSA2O1xuXHR1c2VMYXlvdXRFZmZlY3QoXG5cdFx0KCkgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiByZWYgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRyZWYoY3JlYXRlSGFuZGxlKCkpO1xuXHRcdFx0XHRyZXR1cm4gKCkgPT4gcmVmKG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChyZWYpIHtcblx0XHRcdFx0cmVmLmN1cnJlbnQgPSBjcmVhdGVIYW5kbGUoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IChyZWYuY3VycmVudCA9IG51bGwpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YXJncyA9PSBudWxsID8gYXJncyA6IGFyZ3MuY29uY2F0KHJlZilcblx0KTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFRcbiAqIEBwYXJhbSB7KCkgPT4gVH0gZmFjdG9yeVxuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHtUfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTWVtbyhmYWN0b3J5LCBhcmdzKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuTWVtb0hvb2tTdGF0ZTxUPn0gKi9cblx0Y29uc3Qgc3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDcpO1xuXHRpZiAoYXJnc0NoYW5nZWQoc3RhdGUuX2FyZ3MsIGFyZ3MpKSB7XG5cdFx0c3RhdGUuX3BlbmRpbmdWYWx1ZSA9IGZhY3RvcnkoKTtcblx0XHRzdGF0ZS5fcGVuZGluZ0FyZ3MgPSBhcmdzO1xuXHRcdHN0YXRlLl9mYWN0b3J5ID0gZmFjdG9yeTtcblx0XHRyZXR1cm4gc3RhdGUuX3BlbmRpbmdWYWx1ZTtcblx0fVxuXG5cdHJldHVybiBzdGF0ZS5fdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGFyZ3MpIHtcblx0Y3VycmVudEhvb2sgPSA4O1xuXHRyZXR1cm4gdXNlTWVtbygoKSA9PiBjYWxsYmFjaywgYXJncyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RDb250ZXh0fSBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb250ZXh0KGNvbnRleHQpIHtcblx0Y29uc3QgcHJvdmlkZXIgPSBjdXJyZW50Q29tcG9uZW50LmNvbnRleHRbY29udGV4dC5faWRdO1xuXHQvLyBXZSBjb3VsZCBza2lwIHRoaXMgY2FsbCBoZXJlLCBidXQgdGhhbiB3ZSdkIG5vdCBjYWxsXG5cdC8vIGBvcHRpb25zLl9ob29rYC4gV2UgbmVlZCB0byBkbyB0aGF0IGluIG9yZGVyIHRvIG1ha2Vcblx0Ly8gdGhlIGRldnRvb2xzIGF3YXJlIG9mIHRoaXMgaG9vay5cblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db250ZXh0SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgOSk7XG5cdC8vIFRoZSBkZXZ0b29scyBuZWVkcyBhY2Nlc3MgdG8gdGhlIGNvbnRleHQgb2JqZWN0IHRvXG5cdC8vIGJlIGFibGUgdG8gcHVsbCBvZiB0aGUgZGVmYXVsdCB2YWx1ZSB3aGVuIG5vIHByb3ZpZGVyXG5cdC8vIGlzIHByZXNlbnQgaW4gdGhlIHRyZWUuXG5cdHN0YXRlLl9jb250ZXh0ID0gY29udGV4dDtcblx0aWYgKCFwcm92aWRlcikgcmV0dXJuIGNvbnRleHQuX2RlZmF1bHRWYWx1ZTtcblx0Ly8gVGhpcyBpcyBwcm9iYWJseSBub3Qgc2FmZSB0byBjb252ZXJ0IHRvIFwiIVwiXG5cdGlmIChzdGF0ZS5fdmFsdWUgPT0gbnVsbCkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IHRydWU7XG5cdFx0cHJvdmlkZXIuc3ViKGN1cnJlbnRDb21wb25lbnQpO1xuXHR9XG5cdHJldHVybiBwcm92aWRlci5wcm9wcy52YWx1ZTtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGEgY3VzdG9tIGxhYmVsIGZvciBhIGN1c3RvbSBob29rIGZvciB0aGUgZGV2dG9vbHMgcGFuZWxcbiAqIEB0eXBlIHs8VD4odmFsdWU6IFQsIGNiPzogKHZhbHVlOiBUKSA9PiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXIpIHtcblx0aWYgKG9wdGlvbnMudXNlRGVidWdWYWx1ZSkge1xuXHRcdG9wdGlvbnMudXNlRGVidWdWYWx1ZShcblx0XHRcdGZvcm1hdHRlciA/IGZvcm1hdHRlcih2YWx1ZSkgOiAvKiogQHR5cGUge2FueX0qLyAodmFsdWUpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7KGVycm9yOiB1bmtub3duLCBlcnJvckluZm86IGltcG9ydCgncHJlYWN0JykuRXJyb3JJbmZvKSA9PiB2b2lkfSBjYlxuICogQHJldHVybnMge1t1bmtub3duLCAoKSA9PiB2b2lkXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUVycm9yQm91bmRhcnkoY2IpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FcnJvckJvdW5kYXJ5SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMTApO1xuXHRjb25zdCBlcnJTdGF0ZSA9IHVzZVN0YXRlKCk7XG5cdHN0YXRlLl92YWx1ZSA9IGNiO1xuXHRpZiAoIWN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2gpIHtcblx0XHRjdXJyZW50Q29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoID0gKGVyciwgZXJyb3JJbmZvKSA9PiB7XG5cdFx0XHRpZiAoc3RhdGUuX3ZhbHVlKSBzdGF0ZS5fdmFsdWUoZXJyLCBlcnJvckluZm8pO1xuXHRcdFx0ZXJyU3RhdGVbMV0oZXJyKTtcblx0XHR9O1xuXHR9XG5cdHJldHVybiBbXG5cdFx0ZXJyU3RhdGVbMF0sXG5cdFx0KCkgPT4ge1xuXHRcdFx0ZXJyU3RhdGVbMV0odW5kZWZpbmVkKTtcblx0XHR9XG5cdF07XG59XG5cbi8qKiBAdHlwZSB7KCkgPT4gc3RyaW5nfSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKCkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLklkSG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMTEpO1xuXHRpZiAoIXN0YXRlLl92YWx1ZSkge1xuXHRcdC8vIEdyYWIgZWl0aGVyIHRoZSByb290IG5vZGUgb3IgdGhlIG5lYXJlc3QgYXN5bmMgYm91bmRhcnkgbm9kZS5cblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbC5kJykuVk5vZGV9ICovXG5cdFx0bGV0IHJvb3QgPSBjdXJyZW50Q29tcG9uZW50Ll92bm9kZTtcblx0XHR3aGlsZSAocm9vdCAhPT0gbnVsbCAmJiAhcm9vdC5fbWFzayAmJiByb290Ll9wYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdHJvb3QgPSByb290Ll9wYXJlbnQ7XG5cdFx0fVxuXG5cdFx0bGV0IG1hc2sgPSByb290Ll9tYXNrIHx8IChyb290Ll9tYXNrID0gWzAsIDBdKTtcblx0XHRzdGF0ZS5fdmFsdWUgPSAnUCcgKyBtYXNrWzBdICsgJy0nICsgbWFza1sxXSsrO1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBBZnRlciBwYWludCBlZmZlY3RzIGNvbnN1bWVyLlxuICovXG5mdW5jdGlvbiBmbHVzaEFmdGVyUGFpbnRFZmZlY3RzKCkge1xuXHRsZXQgY29tcG9uZW50O1xuXHR3aGlsZSAoKGNvbXBvbmVudCA9IGFmdGVyUGFpbnRFZmZlY3RzLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKCFjb21wb25lbnQuX3BhcmVudERvbSB8fCAhY29tcG9uZW50Ll9faG9va3MpIGNvbnRpbnVlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUVmZmVjdCk7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgY29tcG9uZW50Ll92bm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmxldCBIQVNfUkFGID0gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PSAnZnVuY3Rpb24nO1xuXG4vKipcbiAqIFNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgYnJvd3NlciBoYXMgYSBjaGFuY2UgdG8gcGFpbnQgYSBuZXcgZnJhbWUuXG4gKiBEbyB0aGlzIGJ5IGNvbWJpbmluZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKHJBRikgKyBzZXRUaW1lb3V0IHRvIGludm9rZSBhIGNhbGxiYWNrIGFmdGVyXG4gKiB0aGUgbmV4dCBicm93c2VyIGZyYW1lLlxuICpcbiAqIEFsc28sIHNjaGVkdWxlIGEgdGltZW91dCBpbiBwYXJhbGxlbCB0byB0aGUgdGhlIHJBRiB0byBlbnN1cmUgdGhlIGNhbGxiYWNrIGlzIGludm9rZWRcbiAqIGV2ZW4gaWYgUkFGIGRvZXNuJ3QgZmlyZSAoZm9yIGV4YW1wbGUgaWYgdGhlIGJyb3dzZXIgdGFiIGlzIG5vdCB2aXNpYmxlKVxuICpcbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYWZ0ZXJOZXh0RnJhbWUoY2FsbGJhY2spIHtcblx0Y29uc3QgZG9uZSA9ICgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0aWYgKEhBU19SQUYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7XG5cdFx0c2V0VGltZW91dChjYWxsYmFjayk7XG5cdH07XG5cdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGRvbmUsIFJBRl9USU1FT1VUKTtcblxuXHRsZXQgcmFmO1xuXHRpZiAoSEFTX1JBRikge1xuXHRcdHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkb25lKTtcblx0fVxufVxuXG4vLyBOb3RlOiBpZiBzb21lb25lIHVzZWQgb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZyA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSxcbi8vIHRoZW4gZWZmZWN0cyB3aWxsIEFMV0FZUyBydW4gb24gdGhlIE5FWFQgZnJhbWUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBvbmUsIGluY3VycmluZyBhIH4xNm1zIGRlbGF5LlxuLy8gUGVyaGFwcyB0aGlzIGlzIG5vdCBzdWNoIGEgYmlnIGRlYWwuXG4vKipcbiAqIFNjaGVkdWxlIGFmdGVyUGFpbnRFZmZlY3RzIGZsdXNoIGFmdGVyIHRoZSBicm93c2VyIHBhaW50c1xuICogQHBhcmFtIHtudW1iZXJ9IG5ld1F1ZXVlTGVuZ3RoXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWZ0ZXJQYWludChuZXdRdWV1ZUxlbmd0aCkge1xuXHRpZiAobmV3UXVldWVMZW5ndGggPT09IDEgfHwgcHJldlJhZiAhPT0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcblx0XHRwcmV2UmFmID0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdFx0KHByZXZSYWYgfHwgYWZ0ZXJOZXh0RnJhbWUpKGZsdXNoQWZ0ZXJQYWludEVmZmVjdHMpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Ib29rU3RhdGV9IGhvb2tcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBpbnZva2VDbGVhbnVwKGhvb2spIHtcblx0Ly8gQSBob29rIGNsZWFudXAgY2FuIGludHJvZHVjZSBhIGNhbGwgdG8gcmVuZGVyIHdoaWNoIGNyZWF0ZXMgYSBuZXcgcm9vdCwgdGhpcyB3aWxsIGNhbGwgb3B0aW9ucy52bm9kZVxuXHQvLyBhbmQgbW92ZSB0aGUgY3VycmVudENvbXBvbmVudCBhd2F5LlxuXHRjb25zdCBjb21wID0gY3VycmVudENvbXBvbmVudDtcblx0bGV0IGNsZWFudXAgPSBob29rLl9jbGVhbnVwO1xuXHRpZiAodHlwZW9mIGNsZWFudXAgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdGhvb2suX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cdFx0Y2xlYW51cCgpO1xuXHR9XG5cblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogSW52b2tlIGEgSG9vaydzIGVmZmVjdFxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9IGhvb2tcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBpbnZva2VFZmZlY3QoaG9vaykge1xuXHQvLyBBIGhvb2sgY2FsbCBjYW4gaW50cm9kdWNlIGEgY2FsbCB0byByZW5kZXIgd2hpY2ggY3JlYXRlcyBhIG5ldyByb290LCB0aGlzIHdpbGwgY2FsbCBvcHRpb25zLnZub2RlXG5cdC8vIGFuZCBtb3ZlIHRoZSBjdXJyZW50Q29tcG9uZW50IGF3YXkuXG5cdGNvbnN0IGNvbXAgPSBjdXJyZW50Q29tcG9uZW50O1xuXHRob29rLl9jbGVhbnVwID0gaG9vay5fdmFsdWUoKTtcblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3duW119IG9sZEFyZ3NcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBuZXdBcmdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gYXJnc0NoYW5nZWQob2xkQXJncywgbmV3QXJncykge1xuXHRyZXR1cm4gKFxuXHRcdCFvbGRBcmdzIHx8XG5cdFx0b2xkQXJncy5sZW5ndGggIT09IG5ld0FyZ3MubGVuZ3RoIHx8XG5cdFx0bmV3QXJncy5zb21lKChhcmcsIGluZGV4KSA9PiBhcmcgIT09IG9sZEFyZ3NbaW5kZXhdKVxuXHQpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBBcmdcbiAqIEBwYXJhbSB7QXJnfSBhcmdcbiAqIEBwYXJhbSB7KGFyZzogQXJnKSA9PiBhbnl9IGZcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGludm9rZU9yUmV0dXJuKGFyZywgZikge1xuXHRyZXR1cm4gdHlwZW9mIGYgPT0gJ2Z1bmN0aW9uJyA/IGYoYXJnKSA6IGY7XG59XG4iLCAiLyoqXG4gKiBBc3NpZ24gcHJvcGVydGllcyBmcm9tIGBwcm9wc2AgdG8gYG9iamBcbiAqIEB0ZW1wbGF0ZSBPLCBQIFRoZSBvYmogYW5kIHByb3BzIHR5cGVzXG4gKiBAcGFyYW0ge099IG9iaiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0b1xuICogQHBhcmFtIHtQfSBwcm9wcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJucyB7TyAmIFB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqLCBwcm9wcykge1xuXHRmb3IgKGxldCBpIGluIHByb3BzKSBvYmpbaV0gPSBwcm9wc1tpXTtcblx0cmV0dXJuIC8qKiBAdHlwZSB7TyAmIFB9ICovIChvYmopO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byBvYmplY3RzIGhhdmUgYSBkaWZmZXJlbnQgc2hhcGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBhXG4gKiBAcGFyYW0ge29iamVjdH0gYlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhhLCBiKSB7XG5cdGZvciAobGV0IGkgaW4gYSkgaWYgKGkgIT09ICdfX3NvdXJjZScgJiYgIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChsZXQgaSBpbiBiKSBpZiAoaSAhPT0gJ19fc291cmNlJyAmJiBhW2ldICE9PSBiW2ldKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlXG4gKiBAcGFyYW0geyp9IHhcbiAqIEBwYXJhbSB7Kn0geVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4LCB5KSB7XG5cdHJldHVybiAoeCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpKSB8fCAoeCAhPT0geCAmJiB5ICE9PSB5KTtcbn1cbiIsICJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENvbXBvbmVudCBjbGFzcyB3aXRoIGEgcHJlZGVmaW5lZCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwLCBjKSB7XG5cdHRoaXMucHJvcHMgPSBwO1xuXHR0aGlzLmNvbnRleHQgPSBjO1xufVxuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG4vLyBTb21lIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBjaGVjayBpZiB0aGlzIHByb3BlcnR5IGlzIHByZXNlbnRcblB1cmVDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChwcm9wcywgc3RhdGUpIHtcblx0cmV0dXJuIHNoYWxsb3dEaWZmZXJzKHRoaXMucHJvcHMsIHByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBzdGF0ZSk7XG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIE1lbW9pemUgYSBjb21wb25lbnQsIHNvIHRoYXQgaXQgb25seSB1cGRhdGVzIHdoZW4gdGhlIHByb3BzIGFjdHVhbGx5IGhhdmVcbiAqIGNoYW5nZWQuIFRoaXMgd2FzIHByZXZpb3VzbHkga25vd24gYXMgYFJlYWN0LnB1cmVgLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH0gYyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICogQHBhcmFtIHsocHJldjogb2JqZWN0LCBuZXh0OiBvYmplY3QpID0+IGJvb2xlYW59IFtjb21wYXJlcl0gQ3VzdG9tIGVxdWFsaXR5IGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuRnVuY3Rpb25Db21wb25lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1vKGMsIGNvbXBhcmVyKSB7XG5cdGZ1bmN0aW9uIHNob3VsZFVwZGF0ZShuZXh0UHJvcHMpIHtcblx0XHRsZXQgcmVmID0gdGhpcy5wcm9wcy5yZWY7XG5cdFx0bGV0IHVwZGF0ZVJlZiA9IHJlZiA9PSBuZXh0UHJvcHMucmVmO1xuXHRcdGlmICghdXBkYXRlUmVmICYmIHJlZikge1xuXHRcdFx0cmVmLmNhbGwgPyByZWYobnVsbCkgOiAocmVmLmN1cnJlbnQgPSBudWxsKTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbXBhcmVyKSB7XG5cdFx0XHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgbmV4dFByb3BzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gIWNvbXBhcmVyKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgIXVwZGF0ZVJlZjtcblx0fVxuXG5cdGZ1bmN0aW9uIE1lbW9lZChwcm9wcykge1xuXHRcdHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gc2hvdWxkVXBkYXRlO1xuXHRcdHJldHVybiBjcmVhdGVFbGVtZW50KGMsIHByb3BzKTtcblx0fVxuXHRNZW1vZWQuZGlzcGxheU5hbWUgPSAnTWVtbygnICsgKGMuZGlzcGxheU5hbWUgfHwgYy5uYW1lKSArICcpJztcblx0TWVtb2VkLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblx0TWVtb2VkLl9mb3J3YXJkZWQgPSB0cnVlO1xuXHRyZXR1cm4gTWVtb2VkO1xufVxuIiwgImltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnLi91dGlsJztcblxubGV0IG9sZERpZmZIb29rID0gb3B0aW9ucy5fZGlmZjtcbm9wdGlvbnMuX2RpZmYgPSB2bm9kZSA9PiB7XG5cdGlmICh2bm9kZS50eXBlICYmIHZub2RlLnR5cGUuX2ZvcndhcmRlZCAmJiB2bm9kZS5yZWYpIHtcblx0XHR2bm9kZS5wcm9wcy5yZWYgPSB2bm9kZS5yZWY7XG5cdFx0dm5vZGUucmVmID0gbnVsbDtcblx0fVxuXHRpZiAob2xkRGlmZkhvb2spIG9sZERpZmZIb29rKHZub2RlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBSRUFDVF9GT1JXQVJEX1NZTUJPTCA9XG5cdCh0eXBlb2YgU3ltYm9sICE9ICd1bmRlZmluZWQnICYmXG5cdFx0U3ltYm9sLmZvciAmJlxuXHRcdFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykpIHx8XG5cdDB4ZjQ3O1xuXG4vKipcbiAqIFBhc3MgcmVmIGRvd24gdG8gYSBjaGlsZC4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbiBsaWJyYXJpZXMgd2l0aCBIT0NzIHRoYXRcbiAqIHdyYXAgY29tcG9uZW50cy4gVXNpbmcgYGZvcndhcmRSZWZgIHRoZXJlIGlzIGFuIGVhc3kgd2F5IHRvIGdldCBhIHJlZmVyZW5jZVxuICogb2YgdGhlIHdyYXBwZWQgY29tcG9uZW50IGluc3RlYWQgb2Ygb25lIG9mIHRoZSB3cmFwcGVyIGl0c2VsZi5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuRm9yd2FyZEZufSBmblxuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkZ1bmN0aW9uQ29tcG9uZW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZFJlZihmbikge1xuXHRmdW5jdGlvbiBGb3J3YXJkZWQocHJvcHMpIHtcblx0XHRsZXQgY2xvbmUgPSBhc3NpZ24oe30sIHByb3BzKTtcblx0XHRkZWxldGUgY2xvbmUucmVmO1xuXHRcdHJldHVybiBmbihjbG9uZSwgcHJvcHMucmVmIHx8IG51bGwpO1xuXHR9XG5cblx0Ly8gbW9ieC1yZWFjdCBjaGVja3MgZm9yIHRoaXMgYmVpbmcgcHJlc2VudFxuXHRGb3J3YXJkZWQuJCR0eXBlb2YgPSBSRUFDVF9GT1JXQVJEX1NZTUJPTDtcblx0Ly8gbW9ieC1yZWFjdCBoZWF2aWx5IHJlbGllcyBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXHQvLyBJdCBleHBlY3RzIGFuIG9iamVjdCBoZXJlIHdpdGggYSBgcmVuZGVyYCBwcm9wZXJ0eSxcblx0Ly8gYW5kIHByb3RvdHlwZS5yZW5kZXIgd2lsbCBmYWlsLiBXaXRob3V0IHRoaXNcblx0Ly8gbW9ieC1yZWFjdCB0aHJvd3MuXG5cdEZvcndhcmRlZC5yZW5kZXIgPSBGb3J3YXJkZWQ7XG5cblx0Rm9yd2FyZGVkLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0gRm9yd2FyZGVkLl9mb3J3YXJkZWQgPSB0cnVlO1xuXHRGb3J3YXJkZWQuZGlzcGxheU5hbWUgPSAnRm9yd2FyZFJlZignICsgKGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUpICsgJyknO1xuXHRyZXR1cm4gRm9yd2FyZGVkO1xufVxuIiwgImltcG9ydCB7IHRvQ2hpbGRBcnJheSB9IGZyb20gJ3ByZWFjdCc7XG5cbmNvbnN0IG1hcEZuID0gKGNoaWxkcmVuLCBmbikgPT4ge1xuXHRpZiAoY2hpbGRyZW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB0b0NoaWxkQXJyYXkodG9DaGlsZEFycmF5KGNoaWxkcmVuKS5tYXAoZm4pKTtcbn07XG5cbi8vIFRoaXMgQVBJIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgZm9yIFByZWFjdCwgc28gaXQncyBiYXNpY2FsbHkgcGFzc3Rocm91Z2guXG5leHBvcnQgY29uc3QgQ2hpbGRyZW4gPSB7XG5cdG1hcDogbWFwRm4sXG5cdGZvckVhY2g6IG1hcEZuLFxuXHRjb3VudChjaGlsZHJlbikge1xuXHRcdHJldHVybiBjaGlsZHJlbiA/IHRvQ2hpbGRBcnJheShjaGlsZHJlbikubGVuZ3RoIDogMDtcblx0fSxcblx0b25seShjaGlsZHJlbikge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSB0b0NoaWxkQXJyYXkoY2hpbGRyZW4pO1xuXHRcdGlmIChub3JtYWxpemVkLmxlbmd0aCAhPT0gMSkgdGhyb3cgJ0NoaWxkcmVuLm9ubHknO1xuXHRcdHJldHVybiBub3JtYWxpemVkWzBdO1xuXHR9LFxuXHR0b0FycmF5OiB0b0NoaWxkQXJyYXlcbn07XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50LCBvcHRpb25zLCBGcmFnbWVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBNT0RFX0hZRFJBVEUgfSBmcm9tICcuLi8uLi9zcmMvY29uc3RhbnRzJztcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG9sZENhdGNoRXJyb3IgPSBvcHRpb25zLl9jYXRjaEVycm9yO1xub3B0aW9ucy5fY2F0Y2hFcnJvciA9IGZ1bmN0aW9uIChlcnJvciwgbmV3Vk5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pIHtcblx0aWYgKGVycm9yLnRoZW4pIHtcblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0XHRsZXQgY29tcG9uZW50O1xuXHRcdGxldCB2bm9kZSA9IG5ld1ZOb2RlO1xuXG5cdFx0Zm9yICg7ICh2bm9kZSA9IHZub2RlLl9wYXJlbnQpOyApIHtcblx0XHRcdGlmICgoY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudCkgJiYgY29tcG9uZW50Ll9jaGlsZERpZFN1c3BlbmQpIHtcblx0XHRcdFx0aWYgKG5ld1ZOb2RlLl9kb20gPT0gbnVsbCkge1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBEb24ndCBjYWxsIG9sZENhdGNoRXJyb3IgaWYgd2UgZm91bmQgYSBTdXNwZW5zZVxuXHRcdFx0XHRyZXR1cm4gY29tcG9uZW50Ll9jaGlsZERpZFN1c3BlbmQoZXJyb3IsIG5ld1ZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0b2xkQ2F0Y2hFcnJvcihlcnJvciwgbmV3Vk5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pO1xufTtcblxuY29uc3Qgb2xkVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcbm9wdGlvbnMudW5tb3VudCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0Y29uc3QgY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudDtcblx0aWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQuX29uUmVzb2x2ZSkge1xuXHRcdGNvbXBvbmVudC5fb25SZXNvbHZlKCk7XG5cdH1cblxuXHQvLyBpZiB0aGUgY29tcG9uZW50IGlzIHN0aWxsIGh5ZHJhdGluZ1xuXHQvLyBtb3N0IGxpa2VseSBpdCBpcyBiZWNhdXNlIHRoZSBjb21wb25lbnQgaXMgc3VzcGVuZGVkXG5cdC8vIHdlIHNldCB0aGUgdm5vZGUudHlwZSBhcyBgbnVsbGAgc28gdGhhdCBpdCBpcyBub3QgYSB0eXBlb2YgZnVuY3Rpb25cblx0Ly8gc28gdGhlIHVubW91bnQgd2lsbCByZW1vdmUgdGhlIHZub2RlLl9kb21cblx0aWYgKGNvbXBvbmVudCAmJiB2bm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpIHtcblx0XHR2bm9kZS50eXBlID0gbnVsbDtcblx0fVxuXG5cdGlmIChvbGRVbm1vdW50KSBvbGRVbm1vdW50KHZub2RlKTtcbn07XG5cbmZ1bmN0aW9uIGRldGFjaGVkQ2xvbmUodm5vZGUsIGRldGFjaGVkUGFyZW50LCBwYXJlbnREb20pIHtcblx0aWYgKHZub2RlKSB7XG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQgJiYgdm5vZGUuX2NvbXBvbmVudC5fX2hvb2tzKSB7XG5cdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9faG9va3MuX2xpc3QuZm9yRWFjaChlZmZlY3QgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIGVmZmVjdC5fY2xlYW51cCA9PSAnZnVuY3Rpb24nKSBlZmZlY3QuX2NsZWFudXAoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9faG9va3MgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZub2RlID0gYXNzaWduKHt9LCB2bm9kZSk7XG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQgIT0gbnVsbCkge1xuXHRcdFx0aWYgKHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9PT0gcGFyZW50RG9tKSB7XG5cdFx0XHRcdHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9IGRldGFjaGVkUGFyZW50O1xuXHRcdFx0fVxuXHRcdFx0dm5vZGUuX2NvbXBvbmVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dm5vZGUuX2NoaWxkcmVuID1cblx0XHRcdHZub2RlLl9jaGlsZHJlbiAmJlxuXHRcdFx0dm5vZGUuX2NoaWxkcmVuLm1hcChjaGlsZCA9PlxuXHRcdFx0XHRkZXRhY2hlZENsb25lKGNoaWxkLCBkZXRhY2hlZFBhcmVudCwgcGFyZW50RG9tKVxuXHRcdFx0KTtcblx0fVxuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlT3JpZ2luYWwodm5vZGUsIGRldGFjaGVkUGFyZW50LCBvcmlnaW5hbFBhcmVudCkge1xuXHRpZiAodm5vZGUgJiYgb3JpZ2luYWxQYXJlbnQpIHtcblx0XHR2bm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdHZub2RlLl9jaGlsZHJlbiA9XG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4gJiZcblx0XHRcdHZub2RlLl9jaGlsZHJlbi5tYXAoY2hpbGQgPT5cblx0XHRcdFx0cmVtb3ZlT3JpZ2luYWwoY2hpbGQsIGRldGFjaGVkUGFyZW50LCBvcmlnaW5hbFBhcmVudClcblx0XHRcdCk7XG5cblx0XHRpZiAodm5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0aWYgKHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9PT0gZGV0YWNoZWRQYXJlbnQpIHtcblx0XHRcdFx0aWYgKHZub2RlLl9kb20pIHtcblx0XHRcdFx0XHRvcmlnaW5hbFBhcmVudC5hcHBlbmRDaGlsZCh2bm9kZS5fZG9tKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9mb3JjZSA9IHRydWU7XG5cdFx0XHRcdHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9IG9yaWdpbmFsUGFyZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuLy8gaGF2aW5nIGN1c3RvbSBpbmhlcml0YW5jZSBpbnN0ZWFkIG9mIGEgY2xhc3MgaGVyZSBzYXZlcyBhIGxvdCBvZiBieXRlc1xuZXhwb3J0IGZ1bmN0aW9uIFN1c3BlbnNlKCkge1xuXHQvLyB3ZSBkbyBub3QgY2FsbCBzdXBlciBoZXJlIHRvIGdvbGYgc29tZSBieXRlcy4uLlxuXHR0aGlzLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50ID0gMDtcblx0dGhpcy5fc3VzcGVuZGVycyA9IG51bGw7XG5cdHRoaXMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGw7XG59XG5cbi8vIFRoaW5ncyB3ZSBkbyBoZXJlIHRvIHNhdmUgc29tZSBieXRlcyBidXQgYXJlIG5vdCBwcm9wZXIgSlMgaW5oZXJpdGFuY2U6XG4vLyAtIGNhbGwgYG5ldyBDb21wb25lbnQoKWAgYXMgdGhlIHByb3RvdHlwZVxuLy8gLSBkbyBub3Qgc2V0IGBTdXNwZW5zZS5wcm90b3R5cGUuY29uc3RydWN0b3JgIHRvIGBTdXNwZW5zZWBcblN1c3BlbnNlLnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnQoKTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge1Byb21pc2V9IHByb21pc2UgVGhlIHRocm93biBwcm9taXNlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlPGFueSwgYW55Pn0gc3VzcGVuZGluZ1ZOb2RlIFRoZSBzdXNwZW5kaW5nIGNvbXBvbmVudFxuICovXG5TdXNwZW5zZS5wcm90b3R5cGUuX2NoaWxkRGlkU3VzcGVuZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdXNwZW5kaW5nVk5vZGUpIHtcblx0Y29uc3Qgc3VzcGVuZGluZ0NvbXBvbmVudCA9IHN1c3BlbmRpbmdWTm9kZS5fY29tcG9uZW50O1xuXG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9ICovXG5cdGNvbnN0IGMgPSB0aGlzO1xuXG5cdGlmIChjLl9zdXNwZW5kZXJzID09IG51bGwpIHtcblx0XHRjLl9zdXNwZW5kZXJzID0gW107XG5cdH1cblx0Yy5fc3VzcGVuZGVycy5wdXNoKHN1c3BlbmRpbmdDb21wb25lbnQpO1xuXG5cdGNvbnN0IHJlc29sdmUgPSBzdXNwZW5kZWQoYy5fdm5vZGUpO1xuXG5cdGxldCByZXNvbHZlZCA9IGZhbHNlO1xuXHRjb25zdCBvblJlc29sdmVkID0gKCkgPT4ge1xuXHRcdGlmIChyZXNvbHZlZCkgcmV0dXJuO1xuXG5cdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG51bGw7XG5cblx0XHRpZiAocmVzb2x2ZSkge1xuXHRcdFx0cmVzb2x2ZShvblN1c3BlbnNpb25Db21wbGV0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uU3VzcGVuc2lvbkNvbXBsZXRlKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG9uUmVzb2x2ZWQ7XG5cblx0Y29uc3Qgb25TdXNwZW5zaW9uQ29tcGxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKCEtLWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQpIHtcblx0XHRcdC8vIElmIHRoZSBzdXNwZW5zaW9uIHdhcyBkdXJpbmcgaHlkcmF0aW9uIHdlIGRvbid0IG5lZWQgdG8gcmVzdG9yZSB0aGVcblx0XHRcdC8vIHN1c3BlbmRlZCBjaGlsZHJlbiBpbnRvIHRoZSBfY2hpbGRyZW4gYXJyYXlcblx0XHRcdGlmIChjLnN0YXRlLl9zdXNwZW5kZWQpIHtcblx0XHRcdFx0Y29uc3Qgc3VzcGVuZGVkVk5vZGUgPSBjLnN0YXRlLl9zdXNwZW5kZWQ7XG5cdFx0XHRcdGMuX3Zub2RlLl9jaGlsZHJlblswXSA9IHJlbW92ZU9yaWdpbmFsKFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLl9jb21wb25lbnQuX3BhcmVudERvbSxcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZS5fY29tcG9uZW50Ll9vcmlnaW5hbFBhcmVudERvbVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjLnNldFN0YXRlKHsgX3N1c3BlbmRlZDogKGMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGwpIH0pO1xuXG5cdFx0XHRsZXQgc3VzcGVuZGVkO1xuXHRcdFx0d2hpbGUgKChzdXNwZW5kZWQgPSBjLl9zdXNwZW5kZXJzLnBvcCgpKSkge1xuXHRcdFx0XHRzdXNwZW5kZWQuZm9yY2VVcGRhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIFdlIGRvIG5vdCBzZXQgYHN1c3BlbmRlZDogdHJ1ZWAgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHdlIHdhbnQgdGhlIGFjdHVhbCBtYXJrdXBcblx0ICogdG8gcmVtYWluIG9uIHNjcmVlbiBhbmQgaHlkcmF0ZSBpdCB3aGVuIHRoZSBzdXNwZW5zZSBhY3R1YWxseSBnZXRzIHJlc29sdmVkLlxuXHQgKiBXaGlsZSBpbiBub24taHlkcmF0aW9uIGNhc2VzIHRoZSB1c3VhbCBmYWxsYmFjayAtPiBjb21wb25lbnQgZmxvdyB3b3VsZCBvY2NvdXIuXG5cdCAqL1xuXHRpZiAoXG5cdFx0IWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQrKyAmJlxuXHRcdCEoc3VzcGVuZGluZ1ZOb2RlLl9mbGFncyAmIE1PREVfSFlEUkFURSlcblx0KSB7XG5cdFx0Yy5zZXRTdGF0ZSh7IF9zdXNwZW5kZWQ6IChjLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBjLl92bm9kZS5fY2hpbGRyZW5bMF0pIH0pO1xuXHR9XG5cdHByb21pc2UudGhlbihvblJlc29sdmVkLCBvblJlc29sdmVkKTtcbn07XG5cblN1c3BlbnNlLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcblx0dGhpcy5fc3VzcGVuZGVycyA9IFtdO1xufTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50W1wicHJvcHNcIl19IHByb3BzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlU3RhdGV9IHN0YXRlXG4gKi9cblN1c3BlbnNlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAocHJvcHMsIHN0YXRlKSB7XG5cdGlmICh0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIpIHtcblx0XHQvLyBXaGVuIHRoZSBTdXNwZW5zZSdzIF92bm9kZSB3YXMgY3JlYXRlZCBieSBhIGNhbGwgdG8gY3JlYXRlVk5vZGVcblx0XHQvLyAoaS5lLiBkdWUgdG8gYSBzZXRTdGF0ZSBmdXJ0aGVyIHVwIGluIHRoZSB0cmVlKVxuXHRcdC8vIGl0J3MgX2NoaWxkcmVuIHByb3AgaXMgbnVsbCwgaW4gdGhpcyBjYXNlIHdlIFwiZm9yZ2V0XCIgYWJvdXQgdGhlIHBhcmtlZCB2bm9kZXMgdG8gZGV0YWNoXG5cdFx0aWYgKHRoaXMuX3Zub2RlLl9jaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgZGV0YWNoZWRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdGNvbnN0IGRldGFjaGVkQ29tcG9uZW50ID0gdGhpcy5fdm5vZGUuX2NoaWxkcmVuWzBdLl9jb21wb25lbnQ7XG5cdFx0XHR0aGlzLl92bm9kZS5fY2hpbGRyZW5bMF0gPSBkZXRhY2hlZENsb25lKFxuXHRcdFx0XHR0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIsXG5cdFx0XHRcdGRldGFjaGVkUGFyZW50LFxuXHRcdFx0XHQoZGV0YWNoZWRDb21wb25lbnQuX29yaWdpbmFsUGFyZW50RG9tID0gZGV0YWNoZWRDb21wb25lbnQuX3BhcmVudERvbSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZGV0YWNoT25OZXh0UmVuZGVyID0gbnVsbDtcblx0fVxuXG5cdC8vIFdyYXAgZmFsbGJhY2sgdHJlZSBpbiBhIFZOb2RlIHRoYXQgcHJldmVudHMgaXRzZWxmIGZyb20gYmVpbmcgbWFya2VkIGFzIGFib3J0aW5nIG1pZC1oeWRyYXRpb246XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9ICovXG5cdGNvbnN0IGZhbGxiYWNrID1cblx0XHRzdGF0ZS5fc3VzcGVuZGVkICYmIGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIHByb3BzLmZhbGxiYWNrKTtcblx0aWYgKGZhbGxiYWNrKSBmYWxsYmFjay5fZmxhZ3MgJj0gfk1PREVfSFlEUkFURTtcblxuXHRyZXR1cm4gW1xuXHRcdGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIHN0YXRlLl9zdXNwZW5kZWQgPyBudWxsIDogcHJvcHMuY2hpbGRyZW4pLFxuXHRcdGZhbGxiYWNrXG5cdF07XG59O1xuXG4vKipcbiAqIENoZWNrcyBhbmQgY2FsbHMgdGhlIHBhcmVudCBjb21wb25lbnQncyBfc3VzcGVuZGVkIG1ldGhvZCwgcGFzc2luZyBpbiB0aGVcbiAqIHN1c3BlbmRlZCB2bm9kZS4gVGhpcyBpcyBhIHdheSBmb3IgYSBwYXJlbnQgKGUuZy4gU3VzcGVuc2VMaXN0KSB0byBnZXQgbm90aWZpZWRcbiAqIHRoYXQgb25lIG9mIGl0cyBjaGlsZHJlbi9kZXNjZW5kYW50cyBzdXNwZW5kZWQuXG4gKlxuICogVGhlIHBhcmVudCBNQVkgcmV0dXJuIGEgY2FsbGJhY2suIFRoZSBjYWxsYmFjayB3aWxsIGdldCBjYWxsZWQgd2hlbiB0aGVcbiAqIHN1c3BlbnNpb24gcmVzb2x2ZXMsIG5vdGlmeWluZyB0aGUgcGFyZW50IG9mIHRoZSBmYWN0LlxuICogTW9yZW92ZXIsIHRoZSBjYWxsYmFjayBnZXRzIGZ1bmN0aW9uIGB1bnN1c3BlbmRgIGFzIGEgcGFyYW1ldGVyLiBUaGUgcmVzb2x2ZWRcbiAqIGNoaWxkIGRlc2NlbmRhbnQgd2lsbCBub3QgYWN0dWFsbHkgZ2V0IHVuc3VzcGVuZGVkIHVudGlsIGB1bnN1c3BlbmRgIGdldHMgY2FsbGVkLlxuICogVGhpcyBpcyBhIHdheSBmb3IgdGhlIHBhcmVudCB0byBkZWxheSB1bnN1c3BlbmRpbmcuXG4gKlxuICogSWYgdGhlIHBhcmVudCBkb2VzIG5vdCByZXR1cm4gYSBjYWxsYmFjayB0aGVuIHRoZSByZXNvbHZlZCB2bm9kZVxuICogZ2V0cyB1bnN1c3BlbmRlZCBpbW1lZGlhdGVseSB3aGVuIGl0IHJlc29sdmVzLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IHZub2RlXG4gKiBAcmV0dXJucyB7KCh1bnN1c3BlbmQ6ICgpID0+IHZvaWQpID0+IHZvaWQpP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1c3BlbmRlZCh2bm9kZSkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0bGV0IGNvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQuX2NvbXBvbmVudDtcblx0cmV0dXJuIGNvbXBvbmVudCAmJiBjb21wb25lbnQuX3N1c3BlbmRlZCAmJiBjb21wb25lbnQuX3N1c3BlbmRlZCh2bm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXp5KGxvYWRlcikge1xuXHRsZXQgcHJvbTtcblx0bGV0IGNvbXBvbmVudDtcblx0bGV0IGVycm9yO1xuXG5cdGZ1bmN0aW9uIExhenkocHJvcHMpIHtcblx0XHRpZiAoIXByb20pIHtcblx0XHRcdHByb20gPSBsb2FkZXIoKTtcblx0XHRcdHByb20udGhlbihcblx0XHRcdFx0ZXhwb3J0cyA9PiB7XG5cdFx0XHRcdFx0Y29tcG9uZW50ID0gZXhwb3J0cy5kZWZhdWx0IHx8IGV4cG9ydHM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGUgPT4ge1xuXHRcdFx0XHRcdGVycm9yID0gZTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblxuXHRcdGlmICghY29tcG9uZW50KSB7XG5cdFx0XHR0aHJvdyBwcm9tO1xuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgcHJvcHMpO1xuXHR9XG5cblx0TGF6eS5kaXNwbGF5TmFtZSA9ICdMYXp5Jztcblx0TGF6eS5fZm9yd2FyZGVkID0gdHJ1ZTtcblx0cmV0dXJuIExhenk7XG59XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50LCB0b0NoaWxkQXJyYXkgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc3VzcGVuZGVkIH0gZnJvbSAnLi9zdXNwZW5zZS5qcyc7XG5cbi8vIEluZGV4ZXMgdG8gbGlua2VkIGxpc3Qgbm9kZXMgKG5vZGVzIGFyZSBzdG9yZWQgYXMgYXJyYXlzIHRvIHNhdmUgYnl0ZXMpLlxuY29uc3QgU1VTUEVOREVEX0NPVU5UID0gMDtcbmNvbnN0IFJFU09MVkVEX0NPVU5UID0gMTtcbmNvbnN0IE5FWFRfTk9ERSA9IDI7XG5cbi8vIEhhdmluZyBjdXN0b20gaW5oZXJpdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzIGhlcmUgc2F2ZXMgYSBsb3Qgb2YgYnl0ZXMuXG5leHBvcnQgZnVuY3Rpb24gU3VzcGVuc2VMaXN0KCkge1xuXHR0aGlzLl9uZXh0ID0gbnVsbDtcblx0dGhpcy5fbWFwID0gbnVsbDtcbn1cblxuLy8gTWFyayBvbmUgb2YgY2hpbGQncyBlYXJsaWVyIHN1c3BlbnNpb25zIGFzIHJlc29sdmVkLlxuLy8gU29tZSBwZW5kaW5nIGNhbGxiYWNrcyBtYXkgYmVjb21lIGNhbGxhYmxlIGR1ZSB0byB0aGlzXG4vLyAoZS5nLiB0aGUgbGFzdCBzdXNwZW5kZWQgZGVzY2VuZGFudCBnZXRzIHJlc29sdmVkIHdoZW5cbi8vIHJldmVhbE9yZGVyID09PSAndG9nZXRoZXInKS4gUHJvY2VzcyB0aG9zZSBjYWxsYmFja3MgYXMgd2VsbC5cbmNvbnN0IHJlc29sdmUgPSAobGlzdCwgY2hpbGQsIG5vZGUpID0+IHtcblx0aWYgKCsrbm9kZVtSRVNPTFZFRF9DT1VOVF0gPT09IG5vZGVbU1VTUEVOREVEX0NPVU5UXSkge1xuXHRcdC8vIFRoZSBudW1iZXIgYSBjaGlsZCAob3IgYW55IG9mIGl0cyBkZXNjZW5kYW50cykgaGFzIGJlZW4gc3VzcGVuZGVkXG5cdFx0Ly8gbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIGl0J3MgYmVlbiByZXNvbHZlZC4gVGhlcmVmb3JlIHdlXG5cdFx0Ly8gbWFyayB0aGUgY2hpbGQgYXMgY29tcGxldGVseSByZXNvbHZlZCBieSBkZWxldGluZyBpdCBmcm9tIC5fbWFwLlxuXHRcdC8vIFRoaXMgaXMgdXNlZCB0byBmaWd1cmUgb3V0IHdoZW4gKmFsbCogY2hpbGRyZW4gaGF2ZSBiZWVuIGNvbXBsZXRlbHlcblx0XHQvLyByZXNvbHZlZCB3aGVuIHJldmVhbE9yZGVyIGlzICd0b2dldGhlcicuXG5cdFx0bGlzdC5fbWFwLmRlbGV0ZShjaGlsZCk7XG5cdH1cblxuXHQvLyBJZiByZXZlYWxPcmRlciBpcyBmYWxzeSB0aGVuIHdlIGNhbiBkbyBhbiBlYXJseSBleGl0LCBhcyB0aGVcblx0Ly8gY2FsbGJhY2tzIHdvbid0IGdldCBxdWV1ZWQgaW4gdGhlIG5vZGUgYW55d2F5LlxuXHQvLyBJZiByZXZlYWxPcmRlciBpcyAndG9nZXRoZXInIHRoZW4gYWxzbyBkbyBhbiBlYXJseSBleGl0XG5cdC8vIGlmIGFsbCBzdXNwZW5kZWQgZGVzY2VuZGFudHMgaGF2ZSBub3QgeWV0IGJlZW4gcmVzb2x2ZWQuXG5cdGlmIChcblx0XHQhbGlzdC5wcm9wcy5yZXZlYWxPcmRlciB8fFxuXHRcdChsaXN0LnByb3BzLnJldmVhbE9yZGVyWzBdID09PSAndCcgJiYgbGlzdC5fbWFwLnNpemUpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFdhbGsgdGhlIGN1cnJlbnRseSBzdXNwZW5kZWQgY2hpbGRyZW4gaW4gb3JkZXIsIGNhbGxpbmcgdGhlaXJcblx0Ly8gc3RvcmVkIGNhbGxiYWNrcyBvbiB0aGUgd2F5LiBTdG9wIGlmIHdlIGVuY291bnRlciBhIGNoaWxkIHRoYXRcblx0Ly8gaGFzIG5vdCBiZWVuIGNvbXBsZXRlbHkgcmVzb2x2ZWQgeWV0LlxuXHRub2RlID0gbGlzdC5fbmV4dDtcblx0d2hpbGUgKG5vZGUpIHtcblx0XHR3aGlsZSAobm9kZS5sZW5ndGggPiAzKSB7XG5cdFx0XHRub2RlLnBvcCgpKCk7XG5cdFx0fVxuXHRcdGlmIChub2RlW1JFU09MVkVEX0NPVU5UXSA8IG5vZGVbU1VTUEVOREVEX0NPVU5UXSkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGxpc3QuX25leHQgPSBub2RlID0gbm9kZVtORVhUX05PREVdO1xuXHR9XG59O1xuXG4vLyBUaGluZ3Mgd2UgZG8gaGVyZSB0byBzYXZlIHNvbWUgYnl0ZXMgYnV0IGFyZSBub3QgcHJvcGVyIEpTIGluaGVyaXRhbmNlOlxuLy8gLSBjYWxsIGBuZXcgQ29tcG9uZW50KClgIGFzIHRoZSBwcm90b3R5cGVcbi8vIC0gZG8gbm90IHNldCBgU3VzcGVuc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yYCB0byBgU3VzcGVuc2VgXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlID0gbmV3IENvbXBvbmVudCgpO1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLl9zdXNwZW5kZWQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcblx0Y29uc3QgbGlzdCA9IHRoaXM7XG5cdGNvbnN0IGRlbGVnYXRlZCA9IHN1c3BlbmRlZChsaXN0Ll92bm9kZSk7XG5cblx0bGV0IG5vZGUgPSBsaXN0Ll9tYXAuZ2V0KGNoaWxkKTtcblx0bm9kZVtTVVNQRU5ERURfQ09VTlRdKys7XG5cblx0cmV0dXJuIHVuc3VzcGVuZCA9PiB7XG5cdFx0Y29uc3Qgd3JhcHBlZFVuc3VzcGVuZCA9ICgpID0+IHtcblx0XHRcdGlmICghbGlzdC5wcm9wcy5yZXZlYWxPcmRlcikge1xuXHRcdFx0XHQvLyBTcGVjaWFsIGNhc2UgdGhlIHVuZGVmaW5lZCAoZmFsc3kpIHJldmVhbE9yZGVyLCBhcyB0aGVyZVxuXHRcdFx0XHQvLyBpcyBubyBuZWVkIHRvIGNvb3JkaW5hdGUgYSBzcGVjaWZpYyBvcmRlciBvciB1bnN1c3BlbmRzLlxuXHRcdFx0XHR1bnN1c3BlbmQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vZGUucHVzaCh1bnN1c3BlbmQpO1xuXHRcdFx0XHRyZXNvbHZlKGxpc3QsIGNoaWxkLCBub2RlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChkZWxlZ2F0ZWQpIHtcblx0XHRcdGRlbGVnYXRlZCh3cmFwcGVkVW5zdXNwZW5kKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcHBlZFVuc3VzcGVuZCgpO1xuXHRcdH1cblx0fTtcbn07XG5cblN1c3BlbnNlTGlzdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHByb3BzKSB7XG5cdHRoaXMuX25leHQgPSBudWxsO1xuXHR0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgY2hpbGRyZW4gPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pO1xuXHRpZiAocHJvcHMucmV2ZWFsT3JkZXIgJiYgcHJvcHMucmV2ZWFsT3JkZXJbMF0gPT09ICdiJykge1xuXHRcdC8vIElmIG9yZGVyID09PSAnYmFja3dhcmRzJyAob3IsIHdlbGwsIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggYSAnYicpXG5cdFx0Ly8gdGhlbiBmbGlwIHRoZSBjaGlsZCBsaXN0IGFyb3VuZCBzbyB0aGF0IHRoZSBsYXN0IGNoaWxkIHdpbGwgYmVcblx0XHQvLyB0aGUgZmlyc3QgaW4gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdGNoaWxkcmVuLnJldmVyc2UoKTtcblx0fVxuXHQvLyBCdWlsZCB0aGUgbGlua2VkIGxpc3QuIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gaW4gcmV2ZXJzZSBvcmRlclxuXHQvLyBzbyB0aGF0IGBfbmV4dGAgcG9pbnRzIHRvIHRoZSBmaXJzdCBsaW5rZWQgbGlzdCBub2RlIHRvIGJlIHJlc29sdmVkLlxuXHRmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoOyBpLS07ICkge1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBsaW5rZWQgbGlzdCBub2RlIGFzIGFuIGFycmF5IG9mIGZvcm06XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlXVxuXHRcdC8vIHdoZXJlIHN1c3BlbmRlZF9jb3VudCBhbmQgcmVzb2x2ZWRfY291bnQgYXJlIG51bWVyaWMgY291bnRlcnMgZm9yXG5cdFx0Ly8ga2VlcGluZyB0cmFjayBob3cgbWFueSB0aW1lcyBhIG5vZGUgaGFzIGJlZW4gc3VzcGVuZGVkIGFuZCByZXNvbHZlZC5cblx0XHQvL1xuXHRcdC8vIE5vdGUgdGhhdCBzdXNwZW5kZWRfY291bnQgc3RhcnRzIGZyb20gMSBpbnN0ZWFkIG9mIDAsIHNvIHdlIGNhbiBibG9ja1xuXHRcdC8vIHByb2Nlc3NpbmcgY2FsbGJhY2tzIHVudGlsIGNvbXBvbmVudERpZE1vdW50IGhhcyBiZWVuIGNhbGxlZC4gSW4gYSBzZW5zZVxuXHRcdC8vIG5vZGUgaXMgc3VzcGVuZGVkIGF0IGxlYXN0IHVudGlsIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkIVxuXHRcdC8vXG5cdFx0Ly8gUGVuZGluZyBjYWxsYmFja3MgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG5vZGU6XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlLCBjYWxsYmFja18wLCBjYWxsYmFja18xLCAuLi5dXG5cdFx0dGhpcy5fbWFwLnNldChjaGlsZHJlbltpXSwgKHRoaXMuX25leHQgPSBbMSwgMCwgdGhpcy5fbmV4dF0pKTtcblx0fVxuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59O1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9XG5cdFN1c3BlbnNlTGlzdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGlsZHJlbiBhZnRlciBtb3VudGluZyBmb3IgdHdvIHJlYXNvbnM6XG5cdFx0Ly8gMS4gQXMgZWFjaCBub2RlW1NVU1BFTkRFRF9DT1VOVF0gc3RhcnRzIGZyb20gMSwgdGhpcyBpdGVyYXRpb24gaW5jcmVhc2VzXG5cdFx0Ly8gICAgZWFjaCBub2RlW1JFTEVBU0VEX0NPVU5UXSBieSAxLCB0aGVyZWZvcmUgYmFsYW5jaW5nIHRoZSBjb3VudGVycy5cblx0XHQvLyAgICBUaGUgbm9kZXMgY2FuIG5vdyBiZSBjb21wbGV0ZWx5IGNvbnN1bWVkIGZyb20gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdC8vIDIuIEhhbmRsZSBub2RlcyB0aGF0IG1pZ2h0IGhhdmUgZ290dGVuIHJlc29sdmVkIGJldHdlZW4gcmVuZGVyIGFuZFxuXHRcdC8vICAgIGNvbXBvbmVudERpZE1vdW50LlxuXHRcdHRoaXMuX21hcC5mb3JFYWNoKChub2RlLCBjaGlsZCkgPT4ge1xuXHRcdFx0cmVzb2x2ZSh0aGlzLCBjaGlsZCwgbm9kZSk7XG5cdFx0fSk7XG5cdH07XG4iLCAiLyoqIE5vcm1hbCBoeWRyYXRpb24gdGhhdCBhdHRhY2hlcyB0byBhIERPTSB0cmVlIGJ1dCBkb2VzIG5vdCBkaWZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1PREVfSFlEUkFURSA9IDEgPDwgNTtcbi8qKiBTaWduaWZpZXMgdGhpcyBWTm9kZSBzdXNwZW5kZWQgb24gdGhlIHByZXZpb3VzIHJlbmRlciAqL1xuZXhwb3J0IGNvbnN0IE1PREVfU1VTUEVOREVEID0gMSA8PCA3O1xuLyoqIEluZGljYXRlcyB0aGF0IHRoaXMgbm9kZSBuZWVkcyB0byBiZSBpbnNlcnRlZCB3aGlsZSBwYXRjaGluZyBjaGlsZHJlbiAqL1xuZXhwb3J0IGNvbnN0IElOU0VSVF9WTk9ERSA9IDEgPDwgMTY7XG4vKiogSW5kaWNhdGVzIGEgVk5vZGUgaGFzIGJlZW4gbWF0Y2hlZCB3aXRoIGFub3RoZXIgVk5vZGUgaW4gdGhlIGRpZmYgKi9cbmV4cG9ydCBjb25zdCBNQVRDSEVEID0gMSA8PCAxNztcblxuLyoqIFJlc2V0IGFsbCBtb2RlIGZsYWdzICovXG5leHBvcnQgY29uc3QgUkVTRVRfTU9ERSA9IH4oTU9ERV9IWURSQVRFIHwgTU9ERV9TVVNQRU5ERUQpO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfT0JKID0gLyoqIEB0eXBlIHthbnl9ICovICh7fSk7XG5leHBvcnQgY29uc3QgRU1QVFlfQVJSID0gW107XG5leHBvcnQgY29uc3QgSVNfTk9OX0RJTUVOU0lPTkFMID1cblx0L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaTtcbiIsICJpbXBvcnQgeyBjcmVhdGVFbGVtZW50LCByZW5kZXIgfSBmcm9tICdwcmVhY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9zcmMvaW5kZXgnKS5SZW5kZXJhYmxlUHJvcHM8eyBjb250ZXh0OiBhbnkgfT59IHByb3BzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHRQcm92aWRlcihwcm9wcykge1xuXHR0aGlzLmdldENoaWxkQ29udGV4dCA9ICgpID0+IHByb3BzLmNvbnRleHQ7XG5cdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbn1cblxuLyoqXG4gKiBQb3J0YWwgY29tcG9uZW50XG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkfSBwcm9wc1xuICpcbiAqIFRPRE86IHVzZSBjcmVhdGVSb290KCkgaW5zdGVhZCBvZiBmYWtlIHJvb3RcbiAqL1xuZnVuY3Rpb24gUG9ydGFsKHByb3BzKSB7XG5cdGNvbnN0IF90aGlzID0gdGhpcztcblx0bGV0IGNvbnRhaW5lciA9IHByb3BzLl9jb250YWluZXI7XG5cblx0X3RoaXMuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmVuZGVyKG51bGwsIF90aGlzLl90ZW1wKTtcblx0XHRfdGhpcy5fdGVtcCA9IG51bGw7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IG51bGw7XG5cdH07XG5cblx0Ly8gV2hlbiB3ZSBjaGFuZ2UgY29udGFpbmVyIHdlIHNob3VsZCBjbGVhciBvdXIgb2xkIGNvbnRhaW5lciBhbmRcblx0Ly8gaW5kaWNhdGUgYSBuZXcgbW91bnQuXG5cdGlmIChfdGhpcy5fY29udGFpbmVyICYmIF90aGlzLl9jb250YWluZXIgIT09IGNvbnRhaW5lcikge1xuXHRcdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG5cdH1cblxuXHRpZiAoIV90aGlzLl90ZW1wKSB7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcblxuXHRcdC8vIENyZWF0ZSBhIGZha2UgRE9NIHBhcmVudCBub2RlIHRoYXQgbWFuYWdlcyBhIHN1YnNldCBvZiBgY29udGFpbmVyYCdzIGNoaWxkcmVuOlxuXHRcdF90aGlzLl90ZW1wID0ge1xuXHRcdFx0bm9kZVR5cGU6IDEsXG5cdFx0XHRwYXJlbnROb2RlOiBjb250YWluZXIsXG5cdFx0XHRjaGlsZE5vZGVzOiBbXSxcblx0XHRcdGFwcGVuZENoaWxkKGNoaWxkKSB7XG5cdFx0XHRcdHRoaXMuY2hpbGROb2Rlcy5wdXNoKGNoaWxkKTtcblx0XHRcdFx0X3RoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChjaGlsZCk7XG5cdFx0XHR9LFxuXHRcdFx0aW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmUpIHtcblx0XHRcdFx0dGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO1xuXHRcdFx0XHRfdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdH0sXG5cdFx0XHRyZW1vdmVDaGlsZChjaGlsZCkge1xuXHRcdFx0XHR0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkKSA+Pj4gMSwgMSk7XG5cdFx0XHRcdF90aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBSZW5kZXIgb3VyIHdyYXBwaW5nIGVsZW1lbnQgaW50byB0ZW1wLlxuXHRyZW5kZXIoXG5cdFx0Y3JlYXRlRWxlbWVudChDb250ZXh0UHJvdmlkZXIsIHsgY29udGV4dDogX3RoaXMuY29udGV4dCB9LCBwcm9wcy5fdm5vZGUpLFxuXHRcdF90aGlzLl90ZW1wXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYFBvcnRhbGAgdG8gY29udGludWUgcmVuZGVyaW5nIHRoZSB2bm9kZSB0cmVlIGF0IGEgZGlmZmVyZW50IERPTSBub2RlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBUaGUgdm5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IGNvbnRhaW5lciBUaGUgRE9NIG5vZGUgdG8gY29udGludWUgcmVuZGVyaW5nIGluIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9ydGFsKHZub2RlLCBjb250YWluZXIpIHtcblx0Y29uc3QgZWwgPSBjcmVhdGVFbGVtZW50KFBvcnRhbCwgeyBfdm5vZGU6IHZub2RlLCBfY29udGFpbmVyOiBjb250YWluZXIgfSk7XG5cdGVsLmNvbnRhaW5lckluZm8gPSBjb250YWluZXI7XG5cdHJldHVybiBlbDtcbn1cbiIsICJpbXBvcnQge1xuXHRyZW5kZXIgYXMgcHJlYWN0UmVuZGVyLFxuXHRoeWRyYXRlIGFzIHByZWFjdEh5ZHJhdGUsXG5cdG9wdGlvbnMsXG5cdHRvQ2hpbGRBcnJheSxcblx0Q29tcG9uZW50XG59IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQge1xuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZSxcblx0dXNlRWZmZWN0LFxuXHR1c2VJZCxcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTGF5b3V0RWZmZWN0LFxuXHR1c2VNZW1vLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VSZWYsXG5cdHVzZVN0YXRlXG59IGZyb20gJ3ByZWFjdC9ob29rcyc7XG5pbXBvcnQge1xuXHR1c2VEZWZlcnJlZFZhbHVlLFxuXHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHR1c2VUcmFuc2l0aW9uXG59IGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfRUxFTUVOVF9UWVBFID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAmJiBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG5cdDB4ZWFjNztcblxuY29uc3QgQ0FNRUxfUFJPUFMgPVxuXHQvXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS87XG5jb25zdCBPTl9BTkkgPSAvXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvO1xuY29uc3QgQ0FNRUxfUkVQTEFDRSA9IC9bQS1aMC05XS9nO1xuXG5jb25zdCBJU19ET00gPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBJbnB1dCB0eXBlcyBmb3Igd2hpY2ggb25jaGFuZ2Ugc2hvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG8gb25pbnB1dC5cbi8vIHR5cGU9XCJmaWxlfGNoZWNrYm94fHJhZGlvXCIsIHBsdXMgXCJyYW5nZVwiIGluIElFMTEuXG4vLyAoSUUxMSBkb2Vzbid0IHN1cHBvcnQgU3ltYm9sLCB3aGljaCB3ZSB1c2UgaGVyZSB0byB0dXJuIGByYWRgIGludG8gYHJhYCB3aGljaCBtYXRjaGVzIFwicmFuZ2VcIilcbmNvbnN0IG9uQ2hhbmdlSW5wdXRUeXBlID0gdHlwZSA9PlxuXHQodHlwZW9mIFN5bWJvbCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgU3ltYm9sKCkgPT0gJ3N5bWJvbCdcblx0XHQ/IC9maWx8Y2hlfHJhZC9cblx0XHQ6IC9maWx8Y2hlfHJhL1xuXHQpLnRlc3QodHlwZSk7XG5cbi8vIFNvbWUgbGlicmFyaWVzIGxpa2UgYHJlYWN0LXZpcnR1YWxpemVkYCBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGlzLlxuQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5cbi8vIGBVTlNBRkVfKmAgbGlmZWN5Y2xlIGhvb2tzXG4vLyBQcmVhY3Qgb25seSBldmVyIGludm9rZXMgdGhlIHVucHJlZml4ZWQgbWV0aG9kcy5cbi8vIEhlcmUgd2UgcHJvdmlkZSBhIGJhc2UgXCJmYWxsYmFja1wiIGltcGxlbWVudGF0aW9uIHRoYXQgY2FsbHMgYW55IGRlZmluZWQgVU5TQUZFXyBwcmVmaXhlZCBtZXRob2QuXG4vLyAtIElmIGEgY29tcG9uZW50IGRlZmluZXMgaXRzIG93biBgY29tcG9uZW50RGlkTW91bnQoKWAgKGluY2x1ZGluZyB2aWEgZGVmaW5lUHJvcGVydHkpLCB1c2UgdGhhdC5cbi8vIC0gSWYgYSBjb21wb25lbnQgZGVmaW5lcyBgVU5TQUZFX2NvbXBvbmVudERpZE1vdW50KClgLCBgY29tcG9uZW50RGlkTW91bnRgIGlzIHRoZSBhbGlhcyBnZXR0ZXIvc2V0dGVyLlxuLy8gLSBJZiBhbnl0aGluZyBhc3NpZ25zIHRvIGFuIGBVTlNBRkVfKmAgcHJvcGVydHksIHRoZSBhc3NpZ25tZW50IGlzIGZvcndhcmRlZCB0byB0aGUgdW5wcmVmaXhlZCBwcm9wZXJ0eS5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJlYWN0anMvcHJlYWN0L2lzc3Vlcy8xOTQxXG5bXG5cdCdjb21wb25lbnRXaWxsTW91bnQnLFxuXHQnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG5cdCdjb21wb25lbnRXaWxsVXBkYXRlJ1xuXS5mb3JFYWNoKGtleSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBrZXksIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbJ1VOU0FGRV8nICsga2V5XTtcblx0XHR9LFxuXHRcdHNldCh2KSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiB2XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8qKlxuICogUHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBWTm9kZSB0cmVlIHRvIHJlbmRlclxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBwYXJlbnQgRE9NIG5vZGUgdG8gcmVuZGVyIHZub2RlIHRyZWUgaW50b1xuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgcmVuZGVyaW5nXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50IHwgbnVsbH0gVGhlIHJvb3QgY29tcG9uZW50IHJlZmVyZW5jZSBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0Ly8gUmVhY3QgZGVzdHJveXMgYW55IGV4aXN0aW5nIERPTSBub2Rlcywgc2VlICMxNzI3XG5cdC8vIC4uLmJ1dCBvbmx5IG9uIHRoZSBmaXJzdCByZW5kZXIsIHNlZSAjMTgyOFxuXHRpZiAocGFyZW50Ll9jaGlsZHJlbiA9PSBudWxsKSB7XG5cdFx0cGFyZW50LnRleHRDb250ZW50ID0gJyc7XG5cdH1cblxuXHRwcmVhY3RSZW5kZXIodm5vZGUsIHBhcmVudCk7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcblxuXHRyZXR1cm4gdm5vZGUgPyB2bm9kZS5fY29tcG9uZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGUodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0cHJlYWN0SHlkcmF0ZSh2bm9kZSwgcGFyZW50KTtcblx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuXG5cdHJldHVybiB2bm9kZSA/IHZub2RlLl9jb21wb25lbnQgOiBudWxsO1xufVxuXG5sZXQgb2xkRXZlbnRIb29rID0gb3B0aW9ucy5ldmVudDtcbm9wdGlvbnMuZXZlbnQgPSBlID0+IHtcblx0aWYgKG9sZEV2ZW50SG9vaykgZSA9IG9sZEV2ZW50SG9vayhlKTtcblxuXHRlLnBlcnNpc3QgPSBlbXB0eTtcblx0ZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGlzUHJvcGFnYXRpb25TdG9wcGVkO1xuXHRlLmlzRGVmYXVsdFByZXZlbnRlZCA9IGlzRGVmYXVsdFByZXZlbnRlZDtcblx0cmV0dXJuIChlLm5hdGl2ZUV2ZW50ID0gZSk7XG59O1xuXG5mdW5jdGlvbiBlbXB0eSgpIHt9XG5cbmZ1bmN0aW9uIGlzUHJvcGFnYXRpb25TdG9wcGVkKCkge1xuXHRyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGU7XG59XG5cbmZ1bmN0aW9uIGlzRGVmYXVsdFByZXZlbnRlZCgpIHtcblx0cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZDtcbn1cblxuY29uc3QgY2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlID0ge1xuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3M7XG5cdH1cbn07XG5cbmZ1bmN0aW9uIGhhbmRsZURvbVZOb2RlKHZub2RlKSB7XG5cdGxldCBwcm9wcyA9IHZub2RlLnByb3BzLFxuXHRcdHR5cGUgPSB2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyA9IHt9O1xuXG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIHtcblx0XHRsZXQgdmFsdWUgPSBwcm9wc1tpXTtcblxuXHRcdGlmIChcblx0XHRcdChpID09PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIHByb3BzICYmIHZhbHVlID09IG51bGwpIHx8XG5cdFx0XHQvLyBFbXVsYXRlIFJlYWN0J3MgYmVoYXZpb3Igb2Ygbm90IHJlbmRlcmluZyB0aGUgY29udGVudHMgb2Ygbm9zY3JpcHQgdGFncyBvbiB0aGUgY2xpZW50LlxuXHRcdFx0KElTX0RPTSAmJiBpID09PSAnY2hpbGRyZW4nICYmIHR5cGUgPT09ICdub3NjcmlwdCcpIHx8XG5cdFx0XHRpID09PSAnY2xhc3MnIHx8XG5cdFx0XHRpID09PSAnY2xhc3NOYW1lJ1xuXHRcdCkge1xuXHRcdFx0Ly8gU2tpcCBhcHBseWluZyB2YWx1ZSBpZiBpdCBpcyBudWxsL3VuZGVmaW5lZCBhbmQgd2UgYWxyZWFkeSBzZXRcblx0XHRcdC8vIGEgZGVmYXVsdCB2YWx1ZVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0bGV0IGxvd2VyQ2FzZWQgPSBpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKGkgPT09ICdkZWZhdWx0VmFsdWUnICYmICd2YWx1ZScgaW4gcHJvcHMgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkge1xuXHRcdFx0Ly8gYGRlZmF1bHRWYWx1ZWAgaXMgdHJlYXRlZCBhcyBhIGZhbGxiYWNrIGB2YWx1ZWAgd2hlbiBhIHZhbHVlIHByb3AgaXMgcHJlc2VudCBidXQgbnVsbC91bmRlZmluZWQuXG5cdFx0XHQvLyBgZGVmYXVsdFZhbHVlYCBmb3IgRWxlbWVudHMgd2l0aCBubyB2YWx1ZSBwcm9wIGlzIHRoZSBzYW1lIGFzIHRoZSBET00gZGVmYXVsdFZhbHVlIHByb3BlcnR5LlxuXHRcdFx0aSA9ICd2YWx1ZSc7XG5cdFx0fSBlbHNlIGlmIChpID09PSAnZG93bmxvYWQnICYmIHZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHQvLyBDYWxsaW5nIGBzZXRBdHRyaWJ1dGVgIHdpdGggYSB0cnV0aHkgdmFsdWUgd2lsbCBsZWFkIHRvIGl0IGJlaW5nXG5cdFx0XHQvLyBwYXNzZWQgYXMgYSBzdHJpbmdpZmllZCB2YWx1ZSwgZS5nLiBgZG93bmxvYWQ9XCJ0cnVlXCJgLiBSZWFjdFxuXHRcdFx0Ly8gY29udmVydHMgaXQgdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQsIG90aGVyd2lzZSB0aGUgYXR0cmlidXRlXG5cdFx0XHQvLyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBhbmQgdGhlIGZpbGUgd2lsbCBiZSBjYWxsZWRcblx0XHRcdC8vIFwidHJ1ZVwiIHVwb24gZG93bmxvYWRpbmcgaXQuXG5cdFx0XHR2YWx1ZSA9ICcnO1xuXHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ3RyYW5zbGF0ZScgJiYgdmFsdWUgPT09ICdubycpIHtcblx0XHRcdHZhbHVlID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkID09PSAnb25kb3VibGVjbGljaycpIHtcblx0XHRcdGkgPSAnb25kYmxjbGljayc7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGxvd2VyQ2FzZWQgPT09ICdvbmNoYW5nZScgJiZcblx0XHRcdCh0eXBlID09PSAnaW5wdXQnIHx8IHR5cGUgPT09ICd0ZXh0YXJlYScpICYmXG5cdFx0XHQhb25DaGFuZ2VJbnB1dFR5cGUocHJvcHMudHlwZSlcblx0XHQpIHtcblx0XHRcdGxvd2VyQ2FzZWQgPSBpID0gJ29uaW5wdXQnO1xuXHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ29uZm9jdXMnKSB7XG5cdFx0XHRpID0gJ29uZm9jdXNpbic7XG5cdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkID09PSAnb25ibHVyJykge1xuXHRcdFx0aSA9ICdvbmZvY3Vzb3V0Jztcblx0XHR9IGVsc2UgaWYgKE9OX0FOSS50ZXN0KGkpKSB7XG5cdFx0XHRpID0gbG93ZXJDYXNlZDtcblx0XHR9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignLScpID09PSAtMSAmJiBDQU1FTF9QUk9QUy50ZXN0KGkpKSB7XG5cdFx0XHRpID0gaS5yZXBsYWNlKENBTUVMX1JFUExBQ0UsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBzdXBwb3J0IGZvciBvbklucHV0IGFuZCBvbkNoYW5nZSwgc2VlICMzNTYxXG5cdFx0Ly8gaWYgd2UgaGF2ZSBhbiBvbmlucHV0IHByb3AgYWxyZWFkeSBjaGFuZ2UgaXQgdG8gb25pbnB1dENhcHR1cmVcblx0XHRpZiAobG93ZXJDYXNlZCA9PT0gJ29uaW5wdXQnKSB7XG5cdFx0XHRpID0gbG93ZXJDYXNlZDtcblx0XHRcdGlmIChub3JtYWxpemVkUHJvcHNbaV0pIHtcblx0XHRcdFx0aSA9ICdvbmlucHV0Q2FwdHVyZSc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bm9ybWFsaXplZFByb3BzW2ldID0gdmFsdWU7XG5cdH1cblxuXHQvLyBBZGQgc3VwcG9ydCBmb3IgYXJyYXkgc2VsZWN0IHZhbHVlczogPHNlbGVjdCBtdWx0aXBsZSB2YWx1ZT17W119IC8+XG5cdGlmIChcblx0XHR0eXBlID09ICdzZWxlY3QnICYmXG5cdFx0bm9ybWFsaXplZFByb3BzLm11bHRpcGxlICYmXG5cdFx0QXJyYXkuaXNBcnJheShub3JtYWxpemVkUHJvcHMudmFsdWUpXG5cdCkge1xuXHRcdC8vIGZvckVhY2goKSBhbHdheXMgcmV0dXJucyB1bmRlZmluZWQsIHdoaWNoIHdlIGFidXNlIGhlcmUgdG8gdW5zZXQgdGhlIHZhbHVlIHByb3AuXG5cdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlID0gdG9DaGlsZEFycmF5KHByb3BzLmNoaWxkcmVuKS5mb3JFYWNoKGNoaWxkID0+IHtcblx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gQWRkaW5nIHN1cHBvcnQgZm9yIGRlZmF1bHRWYWx1ZSBpbiBzZWxlY3QgdGFnXG5cdGlmICh0eXBlID09ICdzZWxlY3QnICYmIG5vcm1hbGl6ZWRQcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy52YWx1ZSA9IHRvQ2hpbGRBcnJheShwcm9wcy5jaGlsZHJlbikuZm9yRWFjaChjaGlsZCA9PiB7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzLm11bHRpcGxlKSB7XG5cdFx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0XHRub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGQucHJvcHMuc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdG5vcm1hbGl6ZWRQcm9wcy5kZWZhdWx0VmFsdWUgPT0gY2hpbGQucHJvcHMudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJvcHMuY2xhc3MgJiYgIXByb3BzLmNsYXNzTmFtZSkge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jbGFzcyA9IHByb3BzLmNsYXNzO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcblx0XHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRcdCdjbGFzc05hbWUnLFxuXHRcdFx0Y2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgJiYgIXByb3BzLmNsYXNzKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNsYXNzID0gbm9ybWFsaXplZFByb3BzLmNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcblx0fSBlbHNlIGlmIChwcm9wcy5jbGFzcyAmJiBwcm9wcy5jbGFzc05hbWUpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2xhc3MgPSBub3JtYWxpemVkUHJvcHMuY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuXHR9XG5cblx0dm5vZGUucHJvcHMgPSBub3JtYWxpemVkUHJvcHM7XG59XG5cbmxldCBvbGRWTm9kZUhvb2sgPSBvcHRpb25zLnZub2RlO1xub3B0aW9ucy52bm9kZSA9IHZub2RlID0+IHtcblx0Ly8gb25seSBub3JtYWxpemUgcHJvcHMgb24gRWxlbWVudCBub2Rlc1xuXHRpZiAodHlwZW9mIHZub2RlLnR5cGUgPT09ICdzdHJpbmcnKSB7XG5cdFx0aGFuZGxlRG9tVk5vZGUodm5vZGUpO1xuXHR9XG5cblx0dm5vZGUuJCR0eXBlb2YgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG5cblx0aWYgKG9sZFZOb2RlSG9vaykgb2xkVk5vZGVIb29rKHZub2RlKTtcbn07XG5cbi8vIE9ubHkgbmVlZGVkIGZvciByZWFjdC1yZWxheVxubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5jb25zdCBvbGRCZWZvcmVSZW5kZXIgPSBvcHRpb25zLl9yZW5kZXI7XG5vcHRpb25zLl9yZW5kZXIgPSBmdW5jdGlvbiAodm5vZGUpIHtcblx0aWYgKG9sZEJlZm9yZVJlbmRlcikge1xuXHRcdG9sZEJlZm9yZVJlbmRlcih2bm9kZSk7XG5cdH1cblx0Y3VycmVudENvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG59O1xuXG5jb25zdCBvbGREaWZmZWQgPSBvcHRpb25zLmRpZmZlZDtcbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMuZGlmZmVkID0gZnVuY3Rpb24gKHZub2RlKSB7XG5cdGlmIChvbGREaWZmZWQpIHtcblx0XHRvbGREaWZmZWQodm5vZGUpO1xuXHR9XG5cblx0Y29uc3QgcHJvcHMgPSB2bm9kZS5wcm9wcztcblx0Y29uc3QgZG9tID0gdm5vZGUuX2RvbTtcblxuXHRpZiAoXG5cdFx0ZG9tICE9IG51bGwgJiZcblx0XHR2bm9kZS50eXBlID09PSAndGV4dGFyZWEnICYmXG5cdFx0J3ZhbHVlJyBpbiBwcm9wcyAmJlxuXHRcdHByb3BzLnZhbHVlICE9PSBkb20udmFsdWVcblx0KSB7XG5cdFx0ZG9tLnZhbHVlID0gcHJvcHMudmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMudmFsdWU7XG5cdH1cblxuXHRjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcbn07XG5cbi8vIFRoaXMgaXMgYSB2ZXJ5IHZlcnkgcHJpdmF0ZSBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgUmVhY3QgaXRcbi8vIGlzIHVzZWQgdG8gc29ydC1vZiBkbyBydW50aW1lIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuZXhwb3J0IGNvbnN0IF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0ge1xuXHRSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiB7XG5cdFx0Y3VycmVudDoge1xuXHRcdFx0cmVhZENvbnRleHQoY29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudENvbXBvbmVudC5fZ2xvYmFsQ29udGV4dFtjb250ZXh0Ll9pZF0ucHJvcHMudmFsdWU7XG5cdFx0XHR9LFxuXHRcdFx0dXNlQ2FsbGJhY2ssXG5cdFx0XHR1c2VDb250ZXh0LFxuXHRcdFx0dXNlRGVidWdWYWx1ZSxcblx0XHRcdHVzZURlZmVycmVkVmFsdWUsXG5cdFx0XHR1c2VFZmZlY3QsXG5cdFx0XHR1c2VJZCxcblx0XHRcdHVzZUltcGVyYXRpdmVIYW5kbGUsXG5cdFx0XHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdFx0XHR1c2VMYXlvdXRFZmZlY3QsXG5cdFx0XHR1c2VNZW1vLFxuXHRcdFx0Ly8gdXNlTXV0YWJsZVNvdXJjZSwgLy8gZXhwZXJpbWVudGFsLW9ubHkgYW5kIHJlcGxhY2VkIGJ5IHVTRVMsIGxpa2VseSBub3Qgd29ydGggc3VwcG9ydGluZ1xuXHRcdFx0dXNlUmVkdWNlcixcblx0XHRcdHVzZVJlZixcblx0XHRcdHVzZVN0YXRlLFxuXHRcdFx0dXNlU3luY0V4dGVybmFsU3RvcmUsXG5cdFx0XHR1c2VUcmFuc2l0aW9uXG5cdFx0fVxuXHR9XG59O1xuIiwgImltcG9ydCB7XG5cdGNyZWF0ZUVsZW1lbnQsXG5cdHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsXG5cdGNsb25lRWxlbWVudCBhcyBwcmVhY3RDbG9uZUVsZW1lbnQsXG5cdGNyZWF0ZVJlZixcblx0Q29tcG9uZW50LFxuXHRjcmVhdGVDb250ZXh0LFxuXHRGcmFnbWVudFxufSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHtcblx0dXNlU3RhdGUsXG5cdHVzZUlkLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUxheW91dEVmZmVjdCxcblx0dXNlUmVmLFxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHR1c2VNZW1vLFxuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZVxufSBmcm9tICdwcmVhY3QvaG9va3MnO1xuaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJy4vUHVyZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi9tZW1vJztcbmltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tICcuL2ZvcndhcmRSZWYnO1xuaW1wb3J0IHsgQ2hpbGRyZW4gfSBmcm9tICcuL0NoaWxkcmVuJztcbmltcG9ydCB7IFN1c3BlbnNlLCBsYXp5IH0gZnJvbSAnLi9zdXNwZW5zZSc7XG5pbXBvcnQgeyBTdXNwZW5zZUxpc3QgfSBmcm9tICcuL3N1c3BlbnNlLWxpc3QnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAnLi9wb3J0YWxzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7XG5cdGh5ZHJhdGUsXG5cdHJlbmRlcixcblx0UkVBQ1RfRUxFTUVOVF9UWVBFLFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufSBmcm9tICcuL3JlbmRlcic7XG5cbmNvbnN0IHZlcnNpb24gPSAnMTcuMC4yJzsgLy8gdHJpY2sgbGlicmFyaWVzIHRvIHRoaW5rIHdlIGFyZSByZWFjdFxuXG4vKipcbiAqIExlZ2FjeSB2ZXJzaW9uIG9mIGNyZWF0ZUVsZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudCBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5KHR5cGUpIHtcblx0cmV0dXJuIGNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSB2YWxpZCAocClyZWFjdCBub2RlLlxuICogQHBhcmFtIHsqfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuXHRyZXR1cm4gISFlbGVtZW50ICYmIGVsZW1lbnQuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSBGcmFnbWVudCBub2RlLlxuICogQHBhcmFtIHsqfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGcmFnbWVudChlbGVtZW50KSB7XG5cdHJldHVybiBpc1ZhbGlkRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50LnR5cGUgPT09IEZyYWdtZW50O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXNzZWQgZWxlbWVudCBpcyBhIE1lbW8gbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTWVtbyhlbGVtZW50KSB7XG5cdHJldHVybiAoXG5cdFx0ISFlbGVtZW50ICYmXG5cdFx0ISFlbGVtZW50LmRpc3BsYXlOYW1lICYmXG5cdFx0KHR5cGVvZiBlbGVtZW50LmRpc3BsYXlOYW1lID09PSAnc3RyaW5nJyB8fFxuXHRcdFx0ZWxlbWVudC5kaXNwbGF5TmFtZSBpbnN0YW5jZW9mIFN0cmluZykgJiZcblx0XHRlbGVtZW50LmRpc3BsYXlOYW1lLnN0YXJ0c1dpdGgoJ01lbW8oJylcblx0KTtcbn1cblxuLyoqXG4gKiBXcmFwIGBjbG9uZUVsZW1lbnRgIHRvIGFib3J0IGlmIHRoZSBwYXNzZWQgZWxlbWVudCBpcyBub3QgYSB2YWxpZCBlbGVtZW50IGFuZCBhcHBseVxuICogYWxsIHZub2RlIG5vcm1hbGl6YXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gZWxlbWVudCBUaGUgdm5vZGUgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBQcm9wcyB0byBhZGQgd2hlbiBjbG9uaW5nXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudENoaWxkcmVuPn0gcmVzdCBPcHRpb25hbCBjb21wb25lbnQgY2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQpIHtcblx0aWYgKCFpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdHJldHVybiBwcmVhY3RDbG9uZUVsZW1lbnQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjb21wb25lbnQgdHJlZSBmcm9tIHRoZSBET00sIGluY2x1ZGluZyBzdGF0ZSBhbmQgZXZlbnQgaGFuZGxlcnMuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG5cdGlmIChjb250YWluZXIuX2NoaWxkcmVuKSB7XG5cdFx0cHJlYWN0UmVuZGVyKG51bGwsIGNvbnRhaW5lcik7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbWF0Y2hpbmcgRE9NIG5vZGUgZm9yIGEgY29tcG9uZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudCB8IG51bGx9XG4gKi9cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudCkge1xuXHRyZXR1cm4gKFxuXHRcdChjb21wb25lbnQgJiZcblx0XHRcdChjb21wb25lbnQuYmFzZSB8fCAoY29tcG9uZW50Lm5vZGVUeXBlID09PSAxICYmIGNvbXBvbmVudCkpKSB8fFxuXHRcdG51bGxcblx0KTtcbn1cblxuLyoqXG4gKiBEZXByZWNhdGVkIHdheSB0byBjb250cm9sIGJhdGNoZWQgcmVuZGVyaW5nIGluc2lkZSB0aGUgcmVjb25jaWxlciwgYnV0IHdlXG4gKiBhbHJlYWR5IHNjaGVkdWxlIGluIGJhdGNoZXMgaW5zaWRlIG91ciByZW5kZXJpbmcgY29kZVxuICogQHRlbXBsYXRlIEFyZ1xuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IHZvaWR9IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgdGhlIHVwZGF0ZWRcbiAqIEBwYXJhbSB7QXJnfSBbYXJnXSBPcHRpb25hbCBhcmd1bWVudCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbmNvbnN0IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gKGNhbGxiYWNrLCBhcmcpID0+IGNhbGxiYWNrKGFyZyk7XG5cbi8qKlxuICogSW4gUmVhY3QsIGBmbHVzaFN5bmNgIGZsdXNoZXMgdGhlIGVudGlyZSB0cmVlIGFuZCBmb3JjZXMgYSByZXJlbmRlci4gSXQnc1xuICogaW1wbG1lbnRlZCBoZXJlIGFzIGEgbm8tb3AuXG4gKiBAdGVtcGxhdGUgQXJnXG4gKiBAdGVtcGxhdGUgUmVzdWx0XG4gKiBAcGFyYW0geyhhcmc6IEFyZykgPT4gUmVzdWx0fSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJ1bnMgYmVmb3JlIHRoZSBmbHVzaFxuICogQHBhcmFtIHtBcmd9IFthcmddIE9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2tcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGZsdXNoU3luYyA9IChjYWxsYmFjaywgYXJnKSA9PiBjYWxsYmFjayhhcmcpO1xuXG4vKipcbiAqIFN0cmljdCBNb2RlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBQcmVhY3QsIHNvIHdlIHByb3ZpZGUgYSBzdGFuZC1pbiBmb3IgaXRcbiAqIHRoYXQganVzdCByZW5kZXJzIGl0cyBjaGlsZHJlbiB3aXRob3V0IGltcG9zaW5nIGFueSByZXN0cmljdGlvbnMuXG4gKi9cbmNvbnN0IFN0cmljdE1vZGUgPSBGcmFnbWVudDtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihjYikge1xuXHRjYigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVmZXJyZWRWYWx1ZSh2YWwpIHtcblx0cmV0dXJuIHZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRyYW5zaXRpb24oKSB7XG5cdHJldHVybiBbZmFsc2UsIHN0YXJ0VHJhbnNpdGlvbl07XG59XG5cbi8vIFRPRE86IGluIHRoZW9yeSB0aGlzIHNob3VsZCBiZSBkb25lIGFmdGVyIGEgVk5vZGUgaXMgZGlmZmVkIGFzIHdlIHdhbnQgdG8gaW5zZXJ0XG4vLyBzdHlsZXMvLi4uIGJlZm9yZSBpdCBhdHRhY2hlc1xuZXhwb3J0IGNvbnN0IHVzZUluc2VydGlvbkVmZmVjdCA9IHVzZUxheW91dEVmZmVjdDtcblxuLy8gY29tcGF0IHRvIHJlYWN0LWlzXG5leHBvcnQgY29uc3QgaXNFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5cbi8qKlxuICogVGhpcyBpcyB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21haW4vcGFja2FnZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc3JjL3VzZVN5bmNFeHRlcm5hbFN0b3JlU2hpbUNsaWVudC5qcyNMODRcbiAqIG9uIGEgaGlnaCBsZXZlbCB0aGlzIGN1dHMgb3V0IHRoZSB3YXJuaW5ncywgLi4uIGFuZCBhdHRlbXB0cyBhIHNtYWxsZXIgaW1wbGVtZW50YXRpb25cbiAqIEB0eXBlZGVmIHt7IF92YWx1ZTogYW55OyBfZ2V0U25hcHNob3Q6ICgpID0+IGFueSB9fSBTdG9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCkge1xuXHRjb25zdCB2YWx1ZSA9IGdldFNuYXBzaG90KCk7XG5cblx0LyoqXG5cdCAqIEB0eXBlZGVmIHt7IF9pbnN0YW5jZTogU3RvcmUgfX0gU3RvcmVSZWZcblx0ICogQHR5cGUge1tTdG9yZVJlZiwgKHN0b3JlOiBTdG9yZVJlZikgPT4gdm9pZF19XG5cdCAqL1xuXHRjb25zdCBbeyBfaW5zdGFuY2UgfSwgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUoe1xuXHRcdF9pbnN0YW5jZTogeyBfdmFsdWU6IHZhbHVlLCBfZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH1cblx0fSk7XG5cblx0dXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcblx0XHRfaW5zdGFuY2UuX3ZhbHVlID0gdmFsdWU7XG5cdFx0X2luc3RhbmNlLl9nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuXG5cdFx0aWYgKGRpZFNuYXBzaG90Q2hhbmdlKF9pbnN0YW5jZSkpIHtcblx0XHRcdGZvcmNlVXBkYXRlKHsgX2luc3RhbmNlIH0pO1xuXHRcdH1cblx0fSwgW3N1YnNjcmliZSwgdmFsdWUsIGdldFNuYXBzaG90XSk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZGlkU25hcHNob3RDaGFuZ2UoX2luc3RhbmNlKSkge1xuXHRcdFx0Zm9yY2VVcGRhdGUoeyBfaW5zdGFuY2UgfSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAoZGlkU25hcHNob3RDaGFuZ2UoX2luc3RhbmNlKSkge1xuXHRcdFx0XHRmb3JjZVVwZGF0ZSh7IF9pbnN0YW5jZSB9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSwgW3N1YnNjcmliZV0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIEB0eXBlIHsoaW5zdDogU3RvcmUpID0+IGJvb2xlYW59ICovXG5mdW5jdGlvbiBkaWRTbmFwc2hvdENoYW5nZShpbnN0KSB7XG5cdGNvbnN0IGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5fZ2V0U25hcHNob3Q7XG5cdGNvbnN0IHByZXZWYWx1ZSA9IGluc3QuX3ZhbHVlO1xuXHR0cnkge1xuXHRcdGNvbnN0IG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG5cdFx0cmV0dXJuICFpcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZXhwb3J0ICogZnJvbSAncHJlYWN0L2hvb2tzJztcbmV4cG9ydCB7XG5cdHZlcnNpb24sXG5cdENoaWxkcmVuLFxuXHRyZW5kZXIsXG5cdGh5ZHJhdGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdGNyZWF0ZVBvcnRhbCxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdEZyYWdtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0aXNGcmFnbWVudCxcblx0aXNNZW1vLFxuXHRmaW5kRE9NTm9kZSxcblx0Q29tcG9uZW50LFxuXHRQdXJlQ29tcG9uZW50LFxuXHRtZW1vLFxuXHRmb3J3YXJkUmVmLFxuXHRmbHVzaFN5bmMsXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2Vcblx0dW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsXG5cdFN0cmljdE1vZGUsXG5cdFN1c3BlbnNlLFxuXHRTdXNwZW5zZUxpc3QsXG5cdGxhenksXG5cdF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEXG59O1xuXG4vLyBSZWFjdCBjb3BpZXMgdGhlIG5hbWVkIGV4cG9ydHMgdG8gdGhlIGRlZmF1bHQgb25lLlxuZXhwb3J0IGRlZmF1bHQge1xuXHR1c2VTdGF0ZSxcblx0dXNlSWQsXG5cdHVzZVJlZHVjZXIsXG5cdHVzZUVmZmVjdCxcblx0dXNlTGF5b3V0RWZmZWN0LFxuXHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdHVzZVRyYW5zaXRpb24sXG5cdHVzZURlZmVycmVkVmFsdWUsXG5cdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHRzdGFydFRyYW5zaXRpb24sXG5cdHVzZVJlZixcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTWVtbyxcblx0dXNlQ2FsbGJhY2ssXG5cdHVzZUNvbnRleHQsXG5cdHVzZURlYnVnVmFsdWUsXG5cdHZlcnNpb24sXG5cdENoaWxkcmVuLFxuXHRyZW5kZXIsXG5cdGh5ZHJhdGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdGNyZWF0ZVBvcnRhbCxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdEZyYWdtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0aXNFbGVtZW50LFxuXHRpc0ZyYWdtZW50LFxuXHRpc01lbW8sXG5cdGZpbmRET01Ob2RlLFxuXHRDb21wb25lbnQsXG5cdFB1cmVDb21wb25lbnQsXG5cdG1lbW8sXG5cdGZvcndhcmRSZWYsXG5cdGZsdXNoU3luYyxcblx0dW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsXG5cdFN0cmljdE1vZGUsXG5cdFN1c3BlbnNlLFxuXHRTdXNwZW5zZUxpc3QsXG5cdGxhenksXG5cdF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEXG59O1xuIiwgImNvbnN0IEVOQ09ERURfRU5USVRJRVMgPSAvW1wiJjxdLztcblxuLyoqIEBwYXJhbSB7c3RyaW5nfSBzdHIgKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFbnRpdGllcyhzdHIpIHtcblx0Ly8gU2tpcCBhbGwgd29yayBmb3Igc3RyaW5ncyB3aXRoIG5vIGVudGl0aWVzIG5lZWRpbmcgZW5jb2Rpbmc6XG5cdGlmIChzdHIubGVuZ3RoID09PSAwIHx8IEVOQ09ERURfRU5USVRJRVMudGVzdChzdHIpID09PSBmYWxzZSkgcmV0dXJuIHN0cjtcblxuXHRsZXQgbGFzdCA9IDAsXG5cdFx0aSA9IDAsXG5cdFx0b3V0ID0gJycsXG5cdFx0Y2ggPSAnJztcblxuXHQvLyBTZWVrIGZvcndhcmQgaW4gc3RyIHVudGlsIHRoZSBuZXh0IGVudGl0eSBjaGFyOlxuXHRmb3IgKDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaSkpIHtcblx0XHRcdGNhc2UgMzQ6XG5cdFx0XHRcdGNoID0gJyZxdW90Oyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0Y2ggPSAnJmFtcDsnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgNjA6XG5cdFx0XHRcdGNoID0gJyZsdDsnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHQvLyBBcHBlbmQgc2tpcHBlZC9idWZmZXJlZCBjaGFyYWN0ZXJzIGFuZCB0aGUgZW5jb2RlZCBlbnRpdHk6XG5cdFx0aWYgKGkgIT09IGxhc3QpIG91dCArPSBzdHIuc2xpY2UobGFzdCwgaSk7XG5cdFx0b3V0ICs9IGNoO1xuXHRcdC8vIFN0YXJ0IHRoZSBuZXh0IHNlZWsvYnVmZmVyIGFmdGVyIHRoZSBlbnRpdHkncyBvZmZzZXQ6XG5cdFx0bGFzdCA9IGkgKyAxO1xuXHR9XG5cdGlmIChpICE9PSBsYXN0KSBvdXQgKz0gc3RyLnNsaWNlKGxhc3QsIGkpO1xuXHRyZXR1cm4gb3V0O1xufVxuIiwgIi8qKiBOb3JtYWwgaHlkcmF0aW9uIHRoYXQgYXR0YWNoZXMgdG8gYSBET00gdHJlZSBidXQgZG9lcyBub3QgZGlmZiBpdC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFX0hZRFJBVEUgPSAxIDw8IDU7XG4vKiogU2lnbmlmaWVzIHRoaXMgVk5vZGUgc3VzcGVuZGVkIG9uIHRoZSBwcmV2aW91cyByZW5kZXIgKi9cbmV4cG9ydCBjb25zdCBNT0RFX1NVU1BFTkRFRCA9IDEgPDwgNztcbi8qKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIG5vZGUgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgd2hpbGUgcGF0Y2hpbmcgY2hpbGRyZW4gKi9cbmV4cG9ydCBjb25zdCBJTlNFUlRfVk5PREUgPSAxIDw8IDE2O1xuLyoqIEluZGljYXRlcyBhIFZOb2RlIGhhcyBiZWVuIG1hdGNoZWQgd2l0aCBhbm90aGVyIFZOb2RlIGluIHRoZSBkaWZmICovXG5leHBvcnQgY29uc3QgTUFUQ0hFRCA9IDEgPDwgMTc7XG5cbi8qKiBSZXNldCBhbGwgbW9kZSBmbGFncyAqL1xuZXhwb3J0IGNvbnN0IFJFU0VUX01PREUgPSB+KE1PREVfSFlEUkFURSB8IE1PREVfU1VTUEVOREVEKTtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX09CSiA9IC8qKiBAdHlwZSB7YW55fSAqLyAoe30pO1xuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUiA9IFtdO1xuZXhwb3J0IGNvbnN0IElTX05PTl9ESU1FTlNJT05BTCA9XG5cdC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2k7XG4iLCAiaW1wb3J0IHsgb3B0aW9ucywgRnJhZ21lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgZW5jb2RlRW50aXRpZXMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IElTX05PTl9ESU1FTlNJT05BTCB9IGZyb20gJy4uLy4uL3NyYy9jb25zdGFudHMnO1xuXG5sZXQgdm5vZGVJZCA9IDA7XG5cbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIFRoaXMgZmlsZSBleHBvcnRzIHZhcmlvdXMgbWV0aG9kcyB0aGF0IGltcGxlbWVudCBCYWJlbCdzIFwiYXV0b21hdGljXCIgSlNYIHJ1bnRpbWUgQVBJOlxuICogLSBqc3godHlwZSwgcHJvcHMsIGtleSlcbiAqIC0ganN4cyh0eXBlLCBwcm9wcywga2V5KVxuICogLSBqc3hERVYodHlwZSwgcHJvcHMsIGtleSwgX19zb3VyY2UsIF9fc2VsZilcbiAqXG4gKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgY3JlYXRlVk5vZGUgaGVyZSBpcyBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLlxuICogQmVuY2htYXJrczogaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81ZjZiNTRhMGI0NjMyMTAwYTdkY2QyYjNcbiAqL1xuXG4vKipcbiAqIEpTWC5FbGVtZW50IGZhY3RvcnkgdXNlZCBieSBCYWJlbCdzIHtydW50aW1lOlwiYXV0b21hdGljXCJ9IEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7Vk5vZGVbJ3R5cGUnXX0gdHlwZVxuICogQHBhcmFtIHtWTm9kZVsncHJvcHMnXX0gcHJvcHNcbiAqIEBwYXJhbSB7Vk5vZGVbJ2tleSddfSBba2V5XVxuICogQHBhcmFtIHt1bmtub3dufSBbaXNTdGF0aWNDaGlsZHJlbl1cbiAqIEBwYXJhbSB7dW5rbm93bn0gW19fc291cmNlXVxuICogQHBhcmFtIHt1bmtub3dufSBbX19zZWxmXVxuICovXG5mdW5jdGlvbiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBfX3NvdXJjZSwgX19zZWxmKSB7XG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cdC8vIFdlJ2xsIHdhbnQgdG8gcHJlc2VydmUgYHJlZmAgaW4gcHJvcHMgdG8gZ2V0IHJpZCBvZiB0aGUgbmVlZCBmb3Jcblx0Ly8gZm9yd2FyZFJlZiBjb21wb25lbnRzIGluIHRoZSBmdXR1cmUsIGJ1dCB0aGF0IHNob3VsZCBoYXBwZW4gdmlhXG5cdC8vIGEgc2VwYXJhdGUgUFIuXG5cdGxldCBub3JtYWxpemVkUHJvcHMgPSBwcm9wcyxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRpZiAoJ3JlZicgaW4gbm9ybWFsaXplZFByb3BzKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzID0ge307XG5cdFx0Zm9yIChpIGluIHByb3BzKSB7XG5cdFx0XHRpZiAoaSA9PSAncmVmJykge1xuXHRcdFx0XHRyZWYgPSBwcm9wc1tpXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vcm1hbGl6ZWRQcm9wc1tpXSA9IHByb3BzW2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBAdHlwZSB7Vk5vZGUgJiB7IF9fc291cmNlOiBhbnk7IF9fc2VsZjogYW55IH19ICovXG5cdGNvbnN0IHZub2RlID0ge1xuXHRcdHR5cGUsXG5cdFx0cHJvcHM6IG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdF9jaGlsZHJlbjogbnVsbCxcblx0XHRfcGFyZW50OiBudWxsLFxuXHRcdF9kZXB0aDogMCxcblx0XHRfZG9tOiBudWxsLFxuXHRcdF9uZXh0RG9tOiB1bmRlZmluZWQsXG5cdFx0X2NvbXBvbmVudDogbnVsbCxcblx0XHRjb25zdHJ1Y3RvcjogdW5kZWZpbmVkLFxuXHRcdF9vcmlnaW5hbDogLS12bm9kZUlkLFxuXHRcdF9pbmRleDogLTEsXG5cdFx0X2ZsYWdzOiAwLFxuXHRcdF9fc291cmNlLFxuXHRcdF9fc2VsZlxuXHR9O1xuXG5cdC8vIElmIGEgQ29tcG9uZW50IFZOb2RlLCBjaGVjayBmb3IgYW5kIGFwcGx5IGRlZmF1bHRQcm9wcy5cblx0Ly8gTm90ZTogYHR5cGVgIGlzIG9mdGVuIGEgU3RyaW5nLCBhbmQgY2FuIGJlIGB1bmRlZmluZWRgIGluIGRldmVsb3BtZW50LlxuXHRpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgKHJlZiA9IHR5cGUuZGVmYXVsdFByb3BzKSkge1xuXHRcdGZvciAoaSBpbiByZWYpXG5cdFx0XHRpZiAodHlwZW9mIG5vcm1hbGl6ZWRQcm9wc1tpXSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gcmVmW2ldO1xuXHRcdFx0fVxuXHR9XG5cblx0aWYgKG9wdGlvbnMudm5vZGUpIG9wdGlvbnMudm5vZGUodm5vZGUpO1xuXHRyZXR1cm4gdm5vZGU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcGxhdGUgdm5vZGUuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGV4cGVjdGVkIHRvIGJlXG4gKiB1c2VkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHRocm91Z2ggYSBwcmVjb21waWxlIEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7c3RyaW5nW119IHRlbXBsYXRlc1xuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nIHwgbnVsbCB8IFZOb2RlPn0gZXhwcnNcbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZnVuY3Rpb24ganN4VGVtcGxhdGUodGVtcGxhdGVzLCAuLi5leHBycykge1xuXHRjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKEZyYWdtZW50LCB7IHRwbDogdGVtcGxhdGVzLCBleHBycyB9KTtcblx0Ly8gQnlwYXNzIHJlbmRlciB0byBzdHJpbmcgdG9wIGxldmVsIEZyYWdtZW50IG9wdGltaXphdGlvblxuXHR2bm9kZS5rZXkgPSB2bm9kZS5fdm5vZGU7XG5cdHJldHVybiB2bm9kZTtcbn1cblxuY29uc3QgSlNfVE9fQ1NTID0ge307XG5jb25zdCBDU1NfUkVHRVggPSAvW0EtWl0vZztcblxuLyoqXG4gKiBTZXJpYWxpemUgYW4gSFRNTCBhdHRyaWJ1dGUgdG8gYSBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gaXMgbm90XG4gKiBleHBlY3RlZCB0byBiZSB1c2VkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHRocm91Z2ggYSBwcmVjb21waWxlXG4gKiBKU1ggdHJhbnNmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24ganN4QXR0cihuYW1lLCB2YWx1ZSkge1xuXHRpZiAob3B0aW9ucy5hdHRyKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gb3B0aW9ucy5hdHRyKG5hbWUsIHZhbHVlKTtcblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRpZiAobmFtZSA9PT0gJ3JlZicgfHwgbmFtZSA9PT0gJ2tleScpIHJldHVybiAnJztcblx0aWYgKG5hbWUgPT09ICdzdHlsZScgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdGxldCBzdHIgPSAnJztcblx0XHRmb3IgKGxldCBwcm9wIGluIHZhbHVlKSB7XG5cdFx0XHRsZXQgdmFsID0gdmFsdWVbcHJvcF07XG5cdFx0XHRpZiAodmFsICE9IG51bGwgJiYgdmFsICE9PSAnJykge1xuXHRcdFx0XHRjb25zdCBuYW1lID1cblx0XHRcdFx0XHRwcm9wWzBdID09ICctJ1xuXHRcdFx0XHRcdFx0PyBwcm9wXG5cdFx0XHRcdFx0XHQ6IEpTX1RPX0NTU1twcm9wXSB8fFxuXHRcdFx0XHRcdFx0ICAoSlNfVE9fQ1NTW3Byb3BdID0gcHJvcC5yZXBsYWNlKENTU19SRUdFWCwgJy0kJicpLnRvTG93ZXJDYXNlKCkpO1xuXG5cdFx0XHRcdGxldCBzdWZmaXggPSAnOyc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0XHRcdC8vIEV4Y2x1ZGUgY3VzdG9tLWF0dHJpYnV0ZXNcblx0XHRcdFx0XHQhbmFtZS5zdGFydHNXaXRoKCctLScpICYmXG5cdFx0XHRcdFx0IUlTX05PTl9ESU1FTlNJT05BTC50ZXN0KG5hbWUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN1ZmZpeCA9ICdweDsnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0ciA9IHN0ciArIG5hbWUgKyAnOicgKyB2YWwgKyBzdWZmaXg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lICsgJz1cIicgKyBzdHIgKyAnXCInO1xuXHR9XG5cblx0aWYgKFxuXHRcdHZhbHVlID09IG51bGwgfHxcblx0XHR2YWx1ZSA9PT0gZmFsc2UgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG5cdCkge1xuXHRcdHJldHVybiAnJztcblx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIG5hbWU7XG5cblx0cmV0dXJuIG5hbWUgKyAnPVwiJyArIGVuY29kZUVudGl0aWVzKHZhbHVlKSArICdcIic7XG59XG5cbi8qKlxuICogRXNjYXBlIGEgZHluYW1pYyBjaGlsZCBwYXNzZWQgdG8gYGpzeFRlbXBsYXRlYC4gVGhpcyBmdW5jdGlvblxuICogaXMgbm90IGV4cGVjdGVkIHRvIGJlIHVzZWQgZGlyZWN0bHksIGJ1dCByYXRoZXIgdGhyb3VnaCBhXG4gKiBwcmVjb21waWxlIEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsIHwgVk5vZGUgfCBBcnJheTxzdHJpbmcgfCBudWxsIHwgVk5vZGU+fVxuICovXG5mdW5jdGlvbiBqc3hFc2NhcGUodmFsdWUpIHtcblx0aWYgKFxuXHRcdHZhbHVlID09IG51bGwgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fFxuXHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuXHQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0Ly8gQ2hlY2sgZm9yIFZOb2RlXG5cdFx0aWYgKHZhbHVlLmNvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcblxuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YWx1ZVtpXSA9IGpzeEVzY2FwZSh2YWx1ZVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVuY29kZUVudGl0aWVzKCcnICsgdmFsdWUpO1xufVxuXG5leHBvcnQge1xuXHRjcmVhdGVWTm9kZSBhcyBqc3gsXG5cdGNyZWF0ZVZOb2RlIGFzIGpzeHMsXG5cdGNyZWF0ZVZOb2RlIGFzIGpzeERFVixcblx0RnJhZ21lbnQsXG5cdC8vIHByZWNvbXBpbGVkIEpTWCB0cmFuc2Zvcm1cblx0anN4VGVtcGxhdGUsXG5cdGpzeEF0dHIsXG5cdGpzeEVzY2FwZVxufTtcbiIsICIvKipcbiAqIEBtb2R1bGUgdWlcbiAqL1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWR1Y2VyLCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQge1xuICAgIEFQUF9DT05URVhULFxuICAgIENPTVBPTkVOVF9DT05URVhULFxuICAgIENVUlJFTlRfRklMRV9DT05URVhULFxuICAgIERBVEFDT1JFX0NPTlRFWFQsXG4gICAgRXJyb3JNZXNzYWdlLFxuICAgIE1hcmtkb3duLFxufSBmcm9tIFwiLi4vLi4vdWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBnZXRGaWxlVGl0bGUsIGxpbmVSYW5nZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG5pbXBvcnQgXCIuL2VtYmVkLmNzc1wiO1xuXG4vKiogUmVuZGVycyBhbiBlbWJlZCBpbiB0aGUgY2Fub25pY2FsIE9ic2lkaWFuIHN0eWxlLlxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbWJlZCh7XG4gICAgbGluayxcbiAgICBpbmxpbmUsXG4gICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxufToge1xuICAgIC8qKiBUaGUgbGluayB0aGF0IGlzIGJlaW5nIGVtYmVkZGVkLiAqL1xuICAgIGxpbms6IExpbms7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGVtYmVkIHNob3VsZCBiZSBzaG93biBpbmxpbmUgd2l0aCBsZXNzIHBhZGRpbmcuICovXG4gICAgaW5saW5lOiBib29sZWFuO1xuICAgIC8qKiBUaGUgcGF0aCB3aGljaCB0aGUgbGluayB3aWxsIGJlIHJlc29sdmVkIHJlbGF0aXZlIHRvLiAqL1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgYXBwID0gdXNlQ29udGV4dChBUFBfQ09OVEVYVCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdXNlQ29udGV4dChDT01QT05FTlRfQ09OVEVYVCk7XG4gICAgY29uc3QgY3VycmVudEZpbGUgPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gbWF5YmVTb3VyY2VQYXRoID8/IGN1cnJlbnRGaWxlID8/IFwiXCI7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICBjb25zdCBsaW5rZWRGaWxlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGluay5wYXRoLCBzb3VyY2VQYXRoKSxcbiAgICAgICAgW2xpbmsucGF0aCwgc291cmNlUGF0aF1cbiAgICApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjb250YWluZXIuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWxpbmtlZEZpbGUpIHJldHVybjtcblxuICAgICAgICBjb250YWluZXIuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0b3IgPSBhcHAuZW1iZWRSZWdpc3RyeS5nZXRFbWJlZENyZWF0b3IobGlua2VkRmlsZSk7XG4gICAgICAgIGxldCBlbWJlZENvbXBvbmVudCA9IG5ldyBjcmVhdG9yKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmt0ZXh0OiBsaW5rLnBhdGgsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICAgICAgICBzaG93SW5saW5lOiBpbmxpbmUsXG4gICAgICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsOiBjb250YWluZXIuY3VycmVudCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5rZWRGaWxlLFxuICAgICAgICAgICAgbGluay5zdWJwYXRoXG4gICAgICAgICk7XG5cbiAgICAgICAgY29tcG9uZW50LmFkZENoaWxkKGVtYmVkQ29tcG9uZW50KTtcbiAgICAgICAgZW1iZWRDb21wb25lbnQubG9hZEZpbGUobGlua2VkRmlsZSk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IGNvbXBvbmVudC5yZW1vdmVDaGlsZChlbWJlZENvbXBvbmVudCk7XG4gICAgfSwgW2NvbnRhaW5lci5jdXJyZW50LCBsaW5rZWRGaWxlLCBsaW5rLnN1YnBhdGhdKTtcblxuICAgIGlmICghbGlua2VkRmlsZSkge1xuICAgICAgICByZXR1cm4gPEVycm9yTWVzc2FnZSBtZXNzYWdlPXtgQ291bGQgbm90IGZpbmQgYSBwYWdlIGF0IGxpbmtlZCBsb2NhdGlvbjogJHtsaW5rLnBhdGh9YH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGMtZW1iZWRcIiByZWY9e2NvbnRhaW5lcn0+PC9kaXY+O1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBlbWJlZCBvZiBhbiBhcmJpdHJhcnkgc3BhbiBvZiBsaW5lcyBpbiBhIE1hcmtkb3duIGZpbGUuIE9wZXJhdGVzIGJ5IGFzeW5jaHJvbm91c2x5IGxvYWRpbmcgdGhlIGZpbGUgYW5kIHB1bGxpbmdcbiAqIG91dCB0aGUgZ2l2ZW4gW3N0YXJ0LCBlbmQpIGxpbmUgc3Bhbi5cbiAqXG4gKiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGZpbGUgb24gZGlzayB0byBiZSBkaWZmZXJlbnQgdGhhbiBpdCB3YXMgd2hlbiB5b3UgZmlyc3QgbG9hZGVkIHRoZSBbc3RhcnQsIGVuZCkgbGluZSBzcGFuXG4gKiAtIGdlbmVyYWxseSwgZGF0YWNvcmUgd2lsbCBhc3luY2hyb25vdXNseSByZWxvYWQgdGhlc2UgZmlsZXMgaW4gdGhlIGJhY2tncm91bmQgYW5kIGZpeCBpdCdzIGluZGV4LCBidXQgeW91IG1heSBoYXZlIHNvbWVcbiAqIHN0cmFuZ2UgYXJ0aWZhY3RzIG90aGVyd2lzZS5cbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gTGluZVNwYW5FbWJlZCh7XG4gICAgcGF0aCxcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgZXhwbGFpbixcbiAgICBzaG93RXhwbGFpbiA9IHRydWUsXG59OiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgZW5kOiBudW1iZXI7XG4gICAgZXhwbGFpbj86IHN0cmluZztcbiAgICBzaG93RXhwbGFpbj86IGJvb2xlYW47XG59KSB7XG4gICAgY29uc3QgY29udGVudCA9IHVzZUxpbmVTcGFuKHBhdGgsIHN0YXJ0LCBlbmQpO1xuICAgIGNvbnN0IGV4cGxhaW5lciA9IGV4cGxhaW4gPz8gYCR7Z2V0RmlsZVRpdGxlKHBhdGgpfSAoJHtzdGFydH0gLSAke2VuZH0pYDtcblxuICAgIC8vIFRvIGFsbG93IGZvciB0aGUgZXhwbGFpbmVyIHRvIGJlIGNsaWNrZWQgb24gdG8gbmF2aWdhdGUgdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbnN0IHdvcmtzcGFjZSA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpPy53b3Jrc3BhY2U7XG4gICAgY29uc3Qgb25FeHBsYWluQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB3b3Jrc3BhY2U/Lm9wZW5MaW5rVGV4dChwYXRoLCBwYXRoLCBldmVudC5zaGlmdEtleSksXG4gICAgICAgIFtwYXRoXVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGNvbnRlbnQudHlwZSkge1xuICAgICAgICBjYXNlIFwibG9hZGluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT17YFJlYWRpbmcgJHtwYXRofSAoJHtzdGFydH0gLSAke2VuZH0pYH0gLz47XG4gICAgICAgIGNhc2UgXCJmaWxlLW5vdC1mb3VuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT17YENvdWxkIG5vdCBmaW5kIGEgZmlsZSBhdCBwYXRoOiAke2NvbnRlbnQucGF0aH1gfSAvPjtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgICByZXR1cm4gPEVycm9yTWVzc2FnZSBtZXNzYWdlPXtjb250ZW50Lm1lc3NhZ2V9IC8+O1xuICAgICAgICBjYXNlIFwibG9hZGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtc3Bhbi1lbWJlZFwiPlxuICAgICAgICAgICAgICAgICAgICB7c2hvd0V4cGxhaW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZW1iZWQtc291cmNlXCIgb25DbGljaz17b25FeHBsYWluQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBsYWluZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxNYXJrZG93biBjb250ZW50PXtjb250ZW50LmNvbnRlbnR9IGlubGluZT17ZmFsc2V9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIFN0YXRlIHRyYWNraW5nIGZvciBsb2FkaW5nIGEgbGluZSBzcGFuIGFzeW5jaHJvbm91c2x5LiAqL1xuZXhwb3J0IHR5cGUgTGluZVNwYW5Db250ZW50ID1cbiAgICB8IHsgdHlwZTogXCJsb2FkaW5nXCIgfVxuICAgIHwgeyB0eXBlOiBcImZpbGUtbm90LWZvdW5kXCI7IHBhdGg6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6IFwiZXJyb3JcIjsgbWVzc2FnZTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogXCJsb2FkZWRcIjsgY29udGVudDogc3RyaW5nIH07XG5cbi8qKiBVdGlsaXR5IGhvb2sgd2hpY2ggbG9hZHMgcGF0aFtzdGFydC4uZW5kKSBhcyBsb25nIGFzIHRoZSB0YXJnZXQgZmlsZSBleGlzdHMuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5lU3BhbihwYXRoOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogTGluZVNwYW5Db250ZW50IHtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBkYXRhY29yZSA9IHVzZUNvbnRleHQoREFUQUNPUkVfQ09OVEVYVCk7XG5cbiAgICBjb25zdCBbc3RhdGUsIHVwZGF0ZV0gPSB1c2VSZWR1Y2VyPExpbmVTcGFuQ29udGVudCwgTGluZVNwYW5Db250ZW50PihcbiAgICAgICAgKHN0YXRlLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gSWdub3JlIGFuIGVycm9yIHVwZGF0ZSB0aGF0IHdvdWxkIG92ZXJyaWRlIGEgdmFsaWQgY3VycmVudCBzdGF0ZTsgb3RoZXJ3aXNlLCB1cGRhdGUgdG8gdGhlIG5ldyBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChzdGF0ZS50eXBlID09IFwibG9hZGVkXCIgJiYgZXZlbnQudHlwZSAhPT0gXCJsb2FkZWRcIikgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogXCJsb2FkaW5nXCIgfVxuICAgICk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBjdXJyZW50IHBhdGggdG8gc2VlIGlmIGl0IHBvaW50cyB0byBhIHZhbGlkIGZpbGUuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKTtcbiAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdXBkYXRlKHsgdHlwZTogXCJmaWxlLW5vdC1mb3VuZFwiLCBwYXRoOiBwYXRoIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IHRvIGxvYWQgdGhlIGZpbGUgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgIGRhdGFjb3JlXG4gICAgICAgICAgICAucmVhZChmaWxlKVxuICAgICAgICAgICAgLnRoZW4oKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoeyB0eXBlOiBcImxvYWRlZFwiLCBjb250ZW50OiBsaW5lUmFuZ2UoY29udGVudCwgc3RhcnQsIGVuZCkgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh7IHR5cGU6IFwiZXJyb3JcIiwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH0sIFtwYXRoLCBzdGFydCwgZW5kXSk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG59XG4iLCAiaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBTaW1wbGVFcnJvckJvdW5kYXJ5LCBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgRGF0YWNvcmVDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IEFwcCwgTWFya2Rvd25SZW5kZXJDaGlsZCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgRGF0YWNvcmVMb2NhbEFwaSB9IGZyb20gXCJhcGkvbG9jYWwtYXBpXCI7XG5pbXBvcnQgeyBoLCByZW5kZXIsIEZyYWdtZW50LCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVubW91bnRDb21wb25lbnRBdE5vZGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UsIGFzeW5jRXZhbEluQ29udGV4dCwgdHJhbnNwaWxlIH0gZnJvbSBcInV0aWxzL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IExvYWRpbmdCb3VuZGFyeSwgU2NyaXB0Q29udGFpbmVyIH0gZnJvbSBcIi4vbG9hZGluZy1ib3VuZGFyeVwiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcblxuLyoqXG4gKiBSZW5kZXJzIGEgc2NyaXB0IGJ5IGV4ZWN1dGluZyBpdCBhbmQgaGFuZGluZyBpdCB0aGUgYXBwcm9wcmlhdGUgUmVhY3QgY29udGV4dCB0byBleGVjdXRlXG4gKiBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWNvcmVKU1JlbmRlcmVyIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgcHJpdmF0ZSBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGFwaTogRGF0YWNvcmVMb2NhbEFwaSxcbiAgICAgICAgcHVibGljIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgIHB1YmxpYyBwYXRoOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBzY3JpcHQ6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhbmd1YWdlOiBTY3JpcHRMYW5ndWFnZVxuICAgICkge1xuICAgICAgICBzdXBlcihjb250YWluZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgc2NyaXB0IHRvIHByb2R1Y2UgZWl0aGVyIGEgcmVuZGVyYWJsZSBKU1ggb2JqZWN0IG9yIGEgZnVuY3Rpb24uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcmltaXRpdmVTY3JpcHQgPSB0cmFuc3BpbGUodGhpcy5zY3JpcHQsIHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGFzeW5jRXZhbEluQ29udGV4dChwcmltaXRpdmVTY3JpcHQsIHtcbiAgICAgICAgICAgICAgICAgICAgZGM6IHRoaXMuYXBpLFxuICAgICAgICAgICAgICAgICAgICBoOiBoLFxuICAgICAgICAgICAgICAgICAgICBGcmFnbWVudDogRnJhZ21lbnQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgPERhdGFjb3JlQ29udGV4dFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgIGFwcD17dGhpcy5hcGkuYXBwfVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e3RoaXN9XG4gICAgICAgICAgICAgICAgICAgIGRhdGFjb3JlPXt0aGlzLmFwaS5jb3JlfVxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncz17dGhpcy5hcGkuY29yZS5zZXR0aW5nc31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDVVJSRU5UX0ZJTEVfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17dGhpcy5wYXRofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTaW1wbGVFcnJvckJvdW5kYXJ5IG1lc3NhZ2U9XCJUaGUgZGF0YWNvcmUgc2NyaXB0IGZhaWxlZCB0byBleGVjdXRlLlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nQm91bmRhcnkgZGF0YWNvcmU9e3RoaXMuYXBpLmNvcmV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2NyaXB0Q29udGFpbmVyIGV4ZWN1dG9yPXtyZW5kZXJlcn0gc291cmNlUGF0aD17dGhpcy5wYXRofSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTG9hZGluZ0JvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TaW1wbGVFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICA8L0NVUlJFTlRfRklMRV9DT05URVhULlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvRGF0YWNvcmVDb250ZXh0UHJvdmlkZXI+LFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIkRhdGFjb3JlIGZhaWxlZCB0byByZW5kZXIgdGhlIGNvZGUgYmxvY2suXCIgZXJyb3I9e1wiXCIgKyBleH0gLz4sXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZCkgdW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKiogQSB0cml2aWFsIHdyYXBwZXIgd2hpY2ggYWxsb3dzIGEgcmVhY3QgY29tcG9uZW50IHRvIGxpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIGBNYXJrZG93blJlbmRlckNoaWxkYC4gKi9cbmV4cG9ydCBjbGFzcyBSZWFjdFJlbmRlcmVyIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgYXBwOiBBcHAsXG4gICAgICAgIHB1YmxpYyBkYXRhY29yZTogRGF0YWNvcmUsXG4gICAgICAgIHB1YmxpYyBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBwdWJsaWMgc291cmNlUGF0aDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogVk5vZGVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25sb2FkKCk6IHZvaWQge1xuICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICA8RGF0YWNvcmVDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgICAgICAgICBhcHA9e3RoaXMuYXBwfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudD17dGhpc31cbiAgICAgICAgICAgICAgICBkYXRhY29yZT17dGhpcy5kYXRhY29yZX1cbiAgICAgICAgICAgICAgICBzZXR0aW5ncz17dGhpcy5kYXRhY29yZS5zZXR0aW5nc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q1VSUkVOVF9GSUxFX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e3RoaXMuc291cmNlUGF0aH0+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nQm91bmRhcnkgZGF0YWNvcmU9e3RoaXMuZGF0YWNvcmV9Pnt0aGlzLmVsZW1lbnR9PC9Mb2FkaW5nQm91bmRhcnk+XG4gICAgICAgICAgICAgICAgPC9DVVJSRU5UX0ZJTEVfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgICAgIDwvRGF0YWNvcmVDb250ZXh0UHJvdmlkZXI+LFxuICAgICAgICAgICAgdGhpcy5jb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIHVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5jb250YWluZXIpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgdmFyIENvbnRleHR1YWxLZXl3b3JkOyAoZnVuY3Rpb24gKENvbnRleHR1YWxLZXl3b3JkKSB7XG4gIGNvbnN0IE5PTkUgPSAwOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIk5PTkVcIl0gPSBOT05FXSA9IFwiTk9ORVwiO1xuICBjb25zdCBfYWJzdHJhY3QgPSBOT05FICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYWJzdHJhY3RcIl0gPSBfYWJzdHJhY3RdID0gXCJfYWJzdHJhY3RcIjtcbiAgY29uc3QgX2FjY2Vzc29yID0gX2Fic3RyYWN0ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYWNjZXNzb3JcIl0gPSBfYWNjZXNzb3JdID0gXCJfYWNjZXNzb3JcIjtcbiAgY29uc3QgX2FzID0gX2FjY2Vzc29yICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXNcIl0gPSBfYXNdID0gXCJfYXNcIjtcbiAgY29uc3QgX2Fzc2VydCA9IF9hcyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Fzc2VydFwiXSA9IF9hc3NlcnRdID0gXCJfYXNzZXJ0XCI7XG4gIGNvbnN0IF9hc3NlcnRzID0gX2Fzc2VydCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Fzc2VydHNcIl0gPSBfYXNzZXJ0c10gPSBcIl9hc3NlcnRzXCI7XG4gIGNvbnN0IF9hc3luYyA9IF9hc3NlcnRzICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXN5bmNcIl0gPSBfYXN5bmNdID0gXCJfYXN5bmNcIjtcbiAgY29uc3QgX2F3YWl0ID0gX2FzeW5jICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXdhaXRcIl0gPSBfYXdhaXRdID0gXCJfYXdhaXRcIjtcbiAgY29uc3QgX2NoZWNrcyA9IF9hd2FpdCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2NoZWNrc1wiXSA9IF9jaGVja3NdID0gXCJfY2hlY2tzXCI7XG4gIGNvbnN0IF9jb25zdHJ1Y3RvciA9IF9jaGVja3MgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9jb25zdHJ1Y3RvclwiXSA9IF9jb25zdHJ1Y3Rvcl0gPSBcIl9jb25zdHJ1Y3RvclwiO1xuICBjb25zdCBfZGVjbGFyZSA9IF9jb25zdHJ1Y3RvciArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2RlY2xhcmVcIl0gPSBfZGVjbGFyZV0gPSBcIl9kZWNsYXJlXCI7XG4gIGNvbnN0IF9lbnVtID0gX2RlY2xhcmUgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9lbnVtXCJdID0gX2VudW1dID0gXCJfZW51bVwiO1xuICBjb25zdCBfZXhwb3J0cyA9IF9lbnVtICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfZXhwb3J0c1wiXSA9IF9leHBvcnRzXSA9IFwiX2V4cG9ydHNcIjtcbiAgY29uc3QgX2Zyb20gPSBfZXhwb3J0cyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Zyb21cIl0gPSBfZnJvbV0gPSBcIl9mcm9tXCI7XG4gIGNvbnN0IF9nZXQgPSBfZnJvbSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2dldFwiXSA9IF9nZXRdID0gXCJfZ2V0XCI7XG4gIGNvbnN0IF9nbG9iYWwgPSBfZ2V0ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfZ2xvYmFsXCJdID0gX2dsb2JhbF0gPSBcIl9nbG9iYWxcIjtcbiAgY29uc3QgX2ltcGxlbWVudHMgPSBfZ2xvYmFsICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfaW1wbGVtZW50c1wiXSA9IF9pbXBsZW1lbnRzXSA9IFwiX2ltcGxlbWVudHNcIjtcbiAgY29uc3QgX2luZmVyID0gX2ltcGxlbWVudHMgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9pbmZlclwiXSA9IF9pbmZlcl0gPSBcIl9pbmZlclwiO1xuICBjb25zdCBfaW50ZXJmYWNlID0gX2luZmVyICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfaW50ZXJmYWNlXCJdID0gX2ludGVyZmFjZV0gPSBcIl9pbnRlcmZhY2VcIjtcbiAgY29uc3QgX2lzID0gX2ludGVyZmFjZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2lzXCJdID0gX2lzXSA9IFwiX2lzXCI7XG4gIGNvbnN0IF9rZXlvZiA9IF9pcyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2tleW9mXCJdID0gX2tleW9mXSA9IFwiX2tleW9mXCI7XG4gIGNvbnN0IF9taXhpbnMgPSBfa2V5b2YgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9taXhpbnNcIl0gPSBfbWl4aW5zXSA9IFwiX21peGluc1wiO1xuICBjb25zdCBfbW9kdWxlID0gX21peGlucyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX21vZHVsZVwiXSA9IF9tb2R1bGVdID0gXCJfbW9kdWxlXCI7XG4gIGNvbnN0IF9uYW1lc3BhY2UgPSBfbW9kdWxlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfbmFtZXNwYWNlXCJdID0gX25hbWVzcGFjZV0gPSBcIl9uYW1lc3BhY2VcIjtcbiAgY29uc3QgX29mID0gX25hbWVzcGFjZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX29mXCJdID0gX29mXSA9IFwiX29mXCI7XG4gIGNvbnN0IF9vcGFxdWUgPSBfb2YgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9vcGFxdWVcIl0gPSBfb3BhcXVlXSA9IFwiX29wYXF1ZVwiO1xuICBjb25zdCBfb3V0ID0gX29wYXF1ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX291dFwiXSA9IF9vdXRdID0gXCJfb3V0XCI7XG4gIGNvbnN0IF9vdmVycmlkZSA9IF9vdXQgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9vdmVycmlkZVwiXSA9IF9vdmVycmlkZV0gPSBcIl9vdmVycmlkZVwiO1xuICBjb25zdCBfcHJpdmF0ZSA9IF9vdmVycmlkZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3ByaXZhdGVcIl0gPSBfcHJpdmF0ZV0gPSBcIl9wcml2YXRlXCI7XG4gIGNvbnN0IF9wcm90ZWN0ZWQgPSBfcHJpdmF0ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3Byb3RlY3RlZFwiXSA9IF9wcm90ZWN0ZWRdID0gXCJfcHJvdGVjdGVkXCI7XG4gIGNvbnN0IF9wcm90byA9IF9wcm90ZWN0ZWQgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9wcm90b1wiXSA9IF9wcm90b10gPSBcIl9wcm90b1wiO1xuICBjb25zdCBfcHVibGljID0gX3Byb3RvICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfcHVibGljXCJdID0gX3B1YmxpY10gPSBcIl9wdWJsaWNcIjtcbiAgY29uc3QgX3JlYWRvbmx5ID0gX3B1YmxpYyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3JlYWRvbmx5XCJdID0gX3JlYWRvbmx5XSA9IFwiX3JlYWRvbmx5XCI7XG4gIGNvbnN0IF9yZXF1aXJlID0gX3JlYWRvbmx5ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfcmVxdWlyZVwiXSA9IF9yZXF1aXJlXSA9IFwiX3JlcXVpcmVcIjtcbiAgY29uc3QgX3NhdGlzZmllcyA9IF9yZXF1aXJlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfc2F0aXNmaWVzXCJdID0gX3NhdGlzZmllc10gPSBcIl9zYXRpc2ZpZXNcIjtcbiAgY29uc3QgX3NldCA9IF9zYXRpc2ZpZXMgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9zZXRcIl0gPSBfc2V0XSA9IFwiX3NldFwiO1xuICBjb25zdCBfc3RhdGljID0gX3NldCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3N0YXRpY1wiXSA9IF9zdGF0aWNdID0gXCJfc3RhdGljXCI7XG4gIGNvbnN0IF9zeW1ib2wgPSBfc3RhdGljICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfc3ltYm9sXCJdID0gX3N5bWJvbF0gPSBcIl9zeW1ib2xcIjtcbiAgY29uc3QgX3R5cGUgPSBfc3ltYm9sICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfdHlwZVwiXSA9IF90eXBlXSA9IFwiX3R5cGVcIjtcbiAgY29uc3QgX3VuaXF1ZSA9IF90eXBlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfdW5pcXVlXCJdID0gX3VuaXF1ZV0gPSBcIl91bmlxdWVcIjtcbiAgY29uc3QgX3VzaW5nID0gX3VuaXF1ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3VzaW5nXCJdID0gX3VzaW5nXSA9IFwiX3VzaW5nXCI7XG59KShDb250ZXh0dWFsS2V5d29yZCB8fCAoQ29udGV4dHVhbEtleXdvcmQgPSB7fSkpO1xuIiwgIi8vIEdlbmVyYXRlZCBmaWxlLCBkbyBub3QgZWRpdCEgUnVuIFwieWFybiBnZW5lcmF0ZVwiIHRvIHJlLWdlbmVyYXRlIHRoaXMgZmlsZS5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIEVudW0gb2YgYWxsIHRva2VuIHR5cGVzLCB3aXRoIGJpdCBmaWVsZHMgdG8gc2lnbmlmeSBtZWFuaW5nZnVsIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCB2YXIgVG9rZW5UeXBlOyAoZnVuY3Rpb24gKFRva2VuVHlwZSkge1xuICAvLyBQcmVjZWRlbmNlIDAgbWVhbnMgbm90IGFuIG9wZXJhdG9yOyBvdGhlcndpc2UgaXQgaXMgYSBwb3NpdGl2ZSBudW1iZXIgdXAgdG8gMTIuXG4gIGNvbnN0IFBSRUNFREVOQ0VfTUFTSyA9IDB4ZjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIlBSRUNFREVOQ0VfTUFTS1wiXSA9IFBSRUNFREVOQ0VfTUFTS10gPSBcIlBSRUNFREVOQ0VfTUFTS1wiO1xuICBjb25zdCBJU19LRVlXT1JEID0gMSA8PCA0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfS0VZV09SRFwiXSA9IElTX0tFWVdPUkRdID0gXCJJU19LRVlXT1JEXCI7XG4gIGNvbnN0IElTX0FTU0lHTiA9IDEgPDwgNTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIklTX0FTU0lHTlwiXSA9IElTX0FTU0lHTl0gPSBcIklTX0FTU0lHTlwiO1xuICBjb25zdCBJU19SSUdIVF9BU1NPQ0lBVElWRSA9IDEgPDwgNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIklTX1JJR0hUX0FTU09DSUFUSVZFXCJdID0gSVNfUklHSFRfQVNTT0NJQVRJVkVdID0gXCJJU19SSUdIVF9BU1NPQ0lBVElWRVwiO1xuICBjb25zdCBJU19QUkVGSVggPSAxIDw8IDc7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJJU19QUkVGSVhcIl0gPSBJU19QUkVGSVhdID0gXCJJU19QUkVGSVhcIjtcbiAgY29uc3QgSVNfUE9TVEZJWCA9IDEgPDwgODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIklTX1BPU1RGSVhcIl0gPSBJU19QT1NURklYXSA9IFwiSVNfUE9TVEZJWFwiO1xuICBjb25zdCBJU19FWFBSRVNTSU9OX1NUQVJUID0gMSA8PCA5OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfRVhQUkVTU0lPTl9TVEFSVFwiXSA9IElTX0VYUFJFU1NJT05fU1RBUlRdID0gXCJJU19FWFBSRVNTSU9OX1NUQVJUXCI7XG5cbiAgY29uc3QgbnVtID0gNTEyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibnVtXCJdID0gbnVtXSA9IFwibnVtXCI7IC8vIG51bSBzdGFydHNFeHByXG4gIGNvbnN0IGJpZ2ludCA9IDE1MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaWdpbnRcIl0gPSBiaWdpbnRdID0gXCJiaWdpbnRcIjsgLy8gYmlnaW50IHN0YXJ0c0V4cHJcbiAgY29uc3QgZGVjaW1hbCA9IDI1NjA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJkZWNpbWFsXCJdID0gZGVjaW1hbF0gPSBcImRlY2ltYWxcIjsgLy8gZGVjaW1hbCBzdGFydHNFeHByXG4gIGNvbnN0IHJlZ2V4cCA9IDM1ODQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJyZWdleHBcIl0gPSByZWdleHBdID0gXCJyZWdleHBcIjsgLy8gcmVnZXhwIHN0YXJ0c0V4cHJcbiAgY29uc3Qgc3RyaW5nID0gNDYwODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInN0cmluZ1wiXSA9IHN0cmluZ10gPSBcInN0cmluZ1wiOyAvLyBzdHJpbmcgc3RhcnRzRXhwclxuICBjb25zdCBuYW1lID0gNTYzMjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm5hbWVcIl0gPSBuYW1lXSA9IFwibmFtZVwiOyAvLyBuYW1lIHN0YXJ0c0V4cHJcbiAgY29uc3QgZW9mID0gNjE0NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImVvZlwiXSA9IGVvZl0gPSBcImVvZlwiOyAvLyBlb2ZcbiAgY29uc3QgYnJhY2tldEwgPSA3NjgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYnJhY2tldExcIl0gPSBicmFja2V0TF0gPSBcImJyYWNrZXRMXCI7IC8vIFsgc3RhcnRzRXhwclxuICBjb25zdCBicmFja2V0UiA9IDgxOTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFja2V0UlwiXSA9IGJyYWNrZXRSXSA9IFwiYnJhY2tldFJcIjsgLy8gXVxuICBjb25zdCBicmFjZUwgPSA5NzI4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYnJhY2VMXCJdID0gYnJhY2VMXSA9IFwiYnJhY2VMXCI7IC8vIHsgc3RhcnRzRXhwclxuICBjb25zdCBicmFjZUJhckwgPSAxMDc1MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJyYWNlQmFyTFwiXSA9IGJyYWNlQmFyTF0gPSBcImJyYWNlQmFyTFwiOyAvLyB7fCBzdGFydHNFeHByXG4gIGNvbnN0IGJyYWNlUiA9IDExMjY0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYnJhY2VSXCJdID0gYnJhY2VSXSA9IFwiYnJhY2VSXCI7IC8vIH1cbiAgY29uc3QgYnJhY2VCYXJSID0gMTIyODg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFjZUJhclJcIl0gPSBicmFjZUJhclJdID0gXCJicmFjZUJhclJcIjsgLy8gfH1cbiAgY29uc3QgcGFyZW5MID0gMTM4MjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwYXJlbkxcIl0gPSBwYXJlbkxdID0gXCJwYXJlbkxcIjsgLy8gKCBzdGFydHNFeHByXG4gIGNvbnN0IHBhcmVuUiA9IDE0MzM2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicGFyZW5SXCJdID0gcGFyZW5SXSA9IFwicGFyZW5SXCI7IC8vIClcbiAgY29uc3QgY29tbWEgPSAxNTM2MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImNvbW1hXCJdID0gY29tbWFdID0gXCJjb21tYVwiOyAvLyAsXG4gIGNvbnN0IHNlbWkgPSAxNjM4NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInNlbWlcIl0gPSBzZW1pXSA9IFwic2VtaVwiOyAvLyA7XG4gIGNvbnN0IGNvbG9uID0gMTc0MDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJjb2xvblwiXSA9IGNvbG9uXSA9IFwiY29sb25cIjsgLy8gOlxuICBjb25zdCBkb3VibGVDb2xvbiA9IDE4NDMyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZG91YmxlQ29sb25cIl0gPSBkb3VibGVDb2xvbl0gPSBcImRvdWJsZUNvbG9uXCI7IC8vIDo6XG4gIGNvbnN0IGRvdCA9IDE5NDU2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZG90XCJdID0gZG90XSA9IFwiZG90XCI7IC8vIC5cbiAgY29uc3QgcXVlc3Rpb24gPSAyMDQ4MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInF1ZXN0aW9uXCJdID0gcXVlc3Rpb25dID0gXCJxdWVzdGlvblwiOyAvLyA/XG4gIGNvbnN0IHF1ZXN0aW9uRG90ID0gMjE1MDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJxdWVzdGlvbkRvdFwiXSA9IHF1ZXN0aW9uRG90XSA9IFwicXVlc3Rpb25Eb3RcIjsgLy8gPy5cbiAgY29uc3QgYXJyb3cgPSAyMjUyODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImFycm93XCJdID0gYXJyb3ddID0gXCJhcnJvd1wiOyAvLyA9PlxuICBjb25zdCB0ZW1wbGF0ZSA9IDIzNTUyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1widGVtcGxhdGVcIl0gPSB0ZW1wbGF0ZV0gPSBcInRlbXBsYXRlXCI7IC8vIHRlbXBsYXRlXG4gIGNvbnN0IGVsbGlwc2lzID0gMjQ1NzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJlbGxpcHNpc1wiXSA9IGVsbGlwc2lzXSA9IFwiZWxsaXBzaXNcIjsgLy8gLi4uXG4gIGNvbnN0IGJhY2tRdW90ZSA9IDI1NjAwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYmFja1F1b3RlXCJdID0gYmFja1F1b3RlXSA9IFwiYmFja1F1b3RlXCI7IC8vIGBcbiAgY29uc3QgZG9sbGFyQnJhY2VMID0gMjcxMzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJkb2xsYXJCcmFjZUxcIl0gPSBkb2xsYXJCcmFjZUxdID0gXCJkb2xsYXJCcmFjZUxcIjsgLy8gJHsgc3RhcnRzRXhwclxuICBjb25zdCBhdCA9IDI3NjQ4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYXRcIl0gPSBhdF0gPSBcImF0XCI7IC8vIEBcbiAgY29uc3QgaGFzaCA9IDI5MTg0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiaGFzaFwiXSA9IGhhc2hdID0gXCJoYXNoXCI7IC8vICMgc3RhcnRzRXhwclxuICBjb25zdCBlcSA9IDI5NzI4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZXFcIl0gPSBlcV0gPSBcImVxXCI7IC8vID0gaXNBc3NpZ25cbiAgY29uc3QgYXNzaWduID0gMzA3NTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJhc3NpZ25cIl0gPSBhc3NpZ25dID0gXCJhc3NpZ25cIjsgLy8gXz0gaXNBc3NpZ25cbiAgY29uc3QgcHJlSW5jRGVjID0gMzI2NDA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwcmVJbmNEZWNcIl0gPSBwcmVJbmNEZWNdID0gXCJwcmVJbmNEZWNcIjsgLy8gKysvLS0gcHJlZml4IHBvc3RmaXggc3RhcnRzRXhwclxuICBjb25zdCBwb3N0SW5jRGVjID0gMzM2NjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwb3N0SW5jRGVjXCJdID0gcG9zdEluY0RlY10gPSBcInBvc3RJbmNEZWNcIjsgLy8gKysvLS0gcHJlZml4IHBvc3RmaXggc3RhcnRzRXhwclxuICBjb25zdCBiYW5nID0gMzQ0MzI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiYW5nXCJdID0gYmFuZ10gPSBcImJhbmdcIjsgLy8gISBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCB0aWxkZSA9IDM1NDU2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1widGlsZGVcIl0gPSB0aWxkZV0gPSBcInRpbGRlXCI7IC8vIH4gcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgcGlwZWxpbmUgPSAzNTg0MTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInBpcGVsaW5lXCJdID0gcGlwZWxpbmVdID0gXCJwaXBlbGluZVwiOyAvLyB8PiBwcmVjOjFcbiAgY29uc3QgbnVsbGlzaENvYWxlc2NpbmcgPSAzNjg2NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm51bGxpc2hDb2FsZXNjaW5nXCJdID0gbnVsbGlzaENvYWxlc2NpbmddID0gXCJudWxsaXNoQ29hbGVzY2luZ1wiOyAvLyA/PyBwcmVjOjJcbiAgY29uc3QgbG9naWNhbE9SID0gMzc4OTA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJsb2dpY2FsT1JcIl0gPSBsb2dpY2FsT1JdID0gXCJsb2dpY2FsT1JcIjsgLy8gfHwgcHJlYzoyXG4gIGNvbnN0IGxvZ2ljYWxBTkQgPSAzODkxNTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImxvZ2ljYWxBTkRcIl0gPSBsb2dpY2FsQU5EXSA9IFwibG9naWNhbEFORFwiOyAvLyAmJiBwcmVjOjNcbiAgY29uc3QgYml0d2lzZU9SID0gMzk5NDA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaXR3aXNlT1JcIl0gPSBiaXR3aXNlT1JdID0gXCJiaXR3aXNlT1JcIjsgLy8gfCBwcmVjOjRcbiAgY29uc3QgYml0d2lzZVhPUiA9IDQwOTY1OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYml0d2lzZVhPUlwiXSA9IGJpdHdpc2VYT1JdID0gXCJiaXR3aXNlWE9SXCI7IC8vIF4gcHJlYzo1XG4gIGNvbnN0IGJpdHdpc2VBTkQgPSA0MTk5MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJpdHdpc2VBTkRcIl0gPSBiaXR3aXNlQU5EXSA9IFwiYml0d2lzZUFORFwiOyAvLyAmIHByZWM6NlxuICBjb25zdCBlcXVhbGl0eSA9IDQzMDE1OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZXF1YWxpdHlcIl0gPSBlcXVhbGl0eV0gPSBcImVxdWFsaXR5XCI7IC8vID09LyE9IHByZWM6N1xuICBjb25zdCBsZXNzVGhhbiA9IDQ0MDQwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibGVzc1RoYW5cIl0gPSBsZXNzVGhhbl0gPSBcImxlc3NUaGFuXCI7IC8vIDwgcHJlYzo4XG4gIGNvbnN0IGdyZWF0ZXJUaGFuID0gNDUwNjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJncmVhdGVyVGhhblwiXSA9IGdyZWF0ZXJUaGFuXSA9IFwiZ3JlYXRlclRoYW5cIjsgLy8gPiBwcmVjOjhcbiAgY29uc3QgcmVsYXRpb25hbE9yRXF1YWwgPSA0NjA4ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInJlbGF0aW9uYWxPckVxdWFsXCJdID0gcmVsYXRpb25hbE9yRXF1YWxdID0gXCJyZWxhdGlvbmFsT3JFcXVhbFwiOyAvLyA8PS8+PSBwcmVjOjhcbiAgY29uc3QgYml0U2hpZnRMID0gNDcxMTM7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaXRTaGlmdExcIl0gPSBiaXRTaGlmdExdID0gXCJiaXRTaGlmdExcIjsgLy8gPDwgcHJlYzo5XG4gIGNvbnN0IGJpdFNoaWZ0UiA9IDQ4MTM3OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYml0U2hpZnRSXCJdID0gYml0U2hpZnRSXSA9IFwiYml0U2hpZnRSXCI7IC8vID4+Lz4+PiBwcmVjOjlcbiAgY29uc3QgcGx1cyA9IDQ5ODAyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicGx1c1wiXSA9IHBsdXNdID0gXCJwbHVzXCI7IC8vICsgcHJlYzoxMCBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBtaW51cyA9IDUwODI2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibWludXNcIl0gPSBtaW51c10gPSBcIm1pbnVzXCI7IC8vIC0gcHJlYzoxMCBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBtb2R1bG8gPSA1MTcyMzsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm1vZHVsb1wiXSA9IG1vZHVsb10gPSBcIm1vZHVsb1wiOyAvLyAlIHByZWM6MTEgc3RhcnRzRXhwclxuICBjb25zdCBzdGFyID0gNTIyMzU7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJzdGFyXCJdID0gc3Rhcl0gPSBcInN0YXJcIjsgLy8gKiBwcmVjOjExXG4gIGNvbnN0IHNsYXNoID0gNTMyNTk7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJzbGFzaFwiXSA9IHNsYXNoXSA9IFwic2xhc2hcIjsgLy8gLyBwcmVjOjExXG4gIGNvbnN0IGV4cG9uZW50ID0gNTQzNDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJleHBvbmVudFwiXSA9IGV4cG9uZW50XSA9IFwiZXhwb25lbnRcIjsgLy8gKiogcHJlYzoxMiByaWdodEFzc29jaWF0aXZlXG4gIGNvbnN0IGpzeE5hbWUgPSA1NTI5NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImpzeE5hbWVcIl0gPSBqc3hOYW1lXSA9IFwianN4TmFtZVwiOyAvLyBqc3hOYW1lXG4gIGNvbnN0IGpzeFRleHQgPSA1NjMyMDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImpzeFRleHRcIl0gPSBqc3hUZXh0XSA9IFwianN4VGV4dFwiOyAvLyBqc3hUZXh0XG4gIGNvbnN0IGpzeEVtcHR5VGV4dCA9IDU3MzQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wianN4RW1wdHlUZXh0XCJdID0ganN4RW1wdHlUZXh0XSA9IFwianN4RW1wdHlUZXh0XCI7IC8vIGpzeEVtcHR5VGV4dFxuICBjb25zdCBqc3hUYWdTdGFydCA9IDU4ODgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wianN4VGFnU3RhcnRcIl0gPSBqc3hUYWdTdGFydF0gPSBcImpzeFRhZ1N0YXJ0XCI7IC8vIGpzeFRhZ1N0YXJ0IHN0YXJ0c0V4cHJcbiAgY29uc3QganN4VGFnRW5kID0gNTkzOTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJqc3hUYWdFbmRcIl0gPSBqc3hUYWdFbmRdID0gXCJqc3hUYWdFbmRcIjsgLy8ganN4VGFnRW5kXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJTdGFydCA9IDYwOTI4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1widHlwZVBhcmFtZXRlclN0YXJ0XCJdID0gdHlwZVBhcmFtZXRlclN0YXJ0XSA9IFwidHlwZVBhcmFtZXRlclN0YXJ0XCI7IC8vIHR5cGVQYXJhbWV0ZXJTdGFydCBzdGFydHNFeHByXG4gIGNvbnN0IG5vbk51bGxBc3NlcnRpb24gPSA2MTQ0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIm5vbk51bGxBc3NlcnRpb25cIl0gPSBub25OdWxsQXNzZXJ0aW9uXSA9IFwibm9uTnVsbEFzc2VydGlvblwiOyAvLyBub25OdWxsQXNzZXJ0aW9uXG4gIGNvbnN0IF9icmVhayA9IDYyNDgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2JyZWFrXCJdID0gX2JyZWFrXSA9IFwiX2JyZWFrXCI7IC8vIGJyZWFrIGtleXdvcmRcbiAgY29uc3QgX2Nhc2UgPSA2MzUwNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9jYXNlXCJdID0gX2Nhc2VdID0gXCJfY2FzZVwiOyAvLyBjYXNlIGtleXdvcmRcbiAgY29uc3QgX2NhdGNoID0gNjQ1Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfY2F0Y2hcIl0gPSBfY2F0Y2hdID0gXCJfY2F0Y2hcIjsgLy8gY2F0Y2gga2V5d29yZFxuICBjb25zdCBfY29udGludWUgPSA2NTU1MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9jb250aW51ZVwiXSA9IF9jb250aW51ZV0gPSBcIl9jb250aW51ZVwiOyAvLyBjb250aW51ZSBrZXl3b3JkXG4gIGNvbnN0IF9kZWJ1Z2dlciA9IDY2NTc2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2RlYnVnZ2VyXCJdID0gX2RlYnVnZ2VyXSA9IFwiX2RlYnVnZ2VyXCI7IC8vIGRlYnVnZ2VyIGtleXdvcmRcbiAgY29uc3QgX2RlZmF1bHQgPSA2NzYwMDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9kZWZhdWx0XCJdID0gX2RlZmF1bHRdID0gXCJfZGVmYXVsdFwiOyAvLyBkZWZhdWx0IGtleXdvcmRcbiAgY29uc3QgX2RvID0gNjg2MjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZG9cIl0gPSBfZG9dID0gXCJfZG9cIjsgLy8gZG8ga2V5d29yZFxuICBjb25zdCBfZWxzZSA9IDY5NjQ4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2Vsc2VcIl0gPSBfZWxzZV0gPSBcIl9lbHNlXCI7IC8vIGVsc2Uga2V5d29yZFxuICBjb25zdCBfZmluYWxseSA9IDcwNjcyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2ZpbmFsbHlcIl0gPSBfZmluYWxseV0gPSBcIl9maW5hbGx5XCI7IC8vIGZpbmFsbHkga2V5d29yZFxuICBjb25zdCBfZm9yID0gNzE2OTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZm9yXCJdID0gX2Zvcl0gPSBcIl9mb3JcIjsgLy8gZm9yIGtleXdvcmRcbiAgY29uc3QgX2Z1bmN0aW9uID0gNzMyMzI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZnVuY3Rpb25cIl0gPSBfZnVuY3Rpb25dID0gXCJfZnVuY3Rpb25cIjsgLy8gZnVuY3Rpb24ga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9pZiA9IDczNzQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2lmXCJdID0gX2lmXSA9IFwiX2lmXCI7IC8vIGlmIGtleXdvcmRcbiAgY29uc3QgX3JldHVybiA9IDc0NzY4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3JldHVyblwiXSA9IF9yZXR1cm5dID0gXCJfcmV0dXJuXCI7IC8vIHJldHVybiBrZXl3b3JkXG4gIGNvbnN0IF9zd2l0Y2ggPSA3NTc5MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9zd2l0Y2hcIl0gPSBfc3dpdGNoXSA9IFwiX3N3aXRjaFwiOyAvLyBzd2l0Y2gga2V5d29yZFxuICBjb25zdCBfdGhyb3cgPSA3NzQ1NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90aHJvd1wiXSA9IF90aHJvd10gPSBcIl90aHJvd1wiOyAvLyB0aHJvdyBrZXl3b3JkIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IF90cnkgPSA3Nzg0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90cnlcIl0gPSBfdHJ5XSA9IFwiX3RyeVwiOyAvLyB0cnkga2V5d29yZFxuICBjb25zdCBfdmFyID0gNzg4NjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfdmFyXCJdID0gX3Zhcl0gPSBcIl92YXJcIjsgLy8gdmFyIGtleXdvcmRcbiAgY29uc3QgX2xldCA9IDc5ODg4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2xldFwiXSA9IF9sZXRdID0gXCJfbGV0XCI7IC8vIGxldCBrZXl3b3JkXG4gIGNvbnN0IF9jb25zdCA9IDgwOTEyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2NvbnN0XCJdID0gX2NvbnN0XSA9IFwiX2NvbnN0XCI7IC8vIGNvbnN0IGtleXdvcmRcbiAgY29uc3QgX3doaWxlID0gODE5MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfd2hpbGVcIl0gPSBfd2hpbGVdID0gXCJfd2hpbGVcIjsgLy8gd2hpbGUga2V5d29yZFxuICBjb25zdCBfd2l0aCA9IDgyOTYwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3dpdGhcIl0gPSBfd2l0aF0gPSBcIl93aXRoXCI7IC8vIHdpdGgga2V5d29yZFxuICBjb25zdCBfbmV3ID0gODQ0OTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfbmV3XCJdID0gX25ld10gPSBcIl9uZXdcIjsgLy8gbmV3IGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfdGhpcyA9IDg1NTIwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3RoaXNcIl0gPSBfdGhpc10gPSBcIl90aGlzXCI7IC8vIHRoaXMga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9zdXBlciA9IDg2NTQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3N1cGVyXCJdID0gX3N1cGVyXSA9IFwiX3N1cGVyXCI7IC8vIHN1cGVyIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfY2xhc3MgPSA4NzU2ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9jbGFzc1wiXSA9IF9jbGFzc10gPSBcIl9jbGFzc1wiOyAvLyBjbGFzcyBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2V4dGVuZHMgPSA4ODA4MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9leHRlbmRzXCJdID0gX2V4dGVuZHNdID0gXCJfZXh0ZW5kc1wiOyAvLyBleHRlbmRzIGtleXdvcmRcbiAgY29uc3QgX2V4cG9ydCA9IDg5MTA0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2V4cG9ydFwiXSA9IF9leHBvcnRdID0gXCJfZXhwb3J0XCI7IC8vIGV4cG9ydCBrZXl3b3JkXG4gIGNvbnN0IF9pbXBvcnQgPSA5MDY0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9pbXBvcnRcIl0gPSBfaW1wb3J0XSA9IFwiX2ltcG9ydFwiOyAvLyBpbXBvcnQga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF95aWVsZCA9IDkxNjY0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3lpZWxkXCJdID0gX3lpZWxkXSA9IFwiX3lpZWxkXCI7IC8vIHlpZWxkIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfbnVsbCA9IDkyNjg4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX251bGxcIl0gPSBfbnVsbF0gPSBcIl9udWxsXCI7IC8vIG51bGwga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF90cnVlID0gOTM3MTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfdHJ1ZVwiXSA9IF90cnVlXSA9IFwiX3RydWVcIjsgLy8gdHJ1ZSBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2ZhbHNlID0gOTQ3MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZmFsc2VcIl0gPSBfZmFsc2VdID0gXCJfZmFsc2VcIjsgLy8gZmFsc2Uga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9pbiA9IDk1MjU2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2luXCJdID0gX2luXSA9IFwiX2luXCI7IC8vIGluIHByZWM6OCBrZXl3b3JkXG4gIGNvbnN0IF9pbnN0YW5jZW9mID0gOTYyODA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfaW5zdGFuY2VvZlwiXSA9IF9pbnN0YW5jZW9mXSA9IFwiX2luc3RhbmNlb2ZcIjsgLy8gaW5zdGFuY2VvZiBwcmVjOjgga2V5d29yZFxuICBjb25zdCBfdHlwZW9mID0gOTc5MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfdHlwZW9mXCJdID0gX3R5cGVvZl0gPSBcIl90eXBlb2ZcIjsgLy8gdHlwZW9mIGtleXdvcmQgcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgX3ZvaWQgPSA5ODk2MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl92b2lkXCJdID0gX3ZvaWRdID0gXCJfdm9pZFwiOyAvLyB2b2lkIGtleXdvcmQgcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgX2RlbGV0ZSA9IDk5OTg0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2RlbGV0ZVwiXSA9IF9kZWxldGVdID0gXCJfZGVsZXRlXCI7IC8vIGRlbGV0ZSBrZXl3b3JkIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IF9hc3luYyA9IDEwMDg4MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9hc3luY1wiXSA9IF9hc3luY10gPSBcIl9hc3luY1wiOyAvLyBhc3luYyBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2dldCA9IDEwMTkwNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9nZXRcIl0gPSBfZ2V0XSA9IFwiX2dldFwiOyAvLyBnZXQga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9zZXQgPSAxMDI5Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfc2V0XCJdID0gX3NldF0gPSBcIl9zZXRcIjsgLy8gc2V0IGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZGVjbGFyZSA9IDEwMzk1MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9kZWNsYXJlXCJdID0gX2RlY2xhcmVdID0gXCJfZGVjbGFyZVwiOyAvLyBkZWNsYXJlIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfcmVhZG9ubHkgPSAxMDQ5NzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcmVhZG9ubHlcIl0gPSBfcmVhZG9ubHldID0gXCJfcmVhZG9ubHlcIjsgLy8gcmVhZG9ubHkga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9hYnN0cmFjdCA9IDEwNjAwMDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9hYnN0cmFjdFwiXSA9IF9hYnN0cmFjdF0gPSBcIl9hYnN0cmFjdFwiOyAvLyBhYnN0cmFjdCBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3N0YXRpYyA9IDEwNzAyNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9zdGF0aWNcIl0gPSBfc3RhdGljXSA9IFwiX3N0YXRpY1wiOyAvLyBzdGF0aWMga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9wdWJsaWMgPSAxMDc1MzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcHVibGljXCJdID0gX3B1YmxpY10gPSBcIl9wdWJsaWNcIjsgLy8gcHVibGljIGtleXdvcmRcbiAgY29uc3QgX3ByaXZhdGUgPSAxMDg1NjA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcHJpdmF0ZVwiXSA9IF9wcml2YXRlXSA9IFwiX3ByaXZhdGVcIjsgLy8gcHJpdmF0ZSBrZXl3b3JkXG4gIGNvbnN0IF9wcm90ZWN0ZWQgPSAxMDk1ODQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcHJvdGVjdGVkXCJdID0gX3Byb3RlY3RlZF0gPSBcIl9wcm90ZWN0ZWRcIjsgLy8gcHJvdGVjdGVkIGtleXdvcmRcbiAgY29uc3QgX292ZXJyaWRlID0gMTEwNjA4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX292ZXJyaWRlXCJdID0gX292ZXJyaWRlXSA9IFwiX292ZXJyaWRlXCI7IC8vIG92ZXJyaWRlIGtleXdvcmRcbiAgY29uc3QgX2FzID0gMTEyMTQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2FzXCJdID0gX2FzXSA9IFwiX2FzXCI7IC8vIGFzIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZW51bSA9IDExMzE2ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9lbnVtXCJdID0gX2VudW1dID0gXCJfZW51bVwiOyAvLyBlbnVtIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfdHlwZSA9IDExNDE5MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90eXBlXCJdID0gX3R5cGVdID0gXCJfdHlwZVwiOyAvLyB0eXBlIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfaW1wbGVtZW50cyA9IDExNTIxNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9pbXBsZW1lbnRzXCJdID0gX2ltcGxlbWVudHNdID0gXCJfaW1wbGVtZW50c1wiOyAvLyBpbXBsZW1lbnRzIGtleXdvcmQgc3RhcnRzRXhwclxufSkoVG9rZW5UeXBlIHx8IChUb2tlblR5cGUgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRva2VuVHlwZSh0b2tlblR5cGUpIHtcbiAgc3dpdGNoICh0b2tlblR5cGUpIHtcbiAgICBjYXNlIFRva2VuVHlwZS5udW06XG4gICAgICByZXR1cm4gXCJudW1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iaWdpbnQ6XG4gICAgICByZXR1cm4gXCJiaWdpbnRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5kZWNpbWFsOlxuICAgICAgcmV0dXJuIFwiZGVjaW1hbFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnJlZ2V4cDpcbiAgICAgIHJldHVybiBcInJlZ2V4cFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZzpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLm5hbWU6XG4gICAgICByZXR1cm4gXCJuYW1lXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZW9mOlxuICAgICAgcmV0dXJuIFwiZW9mXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYnJhY2tldEw6XG4gICAgICByZXR1cm4gXCJbXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYnJhY2tldFI6XG4gICAgICByZXR1cm4gXCJdXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYnJhY2VMOlxuICAgICAgcmV0dXJuIFwie1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNlQmFyTDpcbiAgICAgIHJldHVybiBcInt8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYnJhY2VSOlxuICAgICAgcmV0dXJuIFwifVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNlQmFyUjpcbiAgICAgIHJldHVybiBcInx9XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucGFyZW5MOlxuICAgICAgcmV0dXJuIFwiKFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnBhcmVuUjpcbiAgICAgIHJldHVybiBcIilcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5jb21tYTpcbiAgICAgIHJldHVybiBcIixcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5zZW1pOlxuICAgICAgcmV0dXJuIFwiO1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmNvbG9uOlxuICAgICAgcmV0dXJuIFwiOlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmRvdWJsZUNvbG9uOlxuICAgICAgcmV0dXJuIFwiOjpcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5kb3Q6XG4gICAgICByZXR1cm4gXCIuXCI7XG4gICAgY2FzZSBUb2tlblR5cGUucXVlc3Rpb246XG4gICAgICByZXR1cm4gXCI/XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucXVlc3Rpb25Eb3Q6XG4gICAgICByZXR1cm4gXCI/LlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmFycm93OlxuICAgICAgcmV0dXJuIFwiPT5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS50ZW1wbGF0ZTpcbiAgICAgIHJldHVybiBcInRlbXBsYXRlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZWxsaXBzaXM6XG4gICAgICByZXR1cm4gXCIuLi5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iYWNrUXVvdGU6XG4gICAgICByZXR1cm4gXCJgXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZG9sbGFyQnJhY2VMOlxuICAgICAgcmV0dXJuIFwiJHtcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5hdDpcbiAgICAgIHJldHVybiBcIkBcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5oYXNoOlxuICAgICAgcmV0dXJuIFwiI1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmVxOlxuICAgICAgcmV0dXJuIFwiPVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmFzc2lnbjpcbiAgICAgIHJldHVybiBcIl89XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucHJlSW5jRGVjOlxuICAgICAgcmV0dXJuIFwiKysvLS1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5wb3N0SW5jRGVjOlxuICAgICAgcmV0dXJuIFwiKysvLS1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iYW5nOlxuICAgICAgcmV0dXJuIFwiIVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnRpbGRlOlxuICAgICAgcmV0dXJuIFwiflwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnBpcGVsaW5lOlxuICAgICAgcmV0dXJuIFwifD5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5udWxsaXNoQ29hbGVzY2luZzpcbiAgICAgIHJldHVybiBcIj8/XCI7XG4gICAgY2FzZSBUb2tlblR5cGUubG9naWNhbE9SOlxuICAgICAgcmV0dXJuIFwifHxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5sb2dpY2FsQU5EOlxuICAgICAgcmV0dXJuIFwiJiZcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iaXR3aXNlT1I6XG4gICAgICByZXR1cm4gXCJ8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0d2lzZVhPUjpcbiAgICAgIHJldHVybiBcIl5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iaXR3aXNlQU5EOlxuICAgICAgcmV0dXJuIFwiJlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmVxdWFsaXR5OlxuICAgICAgcmV0dXJuIFwiPT0vIT1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5sZXNzVGhhbjpcbiAgICAgIHJldHVybiBcIjxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5ncmVhdGVyVGhhbjpcbiAgICAgIHJldHVybiBcIj5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5yZWxhdGlvbmFsT3JFcXVhbDpcbiAgICAgIHJldHVybiBcIjw9Lz49XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0U2hpZnRMOlxuICAgICAgcmV0dXJuIFwiPDxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5iaXRTaGlmdFI6XG4gICAgICByZXR1cm4gXCI+Pi8+Pj5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgcmV0dXJuIFwiK1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgcmV0dXJuIFwiLVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLm1vZHVsbzpcbiAgICAgIHJldHVybiBcIiVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5zdGFyOlxuICAgICAgcmV0dXJuIFwiKlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnNsYXNoOlxuICAgICAgcmV0dXJuIFwiL1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmV4cG9uZW50OlxuICAgICAgcmV0dXJuIFwiKipcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5qc3hOYW1lOlxuICAgICAgcmV0dXJuIFwianN4TmFtZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmpzeFRleHQ6XG4gICAgICByZXR1cm4gXCJqc3hUZXh0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuanN4RW1wdHlUZXh0OlxuICAgICAgcmV0dXJuIFwianN4RW1wdHlUZXh0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuanN4VGFnU3RhcnQ6XG4gICAgICByZXR1cm4gXCJqc3hUYWdTdGFydFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmpzeFRhZ0VuZDpcbiAgICAgIHJldHVybiBcImpzeFRhZ0VuZFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnR5cGVQYXJhbWV0ZXJTdGFydDpcbiAgICAgIHJldHVybiBcInR5cGVQYXJhbWV0ZXJTdGFydFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLm5vbk51bGxBc3NlcnRpb246XG4gICAgICByZXR1cm4gXCJub25OdWxsQXNzZXJ0aW9uXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2JyZWFrOlxuICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY2FzZTpcbiAgICAgIHJldHVybiBcImNhc2VcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY2F0Y2g6XG4gICAgICByZXR1cm4gXCJjYXRjaFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9jb250aW51ZTpcbiAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2RlYnVnZ2VyOlxuICAgICAgcmV0dXJuIFwiZGVidWdnZXJcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZGVmYXVsdDpcbiAgICAgIHJldHVybiBcImRlZmF1bHRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZG86XG4gICAgICByZXR1cm4gXCJkb1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9lbHNlOlxuICAgICAgcmV0dXJuIFwiZWxzZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9maW5hbGx5OlxuICAgICAgcmV0dXJuIFwiZmluYWxseVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9mb3I6XG4gICAgICByZXR1cm4gXCJmb3JcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZnVuY3Rpb246XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9pZjpcbiAgICAgIHJldHVybiBcImlmXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3JldHVybjpcbiAgICAgIHJldHVybiBcInJldHVyblwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9zd2l0Y2g6XG4gICAgICByZXR1cm4gXCJzd2l0Y2hcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdGhyb3c6XG4gICAgICByZXR1cm4gXCJ0aHJvd1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl90cnk6XG4gICAgICByZXR1cm4gXCJ0cnlcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdmFyOlxuICAgICAgcmV0dXJuIFwidmFyXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2xldDpcbiAgICAgIHJldHVybiBcImxldFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9jb25zdDpcbiAgICAgIHJldHVybiBcImNvbnN0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3doaWxlOlxuICAgICAgcmV0dXJuIFwid2hpbGVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fd2l0aDpcbiAgICAgIHJldHVybiBcIndpdGhcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fbmV3OlxuICAgICAgcmV0dXJuIFwibmV3XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3RoaXM6XG4gICAgICByZXR1cm4gXCJ0aGlzXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3N1cGVyOlxuICAgICAgcmV0dXJuIFwic3VwZXJcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY2xhc3M6XG4gICAgICByZXR1cm4gXCJjbGFzc1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9leHRlbmRzOlxuICAgICAgcmV0dXJuIFwiZXh0ZW5kc1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9leHBvcnQ6XG4gICAgICByZXR1cm4gXCJleHBvcnRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5faW1wb3J0OlxuICAgICAgcmV0dXJuIFwiaW1wb3J0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3lpZWxkOlxuICAgICAgcmV0dXJuIFwieWllbGRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fbnVsbDpcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdHJ1ZTpcbiAgICAgIHJldHVybiBcInRydWVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZmFsc2U6XG4gICAgICByZXR1cm4gXCJmYWxzZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9pbjpcbiAgICAgIHJldHVybiBcImluXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2luc3RhbmNlb2Y6XG4gICAgICByZXR1cm4gXCJpbnN0YW5jZW9mXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3R5cGVvZjpcbiAgICAgIHJldHVybiBcInR5cGVvZlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl92b2lkOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9kZWxldGU6XG4gICAgICByZXR1cm4gXCJkZWxldGVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fYXN5bmM6XG4gICAgICByZXR1cm4gXCJhc3luY1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9nZXQ6XG4gICAgICByZXR1cm4gXCJnZXRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fc2V0OlxuICAgICAgcmV0dXJuIFwic2V0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2RlY2xhcmU6XG4gICAgICByZXR1cm4gXCJkZWNsYXJlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3JlYWRvbmx5OlxuICAgICAgcmV0dXJuIFwicmVhZG9ubHlcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fYWJzdHJhY3Q6XG4gICAgICByZXR1cm4gXCJhYnN0cmFjdFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9zdGF0aWM6XG4gICAgICByZXR1cm4gXCJzdGF0aWNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fcHVibGljOlxuICAgICAgcmV0dXJuIFwicHVibGljXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3ByaXZhdGU6XG4gICAgICByZXR1cm4gXCJwcml2YXRlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3Byb3RlY3RlZDpcbiAgICAgIHJldHVybiBcInByb3RlY3RlZFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9vdmVycmlkZTpcbiAgICAgIHJldHVybiBcIm92ZXJyaWRlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2FzOlxuICAgICAgcmV0dXJuIFwiYXNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZW51bTpcbiAgICAgIHJldHVybiBcImVudW1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdHlwZTpcbiAgICAgIHJldHVybiBcInR5cGVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5faW1wbGVtZW50czpcbiAgICAgIHJldHVybiBcImltcGxlbWVudHNcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cbiIsICJcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuL2tleXdvcmRzXCI7XG5pbXBvcnQgeyBUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBTY29wZSB7XG4gIFxuICBcbiAgXG5cbiAgY29uc3RydWN0b3Ioc3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCBpc0Z1bmN0aW9uU2NvcGUpIHtcbiAgICB0aGlzLnN0YXJ0VG9rZW5JbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcbiAgICB0aGlzLmVuZFRva2VuSW5kZXggPSBlbmRUb2tlbkluZGV4O1xuICAgIHRoaXMuaXNGdW5jdGlvblNjb3BlID0gaXNGdW5jdGlvblNjb3BlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0ZVNuYXBzaG90IHtcbiAgY29uc3RydWN0b3IoXG4gICAgIHBvdGVudGlhbEFycm93QXQsXG4gICAgIG5vQW5vbkZ1bmN0aW9uVHlwZSxcbiAgICAgaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0LFxuICAgICB0b2tlbnNMZW5ndGgsXG4gICAgIHNjb3Blc0xlbmd0aCxcbiAgICAgcG9zLFxuICAgICB0eXBlLFxuICAgICBjb250ZXh0dWFsS2V5d29yZCxcbiAgICAgc3RhcnQsXG4gICAgIGVuZCxcbiAgICAgaXNUeXBlLFxuICAgICBzY29wZURlcHRoLFxuICAgICBlcnJvcixcbiAgKSB7O3RoaXMucG90ZW50aWFsQXJyb3dBdCA9IHBvdGVudGlhbEFycm93QXQ7dGhpcy5ub0Fub25GdW5jdGlvblR5cGUgPSBub0Fub25GdW5jdGlvblR5cGU7dGhpcy5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBpbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7dGhpcy50b2tlbnNMZW5ndGggPSB0b2tlbnNMZW5ndGg7dGhpcy5zY29wZXNMZW5ndGggPSBzY29wZXNMZW5ndGg7dGhpcy5wb3MgPSBwb3M7dGhpcy50eXBlID0gdHlwZTt0aGlzLmNvbnRleHR1YWxLZXl3b3JkID0gY29udGV4dHVhbEtleXdvcmQ7dGhpcy5zdGFydCA9IHN0YXJ0O3RoaXMuZW5kID0gZW5kO3RoaXMuaXNUeXBlID0gaXNUeXBlO3RoaXMuc2NvcGVEZXB0aCA9IHNjb3BlRGVwdGg7dGhpcy5lcnJvciA9IGVycm9yO31cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge2NvbnN0cnVjdG9yKCkgeyBTdGF0ZS5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDIuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0My5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDUuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0Ni5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQ3LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDguY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0OS5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQxMC5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQxMS5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQxMi5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQxMy5jYWxsKHRoaXMpOyB9XG4gIC8vIFVzZWQgdG8gc2lnbmlmeSB0aGUgc3RhcnQgb2YgYSBwb3RlbnRpYWwgYXJyb3cgZnVuY3Rpb25cbiAgX19pbml0KCkge3RoaXMucG90ZW50aWFsQXJyb3dBdCA9IC0xfVxuXG4gIC8vIFVzZWQgYnkgRmxvdyB0byBoYW5kbGUgYW4gZWRnZSBjYXNlIGludm9sdmluZyBmdW5jdGlvbiB0eXBlIHBhcnNpbmcuXG4gIF9faW5pdDIoKSB7dGhpcy5ub0Fub25GdW5jdGlvblR5cGUgPSBmYWxzZX1cblxuICAvLyBVc2VkIGJ5IFR5cGVTY3JpcHQgdG8gaGFuZGxlIGFtYmlndWl0aWVzIHdoZW4gcGFyc2luZyBjb25kaXRpb25hbCB0eXBlcy5cbiAgX19pbml0MygpIHt0aGlzLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IGZhbHNlfVxuXG4gIC8vIFRva2VuIHN0b3JlLlxuICBfX2luaXQ0KCkge3RoaXMudG9rZW5zID0gW119XG5cbiAgLy8gQXJyYXkgb2YgYWxsIG9ic2VydmVkIHNjb3Blcywgb3JkZXJlZCBieSB0aGVpciBlbmRpbmcgcG9zaXRpb24uXG4gIF9faW5pdDUoKSB7dGhpcy5zY29wZXMgPSBbXX1cblxuICAvLyBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgdG9rZW5pemVyIGluIHRoZSBpbnB1dC5cbiAgX19pbml0NigpIHt0aGlzLnBvcyA9IDB9XG5cbiAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgdG9rZW4uXG4gIF9faW5pdDcoKSB7dGhpcy50eXBlID0gdHQuZW9mfVxuICBfX2luaXQ4KCkge3RoaXMuY29udGV4dHVhbEtleXdvcmQgPSBDb250ZXh0dWFsS2V5d29yZC5OT05FfVxuICBfX2luaXQ5KCkge3RoaXMuc3RhcnQgPSAwfVxuICBfX2luaXQxMCgpIHt0aGlzLmVuZCA9IDB9XG5cbiAgX19pbml0MTEoKSB7dGhpcy5pc1R5cGUgPSBmYWxzZX1cbiAgX19pbml0MTIoKSB7dGhpcy5zY29wZURlcHRoID0gMH1cblxuICAvKipcbiAgICogSWYgdGhlIHBhcnNlciBpcyBpbiBhbiBlcnJvciBzdGF0ZSwgdGhlbiB0aGUgdG9rZW4gaXMgYWx3YXlzIHR0LmVvZiBhbmQgYWxsIGZ1bmN0aW9ucyBjYW5cbiAgICoga2VlcCBleGVjdXRpbmcgYnV0IHNob3VsZCBiZSB3cml0dGVuIHNvIHRoZXkgZG9uJ3QgZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCBpbiB0aGlzIHNpdHVhdGlvbi5cbiAgICpcbiAgICogVGhpcyBhcHByb2FjaCwgY29tYmluZWQgd2l0aCB0aGUgYWJpbGl0eSB0byBzbmFwc2hvdCBhbmQgcmVzdG9yZSBzdGF0ZSwgYWxsb3dzIHVzIHRvIGltcGxlbWVudFxuICAgKiBiYWNrdHJhY2tpbmcgd2l0aG91dCBleGNlcHRpb25zIGFuZCB3aXRob3V0IG5lZWRpbmcgdG8gZXhwbGljaXRseSBwcm9wYWdhdGUgZXJyb3Igc3RhdGVzXG4gICAqIGV2ZXJ5d2hlcmUuXG4gICAqL1xuICBfX2luaXQxMygpIHt0aGlzLmVycm9yID0gbnVsbH1cblxuICBzbmFwc2hvdCgpIHtcbiAgICByZXR1cm4gbmV3IFN0YXRlU25hcHNob3QoXG4gICAgICB0aGlzLnBvdGVudGlhbEFycm93QXQsXG4gICAgICB0aGlzLm5vQW5vbkZ1bmN0aW9uVHlwZSxcbiAgICAgIHRoaXMuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0LFxuICAgICAgdGhpcy50b2tlbnMubGVuZ3RoLFxuICAgICAgdGhpcy5zY29wZXMubGVuZ3RoLFxuICAgICAgdGhpcy5wb3MsXG4gICAgICB0aGlzLnR5cGUsXG4gICAgICB0aGlzLmNvbnRleHR1YWxLZXl3b3JkLFxuICAgICAgdGhpcy5zdGFydCxcbiAgICAgIHRoaXMuZW5kLFxuICAgICAgdGhpcy5pc1R5cGUsXG4gICAgICB0aGlzLnNjb3BlRGVwdGgsXG4gICAgICB0aGlzLmVycm9yLFxuICAgICk7XG4gIH1cblxuICByZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID0gc25hcHNob3QucG90ZW50aWFsQXJyb3dBdDtcbiAgICB0aGlzLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IHNuYXBzaG90Lm5vQW5vbkZ1bmN0aW9uVHlwZTtcbiAgICB0aGlzLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IHNuYXBzaG90LmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dDtcbiAgICB0aGlzLnRva2Vucy5sZW5ndGggPSBzbmFwc2hvdC50b2tlbnNMZW5ndGg7XG4gICAgdGhpcy5zY29wZXMubGVuZ3RoID0gc25hcHNob3Quc2NvcGVzTGVuZ3RoO1xuICAgIHRoaXMucG9zID0gc25hcHNob3QucG9zO1xuICAgIHRoaXMudHlwZSA9IHNuYXBzaG90LnR5cGU7XG4gICAgdGhpcy5jb250ZXh0dWFsS2V5d29yZCA9IHNuYXBzaG90LmNvbnRleHR1YWxLZXl3b3JkO1xuICAgIHRoaXMuc3RhcnQgPSBzbmFwc2hvdC5zdGFydDtcbiAgICB0aGlzLmVuZCA9IHNuYXBzaG90LmVuZDtcbiAgICB0aGlzLmlzVHlwZSA9IHNuYXBzaG90LmlzVHlwZTtcbiAgICB0aGlzLnNjb3BlRGVwdGggPSBzbmFwc2hvdC5zY29wZURlcHRoO1xuICAgIHRoaXMuZXJyb3IgPSBzbmFwc2hvdC5lcnJvcjtcbiAgfVxufVxuIiwgImV4cG9ydCB2YXIgY2hhckNvZGVzOyAoZnVuY3Rpb24gKGNoYXJDb2Rlcykge1xuICBjb25zdCBiYWNrU3BhY2UgPSA4OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiYmFja1NwYWNlXCJdID0gYmFja1NwYWNlXSA9IFwiYmFja1NwYWNlXCI7XG4gIGNvbnN0IGxpbmVGZWVkID0gMTA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsaW5lRmVlZFwiXSA9IGxpbmVGZWVkXSA9IFwibGluZUZlZWRcIjsgLy8gICdcXG4nXG4gIGNvbnN0IHRhYiA9IDk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ0YWJcIl0gPSB0YWJdID0gXCJ0YWJcIjsgLy8gICdcXHQnXG4gIGNvbnN0IGNhcnJpYWdlUmV0dXJuID0gMTM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJjYXJyaWFnZVJldHVyblwiXSA9IGNhcnJpYWdlUmV0dXJuXSA9IFwiY2FycmlhZ2VSZXR1cm5cIjsgLy8gICdcXHInXG4gIGNvbnN0IHNoaWZ0T3V0ID0gMTQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJzaGlmdE91dFwiXSA9IHNoaWZ0T3V0XSA9IFwic2hpZnRPdXRcIjtcbiAgY29uc3Qgc3BhY2UgPSAzMjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInNwYWNlXCJdID0gc3BhY2VdID0gXCJzcGFjZVwiO1xuICBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSAzMzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImV4Y2xhbWF0aW9uTWFya1wiXSA9IGV4Y2xhbWF0aW9uTWFya10gPSBcImV4Y2xhbWF0aW9uTWFya1wiOyAvLyAgJyEnXG4gIGNvbnN0IHF1b3RhdGlvbk1hcmsgPSAzNDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInF1b3RhdGlvbk1hcmtcIl0gPSBxdW90YXRpb25NYXJrXSA9IFwicXVvdGF0aW9uTWFya1wiOyAvLyAgJ1wiJ1xuICBjb25zdCBudW1iZXJTaWduID0gMzU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJudW1iZXJTaWduXCJdID0gbnVtYmVyU2lnbl0gPSBcIm51bWJlclNpZ25cIjsgLy8gICcjJ1xuICBjb25zdCBkb2xsYXJTaWduID0gMzY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkb2xsYXJTaWduXCJdID0gZG9sbGFyU2lnbl0gPSBcImRvbGxhclNpZ25cIjsgLy8gICckJ1xuICBjb25zdCBwZXJjZW50U2lnbiA9IDM3OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicGVyY2VudFNpZ25cIl0gPSBwZXJjZW50U2lnbl0gPSBcInBlcmNlbnRTaWduXCI7IC8vICAnJSdcbiAgY29uc3QgYW1wZXJzYW5kID0gMzg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJhbXBlcnNhbmRcIl0gPSBhbXBlcnNhbmRdID0gXCJhbXBlcnNhbmRcIjsgLy8gICcmJ1xuICBjb25zdCBhcG9zdHJvcGhlID0gMzk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJhcG9zdHJvcGhlXCJdID0gYXBvc3Ryb3BoZV0gPSBcImFwb3N0cm9waGVcIjsgLy8gICcnJ1xuICBjb25zdCBsZWZ0UGFyZW50aGVzaXMgPSA0MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxlZnRQYXJlbnRoZXNpc1wiXSA9IGxlZnRQYXJlbnRoZXNpc10gPSBcImxlZnRQYXJlbnRoZXNpc1wiOyAvLyAgJygnXG4gIGNvbnN0IHJpZ2h0UGFyZW50aGVzaXMgPSA0MTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInJpZ2h0UGFyZW50aGVzaXNcIl0gPSByaWdodFBhcmVudGhlc2lzXSA9IFwicmlnaHRQYXJlbnRoZXNpc1wiOyAvLyAgJyknXG4gIGNvbnN0IGFzdGVyaXNrID0gNDI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJhc3Rlcmlza1wiXSA9IGFzdGVyaXNrXSA9IFwiYXN0ZXJpc2tcIjsgLy8gICcqJ1xuICBjb25zdCBwbHVzU2lnbiA9IDQzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicGx1c1NpZ25cIl0gPSBwbHVzU2lnbl0gPSBcInBsdXNTaWduXCI7IC8vICAnKydcbiAgY29uc3QgY29tbWEgPSA0NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImNvbW1hXCJdID0gY29tbWFdID0gXCJjb21tYVwiOyAvLyAgJywnXG4gIGNvbnN0IGRhc2ggPSA0NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRhc2hcIl0gPSBkYXNoXSA9IFwiZGFzaFwiOyAvLyAgJy0nXG4gIGNvbnN0IGRvdCA9IDQ2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZG90XCJdID0gZG90XSA9IFwiZG90XCI7IC8vICAnLidcbiAgY29uc3Qgc2xhc2ggPSA0NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInNsYXNoXCJdID0gc2xhc2hdID0gXCJzbGFzaFwiOyAvLyAgJy8nXG4gIGNvbnN0IGRpZ2l0MCA9IDQ4OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQwXCJdID0gZGlnaXQwXSA9IFwiZGlnaXQwXCI7IC8vICAnMCdcbiAgY29uc3QgZGlnaXQxID0gNDk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDFcIl0gPSBkaWdpdDFdID0gXCJkaWdpdDFcIjsgLy8gICcxJ1xuICBjb25zdCBkaWdpdDIgPSA1MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0MlwiXSA9IGRpZ2l0Ml0gPSBcImRpZ2l0MlwiOyAvLyAgJzInXG4gIGNvbnN0IGRpZ2l0MyA9IDUxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQzXCJdID0gZGlnaXQzXSA9IFwiZGlnaXQzXCI7IC8vICAnMydcbiAgY29uc3QgZGlnaXQ0ID0gNTI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDRcIl0gPSBkaWdpdDRdID0gXCJkaWdpdDRcIjsgLy8gICc0J1xuICBjb25zdCBkaWdpdDUgPSA1MzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0NVwiXSA9IGRpZ2l0NV0gPSBcImRpZ2l0NVwiOyAvLyAgJzUnXG4gIGNvbnN0IGRpZ2l0NiA9IDU0OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQ2XCJdID0gZGlnaXQ2XSA9IFwiZGlnaXQ2XCI7IC8vICAnNidcbiAgY29uc3QgZGlnaXQ3ID0gNTU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDdcIl0gPSBkaWdpdDddID0gXCJkaWdpdDdcIjsgLy8gICc3J1xuICBjb25zdCBkaWdpdDggPSA1NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0OFwiXSA9IGRpZ2l0OF0gPSBcImRpZ2l0OFwiOyAvLyAgJzgnXG4gIGNvbnN0IGRpZ2l0OSA9IDU3OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQ5XCJdID0gZGlnaXQ5XSA9IFwiZGlnaXQ5XCI7IC8vICAnOSdcbiAgY29uc3QgY29sb24gPSA1ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImNvbG9uXCJdID0gY29sb25dID0gXCJjb2xvblwiOyAvLyAgJzonXG4gIGNvbnN0IHNlbWljb2xvbiA9IDU5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wic2VtaWNvbG9uXCJdID0gc2VtaWNvbG9uXSA9IFwic2VtaWNvbG9uXCI7IC8vICAnOydcbiAgY29uc3QgbGVzc1RoYW4gPSA2MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxlc3NUaGFuXCJdID0gbGVzc1RoYW5dID0gXCJsZXNzVGhhblwiOyAvLyAgJzwnXG4gIGNvbnN0IGVxdWFsc1RvID0gNjE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJlcXVhbHNUb1wiXSA9IGVxdWFsc1RvXSA9IFwiZXF1YWxzVG9cIjsgLy8gICc9J1xuICBjb25zdCBncmVhdGVyVGhhbiA9IDYyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZ3JlYXRlclRoYW5cIl0gPSBncmVhdGVyVGhhbl0gPSBcImdyZWF0ZXJUaGFuXCI7IC8vICAnPidcbiAgY29uc3QgcXVlc3Rpb25NYXJrID0gNjM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJxdWVzdGlvbk1hcmtcIl0gPSBxdWVzdGlvbk1hcmtdID0gXCJxdWVzdGlvbk1hcmtcIjsgLy8gICc/J1xuICBjb25zdCBhdFNpZ24gPSA2NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImF0U2lnblwiXSA9IGF0U2lnbl0gPSBcImF0U2lnblwiOyAvLyAgJ0AnXG4gIGNvbnN0IHVwcGVyY2FzZUEgPSA2NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUFcIl0gPSB1cHBlcmNhc2VBXSA9IFwidXBwZXJjYXNlQVwiOyAvLyAgJ0EnXG4gIGNvbnN0IHVwcGVyY2FzZUIgPSA2NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUJcIl0gPSB1cHBlcmNhc2VCXSA9IFwidXBwZXJjYXNlQlwiOyAvLyAgJ0InXG4gIGNvbnN0IHVwcGVyY2FzZUMgPSA2NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUNcIl0gPSB1cHBlcmNhc2VDXSA9IFwidXBwZXJjYXNlQ1wiOyAvLyAgJ0MnXG4gIGNvbnN0IHVwcGVyY2FzZUQgPSA2ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZURcIl0gPSB1cHBlcmNhc2VEXSA9IFwidXBwZXJjYXNlRFwiOyAvLyAgJ0QnXG4gIGNvbnN0IHVwcGVyY2FzZUUgPSA2OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUVcIl0gPSB1cHBlcmNhc2VFXSA9IFwidXBwZXJjYXNlRVwiOyAvLyAgJ0UnXG4gIGNvbnN0IHVwcGVyY2FzZUYgPSA3MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUZcIl0gPSB1cHBlcmNhc2VGXSA9IFwidXBwZXJjYXNlRlwiOyAvLyAgJ0YnXG4gIGNvbnN0IHVwcGVyY2FzZUcgPSA3MTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUdcIl0gPSB1cHBlcmNhc2VHXSA9IFwidXBwZXJjYXNlR1wiOyAvLyAgJ0cnXG4gIGNvbnN0IHVwcGVyY2FzZUggPSA3MjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUhcIl0gPSB1cHBlcmNhc2VIXSA9IFwidXBwZXJjYXNlSFwiOyAvLyAgJ0gnXG4gIGNvbnN0IHVwcGVyY2FzZUkgPSA3MzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUlcIl0gPSB1cHBlcmNhc2VJXSA9IFwidXBwZXJjYXNlSVwiOyAvLyAgJ0knXG4gIGNvbnN0IHVwcGVyY2FzZUogPSA3NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUpcIl0gPSB1cHBlcmNhc2VKXSA9IFwidXBwZXJjYXNlSlwiOyAvLyAgJ0onXG4gIGNvbnN0IHVwcGVyY2FzZUsgPSA3NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUtcIl0gPSB1cHBlcmNhc2VLXSA9IFwidXBwZXJjYXNlS1wiOyAvLyAgJ0snXG4gIGNvbnN0IHVwcGVyY2FzZUwgPSA3NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZUxcIl0gPSB1cHBlcmNhc2VMXSA9IFwidXBwZXJjYXNlTFwiOyAvLyAgJ0wnXG4gIGNvbnN0IHVwcGVyY2FzZU0gPSA3NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZU1cIl0gPSB1cHBlcmNhc2VNXSA9IFwidXBwZXJjYXNlTVwiOyAvLyAgJ00nXG4gIGNvbnN0IHVwcGVyY2FzZU4gPSA3ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZU5cIl0gPSB1cHBlcmNhc2VOXSA9IFwidXBwZXJjYXNlTlwiOyAvLyAgJ04nXG4gIGNvbnN0IHVwcGVyY2FzZU8gPSA3OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZU9cIl0gPSB1cHBlcmNhc2VPXSA9IFwidXBwZXJjYXNlT1wiOyAvLyAgJ08nXG4gIGNvbnN0IHVwcGVyY2FzZVAgPSA4MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVBcIl0gPSB1cHBlcmNhc2VQXSA9IFwidXBwZXJjYXNlUFwiOyAvLyAgJ1AnXG4gIGNvbnN0IHVwcGVyY2FzZVEgPSA4MTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVFcIl0gPSB1cHBlcmNhc2VRXSA9IFwidXBwZXJjYXNlUVwiOyAvLyAgJ1EnXG4gIGNvbnN0IHVwcGVyY2FzZVIgPSA4MjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVJcIl0gPSB1cHBlcmNhc2VSXSA9IFwidXBwZXJjYXNlUlwiOyAvLyAgJ1InXG4gIGNvbnN0IHVwcGVyY2FzZVMgPSA4MzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVNcIl0gPSB1cHBlcmNhc2VTXSA9IFwidXBwZXJjYXNlU1wiOyAvLyAgJ1MnXG4gIGNvbnN0IHVwcGVyY2FzZVQgPSA4NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVRcIl0gPSB1cHBlcmNhc2VUXSA9IFwidXBwZXJjYXNlVFwiOyAvLyAgJ1QnXG4gIGNvbnN0IHVwcGVyY2FzZVUgPSA4NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVVcIl0gPSB1cHBlcmNhc2VVXSA9IFwidXBwZXJjYXNlVVwiOyAvLyAgJ1UnXG4gIGNvbnN0IHVwcGVyY2FzZVYgPSA4NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVZcIl0gPSB1cHBlcmNhc2VWXSA9IFwidXBwZXJjYXNlVlwiOyAvLyAgJ1YnXG4gIGNvbnN0IHVwcGVyY2FzZVcgPSA4NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVdcIl0gPSB1cHBlcmNhc2VXXSA9IFwidXBwZXJjYXNlV1wiOyAvLyAgJ1cnXG4gIGNvbnN0IHVwcGVyY2FzZVggPSA4ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVhcIl0gPSB1cHBlcmNhc2VYXSA9IFwidXBwZXJjYXNlWFwiOyAvLyAgJ1gnXG4gIGNvbnN0IHVwcGVyY2FzZVkgPSA4OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVlcIl0gPSB1cHBlcmNhc2VZXSA9IFwidXBwZXJjYXNlWVwiOyAvLyAgJ1knXG4gIGNvbnN0IHVwcGVyY2FzZVogPSA5MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVwcGVyY2FzZVpcIl0gPSB1cHBlcmNhc2VaXSA9IFwidXBwZXJjYXNlWlwiOyAvLyAgJ1onXG4gIGNvbnN0IGxlZnRTcXVhcmVCcmFja2V0ID0gOTE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsZWZ0U3F1YXJlQnJhY2tldFwiXSA9IGxlZnRTcXVhcmVCcmFja2V0XSA9IFwibGVmdFNxdWFyZUJyYWNrZXRcIjsgLy8gICdbJ1xuICBjb25zdCBiYWNrc2xhc2ggPSA5MjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImJhY2tzbGFzaFwiXSA9IGJhY2tzbGFzaF0gPSBcImJhY2tzbGFzaFwiOyAvLyAgJ1xcICAgICdcbiAgY29uc3QgcmlnaHRTcXVhcmVCcmFja2V0ID0gOTM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJyaWdodFNxdWFyZUJyYWNrZXRcIl0gPSByaWdodFNxdWFyZUJyYWNrZXRdID0gXCJyaWdodFNxdWFyZUJyYWNrZXRcIjsgLy8gICddJ1xuICBjb25zdCBjYXJldCA9IDk0OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiY2FyZXRcIl0gPSBjYXJldF0gPSBcImNhcmV0XCI7IC8vICAnXidcbiAgY29uc3QgdW5kZXJzY29yZSA9IDk1OyBjaGFyQ29kZXNbY2hhckNvZGVzW1widW5kZXJzY29yZVwiXSA9IHVuZGVyc2NvcmVdID0gXCJ1bmRlcnNjb3JlXCI7IC8vICAnXydcbiAgY29uc3QgZ3JhdmVBY2NlbnQgPSA5NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImdyYXZlQWNjZW50XCJdID0gZ3JhdmVBY2NlbnRdID0gXCJncmF2ZUFjY2VudFwiOyAvLyAgJ2AnXG4gIGNvbnN0IGxvd2VyY2FzZUEgPSA5NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUFcIl0gPSBsb3dlcmNhc2VBXSA9IFwibG93ZXJjYXNlQVwiOyAvLyAgJ2EnXG4gIGNvbnN0IGxvd2VyY2FzZUIgPSA5ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUJcIl0gPSBsb3dlcmNhc2VCXSA9IFwibG93ZXJjYXNlQlwiOyAvLyAgJ2InXG4gIGNvbnN0IGxvd2VyY2FzZUMgPSA5OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUNcIl0gPSBsb3dlcmNhc2VDXSA9IFwibG93ZXJjYXNlQ1wiOyAvLyAgJ2MnXG4gIGNvbnN0IGxvd2VyY2FzZUQgPSAxMDA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VEXCJdID0gbG93ZXJjYXNlRF0gPSBcImxvd2VyY2FzZURcIjsgLy8gICdkJ1xuICBjb25zdCBsb3dlcmNhc2VFID0gMTAxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlRVwiXSA9IGxvd2VyY2FzZUVdID0gXCJsb3dlcmNhc2VFXCI7IC8vICAnZSdcbiAgY29uc3QgbG93ZXJjYXNlRiA9IDEwMjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUZcIl0gPSBsb3dlcmNhc2VGXSA9IFwibG93ZXJjYXNlRlwiOyAvLyAgJ2YnXG4gIGNvbnN0IGxvd2VyY2FzZUcgPSAxMDM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VHXCJdID0gbG93ZXJjYXNlR10gPSBcImxvd2VyY2FzZUdcIjsgLy8gICdnJ1xuICBjb25zdCBsb3dlcmNhc2VIID0gMTA0OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlSFwiXSA9IGxvd2VyY2FzZUhdID0gXCJsb3dlcmNhc2VIXCI7IC8vICAnaCdcbiAgY29uc3QgbG93ZXJjYXNlSSA9IDEwNTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUlcIl0gPSBsb3dlcmNhc2VJXSA9IFwibG93ZXJjYXNlSVwiOyAvLyAgJ2knXG4gIGNvbnN0IGxvd2VyY2FzZUogPSAxMDY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VKXCJdID0gbG93ZXJjYXNlSl0gPSBcImxvd2VyY2FzZUpcIjsgLy8gICdqJ1xuICBjb25zdCBsb3dlcmNhc2VLID0gMTA3OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlS1wiXSA9IGxvd2VyY2FzZUtdID0gXCJsb3dlcmNhc2VLXCI7IC8vICAnaydcbiAgY29uc3QgbG93ZXJjYXNlTCA9IDEwODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUxcIl0gPSBsb3dlcmNhc2VMXSA9IFwibG93ZXJjYXNlTFwiOyAvLyAgJ2wnXG4gIGNvbnN0IGxvd2VyY2FzZU0gPSAxMDk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VNXCJdID0gbG93ZXJjYXNlTV0gPSBcImxvd2VyY2FzZU1cIjsgLy8gICdtJ1xuICBjb25zdCBsb3dlcmNhc2VOID0gMTEwOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlTlwiXSA9IGxvd2VyY2FzZU5dID0gXCJsb3dlcmNhc2VOXCI7IC8vICAnbidcbiAgY29uc3QgbG93ZXJjYXNlTyA9IDExMTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZU9cIl0gPSBsb3dlcmNhc2VPXSA9IFwibG93ZXJjYXNlT1wiOyAvLyAgJ28nXG4gIGNvbnN0IGxvd2VyY2FzZVAgPSAxMTI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VQXCJdID0gbG93ZXJjYXNlUF0gPSBcImxvd2VyY2FzZVBcIjsgLy8gICdwJ1xuICBjb25zdCBsb3dlcmNhc2VRID0gMTEzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlUVwiXSA9IGxvd2VyY2FzZVFdID0gXCJsb3dlcmNhc2VRXCI7IC8vICAncSdcbiAgY29uc3QgbG93ZXJjYXNlUiA9IDExNDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVJcIl0gPSBsb3dlcmNhc2VSXSA9IFwibG93ZXJjYXNlUlwiOyAvLyAgJ3InXG4gIGNvbnN0IGxvd2VyY2FzZVMgPSAxMTU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VTXCJdID0gbG93ZXJjYXNlU10gPSBcImxvd2VyY2FzZVNcIjsgLy8gICdzJ1xuICBjb25zdCBsb3dlcmNhc2VUID0gMTE2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlVFwiXSA9IGxvd2VyY2FzZVRdID0gXCJsb3dlcmNhc2VUXCI7IC8vICAndCdcbiAgY29uc3QgbG93ZXJjYXNlVSA9IDExNzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVVcIl0gPSBsb3dlcmNhc2VVXSA9IFwibG93ZXJjYXNlVVwiOyAvLyAgJ3UnXG4gIGNvbnN0IGxvd2VyY2FzZVYgPSAxMTg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VWXCJdID0gbG93ZXJjYXNlVl0gPSBcImxvd2VyY2FzZVZcIjsgLy8gICd2J1xuICBjb25zdCBsb3dlcmNhc2VXID0gMTE5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlV1wiXSA9IGxvd2VyY2FzZVddID0gXCJsb3dlcmNhc2VXXCI7IC8vICAndydcbiAgY29uc3QgbG93ZXJjYXNlWCA9IDEyMDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVhcIl0gPSBsb3dlcmNhc2VYXSA9IFwibG93ZXJjYXNlWFwiOyAvLyAgJ3gnXG4gIGNvbnN0IGxvd2VyY2FzZVkgPSAxMjE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VZXCJdID0gbG93ZXJjYXNlWV0gPSBcImxvd2VyY2FzZVlcIjsgLy8gICd5J1xuICBjb25zdCBsb3dlcmNhc2VaID0gMTIyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlWlwiXSA9IGxvd2VyY2FzZVpdID0gXCJsb3dlcmNhc2VaXCI7IC8vICAneidcbiAgY29uc3QgbGVmdEN1cmx5QnJhY2UgPSAxMjM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsZWZ0Q3VybHlCcmFjZVwiXSA9IGxlZnRDdXJseUJyYWNlXSA9IFwibGVmdEN1cmx5QnJhY2VcIjsgLy8gICd7J1xuICBjb25zdCB2ZXJ0aWNhbEJhciA9IDEyNDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInZlcnRpY2FsQmFyXCJdID0gdmVydGljYWxCYXJdID0gXCJ2ZXJ0aWNhbEJhclwiOyAvLyAgJ3wnXG4gIGNvbnN0IHJpZ2h0Q3VybHlCcmFjZSA9IDEyNTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInJpZ2h0Q3VybHlCcmFjZVwiXSA9IHJpZ2h0Q3VybHlCcmFjZV0gPSBcInJpZ2h0Q3VybHlCcmFjZVwiOyAvLyAgJ30nXG4gIGNvbnN0IHRpbGRlID0gMTI2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1widGlsZGVcIl0gPSB0aWxkZV0gPSBcInRpbGRlXCI7IC8vICAnfidcbiAgY29uc3Qgbm9uQnJlYWtpbmdTcGFjZSA9IDE2MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcIm5vbkJyZWFraW5nU3BhY2VcIl0gPSBub25CcmVha2luZ1NwYWNlXSA9IFwibm9uQnJlYWtpbmdTcGFjZVwiO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taXJyZWd1bGFyLXdoaXRlc3BhY2VcbiAgY29uc3Qgb2doYW1TcGFjZU1hcmsgPSA1NzYwOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wib2doYW1TcGFjZU1hcmtcIl0gPSBvZ2hhbVNwYWNlTWFya10gPSBcIm9naGFtU3BhY2VNYXJrXCI7IC8vICdcdTE2ODAnXG4gIGNvbnN0IGxpbmVTZXBhcmF0b3IgPSA4MjMyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibGluZVNlcGFyYXRvclwiXSA9IGxpbmVTZXBhcmF0b3JdID0gXCJsaW5lU2VwYXJhdG9yXCI7XG4gIGNvbnN0IHBhcmFncmFwaFNlcGFyYXRvciA9IDgyMzM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJwYXJhZ3JhcGhTZXBhcmF0b3JcIl0gPSBwYXJhZ3JhcGhTZXBhcmF0b3JdID0gXCJwYXJhZ3JhcGhTZXBhcmF0b3JcIjtcbn0pKGNoYXJDb2RlcyB8fCAoY2hhckNvZGVzID0ge30pKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlnaXQoY29kZSkge1xuICByZXR1cm4gKFxuICAgIChjb2RlID49IGNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBjaGFyQ29kZXMuZGlnaXQ5KSB8fFxuICAgIChjb2RlID49IGNoYXJDb2Rlcy5sb3dlcmNhc2VBICYmIGNvZGUgPD0gY2hhckNvZGVzLmxvd2VyY2FzZUYpIHx8XG4gICAgKGNvZGUgPj0gY2hhckNvZGVzLnVwcGVyY2FzZUEgJiYgY29kZSA8PSBjaGFyQ29kZXMudXBwZXJjYXNlRilcbiAgKTtcbn1cbiIsICJpbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3Rva2VuaXplci9zdGF0ZVwiO1xuaW1wb3J0IHtjaGFyQ29kZXN9IGZyb20gXCIuLi91dGlsL2NoYXJjb2Rlc1wiO1xuXG5leHBvcnQgbGV0IGlzSlNYRW5hYmxlZDtcbmV4cG9ydCBsZXQgaXNUeXBlU2NyaXB0RW5hYmxlZDtcbmV4cG9ydCBsZXQgaXNGbG93RW5hYmxlZDtcbmV4cG9ydCBsZXQgc3RhdGU7XG5leHBvcnQgbGV0IGlucHV0O1xuZXhwb3J0IGxldCBuZXh0Q29udGV4dElkO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENvbnRleHRJZCgpIHtcbiAgcmV0dXJuIG5leHRDb250ZXh0SWQrKztcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50RXJyb3IoZXJyb3IpIHtcbiAgaWYgKFwicG9zXCIgaW4gZXJyb3IpIHtcbiAgICBjb25zdCBsb2MgPSBsb2NhdGlvbkZvckluZGV4KGVycm9yLnBvcyk7XG4gICAgZXJyb3IubWVzc2FnZSArPSBgICgke2xvYy5saW5lfToke2xvYy5jb2x1bW59KWA7XG4gICAgZXJyb3IubG9jID0gbG9jO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGNsYXNzIExvYyB7XG4gIFxuICBcbiAgY29uc3RydWN0b3IobGluZSwgY29sdW1uKSB7XG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb25Gb3JJbmRleChwb3MpIHtcbiAgbGV0IGxpbmUgPSAxO1xuICBsZXQgY29sdW1uID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3M7IGkrKykge1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGkpID09PSBjaGFyQ29kZXMubGluZUZlZWQpIHtcbiAgICAgIGxpbmUrKztcbiAgICAgIGNvbHVtbiA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbisrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvYyhsaW5lLCBjb2x1bW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdFBhcnNlcihcbiAgaW5wdXRDb2RlLFxuICBpc0pTWEVuYWJsZWRBcmcsXG4gIGlzVHlwZVNjcmlwdEVuYWJsZWRBcmcsXG4gIGlzRmxvd0VuYWJsZWRBcmcsXG4pIHtcbiAgaW5wdXQgPSBpbnB1dENvZGU7XG4gIHN0YXRlID0gbmV3IFN0YXRlKCk7XG4gIG5leHRDb250ZXh0SWQgPSAxO1xuICBpc0pTWEVuYWJsZWQgPSBpc0pTWEVuYWJsZWRBcmc7XG4gIGlzVHlwZVNjcmlwdEVuYWJsZWQgPSBpc1R5cGVTY3JpcHRFbmFibGVkQXJnO1xuICBpc0Zsb3dFbmFibGVkID0gaXNGbG93RW5hYmxlZEFyZztcbn1cbiIsICJpbXBvcnQge2VhdCwgZmluaXNoVG9rZW4sIGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkLCBtYXRjaCwgbmV4dFRva2VuU3RhcnR9IGZyb20gXCIuLi90b2tlbml6ZXIvaW5kZXhcIjtcblxuaW1wb3J0IHtmb3JtYXRUb2tlblR5cGUsIFRva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3Rva2VuaXplci90eXBlc1wiO1xuaW1wb3J0IHtjaGFyQ29kZXN9IGZyb20gXCIuLi91dGlsL2NoYXJjb2Rlc1wiO1xuaW1wb3J0IHtpbnB1dCwgc3RhdGV9IGZyb20gXCIuL2Jhc2VcIjtcblxuLy8gIyMgUGFyc2VyIHV0aWxpdGllc1xuXG4vLyBUZXN0cyB3aGV0aGVyIHBhcnNlZCB0b2tlbiBpcyBhIGNvbnRleHR1YWwga2V5d29yZC5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRleHR1YWwoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgcmV0dXJuIHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBjb250ZXh0dWFsS2V5d29yZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTG9va2FoZWFkQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICBjb25zdCBsID0gbG9va2FoZWFkVHlwZUFuZEtleXdvcmQoKTtcbiAgcmV0dXJuIGwudHlwZSA9PT0gdHQubmFtZSAmJiBsLmNvbnRleHR1YWxLZXl3b3JkID09PSBjb250ZXh0dWFsS2V5d29yZDtcbn1cblxuLy8gQ29uc3VtZXMgY29udGV4dHVhbCBrZXl3b3JkIGlmIHBvc3NpYmxlLlxuZXhwb3J0IGZ1bmN0aW9uIGVhdENvbnRleHR1YWwoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgcmV0dXJuIHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBjb250ZXh0dWFsS2V5d29yZCAmJiBlYXQodHQubmFtZSk7XG59XG5cbi8vIEFzc2VydHMgdGhhdCBmb2xsb3dpbmcgdG9rZW4gaXMgZ2l2ZW4gY29udGV4dHVhbCBrZXl3b3JkLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdENvbnRleHR1YWwoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgaWYgKCFlYXRDb250ZXh0dWFsKGNvbnRleHR1YWxLZXl3b3JkKSkge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxufVxuXG4vLyBUZXN0IHdoZXRoZXIgYSBzZW1pY29sb24gY2FuIGJlIGluc2VydGVkIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGNhbkluc2VydFNlbWljb2xvbigpIHtcbiAgcmV0dXJuIG1hdGNoKHR0LmVvZikgfHwgbWF0Y2godHQuYnJhY2VSKSB8fCBoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZWNlZGluZ0xpbmVCcmVhaygpIHtcbiAgY29uc3QgcHJldlRva2VuID0gc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgY29uc3QgbGFzdFRva0VuZCA9IHByZXZUb2tlbiA/IHByZXZUb2tlbi5lbmQgOiAwO1xuICBmb3IgKGxldCBpID0gbGFzdFRva0VuZDsgaSA8IHN0YXRlLnN0YXJ0OyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBjaGFyQ29kZXMubGluZUZlZWQgfHxcbiAgICAgIGNvZGUgPT09IGNoYXJDb2Rlcy5jYXJyaWFnZVJldHVybiB8fFxuICAgICAgY29kZSA9PT0gMHgyMDI4IHx8XG4gICAgICBjb2RlID09PSAweDIwMjlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb2xsb3dpbmdMaW5lQnJlYWsoKSB7XG4gIGNvbnN0IG5leHRTdGFydCA9IG5leHRUb2tlblN0YXJ0KCk7XG4gIGZvciAobGV0IGkgPSBzdGF0ZS5lbmQ7IGkgPCBuZXh0U3RhcnQ7IGkrKykge1xuICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IGNoYXJDb2Rlcy5saW5lRmVlZCB8fFxuICAgICAgY29kZSA9PT0gY2hhckNvZGVzLmNhcnJpYWdlUmV0dXJuIHx8XG4gICAgICBjb2RlID09PSAweDIwMjggfHxcbiAgICAgIGNvZGUgPT09IDB4MjAyOVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoKSB7XG4gIHJldHVybiBlYXQodHQuc2VtaSkgfHwgY2FuSW5zZXJ0U2VtaWNvbG9uKCk7XG59XG5cbi8vIENvbnN1bWUgYSBzZW1pY29sb24sIG9yLCBmYWlsaW5nIHRoYXQsIHNlZSBpZiB3ZSBhcmUgYWxsb3dlZCB0b1xuLy8gcHJldGVuZCB0aGF0IHRoZXJlIGlzIGEgc2VtaWNvbG9uIGF0IHRoaXMgcG9zaXRpb24uXG5leHBvcnQgZnVuY3Rpb24gc2VtaWNvbG9uKCkge1xuICBpZiAoIWlzTGluZVRlcm1pbmF0b3IoKSkge1xuICAgIHVuZXhwZWN0ZWQoJ1VuZXhwZWN0ZWQgdG9rZW4sIGV4cGVjdGVkIFwiO1wiJyk7XG4gIH1cbn1cblxuLy8gRXhwZWN0IGEgdG9rZW4gb2YgYSBnaXZlbiB0eXBlLiBJZiBmb3VuZCwgY29uc3VtZSBpdCwgb3RoZXJ3aXNlLFxuLy8gcmFpc2UgYW4gdW5leHBlY3RlZCB0b2tlbiBlcnJvciBhdCBnaXZlbiBwb3MuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KHR5cGUpIHtcbiAgY29uc3QgbWF0Y2hlZCA9IGVhdCh0eXBlKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgdW5leHBlY3RlZChgVW5leHBlY3RlZCB0b2tlbiwgZXhwZWN0ZWQgXCIke2Zvcm1hdFRva2VuVHlwZSh0eXBlKX1cImApO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNpdGlvbiB0aGUgcGFyc2VyIHRvIGFuIGVycm9yIHN0YXRlLiBBbGwgY29kZSBuZWVkcyB0byBiZSB3cml0dGVuIHRvIG5hdHVyYWxseSB1bndpbmQgaW4gdGhpc1xuICogc3RhdGUsIHdoaWNoIGFsbG93cyB1cyB0byBiYWNrdHJhY2sgd2l0aG91dCBleGNlcHRpb25zIGFuZCB3aXRob3V0IGVycm9yIHBsdW1iaW5nIGV2ZXJ5d2hlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmV4cGVjdGVkKG1lc3NhZ2UgPSBcIlVuZXhwZWN0ZWQgdG9rZW5cIiwgcG9zID0gc3RhdGUuc3RhcnQpIHtcbiAgaWYgKHN0YXRlLmVycm9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGVyciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlKTtcbiAgZXJyLnBvcyA9IHBvcztcbiAgc3RhdGUuZXJyb3IgPSBlcnI7XG4gIHN0YXRlLnBvcyA9IGlucHV0Lmxlbmd0aDtcbiAgZmluaXNoVG9rZW4odHQuZW9mKTtcbn1cbiIsICJpbXBvcnQge2NoYXJDb2Rlc30gZnJvbSBcIi4vY2hhcmNvZGVzXCI7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXdoaXRlLXNwYWNlXG5leHBvcnQgY29uc3QgV0hJVEVTUEFDRV9DSEFSUyA9IFtcbiAgMHgwMDA5LFxuICAweDAwMGIsXG4gIDB4MDAwYyxcbiAgY2hhckNvZGVzLnNwYWNlLFxuICBjaGFyQ29kZXMubm9uQnJlYWtpbmdTcGFjZSxcbiAgY2hhckNvZGVzLm9naGFtU3BhY2VNYXJrLFxuICAweDIwMDAsIC8vIEVOIFFVQURcbiAgMHgyMDAxLCAvLyBFTSBRVUFEXG4gIDB4MjAwMiwgLy8gRU4gU1BBQ0VcbiAgMHgyMDAzLCAvLyBFTSBTUEFDRVxuICAweDIwMDQsIC8vIFRIUkVFLVBFUi1FTSBTUEFDRVxuICAweDIwMDUsIC8vIEZPVVItUEVSLUVNIFNQQUNFXG4gIDB4MjAwNiwgLy8gU0lYLVBFUi1FTSBTUEFDRVxuICAweDIwMDcsIC8vIEZJR1VSRSBTUEFDRVxuICAweDIwMDgsIC8vIFBVTkNUVUFUSU9OIFNQQUNFXG4gIDB4MjAwOSwgLy8gVEhJTiBTUEFDRVxuICAweDIwMGEsIC8vIEhBSVIgU1BBQ0VcbiAgMHgyMDJmLCAvLyBOQVJST1cgTk8tQlJFQUsgU1BBQ0VcbiAgMHgyMDVmLCAvLyBNRURJVU0gTUFUSEVNQVRJQ0FMIFNQQUNFXG4gIDB4MzAwMCwgLy8gSURFT0dSQVBISUMgU1BBQ0VcbiAgMHhmZWZmLCAvLyBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFXG5dO1xuXG5leHBvcnQgY29uc3Qgc2tpcFdoaXRlU3BhY2UgPSAvKD86XFxzfFxcL1xcLy4qfFxcL1xcKlteXSo/XFwqXFwvKSovZztcblxuZXhwb3J0IGNvbnN0IElTX1dISVRFU1BBQ0UgPSBuZXcgVWludDhBcnJheSg2NTUzNik7XG5mb3IgKGNvbnN0IGNoYXIgb2YgV0hJVEVTUEFDRV9DSEFSUykge1xuICBJU19XSElURVNQQUNFW2NoYXJdID0gMTtcbn1cbiIsICJpbXBvcnQge2NoYXJDb2Rlc30gZnJvbSBcIi4vY2hhcmNvZGVzXCI7XG5pbXBvcnQge1dISVRFU1BBQ0VfQ0hBUlN9IGZyb20gXCIuL3doaXRlc3BhY2VcIjtcblxuZnVuY3Rpb24gY29tcHV0ZUlzSWRlbnRpZmllckNoYXIoY29kZSkge1xuICBpZiAoY29kZSA8IDQ4KSByZXR1cm4gY29kZSA9PT0gMzY7XG4gIGlmIChjb2RlIDwgNTgpIHJldHVybiB0cnVlO1xuICBpZiAoY29kZSA8IDY1KSByZXR1cm4gZmFsc2U7XG4gIGlmIChjb2RlIDwgOTEpIHJldHVybiB0cnVlO1xuICBpZiAoY29kZSA8IDk3KSByZXR1cm4gY29kZSA9PT0gOTU7XG4gIGlmIChjb2RlIDwgMTIzKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGNvZGUgPCAxMjgpIHJldHVybiBmYWxzZTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBub24tQVNDSUkgY2hhciBjb2RlLlwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IElTX0lERU5USUZJRVJfQ0hBUiA9IG5ldyBVaW50OEFycmF5KDY1NTM2KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMTI4OyBpKyspIHtcbiAgSVNfSURFTlRJRklFUl9DSEFSW2ldID0gY29tcHV0ZUlzSWRlbnRpZmllckNoYXIoaSkgPyAxIDogMDtcbn1cbmZvciAobGV0IGkgPSAxMjg7IGkgPCA2NTUzNjsgaSsrKSB7XG4gIElTX0lERU5USUZJRVJfQ0hBUltpXSA9IDE7XG59XG4vLyBBc2lkZSBmcm9tIHdoaXRlc3BhY2UgYW5kIG5ld2xpbmVzLCBhbGwgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBBU0NJSSBzcGFjZSBhcmUgZWl0aGVyXG4vLyBpZGVudGlmaWVyIGNoYXJhY3RlcnMgb3IgaW52YWxpZC4gU2luY2Ugd2UncmUgbm90IHBlcmZvcm1pbmcgY29kZSB2YWxpZGF0aW9uLCB3ZSBjYW4ganVzdFxuLy8gdHJlYXQgYWxsIGludmFsaWQgY2hhcmFjdGVycyBhcyBpZGVudGlmaWVyIGNoYXJhY3RlcnMuXG5mb3IgKGNvbnN0IHdoaXRlc3BhY2VDaGFyIG9mIFdISVRFU1BBQ0VfQ0hBUlMpIHtcbiAgSVNfSURFTlRJRklFUl9DSEFSW3doaXRlc3BhY2VDaGFyXSA9IDA7XG59XG5JU19JREVOVElGSUVSX0NIQVJbMHgyMDI4XSA9IDA7XG5JU19JREVOVElGSUVSX0NIQVJbMHgyMDI5XSA9IDA7XG5cbmV4cG9ydCBjb25zdCBJU19JREVOVElGSUVSX1NUQVJUID0gSVNfSURFTlRJRklFUl9DSEFSLnNsaWNlKCk7XG5mb3IgKGxldCBudW1DaGFyID0gY2hhckNvZGVzLmRpZ2l0MDsgbnVtQ2hhciA8PSBjaGFyQ29kZXMuZGlnaXQ5OyBudW1DaGFyKyspIHtcbiAgSVNfSURFTlRJRklFUl9TVEFSVFtudW1DaGFyXSA9IDA7XG59XG4iLCAiLy8gR2VuZXJhdGVkIGZpbGUsIGRvIG5vdCBlZGl0ISBSdW4gXCJ5YXJuIGdlbmVyYXRlXCIgdG8gcmUtZ2VuZXJhdGUgdGhpcyBmaWxlLlxuaW1wb3J0IHtDb250ZXh0dWFsS2V5d29yZH0gZnJvbSBcIi4va2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydCBjb25zdCBSRUFEX1dPUkRfVFJFRSA9IG5ldyBJbnQzMkFycmF5KFtcbiAgLy8gXCJcIlxuICAtMSwgMjcsIDc4MywgOTE4LCAxNzU1LCAyMzc2LCAyODYyLCAzNDgzLCAtMSwgMzY5OSwgLTEsIDQ2MTcsIDQ3NTIsIDQ4MzMsIDUxMzAsIDU1MDgsIDU5NDAsIC0xLCA2NDgwLCA2OTM5LCA3NzQ5LCA4MTgxLCA4NDUxLCA4NjEzLCAtMSwgODgyOSwgLTEsXG4gIC8vIFwiYVwiXG4gIC0xLCAtMSwgNTQsIDI0MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDMyLCAtMSwgLTEsIC0xLCA2NzUsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTA4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhYnN0clwiXG4gIC0xLCAxNjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RyYVwiXG4gIC0xLCAtMSwgLTEsIDE4OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RyYWNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIxNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhYnN0cmFjdFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNcIlxuICAtMSwgLTEsIC0xLCAyNzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2NcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDI5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2NlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNjZXNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzUxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2Nlc3NcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2Nlc3NvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNjZXNzb3JcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fYWNjZXNzb3IgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX2FzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ1OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1OTQsIC0xLFxuICAvLyBcImFzc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDg2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzc2VcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3NlclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzc2VydFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTY3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3NlcnRzXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX2Fzc2VydHMgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzeVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjIxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzeW5cIlxuICAtMSwgLTEsIC0xLCA2NDgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3luY1wiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9hc3luYyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXdcIlxuICAtMSwgNzAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhd2FcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MjksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhd2FpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3NTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXdhaXRcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fYXdhaXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJiclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJyZVwiXG4gIC0xLCA4NjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJyZWFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg5MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJicmVha1wiXG4gICh0dC5fYnJlYWsgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY1wiXG4gIC0xLCA5NDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDExMDcsIC0xLCAtMSwgLTEsIDEyNDIsIC0xLCAtMSwgMTM1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDk3MiwgMTAyNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDk5OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXNlXCJcbiAgKHR0Ll9jYXNlIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhdFwiXG4gIC0xLCAtMSwgLTEsIDEwNTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXRjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMDgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhdGNoXCJcbiAgKHR0Ll9jYXRjaCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTEzNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVcIlxuICAtMSwgLTEsIC0xLCAxMTYxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2hlY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTE4OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVja1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMjE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVja3NcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fY2hlY2tzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjbFwiXG4gIC0xLCAxMjY5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjbGFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTI5NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2xhc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMzIzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjbGFzc1wiXG4gICh0dC5fY2xhc3MgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEzNzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE0MDQsIDE2MjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTQzMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdFwiXG4gICh0dC5fY29uc3QgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE0NTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNDg1LCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uc3RydVwiXG4gIC0xLCAtMSwgLTEsIDE1MTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1Y1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTUzOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1Y3RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNTY2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uc3RydWN0b1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE1OTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1Y3RvclwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9jb25zdHJ1Y3RvciA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29udFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE2NDcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTY3NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNzAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29udGludVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTcyOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aW51ZVwiXG4gICh0dC5fY29udGludWUgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTc4MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjM0OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlXCJcbiAgLTEsIC0xLCAxODA5LCAxOTcxLCAtMSwgLTEsIDIxMDYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjI0MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE4MzYsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWJ1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE4NjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVnXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE4OTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVnZ1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTkxNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWJ1Z2dlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTk0NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVnZ2VyXCJcbiAgKHR0Ll9kZWJ1Z2dlciA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxOTk4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjbFwiXG4gIC0xLCAyMDI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWNsYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIwNTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWNsYXJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDIwNzksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjbGFyZVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZcIlxuICAtMSwgMjEzMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVmYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIxNjAsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZhdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIxODcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZhdWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIyMTQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVmYXVsdFwiXG4gICh0dC5fZGVmYXVsdCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDIyNjgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVsZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjI5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWxldFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjMyMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWxldGVcIlxuICAodHQuX2RlbGV0ZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkb1wiXG4gICh0dC5fZG8gPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI0MDMsIC0xLCAyNDg0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNTY1LCAtMSwgLTEsXG4gIC8vIFwiZWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjQzMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZWxzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNDU3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImVsc2VcIlxuICAodHQuX2Vsc2UgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNTExLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZW51XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI1MzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImVudW1cIlxuICBDb250ZXh0dWFsS2V5d29yZC5fZW51bSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXhcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjU5MiwgLTEsIC0xLCAtMSwgMjcyNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNjE5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXhwb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI2NDYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBvclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjY3MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBvcnRcIlxuICAodHQuX2V4cG9ydCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4cG9ydHNcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fZXhwb3J0cyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNzU0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4dGVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI3ODEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0ZW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgMjgwOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0ZW5kXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI4MzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4dGVuZHNcIlxuICAodHQuX2V4dGVuZHMgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZlwiXG4gIC0xLCAyODg5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjk5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAzMTU5LCAtMSwgLTEsIDMyMTMsIC0xLCAtMSwgMzI5NCwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjkxNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZhbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyOTQzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmYWxzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyOTcwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZhbHNlXCJcbiAgKHR0Ll9mYWxzZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzAyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5cIlxuICAtMSwgMzA1MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZmluYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMwNzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5hbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMxMDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5hbGxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzEzMiwgLTEsXG4gIC8vIFwiZmluYWxseVwiXG4gICh0dC5fZmluYWxseSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMxODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmb3JcIlxuICAodHQuX2ZvciA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMyNDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmcm9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzI2NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnJvbVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9mcm9tIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzMyMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5cIlxuICAtMSwgLTEsIC0xLCAzMzQ4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnVuY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzM3NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM0MDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jdGlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNDI5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnVuY3Rpb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzQ1NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jdGlvblwiXG4gICh0dC5fZnVuY3Rpb24gPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzUxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzU2NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNTM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdldFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9nZXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzU5MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsb1wiXG4gIC0xLCAtMSwgMzYxOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJnbG9iXCJcbiAgLTEsIDM2NDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsb2JhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzY3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsb2JhbFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzUzLCA0MDc3LCAtMSwgLTEsIC0xLCAtMSwgNDU5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaWZcIlxuICAodHQuX2lmIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM3ODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltcFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM4MDcsIC0xLCAtMSwgMzk5NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltcGxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDM4MzQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzg2MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAzODg4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltcGxlbWVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM5MTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtZW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM5NDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtZW50XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM5NjksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImltcGxlbWVudHNcIlxuICBDb250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQwMjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBvclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDA1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBvcnRcIlxuICAodHQuX2ltcG9ydCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpblwiXG4gICh0dC5faW4gPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQxMDQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQxODUsIDQ0MDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5mXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MTMxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluZmVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MTU4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5mZXJcIlxuICBDb250ZXh0dWFsS2V5d29yZC5faW5mZXIgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDIxMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnN0XCJcbiAgLTEsIDQyMzksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MjY2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhblwiXG4gIC0xLCAtMSwgLTEsIDQyOTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnN0YW5jXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhbmNlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDM0NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhbmNlb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQzNzQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnN0YW5jZW9mXCJcbiAgKHR0Ll9pbnN0YW5jZW9mIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDQyOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDQ1NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludGVyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDQ4MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludGVyZlwiXG4gIC0xLCA0NTA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlcmZhXCJcbiAgLTEsIC0xLCAtMSwgNDUzNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludGVyZmFjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0NTYzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImludGVyZmFjZVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImlzXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX2lzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJrXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0NjQ0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImtlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ2NzEsIC0xLFxuICAvLyBcImtleVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ2OTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJrZXlvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDcyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImtleW9mXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX2tleW9mIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0Nzc5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImxlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0ODA2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImxldFwiXG4gICh0dC5fbGV0IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0ODYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ5OTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ4ODcsIC0xLCAtMSxcbiAgLy8gXCJtaXhcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0OTE0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibWl4aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDk0MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaXhpblwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0OTY4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaXhpbnNcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fbWl4aW5zIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCA1MDIyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtb2RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MDQ5LCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9kdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUwNzYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtb2R1bFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTEwMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtb2R1bGVcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuXCJcbiAgLTEsIDUxNTcsIC0xLCAtMSwgLTEsIDUzNzMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU0MjcsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MTg0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDUyMTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibmFtZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MjM4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MjY1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc3BcIlxuICAtMSwgNTI5MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibmFtZXNwYVwiXG4gIC0xLCAtMSwgLTEsIDUzMTksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc3BhY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTM0NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc3BhY2VcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQwMCwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuZXdcIlxuICAodHQuX25ldyA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJudVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU0NTQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJudWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1NDgxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibnVsbFwiXG4gICh0dC5fbnVsbCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTUzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTU2MiwgLTEsIC0xLCAtMSwgLTEsIDU2OTcsIDU3NTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9mXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX29mIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcFwiXG4gIC0xLCA1NTg5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcGFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU2MTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3BhcVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU2NDMsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcGFxdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTY3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcGFxdWVcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fb3BhcXVlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTcyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdXRcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fb3V0IDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTc3OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdmVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU4MzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdmVyclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU4NTksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdmVycmlcIlxuICAtMSwgLTEsIC0xLCAtMSwgNTg4NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlcnJpZFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTkxMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdmVycmlkZVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9vdmVycmlkZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU5NjcsIC0xLCAtMSwgNjM0NSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTk5NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MTI5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYwMjEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByaXZcIlxuICAtMSwgNjA0OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpdmFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYwNzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpdmF0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MTAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByaXZhdGVcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MTU2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByb3RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDYxODMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYzMTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZVwiXG4gIC0xLCAtMSwgLTEsIDYyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYyMzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvdGVjdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjI2NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWN0ZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCA2MjkxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWN0ZWRcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fcHJvdGVjdGVkIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90b1wiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9wcm90byA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHVcIlxuICAtMSwgLTEsIDYzNzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHViXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjM5OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInB1YmxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2NDI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHVibGlcIlxuICAtMSwgLTEsIC0xLCA2NDUzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHVibGljXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX3B1YmxpYyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjUwNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZVwiXG4gIC0xLCA2NTM0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2Njk2LCAtMSwgLTEsIDY4MzEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDY1NjEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlYWRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2NTg4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhZG9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY2MTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhZG9uXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjY0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlYWRvbmxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjY2OSwgLTEsXG4gIC8vIFwicmVhZG9ubHlcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHkgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlcVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY3MjMsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXF1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjc1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlcXVpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjc3NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlcXVpclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjgwNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXF1aXJlXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX3JlcXVpcmUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJldFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY4NTgsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXR1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjg4NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJldHVyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2OTEyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJldHVyblwiXG4gICh0dC5fcmV0dXJuIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNcIlxuICAtMSwgNjk2NiwgLTEsIC0xLCAtMSwgNzE4MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MjM2LCA3MzcxLCAtMSwgNzQ3OSwgLTEsIDc2MTQsIC0xLFxuICAvLyBcInNhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2OTkzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcwMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcwNDcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdGlzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzA3NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdGlzZlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcxMDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc2ZpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MTI4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdGlzZmllXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcxNTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNhdGlzZmllc1wiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9zYXRpc2ZpZXMgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MjA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInNldFwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9zZXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0XCJcbiAgLTEsIDcyNjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdGF0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzMxNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YXRpXCJcbiAgLTEsIC0xLCAtMSwgNzM0NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YXRpY1wiXG4gIENvbnRleHR1YWxLZXl3b3JkLl9zdGF0aWMgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDczOTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN1cFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzQyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdXBlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzQ1MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN1cGVyXCJcbiAgKHR0Ll9zdXBlciA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1MDYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2lcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1MzMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic3dpdFwiXG4gIC0xLCAtMSwgLTEsIDc1NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2l0Y1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzU4NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2l0Y2hcIlxuICAodHQuX3N3aXRjaCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3NjQxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeW1cIlxuICAtMSwgLTEsIDc2NjgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic3ltYlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc2OTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeW1ib1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc3MjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeW1ib2xcIlxuICBDb250ZXh0dWFsS2V5d29yZC5fc3ltYm9sIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3Nzc2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3OTM4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MDQ2LCAtMSxcbiAgLy8gXCJ0aFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc4MDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzg1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRoaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3ODMwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0aGlzXCJcbiAgKHR0Ll90aGlzIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRoclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc4ODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0aHJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3OTExLCAtMSwgLTEsIC0xLFxuICAvLyBcInRocm93XCJcbiAgKHR0Ll90aHJvdyA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0clwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc5NjUsIC0xLCAtMSwgLTEsIDgwMTksIC0xLFxuICAvLyBcInRydVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzk5MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0cnVlXCJcbiAgKHR0Ll90cnVlIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRyeVwiXG4gICh0dC5fdHJ5IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInR5XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDgwNzMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInR5cFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgODEwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0eXBlXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX3R5cGUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTI3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwZW9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTU0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwZW9mXCJcbiAgKHR0Ll90eXBlb2YgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODIwOCwgLTEsIC0xLCAtMSwgLTEsIDgzNDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODIzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODI2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ1bmlxXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODI4OSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuaXF1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MzE2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuaXF1ZVwiXG4gIENvbnRleHR1YWxLZXl3b3JkLl91bmlxdWUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ1c2luXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg0MjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzaW5nXCJcbiAgQ29udGV4dHVhbEtleXdvcmQuX3VzaW5nIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ2XCJcbiAgLTEsIDg0NzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NTMyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidmFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NTA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidmFyXCJcbiAgKHR0Ll92YXIgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidm9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NTU5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidm9pXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDg1ODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInZvaWRcIlxuICAodHQuX3ZvaWQgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODY0MCwgODc0OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndoXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODY2NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndoaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg2OTQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ3aGlsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NzIxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndoaWxlXCJcbiAgKHR0Ll93aGlsZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ3aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODc3NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ3aXRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg4MDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2l0aFwiXG4gICh0dC5fd2l0aCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ5XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODg1NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4ODgzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg5MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ5aWVsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDg5MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpZWxkXCJcbiAgKHR0Ll95aWVsZCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbl0pO1xuIiwgImltcG9ydCB7aW5wdXQsIHN0YXRlfSBmcm9tIFwiLi4vdHJhdmVyc2VyL2Jhc2VcIjtcbmltcG9ydCB7Y2hhckNvZGVzfSBmcm9tIFwiLi4vdXRpbC9jaGFyY29kZXNcIjtcbmltcG9ydCB7SVNfSURFTlRJRklFUl9DSEFSfSBmcm9tIFwiLi4vdXRpbC9pZGVudGlmaWVyXCI7XG5pbXBvcnQge2ZpbmlzaFRva2VufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHtSRUFEX1dPUkRfVFJFRX0gZnJvbSBcIi4vcmVhZFdvcmRUcmVlXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBSZWFkIGFuIGlkZW50aWZpZXIsIHByb2R1Y2luZyBlaXRoZXIgYSBuYW1lIHRva2VuIG9yIG1hdGNoaW5nIG9uIG9uZSBvZiB0aGUgZXhpc3Rpbmcga2V5d29yZHMuXG4gKiBGb3IgcGVyZm9ybWFuY2UsIHdlIHByZS1nZW5lcmF0ZSBiaWcgZGVjaXNpb24gdHJlZSB0aGF0IHdlIHRyYXZlcnNlLiBFYWNoIG5vZGUgcmVwcmVzZW50cyBhXG4gKiBwcmVmaXggYW5kIGhhcyAyNyB2YWx1ZXMsIHdoZXJlIHRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgdG9rZW4gb3IgY29udGV4dHVhbCB0b2tlbiwgaWYgYW55ICgtMSBpZlxuICogbm90KSwgYW5kIHRoZSBvdGhlciAyNiB2YWx1ZXMgYXJlIHRoZSB0cmFuc2l0aW9ucyB0byBvdGhlciBub2Rlcywgb3IgLTEgdG8gc3RvcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVhZFdvcmQoKSB7XG4gIGxldCB0cmVlUG9zID0gMDtcbiAgbGV0IGNvZGUgPSAwO1xuICBsZXQgcG9zID0gc3RhdGUucG9zO1xuICB3aGlsZSAocG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgY29kZSA9IGlucHV0LmNoYXJDb2RlQXQocG9zKTtcbiAgICBpZiAoY29kZSA8IGNoYXJDb2Rlcy5sb3dlcmNhc2VBIHx8IGNvZGUgPiBjaGFyQ29kZXMubG93ZXJjYXNlWikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG5leHQgPSBSRUFEX1dPUkRfVFJFRVt0cmVlUG9zICsgKGNvZGUgLSBjaGFyQ29kZXMubG93ZXJjYXNlQSkgKyAxXTtcbiAgICBpZiAobmV4dCA9PT0gLTEpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmVlUG9zID0gbmV4dDtcbiAgICAgIHBvcysrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGtleXdvcmRWYWx1ZSA9IFJFQURfV09SRF9UUkVFW3RyZWVQb3NdO1xuICBpZiAoa2V5d29yZFZhbHVlID4gLTEgJiYgIUlTX0lERU5USUZJRVJfQ0hBUltjb2RlXSkge1xuICAgIHN0YXRlLnBvcyA9IHBvcztcbiAgICBpZiAoa2V5d29yZFZhbHVlICYgMSkge1xuICAgICAgZmluaXNoVG9rZW4oa2V5d29yZFZhbHVlID4+PiAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmluaXNoVG9rZW4odHQubmFtZSwga2V5d29yZFZhbHVlID4+PiAxKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2hpbGUgKHBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChwb3MpO1xuICAgIGlmIChJU19JREVOVElGSUVSX0NIQVJbY2hdKSB7XG4gICAgICBwb3MrKztcbiAgICB9IGVsc2UgaWYgKGNoID09PSBjaGFyQ29kZXMuYmFja3NsYXNoKSB7XG4gICAgICAvLyBcXHVcbiAgICAgIHBvcyArPSAyO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocG9zKSA9PT0gY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlKSB7XG4gICAgICAgIHdoaWxlIChwb3MgPCBpbnB1dC5sZW5ndGggJiYgaW5wdXQuY2hhckNvZGVBdChwb3MpICE9PSBjaGFyQ29kZXMucmlnaHRDdXJseUJyYWNlKSB7XG4gICAgICAgICAgcG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgcG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gY2hhckNvZGVzLmF0U2lnbiAmJiBpbnB1dC5jaGFyQ29kZUF0KHBvcyArIDEpID09PSBjaGFyQ29kZXMuYXRTaWduKSB7XG4gICAgICBwb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YXRlLnBvcyA9IHBvcztcbiAgZmluaXNoVG9rZW4odHQubmFtZSk7XG59XG4iLCAiLyogZXNsaW50IG1heC1sZW46IDAgKi9cblxuaW1wb3J0IHtpbnB1dCwgaXNGbG93RW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuLi90cmF2ZXJzZXIvYmFzZVwiO1xuaW1wb3J0IHt1bmV4cGVjdGVkfSBmcm9tIFwiLi4vdHJhdmVyc2VyL3V0aWxcIjtcbmltcG9ydCB7Y2hhckNvZGVzfSBmcm9tIFwiLi4vdXRpbC9jaGFyY29kZXNcIjtcbmltcG9ydCB7SVNfSURFTlRJRklFUl9DSEFSLCBJU19JREVOVElGSUVSX1NUQVJUfSBmcm9tIFwiLi4vdXRpbC9pZGVudGlmaWVyXCI7XG5pbXBvcnQge0lTX1dISVRFU1BBQ0UsIHNraXBXaGl0ZVNwYWNlfSBmcm9tIFwiLi4vdXRpbC93aGl0ZXNwYWNlXCI7XG5pbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi9rZXl3b3Jkc1wiO1xuaW1wb3J0IHJlYWRXb3JkIGZyb20gXCIuL3JlYWRXb3JkXCI7XG5pbXBvcnQgeyBUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCB2YXIgSWRlbnRpZmllclJvbGU7IChmdW5jdGlvbiAoSWRlbnRpZmllclJvbGUpIHtcbiAgY29uc3QgQWNjZXNzID0gMDsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJBY2Nlc3NcIl0gPSBBY2Nlc3NdID0gXCJBY2Nlc3NcIjtcbiAgY29uc3QgRXhwb3J0QWNjZXNzID0gQWNjZXNzICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJFeHBvcnRBY2Nlc3NcIl0gPSBFeHBvcnRBY2Nlc3NdID0gXCJFeHBvcnRBY2Nlc3NcIjtcbiAgY29uc3QgVG9wTGV2ZWxEZWNsYXJhdGlvbiA9IEV4cG9ydEFjY2VzcyArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiVG9wTGV2ZWxEZWNsYXJhdGlvblwiXSA9IFRvcExldmVsRGVjbGFyYXRpb25dID0gXCJUb3BMZXZlbERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gPSBUb3BMZXZlbERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXCJdID0gRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbl0gPSBcIkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25cIjtcbiAgY29uc3QgQmxvY2tTY29wZWREZWNsYXJhdGlvbiA9IEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIkJsb2NrU2NvcGVkRGVjbGFyYXRpb25cIl0gPSBCbG9ja1Njb3BlZERlY2xhcmF0aW9uXSA9IFwiQmxvY2tTY29wZWREZWNsYXJhdGlvblwiO1xuICBjb25zdCBPYmplY3RTaG9ydGhhbmRUb3BMZXZlbERlY2xhcmF0aW9uID0gQmxvY2tTY29wZWREZWNsYXJhdGlvbiArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvblwiXSA9IE9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb25dID0gXCJPYmplY3RTaG9ydGhhbmRUb3BMZXZlbERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IE9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gPSBPYmplY3RTaG9ydGhhbmRUb3BMZXZlbERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJPYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXCJdID0gT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbl0gPSBcIk9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25cIjtcbiAgY29uc3QgT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbiA9IE9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIk9iamVjdFNob3J0aGFuZEJsb2NrU2NvcGVkRGVjbGFyYXRpb25cIl0gPSBPYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXSA9IFwiT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvblwiO1xuICBjb25zdCBPYmplY3RTaG9ydGhhbmQgPSBPYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJPYmplY3RTaG9ydGhhbmRcIl0gPSBPYmplY3RTaG9ydGhhbmRdID0gXCJPYmplY3RTaG9ydGhhbmRcIjtcbiAgLy8gQW55IGlkZW50aWZpZXIgYm91bmQgaW4gYW4gaW1wb3J0IHN0YXRlbWVudCwgZS5nLiBib3RoIEEgYW5kIGIgZnJvbVxuICAvLyBgaW1wb3J0IEEsICogYXMgYiBmcm9tICdBJztgXG4gIGNvbnN0IEltcG9ydERlY2xhcmF0aW9uID0gT2JqZWN0U2hvcnRoYW5kICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJJbXBvcnREZWNsYXJhdGlvblwiXSA9IEltcG9ydERlY2xhcmF0aW9uXSA9IFwiSW1wb3J0RGVjbGFyYXRpb25cIjtcbiAgY29uc3QgT2JqZWN0S2V5ID0gSW1wb3J0RGVjbGFyYXRpb24gKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIk9iamVjdEtleVwiXSA9IE9iamVjdEtleV0gPSBcIk9iamVjdEtleVwiO1xuICAvLyBUaGUgYGZvb2AgaW4gYGltcG9ydCB7Zm9vIGFzIGJhcn0gZnJvbSBcIi4vYWJjXCI7YC5cbiAgY29uc3QgSW1wb3J0QWNjZXNzID0gT2JqZWN0S2V5ICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJJbXBvcnRBY2Nlc3NcIl0gPSBJbXBvcnRBY2Nlc3NdID0gXCJJbXBvcnRBY2Nlc3NcIjtcbn0pKElkZW50aWZpZXJSb2xlIHx8IChJZGVudGlmaWVyUm9sZSA9IHt9KSk7XG5cbi8qKlxuICogRXh0cmEgaW5mb3JtYXRpb24gb24ganN4VGFnU3RhcnQgdG9rZW5zLCB1c2VkIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdGhyZWVcbiAqIGpzeCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgYXV0b21hdGljIHRyYW5zZm9ybS5cbiAqL1xuZXhwb3J0IHZhciBKU1hSb2xlOyAoZnVuY3Rpb24gKEpTWFJvbGUpIHtcbiAgLy8gVGhlIGVsZW1lbnQgaXMgc2VsZi1jbG9zaW5nIG9yIGhhcyBhIGJvZHkgdGhhdCByZXNvbHZlcyB0byBlbXB0eS4gV2VcbiAgLy8gc2hvdWxkbid0IGVtaXQgY2hpbGRyZW4gYXQgYWxsIGluIHRoaXMgY2FzZS5cbiAgY29uc3QgTm9DaGlsZHJlbiA9IDA7IEpTWFJvbGVbSlNYUm9sZVtcIk5vQ2hpbGRyZW5cIl0gPSBOb0NoaWxkcmVuXSA9IFwiTm9DaGlsZHJlblwiO1xuICAvLyBUaGUgZWxlbWVudCBoYXMgYSBzaW5nbGUgZXhwbGljaXQgY2hpbGQsIHdoaWNoIG1pZ2h0IHN0aWxsIGJlIGFuIGFyYml0cmFyeVxuICAvLyBleHByZXNzaW9uIGxpa2UgYW4gYXJyYXkuIFdlIHNob3VsZCBlbWl0IHRoYXQgZXhwcmVzc2lvbiBhcyB0aGUgY2hpbGRyZW4uXG4gIGNvbnN0IE9uZUNoaWxkID0gTm9DaGlsZHJlbiArIDE7IEpTWFJvbGVbSlNYUm9sZVtcIk9uZUNoaWxkXCJdID0gT25lQ2hpbGRdID0gXCJPbmVDaGlsZFwiO1xuICAvLyBUaGUgZWxlbWVudCBoYXMgYXQgbGVhc3QgdHdvIGV4cGxpY2l0bHktc3BlY2lmaWVkIGNoaWxkcmVuIG9yIGhhcyBzcHJlYWRcbiAgLy8gY2hpbGRyZW4sIHNvIGNoaWxkIHBvc2l0aW9ucyBhcmUgYXNzdW1lZCB0byBiZSBcInN0YXRpY1wiLiBXZSBzaG91bGQgd3JhcFxuICAvLyB0aGVzZSBjaGlsZHJlbiBpbiBhbiBhcnJheS5cbiAgY29uc3QgU3RhdGljQ2hpbGRyZW4gPSBPbmVDaGlsZCArIDE7IEpTWFJvbGVbSlNYUm9sZVtcIlN0YXRpY0NoaWxkcmVuXCJdID0gU3RhdGljQ2hpbGRyZW5dID0gXCJTdGF0aWNDaGlsZHJlblwiO1xuICAvLyBUaGUgZWxlbWVudCBoYXMgYSBwcm9wIG5hbWVkIFwia2V5XCIgYWZ0ZXIgYSBwcm9wIHNwcmVhZCwgc28gd2Ugc2hvdWxkIGZhbGxcbiAgLy8gYmFjayB0byB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbi5cbiAgY29uc3QgS2V5QWZ0ZXJQcm9wU3ByZWFkID0gU3RhdGljQ2hpbGRyZW4gKyAxOyBKU1hSb2xlW0pTWFJvbGVbXCJLZXlBZnRlclByb3BTcHJlYWRcIl0gPSBLZXlBZnRlclByb3BTcHJlYWRdID0gXCJLZXlBZnRlclByb3BTcHJlYWRcIjtcbn0pKEpTWFJvbGUgfHwgKEpTWFJvbGUgPSB7fSkpO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWNsYXJhdGlvbih0b2tlbikge1xuICBjb25zdCByb2xlID0gdG9rZW4uaWRlbnRpZmllclJvbGU7XG4gIHJldHVybiAoXG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5CbG9ja1Njb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vblRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pIHtcbiAgY29uc3Qgcm9sZSA9IHRva2VuLmlkZW50aWZpZXJSb2xlO1xuICByZXR1cm4gKFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5CbG9ja1Njb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZEJsb2NrU2NvcGVkRGVjbGFyYXRpb25cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wTGV2ZWxEZWNsYXJhdGlvbih0b2tlbikge1xuICBjb25zdCByb2xlID0gdG9rZW4uaWRlbnRpZmllclJvbGU7XG4gIHJldHVybiAoXG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvblxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCbG9ja1Njb3BlZERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgLy8gVHJlYXQgdG9wLWxldmVsIGRlY2xhcmF0aW9ucyBhcyBibG9jayBzY29wZSBzaW5jZSB0aGUgZGlzdGluY3Rpb24gZG9lc24ndCBtYXR0ZXIgaGVyZS5cbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5Ub3BMZXZlbERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24odG9rZW4pIHtcbiAgY29uc3Qgcm9sZSA9IHRva2VuLmlkZW50aWZpZXJSb2xlO1xuICByZXR1cm4gKFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNob3J0aGFuZERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIHJldHVybiAoXG4gICAgdG9rZW4uaWRlbnRpZmllclJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXG4gICk7XG59XG5cbi8vIE9iamVjdCB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IHRva2Vucy4gTm90ZSB0aGF0IG5vcm1hbGx5LCB0b2tlbnNcbi8vIHNpbXBseSBleGlzdCBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBwYXJzZXIgb2JqZWN0LiBUaGlzIGlzIG9ubHlcbi8vIHVzZWQgZm9yIHRoZSBvblRva2VuIGNhbGxiYWNrIGFuZCB0aGUgZXh0ZXJuYWwgdG9rZW5pemVyLlxuZXhwb3J0IGNsYXNzIFRva2VuIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50eXBlID0gc3RhdGUudHlwZTtcbiAgICB0aGlzLmNvbnRleHR1YWxLZXl3b3JkID0gc3RhdGUuY29udGV4dHVhbEtleXdvcmQ7XG4gICAgdGhpcy5zdGFydCA9IHN0YXRlLnN0YXJ0O1xuICAgIHRoaXMuZW5kID0gc3RhdGUuZW5kO1xuICAgIHRoaXMuc2NvcGVEZXB0aCA9IHN0YXRlLnNjb3BlRGVwdGg7XG4gICAgdGhpcy5pc1R5cGUgPSBzdGF0ZS5pc1R5cGU7XG4gICAgdGhpcy5pZGVudGlmaWVyUm9sZSA9IG51bGw7XG4gICAgdGhpcy5qc3hSb2xlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRvd3NHbG9iYWwgPSBmYWxzZTtcbiAgICB0aGlzLmlzQXN5bmNPcGVyYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbnRleHRJZCA9IG51bGw7XG4gICAgdGhpcy5yaHNFbmRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5pc0V4cHJlc3Npb24gPSBmYWxzZTtcbiAgICB0aGlzLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0cyA9IDA7XG4gICAgdGhpcy5udW1OdWxsaXNoQ29hbGVzY2VFbmRzID0gMDtcbiAgICB0aGlzLmlzT3B0aW9uYWxDaGFpblN0YXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5pc09wdGlvbmFsQ2hhaW5FbmQgPSBmYWxzZTtcbiAgICB0aGlzLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBudWxsO1xuICAgIHRoaXMubnVsbGlzaFN0YXJ0SW5kZXggPSBudWxsO1xuICB9XG5cbiAgXG4gIFxuICBcbiAgXG4gIFxuICBcbiAgXG4gIFxuICAvLyBJbml0aWFsbHkgZmFsc2UgZm9yIGFsbCB0b2tlbnMsIHRoZW4gbWF5IGJlIGNvbXB1dGVkIGluIGEgZm9sbG93LXVwIHN0ZXAgdGhhdCBkb2VzIHNjb3BlXG4gIC8vIGFuYWx5c2lzLlxuICBcbiAgLy8gSW5pdGlhbGx5IGZhbHNlIGZvciBhbGwgdG9rZW5zLCBidXQgbWF5IGJlIHNldCBkdXJpbmcgdHJhbnNmb3JtIHRvIG1hcmsgaXQgYXMgY29udGFpbmluZyBhblxuICAvLyBhd2FpdCBvcGVyYXRpb24uXG4gIFxuICBcbiAgLy8gRm9yIGFzc2lnbm1lbnRzLCB0aGUgaW5kZXggb2YgdGhlIFJIUy4gRm9yIGV4cG9ydCB0b2tlbnMsIHRoZSBlbmQgb2YgdGhlIGV4cG9ydC5cbiAgXG4gIC8vIEZvciBjbGFzcyB0b2tlbnMsIHJlY29yZHMgaWYgdGhlIGNsYXNzIGlzIGEgY2xhc3MgZXhwcmVzc2lvbiBvciBhIGNsYXNzIHN0YXRlbWVudC5cbiAgXG4gIC8vIE51bWJlciBvZiB0aW1lcyB0byBpbnNlcnQgYSBgbnVsbGlzaENvYWxlc2NlKGAgc25pcHBldCBiZWZvcmUgdGhpcyB0b2tlbi5cbiAgXG4gIC8vIE51bWJlciBvZiB0aW1lcyB0byBpbnNlcnQgYSBgKWAgc25pcHBldCBhZnRlciB0aGlzIHRva2VuLlxuICBcbiAgLy8gSWYgdHJ1ZSwgaW5zZXJ0IGFuIGBvcHRpb25hbENoYWluKFtgIHNuaXBwZXQgYmVmb3JlIHRoaXMgdG9rZW4uXG4gIFxuICAvLyBJZiB0cnVlLCBpbnNlcnQgYSBgXSlgIHNuaXBwZXQgYWZ0ZXIgdGhpcyB0b2tlbi5cbiAgXG4gIC8vIFRhZyBmb3IgYC5gLCBgPy5gLCBgW2AsIGA/LltgLCBgKGAsIGFuZCBgPy4oYCB0byBkZW5vdGUgdGhlIFwicm9vdFwiIHRva2VuIGZvciB0aGlzXG4gIC8vIHN1YnNjcmlwdCBjaGFpbi4gVGhpcyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFpbiBpcyBhbiBvcHRpb25hbCBjaGFpbi5cbiAgXG4gIC8vIFRhZyBmb3IgYD8/YCBvcGVyYXRvcnMgdG8gZGVub3RlIHRoZSByb290IHRva2VuIGZvciB0aGlzIG51bGxpc2ggY29hbGVzY2luZyBjYWxsLlxuICBcbn1cblxuLy8gIyMgVG9rZW5pemVyXG5cbi8vIE1vdmUgdG8gdGhlIG5leHQgdG9rZW5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0KCkge1xuICBzdGF0ZS50b2tlbnMucHVzaChuZXcgVG9rZW4oKSk7XG4gIG5leHRUb2tlbigpO1xufVxuXG4vLyBDYWxsIGluc3RlYWQgb2YgbmV4dCB3aGVuIGluc2lkZSBhIHRlbXBsYXRlLCBzaW5jZSB0aGF0IG5lZWRzIHRvIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkuXG5leHBvcnQgZnVuY3Rpb24gbmV4dFRlbXBsYXRlVG9rZW4oKSB7XG4gIHN0YXRlLnRva2Vucy5wdXNoKG5ldyBUb2tlbigpKTtcbiAgc3RhdGUuc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHJlYWRUbXBsVG9rZW4oKTtcbn1cblxuLy8gVGhlIHRva2VuaXplciBuZXZlciBwYXJzZXMgcmVnZXhlcyBieSBkZWZhdWx0LiBJbnN0ZWFkLCB0aGUgcGFyc2VyIGlzIHJlc3BvbnNpYmxlIGZvclxuLy8gaW5zdHJ1Y3RpbmcgaXQgdG8gcGFyc2UgYSByZWdleCB3aGVuIHdlIHNlZSBhIHNsYXNoIGF0IHRoZSBzdGFydCBvZiBhbiBleHByZXNzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIHJldG9rZW5pemVTbGFzaEFzUmVnZXgoKSB7XG4gIGlmIChzdGF0ZS50eXBlID09PSB0dC5hc3NpZ24pIHtcbiAgICAtLXN0YXRlLnBvcztcbiAgfVxuICByZWFkUmVnZXhwKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoVHlwZUNvbnRleHQoZXhpc3RpbmdUb2tlbnNJblR5cGUpIHtcbiAgZm9yIChsZXQgaSA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSBleGlzdGluZ1Rva2Vuc0luVHlwZTsgaSA8IHN0YXRlLnRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHN0YXRlLnRva2Vuc1tpXS5pc1R5cGUgPSB0cnVlO1xuICB9XG4gIGNvbnN0IG9sZElzVHlwZSA9IHN0YXRlLmlzVHlwZTtcbiAgc3RhdGUuaXNUeXBlID0gdHJ1ZTtcbiAgcmV0dXJuIG9sZElzVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSkge1xuICBzdGF0ZS5pc1R5cGUgPSBvbGRJc1R5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYXQodHlwZSkge1xuICBpZiAobWF0Y2godHlwZSkpIHtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYXRUeXBlVG9rZW4odG9rZW5UeXBlKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHN0YXRlLmlzVHlwZTtcbiAgc3RhdGUuaXNUeXBlID0gdHJ1ZTtcbiAgZWF0KHRva2VuVHlwZSk7XG4gIHN0YXRlLmlzVHlwZSA9IG9sZElzVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKHR5cGUpIHtcbiAgcmV0dXJuIHN0YXRlLnR5cGUgPT09IHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rYWhlYWRUeXBlKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG4gIG5leHQoKTtcbiAgY29uc3QgdHlwZSA9IHN0YXRlLnR5cGU7XG4gIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGNsYXNzIFR5cGVBbmRLZXl3b3JkIHtcbiAgXG4gIFxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZXh0dWFsS2V5d29yZCA9IGNvbnRleHR1YWxLZXl3b3JkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rYWhlYWRUeXBlQW5kS2V5d29yZCgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICBuZXh0KCk7XG4gIGNvbnN0IHR5cGUgPSBzdGF0ZS50eXBlO1xuICBjb25zdCBjb250ZXh0dWFsS2V5d29yZCA9IHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkO1xuICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgcmV0dXJuIG5ldyBUeXBlQW5kS2V5d29yZCh0eXBlLCBjb250ZXh0dWFsS2V5d29yZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0VG9rZW5TdGFydCgpIHtcbiAgcmV0dXJuIG5leHRUb2tlblN0YXJ0U2luY2Uoc3RhdGUucG9zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRUb2tlblN0YXJ0U2luY2UocG9zKSB7XG4gIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHBvcztcbiAgY29uc3Qgc2tpcCA9IHNraXBXaGl0ZVNwYWNlLmV4ZWMoaW5wdXQpO1xuICByZXR1cm4gcG9zICsgc2tpcFswXS5sZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rYWhlYWRDaGFyQ29kZSgpIHtcbiAgcmV0dXJuIGlucHV0LmNoYXJDb2RlQXQobmV4dFRva2VuU3RhcnQoKSk7XG59XG5cbi8vIFJlYWQgYSBzaW5nbGUgdG9rZW4sIHVwZGF0aW5nIHRoZSBwYXJzZXIgb2JqZWN0J3MgdG9rZW4tcmVsYXRlZFxuLy8gcHJvcGVydGllcy5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0VG9rZW4oKSB7XG4gIHNraXBTcGFjZSgpO1xuICBzdGF0ZS5zdGFydCA9IHN0YXRlLnBvcztcbiAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICBjb25zdCB0b2tlbnMgPSBzdGF0ZS50b2tlbnM7XG4gICAgLy8gV2Ugbm9ybWFsbHkgcnVuIHBhc3QgdGhlIGVuZCBhIGJpdCwgYnV0IGlmIHdlJ3JlIHdheSBwYXN0IHRoZSBlbmQsIGF2b2lkIGFuIGluZmluaXRlIGxvb3AuXG4gICAgLy8gQWxzbyBjaGVjayB0aGUgdG9rZW4gcG9zaXRpb25zIHJhdGhlciB0aGFuIHRoZSB0eXBlcyBzaW5jZSBzb21ldGltZXMgd2UgcmV3cml0ZSB0aGUgdG9rZW5cbiAgICAvLyB0eXBlIHRvIHNvbWV0aGluZyBlbHNlLlxuICAgIGlmIChcbiAgICAgIHRva2Vucy5sZW5ndGggPj0gMiAmJlxuICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5zdGFydCA+PSBpbnB1dC5sZW5ndGggJiZcbiAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0uc3RhcnQgPj0gaW5wdXQubGVuZ3RoXG4gICAgKSB7XG4gICAgICB1bmV4cGVjdGVkKFwiVW5leHBlY3RlZGx5IHJlYWNoZWQgdGhlIGVuZCBvZiBpbnB1dC5cIik7XG4gICAgfVxuICAgIGZpbmlzaFRva2VuKHR0LmVvZik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJlYWRUb2tlbihpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcykpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW4oY29kZSkge1xuICAvLyBJZGVudGlmaWVyIG9yIGtleXdvcmQuICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaW5cbiAgLy8gaWRlbnRpZmllcnMsIHNvICdcXCcgYWxzbyBkaXNwYXRjaGVzIHRvIHRoYXQuXG4gIGlmIChcbiAgICBJU19JREVOVElGSUVSX1NUQVJUW2NvZGVdIHx8XG4gICAgY29kZSA9PT0gY2hhckNvZGVzLmJhY2tzbGFzaCB8fFxuICAgIChjb2RlID09PSBjaGFyQ29kZXMuYXRTaWduICYmIGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSkgPT09IGNoYXJDb2Rlcy5hdFNpZ24pXG4gICkge1xuICAgIHJlYWRXb3JkKCk7XG4gIH0gZWxzZSB7XG4gICAgZ2V0VG9rZW5Gcm9tQ29kZShjb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBza2lwQmxvY2tDb21tZW50KCkge1xuICB3aGlsZSAoXG4gICAgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpICE9PSBjaGFyQ29kZXMuYXN0ZXJpc2sgfHxcbiAgICBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpICE9PSBjaGFyQ29kZXMuc2xhc2hcbiAgKSB7XG4gICAgc3RhdGUucG9zKys7XG4gICAgaWYgKHN0YXRlLnBvcyA+IGlucHV0Lmxlbmd0aCkge1xuICAgICAgdW5leHBlY3RlZChcIlVudGVybWluYXRlZCBjb21tZW50XCIsIHN0YXRlLnBvcyAtIDIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5wb3MgKz0gMjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNraXBMaW5lQ29tbWVudChzdGFydFNraXApIHtcbiAgbGV0IGNoID0gaW5wdXQuY2hhckNvZGVBdCgoc3RhdGUucG9zICs9IHN0YXJ0U2tpcCkpO1xuICBpZiAoc3RhdGUucG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgd2hpbGUgKFxuICAgICAgY2ggIT09IGNoYXJDb2Rlcy5saW5lRmVlZCAmJlxuICAgICAgY2ggIT09IGNoYXJDb2Rlcy5jYXJyaWFnZVJldHVybiAmJlxuICAgICAgY2ggIT09IGNoYXJDb2Rlcy5saW5lU2VwYXJhdG9yICYmXG4gICAgICBjaCAhPT0gY2hhckNvZGVzLnBhcmFncmFwaFNlcGFyYXRvciAmJlxuICAgICAgKytzdGF0ZS5wb3MgPCBpbnB1dC5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJzZSBhbmQgYWZ0ZXIgZXZlcnkgdG9rZW4uIFNraXBzXG4vLyB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cy5cbmV4cG9ydCBmdW5jdGlvbiBza2lwU3BhY2UoKSB7XG4gIHdoaWxlIChzdGF0ZS5wb3MgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICBjb25zdCBjaCA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlIGNoYXJDb2Rlcy5jYXJyaWFnZVJldHVybjpcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSkgPT09IGNoYXJDb2Rlcy5saW5lRmVlZCkge1xuICAgICAgICAgICsrc3RhdGUucG9zO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgY2hhckNvZGVzLmxpbmVGZWVkOlxuICAgICAgY2FzZSBjaGFyQ29kZXMubGluZVNlcGFyYXRvcjpcbiAgICAgIGNhc2UgY2hhckNvZGVzLnBhcmFncmFwaFNlcGFyYXRvcjpcbiAgICAgICAgKytzdGF0ZS5wb3M7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGNoYXJDb2Rlcy5zbGFzaDpcbiAgICAgICAgc3dpdGNoIChpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpKSB7XG4gICAgICAgICAgY2FzZSBjaGFyQ29kZXMuYXN0ZXJpc2s6XG4gICAgICAgICAgICBzdGF0ZS5wb3MgKz0gMjtcbiAgICAgICAgICAgIHNraXBCbG9ja0NvbW1lbnQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBjaGFyQ29kZXMuc2xhc2g6XG4gICAgICAgICAgICBza2lwTGluZUNvbW1lbnQoMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChJU19XSElURVNQQUNFW2NoXSkge1xuICAgICAgICAgICsrc3RhdGUucG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSB0b2tlbi4gU2V0cyB2YXJpb3VzIGZpZWxkcywgYW5kIHNraXBzIHRoZSBzcGFjZSBhZnRlciB0aGUgdG9rZW4sIHNvXG4vLyB0aGF0IHRoZSBuZXh0IG9uZSdzIGBzdGFydGAgd2lsbCBwb2ludCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXG5leHBvcnQgZnVuY3Rpb24gZmluaXNoVG9rZW4oXG4gIHR5cGUsXG4gIGNvbnRleHR1YWxLZXl3b3JkID0gQ29udGV4dHVhbEtleXdvcmQuTk9ORSxcbikge1xuICBzdGF0ZS5lbmQgPSBzdGF0ZS5wb3M7XG4gIHN0YXRlLnR5cGUgPSB0eXBlO1xuICBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9IGNvbnRleHR1YWxLZXl3b3JkO1xufVxuXG4vLyAjIyMgVG9rZW4gcmVhZGluZ1xuXG4vLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBmZXRjaCB0aGUgbmV4dCB0b2tlbi4gSXRcbi8vIGlzIHNvbWV3aGF0IG9ic2N1cmUsIGJlY2F1c2UgaXQgd29ya3MgaW4gY2hhcmFjdGVyIGNvZGVzIHJhdGhlclxuLy8gdGhhbiBjaGFyYWN0ZXJzLCBhbmQgYmVjYXVzZSBvcGVyYXRvciBwYXJzaW5nIGhhcyBiZWVuIGlubGluZWRcbi8vIGludG8gaXQuXG4vL1xuLy8gQWxsIGluIHRoZSBuYW1lIG9mIHNwZWVkLlxuZnVuY3Rpb24gcmVhZFRva2VuX2RvdCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPj0gY2hhckNvZGVzLmRpZ2l0MCAmJiBuZXh0Q2hhciA8PSBjaGFyQ29kZXMuZGlnaXQ5KSB7XG4gICAgcmVhZE51bWJlcih0cnVlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5kb3QgJiYgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAyKSA9PT0gY2hhckNvZGVzLmRvdCkge1xuICAgIHN0YXRlLnBvcyArPSAzO1xuICAgIGZpbmlzaFRva2VuKHR0LmVsbGlwc2lzKTtcbiAgfSBlbHNlIHtcbiAgICArK3N0YXRlLnBvcztcbiAgICBmaW5pc2hUb2tlbih0dC5kb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9zbGFzaCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgIGZpbmlzaE9wKHR0LmFzc2lnbiwgMik7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AodHQuc2xhc2gsIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9tdWx0X21vZHVsbyhjb2RlKSB7XG4gIC8vICclKidcbiAgbGV0IHRva2VuVHlwZSA9IGNvZGUgPT09IGNoYXJDb2Rlcy5hc3RlcmlzayA/IHR0LnN0YXIgOiB0dC5tb2R1bG87XG4gIGxldCB3aWR0aCA9IDE7XG4gIGxldCBuZXh0Q2hhciA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSk7XG5cbiAgLy8gRXhwb25lbnRpYXRpb24gb3BlcmF0b3IgKipcbiAgaWYgKGNvZGUgPT09IGNoYXJDb2Rlcy5hc3RlcmlzayAmJiBuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmFzdGVyaXNrKSB7XG4gICAgd2lkdGgrKztcbiAgICBuZXh0Q2hhciA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMik7XG4gICAgdG9rZW5UeXBlID0gdHQuZXhwb25lbnQ7XG4gIH1cblxuICAvLyBNYXRjaCAqPSBvciAlPSwgZGlzYWxsb3dpbmcgKj0+IHdoaWNoIGNhbiBiZSB2YWxpZCBpbiBmbG93LlxuICBpZiAoXG4gICAgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbyAmJlxuICAgIGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMikgIT09IGNoYXJDb2Rlcy5ncmVhdGVyVGhhblxuICApIHtcbiAgICB3aWR0aCsrO1xuICAgIHRva2VuVHlwZSA9IHR0LmFzc2lnbjtcbiAgfVxuXG4gIGZpbmlzaE9wKHRva2VuVHlwZSwgd2lkdGgpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcGlwZV9hbXAoY29kZSkge1xuICAvLyAnfCYnXG4gIGNvbnN0IG5leHRDaGFyID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKTtcblxuICBpZiAobmV4dENoYXIgPT09IGNvZGUpIHtcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAyKSA9PT0gY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgICAvLyB8fD0gb3IgJiY9XG4gICAgICBmaW5pc2hPcCh0dC5hc3NpZ24sIDMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB8fCBvciAmJlxuICAgICAgZmluaXNoT3AoY29kZSA9PT0gY2hhckNvZGVzLnZlcnRpY2FsQmFyID8gdHQubG9naWNhbE9SIDogdHQubG9naWNhbEFORCwgMik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb2RlID09PSBjaGFyQ29kZXMudmVydGljYWxCYXIpIHtcbiAgICAvLyAnfD4nXG4gICAgaWYgKG5leHRDaGFyID09PSBjaGFyQ29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICAgIGZpbmlzaE9wKHR0LnBpcGVsaW5lLCAyKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG5leHRDaGFyID09PSBjaGFyQ29kZXMucmlnaHRDdXJseUJyYWNlICYmIGlzRmxvd0VuYWJsZWQpIHtcbiAgICAgIC8vICd8fSdcbiAgICAgIGZpbmlzaE9wKHR0LmJyYWNlQmFyUiwgMik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5leHRDaGFyID09PSBjaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICBmaW5pc2hPcCh0dC5hc3NpZ24sIDIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpbmlzaE9wKGNvZGUgPT09IGNoYXJDb2Rlcy52ZXJ0aWNhbEJhciA/IHR0LmJpdHdpc2VPUiA6IHR0LmJpdHdpc2VBTkQsIDEpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fY2FyZXQoKSB7XG4gIC8vICdeJ1xuICBjb25zdCBuZXh0Q2hhciA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSk7XG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgZmluaXNoT3AodHQuYXNzaWduLCAyKTtcbiAgfSBlbHNlIHtcbiAgICBmaW5pc2hPcCh0dC5iaXR3aXNlWE9SLCAxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcGx1c19taW4oY29kZSkge1xuICAvLyAnKy0nXG4gIGNvbnN0IG5leHRDaGFyID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKTtcblxuICBpZiAobmV4dENoYXIgPT09IGNvZGUpIHtcbiAgICAvLyBUZW50YXRpdmVseSBjYWxsIHRoaXMgYSBwcmVmaXggb3BlcmF0b3IsIGJ1dCBpdCBtaWdodCBiZSBjaGFuZ2VkIHRvIHBvc3RmaXggbGF0ZXIuXG4gICAgZmluaXNoT3AodHQucHJlSW5jRGVjLCAyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgIGZpbmlzaE9wKHR0LmFzc2lnbiwgMik7XG4gIH0gZWxzZSBpZiAoY29kZSA9PT0gY2hhckNvZGVzLnBsdXNTaWduKSB7XG4gICAgZmluaXNoT3AodHQucGx1cywgMSk7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AodHQubWludXMsIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9sdCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmxlc3NUaGFuKSB7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMikgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgICAgZmluaXNoT3AodHQuYXNzaWduLCAzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gV2Ugc2VlIDw8LCBidXQgbmVlZCB0byBiZSByZWFsbHkgY2FyZWZ1bCBhYm91dCB3aGV0aGVyIHRvIHRyZWF0IGl0IGFzIGFcbiAgICAvLyB0cnVlIGxlZnQtc2hpZnQgb3IgYXMgdHdvIDwgdG9rZW5zLlxuICAgIGlmIChzdGF0ZS5pc1R5cGUpIHtcbiAgICAgIC8vIFdpdGhpbiBhIHR5cGUsIDw8IG1pZ2h0IGNvbWUgdXAgaW4gYSBzbmlwcGV0IGxpa2UgYEFycmF5PDxUPigpID0+IHZvaWQ+YCxcbiAgICAgIC8vIHNvIHRyZWF0IGl0IGFzIHR3byA8IHRva2Vucy4gSW1wb3J0YW50bHksIHRoaXMgc2hvdWxkIG9ubHkgb3ZlcnJpZGUgPDxcbiAgICAgIC8vIHJhdGhlciB0aGFuIG90aGVyIHRva2VucyBsaWtlIDw9IC4gSWYgd2UgdHJlYXRlZCA8PSBhcyA8IGluIGEgdHlwZVxuICAgICAgLy8gY29udGV4dCwgdGhlbiB0aGUgc25pcHBldCBgYSBhcyBUIDw9IDFgIHdvdWxkIGluY29ycmVjdGx5IHN0YXJ0IHBhcnNpbmdcbiAgICAgIC8vIGEgdHlwZSBhcmd1bWVudCBvbiBULiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGBhIGFzIFQgPDwgMWBcbiAgICAgIC8vIGJlY2F1c2UgVHlwZVNjcmlwdCBkaXNhbGxvd3MgdGhhdCBzeW50YXguXG4gICAgICBmaW5pc2hPcCh0dC5sZXNzVGhhbiwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE91dHNpZGUgYSB0eXBlLCB0aGlzIG1pZ2h0IGJlIGEgdHJ1ZSBsZWZ0LXNoaWZ0IG9wZXJhdG9yLCBvciBpdCBtaWdodFxuICAgICAgLy8gc3RpbGwgYmUgdHdvIG9wZW4tdHlwZS1hcmcgdG9rZW5zLCBzdWNoIGFzIGluIGBmPDxUPigpID0+IHZvaWQ+KClgLiBXZVxuICAgICAgLy8gbG9vayBhdCB0aGUgdG9rZW4gd2hpbGUgY29uc2lkZXJpbmcgdGhlIGBmYCwgc28gd2UgZG9uJ3QgeWV0IGtub3cgdGhhdFxuICAgICAgLy8gd2UncmUgaW4gYSB0eXBlIGNvbnRleHQuIEluIHRoaXMgY2FzZSwgd2UgaW5pdGlhbGx5IHRva2VuaXplIGFzIGFcbiAgICAgIC8vIGxlZnQtc2hpZnQgYW5kIGNvcnJlY3QgYWZ0ZXItdGhlLWZhY3QgYXMgbmVjZXNzYXJ5IGluXG4gICAgICAvLyB0c1BhcnNlVHlwZUFyZ3VtZW50c1dpdGhQb3NzaWJsZUJpdHNoaWZ0IC5cbiAgICAgIGZpbmlzaE9wKHR0LmJpdFNoaWZ0TCwgMik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgLy8gPD1cbiAgICBmaW5pc2hPcCh0dC5yZWxhdGlvbmFsT3JFcXVhbCwgMik7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AodHQubGVzc1RoYW4sIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9ndCgpIHtcbiAgaWYgKHN0YXRlLmlzVHlwZSkge1xuICAgIC8vIEF2b2lkIHJpZ2h0LXNoaWZ0IGZvciB0aGluZ3MgbGlrZSBgQXJyYXk8QXJyYXk8c3RyaW5nPj5gIGFuZFxuICAgIC8vIGdyZWF0ZXItdGhhbi1vci1lcXVhbCBmb3IgdGhpbmdzIGxpa2UgYGNvbnN0IGE6IEFycmF5PG51bWJlcj49W107YC5cbiAgICBmaW5pc2hPcCh0dC5ncmVhdGVyVGhhbiwgMSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmdyZWF0ZXJUaGFuKSB7XG4gICAgY29uc3Qgc2l6ZSA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMikgPT09IGNoYXJDb2Rlcy5ncmVhdGVyVGhhbiA/IDMgOiAyO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIHNpemUpID09PSBjaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICAgIGZpbmlzaE9wKHR0LmFzc2lnbiwgc2l6ZSArIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaW5pc2hPcCh0dC5iaXRTaGlmdFIsIHNpemUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgLy8gPj1cbiAgICBmaW5pc2hPcCh0dC5yZWxhdGlvbmFsT3JFcXVhbCwgMik7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AodHQuZ3JlYXRlclRoYW4sIDEpO1xuICB9XG59XG5cbi8qKlxuICogUmVpbnRlcnByZXQgYSBwb3NzaWJsZSA+IHRva2VuIHdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIGEgdHlwZSB0byBhIG5vbi10eXBlXG4gKiBjb250ZXh0LlxuICpcbiAqIFRoaXMgY29tZXMgdXAgaW4gdHdvIHNpdHVhdGlvbnMgd2hlcmUgPj0gbmVlZHMgdG8gYmUgdHJlYXRlZCBhcyBvbmUgdG9rZW46XG4gKiAtIEFmdGVyIGFuIGBhc2AgZXhwcmVzc2lvbiwgbGlrZSBpbiB0aGUgY29kZSBgYSBhcyBUID49IDFgLlxuICogLSBJbiBhIHR5cGUgYXJndW1lbnQgaW4gYW4gZXhwcmVzc2lvbiBjb250ZXh0LCBlLmcuIGBmKGEgPCBiLCBjID49IGQpYCwgd2VcbiAqICAgbmVlZCB0byBzZWUgdGhlIHRva2VuIGFzID49IHNvIHRoYXQgd2UgZ2V0IGFuIGVycm9yIGFuZCBiYWNrdHJhY2sgdG9cbiAqICAgbm9ybWFsIGV4cHJlc3Npb24gcGFyc2luZy5cbiAqXG4gKiBPdGhlciBzaXR1YXRpb25zIHJlcXVpcmUgPj0gdG8gYmUgc2VlbiBhcyB0d28gdG9rZW5zLCBlLmcuXG4gKiBgY29uc3QgeDogQXJyYXk8VD49W107YCwgc28gaXQncyBpbXBvcnRhbnQgdG8gdHJlYXQgPiBhcyBpdHMgb3duIHRva2VuIGluXG4gKiB0eXBpY2FsIHR5cGUgcGFyc2luZyBzaXR1YXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzY2FuX2d0KCkge1xuICBpZiAoc3RhdGUudHlwZSA9PT0gdHQuZ3JlYXRlclRoYW4pIHtcbiAgICBzdGF0ZS5wb3MgLT0gMTtcbiAgICByZWFkVG9rZW5fZ3QoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fZXFfZXhjbChjb2RlKSB7XG4gIC8vICc9ISdcbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgIGZpbmlzaE9wKHR0LmVxdWFsaXR5LCBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDIpID09PSBjaGFyQ29kZXMuZXF1YWxzVG8gPyAzIDogMik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjb2RlID09PSBjaGFyQ29kZXMuZXF1YWxzVG8gJiYgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5ncmVhdGVyVGhhbikge1xuICAgIC8vICc9PidcbiAgICBzdGF0ZS5wb3MgKz0gMjtcbiAgICBmaW5pc2hUb2tlbih0dC5hcnJvdyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZpbmlzaE9wKGNvZGUgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbyA/IHR0LmVxIDogdHQuYmFuZywgMSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9xdWVzdGlvbigpIHtcbiAgLy8gJz8nXG4gIGNvbnN0IG5leHRDaGFyID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKTtcbiAgY29uc3QgbmV4dENoYXIyID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAyKTtcbiAgaWYgKFxuICAgIG5leHRDaGFyID09PSBjaGFyQ29kZXMucXVlc3Rpb25NYXJrICYmXG4gICAgLy8gSW4gRmxvdyAoYnV0IG5vdCBUeXBlU2NyaXB0KSwgPz9zdHJpbmcgaXMgYSB2YWxpZCB0eXBlIHRoYXQgc2hvdWxkIGJlXG4gICAgLy8gdG9rZW5pemVkIGFzIHR3byBpbmRpdmlkdWFsID8gdG9rZW5zLlxuICAgICEoaXNGbG93RW5hYmxlZCAmJiBzdGF0ZS5pc1R5cGUpXG4gICkge1xuICAgIGlmIChuZXh0Q2hhcjIgPT09IGNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgICAgLy8gJz8/PSdcbiAgICAgIGZpbmlzaE9wKHR0LmFzc2lnbiwgMyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICc/PydcbiAgICAgIGZpbmlzaE9wKHR0Lm51bGxpc2hDb2FsZXNjaW5nLCAyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5kb3QgJiZcbiAgICAhKG5leHRDaGFyMiA+PSBjaGFyQ29kZXMuZGlnaXQwICYmIG5leHRDaGFyMiA8PSBjaGFyQ29kZXMuZGlnaXQ5KVxuICApIHtcbiAgICAvLyAnLicgbm90IGZvbGxvd2VkIGJ5IGEgbnVtYmVyXG4gICAgc3RhdGUucG9zICs9IDI7XG4gICAgZmluaXNoVG9rZW4odHQucXVlc3Rpb25Eb3QpO1xuICB9IGVsc2Uge1xuICAgICsrc3RhdGUucG9zO1xuICAgIGZpbmlzaFRva2VuKHR0LnF1ZXN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5Gcm9tQ29kZShjb2RlKSB7XG4gIHN3aXRjaCAoY29kZSkge1xuICAgIGNhc2UgY2hhckNvZGVzLm51bWJlclNpZ246XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0Lmhhc2gpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgLy8gVGhlIGludGVycHJldGF0aW9uIG9mIGEgZG90IGRlcGVuZHMgb24gd2hldGhlciBpdCBpcyBmb2xsb3dlZFxuICAgIC8vIGJ5IGEgZGlnaXQgb3IgYW5vdGhlciB0d28gZG90cy5cblxuICAgIGNhc2UgY2hhckNvZGVzLmRvdDpcbiAgICAgIHJlYWRUb2tlbl9kb3QoKTtcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFB1bmN0dWF0aW9uIHRva2Vucy5cbiAgICBjYXNlIGNoYXJDb2Rlcy5sZWZ0UGFyZW50aGVzaXM6XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0LnBhcmVuTCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBjaGFyQ29kZXMucmlnaHRQYXJlbnRoZXNpczpcbiAgICAgICsrc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4odHQucGFyZW5SKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIGNoYXJDb2Rlcy5zZW1pY29sb246XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0LnNlbWkpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgY2hhckNvZGVzLmNvbW1hOlxuICAgICAgKytzdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbih0dC5jb21tYSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBjaGFyQ29kZXMubGVmdFNxdWFyZUJyYWNrZXQ6XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0LmJyYWNrZXRMKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIGNoYXJDb2Rlcy5yaWdodFNxdWFyZUJyYWNrZXQ6XG4gICAgICArK3N0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKHR0LmJyYWNrZXRSKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlOlxuICAgICAgaWYgKGlzRmxvd0VuYWJsZWQgJiYgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKSA9PT0gY2hhckNvZGVzLnZlcnRpY2FsQmFyKSB7XG4gICAgICAgIGZpbmlzaE9wKHR0LmJyYWNlQmFyTCwgMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK3N0YXRlLnBvcztcbiAgICAgICAgZmluaXNoVG9rZW4odHQuYnJhY2VMKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLnJpZ2h0Q3VybHlCcmFjZTpcbiAgICAgICsrc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4odHQuYnJhY2VSKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLmNvbG9uOlxuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zICsgMSkgPT09IGNoYXJDb2Rlcy5jb2xvbikge1xuICAgICAgICBmaW5pc2hPcCh0dC5kb3VibGVDb2xvbiwgMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK3N0YXRlLnBvcztcbiAgICAgICAgZmluaXNoVG9rZW4odHQuY29sb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMucXVlc3Rpb25NYXJrOlxuICAgICAgcmVhZFRva2VuX3F1ZXN0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBjaGFyQ29kZXMuYXRTaWduOlxuICAgICAgKytzdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbih0dC5hdCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIGNoYXJDb2Rlcy5ncmF2ZUFjY2VudDpcbiAgICAgICsrc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4odHQuYmFja1F1b3RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLmRpZ2l0MDoge1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyArIDEpO1xuICAgICAgLy8gJzB4JywgJzBYJywgJzBvJywgJzBPJywgJzBiJywgJzBCJ1xuICAgICAgaWYgKFxuICAgICAgICBuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmxvd2VyY2FzZVggfHxcbiAgICAgICAgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy51cHBlcmNhc2VYIHx8XG4gICAgICAgIG5leHRDaGFyID09PSBjaGFyQ29kZXMubG93ZXJjYXNlTyB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gY2hhckNvZGVzLnVwcGVyY2FzZU8gfHxcbiAgICAgICAgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VCIHx8XG4gICAgICAgIG5leHRDaGFyID09PSBjaGFyQ29kZXMudXBwZXJjYXNlQlxuICAgICAgKSB7XG4gICAgICAgIHJlYWRSYWRpeE51bWJlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFueXRoaW5nIGVsc2UgYmVnaW5uaW5nIHdpdGggYSBkaWdpdCBpcyBhbiBpbnRlZ2VyLCBvY3RhbFxuICAgIC8vIG51bWJlciwgb3IgZmxvYXQuXG4gICAgY2FzZSBjaGFyQ29kZXMuZGlnaXQxOlxuICAgIGNhc2UgY2hhckNvZGVzLmRpZ2l0MjpcbiAgICBjYXNlIGNoYXJDb2Rlcy5kaWdpdDM6XG4gICAgY2FzZSBjaGFyQ29kZXMuZGlnaXQ0OlxuICAgIGNhc2UgY2hhckNvZGVzLmRpZ2l0NTpcbiAgICBjYXNlIGNoYXJDb2Rlcy5kaWdpdDY6XG4gICAgY2FzZSBjaGFyQ29kZXMuZGlnaXQ3OlxuICAgIGNhc2UgY2hhckNvZGVzLmRpZ2l0ODpcbiAgICBjYXNlIGNoYXJDb2Rlcy5kaWdpdDk6XG4gICAgICByZWFkTnVtYmVyKGZhbHNlKTtcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFF1b3RlcyBwcm9kdWNlIHN0cmluZ3MuXG4gICAgY2FzZSBjaGFyQ29kZXMucXVvdGF0aW9uTWFyazpcbiAgICBjYXNlIGNoYXJDb2Rlcy5hcG9zdHJvcGhlOlxuICAgICAgcmVhZFN0cmluZyhjb2RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIC8vIE9wZXJhdG9ycyBhcmUgcGFyc2VkIGlubGluZSBpbiB0aW55IHN0YXRlIG1hY2hpbmVzLiAnPScgKGNoYXJDb2Rlcy5lcXVhbHNUbykgaXNcbiAgICAvLyBvZnRlbiByZWZlcnJlZCB0by4gYGZpbmlzaE9wYCBzaW1wbHkgc2tpcHMgdGhlIGFtb3VudCBvZlxuICAgIC8vIGNoYXJhY3RlcnMgaXQgaXMgZ2l2ZW4gYXMgc2Vjb25kIGFyZ3VtZW50LCBhbmQgcmV0dXJucyBhIHRva2VuXG4gICAgLy8gb2YgdGhlIHR5cGUgZ2l2ZW4gYnkgaXRzIGZpcnN0IGFyZ3VtZW50LlxuXG4gICAgY2FzZSBjaGFyQ29kZXMuc2xhc2g6XG4gICAgICByZWFkVG9rZW5fc2xhc2goKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLnBlcmNlbnRTaWduOlxuICAgIGNhc2UgY2hhckNvZGVzLmFzdGVyaXNrOlxuICAgICAgcmVhZFRva2VuX211bHRfbW9kdWxvKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMudmVydGljYWxCYXI6XG4gICAgY2FzZSBjaGFyQ29kZXMuYW1wZXJzYW5kOlxuICAgICAgcmVhZFRva2VuX3BpcGVfYW1wKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMuY2FyZXQ6XG4gICAgICByZWFkVG9rZW5fY2FyZXQoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLnBsdXNTaWduOlxuICAgIGNhc2UgY2hhckNvZGVzLmRhc2g6XG4gICAgICByZWFkVG9rZW5fcGx1c19taW4oY29kZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIGNoYXJDb2Rlcy5sZXNzVGhhbjpcbiAgICAgIHJlYWRUb2tlbl9sdCgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMuZ3JlYXRlclRoYW46XG4gICAgICByZWFkVG9rZW5fZ3QoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgY2hhckNvZGVzLmVxdWFsc1RvOlxuICAgIGNhc2UgY2hhckNvZGVzLmV4Y2xhbWF0aW9uTWFyazpcbiAgICAgIHJlYWRUb2tlbl9lcV9leGNsKGNvZGUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBjaGFyQ29kZXMudGlsZGU6XG4gICAgICBmaW5pc2hPcCh0dC50aWxkZSwgMSk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICB1bmV4cGVjdGVkKGBVbmV4cGVjdGVkIGNoYXJhY3RlciAnJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpfSdgLCBzdGF0ZS5wb3MpO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hPcCh0eXBlLCBzaXplKSB7XG4gIHN0YXRlLnBvcyArPSBzaXplO1xuICBmaW5pc2hUb2tlbih0eXBlKTtcbn1cblxuZnVuY3Rpb24gcmVhZFJlZ2V4cCgpIHtcbiAgY29uc3Qgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gIGxldCBpbkNsYXNzID0gZmFsc2U7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoc3RhdGUucG9zID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgdW5leHBlY3RlZChcIlVudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb25cIiwgc3RhcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2RlID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb2RlID09PSBjaGFyQ29kZXMubGVmdFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgICAgaW5DbGFzcyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IGNoYXJDb2Rlcy5yaWdodFNxdWFyZUJyYWNrZXQgJiYgaW5DbGFzcykge1xuICAgICAgICBpbkNsYXNzID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IGNoYXJDb2Rlcy5zbGFzaCAmJiAhaW5DbGFzcykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSBjb2RlID09PSBjaGFyQ29kZXMuYmFja3NsYXNoO1xuICAgIH1cbiAgICArK3N0YXRlLnBvcztcbiAgfVxuICArK3N0YXRlLnBvcztcbiAgLy8gTmVlZCB0byB1c2UgYHNraXBXb3JkYCBiZWNhdXNlICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaGVyZSAoZG9uJ3QgYXNrKS5cbiAgc2tpcFdvcmQoKTtcblxuICBmaW5pc2hUb2tlbih0dC5yZWdleHApO1xufVxuXG4vKipcbiAqIFJlYWQgYSBkZWNpbWFsIGludGVnZXIuIE5vdGUgdGhhdCB0aGlzIGNhbid0IGJlIHVuaWZpZWQgd2l0aCB0aGUgc2ltaWxhciBjb2RlXG4gKiBpbiByZWFkUmFkaXhOdW1iZXIgKHdoaWNoIGFsc28gaGFuZGxlcyBoZXggZGlnaXRzKSBiZWNhdXNlIFwiZVwiIG5lZWRzIHRvIGJlXG4gKiB0aGUgZW5kIG9mIHRoZSBpbnRlZ2VyIHNvIHRoYXQgd2UgY2FuIHByb3Blcmx5IGhhbmRsZSBzY2llbnRpZmljIG5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiByZWFkSW50KCkge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gICAgaWYgKChjb2RlID49IGNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBjaGFyQ29kZXMuZGlnaXQ5KSB8fCBjb2RlID09PSBjaGFyQ29kZXMudW5kZXJzY29yZSkge1xuICAgICAgc3RhdGUucG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkUmFkaXhOdW1iZXIoKSB7XG4gIHN0YXRlLnBvcyArPSAyOyAvLyAweFxuXG4gIC8vIFdhbGsgdG8gdGhlIGVuZCBvZiB0aGUgbnVtYmVyLCBhbGxvd2luZyBoZXggZGlnaXRzLlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gY2hhckNvZGVzLmRpZ2l0MCAmJiBjb2RlIDw9IGNoYXJDb2Rlcy5kaWdpdDkpIHx8XG4gICAgICAoY29kZSA+PSBjaGFyQ29kZXMubG93ZXJjYXNlQSAmJiBjb2RlIDw9IGNoYXJDb2Rlcy5sb3dlcmNhc2VGKSB8fFxuICAgICAgKGNvZGUgPj0gY2hhckNvZGVzLnVwcGVyY2FzZUEgJiYgY29kZSA8PSBjaGFyQ29kZXMudXBwZXJjYXNlRikgfHxcbiAgICAgIGNvZGUgPT09IGNoYXJDb2Rlcy51bmRlcnNjb3JlXG4gICAgKSB7XG4gICAgICBzdGF0ZS5wb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmxvd2VyY2FzZU4pIHtcbiAgICArK3N0YXRlLnBvcztcbiAgICBmaW5pc2hUb2tlbih0dC5iaWdpbnQpO1xuICB9IGVsc2Uge1xuICAgIGZpbmlzaFRva2VuKHR0Lm51bSk7XG4gIH1cbn1cblxuLy8gUmVhZCBhbiBpbnRlZ2VyLCBvY3RhbCBpbnRlZ2VyLCBvciBmbG9hdGluZy1wb2ludCBudW1iZXIuXG5mdW5jdGlvbiByZWFkTnVtYmVyKHN0YXJ0c1dpdGhEb3QpIHtcbiAgbGV0IGlzQmlnSW50ID0gZmFsc2U7XG4gIGxldCBpc0RlY2ltYWwgPSBmYWxzZTtcblxuICBpZiAoIXN0YXJ0c1dpdGhEb3QpIHtcbiAgICByZWFkSW50KCk7XG4gIH1cblxuICBsZXQgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmRvdCkge1xuICAgICsrc3RhdGUucG9zO1xuICAgIHJlYWRJbnQoKTtcbiAgICBuZXh0Q2hhciA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zKTtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gY2hhckNvZGVzLnVwcGVyY2FzZUUgfHwgbmV4dENoYXIgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VFKSB7XG4gICAgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zKTtcbiAgICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5wbHVzU2lnbiB8fCBuZXh0Q2hhciA9PT0gY2hhckNvZGVzLmRhc2gpIHtcbiAgICAgICsrc3RhdGUucG9zO1xuICAgIH1cbiAgICByZWFkSW50KCk7XG4gICAgbmV4dENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VOKSB7XG4gICAgKytzdGF0ZS5wb3M7XG4gICAgaXNCaWdJbnQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKG5leHRDaGFyID09PSBjaGFyQ29kZXMubG93ZXJjYXNlTSkge1xuICAgICsrc3RhdGUucG9zO1xuICAgIGlzRGVjaW1hbCA9IHRydWU7XG4gIH1cblxuICBpZiAoaXNCaWdJbnQpIHtcbiAgICBmaW5pc2hUb2tlbih0dC5iaWdpbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc0RlY2ltYWwpIHtcbiAgICBmaW5pc2hUb2tlbih0dC5kZWNpbWFsKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaW5pc2hUb2tlbih0dC5udW0pO1xufVxuXG5mdW5jdGlvbiByZWFkU3RyaW5nKHF1b3RlKSB7XG4gIHN0YXRlLnBvcysrO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHVuZXhwZWN0ZWQoXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaCA9IGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zKTtcbiAgICBpZiAoY2ggPT09IGNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIHN0YXRlLnBvcysrO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IHF1b3RlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc3RhdGUucG9zKys7XG4gIH1cbiAgc3RhdGUucG9zKys7XG4gIGZpbmlzaFRva2VuKHR0LnN0cmluZyk7XG59XG5cbi8vIFJlYWRzIHRlbXBsYXRlIHN0cmluZyB0b2tlbnMuXG5mdW5jdGlvbiByZWFkVG1wbFRva2VuKCkge1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHVuZXhwZWN0ZWQoXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGVcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChcbiAgICAgIGNoID09PSBjaGFyQ29kZXMuZ3JhdmVBY2NlbnQgfHxcbiAgICAgIChjaCA9PT0gY2hhckNvZGVzLmRvbGxhclNpZ24gJiYgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MgKyAxKSA9PT0gY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlKVxuICAgICkge1xuICAgICAgaWYgKHN0YXRlLnBvcyA9PT0gc3RhdGUuc3RhcnQgJiYgbWF0Y2godHQudGVtcGxhdGUpKSB7XG4gICAgICAgIGlmIChjaCA9PT0gY2hhckNvZGVzLmRvbGxhclNpZ24pIHtcbiAgICAgICAgICBzdGF0ZS5wb3MgKz0gMjtcbiAgICAgICAgICBmaW5pc2hUb2tlbih0dC5kb2xsYXJCcmFjZUwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICArK3N0YXRlLnBvcztcbiAgICAgICAgICBmaW5pc2hUb2tlbih0dC5iYWNrUXVvdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluaXNoVG9rZW4odHQudGVtcGxhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2ggPT09IGNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIHN0YXRlLnBvcysrO1xuICAgIH1cbiAgICBzdGF0ZS5wb3MrKztcbiAgfVxufVxuXG4vLyBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgd29yZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHNuaXBwZXQgYXQgdGhlIGVuZCBvZlxuLy8gcmVhZFdvcmQsIGJ1dCBjYWxsaW5nIHNraXBXb3JkIGZyb20gcmVhZFdvcmQgc2VlbXMgdG8gc2xpZ2h0bHkgaHVydCBwZXJmb3JtYW5jZSBmcm9tIHNvbWUgcm91Z2hcbi8vIG1lYXN1cmVtZW50cy5cbmV4cG9ydCBmdW5jdGlvbiBza2lwV29yZCgpIHtcbiAgd2hpbGUgKHN0YXRlLnBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChJU19JREVOVElGSUVSX0NIQVJbY2hdKSB7XG4gICAgICBzdGF0ZS5wb3MrKztcbiAgICB9IGVsc2UgaWYgKGNoID09PSBjaGFyQ29kZXMuYmFja3NsYXNoKSB7XG4gICAgICAvLyBcXHVcbiAgICAgIHN0YXRlLnBvcyArPSAyO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zKSA9PT0gY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlKSB7XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICBzdGF0ZS5wb3MgPCBpbnB1dC5sZW5ndGggJiZcbiAgICAgICAgICBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvcykgIT09IGNoYXJDb2Rlcy5yaWdodEN1cmx5QnJhY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3RhdGUucG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUucG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5cbiBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lZCBpbXBvcnQgb3IgbmFtZWQgZXhwb3J0IHNwZWNpZmllci5cbiAqXG4gKiBUaGlzIHN5bnRheCBpcyB0aGUgYGFgIGZyb20gc3RhdGVtZW50cyBsaWtlIHRoZXNlOlxuICogaW1wb3J0IHtBfSBmcm9tIFwiLi9mb29cIjtcbiAqIGV4cG9ydCB7QX07XG4gKiBleHBvcnQge0F9IGZyb20gXCIuL2Zvb1wiO1xuICpcbiAqIEFzIGl0IHR1cm5zIG91dCwgd2UgY2FuIGV4YWN0bHkgY2hhcmFjdGVyaXplIHRoZSBzeW50YXggbWVhbmluZyBieSBzaW1wbHlcbiAqIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgdG9rZW5zLCB3aGljaCBjYW4gYmUgZnJvbSAxIHRvIDQ6XG4gKiB7QX1cbiAqIHt0eXBlIEF9XG4gKiB7QSBhcyBCfVxuICoge3R5cGUgQSBhcyBCfVxuICpcbiAqIEluIHRoZSB0eXBlIGNhc2UsIHdlIG5ldmVyIGFjdHVhbGx5IG5lZWQgdGhlIG5hbWVzIGluIHByYWN0aWNlLCBzbyBkb24ndCBnZXRcbiAqIHRoZW0uXG4gKlxuICogVE9ETzogVGhlcmUncyBzb21lIHJlZHVuZGFuY3kgd2l0aCB0aGUgdHlwZSBkZXRlY3Rpb24gaGVyZSBhbmQgdGhlIGlzVHlwZVxuICogZmxhZyB0aGF0J3MgYWxyZWFkeSBwcmVzZW50IG9uIHRva2VucyBpbiBUUyBtb2RlLiBUaGlzIGZ1bmN0aW9uIGNvdWxkXG4gKiBwb3RlbnRpYWxseSBiZSBzaW1wbGlmaWVkIGFuZC9vciBwdXNoZWQgdG8gdGhlIGNhbGwgc2l0ZXMgdG8gYXZvaWQgdGhlIG9iamVjdFxuICogYWxsb2NhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyhcbiAgdG9rZW5zLFxuICBpbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKSxcbikge1xuICBsZXQgZW5kSW5kZXggPSBpbmRleCArIDE7XG4gIGlmIChpc1NwZWNpZmllckVuZCh0b2tlbnMsIGVuZEluZGV4KSkge1xuICAgIC8vIGltcG9ydCB7QX1cbiAgICBjb25zdCBuYW1lID0gdG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVHlwZTogZmFsc2UsXG4gICAgICBsZWZ0TmFtZTogbmFtZSxcbiAgICAgIHJpZ2h0TmFtZTogbmFtZSxcbiAgICAgIGVuZEluZGV4LFxuICAgIH07XG4gIH1cbiAgZW5kSW5kZXgrKztcbiAgaWYgKGlzU3BlY2lmaWVyRW5kKHRva2VucywgZW5kSW5kZXgpKSB7XG4gICAgLy8gaW1wb3J0IHt0eXBlIEF9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVHlwZTogdHJ1ZSxcbiAgICAgIGxlZnROYW1lOiBudWxsLFxuICAgICAgcmlnaHROYW1lOiBudWxsLFxuICAgICAgZW5kSW5kZXgsXG4gICAgfTtcbiAgfVxuICBlbmRJbmRleCsrO1xuICBpZiAoaXNTcGVjaWZpZXJFbmQodG9rZW5zLCBlbmRJbmRleCkpIHtcbiAgICAvLyBpbXBvcnQge0EgYXMgQn1cbiAgICByZXR1cm4ge1xuICAgICAgaXNUeXBlOiBmYWxzZSxcbiAgICAgIGxlZnROYW1lOiB0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSxcbiAgICAgIHJpZ2h0TmFtZTogdG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCArIDIpLFxuICAgICAgZW5kSW5kZXgsXG4gICAgfTtcbiAgfVxuICBlbmRJbmRleCsrO1xuICBpZiAoaXNTcGVjaWZpZXJFbmQodG9rZW5zLCBlbmRJbmRleCkpIHtcbiAgICAvLyBpbXBvcnQge3R5cGUgQSBhcyBCfVxuICAgIHJldHVybiB7XG4gICAgICBpc1R5cGU6IHRydWUsXG4gICAgICBsZWZ0TmFtZTogbnVsbCxcbiAgICAgIHJpZ2h0TmFtZTogbnVsbCxcbiAgICAgIGVuZEluZGV4LFxuICAgIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGltcG9ydC9leHBvcnQgc3BlY2lmaWVyIGF0ICR7aW5kZXh9YCk7XG59XG5cbmZ1bmN0aW9uIGlzU3BlY2lmaWVyRW5kKHRva2VucywgaW5kZXgpIHtcbiAgY29uc3QgdG9rZW4gPSB0b2tlbnMudG9rZW5zW2luZGV4XTtcbiAgcmV0dXJuIHRva2VuLnR5cGUgPT09IHR0LmJyYWNlUiB8fCB0b2tlbi50eXBlID09PSB0dC5jb21tYTtcbn1cbiIsICIvLyBVc2UgYSBNYXAgcmF0aGVyIHRoYW4gb2JqZWN0IHRvIGF2b2lkIHVuZXhwZWN0ZWQgX19wcm90b19fIGFjY2Vzcy5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNYXAoW1xuICBbXCJxdW90XCIsIFwiXFx1MDAyMlwiXSxcbiAgW1wiYW1wXCIsIFwiJlwiXSxcbiAgW1wiYXBvc1wiLCBcIlxcdTAwMjdcIl0sXG4gIFtcImx0XCIsIFwiPFwiXSxcbiAgW1wiZ3RcIiwgXCI+XCJdLFxuICBbXCJuYnNwXCIsIFwiXFx1MDBBMFwiXSxcbiAgW1wiaWV4Y2xcIiwgXCJcXHUwMEExXCJdLFxuICBbXCJjZW50XCIsIFwiXFx1MDBBMlwiXSxcbiAgW1wicG91bmRcIiwgXCJcXHUwMEEzXCJdLFxuICBbXCJjdXJyZW5cIiwgXCJcXHUwMEE0XCJdLFxuICBbXCJ5ZW5cIiwgXCJcXHUwMEE1XCJdLFxuICBbXCJicnZiYXJcIiwgXCJcXHUwMEE2XCJdLFxuICBbXCJzZWN0XCIsIFwiXFx1MDBBN1wiXSxcbiAgW1widW1sXCIsIFwiXFx1MDBBOFwiXSxcbiAgW1wiY29weVwiLCBcIlxcdTAwQTlcIl0sXG4gIFtcIm9yZGZcIiwgXCJcXHUwMEFBXCJdLFxuICBbXCJsYXF1b1wiLCBcIlxcdTAwQUJcIl0sXG4gIFtcIm5vdFwiLCBcIlxcdTAwQUNcIl0sXG4gIFtcInNoeVwiLCBcIlxcdTAwQURcIl0sXG4gIFtcInJlZ1wiLCBcIlxcdTAwQUVcIl0sXG4gIFtcIm1hY3JcIiwgXCJcXHUwMEFGXCJdLFxuICBbXCJkZWdcIiwgXCJcXHUwMEIwXCJdLFxuICBbXCJwbHVzbW5cIiwgXCJcXHUwMEIxXCJdLFxuICBbXCJzdXAyXCIsIFwiXFx1MDBCMlwiXSxcbiAgW1wic3VwM1wiLCBcIlxcdTAwQjNcIl0sXG4gIFtcImFjdXRlXCIsIFwiXFx1MDBCNFwiXSxcbiAgW1wibWljcm9cIiwgXCJcXHUwMEI1XCJdLFxuICBbXCJwYXJhXCIsIFwiXFx1MDBCNlwiXSxcbiAgW1wibWlkZG90XCIsIFwiXFx1MDBCN1wiXSxcbiAgW1wiY2VkaWxcIiwgXCJcXHUwMEI4XCJdLFxuICBbXCJzdXAxXCIsIFwiXFx1MDBCOVwiXSxcbiAgW1wib3JkbVwiLCBcIlxcdTAwQkFcIl0sXG4gIFtcInJhcXVvXCIsIFwiXFx1MDBCQlwiXSxcbiAgW1wiZnJhYzE0XCIsIFwiXFx1MDBCQ1wiXSxcbiAgW1wiZnJhYzEyXCIsIFwiXFx1MDBCRFwiXSxcbiAgW1wiZnJhYzM0XCIsIFwiXFx1MDBCRVwiXSxcbiAgW1wiaXF1ZXN0XCIsIFwiXFx1MDBCRlwiXSxcbiAgW1wiQWdyYXZlXCIsIFwiXFx1MDBDMFwiXSxcbiAgW1wiQWFjdXRlXCIsIFwiXFx1MDBDMVwiXSxcbiAgW1wiQWNpcmNcIiwgXCJcXHUwMEMyXCJdLFxuICBbXCJBdGlsZGVcIiwgXCJcXHUwMEMzXCJdLFxuICBbXCJBdW1sXCIsIFwiXFx1MDBDNFwiXSxcbiAgW1wiQXJpbmdcIiwgXCJcXHUwMEM1XCJdLFxuICBbXCJBRWxpZ1wiLCBcIlxcdTAwQzZcIl0sXG4gIFtcIkNjZWRpbFwiLCBcIlxcdTAwQzdcIl0sXG4gIFtcIkVncmF2ZVwiLCBcIlxcdTAwQzhcIl0sXG4gIFtcIkVhY3V0ZVwiLCBcIlxcdTAwQzlcIl0sXG4gIFtcIkVjaXJjXCIsIFwiXFx1MDBDQVwiXSxcbiAgW1wiRXVtbFwiLCBcIlxcdTAwQ0JcIl0sXG4gIFtcIklncmF2ZVwiLCBcIlxcdTAwQ0NcIl0sXG4gIFtcIklhY3V0ZVwiLCBcIlxcdTAwQ0RcIl0sXG4gIFtcIkljaXJjXCIsIFwiXFx1MDBDRVwiXSxcbiAgW1wiSXVtbFwiLCBcIlxcdTAwQ0ZcIl0sXG4gIFtcIkVUSFwiLCBcIlxcdTAwRDBcIl0sXG4gIFtcIk50aWxkZVwiLCBcIlxcdTAwRDFcIl0sXG4gIFtcIk9ncmF2ZVwiLCBcIlxcdTAwRDJcIl0sXG4gIFtcIk9hY3V0ZVwiLCBcIlxcdTAwRDNcIl0sXG4gIFtcIk9jaXJjXCIsIFwiXFx1MDBENFwiXSxcbiAgW1wiT3RpbGRlXCIsIFwiXFx1MDBENVwiXSxcbiAgW1wiT3VtbFwiLCBcIlxcdTAwRDZcIl0sXG4gIFtcInRpbWVzXCIsIFwiXFx1MDBEN1wiXSxcbiAgW1wiT3NsYXNoXCIsIFwiXFx1MDBEOFwiXSxcbiAgW1wiVWdyYXZlXCIsIFwiXFx1MDBEOVwiXSxcbiAgW1wiVWFjdXRlXCIsIFwiXFx1MDBEQVwiXSxcbiAgW1wiVWNpcmNcIiwgXCJcXHUwMERCXCJdLFxuICBbXCJVdW1sXCIsIFwiXFx1MDBEQ1wiXSxcbiAgW1wiWWFjdXRlXCIsIFwiXFx1MDBERFwiXSxcbiAgW1wiVEhPUk5cIiwgXCJcXHUwMERFXCJdLFxuICBbXCJzemxpZ1wiLCBcIlxcdTAwREZcIl0sXG4gIFtcImFncmF2ZVwiLCBcIlxcdTAwRTBcIl0sXG4gIFtcImFhY3V0ZVwiLCBcIlxcdTAwRTFcIl0sXG4gIFtcImFjaXJjXCIsIFwiXFx1MDBFMlwiXSxcbiAgW1wiYXRpbGRlXCIsIFwiXFx1MDBFM1wiXSxcbiAgW1wiYXVtbFwiLCBcIlxcdTAwRTRcIl0sXG4gIFtcImFyaW5nXCIsIFwiXFx1MDBFNVwiXSxcbiAgW1wiYWVsaWdcIiwgXCJcXHUwMEU2XCJdLFxuICBbXCJjY2VkaWxcIiwgXCJcXHUwMEU3XCJdLFxuICBbXCJlZ3JhdmVcIiwgXCJcXHUwMEU4XCJdLFxuICBbXCJlYWN1dGVcIiwgXCJcXHUwMEU5XCJdLFxuICBbXCJlY2lyY1wiLCBcIlxcdTAwRUFcIl0sXG4gIFtcImV1bWxcIiwgXCJcXHUwMEVCXCJdLFxuICBbXCJpZ3JhdmVcIiwgXCJcXHUwMEVDXCJdLFxuICBbXCJpYWN1dGVcIiwgXCJcXHUwMEVEXCJdLFxuICBbXCJpY2lyY1wiLCBcIlxcdTAwRUVcIl0sXG4gIFtcIml1bWxcIiwgXCJcXHUwMEVGXCJdLFxuICBbXCJldGhcIiwgXCJcXHUwMEYwXCJdLFxuICBbXCJudGlsZGVcIiwgXCJcXHUwMEYxXCJdLFxuICBbXCJvZ3JhdmVcIiwgXCJcXHUwMEYyXCJdLFxuICBbXCJvYWN1dGVcIiwgXCJcXHUwMEYzXCJdLFxuICBbXCJvY2lyY1wiLCBcIlxcdTAwRjRcIl0sXG4gIFtcIm90aWxkZVwiLCBcIlxcdTAwRjVcIl0sXG4gIFtcIm91bWxcIiwgXCJcXHUwMEY2XCJdLFxuICBbXCJkaXZpZGVcIiwgXCJcXHUwMEY3XCJdLFxuICBbXCJvc2xhc2hcIiwgXCJcXHUwMEY4XCJdLFxuICBbXCJ1Z3JhdmVcIiwgXCJcXHUwMEY5XCJdLFxuICBbXCJ1YWN1dGVcIiwgXCJcXHUwMEZBXCJdLFxuICBbXCJ1Y2lyY1wiLCBcIlxcdTAwRkJcIl0sXG4gIFtcInV1bWxcIiwgXCJcXHUwMEZDXCJdLFxuICBbXCJ5YWN1dGVcIiwgXCJcXHUwMEZEXCJdLFxuICBbXCJ0aG9yblwiLCBcIlxcdTAwRkVcIl0sXG4gIFtcInl1bWxcIiwgXCJcXHUwMEZGXCJdLFxuICBbXCJPRWxpZ1wiLCBcIlxcdTAxNTJcIl0sXG4gIFtcIm9lbGlnXCIsIFwiXFx1MDE1M1wiXSxcbiAgW1wiU2Nhcm9uXCIsIFwiXFx1MDE2MFwiXSxcbiAgW1wic2Nhcm9uXCIsIFwiXFx1MDE2MVwiXSxcbiAgW1wiWXVtbFwiLCBcIlxcdTAxNzhcIl0sXG4gIFtcImZub2ZcIiwgXCJcXHUwMTkyXCJdLFxuICBbXCJjaXJjXCIsIFwiXFx1MDJDNlwiXSxcbiAgW1widGlsZGVcIiwgXCJcXHUwMkRDXCJdLFxuICBbXCJBbHBoYVwiLCBcIlxcdTAzOTFcIl0sXG4gIFtcIkJldGFcIiwgXCJcXHUwMzkyXCJdLFxuICBbXCJHYW1tYVwiLCBcIlxcdTAzOTNcIl0sXG4gIFtcIkRlbHRhXCIsIFwiXFx1MDM5NFwiXSxcbiAgW1wiRXBzaWxvblwiLCBcIlxcdTAzOTVcIl0sXG4gIFtcIlpldGFcIiwgXCJcXHUwMzk2XCJdLFxuICBbXCJFdGFcIiwgXCJcXHUwMzk3XCJdLFxuICBbXCJUaGV0YVwiLCBcIlxcdTAzOThcIl0sXG4gIFtcIklvdGFcIiwgXCJcXHUwMzk5XCJdLFxuICBbXCJLYXBwYVwiLCBcIlxcdTAzOUFcIl0sXG4gIFtcIkxhbWJkYVwiLCBcIlxcdTAzOUJcIl0sXG4gIFtcIk11XCIsIFwiXFx1MDM5Q1wiXSxcbiAgW1wiTnVcIiwgXCJcXHUwMzlEXCJdLFxuICBbXCJYaVwiLCBcIlxcdTAzOUVcIl0sXG4gIFtcIk9taWNyb25cIiwgXCJcXHUwMzlGXCJdLFxuICBbXCJQaVwiLCBcIlxcdTAzQTBcIl0sXG4gIFtcIlJob1wiLCBcIlxcdTAzQTFcIl0sXG4gIFtcIlNpZ21hXCIsIFwiXFx1MDNBM1wiXSxcbiAgW1wiVGF1XCIsIFwiXFx1MDNBNFwiXSxcbiAgW1wiVXBzaWxvblwiLCBcIlxcdTAzQTVcIl0sXG4gIFtcIlBoaVwiLCBcIlxcdTAzQTZcIl0sXG4gIFtcIkNoaVwiLCBcIlxcdTAzQTdcIl0sXG4gIFtcIlBzaVwiLCBcIlxcdTAzQThcIl0sXG4gIFtcIk9tZWdhXCIsIFwiXFx1MDNBOVwiXSxcbiAgW1wiYWxwaGFcIiwgXCJcXHUwM0IxXCJdLFxuICBbXCJiZXRhXCIsIFwiXFx1MDNCMlwiXSxcbiAgW1wiZ2FtbWFcIiwgXCJcXHUwM0IzXCJdLFxuICBbXCJkZWx0YVwiLCBcIlxcdTAzQjRcIl0sXG4gIFtcImVwc2lsb25cIiwgXCJcXHUwM0I1XCJdLFxuICBbXCJ6ZXRhXCIsIFwiXFx1MDNCNlwiXSxcbiAgW1wiZXRhXCIsIFwiXFx1MDNCN1wiXSxcbiAgW1widGhldGFcIiwgXCJcXHUwM0I4XCJdLFxuICBbXCJpb3RhXCIsIFwiXFx1MDNCOVwiXSxcbiAgW1wia2FwcGFcIiwgXCJcXHUwM0JBXCJdLFxuICBbXCJsYW1iZGFcIiwgXCJcXHUwM0JCXCJdLFxuICBbXCJtdVwiLCBcIlxcdTAzQkNcIl0sXG4gIFtcIm51XCIsIFwiXFx1MDNCRFwiXSxcbiAgW1wieGlcIiwgXCJcXHUwM0JFXCJdLFxuICBbXCJvbWljcm9uXCIsIFwiXFx1MDNCRlwiXSxcbiAgW1wicGlcIiwgXCJcXHUwM0MwXCJdLFxuICBbXCJyaG9cIiwgXCJcXHUwM0MxXCJdLFxuICBbXCJzaWdtYWZcIiwgXCJcXHUwM0MyXCJdLFxuICBbXCJzaWdtYVwiLCBcIlxcdTAzQzNcIl0sXG4gIFtcInRhdVwiLCBcIlxcdTAzQzRcIl0sXG4gIFtcInVwc2lsb25cIiwgXCJcXHUwM0M1XCJdLFxuICBbXCJwaGlcIiwgXCJcXHUwM0M2XCJdLFxuICBbXCJjaGlcIiwgXCJcXHUwM0M3XCJdLFxuICBbXCJwc2lcIiwgXCJcXHUwM0M4XCJdLFxuICBbXCJvbWVnYVwiLCBcIlxcdTAzQzlcIl0sXG4gIFtcInRoZXRhc3ltXCIsIFwiXFx1MDNEMVwiXSxcbiAgW1widXBzaWhcIiwgXCJcXHUwM0QyXCJdLFxuICBbXCJwaXZcIiwgXCJcXHUwM0Q2XCJdLFxuICBbXCJlbnNwXCIsIFwiXFx1MjAwMlwiXSxcbiAgW1wiZW1zcFwiLCBcIlxcdTIwMDNcIl0sXG4gIFtcInRoaW5zcFwiLCBcIlxcdTIwMDlcIl0sXG4gIFtcInp3bmpcIiwgXCJcXHUyMDBDXCJdLFxuICBbXCJ6d2pcIiwgXCJcXHUyMDBEXCJdLFxuICBbXCJscm1cIiwgXCJcXHUyMDBFXCJdLFxuICBbXCJybG1cIiwgXCJcXHUyMDBGXCJdLFxuICBbXCJuZGFzaFwiLCBcIlxcdTIwMTNcIl0sXG4gIFtcIm1kYXNoXCIsIFwiXFx1MjAxNFwiXSxcbiAgW1wibHNxdW9cIiwgXCJcXHUyMDE4XCJdLFxuICBbXCJyc3F1b1wiLCBcIlxcdTIwMTlcIl0sXG4gIFtcInNicXVvXCIsIFwiXFx1MjAxQVwiXSxcbiAgW1wibGRxdW9cIiwgXCJcXHUyMDFDXCJdLFxuICBbXCJyZHF1b1wiLCBcIlxcdTIwMURcIl0sXG4gIFtcImJkcXVvXCIsIFwiXFx1MjAxRVwiXSxcbiAgW1wiZGFnZ2VyXCIsIFwiXFx1MjAyMFwiXSxcbiAgW1wiRGFnZ2VyXCIsIFwiXFx1MjAyMVwiXSxcbiAgW1wiYnVsbFwiLCBcIlxcdTIwMjJcIl0sXG4gIFtcImhlbGxpcFwiLCBcIlxcdTIwMjZcIl0sXG4gIFtcInBlcm1pbFwiLCBcIlxcdTIwMzBcIl0sXG4gIFtcInByaW1lXCIsIFwiXFx1MjAzMlwiXSxcbiAgW1wiUHJpbWVcIiwgXCJcXHUyMDMzXCJdLFxuICBbXCJsc2FxdW9cIiwgXCJcXHUyMDM5XCJdLFxuICBbXCJyc2FxdW9cIiwgXCJcXHUyMDNBXCJdLFxuICBbXCJvbGluZVwiLCBcIlxcdTIwM0VcIl0sXG4gIFtcImZyYXNsXCIsIFwiXFx1MjA0NFwiXSxcbiAgW1wiZXVyb1wiLCBcIlxcdTIwQUNcIl0sXG4gIFtcImltYWdlXCIsIFwiXFx1MjExMVwiXSxcbiAgW1wid2VpZXJwXCIsIFwiXFx1MjExOFwiXSxcbiAgW1wicmVhbFwiLCBcIlxcdTIxMUNcIl0sXG4gIFtcInRyYWRlXCIsIFwiXFx1MjEyMlwiXSxcbiAgW1wiYWxlZnN5bVwiLCBcIlxcdTIxMzVcIl0sXG4gIFtcImxhcnJcIiwgXCJcXHUyMTkwXCJdLFxuICBbXCJ1YXJyXCIsIFwiXFx1MjE5MVwiXSxcbiAgW1wicmFyclwiLCBcIlxcdTIxOTJcIl0sXG4gIFtcImRhcnJcIiwgXCJcXHUyMTkzXCJdLFxuICBbXCJoYXJyXCIsIFwiXFx1MjE5NFwiXSxcbiAgW1wiY3JhcnJcIiwgXCJcXHUyMUI1XCJdLFxuICBbXCJsQXJyXCIsIFwiXFx1MjFEMFwiXSxcbiAgW1widUFyclwiLCBcIlxcdTIxRDFcIl0sXG4gIFtcInJBcnJcIiwgXCJcXHUyMUQyXCJdLFxuICBbXCJkQXJyXCIsIFwiXFx1MjFEM1wiXSxcbiAgW1wiaEFyclwiLCBcIlxcdTIxRDRcIl0sXG4gIFtcImZvcmFsbFwiLCBcIlxcdTIyMDBcIl0sXG4gIFtcInBhcnRcIiwgXCJcXHUyMjAyXCJdLFxuICBbXCJleGlzdFwiLCBcIlxcdTIyMDNcIl0sXG4gIFtcImVtcHR5XCIsIFwiXFx1MjIwNVwiXSxcbiAgW1wibmFibGFcIiwgXCJcXHUyMjA3XCJdLFxuICBbXCJpc2luXCIsIFwiXFx1MjIwOFwiXSxcbiAgW1wibm90aW5cIiwgXCJcXHUyMjA5XCJdLFxuICBbXCJuaVwiLCBcIlxcdTIyMEJcIl0sXG4gIFtcInByb2RcIiwgXCJcXHUyMjBGXCJdLFxuICBbXCJzdW1cIiwgXCJcXHUyMjExXCJdLFxuICBbXCJtaW51c1wiLCBcIlxcdTIyMTJcIl0sXG4gIFtcImxvd2FzdFwiLCBcIlxcdTIyMTdcIl0sXG4gIFtcInJhZGljXCIsIFwiXFx1MjIxQVwiXSxcbiAgW1wicHJvcFwiLCBcIlxcdTIyMURcIl0sXG4gIFtcImluZmluXCIsIFwiXFx1MjIxRVwiXSxcbiAgW1wiYW5nXCIsIFwiXFx1MjIyMFwiXSxcbiAgW1wiYW5kXCIsIFwiXFx1MjIyN1wiXSxcbiAgW1wib3JcIiwgXCJcXHUyMjI4XCJdLFxuICBbXCJjYXBcIiwgXCJcXHUyMjI5XCJdLFxuICBbXCJjdXBcIiwgXCJcXHUyMjJBXCJdLFxuICBbXCJpbnRcIiwgXCJcXHUyMjJCXCJdLFxuICBbXCJ0aGVyZTRcIiwgXCJcXHUyMjM0XCJdLFxuICBbXCJzaW1cIiwgXCJcXHUyMjNDXCJdLFxuICBbXCJjb25nXCIsIFwiXFx1MjI0NVwiXSxcbiAgW1wiYXN5bXBcIiwgXCJcXHUyMjQ4XCJdLFxuICBbXCJuZVwiLCBcIlxcdTIyNjBcIl0sXG4gIFtcImVxdWl2XCIsIFwiXFx1MjI2MVwiXSxcbiAgW1wibGVcIiwgXCJcXHUyMjY0XCJdLFxuICBbXCJnZVwiLCBcIlxcdTIyNjVcIl0sXG4gIFtcInN1YlwiLCBcIlxcdTIyODJcIl0sXG4gIFtcInN1cFwiLCBcIlxcdTIyODNcIl0sXG4gIFtcIm5zdWJcIiwgXCJcXHUyMjg0XCJdLFxuICBbXCJzdWJlXCIsIFwiXFx1MjI4NlwiXSxcbiAgW1wic3VwZVwiLCBcIlxcdTIyODdcIl0sXG4gIFtcIm9wbHVzXCIsIFwiXFx1MjI5NVwiXSxcbiAgW1wib3RpbWVzXCIsIFwiXFx1MjI5N1wiXSxcbiAgW1wicGVycFwiLCBcIlxcdTIyQTVcIl0sXG4gIFtcInNkb3RcIiwgXCJcXHUyMkM1XCJdLFxuICBbXCJsY2VpbFwiLCBcIlxcdTIzMDhcIl0sXG4gIFtcInJjZWlsXCIsIFwiXFx1MjMwOVwiXSxcbiAgW1wibGZsb29yXCIsIFwiXFx1MjMwQVwiXSxcbiAgW1wicmZsb29yXCIsIFwiXFx1MjMwQlwiXSxcbiAgW1wibGFuZ1wiLCBcIlxcdTIzMjlcIl0sXG4gIFtcInJhbmdcIiwgXCJcXHUyMzJBXCJdLFxuICBbXCJsb3pcIiwgXCJcXHUyNUNBXCJdLFxuICBbXCJzcGFkZXNcIiwgXCJcXHUyNjYwXCJdLFxuICBbXCJjbHVic1wiLCBcIlxcdTI2NjNcIl0sXG4gIFtcImhlYXJ0c1wiLCBcIlxcdTI2NjVcIl0sXG4gIFtcImRpYW1zXCIsIFwiXFx1MjY2NlwiXSxcbl0pO1xuIiwgIlxuXG5cblxuXG5cblxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpTWFByYWdtYUluZm8ob3B0aW9ucykge1xuICBjb25zdCBbYmFzZSwgc3VmZml4XSA9IHNwbGl0UHJhZ21hKG9wdGlvbnMuanN4UHJhZ21hIHx8IFwiUmVhY3QuY3JlYXRlRWxlbWVudFwiKTtcbiAgY29uc3QgW2ZyYWdtZW50QmFzZSwgZnJhZ21lbnRTdWZmaXhdID0gc3BsaXRQcmFnbWEob3B0aW9ucy5qc3hGcmFnbWVudFByYWdtYSB8fCBcIlJlYWN0LkZyYWdtZW50XCIpO1xuICByZXR1cm4ge2Jhc2UsIHN1ZmZpeCwgZnJhZ21lbnRCYXNlLCBmcmFnbWVudFN1ZmZpeH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0UHJhZ21hKHByYWdtYSkge1xuICBsZXQgZG90SW5kZXggPSBwcmFnbWEuaW5kZXhPZihcIi5cIik7XG4gIGlmIChkb3RJbmRleCA9PT0gLTEpIHtcbiAgICBkb3RJbmRleCA9IHByYWdtYS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIFtwcmFnbWEuc2xpY2UoMCwgZG90SW5kZXgpLCBwcmFnbWEuc2xpY2UoZG90SW5kZXgpXTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCAgY2xhc3MgVHJhbnNmb3JtZXIge1xuICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gIFxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRIb2lzdGVkQ29kZSgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldFN1ZmZpeENvZGUoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cbiIsICJcblxuXG5pbXBvcnQgWEhUTUxFbnRpdGllcyBmcm9tIFwiLi4vcGFyc2VyL3BsdWdpbnMvanN4L3hodG1sXCI7XG5pbXBvcnQge0pTWFJvbGV9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcbmltcG9ydCB7Y2hhckNvZGVzfSBmcm9tIFwiLi4vcGFyc2VyL3V0aWwvY2hhcmNvZGVzXCI7XG5cbmltcG9ydCBnZXRKU1hQcmFnbWFJbmZvLCB7fSBmcm9tIFwiLi4vdXRpbC9nZXRKU1hQcmFnbWFJbmZvXCI7XG5cbmltcG9ydCBUcmFuc2Zvcm1lciBmcm9tIFwiLi9UcmFuc2Zvcm1lclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKU1hUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHtcbiAgXG4gIFxuICBcblxuICAvLyBTdGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIGxpbmUgbnVtYmVyIG9mIGVhY2ggSlNYIHRhZyBpbiBkZXZlbG9wbWVudC5cbiAgX19pbml0KCkge3RoaXMubGFzdExpbmVOdW1iZXIgPSAxfVxuICBfX2luaXQyKCkge3RoaXMubGFzdEluZGV4ID0gMH1cblxuICAvLyBJbiBkZXZlbG9wbWVudCwgdmFyaWFibGUgbmFtZSBob2xkaW5nIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuXG4gIF9faW5pdDMoKSB7dGhpcy5maWxlbmFtZVZhck5hbWUgPSBudWxsfVxuICAvLyBNYXBwaW5nIG9mIGNsYWltZWQgbmFtZXMgZm9yIGltcG9ydHMgaW4gdGhlIGF1dG9tYXRpYyB0cmFuc2Zvcm0sIGUsZy5cbiAgLy8ge2pzeDogXCJfanN4XCJ9LiBUaGlzIGRldGVybWluZXMgd2hpY2ggaW1wb3J0cyB0byBnZW5lcmF0ZSBpbiB0aGUgcHJlZml4LlxuICBfX2luaXQ0KCkge3RoaXMuZXNtQXV0b21hdGljSW1wb3J0TmFtZVJlc29sdXRpb25zID0ge319XG4gIC8vIFdoZW4gYXV0b21hdGljYWxseSBhZGRpbmcgaW1wb3J0cyBpbiBDSlMgbW9kZSwgd2Ugc3RvcmUgdGhlIHZhcmlhYmxlIG5hbWVcbiAgLy8gaG9sZGluZyB0aGUgaW1wb3J0ZWQgQ0pTIG1vZHVsZSBzbyB3ZSBjYW4gcmVxdWlyZSBpdCBpbiB0aGUgcHJlZml4LlxuICBfX2luaXQ1KCkge3RoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zID0ge319XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpbXBvcnRQcm9jZXNzb3IsXG4gICAgIG5hbWVNYW5hZ2VyLFxuICAgICBvcHRpb25zLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaW1wb3J0UHJvY2Vzc29yID0gaW1wb3J0UHJvY2Vzc29yO3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjt0aGlzLm9wdGlvbnMgPSBvcHRpb25zO0pTWFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtKU1hUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO0pTWFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7SlNYVHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTtKU1hUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0NS5jYWxsKHRoaXMpOztcbiAgICB0aGlzLmpzeFByYWdtYUluZm8gPSBnZXRKU1hQcmFnbWFJbmZvKG9wdGlvbnMpO1xuICAgIHRoaXMuaXNBdXRvbWF0aWNSdW50aW1lID0gb3B0aW9ucy5qc3hSdW50aW1lID09PSBcImF1dG9tYXRpY1wiO1xuICAgIHRoaXMuanN4SW1wb3J0U291cmNlID0gb3B0aW9ucy5qc3hJbXBvcnRTb3VyY2UgfHwgXCJyZWFjdFwiO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4VGFnU3RhcnQpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NKU1hUYWcoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRQcmVmaXhDb2RlKCkge1xuICAgIGxldCBwcmVmaXggPSBcIlwiO1xuICAgIGlmICh0aGlzLmZpbGVuYW1lVmFyTmFtZSkge1xuICAgICAgcHJlZml4ICs9IGBjb25zdCAke3RoaXMuZmlsZW5hbWVWYXJOYW1lfSA9ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zLmZpbGVQYXRoIHx8IFwiXCIpfTtgO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0F1dG9tYXRpY1J1bnRpbWUpIHtcbiAgICAgIGlmICh0aGlzLmltcG9ydFByb2Nlc3Nvcikge1xuICAgICAgICAvLyBDSlMgbW9kZTogZW1pdCByZXF1aXJlIHN0YXRlbWVudHMgZm9yIGFsbCBtb2R1bGVzIHRoYXQgd2VyZSByZWZlcmVuY2VkLlxuICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCByZXNvbHZlZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zKSkge1xuICAgICAgICAgIHByZWZpeCArPSBgdmFyICR7cmVzb2x2ZWROYW1lfSA9IHJlcXVpcmUoXCIke3BhdGh9XCIpO2A7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEVTTSBtb2RlOiBjb25zb2xpZGF0ZSBhbmQgZW1pdCBpbXBvcnQgc3RhdGVtZW50cyBmb3IgcmVmZXJlbmNlZCBuYW1lcy5cbiAgICAgICAgY29uc3Qge2NyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRSZXNvbHV0aW9uLCAuLi5vdGhlclJlc29sdXRpb25zfSA9XG4gICAgICAgICAgdGhpcy5lc21BdXRvbWF0aWNJbXBvcnROYW1lUmVzb2x1dGlvbnM7XG4gICAgICAgIGlmIChjcmVhdGVFbGVtZW50UmVzb2x1dGlvbikge1xuICAgICAgICAgIHByZWZpeCArPSBgaW1wb3J0IHtjcmVhdGVFbGVtZW50IGFzICR7Y3JlYXRlRWxlbWVudFJlc29sdXRpb259fSBmcm9tIFwiJHt0aGlzLmpzeEltcG9ydFNvdXJjZX1cIjtgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltcG9ydFNwZWNpZmllcnMgPSBPYmplY3QuZW50cmllcyhvdGhlclJlc29sdXRpb25zKVxuICAgICAgICAgIC5tYXAoKFtuYW1lLCByZXNvbHZlZE5hbWVdKSA9PiBgJHtuYW1lfSBhcyAke3Jlc29sdmVkTmFtZX1gKVxuICAgICAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgICAgIGlmIChpbXBvcnRTcGVjaWZpZXJzKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0UGF0aCA9XG4gICAgICAgICAgICB0aGlzLmpzeEltcG9ydFNvdXJjZSArICh0aGlzLm9wdGlvbnMucHJvZHVjdGlvbiA/IFwiL2pzeC1ydW50aW1lXCIgOiBcIi9qc3gtZGV2LXJ1bnRpbWVcIik7XG4gICAgICAgICAgcHJlZml4ICs9IGBpbXBvcnQgeyR7aW1wb3J0U3BlY2lmaWVyc319IGZyb20gXCIke2ltcG9ydFBhdGh9XCI7YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgcHJvY2Vzc0pTWFRhZygpIHtcbiAgICBjb25zdCB7anN4Um9sZSwgc3RhcnR9ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCk7XG4gICAgLy8gQ2FsY3VsYXRlIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGF0IHRoZSB2ZXJ5IHN0YXJ0IChpZiBpbiBkZXZlbG9wbWVudFxuICAgIC8vIG1vZGUpIHNvIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgcXVlcmllZCBpbiB0b2tlbiBvcmRlci5cbiAgICBjb25zdCBlbGVtZW50TG9jYXRpb25Db2RlID0gdGhpcy5vcHRpb25zLnByb2R1Y3Rpb24gPyBudWxsIDogdGhpcy5nZXRFbGVtZW50TG9jYXRpb25Db2RlKHN0YXJ0KTtcbiAgICBpZiAodGhpcy5pc0F1dG9tYXRpY1J1bnRpbWUgJiYganN4Um9sZSAhPT0gSlNYUm9sZS5LZXlBZnRlclByb3BTcHJlYWQpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtVGFnVG9KU1hGdW5jKGVsZW1lbnRMb2NhdGlvbkNvZGUsIGpzeFJvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybVRhZ1RvQ3JlYXRlRWxlbWVudChlbGVtZW50TG9jYXRpb25Db2RlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50TG9jYXRpb25Db2RlKGZpcnN0VG9rZW5TdGFydCkge1xuICAgIGNvbnN0IGxpbmVOdW1iZXIgPSB0aGlzLmdldExpbmVOdW1iZXJGb3JJbmRleChmaXJzdFRva2VuU3RhcnQpO1xuICAgIHJldHVybiBgbGluZU51bWJlcjogJHtsaW5lTnVtYmVyfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaW5lIG51bWJlciBmb3IgdGhpcyBzb3VyY2UgcG9zaXRpb24uIFRoaXMgaXMgY2FsY3VsYXRlZCBsYXppbHkgYW5kXG4gICAqIG11c3QgYmUgY2FsbGVkIGluIGluY3JlYXNpbmcgb3JkZXIgYnkgaW5kZXguXG4gICAqL1xuICBnZXRMaW5lTnVtYmVyRm9ySW5kZXgoaW5kZXgpIHtcbiAgICBjb25zdCBjb2RlID0gdGhpcy50b2tlbnMuY29kZTtcbiAgICB3aGlsZSAodGhpcy5sYXN0SW5kZXggPCBpbmRleCAmJiB0aGlzLmxhc3RJbmRleCA8IGNvZGUubGVuZ3RoKSB7XG4gICAgICBpZiAoY29kZVt0aGlzLmxhc3RJbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgdGhpcy5sYXN0TGluZU51bWJlcisrO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0SW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFzdExpbmVOdW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgY3VycmVudCBKU1ggZWxlbWVudCB0byBhIGNhbGwgdG8ganN4LCBqc3hzLCBvciBqc3hERVYuIFRoaXMgaXNcbiAgICogdGhlIHByaW1hcnkgdHJhbnNmb3JtYXRpb24gZm9yIHRoZSBhdXRvbWF0aWMgdHJhbnNmb3JtLlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiA8ZGl2IGE9ezF9IGtleT17Mn0+SGVsbG97eH08L2Rpdj5cbiAgICogYmVjb21lc1xuICAgKiBqc3hzKCdkaXYnLCB7YTogMSwgY2hpbGRyZW46IFtcIkhlbGxvXCIsIHhdfSwgMilcbiAgICovXG4gIHRyYW5zZm9ybVRhZ1RvSlNYRnVuYyhlbGVtZW50TG9jYXRpb25Db2RlLCBqc3hSb2xlKSB7XG4gICAgY29uc3QgaXNTdGF0aWMgPSBqc3hSb2xlID09PSBKU1hSb2xlLlN0YXRpY0NoaWxkcmVuO1xuICAgIC8vIEZpcnN0IHRhZyBpcyBhbHdheXMganN4VGFnU3RhcnQuXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHRoaXMuZ2V0SlNYRnVuY0ludm9jYXRpb25Db2RlKGlzU3RhdGljKSk7XG5cbiAgICBsZXQga2V5Q29kZSA9IG51bGw7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeFRhZ0VuZCkpIHtcbiAgICAgIC8vIEZyYWdtZW50IHN5bnRheC5cbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHt0aGlzLmdldEZyYWdtZW50Q29kZSgpfSwge2ApO1xuICAgICAgdGhpcy5wcm9jZXNzQXV0b21hdGljQ2hpbGRyZW5BbmRFbmRQcm9wcyhqc3hSb2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIG9wZW4gdGFnIG9yIHNlbGYtY2xvc2luZyB0YWcuXG4gICAgICB0aGlzLnByb2Nlc3NUYWdJbnRybygpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIiwge1wiKTtcbiAgICAgIGtleUNvZGUgPSB0aGlzLnByb2Nlc3NQcm9wcyh0cnVlKTtcblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnNsYXNoLCB0dC5qc3hUYWdFbmQpKSB7XG4gICAgICAgIC8vIFNlbGYtY2xvc2luZyB0YWcsIG5vIGNoaWxkcmVuIHRvIGFkZCwgc28gY2xvc2UgdGhlIHByb3BzLlxuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4VGFnRW5kKSkge1xuICAgICAgICAvLyBUYWcgd2l0aCBjaGlsZHJlbi5cbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzQXV0b21hdGljQ2hpbGRyZW5BbmRFbmRQcm9wcyhqc3hSb2xlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGVpdGhlciAvPiBvciA+IGF0IHRoZSBlbmQgb2YgdGhlIHRhZy5cIik7XG4gICAgICB9XG4gICAgICAvLyBJZiBhIGtleSB3YXMgcHJlc2VudCwgbW92ZSBpdCB0byBpdHMgb3duIGFyZy4gTm90ZSB0aGF0IG1vdmluZyBjb2RlXG4gICAgICAvLyBsaWtlIHRoaXMgd2lsbCBjYXVzZSBsaW5lIG51bWJlcnMgdG8gZ2V0IG91dCBvZiBzeW5jIHdpdGhpbiB0aGUgSlNYXG4gICAgICAvLyBlbGVtZW50IGlmIHRoZSBrZXkgZXhwcmVzc2lvbiBoYXMgYSBuZXdsaW5lIGluIGl0LiBUaGlzIGlzIHVuZm9ydHVuYXRlLFxuICAgICAgLy8gYnV0IGhvcGVmdWxseSBzaG91bGQgYmUgcmFyZS5cbiAgICAgIGlmIChrZXlDb2RlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCwgJHtrZXlDb2RlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wcm9kdWN0aW9uKSB7XG4gICAgICAvLyBJZiB0aGUga2V5IHdhc24ndCBhbHJlYWR5IGFkZGVkLCBhZGQgaXQgbm93IHNvIHdlIGNhbiBjb3JyZWN0bHkgc2V0XG4gICAgICAvLyBwb3NpdGlvbmFsIGFyZ3MgZm9yIGpzeERFVi5cbiAgICAgIGlmIChrZXlDb2RlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIsIHZvaWQgMFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCwgJHtpc1N0YXRpY30sICR7dGhpcy5nZXREZXZTb3VyY2UoZWxlbWVudExvY2F0aW9uQ29kZSl9LCB0aGlzYCk7XG4gICAgfVxuICAgIC8vIFdlJ3JlIGF0IHRoZSBjbG9zZS10YWcgb3IgdGhlIGVuZCBvZiBhIHNlbGYtY2xvc2luZyB0YWcsIHNvIHJlbW92ZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBhbmQgY2xvc2UgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5qc3hUYWdFbmQpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCIpXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGN1cnJlbnQgSlNYIGVsZW1lbnQgdG8gYSBjcmVhdGVFbGVtZW50IGNhbGwuIEluIHRoZSBjbGFzc2ljXG4gICAqIHJ1bnRpbWUsIHRoaXMgaXMgdGhlIG9ubHkgY2FzZS4gSW4gdGhlIGF1dG9tYXRpYyBydW50aW1lLCB0aGlzIGlzIGNhbGxlZFxuICAgKiBhcyBhIGZhbGxiYWNrIGluIHNvbWUgc2l0dWF0aW9ucy5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogPGRpdiBhPXsxfSBrZXk9ezJ9PkhlbGxve3h9PC9kaXY+XG4gICAqIGJlY29tZXNcbiAgICogUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2Jywge2E6IDEsIGtleTogMn0sIFwiSGVsbG9cIiwgeClcbiAgICovXG4gIHRyYW5zZm9ybVRhZ1RvQ3JlYXRlRWxlbWVudChlbGVtZW50TG9jYXRpb25Db2RlKSB7XG4gICAgLy8gRmlyc3QgdGFnIGlzIGFsd2F5cyBqc3hUYWdTdGFydC5cbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4odGhpcy5nZXRDcmVhdGVFbGVtZW50SW52b2NhdGlvbkNvZGUoKSk7XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4VGFnRW5kKSkge1xuICAgICAgLy8gRnJhZ21lbnQgc3ludGF4LlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke3RoaXMuZ2V0RnJhZ21lbnRDb2RlKCl9LCBudWxsYCk7XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIG9wZW4gdGFnIG9yIHNlbGYtY2xvc2luZyB0YWcuXG4gICAgICB0aGlzLnByb2Nlc3NUYWdJbnRybygpO1xuICAgICAgdGhpcy5wcm9jZXNzUHJvcHNPYmplY3RXaXRoRGV2SW5mbyhlbGVtZW50TG9jYXRpb25Db2RlKTtcblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnNsYXNoLCB0dC5qc3hUYWdFbmQpKSB7XG4gICAgICAgIC8vIFNlbGYtY2xvc2luZyB0YWc7IG5vIGNoaWxkcmVuIHRvIHByb2Nlc3MuXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeFRhZ0VuZCkpIHtcbiAgICAgICAgLy8gVGFnIHdpdGggY2hpbGRyZW4gYW5kIGEgY2xvc2UtdGFnOyBwcm9jZXNzIHRoZSBjaGlsZHJlbiBhcyBhcmdzLlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGVpdGhlciAvPiBvciA+IGF0IHRoZSBlbmQgb2YgdGhlIHRhZy5cIik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlJ3JlIGF0IHRoZSBjbG9zZS10YWcgb3IgdGhlIGVuZCBvZiBhIHNlbGYtY2xvc2luZyB0YWcsIHNvIHJlbW92ZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBhbmQgY2xvc2UgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5qc3hUYWdFbmQpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCIpXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29kZSBmb3IgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGZvciB0aGlzIGNvbnRleHQ6IGpzeCwganN4cyxcbiAgICogb3IganN4REVWLiBUaGUgZm9sbG93aW5nIG9wZW4tcGFyZW4gaXMgaW5jbHVkZWQgYXMgd2VsbC5cbiAgICpcbiAgICogVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgZm9yIHRoZSBhdXRvbWF0aWMgcnVudGltZSwgc28gdGhleSBhcmUgYWx3YXlzXG4gICAqIGF1dG8taW1wb3J0ZWQsIGJ1dCB0aGUgYXV0by1pbXBvcnQgd2lsbCBiZSBlaXRoZXIgQ0pTIG9yIEVTTSBiYXNlZCBvbiB0aGVcbiAgICogdGFyZ2V0IG1vZHVsZSBmb3JtYXQuXG4gICAqL1xuICBnZXRKU1hGdW5jSW52b2NhdGlvbkNvZGUoaXNTdGF0aWMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb2R1Y3Rpb24pIHtcbiAgICAgIGlmIChpc1N0YXRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGFpbUF1dG9JbXBvcnRlZEZ1bmNJbnZvY2F0aW9uKFwianN4c1wiLCBcIi9qc3gtcnVudGltZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oXCJqc3hcIiwgXCIvanN4LXJ1bnRpbWVcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oXCJqc3hERVZcIiwgXCIvanN4LWRldi1ydW50aW1lXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGNvZGUgdG8gdXNlIGZvciB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiwgZS5nLlxuICAgKiBgUmVhY3QuY3JlYXRlRWxlbWVudGAsIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nIG9wZW4tcGFyZW4uXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gdXNlIGZvciB0aGUgY2xhc3NpYyBydW50aW1lLiBGb3IgdGhlXG4gICAqIGF1dG9tYXRpYyBydW50aW1lLCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBmYWxsYmFjayBmdW5jdGlvbiB0b1xuICAgKiBwcmVzZXJ2ZSBiZWhhdmlvciB3aGVuIHRoZXJlIGlzIGEgcHJvcCBzcHJlYWQgZm9sbG93ZWQgYnkgYW4gZXhwbGljaXRcbiAgICoga2V5LiBJbiB0aGF0IGF1dG9tYXRpYyBydW50aW1lIGNhc2UsIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgYXV0b21hdGljYWxseVxuICAgKiBpbXBvcnRlZC5cbiAgICovXG4gIGdldENyZWF0ZUVsZW1lbnRJbnZvY2F0aW9uQ29kZSgpIHtcbiAgICBpZiAodGhpcy5pc0F1dG9tYXRpY1J1bnRpbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oXCJjcmVhdGVFbGVtZW50XCIsIFwiXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7anN4UHJhZ21hSW5mb30gPSB0aGlzO1xuICAgICAgY29uc3QgcmVzb2x2ZWRQcmFnbWFCYXNlTmFtZSA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yXG4gICAgICAgID8gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGpzeFByYWdtYUluZm8uYmFzZSkgfHwganN4UHJhZ21hSW5mby5iYXNlXG4gICAgICAgIDoganN4UHJhZ21hSW5mby5iYXNlO1xuICAgICAgcmV0dXJuIGAke3Jlc29sdmVkUHJhZ21hQmFzZU5hbWV9JHtqc3hQcmFnbWFJbmZvLnN1ZmZpeH0oYDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjb2RlIHRvIHVzZSBhcyB0aGUgY29tcG9uZW50IHdoZW4gY29tcGlsaW5nIGEgc2hvcnRoYW5kXG4gICAqIGZyYWdtZW50LCBlLmcuIGBSZWFjdC5GcmFnbWVudGAuXG4gICAqXG4gICAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGVpdGhlciB0aGUgY2xhc3NpYyBvciBhdXRvbWF0aWMgcnVudGltZSwgYW5kXG4gICAqIHRoZSB2YWx1ZSBzaG91bGQgYmUgYXV0by1pbXBvcnRlZCBmb3IgdGhlIGF1dG9tYXRpYyBydW50aW1lLlxuICAgKi9cbiAgZ2V0RnJhZ21lbnRDb2RlKCkge1xuICAgIGlmICh0aGlzLmlzQXV0b21hdGljUnVudGltZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWROYW1lKFxuICAgICAgICBcIkZyYWdtZW50XCIsXG4gICAgICAgIHRoaXMub3B0aW9ucy5wcm9kdWN0aW9uID8gXCIvanN4LXJ1bnRpbWVcIiA6IFwiL2pzeC1kZXYtcnVudGltZVwiLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge2pzeFByYWdtYUluZm99ID0gdGhpcztcbiAgICAgIGNvbnN0IHJlc29sdmVkRnJhZ21lbnRQcmFnbWFCYXNlTmFtZSA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yXG4gICAgICAgID8gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGpzeFByYWdtYUluZm8uZnJhZ21lbnRCYXNlKSB8fFxuICAgICAgICAgIGpzeFByYWdtYUluZm8uZnJhZ21lbnRCYXNlXG4gICAgICAgIDoganN4UHJhZ21hSW5mby5mcmFnbWVudEJhc2U7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRGcmFnbWVudFByYWdtYUJhc2VOYW1lICsganN4UHJhZ21hSW5mby5mcmFnbWVudFN1ZmZpeDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGNvZGUgdGhhdCBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbi5cbiAgICpcbiAgICogV2hlbiB0aGUgaW1wb3J0cyB0cmFuc2Zvcm0gaXMgZW5hYmxlZCwgdXNlIHRoZSBDSlNJbXBvcnRUcmFuc2Zvcm1lclxuICAgKiBzdHJhdGVneSBvZiB1c2luZyBgLmNhbGwodm9pZCAwLCAuLi5gIHRvIGF2b2lkIHBhc3NpbmcgYSBgdGhpc2AgdmFsdWUgaW4gYVxuICAgKiBzaXR1YXRpb24gdGhhdCB3b3VsZCBvdGhlcndpc2UgbG9vayBsaWtlIGEgbWV0aG9kIGNhbGwuXG4gICAqL1xuICBjbGFpbUF1dG9JbXBvcnRlZEZ1bmNJbnZvY2F0aW9uKGZ1bmNOYW1lLCBpbXBvcnRQYXRoU3VmZml4KSB7XG4gICAgY29uc3QgZnVuY0NvZGUgPSB0aGlzLmNsYWltQXV0b0ltcG9ydGVkTmFtZShmdW5jTmFtZSwgaW1wb3J0UGF0aFN1ZmZpeCk7XG4gICAgaWYgKHRoaXMuaW1wb3J0UHJvY2Vzc29yKSB7XG4gICAgICByZXR1cm4gYCR7ZnVuY0NvZGV9LmNhbGwodm9pZCAwLCBgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7ZnVuY0NvZGV9KGA7XG4gICAgfVxuICB9XG5cbiAgY2xhaW1BdXRvSW1wb3J0ZWROYW1lKGZ1bmNOYW1lLCBpbXBvcnRQYXRoU3VmZml4KSB7XG4gICAgaWYgKHRoaXMuaW1wb3J0UHJvY2Vzc29yKSB7XG4gICAgICAvLyBDSlMgbW9kZTogY2xhaW0gYSBuYW1lIGZvciB0aGUgbW9kdWxlIGFuZCBtYXJrIGl0IGZvciBpbXBvcnQuXG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5qc3hJbXBvcnRTb3VyY2UgKyBpbXBvcnRQYXRoU3VmZml4O1xuICAgICAgaWYgKCF0aGlzLmNqc0F1dG9tYXRpY01vZHVsZU5hbWVSZXNvbHV0aW9uc1twYXRoXSkge1xuICAgICAgICB0aGlzLmNqc0F1dG9tYXRpY01vZHVsZU5hbWVSZXNvbHV0aW9uc1twYXRoXSA9XG4gICAgICAgICAgdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0RnJlZUlkZW50aWZpZXJGb3JQYXRoKHBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke3RoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zW3BhdGhdfS4ke2Z1bmNOYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVTTSBtb2RlOiBjbGFpbSBhIG5hbWUgZm9yIHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBpdCB0byB0aGUgbmFtZXMgdGhhdFxuICAgICAgLy8gc2hvdWxkIGJlIGF1dG8taW1wb3J0ZWQgd2hlbiB0aGUgcHJlZml4IGlzIGdlbmVyYXRlZC5cbiAgICAgIGlmICghdGhpcy5lc21BdXRvbWF0aWNJbXBvcnROYW1lUmVzb2x1dGlvbnNbZnVuY05hbWVdKSB7XG4gICAgICAgIHRoaXMuZXNtQXV0b21hdGljSW1wb3J0TmFtZVJlc29sdXRpb25zW2Z1bmNOYW1lXSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcbiAgICAgICAgICBgXyR7ZnVuY05hbWV9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmVzbUF1dG9tYXRpY0ltcG9ydE5hbWVSZXNvbHV0aW9uc1tmdW5jTmFtZV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhlIGZpcnN0IHBhcnQgb2YgYSB0YWcsIGJlZm9yZSBhbnkgcHJvcHMuXG4gICAqL1xuICBwcm9jZXNzVGFnSW50cm8oKSB7XG4gICAgLy8gV2FsayBmb3J3YXJkIHVudGlsIHdlIHNlZSBvbmUgb2YgdGhlc2UgcGF0dGVybnM6XG4gICAgLy8ganN4TmFtZSB0byBzdGFydCB0aGUgZmlyc3QgcHJvcCwgcHJlY2VkZWQgYnkgYW5vdGhlciBqc3hOYW1lIHRvIGVuZCB0aGUgdGFnIG5hbWUuXG4gICAgLy8ganN4TmFtZSB0byBzdGFydCB0aGUgZmlyc3QgcHJvcCwgcHJlY2VkZWQgYnkgZ3JlYXRlclRoYW4gdG8gZW5kIHRoZSB0eXBlIGFyZ3VtZW50LlxuICAgIC8vIFtvcGVuIGJyYWNlXSB0byBzdGFydCB0aGUgZmlyc3QgcHJvcC5cbiAgICAvLyBbanN4VGFnRW5kXSB0byBlbmQgdGhlIG9wZW4tdGFnLlxuICAgIC8vIFtzbGFzaCwganN4VGFnRW5kXSB0byBlbmQgdGhlIHNlbGYtY2xvc2luZyB0YWcuXG4gICAgbGV0IGludHJvRW5kID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxO1xuICAgIHdoaWxlIChcbiAgICAgIHRoaXMudG9rZW5zLnRva2Vuc1tpbnRyb0VuZF0uaXNUeXBlIHx8XG4gICAgICAoIXRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbnRyb0VuZCAtIDEsIHR0LmpzeE5hbWUsIHR0LmpzeE5hbWUpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW50cm9FbmQgLSAxLCB0dC5ncmVhdGVyVGhhbiwgdHQuanN4TmFtZSkgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbnRyb0VuZCwgdHQuYnJhY2VMKSAmJlxuICAgICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGludHJvRW5kLCB0dC5qc3hUYWdFbmQpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW50cm9FbmQsIHR0LnNsYXNoLCB0dC5qc3hUYWdFbmQpKVxuICAgICkge1xuICAgICAgaW50cm9FbmQrKztcbiAgICB9XG4gICAgaWYgKGludHJvRW5kID09PSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgICAgaWYgKHN0YXJ0c1dpdGhMb3dlckNhc2UodGFnTmFtZSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAnJHt0YWdOYW1lfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgaW50cm9FbmQpIHtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9wcywgYWRkIHRoZSBwcm9wcyBhcmd1bWVudCB0b1xuICAgKiBSZWFjdC5jcmVhdGVFbGVtZW50LCBpbmNsdWRpbmcgdGhlIGNvbW1hIGJlZm9yZSBpdC5cbiAgICovXG4gIHByb2Nlc3NQcm9wc09iamVjdFdpdGhEZXZJbmZvKGVsZW1lbnRMb2NhdGlvbkNvZGUpIHtcbiAgICBjb25zdCBkZXZQcm9wcyA9IHRoaXMub3B0aW9ucy5wcm9kdWN0aW9uXG4gICAgICA/IFwiXCJcbiAgICAgIDogYF9fc2VsZjogdGhpcywgX19zb3VyY2U6ICR7dGhpcy5nZXREZXZTb3VyY2UoZWxlbWVudExvY2F0aW9uQ29kZSl9YDtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeE5hbWUpICYmICF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZUwpKSB7XG4gICAgICBpZiAoZGV2UHJvcHMpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCB7JHtkZXZQcm9wc319YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAsIG51bGxgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCB7YCk7XG4gICAgdGhpcy5wcm9jZXNzUHJvcHMoZmFsc2UpO1xuICAgIGlmIChkZXZQcm9wcykge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICR7ZGV2UHJvcHN9fWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoZSBjb3JlIHBhcnQgb2YgdGhlIHByb3BzLCBhc3N1bWluZyB0aGF0IGEgeyBoYXMgYWxyZWFkeSBiZWVuXG4gICAqIGluc2VydGVkIGJlZm9yZSB1cyBhbmQgdGhhdCBhIH0gd2lsbCBiZSBpbnNlcnRlZCBhZnRlciB1cy5cbiAgICpcbiAgICogSWYgZXh0cmFjdEtleUNvZGUgaXMgdHJ1ZSAoaS5lLiB3aGVuIHVzaW5nIGFueSBqc3guLi4gZnVuY3Rpb24pLCBhbnkgcHJvcFxuICAgKiBuYW1lZCBcImtleVwiIGhhcyBpdHMgY29kZSBjYXB0dXJlZCBhbmQgcmV0dXJuZWQgcmF0aGVyIHRoYW4gYmVpbmcgZW1pdHRlZCB0b1xuICAgKiB0aGUgb3V0cHV0IGNvZGUuIFRoaXMgc2hpZnRzIGxpbmUgbnVtYmVycywgYW5kIGVtaXR0aW5nIHRoZSBjb2RlIGxhdGVyIHdpbGxcbiAgICogY29ycmVjdCBsaW5lIG51bWJlcnMgYWdhaW4uIElmIG5vIGtleSBpcyBmb3VuZCBvciBpZiBleHRyYWN0S2V5Q29kZSBpc1xuICAgKiBmYWxzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG51bGwuXG4gICAqL1xuICBwcm9jZXNzUHJvcHMoZXh0cmFjdEtleUNvZGUpIHtcbiAgICBsZXQga2V5Q29kZSA9IG51bGw7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5qc3hOYW1lLCB0dC5lcSkpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIga2V5PXt2YWx1ZX0gb3Iga2V5PVwidmFsdWVcIiBwcm9wLlxuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgICAgIGlmIChleHRyYWN0S2V5Q29kZSAmJiBwcm9wTmFtZSA9PT0gXCJrZXlcIikge1xuICAgICAgICAgIGlmIChrZXlDb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgcHJvcHMgbGlzdCBoYXMgbXVsdGlwbGUga2V5cy4gRGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhcmVcbiAgICAgICAgICAgIC8vIGluY29uc2lzdGVudCBhYm91dCB3aGF0IHRvIGRvIGhlcmU6IGFzIG9mIHRoaXMgd3JpdGluZywgQmFiZWwgYW5kXG4gICAgICAgICAgICAvLyBzd2Mga2VlcCB0aGUgKmxhc3QqIGtleSBhbmQgY29tcGxldGVseSByZW1vdmUgdGhlIHJlc3QsIHdoaWxlXG4gICAgICAgICAgICAvLyBUeXBlU2NyaXB0IHVzZXMgdGhlICpmaXJzdCoga2V5IGFuZCBsZWF2ZXMgdGhlIG90aGVycyBhcyByZWd1bGFyXG4gICAgICAgICAgICAvLyBwcm9wcy4gVGhlIFJlYWN0IHRlYW0gY29sbGFib3JhdGVkIHdpdGggQmFiZWwgb24gdGhlXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGJlaGF2aW9yLCBzbyBwcmVzdW1hYmx5IHRoZSBCYWJlbCBiZWhhdmlvclxuICAgICAgICAgICAgLy8gaXMgdGhlIG9uZSB0byB1c2UuXG4gICAgICAgICAgICAvLyBTaW5jZSB3ZSB3b24ndCBldmVyIGJlIGVtaXR0aW5nIHRoZSBwcmV2aW91cyBrZXkgY29kZSwgd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gYXQgbGVhc3QgZW1pdCBpdHMgbmV3bGluZXMgaGVyZSBzbyB0aGF0IHRoZSBsaW5lIG51bWJlcnMgbWF0Y2ggdXBcbiAgICAgICAgICAgIC8vIGluIHRoZSBsb25nIHJ1bi5cbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoa2V5Q29kZS5yZXBsYWNlKC9bXlxcbl0vZywgXCJcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBrZXlcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIC8vID1cbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy50b2tlbnMuc25hcHNob3QoKTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NQcm9wVmFsdWUoKTtcbiAgICAgICAgICBrZXlDb2RlID0gdGhpcy50b2tlbnMuZGFuZ2Vyb3VzbHlHZXRBbmRSZW1vdmVDb2RlU2luY2VTbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICAgICAgLy8gRG9uJ3QgYWRkIGEgY29tbWFcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NQcm9wTmFtZShwcm9wTmFtZSk7XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiOiBcIik7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzUHJvcFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4TmFtZSkpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0aGFuZCBwcm9wIGxpa2UgPGlucHV0IGRpc2FibGVkIC8+LlxuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc1Byb3BOYW1lKHByb3BOYW1lKTtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIjogdHJ1ZVwiKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKSkge1xuICAgICAgICAvLyBUaGlzIGlzIHByb3Agc3ByZWFkLCBsaWtlIDxkaXYgey4uLmdldFByb3BzKCl9Piwgd2hpY2ggd2UgY2FuIHBhc3NcbiAgICAgICAgLy8gdGhyb3VnaCBmYWlybHkgZGlyZWN0bHkgYXMgYW4gb2JqZWN0IHNwcmVhZC5cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIixcIik7XG4gICAgfVxuICAgIHJldHVybiBrZXlDb2RlO1xuICB9XG5cbiAgcHJvY2Vzc1Byb3BOYW1lKHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAnJHtwcm9wTmFtZX0nYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NQcm9wVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlTCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeFRhZ1N0YXJ0KSkge1xuICAgICAgdGhpcy5wcm9jZXNzSlNYVGFnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmluZ1Byb3BWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTdHJpbmdQcm9wVmFsdWUoKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBjb25zdCB2YWx1ZUNvZGUgPSB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7XG4gICAgY29uc3QgcmVwbGFjZW1lbnRDb2RlID0gZm9ybWF0SlNYVGV4dFJlcGxhY2VtZW50KHZhbHVlQ29kZSk7XG4gICAgY29uc3QgbGl0ZXJhbENvZGUgPSBmb3JtYXRKU1hTdHJpbmdWYWx1ZUxpdGVyYWwodmFsdWVDb2RlKTtcbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4obGl0ZXJhbENvZGUgKyByZXBsYWNlbWVudENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0aW5nIGluIHRoZSBtaWRkbGUgb2YgdGhlIHByb3BzIG9iamVjdCBsaXRlcmFsLCBwcm9kdWNlIGFuIGFkZGl0aW9uYWxcbiAgICogcHJvcCBmb3IgdGhlIGNoaWxkcmVuIGFuZCBjbG9zZSB0aGUgb2JqZWN0IGxpdGVyYWwuXG4gICAqL1xuICBwcm9jZXNzQXV0b21hdGljQ2hpbGRyZW5BbmRFbmRQcm9wcyhqc3hSb2xlKSB7XG4gICAgaWYgKGpzeFJvbGUgPT09IEpTWFJvbGUuU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIgY2hpbGRyZW46IFtcIik7XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbihmYWxzZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiXX1cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJzZXIgaW5mb3JtYXRpb24gdGVsbHMgdXMgd2hldGhlciB3ZSB3aWxsIHNlZSBhIHJlYWwgY2hpbGQgb3IgaWZcbiAgICAgIC8vIGFsbCByZW1haW5pbmcgY2hpbGRyZW4gKGlmIGFueSkgd2lsbCByZXNvbHZlIHRvIGVtcHR5LiBJZiB0aGVyZSBhcmUgbm9cbiAgICAgIC8vIG5vbi1lbXB0eSBjaGlsZHJlbiwgZG9uJ3QgZW1pdCBhIGNoaWxkcmVuIHByb3AgYXQgYWxsLCBidXQgc3RpbGxcbiAgICAgIC8vIHByb2Nlc3MgY2hpbGRyZW4gc28gdGhhdCB3ZSBwcm9wZXJseSB0cmFuc2Zvcm0gdGhlIGNvZGUgaW50byBub3RoaW5nLlxuICAgICAgaWYgKGpzeFJvbGUgPT09IEpTWFJvbGUuT25lQ2hpbGQpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIiBjaGlsZHJlbjogXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzQ2hpbGRyZW4oZmFsc2UpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIn1cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBjaGlsZHJlbiBpbnRvIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHdoaWNoIHdpbGwgYmUgZWl0aGVyXG4gICAqIGFyZ3VtZW50cyB0byBjcmVhdGVFbGVtZW50IG9yIGFycmF5IGVsZW1lbnRzIG9mIGEgY2hpbGRyZW4gcHJvcC5cbiAgICovXG4gIHByb2Nlc3NDaGlsZHJlbihuZWVkc0luaXRpYWxDb21tYSkge1xuICAgIGxldCBuZWVkc0NvbW1hID0gbmVlZHNJbml0aWFsQ29tbWE7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5qc3hUYWdTdGFydCwgdHQuc2xhc2gpKSB7XG4gICAgICAgIC8vIENsb3NpbmcgdGFnLCBzbyBubyBtb3JlIGNoaWxkcmVuLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZGlkRW1pdEVsZW1lbnQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZUwpKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5icmFjZUwsIHR0LmJyYWNlUikpIHtcbiAgICAgICAgICAvLyBFbXB0eSBpbnRlcnBvbGF0aW9ucyBhbmQgY29tbWVudC1vbmx5IGludGVycG9sYXRpb25zIGFyZSBhbGxvd2VkXG4gICAgICAgICAgLy8gYW5kIGRvbid0IGNyZWF0ZSBhbiBleHRyYSBjaGlsZCBhcmcuXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJbnRlcnBvbGF0ZWQgZXhwcmVzc2lvbi5cbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4obmVlZHNDb21tYSA/IFwiLCBcIiA6IFwiXCIpO1xuICAgICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJcIik7XG4gICAgICAgICAgZGlkRW1pdEVsZW1lbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmpzeFRhZ1N0YXJ0KSkge1xuICAgICAgICAvLyBDaGlsZCBKU1ggZWxlbWVudFxuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKG5lZWRzQ29tbWEgPyBcIiwgXCIgOiBcIlwiKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzSlNYVGFnKCk7XG4gICAgICAgIGRpZEVtaXRFbGVtZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4VGV4dCkgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4RW1wdHlUZXh0KSkge1xuICAgICAgICBkaWRFbWl0RWxlbWVudCA9IHRoaXMucHJvY2Vzc0NoaWxkVGV4dEVsZW1lbnQobmVlZHNDb21tYSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHRva2VuIHdoZW4gcHJvY2Vzc2luZyBKU1ggY2hpbGRyZW4uXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGRpZEVtaXRFbGVtZW50KSB7XG4gICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIGEgSlNYIHRleHQgZWxlbWVudCBpbnRvIGEgc3RyaW5nIGxpdGVyYWwsIG9yIG5vdGhpbmcgYXQgYWxsIGlmIHRoZSBKU1hcbiAgICogdGV4dCByZXNvbHZlcyB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBzdHJpbmcgbGl0ZXJhbCBpcyBlbWl0dGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm9jZXNzQ2hpbGRUZXh0RWxlbWVudChuZWVkc0NvbW1hKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBjb25zdCB2YWx1ZUNvZGUgPSB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50Q29kZSA9IGZvcm1hdEpTWFRleHRSZXBsYWNlbWVudCh2YWx1ZUNvZGUpO1xuICAgIGNvbnN0IGxpdGVyYWxDb2RlID0gZm9ybWF0SlNYVGV4dExpdGVyYWwodmFsdWVDb2RlKTtcbiAgICBpZiAobGl0ZXJhbENvZGUgPT09ICdcIlwiJykge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHJlcGxhY2VtZW50Q29kZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtuZWVkc0NvbW1hID8gXCIsIFwiIDogXCJcIn0ke2xpdGVyYWxDb2RlfSR7cmVwbGFjZW1lbnRDb2RlfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV2U291cmNlKGVsZW1lbnRMb2NhdGlvbkNvZGUpIHtcbiAgICByZXR1cm4gYHtmaWxlTmFtZTogJHt0aGlzLmdldEZpbGVuYW1lVmFyTmFtZSgpfSwgJHtlbGVtZW50TG9jYXRpb25Db2RlfX1gO1xuICB9XG5cbiAgZ2V0RmlsZW5hbWVWYXJOYW1lKCkge1xuICAgIGlmICghdGhpcy5maWxlbmFtZVZhck5hbWUpIHtcbiAgICAgIHRoaXMuZmlsZW5hbWVWYXJOYW1lID0gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX2pzeEZpbGVOYW1lXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWxlbmFtZVZhck5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGVjIGZvciBpZGVudGlmaWVyczogaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNwcm9kLUlkZW50aWZpZXJTdGFydC5cbiAqXG4gKiBSZWFsbHkgb25seSB0cmVhdCBhbnl0aGluZyBzdGFydGluZyB3aXRoIGEteiBhcyB0YWcgbmFtZXMuICBgX2AsIGAkYCwgYFx1MDBFOWBcbiAqIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNvbXBvbmVudCBuYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aExvd2VyQ2FzZShzKSB7XG4gIGNvbnN0IGZpcnN0Q2hhciA9IHMuY2hhckNvZGVBdCgwKTtcbiAgcmV0dXJuIGZpcnN0Q2hhciA+PSBjaGFyQ29kZXMubG93ZXJjYXNlQSAmJiBmaXJzdENoYXIgPD0gY2hhckNvZGVzLmxvd2VyY2FzZVo7XG59XG5cbi8qKlxuICogVHVybiB0aGUgZ2l2ZW4ganN4VGV4dCBzdHJpbmcgaW50byBhIEpTIHN0cmluZyBsaXRlcmFsLiBMZWFkaW5nIGFuZCB0cmFpbGluZ1xuICogd2hpdGVzcGFjZSBvbiBsaW5lcyBpcyByZW1vdmVkLCBleGNlcHQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG9wZW4tdGFnIGFuZFxuICogYmVmb3JlIHRoZSBjbG9zZS10YWcuIEVtcHR5IGxpbmVzIGFyZSBjb21wbGV0ZWx5IHJlbW92ZWQsIGFuZCBzcGFjZXMgYXJlXG4gKiBhZGRlZCBiZXR3ZWVuIGxpbmVzIGFmdGVyIHRoYXQuXG4gKlxuICogV2UgdXNlIEpTT04uc3RyaW5naWZ5IHRvIGludHJvZHVjZSBlc2NhcGUgY2hhcmFjdGVycyBhcyBuZWNlc3NhcnksIGFuZCB0cmltXG4gKiB0aGUgc3RhcnQgYW5kIGVuZCBvZiBlYWNoIGxpbmUgYW5kIHJlbW92ZSBibGFuayBsaW5lcy5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SlNYVGV4dExpdGVyYWwodGV4dCkge1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IHdoaXRlc3BhY2UgPSBcIlwiO1xuXG4gIGxldCBpc0luSW5pdGlhbExpbmVXaGl0ZXNwYWNlID0gZmFsc2U7XG4gIGxldCBzZWVuTm9uV2hpdGVzcGFjZSA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjID0gdGV4dFtpXTtcbiAgICBpZiAoYyA9PT0gXCIgXCIgfHwgYyA9PT0gXCJcXHRcIiB8fCBjID09PSBcIlxcclwiKSB7XG4gICAgICBpZiAoIWlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgd2hpdGVzcGFjZSArPSBjO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYyA9PT0gXCJcXG5cIikge1xuICAgICAgd2hpdGVzcGFjZSA9IFwiXCI7XG4gICAgICBpc0luSW5pdGlhbExpbmVXaGl0ZXNwYWNlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNlZW5Ob25XaGl0ZXNwYWNlICYmIGlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IHdoaXRlc3BhY2U7XG4gICAgICB3aGl0ZXNwYWNlID0gXCJcIjtcbiAgICAgIGlmIChjID09PSBcIiZcIikge1xuICAgICAgICBjb25zdCB7ZW50aXR5LCBuZXdJfSA9IHByb2Nlc3NFbnRpdHkodGV4dCwgaSArIDEpO1xuICAgICAgICBpID0gbmV3SSAtIDE7XG4gICAgICAgIHJlc3VsdCArPSBlbnRpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gYztcbiAgICAgIH1cbiAgICAgIHNlZW5Ob25XaGl0ZXNwYWNlID0gdHJ1ZTtcbiAgICAgIGlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0luSW5pdGlhbExpbmVXaGl0ZXNwYWNlKSB7XG4gICAgcmVzdWx0ICs9IHdoaXRlc3BhY2U7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3VsdCk7XG59XG5cbi8qKlxuICogUHJvZHVjZSB0aGUgY29kZSB0aGF0IHNob3VsZCBiZSBwcmludGVkIGFmdGVyIHRoZSBKU1ggdGV4dCBzdHJpbmcgbGl0ZXJhbCxcbiAqIHdpdGggbW9zdCBjb250ZW50IHJlbW92ZWQsIGJ1dCBhbGwgbmV3bGluZXMgcHJlc2VydmVkIGFuZCBhbGwgc3BhY2luZyBhdCB0aGVcbiAqIGVuZCBwcmVzZXJ2ZWQuXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEpTWFRleHRSZXBsYWNlbWVudCh0ZXh0KSB7XG4gIGxldCBudW1OZXdsaW5lcyA9IDA7XG4gIGxldCBudW1TcGFjZXMgPSAwO1xuICBmb3IgKGNvbnN0IGMgb2YgdGV4dCkge1xuICAgIGlmIChjID09PSBcIlxcblwiKSB7XG4gICAgICBudW1OZXdsaW5lcysrO1xuICAgICAgbnVtU3BhY2VzID0gMDtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFwiIFwiKSB7XG4gICAgICBudW1TcGFjZXMrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiXFxuXCIucmVwZWF0KG51bU5ld2xpbmVzKSArIFwiIFwiLnJlcGVhdChudW1TcGFjZXMpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIHN0cmluZyBpbiB0aGUgdmFsdWUgcG9zaXRpb24gb2YgYSBKU1ggcHJvcC5cbiAqXG4gKiBVc2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgY29udmVydEF0dHJpYnV0ZSBmcm9tXG4gKiBiYWJlbC1oZWxwZXItYnVpbGRlci1yZWFjdC1qc3guXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEpTWFN0cmluZ1ZhbHVlTGl0ZXJhbCh0ZXh0KSB7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjID0gdGV4dFtpXTtcbiAgICBpZiAoYyA9PT0gXCJcXG5cIikge1xuICAgICAgaWYgKC9cXHMvLnRlc3QodGV4dFtpICsgMV0pKSB7XG4gICAgICAgIHJlc3VsdCArPSBcIiBcIjtcbiAgICAgICAgd2hpbGUgKGkgPCB0ZXh0Lmxlbmd0aCAmJiAvXFxzLy50ZXN0KHRleHRbaSArIDFdKSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiXFxuXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjID09PSBcIiZcIikge1xuICAgICAgY29uc3Qge2VudGl0eSwgbmV3SX0gPSBwcm9jZXNzRW50aXR5KHRleHQsIGkgKyAxKTtcbiAgICAgIHJlc3VsdCArPSBlbnRpdHk7XG4gICAgICBpID0gbmV3SSAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCArPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcbn1cblxuLyoqXG4gKiBTdGFydGluZyBhdCBhICYsIHNlZSBpZiB0aGVyZSdzIGFuIEhUTUwgZW50aXR5IChzcGVjaWZpZWQgYnkgbmFtZSwgZGVjaW1hbFxuICogY2hhciBjb2RlLCBvciBoZXggY2hhciBjb2RlKSBhbmQgcmV0dXJuIGl0IGlmIHNvLlxuICpcbiAqIE1vZGlmaWVkIGZyb20ganN4UmVhZFN0cmluZyBpbiBiYWJlbC1wYXJzZXIuXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NFbnRpdHkodGV4dCwgaW5kZXhBZnRlckFtcGVyc2FuZCkge1xuICBsZXQgc3RyID0gXCJcIjtcbiAgbGV0IGNvdW50ID0gMDtcbiAgbGV0IGVudGl0eTtcbiAgbGV0IGkgPSBpbmRleEFmdGVyQW1wZXJzYW5kO1xuXG4gIGlmICh0ZXh0W2ldID09PSBcIiNcIikge1xuICAgIGxldCByYWRpeCA9IDEwO1xuICAgIGkrKztcbiAgICBsZXQgbnVtU3RhcnQ7XG4gICAgaWYgKHRleHRbaV0gPT09IFwieFwiKSB7XG4gICAgICByYWRpeCA9IDE2O1xuICAgICAgaSsrO1xuICAgICAgbnVtU3RhcnQgPSBpO1xuICAgICAgd2hpbGUgKGkgPCB0ZXh0Lmxlbmd0aCAmJiBpc0hleERpZ2l0KHRleHQuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBudW1TdGFydCA9IGk7XG4gICAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoICYmIGlzRGVjaW1hbERpZ2l0KHRleHQuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGV4dFtpXSA9PT0gXCI7XCIpIHtcbiAgICAgIGNvbnN0IG51bVN0ciA9IHRleHQuc2xpY2UobnVtU3RhcnQsIGkpO1xuICAgICAgaWYgKG51bVN0cikge1xuICAgICAgICBpKys7XG4gICAgICAgIGVudGl0eSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KG51bVN0ciwgcmFkaXgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGkgPCB0ZXh0Lmxlbmd0aCAmJiBjb3VudCsrIDwgMTApIHtcbiAgICAgIGNvbnN0IGNoID0gdGV4dFtpXTtcbiAgICAgIGkrKztcbiAgICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgZW50aXR5ID0gWEhUTUxFbnRpdGllcy5nZXQoc3RyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdHIgKz0gY2g7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFlbnRpdHkpIHtcbiAgICByZXR1cm4ge2VudGl0eTogXCImXCIsIG5ld0k6IGluZGV4QWZ0ZXJBbXBlcnNhbmR9O1xuICB9XG4gIHJldHVybiB7ZW50aXR5LCBuZXdJOiBpfTtcbn1cblxuZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY29kZSkge1xuICByZXR1cm4gY29kZSA+PSBjaGFyQ29kZXMuZGlnaXQwICYmIGNvZGUgPD0gY2hhckNvZGVzLmRpZ2l0OTtcbn1cblxuZnVuY3Rpb24gaXNIZXhEaWdpdChjb2RlKSB7XG4gIHJldHVybiAoXG4gICAgKGNvZGUgPj0gY2hhckNvZGVzLmRpZ2l0MCAmJiBjb2RlIDw9IGNoYXJDb2Rlcy5kaWdpdDkpIHx8XG4gICAgKGNvZGUgPj0gY2hhckNvZGVzLmxvd2VyY2FzZUEgJiYgY29kZSA8PSBjaGFyQ29kZXMubG93ZXJjYXNlRikgfHxcbiAgICAoY29kZSA+PSBjaGFyQ29kZXMudXBwZXJjYXNlQSAmJiBjb2RlIDw9IGNoYXJDb2Rlcy51cHBlcmNhc2VGKVxuICApO1xufVxuIiwgIlxuaW1wb3J0IHtJZGVudGlmaWVyUm9sZX0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXJcIjtcbmltcG9ydCB7VG9rZW5UeXBlLCBUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5cbmltcG9ydCB7c3RhcnRzV2l0aExvd2VyQ2FzZX0gZnJvbSBcIi4uL3RyYW5zZm9ybWVycy9KU1hUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IGdldEpTWFByYWdtYUluZm8gZnJvbSBcIi4vZ2V0SlNYUHJhZ21hSW5mb1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9uVHlwZUlkZW50aWZpZXJzKHRva2Vucywgb3B0aW9ucykge1xuICBjb25zdCBqc3hQcmFnbWFJbmZvID0gZ2V0SlNYUHJhZ21hSW5mbyhvcHRpb25zKTtcbiAgY29uc3Qgbm9uVHlwZUlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKFxuICAgICAgdG9rZW4udHlwZSA9PT0gdHQubmFtZSAmJlxuICAgICAgIXRva2VuLmlzVHlwZSAmJlxuICAgICAgKHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5BY2Nlc3MgfHxcbiAgICAgICAgdG9rZW4uaWRlbnRpZmllclJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZCB8fFxuICAgICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuRXhwb3J0QWNjZXNzKSAmJlxuICAgICAgIXRva2VuLnNoYWRvd3NHbG9iYWxcbiAgICApIHtcbiAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICB9XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IHR0LmpzeFRhZ1N0YXJ0KSB7XG4gICAgICBub25UeXBlSWRlbnRpZmllcnMuYWRkKGpzeFByYWdtYUluZm8uYmFzZSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRva2VuLnR5cGUgPT09IHR0LmpzeFRhZ1N0YXJ0ICYmXG4gICAgICBpICsgMSA8IHRva2Vucy50b2tlbnMubGVuZ3RoICYmXG4gICAgICB0b2tlbnMudG9rZW5zW2kgKyAxXS50eXBlID09PSB0dC5qc3hUYWdFbmRcbiAgICApIHtcbiAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQoanN4UHJhZ21hSW5mby5iYXNlKTtcbiAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQoanN4UHJhZ21hSW5mby5mcmFnbWVudEJhc2UpO1xuICAgIH1cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gdHQuanN4TmFtZSAmJiB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQWNjZXNzKSB7XG4gICAgICBjb25zdCBpZGVudGlmaWVyTmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKTtcbiAgICAgIC8vIExvd2VyLWNhc2Ugc2luZ2xlLWNvbXBvbmVudCB0YWcgbmFtZXMgbGlrZSBcImRpdlwiIGRvbid0IGNvdW50LlxuICAgICAgaWYgKCFzdGFydHNXaXRoTG93ZXJDYXNlKGlkZW50aWZpZXJOYW1lKSB8fCB0b2tlbnMudG9rZW5zW2kgKyAxXS50eXBlID09PSBUb2tlblR5cGUuZG90KSB7XG4gICAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vblR5cGVJZGVudGlmaWVycztcbn1cbiIsICJcblxuXG5pbXBvcnQge2lzRGVjbGFyYXRpb259IGZyb20gXCIuL3BhcnNlci90b2tlbml6ZXJcIjtcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5cbmltcG9ydCBnZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvIGZyb20gXCIuL3V0aWwvZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mb1wiO1xuaW1wb3J0IHtnZXROb25UeXBlSWRlbnRpZmllcnN9IGZyb20gXCIuL3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzXCI7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qKlxuICogQ2xhc3MgcmVzcG9uc2libGUgZm9yIHByZXByb2Nlc3NpbmcgYW5kIGJvb2trZWVwaW5nIGltcG9ydCBhbmQgZXhwb3J0IGRlY2xhcmF0aW9ucyB3aXRoaW4gdGhlXG4gKiBmaWxlLlxuICpcbiAqIFR5cGVTY3JpcHQgdXNlcyBhIHNpbXBsZXIgbWVjaGFuaXNtIHRoYXQgZG9lcyBub3QgdXNlIGZ1bmN0aW9ucyBsaWtlIGludGVyb3BSZXF1aXJlRGVmYXVsdCBhbmRcbiAqIGludGVyb3BSZXF1aXJlV2lsZGNhcmQsIHNvIHdlIGFsc28gYWxsb3cgdGhhdCBtb2RlIGZvciBjb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDSlNJbXBvcnRQcm9jZXNzb3Ige1xuICAgX19pbml0KCkge3RoaXMubm9uVHlwZUlkZW50aWZpZXJzID0gbmV3IFNldCgpfVxuICAgX19pbml0MigpIHt0aGlzLmltcG9ydEluZm9CeVBhdGggPSBuZXcgTWFwKCl9XG4gICBfX2luaXQzKCkge3RoaXMuaW1wb3J0c1RvUmVwbGFjZSA9IG5ldyBNYXAoKX1cbiAgIF9faW5pdDQoKSB7dGhpcy5pZGVudGlmaWVyUmVwbGFjZW1lbnRzID0gbmV3IE1hcCgpfVxuICAgX19pbml0NSgpIHt0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUgPSBuZXcgTWFwKCl9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIG5hbWVNYW5hZ2VyLFxuICAgICB0b2tlbnMsXG4gICAgIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wLFxuICAgICBvcHRpb25zLFxuICAgICBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICAgICBrZWVwVW51c2VkSW1wb3J0cyxcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgKSB7O3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wID0gZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3A7dGhpcy5vcHRpb25zID0gb3B0aW9uczt0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgPSBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkO3RoaXMua2VlcFVudXNlZEltcG9ydHMgPSBrZWVwVW51c2VkSW1wb3J0czt0aGlzLmhlbHBlck1hbmFnZXIgPSBoZWxwZXJNYW5hZ2VyO0NKU0ltcG9ydFByb2Nlc3Nvci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQ1LmNhbGwodGhpcyk7fVxuXG4gIHByZXByb2Nlc3NUb2tlbnMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIHR0Ll9pbXBvcnQpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzM0F0SW5kZXgoaSwgdHQuX2ltcG9ydCwgdHQubmFtZSwgdHQuZXEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzSW1wb3J0QXRJbmRleChpKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIHR0Ll9leHBvcnQpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaSwgdHQuX2V4cG9ydCwgdHQuZXEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzRXhwb3J0QXRJbmRleChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZUltcG9ydFJlcGxhY2VtZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIFR5cGVTY3JpcHQsIGltcG9ydCBzdGF0ZW1lbnRzIHRoYXQgb25seSBpbXBvcnQgdHlwZXMgc2hvdWxkIGJlIHJlbW92ZWQuXG4gICAqIFRoaXMgaW5jbHVkZXMgYGltcG9ydCB7fSBmcm9tICdmb28nO2AsIGJ1dCBub3QgYGltcG9ydCAnZm9vJztgLlxuICAgKi9cbiAgcHJ1bmVUeXBlT25seUltcG9ydHMoKSB7XG4gICAgdGhpcy5ub25UeXBlSWRlbnRpZmllcnMgPSBnZXROb25UeXBlSWRlbnRpZmllcnModGhpcy50b2tlbnMsIHRoaXMub3B0aW9ucyk7XG4gICAgZm9yIChjb25zdCBbcGF0aCwgaW1wb3J0SW5mb10gb2YgdGhpcy5pbXBvcnRJbmZvQnlQYXRoLmVudHJpZXMoKSkge1xuICAgICAgaWYgKFxuICAgICAgICBpbXBvcnRJbmZvLmhhc0JhcmVJbXBvcnQgfHxcbiAgICAgICAgaW1wb3J0SW5mby5oYXNTdGFyRXhwb3J0IHx8XG4gICAgICAgIGltcG9ydEluZm8uZXhwb3J0U3Rhck5hbWVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgaW1wb3J0SW5mby5uYW1lZEV4cG9ydHMubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbmFtZXMgPSBbXG4gICAgICAgIC4uLmltcG9ydEluZm8uZGVmYXVsdE5hbWVzLFxuICAgICAgICAuLi5pbXBvcnRJbmZvLndpbGRjYXJkTmFtZXMsXG4gICAgICAgIC4uLmltcG9ydEluZm8ubmFtZWRJbXBvcnRzLm1hcCgoe2xvY2FsTmFtZX0pID0+IGxvY2FsTmFtZSksXG4gICAgICBdO1xuICAgICAgaWYgKG5hbWVzLmV2ZXJ5KChuYW1lKSA9PiB0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZShuYW1lKSkpIHtcbiAgICAgICAgdGhpcy5pbXBvcnRzVG9SZXBsYWNlLnNldChwYXRoLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiZcbiAgICAgICF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmXG4gICAgICAhdGhpcy5ub25UeXBlSWRlbnRpZmllcnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxuXG4gICBnZW5lcmF0ZUltcG9ydFJlcGxhY2VtZW50cygpIHtcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBpbXBvcnRJbmZvXSBvZiB0aGlzLmltcG9ydEluZm9CeVBhdGguZW50cmllcygpKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRlZmF1bHROYW1lcyxcbiAgICAgICAgd2lsZGNhcmROYW1lcyxcbiAgICAgICAgbmFtZWRJbXBvcnRzLFxuICAgICAgICBuYW1lZEV4cG9ydHMsXG4gICAgICAgIGV4cG9ydFN0YXJOYW1lcyxcbiAgICAgICAgaGFzU3RhckV4cG9ydCxcbiAgICAgIH0gPSBpbXBvcnRJbmZvO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGRlZmF1bHROYW1lcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgd2lsZGNhcmROYW1lcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgbmFtZWRJbXBvcnRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICBuYW1lZEV4cG9ydHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIGV4cG9ydFN0YXJOYW1lcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgIWhhc1N0YXJFeHBvcnRcbiAgICAgICkge1xuICAgICAgICAvLyBJbXBvcnQgaXMgbmV2ZXIgdXNlZCwgc28gZG9uJ3QgZXZlbiBhc3NpZ24gYSBuYW1lLlxuICAgICAgICB0aGlzLmltcG9ydHNUb1JlcGxhY2Uuc2V0KHBhdGgsIGByZXF1aXJlKCcke3BhdGh9Jyk7YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmltYXJ5SW1wb3J0TmFtZSA9IHRoaXMuZ2V0RnJlZUlkZW50aWZpZXJGb3JQYXRoKHBhdGgpO1xuICAgICAgbGV0IHNlY29uZGFyeUltcG9ydE5hbWU7XG4gICAgICBpZiAodGhpcy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCkge1xuICAgICAgICBzZWNvbmRhcnlJbXBvcnROYW1lID0gcHJpbWFyeUltcG9ydE5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWNvbmRhcnlJbXBvcnROYW1lID1cbiAgICAgICAgICB3aWxkY2FyZE5hbWVzLmxlbmd0aCA+IDAgPyB3aWxkY2FyZE5hbWVzWzBdIDogdGhpcy5nZXRGcmVlSWRlbnRpZmllckZvclBhdGgocGF0aCk7XG4gICAgICB9XG4gICAgICBsZXQgcmVxdWlyZUNvZGUgPSBgdmFyICR7cHJpbWFyeUltcG9ydE5hbWV9ID0gcmVxdWlyZSgnJHtwYXRofScpO2A7XG4gICAgICBpZiAod2lsZGNhcmROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3Qgd2lsZGNhcmROYW1lIG9mIHdpbGRjYXJkTmFtZXMpIHtcbiAgICAgICAgICBjb25zdCBtb2R1bGVFeHByID0gdGhpcy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcFxuICAgICAgICAgICAgPyBwcmltYXJ5SW1wb3J0TmFtZVxuICAgICAgICAgICAgOiBgJHt0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcImludGVyb3BSZXF1aXJlV2lsZGNhcmRcIil9KCR7cHJpbWFyeUltcG9ydE5hbWV9KWA7XG4gICAgICAgICAgcmVxdWlyZUNvZGUgKz0gYCB2YXIgJHt3aWxkY2FyZE5hbWV9ID0gJHttb2R1bGVFeHByfTtgO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV4cG9ydFN0YXJOYW1lcy5sZW5ndGggPiAwICYmIHNlY29uZGFyeUltcG9ydE5hbWUgIT09IHByaW1hcnlJbXBvcnROYW1lKSB7XG4gICAgICAgIHJlcXVpcmVDb2RlICs9IGAgdmFyICR7c2Vjb25kYXJ5SW1wb3J0TmFtZX0gPSAke3RoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFxuICAgICAgICAgIFwiaW50ZXJvcFJlcXVpcmVXaWxkY2FyZFwiLFxuICAgICAgICApfSgke3ByaW1hcnlJbXBvcnROYW1lfSk7YDtcbiAgICAgIH0gZWxzZSBpZiAoZGVmYXVsdE5hbWVzLmxlbmd0aCA+IDAgJiYgc2Vjb25kYXJ5SW1wb3J0TmFtZSAhPT0gcHJpbWFyeUltcG9ydE5hbWUpIHtcbiAgICAgICAgcmVxdWlyZUNvZGUgKz0gYCB2YXIgJHtzZWNvbmRhcnlJbXBvcnROYW1lfSA9ICR7dGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXG4gICAgICAgICAgXCJpbnRlcm9wUmVxdWlyZURlZmF1bHRcIixcbiAgICAgICAgKX0oJHtwcmltYXJ5SW1wb3J0TmFtZX0pO2A7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qge2ltcG9ydGVkTmFtZSwgbG9jYWxOYW1lfSBvZiBuYW1lZEV4cG9ydHMpIHtcbiAgICAgICAgcmVxdWlyZUNvZGUgKz0gYCAke3RoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFxuICAgICAgICAgIFwiY3JlYXRlTmFtZWRFeHBvcnRGcm9tXCIsXG4gICAgICAgICl9KCR7cHJpbWFyeUltcG9ydE5hbWV9LCAnJHtsb2NhbE5hbWV9JywgJyR7aW1wb3J0ZWROYW1lfScpO2A7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGV4cG9ydFN0YXJOYW1lIG9mIGV4cG9ydFN0YXJOYW1lcykge1xuICAgICAgICByZXF1aXJlQ29kZSArPSBgIGV4cG9ydHMuJHtleHBvcnRTdGFyTmFtZX0gPSAke3NlY29uZGFyeUltcG9ydE5hbWV9O2A7XG4gICAgICB9XG4gICAgICBpZiAoaGFzU3RhckV4cG9ydCkge1xuICAgICAgICByZXF1aXJlQ29kZSArPSBgICR7dGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXG4gICAgICAgICAgXCJjcmVhdGVTdGFyRXhwb3J0XCIsXG4gICAgICAgICl9KCR7cHJpbWFyeUltcG9ydE5hbWV9KTtgO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmltcG9ydHNUb1JlcGxhY2Uuc2V0KHBhdGgsIHJlcXVpcmVDb2RlKTtcblxuICAgICAgZm9yIChjb25zdCBkZWZhdWx0TmFtZSBvZiBkZWZhdWx0TmFtZXMpIHtcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyUmVwbGFjZW1lbnRzLnNldChkZWZhdWx0TmFtZSwgYCR7c2Vjb25kYXJ5SW1wb3J0TmFtZX0uZGVmYXVsdGApO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB7aW1wb3J0ZWROYW1lLCBsb2NhbE5hbWV9IG9mIG5hbWVkSW1wb3J0cykge1xuICAgICAgICB0aGlzLmlkZW50aWZpZXJSZXBsYWNlbWVudHMuc2V0KGxvY2FsTmFtZSwgYCR7cHJpbWFyeUltcG9ydE5hbWV9LiR7aW1wb3J0ZWROYW1lfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZyZWVJZGVudGlmaWVyRm9yUGF0aChwYXRoKSB7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGNvbnN0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYmFzZU5hbWUgPSBsYXN0Q29tcG9uZW50LnJlcGxhY2UoL1xcVy9nLCBcIlwiKTtcbiAgICByZXR1cm4gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKGBfJHtiYXNlTmFtZX1gKTtcbiAgfVxuXG4gICBwcmVwcm9jZXNzSW1wb3J0QXRJbmRleChpbmRleCkge1xuICAgIGNvbnN0IGRlZmF1bHROYW1lcyA9IFtdO1xuICAgIGNvbnN0IHdpbGRjYXJkTmFtZXMgPSBbXTtcbiAgICBjb25zdCBuYW1lZEltcG9ydHMgPSBbXTtcblxuICAgIGluZGV4Kys7XG4gICAgaWYgKFxuICAgICAgKHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChpbmRleCwgQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQuX3R5cGVvZikpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4ICsgMSwgdHQuY29tbWEpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGluZGV4ICsgMSwgQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pXG4gICAgKSB7XG4gICAgICAvLyBpbXBvcnQgdHlwZSBkZWNsYXJhdGlvbiwgc28gbm8gbmVlZCB0byBwcm9jZXNzIGFueXRoaW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnBhcmVuTCkpIHtcbiAgICAgIC8vIER5bmFtaWMgaW1wb3J0LCBzbyBub3RoaW5nIHRvIGRvXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQubmFtZSkpIHtcbiAgICAgIGRlZmF1bHROYW1lcy5wdXNoKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkpO1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LmNvbW1hKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnN0YXIpKSB7XG4gICAgICAvLyAqIGFzXG4gICAgICBpbmRleCArPSAyO1xuICAgICAgd2lsZGNhcmROYW1lcy5wdXNoKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkpO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCB0dC5icmFjZUwpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldE5hbWVkSW1wb3J0cyhpbmRleCArIDEpO1xuICAgICAgaW5kZXggPSByZXN1bHQubmV3SW5kZXg7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZWRJbXBvcnQgb2YgcmVzdWx0Lm5hbWVkSW1wb3J0cykge1xuICAgICAgICAvLyBUcmVhdCB7ZGVmYXVsdCBhcyBYfSBhcyBhIGRlZmF1bHQgaW1wb3J0IHRvIGVuc3VyZSB1c2FnZSBvZiByZXF1aXJlIGludGVyb3AgaGVscGVyXG4gICAgICAgIGlmIChuYW1lZEltcG9ydC5pbXBvcnRlZE5hbWUgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgZGVmYXVsdE5hbWVzLnB1c2gobmFtZWRJbXBvcnQubG9jYWxOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuYW1lZEltcG9ydHMucHVzaChuYW1lZEltcG9ydCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGluZGV4LCBDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIGltcG9ydCBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWVBdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBpbXBvcnRJbmZvID0gdGhpcy5nZXRJbXBvcnRJbmZvKHBhdGgpO1xuICAgIGltcG9ydEluZm8uZGVmYXVsdE5hbWVzLnB1c2goLi4uZGVmYXVsdE5hbWVzKTtcbiAgICBpbXBvcnRJbmZvLndpbGRjYXJkTmFtZXMucHVzaCguLi53aWxkY2FyZE5hbWVzKTtcbiAgICBpbXBvcnRJbmZvLm5hbWVkSW1wb3J0cy5wdXNoKC4uLm5hbWVkSW1wb3J0cyk7XG4gICAgaWYgKGRlZmF1bHROYW1lcy5sZW5ndGggPT09IDAgJiYgd2lsZGNhcmROYW1lcy5sZW5ndGggPT09IDAgJiYgbmFtZWRJbXBvcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW1wb3J0SW5mby5oYXNCYXJlSW1wb3J0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAgcHJlcHJvY2Vzc0V4cG9ydEF0SW5kZXgoaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0Ll92YXIpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0Ll9sZXQpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0Ll9jb25zdClcbiAgICApIHtcbiAgICAgIHRoaXMucHJlcHJvY2Vzc1ZhckV4cG9ydEF0SW5kZXgoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0Ll9mdW5jdGlvbikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgdHQuX2V4cG9ydCwgdHQuX2NsYXNzKVxuICAgICkge1xuICAgICAgY29uc3QgZXhwb3J0TmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCArIDIpO1xuICAgICAgdGhpcy5hZGRFeHBvcnRCaW5kaW5nKGV4cG9ydE5hbWUsIGV4cG9ydE5hbWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczNBdEluZGV4KGluZGV4LCB0dC5fZXhwb3J0LCB0dC5uYW1lLCB0dC5fZnVuY3Rpb24pKSB7XG4gICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4ICsgMyk7XG4gICAgICB0aGlzLmFkZEV4cG9ydEJpbmRpbmcoZXhwb3J0TmFtZSwgZXhwb3J0TmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0LmJyYWNlTCkpIHtcbiAgICAgIHRoaXMucHJlcHJvY2Vzc05hbWVkRXhwb3J0QXRJbmRleChpbmRleCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIHR0Ll9leHBvcnQsIHR0LnN0YXIpKSB7XG4gICAgICB0aGlzLnByZXByb2Nlc3NFeHBvcnRTdGFyQXRJbmRleChpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgIHByZXByb2Nlc3NWYXJFeHBvcnRBdEluZGV4KGluZGV4KSB7XG4gICAgbGV0IGRlcHRoID0gMDtcbiAgICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBgZXhwb3J0IGxldCB7eH0gPSB5O2AsIHN0YXJ0aW5nIGF0IHRoZSBvcGVuLWJyYWNlIGluIHRoYXQgY2FzZS5cbiAgICBmb3IgKGxldCBpID0gaW5kZXggKyAyOyA7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgdHQuYnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgdHQuZG9sbGFyQnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgdHQuYnJhY2tldEwpXG4gICAgICApIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpLCB0dC5icmFjZVIpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpLCB0dC5icmFja2V0UilcbiAgICAgICkge1xuICAgICAgICBkZXB0aC0tO1xuICAgICAgfSBlbHNlIGlmIChkZXB0aCA9PT0gMCAmJiAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIHR0Lm5hbWUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoMSwgdHQuZXEpKSB7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGVuZEluZGV4IC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2ldO1xuICAgICAgICBpZiAoaXNEZWNsYXJhdGlvbih0b2tlbikpIHtcbiAgICAgICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGkpO1xuICAgICAgICAgIHRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5zZXQoZXhwb3J0TmFtZSwgYGV4cG9ydHMuJHtleHBvcnROYW1lfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhbGsgdGhpcyBleHBvcnQgc3RhdGVtZW50IGp1c3QgaW4gY2FzZSBpdCdzIGFuIGV4cG9ydC4uLmZyb20gc3RhdGVtZW50LlxuICAgKiBJZiBpdCBpcywgY29tYmluZSBpdCBpbnRvIHRoZSBpbXBvcnQgaW5mbyBmb3IgdGhhdCBwYXRoLiBPdGhlcndpc2UsIGp1c3RcbiAgICogYmFpbCBvdXQ7IGl0J2xsIGJlIGhhbmRsZWQgbGF0ZXIuXG4gICAqL1xuICAgcHJlcHJvY2Vzc05hbWVkRXhwb3J0QXRJbmRleChpbmRleCkge1xuICAgIC8vIGV4cG9ydCB7XG4gICAgaW5kZXggKz0gMjtcbiAgICBjb25zdCB7bmV3SW5kZXgsIG5hbWVkSW1wb3J0c30gPSB0aGlzLmdldE5hbWVkSW1wb3J0cyhpbmRleCk7XG4gICAgaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoaW5kZXgsIENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVpbnRlcnByZXQgXCJhIGFzIGJcIiB0byBiZSBsb2NhbC9leHBvcnRlZCByYXRoZXIgdGhhbiBpbXBvcnRlZC9sb2NhbC5cbiAgICAgIGZvciAoY29uc3Qge2ltcG9ydGVkTmFtZTogbG9jYWxOYW1lLCBsb2NhbE5hbWU6IGV4cG9ydGVkTmFtZX0gb2YgbmFtZWRJbXBvcnRzKSB7XG4gICAgICAgIHRoaXMuYWRkRXhwb3J0QmluZGluZyhsb2NhbE5hbWUsIGV4cG9ydGVkTmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIGltcG9ydCBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWVBdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBpbXBvcnRJbmZvID0gdGhpcy5nZXRJbXBvcnRJbmZvKHBhdGgpO1xuICAgIGltcG9ydEluZm8ubmFtZWRFeHBvcnRzLnB1c2goLi4ubmFtZWRJbXBvcnRzKTtcbiAgfVxuXG4gICBwcmVwcm9jZXNzRXhwb3J0U3RhckF0SW5kZXgoaW5kZXgpIHtcbiAgICBsZXQgZXhwb3J0ZWROYW1lID0gbnVsbDtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczNBdEluZGV4KGluZGV4LCB0dC5fZXhwb3J0LCB0dC5zdGFyLCB0dC5fYXMpKSB7XG4gICAgICAvLyBleHBvcnQgKiBhc1xuICAgICAgaW5kZXggKz0gMztcbiAgICAgIGV4cG9ydGVkTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCk7XG4gICAgICAvLyBmb28gZnJvbVxuICAgICAgaW5kZXggKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhwb3J0ICogZnJvbVxuICAgICAgaW5kZXggKz0gMztcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIHN0YXIgZXhwb3J0IHN0YXRlbWVudC5cIik7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSB0aGlzLnRva2Vucy5zdHJpbmdWYWx1ZUF0SW5kZXgoaW5kZXgpO1xuICAgIGNvbnN0IGltcG9ydEluZm8gPSB0aGlzLmdldEltcG9ydEluZm8ocGF0aCk7XG4gICAgaWYgKGV4cG9ydGVkTmFtZSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0SW5mby5leHBvcnRTdGFyTmFtZXMucHVzaChleHBvcnRlZE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbXBvcnRJbmZvLmhhc1N0YXJFeHBvcnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gICBnZXROYW1lZEltcG9ydHMoaW5kZXgpIHtcbiAgICBjb25zdCBuYW1lZEltcG9ydHMgPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQuYnJhY2VSKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3BlY2lmaWVySW5mbyA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8odGhpcy50b2tlbnMsIGluZGV4KTtcbiAgICAgIGluZGV4ID0gc3BlY2lmaWVySW5mby5lbmRJbmRleDtcbiAgICAgIGlmICghc3BlY2lmaWVySW5mby5pc1R5cGUpIHtcbiAgICAgICAgbmFtZWRJbXBvcnRzLnB1c2goe1xuICAgICAgICAgIGltcG9ydGVkTmFtZTogc3BlY2lmaWVySW5mby5sZWZ0TmFtZSxcbiAgICAgICAgICBsb2NhbE5hbWU6IHNwZWNpZmllckluZm8ucmlnaHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgdHQuY29tbWEsIHR0LmJyYWNlUikpIHtcbiAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQuYnJhY2VSKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCB0dC5jb21tYSkpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtuZXdJbmRleDogaW5kZXgsIG5hbWVkSW1wb3J0c307XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbXV0YWJsZSBpbXBvcnQgaW5mbyBvYmplY3QgZm9yIHRoaXMgcGF0aCwgY3JlYXRpbmcgb25lIGlmIGl0IGRvZXNuJ3RcbiAgICogZXhpc3QgeWV0LlxuICAgKi9cbiAgIGdldEltcG9ydEluZm8ocGF0aCkge1xuICAgIGNvbnN0IGV4aXN0aW5nSW5mbyA9IHRoaXMuaW1wb3J0SW5mb0J5UGF0aC5nZXQocGF0aCk7XG4gICAgaWYgKGV4aXN0aW5nSW5mbykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nSW5mbztcbiAgICB9XG4gICAgY29uc3QgbmV3SW5mbyA9IHtcbiAgICAgIGRlZmF1bHROYW1lczogW10sXG4gICAgICB3aWxkY2FyZE5hbWVzOiBbXSxcbiAgICAgIG5hbWVkSW1wb3J0czogW10sXG4gICAgICBuYW1lZEV4cG9ydHM6IFtdLFxuICAgICAgaGFzQmFyZUltcG9ydDogZmFsc2UsXG4gICAgICBleHBvcnRTdGFyTmFtZXM6IFtdLFxuICAgICAgaGFzU3RhckV4cG9ydDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLmltcG9ydEluZm9CeVBhdGguc2V0KHBhdGgsIG5ld0luZm8pO1xuICAgIHJldHVybiBuZXdJbmZvO1xuICB9XG5cbiAgIGFkZEV4cG9ydEJpbmRpbmcobG9jYWxOYW1lLCBleHBvcnRlZE5hbWUpIHtcbiAgICBpZiAoIXRoaXMuZXhwb3J0QmluZGluZ3NCeUxvY2FsTmFtZS5oYXMobG9jYWxOYW1lKSkge1xuICAgICAgdGhpcy5leHBvcnRCaW5kaW5nc0J5TG9jYWxOYW1lLnNldChsb2NhbE5hbWUsIFtdKTtcbiAgICB9XG4gICAgdGhpcy5leHBvcnRCaW5kaW5nc0J5TG9jYWxOYW1lLmdldChsb2NhbE5hbWUpLnB1c2goZXhwb3J0ZWROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGNvZGUgdG8gdXNlIGZvciB0aGUgaW1wb3J0IGZvciB0aGlzIHBhdGgsIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWZcbiAgICogdGhlIGNvZGUgaGFzIGFscmVhZHkgYmVlbiBcImNsYWltZWRcIiBieSBhIHByZXZpb3VzIGltcG9ydC5cbiAgICovXG4gIGNsYWltSW1wb3J0Q29kZShpbXBvcnRQYXRoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5pbXBvcnRzVG9SZXBsYWNlLmdldChpbXBvcnRQYXRoKTtcbiAgICB0aGlzLmltcG9ydHNUb1JlcGxhY2Uuc2V0KGltcG9ydFBhdGgsIFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQgfHwgXCJcIjtcbiAgfVxuXG4gIGdldElkZW50aWZpZXJSZXBsYWNlbWVudChpZGVudGlmaWVyTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXJSZXBsYWNlbWVudHMuZ2V0KGlkZW50aWZpZXJOYW1lKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHN0cmluZyBsaWtlIGBleHBvcnRzLmZvbyA9IGV4cG9ydHMuYmFyYC5cbiAgICovXG4gIHJlc29sdmVFeHBvcnRCaW5kaW5nKGFzc2lnbmVkTmFtZSkge1xuICAgIGNvbnN0IGV4cG9ydGVkTmFtZXMgPSB0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUuZ2V0KGFzc2lnbmVkTmFtZSk7XG4gICAgaWYgKCFleHBvcnRlZE5hbWVzIHx8IGV4cG9ydGVkTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydGVkTmFtZXMubWFwKChleHBvcnRlZE5hbWUpID0+IGBleHBvcnRzLiR7ZXhwb3J0ZWROYW1lfWApLmpvaW4oXCIgPSBcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBpbXBvcnRlZC9leHBvcnRlZCBuYW1lcyB3aGVyZSB3ZSBtaWdodCBiZSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdXNhZ2VzIG9mIHRob3NlXG4gICAqIG5hbWVzIGFyZSBzaGFkb3dlZC5cbiAgICovXG4gIGdldEdsb2JhbE5hbWVzKCkge1xuICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgIC4uLnRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5rZXlzKCksXG4gICAgICAuLi50aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUua2V5cygpLFxuICAgIF0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHtHZW5NYXBwaW5nLCBtYXliZUFkZFNlZ21lbnQsIHRvRW5jb2RlZE1hcH0gZnJvbSBcIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nXCI7XG5cblxuXG5pbXBvcnQge2NoYXJDb2Rlc30gZnJvbSBcIi4vcGFyc2VyL3V0aWwvY2hhcmNvZGVzXCI7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc291cmNlIG1hcCBpbmRpY2F0aW5nIHRoYXQgZWFjaCBsaW5lIG1hcHMgZGlyZWN0bHkgdG8gdGhlIG9yaWdpbmFsIGxpbmUsXG4gKiB3aXRoIHRoZSB0b2tlbnMgaW4gdGhlaXIgbmV3IHBvc2l0aW9ucy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZVNvdXJjZU1hcChcbiAge2NvZGU6IGdlbmVyYXRlZENvZGUsIG1hcHBpbmdzOiByYXdNYXBwaW5nc30sXG4gIGZpbGVQYXRoLFxuICBvcHRpb25zLFxuICBzb3VyY2UsXG4gIHRva2Vucyxcbikge1xuICBjb25zdCBzb3VyY2VDb2x1bW5zID0gY29tcHV0ZVNvdXJjZUNvbHVtbnMoc291cmNlLCB0b2tlbnMpO1xuICBjb25zdCBtYXAgPSBuZXcgR2VuTWFwcGluZyh7ZmlsZTogb3B0aW9ucy5jb21waWxlZEZpbGVuYW1lfSk7XG4gIGxldCB0b2tlbkluZGV4ID0gMDtcbiAgLy8gY3VycmVudE1hcHBpbmcgaXMgdGhlIG91dHB1dCBzb3VyY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50IGlucHV0IHRva2VuIGJlaW5nXG4gIC8vIGNvbnNpZGVyZWQuXG4gIGxldCBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzWzBdO1xuICB3aGlsZSAoY3VycmVudE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiB0b2tlbkluZGV4IDwgcmF3TWFwcGluZ3MubGVuZ3RoIC0gMSkge1xuICAgIHRva2VuSW5kZXgrKztcbiAgICBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzW3Rva2VuSW5kZXhdO1xuICB9XG4gIGxldCBsaW5lID0gMDtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIGlmIChjdXJyZW50TWFwcGluZyAhPT0gbGluZVN0YXJ0KSB7XG4gICAgbWF5YmVBZGRTZWdtZW50KG1hcCwgbGluZSwgMCwgZmlsZVBhdGgsIGxpbmUsIDApO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZ2VuZXJhdGVkQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSBjdXJyZW50TWFwcGluZykge1xuICAgICAgY29uc3QgZ2VuQ29sdW1uID0gY3VycmVudE1hcHBpbmcgLSBsaW5lU3RhcnQ7XG4gICAgICBjb25zdCBzb3VyY2VDb2x1bW4gPSBzb3VyY2VDb2x1bW5zW3Rva2VuSW5kZXhdO1xuICAgICAgbWF5YmVBZGRTZWdtZW50KG1hcCwgbGluZSwgZ2VuQ29sdW1uLCBmaWxlUGF0aCwgbGluZSwgc291cmNlQ29sdW1uKTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgKGN1cnJlbnRNYXBwaW5nID09PSBpIHx8IGN1cnJlbnRNYXBwaW5nID09PSB1bmRlZmluZWQpICYmXG4gICAgICAgIHRva2VuSW5kZXggPCByYXdNYXBwaW5ncy5sZW5ndGggLSAxXG4gICAgICApIHtcbiAgICAgICAgdG9rZW5JbmRleCsrO1xuICAgICAgICBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzW3Rva2VuSW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZ2VuZXJhdGVkQ29kZS5jaGFyQ29kZUF0KGkpID09PSBjaGFyQ29kZXMubGluZUZlZWQpIHtcbiAgICAgIGxpbmUrKztcbiAgICAgIGxpbmVTdGFydCA9IGkgKyAxO1xuICAgICAgaWYgKGN1cnJlbnRNYXBwaW5nICE9PSBsaW5lU3RhcnQpIHtcbiAgICAgICAgbWF5YmVBZGRTZWdtZW50KG1hcCwgbGluZSwgMCwgZmlsZVBhdGgsIGxpbmUsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCB7c291cmNlUm9vdCwgc291cmNlc0NvbnRlbnQsIC4uLnNvdXJjZU1hcH0gPSB0b0VuY29kZWRNYXAobWFwKTtcbiAgcmV0dXJuIHNvdXJjZU1hcCA7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFycmF5IG1hcHBpbmcgZWFjaCB0b2tlbiBpbmRleCB0byB0aGUgMC1iYXNlZCBjb2x1bW4gb2YgdGhlIHN0YXJ0XG4gKiBwb3NpdGlvbiBvZiB0aGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTb3VyY2VDb2x1bW5zKGNvZGUsIHRva2Vucykge1xuICBjb25zdCBzb3VyY2VDb2x1bW5zID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpO1xuICBsZXQgdG9rZW5JbmRleCA9IDA7XG4gIGxldCBjdXJyZW50TWFwcGluZyA9IHRva2Vuc1t0b2tlbkluZGV4XS5zdGFydDtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSBjdXJyZW50TWFwcGluZykge1xuICAgICAgc291cmNlQ29sdW1uc1t0b2tlbkluZGV4XSA9IGN1cnJlbnRNYXBwaW5nIC0gbGluZVN0YXJ0O1xuICAgICAgdG9rZW5JbmRleCsrO1xuICAgICAgY3VycmVudE1hcHBpbmcgPSB0b2tlbnNbdG9rZW5JbmRleF0uc3RhcnQ7XG4gICAgfVxuICAgIGlmIChjb2RlLmNoYXJDb2RlQXQoaSkgPT09IGNoYXJDb2Rlcy5saW5lRmVlZCkge1xuICAgICAgbGluZVN0YXJ0ID0gaSArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBzb3VyY2VDb2x1bW5zO1xufVxuIiwgIlxuXG5jb25zdCBIRUxQRVJTID0ge1xuICByZXF1aXJlOiBgXG4gICAgaW1wb3J0IHtjcmVhdGVSZXF1aXJlIGFzIENSRUFURV9SRVFVSVJFX05BTUV9IGZyb20gXCJtb2R1bGVcIjtcbiAgICBjb25zdCByZXF1aXJlID0gQ1JFQVRFX1JFUVVJUkVfTkFNRShpbXBvcnQubWV0YS51cmwpO1xuICBgLFxuICBpbnRlcm9wUmVxdWlyZVdpbGRjYXJkOiBgXG4gICAgZnVuY3Rpb24gaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHtcbiAgICAgIGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuZXdPYmogPSB7fTtcbiAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XG4gICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG4gICAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICBpbnRlcm9wUmVxdWlyZURlZmF1bHQ6IGBcbiAgICBmdW5jdGlvbiBpbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTtcbiAgICB9XG4gIGAsXG4gIGNyZWF0ZU5hbWVkRXhwb3J0RnJvbTogYFxuICAgIGZ1bmN0aW9uIGNyZWF0ZU5hbWVkRXhwb3J0RnJvbShvYmosIGxvY2FsTmFtZSwgaW1wb3J0ZWROYW1lKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbG9jYWxOYW1lLCB7ZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBnZXQ6ICgpID0+IG9ialtpbXBvcnRlZE5hbWVdfSk7XG4gICAgfVxuICBgLFxuICAvLyBOb3RlIHRoYXQgVHlwZVNjcmlwdCBhbmQgQmFiZWwgZG8gdGhpcyBkaWZmZXJlbnRseTsgVHlwZVNjcmlwdCBkb2VzIGEgc2ltcGxlIGV4aXN0ZW5jZVxuICAvLyBjaGVjayBpbiB0aGUgZXhwb3J0cyBvYmplY3QgYW5kIGRvZXMgYSBwbGFpbiBhc3NpZ25tZW50LCB3aGVyZWFzIEJhYmVsIHVzZXNcbiAgLy8gZGVmaW5lUHJvcGVydHkgYW5kIGJ1aWxkcyBhbiBvYmplY3Qgb2YgZXhwbGljaXRseS1leHBvcnRlZCBuYW1lcyBzbyB0aGF0IHN0YXIgZXhwb3J0cyBjYW5cbiAgLy8gYWx3YXlzIHRha2UgbG93ZXIgcHJlY2VkZW5jZS4gRm9yIG5vdywgd2UgZG8gdGhlIGVhc2llciBUeXBlU2NyaXB0IHRoaW5nLlxuICBjcmVhdGVTdGFyRXhwb3J0OiBgXG4gICAgZnVuY3Rpb24gY3JlYXRlU3RhckV4cG9ydChvYmopIHtcbiAgICAgIE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleSAhPT0gXCJfX2VzTW9kdWxlXCIpXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGdldDogKCkgPT4gb2JqW2tleV19KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICBgLFxuICBudWxsaXNoQ29hbGVzY2U6IGBcbiAgICBmdW5jdGlvbiBudWxsaXNoQ29hbGVzY2UobGhzLCByaHNGbikge1xuICAgICAgaWYgKGxocyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsaHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmhzRm4oKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gIGFzeW5jTnVsbGlzaENvYWxlc2NlOiBgXG4gICAgYXN5bmMgZnVuY3Rpb24gYXN5bmNOdWxsaXNoQ29hbGVzY2UobGhzLCByaHNGbikge1xuICAgICAgaWYgKGxocyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsaHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmhzRm4oKTtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gIG9wdGlvbmFsQ2hhaW46IGBcbiAgICBmdW5jdGlvbiBvcHRpb25hbENoYWluKG9wcykge1xuICAgICAgbGV0IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgdmFsdWUgPSBvcHNbMF07XG4gICAgICBsZXQgaSA9IDE7XG4gICAgICB3aGlsZSAoaSA8IG9wcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgb3AgPSBvcHNbaV07XG4gICAgICAgIGNvbnN0IGZuID0gb3BzW2kgKyAxXTtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBpZiAoKG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgJiYgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykge1xuICAgICAgICAgIGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTtcbiAgICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2NhbGwnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykge1xuICAgICAgICAgIHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpO1xuICAgICAgICAgIGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIGAsXG4gIGFzeW5jT3B0aW9uYWxDaGFpbjogYFxuICAgIGFzeW5jIGZ1bmN0aW9uIGFzeW5jT3B0aW9uYWxDaGFpbihvcHMpIHtcbiAgICAgIGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IHZhbHVlID0gb3BzWzBdO1xuICAgICAgbGV0IGkgPSAxO1xuICAgICAgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzW2ldO1xuICAgICAgICBjb25zdCBmbiA9IG9wc1tpICsgMV07XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHtcbiAgICAgICAgICBsYXN0QWNjZXNzTEhTID0gdmFsdWU7XG4gICAgICAgICAgdmFsdWUgPSBhd2FpdCBmbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHtcbiAgICAgICAgICB2YWx1ZSA9IGF3YWl0IGZuKCguLi5hcmdzKSA9PiB2YWx1ZS5jYWxsKGxhc3RBY2Nlc3NMSFMsIC4uLmFyZ3MpKTtcbiAgICAgICAgICBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICBgLFxuICBvcHRpb25hbENoYWluRGVsZXRlOiBgXG4gICAgZnVuY3Rpb24gb3B0aW9uYWxDaGFpbkRlbGV0ZShvcHMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IE9QVElPTkFMX0NIQUlOX05BTUUob3BzKTtcbiAgICAgIHJldHVybiByZXN1bHQgPT0gbnVsbCA/IHRydWUgOiByZXN1bHQ7XG4gICAgfVxuICBgLFxuICBhc3luY09wdGlvbmFsQ2hhaW5EZWxldGU6IGBcbiAgICBhc3luYyBmdW5jdGlvbiBhc3luY09wdGlvbmFsQ2hhaW5EZWxldGUob3BzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBBU1lOQ19PUFRJT05BTF9DSEFJTl9OQU1FKG9wcyk7XG4gICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyB0cnVlIDogcmVzdWx0O1xuICAgIH1cbiAgYCxcbn07XG5cbmV4cG9ydCBjbGFzcyBIZWxwZXJNYW5hZ2VyIHtcbiAgX19pbml0KCkge3RoaXMuaGVscGVyTmFtZXMgPSB7fX1cbiAgX19pbml0MigpIHt0aGlzLmNyZWF0ZVJlcXVpcmVOYW1lID0gbnVsbH1cbiAgY29uc3RydWN0b3IoIG5hbWVNYW5hZ2VyKSB7O3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjtIZWxwZXJNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtIZWxwZXJNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7fVxuXG4gIGdldEhlbHBlck5hbWUoYmFzZU5hbWUpIHtcbiAgICBsZXQgaGVscGVyTmFtZSA9IHRoaXMuaGVscGVyTmFtZXNbYmFzZU5hbWVdO1xuICAgIGlmIChoZWxwZXJOYW1lKSB7XG4gICAgICByZXR1cm4gaGVscGVyTmFtZTtcbiAgICB9XG4gICAgaGVscGVyTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShgXyR7YmFzZU5hbWV9YCk7XG4gICAgdGhpcy5oZWxwZXJOYW1lc1tiYXNlTmFtZV0gPSBoZWxwZXJOYW1lO1xuICAgIHJldHVybiBoZWxwZXJOYW1lO1xuICB9XG5cbiAgZW1pdEhlbHBlcnMoKSB7XG4gICAgbGV0IHJlc3VsdENvZGUgPSBcIlwiO1xuICAgIGlmICh0aGlzLmhlbHBlck5hbWVzLm9wdGlvbmFsQ2hhaW5EZWxldGUpIHtcbiAgICAgIHRoaXMuZ2V0SGVscGVyTmFtZShcIm9wdGlvbmFsQ2hhaW5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmhlbHBlck5hbWVzLmFzeW5jT3B0aW9uYWxDaGFpbkRlbGV0ZSkge1xuICAgICAgdGhpcy5nZXRIZWxwZXJOYW1lKFwiYXN5bmNPcHRpb25hbENoYWluXCIpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtiYXNlTmFtZSwgaGVscGVyQ29kZVRlbXBsYXRlXSBvZiBPYmplY3QuZW50cmllcyhIRUxQRVJTKSkge1xuICAgICAgY29uc3QgaGVscGVyTmFtZSA9IHRoaXMuaGVscGVyTmFtZXNbYmFzZU5hbWVdO1xuICAgICAgbGV0IGhlbHBlckNvZGUgPSBoZWxwZXJDb2RlVGVtcGxhdGU7XG4gICAgICBpZiAoYmFzZU5hbWUgPT09IFwib3B0aW9uYWxDaGFpbkRlbGV0ZVwiKSB7XG4gICAgICAgIGhlbHBlckNvZGUgPSBoZWxwZXJDb2RlLnJlcGxhY2UoXCJPUFRJT05BTF9DSEFJTl9OQU1FXCIsIHRoaXMuaGVscGVyTmFtZXMub3B0aW9uYWxDaGFpbik7XG4gICAgICB9IGVsc2UgaWYgKGJhc2VOYW1lID09PSBcImFzeW5jT3B0aW9uYWxDaGFpbkRlbGV0ZVwiKSB7XG4gICAgICAgIGhlbHBlckNvZGUgPSBoZWxwZXJDb2RlLnJlcGxhY2UoXG4gICAgICAgICAgXCJBU1lOQ19PUFRJT05BTF9DSEFJTl9OQU1FXCIsXG4gICAgICAgICAgdGhpcy5oZWxwZXJOYW1lcy5hc3luY09wdGlvbmFsQ2hhaW4sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGJhc2VOYW1lID09PSBcInJlcXVpcmVcIikge1xuICAgICAgICBpZiAodGhpcy5jcmVhdGVSZXF1aXJlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlUmVxdWlyZU5hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfY3JlYXRlUmVxdWlyZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBoZWxwZXJDb2RlID0gaGVscGVyQ29kZS5yZXBsYWNlKC9DUkVBVEVfUkVRVUlSRV9OQU1FL2csIHRoaXMuY3JlYXRlUmVxdWlyZU5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGhlbHBlck5hbWUpIHtcbiAgICAgICAgcmVzdWx0Q29kZSArPSBcIiBcIjtcbiAgICAgICAgcmVzdWx0Q29kZSArPSBoZWxwZXJDb2RlLnJlcGxhY2UoYmFzZU5hbWUsIGhlbHBlck5hbWUpLnJlcGxhY2UoL1xccysvZywgXCIgXCIpLnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdENvZGU7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBpc0Jsb2NrU2NvcGVkRGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbixcbiAgaXNOb25Ub3BMZXZlbERlY2xhcmF0aW9uLFxufSBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyXCI7XG5cbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5cblxuLyoqXG4gKiBUcmF2ZXJzZSB0aGUgZ2l2ZW4gdG9rZW5zIGFuZCBtb2RpZnkgdGhlbSBpZiBuZWNlc3NhcnkgdG8gaW5kaWNhdGUgdGhhdCBzb21lIG5hbWVzIHNoYWRvdyBnbG9iYWxcbiAqIHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMoXG4gIHRva2VucyxcbiAgc2NvcGVzLFxuICBnbG9iYWxOYW1lcyxcbikge1xuICBpZiAoIWhhc1NoYWRvd2VkR2xvYmFscyh0b2tlbnMsIGdsb2JhbE5hbWVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBtYXJrU2hhZG93ZWRHbG9iYWxzKHRva2Vucywgc2NvcGVzLCBnbG9iYWxOYW1lcyk7XG59XG5cbi8qKlxuICogV2UgY2FuIGRvIGEgZmFzdCB1cC1mcm9udCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZWNsYXJhdGlvbnMgdG8gZ2xvYmFsIG5hbWVzLiBJZiBub3QsXG4gKiB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29tcHV0aW5nIHNjb3BlIGFzc2lnbm1lbnRzLlxuICovXG4vLyBFeHBvcnRlZCBmb3IgdGVzdGluZy5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTaGFkb3dlZEdsb2JhbHModG9rZW5zLCBnbG9iYWxOYW1lcykge1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucy50b2tlbnMpIHtcbiAgICBpZiAoXG4gICAgICB0b2tlbi50eXBlID09PSB0dC5uYW1lICYmXG4gICAgICAhdG9rZW4uaXNUeXBlICYmXG4gICAgICBpc05vblRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pICYmXG4gICAgICBnbG9iYWxOYW1lcy5oYXModG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWFya1NoYWRvd2VkR2xvYmFscyhcbiAgdG9rZW5zLFxuICBzY29wZXMsXG4gIGdsb2JhbE5hbWVzLFxuKSB7XG4gIGNvbnN0IHNjb3BlU3RhY2sgPSBbXTtcbiAgbGV0IHNjb3BlSW5kZXggPSBzY29wZXMubGVuZ3RoIC0gMTtcbiAgLy8gU2NvcGVzIHdlcmUgZ2VuZXJhdGVkIGF0IGNvbXBsZXRpb24gdGltZSwgc28gdGhleSdyZSBzb3J0ZWQgYnkgZW5kIGluZGV4LCBzbyB3ZSBjYW4gbWFpbnRhaW4gYVxuICAvLyBnb29kIHN0YWNrIGJ5IGdvaW5nIGJhY2t3YXJkcyB0aHJvdWdoIHRoZW0uXG4gIGZvciAobGV0IGkgPSB0b2tlbnMudG9rZW5zLmxlbmd0aCAtIDE7IDsgaS0tKSB7XG4gICAgd2hpbGUgKHNjb3BlU3RhY2subGVuZ3RoID4gMCAmJiBzY29wZVN0YWNrW3Njb3BlU3RhY2subGVuZ3RoIC0gMV0uc3RhcnRUb2tlbkluZGV4ID09PSBpICsgMSkge1xuICAgICAgc2NvcGVTdGFjay5wb3AoKTtcbiAgICB9XG4gICAgd2hpbGUgKHNjb3BlSW5kZXggPj0gMCAmJiBzY29wZXNbc2NvcGVJbmRleF0uZW5kVG9rZW5JbmRleCA9PT0gaSArIDEpIHtcbiAgICAgIHNjb3BlU3RhY2sucHVzaChzY29wZXNbc2NvcGVJbmRleF0pO1xuICAgICAgc2NvcGVJbmRleC0tO1xuICAgIH1cbiAgICAvLyBQcm9jZXNzIHNjb3BlcyBhZnRlciB0aGUgbGFzdCBpdGVyYXRpb24gc28gd2UgY2FuIG1ha2Ugc3VyZSB3ZSBwb3AgYWxsIG9mIHRoZW0uXG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgY29uc3QgbmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKTtcbiAgICBpZiAoc2NvcGVTdGFjay5sZW5ndGggPiAxICYmICF0b2tlbi5pc1R5cGUgJiYgdG9rZW4udHlwZSA9PT0gdHQubmFtZSAmJiBnbG9iYWxOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIGlmIChpc0Jsb2NrU2NvcGVkRGVjbGFyYXRpb24odG9rZW4pKSB7XG4gICAgICAgIG1hcmtTaGFkb3dlZEZvclNjb3BlKHNjb3BlU3RhY2tbc2NvcGVTdGFjay5sZW5ndGggLSAxXSwgdG9rZW5zLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uKHRva2VuKSkge1xuICAgICAgICBsZXQgc3RhY2tJbmRleCA9IHNjb3BlU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKHN0YWNrSW5kZXggPiAwICYmICFzY29wZVN0YWNrW3N0YWNrSW5kZXhdLmlzRnVuY3Rpb25TY29wZSkge1xuICAgICAgICAgIHN0YWNrSW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhY2tJbmRleCA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgcGFyZW50IGZ1bmN0aW9uIHNjb3BlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBtYXJrU2hhZG93ZWRGb3JTY29wZShzY29wZVN0YWNrW3N0YWNrSW5kZXhdLCB0b2tlbnMsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc2NvcGVTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZW1wdHkgc2NvcGUgc3RhY2sgYWZ0ZXIgcHJvY2Vzc2luZyBmaWxlLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU2hhZG93ZWRGb3JTY29wZShzY29wZSwgdG9rZW5zLCBuYW1lKSB7XG4gIGZvciAobGV0IGkgPSBzY29wZS5zdGFydFRva2VuSW5kZXg7IGkgPCBzY29wZS5lbmRUb2tlbkluZGV4OyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKFxuICAgICAgKHRva2VuLnR5cGUgPT09IHR0Lm5hbWUgfHwgdG9rZW4udHlwZSA9PT0gdHQuanN4TmFtZSkgJiZcbiAgICAgIHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSA9PT0gbmFtZVxuICAgICkge1xuICAgICAgdG9rZW4uc2hhZG93c0dsb2JhbCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iLCAiXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuLyoqXG4gKiBHZXQgYWxsIGlkZW50aWZpZXIgbmFtZXMgaW4gdGhlIGNvZGUsIGluIG9yZGVyLCBpbmNsdWRpbmcgZHVwbGljYXRlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SWRlbnRpZmllck5hbWVzKGNvZGUsIHRva2Vucykge1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgIGlmICh0b2tlbi50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgICBuYW1lcy5wdXNoKGNvZGUuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXM7XG59XG4iLCAiXG5pbXBvcnQgZ2V0SWRlbnRpZmllck5hbWVzIGZyb20gXCIuL3V0aWwvZ2V0SWRlbnRpZmllck5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVNYW5hZ2VyIHtcbiAgICBfX2luaXQoKSB7dGhpcy51c2VkTmFtZXMgPSBuZXcgU2V0KCl9XG5cbiAgY29uc3RydWN0b3IoY29kZSwgdG9rZW5zKSB7O05hbWVNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnVzZWROYW1lcyA9IG5ldyBTZXQoZ2V0SWRlbnRpZmllck5hbWVzKGNvZGUsIHRva2VucykpO1xuICB9XG5cbiAgY2xhaW1GcmVlTmFtZShuYW1lKSB7XG4gICAgY29uc3QgbmV3TmFtZSA9IHRoaXMuZmluZEZyZWVOYW1lKG5hbWUpO1xuICAgIHRoaXMudXNlZE5hbWVzLmFkZChuZXdOYW1lKTtcbiAgICByZXR1cm4gbmV3TmFtZTtcbiAgfVxuXG4gIGZpbmRGcmVlTmFtZShuYW1lKSB7XG4gICAgaWYgKCF0aGlzLnVzZWROYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBsZXQgc3VmZml4TnVtID0gMjtcbiAgICB3aGlsZSAodGhpcy51c2VkTmFtZXMuaGFzKG5hbWUgKyBTdHJpbmcoc3VmZml4TnVtKSkpIHtcbiAgICAgIHN1ZmZpeE51bSsrO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZSArIFN0cmluZyhzdWZmaXhOdW0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHtjcmVhdGVDaGVja2Vyc30gZnJvbSBcInRzLWludGVyZmFjZS1jaGVja2VyXCI7XG5cbmltcG9ydCBPcHRpb25zR2VuVHlwZXMgZnJvbSBcIi4vT3B0aW9ucy1nZW4tdHlwZXNcIjtcblxuY29uc3Qge09wdGlvbnM6IE9wdGlvbnNDaGVja2VyfSA9IGNyZWF0ZUNoZWNrZXJzKE9wdGlvbnNHZW5UeXBlcyk7XG5cbiBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gIE9wdGlvbnNDaGVja2VyLnN0cmljdENoZWNrKG9wdGlvbnMpO1xufVxuIiwgIi8qKlxuICogVGhpcyBtb2R1bGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGB0cy1pbnRlcmZhY2UtYnVpbGRlcmBcbiAqL1xuaW1wb3J0ICogYXMgdCBmcm9tIFwidHMtaW50ZXJmYWNlLWNoZWNrZXJcIjtcbi8vIHRzbGludDpkaXNhYmxlOm9iamVjdC1saXRlcmFsLWtleS1xdW90ZXNcblxuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybSA9IHQudW5pb24oXG4gIHQubGl0KFwianN4XCIpLFxuICB0LmxpdChcInR5cGVzY3JpcHRcIiksXG4gIHQubGl0KFwiZmxvd1wiKSxcbiAgdC5saXQoXCJpbXBvcnRzXCIpLFxuICB0LmxpdChcInJlYWN0LWhvdC1sb2FkZXJcIiksXG4gIHQubGl0KFwiamVzdFwiKSxcbik7XG5cbmV4cG9ydCBjb25zdCBTb3VyY2VNYXBPcHRpb25zID0gdC5pZmFjZShbXSwge1xuICBjb21waWxlZEZpbGVuYW1lOiBcInN0cmluZ1wiLFxufSk7XG5cbmV4cG9ydCBjb25zdCBPcHRpb25zID0gdC5pZmFjZShbXSwge1xuICB0cmFuc2Zvcm1zOiB0LmFycmF5KFwiVHJhbnNmb3JtXCIpLFxuICBkaXNhYmxlRVNUcmFuc2Zvcm1zOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGpzeFJ1bnRpbWU6IHQub3B0KHQudW5pb24odC5saXQoXCJjbGFzc2ljXCIpLCB0LmxpdChcImF1dG9tYXRpY1wiKSwgdC5saXQoXCJwcmVzZXJ2ZVwiKSkpLFxuICBwcm9kdWN0aW9uOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGpzeEltcG9ydFNvdXJjZTogdC5vcHQoXCJzdHJpbmdcIiksXG4gIGpzeFByYWdtYTogdC5vcHQoXCJzdHJpbmdcIiksXG4gIGpzeEZyYWdtZW50UHJhZ21hOiB0Lm9wdChcInN0cmluZ1wiKSxcbiAga2VlcFVudXNlZEltcG9ydHM6IHQub3B0KFwiYm9vbGVhblwiKSxcbiAgcHJlc2VydmVEeW5hbWljSW1wb3J0OiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGluamVjdENyZWF0ZVJlcXVpcmVGb3JJbXBvcnRSZXF1aXJlOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3A6IHQub3B0KFwiYm9vbGVhblwiKSxcbiAgc291cmNlTWFwT3B0aW9uczogdC5vcHQoXCJTb3VyY2VNYXBPcHRpb25zXCIpLFxuICBmaWxlUGF0aDogdC5vcHQoXCJzdHJpbmdcIiksXG59KTtcblxuY29uc3QgZXhwb3J0ZWRUeXBlU3VpdGUgPSB7XG4gIFRyYW5zZm9ybSxcbiAgU291cmNlTWFwT3B0aW9ucyxcbiAgT3B0aW9ucyxcbn07XG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZFR5cGVTdWl0ZTtcbiIsICJpbXBvcnQge2Zsb3dQYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzfSBmcm9tIFwiLi4vcGx1Z2lucy9mbG93XCI7XG5pbXBvcnQge3RzUGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcywgdHNQYXJzZU1vZGlmaWVyc30gZnJvbSBcIi4uL3BsdWdpbnMvdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHtcbiAgZWF0LFxuICBJZGVudGlmaWVyUm9sZSxcbiAgbWF0Y2gsXG4gIG5leHQsXG4gIHBvcFR5cGVDb250ZXh0LFxuICBwdXNoVHlwZUNvbnRleHQsXG59IGZyb20gXCIuLi90b2tlbml6ZXIvaW5kZXhcIjtcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlLCBUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuLi90b2tlbml6ZXIvdHlwZXNcIjtcbmltcG9ydCB7aXNGbG93RW5hYmxlZCwgaXNUeXBlU2NyaXB0RW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7cGFyc2VJZGVudGlmaWVyLCBwYXJzZU1heWJlQXNzaWduLCBwYXJzZU9ian0gZnJvbSBcIi4vZXhwcmVzc2lvblwiO1xuaW1wb3J0IHtleHBlY3QsIHVuZXhwZWN0ZWR9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3ByZWFkKCkge1xuICBuZXh0KCk7XG4gIHBhcnNlTWF5YmVBc3NpZ24oZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXN0KGlzQmxvY2tTY29wZSkge1xuICBuZXh0KCk7XG4gIHBhcnNlQmluZGluZ0F0b20oaXNCbG9ja1Njb3BlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmluZGluZ0lkZW50aWZpZXIoaXNCbG9ja1Njb3BlKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBtYXJrUHJpb3JCaW5kaW5nSWRlbnRpZmllcihpc0Jsb2NrU2NvcGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbXBvcnRlZElkZW50aWZpZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrUHJpb3JCaW5kaW5nSWRlbnRpZmllcihpc0Jsb2NrU2NvcGUpIHtcbiAgbGV0IGlkZW50aWZpZXJSb2xlO1xuICBpZiAoc3RhdGUuc2NvcGVEZXB0aCA9PT0gMCkge1xuICAgIGlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuVG9wTGV2ZWxEZWNsYXJhdGlvbjtcbiAgfSBlbHNlIGlmIChpc0Jsb2NrU2NvcGUpIHtcbiAgICBpZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLkJsb2NrU2NvcGVkRGVjbGFyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5GdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uO1xuICB9XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBpZGVudGlmaWVyUm9sZTtcbn1cblxuLy8gUGFyc2VzIGx2YWx1ZSAoYXNzaWduYWJsZSkgYXRvbS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJpbmRpbmdBdG9tKGlzQmxvY2tTY29wZSkge1xuICBzd2l0Y2ggKHN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIHR0Ll90aGlzOiB7XG4gICAgICAvLyBJbiBUeXBlU2NyaXB0LCBcInRoaXNcIiBtYXkgYmUgdGhlIG5hbWUgb2YgYSBwYXJhbWV0ZXIsIHNvIGFsbG93IGl0LlxuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICAgICAgbmV4dCgpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIHR0Ll95aWVsZDpcbiAgICBjYXNlIHR0Lm5hbWU6IHtcbiAgICAgIHN0YXRlLnR5cGUgPSB0dC5uYW1lO1xuICAgICAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihpc0Jsb2NrU2NvcGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhc2UgdHQuYnJhY2tldEw6IHtcbiAgICAgIG5leHQoKTtcbiAgICAgIHBhcnNlQmluZGluZ0xpc3QodHQuYnJhY2tldFIsIGlzQmxvY2tTY29wZSwgdHJ1ZSAvKiBhbGxvd0VtcHR5ICovKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIHR0LmJyYWNlTDpcbiAgICAgIHBhcnNlT2JqKHRydWUsIGlzQmxvY2tTY29wZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdW5leHBlY3RlZCgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJpbmRpbmdMaXN0KFxuICBjbG9zZSxcbiAgaXNCbG9ja1Njb3BlLFxuICBhbGxvd0VtcHR5ID0gZmFsc2UsXG4gIGFsbG93TW9kaWZpZXJzID0gZmFsc2UsXG4gIGNvbnRleHRJZCA9IDAsXG4pIHtcbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcblxuICBsZXQgaGFzUmVtb3ZlZENvbW1hID0gZmFsc2U7XG4gIGNvbnN0IGZpcnN0SXRlbVRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuXG4gIHdoaWxlICghZWF0KGNsb3NlKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGVjdCh0dC5jb21tYSk7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgICAgIC8vIEFmdGVyIGEgXCJ0aGlzXCIgdHlwZSBpbiBUeXBlU2NyaXB0LCB3ZSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nIGNvbW1hIChpZiBhbnkpIHRvIGFsc28gYmVcbiAgICAgIC8vIGEgdHlwZSB0b2tlbiBzbyB0aGF0IGl0IHdpbGwgYmUgcmVtb3ZlZC5cbiAgICAgIGlmICghaGFzUmVtb3ZlZENvbW1hICYmIHN0YXRlLnRva2Vuc1tmaXJzdEl0ZW1Ub2tlbkluZGV4XS5pc1R5cGUpIHtcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICAgICAgICBoYXNSZW1vdmVkQ29tbWEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsb3dFbXB0eSAmJiBtYXRjaCh0dC5jb21tYSkpIHtcbiAgICAgIC8vIEVtcHR5IGl0ZW07IG5vdGhpbmcgZnVydGhlciB0byBwYXJzZSBmb3IgdGhpcyBpdGVtLlxuICAgIH0gZWxzZSBpZiAoZWF0KGNsb3NlKSkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChtYXRjaCh0dC5lbGxpcHNpcykpIHtcbiAgICAgIHBhcnNlUmVzdChpc0Jsb2NrU2NvcGUpO1xuICAgICAgcGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpO1xuICAgICAgLy8gU3VwcG9ydCByZXN0IGVsZW1lbnQgdHJhaWxpbmcgY29tbWFzIGFsbG93ZWQgYnkgVHlwZVNjcmlwdCA8Mi45LlxuICAgICAgZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICBleHBlY3QoY2xvc2UpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlQXNzaWduYWJsZUxpc3RJdGVtKGFsbG93TW9kaWZpZXJzLCBpc0Jsb2NrU2NvcGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUFzc2lnbmFibGVMaXN0SXRlbShhbGxvd01vZGlmaWVycywgaXNCbG9ja1Njb3BlKSB7XG4gIGlmIChhbGxvd01vZGlmaWVycykge1xuICAgIHRzUGFyc2VNb2RpZmllcnMoW1xuICAgICAgQ29udGV4dHVhbEtleXdvcmQuX3B1YmxpYyxcbiAgICAgIENvbnRleHR1YWxLZXl3b3JkLl9wcm90ZWN0ZWQsXG4gICAgICBDb250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSxcbiAgICAgIENvbnRleHR1YWxLZXl3b3JkLl9yZWFkb25seSxcbiAgICAgIENvbnRleHR1YWxLZXl3b3JkLl9vdmVycmlkZSxcbiAgICBdKTtcbiAgfVxuXG4gIHBhcnNlTWF5YmVEZWZhdWx0KGlzQmxvY2tTY29wZSk7XG4gIHBhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKTtcbiAgcGFyc2VNYXliZURlZmF1bHQoaXNCbG9ja1Njb3BlLCB0cnVlIC8qIGxlZnRBbHJlYWR5UGFyc2VkICovKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpO1xuICB9IGVsc2UgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKTtcbiAgfVxufVxuXG4vLyBQYXJzZXMgYXNzaWdubWVudCBwYXR0ZXJuIGFyb3VuZCBnaXZlbiBhdG9tIGlmIHBvc3NpYmxlLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWF5YmVEZWZhdWx0KGlzQmxvY2tTY29wZSwgbGVmdEFscmVhZHlQYXJzZWQgPSBmYWxzZSkge1xuICBpZiAoIWxlZnRBbHJlYWR5UGFyc2VkKSB7XG4gICAgcGFyc2VCaW5kaW5nQXRvbShpc0Jsb2NrU2NvcGUpO1xuICB9XG4gIGlmICghZWF0KHR0LmVxKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlcUluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aCAtIDE7XG4gIHBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgc3RhdGUudG9rZW5zW2VxSW5kZXhdLnJoc0VuZEluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbn1cbiIsICJpbXBvcnQge1xuICBlYXQsXG4gIGZpbmlzaFRva2VuLFxuICBJZGVudGlmaWVyUm9sZSxcbiAgbG9va2FoZWFkVHlwZSxcbiAgbG9va2FoZWFkVHlwZUFuZEtleXdvcmQsXG4gIG1hdGNoLFxuICBuZXh0LFxuICBuZXh0VGVtcGxhdGVUb2tlbixcbiAgcG9wVHlwZUNvbnRleHQsXG4gIHB1c2hUeXBlQ29udGV4dCxcbiAgcmVzY2FuX2d0LFxufSBmcm9tIFwiLi4vdG9rZW5pemVyL2luZGV4XCI7XG5pbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi4vdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQge2lzSlNYRW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuLi90cmF2ZXJzZXIvYmFzZVwiO1xuaW1wb3J0IHtcbiAgYXRQb3NzaWJsZUFzeW5jLFxuICBiYXNlUGFyc2VNYXliZUFzc2lnbixcbiAgYmFzZVBhcnNlU3Vic2NyaXB0LFxuICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzLFxuICBwYXJzZUV4cHJBdG9tLFxuICBwYXJzZUV4cHJlc3Npb24sXG4gIHBhcnNlRnVuY3Rpb25Cb2R5LFxuICBwYXJzZUlkZW50aWZpZXIsXG4gIHBhcnNlTGl0ZXJhbCxcbiAgcGFyc2VNYXliZUFzc2lnbixcbiAgcGFyc2VNYXliZVVuYXJ5LFxuICBwYXJzZVByb3BlcnR5TmFtZSxcbiAgcGFyc2VUZW1wbGF0ZSxcblxufSBmcm9tIFwiLi4vdHJhdmVyc2VyL2V4cHJlc3Npb25cIjtcbmltcG9ydCB7cGFyc2VCaW5kaW5nSWRlbnRpZmllciwgcGFyc2VCaW5kaW5nTGlzdCwgcGFyc2VJbXBvcnRlZElkZW50aWZpZXJ9IGZyb20gXCIuLi90cmF2ZXJzZXIvbHZhbFwiO1xuaW1wb3J0IHtcbiAgYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMsXG4gIHBhcnNlQmxvY2tCb2R5LFxuICBwYXJzZUNsYXNzLFxuICBwYXJzZUZ1bmN0aW9uLFxuICBwYXJzZUZ1bmN0aW9uUGFyYW1zLFxuICBwYXJzZVN0YXRlbWVudCxcbiAgcGFyc2VWYXJTdGF0ZW1lbnQsXG59IGZyb20gXCIuLi90cmF2ZXJzZXIvc3RhdGVtZW50XCI7XG5pbXBvcnQge1xuICBjYW5JbnNlcnRTZW1pY29sb24sXG4gIGVhdENvbnRleHR1YWwsXG4gIGV4cGVjdCxcbiAgZXhwZWN0Q29udGV4dHVhbCxcbiAgaGFzUHJlY2VkaW5nTGluZUJyZWFrLFxuICBpc0NvbnRleHR1YWwsXG4gIGlzTGluZVRlcm1pbmF0b3IsXG4gIGlzTG9va2FoZWFkQ29udGV4dHVhbCxcbiAgc2VtaWNvbG9uLFxuICB1bmV4cGVjdGVkLFxufSBmcm9tIFwiLi4vdHJhdmVyc2VyL3V0aWxcIjtcbmltcG9ydCB7bmV4dEpTWFRhZ1Rva2VufSBmcm9tIFwiLi9qc3hcIjtcblxuZnVuY3Rpb24gdHNJc0lkZW50aWZpZXIoKSB7XG4gIC8vIFRPRE86IGFjdHVhbGx5IGEgYml0IG1vcmUgY29tcGxleCBpbiBUeXBlU2NyaXB0LCBidXQgc2hvdWxkbid0IG1hdHRlci5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTUwMDhcbiAgcmV0dXJuIG1hdGNoKHR0Lm5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc0xpdGVyYWxQcm9wZXJ0eU5hbWUoKSB7XG4gIHJldHVybiAoXG4gICAgbWF0Y2godHQubmFtZSkgfHxcbiAgICBCb29sZWFuKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfS0VZV09SRCkgfHxcbiAgICBtYXRjaCh0dC5zdHJpbmcpIHx8XG4gICAgbWF0Y2godHQubnVtKSB8fFxuICAgIG1hdGNoKHR0LmJpZ2ludCkgfHxcbiAgICBtYXRjaCh0dC5kZWNpbWFsKVxuICApO1xufVxuXG5mdW5jdGlvbiB0c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyKCkge1xuICAvLyBOb3RlOiBUeXBlU2NyaXB0J3MgaW1wbGVtZW50YXRpb24gaXMgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIGJlY2F1c2VcbiAgLy8gbW9yZSB0aGluZ3MgYXJlIGNvbnNpZGVyZWQgbW9kaWZpZXJzIHRoZXJlLlxuICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIG9ubHkgaGFuZGxlcyBtb2RpZmllcnMgbm90IGhhbmRsZWQgYnkgYmFieWxvbiBpdHNlbGYuIEFuZCBcInN0YXRpY1wiLlxuICAvLyBUT0RPOiBXb3VsZCBiZSBuaWNlIHRvIGF2b2lkIGxvb2thaGVhZC4gV2FudCBhIGhhc0xpbmVCcmVha1VwTmV4dCgpIG1ldGhvZC4uLlxuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG5cbiAgbmV4dCgpO1xuICBjb25zdCBjYW5Gb2xsb3dNb2RpZmllciA9XG4gICAgKG1hdGNoKHR0LmJyYWNrZXRMKSB8fFxuICAgICAgbWF0Y2godHQuYnJhY2VMKSB8fFxuICAgICAgbWF0Y2godHQuc3RhcikgfHxcbiAgICAgIG1hdGNoKHR0LmVsbGlwc2lzKSB8fFxuICAgICAgbWF0Y2godHQuaGFzaCkgfHxcbiAgICAgIGlzTGl0ZXJhbFByb3BlcnR5TmFtZSgpKSAmJlxuICAgICFoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKTtcblxuICBpZiAoY2FuRm9sbG93TW9kaWZpZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VNb2RpZmllcnMoYWxsb3dlZE1vZGlmaWVycykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IG1vZGlmaWVyID0gdHNQYXJzZU1vZGlmaWVyKGFsbG93ZWRNb2RpZmllcnMpO1xuICAgIGlmIChtb2RpZmllciA9PT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbi8qKiBQYXJzZXMgYSBtb2RpZmllciBtYXRjaGluZyBvbmUgdGhlIGdpdmVuIG1vZGlmaWVyIG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VNb2RpZmllcihcbiAgYWxsb3dlZE1vZGlmaWVycyxcbikge1xuICBpZiAoIW1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtb2RpZmllciA9IHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkO1xuICBpZiAoYWxsb3dlZE1vZGlmaWVycy5pbmRleE9mKG1vZGlmaWVyKSAhPT0gLTEgJiYgdHNOZXh0VG9rZW5DYW5Gb2xsb3dNb2RpZmllcigpKSB7XG4gICAgc3dpdGNoIChtb2RpZmllcikge1xuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHk6XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9yZWFkb25seTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2Fic3RyYWN0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYzpcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX3N0YXRpYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWM6XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9wdWJsaWM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZTpcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX3ByaXZhdGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fcHJvdGVjdGVkOlxuICAgICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fcHJvdGVjdGVkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlOlxuICAgICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fb3ZlcnJpZGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZTpcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2RlY2xhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBtb2RpZmllcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZUVudGl0eU5hbWUoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICB3aGlsZSAoZWF0KHR0LmRvdCkpIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVJlZmVyZW5jZSgpIHtcbiAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgaWYgKCFoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSAmJiBtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUaGlzVHlwZVByZWRpY2F0ZSgpIHtcbiAgbmV4dCgpO1xuICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZVRoaXNUeXBlTm9kZSgpIHtcbiAgbmV4dCgpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVF1ZXJ5KCkge1xuICBleHBlY3QodHQuX3R5cGVvZik7XG4gIGlmIChtYXRjaCh0dC5faW1wb3J0KSkge1xuICAgIHRzUGFyc2VJbXBvcnRUeXBlKCk7XG4gIH0gZWxzZSB7XG4gICAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgfVxuICBpZiAoIWhhc1ByZWNlZGluZ0xpbmVCcmVhaygpICYmIG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlQXJndW1lbnRzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUltcG9ydFR5cGUoKSB7XG4gIGV4cGVjdCh0dC5faW1wb3J0KTtcbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG4gIGV4cGVjdCh0dC5zdHJpbmcpO1xuICBleHBlY3QodHQucGFyZW5SKTtcbiAgaWYgKGVhdCh0dC5kb3QpKSB7XG4gICAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgfVxuICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHMoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVBhcmFtZXRlcigpIHtcbiAgZWF0KHR0Ll9jb25zdCk7XG4gIGNvbnN0IGhhZEluID0gZWF0KHR0Ll9pbik7XG4gIGNvbnN0IGhhZE91dCA9IGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX291dCk7XG4gIGVhdCh0dC5fY29uc3QpO1xuICBpZiAoKGhhZEluIHx8IGhhZE91dCkgJiYgIW1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgLy8gVGhlIFwiaW5cIiBvciBcIm91dFwiIGtleXdvcmQgbXVzdCBoYXZlIGFjdHVhbGx5IGJlZW4gdGhlIHR5cGUgcGFyYW1ldGVyXG4gICAgLy8gbmFtZSwgc28gc2V0IGl0IGFzIHRoZSBuYW1lLlxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Lm5hbWU7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIH1cblxuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgaWYgKGVhdCh0dC5lcSkpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKSB7XG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVBhcmFtZXRlcnMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSB8fCBtYXRjaCh0dC50eXBlUGFyYW1ldGVyU3RhcnQpKSB7XG4gICAgbmV4dCgpO1xuICB9IGVsc2Uge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxuXG4gIHdoaWxlICghZWF0KHR0LmdyZWF0ZXJUaGFuKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZVBhcmFtZXRlcigpO1xuICAgIGVhdCh0dC5jb21tYSk7XG4gIH1cbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuLy8gTm90ZTogSW4gVHlwZVNjcmlwdCBpbXBsZW1lbnRhdGlvbiB3ZSBtdXN0IHByb3ZpZGUgYHlpZWxkQ29udGV4dGAgYW5kIGBhd2FpdENvbnRleHRgLFxuLy8gYnV0IGhlcmUgaXQncyBhbHdheXMgZmFsc2UsIGJlY2F1c2UgdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHR5cGVzLlxuZnVuY3Rpb24gdHNGaWxsU2lnbmF0dXJlKHJldHVyblRva2VuKSB7XG4gIC8vIEFycm93IGZucyAqbXVzdCogaGF2ZSByZXR1cm4gdG9rZW4gKGA9PmApLiBOb3JtYWwgZnVuY3Rpb25zIGNhbiBvbWl0IGl0LlxuICBjb25zdCByZXR1cm5Ub2tlblJlcXVpcmVkID0gcmV0dXJuVG9rZW4gPT09IHR0LmFycm93O1xuICB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG4gIC8vIENyZWF0ZSBhIHNjb3BlIGV2ZW4gdGhvdWdoIHdlJ3JlIGRvaW5nIHR5cGUgcGFyc2luZyBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHlcbiAgLy8gdHJlYXQgcGFyYW1zIGFzIHRvcC1sZXZlbCBiaW5kaW5ncy5cbiAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICB0c1BhcnNlQmluZGluZ0xpc3RGb3JTaWduYXR1cmUoZmFsc2UgLyogaXNCbG9ja1Njb3BlICovKTtcbiAgc3RhdGUuc2NvcGVEZXB0aC0tO1xuICBpZiAocmV0dXJuVG9rZW5SZXF1aXJlZCkge1xuICAgIHRzUGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbihyZXR1cm5Ub2tlbik7XG4gIH0gZWxzZSBpZiAobWF0Y2gocmV0dXJuVG9rZW4pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKHJldHVyblRva2VuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlQmluZGluZ0xpc3RGb3JTaWduYXR1cmUoaXNCbG9ja1Njb3BlKSB7XG4gIHBhcnNlQmluZGluZ0xpc3QodHQucGFyZW5SLCBpc0Jsb2NrU2NvcGUpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpIHtcbiAgaWYgKCFlYXQodHQuY29tbWEpKSB7XG4gICAgc2VtaWNvbG9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZVNpZ25hdHVyZU1lbWJlcigpIHtcbiAgdHNGaWxsU2lnbmF0dXJlKHR0LmNvbG9uKTtcbiAgdHNQYXJzZVR5cGVNZW1iZXJTZW1pY29sb24oKTtcbn1cblxuZnVuY3Rpb24gdHNJc1VuYW1iaWd1b3VzbHlJbmRleFNpZ25hdHVyZSgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICBuZXh0KCk7IC8vIFNraXAgJ3snXG4gIGNvbnN0IGlzSW5kZXhTaWduYXR1cmUgPSBlYXQodHQubmFtZSkgJiYgbWF0Y2godHQuY29sb24pO1xuICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgcmV0dXJuIGlzSW5kZXhTaWduYXR1cmU7XG59XG5cbmZ1bmN0aW9uIHRzVHJ5UGFyc2VJbmRleFNpZ25hdHVyZSgpIHtcbiAgaWYgKCEobWF0Y2godHQuYnJhY2tldEwpICYmIHRzSXNVbmFtYmlndW91c2x5SW5kZXhTaWduYXR1cmUoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMCk7XG5cbiAgZXhwZWN0KHR0LmJyYWNrZXRMKTtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIHRzUGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICBleHBlY3QodHQuYnJhY2tldFIpO1xuXG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpO1xuXG4gIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlUHJvcGVydHlPck1ldGhvZFNpZ25hdHVyZShpc1JlYWRvbmx5KSB7XG4gIGVhdCh0dC5xdWVzdGlvbik7XG5cbiAgaWYgKCFpc1JlYWRvbmx5ICYmIChtYXRjaCh0dC5wYXJlbkwpIHx8IG1hdGNoKHR0Lmxlc3NUaGFuKSkpIHtcbiAgICB0c0ZpbGxTaWduYXR1cmUodHQuY29sb24pO1xuICAgIHRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCk7XG4gIH0gZWxzZSB7XG4gICAgdHNUcnlQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gICAgdHNQYXJzZVR5cGVNZW1iZXJTZW1pY29sb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZU1lbWJlcigpIHtcbiAgaWYgKG1hdGNoKHR0LnBhcmVuTCkgfHwgbWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgLy8gY2FsbCBzaWduYXR1cmVcbiAgICB0c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChtYXRjaCh0dC5fbmV3KSkge1xuICAgIG5leHQoKTtcbiAgICBpZiAobWF0Y2godHQucGFyZW5MKSB8fCBtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICAgIC8vIGNvbnN0cnVjdG9yIHNpZ25hdHVyZVxuICAgICAgdHNQYXJzZVNpZ25hdHVyZU1lbWJlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0c1BhcnNlUHJvcGVydHlPck1ldGhvZFNpZ25hdHVyZShmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByZWFkb25seSA9ICEhdHNQYXJzZU1vZGlmaWVyKFtDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHldKTtcblxuICBjb25zdCBmb3VuZCA9IHRzVHJ5UGFyc2VJbmRleFNpZ25hdHVyZSgpO1xuICBpZiAoZm91bmQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKFxuICAgIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2dldCkgfHwgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9zZXQpKSAmJlxuICAgIHRzTmV4dFRva2VuQ2FuRm9sbG93TW9kaWZpZXIoKVxuICApIHtcbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyL3NldHRlciBvbiBhIHR5cGUuIFRoZSB0c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyXG4gICAgLy8gZnVuY3Rpb24gYWxyZWFkeSBjYWxsZWQgbmV4dCgpIGZvciB1cywgc28gY29udGludWUgcGFyc2luZyB0aGUgbmFtZS5cbiAgfVxuICBwYXJzZVByb3BlcnR5TmFtZSgtMSAvKiBUeXBlcyBkb24ndCBuZWVkIGNvbnRleHQgSURzLiAqLyk7XG4gIHRzUGFyc2VQcm9wZXJ0eU9yTWV0aG9kU2lnbmF0dXJlKHJlYWRvbmx5KTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZVR5cGVMaXRlcmFsKCkge1xuICB0c1BhcnNlT2JqZWN0VHlwZU1lbWJlcnMoKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZU9iamVjdFR5cGVNZW1iZXJzKCkge1xuICBleHBlY3QodHQuYnJhY2VMKTtcbiAgd2hpbGUgKCFlYXQodHQuYnJhY2VSKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZU1lbWJlcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzTG9va2FoZWFkSXNTdGFydE9mTWFwcGVkVHlwZSgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICBjb25zdCBpc1N0YXJ0T2ZNYXBwZWRUeXBlID0gdHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCk7XG4gIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gaXNTdGFydE9mTWFwcGVkVHlwZTtcbn1cblxuZnVuY3Rpb24gdHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCkge1xuICBuZXh0KCk7XG4gIGlmIChlYXQodHQucGx1cykgfHwgZWF0KHR0Lm1pbnVzKSkge1xuICAgIHJldHVybiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5KTtcbiAgfVxuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9yZWFkb25seSkpIHtcbiAgICBuZXh0KCk7XG4gIH1cbiAgaWYgKCFtYXRjaCh0dC5icmFja2V0TCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbmV4dCgpO1xuICBpZiAoIXRzSXNJZGVudGlmaWVyKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbmV4dCgpO1xuICByZXR1cm4gbWF0Y2godHQuX2luKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZU1hcHBlZFR5cGVQYXJhbWV0ZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBleHBlY3QodHQuX2luKTtcbiAgdHNQYXJzZVR5cGUoKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZU1hcHBlZFR5cGUoKSB7XG4gIGV4cGVjdCh0dC5icmFjZUwpO1xuICBpZiAobWF0Y2godHQucGx1cykgfHwgbWF0Y2godHQubWludXMpKSB7XG4gICAgbmV4dCgpO1xuICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5KTtcbiAgfSBlbHNlIHtcbiAgICBlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9yZWFkb25seSk7XG4gIH1cbiAgZXhwZWN0KHR0LmJyYWNrZXRMKTtcbiAgdHNQYXJzZU1hcHBlZFR5cGVQYXJhbWV0ZXIoKTtcbiAgaWYgKGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgZXhwZWN0KHR0LmJyYWNrZXRSKTtcbiAgaWYgKG1hdGNoKHR0LnBsdXMpIHx8IG1hdGNoKHR0Lm1pbnVzKSkge1xuICAgIG5leHQoKTtcbiAgICBleHBlY3QodHQucXVlc3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIGVhdCh0dC5xdWVzdGlvbik7XG4gIH1cbiAgdHNUcnlQYXJzZVR5cGUoKTtcbiAgc2VtaWNvbG9uKCk7XG4gIGV4cGVjdCh0dC5icmFjZVIpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHVwbGVUeXBlKCkge1xuICBleHBlY3QodHQuYnJhY2tldEwpO1xuICB3aGlsZSAoIWVhdCh0dC5icmFja2V0UikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgLy8gRG8gbm90IHZhbGlkYXRlIHByZXNlbmNlIG9mIGVpdGhlciBub25lIG9yIG9ubHkgbGFiZWxlZCBlbGVtZW50c1xuICAgIHRzUGFyc2VUdXBsZUVsZW1lbnRUeXBlKCk7XG4gICAgZWF0KHR0LmNvbW1hKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHVwbGVFbGVtZW50VHlwZSgpIHtcbiAgLy8gcGFyc2VzIGAuLi5Uc1R5cGVbXWBcbiAgaWYgKGVhdCh0dC5lbGxpcHNpcykpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIHBhcnNlcyBgVHNUeXBlP2BcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIGVhdCh0dC5xdWVzdGlvbik7XG4gIH1cblxuICAvLyBUaGUgdHlwZSB3ZSBwYXJzZWQgYWJvdmUgd2FzIGFjdHVhbGx5IGEgbGFiZWxcbiAgaWYgKGVhdCh0dC5jb2xvbikpIHtcbiAgICAvLyBMYWJlbGVkIHR1cGxlIHR5cGVzIG11c3QgYWZmaXggdGhlIGxhYmVsIHdpdGggYC4uLmAgb3IgYD9gLCBzbyBubyBuZWVkIHRvIGhhbmRsZSB0aG9zZSBoZXJlXG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlUGFyZW50aGVzaXplZFR5cGUoKSB7XG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICB0c1BhcnNlVHlwZSgpO1xuICBleHBlY3QodHQucGFyZW5SKTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZVRlbXBsYXRlTGl0ZXJhbFR5cGUoKSB7XG4gIC8vIEZpbmlzaCBgLCByZWFkIHF1YXNpXG4gIG5leHRUZW1wbGF0ZVRva2VuKCk7XG4gIC8vIEZpbmlzaCBxdWFzaSwgcmVhZCAke1xuICBuZXh0VGVtcGxhdGVUb2tlbigpO1xuICB3aGlsZSAoIW1hdGNoKHR0LmJhY2tRdW90ZSkgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgZXhwZWN0KHR0LmRvbGxhckJyYWNlTCk7XG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgICAvLyBGaW5pc2ggfSwgcmVhZCBxdWFzaVxuICAgIG5leHRUZW1wbGF0ZVRva2VuKCk7XG4gICAgLy8gRmluaXNoIHF1YXNpLCByZWFkIGVpdGhlciAkeyBvciBgXG4gICAgbmV4dFRlbXBsYXRlVG9rZW4oKTtcbiAgfVxuICBuZXh0KCk7XG59XG5cbnZhciBGdW5jdGlvblR5cGU7IChmdW5jdGlvbiAoRnVuY3Rpb25UeXBlKSB7XG4gIGNvbnN0IFRTRnVuY3Rpb25UeXBlID0gMDsgRnVuY3Rpb25UeXBlW0Z1bmN0aW9uVHlwZVtcIlRTRnVuY3Rpb25UeXBlXCJdID0gVFNGdW5jdGlvblR5cGVdID0gXCJUU0Z1bmN0aW9uVHlwZVwiO1xuICBjb25zdCBUU0NvbnN0cnVjdG9yVHlwZSA9IFRTRnVuY3Rpb25UeXBlICsgMTsgRnVuY3Rpb25UeXBlW0Z1bmN0aW9uVHlwZVtcIlRTQ29uc3RydWN0b3JUeXBlXCJdID0gVFNDb25zdHJ1Y3RvclR5cGVdID0gXCJUU0NvbnN0cnVjdG9yVHlwZVwiO1xuICBjb25zdCBUU0Fic3RyYWN0Q29uc3RydWN0b3JUeXBlID0gVFNDb25zdHJ1Y3RvclR5cGUgKyAxOyBGdW5jdGlvblR5cGVbRnVuY3Rpb25UeXBlW1wiVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZVwiXSA9IFRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGVdID0gXCJUU0Fic3RyYWN0Q29uc3RydWN0b3JUeXBlXCI7XG59KShGdW5jdGlvblR5cGUgfHwgKEZ1bmN0aW9uVHlwZSA9IHt9KSk7XG5cbmZ1bmN0aW9uIHRzUGFyc2VGdW5jdGlvbk9yQ29uc3RydWN0b3JUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IEZ1bmN0aW9uVHlwZS5UU0Fic3RyYWN0Q29uc3RydWN0b3JUeXBlKSB7XG4gICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3QpO1xuICB9XG4gIGlmICh0eXBlID09PSBGdW5jdGlvblR5cGUuVFNDb25zdHJ1Y3RvclR5cGUgfHwgdHlwZSA9PT0gRnVuY3Rpb25UeXBlLlRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGUpIHtcbiAgICBleHBlY3QodHQuX25ldyk7XG4gIH1cbiAgY29uc3Qgb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICBzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBmYWxzZTtcbiAgdHNGaWxsU2lnbmF0dXJlKHR0LmFycm93KTtcbiAgc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlTm9uQXJyYXlUeXBlKCkge1xuICBzd2l0Y2ggKHN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIHR0Lm5hbWU6XG4gICAgICB0c1BhcnNlVHlwZVJlZmVyZW5jZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX3ZvaWQ6XG4gICAgY2FzZSB0dC5fbnVsbDpcbiAgICAgIG5leHQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0LnN0cmluZzpcbiAgICBjYXNlIHR0Lm51bTpcbiAgICBjYXNlIHR0LmJpZ2ludDpcbiAgICBjYXNlIHR0LmRlY2ltYWw6XG4gICAgY2FzZSB0dC5fdHJ1ZTpcbiAgICBjYXNlIHR0Ll9mYWxzZTpcbiAgICAgIHBhcnNlTGl0ZXJhbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQubWludXM6XG4gICAgICBuZXh0KCk7XG4gICAgICBwYXJzZUxpdGVyYWwoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0Ll90aGlzOiB7XG4gICAgICB0c1BhcnNlVGhpc1R5cGVOb2RlKCk7XG4gICAgICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pcykgJiYgIWhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKSB7XG4gICAgICAgIHRzUGFyc2VUaGlzVHlwZVByZWRpY2F0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYXNlIHR0Ll90eXBlb2Y6XG4gICAgICB0c1BhcnNlVHlwZVF1ZXJ5KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSB0dC5faW1wb3J0OlxuICAgICAgdHNQYXJzZUltcG9ydFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0LmJyYWNlTDpcbiAgICAgIGlmICh0c0xvb2thaGVhZElzU3RhcnRPZk1hcHBlZFR5cGUoKSkge1xuICAgICAgICB0c1BhcnNlTWFwcGVkVHlwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHNQYXJzZVR5cGVMaXRlcmFsKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSB0dC5icmFja2V0TDpcbiAgICAgIHRzUGFyc2VUdXBsZVR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0LnBhcmVuTDpcbiAgICAgIHRzUGFyc2VQYXJlbnRoZXNpemVkVHlwZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuYmFja1F1b3RlOlxuICAgICAgdHNQYXJzZVRlbXBsYXRlTGl0ZXJhbFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfS0VZV09SRCkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Lm5hbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdW5leHBlY3RlZCgpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlQXJyYXlUeXBlT3JIaWdoZXIoKSB7XG4gIHRzUGFyc2VOb25BcnJheVR5cGUoKTtcbiAgd2hpbGUgKCFoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSAmJiBlYXQodHQuYnJhY2tldEwpKSB7XG4gICAgaWYgKCFlYXQodHQuYnJhY2tldFIpKSB7XG4gICAgICAvLyBJZiB3ZSBoaXQgXSBpbW1lZGlhdGVseSwgdGhpcyBpcyBhbiBhcnJheSB0eXBlLCBvdGhlcndpc2UgaXQncyBhbiBpbmRleGVkIGFjY2VzcyB0eXBlLlxuICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbmZlclR5cGUoKSB7XG4gIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2luZmVyKTtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmIChtYXRjaCh0dC5fZXh0ZW5kcykpIHtcbiAgICAvLyBJbmZlciB0eXBlIGNvbnN0cmFpbnRzIGludHJvZHVjZSBhbiBhbWJpZ3VpdHkgYWJvdXQgd2hldGhlciB0aGUgXCJleHRlbmRzXCJcbiAgICAvLyBpcyBhIGNvbnN0cmFpbnQgZm9yIHRoaXMgaW5mZXIgdHlwZSBvciBpcyBhbm90aGVyIGNvbmRpdGlvbmFsIHR5cGUuXG4gICAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICAgIGV4cGVjdCh0dC5fZXh0ZW5kcyk7XG4gICAgY29uc3Qgb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICAgIHN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IHRydWU7XG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgICBzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG4gICAgaWYgKHN0YXRlLmVycm9yIHx8ICghc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ICYmIG1hdGNoKHR0LnF1ZXN0aW9uKSkpIHtcbiAgICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZU9wZXJhdG9yT3JIaWdoZXIoKSB7XG4gIGlmIChcbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2tleW9mKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdW5pcXVlKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHkpXG4gICkge1xuICAgIG5leHQoKTtcbiAgICB0c1BhcnNlVHlwZU9wZXJhdG9yT3JIaWdoZXIoKTtcbiAgfSBlbHNlIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2luZmVyKSkge1xuICAgIHRzUGFyc2VJbmZlclR5cGUoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG4gICAgc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gZmFsc2U7XG4gICAgdHNQYXJzZUFycmF5VHlwZU9ySGlnaGVyKCk7XG4gICAgc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbnRlcnNlY3Rpb25UeXBlT3JIaWdoZXIoKSB7XG4gIGVhdCh0dC5iaXR3aXNlQU5EKTtcbiAgdHNQYXJzZVR5cGVPcGVyYXRvck9ySGlnaGVyKCk7XG4gIGlmIChtYXRjaCh0dC5iaXR3aXNlQU5EKSkge1xuICAgIHdoaWxlIChlYXQodHQuYml0d2lzZUFORCkpIHtcbiAgICAgIHRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVW5pb25UeXBlT3JIaWdoZXIoKSB7XG4gIGVhdCh0dC5iaXR3aXNlT1IpO1xuICB0c1BhcnNlSW50ZXJzZWN0aW9uVHlwZU9ySGlnaGVyKCk7XG4gIGlmIChtYXRjaCh0dC5iaXR3aXNlT1IpKSB7XG4gICAgd2hpbGUgKGVhdCh0dC5iaXR3aXNlT1IpKSB7XG4gICAgICB0c1BhcnNlSW50ZXJzZWN0aW9uVHlwZU9ySGlnaGVyKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzSXNTdGFydE9mRnVuY3Rpb25UeXBlKCkge1xuICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG1hdGNoKHR0LnBhcmVuTCkgJiYgdHNMb29rYWhlYWRJc1VuYW1iaWd1b3VzbHlTdGFydE9mRnVuY3Rpb25UeXBlKCk7XG59XG5cbmZ1bmN0aW9uIHRzU2tpcFBhcmFtZXRlclN0YXJ0KCkge1xuICBpZiAobWF0Y2godHQubmFtZSkgfHwgbWF0Y2godHQuX3RoaXMpKSB7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElmIHRoaXMgaXMgYSBwb3NzaWJsZSBhcnJheS9vYmplY3QgZGVzdHJ1Y3R1cmUsIHdhbGsgdG8gdGhlIG1hdGNoaW5nIGJyYWNrZXQvYnJhY2UuXG4gIC8vIFRoZSBuZXh0IHRva2VuIGFmdGVyIHdpbGwgdGVsbCB1cyBkZWZpbml0aXZlbHkgd2hldGhlciB0aGlzIGlzIGEgZnVuY3Rpb24gcGFyYW0uXG4gIGlmIChtYXRjaCh0dC5icmFjZUwpIHx8IG1hdGNoKHR0LmJyYWNrZXRMKSkge1xuICAgIGxldCBkZXB0aCA9IDE7XG4gICAgbmV4dCgpO1xuICAgIHdoaWxlIChkZXB0aCA+IDAgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgICBpZiAobWF0Y2godHQuYnJhY2VMKSB8fCBtYXRjaCh0dC5icmFja2V0TCkpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2godHQuYnJhY2VSKSB8fCBtYXRjaCh0dC5icmFja2V0UikpIHtcbiAgICAgICAgZGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0c0xvb2thaGVhZElzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUoKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgY29uc3QgaXNVbmFtYmlndW91c2x5U3RhcnRPZkZ1bmN0aW9uVHlwZSA9IHRzSXNVbmFtYmlndW91c2x5U3RhcnRPZkZ1bmN0aW9uVHlwZSgpO1xuICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgcmV0dXJuIGlzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGU7XG59XG5cbmZ1bmN0aW9uIHRzSXNVbmFtYmlndW91c2x5U3RhcnRPZkZ1bmN0aW9uVHlwZSgpIHtcbiAgbmV4dCgpO1xuICBpZiAobWF0Y2godHQucGFyZW5SKSB8fCBtYXRjaCh0dC5lbGxpcHNpcykpIHtcbiAgICAvLyAoIClcbiAgICAvLyAoIC4uLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0c1NraXBQYXJhbWV0ZXJTdGFydCgpKSB7XG4gICAgaWYgKG1hdGNoKHR0LmNvbG9uKSB8fCBtYXRjaCh0dC5jb21tYSkgfHwgbWF0Y2godHQucXVlc3Rpb24pIHx8IG1hdGNoKHR0LmVxKSkge1xuICAgICAgLy8gKCB4eHggOlxuICAgICAgLy8gKCB4eHggLFxuICAgICAgLy8gKCB4eHggP1xuICAgICAgLy8gKCB4eHggPVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChtYXRjaCh0dC5wYXJlblIpKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAobWF0Y2godHQuYXJyb3cpKSB7XG4gICAgICAgIC8vICggeHh4ICkgPT5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKHJldHVyblRva2VuKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgZXhwZWN0KHJldHVyblRva2VuKTtcbiAgY29uc3QgZmluaXNoZWRSZXR1cm4gPSB0c1BhcnNlVHlwZVByZWRpY2F0ZU9yQXNzZXJ0c1ByZWZpeCgpO1xuICBpZiAoIWZpbmlzaGVkUmV0dXJuKSB7XG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgfVxuICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiB0c1RyeVBhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oKSB7XG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24odHQuY29sb24pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKSB7XG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1RyeVBhcnNlVHlwZSgpIHtcbiAgaWYgKGVhdCh0dC5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IGEgZmV3IHNwZWNpYWwgcmV0dXJuIHN5bnRheCBjYXNlczogYHggaXMgVGAsIGBhc3NlcnRzIHhgLCBgYXNzZXJ0cyB4IGlzIFRgLFxuICogYGFzc2VydHMgdGhpcyBpcyBUYC5cbiAqXG4gKiBSZXR1cm5zIHRydWUgaWYgd2UgcGFyc2VkIHRoZSByZXR1cm4gdHlwZSwgZmFsc2UgaWYgdGhlcmUncyBzdGlsbCBhIHR5cGUgdG8gYmUgcGFyc2VkLlxuICovXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVByZWRpY2F0ZU9yQXNzZXJ0c1ByZWZpeCgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnRzKSkge1xuICAgIC8vIE5vcm1hbGx5IHRoaXMgaXMgYGFzc2VydHMgeCBpcyBUYCwgYnV0IGF0IHRoaXMgcG9pbnQsIGl0IG1pZ2h0IGJlIGBhc3NlcnRzIGlzIFRgIChhIHVzZXItXG4gICAgLy8gZGVmaW5lZCB0eXBlIGd1YXJkIG9uIHRoZSBgYXNzZXJ0c2AgdmFyaWFibGUpIG9yIGp1c3QgYSB0eXBlIGNhbGxlZCBgYXNzZXJ0c2AuXG4gICAgbmV4dCgpO1xuICAgIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pcykpIHtcbiAgICAgIC8vIElmIHdlIHNlZSBgYXNzZXJ0cyBpc2AsIHRoZW4gdGhpcyBtdXN0IGJlIG9mIHRoZSBmb3JtIGBhc3NlcnRzIGlzIFRgLCBzaW5jZVxuICAgICAgLy8gYGFzc2VydHMgaXMgaXMgVGAgaXNuJ3QgdmFsaWQuXG4gICAgICB0c1BhcnNlVHlwZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0c0lzSWRlbnRpZmllcigpIHx8IG1hdGNoKHR0Ll90aGlzKSkge1xuICAgICAgbmV4dCgpO1xuICAgICAgaWYgKGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2lzKSkge1xuICAgICAgICAvLyBJZiB3ZSBzZWUgYGlzYCwgdGhlbiB0aGlzIGlzIGBhc3NlcnRzIHggaXMgVGAuIE90aGVyd2lzZSwgaXQncyBgYXNzZXJ0cyB4YC5cbiAgICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWd1bGFyIHR5cGUsIHNvIGJhaWwgb3V0IGFuZCBzdGFydCB0eXBlIHBhcnNpbmcgZnJvbSBzY3JhdGNoLlxuICAgICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRzSXNJZGVudGlmaWVyKCkgfHwgbWF0Y2godHQuX3RoaXMpKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgaWRlbnRpZmllciwgd2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZSBcImlzXCIgYWZ0ZXIgaXQuXG4gICAgbmV4dCgpO1xuICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2lzKSAmJiAhaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkpIHtcbiAgICAgIG5leHQoKTtcbiAgICAgIHRzUGFyc2VUeXBlKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVndWxhciB0eXBlLCBzbyBiYWlsIG91dCBhbmQgc3RhcnQgdHlwZSBwYXJzaW5nIGZyb20gc2NyYXRjaC5cbiAgICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1BhcnNlVHlwZUFubm90YXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgZXhwZWN0KHR0LmNvbG9uKTtcbiAgdHNQYXJzZVR5cGUoKTtcbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VUeXBlKCkge1xuICB0c1BhcnNlTm9uQ29uZGl0aW9uYWxUeXBlKCk7XG4gIGlmIChzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgfHwgaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkgfHwgIWVhdCh0dC5fZXh0ZW5kcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gZXh0ZW5kcyB0eXBlXG4gIGNvbnN0IG9sZEluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IHN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dDtcbiAgc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gdHJ1ZTtcbiAgdHNQYXJzZU5vbkNvbmRpdGlvbmFsVHlwZSgpO1xuICBzdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG5cbiAgZXhwZWN0KHR0LnF1ZXN0aW9uKTtcbiAgLy8gdHJ1ZSB0eXBlXG4gIHRzUGFyc2VUeXBlKCk7XG4gIGV4cGVjdCh0dC5jb2xvbik7XG4gIC8vIGZhbHNlIHR5cGVcbiAgdHNQYXJzZVR5cGUoKTtcbn1cblxuZnVuY3Rpb24gaXNBYnN0cmFjdENvbnN0cnVjdG9yU2lnbmF0dXJlKCkge1xuICByZXR1cm4gaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5fbmV3O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZU5vbkNvbmRpdGlvbmFsVHlwZSgpIHtcbiAgaWYgKHRzSXNTdGFydE9mRnVuY3Rpb25UeXBlKCkpIHtcbiAgICB0c1BhcnNlRnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZShGdW5jdGlvblR5cGUuVFNGdW5jdGlvblR5cGUpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobWF0Y2godHQuX25ldykpIHtcbiAgICAvLyBBcyBpbiBgbmV3ICgpID0+IERhdGVgXG4gICAgdHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoRnVuY3Rpb25UeXBlLlRTQ29uc3RydWN0b3JUeXBlKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoaXNBYnN0cmFjdENvbnN0cnVjdG9yU2lnbmF0dXJlKCkpIHtcbiAgICAvLyBBcyBpbiBgYWJzdHJhY3QgbmV3ICgpID0+IERhdGVgXG4gICAgdHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoRnVuY3Rpb25UeXBlLlRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGUpO1xuICAgIHJldHVybjtcbiAgfVxuICB0c1BhcnNlVW5pb25UeXBlT3JIaWdoZXIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VUeXBlQXNzZXJ0aW9uKCkge1xuICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMSk7XG4gIHRzUGFyc2VUeXBlKCk7XG4gIGV4cGVjdCh0dC5ncmVhdGVyVGhhbik7XG4gIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIHBhcnNlTWF5YmVVbmFyeSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNUcnlQYXJzZUpTWFR5cGVBcmd1bWVudCgpIHtcbiAgaWYgKGVhdCh0dC5qc3hUYWdTdGFydCkpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgIHdoaWxlICghbWF0Y2godHQuZ3JlYXRlclRoYW4pICYmICFzdGF0ZS5lcnJvcikge1xuICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIGVhdCh0dC5jb21tYSk7XG4gICAgfVxuICAgIC8vIFByb2Nlc3MgPiwgYnV0IHRoZSBvbmUgYWZ0ZXIgbmVlZHMgdG8gYmUgcGFyc2VkIEpTWC1zdHlsZS5cbiAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VIZXJpdGFnZUNsYXVzZSgpIHtcbiAgd2hpbGUgKCFtYXRjaCh0dC5icmFjZUwpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIHRzUGFyc2VFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMoKTtcbiAgICBlYXQodHQuY29tbWEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMoKSB7XG4gIC8vIE5vdGU6IFRTIHVzZXMgcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uT3JIaWdoZXIsXG4gIC8vIHRoZW4gaGFzIGdyYW1tYXIgZXJyb3JzIGxhdGVyIGlmIGl0J3Mgbm90IGFuIEVudGl0eU5hbWUuXG4gIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbigpIHtcbiAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihmYWxzZSk7XG4gIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIHRzUGFyc2VIZXJpdGFnZUNsYXVzZSgpO1xuICB9XG4gIHRzUGFyc2VPYmplY3RUeXBlTWVtYmVycygpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZUFsaWFzRGVjbGFyYXRpb24oKSB7XG4gIHBhcnNlQmluZGluZ0lkZW50aWZpZXIoZmFsc2UpO1xuICB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgZXhwZWN0KHR0LmVxKTtcbiAgdHNQYXJzZVR5cGUoKTtcbiAgc2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VFbnVtTWVtYmVyKCkge1xuICAvLyBDb21wdXRlZCBwcm9wZXJ0eSBuYW1lcyBhcmUgZ3JhbW1hciBlcnJvcnMgaW4gYW4gZW51bSwgc28gYWNjZXB0IGp1c3Qgc3RyaW5nIGxpdGVyYWwgb3IgaWRlbnRpZmllci5cbiAgaWYgKG1hdGNoKHR0LnN0cmluZykpIHtcbiAgICBwYXJzZUxpdGVyYWwoKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxuICBpZiAoZWF0KHR0LmVxKSkge1xuICAgIGNvbnN0IGVxSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gICAgc3RhdGUudG9rZW5zW2VxSW5kZXhdLnJoc0VuZEluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCkge1xuICBwYXJzZUJpbmRpbmdJZGVudGlmaWVyKGZhbHNlKTtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gIHdoaWxlICghZWF0KHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgdHNQYXJzZUVudW1NZW1iZXIoKTtcbiAgICBlYXQodHQuY29tbWEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVCbG9jaygpIHtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gIHBhcnNlQmxvY2tCb2R5KC8qIGVuZCAqLyB0dC5icmFjZVIpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbigpIHtcbiAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihmYWxzZSk7XG4gIGlmIChlYXQodHQuZG90KSkge1xuICAgIHRzUGFyc2VNb2R1bGVPck5hbWVzcGFjZURlY2xhcmF0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgdHNQYXJzZU1vZHVsZUJsb2NrKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUFtYmllbnRFeHRlcm5hbE1vZHVsZURlY2xhcmF0aW9uKCkge1xuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwpKSB7XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICB1bmV4cGVjdGVkKCk7XG4gIH1cblxuICBpZiAobWF0Y2godHQuYnJhY2VMKSkge1xuICAgIHRzUGFyc2VNb2R1bGVCbG9jaygpO1xuICB9IGVsc2Uge1xuICAgIHNlbWljb2xvbigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24oKSB7XG4gIHBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyKCk7XG4gIGV4cGVjdCh0dC5lcSk7XG4gIHRzUGFyc2VNb2R1bGVSZWZlcmVuY2UoKTtcbiAgc2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIHRzSXNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpIHtcbiAgcmV0dXJuIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fcmVxdWlyZSkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5wYXJlbkw7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVSZWZlcmVuY2UoKSB7XG4gIGlmICh0c0lzRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UoKSkge1xuICAgIHRzUGFyc2VFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpO1xuICB9IGVsc2Uge1xuICAgIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUV4dGVybmFsTW9kdWxlUmVmZXJlbmNlKCkge1xuICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9yZXF1aXJlKTtcbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG4gIGlmICghbWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxuICBwYXJzZUxpdGVyYWwoKTtcbiAgZXhwZWN0KHR0LnBhcmVuUik7XG59XG5cbi8vIFV0aWxpdGllc1xuXG4vLyBSZXR1cm5zIHRydWUgaWYgYSBzdGF0ZW1lbnQgbWF0Y2hlZC5cbmZ1bmN0aW9uIHRzVHJ5UGFyc2VEZWNsYXJlKCkge1xuICBpZiAoaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUudHlwZSkge1xuICAgIGNhc2UgdHQuX2Z1bmN0aW9uOiB7XG4gICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMSk7XG4gICAgICBuZXh0KCk7XG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHByZWNpc2VseSBnZXQgdGhlIGZ1bmN0aW9uIHN0YXJ0IGhlcmUsIHNpbmNlIGl0J3Mgb25seSB1c2VkIHRvIG1hcmtcbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBhcyBhIHR5cGUgaWYgaXQncyBib2RpbGVzcywgYW5kIGl0J3MgYWxyZWFkeSBhIHR5cGUgaGVyZS5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgLyogaXNTdGF0ZW1lbnQgKi8gdHJ1ZSk7XG4gICAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgdHQuX2NsYXNzOiB7XG4gICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMSk7XG4gICAgICBwYXJzZUNsYXNzKC8qIGlzU3RhdGVtZW50ICovIHRydWUsIC8qIG9wdGlvbmFsSWQgKi8gZmFsc2UpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXNlIHR0Ll9jb25zdDoge1xuICAgICAgaWYgKG1hdGNoKHR0Ll9jb25zdCkgJiYgaXNMb29rYWhlYWRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9lbnVtKSkge1xuICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMSk7XG4gICAgICAgIC8vIGBjb25zdCBlbnVtID0gMDtgIG5vdCBhbGxvd2VkIGJlY2F1c2UgXCJlbnVtXCIgaXMgYSBzdHJpY3QgbW9kZSByZXNlcnZlZCB3b3JkLlxuICAgICAgICBleHBlY3QodHQuX2NvbnN0KTtcbiAgICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZW51bSk7XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9lbnVtO1xuICAgICAgICB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgY2FzZSB0dC5fdmFyOlxuICAgIGNhc2UgdHQuX2xldDoge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgICAgcGFyc2VWYXJTdGF0ZW1lbnQoc3RhdGUudHlwZSAhPT0gdHQuX3Zhcik7XG4gICAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgdHQubmFtZToge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgICAgY29uc3QgY29udGV4dHVhbEtleXdvcmQgPSBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZDtcbiAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG4gICAgICBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwpIHtcbiAgICAgICAgdHNQYXJzZUFtYmllbnRFeHRlcm5hbE1vZHVsZURlY2xhcmF0aW9uKCk7XG4gICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF0Y2hlZCA9IHRzUGFyc2VEZWNsYXJhdGlvbihjb250ZXh0dWFsS2V5d29yZCwgLyogaXNCZWZvcmVUb2tlbiAqLyB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBOb3RlOiB0aGlzIHdvbid0IGJlIGNhbGxlZCB1bmxlc3MgdGhlIGtleXdvcmQgaXMgYWxsb3dlZCBpbiBgc2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbmAuXG4vLyBSZXR1cm5zIHRydWUgaWYgaXQgbWF0Y2hlZCBhIGRlY2xhcmF0aW9uLlxuZnVuY3Rpb24gdHNUcnlQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICByZXR1cm4gdHNQYXJzZURlY2xhcmF0aW9uKHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkLCAvKiBpc0JlZm9yZVRva2VuICovIHRydWUpO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgaXQgbWF0Y2hlZCBhIHN0YXRlbWVudC5cbmZ1bmN0aW9uIHRzUGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGNvbnRleHR1YWxLZXl3b3JkKSB7XG4gIHN3aXRjaCAoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlOiB7XG4gICAgICBjb25zdCBkZWNsYXJlVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IHRzVHJ5UGFyc2VEZWNsYXJlKCk7XG4gICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICBzdGF0ZS50b2tlbnNbZGVjbGFyZVRva2VuSW5kZXhdLnR5cGUgPSB0dC5fZGVjbGFyZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fZ2xvYmFsOlxuICAgICAgLy8gYGdsb2JhbCB7IH1gICh3aXRoIG5vIGBkZWNsYXJlYCkgbWF5IGFwcGVhciBpbnNpZGUgYW4gYW1iaWVudCBtb2R1bGUgZGVjbGFyYXRpb24uXG4gICAgICAvLyBXb3VsZCBsaWtlIHRvIHVzZSB0c1BhcnNlQW1iaWVudEV4dGVybmFsTW9kdWxlRGVjbGFyYXRpb24gaGVyZSwgYnV0IGFscmVhZHkgcmFuIHBhc3QgXCJnbG9iYWxcIi5cbiAgICAgIGlmIChtYXRjaCh0dC5icmFjZUwpKSB7XG4gICAgICAgIHRzUGFyc2VNb2R1bGVCbG9jaygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0c1BhcnNlRGVjbGFyYXRpb24oY29udGV4dHVhbEtleXdvcmQsIC8qIGlzQmVmb3JlVG9rZW4gKi8gZmFsc2UpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb21tb24gY29kZSBmb3IgcGFyc2luZyBhIGRlY2xhcmF0aW9uLlxuICpcbiAqIGlzQmVmb3JlVG9rZW4gaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgcGFyc2VyIHN0YXRlIGlzIGF0IHRoZSBjb250ZXh0dWFsXG4gKiBrZXl3b3JkIChhbmQgdGhhdCBpdCBpcyBub3QgeWV0IGVtaXR0ZWQpIHJhdGhlciB0aGFuIHJlYWRpbmcgdGhlIHRva2VuIGFmdGVyXG4gKiBpdC4gV2hlbiBpc0JlZm9yZVRva2VuIGlzIHRydWUsIHdlIG1heSBiZSBwcmVjZWRlZCBieSBhbiBgZXhwb3J0YCB0b2tlbiBhbmRcbiAqIHNob3VsZCBpbmNsdWRlIHRoYXQgdG9rZW4gaW4gYSB0eXBlIGNvbnRleHQgd2UgY3JlYXRlLCBlLmcuIHRvIGhhbmRsZVxuICogYGV4cG9ydCBpbnRlcmZhY2VgIG9yIGBleHBvcnQgdHlwZWAuIChUaGlzIGlzIGEgYml0IG9mIGEgaGFjayBhbmQgc2hvdWxkIGJlXG4gKiBjbGVhbmVkIHVwIGF0IHNvbWUgcG9pbnQuKVxuICpcbiAqIFJldHVybnMgdHJ1ZSBpZiBpdCBtYXRjaGVkIGEgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRzUGFyc2VEZWNsYXJhdGlvbihjb250ZXh0dWFsS2V5d29yZCwgaXNCZWZvcmVUb2tlbikge1xuICBzd2l0Y2ggKGNvbnRleHR1YWxLZXl3b3JkKSB7XG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3Q6XG4gICAgICBpZiAodHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pICYmIG1hdGNoKHR0Ll9jbGFzcykpIHtcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2Fic3RyYWN0O1xuICAgICAgICBwYXJzZUNsYXNzKC8qIGlzU3RhdGVtZW50ICovIHRydWUsIC8qIG9wdGlvbmFsSWQgKi8gZmFsc2UpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fZW51bTpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikgJiYgbWF0Y2godHQubmFtZSkpIHtcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2VudW07XG4gICAgICAgIHRzUGFyc2VFbnVtRGVjbGFyYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZTpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikgJiYgbWF0Y2godHQubmFtZSkpIHtcbiAgICAgICAgLy8gYG5leHRgIGlzIHRydWUgaW4gXCJleHBvcnRcIiBhbmQgXCJkZWNsYXJlXCIgY29udGV4dHMsIHNvIHdlIHdhbnQgdG8gcmVtb3ZlIHRoYXQgdG9rZW5cbiAgICAgICAgLy8gYXMgd2VsbC5cbiAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KGlzQmVmb3JlVG9rZW4gPyAyIDogMSk7XG4gICAgICAgIHRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbigpO1xuICAgICAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlOlxuICAgICAgaWYgKHRzQ2hlY2tMaW5lVGVybWluYXRvcihpc0JlZm9yZVRva2VuKSkge1xuICAgICAgICBpZiAobWF0Y2godHQuc3RyaW5nKSkge1xuICAgICAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dChpc0JlZm9yZVRva2VuID8gMiA6IDEpO1xuICAgICAgICAgIHRzUGFyc2VBbWJpZW50RXh0ZXJuYWxNb2R1bGVEZWNsYXJhdGlvbigpO1xuICAgICAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgICB0c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbigpO1xuICAgICAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlOlxuICAgICAgaWYgKHRzQ2hlY2tMaW5lVGVybWluYXRvcihpc0JlZm9yZVRva2VuKSAmJiBtYXRjaCh0dC5uYW1lKSkge1xuICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgdHNQYXJzZU1vZHVsZU9yTmFtZXNwYWNlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX3R5cGU6XG4gICAgICBpZiAodHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pICYmIG1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dChpc0JlZm9yZVRva2VuID8gMiA6IDEpO1xuICAgICAgICB0c1BhcnNlVHlwZUFsaWFzRGVjbGFyYXRpb24oKTtcbiAgICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHRzQ2hlY2tMaW5lVGVybWluYXRvcihpc0JlZm9yZVRva2VuKSB7XG4gIGlmIChpc0JlZm9yZVRva2VuKSB7XG4gICAgLy8gQmFiZWwgY2hlY2tzIGhhc0ZvbGxvd2luZ0xpbmVCcmVhayBoZXJlIGFuZCByZXR1cm5zIGZhbHNlLCBidXQgdGhpc1xuICAgIC8vIGRvZXNuJ3QgYWN0dWFsbHkgY29tZSB1cCwgZS5nLiBgZXhwb3J0IGludGVyZmFjZWAgY2FuIG5ldmVyIGJlIG9uIGl0cyBvd25cbiAgICAvLyBsaW5lIGluIHZhbGlkIGNvZGUuXG4gICAgbmV4dCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAhaXNMaW5lVGVybWluYXRvcigpO1xuICB9XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYSBnZW5lcmljIGFzeW5jIGFycm93IGZ1bmN0aW9uLlxuZnVuY3Rpb24gdHNUcnlQYXJzZUdlbmVyaWNBc3luY0Fycm93RnVuY3Rpb24oKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcblxuICB0c1BhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICB0c1RyeVBhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oKTtcbiAgZXhwZWN0KHR0LmFycm93KTtcblxuICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwYXJzZUZ1bmN0aW9uQm9keSh0cnVlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogSWYgbmVjZXNzYXJ5LCBoYWNrIHRoZSB0b2tlbml6ZXIgc3RhdGUgc28gdGhhdCB0aGlzIGJpdHNoaWZ0IHdhcyBhY3R1YWxseSBhXG4gKiBsZXNzLXRoYW4gdG9rZW4sIHRoZW4ga2VlcCBwYXJzaW5nLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gc2l0dWF0aW9uc1xuICogd2hlcmUgd2UgcmVzdG9yZSBmcm9tIHNuYXBzaG90IG9uIGVycm9yICh3aGljaCByZXZlcnRzIHRoaXMgY2hhbmdlKSBvclxuICogd2hlcmUgYml0c2hpZnQgd291bGQgYmUgaWxsZWdhbCBhbnl3YXkgKGUuZy4gaW4gYSBjbGFzcyBcImV4dGVuZHNcIiBjbGF1c2UpLlxuICpcbiAqIFRoaXMgaGFjayBpcyB1c2VmdWwgdG8gaGFuZGxlIHNpdHVhdGlvbnMgbGlrZSBmb288PFQ+KCkgPT4gdm9pZD4oKSB3aGVyZVxuICogdGhlcmUgY2FuIGxlZ2l0aW1hdGVseSBiZSB0d28gb3Blbi1hbmdsZS1icmFja2V0cyBpbiBhIHJvdyBpbiBUUy5cbiAqL1xuZnVuY3Rpb24gdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpIHtcbiAgaWYgKHN0YXRlLnR5cGUgPT09IHR0LmJpdFNoaWZ0TCkge1xuICAgIHN0YXRlLnBvcyAtPSAxO1xuICAgIGZpbmlzaFRva2VuKHR0Lmxlc3NUaGFuKTtcbiAgfVxuICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZUFyZ3VtZW50cygpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICBleHBlY3QodHQubGVzc1RoYW4pO1xuICB3aGlsZSAoIW1hdGNoKHR0LmdyZWF0ZXJUaGFuKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIGVhdCh0dC5jb21tYSk7XG4gIH1cbiAgaWYgKCFvbGRJc1R5cGUpIHtcbiAgICAvLyBJZiB0aGUgdHlwZSBhcmd1bWVudHMgYXJlIHByZXNlbnQgaW4gYW4gZXhwcmVzc2lvbiBjb250ZXh0LCBlLmcuXG4gICAgLy8gZjxudW1iZXI+KCksIHRoZW4gdGhlID4gc2lnbiBzaG91bGQgYmUgdG9rZW5pemVkIGFzIGEgbm9uLXR5cGUgdG9rZW4uXG4gICAgLy8gSW4gcGFydGljdWxhciwgZihhIDwgYiwgYyA+PSBkKSBzaG91bGQgcGFyc2UgdGhlID49IGFzIGEgc2luZ2xlIHRva2VuLFxuICAgIC8vIHJlc3VsdGluZyBpbiBhIHN5bnRheCBlcnJvciBhbmQgZmFsbGJhY2sgdG8gdGhlIG5vbi10eXBlLWFyZ3NcbiAgICAvLyBpbnRlcnByZXRhdGlvbi4gSW4gdGhlIHN1Y2Nlc3MgY2FzZSwgZXZlbiB0aG91Z2ggdGhlID4gaXMgdG9rZW5pemVkIGFzIGFcbiAgICAvLyBub24tdHlwZSB0b2tlbiwgaXQgc3RpbGwgbXVzdCBiZSBtYXJrZWQgYXMgYSB0eXBlIHRva2VuIHNvIHRoYXQgaXQgaXNcbiAgICAvLyBlcmFzZWQuXG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICByZXNjYW5fZ3QoKTtcbiAgICBleHBlY3QodHQuZ3JlYXRlclRoYW4pO1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaXNUeXBlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBleHBlY3QodHQuZ3JlYXRlclRoYW4pO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzSXNEZWNsYXJhdGlvblN0YXJ0KCkge1xuICBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICBzd2l0Y2ggKHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkKSB7XG4gICAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgIGNhc2UgQ29udGV4dHVhbEtleXdvcmQuX2RlY2xhcmU6XG4gICAgICBjYXNlIENvbnRleHR1YWxLZXl3b3JkLl9lbnVtOlxuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlOlxuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlOlxuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlOlxuICAgICAgY2FzZSBDb250ZXh0dWFsS2V5d29yZC5fdHlwZTpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT1ZFUlJJREVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2goZnVuY3Rpb25TdGFydCwgZnVuY0NvbnRleHRJZCkge1xuICAvLyBGb3IgYXJyb3cgZnVuY3Rpb25zLCBgcGFyc2VBcnJvd2AgaGFuZGxlcyB0aGUgcmV0dXJuIHR5cGUgaXRzZWxmLlxuICBpZiAobWF0Y2godHQuY29sb24pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKHR0LmNvbG9uKTtcbiAgfVxuXG4gIC8vIFRoZSBvcmlnaW5hbCBjb2RlIGNoZWNrZWQgdGhlIG5vZGUgdHlwZSB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiB0eXBlIGFsbG93cyBhIG1pc3NpbmdcbiAgLy8gYm9keSwgYnV0IHdlIHNraXAgdGhhdCB0byBhdm9pZCBzZW5kaW5nIGFyb3VuZCB0aGUgbm9kZSB0eXBlLiBXZSBpbnN0ZWFkIGp1c3QgdXNlIHRoZVxuICAvLyBhbGxvd0V4cHJlc3Npb25Cb2R5IGJvb2xlYW4gdG8gbWFrZSBzdXJlIGl0J3Mgbm90IGFuIGFycm93IGZ1bmN0aW9uLlxuICBpZiAoIW1hdGNoKHR0LmJyYWNlTCkgJiYgaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgLy8gUmV0cm9hY3RpdmVseSBtYXJrIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhcyBhIHR5cGUuXG4gICAgbGV0IGkgPSBzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoXG4gICAgICBpID49IDAgJiZcbiAgICAgIChzdGF0ZS50b2tlbnNbaV0uc3RhcnQgPj0gZnVuY3Rpb25TdGFydCB8fFxuICAgICAgICBzdGF0ZS50b2tlbnNbaV0udHlwZSA9PT0gdHQuX2RlZmF1bHQgfHxcbiAgICAgICAgc3RhdGUudG9rZW5zW2ldLnR5cGUgPT09IHR0Ll9leHBvcnQpXG4gICAgKSB7XG4gICAgICBzdGF0ZS50b2tlbnNbaV0uaXNUeXBlID0gdHJ1ZTtcbiAgICAgIGktLTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcGFyc2VGdW5jdGlvbkJvZHkoZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZVN1YnNjcmlwdChcbiAgc3RhcnRUb2tlbkluZGV4LFxuICBub0NhbGxzLFxuICBzdG9wU3RhdGUsXG4pIHtcbiAgaWYgKCFoYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSAmJiBlYXQodHQuYmFuZykpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5ub25OdWxsQXNzZXJ0aW9uO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikgfHwgbWF0Y2godHQuYml0U2hpZnRMKSkge1xuICAgIC8vIFRoZXJlIGFyZSBudW1iZXIgb2YgdGhpbmdzIHdlIGFyZSBnb2luZyB0byBcIm1heWJlXCIgcGFyc2UsIGxpa2UgdHlwZSBhcmd1bWVudHMgb25cbiAgICAvLyB0YWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvbnMuIElmIGFueSBvZiB0aGVtIGZhaWwsIHdhbGsgaXQgYmFjayBhbmQgY29udGludWUuXG4gICAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuXG4gICAgaWYgKCFub0NhbGxzICYmIGF0UG9zc2libGVBc3luYygpKSB7XG4gICAgICAvLyBBbG1vc3QgY2VydGFpbmx5IHRoaXMgaXMgYSBnZW5lcmljIGFzeW5jIGZ1bmN0aW9uIGBhc3luYyA8VD4oKSA9PiAuLi5cbiAgICAgIC8vIEJ1dCBpdCBtaWdodCBiZSBhIGNhbGwgd2l0aCBhIHR5cGUgYXJndW1lbnQgYGFzeW5jPFQ+KCk7YFxuICAgICAgY29uc3QgYXN5bmNBcnJvd0ZuID0gdHNUcnlQYXJzZUdlbmVyaWNBc3luY0Fycm93RnVuY3Rpb24oKTtcbiAgICAgIGlmIChhc3luY0Fycm93Rm4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50c1dpdGhQb3NzaWJsZUJpdHNoaWZ0KCk7XG4gICAgaWYgKCFub0NhbGxzICYmIGVhdCh0dC5wYXJlbkwpKSB7XG4gICAgICAvLyBXaXRoIGY8VD4oKSwgdGhlIHN1YnNjcmlwdFN0YXJ0SW5kZXggbWFya2VyIGlzIG9uIHRoZSAoIHRva2VuLlxuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuICAgICAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2godHQuYmFja1F1b3RlKSkge1xuICAgICAgLy8gVGFnZ2VkIHRlbXBsYXRlIHdpdGggYSB0eXBlIGFyZ3VtZW50LlxuICAgICAgcGFyc2VUZW1wbGF0ZSgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyBUaGUgcmVtYWluaW5nIHBvc3NpYmxlIGNhc2UgaXMgYW4gaW5zdGFudGlhdGlvbiBleHByZXNzaW9uLCBlLmcuXG4gICAgICAvLyBBcnJheTxudW1iZXI+IC4gQ2hlY2sgZm9yIGEgZmV3IGNhc2VzIHRoYXQgd291bGQgZGlzcXVhbGlmeSBpdCBhbmRcbiAgICAgIC8vIGNhdXNlIHVzIHRvIGJhaWwgb3V0LlxuICAgICAgLy8gYTxiPj5jIGlzIG5vdCAoYTxiPik+YywgYnV0IGE8KGI+PmMpXG4gICAgICBzdGF0ZS50eXBlID09PSB0dC5ncmVhdGVyVGhhbiB8fFxuICAgICAgLy8gYTxiPmMgaXMgKGE8Yik+Y1xuICAgICAgKHN0YXRlLnR5cGUgIT09IHR0LnBhcmVuTCAmJlxuICAgICAgICBCb29sZWFuKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfRVhQUkVTU0lPTl9TVEFSVCkgJiZcbiAgICAgICAgIWhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKVxuICAgICkge1xuICAgICAgLy8gQmFpbCBvdXQuIFdlIGhhdmUgc29tZXRoaW5nIGxpa2UgYTxiPmMsIHdoaWNoIGlzIG5vdCBhbiBleHByZXNzaW9uIHdpdGhcbiAgICAgIC8vIHR5cGUgYXJndW1lbnRzIGJ1dCBhbiAoYSA8IGIpID4gYyBjb21wYXJpc29uLlxuICAgICAgdW5leHBlY3RlZCgpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5lcnJvcikge1xuICAgICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIW5vQ2FsbHMgJiYgbWF0Y2godHQucXVlc3Rpb25Eb3QpICYmIGxvb2thaGVhZFR5cGUoKSA9PT0gdHQubGVzc1RoYW4pIHtcbiAgICAvLyBJZiB3ZSBzZWUgZj8uPCwgdGhlbiB0aGlzIG11c3QgYmUgYW4gb3B0aW9uYWwgY2FsbCB3aXRoIGEgdHlwZSBhcmd1bWVudC5cbiAgICBuZXh0KCk7XG4gICAgc3RhdGUudG9rZW5zW3N0YXJ0VG9rZW5JbmRleF0uaXNPcHRpb25hbENoYWluU3RhcnQgPSB0cnVlO1xuICAgIC8vIFdpdGggZj8uPFQ+KCksIHRoZSBzdWJzY3JpcHRTdGFydEluZGV4IG1hcmtlciBpcyBvbiB0aGUgPy4gdG9rZW4uXG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuXG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHMoKTtcbiAgICBleHBlY3QodHQucGFyZW5MKTtcbiAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gIH1cbiAgYmFzZVBhcnNlU3Vic2NyaXB0KHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzVHJ5UGFyc2VFeHBvcnQoKSB7XG4gIGlmIChlYXQodHQuX2ltcG9ydCkpIHtcbiAgICAvLyBPbmUgb2YgdGhlc2UgY2FzZXM6XG4gICAgLy8gZXhwb3J0IGltcG9ydCBBID0gQjtcbiAgICAvLyBleHBvcnQgaW1wb3J0IHR5cGUgQSA9IHJlcXVpcmUoXCJBXCIpO1xuICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpICYmIGxvb2thaGVhZFR5cGUoKSAhPT0gdHQuZXEpIHtcbiAgICAgIC8vIEVhdCBhIGB0eXBlYCB0b2tlbiwgdW5sZXNzIGl0J3MgYWN0dWFsbHkgYW4gaWRlbnRpZmllciBuYW1lLlxuICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gICAgfVxuICAgIHRzUGFyc2VJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGVhdCh0dC5lcSkpIHtcbiAgICAvLyBgZXhwb3J0ID0geDtgXG4gICAgcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgc2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpKSB7XG4gICAgLy8gYGV4cG9ydCBhcyBuYW1lc3BhY2UgQTtgXG4gICAgLy8gU2VlIGBwYXJzZU5hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uYCBpbiBUeXBlU2NyaXB0J3Mgb3duIHBhcnNlclxuICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX25hbWVzcGFjZSk7XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgc2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdHlwZSkpIHtcbiAgICAgIGNvbnN0IG5leHRUeXBlID0gbG9va2FoZWFkVHlwZSgpO1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2Zvb30gZnJvbSAnYSc7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGZyb20gJ2EnOydcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogYXMgbnMgZnJvbSAnYSc7J1xuICAgICAgaWYgKG5leHRUeXBlID09PSB0dC5icmFjZUwgfHwgbmV4dFR5cGUgPT09IHR0LnN0YXIpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIFRTIGltcG9ydCBzcGVjaWZpZXIsIHdoaWNoIG1heSBiZSBwcmVmaXhlZCB3aXRoIFwidHlwZVwiIGFuZCBtYXkgYmUgb2ZcbiAqIHRoZSBmb3JtIGBmb28gYXMgYmFyYC5cbiAqXG4gKiBUaGUgbnVtYmVyIG9mIGlkZW50aWZpZXItbGlrZSB0b2tlbnMgd2Ugc2VlIGhhcHBlbnMgdG8gYmUgZW5vdWdoIHRvIHVuaXF1ZWx5XG4gKiBpZGVudGlmeSB0aGUgZm9ybSwgc28gc2ltcGx5IGNvdW50IHRoZSBudW1iZXIgb2YgaWRlbnRpZmllcnMgcmF0aGVyIHRoYW5cbiAqIG1hdGNoaW5nIHRoZSB3b3JkcyBgdHlwZWAgb3IgYGFzYC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGJlY2F1c2VcbiAqIGB0eXBlYCBhbmQgYGFzYCBjb3VsZCBlYWNoIGFjdHVhbGx5IGJlIHBsYWluIGlkZW50aWZpZXJzIHJhdGhlciB0aGFuXG4gKiBrZXl3b3Jkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAobWF0Y2godHQuY29tbWEpIHx8IG1hdGNoKHR0LmJyYWNlUikpIHtcbiAgICAvLyBpbXBvcnQge2Zvb31cbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb247XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAobWF0Y2godHQuY29tbWEpIHx8IG1hdGNoKHR0LmJyYWNlUikpIHtcbiAgICAvLyBpbXBvcnQge3R5cGUgZm9vfVxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvbjtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDJdLmlzVHlwZSA9IHRydWU7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgaWYgKG1hdGNoKHR0LmNvbW1hKSB8fCBtYXRjaCh0dC5icmFjZVIpKSB7XG4gICAgLy8gaW1wb3J0IHtmb28gYXMgYmFyfVxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5JbXBvcnRBY2Nlc3M7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLkltcG9ydERlY2xhcmF0aW9uO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgLy8gaW1wb3J0IHt0eXBlIGZvbyBhcyBiYXJ9XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5JbXBvcnRBY2Nlc3M7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvbjtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSA0XS5pc1R5cGUgPSB0cnVlO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDNdLmlzVHlwZSA9IHRydWU7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMl0uaXNUeXBlID0gdHJ1ZTtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xufVxuXG4vKipcbiAqIEp1c3QgbGlrZSBuYW1lZCBpbXBvcnQgc3BlY2lmaWVycywgZXhwb3J0IHNwZWNpZmllcnMgY2FuIGhhdmUgZnJvbSAxIHRvIDRcbiAqIHRva2VucywgaW5jbHVzaXZlLCBhbmQgdGhlIG51bWJlciBvZiB0b2tlbnMgZGV0ZXJtaW5lcyB0aGUgcm9sZSBvZiBlYWNoIHRva2VuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZUV4cG9ydFNwZWNpZmllcigpIHtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmIChtYXRjaCh0dC5jb21tYSkgfHwgbWF0Y2godHQuYnJhY2VSKSkge1xuICAgIC8vIGV4cG9ydCB7Zm9vfVxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAobWF0Y2godHQuY29tbWEpIHx8IG1hdGNoKHR0LmJyYWNlUikpIHtcbiAgICAvLyBleHBvcnQge3R5cGUgZm9vfVxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAyXS5pc1R5cGUgPSB0cnVlO1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaXNUeXBlID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmIChtYXRjaCh0dC5jb21tYSkgfHwgbWF0Y2godHQuYnJhY2VSKSkge1xuICAgIC8vIGV4cG9ydCB7Zm9vIGFzIGJhcn1cbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDNdLmlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuRXhwb3J0QWNjZXNzO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgLy8gZXhwb3J0IHt0eXBlIGZvbyBhcyBiYXJ9XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gNF0uaXNUeXBlID0gdHJ1ZTtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAzXS5pc1R5cGUgPSB0cnVlO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDJdLmlzVHlwZSA9IHRydWU7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaXNUeXBlID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzVHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbigpIHtcbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3QpICYmIGxvb2thaGVhZFR5cGUoKSA9PT0gdHQuX2NsYXNzKSB7XG4gICAgc3RhdGUudHlwZSA9IHR0Ll9hYnN0cmFjdDtcbiAgICBuZXh0KCk7IC8vIFNraXAgXCJhYnN0cmFjdFwiXG4gICAgcGFyc2VDbGFzcyh0cnVlLCB0cnVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgLy8gTWFrZSBzdXJlIFwiZXhwb3J0IGRlZmF1bHRcIiBhcmUgY29uc2lkZXJlZCB0eXBlIHRva2VucyBzbyB0aGUgd2hvbGUgdGhpbmcgaXMgcmVtb3ZlZC5cbiAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMik7XG4gICAgdHNQYXJzZURlY2xhcmF0aW9uKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UsIHRydWUpO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNUcnlQYXJzZVN0YXRlbWVudENvbnRlbnQoKSB7XG4gIGlmIChzdGF0ZS50eXBlID09PSB0dC5fY29uc3QpIHtcbiAgICBjb25zdCBhaGVhZCA9IGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkKCk7XG4gICAgaWYgKGFoZWFkLnR5cGUgPT09IHR0Lm5hbWUgJiYgYWhlYWQuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9lbnVtKSB7XG4gICAgICBleHBlY3QodHQuX2NvbnN0KTtcbiAgICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2VudW0pO1xuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2VudW07XG4gICAgICB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNUcnlQYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljKGlzU3RhdGljKSB7XG4gIGNvbnN0IG1lbWJlclN0YXJ0SW5kZXhBZnRlclN0YXRpYyA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHRzUGFyc2VNb2RpZmllcnMoW1xuICAgIENvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCxcbiAgICBDb250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHksXG4gICAgQ29udGV4dHVhbEtleXdvcmQuX2RlY2xhcmUsXG4gICAgQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYyxcbiAgICBDb250ZXh0dWFsS2V5d29yZC5fb3ZlcnJpZGUsXG4gIF0pO1xuXG4gIGNvbnN0IG1vZGlmaWVyc0VuZEluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgY29uc3QgZm91bmQgPSB0c1RyeVBhcnNlSW5kZXhTaWduYXR1cmUoKTtcbiAgaWYgKGZvdW5kKSB7XG4gICAgLy8gSW5kZXggc2lnbmF0dXJlcyBhcmUgdHlwZSBkZWNsYXJhdGlvbnMsIHNvIHNldCB0aGUgbW9kaWZpZXIgdG9rZW5zIGFzXG4gICAgLy8gdHlwZSB0b2tlbnMuIE1vc3QgdG9rZW5zIGNvdWxkIGJlIGFzc3VtZWQgdG8gYmUgdHlwZSB0b2tlbnMsIGJ1dCBgc3RhdGljYFxuICAgIC8vIGlzIGFtYmlndW91cyB1bmxlc3Mgd2Ugc2V0IGl0IGV4cGxpY2l0bHkgaGVyZS5cbiAgICBjb25zdCBtZW1iZXJTdGFydEluZGV4ID0gaXNTdGF0aWNcbiAgICAgID8gbWVtYmVyU3RhcnRJbmRleEFmdGVyU3RhdGljIC0gMVxuICAgICAgOiBtZW1iZXJTdGFydEluZGV4QWZ0ZXJTdGF0aWM7XG4gICAgZm9yIChsZXQgaSA9IG1lbWJlclN0YXJ0SW5kZXg7IGkgPCBtb2RpZmllcnNFbmRJbmRleDsgaSsrKSB7XG4gICAgICBzdGF0ZS50b2tlbnNbaV0uaXNUeXBlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBOb3RlOiBUaGUgcmVhc29uIHdlIGRvIHRoaXMgaW4gYHBhcnNlSWRlbnRpZmllclN0YXRlbWVudGAgYW5kIG5vdCBgcGFyc2VTdGF0ZW1lbnRgXG4vLyBpcyB0aGF0IGUuZy4gYHR5cGUoKWAgaXMgdmFsaWQgSlMsIHNvIHdlIG11c3QgdHJ5IHBhcnNpbmcgdGhhdCBmaXJzdC5cbi8vIElmIGl0J3MgcmVhbGx5IGEgdHlwZSwgd2Ugd2lsbCBwYXJzZSBgdHlwZWAgYXMgdGhlIHN0YXRlbWVudCwgYW5kIGNhbiBjb3JyZWN0IGl0IGhlcmVcbi8vIGJ5IHBhcnNpbmcgdGhlIHJlc3QuXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgY29uc3QgbWF0Y2hlZCA9IHRzUGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGNvbnRleHR1YWxLZXl3b3JkKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgc2VtaWNvbG9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgLy8gXCJleHBvcnQgZGVjbGFyZVwiIGlzIGVxdWl2YWxlbnQgdG8ganVzdCBcImV4cG9ydFwiLlxuICBjb25zdCBpc0RlY2xhcmUgPSBlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlKTtcbiAgaWYgKGlzRGVjbGFyZSkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9kZWNsYXJlO1xuICB9XG5cbiAgbGV0IG1hdGNoZWREZWNsYXJhdGlvbiA9IGZhbHNlO1xuICBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICBpZiAoaXNEZWNsYXJlKSB7XG4gICAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMik7XG4gICAgICBtYXRjaGVkRGVjbGFyYXRpb24gPSB0c1RyeVBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoZWREZWNsYXJhdGlvbiA9IHRzVHJ5UGFyc2VFeHBvcnREZWNsYXJhdGlvbigpO1xuICAgIH1cbiAgfVxuICBpZiAoIW1hdGNoZWREZWNsYXJhdGlvbikge1xuICAgIGlmIChpc0RlY2xhcmUpIHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgyKTtcbiAgICAgIHBhcnNlU3RhdGVtZW50KHRydWUpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VTdGF0ZW1lbnQodHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c0FmdGVyUGFyc2VDbGFzc1N1cGVyKGhhc1N1cGVyKSB7XG4gIGlmIChoYXNTdXBlciAmJiAobWF0Y2godHQubGVzc1RoYW4pIHx8IG1hdGNoKHR0LmJpdFNoaWZ0TCkpKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICB9XG4gIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbXBsZW1lbnRzKSkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IHR0Ll9pbXBsZW1lbnRzO1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICB0c1BhcnNlSGVyaXRhZ2VDbGF1c2UoKTtcbiAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1N0YXJ0UGFyc2VPYmpQcm9wVmFsdWUoKSB7XG4gIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXMoKSB7XG4gIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xufVxuXG4vLyBgbGV0IHg6IG51bWJlcjtgXG5leHBvcnQgZnVuY3Rpb24gdHNBZnRlclBhcnNlVmFySGVhZCgpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICBpZiAoIWhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKSB7XG4gICAgZWF0KHR0LmJhbmcpO1xuICB9XG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xufVxuXG4vLyBwYXJzZSB0aGUgcmV0dXJuIHR5cGUgb2YgYW4gYXN5bmMgYXJyb3cgZnVuY3Rpb24gLSBsZXQgZm9vID0gKGFzeW5jICgpOiBudW1iZXIgPT4ge30pO1xuZXhwb3J0IGZ1bmN0aW9uIHRzU3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oKSB7XG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucykge1xuICAvLyBOb3RlOiBXaGVuIHRoZSBKU1ggcGx1Z2luIGlzIG9uLCB0eXBlIGFzc2VydGlvbnMgKGA8VD4geGApIGFyZW4ndCB2YWxpZCBzeW50YXguXG4gIGlmIChpc0pTWEVuYWJsZWQpIHtcbiAgICByZXR1cm4gdHNQYXJzZU1heWJlQXNzaWduV2l0aEpTWChub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRzUGFyc2VNYXliZUFzc2lnbldpdGhvdXRKU1gobm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c1BhcnNlTWF5YmVBc3NpZ25XaXRoSlNYKG5vSW4sIGlzV2l0aGluUGFyZW5zKSB7XG4gIGlmICghbWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgcmV0dXJuIGJhc2VQYXJzZU1heWJlQXNzaWduKG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgfVxuXG4gIC8vIFByZWZlciB0byBwYXJzZSBKU1ggaWYgcG9zc2libGUuIEJ1dCBtYXkgYmUgYW4gYXJyb3cgZm4uXG4gIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgbGV0IHdhc0Fycm93ID0gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gd2FzQXJyb3c7XG4gIH1cblxuICAvLyBPdGhlcndpc2UsIHRyeSBhcyB0eXBlLXBhcmFtZXRlcml6ZWQgYXJyb3cgZnVuY3Rpb24uXG4gIHN0YXRlLnR5cGUgPSB0dC50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gIC8vIFRoaXMgaXMgc2ltaWxhciB0byBUeXBlU2NyaXB0J3MgYHRyeVBhcnNlUGFyZW50aGVzaXplZEFycm93RnVuY3Rpb25FeHByZXNzaW9uYC5cbiAgdHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIHdhc0Fycm93ID0gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICBpZiAoIXdhc0Fycm93KSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG5cbiAgcmV0dXJuIHdhc0Fycm93O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHNQYXJzZU1heWJlQXNzaWduV2l0aG91dEpTWChub0luLCBpc1dpdGhpblBhcmVucykge1xuICBpZiAoIW1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIHJldHVybiBiYXNlUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIH1cblxuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG4gIC8vIFRoaXMgaXMgc2ltaWxhciB0byBUeXBlU2NyaXB0J3MgYHRyeVBhcnNlUGFyZW50aGVzaXplZEFycm93RnVuY3Rpb25FeHByZXNzaW9uYC5cbiAgdHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIGNvbnN0IHdhc0Fycm93ID0gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICBpZiAoIXdhc0Fycm93KSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG4gIGlmIChzdGF0ZS5lcnJvcikge1xuICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3YXNBcnJvdztcbiAgfVxuXG4gIC8vIFRyeSBwYXJzaW5nIGEgdHlwZSBjYXN0IGluc3RlYWQgb2YgYW4gYXJyb3cgZnVuY3Rpb24uXG4gIC8vIFRoaXMgd2lsbCBzdGFydCB3aXRoIGEgdHlwZSBhc3NlcnRpb24gKHZpYSBwYXJzZU1heWJlVW5hcnkpLlxuICAvLyBCdXQgZG9uJ3QgZGlyZWN0bHkgY2FsbCBgdHNQYXJzZVR5cGVBc3NlcnRpb25gIGJlY2F1c2Ugd2Ugd2FudCB0byBoYW5kbGUgYW55IGJpbmFyeSBhZnRlciBpdC5cbiAgcmV0dXJuIGJhc2VQYXJzZU1heWJlQXNzaWduKG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VBcnJvdygpIHtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gaG93IHRoZSBUUyBwYXJzZXIgZG9lcyBpdC5cbiAgICAvLyBUUyB1c2VzIGxvb2thaGVhZC4gQmFieWxvbiBwYXJzZXMgaXQgYXMgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gYW5kIGNvbnZlcnRzLlxuICAgIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcblxuICAgIHRzUGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbih0dC5jb2xvbik7XG4gICAgaWYgKGNhbkluc2VydFNlbWljb2xvbigpKSB1bmV4cGVjdGVkKCk7XG4gICAgaWYgKCFtYXRjaCh0dC5hcnJvdykpIHVuZXhwZWN0ZWQoKTtcblxuICAgIGlmIChzdGF0ZS5lcnJvcikge1xuICAgICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlYXQodHQuYXJyb3cpO1xufVxuXG4vLyBBbGxvdyB0eXBlIGFubm90YXRpb25zIGluc2lkZSBvZiBhIHBhcmFtZXRlciBsaXN0LlxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICBlYXQodHQucXVlc3Rpb24pO1xuICB0c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRzUGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cygpIHtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSB8fCBtYXRjaCh0dC5iaXRTaGlmdEwpKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICB9XG4gIGJhc2VQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzKCk7XG59XG4iLCAiaW1wb3J0IHtcbiAgZWF0LFxuICBmaW5pc2hUb2tlbixcbiAgZ2V0VG9rZW5Gcm9tQ29kZSxcbiAgSWRlbnRpZmllclJvbGUsXG4gIEpTWFJvbGUsXG4gIG1hdGNoLFxuICBuZXh0LFxuICBza2lwU3BhY2UsXG4gIFRva2VuLFxufSBmcm9tIFwiLi4vLi4vdG9rZW5pemVyL2luZGV4XCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uLy4uL3Rva2VuaXplci90eXBlc1wiO1xuaW1wb3J0IHtpbnB1dCwgaXNUeXBlU2NyaXB0RW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuLi8uLi90cmF2ZXJzZXIvYmFzZVwiO1xuaW1wb3J0IHtwYXJzZUV4cHJlc3Npb24sIHBhcnNlTWF5YmVBc3NpZ259IGZyb20gXCIuLi8uLi90cmF2ZXJzZXIvZXhwcmVzc2lvblwiO1xuaW1wb3J0IHtleHBlY3QsIHVuZXhwZWN0ZWR9IGZyb20gXCIuLi8uLi90cmF2ZXJzZXIvdXRpbFwiO1xuaW1wb3J0IHtjaGFyQ29kZXN9IGZyb20gXCIuLi8uLi91dGlsL2NoYXJjb2Rlc1wiO1xuaW1wb3J0IHtJU19JREVOVElGSUVSX0NIQVIsIElTX0lERU5USUZJRVJfU1RBUlR9IGZyb20gXCIuLi8uLi91dGlsL2lkZW50aWZpZXJcIjtcbmltcG9ydCB7dHNUcnlQYXJzZUpTWFR5cGVBcmd1bWVudH0gZnJvbSBcIi4uL3R5cGVzY3JpcHRcIjtcblxuLyoqXG4gKiBSZWFkIHRva2VuIHdpdGggSlNYIGNvbnRlbnRzLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGRldGVjdGluZyBqc3hUYWdTdGFydCBhbmQgYWxzbyByZWd1bGFyIHRva2VucyB0aGF0IG1pZ2h0IGJlXG4gKiBwYXJ0IG9mIGFuIGV4cHJlc3Npb24sIHRoaXMgY29kZSBkZXRlY3RzIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRleHQgcmFuZ2VzXG4gKiB3aXRoaW4gSlNYIGNoaWxkcmVuLiBJbiBvcmRlciB0byBwcm9wZXJseSBjb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLCB3ZVxuICogZGlzdGluZ3Vpc2gganN4VGV4dCBmcm9tIGpzeEVtcHR5VGV4dCwgd2hpY2ggaXMgYSB0ZXh0IHJhbmdlIHRoYXQgc2ltcGxpZmllc1xuICogdG8gdGhlIGVtcHR5IHN0cmluZyBhZnRlciBKU1ggd2hpdGVzcGFjZSB0cmltbWluZy5cbiAqXG4gKiBJdCB0dXJucyBvdXQgdGhhdCBhIEpTWCB0ZXh0IHJhbmdlIHdpbGwgc2ltcGxpZnkgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBhbmRcbiAqIG9ubHkgaWYgYm90aCBvZiB0aGVzZSBjb25kaXRpb25zIGhvbGQ6XG4gKiAtIFRoZSByYW5nZSBjb25zaXN0cyBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKG9ubHkgY291bnRpbmcgc3BhY2UsXG4gKiAgIHRhYiwgXFxyLCBhbmQgXFxuKS5cbiAqIC0gVGhlIHJhbmdlIGhhcyBhdCBsZWFzdCBvbmUgbmV3bGluZS5cbiAqIFRoaXMgY2FuIGJlIHByb3ZlbiBieSBhbmFseXppbmcgYW55IGltcGxlbWVudGF0aW9uIG9mIHdoaXRlc3BhY2UgdHJpbW1pbmcsXG4gKiBlLmcuIGZvcm1hdEpTWFRleHRMaXRlcmFsIGluIFN1Y3Jhc2Ugb3IgY2xlYW5KU1hFbGVtZW50TGl0ZXJhbENoaWxkIGluIEJhYmVsLlxuICovXG5mdW5jdGlvbiBqc3hSZWFkVG9rZW4oKSB7XG4gIGxldCBzYXdOZXdsaW5lID0gZmFsc2U7XG4gIGxldCBzYXdOb25XaGl0ZXNwYWNlID0gZmFsc2U7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHVuZXhwZWN0ZWQoXCJVbnRlcm1pbmF0ZWQgSlNYIGNvbnRlbnRzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChjaCA9PT0gY2hhckNvZGVzLmxlc3NUaGFuIHx8IGNoID09PSBjaGFyQ29kZXMubGVmdEN1cmx5QnJhY2UpIHtcbiAgICAgIGlmIChzdGF0ZS5wb3MgPT09IHN0YXRlLnN0YXJ0KSB7XG4gICAgICAgIGlmIChjaCA9PT0gY2hhckNvZGVzLmxlc3NUaGFuKSB7XG4gICAgICAgICAgc3RhdGUucG9zKys7XG4gICAgICAgICAgZmluaXNoVG9rZW4odHQuanN4VGFnU3RhcnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBnZXRUb2tlbkZyb21Db2RlKGNoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHNhd05ld2xpbmUgJiYgIXNhd05vbldoaXRlc3BhY2UpIHtcbiAgICAgICAgZmluaXNoVG9rZW4odHQuanN4RW1wdHlUZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmlzaFRva2VuKHR0LmpzeFRleHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgcGFydCBvZiBKU1ggdGV4dC5cbiAgICBpZiAoY2ggPT09IGNoYXJDb2Rlcy5saW5lRmVlZCkge1xuICAgICAgc2F3TmV3bGluZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjaCAhPT0gY2hhckNvZGVzLnNwYWNlICYmIGNoICE9PSBjaGFyQ29kZXMuY2FycmlhZ2VSZXR1cm4gJiYgY2ggIT09IGNoYXJDb2Rlcy50YWIpIHtcbiAgICAgIHNhd05vbldoaXRlc3BhY2UgPSB0cnVlO1xuICAgIH1cbiAgICBzdGF0ZS5wb3MrKztcbiAgfVxufVxuXG5mdW5jdGlvbiBqc3hSZWFkU3RyaW5nKHF1b3RlKSB7XG4gIHN0YXRlLnBvcysrO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHN0YXRlLnBvcyA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHVuZXhwZWN0ZWQoXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgIHN0YXRlLnBvcysrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHN0YXRlLnBvcysrO1xuICB9XG4gIGZpbmlzaFRva2VuKHR0LnN0cmluZyk7XG59XG5cbi8vIFJlYWQgYSBKU1ggaWRlbnRpZmllciAodmFsaWQgdGFnIG9yIGF0dHJpYnV0ZSBuYW1lKS5cbi8vXG4vLyBPcHRpbWl6ZWQgdmVyc2lvbiBzaW5jZSBKU1ggaWRlbnRpZmllcnMgY2FuJ3QgY29udGFpblxuLy8gZXNjYXBlIGNoYXJhY3RlcnMgYW5kIHNvIGNhbiBiZSByZWFkIGFzIHNpbmdsZSBzbGljZS5cbi8vIEFsc28gYXNzdW1lcyB0aGF0IGZpcnN0IGNoYXJhY3RlciB3YXMgYWxyZWFkeSBjaGVja2VkXG4vLyBieSBpc0lkZW50aWZpZXJTdGFydCBpbiByZWFkVG9rZW4uXG5cbmZ1bmN0aW9uIGpzeFJlYWRXb3JkKCkge1xuICBsZXQgY2g7XG4gIGRvIHtcbiAgICBpZiAoc3RhdGUucG9zID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICB1bmV4cGVjdGVkKFwiVW5leHBlY3RlZGx5IHJlYWNoZWQgdGhlIGVuZCBvZiBpbnB1dC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNoID0gaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvcyk7XG4gIH0gd2hpbGUgKElTX0lERU5USUZJRVJfQ0hBUltjaF0gfHwgY2ggPT09IGNoYXJDb2Rlcy5kYXNoKTtcbiAgZmluaXNoVG9rZW4odHQuanN4TmFtZSk7XG59XG5cbi8vIFBhcnNlIG5leHQgdG9rZW4gYXMgSlNYIGlkZW50aWZpZXJcbmZ1bmN0aW9uIGpzeFBhcnNlSWRlbnRpZmllcigpIHtcbiAgbmV4dEpTWFRhZ1Rva2VuKCk7XG59XG5cbi8vIFBhcnNlIG5hbWVzcGFjZWQgaWRlbnRpZmllci5cbmZ1bmN0aW9uIGpzeFBhcnNlTmFtZXNwYWNlZE5hbWUoaWRlbnRpZmllclJvbGUpIHtcbiAganN4UGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmICghZWF0KHR0LmNvbG9uKSkge1xuICAgIC8vIFBsYWluIGlkZW50aWZpZXIsIHNvIHRoaXMgaXMgYW4gYWNjZXNzLlxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBpZGVudGlmaWVyUm9sZTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUHJvY2VzcyB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIG5hbWVzcGFjZWQgbmFtZS5cbiAganN4UGFyc2VJZGVudGlmaWVyKCk7XG59XG5cbi8vIFBhcnNlcyBlbGVtZW50IG5hbWUgaW4gYW55IGZvcm0gLSBuYW1lc3BhY2VkLCBtZW1iZXJcbi8vIG9yIHNpbmdsZSBpZGVudGlmaWVyLlxuZnVuY3Rpb24ganN4UGFyc2VFbGVtZW50TmFtZSgpIHtcbiAgY29uc3QgZmlyc3RUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAganN4UGFyc2VOYW1lc3BhY2VkTmFtZShJZGVudGlmaWVyUm9sZS5BY2Nlc3MpO1xuICBsZXQgaGFkRG90ID0gZmFsc2U7XG4gIHdoaWxlIChtYXRjaCh0dC5kb3QpKSB7XG4gICAgaGFkRG90ID0gdHJ1ZTtcbiAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICBqc3hQYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxuICAvLyBGb3IgdGFncyBsaWtlIDxkaXY+IHdpdGggYSBsb3dlcmNhc2UgbGV0dGVyIGFuZCBubyBkb3RzLCB0aGUgbmFtZSBpc1xuICAvLyBhY3R1YWxseSAqbm90KiBhbiBpZGVudGlmaWVyIGFjY2Vzcywgc2luY2UgaXQncyByZWZlcnJpbmcgdG8gYSBidWlsdC1pblxuICAvLyB0YWcgbmFtZS4gUmVtb3ZlIHRoZSBpZGVudGlmaWVyIHJvbGUgaW4gdGhpcyBjYXNlIHNvIHRoYXQgaXQncyBub3RcbiAgLy8gYWNjaWRlbnRhbGx5IHRyYW5zZm9ybWVkIGJ5IHRoZSBpbXBvcnRzIHRyYW5zZm9ybSB3aGVuIHByZXNlcnZpbmcgSlNYLlxuICBpZiAoIWhhZERvdCkge1xuICAgIGNvbnN0IGZpcnN0VG9rZW4gPSBzdGF0ZS50b2tlbnNbZmlyc3RUb2tlbkluZGV4XTtcbiAgICBjb25zdCBmaXJzdENoYXIgPSBpbnB1dC5jaGFyQ29kZUF0KGZpcnN0VG9rZW4uc3RhcnQpO1xuICAgIGlmIChmaXJzdENoYXIgPj0gY2hhckNvZGVzLmxvd2VyY2FzZUEgJiYgZmlyc3RDaGFyIDw9IGNoYXJDb2Rlcy5sb3dlcmNhc2VaKSB7XG4gICAgICBmaXJzdFRva2VuLmlkZW50aWZpZXJSb2xlID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2VzIGFueSB0eXBlIG9mIEpTWCBhdHRyaWJ1dGUgdmFsdWUuXG5mdW5jdGlvbiBqc3hQYXJzZUF0dHJpYnV0ZVZhbHVlKCkge1xuICBzd2l0Y2ggKHN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIHR0LmJyYWNlTDpcbiAgICAgIG5leHQoKTtcbiAgICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0LmpzeFRhZ1N0YXJ0OlxuICAgICAganN4UGFyc2VFbGVtZW50KCk7XG4gICAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgdHQuc3RyaW5nOlxuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdW5leHBlY3RlZChcIkpTWCB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIGFuIGV4cHJlc3Npb24gb3IgYSBxdW90ZWQgSlNYIHRleHRcIik7XG4gIH1cbn1cblxuLy8gUGFyc2UgSlNYIHNwcmVhZCBjaGlsZCwgYWZ0ZXIgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB7XG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgY2xvc2luZyB9XG5mdW5jdGlvbiBqc3hQYXJzZVNwcmVhZENoaWxkKCkge1xuICBleHBlY3QodHQuZWxsaXBzaXMpO1xuICBwYXJzZUV4cHJlc3Npb24oKTtcbn1cblxuLy8gUGFyc2VzIEpTWCBvcGVuaW5nIHRhZyBzdGFydGluZyBhZnRlciBcIjxcIi5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFnIHdhcyBzZWxmLWNsb3NpbmcuXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbmZ1bmN0aW9uIGpzeFBhcnNlT3BlbmluZ0VsZW1lbnQoaW5pdGlhbFRva2VuSW5kZXgpIHtcbiAgaWYgKG1hdGNoKHR0LmpzeFRhZ0VuZCkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZW4tZnJhZ21lbnQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGpzeFBhcnNlRWxlbWVudE5hbWUoKTtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c1RyeVBhcnNlSlNYVHlwZUFyZ3VtZW50KCk7XG4gIH1cbiAgbGV0IGhhc1NlZW5Qcm9wU3ByZWFkID0gZmFsc2U7XG4gIHdoaWxlICghbWF0Y2godHQuc2xhc2gpICYmICFtYXRjaCh0dC5qc3hUYWdFbmQpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGlmIChlYXQodHQuYnJhY2VMKSkge1xuICAgICAgaGFzU2VlblByb3BTcHJlYWQgPSB0cnVlO1xuICAgICAgZXhwZWN0KHR0LmVsbGlwc2lzKTtcbiAgICAgIHBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgIC8vIH1cbiAgICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGhhc1NlZW5Qcm9wU3ByZWFkICYmXG4gICAgICBzdGF0ZS5lbmQgLSBzdGF0ZS5zdGFydCA9PT0gMyAmJlxuICAgICAgaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5zdGFydCkgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VLICYmXG4gICAgICBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnN0YXJ0ICsgMSkgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VFICYmXG4gICAgICBpbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnN0YXJ0ICsgMikgPT09IGNoYXJDb2Rlcy5sb3dlcmNhc2VZXG4gICAgKSB7XG4gICAgICBzdGF0ZS50b2tlbnNbaW5pdGlhbFRva2VuSW5kZXhdLmpzeFJvbGUgPSBKU1hSb2xlLktleUFmdGVyUHJvcFNwcmVhZDtcbiAgICB9XG4gICAganN4UGFyc2VOYW1lc3BhY2VkTmFtZShJZGVudGlmaWVyUm9sZS5PYmplY3RLZXkpO1xuICAgIGlmIChtYXRjaCh0dC5lcSkpIHtcbiAgICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgICAganN4UGFyc2VBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBjb25zdCBpc1NlbGZDbG9zaW5nID0gbWF0Y2godHQuc2xhc2gpO1xuICBpZiAoaXNTZWxmQ2xvc2luZykge1xuICAgIC8vIC9cbiAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgfVxuICByZXR1cm4gaXNTZWxmQ2xvc2luZztcbn1cblxuLy8gUGFyc2VzIEpTWCBjbG9zaW5nIHRhZyBzdGFydGluZyBhZnRlciBcIjwvXCIuXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbmZ1bmN0aW9uIGpzeFBhcnNlQ2xvc2luZ0VsZW1lbnQoKSB7XG4gIGlmIChtYXRjaCh0dC5qc3hUYWdFbmQpKSB7XG4gICAgLy8gRnJhZ21lbnQgc3ludGF4LCBzbyB3ZSBpbW1lZGlhdGVseSBoYXZlIGEgdGFnIGVuZC5cbiAgICByZXR1cm47XG4gIH1cbiAganN4UGFyc2VFbGVtZW50TmFtZSgpO1xufVxuXG4vLyBQYXJzZXMgZW50aXJlIEpTWCBlbGVtZW50LCBpbmNsdWRpbmcgaXRzIG9wZW5pbmcgdGFnXG4vLyAoc3RhcnRpbmcgYWZ0ZXIgXCI8XCIpLCBhdHRyaWJ1dGVzLCBjb250ZW50cyBhbmQgY2xvc2luZyB0YWcuXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbmZ1bmN0aW9uIGpzeFBhcnNlRWxlbWVudEF0KCkge1xuICBjb25zdCBpbml0aWFsVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICBzdGF0ZS50b2tlbnNbaW5pdGlhbFRva2VuSW5kZXhdLmpzeFJvbGUgPSBKU1hSb2xlLk5vQ2hpbGRyZW47XG4gIGxldCBudW1FeHBsaWNpdENoaWxkcmVuID0gMDtcbiAgY29uc3QgaXNTZWxmQ2xvc2luZyA9IGpzeFBhcnNlT3BlbmluZ0VsZW1lbnQoaW5pdGlhbFRva2VuSW5kZXgpO1xuICBpZiAoIWlzU2VsZkNsb3NpbmcpIHtcbiAgICBuZXh0SlNYRXhwclRva2VuKCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHN3aXRjaCAoc3RhdGUudHlwZSkge1xuICAgICAgICBjYXNlIHR0LmpzeFRhZ1N0YXJ0OlxuICAgICAgICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgICAgICAgIGlmIChtYXRjaCh0dC5zbGFzaCkpIHtcbiAgICAgICAgICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgICAgICAgICAganN4UGFyc2VDbG9zaW5nRWxlbWVudCgpO1xuICAgICAgICAgICAgLy8gS2V5IGFmdGVyIHByb3Agc3ByZWFkIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBudW1iZXIgb2YgY2hpbGRyZW4sXG4gICAgICAgICAgICAvLyBzaW5jZSBpdCBtZWFucyB3ZSBzd2l0Y2ggdG8gY3JlYXRlRWxlbWVudCwgd2hpY2ggZG9lc24ndCBjYXJlXG4gICAgICAgICAgICAvLyBhYm91dCBudW1iZXIgb2YgY2hpbGRyZW4uXG4gICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5zW2luaXRpYWxUb2tlbkluZGV4XS5qc3hSb2xlICE9PSBKU1hSb2xlLktleUFmdGVyUHJvcFNwcmVhZCkge1xuICAgICAgICAgICAgICBpZiAobnVtRXhwbGljaXRDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHN0YXRlLnRva2Vuc1tpbml0aWFsVG9rZW5JbmRleF0uanN4Um9sZSA9IEpTWFJvbGUuT25lQ2hpbGQ7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtRXhwbGljaXRDaGlsZHJlbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbnNbaW5pdGlhbFRva2VuSW5kZXhdLmpzeFJvbGUgPSBKU1hSb2xlLlN0YXRpY0NoaWxkcmVuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG51bUV4cGxpY2l0Q2hpbGRyZW4rKztcbiAgICAgICAgICBqc3hQYXJzZUVsZW1lbnRBdCgpO1xuICAgICAgICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIHR0LmpzeFRleHQ6XG4gICAgICAgICAgbnVtRXhwbGljaXRDaGlsZHJlbisrO1xuICAgICAgICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIHR0LmpzeEVtcHR5VGV4dDpcbiAgICAgICAgICBuZXh0SlNYRXhwclRva2VuKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSB0dC5icmFjZUw6XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIGlmIChtYXRjaCh0dC5lbGxpcHNpcykpIHtcbiAgICAgICAgICAgIGpzeFBhcnNlU3ByZWFkQ2hpbGQoKTtcbiAgICAgICAgICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICAgICAgICAgIC8vIFNwcmVhZCBjaGlsZHJlbiBhcmUgYSBtZWNoYW5pc20gdG8gZXhwbGljaXRseSBtYXJrIGNoaWxkcmVuIGFzXG4gICAgICAgICAgICAvLyBzdGF0aWMsIHNvIGNvdW50IGl0IGFzIDIgY2hpbGRyZW4gdG8gc2F0aXNmeSB0aGUgXCJtb3JlIHRoYW4gb25lXG4gICAgICAgICAgICAvLyBjaGlsZFwiIGNvbmRpdGlvbi5cbiAgICAgICAgICAgIG51bUV4cGxpY2l0Q2hpbGRyZW4gKz0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgd2Ugc2VlIHt9LCB0aGlzIGlzIGFuIGVtcHR5IHBzZXVkby1leHByZXNzaW9uIHRoYXQgZG9lc24ndFxuICAgICAgICAgICAgLy8gY291bnQgYXMgYSBjaGlsZC5cbiAgICAgICAgICAgIGlmICghbWF0Y2godHQuYnJhY2VSKSkge1xuICAgICAgICAgICAgICBudW1FeHBsaWNpdENoaWxkcmVuKys7XG4gICAgICAgICAgICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dEpTWEV4cHJUb2tlbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIG5ldmVyIGhhcHBlblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHVuZXhwZWN0ZWQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFBhcnNlcyBlbnRpcmUgSlNYIGVsZW1lbnQgZnJvbSBjdXJyZW50IHBvc2l0aW9uLlxuLy8gRG9lcyBub3QgcGFyc2UgdGhlIGxhc3QgdG9rZW4uXG5leHBvcnQgZnVuY3Rpb24ganN4UGFyc2VFbGVtZW50KCkge1xuICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAganN4UGFyc2VFbGVtZW50QXQoKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT3ZlcnJpZGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0SlNYVGFnVG9rZW4oKSB7XG4gIHN0YXRlLnRva2Vucy5wdXNoKG5ldyBUb2tlbigpKTtcbiAgc2tpcFNwYWNlKCk7XG4gIHN0YXRlLnN0YXJ0ID0gc3RhdGUucG9zO1xuICBjb25zdCBjb2RlID0gaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xuXG4gIGlmIChJU19JREVOVElGSUVSX1NUQVJUW2NvZGVdKSB7XG4gICAganN4UmVhZFdvcmQoKTtcbiAgfSBlbHNlIGlmIChjb2RlID09PSBjaGFyQ29kZXMucXVvdGF0aW9uTWFyayB8fCBjb2RlID09PSBjaGFyQ29kZXMuYXBvc3Ryb3BoZSkge1xuICAgIGpzeFJlYWRTdHJpbmcoY29kZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlIGZvbGxvd2luZyB0b2tlbnMgYXJlIGp1c3Qgb25lIGNoYXJhY3RlciBlYWNoLlxuICAgICsrc3RhdGUucG9zO1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSBjaGFyQ29kZXMuZ3JlYXRlclRoYW46XG4gICAgICAgIGZpbmlzaFRva2VuKHR0LmpzeFRhZ0VuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaGFyQ29kZXMubGVzc1RoYW46XG4gICAgICAgIGZpbmlzaFRva2VuKHR0LmpzeFRhZ1N0YXJ0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNoYXJDb2Rlcy5zbGFzaDpcbiAgICAgICAgZmluaXNoVG9rZW4odHQuc2xhc2gpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2hhckNvZGVzLmVxdWFsc1RvOlxuICAgICAgICBmaW5pc2hUb2tlbih0dC5lcSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaGFyQ29kZXMubGVmdEN1cmx5QnJhY2U6XG4gICAgICAgIGZpbmlzaFRva2VuKHR0LmJyYWNlTCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaGFyQ29kZXMuZG90OlxuICAgICAgICBmaW5pc2hUb2tlbih0dC5kb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2hhckNvZGVzLmNvbG9uOlxuICAgICAgICBmaW5pc2hUb2tlbih0dC5jb2xvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdW5leHBlY3RlZCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0SlNYRXhwclRva2VuKCkge1xuICBzdGF0ZS50b2tlbnMucHVzaChuZXcgVG9rZW4oKSk7XG4gIHN0YXRlLnN0YXJ0ID0gc3RhdGUucG9zO1xuICBqc3hSZWFkVG9rZW4oKTtcbn1cbiIsICJpbXBvcnQge2VhdFR5cGVUb2tlbiwgbG9va2FoZWFkVHlwZSwgbWF0Y2h9IGZyb20gXCIuLi90b2tlbml6ZXIvaW5kZXhcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQge2lzRmxvd0VuYWJsZWQsIGlzVHlwZVNjcmlwdEVuYWJsZWR9IGZyb20gXCIuLi90cmF2ZXJzZXIvYmFzZVwiO1xuaW1wb3J0IHtiYXNlUGFyc2VDb25kaXRpb25hbH0gZnJvbSBcIi4uL3RyYXZlcnNlci9leHByZXNzaW9uXCI7XG5pbXBvcnQge2Zsb3dQYXJzZVR5cGVBbm5vdGF0aW9ufSBmcm9tIFwiLi9mbG93XCI7XG5pbXBvcnQge3RzUGFyc2VUeXBlQW5ub3RhdGlvbn0gZnJvbSBcIi4vdHlwZXNjcmlwdFwiO1xuXG4vKipcbiAqIENvbW1vbiBwYXJzZXIgY29kZSBmb3IgVHlwZVNjcmlwdCBhbmQgRmxvdy5cbiAqL1xuXG4vLyBBbiBhcHBhcmVudCBjb25kaXRpb25hbCBleHByZXNzaW9uIGNvdWxkIGFjdHVhbGx5IGJlIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBpbiBhbiBhcnJvdyBmdW5jdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlZFBhcnNlQ29uZGl0aW9uYWwobm9Jbikge1xuICAvLyBJZiB3ZSBzZWUgPzosIHRoaXMgY2FuJ3QgcG9zc2libHkgYmUgYSB2YWxpZCBjb25kaXRpb25hbC4gdHlwZWRQYXJzZVBhcmVuSXRlbSB3aWxsIGJlIGNhbGxlZFxuICAvLyBsYXRlciB0byBmaW5pc2ggb2ZmIHRoZSBhcnJvdyBwYXJhbWV0ZXIuIFdlIGFsc28gbmVlZCB0byBoYW5kbGUgYmFyZSA/IHRva2VucyBmb3Igb3B0aW9uYWxcbiAgLy8gcGFyYW1ldGVycyB3aXRob3V0IHR5cGUgYW5ub3RhdGlvbnMsIGkuZS4gPywgYW5kID8pIC5cbiAgaWYgKG1hdGNoKHR0LnF1ZXN0aW9uKSkge1xuICAgIGNvbnN0IG5leHRUeXBlID0gbG9va2FoZWFkVHlwZSgpO1xuICAgIGlmIChuZXh0VHlwZSA9PT0gdHQuY29sb24gfHwgbmV4dFR5cGUgPT09IHR0LmNvbW1hIHx8IG5leHRUeXBlID09PSB0dC5wYXJlblIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYmFzZVBhcnNlQ29uZGl0aW9uYWwobm9Jbik7XG59XG5cbi8vIE5vdGU6IFRoZXNlIFwidHlwZSBjYXN0c1wiIGFyZSAqbm90KiB2YWxpZCBUUyBleHByZXNzaW9ucy5cbi8vIEJ1dCB3ZSBwYXJzZSB0aGVtIGhlcmUgYW5kIGNoYW5nZSB0aGVtIHdoZW4gY29tcGxldGluZyB0aGUgYXJyb3cgZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gdHlwZWRQYXJzZVBhcmVuSXRlbSgpIHtcbiAgZWF0VHlwZVRva2VuKHR0LnF1ZXN0aW9uKTtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICAgIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gICAgfVxuICB9XG59XG4iLCAiLyogZXNsaW50IG1heC1sZW46IDAgKi9cblxuLy8gQSByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIgb3BlcmF0ZXMgYnkgZGVmaW5pbmcgZnVuY3Rpb25zIGZvciBhbGxcbi8vIHN5bnRhY3RpYyBlbGVtZW50cywgYW5kIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgdGhvc2UsIGVhY2ggZnVuY3Rpb25cbi8vIGFkdmFuY2luZyB0aGUgaW5wdXQgc3RyZWFtIGFuZCByZXR1cm5pbmcgYW4gQVNUIG5vZGUuIFByZWNlZGVuY2Vcbi8vIG9mIGNvbnN0cnVjdHMgKGZvciBleGFtcGxlLCB0aGUgZmFjdCB0aGF0IGAheFsxXWAgbWVhbnMgYCEoeFsxXSlgXG4vLyBpbnN0ZWFkIG9mIGAoIXgpWzFdYCBpcyBoYW5kbGVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhlIHBhcnNlclxuLy8gZnVuY3Rpb24gdGhhdCBwYXJzZXMgdW5hcnkgcHJlZml4IG9wZXJhdG9ycyBpcyBjYWxsZWQgZmlyc3QsIGFuZFxuLy8gaW4gdHVybiBjYWxscyB0aGUgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYFtdYCBzdWJzY3JpcHRzIFx1MjAxNCB0aGF0XG4vLyB3YXksIGl0J2xsIHJlY2VpdmUgdGhlIG5vZGUgZm9yIGB4WzFdYCBhbHJlYWR5IHBhcnNlZCwgYW5kIHdyYXBzXG4vLyAqdGhhdCogaW4gdGhlIHVuYXJ5IG9wZXJhdG9yIG5vZGUuXG4vL1xuLy8gQWNvcm4gdXNlcyBhbiBbb3BlcmF0b3IgcHJlY2VkZW5jZSBwYXJzZXJdW29wcF0gdG8gaGFuZGxlIGJpbmFyeVxuLy8gb3BlcmF0b3IgcHJlY2VkZW5jZSwgYmVjYXVzZSBpdCBpcyBtdWNoIG1vcmUgY29tcGFjdCB0aGFuIHVzaW5nXG4vLyB0aGUgdGVjaG5pcXVlIG91dGxpbmVkIGFib3ZlLCB3aGljaCB1c2VzIGRpZmZlcmVudCwgbmVzdGluZ1xuLy8gZnVuY3Rpb25zIHRvIHNwZWNpZnkgcHJlY2VkZW5jZSwgZm9yIGFsbCBvZiB0aGUgdGVuIGJpbmFyeVxuLy8gcHJlY2VkZW5jZSBsZXZlbHMgdGhhdCBKYXZhU2NyaXB0IGRlZmluZXMuXG4vL1xuLy8gW29wcF06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3BlcmF0b3ItcHJlY2VkZW5jZV9wYXJzZXJcblxuaW1wb3J0IHtcbiAgZmxvd1BhcnNlQXJyb3csXG4gIGZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaCxcbiAgZmxvd1BhcnNlTWF5YmVBc3NpZ24sXG4gIGZsb3dQYXJzZVN1YnNjcmlwdCxcbiAgZmxvd1BhcnNlU3Vic2NyaXB0cyxcbiAgZmxvd1BhcnNlVmFyaWFuY2UsXG4gIGZsb3dTdGFydFBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbixcbiAgZmxvd1N0YXJ0UGFyc2VOZXdBcmd1bWVudHMsXG4gIGZsb3dTdGFydFBhcnNlT2JqUHJvcFZhbHVlLFxufSBmcm9tIFwiLi4vcGx1Z2lucy9mbG93XCI7XG5pbXBvcnQge2pzeFBhcnNlRWxlbWVudH0gZnJvbSBcIi4uL3BsdWdpbnMvanN4L2luZGV4XCI7XG5pbXBvcnQge3R5cGVkUGFyc2VDb25kaXRpb25hbCwgdHlwZWRQYXJzZVBhcmVuSXRlbX0gZnJvbSBcIi4uL3BsdWdpbnMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIHRzUGFyc2VBcnJvdyxcbiAgdHNQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaCxcbiAgdHNQYXJzZU1heWJlQXNzaWduLFxuICB0c1BhcnNlU3Vic2NyaXB0LFxuICB0c1BhcnNlVHlwZSxcbiAgdHNQYXJzZVR5cGVBc3NlcnRpb24sXG4gIHRzU3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24sXG4gIHRzU3RhcnRQYXJzZU9ialByb3BWYWx1ZSxcbn0gZnJvbSBcIi4uL3BsdWdpbnMvdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHtcbiAgZWF0LFxuICBJZGVudGlmaWVyUm9sZSxcbiAgbG9va2FoZWFkQ2hhckNvZGUsXG4gIGxvb2thaGVhZFR5cGUsXG4gIG1hdGNoLFxuICBuZXh0LFxuICBuZXh0VGVtcGxhdGVUb2tlbixcbiAgcG9wVHlwZUNvbnRleHQsXG4gIHB1c2hUeXBlQ29udGV4dCxcbiAgcmVzY2FuX2d0LFxuICByZXRva2VuaXplU2xhc2hBc1JlZ2V4LFxufSBmcm9tIFwiLi4vdG9rZW5pemVyL2luZGV4XCI7XG5pbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi4vdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Njb3BlfSBmcm9tIFwiLi4vdG9rZW5pemVyL3N0YXRlXCI7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQge2NoYXJDb2Rlc30gZnJvbSBcIi4uL3V0aWwvY2hhcmNvZGVzXCI7XG5pbXBvcnQge0lTX0lERU5USUZJRVJfU1RBUlR9IGZyb20gXCIuLi91dGlsL2lkZW50aWZpZXJcIjtcbmltcG9ydCB7Z2V0TmV4dENvbnRleHRJZCwgaXNGbG93RW5hYmxlZCwgaXNKU1hFbmFibGVkLCBpc1R5cGVTY3JpcHRFbmFibGVkLCBzdGF0ZX0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHtcbiAgbWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXIsXG4gIHBhcnNlQmluZGluZ0lkZW50aWZpZXIsXG4gIHBhcnNlTWF5YmVEZWZhdWx0LFxuICBwYXJzZVJlc3QsXG4gIHBhcnNlU3ByZWFkLFxufSBmcm9tIFwiLi9sdmFsXCI7XG5pbXBvcnQge1xuICBwYXJzZUJsb2NrLFxuICBwYXJzZUJsb2NrQm9keSxcbiAgcGFyc2VDbGFzcyxcbiAgcGFyc2VEZWNvcmF0b3JzLFxuICBwYXJzZUZ1bmN0aW9uLFxuICBwYXJzZUZ1bmN0aW9uUGFyYW1zLFxufSBmcm9tIFwiLi9zdGF0ZW1lbnRcIjtcbmltcG9ydCB7XG4gIGNhbkluc2VydFNlbWljb2xvbixcbiAgZWF0Q29udGV4dHVhbCxcbiAgZXhwZWN0LFxuICBleHBlY3RDb250ZXh0dWFsLFxuICBoYXNGb2xsb3dpbmdMaW5lQnJlYWssXG4gIGhhc1ByZWNlZGluZ0xpbmVCcmVhayxcbiAgaXNDb250ZXh0dWFsLFxuICB1bmV4cGVjdGVkLFxufSBmcm9tIFwiLi91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdG9wU3RhdGUge1xuICBcbiAgY29uc3RydWN0b3Ioc3RvcCkge1xuICAgIHRoaXMuc3RvcCA9IHN0b3A7XG4gIH1cbn1cblxuLy8gIyMjIEV4cHJlc3Npb24gcGFyc2luZ1xuXG4vLyBUaGVzZSBuZXN0LCBmcm9tIHRoZSBtb3N0IGdlbmVyYWwgZXhwcmVzc2lvbiB0eXBlIGF0IHRoZSB0b3AgdG9cbi8vICdhdG9taWMnLCBub25kaXZpc2libGUgZXhwcmVzc2lvbiB0eXBlcyBhdCB0aGUgYm90dG9tLiBNb3N0IG9mXG4vLyB0aGUgZnVuY3Rpb25zIHdpbGwgc2ltcGx5IGxldCB0aGUgZnVuY3Rpb24gKHMpIGJlbG93IHRoZW0gcGFyc2UsXG4vLyBhbmQsICppZiogdGhlIHN5bnRhY3RpYyBjb25zdHJ1Y3QgdGhleSBoYW5kbGUgaXMgcHJlc2VudCwgd3JhcFxuLy8gdGhlIEFTVCBub2RlIHRoYXQgdGhlIGlubmVyIHBhcnNlciBnYXZlIHRoZW0gaW4gYW5vdGhlciBub2RlLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbihub0luID0gZmFsc2UpIHtcbiAgcGFyc2VNYXliZUFzc2lnbihub0luKTtcbiAgaWYgKG1hdGNoKHR0LmNvbW1hKSkge1xuICAgIHdoaWxlIChlYXQodHQuY29tbWEpKSB7XG4gICAgICBwYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIG5vSW4gaXMgdXNlZCB3aGVuIHBhcnNpbmcgYSBmb3IgbG9vcCBzbyB0aGF0IHdlIGRvbid0IGludGVycHJldCBhIGZvbGxvd2luZyBcImluXCIgYXMgdGhlIGJpbmFyeVxuICogb3BlcmF0aW9yLlxuICogaXNXaXRoaW5QYXJlbnMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlJ3JlIHBhcnNpbmcgc29tZXRoaW5nIHRoYXQgbWlnaHQgYmUgYSBjb21tYSBleHByZXNzaW9uXG4gKiBvciBtaWdodCBiZSBhbiBhcnJvdyBmdW5jdGlvbiBvciBtaWdodCBiZSBhIEZsb3cgdHlwZSBhc3NlcnRpb24gKHdoaWNoIHJlcXVpcmVzIGV4cGxpY2l0IHBhcmVucykuXG4gKiBJbiB0aGVzZSBjYXNlcywgd2Ugc2hvdWxkIGFsbG93IDogYW5kID86IGFmdGVyIHRoZSBpbml0aWFsIFwibGVmdFwiIHBhcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1heWJlQXNzaWduKG5vSW4gPSBmYWxzZSwgaXNXaXRoaW5QYXJlbnMgPSBmYWxzZSkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHJldHVybiB0c1BhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICByZXR1cm4gZmxvd1BhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIH1cbn1cblxuLy8gUGFyc2UgYW4gYXNzaWdubWVudCBleHByZXNzaW9uLiBUaGlzIGluY2x1ZGVzIGFwcGxpY2F0aW9ucyBvZlxuLy8gb3BlcmF0b3JzIGxpa2UgYCs9YC5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhwcmVzc2lvbiB3YXMgYW4gYXJyb3cgZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpIHtcbiAgaWYgKG1hdGNoKHR0Ll95aWVsZCkpIHtcbiAgICBwYXJzZVlpZWxkKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG1hdGNoKHR0LnBhcmVuTCkgfHwgbWF0Y2godHQubmFtZSkgfHwgbWF0Y2godHQuX3lpZWxkKSkge1xuICAgIHN0YXRlLnBvdGVudGlhbEFycm93QXQgPSBzdGF0ZS5zdGFydDtcbiAgfVxuXG4gIGNvbnN0IHdhc0Fycm93ID0gcGFyc2VNYXliZUNvbmRpdGlvbmFsKG5vSW4pO1xuICBpZiAoaXNXaXRoaW5QYXJlbnMpIHtcbiAgICBwYXJzZVBhcmVuSXRlbSgpO1xuICB9XG4gIGlmIChzdGF0ZS50eXBlICYgVG9rZW5UeXBlLklTX0FTU0lHTikge1xuICAgIG5leHQoKTtcbiAgICBwYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gd2FzQXJyb3c7XG59XG5cbi8vIFBhcnNlIGEgdGVybmFyeSBjb25kaXRpb25hbCAoYD86YCkgb3BlcmF0b3IuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuZnVuY3Rpb24gcGFyc2VNYXliZUNvbmRpdGlvbmFsKG5vSW4pIHtcbiAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZUV4cHJPcHMobm9Jbik7XG4gIGlmICh3YXNBcnJvdykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHBhcnNlQ29uZGl0aW9uYWwobm9Jbik7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbChub0luKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkIHx8IGlzRmxvd0VuYWJsZWQpIHtcbiAgICB0eXBlZFBhcnNlQ29uZGl0aW9uYWwobm9Jbik7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlQ29uZGl0aW9uYWwobm9Jbik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2VQYXJzZUNvbmRpdGlvbmFsKG5vSW4pIHtcbiAgaWYgKGVhdCh0dC5xdWVzdGlvbikpIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gICAgZXhwZWN0KHR0LmNvbG9uKTtcbiAgICBwYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICB9XG59XG5cbi8vIFN0YXJ0IHRoZSBwcmVjZWRlbmNlIHBhcnNlci5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBmdW5jdGlvblxuZnVuY3Rpb24gcGFyc2VFeHByT3BzKG5vSW4pIHtcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZU1heWJlVW5hcnkoKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcGFyc2VFeHByT3Aoc3RhcnRUb2tlbkluZGV4LCAtMSwgbm9Jbik7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gUGFyc2UgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlIHBhcnNpbmdcbi8vIGFsZ29yaXRobS4gYGxlZnRgIGlzIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgb3BlcmF0b3IuXG4vLyBgbWluUHJlY2AgcHJvdmlkZXMgY29udGV4dCB0aGF0IGFsbG93cyB0aGUgZnVuY3Rpb24gdG8gc3RvcCBhbmRcbi8vIGRlZmVyIGZ1cnRoZXIgcGFyc2VyIHRvIG9uZSBvZiBpdHMgY2FsbGVycyB3aGVuIGl0IGVuY291bnRlcnMgYW5cbi8vIG9wZXJhdG9yIHRoYXQgaGFzIGEgbG93ZXIgcHJlY2VkZW5jZSB0aGFuIHRoZSBzZXQgaXQgaXMgcGFyc2luZy5cbmZ1bmN0aW9uIHBhcnNlRXhwck9wKHN0YXJ0VG9rZW5JbmRleCwgbWluUHJlYywgbm9Jbikge1xuICBpZiAoXG4gICAgaXNUeXBlU2NyaXB0RW5hYmxlZCAmJlxuICAgICh0dC5faW4gJiBUb2tlblR5cGUuUFJFQ0VERU5DRV9NQVNLKSA+IG1pblByZWMgJiZcbiAgICAhaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkgJiZcbiAgICAoZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpIHx8IGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3NhdGlzZmllcykpXG4gICkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gICAgcmVzY2FuX2d0KCk7XG4gICAgcGFyc2VFeHByT3Aoc3RhcnRUb2tlbkluZGV4LCBtaW5QcmVjLCBub0luKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcmVjID0gc3RhdGUudHlwZSAmIFRva2VuVHlwZS5QUkVDRURFTkNFX01BU0s7XG4gIGlmIChwcmVjID4gMCAmJiAoIW5vSW4gfHwgIW1hdGNoKHR0Ll9pbikpKSB7XG4gICAgaWYgKHByZWMgPiBtaW5QcmVjKSB7XG4gICAgICBjb25zdCBvcCA9IHN0YXRlLnR5cGU7XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAob3AgPT09IHR0Lm51bGxpc2hDb2FsZXNjaW5nKSB7XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0ubnVsbGlzaFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJoc1N0YXJ0VG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgICBwYXJzZU1heWJlVW5hcnkoKTtcbiAgICAgIC8vIEV4dGVuZCB0aGUgcmlnaHQgb3BlcmFuZCBvZiB0aGlzIG9wZXJhdG9yIGlmIHBvc3NpYmxlLlxuICAgICAgcGFyc2VFeHByT3AocmhzU3RhcnRUb2tlbkluZGV4LCBvcCAmIFRva2VuVHlwZS5JU19SSUdIVF9BU1NPQ0lBVElWRSA/IHByZWMgLSAxIDogcHJlYywgbm9Jbik7XG4gICAgICBpZiAob3AgPT09IHR0Lm51bGxpc2hDb2FsZXNjaW5nKSB7XG4gICAgICAgIHN0YXRlLnRva2Vuc1tzdGFydFRva2VuSW5kZXhdLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0cysrO1xuICAgICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLm51bU51bGxpc2hDb2FsZXNjZUVuZHMrKztcbiAgICAgIH1cbiAgICAgIC8vIENvbnRpbnVlIHdpdGggYW55IGZ1dHVyZSBvcGVyYXRvciBob2xkaW5nIHRoaXMgZXhwcmVzc2lvbiBhcyB0aGUgbGVmdCBvcGVyYW5kLlxuICAgICAgcGFyc2VFeHByT3Aoc3RhcnRUb2tlbkluZGV4LCBtaW5QcmVjLCBub0luKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2UgdW5hcnkgb3BlcmF0b3JzLCBib3RoIHByZWZpeCBhbmQgcG9zdGZpeC5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBmdW5jdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1heWJlVW5hcnkoKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkICYmICFpc0pTWEVuYWJsZWQgJiYgZWF0KHR0Lmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlQXNzZXJ0aW9uKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZSkgJiZcbiAgICBsb29rYWhlYWRDaGFyQ29kZSgpID09PSBjaGFyQ29kZXMubGVmdEN1cmx5QnJhY2UgJiZcbiAgICAhaGFzRm9sbG93aW5nTGluZUJyZWFrKClcbiAgKSB7XG4gICAgcGFyc2VNb2R1bGVFeHByZXNzaW9uKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzdGF0ZS50eXBlICYgVG9rZW5UeXBlLklTX1BSRUZJWCkge1xuICAgIG5leHQoKTtcbiAgICBwYXJzZU1heWJlVW5hcnkoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlRXhwclN1YnNjcmlwdHMoKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgd2hpbGUgKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfUE9TVEZJWCAmJiAhY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAvLyBUaGUgdG9rZW5pemVyIGNhbGxzIGV2ZXJ5dGhpbmcgYSBwcmVpbmNyZW1lbnQsIHNvIG1ha2UgaXQgYSBwb3N0aW5jcmVtZW50IHdoZW5cbiAgICAvLyB3ZSBzZWUgaXQgaW4gdGhhdCBjb250ZXh0LlxuICAgIGlmIChzdGF0ZS50eXBlID09PSB0dC5wcmVJbmNEZWMpIHtcbiAgICAgIHN0YXRlLnR5cGUgPSB0dC5wb3N0SW5jRGVjO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBQYXJzZSBjYWxsLCBkb3QsIGFuZCBgW11gLXN1YnNjcmlwdCBleHByZXNzaW9ucy5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBmdW5jdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUV4cHJTdWJzY3JpcHRzKCkge1xuICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlRXhwckF0b20oKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCk7XG4gIC8vIElmIHRoZXJlIHdhcyBhbnkgb3B0aW9uYWwgY2hhaW4gb3BlcmF0aW9uLCB0aGUgc3RhcnQgdG9rZW4gd291bGQgYmUgbWFya2VkXG4gIC8vIGFzIHN1Y2gsIHNvIGFsc28gbWFyayB0aGUgZW5kIG5vdy5cbiAgaWYgKHN0YXRlLnRva2Vucy5sZW5ndGggPiBzdGFydFRva2VuSW5kZXggJiYgc3RhdGUudG9rZW5zW3N0YXJ0VG9rZW5JbmRleF0uaXNPcHRpb25hbENoYWluU3RhcnQpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzT3B0aW9uYWxDaGFpbkVuZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzID0gZmFsc2UpIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlU3Vic2NyaXB0cyhzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyA9IGZhbHNlKSB7XG4gIGNvbnN0IHN0b3BTdGF0ZSA9IG5ldyBTdG9wU3RhdGUoZmFsc2UpO1xuICBkbyB7XG4gICAgcGFyc2VTdWJzY3JpcHQoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzLCBzdG9wU3RhdGUpO1xuICB9IHdoaWxlICghc3RvcFN0YXRlLnN0b3AgJiYgIXN0YXRlLmVycm9yKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTdWJzY3JpcHQoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzLCBzdG9wU3RhdGUpIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c1BhcnNlU3Vic2NyaXB0KHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbiAgfSBlbHNlIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgZmxvd1BhcnNlU3Vic2NyaXB0KHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlUGFyc2VTdWJzY3JpcHQoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzLCBzdG9wU3RhdGUpO1xuICB9XG59XG5cbi8qKiBTZXQgJ3N0YXRlLnN0b3AgPSB0cnVlJyB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBzdG9wIHBhcnNpbmcgc3Vic2NyaXB0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGFyc2VTdWJzY3JpcHQoXG4gIHN0YXJ0VG9rZW5JbmRleCxcbiAgbm9DYWxscyxcbiAgc3RvcFN0YXRlLFxuKSB7XG4gIGlmICghbm9DYWxscyAmJiBlYXQodHQuZG91YmxlQ29sb24pKSB7XG4gICAgcGFyc2VOb0NhbGxFeHByKCk7XG4gICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICAgIC8vIFByb3BhZ2F0ZSBzdGFydFRva2VuSW5kZXggc28gdGhhdCBgYTo6Yj8uKClgIHdpbGwga2VlcCBgYWAgYXMgdGhlIGZpcnN0IHRva2VuLiBXZSBtYXkgd2FudFxuICAgIC8vIHRvIHJldmlzaXQgdGhpcyBpbiB0aGUgZnV0dXJlIHdoZW4gZnVsbHkgc3VwcG9ydGluZyBiaW5kIHN5bnRheC5cbiAgICBwYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzKTtcbiAgfSBlbHNlIGlmIChtYXRjaCh0dC5xdWVzdGlvbkRvdCkpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhcnRUb2tlbkluZGV4XS5pc09wdGlvbmFsQ2hhaW5TdGFydCA9IHRydWU7XG4gICAgaWYgKG5vQ2FsbHMgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5wYXJlbkwpIHtcbiAgICAgIHN0b3BTdGF0ZS5zdG9wID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmV4dCgpO1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uc3Vic2NyaXB0U3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcblxuICAgIGlmIChlYXQodHQuYnJhY2tldEwpKSB7XG4gICAgICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gICAgfSBlbHNlIGlmIChlYXQodHQucGFyZW5MKSkge1xuICAgICAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZWF0KHR0LmRvdCkpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG4gICAgcGFyc2VNYXliZVByaXZhdGVOYW1lKCk7XG4gIH0gZWxzZSBpZiAoZWF0KHR0LmJyYWNrZXRMKSkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uc3Vic2NyaXB0U3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcbiAgICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICBleHBlY3QodHQuYnJhY2tldFIpO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIG1hdGNoKHR0LnBhcmVuTCkpIHtcbiAgICBpZiAoYXRQb3NzaWJsZUFzeW5jKCkpIHtcbiAgICAgIC8vIFdlIHNlZSBcImFzeW5jXCIsIGJ1dCBpdCdzIHBvc3NpYmxlIGl0J3MgYSB1c2FnZSBvZiB0aGUgbmFtZSBcImFzeW5jXCIuIFBhcnNlIGFzIGlmIGl0J3MgYVxuICAgICAgLy8gZnVuY3Rpb24gY2FsbCwgYW5kIGlmIHdlIHNlZSBhbiBhcnJvdyBsYXRlciwgYmFja3RyYWNrIGFuZCByZS1wYXJzZSBhcyBhIHBhcmFtZXRlciBsaXN0LlxuICAgICAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICAgICAgY29uc3QgYXN5bmNTdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgbmV4dCgpO1xuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuXG4gICAgICBjb25zdCBjYWxsQ29udGV4dElkID0gZ2V0TmV4dENvbnRleHRJZCgpO1xuXG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNhbGxDb250ZXh0SWQ7XG4gICAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNhbGxDb250ZXh0SWQ7XG5cbiAgICAgIGlmIChzaG91bGRQYXJzZUFzeW5jQXJyb3coKSkge1xuICAgICAgICAvLyBXZSBoaXQgYW4gYXJyb3csIHNvIGJhY2t0cmFjayBhbmQgc3RhcnQgYWdhaW4gcGFyc2luZyBmdW5jdGlvbiBwYXJhbWV0ZXJzLlxuICAgICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5zY29wZURlcHRoKys7XG5cbiAgICAgICAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICAgICAgICBwYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oYXN5bmNTdGFydFRva2VuSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG4gICAgICBjb25zdCBjYWxsQ29udGV4dElkID0gZ2V0TmV4dENvbnRleHRJZCgpO1xuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjYWxsQ29udGV4dElkO1xuICAgICAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygpO1xuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjYWxsQ29udGV4dElkO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtYXRjaCh0dC5iYWNrUXVvdGUpKSB7XG4gICAgLy8gVGFnZ2VkIHRlbXBsYXRlIGV4cHJlc3Npb24uXG4gICAgcGFyc2VUZW1wbGF0ZSgpO1xuICB9IGVsc2Uge1xuICAgIHN0b3BTdGF0ZS5zdG9wID0gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXRQb3NzaWJsZUFzeW5jKCkge1xuICAvLyBUaGlzIHdhcyBtYWRlIGxlc3Mgc3RyaWN0IHRoYW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gdG8gYXZvaWQgcGFzc2luZyBhcm91bmQgbm9kZXMsIGJ1dCBpdFxuICAvLyBzaG91bGQgYmUgc2FmZSB0byBoYXZlIHJhcmUgZmFsc2UgcG9zaXRpdmVzIGhlcmUuXG4gIHJldHVybiAoXG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jICYmXG4gICAgIWNhbkluc2VydFNlbWljb2xvbigpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCkge1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuICB3aGlsZSAoIWVhdCh0dC5wYXJlblIpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICAgIGlmIChlYXQodHQucGFyZW5SKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUV4cHJMaXN0SXRlbShmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkUGFyc2VBc3luY0Fycm93KCkge1xuICByZXR1cm4gbWF0Y2godHQuY29sb24pIHx8IG1hdGNoKHR0LmFycm93KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzU3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oKTtcbiAgfSBlbHNlIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgZmxvd1N0YXJ0UGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKCk7XG4gIH1cbiAgZXhwZWN0KHR0LmFycm93KTtcbiAgcGFyc2VBcnJvd0V4cHJlc3Npb24oc3RhcnRUb2tlbkluZGV4KTtcbn1cblxuLy8gUGFyc2UgYSBuby1jYWxsIGV4cHJlc3Npb24gKGxpa2UgYXJndW1lbnQgb2YgYG5ld2Agb3IgYDo6YCBvcGVyYXRvcnMpLlxuXG5mdW5jdGlvbiBwYXJzZU5vQ2FsbEV4cHIoKSB7XG4gIGNvbnN0IHN0YXJ0VG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHBhcnNlRXhwckF0b20oKTtcbiAgcGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgdHJ1ZSk7XG59XG5cbi8vIFBhcnNlIGFuIGF0b21pYyBleHByZXNzaW9uIFx1MjAxNCBlaXRoZXIgYSBzaW5nbGUgdG9rZW4gdGhhdCBpcyBhblxuLy8gZXhwcmVzc2lvbiwgYW4gZXhwcmVzc2lvbiBzdGFydGVkIGJ5IGEga2V5d29yZCBsaWtlIGBmdW5jdGlvbmAgb3Jcbi8vIGBuZXdgLCBvciBhbiBleHByZXNzaW9uIHdyYXBwZWQgaW4gcHVuY3R1YXRpb24gbGlrZSBgKClgLCBgW11gLFxuLy8gb3IgYHt9YC5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyc2VkIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRXhwckF0b20oKSB7XG4gIGlmIChlYXQodHQubW9kdWxvKSkge1xuICAgIC8vIFY4IGludHJpbnNpYyBleHByZXNzaW9uLiBKdXN0IHBhcnNlIHRoZSBpZGVudGlmaWVyLCBhbmQgdGhlIGZ1bmN0aW9uIGludm9jYXRpb24gaXMgcGFyc2VkXG4gICAgLy8gbmF0dXJhbGx5LlxuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChtYXRjaCh0dC5qc3hUZXh0KSB8fCBtYXRjaCh0dC5qc3hFbXB0eVRleHQpKSB7XG4gICAgcGFyc2VMaXRlcmFsKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSAmJiBpc0pTWEVuYWJsZWQpIHtcbiAgICBzdGF0ZS50eXBlID0gdHQuanN4VGFnU3RhcnQ7XG4gICAganN4UGFyc2VFbGVtZW50KCk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNhbkJlQXJyb3cgPSBzdGF0ZS5wb3RlbnRpYWxBcnJvd0F0ID09PSBzdGF0ZS5zdGFydDtcbiAgc3dpdGNoIChzdGF0ZS50eXBlKSB7XG4gICAgY2FzZSB0dC5zbGFzaDpcbiAgICBjYXNlIHR0LmFzc2lnbjpcbiAgICAgIHJldG9rZW5pemVTbGFzaEFzUmVnZXgoKTtcbiAgICAvLyBGYWxsIHRocm91Z2guXG5cbiAgICBjYXNlIHR0Ll9zdXBlcjpcbiAgICBjYXNlIHR0Ll90aGlzOlxuICAgIGNhc2UgdHQucmVnZXhwOlxuICAgIGNhc2UgdHQubnVtOlxuICAgIGNhc2UgdHQuYmlnaW50OlxuICAgIGNhc2UgdHQuZGVjaW1hbDpcbiAgICBjYXNlIHR0LnN0cmluZzpcbiAgICBjYXNlIHR0Ll9udWxsOlxuICAgIGNhc2UgdHQuX3RydWU6XG4gICAgY2FzZSB0dC5fZmFsc2U6XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlIHR0Ll9pbXBvcnQ6XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAobWF0Y2godHQuZG90KSkge1xuICAgICAgICAvLyBpbXBvcnQubWV0YVxuICAgICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5uYW1lO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5uYW1lOiB7XG4gICAgICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgY29uc3QgZnVuY3Rpb25TdGFydCA9IHN0YXRlLnN0YXJ0O1xuICAgICAgY29uc3QgY29udGV4dHVhbEtleXdvcmQgPSBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZDtcbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fYXdhaXQpIHtcbiAgICAgICAgcGFyc2VBd2FpdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jICYmXG4gICAgICAgIG1hdGNoKHR0Ll9mdW5jdGlvbikgJiZcbiAgICAgICAgIWNhbkluc2VydFNlbWljb2xvbigpXG4gICAgICApIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBwYXJzZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY2FuQmVBcnJvdyAmJlxuICAgICAgICBjb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jICYmXG4gICAgICAgICFjYW5JbnNlcnRTZW1pY29sb24oKSAmJlxuICAgICAgICBtYXRjaCh0dC5uYW1lKVxuICAgICAgKSB7XG4gICAgICAgIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgICAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihmYWxzZSk7XG4gICAgICAgIGV4cGVjdCh0dC5hcnJvdyk7XG4gICAgICAgIC8vIGxldCBmb28gPSBhc3luYyBiYXIgPT4ge307XG4gICAgICAgIHBhcnNlQXJyb3dFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaCh0dC5fZG8pICYmICFjYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHBhcnNlQmxvY2soKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FuQmVBcnJvdyAmJiAhY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgbWF0Y2godHQuYXJyb3cpKSB7XG4gICAgICAgIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgICAgbWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXIoZmFsc2UpO1xuICAgICAgICBleHBlY3QodHQuYXJyb3cpO1xuICAgICAgICBwYXJzZUFycm93RXhwcmVzc2lvbihzdGFydFRva2VuSW5kZXgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLkFjY2VzcztcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYXNlIHR0Ll9kbzoge1xuICAgICAgbmV4dCgpO1xuICAgICAgcGFyc2VCbG9jaygpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNhc2UgdHQucGFyZW5MOiB7XG4gICAgICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlUGFyZW5BbmREaXN0aW5ndWlzaEV4cHJlc3Npb24oY2FuQmVBcnJvdyk7XG4gICAgICByZXR1cm4gd2FzQXJyb3c7XG4gICAgfVxuXG4gICAgY2FzZSB0dC5icmFja2V0TDpcbiAgICAgIG5leHQoKTtcbiAgICAgIHBhcnNlRXhwckxpc3QodHQuYnJhY2tldFIsIHRydWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5icmFjZUw6XG4gICAgICBwYXJzZU9iaihmYWxzZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5fZnVuY3Rpb246XG4gICAgICBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5hdDpcbiAgICAgIHBhcnNlRGVjb3JhdG9ycygpO1xuICAgIC8vIEZhbGwgdGhyb3VnaC5cblxuICAgIGNhc2UgdHQuX2NsYXNzOlxuICAgICAgcGFyc2VDbGFzcyhmYWxzZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlIHR0Ll9uZXc6XG4gICAgICBwYXJzZU5ldygpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSB0dC5iYWNrUXVvdGU6XG4gICAgICBwYXJzZVRlbXBsYXRlKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlIHR0LmRvdWJsZUNvbG9uOiB7XG4gICAgICBuZXh0KCk7XG4gICAgICBwYXJzZU5vQ2FsbEV4cHIoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYXNlIHR0Lmhhc2g6IHtcbiAgICAgIGNvbnN0IGNvZGUgPSBsb29rYWhlYWRDaGFyQ29kZSgpO1xuICAgICAgaWYgKElTX0lERU5USUZJRVJfU1RBUlRbY29kZV0gfHwgY29kZSA9PT0gY2hhckNvZGVzLmJhY2tzbGFzaCkge1xuICAgICAgICBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIC8vIFNtYXJ0IHBpcGVsaW5lIHRvcGljIHJlZmVyZW5jZS5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdW5leHBlY3RlZCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWF5YmVQcml2YXRlTmFtZSgpIHtcbiAgZWF0KHR0Lmhhc2gpO1xuICBwYXJzZUlkZW50aWZpZXIoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSB7XG4gIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIGlmIChlYXQodHQuZG90KSkge1xuICAgIC8vIGZ1bmN0aW9uLnNlbnRcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxuICBwYXJzZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGl0ZXJhbCgpIHtcbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbkV4cHJlc3Npb24oKSB7XG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgZXhwZWN0KHR0LnBhcmVuUik7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBleHByZXNzaW9uLlxuZnVuY3Rpb24gcGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihjYW5CZUFycm93KSB7XG4gIC8vIEFzc3VtZSB0aGlzIGlzIGEgbm9ybWFsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiwgYnV0IGlmIHdlIHNlZSBhbiBhcnJvdywgd2UnbGwgYmFpbCBhbmRcbiAgLy8gc3RhcnQgb3ZlciBhcyBhIHBhcmFtZXRlciBsaXN0LlxuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG5cbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG5cbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcblxuICB3aGlsZSAoIW1hdGNoKHR0LnBhcmVuUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgICAgaWYgKG1hdGNoKHR0LnBhcmVuUikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKHR0LmVsbGlwc2lzKSkge1xuICAgICAgcGFyc2VSZXN0KGZhbHNlIC8qIGlzQmxvY2tTY29wZSAqLyk7XG4gICAgICBwYXJzZVBhcmVuSXRlbSgpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGVjdCh0dC5wYXJlblIpO1xuXG4gIGlmIChjYW5CZUFycm93ICYmIHNob3VsZFBhcnNlQXJyb3coKSkge1xuICAgIGNvbnN0IHdhc0Fycm93ID0gcGFyc2VBcnJvdygpO1xuICAgIGlmICh3YXNBcnJvdykge1xuICAgICAgLy8gSXQgd2FzIGFuIGFycm93IGZ1bmN0aW9uIHRoaXMgd2hvbGUgdGltZSwgc28gc3RhcnQgb3ZlciBhbmQgcGFyc2UgaXQgYXMgcGFyYW1zIHNvIHRoYXQgd2VcbiAgICAgIC8vIGdldCBwcm9wZXIgdG9rZW4gYW5ub3RhdGlvbnMuXG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgIC8vIERvbid0IHNwZWNpZnkgYSBjb250ZXh0IElEIGJlY2F1c2UgYXJyb3cgZnVuY3Rpb25zIGRvbid0IG5lZWQgYSBjb250ZXh0IElELlxuICAgICAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICAgICAgcGFyc2VBcnJvdygpO1xuICAgICAgcGFyc2VBcnJvd0V4cHJlc3Npb24oc3RhcnRUb2tlbkluZGV4KTtcbiAgICAgIGlmIChzdGF0ZS5lcnJvcikge1xuICAgICAgICAvLyBOZXZlcm1pbmQhIFRoaXMgbXVzdCBoYXZlIGJlZW4gc29tZXRoaW5nIHRoYXQgbG9va3MgdmVyeSBtdWNoIGxpa2UgYW5cbiAgICAgICAgLy8gYXJyb3cgZnVuY3Rpb24gYnV0IHdoZXJlIGl0cyBcInBhcmFtZXRlciBsaXN0XCIgaXNuJ3QgYWN0dWFsbHkgYSB2YWxpZFxuICAgICAgICAvLyBwYXJhbWV0ZXIgbGlzdC4gRm9yY2Ugbm9uLWFycm93IHBhcnNpbmcuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYWxhbmdwaWVyY2Uvc3VjcmFzZS9pc3N1ZXMvNjY2IGZvciBhbiBleGFtcGxlLlxuICAgICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgICAgcGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUGFyc2VBcnJvdygpIHtcbiAgcmV0dXJuIG1hdGNoKHR0LmNvbG9uKSB8fCAhY2FuSW5zZXJ0U2VtaWNvbG9uKCk7XG59XG5cbi8vIFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgYW4gYXJyb3cgdG9rZW4uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJvdygpIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICByZXR1cm4gdHNQYXJzZUFycm93KCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIHJldHVybiBmbG93UGFyc2VBcnJvdygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBlYXQodHQuYXJyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFyZW5JdGVtKCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCB8fCBpc0Zsb3dFbmFibGVkKSB7XG4gICAgdHlwZWRQYXJzZVBhcmVuSXRlbSgpO1xuICB9XG59XG5cbi8vIE5ldydzIHByZWNlZGVuY2UgaXMgc2xpZ2h0bHkgdHJpY2t5LiBJdCBtdXN0IGFsbG93IGl0cyBhcmd1bWVudCB0b1xuLy8gYmUgYSBgW11gIG9yIGRvdCBzdWJzY3JpcHQgZXhwcmVzc2lvbiwgYnV0IG5vdCBhIGNhbGwgXHUyMDE0IGF0IGxlYXN0LFxuLy8gbm90IHdpdGhvdXQgd3JhcHBpbmcgaXQgaW4gcGFyZW50aGVzZXMuIFRodXMsIGl0IHVzZXMgdGhlIG5vQ2FsbHNcbi8vIGFyZ3VtZW50IHRvIHBhcnNlU3Vic2NyaXB0cyB0byBwcmV2ZW50IGl0IGZyb20gY29uc3VtaW5nIHRoZVxuLy8gYXJndW1lbnQgbGlzdC5cbmZ1bmN0aW9uIHBhcnNlTmV3KCkge1xuICBleHBlY3QodHQuX25ldyk7XG4gIGlmIChlYXQodHQuZG90KSkge1xuICAgIC8vIG5ldy50YXJnZXRcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcGFyc2VOZXdDYWxsZWUoKTtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93U3RhcnRQYXJzZU5ld0FyZ3VtZW50cygpO1xuICB9XG4gIGlmIChlYXQodHQucGFyZW5MKSkge1xuICAgIHBhcnNlRXhwckxpc3QodHQucGFyZW5SKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZU5ld0NhbGxlZSgpIHtcbiAgcGFyc2VOb0NhbGxFeHByKCk7XG4gIGVhdCh0dC5xdWVzdGlvbkRvdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlKCkge1xuICAvLyBGaW5pc2ggYCwgcmVhZCBxdWFzaVxuICBuZXh0VGVtcGxhdGVUb2tlbigpO1xuICAvLyBGaW5pc2ggcXVhc2ksIHJlYWQgJHtcbiAgbmV4dFRlbXBsYXRlVG9rZW4oKTtcbiAgd2hpbGUgKCFtYXRjaCh0dC5iYWNrUXVvdGUpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGV4cGVjdCh0dC5kb2xsYXJCcmFjZUwpO1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIC8vIEZpbmlzaCB9LCByZWFkIHF1YXNpXG4gICAgbmV4dFRlbXBsYXRlVG9rZW4oKTtcbiAgICAvLyBGaW5pc2ggcXVhc2ksIHJlYWQgZWl0aGVyICR7IG9yIGBcbiAgICBuZXh0VGVtcGxhdGVUb2tlbigpO1xuICB9XG4gIG5leHQoKTtcbn1cblxuLy8gUGFyc2UgYW4gb2JqZWN0IGxpdGVyYWwgb3IgYmluZGluZyBwYXR0ZXJuLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT2JqKGlzUGF0dGVybiwgaXNCbG9ja1Njb3BlKSB7XG4gIC8vIEF0dGFjaCBhIGNvbnRleHQgSUQgdG8gdGhlIG9iamVjdCBvcGVuIGFuZCBjbG9zZSBicmFjZSBhbmQgZWFjaCBvYmplY3Qga2V5LlxuICBjb25zdCBjb250ZXh0SWQgPSBnZXROZXh0Q29udGV4dElkKCk7XG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgbmV4dCgpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcblxuICB3aGlsZSAoIWVhdCh0dC5icmFjZVIpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICAgIGlmIChlYXQodHQuYnJhY2VSKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaXNHZW5lcmF0b3IgPSBmYWxzZTtcbiAgICBpZiAobWF0Y2godHQuZWxsaXBzaXMpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgICAgIHBhcnNlU3ByZWFkKCk7XG4gICAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICAgIC8vIE1hcmsgcm9sZSB3aGVuIHRoZSBvbmx5IHRoaW5nIGJlaW5nIHNwcmVhZCBvdmVyIGlzIGFuIGlkZW50aWZpZXIuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbnMubGVuZ3RoID09PSBwcmV2aW91c0luZGV4ICsgMikge1xuICAgICAgICAgIG1hcmtQcmlvckJpbmRpbmdJZGVudGlmaWVyKGlzQmxvY2tTY29wZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVhdCh0dC5icmFjZVIpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNQYXR0ZXJuKSB7XG4gICAgICBpc0dlbmVyYXRvciA9IGVhdCh0dC5zdGFyKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzUGF0dGVybiAmJiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSkge1xuICAgICAgaWYgKGlzR2VuZXJhdG9yKSB1bmV4cGVjdGVkKCk7XG5cbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgaWYgKFxuICAgICAgICBtYXRjaCh0dC5jb2xvbikgfHxcbiAgICAgICAgbWF0Y2godHQucGFyZW5MKSB8fFxuICAgICAgICBtYXRjaCh0dC5icmFjZVIpIHx8XG4gICAgICAgIG1hdGNoKHR0LmVxKSB8fFxuICAgICAgICBtYXRjaCh0dC5jb21tYSlcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIGlzIGEga2V5IGNhbGxlZCBcImFzeW5jXCIgcmF0aGVyIHRoYW4gYW4gYXN5bmMgZnVuY3Rpb24uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWF0Y2godHQuc3RhcikpIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgaXNHZW5lcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlUHJvcGVydHlOYW1lKGNvbnRleHRJZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlUHJvcGVydHlOYW1lKGNvbnRleHRJZCk7XG4gICAgfVxuXG4gICAgcGFyc2VPYmpQcm9wVmFsdWUoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUsIGNvbnRleHRJZCk7XG4gIH1cblxuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbn1cblxuZnVuY3Rpb24gaXNHZXR0ZXJPclNldHRlck1ldGhvZChpc1BhdHRlcm4pIHtcbiAgLy8gV2UgZ28gb2ZmIG9mIHRoZSBuZXh0IGFuZCBkb24ndCBib3RoZXIgY2hlY2tpbmcgaWYgdGhlIG5vZGUga2V5IGlzIGFjdHVhbGx5IFwiZ2V0XCIgb3IgXCJzZXRcIi5cbiAgLy8gVGhpcyBsZXRzIHVzIGF2b2lkIGdlbmVyYXRpbmcgYSBub2RlLCBhbmQgc2hvdWxkIG9ubHkgbWFrZSB0aGUgdmFsaWRhdGlvbiB3b3JzZS5cbiAgcmV0dXJuIChcbiAgICAhaXNQYXR0ZXJuICYmXG4gICAgKG1hdGNoKHR0LnN0cmluZykgfHwgLy8gZ2V0IFwic3RyaW5nXCIoKSB7fVxuICAgICAgbWF0Y2godHQubnVtKSB8fCAvLyBnZXQgMSgpIHt9XG4gICAgICBtYXRjaCh0dC5icmFja2V0TCkgfHwgLy8gZ2V0IFtcInN0cmluZ1wiXSgpIHt9XG4gICAgICBtYXRjaCh0dC5uYW1lKSB8fCAvLyBnZXQgZm9vKCkge31cbiAgICAgICEhKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfS0VZV09SRCkpIC8vIGdldCBkZWJ1Z2dlcigpIHt9XG4gICk7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhIG1ldGhvZC5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0TWV0aG9kKGlzUGF0dGVybiwgb2JqZWN0Q29udGV4dElkKSB7XG4gIC8vIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbW9kaWZpZXJzIGJlY2F1c2Ugb2JqZWN0IG1ldGhvZHMgY2FuJ3QgaGF2ZSBvcHRpb25hbCBib2RpZXMsIHNvXG4gIC8vIHRoZSBzdGFydCB3aWxsIG5ldmVyIGJlIHVzZWQuXG4gIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgaWYgKG1hdGNoKHR0LnBhcmVuTCkpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB1bmV4cGVjdGVkKCk7XG4gICAgcGFyc2VNZXRob2QoZnVuY3Rpb25TdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNHZXR0ZXJPclNldHRlck1ldGhvZChpc1BhdHRlcm4pKSB7XG4gICAgcGFyc2VQcm9wZXJ0eU5hbWUob2JqZWN0Q29udGV4dElkKTtcbiAgICBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCAvKiBpc0NvbnN0cnVjdG9yICovIGZhbHNlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUpIHtcbiAgaWYgKGVhdCh0dC5jb2xvbikpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICBwYXJzZU1heWJlRGVmYXVsdChpc0Jsb2NrU2NvcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZU1heWJlQXNzaWduKGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2luY2UgdGhlcmUncyBubyBjb2xvbiwgd2UgYXNzdW1lIHRoaXMgaXMgYW4gb2JqZWN0IHNob3J0aGFuZC5cblxuICAvLyBJZiB3ZSdyZSBpbiBhIGRlc3RydWN0dXJpbmcsIHdlJ3ZlIG5vdyBkaXNjb3ZlcmVkIHRoYXQgdGhlIGtleSB3YXMgYWN0dWFsbHkgYW4gYXNzaWduZWUsIHNvXG4gIC8vIHdlIG5lZWQgdG8gdGFnIGl0IGFzIGEgZGVjbGFyYXRpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2NvcGUuIE90aGVyd2lzZSwgd2UgbWlnaHQgbmVlZCB0b1xuICAvLyB0cmFuc2Zvcm0gaXQgb24gYWNjZXNzLCBzbyBtYXJrIGl0IGFzIGEgbm9ybWFsIG9iamVjdCBzaG9ydGhhbmQuXG4gIGxldCBpZGVudGlmaWVyUm9sZTtcbiAgaWYgKGlzUGF0dGVybikge1xuICAgIGlmIChzdGF0ZS5zY29wZURlcHRoID09PSAwKSB7XG4gICAgICBpZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb247XG4gICAgfSBlbHNlIGlmIChpc0Jsb2NrU2NvcGUpIHtcbiAgICAgIGlkZW50aWZpZXJSb2xlID0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZDtcbiAgfVxuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gaWRlbnRpZmllclJvbGU7XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGtub3cgdGhpcyB0byBiZSBhIHBhdHRlcm4gb3IgaWYgd2UncmUgaW4gYW4gYW1iaWd1b3VzIGNvbnRleHQsIGFsbG93XG4gIC8vIHBhcnNpbmcgYXMgaWYgdGhlcmUncyBhIGRlZmF1bHQgdmFsdWUuXG4gIHBhcnNlTWF5YmVEZWZhdWx0KGlzQmxvY2tTY29wZSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqUHJvcFZhbHVlKFxuICBpc1BhdHRlcm4sXG4gIGlzQmxvY2tTY29wZSxcbiAgb2JqZWN0Q29udGV4dElkLFxuKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNTdGFydFBhcnNlT2JqUHJvcFZhbHVlKCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGZsb3dTdGFydFBhcnNlT2JqUHJvcFZhbHVlKCk7XG4gIH1cbiAgY29uc3Qgd2FzTWV0aG9kID0gcGFyc2VPYmplY3RNZXRob2QoaXNQYXR0ZXJuLCBvYmplY3RDb250ZXh0SWQpO1xuICBpZiAoIXdhc01ldGhvZCkge1xuICAgIHBhcnNlT2JqZWN0UHJvcGVydHkoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb3BlcnR5TmFtZShvYmplY3RDb250ZXh0SWQpIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VWYXJpYW5jZSgpO1xuICB9XG4gIGlmIChlYXQodHQuYnJhY2tldEwpKSB7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBvYmplY3RDb250ZXh0SWQ7XG4gICAgcGFyc2VNYXliZUFzc2lnbigpO1xuICAgIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBvYmplY3RDb250ZXh0SWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG1hdGNoKHR0Lm51bSkgfHwgbWF0Y2godHQuc3RyaW5nKSB8fCBtYXRjaCh0dC5iaWdpbnQpIHx8IG1hdGNoKHR0LmRlY2ltYWwpKSB7XG4gICAgICBwYXJzZUV4cHJBdG9tKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlTWF5YmVQcml2YXRlTmFtZSgpO1xuICAgIH1cblxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5PYmplY3RLZXk7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBvYmplY3RDb250ZXh0SWQ7XG4gIH1cbn1cblxuLy8gUGFyc2Ugb2JqZWN0IG9yIGNsYXNzIG1ldGhvZC5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCBpc0NvbnN0cnVjdG9yKSB7XG4gIGNvbnN0IGZ1bmNDb250ZXh0SWQgPSBnZXROZXh0Q29udGV4dElkKCk7XG5cbiAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBjb25zdCBhbGxvd01vZGlmaWVycyA9IGlzQ29uc3RydWN0b3I7IC8vIEZvciBUeXBlU2NyaXB0IHBhcmFtZXRlciBwcm9wZXJ0aWVzXG4gIHBhcnNlRnVuY3Rpb25QYXJhbXMoYWxsb3dNb2RpZmllcnMsIGZ1bmNDb250ZXh0SWQpO1xuICBwYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jdGlvblN0YXJ0LCBmdW5jQ29udGV4dElkKTtcbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHN0YXRlLnNjb3Blcy5wdXNoKG5ldyBTY29wZShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIHRydWUpKTtcbiAgc3RhdGUuc2NvcGVEZXB0aC0tO1xufVxuXG4vLyBQYXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uLlxuLy8gSWYgdGhlIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLCB0aGV5IHdpbGwgYmUgY29udmVydGVkIHRvIGFuXG4vLyBhc3NpZ25hYmxlIGxpc3QuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJvd0V4cHJlc3Npb24oc3RhcnRUb2tlbkluZGV4KSB7XG4gIHBhcnNlRnVuY3Rpb25Cb2R5KHRydWUpO1xuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgc3RhdGUuc2NvcGVzLnB1c2gobmV3IFNjb3BlKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgdHJ1ZSkpO1xuICBzdGF0ZS5zY29wZURlcHRoLS07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jdGlvblN0YXJ0LCBmdW5jQ29udGV4dElkID0gMCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzUGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2goZnVuY3Rpb25TdGFydCwgZnVuY0NvbnRleHRJZCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jQ29udGV4dElkKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUZ1bmN0aW9uQm9keShmYWxzZSwgZnVuY0NvbnRleHRJZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Cb2R5KGFsbG93RXhwcmVzc2lvbiwgZnVuY0NvbnRleHRJZCA9IDApIHtcbiAgY29uc3QgaXNFeHByZXNzaW9uID0gYWxsb3dFeHByZXNzaW9uICYmICFtYXRjaCh0dC5icmFjZUwpO1xuXG4gIGlmIChpc0V4cHJlc3Npb24pIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VCbG9jayh0cnVlIC8qIGlzRnVuY3Rpb25TY29wZSAqLywgZnVuY0NvbnRleHRJZCk7XG4gIH1cbn1cblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMsIGFuZCByZXR1cm5zIHRoZW0gYXNcbi8vIGFuIGFycmF5LiBgY2xvc2VgIGlzIHRoZSB0b2tlbiB0eXBlIHRoYXQgZW5kcyB0aGUgbGlzdCwgYW5kXG4vLyBgYWxsb3dFbXB0eWAgY2FuIGJlIHR1cm5lZCBvbiB0byBhbGxvdyBzdWJzZXF1ZW50IGNvbW1hcyB3aXRoXG4vLyBub3RoaW5nIGluIGJldHdlZW4gdGhlbSB0byBiZSBwYXJzZWQgYXMgYG51bGxgICh3aGljaCBpcyBuZWVkZWRcbi8vIGZvciBhcnJheSBsaXRlcmFscykuXG5cbmZ1bmN0aW9uIHBhcnNlRXhwckxpc3QoY2xvc2UsIGFsbG93RW1wdHkgPSBmYWxzZSkge1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuICB3aGlsZSAoIWVhdChjbG9zZSkgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgICAgaWYgKGVhdChjbG9zZSkpIGJyZWFrO1xuICAgIH1cbiAgICBwYXJzZUV4cHJMaXN0SXRlbShhbGxvd0VtcHR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4cHJMaXN0SXRlbShhbGxvd0VtcHR5KSB7XG4gIGlmIChhbGxvd0VtcHR5ICYmIG1hdGNoKHR0LmNvbW1hKSkge1xuICAgIC8vIEVtcHR5IGl0ZW07IG5vdGhpbmcgbW9yZSB0byBwYXJzZSBmb3IgdGhpcyBpdGVtLlxuICB9IGVsc2UgaWYgKG1hdGNoKHR0LmVsbGlwc2lzKSkge1xuICAgIHBhcnNlU3ByZWFkKCk7XG4gICAgcGFyc2VQYXJlbkl0ZW0oKTtcbiAgfSBlbHNlIGlmIChtYXRjaCh0dC5xdWVzdGlvbikpIHtcbiAgICAvLyBQYXJ0aWFsIGZ1bmN0aW9uIGFwcGxpY2F0aW9uIHByb3Bvc2FsLlxuICAgIG5leHQoKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKGZhbHNlLCB0cnVlKTtcbiAgfVxufVxuXG4vLyBQYXJzZSB0aGUgbmV4dCB0b2tlbiBhcyBhbiBpZGVudGlmaWVyLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSWRlbnRpZmllcigpIHtcbiAgbmV4dCgpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5uYW1lO1xufVxuXG4vLyBQYXJzZXMgYXdhaXQgZXhwcmVzc2lvbiBpbnNpZGUgYXN5bmMgZnVuY3Rpb24uXG5mdW5jdGlvbiBwYXJzZUF3YWl0KCkge1xuICBwYXJzZU1heWJlVW5hcnkoKTtcbn1cblxuLy8gUGFyc2VzIHlpZWxkIGV4cHJlc3Npb24gaW5zaWRlIGdlbmVyYXRvci5cbmZ1bmN0aW9uIHBhcnNlWWllbGQoKSB7XG4gIG5leHQoKTtcbiAgaWYgKCFtYXRjaCh0dC5zZW1pKSAmJiAhY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICBlYXQodHQuc3Rhcik7XG4gICAgcGFyc2VNYXliZUFzc2lnbigpO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWpzLW1vZHVsZS1ibG9ja3NcbmZ1bmN0aW9uIHBhcnNlTW9kdWxlRXhwcmVzc2lvbigpIHtcbiAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlKTtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gIC8vIEZvciBub3csIGp1c3QgY2FsbCBwYXJzZUJsb2NrQm9keSB0byBwYXJzZSB0aGUgYmxvY2suIEluIHRoZSBmdXR1cmUgd2hlbiB3ZVxuICAvLyBpbXBsZW1lbnQgZnVsbCBzdXBwb3J0LCB3ZSdsbCB3YW50IHRvIGVtaXQgc2NvcGVzIGFuZCBwb3NzaWJseSBvdGhlclxuICAvLyBpbmZvcm1hdGlvbi5cbiAgcGFyc2VCbG9ja0JvZHkodHQuYnJhY2VSKTtcbn1cbiIsICIvKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuXG5pbXBvcnQge1xuICBlYXQsXG4gIGxvb2thaGVhZFR5cGUsXG4gIGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkLFxuICBtYXRjaCxcbiAgbmV4dCxcbiAgcG9wVHlwZUNvbnRleHQsXG4gIHB1c2hUeXBlQ29udGV4dCxcblxufSBmcm9tIFwiLi4vdG9rZW5pemVyL2luZGV4XCI7XG5pbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi4vdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSwgVG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQge2lucHV0LCBzdGF0ZX0gZnJvbSBcIi4uL3RyYXZlcnNlci9iYXNlXCI7XG5pbXBvcnQge1xuICBiYXNlUGFyc2VNYXliZUFzc2lnbixcbiAgYmFzZVBhcnNlU3Vic2NyaXB0LFxuICBiYXNlUGFyc2VTdWJzY3JpcHRzLFxuICBwYXJzZUFycm93LFxuICBwYXJzZUFycm93RXhwcmVzc2lvbixcbiAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cyxcbiAgcGFyc2VFeHByQXRvbSxcbiAgcGFyc2VFeHByZXNzaW9uLFxuICBwYXJzZUZ1bmN0aW9uQm9keSxcbiAgcGFyc2VJZGVudGlmaWVyLFxuICBwYXJzZUxpdGVyYWwsXG5cbn0gZnJvbSBcIi4uL3RyYXZlcnNlci9leHByZXNzaW9uXCI7XG5pbXBvcnQge1xuICBiYXNlUGFyc2VFeHBvcnRTdGFyLFxuICBwYXJzZUV4cG9ydCxcbiAgcGFyc2VFeHBvcnRGcm9tLFxuICBwYXJzZUV4cG9ydFNwZWNpZmllcnMsXG4gIHBhcnNlRnVuY3Rpb25QYXJhbXMsXG4gIHBhcnNlSW1wb3J0LFxuICBwYXJzZVN0YXRlbWVudCxcbn0gZnJvbSBcIi4uL3RyYXZlcnNlci9zdGF0ZW1lbnRcIjtcbmltcG9ydCB7XG4gIGNhbkluc2VydFNlbWljb2xvbixcbiAgZWF0Q29udGV4dHVhbCxcbiAgZXhwZWN0LFxuICBleHBlY3RDb250ZXh0dWFsLFxuICBpc0NvbnRleHR1YWwsXG4gIGlzTG9va2FoZWFkQ29udGV4dHVhbCxcbiAgc2VtaWNvbG9uLFxuICB1bmV4cGVjdGVkLFxufSBmcm9tIFwiLi4vdHJhdmVyc2VyL3V0aWxcIjtcblxuZnVuY3Rpb24gaXNNYXliZURlZmF1bHRJbXBvcnQobG9va2FoZWFkKSB7XG4gIHJldHVybiAoXG4gICAgKGxvb2thaGVhZC50eXBlID09PSB0dC5uYW1lIHx8ICEhKGxvb2thaGVhZC50eXBlICYgVG9rZW5UeXBlLklTX0tFWVdPUkQpKSAmJlxuICAgIGxvb2thaGVhZC5jb250ZXh0dWFsS2V5d29yZCAhPT0gQ29udGV4dHVhbEtleXdvcmQuX2Zyb21cbiAgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKHRvaykge1xuICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMCk7XG4gIGV4cGVjdCh0b2sgfHwgdHQuY29sb24pO1xuICBmbG93UGFyc2VUeXBlKCk7XG4gIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVByZWRpY2F0ZSgpIHtcbiAgZXhwZWN0KHR0Lm1vZHVsbyk7XG4gIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2NoZWNrcyk7XG4gIGlmIChlYXQodHQucGFyZW5MKSkge1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIGV4cGVjdCh0dC5wYXJlblIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVR5cGVBbmRQcmVkaWNhdGVJbml0aWFsaXNlcigpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICBleHBlY3QodHQuY29sb24pO1xuICBpZiAobWF0Y2godHQubW9kdWxvKSkge1xuICAgIGZsb3dQYXJzZVByZWRpY2F0ZSgpO1xuICB9IGVsc2Uge1xuICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgICBpZiAobWF0Y2godHQubW9kdWxvKSkge1xuICAgICAgZmxvd1BhcnNlUHJlZGljYXRlKCk7XG4gICAgfVxuICB9XG4gIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVDbGFzcygpIHtcbiAgbmV4dCgpO1xuICBmbG93UGFyc2VJbnRlcmZhY2Vpc2goLyogaXNDbGFzcyAqLyB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZUZ1bmN0aW9uKCkge1xuICBuZXh0KCk7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuXG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgfVxuXG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICBmbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbXMoKTtcbiAgZXhwZWN0KHR0LnBhcmVuUik7XG5cbiAgZmxvd1BhcnNlVHlwZUFuZFByZWRpY2F0ZUluaXRpYWxpc2VyKCk7XG5cbiAgc2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmUoKSB7XG4gIGlmIChtYXRjaCh0dC5fY2xhc3MpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUNsYXNzKCk7XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuX2Z1bmN0aW9uKSkge1xuICAgIGZsb3dQYXJzZURlY2xhcmVGdW5jdGlvbigpO1xuICB9IGVsc2UgaWYgKG1hdGNoKHR0Ll92YXIpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZVZhcmlhYmxlKCk7XG4gIH0gZWxzZSBpZiAoZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fbW9kdWxlKSkge1xuICAgIGlmIChlYXQodHQuZG90KSkge1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZU1vZHVsZUV4cG9ydHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZU1vZHVsZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZVR5cGVBbGlhcygpO1xuICB9IGVsc2UgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fb3BhcXVlKSkge1xuICAgIGZsb3dQYXJzZURlY2xhcmVPcGFxdWVUeXBlKCk7XG4gIH0gZWxzZSBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUludGVyZmFjZSgpO1xuICB9IGVsc2UgaWYgKG1hdGNoKHR0Ll9leHBvcnQpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVWYXJpYWJsZSgpIHtcbiAgbmV4dCgpO1xuICBmbG93UGFyc2VUeXBlQW5ub3RhdGFibGVJZGVudGlmaWVyKCk7XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlTW9kdWxlKCkge1xuICBpZiAobWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxuXG4gIGV4cGVjdCh0dC5icmFjZUwpO1xuICB3aGlsZSAoIW1hdGNoKHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKG1hdGNoKHR0Ll9pbXBvcnQpKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICBwYXJzZUltcG9ydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmV4cGVjdGVkKCk7XG4gICAgfVxuICB9XG4gIGV4cGVjdCh0dC5icmFjZVIpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gIGV4cGVjdCh0dC5fZXhwb3J0KTtcblxuICBpZiAoZWF0KHR0Ll9kZWZhdWx0KSkge1xuICAgIGlmIChtYXRjaCh0dC5fZnVuY3Rpb24pIHx8IG1hdGNoKHR0Ll9jbGFzcykpIHtcbiAgICAgIC8vIGRlY2xhcmUgZXhwb3J0IGRlZmF1bHQgY2xhc3MgLi4uXG4gICAgICAvLyBkZWNsYXJlIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIC4uLlxuICAgICAgZmxvd1BhcnNlRGVjbGFyZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWNsYXJlIGV4cG9ydCBkZWZhdWx0IFt0eXBlXTtcbiAgICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgICAgIHNlbWljb2xvbigpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICBtYXRjaCh0dC5fdmFyKSB8fCAvLyBkZWNsYXJlIGV4cG9ydCB2YXIgLi4uXG4gICAgbWF0Y2godHQuX2Z1bmN0aW9uKSB8fCAvLyBkZWNsYXJlIGV4cG9ydCBmdW5jdGlvbiAuLi5cbiAgICBtYXRjaCh0dC5fY2xhc3MpIHx8IC8vIGRlY2xhcmUgZXhwb3J0IGNsYXNzIC4uLlxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fb3BhcXVlKSAvLyBkZWNsYXJlIGV4cG9ydCBvcGFxdWUgLi5cbiAgKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZSgpO1xuICB9IGVsc2UgaWYgKFxuICAgIG1hdGNoKHR0LnN0YXIpIHx8IC8vIGRlY2xhcmUgZXhwb3J0ICogZnJvbSAnJ1xuICAgIG1hdGNoKHR0LmJyYWNlTCkgfHwgLy8gZGVjbGFyZSBleHBvcnQge30gLi4uXG4gICAgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpIHx8IC8vIGRlY2xhcmUgZXhwb3J0IGludGVyZmFjZSAuLi5cbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpIHx8IC8vIGRlY2xhcmUgZXhwb3J0IHR5cGUgLi4uXG4gICAgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpIC8vIGRlY2xhcmUgZXhwb3J0IG9wYXF1ZSB0eXBlIC4uLlxuICApIHtcbiAgICBwYXJzZUV4cG9ydCgpO1xuICB9IGVsc2Uge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlTW9kdWxlRXhwb3J0cygpIHtcbiAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZXhwb3J0cyk7XG4gIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlVHlwZUFsaWFzKCkge1xuICBuZXh0KCk7XG4gIGZsb3dQYXJzZVR5cGVBbGlhcygpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlT3BhcXVlVHlwZSgpIHtcbiAgbmV4dCgpO1xuICBmbG93UGFyc2VPcGFxdWVUeXBlKHRydWUpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlSW50ZXJmYWNlKCkge1xuICBuZXh0KCk7XG4gIGZsb3dQYXJzZUludGVyZmFjZWlzaCgpO1xufVxuXG4vLyBJbnRlcmZhY2VzXG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUludGVyZmFjZWlzaChpc0NsYXNzID0gZmFsc2UpIHtcbiAgZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKTtcblxuICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gIH1cblxuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlICghaXNDbGFzcyAmJiBlYXQodHQuY29tbWEpKTtcbiAgfVxuXG4gIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX21peGlucykpIHtcbiAgICBuZXh0KCk7XG4gICAgZG8ge1xuICAgICAgZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpO1xuICAgIH0gd2hpbGUgKGVhdCh0dC5jb21tYSkpO1xuICB9XG5cbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cykpIHtcbiAgICBuZXh0KCk7XG4gICAgZG8ge1xuICAgICAgZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpO1xuICAgIH0gd2hpbGUgKGVhdCh0dC5jb21tYSkpO1xuICB9XG5cbiAgZmxvd1BhcnNlT2JqZWN0VHlwZShpc0NsYXNzLCBmYWxzZSwgaXNDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKSB7XG4gIGZsb3dQYXJzZVF1YWxpZmllZFR5cGVJZGVudGlmaWVyKGZhbHNlKTtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlSW50ZXJmYWNlKCkge1xuICBmbG93UGFyc2VJbnRlcmZhY2Vpc2goKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VUeXBlQWxpYXMoKSB7XG4gIGZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKCk7XG5cbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICB9XG5cbiAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKHR0LmVxKTtcbiAgc2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9wYXF1ZVR5cGUoZGVjbGFyZSkge1xuICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKTtcbiAgZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKTtcblxuICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gIH1cblxuICAvLyBQYXJzZSB0aGUgc3VwZXJ0eXBlXG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIodHQuY29sb24pO1xuICB9XG5cbiAgaWYgKCFkZWNsYXJlKSB7XG4gICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKHR0LmVxKTtcbiAgfVxuICBzZW1pY29sb24oKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZVBhcmFtZXRlcigpIHtcbiAgZmxvd1BhcnNlVmFyaWFuY2UoKTtcbiAgZmxvd1BhcnNlVHlwZUFubm90YXRhYmxlSWRlbnRpZmllcigpO1xuXG4gIGlmIChlYXQodHQuZXEpKSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IHRoaXMgY29uZGl0aW9uIGlzIGFscmVhZHkgY2hlY2tlZCBhdCBhbGwgY2FsbCBzaXRlc1xuICBpZiAobWF0Y2godHQubGVzc1RoYW4pIHx8IG1hdGNoKHR0LnR5cGVQYXJhbWV0ZXJTdGFydCkpIHtcbiAgICBuZXh0KCk7XG4gIH0gZWxzZSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG5cbiAgZG8ge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXIoKTtcbiAgICBpZiAoIW1hdGNoKHR0LmdyZWF0ZXJUaGFuKSkge1xuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICB9XG4gIH0gd2hpbGUgKCFtYXRjaCh0dC5ncmVhdGVyVGhhbikgJiYgIXN0YXRlLmVycm9yKTtcbiAgZXhwZWN0KHR0LmdyZWF0ZXJUaGFuKTtcbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgZXhwZWN0KHR0Lmxlc3NUaGFuKTtcbiAgd2hpbGUgKCFtYXRjaCh0dC5ncmVhdGVyVGhhbikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgIGlmICghbWF0Y2godHQuZ3JlYXRlclRoYW4pKSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgIH1cbiAgfVxuICBleHBlY3QodHQuZ3JlYXRlclRoYW4pO1xuICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VJbnRlcmZhY2VUeXBlKCkge1xuICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpO1xuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlIChlYXQodHQuY29tbWEpKTtcbiAgfVxuICBmbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHtcbiAgaWYgKG1hdGNoKHR0Lm51bSkgfHwgbWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RUeXBlSW5kZXhlcigpIHtcbiAgLy8gTm90ZTogYnJhY2tldEwgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZFxuICBpZiAobG9va2FoZWFkVHlwZSgpID09PSB0dC5jb2xvbikge1xuICAgIGZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG4gIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RUeXBlSW50ZXJuYWxTbG90KCkge1xuICAvLyBOb3RlOiBib3RoIGJyYWNrZXRMIGhhdmUgYWxyZWFkeSBiZWVuIGNvbnN1bWVkXG4gIGZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gIGV4cGVjdCh0dC5icmFja2V0Uik7XG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikgfHwgbWF0Y2godHQucGFyZW5MKSkge1xuICAgIGZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2goKTtcbiAgfSBlbHNlIHtcbiAgICBlYXQodHQucXVlc3Rpb24pO1xuICAgIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2goKSB7XG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgfVxuXG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICB3aGlsZSAoIW1hdGNoKHR0LnBhcmVuUikgJiYgIW1hdGNoKHR0LmVsbGlwc2lzKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICBmbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbSgpO1xuICAgIGlmICghbWF0Y2godHQucGFyZW5SKSkge1xuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZWF0KHR0LmVsbGlwc2lzKSkge1xuICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtKCk7XG4gIH1cbiAgZXhwZWN0KHR0LnBhcmVuUik7XG4gIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RUeXBlQ2FsbFByb3BlcnR5KCkge1xuICBmbG93UGFyc2VPYmplY3RUeXBlTWV0aG9kaXNoKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGUoYWxsb3dTdGF0aWMsIGFsbG93RXhhY3QsIGFsbG93UHJvdG8pIHtcbiAgbGV0IGVuZERlbGltO1xuICBpZiAoYWxsb3dFeGFjdCAmJiBtYXRjaCh0dC5icmFjZUJhckwpKSB7XG4gICAgZXhwZWN0KHR0LmJyYWNlQmFyTCk7XG4gICAgZW5kRGVsaW0gPSB0dC5icmFjZUJhclI7XG4gIH0gZWxzZSB7XG4gICAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gICAgZW5kRGVsaW0gPSB0dC5icmFjZVI7XG4gIH1cblxuICB3aGlsZSAoIW1hdGNoKGVuZERlbGltKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoYWxsb3dQcm90byAmJiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3Byb3RvKSkge1xuICAgICAgY29uc3QgbG9va2FoZWFkID0gbG9va2FoZWFkVHlwZSgpO1xuICAgICAgaWYgKGxvb2thaGVhZCAhPT0gdHQuY29sb24gJiYgbG9va2FoZWFkICE9PSB0dC5xdWVzdGlvbikge1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGFsbG93U3RhdGljID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhbGxvd1N0YXRpYyAmJiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYykpIHtcbiAgICAgIGNvbnN0IGxvb2thaGVhZCA9IGxvb2thaGVhZFR5cGUoKTtcbiAgICAgIGlmIChsb29rYWhlYWQgIT09IHR0LmNvbG9uICYmIGxvb2thaGVhZCAhPT0gdHQucXVlc3Rpb24pIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZsb3dQYXJzZVZhcmlhbmNlKCk7XG5cbiAgICBpZiAoZWF0KHR0LmJyYWNrZXRMKSkge1xuICAgICAgaWYgKGVhdCh0dC5icmFja2V0TCkpIHtcbiAgICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZUludGVybmFsU2xvdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZUluZGV4ZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hdGNoKHR0LnBhcmVuTCkgfHwgbWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlQ2FsbFByb3BlcnR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2dldCkgfHwgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9zZXQpKSB7XG4gICAgICAgIGNvbnN0IGxvb2thaGVhZCA9IGxvb2thaGVhZFR5cGUoKTtcbiAgICAgICAgaWYgKGxvb2thaGVhZCA9PT0gdHQubmFtZSB8fCBsb29rYWhlYWQgPT09IHR0LnN0cmluZyB8fCBsb29rYWhlYWQgPT09IHR0Lm51bSkge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlUHJvcGVydHkoKTtcbiAgICB9XG5cbiAgICBmbG93T2JqZWN0VHlwZVNlbWljb2xvbigpO1xuICB9XG5cbiAgZXhwZWN0KGVuZERlbGltKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT2JqZWN0VHlwZVByb3BlcnR5KCkge1xuICBpZiAobWF0Y2godHQuZWxsaXBzaXMpKSB7XG4gICAgZXhwZWN0KHR0LmVsbGlwc2lzKTtcbiAgICBpZiAoIWVhdCh0dC5jb21tYSkpIHtcbiAgICAgIGVhdCh0dC5zZW1pKTtcbiAgICB9XG4gICAgLy8gRXhwbGljaXQgaW5leGFjdCBvYmplY3Qgc3ludGF4LlxuICAgIGlmIChtYXRjaCh0dC5icmFjZVIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgfSBlbHNlIHtcbiAgICBmbG93UGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgIGlmIChtYXRjaCh0dC5sZXNzVGhhbikgfHwgbWF0Y2godHQucGFyZW5MKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCBwcm9wZXJ0eVxuICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhvZGlzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlYXQodHQucXVlc3Rpb24pO1xuICAgICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dPYmplY3RUeXBlU2VtaWNvbG9uKCkge1xuICBpZiAoIWVhdCh0dC5zZW1pKSAmJiAhZWF0KHR0LmNvbW1hKSAmJiAhbWF0Y2godHQuYnJhY2VSKSAmJiAhbWF0Y2godHQuYnJhY2VCYXJSKSkge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcihpbml0aWFsSWRBbHJlYWR5UGFyc2VkKSB7XG4gIGlmICghaW5pdGlhbElkQWxyZWFkeVBhcnNlZCkge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICB9XG4gIHdoaWxlIChlYXQodHQuZG90KSkge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUdlbmVyaWNUeXBlKCkge1xuICBmbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcih0cnVlKTtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZW9mVHlwZSgpIHtcbiAgZXhwZWN0KHR0Ll90eXBlb2YpO1xuICBmbG93UGFyc2VQcmltYXJ5VHlwZSgpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VUdXBsZVR5cGUoKSB7XG4gIGV4cGVjdCh0dC5icmFja2V0TCk7XG4gIC8vIFdlIGFsbG93IHRyYWlsaW5nIGNvbW1hc1xuICB3aGlsZSAoc3RhdGUucG9zIDwgaW5wdXQubGVuZ3RoICYmICFtYXRjaCh0dC5icmFja2V0UikpIHtcbiAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgaWYgKG1hdGNoKHR0LmJyYWNrZXRSKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGV4cGVjdCh0dC5jb21tYSk7XG4gIH1cbiAgZXhwZWN0KHR0LmJyYWNrZXRSKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKSB7XG4gIGNvbnN0IGxvb2thaGVhZCA9IGxvb2thaGVhZFR5cGUoKTtcbiAgaWYgKGxvb2thaGVhZCA9PT0gdHQuY29sb24gfHwgbG9va2FoZWFkID09PSB0dC5xdWVzdGlvbikge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIGVhdCh0dC5xdWVzdGlvbik7XG4gICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpIHtcbiAgd2hpbGUgKCFtYXRjaCh0dC5wYXJlblIpICYmICFtYXRjaCh0dC5lbGxpcHNpcykgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKTtcbiAgICBpZiAoIW1hdGNoKHR0LnBhcmVuUikpIHtcbiAgICAgIGV4cGVjdCh0dC5jb21tYSk7XG4gICAgfVxuICB9XG4gIGlmIChlYXQodHQuZWxsaXBzaXMpKSB7XG4gICAgZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKTtcbiAgfVxufVxuXG4vLyBUaGUgcGFyc2luZyBvZiB0eXBlcyByb3VnaGx5IHBhcmFsbGVscyB0aGUgcGFyc2luZyBvZiBleHByZXNzaW9ucywgYW5kXG4vLyBwcmltYXJ5IHR5cGVzIGFyZSBraW5kIG9mIGxpa2UgcHJpbWFyeSBleHByZXNzaW9ucy4uLnRoZXkncmUgdGhlXG4vLyBwcmltaXRpdmVzIHdpdGggd2hpY2ggb3RoZXIgdHlwZXMgYXJlIGNvbnN0cnVjdGVkLlxuZnVuY3Rpb24gZmxvd1BhcnNlUHJpbWFyeVR5cGUoKSB7XG4gIGxldCBpc0dyb3VwZWRUeXBlID0gZmFsc2U7XG4gIGNvbnN0IG9sZE5vQW5vbkZ1bmN0aW9uVHlwZSA9IHN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZTtcblxuICBzd2l0Y2ggKHN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIHR0Lm5hbWU6IHtcbiAgICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkpIHtcbiAgICAgICAgZmxvd1BhcnNlSW50ZXJmYWNlVHlwZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICAgIGZsb3dQYXJzZUdlbmVyaWNUeXBlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FzZSB0dC5icmFjZUw6XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSB0dC5icmFjZUJhckw6XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCB0cnVlLCBmYWxzZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0LmJyYWNrZXRMOlxuICAgICAgZmxvd1BhcnNlVHVwbGVUeXBlKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0Lmxlc3NUaGFuOlxuICAgICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gICAgICBleHBlY3QodHQucGFyZW5MKTtcbiAgICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpO1xuICAgICAgZXhwZWN0KHR0LnBhcmVuUik7XG4gICAgICBleHBlY3QodHQuYXJyb3cpO1xuICAgICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSB0dC5wYXJlbkw6XG4gICAgICBuZXh0KCk7XG5cbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGEgZ3JvdXBlZCB0eXBlXG4gICAgICBpZiAoIW1hdGNoKHR0LnBhcmVuUikgJiYgIW1hdGNoKHR0LmVsbGlwc2lzKSkge1xuICAgICAgICBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGxvb2thaGVhZFR5cGUoKTtcbiAgICAgICAgICBpc0dyb3VwZWRUeXBlID0gdG9rZW4gIT09IHR0LnF1ZXN0aW9uICYmIHRva2VuICE9PSB0dC5jb2xvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0dyb3VwZWRUeXBlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNHcm91cGVkVHlwZSkge1xuICAgICAgICBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBmYWxzZTtcbiAgICAgICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgICAgICBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7XG5cbiAgICAgICAgLy8gQSBgLGAgb3IgYSBgKSA9PmAgbWVhbnMgdGhpcyBpcyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gdHlwZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlIHx8XG4gICAgICAgICAgIShtYXRjaCh0dC5jb21tYSkgfHwgKG1hdGNoKHR0LnBhcmVuUikgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5hcnJvdykpXG4gICAgICAgICkge1xuICAgICAgICAgIGV4cGVjdCh0dC5wYXJlblIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFYXQgYSBjb21tYSBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgICBlYXQodHQuY29tbWEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpO1xuXG4gICAgICBleHBlY3QodHQucGFyZW5SKTtcbiAgICAgIGV4cGVjdCh0dC5hcnJvdyk7XG4gICAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0Lm1pbnVzOlxuICAgICAgbmV4dCgpO1xuICAgICAgcGFyc2VMaXRlcmFsKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0LnN0cmluZzpcbiAgICBjYXNlIHR0Lm51bTpcbiAgICBjYXNlIHR0Ll90cnVlOlxuICAgIGNhc2UgdHQuX2ZhbHNlOlxuICAgIGNhc2UgdHQuX251bGw6XG4gICAgY2FzZSB0dC5fdGhpczpcbiAgICBjYXNlIHR0Ll92b2lkOlxuICAgIGNhc2UgdHQuc3RhcjpcbiAgICAgIG5leHQoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc3RhdGUudHlwZSA9PT0gdHQuX3R5cGVvZikge1xuICAgICAgICBmbG93UGFyc2VUeXBlb2ZUeXBlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSAmIFRva2VuVHlwZS5JU19LRVlXT1JEKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQubmFtZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAgdW5leHBlY3RlZCgpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VQb3N0Zml4VHlwZSgpIHtcbiAgZmxvd1BhcnNlUHJpbWFyeVR5cGUoKTtcbiAgd2hpbGUgKCFjYW5JbnNlcnRTZW1pY29sb24oKSAmJiAobWF0Y2godHQuYnJhY2tldEwpIHx8IG1hdGNoKHR0LnF1ZXN0aW9uRG90KSkpIHtcbiAgICBlYXQodHQucXVlc3Rpb25Eb3QpO1xuICAgIGV4cGVjdCh0dC5icmFja2V0TCk7XG4gICAgaWYgKGVhdCh0dC5icmFja2V0UikpIHtcbiAgICAgIC8vIEFycmF5IHR5cGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW5kZXhlZCBhY2Nlc3MgdHlwZVxuICAgICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgICAgZXhwZWN0KHR0LmJyYWNrZXRSKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUHJlZml4VHlwZSgpIHtcbiAgaWYgKGVhdCh0dC5xdWVzdGlvbikpIHtcbiAgICBmbG93UGFyc2VQcmVmaXhUeXBlKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlUG9zdGZpeFR5cGUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zKCkge1xuICBmbG93UGFyc2VQcmVmaXhUeXBlKCk7XG4gIGlmICghc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlICYmIGVhdCh0dC5hcnJvdykpIHtcbiAgICBmbG93UGFyc2VUeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlSW50ZXJzZWN0aW9uVHlwZSgpIHtcbiAgZWF0KHR0LmJpdHdpc2VBTkQpO1xuICBmbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zKCk7XG4gIHdoaWxlIChlYXQodHQuYml0d2lzZUFORCkpIHtcbiAgICBmbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVW5pb25UeXBlKCkge1xuICBlYXQodHQuYml0d2lzZU9SKTtcbiAgZmxvd1BhcnNlSW50ZXJzZWN0aW9uVHlwZSgpO1xuICB3aGlsZSAoZWF0KHR0LmJpdHdpc2VPUikpIHtcbiAgICBmbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZSgpIHtcbiAgZmxvd1BhcnNlVW5pb25UeXBlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpIHtcbiAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVR5cGVBbm5vdGF0YWJsZUlkZW50aWZpZXIoKSB7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAobWF0Y2godHQuY29sb24pKSB7XG4gICAgZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlVmFyaWFuY2UoKSB7XG4gIGlmIChtYXRjaCh0dC5wbHVzKSB8fCBtYXRjaCh0dC5taW51cykpIHtcbiAgICBuZXh0KCk7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE92ZXJyaWRlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoKGZ1bmNDb250ZXh0SWQpIHtcbiAgLy8gRm9yIGFycm93IGZ1bmN0aW9ucywgYHBhcnNlQXJyb3dgIGhhbmRsZXMgdGhlIHJldHVybiB0eXBlIGl0c2VsZi5cbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGZsb3dQYXJzZVR5cGVBbmRQcmVkaWNhdGVJbml0aWFsaXNlcigpO1xuICB9XG5cbiAgcGFyc2VGdW5jdGlvbkJvZHkoZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlU3Vic2NyaXB0KFxuICBzdGFydFRva2VuSW5kZXgsXG4gIG5vQ2FsbHMsXG4gIHN0b3BTdGF0ZSxcbikge1xuICBpZiAobWF0Y2godHQucXVlc3Rpb25Eb3QpICYmIGxvb2thaGVhZFR5cGUoKSA9PT0gdHQubGVzc1RoYW4pIHtcbiAgICBpZiAobm9DYWxscykge1xuICAgICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKTtcbiAgICBleHBlY3QodHQucGFyZW5MKTtcbiAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgIGV4cGVjdCh0dC5wYXJlbkwpO1xuICAgIHBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMoKTtcbiAgICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGJhc2VQYXJzZVN1YnNjcmlwdChzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZU5ld0FyZ3VtZW50cygpIHtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgIGlmIChzdGF0ZS5lcnJvcikge1xuICAgICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfVxuICB9XG59XG5cbi8vIGludGVyZmFjZXNcbmV4cG9ydCBmdW5jdGlvbiBmbG93VHJ5UGFyc2VTdGF0ZW1lbnQoKSB7XG4gIGlmIChtYXRjaCh0dC5uYW1lKSAmJiBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgICBuZXh0KCk7XG4gICAgZmxvd1BhcnNlSW50ZXJmYWNlKCk7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2VudW0pKSB7XG4gICAgZmxvd1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKSB7XG4gIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2VudW0pKSB7XG4gICAgZmxvd1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBkZWNsYXJlcywgaW50ZXJmYWNlcyBhbmQgdHlwZSBhbGlhc2VzXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlSWRlbnRpZmllclN0YXRlbWVudChjb250ZXh0dWFsS2V5d29yZCkge1xuICBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlKSB7XG4gICAgaWYgKFxuICAgICAgbWF0Y2godHQuX2NsYXNzKSB8fFxuICAgICAgbWF0Y2godHQubmFtZSkgfHxcbiAgICAgIG1hdGNoKHR0Ll9mdW5jdGlvbikgfHxcbiAgICAgIG1hdGNoKHR0Ll92YXIpIHx8XG4gICAgICBtYXRjaCh0dC5fZXhwb3J0KVxuICAgICkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZSgpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWF0Y2godHQubmFtZSkpIHtcbiAgICBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpIHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZSgpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fdHlwZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgICAgZmxvd1BhcnNlVHlwZUFsaWFzKCk7XG4gICAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpIHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICAgIGZsb3dQYXJzZU9wYXF1ZVR5cGUoZmFsc2UpO1xuICAgICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB9XG4gIH1cbiAgc2VtaWNvbG9uKCk7XG59XG5cbi8vIGV4cG9ydCB0eXBlXG5leHBvcnQgZnVuY3Rpb24gZmxvd1Nob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gIHJldHVybiAoXG4gICAgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fb3BhcXVlKSB8fFxuICAgIGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZW51bSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dTaG91bGREaXNhbGxvd0V4cG9ydERlZmF1bHRTcGVjaWZpZXIoKSB7XG4gIHJldHVybiAoXG4gICAgbWF0Y2godHQubmFtZSkgJiZcbiAgICAoc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl90eXBlIHx8XG4gICAgICBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSB8fFxuICAgICAgc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUgfHxcbiAgICAgIHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fZW51bSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgxKTtcbiAgICBuZXh0KCk7XG5cbiAgICBpZiAobWF0Y2godHQuYnJhY2VMKSkge1xuICAgICAgLy8gZXhwb3J0IHR5cGUgeyBmb28sIGJhciB9O1xuICAgICAgcGFyc2VFeHBvcnRTcGVjaWZpZXJzKCk7XG4gICAgICBwYXJzZUV4cG9ydEZyb20oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhwb3J0IHR5cGUgRm9vID0gQmFyO1xuICAgICAgZmxvd1BhcnNlVHlwZUFsaWFzKCk7XG4gICAgfVxuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIH0gZWxzZSBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgIG5leHQoKTtcbiAgICAvLyBleHBvcnQgb3BhcXVlIHR5cGUgRm9vID0gQmFyO1xuICAgIGZsb3dQYXJzZU9wYXF1ZVR5cGUoZmFsc2UpO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIH0gZWxzZSBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDEpO1xuICAgIG5leHQoKTtcbiAgICBmbG93UGFyc2VJbnRlcmZhY2UoKTtcbiAgICBwb3BUeXBlQ29udGV4dChvbGRJc1R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlU3RhdGVtZW50KHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG93U2hvdWxkUGFyc2VFeHBvcnRTdGFyKCkge1xuICByZXR1cm4gbWF0Y2godHQuc3RhcikgfHwgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdHlwZSkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5zdGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dQYXJzZUV4cG9ydFN0YXIoKSB7XG4gIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgyKTtcbiAgICBiYXNlUGFyc2VFeHBvcnRTdGFyKCk7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlUGFyc2VFeHBvcnRTdGFyKCk7XG4gIH1cbn1cblxuLy8gcGFyc2UgYSB0aGUgc3VwZXIgY2xhc3MgdHlwZSBwYXJhbWV0ZXJzIGFuZCBpbXBsZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gZmxvd0FmdGVyUGFyc2VDbGFzc1N1cGVyKGhhc1N1cGVyKSB7XG4gIGlmIChoYXNTdXBlciAmJiBtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICB9XG4gIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2ltcGxlbWVudHMpKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICAgIG5leHQoKTtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5faW1wbGVtZW50cztcbiAgICBkbyB7XG4gICAgICBmbG93UGFyc2VSZXN0cmljdGVkSWRlbnRpZmllcigpO1xuICAgICAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgICAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGVhdCh0dC5jb21tYSkpO1xuICAgIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSk7XG4gIH1cbn1cblxuLy8gcGFyc2UgdHlwZSBwYXJhbWV0ZXJzIGZvciBvYmplY3QgbWV0aG9kIHNob3J0aGFuZFxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dTdGFydFBhcnNlT2JqUHJvcFZhbHVlKCkge1xuICAvLyBtZXRob2Qgc2hvcnRoYW5kXG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgICBpZiAoIW1hdGNoKHR0LnBhcmVuTCkpIHVuZXhwZWN0ZWQoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgZWF0KHR0LnF1ZXN0aW9uKTtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIH1cbiAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbn1cblxuLy8gcGFyc2UgdHlwZW9mIGFuZCB0eXBlIGltcG9ydHNcbmV4cG9ydCBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZUltcG9ydFNwZWNpZmllcnMoKSB7XG4gIGlmIChtYXRjaCh0dC5fdHlwZW9mKSB8fCBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpKSB7XG4gICAgY29uc3QgbGggPSBsb29rYWhlYWRUeXBlQW5kS2V5d29yZCgpO1xuICAgIGlmIChpc01heWJlRGVmYXVsdEltcG9ydChsaCkgfHwgbGgudHlwZSA9PT0gdHQuYnJhY2VMIHx8IGxoLnR5cGUgPT09IHR0LnN0YXIpIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gcGFyc2UgaW1wb3J0LXR5cGUvdHlwZW9mIHNob3J0aGFuZFxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dQYXJzZUltcG9ydFNwZWNpZmllcigpIHtcbiAgY29uc3QgaXNUeXBlS2V5d29yZCA9XG4gICAgc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl90eXBlIHx8IHN0YXRlLnR5cGUgPT09IHR0Ll90eXBlb2Y7XG4gIGlmIChpc1R5cGVLZXl3b3JkKSB7XG4gICAgbmV4dCgpO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICB9XG5cbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpICYmICFpc0xvb2thaGVhZENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIGlmIChpc1R5cGVLZXl3b3JkICYmICFtYXRjaCh0dC5uYW1lKSAmJiAhKHN0YXRlLnR5cGUgJiBUb2tlblR5cGUuSVNfS0VZV09SRCkpIHtcbiAgICAgIC8vIGBpbXBvcnQge3R5cGUgYXMgLGAgb3IgYGltcG9ydCB7dHlwZSBhcyB9YFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgaW1wb3J0IHt0eXBlIGFzIGZvb2BcbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNUeXBlS2V5d29yZCAmJiAobWF0Y2godHQubmFtZSkgfHwgISEoc3RhdGUudHlwZSAmIFRva2VuVHlwZS5JU19LRVlXT1JEKSkpIHtcbiAgICAgIC8vIGBpbXBvcnQge3R5cGUgZm9vYFxuICAgICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hcykpIHtcbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBwYXJzZSBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlcnMgLSBmdW5jdGlvbiBmb288VD4oKSB7fVxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXMoKSB7XG4gIC8vIE9yaWdpbmFsbHkgdGhpcyBjaGVja2VkIGlmIHRoZSBtZXRob2QgaXMgYSBnZXR0ZXIvc2V0dGVyLCBidXQgaWYgaXQgd2FzLCB3ZSdkIGNyYXNoIHNvb25cbiAgLy8gYW55d2F5LCBzbyBkb24ndCB0cnkgdG8gcHJvcGFnYXRlIHRoYXQgaW5mb3JtYXRpb24uXG4gIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMCk7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgfVxufVxuXG4vLyBwYXJzZSBmbG93IHR5cGUgYW5ub3RhdGlvbnMgb24gdmFyaWFibGUgZGVjbGFyYXRvciBoZWFkcyAtIGxldCBmb286IHN0cmluZyA9IGJhclxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dBZnRlclBhcnNlVmFySGVhZCgpIHtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIH1cbn1cblxuLy8gcGFyc2UgdGhlIHJldHVybiB0eXBlIG9mIGFuIGFzeW5jIGFycm93IGZ1bmN0aW9uIC0gbGV0IGZvbyA9IChhc3luYyAoKTogbnVtYmVyID0+IHt9KTtcbmV4cG9ydCBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oKSB7XG4gIGlmIChtYXRjaCh0dC5jb2xvbikpIHtcbiAgICBjb25zdCBvbGROb0Fub25GdW5jdGlvblR5cGUgPSBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU7XG4gICAgc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICAgIHN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IG9sZE5vQW5vbkZ1bmN0aW9uVHlwZTtcbiAgfVxufVxuXG4vLyBXZSBuZWVkIHRvIHN1cHBvcnQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGZvciBhcnJvdyBmdW5jdGlvbnMuIFRoaXNcbi8vIGlzIHRyaWNreS4gVGhlcmUgYXJlIHRocmVlIHNpdHVhdGlvbnMgd2UgbmVlZCB0byBoYW5kbGVcbi8vXG4vLyAxLiBUaGlzIGlzIGVpdGhlciBKU1ggb3IgYW4gYXJyb3cgZnVuY3Rpb24uIFdlJ2xsIHRyeSBKU1ggZmlyc3QuIElmIHRoYXRcbi8vICAgIGZhaWxzLCB3ZSdsbCB0cnkgYW4gYXJyb3cgZnVuY3Rpb24uIElmIHRoYXQgZmFpbHMsIHdlJ2xsIHRocm93IHRoZSBKU1hcbi8vICAgIGVycm9yLlxuLy8gMi4gVGhpcyBpcyBhbiBhcnJvdyBmdW5jdGlvbi4gV2UnbGwgcGFyc2UgdGhlIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLFxuLy8gICAgcGFyc2UgdGhlIHJlc3QsIG1ha2Ugc3VyZSB0aGUgcmVzdCBpcyBhbiBhcnJvdyBmdW5jdGlvbiwgYW5kIGdvIGZyb21cbi8vICAgIHRoZXJlXG4vLyAzLiBUaGlzIGlzIG5laXRoZXIuIEp1c3QgY2FsbCB0aGUgc3VwZXIgbWV0aG9kXG5leHBvcnQgZnVuY3Rpb24gZmxvd1BhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpIHtcbiAgaWYgKG1hdGNoKHR0Lmxlc3NUaGFuKSkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gc3RhdGUuc25hcHNob3QoKTtcbiAgICBsZXQgd2FzQXJyb3cgPSBiYXNlUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucyk7XG4gICAgaWYgKHN0YXRlLmVycm9yKSB7XG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHN0YXRlLnR5cGUgPSB0dC50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB3YXNBcnJvdztcbiAgICB9XG5cbiAgICBjb25zdCBvbGRJc1R5cGUgPSBwdXNoVHlwZUNvbnRleHQoMCk7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgICB3YXNBcnJvdyA9IGJhc2VQYXJzZU1heWJlQXNzaWduKG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgICBpZiAod2FzQXJyb3cpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB1bmV4cGVjdGVkKCk7XG4gIH1cblxuICByZXR1cm4gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xufVxuXG4vLyBoYW5kbGUgcmV0dXJuIHR5cGVzIGZvciBhcnJvdyBmdW5jdGlvbnNcbmV4cG9ydCBmdW5jdGlvbiBmbG93UGFyc2VBcnJvdygpIHtcbiAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IHB1c2hUeXBlQ29udGV4dCgwKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG5cbiAgICBjb25zdCBvbGROb0Fub25GdW5jdGlvblR5cGUgPSBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU7XG4gICAgc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICBmbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKTtcbiAgICBzdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7XG5cbiAgICBpZiAoY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHVuZXhwZWN0ZWQoKTtcbiAgICBpZiAoIW1hdGNoKHR0LmFycm93KSkgdW5leHBlY3RlZCgpO1xuXG4gICAgaWYgKHN0YXRlLmVycm9yKSB7XG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICB9XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgfVxuICByZXR1cm4gZWF0KHR0LmFycm93KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dQYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzID0gZmFsc2UpIHtcbiAgaWYgKFxuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hc3luYyAmJlxuICAgIG1hdGNoKHR0Lmxlc3NUaGFuKVxuICApIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG4gICAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtZXRlcnMoKTtcbiAgICBpZiAod2FzQXJyb3cgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICB9XG5cbiAgYmFzZVBhcnNlU3Vic2NyaXB0cyhzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMpO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGFycm93IGZ1bmN0aW9uIGhlcmUuXG5mdW5jdGlvbiBwYXJzZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtZXRlcnMoKSB7XG4gIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICBpZiAoIXBhcnNlQXJyb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwYXJzZUFycm93RXhwcmVzc2lvbihzdGFydFRva2VuSW5kZXgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRW51bURlY2xhcmF0aW9uKCkge1xuICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9lbnVtKTtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2VudW07XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBmbG93UGFyc2VFbnVtQm9keSgpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VFbnVtQm9keSgpIHtcbiAgaWYgKGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX29mKSkge1xuICAgIG5leHQoKTtcbiAgfVxuICBleHBlY3QodHQuYnJhY2VMKTtcbiAgZmxvd1BhcnNlRW51bU1lbWJlcnMoKTtcbiAgZXhwZWN0KHR0LmJyYWNlUik7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUVudW1NZW1iZXJzKCkge1xuICB3aGlsZSAoIW1hdGNoKHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGVhdCh0dC5lbGxpcHNpcykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBmbG93UGFyc2VFbnVtTWVtYmVyKCk7XG4gICAgaWYgKCFtYXRjaCh0dC5icmFjZVIpKSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VFbnVtTWVtYmVyKCkge1xuICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgaWYgKGVhdCh0dC5lcSkpIHtcbiAgICAvLyBGbG93IGVudW0gdmFsdWVzIGFyZSBhbHdheXMganVzdCBvbmUgdG9rZW4gKGEgc3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4gbGl0ZXJhbCkuXG4gICAgbmV4dCgpO1xuICB9XG59XG4iLCAiLyogZXNsaW50IG1heC1sZW46IDAgKi9cblxuaW1wb3J0IHtGaWxlfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCB7XG4gIGZsb3dBZnRlclBhcnNlQ2xhc3NTdXBlcixcbiAgZmxvd0FmdGVyUGFyc2VWYXJIZWFkLFxuICBmbG93UGFyc2VFeHBvcnREZWNsYXJhdGlvbixcbiAgZmxvd1BhcnNlRXhwb3J0U3RhcixcbiAgZmxvd1BhcnNlSWRlbnRpZmllclN0YXRlbWVudCxcbiAgZmxvd1BhcnNlSW1wb3J0U3BlY2lmaWVyLFxuICBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbixcbiAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uLFxuICBmbG93U2hvdWxkRGlzYWxsb3dFeHBvcnREZWZhdWx0U3BlY2lmaWVyLFxuICBmbG93U2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbixcbiAgZmxvd1Nob3VsZFBhcnNlRXhwb3J0U3RhcixcbiAgZmxvd1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcyxcbiAgZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzLFxuICBmbG93VHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbixcbiAgZmxvd1RyeVBhcnNlU3RhdGVtZW50LFxufSBmcm9tIFwiLi4vcGx1Z2lucy9mbG93XCI7XG5pbXBvcnQge1xuICB0c0FmdGVyUGFyc2VDbGFzc1N1cGVyLFxuICB0c0FmdGVyUGFyc2VWYXJIZWFkLFxuICB0c0lzRGVjbGFyYXRpb25TdGFydCxcbiAgdHNQYXJzZUV4cG9ydERlY2xhcmF0aW9uLFxuICB0c1BhcnNlRXhwb3J0U3BlY2lmaWVyLFxuICB0c1BhcnNlSWRlbnRpZmllclN0YXRlbWVudCxcbiAgdHNQYXJzZUltcG9ydEVxdWFsc0RlY2xhcmF0aW9uLFxuICB0c1BhcnNlSW1wb3J0U3BlY2lmaWVyLFxuICB0c1BhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMsXG4gIHRzUGFyc2VNb2RpZmllcnMsXG4gIHRzU3RhcnRQYXJzZUZ1bmN0aW9uUGFyYW1zLFxuICB0c1RyeVBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMsXG4gIHRzVHJ5UGFyc2VFeHBvcnQsXG4gIHRzVHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbixcbiAgdHNUcnlQYXJzZVN0YXRlbWVudENvbnRlbnQsXG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbixcbiAgdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzLFxufSBmcm9tIFwiLi4vcGx1Z2lucy90eXBlc2NyaXB0XCI7XG5pbXBvcnQge1xuICBlYXQsXG4gIGVhdFR5cGVUb2tlbixcbiAgSWRlbnRpZmllclJvbGUsXG4gIGxvb2thaGVhZFR5cGUsXG4gIGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkLFxuICBtYXRjaCxcbiAgbmV4dCxcbiAgbmV4dFRva2VuU3RhcnQsXG4gIG5leHRUb2tlblN0YXJ0U2luY2UsXG4gIHBvcFR5cGVDb250ZXh0LFxuICBwdXNoVHlwZUNvbnRleHQsXG59IGZyb20gXCIuLi90b2tlbml6ZXJcIjtcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7U2NvcGV9IGZyb20gXCIuLi90b2tlbml6ZXIvc3RhdGVcIjtcbmltcG9ydCB7IFRva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3Rva2VuaXplci90eXBlc1wiO1xuaW1wb3J0IHtjaGFyQ29kZXN9IGZyb20gXCIuLi91dGlsL2NoYXJjb2Rlc1wiO1xuaW1wb3J0IHtnZXROZXh0Q29udGV4dElkLCBpbnB1dCwgaXNGbG93RW5hYmxlZCwgaXNUeXBlU2NyaXB0RW5hYmxlZCwgc3RhdGV9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7XG4gIHBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMsXG4gIHBhcnNlRXhwckF0b20sXG4gIHBhcnNlRXhwcmVzc2lvbixcbiAgcGFyc2VFeHByU3Vic2NyaXB0cyxcbiAgcGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2gsXG4gIHBhcnNlSWRlbnRpZmllcixcbiAgcGFyc2VNYXliZUFzc2lnbixcbiAgcGFyc2VNZXRob2QsXG4gIHBhcnNlT2JqLFxuICBwYXJzZVBhcmVuRXhwcmVzc2lvbixcbiAgcGFyc2VQcm9wZXJ0eU5hbWUsXG59IGZyb20gXCIuL2V4cHJlc3Npb25cIjtcbmltcG9ydCB7XG4gIHBhcnNlQmluZGluZ0F0b20sXG4gIHBhcnNlQmluZGluZ0lkZW50aWZpZXIsXG4gIHBhcnNlQmluZGluZ0xpc3QsXG4gIHBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyLFxufSBmcm9tIFwiLi9sdmFsXCI7XG5pbXBvcnQge1xuICBjYW5JbnNlcnRTZW1pY29sb24sXG4gIGVhdENvbnRleHR1YWwsXG4gIGV4cGVjdCxcbiAgZXhwZWN0Q29udGV4dHVhbCxcbiAgaGFzRm9sbG93aW5nTGluZUJyZWFrLFxuICBoYXNQcmVjZWRpbmdMaW5lQnJlYWssXG4gIGlzQ29udGV4dHVhbCxcbiAgaXNMaW5lVGVybWluYXRvcixcbiAgaXNMb29rYWhlYWRDb250ZXh0dWFsLFxuICBzZW1pY29sb24sXG4gIHVuZXhwZWN0ZWQsXG59IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVG9wTGV2ZWwoKSB7XG4gIHBhcnNlQmxvY2tCb2R5KHR0LmVvZik7XG4gIHN0YXRlLnNjb3Blcy5wdXNoKG5ldyBTY29wZSgwLCBzdGF0ZS50b2tlbnMubGVuZ3RoLCB0cnVlKSk7XG4gIGlmIChzdGF0ZS5zY29wZURlcHRoICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNjb3BlIGRlcHRoIGF0IGVuZCBvZiBmaWxlOiAke3N0YXRlLnNjb3BlRGVwdGh9YCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBGaWxlKHN0YXRlLnRva2Vucywgc3RhdGUuc2NvcGVzKTtcbn1cblxuLy8gUGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LlxuLy9cbi8vIElmIGV4cGVjdGluZyBhIHN0YXRlbWVudCBhbmQgZmluZGluZyBhIHNsYXNoIG9wZXJhdG9yLCBwYXJzZSBhXG4vLyByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbC4gVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgbGlrZVxuLy8gYGlmIChmb28pIC9ibGFoLy5leGVjKGZvbylgLCB3aGVyZSBsb29raW5nIGF0IHRoZSBwcmV2aW91cyB0b2tlblxuLy8gZG9lcyBub3QgaGVscC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KGRlY2xhcmF0aW9uKSB7XG4gIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgaWYgKGZsb3dUcnlQYXJzZVN0YXRlbWVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGlmIChtYXRjaCh0dC5hdCkpIHtcbiAgICBwYXJzZURlY29yYXRvcnMoKTtcbiAgfVxuICBwYXJzZVN0YXRlbWVudENvbnRlbnQoZGVjbGFyYXRpb24pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN0YXRlbWVudENvbnRlbnQoZGVjbGFyYXRpb24pIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBpZiAodHNUcnlQYXJzZVN0YXRlbWVudENvbnRlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0dHlwZSA9IHN0YXRlLnR5cGU7XG5cbiAgLy8gTW9zdCB0eXBlcyBvZiBzdGF0ZW1lbnRzIGFyZSByZWNvZ25pemVkIGJ5IHRoZSBrZXl3b3JkIHRoZXlcbiAgLy8gc3RhcnQgd2l0aC4gTWFueSBhcmUgdHJpdmlhbCB0byBwYXJzZSwgc29tZSByZXF1aXJlIGEgYml0IG9mXG4gIC8vIGNvbXBsZXhpdHkuXG5cbiAgc3dpdGNoIChzdGFydHR5cGUpIHtcbiAgICBjYXNlIHR0Ll9icmVhazpcbiAgICBjYXNlIHR0Ll9jb250aW51ZTpcbiAgICAgIHBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX2RlYnVnZ2VyOlxuICAgICAgcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX2RvOlxuICAgICAgcGFyc2VEb1N0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX2ZvcjpcbiAgICAgIHBhcnNlRm9yU3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSB0dC5fZnVuY3Rpb246XG4gICAgICBpZiAobG9va2FoZWFkVHlwZSgpID09PSB0dC5kb3QpIGJyZWFrO1xuICAgICAgaWYgKCFkZWNsYXJhdGlvbikgdW5leHBlY3RlZCgpO1xuICAgICAgcGFyc2VGdW5jdGlvblN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSB0dC5fY2xhc3M6XG4gICAgICBpZiAoIWRlY2xhcmF0aW9uKSB1bmV4cGVjdGVkKCk7XG4gICAgICBwYXJzZUNsYXNzKHRydWUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSB0dC5faWY6XG4gICAgICBwYXJzZUlmU3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSB0dC5fcmV0dXJuOlxuICAgICAgcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0Ll9zd2l0Y2g6XG4gICAgICBwYXJzZVN3aXRjaFN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX3Rocm93OlxuICAgICAgcGFyc2VUaHJvd1N0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuX3RyeTpcbiAgICAgIHBhcnNlVHJ5U3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIHR0Ll9sZXQ6XG4gICAgY2FzZSB0dC5fY29uc3Q6XG4gICAgICBpZiAoIWRlY2xhcmF0aW9uKSB1bmV4cGVjdGVkKCk7IC8vIE5PVEU6IGZhbGxzIHRocm91Z2ggdG8gX3ZhclxuXG4gICAgY2FzZSB0dC5fdmFyOlxuICAgICAgcGFyc2VWYXJTdGF0ZW1lbnQoc3RhcnR0eXBlICE9PSB0dC5fdmFyKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgdHQuX3doaWxlOlxuICAgICAgcGFyc2VXaGlsZVN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuYnJhY2VMOlxuICAgICAgcGFyc2VCbG9jaygpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgdHQuc2VtaTpcbiAgICAgIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIHR0Ll9leHBvcnQ6XG4gICAgY2FzZSB0dC5faW1wb3J0OiB7XG4gICAgICBjb25zdCBuZXh0VHlwZSA9IGxvb2thaGVhZFR5cGUoKTtcbiAgICAgIGlmIChuZXh0VHlwZSA9PT0gdHQucGFyZW5MIHx8IG5leHRUeXBlID09PSB0dC5kb3QpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAoc3RhcnR0eXBlID09PSB0dC5faW1wb3J0KSB7XG4gICAgICAgIHBhcnNlSW1wb3J0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZUV4cG9ydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYXNlIHR0Lm5hbWU6XG4gICAgICBpZiAoc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hc3luYykge1xuICAgICAgICBjb25zdCBmdW5jdGlvblN0YXJ0ID0gc3RhdGUuc3RhcnQ7XG4gICAgICAgIC8vIHBlZWsgYWhlYWQgYW5kIHNlZSBpZiBuZXh0IHRva2VuIGlzIGEgZnVuY3Rpb25cbiAgICAgICAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGlmIChtYXRjaCh0dC5fZnVuY3Rpb24pICYmICFjYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgICAgICAgIGV4cGVjdCh0dC5fZnVuY3Rpb24pO1xuICAgICAgICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX3VzaW5nICYmXG4gICAgICAgICFoYXNGb2xsb3dpbmdMaW5lQnJlYWsoKSAmJlxuICAgICAgICAvLyBTdGF0ZW1lbnRzIGxpa2UgYHVzaW5nWzBdYCBhbmQgYHVzaW5nIGluIGZvb2AgYXJlbid0IGFjdHVhbCB1c2luZ1xuICAgICAgICAvLyBkZWNsYXJhdGlvbnMuXG4gICAgICAgIGxvb2thaGVhZFR5cGUoKSA9PT0gdHQubmFtZVxuICAgICAgKSB7XG4gICAgICAgIHBhcnNlVmFyU3RhdGVtZW50KHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0c0F3YWl0VXNpbmcoKSkge1xuICAgICAgICBleHBlY3RDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hd2FpdCk7XG4gICAgICAgIHBhcnNlVmFyU3RhdGVtZW50KHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIC8vIElmIHRoZSBzdGF0ZW1lbnQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHN0YXRlbWVudCBrZXl3b3JkIG9yIGFcbiAgLy8gYnJhY2UsIGl0J3MgYW4gRXhwcmVzc2lvblN0YXRlbWVudCBvciBMYWJlbGVkU3RhdGVtZW50LiBXZVxuICAvLyBzaW1wbHkgc3RhcnQgcGFyc2luZyBhbiBleHByZXNzaW9uLCBhbmQgYWZ0ZXJ3YXJkcywgaWYgdGhlXG4gIC8vIG5leHQgdG9rZW4gaXMgYSBjb2xvbiBhbmQgdGhlIGV4cHJlc3Npb24gd2FzIGEgc2ltcGxlXG4gIC8vIElkZW50aWZpZXIgbm9kZSwgd2Ugc3dpdGNoIHRvIGludGVycHJldGluZyBpdCBhcyBhIGxhYmVsLlxuICBjb25zdCBpbml0aWFsVG9rZW5zTGVuZ3RoID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgcGFyc2VFeHByZXNzaW9uKCk7XG4gIGxldCBzaW1wbGVOYW1lID0gbnVsbDtcbiAgaWYgKHN0YXRlLnRva2Vucy5sZW5ndGggPT09IGluaXRpYWxUb2tlbnNMZW5ndGggKyAxKSB7XG4gICAgY29uc3QgdG9rZW4gPSBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICh0b2tlbi50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgICBzaW1wbGVOYW1lID0gdG9rZW4uY29udGV4dHVhbEtleXdvcmQ7XG4gICAgfVxuICB9XG4gIGlmIChzaW1wbGVOYW1lID09IG51bGwpIHtcbiAgICBzZW1pY29sb24oKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVhdCh0dC5jb2xvbikpIHtcbiAgICBwYXJzZUxhYmVsZWRTdGF0ZW1lbnQoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIHdhcyBhbiBpZGVudGlmaWVyLCBzbyB3ZSBtaWdodCB3YW50IHRvIGhhbmRsZSBmbG93L3R5cGVzY3JpcHQtc3BlY2lmaWMgY2FzZXMuXG4gICAgcGFyc2VJZGVudGlmaWVyU3RhdGVtZW50KHNpbXBsZU5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHBvc2l0aW9uZWQgYXQgYW4gYGF3YWl0IHVzaW5nYCBkZWNsYXJhdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBjYW4gaGFwcGVuIGVpdGhlciBpbiBwbGFjZSBvZiBhIHJlZ3VsYXIgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAqIG9yIGluIGEgbG9vcCBib2R5LCBhbmQgaW4gYm90aCBwbGFjZXMsIHRoZXJlIGFyZSBzaW1pbGFyLWxvb2tpbmcgY2FzZXMgd2hlcmVcbiAqIHdlIG5lZWQgdG8gcmV0dXJuIGZhbHNlLlxuICpcbiAqIEV4YW1wbGVzIHJldHVybmluZyB0cnVlOlxuICogYXdhaXQgdXNpbmcgZm9vID0gYmFyKCk7XG4gKiBmb3IgKGF3YWl0IHVzaW5nIGEgb2YgYikge31cbiAqXG4gKiBFeGFtcGxlcyByZXR1cm5pbmcgZmFsc2U6XG4gKiBhd2FpdCB1c2luZ1xuICogYXdhaXQgdXNpbmcgKyAxXG4gKiBhd2FpdCB1c2luZyBpbnN0YW5jZW9mIFRcbiAqIGZvciAoYXdhaXQgdXNpbmc7Oykge31cbiAqXG4gKiBGb3Igbm93LCB3ZSBlYXJseSByZXR1cm4gaWYgd2UgZG9uJ3Qgc2VlIGBhd2FpdGAsIHRoZW4gZG8gYSBzaW1wbGVcbiAqIGJhY2t0cmFja2luZy1iYXNlZCBsb29rYWhlYWQgZm9yIHRoZSBgdXNpbmdgIGFuZCBpZGVudGlmaWVyIHRva2Vucy4gSW4gdGhlXG4gKiBmdXR1cmUsIHRoaXMgY291bGQgYmUgb3B0aW1pemVkIHdpdGggYSBjaGFyYWN0ZXItYmFzZWQgYXBwcm9hY2guXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0c0F3YWl0VXNpbmcoKSB7XG4gIGlmICghaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hd2FpdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgc25hcHNob3QgPSBzdGF0ZS5zbmFwc2hvdCgpO1xuICAvLyBhd2FpdFxuICBuZXh0KCk7XG4gIGlmICghaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl91c2luZykgfHwgaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkpIHtcbiAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gdXNpbmdcbiAgbmV4dCgpO1xuICBpZiAoIW1hdGNoKHR0Lm5hbWUpIHx8IGhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKSB7XG4gICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVjb3JhdG9ycygpIHtcbiAgd2hpbGUgKG1hdGNoKHR0LmF0KSkge1xuICAgIHBhcnNlRGVjb3JhdG9yKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEZWNvcmF0b3IoKSB7XG4gIG5leHQoKTtcbiAgaWYgKGVhdCh0dC5wYXJlbkwpKSB7XG4gICAgcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgZXhwZWN0KHR0LnBhcmVuUik7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgd2hpbGUgKGVhdCh0dC5kb3QpKSB7XG4gICAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgcGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzKCk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKSB7XG4gIGlmIChlYXQodHQucGFyZW5MKSkge1xuICAgIHBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUJyZWFrQ29udGludWVTdGF0ZW1lbnQoKSB7XG4gIG5leHQoKTtcbiAgaWYgKCFpc0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICBzZW1pY29sb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZURvU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgZXhwZWN0KHR0Ll93aGlsZSk7XG4gIHBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIGVhdCh0dC5zZW1pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQoKSB7XG4gIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgcGFyc2VBbWJpZ3VvdXNGb3JTdGF0ZW1lbnQoKTtcbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHN0YXRlLnNjb3Blcy5wdXNoKG5ldyBTY29wZShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGZhbHNlKSk7XG4gIHN0YXRlLnNjb3BlRGVwdGgtLTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhpcyB0b2tlbiBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb24gKGV4cGxpY2l0IHJlc291cmNlXG4gKiBtYW5hZ2VtZW50KSBhcyBwYXJ0IG9mIGEgbG9vcC5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbiAqL1xuZnVuY3Rpb24gaXNVc2luZ0luTG9vcCgpIHtcbiAgaWYgKCFpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3VzaW5nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGlzIG11c3QgYmUgYGZvciAodXNpbmcgb2ZgLCB3aGVyZSBgdXNpbmdgIGlzIHRoZSBuYW1lIG9mIHRoZSBsb29wXG4gIC8vIHZhcmlhYmxlLlxuICBpZiAoaXNMb29rYWhlYWRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vZikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIERpc2FtYmlndWF0aW5nIGJldHdlZW4gYSBgZm9yYCBhbmQgYSBgZm9yYC9gaW5gIG9yIGBmb3JgL2BvZmBcbi8vIGxvb3AgaXMgbm9uLXRyaXZpYWwuIEJhc2ljYWxseSwgd2UgaGF2ZSB0byBwYXJzZSB0aGUgaW5pdCBgdmFyYFxuLy8gc3RhdGVtZW50IG9yIGV4cHJlc3Npb24sIGRpc2FsbG93aW5nIHRoZSBgaW5gIG9wZXJhdG9yIChzZWVcbi8vIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGBwYXJzZUV4cHJlc3Npb25gKSwgYW5kIHRoZW4gY2hlY2tcbi8vIHdoZXRoZXIgdGhlIG5leHQgdG9rZW4gaXMgYGluYCBvciBgb2ZgLiBXaGVuIHRoZXJlIGlzIG5vIGluaXRcbi8vIHBhcnQgKHNlbWljb2xvbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcyksIGl0XG4vLyBpcyBhIHJlZ3VsYXIgYGZvcmAgbG9vcC5cbmZ1bmN0aW9uIHBhcnNlQW1iaWd1b3VzRm9yU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG5cbiAgbGV0IGZvckF3YWl0ID0gZmFsc2U7XG4gIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0KSkge1xuICAgIGZvckF3YWl0ID0gdHJ1ZTtcbiAgICBuZXh0KCk7XG4gIH1cbiAgZXhwZWN0KHR0LnBhcmVuTCk7XG5cbiAgaWYgKG1hdGNoKHR0LnNlbWkpKSB7XG4gICAgaWYgKGZvckF3YWl0KSB7XG4gICAgICB1bmV4cGVjdGVkKCk7XG4gICAgfVxuICAgIHBhcnNlRm9yKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNBd2FpdFVzaW5nID0gc3RhcnRzQXdhaXRVc2luZygpO1xuICBpZiAoaXNBd2FpdFVzaW5nIHx8IG1hdGNoKHR0Ll92YXIpIHx8IG1hdGNoKHR0Ll9sZXQpIHx8IG1hdGNoKHR0Ll9jb25zdCkgfHwgaXNVc2luZ0luTG9vcCgpKSB7XG4gICAgaWYgKGlzQXdhaXRVc2luZykge1xuICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXdhaXQpO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gICAgcGFyc2VWYXIodHJ1ZSwgc3RhdGUudHlwZSAhPT0gdHQuX3Zhcik7XG4gICAgaWYgKG1hdGNoKHR0Ll9pbikgfHwgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vZikpIHtcbiAgICAgIHBhcnNlRm9ySW4oZm9yQXdhaXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXJzZUZvcigpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBhcnNlRXhwcmVzc2lvbih0cnVlKTtcbiAgaWYgKG1hdGNoKHR0Ll9pbikgfHwgaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9vZikpIHtcbiAgICBwYXJzZUZvckluKGZvckF3YWl0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZvckF3YWl0KSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG4gIHBhcnNlRm9yKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQoKSB7XG4gIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgbmV4dCgpO1xuICBwYXJzZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgaWYgKGVhdCh0dC5fZWxzZSkpIHtcbiAgICBwYXJzZVN0YXRlbWVudChmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSB7XG4gIG5leHQoKTtcblxuICAvLyBJbiBgcmV0dXJuYCAoYW5kIGBicmVha2AvYGNvbnRpbnVlYCksIHRoZSBrZXl3b3JkcyB3aXRoXG4gIC8vIG9wdGlvbmFsIGFyZ3VtZW50cywgd2UgZWFnZXJseSBsb29rIGZvciBhIHNlbWljb2xvbiBvciB0aGVcbiAgLy8gcG9zc2liaWxpdHkgdG8gaW5zZXJ0IG9uZS5cblxuICBpZiAoIWlzTGluZVRlcm1pbmF0b3IoKSkge1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIHNlbWljb2xvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3dpdGNoU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG5cbiAgLy8gRG9uJ3QgYm90aGVyIHZhbGlkYXRpb247IGp1c3QgZ28gdGhyb3VnaCBhbnkgc2VxdWVuY2Ugb2YgY2FzZXMsIGRlZmF1bHRzLCBhbmQgc3RhdGVtZW50cy5cbiAgd2hpbGUgKCFtYXRjaCh0dC5icmFjZVIpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIGlmIChtYXRjaCh0dC5fY2FzZSkgfHwgbWF0Y2godHQuX2RlZmF1bHQpKSB7XG4gICAgICBjb25zdCBpc0Nhc2UgPSBtYXRjaCh0dC5fY2FzZSk7XG4gICAgICBuZXh0KCk7XG4gICAgICBpZiAoaXNDYXNlKSB7XG4gICAgICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgfVxuICAgICAgZXhwZWN0KHR0LmNvbG9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VTdGF0ZW1lbnQodHJ1ZSk7XG4gICAgfVxuICB9XG4gIG5leHQoKTsgLy8gQ2xvc2luZyBicmFjZVxuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgc3RhdGUuc2NvcGVzLnB1c2gobmV3IFNjb3BlKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgZmFsc2UpKTtcbiAgc3RhdGUuc2NvcGVEZXB0aC0tO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRocm93U3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlRXhwcmVzc2lvbigpO1xuICBzZW1pY29sb24oKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZVBhcmFtKCkge1xuICBwYXJzZUJpbmRpbmdBdG9tKHRydWUgLyogaXNCbG9ja1Njb3BlICovKTtcblxuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG5cbiAgcGFyc2VCbG9jaygpO1xuXG4gIGlmIChtYXRjaCh0dC5fY2F0Y2gpKSB7XG4gICAgbmV4dCgpO1xuICAgIGxldCBjYXRjaEJpbmRpbmdTdGFydFRva2VuSW5kZXggPSBudWxsO1xuICAgIGlmIChtYXRjaCh0dC5wYXJlbkwpKSB7XG4gICAgICBzdGF0ZS5zY29wZURlcHRoKys7XG4gICAgICBjYXRjaEJpbmRpbmdTdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgZXhwZWN0KHR0LnBhcmVuTCk7XG4gICAgICBwYXJzZUNhdGNoQ2xhdXNlUGFyYW0oKTtcbiAgICAgIGV4cGVjdCh0dC5wYXJlblIpO1xuICAgIH1cbiAgICBwYXJzZUJsb2NrKCk7XG4gICAgaWYgKGNhdGNoQmluZGluZ1N0YXJ0VG9rZW5JbmRleCAhPSBudWxsKSB7XG4gICAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBzY29wZSBmb3IgdGhlIGNhdGNoIGJpbmRpbmcgd2hpY2ggaW5jbHVkZXMgdGhlIGJpbmRpbmcgaXRzZWxmIGFuZCB0aGVcbiAgICAgIC8vIGNhdGNoIGJsb2NrLlxuICAgICAgY29uc3QgZW5kVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgICBzdGF0ZS5zY29wZXMucHVzaChuZXcgU2NvcGUoY2F0Y2hCaW5kaW5nU3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCBmYWxzZSkpO1xuICAgICAgc3RhdGUuc2NvcGVEZXB0aC0tO1xuICAgIH1cbiAgfVxuICBpZiAoZWF0KHR0Ll9maW5hbGx5KSkge1xuICAgIHBhcnNlQmxvY2soKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWYXJTdGF0ZW1lbnQoaXNCbG9ja1Njb3BlKSB7XG4gIG5leHQoKTtcbiAgcGFyc2VWYXIoZmFsc2UsIGlzQmxvY2tTY29wZSk7XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdoaWxlU3RhdGVtZW50KCkge1xuICBuZXh0KCk7XG4gIHBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFbXB0eVN0YXRlbWVudCgpIHtcbiAgbmV4dCgpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxhYmVsZWRTdGF0ZW1lbnQoKSB7XG4gIHBhcnNlU3RhdGVtZW50KHRydWUpO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RhdGVtZW50IHN0YXJ0aW5nIHdpdGggYW4gaWRlbnRpZmllciBvZiB0aGUgZ2l2ZW4gbmFtZS4gU3ViY2xhc3NlcyBtYXRjaCBvbiB0aGUgbmFtZVxuICogdG8gaGFuZGxlIHN0YXRlbWVudHMgbGlrZSBcImRlY2xhcmVcIi5cbiAqL1xuZnVuY3Rpb24gcGFyc2VJZGVudGlmaWVyU3RhdGVtZW50KGNvbnRleHR1YWxLZXl3b3JkKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNQYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpO1xuICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VJZGVudGlmaWVyU3RhdGVtZW50KGNvbnRleHR1YWxLZXl3b3JkKTtcbiAgfSBlbHNlIHtcbiAgICBzZW1pY29sb24oKTtcbiAgfVxufVxuXG4vLyBQYXJzZSBhIHNlbWljb2xvbi1lbmNsb3NlZCBibG9jayBvZiBzdGF0ZW1lbnRzLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmxvY2soaXNGdW5jdGlvblNjb3BlID0gZmFsc2UsIGNvbnRleHRJZCA9IDApIHtcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICBleHBlY3QodHQuYnJhY2VMKTtcbiAgaWYgKGNvbnRleHRJZCkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gY29udGV4dElkO1xuICB9XG4gIHBhcnNlQmxvY2tCb2R5KHR0LmJyYWNlUik7XG4gIGlmIChjb250ZXh0SWQpIHtcbiAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgfVxuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgc3RhdGUuc2NvcGVzLnB1c2gobmV3IFNjb3BlKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgaXNGdW5jdGlvblNjb3BlKSk7XG4gIHN0YXRlLnNjb3BlRGVwdGgtLTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmxvY2tCb2R5KGVuZCkge1xuICB3aGlsZSAoIWVhdChlbmQpICYmICFzdGF0ZS5lcnJvcikge1xuICAgIHBhcnNlU3RhdGVtZW50KHRydWUpO1xuICB9XG59XG5cbi8vIFBhcnNlIGEgcmVndWxhciBgZm9yYCBsb29wLiBUaGUgZGlzYW1iaWd1YXRpb24gY29kZSBpblxuLy8gYHBhcnNlU3RhdGVtZW50YCB3aWxsIGFscmVhZHkgaGF2ZSBwYXJzZWQgdGhlIGluaXQgc3RhdGVtZW50IG9yXG4vLyBleHByZXNzaW9uLlxuXG5mdW5jdGlvbiBwYXJzZUZvcigpIHtcbiAgZXhwZWN0KHR0LnNlbWkpO1xuICBpZiAoIW1hdGNoKHR0LnNlbWkpKSB7XG4gICAgcGFyc2VFeHByZXNzaW9uKCk7XG4gIH1cbiAgZXhwZWN0KHR0LnNlbWkpO1xuICBpZiAoIW1hdGNoKHR0LnBhcmVuUikpIHtcbiAgICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgfVxuICBleHBlY3QodHQucGFyZW5SKTtcbiAgcGFyc2VTdGF0ZW1lbnQoZmFsc2UpO1xufVxuXG4vLyBQYXJzZSBhIGBmb3JgL2BpbmAgYW5kIGBmb3JgL2BvZmAgbG9vcCwgd2hpY2ggYXJlIGFsbW9zdFxuLy8gc2FtZSBmcm9tIHBhcnNlcidzIHBlcnNwZWN0aXZlLlxuXG5mdW5jdGlvbiBwYXJzZUZvckluKGZvckF3YWl0KSB7XG4gIGlmIChmb3JBd2FpdCkge1xuICAgIGVhdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX29mKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0KCk7XG4gIH1cbiAgcGFyc2VFeHByZXNzaW9uKCk7XG4gIGV4cGVjdCh0dC5wYXJlblIpO1xuICBwYXJzZVN0YXRlbWVudChmYWxzZSk7XG59XG5cbi8vIFBhcnNlIGEgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG5cbmZ1bmN0aW9uIHBhcnNlVmFyKGlzRm9yLCBpc0Jsb2NrU2NvcGUpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwYXJzZVZhckhlYWQoaXNCbG9ja1Njb3BlKTtcbiAgICBpZiAoZWF0KHR0LmVxKSkge1xuICAgICAgY29uc3QgZXFJbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICAgICAgcGFyc2VNYXliZUFzc2lnbihpc0Zvcik7XG4gICAgICBzdGF0ZS50b2tlbnNbZXFJbmRleF0ucmhzRW5kSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoIWVhdCh0dC5jb21tYSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVZhckhlYWQoaXNCbG9ja1Njb3BlKSB7XG4gIHBhcnNlQmluZGluZ0F0b20oaXNCbG9ja1Njb3BlKTtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c0FmdGVyUGFyc2VWYXJIZWFkKCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGZsb3dBZnRlclBhcnNlVmFySGVhZCgpO1xuICB9XG59XG5cbi8vIFBhcnNlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gb3IgbGl0ZXJhbCAoZGVwZW5kaW5nIG9uIHRoZVxuLy8gYGlzU3RhdGVtZW50YCBwYXJhbWV0ZXIpLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbihcbiAgZnVuY3Rpb25TdGFydCxcbiAgaXNTdGF0ZW1lbnQsXG4gIG9wdGlvbmFsSWQgPSBmYWxzZSxcbikge1xuICBpZiAobWF0Y2godHQuc3RhcikpIHtcbiAgICBuZXh0KCk7XG4gIH1cblxuICBpZiAoaXNTdGF0ZW1lbnQgJiYgIW9wdGlvbmFsSWQgJiYgIW1hdGNoKHR0Lm5hbWUpICYmICFtYXRjaCh0dC5feWllbGQpKSB7XG4gICAgdW5leHBlY3RlZCgpO1xuICB9XG5cbiAgbGV0IG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IG51bGw7XG5cbiAgaWYgKG1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgLy8gRXhwcmVzc2lvbi1zdHlsZSBmdW5jdGlvbnMgc2hvdWxkIGxpbWl0IHRoZWlyIG5hbWUncyBzY29wZSB0byB0aGUgZnVuY3Rpb24gYm9keSwgc28gd2UgbWFrZVxuICAgIC8vIGEgbmV3IGZ1bmN0aW9uIHNjb3BlIHRvIGVuZm9yY2UgdGhhdC5cbiAgICBpZiAoIWlzU3RhdGVtZW50KSB7XG4gICAgICBuYW1lU2NvcGVTdGFydFRva2VuSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICAgIH1cbiAgICBwYXJzZUJpbmRpbmdJZGVudGlmaWVyKGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0VG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHN0YXRlLnNjb3BlRGVwdGgrKztcbiAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICBwYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jdGlvblN0YXJ0KTtcbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBibG9jayBzY29wZSBvZiB0aGUgZnVuY3Rpb24gYm9keSwgd2UgbmVlZCBhIHNlcGFyYXRlIGZ1bmN0aW9uLXN0eWxlIHNjb3BlXG4gIC8vIHRoYXQgaW5jbHVkZXMgdGhlIHBhcmFtcy5cbiAgc3RhdGUuc2NvcGVzLnB1c2gobmV3IFNjb3BlKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgdHJ1ZSkpO1xuICBzdGF0ZS5zY29wZURlcHRoLS07XG4gIGlmIChuYW1lU2NvcGVTdGFydFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICBzdGF0ZS5zY29wZXMucHVzaChuZXcgU2NvcGUobmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCB0cnVlKSk7XG4gICAgc3RhdGUuc2NvcGVEZXB0aC0tO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uUGFyYW1zKFxuICBhbGxvd01vZGlmaWVycyA9IGZhbHNlLFxuICBmdW5jQ29udGV4dElkID0gMCxcbikge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzU3RhcnRQYXJzZUZ1bmN0aW9uUGFyYW1zKCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGZsb3dTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXMoKTtcbiAgfVxuXG4gIGV4cGVjdCh0dC5wYXJlbkwpO1xuICBpZiAoZnVuY0NvbnRleHRJZCkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gZnVuY0NvbnRleHRJZDtcbiAgfVxuICBwYXJzZUJpbmRpbmdMaXN0KFxuICAgIHR0LnBhcmVuUixcbiAgICBmYWxzZSAvKiBpc0Jsb2NrU2NvcGUgKi8sXG4gICAgZmFsc2UgLyogYWxsb3dFbXB0eSAqLyxcbiAgICBhbGxvd01vZGlmaWVycyxcbiAgICBmdW5jQ29udGV4dElkLFxuICApO1xuICBpZiAoZnVuY0NvbnRleHRJZCkge1xuICAgIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gZnVuY0NvbnRleHRJZDtcbiAgfVxufVxuXG4vLyBQYXJzZSBhIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGVcbi8vIGBpc1N0YXRlbWVudGAgcGFyYW1ldGVyKS5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2xhc3MoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQgPSBmYWxzZSkge1xuICAvLyBQdXQgYSBjb250ZXh0IElEIG9uIHRoZSBjbGFzcyBrZXl3b3JkLCB0aGUgb3Blbi1icmFjZSwgYW5kIHRoZSBjbG9zZS1icmFjZSwgc28gdGhhdCBsYXRlclxuICAvLyBjb2RlIGNhbiBlYXNpbHkgbmF2aWdhdGUgdG8gbWVhbmluZ2Z1bCBwb2ludHMgb24gdGhlIGNsYXNzLlxuICBjb25zdCBjb250ZXh0SWQgPSBnZXROZXh0Q29udGV4dElkKCk7XG5cbiAgbmV4dCgpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc0V4cHJlc3Npb24gPSAhaXNTdGF0ZW1lbnQ7XG4gIC8vIExpa2Ugd2l0aCBmdW5jdGlvbnMsIHdlIGRlY2xhcmUgYSBzcGVjaWFsIFwibmFtZSBzY29wZVwiIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBuYW1lIHRvIHRoZSBlbmRcbiAgLy8gb2YgdGhlIGNsYXNzLCBidXQgb25seSB3aXRoIGV4cHJlc3Npb24tc3R5bGUgY2xhc3NlcywgdG8gcmVwcmVzZW50IHRoZSBmYWN0IHRoYXQgdGhlIG5hbWUgaXNcbiAgLy8gYXZhaWxhYmxlIHRvIHRoZSBib2R5IG9mIHRoZSBjbGFzcyBidXQgbm90IGFuIG91dGVyIGRlY2xhcmF0aW9uLlxuICBsZXQgbmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4ID0gbnVsbDtcbiAgaWYgKCFpc1N0YXRlbWVudCkge1xuICAgIG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgc3RhdGUuc2NvcGVEZXB0aCsrO1xuICB9XG4gIHBhcnNlQ2xhc3NJZChpc1N0YXRlbWVudCwgb3B0aW9uYWxJZCk7XG4gIHBhcnNlQ2xhc3NTdXBlcigpO1xuICBjb25zdCBvcGVuQnJhY2VJbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIHBhcnNlQ2xhc3NCb2R5KGNvbnRleHRJZCk7XG4gIGlmIChzdGF0ZS5lcnJvcikge1xuICAgIHJldHVybjtcbiAgfVxuICBzdGF0ZS50b2tlbnNbb3BlbkJyYWNlSW5kZXhdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIGlmIChuYW1lU2NvcGVTdGFydFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICBjb25zdCBlbmRUb2tlbkluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgICBzdGF0ZS5zY29wZXMucHVzaChuZXcgU2NvcGUobmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCBmYWxzZSkpO1xuICAgIHN0YXRlLnNjb3BlRGVwdGgtLTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NsYXNzUHJvcGVydHkoKSB7XG4gIHJldHVybiBtYXRjaCh0dC5lcSkgfHwgbWF0Y2godHQuc2VtaSkgfHwgbWF0Y2godHQuYnJhY2VSKSB8fCBtYXRjaCh0dC5iYW5nKSB8fCBtYXRjaCh0dC5jb2xvbik7XG59XG5cbmZ1bmN0aW9uIGlzQ2xhc3NNZXRob2QoKSB7XG4gIHJldHVybiBtYXRjaCh0dC5wYXJlbkwpIHx8IG1hdGNoKHR0Lmxlc3NUaGFuKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoY2xhc3NDb250ZXh0SWQpIHtcbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG5cbiAgd2hpbGUgKCFlYXQodHQuYnJhY2VSKSAmJiAhc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZWF0KHR0LnNlbWkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2godHQuYXQpKSB7XG4gICAgICBwYXJzZURlY29yYXRvcigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1lbWJlclN0YXJ0ID0gc3RhdGUuc3RhcnQ7XG4gICAgcGFyc2VDbGFzc01lbWJlcihtZW1iZXJTdGFydCwgY2xhc3NDb250ZXh0SWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NNZW1iZXIobWVtYmVyU3RhcnQsIGNsYXNzQ29udGV4dElkKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNQYXJzZU1vZGlmaWVycyhbXG4gICAgICBDb250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZSxcbiAgICAgIENvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWMsXG4gICAgICBDb250ZXh0dWFsS2V5d29yZC5fcHJvdGVjdGVkLFxuICAgICAgQ29udGV4dHVhbEtleXdvcmQuX3ByaXZhdGUsXG4gICAgICBDb250ZXh0dWFsS2V5d29yZC5fb3ZlcnJpZGUsXG4gICAgXSk7XG4gIH1cbiAgbGV0IGlzU3RhdGljID0gZmFsc2U7XG4gIGlmIChtYXRjaCh0dC5uYW1lKSAmJiBzdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYykge1xuICAgIHBhcnNlSWRlbnRpZmllcigpOyAvLyBlYXRzICdzdGF0aWMnXG4gICAgaWYgKGlzQ2xhc3NNZXRob2QoKSkge1xuICAgICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpc0NsYXNzUHJvcGVydHkoKSkge1xuICAgICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBzb21ldGhpbmcgc3RhdGljXG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX3N0YXRpYztcbiAgICBpc1N0YXRpYyA9IHRydWU7XG5cbiAgICBpZiAobWF0Y2godHQuYnJhY2VMKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIHN0YXRpYyBibG9jay4gTWFyayB0aGUgd29yZCBcInN0YXRpY1wiIHdpdGggdGhlIGNsYXNzIGNvbnRleHQgSUQgZm9yIGNsYXNzIGVsZW1lbnRcbiAgICAgIC8vIGRldGVjdGlvbiBhbmQgcGFyc2UgYXMgYSByZWd1bGFyIGJsb2NrLlxuICAgICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjbGFzc0NvbnRleHRJZDtcbiAgICAgIHBhcnNlQmxvY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljKG1lbWJlclN0YXJ0LCBpc1N0YXRpYywgY2xhc3NDb250ZXh0SWQpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljKFxuICBtZW1iZXJTdGFydCxcbiAgaXNTdGF0aWMsXG4gIGNsYXNzQ29udGV4dElkLFxuKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgaWYgKHRzVHJ5UGFyc2VDbGFzc01lbWJlcldpdGhJc1N0YXRpYyhpc1N0YXRpYykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKGVhdCh0dC5zdGFyKSkge1xuICAgIC8vIGEgZ2VuZXJhdG9yXG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gR2V0IHRoZSBpZGVudGlmaWVyIG5hbWUgc28gd2UgY2FuIHRlbGwgaWYgaXQncyBhY3R1YWxseSBhIGtleXdvcmQgbGlrZSBcImFzeW5jXCIsIFwiZ2V0XCIsIG9yXG4gIC8vIFwic2V0XCIuXG4gIHBhcnNlQ2xhc3NQcm9wZXJ0eU5hbWUoY2xhc3NDb250ZXh0SWQpO1xuICBsZXQgaXNDb25zdHJ1Y3RvciA9IGZhbHNlO1xuICBjb25zdCB0b2tlbiA9IHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV07XG4gIC8vIFdlIGFsbG93IFwiY29uc3RydWN0b3JcIiBhcyBlaXRoZXIgYW4gaWRlbnRpZmllciBvciBhIHN0cmluZy5cbiAgaWYgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpIHtcbiAgICBpc0NvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgfVxuICBwYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKCk7XG5cbiAgaWYgKGlzQ2xhc3NNZXRob2QoKSkge1xuICAgIHBhcnNlQ2xhc3NNZXRob2QobWVtYmVyU3RhcnQsIGlzQ29uc3RydWN0b3IpO1xuICB9IGVsc2UgaWYgKGlzQ2xhc3NQcm9wZXJ0eSgpKSB7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hc3luYyAmJiAhaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHQuX2FzeW5jO1xuICAgIC8vIGFuIGFzeW5jIG1ldGhvZFxuICAgIGNvbnN0IGlzR2VuZXJhdG9yID0gbWF0Y2godHQuc3Rhcik7XG4gICAgaWYgKGlzR2VuZXJhdG9yKSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHNvLWNhbGxlZCBwYXJzZWQgbmFtZSB3b3VsZCBoYXZlIGJlZW4gXCJhc3luY1wiOiBnZXQgdGhlIHJlYWwgbmFtZS5cbiAgICBwYXJzZUNsYXNzUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKTtcbiAgICBwYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKCk7XG4gICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgZmFsc2UgLyogaXNDb25zdHJ1Y3RvciAqLyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fZ2V0IHx8XG4gICAgICB0b2tlbi5jb250ZXh0dWFsS2V5d29yZCA9PT0gQ29udGV4dHVhbEtleXdvcmQuX3NldCkgJiZcbiAgICAhKGlzTGluZVRlcm1pbmF0b3IoKSAmJiBtYXRjaCh0dC5zdGFyKSlcbiAgKSB7XG4gICAgaWYgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fZ2V0KSB7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fc2V0O1xuICAgIH1cbiAgICAvLyBgZ2V0XFxuKmAgaXMgYW4gdW5pbml0aWFsaXplZCBwcm9wZXJ0eSBuYW1lZCAnZ2V0JyBmb2xsb3dlZCBieSBhIGdlbmVyYXRvci5cbiAgICAvLyBhIGdldHRlciBvciBzZXR0ZXJcbiAgICAvLyBUaGUgc28tY2FsbGVkIHBhcnNlZCBuYW1lIHdvdWxkIGhhdmUgYmVlbiBcImdldC9zZXRcIjogZ2V0IHRoZSByZWFsIG5hbWUuXG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gIH0gZWxzZSBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hY2Nlc3NvciAmJiAhaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcigpKSB7XG4gICAgLy8gYW4gdW5pbml0aWFsaXplZCBjbGFzcyBwcm9wZXJ0eSAoZHVlIHRvIEFTSSwgc2luY2Ugd2UgZG9uJ3Qgb3RoZXJ3aXNlIHJlY29nbml6ZSB0aGUgbmV4dCB0b2tlbilcbiAgICBwYXJzZUNsYXNzUHJvcGVydHkoKTtcbiAgfSBlbHNlIHtcbiAgICB1bmV4cGVjdGVkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc01ldGhvZChmdW5jdGlvblN0YXJ0LCBpc0NvbnN0cnVjdG9yKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGlmIChtYXRjaCh0dC5sZXNzVGhhbikpIHtcbiAgICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICAgIH1cbiAgfVxuICBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCBpc0NvbnN0cnVjdG9yKTtcbn1cblxuLy8gUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBwcm9wZXJ0eSwgaWYgaXQgaXMgYSBzaW1wbGUgaWRlbnRpZmllci5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNsYXNzUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKSB7XG4gIHBhcnNlUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUG9zdE1lbWJlck5hbWVNb2RpZmllcnMoKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gcHVzaFR5cGVDb250ZXh0KDApO1xuICAgIGVhdCh0dC5xdWVzdGlvbik7XG4gICAgcG9wVHlwZUNvbnRleHQob2xkSXNUeXBlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDbGFzc1Byb3BlcnR5KCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIGVhdFR5cGVUb2tlbih0dC5iYW5nKTtcbiAgICB0c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfSBlbHNlIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgaWYgKG1hdGNoKHR0LmNvbG9uKSkge1xuICAgICAgZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBpZiAobWF0Y2godHQuZXEpKSB7XG4gICAgY29uc3QgZXF1YWxzVG9rZW5JbmRleCA9IHN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgbmV4dCgpO1xuICAgIHBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICBzdGF0ZS50b2tlbnNbZXF1YWxzVG9rZW5JbmRleF0ucmhzRW5kSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xuICB9XG4gIHNlbWljb2xvbigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNsYXNzSWQoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQgPSBmYWxzZSkge1xuICBpZiAoXG4gICAgaXNUeXBlU2NyaXB0RW5hYmxlZCAmJlxuICAgICghaXNTdGF0ZW1lbnQgfHwgb3B0aW9uYWxJZCkgJiZcbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2ltcGxlbWVudHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChtYXRjaCh0dC5uYW1lKSkge1xuICAgIHBhcnNlQmluZGluZ0lkZW50aWZpZXIodHJ1ZSk7XG4gIH1cblxuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBpZiAobWF0Y2godHQubGVzc1RoYW4pKSB7XG4gICAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhIHN1cGVyY2xhc3MuXG5mdW5jdGlvbiBwYXJzZUNsYXNzU3VwZXIoKSB7XG4gIGxldCBoYXNTdXBlciA9IGZhbHNlO1xuICBpZiAoZWF0KHR0Ll9leHRlbmRzKSkge1xuICAgIHBhcnNlRXhwclN1YnNjcmlwdHMoKTtcbiAgICBoYXNTdXBlciA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaGFzU3VwZXIgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzQWZ0ZXJQYXJzZUNsYXNzU3VwZXIoaGFzU3VwZXIpO1xuICB9IGVsc2UgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93QWZ0ZXJQYXJzZUNsYXNzU3VwZXIoaGFzU3VwZXIpO1xuICB9XG59XG5cbi8vIFBhcnNlcyBtb2R1bGUgZXhwb3J0IGRlY2xhcmF0aW9uLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFeHBvcnQoKSB7XG4gIGNvbnN0IGV4cG9ydEluZGV4ID0gc3RhdGUudG9rZW5zLmxlbmd0aCAtIDE7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgaWYgKHRzVHJ5UGFyc2VFeHBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAvLyBleHBvcnQgKiBmcm9tICcuLi4nXG4gIGlmIChzaG91bGRQYXJzZUV4cG9ydFN0YXIoKSkge1xuICAgIHBhcnNlRXhwb3J0U3RhcigpO1xuICB9IGVsc2UgaWYgKGlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcigpKSB7XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgZnJvbVxuICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgIGlmIChtYXRjaCh0dC5jb21tYSkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5zdGFyKSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgICAgZXhwZWN0KHR0LnN0YXIpO1xuICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpO1xuICAgICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlRXhwb3J0U3BlY2lmaWVyc01heWJlKCk7XG4gICAgfVxuICAgIHBhcnNlRXhwb3J0RnJvbSgpO1xuICB9IGVsc2UgaWYgKGVhdCh0dC5fZGVmYXVsdCkpIHtcbiAgICAvLyBleHBvcnQgZGVmYXVsdCAuLi5cbiAgICBwYXJzZUV4cG9ydERlZmF1bHRFeHByZXNzaW9uKCk7XG4gIH0gZWxzZSBpZiAoc2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbigpKSB7XG4gICAgcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpO1xuICB9IGVsc2Uge1xuICAgIC8vIGV4cG9ydCB7IHgsIHkgYXMgeiB9IFtmcm9tICcuLi4nXVxuICAgIHBhcnNlRXhwb3J0U3BlY2lmaWVycygpO1xuICAgIHBhcnNlRXhwb3J0RnJvbSgpO1xuICB9XG4gIHN0YXRlLnRva2Vuc1tleHBvcnRJbmRleF0ucmhzRW5kSW5kZXggPSBzdGF0ZS50b2tlbnMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydERlZmF1bHRFeHByZXNzaW9uKCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIGlmICh0c1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIGlmIChmbG93VHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgaWYgKGVhdCh0dC5fZnVuY3Rpb24pKSB7XG4gICAgcGFyc2VGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCB0cnVlLCB0cnVlKTtcbiAgfSBlbHNlIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSAmJiBsb29rYWhlYWRUeXBlKCkgPT09IHR0Ll9mdW5jdGlvbikge1xuICAgIC8vIGFzeW5jIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXN5bmMpO1xuICAgIGVhdCh0dC5fZnVuY3Rpb24pO1xuICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuX2NsYXNzKSkge1xuICAgIHBhcnNlQ2xhc3ModHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuYXQpKSB7XG4gICAgcGFyc2VEZWNvcmF0b3JzKCk7XG4gICAgcGFyc2VDbGFzcyh0cnVlLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gICAgc2VtaWNvbG9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0c1BhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgfSBlbHNlIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgZmxvd1BhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZVN0YXRlbWVudCh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cG9ydERlZmF1bHRTcGVjaWZpZXIoKSB7XG4gIGlmIChpc1R5cGVTY3JpcHRFbmFibGVkICYmIHRzSXNEZWNsYXJhdGlvblN0YXJ0KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNGbG93RW5hYmxlZCAmJiBmbG93U2hvdWxkRGlzYWxsb3dFeHBvcnREZWZhdWx0U3BlY2lmaWVyKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG1hdGNoKHR0Lm5hbWUpKSB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbnRleHR1YWxLZXl3b3JkICE9PSBDb250ZXh0dWFsS2V5d29yZC5fYXN5bmM7XG4gIH1cblxuICBpZiAoIW1hdGNoKHR0Ll9kZWZhdWx0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IF9uZXh0ID0gbmV4dFRva2VuU3RhcnQoKTtcbiAgY29uc3QgbG9va2FoZWFkID0gbG9va2FoZWFkVHlwZUFuZEtleXdvcmQoKTtcbiAgY29uc3QgaGFzRnJvbSA9XG4gICAgbG9va2FoZWFkLnR5cGUgPT09IHR0Lm5hbWUgJiYgbG9va2FoZWFkLmNvbnRleHR1YWxLZXl3b3JkID09PSBDb250ZXh0dWFsS2V5d29yZC5fZnJvbTtcbiAgaWYgKGxvb2thaGVhZC50eXBlID09PSB0dC5jb21tYSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIGxvb2thaGVhZCBhZ2FpbiB3aGVuIGBleHBvcnQgZGVmYXVsdCBmcm9tYCBpcyBzZWVuXG4gIGlmIChoYXNGcm9tKSB7XG4gICAgY29uc3QgbmV4dEFmdGVyRnJvbSA9IGlucHV0LmNoYXJDb2RlQXQobmV4dFRva2VuU3RhcnRTaW5jZShfbmV4dCArIDQpKTtcbiAgICByZXR1cm4gbmV4dEFmdGVyRnJvbSA9PT0gY2hhckNvZGVzLnF1b3RhdGlvbk1hcmsgfHwgbmV4dEFmdGVyRnJvbSA9PT0gY2hhckNvZGVzLmFwb3N0cm9waGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcnNNYXliZSgpIHtcbiAgaWYgKGVhdCh0dC5jb21tYSkpIHtcbiAgICBwYXJzZUV4cG9ydFNwZWNpZmllcnMoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFeHBvcnRGcm9tKCkge1xuICBpZiAoZWF0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICBwYXJzZUV4cHJBdG9tKCk7XG4gICAgbWF5YmVQYXJzZUltcG9ydEF0dHJpYnV0ZXMoKTtcbiAgfVxuICBzZW1pY29sb24oKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUGFyc2VFeHBvcnRTdGFyKCkge1xuICBpZiAoaXNGbG93RW5hYmxlZCkge1xuICAgIHJldHVybiBmbG93U2hvdWxkUGFyc2VFeHBvcnRTdGFyKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGNoKHR0LnN0YXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0U3RhcigpIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VFeHBvcnRTdGFyKCk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlRXhwb3J0U3RhcigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlUGFyc2VFeHBvcnRTdGFyKCkge1xuICBleHBlY3QodHQuc3Rhcik7XG5cbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpKSB7XG4gICAgcGFyc2VFeHBvcnROYW1lc3BhY2UoKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZUV4cG9ydEZyb20oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVzcGFjZSgpIHtcbiAgbmV4dCgpO1xuICBzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSB0dC5fYXM7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBwYXJzZUV4cG9ydFNwZWNpZmllcnNNYXliZSgpO1xuICBwYXJzZUV4cG9ydEZyb20oKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgcmV0dXJuIChcbiAgICAoaXNUeXBlU2NyaXB0RW5hYmxlZCAmJiB0c0lzRGVjbGFyYXRpb25TdGFydCgpKSB8fFxuICAgIChpc0Zsb3dFbmFibGVkICYmIGZsb3dTaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkpIHx8XG4gICAgc3RhdGUudHlwZSA9PT0gdHQuX3ZhciB8fFxuICAgIHN0YXRlLnR5cGUgPT09IHR0Ll9jb25zdCB8fFxuICAgIHN0YXRlLnR5cGUgPT09IHR0Ll9sZXQgfHxcbiAgICBzdGF0ZS50eXBlID09PSB0dC5fZnVuY3Rpb24gfHxcbiAgICBzdGF0ZS50eXBlID09PSB0dC5fY2xhc3MgfHxcbiAgICBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSB8fFxuICAgIG1hdGNoKHR0LmF0KVxuICApO1xufVxuXG4vLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUgZXhwb3J0cy5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcnMoKSB7XG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgLy8gZXhwb3J0IHsgeCwgeSBhcyB6IH0gW2Zyb20gJy4uLiddXG4gIGV4cGVjdCh0dC5icmFjZUwpO1xuXG4gIHdoaWxlICghZWF0KHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBlY3QodHQuY29tbWEpO1xuICAgICAgaWYgKGVhdCh0dC5icmFjZVIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUV4cG9ydFNwZWNpZmllcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0U3BlY2lmaWVyKCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzUGFyc2VFeHBvcnRTcGVjaWZpZXIoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIHN0YXRlLnRva2Vuc1tzdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBJZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9hcykpIHtcbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0aW5nIGF0IHRoZSBgbW9kdWxlYCB0b2tlbiBpbiBhbiBpbXBvcnQsIGRldGVybWluZSBpZiBpdCB3YXMgdHJ1bHkgYW5cbiAqIGltcG9ydCByZWZsZWN0aW9uIHRva2VuIG9yIGp1c3QgbG9va3MgbGlrZSBvbmUuXG4gKlxuICogUmV0dXJucyB0cnVlIGZvcjpcbiAqIGltcG9ydCBtb2R1bGUgZm9vIGZyb20gXCJmb29cIjtcbiAqIGltcG9ydCBtb2R1bGUgZnJvbSBmcm9tIFwiZm9vXCI7XG4gKlxuICogUmV0dXJucyBmYWxzZSBmb3I6XG4gKiBpbXBvcnQgbW9kdWxlIGZyb20gXCJmb29cIjtcbiAqIGltcG9ydCBtb2R1bGUsIHtiYXJ9IGZyb20gXCJmb29cIjtcbiAqL1xuZnVuY3Rpb24gaXNJbXBvcnRSZWZsZWN0aW9uKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IHN0YXRlLnNuYXBzaG90KCk7XG4gIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZSk7XG4gIGlmIChlYXRDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSkge1xuICAgIGlmIChpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pKSB7XG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWF0Y2godHQuY29tbWEpKSB7XG4gICAgc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRWF0IHRoZSBcIm1vZHVsZVwiIHRva2VuIGZyb20gdGhlIGltcG9ydCByZWZsZWN0aW9uIHByb3Bvc2FsLlxuICogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaW1wb3J0LXJlZmxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VNYXliZUltcG9ydFJlZmxlY3Rpb24oKSB7XG4gIC8vIGlzSW1wb3J0UmVmbGVjdGlvbiBkb2VzIHNuYXBzaG90L3Jlc3RvcmUsIHNvIG9ubHkgcnVuIGl0IGlmIHdlIHNlZSB0aGUgd29yZFxuICAvLyBcIm1vZHVsZVwiLlxuICBpZiAoaXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpICYmIGlzSW1wb3J0UmVmbGVjdGlvbigpKSB7XG4gICAgbmV4dCgpO1xuICB9XG59XG5cbi8vIFBhcnNlcyBpbXBvcnQgZGVjbGFyYXRpb24uXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUltcG9ydCgpIHtcbiAgaWYgKGlzVHlwZVNjcmlwdEVuYWJsZWQgJiYgbWF0Y2godHQubmFtZSkgJiYgbG9va2FoZWFkVHlwZSgpID09PSB0dC5lcSkge1xuICAgIHRzUGFyc2VJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbigpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCAmJiBpc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpKSB7XG4gICAgY29uc3QgbG9va2FoZWFkID0gbG9va2FoZWFkVHlwZUFuZEtleXdvcmQoKTtcbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IHR0Lm5hbWUgJiYgbG9va2FoZWFkLmNvbnRleHR1YWxLZXl3b3JkICE9PSBDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkge1xuICAgICAgLy8gT25lIG9mIHRoZXNlIGBpbXBvcnQgdHlwZWAgY2FzZXM6XG4gICAgICAvLyBpbXBvcnQgdHlwZSBUID0gcmVxdWlyZSgnVCcpO1xuICAgICAgLy8gaW1wb3J0IHR5cGUgQSBmcm9tICdBJztcbiAgICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpO1xuICAgICAgaWYgKGxvb2thaGVhZFR5cGUoKSA9PT0gdHQuZXEpIHtcbiAgICAgICAgdHNQYXJzZUltcG9ydEVxdWFsc0RlY2xhcmF0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoaXMgaXMgYW4gYGltcG9ydCB0eXBlLi4uZnJvbWAgc3RhdGVtZW50LCB0aGVuIHdlIGFscmVhZHkgYXRlIHRoZVxuICAgICAgLy8gdHlwZSB0b2tlbiwgc28gcHJvY2VlZCB0byB0aGUgcmVndWxhciBpbXBvcnQgcGFyc2VyLlxuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IHR0LnN0YXIgfHwgbG9va2FoZWFkLnR5cGUgPT09IHR0LmJyYWNlTCkge1xuICAgICAgLy8gT25lIG9mIHRoZXNlIGBpbXBvcnQgdHlwZWAgY2FzZXMsIGluIHdoaWNoIGNhc2Ugd2UgY2FuIGVhdCB0aGUgdHlwZSB0b2tlblxuICAgICAgLy8gYW5kIHByb2NlZWQgYXMgbm9ybWFsOlxuICAgICAgLy8gaW1wb3J0IHR5cGUgKiBhcyBBIGZyb20gJ0EnO1xuICAgICAgLy8gaW1wb3J0IHR5cGUge2F9IGZyb20gJ0EnO1xuICAgICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgd2UgYXJlIGltcG9ydGluZyB0aGUgbmFtZSBcInR5cGVcIi5cbiAgfVxuXG4gIC8vIGltcG9ydCAnLi4uJ1xuICBpZiAobWF0Y2godHQuc3RyaW5nKSkge1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU1heWJlSW1wb3J0UmVmbGVjdGlvbigpO1xuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVycygpO1xuICAgIGV4cGVjdENvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pO1xuICAgIHBhcnNlRXhwckF0b20oKTtcbiAgfVxuICBtYXliZVBhcnNlSW1wb3J0QXR0cmlidXRlcygpO1xuICBzZW1pY29sb24oKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBzaG91bGRQYXJzZURlZmF1bHRJbXBvcnQoKSB7XG4gIHJldHVybiBtYXRjaCh0dC5uYW1lKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbCgpIHtcbiAgcGFyc2VJbXBvcnRlZElkZW50aWZpZXIoKTtcbn1cblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIGltcG9ydHMuXG5mdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllcnMoKSB7XG4gIGlmIChpc0Zsb3dFbmFibGVkKSB7XG4gICAgZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzKCk7XG4gIH1cblxuICBsZXQgZmlyc3QgPSB0cnVlO1xuICBpZiAoc2hvdWxkUGFyc2VEZWZhdWx0SW1wb3J0KCkpIHtcbiAgICAvLyBpbXBvcnQgZGVmYXVsdE9iaiwgeyB4LCB5IGFzIHogfSBmcm9tICcuLi4nXG4gICAgcGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbCgpO1xuXG4gICAgaWYgKCFlYXQodHQuY29tbWEpKSByZXR1cm47XG4gIH1cblxuICBpZiAobWF0Y2godHQuc3RhcikpIHtcbiAgICBuZXh0KCk7XG4gICAgZXhwZWN0Q29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpO1xuXG4gICAgcGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbCgpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXhwZWN0KHR0LmJyYWNlTCk7XG4gIHdoaWxlICghZWF0KHR0LmJyYWNlUikgJiYgIXN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXRlY3QgYW4gYXR0ZW1wdCB0byBkZWVwIGRlc3RydWN0dXJlXG4gICAgICBpZiAoZWF0KHR0LmNvbG9uKSkge1xuICAgICAgICB1bmV4cGVjdGVkKFxuICAgICAgICAgIFwiRVMyMDE1IG5hbWVkIGltcG9ydHMgZG8gbm90IGRlc3RydWN0dXJlLiBVc2UgYW5vdGhlciBzdGF0ZW1lbnQgZm9yIGRlc3RydWN0dXJpbmcgYWZ0ZXIgdGhlIGltcG9ydC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZXhwZWN0KHR0LmNvbW1hKTtcbiAgICAgIGlmIChlYXQodHQuYnJhY2VSKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUltcG9ydFNwZWNpZmllcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICBpZiAoaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRzUGFyc2VJbXBvcnRTcGVjaWZpZXIoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlzRmxvd0VuYWJsZWQpIHtcbiAgICBmbG93UGFyc2VJbXBvcnRTcGVjaWZpZXIoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcGFyc2VJbXBvcnRlZElkZW50aWZpZXIoKTtcbiAgaWYgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXMpKSB7XG4gICAgc3RhdGUudG9rZW5zW3N0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlLkltcG9ydEFjY2VzcztcbiAgICBuZXh0KCk7XG4gICAgcGFyc2VJbXBvcnRlZElkZW50aWZpZXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGltcG9ydCBhdHRyaWJ1dGVzIGxpa2UgYHdpdGgge3R5cGU6IFwianNvblwifWAsIG9yIHRoZSBsZWdhY3kgZm9ybVxuICogYGFzc2VydCB7dHlwZTogXCJqc29uXCJ9YC5cbiAqXG4gKiBJbXBvcnQgYXR0cmlidXRlcyB0ZWNobmljYWxseSBoYXZlIHRoZWlyIG93biBzeW50YXgsIGJ1dCBhcmUgYWx3YXlzIHBhcnNlYWJsZVxuICogYXMgYSBwbGFpbiBKUyBvYmplY3QsIHNvIGp1c3QgZG8gdGhhdCBmb3Igc2ltcGxpY2l0eS5cbiAqL1xuZnVuY3Rpb24gbWF5YmVQYXJzZUltcG9ydEF0dHJpYnV0ZXMoKSB7XG4gIGlmIChtYXRjaCh0dC5fd2l0aCkgfHwgKGlzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fYXNzZXJ0KSAmJiAhaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkpKSB7XG4gICAgbmV4dCgpO1xuICAgIHBhcnNlT2JqKGZhbHNlLCBmYWxzZSk7XG4gIH1cbn1cbiIsICJcbmltcG9ydCB7bmV4dFRva2VuLCBza2lwTGluZUNvbW1lbnR9IGZyb20gXCIuLi90b2tlbml6ZXIvaW5kZXhcIjtcbmltcG9ydCB7Y2hhckNvZGVzfSBmcm9tIFwiLi4vdXRpbC9jaGFyY29kZXNcIjtcbmltcG9ydCB7aW5wdXQsIHN0YXRlfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQge3BhcnNlVG9wTGV2ZWx9IGZyb20gXCIuL3N0YXRlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWxlKCkge1xuICAvLyBJZiBlbmFibGVkLCBza2lwIGxlYWRpbmcgaGFzaGJhbmcgbGluZS5cbiAgaWYgKFxuICAgIHN0YXRlLnBvcyA9PT0gMCAmJlxuICAgIGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IGNoYXJDb2Rlcy5udW1iZXJTaWduICYmXG4gICAgaW5wdXQuY2hhckNvZGVBdCgxKSA9PT0gY2hhckNvZGVzLmV4Y2xhbWF0aW9uTWFya1xuICApIHtcbiAgICBza2lwTGluZUNvbW1lbnQoMik7XG4gIH1cbiAgbmV4dFRva2VuKCk7XG4gIHJldHVybiBwYXJzZVRvcExldmVsKCk7XG59XG4iLCAiXG5cbmltcG9ydCB7YXVnbWVudEVycm9yLCBpbml0UGFyc2VyLCBzdGF0ZX0gZnJvbSBcIi4vdHJhdmVyc2VyL2Jhc2VcIjtcbmltcG9ydCB7cGFyc2VGaWxlfSBmcm9tIFwiLi90cmF2ZXJzZXIvaW5kZXhcIjtcblxuZXhwb3J0IGNsYXNzIEZpbGUge1xuICBcbiAgXG5cbiAgY29uc3RydWN0b3IodG9rZW5zLCBzY29wZXMpIHtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnNjb3BlcyA9IHNjb3BlcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoXG4gIGlucHV0LFxuICBpc0pTWEVuYWJsZWQsXG4gIGlzVHlwZVNjcmlwdEVuYWJsZWQsXG4gIGlzRmxvd0VuYWJsZWQsXG4pIHtcbiAgaWYgKGlzRmxvd0VuYWJsZWQgJiYgaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb21iaW5lIGZsb3cgYW5kIHR5cGVzY3JpcHQgcGx1Z2lucy5cIik7XG4gIH1cbiAgaW5pdFBhcnNlcihpbnB1dCwgaXNKU1hFbmFibGVkLCBpc1R5cGVTY3JpcHRFbmFibGVkLCBpc0Zsb3dFbmFibGVkKTtcbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VGaWxlKCk7XG4gIGlmIChzdGF0ZS5lcnJvcikge1xuICAgIHRocm93IGF1Z21lbnRFcnJvcihzdGF0ZS5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICJpbXBvcnQge0NvbnRleHR1YWxLZXl3b3JkfSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci9rZXl3b3Jkc1wiO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBvcHRpb25hbCBjaGFpbiBvciBudWxsaXNoIGNvYWxlc2Npbmcgb3BlcmF0aW9uIGhhcyBhbnkgYXdhaXQgc3RhdGVtZW50cyBpblxuICogaXQuIElmIHNvLCB3ZSdsbCBuZWVkIHRvIHRyYW5zcGlsZSB0byBhbiBhc3luYyBvcGVyYXRpb24uXG4gKlxuICogV2UgY29tcHV0ZSB0aGlzIGJ5IHdhbGtpbmcgdGhlIGxlbmd0aCBvZiB0aGUgb3BlcmF0aW9uIGFuZCByZXR1cm5pbmcgdHJ1ZSBpZiB3ZSBzZWUgYW4gYXdhaXRcbiAqIGtleXdvcmQgdXNlZCBhcyBhIHJlYWwgYXdhaXQgKHJhdGhlciB0aGFuIGFuIG9iamVjdCBrZXkgb3IgcHJvcGVydHkgYWNjZXNzKS4gTmVzdGVkIG9wdGlvbmFsXG4gKiBjaGFpbi9udWxsaXNoIG9wZXJhdGlvbnMgbmVlZCB0byBiZSB0cmFja2VkIGJ1dCBkb24ndCBzaWxlbmNlIGF3YWl0LCBidXQgYSBuZXN0ZWQgYXN5bmMgZnVuY3Rpb25cbiAqIChvciBhbnkgb3RoZXIgbmVzdGVkIHNjb3BlKSB3aWxsIG1ha2UgdGhlIGF3YWl0IG5vdCBjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBc3luY09wZXJhdGlvbih0b2tlbnMpIHtcbiAgbGV0IGluZGV4ID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICBsZXQgZGVwdGggPSAwO1xuICBjb25zdCBzdGFydFRva2VuID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICBkbyB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnMudG9rZW5zW2luZGV4XTtcbiAgICBpZiAodG9rZW4uaXNPcHRpb25hbENoYWluU3RhcnQpIHtcbiAgICAgIGRlcHRoKys7XG4gICAgfVxuICAgIGlmICh0b2tlbi5pc09wdGlvbmFsQ2hhaW5FbmQpIHtcbiAgICAgIGRlcHRoLS07XG4gICAgfVxuICAgIGRlcHRoICs9IHRva2VuLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0cztcbiAgICBkZXB0aCAtPSB0b2tlbi5udW1OdWxsaXNoQ29hbGVzY2VFbmRzO1xuXG4gICAgaWYgKFxuICAgICAgdG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IENvbnRleHR1YWxLZXl3b3JkLl9hd2FpdCAmJlxuICAgICAgdG9rZW4uaWRlbnRpZmllclJvbGUgPT0gbnVsbCAmJlxuICAgICAgdG9rZW4uc2NvcGVEZXB0aCA9PT0gc3RhcnRUb2tlbi5zY29wZURlcHRoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaW5kZXggKz0gMTtcbiAgfSB3aGlsZSAoZGVwdGggPiAwICYmIGluZGV4IDwgdG9rZW5zLnRva2Vucy5sZW5ndGgpO1xuICByZXR1cm4gZmFsc2U7XG59XG4iLCAiXG5cblxuaW1wb3J0IHsgVG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5pbXBvcnQgaXNBc3luY09wZXJhdGlvbiBmcm9tIFwiLi91dGlsL2lzQXN5bmNPcGVyYXRpb25cIjtcblxuXG5cblxuXG5cblxuXG5cblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlblByb2Nlc3NvciB7XG4gICBfX2luaXQoKSB7dGhpcy5yZXN1bHRDb2RlID0gXCJcIn1cbiAgLy8gQXJyYXkgbWFwcGluZyBpbnB1dCB0b2tlbiBpbmRleCB0byBvcHRpb25hbCBzdHJpbmcgaW5kZXggcG9zaXRpb24gaW4gdGhlXG4gIC8vIG91dHB1dCBjb2RlLlxuICAgX19pbml0MigpIHt0aGlzLnJlc3VsdE1hcHBpbmdzID0gbmV3IEFycmF5KHRoaXMudG9rZW5zLmxlbmd0aCl9XG4gICBfX2luaXQzKCkge3RoaXMudG9rZW5JbmRleCA9IDB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIGNvZGUsXG4gICAgIHRva2VucyxcbiAgICAgaXNGbG93RW5hYmxlZCxcbiAgICAgZGlzYWJsZUVTVHJhbnNmb3JtcyxcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgKSB7O3RoaXMuY29kZSA9IGNvZGU7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5pc0Zsb3dFbmFibGVkID0gaXNGbG93RW5hYmxlZDt0aGlzLmRpc2FibGVFU1RyYW5zZm9ybXMgPSBkaXNhYmxlRVNUcmFuc2Zvcm1zO3RoaXMuaGVscGVyTWFuYWdlciA9IGhlbHBlck1hbmFnZXI7VG9rZW5Qcm9jZXNzb3IucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1Rva2VuUHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7VG9rZW5Qcm9jZXNzb3IucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTt9XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IHRoZSB0b2tlbiBzdGF0ZSBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXN0b3JlZCBsYXRlciwgdXNlZnVsIGZvclxuICAgKiB0aGluZ3MgbGlrZSBsb29rYWhlYWQuXG4gICAqXG4gICAqIHJlc3VsdE1hcHBpbmdzIGRvIG5vdCBuZWVkIHRvIGJlIGNvcGllZCBzaW5jZSBpbiBhbGwgdXNlIGNhc2VzLCB0aGV5IHdpbGxcbiAgICogYmUgb3ZlcndyaXR0ZW4gYW55d2F5IGFmdGVyIHJlc3RvcmUuXG4gICAqL1xuICBzbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0Q29kZTogdGhpcy5yZXN1bHRDb2RlLFxuICAgICAgdG9rZW5JbmRleDogdGhpcy50b2tlbkluZGV4LFxuICAgIH07XG4gIH1cblxuICByZXN0b3JlVG9TbmFwc2hvdChzbmFwc2hvdCkge1xuICAgIHRoaXMucmVzdWx0Q29kZSA9IHNuYXBzaG90LnJlc3VsdENvZGU7XG4gICAgdGhpcy50b2tlbkluZGV4ID0gc25hcHNob3QudG9rZW5JbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW5kIHJldHVybiB0aGUgY29kZSBnZW5lcmF0ZWQgc2luY2UgdGhlIHNuYXBzaG90LCBsZWF2aW5nIHRoZVxuICAgKiBjdXJyZW50IHRva2VuIHBvc2l0aW9uIGluLXBsYWNlLiBVbmxpa2UgbW9zdCBUb2tlblByb2Nlc3NvciBvcGVyYXRpb25zLFxuICAgKiB0aGlzIG9wZXJhdGlvbiBjYW4gcmVzdWx0IGluIGlucHV0L291dHB1dCBsaW5lIG51bWJlciBtaXNtYXRjaGVzIGJlY2F1c2VcbiAgICogdGhlIHJlbW92ZWQgY29kZSBtYXkgY29udGFpbiBuZXdsaW5lcywgc28gdGhpcyBvcGVyYXRpb24gc2hvdWxkIGJlIHVzZWRcbiAgICogc3BhcmluZ2x5LlxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlHZXRBbmRSZW1vdmVDb2RlU2luY2VTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVzdWx0Q29kZS5zbGljZShzbmFwc2hvdC5yZXN1bHRDb2RlLmxlbmd0aCk7XG4gICAgdGhpcy5yZXN1bHRDb2RlID0gc25hcHNob3QucmVzdWx0Q29kZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlID0gXCJcIjtcbiAgICB0aGlzLnJlc3VsdE1hcHBpbmdzID0gbmV3IEFycmF5KHRoaXMudG9rZW5zLmxlbmd0aCk7XG4gICAgdGhpcy50b2tlbkluZGV4ID0gMDtcbiAgfVxuXG4gIG1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChpbmRleCwgY29udGV4dHVhbEtleXdvcmQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0Lm5hbWUpICYmXG4gICAgICB0aGlzLnRva2Vuc1tpbmRleF0uY29udGV4dHVhbEtleXdvcmQgPT09IGNvbnRleHR1YWxLZXl3b3JkXG4gICAgKTtcbiAgfVxuXG4gIGlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkge1xuICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gcHJvY2VzcyBlc2NhcGVzIHNpbmNlIHRlY2huaWNhbGx5IHlvdSBjYW4gaGF2ZSB1bmljb2RlIGVzY2FwZXMgaW4gdmFyaWFibGVcbiAgICAvLyBuYW1lcy5cbiAgICByZXR1cm4gdGhpcy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRoaXMudG9rZW5zW2luZGV4XSk7XG4gIH1cblxuICBpZGVudGlmaWVyTmFtZUF0UmVsYXRpdmVJbmRleChyZWxhdGl2ZUluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0aGlzLnRva2VuQXRSZWxhdGl2ZUluZGV4KHJlbGF0aXZlSW5kZXgpKTtcbiAgfVxuXG4gIGlkZW50aWZpZXJOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odGhpcy5jdXJyZW50VG9rZW4oKSk7XG4gIH1cblxuICBpZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSB7XG4gICAgcmV0dXJuIHRoaXMuY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTtcbiAgfVxuXG4gIHJhd0NvZGVGb3JUb2tlbih0b2tlbikge1xuICAgIHJldHVybiB0aGlzLmNvZGUuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7XG4gIH1cblxuICBzdHJpbmdWYWx1ZUF0SW5kZXgoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdWYWx1ZUZvclRva2VuKHRoaXMudG9rZW5zW2luZGV4XSk7XG4gIH1cblxuICBzdHJpbmdWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdWYWx1ZUZvclRva2VuKHRoaXMuY3VycmVudFRva2VuKCkpO1xuICB9XG5cbiAgc3RyaW5nVmFsdWVGb3JUb2tlbih0b2tlbikge1xuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB3aGVuIHR3byBpbXBvcnRzIGFyZSB0aGUgc2FtZSBhbmQgdG8gcmVzb2x2ZSBUeXBlU2NyaXB0IGVudW0ga2V5cy5cbiAgICAvLyBJZGVhbGx5IHdlJ2QgcHJvY2VzcyBlc2NhcGVzIHdpdGhpbiB0aGUgc3RyaW5ncywgYnV0IGZvciBub3cgd2UgcHJldHR5IG11Y2ggdGFrZSB0aGUgcmF3XG4gICAgLy8gY29kZS5cbiAgICByZXR1cm4gdGhpcy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7XG4gIH1cblxuICBtYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHQxKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MTtcbiAgfVxuXG4gIG1hdGNoZXMyQXRJbmRleChpbmRleCwgdDEsIHQyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MSAmJiB0aGlzLnRva2Vuc1tpbmRleCArIDFdLnR5cGUgPT09IHQyO1xuICB9XG5cbiAgbWF0Y2hlczNBdEluZGV4KGluZGV4LCB0MSwgdDIsIHQzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MSAmJlxuICAgICAgdGhpcy50b2tlbnNbaW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbaW5kZXggKyAyXS50eXBlID09PSB0M1xuICAgICk7XG4gIH1cblxuICBtYXRjaGVzMSh0MSkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxO1xuICB9XG5cbiAgbWF0Y2hlczIodDEsIHQyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0udHlwZSA9PT0gdDEgJiYgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMV0udHlwZSA9PT0gdDI7XG4gIH1cblxuICBtYXRjaGVzMyh0MSwgdDIsIHQzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0udHlwZSA9PT0gdDEgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDFdLnR5cGUgPT09IHQyICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAyXS50eXBlID09PSB0M1xuICAgICk7XG4gIH1cblxuICBtYXRjaGVzNCh0MSwgdDIsIHQzLCB0NCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMl0udHlwZSA9PT0gdDMgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDNdLnR5cGUgPT09IHQ0XG4gICAgKTtcbiAgfVxuXG4gIG1hdGNoZXM1KHQxLCB0MiwgdDMsIHQ0LCB0NSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMl0udHlwZSA9PT0gdDMgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDNdLnR5cGUgPT09IHQ0ICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyA0XS50eXBlID09PSB0NVxuICAgICk7XG4gIH1cblxuICBtYXRjaGVzQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2VuSW5kZXgsIGNvbnRleHR1YWxLZXl3b3JkKTtcbiAgfVxuXG4gIG1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbCh0eXBlLCBjb250ZXh0SWQpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzMSh0eXBlKSAmJiB0aGlzLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZCA9PT0gY29udGV4dElkO1xuICB9XG5cbiAgcHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKSB7XG4gICAgbGV0IHdoaXRlc3BhY2VBbmRDb21tZW50cyA9IHRoaXMuY29kZS5zbGljZShcbiAgICAgIHRoaXMudG9rZW5JbmRleCA+IDAgPyB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggLSAxXS5lbmQgOiAwLFxuICAgICAgdGhpcy50b2tlbkluZGV4IDwgdGhpcy50b2tlbnMubGVuZ3RoID8gdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5zdGFydCA6IHRoaXMuY29kZS5sZW5ndGgsXG4gICAgKTtcbiAgICBpZiAodGhpcy5pc0Zsb3dFbmFibGVkKSB7XG4gICAgICB3aGl0ZXNwYWNlQW5kQ29tbWVudHMgPSB3aGl0ZXNwYWNlQW5kQ29tbWVudHMucmVwbGFjZSgvQGZsb3cvZywgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB3aGl0ZXNwYWNlQW5kQ29tbWVudHM7XG4gIH1cblxuICByZXBsYWNlVG9rZW4obmV3Q29kZSkge1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLnByZXZpb3VzV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IG5ld0NvZGU7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgcmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShuZXdDb2RlKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMucHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKS5yZXBsYWNlKC9bXlxcclxcbl0vZywgXCJcIik7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IG5ld0NvZGU7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgcmVtb3ZlSW5pdGlhbFRva2VuKCkge1xuICAgIHRoaXMucmVwbGFjZVRva2VuKFwiXCIpO1xuICB9XG5cbiAgcmVtb3ZlVG9rZW4oKSB7XG4gICAgdGhpcy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKFwiXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgY29kZSB1bnRpbCB0aGUgbmV4dCB9LCBhY2NvdW50aW5nIGZvciBiYWxhbmNlZCBicmFjZXMuXG4gICAqL1xuICByZW1vdmVCYWxhbmNlZENvZGUoKSB7XG4gICAgbGV0IGJyYWNlRGVwdGggPSAwO1xuICAgIHdoaWxlICghdGhpcy5pc0F0RW5kKCkpIHtcbiAgICAgIGlmICh0aGlzLm1hdGNoZXMxKHR0LmJyYWNlTCkpIHtcbiAgICAgICAgYnJhY2VEZXB0aCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgaWYgKGJyYWNlRGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJhY2VEZXB0aC0tO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlFeHBlY3RlZFRva2VuKHRva2VuVHlwZSkge1xuICAgIGlmICh0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgIT09IHRva2VuVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0b2tlbiAke3Rva2VuVHlwZX1gKTtcbiAgICB9XG4gICAgdGhpcy5jb3B5VG9rZW4oKTtcbiAgfVxuXG4gIGNvcHlUb2tlbigpIHtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5wcmV2aW91c1doaXRlc3BhY2VBbmRDb21tZW50cygpO1xuICAgIHRoaXMuYXBwZW5kVG9rZW5QcmVmaXgoKTtcbiAgICB0aGlzLnJlc3VsdE1hcHBpbmdzW3RoaXMudG9rZW5JbmRleF0gPSB0aGlzLnJlc3VsdENvZGUubGVuZ3RoO1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLmNvZGUuc2xpY2UoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnN0YXJ0LFxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5lbmQsXG4gICAgKTtcbiAgICB0aGlzLmFwcGVuZFRva2VuU3VmZml4KCk7XG4gICAgdGhpcy50b2tlbkluZGV4Kys7XG4gIH1cblxuICBjb3B5VG9rZW5XaXRoUHJlZml4KHByZWZpeCkge1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLnByZXZpb3VzV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSBwcmVmaXg7XG4gICAgdGhpcy5yZXN1bHRNYXBwaW5nc1t0aGlzLnRva2VuSW5kZXhdID0gdGhpcy5yZXN1bHRDb2RlLmxlbmd0aDtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5jb2RlLnNsaWNlKFxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5zdGFydCxcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0uZW5kLFxuICAgICk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgIGFwcGVuZFRva2VuUHJlZml4KCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAodG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlU3RhcnRzIHx8IHRva2VuLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICB0b2tlbi5pc0FzeW5jT3BlcmF0aW9uID0gaXNBc3luY09wZXJhdGlvbih0aGlzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUVTVHJhbnNmb3Jtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlU3RhcnRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0czsgaSsrKSB7XG4gICAgICAgIGlmICh0b2tlbi5pc0FzeW5jT3BlcmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IFwiYXdhaXQgXCI7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiYXN5bmNOdWxsaXNoQ29hbGVzY2VcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwibnVsbGlzaENvYWxlc2NlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIihcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRva2VuLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICBpZiAodG9rZW4uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCJhd2FpdCBcIjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2VuSW5kZXggPiAwICYmIHRoaXMudG9rZW5BdFJlbGF0aXZlSW5kZXgoLTEpLnR5cGUgPT09IHR0Ll9kZWxldGUpIHtcbiAgICAgICAgaWYgKHRva2VuLmlzQXN5bmNPcGVyYXRpb24pIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXCJhc3luY09wdGlvbmFsQ2hhaW5EZWxldGVcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwib3B0aW9uYWxDaGFpbkRlbGV0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0b2tlbi5pc0FzeW5jT3BlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcImFzeW5jT3B0aW9uYWxDaGFpblwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcIm9wdGlvbmFsQ2hhaW5cIik7XG4gICAgICB9XG4gICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCIoW1wiO1xuICAgIH1cbiAgfVxuXG4gICBhcHBlbmRUb2tlblN1ZmZpeCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKHRva2VuLmlzT3B0aW9uYWxDaGFpbkVuZCAmJiAhdGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zKSB7XG4gICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCJdKVwiO1xuICAgIH1cbiAgICBpZiAodG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlRW5kcyAmJiAhdGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLm51bU51bGxpc2hDb2FsZXNjZUVuZHM7IGkrKykge1xuICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCIpKVwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFwcGVuZENvZGUoY29kZSkge1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSBjb2RlO1xuICB9XG5cbiAgY3VycmVudFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdO1xuICB9XG5cbiAgY3VycmVudFRva2VuQ29kZSgpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgcmV0dXJuIHRoaXMuY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTtcbiAgfVxuXG4gIHRva2VuQXRSZWxhdGl2ZUluZGV4KHJlbGF0aXZlSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgcmVsYXRpdmVJbmRleF07XG4gIH1cblxuICBjdXJyZW50SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5JbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIHRoZSBuZXh0IHRva2VuLiBPbmx5IHN1aXRhYmxlIGluIHByZXByb2Nlc3Npbmcgc3RlcHMuIFdoZW5cbiAgICogZ2VuZXJhdGluZyBuZXcgY29kZSwgeW91IHNob3VsZCB1c2UgY29weVRva2VuIG9yIHJlbW92ZVRva2VuLlxuICAgKi9cbiAgbmV4dFRva2VuKCkge1xuICAgIGlmICh0aGlzLnRva2VuSW5kZXggPT09IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZGx5IHJlYWNoZWQgZW5kIG9mIGlucHV0LlwiKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbkluZGV4Kys7XG4gIH1cblxuICBwcmV2aW91c1Rva2VuKCkge1xuICAgIHRoaXMudG9rZW5JbmRleC0tO1xuICB9XG5cbiAgZmluaXNoKCkge1xuICAgIGlmICh0aGlzLnRva2VuSW5kZXggIT09IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJpZWQgdG8gZmluaXNoIHByb2Nlc3NpbmcgdG9rZW5zIGJlZm9yZSByZWFjaGluZyB0aGUgZW5kLlwiKTtcbiAgICB9XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMucHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTtcbiAgICByZXR1cm4ge2NvZGU6IHRoaXMucmVzdWx0Q29kZSwgbWFwcGluZ3M6IHRoaXMucmVzdWx0TWFwcGluZ3N9O1xuICB9XG5cbiAgaXNBdEVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkluZGV4ID09PSB0aGlzLnRva2Vucy5sZW5ndGg7XG4gIH1cbn1cbiIsICJcblxuaW1wb3J0IHtDb250ZXh0dWFsS2V5d29yZH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsYXNzIGZpZWxkcyBmb3IgdGhpcyBjbGFzcywgZ2l2ZW4gYSB0b2tlbiBwcm9jZXNzb3IgcG9pbnRpbmcgdG8gdGhlXG4gKiBvcGVuLWJyYWNlIGF0IHRoZSBzdGFydCBvZiB0aGUgY2xhc3MuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsYXNzSW5mbyhcbiAgcm9vdFRyYW5zZm9ybWVyLFxuICB0b2tlbnMsXG4gIG5hbWVNYW5hZ2VyLFxuICBkaXNhYmxlRVNUcmFuc2Zvcm1zLFxuKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gdG9rZW5zLnNuYXBzaG90KCk7XG5cbiAgY29uc3QgaGVhZGVySW5mbyA9IHByb2Nlc3NDbGFzc0hlYWRlcih0b2tlbnMpO1xuXG4gIGxldCBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyA9IFtdO1xuICBjb25zdCBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMgPSBbXTtcbiAgY29uc3Qgc3RhdGljSW5pdGlhbGl6ZXJOYW1lcyA9IFtdO1xuICBsZXQgY29uc3RydWN0b3JJbnNlcnRQb3MgPSBudWxsO1xuICBjb25zdCBmaWVsZHMgPSBbXTtcbiAgY29uc3QgcmFuZ2VzVG9SZW1vdmUgPSBbXTtcblxuICBjb25zdCBjbGFzc0NvbnRleHRJZCA9IHRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gIGlmIChjbGFzc0NvbnRleHRJZCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9uLW51bGwgY2xhc3MgY29udGV4dCBJRCBvbiBjbGFzcyBvcGVuLWJyYWNlLlwiKTtcbiAgfVxuXG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKHR0LmJyYWNlUiwgY2xhc3NDb250ZXh0SWQpKSB7XG4gICAgaWYgKHRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpICYmICF0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICAoe2NvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLCBjb25zdHJ1Y3Rvckluc2VydFBvc30gPSBwcm9jZXNzQ29uc3RydWN0b3IodG9rZW5zKSk7XG4gICAgfSBlbHNlIGlmICh0b2tlbnMubWF0Y2hlczEodHQuc2VtaSkpIHtcbiAgICAgIGlmICghZGlzYWJsZUVTVHJhbnNmb3Jtcykge1xuICAgICAgICByYW5nZXNUb1JlbW92ZS5wdXNoKHtzdGFydDogdG9rZW5zLmN1cnJlbnRJbmRleCgpLCBlbmQ6IHRva2Vucy5jdXJyZW50SW5kZXgoKSArIDF9KTtcbiAgICAgIH1cbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWl0aGVyIGEgbWV0aG9kIG9yIGEgZmllbGQuIFNraXAgdG8gdGhlIGlkZW50aWZpZXIgcGFydC5cbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0YXJ0SW5kZXggPSB0b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgICBsZXQgaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgIGxldCBpc0VTUHJpdmF0ZSA9IGZhbHNlO1xuICAgICAgbGV0IGlzRGVjbGFyZU9yQWJzdHJhY3QgPSBmYWxzZTtcbiAgICAgIHdoaWxlIChpc0FjY2Vzc01vZGlmaWVyKHRva2Vucy5jdXJyZW50VG9rZW4oKSkpIHtcbiAgICAgICAgaWYgKHRva2Vucy5tYXRjaGVzMSh0dC5fc3RhdGljKSkge1xuICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKHR0Lmhhc2gpKSB7XG4gICAgICAgICAgaXNFU1ByaXZhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbnMubWF0Y2hlczEodHQuX2RlY2xhcmUpIHx8IHRva2Vucy5tYXRjaGVzMSh0dC5fYWJzdHJhY3QpKSB7XG4gICAgICAgICAgaXNEZWNsYXJlT3JBYnN0cmFjdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3RhdGljICYmIHRva2Vucy5tYXRjaGVzMSh0dC5icmFjZUwpKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzdGF0aWMgYmxvY2ssIHNvIGRvbid0IHByb2Nlc3MgaXQgaW4gYW55IHNwZWNpYWwgd2F5LlxuICAgICAgICBza2lwVG9OZXh0Q2xhc3NFbGVtZW50KHRva2VucywgY2xhc3NDb250ZXh0SWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0VTUHJpdmF0ZSkge1xuICAgICAgICAvLyBTdWNyYXNlIGRvZXNuJ3QgYXR0ZW1wdCB0byB0cmFuc3BpbGUgcHJpdmF0ZSBmaWVsZHM7IGp1c3QgbGVhdmUgdGhlbSBhcy1pcy5cbiAgICAgICAgc2tpcFRvTmV4dENsYXNzRWxlbWVudCh0b2tlbnMsIGNsYXNzQ29udGV4dElkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpICYmXG4gICAgICAgICF0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlXG4gICAgICApIHtcbiAgICAgICAgKHtjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cywgY29uc3RydWN0b3JJbnNlcnRQb3N9ID0gcHJvY2Vzc0NvbnN0cnVjdG9yKHRva2VucykpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZVN0YXJ0SW5kZXggPSB0b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgICBza2lwRmllbGROYW1lKHRva2Vucyk7XG4gICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKHR0Lmxlc3NUaGFuKSB8fCB0b2tlbnMubWF0Y2hlczEodHQucGFyZW5MKSkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbWV0aG9kLCBzbyBub3RoaW5nIHRvIHByb2Nlc3MuXG4gICAgICAgIHNraXBUb05leHRDbGFzc0VsZW1lbnQodG9rZW5zLCBjbGFzc0NvbnRleHRJZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgYSB0eXBlIGFubm90YXRpb24gdGhhdCB3ZSBuZWVkIHRvIHNraXAuXG4gICAgICB3aGlsZSAodG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgICB9XG4gICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKHR0LmVxKSkge1xuICAgICAgICBjb25zdCBlcXVhbHNJbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhbiBpbml0aWFsaXplciwgc28gd2UgbmVlZCB0byB3cmFwIGluIGFuIGluaXRpYWxpemVyIG1ldGhvZC5cbiAgICAgICAgY29uc3QgdmFsdWVFbmQgPSB0b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmICh2YWx1ZUVuZCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcmhzRW5kSW5kZXggb24gY2xhc3MgZmllbGQgYXNzaWdubWVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgICB3aGlsZSAodG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgdmFsdWVFbmQpIHtcbiAgICAgICAgICByb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluaXRpYWxpemVyTmFtZTtcbiAgICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgICAgaW5pdGlhbGl6ZXJOYW1lID0gbmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9faW5pdFN0YXRpY1wiKTtcbiAgICAgICAgICBzdGF0aWNJbml0aWFsaXplck5hbWVzLnB1c2goaW5pdGlhbGl6ZXJOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbml0aWFsaXplck5hbWUgPSBuYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX19pbml0XCIpO1xuICAgICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcy5wdXNoKGluaXRpYWxpemVyTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmllbGRzIHN0YXJ0IGF0IHRoZSBuYW1lLCBzbyBgc3RhdGljIHggPSAxO2AgaGFzIGEgZmllbGQgcmFuZ2Ugb2YgYHggPSAxO2AuXG4gICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICBpbml0aWFsaXplck5hbWUsXG4gICAgICAgICAgZXF1YWxzSW5kZXgsXG4gICAgICAgICAgc3RhcnQ6IG5hbWVTdGFydEluZGV4LFxuICAgICAgICAgIGVuZDogdG9rZW5zLmN1cnJlbnRJbmRleCgpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIWRpc2FibGVFU1RyYW5zZm9ybXMgfHwgaXNEZWNsYXJlT3JBYnN0cmFjdCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBmaWVsZCBkZWNsYXJhdGlvbiwgbGlrZSBgeDtgLiBXaXRoIHRoZSBjbGFzcyB0cmFuc2Zvcm0gZW5hYmxlZCwgd2UganVzdFxuICAgICAgICAvLyByZW1vdmUgdGhlIGxpbmUgc28gdGhhdCBubyBvdXRwdXQgaXMgcHJvZHVjZWQuIFdpdGggdGhlIGNsYXNzIHRyYW5zZm9ybSBkaXNhYmxlZCwgd2VcbiAgICAgICAgLy8gdXN1YWxseSB3YW50IHRvIHByZXNlcnZlIHRoZSBkZWNsYXJhdGlvbiAoYnV0IHN0aWxsIHN0cmlwIHR5cGVzKSwgYnV0IGlmIHRoZSBgZGVjbGFyZWBcbiAgICAgICAgLy8gb3IgYGFic3RyYWN0YCBrZXl3b3JkIGlzIHNwZWNpZmllZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgbGluZSB0byBhdm9pZCBpbml0aWFsaXppbmcgdGhlXG4gICAgICAgIC8vIHZhbHVlIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgcmFuZ2VzVG9SZW1vdmUucHVzaCh7c3RhcnQ6IHN0YXRlbWVudFN0YXJ0SW5kZXgsIGVuZDogdG9rZW5zLmN1cnJlbnRJbmRleCgpfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9rZW5zLnJlc3RvcmVUb1NuYXBzaG90KHNuYXBzaG90KTtcbiAgaWYgKGRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAvLyBXaXRoIEVTIHRyYW5zZm9ybXMgZGlzYWJsZWQsIHdlIGRvbid0IHdhbnQgdG8gdHJhbnNmb3JtIHJlZ3VsYXIgY2xhc3NcbiAgICAvLyBmaWVsZCBkZWNsYXJhdGlvbnMsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBhZGRpdGlvbmFsIHRyaWNrcyB0b1xuICAgIC8vIHJlZmVyZW5jZSB0aGUgY29uc3RydWN0b3IgZm9yIHN0YXRpYyBpbml0LCBidXQgd2Ugc3RpbGwgbmVlZCB0byB0cmFuc2Zvcm1cbiAgICAvLyBUeXBlU2NyaXB0IGZpZWxkIGluaXRpYWxpemVycyBkZWZpbmVkIGFzIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgYW5kIHdlXG4gICAgLy8gc3RpbGwgbmVlZCB0byByZW1vdmUgYGRlY2xhcmVgIGZpZWxkcy4gRm9yIG5vdywgd2UgcnVuIHRoZSBzYW1lIGNvZGVcbiAgICAvLyBwYXRoIGJ1dCBvbWl0IGFueSBmaWVsZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlIGNsYXNzIGhhZCBubyBmaWVsZFxuICAgIC8vIGRlY2xhcmF0aW9ucy4gSW4gdGhlIGZ1dHVyZSwgd2hlbiB3ZSBmdWxseSBkcm9wIHRoZSBjbGFzcyBmaWVsZHNcbiAgICAvLyB0cmFuc2Zvcm0sIHdlIGNhbiBzaW1wbGlmeSB0aGlzIGNvZGUgc2lnbmlmaWNhbnRseS5cbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVySW5mbyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzOiBbXSxcbiAgICAgIHN0YXRpY0luaXRpYWxpemVyTmFtZXM6IFtdLFxuICAgICAgY29uc3RydWN0b3JJbnNlcnRQb3MsXG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVySW5mbyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzLFxuICAgICAgc3RhdGljSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgIGNvbnN0cnVjdG9ySW5zZXJ0UG9zLFxuICAgICAgZmllbGRzLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIE1vdmUgdGhlIHRva2VuIHByb2Nlc3NvciB0byB0aGUgbmV4dCBtZXRob2QvZmllbGQgaW4gdGhlIGNsYXNzLlxuICpcbiAqIFRvIGRvIHRoYXQsIHdlIHNlZWsgZm9yd2FyZCB0byB0aGUgbmV4dCBzdGFydCBvZiBhIGNsYXNzIG5hbWUgKGVpdGhlciBhbiBvcGVuXG4gKiBicmFja2V0IG9yIGFuIGlkZW50aWZpZXIsIG9yIHRoZSBjbG9zaW5nIGN1cmx5IGJyYWNlKSwgdGhlbiBzZWVrIGJhY2t3YXJkIHRvXG4gKiBpbmNsdWRlIGFueSBhY2Nlc3MgbW9kaWZpZXJzLlxuICovXG5mdW5jdGlvbiBza2lwVG9OZXh0Q2xhc3NFbGVtZW50KHRva2VucywgY2xhc3NDb250ZXh0SWQpIHtcbiAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB3aGlsZSAodG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZCAhPT0gY2xhc3NDb250ZXh0SWQpIHtcbiAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIH1cbiAgd2hpbGUgKGlzQWNjZXNzTW9kaWZpZXIodG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KC0xKSkpIHtcbiAgICB0b2tlbnMucHJldmlvdXNUb2tlbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDbGFzc0hlYWRlcih0b2tlbnMpIHtcbiAgY29uc3QgY2xhc3NUb2tlbiA9IHRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgY29uc3QgY29udGV4dElkID0gY2xhc3NUb2tlbi5jb250ZXh0SWQ7XG4gIGlmIChjb250ZXh0SWQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGNvbnRleHQgSUQgb24gY2xhc3MgdG9rZW4uXCIpO1xuICB9XG4gIGNvbnN0IGlzRXhwcmVzc2lvbiA9IGNsYXNzVG9rZW4uaXNFeHByZXNzaW9uO1xuICBpZiAoaXNFeHByZXNzaW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBpc0V4cHJlc3Npb24gb24gY2xhc3MgdG9rZW4uXCIpO1xuICB9XG4gIGxldCBjbGFzc05hbWUgPSBudWxsO1xuICBsZXQgaGFzU3VwZXJjbGFzcyA9IGZhbHNlO1xuICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIGlmICh0b2tlbnMubWF0Y2hlczEodHQubmFtZSkpIHtcbiAgICBjbGFzc05hbWUgPSB0b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgfVxuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwodHQuYnJhY2VMLCBjb250ZXh0SWQpKSB7XG4gICAgLy8gSWYgdGhpcyBoYXMgYSBzdXBlcmNsYXNzLCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhbiBgZXh0ZW5kc2AgdG9rZW4uIElmIGl0IGRvZXNuJ3QgaGF2ZSBhXG4gICAgLy8gc3VwZXJjbGFzcywgb25seSB0eXBlIHBhcmFtZXRlcnMgYW5kIGBpbXBsZW1lbnRzYCBjbGF1c2VzIGNhbiBzaG93IHVwIGhlcmUsIGFsbCBvZiB3aGljaFxuICAgIC8vIGNvbnNpc3Qgb25seSBvZiB0eXBlIHRva2Vucy4gQSBkZWNsYXJhdGlvbiBsaWtlIGBjbGFzcyBBPEIgZXh0ZW5kcyBDPiB7YCBzaG91bGQgKm5vdCogY291bnRcbiAgICAvLyBhcyBoYXZpbmcgYSBzdXBlcmNsYXNzLlxuICAgIGlmICh0b2tlbnMubWF0Y2hlczEodHQuX2V4dGVuZHMpICYmICF0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICBoYXNTdXBlcmNsYXNzID0gdHJ1ZTtcbiAgICB9XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9XG4gIHJldHVybiB7aXNFeHByZXNzaW9uLCBjbGFzc05hbWUsIGhhc1N1cGVyY2xhc3N9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uIG91dCBvZiBhIGNvbnN0cnVjdG9yLCBzdGFydGluZyBhdCB0aGUgXCJjb25zdHJ1Y3RvclwiIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb25zdHJ1Y3Rvcih0b2tlbnMpXG5cblxuIHtcbiAgY29uc3QgY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMgPSBbXTtcblxuICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIGNvbnN0IGNvbnN0cnVjdG9yQ29udGV4dElkID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZDtcbiAgaWYgKGNvbnN0cnVjdG9yQ29udGV4dElkID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBjb250ZXh0IElEIG9uIG9wZW4tcGFyZW4gc3RhcnRpbmcgY29uc3RydWN0b3IgcGFyYW1zLlwiKTtcbiAgfVxuICAvLyBBZHZhbmNlIHRocm91Z2ggcGFyYW1ldGVycyBsb29raW5nIGZvciBhY2Nlc3MgbW9kaWZpZXJzLlxuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwodHQucGFyZW5SLCBjb25zdHJ1Y3RvckNvbnRleHRJZCkpIHtcbiAgICBpZiAodG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZCA9PT0gY29uc3RydWN0b3JDb250ZXh0SWQpIHtcbiAgICAgIC8vIEN1cnJlbnQgdG9rZW4gaXMgYW4gb3BlbiBwYXJlbiBvciBjb21tYSBqdXN0IGJlZm9yZSBhIHBhcmFtLCBzbyBjaGVja1xuICAgICAgLy8gdGhhdCBwYXJhbSBmb3IgYWNjZXNzIG1vZGlmaWVycy5cbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIGlmIChpc0FjY2Vzc01vZGlmaWVyKHRva2Vucy5jdXJyZW50VG9rZW4oKSkpIHtcbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgICB3aGlsZSAoaXNBY2Nlc3NNb2RpZmllcih0b2tlbnMuY3VycmVudFRva2VuKCkpKSB7XG4gICAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gdHQubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlkZW50aWZpZXIgYWZ0ZXIgYWNjZXNzIG1vZGlmaWVycyBpbiBjb25zdHJ1Y3RvciBhcmcuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbik7XG4gICAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLnB1c2goYHRoaXMuJHtuYW1lfSA9ICR7bmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgIH1cbiAgfVxuICAvLyApXG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgLy8gQ29uc3RydWN0b3IgdHlwZSBhbm5vdGF0aW9ucyBhcmUgaW52YWxpZCwgYnV0IHNraXAgdGhlbSBhbnl3YXkgc2luY2VcbiAgLy8gdGhleSdyZSBlYXN5IHRvIHNraXAuXG4gIHdoaWxlICh0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9XG4gIGxldCBjb25zdHJ1Y3Rvckluc2VydFBvcyA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcblxuICAvLyBBZHZhbmNlIHRocm91Z2ggYm9keSBsb29raW5nIGZvciBhIHN1cGVyIGNhbGwuXG4gIGxldCBmb3VuZFN1cGVyQ2FsbCA9IGZhbHNlO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwodHQuYnJhY2VSLCBjb25zdHJ1Y3RvckNvbnRleHRJZCkpIHtcbiAgICBpZiAoIWZvdW5kU3VwZXJDYWxsICYmIHRva2Vucy5tYXRjaGVzMih0dC5fc3VwZXIsIHR0LnBhcmVuTCkpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIGNvbnN0IHN1cGVyQ2FsbENvbnRleHRJZCA9IHRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gICAgICBpZiAoc3VwZXJDYWxsQ29udGV4dElkID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYSBjb250ZXh0IElEIG9uIHRoZSBzdXBlciBjYWxsXCIpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKHR0LnBhcmVuUiwgc3VwZXJDYWxsQ29udGV4dElkKSkge1xuICAgICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgICB9XG4gICAgICBjb25zdHJ1Y3Rvckluc2VydFBvcyA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICAgIGZvdW5kU3VwZXJDYWxsID0gdHJ1ZTtcbiAgICB9XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9XG4gIC8vIH1cbiAgdG9rZW5zLm5leHRUb2tlbigpO1xuXG4gIHJldHVybiB7Y29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsIGNvbnN0cnVjdG9ySW5zZXJ0UG9zfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbnkgdG9rZW4gdGhhdCBjYW4gZ28gYmVmb3JlIHRoZSBuYW1lIGluIGEgbWV0aG9kL2ZpZWxkLlxuICovXG5mdW5jdGlvbiBpc0FjY2Vzc01vZGlmaWVyKHRva2VuKSB7XG4gIHJldHVybiBbXG4gICAgdHQuX2FzeW5jLFxuICAgIHR0Ll9nZXQsXG4gICAgdHQuX3NldCxcbiAgICB0dC5wbHVzLFxuICAgIHR0Lm1pbnVzLFxuICAgIHR0Ll9yZWFkb25seSxcbiAgICB0dC5fc3RhdGljLFxuICAgIHR0Ll9wdWJsaWMsXG4gICAgdHQuX3ByaXZhdGUsXG4gICAgdHQuX3Byb3RlY3RlZCxcbiAgICB0dC5fb3ZlcnJpZGUsXG4gICAgdHQuX2Fic3RyYWN0LFxuICAgIHR0LnN0YXIsXG4gICAgdHQuX2RlY2xhcmUsXG4gICAgdHQuaGFzaCxcbiAgXS5pbmNsdWRlcyh0b2tlbi50eXBlKTtcbn1cblxuLyoqXG4gKiBUaGUgbmV4dCB0b2tlbiBvciBzZXQgb2YgdG9rZW5zIGlzIGVpdGhlciBhbiBpZGVudGlmaWVyIG9yIGFuIGV4cHJlc3Npb24gaW4gc3F1YXJlIGJyYWNrZXRzLCBmb3JcbiAqIGEgbWV0aG9kIG9yIGZpZWxkIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHNraXBGaWVsZE5hbWUodG9rZW5zKSB7XG4gIGlmICh0b2tlbnMubWF0Y2hlczEodHQuYnJhY2tldEwpKSB7XG4gICAgY29uc3Qgc3RhcnRUb2tlbiA9IHRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBjb25zdCBjbGFzc0NvbnRleHRJZCA9IHN0YXJ0VG9rZW4uY29udGV4dElkO1xuICAgIGlmIChjbGFzc0NvbnRleHRJZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBjbGFzcyBjb250ZXh0IElEIG9uIGNvbXB1dGVkIG5hbWUgb3BlbiBicmFja2V0LlwiKTtcbiAgICB9XG4gICAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKHR0LmJyYWNrZXRSLCBjbGFzc0NvbnRleHRJZCkpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICB9XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9IGVsc2Uge1xuICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgfVxufVxuIiwgImltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVsaWRlSW1wb3J0RXF1YWxzKHRva2Vucykge1xuICAvLyBpbXBvcnRcbiAgdG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAvLyBuYW1lXG4gIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAvLyA9XG4gIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAvLyBuYW1lIG9yIHJlcXVpcmVcbiAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIC8vIEhhbmRsZSBlaXRoZXIgYGltcG9ydCBBID0gcmVxdWlyZSgnQScpYCBvciBgaW1wb3J0IEEgPSBCLkMuRGAuXG4gIGlmICh0b2tlbnMubWF0Y2hlczEodHQucGFyZW5MKSkge1xuICAgIC8vIChcbiAgICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAvLyBwYXRoIHN0cmluZ1xuICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIC8vIClcbiAgICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAodG9rZW5zLm1hdGNoZXMxKHR0LmRvdCkpIHtcbiAgICAgIC8vIC5cbiAgICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gbmFtZVxuICAgICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtpc1RvcExldmVsRGVjbGFyYXRpb259IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG5cblxuXG5cblxuZXhwb3J0IGNvbnN0IEVNUFRZX0RFQ0xBUkFUSU9OX0lORk8gPSB7XG4gIHR5cGVEZWNsYXJhdGlvbnM6IG5ldyBTZXQoKSxcbiAgdmFsdWVEZWNsYXJhdGlvbnM6IG5ldyBTZXQoKSxcbn07XG5cbi8qKlxuICogR2V0IGFsbCB0b3AtbGV2ZWwgaWRlbnRpZmllcnMgdGhhdCBzaG91bGQgYmUgcHJlc2VydmVkIHdoZW4gZXhwb3J0ZWQgaW4gVHlwZVNjcmlwdC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqIC0gSWYgYW4gaWRlbnRpZmllciBpcyBkZWNsYXJlZCBhcyBgY29uc3QgeGAsIHRoZW4gYGV4cG9ydCB7eH1gIHNob3VsZCBiZSBwcmVzZXJ2ZWQuXG4gKiAtIElmIGl0J3MgZGVjbGFyZWQgYXMgYHR5cGUgeGAsIHRoZW4gYGV4cG9ydCB7eH1gIHNob3VsZCBiZSByZW1vdmVkLlxuICogLSBJZiBpdCdzIGRlY2xhcmVkIGFzIGJvdGggYGNvbnN0IHhgIGFuZCBgdHlwZSB4YCwgdGhlbiB0aGUgZXhwb3J0IHNob3VsZCBiZSBwcmVzZXJ2ZWQuXG4gKiAtIENsYXNzZXMgYW5kIGVudW1zIHNob3VsZCBiZSBwcmVzZXJ2ZWQgKGV2ZW4gdGhvdWdoIHRoZXkgYWxzbyBpbnRyb2R1Y2UgdHlwZXMpLlxuICogLSBJbXBvcnRlZCBpZGVudGlmaWVycyBzaG91bGQgYmUgcHJlc2VydmVkIHNpbmNlIHdlIGRvbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvXG4gKiAgIHJ1bGUgdGhlbSBvdXQuIC0taXNvbGF0ZWRNb2R1bGVzIGRpc2FsbG93cyByZS1leHBvcnRzLCB3aGljaCBjYXRjaGVzIGVycm9ycyBoZXJlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREZWNsYXJhdGlvbkluZm8odG9rZW5zKSB7XG4gIGNvbnN0IHR5cGVEZWNsYXJhdGlvbnMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHZhbHVlRGVjbGFyYXRpb25zID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IHR0Lm5hbWUgJiYgaXNUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKSkge1xuICAgICAgaWYgKHRva2VuLmlzVHlwZSkge1xuICAgICAgICB0eXBlRGVjbGFyYXRpb25zLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVEZWNsYXJhdGlvbnMuYWRkKHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7dHlwZURlY2xhcmF0aW9ucywgdmFsdWVEZWNsYXJhdGlvbnN9O1xufVxuIiwgImltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG4vKipcbiAqIFN0YXJ0aW5nIGF0IGBleHBvcnQge2AsIGxvb2sgYWhlYWQgYW5kIHJldHVybiBgdHJ1ZWAgaWYgdGhpcyBpcyBhblxuICogYGV4cG9ydCB7Li4ufSBmcm9tYCBzdGF0ZW1lbnQgYW5kIGBmYWxzZWAgaWYgdGhpcyBpcyBhIHBsYWluIG11bHRpLWV4cG9ydC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNFeHBvcnRGcm9tKHRva2Vucykge1xuICBsZXQgY2xvc2VCcmFjZUluZGV4ID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2xvc2VCcmFjZUluZGV4LCB0dC5icmFjZVIpKSB7XG4gICAgY2xvc2VCcmFjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGNsb3NlQnJhY2VJbmRleCArIDEsIENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSAmJlxuICAgIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2xvc2VCcmFjZUluZGV4ICsgMiwgdHQuc3RyaW5nKVxuICApO1xufVxuIiwgImltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG4vKipcbiAqIFN0YXJ0aW5nIGF0IGEgcG90ZW50aWFsIGB3aXRoYCBvciAobGVnYWN5KSBgYXNzZXJ0YCB0b2tlbiwgcmVtb3ZlIHRoZSBpbXBvcnRcbiAqIGF0dHJpYnV0ZXMgaWYgdGhleSBleGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyh0b2tlbnMpIHtcbiAgaWYgKFxuICAgIHRva2Vucy5tYXRjaGVzMih0dC5fd2l0aCwgdHQuYnJhY2VMKSB8fFxuICAgICh0b2tlbnMubWF0Y2hlczIodHQubmFtZSwgdHQuYnJhY2VMKSAmJiB0b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2Fzc2VydCkpXG4gICkge1xuICAgIC8vIGFzc2VydFxuICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIC8vIHtcbiAgICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB0b2tlbnMucmVtb3ZlQmFsYW5jZWRDb2RlKCk7XG4gICAgLy8gfVxuICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICB9XG59XG4iLCAiaW1wb3J0IHtUb2tlblR5cGUgYXMgdHR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzXCI7XG5cblxuXG4vKipcbiAqIENvbW1vbiBtZXRob2Qgc2hhcmluZyBjb2RlIGJldHdlZW4gQ0pTIGFuZCBFU00gY2FzZXMsIHNpbmNlIHRoZXkncmUgdGhlIHNhbWUgaGVyZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0KFxuICBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICBrZWVwVW51c2VkSW1wb3J0cyxcbiAgdG9rZW5zLFxuICBkZWNsYXJhdGlvbkluZm8sXG4pIHtcbiAgaWYgKCFpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkIHx8IGtlZXBVbnVzZWRJbXBvcnRzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGV4cG9ydFRva2VuID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICBpZiAoZXhwb3J0VG9rZW4ucmhzRW5kSW5kZXggPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1udWxsIHJoc0VuZEluZGV4IG9uIGV4cG9ydCB0b2tlbi5cIik7XG4gIH1cbiAgLy8gVGhlIGV4cG9ydCBtdXN0IGJlIG9mIHRoZSBmb3JtIGBleHBvcnQgZGVmYXVsdCBhYCBvciBgZXhwb3J0IGRlZmF1bHQgYTtgLlxuICBjb25zdCBudW1Ub2tlbnMgPSBleHBvcnRUb2tlbi5yaHNFbmRJbmRleCAtIHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgaWYgKFxuICAgIG51bVRva2VucyAhPT0gMyAmJlxuICAgICEobnVtVG9rZW5zID09PSA0ICYmIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoZXhwb3J0VG9rZW4ucmhzRW5kSW5kZXggLSAxLCB0dC5zZW1pKSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRva2Vucy50b2tlbkF0UmVsYXRpdmVJbmRleCgyKTtcbiAgaWYgKGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSB0dC5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGV4cG9ydGVkTmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbik7XG4gIHJldHVybiAoXG4gICAgZGVjbGFyYXRpb25JbmZvLnR5cGVEZWNsYXJhdGlvbnMuaGFzKGV4cG9ydGVkTmFtZSkgJiZcbiAgICAhZGVjbGFyYXRpb25JbmZvLnZhbHVlRGVjbGFyYXRpb25zLmhhcyhleHBvcnRlZE5hbWUpXG4gICk7XG59XG4iLCAiXG5cblxuaW1wb3J0IHtJZGVudGlmaWVyUm9sZSwgaXNEZWNsYXJhdGlvbiwgaXNPYmplY3RTaG9ydGhhbmREZWNsYXJhdGlvbn0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXJcIjtcbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IGVsaWRlSW1wb3J0RXF1YWxzIGZyb20gXCIuLi91dGlsL2VsaWRlSW1wb3J0RXF1YWxzXCI7XG5pbXBvcnQgZ2V0RGVjbGFyYXRpb25JbmZvLCB7XG5cbiAgRU1QVFlfREVDTEFSQVRJT05fSU5GTyxcbn0gZnJvbSBcIi4uL3V0aWwvZ2V0RGVjbGFyYXRpb25JbmZvXCI7XG5pbXBvcnQgZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyBmcm9tIFwiLi4vdXRpbC9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvXCI7XG5pbXBvcnQgaXNFeHBvcnRGcm9tIGZyb20gXCIuLi91dGlsL2lzRXhwb3J0RnJvbVwiO1xuaW1wb3J0IHtyZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXN9IGZyb20gXCIuLi91dGlsL3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlc1wiO1xuaW1wb3J0IHNob3VsZEVsaWRlRGVmYXVsdEV4cG9ydCBmcm9tIFwiLi4vdXRpbC9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnRcIjtcblxuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuLyoqXG4gKiBDbGFzcyBmb3IgZWRpdGluZyBpbXBvcnQgc3RhdGVtZW50cyB3aGVuIHdlIGFyZSB0cmFuc2Zvcm1pbmcgdG8gY29tbW9uanMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENKU0ltcG9ydFRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIge1xuICAgX19pbml0KCkge3RoaXMuaGFkRXhwb3J0ID0gZmFsc2V9XG4gICBfX2luaXQyKCkge3RoaXMuaGFkTmFtZWRFeHBvcnQgPSBmYWxzZX1cbiAgIF9faW5pdDMoKSB7dGhpcy5oYWREZWZhdWx0RXhwb3J0ID0gZmFsc2V9XG4gIFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCxcbiAgICAgZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3AsXG4gICAgIGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQsXG4gICAgIGlzRmxvd1RyYW5zZm9ybUVuYWJsZWQsXG4gICAgIHByZXNlcnZlRHluYW1pY0ltcG9ydCxcbiAgICAga2VlcFVudXNlZEltcG9ydHMsXG4gICkge1xuICAgIHN1cGVyKCk7dGhpcy5yb290VHJhbnNmb3JtZXIgPSByb290VHJhbnNmb3JtZXI7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5pbXBvcnRQcm9jZXNzb3IgPSBpbXBvcnRQcm9jZXNzb3I7dGhpcy5uYW1lTWFuYWdlciA9IG5hbWVNYW5hZ2VyO3RoaXMuaGVscGVyTWFuYWdlciA9IGhlbHBlck1hbmFnZXI7dGhpcy5yZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyID0gcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcjt0aGlzLmVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3AgPSBlbmFibGVMZWdhY3lCYWJlbDVNb2R1bGVJbnRlcm9wO3RoaXMuZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3AgPSBlbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcDt0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgPSBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkO3RoaXMuaXNGbG93VHJhbnNmb3JtRW5hYmxlZCA9IGlzRmxvd1RyYW5zZm9ybUVuYWJsZWQ7dGhpcy5wcmVzZXJ2ZUR5bmFtaWNJbXBvcnQgPSBwcmVzZXJ2ZUR5bmFtaWNJbXBvcnQ7dGhpcy5rZWVwVW51c2VkSW1wb3J0cyA9IGtlZXBVbnVzZWRJbXBvcnRzO0NKU0ltcG9ydFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtDSlNJbXBvcnRUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO0NKU0ltcG9ydFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7O1xuICAgIHRoaXMuZGVjbGFyYXRpb25JbmZvID0gaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZFxuICAgICAgPyBnZXREZWNsYXJhdGlvbkluZm8odG9rZW5zKVxuICAgICAgOiBFTVBUWV9ERUNMQVJBVElPTl9JTkZPO1xuICB9XG5cbiAgZ2V0UHJlZml4Q29kZSgpIHtcbiAgICBsZXQgcHJlZml4ID0gXCJcIjtcbiAgICBpZiAodGhpcy5oYWRFeHBvcnQpIHtcbiAgICAgIHByZWZpeCArPSAnT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsnO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgZ2V0U3VmZml4Q29kZSgpIHtcbiAgICBpZiAodGhpcy5lbmFibGVMZWdhY3lCYWJlbDVNb2R1bGVJbnRlcm9wICYmIHRoaXMuaGFkRGVmYXVsdEV4cG9ydCAmJiAhdGhpcy5oYWROYW1lZEV4cG9ydCkge1xuICAgICAgcmV0dXJuIFwiXFxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICAvLyBUeXBlU2NyaXB0IGBpbXBvcnQgZm9vID0gcmVxdWlyZSgnZm9vJyk7YCBzaG91bGQgYWx3YXlzIGp1c3QgYmUgdHJhbnNsYXRlZCB0byBwbGFpbiByZXF1aXJlLlxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5faW1wb3J0LCB0dC5uYW1lLCB0dC5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnRFcXVhbHMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9pbXBvcnQpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NJbXBvcnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQuZXEpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJtb2R1bGUuZXhwb3J0c1wiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuX2V4cG9ydCkgJiYgIXRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgdGhpcy5oYWRFeHBvcnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0V4cG9ydCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIodHQubmFtZSwgdHQucG9zdEluY0RlYykpIHtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgaWRlbnRpZmllciBtYXRjaGluZyBpZiB0aGlzIGRvZXNuJ3QgYXBwbHkuXG4gICAgICBpZiAodGhpcy5wcm9jZXNzUG9zdEluY0RlYygpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQubmFtZSkgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuanN4TmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJZGVudGlmaWVyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBc3NpZ25tZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5hc3NpZ24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQ29tcGxleEFzc2lnbm1lbnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnByZUluY0RlYykpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NQcmVJbmNEZWMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgIHByb2Nlc3NJbXBvcnRFcXVhbHMoKSB7XG4gICAgY29uc3QgaW1wb3J0TmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgIGlmICh0aGlzLmltcG9ydFByb2Nlc3Nvci5zaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUoaW1wb3J0TmFtZSkpIHtcbiAgICAgIC8vIElmIHRoaXMgbmFtZSBpcyBvbmx5IHVzZWQgYXMgYSB0eXBlLCBlbGlkZSB0aGUgd2hvbGUgaW1wb3J0LlxuICAgICAgZWxpZGVJbXBvcnRFcXVhbHModGhpcy50b2tlbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHN3aXRjaCBgaW1wb3J0YCB0byBgY29uc3RgLlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGlzOlxuICAgKiBpbXBvcnQgZm9vLCB7YmFyfSBmcm9tICdiYXonO1xuICAgKiBpbnRvXG4gICAqIHZhciBfYmF6ID0gcmVxdWlyZSgnYmF6Jyk7IHZhciBfYmF6MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jheik7XG4gICAqXG4gICAqIFRoZSBpbXBvcnQgY29kZSB3YXMgYWxyZWFkeSBnZW5lcmF0ZWQgaW4gdGhlIGltcG9ydCBwcmVwcm9jZXNzaW5nIHN0ZXAsIHNvXG4gICAqIHdlIGp1c3QgbmVlZCB0byBsb29rIGl0IHVwLlxuICAgKi9cbiAgIHByb2Nlc3NJbXBvcnQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9pbXBvcnQsIHR0LnBhcmVuTCkpIHtcbiAgICAgIGlmICh0aGlzLnByZXNlcnZlRHluYW1pY0ltcG9ydCkge1xuICAgICAgICAvLyBCYWlsIG91dCwgb25seSBtYWtpbmcgcHJvZ3Jlc3MgZm9yIHRoaXMgb25lIHRva2VuLlxuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVxdWlyZVdyYXBwZXIgPSB0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wXG4gICAgICAgID8gXCJcIlxuICAgICAgICA6IGAke3RoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiaW50ZXJvcFJlcXVpcmVXaWxkY2FyZFwiKX0oYDtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAke3JlcXVpcmVXcmFwcGVyfXJlcXVpcmVgKTtcbiAgICAgIGNvbnN0IGNvbnRleHRJZCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZDtcbiAgICAgIGlmIChjb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBjb250ZXh0IElEIG9uIGR5bmFtaWMgaW1wb3J0IGludm9jYXRpb24uXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbCh0dC5wYXJlblIsIGNvbnRleHRJZCkpIHtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4ocmVxdWlyZVdyYXBwZXIgPyBcIikpKVwiIDogXCIpKVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFbGlkZUltcG9ydCA9IHRoaXMucmVtb3ZlSW1wb3J0QW5kRGV0ZWN0SWZTaG91bGRFbGlkZSgpO1xuICAgIGlmIChzaG91bGRFbGlkZUltcG9ydCkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgfVxuICAgIHJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyh0aGlzLnRva2Vucyk7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnNlbWkpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFcmFzZSB0aGlzIGltcG9ydCAoc2luY2UgYW55IENKUyBvdXRwdXQgd291bGQgYmUgY29tcGxldGVseSBkaWZmZXJlbnQpLCBhbmRcbiAgICogcmV0dXJuIHRydWUgaWYgdGhpcyBpbXBvcnQgaXMgc2hvdWxkIGJlIGVsaWRlZCBkdWUgdG8gYmVpbmcgYSB0eXBlLW9ubHlcbiAgICogaW1wb3J0LiBTdWNoIGltcG9ydHMgd2lsbCBub3QgYmUgZW1pdHRlZCBhdCBhbGwgdG8gYXZvaWQgc2lkZSBlZmZlY3RzLlxuICAgKlxuICAgKiBJbXBvcnQgZWxpc2lvbiBvbmx5IGhhcHBlbnMgd2l0aCB0aGUgVHlwZVNjcmlwdCBvciBGbG93IHRyYW5zZm9ybXMgZW5hYmxlZC5cbiAgICpcbiAgICogVE9ETzogVGhpcyBmdW5jdGlvbiBoYXMgc29tZSBhd2t3YXJkIG92ZXJsYXAgd2l0aFxuICAgKiAgQ0pTSW1wb3J0UHJvY2Vzc29yLnBydW5lVHlwZU9ubHlJbXBvcnRzICwgYW5kIHRoZSB0d28gc2hvdWxkIGJlIHVuaWZpZWQuXG4gICAqICBUaGF0IGZ1bmN0aW9uIGhhbmRsZXMgVHlwZVNjcmlwdCBpbXBsaWNpdCBpbXBvcnQgbmFtZSBlbGlzaW9uLCBhbmQgcmVtb3Zlc1xuICAgKiAgYW4gaW1wb3J0IGlmIGFsbCB0eXBpY2FsIGltcG9ydGVkIG5hbWVzICh3aXRob3V0IGB0eXBlYCkgYXJlIHJlbW92ZWQgZHVlXG4gICAqICB0byBiZWluZyB0eXBlLW9ubHkgaW1wb3J0cy4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIEZsb3cgaW1wb3J0IHJlbW92YWwgYW5kXG4gICAqICBwcm9wZXJseSBkaXN0aW5ndWlzaGVzIGBpbXBvcnQgJ2ZvbydgIGZyb20gYGltcG9ydCB7fSBmcm9tICdmb28nYCBmb3IgVFNcbiAgICogIHB1cnBvc2VzLlxuICAgKlxuICAgKiBUaGUgcG9zaXRpb24gc2hvdWxkIGVuZCBhdCB0aGUgaW1wb3J0IHN0cmluZy5cbiAgICovXG4gICByZW1vdmVJbXBvcnRBbmREZXRlY3RJZlNob3VsZEVsaWRlKCkge1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl90eXBlKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIHR0LmNvbW1hKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyBhbiBcImltcG9ydCB0eXBlXCIgc3RhdGVtZW50LCBzbyBleGl0IGVhcmx5LlxuICAgICAgdGhpcy5yZW1vdmVSZW1haW5pbmdJbXBvcnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5uYW1lKSB8fCB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5zdGFyKSkge1xuICAgICAgLy8gV2UgaGF2ZSBhIGRlZmF1bHQgaW1wb3J0IG9yIG5hbWVzcGFjZSBpbXBvcnQsIHNvIHRoZXJlIG11c3QgYmUgc29tZVxuICAgICAgLy8gbm9uLXR5cGUgaW1wb3J0LlxuICAgICAgdGhpcy5yZW1vdmVSZW1haW5pbmdJbXBvcnQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuc3RyaW5nKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJhcmUgaW1wb3J0LCBzbyB3ZSBzaG91bGQgcHJvY2VlZCB3aXRoIHRoZSBpbXBvcnQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGZvdW5kTm9uVHlwZUltcG9ydCA9IGZhbHNlO1xuICAgIGxldCBmb3VuZEFueU5hbWVkSW1wb3J0ID0gZmFsc2U7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5zdHJpbmcpKSB7XG4gICAgICAvLyBDaGVjayBpZiBhbnkgbmFtZWQgaW1wb3J0cyBhcmUgb2YgdGhlIGZvcm0gXCJmb29cIiBvciBcImZvbyBhcyBiYXJcIiwgd2l0aFxuICAgICAgLy8gbm8gbGVhZGluZyBcInR5cGVcIi5cbiAgICAgIGlmIChcbiAgICAgICAgKCFmb3VuZE5vblR5cGVJbXBvcnQgJiYgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKSkgfHxcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuY29tbWEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZVIpKSB7XG4gICAgICAgICAgZm91bmRBbnlOYW1lZEltcG9ydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Lm5hbWUsIHR0LmNvbW1hKSB8fFxuICAgICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Lm5hbWUsIHR0LmJyYWNlUikgfHxcbiAgICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNCh0dC5uYW1lLCB0dC5uYW1lLCB0dC5uYW1lLCB0dC5jb21tYSkgfHxcbiAgICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNCh0dC5uYW1lLCB0dC5uYW1lLCB0dC5uYW1lLCB0dC5icmFjZVIpXG4gICAgICAgICkge1xuICAgICAgICAgIGZvdW5kTm9uVHlwZUltcG9ydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmtlZXBVbnVzZWRJbXBvcnRzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiAhZm91bmROb25UeXBlSW1wb3J0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICAvLyBJbiBGbG93LCB1bmxpa2UgVFMsIGBpbXBvcnQge30gZnJvbSAnZm9vJztgIHByZXNlcnZlcyB0aGUgaW1wb3J0LlxuICAgICAgcmV0dXJuIGZvdW5kQW55TmFtZWRJbXBvcnQgJiYgIWZvdW5kTm9uVHlwZUltcG9ydDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICByZW1vdmVSZW1haW5pbmdJbXBvcnQoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5zdHJpbmcpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gICBwcm9jZXNzSWRlbnRpZmllcigpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgIGlmICh0b2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPYmplY3RTaG9ydGhhbmQoKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4uaWRlbnRpZmllclJvbGUgIT09IElkZW50aWZpZXJSb2xlLkFjY2Vzcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pLFxuICAgICk7XG4gICAgaWYgKCFyZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUb2xlcmF0ZSBhbnkgbnVtYmVyIG9mIGNsb3NpbmcgcGFyZW5zIHdoaWxlIGxvb2tpbmcgZm9yIGFuIG9wZW5pbmcgcGFyZW5cbiAgICAvLyB0aGF0IGluZGljYXRlcyBhIGZ1bmN0aW9uIGNhbGwuXG4gICAgbGV0IHBvc3NpYmxlT3BlblBhcmVuSW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDE7XG4gICAgd2hpbGUgKFxuICAgICAgcG9zc2libGVPcGVuUGFyZW5JbmRleCA8IHRoaXMudG9rZW5zLnRva2Vucy5sZW5ndGggJiZcbiAgICAgIHRoaXMudG9rZW5zLnRva2Vuc1twb3NzaWJsZU9wZW5QYXJlbkluZGV4XS50eXBlID09PSB0dC5wYXJlblJcbiAgICApIHtcbiAgICAgIHBvc3NpYmxlT3BlblBhcmVuSW5kZXgrKztcbiAgICB9XG4gICAgLy8gQXZvaWQgdHJlYXRpbmcgaW1wb3J0ZWQgZnVuY3Rpb25zIGFzIG1ldGhvZHMgb2YgdGhlaXIgYGV4cG9ydHNgIG9iamVjdFxuICAgIC8vIGJ5IHVzaW5nIGAoMCwgZilgIHdoZW4gdGhlIGlkZW50aWZpZXIgaXMgaW4gYSBwYXJlbiBleHByZXNzaW9uLiBFbHNlXG4gICAgLy8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbGAgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBhIGd1YXJhbnRlZWRcbiAgICAvLyBmdW5jdGlvbiBjYWxsLiBXaGVuIHVzaW5nIGBjYWxsYCwgcGFzcyB1bmRlZmluZWQgYXMgdGhlIGNvbnRleHQuXG4gICAgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1twb3NzaWJsZU9wZW5QYXJlbkluZGV4XS50eXBlID09PSB0dC5wYXJlbkwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMSkudHlwZSA9PT0gdHQucGFyZW5MICYmXG4gICAgICAgIHRoaXMudG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KC0xKS50eXBlICE9PSB0dC5fbmV3XG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke3JlcGxhY2VtZW50fS5jYWxsKHZvaWQgMCwgYCk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgb2xkIHBhcmVuLlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAvLyBCYWxhbmNlIG91dCB0aGUgbmV3IHBhcmVuLlxuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuUik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTZWUgaGVyZTogaHR0cDovLzJhbGl0eS5jb20vMjAxNS8xMi9yZWZlcmVuY2VzLmh0bWxcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoMCwgJHtyZXBsYWNlbWVudH0pYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihyZXBsYWNlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvY2Vzc09iamVjdFNob3J0aGFuZCgpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChpZGVudGlmaWVyKTtcbiAgICBpZiAoIXJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtpZGVudGlmaWVyfTogJHtyZXBsYWNlbWVudH1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb2Nlc3NFeHBvcnQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQuX2VudW0pIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5fZXhwb3J0LCB0dC5fY29uc3QsIHR0Ll9lbnVtKVxuICAgICkge1xuICAgICAgdGhpcy5oYWROYW1lZEV4cG9ydCA9IHRydWU7XG4gICAgICAvLyBMZXQgdGhlIFR5cGVTY3JpcHQgdHJhbnNmb3JtIGhhbmRsZSBpdC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0KSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMzKHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fZW51bSkpIHtcbiAgICAgICAgdGhpcy5oYWREZWZhdWx0RXhwb3J0ID0gdHJ1ZTtcbiAgICAgICAgLy8gRmxvdyBleHBvcnQgZGVmYXVsdCBlbnVtcyBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZywgc28gaGFuZGxlIHRoZW1cbiAgICAgICAgLy8gaW4gdGhhdCB0cmFuZm9ybSByYXRoZXIgdGhhbiB0aGlzIG9uZS5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzRXhwb3J0RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5icmFjZUwpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRCaW5kaW5ncygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Lm5hbWUpICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxLCBDb250ZXh0dWFsS2V5d29yZC5fdHlwZSlcbiAgICApIHtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHthfTtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHthIGFzIGJ9O1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2F9IGZyb20gJy4vYic7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGZyb20gJy4vYic7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGFzIG5zIGZyb20gJy4vYic7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKSkge1xuICAgICAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAqXG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fYXMpKSB7XG4gICAgICAgICAgLy8gYXNcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIC8vIG5zXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIHR5cGUgcmUtZXhwb3J0IGAuLi4gfSBmcm9tICcuL1QnYFxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkgJiZcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgdHQuc3RyaW5nKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIHJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyh0aGlzLnRva2Vucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5oYWROYW1lZEV4cG9ydCA9IHRydWU7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQuX3ZhcikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Ll9sZXQpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5fY29uc3QpXG4gICAgKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRWYXIoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5fZnVuY3Rpb24pIHx8XG4gICAgICAvLyBleHBvcnQgYXN5bmMgZnVuY3Rpb25cbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKHR0Ll9leHBvcnQsIHR0Lm5hbWUsIHR0Ll9mdW5jdGlvbilcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0V4cG9ydEZ1bmN0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQuX2NsYXNzKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczModHQuX2V4cG9ydCwgdHQuX2Fic3RyYWN0LCB0dC5fY2xhc3MpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5hdClcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0V4cG9ydENsYXNzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0LnN0YXIpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRTdGFyKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIGV4cG9ydCBzeW50YXguXCIpO1xuICAgIH1cbiAgfVxuXG4gICBwcm9jZXNzQXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDFdO1xuICAgIC8vIElmIHRoZSBMSFMgaXMgYSB0eXBlIGlkZW50aWZpZXIsIHRoaXMgbXVzdCBiZSBhIGRlY2xhcmF0aW9uIGxpa2UgYGxldCBhOiBiID0gYztgLFxuICAgIC8vIHdpdGggYGJgIGFzIHRoZSBpZGVudGlmaWVyLCBzbyBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhhdCBjYXNlLlxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uaXNUeXBlIHx8IGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSB0dC5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMiAmJiB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggLSAyLCB0dC5kb3QpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAyICYmIFt0dC5fdmFyLCB0dC5fbGV0LCB0dC5fY29uc3RdLmluY2x1ZGVzKHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDJdLnR5cGUpKSB7XG4gICAgICAvLyBEZWNsYXJhdGlvbnMgZG9uJ3QgbmVlZCBhbiBleHRyYSBhc3NpZ25tZW50LiBUaGlzIGRvZXNuJ3QgYXZvaWQgdGhlXG4gICAgICAvLyBhc3NpZ25tZW50IGZvciBjb21tYS1zZXBhcmF0ZWQgZGVjbGFyYXRpb25zLCBidXQgaXQncyBzdGlsbCBjb3JyZWN0XG4gICAgICAvLyBzaW5jZSB0aGUgYXNzaWdubWVudCBpcyBqdXN0IHJlZHVuZGFudC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYXNzaWdubWVudFNuaXBwZXQgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5yZXNvbHZlRXhwb3J0QmluZGluZyhcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4oaWRlbnRpZmllclRva2VuKSxcbiAgICApO1xuICAgIGlmICghYXNzaWdubWVudFNuaXBwZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICR7YXNzaWdubWVudFNuaXBwZXR9ID1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHNvbWV0aGluZyBsaWtlIGBhICs9IDNgLCB3aGVyZSBgYWAgbWlnaHQgYmUgYW4gZXhwb3J0ZWQgdmFsdWUuXG4gICAqL1xuICAgcHJvY2Vzc0NvbXBsZXhBc3NpZ25tZW50KCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgY29uc3QgaWRlbnRpZmllclRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2luZGV4IC0gMV07XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSB0dC5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMiAmJiB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggLSAyLCB0dC5kb3QpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFzc2lnbm1lbnRTbmlwcGV0ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IucmVzb2x2ZUV4cG9ydEJpbmRpbmcoXG4gICAgICB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbiksXG4gICAgKTtcbiAgICBpZiAoIWFzc2lnbm1lbnRTbmlwcGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCA9ICR7YXNzaWdubWVudFNuaXBwZXR9YCk7XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzb21ldGhpbmcgbGlrZSBgKythYCwgd2hlcmUgYGFgIG1pZ2h0IGJlIGFuIGV4cG9ydGVkIHZhbHVlLlxuICAgKi9cbiAgIHByb2Nlc3NQcmVJbmNEZWMoKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICBjb25zdCBpZGVudGlmaWVyVG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXggKyAxXTtcbiAgICBpZiAoaWRlbnRpZmllclRva2VuLnR5cGUgIT09IHR0Lm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIElnbm9yZSB0aGluZ3MgbGlrZSArK2EuYiBhbmQgKythW2JdIGFuZCArK2EoKS5iLlxuICAgIGlmIChcbiAgICAgIGluZGV4ICsgMiA8IHRoaXMudG9rZW5zLnRva2Vucy5sZW5ndGggJiZcbiAgICAgICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggKyAyLCB0dC5kb3QpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCArIDIsIHR0LmJyYWNrZXRMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggKyAyLCB0dC5wYXJlbkwpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4oaWRlbnRpZmllclRva2VuKTtcbiAgICBjb25zdCBhc3NpZ25tZW50U25pcHBldCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLnJlc29sdmVFeHBvcnRCaW5kaW5nKGlkZW50aWZpZXJOYW1lKTtcbiAgICBpZiAoIWFzc2lnbm1lbnRTbmlwcGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCR7YXNzaWdubWVudFNuaXBwZXR9ID0gYCk7XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzb21ldGhpbmcgbGlrZSBgYSsrYCwgd2hlcmUgYGFgIG1pZ2h0IGJlIGFuIGV4cG9ydGVkIHZhbHVlLlxuICAgKiBUaGlzIHN0YXJ0cyBhdCB0aGUgYGFgLCBub3QgYXQgdGhlIGArK2AuXG4gICAqL1xuICAgcHJvY2Vzc1Bvc3RJbmNEZWMoKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICBjb25zdCBpZGVudGlmaWVyVG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdO1xuICAgIGNvbnN0IG9wZXJhdG9yVG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXggKyAxXTtcbiAgICBpZiAoaWRlbnRpZmllclRva2VuLnR5cGUgIT09IHR0Lm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAxICYmIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCAtIDEsIHR0LmRvdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaWRlbnRpZmllck5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbik7XG4gICAgY29uc3QgYXNzaWdubWVudFNuaXBwZXQgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5yZXNvbHZlRXhwb3J0QmluZGluZyhpZGVudGlmaWVyTmFtZSk7XG4gICAgaWYgKCFhc3NpZ25tZW50U25pcHBldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRvckNvZGUgPSB0aGlzLnRva2Vucy5yYXdDb2RlRm9yVG9rZW4ob3BlcmF0b3JUb2tlbik7XG4gICAgLy8gV2UgbWlnaHQgYWxzbyByZXBsYWNlIHRoZSBpZGVudGlmaWVyIHdpdGggc29tZXRoaW5nIGxpa2UgZXhwb3J0cy54LCBzb1xuICAgIC8vIGRvIHRoYXQgcmVwbGFjZW1lbnQgaGVyZSBhcyB3ZWxsLlxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRJZGVudGlmaWVyUmVwbGFjZW1lbnQoaWRlbnRpZmllck5hbWUpIHx8IGlkZW50aWZpZXJOYW1lO1xuICAgIGlmIChvcGVyYXRvckNvZGUgPT09IFwiKytcIikge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoJHtiYXNlfSA9ICR7YXNzaWdubWVudFNuaXBwZXR9ID0gJHtiYXNlfSArIDEsICR7YmFzZX0gLSAxKWApO1xuICAgIH0gZWxzZSBpZiAob3BlcmF0b3JDb2RlID09PSBcIi0tXCIpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgKCR7YmFzZX0gPSAke2Fzc2lnbm1lbnRTbmlwcGV0fSA9ICR7YmFzZX0gLSAxLCAke2Jhc2V9ICsgMSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG9wZXJhdG9yOiAke29wZXJhdG9yQ29kZX1gKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gICBwcm9jZXNzRXhwb3J0RGVmYXVsdCgpIHtcbiAgICBsZXQgZXhwb3J0ZWRSdW50aW1lVmFsdWUgPSB0cnVlO1xuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM0KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fZnVuY3Rpb24sIHR0Lm5hbWUpIHx8XG4gICAgICAvLyBleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvblxuICAgICAgKHRoaXMudG9rZW5zLm1hdGNoZXM1KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5uYW1lLCB0dC5fZnVuY3Rpb24sIHR0Lm5hbWUpICYmXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChcbiAgICAgICAgICB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDIsXG4gICAgICAgICAgQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jLFxuICAgICAgICApKVxuICAgICkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gTmFtZWQgZnVuY3Rpb24gZXhwb3J0IGNhc2U6IGNoYW5nZSBpdCB0byBhIHRvcC1sZXZlbCBmdW5jdGlvblxuICAgICAgLy8gZGVjbGFyYXRpb24gZm9sbG93ZWQgYnkgZXhwb3J0cyBzdGF0ZW1lbnQuXG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5wcm9jZXNzTmFtZWRGdW5jdGlvbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuZGVmYXVsdCA9ICR7bmFtZX07YCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM0KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fY2xhc3MsIHR0Lm5hbWUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNSh0dC5fZXhwb3J0LCB0dC5fZGVmYXVsdCwgdHQuX2Fic3RyYWN0LCB0dC5fY2xhc3MsIHR0Lm5hbWUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5fZXhwb3J0LCB0dC5fZGVmYXVsdCwgdHQuYXQpXG4gICAgKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLmNvcHlEZWNvcmF0b3JzKCk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuX2Fic3RyYWN0KSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmFtZSA9IHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NOYW1lZENsYXNzKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgZXhwb3J0cy5kZWZhdWx0ID0gJHtuYW1lfTtgKTtcbiAgICAgIC8vIEFmdGVyIHRoaXMgcG9pbnQsIHRoaXMgaXMgYSBwbGFpbiBcImV4cG9ydCBkZWZhdWx0IEVcIiBzdGF0ZW1lbnQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNob3VsZEVsaWRlRGVmYXVsdEV4cG9ydChcbiAgICAgICAgdGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICAgICAgICB0aGlzLmtlZXBVbnVzZWRJbXBvcnRzLFxuICAgICAgICB0aGlzLnRva2VucyxcbiAgICAgICAgdGhpcy5kZWNsYXJhdGlvbkluZm8sXG4gICAgICApXG4gICAgKSB7XG4gICAgICAvLyBJZiB0aGUgZXhwb3J0ZWQgdmFsdWUgaXMganVzdCBhbiBpZGVudGlmaWVyIGFuZCBzaG91bGQgYmUgZWxpZGVkIGJ5IFR5cGVTY3JpcHRcbiAgICAgIC8vIHJ1bGVzLCB0aGVuIHJlbW92ZSBpdCBlbnRpcmVseS4gSXQgd2lsbCBhbHdheXMgaGF2ZSB0aGUgZm9ybSBgZXhwb3J0IGRlZmF1bHQgZWAsXG4gICAgICAvLyB3aGVyZSBgZWAgaXMgYW4gaWRlbnRpZmllci5cbiAgICAgIGV4cG9ydGVkUnVudGltZVZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGFzc2lnbiBFIHRvIGEgdmFyaWFibGUuIENoYW5nZSBcImV4cG9ydCBkZWZhdWx0IEVcIiB0b1xuICAgICAgLy8gXCJsZXQgX2RlZmF1bHQ7IGV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0ID0gRVwiXG4gICAgICBjb25zdCBkZWZhdWx0VmFyTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9kZWZhdWx0XCIpO1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGBsZXQgJHtkZWZhdWx0VmFyTmFtZX07IGV4cG9ydHMuYCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCA9ICR7ZGVmYXVsdFZhck5hbWV9ID1gKTtcbiAgICAgIHRoaXMucmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lci5zZXRFeHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZShkZWZhdWx0VmFyTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENoYW5nZSBcImV4cG9ydCBkZWZhdWx0IEVcIiB0byBcImV4cG9ydHMuZGVmYXVsdCA9IEVcIlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiZXhwb3J0cy5cIik7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIgPVwiKTtcbiAgICB9XG4gICAgaWYgKGV4cG9ydGVkUnVudGltZVZhbHVlKSB7XG4gICAgICB0aGlzLmhhZERlZmF1bHRFeHBvcnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gICBjb3B5RGVjb3JhdG9ycygpIHtcbiAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYXQpKSB7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5wYXJlbkwpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuTCk7XG4gICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQucGFyZW5SKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0Lm5hbWUpO1xuICAgICAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuZG90KSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LmRvdCk7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnBhcmVuTCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5wYXJlbkwpO1xuICAgICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5wYXJlblIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIGRlY2xhcmF0aW9uIGxpa2UgYGV4cG9ydCB2YXJgLCBgZXhwb3J0IGxldGAsIG9yIGBleHBvcnQgY29uc3RgLlxuICAgKi9cbiAgIHByb2Nlc3NFeHBvcnRWYXIoKSB7XG4gICAgaWYgKHRoaXMuaXNTaW1wbGVFeHBvcnRWYXIoKSkge1xuICAgICAgdGhpcy5wcm9jZXNzU2ltcGxlRXhwb3J0VmFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc0NvbXBsZXhFeHBvcnRWYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBleHBvcnQgaXMgb2YgdGhlIGZvcm06XG4gICAqIGV4cG9ydCB2YXIvbGV0L2NvbnN0IFt2YXJOYW1lXSA9IFtleHByXTtcbiAgICogSW4gb3RoZXIgd29yZHMsIGRldGVybWluZSBpZiBmdW5jdGlvbiBuYW1lIGluZmVyZW5jZSBtaWdodCBhcHBseS5cbiAgICovXG4gICBpc1NpbXBsZUV4cG9ydFZhcigpIHtcbiAgICBsZXQgdG9rZW5JbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIC8vIGV4cG9ydFxuICAgIHRva2VuSW5kZXgrKztcbiAgICAvLyB2YXIvbGV0L2NvbnN0XG4gICAgdG9rZW5JbmRleCsrO1xuICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KHRva2VuSW5kZXgsIHR0Lm5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRva2VuSW5kZXgrKztcbiAgICB3aGlsZSAodG9rZW5JbmRleCA8IHRoaXMudG9rZW5zLnRva2Vucy5sZW5ndGggJiYgdGhpcy50b2tlbnMudG9rZW5zW3Rva2VuSW5kZXhdLmlzVHlwZSkge1xuICAgICAgdG9rZW5JbmRleCsrO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleCh0b2tlbkluZGV4LCB0dC5lcSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGFuIGBleHBvcnQgdmFyYCBkZWNsYXJhdGlvbiBpbml0aWFsaXppbmcgYSBzaW5nbGUgdmFyaWFibGUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGlzOlxuICAgKiBleHBvcnQgY29uc3QgZiA9ICgpID0+IHt9O1xuICAgKiBiZWNvbWVzIHRoaXM6XG4gICAqIGNvbnN0IGYgPSAoKSA9PiB7fTsgZXhwb3J0cy5mID0gZjtcbiAgICpcbiAgICogVGhlIHZhcmlhYmxlIGlzIHVudXNlZCAoZS5nLiBleHBvcnRzLmYgaGFzIHRoZSB0cnVlIHZhbHVlIG9mIHRoZSBleHBvcnQpLlxuICAgKiBXZSBuZWVkIHRvIHByb2R1Y2UgYW4gYXNzaWdubWVudCBvZiB0aGlzIGZvcm0gc28gdGhhdCB0aGUgZnVuY3Rpb24gd2lsbFxuICAgKiBoYXZlIGFuIGluZmVycmVkIG5hbWUgb2YgXCJmXCIsIHdoaWNoIHdvdWxkbid0IGhhcHBlbiBpbiB0aGUgbW9yZSBnZW5lcmFsXG4gICAqIGNhc2UgYmVsb3cuXG4gICAqL1xuICAgcHJvY2Vzc1NpbXBsZUV4cG9ydFZhcigpIHtcbiAgICAvLyBleHBvcnRcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAvLyB2YXIvbGV0L2NvbnN0XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgY29uc3QgdmFyTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgLy8geDogbnVtYmVyICAtPiAgeFxuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEodHQuZXEpKSB7XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5yaHNFbmRJbmRleDtcbiAgICBpZiAoZW5kSW5kZXggPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgfVxuICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IGVuZEluZGV4KSB7XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgOyBleHBvcnRzLiR7dmFyTmFtZX0gPSAke3Zhck5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIG5vcm1hbCBkZWNsYXJhdGlvbiBleHBvcnRzLCBpbmNsdWRpbmcgaGFuZGxpbmcgZGVzdHJ1Y3R1cmluZy5cbiAgICogRm9yIGV4YW1wbGUsIHRoaXM6XG4gICAqIGV4cG9ydCBjb25zdCB7eDogW2EgPSAyLCBiXSwgY30gPSBkO1xuICAgKiBiZWNvbWVzIHRoaXM6XG4gICAqICh7eDogW2V4cG9ydHMuYSA9IDIsIGV4cG9ydHMuYl0sIGM6IGV4cG9ydHMuY30gPSBkOylcbiAgICovXG4gICBwcm9jZXNzQ29tcGxleEV4cG9ydFZhcigpIHtcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIGNvbnN0IG5lZWRzUGFyZW5zID0gdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKTtcbiAgICBpZiAobmVlZHNQYXJlbnMpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIoXCIpO1xuICAgIH1cblxuICAgIGxldCBkZXB0aCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5kb2xsYXJCcmFjZUwpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNrZXRMKVxuICAgICAgKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZVIpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNrZXRSKSkge1xuICAgICAgICBkZXB0aC0tO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGRlcHRoID09PSAwICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5uYW1lKSAmJlxuICAgICAgICAhdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlXG4gICAgICApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmVxKSkge1xuICAgICAgICAvLyBEZWZhdWx0IHZhbHVlcyBtaWdodCBoYXZlIGFzc2lnbm1lbnRzIGluIHRoZSBSSFMgdGhhdCB3ZSB3YW50IHRvIGlnbm9yZSwgc28gc2tpcCBwYXN0XG4gICAgICAgIC8vIHRoZW0uXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgICAgaWYgKGlzRGVjbGFyYXRpb24odG9rZW4pKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KG5hbWUpO1xuICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHJlcGxhY2VtZW50IGZvciAke25hbWV9IGluIFxcYGV4cG9ydCB2YXJcXGAgc3ludGF4LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNPYmplY3RTaG9ydGhhbmREZWNsYXJhdGlvbih0b2tlbikpIHtcbiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gYCR7bmFtZX06ICR7cmVwbGFjZW1lbnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHJlcGxhY2VtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1BhcmVucykge1xuICAgICAgLy8gU2VlayB0byB0aGUgZW5kIG9mIHRoZSBSSFMuXG4gICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLnJoc0VuZEluZGV4O1xuICAgICAgaWYgKGVuZEluZGV4ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICB9XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBlbmRJbmRleCkge1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IGZ1bmN0aW9uIGZvbygpIHt9XG4gICAqIGludG8gdGhpczpcbiAgICogZnVuY3Rpb24gZm9vKCkge30gZXhwb3J0cy5mb28gPSBmb287XG4gICAqL1xuICAgcHJvY2Vzc0V4cG9ydEZ1bmN0aW9uKCkge1xuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wcm9jZXNzTmFtZWRGdW5jdGlvbigpO1xuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLiR7bmFtZX0gPSAke25hbWV9O2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgcGFzdCBhIGZ1bmN0aW9uIHdpdGggYSBuYW1lIGFuZCByZXR1cm4gdGhhdCBuYW1lLlxuICAgKi9cbiAgIHByb2Nlc3NOYW1lZEZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fZnVuY3Rpb24pKSB7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Lm5hbWUsIHR0Ll9mdW5jdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBhc3luYyBrZXl3b3JkIGluIGZ1bmN0aW9uIGV4cG9ydC5cIik7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuc3RhcikpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Lm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBpZGVudGlmaWVyIGZvciBleHBvcnRlZCBmdW5jdGlvbiBuYW1lLlwiKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgaWYgKHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuTCk7XG4gICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuUik7XG4gICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlVHlwZVJhbmdlKCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VMKTtcbiAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VSKTtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IGNsYXNzIEEge31cbiAgICogaW50byB0aGlzOlxuICAgKiBjbGFzcyBBIHt9IGV4cG9ydHMuQSA9IEE7XG4gICAqL1xuICAgcHJvY2Vzc0V4cG9ydENsYXNzKCkge1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIHRoaXMuY29weURlY29yYXRvcnMoKTtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuX2Fic3RyYWN0KSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NOYW1lZENsYXNzKCk7XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuJHtuYW1lfSA9ICR7bmFtZX07YCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoaXM6XG4gICAqIGV4cG9ydCB7YSwgYiBhcyBjfTtcbiAgICogaW50byB0aGlzOlxuICAgKiBleHBvcnRzLmEgPSBhOyBleHBvcnRzLmMgPSBiO1xuICAgKlxuICAgKiBPUlxuICAgKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IHthLCBiIGFzIGN9IGZyb20gJy4vZm9vJztcbiAgICogaW50byB0aGUgcHJlLWdlbmVyYXRlZCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY29kZSBmcm9tIHRoZSBJbXBvcnRQcm9jZXNzb3IuXG4gICAqXG4gICAqIEZvciB0aGUgZmlyc3QgY2FzZSwgaWYgdGhlIFR5cGVTY3JpcHQgdHJhbnNmb3JtIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gc2tpcFxuICAgKiBleHBvcnRzIHRoYXQgYXJlIG9ubHkgZGVmaW5lZCBhcyB0eXBlcy5cbiAgICovXG4gICBwcm9jZXNzRXhwb3J0QmluZGluZ3MoKSB7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcblxuICAgIGNvbnN0IGlzUmVFeHBvcnQgPSBpc0V4cG9ydEZyb20odGhpcy50b2tlbnMpO1xuXG4gICAgY29uc3QgZXhwb3J0U3RhdGVtZW50cyA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VSKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3BlY2lmaWVySW5mbyA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8odGhpcy50b2tlbnMpO1xuXG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBzcGVjaWZpZXJJbmZvLmVuZEluZGV4KSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3VsZFJlbW92ZUV4cG9ydCA9XG4gICAgICAgIHNwZWNpZmllckluZm8uaXNUeXBlIHx8XG4gICAgICAgICghaXNSZUV4cG9ydCAmJiB0aGlzLnNob3VsZEVsaWRlRXhwb3J0ZWRJZGVudGlmaWVyKHNwZWNpZmllckluZm8ubGVmdE5hbWUpKTtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlRXhwb3J0KSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IHNwZWNpZmllckluZm8ucmlnaHROYW1lO1xuICAgICAgICBpZiAoZXhwb3J0ZWROYW1lID09PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgIHRoaXMuaGFkRGVmYXVsdEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oYWROYW1lZEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYWxOYW1lID0gc3BlY2lmaWVySW5mby5sZWZ0TmFtZTtcbiAgICAgICAgY29uc3QgbmV3TG9jYWxOYW1lID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGxvY2FsTmFtZSk7XG4gICAgICAgIGV4cG9ydFN0YXRlbWVudHMucHVzaChgZXhwb3J0cy4ke2V4cG9ydGVkTmFtZX0gPSAke25ld0xvY2FsTmFtZSB8fCBsb2NhbE5hbWV9O2ApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VSKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5jb21tYSwgdHQuYnJhY2VSKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuY29tbWEpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkodGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkpfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChDb250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gZXhwb3J0Li4uZnJvbSwgc28gdGhyb3cgYXdheSB0aGUgbm9ybWFsIG5hbWVkIGV4cG9ydCBjb2RlXG4gICAgICAvLyBhbmQgdXNlIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgY29kZSBmcm9tIEltcG9ydFByb2Nlc3Nvci5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWUoKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UodGhpcy5pbXBvcnRQcm9jZXNzb3IuY2xhaW1JbXBvcnRDb2RlKHBhdGgpKTtcbiAgICAgIHJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyh0aGlzLnRva2Vucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBub3JtYWwgbmFtZWQgZXhwb3J0LCBzbyB1c2UgdGhhdC5cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoZXhwb3J0U3RhdGVtZW50cy5qb2luKFwiIFwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnNlbWkpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gICBwcm9jZXNzRXhwb3J0U3RhcigpIHtcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnN0cmluZykpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSB0aGlzLnRva2Vucy5zdHJpbmdWYWx1ZSgpO1xuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UodGhpcy5pbXBvcnRQcm9jZXNzb3IuY2xhaW1JbXBvcnRDb2RlKHBhdGgpKTtcbiAgICByZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXModGhpcy50b2tlbnMpO1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5zZW1pKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICAgc2hvdWxkRWxpZGVFeHBvcnRlZElkZW50aWZpZXIobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiZcbiAgICAgICF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmXG4gICAgICAhdGhpcy5kZWNsYXJhdGlvbkluZm8udmFsdWVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxufVxuIiwgIlxuXG5cbmltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IGVsaWRlSW1wb3J0RXF1YWxzIGZyb20gXCIuLi91dGlsL2VsaWRlSW1wb3J0RXF1YWxzXCI7XG5pbXBvcnQgZ2V0RGVjbGFyYXRpb25JbmZvLCB7XG5cbiAgRU1QVFlfREVDTEFSQVRJT05fSU5GTyxcbn0gZnJvbSBcIi4uL3V0aWwvZ2V0RGVjbGFyYXRpb25JbmZvXCI7XG5pbXBvcnQgZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyBmcm9tIFwiLi4vdXRpbC9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvXCI7XG5pbXBvcnQge2dldE5vblR5cGVJZGVudGlmaWVyc30gZnJvbSBcIi4uL3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzXCI7XG5pbXBvcnQgaXNFeHBvcnRGcm9tIGZyb20gXCIuLi91dGlsL2lzRXhwb3J0RnJvbVwiO1xuaW1wb3J0IHtyZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXN9IGZyb20gXCIuLi91dGlsL3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlc1wiO1xuaW1wb3J0IHNob3VsZEVsaWRlRGVmYXVsdEV4cG9ydCBmcm9tIFwiLi4vdXRpbC9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnRcIjtcblxuaW1wb3J0IFRyYW5zZm9ybWVyIGZyb20gXCIuL1RyYW5zZm9ybWVyXCI7XG5cbi8qKlxuICogQ2xhc3MgZm9yIGVkaXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgd2hlbiB3ZSBhcmUga2VlcGluZyB0aGUgY29kZSBhcyBFU00uIFdlIHN0aWxsIG5lZWQgdG8gcmVtb3ZlXG4gKiB0eXBlLW9ubHkgaW1wb3J0cyBpbiBUeXBlU2NyaXB0IGFuZCBGbG93LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU01JbXBvcnRUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHtcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgdG9rZW5zLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgaXNGbG93VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAga2VlcFVudXNlZEltcG9ydHMsXG4gICAgb3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5oZWxwZXJNYW5hZ2VyID0gaGVscGVyTWFuYWdlcjt0aGlzLnJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSByZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyO3RoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCA9IGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQ7dGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkID0gaXNGbG93VHJhbnNmb3JtRW5hYmxlZDt0aGlzLmtlZXBVbnVzZWRJbXBvcnRzID0ga2VlcFVudXNlZEltcG9ydHM7O1xuICAgIHRoaXMubm9uVHlwZUlkZW50aWZpZXJzID1cbiAgICAgIGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiYgIWtlZXBVbnVzZWRJbXBvcnRzXG4gICAgICAgID8gZ2V0Tm9uVHlwZUlkZW50aWZpZXJzKHRva2Vucywgb3B0aW9ucylcbiAgICAgICAgOiBuZXcgU2V0KCk7XG4gICAgdGhpcy5kZWNsYXJhdGlvbkluZm8gPVxuICAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJiAha2VlcFVudXNlZEltcG9ydHNcbiAgICAgICAgPyBnZXREZWNsYXJhdGlvbkluZm8odG9rZW5zKVxuICAgICAgICA6IEVNUFRZX0RFQ0xBUkFUSU9OX0lORk87XG4gICAgdGhpcy5pbmplY3RDcmVhdGVSZXF1aXJlRm9ySW1wb3J0UmVxdWlyZSA9IEJvb2xlYW4ob3B0aW9ucy5pbmplY3RDcmVhdGVSZXF1aXJlRm9ySW1wb3J0UmVxdWlyZSk7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIC8vIFR5cGVTY3JpcHQgYGltcG9ydCBmb28gPSByZXF1aXJlKCdmb28nKTtgIHNob3VsZCBhbHdheXMganVzdCBiZSB0cmFuc2xhdGVkIHRvIHBsYWluIHJlcXVpcmUuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMzKHR0Ll9pbXBvcnQsIHR0Lm5hbWUsIHR0LmVxKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ltcG9ydEVxdWFscygpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNCh0dC5faW1wb3J0LCB0dC5uYW1lLCB0dC5uYW1lLCB0dC5lcSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIENvbnRleHR1YWxLZXl3b3JkLl90eXBlKVxuICAgICkge1xuICAgICAgLy8gaW1wb3J0IHR5cGUgVCA9IHJlcXVpcmUoJ1QnKVxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdCBpcyBhbHdheXMgZXhhY3RseSA4IHRva2VucyBsb25nLCBzbyByZW1vdmUgdGhlIDcgcmVtYWluaW5nIHRva2Vucy5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0LmVxKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwibW9kdWxlLmV4cG9ydHNcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczUodHQuX2V4cG9ydCwgdHQuX2ltcG9ydCwgdHQubmFtZSwgdHQubmFtZSwgdHQuZXEpICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAyLCBDb250ZXh0dWFsS2V5d29yZC5fdHlwZSlcbiAgICApIHtcbiAgICAgIC8vIGV4cG9ydCBpbXBvcnQgdHlwZSBUID0gcmVxdWlyZSgnVCcpXG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIC8vIFRoaXMgY29uc3RydWN0IGlzIGFsd2F5cyBleGFjdGx5IDkgdG9rZW5zIGxvbmcsIHNvIHJlbW92ZSB0aGUgOCByZW1haW5pbmcgdG9rZW5zLlxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuX2ltcG9ydCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0KSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0V4cG9ydERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0LmJyYWNlTCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NOYW1lZEV4cG9ydHMoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIodHQuX2V4cG9ydCwgdHQubmFtZSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIENvbnRleHR1YWxLZXl3b3JkLl90eXBlKVxuICAgICkge1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2F9O1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2EgYXMgYn07XG4gICAgICAvLyBleHBvcnQgdHlwZSB7YX0gZnJvbSAnLi9iJztcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogZnJvbSAnLi9iJztcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogYXMgbnMgZnJvbSAnLi9iJztcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZUwpKSB7XG4gICAgICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VSKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICpcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9hcykpIHtcbiAgICAgICAgICAvLyBhc1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgLy8gbnNcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBSZW1vdmUgdHlwZSByZS1leHBvcnQgYC4uLiB9IGZyb20gJy4vVCdgXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSAmJlxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxLCB0dC5zdHJpbmcpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzKHRoaXMudG9rZW5zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAgcHJvY2Vzc0ltcG9ydEVxdWFscygpIHtcbiAgICBjb25zdCBpbXBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSk7XG4gICAgaWYgKHRoaXMuc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKGltcG9ydE5hbWUpKSB7XG4gICAgICAvLyBJZiB0aGlzIG5hbWUgaXMgb25seSB1c2VkIGFzIGEgdHlwZSwgZWxpZGUgdGhlIHdob2xlIGltcG9ydC5cbiAgICAgIGVsaWRlSW1wb3J0RXF1YWxzKHRoaXMudG9rZW5zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5qZWN0Q3JlYXRlUmVxdWlyZUZvckltcG9ydFJlcXVpcmUpIHtcbiAgICAgIC8vIFdlJ3JlIHVzaW5nIHJlcXVpcmUgaW4gYW4gZW52aXJvbm1lbnQgKE5vZGUgRVNNKSB0aGF0IGRvZXNuJ3QgcHJvdmlkZVxuICAgICAgLy8gaXQgYXMgYSBnbG9iYWwsIHNvIGdlbmVyYXRlIGEgaGVscGVyIHRvIGltcG9ydCBpdC5cbiAgICAgIC8vIGltcG9ydCAtPiBjb25zdFxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgICAvLyBGb29cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgLy8gPVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAvLyByZXF1aXJlXG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4odGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXCJyZXF1aXJlXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHN3aXRjaCBgaW1wb3J0YCB0byBgY29uc3RgLlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgIHByb2Nlc3NJbXBvcnQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9pbXBvcnQsIHR0LnBhcmVuTCkpIHtcbiAgICAgIC8vIER5bmFtaWMgaW1wb3J0cyBkb24ndCBuZWVkIHRvIGJlIHRyYW5zZm9ybWVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy50b2tlbnMuc25hcHNob3QoKTtcbiAgICBjb25zdCBhbGxJbXBvcnRzUmVtb3ZlZCA9IHRoaXMucmVtb3ZlSW1wb3J0VHlwZUJpbmRpbmdzKCk7XG4gICAgaWYgKGFsbEltcG9ydHNSZW1vdmVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXN0b3JlVG9TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnN0cmluZykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICByZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXModGhpcy50b2tlbnMpO1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnNlbWkpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0eXBlIGJpbmRpbmdzIGZyb20gdGhpcyBpbXBvcnQsIGxlYXZpbmcgdGhlIHJlc3Qgb2YgdGhlIGltcG9ydCBpbnRhY3QuXG4gICAqXG4gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgaW1wb3J0IHdhcyBPTkxZIHR5cGVzLCBhbmQgdGh1cyBpcyBlbGlnaWJsZSBmb3IgcmVtb3ZhbC4gVGhpcyB3aWxsIGJhaWwgb3V0XG4gICAqIG9mIHRoZSByZXBsYWNlbWVudCBvcGVyYXRpb24sIHNvIHdlIGNhbiByZXR1cm4gZWFybHkgaGVyZS5cbiAgICovXG4gICByZW1vdmVJbXBvcnRUeXBlQmluZGluZ3MoKSB7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuX2ltcG9ydCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgdHQuY29tbWEpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIFwiaW1wb3J0IHR5cGVcIiBzdGF0ZW1lbnQsIHNvIGV4aXQgZWFybHkuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuc3RyaW5nKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJhcmUgaW1wb3J0LCBzbyB3ZSBzaG91bGQgcHJvY2VlZCB3aXRoIHRoZSBpbXBvcnQuXG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIHRoZSBcIm1vZHVsZVwiIHRva2VuIGluIGltcG9ydCByZWZsZWN0aW9uLlxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAyLCBDb250ZXh0dWFsS2V5d29yZC5fZnJvbSlcbiAgICApIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cblxuICAgIGxldCBmb3VuZE5vblR5cGVJbXBvcnQgPSBmYWxzZTtcbiAgICBsZXQgZm91bmRBbnlOYW1lZEltcG9ydCA9IGZhbHNlO1xuICAgIGxldCBuZWVkc0NvbW1hID0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUgZGVmYXVsdCBpbXBvcnQuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Lm5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUodGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmNvbW1hKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvdW5kTm9uVHlwZUltcG9ydCA9IHRydWU7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuY29tbWEpKSB7XG4gICAgICAgICAgLy8gV2UncmUgaW4gYSBzdGF0ZW1lbnQgbGlrZTpcbiAgICAgICAgICAvLyBpbXBvcnQgQSwgKiBhcyBCIGZyb20gJy4vQSc7XG4gICAgICAgICAgLy8gb3JcbiAgICAgICAgICAvLyBpbXBvcnQgQSwge2Zvb30gZnJvbSAnLi9BJztcbiAgICAgICAgICAvLyB3aGVyZSB0aGUgYEFgIGlzIGJlaW5nIGtlcHQuIFRoZSBjb21tYSBzaG91bGQgYmUgcmVtb3ZlZCBpZiBhbiBvbmx5XG4gICAgICAgICAgLy8gaWYgdGhlIG5leHQgcGFydCBvZiB0aGUgaW1wb3J0IHN0YXRlbWVudCBpcyBlbGlkZWQsIGJ1dCB0aGF0J3MgaGFyZFxuICAgICAgICAgIC8vIHRvIGRldGVybWluZSBhdCB0aGlzIHBvaW50IGluIHRoZSBjb2RlLiBJbnN0ZWFkLCBhbHdheXMgcmVtb3ZlIGl0XG4gICAgICAgICAgLy8gYW5kIHNldCBhIGZsYWcgdG8gYWRkIGl0IGJhY2sgaWYgbmVjZXNzYXJ5LlxuICAgICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuc3RhcikpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZSh0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0UmVsYXRpdmVJbmRleCgyKSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZWVkc0NvbW1hKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIixcIik7XG4gICAgICAgIH1cbiAgICAgICAgZm91bmROb25UeXBlSW1wb3J0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuc3Rhcik7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0Lm5hbWUpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5uYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlTCkpIHtcbiAgICAgIGlmIChuZWVkc0NvbW1hKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIsXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgZm91bmRBbnlOYW1lZEltcG9ydCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBnZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvKHRoaXMudG9rZW5zKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNwZWNpZmllckluZm8uaXNUeXBlIHx8XG4gICAgICAgICAgdGhpcy5zaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUoc3BlY2lmaWVySW5mby5yaWdodE5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHNwZWNpZmllckluZm8uZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvdW5kTm9uVHlwZUltcG9ydCA9IHRydWU7XG4gICAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgc3BlY2lmaWVySW5mby5lbmRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VSKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5rZWVwVW51c2VkSW1wb3J0cykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICByZXR1cm4gIWZvdW5kTm9uVHlwZUltcG9ydDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNGbG93VHJhbnNmb3JtRW5hYmxlZCkge1xuICAgICAgLy8gSW4gRmxvdywgdW5saWtlIFRTLCBgaW1wb3J0IHt9IGZyb20gJ2Zvbyc7YCBwcmVzZXJ2ZXMgdGhlIGltcG9ydC5cbiAgICAgIHJldHVybiBmb3VuZEFueU5hbWVkSW1wb3J0ICYmICFmb3VuZE5vblR5cGVJbXBvcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAgc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkICYmXG4gICAgICAhdGhpcy5rZWVwVW51c2VkSW1wb3J0cyAmJlxuICAgICAgIXRoaXMubm9uVHlwZUlkZW50aWZpZXJzLmhhcyhuYW1lKVxuICAgICk7XG4gIH1cblxuICAgcHJvY2Vzc0V4cG9ydERlZmF1bHQoKSB7XG4gICAgaWYgKFxuICAgICAgc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0KFxuICAgICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQsXG4gICAgICAgIHRoaXMua2VlcFVudXNlZEltcG9ydHMsXG4gICAgICAgIHRoaXMudG9rZW5zLFxuICAgICAgICB0aGlzLmRlY2xhcmF0aW9uSW5mbyxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIC8vIElmIHRoZSBleHBvcnRlZCB2YWx1ZSBpcyBqdXN0IGFuIGlkZW50aWZpZXIgYW5kIHNob3VsZCBiZSBlbGlkZWQgYnkgVHlwZVNjcmlwdFxuICAgICAgLy8gcnVsZXMsIHRoZW4gcmVtb3ZlIGl0IGVudGlyZWx5LiBJdCB3aWxsIGFsd2F5cyBoYXZlIHRoZSBmb3JtIGBleHBvcnQgZGVmYXVsdCBlYCxcbiAgICAgIC8vIHdoZXJlIGBlYCBpcyBhbiBpZGVudGlmaWVyLlxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGFscmVhZHlIYXNOYW1lID1cbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM0KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fZnVuY3Rpb24sIHR0Lm5hbWUpIHx8XG4gICAgICAvLyBleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvblxuICAgICAgKHRoaXMudG9rZW5zLm1hdGNoZXM1KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5uYW1lLCB0dC5fZnVuY3Rpb24sIHR0Lm5hbWUpICYmXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChcbiAgICAgICAgICB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDIsXG4gICAgICAgICAgQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jLFxuICAgICAgICApKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQodHQuX2V4cG9ydCwgdHQuX2RlZmF1bHQsIHR0Ll9jbGFzcywgdHQubmFtZSkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM1KHR0Ll9leHBvcnQsIHR0Ll9kZWZhdWx0LCB0dC5fYWJzdHJhY3QsIHR0Ll9jbGFzcywgdHQubmFtZSk7XG5cbiAgICBpZiAoIWFscmVhZHlIYXNOYW1lICYmIHRoaXMucmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcikge1xuICAgICAgLy8gVGhpcyBpcyBhIHBsYWluIFwiZXhwb3J0IGRlZmF1bHQgRVwiIHN0YXRlbWVudCBhbmQgd2UgbmVlZCB0byBhc3NpZ24gRSB0byBhIHZhcmlhYmxlLlxuICAgICAgLy8gQ2hhbmdlIFwiZXhwb3J0IGRlZmF1bHQgRVwiIHRvIFwibGV0IF9kZWZhdWx0OyBleHBvcnQgZGVmYXVsdCBfZGVmYXVsdCA9IEVcIlxuICAgICAgY29uc3QgZGVmYXVsdFZhck5hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfZGVmYXVsdFwiKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgbGV0ICR7ZGVmYXVsdFZhck5hbWV9OyBleHBvcnRgKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICR7ZGVmYXVsdFZhck5hbWV9ID1gKTtcbiAgICAgIHRoaXMucmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lci5zZXRFeHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZShkZWZhdWx0VmFyTmFtZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHN0YXRlbWVudCB3aXRoIG9uZSBvZiB0aGVzZSBmb3JtczpcbiAgICogZXhwb3J0IHthLCB0eXBlIGJ9O1xuICAgKiBleHBvcnQge2MsIHR5cGUgZH0gZnJvbSAnZm9vJztcbiAgICpcbiAgICogSW4gYm90aCBjYXNlcywgYW55IGV4cGxpY2l0IHR5cGUgZXhwb3J0cyBzaG91bGQgYmUgcmVtb3ZlZC4gSW4gdGhlIGZpcnN0XG4gICAqIGNhc2UsIHdlIGFsc28gbmVlZCB0byBoYW5kbGUgaW1wbGljaXQgZXhwb3J0IGVsaXNpb24gZm9yIG5hbWVzIGRlY2xhcmVkIGFzXG4gICAqIHR5cGVzLiBJbiB0aGUgc2Vjb25kIGNhc2UsIHdlIG11c3QgTk9UIGRvIGltcGxpY2l0IG5hbWVkIGV4cG9ydCBlbGlzaW9uLFxuICAgKiBidXQgd2UgbXVzdCByZW1vdmUgdGhlIHJ1bnRpbWUgaW1wb3J0IGlmIGFsbCBleHBvcnRzIGFyZSB0eXBlIGV4cG9ydHMuXG4gICAqL1xuICAgcHJvY2Vzc05hbWVkRXhwb3J0cygpIHtcbiAgICBpZiAoIXRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5fZXhwb3J0KTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZUwpO1xuXG4gICAgY29uc3QgaXNSZUV4cG9ydCA9IGlzRXhwb3J0RnJvbSh0aGlzLnRva2Vucyk7XG4gICAgbGV0IGZvdW5kTm9uVHlwZUV4cG9ydCA9IGZhbHNlO1xuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEodHQuYnJhY2VSKSkge1xuICAgICAgY29uc3Qgc3BlY2lmaWVySW5mbyA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8odGhpcy50b2tlbnMpO1xuICAgICAgaWYgKFxuICAgICAgICBzcGVjaWZpZXJJbmZvLmlzVHlwZSB8fFxuICAgICAgICAoIWlzUmVFeHBvcnQgJiYgdGhpcy5zaG91bGRFbGlkZUV4cG9ydGVkTmFtZShzcGVjaWZpZXJJbmZvLmxlZnROYW1lKSlcbiAgICAgICkge1xuICAgICAgICAvLyBUeXBlIGV4cG9ydCwgc28gcmVtb3ZlIGFsbCB0b2tlbnMsIGluY2x1ZGluZyBhbnkgY29tbWEuXG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHNwZWNpZmllckluZm8uZW5kSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb24tdHlwZSBleHBvcnQsIHNvIGNvcHkgYWxsIHRva2VucywgaW5jbHVkaW5nIGFueSBjb21tYS5cbiAgICAgICAgZm91bmROb25UeXBlRXhwb3J0ID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgc3BlY2lmaWVySW5mby5lbmRJbmRleCkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZVIpO1xuXG4gICAgaWYgKCF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmIGlzUmVFeHBvcnQgJiYgIWZvdW5kTm9uVHlwZUV4cG9ydCkge1xuICAgICAgLy8gVGhpcyBpcyBhIHR5cGUtb25seSByZS1leHBvcnQsIHNvIHNraXAgZXZhbHVhdGluZyB0aGUgb3RoZXIgbW9kdWxlLiBUZWNobmljYWxseSB0aGlzXG4gICAgICAvLyBsZWF2ZXMgdGhlIHN0YXRlbWVudCBhcyBgZXhwb3J0IHt9YCwgYnV0IHRoYXQncyBvayBzaW5jZSB0aGF0J3MgYSBuby1vcC5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzKHRoaXMudG9rZW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFU00gZWxpZGVzIGFsbCBpbXBvcnRzIHdpdGggdGhlIHJ1bGUgdGhhdCB3ZSBvbmx5IGVsaWRlIGlmIHdlIHNlZSB0aGF0IGl0J3NcbiAgICogYSB0eXBlIGFuZCBuZXZlciBzZWUgaXQgYXMgYSB2YWx1ZS4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBDSlMsIHdoaWNoXG4gICAqIGVsaWRlcyBpbXBvcnRzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5rbm93bi5cbiAgICovXG4gICBzaG91bGRFbGlkZUV4cG9ydGVkTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJlxuICAgICAgIXRoaXMua2VlcFVudXNlZEltcG9ydHMgJiZcbiAgICAgIHRoaXMuZGVjbGFyYXRpb25JbmZvLnR5cGVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpICYmXG4gICAgICAhdGhpcy5kZWNsYXJhdGlvbkluZm8udmFsdWVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7Q29udGV4dHVhbEtleXdvcmR9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvd1RyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgcm9vdFRyYW5zZm9ybWVyLFxuICAgICB0b2tlbnMsXG4gICAgIGlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQsXG4gICkge1xuICAgIHN1cGVyKCk7dGhpcy5yb290VHJhbnNmb3JtZXIgPSByb290VHJhbnNmb3JtZXI7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkID0gaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZDs7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NQb3NzaWJsZUFycm93UGFyYW1FbmQoKSB8fFxuICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlQXN5bmNBcnJvd1dpdGhUeXBlUGFyYW1zKCkgfHxcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NQb3NzaWJsZVR5cGVSYW5nZSgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fZXhwb3J0LCB0dC5fZW51bSkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc05hbWVkRXhwb3J0RW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5fZXhwb3J0LCB0dC5fZGVmYXVsdCwgdHQuX2VudW0pKSB7XG4gICAgICB0aGlzLnByb2Nlc3NEZWZhdWx0RXhwb3J0RW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBkZWNsYXJhdGlvbiBsaWtlOlxuICAgKiBleHBvcnQgZW51bSBFIC4uLlxuICAgKlxuICAgKiBXaXRoIHRoaXMgaW1wb3J0cyB0cmFuc2Zvcm0sIHRoaXMgYmVjb21lczpcbiAgICogY29uc3QgRSA9IFtbZW51bV1dOyBleHBvcnRzLkUgPSBFO1xuICAgKlxuICAgKiBvdGhlcndpc2UsIGl0IGJlY29tZXM6XG4gICAqIGV4cG9ydCBjb25zdCBFID0gW1tlbnVtXV07XG4gICAqL1xuICBwcm9jZXNzTmFtZWRFeHBvcnRFbnVtKCkge1xuICAgIGlmICh0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIC8vIGV4cG9ydFxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRSZWxhdGl2ZUluZGV4KDEpO1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuJHtlbnVtTmFtZX0gPSAke2VudW1OYW1lfTtgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnByb2Nlc3NFbnVtKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIGRlY2xhcmF0aW9uIGxpa2U6XG4gICAqIGV4cG9ydCBkZWZhdWx0IGVudW0gRVxuICAgKlxuICAgKiBXaXRoIHRoZSBpbXBvcnRzIHRyYW5zZm9ybSwgdGhpcyBiZWNvbWVzOlxuICAgKiBjb25zdCBFID0gW1tlbnVtXV07IGV4cG9ydHMuZGVmYXVsdCA9IEU7XG4gICAqXG4gICAqIG90aGVyd2lzZSwgaXQgYmVjb21lczpcbiAgICogY29uc3QgRSA9IFtbZW51bV1dOyBleHBvcnQgZGVmYXVsdCBFO1xuICAgKi9cbiAgcHJvY2Vzc0RlZmF1bHRFeHBvcnRFbnVtKCkge1xuICAgIC8vIGV4cG9ydFxuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIC8vIGRlZmF1bHRcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIGNvbnN0IGVudW1OYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdFJlbGF0aXZlSW5kZXgoMSk7XG4gICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgIGlmICh0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLmRlZmF1bHQgPSAke2VudW1OYW1lfTtgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydCBkZWZhdWx0ICR7ZW51bU5hbWV9O2ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc3BpbGUgZmxvdyBlbnVtcyB0byBpbnZva2UgdGhlIFwiZmxvdy1lbnVtcy1ydW50aW1lXCIgbGlicmFyeS5cbiAgICpcbiAgICogQ3VycmVudGx5LCB0aGUgdHJhbnNwaWxlZCBjb2RlIGFsd2F5cyB1c2VzIGByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpYCxcbiAgICogYnV0IGlmIGZ1dHVyZSBmbGV4aWJpbGl0eSBpcyBuZWVkZWQsIHdlIGNvdWxkIGV4cG9zZSBhIGNvbmZpZyBvcHRpb24gZm9yXG4gICAqIHRoaXMgc3RyaW5nIChzaW1pbGFyIHRvIGNvbmZpZ3VyYWJsZSBKU1gpLiBFdmVuIHdoZW4gdGFyZ2V0aW5nIEVTTSwgdGhlXG4gICAqIGRlZmF1bHQgYmVoYXZpb3Igb2YgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1mbG93LWVudW1zIGlzIHRvIHVzZSByZXF1aXJlXG4gICAqIHJhdGhlciB0aGFuIGluamVjdGluZyBhbiBpbXBvcnQuXG4gICAqXG4gICAqIEZsb3cgZW51bXMgYXJlIHF1aXRlIGEgYml0IHNpbXBsZXIgdGhhbiBUUyBlbnVtcyBhbmQgaGF2ZSBzb21lIGNvbnZlbmllbnRcbiAgICogY29uc3RyYWludHM6XG4gICAqIC0gRWxlbWVudCBpbml0aWFsaXplcnMgbXVzdCBiZSBlaXRoZXIgYWx3YXlzIHByZXNlbnQgb3IgYWx3YXlzIGFic2VudC4gVGhhdFxuICAgKiAgIG1lYW5zIHRoYXQgd2UgY2FuIHVzZSBmaXhlZCBsb29rYWhlYWQgb24gdGhlIGZpcnN0IGVsZW1lbnQgKGlmIGFueSkgYW5kXG4gICAqICAgYXNzdW1lIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSBsaWtlIHRoYXQuXG4gICAqIC0gVGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiBhbiBlbGVtZW50IGluaXRpYWxpemVyIG11c3QgYmUgYSBsaXRlcmFsIHZhbHVlLFxuICAgKiAgIG5vdCBhIGNvbXBsZXggZXhwcmVzc2lvbiBhbmQgbm90IHJlZmVyZW5jaW5nIG90aGVyIGVsZW1lbnRzLiBUaGF0IG1lYW5zXG4gICAqICAgd2UgY2FuIHNpbXBseSBjb3B5IGEgc2luZ2xlIHRva2VuLlxuICAgKlxuICAgKiBFbnVtcyBjYW4gYmUgYnJva2VuIHVwIGludG8gdGhyZWUgYmFzaWMgY2FzZXM6XG4gICAqXG4gICAqIE1pcnJvcmVkIGVudW1zOlxuICAgKiBlbnVtIEUge0EsIEJ9XG4gICAqICAgLT5cbiAgICogY29uc3QgRSA9IHJlcXVpcmUoXCJmbG93LWVudW1zLXJ1bnRpbWVcIikuTWlycm9yZWQoW1wiQVwiLCBcIkJcIl0pO1xuICAgKlxuICAgKiBJbml0aWFsaXplciBlbnVtczpcbiAgICogZW51bSBFIHtBID0gMSwgQiA9IDJ9XG4gICAqICAgLT5cbiAgICogY29uc3QgRSA9IHJlcXVpcmUoXCJmbG93LWVudW1zLXJ1bnRpbWVcIikoe0E6IDEsIEI6IDJ9KTtcbiAgICpcbiAgICogU3ltYm9sIGVudW1zOlxuICAgKiBlbnVtIEUgb2Ygc3ltYm9sIHtBLCBCfVxuICAgKiAgIC0+XG4gICAqIGNvbnN0IEUgPSByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpKHtBOiBTeW1ib2woXCJBXCIpLCBCOiBTeW1ib2woXCJCXCIpfSk7XG4gICAqXG4gICAqIFdlIGNhbiBzdGF0aWNhbGx5IGRldGVjdCB3aGljaCBvZiB0aGUgdGhyZWUgY2FzZXMgdGhpcyBpcyBieSBsb29raW5nIGF0IHRoZVxuICAgKiBcIm9mXCIgZGVjbGFyYXRpb24gKGlmIGFueSkgYW5kIHNlZWluZyBpZiB0aGUgZmlyc3QgZWxlbWVudCBoYXMgYW4gaW5pdGlhbGl6ZXIuXG4gICAqIFNpbmNlIHRoZSBvdGhlciB0cmFuc2Zvcm0gZGV0YWlscyBhcmUgc28gc2ltaWxhciBiZXR3ZWVuIHRoZSB0aHJlZSBjYXNlcywgd2VcbiAgICogdXNlIGEgc2luZ2xlIGltcGxlbWVudGF0aW9uIGFuZCB2YXJ5IHRoZSB0cmFuc2Zvcm0gd2l0aGluIHByb2Nlc3NFbnVtRWxlbWVudFxuICAgKiBiYXNlZCBvbiBjYXNlLlxuICAgKi9cbiAgcHJvY2Vzc0VudW0oKSB7XG4gICAgLy8gZW51bSBFIC0+IGNvbnN0IEVcbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJjb25zdFwiKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5uYW1lKTtcblxuICAgIGxldCBpc1N5bWJvbEVudW0gPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX29mKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIGlzU3ltYm9sRW51bSA9IHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKENvbnRleHR1YWxLZXl3b3JkLl9zeW1ib2wpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgaGFzSW5pdGlhbGl6ZXJzID0gdGhpcy50b2tlbnMubWF0Y2hlczModHQuYnJhY2VMLCB0dC5uYW1lLCB0dC5lcSk7XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZSgnID0gcmVxdWlyZShcImZsb3ctZW51bXMtcnVudGltZVwiKScpO1xuXG4gICAgY29uc3QgaXNNaXJyb3JlZCA9ICFpc1N5bWJvbEVudW0gJiYgIWhhc0luaXRpYWxpemVycztcbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGlzTWlycm9yZWQgPyBcIi5NaXJyb3JlZChbXCIgOiBcIih7XCIpO1xuXG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFjZVIpKSB7XG4gICAgICAvLyAuLi4gaXMgYWxsb3dlZCBhdCB0aGUgZW5kIGFuZCBoYXMgbm8gcnVudGltZSBiZWhhdmlvci5cbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5lbGxpcHNpcykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NFbnVtRWxlbWVudChpc1N5bWJvbEVudW0sIGhhc0luaXRpYWxpemVycyk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuY29tbWEpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihpc01pcnJvcmVkID8gXCJdKTtcIiA6IFwifSk7XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYW4gaW5kaXZpZHVhbCBlbnVtIGVsZW1lbnQsIHByb2R1Y2luZyBlaXRoZXIgYW4gYXJyYXkgZWxlbWVudCBvciBhblxuICAgKiBvYmplY3QgZWxlbWVudCBiYXNlZCBvbiB3aGF0IHR5cGUgb2YgZW51bSB0aGlzIGlzLlxuICAgKi9cbiAgcHJvY2Vzc0VudW1FbGVtZW50KGlzU3ltYm9sRW51bSwgaGFzSW5pdGlhbGl6ZXJzKSB7XG4gICAgaWYgKGlzU3ltYm9sRW51bSkge1xuICAgICAgLy8gU3ltYm9sIGVudW1zIG5ldmVyIGhhdmUgaW5pdGlhbGl6ZXJzIGFuZCBhcmUgZXhwYW5kZWQgdG8gb2JqZWN0IGVsZW1lbnRzLlxuICAgICAgLy8gQSwgLT4gQTogU3ltYm9sKFwiQVwiKSxcbiAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgOiBTeW1ib2woXCIke2VsZW1lbnROYW1lfVwiKWApO1xuICAgIH0gZWxzZSBpZiAoaGFzSW5pdGlhbGl6ZXJzKSB7XG4gICAgICAvLyBJbml0aWFsaXplcnMgYXJlIGV4cGFuZGVkIHRvIG9iamVjdCBlbGVtZW50cy5cbiAgICAgIC8vIEEgPSAxLCAtPiBBOiAxLFxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKFwiOlwiKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbnVtIGVsZW1lbnRzIHdpdGhvdXQgaW5pdGlhbGl6ZXJzIGJlY29tZSBzdHJpbmcgbGl0ZXJhbCBhcnJheSBlbGVtZW50cy5cbiAgICAgIC8vIEEsIC0+IFwiQVwiLFxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGBcIiR7dGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKX1cImApO1xuICAgIH1cbiAgfVxufVxuIiwgIiBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbihvcHMpIHsgbGV0IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IGxldCB2YWx1ZSA9IG9wc1swXTsgbGV0IGkgPSAxOyB3aGlsZSAoaSA8IG9wcy5sZW5ndGgpIHsgY29uc3Qgb3AgPSBvcHNbaV07IGNvbnN0IGZuID0gb3BzW2kgKyAxXTsgaSArPSAyOyBpZiAoKG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgJiYgdmFsdWUgPT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHsgbGFzdEFjY2Vzc0xIUyA9IHZhbHVlOyB2YWx1ZSA9IGZuKHZhbHVlKTsgfSBlbHNlIGlmIChvcCA9PT0gJ2NhbGwnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgeyB2YWx1ZSA9IGZuKCguLi5hcmdzKSA9PiB2YWx1ZS5jYWxsKGxhc3RBY2Nlc3NMSFMsIC4uLmFyZ3MpKTsgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgfSB9IHJldHVybiB2YWx1ZTsgfVxuXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuY29uc3QgSkVTVF9HTE9CQUxfTkFNRSA9IFwiamVzdFwiO1xuY29uc3QgSE9JU1RFRF9NRVRIT0RTID0gW1wibW9ja1wiLCBcInVubW9ja1wiLCBcImVuYWJsZUF1dG9tb2NrXCIsIFwiZGlzYWJsZUF1dG9tb2NrXCJdO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIGJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0LCB3aGljaCBob2lzdHMgdXAgc29tZSBqZXN0IG1ldGhvZFxuICogY2FsbHMgYWJvdmUgdGhlIGltcG9ydHMgdG8gYWxsb3cgdGhlbSB0byBvdmVycmlkZSBvdGhlciBpbXBvcnRzLlxuICpcbiAqIFRvIHByZXNlcnZlIGxpbmUgbnVtYmVycywgcmF0aGVyIHRoYW4gZGlyZWN0bHkgbW92aW5nIHRoZSBqZXN0Lm1vY2sgY29kZSwgd2VcbiAqIHdyYXAgZWFjaCBpbnZvY2F0aW9uIGluIGEgZnVuY3Rpb24gc3RhdGVtZW50IGFuZCB0aGVuIGNhbGwgdGhlIGZ1bmN0aW9uIGZyb21cbiAqIHRoZSB0b3Agb2YgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEplc3RIb2lzdFRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIge1xuICAgIF9faW5pdCgpIHt0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzID0gW119XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjt0aGlzLmltcG9ydFByb2Nlc3NvciA9IGltcG9ydFByb2Nlc3NvcjtKZXN0SG9pc3RUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7O1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5zY29wZURlcHRoID09PSAwICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNCh0dC5uYW1lLCB0dC5kb3QsIHR0Lm5hbWUsIHR0LnBhcmVuTCkgJiZcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCkgPT09IEpFU1RfR0xPQkFMX05BTUVcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IFRoaXMgb25seSB3b3JrcyBpZiBpbXBvcnRzIHRyYW5zZm9ybSBpcyBhY3RpdmUsIHdoaWNoIGl0IHdpbGwgYmUgZm9yIGplc3QuXG4gICAgICAvLyAgICAgICBCdXQgaWYgamVzdCBhZGRzIG1vZHVsZSBzdXBwb3J0IGFuZCB3ZSBubyBsb25nZXIgbmVlZCB0aGUgaW1wb3J0IHRyYW5zZm9ybSwgdGhpcyBuZWVkcyBmaXhpbmcuXG4gICAgICBpZiAoX29wdGlvbmFsQ2hhaW4oW3RoaXMsICdhY2Nlc3MnLCBfID0+IF8uaW1wb3J0UHJvY2Vzc29yLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5nZXRHbG9iYWxOYW1lcywgJ2NhbGwnLCBfMyA9PiBfMygpLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNCA9PiBfNC5oYXMsICdjYWxsJywgXzUgPT4gXzUoSkVTVF9HTE9CQUxfTkFNRSldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5leHRyYWN0SG9pc3RlZENhbGxzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0SG9pc3RlZENvZGUoKSB7XG4gICAgaWYgKHRoaXMuaG9pc3RlZEZ1bmN0aW9uTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gVGhpcyB3aWxsIGJlIHBsYWNlZCBiZWZvcmUgbW9kdWxlIGludGVyb3AgY29kZSwgYnV0IHRoYXQncyBmaW5lIHNpbmNlXG4gICAgICAvLyBpbXBvcnRzIGFyZW4ndCBhbGxvd2VkIGluIG1vZHVsZSBtb2NrIGZhY3Rvcmllcy5cbiAgICAgIHJldHVybiB0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzLm1hcCgobmFtZSkgPT4gYCR7bmFtZX0oKTtgKS5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbnkgbWV0aG9kcyBjYWxscyBvbiB0aGUgamVzdC1vYmplY3QgdGhhdCBzaG91bGQgYmUgaG9pc3RlZC5cbiAgICpcbiAgICogQWNjb3JkaW5nIHRvIHRoZSBqZXN0IGRvY3MsIGh0dHBzOi8vamVzdGpzLmlvL2RvY3MvZW4vamVzdC1vYmplY3QjamVzdG1vY2ttb2R1bGVuYW1lLWZhY3Rvcnktb3B0aW9ucyxcbiAgICogbW9jaywgdW5tb2NrLCBlbmFibGVBdXRvbW9jaywgZGlzYWJsZUF1dG9tb2NrLCBhcmUgdGhlIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgaG9pc3RlZC5cbiAgICpcbiAgICogV2UgZG8gbm90IGFwcGx5IHRoZSBzYW1lIGNoZWNrcyBvZiB0aGUgYXJndW1lbnRzIGFzIGJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IGRvZXMuXG4gICAqL1xuICAgZXh0cmFjdEhvaXN0ZWRDYWxscygpIHtcbiAgICAvLyBXZSdyZSBoYW5kbGluZyBhIGNoYWluIG9mIGNhbGxzIHdoZXJlIGBqZXN0YCBtYXkgb3IgbWF5IG5vdCBuZWVkIHRvIGJlIGluc2VydGVkIGZvciBlYWNoIGNhbGxcbiAgICAvLyBpbiB0aGUgY2hhaW4sIHNvIHJlbW92ZSB0aGUgaW5pdGlhbCBgamVzdGAgdG8gbWFrZSB0aGUgbG9vcCBpbXBsZW1lbnRhdGlvbiBjbGVhbmVyLlxuICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgLy8gVHJhY2sgc29tZSBzdGF0ZSBzbyB0aGF0IG11bHRpcGxlIG5vbi1ob2lzdGVkIGNoYWluZWQgY2FsbHMgaW4gYSByb3cga2VlcCB0aGVpciBjaGFpbmluZ1xuICAgIC8vIHN5bnRheC5cbiAgICBsZXQgZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCA9IGZhbHNlO1xuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGFpbmVkIGNhbGxzIG9uIHRoZSBqZXN0IG9iamVjdC5cbiAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczModHQuZG90LCB0dC5uYW1lLCB0dC5wYXJlbkwpKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSk7XG4gICAgICBjb25zdCBzaG91bGRIb2lzdCA9IEhPSVNURURfTUVUSE9EUy5pbmNsdWRlcyhtZXRob2ROYW1lKTtcbiAgICAgIGlmIChzaG91bGRIb2lzdCkge1xuICAgICAgICAvLyBXZSd2ZSBtYXRjaGVkIGUuZy4gYC5tb2NrKC4uLilgIG9yIHNpbWlsYXIgY2FsbC5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgaW5pdGlhbCBgLmAgd2l0aCBgZnVuY3Rpb24gX19qZXN0SG9pc3QoKXtqZXN0LmBcbiAgICAgICAgY29uc3QgaG9pc3RlZEZ1bmN0aW9uTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9famVzdEhvaXN0XCIpO1xuICAgICAgICB0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzLnB1c2goaG9pc3RlZEZ1bmN0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgZnVuY3Rpb24gJHtob2lzdGVkRnVuY3Rpb25OYW1lfSgpeyR7SkVTVF9HTE9CQUxfTkFNRX0uYCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5wYXJlblIpO1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiO31cIik7XG4gICAgICAgIGZvbGxvd3NOb25Ib2lzdGVkSmVzdENhbGwgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBub24taG9pc3RlZCBtZXRob2QsIHNvIGp1c3QgdHJhbnNmb3JtIHRoZSBjb2RlIGFzIHVzdWFsLlxuICAgICAgICBpZiAoZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBob2lzdCB0aGUgcHJldmlvdXMgY2FsbCwgd2UgY2FuIGxlYXZlIHRoZSBjb2RlIGFzLWlzIHRvIGNoYWluIG9mZiBvZiB0aGVcbiAgICAgICAgICAvLyBwcmV2aW91cyBtZXRob2QgY2FsbC4gSXQncyBpbXBvcnRhbnQgdG8gcHJlc2VydmUgdGhlIGNvZGUgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGtub3dcbiAgICAgICAgICAvLyBmb3Igc3VyZSB0aGF0IHRoZSBtZXRob2QgYWN0dWFsbHkgcmV0dXJuZWQgdGhlIGplc3Qgb2JqZWN0IGZvciBjaGFpbmluZy5cbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB3ZSBob2lzdGVkIHRoZSBwcmV2aW91cyBjYWxsLCB3ZSBrbm93IGl0IHJldHVybnMgdGhlIGplc3Qgb2JqZWN0IGJhY2ssIHNvIHdlIGluc2VydFxuICAgICAgICAgIC8vIHRoZSBpZGVudGlmaWVyIGBqZXN0YCB0byBjb250aW51ZSB0aGUgY2hhaW4uXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke0pFU1RfR0xPQkFMX05BTUV9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5wYXJlblIpO1xuICAgICAgICBmb2xsb3dzTm9uSG9pc3RlZEplc3RDYWxsID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwgImltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnVtZXJpY1NlcGFyYXRvclRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIge1xuICBjb25zdHJ1Y3RvciggdG9rZW5zKSB7XG4gICAgc3VwZXIoKTt0aGlzLnRva2VucyA9IHRva2Vuczs7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5udW0pKSB7XG4gICAgICBjb25zdCBjb2RlID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuQ29kZSgpO1xuICAgICAgaWYgKGNvZGUuaW5jbHVkZXMoXCJfXCIpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihjb2RlLnJlcGxhY2UoL18vZywgXCJcIikpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IFRyYW5zZm9ybWVyIGZyb20gXCIuL1RyYW5zZm9ybWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsQ2F0Y2hCaW5kaW5nVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIGNvbnN0cnVjdG9yKCB0b2tlbnMsICBuYW1lTWFuYWdlcikge1xuICAgIHN1cGVyKCk7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5uYW1lTWFuYWdlciA9IG5hbWVNYW5hZ2VyOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9jYXRjaCwgdHQuYnJhY2VMKSkge1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgKCR7dGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiZVwiKX0pYCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IFRyYW5zZm9ybWVyIGZyb20gXCIuL1RyYW5zZm9ybWVyXCI7XG5cbi8qKlxuICogVHJhbnNmb3JtZXIgc3VwcG9ydGluZyB0aGUgb3B0aW9uYWwgY2hhaW5pbmcgYW5kIG51bGxpc2ggY29hbGVzY2luZyBvcGVyYXRvcnMuXG4gKlxuICogVGVjaCBwbGFuIGhlcmU6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYWxhbmdwaWVyY2Uvc3VjcmFzZS93aWtpL1N1Y3Jhc2UtT3B0aW9uYWwtQ2hhaW5pbmctYW5kLU51bGxpc2gtQ29hbGVzY2luZy1UZWNobmljYWwtUGxhblxuICpcbiAqIFRoZSBwcmVmaXggYW5kIHN1ZmZpeCBjb2RlIHNuaXBwZXRzIGFyZSBoYW5kbGVkIGJ5IFRva2VuUHJvY2Vzc29yLCBhbmQgdGhpcyB0cmFuc2Zvcm1lciBoYW5kbGVzXG4gKiB0aGUgb3BlcmF0b3JzIHRoZW1zZWx2ZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIGNvbnN0cnVjdG9yKCB0b2tlbnMsICBuYW1lTWFuYWdlcikge1xuICAgIHN1cGVyKCk7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5uYW1lTWFuYWdlciA9IG5hbWVNYW5hZ2VyOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Lm51bGxpc2hDb2FsZXNjaW5nKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbdG9rZW4ubnVsbGlzaFN0YXJ0SW5kZXhdLmlzQXN5bmNPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShcIiwgYXN5bmMgKCkgPT4gKFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoXCIsICgpID0+IChcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9kZWxldGUpKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbkF0UmVsYXRpdmVJbmRleCgxKTtcbiAgICAgIGlmIChuZXh0VG9rZW4uaXNPcHRpb25hbENoYWluU3RhcnQpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgIGNvbnN0IGNoYWluU3RhcnQgPSB0b2tlbi5zdWJzY3JpcHRTdGFydEluZGV4O1xuICAgIGlmIChcbiAgICAgIGNoYWluU3RhcnQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy50b2tlbnMudG9rZW5zW2NoYWluU3RhcnRdLmlzT3B0aW9uYWxDaGFpblN0YXJ0ICYmXG4gICAgICAvLyBTdXBlciBzdWJzY3JpcHRzIGNhbid0IGJlIG9wdGlvbmFsIChzaW5jZSBzdXBlciBpcyBuZXZlciBudWxsL3VuZGVmaW5lZCksIGFuZCB0aGUgc3ludGF4XG4gICAgICAvLyByZWxpZXMgb24gdGhlIHN1YnNjcmlwdCBiZWluZyBpbnRhY3QsIHNvIGxlYXZlIHRoaXMgdG9rZW4gYWxvbmUuXG4gICAgICB0aGlzLnRva2Vucy50b2tlbkF0UmVsYXRpdmVJbmRleCgtMSkudHlwZSAhPT0gdHQuX3N1cGVyXG4gICAgKSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9cIik7XG4gICAgICBsZXQgYXJyb3dTdGFydFNuaXBwZXQ7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYWluU3RhcnQgPiAwICYmXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChjaGFpblN0YXJ0IC0gMSwgdHQuX2RlbGV0ZSkgJiZcbiAgICAgICAgdGhpcy5pc0xhc3RTdWJzY3JpcHRJbkNoYWluKClcbiAgICAgICkge1xuICAgICAgICAvLyBEZWxldGUgb3BlcmF0aW9ucyBhcmUgc3BlY2lhbDogd2UgYWxyZWFkeSByZW1vdmVkIHRoZSBkZWxldGUga2V5d29yZCwgYW5kIHRvIHN0aWxsXG4gICAgICAgIC8vIHBlcmZvcm0gYSBkZWxldGUsIHdlIG5lZWQgdG8gaW5zZXJ0IGEgZGVsZXRlIGluIHRoZSB2ZXJ5IGxhc3QgcGFydCBvZiB0aGUgY2hhaW4sIHdoaWNoXG4gICAgICAgIC8vIGluIGNvcnJlY3QgY29kZSB3aWxsIGFsd2F5cyBiZSBhIHByb3BlcnR5IGFjY2Vzcy5cbiAgICAgICAgYXJyb3dTdGFydFNuaXBwZXQgPSBgJHtwYXJhbX0gPT4gZGVsZXRlICR7cGFyYW19YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycm93U3RhcnRTbmlwcGV0ID0gYCR7cGFyYW19ID0+ICR7cGFyYW19YDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbY2hhaW5TdGFydF0uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICBhcnJvd1N0YXJ0U25pcHBldCA9IGBhc3luYyAke2Fycm93U3RhcnRTbmlwcGV0fWA7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnF1ZXN0aW9uRG90LCB0dC5wYXJlbkwpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnF1ZXN0aW9uRG90LCB0dC5sZXNzVGhhbilcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5qdXN0U2tpcHBlZFN1cGVyKCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLmJpbmQodGhpcylcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShgLCAnb3B0aW9uYWxDYWxsJywgJHthcnJvd1N0YXJ0U25pcHBldH1gKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIodHQucXVlc3Rpb25Eb3QsIHR0LmJyYWNrZXRMKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdvcHRpb25hbEFjY2VzcycsICR7YXJyb3dTdGFydFNuaXBwZXR9YCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnF1ZXN0aW9uRG90KSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdvcHRpb25hbEFjY2VzcycsICR7YXJyb3dTdGFydFNuaXBwZXR9LmApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5kb3QpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoYCwgJ2FjY2VzcycsICR7YXJyb3dTdGFydFNuaXBwZXR9LmApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5icmFja2V0TCkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShgLCAnYWNjZXNzJywgJHthcnJvd1N0YXJ0U25pcHBldH1bYCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnBhcmVuTCkpIHtcbiAgICAgICAgaWYgKHRoaXMuanVzdFNraXBwZWRTdXBlcigpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIi5iaW5kKHRoaXMpXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoYCwgJ2NhbGwnLCAke2Fycm93U3RhcnRTbmlwcGV0fShgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgc3Vic2NyaXB0IG9wZXJhdG9yIGluIG9wdGlvbmFsIGNoYWluLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHRva2VuIGlzIHRoZSBsYXN0IG9mIGl0cyBjaGFpbiwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgaXQncyBlbGlnaWJsZVxuICAgKiB0byBoYXZlIGEgZGVsZXRlIG9wIGluc2VydGVkLlxuICAgKlxuICAgKiBXZSBjYW4gZG8gdGhpcyBieSB3YWxraW5nIGZvcndhcmQgdW50aWwgd2UgZGV0ZXJtaW5lIG9uZSB3YXkgb3IgYW5vdGhlci4gRWFjaFxuICAgKiBpc09wdGlvbmFsQ2hhaW5TdGFydCB0b2tlbiBtdXN0IGJlIHBhaXJlZCB3aXRoIGV4YWN0bHkgb25lIGlzT3B0aW9uYWxDaGFpbkVuZCB0b2tlbiBhZnRlciBpdCBpblxuICAgKiBhIG5lc3Rpbmcgd2F5LCBzbyB3ZSBjYW4gdHJhY2sgZGVwdGggYW5kIHdhbGsgdG8gdGhlIGVuZCBvZiB0aGUgY2hhaW4gKHRoZSBwb2ludCB3aGVyZSB0aGVcbiAgICogZGVwdGggZ29lcyBuZWdhdGl2ZSkgYW5kIHNlZSBpZiBhbnkgb3RoZXIgc3Vic2NyaXB0IHRva2VuIGlzIGFmdGVyIHVzIGluIHRoZSBjaGFpbi5cbiAgICovXG4gIGlzTGFzdFN1YnNjcmlwdEluQ2hhaW4oKSB7XG4gICAgbGV0IGRlcHRoID0gMDtcbiAgICBmb3IgKGxldCBpID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxOyA7IGkrKykge1xuICAgICAgaWYgKGkgPj0gdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hpbGUgZmluZGluZyB0aGUgZW5kIG9mIHRoZSBhY2Nlc3MgY2hhaW4uXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1tpXS5pc09wdGlvbmFsQ2hhaW5TdGFydCkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy50b2tlbnNbaV0uaXNPcHRpb25hbENoYWluRW5kKSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICB9XG4gICAgICBpZiAoZGVwdGggPCAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHN1YnNjcmlwdCB0b2tlbiBpcyBhIGxhdGVyIG9uZSBpbiB0aGUgc2FtZSBjaGFpbi5cbiAgICAgIGlmIChkZXB0aCA9PT0gMCAmJiB0aGlzLnRva2Vucy50b2tlbnNbaV0uc3Vic2NyaXB0U3RhcnRJbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHdlIGFyZSB0aGUgb3Blbi1wYXJlbiBpbiBhbiBleHByZXNzaW9uIGxpa2Ugc3VwZXIuYSgpPy5iLlxuICAgKlxuICAgKiBXZSBjYW4gZG8gdGhpcyBieSB3YWxraW5nIGJhY2t3YXJkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHN1YnNjcmlwdC4gSWYgdGhhdCBzdWJzY3JpcHQgd2FzXG4gICAqIHByZWNlZGVkIGJ5IGEgc3VwZXIsIHRoZW4gd2UgbXVzdCBiZSB0aGUgc3Vic2NyaXB0IGFmdGVyIGl0LCBzbyBpZiB0aGlzIGlzIGEgY2FsbCBleHByZXNzaW9uLFxuICAgKiB3ZSdsbCBuZWVkIHRvIGF0dGFjaCB0aGUgcmlnaHQgY29udGV4dC5cbiAgICovXG4gIGp1c3RTa2lwcGVkU3VwZXIoKSB7XG4gICAgbGV0IGRlcHRoID0gMDtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSAtIDE7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiUmVhY2hlZCB0aGUgc3RhcnQgb2YgdGhlIGNvZGUgd2hpbGUgZmluZGluZyB0aGUgc3RhcnQgb2YgdGhlIGFjY2VzcyBjaGFpbi5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleF0uaXNPcHRpb25hbENoYWluRW5kKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgICBpZiAoZGVwdGggPCAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBzdWJzY3JpcHQgdG9rZW4gaXMgYSBsYXRlciBvbmUgaW4gdGhlIHNhbWUgY2hhaW4uXG4gICAgICBpZiAoZGVwdGggPT09IDAgJiYgdGhpcy50b2tlbnMudG9rZW5zW2luZGV4XS5zdWJzY3JpcHRTdGFydEluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDFdLnR5cGUgPT09IHR0Ll9zdXBlcjtcbiAgICAgIH1cbiAgICAgIGluZGV4LS07XG4gICAgfVxuICB9XG59XG4iLCAiXG5cbmltcG9ydCB7SWRlbnRpZmllclJvbGV9IGZyb20gXCIuLi9wYXJzZXIvdG9rZW5pemVyXCI7XG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWRpc3BsYXktbmFtZSwgd2hpY2ggYWRkcyBhXG4gKiBkaXNwbGF5IG5hbWUgdG8gdXNhZ2VzIG9mIFJlYWN0LmNyZWF0ZUNsYXNzIGFuZCBjcmVhdGVSZWFjdENsYXNzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdERpc3BsYXlOYW1lVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICBvcHRpb25zLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaW1wb3J0UHJvY2Vzc29yID0gaW1wb3J0UHJvY2Vzc29yO3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7O1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgaWYgKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCkgPT09IFwiY3JlYXRlUmVhY3RDbGFzc1wiKSB7XG4gICAgICBjb25zdCBuZXdOYW1lID1cbiAgICAgICAgdGhpcy5pbXBvcnRQcm9jZXNzb3IgJiYgdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KFwiY3JlYXRlUmVhY3RDbGFzc1wiKTtcbiAgICAgIGlmIChuZXdOYW1lKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgKDAsICR7bmV3TmFtZX0pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJ5UHJvY2Vzc0NyZWF0ZUNsYXNzQ2FsbChzdGFydEluZGV4KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5uYW1lLCB0dC5kb3QsIHR0Lm5hbWUpICYmXG4gICAgICB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpID09PSBcIlJlYWN0XCIgJiZcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDIpID09PSBcImNyZWF0ZUNsYXNzXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSB0aGlzLmltcG9ydFByb2Nlc3NvclxuICAgICAgICA/IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChcIlJlYWN0XCIpIHx8IFwiUmVhY3RcIlxuICAgICAgICA6IFwiUmVhY3RcIjtcbiAgICAgIGlmIChuZXdOYW1lKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihuZXdOYW1lKTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJ5UHJvY2Vzc0NyZWF0ZUNsYXNzQ2FsbChzdGFydEluZGV4KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgdG9rZW4gcG9zaXRpb24gYXQgdGhlIG9wZW4tcGFyZW4uXG4gICAqL1xuICAgdHJ5UHJvY2Vzc0NyZWF0ZUNsYXNzQ2FsbChzdGFydEluZGV4KSB7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSB0aGlzLmZpbmREaXNwbGF5TmFtZShzdGFydEluZGV4KTtcbiAgICBpZiAoIWRpc3BsYXlOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xhc3NOZWVkc0Rpc3BsYXlOYW1lKCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKHR0LnBhcmVuTCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZUwpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgZGlzcGxheU5hbWU6ICcke2Rpc3BsYXlOYW1lfScsYCk7XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZVIpO1xuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQucGFyZW5SKTtcbiAgICB9XG4gIH1cblxuICAgZmluZERpc3BsYXlOYW1lKHN0YXJ0SW5kZXgpIHtcbiAgICBpZiAoc3RhcnRJbmRleCA8IDIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczJBdEluZGV4KHN0YXJ0SW5kZXggLSAyLCB0dC5uYW1lLCB0dC5lcSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gYXNzaWdubWVudCAob3IgZGVjbGFyYXRpb24pIGFuZCB0aGUgTEhTIGlzIGVpdGhlciBhbiBpZGVudGlmaWVyIG9yIGEgbWVtYmVyXG4gICAgICAvLyBleHByZXNzaW9uIGVuZGluZyBpbiBhbiBpZGVudGlmaWVyLCBzbyB1c2UgdGhhdCBpZGVudGlmaWVyIG5hbWUuXG4gICAgICByZXR1cm4gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHN0YXJ0SW5kZXggLSAyKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc3RhcnRJbmRleCA+PSAyICYmXG4gICAgICB0aGlzLnRva2Vucy50b2tlbnNbc3RhcnRJbmRleCAtIDJdLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RLZXlcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gb2JqZWN0IGxpdGVyYWwgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHN0YXJ0SW5kZXggLSAyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChzdGFydEluZGV4IC0gMiwgdHQuX2V4cG9ydCwgdHQuX2RlZmF1bHQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREaXNwbGF5TmFtZUZyb21GaWxlbmFtZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gICBnZXREaXNwbGF5TmFtZUZyb21GaWxlbmFtZSgpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMub3B0aW9ucy5maWxlUGF0aCB8fCBcInVua25vd25cIjtcbiAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBmaWxlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGRvdEluZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoXCIuXCIpO1xuICAgIGNvbnN0IGJhc2VGaWxlbmFtZSA9IGRvdEluZGV4ID09PSAtMSA/IGZpbGVuYW1lIDogZmlsZW5hbWUuc2xpY2UoMCwgZG90SW5kZXgpO1xuICAgIGlmIChiYXNlRmlsZW5hbWUgPT09IFwiaW5kZXhcIiAmJiBwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDJdKSB7XG4gICAgICByZXR1cm4gcGF0aFNlZ21lbnRzW3BhdGhTZWdtZW50cy5sZW5ndGggLSAyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJhc2VGaWxlbmFtZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2Ugb25seSB3YW50IHRvIGFkZCBhIGRpc3BsYXkgbmFtZSB3aGVuIHRoaXMgaXMgYSBmdW5jdGlvbiBjYWxsIGNvbnRhaW5pbmdcbiAgICogb25lIGFyZ3VtZW50LCB3aGljaCBpcyBhbiBvYmplY3QgbGl0ZXJhbCB3aXRob3V0IGBkaXNwbGF5TmFtZWAgYXMgYW5cbiAgICogZXhpc3Rpbmcga2V5LlxuICAgKi9cbiAgIGNsYXNzTmVlZHNEaXNwbGF5TmFtZSgpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMyKHR0LnBhcmVuTCwgdHQuYnJhY2VMKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUaGUgYmxvY2sgc3RhcnRzIG9uIHRoZSB7LCBhbmQgd2UgZXhwZWN0IGFueSBkaXNwbGF5TmFtZSBrZXkgdG8gYmUgaW5cbiAgICAvLyB0aGF0IGNvbnRleHQuIFdlIG5lZWQgdG8gaWdub3JlIG90aGVyIG90aGVyIGNvbnRleHRzIHRvIGF2b2lkIG1hdGNoaW5nXG4gICAgLy8gbmVzdGVkIGRpc3BsYXlOYW1lIGtleXMuXG4gICAgY29uc3Qgb2JqZWN0U3RhcnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBjb25zdCBvYmplY3RDb250ZXh0SWQgPSB0aGlzLnRva2Vucy50b2tlbnNbb2JqZWN0U3RhcnRJbmRleF0uY29udGV4dElkO1xuICAgIGlmIChvYmplY3RDb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9uLW51bGwgY29udGV4dCBJRCBvbiBvYmplY3Qgb3Blbi1icmFjZS5cIik7XG4gICAgfVxuXG4gICAgZm9yICg7IGluZGV4IDwgdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdO1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHR0LmJyYWNlUiAmJiB0b2tlbi5jb250ZXh0SWQgPT09IG9iamVjdENvbnRleHRJZCkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgoaW5kZXgpID09PSBcImRpc3BsYXlOYW1lXCIgJiZcbiAgICAgICAgdGhpcy50b2tlbnMudG9rZW5zW2luZGV4XS5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0S2V5ICYmXG4gICAgICAgIHRva2VuLmNvbnRleHRJZCA9PT0gb2JqZWN0Q29udGV4dElkXG4gICAgICApIHtcbiAgICAgICAgLy8gV2UgZm91bmQgYSBkaXNwbGF5TmFtZSBrZXksIHNvIGJhaWwgb3V0LlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHByb2Nlc3NpbmcgUmVhY3QgY2xhc3MuXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciwgd2Uga25vdyB3ZSBoYXZlIGNyZWF0ZUNsYXNzIHdpdGggYW4gb2JqZWN0IHdpdGggbm9cbiAgICAvLyBkaXNwbGF5IG5hbWUsIHNvIHdlIHdhbnQgdG8gcHJvY2VlZCBhcyBsb25nIGFzIHRoYXQgd2FzIHRoZSBvbmx5IGFyZ3VtZW50LlxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LnBhcmVuUikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgdHQuY29tbWEsIHR0LnBhcmVuUilcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtJZGVudGlmaWVyUm9sZSwgaXNUb3BMZXZlbERlY2xhcmF0aW9ufSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplclwiO1xuXG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSBcIi4vVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHtcbiAgIF9faW5pdCgpIHt0aGlzLmV4dHJhY3RlZERlZmF1bHRFeHBvcnROYW1lID0gbnVsbH1cblxuICBjb25zdHJ1Y3RvciggdG9rZW5zLCAgZmlsZVBhdGgpIHtcbiAgICBzdXBlcigpO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtSZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTs7XG4gIH1cblxuICBzZXRFeHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZShleHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZSkge1xuICAgIHRoaXMuZXh0cmFjdGVkRGVmYXVsdEV4cG9ydE5hbWUgPSBleHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZTtcbiAgfVxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbnRlck1vZHVsZSA9IHJlcXVpcmUoJ3JlYWN0LWhvdC1sb2FkZXInKS5lbnRlck1vZHVsZTtcbiAgICAgICAgZW50ZXJNb2R1bGUgJiYgZW50ZXJNb2R1bGUobW9kdWxlKTtcbiAgICAgIH0pKCk7YFxuICAgICAgLnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gICAgICAudHJpbSgpO1xuICB9XG5cbiAgZ2V0U3VmZml4Q29kZSgpIHtcbiAgICBjb25zdCB0b3BMZXZlbE5hbWVzID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMudG9rZW5zKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0b2tlbi5pc1R5cGUgJiZcbiAgICAgICAgaXNUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKSAmJlxuICAgICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSAhPT0gSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb25cbiAgICAgICkge1xuICAgICAgICB0b3BMZXZlbE5hbWVzLmFkZCh0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzVG9SZWdpc3RlciA9IEFycmF5LmZyb20odG9wTGV2ZWxOYW1lcykubWFwKChuYW1lKSA9PiAoe1xuICAgICAgdmFyaWFibGVOYW1lOiBuYW1lLFxuICAgICAgdW5pcXVlTG9jYWxOYW1lOiBuYW1lLFxuICAgIH0pKTtcbiAgICBpZiAodGhpcy5leHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZSkge1xuICAgICAgbmFtZXNUb1JlZ2lzdGVyLnB1c2goe1xuICAgICAgICB2YXJpYWJsZU5hbWU6IHRoaXMuZXh0cmFjdGVkRGVmYXVsdEV4cG9ydE5hbWUsXG4gICAgICAgIHVuaXF1ZUxvY2FsTmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGBcbjsoZnVuY3Rpb24gKCkge1xuICB2YXIgcmVhY3RIb3RMb2FkZXIgPSByZXF1aXJlKCdyZWFjdC1ob3QtbG9hZGVyJykuZGVmYXVsdDtcbiAgdmFyIGxlYXZlTW9kdWxlID0gcmVxdWlyZSgncmVhY3QtaG90LWxvYWRlcicpLmxlYXZlTW9kdWxlO1xuICBpZiAoIXJlYWN0SG90TG9hZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4ke25hbWVzVG9SZWdpc3RlclxuICAubWFwKFxuICAgICh7dmFyaWFibGVOYW1lLCB1bmlxdWVMb2NhbE5hbWV9KSA9PlxuICAgICAgYCAgcmVhY3RIb3RMb2FkZXIucmVnaXN0ZXIoJHt2YXJpYWJsZU5hbWV9LCBcIiR7dW5pcXVlTG9jYWxOYW1lfVwiLCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICB0aGlzLmZpbGVQYXRoIHx8IFwiXCIsXG4gICAgICApfSk7YCxcbiAgKVxuICAuam9pbihcIlxcblwiKX1cbiAgbGVhdmVNb2R1bGUobW9kdWxlKTtcbn0pKCk7YDtcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHtJU19JREVOVElGSUVSX0NIQVIsIElTX0lERU5USUZJRVJfU1RBUlR9IGZyb20gXCIuLi9wYXJzZXIvdXRpbC9pZGVudGlmaWVyXCI7XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0xleGljYWxfZ3JhbW1hclxuLy8gSGFyZC1jb2RlIGEgbGlzdCBvZiByZXNlcnZlZCB3b3JkcyByYXRoZXIgdGhhbiB0cnlpbmcgdG8gdXNlIGtleXdvcmRzIG9yIGNvbnRleHR1YWwga2V5d29yZHNcbi8vIGZyb20gdGhlIHBhcnNlciwgc2luY2UgY3VycmVudGx5IHRoZXJlIGFyZSB2YXJpb3VzIGV4Y2VwdGlvbnMsIGxpa2UgYHBhY2thZ2VgIGJlaW5nIHJlc2VydmVkXG4vLyBidXQgdW51c2VkIGFuZCB2YXJpb3VzIGNvbnRleHR1YWwga2V5d29yZHMgYmVpbmcgcmVzZXJ2ZWQuIE5vdGUgdGhhdCB3ZSBhc3N1bWUgdGhhdCBhbGwgY29kZVxuLy8gY29tcGlsZWQgYnkgU3VjcmFzZSBpcyBpbiBhIG1vZHVsZSwgc28gc3RyaWN0IG1vZGUgd29yZHMgYW5kIGF3YWl0IGFyZSBhbGwgY29uc2lkZXJlZCByZXNlcnZlZFxuLy8gaGVyZS5cbmNvbnN0IFJFU0VSVkVEX1dPUkRTID0gbmV3IFNldChbXG4gIC8vIFJlc2VydmVkIGtleXdvcmRzIGFzIG9mIEVDTUFTY3JpcHQgMjAxNVxuICBcImJyZWFrXCIsXG4gIFwiY2FzZVwiLFxuICBcImNhdGNoXCIsXG4gIFwiY2xhc3NcIixcbiAgXCJjb25zdFwiLFxuICBcImNvbnRpbnVlXCIsXG4gIFwiZGVidWdnZXJcIixcbiAgXCJkZWZhdWx0XCIsXG4gIFwiZGVsZXRlXCIsXG4gIFwiZG9cIixcbiAgXCJlbHNlXCIsXG4gIFwiZXhwb3J0XCIsXG4gIFwiZXh0ZW5kc1wiLFxuICBcImZpbmFsbHlcIixcbiAgXCJmb3JcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcImlmXCIsXG4gIFwiaW1wb3J0XCIsXG4gIFwiaW5cIixcbiAgXCJpbnN0YW5jZW9mXCIsXG4gIFwibmV3XCIsXG4gIFwicmV0dXJuXCIsXG4gIFwic3VwZXJcIixcbiAgXCJzd2l0Y2hcIixcbiAgXCJ0aGlzXCIsXG4gIFwidGhyb3dcIixcbiAgXCJ0cnlcIixcbiAgXCJ0eXBlb2ZcIixcbiAgXCJ2YXJcIixcbiAgXCJ2b2lkXCIsXG4gIFwid2hpbGVcIixcbiAgXCJ3aXRoXCIsXG4gIFwieWllbGRcIixcbiAgLy8gRnV0dXJlIHJlc2VydmVkIGtleXdvcmRzXG4gIFwiZW51bVwiLFxuICBcImltcGxlbWVudHNcIixcbiAgXCJpbnRlcmZhY2VcIixcbiAgXCJsZXRcIixcbiAgXCJwYWNrYWdlXCIsXG4gIFwicHJpdmF0ZVwiLFxuICBcInByb3RlY3RlZFwiLFxuICBcInB1YmxpY1wiLFxuICBcInN0YXRpY1wiLFxuICBcImF3YWl0XCIsXG4gIC8vIExpdGVyYWxzIHRoYXQgY2Fubm90IGJlIHVzZWQgYXMgaWRlbnRpZmllcnNcbiAgXCJmYWxzZVwiLFxuICBcIm51bGxcIixcbiAgXCJ0cnVlXCIsXG5dKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIG5hbWUgaXMgYSBsZWdhbCB2YXJpYWJsZSBuYW1lLlxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIHdoZW4gdHJhbnNmb3JtaW5nIFR5cGVTY3JpcHQgZW51bXM7IGlmIGFuIGVudW0ga2V5IGlzIGEgdmFsaWRcbiAqIHZhcmlhYmxlIG5hbWUsIGl0IG1pZ2h0IGJlIHJlZmVyZW5jZWQgbGF0ZXIgaW4gdGhlIGVudW0sIHNvIHdlIG5lZWQgdG9cbiAqIGRlY2xhcmUgYSB2YXJpYWJsZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJZGVudGlmaWVyKG5hbWUpIHtcbiAgaWYgKG5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghSVNfSURFTlRJRklFUl9TVEFSVFtuYW1lLmNoYXJDb2RlQXQoMCldKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghSVNfSURFTlRJRklFUl9DSEFSW25hbWUuY2hhckNvZGVBdChpKV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICFSRVNFUlZFRF9XT1JEUy5oYXMobmFtZSk7XG59XG4iLCAiXG5pbXBvcnQge1Rva2VuVHlwZSBhcyB0dH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuaW1wb3J0IGlzSWRlbnRpZmllciBmcm9tIFwiLi4vdXRpbC9pc0lkZW50aWZpZXJcIjtcblxuaW1wb3J0IFRyYW5zZm9ybWVyIGZyb20gXCIuL1RyYW5zZm9ybWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFR5cGVTY3JpcHRUcmFuc2Zvcm1lciBleHRlbmRzIFRyYW5zZm9ybWVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZCA9IGlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQ7O1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVBcnJvd1BhcmFtRW5kKCkgfHxcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NQb3NzaWJsZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtcygpIHx8XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVUeXBlUmFuZ2UoKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9wdWJsaWMpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fcHJvdGVjdGVkKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuX3ByaXZhdGUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fYWJzdHJhY3QpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fcmVhZG9ubHkpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fb3ZlcnJpZGUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5ub25OdWxsQXNzZXJ0aW9uKVxuICAgICkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9lbnVtKSB8fCB0aGlzLnRva2Vucy5tYXRjaGVzMih0dC5fY29uc3QsIHR0Ll9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9leHBvcnQsIHR0Ll9lbnVtKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczModHQuX2V4cG9ydCwgdHQuX2NvbnN0LCB0dC5fZW51bSlcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0VudW0odHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvY2Vzc0VudW0oaXNFeHBvcnQgPSBmYWxzZSkge1xuICAgIC8vIFdlIG1pZ2h0IGhhdmUgXCJleHBvcnQgY29uc3QgZW51bVwiLCBzbyBqdXN0IHJlbW92ZSBhbGwgcmVsZXZhbnQgdG9rZW5zLlxuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIHdoaWxlICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fY29uc3QpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9lbnVtKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgZW51bU5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgaWYgKGlzRXhwb3J0ICYmICF0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCJleHBvcnQgXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGB2YXIgJHtlbnVtTmFtZX07IChmdW5jdGlvbiAoJHtlbnVtTmFtZX0pYCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VMKTtcbiAgICB0aGlzLnByb2Nlc3NFbnVtQm9keShlbnVtTmFtZSk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VSKTtcbiAgICBpZiAoaXNFeHBvcnQgJiYgdGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGApKCR7ZW51bU5hbWV9IHx8IChleHBvcnRzLiR7ZW51bU5hbWV9ID0gJHtlbnVtTmFtZX0gPSB7fSkpO2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGApKCR7ZW51bU5hbWV9IHx8ICgke2VudW1OYW1lfSA9IHt9KSk7YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhbiBlbnVtIGludG8gZXF1aXZhbGVudCBKUy4gVGhpcyBoYXMgY29tcGxleGl0eSBpbiBhIGZldyBwbGFjZXM6XG4gICAqIC0gVFMgYWxsb3dzIHN0cmluZyBlbnVtcywgbnVtZXJpYyBlbnVtcywgYW5kIGEgbWl4IG9mIHRoZSB0d28gc3R5bGVzIHdpdGhpbiBhbiBlbnVtLlxuICAgKiAtIEVudW0ga2V5cyBhcmUgYWxsb3dlZCB0byBiZSByZWZlcmVuY2VkIGluIGxhdGVyIGVudW0gdmFsdWVzLlxuICAgKiAtIEVudW0ga2V5cyBhcmUgYWxsb3dlZCB0byBiZSBzdHJpbmdzLlxuICAgKiAtIFdoZW4gZW51bSB2YWx1ZXMgYXJlIG9taXR0ZWQsIHRoZXkgc2hvdWxkIGZvbGxvdyBhbiBhdXRvLWluY3JlbWVudCBiZWhhdmlvci5cbiAgICovXG4gIHByb2Nlc3NFbnVtQm9keShlbnVtTmFtZSkge1xuICAgIC8vIENvZGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlIHByZXZpb3VzIGVudW0gbWVtYmVyLCBvciBudWxsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgLy8gZW51bSBtZW1iZXIuXG4gICAgbGV0IHByZXZpb3VzVmFsdWVDb2RlID0gbnVsbDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zdCB7bmFtZVN0cmluZ0NvZGUsIHZhcmlhYmxlTmFtZX0gPSB0aGlzLmV4dHJhY3RFbnVtS2V5SW5mbyh0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKSk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyh0dC5lcSwgdHQuc3RyaW5nLCB0dC5jb21tYSkgfHxcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczModHQuZXEsIHR0LnN0cmluZywgdHQuYnJhY2VSKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmluZ0xpdGVyYWxFbnVtTWVtYmVyKGVudW1OYW1lLCBuYW1lU3RyaW5nQ29kZSwgdmFyaWFibGVOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEodHQuZXEpKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0V4cGxpY2l0VmFsdWVFbnVtTWVtYmVyKGVudW1OYW1lLCBuYW1lU3RyaW5nQ29kZSwgdmFyaWFibGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0ltcGxpY2l0VmFsdWVFbnVtTWVtYmVyKFxuICAgICAgICAgIGVudW1OYW1lLFxuICAgICAgICAgIG5hbWVTdHJpbmdDb2RlLFxuICAgICAgICAgIHZhcmlhYmxlTmFtZSxcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlQ29kZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5jb21tYSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIHByZXZpb3VzVmFsdWVDb2RlID0gdmFyaWFibGVOYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNWYWx1ZUNvZGUgPSBgJHtlbnVtTmFtZX1bJHtuYW1lU3RyaW5nQ29kZX1dYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IG5hbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBlbnVtIGtleSwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGljaCBjb2RlIHRvIGVtaXRcbiAgICogYW5kIHdoZXRoZXIgd2Ugc2hvdWxkIGRlY2xhcmUgYSB2YXJpYWJsZSBhcyBwYXJ0IG9mIHRoaXMgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIFNvbWUgY2FzZXMgdG8ga2VlcCBpbiBtaW5kOlxuICAgKiAtIEVudW0ga2V5cyBjYW4gYmUgaW1wbGljaXRseSByZWZlcmVuY2VkIGxhdGVyLCBlLmcuIGBYID0gMSwgWSA9IFhgLiBJbiBTdWNyYXNlLCB3ZSBpbXBsZW1lbnRcbiAgICogICB0aGlzIGJ5IGRlY2xhcmluZyBhIHZhcmlhYmxlIGBYYCBzbyB0aGF0IGxhdGVyIGV4cHJlc3Npb25zIGNhbiB1c2UgaXQuXG4gICAqIC0gSW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGlkZW50aWZpZXIga2V5IHN5bnRheCwgZW51bSBrZXlzIGFyZSBhbGxvd2VkIHRvIGJlIHN0cmluZyBsaXRlcmFscyxcbiAgICogICBlLmcuIGBcImhlbGxvIHdvcmxkXCIgPSAzLGAuIFRlbXBsYXRlIGxpdGVyYWwgc3ludGF4IGlzIE5PVCBhbGxvd2VkLlxuICAgKiAtIEV2ZW4gaWYgdGhlIGVudW0ga2V5IGlzIGRlZmluZWQgYXMgYSBzdHJpbmcgbGl0ZXJhbCwgaXQgbWF5IHN0aWxsIGJlIHJlZmVyZW5jZWQgYnkgaWRlbnRpZmllclxuICAgKiAgIGxhdGVyLCBlLmcuIGBcIlhcIiA9IDEsIFkgPSBYYC4gVGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZGV0ZWN0IHdoZXRoZXIgb3Igbm90IGEgc3RyaW5nXG4gICAqICAgbGl0ZXJhbCBpcyBpZGVudGlmaWVyLWxpa2UgYW5kIGVtaXQgYSB2YXJpYWJsZSBpZiBzbywgZXZlbiBpZiB0aGUgZGVjbGFyYXRpb24gZGlkIG5vdCB1c2UgYW5cbiAgICogICBpZGVudGlmaWVyLlxuICAgKiAtIFJlc2VydmVkIGtleXdvcmRzIGxpa2UgYGJyZWFrYCBhcmUgdmFsaWQgZW51bSBrZXlzLCBidXQgYXJlIG5vdCB2YWxpZCB0byBiZSByZWZlcmVuY2VkIGxhdGVyXG4gICAqICAgYW5kIHdvdWxkIGJlIGEgc3ludGF4IGVycm9yIGlmIHdlIGVtaXR0ZWQgYSB2YXJpYWJsZSwgc28gd2UgbmVlZCB0byBza2lwIHRoZSB2YXJpYWJsZVxuICAgKiAgIGRlY2xhcmF0aW9uIGluIHRob3NlIGNhc2VzLlxuICAgKlxuICAgKiBUaGUgdmFyaWFibGVOYW1lIHJldHVybiB2YWx1ZSBjYXB0dXJlcyB0aGVzZSBudWFuY2VzOiBpZiBub24tbnVsbCwgd2UgY2FuIGFuZCBtdXN0IGVtaXQgYVxuICAgKiB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgYW5kIGlmIG51bGwsIHdlIGNhbid0IGFuZCBzaG91bGRuJ3QuXG4gICAqL1xuICBleHRyYWN0RW51bUtleUluZm8obmFtZVRva2VuKSB7XG4gICAgaWYgKG5hbWVUb2tlbi50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbihuYW1lVG9rZW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZVN0cmluZ0NvZGU6IGBcIiR7bmFtZX1cImAsXG4gICAgICAgIHZhcmlhYmxlTmFtZTogaXNJZGVudGlmaWVyKG5hbWUpID8gbmFtZSA6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobmFtZVRva2VuLnR5cGUgPT09IHR0LnN0cmluZykge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlRm9yVG9rZW4obmFtZVRva2VuKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWVTdHJpbmdDb2RlOiB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKG5hbWVUb2tlbi5zdGFydCwgbmFtZVRva2VuLmVuZCksXG4gICAgICAgIHZhcmlhYmxlTmFtZTogaXNJZGVudGlmaWVyKG5hbWUpID8gbmFtZSA6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBuYW1lIG9yIHN0cmluZyBhdCBiZWdpbm5pbmcgb2YgZW51bSBlbGVtZW50LlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGVudW0gbWVtYmVyIHdoZXJlIHRoZSBSSFMgaXMganVzdCBhIHN0cmluZyBsaXRlcmFsIChub3Qgb21pdHRlZCwgbm90IGEgbnVtYmVyLCBhbmRcbiAgICogbm90IGEgY29tcGxleCBleHByZXNzaW9uKS4gVGhpcyBpcyB0aGUgdHlwaWNhbCBmb3JtIGZvciBUUyBzdHJpbmcgZW51bXMsIGFuZCBpbiB0aGlzIGNhc2UsIHdlXG4gICAqIGRvICpub3QqIGNyZWF0ZSBhIHJldmVyc2UgbWFwcGluZy5cbiAgICpcbiAgICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgZGVsZXRpbmcgdGhlIGtleSB0b2tlbiwgd2hlbiB0aGUgdG9rZW4gcHJvY2Vzc29yIGlzIGF0IHRoZSBlcXVhbHMgc2lnbi5cbiAgICpcbiAgICogRXhhbXBsZSAxOlxuICAgKiBzb21lS2V5ID0gXCJzb21lIHZhbHVlXCJcbiAgICogLT5cbiAgICogY29uc3Qgc29tZUtleSA9IFwic29tZSB2YWx1ZVwiOyBNeUVudW1bXCJzb21lS2V5XCJdID0gc29tZUtleTtcbiAgICpcbiAgICogRXhhbXBsZSAyOlxuICAgKiBcInNvbWUga2V5XCIgPSBcInNvbWUgdmFsdWVcIlxuICAgKiAtPlxuICAgKiBNeUVudW1bXCJzb21lIGtleVwiXSA9IFwic29tZSB2YWx1ZVwiO1xuICAgKi9cbiAgcHJvY2Vzc1N0cmluZ0xpdGVyYWxFbnVtTWVtYmVyKFxuICAgIGVudW1OYW1lLFxuICAgIG5hbWVTdHJpbmdDb2RlLFxuICAgIHZhcmlhYmxlTmFtZSxcbiAgKSB7XG4gICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdCAke3ZhcmlhYmxlTmFtZX1gKTtcbiAgICAgIC8vID1cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgLy8gdmFsdWUgc3RyaW5nXG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYDsgJHtlbnVtTmFtZX1bJHtuYW1lU3RyaW5nQ29kZX1dID0gJHt2YXJpYWJsZU5hbWV9O2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAke2VudW1OYW1lfVske25hbWVTdHJpbmdDb2RlfV1gKTtcbiAgICAgIC8vID1cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgLy8gdmFsdWUgc3RyaW5nXG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCI7XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gZW51bSBtZW1iZXIgaW5pdGlhbGl6ZWQgd2l0aCBhbiBleHByZXNzaW9uIG9uIHRoZSByaWdodC1oYW5kIHNpZGUgKG90aGVyIHRoYW4gYVxuICAgKiBzdHJpbmcgbGl0ZXJhbCkuIEluIHRoZXNlIGNhc2VzLCB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBleHByZXNzaW9uIGFuZCBlbWl0IGNvZGUgdGhhdCBzZXRzIHVwXG4gICAqIGEgcmV2ZXJzZSBtYXBwaW5nLlxuICAgKlxuICAgKiBUaGUgVHlwZVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG9wZXJhdGlvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZXhwcmVzc2lvbnMgdGhhdCBjYW4gYmVcbiAgICogXCJjb25zdGFudCBmb2xkZWRcIiBhdCBjb21waWxlIHRpbWUgKGkuZS4gY29uc2lzdCBvZiBudW1iZXIgbGl0ZXJhbHMgYW5kIHNpbXBsZSBtYXRoIG9wZXJhdGlvbnNcbiAgICogb24gdGhvc2UgbnVtYmVycykgYW5kIG9uZXMgdGhhdCBhcmUgZHluYW1pYy4gRm9yIGNvbnN0YW50IGV4cHJlc3Npb25zLCBpdCBlbWl0cyB0aGUgcmVzb2x2ZWRcbiAgICogbnVtZXJpYyB2YWx1ZSwgYW5kIGF1dG8taW5jcmVtZW50aW5nIGlzIG9ubHkgYWxsb3dlZCBpbiB0aGF0IGNhc2UuIEV2YWx1YXRpbmcgZXhwcmVzc2lvbnMgYXRcbiAgICogY29tcGlsZSB0aW1lIHdvdWxkIGFkZCBzaWduaWZpY2FudCBjb21wbGV4aXR5IHRvIFN1Y3Jhc2UsIHNvIFN1Y3Jhc2UgaW5zdGVhZCBsZWF2ZXMgdGhlXG4gICAqIGV4cHJlc3Npb24gYXMtaXMsIGFuZCB3aWxsIGxhdGVyIGVtaXQgc29tZXRoaW5nIGxpa2UgYE15RW51bVtcInByZXZpb3VzS2V5XCJdICsgMWAgdG8gaW1wbGVtZW50XG4gICAqIGF1dG8taW5jcmVtZW50aW5nLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBkZWxldGluZyB0aGUga2V5IHRva2VuLCB3aGVuIHRoZSB0b2tlbiBwcm9jZXNzb3IgaXMgYXQgdGhlIGVxdWFscyBzaWduLlxuICAgKlxuICAgKiBFeGFtcGxlIDE6XG4gICAqIHNvbWVLZXkgPSAxICsgMVxuICAgKiAtPlxuICAgKiBjb25zdCBzb21lS2V5ID0gMSArIDE7IE15RW51bVtNeUVudW1bXCJzb21lS2V5XCJdID0gc29tZUtleV0gPSBcInNvbWVLZXlcIjtcbiAgICpcbiAgICogRXhhbXBsZSAyOlxuICAgKiBcInNvbWUga2V5XCIgPSAxICsgMVxuICAgKiAtPlxuICAgKiBNeUVudW1bTXlFbnVtW1wic29tZSBrZXlcIl0gPSAxICsgMV0gPSBcInNvbWUga2V5XCI7XG4gICAqL1xuICBwcm9jZXNzRXhwbGljaXRWYWx1ZUVudW1NZW1iZXIoXG4gICAgZW51bU5hbWUsXG4gICAgbmFtZVN0cmluZ0NvZGUsXG4gICAgdmFyaWFibGVOYW1lLFxuICApIHtcbiAgICBjb25zdCByaHNFbmRJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLnJoc0VuZEluZGV4O1xuICAgIGlmIChyaHNFbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCByaHNFbmRJbmRleCBvbiBlbnVtIGFzc2lnbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdCAke3ZhcmlhYmxlTmFtZX1gKTtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgcmhzRW5kSW5kZXgpIHtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICBgOyAke2VudW1OYW1lfVske2VudW1OYW1lfVske25hbWVTdHJpbmdDb2RlfV0gPSAke3ZhcmlhYmxlTmFtZX1dID0gJHtuYW1lU3RyaW5nQ29kZX07YCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCR7ZW51bU5hbWV9WyR7ZW51bU5hbWV9WyR7bmFtZVN0cmluZ0NvZGV9XWApO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCByaHNFbmRJbmRleCkge1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYF0gPSAke25hbWVTdHJpbmdDb2RlfTtgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGVudW0gbWVtYmVyIHdpdGggbm8gcmlnaHQtaGFuZCBzaWRlIGV4cHJlc3Npb24uIEluIHRoaXMgY2FzZSwgdGhlIHZhbHVlIGlzIHRoZVxuICAgKiBwcmV2aW91cyB2YWx1ZSBwbHVzIDEsIG9yIDAgaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIHZhbHVlLiBXZSBzaG91bGQgYWxzbyBhbHdheXMgZW1pdCBhXG4gICAqIHJldmVyc2UgbWFwcGluZy5cbiAgICpcbiAgICogRXhhbXBsZSAxOlxuICAgKiBzb21lS2V5MlxuICAgKiAtPlxuICAgKiBjb25zdCBzb21lS2V5MiA9IHNvbWVLZXkxICsgMTsgTXlFbnVtW015RW51bVtcInNvbWVLZXkyXCJdID0gc29tZUtleTJdID0gXCJzb21lS2V5MlwiO1xuICAgKlxuICAgKiBFeGFtcGxlIDI6XG4gICAqIFwic29tZSBrZXkgMlwiXG4gICAqIC0+XG4gICAqIE15RW51bVtNeUVudW1bXCJzb21lIGtleSAyXCJdID0gc29tZUtleTEgKyAxXSA9IFwic29tZSBrZXkgMlwiO1xuICAgKi9cbiAgcHJvY2Vzc0ltcGxpY2l0VmFsdWVFbnVtTWVtYmVyKFxuICAgIGVudW1OYW1lLFxuICAgIG5hbWVTdHJpbmdDb2RlLFxuICAgIHZhcmlhYmxlTmFtZSxcbiAgICBwcmV2aW91c1ZhbHVlQ29kZSxcbiAgKSB7XG4gICAgbGV0IHZhbHVlQ29kZSA9IHByZXZpb3VzVmFsdWVDb2RlICE9IG51bGwgPyBgJHtwcmV2aW91c1ZhbHVlQ29kZX0gKyAxYCA6IFwiMFwiO1xuICAgIGlmICh2YXJpYWJsZU5hbWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgY29uc3QgJHt2YXJpYWJsZU5hbWV9ID0gJHt2YWx1ZUNvZGV9OyBgKTtcbiAgICAgIHZhbHVlQ29kZSA9IHZhcmlhYmxlTmFtZTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcbiAgICAgIGAke2VudW1OYW1lfVske2VudW1OYW1lfVske25hbWVTdHJpbmdDb2RlfV0gPSAke3ZhbHVlQ29kZX1dID0gJHtuYW1lU3RyaW5nQ29kZX07YCxcbiAgICApO1xuICB9XG59XG4iLCAiXG5cblxuaW1wb3J0IHtDb250ZXh0dWFsS2V5d29yZH0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHNcIjtcbmltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5pbXBvcnQgZ2V0Q2xhc3NJbmZvLCB7fSBmcm9tIFwiLi4vdXRpbC9nZXRDbGFzc0luZm9cIjtcbmltcG9ydCBDSlNJbXBvcnRUcmFuc2Zvcm1lciBmcm9tIFwiLi9DSlNJbXBvcnRUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IEVTTUltcG9ydFRyYW5zZm9ybWVyIGZyb20gXCIuL0VTTUltcG9ydFRyYW5zZm9ybWVyXCI7XG5pbXBvcnQgRmxvd1RyYW5zZm9ybWVyIGZyb20gXCIuL0Zsb3dUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IEplc3RIb2lzdFRyYW5zZm9ybWVyIGZyb20gXCIuL0plc3RIb2lzdFRyYW5zZm9ybWVyXCI7XG5pbXBvcnQgSlNYVHJhbnNmb3JtZXIgZnJvbSBcIi4vSlNYVHJhbnNmb3JtZXJcIjtcbmltcG9ydCBOdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXIgZnJvbSBcIi4vTnVtZXJpY1NlcGFyYXRvclRyYW5zZm9ybWVyXCI7XG5pbXBvcnQgT3B0aW9uYWxDYXRjaEJpbmRpbmdUcmFuc2Zvcm1lciBmcm9tIFwiLi9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyXCI7XG5pbXBvcnQgT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lciBmcm9tIFwiLi9PcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyXCI7XG5pbXBvcnQgUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyIGZyb20gXCIuL1JlYWN0RGlzcGxheU5hbWVUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IFJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgZnJvbSBcIi4vUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lclwiO1xuXG5pbXBvcnQgVHlwZVNjcmlwdFRyYW5zZm9ybWVyIGZyb20gXCIuL1R5cGVTY3JpcHRUcmFuc2Zvcm1lclwiO1xuXG5cblxuXG5cblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvb3RUcmFuc2Zvcm1lciB7XG4gICBfX2luaXQoKSB7dGhpcy50cmFuc2Zvcm1lcnMgPSBbXX1cbiAgXG4gIFxuICAgX19pbml0MigpIHt0aGlzLmdlbmVyYXRlZFZhcmlhYmxlcyA9IFtdfVxuICBcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdWNyYXNlQ29udGV4dCxcbiAgICB0cmFuc2Zvcm1zLFxuICAgIGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3AsXG4gICAgb3B0aW9ucyxcbiAgKSB7O1Jvb3RUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7Um9vdFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5uYW1lTWFuYWdlciA9IHN1Y3Jhc2VDb250ZXh0Lm5hbWVNYW5hZ2VyO1xuICAgIHRoaXMuaGVscGVyTWFuYWdlciA9IHN1Y3Jhc2VDb250ZXh0LmhlbHBlck1hbmFnZXI7XG4gICAgY29uc3Qge3Rva2VuUHJvY2Vzc29yLCBpbXBvcnRQcm9jZXNzb3J9ID0gc3VjcmFzZUNvbnRleHQ7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlblByb2Nlc3NvcjtcbiAgICB0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQgPSB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiaW1wb3J0c1wiKTtcbiAgICB0aGlzLmlzUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1FbmFibGVkID0gdHJhbnNmb3Jtcy5pbmNsdWRlcyhcInJlYWN0LWhvdC1sb2FkZXJcIik7XG4gICAgdGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zID0gQm9vbGVhbihvcHRpb25zLmRpc2FibGVFU1RyYW5zZm9ybXMpO1xuXG4gICAgaWYgKCFvcHRpb25zLmRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIG5ldyBPcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyKHRva2VuUHJvY2Vzc29yLCB0aGlzLm5hbWVNYW5hZ2VyKSxcbiAgICAgICk7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKG5ldyBOdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXIodG9rZW5Qcm9jZXNzb3IpKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2gobmV3IE9wdGlvbmFsQ2F0Y2hCaW5kaW5nVHJhbnNmb3JtZXIodG9rZW5Qcm9jZXNzb3IsIHRoaXMubmFtZU1hbmFnZXIpKTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3Jtcy5pbmNsdWRlcyhcImpzeFwiKSkge1xuICAgICAgaWYgKG9wdGlvbnMuanN4UnVudGltZSAhPT0gXCJwcmVzZXJ2ZVwiKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgICAgbmV3IEpTWFRyYW5zZm9ybWVyKHRoaXMsIHRva2VuUHJvY2Vzc29yLCBpbXBvcnRQcm9jZXNzb3IsIHRoaXMubmFtZU1hbmFnZXIsIG9wdGlvbnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3IFJlYWN0RGlzcGxheU5hbWVUcmFuc2Zvcm1lcih0aGlzLCB0b2tlblByb2Nlc3NvciwgaW1wb3J0UHJvY2Vzc29yLCBvcHRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSBudWxsO1xuICAgIGlmICh0cmFuc2Zvcm1zLmluY2x1ZGVzKFwicmVhY3QtaG90LWxvYWRlclwiKSkge1xuICAgICAgaWYgKCFvcHRpb25zLmZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZpbGVQYXRoIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIHJlYWN0LWhvdC1sb2FkZXIgdHJhbnNmb3JtLlwiKTtcbiAgICAgIH1cbiAgICAgIHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSBuZXcgUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcih0b2tlblByb2Nlc3Nvciwgb3B0aW9ucy5maWxlUGF0aCk7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIpO1xuICAgIH1cblxuICAgIC8vIE5vdGUgdGhhdCB3ZSBhbHdheXMgd2FudCB0byBlbmFibGUgdGhlIGltcG9ydHMgdHJhbnNmb3JtZXIsIGV2ZW4gd2hlbiB0aGUgaW1wb3J0IHRyYW5zZm9ybVxuICAgIC8vIGl0c2VsZiBpc24ndCBlbmFibGVkLCBzaW5jZSB3ZSBuZWVkIHRvIGRvIHR5cGUtb25seSBpbXBvcnQgcHJ1bmluZyBmb3IgYm90aCBGbG93IGFuZFxuICAgIC8vIFR5cGVTY3JpcHQuXG4gICAgaWYgKHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJpbXBvcnRzXCIpKSB7XG4gICAgICBpZiAoaW1wb3J0UHJvY2Vzc29yID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1udWxsIGltcG9ydFByb2Nlc3NvciB3aXRoIGltcG9ydHMgdHJhbnNmb3JtIGVuYWJsZWQuXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3IENKU0ltcG9ydFRyYW5zZm9ybWVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICAgICAgIHRoaXMubmFtZU1hbmFnZXIsXG4gICAgICAgICAgdGhpcy5oZWxwZXJNYW5hZ2VyLFxuICAgICAgICAgIHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIsXG4gICAgICAgICAgZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCxcbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnMuZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3ApLFxuICAgICAgICAgIHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpLFxuICAgICAgICAgIHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJmbG93XCIpLFxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9ucy5wcmVzZXJ2ZUR5bmFtaWNJbXBvcnQpLFxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9ucy5rZWVwVW51c2VkSW1wb3J0cyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBuZXcgRVNNSW1wb3J0VHJhbnNmb3JtZXIoXG4gICAgICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICAgICAgdGhpcy5uYW1lTWFuYWdlcixcbiAgICAgICAgICB0aGlzLmhlbHBlck1hbmFnZXIsXG4gICAgICAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgICAgICB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwidHlwZXNjcmlwdFwiKSxcbiAgICAgICAgICB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiZmxvd1wiKSxcbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnMua2VlcFVudXNlZEltcG9ydHMpLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiZmxvd1wiKSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3IEZsb3dUcmFuc2Zvcm1lcih0aGlzLCB0b2tlblByb2Nlc3NvciwgdHJhbnNmb3Jtcy5pbmNsdWRlcyhcImltcG9ydHNcIikpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBuZXcgVHlwZVNjcmlwdFRyYW5zZm9ybWVyKHRoaXMsIHRva2VuUHJvY2Vzc29yLCB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiaW1wb3J0c1wiKSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHJhbnNmb3Jtcy5pbmNsdWRlcyhcImplc3RcIikpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIG5ldyBKZXN0SG9pc3RUcmFuc2Zvcm1lcih0aGlzLCB0b2tlblByb2Nlc3NvciwgdGhpcy5uYW1lTWFuYWdlciwgaW1wb3J0UHJvY2Vzc29yKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtKCkge1xuICAgIHRoaXMudG9rZW5zLnJlc2V0KCk7XG4gICAgdGhpcy5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgY29uc3Qgc2hvdWxkQWRkVXNlU3RyaWN0ID0gdGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkO1xuICAgIC8vIFwidXNlIHN0cmljdFwiIGFsd2F5cyBuZWVkcyB0byBiZSBmaXJzdCwgc28gb3ZlcnJpZGUgdGhlIG5vcm1hbCB0cmFuc2Zvcm1lciBvcmRlci5cbiAgICBsZXQgcHJlZml4ID0gc2hvdWxkQWRkVXNlU3RyaWN0ID8gJ1widXNlIHN0cmljdFwiOycgOiBcIlwiO1xuICAgIGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcbiAgICAgIHByZWZpeCArPSB0cmFuc2Zvcm1lci5nZXRQcmVmaXhDb2RlKCk7XG4gICAgfVxuICAgIHByZWZpeCArPSB0aGlzLmhlbHBlck1hbmFnZXIuZW1pdEhlbHBlcnMoKTtcbiAgICBwcmVmaXggKz0gdGhpcy5nZW5lcmF0ZWRWYXJpYWJsZXMubWFwKCh2KSA9PiBgIHZhciAke3Z9O2ApLmpvaW4oXCJcIik7XG4gICAgZm9yIChjb25zdCB0cmFuc2Zvcm1lciBvZiB0aGlzLnRyYW5zZm9ybWVycykge1xuICAgICAgcHJlZml4ICs9IHRyYW5zZm9ybWVyLmdldEhvaXN0ZWRDb2RlKCk7XG4gICAgfVxuICAgIGxldCBzdWZmaXggPSBcIlwiO1xuICAgIGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcbiAgICAgIHN1ZmZpeCArPSB0cmFuc2Zvcm1lci5nZXRTdWZmaXhDb2RlKCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9rZW5zLmZpbmlzaCgpO1xuICAgIGxldCB7Y29kZX0gPSByZXN1bHQ7XG4gICAgaWYgKGNvZGUuc3RhcnRzV2l0aChcIiMhXCIpKSB7XG4gICAgICBsZXQgbmV3bGluZUluZGV4ID0gY29kZS5pbmRleE9mKFwiXFxuXCIpO1xuICAgICAgaWYgKG5ld2xpbmVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3bGluZUluZGV4ID0gY29kZS5sZW5ndGg7XG4gICAgICAgIGNvZGUgKz0gXCJcXG5cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IGNvZGUuc2xpY2UoMCwgbmV3bGluZUluZGV4ICsgMSkgKyBwcmVmaXggKyBjb2RlLnNsaWNlKG5ld2xpbmVJbmRleCArIDEpICsgc3VmZml4LFxuICAgICAgICAvLyBUaGUgaGFzaGJhbmcgbGluZSBoYXMgbm8gdG9rZW5zLCBzbyBzaGlmdGluZyB0aGUgdG9rZW5zIHRvIGFjY291bnRcbiAgICAgICAgLy8gZm9yIHByZWZpeCBjYW4gaGFwcGVuIG5vcm1hbGx5LlxuICAgICAgICBtYXBwaW5nczogdGhpcy5zaGlmdE1hcHBpbmdzKHJlc3VsdC5tYXBwaW5ncywgcHJlZml4Lmxlbmd0aCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiBwcmVmaXggKyBjb2RlICsgc3VmZml4LFxuICAgICAgICBtYXBwaW5nczogdGhpcy5zaGlmdE1hcHBpbmdzKHJlc3VsdC5tYXBwaW5ncywgcHJlZml4Lmxlbmd0aCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NCYWxhbmNlZENvZGUoKSB7XG4gICAgbGV0IGJyYWNlRGVwdGggPSAwO1xuICAgIGxldCBwYXJlbkRlcHRoID0gMDtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLmlzQXRFbmQoKSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlTCkgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEodHQuZG9sbGFyQnJhY2VMKSkge1xuICAgICAgICBicmFjZURlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNlUikpIHtcbiAgICAgICAgaWYgKGJyYWNlRGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJhY2VEZXB0aC0tO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnBhcmVuTCkpIHtcbiAgICAgICAgcGFyZW5EZXB0aCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5wYXJlblIpKSB7XG4gICAgICAgIGlmIChwYXJlbkRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVuRGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvY2Vzc1Rva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1Rva2VuKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMSh0dC5fY2xhc3MpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NDbGFzcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHRyYW5zZm9ybWVyIG9mIHRoaXMudHJhbnNmb3JtZXJzKSB7XG4gICAgICBjb25zdCB3YXNQcm9jZXNzZWQgPSB0cmFuc2Zvcm1lci5wcm9jZXNzKCk7XG4gICAgICBpZiAod2FzUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogU2tpcCBwYXN0IGEgY2xhc3Mgd2l0aCBhIG5hbWUgYW5kIHJldHVybiB0aGF0IG5hbWUuXG4gICAqL1xuICBwcm9jZXNzTmFtZWRDbGFzcygpIHtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMyKHR0Ll9jbGFzcywgdHQubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlkZW50aWZpZXIgZm9yIGV4cG9ydGVkIGNsYXNzIG5hbWUuXCIpO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSk7XG4gICAgdGhpcy5wcm9jZXNzQ2xhc3MoKTtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHByb2Nlc3NDbGFzcygpIHtcbiAgICBjb25zdCBjbGFzc0luZm8gPSBnZXRDbGFzc0luZm8odGhpcywgdGhpcy50b2tlbnMsIHRoaXMubmFtZU1hbmFnZXIsIHRoaXMuZGlzYWJsZUVTVHJhbnNmb3Jtcyk7XG5cbiAgICAvLyBCb3RoIHN0YXRpYyBhbmQgaW5zdGFuY2UgaW5pdGlhbGl6ZXJzIG5lZWQgYSBjbGFzcyBuYW1lIHRvIHVzZSB0byBpbnZva2UgdGhlIGluaXRpYWxpemVyLCBzb1xuICAgIC8vIGFzc2lnbiB0byBvbmUgaWYgbmVjZXNzYXJ5LlxuICAgIGNvbnN0IG5lZWRzQ29tbWFFeHByZXNzaW9uID1cbiAgICAgIChjbGFzc0luZm8uaGVhZGVySW5mby5pc0V4cHJlc3Npb24gfHwgIWNsYXNzSW5mby5oZWFkZXJJbmZvLmNsYXNzTmFtZSkgJiZcbiAgICAgIGNsYXNzSW5mby5zdGF0aWNJbml0aWFsaXplck5hbWVzLmxlbmd0aCArIGNsYXNzSW5mby5pbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMDtcblxuICAgIGxldCBjbGFzc05hbWUgPSBjbGFzc0luZm8uaGVhZGVySW5mby5jbGFzc05hbWU7XG4gICAgaWYgKG5lZWRzQ29tbWFFeHByZXNzaW9uKSB7XG4gICAgICBjbGFzc05hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfY2xhc3NcIik7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZhcmlhYmxlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgKCR7Y2xhc3NOYW1lfSA9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NUb2tlbiA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgIGNvbnN0IGNvbnRleHRJZCA9IGNsYXNzVG9rZW4uY29udGV4dElkO1xuICAgIGlmIChjb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY2xhc3MgdG8gaGF2ZSBhIGNvbnRleHQgSUQuXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5fY2xhc3MpO1xuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKHR0LmJyYWNlTCwgY29udGV4dElkKSkge1xuICAgICAgdGhpcy5wcm9jZXNzVG9rZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NDbGFzc0JvZHkoY2xhc3NJbmZvLCBjbGFzc05hbWUpO1xuXG4gICAgY29uc3Qgc3RhdGljSW5pdGlhbGl6ZXJTdGF0ZW1lbnRzID0gY2xhc3NJbmZvLnN0YXRpY0luaXRpYWxpemVyTmFtZXMubWFwKFxuICAgICAgKG5hbWUpID0+IGAke2NsYXNzTmFtZX0uJHtuYW1lfSgpYCxcbiAgICApO1xuICAgIGlmIChuZWVkc0NvbW1hRXhwcmVzc2lvbikge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcbiAgICAgICAgYCwgJHtzdGF0aWNJbml0aWFsaXplclN0YXRlbWVudHMubWFwKChzKSA9PiBgJHtzfSwgYCkuam9pbihcIlwiKX0ke2NsYXNzTmFtZX0pYCxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChjbGFzc0luZm8uc3RhdGljSW5pdGlhbGl6ZXJOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgJHtzdGF0aWNJbml0aWFsaXplclN0YXRlbWVudHMubWFwKChzKSA9PiBgJHtzfTtgKS5qb2luKFwiIFwiKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2Ugd2FudCB0byBqdXN0IGhhbmRsZSBjbGFzcyBmaWVsZHMgaW4gYWxsIGNvbnRleHRzLCBzaW5jZSBUeXBlU2NyaXB0IHN1cHBvcnRzIHRoZW0uIExhdGVyLFxuICAgKiB3aGVuIHNvbWUgSlMgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgY2xhc3MgZmllbGRzLCB0aGlzIHNob3VsZCBiZSBtYWRlIG9wdGlvbmFsLlxuICAgKi9cbiAgcHJvY2Vzc0NsYXNzQm9keShjbGFzc0luZm8sIGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGhlYWRlckluZm8sXG4gICAgICBjb25zdHJ1Y3Rvckluc2VydFBvcyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgZmllbGRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfSA9IGNsYXNzSW5mbztcbiAgICBsZXQgZmllbGRJbmRleCA9IDA7XG4gICAgbGV0IHJhbmdlVG9SZW1vdmVJbmRleCA9IDA7XG4gICAgY29uc3QgY2xhc3NDb250ZXh0SWQgPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gICAgaWYgKGNsYXNzQ29udGV4dElkID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1udWxsIGNvbnRleHQgSUQgb24gY2xhc3MuXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbih0dC5icmFjZUwpO1xuICAgIGlmICh0aGlzLmlzUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICBcIl9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsKGtleSwgY29kZSkge3RoaXNba2V5XSA9IGV2YWwoY29kZSk7fVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZWVkc0NvbnN0cnVjdG9ySW5pdCA9XG4gICAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cy5sZW5ndGggKyBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMDtcblxuICAgIGlmIChjb25zdHJ1Y3Rvckluc2VydFBvcyA9PT0gbnVsbCAmJiBuZWVkc0NvbnN0cnVjdG9ySW5pdCkge1xuICAgICAgY29uc3QgY29uc3RydWN0b3JJbml0aWFsaXplcnNDb2RlID0gdGhpcy5tYWtlQ29uc3RydWN0b3JJbml0Q29kZShcbiAgICAgICAgY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsXG4gICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgKTtcbiAgICAgIGlmIChoZWFkZXJJbmZvLmhhc1N1cGVyY2xhc3MpIHtcbiAgICAgICAgY29uc3QgYXJnc05hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJhcmdzXCIpO1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICAgIGBjb25zdHJ1Y3RvciguLi4ke2FyZ3NOYW1lfSkgeyBzdXBlciguLi4ke2FyZ3NOYW1lfSk7ICR7Y29uc3RydWN0b3JJbml0aWFsaXplcnNDb2RlfTsgfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdHJ1Y3RvcigpIHsgJHtjb25zdHJ1Y3RvckluaXRpYWxpemVyc0NvZGV9OyB9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwodHQuYnJhY2VSLCBjbGFzc0NvbnRleHRJZCkpIHtcbiAgICAgIGlmIChmaWVsZEluZGV4IDwgZmllbGRzLmxlbmd0aCAmJiB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA9PT0gZmllbGRzW2ZpZWxkSW5kZXhdLnN0YXJ0KSB7XG4gICAgICAgIGxldCBuZWVkc0Nsb3NlQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LmJyYWNrZXRMKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbldpdGhQcmVmaXgoYCR7ZmllbGRzW2ZpZWxkSW5kZXhdLmluaXRpYWxpemVyTmFtZX0oKSB7dGhpc2ApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKHR0LnN0cmluZykgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEodHQubnVtKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbldpdGhQcmVmaXgoYCR7ZmllbGRzW2ZpZWxkSW5kZXhdLmluaXRpYWxpemVyTmFtZX0oKSB7dGhpc1tgKTtcbiAgICAgICAgICBuZWVkc0Nsb3NlQnJhY2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbldpdGhQcmVmaXgoYCR7ZmllbGRzW2ZpZWxkSW5kZXhdLmluaXRpYWxpemVyTmFtZX0oKSB7dGhpcy5gKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBmaWVsZHNbZmllbGRJbmRleF0uZW5kKSB7XG4gICAgICAgICAgaWYgKG5lZWRzQ2xvc2VCcmFjZSAmJiB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA9PT0gZmllbGRzW2ZpZWxkSW5kZXhdLmVxdWFsc0luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiXVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICAgICAgZmllbGRJbmRleCsrO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgcmFuZ2VUb1JlbW92ZUluZGV4IDwgcmFuZ2VzVG9SZW1vdmUubGVuZ3RoICYmXG4gICAgICAgIHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpID49IHJhbmdlc1RvUmVtb3ZlW3JhbmdlVG9SZW1vdmVJbmRleF0uc3RhcnRcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCByYW5nZXNUb1JlbW92ZVtyYW5nZVRvUmVtb3ZlSW5kZXhdLmVuZCkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHJhbmdlc1RvUmVtb3ZlW3JhbmdlVG9SZW1vdmVJbmRleF0uZW5kKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICByYW5nZVRvUmVtb3ZlSW5kZXgrKztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPT09IGNvbnN0cnVjdG9ySW5zZXJ0UG9zKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICBpZiAobmVlZHNDb25zdHJ1Y3RvckluaXQpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICAgICAgYDske3RoaXMubWFrZUNvbnN0cnVjdG9ySW5pdENvZGUoXG4gICAgICAgICAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgICAgICAgICBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgICl9O2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4odHQuYnJhY2VSKTtcbiAgfVxuXG4gIG1ha2VDb25zdHJ1Y3RvckluaXRDb2RlKFxuICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICBjbGFzc05hbWUsXG4gICkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5jb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyxcbiAgICAgIC4uLmluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcy5tYXAoKG5hbWUpID0+IGAke2NsYXNzTmFtZX0ucHJvdG90eXBlLiR7bmFtZX0uY2FsbCh0aGlzKWApLFxuICAgIF0uam9pbihcIjtcIik7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsbHkgaXQncyBvayB0byBzaW1wbHkgcmVtb3ZlIHR5cGUgdG9rZW5zLCBidXQgd2UgbmVlZCB0byBiZSBtb3JlIGNhcmVmdWwgd2hlbiBkZWFsaW5nIHdpdGhcbiAgICogYXJyb3cgZnVuY3Rpb24gcmV0dXJuIHR5cGVzIHNpbmNlIHRoZXkgY2FuIGNvbmZ1c2UgdGhlIHBhcnNlci4gSW4gdGhhdCBjYXNlLCB3ZSB3YW50IHRvIG1vdmVcbiAgICogdGhlIGNsb3NlLXBhcmVuIHRvIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGFycm93LlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UvaXNzdWVzLzM5MSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgcHJvY2Vzc1Bvc3NpYmxlQXJyb3dQYXJhbUVuZCgpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIodHQucGFyZW5SLCB0dC5jb2xvbikgJiYgdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMSkuaXNUeXBlKSB7XG4gICAgICBsZXQgbmV4dE5vblR5cGVJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMTtcbiAgICAgIC8vIExvb2sgYWhlYWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJyb3cgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2UuXG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMudG9rZW5zW25leHROb25UeXBlSW5kZXhdLmlzVHlwZSkge1xuICAgICAgICBuZXh0Tm9uVHlwZUluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KG5leHROb25UeXBlSW5kZXgsIHR0LmFycm93KSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgbmV4dE5vblR5cGVJbmRleCkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShcIikgPT5cIik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQW4gYXN5bmMgYXJyb3cgZnVuY3Rpb24gbWlnaHQgYmUgb2YgdGhlIGZvcm06XG4gICAqXG4gICAqIGFzeW5jIDxcbiAgICogICBUXG4gICAqID4oKSA9PiB7fVxuICAgKlxuICAgKiBpbiB3aGljaCBjYXNlLCByZW1vdmluZyB0aGUgdHlwZSBwYXJhbWV0ZXJzIHdpbGwgY2F1c2UgYSBzeW50YXggZXJyb3IuIERldGVjdCB0aGlzIGNhc2UgYW5kXG4gICAqIG1vdmUgdGhlIG9wZW4tcGFyZW4gZWFybGllci5cbiAgICovXG4gIHByb2Nlc3NQb3NzaWJsZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxKHR0Ll9hc3luYylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMSk7XG4gICAgaWYgKG5leHRUb2tlbi50eXBlICE9PSB0dC5sZXNzVGhhbiB8fCAhbmV4dFRva2VuLmlzVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBuZXh0Tm9uVHlwZUluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxO1xuICAgIC8vIExvb2sgYWhlYWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJyb3cgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2UuXG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLnRva2Vuc1tuZXh0Tm9uVHlwZUluZGV4XS5pc1R5cGUpIHtcbiAgICAgIG5leHROb25UeXBlSW5kZXgrKztcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChuZXh0Tm9uVHlwZUluZGV4LCB0dC5wYXJlbkwpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJhc3luYyAoXCIpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBuZXh0Tm9uVHlwZUluZGV4KSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gV2UgYXRlIGEgKCB0b2tlbiwgc28gd2UgbmVlZCB0byBwcm9jZXNzIHRoZSB0b2tlbnMgaW4gYmV0d2VlbiBhbmQgdGhlbiB0aGUgKSB0b2tlbiBzbyB0aGF0XG4gICAgICAvLyB3ZSByZW1haW4gYmFsYW5jZWQuXG4gICAgICB0aGlzLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgIHRoaXMucHJvY2Vzc1Rva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvY2Vzc1Bvc3NpYmxlVHlwZVJhbmdlKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNoaWZ0TWFwcGluZ3MoXG4gICAgbWFwcGluZ3MsXG4gICAgcHJlZml4TGVuZ3RoLFxuICApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBpZiAobWFwcGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcHBpbmdzW2ldID0gbWFwcGluZyArIHByZWZpeExlbmd0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9XG59XG4iLCAiaW1wb3J0IExpbmVzQW5kQ29sdW1ucyBmcm9tIFwibGluZXMtYW5kLWNvbHVtbnNcIjtcblxuXG5pbXBvcnQge2Zvcm1hdFRva2VuVHlwZX0gZnJvbSBcIi4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0VG9rZW5zKGNvZGUsIHRva2Vucykge1xuICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3QgdG9rZW5LZXlzID0gT2JqZWN0LmtleXModG9rZW5zWzBdKS5maWx0ZXIoXG4gICAgKGspID0+IGsgIT09IFwidHlwZVwiICYmIGsgIT09IFwidmFsdWVcIiAmJiBrICE9PSBcInN0YXJ0XCIgJiYgayAhPT0gXCJlbmRcIiAmJiBrICE9PSBcImxvY1wiLFxuICApO1xuICBjb25zdCB0eXBlS2V5cyA9IE9iamVjdC5rZXlzKHRva2Vuc1swXS50eXBlKS5maWx0ZXIoKGspID0+IGsgIT09IFwibGFiZWxcIiAmJiBrICE9PSBcImtleXdvcmRcIik7XG5cbiAgY29uc3QgaGVhZGluZ3MgPSBbXCJMb2NhdGlvblwiLCBcIkxhYmVsXCIsIFwiUmF3XCIsIC4uLnRva2VuS2V5cywgLi4udHlwZUtleXNdO1xuXG4gIGNvbnN0IGxpbmVzID0gbmV3IExpbmVzQW5kQ29sdW1ucyhjb2RlKTtcbiAgY29uc3Qgcm93cyA9IFtoZWFkaW5ncywgLi4udG9rZW5zLm1hcChnZXRUb2tlbkNvbXBvbmVudHMpXTtcbiAgY29uc3QgcGFkZGluZyA9IGhlYWRpbmdzLm1hcCgoKSA9PiAwKTtcbiAgZm9yIChjb25zdCBjb21wb25lbnRzIG9mIHJvd3MpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhZGRpbmdbaV0gPSBNYXRoLm1heChwYWRkaW5nW2ldLCBjb21wb25lbnRzW2ldLmxlbmd0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByb3dzXG4gICAgLm1hcCgoY29tcG9uZW50cykgPT4gY29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCwgaSkgPT4gY29tcG9uZW50LnBhZEVuZChwYWRkaW5nW2ldKSkuam9pbihcIiBcIikpXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgZnVuY3Rpb24gZ2V0VG9rZW5Db21wb25lbnRzKHRva2VuKSB7XG4gICAgY29uc3QgcmF3ID0gY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTtcbiAgICByZXR1cm4gW1xuICAgICAgZm9ybWF0UmFuZ2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCksXG4gICAgICBmb3JtYXRUb2tlblR5cGUodG9rZW4udHlwZSksXG4gICAgICB0cnVuY2F0ZShTdHJpbmcocmF3KSwgMTQpLFxuICAgICAgLy8gQHRzLWlnbm9yZTogSW50ZW50aW9uYWwgZHluYW1pYyBhY2Nlc3MgYnkga2V5LlxuICAgICAgLi4udG9rZW5LZXlzLm1hcCgoa2V5KSA9PiBmb3JtYXRWYWx1ZSh0b2tlbltrZXldLCBrZXkpKSxcbiAgICAgIC8vIEB0cy1pZ25vcmU6IEludGVudGlvbmFsIGR5bmFtaWMgYWNjZXNzIGJ5IGtleS5cbiAgICAgIC4uLnR5cGVLZXlzLm1hcCgoa2V5KSA9PiBmb3JtYXRWYWx1ZSh0b2tlbi50eXBlW2tleV0sIGtleSkpLFxuICAgIF07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh2YWx1ZSwga2V5KSB7XG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UmFuZ2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBgJHtmb3JtYXRQb3Moc3RhcnQpfS0ke2Zvcm1hdFBvcyhlbmQpfWA7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQb3MocG9zKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBsaW5lcy5sb2NhdGlvbkZvckluZGV4KHBvcyk7XG4gICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIFwiVW5rbm93blwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7bG9jYXRpb24ubGluZSArIDF9OiR7bG9jYXRpb24uY29sdW1uICsgMX1gO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBsZW5ndGgpIHtcbiAgaWYgKHMubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAke3Muc2xpY2UoMCwgbGVuZ3RoIC0gMyl9Li4uYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuIiwgImltcG9ydCB7VG9rZW5UeXBlIGFzIHR0fSBmcm9tIFwiLi4vcGFyc2VyL3Rva2VuaXplci90eXBlc1wiO1xuXG5pbXBvcnQgZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyBmcm9tIFwiLi9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvXCI7XG5cbi8qKlxuICogU3BlY2lhbCBjYXNlIGNvZGUgdG8gc2NhbiBmb3IgaW1wb3J0ZWQgbmFtZXMgaW4gRVNNIFR5cGVTY3JpcHQuIFdlIG5lZWQgdG8gZG8gdGhpcyBzbyB3ZSBjYW5cbiAqIHByb3Blcmx5IGdldCBnbG9iYWxzIHNvIHdlIGNhbiBjb21wdXRlIHNoYWRvd2VkIGdsb2JhbHMuXG4gKlxuICogVGhpcyBpcyBzaW1pbGFyIHRvIGxvZ2ljIGluIENKU0ltcG9ydFByb2Nlc3NvciwgYnV0IHRyaW1tZWQgZG93biB0byBhdm9pZCBsb2dpYyB3aXRoIENKU1xuICogcmVwbGFjZW1lbnQgYW5kIGZsb3cgdHlwZSBpbXBvcnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUU0ltcG9ydGVkTmFtZXModG9rZW5zKSB7XG4gIGNvbnN0IGltcG9ydGVkTmFtZXMgPSBuZXcgU2V0KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLnRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChcbiAgICAgIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgdHQuX2ltcG9ydCkgJiZcbiAgICAgICF0b2tlbnMubWF0Y2hlczNBdEluZGV4KGksIHR0Ll9pbXBvcnQsIHR0Lm5hbWUsIHR0LmVxKVxuICAgICkge1xuICAgICAgY29sbGVjdE5hbWVzRm9ySW1wb3J0KHRva2VucywgaSwgaW1wb3J0ZWROYW1lcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbXBvcnRlZE5hbWVzO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0TmFtZXNGb3JJbXBvcnQoXG4gIHRva2VucyxcbiAgaW5kZXgsXG4gIGltcG9ydGVkTmFtZXMsXG4pIHtcbiAgaW5kZXgrKztcblxuICBpZiAodG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQucGFyZW5MKSkge1xuICAgIC8vIER5bmFtaWMgaW1wb3J0LCBzbyBub3RoaW5nIHRvIGRvXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0Lm5hbWUpKSB7XG4gICAgaW1wb3J0ZWROYW1lcy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkpO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LmNvbW1hKSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cblxuICBpZiAodG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgdHQuc3RhcikpIHtcbiAgICAvLyAqIGFzXG4gICAgaW5kZXggKz0gMjtcbiAgICBpbXBvcnRlZE5hbWVzLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSk7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmICh0b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCB0dC5icmFjZUwpKSB7XG4gICAgaW5kZXgrKztcbiAgICBjb2xsZWN0TmFtZXNGb3JOYW1lZEltcG9ydCh0b2tlbnMsIGluZGV4LCBpbXBvcnRlZE5hbWVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0TmFtZXNGb3JOYW1lZEltcG9ydChcbiAgdG9rZW5zLFxuICBpbmRleCxcbiAgaW1wb3J0ZWROYW1lcyxcbikge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmICh0b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCB0dC5icmFjZVIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY2lmaWVySW5mbyA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8odG9rZW5zLCBpbmRleCk7XG4gICAgaW5kZXggPSBzcGVjaWZpZXJJbmZvLmVuZEluZGV4O1xuICAgIGlmICghc3BlY2lmaWVySW5mby5pc1R5cGUpIHtcbiAgICAgIGltcG9ydGVkTmFtZXMuYWRkKHNwZWNpZmllckluZm8ucmlnaHROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgdHQuY29tbWEsIHR0LmJyYWNlUikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LmJyYWNlUikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHR0LmNvbW1hKSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHRva2Vucy50b2tlbnNbaW5kZXhdKX1gKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgQ0pTSW1wb3J0UHJvY2Vzc29yIGZyb20gXCIuL0NKU0ltcG9ydFByb2Nlc3NvclwiO1xuaW1wb3J0IGNvbXB1dGVTb3VyY2VNYXAsIHt9IGZyb20gXCIuL2NvbXB1dGVTb3VyY2VNYXBcIjtcbmltcG9ydCB7SGVscGVyTWFuYWdlcn0gZnJvbSBcIi4vSGVscGVyTWFuYWdlclwiO1xuaW1wb3J0IGlkZW50aWZ5U2hhZG93ZWRHbG9iYWxzIGZyb20gXCIuL2lkZW50aWZ5U2hhZG93ZWRHbG9iYWxzXCI7XG5pbXBvcnQgTmFtZU1hbmFnZXIgZnJvbSBcIi4vTmFtZU1hbmFnZXJcIjtcbmltcG9ydCB7dmFsaWRhdGVPcHRpb25zfSBmcm9tIFwiLi9PcHRpb25zXCI7XG5cbmltcG9ydCB7cGFyc2V9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbXBvcnQgVG9rZW5Qcm9jZXNzb3IgZnJvbSBcIi4vVG9rZW5Qcm9jZXNzb3JcIjtcbmltcG9ydCBSb290VHJhbnNmb3JtZXIgZnJvbSBcIi4vdHJhbnNmb3JtZXJzL1Jvb3RUcmFuc2Zvcm1lclwiO1xuaW1wb3J0IGZvcm1hdFRva2VucyBmcm9tIFwiLi91dGlsL2Zvcm1hdFRva2Vuc1wiO1xuaW1wb3J0IGdldFRTSW1wb3J0ZWROYW1lcyBmcm9tIFwiLi91dGlsL2dldFRTSW1wb3J0ZWROYW1lc1wiO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNpb24oKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiBcIjMuMzUuMFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtKGNvZGUsIG9wdGlvbnMpIHtcbiAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuICB0cnkge1xuICAgIGNvbnN0IHN1Y3Jhc2VDb250ZXh0ID0gZ2V0U3VjcmFzZUNvbnRleHQoY29kZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgUm9vdFRyYW5zZm9ybWVyKFxuICAgICAgc3VjcmFzZUNvbnRleHQsXG4gICAgICBvcHRpb25zLnRyYW5zZm9ybXMsXG4gICAgICBCb29sZWFuKG9wdGlvbnMuZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCksXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gICAgY29uc3QgdHJhbnNmb3JtZXJSZXN1bHQgPSB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oKTtcbiAgICBsZXQgcmVzdWx0ID0ge2NvZGU6IHRyYW5zZm9ybWVyUmVzdWx0LmNvZGV9O1xuICAgIGlmIChvcHRpb25zLnNvdXJjZU1hcE9wdGlvbnMpIHtcbiAgICAgIGlmICghb3B0aW9ucy5maWxlUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaWxlUGF0aCBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGdlbmVyYXRpbmcgYSBzb3VyY2UgbWFwLlwiKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICBzb3VyY2VNYXA6IGNvbXB1dGVTb3VyY2VNYXAoXG4gICAgICAgICAgdHJhbnNmb3JtZXJSZXN1bHQsXG4gICAgICAgICAgb3B0aW9ucy5maWxlUGF0aCxcbiAgICAgICAgICBvcHRpb25zLnNvdXJjZU1hcE9wdGlvbnMsXG4gICAgICAgICAgY29kZSxcbiAgICAgICAgICBzdWNyYXNlQ29udGV4dC50b2tlblByb2Nlc3Nvci50b2tlbnMsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAob3B0aW9ucy5maWxlUGF0aCkge1xuICAgICAgZS5tZXNzYWdlID0gYEVycm9yIHRyYW5zZm9ybWluZyAke29wdGlvbnMuZmlsZVBhdGh9OiAke2UubWVzc2FnZX1gO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdWNyYXNlIHRva2VucywgbW9zdGx5IHVzZWZ1bCBmb3JcbiAqIGRpYWdub3N0aWMgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRUb2tlbnMoY29kZSwgb3B0aW9ucykge1xuICBjb25zdCB0b2tlbnMgPSBnZXRTdWNyYXNlQ29udGV4dChjb2RlLCBvcHRpb25zKS50b2tlblByb2Nlc3Nvci50b2tlbnM7XG4gIHJldHVybiBmb3JtYXRUb2tlbnMoY29kZSwgdG9rZW5zKTtcbn1cblxuLyoqXG4gKiBDYWxsIGludG8gdGhlIHBhcnNlci90b2tlbml6ZXIgYW5kIGRvIHNvbWUgZnVydGhlciBwcmVwcm9jZXNzaW5nOlxuICogLSBDb21lIHVwIHdpdGggYSBzZXQgb2YgdXNlZCBuYW1lcyBzbyB0aGF0IHdlIGNhbiBhc3NpZ24gbmV3IG5hbWVzLlxuICogLSBQcmVwcm9jZXNzIGFsbCBpbXBvcnQvZXhwb3J0IHN0YXRlbWVudHMgc28gd2Uga25vdyB3aGljaCBnbG9iYWxzIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICogLSBDb21wdXRlIHNpdHVhdGlvbnMgd2hlcmUgYW55IG9mIHRob3NlIGdsb2JhbHMgYXJlIHNoYWRvd2VkLlxuICpcbiAqIEluIHRoZSBmdXR1cmUsIHNvbWUgb2YgdGhlc2UgcHJlcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgc2tpcHBlZCBiYXNlZCBvbiB3aGF0IGFjdHVhbCB3b3JrIGlzXG4gKiBiZWluZyBkb25lLlxuICovXG5mdW5jdGlvbiBnZXRTdWNyYXNlQ29udGV4dChjb2RlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGlzSlNYRW5hYmxlZCA9IG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcImpzeFwiKTtcbiAgY29uc3QgaXNUeXBlU2NyaXB0RW5hYmxlZCA9IG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcInR5cGVzY3JpcHRcIik7XG4gIGNvbnN0IGlzRmxvd0VuYWJsZWQgPSBvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJmbG93XCIpO1xuICBjb25zdCBkaXNhYmxlRVNUcmFuc2Zvcm1zID0gb3B0aW9ucy5kaXNhYmxlRVNUcmFuc2Zvcm1zID09PSB0cnVlO1xuICBjb25zdCBmaWxlID0gcGFyc2UoY29kZSwgaXNKU1hFbmFibGVkLCBpc1R5cGVTY3JpcHRFbmFibGVkLCBpc0Zsb3dFbmFibGVkKTtcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnM7XG4gIGNvbnN0IHNjb3BlcyA9IGZpbGUuc2NvcGVzO1xuXG4gIGNvbnN0IG5hbWVNYW5hZ2VyID0gbmV3IE5hbWVNYW5hZ2VyKGNvZGUsIHRva2Vucyk7XG4gIGNvbnN0IGhlbHBlck1hbmFnZXIgPSBuZXcgSGVscGVyTWFuYWdlcihuYW1lTWFuYWdlcik7XG4gIGNvbnN0IHRva2VuUHJvY2Vzc29yID0gbmV3IFRva2VuUHJvY2Vzc29yKFxuICAgIGNvZGUsXG4gICAgdG9rZW5zLFxuICAgIGlzRmxvd0VuYWJsZWQsXG4gICAgZGlzYWJsZUVTVHJhbnNmb3JtcyxcbiAgICBoZWxwZXJNYW5hZ2VyLFxuICApO1xuICBjb25zdCBlbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCA9IEJvb2xlYW4ob3B0aW9ucy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCk7XG5cbiAgbGV0IGltcG9ydFByb2Nlc3NvciA9IG51bGw7XG4gIGlmIChvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJpbXBvcnRzXCIpKSB7XG4gICAgaW1wb3J0UHJvY2Vzc29yID0gbmV3IENKU0ltcG9ydFByb2Nlc3NvcihcbiAgICAgIG5hbWVNYW5hZ2VyLFxuICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICBlbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpLFxuICAgICAgQm9vbGVhbihvcHRpb25zLmtlZXBVbnVzZWRJbXBvcnRzKSxcbiAgICAgIGhlbHBlck1hbmFnZXIsXG4gICAgKTtcbiAgICBpbXBvcnRQcm9jZXNzb3IucHJlcHJvY2Vzc1Rva2VucygpO1xuICAgIC8vIFdlIG5lZWQgdG8gbWFyayBzaGFkb3dlZCBnbG9iYWxzIGFmdGVyIHByb2Nlc3NpbmcgaW1wb3J0cyBzbyB3ZSBrbm93IHRoYXQgdGhlIGdsb2JhbHMgYXJlLFxuICAgIC8vIGJ1dCBiZWZvcmUgdHlwZS1vbmx5IGltcG9ydCBwcnVuaW5nLCBzaW5jZSB0aGF0IHJlbGllcyBvbiBzaGFkb3dpbmcgaW5mb3JtYXRpb24uXG4gICAgaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHModG9rZW5Qcm9jZXNzb3IsIHNjb3BlcywgaW1wb3J0UHJvY2Vzc29yLmdldEdsb2JhbE5hbWVzKCkpO1xuICAgIGlmIChvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpICYmICFvcHRpb25zLmtlZXBVbnVzZWRJbXBvcnRzKSB7XG4gICAgICBpbXBvcnRQcm9jZXNzb3IucHJ1bmVUeXBlT25seUltcG9ydHMoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy50cmFuc2Zvcm1zLmluY2x1ZGVzKFwidHlwZXNjcmlwdFwiKSAmJiAhb3B0aW9ucy5rZWVwVW51c2VkSW1wb3J0cykge1xuICAgIC8vIFNoYWRvd2VkIGdsb2JhbCBkZXRlY3Rpb24gaXMgbmVlZGVkIGZvciBUUyBpbXBsaWNpdCBlbGlzaW9uIG9mIGltcG9ydGVkIG5hbWVzLlxuICAgIGlkZW50aWZ5U2hhZG93ZWRHbG9iYWxzKHRva2VuUHJvY2Vzc29yLCBzY29wZXMsIGdldFRTSW1wb3J0ZWROYW1lcyh0b2tlblByb2Nlc3NvcikpO1xuICB9XG4gIHJldHVybiB7dG9rZW5Qcm9jZXNzb3IsIHNjb3BlcywgbmFtZU1hbmFnZXIsIGltcG9ydFByb2Nlc3NvciwgaGVscGVyTWFuYWdlcn07XG59XG4iLCAiLy8hIFV0aWxpdGllcyBmb3IgcnVubmluZyBqYXZhc2NyaXB0LlxuXG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tIFwic3VjcmFzZVwiO1xuXG5leHBvcnQgdHlwZSBTY3JpcHRMYW5ndWFnZSA9IFwianNcIiB8IFwidHNcIiB8IFwianN4XCIgfCBcInRzeFwiO1xuXG4vKiogQ29udmVydHMgYSByYXcgc2NyaXB0IGluIHRoZSBnaXZlbiBsYW5ndWFnZSB0byBwbGFpbiBqYXZhc2NyaXB0LiAgKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3BpbGUoc2NyaXB0OiBzdHJpbmcsIGxhbmd1YWdlOiBTY3JpcHRMYW5ndWFnZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgICAgICBjYXNlIFwianNcIjpcbiAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7XG4gICAgICAgIGNhc2UgXCJqc3hcIjpcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0oc2NyaXB0LCB7IHRyYW5zZm9ybXM6IFtcImpzeFwiXSwganN4UHJhZ21hOiBcImhcIiwganN4RnJhZ21lbnRQcmFnbWE6IFwiRnJhZ21lbnRcIiB9KS5jb2RlO1xuICAgICAgICBjYXNlIFwidHNcIjpcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0oc2NyaXB0LCB7IHRyYW5zZm9ybXM6IFtcInR5cGVzY3JpcHRcIl0gfSkuY29kZTtcbiAgICAgICAgY2FzZSBcInRzeFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybShzY3JpcHQsIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zOiBbXCJ0eXBlc2NyaXB0XCIsIFwianN4XCJdLFxuICAgICAgICAgICAgICAgIGpzeFByYWdtYTogXCJoXCIsXG4gICAgICAgICAgICAgICAganN4RnJhZ21lbnRQcmFnbWE6IFwiRnJhZ21lbnRcIixcbiAgICAgICAgICAgIH0pLmNvZGU7XG4gICAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlIGEgc2NyaXB0IHdoZXJlICd0aGlzJyBmb3IgdGhlIHNjcmlwdCBpcyBzZXQgdG8gdGhlIGdpdmVuIGNvbnRleHQuIEFsbG93cyB5b3UgdG8gZGVmaW5lIGdsb2JhbCB2YXJpYWJsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW5Db250ZXh0KHNjcmlwdDogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBhbnkge1xuICAgIGNvbnN0IHBhaXJzID0gT2JqZWN0LmVudHJpZXModmFyaWFibGVzKTtcbiAgICBjb25zdCBrZXlzID0gcGFpcnMubWFwKChba2V5LCBfXSkgPT4ga2V5KTtcbiAgICBjb25zdCB2YWx1ZXMgPSBwYWlycy5tYXAoKFtfLCB2YWx1ZV0pID0+IHZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oLi4ua2V5cywgc2NyaXB0KSguLi52YWx1ZXMpO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGEgc2NyaXB0IHBvc3NpYmx5IGFzeW5jaHJvbm91c2x5LCBpZiB0aGUgc2NyaXB0IGNvbnRhaW5zIGBhc3luYy9hd2FpdGAgYmxvY2tzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNFdmFsSW5Db250ZXh0KHNjcmlwdDogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChzY3JpcHQuaW5jbHVkZXMoXCJhd2FpdFwiKSkge1xuICAgICAgICByZXR1cm4gZXZhbEluQ29udGV4dChcInJldHVybiAoYXN5bmMgKCkgPT4geyBcIiArIHNjcmlwdCArIFwiIH0pKClcIiwgdmFyaWFibGVzKSBhcyBQcm9taXNlPGFueT47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShldmFsSW5Db250ZXh0KHNjcmlwdCwgdmFyaWFibGVzKSk7XG4gICAgfVxufVxuIiwgIi8qKiBAbW9kdWxlIHVpICovXG5pbXBvcnQgeyBEYXRhY29yZSB9IGZyb20gXCJpbmRleC9kYXRhY29yZVwiO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEluZGV4UXVlcnkgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXgtcXVlcnlcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwiaW5kZXgvZGF0YXN0b3JlXCI7XG5pbXBvcnQgeyBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCJhcGkvcmVzdWx0XCI7XG5cbi8qKiBIb29rIHRoYXQgdXBkYXRlcyB0aGUgdmlldyB3aGVuZXZlciB0aGUgcmV2aXNpb24gdXBkYXRlcywgcmV0dXJuaW5nIHRoZSBuZXdlc3QgcmV2aXNpb24uXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZTogRGF0YWNvcmUsIHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICBjb25zdCBbcmV2aXNpb24sIHNldFJldmlzaW9uXSA9IHVzZVN0YXRlKGRhdGFjb3JlLmRhdGFzdG9yZS5yZXZpc2lvbik7XG4gICAgY29uc3QgZGVib3VuY2VkUmV2aXNpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHNldHRpbmdzPy5kZWJvdW5jZSAmJiBzZXR0aW5ncy5kZWJvdW5jZSA9PSAwKSByZXR1cm4gc2V0UmV2aXNpb247XG4gICAgICAgIGVsc2UgcmV0dXJuIGRlYm91bmNlKHNldFJldmlzaW9uLCBzZXR0aW5ncz8uZGVib3VuY2UgPz8gNTAwKTtcbiAgICB9LCBbc2V0UmV2aXNpb24sIHNldHRpbmdzPy5kZWJvdW5jZV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gZGF0YWNvcmUub24oXCJ1cGRhdGVcIiwgZGVib3VuY2VkUmV2aXNpb24pO1xuICAgICAgICByZXR1cm4gKCkgPT4gZGF0YWNvcmUub2ZmcmVmKHJlZik7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIHJldmlzaW9uO1xufVxuXG4vKiogQSBob29rIHdoaWNoIHVwZGF0ZXMgd2hlbmV2ZXIgZmlsZSBtZXRhZGF0YSBmb3IgYSBzcGVjaWZpYyBmaWxlIHVwZGF0ZXMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZpbGVNZXRhZGF0YShcbiAgICBkYXRhY29yZTogRGF0YWNvcmUsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9XG4pOiBJbmRleGFibGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGluZGV4UmV2aXNpb24gPSB1c2VJbmRleFVwZGF0ZXMoZGF0YWNvcmUsIHNldHRpbmdzKTtcblxuICAgIC8vIFRPRE86IEkgdGhpbmsgbG9hZCByZXR1cm5zIGNvbnNpc3RlbnQgb2JqZWN0cyBzbyBpdCBzaG91bGQgYmUgb2theS5cbiAgICByZXR1cm4gdXNlTWVtbygoKSA9PiBkYXRhY29yZS5kYXRhc3RvcmUubG9hZChwYXRoKSwgW2luZGV4UmV2aXNpb24sIHBhdGhdKTtcbn1cblxuLyoqIFNldHRpbmdzIHdoaWNoIGNvbnRyb2wgaG93IGF1dG9tYXRpYyBxdWVyeSByZWxvYWRpbmcgc2hvdWxkIHdvcmsuXG4gKiBAZ3JvdXAgQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlUXVlcnlTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudCwgZGVib3VuY2UgcmVwZWF0ZWQgcXVlcnkgdXBkYXRlcyBzbyB0aGF0IGFuIHVwZGF0ZSBvbmx5IG9jY3VycyBldmVyeSBcXDxkZWJvdW5jZVxcPiBtaWxsaXNlY29uZHMuIFRoaXNcbiAgICAgKiBkZWZhdWx0cyB0byB0aGUgb3ZlcmFsbCBkZWZhdWx0IGRlYm91bmNlIHNldHRpbmdzLlxuICAgICAqL1xuICAgIGRlYm91bmNlPzogbnVtYmVyO1xufVxuXG4vKiogUGVyZm9ybSBhIGxpdmUsIHN5bmNocm9ub3VzIHF1ZXJ5IHdoaWNoIHVwZGF0ZXMgaXRzIHJlc3VsdHMgd2hlbmV2ZXIgdGhlIGJhY2tpbmcgcXVlcnkgd291bGQgY2hhbmdlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5VXNlRnVsbFF1ZXJ5KFxuICAgIGRhdGFjb3JlOiBEYXRhY29yZSxcbiAgICBxdWVyeTogSW5kZXhRdWVyeSxcbiAgICBzZXR0aW5ncz86IFVzZVF1ZXJ5U2V0dGluZ3Ncbik6IFJlc3VsdDxTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiwgc3RyaW5nPiB7XG4gICAgLy8gVHJhY2sgaW5kZXggdXBkYXRlcyB3aXRoIGN1c3RvbWl6YWJsZSBkZWJvdW5jaW5nLlxuICAgIGNvbnN0IGluZGV4UmV2aXNpb24gPSB1c2VJbmRleFVwZGF0ZXMoZGF0YWNvcmUsIHNldHRpbmdzKTtcblxuICAgIC8vIFdlIFwiaW50ZXJuXCIgdGhlIHF1ZXJ5LCBtZWFuaW5nIHdlIHJldXNlIHRoZSBvbGRlc3QgdmVyc2lvbiBpZiBpdCBpcyBzZW1hbnRpY2FsbHkgZXF1YWwgYnV0IGp1c3QgYSBkaWZmZXJlbnQgb2JqZWN0LlxuICAgIGNvbnN0IGludGVybmVkUXVlcnkgPSB1c2VJbnRlcm5pbmcocXVlcnksIExpdGVyYWxzLmVxdWFscyk7XG4gICAgLy8gSW50ZXJuIHRoZSBvdXRwdXQgYXMgd2VsbCBzbyByZWFjdCBkaWZmaW5nIFwianVzdCB3b3Jrc1wiIHdpdGggdGhlIHJlc3VsdCBvZiB1c2VRdWVyeS5cbiAgICBjb25zdCBpbnRlcm5lZFJlc3VsdCA9IHVzZVJlZjxSZXN1bHQ8U2VhcmNoUmVzdWx0PEluZGV4YWJsZT4sIHN0cmluZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICAvLyBPbiBldmVyeSBpbmRleCByZXZpc2lvbiB1cGRhdGUsIHJlLXJ1biB0aGUgcXVlcnkgYW5kIGNoZWNrIGlmIGl0IHByb2R1Y2VkIG1lYW5pbmdmdWxseSBuZXcgdmFsdWVzLlxuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3UmVzdWx0ID0gZGF0YWNvcmUuZGF0YXN0b3JlLnNlYXJjaChxdWVyeSk7XG5cbiAgICAgICAgLy8gU2V0IGZhaWx1cmUgaWYgdGhlIG5ldyByZXF1ZXN0IGlzIGEgZmFpbHVyZS5cbiAgICAgICAgaWYgKCFuZXdSZXN1bHQuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgaW50ZXJuZWRSZXN1bHQuY3VycmVudCA9IFJlc3VsdC5mYWlsdXJlKG5ld1Jlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuZWRSZXN1bHQuY3VycmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGN1cnJlbnQgaW50ZXJuZWQgc3RhdGUsIHVwZGF0ZSBpdCBhbmQgcmV0dXJuLlxuICAgICAgICBpZiAoaW50ZXJuZWRSZXN1bHQuY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID0gUmVzdWx0LnN1Y2Nlc3MobmV3UmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIG5ldyByZXF1ZXN0IGlzIGlzIHN1Y2Nlc3NmdWwgYW5kIHRoZSBvbGQgcmVzdWx0IGlzIGRlZmluZWQuIElmIHRoZSBvbGQgcmVzdWx0IHdhcyBhbiBlcnJvciwgdXBkYXRlIGl0LlxuICAgICAgICBjb25zdCBvbGRSZXN1bHQgPSBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgICAgICBpZiAoIW9sZFJlc3VsdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID0gUmVzdWx0LnN1Y2Nlc3MobmV3UmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm90aCBhcmUgc3VjY2Vzc2Z1bCwgY2hlY2sgaWYgdGhleSBhcmUgZGlmZmVyZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBvbGRSZXN1bHQudmFsdWUucmV2aXNpb24gIT0gbmV3UmVzdWx0LnZhbHVlLnJldmlzaW9uIHx8XG4gICAgICAgICAgICAhc2FtZU9iamVjdHMob2xkUmVzdWx0LnZhbHVlLnJlc3VsdHMsIG5ld1Jlc3VsdC52YWx1ZS5yZXN1bHRzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAoaW50ZXJuZWRSZXN1bHQuY3VycmVudCA9IFJlc3VsdC5zdWNjZXNzKG5ld1Jlc3VsdC52YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2FtZSByZXZpc2lvbiBhbmQgc2FtZSBvYmplY3RzLCB0aGlzIGlzIHRoZSBzYW1lIHF1ZXJ5IHJlc3VsdCwgc28gcmV0dXJuIHRoZSBvbGQgb2JqZWN0LlxuICAgICAgICByZXR1cm4gaW50ZXJuZWRSZXN1bHQuY3VycmVudDtcbiAgICB9LCBbaW50ZXJuZWRRdWVyeSwgaW5kZXhSZXZpc2lvbl0pO1xufVxuXG4vKiogUGVyZm9ybSBhIGxpdmUsIHN5bmNocm9ub3VzIHF1ZXJ5IHdoaWNoIHVwZGF0ZXMgaXRzIHJlc3VsdHMgd2hlbmV2ZXIgdGhlIGJhY2tpbmcgcXVlcnkgd291bGQgY2hhbmdlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRnVsbFF1ZXJ5KFxuICAgIGRhdGFjb3JlOiBEYXRhY29yZSxcbiAgICBxdWVyeTogSW5kZXhRdWVyeSxcbiAgICBzZXR0aW5ncz86IFVzZVF1ZXJ5U2V0dGluZ3Ncbik6IFNlYXJjaFJlc3VsdDxJbmRleGFibGU+IHtcbiAgICByZXR1cm4gdHJ5VXNlRnVsbFF1ZXJ5KGRhdGFjb3JlLCBxdWVyeSwgc2V0dGluZ3MpLm9yRWxzZVRocm93KChlKSA9PiBcIkZhaWxlZCB0byBzZWFyY2g6IFwiICsgZSk7XG59XG5cbi8qKiBTaW1wbGllciB2ZXJzaW9uIG9mIHVzZUZ1bGxRdWVyeSB3aGljaCBqdXN0IGRpcmVjdGx5IHJldHVybnMgcmVzdWx0cy5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeVVzZVF1ZXJ5KFxuICAgIGRhdGFjb3JlOiBEYXRhY29yZSxcbiAgICBxdWVyeTogSW5kZXhRdWVyeSxcbiAgICBzZXR0aW5ncz86IFVzZVF1ZXJ5U2V0dGluZ3Ncbik6IFJlc3VsdDxJbmRleGFibGVbXSwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRyeVVzZUZ1bGxRdWVyeShkYXRhY29yZSwgcXVlcnksIHNldHRpbmdzKS5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnJlc3VsdHMpO1xufVxuXG4vKiogU2ltcGxpZXIgdmVyc2lvbiBvZiB1c2VGdWxsUXVlcnkgd2hpY2gganVzdCBkaXJlY3RseSByZXR1cm5zIHJlc3VsdHMuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWVyeShkYXRhY29yZTogRGF0YWNvcmUsIHF1ZXJ5OiBJbmRleFF1ZXJ5LCBzZXR0aW5ncz86IFVzZVF1ZXJ5U2V0dGluZ3MpOiBJbmRleGFibGVbXSB7XG4gICAgcmV0dXJuIHVzZUZ1bGxRdWVyeShkYXRhY29yZSwgcXVlcnksIHNldHRpbmdzKS5yZXN1bHRzO1xufVxuXG4vKiogRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHNldHMgb2Ygb2JqZWN0cyBhcmUgdGhlIHNhbWUuIE9ubHkgdXNlcyByZXZpc2lvbiBjb21wYXJpc29uIGZvciBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIHNhbWVPYmplY3RzKG9sZDogSW5kZXhhYmxlW10sIGluY29taW5nOiBJbmRleGFibGVbXSkge1xuICAgIGlmIChvbGQubGVuZ3RoICE9IGluY29taW5nLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgb2xkczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIGZvciAoY29uc3QgaW5kZXhhYmxlIG9mIG9sZCkge1xuICAgICAgICBvbGRzW2luZGV4YWJsZS4kaWRdID0gaW5kZXhhYmxlLiRyZXZpc2lvbiE7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbmRleGFibGUgb2YgaW5jb21pbmcpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvbGRzW2luZGV4YWJsZS4kaWRdO1xuICAgICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBpbmRleGFibGUuJHJldmlzaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogXCJJbnRlcm5zXCIgdGhlIGluY29taW5nIHZhbHVlLCByZXR1cm5pbmcgdGhlIG9sZGVzdCBlcXVhbCBpbnN0YW5jZS4gVGhpcyBpcyBhIHRyaWNrIHRvIGltcHJvdmUgUmVhY3QgZGlmZmluZ1xuICogIGJlaGF2aW9yLCBhcyB0d28gb2JqZWN0cyB3aGljaCBhcmUgZXF1YWxzIHZpYSBlcXVhbGl0eShhLCBiKSB3aWxsIHJldHVybiB0aGUgc2FtZSBvYmplY3QgcmVmZXJlbmNlIGFmdGVyIGJlaW5nXG4gKiAgaW50ZXJuZWQuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbnRlcm5pbmc8VD4odmFsdWU6IFQsIGVxdWFsaXR5OiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbik6IFQge1xuICAgIGNvbnN0IHJlZiA9IHVzZVJlZjxUPigpO1xuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgfHwgIWVxdWFsaXR5KHJlZi5jdXJyZW50LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG5cbi8qKiBVc2UgYSBzdGFibGUgY2FsbGJhY2sgd2hpY2ggaGlkZXMgbXV0YWJsZSBzdGF0ZSBiZWhpbmQgYSBzdGFibGUgcmVmZXJlbmNlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3RhYmxlQ2FsbGJhY2s8VD4oY2FsbGJhY2s6IFQsIGRlcHM6IGFueVtdKTogVCB7XG4gICAgY29uc3QgcmVmID0gdXNlUmVmPFQ+KCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICByZWYuY3VycmVudCA9IGNhbGxiYWNrO1xuICAgIH0sIFtjYWxsYmFjaywgLi4uZGVwc10pO1xuXG4gICAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgICAgICAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgIChyZWYuY3VycmVudCBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgICAgICB9LFxuICAgICAgICBbcmVmXVxuICAgICkgYXMgVDtcbn1cblxuY29uc3QgTk9fT1BfVVBEQVRFID0gKHg6IGFueSkgPT4ge307XG5cbi8qKiBVc2Ugc3RhdGUgdGhhdCB3aWxsIGRlZmF1bHQgdG8gYW4gZXh0ZXJuYWwgY29udHJvbGxlZCB2YWx1ZSBpZiBzZXQ7IG90aGVyd2lzZSwgd2lsbCB0cmFjayBhbiBpbnRlcm5hbCB2YWx1ZS5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWRTdGF0ZTxUPihcbiAgICBpbml0aWFsU3RhdGU6IFQsXG4gICAgb3ZlcnJpZGU/OiBULFxuICAgIHVwZGF0ZT86ICh2YWx1ZTogVCkgPT4gdm9pZFxuKTogW1QsICh2YWx1ZTogVCkgPT4gdm9pZF0ge1xuICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUob3ZlcnJpZGUgPz8gaW5pdGlhbFN0YXRlKTtcbiAgICBpZiAob3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RhdGUgIT0gb3ZlcnJpZGUpIHNldFN0YXRlKG92ZXJyaWRlKTtcblxuICAgICAgICByZXR1cm4gW292ZXJyaWRlLCB1cGRhdGUgPz8gTk9fT1BfVVBEQVRFXTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXRTdGF0ZVdpdGhVcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHZhbHVlOiBUKSA9PiB7XG4gICAgICAgICAgICBzZXRTdGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAodXBkYXRlKSB1cGRhdGUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbc2V0U3RhdGUsIHVwZGF0ZV1cbiAgICApO1xuXG4gICAgcmV0dXJuIFtzdGF0ZSwgc2V0U3RhdGVXaXRoVXBkYXRlXTtcbn1cbiIsICJpbXBvcnQgeyBEYXRhY29yZSB9IGZyb20gXCJpbmRleC9kYXRhY29yZVwiO1xuaW1wb3J0IHsgUHJvcHNXaXRoQ2hpbGRyZW4sIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlSW5kZXhVcGRhdGVzIH0gZnJvbSBcIi4vaG9va3NcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBWTm9kZSwgY3JlYXRlRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UsIExpdCB9IGZyb20gXCIuL21hcmtkb3duXCI7XG5cbmltcG9ydCBcIi4vZXJyb3JzLmNzc1wiO1xuXG5mdW5jdGlvbiBMb2FkaW5nUHJvZ3Jlc3MoeyBkYXRhY29yZSB9OiB7IGRhdGFjb3JlOiBEYXRhY29yZSB9KSB7XG4gICAgdXNlSW5kZXhVcGRhdGVzKGRhdGFjb3JlLCB7IGRlYm91bmNlOiAyNTAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8cD5cbiAgICAgICAgICAgIHtkYXRhY29yZS5pbml0aWFsaXplcj8uaW5pdGlhbGl6ZWQgPz8gMH0gLyB7ZGF0YWNvcmUuaW5pdGlhbGl6ZXI/LnRhcmdldFRvdGFsID8/IDB9XG4gICAgICAgIDwvcD5cbiAgICApO1xufVxuXG4vKiogTG9hZGluZyBib3VuZGFyeSB3aGljaCBzaG93cyBhIGxvYWRpbmcgc2NyZWVuIHdoaWxlIERhdGFjb3JlIGlzIGluaXRpYWxpemluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2FkaW5nQm91bmRhcnkoeyBjaGlsZHJlbiwgZGF0YWNvcmUgfTogUHJvcHNXaXRoQ2hpbGRyZW48eyBkYXRhY29yZTogRGF0YWNvcmUgfT4pIHtcbiAgICBjb25zdCBbaW5pdGlhbGl6ZWQsIHNldEluaXRpYWxpemVkXSA9IHVzZVN0YXRlKGRhdGFjb3JlLmluaXRpYWxpemVkKTtcblxuICAgIC8vIFN5bmNzIHRoZSBib3VuZGFyeSB3aXRoIGRhdGFjb3JlJ3MgaW5pdGlhbGl6YXRpb24gc3RhdGUuXG4gICAgLy8gVE9ETzogQWRkIGFuIGV2ZW50IHRvIGRhdGFjb3JlIHdoaWNoIGluZGljYXRlcyB3aGVuIGEgcmVpbmRleCBoYXBwZW5zIChpLmUuLCBpbml0aWFsaXplZFxuICAgIC8vIHJldHVybnMgYmFjayB0byAnZmFsc2UnKS5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWYgPSBkYXRhY29yZS5vbihcImluaXRpYWxpemVkXCIsICgpID0+IHNldEluaXRpYWxpemVkKHRydWUpKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGRhdGFjb3JlLm9mZnJlZihyZWYpO1xuICAgIH0sIFtpbml0aWFsaXplZCwgZGF0YWNvcmVdKTtcblxuICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgICByZXR1cm4gPD57Y2hpbGRyZW59PC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLWxvYWRpbmctYm91bmRhcnlcIj5cbiAgICAgICAgICAgICAgICA8aDQgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbG9hZGluZy10aXRsZVwiPkRhdGFjb3JlIGlzIGdldHRpbmcgcmVhZHkuLi48L2g0PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nUHJvZ3Jlc3MgZGF0YWNvcmU9e2RhdGFjb3JlfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgdmFuaWxsYSBqYXZhc3JpcHQgZnVuY3Rpb24gbGF6aWx5IG9uZSB0aW1lLiBNYWlubHkgdXNlZnVsIHRvIG9ubHkgcnVuIGEgc2NyaXB0XG4gKiBvbmNlIHRoZSBwYXJlbnQgbG9hZGluZyBib3VuZGFyeSBpcyBhY3R1YWxseSByZWFkeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNjcmlwdENvbnRhaW5lcih7XG4gICAgZXhlY3V0b3IsXG4gICAgc291cmNlUGF0aCxcbn06IHtcbiAgICBleGVjdXRvcjogKCkgPT4gUHJvbWlzZTxMaXRlcmFsIHwgVk5vZGUgfCBGdW5jdGlvbj47XG4gICAgc291cmNlUGF0aDogc3RyaW5nO1xufSkge1xuICAgIGNvbnN0IFtlbGVtZW50LCBzZXRFbGVtZW50XSA9IHVzZVN0YXRlPEpTWC5FbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRFbGVtZW50KHVuZGVmaW5lZCk7XG4gICAgICAgIHNldEVycm9yKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgZXhlY3V0b3IoKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gc2V0RWxlbWVudChtYWtlUmVuZGVyYWJsZUVsZW1lbnQocmVzdWx0LCBzb3VyY2VQYXRoKSkpXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBzZXRFcnJvcihlcnJvcikpO1xuICAgIH0sIFtleGVjdXRvcl0pO1xuXG4gICAgLy8gUHJvcG9nYXRlIGVycm9yIHVwd2FyZHMuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiA8PntlbGVtZW50ID8/IDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIjwgVmlldyBpcyByZW5kZXJpbmcgPlwiIC8+fTwvPjtcbn1cblxuLyoqIE1ha2UgYSByZW5kZXJhYmxlIGVsZW1lbnQgZnJvbSB0aGUgcmV0dXJuZWQgb2JqZWN0OyBpZiB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIG5vdCBwb3NzaWJsZSwgdGhyb3cgYW4gZXhjZXB0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VSZW5kZXJhYmxlRWxlbWVudChvYmplY3Q6IGFueSwgc291cmNlUGF0aDogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob2JqZWN0LCB7fSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICAob2JqZWN0IGFzIGFueVtdKS5tYXAoKHgpID0+IG1ha2VSZW5kZXJhYmxlRWxlbWVudCh4LCBzb3VyY2VQYXRoKSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gPExpdCB2YWx1ZT17b2JqZWN0fSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSAvPjtcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBDb2xsZWN0aW9uIG9mIGRpcmVjdCBBUEktZmFjaW5nIGVsZW1lbnRzLiBUaGlzIGVzc2VudGlhbGx5IHNlcnZlcyBhcyBhIGxheWVyIG9mIGluZGlyZWN0aW9uIHRvIGludGVybmFsIHR5cGVzLCBzbyB0aGF0IHRoZSBpbnRlcm5hbCB0eXBlcyBjYW4gYmVcbiAqIGNoYW5nZWQgd2l0aG91dCBicmVha2luZyB0aGUgQVBJLlxuICpcbiAqIEBtb2R1bGUgdWlcbiAqL1xuXG5pbXBvcnQgeyBIVE1MQXR0cmlidXRlcywgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmltcG9ydCBcImFwaS91aS9sYXlvdXQuY3NzXCI7XG5cbi8qKiBDcmVhdGVzIGEgdmVydGljYWwgZmxleGJveCBcInN0YWNrXCIgb2YgZWxlbWVudHMuXG4gKlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFN0YWNrKFxuICAgIHByb3BzOiBIVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4gJiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAganVzdGlmeT86IHN0cmluZztcbiAgICAgICAgYWxpZ24/OiBzdHJpbmc7XG4gICAgICAgIHN0eWxlPzogc3RyaW5nO1xuICAgIH1cbikge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBqdXN0aWZ5LCBhbGlnbiwgc3R5bGUsIGNoaWxkcmVuLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICBjb25zdCBleHRyYVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBzdHlsZSA9IFwiXCI7XG4gICAgICAgIGlmIChqdXN0aWZ5KSBzdHlsZSArPSBganVzdGlmeS1jb250ZW50OiAke2p1c3RpZnl9O2A7XG4gICAgICAgIGlmIChhbGlnbikgc3R5bGUgKz0gYGFsaWduLWl0ZW1zOiAke2FsaWdufTtgO1xuXG4gICAgICAgIHJldHVybiBzdHlsZS5sZW5ndGggPT0gMCA/IHVuZGVmaW5lZCA6IHN0eWxlO1xuICAgIH0sIFtqdXN0aWZ5LCBhbGlnbl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgPyBjbGFzc05hbWUgKyBcIiBkYy1zdGFja1wiIDogXCJkYy1zdGFja1wifVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlID8gZXh0cmFTdHlsZSArIHN0eWxlIDogZXh0cmFTdHlsZX1cbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaG9yaXpvbnRhbCBmbGV4Ym94IFwiZ3JvdXBpbmdcIiBvZiBlbGVtZW50cy5cbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gR3JvdXAoXG4gICAgcHJvcHM6IEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiAmIHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBqdXN0aWZ5Pzogc3RyaW5nO1xuICAgICAgICBhbGlnbj86IHN0cmluZztcbiAgICAgICAgc3R5bGU/OiBzdHJpbmc7XG4gICAgfVxuKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGp1c3RpZnksIGFsaWduLCBzdHlsZSwgY2hpbGRyZW4sIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IGV4dHJhU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IHN0eWxlID0gXCJcIjtcbiAgICAgICAgaWYgKGp1c3RpZnkpIHN0eWxlICs9IGBqdXN0aWZ5LWNvbnRlbnQ6ICR7anVzdGlmeX07YDtcbiAgICAgICAgaWYgKGFsaWduKSBzdHlsZSArPSBgYWxpZ24taXRlbXM6ICR7YWxpZ259O2A7XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlLmxlbmd0aCA9PSAwID8gdW5kZWZpbmVkIDogc3R5bGU7XG4gICAgfSwgW2p1c3RpZnksIGFsaWduXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSA/IGNsYXNzTmFtZSArIFwiIGRjLWdyb3VwXCIgOiBcImRjLWdyb3VwXCJ9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGUgPyBleHRyYVN0eWxlICsgc3R5bGUgOiBleHRyYVN0eWxlfVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cbiIsICIvKiogQmFzaWMgVUkgY29tcG9uZW50cyB0aGF0IGhhdmUgc2ltcGxlIE9ic2lkaWFuIHRoZW1pbmcuXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmltcG9ydCB7IENvbXBvbmVudENoaWxkcmVuIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgc2V0SWNvbiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlZFN0YXRlIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5cbmltcG9ydCBcIi4vYmFzaWNzLmNzc1wiO1xuXG4vKiogVmFyaW91cyBpbnRlbnRzIGZvciBidXR0b25zIGFuZCBvdGhlciBpbnRlcmFjdGl2ZSBlbGVtZW50cy4gKi9cbmV4cG9ydCB0eXBlIEludGVudCA9IFwiZXJyb3JcIiB8IFwid2FyblwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIjtcbmV4cG9ydCB0eXBlIE9taXR0YWJsZSA9IFwidmFsdWVcIiB8IFwiZGVmYXVsdFZhbHVlXCI7XG5leHBvcnQgY29uc3QgSU5URU5UX0NMQVNTRVM6IFJlY29yZDxJbnRlbnQsIHN0cmluZz4gPSB7XG4gICAgZXJyb3I6IFwiZGMtaW50ZW50LWVycm9yXCIsXG4gICAgd2FybjogXCJkYy1pbnRlbnQtd2FyblwiLFxuICAgIGluZm86IFwiZGMtaW50ZW50LWluZm9cIixcbiAgICBzdWNjZXNzOiBcImRjLWludGVudC1zdWNjZXNzXCIsXG59O1xuXG4vKiogV3JhcHBlciBmb3IgYSByZWd1bGFyIEhUTUwgYnV0dG9uIHdpdGggc29tZSBkZWZhdWx0IGNsYXNzZXMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gQnV0dG9uKFxuICAgIHByb3BzOiB7IGNsYXNzTmFtZT86IHN0cmluZzsgaW50ZW50PzogSW50ZW50OyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MQnV0dG9uRWxlbWVudD5cbikge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBpbnRlbnQsIGNoaWxkcmVuLCAuLi5mb3J3YXJkaW5nUHJvcHMgfSA9IHByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJkYy1idXR0b25cIiwgaW50ZW50ID8gSU5URU5UX0NMQVNTRVNbaW50ZW50XSA6IHVuZGVmaW5lZCwgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgIHsuLi5mb3J3YXJkaW5nUHJvcHN9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgKTtcbn1cblxuLyoqIEEgc2ltcGxlIHRleHRib3ggd2hpY2ggYWNjZXB0cyB0ZXh0LlxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUZXh0Ym94KHByb3BzOiB7IGNsYXNzTmFtZT86IHN0cmluZyB9ICYgUmVhY3QuSFRNTFByb3BzPEhUTUxJbnB1dEVsZW1lbnQ+KSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5mb3J3YXJkaW5nUHJvcHMgfSA9IHByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCB0eXBlPXtwcm9wcy50eXBlID8/IFwidGV4dFwifSBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtdGV4dGJveFwiLCBjbGFzc05hbWUpfSB7Li4uZm9yd2FyZGluZ1Byb3BzfSAvPlxuICAgICk7XG59XG5cbi8qKiBBIGNoZWNrYm94IHRoYXQgY2FuIGJlIGNoZWNrZWQgYW5kIHVuY2hlY2tlZC5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDaGVja2JveChcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW47XG4gICAgICAgIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgICAgICAgb25DaGVja0NoYW5nZT86IChjaGVja2VkOiBib29sZWFuKSA9PiB2b2lkO1xuICAgICAgICBjaGlsZHJlbj86IENvbXBvbmVudENoaWxkcmVuO1xuICAgIH0gJiBSZWFjdC5IVE1MUHJvcHM8SFRNTElucHV0RWxlbWVudD5cbikge1xuICAgIGNvbnN0IHtcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgIGNoZWNrZWQ6IGlzQ2hlY2tlZCxcbiAgICAgICAgb25DaGVja0NoYW5nZSxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIC4uLmZvcndhcmRpbmdQcm9wc1xuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBbY2hlY2tlZCwgc2V0Q2hlY2tlZF0gPSB1c2VDb250cm9sbGVkU3RhdGUoZGVmYXVsdENoZWNrZWQgPz8gZmFsc2UsIGlzQ2hlY2tlZCwgb25DaGVja0NoYW5nZSk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKChldmVudDogYW55KSA9PiBzZXRDaGVja2VkKGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hlY2tlZCksIFtzZXRDaGVja2VkXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRjLWNoZWNrYm94XCIsIGRpc2FibGVkID8gXCJkYy1jaGVja2JveC1kaXNhYmxlZFwiIDogdW5kZWZpbmVkLCBjbGFzc05hbWUpfT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ9e2RlZmF1bHRDaGVja2VkfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4uZm9yd2FyZGluZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9sYWJlbD5cbiAgICApO1xufVxuXG4vKiogV3JhcHBlciBmb3IgYSBzbGlkZXIgKHJhbmdlIGlucHV0KSB3aXRoIHNvbWUgZGVmYXVsdCBjbGFzc2VzLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNsaWRlcihcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIG1pbj86IG51bWJlcjtcbiAgICAgICAgbWF4PzogbnVtYmVyO1xuICAgICAgICBzdGVwPzogbnVtYmVyO1xuICAgICAgICB2YWx1ZT86IG51bWJlcjtcbiAgICAgICAgZGVmYXVsdFZhbHVlPzogbnVtYmVyO1xuICAgICAgICBvblZhbHVlQ2hhbmdlPzogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgfSAmIE9taXQ8UmVhY3QuSFRNTFByb3BzPEhUTUxJbnB1dEVsZW1lbnQ+LCBPbWl0dGFibGU+XG4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwgbWluID0gMCwgbWF4ID0gMTAsIHN0ZXAgPSAxLCB2YWx1ZSwgZGVmYXVsdFZhbHVlLCBvblZhbHVlQ2hhbmdlLCAuLi5mb3J3YXJkaW5nUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtzbGlkZXIsIHNldFNsaWRlcl0gPSB1c2VDb250cm9sbGVkU3RhdGUoZGVmYXVsdFZhbHVlID8/IDAsIHZhbHVlLCBvblZhbHVlQ2hhbmdlKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBhbnkpID0+IHNldFNsaWRlcihwYXJzZUZsb2F0KGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpKSwgW3NldFNsaWRlcl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17c2xpZGVyLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtc2xpZGVyXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgICBtaW49e21pbn1cbiAgICAgICAgICAgIG1heD17bWF4fVxuICAgICAgICAgICAgc3RlcD17c3RlcH1cbiAgICAgICAgICAgIHZhbHVlPXtzbGlkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgICB7Li4uZm9yd2FyZGluZ1Byb3BzfVxuICAgICAgICAvPlxuICAgICk7XG59XG5cbi8qKiBXcmFwcGVyIGZvciBhIHN3aXRjaCAodG9nZ2xlKSBjb21wb25lbnQgd2l0aCBzb21lIGRlZmF1bHQgY2xhc3Nlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTd2l0Y2goXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgICAgIGNoZWNrZWQ/OiBib29sZWFuO1xuICAgICAgICBkZWZhdWx0Q2hlY2tlZD86IGJvb2xlYW47XG4gICAgICAgIG9uVG9nZ2xlQ2hhbmdlPzogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PlxuKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGRpc2FibGVkLCBkZWZhdWx0Q2hlY2tlZCwgY2hlY2tlZCwgb25Ub2dnbGVDaGFuZ2UsIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3RvZ2dsZWQsIHNldFRvZ2dsZWRdID0gdXNlQ29udHJvbGxlZFN0YXRlKGRlZmF1bHRDaGVja2VkID8/IGZhbHNlLCBjaGVja2VkLCBvblRvZ2dsZUNoYW5nZSk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKChldmVudDogYW55KSA9PiBzZXRUb2dnbGVkKGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hlY2tlZCksIFtzZXRUb2dnbGVkXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXG4gICAgICAgICAgICAgICAgXCJkYy1zd2l0Y2ggY2hlY2tib3gtY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgdG9nZ2xlZCA/IFwiaXMtZW5hYmxlZFwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkID8gXCJkYy1zd2l0Y2gtZGlzYWJsZWRcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGMtc3dpdGNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17dG9nZ2xlZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi5mb3J3YXJkaW5nUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuICAgICk7XG59XG5cbi8qKiBXcmFwcGVyIGZvciBhIHNlbGVjdCBjb21wb25lbnQgd2l0aCBzb21lIGRlZmF1bHQgY2xhc3Nlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWYW5pbGxhU2VsZWN0KFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgb3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgICAgICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcbiAgICAgICAgb25WYWx1ZUNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIH0gJiBSZWFjdC5IVE1MUHJvcHM8SFRNTFNlbGVjdEVsZW1lbnQ+XG4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwgb3B0aW9ucyA9IFtdLCB2YWx1ZSwgZGVmYXVsdFZhbHVlLCBvblZhbHVlQ2hhbmdlLCAuLi5mb3J3YXJkaW5nUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtzZWxlY3RlZFZhbHVlLCBzZXRTZWxlY3RlZFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKHZhbHVlID8/IGRlZmF1bHRWYWx1ZSA/PyBcIlwiKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHNldFNlbGVjdGVkVmFsdWUodmFsdWUpO1xuICAgIH0sIFt2YWx1ZV0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRjLXNlbGVjdCBkcm9wZG93blwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgdmFsdWU9e3NlbGVjdGVkVmFsdWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZFZhbHVlKGUuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZSAmJiBvblZhbHVlQ2hhbmdlKGUuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLmZvcndhcmRpbmdQcm9wc31cbiAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSB2YWx1ZT17b3B0aW9uLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICApO1xufVxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgYW4gaWNvblxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEljb24ocHJvcHM6IHsgY2xhc3NOYW1lPzogc3RyaW5nOyBpY29uOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBpY29uIH0gPSBwcm9wcztcbiAgICBjb25zdCByZWYgPSBSZWFjdC5jcmVhdGVSZWY8SFRNTFNwYW5FbGVtZW50PigpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBzZXRJY29uKHJlZi5jdXJyZW50LCBpY29uKTtcbiAgICAgICAgfVxuICAgIH0sIFtyZWZdKTtcblxuICAgIHJldHVybiA8c3BhbiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRjLWljb25cIiwgY2xhc3NOYW1lKX0gZGF0YS1pY29uPXtpY29ufSAvPjtcbn1cblxuLyoqXG4gKiAgQXBwZW5kcyBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gYSBiYXNpYyBmaXhlZCBjbGFzcy5cbiAqXG4gKiBAZ3JvdXAgVXRpbGl0aWVzXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVDbGFzc2VzKGZpeGVkOiBzdHJpbmcsIC4uLnJlc3Q6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pIHtcbiAgICBjb25zdCBub25lbXB0eSA9IHJlc3QuZmlsdGVyKChjKSA9PiBjICE9PSB1bmRlZmluZWQpO1xuICAgIGlmIChub25lbXB0eS5sZW5ndGggPT09IDApIHJldHVybiBmaXhlZDtcblxuICAgIHJldHVybiBbZml4ZWQsIC4uLm5vbmVtcHR5XS5qb2luKFwiIFwiKTtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcblxuLyoqIEFueSBpbmRleGFibGUgZmllbGQsIHdoaWNoIG11c3QgaGF2ZSBhIGZldyBpbmRleC1yZWxldmFudCBwcm9wZXJ0aWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleGFibGUge1xuICAgIC8qKiBUaGUgb2JqZWN0IHR5cGVzIHRoYXQgdGhpcyBpbmRleGFibGUgaXMuICovXG4gICAgJHR5cGVzOiBzdHJpbmdbXTtcbiAgICAvKiogVGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0LCBzdWNoIGFzIGBQYWdlYCBvciBgU2VjdGlvbmAuIFVzZWQgaW4gdmlzdWFsaXphdGlvbnMuICovXG4gICAgJHR5cGVuYW1lOiBzdHJpbmc7XG4gICAgLyoqIFRoZSB1bmlxdWUgaW5kZXggSUQgZm9yIHRoaXMgb2JqZWN0LiAqL1xuICAgICRpZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleGFibGUgb2JqZWN0IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzIG9iamVjdC4gT25seSBzZXQgYWZ0ZXIgdGhlIG9iamVjdCBpcyBhY3R1YWxseSBpbmRleGVkLlxuICAgICAqL1xuICAgICRwYXJlbnQ/OiBJbmRleGFibGU7XG4gICAgLyoqIElmIHByZXNlbnQsIHRoZSByZXZpc2lvbiBpbiB0aGUgaW5kZXggb2YgdGhpcyBvYmplY3QuICovXG4gICAgJHJldmlzaW9uPzogbnVtYmVyO1xuICAgIC8qKiBUaGUgZmlsZSB0aGF0IHRoaXMgaW5kZXhhYmxlIHdhcyBkZXJpdmVkIGZyb20sIGlmIGZpbGUtYmFja2VkLiAqL1xuICAgICRmaWxlPzogc3RyaW5nO1xufVxuXG4vKiogTWV0YWRhdGEgZm9yIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBsaW5raW5nLiAqL1xuZXhwb3J0IGNvbnN0IExJTktBQkxFX1RZUEUgPSBcImxpbmthYmxlXCI7XG4vKipcbiAqIHtAaW5oZXJpdERvYyBMSU5LQUJMRV9UWVBFfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmthYmxlIHtcbiAgICAvKiogQSBsaW5rIHRvIHRoaXMgbGlua2FibGUgb2JqZWN0LiAqL1xuICAgICRsaW5rOiBMaW5rO1xufVxuXG4vKiogR2VuZXJhbCBtZXRhZGF0YSBmb3IgYW55IGZpbGUuICovXG5leHBvcnQgY29uc3QgRklMRV9UWVBFID0gXCJmaWxlXCI7XG4vKipcbiAqIHtAaW5oZXJpdERvYyBGSUxFX1RZUEV9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZSBleHRlbmRzIExpbmthYmxlIHtcbiAgICAvKiogVGhlIHBhdGggdGhpcyBmaWxlIGV4aXN0cyBhdC4gKi9cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgY3JlYXRlZC4gKi9cbiAgICAkY3RpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgbW9kaWZpZWQuICovXG4gICAgJG10aW1lOiBEYXRlVGltZTtcbiAgICAvKiogT2JzaWRpYW4tcHJvdmlkZWQgc2l6ZSBvZiB0aGlzIHBhZ2UgaW4gYnl0ZXMuICovXG4gICAgJHNpemU6IG51bWJlcjtcbiAgICAvKiogVGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICAkZXh0ZW5zaW9uOiBzdHJpbmc7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3IgdGFnZ2FibGUgb2JqZWN0cy4gKi9cbmV4cG9ydCBjb25zdCBUQUdHQUJMRV9UWVBFID0gXCJ0YWdnYWJsZVwiO1xuLyoqXG4gKiB7QGluaGVyaXREb2MgVEFHR0FCTEVfVFlQRX1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdnYWJsZSB7XG4gICAgLyoqIFRoZSBleGFjdCB0YWdzIG9uIHRoaXMgb2JqZWN0LiAoI2EvYi9jIG9yICNmb28vYmFyKS4gKi9cbiAgICAkdGFnczogc3RyaW5nW107XG59XG5cbi8qKiBNZXRhZGF0YSBmb3Igb2JqZWN0cyB3aGljaCBjYW4gbGluayB0byBvdGhlciB0aGluZ3MuICovXG5leHBvcnQgY29uc3QgTElOS0JFQVJJTkdfVFlQRSA9IFwibGlua3NcIjtcbi8qKlxuICoge0Bpbmhlcml0RG9jIExJTktCRUFSSU5HX1RZUEV9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2JlYXJpbmcge1xuICAgIC8qKiBUaGUgbGlua3MgaW4gdGhpcyBmaWxlLiAqL1xuICAgICRsaW5rczogTGlua1tdO1xufVxuXG4vKipcbiAqIEFsbCBzdXBwb3J0ZWQgZXh0ZW5zaW9ucy4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmVjb21lIGEgZHluYW1pYyBsb29rdXAgdGFibGUgYW5kIG5vdCBqdXN0XG4gKiBhIGZpeGVkIGxpc3QgYXQgc29tZSBwb2ludCwgZXNwZWNpYWxseSBpZiB3ZSBhZGQgdGhlIGFiaWxpdHkgdG8gdHVybiBpbmRleGluZyBvbi9vZmYuXG4gKi9cbmV4cG9ydCBjb25zdCBJTkRFWEFCTEVfRVhURU5TSU9OUyA9IG5ldyBTZXQoW1wibWRcIiwgXCJtYXJrZG93blwiLCBcImNhbnZhc1wiXSk7XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGFwaVxuICovXG5pbXBvcnQgeyBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCIuLi9pbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IElubGluZUZpZWxkIH0gZnJvbSBcImluZGV4L2ltcG9ydC9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7IEZyb250bWF0dGVyRW50cnkgfSBmcm9tIFwiaW5kZXgvdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IExpbmVTcGFuIH0gZnJvbSBcImluZGV4L3R5cGVzL2pzb24vbWFya2Rvd25cIjtcblxuLyoqIFRoZSBzb3VyY2Ugb2YgYSBmaWVsZCwgdXNlZCB3aGVuIGRldGVybWluaW5nIHdoYXQgZmlsZXMgdG8gb3ZlcndyaXRlIGFuZCBob3cuICovXG5leHBvcnQgdHlwZSBQcm92ZW5hbmNlID1cbiAgICB8IHsgdHlwZTogXCJmcm9udG1hdHRlclwiOyBmaWxlOiBzdHJpbmc7IGtleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogXCJpbmxpbmUtZmllbGRcIjsgZmlsZTogc3RyaW5nOyBsaW5lOiBudW1iZXI7IGtleTogc3RyaW5nIH07XG5cbi8qKlxuICogR2VuZXJhbCBkZWZpbml0aW9uIGZvciBhIGZpZWxkLiBQcm92aWRlcyB0aGUgZmllbGQga2V5LCB2YWx1ZSwgYXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBvbiBpdCdzIHNvdXJjZSBhbmQgaG93IGl0IGNhbiBiZSBlZGl0ZWQuXG4gKiBAZ3JvdXAgQ29tbW9uIFR5cGVzXG4gKiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZCB7XG4gICAgLyoqIFRoZSBjYW5vbmljYWwga2V5IG5hbWUgZm9yIHRoZSBmaWVsZCAoaS5lLiwgYXMgaXQgYWN0dWFsbHkgc2hvd3MgdXAgaW4gdGhlIGRhdGEgc3RydWN0dXJlKS4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4gKi9cbiAgICB2YWx1ZTogTGl0ZXJhbDtcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgZmllbGQgYmVmb3JlIHBhcnNpbmcsIGlmIHJlbGV2YW50LiAqL1xuICAgIHJhdz86IHN0cmluZztcbiAgICAvKiogSWYgcHJlc2VudCwgZGVzY3JpYmVzIHdoZXJlIHRoZSBmaWVsZCBjYW1lIGZyb20gaW4gcHJlY2lzZSBkZXRhaWwsIGFsbG93aW5nIHRoZSBmaWVsZCB0byBiZSBlZGl0ZWQuICovXG4gICAgcHJvdmVuYW5jZT86IFByb3ZlbmFuY2U7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3Igb2JqZWN0cyB3aGljaCBhcmUgYW5ub3RhdGVkIHdpdGggZmllbGRzLiAqL1xuZXhwb3J0IGNvbnN0IEZJRUxEQkVBUklOR19UWVBFID0gXCJmaWVsZHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRiZWFyaW5nIHtcbiAgICAvKiogUmV0dXJuIGEgbGlzdCBvZiBhbGwgZmllbGRzLiBUaGlzIG1heSBiZSBjb21wdXRlZCBlYWdlcmx5LCBzbyBjYWNoZSB0aGlzIHZhbHVlIGZvciByZXBlYXRlZCBvcGVyYXRpb25zLiAqL1xuICAgIGZpZWxkczogRmllbGRbXTtcblxuICAgIC8qKiBGZXRjaCBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUgaWYgaXQgaXMgcHJlc2VudCBvbiB0aGlzIG9iamVjdC4gKi9cbiAgICBmaWVsZChrZXk6IHN0cmluZyk6IEZpZWxkIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEZpZWxkYmVhcmluZ3Mge1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0ZpZWxkYmVhcmluZyhvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBGaWVsZGJlYXJpbmcge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqZWN0ICE9IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIiAmJiBcImZpZWxkXCIgaW4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3RbXCJmaWVsZFwiXSA9PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGEga2V5IGZyb20gYSBnZW5lcmljIG1hcCBvciBmaWVsZGJlYXJpbmcgb2JqZWN0LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXQob2JqZWN0OiBGaWVsZGJlYXJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiwga2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRmllbGRiZWFyaW5nKG9iamVjdCkpIHJldHVybiBvYmplY3QuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgICAgIGVsc2UgcmV0dXJuIG9iamVjdFtrZXldO1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXRXaXRoRGVmYXVsdDxUIGV4dGVuZHMgeyAkcG9zaXRpb246IExpbmVTcGFuIH0gJiBJbmRleGFibGU+KFxuICAgICAgICBvYmplY3Q6IFQsXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICBkZWZhdWx0VmFsdWU/OiBMaXRlcmFsXG4gICAgKTogRmllbGQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogZGVmYXVsdFZhbHVlID8/IG51bGwsXG4gICAgICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJpbmxpbmUtZmllbGRcIixcbiAgICAgICAgICAgICAgICBmaWxlOiBvYmplY3QuJGZpbGUhLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBsaW5lOiBvYmplY3QuJHBvc2l0aW9uLmVuZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKipcbiAqIEdlbmVyaWMgZnVuY3Rpb24gd2hpY2ggZXh0cmFjdCBmaWVsZHMuIElmIG5vIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgcmV0dXJuIGFsbCBmaWVsZHM7IG90aGVyd2lzZSxcbiAqIGl0IHNob3VsZCByZXR1cm4gdGhlIGZpZWxkIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXkuXG4gKlxuICogS2V5cyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSB0byBtYXRjaCBPYnNpZGlhbiBzdGFuZGFyZCBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IHR5cGUgRmllbGRFeHRyYWN0b3I8VD4gPSAob2JqZWN0OiBULCBrZXk/OiBzdHJpbmcpID0+IEZpZWxkW107XG5cbi8qKiBRdWljayB1dGlsaXRpZXMgZm9yIGdlbmVyYXRpbmcgZmllbGRzIGFuZCBkb2luZyBzZWFyY2hlcyBvdmVyIHRoZW0uXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgRXh0cmFjdG9ycyB7XG4gICAgLyoqIENoZWNrIGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgb2JqZWN0IGlzIG5vdCBleGNsdWRlZCBhbmQgaXMgYSBwbGFpbiBwcm9wZXJ0eSAobm90IGEgZnVuY3Rpb24gb3Igb3RoZXIgc3BlY2lhbCBvYmplY3QpLiAqL1xuICAgIGZ1bmN0aW9uIGlzVmFsaWRJbnRyaW5zaWMob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBrZXk6IHN0cmluZywgZXhjbHVkZT86IFNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIERvbid0IGFsbG93IHJlY3Vyc2lvbiBvbiAnZmllbGRzJyBvciBjYWNoZWQgdmFsdWVzLCBhbmQgc2tpcCBhbnkgaWdub3JlZCBhbmQgbm9uLWludHJpbnNpY3MuXG4gICAgICAgIGlmIChleGNsdWRlPy5oYXMoa2V5KSB8fCAha2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gTm8gZnVuY3Rpb25zLCBvbmx5IHVzZSBhY3R1YWwgdmFsdWVzLlxuICAgICAgICBjb25zdCB2YWx1ZSA9IChvYmplY3QgYXMgYW55KVtrZXldO1xuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGFsbCBrZXlzIG9mIHRoZSBvYmplY3QsIGluY2x1ZGluZyBkZXJpdmVkIGZpZWxkcyBmcm9tIHByb3RvdHlwZXMuICovXG4gICAgZnVuY3Rpb24qIHByb3RvdHlwZUtleXMob2JqZWN0OiBhbnkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkgeWllbGQga2V5O1xuXG4gICAgICAgIGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICB3aGlsZSAocHJvdG8pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKSkgeWllbGQga2V5O1xuXG4gICAgICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2VuZXJhdGUgYSBsaXN0IG9mIGZpZWxkcyBmb3IgdGhlIGdpdmVuIG9iamVjdCwgcmV0dXJuaW5nIHRoZW0gYXMgYSBsaXN0LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpbnRyaW5zaWNzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihleGNlcHQ/OiBTZXQ8c3RyaW5nPik6IEZpZWxkRXh0cmFjdG9yPFQ+IHtcbiAgICAgICAgcmV0dXJuIChvYmplY3Q6IFQsIGtleT86IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzOiBGaWVsZFtdID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwcm90b3R5cGVLZXlzKG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSW50cmluc2ljKG9iamVjdCwga2V5LCBleGNlcHQpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKG9iamVjdCBhcyBhbnkpW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIGtleSBpcyBkaXJlY3RseSBwcmVzZW50IGluIG9iamVjdCwganVzdCByZXR1cm4gaXQuXG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiBvYmplY3QgJiYgaXNWYWxpZEludHJpbnNpYyhvYmplY3QsIGtleSwgZXhjZXB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKG9iamVjdCBhcyBhbnkpW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdIGFzIEZpZWxkW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBGaWVsZCBleHRyYWN0b3Igd2hpY2ggZXh0cmFjdHMgZnJvbnRtYXR0ZXIgZmllbGRzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBmcm9udG1hdHRlcjxUIGV4dGVuZHMgSW5kZXhhYmxlPihcbiAgICAgICAgZnJvbnQ6IChvYmplY3Q6IFQpID0+IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+IHwgdW5kZWZpbmVkXG4gICAgKTogRmllbGRFeHRyYWN0b3I8VD4ge1xuICAgICAgICByZXR1cm4gKG9iamVjdDogVCwga2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcm9udG1hdHRlciA9IGZyb250KG9iamVjdCk7XG4gICAgICAgICAgICBpZiAoIWZyb250bWF0dGVyKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkczogRmllbGRbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZnJvbnRtYXR0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZnJvbnRtYXR0ZXJba2V5XTtcblxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGVudHJ5LmtleS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBlbnRyeS5yYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92ZW5hbmNlOiB7IHR5cGU6IFwiZnJvbnRtYXR0ZXJcIiwgZmlsZTogb2JqZWN0LiRmaWxlISwga2V5OiBlbnRyeS5rZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIGZyb250bWF0dGVyKSkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBmcm9udG1hdHRlcltrZXldO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IGVudHJ5LnJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZlbmFuY2U6IHsgdHlwZTogXCJmcm9udG1hdHRlclwiLCBmaWxlOiBvYmplY3QuJGZpbGUhLCBrZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBGaWVsZCBleHRyYWN0b3Igd2hpY2ggc2hvd3MgYWxsIGlubGluZSBmaWVsZHMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlubGluZUZpZWxkczxUIGV4dGVuZHMgSW5kZXhhYmxlPihcbiAgICAgICAgaW5saW5lTWFwOiAob2JqZWN0OiBUKSA9PiBSZWNvcmQ8c3RyaW5nLCBJbmxpbmVGaWVsZD4gfCB1bmRlZmluZWRcbiAgICApOiBGaWVsZEV4dHJhY3RvcjxUPiB7XG4gICAgICAgIHJldHVybiAob2JqZWN0OiBULCBrZXk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IGlubGluZU1hcChvYmplY3QpO1xuICAgICAgICAgICAgaWYgKCFtYXApIHJldHVybiBbXTtcblxuICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC52YWx1ZXMobWFwKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBmaWVsZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmxpbmUtZmllbGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBvYmplY3QuJGZpbGUhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGZpZWxkLnBvc2l0aW9uLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIFByb3ZlbmFuY2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBtYXApKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IG1hcFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBmaWVsZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmxpbmUtZmllbGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBvYmplY3QuJGZpbGUhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGZpZWxkLnBvc2l0aW9uLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIFByb3ZlbmFuY2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogTWVyZ2UgbXVsdGlwbGUgZmllbGQgZXh0cmFjdG9ycyBpbnRvIG9uZTsgaWYgbXVsdGlwbGUgZXh0cmFjdG9ycyBwcm9kdWNlIGlkZW50aWNhbCBrZXlzLCBrZXlzIGZyb20gdGhlIGVhcmxpZXIgZXh0cmFjdG9yIHdpbGwgYmUgcHJlZmVycmVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtZXJnZTxUIGV4dGVuZHMgRmllbGRiZWFyaW5nPiguLi5leHRyYWN0b3JzOiBGaWVsZEV4dHJhY3RvcjxUPltdKTogRmllbGRFeHRyYWN0b3I8VD4ge1xuICAgICAgICByZXR1cm4gKG9iamVjdDogVCwga2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV4dHJhY3RvciBvZiBleHRyYWN0b3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZXh0cmFjdG9yKG9iamVjdCwgdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZWQuaGFzKGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQuYWRkKGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV4dHJhY3RvciBvZiBleHRyYWN0b3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZXh0cmFjdG9yKG9iamVjdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLmxlbmd0aCA+IDApIHJldHVybiBmaWVsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwgIi8qKiBQYXJzZSBpbmxpbmUgZmllbGRzIGFuZCBvdGhlciBlbWJlZGRlZCBtZXRhZGF0YSBpbiBhIGxpbmUuICovXG5cbmltcG9ydCB7IFBSSU1JVElWRVMgfSBmcm9tIFwiZXhwcmVzc2lvbi9wYXJzZXJcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgKiBhcyBQIGZyb20gXCJwYXJzaW1tb25cIjtcbmltcG9ydCBlbW9qaVJlZ2V4IGZyb20gXCJlbW9qaS1yZWdleFwiO1xuaW1wb3J0IHsgSnNvbkNvbnZlcnNpb24sIEpzb25MaXRlcmFsIH0gZnJvbSBcImluZGV4L3R5cGVzL2pzb24vY29tbW9uXCI7XG5cbi8qKiBBIHBhcnNlZCBpbmxpbmUgZmllbGQgZnJvbSBhIHNwZWNpZmljIGxpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsSW5saW5lRmllbGQge1xuICAgIC8qKiBUaGUgcmF3IHBhcnNlZCBrZXkuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIFRoZSByYXcgdmFsdWUgb2YgdGhlIGZpZWxkLiAqL1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlICp2YWx1ZSogZm9yIHRoZSBmaWVsZC4gKi9cbiAgICBzdGFydFZhbHVlOiBudW1iZXI7XG4gICAgLyoqIFRoZSBlbmQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICBlbmQ6IG51bWJlcjtcbiAgICAvKiogSWYgdGhpcyBpbmxpbmUgZmllbGQgd2FzIGRlZmluZWQgdmlhIGEgd3JhcHBpbmcgKCdbJyBvciAnKCcgb3IgJ2xpbmsnKSwgdGhlbiB0aGUgd3JhcHBpbmcgdGhhdCB3YXMgdXNlZC4gKi9cbiAgICB3cmFwcGluZz86IHN0cmluZztcbn1cblxuLyoqIEZ1bGwgaW5saW5lIGZpZWxkIG1ldGFkYXRhIGZvciBhbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIElubGluZUZpZWxkIHtcbiAgICAvKiogVGhlIGFjdHVhbCBrZXkgZGVzY3JpYmluZyB0aGUgaW5saW5lIGZpZWxkLiAqL1xuICAgIGtleTogc3RyaW5nO1xuICAgIC8qKiBUaGUgcmF3IHZhbHVlIG9mIHRoZSBpbmxpbmUgZmllbGQuICovXG4gICAgcmF3OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYXJzZWQgdmFsdWUuICovXG4gICAgdmFsdWU6IExpdGVyYWw7XG4gICAgLyoqIEZ1bGwgcG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHdoZXJlIHRoZSBpbmxpbmUgZmllbGQgaXMgbG9jYXRlZCBpbiB0aGUgZG9jdW1lbnQuICovXG4gICAgcG9zaXRpb246IHtcbiAgICAgICAgLyoqIFRoZSBsaW5lIG51bWJlciB0aGUgaW5saW5lIGZpZWxkIGFwcGVhcnMgb24uICovXG4gICAgICAgIGxpbmU6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgKnZhbHVlKiBmb3IgdGhlIGZpZWxkLiBJbW1lZGlhdGVseSBhZnRlciB0aGUgJzo6Jy4gKi9cbiAgICAgICAgc3RhcnRWYWx1ZTogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIGVuZCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgICAgICBlbmQ6IG51bWJlcjtcbiAgICB9O1xuICAgIC8qKiBJZiB0aGlzIGlubGluZSBmaWVsZCB3YXMgZGVmaW5lZCB2aWEgYSB3cmFwcGluZyAoJ1snIG9yICcoJyBvciAnbGluaycpLCB0aGVuIHRoZSB3cmFwcGluZyB0aGF0IHdhcyB1c2VkLiAqL1xuICAgIHdyYXBwaW5nPzogc3RyaW5nO1xufVxuXG4vKiogSlNPTiwgc2VyaWFsaXphYmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGlubGluZSBmaWVsZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbklubGluZUZpZWxkIHtcbiAgICAvKiogVGhlIGFjdHVhbCBrZXkgZGVzY3JpYmluZyB0aGUgaW5saW5lIGZpZWxkLiAqL1xuICAgIGtleTogc3RyaW5nO1xuICAgIC8qKiBUaGUgcmF3IHZhbHVlIG9mIHRoZSBpbmxpbmUgZmllbGQuICovXG4gICAgcmF3OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYXJzZWQgdmFsdWUuICovXG4gICAgdmFsdWU6IEpzb25MaXRlcmFsO1xuICAgIC8qKiBGdWxsIHBvc2l0aW9uIGluZm9ybWF0aW9uIGZvciB3aGVyZSB0aGUgaW5saW5lIGZpZWxkIGlzIGxvY2F0ZWQgaW4gdGhlIGRvY3VtZW50LiAqL1xuICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIC8qKiBUaGUgbGluZSBudW1iZXIgdGhlIGlubGluZSBmaWVsZCBhcHBlYXJzIG9uLiAqL1xuICAgICAgICBsaW5lOiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlICp2YWx1ZSogZm9yIHRoZSBmaWVsZC4gSW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICc6OicuICovXG4gICAgICAgIHN0YXJ0VmFsdWU6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBlbmQgY29sdW1uIG9mIHRoZSBmaWVsZC4gKi9cbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfTtcbiAgICAvKiogSWYgdGhpcyBpbmxpbmUgZmllbGQgd2FzIGRlZmluZWQgdmlhIGEgd3JhcHBpbmcgKCdbJyBvciAnKCcgb3IgJ2xpbmsnKSwgdGhlbiB0aGUgd3JhcHBpbmcgdGhhdCB3YXMgdXNlZC4gKi9cbiAgICB3cmFwcGluZz86IHN0cmluZztcbn1cblxuLyoqIENvbnZlcnQgYW4gaW5saW5lIGZpZWxkIHRvIGEgSlNPTiBmb3JtYXQuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbklubGluZUZpZWxkKGZpZWxkOiBJbmxpbmVGaWVsZCk6IEpzb25JbmxpbmVGaWVsZCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGZpZWxkLCB7IHZhbHVlOiBKc29uQ29udmVyc2lvbi5qc29uKGZpZWxkLnZhbHVlKSB9KTtcbn1cblxuLyoqIENvbnZlcnQgYSBKU09OIGlubGluZSBmaWVsZCBiYWNrIHRvIGEgcmVndWxhciBmaWVsZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUlubGluZUZpZWxkKGZpZWxkOiBKc29uSW5saW5lRmllbGQpOiBJbmxpbmVGaWVsZCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGZpZWxkLCB7IHZhbHVlOiBKc29uQ29udmVyc2lvbi52YWx1ZShmaWVsZC52YWx1ZSkgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0lubGluZUZpZWxkKGxvY2FsOiBMb2NhbElubGluZUZpZWxkLCBsaW5lbm86IG51bWJlcik6IElubGluZUZpZWxkO1xuZXhwb3J0IGZ1bmN0aW9uIGFzSW5saW5lRmllbGQobG9jYWw6IExvY2FsSW5saW5lRmllbGRbXSwgbGluZW5vOiBudW1iZXIpOiBJbmxpbmVGaWVsZFtdO1xuLyoqIENvbnZlcnQgYSBsb2NhbCBpbmxpbmUgZmllbGQgaW50byBhIGZ1bGwgaW5saW5lIGZpZWxkIGJ5IHBlcmZvcm1pbmcgcGFyc2luZyBhbmQgYWRkaW5nIHRoZSBjb3JyZWN0IGxpbmUgbnVtYmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzSW5saW5lRmllbGQoXG4gICAgbG9jYWw6IExvY2FsSW5saW5lRmllbGQgfCBMb2NhbElubGluZUZpZWxkW10sXG4gICAgbGluZW5vOiBudW1iZXJcbik6IElubGluZUZpZWxkIHwgSW5saW5lRmllbGRbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobG9jYWwpKSB7XG4gICAgICAgIHJldHVybiBsb2NhbC5tYXAoKGYpID0+IGFzSW5saW5lRmllbGQoZiwgbGluZW5vKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBsb2NhbC5rZXksXG4gICAgICAgIHJhdzogbG9jYWwudmFsdWUsXG4gICAgICAgIHZhbHVlOiBwYXJzZUlubGluZVZhbHVlKGxvY2FsLnZhbHVlKSxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmVubyxcbiAgICAgICAgICAgIHN0YXJ0OiBsb2NhbC5zdGFydCxcbiAgICAgICAgICAgIHN0YXJ0VmFsdWU6IGxvY2FsLnN0YXJ0VmFsdWUsXG4gICAgICAgICAgICBlbmQ6IGxvY2FsLmVuZCxcbiAgICAgICAgfSxcbiAgICAgICAgd3JhcHBpbmc6IGxvY2FsLndyYXBwaW5nLFxuICAgIH07XG59XG5cbi8qKiBUaGUgd3JhcHBlciBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIGlubGluZSBmaWVsZC4gKi9cbmV4cG9ydCBjb25zdCBJTkxJTkVfRklFTERfV1JBUFBFUlM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgXCJbXCI6IFwiXVwiLFxuICAgIFwiKFwiOiBcIilcIixcbn0pO1xuXG4vKipcbiAqIEZpbmQgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNrZXQgdGhhdCBvY2N1cnMgYXQgb3IgYWZ0ZXIgYHN0YXJ0YCwgcmVzcGVjdGluZyBuZXN0aW5nIGFuZCBlc2NhcGVzLiBJZiBmb3VuZCxcbiAqIHJldHVybnMgdGhlIHZhbHVlIGNvbnRhaW5lZCB3aXRoaW4gYW5kIHRoZSBzdHJpbmcgaW5kZXggYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zaW5nKFxuICAgIGxpbmU6IHN0cmluZyxcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIG9wZW46IHN0cmluZyxcbiAgICBjbG9zZTogc3RyaW5nXG4pOiB7IHZhbHVlOiBzdHJpbmc7IGVuZEluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IG5lc3RpbmcgPSAwO1xuICAgIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaW5kZXggPSBzdGFydDsgaW5kZXggPCBsaW5lLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBsZXQgY2hhciA9IGxpbmUuY2hhckF0KGluZGV4KTtcblxuICAgICAgICAvLyBBbGxvd3MgZm9yIGRvdWJsZSBlc2NhcGVzIGxpa2UgJ1xcXFwnIHRvIGJlIHJlbmRlcmVkIG5vcm1hbGx5LlxuICAgICAgICBpZiAoY2hhciA9PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBlc2NhcGVkLCBpZ25vcmUgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBjb21wdXRpbmcgbmVzdGluZywgcmVnYXJkbGVzcyBvZiB3aGF0IGl0IGlzLlxuICAgICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhciA9PSBvcGVuKSBuZXN0aW5nKys7XG4gICAgICAgIGVsc2UgaWYgKGNoYXIgPT0gY2xvc2UpIG5lc3RpbmctLTtcblxuICAgICAgICAvLyBPbmx5IG9jY3VycyBpZiB3ZSBhcmUgb24gYSBjbG9zZSBjaGFyYWN0ZXIgYW5kIHRyaGVyZSBpcyBubyBtb3JlIG5lc3RpbmcuXG4gICAgICAgIGlmIChuZXN0aW5nIDwgMCkgcmV0dXJuIHsgdmFsdWU6IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudHJpbSgpLCBlbmRJbmRleDogaW5kZXggKyAxIH07XG5cbiAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBGaW5kIHRoZSAnOjonIHNlcGFyYXRvciBpbiBhbiBpbmxpbmUgZmllbGQuICovXG5mdW5jdGlvbiBmaW5kU2VwYXJhdG9yKGxpbmU6IHN0cmluZywgc3RhcnQ6IG51bWJlcik6IHsga2V5OiBzdHJpbmc7IHZhbHVlSW5kZXg6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgc2VwID0gbGluZS5pbmRleE9mKFwiOjpcIiwgc3RhcnQpO1xuICAgIGlmIChzZXAgPCAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHsga2V5OiBsaW5lLnN1YnN0cmluZyhzdGFydCwgc2VwKS50cmltKCksIHZhbHVlSW5kZXg6IHNlcCArIDIgfTtcbn1cblxuLyoqIFRyeSB0byBjb21wbGV0ZWx5IHBhcnNlIGFuIGlubGluZSBmaWVsZCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uIEFzc3VtZXMgYHN0YXJ0YCBpcyBvbiBhIHdyYXBwaW5nIGNoYXJhY3Rlci4gKi9cbmZ1bmN0aW9uIGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmU6IHN0cmluZywgc3RhcnQ6IG51bWJlcik6IExvY2FsSW5saW5lRmllbGQgfCB1bmRlZmluZWQge1xuICAgIGxldCBvcGVuID0gbGluZS5jaGFyQXQoc3RhcnQpO1xuXG4gICAgbGV0IGtleSA9IGZpbmRTZXBhcmF0b3IobGluZSwgc3RhcnQgKyAxKTtcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBGYWlsIHRoZSBtYXRjaCBpZiB3ZSBmaW5kIGFueSBzZXBhcmF0b3IgY2hhcmFjdGVycyAobm90IGFsbG93ZWQgaW4ga2V5cykuXG4gICAgZm9yIChsZXQgc2VwIG9mIE9iamVjdC5rZXlzKElOTElORV9GSUVMRF9XUkFQUEVSUykuY29uY2F0KE9iamVjdC52YWx1ZXMoSU5MSU5FX0ZJRUxEX1dSQVBQRVJTKSkpIHtcbiAgICAgICAgaWYgKGtleS5rZXkuaW5jbHVkZXMoc2VwKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSBmaW5kQ2xvc2luZyhsaW5lLCBrZXkudmFsdWVJbmRleCwgb3BlbiwgSU5MSU5FX0ZJRUxEX1dSQVBQRVJTW29wZW5dKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleToga2V5LmtleSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIHN0YXJ0VmFsdWU6IGtleS52YWx1ZUluZGV4LFxuICAgICAgICBlbmQ6IHZhbHVlLmVuZEluZGV4LFxuICAgICAgICB3cmFwcGluZzogb3BlbixcbiAgICB9O1xufVxuXG4vKiogUGFyc2UgYSB0ZXh0dWFsIGlubGluZSBmaWVsZCB2YWx1ZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gd29yayB3aXRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW5saW5lVmFsdWUodmFsdWU6IHN0cmluZyk6IExpdGVyYWwge1xuICAgIC8vIEVtcHR5IGlubGluZSB2YWx1ZXMgKGkuZS4sIG5vIHRleHQpIHNob3VsZCBtYXAgdG8gbnVsbCB0byBtYXRjaCBsb25nLXRlcm0gRGF0YXZpZXcgc2VtYW50aWNzLlxuICAgIC8vIE51bGwgaXMgYWxzbyBhIG1vcmUgdW5pdmVyc2FsIHR5cGUgdG8gZGVhbCB3aXRoIHRoYW4gc3RyaW5ncywgc2luY2UgYWxsIGZ1bmN0aW9ucyBhY2NlcHQgbnVsbHMuXG4gICAgaWYgKHZhbHVlLnRyaW0oKSA9PSBcIlwiKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFRoZSBzdHJpcHBlZCBsaXRlcmFsIGZpZWxkIHBhcnNlciB1bmRlcnN0YW5kcyBhbGwgb2YgdGhlIG5vbi1hcnJheS9ub24tb2JqZWN0IGZpZWxkcyBhbmQgY2FuIHBhcnNlIHRoZW0gZm9yIHVzLlxuICAgIC8vIElubGluZSBmaWVsZCBvYmplY3RzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZDsgaW5saW5lIGFycmF5IG9iamVjdHMgaGF2ZSB0byBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJzZXJcbiAgICAvLyBzZXBhcmF0ZWx5LlxuICAgIGxldCBpbmxpbmUgPSBQUklNSVRJVkVTLmlubGluZUZpZWxkLnBhcnNlKHZhbHVlKTtcbiAgICBpZiAoaW5saW5lLnN0YXR1cykgcmV0dXJuIGlubGluZS52YWx1ZTtcbiAgICBlbHNlIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIEV4dHJhY3RzIGlubGluZSBmaWVsZHMgb2YgdGhlIGZvcm0gJ1trZXk6OiB2YWx1ZV0nIGZyb20gYSBsaW5lIG9mIHRleHQuIFRoaXMgaXMgZG9uZSBpbiBhIHJlbGF0aXZlbHlcbiAqIFwicm9idXN0XCIgd2F5IHRvIGF2b2lkIGZhaWxpbmcgZHVlIHRvIGJhZCBuZXN0aW5nIG9yIG90aGVyIGludGVyZmVyaW5nIE1hcmtkb3duIHN5bWJvbHM6XG4gKlxuICogLSBMb29rIGZvciBhbnkgd3JhcHBlcnMgKCdbJyBhbmQgJygnKSBpbiB0aGUgbGluZSwgdHJ5aW5nIHRvIHBhcnNlIHdoYXRldmVyIGNvbWVzIGFmdGVyIGl0IGFzIGFuIGlubGluZSBrZXk6Oi5cbiAqIC0gSWYgc3VjY2Vzc2Z1bCwgc2NhbiB1bnRpbCB5b3UgZmluZCBhIG1hdGNoaW5nIGVuZCBicmFja2V0LCBhbmQgcGFyc2Ugd2hhdGV2ZXIgcmVtYWlucyBhcyBhbiBpbmxpbmUgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SW5saW5lRmllbGRzKGxpbmU6IHN0cmluZywgaW5jbHVkZVRhc2tGaWVsZHM6IGJvb2xlYW4gPSBmYWxzZSk6IExvY2FsSW5saW5lRmllbGRbXSB7XG4gICAgbGV0IGZpZWxkczogTG9jYWxJbmxpbmVGaWVsZFtdID0gW107XG4gICAgZm9yIChsZXQgd3JhcHBlciBvZiBPYmplY3Qua2V5cyhJTkxJTkVfRklFTERfV1JBUFBFUlMpKSB7XG4gICAgICAgIGxldCBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIpO1xuICAgICAgICB3aGlsZSAoZm91bmRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkRmllbGQgPSBmaW5kU3BlY2lmaWNJbmxpbmVGaWVsZChsaW5lLCBmb3VuZEluZGV4KTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkRmllbGQpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIsIGZvdW5kSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGRzLnB1c2gocGFyc2VkRmllbGQpO1xuICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBwYXJzZWRGaWVsZC5lbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVUYXNrRmllbGRzKSBmaWVsZHMgPSBmaWVsZHMuY29uY2F0KGV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyhsaW5lKSk7XG5cbiAgICBmaWVsZHMuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpO1xuXG4gICAgbGV0IGZpbHRlcmVkRmllbGRzOiBMb2NhbElubGluZUZpZWxkW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA9PSAwIHx8IGZpbHRlcmVkRmllbGRzW2ZpbHRlcmVkRmllbGRzLmxlbmd0aCAtIDFdLmVuZCA8IGZpZWxkc1tpXS5zdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyZWRGaWVsZHMucHVzaChmaWVsZHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZEZpZWxkcztcbn1cblxuLyoqIFZhbGlkYXRlcyB0aGF0IGEgcmF3IGZpZWxkIG5hbWUgaGFzIGEgdmFsaWQgZm9ybS4gKi9cbmNvbnN0IEZVTExfTElORV9LRVlfUEFSVDogUC5QYXJzZXI8c3RyaW5nPiA9IFAuYWx0KFxuICAgIFAucmVnZXhwKG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCBcInVcIikpLFxuICAgIFAucmVnZXhwKC9bMC05XFxwe0xldHRlcn1cXHdcXHNfLy1dKy91KVxuKVxuICAgIC5tYW55KClcbiAgICAubWFwKChwYXJ0cykgPT4gcGFydHMuam9pbihcIlwiKSk7XG5cbmNvbnN0IEZVTExfTElORV9LRVlfUEFSU0VSOiBQLlBhcnNlcjxzdHJpbmc+ID0gUC5yZWdleHAoL1teMC05XFx3XFxwe0xldHRlcn1dKi91KVxuICAgIC50aGVuKEZVTExfTElORV9LRVlfUEFSVClcbiAgICAuc2tpcChQLnJlZ2V4cCgvW19cXCp+YF0qL3UpKTtcblxuLyoqIEF0dGVtcHQgdG8gZXh0cmFjdCBhIGZ1bGwtbGluZSBmaWVsZCAoS2V5OjogVmFsdWUgY29uc3VtaW5nIHRoZSBlbnRpcmUgY29udGVudCBsaW5lKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RnVsbExpbmVGaWVsZCh0ZXh0OiBzdHJpbmcpOiBMb2NhbElubGluZUZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgc2VwID0gZmluZFNlcGFyYXRvcih0ZXh0LCAwKTtcbiAgICBpZiAoIXNlcCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIFdlIG5lZWQgdG8gcG9zdC1wcm9jZXNzIHRoZSBrZXkgdG8gZHJvcCB1bm5lY2Vzc2FyeSBvcGVuaW5nIGFubm90YXRpb25zIGFzIHdlbGwgYXNcbiAgICAvLyBkcm9wIHN1cnJvdW5kaW5nIE1hcmtkb3duLlxuICAgIGxldCByZWFsS2V5ID0gRlVMTF9MSU5FX0tFWV9QQVJTRVIucGFyc2Uoc2VwLmtleSk7XG4gICAgaWYgKCFyZWFsS2V5LnN0YXR1cykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleTogcmVhbEtleS52YWx1ZSxcbiAgICAgICAgdmFsdWU6IHRleHQuc3Vic3RyaW5nKHNlcC52YWx1ZUluZGV4KS50cmltKCksXG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICBzdGFydFZhbHVlOiBzZXAudmFsdWVJbmRleCxcbiAgICAgICAgZW5kOiB0ZXh0Lmxlbmd0aCxcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgQ1JFQVRFRF9EQVRFX1JFR0VYID0gL1xcdXsyNzk1fVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5leHBvcnQgY29uc3QgRFVFX0RBVEVfUkVHRVggPSAvKD86XFx1ezFGNEM1fXxcXHV7MUY0QzZ9fFxcdXsxRjVEM31cXHV7RkUwRn0/KVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5leHBvcnQgY29uc3QgRE9ORV9EQVRFX1JFR0VYID0gL1xcdXsyNzA1fVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5leHBvcnQgY29uc3QgU0NIRURVTEVEX0RBVEVfUkVHRVggPSAvW1xcdXsyM0YzfVxcdXsyMzFCfV1cXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KS91O1xuZXhwb3J0IGNvbnN0IFNUQVJUX0RBVEVfUkVHRVggPSAvXFx1ezFGNkVCfVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5cbmV4cG9ydCBjb25zdCBFTU9KSV9SRUdFWEVTID0gW1xuICAgIHsgcmVnZXg6IENSRUFURURfREFURV9SRUdFWCwga2V5OiBcImNyZWF0ZWRcIiB9LFxuICAgIHsgcmVnZXg6IFNUQVJUX0RBVEVfUkVHRVgsIGtleTogXCJzdGFydFwiIH0sXG4gICAgeyByZWdleDogU0NIRURVTEVEX0RBVEVfUkVHRVgsIGtleTogXCJzY2hlZHVsZWRcIiB9LFxuICAgIHsgcmVnZXg6IERVRV9EQVRFX1JFR0VYLCBrZXk6IFwiZHVlXCIgfSxcbiAgICB7IHJlZ2V4OiBET05FX0RBVEVfUkVHRVgsIGtleTogXCJjb21wbGV0aW9uXCIgfSxcbl07XG5cbi8qKiBQYXJzZSBzcGVjaWFsIGNvbXBsZXRlZC9kdWUvZG9uZSB0YXNrIGZpZWxkcyB3aGljaCBhcmUgbWFya2VkIHZpYSBlbW9qaS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyhsaW5lOiBzdHJpbmcpOiBMb2NhbElubGluZUZpZWxkW10ge1xuICAgIGxldCByZXN1bHRzOiBMb2NhbElubGluZUZpZWxkW10gPSBbXTtcblxuICAgIGZvciAobGV0IHsgcmVnZXgsIGtleSB9IG9mIEVNT0pJX1JFR0VYRVMpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByZWdleC5leGVjKGxpbmUpO1xuICAgICAgICBpZiAoIW1hdGNoKSBjb250aW51ZTtcblxuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgICAgICAgc3RhcnRWYWx1ZTogbWF0Y2guaW5kZXggKyAxLFxuICAgICAgICAgICAgZW5kOiBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCxcbiAgICAgICAgICAgIHdyYXBwaW5nOiBcImVtb2ppLXNob3J0aGFuZFwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqIFNldHMgb3IgcmVwbGFjZXMgdGhlIHZhbHVlIG9mIGFuIGlubGluZSBmaWVsZDsgaWYgdGhlIHZhbHVlIGlzICd1bmRlZmluZWQnLCBkZWxldGVzIHRoZSBrZXkuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5saW5lRmllbGQoc291cmNlOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGV4aXN0aW5nID0gZXh0cmFjdElubGluZUZpZWxkcyhzb3VyY2UpO1xuICAgIGxldCBleGlzdGluZ0tleXMgPSBleGlzdGluZy5maWx0ZXIoKGYpID0+IGYua2V5ID09IGtleSk7XG5cbiAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBhcmUgZHVwbGljYXRlIGtleXMgT1IgdGhlIGtleSBhbHJlYWR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgaWYgKGV4aXN0aW5nS2V5cy5sZW5ndGggPiAyIHx8IChleGlzdGluZ0tleXMubGVuZ3RoID09IDAgJiYgIXZhbHVlKSkgcmV0dXJuIHNvdXJjZTtcbiAgICBsZXQgZXhpc3RpbmdLZXkgPSBleGlzdGluZ0tleXNbMF07XG5cbiAgICBsZXQgYW5ub3RhdGlvbiA9IHZhbHVlID8gYFske2tleX06OiAke3ZhbHVlfV1gIDogXCJcIjtcbiAgICBpZiAoZXhpc3RpbmdLZXkpIHtcbiAgICAgICAgbGV0IHByZWZpeCA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgZXhpc3RpbmdLZXkuc3RhcnQpO1xuICAgICAgICBsZXQgc3VmZml4ID0gc291cmNlLnN1YnN0cmluZyhleGlzdGluZ0tleS5lbmQpO1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uKSByZXR1cm4gYCR7cHJlZml4fSR7YW5ub3RhdGlvbn0ke3N1ZmZpeH1gO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtwcmVmaXh9JHtzdWZmaXgudHJpbVN0YXJ0KCl9YDtcbiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke3NvdXJjZS50cmltRW5kKCl9ICR7YW5ub3RhdGlvbn1gO1xuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFbW9qaVNob3J0aGFuZENvbXBsZXRpb25GaWVsZChzb3VyY2U6IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZXh0cmFjdElubGluZUZpZWxkcyhzb3VyY2UsIHRydWUpO1xuICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IGV4aXN0aW5nLmZpbHRlcigoZikgPT4gZi5rZXkgPT09IFwiY29tcGxldGlvblwiICYmIGYud3JhcHBpbmcgPT09IFwiZW1vamktc2hvcnRoYW5kXCIpO1xuXG4gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzIE9SIHRoZSBrZXkgYWxyZWFkeSBkb2Vzbid0IGV4aXN0LlxuICAgIGlmIChleGlzdGluZ0tleXMubGVuZ3RoID4gMiB8fCAoZXhpc3RpbmdLZXlzLmxlbmd0aCA9PSAwICYmICF2YWx1ZSkpIHJldHVybiBzb3VyY2U7XG5cbiAgICAvKiBObyB3cmFwcGVyLCBhZGQgb3duIHNwYWNpbmcgYXQgc3RhcnQgKi9cbiAgICBjb25zdCBhbm5vdGF0aW9uID0gdmFsdWUgPyBgIFx1MjcwNSAke3ZhbHVlfWAgOiBcIlwiO1xuICAgIGxldCBleGlzdGluZ0tleSA9IGV4aXN0aW5nS2V5c1swXTtcbiAgICBpZiAoZXhpc3RpbmdLZXkpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gc291cmNlLnN1YnN0cmluZygwLCBleGlzdGluZ0tleS5zdGFydCk7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNvdXJjZS5zdWJzdHJpbmcoZXhpc3RpbmdLZXkuZW5kKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeC50cmltRW5kKCl9JHthbm5vdGF0aW9ufSR7c3VmZml4fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke3NvdXJjZS50cmltRW5kKCl9JHthbm5vdGF0aW9ufWA7XG4gICAgfVxufVxuIiwgIi8qKiBNYXAgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QsIHJldHVybmluZyBhIG5ldyBvYmplY3QuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwT2JqZWN0VmFsdWVzPFYsIFU+KG9iamVjdDogUmVjb3JkPHN0cmluZywgVj4sIGZ1bmM6ICh4OiBWKSA9PiBVKTogUmVjb3JkPHN0cmluZywgVT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgVT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZnVuYyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBMaW5rLCBKc29uTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUsIER1cmF0aW9uIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgeyBtYXBPYmplY3RWYWx1ZXMgfSBmcm9tIFwidXRpbHMvZGF0YVwiO1xuXG4vKiogSlNPTi1zZXJpYWxpemVkIGVxdWl2YWxlbnRzIGZvciBsaXRlcmFscy4gKi9cbmV4cG9ydCB0eXBlIEpzb25MaXRlcmFsID1cbiAgICB8IGJvb2xlYW5cbiAgICB8IG51bWJlclxuICAgIHwgc3RyaW5nXG4gICAgfCB7ICRfdHlwZTogXCJkYXRlXCI7IHZhbHVlOiBzdHJpbmcgfVxuICAgIHwgeyAkX3R5cGU6IFwiZHVyYXRpb25cIjsgdmFsdWU6IHN0cmluZyB9XG4gICAgfCB7ICRfdHlwZTogXCJsaW5rXCI7IHZhbHVlOiBKc29uTGluayB9XG4gICAgfCBBcnJheTxKc29uTGl0ZXJhbD5cbiAgICB8IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICB8IG51bGw7XG5cbmV4cG9ydCBuYW1lc3BhY2UgSnNvbkNvbnZlcnNpb24ge1xuICAgIGV4cG9ydCBjb25zdCBOT09QX05PUk1BTElaRVI6IChpbnB1dDogTGl0ZXJhbCkgPT4gTGl0ZXJhbCA9IChpbnB1dCkgPT4gaW5wdXQ7XG5cbiAgICAvKiogQ29udmVydCBhIGxpdGVyYWwgdmFsdWUgdG8gYSBzYWZlLCBwZXJzaXN0ZW50IEpTT04gZXF1aXZhbGVudC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24ganNvbihsaXRlcmFsOiBMaXRlcmFsKTogSnNvbkxpdGVyYWwge1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gTGl0ZXJhbHMud3JhcFZhbHVlKGxpdGVyYWwpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZD8udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFwKEpzb25Db252ZXJzaW9uLmpzb24pO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXBPYmplY3RWYWx1ZXMod3JhcHBlZC52YWx1ZSwgSnNvbkNvbnZlcnNpb24uanNvbik7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJkYXRlXCIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvSVNPKHsgZXh0ZW5kZWRab25lOiB0cnVlLCBpbmNsdWRlT2Zmc2V0OiB0cnVlIH0pIH07XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJsaW5rXCIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KCkgfTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJkdXJhdGlvblwiLCB2YWx1ZTogd3JhcHBlZC52YWx1ZS50b0lTTygpIH07XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEpTT04gbGl0ZXJhbCB0byBpdCdzIGNvcnJlc3BvbmRpbmcgaHlkcmF0ZWQgdmFsdWUsIG9wdGlvbmFsbHkgYXBwbHlpbmdcbiAgICAgKiBhIG5vcm1hbGl6YXRpb24gc3RlcCB0byB0aGUgcmVzdWx0aW5nIHZhbHVlIGFuZCBhbnkgbGl0ZXJhbHMgY29udGFpbmVkIHdpdGhpbiBpdFxuICAgICAqIChzdWNoIGFzIGlmIHRoZSBsaXRlcmFsIGlzIGEgbGlzdCBvciBvYmplY3QpLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB2YWx1ZShqc29uOiBKc29uTGl0ZXJhbCwgbm9ybWFsaXplcjogKGlucHV0OiBMaXRlcmFsKSA9PiBMaXRlcmFsID0gTk9PUF9OT1JNQUxJWkVSKTogTGl0ZXJhbCB7XG4gICAgICAgIGlmIChqc29uID09PSBudWxsIHx8IGpzb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVyKGpzb24ubWFwKChpbnB1dCkgPT4gSnNvbkNvbnZlcnNpb24udmFsdWUoaW5wdXQsIG5vcm1hbGl6ZXIpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmICghKFwiJF90eXBlXCIgaW4ganNvbikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcE9iamVjdFZhbHVlcyhqc29uLCAodikgPT4gSnNvbkNvbnZlcnNpb24udmFsdWUodiBhcyBKc29uTGl0ZXJhbCwgbm9ybWFsaXplcikpO1xuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0ganNvbltcIiRfdHlwZVwiXTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVyKERhdGVUaW1lLmZyb21JU08oanNvbi52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplcihEdXJhdGlvbi5mcm9tSVNPKGpzb24udmFsdWUpKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QoanNvbi52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZWQgdHlwZSAnJHt0eXBlfSchYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmltaXRpdmUgdHlwZSwgcmV0dXJuIGFzIGlzLlxuICAgICAgICByZXR1cm4gbm9ybWFsaXplcihqc29uIGFzIExpdGVyYWwpO1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IGdldEZpbGVUaXRsZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHtcbiAgICBGSUxFX1RZUEUsXG4gICAgRmlsZSxcbiAgICBJbmRleGFibGUsXG4gICAgTElOS0FCTEVfVFlQRSxcbiAgICBMSU5LQkVBUklOR19UWVBFLFxuICAgIExpbmthYmxlLFxuICAgIExpbmtiZWFyaW5nLFxuICAgIFRBR0dBQkxFX1RZUEUsXG4gICAgVGFnZ2FibGUsXG59IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQge1xuICAgIEV4dHJhY3RvcnMsXG4gICAgRklFTERCRUFSSU5HX1RZUEUsXG4gICAgRmllbGQsXG4gICAgRmllbGRFeHRyYWN0b3IsXG4gICAgRmllbGRiZWFyaW5nLFxuICAgIEZpZWxkYmVhcmluZ3MsXG59IGZyb20gXCIuLi8uLi9leHByZXNzaW9uL2ZpZWxkXCI7XG5pbXBvcnQgeyBJbmxpbmVGaWVsZCwganNvbklubGluZUZpZWxkLCB2YWx1ZUlubGluZUZpZWxkIH0gZnJvbSBcImluZGV4L2ltcG9ydC9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7XG4gICAgTGluZVNwYW4sXG4gICAgSnNvbk1hcmtkb3duUGFnZSxcbiAgICBKc29uTWFya2Rvd25TZWN0aW9uLFxuICAgIEpzb25NYXJrZG93bkJsb2NrLFxuICAgIEpzb25NYXJrZG93bkxpc3RCbG9jayxcbiAgICBKc29uTWFya2Rvd25MaXN0SXRlbSxcbiAgICBKc29uTWFya2Rvd25UYXNrSXRlbSxcbiAgICBKc29uTWFya2Rvd25EYXRhYmxvY2sgYXMgSnNvbk1hcmtkb3duRGF0YWJsb2NrLFxuICAgIEpzb25NYXJrZG93bkNvZGVibG9jayxcbiAgICBKc29uRnJvbnRtYXR0ZXJFbnRyeSxcbn0gZnJvbSBcIi4vanNvbi9tYXJrZG93blwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcbmltcG9ydCB7IEpzb25Db252ZXJzaW9uIH0gZnJvbSBcIi4vanNvbi9jb21tb25cIjtcblxuLyoqIEEgbWFya2Rvd24gZmlsZSBpbiB0aGUgdmF1bHQ7IHRoZSBzb3VyY2Ugb2YgbW9zdCBtZXRhZGF0YS4gKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93blBhZ2UgaW1wbGVtZW50cyBGaWxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICAvKiogQWxsIG9mIHRoZSB0eXBlcyB0aGF0IGEgbWFya2Rvd24gZmlsZSBpcy4gKi9cbiAgICBzdGF0aWMgVFlQRVMgPSBbRklMRV9UWVBFLCBcIm1hcmtkb3duXCIsIFwicGFnZVwiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAvLyBVc2Ugc3RhdGljIHR5cGVzIGZvciBhbGwgbWFya2Rvd24gZmlsZXMuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duUGFnZS5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiUGFnZVwiO1xuXG4gICAgLy8gTWFya2Rvd24gZmlsZSBJRHMgYXJlIGFsd2F5cyBqdXN0IHRoZSBmdWxsIHBhdGguXG4gICAgZ2V0ICRpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBhdGg7XG4gICAgfVxuICAgIC8vIFRoZSBmaWxlIG9mIGEgZmlsZSBpcy4uLiBpdCdzIGZpbGUuXG4gICAgZ2V0ICRmaWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcGF0aDtcbiAgICB9XG5cbiAgICAvKiogRnJvbnRtYXR0ZXIgdmFsdWVzIGluIHRoZSBmaWxlLCBpZiBwcmVzZW50LiBNYXBzIGxvd2VyIGNhc2UgZnJvbnRtYXR0ZXIga2V5IC0+IGVudHJ5LiAqL1xuICAgICRmcm9udG1hdHRlcj86IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+O1xuICAgIC8qKiBNYXAgb2YgYWxsIGRpc3RpbmN0IGlubGluZSBmaWVsZHMgaW4gdGhlIGRvY3VtZW50LiBNYXBzIGxvd2VyIGNhc2Uga2V5IG5hbWUgLT4gZnVsbCBtZXRhZGF0YS4gKi9cbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcblxuICAgIC8qKiBUaGUgcGF0aCB0aGlzIGZpbGUgZXhpc3RzIGF0LiAqL1xuICAgICRwYXRoOiBzdHJpbmc7XG4gICAgLyoqIE9ic2lkaWFuLXByb3ZpZGVkIGRhdGUgdGhpcyBwYWdlIHdhcyBjcmVhdGVkLiAqL1xuICAgICRjdGltZTogRGF0ZVRpbWU7XG4gICAgLyoqIE9ic2lkaWFuLXByb3ZpZGVkIGRhdGUgdGhpcyBwYWdlIHdhcyBtb2RpZmllZC4gKi9cbiAgICAkbXRpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBUaGUgZXh0ZW5zaW9uOyBmb3IgbWFya2Rvd24gZmlsZXMsIGFsbW9zdCBhbHdheXMgJy5tZCcuICovXG4gICAgJGV4dGVuc2lvbjogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBzaXplIG9mIHRoaXMgcGFnZSBpbiBieXRlcy4gKi9cbiAgICAkc2l6ZTogbnVtYmVyID0gMDtcbiAgICAvKiogVGhlIGZ1bGwgZXh0ZW50IG9mIHRoZSBmaWxlIChzdGFydCAwLCBlbmQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZS4pICovXG4gICAgJHBvc2l0aW9uOiBMaW5lU3BhbjtcbiAgICAvKiogVGhlIGV4YWN0IHRhZ3MgaW4gdGhlIGZpbGUuICovXG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qKiBBbGwgbGlua3MgaW4gdGhlIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgLyoqXG4gICAgICogQWxsIGNoaWxkIG1hcmtkb3duIHNlY3Rpb25zIG9mIHRoaXMgbWFya2Rvd24gZmlsZS4gVGhlIGluaXRpYWwgc2VjdGlvbiBiZWZvcmUgYW55IGNvbnRlbnQgaXMgc3BlY2lhbCBhbmQgaXNcbiAgICAgKiBuYW1lZCB3aXRoIHRoZSB0aXRsZSBvZiB0aGUgZmlsZS5cbiAgICAgKi9cbiAgICAkc2VjdGlvbnM6IE1hcmtkb3duU2VjdGlvbltdID0gW107XG5cbiAgICAvKiogQ3JlYXRlIGEgbWFya2Rvd24gZmlsZSBmcm9tIHRoZSBnaXZlbiByYXcgdmFsdWVzLiAqL1xuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbk1hcmtkb3duUGFnZSwgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVIpOiBNYXJrZG93blBhZ2Uge1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHJhdy4kc2VjdGlvbnMubWFwKChzZWN0KSA9PiBNYXJrZG93blNlY3Rpb24uZnJvbShzZWN0LCByYXcuJHBhdGgsIG5vcm1hbGl6ZXIpKTtcblxuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duUGFnZSh7XG4gICAgICAgICAgICAkcGF0aDogcmF3LiRwYXRoLFxuICAgICAgICAgICAgJGZyb250bWF0dGVyOiByYXcuJGZyb250bWF0dGVyXG4gICAgICAgICAgICAgICAgPyBtYXBPYmplY3RWYWx1ZXMocmF3LiRmcm9udG1hdHRlciwgKGZtKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUZyb250bWF0dGVyRW50cnkoZm0pLCBub3JtYWxpemVyKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHJhdy4kaW5maWVsZHMsIChmaWVsZCkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVJbmxpbmVGaWVsZChmaWVsZCksIG5vcm1hbGl6ZXIpKSxcbiAgICAgICAgICAgICRjdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJGN0aW1lKSxcbiAgICAgICAgICAgICRtdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJG10aW1lKSxcbiAgICAgICAgICAgICRleHRlbnNpb246IHJhdy4kZXh0ZW5zaW9uLFxuICAgICAgICAgICAgJHNpemU6IHJhdy4kc2l6ZSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogcmF3LiRwb3NpdGlvbixcbiAgICAgICAgICAgICR0YWdzOiByYXcuJHRhZ3MsXG4gICAgICAgICAgICAkbGlua3M6IHJhdy4kbGlua3MubWFwKChsaW5rKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsaW5rKSkpLFxuICAgICAgICAgICAgJHNlY3Rpb25zOiBzZWN0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duUGFnZT4pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGRvY3VtZW50LiAqL1xuICAgIGdldCAkbGluZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcG9zaXRpb24uZW5kO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgZmlsZS4gKi9cbiAgICBnZXQgJG5hbWUoKSB7XG4gICAgICAgIHJldHVybiBnZXRGaWxlVGl0bGUodGhpcy4kcGF0aCk7XG4gICAgfVxuXG4gICAgLyoqIEEgbGluayB0byB0aGlzIGZpbGUuICovXG4gICAgZ2V0ICRsaW5rKCkge1xuICAgICAgICByZXR1cm4gTGluay5maWxlKHRoaXMuJHBhdGgpO1xuICAgIH1cblxuICAgIC8qKiBBbGwgb2YgdGhlIGluZGV4ZWQgZmllbGRzIGluIHRoaXMgb2JqZWN0LiAqL1xuICAgIGdldCBmaWVsZHMoKTogRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93blBhZ2UuRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgdGhlIGZ1bGwgZmllbGQgZGVmaW5pdGlvbiBmb3IgdGhlIGdpdmVuIGZpZWxkLiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZyk6IEZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duUGFnZS5GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdO1xuICAgIH1cblxuICAgIC8qKiBHZXQgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQuICovXG4gICAgcHVibGljIHZhbHVlKGtleTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKGtleSk/LnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IHRoaXMgcGFnZSBpbnRvIGl0J3MgcGFydGlhbCByZXByZXNlbnRhdGlvbiBmb3Igc2F2aW5nLiAqL1xuICAgIHB1YmxpYyBqc29uKCk6IEpzb25NYXJrZG93blBhZ2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJHBhdGg6IHRoaXMuJHBhdGgsXG4gICAgICAgICAgICAkZnJvbnRtYXR0ZXI6IHRoaXMuJGZyb250bWF0dGVyID8gbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGZyb250bWF0dGVyLCBqc29uRnJvbnRtYXR0ZXJFbnRyeSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyh0aGlzLiRpbmZpZWxkcywganNvbklubGluZUZpZWxkKSxcbiAgICAgICAgICAgICRjdGltZTogdGhpcy4kY3RpbWUudG9NaWxsaXMoKSxcbiAgICAgICAgICAgICRtdGltZTogdGhpcy4kbXRpbWUudG9NaWxsaXMoKSxcbiAgICAgICAgICAgICRleHRlbnNpb246IHRoaXMuJGV4dGVuc2lvbixcbiAgICAgICAgICAgICRzaXplOiB0aGlzLiRzaXplLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiB0aGlzLiRwb3NpdGlvbixcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLiRsaW5rcy5tYXAoKGxpbmspID0+IGxpbmsudG9PYmplY3QoKSksXG4gICAgICAgICAgICAkc2VjdGlvbnM6IHRoaXMuJHNlY3Rpb25zLm1hcCgoc2VjdCkgPT4gc2VjdC5qc29uKCkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8TWFya2Rvd25QYWdlPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmZyb250bWF0dGVyKChmKSA9PiBmLiRmcm9udG1hdHRlciksXG4gICAgICAgIEV4dHJhY3RvcnMuaW5saW5lRmllbGRzKChmKSA9PiBmLiRpbmZpZWxkcylcbiAgICApO1xufVxuXG5leHBvcnQgY2xhc3MgTWFya2Rvd25TZWN0aW9uIGltcGxlbWVudHMgSW5kZXhhYmxlLCBUYWdnYWJsZSwgTGlua2FibGUsIExpbmtiZWFyaW5nLCBGaWVsZGJlYXJpbmcge1xuICAgIC8qKiBBbGwgb2YgdGhlIHR5cGVzIHRoYXQgYSBtYXJrZG93biBzZWN0aW9uIGlzLiAqL1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcIm1hcmtkb3duXCIsIFwic2VjdGlvblwiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAvKiogUGF0aCBvZiB0aGUgZmlsZSB0aGF0IHRoaXMgc2VjdGlvbiBpcyBpbi4gKi9cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25TZWN0aW9uLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJTZWN0aW9uXCI7XG4gICAgJGlkOiBzdHJpbmc7XG4gICAgJGZpbGU6IHN0cmluZztcblxuICAgIC8qKiBUaGUgaW5kZXggb2YgdGhpcyBzZWN0aW9uIGluIHRoZSBmaWxlLiAqL1xuICAgICRvcmRpbmFsOiBudW1iZXI7XG4gICAgLyoqIFRoZSB0aXRsZSBvZiB0aGUgc2VjdGlvbjsgdGhlIHJvb3QgKGltcGxpY2l0KSBzZWN0aW9uIHdpbGwgaGF2ZSB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UuICovXG4gICAgJHRpdGxlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBpbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGUgc2VjdGlvbiAoMSAtIDYpLiAqL1xuICAgICRsZXZlbDogbnVtYmVyO1xuICAgIC8qKiBUaGUgc3BhbiBvZiBsaW5lcyBpbmRpY2F0aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2VjdGlvbi4gKi9cbiAgICAkcG9zaXRpb246IExpbmVTcGFuO1xuICAgIC8qKiBBbGwgdGFncyBvbiB0aGUgZmlsZS4gKi9cbiAgICAkdGFnczogc3RyaW5nW107XG4gICAgLyoqIEFsbCBsaW5rcyBpbiB0aGUgZmlsZS4gKi9cbiAgICAkbGlua3M6IExpbmtbXTtcbiAgICAvKiogQWxsIG9mIHRoZSBtYXJrZG93biBibG9ja3MgaW4gdGhpcyBzZWN0aW9uLiAqL1xuICAgICRibG9ja3M6IE1hcmtkb3duQmxvY2tbXTtcbiAgICAvKiogTWFwIG9mIGFsbCBkaXN0aW5jdCBpbmxpbmUgZmllbGRzIGluIHRoZSBkb2N1bWVudCwgZnJvbSBrZXkgbmFtZSAtPiBtZXRhZGF0YS4gKi9cbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcblxuICAgIC8qKiBDb252ZXJ0IHJhdyBtYXJrZG93biBzZWN0aW9uIGRhdGEgdG8gdGhlIGFwcHJvcHJpYXRlIGNsYXNzLiAqL1xuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbk1hcmtkb3duU2VjdGlvbiwgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUik6IE1hcmtkb3duU2VjdGlvbiB7XG4gICAgICAgIGNvbnN0IGJsb2NrcyA9IHJhdy4kYmxvY2tzLm1hcCgoYmxvY2spID0+IE1hcmtkb3duQmxvY2suZnJvbShibG9jaywgZmlsZSwgbm9ybWFsaXplcikpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duU2VjdGlvbih7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogTWFya2Rvd25TZWN0aW9uLnJlYWRhYmxlSWQoZmlsZSwgcmF3LiR0aXRsZSwgcmF3LiRvcmRpbmFsKSxcbiAgICAgICAgICAgICRvcmRpbmFsOiByYXcuJG9yZGluYWwsXG4gICAgICAgICAgICAkdGl0bGU6IHJhdy4kdGl0bGUsXG4gICAgICAgICAgICAkbGV2ZWw6IHJhdy4kbGV2ZWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHJhdy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogcmF3LiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiByYXcuJGxpbmtzLm1hcCgobCkgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobCkpKSxcbiAgICAgICAgICAgICRibG9ja3M6IGJsb2NrcyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHJhdy4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxNYXJrZG93blNlY3Rpb24+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgLyoqIE9idGFpbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBzZWN0aW9uLiAqL1xuICAgIGdldCAkbGluZUNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwb3NpdGlvbi5lbmQgLSB0aGlzLiRwb3NpdGlvbi5zdGFydDtcbiAgICB9XG5cbiAgICAvKiogQWxpYXMgZm9yIHRpdGxlIHdoaWNoIGFsbG93cyBzZWFyY2hpbmcgb3ZlciBwYWdlcyBhbmQgc2VjdGlvbnMgYnkgJ25hbWUnLiAqL1xuICAgIGdldCAkbmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy4kdGl0bGU7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIGxpbmsgdG8gdGhpcyBzZWN0aW9uLiAqL1xuICAgIGdldCAkbGluaygpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMuJGZpbGUsIHRoaXMuJHRpdGxlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCk6IEZpZWxkW10ge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25TZWN0aW9uLkZJRUxEX0RFRih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBmaWVsZCBieSBrZXkuICovXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25TZWN0aW9uLkZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF0gPz8gRmllbGRiZWFyaW5ncy5nZXRXaXRoRGVmYXVsdCh0aGlzLCBrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25TZWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRvcmRpbmFsOiB0aGlzLiRvcmRpbmFsLFxuICAgICAgICAgICAgJHRpdGxlOiB0aGlzLiR0aXRsZSxcbiAgICAgICAgICAgICRsZXZlbDogdGhpcy4kbGV2ZWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHRoaXMuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMuJHRhZ3MsXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLm1hcCgobGluaykgPT4gbGluay50b09iamVjdCgpKSxcbiAgICAgICAgICAgICRibG9ja3M6IHRoaXMuJGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiBibG9jay5qc29uKCkpLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kaW5maWVsZHMsIGpzb25JbmxpbmVGaWVsZCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxNYXJrZG93blNlY3Rpb24+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCksXG4gICAgICAgIEV4dHJhY3RvcnMuaW5saW5lRmllbGRzKChmKSA9PiBmLiRpbmZpZWxkcylcbiAgICApO1xuXG4gICAgLyoqIEdlbmVyYXRlIGEgcmVhZGFibGUgSUQgZm9yIHRoaXMgc2VjdGlvbiB1c2luZyB0aGUgZmlyc3QgOCBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcgYW5kIHRoZSBvcmRpbmFsLiAqL1xuICAgIHN0YXRpYyByZWFkYWJsZUlkKGZpbGU6IHN0cmluZywgdGl0bGU6IHN0cmluZywgb3JkaW5hbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlyc3Q4ID0gdGl0bGUuc3Vic3RyaW5nKDAsIE1hdGgubWluKHRpdGxlLmxlbmd0aCwgOCkpLnJlcGxhY2UoL1teQS1aYS16MC05LV9dKy9naSwgXCItXCIpO1xuXG4gICAgICAgIHJldHVybiBgJHtmaWxlfS9zZWN0aW9uJHtvcmRpbmFsfS8ke2ZpcnN0OH1gO1xuICAgIH1cbn1cblxuLyoqIEJhc2UgY2xhc3MgZm9yIGFsbCBtYXJrZG93biBibG9ja3MuICovXG5leHBvcnQgY2xhc3MgTWFya2Rvd25CbG9jayBpbXBsZW1lbnRzIEluZGV4YWJsZSwgTGlua2JlYXJpbmcsIFRhZ2dhYmxlLCBGaWVsZGJlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcIm1hcmtkb3duXCIsIFwiYmxvY2tcIiwgTElOS0JFQVJJTkdfVFlQRSwgVEFHR0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duQmxvY2suVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIkJsb2NrXCI7XG4gICAgJGlkOiBzdHJpbmc7XG4gICAgJGZpbGU6IHN0cmluZztcblxuICAgIC8qKiBUaGUgaW5kZXggb2YgdGhpcyBibG9jayBpbiB0aGUgZmlsZS4gKi9cbiAgICAkb3JkaW5hbDogbnVtYmVyO1xuICAgIC8qKiBUaGUgcG9zaXRpb24vZXh0ZW50IG9mIHRoZSBibG9jay4gKi9cbiAgICAkcG9zaXRpb246IExpbmVTcGFuO1xuICAgIC8qKiBBbGwgdGFncyBvbiB0aGUgYmxvY2suICovXG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qKiBBbGwgbGlua3MgaW4gdGhlIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgLyoqIE1hcCBvZiBhbGwgZGlzdGluY3QgaW5saW5lIGZpZWxkcyBpbiB0aGUgZG9jdW1lbnQsIGZyb20ga2V5IG5hbWUgLT4gbWV0YWRhdGEuICovXG4gICAgJGluZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBJbmxpbmVGaWVsZD47XG4gICAgLyoqIElmIHByZXNlbnQsIHRoZSBkaXN0aW5jdCBibG9jayBJRCBmb3IgdGhpcyBibG9jay4gKi9cbiAgICAkYmxvY2tJZD86IHN0cmluZztcbiAgICAvKiogVGhlIHR5cGUgb2YgYmxvY2sgLSBwYXJhZ3JhcGgsIGxpc3QsIGFuZCBzbyBvbi4gKi9cbiAgICAkdHlwZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb20ob2JqZWN0OiBKc29uTWFya2Rvd25CbG9jaywgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUik6IE1hcmtkb3duQmxvY2sge1xuICAgICAgICBpZiAob2JqZWN0LiR0eXBlID09PSBcImxpc3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIE1hcmtkb3duTGlzdEJsb2NrLmZyb20ob2JqZWN0IGFzIEpzb25NYXJrZG93bkxpc3RCbG9jaywgZmlsZSwgbm9ybWFsaXplcik7XG4gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LiR0eXBlID09PSBcImRhdGFibG9ja1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gTWFya2Rvd25EYXRhYmxvY2suZnJvbShvYmplY3QgYXMgSnNvbk1hcmtkb3duRGF0YWJsb2NrLCBmaWxlLCBub3JtYWxpemVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3QuJHR5cGUgPT09IFwiY29kZWJsb2NrXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXJrZG93bkNvZGVibG9jay5mcm9tKG9iamVjdCBhcyBKc29uTWFya2Rvd25Db2RlYmxvY2ssIGZpbGUsIG5vcm1hbGl6ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93bkJsb2NrKHtcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkJsb2NrLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRvcmRpbmFsKSxcbiAgICAgICAgICAgICRvcmRpbmFsOiBvYmplY3QuJG9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogb2JqZWN0LiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiBvYmplY3QuJGxpbmtzLm1hcCgobCkgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobCkpKSxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkYmxvY2tJZDogb2JqZWN0LiRibG9ja0lkLFxuICAgICAgICAgICAgJHR5cGU6IG9iamVjdC4kdHlwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25CbG9jaz4pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcbiAgICB9XG5cbiAgICAvKiogSWYgdGhpcyBibG9jayBoYXMgYSBibG9jayBJRCwgdGhlIGxpbmsgdG8gdGhpcyBibG9jay4gKi9cbiAgICBnZXQgJGxpbmsoKTogTGluayB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLiRibG9ja0lkKSByZXR1cm4gTGluay5ibG9jayh0aGlzLiRmaWxlLCB0aGlzLiRibG9ja0lkKTtcbiAgICAgICAgZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBBbGwgb2YgdGhlIGluZGV4ZWQgZmllbGRzIGluIHRoaXMgb2JqZWN0LiAqL1xuICAgIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkJsb2NrLkZJRUxEX0RFRih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBmaWVsZCBieSBrZXkuICovXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkJsb2NrLkZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF0gPz8gRmllbGRiZWFyaW5ncy5nZXRXaXRoRGVmYXVsdCh0aGlzLCBrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25CbG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkb3JkaW5hbDogdGhpcy4kb3JkaW5hbCxcbiAgICAgICAgICAgICRwb3NpdGlvbjogdGhpcy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy4kbGlua3MubWFwKChsKSA9PiBsLnRvT2JqZWN0KCkpLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kaW5maWVsZHMsIGpzb25JbmxpbmVGaWVsZCksXG4gICAgICAgICAgICAkYmxvY2tJZDogdGhpcy4kYmxvY2tJZCxcbiAgICAgICAgICAgICR0eXBlOiB0aGlzLiR0eXBlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duQmxvY2s+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCksXG4gICAgICAgIEV4dHJhY3RvcnMuaW5saW5lRmllbGRzKChmKSA9PiBmLiRpbmZpZWxkcylcbiAgICApO1xuXG4gICAgLyoqIEdlbmVyYXRlIGEgcmVhZGFibGUgSUQgZm9yIHRoaXMgYmxvY2sgdXNpbmcgdGhlIG9yZGluYWwgb2YgdGhlIGJsb2NrLiAqL1xuICAgIHN0YXRpYyByZWFkYWJsZUlkKGZpbGU6IHN0cmluZywgb3JkaW5hbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2ZpbGV9L2Jsb2NrJHtvcmRpbmFsfWA7XG4gICAgfVxufVxuXG4vKiogU3BlY2lhbCBibG9jayBmb3IgbWFya2Rvd24gbGlzdHMgKG9mIGVpdGhlciBwbGFpbiBsaXN0IGVudHJpZXMgb3IgdGFza3MpLiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duTGlzdEJsb2NrIGV4dGVuZHMgTWFya2Rvd25CbG9jayBpbXBsZW1lbnRzIFRhZ2dhYmxlLCBMaW5rYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJibG9ja1wiLCBcImJsb2NrLWxpc3RcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0JFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25MaXN0QmxvY2suVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIkxpc3QgQmxvY2tcIjtcblxuICAgIC8qKiBUaGUgbGlzdCBpdGVtcyBpbnNpZGUgb2YgdGhpcyBibG9jay4gKi9cbiAgICAkZWxlbWVudHM6IE1hcmtkb3duTGlzdEl0ZW1bXTtcblxuICAgIC8qKiBDcmVhdGUgYSBsaXN0IGJsb2NrIGZyb20gYSBzZXJpYWxpemVkIHZhbHVlLiAqL1xuICAgIHN0YXRpYyBmcm9tKFxuICAgICAgICBvYmplY3Q6IEpzb25NYXJrZG93bkxpc3RCbG9jayxcbiAgICAgICAgZmlsZTogc3RyaW5nLFxuICAgICAgICBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUlxuICAgICk6IE1hcmtkb3duTGlzdEJsb2NrIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBvYmplY3QuJGVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gTWFya2Rvd25MaXN0SXRlbS5mcm9tKGVsZW0sIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93bkxpc3RCbG9jayh7XG4gICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIHNoYXJlZCB3aXRoIG90aGVyIGJsb2Nrcywgc2hvdWxkIHByb2JhYmx5IGJlIGZpeGVkLlxuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duQmxvY2sucmVhZGFibGVJZChmaWxlLCBvYmplY3QuJG9yZGluYWwpLFxuICAgICAgICAgICAgJG9yZGluYWw6IG9iamVjdC4kb3JkaW5hbCxcbiAgICAgICAgICAgICRwb3NpdGlvbjogb2JqZWN0LiRwb3NpdGlvbixcbiAgICAgICAgICAgICR0YWdzOiBvYmplY3QuJHRhZ3MsXG4gICAgICAgICAgICAkbGlua3M6IG9iamVjdC4kbGlua3MubWFwKChsKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsKSkpLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXMob2JqZWN0LiRpbmZpZWxkcywgKGkpID0+IG5vcm1hbGl6ZUxpbmtzKHZhbHVlSW5saW5lRmllbGQoaSksIG5vcm1hbGl6ZXIpKSxcbiAgICAgICAgICAgICRibG9ja0lkOiBvYmplY3QuJGJsb2NrSWQsXG4gICAgICAgICAgICAkZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgICAgICAgJHR5cGU6IFwibGlzdFwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25MaXN0QmxvY2sge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRlbGVtZW50czogdGhpcy4kZWxlbWVudHMubWFwKChlbGVtKSA9PiBlbGVtLmpzb24oKSksXG4gICAgICAgIH0pIGFzIEpzb25NYXJrZG93bkxpc3RCbG9jaztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxNYXJrZG93bkxpc3RCbG9jaz4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxufVxuXG4vKiogQSBibG9jayBjb250YWluaW5nIG1hcmtkb3duIGNvZGUuICovXG5leHBvcnQgY2xhc3MgTWFya2Rvd25Db2RlYmxvY2sgZXh0ZW5kcyBNYXJrZG93bkJsb2NrIGltcGxlbWVudHMgSW5kZXhhYmxlLCBGaWVsZGJlYXJpbmcsIExpbmtiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcImJsb2NrXCIsIFwiY29kZWJsb2NrXCIsIFRBR0dBQkxFX1RZUEUsIExJTktCRUFSSU5HX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBNYXJrZG93bkNvZGVibG9jay5UWVBFUztcbiAgICAkbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgICAkY29udGVudFBvc2l0aW9uOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07XG4gICAgJHN0eWxlOiBcImZlbmNlZFwiIHwgXCJpbmRlbnRcIjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duQ29kZWJsb2NrPikge1xuICAgICAgICBzdXBlcihpbml0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShcbiAgICAgICAgb2JqZWN0OiBKc29uTWFya2Rvd25Db2RlYmxvY2ssXG4gICAgICAgIGZpbGU6IHN0cmluZyxcbiAgICAgICAgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVJcbiAgICApOiBNYXJrZG93bkNvZGVibG9jayB7XG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25Db2RlYmxvY2soe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duQ29kZWJsb2NrLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRwb3NpdGlvbi5zdGFydCksXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkb3JkaW5hbDogb2JqZWN0LiRvcmRpbmFsLFxuICAgICAgICAgICAgJHR5cGVuYW1lOiBcIkNvZGVibG9ja1wiLFxuICAgICAgICAgICAgJHR5cGU6IFwiY29kZWJsb2NrXCIsXG4gICAgICAgICAgICAkYmxvY2tJZDogb2JqZWN0LiRibG9ja0lkLFxuICAgICAgICAgICAgJGxhbmd1YWdlczogb2JqZWN0LiRsYW5ndWFnZXMsXG4gICAgICAgICAgICAkbGlua3M6IG9iamVjdC4kbGlua3MubWFwKChsaW5rKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsaW5rKSkpLFxuICAgICAgICAgICAgJHRhZ3M6IG9iamVjdC4kdGFncyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIHZhbHVlSW5saW5lRmllbGQpLFxuICAgICAgICAgICAgJGNvbnRlbnRQb3NpdGlvbjogb2JqZWN0LiRjb250ZW50UG9zaXRpb24sXG4gICAgICAgICAgICAkc3R5bGU6IG9iamVjdC4kc3R5bGUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBBbGwgb2YgdGhlIGluZGV4ZWQgZmllbGRzIGluIHRoaXMgb2JqZWN0LiAqL1xuICAgIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkNvZGVibG9jay5TVUJfRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBGZXRjaCBhIHNwZWNpZmljIGZpZWxkIGJ5IGtleS4gKi9cbiAgICBwdWJsaWMgZmllbGQoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duQ29kZWJsb2NrLlNVQl9GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duQ29kZWJsb2NrIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3VwZXIuanNvbigpLCB7XG4gICAgICAgICAgICAkbGFuZ3VhZ2VzOiB0aGlzLiRsYW5ndWFnZXMsXG4gICAgICAgICAgICAkY29udGVudFBvc2l0aW9uOiB0aGlzLiRjb250ZW50UG9zaXRpb24sXG4gICAgICAgICAgICAkc3R5bGU6IHRoaXMuJHN0eWxlLFxuICAgICAgICB9KSBhcyBKc29uTWFya2Rvd25Db2RlYmxvY2s7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWRhYmxlSWQoZmlsZTogc3RyaW5nLCBsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZmlsZX0vY29kZWJsb2NrJHtsaW5lfWA7XG4gICAgfVxuXG4gICAgc3RhdGljIFNVQl9GSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duQ29kZWJsb2NrPiA9IEV4dHJhY3RvcnMubWVyZ2U8TWFya2Rvd25Db2RlYmxvY2s+KFxuICAgICAgICBNYXJrZG93bkJsb2NrLkZJRUxEX0RFRlxuICAgICk7XG59XG5cbi8qKiBBIGRhdGEtYW5ub3RhdGVkIFlBTUwgY29kZWJsb2NrLiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duRGF0YWJsb2NrIGV4dGVuZHMgTWFya2Rvd25CbG9jayBpbXBsZW1lbnRzIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nLCBMaW5rYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJibG9ja1wiLCBcImRhdGFibG9ja1wiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25EYXRhYmxvY2suVFlQRVM7XG4gICAgJGRhdGE6IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25EYXRhYmxvY2s+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKFxuICAgICAgICBvYmplY3Q6IEpzb25NYXJrZG93bkRhdGFibG9jayxcbiAgICAgICAgZmlsZTogc3RyaW5nLFxuICAgICAgICBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUlxuICAgICk6IE1hcmtkb3duRGF0YWJsb2NrIHtcbiAgICAgICAgLy8gRGF0YWJsb2NrcyBhcmUgYmFzZWQgb24gd2hhdCBpcyBlc3NlbnRpYWxseSBqdXN0IGZyb250bWF0dGVyOyB3ZSBjYW4gYXBwbHlcbiAgICAgICAgLy8gdGhlIHNhbWUgbm9ybWFsaXphdGlvbiBsb2dpYyB0byB0aGVtLlxuICAgICAgICBjb25zdCBub3JtZGF0YSA9IG5vcm1hbGl6ZUxpbmtzKG1hcE9iamVjdFZhbHVlcyhvYmplY3QuJGRhdGEsIHZhbHVlRnJvbnRtYXR0ZXJFbnRyeSksIG5vcm1hbGl6ZXIpO1xuICAgICAgICBjb25zdCBsaW5rcyA9IGdhdGhlckxpbmtzKG5vcm1kYXRhKTtcbiAgICAgICAgY29uc3QgdGFncyA9IGdhdGhlclRhZ3Mobm9ybWRhdGEpO1xuXG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25EYXRhYmxvY2soe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duRGF0YWJsb2NrLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRwb3NpdGlvbi5zdGFydCksXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkaW5maWVsZHM6IHt9LFxuICAgICAgICAgICAgJG9yZGluYWw6IG9iamVjdC4kb3JkaW5hbCxcbiAgICAgICAgICAgICRkYXRhOiBub3JtZGF0YSxcbiAgICAgICAgICAgICRsaW5rczogbGlua3MsXG4gICAgICAgICAgICAkdHlwZW5hbWU6IFwiRGF0YWJsb2NrXCIsXG4gICAgICAgICAgICAkdGFnczogdGFncyxcbiAgICAgICAgICAgICR0eXBlOiBcImRhdGFibG9ja1wiLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbCBvZiB0aGUgaW5kZXhlZCBmaWVsZHMgaW4gdGhpcyBvYmplY3QuICovXG4gICAgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duRGF0YWJsb2NrLlNVQl9GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGEgc3BlY2lmaWMgZmllbGQgYnkga2V5LiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25EYXRhYmxvY2suU1VCX0ZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF0gPz8gRmllbGRiZWFyaW5ncy5nZXRXaXRoRGVmYXVsdCh0aGlzLCBrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25EYXRhYmxvY2sge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRkYXRhOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kZGF0YSwganNvbkZyb250bWF0dGVyRW50cnkpLFxuICAgICAgICB9KSBhcyBKc29uTWFya2Rvd25EYXRhYmxvY2s7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWRhYmxlSWQoZmlsZTogc3RyaW5nLCBsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZmlsZX0vZGF0YWJsb2NrJHtsaW5lfWA7XG4gICAgfVxuXG4gICAgc3RhdGljIFNVQl9GSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duRGF0YWJsb2NrPiA9IEV4dHJhY3RvcnMubWVyZ2U8TWFya2Rvd25EYXRhYmxvY2s+KFxuICAgICAgICBNYXJrZG93bkJsb2NrLkZJRUxEX0RFRixcbiAgICAgICAgRXh0cmFjdG9ycy5mcm9udG1hdHRlcigoZikgPT4gZi4kZGF0YSlcbiAgICApO1xufVxuXG4vKiogQSBzcGVjaWZpYyBsaXN0IGl0ZW0gaW4gYSBsaXN0LiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duTGlzdEl0ZW0gaW1wbGVtZW50cyBJbmRleGFibGUsIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcImxpc3QtaXRlbVwiLCBMSU5LQkVBUklOR19UWVBFLCBUQUdHQUJMRV9UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25MaXN0SXRlbS5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiTGlzdCBJdGVtXCI7XG4gICAgJGlkOiBzdHJpbmc7XG4gICAgJGZpbGU6IHN0cmluZztcblxuICAgIC8qKiBUaGUgcG9zaXRpb24gb2YgdGhlIGxpc3QgaXRlbSBpbiB0aGUgZmlsZS4gKi9cbiAgICAkcG9zaXRpb246IExpbmVTcGFuO1xuICAgIC8qKiBDaGlsZCBlbGVtZW50cyBvZiB0aGlzIGxpc3QgaXRlbS4gKi9cbiAgICAkZWxlbWVudHM6IE1hcmtkb3duTGlzdEl0ZW1bXTtcbiAgICAvKiogVGhlIHR5cGUgb2YgbGlzdCBpdGVtIHRoYXQgdGhpcyBlbGVtZW50IGlzLiAqL1xuICAgICR0eXBlOiBzdHJpbmc7XG4gICAgLyoqIEV4YWN0IHRhZ3Mgb24gdGhpcyBsaXN0IGl0ZW0uICovXG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qKiBNYXAgb2YgYWxsIGRpc3RpbmN0IGlubGluZSBmaWVsZHMgaW4gdGhlIGRvY3VtZW50LCBmcm9tIGtleSBuYW1lIC0+IG1ldGFkYXRhLiAqL1xuICAgICRpbmZpZWxkczogUmVjb3JkPHN0cmluZywgSW5saW5lRmllbGQ+O1xuICAgIC8qKiBBbGwgbGlua3MgaW4gdGhlIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgLyoqIFRoZSBibG9jayBJRCBvZiB0aGlzIGxpc3QgaXRlbSBpZiBwcmVzZW50LiAqL1xuICAgICRibG9ja0lkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBsaW5lIG51bWJlciBvZiB0aGUgcGFyZW50IG9mIHRoaXMgbGlzdCBpdGVtLlxuICAgICAqIElmIGEgcG9zaXRpdmUgbnVtYmVyLCB0aGVuIHRoaXMgbGlzdCBlbGVtZW50IGlzIGEgY2hpbGRcbiAgICAgKiBvZiB0aGUgbGlzdCBlbGVtZW50IGF0IHRoYXQgbGluZS5cbiAgICAgKlxuICAgICAqIElmIGEgbmVnYXRpdmUgbnVtYmVyLCB0aGVuIHRoaXMgbGlzdCBlbGVtZW50IGlzIGEgcm9vdCBlbGVtZW50XG4gICAgICogb2YgYSBsaXN0IHN0YXJ0aW5nIGF0IHRoYXQgbGluZSAobmVnYXRlZCkuIEkuZS4sIC03IG1lYW5zXG4gICAgICogdGhpcyBpcyBhIHJvb3QgZWxlbWVudCBvZiB0aGUgbGlzdCBzdGFydGluZyBhdCBsaW5lIDcuXG4gICAgICovXG4gICAgJHBhcmVudExpbmU6IG51bWJlcjtcbiAgICAvKiogVGhlIG1hcmtlciB1c2VkIHRvIHN0YXJ0IHRoZSBsaXN0IGl0ZW0gKHN1Y2ggYXMgLSBvciArIG9yICopLiBPbiBhIG1hbGZvcm1lZCB0YXNrLCBtYXkgYmUgdW5kZWZpbmVkLiAqL1xuICAgICRzeW1ib2w/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSB0ZXh0IGNvbnRlbnRzIG9mIHRoZSBsaXN0IGl0ZW0uICovXG4gICAgJHRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKiogQ3JlYXRlIGEgbGlzdCBpdGVtIGZyb20gYSBzZXJpYWxpemVkIG9iamVjdC4gKi9cbiAgICBzdGF0aWMgZnJvbShcbiAgICAgICAgb2JqZWN0OiBKc29uTWFya2Rvd25MaXN0SXRlbSxcbiAgICAgICAgZmlsZTogc3RyaW5nLFxuICAgICAgICBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUlxuICAgICk6IE1hcmtkb3duTGlzdEl0ZW0ge1xuICAgICAgICBpZiAob2JqZWN0LiR0eXBlID09PSBcInRhc2tcIikgcmV0dXJuIE1hcmtkb3duVGFza0l0ZW0uZnJvbShvYmplY3QgYXMgSnNvbk1hcmtkb3duVGFza0l0ZW0sIGZpbGUsIG5vcm1hbGl6ZXIpO1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gb2JqZWN0LiRlbGVtZW50cy5tYXAoKGVsZW0pID0+IE1hcmtkb3duTGlzdEl0ZW0uZnJvbShlbGVtLCBmaWxlLCBub3JtYWxpemVyKSk7XG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25MaXN0SXRlbSh7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogTWFya2Rvd25MaXN0SXRlbS5yZWFkYWJsZUlkKGZpbGUsIG9iamVjdC4kcG9zaXRpb24uc3RhcnQpLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiBvYmplY3QuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgICAgICAgICR0eXBlOiBvYmplY3QuJHR5cGUsXG4gICAgICAgICAgICAkdGFnczogb2JqZWN0LiR0YWdzLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXMob2JqZWN0LiRpbmZpZWxkcywgKGkpID0+IG5vcm1hbGl6ZUxpbmtzKHZhbHVlSW5saW5lRmllbGQoaSksIG5vcm1hbGl6ZXIpKSxcbiAgICAgICAgICAgICRsaW5rczogb2JqZWN0LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkYmxvY2tJZDogb2JqZWN0LiRibG9ja0lkLFxuICAgICAgICAgICAgJHBhcmVudExpbmU6IG9iamVjdC4kcGFyZW50TGluZSxcbiAgICAgICAgICAgICR0ZXh0OiBvYmplY3QuJHRleHQsXG4gICAgICAgICAgICAkc3ltYm9sOiBvYmplY3QuJHN5bWJvbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25MaXN0SXRlbT4pIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBsaW5lIHRoYXQgdGhpcyBsaXN0IGl0ZW0gc3RhcnRzIG9uLiAqL1xuICAgIGdldCAkbGluZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcG9zaXRpb24uc3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhpcyBsaXN0IGl0ZW0uICovXG4gICAgZ2V0ICRsaW5lQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvc2l0aW9uLmVuZCAtIHRoaXMuJHBvc2l0aW9uLnN0YXJ0ICsgMTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYW5lZCB0ZXh0IHRoYXQgaXMgZ2FyYXVudGVlZCB0byBiZSBub24tbnVsbCBhbmQgaGFzIGluZGVuYXRpb24gYW5kIGlubGluZSBmaWVsZHMgcmVtb3ZlZC4gKi9cbiAgICBnZXQgJGNsZWFudGV4dCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLiR0ZXh0KSByZXR1cm4gXCJcIjtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy4kdGV4dFxuICAgICAgICAgICAgICAgIC8vIEVsaW1pbmF0ZSBba2V5OjogdmFsdWVdIGFubm90YXRpb25zLlxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oLio/KShbXFxbXFwoXVteOihcXFtdKzo6XFxzKi4qP1tcXF1cXCldXFxzKikkL2dtLCBcIiQxXCIpXG4gICAgICAgICAgICAgICAgLy8gVHJpbSB3aGl0ZXNwYWNlLlxuICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25MaXN0SXRlbS5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGEgc3BlY2lmaWMgZmllbGQgYnkga2V5LiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25MaXN0SXRlbS5GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duTGlzdEl0ZW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJHBvc2l0aW9uOiB0aGlzLiRwb3NpdGlvbixcbiAgICAgICAgICAgICRlbGVtZW50czogdGhpcy4kZWxlbWVudHMubWFwKChlbGVtKSA9PiBlbGVtLmpzb24oKSksXG4gICAgICAgICAgICAkdHlwZTogdGhpcy4kdHlwZSxcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLiR0YWdzLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kaW5maWVsZHMsIGpzb25JbmxpbmVGaWVsZCksXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuJGJsb2NrSWQsXG4gICAgICAgICAgICAkcGFyZW50TGluZTogdGhpcy4kcGFyZW50TGluZSxcbiAgICAgICAgICAgICRzeW1ib2w6IHRoaXMuJHN5bWJvbCxcbiAgICAgICAgICAgICR0ZXh0OiB0aGlzLiR0ZXh0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8TWFya2Rvd25MaXN0SXRlbT4gPSBFeHRyYWN0b3JzLm1lcmdlKFxuICAgICAgICBFeHRyYWN0b3JzLmludHJpbnNpY3MoKSxcbiAgICAgICAgRXh0cmFjdG9ycy5pbmxpbmVGaWVsZHMoKGYpID0+IGYuJGluZmllbGRzKVxuICAgICk7XG5cbiAgICAvKiogR2VuZXJhdGUgYSByZWFkYWJsZSBJRCBmb3IgdGhpcyBpdGVtIHVzaW5nIHRoZSBsaW5lIG51bWJlci4gKi9cbiAgICBzdGF0aWMgcmVhZGFibGVJZChmaWxlOiBzdHJpbmcsIGxpbmU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtmaWxlfS9saXN0JHtsaW5lfWA7XG4gICAgfVxufVxuXG4vKiogQSBzcGVjaWZpYyB0YXNrIGluc2lkZSBvZiBhIG1hcmtkb3duIGxpc3QuICovXG5leHBvcnQgY2xhc3MgTWFya2Rvd25UYXNrSXRlbSBleHRlbmRzIE1hcmtkb3duTGlzdEl0ZW0gaW1wbGVtZW50cyBJbmRleGFibGUsIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcImxpc3QtaXRlbVwiLCBcInRhc2tcIiwgTElOS0JFQVJJTkdfVFlQRSwgVEFHR0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duVGFza0l0ZW0uVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIlRhc2tcIjtcblxuICAgIC8qKiBUaGUgdGV4dCBpbnNpZGUgb2YgdGhlIHRhc2sgaXRlbS4gKi9cbiAgICAkc3RhdHVzOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb20ob2JqZWN0OiBKc29uTWFya2Rvd25UYXNrSXRlbSwgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplcik6IE1hcmtkb3duVGFza0l0ZW0ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IG9iamVjdC4kZWxlbWVudHMubWFwKChlbGVtKSA9PiBNYXJrZG93bkxpc3RJdGVtLmZyb20oZWxlbSwgZmlsZSwgbm9ybWFsaXplcikpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duVGFza0l0ZW0oe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duTGlzdEl0ZW0ucmVhZGFibGVJZChmaWxlLCBvYmplY3QuJHBvc2l0aW9uLnN0YXJ0KSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogb2JqZWN0LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRlbGVtZW50czogZWxlbWVudHMsXG4gICAgICAgICAgICAkdHlwZTogb2JqZWN0LiR0eXBlLFxuICAgICAgICAgICAgJHRhZ3M6IG9iamVjdC4kdGFncyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkbGlua3M6IG9iamVjdC4kbGlua3MubWFwKChsKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsKSkpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgICAgICRwYXJlbnRMaW5lOiBvYmplY3QuJHBhcmVudExpbmUsXG4gICAgICAgICAgICAkc3RhdHVzOiBvYmplY3QuJHN0YXR1cyxcbiAgICAgICAgICAgICRzeW1ib2w6IG9iamVjdC4kc3ltYm9sLFxuICAgICAgICAgICAgJHRleHQ6IG9iamVjdC4kdGV4dCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25UYXNrSXRlbT4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duTGlzdEl0ZW0ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRzdGF0dXM6IHRoaXMuJHN0YXR1cyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gdGFzayBpcyBjb21wbGV0ZWQuICovXG4gICAgcHVibGljIGdldCAkY29tcGxldGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RhdHVzID09PSBcInhcIiB8fCB0aGlzLiRzdGF0dXMgPT09IFwiWFwiO1xuICAgIH1cbn1cblxuLyoqIEFuIGVudHJ5IGluIHRoZSBmcm9udG1hdHRlcjsgaW5jbHVkZXMgdGhlIHJhdyB2YWx1ZSwgcGFyc2VkIHZhbHVlLCBhbmQgcmF3IGtleSAoYmVmb3JlIGxvd2VyLWNhc2luZykuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250bWF0dGVyRW50cnkge1xuICAgIC8qKiBUaGUgYWN0dWFsIHN0cmluZyBpbiBmcm9udG1hdHRlciB3aXRoIGV4YWN0IGNhc2luZy4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHBhcnNlZCB2YWx1ZSBvZiB0aGUgZnJvbnRtYXR0ZXIgZW50cnkgKGRhdGUsIGR1cmF0aW9uLCBldGMuKS4gKi9cbiAgICB2YWx1ZTogTGl0ZXJhbDtcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgZnJvbnRtYXR0ZXIgZW50cnkgYmVmb3JlIHBhcnNpbmc7IGdlbmVyYWxseSBhIHN0cmluZyBvciBudW1iZXIuICovXG4gICAgcmF3OiBzdHJpbmc7XG59XG5cbi8qKiBDb252ZXJ0IGEgcmVndWxhciBmcm9udG1hdHRlciBlbnRyeSBpbnRvIGEgSlNPTiBmcm9udG1hdHRlciBlbnRyeS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25Gcm9udG1hdHRlckVudHJ5KHJhdzogRnJvbnRtYXR0ZXJFbnRyeSk6IEpzb25Gcm9udG1hdHRlckVudHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHJhdy5rZXksXG4gICAgICAgIHZhbHVlOiBKc29uQ29udmVyc2lvbi5qc29uKHJhdy52YWx1ZSksXG4gICAgICAgIHJhdzogcmF3LnJhdyxcbiAgICB9O1xufVxuXG4vKiogQ29udmVydCBhIGpzb24gZnJvbnRtYXR0ZXIgZW50cnkgdG8gYSByZWd1bGFyIGZyb250bWF0dGVyIGVudHJ5LlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9udG1hdHRlckVudHJ5KHJhdzogSnNvbkZyb250bWF0dGVyRW50cnkpOiBGcm9udG1hdHRlckVudHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHJhdy5rZXksXG4gICAgICAgIHZhbHVlOiBKc29uQ29udmVyc2lvbi52YWx1ZShyYXcudmFsdWUpLFxuICAgICAgICByYXc6IHJhdy5yYXcsXG4gICAgfTtcbn1cblxuLyoqIE5vcm1hbGl6ZSBsaW5rcyBkZWVwbHkgaW4gdGhlIG9iamVjdC5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxpbmtzPFQgZXh0ZW5kcyBMaXRlcmFsPihpbnB1dDogVCwgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIpOiBUIHtcbiAgICByZXR1cm4gTGl0ZXJhbHMubWFwTGVhdmVzKGlucHV0LCAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKExpdGVyYWxzLmlzTGluayh2YWx1ZSkpIHJldHVybiBub3JtYWxpemVyKHZhbHVlKTtcbiAgICAgICAgZWxzZSByZXR1cm4gdmFsdWU7XG4gICAgfSkgYXMgVDtcbn1cblxuLyoqIFJlY3Vyc2l2ZWx5IGdhdGhlciBsaW5rcyBmcm9tIGEgbGl0ZXJhbCBvYmplY3QuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJMaW5rcyhpbnB1dDogTGl0ZXJhbCk6IExpbmtbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBMaW5rW10gPSBbXTtcblxuICAgIExpdGVyYWxzLm1hcExlYXZlcyhpbnB1dCwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChMaXRlcmFscy5pc0xpbmsodmFsdWUpKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIEdhdGhlciB0YWdzIGZyb20gYSBkYXRhYmxvY2suXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJUYWdzKGRhdGE6IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+KTogc3RyaW5nW10ge1xuICAgIGZ1bmN0aW9uIHJlY3Vyc2UoaW5wdXQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKExpdGVyYWxzLmlzU3RyaW5nKGlucHV0KSkgcmV0dXJuIFtpbnB1dC5zdGFydHNXaXRoKFwiI1wiKSA/IGlucHV0IDogXCIjXCIgKyBpbnB1dF07XG4gICAgICAgIGVsc2UgaWYgKExpdGVyYWxzLmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gaW5wdXQuZmxhdE1hcChyZWN1cnNlKTtcbiAgICAgICAgZWxzZSByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IHRhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKFwidGFnXCIgaW4gZGF0YSkgdGFncyA9IHRhZ3MuY29uY2F0KHJlY3Vyc2UoZGF0YVtcInRhZ3NcIl0pKTtcbiAgICBpZiAoXCJ0YWdzXCIgaW4gZGF0YSkgdGFncyA9IHRhZ3MuY29uY2F0KHJlY3Vyc2UoZGF0YVtcInRhZ3NcIl0pKTtcblxuICAgIHJldHVybiB0YWdzO1xufVxuXG4vKiogQSBsaW5rIG5vcm1hbGl6ZXIgd2hpY2ggdGFrZXMgaW4gYSByYXcgbGluayBhbmQgcHJvZHVjZXMgYSBub3JtYWxpemVkIGxpbmsuICovXG5leHBvcnQgdHlwZSBMaW5rTm9ybWFsaXplciA9IChsaW5rOiBMaW5rKSA9PiBMaW5rO1xuZXhwb3J0IGNvbnN0IE5PT1BfTk9STUFMSVpFUjogTGlua05vcm1hbGl6ZXIgPSAoeCkgPT4geDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gIHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcbiAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcbiAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwgImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59IiwgImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCAiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRJbnB1dFZhbHVlXCIsIFwiZGVmYXVsdE1lbnVJc09wZW5cIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJpbnB1dFZhbHVlXCIsIFwibWVudUlzT3BlblwiLCBcIm9uQ2hhbmdlXCIsIFwib25JbnB1dENoYW5nZVwiLCBcIm9uTWVudUNsb3NlXCIsIFwib25NZW51T3BlblwiLCBcInZhbHVlXCJdO1xuZnVuY3Rpb24gdXNlU3RhdGVNYW5hZ2VyKF9yZWYpIHtcbiAgdmFyIF9yZWYkZGVmYXVsdElucHV0VmFsdSA9IF9yZWYuZGVmYXVsdElucHV0VmFsdWUsXG4gICAgZGVmYXVsdElucHV0VmFsdWUgPSBfcmVmJGRlZmF1bHRJbnB1dFZhbHUgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRkZWZhdWx0SW5wdXRWYWx1LFxuICAgIF9yZWYkZGVmYXVsdE1lbnVJc09wZSA9IF9yZWYuZGVmYXVsdE1lbnVJc09wZW4sXG4gICAgZGVmYXVsdE1lbnVJc09wZW4gPSBfcmVmJGRlZmF1bHRNZW51SXNPcGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRkZWZhdWx0TWVudUlzT3BlLFxuICAgIF9yZWYkZGVmYXVsdFZhbHVlID0gX3JlZi5kZWZhdWx0VmFsdWUsXG4gICAgZGVmYXVsdFZhbHVlID0gX3JlZiRkZWZhdWx0VmFsdWUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGRlZmF1bHRWYWx1ZSxcbiAgICBwcm9wc0lucHV0VmFsdWUgPSBfcmVmLmlucHV0VmFsdWUsXG4gICAgcHJvcHNNZW51SXNPcGVuID0gX3JlZi5tZW51SXNPcGVuLFxuICAgIHByb3BzT25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgIHByb3BzT25JbnB1dENoYW5nZSA9IF9yZWYub25JbnB1dENoYW5nZSxcbiAgICBwcm9wc09uTWVudUNsb3NlID0gX3JlZi5vbk1lbnVDbG9zZSxcbiAgICBwcm9wc09uTWVudU9wZW4gPSBfcmVmLm9uTWVudU9wZW4sXG4gICAgcHJvcHNWYWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgcmVzdFNlbGVjdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShwcm9wc0lucHV0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3BzSW5wdXRWYWx1ZSA6IGRlZmF1bHRJbnB1dFZhbHVlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzdGF0ZUlucHV0VmFsdWUgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFN0YXRlSW5wdXRWYWx1ZSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUocHJvcHNNZW51SXNPcGVuICE9PSB1bmRlZmluZWQgPyBwcm9wc01lbnVJc09wZW4gOiBkZWZhdWx0TWVudUlzT3BlbiksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHN0YXRlTWVudUlzT3BlbiA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0U3RhdGVNZW51SXNPcGVuID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShwcm9wc1ZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm9wc1ZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgc3RhdGVWYWx1ZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0U3RhdGVWYWx1ZSA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcHNPbkNoYW5nZSh2YWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfVxuICAgIHNldFN0YXRlVmFsdWUodmFsdWUpO1xuICB9LCBbcHJvcHNPbkNoYW5nZV0pO1xuICB2YXIgb25JbnB1dENoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgIHZhciBuZXdWYWx1ZTtcbiAgICBpZiAodHlwZW9mIHByb3BzT25JbnB1dENoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV3VmFsdWUgPSBwcm9wc09uSW5wdXRDaGFuZ2UodmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH1cbiAgICBzZXRTdGF0ZUlucHV0VmFsdWUobmV3VmFsdWUgIT09IHVuZGVmaW5lZCA/IG5ld1ZhbHVlIDogdmFsdWUpO1xuICB9LCBbcHJvcHNPbklucHV0Q2hhbmdlXSk7XG4gIHZhciBvbk1lbnVPcGVuID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbk1lbnVPcGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wc09uTWVudU9wZW4oKTtcbiAgICB9XG4gICAgc2V0U3RhdGVNZW51SXNPcGVuKHRydWUpO1xuICB9LCBbcHJvcHNPbk1lbnVPcGVuXSk7XG4gIHZhciBvbk1lbnVDbG9zZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzT25NZW51Q2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BzT25NZW51Q2xvc2UoKTtcbiAgICB9XG4gICAgc2V0U3RhdGVNZW51SXNPcGVuKGZhbHNlKTtcbiAgfSwgW3Byb3BzT25NZW51Q2xvc2VdKTtcbiAgdmFyIGlucHV0VmFsdWUgPSBwcm9wc0lucHV0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3BzSW5wdXRWYWx1ZSA6IHN0YXRlSW5wdXRWYWx1ZTtcbiAgdmFyIG1lbnVJc09wZW4gPSBwcm9wc01lbnVJc09wZW4gIT09IHVuZGVmaW5lZCA/IHByb3BzTWVudUlzT3BlbiA6IHN0YXRlTWVudUlzT3BlbjtcbiAgdmFyIHZhbHVlID0gcHJvcHNWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvcHNWYWx1ZSA6IHN0YXRlVmFsdWU7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RTZWxlY3RQcm9wcyksIHt9LCB7XG4gICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICBtZW51SXNPcGVuOiBtZW51SXNPcGVuLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBvbklucHV0Q2hhbmdlOiBvbklucHV0Q2hhbmdlLFxuICAgIG9uTWVudUNsb3NlOiBvbk1lbnVDbG9zZSxcbiAgICBvbk1lbnVPcGVuOiBvbk1lbnVPcGVuLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZXhwb3J0IHsgdXNlU3RhdGVNYW5hZ2VyIGFzIHUgfTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9KSgpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsICJpbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vZ2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5pbXBvcnQgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tIFwiLi9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgdmFyIFN1cGVyID0gZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksXG4gICAgICByZXN1bHQ7XG4gICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgIHZhciBOZXdUYXJnZXQgPSBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gIH07XG59IiwgImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsICJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59IiwgIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwgXHUyNzY0XHVGRTBGXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0ICYmIHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1O1xuXG4gICAgICBpZiAoaXNJbXBvcnRSdWxlICYmIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlKSB7XG4gICAgICAgIC8vIHRoaXMgd291bGQgb25seSBjYXVzZSBwcm9ibGVtIGluIHNwZWVkeSBtb2RlXG4gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IGVuYWJsaW5nIHNwZWVkeSB0byBhZmZlY3QgdGhlIG9ic2VydmFibGUgYmVoYXZpb3JcbiAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoaXMgZXJyb3IgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UncmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlIGZvbGxvd2luZyBydWxlOlxcblwiICsgcnVsZSArICdcXG5cXG5gQGltcG9ydGAgcnVsZXMgbXVzdCBiZSBiZWZvcmUgYWxsIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGluIGEgc3R5bGVzaGVldCBidXQgb3RoZXIgcnVsZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCBgQGltcG9ydGAgcnVsZXMgYXJlIGJlZm9yZSBhbGwgb3RoZXIgcnVsZXMuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIHx8ICFpc0ltcG9ydFJ1bGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhLzooLW1vei1wbGFjZWhvbGRlcnwtbW96LWZvY3VzLWlubmVyfC1tb3otZm9jdXNyaW5nfC1tcy1pbnB1dC1wbGFjZWhvbGRlcnwtbW96LXJlYWQtd3JpdGV8LW1vei1yZWFkLW9ubHl8LW1zLWNsZWFyfC1tcy1leHBhbmR8LW1zLXJldmVhbCl7Ly50ZXN0KHJ1bGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZSAmJiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwgImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwgIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsICJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCAiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIGNoYXJhdCwgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDogaWYgKGFtcGVyc2FuZCA9PSAtMSkgY2hhcmFjdGVycyA9IHJlcGxhY2UoY2hhcmFjdGVycywgL1xcZi9nLCAnJylcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCAiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsICJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwgInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcbnZhciBVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiA9IFwiWW91IGhhdmUgcGFzc2VkIGluIGZhbHN5IHZhbHVlIGFzIHN0eWxlIG9iamVjdCdzIGtleSAoY2FuIGhhcHBlbiB3aGVuIGluIGV4YW1wbGUgeW91IHBhc3MgdW5leHBvcnRlZCBjb21wb25lbnQgYXMgY29tcHV0ZWQga2V5KS5cIjtcbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8odmFyfGF0dHJ8Y291bnRlcnM/fHVybHxlbGVtZW50fCgoKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKSl8Y29uaWMpLWdyYWRpZW50KVxcKHwobm8tKT8ob3BlbnxjbG9zZSktcXVvdGUvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyooO3wkKS9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vZztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgc3luY0ZhbGxiYWNrO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBSZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIEZvciBwZXJmb3JtYW5jZSwgb25seSBjYWxsIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgaW4gZGV2ZWxvcG1lbnQgYW5kIHdoZW5cbiAgLy8gdGhlIGxhYmVsIGhhc24ndCBhbHJlYWR5IGJlZW4gY29tcHV0ZWRcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhIXByb3BzLmNzcyAmJiAodHlwZW9mIHByb3BzLmNzcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHByb3BzLmNzcy5uYW1lICE9PSAnc3RyaW5nJyB8fCBwcm9wcy5jc3MubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSkge1xuICAgIHZhciBsYWJlbCA9IGdldExhYmVsRnJvbVN0YWNrVHJhY2UobmV3IEVycm9yKCkuc3RhY2spO1xuICAgIGlmIChsYWJlbCkgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBsYWJlbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNCcm93c2VyIGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzQnJvd3NlciQxIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMnO1xuZXhwb3J0IHsgQyBhcyBDYWNoZVByb3ZpZGVyLCBUIGFzIFRoZW1lQ29udGV4dCwgYSBhcyBUaGVtZVByb3ZpZGVyLCBfIGFzIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSwgdSBhcyB1c2VUaGVtZSwgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBiIGFzIHdpdGhUaGVtZSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxudmFyIHBrZyA9IHtcblx0bmFtZTogXCJAZW1vdGlvbi9yZWFjdFwiLFxuXHR2ZXJzaW9uOiBcIjExLjExLjRcIixcblx0bWFpbjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCIsXG5cdG1vZHVsZTogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCIsXG5cdGJyb3dzZXI6IHtcblx0XHRcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCJcblx0fSxcblx0ZXhwb3J0czoge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0Lndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9faXNvbGF0ZWQtaG5yc1wiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL3BhY2thZ2UuanNvblwiOiBcIi4vcGFja2FnZS5qc29uXCIsXG5cdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdHR5cGVzOiB7XG5cdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdH1cblx0fSxcblx0dHlwZXM6IFwidHlwZXMvaW5kZXguZC50c1wiLFxuXHRmaWxlczogW1xuXHRcdFwic3JjXCIsXG5cdFx0XCJkaXN0XCIsXG5cdFx0XCJqc3gtcnVudGltZVwiLFxuXHRcdFwianN4LWRldi1ydW50aW1lXCIsXG5cdFx0XCJfaXNvbGF0ZWQtaG5yc1wiLFxuXHRcdFwidHlwZXMvKi5kLnRzXCIsXG5cdFx0XCJtYWNyby4qXCJcblx0XSxcblx0c2lkZUVmZmVjdHM6IGZhbHNlLFxuXHRhdXRob3I6IFwiRW1vdGlvbiBDb250cmlidXRvcnNcIixcblx0bGljZW5zZTogXCJNSVRcIixcblx0c2NyaXB0czoge1xuXHRcdFwidGVzdDp0eXBlc2NyaXB0XCI6IFwiZHRzbGludCB0eXBlc1wiXG5cdH0sXG5cdGRlcGVuZGVuY2llczoge1xuXHRcdFwiQGJhYmVsL3J1bnRpbWVcIjogXCJeNy4xOC4zXCIsXG5cdFx0XCJAZW1vdGlvbi9iYWJlbC1wbHVnaW5cIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vY2FjaGVcIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc2VyaWFsaXplXCI6IFwiXjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc1wiOiBcIl4xLjAuMVwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjFcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMVwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0cmVhY3Q6IFwiPj0xNi44LjBcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzTWV0YToge1xuXHRcdFwiQHR5cGVzL3JlYWN0XCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fVxuXHR9LFxuXHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjExLjJcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjNcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjExLjBcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcdFx0XCJpbXBvcnRcIjogXCIuL21hY3JvLmQubXRzXCIsXG5cdFx0XHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbnZhciBqc3ggPSBmdW5jdGlvbiBqc3godHlwZSwgcHJvcHMpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gZmFsc2U7IC8vIG1haW50YWluIHBsYWNlIG92ZXIgcmVyZW5kZXJzLlxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIkMSkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIHNlcmlhbGl6ZWROYW1lcyA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZC5uZXh0O1xuXG4gICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VyaWFsaXplZE5hbWVzICs9ICcgJyArIG5leHQubmFtZTtcbiAgICAgIHNlcmlhbGl6ZWRTdHlsZXMgKz0gbmV4dC5zdHlsZXM7XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgIH1cblxuICAgIHZhciBzaG91bGRDYWNoZSA9IGNhY2hlLmNvbXBhdCA9PT0gdHJ1ZTtcbiAgICB2YXIgcnVsZXMgPSBjYWNoZS5pbnNlcnQoXCJcIiwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZE5hbWVzLFxuICAgICAgc3R5bGVzOiBzZXJpYWxpemVkU3R5bGVzXG4gICAgfSwgY2FjaGUuc2hlZXQsIHNob3VsZENhY2hlKTtcblxuICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYgPSB7fSwgX3JlZltcImRhdGEtZW1vdGlvblwiXSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbCBcIiArIHNlcmlhbGl6ZWROYW1lcywgX3JlZi5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgIF9faHRtbDogcnVsZXNcbiAgICB9LCBfcmVmLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYpKTtcbiAgfSAvLyB5ZXMsIGkga25vdyB0aGVzZSBob29rcyBhcmUgdXNlZCBjb25kaXRpb25hbGx5XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR2xvYmFsLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25HbG9iYWwnO1xufVxuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmcuc3R5bGVzICE9PSB1bmRlZmluZWQgJiYgYXJnLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBwYXNzZWQgc3R5bGVzIGNyZWF0ZWQgd2l0aCBgY3NzYCBmcm9tIGBAZW1vdGlvbi9yZWFjdGAgcGFja2FnZSB0byB0aGUgYGN4YC5cXG4nICsgJ2BjeGAgaXMgbWVhbnQgdG8gY29tcG9zZSBjbGFzcyBuYW1lcyAoc3RyaW5ncykgc28geW91IHNob3VsZCBjb252ZXJ0IHRob3NlIHN0eWxlcyB0byBhIGNsYXNzIG5hbWUgYnkgcGFzc2luZyB0aGVtIHRvIHRoZSBgY3NzYCByZWNlaXZlZCBmcm9tIDxDbGFzc05hbWVzLz4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBDbGFzc05hbWVzLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25DbGFzc05hbWVzJztcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnOyAvLyAjMTcyNywgIzI5MDUgZm9yIHNvbWUgcmVhc29uIEplc3QgYW5kIFZpdGVzdCBldmFsdWF0ZSBtb2R1bGVzIHR3aWNlIGlmIHNvbWUgY29uc3VtaW5nIG1vZHVsZSBnZXRzIG1vY2tlZFxuXG4gIHZhciBpc1Rlc3RFbnYgPSB0eXBlb2YgamVzdCAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHZpICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc1Rlc3RFbnYpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7XG4gIGlmICghcmF3KSB7XG4gICAgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7XG4gICAgcmF3OiB7XG4gICAgICB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpXG4gICAgfVxuICB9KSk7XG59IiwgIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmZ1bmN0aW9uIGdldFNpZGVBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKSA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBnZXRPcHBvc2l0ZUF4aXMoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSk7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGxldCBtYWluQWxpZ25tZW50U2lkZSA9IGFsaWdubWVudEF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiBbbWFpbkFsaWdubWVudFNpZGUsIGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKV07XG59XG5mdW5jdGlvbiBnZXRFeHBhbmRlZFBsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBhbGlnbm1lbnQgPT4gb3Bwb3NpdGVBbGlnbm1lbnRNYXBbYWxpZ25tZW50XSk7XG59XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgY29uc3QgbHIgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmwgPSBbJ3JpZ2h0JywgJ2xlZnQnXTtcbiAgY29uc3QgdGIgPSBbJ3RvcCcsICdib3R0b20nXTtcbiAgY29uc3QgYnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybCA6IGxyO1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsciA6IHJsO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGIgOiBidDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsICJmdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gKG5vZGUubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgLy8gTW9ja2VkIG5vZGVzIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIG1heSBub3QgYmUgaW5zdGFuY2VzIG9mIE5vZGUuIEJ5XG4gIC8vIHJldHVybmluZyBgI2RvY3VtZW50YCBhbiBpbmZpbml0ZSBsb29wIHdvbid0IG9jY3VyLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzIzMTdcbiAgcmV0dXJuICcjZG9jdW1lbnQnO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiAobm9kZSA9PSBudWxsIHx8IChfbm9kZSRvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpIHtcbiAgdmFyIF9yZWY7XG4gIHJldHVybiAoX3JlZiA9IChpc05vZGUobm9kZSkgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBub2RlLmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmLmRvY3VtZW50RWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOb2RlIHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5Ob2RlO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5IVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdCh2YWx1ZSkge1xuICAvLyBCcm93c2VycyB3aXRob3V0IGBTaGFkb3dSb290YCBzdXBwb3J0LlxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIVsnaW5saW5lJywgJ2NvbnRlbnRzJ10uaW5jbHVkZXMoZGlzcGxheSk7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICBjb25zdCB3ZWJraXQgPSBpc1dlYktpdCgpO1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHJldHVybiBjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnLCAnZmlsdGVyJ10uc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgWydwYWludCcsICdsYXlvdXQnLCAnc3RyaWN0JywgJ2NvbnRlbnQnXS5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5wYWdlWE9mZnNldCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQucGFnZVlPZmZzZXRcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgd2luLmZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyh3aW4uZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1dlYktpdCB9O1xuIiwgImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGRldGVjdE92ZXJmbG93IGFzIGRldGVjdE92ZXJmbG93JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgYXV0b1BsYWNlbWVudCBhcyBhdXRvUGxhY2VtZW50JDEsIHNoaWZ0IGFzIHNoaWZ0JDEsIGZsaXAgYXMgZmxpcCQxLCBzaXplIGFzIHNpemUkMSwgaGlkZSBhcyBoaWRlJDEsIGFycm93IGFzIGFycm93JDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBpc0hUTUxFbGVtZW50LCBpc0VsZW1lbnQsIGdldFdpbmRvdywgaXNXZWJLaXQsIGdldERvY3VtZW50RWxlbWVudCwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIC8vIEluIHRlc3RpbmcgZW52aXJvbm1lbnRzLCB0aGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgcHJvcGVydGllcyBhcmUgZW1wdHlcbiAgLy8gc3RyaW5ncyBmb3IgU1ZHIGVsZW1lbnRzLCByZXR1cm5pbmcgTmFOLiBGYWxsYmFjayB0byBgMGAgaW4gdGhpcyBjYXNlLlxuICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGNzcy53aWR0aCkgfHwgMDtcbiAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoY3NzLmhlaWdodCkgfHwgMDtcbiAgY29uc3QgaGFzT2Zmc2V0ID0gaXNIVE1MRWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgb2Zmc2V0V2lkdGggPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldFdpZHRoIDogd2lkdGg7XG4gIGNvbnN0IG9mZnNldEhlaWdodCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogaGVpZ2h0O1xuICBjb25zdCBzaG91bGRGYWxsYmFjayA9IHJvdW5kKHdpZHRoKSAhPT0gb2Zmc2V0V2lkdGggfHwgcm91bmQoaGVpZ2h0KSAhPT0gb2Zmc2V0SGVpZ2h0O1xuICBpZiAoc2hvdWxkRmFsbGJhY2spIHtcbiAgICB3aWR0aCA9IG9mZnNldFdpZHRoO1xuICAgIGhlaWdodCA9IG9mZnNldEhlaWdodDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkOiBzaG91bGRGYWxsYmFja1xuICB9O1xufVxuXG5mdW5jdGlvbiB1bndyYXBFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuICFpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50LmNvbnRleHRFbGVtZW50IDogZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NhbGUoZWxlbWVudCkge1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGRvbUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvb3JkcygxKTtcbiAgfVxuICBjb25zdCByZWN0ID0gZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICAkXG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGRvbUVsZW1lbnQpO1xuICBsZXQgeCA9ICgkID8gcm91bmQocmVjdC53aWR0aCkgOiByZWN0LndpZHRoKSAvIHdpZHRoO1xuICBsZXQgeSA9ICgkID8gcm91bmQocmVjdC5oZWlnaHQpIDogcmVjdC5oZWlnaHQpIC8gaGVpZ2h0O1xuXG4gIC8vIDAsIE5hTiwgb3IgSW5maW5pdHkgc2hvdWxkIGFsd2F5cyBmYWxsYmFjayB0byAxLlxuXG4gIGlmICgheCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgeCA9IDE7XG4gIH1cbiAgaWYgKCF5IHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICB5ID0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBub09mZnNldHMgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29vcmRzKDApO1xuZnVuY3Rpb24gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKCFpc1dlYktpdCgpIHx8ICF3aW4udmlzdWFsVmlld3BvcnQpIHtcbiAgICByZXR1cm4gbm9PZmZzZXRzO1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQsXG4gICAgeTogd2luLnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcFxuICB9O1xufVxuZnVuY3Rpb24gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhlbGVtZW50LCBpc0ZpeGVkLCBmbG9hdGluZ09mZnNldFBhcmVudCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG4gIGlmICghZmxvYXRpbmdPZmZzZXRQYXJlbnQgfHwgaXNGaXhlZCAmJiBmbG9hdGluZ09mZnNldFBhcmVudCAhPT0gZ2V0V2luZG93KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc0ZpeGVkO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgaWYgKGluY2x1ZGVTY2FsZSkge1xuICAgIGlmIChvZmZzZXRQYXJlbnQpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSA/IGdldFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGxldCB4ID0gKGNsaWVudFJlY3QubGVmdCArIHZpc3VhbE9mZnNldHMueCkgLyBzY2FsZS54O1xuICBsZXQgeSA9IChjbGllbnRSZWN0LnRvcCArIHZpc3VhbE9mZnNldHMueSkgLyBzY2FsZS55O1xuICBsZXQgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGUueDtcbiAgbGV0IGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGUueTtcbiAgaWYgKGRvbUVsZW1lbnQpIHtcbiAgICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZG9tRWxlbWVudCk7XG4gICAgY29uc3Qgb2Zmc2V0V2luID0gb2Zmc2V0UGFyZW50ICYmIGlzRWxlbWVudChvZmZzZXRQYXJlbnQpID8gZ2V0V2luZG93KG9mZnNldFBhcmVudCkgOiBvZmZzZXRQYXJlbnQ7XG4gICAgbGV0IGN1cnJlbnRXaW4gPSB3aW47XG4gICAgbGV0IGN1cnJlbnRJRnJhbWUgPSBjdXJyZW50V2luLmZyYW1lRWxlbWVudDtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgbGVmdCA9IGlmcmFtZVJlY3QubGVmdCArIChjdXJyZW50SUZyYW1lLmNsaWVudExlZnQgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nTGVmdCkpICogaWZyYW1lU2NhbGUueDtcbiAgICAgIGNvbnN0IHRvcCA9IGlmcmFtZVJlY3QudG9wICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50VG9wICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ1RvcCkpICogaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIHkgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHdpZHRoICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICBoZWlnaHQgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKz0gbGVmdDtcbiAgICAgIHkgKz0gdG9wO1xuICAgICAgY3VycmVudFdpbiA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKTtcbiAgICAgIGN1cnJlbnRJRnJhbWUgPSBjdXJyZW50V2luLmZyYW1lRWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbmNvbnN0IHRvcExheWVyU2VsZWN0b3JzID0gWyc6cG9wb3Zlci1vcGVuJywgJzptb2RhbCddO1xuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiB0b3BMYXllclNlbGVjdG9ycy5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgdG9wTGF5ZXIgPSBlbGVtZW50cyA/IGlzVG9wTGF5ZXIoZWxlbWVudHMuZmxvYXRpbmcpIDogZmFsc2U7XG4gIGlmIChvZmZzZXRQYXJlbnQgPT09IGRvY3VtZW50RWxlbWVudCB8fCB0b3BMYXllciAmJiBpc0ZpeGVkKSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCAqIHNjYWxlLngsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCAqIHNjYWxlLnksXG4gICAgeDogcmVjdC54ICogc2NhbGUueCAtIHNjcm9sbC5zY3JvbGxMZWZ0ICogc2NhbGUueCArIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnkgKiBzY2FsZS55IC0gc2Nyb2xsLnNjcm9sbFRvcCAqIHNjYWxlLnkgKyBvZmZzZXRzLnlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHMoZWxlbWVudCkge1xuICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmdldENsaWVudFJlY3RzKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIC4uLmNsaXBwaW5nQW5jZXN0b3IsXG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnlcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmNsdWRlcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJztcbn1cblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwb2x5ZmlsbCkge1xuICAgIHJldHVybiBwb2x5ZmlsbChlbGVtZW50KTtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59XG5cbi8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5mdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoaXNUb3BMYXllcihlbGVtZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgbGV0IHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gICAgd2hpbGUgKHN2Z09mZnNldFBhcmVudCAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQoc3ZnT2Zmc2V0UGFyZW50KSAmJiAhaXNTdGF0aWNQb3NpdGlvbmVkKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHN2Z09mZnNldFBhcmVudDtcbiAgICAgIH1cbiAgICAgIHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoc3ZnT2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCk7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSkge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50LCBwb2x5ZmlsbCk7XG4gIH1cbiAgaWYgKG9mZnNldFBhcmVudCAmJiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSAmJiAhaXNDb250YWluaW5nQmxvY2sob2Zmc2V0UGFyZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luO1xufVxuXG5jb25zdCBnZXRFbGVtZW50UmVjdHMgPSBhc3luYyBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBnZXRPZmZzZXRQYXJlbnRGbiA9IHRoaXMuZ2V0T2Zmc2V0UGFyZW50IHx8IGdldE9mZnNldFBhcmVudDtcbiAgY29uc3QgZ2V0RGltZW5zaW9uc0ZuID0gdGhpcy5nZXREaW1lbnNpb25zO1xuICBjb25zdCBmbG9hdGluZ0RpbWVuc2lvbnMgPSBhd2FpdCBnZXREaW1lbnNpb25zRm4oZGF0YS5mbG9hdGluZyk7XG4gIHJldHVybiB7XG4gICAgcmVmZXJlbmNlOiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChkYXRhLnJlZmVyZW5jZSwgYXdhaXQgZ2V0T2Zmc2V0UGFyZW50Rm4oZGF0YS5mbG9hdGluZyksIGRhdGEuc3RyYXRlZ3kpLFxuICAgIGZsb2F0aW5nOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiBmbG9hdGluZ0RpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGZsb2F0aW5nRGltZW5zaW9ucy5oZWlnaHRcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc1JUTChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCFza2lwKSB7XG4gICAgICBvbk1vdmUoKTtcbiAgICB9XG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc2V0VG9wID0gZmxvb3IodG9wKTtcbiAgICBjb25zdCBpbnNldFJpZ2h0ID0gZmxvb3Iocm9vdC5jbGllbnRXaWR0aCAtIChsZWZ0ICsgd2lkdGgpKTtcbiAgICBjb25zdCBpbnNldEJvdHRvbSA9IGZsb29yKHJvb3QuY2xpZW50SGVpZ2h0IC0gKHRvcCArIGhlaWdodCkpO1xuICAgIGNvbnN0IGluc2V0TGVmdCA9IGZsb29yKGxlZnQpO1xuICAgIGNvbnN0IHJvb3RNYXJnaW4gPSAtaW5zZXRUb3AgKyBcInB4IFwiICsgLWluc2V0UmlnaHQgKyBcInB4IFwiICsgLWluc2V0Qm90dG9tICsgXCJweCBcIiArIC1pbnNldExlZnQgKyBcInB4XCI7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3RNYXJnaW4sXG4gICAgICB0aHJlc2hvbGQ6IG1heCgwLCBtaW4oMSwgdGhyZXNob2xkKSkgfHwgMVxuICAgIH07XG4gICAgbGV0IGlzRmlyc3RVcGRhdGUgPSB0cnVlO1xuICAgIGZ1bmN0aW9uIGhhbmRsZU9ic2VydmUoZW50cmllcykge1xuICAgICAgY29uc3QgcmF0aW8gPSBlbnRyaWVzWzBdLmludGVyc2VjdGlvblJhdGlvO1xuICAgICAgaWYgKHJhdGlvICE9PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgaWYgKCFpc0ZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJhdGlvKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBjbGlwcGVkLCB0aGUgcmF0aW8gaXMgMC4gVGhyb3R0bGUgdGhlIHJlZnJlc2hcbiAgICAgICAgICAvLyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgdXBkYXRlcy5cbiAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2goZmFsc2UsIDFlLTcpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnJlc2goZmFsc2UsIHJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNGaXJzdFVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgYSBgZG9jdW1lbnRgIGFzIHRoZSByb290IGFuZCB3aWxsIHRocm93IGFuXG4gICAgLy8gZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLy8gSGFuZGxlIDxpZnJhbWU+c1xuICAgICAgICByb290OiByb290Lm93bmVyRG9jdW1lbnRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgKG5leHRSZWZSZWN0LnggIT09IHByZXZSZWZSZWN0LnggfHwgbmV4dFJlZlJlY3QueSAhPT0gcHJldlJlZlJlY3QueSB8fCBuZXh0UmVmUmVjdC53aWR0aCAhPT0gcHJldlJlZlJlY3Qud2lkdGggfHwgbmV4dFJlZlJlY3QuaGVpZ2h0ICE9PSBwcmV2UmVmUmVjdC5oZWlnaHQpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCAiaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG52YXIgaW5kZXggPSAgdXNlTGF5b3V0RWZmZWN0IDtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iLCAiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcywgY3NzIGFzIGNzcyQyIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXknO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgX3R5cGVvZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YnO1xuaW1wb3J0IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdGFnZ2VkVGVtcGxhdGVMaXRlcmFsJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgYXV0b1VwZGF0ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHVzZUxheW91dEVmZmVjdCBmcm9tICd1c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0JztcblxudmFyIF9leGNsdWRlZCQ0ID0gW1wiY2xhc3NOYW1lXCIsIFwiY2xlYXJWYWx1ZVwiLCBcImN4XCIsIFwiZ2V0U3R5bGVzXCIsIFwiZ2V0Q2xhc3NOYW1lc1wiLCBcImdldFZhbHVlXCIsIFwiaGFzVmFsdWVcIiwgXCJpc011bHRpXCIsIFwiaXNSdGxcIiwgXCJvcHRpb25zXCIsIFwic2VsZWN0T3B0aW9uXCIsIFwic2VsZWN0UHJvcHNcIiwgXCJzZXRWYWx1ZVwiLCBcInRoZW1lXCJdO1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBOTyBPUFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENsYXNzIE5hbWUgUHJlZml4ZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29tcG9uZW50IHN0YXRlIGZvciBzdHlsaW5nIHdpdGggY2xhc3MgbmFtZXMuXG5cbiBFeHBlY3RzIGFuIGFycmF5IG9mIHN0cmluZ3MgT1IgYSBzdHJpbmcvb2JqZWN0IHBhaXI6XG4gLSBjbGFzc05hbWUoWydjb21wJywgJ2NvbXAtYXJnJywgJ2NvbXAtYXJnLTInXSlcbiAgIEByZXR1cm5zICdyZWFjdC1zZWxlY3RfX2NvbXAgcmVhY3Qtc2VsZWN0X19jb21wLWFyZyByZWFjdC1zZWxlY3RfX2NvbXAtYXJnLTInXG4gLSBjbGFzc05hbWUoJ2NvbXAnLCB7IHNvbWU6IHRydWUsIHN0YXRlOiBmYWxzZSB9KVxuICAgQHJldHVybnMgJ3JlYWN0LXNlbGVjdF9fY29tcCByZWFjdC1zZWxlY3RfX2NvbXAtLXNvbWUnXG4qL1xuZnVuY3Rpb24gYXBwbHlQcmVmaXhUb05hbWUocHJlZml4LCBuYW1lKSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBwcmVmaXg7XG4gIH0gZWxzZSBpZiAobmFtZVswXSA9PT0gJy0nKSB7XG4gICAgcmV0dXJuIHByZWZpeCArIG5hbWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdfXycgKyBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiBjbGFzc05hbWVzKHByZWZpeCwgc3RhdGUpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzTmFtZUxpc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGNsYXNzTmFtZUxpc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIHZhciBhcnIgPSBbXS5jb25jYXQoY2xhc3NOYW1lTGlzdCk7XG4gIGlmIChzdGF0ZSAmJiBwcmVmaXgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHN0YXRlW2tleV0pIHtcbiAgICAgICAgYXJyLnB1c2goXCJcIi5jb25jYXQoYXBwbHlQcmVmaXhUb05hbWUocHJlZml4LCBrZXkpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnIuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH0pLm1hcChmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBTdHJpbmcoaSkudHJpbSgpO1xuICB9KS5qb2luKCcgJyk7XG59XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENsZWFuIFZhbHVlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGNsZWFuVmFsdWUgPSBmdW5jdGlvbiBjbGVhblZhbHVlKHZhbHVlKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkgcmV0dXJuIFt2YWx1ZV07XG4gIHJldHVybiBbXTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xlYW4gQ29tbW9uIFByb3BzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGNsZWFuQ29tbW9uUHJvcHMgPSBmdW5jdGlvbiBjbGVhbkNvbW1vblByb3BzKHByb3BzKSB7XG4gIC8vY2xhc3NOYW1lXG4gIHByb3BzLmNsYXNzTmFtZTtcbiAgICBwcm9wcy5jbGVhclZhbHVlO1xuICAgIHByb3BzLmN4O1xuICAgIHByb3BzLmdldFN0eWxlcztcbiAgICBwcm9wcy5nZXRDbGFzc05hbWVzO1xuICAgIHByb3BzLmdldFZhbHVlO1xuICAgIHByb3BzLmhhc1ZhbHVlO1xuICAgIHByb3BzLmlzTXVsdGk7XG4gICAgcHJvcHMuaXNSdGw7XG4gICAgcHJvcHMub3B0aW9ucztcbiAgICBwcm9wcy5zZWxlY3RPcHRpb247XG4gICAgcHJvcHMuc2VsZWN0UHJvcHM7XG4gICAgcHJvcHMuc2V0VmFsdWU7XG4gICAgcHJvcHMudGhlbWU7XG4gICAgdmFyIGlubmVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCQ0KTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIGlubmVyUHJvcHMpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHZXQgU3R5bGUgUHJvcHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgZ2V0U3R5bGVQcm9wcyA9IGZ1bmN0aW9uIGdldFN0eWxlUHJvcHMocHJvcHMsIG5hbWUsIGNsYXNzTmFtZXNTdGF0ZSkge1xuICB2YXIgY3ggPSBwcm9wcy5jeCxcbiAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgZ2V0Q2xhc3NOYW1lcyA9IHByb3BzLmdldENsYXNzTmFtZXMsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICByZXR1cm4ge1xuICAgIGNzczogZ2V0U3R5bGVzKG5hbWUsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KGNsYXNzTmFtZXNTdGF0ZSAhPT0gbnVsbCAmJiBjbGFzc05hbWVzU3RhdGUgIT09IHZvaWQgMCA/IGNsYXNzTmFtZXNTdGF0ZSA6IHt9LCBnZXRDbGFzc05hbWVzKG5hbWUsIHByb3BzKSwgY2xhc3NOYW1lKVxuICB9O1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIYW5kbGUgSW5wdXQgQ2hhbmdlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaGFuZGxlSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwgYWN0aW9uTWV0YSwgb25JbnB1dENoYW5nZSkge1xuICBpZiAob25JbnB1dENoYW5nZSkge1xuICAgIHZhciBfbmV3VmFsdWUgPSBvbklucHV0Q2hhbmdlKGlucHV0VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIGlmICh0eXBlb2YgX25ld1ZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIF9uZXdWYWx1ZTtcbiAgfVxuICByZXR1cm4gaW5wdXRWYWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY3JvbGwgSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzRG9jdW1lbnRFbGVtZW50KGVsKSB7XG4gIHJldHVybiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBkb2N1bWVudC5ib2R5LCB3aW5kb3ddLmluZGV4T2YoZWwpID4gLTE7XG59XG5cbi8vIE5vcm1hbGl6ZWQgU2Nyb2xsIFRvcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRIZWlnaHQoZWwpIHtcbiAgaWYgKGlzRG9jdW1lbnRFbGVtZW50KGVsKSkge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIGVsLmNsaWVudEhlaWdodDtcbn1cblxuLy8gTm9ybWFsaXplZCBzY3JvbGxUbyAmIHNjcm9sbFRvcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldFNjcm9sbFRvcChlbCkge1xuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgfVxuICByZXR1cm4gZWwuc2Nyb2xsVG9wO1xufVxuZnVuY3Rpb24gc2Nyb2xsVG8oZWwsIHRvcCkge1xuICAvLyB3aXRoIGEgc2Nyb2xsIGRpc3RhbmNlLCB3ZSBwZXJmb3JtIHNjcm9sbCBvbiB0aGUgZWxlbWVudFxuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIHRvcCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsLnNjcm9sbFRvcCA9IHRvcDtcbn1cblxuLy8gR2V0IFNjcm9sbCBQYXJlbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgZXhjbHVkZVN0YXRpY1BhcmVudCA9IHN0eWxlLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnO1xuICB2YXIgb3ZlcmZsb3dSeCA9IC8oYXV0b3xzY3JvbGwpLztcbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICBmb3IgKHZhciBwYXJlbnQgPSBlbGVtZW50OyBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDspIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBpZiAoZXhjbHVkZVN0YXRpY1BhcmVudCAmJiBzdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAob3ZlcmZsb3dSeC50ZXN0KHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZICsgc3R5bGUub3ZlcmZsb3dYKSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLy8gQW5pbWF0ZWQgU2Nyb2xsIFRvXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gIEBwYXJhbSB0OiB0aW1lIChlbGFwc2VkKVxuICBAcGFyYW0gYjogaW5pdGlhbCB2YWx1ZVxuICBAcGFyYW0gYzogYW1vdW50IG9mIGNoYW5nZVxuICBAcGFyYW0gZDogZHVyYXRpb25cbiovXG5mdW5jdGlvbiBlYXNlT3V0Q3ViaWModCwgYiwgYywgZCkge1xuICByZXR1cm4gYyAqICgodCA9IHQgLyBkIC0gMSkgKiB0ICogdCArIDEpICsgYjtcbn1cbmZ1bmN0aW9uIGFuaW1hdGVkU2Nyb2xsVG8oZWxlbWVudCwgdG8pIHtcbiAgdmFyIGR1cmF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAyMDA7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbm9vcDtcbiAgdmFyIHN0YXJ0ID0gZ2V0U2Nyb2xsVG9wKGVsZW1lbnQpO1xuICB2YXIgY2hhbmdlID0gdG8gLSBzdGFydDtcbiAgdmFyIGluY3JlbWVudCA9IDEwO1xuICB2YXIgY3VycmVudFRpbWUgPSAwO1xuICBmdW5jdGlvbiBhbmltYXRlU2Nyb2xsKCkge1xuICAgIGN1cnJlbnRUaW1lICs9IGluY3JlbWVudDtcbiAgICB2YXIgdmFsID0gZWFzZU91dEN1YmljKGN1cnJlbnRUaW1lLCBzdGFydCwgY2hhbmdlLCBkdXJhdGlvbik7XG4gICAgc2Nyb2xsVG8oZWxlbWVudCwgdmFsKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPCBkdXJhdGlvbikge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlU2Nyb2xsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGFuaW1hdGVTY3JvbGwoKTtcbn1cblxuLy8gU2Nyb2xsIEludG8gVmlld1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KG1lbnVFbCwgZm9jdXNlZEVsKSB7XG4gIHZhciBtZW51UmVjdCA9IG1lbnVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGZvY3VzZWRSZWN0ID0gZm9jdXNlZEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgb3ZlclNjcm9sbCA9IGZvY3VzZWRFbC5vZmZzZXRIZWlnaHQgLyAzO1xuICBpZiAoZm9jdXNlZFJlY3QuYm90dG9tICsgb3ZlclNjcm9sbCA+IG1lbnVSZWN0LmJvdHRvbSkge1xuICAgIHNjcm9sbFRvKG1lbnVFbCwgTWF0aC5taW4oZm9jdXNlZEVsLm9mZnNldFRvcCArIGZvY3VzZWRFbC5jbGllbnRIZWlnaHQgLSBtZW51RWwub2Zmc2V0SGVpZ2h0ICsgb3ZlclNjcm9sbCwgbWVudUVsLnNjcm9sbEhlaWdodCkpO1xuICB9IGVsc2UgaWYgKGZvY3VzZWRSZWN0LnRvcCAtIG92ZXJTY3JvbGwgPCBtZW51UmVjdC50b3ApIHtcbiAgICBzY3JvbGxUbyhtZW51RWwsIE1hdGgubWF4KGZvY3VzZWRFbC5vZmZzZXRUb3AgLSBvdmVyU2Nyb2xsLCAwKSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHZXQgYm91bmRpbmcgY2xpZW50IG9iamVjdFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIGNhbm5vdCBnZXQga2V5cyB1c2luZyBhcnJheSBub3RhdGlvbiB3aXRoIERPTVJlY3RcbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50T2JqKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICB3aWR0aDogcmVjdC53aWR0aFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvdWNoIENhcGFiaWxpdHkgRGV0ZWN0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBpc1RvdWNoQ2FwYWJsZSgpIHtcbiAgdHJ5IHtcbiAgICBkb2N1bWVudC5jcmVhdGVFdmVudCgnVG91Y2hFdmVudCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTW9iaWxlIERldmljZSBEZXRlY3RvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzTW9iaWxlRGV2aWNlKCkge1xuICB0cnkge1xuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXNzaXZlIEV2ZW50IERldGVjdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JhZmdyYXBoL2RldGVjdC1pdC9ibG9iL21haW4vc3JjL2luZGV4LnRzI0wxOS1MMzZcbnZhciBwYXNzaXZlT3B0aW9uQWNjZXNzZWQgPSBmYWxzZTtcbnZhciBvcHRpb25zID0ge1xuICBnZXQgcGFzc2l2ZSgpIHtcbiAgICByZXR1cm4gcGFzc2l2ZU9wdGlvbkFjY2Vzc2VkID0gdHJ1ZTtcbiAgfVxufTtcbi8vIGNoZWNrIGZvciBTU1JcbnZhciB3ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fTtcbmlmICh3LmFkZEV2ZW50TGlzdGVuZXIgJiYgdy5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gIHcuYWRkRXZlbnRMaXN0ZW5lcigncCcsIG5vb3AsIG9wdGlvbnMpO1xuICB3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3AnLCBub29wLCBmYWxzZSk7XG59XG52YXIgc3VwcG9ydHNQYXNzaXZlRXZlbnRzID0gcGFzc2l2ZU9wdGlvbkFjY2Vzc2VkO1xuZnVuY3Rpb24gbm90TnVsbGlzaChpdGVtKSB7XG4gIHJldHVybiBpdGVtICE9IG51bGw7XG59XG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xufVxuZnVuY3Rpb24gdmFsdWVUZXJuYXJ5KGlzTXVsdGksIG11bHRpVmFsdWUsIHNpbmdsZVZhbHVlKSB7XG4gIHJldHVybiBpc011bHRpID8gbXVsdGlWYWx1ZSA6IHNpbmdsZVZhbHVlO1xufVxuZnVuY3Rpb24gc2luZ2xlVmFsdWVBc1ZhbHVlKHNpbmdsZVZhbHVlKSB7XG4gIHJldHVybiBzaW5nbGVWYWx1ZTtcbn1cbmZ1bmN0aW9uIG11bHRpVmFsdWVBc1ZhbHVlKG11bHRpVmFsdWUpIHtcbiAgcmV0dXJuIG11bHRpVmFsdWU7XG59XG52YXIgcmVtb3ZlUHJvcHMgPSBmdW5jdGlvbiByZW1vdmVQcm9wcyhwcm9wc09iaikge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BlcnRpZXMgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgIHByb3BlcnRpZXNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cbiAgdmFyIHByb3BzTWFwID0gT2JqZWN0LmVudHJpZXMocHJvcHNPYmopLmZpbHRlcihmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDEpLFxuICAgICAga2V5ID0gX3JlZjJbMF07XG4gICAgcmV0dXJuICFwcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSk7XG4gIH0pO1xuICByZXR1cm4gcHJvcHNNYXAucmVkdWNlKGZ1bmN0aW9uIChuZXdQcm9wcywgX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICBrZXkgPSBfcmVmNFswXSxcbiAgICAgIHZhbCA9IF9yZWY0WzFdO1xuICAgIG5ld1Byb3BzW2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIG5ld1Byb3BzO1xuICB9LCB7fSk7XG59O1xuXG52YXIgX2V4Y2x1ZGVkJDMgPSBbXCJjaGlsZHJlblwiLCBcImlubmVyUHJvcHNcIl0sXG4gIF9leGNsdWRlZDIkMSA9IFtcImNoaWxkcmVuXCIsIFwiaW5uZXJQcm9wc1wiXTtcbmZ1bmN0aW9uIGdldE1lbnVQbGFjZW1lbnQoX3JlZikge1xuICB2YXIgcHJlZmVycmVkTWF4SGVpZ2h0ID0gX3JlZi5tYXhIZWlnaHQsXG4gICAgbWVudUVsID0gX3JlZi5tZW51RWwsXG4gICAgbWluSGVpZ2h0ID0gX3JlZi5taW5IZWlnaHQsXG4gICAgcHJlZmVycmVkUGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQsXG4gICAgc2hvdWxkU2Nyb2xsID0gX3JlZi5zaG91bGRTY3JvbGwsXG4gICAgaXNGaXhlZFBvc2l0aW9uID0gX3JlZi5pc0ZpeGVkUG9zaXRpb24sXG4gICAgY29udHJvbEhlaWdodCA9IF9yZWYuY29udHJvbEhlaWdodDtcbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChtZW51RWwpO1xuICB2YXIgZGVmYXVsdFN0YXRlID0ge1xuICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgfTtcblxuICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZywgcmV0dXJuIGRlZmF1bHQgc3RhdGVcbiAgaWYgKCFtZW51RWwgfHwgIW1lbnVFbC5vZmZzZXRQYXJlbnQpIHJldHVybiBkZWZhdWx0U3RhdGU7XG5cbiAgLy8gd2UgY2FuJ3QgdHJ1c3QgYHNjcm9sbFBhcmVudC5zY3JvbGxIZWlnaHRgIC0tPiBpdCBtYXkgaW5jcmVhc2Ugd2hlblxuICAvLyB0aGUgbWVudSBpcyByZW5kZXJlZFxuICB2YXIgX3Njcm9sbFBhcmVudCRnZXRCb3VuID0gc2Nyb2xsUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgIHNjcm9sbEhlaWdodCA9IF9zY3JvbGxQYXJlbnQkZ2V0Qm91bi5oZWlnaHQ7XG4gIHZhciBfbWVudUVsJGdldEJvdW5kaW5nQ2wgPSBtZW51RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgbWVudUJvdHRvbSA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC5ib3R0b20sXG4gICAgbWVudUhlaWdodCA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC5oZWlnaHQsXG4gICAgbWVudVRvcCA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC50b3A7XG4gIHZhciBfbWVudUVsJG9mZnNldFBhcmVudCQgPSBtZW51RWwub2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgIGNvbnRhaW5lclRvcCA9IF9tZW51RWwkb2Zmc2V0UGFyZW50JC50b3A7XG4gIHZhciB2aWV3SGVpZ2h0ID0gaXNGaXhlZFBvc2l0aW9uID8gd2luZG93LmlubmVySGVpZ2h0IDogbm9ybWFsaXplZEhlaWdodChzY3JvbGxQYXJlbnQpO1xuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsVG9wKHNjcm9sbFBhcmVudCk7XG4gIHZhciBtYXJnaW5Cb3R0b20gPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG1lbnVFbCkubWFyZ2luQm90dG9tLCAxMCk7XG4gIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG1lbnVFbCkubWFyZ2luVG9wLCAxMCk7XG4gIHZhciB2aWV3U3BhY2VBYm92ZSA9IGNvbnRhaW5lclRvcCAtIG1hcmdpblRvcDtcbiAgdmFyIHZpZXdTcGFjZUJlbG93ID0gdmlld0hlaWdodCAtIG1lbnVUb3A7XG4gIHZhciBzY3JvbGxTcGFjZUFib3ZlID0gdmlld1NwYWNlQWJvdmUgKyBzY3JvbGxUb3A7XG4gIHZhciBzY3JvbGxTcGFjZUJlbG93ID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gbWVudVRvcDtcbiAgdmFyIHNjcm9sbERvd24gPSBtZW51Qm90dG9tIC0gdmlld0hlaWdodCArIHNjcm9sbFRvcCArIG1hcmdpbkJvdHRvbTtcbiAgdmFyIHNjcm9sbFVwID0gc2Nyb2xsVG9wICsgbWVudVRvcCAtIG1hcmdpblRvcDtcbiAgdmFyIHNjcm9sbER1cmF0aW9uID0gMTYwO1xuICBzd2l0Y2ggKHByZWZlcnJlZFBsYWNlbWVudCkge1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAvLyAxOiB0aGUgbWVudSB3aWxsIGZpdCwgZG8gbm90aGluZ1xuICAgICAgaWYgKHZpZXdTcGFjZUJlbG93ID49IG1lbnVIZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDI6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBzY3JvbGxlZFxuICAgICAgaWYgKHNjcm9sbFNwYWNlQmVsb3cgPj0gbWVudUhlaWdodCAmJiAhaXNGaXhlZFBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBhbmltYXRlZFNjcm9sbFRvKHNjcm9sbFBhcmVudCwgc2Nyb2xsRG93biwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAzOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgY29uc3RyYWluZWRcbiAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQmVsb3cgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VCZWxvdyA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxEb3duLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSB3YW50IHRvIHByb3ZpZGUgYXMgbXVjaCBvZiB0aGUgbWVudSBhcyBwb3NzaWJsZSB0byB0aGUgdXNlcixcbiAgICAgICAgLy8gc28gZ2l2ZSB0aGVtIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBiZWxvdyByYXRoZXIgdGhhbiB0aGUgbWluSGVpZ2h0LlxuICAgICAgICB2YXIgY29uc3RyYWluZWRIZWlnaHQgPSBpc0ZpeGVkUG9zaXRpb24gPyB2aWV3U3BhY2VCZWxvdyAtIG1hcmdpbkJvdHRvbSA6IHNjcm9sbFNwYWNlQmVsb3cgLSBtYXJnaW5Cb3R0b207XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IGNvbnN0cmFpbmVkSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIEZvcmtlZCBiZXZpb3VyIHdoZW4gdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlIGJlbG93XG5cbiAgICAgIC8vIEFVVE86IGZsaXAgdGhlIG1lbnUsIHJlbmRlciBhYm92ZVxuICAgICAgaWYgKHByZWZlcnJlZFBsYWNlbWVudCA9PT0gJ2F1dG8nIHx8IGlzRml4ZWRQb3NpdGlvbikge1xuICAgICAgICAvLyBtYXkgbmVlZCB0byBiZSBjb25zdHJhaW5lZCBhZnRlciBmbGlwcGluZ1xuICAgICAgICB2YXIgX2NvbnN0cmFpbmVkSGVpZ2h0ID0gcHJlZmVycmVkTWF4SGVpZ2h0O1xuICAgICAgICB2YXIgc3BhY2VBYm92ZSA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUFib3ZlIDogc2Nyb2xsU3BhY2VBYm92ZTtcbiAgICAgICAgaWYgKHNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0KSB7XG4gICAgICAgICAgX2NvbnN0cmFpbmVkSGVpZ2h0ID0gTWF0aC5taW4oc3BhY2VBYm92ZSAtIG1hcmdpbkJvdHRvbSAtIGNvbnRyb2xIZWlnaHQsIHByZWZlcnJlZE1heEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogX2NvbnN0cmFpbmVkSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEJPVFRPTTogYWxsb3cgYnJvd3NlciB0byBpbmNyZWFzZSBzY3JvbGxhYmxlIGFyZWEgYW5kIGltbWVkaWF0ZWx5IHNldCBzY3JvbGxcbiAgICAgIGlmIChwcmVmZXJyZWRQbGFjZW1lbnQgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBzY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbERvd24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIC8vIDE6IHRoZSBtZW51IHdpbGwgZml0LCBkbyBub3RoaW5nXG4gICAgICBpZiAodmlld1NwYWNlQWJvdmUgPj0gbWVudUhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gMjogdGhlIG1lbnUgd2lsbCBmaXQsIGlmIHNjcm9sbGVkXG4gICAgICBpZiAoc2Nyb2xsU3BhY2VBYm92ZSA+PSBtZW51SGVpZ2h0ICYmICFpc0ZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxVcCwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAzOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgY29uc3RyYWluZWRcbiAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgdmFyIF9jb25zdHJhaW5lZEhlaWdodDIgPSBwcmVmZXJyZWRNYXhIZWlnaHQ7XG5cbiAgICAgICAgLy8gd2Ugd2FudCB0byBwcm92aWRlIGFzIG11Y2ggb2YgdGhlIG1lbnUgYXMgcG9zc2libGUgdG8gdGhlIHVzZXIsXG4gICAgICAgIC8vIHNvIGdpdmUgdGhlbSB3aGF0ZXZlciBpcyBhdmFpbGFibGUgYmVsb3cgcmF0aGVyIHRoYW4gdGhlIG1pbkhlaWdodC5cbiAgICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUFib3ZlID49IG1pbkhlaWdodCkge1xuICAgICAgICAgIF9jb25zdHJhaW5lZEhlaWdodDIgPSBpc0ZpeGVkUG9zaXRpb24gPyB2aWV3U3BhY2VBYm92ZSAtIG1hcmdpblRvcCA6IHNjcm9sbFNwYWNlQWJvdmUgLSBtYXJnaW5Ub3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxVcCwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IF9jb25zdHJhaW5lZEhlaWdodDJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gbm90IGVub3VnaCBzcGFjZSwgdGhlIGJyb3dzZXIgV0lMTCBOT1QgaW5jcmVhc2Ugc2Nyb2xsYWJsZSBhcmVhIHdoZW5cbiAgICAgIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50IHJlbmRlcmVkIGFib3ZlIHRoZSB2aWV3cG9ydCAob25seSBiZWxvdykuXG4gICAgICAvLyBGbGlwIHRoZSBtZW51LCByZW5kZXIgYmVsb3dcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBsYWNlbWVudCBwcm92aWRlZCBcXFwiXCIuY29uY2F0KHByZWZlcnJlZFBsYWNlbWVudCwgXCJcXFwiLlwiKSk7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRTdGF0ZTtcbn1cblxuLy8gTWVudSBDb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBhbGlnblRvQ29udHJvbChwbGFjZW1lbnQpIHtcbiAgdmFyIHBsYWNlbWVudFRvQ1NTUHJvcCA9IHtcbiAgICBib3R0b206ICd0b3AnLFxuICAgIHRvcDogJ2JvdHRvbSdcbiAgfTtcbiAgcmV0dXJuIHBsYWNlbWVudCA/IHBsYWNlbWVudFRvQ1NTUHJvcFtwbGFjZW1lbnRdIDogJ2JvdHRvbSc7XG59XG52YXIgY29lcmNlUGxhY2VtZW50ID0gZnVuY3Rpb24gY29lcmNlUGxhY2VtZW50KHApIHtcbiAgcmV0dXJuIHAgPT09ICdhdXRvJyA/ICdib3R0b20nIDogcDtcbn07XG52YXIgbWVudUNTUyA9IGZ1bmN0aW9uIG1lbnVDU1MoX3JlZjIsIHVuc3R5bGVkKSB7XG4gIHZhciBfb2JqZWN0U3ByZWFkMjtcbiAgdmFyIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICBfcmVmMiR0aGVtZSA9IF9yZWYyLnRoZW1lLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYyJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBzcGFjaW5nID0gX3JlZjIkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmMiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKChfb2JqZWN0U3ByZWFkMiA9IHtcbiAgICBsYWJlbDogJ21lbnUnXG4gIH0sIF9kZWZpbmVQcm9wZXJ0eShfb2JqZWN0U3ByZWFkMiwgYWxpZ25Ub0NvbnRyb2wocGxhY2VtZW50KSwgJzEwMCUnKSwgX2RlZmluZVByb3BlcnR5KF9vYmplY3RTcHJlYWQyLCBcInBvc2l0aW9uXCIsICdhYnNvbHV0ZScpLCBfZGVmaW5lUHJvcGVydHkoX29iamVjdFNwcmVhZDIsIFwid2lkdGhcIiwgJzEwMCUnKSwgX2RlZmluZVByb3BlcnR5KF9vYmplY3RTcHJlYWQyLCBcInpJbmRleFwiLCAxKSwgX29iamVjdFNwcmVhZDIpLCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLm5ldXRyYWwwLFxuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzLFxuICAgIGJveFNoYWRvdzogJzAgMCAwIDFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKSwgMCA0cHggMTFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKScsXG4gICAgbWFyZ2luQm90dG9tOiBzcGFjaW5nLm1lbnVHdXR0ZXIsXG4gICAgbWFyZ2luVG9wOiBzcGFjaW5nLm1lbnVHdXR0ZXJcbiAgfSk7XG59O1xudmFyIFBvcnRhbFBsYWNlbWVudENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChudWxsKTtcblxuLy8gTk9URTogaW50ZXJuYWwgb25seVxudmFyIE1lbnVQbGFjZXIgPSBmdW5jdGlvbiBNZW51UGxhY2VyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIG1pbk1lbnVIZWlnaHQgPSBwcm9wcy5taW5NZW51SGVpZ2h0LFxuICAgIG1heE1lbnVIZWlnaHQgPSBwcm9wcy5tYXhNZW51SGVpZ2h0LFxuICAgIG1lbnVQbGFjZW1lbnQgPSBwcm9wcy5tZW51UGxhY2VtZW50LFxuICAgIG1lbnVQb3NpdGlvbiA9IHByb3BzLm1lbnVQb3NpdGlvbixcbiAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSBwcm9wcy5tZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcsXG4gICAgdGhlbWUgPSBwcm9wcy50aGVtZTtcbiAgdmFyIF9yZWYzID0gdXNlQ29udGV4dChQb3J0YWxQbGFjZW1lbnRDb250ZXh0KSB8fCB7fSxcbiAgICBzZXRQb3J0YWxQbGFjZW1lbnQgPSBfcmVmMy5zZXRQb3J0YWxQbGFjZW1lbnQ7XG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShtYXhNZW51SGVpZ2h0KSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBtYXhIZWlnaHQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldE1heEhlaWdodCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHBsYWNlbWVudCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0UGxhY2VtZW50ID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIGNvbnRyb2xIZWlnaHQgPSB0aGVtZS5zcGFjaW5nLmNvbnRyb2xIZWlnaHQ7XG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lbnVFbCA9IHJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudUVsKSByZXR1cm47XG5cbiAgICAvLyBETyBOT1Qgc2Nyb2xsIGlmIHBvc2l0aW9uIGlzIGZpeGVkXG4gICAgdmFyIGlzRml4ZWRQb3NpdGlvbiA9IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgICB2YXIgc2hvdWxkU2Nyb2xsID0gbWVudVNob3VsZFNjcm9sbEludG9WaWV3ICYmICFpc0ZpeGVkUG9zaXRpb247XG4gICAgdmFyIHN0YXRlID0gZ2V0TWVudVBsYWNlbWVudCh7XG4gICAgICBtYXhIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICBtZW51RWw6IG1lbnVFbCxcbiAgICAgIG1pbkhlaWdodDogbWluTWVudUhlaWdodCxcbiAgICAgIHBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgIHNob3VsZFNjcm9sbDogc2hvdWxkU2Nyb2xsLFxuICAgICAgaXNGaXhlZFBvc2l0aW9uOiBpc0ZpeGVkUG9zaXRpb24sXG4gICAgICBjb250cm9sSGVpZ2h0OiBjb250cm9sSGVpZ2h0XG4gICAgfSk7XG4gICAgc2V0TWF4SGVpZ2h0KHN0YXRlLm1heEhlaWdodCk7XG4gICAgc2V0UGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gICAgc2V0UG9ydGFsUGxhY2VtZW50ID09PSBudWxsIHx8IHNldFBvcnRhbFBsYWNlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2V0UG9ydGFsUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIH0sIFttYXhNZW51SGVpZ2h0LCBtZW51UGxhY2VtZW50LCBtZW51UG9zaXRpb24sIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldywgbWluTWVudUhlaWdodCwgc2V0UG9ydGFsUGxhY2VtZW50LCBjb250cm9sSGVpZ2h0XSk7XG4gIHJldHVybiBjaGlsZHJlbih7XG4gICAgcmVmOiByZWYsXG4gICAgcGxhY2VyUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQgfHwgY29lcmNlUGxhY2VtZW50KG1lbnVQbGFjZW1lbnQpLFxuICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICB9KVxuICB9KTtcbn07XG52YXIgTWVudSA9IGZ1bmN0aW9uIE1lbnUocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ21lbnUnLCB7XG4gICAgbWVudTogdHJ1ZVxuICB9KSwge1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgTWVudSQxID0gTWVudTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW51IExpc3Rcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbWVudUxpc3RDU1MgPSBmdW5jdGlvbiBtZW51TGlzdENTUyhfcmVmNCwgdW5zdHlsZWQpIHtcbiAgdmFyIG1heEhlaWdodCA9IF9yZWY0Lm1heEhlaWdodCxcbiAgICBiYXNlVW5pdCA9IF9yZWY0LnRoZW1lLnNwYWNpbmcuYmFzZVVuaXQ7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCxcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAvLyByZXF1aXJlZCBmb3Igb2Zmc2V0W0hlaWdodCwgVG9wXSA+IGtleWJvYXJkIHNjcm9sbFxuICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogYmFzZVVuaXQsXG4gICAgcGFkZGluZ1RvcDogYmFzZVVuaXRcbiAgfSk7XG59O1xudmFyIE1lbnVMaXN0ID0gZnVuY3Rpb24gTWVudUxpc3QocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ21lbnVMaXN0Jywge1xuICAgICdtZW51LWxpc3QnOiB0cnVlLFxuICAgICdtZW51LWxpc3QtLWlzLW11bHRpJzogaXNNdWx0aVxuICB9KSwge1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWVudSBOb3RpY2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIG5vdGljZUNTUyA9IGZ1bmN0aW9uIG5vdGljZUNTUyhfcmVmNSwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWY1JHRoZW1lID0gX3JlZjUudGhlbWUsXG4gICAgYmFzZVVuaXQgPSBfcmVmNSR0aGVtZS5zcGFjaW5nLmJhc2VVbml0LFxuICAgIGNvbG9ycyA9IF9yZWY1JHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIHRleHRBbGlnbjogJ2NlbnRlcidcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw0MCxcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChiYXNlVW5pdCAqIDIsIFwicHggXCIpLmNvbmNhdChiYXNlVW5pdCAqIDMsIFwicHhcIilcbiAgfSk7XG59O1xudmFyIG5vT3B0aW9uc01lc3NhZ2VDU1MgPSBub3RpY2VDU1M7XG52YXIgbG9hZGluZ01lc3NhZ2VDU1MgPSBub3RpY2VDU1M7XG52YXIgTm9PcHRpb25zTWVzc2FnZSA9IGZ1bmN0aW9uIE5vT3B0aW9uc01lc3NhZ2UoX3JlZjYpIHtcbiAgdmFyIF9yZWY2JGNoaWxkcmVuID0gX3JlZjYuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmNiRjaGlsZHJlbiA9PT0gdm9pZCAwID8gJ05vIG9wdGlvbnMnIDogX3JlZjYkY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY2LmlubmVyUHJvcHMsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY2LCBfZXhjbHVkZWQkMyk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0UHJvcHMpLCB7fSwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpbm5lclByb3BzOiBpbm5lclByb3BzXG4gIH0pLCAnbm9PcHRpb25zTWVzc2FnZScsIHtcbiAgICAnbWVudS1ub3RpY2UnOiB0cnVlLFxuICAgICdtZW51LW5vdGljZS0tbm8tb3B0aW9ucyc6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xudmFyIExvYWRpbmdNZXNzYWdlID0gZnVuY3Rpb24gTG9hZGluZ01lc3NhZ2UoX3JlZjcpIHtcbiAgdmFyIF9yZWY3JGNoaWxkcmVuID0gX3JlZjcuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmNyRjaGlsZHJlbiA9PT0gdm9pZCAwID8gJ0xvYWRpbmcuLi4nIDogX3JlZjckY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY3LmlubmVyUHJvcHMsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY3LCBfZXhjbHVkZWQyJDEpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFByb3BzKSwge30sIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wczogaW5uZXJQcm9wc1xuICB9KSwgJ2xvYWRpbmdNZXNzYWdlJywge1xuICAgICdtZW51LW5vdGljZSc6IHRydWUsXG4gICAgJ21lbnUtbm90aWNlLS1sb2FkaW5nJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWVudSBQb3J0YWxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbWVudVBvcnRhbENTUyA9IGZ1bmN0aW9uIG1lbnVQb3J0YWxDU1MoX3JlZjgpIHtcbiAgdmFyIHJlY3QgPSBfcmVmOC5yZWN0LFxuICAgIG9mZnNldCA9IF9yZWY4Lm9mZnNldCxcbiAgICBwb3NpdGlvbiA9IF9yZWY4LnBvc2l0aW9uO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgdG9wOiBvZmZzZXQsXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgekluZGV4OiAxXG4gIH07XG59O1xudmFyIE1lbnVQb3J0YWwgPSBmdW5jdGlvbiBNZW51UG9ydGFsKHByb3BzKSB7XG4gIHZhciBhcHBlbmRUbyA9IHByb3BzLmFwcGVuZFRvLFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgY29udHJvbEVsZW1lbnQgPSBwcm9wcy5jb250cm9sRWxlbWVudCxcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBtZW51UGxhY2VtZW50ID0gcHJvcHMubWVudVBsYWNlbWVudCxcbiAgICBtZW51UG9zaXRpb24gPSBwcm9wcy5tZW51UG9zaXRpb247XG4gIHZhciBtZW51UG9ydGFsUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgY2xlYW51cFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShjb2VyY2VQbGFjZW1lbnQobWVudVBsYWNlbWVudCkpLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICBwbGFjZW1lbnQgPSBfdXNlU3RhdGU2WzBdLFxuICAgIHNldFBvcnRhbFBsYWNlbWVudCA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBwb3J0YWxQbGFjZW1lbnRDb250ZXh0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFBvcnRhbFBsYWNlbWVudDogc2V0UG9ydGFsUGxhY2VtZW50XG4gICAgfTtcbiAgfSwgW10pO1xuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICBjb21wdXRlZFBvc2l0aW9uID0gX3VzZVN0YXRlOFswXSxcbiAgICBzZXRDb21wdXRlZFBvc2l0aW9uID0gX3VzZVN0YXRlOFsxXTtcbiAgdmFyIHVwZGF0ZUNvbXB1dGVkUG9zaXRpb24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFjb250cm9sRWxlbWVudCkgcmV0dXJuO1xuICAgIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRPYmooY29udHJvbEVsZW1lbnQpO1xuICAgIHZhciBzY3JvbGxEaXN0YW5jZSA9IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IDAgOiB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgdmFyIG9mZnNldCA9IHJlY3RbcGxhY2VtZW50XSArIHNjcm9sbERpc3RhbmNlO1xuICAgIGlmIChvZmZzZXQgIT09IChjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ub2Zmc2V0KSB8fCByZWN0LmxlZnQgIT09IChjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC5sZWZ0KSB8fCByZWN0LndpZHRoICE9PSAoY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3Qud2lkdGgpKSB7XG4gICAgICBzZXRDb21wdXRlZFBvc2l0aW9uKHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHJlY3Q6IHJlY3RcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NvbnRyb2xFbGVtZW50LCBtZW51UG9zaXRpb24sIHBsYWNlbWVudCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLm9mZnNldCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3QubGVmdCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3Qud2lkdGhdKTtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB1cGRhdGVDb21wdXRlZFBvc2l0aW9uKCk7XG4gIH0sIFt1cGRhdGVDb21wdXRlZFBvc2l0aW9uXSk7XG4gIHZhciBydW5BdXRvVXBkYXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgY2xlYW51cFJlZi5jdXJyZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjbGVhbnVwUmVmLmN1cnJlbnQoKTtcbiAgICAgIGNsZWFudXBSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChjb250cm9sRWxlbWVudCAmJiBtZW51UG9ydGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFudXBSZWYuY3VycmVudCA9IGF1dG9VcGRhdGUoY29udHJvbEVsZW1lbnQsIG1lbnVQb3J0YWxSZWYuY3VycmVudCwgdXBkYXRlQ29tcHV0ZWRQb3NpdGlvbiwge1xuICAgICAgICBlbGVtZW50UmVzaXplOiAnUmVzaXplT2JzZXJ2ZXInIGluIHdpbmRvd1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udHJvbEVsZW1lbnQsIHVwZGF0ZUNvbXB1dGVkUG9zaXRpb25dKTtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBydW5BdXRvVXBkYXRlKCk7XG4gIH0sIFtydW5BdXRvVXBkYXRlXSk7XG4gIHZhciBzZXRNZW51UG9ydGFsRWxlbWVudCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChtZW51UG9ydGFsRWxlbWVudCkge1xuICAgIG1lbnVQb3J0YWxSZWYuY3VycmVudCA9IG1lbnVQb3J0YWxFbGVtZW50O1xuICAgIHJ1bkF1dG9VcGRhdGUoKTtcbiAgfSwgW3J1bkF1dG9VcGRhdGVdKTtcblxuICAvLyBiYWlsIGVhcmx5IGlmIHJlcXVpcmVkIGVsZW1lbnRzIGFyZW4ndCBwcmVzZW50XG4gIGlmICghYXBwZW5kVG8gJiYgbWVudVBvc2l0aW9uICE9PSAnZml4ZWQnIHx8ICFjb21wdXRlZFBvc2l0aW9uKSByZXR1cm4gbnVsbDtcblxuICAvLyBzYW1lIHdyYXBwZXIgZWxlbWVudCB3aGV0aGVyIGZpeGVkIG9yIHBvcnRhbGxlZFxuICB2YXIgbWVudVdyYXBwZXIgPSBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogc2V0TWVudVBvcnRhbEVsZW1lbnRcbiAgfSwgZ2V0U3R5bGVQcm9wcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICBvZmZzZXQ6IGNvbXB1dGVkUG9zaXRpb24ub2Zmc2V0LFxuICAgIHBvc2l0aW9uOiBtZW51UG9zaXRpb24sXG4gICAgcmVjdDogY29tcHV0ZWRQb3NpdGlvbi5yZWN0XG4gIH0pLCAnbWVudVBvcnRhbCcsIHtcbiAgICAnbWVudS1wb3J0YWwnOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xuICByZXR1cm4ganN4KFBvcnRhbFBsYWNlbWVudENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcG9ydGFsUGxhY2VtZW50Q29udGV4dFxuICB9LCBhcHBlbmRUbyA/IC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwobWVudVdyYXBwZXIsIGFwcGVuZFRvKSA6IG1lbnVXcmFwcGVyKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUm9vdCBDb250YWluZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgY29udGFpbmVyQ1NTID0gZnVuY3Rpb24gY29udGFpbmVyQ1NTKF9yZWYpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNSdGwgPSBfcmVmLmlzUnRsO1xuICByZXR1cm4ge1xuICAgIGxhYmVsOiAnY29udGFpbmVyJyxcbiAgICBkaXJlY3Rpb246IGlzUnRsID8gJ3J0bCcgOiB1bmRlZmluZWQsXG4gICAgcG9pbnRlckV2ZW50czogaXNEaXNhYmxlZCA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAvLyBjYW5jZWwgbW91c2UgZXZlbnRzIHdoZW4gZGlzYWJsZWRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xufTtcbnZhciBTZWxlY3RDb250YWluZXIgPSBmdW5jdGlvbiBTZWxlY3RDb250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNSdGwgPSBwcm9wcy5pc1J0bDtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NvbnRhaW5lcicsIHtcbiAgICAnLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgJy0taXMtcnRsJzogaXNSdGxcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFZhbHVlIENvbnRhaW5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciB2YWx1ZUNvbnRhaW5lckNTUyA9IGZ1bmN0aW9uIHZhbHVlQ29udGFpbmVyQ1NTKF9yZWYyLCB1bnN0eWxlZCkge1xuICB2YXIgc3BhY2luZyA9IF9yZWYyLnRoZW1lLnNwYWNpbmcsXG4gICAgaXNNdWx0aSA9IF9yZWYyLmlzTXVsdGksXG4gICAgaGFzVmFsdWUgPSBfcmVmMi5oYXNWYWx1ZSxcbiAgICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUgPSBfcmVmMi5zZWxlY3RQcm9wcy5jb250cm9sU2hvdWxkUmVuZGVyVmFsdWU7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiBpc011bHRpICYmIGhhc1ZhbHVlICYmIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZSA/ICdmbGV4JyA6ICdncmlkJyxcbiAgICBmbGV4OiAxLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgcGFkZGluZzogXCJcIi5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAvIDIsIFwicHggXCIpLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMiwgXCJweFwiKVxuICB9KTtcbn07XG52YXIgVmFsdWVDb250YWluZXIgPSBmdW5jdGlvbiBWYWx1ZUNvbnRhaW5lcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICBoYXNWYWx1ZSA9IHByb3BzLmhhc1ZhbHVlO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAndmFsdWVDb250YWluZXInLCB7XG4gICAgJ3ZhbHVlLWNvbnRhaW5lcic6IHRydWUsXG4gICAgJ3ZhbHVlLWNvbnRhaW5lci0taXMtbXVsdGknOiBpc011bHRpLFxuICAgICd2YWx1ZS1jb250YWluZXItLWhhcy12YWx1ZSc6IGhhc1ZhbHVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJbmRpY2F0b3IgQ29udGFpbmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGluZGljYXRvcnNDb250YWluZXJDU1MgPSBmdW5jdGlvbiBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTKCkge1xuICByZXR1cm4ge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4U2hyaW5rOiAwXG4gIH07XG59O1xudmFyIEluZGljYXRvcnNDb250YWluZXIgPSBmdW5jdGlvbiBJbmRpY2F0b3JzQ29udGFpbmVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yc0NvbnRhaW5lcicsIHtcbiAgICBpbmRpY2F0b3JzOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxudmFyIF90ZW1wbGF0ZU9iamVjdDtcbnZhciBfZXhjbHVkZWQkMiA9IFtcInNpemVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJpbm5lclByb3BzXCIsIFwiaXNSdGxcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjhtbWtjZ1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7bGluZS1oZWlnaHQ6MTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDowXCJcbn0gOiB7XG4gIG5hbWU6IFwidGo1YmRlLVN2Z1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7bGluZS1oZWlnaHQ6MTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDowO2xhYmVsOlN2ZztcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltbHVaR2xqWVhSdmNuTXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVhsQ1NTSXNJbVpwYkdVaU9pSnBibVJwWTJGMGIzSnpMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1VtVmhZM1JPYjJSbElIMGdabkp2YlNBbmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ2FuTjRMQ0JyWlhsbWNtRnRaWE1nZlNCbWNtOXRJQ2RBWlcxdmRHbHZiaTl5WldGamRDYzdYRzVjYm1sdGNHOXlkQ0I3WEc0Z0lFTnZiVzF2YmxCeWIzQnpRVzVrUTJ4aGMzTk9ZVzFsTEZ4dUlDQkRVMU5QWW1wbFkzUlhhWFJvVEdGaVpXd3NYRzRnSUVkeWIzVndRbUZ6WlN4Y2JuMGdabkp2YlNBbkxpNHZkSGx3WlhNbk8xeHVhVzF3YjNKMElIc2daMlYwVTNSNWJHVlFjbTl3Y3lCOUlHWnliMjBnSnk0dUwzVjBhV3h6Snp0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJFY205d1pHOTNiaUFtSUVOc1pXRnlJRWxqYjI1elhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVZMjl1YzNRZ1UzWm5JRDBnS0h0Y2JpQWdjMmw2WlN4Y2JpQWdMaTR1Y0hKdmNITmNibjA2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25jM1puSjEwZ0ppQjdJSE5wZW1VNklHNTFiV0psY2lCOUtTQTlQaUFvWEc0Z0lEeHpkbWRjYmlBZ0lDQm9aV2xuYUhROWUzTnBlbVY5WEc0Z0lDQWdkMmxrZEdnOWUzTnBlbVY5WEc0Z0lDQWdkbWxsZDBKdmVEMWNJakFnTUNBeU1DQXlNRndpWEc0Z0lDQWdZWEpwWVMxb2FXUmtaVzQ5WENKMGNuVmxYQ0pjYmlBZ0lDQm1iMk4xYzJGaWJHVTlYQ0ptWVd4elpWd2lYRzRnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNBZ0lHWnBiR3c2SUNkamRYSnlaVzUwUTI5c2IzSW5MRnh1SUNBZ0lDQWdiR2x1WlVobGFXZG9kRG9nTVN4Y2JpQWdJQ0FnSUhOMGNtOXJaVG9nSjJOMWNuSmxiblJEYjJ4dmNpY3NYRzRnSUNBZ0lDQnpkSEp2YTJWWGFXUjBhRG9nTUN4Y2JpQWdJQ0I5ZlZ4dUlDQWdJSHN1TGk1d2NtOXdjMzFjYmlBZ0x6NWNiaWs3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRU55YjNOelNXTnZibEJ5YjNCeklEMGdTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lkemRtY25YU0FtSUhzZ2MybDZaVDg2SUc1MWJXSmxjaUI5TzF4dVpYaHdiM0owSUdOdmJuTjBJRU55YjNOelNXTnZiaUE5SUNod2NtOXdjem9nUTNKdmMzTkpZMjl1VUhKdmNITXBJRDArSUNoY2JpQWdQRk4yWnlCemFYcGxQWHN5TUgwZ2V5NHVMbkJ5YjNCemZUNWNiaUFnSUNBOGNHRjBhQ0JrUFZ3aVRURTBMak0wT0NBeE5DNDRORGxqTFRBdU5EWTVJREF1TkRZNUxURXVNakk1SURBdU5EWTVMVEV1TmprM0lEQnNMVEl1TmpVeExUTXVNRE13TFRJdU5qVXhJRE11TURJNVl5MHdMalEyT1NBd0xqUTJPUzB4TGpJeU9TQXdMalEyT1MweExqWTVOeUF3TFRBdU5EWTVMVEF1TkRZNUxUQXVORFk1TFRFdU1qSTVJREF0TVM0Mk9UZHNNaTQzTlRndE15NHhOUzB5TGpjMU9TMHpMakUxTW1NdE1DNDBOamt0TUM0ME5qa3RNQzQwTmprdE1TNHlNamdnTUMweExqWTVOM014TGpJeU9DMHdMalEyT1NBeExqWTVOeUF3YkRJdU5qVXlJRE11TURNeElESXVOalV4TFRNdU1ETXhZekF1TkRZNUxUQXVORFk1SURFdU1qSTRMVEF1TkRZNUlERXVOamszSURCek1DNDBOamtnTVM0eU1qa2dNQ0F4TGpZNU4yd3RNaTQzTlRnZ015NHhOVElnTWk0M05UZ2dNeTR4TldNd0xqUTJPU0F3TGpRMk9TQXdMalEyT1NBeExqSXlPU0F3SURFdU5qazRlbHdpSUM4K1hHNGdJRHd2VTNablBseHVLVHRjYm1WNGNHOXlkQ0IwZVhCbElFUnZkMjVEYUdWMmNtOXVVSEp2Y0hNZ1BTQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjNOMlp5ZGRJQ1lnZXlCemFYcGxQem9nYm5WdFltVnlJSDA3WEc1bGVIQnZjblFnWTI5dWMzUWdSRzkzYmtOb1pYWnliMjRnUFNBb2NISnZjSE02SUVSdmQyNURhR1YyY205dVVISnZjSE1wSUQwK0lDaGNiaUFnUEZOMlp5QnphWHBsUFhzeU1IMGdleTR1TG5CeWIzQnpmVDVjYmlBZ0lDQThjR0YwYUNCa1BWd2lUVFF1TlRFMklEY3VOVFE0WXpBdU5ETTJMVEF1TkRRMklERXVNRFF6TFRBdU5EZ3hJREV1TlRjMklEQnNNeTQ1TURnZ015NDNORGNnTXk0NU1EZ3RNeTQzTkRkak1DNDFNek10TUM0ME9ERWdNUzR4TkRFdE1DNDBORFlnTVM0MU56UWdNQ0F3TGpRek5pQXdMalEwTlNBd0xqUXdPQ0F4TGpFNU55QXdJREV1TmpFMUxUQXVOREEySURBdU5ERTRMVFF1TmprMUlEUXVOVEF5TFRRdU5qazFJRFF1TlRBeUxUQXVNakUzSURBdU1qSXpMVEF1TlRBeUlEQXVNek0xTFRBdU56ZzNJREF1TXpNMWN5MHdMalUzTFRBdU1URXlMVEF1TnpnNUxUQXVNek0xWXpBZ01DMDBMakk0TnkwMExqQTROQzAwTGpZNU5TMDBMalV3TW5NdE1DNDBNell0TVM0eE55QXdMVEV1TmpFMWVsd2lJQzgrWEc0Z0lEd3ZVM1puUGx4dUtUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCRWNtOXdaRzkzYmlBbUlFTnNaV0Z5SUVKMWRIUnZibk5jYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5VUhKdmNITThYRzRnSUU5d2RHbHZiaUE5SUhWdWEyNXZkMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1SUQwZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGlBOUlFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtJR1Y0ZEdWdVpITWdRMjl0Ylc5dVVISnZjSE5CYm1SRGJHRnpjMDVoYldVOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRnZTF4dUlDQXZLaW9nVkdobElHTm9hV3hrY21WdUlIUnZJR0psSUhKbGJtUmxjbVZrSUdsdWMybGtaU0IwYUdVZ2FXNWthV05oZEc5eUxpQXFMMXh1SUNCamFHbHNaSEpsYmo4NklGSmxZV04wVG05a1pUdGNiaUFnTHlvcUlGQnliM0J6SUhSb1lYUWdkMmxzYkNCaVpTQndZWE56WldRZ2IyNGdkRzhnZEdobElHTm9hV3hrY21WdUxpQXFMMXh1SUNCcGJtNWxjbEJ5YjNCek9pQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjJScGRpZGRPMXh1SUNBdktpb2dWR2hsSUdadlkzVnpaV1FnYzNSaGRHVWdiMllnZEdobElITmxiR1ZqZEM0Z0tpOWNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TzF4dUlDQnBjMFJwYzJGaWJHVmtPaUJpYjI5c1pXRnVPMXh1ZlZ4dVhHNWpiMjV6ZENCaVlYTmxRMU5USUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQjdYRzRnSUNBZ2FYTkdiMk4xYzJWa0xGeHVJQ0FnSUhSb1pXMWxPaUI3WEc0Z0lDQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJQ0FnSUNCamIyeHZjbk1zWEc0Z0lDQWdmU3hjYmlBZ2ZUcGNiaUFnSUNCOElFUnliM0JrYjNkdVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaUFnSUNCOElFTnNaV0Z5U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0c1hHNGdJSFZ1YzNSNWJHVmtPaUJpYjI5c1pXRnVYRzRwT2lCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3Z1BUNGdLSHRjYmlBZ2JHRmlaV3c2SUNkcGJtUnBZMkYwYjNKRGIyNTBZV2x1WlhJbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUhSeVlXNXphWFJwYjI0NklDZGpiMnh2Y2lBeE5UQnRjeWNzWEc0Z0lDNHVMaWgxYm5OMGVXeGxaRnh1SUNBZ0lEOGdlMzFjYmlBZ0lDQTZJSHRjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNOakFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQWdJQ0FnSUNCd1lXUmthVzVuT2lCaVlYTmxWVzVwZENBcUlESXNYRzRnSUNBZ0lDQWdJQ2M2YUc5MlpYSW5PaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzT0RBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRRd0xGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdmU2tzWEc1OUtUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHUnliM0JrYjNkdVNXNWthV05oZEc5eVExTlRJRDBnWW1GelpVTlRVenRjYm1WNGNHOXlkQ0JqYjI1emRDQkVjbTl3Wkc5M2JrbHVaR2xqWVhSdmNpQTlJRHhjYmlBZ1QzQjBhVzl1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpaGNiaUFnY0hKdmNITTZJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCcGJtNWxjbEJ5YjNCeklIMGdQU0J3Y205d2N6dGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0I3TGk0dVoyVjBVM1I1YkdWUWNtOXdjeWh3Y205d2N5d2dKMlJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNCcGJtUnBZMkYwYjNJNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNka2NtOXdaRzkzYmkxcGJtUnBZMkYwYjNJbk9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNsOVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdZMmhwYkdSeVpXNGdmSHdnUEVSdmQyNURhR1YyY205dUlDOCtmVnh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBPMXh1ZlR0Y2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkRiR1ZoY2tsdVpHbGpZWFJ2Y2xCeWIzQnpQRnh1SUNCUGNIUnBiMjRnUFNCMWJtdHViM2R1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYmlBOUlHSnZiMnhsWVc0c1hHNGdJRWR5YjNWd0lHVjRkR1Z1WkhNZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo0Z1BTQkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaUJsZUhSbGJtUnpJRU52YlcxdmJsQnliM0J6UVc1a1EyeGhjM05PWVcxbFBFOXdkR2x2Yml3Z1NYTk5kV3gwYVN3Z1IzSnZkWEErSUh0Y2JpQWdMeW9xSUZSb1pTQmphR2xzWkhKbGJpQjBieUJpWlNCeVpXNWtaWEpsWkNCcGJuTnBaR1VnZEdobElHbHVaR2xqWVhSdmNpNGdLaTljYmlBZ1kyaHBiR1J5Wlc0L09pQlNaV0ZqZEU1dlpHVTdYRzRnSUM4cUtpQlFjbTl3Y3lCMGFHRjBJSGRwYkd3Z1ltVWdjR0Z6YzJWa0lHOXVJSFJ2SUhSb1pTQmphR2xzWkhKbGJpNGdLaTljYmlBZ2FXNXVaWEpRY205d2N6b2dTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lka2FYWW5YVHRjYmlBZ0x5b3FJRlJvWlNCbWIyTjFjMlZrSUhOMFlYUmxJRzltSUhSb1pTQnpaV3hsWTNRdUlDb3ZYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYmp0Y2JuMWNibHh1Wlhod2IzSjBJR052Ym5OMElHTnNaV0Z5U1c1a2FXTmhkRzl5UTFOVElEMGdZbUZ6WlVOVFV6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRGJHVmhja2x1WkdsallYUnZjaUE5SUR4Y2JpQWdUM0IwYVc5dUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpeGNiaUFnUjNKdmRYQWdaWGgwWlc1a2N5QkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaWhjYmlBZ2NISnZjSE02SUVOc1pXRnlTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCcGJtNWxjbEJ5YjNCeklIMGdQU0J3Y205d2N6dGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0I3TGk0dVoyVjBVM1I1YkdWUWNtOXdjeWh3Y205d2N5d2dKMk5zWldGeVNXNWthV05oZEc5eUp5d2dlMXh1SUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ2RqYkdWaGNpMXBibVJwWTJGMGIzSW5PaUIwY25WbExGeHVJQ0FnSUNBZ2ZTbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0I3WTJocGJHUnlaVzRnZkh3Z1BFTnliM056U1dOdmJpQXZQbjFjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVHRjYm4wN1hHNWNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVMeThnVTJWd1lYSmhkRzl5WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSmJtUnBZMkYwYjNKVFpYQmhjbUYwYjNKUWNtOXdjenhjYmlBZ1QzQjBhVzl1SUQwZ2RXNXJibTkzYml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0Z1BTQmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K0lEMGdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRnWlhoMFpXNWtjeUJEYjIxdGIyNVFjbTl3YzBGdVpFTnNZWE56VG1GdFpUeFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGlCN1hHNGdJR2x6UkdsellXSnNaV1E2SUdKdmIyeGxZVzQ3WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNiaUFnYVc1dVpYSlFjbTl3Y3o4NklFcFRXQzVKYm5SeWFXNXphV05GYkdWdFpXNTBjMXNuYzNCaGJpZGRPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVc1a2FXTmhkRzl5VTJWd1lYSmhkRzl5UTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5FYVhOaFlteGxaQ3hjYmlBZ0lDQjBhR1Z0WlRvZ2UxeHVJQ0FnSUNBZ2MzQmhZMmx1WnpvZ2V5QmlZWE5sVlc1cGRDQjlMRnh1SUNBZ0lDQWdZMjlzYjNKekxGeHVJQ0FnSUgwc1hHNGdJSDA2SUVsdVpHbGpZWFJ2Y2xObGNHRnlZWFJ2Y2xCeWIzQnpQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0xGeHVJQ0IxYm5OMGVXeGxaRG9nWW05dmJHVmhibHh1S1RvZ1ExTlRUMkpxWldOMFYybDBhRXhoWW1Wc0lEMCtJQ2g3WEc0Z0lHeGhZbVZzT2lBbmFXNWthV05oZEc5eVUyVndZWEpoZEc5eUp5eGNiaUFnWVd4cFoyNVRaV3htT2lBbmMzUnlaWFJqYUNjc1hHNGdJSGRwWkhSb09pQXhMRnh1SUNBdUxpNG9kVzV6ZEhsc1pXUmNiaUFnSUNBL0lIdDlYRzRnSUNBZ09pQjdYRzRnSUNBZ0lDQWdJR0poWTJ0bmNtOTFibVJEYjJ4dmNqb2dhWE5FYVhOaFlteGxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNNVEFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQWdJQ0FnSUNCdFlYSm5hVzVDYjNSMGIyMDZJR0poYzJWVmJtbDBJQ29nTWl4Y2JpQWdJQ0FnSUNBZ2JXRnlaMmx1Vkc5d09pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lDQWdJQ0I5S1N4Y2JuMHBPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCd2NtOXdjem9nU1c1a2FXTmhkRzl5VTJWd1lYSmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2Jpa2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHbHVibVZ5VUhKdmNITWdmU0E5SUhCeWIzQnpPMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHh6Y0dGdVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQWdJSHN1TGk1blpYUlRkSGxzWlZCeWIzQnpLSEJ5YjNCekxDQW5hVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNBbmFXNWthV05oZEc5eUxYTmxjR0Z5WVhSdmNpYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNCOUtYMWNiaUFnSUNBdlBseHVJQ0FwTzF4dWZUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCTWIyRmthVzVuWEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnYkc5aFpHbHVaMFJ2ZEVGdWFXMWhkR2x2Ym5NZ1BTQnJaWGxtY21GdFpYTmdYRzRnSURBbExDQTRNQ1VzSURFd01DVWdleUJ2Y0dGamFYUjVPaUF3T3lCOVhHNGdJRFF3SlNCN0lHOXdZV05wZEhrNklERTdJSDFjYm1BN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCc2IyRmthVzVuU1c1a2FXTmhkRzl5UTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5HYjJOMWMyVmtMRnh1SUNBZ0lITnBlbVVzWEc0Z0lDQWdkR2hsYldVNklIdGNiaUFnSUNBZ0lHTnZiRzl5Y3l4Y2JpQWdJQ0FnSUhOd1lXTnBibWM2SUhzZ1ltRnpaVlZ1YVhRZ2ZTeGNiaUFnSUNCOUxGeHVJQ0I5T2lCTWIyRmthVzVuU1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0c1hHNGdJSFZ1YzNSNWJHVmtPaUJpYjI5c1pXRnVYRzRwT2lCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3Z1BUNGdLSHRjYmlBZ2JHRmlaV3c2SUNkc2IyRmthVzVuU1c1a2FXTmhkRzl5Snl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0IwY21GdWMybDBhVzl1T2lBblkyOXNiM0lnTVRVd2JYTW5MRnh1SUNCaGJHbG5ibE5sYkdZNklDZGpaVzUwWlhJbkxGeHVJQ0JtYjI1MFUybDZaVG9nYzJsNlpTeGNiaUFnYkdsdVpVaGxhV2RvZERvZ01TeGNiaUFnYldGeVoybHVVbWxuYUhRNklITnBlbVVzWEc0Z0lIUmxlSFJCYkdsbmJqb2dKMk5sYm5SbGNpY3NYRzRnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2R0YVdSa2JHVW5MRnh1SUNBdUxpNG9kVzV6ZEhsc1pXUmNiaUFnSUNBL0lIdDlYRzRnSUNBZ09pQjdYRzRnSUNBZ0lDQWdJR052Ykc5eU9pQnBjMFp2WTNWelpXUWdQeUJqYjJ4dmNuTXVibVYxZEhKaGJEWXdJRG9nWTI5c2IzSnpMbTVsZFhSeVlXd3lNQ3hjYmlBZ0lDQWdJQ0FnY0dGa1pHbHVaem9nWW1GelpWVnVhWFFnS2lBeUxGeHVJQ0FnSUNBZ2ZTa3NYRzU5S1R0Y2JseHVhVzUwWlhKbVlXTmxJRXh2WVdScGJtZEViM1JRY205d2N5QjdYRzRnSUdSbGJHRjVPaUJ1ZFcxaVpYSTdYRzRnSUc5bVpuTmxkRG9nWW05dmJHVmhianRjYm4xY2JtTnZibk4wSUV4dllXUnBibWRFYjNRZ1BTQW9leUJrWld4aGVTd2diMlptYzJWMElIMDZJRXh2WVdScGJtZEViM1JRY205d2N5a2dQVDRnS0Z4dUlDQThjM0JoYmx4dUlDQWdJR056Y3oxN2UxeHVJQ0FnSUNBZ1lXNXBiV0YwYVc5dU9pQmdKSHRzYjJGa2FXNW5SRzkwUVc1cGJXRjBhVzl1YzMwZ01YTWdaV0Z6WlMxcGJpMXZkWFFnSkh0a1pXeGhlWDF0Y3lCcGJtWnBibWwwWlR0Z0xGeHVJQ0FnSUNBZ1ltRmphMmR5YjNWdVpFTnZiRzl5T2lBblkzVnljbVZ1ZEVOdmJHOXlKeXhjYmlBZ0lDQWdJR0p2Y21SbGNsSmhaR2wxY3pvZ0p6RmxiU2NzWEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNBZ0lHMWhjbWRwYmt4bFpuUTZJRzltWm5ObGRDQS9JQ2N4WlcwbklEb2dkVzVrWldacGJtVmtMRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NV1Z0Snl4Y2JpQWdJQ0FnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2QwYjNBbkxGeHVJQ0FnSUNBZ2QybGtkR2c2SUNjeFpXMG5MRnh1SUNBZ0lIMTlYRzRnSUM4K1hHNHBPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUV4dllXUnBibWRKYm1ScFkyRjBiM0pRY205d2N6eGNiaUFnVDNCMGFXOXVJRDBnZFc1cmJtOTNiaXhjYmlBZ1NYTk5kV3gwYVNCbGVIUmxibVJ6SUdKdmIyeGxZVzRnUFNCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrSUQwZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNGdaWGgwWlc1a2N5QkRiMjF0YjI1UWNtOXdjMEZ1WkVOc1lYTnpUbUZ0WlR4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaUI3WEc0Z0lDOHFLaUJRY205d2N5QjBhR0YwSUhkcGJHd2dZbVVnY0dGemMyVmtJRzl1SUhSdklIUm9aU0JqYUdsc1pISmxiaTRnS2k5Y2JpQWdhVzV1WlhKUWNtOXdjem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZGthWFluWFR0Y2JpQWdMeW9xSUZSb1pTQm1iMk4xYzJWa0lITjBZWFJsSUc5bUlIUm9aU0J6Wld4bFkzUXVJQ292WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNiaUFnYVhORWFYTmhZbXhsWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdMeW9xSUZObGRDQnphWHBsSUc5bUlIUm9aU0JqYjI1MFlXbHVaWEl1SUNvdlhHNGdJSE5wZW1VNklHNTFiV0psY2p0Y2JuMWNibVY0Y0c5eWRDQmpiMjV6ZENCTWIyRmthVzVuU1c1a2FXTmhkRzl5SUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0h0Y2JpQWdhVzV1WlhKUWNtOXdjeXhjYmlBZ2FYTlNkR3dzWEc0Z0lITnBlbVVnUFNBMExGeHVJQ0F1TGk1eVpYTjBVSEp2Y0hOY2JuMDZJRXh2WVdScGJtZEpibVJwWTJGMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaWtnUFQ0Z2UxeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJSHN1TGk1blpYUlRkSGxzWlZCeWIzQnpLRnh1SUNBZ0lDQWdJQ0I3SUM0dUxuSmxjM1JRY205d2N5d2dhVzV1WlhKUWNtOXdjeXdnYVhOU2RHd3NJSE5wZW1VZ2ZTeGNiaUFnSUNBZ0lDQWdKMnh2WVdScGJtZEpibVJwWTJGMGIzSW5MRnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXNWthV05oZEc5eU9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNBZ0lDZHNiMkZrYVc1bkxXbHVaR2xqWVhSdmNpYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0E4VEc5aFpHbHVaMFJ2ZENCa1pXeGhlVDE3TUgwZ2IyWm1jMlYwUFh0cGMxSjBiSDBnTHo1Y2JpQWdJQ0FnSUR4TWIyRmthVzVuUkc5MElHUmxiR0Y1UFhzeE5qQjlJRzltWm5ObGRDQXZQbHh1SUNBZ0lDQWdQRXh2WVdScGJtZEViM1FnWkdWc1lYazllek15TUgwZ2IyWm1jMlYwUFhzaGFYTlNkR3g5SUM4K1hHNGdJQ0FnUEM5a2FYWStYRzRnSUNrN1hHNTlPMXh1SWwxOSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgU3ZnID0gZnVuY3Rpb24gU3ZnKF9yZWYpIHtcbiAgdmFyIHNpemUgPSBfcmVmLnNpemUsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkJDIpO1xuICByZXR1cm4ganN4KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjAgMjBcIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgIGZvY3VzYWJsZTogXCJmYWxzZVwiLFxuICAgIGNzczogX3JlZjJcbiAgfSwgcHJvcHMpKTtcbn07XG52YXIgQ3Jvc3NJY29uID0gZnVuY3Rpb24gQ3Jvc3NJY29uKHByb3BzKSB7XG4gIHJldHVybiBqc3goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgc2l6ZTogMjBcbiAgfSwgcHJvcHMpLCBqc3goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC4zNDggMTQuODQ5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwbC0yLjY1MS0zLjAzMC0yLjY1MSAzLjAyOWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMC0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOSAwLTEuNjk3bDIuNzU4LTMuMTUtMi43NTktMy4xNTJjLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI4IDAtMS42OTdzMS4yMjgtMC40NjkgMS42OTcgMGwyLjY1MiAzLjAzMSAyLjY1MS0zLjAzMWMwLjQ2OS0wLjQ2OSAxLjIyOC0wLjQ2OSAxLjY5NyAwczAuNDY5IDEuMjI5IDAgMS42OTdsLTIuNzU4IDMuMTUyIDIuNzU4IDMuMTVjMC40NjkgMC40NjkgMC40NjkgMS4yMjkgMCAxLjY5OHpcIlxuICB9KSk7XG59O1xudmFyIERvd25DaGV2cm9uID0gZnVuY3Rpb24gRG93bkNoZXZyb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChTdmcsIF9leHRlbmRzKHtcbiAgICBzaXplOiAyMFxuICB9LCBwcm9wcyksIGpzeChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiXG4gIH0pKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBCdXR0b25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGJhc2VDU1MgPSBmdW5jdGlvbiBiYXNlQ1NTKF9yZWYzLCB1bnN0eWxlZCkge1xuICB2YXIgaXNGb2N1c2VkID0gX3JlZjMuaXNGb2N1c2VkLFxuICAgIF9yZWYzJHRoZW1lID0gX3JlZjMudGhlbWUsXG4gICAgYmFzZVVuaXQgPSBfcmVmMyR0aGVtZS5zcGFjaW5nLmJhc2VVbml0LFxuICAgIGNvbG9ycyA9IF9yZWYzJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnaW5kaWNhdG9yQ29udGFpbmVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgJzpob3Zlcic6IHtcbiAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDgwIDogY29sb3JzLm5ldXRyYWw0MFxuICAgIH1cbiAgfSk7XG59O1xudmFyIGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbnZhciBEcm9wZG93bkluZGljYXRvciA9IGZ1bmN0aW9uIERyb3Bkb3duSW5kaWNhdG9yKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnZHJvcGRvd25JbmRpY2F0b3InLCB7XG4gICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4gfHwganN4KERvd25DaGV2cm9uLCBudWxsKSk7XG59O1xudmFyIGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbnZhciBDbGVhckluZGljYXRvciA9IGZ1bmN0aW9uIENsZWFySW5kaWNhdG9yKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnY2xlYXJJbmRpY2F0b3InLCB7XG4gICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4gfHwganN4KENyb3NzSWNvbiwgbnVsbCkpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gZnVuY3Rpb24gaW5kaWNhdG9yU2VwYXJhdG9yQ1NTKF9yZWY0LCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWY0LmlzRGlzYWJsZWQsXG4gICAgX3JlZjQkdGhlbWUgPSBfcmVmNC50aGVtZSxcbiAgICBiYXNlVW5pdCA9IF9yZWY0JHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQsXG4gICAgY29sb3JzID0gX3JlZjQkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdpbmRpY2F0b3JTZXBhcmF0b3InLFxuICAgIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICAgIHdpZHRoOiAxXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwxMCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDJcbiAgfSk7XG59O1xudmFyIEluZGljYXRvclNlcGFyYXRvciA9IGZ1bmN0aW9uIEluZGljYXRvclNlcGFyYXRvcihwcm9wcykge1xuICB2YXIgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIF9leHRlbmRzKHt9LCBpbm5lclByb3BzLCBnZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICdpbmRpY2F0b3Itc2VwYXJhdG9yJzogdHJ1ZVxuICB9KSkpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGxvYWRpbmdEb3RBbmltYXRpb25zID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XFxuICA0MCUgeyBvcGFjaXR5OiAxOyB9XFxuXCJdKSkpO1xudmFyIGxvYWRpbmdJbmRpY2F0b3JDU1MgPSBmdW5jdGlvbiBsb2FkaW5nSW5kaWNhdG9yQ1NTKF9yZWY1LCB1bnN0eWxlZCkge1xuICB2YXIgaXNGb2N1c2VkID0gX3JlZjUuaXNGb2N1c2VkLFxuICAgIHNpemUgPSBfcmVmNS5zaXplLFxuICAgIF9yZWY1JHRoZW1lID0gX3JlZjUudGhlbWUsXG4gICAgY29sb3JzID0gX3JlZjUkdGhlbWUuY29sb3JzLFxuICAgIGJhc2VVbml0ID0gX3JlZjUkdGhlbWUuc3BhY2luZy5iYXNlVW5pdDtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnbG9hZGluZ0luZGljYXRvcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gICAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgICBmb250U2l6ZTogc2l6ZSxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICAgIG1hcmdpblJpZ2h0OiBzaXplLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZSdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgcGFkZGluZzogYmFzZVVuaXQgKiAyXG4gIH0pO1xufTtcbnZhciBMb2FkaW5nRG90ID0gZnVuY3Rpb24gTG9hZGluZ0RvdChfcmVmNikge1xuICB2YXIgZGVsYXkgPSBfcmVmNi5kZWxheSxcbiAgICBvZmZzZXQgPSBfcmVmNi5vZmZzZXQ7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIHtcbiAgICBjc3M6IC8qI19fUFVSRV9fKi9jc3MkMih7XG4gICAgICBhbmltYXRpb246IFwiXCIuY29uY2F0KGxvYWRpbmdEb3RBbmltYXRpb25zLCBcIiAxcyBlYXNlLWluLW91dCBcIikuY29uY2F0KGRlbGF5LCBcIm1zIGluZmluaXRlO1wiKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBib3JkZXJSYWRpdXM6ICcxZW0nLFxuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBtYXJnaW5MZWZ0OiBvZmZzZXQgPyAnMWVtJyA6IHVuZGVmaW5lZCxcbiAgICAgIGhlaWdodDogJzFlbScsXG4gICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJyxcbiAgICAgIHdpZHRoOiAnMWVtJ1xuICAgIH0sIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIjtsYWJlbDpMb2FkaW5nRG90O1wiLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WkdsallYUnZjbk11ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXMVJTU0lzSW1acGJHVWlPaUpwYm1ScFkyRjBiM0p6TG5SemVDSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2lCQWFuTjRJR3B6ZUNBcUwxeHVhVzF3YjNKMElIc2dVbVZoWTNST2IyUmxJSDBnWm5KdmJTQW5jbVZoWTNRbk8xeHVhVzF3YjNKMElIc2dhbk40TENCclpYbG1jbUZ0WlhNZ2ZTQm1jbTl0SUNkQVpXMXZkR2x2Ymk5eVpXRmpkQ2M3WEc1Y2JtbHRjRzl5ZENCN1hHNGdJRU52YlcxdmJsQnliM0J6UVc1a1EyeGhjM05PWVcxbExGeHVJQ0JEVTFOUFltcGxZM1JYYVhSb1RHRmlaV3dzWEc0Z0lFZHliM1Z3UW1GelpTeGNibjBnWm5KdmJTQW5MaTR2ZEhsd1pYTW5PMXh1YVcxd2IzSjBJSHNnWjJWMFUzUjViR1ZRY205d2N5QjlJR1p5YjIwZ0p5NHVMM1YwYVd4ekp6dGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCRWNtOXdaRzkzYmlBbUlFTnNaV0Z5SUVsamIyNXpYRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1WTI5dWMzUWdVM1puSUQwZ0tIdGNiaUFnYzJsNlpTeGNiaUFnTGk0dWNISnZjSE5jYm4wNklFcFRXQzVKYm5SeWFXNXphV05GYkdWdFpXNTBjMXNuYzNabkoxMGdKaUI3SUhOcGVtVTZJRzUxYldKbGNpQjlLU0E5UGlBb1hHNGdJRHh6ZG1kY2JpQWdJQ0JvWldsbmFIUTllM05wZW1WOVhHNGdJQ0FnZDJsa2RHZzllM05wZW1WOVhHNGdJQ0FnZG1sbGQwSnZlRDFjSWpBZ01DQXlNQ0F5TUZ3aVhHNGdJQ0FnWVhKcFlTMW9hV1JrWlc0OVhDSjBjblZsWENKY2JpQWdJQ0JtYjJOMWMyRmliR1U5WENKbVlXeHpaVndpWEc0Z0lDQWdZM056UFh0N1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lBbmFXNXNhVzVsTFdKc2IyTnJKeXhjYmlBZ0lDQWdJR1pwYkd3NklDZGpkWEp5Wlc1MFEyOXNiM0luTEZ4dUlDQWdJQ0FnYkdsdVpVaGxhV2RvZERvZ01TeGNiaUFnSUNBZ0lITjBjbTlyWlRvZ0oyTjFjbkpsYm5SRGIyeHZjaWNzWEc0Z0lDQWdJQ0J6ZEhKdmEyVlhhV1IwYURvZ01DeGNiaUFnSUNCOWZWeHVJQ0FnSUhzdUxpNXdjbTl3YzMxY2JpQWdMejVjYmlrN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUVOeWIzTnpTV052YmxCeWIzQnpJRDBnU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZHpkbWNuWFNBbUlIc2djMmw2WlQ4NklHNTFiV0psY2lCOU8xeHVaWGh3YjNKMElHTnZibk4wSUVOeWIzTnpTV052YmlBOUlDaHdjbTl3Y3pvZ1EzSnZjM05KWTI5dVVISnZjSE1wSUQwK0lDaGNiaUFnUEZOMlp5QnphWHBsUFhzeU1IMGdleTR1TG5CeWIzQnpmVDVjYmlBZ0lDQThjR0YwYUNCa1BWd2lUVEUwTGpNME9DQXhOQzQ0TkRsakxUQXVORFk1SURBdU5EWTVMVEV1TWpJNUlEQXVORFk1TFRFdU5qazNJREJzTFRJdU5qVXhMVE11TURNd0xUSXVOalV4SURNdU1ESTVZeTB3TGpRMk9TQXdMalEyT1MweExqSXlPU0F3TGpRMk9TMHhMalk1TnlBd0xUQXVORFk1TFRBdU5EWTVMVEF1TkRZNUxURXVNakk1SURBdE1TNDJPVGRzTWk0M05UZ3RNeTR4TlMweUxqYzFPUzB6TGpFMU1tTXRNQzQwTmprdE1DNDBOamt0TUM0ME5qa3RNUzR5TWpnZ01DMHhMalk1TjNNeExqSXlPQzB3TGpRMk9TQXhMalk1TnlBd2JESXVOalV5SURNdU1ETXhJREl1TmpVeExUTXVNRE14WXpBdU5EWTVMVEF1TkRZNUlERXVNakk0TFRBdU5EWTVJREV1TmprM0lEQnpNQzQwTmprZ01TNHlNamtnTUNBeExqWTVOMnd0TWk0M05UZ2dNeTR4TlRJZ01pNDNOVGdnTXk0eE5XTXdMalEyT1NBd0xqUTJPU0F3TGpRMk9TQXhMakl5T1NBd0lERXVOams0ZWx3aUlDOCtYRzRnSUR3dlUzWm5QbHh1S1R0Y2JtVjRjRzl5ZENCMGVYQmxJRVJ2ZDI1RGFHVjJjbTl1VUhKdmNITWdQU0JLVTFndVNXNTBjbWx1YzJsalJXeGxiV1Z1ZEhOYkozTjJaeWRkSUNZZ2V5QnphWHBsUHpvZ2JuVnRZbVZ5SUgwN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnUkc5M2JrTm9aWFp5YjI0Z1BTQW9jSEp2Y0hNNklFUnZkMjVEYUdWMmNtOXVVSEp2Y0hNcElEMCtJQ2hjYmlBZ1BGTjJaeUJ6YVhwbFBYc3lNSDBnZXk0dUxuQnliM0J6ZlQ1Y2JpQWdJQ0E4Y0dGMGFDQmtQVndpVFRRdU5URTJJRGN1TlRRNFl6QXVORE0yTFRBdU5EUTJJREV1TURRekxUQXVORGd4SURFdU5UYzJJREJzTXk0NU1EZ2dNeTQzTkRjZ015NDVNRGd0TXk0M05EZGpNQzQxTXpNdE1DNDBPREVnTVM0eE5ERXRNQzQwTkRZZ01TNDFOelFnTUNBd0xqUXpOaUF3TGpRME5TQXdMalF3T0NBeExqRTVOeUF3SURFdU5qRTFMVEF1TkRBMklEQXVOREU0TFRRdU5qazFJRFF1TlRBeUxUUXVOamsxSURRdU5UQXlMVEF1TWpFM0lEQXVNakl6TFRBdU5UQXlJREF1TXpNMUxUQXVOemczSURBdU16TTFjeTB3TGpVM0xUQXVNVEV5TFRBdU56ZzVMVEF1TXpNMVl6QWdNQzAwTGpJNE55MDBMakE0TkMwMExqWTVOUzAwTGpVd01uTXRNQzQwTXpZdE1TNHhOeUF3TFRFdU5qRTFlbHdpSUM4K1hHNGdJRHd2VTNablBseHVLVHRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5QkVjbTl3Wkc5M2JpQW1JRU5zWldGeUlFSjFkSFJ2Ym5OY2JpOHZJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFUnliM0JrYjNkdVNXNWthV05oZEc5eVVISnZjSE04WEc0Z0lFOXdkR2x2YmlBOUlIVnVhMjV2ZDI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUlEMGdZbTl2YkdWaGJpeGNiaUFnUjNKdmRYQWdaWGgwWlc1a2N5QkhjbTkxY0VKaGMyVThUM0IwYVc5dVBpQTlJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrSUdWNGRHVnVaSE1nUTI5dGJXOXVVSEp2Y0hOQmJtUkRiR0Z6YzA1aGJXVThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0Z2UxeHVJQ0F2S2lvZ1ZHaGxJR05vYVd4a2NtVnVJSFJ2SUdKbElISmxibVJsY21Wa0lHbHVjMmxrWlNCMGFHVWdhVzVrYVdOaGRHOXlMaUFxTDF4dUlDQmphR2xzWkhKbGJqODZJRkpsWVdOMFRtOWtaVHRjYmlBZ0x5b3FJRkJ5YjNCeklIUm9ZWFFnZDJsc2JDQmlaU0J3WVhOelpXUWdiMjRnZEc4Z2RHaGxJR05vYVd4a2NtVnVMaUFxTDF4dUlDQnBibTVsY2xCeWIzQnpPaUJLVTFndVNXNTBjbWx1YzJsalJXeGxiV1Z1ZEhOYkoyUnBkaWRkTzF4dUlDQXZLaW9nVkdobElHWnZZM1Z6WldRZ2MzUmhkR1VnYjJZZ2RHaGxJSE5sYkdWamRDNGdLaTljYmlBZ2FYTkdiMk4xYzJWa09pQmliMjlzWldGdU8xeHVJQ0JwYzBScGMyRmliR1ZrT2lCaWIyOXNaV0Z1TzF4dWZWeHVYRzVqYjI1emRDQmlZWE5sUTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5HYjJOMWMyVmtMRnh1SUNBZ0lIUm9aVzFsT2lCN1hHNGdJQ0FnSUNCemNHRmphVzVuT2lCN0lHSmhjMlZWYm1sMElIMHNYRzRnSUNBZ0lDQmpiMnh2Y25Nc1hHNGdJQ0FnZlN4Y2JpQWdmVHBjYmlBZ0lDQjhJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlBZ0lDQjhJRU5zWldGeVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENHNYRzRnSUhWdWMzUjViR1ZrT2lCaWIyOXNaV0Z1WEc0cE9pQkRVMU5QWW1wbFkzUlhhWFJvVEdGaVpXd2dQVDRnS0h0Y2JpQWdiR0ZpWld3NklDZHBibVJwWTJGMGIzSkRiMjUwWVdsdVpYSW5MRnh1SUNCa2FYTndiR0Y1T2lBblpteGxlQ2NzWEc0Z0lIUnlZVzV6YVhScGIyNDZJQ2RqYjJ4dmNpQXhOVEJ0Y3ljc1hHNGdJQzR1TGloMWJuTjBlV3hsWkZ4dUlDQWdJRDhnZTMxY2JpQWdJQ0E2SUh0Y2JpQWdJQ0FnSUNBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzTmpBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRJd0xGeHVJQ0FnSUNBZ0lDQndZV1JrYVc1bk9pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lDQWdJQ0FnSUNjNmFHOTJaWEluT2lCN1hHNGdJQ0FnSUNBZ0lDQWdZMjlzYjNJNklHbHpSbTlqZFhObFpDQS9JR052Ykc5eWN5NXVaWFYwY21Gc09EQWdPaUJqYjJ4dmNuTXVibVYxZEhKaGJEUXdMRnh1SUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnZlNrc1hHNTlLVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1J5YjNCa2IzZHVTVzVrYVdOaGRHOXlRMU5USUQwZ1ltRnpaVU5UVXp0Y2JtVjRjRzl5ZENCamIyNXpkQ0JFY205d1pHOTNia2x1WkdsallYUnZjaUE5SUR4Y2JpQWdUM0IwYVc5dUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpeGNiaUFnUjNKdmRYQWdaWGgwWlc1a2N5QkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaWhjYmlBZ2NISnZjSE02SUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2Jpa2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHTm9hV3hrY21WdUxDQnBibTVsY2xCeWIzQnpJSDBnUFNCd2NtOXdjenRjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0E4WkdsMlhHNGdJQ0FnSUNCN0xpNHVaMlYwVTNSNWJHVlFjbTl3Y3lod2NtOXdjeXdnSjJSeWIzQmtiM2R1U1c1a2FXTmhkRzl5Snl3Z2UxeHVJQ0FnSUNBZ0lDQnBibVJwWTJGMGIzSTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lDZGtjbTl3Wkc5M2JpMXBibVJwWTJGMGIzSW5PaUIwY25WbExGeHVJQ0FnSUNBZ2ZTbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0I3WTJocGJHUnlaVzRnZkh3Z1BFUnZkMjVEYUdWMmNtOXVJQzgrZlZ4dUlDQWdJRHd2WkdsMlBseHVJQ0FwTzF4dWZUdGNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JEYkdWaGNrbHVaR2xqWVhSdmNsQnliM0J6UEZ4dUlDQlBjSFJwYjI0Z1BTQjFibXR1YjNkdUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpQTlJR0p2YjJ4bFlXNHNYRzRnSUVkeWIzVndJR1Y0ZEdWdVpITWdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNGdQU0JIY205MWNFSmhjMlU4VDNCMGFXOXVQbHh1UGlCbGVIUmxibVJ6SUVOdmJXMXZibEJ5YjNCelFXNWtRMnhoYzNOT1lXMWxQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0lIdGNiaUFnTHlvcUlGUm9aU0JqYUdsc1pISmxiaUIwYnlCaVpTQnlaVzVrWlhKbFpDQnBibk5wWkdVZ2RHaGxJR2x1WkdsallYUnZjaTRnS2k5Y2JpQWdZMmhwYkdSeVpXNC9PaUJTWldGamRFNXZaR1U3WEc0Z0lDOHFLaUJRY205d2N5QjBhR0YwSUhkcGJHd2dZbVVnY0dGemMyVmtJRzl1SUhSdklIUm9aU0JqYUdsc1pISmxiaTRnS2k5Y2JpQWdhVzV1WlhKUWNtOXdjem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZGthWFluWFR0Y2JpQWdMeW9xSUZSb1pTQm1iMk4xYzJWa0lITjBZWFJsSUc5bUlIUm9aU0J6Wld4bFkzUXVJQ292WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNibjFjYmx4dVpYaHdiM0owSUdOdmJuTjBJR05zWldGeVNXNWthV05oZEc5eVExTlRJRDBnWW1GelpVTlRVenRjYm1WNGNHOXlkQ0JqYjI1emRDQkRiR1ZoY2tsdVpHbGpZWFJ2Y2lBOUlEeGNiaUFnVDNCMGFXOXVMRnh1SUNCSmMwMTFiSFJwSUdWNGRHVnVaSE1nWW05dmJHVmhiaXhjYmlBZ1IzSnZkWEFnWlhoMFpXNWtjeUJIY205MWNFSmhjMlU4VDNCMGFXOXVQbHh1UGloY2JpQWdjSEp2Y0hNNklFTnNaV0Z5U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2Jpa2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHTm9hV3hrY21WdUxDQnBibTVsY2xCeWIzQnpJSDBnUFNCd2NtOXdjenRjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0E4WkdsMlhHNGdJQ0FnSUNCN0xpNHVaMlYwVTNSNWJHVlFjbTl3Y3lod2NtOXdjeXdnSjJOc1pXRnlTVzVrYVdOaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNCcGJtUnBZMkYwYjNJNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNkamJHVmhjaTFwYm1ScFkyRjBiM0luT2lCMGNuVmxMRnh1SUNBZ0lDQWdmU2w5WEc0Z0lDQWdJQ0I3TGk0dWFXNXVaWEpRY205d2MzMWNiaUFnSUNBK1hHNGdJQ0FnSUNCN1kyaHBiR1J5Wlc0Z2ZId2dQRU55YjNOelNXTnZiaUF2UG4xY2JpQWdJQ0E4TDJScGRqNWNiaUFnS1R0Y2JuMDdYRzVjYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1THk4Z1UyVndZWEpoZEc5eVhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkpibVJwWTJGMGIzSlRaWEJoY21GMGIzSlFjbTl3Y3p4Y2JpQWdUM0IwYVc5dUlEMGdkVzVyYm05M2JpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNGdQU0JpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtJRDBnUjNKdmRYQkNZWE5sUEU5d2RHbHZiajVjYmo0Z1pYaDBaVzVrY3lCRGIyMXRiMjVRY205d2MwRnVaRU5zWVhOelRtRnRaVHhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BpQjdYRzRnSUdselJHbHpZV0pzWldRNklHSnZiMnhsWVc0N1hHNGdJR2x6Um05amRYTmxaRG9nWW05dmJHVmhianRjYmlBZ2FXNXVaWEpRY205d2N6ODZJRXBUV0M1SmJuUnlhVzV6YVdORmJHVnRaVzUwYzFzbmMzQmhiaWRkTzF4dWZWeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2FXNWthV05oZEc5eVUyVndZWEpoZEc5eVExTlRJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCN1hHNGdJQ0FnYVhORWFYTmhZbXhsWkN4Y2JpQWdJQ0IwYUdWdFpUb2dlMXh1SUNBZ0lDQWdjM0JoWTJsdVp6b2dleUJpWVhObFZXNXBkQ0I5TEZ4dUlDQWdJQ0FnWTI5c2IzSnpMRnh1SUNBZ0lIMHNYRzRnSUgwNklFbHVaR2xqWVhSdmNsTmxjR0Z5WVhSdmNsQnliM0J6UEU5d2RHbHZiaXdnU1hOTmRXeDBhU3dnUjNKdmRYQStMRnh1SUNCMWJuTjBlV3hsWkRvZ1ltOXZiR1ZoYmx4dUtUb2dRMU5UVDJKcVpXTjBWMmwwYUV4aFltVnNJRDArSUNoN1hHNGdJR3hoWW1Wc09pQW5hVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlKeXhjYmlBZ1lXeHBaMjVUWld4bU9pQW5jM1J5WlhSamFDY3NYRzRnSUhkcFpIUm9PaUF4TEZ4dUlDQXVMaTRvZFc1emRIbHNaV1JjYmlBZ0lDQS9JSHQ5WEc0Z0lDQWdPaUI3WEc0Z0lDQWdJQ0FnSUdKaFkydG5jbTkxYm1SRGIyeHZjam9nYVhORWFYTmhZbXhsWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzTVRBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRJd0xGeHVJQ0FnSUNBZ0lDQnRZWEpuYVc1Q2IzUjBiMjA2SUdKaGMyVlZibWwwSUNvZ01peGNiaUFnSUNBZ0lDQWdiV0Z5WjJsdVZHOXdPaUJpWVhObFZXNXBkQ0FxSURJc1hHNGdJQ0FnSUNCOUtTeGNibjBwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnU1c1a2FXTmhkRzl5VTJWd1lYSmhkRzl5SUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQndjbTl3Y3pvZ1NXNWthV05oZEc5eVUyVndZWEpoZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR2x1Ym1WeVVISnZjSE1nZlNBOUlIQnliM0J6TzF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4emNHRnVYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0FnSUhzdUxpNW5aWFJUZEhsc1pWQnliM0J6S0hCeWIzQnpMQ0FuYVc1a2FXTmhkRzl5VTJWd1lYSmhkRzl5Snl3Z2UxeHVJQ0FnSUNBZ0lDQW5hVzVrYVdOaGRHOXlMWE5sY0dGeVlYUnZjaWM2SUhSeWRXVXNYRzRnSUNBZ0lDQjlLWDFjYmlBZ0lDQXZQbHh1SUNBcE8xeHVmVHRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5Qk1iMkZrYVc1blhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVZMjl1YzNRZ2JHOWhaR2x1WjBSdmRFRnVhVzFoZEdsdmJuTWdQU0JyWlhsbWNtRnRaWE5nWEc0Z0lEQWxMQ0E0TUNVc0lERXdNQ1VnZXlCdmNHRmphWFI1T2lBd095QjlYRzRnSURRd0pTQjdJRzl3WVdOcGRIazZJREU3SUgxY2JtQTdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnNiMkZrYVc1blNXNWthV05oZEc5eVExTlRJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCN1hHNGdJQ0FnYVhOR2IyTjFjMlZrTEZ4dUlDQWdJSE5wZW1Vc1hHNGdJQ0FnZEdobGJXVTZJSHRjYmlBZ0lDQWdJR052Ykc5eWN5eGNiaUFnSUNBZ0lITndZV05wYm1jNklIc2dZbUZ6WlZWdWFYUWdmU3hjYmlBZ0lDQjlMRnh1SUNCOU9pQk1iMkZrYVc1blNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENHNYRzRnSUhWdWMzUjViR1ZrT2lCaWIyOXNaV0Z1WEc0cE9pQkRVMU5QWW1wbFkzUlhhWFJvVEdGaVpXd2dQVDRnS0h0Y2JpQWdiR0ZpWld3NklDZHNiMkZrYVc1blNXNWthV05oZEc5eUp5eGNiaUFnWkdsemNHeGhlVG9nSjJac1pYZ25MRnh1SUNCMGNtRnVjMmwwYVc5dU9pQW5ZMjlzYjNJZ01UVXdiWE1uTEZ4dUlDQmhiR2xuYmxObGJHWTZJQ2RqWlc1MFpYSW5MRnh1SUNCbWIyNTBVMmw2WlRvZ2MybDZaU3hjYmlBZ2JHbHVaVWhsYVdkb2REb2dNU3hjYmlBZ2JXRnlaMmx1VW1sbmFIUTZJSE5wZW1Vc1hHNGdJSFJsZUhSQmJHbG5iam9nSjJObGJuUmxjaWNzWEc0Z0lIWmxjblJwWTJGc1FXeHBaMjQ2SUNkdGFXUmtiR1VuTEZ4dUlDQXVMaTRvZFc1emRIbHNaV1JjYmlBZ0lDQS9JSHQ5WEc0Z0lDQWdPaUI3WEc0Z0lDQWdJQ0FnSUdOdmJHOXlPaUJwYzBadlkzVnpaV1FnUHlCamIyeHZjbk11Ym1WMWRISmhiRFl3SURvZ1kyOXNiM0p6TG01bGRYUnlZV3d5TUN4Y2JpQWdJQ0FnSUNBZ2NHRmtaR2x1WnpvZ1ltRnpaVlZ1YVhRZ0tpQXlMRnh1SUNBZ0lDQWdmU2tzWEc1OUtUdGNibHh1YVc1MFpYSm1ZV05sSUV4dllXUnBibWRFYjNSUWNtOXdjeUI3WEc0Z0lHUmxiR0Y1T2lCdWRXMWlaWEk3WEc0Z0lHOW1abk5sZERvZ1ltOXZiR1ZoYmp0Y2JuMWNibU52Ym5OMElFeHZZV1JwYm1kRWIzUWdQU0FvZXlCa1pXeGhlU3dnYjJabWMyVjBJSDA2SUV4dllXUnBibWRFYjNSUWNtOXdjeWtnUFQ0Z0tGeHVJQ0E4YzNCaGJseHVJQ0FnSUdOemN6MTdlMXh1SUNBZ0lDQWdZVzVwYldGMGFXOXVPaUJnSkh0c2IyRmthVzVuUkc5MFFXNXBiV0YwYVc5dWMzMGdNWE1nWldGelpTMXBiaTF2ZFhRZ0pIdGtaV3hoZVgxdGN5QnBibVpwYm1sMFpUdGdMRnh1SUNBZ0lDQWdZbUZqYTJkeWIzVnVaRU52Ykc5eU9pQW5ZM1Z5Y21WdWRFTnZiRzl5Snl4Y2JpQWdJQ0FnSUdKdmNtUmxjbEpoWkdsMWN6b2dKekZsYlNjc1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lBbmFXNXNhVzVsTFdKc2IyTnJKeXhjYmlBZ0lDQWdJRzFoY21kcGJreGxablE2SUc5bVpuTmxkQ0EvSUNjeFpXMG5JRG9nZFc1a1pXWnBibVZrTEZ4dUlDQWdJQ0FnYUdWcFoyaDBPaUFuTVdWdEp5eGNiaUFnSUNBZ0lIWmxjblJwWTJGc1FXeHBaMjQ2SUNkMGIzQW5MRnh1SUNBZ0lDQWdkMmxrZEdnNklDY3haVzBuTEZ4dUlDQWdJSDE5WEc0Z0lDOCtYRzRwTzF4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFeHZZV1JwYm1kSmJtUnBZMkYwYjNKUWNtOXdjenhjYmlBZ1QzQjBhVzl1SUQwZ2RXNXJibTkzYml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0Z1BTQmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K0lEMGdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRnWlhoMFpXNWtjeUJEYjIxdGIyNVFjbTl3YzBGdVpFTnNZWE56VG1GdFpUeFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGlCN1hHNGdJQzhxS2lCUWNtOXdjeUIwYUdGMElIZHBiR3dnWW1VZ2NHRnpjMlZrSUc5dUlIUnZJSFJvWlNCamFHbHNaSEpsYmk0Z0tpOWNiaUFnYVc1dVpYSlFjbTl3Y3pvZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWRrYVhZblhUdGNiaUFnTHlvcUlGUm9aU0JtYjJOMWMyVmtJSE4wWVhSbElHOW1JSFJvWlNCelpXeGxZM1F1SUNvdlhHNGdJR2x6Um05amRYTmxaRG9nWW05dmJHVmhianRjYmlBZ2FYTkVhWE5oWW14bFpEb2dZbTl2YkdWaGJqdGNiaUFnTHlvcUlGTmxkQ0J6YVhwbElHOW1JSFJvWlNCamIyNTBZV2x1WlhJdUlDb3ZYRzRnSUhOcGVtVTZJRzUxYldKbGNqdGNibjFjYm1WNGNHOXlkQ0JqYjI1emRDQk1iMkZrYVc1blNXNWthV05oZEc5eUlEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tIdGNiaUFnYVc1dVpYSlFjbTl3Y3l4Y2JpQWdhWE5TZEd3c1hHNGdJSE5wZW1VZ1BTQTBMRnh1SUNBdUxpNXlaWE4wVUhKdmNITmNibjA2SUV4dllXUnBibWRKYm1ScFkyRjBiM0pRY205d2N6eFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGlrZ1BUNGdlMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHhrYVhaY2JpQWdJQ0FnSUhzdUxpNW5aWFJUZEhsc1pWQnliM0J6S0Z4dUlDQWdJQ0FnSUNCN0lDNHVMbkpsYzNSUWNtOXdjeXdnYVc1dVpYSlFjbTl3Y3l3Z2FYTlNkR3dzSUhOcGVtVWdmU3hjYmlBZ0lDQWdJQ0FnSjJ4dllXUnBibWRKYm1ScFkyRjBiM0luTEZ4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdhVzVrYVdOaGRHOXlPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQWdJQ2RzYjJGa2FXNW5MV2x1WkdsallYUnZjaWM2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ2w5WEc0Z0lDQWdJQ0I3TGk0dWFXNXVaWEpRY205d2MzMWNiaUFnSUNBK1hHNGdJQ0FnSUNBOFRHOWhaR2x1WjBSdmRDQmtaV3hoZVQxN01IMGdiMlptYzJWMFBYdHBjMUowYkgwZ0x6NWNiaUFnSUNBZ0lEeE1iMkZrYVc1blJHOTBJR1JsYkdGNVBYc3hOakI5SUc5bVpuTmxkQ0F2UGx4dUlDQWdJQ0FnUEV4dllXUnBibWRFYjNRZ1pHVnNZWGs5ZXpNeU1IMGdiMlptYzJWMFBYc2hhWE5TZEd4OUlDOCtYRzRnSUNBZ1BDOWthWFkrWEc0Z0lDazdYRzU5TzF4dUlsMTkgKi9cIilcbiAgfSk7XG59O1xudmFyIExvYWRpbmdJbmRpY2F0b3IgPSBmdW5jdGlvbiBMb2FkaW5nSW5kaWNhdG9yKF9yZWY3KSB7XG4gIHZhciBpbm5lclByb3BzID0gX3JlZjcuaW5uZXJQcm9wcyxcbiAgICBpc1J0bCA9IF9yZWY3LmlzUnRsLFxuICAgIF9yZWY3JHNpemUgPSBfcmVmNy5zaXplLFxuICAgIHNpemUgPSBfcmVmNyRzaXplID09PSB2b2lkIDAgPyA0IDogX3JlZjckc2l6ZSxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjcsIF9leGNsdWRlZDIpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFByb3BzKSwge30sIHtcbiAgICBpbm5lclByb3BzOiBpbm5lclByb3BzLFxuICAgIGlzUnRsOiBpc1J0bCxcbiAgICBzaXplOiBzaXplXG4gIH0pLCAnbG9hZGluZ0luZGljYXRvcicsIHtcbiAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGpzeChMb2FkaW5nRG90LCB7XG4gICAgZGVsYXk6IDAsXG4gICAgb2Zmc2V0OiBpc1J0bFxuICB9KSwganN4KExvYWRpbmdEb3QsIHtcbiAgICBkZWxheTogMTYwLFxuICAgIG9mZnNldDogdHJ1ZVxuICB9KSwganN4KExvYWRpbmdEb3QsIHtcbiAgICBkZWxheTogMzIwLFxuICAgIG9mZnNldDogIWlzUnRsXG4gIH0pKTtcbn07XG5cbnZhciBjc3MkMSA9IGZ1bmN0aW9uIGNzcyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycyxcbiAgICBib3JkZXJSYWRpdXMgPSBfcmVmJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdjb250cm9sJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIG1pbkhlaWdodDogc3BhY2luZy5jb250cm9sSGVpZ2h0LFxuICAgIG91dGxpbmU6ICcwICFpbXBvcnRhbnQnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHRyYW5zaXRpb246ICdhbGwgMTAwbXMnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWw1IDogY29sb3JzLm5ldXRyYWwwLFxuICAgIGJvcmRlckNvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwxMCA6IGlzRm9jdXNlZCA/IGNvbG9ycy5wcmltYXJ5IDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJXaWR0aDogMSxcbiAgICBib3hTaGFkb3c6IGlzRm9jdXNlZCA/IFwiMCAwIDAgMXB4IFwiLmNvbmNhdChjb2xvcnMucHJpbWFyeSkgOiB1bmRlZmluZWQsXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBib3JkZXJDb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLnByaW1hcnkgOiBjb2xvcnMubmV1dHJhbDMwXG4gICAgfVxuICB9KTtcbn07XG52YXIgQ29udHJvbCA9IGZ1bmN0aW9uIENvbnRyb2wocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgIGlubmVyUmVmID0gcHJvcHMuaW5uZXJSZWYsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgbWVudUlzT3BlbiA9IHByb3BzLm1lbnVJc09wZW47XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NvbnRyb2wnLCB7XG4gICAgY29udHJvbDogdHJ1ZSxcbiAgICAnY29udHJvbC0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdjb250cm9sLS1pcy1mb2N1c2VkJzogaXNGb2N1c2VkLFxuICAgICdjb250cm9sLS1tZW51LWlzLW9wZW4nOiBtZW51SXNPcGVuXG4gIH0pLCBpbm5lclByb3BzLCB7XG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IGlzRGlzYWJsZWQgfHwgdW5kZWZpbmVkXG4gIH0pLCBjaGlsZHJlbik7XG59O1xudmFyIENvbnRyb2wkMSA9IENvbnRyb2w7XG5cbnZhciBfZXhjbHVkZWQkMSA9IFtcImRhdGFcIl07XG52YXIgZ3JvdXBDU1MgPSBmdW5jdGlvbiBncm91cENTUyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgc3BhY2luZyA9IF9yZWYudGhlbWUuc3BhY2luZztcbiAgcmV0dXJuIHVuc3R5bGVkID8ge30gOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogc3BhY2luZy5iYXNlVW5pdCAqIDIsXG4gICAgcGFkZGluZ1RvcDogc3BhY2luZy5iYXNlVW5pdCAqIDJcbiAgfTtcbn07XG52YXIgR3JvdXAgPSBmdW5jdGlvbiBHcm91cChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBjeCA9IHByb3BzLmN4LFxuICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICBnZXRDbGFzc05hbWVzID0gcHJvcHMuZ2V0Q2xhc3NOYW1lcyxcbiAgICBIZWFkaW5nID0gcHJvcHMuSGVhZGluZyxcbiAgICBoZWFkaW5nUHJvcHMgPSBwcm9wcy5oZWFkaW5nUHJvcHMsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICB0aGVtZSA9IHByb3BzLnRoZW1lLFxuICAgIHNlbGVjdFByb3BzID0gcHJvcHMuc2VsZWN0UHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdncm91cCcsIHtcbiAgICBncm91cDogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGpzeChIZWFkaW5nLCBfZXh0ZW5kcyh7fSwgaGVhZGluZ1Byb3BzLCB7XG4gICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzLFxuICAgIHRoZW1lOiB0aGVtZSxcbiAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICBnZXRDbGFzc05hbWVzOiBnZXRDbGFzc05hbWVzLFxuICAgIGN4OiBjeFxuICB9KSwgbGFiZWwpLCBqc3goXCJkaXZcIiwgbnVsbCwgY2hpbGRyZW4pKTtcbn07XG52YXIgZ3JvdXBIZWFkaW5nQ1NTID0gZnVuY3Rpb24gZ3JvdXBIZWFkaW5nQ1NTKF9yZWYyLCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZjIkdGhlbWUgPSBfcmVmMi50aGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmMiR0aGVtZS5jb2xvcnMsXG4gICAgc3BhY2luZyA9IF9yZWYyJHRoZW1lLnNwYWNpbmc7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ2dyb3VwJyxcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGNvbG9ycy5uZXV0cmFsNDAsXG4gICAgZm9udFNpemU6ICc3NSUnLFxuICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICBtYXJnaW5Cb3R0b206ICcwLjI1ZW0nLFxuICAgIHBhZGRpbmdMZWZ0OiBzcGFjaW5nLmJhc2VVbml0ICogMyxcbiAgICBwYWRkaW5nUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQgKiAzLFxuICAgIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG4gIH0pO1xufTtcbnZhciBHcm91cEhlYWRpbmcgPSBmdW5jdGlvbiBHcm91cEhlYWRpbmcocHJvcHMpIHtcbiAgdmFyIF9jbGVhbkNvbW1vblByb3BzID0gY2xlYW5Db21tb25Qcm9wcyhwcm9wcyk7XG4gICAgX2NsZWFuQ29tbW9uUHJvcHMuZGF0YTtcbiAgICB2YXIgaW5uZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY2xlYW5Db21tb25Qcm9wcywgX2V4Y2x1ZGVkJDEpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnZ3JvdXBIZWFkaW5nJywge1xuICAgICdncm91cC1oZWFkaW5nJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcykpO1xufTtcbnZhciBHcm91cCQxID0gR3JvdXA7XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJpbm5lclJlZlwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0hpZGRlblwiLCBcImlucHV0Q2xhc3NOYW1lXCJdO1xudmFyIGlucHV0Q1NTID0gZnVuY3Rpb24gaW5wdXRDU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgIHZpc2liaWxpdHk6IGlzRGlzYWJsZWQgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyxcbiAgICAvLyBmb3JjZSBjc3MgdG8gcmVjb21wdXRlIHdoZW4gdmFsdWUgY2hhbmdlIGR1ZSB0byBAZW1vdGlvbiBidWcuXG4gICAgLy8gV2UgY2FuIHJlbW92ZSBpdCB3aGVuZXZlciB0aGUgYnVnIGlzIGZpeGVkLlxuICAgIHRyYW5zZm9ybTogdmFsdWUgPyAndHJhbnNsYXRlWigwKScgOiAnJ1xuICB9LCBjb250YWluZXJTdHlsZSksIHVuc3R5bGVkID8ge30gOiB7XG4gICAgbWFyZ2luOiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBwYWRkaW5nQm90dG9tOiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBwYWRkaW5nVG9wOiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw4MFxuICB9KTtcbn07XG52YXIgc3BhY2luZ1N0eWxlID0ge1xuICBncmlkQXJlYTogJzEgLyAyJyxcbiAgZm9udDogJ2luaGVyaXQnLFxuICBtaW5XaWR0aDogJzJweCcsXG4gIGJvcmRlcjogMCxcbiAgbWFyZ2luOiAwLFxuICBvdXRsaW5lOiAwLFxuICBwYWRkaW5nOiAwXG59O1xudmFyIGNvbnRhaW5lclN0eWxlID0ge1xuICBmbGV4OiAnMSAxIGF1dG8nLFxuICBkaXNwbGF5OiAnaW5saW5lLWdyaWQnLFxuICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiAnMCBtaW4tY29udGVudCcsXG4gICcmOmFmdGVyJzogX29iamVjdFNwcmVhZCh7XG4gICAgY29udGVudDogJ2F0dHIoZGF0YS12YWx1ZSkgXCIgXCInLFxuICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgIHdoaXRlU3BhY2U6ICdwcmUnXG4gIH0sIHNwYWNpbmdTdHlsZSlcbn07XG52YXIgaW5wdXRTdHlsZSA9IGZ1bmN0aW9uIGlucHV0U3R5bGUoaXNIaWRkZW4pIHtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnaW5wdXQnLFxuICAgIGNvbG9yOiAnaW5oZXJpdCcsXG4gICAgYmFja2dyb3VuZDogMCxcbiAgICBvcGFjaXR5OiBpc0hpZGRlbiA/IDAgOiAxLFxuICAgIHdpZHRoOiAnMTAwJSdcbiAgfSwgc3BhY2luZ1N0eWxlKTtcbn07XG52YXIgSW5wdXQgPSBmdW5jdGlvbiBJbnB1dChwcm9wcykge1xuICB2YXIgY3ggPSBwcm9wcy5jeCxcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICB2YXIgX2NsZWFuQ29tbW9uUHJvcHMgPSBjbGVhbkNvbW1vblByb3BzKHByb3BzKSxcbiAgICBpbm5lclJlZiA9IF9jbGVhbkNvbW1vblByb3BzLmlubmVyUmVmLFxuICAgIGlzRGlzYWJsZWQgPSBfY2xlYW5Db21tb25Qcm9wcy5pc0Rpc2FibGVkLFxuICAgIGlzSGlkZGVuID0gX2NsZWFuQ29tbW9uUHJvcHMuaXNIaWRkZW4sXG4gICAgaW5wdXRDbGFzc05hbWUgPSBfY2xlYW5Db21tb25Qcm9wcy5pbnB1dENsYXNzTmFtZSxcbiAgICBpbm5lclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9jbGVhbkNvbW1vblByb3BzLCBfZXhjbHVkZWQpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnaW5wdXQnLCB7XG4gICAgJ2lucHV0LWNvbnRhaW5lcic6IHRydWVcbiAgfSksIHtcbiAgICBcImRhdGEtdmFsdWVcIjogdmFsdWUgfHwgJydcbiAgfSksIGpzeChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGN4KHtcbiAgICAgIGlucHV0OiB0cnVlXG4gICAgfSwgaW5wdXRDbGFzc05hbWUpLFxuICAgIHJlZjogaW5uZXJSZWYsXG4gICAgc3R5bGU6IGlucHV0U3R5bGUoaXNIaWRkZW4pLFxuICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkXG4gIH0sIGlubmVyUHJvcHMpKSk7XG59O1xudmFyIElucHV0JDEgPSBJbnB1dDtcblxudmFyIG11bHRpVmFsdWVDU1MgPSBmdW5jdGlvbiBtdWx0aVZhbHVlQ1NTKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdtdWx0aVZhbHVlJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgbWluV2lkdGg6IDBcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5uZXV0cmFsMTAsXG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMgLyAyLFxuICAgIG1hcmdpbjogc3BhY2luZy5iYXNlVW5pdCAvIDJcbiAgfSk7XG59O1xudmFyIG11bHRpVmFsdWVMYWJlbENTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVMYWJlbENTUyhfcmVmMiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYyJHRoZW1lID0gX3JlZjIudGhlbWUsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZjIkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIGNvbG9ycyA9IF9yZWYyJHRoZW1lLmNvbG9ycyxcbiAgICBjcm9wV2l0aEVsbGlwc2lzID0gX3JlZjIuY3JvcFdpdGhFbGxpcHNpcztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6IGNyb3BXaXRoRWxsaXBzaXMgfHwgY3JvcFdpdGhFbGxpcHNpcyA9PT0gdW5kZWZpbmVkID8gJ2VsbGlwc2lzJyA6IHVuZGVmaW5lZCxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzIC8gMixcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw4MCxcbiAgICBmb250U2l6ZTogJzg1JScsXG4gICAgcGFkZGluZzogMyxcbiAgICBwYWRkaW5nTGVmdDogNlxuICB9KTtcbn07XG52YXIgbXVsdGlWYWx1ZVJlbW92ZUNTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVSZW1vdmVDU1MoX3JlZjMsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmMyR0aGVtZSA9IF9yZWYzLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmMyR0aGVtZS5zcGFjaW5nLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYzJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBjb2xvcnMgPSBfcmVmMyR0aGVtZS5jb2xvcnMsXG4gICAgaXNGb2N1c2VkID0gX3JlZjMuaXNGb2N1c2VkO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMgLyAyLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLmRhbmdlckxpZ2h0IDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdMZWZ0OiBzcGFjaW5nLmJhc2VVbml0LFxuICAgIHBhZGRpbmdSaWdodDogc3BhY2luZy5iYXNlVW5pdCxcbiAgICAnOmhvdmVyJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMuZGFuZ2VyTGlnaHQsXG4gICAgICBjb2xvcjogY29sb3JzLmRhbmdlclxuICAgIH1cbiAgfSk7XG59O1xudmFyIE11bHRpVmFsdWVHZW5lcmljID0gZnVuY3Rpb24gTXVsdGlWYWx1ZUdlbmVyaWMoX3JlZjQpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY0LmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgaW5uZXJQcm9wcywgY2hpbGRyZW4pO1xufTtcbnZhciBNdWx0aVZhbHVlQ29udGFpbmVyID0gTXVsdGlWYWx1ZUdlbmVyaWM7XG52YXIgTXVsdGlWYWx1ZUxhYmVsID0gTXVsdGlWYWx1ZUdlbmVyaWM7XG5mdW5jdGlvbiBNdWx0aVZhbHVlUmVtb3ZlKF9yZWY1KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY1LmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBfcmVmNS5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcImJ1dHRvblwiXG4gIH0sIGlubmVyUHJvcHMpLCBjaGlsZHJlbiB8fCBqc3goQ3Jvc3NJY29uLCB7XG4gICAgc2l6ZTogMTRcbiAgfSkpO1xufVxudmFyIE11bHRpVmFsdWUgPSBmdW5jdGlvbiBNdWx0aVZhbHVlKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGNvbXBvbmVudHMgPSBwcm9wcy5jb21wb25lbnRzLFxuICAgIGRhdGEgPSBwcm9wcy5kYXRhLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIHJlbW92ZVByb3BzID0gcHJvcHMucmVtb3ZlUHJvcHMsXG4gICAgc2VsZWN0UHJvcHMgPSBwcm9wcy5zZWxlY3RQcm9wcztcbiAgdmFyIENvbnRhaW5lciA9IGNvbXBvbmVudHMuQ29udGFpbmVyLFxuICAgIExhYmVsID0gY29tcG9uZW50cy5MYWJlbCxcbiAgICBSZW1vdmUgPSBjb21wb25lbnRzLlJlbW92ZTtcbiAgcmV0dXJuIGpzeChDb250YWluZXIsIHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIGlubmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ211bHRpVmFsdWUnLCB7XG4gICAgICAnbXVsdGktdmFsdWUnOiB0cnVlLFxuICAgICAgJ211bHRpLXZhbHVlLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgICB9KSksIGlubmVyUHJvcHMpLFxuICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wc1xuICB9LCBqc3goTGFiZWwsIHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIGlubmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdtdWx0aVZhbHVlTGFiZWwnLCB7XG4gICAgICAnbXVsdGktdmFsdWVfX2xhYmVsJzogdHJ1ZVxuICAgIH0pKSxcbiAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHNcbiAgfSwgY2hpbGRyZW4pLCBqc3goUmVtb3ZlLCB7XG4gICAgZGF0YTogZGF0YSxcbiAgICBpbm5lclByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdtdWx0aVZhbHVlUmVtb3ZlJywge1xuICAgICAgJ211bHRpLXZhbHVlX19yZW1vdmUnOiB0cnVlXG4gICAgfSkpLCB7fSwge1xuICAgICAgJ2FyaWEtbGFiZWwnOiBcIlJlbW92ZSBcIi5jb25jYXQoY2hpbGRyZW4gfHwgJ29wdGlvbicpXG4gICAgfSwgcmVtb3ZlUHJvcHMpLFxuICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wc1xuICB9KSk7XG59O1xudmFyIE11bHRpVmFsdWUkMSA9IE11bHRpVmFsdWU7XG5cbnZhciBvcHRpb25DU1MgPSBmdW5jdGlvbiBvcHRpb25DU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdvcHRpb24nLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMCknXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1NlbGVjdGVkID8gY29sb3JzLnByaW1hcnkgOiBpc0ZvY3VzZWQgPyBjb2xvcnMucHJpbWFyeTI1IDogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMjAgOiBpc1NlbGVjdGVkID8gY29sb3JzLm5ldXRyYWwwIDogJ2luaGVyaXQnLFxuICAgIHBhZGRpbmc6IFwiXCIuY29uY2F0KHNwYWNpbmcuYmFzZVVuaXQgKiAyLCBcInB4IFwiKS5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAqIDMsIFwicHhcIiksXG4gICAgLy8gcHJvdmlkZSBzb21lIGFmZm9yZGFuY2Ugb24gdG91Y2ggZGV2aWNlc1xuICAgICc6YWN0aXZlJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAhaXNEaXNhYmxlZCA/IGlzU2VsZWN0ZWQgPyBjb2xvcnMucHJpbWFyeSA6IGNvbG9ycy5wcmltYXJ5NTAgOiB1bmRlZmluZWRcbiAgICB9XG4gIH0pO1xufTtcbnZhciBPcHRpb24gPSBmdW5jdGlvbiBPcHRpb24ocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgIGlzU2VsZWN0ZWQgPSBwcm9wcy5pc1NlbGVjdGVkLFxuICAgIGlubmVyUmVmID0gcHJvcHMuaW5uZXJSZWYsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdvcHRpb24nLCB7XG4gICAgb3B0aW9uOiB0cnVlLFxuICAgICdvcHRpb24tLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAnb3B0aW9uLS1pcy1mb2N1c2VkJzogaXNGb2N1c2VkLFxuICAgICdvcHRpb24tLWlzLXNlbGVjdGVkJzogaXNTZWxlY3RlZFxuICB9KSwge1xuICAgIHJlZjogaW5uZXJSZWYsXG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IGlzRGlzYWJsZWRcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgT3B0aW9uJDEgPSBPcHRpb247XG5cbnZhciBwbGFjZWhvbGRlckNTUyA9IGZ1bmN0aW9uIHBsYWNlaG9sZGVyQ1NTKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdwbGFjZWhvbGRlcicsXG4gICAgZ3JpZEFyZWE6ICcxIC8gMSAvIDIgLyAzJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDUwLFxuICAgIG1hcmdpbkxlZnQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIG1hcmdpblJpZ2h0OiBzcGFjaW5nLmJhc2VVbml0IC8gMlxuICB9KTtcbn07XG52YXIgUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiBQbGFjZWhvbGRlcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ3BsYWNlaG9sZGVyJywge1xuICAgIHBsYWNlaG9sZGVyOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcbnZhciBQbGFjZWhvbGRlciQxID0gUGxhY2Vob2xkZXI7XG5cbnZhciBjc3MgPSBmdW5jdGlvbiBjc3MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnc2luZ2xlVmFsdWUnLFxuICAgIGdyaWRBcmVhOiAnMSAvIDEgLyAyIC8gMycsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDQwIDogY29sb3JzLm5ldXRyYWw4MCxcbiAgICBtYXJnaW5MZWZ0OiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBtYXJnaW5SaWdodDogc3BhY2luZy5iYXNlVW5pdCAvIDJcbiAgfSk7XG59O1xudmFyIFNpbmdsZVZhbHVlID0gZnVuY3Rpb24gU2luZ2xlVmFsdWUocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdzaW5nbGVWYWx1ZScsIHtcbiAgICAnc2luZ2xlLXZhbHVlJzogdHJ1ZSxcbiAgICAnc2luZ2xlLXZhbHVlLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xudmFyIFNpbmdsZVZhbHVlJDEgPSBTaW5nbGVWYWx1ZTtcblxudmFyIGNvbXBvbmVudHMgPSB7XG4gIENsZWFySW5kaWNhdG9yOiBDbGVhckluZGljYXRvcixcbiAgQ29udHJvbDogQ29udHJvbCQxLFxuICBEcm9wZG93bkluZGljYXRvcjogRHJvcGRvd25JbmRpY2F0b3IsXG4gIERvd25DaGV2cm9uOiBEb3duQ2hldnJvbixcbiAgQ3Jvc3NJY29uOiBDcm9zc0ljb24sXG4gIEdyb3VwOiBHcm91cCQxLFxuICBHcm91cEhlYWRpbmc6IEdyb3VwSGVhZGluZyxcbiAgSW5kaWNhdG9yc0NvbnRhaW5lcjogSW5kaWNhdG9yc0NvbnRhaW5lcixcbiAgSW5kaWNhdG9yU2VwYXJhdG9yOiBJbmRpY2F0b3JTZXBhcmF0b3IsXG4gIElucHV0OiBJbnB1dCQxLFxuICBMb2FkaW5nSW5kaWNhdG9yOiBMb2FkaW5nSW5kaWNhdG9yLFxuICBNZW51OiBNZW51JDEsXG4gIE1lbnVMaXN0OiBNZW51TGlzdCxcbiAgTWVudVBvcnRhbDogTWVudVBvcnRhbCxcbiAgTG9hZGluZ01lc3NhZ2U6IExvYWRpbmdNZXNzYWdlLFxuICBOb09wdGlvbnNNZXNzYWdlOiBOb09wdGlvbnNNZXNzYWdlLFxuICBNdWx0aVZhbHVlOiBNdWx0aVZhbHVlJDEsXG4gIE11bHRpVmFsdWVDb250YWluZXI6IE11bHRpVmFsdWVDb250YWluZXIsXG4gIE11bHRpVmFsdWVMYWJlbDogTXVsdGlWYWx1ZUxhYmVsLFxuICBNdWx0aVZhbHVlUmVtb3ZlOiBNdWx0aVZhbHVlUmVtb3ZlLFxuICBPcHRpb246IE9wdGlvbiQxLFxuICBQbGFjZWhvbGRlcjogUGxhY2Vob2xkZXIkMSxcbiAgU2VsZWN0Q29udGFpbmVyOiBTZWxlY3RDb250YWluZXIsXG4gIFNpbmdsZVZhbHVlOiBTaW5nbGVWYWx1ZSQxLFxuICBWYWx1ZUNvbnRhaW5lcjogVmFsdWVDb250YWluZXJcbn07XG52YXIgZGVmYXVsdENvbXBvbmVudHMgPSBmdW5jdGlvbiBkZWZhdWx0Q29tcG9uZW50cyhwcm9wcykge1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb21wb25lbnRzKSwgcHJvcHMuY29tcG9uZW50cyk7XG59O1xuXG5leHBvcnQgeyBpc01vYmlsZURldmljZSBhcyBBLCBtdWx0aVZhbHVlQXNWYWx1ZSBhcyBCLCBzaW5nbGVWYWx1ZUFzVmFsdWUgYXMgQywgdmFsdWVUZXJuYXJ5IGFzIEQsIGNsYXNzTmFtZXMgYXMgRSwgZGVmYXVsdENvbXBvbmVudHMgYXMgRiwgaXNEb2N1bWVudEVsZW1lbnQgYXMgRywgY2xlYW5WYWx1ZSBhcyBILCBzY3JvbGxJbnRvVmlldyBhcyBJLCBub29wIGFzIEosIG5vdE51bGxpc2ggYXMgSywgaGFuZGxlSW5wdXRDaGFuZ2UgYXMgTCwgTWVudVBsYWNlciBhcyBNLCBjbGVhckluZGljYXRvckNTUyBhcyBhLCBjb250YWluZXJDU1MgYXMgYiwgY29tcG9uZW50cyBhcyBjLCBjc3MkMSBhcyBkLCBkcm9wZG93bkluZGljYXRvckNTUyBhcyBlLCBncm91cEhlYWRpbmdDU1MgYXMgZiwgZ3JvdXBDU1MgYXMgZywgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTIGFzIGgsIGluZGljYXRvcnNDb250YWluZXJDU1MgYXMgaSwgaW5wdXRDU1MgYXMgaiwgbG9hZGluZ01lc3NhZ2VDU1MgYXMgaywgbG9hZGluZ0luZGljYXRvckNTUyBhcyBsLCBtZW51Q1NTIGFzIG0sIG1lbnVMaXN0Q1NTIGFzIG4sIG1lbnVQb3J0YWxDU1MgYXMgbywgbXVsdGlWYWx1ZUNTUyBhcyBwLCBtdWx0aVZhbHVlTGFiZWxDU1MgYXMgcSwgcmVtb3ZlUHJvcHMgYXMgciwgc3VwcG9ydHNQYXNzaXZlRXZlbnRzIGFzIHMsIG11bHRpVmFsdWVSZW1vdmVDU1MgYXMgdCwgbm9PcHRpb25zTWVzc2FnZUNTUyBhcyB1LCBvcHRpb25DU1MgYXMgdiwgcGxhY2Vob2xkZXJDU1MgYXMgdywgY3NzIGFzIHgsIHZhbHVlQ29udGFpbmVyQ1NTIGFzIHksIGlzVG91Y2hDYXBhYmxlIGFzIHogfTtcbiIsICJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBjYWNoZSA9IG51bGw7XG4gICAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgICAgIHZhciBuZXdBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBuZXdBcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhY2hlICYmIGNhY2hlLmxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgY2FjaGUubGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUubGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWNoZSA9IHtcbiAgICAgICAgICAgIGxhc3RSZXN1bHQ6IGxhc3RSZXN1bHQsXG4gICAgICAgICAgICBsYXN0QXJnczogbmV3QXJncyxcbiAgICAgICAgICAgIGxhc3RUaGlzOiB0aGlzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG4gICAgbWVtb2l6ZWQuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgY2FjaGUgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5leHBvcnQgeyBtZW1vaXplT25lIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfY3JlYXRlU3VwZXIgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXInO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNZW1vLCBGcmFnbWVudCwgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByIGFzIHJlbW92ZVByb3BzLCBzIGFzIHN1cHBvcnRzUGFzc2l2ZUV2ZW50cywgYSBhcyBjbGVhckluZGljYXRvckNTUywgYiBhcyBjb250YWluZXJDU1MsIGQgYXMgY3NzJDEsIGUgYXMgZHJvcGRvd25JbmRpY2F0b3JDU1MsIGcgYXMgZ3JvdXBDU1MsIGYgYXMgZ3JvdXBIZWFkaW5nQ1NTLCBpIGFzIGluZGljYXRvcnNDb250YWluZXJDU1MsIGggYXMgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTLCBqIGFzIGlucHV0Q1NTLCBsIGFzIGxvYWRpbmdJbmRpY2F0b3JDU1MsIGsgYXMgbG9hZGluZ01lc3NhZ2VDU1MsIG0gYXMgbWVudUNTUywgbiBhcyBtZW51TGlzdENTUywgbyBhcyBtZW51UG9ydGFsQ1NTLCBwIGFzIG11bHRpVmFsdWVDU1MsIHEgYXMgbXVsdGlWYWx1ZUxhYmVsQ1NTLCB0IGFzIG11bHRpVmFsdWVSZW1vdmVDU1MsIHUgYXMgbm9PcHRpb25zTWVzc2FnZUNTUywgdiBhcyBvcHRpb25DU1MsIHcgYXMgcGxhY2Vob2xkZXJDU1MsIHggYXMgY3NzJDIsIHkgYXMgdmFsdWVDb250YWluZXJDU1MsIHogYXMgaXNUb3VjaENhcGFibGUsIEEgYXMgaXNNb2JpbGVEZXZpY2UsIEIgYXMgbXVsdGlWYWx1ZUFzVmFsdWUsIEMgYXMgc2luZ2xlVmFsdWVBc1ZhbHVlLCBEIGFzIHZhbHVlVGVybmFyeSwgRSBhcyBjbGFzc05hbWVzLCBGIGFzIGRlZmF1bHRDb21wb25lbnRzLCBHIGFzIGlzRG9jdW1lbnRFbGVtZW50LCBIIGFzIGNsZWFuVmFsdWUsIEkgYXMgc2Nyb2xsSW50b1ZpZXcsIEogYXMgbm9vcCwgTSBhcyBNZW51UGxhY2VyLCBLIGFzIG5vdE51bGxpc2ggfSBmcm9tICcuL2luZGV4LWEzMDFmNTI2LmVzbS5qcyc7XG5pbXBvcnQgeyBqc3gsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQyKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLy8gQXNzaXN0aXZlIHRleHQgdG8gZGVzY3JpYmUgdmlzdWFsIGVsZW1lbnRzLiBIaWRkZW4gZm9yIHNpZ2h0ZWQgdXNlcnMuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI3cGcwY2otYTExeVRleHRcIixcbiAgc3R5bGVzOiBcImxhYmVsOmExMXlUZXh0O3otaW5kZXg6OTk5OTtib3JkZXI6MDtjbGlwOnJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtoZWlnaHQ6MXB4O3dpZHRoOjFweDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3doaXRlLXNwYWNlOm5vd3JhcFwiXG59IDoge1xuICBuYW1lOiBcIjFmNDNhdnotYTExeVRleHQtQTExeVRleHRcIixcbiAgc3R5bGVzOiBcImxhYmVsOmExMXlUZXh0O3otaW5kZXg6OTk5OTtib3JkZXI6MDtjbGlwOnJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtoZWlnaHQ6MXB4O3dpZHRoOjFweDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3doaXRlLXNwYWNlOm5vd3JhcDtsYWJlbDpBMTF5VGV4dDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrRXhNWGxVWlhoMExuUnplQ0pkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZOU1NJc0ltWnBiR1VpT2lKQk1URjVWR1Y0ZEM1MGMzZ2lMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lvZ1FHcHplQ0JxYzNnZ0tpOWNibWx0Y0c5eWRDQjdJR3B6ZUNCOUlHWnliMjBnSjBCbGJXOTBhVzl1TDNKbFlXTjBKenRjYmx4dUx5OGdRWE56YVhOMGFYWmxJSFJsZUhRZ2RHOGdaR1Z6WTNKcFltVWdkbWx6ZFdGc0lHVnNaVzFsYm5SekxpQklhV1JrWlc0Z1ptOXlJSE5wWjJoMFpXUWdkWE5sY25NdVhHNWpiMjV6ZENCQk1URjVWR1Y0ZENBOUlDaHdjbTl3Y3pvZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWR6Y0dGdUoxMHBJRDArSUNoY2JpQWdQSE53WVc1Y2JpQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lHeGhZbVZzT2lBbllURXhlVlJsZUhRbkxGeHVJQ0FnSUNBZ2VrbHVaR1Y0T2lBNU9UazVMRnh1SUNBZ0lDQWdZbTl5WkdWeU9pQXdMRnh1SUNBZ0lDQWdZMnhwY0RvZ0ozSmxZM1FvTVhCNExDQXhjSGdzSURGd2VDd2dNWEI0S1Njc1hHNGdJQ0FnSUNCb1pXbG5hSFE2SURFc1hHNGdJQ0FnSUNCM2FXUjBhRG9nTVN4Y2JpQWdJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUNBZ2IzWmxjbVpzYjNjNklDZG9hV1JrWlc0bkxGeHVJQ0FnSUNBZ2NHRmtaR2x1WnpvZ01DeGNiaUFnSUNBZ0lIZG9hWFJsVTNCaFkyVTZJQ2R1YjNkeVlYQW5MRnh1SUNBZ0lIMTlYRzRnSUNBZ2V5NHVMbkJ5YjNCemZWeHVJQ0F2UGx4dUtUdGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdRVEV4ZVZSbGVIUTdYRzRpWFgwPSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMlxufTtcbnZhciBBMTF5VGV4dCA9IGZ1bmN0aW9uIEExMXlUZXh0KHByb3BzKSB7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IF9yZWZcbiAgfSwgcHJvcHMpKTtcbn07XG52YXIgQTExeVRleHQkMSA9IEExMXlUZXh0O1xuXG52YXIgZGVmYXVsdEFyaWFMaXZlTWVzc2FnZXMgPSB7XG4gIGd1aWRhbmNlOiBmdW5jdGlvbiBndWlkYW5jZShwcm9wcykge1xuICAgIHZhciBpc1NlYXJjaGFibGUgPSBwcm9wcy5pc1NlYXJjaGFibGUsXG4gICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICAgIHRhYlNlbGVjdHNWYWx1ZSA9IHByb3BzLnRhYlNlbGVjdHNWYWx1ZSxcbiAgICAgIGNvbnRleHQgPSBwcm9wcy5jb250ZXh0LFxuICAgICAgaXNJbml0aWFsRm9jdXMgPSBwcm9wcy5pc0luaXRpYWxGb2N1cztcbiAgICBzd2l0Y2ggKGNvbnRleHQpIHtcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgICByZXR1cm4gXCJVc2UgVXAgYW5kIERvd24gdG8gY2hvb3NlIG9wdGlvbnMsIHByZXNzIEVudGVyIHRvIHNlbGVjdCB0aGUgY3VycmVudGx5IGZvY3VzZWQgb3B0aW9uLCBwcmVzcyBFc2NhcGUgdG8gZXhpdCB0aGUgbWVudVwiLmNvbmNhdCh0YWJTZWxlY3RzVmFsdWUgPyAnLCBwcmVzcyBUYWIgdG8gc2VsZWN0IHRoZSBvcHRpb24gYW5kIGV4aXQgdGhlIG1lbnUnIDogJycsIFwiLlwiKTtcbiAgICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgICAgcmV0dXJuIGlzSW5pdGlhbEZvY3VzID8gXCJcIi5jb25jYXQocHJvcHNbJ2FyaWEtbGFiZWwnXSB8fCAnU2VsZWN0JywgXCIgaXMgZm9jdXNlZCBcIikuY29uY2F0KGlzU2VhcmNoYWJsZSA/ICcsdHlwZSB0byByZWZpbmUgbGlzdCcgOiAnJywgXCIsIHByZXNzIERvd24gdG8gb3BlbiB0aGUgbWVudSwgXCIpLmNvbmNhdChpc011bHRpID8gJyBwcmVzcyBsZWZ0IHRvIGZvY3VzIHNlbGVjdGVkIHZhbHVlcycgOiAnJykgOiAnJztcbiAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuICdVc2UgbGVmdCBhbmQgcmlnaHQgdG8gdG9nZ2xlIGJldHdlZW4gZm9jdXNlZCB2YWx1ZXMsIHByZXNzIEJhY2tzcGFjZSB0byByZW1vdmUgdGhlIGN1cnJlbnRseSBmb2N1c2VkIHZhbHVlJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0sXG4gIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcm9wcykge1xuICAgIHZhciBhY3Rpb24gPSBwcm9wcy5hY3Rpb24sXG4gICAgICBfcHJvcHMkbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgIGxhYmVsID0gX3Byb3BzJGxhYmVsID09PSB2b2lkIDAgPyAnJyA6IF9wcm9wcyRsYWJlbCxcbiAgICAgIGxhYmVscyA9IHByb3BzLmxhYmVscyxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkO1xuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdkZXNlbGVjdC1vcHRpb24nOlxuICAgICAgY2FzZSAncG9wLXZhbHVlJzpcbiAgICAgIGNhc2UgJ3JlbW92ZS12YWx1ZSc6XG4gICAgICAgIHJldHVybiBcIm9wdGlvbiBcIi5jb25jYXQobGFiZWwsIFwiLCBkZXNlbGVjdGVkLlwiKTtcbiAgICAgIGNhc2UgJ2NsZWFyJzpcbiAgICAgICAgcmV0dXJuICdBbGwgc2VsZWN0ZWQgb3B0aW9ucyBoYXZlIGJlZW4gY2xlYXJlZC4nO1xuICAgICAgY2FzZSAnaW5pdGlhbC1pbnB1dC1mb2N1cyc6XG4gICAgICAgIHJldHVybiBcIm9wdGlvblwiLmNvbmNhdChsYWJlbHMubGVuZ3RoID4gMSA/ICdzJyA6ICcnLCBcIiBcIikuY29uY2F0KGxhYmVscy5qb2luKCcsJyksIFwiLCBzZWxlY3RlZC5cIik7XG4gICAgICBjYXNlICdzZWxlY3Qtb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIGlzRGlzYWJsZWQgPyBcIm9wdGlvbiBcIi5jb25jYXQobGFiZWwsIFwiIGlzIGRpc2FibGVkLiBTZWxlY3QgYW5vdGhlciBvcHRpb24uXCIpIDogXCJvcHRpb24gXCIuY29uY2F0KGxhYmVsLCBcIiwgc2VsZWN0ZWQuXCIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSxcbiAgb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cyhwcm9wcykge1xuICAgIHZhciBjb250ZXh0ID0gcHJvcHMuY29udGV4dCxcbiAgICAgIGZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkLFxuICAgICAgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG4gICAgICBfcHJvcHMkbGFiZWwyID0gcHJvcHMubGFiZWwsXG4gICAgICBsYWJlbCA9IF9wcm9wcyRsYWJlbDIgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGxhYmVsMixcbiAgICAgIHNlbGVjdFZhbHVlID0gcHJvcHMuc2VsZWN0VmFsdWUsXG4gICAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgIGlzU2VsZWN0ZWQgPSBwcm9wcy5pc1NlbGVjdGVkLFxuICAgICAgaXNBcHBsZURldmljZSA9IHByb3BzLmlzQXBwbGVEZXZpY2U7XG4gICAgdmFyIGdldEFycmF5SW5kZXggPSBmdW5jdGlvbiBnZXRBcnJheUluZGV4KGFyciwgaXRlbSkge1xuICAgICAgcmV0dXJuIGFyciAmJiBhcnIubGVuZ3RoID8gXCJcIi5jb25jYXQoYXJyLmluZGV4T2YoaXRlbSkgKyAxLCBcIiBvZiBcIikuY29uY2F0KGFyci5sZW5ndGgpIDogJyc7XG4gICAgfTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ3ZhbHVlJyAmJiBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIFwidmFsdWUgXCIuY29uY2F0KGxhYmVsLCBcIiBmb2N1c2VkLCBcIikuY29uY2F0KGdldEFycmF5SW5kZXgoc2VsZWN0VmFsdWUsIGZvY3VzZWQpLCBcIi5cIik7XG4gICAgfVxuICAgIGlmIChjb250ZXh0ID09PSAnbWVudScgJiYgaXNBcHBsZURldmljZSkge1xuICAgICAgdmFyIGRpc2FibGVkID0gaXNEaXNhYmxlZCA/ICcgZGlzYWJsZWQnIDogJyc7XG4gICAgICB2YXIgc3RhdHVzID0gXCJcIi5jb25jYXQoaXNTZWxlY3RlZCA/ICcgc2VsZWN0ZWQnIDogJycpLmNvbmNhdChkaXNhYmxlZCk7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQobGFiZWwpLmNvbmNhdChzdGF0dXMsIFwiLCBcIikuY29uY2F0KGdldEFycmF5SW5kZXgob3B0aW9ucywgZm9jdXNlZCksIFwiLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9LFxuICBvbkZpbHRlcjogZnVuY3Rpb24gb25GaWx0ZXIocHJvcHMpIHtcbiAgICB2YXIgaW5wdXRWYWx1ZSA9IHByb3BzLmlucHV0VmFsdWUsXG4gICAgICByZXN1bHRzTWVzc2FnZSA9IHByb3BzLnJlc3VsdHNNZXNzYWdlO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChyZXN1bHRzTWVzc2FnZSkuY29uY2F0KGlucHV0VmFsdWUgPyAnIGZvciBzZWFyY2ggdGVybSAnICsgaW5wdXRWYWx1ZSA6ICcnLCBcIi5cIik7XG4gIH1cbn07XG5cbnZhciBMaXZlUmVnaW9uID0gZnVuY3Rpb24gTGl2ZVJlZ2lvbihwcm9wcykge1xuICB2YXIgYXJpYVNlbGVjdGlvbiA9IHByb3BzLmFyaWFTZWxlY3Rpb24sXG4gICAgZm9jdXNlZE9wdGlvbiA9IHByb3BzLmZvY3VzZWRPcHRpb24sXG4gICAgZm9jdXNlZFZhbHVlID0gcHJvcHMuZm9jdXNlZFZhbHVlLFxuICAgIGZvY3VzYWJsZU9wdGlvbnMgPSBwcm9wcy5mb2N1c2FibGVPcHRpb25zLFxuICAgIGlzRm9jdXNlZCA9IHByb3BzLmlzRm9jdXNlZCxcbiAgICBzZWxlY3RWYWx1ZSA9IHByb3BzLnNlbGVjdFZhbHVlLFxuICAgIHNlbGVjdFByb3BzID0gcHJvcHMuc2VsZWN0UHJvcHMsXG4gICAgaWQgPSBwcm9wcy5pZCxcbiAgICBpc0FwcGxlRGV2aWNlID0gcHJvcHMuaXNBcHBsZURldmljZTtcbiAgdmFyIGFyaWFMaXZlTWVzc2FnZXMgPSBzZWxlY3RQcm9wcy5hcmlhTGl2ZU1lc3NhZ2VzLFxuICAgIGdldE9wdGlvbkxhYmVsID0gc2VsZWN0UHJvcHMuZ2V0T3B0aW9uTGFiZWwsXG4gICAgaW5wdXRWYWx1ZSA9IHNlbGVjdFByb3BzLmlucHV0VmFsdWUsXG4gICAgaXNNdWx0aSA9IHNlbGVjdFByb3BzLmlzTXVsdGksXG4gICAgaXNPcHRpb25EaXNhYmxlZCA9IHNlbGVjdFByb3BzLmlzT3B0aW9uRGlzYWJsZWQsXG4gICAgaXNTZWFyY2hhYmxlID0gc2VsZWN0UHJvcHMuaXNTZWFyY2hhYmxlLFxuICAgIG1lbnVJc09wZW4gPSBzZWxlY3RQcm9wcy5tZW51SXNPcGVuLFxuICAgIG9wdGlvbnMgPSBzZWxlY3RQcm9wcy5vcHRpb25zLFxuICAgIHNjcmVlblJlYWRlclN0YXR1cyA9IHNlbGVjdFByb3BzLnNjcmVlblJlYWRlclN0YXR1cyxcbiAgICB0YWJTZWxlY3RzVmFsdWUgPSBzZWxlY3RQcm9wcy50YWJTZWxlY3RzVmFsdWUsXG4gICAgaXNMb2FkaW5nID0gc2VsZWN0UHJvcHMuaXNMb2FkaW5nO1xuICB2YXIgYXJpYUxhYmVsID0gc2VsZWN0UHJvcHNbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIGFyaWFMaXZlID0gc2VsZWN0UHJvcHNbJ2FyaWEtbGl2ZSddO1xuXG4gIC8vIFVwZGF0ZSBhcmlhIGxpdmUgbWVzc2FnZSBjb25maWd1cmF0aW9uIHdoZW4gcHJvcCBjaGFuZ2VzXG4gIHZhciBtZXNzYWdlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRlZmF1bHRBcmlhTGl2ZU1lc3NhZ2VzKSwgYXJpYUxpdmVNZXNzYWdlcyB8fCB7fSk7XG4gIH0sIFthcmlhTGl2ZU1lc3NhZ2VzXSk7XG5cbiAgLy8gVXBkYXRlIGFyaWEgbGl2ZSBzZWxlY3RlZCBvcHRpb24gd2hlbiBwcm9wIGNoYW5nZXNcbiAgdmFyIGFyaWFTZWxlY3RlZCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBtZXNzYWdlID0gJyc7XG4gICAgaWYgKGFyaWFTZWxlY3Rpb24gJiYgbWVzc2FnZXMub25DaGFuZ2UpIHtcbiAgICAgIHZhciBvcHRpb24gPSBhcmlhU2VsZWN0aW9uLm9wdGlvbixcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gYXJpYVNlbGVjdGlvbi5vcHRpb25zLFxuICAgICAgICByZW1vdmVkVmFsdWUgPSBhcmlhU2VsZWN0aW9uLnJlbW92ZWRWYWx1ZSxcbiAgICAgICAgcmVtb3ZlZFZhbHVlcyA9IGFyaWFTZWxlY3Rpb24ucmVtb3ZlZFZhbHVlcyxcbiAgICAgICAgdmFsdWUgPSBhcmlhU2VsZWN0aW9uLnZhbHVlO1xuICAgICAgLy8gc2VsZWN0LW9wdGlvbiB3aGVuICFpc011bHRpIGRvZXMgbm90IHJldHVybiBvcHRpb24gc28gd2UgYXNzdW1lIHNlbGVjdGVkIG9wdGlvbiBpcyB2YWx1ZVxuICAgICAgdmFyIGFzT3B0aW9uID0gZnVuY3Rpb24gYXNPcHRpb24odmFsKSB7XG4gICAgICAgIHJldHVybiAhQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIGl0ZW0gZnJvbSB0aGUgYWN0aW9uIHRoZW4gZ2V0IGl0cyBsYWJlbFxuICAgICAgdmFyIHNlbGVjdGVkID0gcmVtb3ZlZFZhbHVlIHx8IG9wdGlvbiB8fCBhc09wdGlvbih2YWx1ZSk7XG4gICAgICB2YXIgbGFiZWwgPSBzZWxlY3RlZCA/IGdldE9wdGlvbkxhYmVsKHNlbGVjdGVkKSA6ICcnO1xuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgaXRlbXMgZnJvbSB0aGUgYWN0aW9uIHRoZW4gcmV0dXJuIGFuIGFycmF5IG9mIGxhYmVsc1xuICAgICAgdmFyIG11bHRpU2VsZWN0ZWQgPSBzZWxlY3RlZE9wdGlvbnMgfHwgcmVtb3ZlZFZhbHVlcyB8fCB1bmRlZmluZWQ7XG4gICAgICB2YXIgbGFiZWxzID0gbXVsdGlTZWxlY3RlZCA/IG11bHRpU2VsZWN0ZWQubWFwKGdldE9wdGlvbkxhYmVsKSA6IFtdO1xuICAgICAgdmFyIG9uQ2hhbmdlUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgLy8gbXVsdGlTZWxlY3RlZCBpdGVtcyBhcmUgdXN1YWxseSBpdGVtcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNlbGVjdGVkXG4gICAgICAgIC8vIG9yIHNldCBieSB0aGUgdXNlciBhcyBhIGRlZmF1bHQgdmFsdWUgc28gd2UgYXNzdW1lIHRoZXkgYXJlIG5vdCBkaXNhYmxlZFxuICAgICAgICBpc0Rpc2FibGVkOiBzZWxlY3RlZCAmJiBpc09wdGlvbkRpc2FibGVkKHNlbGVjdGVkLCBzZWxlY3RWYWx1ZSksXG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgbGFiZWxzOiBsYWJlbHNcbiAgICAgIH0sIGFyaWFTZWxlY3Rpb24pO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzLm9uQ2hhbmdlKG9uQ2hhbmdlUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSwgW2FyaWFTZWxlY3Rpb24sIG1lc3NhZ2VzLCBpc09wdGlvbkRpc2FibGVkLCBzZWxlY3RWYWx1ZSwgZ2V0T3B0aW9uTGFiZWxdKTtcbiAgdmFyIGFyaWFGb2N1c2VkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGZvY3VzTXNnID0gJyc7XG4gICAgdmFyIGZvY3VzZWQgPSBmb2N1c2VkT3B0aW9uIHx8IGZvY3VzZWRWYWx1ZTtcbiAgICB2YXIgaXNTZWxlY3RlZCA9ICEhKGZvY3VzZWRPcHRpb24gJiYgc2VsZWN0VmFsdWUgJiYgc2VsZWN0VmFsdWUuaW5jbHVkZXMoZm9jdXNlZE9wdGlvbikpO1xuICAgIGlmIChmb2N1c2VkICYmIG1lc3NhZ2VzLm9uRm9jdXMpIHtcbiAgICAgIHZhciBvbkZvY3VzUHJvcHMgPSB7XG4gICAgICAgIGZvY3VzZWQ6IGZvY3VzZWQsXG4gICAgICAgIGxhYmVsOiBnZXRPcHRpb25MYWJlbChmb2N1c2VkKSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNPcHRpb25EaXNhYmxlZChmb2N1c2VkLCBzZWxlY3RWYWx1ZSksXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgIG9wdGlvbnM6IGZvY3VzYWJsZU9wdGlvbnMsXG4gICAgICAgIGNvbnRleHQ6IGZvY3VzZWQgPT09IGZvY3VzZWRPcHRpb24gPyAnbWVudScgOiAndmFsdWUnLFxuICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgIGlzQXBwbGVEZXZpY2U6IGlzQXBwbGVEZXZpY2VcbiAgICAgIH07XG4gICAgICBmb2N1c01zZyA9IG1lc3NhZ2VzLm9uRm9jdXMob25Gb2N1c1Byb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvY3VzTXNnO1xuICB9LCBbZm9jdXNlZE9wdGlvbiwgZm9jdXNlZFZhbHVlLCBnZXRPcHRpb25MYWJlbCwgaXNPcHRpb25EaXNhYmxlZCwgbWVzc2FnZXMsIGZvY3VzYWJsZU9wdGlvbnMsIHNlbGVjdFZhbHVlLCBpc0FwcGxlRGV2aWNlXSk7XG4gIHZhciBhcmlhUmVzdWx0cyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHRzTXNnID0gJyc7XG4gICAgaWYgKG1lbnVJc09wZW4gJiYgb3B0aW9ucy5sZW5ndGggJiYgIWlzTG9hZGluZyAmJiBtZXNzYWdlcy5vbkZpbHRlcikge1xuICAgICAgdmFyIHJlc3VsdHNNZXNzYWdlID0gc2NyZWVuUmVhZGVyU3RhdHVzKHtcbiAgICAgICAgY291bnQ6IGZvY3VzYWJsZU9wdGlvbnMubGVuZ3RoXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdHNNc2cgPSBtZXNzYWdlcy5vbkZpbHRlcih7XG4gICAgICAgIGlucHV0VmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICAgIHJlc3VsdHNNZXNzYWdlOiByZXN1bHRzTWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzTXNnO1xuICB9LCBbZm9jdXNhYmxlT3B0aW9ucywgaW5wdXRWYWx1ZSwgbWVudUlzT3BlbiwgbWVzc2FnZXMsIG9wdGlvbnMsIHNjcmVlblJlYWRlclN0YXR1cywgaXNMb2FkaW5nXSk7XG4gIHZhciBpc0luaXRpYWxGb2N1cyA9IChhcmlhU2VsZWN0aW9uID09PSBudWxsIHx8IGFyaWFTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyaWFTZWxlY3Rpb24uYWN0aW9uKSA9PT0gJ2luaXRpYWwtaW5wdXQtZm9jdXMnO1xuICB2YXIgYXJpYUd1aWRhbmNlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGd1aWRhbmNlTXNnID0gJyc7XG4gICAgaWYgKG1lc3NhZ2VzLmd1aWRhbmNlKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGZvY3VzZWRWYWx1ZSA/ICd2YWx1ZScgOiBtZW51SXNPcGVuID8gJ21lbnUnIDogJ2lucHV0JztcbiAgICAgIGd1aWRhbmNlTXNnID0gbWVzc2FnZXMuZ3VpZGFuY2Uoe1xuICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgaXNEaXNhYmxlZDogZm9jdXNlZE9wdGlvbiAmJiBpc09wdGlvbkRpc2FibGVkKGZvY3VzZWRPcHRpb24sIHNlbGVjdFZhbHVlKSxcbiAgICAgICAgaXNNdWx0aTogaXNNdWx0aSxcbiAgICAgICAgaXNTZWFyY2hhYmxlOiBpc1NlYXJjaGFibGUsXG4gICAgICAgIHRhYlNlbGVjdHNWYWx1ZTogdGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgICBpc0luaXRpYWxGb2N1czogaXNJbml0aWFsRm9jdXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZ3VpZGFuY2VNc2c7XG4gIH0sIFthcmlhTGFiZWwsIGZvY3VzZWRPcHRpb24sIGZvY3VzZWRWYWx1ZSwgaXNNdWx0aSwgaXNPcHRpb25EaXNhYmxlZCwgaXNTZWFyY2hhYmxlLCBtZW51SXNPcGVuLCBtZXNzYWdlcywgc2VsZWN0VmFsdWUsIHRhYlNlbGVjdHNWYWx1ZSwgaXNJbml0aWFsRm9jdXNdKTtcbiAgdmFyIFNjcmVlblJlYWRlclRleHQgPSBqc3goRnJhZ21lbnQsIG51bGwsIGpzeChcInNwYW5cIiwge1xuICAgIGlkOiBcImFyaWEtc2VsZWN0aW9uXCJcbiAgfSwgYXJpYVNlbGVjdGVkKSwganN4KFwic3BhblwiLCB7XG4gICAgaWQ6IFwiYXJpYS1mb2N1c2VkXCJcbiAgfSwgYXJpYUZvY3VzZWQpLCBqc3goXCJzcGFuXCIsIHtcbiAgICBpZDogXCJhcmlhLXJlc3VsdHNcIlxuICB9LCBhcmlhUmVzdWx0cyksIGpzeChcInNwYW5cIiwge1xuICAgIGlkOiBcImFyaWEtZ3VpZGFuY2VcIlxuICB9LCBhcmlhR3VpZGFuY2UpKTtcbiAgcmV0dXJuIGpzeChGcmFnbWVudCwgbnVsbCwganN4KEExMXlUZXh0JDEsIHtcbiAgICBpZDogaWRcbiAgfSwgaXNJbml0aWFsRm9jdXMgJiYgU2NyZWVuUmVhZGVyVGV4dCksIGpzeChBMTF5VGV4dCQxLCB7XG4gICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmUsXG4gICAgXCJhcmlhLWF0b21pY1wiOiBcImZhbHNlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcImxvZ1wiXG4gIH0sIGlzRm9jdXNlZCAmJiAhaXNJbml0aWFsRm9jdXMgJiYgU2NyZWVuUmVhZGVyVGV4dCkpO1xufTtcbnZhciBMaXZlUmVnaW9uJDEgPSBMaXZlUmVnaW9uO1xuXG52YXIgZGlhY3JpdGljcyA9IFt7XG4gIGJhc2U6ICdBJyxcbiAgbGV0dGVyczogXCJBXFx1MjRCNlxcdUZGMjFcXHhDMFxceEMxXFx4QzJcXHUxRUE2XFx1MUVBNFxcdTFFQUFcXHUxRUE4XFx4QzNcXHUwMTAwXFx1MDEwMlxcdTFFQjBcXHUxRUFFXFx1MUVCNFxcdTFFQjJcXHUwMjI2XFx1MDFFMFxceEM0XFx1MDFERVxcdTFFQTJcXHhDNVxcdTAxRkFcXHUwMUNEXFx1MDIwMFxcdTAyMDJcXHUxRUEwXFx1MUVBQ1xcdTFFQjZcXHUxRTAwXFx1MDEwNFxcdTAyM0FcXHUyQzZGXCJcbn0sIHtcbiAgYmFzZTogJ0FBJyxcbiAgbGV0dGVyczogXCJcXHVBNzMyXCJcbn0sIHtcbiAgYmFzZTogJ0FFJyxcbiAgbGV0dGVyczogXCJcXHhDNlxcdTAxRkNcXHUwMUUyXCJcbn0sIHtcbiAgYmFzZTogJ0FPJyxcbiAgbGV0dGVyczogXCJcXHVBNzM0XCJcbn0sIHtcbiAgYmFzZTogJ0FVJyxcbiAgbGV0dGVyczogXCJcXHVBNzM2XCJcbn0sIHtcbiAgYmFzZTogJ0FWJyxcbiAgbGV0dGVyczogXCJcXHVBNzM4XFx1QTczQVwiXG59LCB7XG4gIGJhc2U6ICdBWScsXG4gIGxldHRlcnM6IFwiXFx1QTczQ1wiXG59LCB7XG4gIGJhc2U6ICdCJyxcbiAgbGV0dGVyczogXCJCXFx1MjRCN1xcdUZGMjJcXHUxRTAyXFx1MUUwNFxcdTFFMDZcXHUwMjQzXFx1MDE4MlxcdTAxODFcIlxufSwge1xuICBiYXNlOiAnQycsXG4gIGxldHRlcnM6IFwiQ1xcdTI0QjhcXHVGRjIzXFx1MDEwNlxcdTAxMDhcXHUwMTBBXFx1MDEwQ1xceEM3XFx1MUUwOFxcdTAxODdcXHUwMjNCXFx1QTczRVwiXG59LCB7XG4gIGJhc2U6ICdEJyxcbiAgbGV0dGVyczogXCJEXFx1MjRCOVxcdUZGMjRcXHUxRTBBXFx1MDEwRVxcdTFFMENcXHUxRTEwXFx1MUUxMlxcdTFFMEVcXHUwMTEwXFx1MDE4QlxcdTAxOEFcXHUwMTg5XFx1QTc3OVwiXG59LCB7XG4gIGJhc2U6ICdEWicsXG4gIGxldHRlcnM6IFwiXFx1MDFGMVxcdTAxQzRcIlxufSwge1xuICBiYXNlOiAnRHonLFxuICBsZXR0ZXJzOiBcIlxcdTAxRjJcXHUwMUM1XCJcbn0sIHtcbiAgYmFzZTogJ0UnLFxuICBsZXR0ZXJzOiBcIkVcXHUyNEJBXFx1RkYyNVxceEM4XFx4QzlcXHhDQVxcdTFFQzBcXHUxRUJFXFx1MUVDNFxcdTFFQzJcXHUxRUJDXFx1MDExMlxcdTFFMTRcXHUxRTE2XFx1MDExNFxcdTAxMTZcXHhDQlxcdTFFQkFcXHUwMTFBXFx1MDIwNFxcdTAyMDZcXHUxRUI4XFx1MUVDNlxcdTAyMjhcXHUxRTFDXFx1MDExOFxcdTFFMThcXHUxRTFBXFx1MDE5MFxcdTAxOEVcIlxufSwge1xuICBiYXNlOiAnRicsXG4gIGxldHRlcnM6IFwiRlxcdTI0QkJcXHVGRjI2XFx1MUUxRVxcdTAxOTFcXHVBNzdCXCJcbn0sIHtcbiAgYmFzZTogJ0cnLFxuICBsZXR0ZXJzOiBcIkdcXHUyNEJDXFx1RkYyN1xcdTAxRjRcXHUwMTFDXFx1MUUyMFxcdTAxMUVcXHUwMTIwXFx1MDFFNlxcdTAxMjJcXHUwMUU0XFx1MDE5M1xcdUE3QTBcXHVBNzdEXFx1QTc3RVwiXG59LCB7XG4gIGJhc2U6ICdIJyxcbiAgbGV0dGVyczogXCJIXFx1MjRCRFxcdUZGMjhcXHUwMTI0XFx1MUUyMlxcdTFFMjZcXHUwMjFFXFx1MUUyNFxcdTFFMjhcXHUxRTJBXFx1MDEyNlxcdTJDNjdcXHUyQzc1XFx1QTc4RFwiXG59LCB7XG4gIGJhc2U6ICdJJyxcbiAgbGV0dGVyczogXCJJXFx1MjRCRVxcdUZGMjlcXHhDQ1xceENEXFx4Q0VcXHUwMTI4XFx1MDEyQVxcdTAxMkNcXHUwMTMwXFx4Q0ZcXHUxRTJFXFx1MUVDOFxcdTAxQ0ZcXHUwMjA4XFx1MDIwQVxcdTFFQ0FcXHUwMTJFXFx1MUUyQ1xcdTAxOTdcIlxufSwge1xuICBiYXNlOiAnSicsXG4gIGxldHRlcnM6IFwiSlxcdTI0QkZcXHVGRjJBXFx1MDEzNFxcdTAyNDhcIlxufSwge1xuICBiYXNlOiAnSycsXG4gIGxldHRlcnM6IFwiS1xcdTI0QzBcXHVGRjJCXFx1MUUzMFxcdTAxRThcXHUxRTMyXFx1MDEzNlxcdTFFMzRcXHUwMTk4XFx1MkM2OVxcdUE3NDBcXHVBNzQyXFx1QTc0NFxcdUE3QTJcIlxufSwge1xuICBiYXNlOiAnTCcsXG4gIGxldHRlcnM6IFwiTFxcdTI0QzFcXHVGRjJDXFx1MDEzRlxcdTAxMzlcXHUwMTNEXFx1MUUzNlxcdTFFMzhcXHUwMTNCXFx1MUUzQ1xcdTFFM0FcXHUwMTQxXFx1MDIzRFxcdTJDNjJcXHUyQzYwXFx1QTc0OFxcdUE3NDZcXHVBNzgwXCJcbn0sIHtcbiAgYmFzZTogJ0xKJyxcbiAgbGV0dGVyczogXCJcXHUwMUM3XCJcbn0sIHtcbiAgYmFzZTogJ0xqJyxcbiAgbGV0dGVyczogXCJcXHUwMUM4XCJcbn0sIHtcbiAgYmFzZTogJ00nLFxuICBsZXR0ZXJzOiBcIk1cXHUyNEMyXFx1RkYyRFxcdTFFM0VcXHUxRTQwXFx1MUU0MlxcdTJDNkVcXHUwMTlDXCJcbn0sIHtcbiAgYmFzZTogJ04nLFxuICBsZXR0ZXJzOiBcIk5cXHUyNEMzXFx1RkYyRVxcdTAxRjhcXHUwMTQzXFx4RDFcXHUxRTQ0XFx1MDE0N1xcdTFFNDZcXHUwMTQ1XFx1MUU0QVxcdTFFNDhcXHUwMjIwXFx1MDE5RFxcdUE3OTBcXHVBN0E0XCJcbn0sIHtcbiAgYmFzZTogJ05KJyxcbiAgbGV0dGVyczogXCJcXHUwMUNBXCJcbn0sIHtcbiAgYmFzZTogJ05qJyxcbiAgbGV0dGVyczogXCJcXHUwMUNCXCJcbn0sIHtcbiAgYmFzZTogJ08nLFxuICBsZXR0ZXJzOiBcIk9cXHUyNEM0XFx1RkYyRlxceEQyXFx4RDNcXHhENFxcdTFFRDJcXHUxRUQwXFx1MUVENlxcdTFFRDRcXHhENVxcdTFFNENcXHUwMjJDXFx1MUU0RVxcdTAxNENcXHUxRTUwXFx1MUU1MlxcdTAxNEVcXHUwMjJFXFx1MDIzMFxceEQ2XFx1MDIyQVxcdTFFQ0VcXHUwMTUwXFx1MDFEMVxcdTAyMENcXHUwMjBFXFx1MDFBMFxcdTFFRENcXHUxRURBXFx1MUVFMFxcdTFFREVcXHUxRUUyXFx1MUVDQ1xcdTFFRDhcXHUwMUVBXFx1MDFFQ1xceEQ4XFx1MDFGRVxcdTAxODZcXHUwMTlGXFx1QTc0QVxcdUE3NENcIlxufSwge1xuICBiYXNlOiAnT0knLFxuICBsZXR0ZXJzOiBcIlxcdTAxQTJcIlxufSwge1xuICBiYXNlOiAnT08nLFxuICBsZXR0ZXJzOiBcIlxcdUE3NEVcIlxufSwge1xuICBiYXNlOiAnT1UnLFxuICBsZXR0ZXJzOiBcIlxcdTAyMjJcIlxufSwge1xuICBiYXNlOiAnUCcsXG4gIGxldHRlcnM6IFwiUFxcdTI0QzVcXHVGRjMwXFx1MUU1NFxcdTFFNTZcXHUwMUE0XFx1MkM2M1xcdUE3NTBcXHVBNzUyXFx1QTc1NFwiXG59LCB7XG4gIGJhc2U6ICdRJyxcbiAgbGV0dGVyczogXCJRXFx1MjRDNlxcdUZGMzFcXHVBNzU2XFx1QTc1OFxcdTAyNEFcIlxufSwge1xuICBiYXNlOiAnUicsXG4gIGxldHRlcnM6IFwiUlxcdTI0QzdcXHVGRjMyXFx1MDE1NFxcdTFFNThcXHUwMTU4XFx1MDIxMFxcdTAyMTJcXHUxRTVBXFx1MUU1Q1xcdTAxNTZcXHUxRTVFXFx1MDI0Q1xcdTJDNjRcXHVBNzVBXFx1QTdBNlxcdUE3ODJcIlxufSwge1xuICBiYXNlOiAnUycsXG4gIGxldHRlcnM6IFwiU1xcdTI0QzhcXHVGRjMzXFx1MUU5RVxcdTAxNUFcXHUxRTY0XFx1MDE1Q1xcdTFFNjBcXHUwMTYwXFx1MUU2NlxcdTFFNjJcXHUxRTY4XFx1MDIxOFxcdTAxNUVcXHUyQzdFXFx1QTdBOFxcdUE3ODRcIlxufSwge1xuICBiYXNlOiAnVCcsXG4gIGxldHRlcnM6IFwiVFxcdTI0QzlcXHVGRjM0XFx1MUU2QVxcdTAxNjRcXHUxRTZDXFx1MDIxQVxcdTAxNjJcXHUxRTcwXFx1MUU2RVxcdTAxNjZcXHUwMUFDXFx1MDFBRVxcdTAyM0VcXHVBNzg2XCJcbn0sIHtcbiAgYmFzZTogJ1RaJyxcbiAgbGV0dGVyczogXCJcXHVBNzI4XCJcbn0sIHtcbiAgYmFzZTogJ1UnLFxuICBsZXR0ZXJzOiBcIlVcXHUyNENBXFx1RkYzNVxceEQ5XFx4REFcXHhEQlxcdTAxNjhcXHUxRTc4XFx1MDE2QVxcdTFFN0FcXHUwMTZDXFx4RENcXHUwMURCXFx1MDFEN1xcdTAxRDVcXHUwMUQ5XFx1MUVFNlxcdTAxNkVcXHUwMTcwXFx1MDFEM1xcdTAyMTRcXHUwMjE2XFx1MDFBRlxcdTFFRUFcXHUxRUU4XFx1MUVFRVxcdTFFRUNcXHUxRUYwXFx1MUVFNFxcdTFFNzJcXHUwMTcyXFx1MUU3NlxcdTFFNzRcXHUwMjQ0XCJcbn0sIHtcbiAgYmFzZTogJ1YnLFxuICBsZXR0ZXJzOiBcIlZcXHUyNENCXFx1RkYzNlxcdTFFN0NcXHUxRTdFXFx1MDFCMlxcdUE3NUVcXHUwMjQ1XCJcbn0sIHtcbiAgYmFzZTogJ1ZZJyxcbiAgbGV0dGVyczogXCJcXHVBNzYwXCJcbn0sIHtcbiAgYmFzZTogJ1cnLFxuICBsZXR0ZXJzOiBcIldcXHUyNENDXFx1RkYzN1xcdTFFODBcXHUxRTgyXFx1MDE3NFxcdTFFODZcXHUxRTg0XFx1MUU4OFxcdTJDNzJcIlxufSwge1xuICBiYXNlOiAnWCcsXG4gIGxldHRlcnM6IFwiWFxcdTI0Q0RcXHVGRjM4XFx1MUU4QVxcdTFFOENcIlxufSwge1xuICBiYXNlOiAnWScsXG4gIGxldHRlcnM6IFwiWVxcdTI0Q0VcXHVGRjM5XFx1MUVGMlxceEREXFx1MDE3NlxcdTFFRjhcXHUwMjMyXFx1MUU4RVxcdTAxNzhcXHUxRUY2XFx1MUVGNFxcdTAxQjNcXHUwMjRFXFx1MUVGRVwiXG59LCB7XG4gIGJhc2U6ICdaJyxcbiAgbGV0dGVyczogXCJaXFx1MjRDRlxcdUZGM0FcXHUwMTc5XFx1MUU5MFxcdTAxN0JcXHUwMTdEXFx1MUU5MlxcdTFFOTRcXHUwMUI1XFx1MDIyNFxcdTJDN0ZcXHUyQzZCXFx1QTc2MlwiXG59LCB7XG4gIGJhc2U6ICdhJyxcbiAgbGV0dGVyczogXCJhXFx1MjREMFxcdUZGNDFcXHUxRTlBXFx4RTBcXHhFMVxceEUyXFx1MUVBN1xcdTFFQTVcXHUxRUFCXFx1MUVBOVxceEUzXFx1MDEwMVxcdTAxMDNcXHUxRUIxXFx1MUVBRlxcdTFFQjVcXHUxRUIzXFx1MDIyN1xcdTAxRTFcXHhFNFxcdTAxREZcXHUxRUEzXFx4RTVcXHUwMUZCXFx1MDFDRVxcdTAyMDFcXHUwMjAzXFx1MUVBMVxcdTFFQURcXHUxRUI3XFx1MUUwMVxcdTAxMDVcXHUyQzY1XFx1MDI1MFwiXG59LCB7XG4gIGJhc2U6ICdhYScsXG4gIGxldHRlcnM6IFwiXFx1QTczM1wiXG59LCB7XG4gIGJhc2U6ICdhZScsXG4gIGxldHRlcnM6IFwiXFx4RTZcXHUwMUZEXFx1MDFFM1wiXG59LCB7XG4gIGJhc2U6ICdhbycsXG4gIGxldHRlcnM6IFwiXFx1QTczNVwiXG59LCB7XG4gIGJhc2U6ICdhdScsXG4gIGxldHRlcnM6IFwiXFx1QTczN1wiXG59LCB7XG4gIGJhc2U6ICdhdicsXG4gIGxldHRlcnM6IFwiXFx1QTczOVxcdUE3M0JcIlxufSwge1xuICBiYXNlOiAnYXknLFxuICBsZXR0ZXJzOiBcIlxcdUE3M0RcIlxufSwge1xuICBiYXNlOiAnYicsXG4gIGxldHRlcnM6IFwiYlxcdTI0RDFcXHVGRjQyXFx1MUUwM1xcdTFFMDVcXHUxRTA3XFx1MDE4MFxcdTAxODNcXHUwMjUzXCJcbn0sIHtcbiAgYmFzZTogJ2MnLFxuICBsZXR0ZXJzOiBcImNcXHUyNEQyXFx1RkY0M1xcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHhFN1xcdTFFMDlcXHUwMTg4XFx1MDIzQ1xcdUE3M0ZcXHUyMTg0XCJcbn0sIHtcbiAgYmFzZTogJ2QnLFxuICBsZXR0ZXJzOiBcImRcXHUyNEQzXFx1RkY0NFxcdTFFMEJcXHUwMTBGXFx1MUUwRFxcdTFFMTFcXHUxRTEzXFx1MUUwRlxcdTAxMTFcXHUwMThDXFx1MDI1NlxcdTAyNTdcXHVBNzdBXCJcbn0sIHtcbiAgYmFzZTogJ2R6JyxcbiAgbGV0dGVyczogXCJcXHUwMUYzXFx1MDFDNlwiXG59LCB7XG4gIGJhc2U6ICdlJyxcbiAgbGV0dGVyczogXCJlXFx1MjRENFxcdUZGNDVcXHhFOFxceEU5XFx4RUFcXHUxRUMxXFx1MUVCRlxcdTFFQzVcXHUxRUMzXFx1MUVCRFxcdTAxMTNcXHUxRTE1XFx1MUUxN1xcdTAxMTVcXHUwMTE3XFx4RUJcXHUxRUJCXFx1MDExQlxcdTAyMDVcXHUwMjA3XFx1MUVCOVxcdTFFQzdcXHUwMjI5XFx1MUUxRFxcdTAxMTlcXHUxRTE5XFx1MUUxQlxcdTAyNDdcXHUwMjVCXFx1MDFERFwiXG59LCB7XG4gIGJhc2U6ICdmJyxcbiAgbGV0dGVyczogXCJmXFx1MjRENVxcdUZGNDZcXHUxRTFGXFx1MDE5MlxcdUE3N0NcIlxufSwge1xuICBiYXNlOiAnZycsXG4gIGxldHRlcnM6IFwiZ1xcdTI0RDZcXHVGRjQ3XFx1MDFGNVxcdTAxMURcXHUxRTIxXFx1MDExRlxcdTAxMjFcXHUwMUU3XFx1MDEyM1xcdTAxRTVcXHUwMjYwXFx1QTdBMVxcdTFENzlcXHVBNzdGXCJcbn0sIHtcbiAgYmFzZTogJ2gnLFxuICBsZXR0ZXJzOiBcImhcXHUyNEQ3XFx1RkY0OFxcdTAxMjVcXHUxRTIzXFx1MUUyN1xcdTAyMUZcXHUxRTI1XFx1MUUyOVxcdTFFMkJcXHUxRTk2XFx1MDEyN1xcdTJDNjhcXHUyQzc2XFx1MDI2NVwiXG59LCB7XG4gIGJhc2U6ICdodicsXG4gIGxldHRlcnM6IFwiXFx1MDE5NVwiXG59LCB7XG4gIGJhc2U6ICdpJyxcbiAgbGV0dGVyczogXCJpXFx1MjREOFxcdUZGNDlcXHhFQ1xceEVEXFx4RUVcXHUwMTI5XFx1MDEyQlxcdTAxMkRcXHhFRlxcdTFFMkZcXHUxRUM5XFx1MDFEMFxcdTAyMDlcXHUwMjBCXFx1MUVDQlxcdTAxMkZcXHUxRTJEXFx1MDI2OFxcdTAxMzFcIlxufSwge1xuICBiYXNlOiAnaicsXG4gIGxldHRlcnM6IFwialxcdTI0RDlcXHVGRjRBXFx1MDEzNVxcdTAxRjBcXHUwMjQ5XCJcbn0sIHtcbiAgYmFzZTogJ2snLFxuICBsZXR0ZXJzOiBcImtcXHUyNERBXFx1RkY0QlxcdTFFMzFcXHUwMUU5XFx1MUUzM1xcdTAxMzdcXHUxRTM1XFx1MDE5OVxcdTJDNkFcXHVBNzQxXFx1QTc0M1xcdUE3NDVcXHVBN0EzXCJcbn0sIHtcbiAgYmFzZTogJ2wnLFxuICBsZXR0ZXJzOiBcImxcXHUyNERCXFx1RkY0Q1xcdTAxNDBcXHUwMTNBXFx1MDEzRVxcdTFFMzdcXHUxRTM5XFx1MDEzQ1xcdTFFM0RcXHUxRTNCXFx1MDE3RlxcdTAxNDJcXHUwMTlBXFx1MDI2QlxcdTJDNjFcXHVBNzQ5XFx1QTc4MVxcdUE3NDdcIlxufSwge1xuICBiYXNlOiAnbGonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQzlcIlxufSwge1xuICBiYXNlOiAnbScsXG4gIGxldHRlcnM6IFwibVxcdTI0RENcXHVGRjREXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MDI3MVxcdTAyNkZcIlxufSwge1xuICBiYXNlOiAnbicsXG4gIGxldHRlcnM6IFwiblxcdTI0RERcXHVGRjRFXFx1MDFGOVxcdTAxNDRcXHhGMVxcdTFFNDVcXHUwMTQ4XFx1MUU0N1xcdTAxNDZcXHUxRTRCXFx1MUU0OVxcdTAxOUVcXHUwMjcyXFx1MDE0OVxcdUE3OTFcXHVBN0E1XCJcbn0sIHtcbiAgYmFzZTogJ25qJyxcbiAgbGV0dGVyczogXCJcXHUwMUNDXCJcbn0sIHtcbiAgYmFzZTogJ28nLFxuICBsZXR0ZXJzOiBcIm9cXHUyNERFXFx1RkY0RlxceEYyXFx4RjNcXHhGNFxcdTFFRDNcXHUxRUQxXFx1MUVEN1xcdTFFRDVcXHhGNVxcdTFFNERcXHUwMjJEXFx1MUU0RlxcdTAxNERcXHUxRTUxXFx1MUU1M1xcdTAxNEZcXHUwMjJGXFx1MDIzMVxceEY2XFx1MDIyQlxcdTFFQ0ZcXHUwMTUxXFx1MDFEMlxcdTAyMERcXHUwMjBGXFx1MDFBMVxcdTFFRERcXHUxRURCXFx1MUVFMVxcdTFFREZcXHUxRUUzXFx1MUVDRFxcdTFFRDlcXHUwMUVCXFx1MDFFRFxceEY4XFx1MDFGRlxcdTAyNTRcXHVBNzRCXFx1QTc0RFxcdTAyNzVcIlxufSwge1xuICBiYXNlOiAnb2knLFxuICBsZXR0ZXJzOiBcIlxcdTAxQTNcIlxufSwge1xuICBiYXNlOiAnb3UnLFxuICBsZXR0ZXJzOiBcIlxcdTAyMjNcIlxufSwge1xuICBiYXNlOiAnb28nLFxuICBsZXR0ZXJzOiBcIlxcdUE3NEZcIlxufSwge1xuICBiYXNlOiAncCcsXG4gIGxldHRlcnM6IFwicFxcdTI0REZcXHVGRjUwXFx1MUU1NVxcdTFFNTdcXHUwMUE1XFx1MUQ3RFxcdUE3NTFcXHVBNzUzXFx1QTc1NVwiXG59LCB7XG4gIGJhc2U6ICdxJyxcbiAgbGV0dGVyczogXCJxXFx1MjRFMFxcdUZGNTFcXHUwMjRCXFx1QTc1N1xcdUE3NTlcIlxufSwge1xuICBiYXNlOiAncicsXG4gIGxldHRlcnM6IFwiclxcdTI0RTFcXHVGRjUyXFx1MDE1NVxcdTFFNTlcXHUwMTU5XFx1MDIxMVxcdTAyMTNcXHUxRTVCXFx1MUU1RFxcdTAxNTdcXHUxRTVGXFx1MDI0RFxcdTAyN0RcXHVBNzVCXFx1QTdBN1xcdUE3ODNcIlxufSwge1xuICBiYXNlOiAncycsXG4gIGxldHRlcnM6IFwic1xcdTI0RTJcXHVGRjUzXFx4REZcXHUwMTVCXFx1MUU2NVxcdTAxNURcXHUxRTYxXFx1MDE2MVxcdTFFNjdcXHUxRTYzXFx1MUU2OVxcdTAyMTlcXHUwMTVGXFx1MDIzRlxcdUE3QTlcXHVBNzg1XFx1MUU5QlwiXG59LCB7XG4gIGJhc2U6ICd0JyxcbiAgbGV0dGVyczogXCJ0XFx1MjRFM1xcdUZGNTRcXHUxRTZCXFx1MUU5N1xcdTAxNjVcXHUxRTZEXFx1MDIxQlxcdTAxNjNcXHUxRTcxXFx1MUU2RlxcdTAxNjdcXHUwMUFEXFx1MDI4OFxcdTJDNjZcXHVBNzg3XCJcbn0sIHtcbiAgYmFzZTogJ3R6JyxcbiAgbGV0dGVyczogXCJcXHVBNzI5XCJcbn0sIHtcbiAgYmFzZTogJ3UnLFxuICBsZXR0ZXJzOiBcInVcXHUyNEU0XFx1RkY1NVxceEY5XFx4RkFcXHhGQlxcdTAxNjlcXHUxRTc5XFx1MDE2QlxcdTFFN0JcXHUwMTZEXFx4RkNcXHUwMURDXFx1MDFEOFxcdTAxRDZcXHUwMURBXFx1MUVFN1xcdTAxNkZcXHUwMTcxXFx1MDFENFxcdTAyMTVcXHUwMjE3XFx1MDFCMFxcdTFFRUJcXHUxRUU5XFx1MUVFRlxcdTFFRURcXHUxRUYxXFx1MUVFNVxcdTFFNzNcXHUwMTczXFx1MUU3N1xcdTFFNzVcXHUwMjg5XCJcbn0sIHtcbiAgYmFzZTogJ3YnLFxuICBsZXR0ZXJzOiBcInZcXHUyNEU1XFx1RkY1NlxcdTFFN0RcXHUxRTdGXFx1MDI4QlxcdUE3NUZcXHUwMjhDXCJcbn0sIHtcbiAgYmFzZTogJ3Z5JyxcbiAgbGV0dGVyczogXCJcXHVBNzYxXCJcbn0sIHtcbiAgYmFzZTogJ3cnLFxuICBsZXR0ZXJzOiBcIndcXHUyNEU2XFx1RkY1N1xcdTFFODFcXHUxRTgzXFx1MDE3NVxcdTFFODdcXHUxRTg1XFx1MUU5OFxcdTFFODlcXHUyQzczXCJcbn0sIHtcbiAgYmFzZTogJ3gnLFxuICBsZXR0ZXJzOiBcInhcXHUyNEU3XFx1RkY1OFxcdTFFOEJcXHUxRThEXCJcbn0sIHtcbiAgYmFzZTogJ3knLFxuICBsZXR0ZXJzOiBcInlcXHUyNEU4XFx1RkY1OVxcdTFFRjNcXHhGRFxcdTAxNzdcXHUxRUY5XFx1MDIzM1xcdTFFOEZcXHhGRlxcdTFFRjdcXHUxRTk5XFx1MUVGNVxcdTAxQjRcXHUwMjRGXFx1MUVGRlwiXG59LCB7XG4gIGJhc2U6ICd6JyxcbiAgbGV0dGVyczogXCJ6XFx1MjRFOVxcdUZGNUFcXHUwMTdBXFx1MUU5MVxcdTAxN0NcXHUwMTdFXFx1MUU5M1xcdTFFOTVcXHUwMUI2XFx1MDIyNVxcdTAyNDBcXHUyQzZDXFx1QTc2M1wiXG59XTtcbnZhciBhbnlEaWFjcml0aWMgPSBuZXcgUmVnRXhwKCdbJyArIGRpYWNyaXRpY3MubWFwKGZ1bmN0aW9uIChkKSB7XG4gIHJldHVybiBkLmxldHRlcnM7XG59KS5qb2luKCcnKSArICddJywgJ2cnKTtcbnZhciBkaWFjcml0aWNUb0Jhc2UgPSB7fTtcbmZvciAodmFyIGkgPSAwOyBpIDwgZGlhY3JpdGljcy5sZW5ndGg7IGkrKykge1xuICB2YXIgZGlhY3JpdGljID0gZGlhY3JpdGljc1tpXTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBkaWFjcml0aWMubGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgIGRpYWNyaXRpY1RvQmFzZVtkaWFjcml0aWMubGV0dGVyc1tqXV0gPSBkaWFjcml0aWMuYmFzZTtcbiAgfVxufVxudmFyIHN0cmlwRGlhY3JpdGljcyA9IGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGFueURpYWNyaXRpYywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGRpYWNyaXRpY1RvQmFzZVttYXRjaF07XG4gIH0pO1xufTtcblxudmFyIG1lbW9pemVkU3RyaXBEaWFjcml0aWNzRm9ySW5wdXQgPSBtZW1vaXplT25lKHN0cmlwRGlhY3JpdGljcyk7XG52YXIgdHJpbVN0cmluZyA9IGZ1bmN0aW9uIHRyaW1TdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufTtcbnZhciBkZWZhdWx0U3RyaW5naWZ5ID0gZnVuY3Rpb24gZGVmYXVsdFN0cmluZ2lmeShvcHRpb24pIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KG9wdGlvbi5sYWJlbCwgXCIgXCIpLmNvbmNhdChvcHRpb24udmFsdWUpO1xufTtcbnZhciBjcmVhdGVGaWx0ZXIgPSBmdW5jdGlvbiBjcmVhdGVGaWx0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAob3B0aW9uLCByYXdJbnB1dCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIGlmIChvcHRpb24uZGF0YS5fX2lzTmV3X18pIHJldHVybiB0cnVlO1xuICAgIHZhciBfaWdub3JlQ2FzZSRpZ25vcmVBY2MgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgaWdub3JlQWNjZW50czogdHJ1ZSxcbiAgICAgICAgc3RyaW5naWZ5OiBkZWZhdWx0U3RyaW5naWZ5LFxuICAgICAgICB0cmltOiB0cnVlLFxuICAgICAgICBtYXRjaEZyb206ICdhbnknXG4gICAgICB9LCBjb25maWcpLFxuICAgICAgaWdub3JlQ2FzZSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5pZ25vcmVDYXNlLFxuICAgICAgaWdub3JlQWNjZW50cyA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5pZ25vcmVBY2NlbnRzLFxuICAgICAgc3RyaW5naWZ5ID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLnN0cmluZ2lmeSxcbiAgICAgIHRyaW0gPSBfaWdub3JlQ2FzZSRpZ25vcmVBY2MudHJpbSxcbiAgICAgIG1hdGNoRnJvbSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5tYXRjaEZyb207XG4gICAgdmFyIGlucHV0ID0gdHJpbSA/IHRyaW1TdHJpbmcocmF3SW5wdXQpIDogcmF3SW5wdXQ7XG4gICAgdmFyIGNhbmRpZGF0ZSA9IHRyaW0gPyB0cmltU3RyaW5nKHN0cmluZ2lmeShvcHRpb24pKSA6IHN0cmluZ2lmeShvcHRpb24pO1xuICAgIGlmIChpZ25vcmVDYXNlKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKGlnbm9yZUFjY2VudHMpIHtcbiAgICAgIGlucHV0ID0gbWVtb2l6ZWRTdHJpcERpYWNyaXRpY3NGb3JJbnB1dChpbnB1dCk7XG4gICAgICBjYW5kaWRhdGUgPSBzdHJpcERpYWNyaXRpY3MoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoRnJvbSA9PT0gJ3N0YXJ0JyA/IGNhbmRpZGF0ZS5zdWJzdHIoMCwgaW5wdXQubGVuZ3RoKSA9PT0gaW5wdXQgOiBjYW5kaWRhdGUuaW5kZXhPZihpbnB1dCkgPiAtMTtcbiAgfTtcbn07XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJpbm5lclJlZlwiXTtcbmZ1bmN0aW9uIER1bW15SW5wdXQoX3JlZikge1xuICB2YXIgaW5uZXJSZWYgPSBfcmVmLmlubmVyUmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIC8vIFJlbW92ZSBhbmltYXRpb24gcHJvcHMgbm90IG1lYW50IGZvciBIVE1MIGVsZW1lbnRzXG4gIHZhciBmaWx0ZXJlZFByb3BzID0gcmVtb3ZlUHJvcHMocHJvcHMsICdvbkV4aXRlZCcsICdpbicsICdlbnRlcicsICdleGl0JywgJ2FwcGVhcicpO1xuICByZXR1cm4ganN4KFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgZmlsdGVyZWRQcm9wcywge1xuICAgIGNzczogLyojX19QVVJFX18qL2Nzcyh7XG4gICAgICBsYWJlbDogJ2R1bW15SW5wdXQnLFxuICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgIGJhY2tncm91bmQ6IDAsXG4gICAgICBib3JkZXI6IDAsXG4gICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgY2FyZXRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgb3V0bGluZTogMCxcbiAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgd2lkdGg6IDEsXG4gICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgIGNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgbGVmdDogLTEwMCxcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKC4wMSknXG4gICAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkR1bW15SW5wdXQ7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrUjFiVzE1U1c1d2RYUXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVhsQ1RTSXNJbVpwYkdVaU9pSkVkVzF0ZVVsdWNIVjBMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1VtVm1JSDBnWm5KdmJTQW5jbVZoWTNRbk8xeHVhVzF3YjNKMElIc2dhbk40SUgwZ1puSnZiU0FuUUdWdGIzUnBiMjR2Y21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnY21WdGIzWmxVSEp2Y0hNZ2ZTQm1jbTl0SUNjdUxpOTFkR2xzY3ljN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUlFUjFiVzE1U1c1d2RYUW9lMXh1SUNCcGJtNWxjbEpsWml4Y2JpQWdMaTR1Y0hKdmNITmNibjA2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25hVzV3ZFhRblhTQW1JSHRjYmlBZ2NtVmhaRzl1YkhrZ2FXNXVaWEpTWldZNklGSmxaanhJVkUxTVNXNXdkWFJGYkdWdFpXNTBQanRjYm4wcElIdGNiaUFnTHk4Z1VtVnRiM1psSUdGdWFXMWhkR2x2YmlCd2NtOXdjeUJ1YjNRZ2JXVmhiblFnWm05eUlFaFVUVXdnWld4bGJXVnVkSE5jYmlBZ1kyOXVjM1FnWm1sc2RHVnlaV1JRY205d2N5QTlJSEpsYlc5MlpWQnliM0J6S0Z4dUlDQWdJSEJ5YjNCekxGeHVJQ0FnSUNkdmJrVjRhWFJsWkNjc1hHNGdJQ0FnSjJsdUp5eGNiaUFnSUNBblpXNTBaWEluTEZ4dUlDQWdJQ2RsZUdsMEp5eGNiaUFnSUNBbllYQndaV0Z5SjF4dUlDQXBPMXh1WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEdsdWNIVjBYRzRnSUNBZ0lDQnlaV1k5ZTJsdWJtVnlVbVZtZlZ4dUlDQWdJQ0FnZXk0dUxtWnBiSFJsY21Wa1VISnZjSE45WEc0Z0lDQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lDQWdiR0ZpWld3NklDZGtkVzF0ZVVsdWNIVjBKeXhjYmlBZ0lDQWdJQ0FnTHk4Z1oyVjBJSEpwWkNCdlppQmhibmtnWkdWbVlYVnNkQ0J6ZEhsc1pYTmNiaUFnSUNBZ0lDQWdZbUZqYTJkeWIzVnVaRG9nTUN4Y2JpQWdJQ0FnSUNBZ1ltOXlaR1Z5T2lBd0xGeHVJQ0FnSUNBZ0lDQXZMeUJwYlhCdmNuUmhiblFoSUhSb2FYTWdhR2xrWlhNZ2RHaGxJR1pzWVhOb2FXNW5JR04xY25OdmNseHVJQ0FnSUNBZ0lDQmpZWEpsZEVOdmJHOXlPaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0FnSUNBZ0lDQm1iMjUwVTJsNlpUb2dKMmx1YUdWeWFYUW5MRnh1SUNBZ0lDQWdJQ0JuY21sa1FYSmxZVG9nSnpFZ0x5QXhJQzhnTWlBdklETW5MRnh1SUNBZ0lDQWdJQ0J2ZFhSc2FXNWxPaUF3TEZ4dUlDQWdJQ0FnSUNCd1lXUmthVzVuT2lBd0xGeHVJQ0FnSUNBZ0lDQXZMeUJwYlhCdmNuUmhiblFoSUhkcGRHaHZkWFFnWUhkcFpIUm9ZQ0JpY205M2MyVnljeUIzYjI0bmRDQmhiR3h2ZHlCbWIyTjFjMXh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dNU3hjYmx4dUlDQWdJQ0FnSUNBdkx5QnlaVzF2ZG1VZ1kzVnljMjl5SUc5dUlHUmxjMnQwYjNCY2JpQWdJQ0FnSUNBZ1kyOXNiM0k2SUNkMGNtRnVjM0JoY21WdWRDY3NYRzVjYmlBZ0lDQWdJQ0FnTHk4Z2NtVnRiM1psSUdOMWNuTnZjaUJ2YmlCdGIySnBiR1VnZDJocGJITjBJRzFoYVc1MFlXbHVhVzVuSUZ3aWMyTnliMnhzSUdsdWRHOGdkbWxsZDF3aUlHSmxhR0YyYVc5MWNseHVJQ0FnSUNBZ0lDQnNaV1owT2lBdE1UQXdMRnh1SUNBZ0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnSUNCd2IzTnBkR2x2YmpvZ0ozSmxiR0YwYVhabEp5eGNiaUFnSUNBZ0lDQWdkSEpoYm5ObWIzSnRPaUFuYzJOaGJHVW9MakF4S1Njc1hHNGdJQ0FnSUNCOWZWeHVJQ0FnSUM4K1hHNGdJQ2s3WEc1OVhHNGlYWDA9ICovXCIpXG4gIH0pKTtcbn1cblxudmFyIGNhbmNlbFNjcm9sbCA9IGZ1bmN0aW9uIGNhbmNlbFNjcm9sbChldmVudCkge1xuICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuZnVuY3Rpb24gdXNlU2Nyb2xsQ2FwdHVyZShfcmVmKSB7XG4gIHZhciBpc0VuYWJsZWQgPSBfcmVmLmlzRW5hYmxlZCxcbiAgICBvbkJvdHRvbUFycml2ZSA9IF9yZWYub25Cb3R0b21BcnJpdmUsXG4gICAgb25Cb3R0b21MZWF2ZSA9IF9yZWYub25Cb3R0b21MZWF2ZSxcbiAgICBvblRvcEFycml2ZSA9IF9yZWYub25Ub3BBcnJpdmUsXG4gICAgb25Ub3BMZWF2ZSA9IF9yZWYub25Ub3BMZWF2ZTtcbiAgdmFyIGlzQm90dG9tID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGlzVG9wID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIHRvdWNoU3RhcnQgPSB1c2VSZWYoMCk7XG4gIHZhciBzY3JvbGxUYXJnZXQgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBoYW5kbGVFdmVudERlbHRhID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50LCBkZWx0YSkge1xuICAgIGlmIChzY3JvbGxUYXJnZXQuY3VycmVudCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHZhciBfc2Nyb2xsVGFyZ2V0JGN1cnJlbnQgPSBzY3JvbGxUYXJnZXQuY3VycmVudCxcbiAgICAgIHNjcm9sbFRvcCA9IF9zY3JvbGxUYXJnZXQkY3VycmVudC5zY3JvbGxUb3AsXG4gICAgICBzY3JvbGxIZWlnaHQgPSBfc2Nyb2xsVGFyZ2V0JGN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgY2xpZW50SGVpZ2h0ID0gX3Njcm9sbFRhcmdldCRjdXJyZW50LmNsaWVudEhlaWdodDtcbiAgICB2YXIgdGFyZ2V0ID0gc2Nyb2xsVGFyZ2V0LmN1cnJlbnQ7XG4gICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0IC0gc2Nyb2xsVG9wO1xuICAgIHZhciBzaG91bGRDYW5jZWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIC8vIHJlc2V0IGJvdHRvbS90b3AgZmxhZ3NcbiAgICBpZiAoYXZhaWxhYmxlU2Nyb2xsID4gZGVsdGEgJiYgaXNCb3R0b20uY3VycmVudCkge1xuICAgICAgaWYgKG9uQm90dG9tTGVhdmUpIG9uQm90dG9tTGVhdmUoZXZlbnQpO1xuICAgICAgaXNCb3R0b20uY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmIGlzVG9wLmN1cnJlbnQpIHtcbiAgICAgIGlmIChvblRvcExlYXZlKSBvblRvcExlYXZlKGV2ZW50KTtcbiAgICAgIGlzVG9wLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBib3R0b20gbGltaXRcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSB7XG4gICAgICBpZiAob25Cb3R0b21BcnJpdmUgJiYgIWlzQm90dG9tLmN1cnJlbnQpIHtcbiAgICAgICAgb25Cb3R0b21BcnJpdmUoZXZlbnQpO1xuICAgICAgfVxuICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IHNjcm9sbEhlaWdodDtcbiAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgICBpc0JvdHRvbS5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgLy8gdG9wIGxpbWl0XG4gICAgfSBlbHNlIGlmICghaXNEZWx0YVBvc2l0aXZlICYmIC1kZWx0YSA+IHNjcm9sbFRvcCkge1xuICAgICAgaWYgKG9uVG9wQXJyaXZlICYmICFpc1RvcC5jdXJyZW50KSB7XG4gICAgICAgIG9uVG9wQXJyaXZlKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHRhcmdldC5zY3JvbGxUb3AgPSAwO1xuICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgIGlzVG9wLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGNhbmNlbCBzY3JvbGxcbiAgICBpZiAoc2hvdWxkQ2FuY2VsU2Nyb2xsKSB7XG4gICAgICBjYW5jZWxTY3JvbGwoZXZlbnQpO1xuICAgIH1cbiAgfSwgW29uQm90dG9tQXJyaXZlLCBvbkJvdHRvbUxlYXZlLCBvblRvcEFycml2ZSwgb25Ub3BMZWF2ZV0pO1xuICB2YXIgb25XaGVlbCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGhhbmRsZUV2ZW50RGVsdGEoZXZlbnQsIGV2ZW50LmRlbHRhWSk7XG4gIH0sIFtoYW5kbGVFdmVudERlbHRhXSk7XG4gIHZhciBvblRvdWNoU3RhcnQgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBzZXQgdG91Y2ggc3RhcnQgc28gd2UgY2FuIGNhbGN1bGF0ZSB0b3VjaG1vdmUgZGVsdGFcbiAgICB0b3VjaFN0YXJ0LmN1cnJlbnQgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICB9LCBbXSk7XG4gIHZhciBvblRvdWNoTW92ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBkZWx0YVkgPSB0b3VjaFN0YXJ0LmN1cnJlbnQgLSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICAgIGhhbmRsZUV2ZW50RGVsdGEoZXZlbnQsIGRlbHRhWSk7XG4gIH0sIFtoYW5kbGVFdmVudERlbHRhXSk7XG4gIHZhciBzdGFydExpc3RlbmluZyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbCkge1xuICAgIC8vIGJhaWwgZWFybHkgaWYgbm8gZWxlbWVudCBpcyBhdmFpbGFibGUgdG8gYXR0YWNoIHRvXG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIHZhciBub3RQYXNzaXZlID0gc3VwcG9ydHNQYXNzaXZlRXZlbnRzID8ge1xuICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICB9IDogZmFsc2U7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsLCBub3RQYXNzaXZlKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCBub3RQYXNzaXZlKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSwgbm90UGFzc2l2ZSk7XG4gIH0sIFtvblRvdWNoTW92ZSwgb25Ub3VjaFN0YXJ0LCBvbldoZWVsXSk7XG4gIHZhciBzdG9wTGlzdGVuaW5nID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGVsKSB7XG4gICAgLy8gYmFpbCBlYXJseSBpZiBubyBlbGVtZW50IGlzIGF2YWlsYWJsZSB0byBkZXRhY2ggZnJvbVxuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwsIGZhbHNlKTtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUsIGZhbHNlKTtcbiAgfSwgW29uVG91Y2hNb3ZlLCBvblRvdWNoU3RhcnQsIG9uV2hlZWxdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzRW5hYmxlZCkgcmV0dXJuO1xuICAgIHZhciBlbGVtZW50ID0gc2Nyb2xsVGFyZ2V0LmN1cnJlbnQ7XG4gICAgc3RhcnRMaXN0ZW5pbmcoZWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0b3BMaXN0ZW5pbmcoZWxlbWVudCk7XG4gICAgfTtcbiAgfSwgW2lzRW5hYmxlZCwgc3RhcnRMaXN0ZW5pbmcsIHN0b3BMaXN0ZW5pbmddKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgc2Nyb2xsVGFyZ2V0LmN1cnJlbnQgPSBlbGVtZW50O1xuICB9O1xufVxuXG52YXIgU1RZTEVfS0VZUyA9IFsnYm94U2l6aW5nJywgJ2hlaWdodCcsICdvdmVyZmxvdycsICdwYWRkaW5nUmlnaHQnLCAncG9zaXRpb24nXTtcbnZhciBMT0NLX1NUWUxFUyA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIC8vIGFjY291bnQgZm9yIHBvc3NpYmxlIGRlY2xhcmF0aW9uIGB3aWR0aDogMTAwJTtgIG9uIGJvZHlcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgaGVpZ2h0OiAnMTAwJSdcbn07XG5mdW5jdGlvbiBwcmV2ZW50VG91Y2hNb3ZlKGUpIHtcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gYWxsb3dUb3VjaE1vdmUoZSkge1xuICBlLnN0b3BQcm9wYWdhdGlvbigpO1xufVxuZnVuY3Rpb24gcHJldmVudEluZXJ0aWFTY3JvbGwoKSB7XG4gIHZhciB0b3AgPSB0aGlzLnNjcm9sbFRvcDtcbiAgdmFyIHRvdGFsU2Nyb2xsID0gdGhpcy5zY3JvbGxIZWlnaHQ7XG4gIHZhciBjdXJyZW50U2Nyb2xsID0gdG9wICsgdGhpcy5vZmZzZXRIZWlnaHQ7XG4gIGlmICh0b3AgPT09IDApIHtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IDE7XG4gIH0gZWxzZSBpZiAoY3VycmVudFNjcm9sbCA9PT0gdG90YWxTY3JvbGwpIHtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IHRvcCAtIDE7XG4gIH1cbn1cblxuLy8gYG9udG91Y2hzdGFydGAgY2hlY2sgd29ya3Mgb24gbW9zdCBicm93c2Vyc1xuLy8gYG1heFRvdWNoUG9pbnRzYCB3b3JrcyBvbiBJRTEwLzExIGFuZCBTdXJmYWNlXG5mdW5jdGlvbiBpc1RvdWNoRGV2aWNlKCkge1xuICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cztcbn1cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xudmFyIGFjdGl2ZVNjcm9sbExvY2tzID0gMDtcbnZhciBsaXN0ZW5lck9wdGlvbnMgPSB7XG4gIGNhcHR1cmU6IGZhbHNlLFxuICBwYXNzaXZlOiBmYWxzZVxufTtcbmZ1bmN0aW9uIHVzZVNjcm9sbExvY2soX3JlZikge1xuICB2YXIgaXNFbmFibGVkID0gX3JlZi5pc0VuYWJsZWQsXG4gICAgX3JlZiRhY2NvdW50Rm9yU2Nyb2xsID0gX3JlZi5hY2NvdW50Rm9yU2Nyb2xsYmFycyxcbiAgICBhY2NvdW50Rm9yU2Nyb2xsYmFycyA9IF9yZWYkYWNjb3VudEZvclNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYWNjb3VudEZvclNjcm9sbDtcbiAgdmFyIG9yaWdpbmFsU3R5bGVzID0gdXNlUmVmKHt9KTtcbiAgdmFyIHNjcm9sbFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGFkZFNjcm9sbExvY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICBpZiAoIWNhblVzZURPTSkgcmV0dXJuO1xuICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciB0YXJnZXRTdHlsZSA9IHRhcmdldCAmJiB0YXJnZXQuc3R5bGU7XG4gICAgaWYgKGFjY291bnRGb3JTY3JvbGxiYXJzKSB7XG4gICAgICAvLyBzdG9yZSBhbnkgc3R5bGVzIGFscmVhZHkgYXBwbGllZCB0byB0aGUgYm9keVxuICAgICAgU1RZTEVfS0VZUy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRhcmdldFN0eWxlICYmIHRhcmdldFN0eWxlW2tleV07XG4gICAgICAgIG9yaWdpbmFsU3R5bGVzLmN1cnJlbnRba2V5XSA9IHZhbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRoZSBsb2NrIHN0eWxlcyBhbmQgcGFkZGluZyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzY3JvbGwgbG9ja1xuICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycyAmJiBhY3RpdmVTY3JvbGxMb2NrcyA8IDEpIHtcbiAgICAgIHZhciBjdXJyZW50UGFkZGluZyA9IHBhcnNlSW50KG9yaWdpbmFsU3R5bGVzLmN1cnJlbnQucGFkZGluZ1JpZ2h0LCAxMCkgfHwgMDtcbiAgICAgIHZhciBjbGllbnRXaWR0aCA9IGRvY3VtZW50LmJvZHkgPyBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDogMDtcbiAgICAgIHZhciBhZGp1c3RlZFBhZGRpbmcgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGNsaWVudFdpZHRoICsgY3VycmVudFBhZGRpbmcgfHwgMDtcbiAgICAgIE9iamVjdC5rZXlzKExPQ0tfU1RZTEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IExPQ0tfU1RZTEVTW2tleV07XG4gICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgIHRhcmdldFN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRhcmdldFN0eWxlKSB7XG4gICAgICAgIHRhcmdldFN0eWxlLnBhZGRpbmdSaWdodCA9IFwiXCIuY29uY2F0KGFkanVzdGVkUGFkZGluZywgXCJweFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhY2NvdW50IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgaWYgKHRhcmdldCAmJiBpc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgIC8vIE1vYmlsZSBTYWZhcmkgaWdub3JlcyB7IG92ZXJmbG93OiBoaWRkZW4gfSBkZWNsYXJhdGlvbiBvbiB0aGUgYm9keS5cbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50VG91Y2hNb3ZlLCBsaXN0ZW5lck9wdGlvbnMpO1xuXG4gICAgICAvLyBBbGxvdyBzY3JvbGwgb24gcHJvdmlkZWQgdGFyZ2V0XG4gICAgICBpZiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHByZXZlbnRJbmVydGlhU2Nyb2xsLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBhbGxvd1RvdWNoTW92ZSwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgYWN0aXZlIHNjcm9sbCBsb2Nrc1xuICAgIGFjdGl2ZVNjcm9sbExvY2tzICs9IDE7XG4gIH0sIFthY2NvdW50Rm9yU2Nyb2xsYmFyc10pO1xuICB2YXIgcmVtb3ZlU2Nyb2xsTG9jayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0b3VjaFNjcm9sbFRhcmdldCkge1xuICAgIGlmICghY2FuVXNlRE9NKSByZXR1cm47XG4gICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIHRhcmdldFN0eWxlID0gdGFyZ2V0ICYmIHRhcmdldC5zdHlsZTtcblxuICAgIC8vIHNhZmVseSBkZWNyZW1lbnQgYWN0aXZlIHNjcm9sbCBsb2Nrc1xuICAgIGFjdGl2ZVNjcm9sbExvY2tzID0gTWF0aC5tYXgoYWN0aXZlU2Nyb2xsTG9ja3MgLSAxLCAwKTtcblxuICAgIC8vIHJlYXBwbHkgb3JpZ2luYWwgYm9keSBzdHlsZXMsIGlmIGFueVxuICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycyAmJiBhY3RpdmVTY3JvbGxMb2NrcyA8IDEpIHtcbiAgICAgIFNUWUxFX0tFWVMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSBvcmlnaW5hbFN0eWxlcy5jdXJyZW50W2tleV07XG4gICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgIHRhcmdldFN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSB0b3VjaCBsaXN0ZW5lcnNcbiAgICBpZiAodGFyZ2V0ICYmIGlzVG91Y2hEZXZpY2UoKSkge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHByZXZlbnRUb3VjaE1vdmUsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICBpZiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHByZXZlbnRJbmVydGlhU2Nyb2xsLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBhbGxvd1RvdWNoTW92ZSwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthY2NvdW50Rm9yU2Nyb2xsYmFyc10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNFbmFibGVkKSByZXR1cm47XG4gICAgdmFyIGVsZW1lbnQgPSBzY3JvbGxUYXJnZXQuY3VycmVudDtcbiAgICBhZGRTY3JvbGxMb2NrKGVsZW1lbnQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmVTY3JvbGxMb2NrKGVsZW1lbnQpO1xuICAgIH07XG4gIH0sIFtpc0VuYWJsZWQsIGFkZFNjcm9sbExvY2ssIHJlbW92ZVNjcm9sbExvY2tdKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgc2Nyb2xsVGFyZ2V0LmN1cnJlbnQgPSBlbGVtZW50O1xuICB9O1xufVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQxKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbnZhciBibHVyU2VsZWN0SW5wdXQgPSBmdW5jdGlvbiBibHVyU2VsZWN0SW5wdXQoZXZlbnQpIHtcbiAgdmFyIGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gIHJldHVybiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG59O1xudmFyIF9yZWYyJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWtmZGIwZVwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246Zml4ZWQ7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7dG9wOjBcIlxufSA6IHtcbiAgbmFtZTogXCJicDhjdWEtU2Nyb2xsTWFuYWdlclwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246Zml4ZWQ7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7dG9wOjA7bGFiZWw6U2Nyb2xsTWFuYWdlcjtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsTmpjbTlzYkUxaGJtRm5aWEl1ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXOUVWU0lzSW1acGJHVWlPaUpUWTNKdmJHeE5ZVzVoWjJWeUxuUnplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtpQkFhbk40SUdwemVDQXFMMXh1YVcxd2IzSjBJSHNnYW5ONElIMGdabkp2YlNBblFHVnRiM1JwYjI0dmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ1JuSmhaMjFsYm5Rc0lGSmxZV04wUld4bGJXVnVkQ3dnVW1WbVEyRnNiR0poWTJzc0lFMXZkWE5sUlhabGJuUWdmU0JtY205dElDZHlaV0ZqZENjN1hHNXBiWEJ2Y25RZ2RYTmxVMk55YjJ4c1EyRndkSFZ5WlNCbWNtOXRJQ2N1TDNWelpWTmpjbTlzYkVOaGNIUjFjbVVuTzF4dWFXMXdiM0owSUhWelpWTmpjbTlzYkV4dlkyc2dabkp2YlNBbkxpOTFjMlZUWTNKdmJHeE1iMk5ySnp0Y2JseHVhVzUwWlhKbVlXTmxJRkJ5YjNCeklIdGNiaUFnY21WaFpHOXViSGtnWTJocGJHUnlaVzQ2SUNoeVpXWTZJRkpsWmtOaGJHeGlZV05yUEVoVVRVeEZiR1Z0Wlc1MFBpa2dQVDRnVW1WaFkzUkZiR1Z0Wlc1ME8xeHVJQ0J5WldGa2IyNXNlU0JzYjJOclJXNWhZbXhsWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdjbVZoWkc5dWJIa2dZMkZ3ZEhWeVpVVnVZV0pzWldRNklHSnZiMnhsWVc0N1hHNGdJSEpsWVdSdmJteDVJRzl1UW05MGRHOXRRWEp5YVhabFB6b2dLR1YyWlc1ME9pQlhhR1ZsYkVWMlpXNTBJSHdnVkc5MVkyaEZkbVZ1ZENrZ1BUNGdkbTlwWkR0Y2JpQWdjbVZoWkc5dWJIa2diMjVDYjNSMGIyMU1aV0YyWlQ4NklDaGxkbVZ1ZERvZ1YyaGxaV3hGZG1WdWRDQjhJRlJ2ZFdOb1JYWmxiblFwSUQwK0lIWnZhV1E3WEc0Z0lISmxZV1J2Ym14NUlHOXVWRzl3UVhKeWFYWmxQem9nS0dWMlpXNTBPaUJYYUdWbGJFVjJaVzUwSUh3Z1ZHOTFZMmhGZG1WdWRDa2dQVDRnZG05cFpEdGNiaUFnY21WaFpHOXViSGtnYjI1VWIzQk1aV0YyWlQ4NklDaGxkbVZ1ZERvZ1YyaGxaV3hGZG1WdWRDQjhJRlJ2ZFdOb1JYWmxiblFwSUQwK0lIWnZhV1E3WEc1OVhHNWNibU52Ym5OMElHSnNkWEpUWld4bFkzUkpibkIxZENBOUlDaGxkbVZ1ZERvZ1RXOTFjMlZGZG1WdWREeElWRTFNUkdsMlJXeGxiV1Z1ZEQ0cElEMCtJSHRjYmlBZ1kyOXVjM1FnWld4bGJXVnVkQ0E5SUdWMlpXNTBMblJoY21kbGRDQmhjeUJJVkUxTVJHbDJSV3hsYldWdWREdGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQmxiR1Z0Wlc1MExtOTNibVZ5Ukc5amRXMWxiblF1WVdOMGFYWmxSV3hsYldWdWRDQW1KbHh1SUNBZ0lDaGxiR1Z0Wlc1MExtOTNibVZ5Ukc5amRXMWxiblF1WVdOMGFYWmxSV3hsYldWdWRDQmhjeUJJVkUxTVJXeGxiV1Z1ZENrdVlteDFjaWdwWEc0Z0lDazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCVFkzSnZiR3hOWVc1aFoyVnlLSHRjYmlBZ1kyaHBiR1J5Wlc0c1hHNGdJR3h2WTJ0RmJtRmliR1ZrTEZ4dUlDQmpZWEIwZFhKbFJXNWhZbXhsWkNBOUlIUnlkV1VzWEc0Z0lHOXVRbTkwZEc5dFFYSnlhWFpsTEZ4dUlDQnZia0p2ZEhSdmJVeGxZWFpsTEZ4dUlDQnZibFJ2Y0VGeWNtbDJaU3hjYmlBZ2IyNVViM0JNWldGMlpTeGNibjA2SUZCeWIzQnpLU0I3WEc0Z0lHTnZibk4wSUhObGRGTmpjbTlzYkVOaGNIUjFjbVZVWVhKblpYUWdQU0IxYzJWVFkzSnZiR3hEWVhCMGRYSmxLSHRjYmlBZ0lDQnBjMFZ1WVdKc1pXUTZJR05oY0hSMWNtVkZibUZpYkdWa0xGeHVJQ0FnSUc5dVFtOTBkRzl0UVhKeWFYWmxMRnh1SUNBZ0lHOXVRbTkwZEc5dFRHVmhkbVVzWEc0Z0lDQWdiMjVVYjNCQmNuSnBkbVVzWEc0Z0lDQWdiMjVVYjNCTVpXRjJaU3hjYmlBZ2ZTazdYRzRnSUdOdmJuTjBJSE5sZEZOamNtOXNiRXh2WTJ0VVlYSm5aWFFnUFNCMWMyVlRZM0p2Ykd4TWIyTnJLSHNnYVhORmJtRmliR1ZrT2lCc2IyTnJSVzVoWW14bFpDQjlLVHRjYmx4dUlDQmpiMjV6ZENCMFlYSm5aWFJTWldZNklGSmxaa05oYkd4aVlXTnJQRWhVVFV4RmJHVnRaVzUwUGlBOUlDaGxiR1Z0Wlc1MEtTQTlQaUI3WEc0Z0lDQWdjMlYwVTJOeWIyeHNRMkZ3ZEhWeVpWUmhjbWRsZENobGJHVnRaVzUwS1R0Y2JpQWdJQ0J6WlhSVFkzSnZiR3hNYjJOclZHRnlaMlYwS0dWc1pXMWxiblFwTzF4dUlDQjlPMXh1WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEVaeVlXZHRaVzUwUGx4dUlDQWdJQ0FnZTJ4dlkydEZibUZpYkdWa0lDWW1JQ2hjYmlBZ0lDQWdJQ0FnUEdScGRseHVJQ0FnSUNBZ0lDQWdJRzl1UTJ4cFkyczllMkpzZFhKVFpXeGxZM1JKYm5CMWRIMWNiaUFnSUNBZ0lDQWdJQ0JqYzNNOWUzc2djRzl6YVhScGIyNDZJQ2RtYVhobFpDY3NJR3hsWm5RNklEQXNJR0p2ZEhSdmJUb2dNQ3dnY21sbmFIUTZJREFzSUhSdmNEb2dNQ0I5ZlZ4dUlDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJpaDBZWEpuWlhSU1pXWXBmVnh1SUNBZ0lEd3ZSbkpoWjIxbGJuUStYRzRnSUNrN1hHNTlYRzRpWFgwPSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMVxufTtcbmZ1bmN0aW9uIFNjcm9sbE1hbmFnZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGxvY2tFbmFibGVkID0gX3JlZi5sb2NrRW5hYmxlZCxcbiAgICBfcmVmJGNhcHR1cmVFbmFibGVkID0gX3JlZi5jYXB0dXJlRW5hYmxlZCxcbiAgICBjYXB0dXJlRW5hYmxlZCA9IF9yZWYkY2FwdHVyZUVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGNhcHR1cmVFbmFibGVkLFxuICAgIG9uQm90dG9tQXJyaXZlID0gX3JlZi5vbkJvdHRvbUFycml2ZSxcbiAgICBvbkJvdHRvbUxlYXZlID0gX3JlZi5vbkJvdHRvbUxlYXZlLFxuICAgIG9uVG9wQXJyaXZlID0gX3JlZi5vblRvcEFycml2ZSxcbiAgICBvblRvcExlYXZlID0gX3JlZi5vblRvcExlYXZlO1xuICB2YXIgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldCA9IHVzZVNjcm9sbENhcHR1cmUoe1xuICAgIGlzRW5hYmxlZDogY2FwdHVyZUVuYWJsZWQsXG4gICAgb25Cb3R0b21BcnJpdmU6IG9uQm90dG9tQXJyaXZlLFxuICAgIG9uQm90dG9tTGVhdmU6IG9uQm90dG9tTGVhdmUsXG4gICAgb25Ub3BBcnJpdmU6IG9uVG9wQXJyaXZlLFxuICAgIG9uVG9wTGVhdmU6IG9uVG9wTGVhdmVcbiAgfSk7XG4gIHZhciBzZXRTY3JvbGxMb2NrVGFyZ2V0ID0gdXNlU2Nyb2xsTG9jayh7XG4gICAgaXNFbmFibGVkOiBsb2NrRW5hYmxlZFxuICB9KTtcbiAgdmFyIHRhcmdldFJlZiA9IGZ1bmN0aW9uIHRhcmdldFJlZihlbGVtZW50KSB7XG4gICAgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldChlbGVtZW50KTtcbiAgICBzZXRTY3JvbGxMb2NrVGFyZ2V0KGVsZW1lbnQpO1xuICB9O1xuICByZXR1cm4ganN4KEZyYWdtZW50LCBudWxsLCBsb2NrRW5hYmxlZCAmJiBqc3goXCJkaXZcIiwge1xuICAgIG9uQ2xpY2s6IGJsdXJTZWxlY3RJbnB1dCxcbiAgICBjc3M6IF9yZWYyJDFcbiAgfSksIGNoaWxkcmVuKHRhcmdldFJlZikpO1xufVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWEwcm80bi1yZXF1aXJlZElucHV0XCIsXG4gIHN0eWxlczogXCJsYWJlbDpyZXF1aXJlZElucHV0O29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3dpZHRoOjEwMCVcIlxufSA6IHtcbiAgbmFtZTogXCI1a2t4YjItcmVxdWlyZWRJbnB1dC1SZXF1aXJlZElucHV0XCIsXG4gIHN0eWxlczogXCJsYWJlbDpyZXF1aXJlZElucHV0O29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3dpZHRoOjEwMCU7bGFiZWw6UmVxdWlyZWRJbnB1dDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsSmxjWFZwY21Wa1NXNXdkWFF1ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXTkpJaXdpWm1sc1pTSTZJbEpsY1hWcGNtVmtTVzV3ZFhRdWRITjRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcUlFQnFjM2dnYW5ONElDb3ZYRzVwYlhCdmNuUWdleUJHYjJOMWMwVjJaVzUwU0dGdVpHeGxjaXdnUm5WdVkzUnBiMjVEYjIxd2IyNWxiblFnZlNCbWNtOXRJQ2R5WldGamRDYzdYRzVwYlhCdmNuUWdleUJxYzNnZ2ZTQm1jbTl0SUNkQVpXMXZkR2x2Ymk5eVpXRmpkQ2M3WEc1Y2JtTnZibk4wSUZKbGNYVnBjbVZrU1c1d2RYUTZJRVoxYm1OMGFXOXVRMjl0Y0c5dVpXNTBQSHRjYmlBZ2NtVmhaRzl1YkhrZ2JtRnRaVDg2SUhOMGNtbHVaenRjYmlBZ2NtVmhaRzl1YkhrZ2IyNUdiMk4xY3pvZ1JtOWpkWE5GZG1WdWRFaGhibVJzWlhJOFNGUk5URWx1Y0hWMFJXeGxiV1Z1ZEQ0N1hHNTlQaUE5SUNoN0lHNWhiV1VzSUc5dVJtOWpkWE1nZlNrZ1BUNGdLRnh1SUNBOGFXNXdkWFJjYmlBZ0lDQnlaWEYxYVhKbFpGeHVJQ0FnSUc1aGJXVTllMjVoYldWOVhHNGdJQ0FnZEdGaVNXNWtaWGc5ZXkweGZWeHVJQ0FnSUdGeWFXRXRhR2xrWkdWdVBWd2lkSEoxWlZ3aVhHNGdJQ0FnYjI1R2IyTjFjejE3YjI1R2IyTjFjMzFjYmlBZ0lDQmpjM005ZTN0Y2JpQWdJQ0FnSUd4aFltVnNPaUFuY21WeGRXbHlaV1JKYm5CMWRDY3NYRzRnSUNBZ0lDQnZjR0ZqYVhSNU9pQXdMRnh1SUNBZ0lDQWdjRzlwYm5SbGNrVjJaVzUwY3pvZ0oyNXZibVVuTEZ4dUlDQWdJQ0FnY0c5emFYUnBiMjQ2SUNkaFluTnZiSFYwWlNjc1hHNGdJQ0FnSUNCaWIzUjBiMjA2SURBc1hHNGdJQ0FnSUNCc1pXWjBPaUF3TEZ4dUlDQWdJQ0FnY21sbmFIUTZJREFzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUgxOVhHNGdJQ0FnTHk4Z1VISmxkbVZ1ZENCZ1UzZHBkR05vYVc1bklHWnliMjBnZFc1amIyNTBjbTlzYkdWa0lIUnZJR052Ym5SeWIyeHNaV1JnSUdWeWNtOXlYRzRnSUNBZ2RtRnNkV1U5WENKY0lseHVJQ0FnSUc5dVEyaGhibWRsUFhzb0tTQTlQaUI3ZlgxY2JpQWdMejVjYmlrN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElGSmxjWFZwY21Wa1NXNXdkWFE3WEc0aVhYMD0gKi9cIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIFJlcXVpcmVkSW5wdXQgPSBmdW5jdGlvbiBSZXF1aXJlZElucHV0KF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cztcbiAgcmV0dXJuIGpzeChcImlucHV0XCIsIHtcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgY3NzOiBfcmVmMlxuICAgIC8vIFByZXZlbnQgYFN3aXRjaGluZyBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkYCBlcnJvclxuICAgICxcbiAgICB2YWx1ZTogXCJcIixcbiAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoKSB7fVxuICB9KTtcbn07XG52YXIgUmVxdWlyZWRJbnB1dCQxID0gUmVxdWlyZWRJbnB1dDtcblxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ1c2VyLWFnZW50LWRhdGEtdHlwZXNcIiAvPlxuXG5mdW5jdGlvbiB0ZXN0UGxhdGZvcm0ocmUpIHtcbiAgdmFyIF93aW5kb3ckbmF2aWdhdG9yJHVzZTtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgIT0gbnVsbCA/IHJlLnRlc3QoKChfd2luZG93JG5hdmlnYXRvciR1c2UgPSB3aW5kb3cubmF2aWdhdG9yWyd1c2VyQWdlbnREYXRhJ10pID09PSBudWxsIHx8IF93aW5kb3ckbmF2aWdhdG9yJHVzZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3dpbmRvdyRuYXZpZ2F0b3IkdXNlLnBsYXRmb3JtKSB8fCB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSA6IGZhbHNlO1xufVxuZnVuY3Rpb24gaXNJUGhvbmUoKSB7XG4gIHJldHVybiB0ZXN0UGxhdGZvcm0oL15pUGhvbmUvaSk7XG59XG5mdW5jdGlvbiBpc01hYygpIHtcbiAgcmV0dXJuIHRlc3RQbGF0Zm9ybSgvXk1hYy9pKTtcbn1cbmZ1bmN0aW9uIGlzSVBhZCgpIHtcbiAgcmV0dXJuIHRlc3RQbGF0Zm9ybSgvXmlQYWQvaSkgfHxcbiAgLy8gaVBhZE9TIDEzIGxpZXMgYW5kIHNheXMgaXQncyBhIE1hYywgYnV0IHdlIGNhbiBkaXN0aW5ndWlzaCBieSBkZXRlY3RpbmcgdG91Y2ggc3VwcG9ydC5cbiAgaXNNYWMoKSAmJiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAxO1xufVxuZnVuY3Rpb24gaXNJT1MoKSB7XG4gIHJldHVybiBpc0lQaG9uZSgpIHx8IGlzSVBhZCgpO1xufVxuZnVuY3Rpb24gaXNBcHBsZURldmljZSgpIHtcbiAgcmV0dXJuIGlzTWFjKCkgfHwgaXNJT1MoKTtcbn1cblxudmFyIGZvcm1hdEdyb3VwTGFiZWwgPSBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGdyb3VwKSB7XG4gIHJldHVybiBncm91cC5sYWJlbDtcbn07XG52YXIgZ2V0T3B0aW9uTGFiZWwkMSA9IGZ1bmN0aW9uIGdldE9wdGlvbkxhYmVsKG9wdGlvbikge1xuICByZXR1cm4gb3B0aW9uLmxhYmVsO1xufTtcbnZhciBnZXRPcHRpb25WYWx1ZSQxID0gZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSB7XG4gIHJldHVybiBvcHRpb24udmFsdWU7XG59O1xudmFyIGlzT3B0aW9uRGlzYWJsZWQgPSBmdW5jdGlvbiBpc09wdGlvbkRpc2FibGVkKG9wdGlvbikge1xuICByZXR1cm4gISFvcHRpb24uaXNEaXNhYmxlZDtcbn07XG5cbnZhciBkZWZhdWx0U3R5bGVzID0ge1xuICBjbGVhckluZGljYXRvcjogY2xlYXJJbmRpY2F0b3JDU1MsXG4gIGNvbnRhaW5lcjogY29udGFpbmVyQ1NTLFxuICBjb250cm9sOiBjc3MkMSxcbiAgZHJvcGRvd25JbmRpY2F0b3I6IGRyb3Bkb3duSW5kaWNhdG9yQ1NTLFxuICBncm91cDogZ3JvdXBDU1MsXG4gIGdyb3VwSGVhZGluZzogZ3JvdXBIZWFkaW5nQ1NTLFxuICBpbmRpY2F0b3JzQ29udGFpbmVyOiBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTLFxuICBpbmRpY2F0b3JTZXBhcmF0b3I6IGluZGljYXRvclNlcGFyYXRvckNTUyxcbiAgaW5wdXQ6IGlucHV0Q1NTLFxuICBsb2FkaW5nSW5kaWNhdG9yOiBsb2FkaW5nSW5kaWNhdG9yQ1NTLFxuICBsb2FkaW5nTWVzc2FnZTogbG9hZGluZ01lc3NhZ2VDU1MsXG4gIG1lbnU6IG1lbnVDU1MsXG4gIG1lbnVMaXN0OiBtZW51TGlzdENTUyxcbiAgbWVudVBvcnRhbDogbWVudVBvcnRhbENTUyxcbiAgbXVsdGlWYWx1ZTogbXVsdGlWYWx1ZUNTUyxcbiAgbXVsdGlWYWx1ZUxhYmVsOiBtdWx0aVZhbHVlTGFiZWxDU1MsXG4gIG11bHRpVmFsdWVSZW1vdmU6IG11bHRpVmFsdWVSZW1vdmVDU1MsXG4gIG5vT3B0aW9uc01lc3NhZ2U6IG5vT3B0aW9uc01lc3NhZ2VDU1MsXG4gIG9wdGlvbjogb3B0aW9uQ1NTLFxuICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJDU1MsXG4gIHNpbmdsZVZhbHVlOiBjc3MkMixcbiAgdmFsdWVDb250YWluZXI6IHZhbHVlQ29udGFpbmVyQ1NTXG59O1xuLy8gTWVyZ2UgVXRpbGl0eVxuLy8gQWxsb3dzIGNvbnN1bWVycyB0byBleHRlbmQgYSBiYXNlIFNlbGVjdCB3aXRoIGFkZGl0aW9uYWwgc3R5bGVzXG5cbmZ1bmN0aW9uIG1lcmdlU3R5bGVzKHNvdXJjZSkge1xuICB2YXIgdGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgLy8gaW5pdGlhbGl6ZSB3aXRoIHNvdXJjZSBzdHlsZXNcbiAgdmFyIHN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe30sIHNvdXJjZSk7XG5cbiAgLy8gbWFzc2FnZSBpbiB0YXJnZXQgc3R5bGVzXG4gIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5QXNTdHJpbmcpIHtcbiAgICB2YXIga2V5ID0ga2V5QXNTdHJpbmc7XG4gICAgaWYgKHNvdXJjZVtrZXldKSB7XG4gICAgICBzdHlsZXNba2V5XSA9IGZ1bmN0aW9uIChyc0NzcywgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldKHNvdXJjZVtrZXldKHJzQ3NzLCBwcm9wcyksIHByb3BzKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc1trZXldID0gdGFyZ2V0W2tleV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHN0eWxlcztcbn1cblxudmFyIGNvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMyNjg0RkYnLFxuICBwcmltYXJ5NzU6ICcjNEM5QUZGJyxcbiAgcHJpbWFyeTUwOiAnI0IyRDRGRicsXG4gIHByaW1hcnkyNTogJyNERUVCRkYnLFxuICBkYW5nZXI6ICcjREUzNTBCJyxcbiAgZGFuZ2VyTGlnaHQ6ICcjRkZCREFEJyxcbiAgbmV1dHJhbDA6ICdoc2woMCwgMCUsIDEwMCUpJyxcbiAgbmV1dHJhbDU6ICdoc2woMCwgMCUsIDk1JSknLFxuICBuZXV0cmFsMTA6ICdoc2woMCwgMCUsIDkwJSknLFxuICBuZXV0cmFsMjA6ICdoc2woMCwgMCUsIDgwJSknLFxuICBuZXV0cmFsMzA6ICdoc2woMCwgMCUsIDcwJSknLFxuICBuZXV0cmFsNDA6ICdoc2woMCwgMCUsIDYwJSknLFxuICBuZXV0cmFsNTA6ICdoc2woMCwgMCUsIDUwJSknLFxuICBuZXV0cmFsNjA6ICdoc2woMCwgMCUsIDQwJSknLFxuICBuZXV0cmFsNzA6ICdoc2woMCwgMCUsIDMwJSknLFxuICBuZXV0cmFsODA6ICdoc2woMCwgMCUsIDIwJSknLFxuICBuZXV0cmFsOTA6ICdoc2woMCwgMCUsIDEwJSknXG59O1xudmFyIGJvcmRlclJhZGl1cyA9IDQ7XG4vLyBVc2VkIHRvIGNhbGN1bGF0ZSBjb25zaXN0ZW50IG1hcmdpbi9wYWRkaW5nIG9uIGVsZW1lbnRzXG52YXIgYmFzZVVuaXQgPSA0O1xuLy8gVGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBjb250cm9sXG52YXIgY29udHJvbEhlaWdodCA9IDM4O1xuLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBjb250cm9sIGFuZCBtZW51ICovXG52YXIgbWVudUd1dHRlciA9IGJhc2VVbml0ICogMjtcbnZhciBzcGFjaW5nID0ge1xuICBiYXNlVW5pdDogYmFzZVVuaXQsXG4gIGNvbnRyb2xIZWlnaHQ6IGNvbnRyb2xIZWlnaHQsXG4gIG1lbnVHdXR0ZXI6IG1lbnVHdXR0ZXJcbn07XG52YXIgZGVmYXVsdFRoZW1lID0ge1xuICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyxcbiAgY29sb3JzOiBjb2xvcnMsXG4gIHNwYWNpbmc6IHNwYWNpbmdcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gICdhcmlhLWxpdmUnOiAncG9saXRlJyxcbiAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlOiB0cnVlLFxuICBibHVySW5wdXRPblNlbGVjdDogaXNUb3VjaENhcGFibGUoKSxcbiAgY2FwdHVyZU1lbnVTY3JvbGw6ICFpc1RvdWNoQ2FwYWJsZSgpLFxuICBjbGFzc05hbWVzOiB7fSxcbiAgY2xvc2VNZW51T25TZWxlY3Q6IHRydWUsXG4gIGNsb3NlTWVudU9uU2Nyb2xsOiBmYWxzZSxcbiAgY29tcG9uZW50czoge30sXG4gIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZTogdHJ1ZSxcbiAgZXNjYXBlQ2xlYXJzVmFsdWU6IGZhbHNlLFxuICBmaWx0ZXJPcHRpb246IGNyZWF0ZUZpbHRlcigpLFxuICBmb3JtYXRHcm91cExhYmVsOiBmb3JtYXRHcm91cExhYmVsLFxuICBnZXRPcHRpb25MYWJlbDogZ2V0T3B0aW9uTGFiZWwkMSxcbiAgZ2V0T3B0aW9uVmFsdWU6IGdldE9wdGlvblZhbHVlJDEsXG4gIGlzRGlzYWJsZWQ6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBpc011bHRpOiBmYWxzZSxcbiAgaXNSdGw6IGZhbHNlLFxuICBpc1NlYXJjaGFibGU6IHRydWUsXG4gIGlzT3B0aW9uRGlzYWJsZWQ6IGlzT3B0aW9uRGlzYWJsZWQsXG4gIGxvYWRpbmdNZXNzYWdlOiBmdW5jdGlvbiBsb2FkaW5nTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gJ0xvYWRpbmcuLi4nO1xuICB9LFxuICBtYXhNZW51SGVpZ2h0OiAzMDAsXG4gIG1pbk1lbnVIZWlnaHQ6IDE0MCxcbiAgbWVudUlzT3BlbjogZmFsc2UsXG4gIG1lbnVQbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtZW51UG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG1lbnVTaG91bGRCbG9ja1Njcm9sbDogZmFsc2UsXG4gIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldzogIWlzTW9iaWxlRGV2aWNlKCksXG4gIG5vT3B0aW9uc01lc3NhZ2U6IGZ1bmN0aW9uIG5vT3B0aW9uc01lc3NhZ2UoKSB7XG4gICAgcmV0dXJuICdObyBvcHRpb25zJztcbiAgfSxcbiAgb3Blbk1lbnVPbkZvY3VzOiBmYWxzZSxcbiAgb3Blbk1lbnVPbkNsaWNrOiB0cnVlLFxuICBvcHRpb25zOiBbXSxcbiAgcGFnZVNpemU6IDUsXG4gIHBsYWNlaG9sZGVyOiAnU2VsZWN0Li4uJyxcbiAgc2NyZWVuUmVhZGVyU3RhdHVzOiBmdW5jdGlvbiBzY3JlZW5SZWFkZXJTdGF0dXMoX3JlZikge1xuICAgIHZhciBjb3VudCA9IF9yZWYuY291bnQ7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGNvdW50LCBcIiByZXN1bHRcIikuY29uY2F0KGNvdW50ICE9PSAxID8gJ3MnIDogJycsIFwiIGF2YWlsYWJsZVwiKTtcbiAgfSxcbiAgc3R5bGVzOiB7fSxcbiAgdGFiSW5kZXg6IDAsXG4gIHRhYlNlbGVjdHNWYWx1ZTogdHJ1ZSxcbiAgdW5zdHlsZWQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gdG9DYXRlZ29yaXplZE9wdGlvbihwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSwgaW5kZXgpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNPcHRpb25EaXNhYmxlZChwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG4gIHZhciBpc1NlbGVjdGVkID0gX2lzT3B0aW9uU2VsZWN0ZWQocHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICB2YXIgbGFiZWwgPSBnZXRPcHRpb25MYWJlbChwcm9wcywgb3B0aW9uKTtcbiAgdmFyIHZhbHVlID0gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIG9wdGlvbik7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ29wdGlvbicsXG4gICAgZGF0YTogb3B0aW9uLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICBsYWJlbDogbGFiZWwsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xufVxuZnVuY3Rpb24gYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSB7XG4gIHJldHVybiBwcm9wcy5vcHRpb25zLm1hcChmdW5jdGlvbiAoZ3JvdXBPck9wdGlvbiwgZ3JvdXBPck9wdGlvbkluZGV4KSB7XG4gICAgaWYgKCdvcHRpb25zJyBpbiBncm91cE9yT3B0aW9uKSB7XG4gICAgICB2YXIgY2F0ZWdvcml6ZWRPcHRpb25zID0gZ3JvdXBPck9wdGlvbi5vcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uLCBvcHRpb25JbmRleCkge1xuICAgICAgICByZXR1cm4gdG9DYXRlZ29yaXplZE9wdGlvbihwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSwgb3B0aW9uSW5kZXgpO1xuICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChjYXRlZ29yaXplZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gaXNGb2N1c2FibGUocHJvcHMsIGNhdGVnb3JpemVkT3B0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNhdGVnb3JpemVkT3B0aW9ucy5sZW5ndGggPiAwID8ge1xuICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICBkYXRhOiBncm91cE9yT3B0aW9uLFxuICAgICAgICBvcHRpb25zOiBjYXRlZ29yaXplZE9wdGlvbnMsXG4gICAgICAgIGluZGV4OiBncm91cE9yT3B0aW9uSW5kZXhcbiAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBjYXRlZ29yaXplZE9wdGlvbiA9IHRvQ2F0ZWdvcml6ZWRPcHRpb24ocHJvcHMsIGdyb3VwT3JPcHRpb24sIHNlbGVjdFZhbHVlLCBncm91cE9yT3B0aW9uSW5kZXgpO1xuICAgIHJldHVybiBpc0ZvY3VzYWJsZShwcm9wcywgY2F0ZWdvcml6ZWRPcHRpb24pID8gY2F0ZWdvcml6ZWRPcHRpb24gOiB1bmRlZmluZWQ7XG4gIH0pLmZpbHRlcihub3ROdWxsaXNoKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMoY2F0ZWdvcml6ZWRPcHRpb25zKSB7XG4gIHJldHVybiBjYXRlZ29yaXplZE9wdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zQWNjdW11bGF0b3IsIGNhdGVnb3JpemVkT3B0aW9uKSB7XG4gICAgaWYgKGNhdGVnb3JpemVkT3B0aW9uLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgIG9wdGlvbnNBY2N1bXVsYXRvci5wdXNoLmFwcGx5KG9wdGlvbnNBY2N1bXVsYXRvciwgX3RvQ29uc3VtYWJsZUFycmF5KGNhdGVnb3JpemVkT3B0aW9uLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5kYXRhO1xuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uc0FjY3VtdWxhdG9yLnB1c2goY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zQWNjdW11bGF0b3I7XG4gIH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMoY2F0ZWdvcml6ZWRPcHRpb25zLCBvcHRpb25JZCkge1xuICByZXR1cm4gY2F0ZWdvcml6ZWRPcHRpb25zLnJlZHVjZShmdW5jdGlvbiAob3B0aW9uc0FjY3VtdWxhdG9yLCBjYXRlZ29yaXplZE9wdGlvbikge1xuICAgIGlmIChjYXRlZ29yaXplZE9wdGlvbi50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICBvcHRpb25zQWNjdW11bGF0b3IucHVzaC5hcHBseShvcHRpb25zQWNjdW11bGF0b3IsIF90b0NvbnN1bWFibGVBcnJheShjYXRlZ29yaXplZE9wdGlvbi5vcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogb3B0aW9uLmRhdGEsXG4gICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KG9wdGlvbklkLCBcIi1cIikuY29uY2F0KGNhdGVnb3JpemVkT3B0aW9uLmluZGV4LCBcIi1cIikuY29uY2F0KG9wdGlvbi5pbmRleClcbiAgICAgICAgfTtcbiAgICAgIH0pKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNBY2N1bXVsYXRvci5wdXNoKHtcbiAgICAgICAgZGF0YTogY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KG9wdGlvbklkLCBcIi1cIikuY29uY2F0KGNhdGVnb3JpemVkT3B0aW9uLmluZGV4KVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zQWNjdW11bGF0b3I7XG4gIH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpIHtcbiAgcmV0dXJuIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMoYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSk7XG59XG5mdW5jdGlvbiBpc0ZvY3VzYWJsZShwcm9wcywgY2F0ZWdvcml6ZWRPcHRpb24pIHtcbiAgdmFyIF9wcm9wcyRpbnB1dFZhbHVlID0gcHJvcHMuaW5wdXRWYWx1ZSxcbiAgICBpbnB1dFZhbHVlID0gX3Byb3BzJGlucHV0VmFsdWUgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGlucHV0VmFsdWU7XG4gIHZhciBkYXRhID0gY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSxcbiAgICBpc1NlbGVjdGVkID0gY2F0ZWdvcml6ZWRPcHRpb24uaXNTZWxlY3RlZCxcbiAgICBsYWJlbCA9IGNhdGVnb3JpemVkT3B0aW9uLmxhYmVsLFxuICAgIHZhbHVlID0gY2F0ZWdvcml6ZWRPcHRpb24udmFsdWU7XG4gIHJldHVybiAoIXNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMocHJvcHMpIHx8ICFpc1NlbGVjdGVkKSAmJiBfZmlsdGVyT3B0aW9uKHByb3BzLCB7XG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBkYXRhOiBkYXRhXG4gIH0sIGlucHV0VmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEZvY3VzZWRWYWx1ZShzdGF0ZSwgbmV4dFNlbGVjdFZhbHVlKSB7XG4gIHZhciBmb2N1c2VkVmFsdWUgPSBzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgbGFzdFNlbGVjdFZhbHVlID0gc3RhdGUuc2VsZWN0VmFsdWU7XG4gIHZhciBsYXN0Rm9jdXNlZEluZGV4ID0gbGFzdFNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcbiAgaWYgKGxhc3RGb2N1c2VkSW5kZXggPiAtMSkge1xuICAgIHZhciBuZXh0Rm9jdXNlZEluZGV4ID0gbmV4dFNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcbiAgICBpZiAobmV4dEZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICAvLyB0aGUgZm9jdXNlZCB2YWx1ZSBpcyBzdGlsbCBpbiB0aGUgc2VsZWN0VmFsdWUsIHJldHVybiBpdFxuICAgICAgcmV0dXJuIGZvY3VzZWRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGxhc3RGb2N1c2VkSW5kZXggPCBuZXh0U2VsZWN0VmFsdWUubGVuZ3RoKSB7XG4gICAgICAvLyB0aGUgZm9jdXNlZFZhbHVlIGlzIG5vdCBwcmVzZW50IGluIHRoZSBuZXh0IHNlbGVjdFZhbHVlIGFycmF5IGJ5XG4gICAgICAvLyByZWZlcmVuY2UsIHNvIHJldHVybiB0aGUgbmV3IHZhbHVlIGF0IHRoZSBzYW1lIGluZGV4XG4gICAgICByZXR1cm4gbmV4dFNlbGVjdFZhbHVlW2xhc3RGb2N1c2VkSW5kZXhdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldE5leHRGb2N1c2VkT3B0aW9uKHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBsYXN0Rm9jdXNlZE9wdGlvbiA9IHN0YXRlLmZvY3VzZWRPcHRpb247XG4gIHJldHVybiBsYXN0Rm9jdXNlZE9wdGlvbiAmJiBvcHRpb25zLmluZGV4T2YobGFzdEZvY3VzZWRPcHRpb24pID4gLTEgPyBsYXN0Rm9jdXNlZE9wdGlvbiA6IG9wdGlvbnNbMF07XG59XG52YXIgZ2V0Rm9jdXNlZE9wdGlvbklkID0gZnVuY3Rpb24gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKSB7XG4gIHZhciBfZm9jdXNhYmxlT3B0aW9uc1dpdGg7XG4gIHZhciBmb2N1c2VkT3B0aW9uSWQgPSAoX2ZvY3VzYWJsZU9wdGlvbnNXaXRoID0gZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMuZmluZChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5kYXRhID09PSBmb2N1c2VkT3B0aW9uO1xuICB9KSkgPT09IG51bGwgfHwgX2ZvY3VzYWJsZU9wdGlvbnNXaXRoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZm9jdXNhYmxlT3B0aW9uc1dpdGguaWQ7XG4gIHJldHVybiBmb2N1c2VkT3B0aW9uSWQgfHwgbnVsbDtcbn07XG52YXIgZ2V0T3B0aW9uTGFiZWwgPSBmdW5jdGlvbiBnZXRPcHRpb25MYWJlbChwcm9wcywgZGF0YSkge1xuICByZXR1cm4gcHJvcHMuZ2V0T3B0aW9uTGFiZWwoZGF0YSk7XG59O1xudmFyIGdldE9wdGlvblZhbHVlID0gZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIGRhdGEpIHtcbiAgcmV0dXJuIHByb3BzLmdldE9wdGlvblZhbHVlKGRhdGEpO1xufTtcbmZ1bmN0aW9uIF9pc09wdGlvbkRpc2FibGVkKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgcHJvcHMuaXNPcHRpb25EaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BzLmlzT3B0aW9uRGlzYWJsZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkgOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIF9pc09wdGlvblNlbGVjdGVkKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gIGlmIChzZWxlY3RWYWx1ZS5pbmRleE9mKG9wdGlvbikgPiAtMSkgcmV0dXJuIHRydWU7XG4gIGlmICh0eXBlb2YgcHJvcHMuaXNPcHRpb25TZWxlY3RlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcm9wcy5pc09wdGlvblNlbGVjdGVkKG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICB9XG4gIHZhciBjYW5kaWRhdGUgPSBnZXRPcHRpb25WYWx1ZShwcm9wcywgb3B0aW9uKTtcbiAgcmV0dXJuIHNlbGVjdFZhbHVlLnNvbWUoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIGkpID09PSBjYW5kaWRhdGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gX2ZpbHRlck9wdGlvbihwcm9wcywgb3B0aW9uLCBpbnB1dFZhbHVlKSB7XG4gIHJldHVybiBwcm9wcy5maWx0ZXJPcHRpb24gPyBwcm9wcy5maWx0ZXJPcHRpb24ob3B0aW9uLCBpbnB1dFZhbHVlKSA6IHRydWU7XG59XG52YXIgc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyA9IGZ1bmN0aW9uIHNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMocHJvcHMpIHtcbiAgdmFyIGhpZGVTZWxlY3RlZE9wdGlvbnMgPSBwcm9wcy5oaWRlU2VsZWN0ZWRPcHRpb25zLFxuICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpO1xuICBpZiAoaGlkZVNlbGVjdGVkT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gaXNNdWx0aTtcbiAgcmV0dXJuIGhpZGVTZWxlY3RlZE9wdGlvbnM7XG59O1xudmFyIGluc3RhbmNlSWQgPSAxO1xudmFyIFNlbGVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2VsZWN0LCBfQ29tcG9uZW50KTtcbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTZWxlY3QpO1xuICAvLyBNaXNjLiBJbnN0YW5jZSBQcm9wZXJ0aWVzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRPRE9cblxuICAvLyBSZWZzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIExpZmVjeWNsZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBmdW5jdGlvbiBTZWxlY3QoX3Byb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWxlY3QpO1xuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgX3Byb3BzKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGFyaWFTZWxlY3Rpb246IG51bGwsXG4gICAgICBmb2N1c2VkT3B0aW9uOiBudWxsLFxuICAgICAgZm9jdXNlZE9wdGlvbklkOiBudWxsLFxuICAgICAgZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHM6IFtdLFxuICAgICAgZm9jdXNlZFZhbHVlOiBudWxsLFxuICAgICAgaW5wdXRJc0hpZGRlbjogZmFsc2UsXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0VmFsdWU6IFtdLFxuICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGU6IGZhbHNlLFxuICAgICAgcHJldldhc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiB1bmRlZmluZWQsXG4gICAgICBwcmV2UHJvcHM6IHVuZGVmaW5lZCxcbiAgICAgIGluc3RhbmNlUHJlZml4OiAnJ1xuICAgIH07XG4gICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IGZhbHNlO1xuICAgIF90aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgX3RoaXMuY29tbW9uUHJvcHMgPSB2b2lkIDA7XG4gICAgX3RoaXMuaW5pdGlhbFRvdWNoWCA9IDA7XG4gICAgX3RoaXMuaW5pdGlhbFRvdWNoWSA9IDA7XG4gICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICBfdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9IGZhbHNlO1xuICAgIF90aGlzLnVzZXJJc0RyYWdnaW5nID0gdm9pZCAwO1xuICAgIF90aGlzLmlzQXBwbGVEZXZpY2UgPSBpc0FwcGxlRGV2aWNlKCk7XG4gICAgX3RoaXMuY29udHJvbFJlZiA9IG51bGw7XG4gICAgX3RoaXMuZ2V0Q29udHJvbFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmNvbnRyb2xSZWYgPSByZWY7XG4gICAgfTtcbiAgICBfdGhpcy5mb2N1c2VkT3B0aW9uUmVmID0gbnVsbDtcbiAgICBfdGhpcy5nZXRGb2N1c2VkT3B0aW9uUmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuZm9jdXNlZE9wdGlvblJlZiA9IHJlZjtcbiAgICB9O1xuICAgIF90aGlzLm1lbnVMaXN0UmVmID0gbnVsbDtcbiAgICBfdGhpcy5nZXRNZW51TGlzdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLm1lbnVMaXN0UmVmID0gcmVmO1xuICAgIH07XG4gICAgX3RoaXMuaW5wdXRSZWYgPSBudWxsO1xuICAgIF90aGlzLmdldElucHV0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuaW5wdXRSZWYgPSByZWY7XG4gICAgfTtcbiAgICBfdGhpcy5mb2N1cyA9IF90aGlzLmZvY3VzSW5wdXQ7XG4gICAgX3RoaXMuYmx1ciA9IF90aGlzLmJsdXJJbnB1dDtcbiAgICBfdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wcy5uYW1lO1xuICAgICAgYWN0aW9uTWV0YS5uYW1lID0gbmFtZTtcbiAgICAgIF90aGlzLmFyaWFPbkNoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgICBvbkNoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfTtcbiAgICBfdGhpcy5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgYWN0aW9uLCBvcHRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgY2xvc2VNZW51T25TZWxlY3QgPSBfdGhpcyRwcm9wczIuY2xvc2VNZW51T25TZWxlY3QsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczIuaXNNdWx0aSxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMi5pbnB1dFZhbHVlO1xuICAgICAgX3RoaXMub25JbnB1dENoYW5nZSgnJywge1xuICAgICAgICBhY3Rpb246ICdzZXQtdmFsdWUnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoY2xvc2VNZW51T25TZWxlY3QpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogIWlzTXVsdGlcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICB9XG4gICAgICAvLyB3aGVuIHRoZSBzZWxlY3QgdmFsdWUgc2hvdWxkIGNoYW5nZSwgd2Ugc2hvdWxkIHJlc2V0IGZvY3VzZWRWYWx1ZVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSwge1xuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgb3B0aW9uOiBvcHRpb25cbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMuc2VsZWN0T3B0aW9uID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGJsdXJJbnB1dE9uU2VsZWN0ID0gX3RoaXMkcHJvcHMzLmJsdXJJbnB1dE9uU2VsZWN0LFxuICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMzLmlzTXVsdGksXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczMubmFtZTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGRlc2VsZWN0ZWQgPSBpc011bHRpICYmIF90aGlzLmlzT3B0aW9uU2VsZWN0ZWQobmV3VmFsdWUsIHNlbGVjdFZhbHVlKTtcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gX3RoaXMuaXNPcHRpb25EaXNhYmxlZChuZXdWYWx1ZSwgc2VsZWN0VmFsdWUpO1xuICAgICAgaWYgKGRlc2VsZWN0ZWQpIHtcbiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF90aGlzLmdldE9wdGlvblZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgX3RoaXMuc2V0VmFsdWUobXVsdGlWYWx1ZUFzVmFsdWUoc2VsZWN0VmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmdldE9wdGlvblZhbHVlKGkpICE9PSBjYW5kaWRhdGU7XG4gICAgICAgIH0pKSwgJ2Rlc2VsZWN0LW9wdGlvbicsIG5ld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gU2VsZWN0IG9wdGlvbiBpZiBvcHRpb24gaXMgbm90IGRpc2FibGVkXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0VmFsdWUobXVsdGlWYWx1ZUFzVmFsdWUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzZWxlY3RWYWx1ZSksIFtuZXdWYWx1ZV0pKSwgJ3NlbGVjdC1vcHRpb24nLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuc2V0VmFsdWUoc2luZ2xlVmFsdWVBc1ZhbHVlKG5ld1ZhbHVlKSwgJ3NlbGVjdC1vcHRpb24nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYXJpYU9uQ2hhbmdlKHNpbmdsZVZhbHVlQXNWYWx1ZShuZXdWYWx1ZSksIHtcbiAgICAgICAgICBhY3Rpb246ICdzZWxlY3Qtb3B0aW9uJyxcbiAgICAgICAgICBvcHRpb246IG5ld1ZhbHVlLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChibHVySW5wdXRPblNlbGVjdCkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLnJlbW92ZVZhbHVlID0gZnVuY3Rpb24gKHJlbW92ZWRWYWx1ZSkge1xuICAgICAgdmFyIGlzTXVsdGkgPSBfdGhpcy5wcm9wcy5pc011bHRpO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgY2FuZGlkYXRlID0gX3RoaXMuZ2V0T3B0aW9uVmFsdWUocmVtb3ZlZFZhbHVlKTtcbiAgICAgIHZhciBuZXdWYWx1ZUFycmF5ID0gc2VsZWN0VmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5nZXRPcHRpb25WYWx1ZShpKSAhPT0gY2FuZGlkYXRlO1xuICAgICAgfSk7XG4gICAgICB2YXIgbmV3VmFsdWUgPSB2YWx1ZVRlcm5hcnkoaXNNdWx0aSwgbmV3VmFsdWVBcnJheSwgbmV3VmFsdWVBcnJheVswXSB8fCBudWxsKTtcbiAgICAgIF90aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLCB7XG4gICAgICAgIGFjdGlvbjogJ3JlbW92ZS12YWx1ZScsXG4gICAgICAgIHJlbW92ZWRWYWx1ZTogcmVtb3ZlZFZhbHVlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9O1xuICAgIF90aGlzLmNsZWFyVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIF90aGlzLm9uQ2hhbmdlKHZhbHVlVGVybmFyeShfdGhpcy5wcm9wcy5pc011bHRpLCBbXSwgbnVsbCksIHtcbiAgICAgICAgYWN0aW9uOiAnY2xlYXInLFxuICAgICAgICByZW1vdmVkVmFsdWVzOiBzZWxlY3RWYWx1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBfdGhpcy5wb3BWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpc011bHRpID0gX3RoaXMucHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGxhc3RTZWxlY3RlZFZhbHVlID0gc2VsZWN0VmFsdWVbc2VsZWN0VmFsdWUubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgbmV3VmFsdWVBcnJheSA9IHNlbGVjdFZhbHVlLnNsaWNlKDAsIHNlbGVjdFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdmFsdWVUZXJuYXJ5KGlzTXVsdGksIG5ld1ZhbHVlQXJyYXksIG5ld1ZhbHVlQXJyYXlbMF0gfHwgbnVsbCk7XG4gICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSwge1xuICAgICAgICBhY3Rpb246ICdwb3AtdmFsdWUnLFxuICAgICAgICByZW1vdmVkVmFsdWU6IGxhc3RTZWxlY3RlZFZhbHVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIF90aGlzLmdldEZvY3VzZWRPcHRpb25JZCA9IGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9jdXNlZE9wdGlvbklkKF90aGlzLnN0YXRlLmZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKTtcbiAgICB9O1xuICAgIF90aGlzLmdldEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMoYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMoX3RoaXMucHJvcHMsIF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlKSwgX3RoaXMuZ2V0RWxlbWVudElkKCdvcHRpb24nKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICB9O1xuICAgIF90aGlzLmN4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3NOYW1lcy5hcHBseSh2b2lkIDAsIFtfdGhpcy5wcm9wcy5jbGFzc05hbWVQcmVmaXhdLmNvbmNhdChhcmdzKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRPcHRpb25MYWJlbCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gZ2V0T3B0aW9uTGFiZWwoX3RoaXMucHJvcHMsIGRhdGEpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0T3B0aW9uVmFsdWUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIGdldE9wdGlvblZhbHVlKF90aGlzLnByb3BzLCBkYXRhKTtcbiAgICB9O1xuICAgIF90aGlzLmdldFN0eWxlcyA9IGZ1bmN0aW9uIChrZXksIHByb3BzKSB7XG4gICAgICB2YXIgdW5zdHlsZWQgPSBfdGhpcy5wcm9wcy51bnN0eWxlZDtcbiAgICAgIHZhciBiYXNlID0gZGVmYXVsdFN0eWxlc1trZXldKHByb3BzLCB1bnN0eWxlZCk7XG4gICAgICBiYXNlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICAgIHZhciBjdXN0b20gPSBfdGhpcy5wcm9wcy5zdHlsZXNba2V5XTtcbiAgICAgIHJldHVybiBjdXN0b20gPyBjdXN0b20oYmFzZSwgcHJvcHMpIDogYmFzZTtcbiAgICB9O1xuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAoa2V5LCBwcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGNsYXNzTmFtZSwgX3RoaXMkcHJvcHMkY2xhc3NOYW1lMjtcbiAgICAgIHJldHVybiAoX3RoaXMkcHJvcHMkY2xhc3NOYW1lID0gKF90aGlzJHByb3BzJGNsYXNzTmFtZTIgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzKVtrZXldKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRjbGFzc05hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJGNsYXNzTmFtZS5jYWxsKF90aGlzJHByb3BzJGNsYXNzTmFtZTIsIHByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoX3RoaXMuc3RhdGUuaW5zdGFuY2VQcmVmaXgsIFwiLVwiKS5jb25jYXQoZWxlbWVudCk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRDb21wb25lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb21wb25lbnRzKF90aGlzLnByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKF90aGlzLnByb3BzLCBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRDYXRlZ29yaXplZE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubWVudUlzT3BlbiA/IF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKCkgOiBbXTtcbiAgICB9O1xuICAgIF90aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBidWlsZEZvY3VzYWJsZU9wdGlvbnNGcm9tQ2F0ZWdvcml6ZWRPcHRpb25zKF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKCkpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5tZW51SXNPcGVuID8gX3RoaXMuYnVpbGRGb2N1c2FibGVPcHRpb25zKCkgOiBbXTtcbiAgICB9O1xuICAgIF90aGlzLmFyaWFPbkNoYW5nZSA9IGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhcmlhU2VsZWN0aW9uOiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSwgYWN0aW9uTWV0YSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMub25NZW51TW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9O1xuICAgIF90aGlzLm9uTWVudU1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IGZhbHNlO1xuICAgIH07XG4gICAgX3RoaXMub25Db250cm9sTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBFdmVudCBjYXB0dXJlZCBieSBkcm9wZG93biBpbmRpY2F0b3JcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvcGVuTWVudU9uQ2xpY2sgPSBfdGhpcy5wcm9wcy5vcGVuTWVudU9uQ2xpY2s7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICBpZiAob3Blbk1lbnVPbkNsaWNrKSB7XG4gICAgICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLnByb3BzLm1lbnVJc09wZW4pIHtcbiAgICAgICAgaWYgKG9wZW5NZW51T25DbGljaykge1xuICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSB0aGUgcHJpbWFyeSBidXR0b25cbiAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnByb3BzLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNC5pc011bHRpLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM0Lm1lbnVJc09wZW47XG4gICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiAhaXNNdWx0aVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSB0aGUgcHJpbWFyeSBidXR0b25cbiAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF90aGlzLm9wZW5BZnRlckZvY3VzID0gZmFsc2U7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uU2Nyb2xsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGlzRG9jdW1lbnRFbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5jbG9zZU1lbnVPblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuY2xvc2VNZW51T25TY3JvbGwoZXZlbnQpKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMub25Db21wb3NpdGlvblN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgIH07XG4gICAgX3RoaXMub25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgfTtcbiAgICBfdGhpcy5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB0b3VjaGVzID0gX3JlZjIudG91Y2hlcztcbiAgICAgIHZhciB0b3VjaCA9IHRvdWNoZXMgJiYgdG91Y2hlcy5pdGVtKDApO1xuICAgICAgaWYgKCF0b3VjaCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gdG91Y2guY2xpZW50WDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSB0b3VjaC5jbGllbnRZO1xuICAgICAgX3RoaXMudXNlcklzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgdG91Y2hlcyA9IF9yZWYzLnRvdWNoZXM7XG4gICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzICYmIHRvdWNoZXMuaXRlbSgwKTtcbiAgICAgIGlmICghdG91Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGRlbHRhWCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSBfdGhpcy5pbml0aWFsVG91Y2hYKTtcbiAgICAgIHZhciBkZWx0YVkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gX3RoaXMuaW5pdGlhbFRvdWNoWSk7XG4gICAgICB2YXIgbW92ZVRocmVzaG9sZCA9IDU7XG4gICAgICBfdGhpcy51c2VySXNEcmFnZ2luZyA9IGRlbHRhWCA+IG1vdmVUaHJlc2hvbGQgfHwgZGVsdGFZID4gbW92ZVRocmVzaG9sZDtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgICAvLyBjbG9zZSB0aGUgbWVudSBpZiB0aGUgdXNlciB0YXBzIG91dHNpZGVcbiAgICAgIC8vIHdlJ3JlIGNoZWNraW5nIG9uIGV2ZW50LnRhcmdldCBoZXJlIGluc3RlYWQgb2YgZXZlbnQuY3VycmVudFRhcmdldCwgYmVjYXVzZSB3ZSB3YW50IHRvIGFzc2VydCBpbmZvcm1hdGlvblxuICAgICAgLy8gb24gZXZlbnRzIG9uIGNoaWxkIGVsZW1lbnRzLCBub3QgdGhlIGRvY3VtZW50ICh3aGljaCB3ZSd2ZSBhdHRhY2hlZCB0aGlzIGhhbmRsZXIgdG8pLlxuICAgICAgaWYgKF90aGlzLmNvbnRyb2xSZWYgJiYgIV90aGlzLmNvbnRyb2xSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiBfdGhpcy5tZW51TGlzdFJlZiAmJiAhX3RoaXMubWVudUxpc3RSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVzZXQgbW92ZSB2YXJzXG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gMDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSAwO1xuICAgIH07XG4gICAgX3RoaXMub25Db250cm9sVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuICAgICAgX3RoaXMub25Db250cm9sTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkNsZWFySW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLmhhbmRsZUlucHV0Q2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldklucHV0VmFsdWUgPSBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgdmFyIGlucHV0VmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwge1xuICAgICAgICBhY3Rpb246ICdpbnB1dC1jaGFuZ2UnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogcHJldklucHV0VmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5tZW51SXNPcGVuKSB7XG4gICAgICAgIF90aGlzLm9uTWVudU9wZW4oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2UsXG4gICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoX3RoaXMub3BlbkFmdGVyRm9jdXMgfHwgX3RoaXMucHJvcHMub3Blbk1lbnVPbkZvY3VzKSB7XG4gICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgfVxuICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uSW5wdXRCbHVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldklucHV0VmFsdWUgPSBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgaWYgKF90aGlzLm1lbnVMaXN0UmVmICYmIF90aGlzLm1lbnVMaXN0UmVmLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIF90aGlzLmlucHV0UmVmLmZvY3VzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgYWN0aW9uOiAnaW5wdXQtYmx1cicsXG4gICAgICAgIHByZXZJbnB1dFZhbHVlOiBwcmV2SW5wdXRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkVmFsdWU6IG51bGwsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMub25PcHRpb25Ib3ZlciA9IGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICBpZiAoX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciB8fCBfdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uID09PSBmb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25zID0gX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb25JbmRleCA9IG9wdGlvbnMuaW5kZXhPZihmb2N1c2VkT3B0aW9uKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiBmb2N1c2VkT3B0aW9uSW5kZXggPiAtMSA/IF90aGlzLmdldEZvY3VzZWRPcHRpb25JZChmb2N1c2VkT3B0aW9uKSA6IG51bGxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMuc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zKF90aGlzLnByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLm9uVmFsdWVJbnB1dEZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBfdGhpcy5mb2N1cygpO1xuICAgIH07XG4gICAgX3RoaXMub25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczUuaXNNdWx0aSxcbiAgICAgICAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlID0gX3RoaXMkcHJvcHM1LmJhY2tzcGFjZVJlbW92ZXNWYWx1ZSxcbiAgICAgICAgZXNjYXBlQ2xlYXJzVmFsdWUgPSBfdGhpcyRwcm9wczUuZXNjYXBlQ2xlYXJzVmFsdWUsXG4gICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRwcm9wczUuaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczUuaXNDbGVhcmFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczUuaXNEaXNhYmxlZCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNS5tZW51SXNPcGVuLFxuICAgICAgICBvbktleURvd24gPSBfdGhpcyRwcm9wczUub25LZXlEb3duLFxuICAgICAgICB0YWJTZWxlY3RzVmFsdWUgPSBfdGhpcyRwcm9wczUudGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgICBvcGVuTWVudU9uRm9jdXMgPSBfdGhpcyRwcm9wczUub3Blbk1lbnVPbkZvY3VzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZS5mb2N1c2VkT3B0aW9uLFxuICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKHR5cGVvZiBvbktleURvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmxvY2sgb3B0aW9uIGhvdmVyIGV2ZW50cyB3aGVuIHRoZSB1c2VyIGhhcyBqdXN0IHByZXNzZWQgYSBrZXlcbiAgICAgIF90aGlzLmJsb2NrT3B0aW9uSG92ZXIgPSB0cnVlO1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICBpZiAoIWlzTXVsdGkgfHwgaW5wdXRWYWx1ZSkgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzVmFsdWUoJ3ByZXZpb3VzJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgIGlmICghaXNNdWx0aSB8fCBpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgX3RoaXMuZm9jdXNWYWx1ZSgnbmV4dCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgaWYgKGZvY3VzZWRWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMucmVtb3ZlVmFsdWUoZm9jdXNlZFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFiYWNrc3BhY2VSZW1vdmVzVmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICAgIF90aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2xlYXJhYmxlKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgaWYgKF90aGlzLmlzQ29tcG9zaW5nKSByZXR1cm47XG4gICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8ICFtZW51SXNPcGVuIHx8ICF0YWJTZWxlY3RzVmFsdWUgfHwgIWZvY3VzZWRPcHRpb24gfHxcbiAgICAgICAgICAvLyBkb24ndCBjYXB0dXJlIHRoZSBldmVudCBpZiB0aGUgbWVudSBvcGVucyBvbiBmb2N1cyBhbmQgdGhlIGZvY3VzZWRcbiAgICAgICAgICAvLyBvcHRpb24gaXMgYWxyZWFkeSBzZWxlY3RlZDsgaXQgYnJlYWtzIHRoZSBmbG93IG9mIG5hdmlnYXRpb25cbiAgICAgICAgICBvcGVuTWVudU9uRm9jdXMgJiYgX3RoaXMuaXNPcHRpb25TZWxlY3RlZChmb2N1c2VkT3B0aW9uLCBzZWxlY3RWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDIyOSkge1xuICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBrZXlkb3duIGV2ZW50IGZyb20gYW4gSW5wdXQgTWV0aG9kIEVkaXRvcihJTUUpXG4gICAgICAgICAgICAvLyByZWYuIGh0dHBzOi8vd3d3LnczLm9yZy9UUi91aWV2ZW50cy8jZGV0ZXJtaW5lLWtleWRvd24ta2V5dXAta2V5Q29kZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtZW51SXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHJldHVybjtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0NvbXBvc2luZykgcmV0dXJuO1xuICAgICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgICAgICAgYWN0aW9uOiAnbWVudS1jbG9zZScsXG4gICAgICAgICAgICAgIHByZXZJbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0NsZWFyYWJsZSAmJiBlc2NhcGVDbGVhcnNWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZm9jdXNlZE9wdGlvbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLnNlbGVjdE9wdGlvbihmb2N1c2VkT3B0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCd1cCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTWVudSgnbGFzdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ2Rvd24nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdldXAnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdlZG93bicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignZmlyc3QnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignbGFzdCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcbiAgICBfdGhpcy5zdGF0ZS5pbnN0YW5jZVByZWZpeCA9ICdyZWFjdC1zZWxlY3QtJyArIChfdGhpcy5wcm9wcy5pbnN0YW5jZUlkIHx8ICsraW5zdGFuY2VJZCk7XG4gICAgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUgPSBjbGVhblZhbHVlKF9wcm9wcy52YWx1ZSk7XG4gICAgLy8gU2V0IGZvY3VzZWRPcHRpb24gaWYgbWVudUlzT3BlbiBpcyBzZXQgb24gaW5pdCAoZS5nLiBkZWZhdWx0TWVudUlzT3BlbilcbiAgICBpZiAoX3Byb3BzLm1lbnVJc09wZW4gJiYgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMgPSBfdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zV2l0aElkcygpO1xuICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSBfdGhpcy5idWlsZEZvY3VzYWJsZU9wdGlvbnMoKTtcbiAgICAgIHZhciBvcHRpb25JbmRleCA9IGZvY3VzYWJsZU9wdGlvbnMuaW5kZXhPZihfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZVswXSk7XG4gICAgICBfdGhpcy5zdGF0ZS5mb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzO1xuICAgICAgX3RoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiA9IGZvY3VzYWJsZU9wdGlvbnNbb3B0aW9uSW5kZXhdO1xuICAgICAgX3RoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbklkID0gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2FibGVPcHRpb25zW29wdGlvbkluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfY3JlYXRlQ2xhc3MoU2VsZWN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc3RhcnRMaXN0ZW5pbmdDb21wb3NpdGlvbigpO1xuICAgICAgdGhpcy5zdGFydExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgLy8gTGlzdGVuIHRvIGFsbCBzY3JvbGwgZXZlbnRzLCBhbmQgZmlsdGVyIHRoZW0gb3V0IGluc2lkZSBvZiAnb25TY3JvbGwnXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTY3JvbGwgZm9jdXNlZE9wdGlvbiBpbnRvIHZpZXcgaWYgbWVudUlzT3BlbiBpcyBzZXQgb24gbW91bnQgKGUuZy4gZGVmYXVsdE1lbnVJc09wZW4pXG4gICAgICBpZiAodGhpcy5wcm9wcy5tZW51SXNPcGVuICYmIHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiAmJiB0aGlzLm1lbnVMaXN0UmVmICYmIHRoaXMuZm9jdXNlZE9wdGlvblJlZikge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczYuaXNEaXNhYmxlZCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNi5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKFxuICAgICAgLy8gZW5zdXJlIGZvY3VzIGlzIHJlc3RvcmVkIGNvcnJlY3RseSB3aGVuIHRoZSBjb250cm9sIGJlY29tZXMgZW5hYmxlZFxuICAgICAgaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkIHx8XG4gICAgICAvLyBlbnN1cmUgZm9jdXMgaXMgb24gdGhlIElucHV0IHdoZW4gdGhlIG1lbnUgb3BlbnNcbiAgICAgIGlzRm9jdXNlZCAmJiBtZW51SXNPcGVuICYmICFwcmV2UHJvcHMubWVudUlzT3Blbikge1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0ZvY3VzZWQgJiYgaXNEaXNhYmxlZCAmJiAhcHJldlByb3BzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHNlbGVjdCBzdGF0ZSBnZXRzIGJsdXJyZWQgaW4gY2FzZSBTZWxlY3QgaXMgcHJvZ3JhbW1hdGljYWxseSBkaXNhYmxlZCB3aGlsZSBmb2N1c2VkXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICAgIH0sIHRoaXMub25NZW51Q2xvc2UpO1xuICAgICAgfSBlbHNlIGlmICghaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkICYmIHRoaXMuaW5wdXRSZWYgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHNlbGVjdCBzdGF0ZSBnZXRzIGZvY3VzZWQgaW4gY2FzZSBTZWxlY3QgaXMgcHJvZ3JhbWF0aWNhbGx5IHJlLWVuYWJsZWQgd2hpbGUgZm9jdXNlZCAoRmlyZWZveClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2Nyb2xsIHRoZSBmb2N1c2VkIG9wdGlvbiBpbnRvIHZpZXcgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAodGhpcy5tZW51TGlzdFJlZiAmJiB0aGlzLmZvY3VzZWRPcHRpb25SZWYgJiYgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSkge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nQ29tcG9zaXRpb24oKTtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbnN1bWVyIEhhbmRsZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIH0sIHtcbiAgICBrZXk6IFwib25NZW51T3BlblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1lbnVPcGVuKCkge1xuICAgICAgdGhpcy5wcm9wcy5vbk1lbnVPcGVuKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uTWVudUNsb3NlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKCcnLCB7XG4gICAgICAgIGFjdGlvbjogJ21lbnUtY2xvc2UnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogdGhpcy5wcm9wcy5pbnB1dFZhbHVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25JbnB1dENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbklucHV0Q2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICB0aGlzLnByb3BzLm9uSW5wdXRDaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE1ldGhvZHNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c0lucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzSW5wdXQoKSB7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRSZWYpIHJldHVybjtcbiAgICAgIHRoaXMuaW5wdXRSZWYuZm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmx1cklucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJsdXJJbnB1dCgpIHtcbiAgICAgIGlmICghdGhpcy5pbnB1dFJlZikgcmV0dXJuO1xuICAgICAgdGhpcy5pbnB1dFJlZi5ibHVyKCk7XG4gICAgfVxuXG4gICAgLy8gYWxpYXNlZCBmb3IgY29uc3VtZXJzXG4gIH0sIHtcbiAgICBrZXk6IFwib3Blbk1lbnVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3Blbk1lbnUoZm9jdXNPcHRpb24pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUyLnNlbGVjdFZhbHVlLFxuICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRzdGF0ZTIuaXNGb2N1c2VkO1xuICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIG9wZW5BdEluZGV4ID0gZm9jdXNPcHRpb24gPT09ICdmaXJzdCcgPyAwIDogZm9jdXNhYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmlzTXVsdGkpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBmb2N1c2FibGVPcHRpb25zLmluZGV4T2Yoc2VsZWN0VmFsdWVbMF0pO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgb3BlbkF0SW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgc2Nyb2xsIGlmIHRoZSBtZW51IGlzbid0IGFscmVhZHkgb3BlblxuICAgICAgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9ICEoaXNGb2N1c2VkICYmIHRoaXMubWVudUxpc3RSZWYpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2UsXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNhYmxlT3B0aW9uc1tvcGVuQXRJbmRleF0sXG4gICAgICAgIGZvY3VzZWRPcHRpb25JZDogdGhpcy5nZXRGb2N1c2VkT3B0aW9uSWQoZm9jdXNhYmxlT3B0aW9uc1tvcGVuQXRJbmRleF0pXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub25NZW51T3BlbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNWYWx1ZShkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlMy5zZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGUzLmZvY3VzZWRWYWx1ZTtcblxuICAgICAgLy8gT25seSBtdWx0aXNlbGVjdHMgc3VwcG9ydCB2YWx1ZSBmb2N1c2luZ1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmlzTXVsdGkpIHJldHVybjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBzZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSk7XG4gICAgICBpZiAoIWZvY3VzZWRWYWx1ZSkge1xuICAgICAgICBmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBzZWxlY3RWYWx1ZS5sZW5ndGggLSAxO1xuICAgICAgdmFyIG5leHRGb2N1cyA9IC0xO1xuICAgICAgaWYgKCFzZWxlY3RWYWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkb24ndCBjeWNsZSBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kXG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gaWYgbm90aGluZyBpcyBmb2N1c2VkLCBmb2N1cyB0aGUgbGFzdCB2YWx1ZSBmaXJzdFxuICAgICAgICAgICAgbmV4dEZvY3VzID0gbGFzdEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA+IC0xICYmIGZvY3VzZWRJbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaW5wdXRJc0hpZGRlbjogbmV4dEZvY3VzICE9PSAtMSxcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBzZWxlY3RWYWx1ZVtuZXh0Rm9jdXNdXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNPcHRpb24oKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnZmlyc3QnO1xuICAgICAgdmFyIHBhZ2VTaXplID0gdGhpcy5wcm9wcy5wYWdlU2l6ZTtcbiAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldEZvY3VzYWJsZU9wdGlvbnMoKTtcbiAgICAgIGlmICghb3B0aW9ucy5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBuZXh0Rm9jdXMgPSAwOyAvLyBoYW5kbGVzICdmaXJzdCdcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBvcHRpb25zLmluZGV4T2YoZm9jdXNlZE9wdGlvbik7XG4gICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgZm9jdXNlZEluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCA+IDAgPyBmb2N1c2VkSW5kZXggLSAxIDogb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSAoZm9jdXNlZEluZGV4ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncGFnZXVwJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSBwYWdlU2l6ZTtcbiAgICAgICAgaWYgKG5leHRGb2N1cyA8IDApIG5leHRGb2N1cyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgICAgaWYgKG5leHRGb2N1cyA+IG9wdGlvbnMubGVuZ3RoIC0gMSkgbmV4dEZvY3VzID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsYXN0Jykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBvcHRpb25zW25leHRGb2N1c10sXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiB0aGlzLmdldEZvY3VzZWRPcHRpb25JZChvcHRpb25zW25leHRGb2N1c10pXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VGhlbWVcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBHZXR0ZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICBmdW5jdGlvbiBnZXRUaGVtZSgpIHtcbiAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCB0aGVtZSBpZiB0aGVyZSBhcmUgbm8gY3VzdG9taXNhdGlvbnMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMudGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRUaGVtZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSB0aGVtZSBwcm9wIGlzIGEgZnVuY3Rpb24sIGFzc3VtZSB0aGUgZnVuY3Rpb25cbiAgICAgIC8vIGtub3dzIGhvdyB0byBtZXJnZSB0aGUgcGFzc2VkLWluIGRlZmF1bHQgdGhlbWUgd2l0aFxuICAgICAgLy8gaXRzIG93biBtb2RpZmljYXRpb25zLlxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIGlmIGEgcGxhaW4gdGhlbWUgb2JqZWN0IHdhcyBwYXNzZWQgaW4sXG4gICAgICAvLyBvdmVybGF5IGl0IHdpdGggdGhlIGRlZmF1bHQgdGhlbWUuXG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkZWZhdWx0VGhlbWUpLCB0aGlzLnByb3BzLnRoZW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tbW9uUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tbW9uUHJvcHMoKSB7XG4gICAgICB2YXIgY2xlYXJWYWx1ZSA9IHRoaXMuY2xlYXJWYWx1ZSxcbiAgICAgICAgY3ggPSB0aGlzLmN4LFxuICAgICAgICBnZXRTdHlsZXMgPSB0aGlzLmdldFN0eWxlcyxcbiAgICAgICAgZ2V0Q2xhc3NOYW1lcyA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyxcbiAgICAgICAgZ2V0VmFsdWUgPSB0aGlzLmdldFZhbHVlLFxuICAgICAgICBzZWxlY3RPcHRpb24gPSB0aGlzLnNlbGVjdE9wdGlvbixcbiAgICAgICAgc2V0VmFsdWUgPSB0aGlzLnNldFZhbHVlLFxuICAgICAgICBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICB2YXIgaXNNdWx0aSA9IHByb3BzLmlzTXVsdGksXG4gICAgICAgIGlzUnRsID0gcHJvcHMuaXNSdGwsXG4gICAgICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICAgICAgdmFyIGhhc1ZhbHVlID0gdGhpcy5oYXNWYWx1ZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXJWYWx1ZTogY2xlYXJWYWx1ZSxcbiAgICAgICAgY3g6IGN4LFxuICAgICAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICAgICAgZ2V0Q2xhc3NOYW1lczogZ2V0Q2xhc3NOYW1lcyxcbiAgICAgICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgICAgICBoYXNWYWx1ZTogaGFzVmFsdWUsXG4gICAgICAgIGlzTXVsdGk6IGlzTXVsdGksXG4gICAgICAgIGlzUnRsOiBpc1J0bCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VsZWN0T3B0aW9uOiBzZWxlY3RPcHRpb24sXG4gICAgICAgIHNlbGVjdFByb3BzOiBwcm9wcyxcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgICAgICB0aGVtZTogdGhpcy5nZXRUaGVtZSgpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNWYWx1ZSgpIHtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICByZXR1cm4gc2VsZWN0VmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zKCkubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0NsZWFyYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0NsZWFyYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzNy5pc0NsZWFyYWJsZSxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNy5pc011bHRpO1xuXG4gICAgICAvLyBzaW5nbGUgc2VsZWN0LCBieSBkZWZhdWx0LCBJUyBOT1QgY2xlYXJhYmxlXG4gICAgICAvLyBtdWx0aSBzZWxlY3QsIGJ5IGRlZmF1bHQsIElTIGNsZWFyYWJsZVxuICAgICAgaWYgKGlzQ2xlYXJhYmxlID09PSB1bmRlZmluZWQpIHJldHVybiBpc011bHRpO1xuICAgICAgcmV0dXJuIGlzQ2xlYXJhYmxlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvbkRpc2FibGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9pc09wdGlvbkRpc2FibGVkKHRoaXMucHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvblNlbGVjdGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9pc09wdGlvblNlbGVjdGVkKHRoaXMucHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaWx0ZXJPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlsdGVyT3B0aW9uKG9wdGlvbiwgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9maWx0ZXJPcHRpb24odGhpcy5wcm9wcywgb3B0aW9uLCBpbnB1dFZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0T3B0aW9uTGFiZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0T3B0aW9uTGFiZWwoZGF0YSwgY29udGV4dCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfaW5wdXRWYWx1ZSA9IHRoaXMucHJvcHMuaW5wdXRWYWx1ZTtcbiAgICAgICAgdmFyIF9zZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsKGRhdGEsIHtcbiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgIGlucHV0VmFsdWU6IF9pbnB1dFZhbHVlLFxuICAgICAgICAgIHNlbGVjdFZhbHVlOiBfc2VsZWN0VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25MYWJlbChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0R3JvdXBMYWJlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdEdyb3VwTGFiZWwoZGF0YSk7XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTW91c2UgSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJzdGFydExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ29tcG9zaXRpb24gSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nQ29tcG9zaXRpb24oKSB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JywgdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCB0aGlzLm9uQ29tcG9zaXRpb25FbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RvcExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdDb21wb3NpdGlvbigpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgdGhpcy5vbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVG91Y2ggSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nVG9Ub3VjaCgpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0b3BMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdUb1RvdWNoKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5wdXRcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBSZW5kZXJlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBmdW5jdGlvbiByZW5kZXJJbnB1dCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM4LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzU2VhcmNoYWJsZSA9IF90aGlzJHByb3BzOC5pc1NlYXJjaGFibGUsXG4gICAgICAgIGlucHV0SWQgPSBfdGhpcyRwcm9wczguaW5wdXRJZCxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOC5pbnB1dFZhbHVlLFxuICAgICAgICB0YWJJbmRleCA9IF90aGlzJHByb3BzOC50YWJJbmRleCxcbiAgICAgICAgZm9ybSA9IF90aGlzJHByb3BzOC5mb3JtLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM4Lm1lbnVJc09wZW4sXG4gICAgICAgIHJlcXVpcmVkID0gX3RoaXMkcHJvcHM4LnJlcXVpcmVkO1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgSW5wdXQgPSBfdGhpcyRnZXRDb21wb25lbnRzLklucHV0O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW4gPSBfdGhpcyRzdGF0ZTQuaW5wdXRJc0hpZGRlbixcbiAgICAgICAgYXJpYVNlbGVjdGlvbiA9IF90aGlzJHN0YXRlNC5hcmlhU2VsZWN0aW9uO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpZCA9IGlucHV0SWQgfHwgdGhpcy5nZXRFbGVtZW50SWQoJ2lucHV0Jyk7XG5cbiAgICAgIC8vIGFyaWEgYXR0cmlidXRlcyBtYWtlcyB0aGUgSlNYIFwibm9pc3lcIiwgc2VwYXJhdGVkIGZvciBjbGFyaXR5XG4gICAgICB2YXIgYXJpYUF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBtZW51SXNPcGVuLFxuICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAgICdhcmlhLWVycm9ybWVzc2FnZSc6IHRoaXMucHJvcHNbJ2FyaWEtZXJyb3JtZXNzYWdlJ10sXG4gICAgICAgICdhcmlhLWludmFsaWQnOiB0aGlzLnByb3BzWydhcmlhLWludmFsaWQnXSxcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgJ2FyaWEtcmVxdWlyZWQnOiByZXF1aXJlZCxcbiAgICAgICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IHRoaXMuaXNBcHBsZURldmljZSA/IHVuZGVmaW5lZCA6IHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbklkIHx8ICcnXG4gICAgICB9LCBtZW51SXNPcGVuICYmIHtcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiB0aGlzLmdldEVsZW1lbnRJZCgnbGlzdGJveCcpXG4gICAgICB9KSwgIWlzU2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICdhcmlhLXJlYWRvbmx5JzogdHJ1ZVxuICAgICAgfSksIHRoaXMuaGFzVmFsdWUoKSA/IChhcmlhU2VsZWN0aW9uID09PSBudWxsIHx8IGFyaWFTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyaWFTZWxlY3Rpb24uYWN0aW9uKSA9PT0gJ2luaXRpYWwtaW5wdXQtZm9jdXMnICYmIHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmdldEVsZW1lbnRJZCgnbGl2ZS1yZWdpb24nKVxuICAgICAgfSA6IHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmdldEVsZW1lbnRJZCgncGxhY2Vob2xkZXInKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzU2VhcmNoYWJsZSkge1xuICAgICAgICAvLyB1c2UgYSBkdW1teSBpbnB1dCB0byBtYWludGFpbiBmb2N1cy9ibHVyIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KER1bW15SW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgaW5uZXJSZWY6IHRoaXMuZ2V0SW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiB0aGlzLm9uSW5wdXRCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBub29wLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICBpbnB1dE1vZGU6IFwibm9uZVwiLFxuICAgICAgICAgIGZvcm06IGZvcm0sXG4gICAgICAgICAgdmFsdWU6IFwiXCJcbiAgICAgICAgfSwgYXJpYUF0dHJpYnV0ZXMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGF1dG9DYXBpdGFsaXplOiBcIm5vbmVcIixcbiAgICAgICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiLFxuICAgICAgICBhdXRvQ29ycmVjdDogXCJvZmZcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRJbnB1dFJlZixcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNIaWRkZW46IGlucHV0SXNIaWRkZW4sXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbklucHV0Qmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgZm9ybTogZm9ybSxcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICB9LCBhcmlhQXR0cmlidXRlcykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQbGFjZWhvbGRlck9yVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyUGxhY2Vob2xkZXJPclZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czIgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgTXVsdGlWYWx1ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLk11bHRpVmFsdWUsXG4gICAgICAgIE11bHRpVmFsdWVDb250YWluZXIgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICBNdWx0aVZhbHVlTGFiZWwgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlTGFiZWwsXG4gICAgICAgIE11bHRpVmFsdWVSZW1vdmUgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlUmVtb3ZlLFxuICAgICAgICBTaW5nbGVWYWx1ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLlNpbmdsZVZhbHVlLFxuICAgICAgICBQbGFjZWhvbGRlciA9IF90aGlzJGdldENvbXBvbmVudHMyLlBsYWNlaG9sZGVyO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUgPSBfdGhpcyRwcm9wczkuY29udHJvbFNob3VsZFJlbmRlclZhbHVlLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM5LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczkuaXNNdWx0aSxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOS5pbnB1dFZhbHVlLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzOS5wbGFjZWhvbGRlcjtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlNS5zZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU1LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkc3RhdGU1LmlzRm9jdXNlZDtcbiAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSgpIHx8ICFjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUgPyBudWxsIDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGxhY2Vob2xkZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGtleTogXCJwbGFjZWhvbGRlclwiLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZ2V0RWxlbWVudElkKCdwbGFjZWhvbGRlcicpXG4gICAgICAgICAgfVxuICAgICAgICB9KSwgcGxhY2Vob2xkZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0LCBpbmRleCkge1xuICAgICAgICAgIHZhciBpc09wdGlvbkZvY3VzZWQgPSBvcHQgPT09IGZvY3VzZWRWYWx1ZTtcbiAgICAgICAgICB2YXIga2V5ID0gXCJcIi5jb25jYXQoX3RoaXMzLmdldE9wdGlvbkxhYmVsKG9wdCksIFwiLVwiKS5jb25jYXQoX3RoaXMzLmdldE9wdGlvblZhbHVlKG9wdCkpO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNdWx0aVZhbHVlLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgQ29udGFpbmVyOiBNdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICAgICAgICBMYWJlbDogTXVsdGlWYWx1ZUxhYmVsLFxuICAgICAgICAgICAgICBSZW1vdmU6IE11bHRpVmFsdWVSZW1vdmVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IGlzT3B0aW9uRm9jdXNlZCxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIHJlbW92ZVByb3BzOiB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5yZW1vdmVWYWx1ZShvcHQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblRvdWNoRW5kOiBmdW5jdGlvbiBvblRvdWNoRW5kKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczMucmVtb3ZlVmFsdWUob3B0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiBvcHRcbiAgICAgICAgICB9KSwgX3RoaXMzLmZvcm1hdE9wdGlvbkxhYmVsKG9wdCwgJ3ZhbHVlJykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIHNpbmdsZVZhbHVlID0gc2VsZWN0VmFsdWVbMF07XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2luZ2xlVmFsdWUsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBkYXRhOiBzaW5nbGVWYWx1ZSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMuZm9ybWF0T3B0aW9uTGFiZWwoc2luZ2xlVmFsdWUsICd2YWx1ZScpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ2xlYXJJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czMgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgQ2xlYXJJbmRpY2F0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzMy5DbGVhckluZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczEwLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTAuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCF0aGlzLmlzQ2xlYXJhYmxlKCkgfHwgIUNsZWFySW5kaWNhdG9yIHx8IGlzRGlzYWJsZWQgfHwgIXRoaXMuaGFzVmFsdWUoKSB8fCBpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25DbGVhckluZGljYXRvck1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkNsZWFySW5kaWNhdG9yVG91Y2hFbmQsXG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDbGVhckluZGljYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckxvYWRpbmdJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ0luZGljYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNCA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBMb2FkaW5nSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czQuTG9hZGluZ0luZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczExLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTEuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCFMb2FkaW5nSW5kaWNhdG9yIHx8ICFpc0xvYWRpbmcpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGlubmVyUHJvcHMgPSB7XG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckluZGljYXRvclNlcGFyYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNSA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBEcm9wZG93bkluZGljYXRvciA9IF90aGlzJGdldENvbXBvbmVudHM1LkRyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICBJbmRpY2F0b3JTZXBhcmF0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzNS5JbmRpY2F0b3JTZXBhcmF0b3I7XG5cbiAgICAgIC8vIHNlcGFyYXRvciBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCB0aGUgZHJvcGRvd24gaW5kaWNhdG9yXG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yIHx8ICFJbmRpY2F0b3JTZXBhcmF0b3IpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gdGhpcy5wcm9wcy5pc0Rpc2FibGVkO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluZGljYXRvclNlcGFyYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSW5kaWNhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckRyb3Bkb3duSW5kaWNhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM2ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIERyb3Bkb3duSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czYuRHJvcGRvd25JbmRpY2F0b3I7XG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMucHJvcHMuaXNEaXNhYmxlZDtcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcbiAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3Bkb3duSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTWVudVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJNZW51KCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czcgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgR3JvdXAgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Hcm91cCxcbiAgICAgICAgR3JvdXBIZWFkaW5nID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuR3JvdXBIZWFkaW5nLFxuICAgICAgICBNZW51ID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTWVudSxcbiAgICAgICAgTWVudUxpc3QgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5NZW51TGlzdCxcbiAgICAgICAgTWVudVBvcnRhbCA9IF90aGlzJGdldENvbXBvbmVudHM3Lk1lbnVQb3J0YWwsXG4gICAgICAgIExvYWRpbmdNZXNzYWdlID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTG9hZGluZ01lc3NhZ2UsXG4gICAgICAgIE5vT3B0aW9uc01lc3NhZ2UgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Ob09wdGlvbnNNZXNzYWdlLFxuICAgICAgICBPcHRpb24gPSBfdGhpcyRnZXRDb21wb25lbnRzNy5PcHRpb247XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb24gPSB0aGlzLnN0YXRlLmZvY3VzZWRPcHRpb247XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNhcHR1cmVNZW51U2Nyb2xsID0gX3RoaXMkcHJvcHMxMi5jYXB0dXJlTWVudVNjcm9sbCxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMTIuaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMxMi5pc0xvYWRpbmcsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlID0gX3RoaXMkcHJvcHMxMi5sb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgbWluTWVudUhlaWdodCA9IF90aGlzJHByb3BzMTIubWluTWVudUhlaWdodCxcbiAgICAgICAgbWF4TWVudUhlaWdodCA9IF90aGlzJHByb3BzMTIubWF4TWVudUhlaWdodCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzMTIubWVudUlzT3BlbixcbiAgICAgICAgbWVudVBsYWNlbWVudCA9IF90aGlzJHByb3BzMTIubWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uID0gX3RoaXMkcHJvcHMxMi5tZW51UG9zaXRpb24sXG4gICAgICAgIG1lbnVQb3J0YWxUYXJnZXQgPSBfdGhpcyRwcm9wczEyLm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbCA9IF90aGlzJHByb3BzMTIubWVudVNob3VsZEJsb2NrU2Nyb2xsLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSBfdGhpcyRwcm9wczEyLm1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyxcbiAgICAgICAgbm9PcHRpb25zTWVzc2FnZSA9IF90aGlzJHByb3BzMTIubm9PcHRpb25zTWVzc2FnZSxcbiAgICAgICAgb25NZW51U2Nyb2xsVG9Ub3AgPSBfdGhpcyRwcm9wczEyLm9uTWVudVNjcm9sbFRvVG9wLFxuICAgICAgICBvbk1lbnVTY3JvbGxUb0JvdHRvbSA9IF90aGlzJHByb3BzMTIub25NZW51U2Nyb2xsVG9Cb3R0b207XG4gICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBUT0RPOiBJbnRlcm5hbCBPcHRpb24gVHlwZSBoZXJlXG4gICAgICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCBpZCkge1xuICAgICAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGUsXG4gICAgICAgICAgZGF0YSA9IHByb3BzLmRhdGEsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgICAgICB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICAgICAgICB2YXIgaXNGb2N1c2VkID0gZm9jdXNlZE9wdGlvbiA9PT0gZGF0YTtcbiAgICAgICAgdmFyIG9uSG92ZXIgPSBpc0Rpc2FibGVkID8gdW5kZWZpbmVkIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQub25PcHRpb25Ib3ZlcihkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uU2VsZWN0ID0gaXNEaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LnNlbGVjdE9wdGlvbihkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9wdGlvbklkID0gXCJcIi5jb25jYXQoX3RoaXM0LmdldEVsZW1lbnRJZCgnb3B0aW9uJyksIFwiLVwiKS5jb25jYXQoaWQpO1xuICAgICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgICBpZDogb3B0aW9uSWQsXG4gICAgICAgICAgb25DbGljazogb25TZWxlY3QsXG4gICAgICAgICAgb25Nb3VzZU1vdmU6IG9uSG92ZXIsXG4gICAgICAgICAgb25Nb3VzZU92ZXI6IG9uSG92ZXIsXG4gICAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogX3RoaXM0LmlzQXBwbGVEZXZpY2UgPyB1bmRlZmluZWQgOiBpc1NlbGVjdGVkIC8vIGlzIG5vdCBzdXBwb3J0ZWQgb24gQXBwbGUgZGV2aWNlc1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPcHRpb24sIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAga2V5OiBvcHRpb25JZCxcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgICAgaW5uZXJSZWY6IGlzRm9jdXNlZCA/IF90aGlzNC5nZXRGb2N1c2VkT3B0aW9uUmVmIDogdW5kZWZpbmVkXG4gICAgICAgIH0pLCBfdGhpczQuZm9ybWF0T3B0aW9uTGFiZWwocHJvcHMuZGF0YSwgJ21lbnUnKSk7XG4gICAgICB9O1xuICAgICAgdmFyIG1lbnVVSTtcbiAgICAgIGlmICh0aGlzLmhhc09wdGlvbnMoKSkge1xuICAgICAgICBtZW51VUkgPSB0aGlzLmdldENhdGVnb3JpemVkT3B0aW9ucygpLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHZhciBfZGF0YSA9IGl0ZW0uZGF0YSxcbiAgICAgICAgICAgICAgb3B0aW9ucyA9IGl0ZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgZ3JvdXBJbmRleCA9IGl0ZW0uaW5kZXg7XG4gICAgICAgICAgICB2YXIgZ3JvdXBJZCA9IFwiXCIuY29uY2F0KF90aGlzNC5nZXRFbGVtZW50SWQoJ2dyb3VwJyksIFwiLVwiKS5jb25jYXQoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICB2YXIgaGVhZGluZ0lkID0gXCJcIi5jb25jYXQoZ3JvdXBJZCwgXCItaGVhZGluZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAgICAgIGtleTogZ3JvdXBJZCxcbiAgICAgICAgICAgICAgZGF0YTogX2RhdGEsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICAgIEhlYWRpbmc6IEdyb3VwSGVhZGluZyxcbiAgICAgICAgICAgICAgaGVhZGluZ1Byb3BzOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGhlYWRpbmdJZCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLmRhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IF90aGlzNC5mb3JtYXRHcm91cExhYmVsKGl0ZW0uZGF0YSlcbiAgICAgICAgICAgIH0pLCBpdGVtLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihvcHRpb24sIFwiXCIuY29uY2F0KGdyb3VwSW5kZXgsIFwiLVwiKS5jb25jYXQob3B0aW9uLmluZGV4KSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdvcHRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGl0ZW0sIFwiXCIuY29uY2F0KGl0ZW0uaW5kZXgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBsb2FkaW5nTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBtZW51VUkgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nTWVzc2FnZSwgY29tbW9uUHJvcHMsIG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9tZXNzYWdlID0gbm9PcHRpb25zTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKF9tZXNzYWdlID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgbWVudVVJID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm9PcHRpb25zTWVzc2FnZSwgY29tbW9uUHJvcHMsIF9tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHZhciBtZW51UGxhY2VtZW50UHJvcHMgPSB7XG4gICAgICAgIG1pbk1lbnVIZWlnaHQ6IG1pbk1lbnVIZWlnaHQsXG4gICAgICAgIG1heE1lbnVIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICAgIG1lbnVQbGFjZW1lbnQ6IG1lbnVQbGFjZW1lbnQsXG4gICAgICAgIG1lbnVQb3NpdGlvbjogbWVudVBvc2l0aW9uLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXc6IG1lbnVTaG91bGRTY3JvbGxJbnRvVmlld1xuICAgICAgfTtcbiAgICAgIHZhciBtZW51RWxlbWVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQbGFjZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywgbWVudVBsYWNlbWVudFByb3BzKSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICAgIHZhciByZWYgPSBfcmVmNC5yZWYsXG4gICAgICAgICAgX3JlZjQkcGxhY2VyUHJvcHMgPSBfcmVmNC5wbGFjZXJQcm9wcyxcbiAgICAgICAgICBwbGFjZW1lbnQgPSBfcmVmNCRwbGFjZXJQcm9wcy5wbGFjZW1lbnQsXG4gICAgICAgICAgbWF4SGVpZ2h0ID0gX3JlZjQkcGxhY2VyUHJvcHMubWF4SGVpZ2h0O1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBtZW51UGxhY2VtZW50UHJvcHMsIHtcbiAgICAgICAgICBpbm5lclJlZjogcmVmLFxuICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiBfdGhpczQub25NZW51TW91c2VEb3duLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmU6IF90aGlzNC5vbk1lbnVNb3VzZU1vdmVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gICAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxNYW5hZ2VyLCB7XG4gICAgICAgICAgY2FwdHVyZUVuYWJsZWQ6IGNhcHR1cmVNZW51U2Nyb2xsLFxuICAgICAgICAgIG9uVG9wQXJyaXZlOiBvbk1lbnVTY3JvbGxUb1RvcCxcbiAgICAgICAgICBvbkJvdHRvbUFycml2ZTogb25NZW51U2Nyb2xsVG9Cb3R0b20sXG4gICAgICAgICAgbG9ja0VuYWJsZWQ6IG1lbnVTaG91bGRCbG9ja1Njcm9sbFxuICAgICAgICB9LCBmdW5jdGlvbiAoc2Nyb2xsVGFyZ2V0UmVmKSB7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVMaXN0LCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgIGlubmVyUmVmOiBmdW5jdGlvbiBpbm5lclJlZihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICBfdGhpczQuZ2V0TWVudUxpc3RSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICBzY3JvbGxUYXJnZXRSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBjb21tb25Qcm9wcy5pc011bHRpLFxuICAgICAgICAgICAgICBpZDogX3RoaXM0LmdldEVsZW1lbnRJZCgnbGlzdGJveCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCxcbiAgICAgICAgICAgIGZvY3VzZWRPcHRpb246IGZvY3VzZWRPcHRpb25cbiAgICAgICAgICB9KSwgbWVudVVJKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHBvc2l0aW9uaW5nIGJlaGF2aW91ciBpcyBhbG1vc3QgaWRlbnRpY2FsIGZvciBwb3J0YWxsZWQgYW5kIGZpeGVkLFxuICAgICAgLy8gc28gd2UgdXNlIHRoZSBzYW1lIGNvbXBvbmVudC4gdGhlIGFjdHVhbCBwb3J0YWxsaW5nIGxvZ2ljIGlzIGZvcmtlZFxuICAgICAgLy8gd2l0aGluIHRoZSBjb21wb25lbnQgYmFzZWQgb24gYG1lbnVQb3NpdGlvbmBcbiAgICAgIHJldHVybiBtZW51UG9ydGFsVGFyZ2V0IHx8IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQb3J0YWwsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBhcHBlbmRUbzogbWVudVBvcnRhbFRhcmdldCxcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6IHRoaXMuY29udHJvbFJlZixcbiAgICAgICAgbWVudVBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uOiBtZW51UG9zaXRpb25cbiAgICAgIH0pLCBtZW51RWxlbWVudCkgOiBtZW51RWxlbWVudDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRm9ybUZpZWxkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckZvcm1GaWVsZCgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTMgPSB0aGlzLnByb3BzLFxuICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczEzLmRlbGltaXRlcixcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTMuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMTMuaXNNdWx0aSxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMTMubmFtZSxcbiAgICAgICAgcmVxdWlyZWQgPSBfdGhpcyRwcm9wczEzLnJlcXVpcmVkO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIGlmIChyZXF1aXJlZCAmJiAhdGhpcy5oYXNWYWx1ZSgpICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZXF1aXJlZElucHV0JDEsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25WYWx1ZUlucHV0Rm9jdXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIW5hbWUgfHwgaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgaWYgKGRlbGltaXRlcikge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM1LmdldE9wdGlvblZhbHVlKG9wdCk7XG4gICAgICAgICAgfSkuam9pbihkZWxpbWl0ZXIpO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGlucHV0ID0gc2VsZWN0VmFsdWUubGVuZ3RoID4gMCA/IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGtleTogXCJpLVwiLmNvbmNhdChpKSxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzNS5nZXRPcHRpb25WYWx1ZShvcHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSA6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfdmFsdWUgPSBzZWxlY3RWYWx1ZVswXSA/IHRoaXMuZ2V0T3B0aW9uVmFsdWUoc2VsZWN0VmFsdWVbMF0pIDogJyc7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTGl2ZVJlZ2lvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMaXZlUmVnaW9uKCkge1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTYgPSB0aGlzLnN0YXRlLFxuICAgICAgICBhcmlhU2VsZWN0aW9uID0gX3RoaXMkc3RhdGU2LmFyaWFTZWxlY3Rpb24sXG4gICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZTYuZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU2LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkc3RhdGU2LmlzRm9jdXNlZCxcbiAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZTYuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9ucyA9IHRoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExpdmVSZWdpb24kMSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlkOiB0aGlzLmdldEVsZW1lbnRJZCgnbGl2ZS1yZWdpb24nKSxcbiAgICAgICAgYXJpYVNlbGVjdGlvbjogYXJpYVNlbGVjdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkLFxuICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgIGZvY3VzYWJsZU9wdGlvbnM6IGZvY3VzYWJsZU9wdGlvbnMsXG4gICAgICAgIGlzQXBwbGVEZXZpY2U6IHRoaXMuaXNBcHBsZURldmljZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM4ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIENvbnRyb2wgPSBfdGhpcyRnZXRDb21wb25lbnRzOC5Db250cm9sLFxuICAgICAgICBJbmRpY2F0b3JzQ29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguSW5kaWNhdG9yc0NvbnRhaW5lcixcbiAgICAgICAgU2VsZWN0Q29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguU2VsZWN0Q29udGFpbmVyLFxuICAgICAgICBWYWx1ZUNvbnRhaW5lciA9IF90aGlzJGdldENvbXBvbmVudHM4LlZhbHVlQ29udGFpbmVyO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTQgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczE0LmNsYXNzTmFtZSxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczE0LmlkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxNC5pc0Rpc2FibGVkLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHMxNC5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcyA9IHRoaXMuZ2V0Q29tbW9uUHJvcHMoKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3RDb250YWluZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duXG4gICAgICAgIH0sXG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSwgdGhpcy5yZW5kZXJMaXZlUmVnaW9uKCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRyb2wsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRDb250cm9sUmVmLFxuICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Db250cm9sTW91c2VEb3duLFxuICAgICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25Db250cm9sVG91Y2hFbmRcbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgIG1lbnVJc09wZW46IG1lbnVJc09wZW5cbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChWYWx1ZUNvbnRhaW5lciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgIH0pLCB0aGlzLnJlbmRlclBsYWNlaG9sZGVyT3JWYWx1ZSgpLCB0aGlzLnJlbmRlcklucHV0KCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbmRpY2F0b3JzQ29udGFpbmVyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMucmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSwgdGhpcy5yZW5kZXJMb2FkaW5nSW5kaWNhdG9yKCksIHRoaXMucmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yKCksIHRoaXMucmVuZGVyRHJvcGRvd25JbmRpY2F0b3IoKSkpLCB0aGlzLnJlbmRlck1lbnUoKSwgdGhpcy5yZW5kZXJGb3JtRmllbGQoKSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAgIHZhciBwcmV2UHJvcHMgPSBzdGF0ZS5wcmV2UHJvcHMsXG4gICAgICAgIGNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlID0gc3RhdGUuY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSA9IHN0YXRlLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSxcbiAgICAgICAgYXJpYVNlbGVjdGlvbiA9IHN0YXRlLmFyaWFTZWxlY3Rpb24sXG4gICAgICAgIGlzRm9jdXNlZCA9IHN0YXRlLmlzRm9jdXNlZCxcbiAgICAgICAgcHJldldhc0ZvY3VzZWQgPSBzdGF0ZS5wcmV2V2FzRm9jdXNlZCxcbiAgICAgICAgaW5zdGFuY2VQcmVmaXggPSBzdGF0ZS5pbnN0YW5jZVByZWZpeDtcbiAgICAgIHZhciBvcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICAgICAgbWVudUlzT3BlbiA9IHByb3BzLm1lbnVJc09wZW4sXG4gICAgICAgIGlucHV0VmFsdWUgPSBwcm9wcy5pbnB1dFZhbHVlLFxuICAgICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IGNsZWFuVmFsdWUodmFsdWUpO1xuICAgICAgdmFyIG5ld01lbnVPcHRpb25zU3RhdGUgPSB7fTtcbiAgICAgIGlmIChwcmV2UHJvcHMgJiYgKHZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUgfHwgb3B0aW9ucyAhPT0gcHJldlByb3BzLm9wdGlvbnMgfHwgbWVudUlzT3BlbiAhPT0gcHJldlByb3BzLm1lbnVJc09wZW4gfHwgaW5wdXRWYWx1ZSAhPT0gcHJldlByb3BzLmlucHV0VmFsdWUpKSB7XG4gICAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zID0gbWVudUlzT3BlbiA/IGJ1aWxkRm9jdXNhYmxlT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpIDogW107XG4gICAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IG1lbnVJc09wZW4gPyBidWlsZEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzKGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSksIFwiXCIuY29uY2F0KGluc3RhbmNlUHJlZml4LCBcIi1vcHRpb25cIikpIDogW107XG4gICAgICAgIHZhciBmb2N1c2VkVmFsdWUgPSBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZSA/IGdldE5leHRGb2N1c2VkVmFsdWUoc3RhdGUsIHNlbGVjdFZhbHVlKSA6IG51bGw7XG4gICAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gZ2V0TmV4dEZvY3VzZWRPcHRpb24oc3RhdGUsIGZvY3VzYWJsZU9wdGlvbnMpO1xuICAgICAgICB2YXIgZm9jdXNlZE9wdGlvbklkID0gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKTtcbiAgICAgICAgbmV3TWVudU9wdGlvbnNTdGF0ZSA9IHtcbiAgICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IGZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgICBmb2N1c2FibGVPcHRpb25zV2l0aElkczogZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMsXG4gICAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBzb21lIHVwZGF0ZXMgc2hvdWxkIHRvZ2dsZSB0aGUgc3RhdGUgb2YgdGhlIGlucHV0IHZpc2liaWxpdHlcbiAgICAgIHZhciBuZXdJbnB1dElzSGlkZGVuU3RhdGUgPSBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgIT0gbnVsbCAmJiBwcm9wcyAhPT0gcHJldlByb3BzID8ge1xuICAgICAgICBpbnB1dElzSGlkZGVuOiBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogdW5kZWZpbmVkXG4gICAgICB9IDoge307XG4gICAgICB2YXIgbmV3QXJpYVNlbGVjdGlvbiA9IGFyaWFTZWxlY3Rpb247XG4gICAgICB2YXIgaGFzS2VwdEZvY3VzID0gaXNGb2N1c2VkICYmIHByZXZXYXNGb2N1c2VkO1xuICAgICAgaWYgKGlzRm9jdXNlZCAmJiAhaGFzS2VwdEZvY3VzKSB7XG4gICAgICAgIC8vIElmIGB2YWx1ZWAgb3IgYGRlZmF1bHRWYWx1ZWAgcHJvcHMgYXJlIG5vdCBlbXB0eSB0aGVuIGFubm91bmNlIHRoZW1cbiAgICAgICAgLy8gd2hlbiB0aGUgU2VsZWN0IGlzIGluaXRpYWxseSBmb2N1c2VkXG4gICAgICAgIG5ld0FyaWFTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlVGVybmFyeShpc011bHRpLCBzZWxlY3RWYWx1ZSwgc2VsZWN0VmFsdWVbMF0gfHwgbnVsbCksXG4gICAgICAgICAgb3B0aW9uczogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgYWN0aW9uOiAnaW5pdGlhbC1pbnB1dC1mb2N1cydcbiAgICAgICAgfTtcbiAgICAgICAgaGFzS2VwdEZvY3VzID0gIXByZXZXYXNGb2N1c2VkO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgJ2luaXRpYWwtaW5wdXQtZm9jdXMnIGFjdGlvbiBoYXMgYmVlbiBzZXQgYWxyZWFkeVxuICAgICAgLy8gdGhlbiByZXNldCB0aGUgYXJpYVNlbGVjdGlvbiB0byBudWxsXG4gICAgICBpZiAoKGFyaWFTZWxlY3Rpb24gPT09IG51bGwgfHwgYXJpYVNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJpYVNlbGVjdGlvbi5hY3Rpb24pID09PSAnaW5pdGlhbC1pbnB1dC1mb2N1cycpIHtcbiAgICAgICAgbmV3QXJpYVNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG5ld01lbnVPcHRpb25zU3RhdGUpLCBuZXdJbnB1dElzSGlkZGVuU3RhdGUpLCB7fSwge1xuICAgICAgICBwcmV2UHJvcHM6IHByb3BzLFxuICAgICAgICBhcmlhU2VsZWN0aW9uOiBuZXdBcmlhU2VsZWN0aW9uLFxuICAgICAgICBwcmV2V2FzRm9jdXNlZDogaGFzS2VwdEZvY3VzXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFNlbGVjdDtcbn0oQ29tcG9uZW50KTtcblNlbGVjdC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbmV4cG9ydCB7IFNlbGVjdCBhcyBTLCBkZWZhdWx0UHJvcHMgYXMgYSwgZ2V0T3B0aW9uTGFiZWwkMSBhcyBiLCBjcmVhdGVGaWx0ZXIgYXMgYywgZGVmYXVsdFRoZW1lIGFzIGQsIGdldE9wdGlvblZhbHVlJDEgYXMgZywgbWVyZ2VTdHlsZXMgYXMgbSB9O1xuIiwgImltcG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmV4cG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcndhcmRSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTIGFzIFNlbGVjdCB9IGZyb20gJy4vU2VsZWN0LTQ5YTYyODMwLmVzbS5qcyc7XG5leHBvcnQgeyBjIGFzIGNyZWF0ZUZpbHRlciwgZCBhcyBkZWZhdWx0VGhlbWUsIG0gYXMgbWVyZ2VTdHlsZXMgfSBmcm9tICcuL1NlbGVjdC00OWE2MjgzMC5lc20uanMnO1xuaW1wb3J0IHsgQ2FjaGVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5leHBvcnQgeyBjIGFzIGNvbXBvbmVudHMgfSBmcm9tICcuL2luZGV4LWEzMDFmNTI2LmVzbS5qcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZVN1cGVyJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgJ21lbW9pemUtb25lJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0ICdyZWFjdC1kb20nO1xuaW1wb3J0ICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCAndXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdCc7XG5cbnZhciBTdGF0ZU1hbmFnZWRTZWxlY3QgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgYmFzZVNlbGVjdFByb3BzID0gdXNlU3RhdGVNYW5hZ2VyKHByb3BzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmXG4gIH0sIGJhc2VTZWxlY3RQcm9wcykpO1xufSk7XG52YXIgU3RhdGVNYW5hZ2VkU2VsZWN0JDEgPSBTdGF0ZU1hbmFnZWRTZWxlY3Q7XG5cbnZhciBOb25jZVByb3ZpZGVyID0gKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBub25jZSA9IF9yZWYubm9uY2UsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNhY2hlS2V5ID0gX3JlZi5jYWNoZUtleTtcbiAgdmFyIGVtb3Rpb25DYWNoZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjcmVhdGVDYWNoZSh7XG4gICAgICBrZXk6IGNhY2hlS2V5LFxuICAgICAgbm9uY2U6IG5vbmNlXG4gICAgfSk7XG4gIH0sIFtjYWNoZUtleSwgbm9uY2VdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZW1vdGlvbkNhY2hlXG4gIH0sIGNoaWxkcmVuKTtcbn0pO1xuXG5leHBvcnQgeyBOb25jZVByb3ZpZGVyLCBTdGF0ZU1hbmFnZWRTZWxlY3QkMSBhcyBkZWZhdWx0IH07XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IHVzZUVkaXRhYmxlRGlzcGF0Y2ggfSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlXCI7XG5pbXBvcnQgeyBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgVGFyZ2V0ZWRFdmVudCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCJ1aS9ob29rc1wiO1xuXG4vKiogRWRpdGFibGUgZmllbGQgZm9yIGEgYm9vbGVhbiAodHJ1ZS9mYWxzZSkgdmFsdWUuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gQm9vbGVhbkVkaXRhYmxlKHByb3BzOiBGaWVsZENvbnRyb2xQcm9wczxib29sZWFuPikge1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlRWRpdGFibGVEaXNwYXRjaDxib29sZWFuPih7XG4gICAgICAgIGNvbnRlbnQ6IHByb3BzLnZhbHVlID8/IHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdXBkYXRlcjogcHJvcHMudXBkYXRlciEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAoZXZ0OiBUYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+ICYgTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gIWV2dC5jdXJyZW50VGFyZ2V0Lmhhc0NsYXNzKFwiaXMtZW5hYmxlZFwiKTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWUgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29tbWl0XCIsIG5ld1ZhbHVlIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbc3RhdGUuY29udGVudCwgc3RhdGUsIHByb3BzLnZhbHVlXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IG9uQ2xpY2s9e29uQ2hhbmdlfSBjbGFzc05hbWU9e2BjaGVja2JveC1jb250YWluZXIke3N0YXRlLmNvbnRlbnQgPyBcIiBpcy1lbmFibGVkXCIgOiBcIlwifWB9PlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IEVkaXRhYmxlLCBFZGl0YWJsZUFjdGlvbiwgRWRpdGFibGVTdGF0ZSB9IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5cbmltcG9ydCBcIi4vZmllbGRzLmNzc1wiO1xuXG4vKiogRWRpdGFibGUgZmllbGQgZm9yIG11bHRpLXN0ZXAgcHJvZ3Jlc3MuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gUHJvZ3Jlc3NFZGl0YWJsZShcbiAgICBwcm9wczogRWRpdGFibGVTdGF0ZTxudW1iZXI+ICYge1xuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gICAgICAgIG1pbjogbnVtYmVyO1xuICAgICAgICBtYXg6IG51bWJlcjtcbiAgICAgICAgc3RlcDogbnVtYmVyO1xuICAgICAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248bnVtYmVyPj47XG4gICAgfVxuKSB7XG4gICAgY29uc3QgdmFsID0gdXNlUmVmKHByb3BzLmNvbnRlbnQpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWU6IHZhbC5jdXJyZW50IH0pO1xuICAgIH0sIFt2YWwuY3VycmVudF0pO1xuICAgIGNvbnN0IGZpbmFsaXplID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBwcm9wcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1pdFwiLFxuICAgICAgICAgICAgbmV3VmFsdWU6IHZhbC5jdXJyZW50LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZUNCID0gdXNlU3RhYmxlQ2FsbGJhY2soXG4gICAgICAgIChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgZmluYWxpemUoKTtcbiAgICAgICAgICAgIHZhbC5jdXJyZW50ID0gcGFyc2VGbG9hdChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbdmFsLmN1cnJlbnQsIHByb3BzLnNvdXJjZVBhdGhdXG4gICAgKTtcbiAgICBjb25zdCByZWFkT25seSA9IDxwcm9ncmVzcyB2YWx1ZT17dmFsLmN1cnJlbnR9IG1pbj17cHJvcHMubWlufSBtYXg9e3Byb3BzLm1heH0gc3RlcD17cHJvcHMuc3RlcH0gLz47XG5cbiAgICBjb25zdCBlZGl0b3IgPSAoXG4gICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBjbGFzc05hbWU9XCJkYXRhY29yZS1wcm9ncmVzcy1lZGl0YWJsZVwiIHZhbHVlPXt2YWwuY3VycmVudH0gb25DaGFuZ2U9e2NoYW5nZUNCfSAvPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCI+XG4gICAgICAgICAgICA8RWRpdGFibGU8bnVtYmVyPlxuICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtwcm9wcy5kaXNwYXRjaH1cbiAgICAgICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgICAgICBzdGF0ZT17eyAuLi5wcm9wcywgY29udGVudDogdmFsLmN1cnJlbnQsIGlzRWRpdGluZzogcHJvcHMuaXNFZGl0aW5nIH19XG4gICAgICAgICAgICAgICAgZGVmYXVsdFJlbmRlcj17cmVhZE9ubHl9XG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgdWlcbiAqL1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5pbXBvcnQgeyBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgdXNlRWRpdGFibGVEaXNwYXRjaCB9IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcblxuaW1wb3J0IFwiLi9maWVsZHMuY3NzXCI7XG5cbi8qKiBFZGl0YWJsZSBmaWVsZCBmb3IgYSBzdGFyLWJhc2VkIHJhdGluZyBmaWVsZC5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYXRpbmdFZGl0YWJsZSh7IHZhbHVlLCB1cGRhdGVyLCBjb25maWc6IGNvbmZpZywgZGVmYXVsdFZhbHVlIH06IEZpZWxkQ29udHJvbFByb3BzPG51bWJlciB8IHN0cmluZz4pIHtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8bnVtYmVyIHwgc3RyaW5nPih7XG4gICAgICAgIGNvbnRlbnQ6IHZhbHVlID8/IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlciEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlLmNvbnRlbnQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmNvbnRlbnQuY29udGFpbnMoXCIvXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0ID0gc3RhdGUuY29udGVudC5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHNwbGl0WzBdKSAvIHBhcnNlSW50KHNwbGl0WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oc3RhdGUuY29udGVudCwgNSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSwgW3N0YXRlLmNvbnRlbnRdKTtcblxuICAgIGNvbnN0IHN0YXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCByOiBSZWFjdC5SZWFjdE5vZGVbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChjb25maWc/Lm1heCA/PyA1KTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2xpY2tDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jb250ZW50LmNvbnRhaW5zKFwiL1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBgJHtpICsgMX0vNWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGF0ZS5jb250ZW50ID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBNYXRoLm1pbihpICsgMSwgY29uZmlnPy5tYXggPz8gNSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRlbnQtY2hhbmdlZFwiLCBuZXdWYWx1ZTogbmV3VmFsdWUgfHwgaSArIDEgfSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbW1pdFwiLCBuZXdWYWx1ZTogbmV3VmFsdWUgfHwgaSArIDEgfSk7XG4gICAgICAgICAgICB9LCBbc3RhdGUsIHBhcnNlZFZhbHVlLCBpXSk7XG4gICAgICAgICAgICBsZXQgY2xhc3NlcyA9IFtcImRhdGFjb3JlLXJhdGluZy1zdGFyXCJdO1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGkgPCBwYXJzZWRWYWx1ZSA/IFwiZmlsbGVkXCIgOiBcImVtcHR5XCIpO1xuICAgICAgICAgICAgci5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIG9uQ2xpY2s9e2NsaWNrQ2J9IGNsYXNzTmFtZT17Y2xhc3Nlcy5qb2luKFwiIFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICYjOTczMztcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgIH0sIFtwYXJzZWRWYWx1ZSwgc3RhdGVdKTtcblxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJkYXRhY29yZS1yYXRpbmdcIj57c3RhcnN9PC9zcGFuPjtcbn1cbiIsICJpbXBvcnQgeyBEYXRhY29yZSB9IGZyb20gXCJpbmRleC9kYXRhY29yZVwiO1xuaW1wb3J0IHsgU3Vic3RvcmVyIH0gZnJvbSBcImluZGV4L2RhdGFzdG9yZVwiO1xuaW1wb3J0IHsgc2V0RW1vamlTaG9ydGhhbmRDb21wbGV0aW9uRmllbGQsIHNldElubGluZUZpZWxkIH0gZnJvbSBcImluZGV4L2ltcG9ydC9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IE1hcmtkb3duUGFnZSwgTWFya2Rvd25TZWN0aW9uLCBNYXJrZG93bkJsb2NrLCBNYXJrZG93bkxpc3RJdGVtLCBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRG90RmllbGQocmF3OiBzdHJpbmcsIG9iajogYW55KSB7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICBpZiAocmF3LmNvbnRhaW5zKFwiLlwiKSlcbiAgICAgICAgcmV0dXJuIHJhdy5zcGxpdChcIi5cIikucmVkdWNlKCh0aWYsIGMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGlmID09IFwib2JqZWN0XCIpIHJldHVybiB0aWZbY107XG4gICAgICAgICAgICBlbHNlIHJldHVybiB0aWY7XG4gICAgICAgIH0sIG9iaiB8fCB7fSk7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqW3Jhd107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZChpbnB1dDogSW5kZXhhYmxlLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgTWFya2Rvd25QYWdlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5maWVsZChmaWVsZCk/LnZhbHVlID8/IG51bGw7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIE1hcmtkb3duU2VjdGlvbikge1xuICAgICAgICByZXR1cm4gaW5wdXQuZmllbGQoZmllbGQpPy52YWx1ZSA/PyBudWxsO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBNYXJrZG93bkJsb2NrKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5maWVsZChmaWVsZCk/LnZhbHVlID8/IG51bGw7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmZpZWxkKGZpZWxkKT8udmFsdWUgPz8gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufSAvKiogVHJpbSBlbXB0eSBlbmRpbmcgbGluZXMuICovXG5mdW5jdGlvbiB0cmltRW5kaW5nTGluZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcGFydHMgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuL3UpO1xuICAgIGxldCB0cmltID0gcGFydHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAodHJpbSA+IDAgJiYgcGFydHNbdHJpbV0udHJpbSgpID09IFwiXCIpIHRyaW0tLTtcblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXCIpO1xufVxuLyoqIFNldCB0aGUgdGFzayBjb21wbGV0aW9uIGtleSBvbiBjaGVjay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYXNrQ29tcGxldGlvbihcbiAgICB0YXNrOiBNYXJrZG93blRhc2tJdGVtLFxuICAgIG9yaWdpbmFsVGV4dDogc3RyaW5nLFxuICAgIHVzZUVtb2ppU2hvcnRoYW5kOiBib29sZWFuLFxuICAgIGNvbXBsZXRpb25LZXk6IHN0cmluZyxcbiAgICBjb21wbGV0aW9uRGF0ZUZvcm1hdDogc3RyaW5nLFxuICAgIGNvbXBsZXRlOiBib29sZWFuXG4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGJsb2NrSWRSZWdleCA9IC9cXF5bYS16MC05XFwtXSsvaTtcblxuICAgIGlmICghY29tcGxldGUgJiYgIXVzZUVtb2ppU2hvcnRoYW5kKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrLiRpbmZpZWxkc1tjb21wbGV0aW9uS2V5XTtcbiAgICAgICAgcmV0dXJuIHRyaW1FbmRpbmdMaW5lcyhzZXRJbmxpbmVGaWVsZChvcmlnaW5hbFRleHQudHJpbUVuZCgpLCBjb21wbGV0aW9uS2V5KSkudHJpbUVuZCgpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IG9yaWdpbmFsVGV4dC5zcGxpdCgvXFxyP1xcbi91KTtcbiAgICBjb25zdCBtYXRjaGVzID0gYmxvY2tJZFJlZ2V4LmV4ZWMocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgbGV0IHByb2Nlc3NlZFBhcnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5zcGxpdChibG9ja0lkUmVnZXgpLmpvaW4oXCJcIik7IC8vIGxhc3QgcGFydCB3aXRob3V0IGJsb2NrIGlkXG4gICAgaWYgKHVzZUVtb2ppU2hvcnRoYW5kKSB7XG4gICAgICAgIHByb2Nlc3NlZFBhcnQgPSBzZXRFbW9qaVNob3J0aGFuZENvbXBsZXRpb25GaWVsZChcbiAgICAgICAgICAgIHByb2Nlc3NlZFBhcnQsXG4gICAgICAgICAgICBjb21wbGV0ZSA/IERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KFwieXl5eS1NTS1kZFwiKSA6IFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzZWRQYXJ0ID0gc2V0SW5saW5lRmllbGQocHJvY2Vzc2VkUGFydCwgY29tcGxldGlvbktleSwgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoY29tcGxldGlvbkRhdGVGb3JtYXQpKTtcbiAgICAgICAgdGFzay4kaW5maWVsZHNbY29tcGxldGlvbktleV0gPSB7XG4gICAgICAgICAgICByYXc6IERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KGNvbXBsZXRpb25EYXRlRm9ybWF0KSxcbiAgICAgICAgICAgIHZhbHVlOiBEYXRlVGltZS5ub3coKSxcbiAgICAgICAgICAgIGtleTogY29tcGxldGlvbktleSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgbGluZTogdGFzay4kbGluZSxcbiAgICAgICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgICAgICBzdGFydFZhbHVlOiAwLFxuICAgICAgICAgICAgICAgIGVuZDogRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoY29tcGxldGlvbkRhdGVGb3JtYXQpLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm9jZXNzZWRQYXJ0ID0gYCR7cHJvY2Vzc2VkUGFydC50cmltRW5kKCl9JHttYXRjaGVzPy5sZW5ndGggPyBcIiBcIiArIG1hdGNoZXNbMF0udHJpbSgpIDogXCJcIn1gLnRyaW1FbmQoKTsgLy8gYWRkIGJhY2sgYmxvY2sgaWRcbiAgICBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9IHByb2Nlc3NlZFBhcnQudHJpbVN0YXJ0KCk7XG5cbiAgICByZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IExJU1RfSVRFTV9SRUdFWCA9IC9eW1xccz5dKihcXGQrXFwufFxcZCtcXCl8XFwqfC18XFwrKVxccyooXFxbLnswLDF9XFxdKT9cXHMqKC4qKSQvbXU7XG5cbi8qKiBSZXdyaXRlIGEgdGFzayB3aXRoIHRoZSBnaXZlbiBjb21wbGV0aW9uIHN0YXR1cyBhbmQgbmV3IHRleHQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV3cml0ZVRhc2soXG4gICAgdmF1bHQ6IFZhdWx0LFxuICAgIGNvcmU6IERhdGFjb3JlLFxuICAgIHRhc2s6IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtLFxuICAgIGRlc2lyZWRTdGF0dXM6IHN0cmluZyxcbiAgICBkZXNpcmVkVGV4dD86IHN0cmluZ1xuKSB7XG4gICAgaWYgKFxuICAgICAgICB0YXNrIGluc3RhbmNlb2YgTWFya2Rvd25UYXNrSXRlbSAmJlxuICAgICAgICBkZXNpcmVkU3RhdHVzID09IHRhc2suJHN0YXR1cyAmJlxuICAgICAgICAoZGVzaXJlZFRleHQgPT0gdW5kZWZpbmVkIHx8IGRlc2lyZWRUZXh0ID09IHRhc2suJHRleHQpXG4gICAgKVxuICAgICAgICByZXR1cm47XG4gICAgZGVzaXJlZFN0YXR1cyA9IGRlc2lyZWRTdGF0dXMgPT0gXCJcIiA/IFwiIFwiIDogZGVzaXJlZFN0YXR1cztcblxuICAgIGxldCByYXdGaWxldGV4dCA9IGF3YWl0IHZhdWx0LmFkYXB0ZXIucmVhZCh0YXNrLiRmaWxlKTtcbiAgICBsZXQgaGFzUk4gPSByYXdGaWxldGV4dC5jb250YWlucyhcIlxcclwiKTtcbiAgICBsZXQgZmlsZXRleHQgPSByYXdGaWxldGV4dC5zcGxpdCgvXFxyXFxufFxccnxcXG4vdSk7XG5cbiAgICBpZiAoZmlsZXRleHQubGVuZ3RoIDwgdGFzay4kbGluZSkgcmV0dXJuO1xuICAgIGxldCBtYXRjaCA9IExJU1RfSVRFTV9SRUdFWC5leGVjKGZpbGV0ZXh0W3Rhc2suJGxpbmVdKTtcbiAgICBpZiAoIW1hdGNoIHx8IG1hdGNoWzJdPy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IHRhc2tUZXh0UGFydHMgPSB0YXNrLiR0ZXh0IS5zcGxpdChcIlxcblwiKTtcbiAgICAvLyBpZiAodGFza1RleHRQYXJ0c1swXS50cmltKCkgIT0gbWF0Y2hbM10udHJpbSgpKSByZXR1cm47XG5cbiAgICAvLyBXZSBoYXZlIGEgcG9zaXRpdmUgbWF0Y2ggaGVyZSBhdCB0aGlzIHBvaW50LCBzbyBnbyBhaGVhZCBhbmQgZG8gdGhlIHJld3JpdGUgb2YgdGhlIHN0YXR1cy5cbiAgICBjb25zdCBzdGF0dXNQYXJ0ID0gdGFzayBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0gPyBgWyR7ZGVzaXJlZFN0YXR1c31dYCA6IFwiXCI7XG4gICAgbGV0IGluaXRpYWxTcGFjaW5nID0gL15bXFxzPl0qL3UuZXhlYyhmaWxldGV4dFt0YXNrLiRsaW5lXSkhIVswXTtcbiAgICBpZiAoZGVzaXJlZFRleHQpIHtcbiAgICAgICAgbGV0IGRlc2lyZWRQYXJ0cyA9IGRlc2lyZWRUZXh0LnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICAgIGxldCBuZXdUZXh0TGluZXM6IHN0cmluZ1tdID0gW2Ake2luaXRpYWxTcGFjaW5nfSR7dGFzay4kc3ltYm9sfSAke3N0YXR1c1BhcnR9ICR7ZGVzaXJlZFBhcnRzWzBdfWBdLmNvbmNhdChcbiAgICAgICAgICAgIGRlc2lyZWRQYXJ0cy5zbGljZSgxKS5tYXAoKGwpID0+IGluaXRpYWxTcGFjaW5nICsgXCJcXHRcIiArIGwudHJpbVN0YXJ0KCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgZmlsZXRleHQuc3BsaWNlKHRhc2suJGxpbmUsIHRhc2suJHRleHQhLnNwbGl0KFwiXFxuXCIpLmxlbmd0aCwgLi4ubmV3VGV4dExpbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmaWxldGV4dFt0YXNrLiRsaW5lXSA9IGAke2luaXRpYWxTcGFjaW5nfSR7dGFzay4kc3ltYm9sfSAke3N0YXR1c1BhcnR9ICR7dGFza1RleHRQYXJ0c1swXS50cmltKCl9YDtcbiAgICB9XG5cbiAgICBsZXQgbmV3VGV4dCA9IGZpbGV0ZXh0LmpvaW4oaGFzUk4gPyBcIlxcclxcblwiIDogXCJcXG5cIik7XG4gICAgYXdhaXQgdmF1bHQuYWRhcHRlci53cml0ZSh0YXNrLiRmaWxlLCBuZXdUZXh0KTtcbiAgICBjb25zdCB0ZmlsZSA9IHZhdWx0LmdldEZpbGVCeVBhdGgodGFzay4kZmlsZSk7XG4gICAgaWYgKHRmaWxlKSBjb3JlLnJlbG9hZCh0ZmlsZSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcGxldGVUYXNrKGNvbXBsZXRlZDogYm9vbGVhbiwgdGFzazogTWFya2Rvd25UYXNrSXRlbSwgdmF1bHQ6IFZhdWx0LCBjb3JlOiBEYXRhY29yZSkge1xuICAgIGNvbnN0IHRhc2tzVG9Db21wbGV0ZSA9IFt0YXNrXTtcbiAgICBpZiAoY29yZS5zZXR0aW5ncy5yZWN1cnNpdmVUYXNrQ29tcGxldGlvbikge1xuICAgICAgICBjb25zdCBmb3JFYWNoID0gKHg6IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0pIHRhc2tzVG9Db21wbGV0ZS5wdXNoKHgpO1xuICAgICAgICAgICAgeC4kZWxlbWVudHMuZm9yRWFjaChmb3JFYWNoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGFzay4kZWxlbWVudHMuZm9yRWFjaChmb3JFYWNoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0IG9mIHRhc2tzVG9Db21wbGV0ZSkge1xuICAgICAgICBsZXQgbmV3VGV4dCA9IHNldFRhc2tDb21wbGV0aW9uKFxuICAgICAgICAgICAgdCxcbiAgICAgICAgICAgIHQuJHRleHQhLFxuICAgICAgICAgICAgY29yZS5zZXR0aW5ncy50YXNrQ29tcGxldGlvblVzZUVtb2ppU2hvcnRoYW5kLFxuICAgICAgICAgICAgY29yZS5zZXR0aW5ncy50YXNrQ29tcGxldGlvblRleHQsXG4gICAgICAgICAgICBjb3JlLnNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0LFxuICAgICAgICAgICAgY29tcGxldGVkXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHJld3JpdGVUYXNrKHZhdWx0LCBjb3JlLCB0LCBjb21wbGV0ZWQgPyBcInhcIiA6IFwiIFwiLCBuZXdUZXh0KTtcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGluZGV4YWJsZXNcbiAqL1xuLyoqIFV0aWxpdGllcyBmb3IgY29udmVydGluZyBsaXRlcmFsIHR5cGVzIHRvIGFuZCBmcm9tIHRoZWlyIFlBTUwgZnJvbnRtYXR0ZXIgcmVwcmVzZW50YXRpb24uICovXG5cbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgUFJJTUlUSVZFUyB9IGZyb20gXCJleHByZXNzaW9uL3BhcnNlclwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5cbi8qKiBZQU1MLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9uIGZvciBhIGxpdGVyYWwuICovXG5leHBvcnQgdHlwZSBZYW1sTGl0ZXJhbCA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IEFycmF5PFlhbWxMaXRlcmFsPjtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgWWFtbENvbnZlcnNpb24ge1xuICAgIC8qKiBDb252ZXJ0IGEgbGl0ZXJhbCBpbnRvIGEgeWFtbCBmcmllbmRseSByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24geWFtbCh2YWx1ZTogTGl0ZXJhbCk6IFlhbWxMaXRlcmFsIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShsaXRlcmFsKTtcbiAgICAgICAgaWYgKCF3cmFwcGVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXAoeWFtbCk7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvSVNPKCk7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b0h1bWFuKCk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKHdyYXBwZWQudmFsdWUsIHlhbWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgYSBZQU1MIGxpdGVyYWwgaW50byBhIHJlZ3VsYXIgbGl0ZXJhbCB2YWx1ZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZTogWWFtbExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIHZhbHVlIGFzIEFycmF5PGFueT4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobGl0ZXJhbChjaGlsZCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRlUGFyc2UgPSBEYXRlVGltZS5mcm9tSlNEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZVBhcnNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBsaXRlcmFsKG9iamVjdFtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBkYXRlUGFyc2UgPSBQUklNSVRJVkVTLmRhdGUucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGRhdGVQYXJzZS5zdGF0dXMpIHJldHVybiBkYXRlUGFyc2UudmFsdWU7XG5cbiAgICAgICAgICAgIGxldCBkdXJhdGlvblBhcnNlID0gUFJJTUlUSVZFUy5kdXJhdGlvbi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZHVyYXRpb25QYXJzZS5zdGF0dXMpIHJldHVybiBkdXJhdGlvblBhcnNlLnZhbHVlO1xuXG4gICAgICAgICAgICBsZXQgbGlua1BhcnNlID0gUFJJTUlUSVZFUy5saW5rLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChsaW5rUGFyc2Uuc3RhdHVzKSByZXR1cm4gbGlua1BhcnNlLnZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWNrdXAgaWYgd2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgdHlwZS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgIi8qKiBDZW50cmFsIHV0aWxpdGllcyBmb3IgZWRpdGluZyBmaWVsZHMgYnkgc2V0dGluZyBuZXcgdmFsdWVzIGluIGZpbGVzLCBhbmQgdHJhY2tpbmcgb3V0c3RhbmRpbmcgZWRpdHMuICovXG5cbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCJhcGkvcmVzdWx0XCI7XG5pbXBvcnQgeyBQcm92ZW5hbmNlIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBZYW1sQ29udmVyc2lvbiB9IGZyb20gXCJpbmRleC90eXBlcy95YW1sXCI7XG5pbXBvcnQgeyBBcHAsIFRGaWxlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBsaW5lUmVwbGFjZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG4vKiogRWRpdCBhIGZpZWxkIGJ5IGl0J3MgcHJvdmVuYW5jZSAoaS5lLiwgc291cmNlKTsgcmV0dXJucyBhIHByb21pc2Ugd2hpY2ggY2FuIGJlIGF3YWl0ZWQgdG8gd2FpdCBmb3IgdGhlIGZpbGUgd3JpdGUgdG8gY29tcGxldGUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdFByb3ZlbmFuY2UoYXBwOiBBcHAsIHByb3ZlbmFuY2U6IFByb3ZlbmFuY2UsIHZhbHVlOiBMaXRlcmFsKTogUHJvbWlzZTxSZXN1bHQ8bnVsbCwgc3RyaW5nPj4ge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwcm92ZW5hbmNlLmZpbGUpO1xuICAgIGlmICghZmlsZSkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBGaWxlIHdpdGggcGF0aCAke3Byb3ZlbmFuY2UuZmlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAvLyBUT0RPOiBJZiB3ZSBldmVyIHN1cHBvcnQgY3VzdG9tIHR5cGVzLCB3ZSdsbCB3YW50IHRvIGNoYW5nZSB0aGlzIHN3aXRjaCBpbnRvIHNvbWUga2luZCBvZiBkeW5hbWljIGxvb2t1cC5cbiAgICBzd2l0Y2ggKHByb3ZlbmFuY2UudHlwZSkge1xuICAgICAgICBjYXNlIFwiZnJvbnRtYXR0ZXJcIjpcbiAgICAgICAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwgJiYgcHJvdmVuYW5jZS5rZXkgaW4gZnJvbnRtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZyb250bWF0dGVyW3Byb3ZlbmFuY2Uua2V5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmcm9udG1hdHRlcltwcm92ZW5hbmNlLmtleV0gPSBZYW1sQ29udmVyc2lvbi55YW1sKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobnVsbCk7XG4gICAgICAgIGNhc2UgXCJpbmxpbmUtZmllbGRcIjpcbiAgICAgICAgICAgIHJldHVybiBlZGl0SW5saW5lRmllbGQoYXBwLCBmaWxlLCBwcm92ZW5hbmNlLmxpbmUsIHByb3ZlbmFuY2Uua2V5LCB2YWx1ZSk7XG4gICAgfVxufVxuXG4vKiogQ29tcGxldGUgd29ya2Zsb3cgZm9yIGVkaXRpbmcgYW4gaW5saW5lIGZpZWxkLiAgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0SW5saW5lRmllbGQoXG4gICAgYXBwOiBBcHAsXG4gICAgZmlsZTogVEZpbGUsXG4gICAgbGluZTogbnVtYmVyLFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBMaXRlcmFsXG4pOiBQcm9taXNlPFJlc3VsdDxudWxsLCBzdHJpbmc+PiB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xuICAgIGlmICghY29udGVudCkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBGaWxlIHdpdGggcGF0aCAke2ZpbGUucGF0aH0gZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAvLyBGaW5kIHRoZSBleHRlbnQgb2YgdGhlIGdpdmVuIGxpbmUgKDAtaW5kZXhlZCksIGV4dHJhY3QgaXQgYW5kIHVwZGF0ZS5cbiAgICBjb25zdCB1cGRhdGVkID0gbGluZVJlcGxhY2UoY29udGVudCwgbGluZSwgbGluZSArIDEsIChsaW5lKSA9PiB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgc3RyaW5naWYtaWNhdGlvbiBvZiB0aGUgdmFsdWUgaXMgbm90IGNvcnJlY3QgYW5kIHdpbGwgbm90IHdvcmtcbiAgICAgICAgLy8gZm9yIGFycmF5cyBvciBvYmplY3RzLCBidXQgd2lsbCBzZXJ2ZSBwdXJwb3NlIGZvciBub3cuLi5cbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBzZXRJbmxpbmVGaWVsZChsaW5lLCBrZXksIHVuZGVmaW5lZCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHNldElubGluZUZpZWxkKGxpbmUsIGtleSwgXCJcIiArIFlhbWxDb252ZXJzaW9uLnlhbWwodmFsdWUpKTtcbiAgICB9KTtcblxuICAgIGlmICh1cGRhdGVkID09IGNvbnRlbnQpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsKTtcblxuICAgIGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgdXBkYXRlZCk7XG4gICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKG51bGwpO1xufVxuIiwgImltcG9ydCB7IEZpZWxkIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IEFQUF9DT05URVhUIH0gZnJvbSBcInVpL21hcmtkb3duXCI7XG5pbXBvcnQgeyByZXdyaXRlVGFzayB9IGZyb20gXCIuL3Rhc2tcIjtcbmltcG9ydCB7IEVkaXRhYmxlQWN0aW9uIH0gZnJvbSBcInVpL2ZpZWxkcy9lZGl0YWJsZVwiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcbmltcG9ydCB7IGVkaXRQcm92ZW5hbmNlIH0gZnJvbSBcImluZGV4L2VkaXQvZmllbGRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNldEZpZWxkPFQgZXh0ZW5kcyBMaXRlcmFsPihmaWVsZDogRmllbGQsIG9uQ2hhbmdlPzogKG5ld1ZhbHVlOiBUKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgYXBwID0gdXNlQ29udGV4dChBUFBfQ09OVEVYVCk7XG4gICAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgICAgICAobmV3VmFsdWU6IFQpID0+IHtcbiAgICAgICAgICAgIGVkaXRQcm92ZW5hbmNlKGFwcCwgZmllbGQucHJvdmVuYW5jZSEsIG5ld1ZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbZmllbGQsIG9uQ2hhbmdlXVxuICAgICk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0VGFza1RleHQoYXBwOiBBcHAsIGNvcmU6IERhdGFjb3JlLCB0ZXh0OiBzdHJpbmcsIGl0ZW06IE1hcmtkb3duVGFza0l0ZW0pIHtcbiAgICBsZXQgd2l0aEZpZWxkcyA9IGAke3RleHR9JHtPYmplY3Qua2V5cyhpdGVtLiRpbmZpZWxkcykubGVuZ3RoID8gXCIgXCIgOiBcIlwifWA7XG4gICAgZm9yIChsZXQgZmllbGQgaW4gaXRlbS4kaW5maWVsZHMpIHtcbiAgICAgICAgd2l0aEZpZWxkcyA9IHNldElubGluZUZpZWxkKHdpdGhGaWVsZHMsIGZpZWxkLCBpdGVtLiRpbmZpZWxkc1tmaWVsZF0ucmF3KTtcbiAgICB9XG4gICAgYXdhaXQgcmV3cml0ZVRhc2soYXBwLnZhdWx0LCBjb3JlLCBpdGVtLCBpdGVtLiRzdGF0dXMsIHdpdGhGaWVsZHMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZpbmFsaXplcjxUPihuZXdWYWx1ZTogVCwgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPFQ+Pikge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLFxuICAgICAgICAgICAgbmV3VmFsdWU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9O1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSB1aVxuICovXG5pbXBvcnQgeyBGcmFnbWVudCwgRnVuY3Rpb25Db21wb25lbnQsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgRGlzcGF0Y2gsIFJlZHVjZXIsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IENoYW5nZUV2ZW50LCB1c2VSZWR1Y2VyIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCBTZWxlY3QsIHsgQWN0aW9uTWV0YSB9IGZyb20gXCJyZWFjdC1zZWxlY3RcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcIi4uL2hvb2tzXCI7XG5pbXBvcnQgeyBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgTGl0LCBNYXJrZG93biwgU0VUVElOR1NfQ09OVEVYVCB9IGZyb20gXCIuLi9tYXJrZG93blwiO1xuaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbFR5cGUsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IEJhc2VGaWVsZFByb3BzLCBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgTWFya2Rvd25MaXN0SXRlbSwgTWFya2Rvd25UYXNrSXRlbSB9IGZyb20gXCJpbmRleC90eXBlcy9tYXJrZG93blwiO1xuaW1wb3J0IHsgQm9vbGVhbkVkaXRhYmxlIH0gZnJvbSBcIi4vYm9vbGVhbi1maWVsZFwiO1xuaW1wb3J0IHsgUHJvZ3Jlc3NFZGl0YWJsZSB9IGZyb20gXCIuL3Byb2dyZXNzLWZpZWxkXCI7XG5pbXBvcnQgeyBSYXRpbmdFZGl0YWJsZSB9IGZyb20gXCIuL3JhdGluZ1wiO1xuaW1wb3J0IHsgdXNlRmluYWxpemVyIH0gZnJvbSBcInV0aWxzL2ZpZWxkc1wiO1xuXG5pbXBvcnQgXCIuL2ZpZWxkcy5jc3NcIjtcblxuLyoqIENvcmUgc3RhdGUgZm9yIHRyYWNraW5nIGFuIGVkaXRhYmxlIG9iamVjdC5cbiAqIEBncm91cCBTdGF0ZXNcbiAqIEB0eXBlUGFyYW0gVCAtIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBiZWluZyBlZGl0ZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0YWJsZVN0YXRlPFQ+IHtcbiAgICAvKiogV2hldGhlciB0aGUgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZC4gKi9cbiAgICBpc0VkaXRpbmc/OiBib29sZWFuO1xuICAgIC8qKiBUaGUgY3VycmVudCAoYXJiaXRyYXJ5KSBjb250ZW50IG9mIHRoZSBlZGl0YWJsZS4gKi9cbiAgICBjb250ZW50OiBUO1xuICAgIC8qKiBDYWxsYmFjayB3aGVuZXZlciB0aGUgZWRpdGFibGUgdmFsdWUgaXMgY2hhbmdlZC4gKi9cbiAgICB1cGRhdGVyOiAodmFsOiBUKSA9PiB1bmtub3duO1xuICAgIC8qKiBXaGV0aGVyIHRoZSBlZGl0b3IgaXMgYmVpbmcgcmVuZGVyZWQgaW5saW5lIGluIGEgcGFyYWdyYXBoIG9yIG5vdC4gKi9cbiAgICBpbmxpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBncm91cCBQcm9wc1xuICogQHR5cGVQYXJhbSBUIC0gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGJlaW5nIGVkaXRlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRhYmxlUHJvcHM8VD4ge1xuICAgIC8qKiBTb3VyY2UgZmlsZSBmcm9tIHdoaWNoIHRoZSBlZGl0YWJsZSB2YWx1ZSBvcmlnaW5hdGVzLiAqL1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gICAgLyoqIEJhY2t1cCBkZWZhdWx0IHJlbmRlcmVyIGZvciB0aGlzIG9iamVjdC4gKi9cbiAgICBkZWZhdWx0UmVuZGVyPzogVk5vZGU7XG4gICAgLyoqIE5vZGUgd2hpY2ggcG9pbnRzIHRvIHRoZSBhY3R1YWwgZWRpdG9yLiAqL1xuICAgIGVkaXRvcjogUmVhY3QuUmVhY3ROb2RlO1xuICAgIC8qKiBEaXNwYXRjaGVyIGZvciBjb250cm9sbGluZyB0aGUgZWRpdCBzdGF0ZSwgdHJhY2tpbmcgdXBkYXRlcywgY29tbWl0cywgYW5kIHNvIG9uLiAqL1xuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxUPj47XG4gICAgLyoqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBlZGl0b3IuICovXG4gICAgc3RhdGU6IEVkaXRhYmxlU3RhdGU8VD47XG59XG5cbnR5cGUgRWRpdGFibGVFbGVtZW50UHJvcHM8VCwgUD4gPSBFZGl0YWJsZVN0YXRlPFQ+ICYgUDtcbmV4cG9ydCB0eXBlIEVkaXRhYmxlRWxlbWVudDxULCBQID0gYW55PiA9IEZ1bmN0aW9uQ29tcG9uZW50PEVkaXRhYmxlRWxlbWVudFByb3BzPFQsIFA+ICYgUD47XG5cbi8qKlxuICogIEFjdGlvbnMgd2hpY2ggdXBkYXRlL2NoYW5nZSB0aGUgc3RhdGUgb2YgYW4gZWRpdGFibGUuXG4gKlxuICogQGludGVybmFsXG4gKiAqL1xuZXhwb3J0IHR5cGUgRWRpdGFibGVBY3Rpb248VD4gPVxuICAgIHwge1xuICAgICAgICAgIHR5cGU6IFwiY29tbWl0XCI7XG4gICAgICAgICAgLy8gb2xkVmFsdWU6IGFueSxcbiAgICAgICAgICBuZXdWYWx1ZTogVDtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiO1xuICAgICAgICAgIG5ld1ZhbHVlOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCI7XG4gICAgICAgICAgbmV3VmFsdWU6IFQ7XG4gICAgICB9O1xuXG4vKiogRGVmYXVsdCByZWR1Y2VyIGZvciBhcHBseWluZyBhY3Rpb25zIHRvIHRoZSBlZGl0YWJsZSBzdGF0ZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVkaXRhYmxlUmVkdWNlcjxUPihcbiAgICB7IGNvbnRlbnQsIHVwZGF0ZXIsIC4uLnJlc3QgfTogRWRpdGFibGVTdGF0ZTxUPixcbiAgICBhY3Rpb246IEVkaXRhYmxlQWN0aW9uPFQ+XG4pOiBFZGl0YWJsZVN0YXRlPFQ+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJjb21taXRcIjpcbiAgICAgICAgICAgIHVwZGF0ZXIoYWN0aW9uLm5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIHVwZGF0ZXIsIGNvbnRlbnQ6IGFjdGlvbi5uZXdWYWx1ZSB9O1xuICAgICAgICBjYXNlIFwiZWRpdGluZy10b2dnbGVkXCI6XG4gICAgICAgICAgICAhYWN0aW9uLm5ld1ZhbHVlICYmIHVwZGF0ZXIoY29udGVudCk7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCB1cGRhdGVyLCBjb250ZW50LCBpc0VkaXRpbmc6IGFjdGlvbi5uZXdWYWx1ZSB9O1xuICAgICAgICBjYXNlIFwiY29udGVudC1jaGFuZ2VkXCI6XG4gICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCB1cGRhdGVyLCBjb250ZW50OiBhY3Rpb24ubmV3VmFsdWUgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQsIHVwZGF0ZXIsIC4uLnJlc3QgfTtcbiAgICB9XG59XG5cbi8qKiBQcm92aWRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBhbiBlZGl0YWJsZSBmaWVsZC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRWRpdGFibGVEaXNwYXRjaDxUPihcbiAgICBpbml0aWFsOiBFZGl0YWJsZVN0YXRlPFQ+IHwgKCgpID0+IEVkaXRhYmxlU3RhdGU8VD4pXG4pOiBbRWRpdGFibGVTdGF0ZTxUPiwgRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248VD4+XSB7XG4gICAgY29uc3QgaW5pdCA9IHVzZU1lbW8oKCkgPT4gKHR5cGVvZiBpbml0aWFsID09IFwiZnVuY3Rpb25cIiA/IGluaXRpYWwoKSA6IGluaXRpYWwpLCBbaW5pdGlhbF0pO1xuICAgIHJldHVybiB1c2VSZWR1Y2VyKGVkaXRhYmxlUmVkdWNlciBhcyBSZWR1Y2VyPEVkaXRhYmxlU3RhdGU8VD4sIEVkaXRhYmxlQWN0aW9uPFQ+PiwgaW5pdCwgKHMpID0+IGluaXQpO1xufVxuLyoqXG4gKiBhIGhpZ2hlci1vcmRlci1jb21wb25lbnQgZm9yIGVkaXRpbmcgZmllbGRzLlxuICogQHBhcmFtIHByb3BzXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gRWRpdGFibGU8VD4oeyBzb3VyY2VQYXRoLCBkZWZhdWx0UmVuZGVyLCBlZGl0b3IsIGRpc3BhdGNoLCBzdGF0ZSB9OiBFZGl0YWJsZVByb3BzPFQ+KSB7XG4gICAgY29uc3QgY3VycmVudFJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLmlzRWRpdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0UmVuZGVyKSByZXR1cm4gZGVmYXVsdFJlbmRlcjtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIDxMaXQgdmFsdWU9e3N0YXRlLmNvbnRlbnQgYXMgTGl0ZXJhbH0gaW5saW5lPXt0cnVlfSBzb3VyY2VQYXRoPVwiXCIgLz47XG4gICAgICAgIH1cbiAgICB9LCBbc3RhdGUuaXNFZGl0aW5nLCBzdGF0ZS5jb250ZW50LCBzb3VyY2VQYXRoLCBkZWZhdWx0UmVuZGVyXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaCAmJiBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiBzdGF0ZS5jb250ZW50IH0pO1xuICAgIH0sIFtzdGF0ZS5jb250ZW50LCBzdGF0ZS5pc0VkaXRpbmddKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRhdGFjb3JlLWVkaXRhYmxlLW91dGVyXCIgcmVmPXtjdXJyZW50UmVmfT5cbiAgICAgICAgICAgIHtlbGVtZW50fVxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZWRFZGl0YWJsZTxULCBQID0gdW5rbm93bj4oe1xuICAgIGRlZmF1bHRSZW5kZXIsXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgb25VcGRhdGUsXG4gICAgY29udGVudCxcbiAgICBwcm9wcyxcbiAgICBzb3VyY2VQYXRoLFxufTogT21pdDxFZGl0YWJsZVByb3BzPFQ+LCBcImRpc3BhdGNoXCIgfCBcInN0YXRlXCIgfCBcImVkaXRvclwiPiAmIHtcbiAgICBvblVwZGF0ZTogKHY6IFQpID0+IHVua25vd247XG4gICAgY29udGVudDogVDtcbiAgICBlZGl0b3I6IEVkaXRhYmxlRWxlbWVudDxULCBQPjtcbiAgICBwcm9wczogUDtcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VFZGl0YWJsZURpc3BhdGNoPFQ+KCgpID0+ICh7XG4gICAgICAgIHVwZGF0ZXI6IG9uVXBkYXRlLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgIH0pKTtcbiAgICByZXR1cm4gPEVkaXRvciBkaXNwYXRjaD17ZGlzcGF0Y2h9IHsuLi5wcm9wc30gey4uLnN0YXRlfSAvPjtcbn1cblxuLyoqIEEgc2luZ2xlIHNlbGVjdGFibGUgdmFsdWUuXG4gKi9cbnR5cGUgU2VsZWN0YWJsZUJhc2UgPSBzdHJpbmcgfCBudW1iZXI7XG4vKiogQSB0eXBlIGZvciBlaXRoZXIgbXVsdGktIG9yIHNpbmdsZS1zZWxlY3QgdmFsdWVzLiAqL1xudHlwZSBTZWxlY3RhYmxlVHlwZSA9IFNlbGVjdGFibGVCYXNlIHwgU2VsZWN0YWJsZUJhc2VbXTtcblxuLyoqIEVkaXRhYmxlIHdoaWNoIGFsbG93cyBmb3Igc2VsZWN0aW9uIGZyb20gYSBsaXN0IG9mIG9wdGlvbnMuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0YWJsZUVkaXRhYmxlKHtcbiAgICBpc0VkaXRpbmcsXG4gICAgY29udGVudCxcbiAgICB1cGRhdGVyLFxuICAgIGNvbmZpZyxcbiAgICBkaXNwYXRjaCxcbn06IEVkaXRhYmxlU3RhdGU8U2VsZWN0YWJsZVR5cGU+ICZcbiAgICBCYXNlRmllbGRQcm9wczxTZWxlY3RhYmxlVHlwZT4gJiB7XG4gICAgICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxTZWxlY3RhYmxlVHlwZT4+O1xuICAgIH0pIHtcbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAobmV3VmFsdWU6IGFueSwgYWN0aW9uTWV0YTogQWN0aW9uTWV0YTxTZWxlY3RhYmxlVHlwZT4pID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIixcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLm1hcCgoeCkgPT4geC52YWx1ZSkgYXMgU2VsZWN0YWJsZVR5cGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIixcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLnZhbHVlIGFzIFNlbGVjdGFibGVUeXBlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbY29uZmlnLCBjb250ZW50LCB1cGRhdGVyLCBpc0VkaXRpbmddXG4gICAgKTtcblxuICAgIGNvbnN0IGVkaXRvciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZVByZWZpeD1cImRhdGFjb3JlLXNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICB1bnN0eWxlZFxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2NvbmZpZz8ubXVsdGkgPz8gZmFsc2V9XG4gICAgICAgICAgICAgICAgb3B0aW9ucz17Y29uZmlnPy5vcHRpb25zID8/IFtdfVxuICAgICAgICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQ9e2RvY3VtZW50LmJvZHl9XG4gICAgICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICBjb25maWc/Lm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoKEFycmF5LmlzQXJyYXkoY29udGVudCkgPyBjb250ZW50IDogW2NvbnRlbnRdKSBhcyBhbnlbXSkuY29udGFpbnMoeC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSB8fCBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAocHJvcHM6IGFueSkgPT4gXCJwcm9tcHQtaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVDb250YWluZXI6IChwcm9wczogYW55KSA9PiBcInN1Z2dlc3Rpb24taXRlbSB2YWx1ZS1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiAocHJvcHM6IGFueSkgPT4gXCJzdWdnZXN0aW9uLWNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgICAgICBtZW51OiAocHJvcHM6IGFueSkgPT4gXCJzdWdnZXN0aW9uLWNvbnRlbnQgc3VnZ2VzdGlvbi1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiAocHJvcHM6IGFueSkgPT4gYHN1Z2dlc3Rpb24taXRlbSR7cHJvcHMuaXNTZWxlY3RlZCA/IFwiIGlzLXNlbGVjdGVkXCIgOiBcIlwifWAsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSwgW2NvbnRlbnQsIHVwZGF0ZXIsIGlzRWRpdGluZywgY29uZmlnXSk7XG5cbiAgICByZXR1cm4gPEVkaXRhYmxlIGVkaXRvcj17ZWRpdG9yfSBkaXNwYXRjaD17ZGlzcGF0Y2h9IHN0YXRlPXt7IGlzRWRpdGluZywgY29udGVudCwgdXBkYXRlciB9fSAvPjtcbn1cblxuLyoqIEVkaXRhYmxlIHdoaWNoIGFsbG93cyBmb3Igc2VsZWN0aW5nIGEgZGF0ZS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEYXRlRWRpdGFibGUoe1xuICAgIGRpc3BhdGNoLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgLi4ucmVzdFxufTogRWRpdGFibGVTdGF0ZTxEYXRlVGltZSB8IHN0cmluZyB8IG51bGw+ICYge1xuICAgIHNvdXJjZVBhdGg6IHN0cmluZztcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248RGF0ZVRpbWUgfCBzdHJpbmcgfCBudWxsPj47XG59KSB7XG4gICAgLyoqIHRoZSBleHRyYSBkaXNwYXRjaCBpcyBfanVzdF8gaW4gY2FzZS4uLiAqL1xuICAgIGNvbnN0IFtzdGF0ZSwgb10gPSB1c2VFZGl0YWJsZURpc3BhdGNoPERhdGVUaW1lIHwgc3RyaW5nIHwgbnVsbD4oKCkgPT4gKHtcbiAgICAgICAgaXNFZGl0aW5nOiByZXN0LmlzRWRpdGluZyxcbiAgICAgICAgY29udGVudDogcmVzdC5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiByZXN0LnVwZGF0ZXIsXG4gICAgICAgIGlubGluZTogcmVzdC5pbmxpbmUgPz8gZmFsc2UsXG4gICAgfSkpO1xuICAgIGNvbnN0IHNldHRpbmdzID0gdXNlQ29udGV4dChTRVRUSU5HU19DT05URVhUKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKGV2dDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgbGV0IHYgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGV2dC5jdXJyZW50VGFyZ2V0LnZhbHVlKSk7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogISF2ID8gRGF0ZVRpbWUuZnJvbUpTRGF0ZSh2KS50b0Zvcm1hdChzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogXCJjb21taXRcIixcbiAgICAgICAgICAgIG5ld1ZhbHVlOiAhIXYgPyBEYXRlVGltZS5mcm9tSlNEYXRlKHYpLnRvRm9ybWF0KHNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0KSA6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICBvKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWl0XCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogISF2ID8gRGF0ZVRpbWUuZnJvbUpTRGF0ZSh2KS50b0Zvcm1hdChzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QganNEYXRlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5jb250ZW50IGluc3RhbmNlb2YgRGF0ZVRpbWVcbiAgICAgICAgICAgID8gc3RhdGUuY29udGVudFxuICAgICAgICAgICAgOiB0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcInN0cmluZ1wiICYmICEhc3RhdGUuY29udGVudFxuICAgICAgICAgICAgPyBEYXRlVGltZS5mcm9tSlNEYXRlKG5ldyBEYXRlKERhdGUucGFyc2Uoc3RhdGUuY29udGVudCkpKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH0sIFtzdGF0ZS5jb250ZW50XSk7XG5cbiAgICBjb25zdCBlZGl0b3JOb2RlID0gPGlucHV0IHR5cGU9XCJkYXRlXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSB2YWx1ZT17anNEYXRlPy50b0Zvcm1hdChcInl5eXktTU0tZGRcIil9IC8+O1xuICAgIHJldHVybiA8RWRpdGFibGU8RGF0ZVRpbWUgfCBzdHJpbmcgfCBudWxsPiBkaXNwYXRjaD17ZGlzcGF0Y2h9IHN0YXRlPXtyZXN0fSBlZGl0b3I9e2VkaXRvck5vZGV9IC8+O1xufVxuXG4vKiogQW4gZWRpdG9yIHdoaWNoIGFsbG93cyBzZWxlY3RpbmcgYSBudW1uZXJpYyB2YWx1ZS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBOdW1iZXJFZGl0YWJsZShwcm9wczogRWRpdGFibGVTdGF0ZTxudW1iZXI+KSB7XG4gICAgY29uc3QgY2ZjID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG5cbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8bnVtYmVyPigoKSA9PiAoe1xuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICBjb250ZW50OiBwcm9wcy5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiBwcm9wcy51cGRhdGVyLFxuICAgICAgICBpbmxpbmU6IHRydWUsXG4gICAgfSkpO1xuICAgIGNvbnN0IHZhbHVlID0gdXNlUmVmKHByb3BzLmNvbnRlbnQpO1xuXG4gICAgY29uc3Qgb25DaGFuZ2VDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZXZ0OiBDaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgdmFsdWUuY3VycmVudCA9IHBhcnNlRmxvYXQoKGV2dC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQpLnZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgW3ZhbHVlLmN1cnJlbnQsIHN0YXRlLmNvbnRlbnQsIHN0YXRlLnVwZGF0ZXIsIHN0YXRlLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgY29uc3QgZmluYWxpemUgPSB1c2VGaW5hbGl6ZXIodmFsdWUuY3VycmVudCwgZGlzcGF0Y2gpO1xuICAgIGNvbnN0IG9uSW5wdXQgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgYXN5bmMgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmluYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3ZhbHVlLmN1cnJlbnQsIHN0YXRlLnVwZGF0ZXIsIHN0YXRlLmNvbnRlbnQsIHN0YXRlLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgY29uc3QgZGJsQ2xpY2sgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFt2YWx1ZS5jdXJyZW50LCBzdGF0ZS51cGRhdGVyLCBzdGF0ZS5pc0VkaXRpbmcsIHN0YXRlLmNvbnRlbnRdXG4gICAgKTtcblxuICAgIGNvbnN0IHJlYWRvbmx5RWwgPSA8TGl0IGlubGluZT17ZmFsc2V9IHNvdXJjZVBhdGg9e2NmY30gdmFsdWU9e3ZhbHVlLmN1cnJlbnQgYXMgTGl0ZXJhbH0gLz47XG4gICAgY29uc3QgZWRpdG9yID0gPGlucHV0IGNsYXNzTmFtZT1cImRhdGFjb3JlLWVkaXRhYmxlXCIgdHlwZT1cIm51bWJlclwiIG9uQ2hhbmdlPXtvbkNoYW5nZUNifSBvbktleVVwPXtvbklucHV0fSAvPjtcbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCIgb25EYmxDbGljaz17ZGJsQ2xpY2t9PlxuICAgICAgICAgICAgPEVkaXRhYmxlPG51bWJlcj4gZGlzcGF0Y2g9e2Rpc3BhdGNofSBlZGl0b3I9e2VkaXRvcn0gZGVmYXVsdFJlbmRlcj17cmVhZG9ubHlFbH0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuLyoqIEVkaXRvciB3aGljaCBzdXBwb3J0cyBtdWx0aS1saW5lIHRleHQgZWRpdGluZzsgbm90ZSB0aGlzIGlzIGEgdmVyeSBzaW1wbGUgaW5wdXQgYW5kIGRvZXMgbm90IHN1cHBvcnQgbW9zdCBtYXJrZG93biBtZXRhZGF0YS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUZXh0RWRpdGFibGUocHJvcHM6IEVkaXRhYmxlU3RhdGU8c3RyaW5nPiAmIHsgbWFya2Rvd24/OiBib29sZWFuOyBzb3VyY2VQYXRoOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IGNmYyA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlRWRpdGFibGVEaXNwYXRjaDxzdHJpbmc+KCgpID0+ICh7XG4gICAgICAgIGlzRWRpdGluZzogcHJvcHMuaXNFZGl0aW5nLFxuICAgICAgICBjb250ZW50OiBwcm9wcy5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiBwcm9wcy51cGRhdGVyLFxuICAgICAgICBpbmxpbmU6IHByb3BzLmlubGluZSA/PyBmYWxzZSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB0ZXh0ID0gdXNlUmVmKFwiLVwiKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB0ZXh0LmN1cnJlbnQgPSBzdGF0ZS5jb250ZW50O1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiBzdGF0ZS5jb250ZW50IH0pO1xuICAgIH0sIFtwcm9wcy5jb250ZW50LCBzdGF0ZS5jb250ZW50XSk7XG5cbiAgICBjb25zdCBmaW5hbGl6ZSA9IHVzZUZpbmFsaXplcihzdGF0ZS5jb250ZW50LCBkaXNwYXRjaCk7XG4gICAgY29uc3Qgb25JbnB1dCA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3BzLmlubGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZpbmFsaXplKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiAmJiBlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmaW5hbGl6ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3RleHQuY3VycmVudCwgcHJvcHMuc291cmNlUGF0aCwgc3RhdGUudXBkYXRlciwgc3RhdGUuY29udGVudCwgc3RhdGUuaXNFZGl0aW5nXVxuICAgICk7XG5cbiAgICBjb25zdCBkYmxDbGljayA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZWRpdGluZy10b2dnbGVkXCIsXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW3RleHQuY3VycmVudCwgcHJvcHMuc291cmNlUGF0aCwgc3RhdGUudXBkYXRlciwgc3RhdGUuaXNFZGl0aW5nLCBzdGF0ZS5jb250ZW50XVxuICAgICk7XG4gICAgY29uc3QgcmVhZG9ubHlFbCA9IChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAge3Byb3BzLm1hcmtkb3duID8gKFxuICAgICAgICAgICAgICAgIDxNYXJrZG93biBjb250ZW50PXt0ZXh0LmN1cnJlbnQgYXMgc3RyaW5nfSBzb3VyY2VQYXRoPXtwcm9wcy5zb3VyY2VQYXRoIHx8IGNmY30gaW5saW5lPXtmYWxzZX0gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExpdCBpbmxpbmU9e2ZhbHNlfSBzb3VyY2VQYXRoPXtwcm9wcy5zb3VyY2VQYXRoIHx8IGNmY30gdmFsdWU9e3RleHQuY3VycmVudCBhcyBMaXRlcmFsfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICAgIGNvbnN0IGVkaXRvciA9IChcbiAgICAgICAgPFVuY29udHJvbGxlZFRleHRFZGl0YWJsZSBvbklucHV0PXtvbklucHV0fSBpbmxpbmU9e3Byb3BzLmlubGluZX0gZGlzcGF0Y2g9e2Rpc3BhdGNofSB0ZXh0PXt0ZXh0LmN1cnJlbnR9IC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCIgb25EYmxDbGljaz17ZGJsQ2xpY2t9PlxuICAgICAgICAgICAgPEVkaXRhYmxlPHN0cmluZz4gZGlzcGF0Y2g9e2Rpc3BhdGNofSBlZGl0b3I9e2VkaXRvcn0gZGVmYXVsdFJlbmRlcj17cmVhZG9ubHlFbH0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFVuY29udHJvbGxlZFRleHRFZGl0YWJsZSh7XG4gICAgaW5saW5lLFxuICAgIHRleHQsXG4gICAgZGlzcGF0Y2gsXG4gICAgb25JbnB1dCxcbn06IHtcbiAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBkaXNwYXRjaD86IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPHN0cmluZz4+O1xuICAgIG9uSW5wdXQ/OiAoZTogS2V5Ym9hcmRFdmVudCkgPT4gdW5rbm93bjtcbn0pIHtcbiAgICBjb25zdCBbdHh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlKHRleHQpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoICYmIGRpc3BhdGNoKHsgbmV3VmFsdWU6IHR4dCwgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiB9KTtcbiAgICB9LCBbdHh0XSk7XG4gICAgY29uc3Qgb25DaGFuZ2VDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZXZ0OiBDaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgc2V0VGV4dCgoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbdGV4dCwgZGlzcGF0Y2hdXG4gICAgKTtcblxuICAgIHJldHVybiAhaW5saW5lID8gKFxuICAgICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZWRpdGFibGVcIiBvbkNoYW5nZT17b25DaGFuZ2VDYn0gb25LZXlVcD17b25JbnB1dH0+XG4gICAgICAgICAgICB7dHh0fVxuICAgICAgICA8L3RleHRhcmVhPlxuICAgICkgOiAoXG4gICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJkYXRhY29yZS1lZGl0YWJsZVwiIHR5cGU9XCJ0ZXh0XCIgb25DaGFuZ2U9e29uQ2hhbmdlQ2J9IG9uS2V5VXA9e29uSW5wdXR9IC8+XG4gICAgKTtcbn1cbi8qKiBBbiBlZGl0YWJsZSBsaXN0IG9mIGl0ZW1zLlxuICpcbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFZGl0YWJsZUxpc3RGaWVsZCh7XG4gICAgcHJvcHMsXG4gICAgZmllbGQsXG4gICAgcGFyZW50LFxuICAgIHR5cGUsXG4gICAgZGlzcGF0Y2gsXG4gICAgcmVuZGVyQXMsXG4gICAgY29uZmlnLFxufTogeyBwcm9wczogRWRpdGFibGVTdGF0ZTxMaXRlcmFsPiB9ICYgRmllbGRDb250cm9sUHJvcHM8TGl0ZXJhbD4gJiB7XG4gICAgICAgIHBhcmVudDogTWFya2Rvd25UYXNrSXRlbSB8IE1hcmtkb3duTGlzdEl0ZW07XG4gICAgICAgIHR5cGU6IExpdGVyYWxUeXBlO1xuICAgICAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248TGl0ZXJhbD4+O1xuICAgIH0pIHtcbiAgICBjb25zdCBzdWJFZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZW5kZXJBcykge1xuICAgICAgICAgICAgY2FzZSBcInByb2dyZXNzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gXCJudW1iZXJcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFByb2dyZXNzRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD17cHJvcHMuY29udGVudCBhcyBudW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVyPXtwcm9wcy51cGRhdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4PXtjb25maWc/Lm1heCB8fCAxMDB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoPXtwYXJlbnQuJGZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwPXtjb25maWc/LnN0ZXAgfHwgMC4xfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWluPXtjb25maWc/Lm1pbiB8fCAwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsO1xuICAgICAgICAgICAgY2FzZSBcInJhdGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxSYXRpbmdFZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17Y29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmNvbnRlbnQgYXMgc3RyaW5nIHwgbnVtYmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtjb25maWd9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVyPXtwcm9wcy51cGRhdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e3Byb3BzLmNvbnRlbnQgYXMgU2VsZWN0YWJsZVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LCBbcGFyZW50LCBmaWVsZCwgcHJvcHMuY29udGVudCwgcHJvcHMuY29udGVudCwgcHJvcHMsIGNvbmZpZywgcmVuZGVyQXNdKTtcbiAgICBjb25zdCBlZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRlRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3BhcmVudC4kZmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD17cHJvcHMuY29udGVudCBhcyBEYXRlVGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXIgYXMgKHZhbDogc3RyaW5nIHwgRGF0ZVRpbWUgfCBudWxsKSA9PiBhbnl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJvb2xlYW5FZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuY29udGVudCBhcyBib29sZWFufVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzdWJFZGl0b3IgPz8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0RWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aD17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRpbmc9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PXtwcm9wcy5jb250ZW50IGFzIHN0cmluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlciBhcyAodmFsOiBzdHJpbmcpID0+IHVua25vd259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDw+e3N1YkVkaXRvciA/PyA8TnVtYmVyRWRpdGFibGUgY29udGVudD17cHJvcHMuY29udGVudCBhcyBudW1iZXJ9IHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXJ9IC8+fTwvPjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHRFZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aD17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0aW5nPXtwcm9wcy5pc0VkaXRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PXtMaXRlcmFscy50b1N0cmluZyhwcm9wcy5jb250ZW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXIgYXMgKHZhbDogc3RyaW5nKSA9PiB1bmtub3dufVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9LCBbcGFyZW50LCBmaWVsZCwgcHJvcHMuY29udGVudCwgcHJvcHMuY29udGVudCwgcHJvcHMsIGNvbmZpZywgcmVuZGVyQXMsIHN1YkVkaXRvcl0pO1xuXG4gICAgY29uc3QgZGJsY2xpY2sgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgKGV2dDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLCBuZXdWYWx1ZTogIXByb3BzLmlzRWRpdGluZyB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW3Byb3BzLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1maWVsZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmllbGQtdGl0bGVcIiBvbkRibENsaWNrPXtkYmxjbGlja30+XG4gICAgICAgICAgICAgICAge2ZpZWxkLmtleX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZpZWxkLXZhbHVlXCIgdGFiSW5kZXg9ezB9PlxuICAgICAgICAgICAgICAgIHtlZGl0b3J9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBBUFBfQ09OVEVYVCwgQ1VSUkVOVF9GSUxFX0NPTlRFWFQsIERBVEFDT1JFX0NPTlRFWFQsIExpdCB9IGZyb20gXCJ1aS9tYXJrZG93blwiO1xuXG5pbXBvcnQgeyBWTm9kZSwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgQmFzZUZpZWxkUHJvcHMgfSBmcm9tIFwidWkvZmllbGRzL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHtcbiAgICBDb250cm9sbGVkRWRpdGFibGUsXG4gICAgRWRpdGFibGUsXG4gICAgRWRpdGFibGVFbGVtZW50LFxuICAgIEVkaXRhYmxlU3RhdGUsXG4gICAgVGV4dEVkaXRhYmxlLFxuICAgIHVzZUVkaXRhYmxlRGlzcGF0Y2gsXG59IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5pbXBvcnQgeyBNYXJrZG93bkxpc3RJdGVtLCBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyByZXdyaXRlVGFzayB9IGZyb20gXCJ1dGlscy90YXNrXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5cbi8qKlxuICogU3RhdGUgZm9yIGEge0BsaW5rIExpc3RWaWV3fVxuICogQHR5cGVQYXJhbSBUIC0gdGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgbGlzdFxuICogQGdyb3VwIFN0YXRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RTdGF0ZTxUPiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgbGlzdCBzaG91bGQgYmUgb3JkZXJlZCAob2wpLCB1bm9yZGVyZWQgKHVsKSwgb3IgaGF2ZSBubyBzcGVjaWFsIG1hcmt1cCAobm9uZSkuXG4gICAgICpcbiAgICAgKiBMaXN0cyB3aXRoIG5vIHNwZWNpYWwgbWFya3VwIGp1c3QgaGF2ZSBlYWNoIGVsZW1lbnQgcmVuZGVyZWQgZGlyZWN0bHkgYXMtaXMgd2l0aG91dCBhbnkgd3JhcHBpbmdcbiAgICAgKiBpbnNpZGUgb2YgYSBzaW5nbGUgZGl2LlxuICAgICAqXG4gICAgICovXG4gICAgdHlwZT86IFwib3JkZXJlZFwiIHwgXCJ1bm9yZGVyZWRcIiB8IFwibm9uZVwiO1xuXG4gICAgLyoqIFRoZSBmdWxsIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QuICovXG4gICAgcm93cz86IFRbXTtcblxuICAgIC8qKiBDb250cm9scyB3aGV0aGVyIHBhZ2luZyBpcyBlbmFibGVkIGZvciB0aGlzIGVsZW1lbnQuIElmIHRydWUsIHVzZXMgZGVmYXVsdCBwYWdlIHNpemUuIElmIGEgbnVtYmVyLCBwYWdpbmcgaXMgZW5hYmxlZCB3aXRoIHRoZSBnaXZlbiBwYWdlIHNpemUuICovXG4gICAgcGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gdG8gdXNlIGZvciByZW5kZXJpbmcgZWFjaCBlbGVtZW50LiBDYW4gcHJvZHVjZSBlaXRoZXIgSlNYIG9yIGEgcGxhaW4gdmFsdWUgd2hpY2ggd2lsbCBiZVxuICAgICAqIHJlbmRlcmVkIGFzIGEgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICByZW5kZXJlcj86IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdE5vZGUgfCBMaXRlcmFsO1xuXG4gICAgLyoqIGZpZWxkcyB0byBkaXNwbGF5IHVuZGVyIGVhY2ggaXRlbSBpbiB0aGlzIHRhc2sgbGlzdCAqL1xuICAgIGRpc3BsYXllZEZpZWxkcz86IChCYXNlRmllbGRQcm9wczxMaXRlcmFsPiAmIHsga2V5OiBzdHJpbmcgfSlbXTtcbn1cblxuLyoqXG4gKlxuICogQSBzaW1wbGUgYW5kIHJlc3BvbnNpdmUgbGlzdCB2aWV3LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExpc3RWaWV3PFQ+KHN0YXRlOiBMaXN0U3RhdGU8VD4pIHtcbiAgICAvLyBjb25zdCBzZXR0aW5ncyA9IHVzZUNvbnRleHQoU0VUVElOR1NfQ09OVEVYVCk7XG5cbiAgICBjb25zdCB0eXBlID0gc3RhdGUudHlwZSA/PyBcInVub3JkZXJlZFwiO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gc3RhdGUucm93cyA/PyBbXTtcbiAgICBjb25zdCByZW5kZXJlciA9IHN0YXRlLnJlbmRlcmVyID8/IGlkZW50aXR5O1xuXG4gICAgaWYgKHR5cGUgPT0gXCJub25lXCIpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdCBkYXRhY29yZS1saXN0LW5vbmVcIj5cbiAgICAgICAgICAgICAgICB7ZWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLXVud3JhcHBlZC1saXN0LWl0ZW1cIiBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwib3JkZXJlZFwiKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8b2wgY2xhc3NOYW1lPXtcImRhdGFjb3JlLWxpc3QgZGF0YWNvcmUtbGlzdC1vcmRlcmVkXCJ9PlxuICAgICAgICAgICAgICAgIHtlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJkYXRhY29yZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L29sPlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdCBkYXRhY29yZS1saXN0LXVub3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgIHtlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJkYXRhY29yZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIE5vLW9wIGVsZW1lbnQgcmVuZGVyZXIuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5PFQ+KGVsZW1lbnQ6IFQpOiBUIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgRW5zdXJlcyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIHJlbmRlcmFibGUgcmVhY3Qgbm9kZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVFbGVtZW50PFQ+KGVsZW1lbnQ6IFQpOiBWTm9kZSB7XG4gICAgaWYgKGlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA8RGVmYXVsdExpc3RFbGVtZW50IGVsZW1lbnQ9e2VsZW1lbnR9IC8+O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgRGVmYXVsdCBsaXN0IGVsZW1lbnQgd2hpY2gganVzdCB0cmllcyB0byByZW5kZXIgdGhlIHZhbHVlIGFzIGEgbGl0ZXJhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0TGlzdEVsZW1lbnQ8VD4oeyBlbGVtZW50IH06IHsgZWxlbWVudDogVCB9KSB7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuXG4gICAgcmV0dXJuIDxMaXQgaW5saW5lPXt0cnVlfSB2YWx1ZT17ZWxlbWVudCBhcyBMaXRlcmFsfSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSAvPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVkaXRhYmxlTGlzdEVsZW1lbnQ8VD4oe1xuICAgIGVsZW1lbnQ6IGl0ZW0sXG4gICAgZWRpdG9yLFxuICAgIG9uVXBkYXRlLFxuICAgIGZpbGUsXG4gICAgZWRpdG9yUHJvcHMsXG59OiB7XG4gICAgZWRpdG9yOiAodmFsdWU6IFQpID0+IEVkaXRhYmxlRWxlbWVudDxUPjtcbiAgICBlbGVtZW50OiBUO1xuICAgIGZpbGU6IHN0cmluZztcbiAgICBvblVwZGF0ZTogKHZhbHVlOiBUKSA9PiB1bmtub3duO1xuICAgIGVkaXRvclByb3BzOiB1bmtub3duO1xufSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDb250cm9sbGVkRWRpdGFibGU8VD5cbiAgICAgICAgICAgIHByb3BzPXtlZGl0b3JQcm9wc31cbiAgICAgICAgICAgIHNvdXJjZVBhdGg9e2ZpbGV9XG4gICAgICAgICAgICBjb250ZW50PXtpdGVtfVxuICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3IoaXRlbSl9XG4gICAgICAgICAgICBvblVwZGF0ZT17b25VcGRhdGV9XG4gICAgICAgICAgICBkZWZhdWx0UmVuZGVyPXs8RGVmYXVsdExpc3RFbGVtZW50IGVsZW1lbnQ9e2l0ZW19IC8+fVxuICAgICAgICAvPlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cblxuaW1wb3J0IHsgTWFya2Rvd25MaXN0SXRlbSwgTWFya2Rvd25UYXNrSXRlbSB9IGZyb20gXCJpbmRleC90eXBlcy9tYXJrZG93blwiO1xuaW1wb3J0IHsgRWRpdGFibGVMaXN0RWxlbWVudCwgTGlzdFN0YXRlIH0gZnJvbSBcImFwaS91aS92aWV3cy9saXN0XCI7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBBUFBfQ09OVEVYVCwgREFUQUNPUkVfQ09OVEVYVCB9IGZyb20gXCJ1aS9tYXJrZG93blwiO1xuaW1wb3J0IHsgSlNYSW50ZXJuYWwgfSBmcm9tIFwicHJlYWN0L3NyYy9qc3hcIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBjb21wbGV0ZVRhc2ssIHJld3JpdGVUYXNrIH0gZnJvbSBcInV0aWxzL3Rhc2tcIjtcbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHtcbiAgICBFZGl0YWJsZUFjdGlvbixcbiAgICBFZGl0YWJsZUxpc3RGaWVsZCxcbiAgICBFZGl0YWJsZVN0YXRlLFxuICAgIFRleHRFZGl0YWJsZSxcbiAgICB1c2VFZGl0YWJsZURpc3BhdGNoLFxufSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gXCJleHByZXNzaW9uL2ZpZWxkXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IFwic3R5bGVzL2xpc3RzLmNzc1wiO1xuXG4vKipcbiAqIFByb3BzIHBhc3NlZCB0byB0aGUgdGFzayBsaXN0IGNvbXBvbmVudC5cbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tQcm9wcyBleHRlbmRzIExpc3RTdGF0ZTxNYXJrZG93blRhc2tJdGVtIHwgTWFya2Rvd25MaXN0SXRlbT4ge1xuICAgIC8qKiB0YXNrIHN0YXRlcyB0byBjeWNsZSB0aHJvdWdoLCBpZiBzcGVjaWZpZWQgKi9cbiAgICBhZGRpdGlvbmFsU3RhdGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGxpc3Qgb2YgdGFza3MuXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUYXNrTGlzdCh7XG4gICAgcm93czogaXRlbXMsXG4gICAgYWRkaXRpb25hbFN0YXRlczogc3RhdGVzLFxuICAgIHJlbmRlcmVyOiBsaXN0UmVuZGVyZXIgPSAoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgPEVkaXRhYmxlTGlzdEVsZW1lbnQ8c3RyaW5nPlxuICAgICAgICAgICAgb25VcGRhdGU9e3VzZUxpc3RJdGVtRWRpdGluZyhpdGVtKX1cbiAgICAgICAgICAgIGVsZW1lbnQ9e2l0ZW0uJGNsZWFudGV4dCF9XG4gICAgICAgICAgICBmaWxlPXtpdGVtLiRmaWxlfVxuICAgICAgICAgICAgZWRpdG9yUHJvcHM9e3sgbWFya2Rvd246IHRydWUsIHNvdXJjZVBhdGg6IGl0ZW0uJGZpbGUgfX1cbiAgICAgICAgICAgIGVkaXRvcj17KGl0KSA9PiBUZXh0RWRpdGFibGV9XG4gICAgICAgIC8+XG4gICAgKSxcbiAgICAuLi5yZXN0XG59OiBUYXNrUHJvcHMpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZGF0YWNvcmUgY29udGFpbnMtdGFzay1saXN0XCI+XG4gICAgICAgICAgICAgICAge2l0ZW1zPy5tYXAoKGl0ZW0sIGluZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFzayBzdGF0ZT17eyAuLi5yZXN0LCBhZGRpdGlvbmFsU3RhdGVzOiBzdGF0ZXMgfX0gaXRlbT17aXRlbX0gLz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGlzdFJlbmRlcmVyKGl0ZW0sIGluZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1saXN0LWl0ZW0tZmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SXRlbUZpZWxkcyBkaXNwbGF5ZWRGaWVsZHM9e3Jlc3QuZGlzcGxheWVkRmllbGRzfSBpdGVtPXtpdGVtfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICApO1xuICAgIH0sIFtpdGVtcywgc3RhdGVzXSk7XG4gICAgcmV0dXJuIDxGcmFnbWVudD57ISFpdGVtcyAmJiBjb250ZW50fTwvRnJhZ21lbnQ+O1xufVxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGl0ZW0gaW4gYSB0YXNrIGxpc3RpbmcuXG4gKiBAcGFyYW0gcHJvcHMgLSB0aGUgY29tcG9uZW50J3MgcHJvcHNcbiAqIEBwYXJhbSBwcm9wcy5pdGVtIC0gdGhlIGN1cnJlbnQgdGFzayBiZWluZyByZW5kZXJlZFxuICogQHBhcmFtIHByb3BzLnN0YXRlIC0gdGhlIHtAbGluayBUYXNrUHJvcHN9IG9mIHRoZSB7QGxpbmsgVGFza0xpc3R9IGluIHdoaWNoIHRoaXMgVGFzayBhcHBlYXJzXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gVGFzayh7IGl0ZW0sIHN0YXRlOiBwcm9wcyB9OiB7IGl0ZW06IE1hcmtkb3duVGFza0l0ZW07IHN0YXRlOiBUYXNrUHJvcHMgfSkge1xuICAgIGNvbnN0IGFwcCA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpO1xuICAgIGNvbnN0IGNvcmUgPSB1c2VDb250ZXh0KERBVEFDT1JFX0NPTlRFWFQpO1xuICAgIGNvbnN0IHsgc2V0dGluZ3MgfSA9IGNvcmU7XG4gICAgY29uc3Qgc3RhdGVzID0gW1wiIFwiLCAuLi4ocHJvcHMuYWRkaXRpb25hbFN0YXRlcyB8fCBbXSksIFwieFwiXTtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsU3RhdGVzICYmIHByb3BzLmFkZGl0aW9uYWxTdGF0ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBjdXJJbmRleCA9IHN0YXRlcy5maW5kSW5kZXgoKGEpID0+IGEgPT09IGl0ZW0uJHN0YXR1cyk7XG4gICAgICAgICAgICBjdXJJbmRleCsrO1xuICAgICAgICAgICAgaWYgKGN1ckluZGV4ID49IHN0YXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGVzW2N1ckluZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLiRjb21wbGV0ZWQgPyBcIiBcIiA6IFwieFwiO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGU8c3RyaW5nPihpdGVtLiRzdGF0dXMpO1xuICAgIGNvbnN0IGNvbXBsZXRlZFJlZiA9IHVzZVJlZjxEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxMaXRlcmFsPj4+KG51bGwpO1xuICAgIGNvbnN0IG9uQ2hlY2tlZCA9IHVzZVN0YWJsZUNhbGxiYWNrKGFzeW5jIChldnQ6IEpTWEludGVybmFsLlRhcmdldGVkTW91c2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCBjb21wbGV0ZWQgPSBldnQuY3VycmVudFRhcmdldC5jaGVja2VkO1xuICAgICAgICBsZXQgbmV3U3RhdHVzOiBzdHJpbmc7XG4gICAgICAgIGlmIChldnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIG5ld1N0YXR1cyA9IG5leHRTdGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdHVzID0gY29tcGxldGVkID8gXCJ4XCIgOiBcIiBcIjtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGF0dXMobmV3U3RhdHVzKTtcbiAgICAgICAgYXdhaXQgY29tcGxldGVUYXNrKGNvbXBsZXRlZCwgaXRlbSwgYXBwLnZhdWx0LCBjb3JlKTtcbiAgICAgICAgY29uc3QgbnYgPSBjb21wbGV0ZWQgPyBEYXRlVGltZS5ub3coKS50b0Zvcm1hdChzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCkgOiBudWxsO1xuICAgICAgICBjb21wbGV0ZWRSZWYuY3VycmVudCAmJiBjb21wbGV0ZWRSZWYuY3VycmVudCh7IHR5cGU6IFwiY29tbWl0XCIsIG5ld1ZhbHVlOiBudiB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBjaGVja2VkID0gdXNlTWVtbygoKSA9PiBpdGVtLiRzdGF0dXMgIT09IFwiIFwiLCBbaXRlbS4kc3RhdHVzXSk7XG4gICAgY29uc3QgZVN0YXRlOiBFZGl0YWJsZVN0YXRlPHN0cmluZz4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVwZGF0ZXI6IHVzZUxpc3RJdGVtRWRpdGluZyhpdGVtKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0uJGNsZWFudGV4dCxcbiAgICAgICAgICAgIGlubGluZTogZmFsc2UsXG4gICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9IGFzIEVkaXRhYmxlU3RhdGU8c3RyaW5nPjtcbiAgICB9LCBbaXRlbS4kY2xlYW50ZXh0LCBpdGVtLiR0ZXh0XSk7XG4gICAgY29uc3QgdGhlRWxlbWVudCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IDxUZXh0RWRpdGFibGUgc291cmNlUGF0aD17aXRlbS4kZmlsZX0gey4uLmVTdGF0ZX0gLz4sXG4gICAgICAgIFtlU3RhdGUuY29udGVudCwgaXRlbSwgcHJvcHMucm93c11cbiAgICApO1xuXG4gICAgY29uc3QgW2NvbGxhcHNlZCwgc2V0Q29sbGFwc2VkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IGl0ZW0uJGVsZW1lbnRzLmxlbmd0aCA+IDA7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0Q29sbGFwc2VkKCFjb2xsYXBzZWQpO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBjbGFzc05hbWU9e1wiZGF0YWNvcmUgdGFzay1saXN0LWl0ZW1cIiArIChjaGVja2VkID8gXCIgaXMtY2hlY2tlZFwiIDogXCJcIil9IGRhdGEtdGFzaz17c3RhdHVzfT5cbiAgICAgICAgICAgIDxDb2xsYXBzZUluZGljYXRvclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldENvbGxhcHNlZCgoYykgPT4gIWMpfVxuICAgICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICAgIGhhc0NoaWxkcmVuPXtoYXNDaGlsZHJlbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZGF0YWNvcmUgdGFzay1saXN0LWl0ZW0tY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPXtjaGVja2VkfSBvbkNsaWNrPXtvbkNoZWNrZWR9IC8+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdC1pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAge3RoZUVsZW1lbnR9XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdC1pdGVtLWZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtRmllbGRzIGRpc3BsYXllZEZpZWxkcz17cHJvcHMuZGlzcGxheWVkRmllbGRzfSBpdGVtPXtpdGVtfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge2hhc0NoaWxkcmVuICYmICFjb2xsYXBzZWQgJiYgPFRhc2tMaXN0IHsuLi5wcm9wc30gcm93cz17aXRlbS4kZWxlbWVudHN9IC8+fVxuICAgICAgICA8L2xpPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIENvbGxhcHNlSW5kaWNhdG9yKHtcbiAgICBjb2xsYXBzZWQsXG4gICAgb25DbGljayxcbiAgICBoYXNDaGlsZHJlbixcbn06IHtcbiAgICBjb2xsYXBzZWQ6IGJvb2xlYW47XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBoYXNDaGlsZHJlbjogYm9vbGVhbjtcbn0pIHtcbiAgICBjb25zdCB0b2dnbGVDbmFtZXMgPSBbXCJkYXRhY29yZS1jb2xsYXBzZXJcIl07XG4gICAgaWYgKGNvbGxhcHNlZCkgdG9nZ2xlQ25hbWVzLnB1c2goXCJpcy1jb2xsYXBzZWRcIik7XG4gICAgaWYgKCFoYXNDaGlsZHJlbikgdG9nZ2xlQ25hbWVzLnB1c2goXCJuby1jaGlsZHJlblwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IG9uQ2xpY2s9e29uQ2xpY2t9IGNsYXNzTmFtZT17dG9nZ2xlQ25hbWVzLmpvaW4oXCIgXCIpfSBkaXI9XCJhdXRvXCI+XG4gICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmctaWNvbiByaWdodC10cmlhbmdsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDhMMTIgMTdMMjEgOFwiPjwvcGF0aD5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGFuIGVkaXRhYmxlIHNldCBvZiBmaWVsZHMgYmVsb3cgYSB0YXNrIG9yIGxpc3QgaXRlbS5cbiAqIEBoaWRkZW5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMaXN0SXRlbUZpZWxkcyh7XG4gICAgZGlzcGxheWVkRmllbGRzOiBkaXNwbGF5ZWRGaWVsZHNQcm9wLFxuICAgIGl0ZW0sXG59OiB7XG4gICAgZGlzcGxheWVkRmllbGRzPzogVGFza1Byb3BzW1wiZGlzcGxheWVkRmllbGRzXCJdO1xuICAgIGl0ZW06IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtO1xufSkge1xuICAgIGNvbnN0IGFwcCA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpO1xuICAgIGNvbnN0IGNvcmUgPSB1c2VDb250ZXh0KERBVEFDT1JFX0NPTlRFWFQpO1xuICAgIGNvbnN0IHsgc2V0dGluZ3MgfSA9IGNvcmU7XG4gICAgY29uc3QgZGlzcGxheWVkRmllbGRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChkaXNwbGF5ZWRGaWVsZHNQcm9wICE9IHVuZGVmaW5lZCkgcmV0dXJuIGRpc3BsYXllZEZpZWxkc1Byb3A7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaXRlbS4kaW5maWVsZHMpLm1hcCgoZikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogZi5rZXksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IExpdGVyYWxzLnR5cGVPZihmLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckFzOiBcInJhd1wiLFxuICAgICAgICAgICAgICAgIH0gYXMgTm9uTnVsbGFibGU8VGFza1Byb3BzW1wiZGlzcGxheWVkRmllbGRzXCJdPlswXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW2Rpc3BsYXllZEZpZWxkc1Byb3AsIGl0ZW0uJGluZmllbGRzLCBpdGVtXSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtkaXNwbGF5ZWRGaWVsZHMubWFwKChpZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZmllbGQua2V5ID0gaWZpZWxkLmtleS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGxldCBkZWZWYWwgPSB0eXBlb2YgaWZpZWxkLmRlZmF1bHRWYWx1ZSA9PSBcImZ1bmN0aW9uXCIgPyBpZmllbGQuZGVmYXVsdFZhbHVlKCkgOiBpZmllbGQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBkZWZGaWVsZDogRmllbGQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaWZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRlZlZhbCxcbiAgICAgICAgICAgICAgICAgICAgcmF3OiBMaXRlcmFscy50b1N0cmluZyhkZWZWYWwpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZpZWxkVmFsdWVdID0gdXNlU3RhdGU8TGl0ZXJhbD4oaXRlbS4kaW5maWVsZHNbaWZpZWxkPy5rZXldPy52YWx1ZSB8fCBkZWZGaWVsZC52YWx1ZSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzdGF0ZTIsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8TGl0ZXJhbD4oe1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBmaWVsZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVyOiB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWw6IExpdGVyYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gKHY6IExpdGVyYWwpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgaW5zdGFuY2VvZiBEYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2LnRvRm9ybWF0KHNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2ICE9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTGl0ZXJhbHMudG9TdHJpbmcodilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHdpdGhGaWVsZHMgPSBpdGVtLiR0ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoRmllbGRzICYmIGl0ZW0uJHRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uJGluZmllbGRzW2lmaWVsZC5rZXldKSBpdGVtLiRpbmZpZWxkc1tpZmllbGQua2V5XS52YWx1ZSA9IGRhdGVTdHJpbmcodmFsKSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIGluIGl0ZW0uJGluZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoRmllbGRzID0gc2V0SW5saW5lRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlU3RyaW5nKGl0ZW0uJGluZmllbGRzW2ZpZWxkXT8udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGaWVsZHMgPSBzZXRJbmxpbmVGaWVsZChpdGVtLiR0ZXh0LCBpZmllbGQua2V5LCBkYXRlU3RyaW5nKHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlVGFzayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcC52YXVsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0gPyBpdGVtLiRzdGF0dXMgOiBcIiBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW0uJGluZmllbGRzXVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpZmllbGQua2V5ID09IHNldHRpbmdzLnRhc2tDb21wbGV0aW9uVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgaHVoP1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRSZWYuY3VycmVudCA9IGRpc3BhdGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVMaXN0RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzPXtzdGF0ZTJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtpZmllbGQudHlwZSB8fCBMaXRlcmFscy53cmFwVmFsdWUoZmllbGRWYWx1ZSkhLnR5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXtpdGVtLiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2l0ZW0uJGluZmllbGRzW2lmaWVsZC5rZXldIHx8IGRlZkZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtpZmllbGQuY29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXtpdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17c3RhdGUyLnVwZGF0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZmllbGRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckFzPXtpZmllbGQucmVuZGVyQXN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiB1c2VMaXN0SXRlbUVkaXRpbmcoaXRlbTogTWFya2Rvd25UYXNrSXRlbSB8IE1hcmtkb3duTGlzdEl0ZW0pIHtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBjb3JlID0gdXNlQ29udGV4dChEQVRBQ09SRV9DT05URVhUKTtcbiAgICBjb25zdCBzdGF0dXMgPSB1c2VNZW1vKCgpID0+IChpdGVtIGluc3RhbmNlb2YgTWFya2Rvd25UYXNrSXRlbSA/IGl0ZW0uJHN0YXR1cyA6IFwiIFwiKSwgW2l0ZW1dKTtcbiAgICByZXR1cm4gdXNlU3RhYmxlQ2FsbGJhY2soXG4gICAgICAgIGFzeW5jICh2YWw6IExpdGVyYWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdpdGhGaWVsZHMgPSBgJHt2YWx9JHtPYmplY3Qua2V5cyhpdGVtLiRpbmZpZWxkcykubGVuZ3RoID8gXCIgXCIgOiBcIlwifWA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgaW4gaXRlbS4kaW5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aEZpZWxkcyA9IHNldElubGluZUZpZWxkKHdpdGhGaWVsZHMsIGZpZWxkLCBpdGVtLiRpbmZpZWxkc1tmaWVsZF0ucmF3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgcmV3cml0ZVRhc2soYXBwLnZhdWx0LCBjb3JlLCBpdGVtLCBzdGF0dXMsIHdpdGhGaWVsZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbc3RhdHVzLCBpdGVtXVxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCBcIi4vcGFnaW5nLmNzc1wiO1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBGcmFnbWVudCwgUmVmT2JqZWN0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTRVRUSU5HU19DT05URVhUIH0gZnJvbSBcInVpL21hcmtkb3duXCI7XG5cbi8qKiAwLWluZGV4ZWQgcGFnZSBjb250cm9sLiBgcGFnZWAgc2hvdWxkIGJlIHRoZSBjdXJyZW50IDAtaW5kZXhlZCBwYWdlLCB3aGlsZSBgdG90YWxQYWdlc2AgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKiBAcGFyYW0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gUmF3Q29udHJvbGxlZFBhZ2VyKHtcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgdG90YWxQYWdlcyxcbn06IHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgc2V0UGFnZTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG59KSB7XG4gICAgLy8gQ2xhbXAgcGFnZSB0byBiZSB3aXRoaW4gdGhlIGFjdHVhbCBib3VuZHMgb2YgcGFnZXMuXG4gICAgdG90YWxQYWdlcyA9IE1hdGgubWF4KDEsIHRvdGFsUGFnZXMpO1xuXG4gICAgY29uc3QgcmVhbFBhZ2UgPSBjbGFtcChwYWdlLCAwLCB0b3RhbFBhZ2VzIC0gMSk7XG4gICAgY29uc3QgdmlzaWJsZVBhZ2VzID0gdXNlTWVtbygoKSA9PiBzcGxpdFBhZ2VzKHJlYWxQYWdlLCB0b3RhbFBhZ2VzKSwgW3JlYWxQYWdlLCB0b3RhbFBhZ2VzXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sXCI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYy1wYWdpbmctY29udHJvbC1wYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcGFnZSAhPSAwICYmIHNldFBhZ2UocGFnZSAtIDEpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cGFnZSA9PSAwfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUuNSAxOWwtNy03IDctN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge3Zpc2libGVQYWdlcy5tYXAoKHBhZ2VzLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7aSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sLXBhZ2UgZGMtcGFnaW5nLWNvbnRyb2wtc2VwYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlKHJlYWxQYWdlICsgKGlzTGVmdFNlcGVyYXRvcihyZWFsUGFnZSwgdmlzaWJsZVBhZ2VzLmxlbmd0aCwgaSkgPyAtNSA6IDUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUtcmVuZGVyaW5nPVwiZ2VvbWV0cmljUHJlY2lzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYy1wYWdpbmctY29udHJvbC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHI9XCIxXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxOVwiIGN5PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgcj1cIjFcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjVcIiBjeT1cIjEyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHI9XCIxXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlLXJlbmRlcmluZz1cImdlb21ldHJpY1ByZWNpc2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPXtgZGMtcGFnaW5nLWNvbnRyb2wtbGVhcC0ke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMZWZ0U2VwZXJhdG9yKHJlYWxQYWdlLCB2aXNpYmxlUGFnZXMubGVuZ3RoLCBpKSA/IFwibGVmdFwiIDogXCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxN2w1LTUtNS01XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTdsNS01LTUtNVwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7cGFnZXMubWFwKChwKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZGMtcGFnaW5nLWNvbnRyb2wtcGFnZSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID09PSByZWFsUGFnZSA/IFwiIGRjLXBhZ2luZy1jb250cm9sLXBhZ2UtYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHNldFBhZ2UocCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3AgKyAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sLXBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwYWdlICE9PSB0b3RhbFBhZ2VzIC0gMSAmJiBzZXRQYWdlKHBhZ2UgKyAxKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhZ2UgPT09IHRvdGFsUGFnZXMgLSAxfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC41IDVsNyA3LTcgN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuXG4vKiogMC1pbmRleGVkIHBhZ2UgY29udHJvbC4gYHBhZ2VgIHNob3VsZCBiZSB0aGUgY3VycmVudCAwLWluZGV4ZWQgcGFlZywgd2hpbGUgYG1heFBhZ2VgIGlzIHRoZSBtYXhpbXVtIHBhZ2UgKGluY2x1c2l2ZSkuICovXG5leHBvcnQgY29uc3QgQ29udHJvbGxlZFBhZ2VyID0gUmVhY3QubWVtbyhSYXdDb250cm9sbGVkUGFnZXIpO1xuXG4vKiogSG9vayB3aGljaCBwcm92aWRlcyBhdXRvbWF0aWMgcGFnZSByZWZsb3cgYW5kIHBhZ2Ugc3RhdGUgbWFuYWdlbWVudC5cbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUGFnaW5nKHtcbiAgICBpbml0aWFsUGFnZSA9IDAsXG4gICAgcGFnZVNpemUsXG4gICAgZWxlbWVudHMsXG59OiB7XG4gICAgaW5pdGlhbFBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGVsZW1lbnRzOiBudW1iZXI7XG59KTogW251bWJlciwgbnVtYmVyLCAocGFnZTogbnVtYmVyKSA9PiB2b2lkXSB7XG4gICAgLy8gV2UgdHJhY2sgdGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2hlbiBwYWdlIHNpemUgY2hhbmdlcyB3ZSBjYW4ganVzdCBhdXRvbWF0aWNhbGx5IHJlY29tcHV0ZSB0aGUgcGFnZSB3ZSBhcmUgb24gd2l0aG91dCBhbnkgc3RhdGUuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChlbGVtZW50cyAvIHBhZ2VTaXplKSk7XG4gICAgY29uc3QgW3BhZ2VTdGFydCwgc2V0UGFnZVN0YXJ0XSA9IHVzZVN0YXRlKCgpID0+IGNsYW1wKGluaXRpYWxQYWdlLCAwLCB0b3RhbFBhZ2VzIC0gMSkpO1xuXG4gICAgY29uc3Qgc2V0Qm91bmRlZFBhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHBhZ2U6IG51bWJlcikgPT4gc2V0UGFnZVN0YXJ0KGNsYW1wKHBhZ2UsIDAsIHRvdGFsUGFnZXMgLSAxKSAqIHBhZ2VTaXplKSxcbiAgICAgICAgW3BhZ2VTaXplLCB0b3RhbFBhZ2VzXVxuICAgICk7XG5cbiAgICBjb25zdCBwYWdlID0gY2xhbXAoTWF0aC5mbG9vcihwYWdlU3RhcnQgLyBwYWdlU2l6ZSksIDAsIHRvdGFsUGFnZXMgLSAxKTtcbiAgICByZXR1cm4gW3BhZ2UsIHRvdGFsUGFnZXMsIHNldEJvdW5kZWRQYWdlXTtcbn1cblxuLyoqIFByb3ZpZGVzIHVzZWZ1bCBtZXRhZGF0YSBhYm91dCBwYWdpbmcuXG4gKiBAZ3JvdXAgUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmcge1xuICAgIC8qKiBXaGV0aGVyIHBhZ2luZyBpcyBlbmFibGVkLiAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqIFdoZXRoZXIgdGhlIHZpZXcgc2hvdWxkIHNjcm9sbCB3aGVuIHRoZSBwYWdlIGNoYW5nZXMuICovXG4gICAgc2Nyb2xsOiBib29sZWFuO1xuICAgIC8qKiBUaGUgY3VycmVudCBwYWdlLiAqL1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICAvKiogVGhlIHNpemUgb2YgZWFjaCBwYWdlLiAqL1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgLyoqIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgZm9yIHRoaXMgZGF0YS4gKi9cbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gICAgLyoqIFVwZGF0ZSB0aGUgY3VycmVudCBwYWdlLiAqL1xuICAgIHNldFBhZ2U6IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQ2VudHJhbCBwYWdpbmcgaG9vayB3aGljaCBleHRyYWN0cyBwYWdlIG1ldGFkYXRhIG91dCBvZiBEYXRhY29yZSBzZXR0aW5ncywgaGFuZGxlcyBwYWdlIG92ZXJmbG93LCBjdXJyZW50IHBhZ2Ugc3RhdGUsIGFuZCB1cGRhdGluZyB0aGUgcGFnZVxuICogaWYgdGhlIGVsZW1lbnRzIGNoYW5nZS4gSWYgYSBjb250YWluZXIgaXMgc3BlY2lmaWVkLCBhbHNvIHN1cHBvcnRzIHNjcm9sbGluZyB0aGUgY29udGFpbmVyIHZpZXcgb24gcGFnZSBjaGFuZ2VzLlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEYXRhY29yZVBhZ2luZyh7XG4gICAgaW5pdGlhbFBhZ2UgPSAwLFxuICAgIHBhZ2luZyxcbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2UsXG4gICAgZWxlbWVudHMsXG4gICAgY29udGFpbmVyLFxufToge1xuICAgIGluaXRpYWxQYWdlOiBudW1iZXI7XG4gICAgcGFnaW5nOiBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHNjcm9sbE9uUGFnZUNoYW5nZT86IGJvb2xlYW4gfCBudW1iZXI7XG4gICAgZWxlbWVudHM6IG51bWJlcjtcbiAgICBjb250YWluZXI/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xufSk6IFBhZ2luZyB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB1c2VDb250ZXh0KFNFVFRJTkdTX0NPTlRFWFQpO1xuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0eXBlb2YgcGFnaW5nID09PSBcIm51bWJlclwiID8gcGFnaW5nIDogc2V0dGluZ3MuZGVmYXVsdFBhZ2VTaXplO1xuICAgIGNvbnN0IHBhZ2luZ0VuYWJsZWQgPSB0eXBlb2YgcGFnaW5nID09PSBcIm51bWJlclwiIHx8IHBhZ2luZyA9PT0gdHJ1ZTtcbiAgICBjb25zdCBzaG91bGRTY3JvbGwgPVxuICAgICAgICAodHlwZW9mIHNjcm9sbE9uUGFnZUNoYW5nZSA9PT0gXCJudW1iZXJcIiAmJiBzY3JvbGxPblBhZ2VDaGFuZ2UgPj0gcGFnZVNpemUpIHx8XG4gICAgICAgICEhKHNjcm9sbE9uUGFnZUNoYW5nZSA/PyBzZXR0aW5ncy5zY3JvbGxPblBhZ2VDaGFuZ2UpO1xuXG4gICAgY29uc3QgW3BhZ2UsIHRvdGFsUGFnZXMsIHJhd1NldFBhZ2VdID0gdXNlUGFnaW5nKHsgaW5pdGlhbFBhZ2UsIHBhZ2VTaXplLCBlbGVtZW50cyB9KTtcblxuICAgIC8vIEhhbmRsZSBhdXRvLXNjcm9sbCBpZiBhIGNvbnRhaW5lciBpcyBwcm92aWRlZC5cbiAgICBjb25zdCBzZXRQYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChuZXdQYWdlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChwYWdlICE9IG5ld1BhZ2UgJiYgY29udGFpbmVyICYmIHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxuICAgICAgICAgICAgICAgICAgICBibG9jazogXCJzdGFydFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmxpbmU6IFwibmVhcmVzdFwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByYXdTZXRQYWdlKG5ld1BhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBbcGFnZSwgY29udGFpbmVyLCBzaG91bGRTY3JvbGwsIHJhd1NldFBhZ2VdXG4gICAgKTtcblxuICAgIHJldHVybiB7IGVuYWJsZWQ6IHBhZ2luZ0VuYWJsZWQsIHNjcm9sbDogc2hvdWxkU2Nyb2xsLCBwYWdlLCBwYWdlU2l6ZSwgdG90YWxQYWdlcywgc2V0UGFnZSB9O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY2xhbXAoaW5wdXQ6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoaW5wdXQgPCBtaW4pIHJldHVybiBtaW47XG4gICAgaWYgKGlucHV0ID4gbWF4KSByZXR1cm4gbWF4O1xuICAgIHJldHVybiBpbnB1dDtcbn1cblxuLyoqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIGZpbmRpbmcgdGhlIHNwZWNpZmljIHBhZ2UgbnVtYmVycyB0byByZW5kZXIuIEFsd2F5cyBhaW1zIHRvIHJlbmRlciA5IG9yIDEwIHBhZ2UgbnVtYmVycyB3aXRoIGEgc2VwYXJhdG9yLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBzcGxpdFBhZ2VzKHBhZ2U6IG51bWJlciwgdG90YWxQYWdlczogbnVtYmVyKTogbnVtYmVyW11bXSB7XG4gICAgLy8gSWYgbGVzcyB0aGFuIDEyIHBhZ2VzLCBzaG93IGFsbCBvZiB0aGVtLlxuICAgIGlmICh0b3RhbFBhZ2VzIDwgMTIpIHJldHVybiBbQXJyYXkuZnJvbSh7IGxlbmd0aDogdG90YWxQYWdlcyB9LCAoXywgaSkgPT4gaSldO1xuXG4gICAgLy8gV2UgaGF2ZSBhdCBsZWFzdCAxMiBwYWdlcyAoMCAuLiAxMCBpbmNsdXNpdmUpLiBPdXIgZ29hbCBpcyB0byBoYXZlIDkgdG90YWwgdmlzaWJsZSBlbGVtZW50cywgc28gc3BsaXQgYmFzZWQgb24gdGhhdC5cbiAgICAvLyA1IHN1cnJvdW5kaW5nIHtwYWdlfSwgMCwgMSwgbWF4UGFnZSAtIDEsIG1heFBhZ2UuXG4gICAgaWYgKHBhZ2UgPCA1KVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDddLFxuICAgICAgICAgICAgW3RvdGFsUGFnZXMgLSAyLCB0b3RhbFBhZ2VzIC0gMV0sXG4gICAgICAgIF07XG4gICAgZWxzZSBpZiAocGFnZSA+IHRvdGFsUGFnZXMgLSA2KVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgWzAsIDFdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA4LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA3LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA2LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA1LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA0LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAzLFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAyLFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAxLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgXTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbMCwgMV0sXG4gICAgICAgICAgICBbcGFnZSAtIDIsIHBhZ2UgLSAxLCBwYWdlLCBwYWdlICsgMSwgcGFnZSArIDJdLFxuICAgICAgICAgICAgW3RvdGFsUGFnZXMgLSAyLCB0b3RhbFBhZ2VzIC0gMV0sXG4gICAgICAgIF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gaXNMZWZ0U2VwZXJhdG9yKHJlYWxQYWdlOiBudW1iZXIsIHZpc2libGVQYWdlc0xlbmd0aDogbnVtYmVyLCBzZXBlcmF0b3JJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgd2UgaGF2ZSAyIHZpc2libGUgcGFnZXMsIHdlIGNhbiBkZXRlcm1pbmUgc2VwZXJhdG9yIGlzIGNsaWNrZWQgYnkgcmVhbFBhZ2UuXG4gICAgLy8gSWYgd2UgaGF2ZSAzIHZpc2libGUgcGFnZXMsIHdlIGNhbiBkZXRlcm1pbmUgc2VwZXJhdG9yIGlzIGNsaWNrZWQgYnkgaW5kZXguXG4gICAgaWYgKHZpc2libGVQYWdlc0xlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAocmVhbFBhZ2UgPCA1KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzZXBlcmF0b3JJbmRleCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAidmFyIHByZWZpeCA9IFwiZmFzXCI7XG52YXIgZmEwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzAnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcIjMwXCIsIFwiTTAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJzMTYwIDcxLjYgMTYwIDE2MFYzMjBjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0MDguNCAwIDMyMFYxOTJ6TTE2MCA5NmMtNTMgMC05NiA0My05NiA5NlYzMjBjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NlYxOTJjMC01My00My05Ni05Ni05NnpcIl1cbn07XG52YXIgZmExID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzEnLFxuICBpY29uOiBbMjU2LCA1MTIsIFtdLCBcIjMxXCIsIFwiTTE2MCA2NGMwLTExLjgtNi41LTIyLjYtMTYuOS0yOC4ycy0yMy01LTMyLjggMS42bC05NiA2NEMtLjUgMTExLjItNC40IDEzMSA1LjQgMTQ1LjhzMjkuNyAxOC43IDQ0LjQgOC45TDk2IDEyMy44VjQxNkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxNjBWNjR6XCJdXG59O1xudmFyIGZhMiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICcyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCIzMlwiLCBcIk0xNDIuOSA5NmMtMjEuNSAwLTQyLjIgOC41LTU3LjQgMjMuOEw1NC42IDE1MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MC4yIDc0LjVDNjcuNSA0Ny4zIDEwNC40IDMyIDE0Mi45IDMyQzIyMyAzMiAyODggOTcgMjg4IDE3Ny4xYzAgMzguNS0xNS4zIDc1LjQtNDIuNSAxMDIuNkwxMDkuMyA0MTZIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOUwyMDAuMiAyMzQuNWMxNS4yLTE1LjIgMjMuOC0zNS45IDIzLjgtNTcuNGMwLTQ0LjgtMzYuMy04MS4xLTgxLjEtODEuMXpcIl1cbn07XG52YXIgZmEzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzMnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcIjMzXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIMjcyYzEzLjIgMCAyNSA4LjEgMjkuOCAyMC40czEuNSAyNi4zLTguMiAzNS4yTDE2Mi4zIDIwOEgxODRjNzUuMSAwIDEzNiA2MC45IDEzNiAxMzZzLTYwLjkgMTM2LTEzNiAxMzZIMTA1LjRDNjMgNDgwIDI0LjIgNDU2IDUuMyA0MTguMWwtMS45LTMuOGMtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDEuOSAzLjhjOC4xIDE2LjMgMjQuOCAyNi41IDQyLjkgMjYuNUgxODRjMzkuOCAwIDcyLTMyLjIgNzItNzJzLTMyLjItNzItNzItNzJIODBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC40cy0xLjUtMjYuMyA4LjItMzUuMkwxODkuNyA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbnZhciBmYTQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnNCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiMzRcIiwgXCJNMTg5IDc3LjZjNy41LTE2IC43LTM1LjEtMTUuMy00Mi42cy0zNS4xLS43LTQyLjYgMTUuM0wzIDMyMi40Yy00LjcgOS45LTMuOSAyMS41IDEuOSAzMC44UzIxIDM2OCAzMiAzNjhIMjU2djgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzY4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMFYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzA0SDgyLjRMMTg5IDc3LjZ6XCJdXG59O1xudmFyIGZhNSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICc1JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCIzNVwiLCBcIk0zMi41IDU4LjNDMzUuMyA0My4xIDQ4LjUgMzIgNjQgMzJIMjU2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDkwLjdMNzAuMyAyMDhIMTg0Yzc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2cy02MC45IDEzNi0xMzYgMTM2SDEwMC41Yy0zOS40IDAtNzUuNC0yMi4zLTkzLTU3LjVsLTQuMS04LjJjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlzMzUtMS41IDQyLjkgMTQuM2w0LjEgOC4yYzYuOCAxMy42IDIwLjYgMjIuMSAzNS44IDIyLjFIMTg0YzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcySDMyYy05LjUgMC0xOC41LTQuMi0yNC42LTExLjVzLTguNi0xNi45LTYuOS0yNi4ybDMyLTE3NnpcIl1cbn07XG52YXIgZmE2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzYnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcIjM2XCIsIFwiTTIzMi40IDg0LjdjMTEuNC0xMy41IDkuNy0zMy43LTMuOC00NS4xcy0zMy43LTkuNy00NS4xIDMuOEwzOC42IDIxNC43QzE0LjcgMjQyLjkgMS4xIDI3OC40IC4xIDMxNS4yYzAgMS40LS4xIDIuOS0uMSA0LjNjMCAuMiAwIC4zIDAgLjVjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBzMTYwLTcxLjYgMTYwLTE2MGMwLTg1LjUtNjcuMS0xNTUuNC0xNTEuNS0xNTkuOGw2My45LTc1LjZ6TTI1NiAzMjBBOTYgOTYgMCAxIDEgNjQgMzIwYTk2IDk2IDAgMSAxIDE5MiAwelwiXVxufTtcbnZhciBmYTcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnNycsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzdcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMkgyODhjMTEuNSAwIDIyIDYuMSAyNy43IDE2LjFzNS43IDIyLjItLjEgMzIuMWwtMjI0IDM4NGMtOC45IDE1LjMtMjguNSAyMC40LTQzLjggMTEuNXMtMjAuNC0yOC41LTExLjUtNDMuOEwyMzIuMyA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbnZhciBmYTggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnOCcsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzhcIiwgXCJNMzA0IDE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEgxNDRDNzMuMyAzMiAxNiA4OS4zIDE2IDE2MGMwIDM0LjYgMTMuNyA2NiAzNiA4OUMyMC41IDI3Mi4zIDAgMzA5LjggMCAzNTJjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhoNjRjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC00Mi4yLTIwLjUtNzkuNy01Mi0xMDNjMjIuMy0yMyAzNi01NC40IDM2LTg5ek0xNzYuMSAyODhIMTkyYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0SDEyOGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGgxNS45YzAgMCAuMSAwIC4xIDBoMzJjMCAwIC4xIDAgLjEgMHptMC02NGMwIDAgMCAwIDAgMEgxNDRjMCAwIDAgMCAwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0aDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMzUuMy0yOC42IDY0LTY0IDY0elwiXVxufTtcbnZhciBmYTkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnOScsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzlcIiwgXCJNNjQgMTkyYTk2IDk2IDAgMSAwIDE5MiAwQTk2IDk2IDAgMSAwIDY0IDE5MnptODcuNSAxNTkuOEM2Ny4xIDM0Ny40IDAgMjc3LjUgMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMnMxNjAgNzEuNiAxNjAgMTYwYzAgMi42LS4xIDUuMy0uMiA3LjljLTEuNyAzNS43LTE1LjIgNzAtMzguNCA5Ny40bC0xNDUgMTcxLjRjLTExLjQgMTMuNS0zMS42IDE1LjItNDUuMSAzLjhzLTE1LjItMzEuNi0zLjgtNDUuMWw2My45LTc1LjZ6XCJdXG59O1xudmFyIGZhRmlsbERyaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsbC1kcmlwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTc2XCIsIFwiTTQxLjQgOS40QzUzLjktMy4xIDc0LjEtMy4xIDg2LjYgOS40TDE2OCA5MC43bDUzLjEtNTMuMWMyOC4xLTI4LjEgNzMuNy0yOC4xIDEwMS44IDBMNDc0LjMgMTg5LjFjMjguMSAyOC4xIDI4LjEgNzMuNyAwIDEwMS44TDI4My45IDQ4MS40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBMMzAuNiAzNjMuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS44TDEyMi43IDEzNiA0MS40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zem0xNzYgMjIxLjNMMTY4IDE4MS4zIDc1LjkgMjczLjRjLTQuMiA0LjItNyA5LjMtOC40IDE0LjZIMzg2LjdsNDIuMy00Mi4zYzMuMS0zLjEgMy4xLTguMiAwLTExLjNMMjc3LjcgODIuOWMtMy4xLTMuMS04LjItMy4xLTExLjMgMEwyMTMuMyAxMzZsNDkuNCA0OS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwek01MTIgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTI1LjIgMzIuNi03OS42IDUxLjItMTA4LjdjNi05LjQgMTkuNS05LjQgMjUuNSAwQzU0My40IDM2OC40IDU3NiA0MjIuOCA1NzYgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0elwiXVxufTtcbnZhciBmYUFycm93c1RvQ2lyY2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10by1jaXJjbGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YmRcIiwgXCJNOS40IDkuNEMyMS45LTMuMSA0Mi4xLTMuMSA1NC42IDkuNEwxNjAgMTE0LjdWOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY5NmMwIDQuMy0uOSA4LjUtMi40IDEyLjJjLTEuNiAzLjctMy44IDcuMy02LjkgMTAuM2wtLjEgLjFjLTMuMSAzLTYuNiA1LjMtMTAuMyA2LjljLTMuOCAxLjYtNy45IDIuNC0xMi4yIDIuNEg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgxOC43TDkuNCA1NC42Qy0zLjEgNDIuMS0zLjEgMjEuOSA5LjQgOS40ek0yNTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTE0LjcgMzUySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDk2IDBsLjEgMGM4LjggMCAxNi43IDMuNiAyMi41IDkuM2wuMSAuMWMzIDMuMSA1LjMgNi42IDYuOSAxMC4zYzEuNiAzLjggMi40IDcuOSAyLjQgMTIuMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzOTcuM0w1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxMTQuNyAzNTJ6TTQxNiA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjE4LjdMNTg1LjQgOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMNTI1LjMgMTYwSDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0NDhjLTguOCAwLTE2LjgtMy42LTIyLjYtOS4zbC0uMS0uMWMtMy0zLjEtNS4zLTYuNi02LjktMTAuM3MtMi40LTcuOC0yLjQtMTIuMmwwLS4xdjBWOTZ6TTUyNS4zIDM1Mkw2MzAuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEw0ODAgMzk3LjNWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMyMHYwYzAgMCAwLS4xIDAtLjFjMC00LjMgLjktOC40IDIuNC0xMi4yYzEuNi0zLjggMy45LTcuMyA2LjktMTAuNGM1LjgtNS44IDEzLjctOS4zIDIyLjUtOS40YzAgMCAuMSAwIC4xIDBoMCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg1MjUuM3pcIl1cbn07XG52YXIgZmFDaXJjbGVDaGV2cm9uUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZXZyb24tcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNoZXZyb24tY2lyY2xlLXJpZ2h0XCJdLCBcImYxMzhcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMEEyNTYgMjU2IDAgMSAwIDAgMjU2ek0yNDEgMzc3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg3LTg3LTg3LTg3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMMzQ1IDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDEgMzc3elwiXVxufTtcbnZhciBmYUNoZXZyb25DaXJjbGVSaWdodCA9IGZhQ2lyY2xlQ2hldnJvblJpZ2h0O1xudmFyIGZhQXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTk0Nl0sIFwiNDBcIiwgXCJNMjU2IDY0QzE1MCA2NCA2NCAxNTAgNjQgMjU2czg2IDE5MiAxOTIgMTkyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ2MzJjMCA1My00MyA5Ni05NiA5NmMtMjkuMyAwLTU1LjYtMTMuMi03My4yLTMzLjlDMzIwIDM3MS4xIDI4OS41IDM4NCAyNTYgMzg0Yy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4YzI3LjkgMCA1My43IDguOSA3NC43IDI0LjFjNS43LTUgMTMuMS04LjEgMjEuMy04LjFjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2ODAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJ6bTY0IDE5MmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6XCJdXG59O1xudmFyIGZhVHJhc2hDYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhc2gtY2FuJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjE0NjAsIFwidHJhc2gtYWx0XCJdLCBcImYyZWRcIiwgXCJNMTM1LjIgMTcuN0MxNDAuNiA2LjggMTUxLjcgMCAxNjMuOCAwSDI4NC4yYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdMMzIwIDMyaDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmg5Nmw3LjItMTQuM3pNMzIgMTI4SDQxNlY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIOTZjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHptOTYgNjRjLTguOCAwLTE2IDcuMi0xNiAxNlY0MzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2em05NiAwYy04LjggMC0xNiA3LjItMTYgMTZWNDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjA4YzAtOC44LTcuMi0xNi0xNi0xNnptOTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2VjQzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIwOGMwLTguOC03LjItMTYtMTYtMTZ6XCJdXG59O1xudmFyIGZhVHJhc2hBbHQgPSBmYVRyYXNoQ2FuO1xudmFyIGZhVGV4dEhlaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZXh0LWhlaWdodCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjAzNFwiLCBcIk02NCAxMjhWOTZoNjRsMCAzMjBIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MmwwLTMyMGg2NHYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDE2MCA0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTUwMi42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlzMTYuNiAxOS44IDI5LjYgMTkuOGgzMlYzNTJINDE2Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWw2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEg1MTJWMTYwaDMyYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0elwiXVxufTtcbnZhciBmYVVzZXJYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2VyLXRpbWVzXCJdLCBcImYyMzVcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNDcxIDE0M2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3IDQ3IDQ3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ3LTQ3LTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ3LTQ3LTQ3LTQ3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpcIl1cbn07XG52YXIgZmFVc2VyVGltZXMgPSBmYVVzZXJYbWFyaztcbnZhciBmYVN0ZXRob3Njb3BlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0ZXRob3Njb3BlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NjU4XSwgXCJmMGYxXCIsIFwiTTE0Mi40IDIxLjljNS42IDE2LjgtMy41IDM0LjktMjAuMiA0MC41TDk2IDcxLjFWMTkyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZWNzEuMWwtMjYuMS04LjdjLTE2LjgtNS42LTI1LjgtMjMuNy0yMC4yLTQwLjVzMjMuNy0yNS44IDQwLjUtMjAuMmwyNi4xIDguN0MzMzQuNCAxOS4xIDM1MiA0My41IDM1MiA3MS4xVjE5MmMwIDc3LjItNTQuNiAxNDEuNi0xMjcuMyAxNTYuN0MyMzEgNDA0LjYgMjc4LjQgNDQ4IDMzNiA0NDhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJWMjY1LjNjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjNjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zVjMzNmMwIDk3LjItNzguOCAxNzYtMTc2IDE3NmMtOTIuOSAwLTE2OC45LTcxLjktMTc1LjUtMTYzLjFDODcuMiAzMzQuMiAzMiAyNjkuNiAzMiAxOTJWNzEuMWMwLTI3LjUgMTcuNi01MiA0My44LTYwLjdsMjYuMS04LjdjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4yek00ODAgMjI0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG52YXIgZmFNZXNzYWdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21lc3NhZ2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNvbW1lbnQtYWx0XCJdLCBcImYyN2FcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0aDk2djgwYzAgNi4xIDMuNCAxMS42IDguOCAxNC4zczExLjkgMi4xIDE2LjgtMS41TDMwOS4zIDQxNkg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6XCJdXG59O1xudmFyIGZhQ29tbWVudEFsdCA9IGZhTWVzc2FnZTtcbnZhciBmYUluZm8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5mbycsXG4gIGljb246IFsxOTIsIDUxMiwgW10sIFwiZjEyOVwiLCBcIk00OCA4MGE0OCA0OCAwIDEgMSA5NiAwQTQ4IDQ4IDAgMSAxIDQ4IDgwek0wIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINjRWMjU2SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb3duLWxlZnQtYW5kLXVwLXJpZ2h0LXRvLWNlbnRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY29tcHJlc3MtYWx0XCJdLCBcImY0MjJcIiwgXCJNNDM5IDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJzLTEyLjUgMTQuOC0yMi4yIDE0LjhIMjk2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFY3MmMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsMzkgMzlMNDM5IDd6TTcyIDI3MkgyMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRWNDQwYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5TDczIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMNyA0NzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3TDU1IDMxM2MtNi45LTYuOS04LjktMTcuMi01LjItMjYuMnMxMi41LTE0LjggMjIuMi0xNC44elwiXVxufTtcbnZhciBmYUNvbXByZXNzQWx0ID0gZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlcjtcbnZhciBmYUV4cGxvc2lvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdleHBsb3Npb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZTlcIiwgXCJNNDk5LjYgMTEuM2M2LjctMTAuNyAyMC41LTE0LjUgMzEuNy04LjVzMTUuOCAxOS41IDEwLjYgMzFMNDA0LjggMzM4LjZjMi4yIDIuMyA0LjMgNC43IDYuMyA3LjFsOTcuMi01NC43YzEwLjUtNS45IDIzLjYtMy4xIDMwLjkgNi40czYuMyAyMy0yLjIgMzEuNWwtODcgODdIMzc4LjVjLTEzLjItMzcuMy00OC43LTY0LTkwLjUtNjRzLTc3LjQgMjYuNy05MC41IDY0SDExNy44TDQyLjMgMzYzLjdjLTkuNy02LjctMTMuMS0xOS42LTcuOS0zMC4zczE3LjQtMTUuOSAyOC43LTEyLjRsOTcuMiAzMC40YzMtMy45IDYuMS03LjcgOS40LTExLjNMMTA3LjQgMjM2LjNjLTYuMS0xMC4xLTMuOS0yMy4xIDUuMS0zMC43czIyLjItNy41IDMxLjEgLjFMMjQ2IDI5My42YzEuNS0uNCAzLS44IDQuNS0xLjFsMTMuNi0xNDIuN2MxLjItMTIuMyAxMS41LTIxLjcgMjMuOS0yMS43czIyLjcgOS40IDIzLjkgMjEuN2wxMy41IDE0MS45TDQ5OS42IDExLjN6TTY0IDQ0OHYwSDUxMnYwaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDY0ek0yODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFGaWxlTGluZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1saW5lcycsXG4gIGljb246IFszODQsIDUxMiwgWzEyODQ0MSwgMTI4NDYyLCA2MTY4NiwgXCJmaWxlLWFsdFwiLCBcImZpbGUtdGV4dFwiXSwgXCJmMTVjXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNMTEyIDI1NkgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFGaWxlQWx0ID0gZmFGaWxlTGluZXM7XG52YXIgZmFGaWxlVGV4dCA9IGZhRmlsZUxpbmVzO1xudmFyIGZhV2F2ZVNxdWFyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YXZlLXNxdWFyZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjgzZVwiLCBcIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzIwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQxNmg5NlYyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJINjA4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDUxMlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMlY5NkgxOTJWMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDk2VjY0elwiXVxufTtcbnZhciBmYVJpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmluZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjcwYlwiLCBcIk02NCAyMDhjMCA3LjggNC40IDE4LjcgMTcuMSAzMC4zQzEyNi41IDIxNC4xIDE4OC45IDIwMCAyNTYgMjAwczEyOS41IDE0LjEgMTc0LjkgMzguM0M0NDMuNiAyMjYuNyA0NDggMjE1LjggNDQ4IDIwOGMwLTEyLjMtMTAuOC0zMi00Ny45LTUwLjZDMzY0LjkgMTM5LjggMzE0IDEyOCAyNTYgMTI4cy0xMDguOSAxMS44LTE0NC4xIDI5LjRDNzQuOCAxNzYgNjQgMTk1LjcgNjQgMjA4em0xOTIgNDBjLTQ3IDAtODkuMyA3LjYtMTIyLjkgMTkuN0MxNjYuMyAyODAuMiAyMDguOCAyODggMjU2IDI4OHM4OS43LTcuOCAxMjIuOS0yMC4zQzM0NS4zIDI1NS42IDMwMyAyNDggMjU2IDI0OHpNMCAyMDhjMC00OS42IDM5LjQtODUuOCA4My4zLTEwNy44QzEyOS4xIDc3LjMgMTkwLjMgNjQgMjU2IDY0czEyNi45IDEzLjMgMTcyLjcgMzYuMmM0My45IDIyIDgzLjMgNTguMiA4My4zIDEwNy44djk2YzAgNDkuNi0zOS40IDg1LjgtODMuMyAxMDcuOEMzODIuOSA0MzQuNyAzMjEuNyA0NDggMjU2IDQ0OHMtMTI2LjktMTMuMy0xNzIuNy0zNi4yQzM5LjQgMzg5LjggMCAzNTMuNiAwIDMwNFYyMDh6XCJdXG59O1xudmFyIGZhQnVpbGRpbmdVbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy11bicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRkOVwiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoOTZWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2ODBoOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek0yMzcuMyA3MS4xbDM0LjcgNTJWODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyVjE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY4MGMwLTcuMSA0LjYtMTMuMyAxMS40LTE1LjNzMTQgLjYgMTcuOSA2LjR6TTExMiA4MHY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjgwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhWODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG52YXIgZmFEaWNlVGhyZWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS10aHJlZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4NThdLCBcImY1MjdcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjggNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUNhbGVuZGFyRGF5cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWxlbmRhci1kYXlzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYWxlbmRhci1hbHRcIl0sIFwiZjA3M1wiLCBcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NEgyODhWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY2NGg0OGMyNi41IDAgNDggMjEuNSA0OCA0OHY0OEgwVjExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NEg5NlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJINDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTkyem02NCA4MHYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTI4IDB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzM2ek02NCA0MDB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlY0MDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWNDAwYzAtOC44LTcuMi0xNi0xNi0xNkgyMDh6bTExMiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjQwMGMwLTguOC03LjItMTYtMTYtMTZIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhQ2FsZW5kYXJBbHQgPSBmYUNhbGVuZGFyRGF5cztcbnZhciBmYUFuY2hvckNpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FuY2hvci1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YWFcIiwgXCJNMzIwIDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bTIxLjEgODBDMzY3IDE1OC44IDM4NCAxMjkuNCAzODQgOTZjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAzMy40IDE3IDYyLjggNDIuOSA4MEgyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJWNDQ4SDIwOGMtNTMgMC05Ni00My05Ni05NnYtNi4xbDcgN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMOTcgMjYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw3IDMxOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDctN1YzNTJjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBoODAgODBjOC4yIDAgMTYuMy0uNiAyNC4yLTEuOGMtMjIuMi0xNi4yLTQwLjQtMzcuNS01My02Mi4ySDMyMFYzNjggMjQwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM0MS4xek02NDAgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzg1LjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbnZhciBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1jaXJjbGUtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZDFcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjIzMi4yYy0zOS4xIDMyLjMtNjQgODEuMS02NCAxMzUuOGMwIDQ5LjUgMjAuNCA5NC4yIDUzLjMgMTI2LjJDMzY0LjUgNTA1LjEgMzUxLjEgNTEyIDMzNiA1MTJIMjQwVjQzMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHY4MEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6TTgwIDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkg4MHptODAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2em0xMTItMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMjcyek02NCAxMTJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDgwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE3NiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkgxNzZ6bTgwIDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkgyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnptOTYgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0MC43LTY3LjNjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42TDUyMS40IDM1Mkg0MzJjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoODkuNGwtMjguNyAyOC43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsNTYtNTZjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTU2LTU2Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHpcIl1cbn07XG52YXIgZmFWb2xsZXliYWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbGxleWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NTIsIFwidm9sbGV5YmFsbC1iYWxsXCJdLCBcImY0NWZcIiwgXCJNNTExLjggMjY3LjRjLTI2LjEgOC43LTUzLjQgMTMuOC04MSAxNS4xYzkuMi0xMDUuMy0zMS41LTIwNC4yLTEwMy4yLTI3Mi40QzQzNC4xIDQxLjEgNTEyIDEzOS41IDUxMiAyNTZjMCAzLjgtLjEgNy42LS4yIDExLjR6bS0zLjkgMzQuN2MtNS44IDMyLTE3LjYgNjItMzQuMiA4OC43Yy05Ny41IDQ4LjUtMjE3LjcgNDIuNi0zMTEuOS0yNC41YzIzLjctMzYuMiA1NS40LTY3LjcgOTQuNS05MS44Yzc5LjkgNDMuMiAxNzAuMSA1MC44IDI1MS42IDI3LjZ6bS0yMzYtNTUuNWMtMi41LTkwLjktNDEuMS0xNzIuNy0xMDEuOS0yMzEuN0MxOTYuOCA1LjIgMjI1LjggMCAyNTYgMGMyLjcgMCA1LjMgMCA3LjkgLjFjOTAuOCA2MC4yIDE0NS43IDE2Ny4yIDEzNC43IDI4Mi4zYy00My4xLTIuNC04Ni40LTE0LjEtMTI2LjgtMzUuOXpNMTM4IDI4LjhjMjAuNiAxOC4zIDM4LjcgMzkuNCA1My43IDYyLjZDOTUuOSAxMzYuMSAzMC42IDIyMC44IDcuMyAzMTYuOUMyLjUgMjk3LjQgMCAyNzcgMCAyNTZDMCAxNTcuMiA1NiA3MS41IDEzOCAyOC44em02OS42IDkwLjVjMTkuNSAzOC42IDMxIDgxLjkgMzIuMyAxMjcuN0MxNjIuNSAyOTQuNiAxMTAuOSAzNjguOSA5MC4yIDQ1MUM2NiA0MzAuNCA0NS42IDQwNS40IDMwLjQgMzc3LjJjNi43LTEwOC43IDcxLjktMjA5LjkgMTc3LjEtMjU3Ljl6TTI1NiA1MTJjLTUwLjcgMC05OC0xNC43LTEzNy44LTQwLjJjNS42LTI3IDE0LjgtNTMuMSAyNy40LTc3LjdDMjMyLjIgNDU0LjYgMzM4LjEgNDY4LjggNDMzIDQ0MWMtNDYgNDQtMTA4LjMgNzEtMTc3IDcxelwiXVxufTtcbnZhciBmYVZvbGxleWJhbGxCYWxsID0gZmFWb2xsZXliYWxsO1xudmFyIGZhQXJyb3dzVXBUb0xpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3dzLXVwLXRvLWxpbmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0YzJcIiwgXCJNMzIgOTZsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2ek05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMjM3LjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMTAuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NnptMzIwIDQ1LjNjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBMNDE2IDIzNy4zIDQxNiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIxMC43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3pcIl1cbn07XG52YXIgZmFTb3J0RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzb3J0LWRvd24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInNvcnQtZGVzY1wiXSwgXCJmMGRkXCIsIFwiTTE4Mi42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTI4LTEyOGMtOS4yLTkuMi0xMS45LTIyLjktNi45LTM0LjlzMTYuNi0xOS44IDI5LjYtMTkuOEgyODhjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOWwtMTI4IDEyOHpcIl1cbn07XG52YXIgZmFTb3J0RGVzYyA9IGZhU29ydERvd247XG52YXIgZmFDaXJjbGVNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtbWludXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcIm1pbnVzLWNpcmNsZVwiXSwgXCJmMDU2XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xODQgMjMySDMyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxODRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdXG59O1xudmFyIGZhTWludXNDaXJjbGUgPSBmYUNpcmNsZU1pbnVzO1xudmFyIGZhRG9vck9wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9vci1vcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTJiXCIsIFwiTTMyMCAzMmMwLTkuOS00LjUtMTkuMi0xMi4zLTI1LjJTMjg5LjgtMS40IDI4MC4yIDFsLTE3OS45IDQ1Qzc5IDUxLjMgNjQgNzAuNSA2NCA5Mi41VjQ0OEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5NiAyODhoMzJWNDgwIDMyek0yNTYgMjU2YzAgMTcuNy0xMC43IDMyLTI0IDMycy0yNC0xNC4zLTI0LTMyczEwLjctMzIgMjQtMzJzMjQgMTQuMyAyNCAzMnptOTYtMTI4aDk2VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1MTJWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDM1MnY2NHpcIl1cbn07XG52YXIgZmFSaWdodEZyb21CcmFja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JpZ2h0LWZyb20tYnJhY2tldCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2lnbi1vdXQtYWx0XCJdLCBcImYyZjVcIiwgXCJNMzc3LjkgMTA1LjlMNTAwLjcgMjI4LjdjNy4yIDcuMiAxMS4zIDE3LjEgMTEuMyAyNy4zcy00LjEgMjAuMS0xMS4zIDI3LjNMMzc3LjkgNDA2LjFjLTYuNCA2LjQtMTUgOS45LTI0IDkuOWMtMTguNyAwLTMzLjktMTUuMi0zMy45LTMzLjlsMC02Mi4xLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwIDAtNjIuMWMwLTE4LjcgMTUuMi0zMy45IDMzLjktMzMuOWM5IDAgMTcuNiAzLjYgMjQgOS45ek0xNjAgOTZMOTYgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXVxufTtcbnZhciBmYVNpZ25PdXRBbHQgPSBmYVJpZ2h0RnJvbUJyYWNrZXQ7XG52YXIgZmFBdG9tID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2F0b20nLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODgzXSwgXCJmNWQyXCIsIFwiTTI1NiAzOTguOGMtMTEuOCA1LjEtMjMuNCA5LjctMzQuOSAxMy41YzE2LjcgMzMuOCAzMSAzNS43IDM0LjkgMzUuN3MxOC4xLTEuOSAzNC45LTM1LjdjLTExLjQtMy45LTIzLjEtOC40LTM0LjktMTMuNXpNNDQ2IDI1NmMzMyA0NS4yIDQ0LjMgOTAuOSAyMy42IDEyOGMtMjAuMiAzNi4zLTYyLjUgNDkuMy0xMTUuMiA0My4yYy0yMiA1Mi4xLTU1LjYgODQuOC05OC40IDg0LjhzLTc2LjQtMzIuNy05OC40LTg0LjhjLTUyLjcgNi4xLTk1LTYuOC0xMTUuMi00My4yQzIxLjcgMzQ2LjkgMzMgMzAxLjIgNjYgMjU2Yy0zMy00NS4yLTQ0LjMtOTAuOS0yMy42LTEyOGMyMC4yLTM2LjMgNjIuNS00OS4zIDExNS4yLTQzLjJDMTc5LjYgMzIuNyAyMTMuMiAwIDI1NiAwczc2LjQgMzIuNyA5OC40IDg0LjhjNTIuNy02LjEgOTUgNi44IDExNS4yIDQzLjJjMjAuNyAzNy4xIDkuNCA4Mi44LTIzLjYgMTI4em0tNjUuOCA2Ny40Yy0xLjcgMTQuMi0zLjkgMjgtNi43IDQxLjJjMzEuOCAxLjQgMzguNi04LjcgNDAuMi0xMS43YzIuMy00LjIgNy0xNy45LTExLjktNDguMWMtNi44IDYuMy0xNCAxMi41LTIxLjYgMTguNnptLTYuNy0xNzUuOWMyLjggMTMuMSA1IDI2LjkgNi43IDQxLjJjNy42IDYuMSAxNC44IDEyLjMgMjEuNiAxOC42YzE4LjktMzAuMiAxNC4yLTQ0IDExLjktNDguMWMtMS42LTIuOS04LjQtMTMtNDAuMi0xMS43ek0yOTAuOSA5OS43QzI3NC4xIDY1LjkgMjU5LjkgNjQgMjU2IDY0cy0xOC4xIDEuOS0zNC45IDM1LjdjMTEuNCAzLjkgMjMuMSA4LjQgMzQuOSAxMy41YzExLjgtNS4xIDIzLjQtOS43IDM0LjktMTMuNXptLTE1OSA4OC45YzEuNy0xNC4zIDMuOS0yOCA2LjctNDEuMmMtMzEuOC0xLjQtMzguNiA4LjctNDAuMiAxMS43Yy0yLjMgNC4yLTcgMTcuOSAxMS45IDQ4LjFjNi44LTYuMyAxNC0xMi41IDIxLjYtMTguNnpNMTEwLjIgMzA0LjhDOTEuNCAzMzUgOTYgMzQ4LjcgOTguMyAzNTIuOWMxLjYgMi45IDguNCAxMyA0MC4yIDExLjdjLTIuOC0xMy4xLTUtMjYuOS02LjctNDEuMmMtNy42LTYuMS0xNC44LTEyLjMtMjEuNi0xOC42ek0zMzYgMjU2YTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHptLTgwLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFTb2FwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NvYXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MzJdLCBcImUwNmVcIiwgXCJNMjA4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzIwIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNNDE2IDMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAgMTYwYzAgMjcuNi0xMS43IDUyLjUtMzAuNCA3MC4xQzQyMi4xIDI3NS43IDQ0OCAzMTAuOCA0NDggMzUyYzAgNTMtNDMgOTYtOTYgOTZIMTYwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2aDg4LjRjLTE1LjItMTctMjQuNC0zOS40LTI0LjQtNjRIOTZjLTUzIDAtOTYgNDMtOTYgOTZWNDE2YzAgNTMgNDMgOTYgOTYgOTZINDE2YzUzIDAgOTYtNDMgOTYtOTZWMjg4YzAtNTMtNDMtOTYtOTYtOTZ6TTE2MCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRIMzUyYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0SDMyMCAxNjB6XCJdXG59O1xudmFyIGZhSWNvbnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWNvbnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhlYXJ0LW11c2ljLWNhbWVyYS1ib2x0XCJdLCBcImY4NmRcIiwgXCJNNTAwLjMgNy4zQzUwNy43IDEzLjMgNTEyIDIyLjQgNTEyIDMyVjE3NmMwIDI2LjUtMjguNyA0OC02NCA0OHMtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4VjcxTDM1MiA5MC4yVjIwOGMwIDI2LjUtMjguNyA0OC02NCA0OHMtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4VjY0YzAtMTUuMyAxMC44LTI4LjQgMjUuNy0zMS40bDE2MC0zMmM5LjQtMS45IDE5LjEgLjYgMjYuNiA2LjZ6TTc0LjcgMzA0bDExLjgtMTcuOGM1LjktOC45IDE1LjktMTQuMiAyNi42LTE0LjJoNjEuN2MxMC43IDAgMjAuNyA1LjMgMjYuNiAxNC4yTDIxMy4zIDMwNEgyNDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzNTJjMC0yNi41IDIxLjUtNDggNDgtNDhINzQuN3pNMTkyIDQwOGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00NzguNyAyNzguM0w0NDAuMyAzNjhINDk2YzYuNyAwIDEyLjYgNC4xIDE1IDEwLjRzLjYgMTMuMy00LjQgMTcuN2wtMTI4IDExMmMtNS42IDQuOS0xMy45IDUuMy0xOS45IC45cy04LjItMTIuNC01LjMtMTkuMkwzOTEuNyA0MDBIMzM2Yy02LjcgMC0xMi42LTQuMS0xNS0xMC40cy0uNi0xMy4zIDQuNC0xNy43bDEyOC0xMTJjNS42LTQuOSAxMy45LTUuMyAxOS45LS45czguMiAxMi40IDUuMyAxOS4yem0tMzM5LTU5LjJjLTYuNSA2LjUtMTcgNi41LTIzIDBMMTkuOSAxMTkuMmMtMjgtMjktMjYuNS03Ni45IDUtMTAzLjljMjctMjMuNSA2OC40LTE5IDkzLjQgNi41bDEwIDEwLjUgOS41LTEwLjVjMjUtMjUuNSA2NS45LTMwIDkzLjktNi41YzMxIDI3IDMyLjUgNzQuOSA0LjUgMTAzLjlsLTk2LjQgOTkuOXpcIl1cbn07XG52YXIgZmFIZWFydE11c2ljQ2FtZXJhQm9sdCA9IGZhSWNvbnM7XG52YXIgZmFNaWNyb3Bob25lTGluZXNTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Bob25lLWxpbmVzLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJtaWNyb3Bob25lLWFsdC1zbGFzaFwiXSwgXCJmNTM5XCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDcyLjEgMzQ0LjdjMTUuMi0yNiAyMy45LTU2LjMgMjMuOS04OC43VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHYyNCAxNmMwIDIxLjItNS4xIDQxLjEtMTQuMiA1OC43TDQxNiAzMDAuOFYyNTZIMzU4LjlsLTM0LjUtMjdjMi45LTMuMSA3LTUgMTEuNi01aDgwVjE5MkgzMzZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODBWMTI4SDMzNmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4MGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnY1NC4zTDM4LjggNS4xek0zNTguMiAzNzguMkMzNDYuMSAzODIgMzMzLjMgMzg0IDMyMCAzODRjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4di04LjdMMTQ0LjcgMjEwYy0uNSAxLjktLjcgMy45LS43IDZ2NDBjMCA4OS4xIDY2LjIgMTYyLjcgMTUyIDE3NC40VjQ2NEgyNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNzIgNzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzQ0VjQzMC40YzIwLjQtMi44IDM5LjctOS4xIDU3LjMtMTguMmwtNDMuMS0zMy45elwiXVxufTtcbnZhciBmYU1pY3JvcGhvbmVBbHRTbGFzaCA9IGZhTWljcm9waG9uZUxpbmVzU2xhc2g7XG52YXIgZmFCcmlkZ2VDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmlkZ2UtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGM5XCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHMxNC4zIDMyIDMyIDMyaDQwdjY0SDMyVjI4OGM1MyAwIDk2IDQzIDk2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMlYxNjBINTM2Vjk2aDQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0ek00ODggOTZ2NjRINDA4Vjk2aDgwek0zNjAgOTZ2NjRIMjgwVjk2aDgwek0yMzIgOTZ2NjRIMTUyVjk2aDgwek02NDAgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzg1LjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbnZhciBmYVB1bXBNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3B1bXAtbWVkaWNhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA2YVwiLCBcIk0xMjggMzJ2OTZIMjU2Vjk2aDYwLjFjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2wzMy45IDMzLjljMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzNzIuNyA1NS40Yy0xNS0xNS0zNS40LTIzLjQtNTYuNi0yMy40SDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xMTcuNCAxNjBjLTMzLjMgMC02MSAyNS41LTYzLjggNTguN0wzNSA0NDIuN0MzMS45IDQ4MCA2MS4zIDUxMiA5OC44IDUxMkgyODUuMmMzNy40IDAgNjYuOS0zMiA2My44LTY5LjNsLTE4LjctMjI0Yy0yLjgtMzMuMi0zMC41LTU4LjctNjMuOC01OC43SDExNy40ek0yMTYgMjgwdjMyaDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDIxNnYzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYzNjBIMTM2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDMyVjI4MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbnZhciBmYUZpbmdlcnByaW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbmdlcnByaW50JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNTc3XCIsIFwiTTQ4IDI1NkM0OCAxNDEuMSAxNDEuMSA0OCAyNTYgNDhjNjMuMSAwIDExOS42IDI4LjEgMTU3LjggNzIuNWM4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44QzQwMy4zIDM0LjYgMzMzLjcgMCAyNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyNTZ6bTQ1OC41LTUyLjljLTIuNy0xMy0xNS41LTIxLjMtMjguNC0xOC41cy0yMS4zIDE1LjUtMTguNSAyOC40YzIuOSAxMy45IDQuNSAyOC4zIDQuNSA0My4xdjQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjU2YzAtMTguMS0xLjktMzUuOC01LjUtNTIuOXpNMjU2IDgwYy0xOSAwLTM3LjQgMy01NC41IDguNmMtMTUuMiA1LTE4LjcgMjMuNy04LjMgMzUuOWM3LjEgOC4zIDE4LjggMTAuOCAyOS40IDcuOWMxMC42LTIuOSAyMS44LTQuNCAzMy40LTQuNGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHYyNC45YzAgMjUuMi0xLjUgNTAuMy00LjQgNzUuM2MtMS43IDE0LjYgOS40IDI3LjggMjQuMiAyNy44YzExLjggMCAyMS45LTguNiAyMy4zLTIwLjNjMy4zLTI3LjQgNS01NSA1LTgyLjdWMjU2YzAtOTcuMi03OC44LTE3Ni0xNzYtMTc2ek0xNTAuNyAxNDguN2MtOS4xLTEwLjYtMjUuMy0xMS40LTMzLjktLjRDOTMuNyAxNzggODAgMjE1LjQgODAgMjU2djI0LjljMCAyNC4yLTIuNiA0OC40LTcuOCA3MS45QzY4LjggMzY4LjQgODAuMSAzODQgOTYuMSAzODRjMTAuNSAwIDE5LjktNyAyMi4yLTE3LjNjNi40LTI4LjEgOS43LTU2LjggOS43LTg1LjhWMjU2YzAtMjcuMiA4LjUtNTIuNCAyMi45LTczLjFjNy4yLTEwLjQgOC0yNC42LS4yLTM0LjJ6TTI1NiAxNjBjLTUzIDAtOTYgNDMtOTYgOTZ2MjQuOWMwIDM1LjktNC42IDcxLjUtMTMuOCAxMDYuMWMtMy44IDE0LjMgNi43IDI5IDIxLjUgMjljOS41IDAgMTcuOS02LjIgMjAuNC0xNS40YzEwLjUtMzkgMTUuOS03OS4yIDE1LjktMTE5LjdWMjU2YzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJ2MjQuOWMwIDM2LjMtMy41IDcyLjQtMTAuNCAxMDcuOWMtMi43IDEzLjkgNy43IDI3LjIgMjEuOCAyNy4yYzEwLjIgMCAxOS03IDIxLTE3YzcuNy0zOC44IDExLjYtNzguMyAxMS42LTExOC4xVjI1NmMwLTUzLTQzLTk2LTk2LTk2em0yNCA5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHYyNC45YzAgNTkuOS0xMSAxMTkuMy0zMi41IDE3NS4ybC01LjkgMTUuM2MtNC44IDEyLjQgMS40IDI2LjMgMTMuOCAzMXMyNi4zLTEuNCAzMS0xMy44bDUuOS0xNS4zQzI2Ny45IDQxMS45IDI4MCAzNDYuNyAyODAgMjgwLjlWMjU2elwiXVxufTtcbnZhciBmYUhhbmRQb2ludFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtcG9pbnQtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwYTRcIiwgXCJNNDgwIDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMDggMCAwLTY0IDIwOCAwek0zMjAgMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bTY0LTY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTI4OCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMHptLTg4LTk2bC42IDBjLTUuNCA5LjQtOC42IDIwLjMtOC42IDMyYzAgMTMuMiA0IDI1LjQgMTAuOCAzNS42QzE3Ny45IDM2NC4zIDE2MCAzODguMSAxNjAgNDE2YzAgMTEuNyAzLjEgMjIuNiA4LjYgMzJsLTguNiAwQzcxLjYgNDQ4IDAgMzc2LjQgMCAyODhsMC02MS43YzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWwxMS42LTExLjZDODIuNSA3Ny41IDExNS4xIDY0IDE0OSA2NGwyNyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODhjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDBsMC01NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDU2YzAgMzkuOCAzMi4yIDcyIDcyIDcyelwiXVxufTtcbnZhciBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtbG9jYXRpb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNlYXJjaC1sb2NhdGlvblwiXSwgXCJmNjg5XCIsIFwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZjLTM0LjQgMjUuMi03Ni44IDQwLTEyMi43IDQwQzkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwUzQxNiA5My4xIDQxNiAyMDh6TTI4OCAxNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCA0OC44IDQ2LjUgMTExLjYgNjguNiAxMzguNmM2IDcuMyAxNi44IDcuMyAyMi43IDBjMjIuMS0yNyA2OC42LTg5LjggNjguNi0xMzguNnptLTExMiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhU2VhcmNoTG9jYXRpb24gPSBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uO1xudmFyIGZhRm9yd2FyZFN0ZXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9yd2FyZC1zdGVwJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJzdGVwLWZvcndhcmRcIl0sIFwiZjA1MVwiLCBcIk01Mi41IDQ0MC42Yy05LjUgNy45LTIyLjggOS43LTM0LjEgNC40UzAgNDI4LjQgMCA0MTZWOTZDMCA4My42IDcuMiA3Mi4zIDE4LjQgNjdzMjQuNS0zLjYgMzQuMSA0LjRsMTkyIDE2MEwyNTYgMjQxVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI3MWwtMTEuNSA5LjYtMTkyIDE2MHpcIl1cbn07XG52YXIgZmFTdGVwRm9yd2FyZCA9IGZhRm9yd2FyZFN0ZXA7XG52YXIgZmFGYWNlU21pbGVCZWFtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Utc21pbGUtYmVhbScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUyMiwgXCJzbWlsZS1iZWFtXCJdLCBcImY1YjhcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC4xIDMyNS41QzE4MiAzNDYuMiAyMTIuNiAzNjggMjU2IDM2OHM3NC0yMS44IDkxLjktNDIuNWM1LjgtNi43IDE1LjktNy40IDIyLjYtMS42czcuNCAxNS45IDEuNiAyMi42QzM0OS44IDM3Mi4xIDMxMS4xIDQwMCAyNTYgNDAwcy05My44LTI3LjktMTE2LjEtNTMuNWMtNS44LTYuNy01LjEtMTYuOCAxLjYtMjIuNnMxNi44LTUuMSAyMi42IDEuNnptNTMuNS05Ni43bDAgMCAwIDAtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjIgMCAwIDAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44bDAgMCAwIDB6bTE2MCAwbDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMCAwIDB6XCJdXG59O1xudmFyIGZhU21pbGVCZWFtID0gZmFGYWNlU21pbGVCZWFtO1xudmFyIGZhRmxhZ0NoZWNrZXJlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbGFnLWNoZWNrZXJlZCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzkzN10sIFwiZjExZVwiLCBcIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMyVjQ4bDY5LTE3LjJjMzguMS05LjUgNzguMy01LjEgMTEzLjUgMTIuNWM0Ni4zIDIzLjIgMTAwLjggMjMuMiAxNDcuMSAwbDkuNi00LjhDNDIzLjggMjguMSA0NDggNDMuMSA0NDggNjYuMVYzNDUuOGMwIDEzLjMtOC4zIDI1LjMtMjAuOCAzMGwtMzQuNyAxM2MtNDYuMiAxNy4zLTk3LjYgMTQuNi0xNDEuNy03LjRjLTM3LjktMTktODEuMy0yMy43LTEyMi41LTEzLjRMNjQgMzg0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQwMCAzMzQgNjQgMzJDMCAxNC4zIDE0LjMgMCAzMiAwek02NCAxODcuMWw2NC0xMy45djY1LjVMNjQgMjUyLjZWMzE4bDQ4LjgtMTIuMmM1LjEtMS4zIDEwLjEtMi40IDE1LjItMy4zVjIzOC43bDM4LjktOC40YzguMy0xLjggMTYuNy0yLjUgMjUuMS0yLjFsMC02NGMxMy42IC40IDI3LjIgMi42IDQwLjQgNi40bDIzLjYgNi45djY2LjdsLTQxLjctMTIuM2MtNy4zLTIuMS0xNC44LTMuNC0yMi4zLTMuOHY3MS40YzIxLjggMS45IDQzLjMgNi43IDY0IDE0LjRWMjQ0LjJsMjIuNyA2LjdjMTMuNSA0IDI3LjMgNi40IDQxLjMgNy40VjE5NGMtNy44LS44LTE1LjYtMi4zLTIzLjItNC41bC00MC44LTEydi02MmMtMTMtMy44LTI1LjgtOC44LTM4LjItMTVjLTguMi00LjEtMTYuOS03LTI1LjgtOC44djcyLjRjLTEzLS40LTI2IC44LTM4LjcgMy42TDEyOCAxNzMuMlY5OEw2NCAxMTR2NzMuMXpNMzIwIDMzNS43YzE2LjggMS41IDMzLjktLjcgNTAtNi44bDE0LTUuMlYyNTEuOWwtNy45IDEuOGMtMTguNCA0LjMtMzcuMyA1LjctNTYuMSA0LjV2NzcuNHptNjQtMTQ5LjRWMTE1LjRjLTIwLjkgNi4xLTQyLjQgOS4xLTY0IDkuMVYxOTRjMTMuOSAxLjQgMjggLjUgNDEuNy0yLjZsMjIuMy01LjJ6XCJdXG59O1xudmFyIGZhRm9vdGJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9vdGJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NDQsIFwiZm9vdGJhbGwtYmFsbFwiXSwgXCJmNDRlXCIsIFwiTTI0Ny41IDI1LjRjLTEzLjUgMy4zLTI2LjQgNy4yLTM4LjYgMTEuN0MxNDIuOSA2MS42IDk2LjcgMTAzLjYgNjYgMTUzLjZjLTE4LjMgMjkuOC0zMC45IDYyLjMtMzkuMiA5NS40TDI2NC41IDQ4Ni42YzEzLjUtMy4zIDI2LjQtNy4yIDM4LjYtMTEuN2M2Ni0yNC41IDExMi4yLTY2LjUgMTQyLjktMTE2LjVjMTguMy0yOS44IDMwLjktNjIuMyAzOS4xLTk1LjNMMjQ3LjUgMjUuNHpNNDk1LjIgMjA1LjNjNi4xLTU2LjggMS40LTExMi4yLTcuNy0xNTYuNGMtMi43LTEyLjktMTMtMjIuOS0yNi4xLTI1LjFjLTU4LjItOS43LTEwOS45LTEyLTE1NS42LTcuOUw0OTUuMiAyMDUuM3pNMjA2LjEgNDk2TDE2LjggMzA2LjdjLTYuMSA1Ni44LTEuNCAxMTIuMiA3LjcgMTU2LjRjMi43IDEyLjkgMTMgMjIuOSAyNi4xIDI1LjFjNTguMiA5LjcgMTA5LjkgMTIgMTU1LjYgNy45em01NC42LTMzMS4zYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnptLTQ4IDQ4YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnptLTQ4IDQ4YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG52YXIgZmFGb290YmFsbEJhbGwgPSBmYUZvb3RiYWxsO1xudmFyIGZhU2Nob29sQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sLWNpcmNsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2Y1wiLCBcIk0zMzcuOCA1LjRDMzI3LTEuOCAzMTMtMS44IDMwMi4yIDUuNEwxNjYuMyA5Nkg0OEMyMS41IDk2IDAgMTE3LjUgMCAxNDRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMyMHYwSDI1NlY0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsLjMgMGguNWMzLjQtMzcuNyAxOC43LTcyLjEgNDIuMi05OS4xQzM1MC4yIDI2MCAzMzUuNiAyNjQgMzIwIDI2NGMtNDguNiAwLTg4LTM5LjQtODgtODhzMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgMTguMy01LjYgMzUuMy0xNS4xIDQ5LjRjMjktMjEgNjQuNi0zMy40IDEwMy4xLTMzLjRjNTkuNSAwIDExMi4xIDI5LjYgMTQ0IDc0LjhWMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ3My43TDMzNy44IDUuNHpNOTYgMTkyaDMyYzguOCAwIDE2IDcuMiAxNiAxNnY2NGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDhjMC04LjggNy4yLTE2IDE2LTE2em0wIDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnpNMzIwIDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMzZWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wLTE0NGM4LjggMCAxNiA3LjIgMTYgMTZ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFDcm9wID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nyb3AnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxMjVcIiwgXCJNNDQ4IDEwOS4zbDU0LjYtNTQuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEw0MDIuNyA2NCAxNjAgNjR2NjRsMTc4LjcgMEwxMjggMzM4LjdWMzJjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgMTQuMyA2NCAzMlY2NEgzMkMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJINjRWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM1MlYzODRIMTczLjNMMzg0IDE3My4zIDM4NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDQ4bDAtMjc0Ljd6XCJdXG59O1xudmFyIGZhQW5nbGVzRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmdsZXMtZG93bicsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiYW5nbGUtZG91YmxlLWRvd25cIl0sIFwiZjEwM1wiLCBcIk0yNDYuNiA0NzAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMjI0IDQwMi43IDM2MS40IDI2NS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTE2MCAxNjB6bTE2MC0zNTJsLTE2MCAxNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDIyNCAyMTAuNyAzNjEuNCA3My40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6XCJdXG59O1xudmFyIGZhQW5nbGVEb3VibGVEb3duID0gZmFBbmdsZXNEb3duO1xudmFyIGZhVXNlcnNSZWN0YW5nbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMtcmVjdGFuZ2xlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTk0XCIsIFwiTTk2IDBDNDMgMCAwIDQzIDAgOTZWNDE2YzAgNTMgNDMgOTYgOTYgOTZINTQ0YzUzIDAgOTYtNDMgOTYtOTZWOTZjMC01My00My05Ni05Ni05Nkg5NnpNNjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWOTZ6bTE1OS44IDgwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTk2IDMwOS4zYzAgMTQuNyAxMS45IDI2LjcgMjYuNyAyNi43aDU2LjFjOC0zNC4xIDMyLjgtNjEuNyA2NS4yLTczLjZjLTcuNS00LjEtMTYuMi02LjQtMjUuMy02LjRIMTQ5LjNDMTE5LjkgMjU2IDk2IDI3OS45IDk2IDMwOS4zek00NjEuMiAzMzZoNTYuMWMxNC43IDAgMjYuNy0xMS45IDI2LjctMjYuN2MwLTI5LjUtMjMuOS01My4zLTUzLjMtNTMuM0g0MjEuM2MtOS4yIDAtMTcuOCAyLjMtMjUuMyA2LjRjMzIuNCAxMS45IDU3LjIgMzkuNSA2NS4yIDczLjZ6TTM3MiAyODljLTMuOS0uNy03LjktMS0xMi0xSDI4MGMtNC4xIDAtOC4xIC4zLTEyIDFjLTI2IDQuNC00Ny4zIDIyLjctNTUuOSA0N2MtMi43IDcuNS00LjEgMTUuNi00LjEgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDA4YzEzLjMgMCAyNC0xMC43IDI0LTI0YzAtOC40LTEuNC0xNi41LTQuMS0yNGMtOC42LTI0LjMtMjkuOS00Mi42LTU1LjktNDd6TTUxMiAxNzZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMzIwIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpcIl1cbn07XG52YXIgZmFQZW9wbGVSb29mID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1yb29mJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTM3XCIsIFwiTTMzNS41IDRsMjg4IDE2MGMxNS40IDguNiAyMSAyOC4xIDEyLjQgNDMuNXMtMjguMSAyMS00My41IDEyLjRMMzIwIDY4LjYgNDcuNSAyMjBjLTE1LjQgOC42LTM0LjkgMy00My41LTEyLjRzLTMtMzQuOSAxMi40LTQzLjVMMzA0LjUgNGM5LjctNS40IDIxLjQtNS40IDMxLjEgMHpNMzIwIDE2MGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6TTE0NCAyNTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0zMTIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjI2LjkgNDkxLjRMMjAwIDQ0MS41VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0MS41TDYxLjEgNDkxLjRjLTYuMyAxMS43LTIwLjggMTYtMzIuNSA5LjhzLTE2LTIwLjgtOS44LTMyLjVsMzcuOS03MC4zYzE1LjMtMjguNSA0NS4xLTQ2LjMgNzcuNS00Ni4zaDE5LjVjMTYuMyAwIDMxLjkgNC41IDQ1LjQgMTIuNmwzMy42LTYyLjNjMTUuMy0yOC41IDQ1LjEtNDYuMyA3Ny41LTQ2LjNoMTkuNWMzMi40IDAgNjIuMSAxNy44IDc3LjUgNDYuM2wzMy42IDYyLjNjMTMuNS04LjEgMjkuMS0xMi42IDQ1LjQtMTIuNmgxOS41YzMyLjQgMCA2Mi4xIDE3LjggNzcuNSA0Ni4zbDM3LjkgNzAuM2M2LjMgMTEuNyAxLjkgMjYuMi05LjggMzIuNXMtMjYuMiAxLjktMzIuNS05LjhMNTUyIDQ0MS41VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0NzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0MS41bC0yNi45IDQ5LjljLTYuMyAxMS43LTIwLjggMTYtMzIuNSA5LjhzLTE2LTIwLjgtOS44LTMyLjVsMzYuMy02Ny41Yy0xLjctMS43LTMuMi0zLjYtNC4zLTUuOEwzNzYgMzQ1LjVWNDAwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDI5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzQ1LjVsLTI2LjkgNDkuOWMtMS4yIDIuMi0yLjYgNC4xLTQuMyA1LjhsMzYuMyA2Ny41YzYuMyAxMS43IDEuOSAyNi4yLTkuOCAzMi41cy0yNi4yIDEuOS0zMi41LTkuOHpcIl1cbn07XG52YXIgZmFQZW9wbGVMaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1saW5lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTM0XCIsIFwiTTM2MCA3MmE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwek0xNDQgMjA4YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpNNDk2IDIwOGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6TTIwMCAzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNi4zLTY3LjVjMS43LTEuNyAzLjItMy42IDQuMy01LjhMMjY0IDIxNy41VjI3MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMTcuNWwyNi45IDQ5LjljMS4yIDIuMiAyLjYgNC4xIDQuMyA1LjhsLTM2LjMgNjcuNWMtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMNDQwIDMxMy41VjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNy45LTcwLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDQ4Ni4yYy0xNi4zIDAtMzEuOSA0LjUtNDUuNCAxMi42bC0zMy42LTYyLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDMxMC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzMuNiA2Mi4zYy0xMy41LTguMS0yOS4xLTEyLjYtNDUuNC0xMi42SDEzNC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM0wxOC45IDM0MC42Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEw4OCAzMTMuNVYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzEzLjV6XCJdXG59O1xudmFyIGZhQmVlck11Z0VtcHR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JlZXItbXVnLWVtcHR5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJiZWVyXCJdLCBcImYwZmNcIiwgXCJNMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2aDUxLjJjNDIuNCAwIDc2LjggMzQuNCA3Ni44IDc2LjhWMjc0LjljMCAzMC40LTE3LjkgNTcuOS00NS42IDcwLjJMMzg0IDM4MS43VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTM4NCAzMTEuNmw1Ni40LTI1LjFjNC42LTIuMSA3LjYtNi42IDcuNi0xMS43VjE3Mi44YzAtNy4xLTUuNy0xMi44LTEyLjgtMTIuOEgzODRWMzExLjZ6TTE2MCAxNDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWMzY4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMTQ0em02NCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjM2OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE0NHptNjQgMGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlYzNjhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYxNDR6XCJdXG59O1xudmFyIGZhQmVlciA9IGZhQmVlck11Z0VtcHR5O1xudmFyIGZhRGlhZ3JhbVByZWRlY2Vzc29yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYWdyYW0tcHJlZGVjZXNzb3InLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0NzdcIiwgXCJNNDQ4IDQxNmwwLTY0TDY0IDM1MmwwIDY0IDM4NCAwem0wIDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek0yODggMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDIyNGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxNDQgMCAxNiAwIDE0NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTYgMzguMSAwYzIxLjQgMCAzMi4xIDI1LjkgMTcgNDFMNDMzIDIzOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMzI5IDE2OWMtMTUuMS0xNS4xLTQuNC00MSAxNy00MWwzOC4xIDAgMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTgwIDAgMCA2NHpcIl1cbn07XG52YXIgZmFBcnJvd1VwTG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC1sb25nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJsb25nLWFycm93LXVwXCJdLCBcImYxNzZcIiwgXCJNMjE0LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTA5LjNWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTA5LjNsNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjh6XCJdXG59O1xudmFyIGZhTG9uZ0Fycm93VXAgPSBmYUFycm93VXBMb25nO1xudmFyIGZhRmlyZUZsYW1lU2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpcmUtZmxhbWUtc2ltcGxlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJidXJuXCJdLCBcImY0NmFcIiwgXCJNMzcyLjUgMjU2LjVsLS43LTEuOUMzMzcuOCAxNjAuOCAyODIgNzYuNSAyMDkuMSA4LjVsLTMuMy0zQzIwMi4xIDIgMTk3LjEgMCAxOTIgMHMtMTAuMSAyLTEzLjggNS41bC0zLjMgM0MxMDIgNzYuNSA0Ni4yIDE2MC44IDEyLjIgMjU0LjZsLS43IDEuOUMzLjkgMjc3LjMgMCAyOTkuNCAwIDMyMS42QzAgNDI2LjcgODYuOCA1MTIgMTkyIDUxMnMxOTItODUuMyAxOTItMTkwLjRjMC0yMi4yLTMuOS00NC4yLTExLjUtNjUuMXptLTkwLjggNDkuNWM0LjEgOS4zIDYuMiAxOS40IDYuMiAyOS41YzAgNTMtNDMgOTYuNS05NiA5Ni41cy05Ni00My41LTk2LTk2LjVjMC0xMC4xIDIuMS0yMC4zIDYuMi0yOS41bDEuOS00LjNjMTUuOC0zNS40IDM3LjktNjcuNyA2NS4zLTk1LjFsOC45LTguOWMzLjYtMy42IDguNS01LjYgMTMuNi01LjZzMTAgMiAxMy42IDUuNmw4LjkgOC45YzI3LjQgMjcuNCA0OS42IDU5LjcgNjUuMyA5NS4xbDEuOSA0LjN6XCJdXG59O1xudmFyIGZhQnVybiA9IGZhRmlyZUZsYW1lU2ltcGxlO1xudmFyIGZhUGVyc29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbicsXG4gIGljb246IFszMjAsIDUxMiwgWzEyOTQ4NSwgXCJtYWxlXCJdLCBcImYxODNcIiwgXCJNMTEyIDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2LjlMNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZoMjkuN2MzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw1OC4zIDk3YzkuMSAxNS4xIDQuMiAzNC44LTEwLjkgNDMuOXMtMzQuOCA0LjItNDMuOS0xMC45TDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDE1MnpcIl1cbn07XG52YXIgZmFNYWxlID0gZmFQZXJzb247XG52YXIgZmFMYXB0b3AgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFwdG9wJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MTg3XSwgXCJmMTA5XCIsIFwiTTEyOCAzMkM5Mi43IDMyIDY0IDYwLjcgNjQgOTZWMzUyaDY0Vjk2SDUxMlYzNTJoNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTI4ek0xOS4yIDM4NEM4LjYgMzg0IDAgMzkyLjYgMCA0MDMuMkMwIDQ0NS42IDM0LjQgNDgwIDc2LjggNDgwSDU2My4yYzQyLjQgMCA3Ni44LTM0LjQgNzYuOC03Ni44YzAtMTAuNi04LjYtMTkuMi0xOS4yLTE5LjJIMTkuMnpcIl1cbn07XG52YXIgZmFGaWxlQ3N2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY3N2JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNmRkXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0VjMwNEgxNzZjLTM1LjMgMC02NCAyOC43LTY0IDY0VjUxMkg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4ek0yMDAgMzUyaDE2YzIyLjEgMCA0MCAxNy45IDQwIDQwdjhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZ2LThjMC00LjQtMy42LTgtOC04SDIwMGMtNC40IDAtOCAzLjYtOCA4djgwYzAgNC40IDMuNiA4IDggOGgxNmM0LjQgMCA4LTMuNiA4LTh2LThjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY4YzAgMjIuMS0xNy45IDQwLTQwIDQwSDIwMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBWMzkyYzAtMjIuMSAxNy45LTQwIDQwLTQwem0xMzMuMSAwSDM2OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzMzMuMWMtNy4yIDAtMTMuMSA1LjktMTMuMSAxMy4xYzAgNS4yIDMgOS45IDcuOCAxMmwzNy40IDE2LjZjMTYuMyA3LjIgMjYuOCAyMy40IDI2LjggNDEuMmMwIDI0LjktMjAuMiA0NS4xLTQ1LjEgNDUuMUgzMDRjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoNDIuOWM3LjIgMCAxMy4xLTUuOSAxMy4xLTEzLjFjMC01LjItMy05LjktNy44LTEybC0zNy40LTE2LjZjLTE2LjMtNy4yLTI2LjgtMjMuNC0yNi44LTQxLjJjMC0yNC45IDIwLjItNDUuMSA0NS4xLTQ1LjF6bTk4LjkgMGM4LjggMCAxNiA3LjIgMTYgMTZ2MzEuNmMwIDIzIDUuNSA0NS42IDE2IDY2YzEwLjUtMjAuMyAxNi00Mi45IDE2LTY2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMxLjZjMCAzNC43LTEwLjMgNjguNy0yOS42IDk3LjZsLTUuMSA3LjdjLTMgNC41LTggNy4xLTEzLjMgNy4xcy0xMC4zLTIuNy0xMy4zLTcuMWwtNS4xLTcuN2MtMTkuMy0yOC45LTI5LjYtNjIuOS0yOS42LTk3LjZWMzY4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFNZW5vcmFoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21lbm9yYWgnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2NzZcIiwgXCJNMjAuOCA3LjRDMjIuOCAyLjkgMjcuMSAwIDMyIDBzOS4yIDIuOSAxMS4yIDcuNEw2MS4zIDQ5LjdjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgODEuNyAwIDY0VjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xTDIwLjggNy40em05NiAwQzExOC44IDIuOSAxMjMuMSAwIDEyOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMVY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2Mi44YzAtNC41IC45LTguOSAyLjctMTMuMUwxMTYuOCA3LjR6bTc3LjggNDIuNEwyMTIuOCA3LjRDMjE0LjggMi45IDIxOS4xIDAgMjI0IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMDguOCA3LjRDMzEwLjggMi45IDMxNS4xIDAgMzIwIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xTDMwOC44IDcuNHptNzcuOCA0Mi40TDQwNC44IDcuNEM0MDYuOCAyLjkgNDExLjEgMCA0MTYgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFWNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjIuOGMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTUwMC44IDcuNEM1MDIuOCAyLjkgNTA3LjEgMCA1MTIgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFWNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjIuOGMwLTQuNSAuOS04LjkgMi43LTEzLjFMNTAwLjggNy40em03Ny44IDQyLjRMNTk2LjggNy40QzU5OC44IDIuOSA2MDMuMSAwIDYwOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMVY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2Mi44YzAtNC41IC45LTguOSAyLjctMTMuMXpNMzIgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyODhWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzIwSDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYyODhjMCA1My00MyA5Ni05NiA5NkgzNTJ2NjRINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjg4VjM4NEg5NmMtNTMgMC05Ni00My05Ni05NlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJIOTZWMjU2IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NiAzMkgxOTJWMjU2IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJIMzg0VjI1NiAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJINDgwVjI1NiAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhVHJ1Y2tQbGFuZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cnVjay1wbGFuZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU4ZlwiLCBcIk0yMDAgMGMtMzAuNiAwLTU2IDU0LjctNTYgODYuMVYxOTIuNUw3LjggMjc0LjNDMi45IDI3Ny4yIDAgMjgyLjQgMCAyODh2NjRjMCA1LjEgMi40IDkuOCA2LjQgMTIuOHM5LjMgMy45IDE0LjEgMi41bDEyMy40LTM3djgxLjJsLTUwIDQwYy0zLjggMy02IDcuNi02IDEyLjV2MzJjMCA1LjEgMi41IDEwIDYuNiAxM3M5LjUgMy44IDE0LjQgMi4yTDIwMCA0ODAuOSAyOTAuNCA1MTFjLTEuNi00LjctMi40LTkuOC0yLjQtMTVWNDYzLjRjLTE4LjItMTAuNS0zMC43LTI5LjctMzEuOS01MS44bC0uMS0uMVY0MDggMzI1LjUgMTg0bDAtMS4xIDAgMFY4Ni4xQzI1NiA1NC43IDIzMS41IDAgMjAwIDB6bTg4IDE3NlY0MDBjMCAyMC45IDEzLjQgMzguNyAzMiA0NS4zVjQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDhINTQ0djQwYzAgMTMuMyAxMC43IDI0IDI0IDI0aDE2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjQ0NS4zYzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM1YxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzM2Yy0yNi41IDAtNDggMjEuNS00OCA0OHptNzkuOCA3OC43YzMuMy04LjcgMTEuMi0xNC43IDIwLjUtMTQuN0g1MzkuN2M5LjIgMCAxNy4yIDYgMjAuNSAxNC43TDU3NiAzMDRIMzUybDE1LjgtNDkuM3pNNTY4IDM1MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTMzNiAzNzZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFSZWNvcmRWaW55bCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWNvcmQtdmlueWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY4ZDlcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0yNTYtOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTAgMjI0YTEyOCAxMjggMCAxIDAgMC0yNTYgMTI4IDEyOCAwIDEgMCAwIDI1NnptMC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhRmFjZUdyaW5TdGFycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tc3RhcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMjEsIFwiZ3Jpbi1zdGFyc1wiXSwgXCJmNTg3XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnptNDA3LjQgNzUuNWM1LTExLjgtNy0yMi41LTE5LjMtMTguN2MtMzkuNyAxMi4yLTg0LjUgMTktMTMxLjggMTlzLTkyLjEtNi44LTEzMS44LTE5Yy0xMi4zLTMuOC0yNC4zIDYuOS0xOS4zIDE4LjdjMjUgNTkuMSA4My4yIDEwMC41IDE1MS4xIDEwMC41czEyNi4yLTQxLjQgMTUxLjEtMTAwLjV6TTE2MCAxMjBjLTMuMSAwLTUuOSAxLjgtNy4yIDQuNmwtMTYuNiAzNC43LTM4LjEgNWMtMy4xIC40LTUuNiAyLjUtNi42IDUuNXMtLjEgNi4yIDIuMSA4LjNsMjcuOSAyNi41LTcgMzcuOGMtLjYgMyAuNyA2LjEgMy4yIDcuOXM1LjggMiA4LjUgLjZMMTYwIDIzMi41bDMzLjggMTguM2MyLjcgMS41IDYgMS4zIDguNS0uNnMzLjctNC45IDMuMi03LjlsLTctMzcuOEwyMjYuNCAxNzhjMi4yLTIuMSAzLjEtNS4zIDIuMS04LjNzLTMuNS01LjEtNi42LTUuNWwtMzguMS01LTE2LjYtMzQuN2MtMS4zLTIuOC00LjEtNC42LTcuMi00LjZ6bTE5MiAwYy0zLjEgMC01LjkgMS44LTcuMiA0LjZsLTE2LjYgMzQuNy0zOC4xIDVjLTMuMSAuNC01LjYgMi41LTYuNiA1LjVzLS4xIDYuMiAyLjEgOC4zbDI3LjkgMjYuNS03IDM3LjhjLS42IDMgLjcgNi4xIDMuMiA3LjlzNS44IDIgOC41IC42TDM1MiAyMzIuNWwzMy44IDE4LjNjMi43IDEuNSA2IDEuMyA4LjUtLjZzMy43LTQuOSAzLjItNy45bC03LTM3LjhMNDE4LjQgMTc4YzIuMi0yLjEgMy4xLTUuMyAyLjEtOC4zcy0zLjUtNS4xLTYuNi01LjVsLTM4LjEtNS0xNi42LTM0LjdjLTEuMy0yLjgtNC4xLTQuNi03LjItNC42elwiXVxufTtcbnZhciBmYUdyaW5TdGFycyA9IGZhRmFjZUdyaW5TdGFycztcbnZhciBmYUJvbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9uZycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjU1Y1wiLCBcIk0xNjAgMjA4LjVjMCAyOS4xLTE1LjYgNTMuOS0zNy4yIDY3LjhjLTE3LjIgMTEuMS0zMS41IDI2LjEtNDEuNyA0My43SDMwMi45Yy0xMC4yLTE3LjYtMjQuNS0zMi42LTQxLjctNDMuN2MtMjEuNi0xMy45LTM3LjItMzguNy0zNy4yLTY3LjhWNjRIMTYwVjIwOC41ek0yODggNjRWMjA4LjVjMCA1LjcgMy4xIDEwLjkgNy45IDE0YzExLjIgNy4yIDIxLjUgMTUuNSAzMC45IDI0LjhMMzY2LjEgMjA4bC03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyNCAyNCAyNCAyNGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03LTctNDMuMyA0My4zQzM3NCAzMTQuMSAzODQgMzQ3LjkgMzg0IDM4NGMwIDM5LjQtMTEuOSA3Ni4xLTMyLjIgMTA2LjVjLTkuNiAxNC40LTI2LjUgMjEuNS00My44IDIxLjVINzYuMWMtMTcuMyAwLTM0LjItNy4xLTQzLjgtMjEuNUMxMS45IDQ2MC4xIDAgNDIzLjQgMCAzODRjMC02Ny44IDM1LjEtMTI3LjMgODguMS0xNjEuNWM0LjgtMy4xIDcuOS04LjMgNy45LTE0VjY0Qzc4LjMgNjQgNjQgNDkuNyA2NCAzMlM3OC4zIDAgOTYgMGgxNkgyNzJoMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdXG59O1xudmFyIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcGFnaGV0dGktbW9uc3Rlci1mbHlpbmcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInBhc3RhZmFyaWFuaXNtXCJdLCBcImY2N2JcIiwgXCJNMjA4IDY0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDBjMCAxNi4yLTYgMzEuMS0xNiA0Mi4zbDE1LjYgMzEuMmMxOC43LTYgMzkuOS05LjUgNjQuNC05LjVzNDUuOCAzLjUgNjQuNCA5LjVMNDAwIDEwNi4zQzM5MCA5NS4xIDM4NCA4MC4yIDM4NCA2NGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy0xLjcgMC0zLjQtLjEtNS4xLS4yTDQyNy44IDE1OGMyMS4xIDEzLjYgMzcuNyAzMC4yIDUxLjQgNDYuNGM3LjEgOC4zIDEzLjUgMTYuNiAxOS4zIDI0bDEuNCAxLjhjNi4zIDguMSAxMS42IDE0LjggMTYuNyAyMC40QzUyNy4zIDI2Mi4zIDUzMi43IDI2NCA1MzYgMjY0YzIuNSAwIDQuMy0uNiA3LjEtMy4zYzMuNy0zLjUgNy4xLTguOCAxMi41LTE3LjRsLjYtLjljNC42LTcuNCAxMS0xNy42IDE5LjQtMjUuN2M5LjctOS4zIDIyLjktMTYuNyA0MC40LTE2LjdjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIuNSAwLTQuMyAuNi03LjEgMy4zYy0zLjcgMy41LTcuMSA4LjgtMTIuNSAxNy40bC0uNiAuOWMtNC42IDcuNC0xMSAxNy42LTE5LjQgMjUuN2MtOS43IDkuMy0yMi45IDE2LjctNDAuNCAxNi43Yy0xOC41IDAtMzIuOS04LjUtNDQuMy0xOC42Yy0zLjEgNC02LjYgOC4zLTEwLjUgMTIuN2MxLjQgNC4zIDIuOCA4LjUgNCAxMi41Yy45IDMgMS44IDUuOCAyLjYgOC42YzMgOS44IDUuNSAxOC4yIDguNiAyNS45YzMuOSA5LjggNy40IDE1LjQgMTAuOCAxOC41YzIuNiAyLjQgNS45IDQuMyAxMi44IDQuM2M4LjcgMCAxNi45LTQuMiAzMy43LTEzLjJjMTUtOCAzNS43LTE4LjggNjIuMy0xOC44YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0xMy40IDAtMjQuNyA1LjItMzkuNyAxMy4yYy0xIC42LTIuMSAxLjEtMy4yIDEuN0M1NTkuOSA0MTQgNTQxLjQgNDI0IDUyMCA0MjRjLTE4LjQgMC0zMy42LTYuMS00NS41LTE3LjJjLTExLjEtMTAuMy0xNy45LTIzLjctMjIuNy0zNmMtMy42LTktNi43LTE5LjEtOS41LTI4LjVjLTE2LjQgMTIuMy0zNi4xIDIzLjYtNTguOSAzMS4zYzMuNiAxMC44IDguNCAyMy41IDE0LjQgMzYuMmM3LjUgMTUuOSAxNi4yIDMwLjQgMjUuOCA0MC41QzQzMyA0NjAuNSA0NDEuMiA0NjQgNDQ4IDQ2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjUuMiAwLTQ1LTEzLjUtNTkuNS0yOC44Yy0xNC41LTE1LjQtMjUuNy0zNC45LTM0LjItNTNjLTgtMTctMTQuMS0zMy44LTE4LjMtNDYuOWMtNS4yIC40LTEwLjYgLjYtMTYgLjZzLTEwLjgtLjItMTYtLjZjLTQuMiAxMy0xMC4zIDI5LjktMTguMyA0Ni45Yy04LjUgMTguMS0xOS44IDM3LjYtMzQuMiA1M0MyMzcgNDk4LjUgMjE3LjIgNTEyIDE5MiA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjNi44IDAgMTUtMy41IDI0LjUtMTMuN2M5LjUtMTAuMSAxOC4zLTI0LjYgMjUuOC00MC41YzUuOS0xMi42IDEwLjctMjUuNCAxNC40LTM2LjJjLTIyLjgtNy43LTQyLjUtMTktNTguOS0zMS4zYy0yLjkgOS40LTYgMTkuNS05LjUgMjguNWMtNC44IDEyLjItMTEuNiAyNS42LTIyLjcgMzZDMTUzLjYgNDE3LjkgMTM4LjQgNDI0IDEyMCA0MjRjLTIxLjQgMC0zOS45LTEwLTUzLjEtMTcuMWwwIDBjLTEuMS0uNi0yLjItMS4yLTMuMi0xLjdjLTE1LTgtMjYuMy0xMy4yLTM5LjctMTMuMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyNi42IDAgNDcuMyAxMC44IDYyLjMgMTguOGMxNi44IDkgMjUgMTMuMiAzMy43IDEzLjJjNi44IDAgMTAuMi0xLjkgMTIuOC00LjNjMy40LTMuMiA3LTguOCAxMC44LTE4LjVjMy03LjcgNS42LTE2LjEgOC42LTI1LjljLjgtMi43IDEuNy01LjYgMi42LTguNmMxLjItNCAyLjYtOC4yIDQtMTIuNWMtMy45LTQuNS03LjQtOC44LTEwLjUtMTIuN0MxMzYuOSAzMDMuNSAxMjIuNSAzMTIgMTA0IDMxMmMtMTcuNSAwLTMwLjctNy40LTQwLjQtMTYuN2MtOC40LTguMS0xNC44LTE4LjMtMTkuNC0yNS43bC0uNi0uOWMtNS40LTguNi04LjgtMTMuOS0xMi41LTE3LjRjLTIuOC0yLjctNC42LTMuMy03LjEtMy4zYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzE3LjUgMCAzMC43IDcuNCA0MC40IDE2LjdjOC40IDguMSAxNC44IDE4LjMgMTkuNCAyNS43bC42IC45YzUuNCA4LjYgOC44IDEzLjkgMTIuNSAxNy40YzIuOCAyLjcgNC42IDMuMyA3LjEgMy4zYzMuMyAwIDguNy0xLjcgMTkuNC0xMy40YzUuMS01LjYgMTAuNC0xMi4zIDE2LjctMjAuNGwxLjQtMS44YzUuOC03LjQgMTIuMi0xNS43IDE5LjMtMjRjMTMuOC0xNi4yIDMwLjMtMzIuOCA1MS40LTQ2LjRsLTE1LjEtMzAuMmMtMS43IC4xLTMuNCAuMi01LjEgLjJjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHptMjA4IDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpcIl1cbn07XG52YXIgZmFQYXN0YWZhcmlhbmlzbSA9IGZhU3BhZ2hldHRpTW9uc3RlckZseWluZztcbnZhciBmYUFycm93RG93blVwQWNyb3NzTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1kb3duLXVwLWFjcm9zcy1saW5lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGFmXCIsIFwiTTEzNy40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE5MiA0MDIuN1YyODhINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ0OFYxMDkuM2w0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwzODQgMTA5LjNWMjI0SDE5MiAxMjggMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZWNDAyLjdMODYuNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZ6TTEyOCAxOTJoNjRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMTkyek00NDggMzIwSDM4NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjB6XCJdXG59O1xudmFyIGZhU3Bvb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Bvb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNDgsIDYxODczLCBcInV0ZW5zaWwtc3Bvb25cIl0sIFwiZjJlNVwiLCBcIk0yNDUuOCAyMjAuOWMtMTQuNS0xNy42LTIxLjgtMzkuMi0yMS44LTYwLjhDMjI0IDgwIDMyMCAwIDQxNiAwYzUzIDAgOTYgNDMgOTYgOTZjMCA5Ni04MCAxOTItMTYwLjIgMTkyYy0yMS42IDAtNDMuMi03LjMtNjAuOC0yMS44TDU0LjYgNTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0NS44IDIyMC45elwiXVxufTtcbnZhciBmYVV0ZW5zaWxTcG9vbiA9IGZhU3Bvb247XG52YXIgZmFKYXJXaGVhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqYXItd2hlYXQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImU1MTdcIiwgXCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMEgyNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINjRDNDYuMyA2NCAzMiA0OS43IDMyIDMyek0wIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NEgyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxNjB6bTExMiAwSDY5LjhjLTMuMiAwLTUuOCAyLjYtNS44IDUuOEM2NCAxOTggOTAgMjI0IDEyMi4yIDIyNEgxNDRoMzIgMjEuOGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjJjMC0zLjItMi42LTUuOC01LjgtNS44SDIwOGMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjdjLTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN3ptNDggMTE3LjdjLTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN0g2OS44Yy0zLjIgMC01LjggMi42LTUuOCA1LjhDNjQgMjk0IDkwIDMyMCAxMjIuMiAzMjBIMTQ0aDMyIDIxLjhjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yYzAtMy4yLTIuNi01LjgtNS44LTUuOEgyMDhjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43ek0xMTIgMzUySDY5LjhjLTMuMiAwLTUuOCAyLjYtNS44IDUuOEM2NCAzOTAgOTAgNDE2IDEyMi4yIDQxNkgxNDR2MzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlY0MTZoMjEuOGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjJjMC0zLjItMi42LTUuOC01LjgtNS44SDIwOGMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjdjLTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN3pcIl1cbn07XG52YXIgZmFFbnZlbG9wZXNCdWxrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VudmVsb3Blcy1idWxrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJtYWlsLWJ1bGtcIl0sIFwiZjY3NFwiLCBcIk0xMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJWMjI0aDk2VjE5MmMwLTM1LjMgMjguNy02NCA2NC02NEg0ODBWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMTI4ek0yNTYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzMmg5NmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZINTc2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMkgyNTZ6bTI0MCA2NGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MTNMMTg3LjEgNDE1LjljMS40IDEgMy4xIDEuNiA0LjkgMS42czMuNS0uNiA0LjktMS42TDM1MiAzMDFWMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMySDY0em0yODggODQuOEwyMTYgNDQxLjZjLTYuOSA1LjEtMTUuMyA3LjktMjQgNy45cy0xNy0yLjgtMjQtNy45TDMyIDM0MC44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzQwLjh6XCJdXG59O1xudmFyIGZhTWFpbEJ1bGsgPSBmYUVudmVsb3Blc0J1bGs7XG52YXIgZmFGaWxlQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZWJcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4em00OCA5NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMC0xOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI4OGMwLTguOC03LjItMTYtMTYtMTZ6XCJdXG59O1xudmFyIGZhQ2lyY2xlSCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtaCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk0MDUsIFwiaG9zcGl0YWwtc3ltYm9sXCJdLCBcImY0N2VcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM2OCAxNTJWMjU2IDM2MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODBIMTkybDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yMDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY4MEgzMjBWMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdXG59O1xudmFyIGZhSG9zcGl0YWxTeW1ib2wgPSBmYUNpcmNsZUg7XG52YXIgZmFQYWdlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWdlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODIyM10sIFwiZjgxNVwiLCBcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjh6bTY0IDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04MCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIODB6bTEzNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIxNnpcIl1cbn07XG52YXIgZmFBZGRyZXNzQm9vayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhZGRyZXNzLWJvb2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzOCwgXCJjb250YWN0LWJvb2tcIl0sIFwiZjJiOVwiLCBcIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRIOTZ6TTIwOCAyODhoNjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2SDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwem0tMzItOTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek01MTIgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlY4MHpNNDk2IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjA4YzAtOC44LTcuMi0xNi0xNi0xNnptMTYgMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzM2elwiXVxufTtcbnZhciBmYUNvbnRhY3RCb29rID0gZmFBZGRyZXNzQm9vaztcbnZhciBmYVN0cmlrZXRocm91Z2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RyaWtldGhyb3VnaCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjBjY1wiLCBcIk0xNjEuMyAxNDRjMy4yLTE3LjIgMTQtMzAuMSAzMy43LTM4LjZjMjEuMS05IDUxLjgtMTIuMyA4OC42LTYuNWMxMS45IDEuOSA0OC44IDkuMSA2MC4xIDEyYzE3LjEgNC41IDM0LjYtNS42IDM5LjItMjIuN3MtNS42LTM0LjYtMjIuNy0zOS4yYy0xNC4zLTMuOC01My42LTExLjQtNjYuNi0xMy40Yy00NC43LTctODguMy00LjItMTIzLjcgMTAuOWMtMzYuNSAxNS42LTY0LjQgNDQuOC03MS44IDg3LjNjLS4xIC42LS4yIDEuMS0uMiAxLjdjLTIuOCAyMy45IC41IDQ1LjYgMTAuMSA2NC42YzQuNSA5IDEwLjIgMTYuOSAxNi43IDIzLjlIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI3MC4xYy0uMSAwLS4zLS4xLS40LS4xbC0xLjEtLjNjLTM2LTEwLjgtNjUuMi0xOS42LTg1LjItMzMuMWMtOS4zLTYuMy0xNS0xMi42LTE4LjItMTkuMWMtMy4xLTYuMS01LjItMTQuNi0zLjgtMjcuNHpNMzQ4LjkgMzM3LjJjMi43IDYuNSA0LjQgMTUuOCAxLjkgMzAuMWMtMyAxNy42LTEzLjggMzAuOC0zMy45IDM5LjRjLTIxLjEgOS01MS43IDEyLjMtODguNSA2LjVjLTE4LTIuOS00OS4xLTEzLjUtNzQuNC0yMi4xYy01LjYtMS45LTExLTMuNy0xNS45LTUuNGMtMTYuOC01LjYtMzQuOSAzLjUtNDAuNSAyMC4zczMuNSAzNC45IDIwLjMgNDAuNWMzLjYgMS4yIDcuOSAyLjcgMTIuNyA0LjNsMCAwIDAgMGMyNC45IDguNSA2My42IDIxLjcgODcuNiAyNS42bDAgMCAuMiAwYzQ0LjcgNyA4OC4zIDQuMiAxMjMuNy0xMC45YzM2LjUtMTUuNiA2NC40LTQ0LjggNzEuOC04Ny4zYzMuNi0yMSAyLjctNDAuNC0zLjEtNTguMUgzMzUuMWM3IDUuNiAxMS40IDExLjIgMTMuOSAxNy4yelwiXVxufTtcbnZhciBmYUsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaycsXG4gIGljb246IFszMjAsIDUxMiwgWzEwN10sIFwiNGJcIiwgXCJNMzExIDg2LjNjMTIuMy0xMi43IDEyLTMyLjktLjctNDUuMnMtMzIuOS0xMi00NS4yIC43bC0xNTUuMiAxNjBMNjQgMjQ5VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0VjMyOCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNDFsNjQuNy02Ni43IDEzMyAxOTJjMTAuMSAxNC41IDMwIDE4LjEgNDQuNSA4LjFzMTguMS0zMCA4LjEtNDQuNUwxNzQuMSAyMjcuNCAzMTEgODYuM3pcIl1cbn07XG52YXIgZmFMYW5kbWFya0ZsYWcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFuZG1hcmstZmxhZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUxY1wiLCBcIk0yNzIgMGg4MGM4LjggMCAxNiA3LjIgMTYgMTZWODBjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MnYzMkg0NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjQwVjE2YzAtOC44IDcuMi0xNiAxNi0xNmgxNnpNNjQgMjI0aDY0VjQxNmg0MFYyMjRoNjRWNDE2aDQ4VjIyNGg2NFY0MTZoNDBWMjI0aDY0VjQyMC4zYy42IC4zIDEuMiAuNyAxLjggMS4xbDQ4IDMyYzExLjcgNy44IDE3IDIyLjQgMTIuOSAzNS45UzQ5NC4xIDUxMiA0ODAgNTEySDMyYy0xNC4xIDAtMjYuNS05LjItMzAuNi0yMi43czEuMS0yOC4xIDEyLjktMzUuOWw0OC0zMmMuNi0uNCAxLjItLjcgMS44LTEuMVYyMjR6XCJdXG59O1xudmFyIGZhUGVuY2lsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlbmNpbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk5OTksIDYxNTA0LCBcInBlbmNpbC1hbHRcIl0sIFwiZjMwM1wiLCBcIk00MTAuMyAyMzFsMTEuMy0xMS4zLTMzLjktMzMuOS02Mi4xLTYyLjFMMjkxLjcgODkuOGwtMTEuMyAxMS4zLTIyLjYgMjIuNkw1OC42IDMyMi45Yy0xMC40IDEwLjQtMTggMjMuMy0yMi4yIDM3LjRMMSA0ODAuN2MtMi41IDguNC0uMiAxNy41IDYuMSAyMy43czE1LjMgOC41IDIzLjcgNi4xbDEyMC4zLTM1LjRjMTQuMS00LjIgMjctMTEuOCAzNy40LTIyLjJMMzg3LjcgMjUzLjcgNDEwLjMgMjMxek0xNjAgMzk5LjRsLTkuMSAyMi43Yy00IDMuMS04LjUgNS40LTEzLjMgNi45TDU5LjQgNDUybDIzLTc4LjFjMS40LTQuOSAzLjgtOS40IDYuOS0xMy4zbDIyLjctOS4xdjMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMnpNMzYyLjcgMTguN0wzNDguMyAzMy4yIDMyNS43IDU1LjggMzE0LjMgNjcuMWwzMy45IDMzLjkgNjIuMSA2Mi4xIDMzLjkgMzMuOSAxMS4zLTExLjMgMjIuNi0yMi42IDE0LjUtMTQuNWMyNS0yNSAyNS02NS41IDAtOTAuNUw0NTMuMyAxOC43Yy0yNS0yNS02NS41LTI1LTkwLjUgMHptLTQ3LjQgMTY4bC0xNDQgMTQ0Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDE0NC0xNDRjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbnZhciBmYVBlbmNpbEFsdCA9IGZhUGVuY2lsO1xudmFyIGZhQmFja3dhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFja3dhcmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5MTk0XSwgXCJmMDRhXCIsIFwiTTQ1OS41IDQ0MC42YzkuNSA3LjkgMjIuOCA5LjcgMzQuMSA0LjRzMTguNC0xNi42IDE4LjQtMjlWOTZjMC0xMi40LTcuMi0yMy43LTE4LjQtMjlzLTI0LjUtMy42LTM0LjEgNC40TDI4OCAyMTQuM1YyNTZ2NDEuN0w0NTkuNSA0NDAuNnpNMjU2IDM1MlYyNTYgMTI4IDk2YzAtMTIuNC03LjItMjMuNy0xOC40LTI5cy0yNC41LTMuNi0zNC4xIDQuNGwtMTkyIDE2MEM0LjIgMjM3LjUgMCAyNDYuNSAwIDI1NnM0LjIgMTguNSAxMS41IDI0LjZsMTkyIDE2MGM5LjUgNy45IDIyLjggOS43IDM0LjEgNC40czE4LjQtMTYuNiAxOC40LTI5VjM1MnpcIl1cbn07XG52YXIgZmFDYXJldFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcmV0LXJpZ2h0JyxcbiAgaWNvbjogWzI1NiwgNTEyLCBbXSwgXCJmMGRhXCIsIFwiTTI0Ni42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXMtMTkuOCAxNi42LTE5LjggMjkuNmwwIDI1NmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDEyOC0xMjh6XCJdXG59O1xudmFyIGZhQ29tbWVudHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudHMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjg0OTAsIDYxNjcwXSwgXCJmMDg2XCIsIFwiTTIwOCAzNTJjMTE0LjkgMCAyMDgtNzguOCAyMDgtMTc2UzMyMi45IDAgMjA4IDBTMCA3OC44IDAgMTc2YzAgMzguNiAxNC43IDc0LjMgMzkuNiAxMDMuNGMtMy41IDkuNC04LjcgMTcuNy0xNC4yIDI0LjdjLTQuOCA2LjItOS43IDExLTEzLjMgMTQuM2MtMS44IDEuNi0zLjMgMi45LTQuMyAzLjdjLS41IC40LS45IC43LTEuMSAuOGwtLjIgLjIgMCAwIDAgMEMxIDMyNy4yLTEuNCAzMzQuNCAuOCAzNDAuOVM5LjEgMzUyIDE2IDM1MmMyMS44IDAgNDMuOC01LjYgNjIuMS0xMi41YzkuMi0zLjUgMTcuOC03LjQgMjUuMy0xMS40QzEzNC4xIDM0My4zIDE2OS44IDM1MiAyMDggMzUyek00NDggMTc2YzAgMTEyLjMtOTkuMSAxOTYuOS0yMTYuNSAyMDdDMjU1LjggNDU3LjQgMzM2LjQgNTEyIDQzMiA1MTJjMzguMiAwIDczLjktOC43IDEwNC43LTIzLjljNy41IDQgMTYgNy45IDI1LjIgMTEuNGMxOC4zIDYuOSA0MC4zIDEyLjUgNjIuMSAxMi41YzYuOSAwIDEzLjEtNC41IDE1LjItMTEuMWMyLjEtNi42LS4yLTEzLjgtNS44LTE3LjlsMCAwIDAgMC0uMi0uMmMtLjItLjItLjYtLjQtMS4xLS44Yy0xLS44LTIuNS0yLTQuMy0zLjdjLTMuNi0zLjMtOC41LTguMS0xMy4zLTE0LjNjLTUuNS03LTEwLjctMTUuNC0xNC4yLTI0LjdjMjQuOS0yOSAzOS42LTY0LjcgMzkuNi0xMDMuNGMwLTkyLjgtODQuOS0xNjguOS0xOTIuNi0xNzUuNWMuNCA1LjEgLjYgMTAuMyAuNiAxNS41elwiXVxufTtcbnZhciBmYVBhc3RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bhc3RlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJmaWxlLWNsaXBib2FyZFwiXSwgXCJmMGVhXCIsIFwiTTE2MCAwYy0yMy43IDAtNDQuNCAxMi45LTU1LjQgMzJINDhDMjEuNSAzMiAwIDUzLjUgMCA4MFY0MDBjMCAyNi41IDIxLjUgNDggNDggNDhIMTkyVjE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MGg0OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OEgyMTUuNEMyMDQuNCAxMi45IDE4My43IDAgMTYwIDB6TTI3MiAxMjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQ0OHYxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjQzLjljMC0xMi43LTUuMS0yNC45LTE0LjEtMzMuOWwtNjcuOS02Ny45Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUgzMjAgMjcyek0xNjAgNDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUZpbGVDbGlwYm9hcmQgPSBmYVBhc3RlO1xudmFyIGZhQ29kZVB1bGxSZXF1ZXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvZGUtcHVsbC1yZXF1ZXN0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMTNjXCIsIFwiTTMwNS44IDIuMUMzMTQuNCA1LjkgMzIwIDE0LjUgMzIwIDI0VjY0aDE2YzcwLjcgMCAxMjggNTcuMyAxMjggMTI4VjM1OC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjNjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM1YxOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzIwdjQwYzAgOS41LTUuNiAxOC4xLTE0LjIgMjEuOXMtMTguOCAyLjMtMjUuOC00LjFsLTgwLTcyYy01LjEtNC42LTcuOS0xMS03LjktMTcuOHMyLjktMTMuMyA3LjktMTcuOGw4MC03MmM3LTYuMyAxNy4yLTcuOSAyNS44LTQuMXpNMTA0IDgwQTI0IDI0IDAgMSAwIDU2IDgwYTI0IDI0IDAgMSAwIDQ4IDB6bTggNzMuM1YzNTguN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNWMTUzLjNDMTkuNyAxNDEgMCAxMTIuOCAwIDgwQzAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjN6TTEwNCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptMzI4IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpcIl1cbn07XG52YXIgZmFDbGlwYm9hcmRMaXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC1saXN0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNDZkXCIsIFwiTTE5MiAwYy00MS44IDAtNzcuNCAyNi43LTkwLjUgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjgyLjVDMjY5LjQgMjYuNyAyMzMuOCAwIDE5MiAwem0wIDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNNzIgMjcyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEwNC0xNkgzMDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek03MiAzNjhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptODggMGMwLTguOCA3LjItMTYgMTYtMTZIMzA0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbnZhciBmYVRydWNrUmFtcEJveCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cnVjay1yYW1wLWJveCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1widHJ1Y2stbG9hZGluZ1wiXSwgXCJmNGRlXCIsIFwiTTY0MCAwVjQwMGMwIDYxLjktNTAuMSAxMTItMTEyIDExMmMtNjEgMC0xMTAuNS00OC43LTExMi0xMDkuM0w0OC40IDUwMi45Yy0xNy4xIDQuNi0zNC42LTUuNC0zOS4zLTIyLjVzNS40LTM0LjYgMjIuNS0zOS4zTDM1MiAzNTMuOFY2NGMwLTM1LjMgMjguNy02NCA2NC02NEg2NDB6TTU3NiA0MDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMjMuMSAyMDcuN2MtNC42LTE3LjEgNS42LTM0LjYgMjIuNi0zOS4ybDQ2LjQtMTIuNCAyMC43IDc3LjNjMi4zIDguNSAxMS4xIDEzLjYgMTkuNiAxMS4zbDMwLjktOC4zYzguNS0yLjMgMTMuNi0xMS4xIDExLjMtMTkuNmwtMjAuNy03Ny4zIDQ2LjQtMTIuNGMxNy4xLTQuNiAzNC42IDUuNiAzOS4yIDIyLjZsNDEuNCAxNTQuNWM0LjYgMTcuMS01LjYgMzQuNi0yMi42IDM5LjJMMTAzLjcgMzg0LjljLTE3LjEgNC42LTM0LjYtNS42LTM5LjItMjIuNkwyMy4xIDIwNy43elwiXVxufTtcbnZhciBmYVRydWNrTG9hZGluZyA9IGZhVHJ1Y2tSYW1wQm94O1xudmFyIGZhVXNlckNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0ZmNcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNjI1IDE3N0w0OTcgMzA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NyA0N0w1OTEgMTQzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXpcIl1cbn07XG52YXIgZmFWaWFsVmlydXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlhbC12aXJ1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU5N1wiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZWMzg0YzAgNTMgNDMgOTYgOTYgOTZjMjguNiAwIDU0LjItMTIuNSA3MS44LTMyLjNjLjEtMTQuMiA1LjYtMjguMyAxNi40LTM5LjFjLjItLjIgLjEtLjYtLjItLjZjLTMwLjkgMC01Ni0yNS4xLTU2LTU2czI1LjEtNTYgNTYtNTZjLjMgMCAuNC0uNCAuMi0uNmMtMjEuOS0yMS45LTIxLjktNTcuMyAwLTc5LjJjMi40LTIuNCA1LTQuNiA3LjgtNi41Vjk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MCA5NiAzMnpNOTYgMTkyVjk2aDY0djk2SDk2ek0yMTYgMzc2YzI4LjggMCA0My4yIDM0LjggMjIuOSA1NS4yYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBjMjAuNC0yMC40IDU1LjItNS45IDU1LjIgMjIuOWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMjguOCAzNC44LTQzLjIgNTUuMi0yMi45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUM0NDQuOCA0MTAuOCA0NTkuMiAzNzYgNDg4IDM3NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtMjguOCAwLTQzLjItMzQuOC0yMi45LTU1LjJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEM0MTAuOCAyNTkuMiAzNzYgMjQ0LjggMzc2IDIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDI4LjgtMzQuOCA0My4yLTU1LjIgMjIuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWMyMC40IDIwLjQgNS45IDU1LjItMjIuOSA1NS4yYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0xMDQtODhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em00MCA5NmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwelwiXVxufTtcbnZhciBmYVNoZWV0UGxhc3RpYyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGVldC1wbGFzdGljJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNTcxXCIsIFwiTTAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDIyNFYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzg0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgMCAwIDI4LjcgMCA2NFY0NDh6TTE3MS4zIDc1LjNsLTk2IDk2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDk2LTk2YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnptOTYgMzJsLTE2MCAxNjBjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMTYwLTE2MGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6TTM4NCAzODRIMjU2VjUxMkwzODQgMzg0elwiXVxufTtcbnZhciBmYUJsb2cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmxvZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjc4MVwiLCBcIk0xOTIgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyQzUxMiAxMjguOSAzODMuMSAwIDIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtMTA2LTg2LTE5Mi0xOTItMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNOTYgMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4UzAgMTE3LjUgMCAxNDRWMzY4YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDRzLTY0LjUtMTQ0LTE0NC0xNDRIMTI4djk2aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjE0NHpcIl1cbn07XG52YXIgZmFVc2VyTmluamEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1uaW5qYScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTM5OV0sIFwiZjUwNFwiLCBcIk0yMjQgMjU2Yy01Ny4yIDAtMTA1LjYtMzcuNS0xMjItODkuM2MtMS4xIDEuMy0yLjIgMi42LTMuNSAzLjhjLTE1LjggMTUuOC0zOC44IDIwLjctNTMuNiAyMi4xYy04LjEgLjgtMTQuNi01LjctMTMuOC0xMy44YzEuNC0xNC43IDYuMy0zNy44IDIyLjEtNTMuNmM1LjgtNS44IDEyLjYtMTAuMSAxOS42LTEzLjRjLTctMy4yLTEzLjgtNy42LTE5LjYtMTMuNEMzNy40IDgyLjcgMzIuNiA1OS43IDMxLjEgNDQuOWMtLjgtOC4xIDUuNy0xNC42IDEzLjgtMTMuOGMxNC43IDEuNCAzNy44IDYuMyA1My42IDIyLjFjNC44IDQuOCA4LjcgMTAuNCAxMS43IDE2LjFDMTMxLjQgMjguMiAxNzQuNCAwIDIyNCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4ek0wIDQ4Mi4zQzAgMzk5LjUgNTYuNCAzMzAgMTMyLjggMzA5LjljNi0xLjYgMTIuMiAuOSAxNS45IDUuOGw2Mi41IDgzLjNjNi40IDguNSAxOS4yIDguNSAyNS42IDBsNjIuNS04My4zYzMuNy00LjkgOS45LTcuNCAxNS45LTUuOEMzOTEuNiAzMzAgNDQ4IDM5OS41IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNMTYwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDI4OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNjB6XCJdXG59O1xudmFyIGZhUGVyc29uQXJyb3dVcEZyb21MaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1hcnJvdy11cC1mcm9tLWxpbmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MzlcIiwgXCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTggMzUyVjM1MmgxNnY5NkgxODR6bS02NCAwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE1Mmg4MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjY0VjI1Ni45bDI4LjYgNDcuNWM5LjEgMTUuMSAyOC44IDIwIDQzLjkgMTAuOXMyMC0yOC44IDEwLjktNDMuOWwtNTguMy05N2MtMTcuNC0yOC45LTQ4LjYtNDYuNi04Mi4zLTQ2LjZIMTc3LjFjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45TDEyMCAyNTYuOVY0NDh6TTU5OC42IDEyMS40bC04MC04MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQ2NCAxNDEuMyA0NjQgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQxLjNsMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xudmFyIGZhU2Nyb2xsVG9yYWggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nyb2xsLXRvcmFoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ0b3JhaFwiXSwgXCJmNmEwXCIsIFwiTTk2IDQ4MFYzMkM5NiAxNC4zIDc0LjUgMCA0OCAwUzAgMTQuMyAwIDMyVjQ4MGMwIDE3LjcgMjEuNSAzMiA0OCAzMnM0OC0xNC4zIDQ4LTMyek01MTIgMzJIMTI4VjQ4MEg1MTJWMzJ6TTU5MiAwYy0yNi41IDAtNDggMTQuMy00OCAzMlY0ODBjMCAxNy43IDIxLjUgMzIgNDggMzJzNDgtMTQuMyA0OC0zMlYzMmMwLTE3LjctMjEuNS0zMi00OC0zMnpNMTk2IDMxMy43YzAtMy4yIC45LTYuNCAyLjUtOS4yTDIyNi43IDI1NmwtMjguMy00OC41Yy0xLjYtMi44LTIuNS02LTIuNS05LjJjMC0xMC4xIDguMi0xOC4zIDE4LjMtMTguM0gyNzFsMzEuNC01My45YzMuNi02LjMgMTAuMy0xMC4xIDE3LjYtMTAuMXMxMy45IDMuOCAxNy42IDEwLjFMMzY5IDE4MGg1Ni43YzEwLjEgMCAxOC4zIDguMiAxOC4zIDE4LjNjMCAzLjItLjkgNi40LTIuNSA5LjJMNDEzLjMgMjU2bDI4LjMgNDguNWMxLjYgMi44IDIuNSA2IDIuNSA5LjJjMCAxMC4xLTguMiAxOC4zLTE4LjMgMTguM0gzNjlsLTMxLjQgNTMuOWMtMy42IDYuMy0xMC4zIDEwLjEtMTcuNiAxMC4xcy0xMy45LTMuOC0xNy42LTEwLjFMMjcxIDMzMkgyMTQuM2MtMTAuMSAwLTE4LjMtOC4yLTE4LjMtMTguM3ptMTI0IDU0LjdMMzQxLjIgMzMySDI5OC44TDMyMCAzNjguNHpNMjU0LjUgMjU2bDMwLjMgNTJoNzAuNGwzMC4zLTUyLTMwLjMtNTJIMjg0LjhsLTMwLjMgNTJ6bTE0NC45IDIzLjhMMzgzIDMwOGgzMi44bC0xNi40LTI4LjJ6TTQxNS44IDIwNEgzODNsMTYuNCAyOC4yTDQxNS44IDIwNHpNMzIwIDE0My42TDI5OC44IDE4MGg0Mi40TDMyMCAxNDMuNnpNMjI0LjIgMjA0bDE2LjQgMjguMkwyNTcgMjA0SDIyNC4yek0yNTcgMzA4bC0xNi40LTI4LjJMMjI0LjIgMzA4SDI1N3pcIl1cbn07XG52YXIgZmFUb3JhaCA9IGZhU2Nyb2xsVG9yYWg7XG52YXIgZmFCcm9vbUJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJvb20tYmFsbCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wicXVpZGRpdGNoXCIsIFwicXVpZGRpdGNoLWJyb29tLWJhbGxcIl0sIFwiZjQ1OFwiLCBcIk01NjYuNiA5LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTIgMzQuNyAzNC43YzQuMiA0LjIgNi42IDEwIDYuNiAxNmMwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNkgzNjQuM0wyNTYgMjExLjdWMTgyLjZjMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZjNiAwIDExLjggMi40IDE2IDYuNmwzNC43IDM0LjcgMTkyLTE5MmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHptLTM0NCAyMjUuNUwzNDEuMSAzNTMuNGMzLjcgNDIuNy0xMS43IDg1LjItNDIuMyAxMTUuOEMyNzEuNCA0OTYuNiAyMzQuMiA1MTIgMTk1LjUgNTEyTDIyLjEgNTEyQzkuOSA1MTIgMCA1MDIuMSAwIDQ4OS45YzAtNi4zIDIuNy0xMi4zIDcuMy0xNi41TDEzMy43IDM1OS43YzQuMi0zLjctLjQtMTAuNC01LjQtNy45TDc3LjIgMzc3LjRjLTYuMSAzLTEzLjItMS40LTEzLjItOC4yYzAtMzEuNSAxMi41LTYxLjcgMzQuOC04NGw4LThjMzAuNi0zMC42IDczLjEtNDUuOSAxMTUuOC00Mi4zek00NjQgMzUyYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYVF1aWRkaXRjaCA9IGZhQnJvb21CYWxsO1xudmFyIGZhUXVpZGRpdGNoQnJvb21CYWxsID0gZmFCcm9vbUJhbGw7XG52YXIgZmFUb2dnbGVPZmYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9nZ2xlLW9mZicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjIwNFwiLCBcIk0zODQgMTI4YzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4SDE5MmMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhzNTcuMy0xMjggMTI4LTEyOEgzODR6TTU3NiAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJIMTkyQzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4SDM4NGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMTkyIDM1MmE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDEgMCAwIDE5MnpcIl1cbn07XG52YXIgZmFCb3hBcmNoaXZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JveC1hcmNoaXZlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcmNoaXZlXCJdLCBcImYxODdcIiwgXCJNMzIgMzJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptMCAxMjhINDgwVjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTYwem0xMjggODBjMCA4LjggNy4yIDE2IDE2IDE2SDMzNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG52YXIgZmFBcmNoaXZlID0gZmFCb3hBcmNoaXZlO1xudmFyIGZhUGVyc29uRHJvd25pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWRyb3duaW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTQ1XCIsIFwiTTE5MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY5Ni4yYzAgNTQuMSAyMy41IDEwNCA2Mi4yIDEzOC4zbC0yMSAxNDYuN2M3LjggMi4xIDE1LjUgMy4zIDIyLjggMy4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzEyLjQgOC41IDI2LjEgMTQuOCAzOS43IDE4bDE3LjctOTcuNmMxMC43LTEuMiAyMS4zLTMuMSAzMS45LTUuNWwxMDUtMjMuOWMxNy4yLTMuOSAyOC0yMS4xIDI0LjEtMzguM3MtMjEuMS0yOC0zOC4zLTI0LjFMNDAwIDIxNi42Yy00MSA5LjMtODMuNyA3LjUtMTIzLjctNS4yYy01MC4yLTE2LTg0LjMtNjIuNi04NC4zLTExNS4zVjY0ek0zMjAgMTkyYTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4ek0zMDYuNSAzODkuOWMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNDcgNDA1LjQgMjE5LjUgNDE2IDE5MiA0MTZjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSA0NjkuNyAxNTkgNDgwIDE5MiA0ODBjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNSAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNC0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQzOS40IDQwNS4yIDQxMC45IDQxNiAzODQgNDE2Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjF6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duOTEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi05LTEnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtbnVtZXJpYy1kZXNjXCIsIFwic29ydC1udW1lcmljLWRvd24tYWx0XCJdLCBcImY4ODZcIiwgXCJNMTYwIDQ4MGM5IDAgMTcuNS0zLjggMjMuNi0xMC40bDg4LTk2YzExLjktMTMgMTEuMS0zMy4zLTItNDUuMnMtMzMuMy0xMS4xLTQ1LjIgMkwxOTIgMzY1LjdWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzY1LjdMOTUuNiAzMzAuNGMtMTEuOS0xMy0zMi4yLTEzLjktNDUuMi0ycy0xMy45IDMyLjItMiA0NS4ybDg4IDk2QzE0Mi41IDQ3Ni4yIDE1MSA0ODAgMTYwIDQ4MHpNNDUwLjcgMjk0Yy04LjMtNi0xOS4xLTcuNy0yOC44LTQuNGwtNDggMTZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmw1LjktMlY0MTZIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDQ4IDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ2NFYzMjBjMC0xMC4zLTQuOS0xOS45LTEzLjMtMjZ6TTQxOC4zIDkxYTMyIDMyIDAgMSAxIDI3LjQgNTcuOUEzMiAzMiAwIDEgMSA0MTguMyA5MXpNNDA1LjEgMjAzLjhsLTYuOCA5LjJjLTEwLjUgMTQuMi03LjUgMzQuMiA2LjcgNDQuOHMzNC4yIDcuNSA0NC44LTYuN2w0OC44LTY1LjhjMTQtMTguOSAyMS41LTQxLjcgMjEuNS02NS4yYzAtNDguNi0zOS40LTg4LTg4LTg4cy04OCAzOS40LTg4IDg4YzAgMzkuMiAyNS42IDcyLjQgNjEuMSA4My44elwiXVxufTtcbnZhciBmYVNvcnROdW1lcmljRGVzYyA9IGZhQXJyb3dEb3duOTE7XG52YXIgZmFTb3J0TnVtZXJpY0Rvd25BbHQgPSBmYUFycm93RG93bjkxO1xudmFyIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXRvbmd1ZS1zcXVpbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDEsIFwiZ3Jpbi10b25ndWUtc3F1aW50XCJdLCBcImY1OGFcIiwgXCJNMCAyNTZDMCAzNjguOSA3My4xIDQ2NC43IDE3NC41IDQ5OC44QzE2NS4zIDQ4NCAxNjAgNDY2LjYgMTYwIDQ0OFY0MDAuN2MtMjQtMTcuNS00My4xLTQxLjQtNTQuOC02OS4yYy01LTExLjggNy0yMi41IDE5LjMtMTguN2MzOS43IDEyLjIgODQuNSAxOSAxMzEuOCAxOXM5Mi4xLTYuOCAxMzEuOC0xOWMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdjLTExLjggMjgtMzEuMSA1Mi01NS40IDY5LjZWNDQ4YzAgMTguNi01LjMgMzYtMTQuNSA1MC44QzQzOC45IDQ2NC43IDUxMiAzNjguOSA1MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZ6TTExNiAxNDEuMWMwLTkgOS42LTE0LjcgMTcuNS0xMC41bDg5LjkgNDcuOWMxMC43IDUuNyAxMC43IDIxLjEgMCAyNi44bC04OS45IDQ3LjljLTcuOSA0LjItMTcuNS0xLjUtMTcuNS0xMC41YzAtMi44IDEtNS41IDIuOC03LjZsMzYtNDMuMi0zNi00My4yYy0xLjgtMi4xLTIuOC00LjgtMi44LTcuNnptMjYyLjUtMTAuNWM3LjktNC4yIDE3LjUgMS41IDE3LjUgMTAuNWMwIDIuOC0xIDUuNS0yLjggNy42bC0zNiA0My4yIDM2IDQzLjJjMS44IDIuMSAyLjggNC44IDIuOCA3LjZjMCA5LTkuNiAxNC43LTE3LjUgMTAuNWwtODkuOS00Ny45Yy0xMC43LTUuNy0xMC43LTIxLjEgMC0yNi44bDg5LjktNDcuOXpNMzIwIDQ0OFY0MDIuNmMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmgtMmMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOWMtMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMGMtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWgtMmMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6XCJdXG59O1xudmFyIGZhR3JpblRvbmd1ZVNxdWludCA9IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ7XG52YXIgZmFTcHJheUNhbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcHJheS1jYW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YmRcIiwgXCJNMTI4IDBoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMjU2YzAtNTMgNDMtOTYgOTYtOTZIMjI0YzUzIDAgOTYgNDMgOTYgOTZWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYyNTZ6bTI0MCA4MEE4MCA4MCAwIDEgMCA4MCAzMzZhODAgODAgMCAxIDAgMTYwIDB6TTI1NiA2NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zODQgMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTQ0OCAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMzg0IDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhVHJ1Y2tNb25zdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLW1vbnN0ZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2M2JcIiwgXCJNMjg4IDY0djY0SDQxNkwzNjggNjRIMjg4ek00MTkuMiAyNS42TDQ5NiAxMjhoODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTI5LjItMzguOS03NS43LTY0LTEyOC02NHMtOTguOCAyNS4xLTEyOCA2NEgyODhjLTI5LjItMzguOS03NS43LTY0LTEyOC02NHMtOTguOCAyNS4xLTEyOCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJIMjI0VjQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDk2YzIwLjEgMCAzOS4xIDkuNSA1MS4yIDI1LjZ6TTE1MiAyNTZoMTZjMTIuMSAwIDIyLjEgOC45IDIzLjggMjAuNmM3LjYgMi4yIDE0LjkgNS4zIDIxLjcgOWM5LjQtNyAyMi44LTYuMyAzMS4zIDIuM2wxMS4zIDExLjNjOC42IDguNiA5LjMgMjEuOSAyLjMgMzEuM2MzLjcgNi44IDYuOCAxNC4xIDkgMjEuN2MxMS42IDEuNyAyMC42IDExLjcgMjAuNiAyMy44djE2YzAgMTIuMS04LjkgMjIuMS0yMC42IDIzLjhjLTIuMiA3LjYtNS4zIDE0LjktOSAyMS43YzcgOS40IDYuMyAyMi44LTIuMyAzMS4zbC0xMS4zIDExLjNjLTguNiA4LjYtMjEuOSA5LjMtMzEuMyAyLjJjLTYuOCAzLjctMTQuMSA2LjgtMjEuNyA5QzE5MC4xIDUwMy4xIDE4MC4xIDUxMiAxNjggNTEySDE1MmMtMTIuMSAwLTIyLjEtOC45LTIzLjgtMjAuNmMtNy42LTIuMi0xNC45LTUuMy0yMS43LTljLTkuNCA3LjEtMjIuOCA2LjMtMzEuMy0yLjJMNjMuOCA0NjguOWMtOC42LTguNi05LjMtMjEuOS0yLjMtMzEuM2MtMy43LTYuOS02LjgtMTQuMS05LTIxLjhDNDAuOSA0MTQuMSAzMiA0MDQuMSAzMiAzOTJWMzc2YzAtMTIuMSA4LjktMjIuMSAyMC42LTIzLjhjMi4yLTcuNiA1LjMtMTQuOSA5LTIxLjhjLTctOS40LTYuMy0yMi44IDIuMy0zMS4zbDExLjMtMTEuM2M4LjYtOC42IDIxLjktOS4zIDMxLjMtMi4zYzYuOC0zLjcgMTQuMS02LjggMjEuNy05YzEuNy0xMS42IDExLjctMjAuNiAyMy44LTIwLjZ6bTggMTc2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNDQ4LjIgMjc2LjZjMS43LTExLjYgMTEuNy0yMC42IDIzLjgtMjAuNmgxNmMxMi4xIDAgMjIuMSA4LjkgMjMuOCAyMC42YzcuNiAyLjIgMTQuOSA1LjMgMjEuOCA5YzkuNC03IDIyLjgtNi4zIDMxLjMgMi4zbDExLjMgMTEuM2M4LjYgOC42IDkuMyAyMS45IDIuMiAzMS4zYzMuNyA2LjggNi44IDE0LjEgOSAyMS43YzExLjYgMS43IDIwLjYgMTEuNyAyMC42IDIzLjh2MTZjMCAxMi4xLTguOSAyMi4xLTIwLjYgMjMuOGMtMi4yIDcuNi01LjMgMTQuOS05IDIxLjdjNyA5LjQgNi4zIDIyLjgtMi4yIDMxLjNsLTExLjMgMTEuM2MtOC42IDguNi0yMS45IDkuMy0zMS4zIDIuMmMtNi45IDMuNy0xNC4xIDYuOC0yMS44IDlDNTEwLjEgNTAzLjEgNTAwLjEgNTEyIDQ4OCA1MTJINDcyYy0xMi4xIDAtMjIuMS04LjktMjMuOC0yMC42Yy03LjYtMi4yLTE0LjktNS4zLTIxLjctOWMtOS40IDcuMS0yMi44IDYuMy0zMS4zLTIuMmwtMTEuMy0xMS4zYy04LjYtOC42LTkuMy0yMS45LTIuMi0zMS4zYy0zLjctNi45LTYuOC0xNC4xLTktMjEuOEMzNjAuOSA0MTQuMSAzNTIgNDA0LjEgMzUyIDM5MlYzNzZjMC0xMi4xIDguOS0yMi4xIDIwLjYtMjMuOGMyLjItNy42IDUuMy0xNC45IDktMjEuOGMtNy05LjQtNi4zLTIyLjggMi4yLTMxLjNsMTEuMy0xMS4zYzguNi04LjYgMjEuOS05LjMgMzEuMy0yLjNjNi44LTMuNyAxNC4xLTYuOCAyMS43LTl6TTUyOCAzODRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpcIl1cbn07XG52YXIgZmFXID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3cnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMTldLCBcIjU3XCIsIFwiTTIwLjggMzRjMTYuNS02LjIgMzUgMi4yIDQxLjIgMTguN2wxMTAuMiAyOTRMMjU3LjMgNTVjNC0xMy43IDE2LjUtMjMgMzAuNy0yM3MyNi43IDkuNCAzMC43IDIzbDg1LjEgMjkxLjdMNTE0IDUyLjhjNi4yLTE2LjUgMjQuNi0yNC45IDQxLjItMTguN3MyNC45IDI0LjcgMTguNyA0MS4ybC0xNDQgMzg0Yy00LjggMTIuOS0xNy40IDIxLjMtMzEuMiAyMC43cy0yNS43LTkuOC0yOS41LTIzTDI4OCAxNzguMyAyMDYuNyA0NTdjLTMuOSAxMy4yLTE1LjggMjIuNS0yOS41IDIzcy0yNi4zLTcuOC0zMS4yLTIwLjdMMiA3NS4yQy00LjIgNTguNyA0LjIgNDAuMiAyMC44IDM0elwiXVxufTtcbnZhciBmYUVhcnRoQWZyaWNhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VhcnRoLWFmcmljYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1NywgXCJnbG9iZS1hZnJpY2FcIl0sIFwiZjU3Y1wiLCBcIk0xNzcuOCA2My4ybDEwIDE3LjRjMi44IDQuOCA0LjIgMTAuMyA0LjIgMTUuOXY0MS40YzAgMy45IDEuNiA3LjcgNC4zIDEwLjRjNi4yIDYuMiAxNi41IDUuNyAyMi0xLjJsMTMuNi0xN2M0LjctNS45IDEyLjktNy43IDE5LjYtNC4zbDE1LjIgNy42YzMuNCAxLjcgNy4yIDIuNiAxMSAyLjZjNi41IDAgMTIuOC0yLjYgMTcuNC03LjJsMy45LTMuOWMyLjktMi45IDcuMy0zLjYgMTEtMS44bDI5LjIgMTQuNmM3LjggMy45IDEyLjYgMTEuOCAxMi42IDIwLjVjMCAxMC41LTcuMSAxOS42LTE3LjMgMjIuMmwtMzUuNCA4LjhjLTcuNCAxLjgtMTUuMSAxLjUtMjIuNC0uOWwtMzItMTAuN2MtMy4zLTEuMS02LjctMS43LTEwLjItMS43Yy03IDAtMTMuOCAyLjMtMTkuNCA2LjVMMTc2IDIxMmMtMTAuMSA3LjYtMTYgMTkuNC0xNiAzMnYyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJjMTAuMSAwIDE5LjYtNC43IDI1LjYtMTIuOGwyNS42LTM0LjFjOC4zLTExLjEgMTIuOC0yNC42IDEyLjgtMzguNFYzMTguNmMwLTMuOSAyLjYtNy4zIDYuNC04LjJsNS4zLTEuM2MxMS45LTMgMjAuMy0xMy43IDIwLjMtMjZjMC03LjEtMi44LTEzLjktNy44LTE4LjlsLTMzLjUtMzMuNWMtMy43LTMuNy0zLjctOS43IDAtMTMuNGM1LjctNS43IDE0LjEtNy43IDIxLjgtNS4xbDE0LjEgNC43YzEyLjMgNC4xIDI1LjctMS41IDMxLjUtMTNjMy41LTcgMTEuMi0xMC44IDE4LjktOS4ybDI3LjQgNS41QzQzMiAxMTIuNCAzNTEuNSA0OCAyNTYgNDhjLTI3LjcgMC01NCA1LjQtNzguMiAxNS4yek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6XCJdXG59O1xudmFyIGZhR2xvYmVBZnJpY2EgPSBmYUVhcnRoQWZyaWNhO1xudmFyIGZhUmFpbmJvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyYWluYm93JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3NzUyXSwgXCJmNzViXCIsIFwiTTMyMCA5NkMxNzguNiA5NiA2NCAyMTAuNiA2NCAzNTJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyQzAgMTc1LjMgMTQzLjMgMzIgMzIwIDMyczMyMCAxNDMuMyAzMjAgMzIwdjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkM1NzYgMjEwLjYgNDYxLjQgOTYgMzIwIDk2em0wIDE5MmMtMzUuMyAwLTY0IDI4LjctNjQgNjR2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4czEyOCA1Ny4zIDEyOCAxMjh2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xNjAgMzUydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MmMwLTEyMy43IDEwMC4zLTIyNCAyMjQtMjI0czIyNCAxMDAuMyAyMjQgMjI0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MHMtMTYwIDcxLjYtMTYwIDE2MHpcIl1cbn07XG52YXIgZmFDaXJjbGVOb3RjaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtbm90Y2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxY2VcIiwgXCJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44QzEyMS44IDk1LjYgNjQgMTY5LjEgNjQgMjU2YzAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xYy0xNi45LTUtMjYuNi0yMi45LTIxLjUtMzkuOHMyMi45LTI2LjYgMzkuOC0yMS41QzQzNC45IDQyLjEgNTEyIDE0MCA1MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NkMwIDE0MCA3Ny4xIDQyLjEgMTgyLjkgMTAuNmMxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41elwiXVxufTtcbnZhciBmYVRhYmxldFNjcmVlbkJ1dHRvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZXQtc2NyZWVuLWJ1dHRvbicsXG4gIGljb246IFs0NDgsIDUxMiwgW1widGFibGV0LWFsdFwiXSwgXCJmM2ZhXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0yNTYgNDQ4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM4NCA2NEg2NFYzODRIMzg0VjY0elwiXVxufTtcbnZhciBmYVRhYmxldEFsdCA9IGZhVGFibGV0U2NyZWVuQnV0dG9uO1xudmFyIGZhUGF3ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhdycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjFiMFwiLCBcIk0yMjYuNSA5Mi45YzE0LjMgNDIuOS0uMyA4Ni4yLTMyLjYgOTYuOHMtNzAuMS0xNS42LTg0LjQtNTguNXMuMy04Ni4yIDMyLjYtOTYuOHM3MC4xIDE1LjYgODQuNCA1OC41ek0xMDAuNCAxOTguNmMxOC45IDMyLjQgMTQuMyA3MC4xLTEwLjIgODQuMXMtNTkuNy0uOS03OC41LTMzLjNTLTIuNyAxNzkuMyAyMS44IDE2NS4zczU5LjcgLjkgNzguNSAzMy4zek02OS4yIDQwMS4yQzEyMS42IDI1OS45IDIxNC43IDIyNCAyNTYgMjI0czEzNC40IDM1LjkgMTg2LjggMTc3LjJjMy42IDkuNyA1LjIgMjAuMSA1LjIgMzAuNXYxLjZjMCAyNS44LTIwLjkgNDYuNy00Ni43IDQ2LjdjLTExLjUgMC0yMi45LTEuNC0zNC00LjJsLTg4LTIyYy0xNS4zLTMuOC0zMS4zLTMuOC00Ni42IDBsLTg4IDIyYy0xMS4xIDIuOC0yMi41IDQuMi0zNCA0LjJDODQuOSA0ODAgNjQgNDU5LjEgNjQgNDMzLjN2LTEuNmMwLTEwLjQgMS42LTIwLjggNS4yLTMwLjV6TTQyMS44IDI4Mi43Yy0yNC41LTE0LTI5LjEtNTEuNy0xMC4yLTg0LjFzNTQtNDcuMyA3OC41LTMzLjNzMjkuMSA1MS43IDEwLjIgODQuMXMtNTQgNDcuMy03OC41IDMzLjN6TTMxMC4xIDE4OS43Yy0zMi4zLTEwLjYtNDYuOS01My45LTMyLjYtOTYuOHM1Mi4xLTY5LjEgODQuNC01OC41czQ2LjkgNTMuOSAzMi42IDk2LjhzLTUyLjEgNjkuMS04NC40IDU4LjV6XCJdXG59O1xudmFyIGZhQ2xvdWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs5NzI5XSwgXCJmMGMyXCIsIFwiTTAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0SDUxMmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGMwLTYxLjktNDQtMTEzLjYtMTAyLjQtMTI1LjRjNC4xLTEwLjcgNi40LTIyLjQgNi40LTM0LjZjMC01My00My05Ni05Ni05NmMtMTkuNyAwLTM4LjEgNi01My4zIDE2LjJDMzY3IDY0LjIgMzE1LjMgMzIgMjU2IDMyQzE2Ny42IDMyIDk2IDEwMy42IDk2IDE5MmMwIDIuNyAuMSA1LjQgLjIgOC4xQzQwLjIgMjE5LjggMCAyNzMuMiAwIDMzNnpcIl1cbn07XG52YXIgZmFUcm93ZWxCcmlja3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJvd2VsLWJyaWNrcycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU4YVwiLCBcIk0yNDAuOCA0LjhDMjUwLjMgMTAuNiAyNTYgMjAuOSAyNTYgMzJ2NzJoODljMy42LTEzLjggMTYuMS0yNCAzMS0yNGg4OGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgzNzZjLTE0LjkgMC0yNy40LTEwLjItMzEtMjRIMjU2djcyYzAgMTEuMS01LjcgMjEuNC0xNS4yIDI3LjJzLTIxLjIgNi40LTMxLjEgMS40bC0xOTItOTZDNi44IDE1MS4yIDAgMTQwLjEgMCAxMjhzNi44LTIzLjIgMTcuNy0yOC42bDE5Mi05NmM5LjktNSAyMS43LTQuNCAzMS4xIDEuNHpNMjg4IDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNTZ6TTMyIDM4NGg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhRmFjZUZsdXNoZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1mbHVzaGVkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTYzLCBcImZsdXNoZWRcIl0sIFwiZjU3OVwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6TTE3NiAzODRjMCA4LjggNy4yIDE2IDE2IDE2SDMyMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxOTJjLTguOCAwLTE2IDcuMi0xNiAxNnptLTE2LTg4YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0em0yNjQtNzJhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwem0tMjg4IDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTkyIDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFGbHVzaGVkID0gZmFGYWNlRmx1c2hlZDtcbnZhciBmYUhvc3BpdGFsVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3NwaXRhbC11c2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmODBkXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjI1NkgxNDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMHY2NEgxNDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMHY4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyNjUuOWMtNi4zLTEwLjItOS45LTIyLjItOS45LTM1LjFjMC00Ni45IDI1LjgtODcuOCA2NC0xMDkuMlYyNzEuOCA0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNMTUyIDY0aDE2YzguOCAwIDE2IDcuMiAxNiAxNnYyNGgyNGM4LjggMCAxNiA3LjIgMTYgMTZ2MTZjMCA4LjgtNy4yIDE2LTE2IDE2SDE4NHYyNGMwIDguOC03LjIgMTYtMTYgMTZIMTUyYy04LjggMC0xNi03LjItMTYtMTZWMTUySDExMmMtOC44IDAtMTYtNy4yLTE2LTE2VjEyMGMwLTguOCA3LjItMTYgMTYtMTZoMjRWODBjMC04LjggNy4yLTE2IDE2LTE2ek01MTIgMjcyYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHpNMjg4IDQ3Ny4xYzAgMTkuMyAxNS42IDM0LjkgMzQuOSAzNC45SDU0MS4xYzE5LjMgMCAzNC45LTE1LjYgMzQuOS0zNC45YzAtNTEuNC00MS43LTkzLjEtOTMuMS05My4xSDM4MS4xYy01MS40IDAtOTMuMSA0MS43LTkzLjEgOTMuMXpcIl1cbn07XG52YXIgZmFUZW50QXJyb3dMZWZ0UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVudC1hcnJvdy1sZWZ0LXJpZ2h0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTdmXCIsIFwiTTQ4OC4xIDYuMmMtOS45LTguOS0yNS04LjEtMzMuOSAxLjhzLTguMSAyNSAxLjggMzMuOUw0ODkuNSA3MiA4Ni41IDcybDMzLjUtMzAuMmM5LjktOC45IDEwLjctMjQgMS44LTMzLjlTOTcuOC0yLjcgODcuOSA2LjJsLTgwIDcyQzIuOSA4Mi43IDAgODkuMiAwIDk2czIuOSAxMy4zIDcuOSAxNy44bDgwIDcyYzkuOSA4LjkgMjUgOC4xIDMzLjktMS44czguMS0yNS0xLjgtMzMuOUw4Ni41IDEyMGw0MDIuOSAwLTMzLjUgMzAuMmMtOS45IDguOS0xMC43IDI0LTEuOCAzMy45czI0IDEwLjcgMzMuOSAxLjhsODAtNzJjNS4xLTQuNiA3LjktMTEgNy45LTE3LjhzLTIuOS0xMy4zLTcuOS0xNy44bC04MC03MnpNMzA3LjQgMTY2LjVjLTExLjUtOC43LTI3LjMtOC43LTM4LjggMGwtMTY4IDEyOGMtNi42IDUtMTEgMTIuNS0xMi4zIDIwLjdsLTI0IDE2MGMtMS40IDkuMiAxLjMgMTguNiA3LjQgMjUuNlM4Ni43IDUxMiA5NiA1MTJIMjQwaDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM2MS45YzAtNS41IDQuNC05LjkgOS45LTkuOWMzLjcgMCA3LjIgMi4xIDguOCA1LjVsNjguNCAxMzYuOGM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43SDQ2NGgxNmM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjh6XCJdXG59O1xudmFyIGZhR2F2ZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2F2ZWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxlZ2FsXCJdLCBcImYwZTNcIiwgXCJNMzE4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTIwIDEyMGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYgMTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNC00TDMyNS40IDI5My40bC00IDRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2IDE2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyMC0xMjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2LTE2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNCA0TDMzMC42IDc0LjZsNC00YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNi0xNnptLTE1MiAyODhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMTIgMTEyYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w0OCA0OGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMTItMTEyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xLjQtMS40TDI3MiAyODUuMyAyMjYuNyAyNDAgMTY4IDI5OC43bC0xLjQtMS40elwiXVxufTtcbnZhciBmYUxlZ2FsID0gZmFHYXZlbDtcbnZhciBmYUJpbm9jdWxhcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmlub2N1bGFycycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjFlNVwiLCBcIk0xMjggMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTZIOTZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDk2VjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzg4LjljMC0zNC42IDkuNC02OC42IDI3LjItOTguM0M0MC45IDI2Ny44IDQ5LjcgMjQyLjQgNTMgMjE2TDYwLjUgMTU2YzItMTYgMTUuNi0yOCAzMS44LTI4SDE5MnptMjI3LjggMGMxNi4xIDAgMjkuOCAxMiAzMS44IDI4TDQ1OSAyMTZjMy4zIDI2LjQgMTIuMSA1MS44IDI1LjggNzQuNmMxNy44IDI5LjcgMjcuMiA2My43IDI3LjIgOTguM1Y0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxMjhoOTkuOHpNMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2SDMyMFY2NHptLTMyIDY0VjI4OEgyMjRWMTI4aDY0elwiXVxufTtcbnZhciBmYU1pY3JvcGhvbmVTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Bob25lLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmMTMxXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDcyLjEgMzQ0LjdjMTUuMi0yNiAyMy45LTU2LjMgMjMuOS04OC43VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0MGMwIDIxLjItNS4xIDQxLjEtMTQuMiA1OC43TDQxNiAzMDAuOFY5NmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnY1NC4zTDM4LjggNS4xem0zNjIuNSA0MDdsLTQzLjEtMzMuOUMzNDYuMSAzODIgMzMzLjMgMzg0IDMyMCAzODRjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4di04LjdMMTQ0LjcgMjEwYy0uNSAxLjktLjcgMy45LS43IDZ2NDBjMCA4OS4xIDY2LjIgMTYyLjcgMTUyIDE3NC40VjQ2NEgyNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNzIgNzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzQ0VjQzMC40YzIwLjQtMi44IDM5LjctOS4xIDU3LjMtMTguMnpcIl1cbn07XG52YXIgZmFCb3hUaXNzdWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94LXRpc3N1ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTA1YlwiLCBcIk05Mi41IDBIMjA4YzQwIDAgNTIgMjQgNjQgNDhzMjQgNDggNjQgNDhoODUuMkM0MzYgOTYgNDQ4IDEwOCA0NDggMTIyLjhjMCAzLjQtLjcgNi44LTEuOSAxMEw0MDkuNiAyMjQgMzg0IDI4OEgxMjhsLTE2LTY0TDY0LjkgMzUuNGMtLjYtMi4zLS45LTQuNi0uOS02LjlDNjQgMTIuOCA3Ni44IDAgOTIuNSAwek03OSAyMjRsMTYgNjRIODBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNDhIMzg0aDQ4YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDQxOC41bDI1LjYtNjRINDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjM4NEgwVjI3MmMwLTI2LjUgMjEuNS00OCA0OC00OEg3OXpNMCA0MTZINTEydjQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0MTZ6XCJdXG59O1xudmFyIGZhTW90b3JjeWNsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb3RvcmN5Y2xlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTQ5XSwgXCJmMjFjXCIsIFwiTTI4MCAzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg1Ny43bDE2LjQgMzAuM0wyNTYgMTkybC00NS4zLTQ1LjNjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyaDk2Yzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwYzAgMTEtMS4xIDIxLjctMy4yIDMyaDcwLjRjLTIuMS0xMC4zLTMuMi0yMS0zLjItMzJjMC01Mi4yIDI1LTk4LjYgNjMuNy0xMjcuOGwxNS40IDI4LjZDNDAyLjQgMjc2LjMgMzg0IDMxMiAzODQgMzUyYzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhzLTU3LjMtMTI4LTEyOC0xMjhjLTEzLjUgMC0yNi41IDIuMS0zOC43IDZMNDE4LjIgMTI4SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkg0NTkuNmMtNy41IDAtMTQuNyAyLjYtMjAuNSA3LjRMMzkxLjcgNzguOWwtMTQtMjZjLTctMTIuOS0yMC41LTIxLTM1LjItMjFIMjgwek00NjIuNyAzMTEuMmwyOC4yIDUyLjJjNi4zIDExLjcgMjAuOSAxNiAzMi41IDkuN3MxNi0yMC45IDkuNy0zMi41bC0yOC4yLTUyLjJjMi4zLS4zIDQuNy0uNCA3LjEtLjRjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0xNS41IDUuNS0yOS43IDE0LjctNDAuOHpNMTg3LjMgMzc2Yy05LjUgMjMuNS0zMi41IDQwLTU5LjMgNDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMjYuOSAwIDQ5LjkgMTYuNSA1OS4zIDQwaDY2LjRDMjQyLjUgMjY4LjggMTkwLjUgMjI0IDEyOCAyMjRDNTcuMyAyMjQgMCAyODEuMyAwIDM1MnM1Ny4zIDEyOCAxMjggMTI4YzYyLjUgMCAxMTQuNS00NC44IDEyNS44LTEwNEgxODcuM3pNMTI4IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQmVsbENvbmNpZXJnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiZWxsLWNvbmNpZXJnZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODcxOCwgXCJjb25jaWVyZ2UtYmVsbFwiXSwgXCJmNTYyXCIsIFwiTTIxNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGgxNnYzMy4zQzExOS42IDE1Ny4yIDMyIDI1Mi40IDMyIDM2OEg0ODBjMC0xMTUuNi04Ny42LTIxMC44LTIwMC0yMjIuN1YxMTJoMTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjU2IDIxNnpNMjQgNDAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDQ4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyNHpcIl1cbn07XG52YXIgZmFDb25jaWVyZ2VCZWxsID0gZmFCZWxsQ29uY2llcmdlO1xudmFyIGZhUGVuUnVsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuLXJ1bGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJwZW5jaWwtcnVsZXJcIl0sIFwiZjVhZVwiLCBcIk00NjkuMyAxOS4zbDIzLjQgMjMuNGMyNSAyNSAyNSA2NS41IDAgOTAuNWwtNTYuNCA1Ni40TDMyMi4zIDc1LjdsNTYuNC01Ni40YzI1LTI1IDY1LjUtMjUgOTAuNSAwek00NC45IDM1My4yTDI5OS43IDk4LjMgNDEzLjcgMjEyLjMgMTU4LjggNDY3LjFjLTYuNyA2LjctMTUuMSAxMS42LTI0LjIgMTQuMmwtMTA0IDI5LjdjLTguNCAyLjQtMTcuNCAuMS0yMy42LTYuMXMtOC41LTE1LjItNi4xLTIzLjZsMjkuNy0xMDRjMi42LTkuMiA3LjUtMTcuNSAxNC4yLTI0LjJ6TTI0OS40IDEwMy40TDEwMy40IDI0OS40IDE2IDE2MS45Yy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOUw5NC4xIDE2YzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDE5LjggMTkuOGMtLjMgLjMtLjcgLjYtMSAuOWwtNjQgNjRjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw2NC02NGMuMy0uMyAuNi0uNyAuOS0xbDQ1LjEgNDUuMXpNNDA4LjYgMjYyLjZsNDUuMSA0NS4xYy0uMyAuMy0uNyAuNi0xIC45bC02NCA2NGMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDY0LTY0Yy4zLS4zIC42LS43IC45LTFMNDk2IDM1MC4xYzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDQxNy45IDQ5NmMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBsLTg3LjQtODcuNEw0MDguNiAyNjIuNnpcIl1cbn07XG52YXIgZmFQZW5jaWxSdWxlciA9IGZhUGVuUnVsZXI7XG52YXIgZmFQZW9wbGVBcnJvd3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVvcGxlLWFycm93cycsXG4gIGljb246IFs2NDAsIDUxMiwgW1wicGVvcGxlLWFycm93cy1sZWZ0LXJpZ2h0XCJdLCBcImUwNjhcIiwgXCJNNjQgNjRhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgNjQgNjR6TTI1LjkgMjMzLjRDMjkuMyAxOTEuOSA2NCAxNjAgMTA1LjYgMTYwaDQ0LjhjMjcgMCA1MSAxMy40IDY1LjUgMzQuMWMtMi43IDEuOS01LjIgNC03LjUgNi4zbC02NCA2NGMtMjEuOSAyMS45LTIxLjkgNTcuMyAwIDc5LjJMMTkyIDM5MS4yVjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgxMTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM0OC4zYy0yNi41LTkuNS00NC43LTM1LjgtNDIuMi02NS42bDQuMS00OS4zek00NDggNjRhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgNDQ4IDY0ek00MzEuNiAyMDAuNGMtMi4zLTIuMy00LjktNC40LTcuNS02LjNjMTQuNS0yMC43IDM4LjYtMzQuMSA2NS41LTM0LjFoNDQuOGM0MS42IDAgNzYuMyAzMS45IDc5LjcgNzMuNGw0LjEgNDkuM2MyLjUgMjkuOC0xNS43IDU2LjEtNDIuMiA2NS42VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OTZjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM5MS4ybDQ3LjYtNDcuNmMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMmwtNjQtNjR6TTI3MiAyNDB2MzJoOTZWMjQwYzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNjQgNjRjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJzLTE0LjgtMTIuNS0xNC44LTIyLjJWMzM2SDI3MnYzMmMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNjQtNjRjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMnMxNC44IDEyLjUgMTQuOCAyMi4yelwiXVxufTtcbnZhciBmYVBlb3BsZUFycm93c0xlZnRSaWdodCA9IGZhUGVvcGxlQXJyb3dzO1xudmFyIGZhTWFyc0FuZFZlbnVzQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycy1hbmQtdmVudXMtYnVyc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjNcIiwgXCJNNTA0IDBjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzkgMzktMjIuMiAyMi4yQzQ3NS45IDc4LjQgNDM5LjYgNjQgNDAwIDY0Yy04OC40IDAtMTYwIDcxLjYtMTYwIDE2MGMwIDgwLjIgNTkgMTQ2LjYgMTM2IDE1OC4yVjQwOEgzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMjR2MzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NTZoMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRINDI0VjM4Mi4yYzc3LTExLjYgMTM2LTc4IDEzNi0xNTguMmMwLTMxLjQtOS02MC43LTI0LjctODUuNEw1NjAgMTEzLjlsMzkgMzljNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMnMxNC44LTEyLjUgMTQuOC0yMi4yVjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0SDUwNHpNNDAwIDEyOGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpNMTkwLjkgMTguMUMxODguNCAxMiAxODIuNiA4IDE3NiA4cy0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0TDU1LjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjFMMTAuOSAyMDYuNGMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMkw5MC42IDMyN2MtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNkwxNzYgMjg2LjFsNTguNiA1My45YzQuMSAzLjggOS45IDUuMSAxNS4yIDMuNkMyMjMuNiAzMTAuOCAyMDggMjY5LjIgMjA4IDIyNGMwLTYwLjggMjguMy0xMTUgNzIuNC0xNTAuMkwyMjAuMyA5Mi4xbC0yOS40LTc0elwiXVxufTtcbnZhciBmYVNxdWFyZUNhcmV0UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLWNhcmV0LXJpZ2h0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYXJldC1zcXVhcmUtcmlnaHRcIl0sIFwiZjE1MlwiLCBcIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzIwIDI1NmMwIDYuNy0yLjggMTMtNy43IDE3LjZsLTExMiAxMDRjLTcgNi41LTE3LjIgOC4yLTI1LjkgNC40cy0xNC40LTEyLjUtMTQuNC0yMmwwLTIwOGMwLTkuNSA1LjctMTguMiAxNC40LTIyczE4LjktMi4xIDI1LjkgNC40bDExMiAxMDRjNC45IDQuNSA3LjcgMTAuOSA3LjcgMTcuNnpcIl1cbn07XG52YXIgZmFDYXJldFNxdWFyZVJpZ2h0ID0gZmFTcXVhcmVDYXJldFJpZ2h0O1xudmFyIGZhU2Npc3NvcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Npc3NvcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5OTg0LCA5OTg2LCA5OTg4LCBcImN1dFwiXSwgXCJmMGM0XCIsIFwiTTI1NiAxOTJsLTM5LjUtMzkuNWM0LjktMTIuNiA3LjUtMjYuMiA3LjUtNDAuNUMyMjQgNTAuMSAxNzMuOSAwIDExMiAwUzAgNTAuMSAwIDExMnM1MC4xIDExMiAxMTIgMTEyYzE0LjMgMCAyNy45LTIuNyA0MC41LTcuNUwxOTIgMjU2bC0zOS41IDM5LjVjLTEyLjYtNC45LTI2LjItNy41LTQwLjUtNy41QzUwLjEgMjg4IDAgMzM4LjEgMCA0MDBzNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEyYzAtMTQuMy0yLjctMjcuOS03LjUtNDAuNUw0OTkuMiA3Ni44YzcuMS03LjEgNy4xLTE4LjUgMC0yNS42Yy0yOC4zLTI4LjMtNzQuMS0yOC4zLTEwMi40IDBMMjU2IDE5MnptMjIuNiAxNTAuNkwzOTYuOCA0NjAuOGMyOC4zIDI4LjMgNzQuMSAyOC4zIDEwMi40IDBjNy4xLTcuMSA3LjEtMTguNSAwLTI1LjZMMzQyLjYgMjc4LjZsLTY0IDY0ek02NCAxMTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDggMjQwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG52YXIgZmFDdXQgPSBmYVNjaXNzb3JzO1xudmFyIGZhU3VuUGxhbnRXaWx0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1bi1wbGFudC13aWx0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTdhXCIsIFwiTTE2MCAwYy02LjMgMC0xMiAzLjctMTQuNiA5LjVMMTIwLjYgNjQuOSA2My45IDQzLjJjLTUuOS0yLjMtMTIuNi0uOC0xNyAzLjZzLTUuOSAxMS4xLTMuNiAxN2wyMS43IDU2LjdMOS41IDE0NS40QzMuNyAxNDggMCAxNTMuNyAwIDE2MHMzLjcgMTIgOS41IDE0LjZsNTUuNCAyNC44TDQzLjIgMjU2LjFjLTIuMyA1LjktLjggMTIuNiAzLjYgMTdzMTEuMSA1LjkgMTcgMy42bDU2LjctMjEuNyAyNC44IDU1LjRjMi42IDUuOCA4LjMgOS41IDE0LjYgOS41czEyLTMuNyAxNC42LTkuNWwyNC44LTU1LjQgNTYuNyAyMS43YzUuOSAyLjMgMTIuNiAuOCAxNy0zLjZzNS45LTExLjEgMy42LTE3bC0yMS43LTU2LjcgNTUuNC0yNC44YzUuOC0yLjYgOS41LTguMyA5LjUtMTQuNnMtMy43LTEyLTkuNS0xNC42bC01NS40LTI0LjggMjEuNy01Ni43YzIuMy01LjkgLjgtMTIuNi0zLjYtMTdzLTExLjEtNS45LTE3LTMuNkwxOTkuNCA2NC45IDE3NC42IDkuNUMxNzIgMy43IDE2Ni4zIDAgMTYwIDB6bTAgOTZhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMxMiAxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjUzLjRjLTE0LjggNy43LTI0IDIzLjEtMjQgNDQuNmMwIDE2LjggMTYgNDQgMzcuNCA2Ny4yYzUuOCA2LjIgMTUuNSA2LjIgMjEuMiAwQzYyNCAzMTggNjQwIDI5MC43IDY0MCAyNzRjMC0yMS41LTkuMi0zNy0yNC00NC42VjE3NmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHYyMi43Yy05LjgtNC4zLTIwLjYtNi43LTMyLTYuN2MtNDQuMiAwLTgwIDM1LjgtODAgODB2MjEuNGMtMTQuOCA3LjctMjQgMjMuMS0yNCA0NC42YzAgMTYuOCAxNiA0NCAzNy40IDY3LjJjNS44IDYuMiAxNS41IDYuMiAyMS4yIDBDNDAwIDM4MiA0MTYgMzU0LjcgNDE2IDMzOGMwLTIxLjUtOS4yLTM3LTI0LTQ0LjZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2OFY0NDhIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDUwNFYyODB2LThWMTc2elwiXVxufTtcbnZhciBmYVRvaWxldHNQb3J0YWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b2lsZXRzLXBvcnRhYmxlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTg0XCIsIFwiTTMyIDBIMjI0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0SDBWMzJDMCAxNC4zIDE0LjMgMCAzMiAwek0wIDk2SDI0IDIzMmgyNHYyNFY0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR2LThINDh2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYxMjAgOTZ6TTE5MiAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZ6TTM1MiAwSDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NEgzMjBWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyMCA5NmgyNEg1NTJoMjR2MjRWNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0di04SDM2OHY4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjEyMCA5NnpNNTEyIDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNnpcIl1cbn07XG52YXIgZmFIb2NrZXlQdWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvY2tleS1wdWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDUzXCIsIFwiTTI1NiAyNTZDMTE0LjYgMjU2IDAgMjEzIDAgMTYwczExNC42LTk2IDI1Ni05NnMyNTYgNDMgMjU2IDk2cy0xMTQuNiA5Ni0yNTYgOTZ6bTE5Mi4zIDEuOGMyNC43LTkuMyA0Ni45LTIxIDYzLjctMzUuNlYzNTJjMCA1My0xMTQuNiA5Ni0yNTYgOTZTMCA0MDUgMCAzNTJWMjIyLjNjMTYuOCAxNC42IDM5IDI2LjMgNjMuNyAzNS42QzExNC41IDI3Ni45IDE4Mi41IDI4OCAyNTYgMjg4czE0MS41LTExLjEgMTkyLjMtMzAuMnpcIl1cbn07XG52YXIgZmFUYWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjBjZVwiLCBcIk02NCAyNTZWMTYwSDIyNHY5Nkg2NHptMCA2NEgyMjR2OTZINjRWMzIwem0yMjQgOTZWMzIwSDQ0OHY5NkgyODh6TTQ0OCAyNTZIMjg4VjE2MEg0NDh2OTZ6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpcIl1cbn07XG52YXIgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MjFcIiwgXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHpNMjQxIDExOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMUgxMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMjM4LjFsLTMxIDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyelwiXVxufTtcbnZhciBmYVRhY2hvZ3JhcGhEaWdpdGFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhY2hvZ3JhcGgtZGlnaXRhbCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiZGlnaXRhbC10YWNob2dyYXBoXCJdLCBcImY1NjZcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTMyIDY0SDMyMGMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAzNjhjMC04LjggNy4yLTE2IDE2LTE2SDMzNmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2em0zMjAgMGMwLTguOCA3LjItMTYgMTYtMTZINTYwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2ek04MCAyODhhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem00OCAxNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwem04MC0xNmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6bTQ4IDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bTgwLTE2YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG52YXIgZmFEaWdpdGFsVGFjaG9ncmFwaCA9IGZhVGFjaG9ncmFwaERpZ2l0YWw7XG52YXIgZmFVc2Vyc1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXJzLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMDczXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDQwLjYgMzIwSDYxOC43YzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNDNjQwIDIzOS44IDU5Mi4yIDE5MiA1MzMuMyAxOTJINDkwLjdjLTE1LjkgMC0zMSAzLjUtNDQuNiA5LjdjMS4zIDcuMiAxLjkgMTQuNyAxLjkgMjIuM2MwIDMwLjItMTAuNSA1OC0yOCA3OS45bC0yNS4yLTE5LjdDNDA4LjEgMjY3LjcgNDE2IDI0Ni44IDQxNiAyMjRjMC01My00My05Ni05Ni05NmMtMzEuMSAwLTU4LjcgMTQuOC03Ni4zIDM3LjdsLTQwLjYtMzEuOGMxMy0xNC4yIDIwLjktMzMuMSAyMC45LTUzLjljMC00NC4yLTM1LjgtODAtODAtODBDMTE2LjMgMCA5MS45IDE0LjEgNzcuNSAzNS41TDM4LjggNS4xek0xMDYuNyAxOTJDNDcuOCAxOTIgMCAyMzkuOCAwIDI5OC43QzAgMzEwLjQgOS42IDMyMCAyMS4zIDMyMEgyMzQuN2MuMiAwIC40IDAgLjcgMGMtMjAuNi0xOC4yLTM1LjItNDIuOC00MC44LTcwLjhMMTIxLjggMTkySDEwNi43ek0yNjEuMyAzNTJDMTg3LjcgMzUyIDEyOCA0MTEuNyAxMjggNDg1LjNjMCAxNC43IDExLjkgMjYuNyAyNi43IDI2LjdINDg1LjNjMTAuNSAwIDE5LjUtNiAyMy45LTE0LjhMMzI0LjkgMzUySDI2MS4zek01MTIgMTYwQTgwIDgwIDAgMSAwIDUxMiAwYTgwIDgwIDAgMSAwIDAgMTYwelwiXVxufTtcbnZhciBmYUNsb3ZlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG92ZXInLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUxMzlcIiwgXCJNMjE2LjYgNDkuOUMyMDUuMSAzOC41IDE4OS41IDMyIDE3My4zIDMyQzEzOS40IDMyIDExMiA1OS40IDExMiA5My4zdjQuOWMwIDEyIDMuMyAyMy43IDkuNCAzNGwxOC44IDMxLjNjMS4xIDEuOCAxLjIgMy4xIDEgNC4yYy0uMiAxLjItLjggMi41LTIgMy42cy0yLjQgMS44LTMuNiAyYy0xIC4yLTIuNCAuMS00LjItMWwtMzEuMy0xOC44Yy0xMC4zLTYuMi0yMi05LjQtMzQtOS40SDYxLjNDMjcuNCAxNDQgMCAxNzEuNCAwIDIwNS4zYzAgMTYuMiA2LjUgMzEuOCAxNy45IDQzLjNsMS4yIDEuMmMzLjQgMy40IDMuNCA5IDAgMTIuNGwtMS4yIDEuMkM2LjUgMjc0LjkgMCAyOTAuNSAwIDMwNi43QzAgMzQwLjYgMjcuNCAzNjggNjEuMyAzNjhoNC45YzEyIDAgMjMuNy0zLjMgMzQtOS40bDMxLjMtMTguOGMxLjgtMS4xIDMuMS0xLjIgNC4yLTFjMS4yIC4yIDIuNSAuOCAzLjYgMnMxLjggMi40IDIgMy42Yy4yIDEgLjEgMi40LTEgNC4ybC0xOC44IDMxLjNjLTYuMiAxMC4zLTkuNCAyMi05LjQgMzR2NC45YzAgMzMuOCAyNy40IDYxLjMgNjEuMyA2MS4zYzE2LjIgMCAzMS44LTYuNSA0My4zLTE3LjlsMS4yLTEuMmMzLjQtMy40IDktMy40IDEyLjQgMGwxLjIgMS4yYzExLjUgMTEuNSAyNy4xIDE3LjkgNDMuMyAxNy45YzMzLjggMCA2MS4zLTI3LjQgNjEuMy02MS4zdi00LjljMC0xMi0zLjMtMjMuNy05LjQtMzRsLTE4LjgtMzEuM2MtMS4xLTEuOC0xLjItMy4xLTEtNC4yYy4yLTEuMiAuOC0yLjUgMi0zLjZzMi40LTEuOCAzLjYtMmMxLS4yIDIuNC0uMSA0LjIgMWwzMS4zIDE4LjhjMTAuMyA2LjIgMjIgOS40IDM0IDkuNGg0LjljMzMuOCAwIDYxLjMtMjcuNCA2MS4zLTYxLjNjMC0xNi4yLTYuNS0zMS44LTE3LjktNDMuM2wtMS4yLTEuMmMtMy40LTMuNC0zLjQtOSAwLTEyLjRsMS4yLTEuMmMxMS41LTExLjUgMTcuOS0yNy4xIDE3LjktNDMuM2MwLTMzLjgtMjcuNC02MS4zLTYxLjMtNjEuM2gtNC45Yy0xMiAwLTIzLjcgMy4zLTM0IDkuNGwtMzEuMyAxOC44Yy0xLjggMS4xLTMuMSAxLjItNC4yIDFjLTEuMi0uMi0yLjUtLjgtMy42LTJzLTEuOC0yLjQtMi0zLjZjLS4yLTEtLjEtMi40IDEtNC4ybDE4LjgtMzEuM2M2LjItMTAuMyA5LjQtMjIgOS40LTM0VjkzLjNDMzM2IDU5LjQgMzA4LjYgMzIgMjc0LjcgMzJjLTE2LjIgMC0zMS44IDYuNS00My4zIDE3LjlsLTEuMiAxLjJjLTMuNCAzLjQtOSAzLjQtMTIuNCAwbC0xLjItMS4yelwiXVxufTtcbnZhciBmYVJlcGx5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlcGx5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE3MTQsIFwibWFpbC1yZXBseVwiXSwgXCJmM2U1XCIsIFwiTTIwNSAzNC44YzExLjUgNS4xIDE5IDE2LjYgMTkgMjkuMnY2NEgzMzZjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzZjMCAxMTMuMy04MS41IDE2My45LTEwMC4yIDE3NC4xYy0yLjUgMS40LTUuMyAxLjktOC4xIDEuOWMtMTAuOSAwLTE5LjctOC45LTE5LjctMTkuN2MwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNWM5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjdjMC01My00My05Ni05Ni05NkgyMjR2NjRjMCAxMi42LTcuNCAyNC4xLTE5IDI5LjJzLTI1IDMtMzQuNC01LjRsLTE2MC0xNDRDMy45IDIyNS43IDAgMjE3LjEgMCAyMDhzMy45LTE3LjcgMTAuNi0yMy44bDE2MC0xNDRjOS40LTguNSAyMi45LTEwLjYgMzQuNC01LjR6XCJdXG59O1xudmFyIGZhTWFpbFJlcGx5ID0gZmFSZXBseTtcbnZhciBmYVN0YXJBbmRDcmVzY2VudCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFyLWFuZC1jcmVzY2VudCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3NzBdLCBcImY2OTlcIiwgXCJNMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwYzMzIDAgNjQuNiA2LjMgOTMuNiAxNy43YzcuNCAyLjkgMTEuNSAxMC43IDkuOCAxOC40cy04LjggMTMtMTYuNyAxMi40Yy00LjgtLjMtOS43LS41LTE0LjYtLjVjLTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOHM5My4xIDIwOCAyMDggMjA4YzQuOSAwIDkuOC0uMiAxNC42LS41YzcuOS0uNSAxNSA0LjcgMTYuNyAxMi40cy0yLjQgMTUuNS05LjggMTguNEMzMjAuNiA1MDUuNyAyODkgNTEyIDI1NiA1MTJDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6TTM3NS40IDEzNy40YzMuNS03LjEgMTMuNy03LjEgMTcuMiAwbDMxLjUgNjMuOGMxLjQgMi44IDQuMSA0LjggNy4yIDUuM2w3MC40IDEwLjJjNy45IDEuMSAxMSAxMC44IDUuMyAxNi40bC01MC45IDQ5LjZjLTIuMyAyLjItMy4zIDUuNC0yLjggOC41bDEyIDcwLjFjMS4zIDcuOC02LjkgMTMuOC0xMy45IDEwLjFsLTYzLTMzLjFjLTIuOC0xLjUtNi4xLTEuNS04LjkgMGwtNjMgMzMuMWMtNyAzLjctMTUuMy0yLjMtMTMuOS0xMC4xbDEyLTcwLjFjLjUtMy4xLS41LTYuMy0yLjgtOC41TDI2MSAyMzMuMWMtNS43LTUuNi0yLjYtMTUuMiA1LjMtMTYuNGw3MC40LTEwLjJjMy4xLS41IDUuOC0yLjQgNy4yLTUuM2wzMS41LTYzLjh6XCJdXG59O1xudmFyIGZhSG91c2VGaXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWZpcmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGNcIiwgXCJNMjg4IDM1MC4xbDAgMS45SDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjQgMjRjMCAyMi4xLTE3LjkgNDAtNDAgNDBIMTYwIDEyOC4xYy0xLjUgMC0zLS4xLTQuNS0uMmMtMS4yIC4xLTIuNCAuMi0zLjYgLjJIMTA0Yy0yMi4xIDAtNDAtMTcuOS00MC00MFYzNjBjMC0uOSAwLTEuOSAuMS0yLjhWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQ0Ny4zIDEyOC4xYy0xMi4zLTEtMjUgMy0zNC44IDExLjdjLTM1LjQgMzEuNi02NS42IDY3LjctODcuMyAxMDIuOEMzMDQuMyAyNzYuNSAyODggMzE0LjkgMjg4IDM1MC4xek00ODAgNTEyYy04OC40IDAtMTYwLTcxLjYtMTYwLTE2MGMwLTc2LjcgNjIuNS0xNDQuNyAxMDcuMi0xNzkuNGM1LTMuOSAxMC45LTUuOCAxNi44LTUuOGM3LjktLjEgMTYgMy4xIDIyIDkuMmw0NiA0NiAxMS4zLTExLjNjMTEuNy0xMS43IDMwLjYtMTIuNyA0Mi4zLTFDNjI0LjUgMjY4IDY0MCAzMjAuMiA2NDAgMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwem02NC0xMTEuOGMwLTM2LjUtMzctNzMtNTQuOC04OC40Yy01LjQtNC43LTEzLjEtNC43LTE4LjUgMEM0NTMgMzI3LjEgNDE2IDM2My42IDQxNiA0MDAuMmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbnZhciBmYVNxdWFyZU1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1taW51cycsXG4gIGljb246IFs0NDgsIDUxMiwgWzYxNzY3LCBcIm1pbnVzLXNxdWFyZVwiXSwgXCJmMTQ2XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHptODggMjAwSDI5NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxNTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdXG59O1xudmFyIGZhTWludXNTcXVhcmUgPSBmYVNxdWFyZU1pbnVzO1xudmFyIGZhSGVsaWNvcHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWxpY29wdGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjQxXSwgXCJmNTMzXCIsIFwiTTEyOCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0djY0aDMyYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwdjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDM4NCAzMjBjLTIwLjEgMC0zOS4xLTkuNS01MS4yLTI1LjZsLTcxLjQtOTUuMmMtMy41LTQuNy04LjMtOC4zLTEzLjctMTAuNUw0Ny4yIDE5OC4xYy05LjUtMy44LTE2LjctMTItMTkuMi0yMkw1IDgzLjlDMi40IDczLjggMTAuMSA2NCAyMC41IDY0SDQ4YzEwLjEgMCAxOS42IDQuNyAyNS42IDEyLjhMMTEyIDEyOEgzMjBWNjRIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMzg0IDMyMEg1MTJWMjg4YzAtNTMtNDMtOTYtOTYtOTZIMzg0VjMyMHpNNjMwLjYgNDI1LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTMuOSAzLjljLTI0IDI0LTU2LjYgMzcuNS05MC41IDM3LjVIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDUzNi4yYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43bDMuOS0zLjljMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDB6XCJdXG59O1xudmFyIGZhQ29tcGFzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21wYXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE3XSwgXCJmMTRlXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem01MC43LTE4Ni45TDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4yIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG52YXIgZmFTcXVhcmVDYXJldERvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLWNhcmV0LWRvd24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImNhcmV0LXNxdWFyZS1kb3duXCJdLCBcImYxNTBcIiwgXCJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45czEyLjUtMTQuNCAyMi0xNC40bDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6XCJdXG59O1xudmFyIGZhQ2FyZXRTcXVhcmVEb3duID0gZmFTcXVhcmVDYXJldERvd247XG52YXIgZmFGaWxlQ2lyY2xlUXVlc3Rpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtcXVlc3Rpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZWZcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4em00OCA5NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpNMzY4IDMyMS42VjMyOGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2di02LjRjMC01LjMgNC4zLTkuNiA5LjYtOS42aDQwLjVjNy43IDAgMTMuOSA2LjIgMTMuOSAxMy45YzAgNS4yLTIuOSA5LjktNy40IDEyLjNsLTMyIDE2LjhjLTUuMyAyLjgtOC42IDguMi04LjYgMTQuMlYzODRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnYtNS4xbDIzLjUtMTIuM2MxNS4xLTcuOSAyNC41LTIzLjYgMjQuNS00MC42YzAtMjUuNC0yMC42LTQ1LjktNDUuOS00NS45SDQwOS42Yy0yMyAwLTQxLjYgMTguNi00MS42IDQxLjZ6XCJdXG59O1xudmFyIGZhTGFwdG9wQ29kZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYXB0b3AtY29kZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjVmY1wiLCBcIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NEg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzUySDUxMlY5NkgxMjhWMzUySDY0Vjk2ek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NEg2MjAuOGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4yYzAgNDIuNC0zNC40IDc2LjgtNzYuOCA3Ni44SDc2LjhDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODEgMjA5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0zOTMgMTc1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXVxufTtcbnZhciBmYVN3YXRjaGJvb2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3dhdGNoYm9vaycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjVjM1wiLCBcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEgxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDE2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2VjMyek0yMjMuNiA0MjUuOWMuMy0zLjMgLjQtNi42IC40LTkuOVYxNTRsNzUuNC03NS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDkwLjUgOTAuNWMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0wyMjMuNiA0MjUuOXpNMTgyLjggNTEybDE5Mi0xOTJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxODIuOHpNMTI4IDY0SDY0djY0aDY0VjY0ek02NCAxOTJ2NjRoNjRWMTkySDY0ek05NiA0NDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYVByZXNjcmlwdGlvbkJvdHRsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmVzY3JpcHRpb24tYm90dGxlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNDg1XCIsIFwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwSDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0VjMyem0zMiA5NkgzNTJWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDk2Yy0zNS4zIDAtNjQtMjguNy02NC02NFY0MTZIMTQ0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMyVjMyMEgxNDRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzJWMjI0SDE0NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMlYxMjh6XCJdXG59O1xudmFyIGZhQmFycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXJzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJuYXZpY29uXCJdLCBcImYwYzlcIiwgXCJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnpcIl1cbn07XG52YXIgZmFOYXZpY29uID0gZmFCYXJzO1xudmFyIGZhUGVvcGxlR3JvdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVvcGxlLWdyb3VwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTMzXCIsIFwiTTcyIDg4YTU2IDU2IDAgMSAxIDExMiAwQTU2IDU2IDAgMSAxIDcyIDg4ek02NCAyNDUuN0M1NCAyNTYuOSA0OCAyNzEuOCA0OCAyODhzNiAzMS4xIDE2IDQyLjNWMjQ1Ljd6bTE0NC40LTQ5LjNDMTc4LjcgMjIyLjcgMTYwIDI2MS4yIDE2MCAzMDRjMCAzNC4zIDEyIDY1LjggMzIgOTAuNVY0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4OS4yQzI2LjIgMzcxLjIgMCAzMzIuNyAwIDI4OGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmgzMmMyNCAwIDQ2LjIgNy41IDY0LjQgMjAuM3pNNDQ4IDQxNlYzOTQuNWMyMC0yNC43IDMyLTU2LjIgMzItOTAuNWMwLTQyLjgtMTguNy04MS4zLTQ4LjQtMTA3LjdDNDQ5LjggMTgzLjUgNDcyIDE3NiA0OTYgMTc2aDMyYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyYzAgNDQuNy0yNi4yIDgzLjItNjQgMTAxLjJWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTgtMzI4YTU2IDU2IDAgMSAxIDExMiAwQTU2IDU2IDAgMSAxIDQ1NiA4OHpNNTc2IDI0NS43djg0LjdjMTAtMTEuMyAxNi0yNi4xIDE2LTQyLjNzLTYtMzEuMS0xNi00Mi4zek0zMjAgMzJhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTI0MCAzMDRjMCAxNi4yIDYgMzEgMTYgNDIuM1YyNjEuN2MtMTAgMTEuMy0xNiAyNi4xLTE2IDQyLjN6bTE0NC00Mi4zdjg0LjdjMTAtMTEuMyAxNi0yNi4xIDE2LTQyLjNzLTYtMzEuMS0xNi00Mi4zek00NDggMzA0YzAgNDQuNy0yNi4yIDgzLjItNjQgMTAxLjJWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDA1LjJjLTM3LjgtMTgtNjQtNTYuNS02NC0xMDEuMmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmgzMmM2MS45IDAgMTEyIDUwLjEgMTEyIDExMnpcIl1cbn07XG52YXIgZmFIb3VyZ2xhc3NFbmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91cmdsYXNzLWVuZCcsXG4gIGljb246IFszODQsIDUxMiwgWzg5ODcsIFwiaG91cmdsYXNzLTNcIl0sIFwiZjI1M1wiLCBcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0Vjc1YzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMUwxNDYuNyAyNTYgNzguOSAzMjMuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN3YxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NCAzMjBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWNDM3YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMUwyMzcuMyAyNTZsNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xVjY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMCA2NCAzMnpNOTYgNzVWNjRIMjg4Vjc1YzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45TDE5MiAyMTAuN2wtNjcuOS02Ny45QzEwNi4xIDEyNC45IDk2IDEwMC40IDk2IDc1elwiXVxufTtcbnZhciBmYUhvdXJnbGFzczMgPSBmYUhvdXJnbGFzc0VuZDtcbnZhciBmYUhlYXJ0Q3JhY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY3JhY2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNDgsIFwiaGVhcnQtYnJva2VuXCJdLCBcImY3YTlcIiwgXCJNMTE5LjQgNDQuMWMyMy4zLTMuOSA0Ni44LTEuOSA2OC42IDUuM2w0OS44IDc3LjUtNzUuNCA3NS40Yy0xLjUgMS41LTIuNCAzLjYtMi4zIDUuOHMxIDQuMiAyLjYgNS43bDExMiAxMDRjMi45IDIuNyA3LjQgMi45IDEwLjUgLjNzMy44LTcgMS43LTEwLjRsLTYwLjQtOTguMSA5MC43LTc1LjZjMi42LTIuMSAzLjUtNS43IDIuNC04LjhMMjk2LjggNjEuOGMyOC41LTE2LjcgNjIuNC0yMy4yIDk1LjctMTcuNkM0NjEuNSA1NS42IDUxMiAxMTUuMiA1MTIgMTg1LjF2NS44YzAgNDEuNS0xNy4yIDgxLjItNDcuNiAxMDkuNUwyODMuNyA0NjkuMWMtNy41IDctMTcuNCAxMC45LTI3LjcgMTAuOXMtMjAuMi0zLjktMjcuNy0xMC45TDQ3LjYgMzAwLjRDMTcuMiAyNzIuMSAwIDIzMi40IDAgMTkwLjl2LTUuOGMwLTY5LjkgNTAuNS0xMjkuNSAxMTkuNC0xNDF6XCJdXG59O1xudmFyIGZhSGVhcnRCcm9rZW4gPSBmYUhlYXJ0Q3JhY2s7XG52YXIgZmFTcXVhcmVVcFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS11cC1yaWdodCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg1OTksIFwiZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0XCJdLCBcImYzNjBcIiwgXCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0ek0zMjAgMzEzLjRWMTc2YzAtOC44LTcuMi0xNi0xNi0xNkgxNjYuNmMtMTIuNSAwLTIyLjYgMTAuMS0yMi42IDIyLjZjMCA2IDIuNCAxMS44IDYuNiAxNkwxODQgMjMybC02Ni4zIDY2LjNDMTE0IDMwMiAxMTIgMzA2LjkgMTEyIDMxMnMyIDEwIDUuNyAxMy43bDM2LjcgMzYuN2MzLjYgMy42IDguNSA1LjcgMTMuNyA1LjdzMTAtMiAxMy43LTUuN0wyNDggMjk2bDMzLjQgMzMuNGM0LjIgNC4yIDEwIDYuNiAxNiA2LjZjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjZ6XCJdXG59O1xudmFyIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0ID0gZmFTcXVhcmVVcFJpZ2h0O1xudmFyIGZhRmFjZUtpc3NCZWFtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Uta2lzcy1iZWFtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM3LCBcImtpc3MtYmVhbVwiXSwgXCJmNTk3XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem00OC43LTE5OC4zYzQuMyA1LjEgNy4zIDExLjQgNy4zIDE4LjNzLTMuMSAxMy4yLTcuMyAxOC4zYy00LjMgNS4yLTEwLjEgOS43LTE2LjcgMTMuNGMtMi43IDEuNS01LjcgMy04LjcgNC4zYzMuMSAxLjMgNiAyLjcgOC43IDQuM2M2LjYgMy43IDEyLjUgOC4yIDE2LjcgMTMuNGM0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRDMjc0LjcgNDQzLjEgMjU3LjQgNDQ4IDI0MCA0NDhjLTMuNiAwLTYuOC0yLjUtNy43LTZzLjYtNy4yIDMuOC05bDAgMCAwIDAgMCAwIDAgMCAuMi0uMWMuMi0uMSAuNS0uMyAuOS0uNWMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWMtLjQtLjItLjctLjQtLjktLjVsLS4yLS4xIDAgMCAwIDAgMCAwYy0yLjUtMS40LTQuMS00LjEtNC4xLTdzMS42LTUuNiA0LjEtN2wwIDAgMCAwIDAgMCAwIDAgMCAwIC4yLS4xIC4zLS4yIC42LS40Yy44LS41IDItMS4yIDMuNC0yLjFjMi44LTEuOSA2LjUtNC41IDEwLjItNy42YzMuNy0zLjEgNy4yLTYuNiA5LjYtMTAuMWMyLjUtMy41IDMuNS02LjQgMy41LTguNnMtMS01LTMuNS04LjZjLTIuNS0zLjUtNS45LTYuOS05LjYtMTAuMWMtMy43LTMuMS03LjQtNS43LTEwLjItNy42Yy0xLjQtLjktMi42LTEuNi0zLjQtMi4xbC0uNC0uMy0uNS0uMy0uMi0uMSAwIDAgMCAwIDAgMGMtMy4yLTEuOC00LjctNS41LTMuOC05czQuMS02IDcuNy02YzE3LjQgMCAzNC43IDQuOSA0Ny45IDEyLjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjR6bS04Ny4xLTg0LjlsMCAwIDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMHptMTYwIDBsMCAwLS4yLS4yYy0uMi0uMi0uNC0uNS0uNy0uOWMtLjYtLjgtMS42LTItMi44LTMuNGMtMi41LTIuOC02LTYuNi0xMC4yLTEwLjNjLTguOC03LjgtMTguOC0xNC0yNy43LTE0cy0xOC45IDYuMi0yNy43IDE0Yy00LjIgMy43LTcuNyA3LjUtMTAuMiAxMC4zYy0xLjIgMS40LTIuMiAyLjYtMi44IDMuNGMtLjMgLjQtLjYgLjctLjcgLjlsLS4yIC4yIDAgMCAwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGwwIDAgMCAwIDAgMHpcIl1cbn07XG52YXIgZmFLaXNzQmVhbSA9IGZhRmFjZUtpc3NCZWFtO1xudmFyIGZhRmlsbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTAyXSwgXCJmMDA4XCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6TTQ4IDM2OHYzMmMwIDguOCA3LjIgMTYgMTYgMTZIOTZjOC44IDAgMTYtNy4yIDE2LTE2VjM2OGMwLTguOC03LjItMTYtMTYtMTZINjRjLTguOCAwLTE2IDcuMi0xNiAxNnptMzY4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDQxNnpNNDggMjQwdjMyYzAgOC44IDcuMiAxNiAxNiAxNkg5NmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkg2NGMtOC44IDAtMTYgNy4yLTE2IDE2em0zNjgtMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZINDE2ek00OCAxMTJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2SDk2YzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDY0Yy04LjggMC0xNiA3LjItMTYgMTZ6TTQxNiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkg0MTZ6TTE2MCAxMjh2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYzMjBjMC0xNy43LTE0LjMtMzItMzItMzJIMTkyelwiXVxufTtcbnZhciBmYVJ1bGVySG9yaXpvbnRhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdydWxlci1ob3Jpem9udGFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTQ3XCIsIFwiTTAgMzM2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDU0NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTYwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDMzNnpcIl1cbn07XG52YXIgZmFQZW9wbGVSb2JiZXJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1yb2JiZXJ5JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTM2XCIsIFwiTTQ4OC4yIDU5LjFDNDc4LjEgOTkuNiA0NDEuNyAxMjggNDAwIDEyOHMtNzguMS0yOC40LTg4LjItNjguOUwzMDMgMjQuMkMyOTguOCA3LjEgMjgxLjQtMy4zIDI2NC4yIDFTMjM2LjcgMjIuNiAyNDEgMzkuOGw4LjcgMzQuOWMxMSA0NCA0MC4yIDc5LjYgNzguMyA5OS42VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM1MmgxNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNzQuM2MzOC4xLTIwIDY3LjMtNTUuNiA3OC4zLTk5LjZMNTU5IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzUwMS4yIDcuMSA0OTcgMjQuMmwtOC43IDM0Ljl6TTQwMCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTgwIDk2QTQ4IDQ4IDAgMSAwIDgwIDBhNDggNDggMCAxIDAgMCA5NnptLTggMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0djk2bDAgLjZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUySDg4VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI1Mi43bDEzIDIwLjVjNS45IDkuMiAxNi4xIDE0LjkgMjcgMTQuOWg0OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyMDkuNmwtMzcuNC01OC45QzE1Ny42IDE0MiAxMzIuMSAxMjggMTA0LjcgMTI4SDcyelwiXVxufTtcbnZhciBmYUxpZ2h0YnVsYiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaWdodGJ1bGInLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjFdLCBcImYwZWJcIiwgXCJNMjcyIDM4NGM5LjYtMzEuOSAyOS41LTU5LjEgNDkuMi04Ni4ybDAgMGM1LjItNy4xIDEwLjQtMTQuMiAxNS40LTIxLjRjMTkuOC0yOC41IDMxLjQtNjMgMzEuNC0xMDAuM0MzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgMzcuMyAxMS42IDcxLjkgMzEuNCAxMDAuM2M1IDcuMiAxMC4yIDE0LjMgMTUuNCAyMS40bDAgMGMxOS44IDI3LjEgMzkuNyA1NC40IDQ5LjIgODYuMkgyNzJ6TTE5MiA1MTJjNDQuMiAwIDgwLTM1LjggODAtODBWNDE2SDExMnYxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHpNMTEyIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmMtNDQuMiAwLTgwIDM1LjgtODAgODB6XCJdXG59O1xudmFyIGZhQ2FyZXRMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcmV0LWxlZnQnLFxuICBpY29uOiBbMjU2LCA1MTIsIFtdLCBcImYwZDlcIiwgXCJNOS40IDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45czE5LjggMTYuNiAxOS44IDI5LjZsMCAyNTZjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTEyOC0xMjh6XCJdXG59O1xudmFyIGZhQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleGNsYW1hdGlvbi1jaXJjbGVcIl0sIFwiZjA2YVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0zODRjMTMuMyAwIDI0IDEwLjcgMjQgMjRWMjY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjI0IDM1MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbnZhciBmYUV4Y2xhbWF0aW9uQ2lyY2xlID0gZmFDaXJjbGVFeGNsYW1hdGlvbjtcbnZhciBmYVNjaG9vbENpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjaG9vbC1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NmRcIiwgXCJNMzM3LjggNS40QzMyNy0xLjggMzEzLTEuOCAzMDIuMiA1LjRMMTY2LjMgOTZINDhDMjEuNSA5NiAwIDExNy41IDAgMTQ0VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMjB2MEgyNTZWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bC4zIDBoLjVjMy40LTM3LjcgMTguNy03Mi4xIDQyLjItOTkuMUMzNTAuMiAyNjAgMzM1LjYgMjY0IDMyMCAyNjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4czM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDE4LjMtNS42IDM1LjMtMTUuMSA0OS40YzI5LTIxIDY0LjYtMzMuNCAxMDMuMS0zMy40YzU5LjUgMCAxMTIuMSAyOS42IDE0NCA3NC44VjE0NGMwLTI2LjUtMjEuNS00OC00OC00OEg0NzMuN0wzMzcuOCA1LjR6TTk2IDE5MmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMjA4YzAtOC44IDcuMi0xNiAxNi0xNnptMCAxMjhoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6TTMyMCAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzM2VjE0NGMwLTguOC03LjItMTYtMTYtMTZ6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDUxOC42IDM2OHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctcmlnaHQtZnJvbS1icmFja2V0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzaWduLW91dFwiXSwgXCJmMDhiXCIsIFwiTTUwMi42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyMjQgMTkyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMTAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4ek0xNjAgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMzJDNDMgMzIgMCA3NSAwIDEyOEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6XCJdXG59O1xudmFyIGZhU2lnbk91dCA9IGZhQXJyb3dSaWdodEZyb21CcmFja2V0O1xudmFyIGZhQ2lyY2xlQ2hldnJvbkRvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZXZyb24tZG93bicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY2hldnJvbi1jaXJjbGUtZG93blwiXSwgXCJmMTNhXCIsIFwiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMHpNMTM1IDI0MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDg3IDg3IDg3LTg3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUwyNzMgMzQ1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxMzUgMjQxelwiXVxufTtcbnZhciBmYUNoZXZyb25DaXJjbGVEb3duID0gZmFDaXJjbGVDaGV2cm9uRG93bjtcbnZhciBmYVVubG9ja0tleWhvbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndW5sb2NrLWtleWhvbGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInVubG9jay1hbHRcIl0sIFwiZjEzZVwiLCBcIk0yMjQgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwdjQ4SDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI1NmMwLTM1LjMgMjguNy02NCA2NC02NEg4MFYxNDRDODAgNjQuNSAxNDQuNSAwIDIyNCAwYzU3LjUgMCAxMDcgMzMuNyAxMzAuMSA4Mi4zYzcuNiAxNiAuOCAzNS4xLTE1LjIgNDIuNnMtMzUuMSAuOC00Mi42LTE1LjJDMjgzLjQgODIuNiAyNTUuOSA2NCAyMjQgNjR6bTMyIDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNjR6XCJdXG59O1xudmFyIGZhVW5sb2NrQWx0ID0gZmFVbmxvY2tLZXlob2xlO1xudmFyIGZhQ2xvdWRTaG93ZXJzSGVhdnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtc2hvd2Vycy1oZWF2eScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjc0MFwiLCBcIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTZjMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjJDNjQuNyAxMjYuMSA2NCAxMTkuMSA2NCAxMTJDNjQgNTAuMSAxMTQuMSAwIDE3NiAwYzQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MGMxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgNS41LS42IDEwLjgtMS42IDE2Yy41IDAgMS4xIDAgMS42IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZIOTZ6TTgxLjUgMzUzLjljMTIuMiA1LjIgMTcuOCAxOS4zIDEyLjYgMzEuNWwtNDggMTEyYy01LjIgMTIuMi0xOS4zIDE3LjgtMzEuNSAxMi42Uy0zLjMgNDkwLjcgMS45IDQ3OC41bDQ4LTExMmM1LjItMTIuMiAxOS4zLTE3LjggMzEuNS0xMi42em0xMjAgMGMxMi4yIDUuMiAxNy44IDE5LjMgMTIuNiAzMS41bC00OCAxMTJjLTUuMiAxMi4yLTE5LjMgMTcuOC0zMS41IDEyLjZzLTE3LjgtMTkuMy0xMi42LTMxLjVsNDgtMTEyYzUuMi0xMi4yIDE5LjMtMTcuOCAzMS41LTEyLjZ6bTI0NC42IDMxLjVsLTQ4IDExMmMtNS4yIDEyLjItMTkuMyAxNy44LTMxLjUgMTIuNnMtMTcuOC0xOS4zLTEyLjYtMzEuNWw0OC0xMTJjNS4yLTEyLjIgMTkuMy0xNy44IDMxLjUtMTIuNnMxNy44IDE5LjMgMTIuNiAzMS41ek0zMTMuNSAzNTMuOWMxMi4yIDUuMiAxNy44IDE5LjMgMTIuNiAzMS41bC00OCAxMTJjLTUuMiAxMi4yLTE5LjMgMTcuOC0zMS41IDEyLjZzLTE3LjgtMTkuMy0xMi42LTMxLjVsNDgtMTEyYzUuMi0xMi4yIDE5LjMtMTcuOCAzMS41LTEyLjZ6XCJdXG59O1xudmFyIGZhSGVhZHBob25lc1NpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkcGhvbmVzLXNpbXBsZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaGVhZHBob25lcy1hbHRcIl0sIFwiZjU4ZlwiLCBcIk0yNTYgODBDMTQxLjEgODAgNDggMTczLjEgNDggMjg4VjM5MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODhDMCAxNDYuNiAxMTQuNiAzMiAyNTYgMzJzMjU2IDExNC42IDI1NiAyNTZWMzkyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjI4OGMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDh6TTgwIDM1MmMwLTM1LjMgMjguNy02NCA2NC02NGgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzNTJ6bTI4OC02NGMzNS4zIDAgNjQgMjguNyA2NCA2NHY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmgxNnpcIl1cbn07XG52YXIgZmFIZWFkcGhvbmVzQWx0ID0gZmFIZWFkcGhvbmVzU2ltcGxlO1xudmFyIGZhU2l0ZW1hcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaXRlbWFwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMGU4XCIsIFwiTTIwOCA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg2NGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGgtOHY0MEg0NjRjMzAuOSAwIDU2IDI1LjEgNTYgNTZ2MzJoOGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0NjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM2OGMwLTI2LjUgMjEuNS00OCA0OC00OGg4VjI4OGMwLTQuNC0zLjYtOC04LThIMzEydjQwaDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhIMjU2Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzNjhjMC0yNi41IDIxLjUtNDggNDgtNDhoOFYyODBIMTEyYy00LjQgMC04IDMuNi04IDh2MzJoOGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzY4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDhWMjg4YzAtMzAuOSAyNS4xLTU2IDU2LTU2SDI2NFYxOTJoLThjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwelwiXVxufTtcbnZhciBmYUNpcmNsZURvbGxhclRvU2xvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtZG9sbGFyLXRvLXNsb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImRvbmF0ZVwiXSwgXCJmNGI5XCIsIFwiTTMyNi43IDQwMy43Yy0yMi4xIDgtNDUuOSAxMi4zLTcwLjcgMTIuM3MtNDguNy00LjQtNzAuNy0xMi4zYy0uMy0uMS0uNS0uMi0uOC0uM2MtMzAtMTEtNTYuOC0yOC43LTc4LjYtNTEuNEM3MCAzMTQuNiA0OCAyNjMuOSA0OCAyMDhDNDggOTMuMSAxNDEuMSAwIDI1NiAwUzQ2NCA5My4xIDQ2NCAyMDhjMCA1NS45LTIyIDEwNi42LTU3LjkgMTQ0Yy0xIDEtMiAyLjEtMyAzLjFjLTIxLjQgMjEuNC00Ny40IDM4LjEtNzYuMyA0OC42ek0yNTYgODRjLTExIDAtMjAgOS0yMCAyMHYxNGMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjMxMmMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFYyOTguMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjEwNGMwLTExLTktMjAtMjAtMjB6TTQ4IDM1Mkg2NGMxOS41IDI1LjkgNDQgNDcuNyA3Mi4yIDY0SDY0djMySDI1NiA0NDhWNDE2SDM3NS44YzI4LjItMTYuMyA1Mi44LTM4LjEgNzIuMi02NGgxNmMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbnZhciBmYURvbmF0ZSA9IGZhQ2lyY2xlRG9sbGFyVG9TbG90O1xudmFyIGZhTWVtb3J5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21lbW9yeScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjUzOFwiLCBcIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOHY3LjRjMCA2LjggNC40IDEyLjYgMTAuMSAxNi4zQzIzLjMgMTYwLjMgMzIgMTc1LjEgMzIgMTkycy04LjcgMzEuNy0yMS45IDQwLjNDNC40IDIzNiAwIDI0MS44IDAgMjQ4LjZWMzIwSDU3NlYyNDguNmMwLTYuOC00LjQtMTIuNi0xMC4xLTE2LjNDNTUyLjcgMjIzLjcgNTQ0IDIwOC45IDU0NCAxOTJzOC43LTMxLjcgMjEuOS00MC4zYzUuNy0zLjcgMTAuMS05LjUgMTAuMS0xNi4zVjEyOGMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNNTc2IDM1MkgwdjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDgwVjQxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMyaDk2VjQxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMyaDk2VjQxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMyaDk2VjQxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djMyaDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM1MnpNMTkyIDE2MHY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDB2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwdjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYVJvYWRTcGlrZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1zcGlrZXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NjhcIiwgXCJNNjQgMTE2LjhjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlMMTkyIDI1NlYxMTYuOGMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUwzMjAgMjU2VjExNi44YzAtMTUuOCAyMC41LTIyIDI5LjMtOC45TDQ0OCAyNTZWMTE2LjhjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlMNjA2LjggMzAyLjJjMTQuMiAyMS4zLTEuMSA0OS43LTI2LjYgNDkuN0g1MTIgNDQ4IDM4NCAzMjAgMjU2IDE5MiA2NFYxMTYuOHpNMzIgMzg0SDYwOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFGaXJlQnVybmVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpcmUtYnVybmVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGYxXCIsIFwiTTM0NS43IDQ4LjNMMzU4IDM0LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOWM3LjIgMCAxNC4zIDIuNiAxOS45IDcuOGMxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjZDNDY5IDEzMS4yIDQ4MCAxNjIuMiA0ODAgMTkyLjJDNDgwIDI4MC44IDQwOC43IDM1MiAzMjAgMzUyYy04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44YzAtMzcuMyAxNi03My40IDM2LjgtMTA0LjVjMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4yQzI3My40IDIuMyAyODAuNy0uMiAyODggMGMxNC4xIC4zIDIzLjggMTEuNCAzMi43IDIxLjZjMCAwIDAgMCAwIDBjMiAyLjMgNCA0LjYgNiA2LjdsMTkgMTkuOXpNMzg0IDI0MC4yYzAtMzYuNS0zNy03My01NC44LTg4LjRjLTUuNC00LjctMTMuMS00LjctMTguNSAwQzI5MyAxNjcuMSAyNTYgMjAzLjYgMjU2IDI0MC4yYzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTMyIDI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNjQgNDQ4IDAgMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMC05NnpNMzIwIDQ4MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE2MC0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xOTIgNDgwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG52YXIgZmFGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZsYWcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5ODgsIDYxNzI1XSwgXCJmMDI0XCIsIFwiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJWNjQgMzY4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM1Mmw2NC4zLTE2LjFjNDEuMS0xMC4zIDg0LjYtNS41IDEyMi41IDEzLjRjNDQuMiAyMi4xIDk1LjUgMjQuOCAxNDEuNyA3LjRsMzQuNy0xM2MxMi41LTQuNyAyMC44LTE2LjYgMjAuOC0zMFY2Ni4xYzAtMjMtMjQuMi0zOC00NC44LTI3LjdsLTkuNiA0LjhjLTQ2LjMgMjMuMi0xMDAuOCAyMy4yLTE0Ny4xIDBjLTM1LjEtMTcuNi03NS40LTIyLTExMy41LTEyLjVMNjQgNDhWMzJ6XCJdXG59O1xudmFyIGZhSGFudWtpYWggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFudWtpYWgnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzRdLCBcImY2ZTZcIiwgXCJNMzE0LjIgMy4zQzMwOS4xIDEyLjEgMjk2IDM2LjYgMjk2IDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdDMzI0LjYgMS4yIDMyMi40IDAgMzIwIDBzLTQuNiAxLjItNS44IDMuM3ptLTI4OCA0OEMyMS4xIDYwLjEgOCA4NC42IDggMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdDMzYuNiA0OS4yIDM0LjQgNDggMzIgNDhzLTQuNiAxLjItNS44IDMuM3pNODggMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMTAxLjEgNjAuMSA4OCA4NC42IDg4IDEwNHptODIuMi01Mi43QzE2NS4xIDYwLjEgMTUyIDg0LjYgMTUyIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek0yMTYgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMjI5LjEgNjAuMSAyMTYgODQuNiAyMTYgMTA0ek0zOTQuMiA1MS4zQzM4OS4xIDYwLjEgMzc2IDg0LjYgMzc2IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek00NDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDNDUzLjEgNjAuMSA0NDAgODQuNiA0NDAgMTA0em04Mi4yLTUyLjdDNTE3LjEgNjAuMSA1MDQgODQuNiA1MDQgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTU4NCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN2MtMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M1OTcuMSA2MC4xIDU4NCA4NC42IDU4NCAxMDR6TTExMiAxNjBjLTguOCAwLTE2IDcuMi0xNiAxNnY5NiAxNmgzMlYyNzIgMTc2YzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2djk2IDE2aDMyVjI3MiAxNzZjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZ2OTYgMTZoMzJWMjcyIDE3NmMwLTguOC03LjItMTYtMTYtMTZ6bTE2MCAwYy04LjggMC0xNiA3LjItMTYgMTZ2OTYgMTZoMzJWMjcyIDE3NmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnY5NiAxNmgzMlYyNzIgMTc2YzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2djk2IDE2aDMyVjI3MiAxNzZjMC04LjgtNy4yLTE2LTE2LTE2ek0zNTIgMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjMyMEg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjk2YzAgNTMgNDMgOTYgOTYgOTZIMjg4djY0SDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzMjAgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM1MlYzODRINTQ0YzUzIDAgOTYtNDMgOTYtOTZWMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDM1MlYxNDR6XCJdXG59O1xudmFyIGZhRmVhdGhlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmZWF0aGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NzE4XSwgXCJmNTJkXCIsIFwiTTI3OC41IDIxNS42TDIzIDQ3MWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU3LTU3aDY4YzQ5LjcgMCA5Ny45LTE0LjQgMTM5LTQxYzExLjEtNy4yIDUuNS0yMy03LjgtMjNjLTUuMSAwLTkuMi00LjEtOS4yLTkuMmMwLTQuMSAyLjctNy42IDYuNS04LjhsODEtMjQuM2MyLjUtLjggNC44LTIuMSA2LjctNGwyMi40LTIyLjRjMTAuMS0xMC4xIDIuOS0yNy4zLTExLjMtMjcuM2wtMzIuMiAwYy01LjEgMC05LjItNC4xLTkuMi05LjJjMC00LjEgMi43LTcuNiA2LjUtOC44bDExMi0zMy42YzQtMS4yIDcuNC0zLjkgOS4zLTcuN0M1MDYuNCAyMDcuNiA1MTIgMTg0LjEgNTEyIDE2MGMwLTQxLTE2LjMtODAuMy00NS4zLTEwOS4zbC01LjUtNS41QzQzMi4zIDE2LjMgMzkzIDAgMzUyIDBzLTgwLjMgMTYuMy0xMDkuMyA0NS4zTDEzOSAxNDlDOTEgMTk3IDY0IDI2Mi4xIDY0IDMzMHY1NS4zTDI1My42IDE5NS44YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwYzUuNCA1LjQgNi4xIDEzLjYgMi4yIDE5Ljh6XCJdXG59O1xudmFyIGZhVm9sdW1lTG93ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbHVtZS1sb3cnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNjQsIFwidm9sdW1lLWRvd25cIl0sIFwiZjAyN1wiLCBcIk0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NFY0NDhjMCAxMi42LTcuNCAyNC0xOC45IDI5LjJzLTI1IDMuMS0zNC40LTUuM0wxMzEuOCAzNTJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjIyNGMwLTM1LjMgMjguNy02NCA2NC02NGg2Ny44TDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6TTQxMi42IDE4MS41QzQzNC4xIDE5OS4xIDQ0OCAyMjUuOSA0NDggMjU2cy0xMy45IDU2LjktMzUuNCA3NC41Yy0xMC4zIDguNC0yNS40IDYuOC0zMy44LTMuNXMtNi44LTI1LjQgMy41LTMzLjhDMzkzLjEgMjg0LjQgNDAwIDI3MSA0MDAgMjU2cy02LjktMjguNC0xNy43LTM3LjNjLTEwLjMtOC40LTExLjgtMjMuNS0zLjUtMzMuOHMyMy41LTExLjggMzMuOC0zLjV6XCJdXG59O1xudmFyIGZhVm9sdW1lRG93biA9IGZhVm9sdW1lTG93O1xudmFyIGZhQ29tbWVudFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbW1lbnQtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0YjNcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w1MTIuOSAzNzYuN0M1NTIuMiAzNDAuMiA1NzYgMjkyLjMgNTc2IDI0MEM1NzYgMTI1LjEgNDYxLjQgMzIgMzIwIDMyYy02Ny43IDAtMTI5LjMgMjEuNC0xNzUuMSA1Ni4zTDM4LjggNS4xem0zODUuMiA0MjVMODIuOSAxNjEuM0M3MC43IDE4NS42IDY0IDIxMi4yIDY0IDI0MGMwIDQ1LjEgMTcuNyA4Ni44IDQ3LjcgMTIwLjljLTEuOSAyNC41LTExLjQgNDYuMy0yMS40IDYyLjljLTUuNSA5LjItMTEuMSAxNi42LTE1LjIgMjEuNmMtMi4xIDIuNS0zLjcgNC40LTQuOSA1LjdjLS42IC42LTEgMS4xLTEuMyAxLjRsLS4zIC4zIDAgMCAwIDAgMCAwIDAgMGMtNC42IDQuNi01LjkgMTEuNC0zLjQgMTcuNGMyLjUgNiA4LjMgOS45IDE0LjggOS45YzI4LjcgMCA1Ny42LTguOSA4MS42LTE5LjNjMjIuOS0xMCA0Mi40LTIxLjkgNTQuMy0zMC42YzMxLjggMTEuNSA2NyAxNy45IDEwNC4xIDE3LjljMzcgMCA3Mi4zLTYuNCAxMDQuMS0xNy45elwiXVxufTtcbnZhciBmYUNsb3VkU3VuUmFpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1zdW4tcmFpbicsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyNzc4Ml0sIFwiZjc0M1wiLCBcIk0yOTQuMiAxLjJjNS4xIDIuMSA4LjcgNi43IDkuNiAxMi4xbDEwLjQgNjIuNGMtMjMuMyAxMC44LTQyLjkgMjguNC01NiA1MC4zYy0xNC42LTktMzEuOC0xNC4xLTUwLjItMTQuMWMtNTMgMC05NiA0My05NiA5NmMwIDM1LjUgMTkuMyA2Ni42IDQ4IDgzLjJjLjggMzEuOCAxMy4yIDYwLjcgMzMuMSA4Mi43bC01NiAzOS4yYy00LjUgMy4yLTEwLjMgMy44LTE1LjQgMS42cy04LjctNi43LTkuNi0xMi4xTDk4LjEgMzE3LjkgMTMuNCAzMDMuOGMtNS40LS45LTEwLTQuNS0xMi4xLTkuNnMtMS41LTEwLjkgMS42LTE1LjRMNTIuNSAyMDggMi45IDEzNy4yYy0zLjItNC41LTMuOC0xMC4zLTEuNi0xNS40czYuNy04LjcgMTIuMS05LjZMOTguMSA5OC4xbDE0LjEtODQuN2MuOS01LjQgNC41LTEwIDkuNi0xMi4xczEwLjktMS41IDE1LjQgMS42TDIwOCA1Mi41IDI3OC44IDIuOWM0LjUtMy4yIDEwLjMtMy44IDE1LjQtMS42ek0yMDggMTQ0YzEzLjggMCAyNi43IDQuNCAzNy4xIDExLjljLTEuMiA0LjEtMi4yIDguMy0zIDEyLjZjLTM3LjkgMTQuNi02Ny4yIDQ2LjYtNzcuOCA4Ni40QzE1MS44IDI0My4xIDE0NCAyMjYuNSAxNDQgMjA4YzAtMzUuMyAyOC43LTY0IDY0LTY0em02OS40IDI3NmMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43em05NiAwYzExIDcuNCAxNCAyMi4zIDYuNyAzMy4zbC0zMiA0OGMtNy40IDExLTIyLjMgMTQtMzMuMyA2LjdzLTE0LTIyLjMtNi43LTMzLjNsMzItNDhjNy40LTExIDIyLjMtMTQgMzMuMy02Ljd6bTk2IDBjMTEgNy40IDE0IDIyLjMgNi43IDMzLjNsLTMyIDQ4Yy03LjQgMTEtMjIuMyAxNC0zMy4zIDYuN3MtMTQtMjIuMy02LjctMzMuM2wzMi00OGM3LjQtMTEgMjIuMy0xNCAzMy4zLTYuN3ptOTYgMGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43em03NC41LTExNi4xYzAgNDQuMi0zNS44IDgwLTgwIDgwSDI4OGMtNTMgMC05Ni00My05Ni05NmMwLTQ3LjYgMzQuNi04NyA4MC05NC42bDAtMS4zYzAtNTMgNDMtOTYgOTYtOTZjMzQuOSAwIDY1LjQgMTguNiA4Mi4yIDQ2LjRjMTMtOS4xIDI4LjgtMTQuNCA0NS44LTE0LjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA1LjktLjYgMTEuNy0xLjkgMTcuMmMzNy40IDYuNyA2NS44IDM5LjQgNjUuOCA3OC43elwiXVxufTtcbnZhciBmYUNvbXByZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbXByZXNzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDY2XCIsIFwiTTE2MCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMlY2NHpNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzUyVjY0ek0zMjAgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM4NGg2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6XCJdXG59O1xudmFyIGZhV2hlYXRBd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2hlYXQtYXduJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ3aGVhdC1hbHRcIl0sIFwiZTJjZFwiLCBcIk01MDUgNDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzODMgOTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4OC04OHpNMzA1LjUgMjcuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjcxLjUgMzguNmMtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNC0zMC41IDMwLjVjLTMuNC0yNy4zLTE1LjUtNTMuOC0zNi41LTc0LjhsLTExLjMtMTEuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTExLjMgMTEuM2MtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNC0zMC41IDMwLjVjLTMuNC0yNy4zLTE1LjUtNTMuOC0zNi41LTc0LjhMMTAxLjggMjMxYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEw2Ny45IDI0Mi4zYy0zNy41IDM3LjUtMzcuNSA5OC4zIDAgMTM1LjhsMTAuNCAxMC40TDkuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC45LTY4LjkgMTIuMiAxMi4yYzM3LjUgMzcuNSA5OC4zIDM3LjUgMTM1LjggMGwxMS4zLTExLjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTExLjMtMTEuM2MtMjEuOC0yMS44LTQ5LjYtMzQuMS03OC4xLTM2LjlsMzEuOS0zMS45IDEyLjIgMTIuMmMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBsMTEuMy0xMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMS4zLTExLjNjLTIxLjgtMjEuOC00OS42LTM0LjEtNzguMS0zNi45bDMxLjktMzEuOSAxMi4yIDEyLjJjMzcuNSAzNy41IDk4LjMgMzcuNSAxMzUuOCAwTDQ4Ni41IDIzMWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNkw0NzUuMiAxOTdjLTUuMi01LjItMTAuNi05LjgtMTYuNC0xMy45TDUwNSAxMzdjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTkuNCA1OS40Yy0yMC42LTQuNC00Mi0zLjctNjIuMyAyLjFjNi4xLTIxLjMgNi42LTQzLjggMS40LTY1LjNMNDA5IDQxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzI5LjEgNTIuOWMtMy43LTUtNy44LTkuOC0xMi40LTE0LjNMMzA1LjUgMjcuM3pcIl1cbn07XG52YXIgZmFXaGVhdEFsdCA9IGZhV2hlYXRBd247XG52YXIgZmFBbmtoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fua2gnLFxuICBpY29uOiBbMzIwLCA1MTIsIFs5NzY1XSwgXCJmNjQ0XCIsIFwiTTk2IDEyOGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0YzAgNDEuNi0yMC43IDc2LjYtNDYuNiAxMDQuMWMtNS45IDYuMi0xMS44IDExLjgtMTcuNCAxNi43Yy01LjYtNC45LTExLjUtMTAuNS0xNy40LTE2LjdDMTE2LjcgMjA0LjYgOTYgMTY5LjYgOTYgMTI4ek0xNjAgMEM4OS4zIDAgMzIgNTcuMyAzMiAxMjhjMCA1Mi40IDIxLjUgOTUuNSA0Ni44IDEyOEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjBoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjQxLjJjMjUuNC0zMi41IDQ2LjgtNzUuNiA0Ni44LTEyOEMyODggNTcuMyAyMzAuNyAwIDE2MCAwelwiXVxufTtcbnZhciBmYUhhbmRzSG9sZGluZ0NoaWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWhvbGRpbmctY2hpbGQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZmFcIiwgXCJNMzIwIDBhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem00NC43IDE2NC4zTDM3NS44IDI1M2MxLjYgMTMuMi03LjcgMjUuMS0yMC44IDI2LjhzLTI1LjEtNy43LTI2LjgtMjAuOGwtNC40LTM1aC03LjZsLTQuNCAzNWMtMS42IDEzLjItMTMuNiAyMi41LTI2LjggMjAuOHMtMjIuNS0xMy42LTIwLjgtMjYuOGwxMS4xLTg4LjhMMjU1LjUgMTgxYy0xMC4xIDguNi0yNS4zIDcuMy0zMy44LTIuOHMtNy4zLTI1LjMgMi44LTMzLjhsMjcuOS0yMy42QzI3MS4zIDEwNC44IDI5NS4zIDk2IDMyMCA5NnM0OC43IDguOCA2Ny42IDI0LjdsMjcuOSAyMy42YzEwLjEgOC42IDExLjQgMjMuNyAyLjggMzMuOHMtMjMuNyAxMS40LTMzLjggMi44bC0xOS44LTE2Ljd6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwdjQwIDgwIDQwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xYzEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOGwtMTUuMi0xNS4yLTMyLTMyYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDMyIDMyIDE1LjIgMTUuMiAwIDAgMjUuMyAyNS4zYzIxIDIxIDMyLjggNDkuNSAzMi44IDc5LjJWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDE3My4zYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wyOC4xIDM5My40QzEwLjEgMzc1LjQgMCAzNTEgMCAzMjUuNVYyMjQgMTYwIDEwNEMwIDgxLjkgMTcuOSA2NCA0MCA2NHptNTYwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDB2NTYgNjRWMzI1LjVjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlMNTEyIDQ5My4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43SDQwMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzg1LjFjMC0yOS43IDExLjgtNTguMiAzMi44LTc5LjJsMjUuMy0yNS4zIDAgMCAxNS4yLTE1LjIgMzItMzJjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMzIgMzItMTUuMiAxNS4yYy0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOGM5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM1YyMjQgMTQ0IDEwNGMwLTIyLjEgMTcuOS00MCA0MC00MHpcIl1cbn07XG52YXIgZmFBc3RlcmlzayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhc3RlcmlzaycsXG4gIGljb246IFszODQsIDUxMiwgWzEwMDMzLCA2MTU0NV0sIFwiMmFcIiwgXCJNMTkyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjE5OS41bDExMS41LTY2LjljMTUuMi05LjEgMzQuOC00LjIgNDMuOSAxMXM0LjIgMzQuOC0xMSA0My45TDI1NC4yIDI1NmwxMTQuMyA2OC42YzE1LjIgOS4xIDIwLjEgMjguNyAxMSA0My45cy0yOC43IDIwLjEtNDMuOSAxMUwyMjQgMzEyLjVWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMxMi41TDQ4LjUgMzc5LjRjLTE1LjIgOS4xLTM0LjggNC4yLTQzLjktMTFzLTQuMi0zNC44IDExLTQzLjlMMTI5LjggMjU2IDE1LjUgMTg3LjRjLTE1LjItOS4xLTIwLjEtMjguNy0xMS00My45czI4LjctMjAuMSA0My45LTExTDE2MCAxOTkuNVY2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFTcXVhcmVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtY2hlY2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5NzQ1LCA5OTg5LCA2MTUxMCwgXCJjaGVjay1zcXVhcmVcIl0sIFwiZjE0YVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTMzNyAyMDlMMjA5IDMzN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDcgNDdMMzAzIDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6XCJdXG59O1xudmFyIGZhQ2hlY2tTcXVhcmUgPSBmYVNxdWFyZUNoZWNrO1xudmFyIGZhUGVzZXRhU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXNldGEtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTIyMVwiLCBcIk02NCAzMkM0Ni4zIDMyIDMyIDQ2LjMgMzIgNjR2OTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA5NlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNTJoOTZjNzcuNCAwIDE0Mi01NSAxNTYuOC0xMjhIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyaC0zLjJDMzM0IDg3IDI2OS40IDMyIDE5MiAzMkg2NHpNMjgyLjUgMTYwSDk2Vjk2aDk2YzQxLjggMCA3Ny40IDI2LjcgOTAuNSA2NHpNOTYgMjI0SDI4Mi41Yy0xMy4yIDM3LjMtNDguNyA2NC05MC41IDY0SDk2VjIyNHpcIl1cbn07XG52YXIgZmFIZWFkaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWRpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImhlYWRlclwiXSwgXCJmMWRjXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIODBoNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTEyVjIwOEgzMzZWOTZIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDQ4IDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDQwMFYyNDAgNDE2aDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM2OCAzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMTZWMjcySDExMlY0MTZoMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODAgMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDhWMjQwIDk2SDMyQzE0LjMgOTYgMCA4MS43IDAgNjR6XCJdXG59O1xudmFyIGZhSGVhZGVyID0gZmFIZWFkaW5nO1xudmFyIGZhR2hvc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2hvc3QnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxMjNdLCBcImY2ZTJcIiwgXCJNNDAuMSA0NjcuMWwtMTEuMiA5Yy0zLjIgMi41LTcuMSAzLjktMTEuMSAzLjlDOCA0ODAgMCA0NzIgMCA0NjIuMlYxOTJDMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyVjQ2Mi4yYzAgOS44LTggMTcuOC0xNy44IDE3LjhjLTQgMC03LjktMS40LTExLjEtMy45bC0xMS4yLTljLTEzLjQtMTAuNy0zMi44LTktNDQuMSAzLjlMMjY5LjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZsLTI2LjYtMzAuNWMtMTIuNy0xNC42LTM1LjQtMTQuNi00OC4yIDBMMTQxLjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZMODQuMiA0NzFjLTExLjMtMTIuOS0zMC43LTE0LjYtNDQuMS0zLjl6TTE2MCAxOTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYUxpc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGlzdC1zcXVhcmVzXCJdLCBcImYwM2FcIiwgXCJNNDAgNDhDMjYuNyA0OCAxNiA1OC43IDE2IDcydjQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0SDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjcyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDQwek0xOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnpNMTYgMjMydjQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0SDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjIzMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEg0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTQwIDM2OGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRIODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzkyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDQwelwiXVxufTtcbnZhciBmYUxpc3RTcXVhcmVzID0gZmFMaXN0O1xudmFyIGZhU3F1YXJlUGhvbmVGbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1waG9uZS1mbGlwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJwaG9uZS1zcXVhcmUtYWx0XCJdLCBcImY4N2JcIiwgXCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0em0tOTAuNyA5Ni43Yy05LjctMi42LTE5LjkgMi4zLTIzLjcgMTEuNmwtMjAgNDhjLTMuNCA4LjItMSAxNy42IDUuOCAyMy4yTDI4MCAyMzEuN2MtMTYuNiAzNS4yLTQ1LjEgNjMuNy04MC4zIDgwLjNsLTIwLjItMjQuN2MtNS42LTYuOC0xNS05LjItMjMuMi01LjhsLTQ4IDIwYy05LjMgMy45LTE0LjIgMTQtMTEuNiAyMy43bDEyIDQ0QzExMS4xIDM3OCAxMTkgMzg0IDEyOCAzODRjMTIzLjcgMCAyMjQtMTAwLjMgMjI0LTIyNGMwLTktNi0xNi45LTE0LjctMTkuM2wtNDQtMTJ6XCJdXG59O1xudmFyIGZhUGhvbmVTcXVhcmVBbHQgPSBmYVNxdWFyZVBob25lRmxpcDtcbnZhciBmYUNhcnRQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcnQtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjIxN1wiLCBcIk0wIDI0QzAgMTAuNyAxMC43IDAgMjQgMEg2OS41YzIyIDAgNDEuNSAxMi44IDUwLjYgMzJoNDExYzI2LjMgMCA0NS41IDI1IDM4LjYgNTAuNGwtNDEgMTUyLjNjLTguNSAzMS40LTM3IDUzLjMtNjkuNSA1My4zSDE3MC43bDUuNCAyOC41YzIuMiAxMS4zIDEyLjEgMTkuNSAyMy42IDE5LjVINDg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE5OS43Yy0zNC42IDAtNjQuMy0yNC42LTcwLjctNTguNUw3Ny40IDU0LjVjLS43LTMuOC00LTYuNS03LjktNi41SDI0QzEwLjcgNDggMCAzNy4zIDAgMjR6TTEyOCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMzM2LTQ4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMjUyIDE2MGMwIDExIDkgMjAgMjAgMjBoNDR2NDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWMTgwaDQ0YzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMEgzNTZWOTZjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwdjQ0SDI3MmMtMTEgMC0yMCA5LTIwIDIwelwiXVxufTtcbnZhciBmYUdhbWVwYWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2FtZXBhZCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjExYlwiLCBcIk0xOTIgNjRDODYgNjQgMCAxNTAgMCAyNTZTODYgNDQ4IDE5MiA0NDhINDQ4YzEwNiAwIDE5Mi04NiAxOTItMTkycy04Ni0xOTItMTkyLTE5MkgxOTJ6TTQ5NiAxNjhhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwek0zOTIgMzA0YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTE2OCAyMDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHYzMmgzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMTZ2MzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjgwSDEzNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGgzMlYyMDB6XCJdXG59O1xudmFyIGZhQ2lyY2xlRG90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1kb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyODAsIFwiZG90LWNpcmNsZVwiXSwgXCJmMTkyXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTM1MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG52YXIgZmFEb3RDaXJjbGUgPSBmYUNpcmNsZURvdDtcbnZhciBmYUZhY2VEaXp6eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWRpenp5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJkaXp6eVwiXSwgXCJmNTY3XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTIyNGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMTAwLjcgMTMyLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBMMTYwIDE2OS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMMTgyLjYgMTkybDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDE2MCAyMTQuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDEzNy40IDE5MmwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnptMTkyIDBjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBMMzUyIDE2OS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMMzc0LjYgMTkybDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDM1MiAyMTQuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDMyOS40IDE5MmwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG52YXIgZmFEaXp6eSA9IGZhRmFjZURpenp5O1xudmFyIGZhRWdnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VnZycsXG4gIGljb246IFszODQsIDUxMiwgWzEyOTM3MF0sIFwiZjdmYlwiLCBcIk0xOTIgNDk2Qzg2IDQ5NiAwIDM5NCAwIDI4OEMwIDE3NiA2NCAxNiAxOTIgMTZzMTkyIDE2MCAxOTIgMjcyYzAgMTA2LTg2IDIwOC0xOTIgMjA4ek0xNTQuOCAxMzRjNi41LTYgNy0xNi4xIDEtMjIuNnMtMTYuMS03LTIyLjYtMWMtMjMuOSAyMS44LTQxLjEgNTIuNy01Mi4zIDg0LjJDNjkuNyAyMjYuMSA2NCAyNTkuNyA2NCAyODhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTI0LjUgNS01NC40IDE1LjEtODIuOGMxMC4xLTI4LjUgMjUtNTQuMSA0My43LTcxLjJ6XCJdXG59O1xudmFyIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtbWVkaWNhbC1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MTNcIiwgXCJNMzIwIDM2OGMwIDU5LjUgMjkuNSAxMTIuMSA3NC44IDE0NEgxMjguMWMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDUyMi4xIDE5My45Yy04LjUtMS4zLTE3LjMtMS45LTI2LjEtMS45Yy01NC43IDAtMTAzLjUgMjQuOS0xMzUuOCA2NEgzMjBWMjA4YzAtOC44LTcuMi0xNi0xNi0xNkgyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnY0OEgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTIyLjYgMTQ0bDM2LjctMzYuN2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwTDQ5NiAzNDUuNGwtMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42TDQ3My40IDM2OGwtMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBMNDk2IDM5MC42bDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZMNTE4LjYgMzY4elwiXVxufTtcbnZhciBmYUNhbXBncm91bmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FtcGdyb3VuZCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzk5NzhdLCBcImY2YmJcIiwgXCJNMzc3IDUyYzExLTEzLjggOC44LTMzLjktNS00NXMtMzMuOS04LjgtNDUgNUwyODggNjAuOCAyNDkgMTJjLTExLTEzLjgtMzEuMi0xNi00NS01cy0xNiAzMS4yLTUgNDVsNDggNjBMMTIuMyA0MDUuNEM0LjMgNDE1LjQgMCA0MjcuNyAwIDQ0MC40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyODggNTI4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ0MC40YzAtMTIuNy00LjMtMjUuMS0xMi4zLTM1TDMyOSAxMTJsNDgtNjB6TTI4OCA0NDhIMTY4LjVMMjg4IDI5MS43IDQwNy41IDQ0OEgyODh6XCJdXG59O1xudmFyIGZhRm9sZGVyUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb2xkZXItcGx1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY1ZVwiLCBcIk01MTIgNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkgxOTJjMjAuMSAwIDM5LjEgOS41IDUxLjIgMjUuNmwxOS4yIDI1LjZjNiA4LjEgMTUuNSAxMi44IDI1LjYgMTIuOEg0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2ek0yMzIgMzc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzEyaDY0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDI4MFYyMDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NjRIMTY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDY0djY0elwiXVxufTtcbnZhciBmYUZ1dGJvbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmdXRib2wnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5OTE3LCBcImZ1dGJvbC1iYWxsXCIsIFwic29jY2VyLWJhbGxcIl0sIFwiZjFlM1wiLCBcIk00MTcuMyAzNjAuMWwtNzEuNi00LjhjLTUuMi0uMy0xMC4zIDEuMS0xNC41IDQuMnMtNy4yIDcuNC04LjQgMTIuNWwtMTcuNiA2OS42QzI4OS41IDQ0NS44IDI3MyA0NDggMjU2IDQ0OHMtMzMuNS0yLjItNDkuMi02LjRMMTg5LjIgMzcyYy0xLjMtNS00LjMtOS40LTguNC0xMi41cy05LjMtNC41LTE0LjUtNC4ybC03MS42IDQuOGMtMTcuNi0yNy4yLTI4LjUtNTkuMi0zMC40LTkzLjZMMTI1IDIyOC4zYzQuNC0yLjggNy42LTcgOS4yLTExLjlzMS40LTEwLjItLjUtMTVsLTI2LjctNjYuNkMxMjggMTA5LjIgMTU1LjMgODkgMTg2LjcgNzYuOWw1NS4yIDQ2YzQgMy4zIDkgNS4xIDE0LjEgNS4xczEwLjItMS44IDE0LjEtNS4xbDU1LjItNDZjMzEuMyAxMi4xIDU4LjcgMzIuMyA3OS42IDU3LjlsLTI2LjcgNjYuNmMtMS45IDQuOC0yLjEgMTAuMS0uNSAxNXM0LjkgOS4xIDkuMiAxMS45bDYwLjcgMzguMmMtMS45IDM0LjQtMTIuOCA2Ni40LTMwLjQgOTMuNnpNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTE0LjEtMzI1LjdjLTguNC02LjEtMTkuOC02LjEtMjguMiAwTDE5NCAyMjFjLTguNCA2LjEtMTEuOSAxNi45LTguNyAyNi44bDE4LjMgNTYuM2MzLjIgOS45IDEyLjQgMTYuNiAyMi44IDE2LjZoNTkuMmMxMC40IDAgMTkuNi02LjcgMjIuOC0xNi42bDE4LjMtNTYuM2MzLjItOS45LS4zLTIwLjctOC43LTI2LjhsLTQ3LjktMzQuOHpcIl1cbn07XG52YXIgZmFGdXRib2xCYWxsID0gZmFGdXRib2w7XG52YXIgZmFTb2NjZXJCYWxsID0gZmFGdXRib2w7XG52YXIgZmFQYWludGJydXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhaW50YnJ1c2gnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgzOTYsIFwicGFpbnQtYnJ1c2hcIl0sIFwiZjFmY1wiLCBcIk0zMzkuMyAzNjcuMWMyNy4zLTMuOSA1MS45LTE5LjQgNjcuMi00Mi45TDU2OC4yIDc0LjFjMTIuNi0xOS41IDkuNC00NS4zLTcuNi02MS4yUzUxNy43LTQuNCA0OTkuMSA5LjZMMjYyLjQgMTg3LjJjLTI0IDE4LTM4LjIgNDYuMS0zOC40IDc2LjFMMzM5LjMgMzY3LjF6bS0xOS42IDI1LjRsLTExNi0xMDQuNEMxNDMuOSAyOTAuMyA5NiAzMzkuNiA5NiA0MDBjMCAzLjkgLjIgNy44IC42IDExLjZDOTguNCA0MjkuMSA4Ni40IDQ0OCA2OC44IDQ0OEg2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgyMDhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJjMC0yLjUtLjEtNS0uMi03LjV6XCJdXG59O1xudmFyIGZhUGFpbnRCcnVzaCA9IGZhUGFpbnRicnVzaDtcbnZhciBmYUxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbG9jaycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODI3NF0sIFwiZjAyM1wiLCBcIk0xNDQgMTQ0djQ4SDMwNFYxNDRjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODB6TTgwIDE5MlYxNDRDODAgNjQuNSAxNDQuNSAwIDIyNCAwczE0NCA2NC41IDE0NCAxNDR2NDhoMTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyNTZjMC0zNS4zIDI4LjctNjQgNjQtNjRIODB6XCJdXG59O1xudmFyIGZhR2FzUHVtcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXMtcHVtcCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk5ODFdLCBcImY1MmZcIiwgXCJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEgyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMjU2aDhjNDguNiAwIDg4IDM5LjQgODggODh2MzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyMjJjLTI3LjYtNy4xLTQ4LTMyLjItNDgtNjJWOTZMMzg0IDY0Yy04LjgtOC44LTguOC0yMy4yIDAtMzJzMjMuMi04LjggMzIgMGw3Ny4zIDc3LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM1YxNjh2MjQgMzJWMzc2YzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyVjM0NGMwLTIyLjEtMTcuOS00MC00MC00MGgtOFY0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWNjR6TTk2IDgwdjk2YzAgOC44IDcuMiAxNiAxNiAxNkgyNDBjOC44IDAgMTYtNy4yIDE2LTE2VjgwYzAtOC44LTcuMi0xNi0xNi0xNkgxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG52YXIgZmFIb3RUdWJQZXJzb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG90LXR1Yi1wZXJzb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhvdC10dWJcIl0sIFwiZjU5M1wiLCBcIk0yNzIgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NS4yYzAgMzQgMTQuNCA2Ni40IDM5LjcgODkuMmwxNi40IDE0LjhjMTUuMiAxMy43IDIzLjggMzMuMSAyMy44IDUzLjVWMjAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTg2LjhjMC0zNC0xNC40LTY2LjQtMzkuNy04OS4yTDI5NS44IDgyLjhDMjgwLjcgNjkuMSAyNzIgNDkuNyAyNzIgMjkuMlYyNHpNMCAzMjB2MTZWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjc3LjNjLTEzLjggMC0yNy4zLTQuNS0zOC40LTEyLjhsLTg1LjMtNjRDMTM3IDE2Ni43IDExNi44IDE2MCA5NiAxNjBjLTUzIDAtOTYgNDMtOTYgOTZ2NjR6bTEyOCAxNnY5NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptODAtMTZjOC44IDAgMTYgNy4yIDE2IDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6bTExMiAxNnY5NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptODAtMTZjOC44IDAgMTYgNy4yIDE2IDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6TTM2MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY1LjJjMCAzNCAxNC40IDY2LjQgMzkuNyA4OS4ybDE2LjQgMTQuOGMxNS4yIDEzLjcgMjMuOCAzMy4xIDIzLjggNTMuNVYyMDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxODYuOGMwLTM0LTE0LjQtNjYuNC0zOS43LTg5LjJMNDA3LjggODIuOEMzOTIuNyA2OS4xIDM4NCA0OS43IDM4NCAyOS4yVjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek02NCAxMjhBNjQgNjQgMCAxIDAgNjQgMGE2NCA2NCAwIDEgMCAwIDEyOHpcIl1cbn07XG52YXIgZmFIb3RUdWIgPSBmYUhvdFR1YlBlcnNvbjtcbnZhciBmYU1hcExvY2F0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcC1sb2NhdGlvbicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibWFwLW1hcmtlZFwiXSwgXCJmNTlmXCIsIFwiTTMwMi44IDMxMkMzMzQuOSAyNzEuOSA0MDggMTc0LjYgNDA4IDEyMEM0MDggNTMuNyAzNTQuMyAwIDI4OCAwUzE2OCA1My43IDE2OCAxMjBjMCA1NC42IDczLjEgMTUxLjkgMTA1LjIgMTkyYzcuNyA5LjYgMjIgOS42IDI5LjYgMHpNNDE2IDUwM2wxNDQuOS01OGM5LjEtMy42IDE1LjEtMTIuNSAxNS4xLTIyLjNWMTUyYzAtMTctMTcuMS0yOC42LTMyLjktMjIuM2wtMTE2IDQ2LjRjLS41IDEuMi0xIDIuNS0xLjUgMy43Yy0yLjkgNi44LTYuMSAxMy43LTkuNiAyMC42VjUwM3pNMTUuMSAxODcuM0M2IDE5MSAwIDE5OS44IDAgMjA5LjZWNDgwLjRjMCAxNyAxNy4xIDI4LjYgMzIuOSAyMi4zTDE2MCA0NTEuOFYyMDAuNGMtMy41LTYuOS02LjctMTMuOC05LjYtMjAuNmMtNS42LTEzLjItMTAuNC0yNy40LTEyLjgtNDEuNWwtMTIyLjYgNDl6TTM4NCAyNTVjLTIwLjUgMzEuMy00Mi4zIDU5LjYtNTYuMiA3N2MtMjAuNSAyNS42LTU5LjEgMjUuNi03OS42IDBjLTEzLjktMTcuNC0zNS43LTQ1LjctNTYuMi03N1Y0NDkuNGwxOTIgNTQuOVYyNTV6XCJdXG59O1xudmFyIGZhTWFwTWFya2VkID0gZmFNYXBMb2NhdGlvbjtcbnZhciBmYUhvdXNlRmxvb2RXYXRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1mbG9vZC13YXRlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUwZVwiLCBcIk0zMDYuOCA2LjFDMjk1LjYtMiAyODAuNC0yIDI2OS4yIDYuMWwtMTc2IDEyOGMtMTEuMiA4LjItMTUuOSAyMi42LTExLjYgMzUuOFM5OC4xIDE5MiAxMTIgMTkyaDE2djczYzEuNyAxIDMuMyAyIDQuOSAzLjFjMTggMTIuNCA0MC4xIDIwLjMgNTkuMiAyMC4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzEuNS0xIDMtMiA0LjUtMi45bC0uMy03My4ySDQ2NGMxMy45IDAgMjYuMS04LjkgMzAuNC0yMi4xcy0uNC0yNy42LTExLjYtMzUuOGwtMTc2LTEyOHpNMjY5LjUgMzA5LjlDMjQ3IDMyNS40IDIxOS41IDMzNiAxOTIgMzM2Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgMzg5LjcgMTU5IDQwMCAxOTIgNDAwYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjUtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCAzMjUuMiA0MTAuOSAzMzYgMzg0IDMzNmMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwek0zODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjFjLTExLjEtNy45LTI1LjktNy45LTM3IDBDMjQ3IDQzNy40IDIxOS41IDQ0OCAxOTIgNDQ4Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCA0MzcuMiA0MTAuOSA0NDggMzg0IDQ0OHpcIl1cbn07XG52YXIgZmFUcmVlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyZWUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc3OTRdLCBcImYxYmJcIiwgXCJNMjEwLjYgNS45TDYyIDE2OS40Yy0zLjkgNC4yLTYgOS44LTYgMTUuNUM1NiAxOTcuNyA2Ni4zIDIwOCA3OS4xIDIwOEgxMDRMMzAuNiAyODEuNGMtNC4yIDQuMi02LjYgMTAtNi42IDE2QzI0IDMwOS45IDM0LjEgMzIwIDQ2LjYgMzIwSDgwTDUuNCA0MDkuNUMxLjkgNDEzLjcgMCA0MTkgMCA0MjQuNWMwIDEzIDEwLjUgMjMuNSAyMy41IDIzLjVIMTkydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ4SDQyNC41YzEzIDAgMjMuNS0xMC41IDIzLjUtMjMuNWMwLTUuNS0xLjktMTAuOC01LjQtMTVMMzY4IDMyMGgzMy40YzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZMMzQ0IDIwOGgyNC45YzEyLjcgMCAyMy4xLTEwLjMgMjMuMS0yMy4xYzAtNS43LTIuMS0xMS4zLTYtMTUuNUwyMzcuNCA1LjlDMjM0IDIuMSAyMjkuMSAwIDIyNCAwcy0xMCAyLjEtMTMuNCA1Ljl6XCJdXG59O1xudmFyIGZhQnJpZGdlTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmlkZ2UtbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRjY1wiLCBcIk0zMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NzZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTM2djY0aC04Yy02MS45IDAtMTEyIDUwLjEtMTEyIDExMnYyNC42Yy05LjkgNS44LTE4LjIgMTQuMS0yMy44IDI0LjFjLTE3LjYtMjAtNDMuNC0zMi43LTcyLjItMzIuN2MtNTMgMC05NiA0My05NiA5NnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4NGMwLTUzLTQzLTk2LTk2LTk2VjE2MGg3MlY5Nkg2NEM0Ni4zIDk2IDMyIDgxLjcgMzIgNjR6TTQwOCA5NnY2NGg4MFY5Nkg0MDh6bS00OCA2NFY5NkgyODB2NjRoODB6TTE1MiA5NnY2NGg4MFY5NkgxNTJ6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl1cbn07XG52YXIgZmFTYWNrRG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NhY2stZG9sbGFyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTc2XSwgXCJmODFkXCIsIFwiTTMyMCA5NkgxOTJMMTQ0LjYgMjQuOUMxMzcuNSAxNC4yIDE0NS4xIDAgMTU3LjkgMEgzNTQuMWMxMi44IDAgMjAuNCAxNC4yIDEzLjMgMjQuOUwzMjAgOTZ6TTE5MiAxMjhIMzIwYzMuOCAyLjUgOC4xIDUuMyAxMyA4LjRDMzg5LjcgMTcyLjcgNTEyIDI1MC45IDUxMiA0MTZjMCA1My00MyA5Ni05NiA5Nkg5NmMtNTMgMC05Ni00My05Ni05NkMwIDI1MC45IDEyMi4zIDE3Mi43IDE3OSAxMzYuNGwwIDAgMCAwYzQuOC0zLjEgOS4yLTUuOSAxMy04LjR6bTg0IDg4YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMHYxNGMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjQyNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFY0MTAuMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bDAgMC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjIxNnpcIl1cbn07XG52YXIgZmFQZW5Ub1NxdWFyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW4tdG8tc3F1YXJlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJlZGl0XCJdLCBcImYwNDRcIiwgXCJNNDcxLjYgMjEuN2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDBMMzYyLjMgNTEuN2w5Ny45IDk3LjkgMzAuMS0zMC4xYzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ3MS42IDIxLjd6bS0yOTkuMiAyMjBjLTYuMSA2LjEtMTAuOCAxMy42LTEzLjUgMjEuOWwtMjkuNiA4OC44Yy0yLjkgOC42LS42IDE4LjEgNS44IDI0LjZzMTUuOSA4LjcgMjQuNiA1LjhsODguOC0yOS42YzguMi0yLjcgMTUuNy03LjQgMjEuOS0xMy41TDQzNy43IDE3Mi4zIDMzOS43IDc0LjMgMTcyLjQgMjQxLjd6TTk2IDY0QzQzIDY0IDAgMTA3IDAgMTYwVjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM1MmM1MyAwIDk2LTQzIDk2LTk2VjMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDk2elwiXVxufTtcbnZhciBmYUVkaXQgPSBmYVBlblRvU3F1YXJlO1xudmFyIGZhQ2FyU2lkZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXItc2lkZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY2M10sIFwiZjVlNFwiLCBcIk0xNzEuMyA5NkgyMjR2OTZIMTExLjNsMzAuNC03NS45QzE0Ni41IDEwNCAxNTguMiA5NiAxNzEuMyA5NnpNMjcyIDE5MlY5Nmg4MS4yYzkuNyAwIDE4LjkgNC40IDI1IDEybDY3LjIgODRIMjcyem0yNTYuMiAxTDQyOC4yIDY4Yy0xOC4yLTIyLjgtNDUuOC0zNi03NS0zNkgxNzEuM2MtMzkuMyAwLTc0LjYgMjMuOS04OS4xIDYwLjNMNDAuNiAxOTYuNEMxNi44IDIwNS44IDAgMjI4LjkgMCAyNTZWMzY4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDY1LjNjNy42IDQ1LjQgNDcuMSA4MCA5NC43IDgwczg3LjEtMzQuNiA5NC43LTgwSDM4NS4zYzcuNiA0NS40IDQ3LjEgODAgOTQuNyA4MHM4Ny4xLTM0LjYgOTQuNy04MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzIwYzAtNjUuMi00OC44LTExOS0xMTEuOC0xMjd6TTQzNC43IDM2OGE0OCA0OCAwIDEgMSA5MC41IDMyIDQ4IDQ4IDAgMSAxIC05MC41LTMyek0xNjAgMzM2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG52YXIgZmFTaGFyZU5vZGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoYXJlLW5vZGVzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJzaGFyZS1hbHRcIl0sIFwiZjFlMFwiLCBcIk0zNTIgMjI0YzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDQgLjIgOCAuNyAxMS45bC05NC4xIDQ3QzE0NS40IDE3MC4yIDEyMS45IDE2MCA5NiAxNjBjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMjUuOSAwIDQ5LjQtMTAuMiA2Ni42LTI2LjlsOTQuMSA0N2MtLjUgMy45LS43IDcuOC0uNyAxMS45YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0yNS45IDAtNDkuNCAxMC4yLTY2LjYgMjYuOWwtOTQuMS00N2MuNS0zLjkgLjctNy44IC43LTExLjlzLS4yLTgtLjctMTEuOWw5NC4xLTQ3QzMwMi42IDIxMy44IDMyNi4xIDIyNCAzNTIgMjI0elwiXVxufTtcbnZhciBmYVNoYXJlQWx0ID0gZmFTaGFyZU5vZGVzO1xudmFyIGZhSGVhcnRDaXJjbGVNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUtbWludXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZmZcIiwgXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOWwyLjYtMi40QzI2Ny4yIDQzOC42IDI1NiA0MDQuNiAyNTYgMzY4YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2YzI4LjMgMCA1NSA2LjcgNzguNyAxOC41Yy45LTYuNSAxLjMtMTMgMS4zLTE5LjZ2LTUuOGMwLTY5LjktNTAuNS0xMjkuNS0xMTkuNC0xNDFDMzQ3IDM2LjUgMzAwLjYgNTEuNCAyNjggODRMMjU2IDk2IDI0NCA4NGMtMzIuNi0zMi42LTc5LTQ3LjUtMTI0LjYtMzkuOUM1MC41IDU1LjYgMCAxMTUuMiAwIDE4NS4xdjUuOGMwIDQxLjUgMTcuMiA4MS4yIDQ3LjYgMTA5LjV6TTU3NiAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNkg0OTZjOC44IDAgMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYUhvdXJnbGFzc0hhbGYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91cmdsYXNzLWhhbGYnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImhvdXJnbGFzcy0yXCJdLCBcImYyNTJcIiwgXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NFY3NWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFMMTQ2LjcgMjU2IDc4LjkgMzIzLjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0Mzd2MTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjQgMzIwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjQzN2MwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFMMjM3LjMgMjU2bDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMVY2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjAgNjQgMzJ6TTk2IDc1VjY0SDI4OFY3NWMwIDE5LTUuNiAzNy40LTE2IDUzSDExMmMtMTAuMy0xNS42LTE2LTM0LTE2LTUzem0xNiAzMDljMy41LTUuMyA3LjYtMTAuMyAxMi4xLTE0LjlMMTkyIDMwMS4zbDY3LjkgNjcuOWM0LjYgNC42IDguNiA5LjYgMTIuMSAxNC45SDExMnpcIl1cbn07XG52YXIgZmFIb3VyZ2xhc3MyID0gZmFIb3VyZ2xhc3NIYWxmO1xudmFyIGZhTWljcm9zY29wZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Njb3BlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzAwXSwgXCJmNjEwXCIsIFwiTTE2MCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYyODhjMCAxNy43LTE0LjMgMzItMzIgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyIDQ0OEgzMjBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhzLTU3LjMtMTI4LTEyOC0xMjhWMTI4YzEwNiAwIDE5MiA4NiAxOTIgMTkyYzAgNDkuMi0xOC41IDk0LTQ4LjkgMTI4SDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMjAgMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTgwLTY0SDMwNGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhU2luayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaW5rJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMDZkXCIsIFwiTTI4OCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NlYyODhIMTYwVjI2NGMwLTMwLjktMjUuMS01Ni01Ni01Nkg1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg0OGM0LjQgMCA4IDMuNiA4IDh2MjRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMjU2IDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0MDBWMjY0YzAtNC40IDMuNi04IDgtOGg1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg0MDhjLTMwLjkgMC01NiAyNS4xLTU2IDU2djI0SDI4OFY5NnpNNDgwIDQxNlYzODRIMzJ2MzJjMCA1MyA0MyA5NiA5NiA5NkgzODRjNTMgMCA5Ni00MyA5Ni05NnpcIl1cbn07XG52YXIgZmFCYWdTaG9wcGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWctc2hvcHBpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInNob3BwaW5nLWJhZ1wiXSwgXCJmMjkwXCIsIFwiTTE2MCAxMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHY0OEgxNjBWMTEyem0tNDggNDhINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM1MmM1MyAwIDk2LTQzIDk2LTk2VjIwOGMwLTI2LjUtMjEuNS00OC00OC00OEgzMzZWMTEyQzMzNiA1MC4xIDI4NS45IDAgMjI0IDBTMTEyIDUwLjEgMTEyIDExMnY0OHptMjQgNDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0xNTIgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFTaG9wcGluZ0JhZyA9IGZhQmFnU2hvcHBpbmc7XG52YXIgZmFBcnJvd0Rvd25aQSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1kb3duLXotYScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbHBoYS1kZXNjXCIsIFwic29ydC1hbHBoYS1kb3duLWFsdFwiXSwgXCJmODgxXCIsIFwiTTE4My42IDQ2OS42QzE3Ny41IDQ3Ni4yIDE2OSA0ODAgMTYwIDQ4MHMtMTcuNS0zLjgtMjMuNi0xMC40bC04OC05NmMtMTEuOS0xMy0xMS4xLTMzLjMgMi00NS4yczMzLjMtMTEuMSA0NS4yIDJMMTI4IDM2NS43VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzY1LjdsMzIuNC0zNS40YzExLjktMTMgMzIuMi0xMy45IDQ1LjItMnMxMy45IDMyLjIgMiA0NS4ybC04OCA5NnpNMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ4MGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDQyOS4zIDE2MEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzUyYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOUw0MDIuNyA5NkgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem05NiAxOTJjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN2w2NCAxMjggMTYgMzJjNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM0w0NjAuMiA0NDhIMzcxLjhsLTcuMiAxNC4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45bDE2LTMyIDY0LTEyOGM1LjQtMTAuOCAxNi41LTE3LjcgMjguNi0xNy43ek0zOTUuOCA0MDBoNDAuNEw0MTYgMzU5LjYgMzk1LjggNDAwelwiXVxufTtcbnZhciBmYVNvcnRBbHBoYURlc2MgPSBmYUFycm93RG93blpBO1xudmFyIGZhU29ydEFscGhhRG93bkFsdCA9IGZhQXJyb3dEb3duWkE7XG52YXIgZmFNaXR0ZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWl0dGVuJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmN2I1XCIsIFwiTTM1MiAzODRINjRMNS40IDE3OC45QzEuOCAxNjYuNCAwIDE1My40IDAgMTQwLjNDMCA2Mi44IDYyLjggMCAxNDAuMyAwaDMuNGM2NiAwIDEyMy41IDQ0LjkgMTM5LjUgMTA4LjlsMzEuNCAxMjUuOCAxNy42LTIwLjFDMzQ0LjggMjAwLjIgMzYyLjkgMTkyIDM4MiAxOTJoMi44YzM0LjkgMCA2My4zIDI4LjMgNjMuMyA2My4zYzAgMTUuOS02IDMxLjItMTYuOCA0Mi45TDM1MiAzODR6TTMyIDQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMkgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OHpcIl1cbn07XG52YXIgZmFQZXJzb25SYXlzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1yYXlzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTRkXCIsIFwiTTIwOCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45bC0yOC42IDQ3LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNTguMyA5N2M5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOUwzMjggMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgyNDh6TTcgN0MxNi40LTIuMyAzMS42LTIuMyA0MSA3bDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA0MUMtMi4zIDMxLjYtMi4zIDE2LjQgNyA3ek00NzEgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTgwIDgwYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDQ3MSA3ek03IDUwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODAtODBjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDQxIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6bTQ2NCAwbC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDB6XCJdXG59O1xudmFyIGZhVXNlcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYwYzBcIiwgXCJNMTQ0IDBhODAgODAgMCAxIDEgMCAxNjBBODAgODAgMCAxIDEgMTQ0IDB6TTUxMiAwYTgwIDgwIDAgMSAxIDAgMTYwQTgwIDgwIDAgMSAxIDUxMiAwek0wIDI5OC43QzAgMjM5LjggNDcuOCAxOTIgMTA2LjcgMTkyaDQyLjdjMTUuOSAwIDMxIDMuNSA0NC42IDkuN2MtMS4zIDcuMi0xLjkgMTQuNy0xLjkgMjIuM2MwIDM4LjIgMTYuOCA3Mi41IDQzLjMgOTZjLS4yIDAtLjQgMC0uNyAwSDIxLjNDOS42IDMyMCAwIDMxMC40IDAgMjk4Ljd6TTQwNS4zIDMyMGMtLjIgMC0uNCAwLS43IDBjMjYuNi0yMy41IDQzLjMtNTcuOCA0My4zLTk2YzAtNy42LS43LTE1LTEuOS0yMi4zYzEzLjYtNi4zIDI4LjctOS43IDQ0LjYtOS43aDQyLjdDNTkyLjIgMTkyIDY0MCAyMzkuOCA2NDAgMjk4LjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM0g0MDUuM3pNMjI0IDIyNGE5NiA5NiAwIDEgMSAxOTIgMCA5NiA5NiAwIDEgMSAtMTkyIDB6TTEyOCA0ODUuM0MxMjggNDExLjcgMTg3LjcgMzUyIDI2MS4zIDM1MkgzNzguN0M0NTIuMyAzNTIgNTEyIDQxMS43IDUxMiA0ODUuM2MwIDE0LjctMTEuOSAyNi43LTI2LjcgMjYuN0gxNTQuN2MtMTQuNyAwLTI2LjctMTEuOS0yNi43LTI2Ljd6XCJdXG59O1xudmFyIGZhRXllU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXllLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmMDcwXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNTI1LjYgMzg2LjdjMzkuNi00MC42IDY2LjQtODYuMSA3OS45LTExOC40YzMuMy03LjkgMy4zLTE2LjcgMC0yNC42Yy0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xQzQ2NS41IDY4LjggNDAwLjggMzIgMzIwIDMyYy02OC4yIDAtMTI1IDI2LjMtMTY5LjMgNjAuOEwzOC44IDUuMXpNMjIzLjEgMTQ5LjVDMjQ4LjYgMTI2LjIgMjgyLjcgMTEyIDMyMCAxMTJjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRjMCAyNC45LTYuMyA0OC4zLTE3LjQgNjguN0w0MDggMjk0LjVjOC40LTE5LjMgMTAuNi00MS40IDQuOC02My4zYy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM2MwIDEwLjItMi40IDE5LjgtNi42IDI4LjNsLTkwLjMtNzAuOHpNMzczIDM4OS45Yy0xNi40IDYuNS0zNC4zIDEwLjEtNTMgMTAuMWMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDRjMC02LjkgLjUtMTMuNiAxLjQtMjAuMkw4My4xIDE2MS41QzYwLjMgMTkxLjIgNDQgMjIwLjggMzQuNSAyNDMuN2MtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjZjMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMUMxNzQuNSA0NDMuMiAyMzkuMiA0ODAgMzIwIDQ4MGM0Ny44IDAgODkuOS0xMi45IDEyNi4yLTMyLjVMMzczIDM4OS45elwiXVxufTtcbnZhciBmYUZsYXNrVmlhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbGFzay12aWFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGYzXCIsIFwiTTE3NSAzODkuNGMtOS44IDE2LTE1IDM0LjMtMTUgNTMuMWMtMTAgMy41LTIwLjggNS41LTMyIDUuNWMtNTMgMC05Ni00My05Ni05NlY2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwSDk2aDY0IDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyVjMwOS45bC00OSA3OS42ek05NiA2NHY5Nmg2NFY2NEg5NnpNMzUyIDBINDgwaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyVjIxNC45TDYyOS43IDQwNi4yYzYuNyAxMC45IDEwLjMgMjMuNSAxMC4zIDM2LjRjMCAzOC4zLTMxLjEgNjkuNC02OS40IDY5LjRIMjYxLjRjLTM4LjMgMC02OS40LTMxLjEtNjkuNC02OS40YzAtMTIuOCAzLjYtMjUuNCAxMC4zLTM2LjRMMzIwIDIxNC45VjY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDMyem0zMiA2NFYyMjRjMCA1LjktMS42IDExLjctNC43IDE2LjhMMzMwLjUgMzIwaDE3MWwtNDguOC03OS4yYy0zLjEtNS00LjctMTAuOC00LjctMTYuOFY2NEgzODR6XCJdXG59O1xudmFyIGZhSGFuZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzA2LCA5OTk1LCBcImhhbmQtcGFwZXJcIl0sIFwiZjI1NlwiLCBcIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjMzNmMwIDEuNSAwIDMuMSAuMSA0LjZMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40cy0xNC42IDQxLjMgMS40IDU2LjZMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRIMzA0Yzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2VjEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMyelwiXVxufTtcbnZhciBmYUhhbmRQYXBlciA9IGZhSGFuZDtcbnZhciBmYU9tID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ29tJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzI5XSwgXCJmNjc5XCIsIFwiTTM3OS4zIDQuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTE2IDE2Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwxNiAxNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGwxNi0xNmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtMTYtMTZ6TTI4MSA2Ni43Yy0yLjItMS41LTQuOS0yLjUtNy43LTIuN2MtLjYgMC0xLjMtLjEtMS45IDBjLTMuOSAuMi03LjQgMS43LTEwLjEgNC4yYy0uOSAuOC0xLjYgMS43LTIuMyAyLjZjLTEuNyAyLjQtMi43IDUuMy0yLjkgOC41YzAgLjcgMCAxLjQgMCAyLjFjLjIgMi4yIC45IDQuMyAxLjkgNi4ybC4zIC42Yy4zIC42IC44IDEuNCAxLjQgMi40YzEuMiAyIDIuOSA0LjggNS4xIDguMmM0LjQgNi43IDExLjEgMTUuNSAyMCAyNC40QzMwMi40IDE0MS4xIDMzMC4zIDE2MCAzNjggMTYwYzMxLjIgMCA1Ni42LTEwLjQgNzMuOS0yMC4yYzguNy01IDE1LjYtOS45IDIwLjQtMTMuOGMyLjQtMS45IDQuMy0zLjYgNS43LTQuOWMuNy0uNiAxLjMtMS4yIDEuNy0xLjZsLjYtLjUgLjEtLjEgLjEtLjEgMCAwIDAgMGM1LjktNS44IDkuNS0xMy45IDkuNS0yMi44YzAtMTcuNy0xNC4zLTMyLTMyLTMyYy04LjcgMC0xNi43IDMuNS0yMi40IDkuMmMtLjEgLjEtLjIgLjItLjUgLjRjLS41IC41LTEuNSAxLjMtMi44IDIuNGMtMi43IDIuMi02LjggNS4yLTEyLjEgOC4yQzM5OS40IDkwLjQgMzg0LjggOTYgMzY4IDk2Yy0yMC44IDAtNDIuNC03LTU5LjUtMTQuNmMtOC40LTMuNy0xNS40LTcuNS0yMC4zLTEwLjNjLTIuNC0xLjQtNC4zLTIuNS01LjYtMy4zYy0uNi0uNC0xLjEtLjctMS40LS45bC0uMy0uMnpNMTE1LjIgMTY5LjZjOC02IDE3LjktOS42IDI4LjgtOS42YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDEwOS44Yy03LjYgMC0xMy44IDYuMi0xMy44IDEzLjhjMCAxLjUgLjIgMi45IC43IDQuNGw4IDI0YzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjlIMTQ0aDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy01MC44IDAtODIuNy0yMS41LTEwMi4yLTQyLjhjLTkuOS0xMC44LTE2LjYtMjEuNi0yMC45LTI5LjdjLTIuMS00LTMuNi03LjMtNC41LTkuNmMtLjUtMS4xLS44LTItMS0yLjVsLS4yLS41Yy0uMy0uOS0uNy0xLjgtMS4xLTIuNmMtMS4yLTIuMi0yLjgtNC00LjctNS40Yy0xLjktMS40LTQuMS0yLjMtNi41LTIuOGMtMS40LS4zLTIuOS0uMy00LjQtLjJjLTIuNSAuMi00LjggMS02LjggMi4zYy0xLjEgLjctMi4yIDEuNS0zLjEgMi41Yy0yLjQgMi41LTQuMSA1LjgtNC41IDkuNWMtLjEgLjYtLjEgMS4xLS4xIDEuN2MwIDAgMCAwIDAgMGMwIC44IC4xIDEuNyAuMiAyLjVsMCAuMWMwIC4zIC4xIC44IC4yIDEuM2MuMiAxLjEgLjQgMi43IC44IDQuNmMuOCAzLjkgMiA5LjQgMy45IDE1LjljMy44IDEzIDEwLjMgMzAuNCAyMS4zIDQ4QzQ4LjcgNDc2LjIgODkuNCA1MTIgMTYwIDUxMmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGMwLTIzLjMtNi4yLTQ1LjItMTcuMS02NGgyMi42YzI1LjUgMCA0OS45LTEwLjEgNjcuOS0yOC4xbDI2LjUtMjYuNWM2LTYgMTQuMS05LjQgMjIuNi05LjRINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyYy0yNS43IDAtNDEuNC0xMi41LTUxLjItMjUuNmMtNS02LjctOC40LTEzLjQtMTAuNS0xOC42Yy0xLjEtMi41LTEuOC00LjYtMi4yLTZjLS4yLS43LS40LTEuMi0uNS0xLjVsLS4xLS4yYy0uMy0xLjMtLjgtMi42LTEuNS0zLjhjLTEuMS0yLTIuNi0zLjgtNC40LTUuMWMtMi43LTItNi0zLjItOS42LTMuMmwtLjIgMGMtOCAuMS0xNC42IDYuMS0xNS42IDEzLjlsMCAwYzAgLjMtLjEgLjYtLjIgMS4xYy0uMSAuOS0uMyAyLjEtLjQgMy42Yy0uMyAzLS42IDcuMy0uNiAxMi40YzAgMTAuMSAxLjEgMjMuOSA1LjggMzguMWM0LjggMTQuMyAxMy40IDI5LjMgMjguNiA0MC43QzM2OC43IDQ3My4zIDM4OS4zIDQ4MCA0MTYgNDgwYzUzIDAgOTYtNDMgOTYtOTZWMjg4YzAtNTMtNDMtOTYtOTYtOTZoLTUuNWMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFsLTI2LjUgMjYuNWMtNiA2LTE0LjEgOS40LTIyLjYgOS40SDI0NS4yYzYuOS0xNC41IDEwLjgtMzAuOCAxMC44LTQ4YzAtNjEuOS01MC4xLTExMi0xMTItMTEyYy0yNS4yIDAtNDguNSA4LjMtNjcuMiAyMi40Yy0xNC4xIDEwLjYtMTcgMzAuNy02LjQgNDQuOHMzMC43IDE3IDQ0LjggNi40elwiXVxufTtcbnZhciBmYVdvcm0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd29ybScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU5OVwiLCBcIk0yNTYgOTZjMC01MyA0My05NiA5Ni05NmgzOC40QzQzOS45IDAgNDgwIDQwLjEgNDgwIDg5LjZWMTc2djE2VjM3NmMwIDc1LjEtNjAuOSAxMzYtMTM2IDEzNnMtMTM2LTYwLjktMTM2LTEzNlYyOTZjMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjI5NmMwLTc1LjEgNjAuOS0xMzYgMTM2LTEzNnMxMzYgNjAuOSAxMzYgMTM2djgwYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBWMTkySDM1MmMtNTMgMC05Ni00My05Ni05NnptMTQ0LThhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpcIl1cbn07XG52YXIgZmFIb3VzZUNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUwYlwiLCBcIk0zMjAuNyAzNTJjOC4xLTg5LjcgODMuNS0xNjAgMTc1LjMtMTYwYzguOSAwIDE3LjYgLjcgMjYuMSAxLjlMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFoMzJ2NjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOFY0NzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBoMTZjMS4yIDAgMi40LS4xIDMuNi0uMmMxLjUgLjEgMyAuMiA0LjUgLjJIMTYwaDI0YzIyLjEgMCA0MC0xNy45IDQwLTQwVjQ0OCAzODRjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRsLjcgMHpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xudmFyIGZhUGx1ZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbHVnJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjY4XSwgXCJmMWU2XCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44QzI5NyAzOTggMzUyIDMzMy40IDM1MiAyNTZWMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyelwiXVxufTtcbnZhciBmYUNoZXZyb25VcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGV2cm9uLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDc3XCIsIFwiTTIzMy40IDEwNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjU2IDE3My4zIDg2LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE5Mi0xOTJ6XCJdXG59O1xudmFyIGZhSGFuZFNwb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtc3BvY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg0MDZdLCBcImYyNTlcIiwgXCJNMjQ2LjkgMjMuN0MyNDIuMyA2LjYgMjI0LjgtMy41IDIwNy43IDEuMXMtMjcuMiAyMi4xLTIyLjYgMzkuMkwyMzggMjM3LjhjMi41IDkuMi00LjUgMTguMi0xNCAxOC4yYy02LjQgMC0xMi00LjItMTMuOS0xMC4zTDE2Ni42IDEwMi43Yy01LjEtMTYuOS0yMy0yNi40LTM5LjktMjEuM3MtMjYuNCAyMy0yMS4zIDM5LjlsNjIuOCAyMDYuNGMyLjQgNy45LTcuMiAxMy44LTEzLjIgOC4xTDk5LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNHMtMTQuNiA0MS4zIDEuNCA1Ni42TDE1Ni44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0aDEwLjkgOC4yYy4xIDAgLjEtLjEgLjEtLjFzLjEtLjEgLjEtLjFjNTguMy0zLjUgMTA4LjYtNDMuMiAxMjUuMy05OS43bDgxLjItMjc1YzUtMTYuOS00LjctMzQuNy0yMS42LTM5LjhzLTM0LjcgNC43LTM5LjggMjEuNkw0NDMuNSAyNDcuMWMtMS42IDUuMy02LjQgOC45LTEyIDguOWMtNy45IDAtMTMuOC03LjMtMTIuMi0xNS4xbDM2LTE3MC4zYzMuNy0xNy4zLTcuNC0zNC4zLTI0LjctMzcuOXMtMzQuMyA3LjQtMzcuOSAyNC43TDM1NS4xIDIzNS4xYy0yLjYgMTIuMi0xMy4zIDIwLjktMjUuOCAyMC45Yy0xMS45IDAtMjIuNC04LTI1LjQtMTkuNWwtNTctMjEyLjh6XCJdXG59O1xudmFyIGZhU3RvcHdhdGNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0b3B3YXRjaCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzkyMDFdLCBcImYyZjJcIiwgXCJNMTc2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMTZWOTguNEM5Mi4zIDExMy44IDE2IDIwMCAxNiAzMDRjMCAxMTQuOSA5My4xIDIwOCAyMDggMjA4czIwOC05My4xIDIwOC0yMDhjMC00MS44LTEyLjMtODAuNy0zMy41LTExMy4ybDI0LjEtMjQuMWMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwzNTUuNyAxNDNjLTI4LjEtMjMtNjIuMi0zOC44LTk5LjctNDQuNlY2NGgxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyMjQgMTc2em03MiAxOTJWMzIwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjE5MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbnZhciBmYUZhY2VLaXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Uta2lzcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUzNSwgXCJraXNzXCJdLCBcImY1OTZcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTQ4LjctMTk4LjNjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3MtMy4xIDEzLjItNy4zIDE4LjNjLTQuMyA1LjItMTAuMSA5LjctMTYuNyAxMy40Yy0yLjcgMS41LTUuNyAzLTguNyA0LjNjMy4xIDEuMyA2IDIuNyA4LjcgNC4zYzYuNiAzLjcgMTIuNSA4LjIgMTYuNyAxMy40YzQuMyA1LjEgNy4zIDExLjQgNy4zIDE4LjNzLTMuMSAxMy4yLTcuMyAxOC4zYy00LjMgNS4yLTEwLjEgOS43LTE2LjcgMTMuNEMyNzQuNyA0NDMuMSAyNTcuNCA0NDggMjQwIDQ0OGMtMy42IDAtNi44LTIuNS03LjctNnMuNi03LjIgMy44LTlsMCAwIDAgMCAwIDAgMCAwIC4yLS4xYy4yLS4xIC41LS4zIC45LS41Yy44LS41IDItMS4yIDMuNC0yLjFjMi44LTEuOSA2LjUtNC41IDEwLjItNy42YzMuNy0zLjEgNy4yLTYuNiA5LjYtMTAuMWMyLjUtMy41IDMuNS02LjQgMy41LTguNnMtMS01LTMuNS04LjZjLTIuNS0zLjUtNS45LTYuOS05LjYtMTAuMWMtMy43LTMuMS03LjQtNS43LTEwLjItNy42Yy0xLjQtLjktMi42LTEuNi0zLjQtMi4xYy0uNC0uMi0uNy0uNC0uOS0uNWwtLjItLjEgMCAwIDAgMCAwIDBjLTIuNS0xLjQtNC4xLTQuMS00LjEtN3MxLjYtNS42IDQuMS03bDAgMCAwIDAgMCAwIDAgMCAwIDAgLjItLjEgLjMtLjIgLjYtLjRjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFsLS40LS4zLS41LS4zLS4yLS4xIDAgMCAwIDAgMCAwYy0zLjItMS44LTQuNy01LjUtMy44LTlzNC4xLTYgNy43LTZjMTcuNCAwIDM0LjcgNC45IDQ3LjkgMTIuM2M2LjYgMy43IDEyLjUgOC4yIDE2LjcgMTMuNHpNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhS2lzcyA9IGZhRmFjZUtpc3M7XG52YXIgZmFCcmlkZ2VDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmlkZ2UtY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGNiXCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHMxNC4zIDMyIDMyIDMyaDQwdjY0SDMyVjI4OGM1MyAwIDk2IDQzIDk2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMlYxNjBINTM2Vjk2aDQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0ek00ODggOTZ2NjRINDA4Vjk2aDgwek0zNjAgOTZ2NjRIMjgwVjk2aDgwek0yMzIgOTZ2NjRIMTUyVjk2aDgwek00OTYgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN0w1MTguNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDk2IDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDczLjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0OTYgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG52YXIgZmFGYWNlR3JpblRvbmd1ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tdG9uZ3VlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM5LCBcImdyaW4tdG9uZ3VlXCJdLCBcImY1ODlcIiwgXCJNMCAyNTZDMCAzNjguOSA3My4xIDQ2NC43IDE3NC41IDQ5OC44QzE2NS4zIDQ4NCAxNjAgNDY2LjYgMTYwIDQ0OFY0MDAuN2MtMjQtMTcuNS00My4xLTQxLjQtNTQuOC02OS4yYy01LTExLjggNy0yMi41IDE5LjMtMTguN2MzOS43IDEyLjIgODQuNSAxOSAxMzEuOCAxOXM5Mi4xLTYuOCAxMzEuOC0xOWMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdjLTExLjggMjgtMzEuMSA1Mi01NS40IDY5LjZWNDQ4YzAgMTguNi01LjMgMzYtMTQuNSA1MC44QzQzOC45IDQ2NC43IDUxMiAzNjguOSA1MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZ6bTE3Ni40LTgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTMyMCA0NDhWNDAyLjZjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZoLTJjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjljLTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDBjLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjloLTJjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbnZhciBmYUdyaW5Ub25ndWUgPSBmYUZhY2VHcmluVG9uZ3VlO1xudmFyIGZhQ2hlc3NCaXNob3AgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlc3MtYmlzaG9wJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTgyMV0sIFwiZjQzYVwiLCBcIk0xMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJjMCAxNi4xIDExLjkgMjkuNCAyNy40IDMxLjdDNzguNCAxMDYuOCA4IDE5MCA4IDI4OGMwIDQ3LjQgMzAuOCA3Mi4zIDU2IDg0LjdWNDAwSDI1NlYzNzIuN2MyNS4yLTEyLjUgNTYtMzcuNCA1Ni04NC43YzAtMzcuMy0xMC4yLTcyLjQtMjUuMy0xMDQuMWwtOTkuNCA5OS40Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDI3MC44IDE1NC42Yy0yMy4yLTM4LjEtNTEuOC02OS41LTc0LjItOTAuOUMyMTIuMSA2MS40IDIyNCA0OC4xIDIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjh6TTQ4IDQzMkw2LjYgNDczLjRjLTQuMiA0LjItNi42IDEwLTYuNiAxNkMwIDUwMS45IDEwLjEgNTEyIDIyLjYgNTEySDI5Ny40YzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZMMjcyIDQzMkg0OHpcIl1cbn07XG52YXIgZmFGYWNlR3JpbldpbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXdpbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImdyaW4td2lua1wiXSwgXCJmNThjXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6bS0xNi45LTc5LjJjLTE3LjYtMjMuNS01Mi44LTIzLjUtNzAuNCAwYy01LjMgNy4xLTE1LjMgOC41LTIyLjQgMy4ycy04LjUtMTUuMy0zLjItMjIuNGMzMC40LTQwLjUgOTEuMi00MC41IDEyMS42IDBjNS4zIDcuMSAzLjkgMTcuMS0zLjIgMjIuNHMtMTcuMSAzLjktMjIuNC0zLjJ6TTE3Ni40IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhR3JpbldpbmsgPSBmYUZhY2VHcmluV2luaztcbnZhciBmYUVhckRlYWYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWFyLWRlYWYnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImRlYWZcIiwgXCJkZWFmbmVzc1wiLCBcImhhcmQtb2YtaGVhcmluZ1wiXSwgXCJmMmE0XCIsIFwiTTUwMi42IDU0LjZsLTQwIDQwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w0MC00MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0tMzIwIDMyMGwtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yNDAgMTI4Yy01Ny42IDAtMTA1LjEgNDMuNi0xMTEuMyA5OS41Yy0xLjkgMTcuNi0xNy44IDMwLjItMzUuMyAyOC4zcy0zMC4yLTE3LjgtMjguMy0zNS4zQzc0LjggMTMyLjUgMTQ5LjQgNjQgMjQwIDY0Yzk3LjIgMCAxNzYgNzguOCAxNzYgMTc2YzAgNDYtMTcuNyA4Ny45LTQ2LjYgMTE5LjNjLTEyIDEzLTE3LjQgMjQuOC0xNy40IDM0LjdWNDAwYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4di02LjFjMC0zMi45IDE3LjQtNTkuNiAzNC40LTc4YzE4LjQtMjAgMjkuNi00Ni42IDI5LjYtNzUuOWMwLTYxLjktNTAuMS0xMTItMTEyLTExMnptMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnpcIl1cbn07XG52YXIgZmFEZWFmID0gZmFFYXJEZWFmO1xudmFyIGZhRGVhZm5lc3MgPSBmYUVhckRlYWY7XG52YXIgZmFIYXJkT2ZIZWFyaW5nID0gZmFFYXJEZWFmO1xudmFyIGZhUm9hZENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvYWQtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTY0XCIsIFwiTTIxMy4yIDMySDI4OFY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMyaDc0LjhjMjcuMSAwIDUxLjMgMTcuMSA2MC4zIDQyLjZsNDIuNyAxMjAuNmMtMTAuOS0yLjEtMjIuMi0zLjItMzMuOC0zLjJjLTU5LjUgMC0xMTIuMSAyOS42LTE0NCA3NC44VjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmMyLjMgMCA0LjYtLjMgNi44LS43Yy00LjUgMTUuNS02LjggMzEuOC02LjggNDguN2MwIDUuNCAuMiAxMC43IC43IDE2bC0uNyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NEg4Ni42QzU2LjUgNDgwIDMyIDQ1NS41IDMyIDQyNS40YzAtNi4yIDEuMS0xMi40IDMuMS0xOC4yTDE1Mi45IDc0LjZDMTYyIDQ5LjEgMTg2LjEgMzIgMjEzLjIgMzJ6TTM1MiAzNjhhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjExLjMtNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNDgwIDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xudmFyIGZhRGljZUZpdmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1maXZlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbOTg2MF0sIFwiZjUyM1wiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNOTYgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTIyNCAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NC02NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiAxNjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYVNxdWFyZVJzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtcnNzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJyc3Mtc3F1YXJlXCJdLCBcImYxNDNcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek05NiAxMzZjMC0xMy4zIDEwLjctMjQgMjQtMjRjMTM3IDAgMjQ4IDExMSAyNDggMjQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTEwLjUtODkuNS0yMDAtMjAwLTIwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRjODMuOSAwIDE1MiA2OC4xIDE1MiAxNTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDEyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbnZhciBmYVJzc1NxdWFyZSA9IGZhU3F1YXJlUnNzO1xudmFyIGZhTGFuZE1pbmVPbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYW5kLW1pbmUtb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MWJcIiwgXCJNMzQ0IDI0VjE2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek0xOTIgMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnYzMkgxOTJWMzIwem0tNzcuMyA5MC41YzguMS0xNi4zIDI0LjgtMjYuNSA0Mi45LTI2LjVINDgyLjNjMTguMiAwIDM0LjggMTAuMyA0Mi45IDI2LjVsMjcuNiA1NS4yQzU2My41IDQ4NyA1NDggNTEyIDUyNC4yIDUxMkgxMTUuOGMtMjMuOCAwLTM5LjMtMjUtMjguNi00Ni4zbDI3LjYtNTUuMnpNMzYuMyAxMzguM2M3LjUtMTAuOSAyMi41LTEzLjYgMzMuNC02LjFsMTA0IDcyYzEwLjkgNy41IDEzLjYgMjIuNSA2LjEgMzMuNHMtMjIuNSAxMy42LTMzLjQgNi4xbC0xMDQtNzJjLTEwLjktNy41LTEzLjYtMjIuNS02LjEtMzMuNHptNTM0LjEtNi4xYzEwLjktNy41IDI1LjgtNC44IDMzLjQgNi4xczQuOCAyNS44LTYuMSAzMy40bC0xMDQgNzJjLTEwLjkgNy41LTI1LjggNC44LTMzLjQtNi4xcy00LjgtMjUuOCA2LjEtMzMuNGwxMDQtNzJ6XCJdXG59O1xudmFyIGZhSUN1cnNvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpLWN1cnNvcicsXG4gIGljb246IFsyNTYsIDUxMiwgW10sIFwiZjI0NlwiLCBcIk0uMSAyOS4zQy0xLjQgNDcgMTEuNyA2Mi40IDI5LjMgNjMuOWw4IC43QzcwLjUgNjcuMyA5NiA5NSA5NiAxMjguM1YyMjRINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIOTZ2OTUuN2MwIDMzLjMtMjUuNSA2MS01OC43IDYzLjhsLTggLjdDMTEuNyA0NDkuNi0xLjQgNDY1IC4xIDQ4Mi43czE2LjkgMzAuNyAzNC41IDI5LjJsOC0uN2MzNC4xLTIuOCA2NC4yLTE4LjkgODUuNC00Mi45YzIxLjIgMjQgNTEuMiA0MC4xIDg1LjQgNDIuOWw4IC43YzE3LjYgMS41IDMzLjEtMTEuNiAzNC41LTI5LjJzLTExLjYtMzMuMS0yOS4yLTM0LjVsLTgtLjdDMTg1LjUgNDQ0LjcgMTYwIDQxNyAxNjAgMzgzLjdWMjg4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MFYxMjguM2MwLTMzLjMgMjUuNS02MSA1OC43LTYzLjhsOC0uN2MxNy42LTEuNSAzMC43LTE2LjkgMjkuMi0zNC41UzIzOS0xLjQgMjIxLjMgLjFsLTggLjdDMTc5LjIgMy42IDE0OS4yIDE5LjcgMTI4IDQzLjdjLTIxLjItMjQtNTEuMi00MC04NS40LTQyLjlsLTgtLjdDMTctMS40IDEuNiAxMS43IC4xIDI5LjN6XCJdXG59O1xudmFyIGZhU3RhbXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RhbXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YmZcIiwgXCJNMzEyIDIwMS44YzAtMTcuNCA5LjItMzMuMiAxOS45LTQ3QzM0NC41IDEzOC41IDM1MiAxMTguMSAzNTIgOTZjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAyMi4xIDcuNSA0Mi41IDIwLjEgNTguOGMxMC43IDEzLjggMTkuOSAyOS42IDE5LjkgNDdjMCAyOS45LTI0LjMgNTQuMi01NC4yIDU0LjJIMTEyQzUwLjEgMjU2IDAgMzA2LjEgMCAzNjhjMCAyMC45IDEzLjQgMzguNyAzMiA0NS4zVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDEzLjNjMTguNi02LjYgMzItMjQuNCAzMi00NS4zYzAtNjEuOS01MC4xLTExMi0xMTItMTEySDM2Ni4yYy0yOS45IDAtNTQuMi0yNC4zLTU0LjItNTQuMnpNNDE2IDQxNnYzMkg5NlY0MTZINDE2elwiXVxufTtcbnZhciBmYVN0YWlycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFpcnMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUyODlcIiwgXCJNMzg0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMySDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0NDh2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMzIwdjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg5NlYzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJoOTZWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2VjY0elwiXVxufTtcbnZhciBmYUkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaScsXG4gIGljb246IFszMjAsIDUxMiwgWzEwNV0sIFwiNDlcIiwgXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2aDk2VjQxNkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTkyVjk2aDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MCAzMnpcIl1cbn07XG52YXIgZmFIcnl2bmlhU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdocnl2bmlhLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFs4MzcyLCBcImhyeXZuaWFcIl0sIFwiZjZmMlwiLCBcIk0xMjEuOSAxMTYuMkMxMzguMyAxMDMuMSAxNTguNyA5NiAxNzkuNiA5NkgyMjNjMjcuMSAwIDQ5IDIxLjkgNDkgNDljMCAxMS41LTQgMjIuNC0xMS4xIDMxSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE1NS41bC01MC42IDI4LjljLTEuNyAxLTMuNCAyLTUuMSAzLjFIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINTIuM2MtMi44IDkuOS00LjMgMjAuNC00LjMgMzFjMCA2Mi40IDUwLjYgMTEzIDExMyAxMTNoNDMuNGMzNS41IDAgNzAtMTIuMSA5Ny43LTM0LjNMMzA4IDQ0MWMxMy44LTExIDE2LTMxLjIgNS00NXMtMzEuMi0xNi00NS01bC01LjkgNC43Yy0xNi40IDEzLjEtMzYuNyAyMC4yLTU3LjcgMjAuMkgxNjFjLTI3LjEgMC00OS0yMS45LTQ5LTQ5YzAtMTEuNSA0LTIyLjQgMTEuMS0zMUgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjI4LjVsNTAuNi0yOC45YzEuNy0xIDMuNC0yIDUuMS0zLjFIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMzMS43YzIuOC0xMCA0LjMtMjAuNCA0LjMtMzFjMC02Mi40LTUwLjYtMTEzLTExMy0xMTNIMTc5LjZjLTM1LjUgMC03MCAxMi4xLTk3LjcgMzQuM0w3NiA3MWMtMTMuOCAxMS0xNiAzMS4yLTUgNDVzMzEuMiAxNiA0NSA1bDUuOS00Ljd6XCJdXG59O1xudmFyIGZhSHJ5dm5pYSA9IGZhSHJ5dm5pYVNpZ247XG52YXIgZmFQaWxscyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaWxscycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjQ4NFwiLCBcIk0xMTIgOTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI1Nmg5NlYxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTAgMTQ0QzAgODIuMSA1MC4xIDMyIDExMiAzMnMxMTIgNTAuMSAxMTIgMTEyVjM2OGMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMwIDQyOS45IDAgMzY4VjE0NHpNNTU0LjkgMzk5LjRjLTcuMSAxMi4zLTIzLjcgMTMuMS0zMy44IDMuMUwzMzMuNSAyMTQuOWMtMTAtMTAtOS4zLTI2LjcgMy4xLTMzLjhDMzYwIDE2Ny43IDM4Ny4xIDE2MCA0MTYgMTYwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwYzAgMjguOS03LjcgNTYtMjEuMSA3OS40em0tNTkuNSA1OS41QzQ3MiA0NzIuMyA0NDQuOSA0ODAgNDE2IDQ4MGMtODguNCAwLTE2MC03MS42LTE2MC0xNjBjMC0yOC45IDcuNy01NiAyMS4xLTc5LjRjNy4xLTEyLjMgMjMuNy0xMy4xIDMzLjgtMy4xTDQ5OC41IDQyNS4xYzEwIDEwIDkuMyAyNi43LTMuMSAzMy44elwiXVxufTtcbnZhciBmYUZhY2VHcmluV2lkZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4td2lkZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUxNSwgXCJncmluLWFsdFwiXSwgXCJmNTgxXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6TTIwOCAxOTJjMCAzNS4zLTE0LjMgNjQtMzIgNjRzLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NHMzMiAyOC43IDMyIDY0em0xMjggNjRjLTE3LjcgMC0zMi0yOC43LTMyLTY0czE0LjMtNjQgMzItNjRzMzIgMjguNyAzMiA2NHMtMTQuMyA2NC0zMiA2NHpcIl1cbn07XG52YXIgZmFHcmluQWx0ID0gZmFGYWNlR3JpbldpZGU7XG52YXIgZmFUb290aCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b290aCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTQ2M10sIFwiZjVjOVwiLCBcIk0xODYuMSA1Mi4xQzE2OS4zIDM5LjEgMTQ4LjcgMzIgMTI3LjUgMzJDNzQuNyAzMiAzMiA3NC43IDMyIDEyNy41djYuMmMwIDE1LjggMy43IDMxLjMgMTAuNyA0NS41bDIzLjUgNDcuMWM0LjUgOC45IDcuNiAxOC40IDkuNCAyOC4ybDM2LjcgMjA1LjhjMiAxMS4yIDExLjYgMTkuNCAyMi45IDE5LjhzMjEuNC03LjQgMjQtMTguNGwyOC45LTEyMS4zQzE5Mi4yIDMyMy43IDIwNyAzMTIgMjI0IDMxMnMzMS44IDExLjcgMzUuOCAyOC4zbDI4LjkgMTIxLjNjMi42IDExLjEgMTIuNyAxOC44IDI0IDE4LjRzMjAuOS04LjYgMjIuOS0xOS44bDM2LjctMjA1LjhjMS44LTkuOCA0LjktMTkuMyA5LjQtMjguMmwyMy41LTQ3LjFjNy4xLTE0LjEgMTAuNy0yOS43IDEwLjctNDUuNXYtMi4xYzAtNTUtNDQuNi05OS42LTk5LjYtOTkuNmMtMjQuMSAwLTQ3LjQgOC44LTY1LjYgMjQuNmwtMy4yIDIuOCAxOS41IDE1LjJjNyA1LjQgOC4yIDE1LjUgMi44IDIyLjVzLTE1LjUgOC4yLTIyLjUgMi44bC0yNC40LTE5LTM3LTI4Ljh6XCJdXG59O1xudmFyIGZhViA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTE4XSwgXCI1NlwiLCBcIk0xOS43IDM0LjVjMTYuMy02LjggMzUgLjkgNDEuOCAxNy4yTDE5MiAzNjQuOCAzMjIuNSA1MS43YzYuOC0xNi4zIDI1LjUtMjQgNDEuOC0xNy4yczI0IDI1LjUgMTcuMiA0MS44bC0xNjAgMzg0Yy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN3MtMjQuNi03LjgtMjkuNS0xOS43TDIuNSA3Ni4zYy02LjgtMTYuMyAuOS0zNSAxNy4yLTQxLjh6XCJdXG59O1xudmFyIGZhQmFuZ2xhZGVzaGlUYWthU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYW5nbGFkZXNoaS10YWthLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUyZTZcIiwgXCJNMzYgMzIuMkMxOC40IDMwLjEgMi40IDQyLjUgLjIgNjBTMTAuNSA5My42IDI4IDk1LjhsNy45IDFjMTYgMiAyOCAxNS42IDI4IDMxLjhWMTYwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0VjM4NGMwIDUzIDQzIDk2IDk2IDk2aDMyYzEwNiAwIDE5Mi04NiAxOTItMTkyVjI1NmMwLTUzLTQzLTk2LTk2LTk2SDI3MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnYzMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOEgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIyNGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxMjhWMTI4LjVjMC00OC40LTM2LjEtODkuMy04NC4xLTk1LjNsLTcuOS0xelwiXVxufTtcbnZhciBmYUJpY3ljbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmljeWNsZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY5MF0sIFwiZjIwNlwiLCBcIk0zMTIgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMjUuN2wzNC42IDY0SDIyMi45bC0yNy40LTM4QzE5MSA5OS43IDE4My43IDk2IDE3NiA5NkgxMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNDMuN2wyMi4xIDMwLjctMjYuNiA1My4xYy0xMC0yLjUtMjAuNS0zLjgtMzEuMi0zLjhDNTcuMyAyMjQgMCAyODEuMyAwIDM1MnM1Ny4zIDEyOCAxMjggMTI4YzY1LjMgMCAxMTkuMS00OC45IDEyNy0xMTJoNDljOC41IDAgMTYuMy00LjUgMjAuNy0xMS44bDg0LjgtMTQzLjUgMjEuNyA0MC4xQzQwMi40IDI3Ni4zIDM4NCAzMTIgMzg0IDM1MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4cy01Ny4zLTEyOC0xMjgtMTI4Yy0xMy41IDAtMjYuNSAyLjEtMzguNyA2TDM3NS40IDQ4LjhDMzY5LjggMzguNCAzNTkgMzIgMzQ3LjIgMzJIMzEyek00NTguNiAzMDMuN2wzMi4zIDU5LjdjNi4zIDExLjcgMjAuOSAxNiAzMi41IDkuN3MxNi0yMC45IDkuNy0zMi41bC0zMi4zLTU5LjdjMy42LS42IDcuNC0uOSAxMS4yLS45YzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyYzAtMTguNiA3LTM1LjUgMTguNi00OC4zek0xMzMuMiAzNjhoNjVjLTcuMyAzMi4xLTM2IDU2LTcwLjIgNTZjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJjMS43IDAgMy40IC4xIDUuMSAuMmwtMjQuMiA0OC41Yy05IDE4LjEgNC4xIDM5LjQgMjQuMyAzOS40em0zMy43LTQ4bDUwLjctMTAxLjMgNzIuOSAxMDEuMi0uMSAuMUgxNjYuOHptOTAuNi0xMjhIMzY1LjlMMzE3IDI3NC44IDI1Ny40IDE5MnpcIl1cbn07XG52YXIgZmFTdGFmZlNuYWtlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0YWZmLXNuYWtlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJyb2QtYXNjbGVwaXVzXCIsIFwicm9kLXNuYWtlXCIsIFwic3RhZmYtYWVzY3VsYXBpdXNcIl0sIFwiZTU3OVwiLCBcIk0yMjIuNiA0My4ybC0uMSA0LjhIMjg4YzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2SDI0OFYxNjBoNDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjQ4IDIyMGwtNC41IDE0NEgyNTZjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZIMjQwVjM4NGgxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgyMTNsLTMuMSA5OS41TDIwOC41IDQ5NWwwIDFjLS4zIDguOS03LjYgMTYtMTYuNSAxNnMtMTYuMi03LjEtMTYuNS0xNmwwLTEtMS0zMUgxMzZjLTIyLjEgMC00MC0xNy45LTQwLTQwczE3LjktNDAgNDAtNDBoMzZsLTEtMzJIMTUyYy01MyAwLTk2LTQzLTk2LTk2YzAtNDcuNiAzNC42LTg3LjEgODAtOTQuN1YyNTZjMCA4LjggNy4yIDE2IDE2IDE2aDE2LjVMMTY0IDEyOEgxMzYgMTIyLjZjLTkgMTguOS0yOC4zIDMyLTUwLjYgMzJINTZjLTMwLjkgMC01Ni0yNS4xLTU2LTU2UzI1LjEgNDggNTYgNDhoOCA4IDg5LjVsLS4xLTQuOEwxNjEgMzJjMC0uNyAwLTEuMyAwLTEuOWMuNS0xNi42IDE0LjEtMzAgMzEtMzBzMzAuNSAxMy40IDMxIDMwYzAgLjYgMCAxLjMgMCAxLjlsLS40IDExLjJ6TTY0IDExMmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xudmFyIGZhUm9kQXNjbGVwaXVzID0gZmFTdGFmZlNuYWtlO1xudmFyIGZhUm9kU25ha2UgPSBmYVN0YWZmU25ha2U7XG52YXIgZmFTdGFmZkFlc2N1bGFwaXVzID0gZmFTdGFmZlNuYWtlO1xudmFyIGZhSGVhZFNpZGVDb3VnaFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWQtc2lkZS1jb3VnaC1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MlwiLCBcIk00NDggMzI1LjhsNDQgMzQuNWM4LjEgMS40IDE0LjggNi44IDE4IDE0LjFMNTUyLjkgNDA4YzEwLjYgLjQgMTkuNSA3LjYgMjIuMiAxNy40bDM5LjEgMzAuNmMuNiAwIDEuMi0uMSAxLjgtLjFjMTEuMSAwIDIwLjQgNy41IDIzLjIgMTcuOGgtMy45YzYuMiA4LjUgNi40IDIwLjQtLjQgMjljLTguMiAxMC40LTIzLjMgMTIuMy0zMy43IDQuMUw5LjIgNDIuOUMtMS4yIDM0LjctMy4xIDE5LjYgNS4xIDkuMlMyOC40LTMuMSAzOC44IDUuMUw4OS42IDQ0LjlDMTI3IDE2LjcgMTczLjUgMCAyMjQgMGgyNGM5NS4yIDAgMTgxLjIgNjkuMyAxOTcuMyAxNjAuMmMyLjMgMTMgNi44IDI1LjcgMTUuMSAzNmw0MiA1Mi42YzYuMiA3LjggOS42IDE3LjQgOS42IDI3LjRjMCAyNC4yLTE5LjYgNDMuOC00My44IDQzLjhINDQ4djAgNS44ek0wIDIyNC4yYzAtMzguNyA5LjgtNzUuMSAyNy4xLTEwNi45TDM0MS44IDM2NS4zbC0yLjUgLjNjLTExIDEuNC0xOS4yIDEwLjctMTkuMiAyMS44YzAgMTEuNiA5IDIxLjIgMjAuNiAyMS45bDYyIDMuOSA0MyAzMy45QzQzOS4zIDQ2Ni4yIDQyMS4yIDQ4MCA0MDAgNDgwSDMyMHY4YzAgMTMuMy0xMC43IDI0LTI0IDI0SDI1NnYwSDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDcuM2MwLTE2LjctNi45LTMyLjUtMTcuMS00NS44QzE2LjYgMzIyLjQgMCAyNzQuMSAwIDIyNC4yek02MTYgMzYwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTY0LTQ4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAtMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFUcnVja01lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stbWVkaWNhbCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY1NywgXCJhbWJ1bGFuY2VcIl0sIFwiZjBmOVwiLCBcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEgzNjhjMjYuNSAwIDQ4IDIxLjUgNDggNDhWOTZoNTAuN2MxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w1ODkuMyAxOTJjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM1YyNTZ2MzIgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTc2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2SDI1NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05Nkg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6TTQxNiAyNTZINTQ0VjIzNy4zTDQ2Ni43IDE2MEg0MTZ2OTZ6TTE2MCA0NjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0zNjgtNDhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTc2IDgwdjQ4bC00OCAwYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTkyaDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYxNDRjMC04LjgtNy4yLTE2LTE2LTE2SDI0MFY4MGMwLTguOC03LjItMTYtMTYtMTZIMTkyYy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhQW1idWxhbmNlID0gZmFUcnVja01lZGljYWw7XG52YXIgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWF0LWF3bi1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OThcIiwgXCJNNTA1IDQxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzgzIDk1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODgtODh6TTMwNS41IDI3LjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI3MS41IDM4LjZjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44bC0xMS4zLTExLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0xMS4zIDExLjNjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44TDEwMS44IDIzMWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNjcuOSAyNDIuM2MtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNEw5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguOS02OC45IDEyLjIgMTIuMmMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBsMTEuMy0xMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMS4zLTExLjNjLTIxLjgtMjEuOC00OS42LTM0LjEtNzguMS0zNi45bDMxLjktMzEuOSAxMi4yIDEyLjJjMjIuNSAyMi41IDUzLjMgMzEuNSA4Mi40IDI3YzAtMSAwLTIuMSAwLTMuMWMwLTMzLjEgOS4xLTY0LjEgMjUtOTAuNmMtMTUuNS04LjctMzIuNS0xMy44LTQ5LjgtMTUuNWwzMS45LTMxLjkgMTIuMiAxMi4yYzYgNiAxMi42IDExLjEgMTkuNyAxNS4yYzI3LjUtMzQgNjcuMy01Ny41IDExMi42LTYzLjhjLTQuMS0zLjgtOC40LTcuMy0xMi45LTEwLjVMNTA1IDEzN2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01OS40IDU5LjRjLTIwLjYtNC40LTQyLTMuNy02Mi4zIDIuMWM2LjEtMjEuMyA2LjYtNDMuOCAxLjQtNjUuM0w0MDkgNDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzMjkuMSA1Mi45Yy0zLjctNS03LjgtOS44LTEyLjQtMTQuM0wzMDUuNSAyNy4zek00OTYgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC05NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAtMTQ0YzguOCAwIDE2IDcuMiAxNiAxNnY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyODhjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbnZhciBmYVNub3dtYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc25vd21hbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3MzEsIDk5MjRdLCBcImY3ZDBcIiwgXCJNMzQxLjEgMTQwLjZjLTIgMy45LTEuNiA4LjYgMS4yIDEyYzcgOC41IDEyLjkgMTguMSAxNy4yIDI4LjRMNDA4IDE2MC4yVjEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djE5LjZsMjIuNS05LjdjMTIuMi01LjIgMjYuMyAuNCAzMS41IDEyLjZzLS40IDI2LjMtMTIuNiAzMS41bC01NiAyNC03My42IDMxLjVjLS41IDkuNS0yLjEgMTguNi00LjggMjcuM2MtMS4yIDMuOC0uMSA4IDIuOCAxMC44QzM5Ni43IDI5Ni45IDQxNiAzMzguMiA0MTYgMzg0YzAgNDQuNy0xOC4zIDg1LTQ3LjggMTE0LjFjLTkuOSA5LjctMjMuNyAxMy45LTM3LjUgMTMuOUgxODEuM2MtMTMuOSAwLTI3LjctNC4yLTM3LjUtMTMuOUMxMTQuMyA0NjkgOTYgNDI4LjcgOTYgMzg0YzAtNDUuOCAxOS4zLTg3LjEgNTAuMS0xMTYuM2MyLjktMi44IDQtNi45IDIuOC0xMC44Yy0yLjctOC43LTQuMy0xNy45LTQuOC0yNy4zTDcwLjUgMTk4LjFsLTU2LTI0QzIuNCAxNjguOC0zLjMgMTU0LjcgMS45IDE0Mi41czE5LjMtMTcuOCAzMS41LTEyLjZMNTYgMTM5LjZWMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NDAuMkwxNTIuNiAxODFjNC4zLTEwLjMgMTAuMS0xOS45IDE3LjItMjguNGMyLjgtMy40IDMuMy04LjEgMS4yLTEyQzE2NCAxMjcuMiAxNjAgMTEyLjEgMTYwIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAxNi4xLTQgMzEuMi0xMC45IDQ0LjZ6TTIyNCA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTQ4IDEyOGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0tMTYgODBhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0xNiA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwek0yODggOTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0tNDggMjR2My4yYzAgMy4yIC44IDYuMyAyLjMgOWw5IDE2LjljLjkgMS43IDIuNyAyLjggNC43IDIuOHMzLjgtMS4xIDQuNy0yLjhsOS0xNi45YzEuNS0yLjggMi4zLTUuOSAyLjMtOVYxMjBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhTW9ydGFyUGVzdGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vcnRhci1wZXN0bGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YTdcIiwgXCJNNTA0LjMgMTEuMUM0OTMuMy0xLjYgNDc0LjUtMy43IDQ2MSA2LjJMMjUyLjMgMTYwSDM5Ny4zTDUwMi42IDU0LjZjMTEuOC0xMS44IDEyLjYtMzAuOCAxLjYtNDMuNXpNMzIgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzAgODIuNSA0My40IDE0Ny43IDEyMy45IDE3Ni4yYy0xMS4xIDEzLjktMTkuNCAzMC4zLTIzLjkgNDguMUMxMjcuNiA0OTcuNCAxNDIuMyA1MTIgMTYwIDUxMkgzNTJjMTcuNyAwIDMyLjQtMTQuNiAyOC4xLTMxLjdjLTQuNS0xNy44LTEyLjgtMzQuMS0yMy45LTQ4LjFDNDM2LjYgNDAzLjcgNDgwIDMzOC41IDQ4MCAyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdXG59O1xudmFyIGZhUm9hZEJhcnJpZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1iYXJyaWVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTYyXCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjY2LjNMMTQ5LjIgOTZINjRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQwNS4yIDk2SDMzMC44bC01LjQgMTAuN0wyMzQuOCAyODhoNzQuM2w1LjQtMTAuN0w0MDUuMiA5NnpNMzYyLjggMjg4aDc0LjNsNS40LTEwLjdMNTMzLjIgOTZINDU4LjhsLTUuNCAxMC43TDM2Mi44IDI4OHpNMjAyLjggOTZsLTUuNCAxMC43TDEwNi44IDI4OGg3NC4zbDUuNC0xMC43TDI3Ny4yIDk2SDIwMi44em0yODggMTkySDU3NlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY1My43TDQ5MC44IDI4OHpcIl1cbn07XG52YXIgZmFTY2hvb2wgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTc5XSwgXCJmNTQ5XCIsIFwiTTMzNy44IDUuNEMzMjctMS44IDMxMy0xLjggMzAyLjIgNS40TDE2Ni4zIDk2SDQ4QzIxLjUgOTYgMCAxMTcuNSAwIDE0NFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhIMjU2VjQxNmMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0djk2SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhINDczLjdMMzM3LjggNS40ek05NiAxOTJoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjIwOGMwLTguOCA3LjItMTYgMTYtMTZ6bTQwMCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg1MTJjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDh6TTk2IDMyMGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnptNDAwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDUxMmMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNnpNMjMyIDE3NmE4OCA4OCAwIDEgMSAxNzYgMCA4OCA4OCAwIDEgMSAtMTc2IDB6bTg4LTQ4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMzNlYxNDRjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbnZhciBmYUlnbG9vID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2lnbG9vJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmN2FlXCIsIFwiTTMyMCAzMy44VjE2MEg0OC41QzEwMC4yIDgyLjggMTg4LjEgMzIgMjg4IDMyYzEwLjggMCAyMS41IC42IDMyIDEuOHpNMzUyIDE2MFYzOS4xQzQyNC45IDU1LjcgNDg3LjIgOTkuOCA1MjcuNSAxNjBIMzUyek0yOS45IDE5Mkg5NlYzMjBIMGMwLTQ2IDEwLjgtODkuNCAyOS45LTEyOHpNMTkyIDMyMEgxMjhWMTkySDQ0OFYzMjBIMzg0djMySDU3NnY4MGMwIDI2LjUtMjEuNSA0OC00OCA0OEgzNTJWMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0VjQ4MEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzUySDE5MlYzMjB6bTI4OCAwVjE5Mmg2Ni4xYzE5LjIgMzguNiAyOS45IDgyIDI5LjkgMTI4SDQ4MHpcIl1cbn07XG52YXIgZmFKb2ludCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqb2ludCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjU5NVwiLCBcIk00NDggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWNDNjMCA1NS4yIDIxLjkgMTA4LjEgNjAuOSAxNDcuMWwyMSAyMWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOXYxMWMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI0NWMwLTI5LjctMTEuOC01OC4yLTMyLjgtNzkuMmwtMjEtMjFDNDYzLjIgMTE3LjggNDQ4IDgxLjIgNDQ4IDQzVjMyek01NzYgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjQ1YzAtNTUuMi0yMS45LTEwOC4xLTYwLjktMTQ3LjFsLTIxLTIxYy05LTktMTQuMS0yMS4yLTE0LjEtMzMuOVYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY0M2MwIDI5LjcgMTEuOCA1OC4yIDMyLjggNzkuMmwyMSAyMWMyNyAyNyA0Mi4yIDYzLjYgNDIuMiAxMDEuOHYxMXpNMjI5LjggMzYwYy00LjctMi4zLTEwLTIuNy0xNS4yLTJjLTM3LjggNS42LTc1LjIgMTQuMy0xMDYuOSAyMi44QzgxLjMgMzg4IDU4LjMgMzk1LjEgNDIgNDAwLjRjLTguMiAyLjctMTQuNyA0LjktMTkuMiA2LjVjLTIuMyAuOC00IDEuNC01LjIgMS44bC0xLjMgLjVDNi44IDQxMi41IDAgNDIxLjQgMCA0MzJzNi44IDE5LjUgMTYuMyAyMi43bDEuMyAuNWMxLjIgLjQgMyAxLjEgNS4yIDEuOGM0LjUgMS42IDExIDMuOCAxOS4yIDYuNWMxNi4zIDUuNCAzOS4yIDEyLjUgNjUuNyAxOS42QzE2MC4zIDQ5Ny4zIDIyOC44IDUxMiAyODggNTEyaDY3LjNjNC4xIDAgNi4zLTUuMSAzLjYtOC4zTDI1Ni41IDM4MC44Yy03LjQtOC45LTE2LjUtMTUuOS0yNi43LTIwLjh6TTQ0NSA1MTJoMTkgNTEuM2M0LjEgMCA2LjMtNS4xIDMuNi04LjNMNDE2LjUgMzgwLjhDNDAxLjMgMzYyLjUgMzc4LjggMzUyIDM1NSAzNTJIMzM2IDI4OGMtMS4xIDAtMi4zIDAtMy40IDBjLTQuMSAwLTYuMiA1LjEtMy41IDguM0wzODMuNSA0ODMuMkMzOTguNyA1MDEuNSA0MjEuMiA1MTIgNDQ1IDUxMnptLTMuOS0xNTEuN0w1NDMuNSA0ODMuMmMxNC42IDE3LjUgMzUuOSAyNy45IDU4LjYgMjguN2MyMS4xLTEuMSAzNy45LTE4LjYgMzcuOS0zOS45VjM5MmMwLTIyLjEtMTcuOS00MC00MC00MEg0NDQuN2MtNC4xIDAtNi4zIDUuMS0zLjYgOC4zelwiXVxufTtcbnZhciBmYUFuZ2xlUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtcmlnaHQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFs4MjUwXSwgXCJmMTA1XCIsIFwiTTI3OC42IDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xNjAgMTYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyMTAuNyAyNTYgNzMuNCAxMTguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwelwiXVxufTtcbnZhciBmYUhvcnNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvcnNlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDE0XSwgXCJmNmYwXCIsIFwiTTQ0OCAyMzguMVYxNjBoMTZsOS44IDE5LjZjMTIuNSAyNS4xIDQyLjIgMzYuNCA2OC4zIDI2YzIwLjUtOC4yIDMzLjktMjggMzMuOS01MC4xVjgwYzAtMTkuMS04LjQtMzYuMy0yMS43LTQ4SDU2MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg0ODAgNDQ4QzM3Ny4zIDAgMzIwIDU3LjMgMzIwIDEyOEgyMjQgMjAzLjIgMTQ4LjhjLTMwLjcgMC01Ny42IDE2LjMtNzIuNSA0MC44QzMzLjIgMTc0LjUgMCAyMTEuNCAwIDI1NnY1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI1NmMwLTEzLjQgNi42LTI1LjIgMTYuNy0zMi41YzEuNiAxMyA2LjMgMjUuNCAxMy42IDM2LjRsMjguMiA0Mi40YzguMyAxMi40IDYuNCAyOC43LTEuMiA0MS42Yy0xNi41IDI4LTIwLjYgNjIuMi0xMCA5My45bDE3LjUgNTIuNGM0LjQgMTMuMSAxNi42IDIxLjkgMzAuNCAyMS45aDMzLjdjMjEuOCAwIDM3LjMtMjEuNCAzMC40LTQyLjFsLTIwLjgtNjIuNWMtMi4xLTYuNC0uNS0xMy40IDQuMy0xOC4ybDEyLjctMTIuN2MxMy4yLTEzLjIgMjAuNi0zMS4xIDIwLjYtNDkuN2MwLTIuMy0uMS00LjYtLjMtNi45bDg0IDI0YzQuMSAxLjIgOC4yIDIuMSAxMi4zIDIuOFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzE1LjdjMTkuMi0xOS4yIDMxLjUtNDUuNyAzMi03NS43aDB2LTEuOXpNNDk2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG52YXIgZmFRID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3EnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMTNdLCBcIjUxXCIsIFwiTTY0IDI1NmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGMyOC45IDAgNTYtNy43IDc5LjQtMjEuMWwtNzItODYuNGMtMTEuMy0xMy42LTkuNS0zMy44IDQuMS00NS4xczMzLjgtOS41IDQ1LjEgNC4xbDcwLjkgODUuMUMzNzEuOSAzMjUuOCAzODQgMjkyLjMgMzg0IDI1NmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MFM2NCAxNjcuNiA2NCAyNTZ6TTM0NC45IDQ0NC42QzMxMCA0NjcgMjY4LjUgNDgwIDIyNCA0ODBDMTAwLjMgNDgwIDAgMzc5LjcgMCAyNTZTMTAwLjMgMzIgMjI0IDMyczIyNCAxMDAuMyAyMjQgMjI0YzAgNTYuMS0yMC42IDEwNy40LTU0LjcgMTQ2LjdsNDcuMyA1Ni44YzExLjMgMTMuNiA5LjUgMzMuOC00LjEgNDUuMXMtMzMuOCA5LjUtNDUuMS00LjFsLTQ2LjYtNTUuOXpcIl1cbn07XG52YXIgZmFHID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2cnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMDNdLCBcIjQ3XCIsIFwiTTIyNCA5NkMxMzUuNiA5NiA2NCAxNjcuNiA2NCAyNTZzNzEuNiAxNjAgMTYwIDE2MGM3Ny40IDAgMTQyLTU1IDE1Ni44LTEyOEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDAwYzI1LjggMCA0OS42IDIxLjQgNDcuMiA1MC42QzQzNy44IDM4OS42IDM0MS40IDQ4MCAyMjQgNDgwQzEwMC4zIDQ4MCAwIDM3OS43IDAgMjU2UzEwMC4zIDMyIDIyNCAzMmM1Ny40IDAgMTA5LjcgMjEuNiAxNDkuMyA1N2MxMy4yIDExLjggMTQuMyAzMiAyLjUgNDUuMnMtMzIgMTQuMy00NS4yIDIuNUMzMDIuMyAxMTEuNCAyNjUgOTYgMjI0IDk2elwiXVxufTtcbnZhciBmYU5vdGVzTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdub3Rlcy1tZWRpY2FsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDgxXCIsIFwiTTk2IDM1MlY5NmMwLTM1LjMgMjguNy02NCA2NC02NEg0MTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMjkzLjVjMCAxNy02LjcgMzMuMy0xOC43IDQ1LjNsLTU4LjUgNTguNWMtMTIgMTItMjguMyAxOC43LTQ1LjMgMTguN0gxNjBjLTM1LjMgMC02NC0yOC43LTY0LTY0ek0yNzIgMTI4Yy04LjggMC0xNiA3LjItMTYgMTZ2NDhIMjA4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjU2aDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDMyMFYxNDRjMC04LjgtNy4yLTE2LTE2LTE2SDI3MnptMjQgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDEzNkM2MC45IDUxMiAwIDQ1MS4xIDAgMzc2VjE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjI0YzAgNDguNiAzOS40IDg4IDg4IDg4SDI5NnpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZUhhbGYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVtcGVyYXR1cmUtaGFsZicsXG4gIGljb246IFszMjAsIDUxMiwgWzEyNzc3NywgXCJ0ZW1wZXJhdHVyZS0yXCIsIFwidGhlcm1vbWV0ZXItMlwiLCBcInRoZXJtb21ldGVyLWhhbGZcIl0sIFwiZjJjOVwiLCBcIk0xNjAgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI3Ni41YzAgMTcuMy03LjEgMzEuOS0xNS4zIDQyLjVDODYuMiAzMzIuNiA4MCAzNDkuNSA4MCAzNjhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTE4LjUtNi4yLTM1LjQtMTYuNy00OC45Yy04LjItMTAuNi0xNS4zLTI1LjItMTUuMy00Mi41VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDggMTEyQzQ4IDUwLjIgOTguMSAwIDE2MCAwczExMiA1MC4xIDExMiAxMTJWMjc2LjVjMCAuMSAuMSAuMyAuMiAuNmMuMiAuNiAuOCAxLjYgMS43IDIuOGMxOC45IDI0LjQgMzAuMSA1NSAzMC4xIDg4LjFjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0yMDggMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YyMDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlYzMjIuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmUyID0gZmFUZW1wZXJhdHVyZUhhbGY7XG52YXIgZmFUaGVybW9tZXRlcjIgPSBmYVRlbXBlcmF0dXJlSGFsZjtcbnZhciBmYVRoZXJtb21ldGVySGFsZiA9IGZhVGVtcGVyYXR1cmVIYWxmO1xudmFyIGZhRG9uZ1NpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9uZy1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMTY5XCIsIFwiTTI4OCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJ2NDkuMWMtMTguOC0xMC45LTQwLjctMTcuMS02NC0xNy4xYy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOHM1Ny4zIDEyOCAxMjggMTI4YzI0LjUgMCA0Ny40LTYuOSA2Ni44LTE4LjhjNSAxMS4xIDE2LjIgMTguOCAyOS4yIDE4LjhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjg4IDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMTI4IDI4OGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdXG59O1xudmFyIGZhQ2Fwc3VsZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2Fwc3VsZXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0NmJcIiwgXCJNNjQgMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhWMjU2SDY0VjE0NHpNMCAxNDRWMzY4YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJWMTg5LjZjMS44IDE5LjEgOC4yIDM4IDE5LjggNTQuOEwzNzIuMyA0MzEuN2MzNS41IDUxLjcgMTA1LjMgNjQuMyAxNTYgMjguMXM2My0xMDcuNSAyNy41LTE1OS4yTDQyNy4zIDExMy4zQzM5MS44IDYxLjUgMzIxLjkgNDkgMjcxLjMgODUuMmMtMjggMjAtNDQuMyA1MC44LTQ3LjMgODNWMTQ0YzAtNjEuOS01MC4xLTExMi0xMTItMTEyUzAgODIuMSAwIDE0NHptMjk2LjYgNjQuMmMtMTYtMjMuMy0xMC01NS4zIDExLjktNzFjMjEuMi0xNS4xIDUwLjUtMTAuMyA2NiAxMi4ybDY3IDk3LjZMMzYxLjYgMzAzbC02NS05NC44ek00OTEgNDA3LjdjLS44IC42LTEuNiAxLjEtMi40IDEuNmw0LTIuOGMtLjUgLjQtMSAuOC0xLjYgMS4yelwiXVxufTtcbnZhciBmYVBvb1N0b3JtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bvby1zdG9ybScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wicG9vLWJvbHRcIl0sIFwiZjc1YVwiLCBcIk0yMzYuOSAuMmMtNS41LS43LTExIDEuNC0xNC41IDUuN3MtNC42IDEwLjEtMi44IDE1LjNjMi44IDguMiA0LjMgMTYuOSA0LjMgMjYuMWMwIDIxLjctOC41IDM3LjItMjEuOSA0Ny42Yy0xMy44IDEwLjgtMzQgMTctNTcuOCAxN0gxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0YzAgMTIuMiAzLjQgMjMuNSA5LjMgMzMuMkMzMS43IDIxNi4yIDAgMjUyLjQgMCAyOTZjMCA0MC45IDI4IDc1LjQgNjUuOCA4NS4yYy01LjMtMTguNSAxLTM4LjUgMTYuMi01MC43bDE2MC0xMjhjMTcuNi0xNC4xIDQyLjYtMTQgNjAuMiAuMnMyMi44IDM4LjYgMTIuOCA1OC44TDI4NS43IDMyMEgzMDRjMjAuNCAwIDM4LjUgMTIuOSA0NS4zIDMyLjFjMy43IDEwLjYgMy41IDIxLjggMCAzMS45SDM2MGM0OC42IDAgODgtMzkuNCA4OC04OGMwLTQzLjYtMzEuNy03OS44LTczLjMtODYuOGM1LjktOS43IDkuMy0yMS4xIDkuMy0zMy4yYzAtMzUuMy0yOC43LTY0LTY0LTY0aC0xLjRjLjktNS40IDEuNC0xMC45IDEuNC0xNi42YzAtNDguNy0zNi4xLTg4LjktODMuMS05NS4yem00NS4xIDIyNy40Yy01LjgtNC43LTE0LjItNC43LTIwLjEtLjFsLTE2MCAxMjhjLTUuMyA0LjItNy40IDExLjQtNS4xIDE3LjhzOC4zIDEwLjcgMTUuMSAxMC43aDcwLjFMMTI5LjcgNDg4LjhjLTMuNCA2LjctMS42IDE0LjkgNC4zIDE5LjZzMTQuMiA0LjcgMjAuMSAuMWwxNjAtMTI4YzUuMy00LjIgNy40LTExLjQgNS4xLTE3LjhzLTguMy0xMC43LTE1LjEtMTAuN0gyMzMuOWw1Mi40LTEwNC44YzMuNC02LjcgMS42LTE0LjktNC4zLTE5LjZ6XCJdXG59O1xudmFyIGZhUG9vQm9sdCA9IGZhUG9vU3Rvcm07XG52YXIgZmFGYWNlRnJvd25PcGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZnJvd24tb3BlbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1MCwgXCJmcm93bi1vcGVuXCJdLCBcImY1N2FcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3Ni40IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tMTIyIDE3NC41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjRjMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40Yy0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6XCJdXG59O1xudmFyIGZhRnJvd25PcGVuID0gZmFGYWNlRnJvd25PcGVuO1xudmFyIGZhSGFuZFBvaW50VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1wb2ludC11cCcsXG4gIGljb246IFszODQsIDUxMiwgWzk3NTddLCBcImYwYTZcIiwgXCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMFM5NiAxNC4zIDk2IDMyVjI0MEgzMlYzMnpNMjI0IDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE5MnptLTY0LTY0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0em0tOTYgODhsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNmMxMy4yIDAgMjUuNC00IDM1LjYtMTAuOGM4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44YzExLjcgMCAyMi42LTMuMSAzMi04LjZWMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwSDE2Mi4zYy00Mi40IDAtODMuMS0xNi45LTExMy4xLTQ2LjlMMzcuNSA0NTMuNUMxMy41IDQyOS41IDAgMzk2LjkgMCAzNjNWMzM2YzAtMzUuMyAyOC43LTY0IDY0LTY0aDg4YzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwSDk2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDU2YzM5LjggMCA3Mi0zMi4yIDcyLTcyelwiXVxufTtcbnZhciBmYU1vbmV5QmlsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMGQ2XCIsIFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCAzMjBINjRWMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0ek02NCAxOTJWMTI4aDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek00NDggMzg0YzAtMzUuMyAyOC43LTY0IDY0LTY0djY0SDQ0OHptNjQtMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NGg2NHY2NHpNMjg4IDE2MGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG52YXIgZmFCb29rbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rbWFyaycsXG4gIGljb246IFszODQsIDUxMiwgWzEyODI3OCwgNjE1OTFdLCBcImYwMmVcIiwgXCJNMCA0OFY0ODcuN0MwIDUwMS4xIDEwLjkgNTEyIDI0LjMgNTEyYzUgMCA5LjktMS41IDE0LTQuNEwxOTIgNDAwIDM0NS43IDUwNy42YzQuMSAyLjkgOSA0LjQgMTQgNC40YzEzLjQgMCAyNC4zLTEwLjkgMjQuMy0yNC4zVjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHpcIl1cbn07XG52YXIgZmFBbGlnbkp1c3RpZnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYWxpZ24tanVzdGlmeScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAzOVwiLCBcIk00NDggNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2SDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnptMCAyNTZjMC0xNy43LTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00NDggNDQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnpcIl1cbn07XG52YXIgZmFVbWJyZWxsYUJlYWNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VtYnJlbGxhLWJlYWNoJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTU4XSwgXCJmNWNhXCIsIFwiTTM0Ni4zIDI3MS44bC02MC4xLTIxLjlMMjE0IDQ0OEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjgyLjFsNjQuMS0xNzYuMnptMTIxLjEtLjJsLTMuMyA5LjEgNjcuNyAyNC42YzE4LjEgNi42IDM4LTQuMiAzOS42LTIzLjRjNi41LTc4LjUtMjMuOS0xNTUuNS04MC44LTIwOC41YzIgOCAzLjIgMTYuMyAzLjQgMjQuOGwuMiA2YzEuOCA1Ny03LjMgMTEzLjgtMjYuOCAxNjcuNHpNNDYyIDk5LjFjLTEuMS0zNC40LTIyLjUtNjQuOC01NC40LTc3LjRjLS45LS40LTEuOS0uNy0yLjgtMS4xYy0zMy0xMS43LTY5LjgtMi40LTkzLjEgMjMuOGwtNCA0LjVDMjcyLjQgODguMyAyNDUgMTM0LjIgMjI2LjggMTg0bC0zLjMgOS4xTDQzNCAyNjkuN2wzLjMtOS4xYzE4LjEtNDkuOCAyNi42LTEwMi41IDI0LjktMTU1LjVsLS4yLTZ6TTEwNy4yIDExMi45Yy0xMS4xIDE1LjctMi44IDM2LjggMTUuMyA0My40bDcxIDI1LjggMy4zLTkuMWMxOS41LTUzLjYgNDkuMS0xMDMgODcuMS0xNDUuNWw0LTQuNWM2LjItNi45IDEzLjEtMTMgMjAuNS0xOC4yYy03OS42IDIuNS0xNTQuNyA0Mi4yLTIwMS4yIDEwOHpcIl1cbn07XG52YXIgZmFIZWxtZXRVbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWxtZXQtdW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MDNcIiwgXCJNNDc5LjUgMjI0QzQ3MS4yIDk4LjkgMzY3LjIgMCAyNDAgMEMxMDcuNSAwIDAgMTA3LjUgMCAyNDB2NTYuM0MwIDM0NC44IDM5LjIgMzg0IDg3LjcgMzg0SDIwMGgxNC45TDM0My41IDUwNS40YzQuNSA0LjIgMTAuNCA2LjYgMTYuNSA2LjZoOTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzY5LjVsLTEuNS0xLjVWMjg4aDgwIDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyaC0uNXpNMzIwIDQxNy4ybC03OC03My43TDI3NC40IDI4OEgzMjBWNDE3LjJ6TTI4NS4zIDEwMy4xbDM0LjcgNTJWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2OTZjMCA3LjEtNC42IDEzLjMtMTEuNCAxNS4zcy0xNC0uNi0xNy45LTYuNGwtMzQuNy01MlYyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMTEyYzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTYwIDExMnY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYUJ1bGxzZXllID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1bGxzZXllJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMTQwXCIsIFwiTTQ0OCAyNTZBMTkyIDE5MiAwIDEgMCA2NCAyNTZhMTkyIDE5MiAwIDEgMCAzODQgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0yNTYgODBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHpNMjI0IDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbnZhciBmYUJhY29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhY29uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI5MzYzXSwgXCJmN2U1XCIsIFwiTTQzOS4yIDEuMmMxMS4yLTMuMiAyMy4yLS4xIDMxLjQgOC4xTDUxOCA1Ni43bC0yNi41IDcuOWMtNTggMTYuNi05OC4xIDM5LjYtMTI5LjYgNjcuNGMtMzEuMiAyNy41LTUzLjIgNTkuMS03NS4xIDkwLjlsLTIuMyAzLjNDMjQxLjYgMjg4LjcgMTk1IDM1Ni42IDcyLjggNDE3LjdMMzcuOSA0MzUuMiA5LjQgNDA2LjZjLTcuMy03LjMtMTAuNi0xNy42LTktMjcuOHM4LjEtMTguOSAxNy4zLTIzLjVDMTM2LjEgMjk2LjIgMTgwLjkgMjMxIDIyMy4zIDE2OS4zbDIuMy0zLjRjMjEuOC0zMS44IDQ0LjktNjQuOSA3Ny43LTkzLjljMzMuNC0yOS41IDc1LjgtNTMuNiAxMzUuOS03MC44ek02MS44IDQ1OWwyNS40LTEyLjdjMTI5LjUtNjQuNyAxNzkuOS0xMzguMSAyMjMuOC0yMDJsMi4yLTMuM2MyMi4xLTMyLjEgNDIuMS02MC41IDY5LjktODUuMWMyNy41LTI0LjMgNjMuNC00NS4yIDExNy4zLTYwLjZsMCAwIC4yLS4xIDQzLjEtMTIuOSAyMyAyM2M4IDggMTEuMiAxOS43IDguMyAzMC43cy0xMS4zIDE5LjYtMjIuMiAyMi43Yy01MS45IDE0LjgtODUuNiAzNC43LTExMS4xIDU3LjJjLTI2LjEgMjMtNDUuMSA0OS45LTY3LjMgODIuMWwtMi4yIDMuMkMzMjcuOCAzNjUuOSAyNzUuNSA0NDIgMTQyLjMgNTA4LjZjLTEyLjMgNi4yLTI3LjIgMy43LTM2LjktNkw2MS44IDQ1OXpcIl1cbn07XG52YXIgZmFIYW5kUG9pbnREb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtcG9pbnQtZG93bicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjBhN1wiLCBcIk0zMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNzJIMzJWNDgwek0yMjQgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjY0em0tNjQgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzA0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyem0xNjAtOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjR6bS05Ni04OGwwIC42YzkuNC01LjQgMjAuMy04LjYgMzItOC42YzEzLjIgMCAyNS40IDQgMzUuNiAxMC44YzguNy0yNC45IDMyLjUtNDIuOCA2MC40LTQyLjhjMTEuNyAwIDIyLjYgMy4xIDMyIDguNlYxNjBDMzg0IDcxLjYgMzEyLjQgMCAyMjQgMEgxNjIuM0MxMTkuOCAwIDc5LjEgMTYuOSA0OS4xIDQ2LjlMMzcuNSA1OC41QzEzLjUgODIuNSAwIDExNS4xIDAgMTQ5djI3YzAgMzUuMyAyOC43IDY0IDY0IDY0aDg4YzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwSDk2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDU2YzM5LjggMCA3MiAzMi4yIDcyIDcyelwiXVxufTtcbnZhciBmYUFycm93VXBGcm9tQnJhY2tldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC1mcm9tLWJyYWNrZXQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwOWFcIiwgXCJNMjQ2LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMTA5LjMgMTkyIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjEwLjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjh6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0elwiXVxufTtcbnZhciBmYUZvbGRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb2xkZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTMsIDEyODQ0NywgNjE3MTYsIFwiZm9sZGVyLWJsYW5rXCJdLCBcImYwN2JcIiwgXCJNNjQgNDgwSDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjg4Yy0xMC4xIDAtMTkuNi00LjctMjUuNi0xMi44TDI0My4yIDU3LjZDMjMxLjEgNDEuNSAyMTIuMSAzMiAxOTIgMzJINjRDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjR6XCJdXG59O1xudmFyIGZhRm9sZGVyQmxhbmsgPSBmYUZvbGRlcjtcbnZhciBmYUZpbGVXYXZlZm9ybSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXdhdmVmb3JtJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJmaWxlLW1lZGljYWwtYWx0XCJdLCBcImY0NzhcIiwgXCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NFYyODhIMTQ0YzYuMSAwIDExLjYgMy40IDE0LjMgOC44TDE3NiAzMzIuMmw0OS43LTk5LjRjMi43LTUuNCA4LjMtOC44IDE0LjMtOC44czExLjYgMy40IDE0LjMgOC44TDI4MS45IDI4OEgzNTJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMjcyYy02LjEgMC0xMS42LTMuNC0xNC4zLTguOEwyNDAgMjc1LjhsLTQ5LjcgOTkuNGMtMi43IDUuNC04LjMgOC44LTE0LjMgOC44cy0xMS42LTMuNC0xNC4zLTguOEwxMzQuMSAzMjBIMzJWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM1MmMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDk2ek0yODggMFYxMjhINDE2TDI4OCAwelwiXVxufTtcbnZhciBmYUZpbGVNZWRpY2FsQWx0ID0gZmFGaWxlV2F2ZWZvcm07XG52YXIgZmFSYWRpYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmFkaWF0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2I5XCIsIFwiTTIxNiAxODYuN2MtMjMuOSAxMy44LTQwIDM5LjctNDAgNjkuM0wzMiAyNTZDMTQuMyAyNTYtLjIgMjQxLjYgMiAyMjQuMUMxMC43IDE1NCA0Ny44IDkyLjcgMTAxLjMgNTJjMTQuMS0xMC43IDMzLjgtNS4zIDQyLjcgMTBsNzIgMTI0Ljd6TTI1NiAzMzZjMTQuNiAwIDI4LjItMy45IDQwLTEwLjdsNzIgMTI0LjhjOC44IDE1LjMgMy43IDM1LjEtMTIuNiA0MS45Yy0zMC42IDEyLjktNjQuMiAyMC05OS40IDIwcy02OC45LTcuMS05OS40LTIwYy0xNi4zLTYuOS0yMS40LTI2LjYtMTIuNi00MS45bDcyLTEyNC44YzExLjggNi44IDI1LjQgMTAuNyA0MCAxMC43em0yMjQtODBsLTE0NCAwYzAtMjkuNi0xNi4xLTU1LjUtNDAtNjkuM0wzNjggNjJjOC44LTE1LjMgMjguNi0yMC43IDQyLjctMTBjNTMuNiA0MC43IDkwLjYgMTAyIDk5LjQgMTcyLjFjMi4yIDE3LjUtMTIuNCAzMS45LTMwIDMxLjl6TTI1NiAyMDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYUNoYXJ0U2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYXJ0LXNpbXBsZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTQ3M1wiLCBcIk0xNjAgODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDIwOGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODB6TTAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDgwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjcyek0zNjggOTZoMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDM2OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbnZhciBmYU1hcnNTdHJva2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycy1zdHJva2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODk0XSwgXCJmMjI5XCIsIFwiTTM3NiAwYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDMzLjQgMzMuNEwzNzAuMyA5Ni40IDM0NSA3MWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwyNS40IDI1LjRMMzA3LjggMTU5Yy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxYy05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NnM3OC44IDE3NiAxNzYgMTc2czE3Ni03OC44IDE3Ni0xNzZjMC0zNy0xMS40LTcxLjQtMzEtOTkuOGwyOC42LTI4LjZMNDA3IDIwMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTI1LjQtMjUuNCAyMi4xLTIyLjFMNDcxIDE1M2M2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRIMzc2em04OCA0OGgwdjBsMCAwek05NiAzMDRhMTEyIDExMiAwIDEgMSAyMjQgMEExMTIgMTEyIDAgMSAxIDk2IDMwNHpcIl1cbn07XG52YXIgZmFWaWFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTRdLCBcImY0OTJcIiwgXCJNMzQyLjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5LjQgOS40TDI4LjEgMzQyLjZDMTAuMSAzNjAuNiAwIDM4NSAwIDQxMC41VjQxNmMwIDUzIDQzIDk2IDk2IDk2aDUuNWMyNS41IDAgNDkuOS0xMC4xIDY3LjktMjguMUw0NDggMjA1LjNsOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0zMi0zMi05Ni05Ni0zMi0zMnpNMjA1LjMgMjU2TDM1MiAxMDkuMyA0MDIuNyAxNjBsLTk2IDk2SDIwNS4zelwiXVxufTtcbnZhciBmYUdhdWdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dhdWdlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJkYXNoYm9hcmRcIiwgXCJnYXVnZS1tZWRcIiwgXCJ0YWNob21ldGVyLWFsdC1hdmVyYWdlXCJdLCBcImY2MjRcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zVjg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjI5Mi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjNjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMTQ0IDE3NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bS0xNiA4MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek00MDAgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xudmFyIGZhRGFzaGJvYXJkID0gZmFHYXVnZTtcbnZhciBmYUdhdWdlTWVkID0gZmFHYXVnZTtcbnZhciBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlID0gZmFHYXVnZTtcbnZhciBmYVdhbmRNYWdpY1NwYXJrbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dhbmQtbWFnaWMtc3BhcmtsZXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcIm1hZ2ljLXdhbmQtc3BhcmtsZXNcIl0sIFwiZTJjYVwiLCBcIk0yMzQuNyA0Mi43TDE5NyA1Ni44Yy0zIDEuMS01IDQtNSA3LjJzMiA2LjEgNSA3LjJsMzcuNyAxNC4xTDI0OC44IDEyM2MxLjEgMyA0IDUgNy4yIDVzNi4xLTIgNy4yLTVsMTQuMS0zNy43TDMxNSA3MS4yYzMtMS4xIDUtNCA1LTcuMnMtMi02LjEtNS03LjJMMjc3LjMgNDIuNyAyNjMuMiA1Yy0xLjEtMy00LTUtNy4yLTVzLTYuMSAyLTcuMiA1TDIzNC43IDQyLjd6TTQ2LjEgMzk1LjRjLTE4LjcgMTguNy0xOC43IDQ5LjEgMCA2Ny45bDM0LjYgMzQuNmMxOC43IDE4LjcgNDkuMSAxOC43IDY3LjkgMEw1MjkuOSAxMTYuNWMxOC43LTE4LjcgMTguNy00OS4xIDAtNjcuOUw0OTUuMyAxNC4xYy0xOC43LTE4LjctNDkuMS0xOC43LTY3LjkgMEw0Ni4xIDM5NS40ek00ODQuNiA4Mi42bC0xMDUgMTA1LTIzLjMtMjMuMyAxMDUtMTA1IDIzLjMgMjMuM3pNNy41IDExNy4yQzMgMTE4LjkgMCAxMjMuMiAwIDEyOHMzIDkuMSA3LjUgMTAuOEw2NCAxNjBsMjEuMiA1Ni41YzEuNyA0LjUgNiA3LjUgMTAuOCA3LjVzOS4xLTMgMTAuOC03LjVMMTI4IDE2MGw1Ni41LTIxLjJjNC41LTEuNyA3LjUtNiA3LjUtMTAuOHMtMy05LjEtNy41LTEwLjhMMTI4IDk2IDEwNi44IDM5LjVDMTA1LjEgMzUgMTAwLjggMzIgOTYgMzJzLTkuMSAzLTEwLjggNy41TDY0IDk2IDcuNSAxMTcuMnptMzUyIDI1NmMtNC41IDEuNy03LjUgNi03LjUgMTAuOHMzIDkuMSA3LjUgMTAuOEw0MTYgNDE2bDIxLjIgNTYuNWMxLjcgNC41IDYgNy41IDEwLjggNy41czkuMS0zIDEwLjgtNy41TDQ4MCA0MTZsNTYuNS0yMS4yYzQuNS0xLjcgNy41LTYgNy41LTEwLjhzLTMtOS4xLTcuNS0xMC44TDQ4MCAzNTJsLTIxLjItNTYuNWMtMS43LTQuNS02LTcuNS0xMC44LTcuNXMtOS4xIDMtMTAuOCA3LjVMNDE2IDM1MmwtNTYuNSAyMS4yelwiXVxufTtcbnZhciBmYU1hZ2ljV2FuZFNwYXJrbGVzID0gZmFXYW5kTWFnaWNTcGFya2xlcztcbnZhciBmYUUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZScsXG4gIGljb246IFszMjAsIDUxMiwgWzEwMV0sIFwiNDVcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlYyNTYgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NFYyODhIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0Vjk2SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NHpcIl1cbn07XG52YXIgZmFQZW5DbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blbi1jbGlwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJwZW4tYWx0XCJdLCBcImYzMDVcIiwgXCJNNDUzLjMgMTkuM2wzOS40IDM5LjRjMjUgMjUgMjUgNjUuNSAwIDkwLjVsLTUyLjEgNTIuMSAwIDAtMS0xIDAgMC0xNi0xNi05Ni05Ni0xNy0xNyA1Mi4xLTUyLjFjMjUtMjUgNjUuNS0yNSA5MC41IDB6TTI0MSAxMTQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMMTA1IDIxN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwxNzMuMSA4MWMyOC4xLTI4LjEgNzMuNy0yOC4xIDEwMS44IDBMMjg4IDk0LjFsMTcgMTcgOTYgOTYgMTYgMTYgMSAxLTE3IDE3TDIyOS41IDQxMi41Yy00OCA0OC0xMDkuMiA4MC44LTE3NS44IDk0LjFsLTI1IDVjLTcuOSAxLjYtMTYtLjktMjEuNy02LjZzLTguMS0xMy44LTYuNi0yMS43bDUtMjVjMTMuMy02Ni42IDQ2LjEtMTI3LjggOTQuMS0xNzUuOEwyNTQuMSAxMjggMjQxIDExNC45elwiXVxufTtcbnZhciBmYVBlbkFsdCA9IGZhUGVuQ2xpcDtcbnZhciBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0Y2FcIiwgXCJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0czE0LjMgMzIgMzIgMzJoNDB2NjRIMzJWMjg4YzUzIDAgOTYgNDMgOTYgOTZ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzg0YzAtNTMgNDMtOTYgOTYtOTZjNi4zIDAgMTIuNCAuNiAxOC4zIDEuN0MzNjcuMSAyMzEuOCA0MjYuOSAxOTIgNDk2IDE5MmM0Mi41IDAgODEuNiAxNS4xIDExMiA0MC4yVjE2MEg1MzZWOTZoNDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINjR6TTQ4OCA5NnY2NEg0MDhWOTZoODB6TTM2MCA5NnY2NEgyODBWOTZoODB6TTIzMiA5NnY2NEgxNTJWOTZoODB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTAwLCA2MjE0NF0sIFwiZjAwN1wiLCBcIk0yMjQgMjU2QTEyOCAxMjggMCAxIDAgMjI0IDBhMTI4IDEyOCAwIDEgMCAwIDI1NnptLTQ1LjcgNDhDNzkuOCAzMDQgMCAzODMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJINDE4LjNjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjdDNDQ4IDM4My44IDM2OC4yIDMwNCAyNjkuNyAzMDRIMTc4LjN6XCJdXG59O1xudmFyIGZhU2Nob29sQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sLWNpcmNsZS1jaGVjaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2YlwiLCBcIk0zMzcuOCA1LjRDMzI3LTEuOCAzMTMtMS44IDMwMi4yIDUuNEwxNjYuMyA5Nkg0OEMyMS41IDk2IDAgMTE3LjUgMCAxNDRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMyMHYwSDI1NlY0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsLjMgMGguNWMzLjQtMzcuNyAxOC43LTcyLjEgNDIuMi05OS4xQzM1MC4yIDI2MCAzMzUuNiAyNjQgMzIwIDI2NGMtNDguNiAwLTg4LTM5LjQtODgtODhzMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgMTguMy01LjYgMzUuMy0xNS4xIDQ5LjRjMjktMjEgNjQuNi0zMy40IDEwMy4xLTMzLjRjNTkuNSAwIDExMi4xIDI5LjYgMTQ0IDc0LjhWMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ3My43TDMzNy44IDUuNHpNOTYgMTkyaDMyYzguOCAwIDE2IDcuMiAxNiAxNnY2NGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDhjMC04LjggNy4yLTE2IDE2LTE2em0wIDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnpNMzIwIDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMzZWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnpNNjQwIDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tOTkuMy00My4zYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ4MCAzODUuNGw2MC43LTYwLjd6XCJdXG59O1xudmFyIGZhRHVtcHN0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHVtcHN0ZXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY3OTNcIiwgXCJNNDkuNyAzMmMtMTAuNSAwLTE5LjggNi45LTIyLjkgMTYuOUwuOSAxMzNjLS42IDItLjkgNC4xLS45IDYuMUMwIDE1MC43IDkuMyAxNjAgMjAuOSAxNjBoOTRMMTQwLjUgMzJINDkuN3pNMjcyIDE2MFYzMkgxNzMuMUwxNDcuNSAxNjBIMjcyem0zMiAwSDQyOC41TDQwMi45IDMySDMwNFYxNjB6bTE1Ny4xIDBoOTRjMTEuNSAwIDIwLjktOS4zIDIwLjktMjAuOWMwLTIuMS0uMy00LjEtLjktNi4xTDU0OS4yIDQ4LjlDNTQ2LjEgMzguOSA1MzYuOCAzMiA1MjYuMyAzMkg0MzUuNWwyNS42IDEyOHpNMzIgMTkybDQgMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDRMNjQgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJINDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMjAtMTYwaDEyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyaC00bDQtMzJIMzJ6XCJdXG59O1xudmFyIGZhVmFuU2h1dHRsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2YW4tc2h1dHRsZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY1NiwgXCJzaHV0dGxlLXZhblwiXSwgXCJmNWI2XCIsIFwiTTY0IDEwNHY4OGg5NlY5Nkg3MmMtNC40IDAtOCAzLjYtOCA4em00ODIgODhMNDY1LjEgOTZIMzg0djk2SDU0NnptLTIyNiAwVjk2SDIyNHY5Nmg5NnpNNTkyIDM4NEg1NzZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZIMjU2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxMDRDMCA2NC4yIDMyLjIgMzIgNzIgMzJIMTkyIDM1MiA0NjUuMWMxOC45IDAgMzYuOCA4LjMgNDkgMjIuOEw2MjUgMTg2LjVjOS43IDExLjUgMTUgMjYuMSAxNSA0MS4yVjMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OHptLTY0IDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTYwIDQzMmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xudmFyIGZhU2h1dHRsZVZhbiA9IGZhVmFuU2h1dHRsZTtcbnZhciBmYUJ1aWxkaW5nVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy11c2VyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGRhXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg4OS45Yy02LjMtMTAuMi05LjktMjIuMi05LjktMzUuMWMwLTQ2LjkgMjUuOC04Ny44IDY0LTEwOS4yVjI3MS44IDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNTc2IDI3MmE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6TTM1MiA0NzcuMWMwIDE5LjMgMTUuNiAzNC45IDM0LjkgMzQuOUg2MDUuMWMxOS4zIDAgMzQuOS0xNS42IDM0LjktMzQuOWMwLTUxLjQtNDEuNy05My4xLTkzLjEtOTMuMUg0NDUuMWMtNTEuNCAwLTkzLjEgNDEuNy05My4xIDkzLjF6XCJdXG59O1xudmFyIGZhU3F1YXJlQ2FyZXRMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1jYXJldC1sZWZ0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYXJldC1zcXVhcmUtbGVmdFwiXSwgXCJmMTkxXCIsIFwiTTAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZ6TTEyOCAyNTZjMC02LjcgMi44LTEzIDcuNy0xNy42bDExMi0xMDRjNy02LjUgMTcuMi04LjIgMjUuOS00LjRzMTQuNCAxMi41IDE0LjQgMjJsMCAyMDhjMCA5LjUtNS43IDE4LjItMTQuNCAyMnMtMTguOSAyLjEtMjUuOS00LjRsLTExMi0xMDRjLTQuOS00LjUtNy43LTEwLjktNy43LTE3LjZ6XCJdXG59O1xudmFyIGZhQ2FyZXRTcXVhcmVMZWZ0ID0gZmFTcXVhcmVDYXJldExlZnQ7XG52YXIgZmFIaWdobGlnaHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoaWdobGlnaHRlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjU5MVwiLCBcIk0zMTUgMzE1bDE1OC40LTIxNUw0NDQuMSA3MC42IDIyOSAyMjkgMzE1IDMxNXptLTE4NyA1bDAgMFYyNDguM2MwLTE1LjMgNy4yLTI5LjYgMTkuNS0zOC42TDQyMC42IDguNEM0MjggMi45IDQzNyAwIDQ0Ni4yIDBjMTEuNCAwIDIyLjQgNC41IDMwLjUgMTIuNmw1NC44IDU0LjhjOC4xIDguMSAxMi42IDE5IDEyLjYgMzAuNWMwIDkuMi0yLjkgMTguMi04LjQgMjUuNkwzMzQuNCAzOTYuNWMtOSAxMi4zLTIzLjQgMTkuNS0zOC42IDE5LjVIMjI0bC0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01MC43LTUwLjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDEyOCAzMjB6TTcgNDY2LjNsNjMtNjMgNzAuNiA3MC42LTMxIDMxYy00LjUgNC41LTEwLjYgNy0xNyA3SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHYtNC43YzAtNi40IDIuNS0xMi41IDctMTd6XCJdXG59O1xudmFyIGZhS2V5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tleScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI3M10sIFwiZjA4NFwiLCBcIk0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDBTMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTd2ODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNDQ4aDQwYzEzLjMgMCAyNC0xMC43IDI0LTI0VjM4NGg0MGM2LjQgMCAxMi41LTIuNSAxNy03bDMzLjMtMzMuM2MxNi45IDUuNCAzNSA4LjMgNTMuNyA4LjN6TTM3NiA5NmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6XCJdXG59O1xudmFyIGZhQnVsbGhvcm4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVsbGhvcm4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjYsIDEyODM2M10sIFwiZjBhMVwiLCBcIk00ODAgMzJjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlMMzgxLjcgNTNjLTQ4IDQ4LTExMy4xIDc1LTE4MSA3NUgxOTIgMTYwIDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY5NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJsOC43IDBjNjcuOSAwIDEzMyAyNyAxODEgNzVsNDMuNiA0My42YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45czE5LjgtMTYuNiAxOS44LTI5LjZWMzAwLjRjMTguNi04LjggMzItMzIuNSAzMi02MC40cy0xMy40LTUxLjYtMzItNjAuNFYzMnptLTY0IDc2LjdWMjQwIDM3MS4zQzM1Ny4yIDMxNy44IDI4MC41IDI4OCAyMDAuNyAyODhIMTkyVjE5Mmg4LjdjNzkuOCAwIDE1Ni41LTI5LjggMjE1LjMtODMuM3pcIl1cbn07XG52YXIgZmFHbG9iZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnbG9iZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc2MF0sIFwiZjBhY1wiLCBcIk0zNTIgMjU2YzAgMjIuMi0xLjIgNDMuNi0zLjMgNjRIMTYzLjNjLTIuMi0yMC40LTMuMy00MS44LTMuMy02NHMxLjItNDMuNiAzLjMtNjRIMzQ4LjdjMi4yIDIwLjQgMy4zIDQxLjggMy4zIDY0em0yOC44LTY0SDUwMy45YzUuMyAyMC41IDguMSA0MS45IDguMSA2NHMtMi44IDQzLjUtOC4xIDY0SDM4MC44YzIuMS0yMC42IDMuMi00MiAzLjItNjRzLTEuMS00My40LTMuMi02NHptMTEyLjYtMzJIMzc2LjdjLTEwLTYzLjktMjkuOC0xMTcuNC01NS4zLTE1MS42Yzc4LjMgMjAuNyAxNDIgNzcuNSAxNzEuOSAxNTEuNnptLTE0OS4xIDBIMTY3LjdjNi4xLTM2LjQgMTUuNS02OC42IDI3LTk0LjdjMTAuNS0yMy42IDIyLjItNDAuNyAzMy41LTUxLjVDMjM5LjQgMy4yIDI0OC43IDAgMjU2IDBzMTYuNiAzLjIgMjcuOCAxMy44YzExLjMgMTAuOCAyMyAyNy45IDMzLjUgNTEuNWMxMS42IDI2IDIwLjkgNTguMiAyNyA5NC43em0tMjA5IDBIMTguNkM0OC42IDg1LjkgMTEyLjIgMjkuMSAxOTAuNiA4LjRDMTY1LjEgNDIuNiAxNDUuMyA5Ni4xIDEzNS4zIDE2MHpNOC4xIDE5MkgxMzEuMmMtMi4xIDIwLjYtMy4yIDQyLTMuMiA2NHMxLjEgNDMuNCAzLjIgNjRIOC4xQzIuOCAyOTkuNSAwIDI3OC4xIDAgMjU2czIuOC00My41IDguMS02NHpNMTk0LjcgNDQ2LjZjLTExLjYtMjYtMjAuOS01OC4yLTI3LTk0LjZIMzQ0LjNjLTYuMSAzNi40LTE1LjUgNjguNi0yNyA5NC42Yy0xMC41IDIzLjYtMjIuMiA0MC43LTMzLjUgNTEuNUMyNzIuNiA1MDguOCAyNjMuMyA1MTIgMjU2IDUxMnMtMTYuNi0zLjItMjcuOC0xMy44Yy0xMS4zLTEwLjgtMjMtMjcuOS0zMy41LTUxLjV6TTEzNS4zIDM1MmMxMCA2My45IDI5LjggMTE3LjQgNTUuMyAxNTEuNkMxMTIuMiA0ODIuOSA0OC42IDQyNi4xIDE4LjYgMzUySDEzNS4zem0zNTguMSAwYy0zMCA3NC4xLTkzLjYgMTMwLjktMTcxLjkgMTUxLjZjMjUuNS0zNC4yIDQ1LjItODcuNyA1NS4zLTE1MS42SDQ5My40elwiXVxufTtcbnZhciBmYVN5bmFnb2d1ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzeW5hZ29ndWUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzNdLCBcImY2OWJcIiwgXCJNMzA5LjggMy43YzUuOS00LjkgMTQuNi00LjkgMjAuNSAwbDEyMSAxMDAuOEM0NjkuNSAxMTkuNyA0ODAgMTQyLjIgNDgwIDE2NlYyODAuMSA1MTJINDY0IDM1MlY0MTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OTZIMTc2IDE2MFYyODAuMSAxNjZjMC0yMy43IDEwLjUtNDYuMyAyOC44LTYxLjVMMzA5LjggMy43ek01MTIgNTEyVjI0NC41bDI4LjEtMzEuMmMzLTMuNCA3LjQtNS4zIDExLjktNS4zczguOSAxLjkgMTEuOSA1LjNsNjMuOCA3MC45YzcuOSA4LjggMTIuMyAyMC4zIDEyLjMgMzIuMVY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINTEyek0xMjggMjQ0LjVWNTEySDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzMTYuM2MwLTExLjkgNC40LTIzLjMgMTIuMy0zMi4xbDYzLjgtNzAuOWMzLTMuNCA3LjQtNS4zIDExLjktNS4zczguOSAxLjkgMTEuOSA1LjNMMTI4IDI0NC41ek0zMjcgMTI0LjNjLTMuMS01LjQtMTAuOS01LjQtMTMuOSAwbC0xNS45IDI4LjEtMzIuMy0uM2MtNi4yLS4xLTEwLjEgNi43LTcgMTIuMUwyNzQuMyAxOTJsLTE2LjQgMjcuOGMtMy4yIDUuNCAuNyAxMi4xIDcgMTIuMWwzMi4zLS4zTDMxMyAyNTkuN2MzLjEgNS40IDEwLjkgNS40IDEzLjkgMGwxNS45LTI4LjEgMzIuMyAuM2M2LjIgLjEgMTAuMS02LjcgNy0xMi4xTDM2NS43IDE5MmwxNi40LTI3LjhjMy4yLTUuNC0uNy0xMi4xLTctMTIuMWwtMzIuMyAuM0wzMjcgMTI0LjN6XCJdXG59O1xudmFyIGZhUGVyc29uSGFsZkRyZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1oYWxmLWRyZXNzJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTQ4XCIsIFwiTTE2MCAwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnptOCAzNTJWMTI4aDYuOWMzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw1OC4zIDk3YzkuMSAxNS4xIDQuMiAzNC44LTEwLjkgNDMuOXMtMzQuOCA0LjItNDMuOS0xMC45TDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyaDB6TTU4LjIgMTgyLjNjMTkuOS0zMy4xIDU1LjMtNTMuNSA5My44LTU0LjNWMzg0aDB2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0SDcwLjJjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xTDkzLjMgMjQ4LjEgNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDUzLjYtODkuMnpcIl1cbn07XG52YXIgZmFSb2FkQnJpZGdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvYWQtYnJpZGdlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTYzXCIsIFwiTTM1MiAwSDYwOGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDgwIDIwMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyMjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0IDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjM4NHpNNDgwIDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjY0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zMiA5NkgyODh2NjRIMjQ4djY0aDQwdjk2Yy01MyAwLTk2IDQzLTk2IDk2djY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtNTMtNDMtOTYtOTYtOTZWMjI0SDcyVjE2MEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMTY4IDY0SDEyMHY2NGg4MFYxNjB6XCJdXG59O1xudmFyIGZhTG9jYXRpb25BcnJvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NhdGlvbi1hcnJvdycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjEyNFwiLCBcIk00MjkuNiA5Mi4xYzQuOS0xMS45IDIuMS0yNS42LTctMzQuN3MtMjIuOC0xMS45LTM0LjctN2wtMzUyIDE0NGMtMTQuMiA1LjgtMjIuMiAyMC44LTE5LjMgMzUuOHMxNi4xIDI1LjggMzEuNCAyNS44SDIyNFY0MzJjMCAxNS4zIDEwLjggMjguNCAyNS44IDMxLjRzMzAtNS4xIDM1LjgtMTkuM2wxNDQtMzUyelwiXVxufTtcbnZhciBmYUMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYycsXG4gIGljb246IFszODQsIDUxMiwgWzk5XSwgXCI0M1wiLCBcIk0zMjkuMSAxNDIuOWMtNjIuNS02Mi41LTE1NS44LTYyLjUtMjE4LjMgMHMtNjIuNSAxNjMuOCAwIDIyNi4zczE1NS44IDYyLjUgMjE4LjMgMGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy04Ny41IDg3LjUtMjIxLjMgODcuNS0zMDguOCAwcy04Ny41LTIyOS4zIDAtMzE2LjhzMjIxLjMtODcuNSAzMDguOCAwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwelwiXVxufTtcbnZhciBmYVRhYmxldEJ1dHRvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZXQtYnV0dG9uJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMTBhXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyNCA0MDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUJ1aWxkaW5nTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1sb2NrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGQ2XCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg4OC42Yy01LjQtOS40LTguNi0yMC4zLTguNi0zMlYzNTJjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjI3MmMwLTMwLjUgMTIuMi01OC4yIDMyLTc4LjRWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek04MCA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMTEyek0yNzIgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2ek00NjQgMjQwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQzMlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbnZhciBmYVBpenphU2xpY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGl6emEtc2xpY2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY4MThcIiwgXCJNMTY5LjcgLjljLTIyLjgtMS42LTQxLjkgMTQtNDcuNSAzNC43TDExMC40IDgwYy41IDAgMS4xIDAgMS42IDBjMTc2LjcgMCAzMjAgMTQzLjMgMzIwIDMyMGMwIC41IDAgMS4xIDAgMS42bDQ0LjQtMTEuOGMyMC44LTUuNSAzNi4zLTI0LjcgMzQuNy00Ny41QzQ5OC41IDE1OS41IDM1Mi41IDEzLjUgMTY5LjcgLjl6TTM5OS44IDQxMC4yYy4xLTMuNCAuMi02LjggLjItMTAuMmMwLTE1OS4xLTEyOC45LTI4OC0yODgtMjg4Yy0zLjQgMC02LjggLjEtMTAuMiAuMkwuNSA0OTEuOWMtMS41IDUuNSAuMSAxMS40IDQuMSAxNS40czkuOSA1LjYgMTUuNCA0LjFMMzk5LjggNDEwLjJ6TTE3NiAyMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNOTYgMzg0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhTW9uZXlCaWxsV2F2ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsLXdhdmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1M2FcIiwgXCJNMCAxMTIuNVY0MjIuM2MwIDE4IDEwLjEgMzUgMjcgNDEuM2M4NyAzMi41IDE3NCAxMC4zIDI2MS0xMS45Yzc5LjgtMjAuMyAxNTkuNi00MC43IDIzOS4zLTE4LjljMjMgNi4zIDQ4LjctOS41IDQ4LjctMzMuNFY4OS43YzAtMTgtMTAuMS0zNS0yNy00MS4zQzQ2MiAxNS45IDM3NSAzOC4xIDI4OCA2MC4zQzIwOC4yIDgwLjYgMTI4LjQgMTAwLjkgNDguNyA3OS4xQzI1LjYgNzIuOCAwIDg4LjYgMCAxMTIuNXpNMjg4IDM1MmMtNDQuMiAwLTgwLTQzLTgwLTk2czM1LjgtOTYgODAtOTZzODAgNDMgODAgOTZzLTM1LjggOTYtODAgOTZ6TTY0IDM1MmMzNS4zIDAgNjQgMjguNyA2NCA2NEg2NFYzNTJ6bTY0LTIwOGMwIDM1LjMtMjguNyA2NC02NCA2NFYxNDRoNjR6TTUxMiAzMDR2NjRINDQ4YzAtMzUuMyAyOC43LTY0IDY0LTY0ek00NDggOTZoNjR2NjRjLTM1LjMgMC02NC0yOC43LTY0LTY0elwiXVxufTtcbnZhciBmYUNoYXJ0QXJlYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1hcmVhJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcmVhLWNoYXJ0XCJdLCBcImYxZmVcIiwgXCJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRWNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwSDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjY0em05NiAyODhINDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI1MS44YzAtNy42LTIuNy0xNS03LjctMjAuOGwtNjUuOC03Ni44Yy0xMi4xLTE0LjItMzMuNy0xNS00Ni45LTEuOGwtMjEgMjFjLTEwIDEwLTI2LjQgOS4yLTM1LjQtMS42bC0zOS4yLTQ3Yy0xMi42LTE1LjEtMzUuNy0xNS40LTQ4LjctLjZMMTM1LjkgMjE1Yy01LjEgNS44LTcuOSAxMy4zLTcuOSAyMS4xdjg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyelwiXVxufTtcbnZhciBmYUFyZWFDaGFydCA9IGZhQ2hhcnRBcmVhO1xudmFyIGZhSG91c2VGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGRcIiwgXCJNNDgwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjE5MiA1MTJoNjRWMTkySDYyNGM4LjggMCAxNi03LjIgMTYtMTZWNDhjMC04LjgtNy4yLTE2LTE2LTE2SDUxMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDE2IDE1OUwyNzYuOCAzOS43Yy0xMi0xMC4zLTI5LjctMTAuMy00MS43IDBsLTIyNCAxOTJDMSAyNDAuNC0yLjcgMjU0LjUgMiAyNjcuMVMxOC42IDI4OCAzMiAyODhINjRWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NC43bC4yIDBoLTFWMTU5elwiXVxufTtcbnZhciBmYVBlcnNvbkNpcmNsZU1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaXJjbGUtbWludXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NDBcIiwgXCJNMTEyIDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2LjlMNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZoMjkuN2MzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw0NC45IDc0LjdjLTE2LjEgMTcuNi0yOC42IDM4LjUtMzYuNiA2MS41Yy0xLjktMS44LTMuNS0zLjktNC45LTYuM0wyMzIgMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgxNTJ6bTEzNiAxNmExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMjQgMGMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDQ5NmM4LjggMCAxNi03LjIgMTYtMTZ6XCJdXG59O1xudmFyIGZhQmFuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY4MywgXCJjYW5jZWxcIl0sIFwiZjA1ZVwiLCBcIk0zNjcuMiA0MTIuNUw5OS41IDE0NC44Qzc3LjEgMTc2LjEgNjQgMjE0LjUgNjQgMjU2YzAgMTA2IDg2IDE5MiAxOTIgMTkyYzQxLjUgMCA3OS45LTEzLjEgMTExLjItMzUuNXptNDUuMy00NS4zQzQzNC45IDMzNS45IDQ0OCAyOTcuNSA0NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyYy00MS41IDAtNzkuOSAxMy4xLTExMS4yIDM1LjVMNDEyLjUgMzY3LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnpcIl1cbn07XG52YXIgZmFDYW5jZWwgPSBmYUJhbjtcbnZhciBmYUNhbWVyYVJvdGF0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYW1lcmEtcm90YXRlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMGQ4XCIsIFwiTTIxMy4xIDY0LjhMMjAyLjcgOTZIMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MGMwLTM1LjMtMjguNy02NC02NC02NEg0MzcuM0w0MjYuOSA2NC44QzQyMC40IDQ1LjIgNDAyLjEgMzIgMzgxLjQgMzJIMjU4LjZjLTIwLjcgMC0zOSAxMy4yLTQ1LjUgMzIuOHpNNDQ4IDI1NmMwIDguOC03LjIgMTYtMTYgMTZIMzU1LjNjLTYuMiAwLTExLjMtNS4xLTExLjMtMTEuM2MwLTMgMS4yLTUuOSAzLjMtOEwzNzEgMjI5Yy0xMy42LTEzLjQtMzEuOS0yMS01MS0yMWMtMTkuMiAwLTM3LjcgNy42LTUxLjMgMjEuM0wyNDkgMjQ5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDE5LjctMTkuN0MyNTcuNCAxNzIuNyAyODggMTYwIDMyMCAxNjBjMzEuOCAwIDYyLjQgMTIuNiA4NSAzNWwyMy43LTIzLjdjMi4xLTIuMSA1LTMuMyA4LTMuM2M2LjIgMCAxMS4zIDUuMSAxMS4zIDExLjNWMjU2ek0xOTIgMzIwYzAtOC44IDcuMi0xNiAxNi0xNmg3Ni43YzYuMiAwIDExLjMgNS4xIDExLjMgMTEuM2MwIDMtMS4yIDUuOS0zLjMgOEwyNjkgMzQ3YzEzLjYgMTMuNCAzMS45IDIxIDUxIDIxYzE5LjIgMCAzNy43LTcuNiA1MS4zLTIxLjNMMzkxIDMyN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTE5LjcgMTkuN0MzODIuNiA0MDMuMyAzNTIgNDE2IDMyMCA0MTZjLTMxLjggMC02Mi40LTEyLjYtODUtMzVsLTIzLjcgMjMuN2MtMi4xIDIuMS01IDMuMy04IDMuM2MtNi4yIDAtMTEuMy01LjEtMTEuMy0xMS4zVjMyMHpcIl1cbn07XG52YXIgZmFTcHJheUNhblNwYXJrbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NwcmF5LWNhbi1zcGFya2xlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYWlyLWZyZXNoZW5lclwiXSwgXCJmNWQwXCIsIFwiTTk2IDMydjk2SDIyNFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjhDMTEwLjMgMCA5NiAxNC4zIDk2IDMyem0wIDEyOGMtNTMgMC05NiA0My05NiA5NlY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhIMjcyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1NmMwLTUzLTQzLTk2LTk2LTk2SDk2em02NCA5NmE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNMzg0IDQ4YzAtMS40LTEtMy0yLjItMy42TDM1MiAzMiAzMzkuNiAyLjJDMzM5IDEgMzM3LjQgMCAzMzYgMHMtMyAxLTMuNiAyLjJMMzIwIDMyIDI5MC4yIDQ0LjRDMjg5IDQ1IDI4OCA0Ni42IDI4OCA0OGMwIDEuNCAxIDMgMi4yIDMuNkwzMjAgNjRsMTIuNCAyOS44QzMzMyA5NSAzMzQuNiA5NiAzMzYgOTZzMy0xIDMuNi0yLjJMMzUyIDY0bDI5LjgtMTIuNEMzODMgNTEgMzg0IDQ5LjQgMzg0IDQ4em03Ni40IDQ1LjhDNDYxIDk1IDQ2Mi42IDk2IDQ2NCA5NnMzLTEgMy42LTIuMkw0ODAgNjRsMjkuOC0xMi40QzUxMSA1MSA1MTIgNDkuNCA1MTIgNDhjMC0xLjQtMS0zLTIuMi0zLjZMNDgwIDMyIDQ2Ny42IDIuMkM0NjcgMSA0NjUuNCAwIDQ2NCAwcy0zIDEtMy42IDIuMkw0NDggMzIgNDE4LjIgNDQuNEM0MTcgNDUgNDE2IDQ2LjYgNDE2IDQ4YzAgMS40IDEgMyAyLjIgMy42TDQ0OCA2NGwxMi40IDI5Ljh6bTcuMiAxMDAuNGMtLjYtMS4yLTIuMi0yLjItMy42LTIuMnMtMyAxLTMuNiAyLjJMNDQ4IDIyNGwtMjkuOCAxMi40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42YzAgMS40IDEgMyAyLjIgMy42TDQ0OCAyNTZsMTIuNCAyOS44Yy42IDEuMiAyLjIgMi4yIDMuNiAyLjJzMy0xIDMuNi0yLjJMNDgwIDI1NmwyOS44LTEyLjRjMS4yLS42IDIuMi0yLjIgMi4yLTMuNmMwLTEuNC0xLTMtMi4yLTMuNkw0ODAgMjI0bC0xMi40LTI5Ljh6TTQ0OCAxNDRjMC0xLjQtMS0zLTIuMi0zLjZMNDE2IDEyOCA0MDMuNiA5OC4yQzQwMyA5NyA0MDEuNCA5NiA0MDAgOTZzLTMgMS0zLjYgMi4yTDM4NCAxMjhsLTI5LjggMTIuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNmMwIDEuNCAxIDMgMi4yIDMuNkwzODQgMTYwbDEyLjQgMjkuOGMuNiAxLjIgMi4yIDIuMiAzLjYgMi4yczMtMSAzLjYtMi4yTDQxNiAxNjBsMjkuOC0xMi40YzEuMi0uNiAyLjItMi4yIDIuMi0zLjZ6XCJdXG59O1xudmFyIGZhQWlyRnJlc2hlbmVyID0gZmFTcHJheUNhblNwYXJrbGVzO1xudmFyIGZhU3RhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTEwODgsIDYxNDQ2XSwgXCJmMDA1XCIsIFwiTTMxNi45IDE4QzMxMS42IDcgMzAwLjQgMCAyODguMSAwcy0yMy40IDctMjguOCAxOEwxOTUgMTUwLjMgNTEuNCAxNzEuNWMtMTIgMS44LTIyIDEwLjItMjUuNyAyMS43cy0uNyAyNC4yIDcuOSAzMi43TDEzNy44IDMyOSAxMTMuMiA0NzQuN2MtMiAxMiAzIDI0LjIgMTIuOSAzMS4zczIzIDggMzMuOCAyLjNsMTI4LjMtNjguNSAxMjguMyA2OC41YzEwLjggNS43IDIzLjkgNC45IDMzLjgtMi4zczE0LjktMTkuMyAxMi45LTMxLjNMNDM4LjUgMzI5IDU0Mi43IDIyNS45YzguNi04LjUgMTEuNy0yMS4yIDcuOS0zMi43cy0xMy43LTE5LjktMjUuNy0yMS43TDM4MS4yIDE1MC4zIDMxNi45IDE4elwiXVxufTtcbnZhciBmYVJlcGVhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZXBlYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNTddLCBcImYzNjNcIiwgXCJNMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTUzIDQzLTk2IDk2LTk2SDMyMHYzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlTMzIwIDE5LjEgMzIwIDMyVjY0SDE2MEM3MS42IDY0IDAgMTM1LjYgMCAyMjR6bTUxMiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDUzLTQzIDk2LTk2IDk2SDE5MlYzNTJjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42VjQ0OEgzNTJjODguNCAwIDE2MC03MS42IDE2MC0xNjB6XCJdXG59O1xudmFyIGZhQ3Jvc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3Jvc3MnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgzMjcsIDEwMDEzXSwgXCJmNjU0XCIsIFwiTTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OHY4MEg0OGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2MzJjMCAyNi41IDIxLjUgNDggNDggNDhoODBWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1Nmg4MGMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjU2VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDE3NnpcIl1cbn07XG52YXIgZmFCb3ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjMwXSwgXCJmNDY2XCIsIFwiTTUwLjcgNTguNUwwIDE2MEgyMDhWMzJIOTMuN0M3NS41IDMyIDU4LjkgNDIuMyA1MC43IDU4LjV6TTI0MCAxNjBINDQ4TDM5Ny4zIDU4LjVDMzg5LjEgNDIuMyAzNzIuNSAzMiAzNTQuMyAzMkgyNDBWMTYwem0yMDggMzJIMFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MnpcIl1cbn07XG52YXIgZmFWZW51c01hcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmVudXMtbWFycycsXG4gIGljb246IFs2NDAsIDUxMiwgWzk4OTJdLCBcImYyMjhcIiwgXCJNMTc2IDI4OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTM1MiAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xVjM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMDh2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDExMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgzMlYzNDkuMUM2Mi4xIDMzNC4xIDAgMjYyLjMgMCAxNzZDMCA3OC44IDc4LjggMCAxNzYgMHMxNzYgNzguOCAxNzYgMTc2ek0yNzEuOSAzNjAuNmMxOS4zLTEwLjEgMzYuOS0yMy4xIDUyLjEtMzguNGMyMCAxOC41IDQ2LjcgMjkuOCA3Ni4xIDI5LjhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJzLTUwLjEtMTEyLTExMi0xMTJjLTcuMiAwLTE0LjMgLjctMjEuMSAyYy00LjktMjEuNS0xMy00MS43LTI0LTYwLjJDMzY5LjMgNjYgMzg0LjQgNjQgNDAwIDY0YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsMjAuNi0yMC42TDQ4NyA0MWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM0OTQuMyAwIDUwNCAwSDYxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxMzZjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzMuNC0zMy40TDU0NSAxNDAuMmMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44YzAgOTcuMi03OC44IDE3Ni0xNzYgMTc2Yy01MC41IDAtOTYtMjEuMy0xMjguMS01NS40elwiXVxufTtcbnZhciBmYUFycm93UG9pbnRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1wb2ludGVyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJtb3VzZS1wb2ludGVyXCJdLCBcImYyNDVcIiwgXCJNMCA1NS4yVjQyNmMwIDEyLjIgOS45IDIyIDIyIDIyYzYuMyAwIDEyLjQtMi43IDE2LjYtNy41TDEyMS4yIDM0Nmw1OC4xIDExNi4zYzcuOSAxNS44IDI3LjEgMjIuMiA0Mi45IDE0LjNzMjIuMi0yNy4xIDE0LjMtNDIuOUwxNzkuOCAzMjBIMjk3LjljMTIuMiAwIDIyLjEtOS45IDIyLjEtMjIuMWMwLTYuMy0yLjctMTIuMy03LjQtMTYuNUwzOC42IDM3LjlDMzQuMyAzNC4xIDI4LjkgMzIgMjMuMiAzMkMxMC40IDMyIDAgNDIuNCAwIDU1LjJ6XCJdXG59O1xudmFyIGZhTW91c2VQb2ludGVyID0gZmFBcnJvd1BvaW50ZXI7XG52YXIgZmFNYXhpbWl6ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXhpbWl6ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZXhwYW5kLWFycm93cy1hbHRcIl0sIFwiZjMxZVwiLCBcIk0yMDAgMzJINTZDNDIuNyAzMiAzMiA0Mi43IDMyIDU2VjIwMGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsNDAtNDAgNzkgNzktNzkgNzlMNzMgMjk1Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzMyIDMwMi4zIDMyIDMxMlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRIMjAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDAtNDAgNzktNzkgNzkgNzktNDAgNDBjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJzMTIuNSAxNC44IDIyLjIgMTQuOEg0NTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMnMtMTkuMy0xLjctMjYuMiA1LjJsLTQwIDQwLTc5LTc5IDc5LTc5IDQwIDQwYzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMlY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgzMTJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsNDAgNDAtNzkgNzktNzktNzkgNDAtNDBjNi45LTYuOSA4LjktMTcuMiA1LjItMjYuMlMyMDkuNyAzMiAyMDAgMzJ6XCJdXG59O1xudmFyIGZhRXhwYW5kQXJyb3dzQWx0ID0gZmFNYXhpbWl6ZTtcbnZhciBmYUNoYXJnaW5nU3RhdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFyZ2luZy1zdGF0aW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNWU3XCIsIFwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRWNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzMDRoMTZjMjIuMSAwIDQwIDE3LjkgNDAgNDB2MzJjMCAzOS44IDMyLjIgNzIgNzIgNzJzNzItMzIuMiA3Mi03MlYyNTIuM2MzMi41LTEwLjIgNTYtNDAuNSA1Ni03Ni4zVjE0NGMwLTguOC03LjItMTYtMTYtMTZINTQ0VjgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djQ4SDQ4MFY4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY0OEg0MzJjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDM1LjggMjMuNSA2Ni4xIDU2IDc2LjNWMzc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM0NGMwLTQ4LjYtMzkuNC04OC04OC04OEgzMjBWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRIOTZ6TTIxNi45IDgyLjdjNiA0IDguNSAxMS41IDYuMyAxOC4zbC0yNSA3NC45SDI1NmM2LjcgMCAxMi43IDQuMiAxNSAxMC40cy41IDEzLjMtNC42IDE3LjdsLTExMiA5NmMtNS41IDQuNy0xMy40IDUuMS0xOS4zIDEuMXMtOC41LTExLjUtNi4zLTE4LjNsMjUtNzQuOUg5NmMtNi43IDAtMTIuNy00LjItMTUtMTAuNHMtLjUtMTMuMyA0LjYtMTcuN2wxMTItOTZjNS41LTQuNyAxMy40LTUuMSAxOS4zLTEuMXpcIl1cbn07XG52YXIgZmFTaGFwZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hhcGVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0cmlhbmdsZS1jaXJjbGUtc3F1YXJlXCJdLCBcImY2MWZcIiwgXCJNMzE1LjQgMTUuNUMzMDkuNyA1LjkgMjk5LjIgMCAyODggMHMtMjEuNyA1LjktMjcuNCAxNS41bC05NiAxNjBjLTUuOSA5LjktNi4xIDIyLjItLjQgMzIuMnMxNi4zIDE2LjIgMjcuOCAxNi4ySDM4NGMxMS41IDAgMjIuMi02LjIgMjcuOC0xNi4yczUuNS0yMi4zLS40LTMyLjJsLTk2LTE2MHpNMjg4IDMxMlY0NTZjMCAyMi4xIDE3LjkgNDAgNDAgNDBINDcyYzIyLjEgMCA0MC0xNy45IDQwLTQwVjMxMmMwLTIyLjEtMTcuOS00MC00MC00MEgzMjhjLTIyLjEgMC00MCAxNy45LTQwIDQwek0xMjggNTEyYTEyOCAxMjggMCAxIDAgMC0yNTYgMTI4IDEyOCAwIDEgMCAwIDI1NnpcIl1cbn07XG52YXIgZmFUcmlhbmdsZUNpcmNsZVNxdWFyZSA9IGZhU2hhcGVzO1xudmFyIGZhU2h1ZmZsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaHVmZmxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjU2LCBcInJhbmRvbVwiXSwgXCJmMDc0XCIsIFwiTTQwMy44IDM0LjRjMTItNSAyNS43LTIuMiAzNC45IDYuOWw2NCA2NGM2IDYgOS40IDE0LjEgOS40IDIyLjZzLTMuNCAxNi42LTkuNCAyMi42bC02NCA2NGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlzLTE5LjgtMTYuNi0xOS44LTI5LjZWMTYwSDM1MmMtMTAuMSAwLTE5LjYgNC43LTI1LjYgMTIuOEwyODQgMjI5LjMgMjQ0IDE3NmwzMS4yLTQxLjZDMjkzLjMgMTEwLjIgMzIxLjggOTYgMzUyIDk2aDMyVjY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZ6TTE2NCAyODIuN0wyMDQgMzM2bC0zMS4yIDQxLjZDMTU0LjcgNDAxLjggMTI2LjIgNDE2IDk2IDQxNkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg5NmMxMC4xIDAgMTkuNi00LjcgMjUuNi0xMi44TDE2NCAyODIuN3ptMjc0LjYgMTg4Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNlY0MTZIMzUyYy0zMC4yIDAtNTguNy0xNC4yLTc2LjgtMzguNEwxMjEuNiAxNzIuOGMtNi04LjEtMTUuNS0xMi44LTI1LjYtMTIuOEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg5NmMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNEwzMjYuNCAzMzkuMmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44aDMyVjMyMGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTY0IDY0elwiXVxufTtcbnZhciBmYVJhbmRvbSA9IGZhU2h1ZmZsZTtcbnZhciBmYVBlcnNvblJ1bm5pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXJ1bm5pbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MzksIFwicnVubmluZ1wiXSwgXCJmNzBjXCIsIFwiTTMyMCA0OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xMjUuNyAxNzUuNWM5LjktOS45IDIzLjQtMTUuNSAzNy41LTE1LjVjMS45IDAgMy44IC4xIDUuNiAuM0wxMzcuNiAyNTRjLTkuMyAyOCAxLjcgNTguOCAyNi44IDc0LjVsODYuMiA1My45LTI1LjQgODguOGMtNC45IDE3IDUgMzQuNyAyMiAzOS42czM0LjctNSAzOS42LTIybDI4LjctMTAwLjRjNS45LTIwLjYtMi42LTQyLjYtMjAuNy01My45TDIzOCAyOTlsMzAuOS04Mi40IDUuMSAxMi4zQzI4OSAyNjQuNyAzMjMuOSAyODggMzYyLjcgMjg4SDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNjIuN2MtMTIuOSAwLTI0LjYtNy44LTI5LjUtMTkuN2wtNi4zLTE1Yy0xNC42LTM1LjEtNDQuMS02MS45LTgwLjUtNzMuMWwtNDguNy0xNWMtMTEuMS0zLjQtMjIuNy01LjItMzQuNC01LjJjLTMxIDAtNjAuOCAxMi4zLTgyLjcgMzQuM0w1Ny40IDE1My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDIzLjEtMjMuMXpNOTEuMiAzNTJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNjkuNmMxOSAwIDM2LjItMTEuMiA0My45LTI4LjVMMTU3IDM2MS42bC05LjUtNmMtMTcuNS0xMC45LTMwLjUtMjYuOC0zNy45LTQ0LjlMOTEuMiAzNTJ6XCJdXG59O1xudmFyIGZhUnVubmluZyA9IGZhUGVyc29uUnVubmluZztcbnZhciBmYU1vYmlsZVJldHJvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vYmlsZS1yZXRybycsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTUyN1wiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptNjQgOTZ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTgwIDM1MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDU2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTU2LTU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNTZhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptNTYtNTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA1NmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xMjggNDhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMTI4elwiXVxufTtcbnZhciBmYUdyaXBMaW5lc1ZlcnRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyaXAtbGluZXMtdmVydGljYWwnLFxuICBpY29uOiBbMTkyLCA1MTIsIFtdLCBcImY3YTVcIiwgXCJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNjR6bTEyOCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0elwiXVxufTtcbnZhciBmYVNwaWRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcGlkZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzNzVdLCBcImY3MTdcIiwgXCJNMTU4LjQgMzIuNmM0LjgtMTIuNC0xLjQtMjYuMy0xMy44LTMxcy0yNi4zIDEuNC0zMSAxMy44TDgxLjEgMTAwYy03LjkgMjAuNy0zIDQ0LjEgMTIuNyA1OS43bDU3LjQgNTcuNEw3MC44IDE5MC4zYy0yLjQtLjgtNC4zLTIuNy01LjEtNS4xTDQ2LjggMTI4LjRDNDIuNiAxMTUuOCAyOSAxMDkgMTYuNCAxMTMuMlMtMyAxMzEgMS4yIDE0My42bDE4LjkgNTYuOGM1LjYgMTYuNyAxOC43IDI5LjggMzUuNCAzNS40TDExNi4xIDI1NiA1NS42IDI3Ni4yYy0xNi43IDUuNi0yOS44IDE4LjctMzUuNCAzNS40TDEuMiAzNjguNEMtMyAzODEgMy44IDM5NC42IDE2LjQgMzk4LjhzMjYuMi0yLjYgMzAuNC0xNS4ybDE4LjktNTYuOGMuOC0yLjQgMi43LTQuMyA1LjEtNS4xbDgwLjQtMjYuOEw5My43IDM1Mi4zQzc4LjEgMzY4IDczLjEgMzkxLjQgODEuMSA0MTJsMzIuNSA4NC42YzQuOCAxMi40IDE4LjYgMTguNSAzMSAxMy44czE4LjUtMTguNiAxMy44LTMxbC0zMi41LTg0LjZjLTEuMS0zLS40LTYuMyAxLjgtOC41TDE2MCAzNTMuOWMxIDUyLjEgNDMuNiA5NC4xIDk2IDk0LjFzOTUtNDEuOSA5Ni05NC4xbDMyLjMgMzIuM2MyLjIgMi4yIDIuOSA1LjYgMS44IDguNWwtMzIuNSA4NC42Yy00LjggMTIuNCAxLjQgMjYuMyAxMy44IDMxczI2LjMtMS40IDMxLTEzLjhMNDMwLjkgNDEyYzcuOS0yMC43IDMtNDQuMS0xMi43LTU5LjdsLTU3LjQtNTcuNCA4MC40IDI2LjhjMi40IC44IDQuMyAyLjcgNS4xIDUuMWwxOC45IDU2LjhjNC4yIDEyLjYgMTcuOCAxOS40IDMwLjQgMTUuMnMxOS40LTE3LjggMTUuMi0zMC40bC0xOC45LTU2LjhjLTUuNi0xNi43LTE4LjctMjkuOC0zNS40LTM1LjRMMzk1LjkgMjU2bDYwLjUtMjAuMmMxNi43LTUuNiAyOS44LTE4LjcgMzUuNC0zNS40bDE4LjktNTYuOGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMTguOSA1Ni44Yy0uOCAyLjQtMi43IDQuMy01LjEgNS4xbC04MC40IDI2LjggNTcuNC01Ny40YzE1LjYtMTUuNiAyMC42LTM5IDEyLjctNTkuN0wzOTguNCAxNS40QzM5My42IDMgMzc5LjgtMy4yIDM2Ny40IDEuNnMtMTguNSAxOC42LTEzLjggMzFsMzIuNSA4NC42YzEuMSAzIC40IDYuMy0xLjggOC41TDMzNiAxNzQuMVYxNjBjMC0zMS44LTE4LjYtNTkuMy00NS41LTcyLjJjLTkuMS00LjQtMTguNSAzLjMtMTguNSAxMy40VjExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYxMDEuMmMwLTEwLjEtOS40LTE3LjctMTguNS0xMy40QzE5NC42IDEwMC43IDE3NiAxMjguMiAxNzYgMTYwdjE0LjFsLTQ4LjMtNDguM2MtMi4yLTIuMi0yLjktNS42LTEuOC04LjVsMzIuNS04NC42elwiXVxufTtcbnZhciBmYUhhbmRzQm91bmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHMtYm91bmQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZjlcIiwgXCJNOTYgMzJDOTYgMTQuMyA4MS43IDAgNjQgMFMzMiAxNC4zIDMyIDMyVjk2djU5LjEgLjdWMTkydjIxLjljMCAxNC4yIDUuMSAyNy45IDE0LjMgMzguN0wxMzEuNiAzNTJIMTI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDMySDI4OGg2NEg0ODBoMzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRoLTMuNmw4NS4zLTk5LjVjOS4yLTEwLjggMTQuMy0yNC41IDE0LjMtMzguN1YxOTIgMTU1Ljh2LS43Vjk2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjk2djQ4LjhsLTY5LjMgOTIuNGMtNS43IDcuNi0xNi4xIDkuNi0yNC4yIDQuOGMtOS43LTUuNy0xMi4xLTE4LjctNS4xLTI3LjVMNDczIDE4MGMxMC44LTEzLjUgOC45LTMzLjMtNC40LTQ0LjVzLTMzLTkuOC00NC41IDMuMmwtNDYuNyA1Mi41QzM2MSAyMDkuNyAzNTIgMjMzLjQgMzUyIDI1OC4xVjMyMHYzMkgyODhWMzIwIDI1OC4xYzAtMjQuNi05LTQ4LjQtMjUuNC02Ni44bC00Ni43LTUyLjVjLTExLjUtMTMtMzEuMy0xNC40LTQ0LjUtMy4ycy0xNS4yIDMwLjktNC40IDQ0LjVsMjcuNiAzNC41YzcgOC44IDQuNyAyMS44LTUuMSAyNy41Yy04LjEgNC44LTE4LjYgMi43LTI0LjItNC44TDk2IDE0NC44Vjk2IDMyem02NCA0NDh2MzJIMjg4VjQ4MGg2NHYzMkg0ODBWNDgwaDMyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDQ4MCAzNTIgMjg4IDE2MCAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMzJ6XCJdXG59O1xudmFyIGZhRmlsZUludm9pY2VEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1pbnZvaWNlLWRvbGxhcicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU3MVwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTY0IDgwYzAtOC44IDcuMi0xNiAxNi0xNmg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2em0wIDY0YzAtOC44IDcuMi0xNiAxNi0xNmg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2em0xMjggNzJjOC44IDAgMTYgNy4yIDE2IDE2djE3LjNjOC41IDEuMiAxNi43IDMuMSAyNC4xIDUuMWM4LjUgMi4zIDEzLjYgMTEgMTEuMyAxOS42cy0xMSAxMy42LTE5LjYgMTEuM2MtMTEuMS0zLTIyLTUuMi0zMi4xLTUuM2MtOC40LS4xLTE3LjQgMS44LTIzLjYgNS41Yy01LjcgMy40LTguMSA3LjMtOC4xIDEyLjhjMCAzLjcgMS4zIDYuNSA3LjMgMTAuMWM2LjkgNC4xIDE2LjYgNy4xIDI5LjIgMTAuOWwuNSAuMSAwIDAgMCAwYzExLjMgMy40IDI1LjMgNy42IDM2LjMgMTQuNmMxMi4xIDcuNiAyMi40IDE5LjcgMjIuNyAzOC4yYy4zIDE5LjMtOS42IDMzLjMtMjIuOSA0MS42Yy03LjcgNC44LTE2LjQgNy42LTI1LjEgOS4xVjQ0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY0MjIuMmMtMTEuMi0yLjEtMjEuNy01LjctMzAuOS04LjlsMCAwIDAgMGMtMi4xLS43LTQuMi0xLjQtNi4yLTIuMWMtOC40LTIuOC0xMi45LTExLjktMTAuMS0yMC4yczExLjktMTIuOSAyMC4yLTEwLjFjMi41IC44IDQuOCAxLjYgNy4xIDIuNGwwIDAgMCAwIDAgMGMxMy42IDQuNiAyNC42IDguNCAzNi4zIDguN2M5LjEgLjMgMTcuOS0xLjcgMjMuNy01LjNjNS4xLTMuMiA3LjktNy4zIDcuOC0xNGMtLjEtNC42LTEuOC03LjgtNy43LTExLjZjLTYuOC00LjMtMTYuNS03LjQtMjktMTEuMmwtMS42LS41IDAgMGMtMTEtMy4zLTI0LjMtNy4zLTM0LjgtMTMuN2MtMTItNy4yLTIyLjYtMTguOS0yMi43LTM3LjNjLS4xLTE5LjQgMTAuOC0zMi44IDIzLjgtNDAuNWM3LjUtNC40IDE1LjgtNy4yIDI0LjEtOC43VjIzMmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTZcIiwgXCJNMjU2IDBjLTM1IDAtNjQgNTkuNS02NCA5My43djg0LjZMOC4xIDI4My40Yy01IDIuOC04LjEgOC4yLTguMSAxMy45djY1LjVjMCAxMC42IDEwLjIgMTguMyAyMC40IDE1LjRsMTcxLjYtNDkgMCA3MC45LTU3LjYgNDMuMmMtNCAzLTYuNCA3LjgtNi40IDEyLjh2NDJjMCA3LjggNi4zIDE0IDE0IDE0YzEuMyAwIDIuNi0uMiAzLjktLjVMMjU2IDQ4MGwxMTAuMSAzMS41YzEuMyAuNCAyLjYgLjUgMy45IC41YzYgMCAxMS4xLTMuNyAxMy4xLTlDMzQ0LjUgNDcwLjcgMzIwIDQyMi4yIDMyMCAzNjhjMC02MC42IDMwLjYtMTE0IDc3LjEtMTQ1LjZMMzIwIDE3OC4zVjkzLjdDMzIwIDU5LjUgMjkyIDAgMjU2IDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhWFJheSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd4LXJheScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjQ5N1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMlY0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMjU2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJIMTYwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjQ4SDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgyNDB2NzAuNkwxODkuMSAzMDdjLTUuMi0yLTEwLjYtMy0xNi4yLTNoLTIuMWMtMjMuNiAwLTQyLjggMTkuMi00Mi44IDQyLjhjMCA5LjYgMy4yIDE4LjkgOS4xIDI2LjRsMTguMiAyMy4yYzkuNyAxMi40IDI0LjYgMTkuNiA0MC4zIDE5LjZIMzE2LjRjMTUuNyAwIDMwLjYtNy4yIDQwLjMtMTkuNmwxOC4yLTIzLjJjNS45LTcuNSA5LjEtMTYuOCA5LjEtMjYuNGMwLTIzLjYtMTkuMi00Mi44LTQyLjgtNDIuOEgzMzljLTUuNSAwLTExIDEtMTYuMiAzTDI3MiAzMjYuNlYyNTZIMzg0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDI3MlYxNzZoODBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjcyVjExMmMwLTguOC03LjItMTYtMTYtMTZ6TTIwOCAzNTJhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem04MCAxNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbnZhciBmYVNwZWxsQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3BlbGwtY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY4OTFcIiwgXCJNMTEyIDBDOTkuMSAwIDg3LjQgNy44IDgyLjUgMTkuN2wtNjYuNyAxNjAtMTMuMyAzMmMtNi44IDE2LjMgLjkgMzUgMTcuMiA0MS44czM1LS45IDQxLjgtMTcuMkw2Ni43IDIyNGg5MC43bDUuMSAxMi4zYzYuOCAxNi4zIDI1LjUgMjQgNDEuOCAxNy4yczI0LTI1LjUgMTcuMi00MS44bC0xMy4zLTMyLTY2LjctMTYwQzEzNi42IDcuOCAxMjQuOSAwIDExMiAwem0xOC43IDE2MEg5My4zTDExMiAxMTUuMiAxMzAuNyAxNjB6TTI1NiAzMnY5NiA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg4MGM0NC4yIDAgODAtMzUuOCA4MC04MGMwLTIzLjEtOS44LTQzLjgtMjUuNC01OC40YzYtMTEuMiA5LjQtMjQgOS40LTM3LjZjMC00NC4yLTM1LjgtODAtODAtODBIMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgNjRIMzIwVjY0aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2em0tMzIgNjRoMzIgMTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzIwVjE2MHpNNTY2LjYgMzEwLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzUyIDQzNC43bC03My40LTczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJ6XCJdXG59O1xudmFyIGZhU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3MTVcIiwgXCJNNS4xIDkuMkMxMy4zLTEuMiAyOC40LTMuMSAzOC44IDUuMWw1OTIgNDY0YzEwLjQgOC4yIDEyLjMgMjMuMyA0LjEgMzMuN3MtMjMuMyAxMi4zLTMzLjcgNC4xTDkuMiA0Mi45Qy0xLjIgMzQuNy0zLjEgMTkuNiA1LjEgOS4yelwiXVxufTtcbnZhciBmYUNvbXB1dGVyTW91c2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tcHV0ZXItbW91c2UnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0MzMsIFwibW91c2VcIl0sIFwiZjhjY1wiLCBcIk0wIDE5MkgxNzZWMEgxNjBDNzEuNiAwIDAgNzEuNiAwIDE2MHYzMnptMCAzMlYzNTJjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBoNjRjODguNCAwIDE2MC03MS42IDE2MC0xNjBWMjI0SDE5MiAwem0zODQtMzJWMTYwQzM4NCA3MS42IDMxMi40IDAgMjI0IDBIMjA4VjE5MkgzODR6XCJdXG59O1xudmFyIGZhTW91c2UgPSBmYUNvbXB1dGVyTW91c2U7XG52YXIgZmFBcnJvd1JpZ2h0VG9CcmFja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXJpZ2h0LXRvLWJyYWNrZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNpZ24taW5cIl0sIFwiZjA5MFwiLCBcIk0zNTIgOTZsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptLTkuNCAxODIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMjQyLjcgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMTAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4elwiXVxufTtcbnZhciBmYVNpZ25JbiA9IGZhQXJyb3dSaWdodFRvQnJhY2tldDtcbnZhciBmYVNob3BTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaG9wLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJzdG9yZS1hbHQtc2xhc2hcIl0sIFwiZTA3MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC01NC44LTQzVjIyNEg1MTJWMzc2TDM4NCAyNzUuN1YyMjRIMzIwdjEuNUwyNzcuMiAxOTJINjAzLjJjMjAuMyAwIDM2LjgtMTYuNSAzNi44LTM2LjhjMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRMNTU4LjIgMjEuNEM1NDkuMyA4IDUzNC40IDAgNTE4LjMgMEgxMjEuN2MtMTYgMC0zMSA4LTM5LjkgMjEuNEw3NC4xIDMyLjggMzguOCA1LjF6TTM2LjggMTkyaDg1TDIxIDExMi41IDYuMiAxMzQuN2MtNCA2LjEtNi4yIDEzLjItNi4yIDIwLjRDMCAxNzUuNSAxNi41IDE5MiAzNi44IDE5MnpNMzIwIDM4NEgxMjhWMjI0SDY0VjM4NHY4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMzZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzk4LjVsLTY0LTUwLjRWMzg0ek01NDQgNTEybC0uMyAwaC42bC0uMyAwelwiXVxufTtcbnZhciBmYVN0b3JlQWx0U2xhc2ggPSBmYVNob3BTbGFzaDtcbnZhciBmYVNlcnZlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzZXJ2ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyMzNcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTI4MCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQ4IDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTY0IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2NjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjM1MmMwLTM1LjMtMjguNy02NC02NC02NEg2NHptMjgwIDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNTYgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFWaXJ1c0NvdmlkU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlydXMtY292aWQtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YTlcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w0NzIuMSAzNDQuN2MxMS40LTE5LjUgMTkuMS00MS40IDIyLjMtNjQuN0g1Mjh2MTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2MTZINDk0LjRjLTQuMi0zMC43LTE2LjMtNTguOC0zNC4xLTgyLjNMNDg0IDEyNS45bDExLjMgMTEuM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDcyLjcgNDYuN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUw0NTAuMSA5MmwtMjMuOCAyMy44QzQwMi44IDk3LjkgMzc0LjcgODUuOCAzNDQgODEuNlY0OGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMTZWODEuNmMtMzAuNyA0LjItNTguOCAxNi4zLTgyLjMgMzQuMUwxODkuOSA5MmwxMS4zLTExLjNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwxMzQuMSA3OS44IDM4LjggNS4xem0zNjIuNSA0MDdMMTQ5LjIgMjEzLjVjLTEuNSA2LTIuNyAxMi4yLTMuNSAxOC41SDExMlYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2ODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyODBoMzMuNmM0LjIgMzAuNyAxNi4zIDU4LjggMzQuMSA4Mi4zTDE1NiAzODYuMWwtMTEuMy0xMS4zYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU2LjYgNTYuNmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMTg5LjkgNDIwbDIzLjgtMjMuOGMyMy41IDE3LjkgNTEuNyAyOS45IDgyLjMgMzQuMVY0NjRIMjgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDgwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDM0NFY0MzAuNGMyMC40LTIuOCAzOS43LTkuMSA1Ny4zLTE4LjJ6XCJdXG59O1xudmFyIGZhU2hvcExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hvcC1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGE1XCIsIFwiTTM2LjggMTkySDQ0OS42YzIwLjItMTkuOCA0Ny45LTMyIDc4LjQtMzJjMzAuNSAwIDU4LjEgMTIuMiA3OC4zIDMxLjljMTguOS0xLjYgMzMuNy0xNy40IDMzLjctMzYuN2MwLTcuMy0yLjItMTQuNC02LjItMjAuNEw1NTguMiAyMS40QzU0OS4zIDggNTM0LjQgMCA1MTguMyAwSDEyMS43Yy0xNiAwLTMxIDgtMzkuOSAyMS40TDYuMiAxMzQuN2MtNCA2LjEtNi4yIDEzLjItNi4yIDIwLjRDMCAxNzUuNSAxNi41IDE5MiAzNi44IDE5MnpNMzg0IDIyNEgzMjBWMzg0SDEyOFYyMjRINjRWMzg0djgwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMzNmMyNi41IDAgNDgtMjEuNSA0OC00OFYzODQgMzUyIDIyNHptMTQ0IDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQ5NlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbnZhciBmYUhvdXJnbGFzc1N0YXJ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXJnbGFzcy1zdGFydCcsXG4gIGljb246IFszODQsIDUxMiwgW1wiaG91cmdsYXNzLTFcIl0sIFwiZjI1MVwiLCBcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0Vjc1YzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMUwxNDYuNyAyNTYgNzguOSAzMjMuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN3YxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NCAzMjBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWNDM3YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMUwyMzcuMyAyNTZsNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xVjY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMCA2NCAzMnpNMjg4IDQzN3YxMUg5NlY0MzdjMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlMMTkyIDMwMS4zbDY3LjkgNjcuOWMxOCAxOCAyOC4xIDQyLjQgMjguMSA2Ny45elwiXVxufTtcbnZhciBmYUhvdXJnbGFzczEgPSBmYUhvdXJnbGFzc1N0YXJ0O1xudmFyIGZhQmxlbmRlclBob25lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JsZW5kZXItcGhvbmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY2YjZcIiwgXCJNMjI0IDM1MkwxOTYuOCA1Mi4zQzE5NC4yIDI0LjIgMjE2LjMgMCAyNDQuNiAwSDUzNC4xYzIxLjEgMCAzNi40IDIwLjEgMzAuOSA0MC40TDU1OC41IDY0SDQwMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg1NDkuOGwtMTcuNSA2NEg0MDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZINTIzLjZsLTE3LjUgNjRINDAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDk3LjVMNDgwIDM1MkgyMjR6bS0xNiAzMkg0OTZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2MzJjMCAyNi41LTIxLjUgNDgtNDggNDhIMjA4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTE0NCA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTE0Ny41IDMwLjdjMTAuOCA2LjcgMTUuMyAyMSAxMC42IDMzLjRsLTIyIDU3LjhjLTQuMiAxMC45LTE0LjUgMTcuNi0yNS4zIDE2LjRsLTMzLjMtMy42Yy0xMy42IDQyLjItMTMuNiA4OC40IDAgMTMwLjdsMzMuMy0zLjZjMTAuOS0xLjIgMjEuMiA1LjUgMjUuMyAxNi40bDIyIDU3LjhjNC43IDEyLjQgLjIgMjYuNy0xMC42IDMzLjRsLTQ0IDI3LjJjLTkuNyA2LTIxLjkgNC4yLTI5LjgtNC4zQy0yNC42IDI4Ni0yNC42IDExNCA3My43IDcuOEM4MS42LS43IDkzLjgtMi41IDEwMy41IDMuNWw0NCAyNy4yelwiXVxufTtcbnZhciBmYUJ1aWxkaW5nV2hlYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmctd2hlYXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZGJcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNDBWNDMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4djgwSDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpNODAgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwem04MCAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ6bTExMi0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkgyNzJ6TTY0IDExMnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDE3NnptODAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2em0zODQgODB2MTZjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjI3MmMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnptMCAxMjhjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjM4NGMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnYxNnptMCAxMTJjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjQ5NmMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnYxNnpNNTEyIDQ5NnYxNkg0OTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjQxNmgxNmM0NC4yIDAgODAgMzUuOCA4MCA4MHptMC05Nkg0OTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjMwNGgxNmM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNnptMC0xMjh2MTZINDk2Yy00NC4yIDAtODAtMzUuOC04MC04MFYxOTJoMTZjNDQuMiAwIDgwIDM1LjggODAgODB6TTUyOCAzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWNTZjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTk2IDY0djMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0Vjk2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTQ1NiA3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHYzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFY5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFQZXJzb25CcmVhc3RmZWVkaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1icmVhc3RmZWVkaW5nJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlNTNhXCIsIFwiTTIyNCAwYTgwIDgwIDAgMSAxIDAgMTYwQTgwIDgwIDAgMSAxIDIyNCAwek00MzYuOCAzODIuOEwzNzMuNSA0NjJjLTE2LjYgMjAuNy00Ni44IDI0LjEtNjcuNSA3LjVjLTE3LjYtMTQuMS0yMi43LTM4LjEtMTMuNS01Ny43bC0uOC0uMWMtMzguOS01LjYtNzQuMy0yNS4xLTk5LjctNTQuOFYzMjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NDhjMCAuOCAwIDEuNiAuMSAyLjRsMTAxLjQgNTAuN2MyMy43IDExLjkgMzMuMyA0MC43IDIxLjUgNjQuNHMtNDAuNyAzMy4zLTY0LjQgMjEuNUwyNy4yIDQyNy4zYy0xLjEtLjUtMi4yLTEuMS0zLjMtMS43Yy00LjktMi44LTkuMi02LjQtMTIuNi0xMC42Yy00LjYtNS40LTcuOC0xMS43LTkuNi0xOC40Yy0zLjMtMTItMS45LTI1LjIgNC44LTM2LjZjLjYtMS4xIDEuMy0yLjIgMi0zLjJMNzUuNiAyNTYuMWMyNi43LTQwLjEgNzEuNy02NC4xIDExOS44LTY0LjFoNzUuMmM0Ni41IDAgOTAuMSAyMi41IDExNy4yIDYwLjNsNTAuNyA3MC45YzIuMiAzIDQgNi4xIDUuNSA5LjRjMi45IDYuNyA0LjMgMTMuOCA0IDIwLjhjLS4zIDEwLjYtNC4yIDIxLTExLjIgMjkuNHpNMzIwIDMzMmE0NCA0NCAwIDEgMCAtODggMCA0NCA0NCAwIDEgMCA4OCAwelwiXVxufTtcbnZhciBmYVJpZ2h0VG9CcmFja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JpZ2h0LXRvLWJyYWNrZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNpZ24taW4tYWx0XCJdLCBcImYyZjZcIiwgXCJNMjE3LjkgMTA1LjlMMzQwLjcgMjI4LjdjNy4yIDcuMiAxMS4zIDE3LjEgMTEuMyAyNy4zcy00LjEgMjAuMS0xMS4zIDI3LjNMMjE3LjkgNDA2LjFjLTYuNCA2LjQtMTUgOS45LTI0IDkuOWMtMTguNyAwLTMzLjktMTUuMi0zMy45LTMzLjlsMC02Mi4xTDMyIDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMCAwLTYyLjFjMC0xOC43IDE1LjItMzMuOSAzMy45LTMzLjljOSAwIDE3LjYgMy42IDI0IDkuOXpNMzUyIDQxNmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDBjNTMgMCA5NiA0MyA5NiA5NmwwIDI1NmMwIDUzLTQzIDk2LTk2IDk2bC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVNpZ25JbkFsdCA9IGZhUmlnaHRUb0JyYWNrZXQ7XG52YXIgZmFWZW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2ZW51cycsXG4gIGljb246IFszODQsIDUxMiwgWzk3OTJdLCBcImYyMjFcIiwgXCJNODAgMTc2YTExMiAxMTIgMCAxIDEgMjI0IDBBMTEyIDExMiAwIDEgMSA4MCAxNzZ6TTIyNCAzNDkuMWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMUMzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMVYzODRIMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDIyNFYzNDkuMXpcIl1cbn07XG52YXIgZmFQYXNzcG9ydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYXNzcG9ydCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjVhYlwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgzODRjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHpNMTgzIDI3OC44Yy0yNy45LTEzLjItNDguNC0zOS40LTUzLjctNzAuOGgzOS4xYzEuNiAzMC40IDcuNyA1My44IDE0LjYgNzAuOHptNDEuMyA5LjJsLS4zIDAtLjMgMGMtMi40LTMuNS01LjctOC45LTkuMS0xNi41Yy02LTEzLjYtMTIuNC0zNC4zLTE0LjItNjMuNWg0Ny4xYy0xLjggMjkuMi04LjEgNDkuOS0xNC4yIDYzLjVjLTMuNCA3LjYtNi43IDEzLTkuMSAxNi41em00MC43LTkuMmM2LjgtMTcuMSAxMi45LTQwLjQgMTQuNi03MC44aDM5LjFjLTUuMyAzMS40LTI1LjggNTcuNi01My43IDcwLjh6TTI3OS42IDE3NmMtMS42LTMwLjQtNy43LTUzLjgtMTQuNi03MC44YzI3LjkgMTMuMiA0OC40IDM5LjQgNTMuNyA3MC44SDI3OS42ek0yMjMuNyA5NmwuMyAwIC4zIDBjMi40IDMuNSA1LjcgOC45IDkuMSAxNi41YzYgMTMuNiAxMi40IDM0LjMgMTQuMiA2My41SDIwMC41YzEuOC0yOS4yIDguMS00OS45IDE0LjItNjMuNWMzLjQtNy42IDYuNy0xMyA5LjEtMTYuNXpNMTgzIDEwNS4yYy02LjggMTcuMS0xMi45IDQwLjQtMTQuNiA3MC44SDEyOS4zYzUuMy0zMS40IDI1LjgtNTcuNiA1My43LTcwLjh6TTM1MiAxOTJBMTI4IDEyOCAwIDEgMCA5NiAxOTJhMTI4IDEyOCAwIDEgMCAyNTYgMHpNMTEyIDM4NGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgzMzZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMTEyelwiXVxufTtcbnZhciBmYUhlYXJ0UHVsc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtcHVsc2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhlYXJ0YmVhdFwiXSwgXCJmMjFlXCIsIFwiTTIyOC4zIDQ2OS4xTDQ3LjYgMzAwLjRjLTQuMi0zLjktOC4yLTguMS0xMS45LTEyLjRoODdjMjIuNiAwIDQzLTEzLjYgNTEuNy0zNC41bDEwLjUtMjUuMiA0OS4zIDEwOS41YzMuOCA4LjUgMTIuMSAxNCAyMS40IDE0LjFzMTcuOC01IDIyLTEzLjNMMzIwIDI1My43bDEuNyAzLjRjOS41IDE5IDI4LjkgMzEgNTAuMSAzMUg0NzYuM2MtMy43IDQuMy03LjcgOC41LTExLjkgMTIuNEwyODMuNyA0NjkuMWMtNy41IDctMTcuNCAxMC45LTI3LjcgMTAuOXMtMjAuMi0zLjktMjcuNy0xMC45ek01MDMuNyAyNDBoLTEzMmMtMyAwLTUuOC0xLjctNy4yLTQuNGwtMjMuMi00Ni4zYy00LjEtOC4xLTEyLjQtMTMuMy0yMS41LTEzLjNzLTE3LjQgNS4xLTIxLjUgMTMuM2wtNDEuNCA4Mi44TDIwNS45IDE1OC4yYy0zLjktOC43LTEyLjctMTQuMy0yMi4yLTE0LjFzLTE4LjEgNS45LTIxLjggMTQuOGwtMzEuOCA3Ni4zYy0xLjIgMy00LjIgNC45LTcuNCA0LjlIMTZjLTIuNiAwLTUgLjQtNy4zIDEuMUMzIDIyNS4yIDAgMjA4LjIgMCAxOTAuOXYtNS44YzAtNjkuOSA1MC41LTEyOS41IDExOS40LTE0MUMxNjUgMzYuNSAyMTEuNCA1MS40IDI0NCA4NGwxMiAxMiAxMi0xMmMzMi42LTMyLjYgNzktNDcuNSAxMjQuNi0zOS45QzQ2MS41IDU1LjYgNTEyIDExNS4yIDUxMiAxODUuMXY1LjhjMCAxNi45LTIuOCAzMy41LTguMyA0OS4xelwiXVxufTtcbnZhciBmYUhlYXJ0YmVhdCA9IGZhSGVhcnRQdWxzZTtcbnZhciBmYVBlb3BsZUNhcnJ5Qm94ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1jYXJyeS1ib3gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInBlb3BsZS1jYXJyeVwiXSwgXCJmNGNlXCIsIFwiTTgwIDQ4YTQ4IDQ4IDAgMSAxIDk2IDBBNDggNDggMCAxIDEgODAgNDh6bTY0IDE5My43djY1LjFsNTEgNTFjNy4xIDcuMSAxMS44IDE2LjIgMTMuNCAyNi4xbDE1LjIgOTAuOWMyLjkgMTcuNC04LjkgMzMuOS0yNi4zIDM2LjhzLTMzLjktOC45LTM2LjgtMjYuM2wtMTQuMy04NS45TDY2LjggMzIwQzU0LjggMzA4IDQ4IDI5MS43IDQ4IDI3NC43VjE4Ni42YzAtMzIuNCAyNi4yLTU4LjYgNTguNi01OC42YzI0LjEgMCA0Ni41IDEyIDU5LjkgMzJsNDcuNCA3MS4xIDEwLjEgNVYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJIMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjc2LjJsMTAuMS01TDQ3My41IDE2MGMxMy4zLTIwIDM1LjgtMzIgNTkuOS0zMmMzMi40IDAgNTguNiAyNi4yIDU4LjYgNTguNnY4OC4xYzAgMTctNi43IDMzLjMtMTguNyA0NS4zbC03OS40IDc5LjQtMTQuMyA4NS45Yy0yLjkgMTcuNC0xOS40IDI5LjItMzYuOCAyNi4zcy0yOS4yLTE5LjQtMjYuMy0zNi44bDE1LjItOTAuOWMxLjYtOS45IDYuMy0xOSAxMy40LTI2LjFsNTEtNTFWMjQxLjdsLTE5IDI4LjVjLTQuNiA3LTExIDEyLjYtMTguNSAxNi4zbC01OS42IDI5LjhjLTIuNCAxLjMtNC45IDIuMi03LjYgMi44Yy0yLjYgLjYtNS4zIC45LTcuOSAuOEgyNTYuN2MtMi41IC4xLTUtLjItNy41LS43Yy0yLjktLjYtNS42LTEuNi04LjEtM2wtNTkuNS0yOS44Yy03LjUtMy43LTEzLjgtOS40LTE4LjUtMTYuM2wtMTktMjguNXpNMi4zIDQ2OC4xTDUwLjEgMzQ4LjZsNDkuMiA0OS4yLTM3LjYgOTRjLTYuNiAxNi40LTI1LjIgMjQuNC00MS42IDE3LjhTLTQuMyA0ODQuNSAyLjMgNDY4LjF6TTUxMiAwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnptNzcuOSAzNDguNmw0Ny44IDExOS41YzYuNiAxNi40LTEuNCAzNS0xNy44IDQxLjZzLTM1LTEuNC00MS42LTE3LjhsLTM3LjYtOTQgNDkuMi00OS4yelwiXVxufTtcbnZhciBmYVBlb3BsZUNhcnJ5ID0gZmFQZW9wbGVDYXJyeUJveDtcbnZhciBmYVRlbXBlcmF0dXJlSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1oaWdoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzY5XCIsIFwiTTQxNiA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAgMTI4QTk2IDk2IDAgMSAwIDQxNiAwYTk2IDk2IDAgMSAwIDAgMTkyek05NiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OFYyNzYuNWMwIDE3LjMgNy4xIDMxLjkgMTUuMyA0Mi41QzIxNy44IDMzMi42IDIyNCAzNDkuNSAyMjQgMzY4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMTguNSA2LjItMzUuNCAxNi43LTQ4LjlDODguOSAzMDguNCA5NiAyOTMuOCA5NiAyNzYuNVYxMTJ6TTE0NCAwQzgyLjEgMCAzMiA1MC4yIDMyIDExMlYyNzYuNWMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEMxMS4yIDMwNC4yIDAgMzM0LjggMCAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGMwLTMzLjItMTEuMi02My44LTMwLjEtODguMWMtLjktMS4yLTEuNS0yLjItMS43LTIuOGMtLjEtLjMtLjItLjUtLjItLjZWMTEyQzI1NiA1MC4yIDIwNS45IDAgMTQ0IDB6bTAgNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM1YxMTJjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWMzIyLjdjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OHpcIl1cbn07XG52YXIgZmFNaWNyb2NoaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWljcm9jaGlwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMmRiXCIsIFwiTTE3NiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFY2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjR2NTZIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjR2NTZIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjRjMCAzNS4zIDI4LjcgNjQgNjQgNjR2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhoNTZ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhoNTZ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRoNDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRINDQ4VjI4MGg0MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg0NDhWMTc2aDQwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDQ0OGMwLTM1LjMtMjguNy02NC02NC02NFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFY2NEgyODBWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWNjRIMTc2VjI0ek0xNjAgMTI4SDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE5MiAzMkgxNjBWMzUySDM1MlYxNjB6XCJdXG59O1xudmFyIGZhQ3Jvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3Jvd24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwODFdLCBcImY1MjFcIiwgXCJNMzA5IDEwNmMxMS40LTcgMTktMTkuNyAxOS0zNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDE0LjQgNy42IDI3IDE5IDM0TDIwOS43IDIyMC42Yy05LjEgMTguMi0zMi43IDIzLjQtNDguNiAxMC43TDcyIDE2MGM1LTYuNyA4LTE1IDgtMjRjMC0yMi4xLTE3LjktNDAtNDAtNDBTMCAxMTMuOSAwIDEzNnMxNy45IDQwIDQwIDQwYy4yIDAgLjUgMCAuNyAwTDg2LjQgNDI3LjRjNS41IDMwLjQgMzIgNTIuNiA2MyA1Mi42SDQyNi42YzMwLjkgMCA1Ny40LTIyLjEgNjMtNTIuNkw1MzUuMyAxNzZjLjIgMCAuNSAwIC43IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCA5IDMgMTcuMyA4IDI0bC04OS4xIDcxLjNjLTE1LjkgMTIuNy0zOS41IDcuNS00OC42LTEwLjdMMzA5IDEwNnpcIl1cbn07XG52YXIgZmFXZWlnaHRIYW5naW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dlaWdodC1oYW5naW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNWNkXCIsIFwiTTIyNCA5NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjIuNSAzMmMzLjUtMTAgNS41LTIwLjggNS41LTMyYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMTEuMiAxLjkgMjIgNS41IDMySDEyMGMtMjIgMC00MS4yIDE1LTQ2LjYgMzYuNGwtNzIgMjg4Yy0zLjYgMTQuMy0uNCAyOS41IDguNyA0MS4yUzMzLjIgNTEyIDQ4IDUxMkg0NjRjMTQuOCAwIDI4LjctNi44IDM3LjgtMTguNXMxMi4zLTI2LjggOC43LTQxLjJsLTcyLTI4OEM0MzMuMiAxNDMgNDE0IDEyOCAzOTIgMTI4SDM0Ni41elwiXVxufTtcbnZhciBmYVhtYXJrc0xpbmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3htYXJrcy1saW5lcycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU5YVwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyem0wIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6TTcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NUw3IDMxMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTVMNDEgMTY3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHpNMjY1IDE2N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTV6TTQ1NSAxNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6XCJdXG59O1xudmFyIGZhRmlsZVByZXNjcmlwdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXByZXNjcmlwdGlvbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU3MlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTEwNCAxOTZoNzJjMzMuMSAwIDYwIDI2LjkgNjAgNjBjMCAyNS41LTE1LjkgNDcuMi0zOC4zIDU1LjlsNDMgNDAuMyAzMy44LTMxYzguMS03LjUgMjAuOC02LjkgMjguMyAxLjJzNi45IDIwLjgtMS4yIDI4LjNMMjcwIDM3OS43bDMxLjcgMjkuN2M4LjEgNy42IDguNSAyMC4yIC45IDI4LjNzLTIwLjIgOC41LTI4LjMgLjlsLTMzLjktMzEuOC0zNC45IDMyYy04LjEgNy41LTIwLjggNi45LTI4LjMtMS4ycy02LjktMjAuOCAxLjItMjguM2wzMi42LTI5LjktNjQuOC02MC44Yy0uOS0uOC0xLjYtMS43LTIuMy0yLjZIMTI0djQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMFYyOTYgMjE2YzAtMTEgOS0yMCAyMC0yMHptNzIgODBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwSDEyNHY0MGg1MnpcIl1cbn07XG52YXIgZmFXZWlnaHRTY2FsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3ZWlnaHQtc2NhbGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcIndlaWdodFwiXSwgXCJmNDk2XCIsIFwiTTEyOCAxNzZhMTI4IDEyOCAwIDEgMSAyNTYgMCAxMjggMTI4IDAgMSAxIC0yNTYgMHpNMzkxLjggNjRDMzU5LjUgMjQuOSAzMTAuNyAwIDI1NiAwUzE1Mi41IDI0LjkgMTIwLjIgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzkxLjh6TTI5NiAyMjRjMC0xMC42LTQuMS0yMC4yLTEwLjktMjcuNGwzMy42LTc4LjNjMy41LTguMS0uMy0xNy41LTguNC0yMXMtMTcuNSAuMy0yMSA4LjRMMjU1LjcgMTg0Yy0yMiAuMS0zOS43IDE4LTM5LjcgNDBjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MHpcIl1cbn07XG52YXIgZmFXZWlnaHQgPSBmYVdlaWdodFNjYWxlO1xudmFyIGZhVXNlckdyb3VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItZ3JvdXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgxMDEsIFwidXNlci1mcmllbmRzXCJdLCBcImY1MDBcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNjA5LjMgNTEySDQ3MS40YzUuNC05LjQgOC42LTIwLjMgOC42LTMydi04YzAtNjAuNy0yNy4xLTExNS4yLTY5LjgtMTUxLjhjMi40LS4xIDQuNy0uMiA3LjEtLjJoNjEuNEM1NjcuOCAzMjAgNjQwIDM5Mi4yIDY0MCA0ODEuM2MwIDE3LTEzLjggMzAuNy0zMC43IDMwLjd6TTQzMiAyNTZjLTMxIDAtNTktMTIuNi03OS4zLTMyLjlDMzcyLjQgMTk2LjUgMzg0IDE2My42IDM4NCAxMjhjMC0yNi44LTYuNi01Mi4xLTE4LjMtNzQuM0MzODQuMyA0MC4xIDQwNy4yIDMyIDQzMiAzMmM2MS45IDAgMTEyIDUwLjEgMTEyIDExMnMtNTAuMSAxMTItMTEyIDExMnpcIl1cbn07XG52YXIgZmFVc2VyRnJpZW5kcyA9IGZhVXNlckdyb3VwO1xudmFyIGZhQXJyb3dVcEFaID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLWEteicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbHBoYS11cFwiXSwgXCJmMTVlXCIsIFwiTTE4My42IDQyLjRDMTc3LjUgMzUuOCAxNjkgMzIgMTYwIDMycy0xNy41IDMuOC0yMy42IDEwLjRsLTg4IDk2Yy0xMS45IDEzLTExLjEgMzMuMyAyIDQ1LjJzMzMuMyAxMS4xIDQ1LjItMkwxMjggMTQ2LjNWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQ2LjNsMzIuNCAzNS40YzExLjkgMTMgMzIuMiAxMy45IDQ1LjIgMnMxMy45LTMyLjIgMi00NS4ybC04OC05NnpNMzIwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg1MC43bC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQyOS4zbDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00MTYgMzJjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTY0IDEyOC0xNiAzMmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zaDg4LjRsNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC0xNi0zMi02NC0xMjhDNDM5LjIgMzguOCA0MjguMSAzMiA0MTYgMzJ6TTM5NS44IDE3Nkw0MTYgMTM1LjYgNDM2LjIgMTc2SDM5NS44elwiXVxufTtcbnZhciBmYVNvcnRBbHBoYVVwID0gZmFBcnJvd1VwQVo7XG52YXIgZmFDaGVzc0tuaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1rbmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODIyXSwgXCJmNDQxXCIsIFwiTTk2IDQ4TDgyLjcgNjEuM0M3MC43IDczLjMgNjQgODkuNSA2NCAxMDYuNVYyMzguOWMwIDEwLjcgNS4zIDIwLjcgMTQuMiAyNi42bDEwLjYgN2MxNC4zIDkuNiAzMi43IDEwLjcgNDguMSAzbDMuMi0xLjZjMi42LTEuMyA1LTIuOCA3LjMtNC41bDQ5LjQtMzdjNi42LTUgMTUuNy01IDIyLjMgMGMxMC4yIDcuNyA5LjkgMjMuMS0uNyAzMC4zTDkwLjQgMzUwQzczLjkgMzYxLjMgNjQgMzgwIDY0IDQwMEgzODRsMjguOS0xNTljMi4xLTExLjMgMy4xLTIyLjggMy4xLTM0LjNWMTkyQzQxNiA4NiAzMzAgMCAyMjQgMEg4My44QzcyLjkgMCA2NCA4LjkgNjQgMTkuOGMwIDcuNSA0LjIgMTQuMyAxMC45IDE3LjdMOTYgNDh6bTI0IDY4YTIwIDIwIDAgMSAxIDQwIDAgMjAgMjAgMCAxIDEgLTQwIDB6TTIyLjYgNDczLjRjLTQuMiA0LjItNi42IDEwLTYuNiAxNkMxNiA1MDEuOSAyNi4xIDUxMiAzOC42IDUxMkg0MDkuNGMxMi41IDAgMjIuNi0xMC4xIDIyLjYtMjIuNmMwLTYtMi40LTExLjgtNi42LTE2TDM4NCA0MzJINjRMMjIuNiA0NzMuNHpcIl1cbn07XG52YXIgZmFGYWNlTGF1Z2hTcXVpbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1sYXVnaC1zcXVpbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxhdWdoLXNxdWludFwiXSwgXCJmNTliXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek05Ni44IDMxNC4xYy0zLjgtMTMuNyA3LjQtMjYuMSAyMS42LTI2LjFIMzkzLjZjMTQuMiAwIDI1LjUgMTIuNCAyMS42IDI2LjFDMzk2LjIgMzgyIDMzMi4xIDQzMiAyNTYgNDMycy0xNDAuMi01MC0xNTkuMi0xMTcuOXptMzYuNy0xOTkuNGw4OS45IDQ3LjljMTAuNyA1LjcgMTAuNyAyMS4xIDAgMjYuOGwtODkuOSA0Ny45Yy03LjkgNC4yLTE3LjUtMS41LTE3LjUtMTAuNWMwLTIuOCAxLTUuNSAyLjgtNy42bDM2LTQzLjItMzYtNDMuMmMtMS44LTIuMS0yLjgtNC44LTIuOC03LjZjMC05IDkuNi0xNC43IDE3LjUtMTAuNXpNMzk2IDEyNS4xYzAgMi44LTEgNS41LTIuOCA3LjZsLTM2IDQzLjIgMzYgNDMuMmMxLjggMi4xIDIuOCA0LjggMi44IDcuNmMwIDktOS42IDE0LjctMTcuNSAxMC41bC04OS45LTQ3LjljLTEwLjctNS43LTEwLjctMjEuMSAwLTI2LjhsODkuOS00Ny45YzcuOS00LjIgMTcuNSAxLjUgMTcuNSAxMC41elwiXVxufTtcbnZhciBmYUxhdWdoU3F1aW50ID0gZmFGYWNlTGF1Z2hTcXVpbnQ7XG52YXIgZmFXaGVlbGNoYWlyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWVsY2hhaXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxOTNcIiwgXCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTIwLjUgMjQ3LjJjMTIuNC00LjcgMTguNy0xOC41IDE0LTMwLjlzLTE4LjUtMTguNy0zMC45LTE0QzQzLjEgMjI1LjEgMCAyODMuNSAwIDM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGM2MS4yIDAgMTE0LjMtMzQuMyAxNDEuMi04NC43YzYuMi0xMS43IDEuOC0yNi4yLTkuOS0zMi41cy0yNi4yLTEuOC0zMi41IDkuOUMyNDAgNDQwIDIwMi44IDQ2NCAxNjAgNDY0Qzk4LjEgNDY0IDQ4IDQxMy45IDQ4IDM1MmMwLTQ3LjkgMzAuMS04OC44IDcyLjUtMTA0Ljh6TTI1OS44IDE3NmwtMS45LTkuN2MtNC41LTIyLjMtMjQtMzguMy00Ni44LTM4LjNjLTMwLjEgMC01Mi43IDI3LjUtNDYuOCA1N2wyMy4xIDExNS41YzYgMjkuOSAzMi4yIDUxLjQgNjIuOCA1MS40aDUuMWMuNCAwIC44IDAgMS4zIDBoOTQuMWM2LjcgMCAxMi42IDQuMSAxNSAxMC40TDQwMiA0NTkuMmM2IDE2LjEgMjMuOCAyNC42IDQwLjEgMTkuMWw0OC0xNmMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41cy0yMy43LTI1LjgtNDAuNS0yMC4ybC0xOC43IDYuMi0yNS41LTY4Yy0xMS43LTMxLjItNDEuNi01MS45LTc0LjktNTEuOUgyODIuMmwtOS42LTQ4SDMzNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyNTkuOHpcIl1cbn07XG52YXIgZmFDaXJjbGVBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1hcnJvdy11cCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYXJyb3ctY2lyY2xlLXVwXCJdLCBcImYwYWFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4NSAyMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNzEtNzFWMzc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjE5My45bC03MSA3MWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwyMzkgMTE5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDM4NSAyMzF6XCJdXG59O1xudmFyIGZhQXJyb3dDaXJjbGVVcCA9IGZhQ2lyY2xlQXJyb3dVcDtcbnZhciBmYVRvZ2dsZU9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvZ2dsZS1vbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjIwNVwiLCBcIk0xOTIgNjRDODYgNjQgMCAxNTAgMCAyNTZTODYgNDQ4IDE5MiA0NDhIMzg0YzEwNiAwIDE5Mi04NiAxOTItMTkycy04Ni0xOTItMTkyLTE5MkgxOTJ6bTE5MiA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG52YXIgZmFQZXJzb25XYWxraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi13YWxraW5nJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTI4Njk0LCBcIndhbGtpbmdcIl0sIFwiZjU1NFwiLCBcIk0xNjAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTI2LjUgMTk5LjNjLTEgLjQtMS45IC44LTIuOSAxLjJsLTggMy41Yy0xNi40IDcuMy0yOSAyMS4yLTM0LjcgMzguMmwtMi42IDcuOGMtNS42IDE2LjgtMjMuNyAyNS44LTQwLjUgMjAuMnMtMjUuOC0yMy43LTIwLjItNDAuNWwyLjYtNy44YzExLjQtMzQuMSAzNi42LTYxLjkgNjkuNC03Ni41bDgtMy41YzIwLjgtOS4yIDQzLjMtMTQgNjYuMS0xNGM0NC42IDAgODQuOCAyNi44IDEwMS45IDY3LjlMMjgxIDIzMi43bDIxLjQgMTAuN2MxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zTDI0NyAyODcuM2MtMTAuMy01LjItMTguNC0xMy44LTIyLjgtMjQuNWwtOS42LTIzLTE5LjMgNjUuNSA0OS41IDU0YzUuNCA1LjkgOS4yIDEzIDExLjIgMjAuOGwyMyA5Mi4xYzQuMyAxNy4xLTYuMSAzNC41LTIzLjMgMzguOHMtMzQuNS02LjEtMzguOC0yMy4zbC0yMi04OC4xLTcwLjctNzcuMWMtMTQuOC0xNi4xLTIwLjMtMzguNi0xNC43LTU5LjdsMTYuOS02My41ek02OC43IDM5OGwyNS02Mi40YzIuMSAzIDQuNSA1LjggNyA4LjZsNDAuNyA0NC40LTE0LjUgMzYuMmMtMi40IDYtNiAxMS41LTEwLjYgMTYuMUw1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w2OC43IDM5OHpcIl1cbn07XG52YXIgZmFXYWxraW5nID0gZmFQZXJzb25XYWxraW5nO1xudmFyIGZhTCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTA4XSwgXCI0Y1wiLCBcIk02NCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0MTZIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFGaXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpcmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyOTNdLCBcImYwNmRcIiwgXCJNMTU5LjMgNS40YzcuOC03LjMgMTkuOS03LjIgMjcuNyAuMWMyNy42IDI1LjkgNTMuNSA1My44IDc3LjcgODRjMTEtMTQuNCAyMy41LTMwLjEgMzctNDIuOWM3LjktNy40IDIwLjEtNy40IDI4IC4xYzM0LjYgMzMgNjMuOSA3Ni42IDg0LjUgMTE4YzIwLjMgNDAuOCAzMy44IDgyLjUgMzMuOCAxMTEuOUM0NDggNDA0LjIgMzQ4LjIgNTEyIDIyNCA1MTJDOTguNCA1MTIgMCA0MDQuMSAwIDI3Ni41YzAtMzguNCAxNy44LTg1LjMgNDUuNC0xMzEuN0M3My4zIDk3LjcgMTEyLjcgNDguNiAxNTkuMyA1LjR6TTIyNS43IDQxNmMyNS4zIDAgNDcuNy03IDY4LjgtMjFjNDIuMS0yOS40IDUzLjQtODguMiAyOC4xLTEzNC40Yy00LjUtOS0xNi05LjYtMjIuNS0ybC0yNS4yIDI5LjNjLTYuNiA3LjYtMTguNSA3LjQtMjQuNy0uNWMtMTYuNS0yMS00Ni01OC41LTYyLjgtNzkuOGMtNi4zLTgtMTguMy04LjEtMjQuNy0uMWMtMzMuOCA0Mi41LTUwLjggNjkuMy01MC44IDk5LjRDMTEyIDM3NS40IDE2Mi42IDQxNiAyMjUuNyA0MTZ6XCJdXG59O1xudmFyIGZhQmVkUHVsc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmVkLXB1bHNlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwcm9jZWR1cmVzXCJdLCBcImY0ODdcIiwgXCJNNDgzLjIgOS42TDUyNCA2NGg5MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg1MTJjLTcuNiAwLTE0LjctMy42LTE5LjItOS42TDQ2OC43IDcwLjNsLTQ3IDk5LjljLTMuNyA3LjgtMTEuMyAxMy4xLTE5LjkgMTMuN3MtMTYuOS0zLjQtMjEuNy0xMC42TDMzOS4yIDExMkgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRIMzUyYzggMCAxNS41IDQgMjAgMTAuN2wyNC40IDM2LjYgNDUuOS05Ny41QzQ0NS45IDYuMiA0NTMuMiAxIDQ2MS42IC4xczE2LjYgMi43IDIxLjYgOS41ek0zMjAgMTYwaDEyLjdsMjAuNyAzMS4xYzExLjIgMTYuOCAzMC42IDI2LjMgNTAuNyAyNC44czM3LjktMTMuNyA0Ni41LTMyTDQ2MS45IDE2MEg1NDRjNTMgMCA5NiA0MyA5NiA5NlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDM1MiAzMjAgNjR2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRzMzIgMTQuMyAzMiAzMlYzNTJIMjg4VjE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTE0NCAwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYVByb2NlZHVyZXMgPSBmYUJlZFB1bHNlO1xudmFyIGZhU2h1dHRsZVNwYWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NodXR0bGUtc3BhY2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInNwYWNlLXNodXR0bGVcIl0sIFwiZjE5N1wiLCBcIk0xMzAgNDgwYzQwLjYgMCA4MC40LTExIDExNS4yLTMxLjlMMzUyIDM4NGwtMjI0IDAgMCA5Nmgyek0zNTIgMTI4TDI0NS4yIDYzLjlDMjEwLjQgNDMgMTcwLjYgMzIgMTMwIDMyaC0ydjk2bDIyNCAwek05NiAxMjhsMC05Nkg4MEM1My41IDMyIDMyIDUzLjUgMzIgODB2NDhoOGMtMjIuMSAwLTQwIDE3LjktNDAgNDB2MTZWMzI4djE2YzAgMjIuMSAxNy45IDQwIDQwIDQwSDMydjQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDk2bDAtOTZoOGMyNi4yIDAgNDkuNC0xMi42IDY0LTMySDQ1NmM2OS4zIDAgMTM1LTIyLjcgMTc5LjItODEuNmM2LjQtOC41IDYuNC0yMC4zIDAtMjguOEM1OTEgMTgyLjcgNTI1LjMgMTYwIDQ1NiAxNjBIMTY4Yy0xNC42LTE5LjQtMzcuOC0zMi02NC0zMmwtOCAwek01MTIgMjQzLjZ2MjQuOWMwIDE5LjYtMTUuOSAzNS42LTM1LjYgMzUuNmMtMi41IDAtNC40LTItNC40LTQuNFYyMTIuNGMwLTIuNSAyLTQuNCA0LjQtNC40YzE5LjYgMCAzNS42IDE1LjkgMzUuNiAzNS42elwiXVxufTtcbnZhciBmYVNwYWNlU2h1dHRsZSA9IGZhU2h1dHRsZVNwYWNlO1xudmFyIGZhRmFjZUxhdWdoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtbGF1Z2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxhdWdoXCJdLCBcImY1OTlcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTk2LjggMzE0LjFjLTMuOC0xMy43IDcuNC0yNi4xIDIxLjYtMjYuMUgzOTMuNmMxNC4yIDAgMjUuNSAxMi40IDIxLjYgMjYuMUMzOTYuMiAzODIgMzMyLjEgNDMyIDI1NiA0MzJzLTE0MC4yLTUwLTE1OS4yLTExNy45ek0xNDQuNCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFMYXVnaCA9IGZhRmFjZUxhdWdoO1xudmFyIGZhRm9sZGVyT3BlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb2xkZXItb3BlbicsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODE5NCwgMTI4NDQ5LCA2MTcxN10sIFwiZjA3Y1wiLCBcIk04OC43IDIyMy44TDAgMzc1LjhWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMTgxLjVjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMjYuNSAyNi41YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdINDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0djMySDE0NGMtMjIuOCAwLTQzLjggMTIuMS01NS4zIDMxLjh6bTI3LjYgMTYuMUMxMjIuMSAyMzAgMTMyLjYgMjI0IDE0NCAyMjRINTQ0YzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTExMiAxOTJDNDUzLjkgNDc0IDQ0My40IDQ4MCA0MzIgNDgwSDMyYy0xMS41IDAtMjItNi4xLTI3LjctMTYuMXMtNS43LTIyLjIgLjEtMzIuMWwxMTItMTkyelwiXVxufTtcbnZhciBmYUhlYXJ0Q2lyY2xlUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUwMFwiLCBcIk00Ny42IDMwMC40TDIyOC4zIDQ2OS4xYzcuNSA3IDE3LjQgMTAuOSAyNy43IDEwLjlzMjAuMi0zLjkgMjcuNy0xMC45bDIuNi0yLjRDMjY3LjIgNDM4LjYgMjU2IDQwNC42IDI1NiAzNjhjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZjMjguMyAwIDU1IDYuNyA3OC43IDE4LjVjLjktNi41IDEuMy0xMyAxLjMtMTkuNnYtNS44YzAtNjkuOS01MC41LTEyOS41LTExOS40LTE0MUMzNDcgMzYuNSAzMDAuNiA1MS40IDI2OCA4NEwyNTYgOTYgMjQ0IDg0Yy0zMi42LTMyLjYtNzktNDcuNS0xMjQuNi0zOS45QzUwLjUgNTUuNiAwIDExNS4yIDAgMTg1LjF2NS44YzAgNDEuNSAxNy4yIDgxLjIgNDcuNiAxMDkuNXpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTE2LTIwOHY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg0NDh2NDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzg0SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg0OFYzMDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG52YXIgZmFDb2RlRm9yayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb2RlLWZvcmsnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUxM2JcIiwgXCJNODAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzA0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE1My4zQzMwNy43IDE0MSAyODggMTEyLjggMjg4IDgwYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YxOTJjMCA1My00MyA5Ni05NiA5NkgyNTZ2NzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNWMjg4SDE0NGMtNTMgMC05Ni00My05Ni05NlYxNTMuM0MxOS43IDE0MSAwIDExMi44IDAgODBDMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIwOCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI0OCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpcIl1cbn07XG52YXIgZmFDaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5NjFdLCBcImY2NGZcIiwgXCJNNDgwIDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMzNmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWOTZIMjI0VjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0Vjk2SDExMlYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM2NCAxMC43IDY0IDI0Vjk2SDQ4QzIxLjUgOTYgMCAxMTcuNSAwIDE0NHY5NlY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhIMzA0aDMyIDk2SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYyNDBjMC0yNi41LTIxLjUtNDgtNDgtNDhINDgwVjQ4em05NiAzMjB2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDUyOGMtOC44IDAtMTYtNy4yLTE2LTE2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2ek0yNDAgNDE2SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMTI4IDQwMGMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYzNjhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMnpNNTYwIDI1NmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDUyOGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoMzJ6TTI1NiAxNzZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2ek0xMTIgMTYwYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyek0yNTYgMzA0YzAgOC44LTcuMiAxNi0xNiAxNkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMnpNMTEyIDMyMEg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNnptMzA0LTQ4djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnpNNDAwIDY0YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZWODBjMC04LjggNy4yLTE2IDE2LTE2aDMyem0xNiAxMTJ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYU1pY3JvcGhvbmVMaW5lcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Bob25lLWxpbmVzJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI3ODk3LCBcIm1pY3JvcGhvbmUtYWx0XCJdLCBcImYzYzlcIiwgXCJNOTYgOTZWMjU2YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZIMjA4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDgwVjE5MkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODBWMTI4SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4MGMwLTUzLTQzLTk2LTk2LTk2Uzk2IDQzIDk2IDk2ek0zMjAgMjQwdjE2YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0MGMwIDg5LjEgNjYuMiAxNjIuNyAxNTIgMTc0LjRWNDY0SDEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg3MiA3MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyMTZWNDMwLjRjODUuOC0xMS43IDE1Mi04NS4zIDE1Mi0xNzQuNFYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2MjR6XCJdXG59O1xudmFyIGZhTWljcm9waG9uZUFsdCA9IGZhTWljcm9waG9uZUxpbmVzO1xudmFyIGZhUGVwcGVySG90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcHBlci1ob3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3OThdLCBcImY4MTZcIiwgXCJNNDI4LjMgM2MxMS42LTYuNCAyNi4yLTIuMyAzMi42IDkuM2w0LjggOC43YzE5LjMgMzQuNyAxOS44IDc1LjcgMy40IDExMEM0OTUuOCAxNTkuNiA1MTIgMTk3LjkgNTEyIDI0MGMwIDE4LjUtMy4xIDM2LjMtOC45IDUyLjhjLTYuMSAxNy4zLTI4LjUgMTYuMy0zNi44LS4xbC0xMS43LTIzLjRjLTQuMS04LjEtMTIuNC0xMy4zLTIxLjUtMTMuM0gzNjBjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTcuMSAwYy0yMS4zIDAtMzAtMjMuOS0xMC44LTMyLjlDMzA0LjcgODUuNCAzMjcuNyA4MCAzNTIgODBjMjguMyAwIDU0LjggNy4zIDc3LjggMjAuMmM1LjUtMTguMiAzLjctMzguNC02LTU1LjhMNDE5IDM1LjdjLTYuNC0xMS42LTIuMy0yNi4yIDkuMy0zMi42ek0xNzEuMiAzNDUuNUwyNjQgMTYwbDQwIDB2ODBjMCAyNi41IDIxLjUgNDggNDggNDhoNzYuMmwyMy45IDQ3LjhDMzcyLjMgNDQzLjkgMjQ0LjMgNTEyIDEwMy4yIDUxMkg0NC40QzE5LjkgNTEyIDAgNDkyLjEgMCA0NjcuNmMwLTIwLjggMTQuNS0zOC44IDM0LjgtNDMuM2w0OS44LTExLjFjMzcuNi04LjQgNjkuNS0zMy4yIDg2LjctNjcuN3pcIl1cbn07XG52YXIgZmFVbmxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndW5sb2NrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4Mjc1XSwgXCJmMDljXCIsIFwiTTE0NCAxNDRjMC00NC4yIDM1LjgtODAgODAtODBjMzEuOSAwIDU5LjQgMTguNiA3Mi4zIDQ1LjdjNy42IDE2IDI2LjcgMjIuOCA0Mi42IDE1LjJzMjIuOC0yNi43IDE1LjItNDIuNkMzMzEgMzMuNyAyODEuNSAwIDIyNCAwQzE0NC41IDAgODAgNjQuNSA4MCAxNDR2NDhINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDE0NFYxNDR6XCJdXG59O1xudmFyIGZhQ29sb25TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbG9uLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxNDBcIiwgXCJNMjU1IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzE5Ny4yIDcuMSAxOTMgMjQuMkwxODEuOSA2OC42Qzk2LjEgODcuOCAzMiAxNjQuNCAzMiAyNTZjMCA1OC4xIDI1LjggMTEwLjIgNjYuNyAxNDUuNEw4MSA0NzIuMmMtNC4zIDE3LjEgNi4xIDM0LjUgMjMuMyAzOC44czM0LjUtNi4xIDM4LjgtMjMuM2wxMy01Mi4xYzkgMy40IDE4LjQgNi4yIDI4IDguMkwxNzcgNDcyLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTAuNC00MS40YzMzLjQtNC40IDY0LjEtMTcuNCA4OS44LTM2LjdjMTQuMS0xMC42IDE3LTMwLjcgNi40LTQ0LjhzLTMwLjctMTctNDQuOC02LjRjLTEwLjIgNy43LTIxLjcgMTMuOS0zNCAxOC4zTDMyMSAxNjBjOS40LS4zIDE4LjUtNC43IDI0LjYtMTIuOGMxMC42LTE0LjEgNy44LTM0LjItNi40LTQ0LjhjLTEuMS0uOC0yLjItMS42LTMuMy0yLjRMMzUxIDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzI5My4yIDcuMSAyODkgMjQuMkwyNzcuMiA3MS41Yy05LjMtMi43LTE4LjgtNC42LTI4LjYtNS45TDI1NSAzOS44ek0xNjMuMiAxNDMuM0wxMTcuMyAzMjYuOEMxMDMuOSAzMDYuNSA5NiAyODIuMiA5NiAyNTZjMC00OC43IDI3LjItOTEgNjcuMi0xMTIuN3ptOC42IDIyOS41bDYxLjEtMjQ0LjZjOS45IC43IDE5LjUgMi41IDI4LjcgNS4zbC02MiAyNDguMWMtOS43LTEuOS0xOS00LjgtMjcuOC04Ljh6XCJdXG59O1xudmFyIGZhSGVhZHNldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkc2V0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNTkwXCIsIFwiTTI1NiA0OEMxNDEuMSA0OCA0OCAxNDEuMSA0OCAyNTZ2NDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjU2QzAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NlY0MDAuMWMwIDQ4LjYtMzkuNCA4OC04OC4xIDg4TDMxMy42IDQ4OGMtOC4zIDE0LjMtMjMuOCAyNC00MS42IDI0SDI0MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGgzMmMxNy44IDAgMzMuMyA5LjcgNDEuNiAyNGwxMTAuNCAuMWMyMi4xIDAgNDAtMTcuOSA0MC00MFYyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4ek0xNDQgMjA4aDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNDRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI3MmMwLTM1LjMgMjguNy02NCA2NC02NHptMjI0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNDBjMC0xNy43IDE0LjMtMzIgMzItMzJoMTZ6XCJdXG59O1xudmFyIGZhU3RvcmVTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdG9yZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA3MVwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC04Ni44LTY4VjM4NCAyNTIuNmMtNCAxLTggMS44LTEyLjMgMi4zbC0uMSAwYy01LjMgLjctMTAuNyAxLjEtMTYuMiAxLjFjLTEyLjQgMC0yNC4zLTEuOS0zNS40LTUuM1YzNTAuOUwzMDEuMiAyMTAuN2M3LTQuNCAxMy4zLTkuNyAxOC44LTE1LjdjMTUuOSAxNy42IDM5LjEgMjkgNjUuMiAyOWMyNi4yIDAgNDkuMy0xMS40IDY1LjItMjljMTYgMTcuNiAzOS4xIDI5IDY1LjIgMjljNC4xIDAgOC4xLS4zIDEyLjEtLjhjNTUuNS03LjQgODEuOC03Mi41IDUyLjEtMTE5LjRMNTIyLjMgMTMuMUM1MTcuMiA1IDUwOC4xIDAgNDk4LjQgMEgxNDEuNmMtOS43IDAtMTguOCA1LTIzLjkgMTMuMWwtMjIuNyAzNkwzOC44IDUuMXpNNTE0LjkgNTAxLjdMMzY1LjUgMzg0SDE2MFYyNTAuNmMtMTEuMiAzLjUtMjMuMiA1LjQtMzUuNiA1LjRjLTUuNSAwLTExLS40LTE2LjMtMS4xbC0uMSAwYy00LjEtLjYtOC4xLTEuMy0xMi0yLjNWMzg0djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ4MGMxMi45IDAgMjQuOC0zLjggMzQuOS0xMC4zek0xNTUuMyAyMTguNEw0OC45IDEzNC41Yy02LjEgNDAuNiAxOS41IDgyLjggNjMuMyA4OC43YzQgLjUgOC4xIC44IDEyLjEgLjhjMTEgMCAyMS40LTIgMzEtNS42elwiXVxufTtcbnZhciBmYVJvYWRDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb2FkLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2NlwiLCBcIk0yMTMuMiAzMkgyODhWOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMmg3NC44YzI3LjEgMCA1MS4zIDE3LjEgNjAuMyA0Mi42bDQyLjcgMTIwLjZjLTEwLjktMi4xLTIyLjItMy4yLTMzLjgtMy4yYy01OS41IDAtMTEyLjEgMjkuNi0xNDQgNzQuOFYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJjMi4zIDAgNC42LS4zIDYuOC0uN2MtNC41IDE1LjUtNi44IDMxLjgtNi44IDQ4LjdjMCA1LjQgLjIgMTAuNyAuNyAxNmwtLjcgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRIODYuNkM1Ni41IDQ4MCAzMiA0NTUuNSAzMiA0MjUuNGMwLTYuMiAxLjEtMTIuNCAzLjEtMTguMkwxNTIuOSA3NC42QzE2MiA0OS4xIDE4Ni4xIDMyIDIxMy4yIDMyek00OTYgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMjIuNiAxNDRsMzYuNy0zNi43YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBMNDk2IDM0NS40bC0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMNDczLjQgMzY4bC0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEw0OTYgMzkwLjZsMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw1MTguNiAzNjh6XCJdXG59O1xudmFyIGZhVXNlck1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItbWludXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1MDNcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNDcyIDIwMEg2MTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINDcyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0elwiXVxufTtcbnZhciBmYU1hcnNTdHJva2VVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLXN0cm9rZS11cCcsXG4gIGljb246IFszMjAsIDUxMiwgWzk4OTYsIFwibWFycy1zdHJva2UtdlwiXSwgXCJmMjJhXCIsIFwiTTE0OC43IDQuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGw2NCA2NGM0LjYgNC42IDUuOSAxMS41IDMuNSAxNy40cy04LjMgOS45LTE0LjggOS45SDE4NHYyNGgzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxODR2MjRjMCAuNiAwIDEuMi0uMSAxLjhjNzcgMTEuNiAxMzYuMSA3OCAxMzYuMSAxNTguMmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQ0MC40IDAgMzUyYzAtODAuMiA1OS4xLTE0Ni43IDEzNi4xLTE1OC4yYzAtLjYtLjEtMS4yLS4xLTEuOFYxNjhIMTA0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDMyVjk2SDk2Yy02LjUgMC0xMi4zLTMuOS0xNC44LTkuOXMtMS4xLTEyLjkgMy41LTE3LjRsNjQtNjR6TTI1NiAzNTJBOTYgOTYgMCAxIDAgNjQgMzUyYTk2IDk2IDAgMSAwIDE5MiAwelwiXVxufTtcbnZhciBmYU1hcnNTdHJva2VWID0gZmFNYXJzU3Ryb2tlVXA7XG52YXIgZmFDaGFtcGFnbmVHbGFzc2VzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYW1wYWduZS1nbGFzc2VzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzQ2LCBcImdsYXNzLWNoZWVyc1wiXSwgXCJmNzlmXCIsIFwiTTE1NS42IDE3LjNDMTYzIDMgMTc5LjktMy42IDE5NSAxLjlMMzIwIDQ3LjVsMTI1LTQ1LjZjMTUuMS01LjUgMzIgMS4xIDM5LjQgMTUuNGw3OC44IDE1Mi45YzI4LjggNTUuOCAxMC4zIDEyMi4zLTM4LjUgMTU2LjZMNTU2LjEgNDEzbDQxLTE1YzE2LjYtNiAzNSAyLjUgNDEgMTkuMXMtMi41IDM1LTE5LjEgNDFsLTcxLjEgMjUuOUw0NzYuOCA1MTBjLTE2LjYgNi4xLTM1LTIuNS00MS0xOS4xczIuNS0zNSAxOS4xLTQxbDQxLTE1LTMxLjMtODYuMmMtNTkuNCA1LjItMTE2LjItMzQtMTMwLTk1LjJMMzIwIDE4OC44bC0xNC42IDY0LjdjLTEzLjggNjEuMy03MC42IDEwMC40LTEzMCA5NS4ybC0zMS4zIDg2LjIgNDEgMTVjMTYuNiA2IDI1LjIgMjQuNCAxOS4xIDQxcy0yNC40IDI1LjItNDEgMTkuMUw5Mi4yIDQ4NC4xIDIxLjEgNDU4LjJjLTE2LjYtNi4xLTI1LjItMjQuNC0xOS4xLTQxczI0LjQtMjUuMiA0MS0xOS4xbDQxIDE1IDMxLjMtODYuMkM2Ni41IDI5Mi41IDQ4LjEgMjI2IDc2LjkgMTcwLjJMMTU1LjYgMTcuM3ptNDQgNTQuNGwtMjcuMiA1Mi44TDI2MS42IDE1N2wxMy4xLTU3LjlMMTk5LjYgNzEuN3ptMjQwLjkgMEwzNjUuNCA5OS4xIDM3OC41IDE1N2w4OS4yLTMyLjVMNDQwLjUgNzEuN3pcIl1cbn07XG52YXIgZmFHbGFzc0NoZWVycyA9IGZhQ2hhbXBhZ25lR2xhc3NlcztcbnZhciBmYUNsaXBib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbGlwYm9hcmQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDNdLCBcImYzMjhcIiwgXCJNMTkyIDBjLTQxLjggMC03Ny40IDI2LjctOTAuNSA2NEg2NEMyOC43IDY0IDAgOTIuNyAwIDEyOFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NEgyODIuNUMyNjkuNCAyNi43IDIzMy44IDAgMTkyIDB6bTAgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xMTIgMTkySDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGFcIiwgXCJNMzIwLjcgMzUyYzguMS04OS43IDgzLjUtMTYwIDE3NS4zLTE2MGM4LjkgMCAxNy42IC43IDI2LjEgMS45TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMydjY5LjdjLS4xIC45LS4xIDEuOC0uMSAyLjhWNDcyYzAgMjIuMSAxNy45IDQwIDQwIDQwaDE2YzEuMiAwIDIuNC0uMSAzLjYtLjJjMS41IC4xIDMgLjIgNC41IC4ySDE2MGgyNGMyMi4xIDAgNDAtMTcuOSA0MC00MFY0NDggMzg0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0bC43IDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhRmlsZUFycm93VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1hcnJvdy11cCcsXG4gIGljb246IFszODQsIDUxMiwgW1wiZmlsZS11cGxvYWRcIl0sIFwiZjU3NFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTIxNiA0MDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMzA1LjlsLTMxIDMxYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDcyLTcyYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMxLTMxVjQwOHpcIl1cbn07XG52YXIgZmFGaWxlVXBsb2FkID0gZmFGaWxlQXJyb3dVcDtcbnZhciBmYVdpZmkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2lmaScsXG4gIGljb246IFs2NDAsIDUxMiwgW1wid2lmaS0zXCIsIFwid2lmaS1zdHJvbmdcIl0sIFwiZjFlYlwiLCBcIk01NC4yIDIwMi45QzEyMy4yIDEzNi43IDIxNi44IDk2IDMyMCA5NnMxOTYuOCA0MC43IDI2NS44IDEwNi45YzEyLjggMTIuMiAzMyAxMS44IDQ1LjItLjlzMTEuOC0zMy0uOS00NS4yQzU0OS43IDc5LjUgNDQwLjQgMzIgMzIwIDMyUzkwLjMgNzkuNSA5LjggMTU2LjdDLTIuOSAxNjktMy4zIDE4OS4yIDguOSAyMDJzMzIuNSAxMy4yIDQ1LjIgLjl6TTMyMCAyNTZjNTYuOCAwIDEwOC42IDIxLjEgMTQ4LjIgNTZjMTMuMyAxMS43IDMzLjUgMTAuNCA0NS4yLTIuOHMxMC40LTMzLjUtMi44LTQ1LjJDNDU5LjggMjE5LjIgMzkzIDE5MiAzMjAgMTkycy0xMzkuOCAyNy4yLTE5MC41IDcyYy0xMy4zIDExLjctMTQuNSAzMS45LTIuOCA0NS4yczMxLjkgMTQuNSA0NS4yIDIuOGMzOS41LTM0LjkgOTEuMy01NiAxNDguMi01NnptNjQgMTYwYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpcIl1cbn07XG52YXIgZmFXaWZpMyA9IGZhV2lmaTtcbnZhciBmYVdpZmlTdHJvbmcgPSBmYVdpZmk7XG52YXIgZmFCYXRoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhdGgnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MDUsIFwiYmF0aHR1YlwiXSwgXCJmMmNkXCIsIFwiTTk2IDc3LjNjMC03LjMgNS45LTEzLjMgMTMuMy0xMy4zYzMuNSAwIDYuOSAxLjQgOS40IDMuOWwxNC45IDE0LjlDMTMwIDkxLjggMTI4IDEwMS43IDEyOCAxMTJjMCAxOS45IDcuMiAzOCAxOS4yIDUyYy01LjMgOS4yLTQgMjEuMSAzLjggMjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBMMjg5IDg5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45Yy03LjktNy45LTE5LjgtOS4xLTI5LTMuOEMyNDYgMzkuMiAyMjcuOSAzMiAyMDggMzJjLTEwLjMgMC0yMC4yIDItMjkuMiA1LjVMMTYzLjkgMjIuNkMxNDkuNCA4LjEgMTI5LjcgMCAxMDkuMyAwQzY2LjYgMCAzMiAzNC42IDMyIDc3LjNWMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg5NlY3Ny4zek0zMiAzNTJ2MTZjMCAyOC40IDEyLjQgNTQgMzIgNzEuNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NjRIMzg0djE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDM5LjZjMTkuNi0xNy42IDMyLTQzLjEgMzItNzEuNlYzNTJIMzJ6XCJdXG59O1xudmFyIGZhQmF0aHR1YiA9IGZhQmF0aDtcbnZhciBmYVVuZGVybGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1bmRlcmxpbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwY2RcIiwgXCJNMTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTI4VjIyNGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2Vjk2SDMwNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRWMjI0YzAgODguNC03MS42IDE2MC0xNjAgMTYwcy0xNjAtNzEuNi0xNjAtMTYwVjk2SDQ4QzMwLjMgOTYgMTYgODEuNyAxNiA2NHpNMCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFVc2VyUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItcGVuJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2VyLWVkaXRcIl0sIFwiZjRmZlwiLCBcIk0yMjQgMjU2QTEyOCAxMjggMCAxIDAgMjI0IDBhMTI4IDEyOCAwIDEgMCAwIDI1NnptLTQ1LjcgNDhDNzkuOCAzMDQgMCAzODMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJIMzIyLjhjLTMuMS04LjgtMy43LTE4LjQtMS40LTI3LjhsMTUtNjAuMWMyLjgtMTEuMyA4LjYtMjEuNSAxNi44LTI5LjdsNDAuMy00MC4zYy0zMi4xLTMxLTc1LjctNTAuMS0xMjMuOS01MC4xSDE3OC4zem00MzUuNS02OC4zYy0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMGwtMjkuNCAyOS40IDcxIDcxIDI5LjQtMjkuNGMxNS42LTE1LjYgMTUuNi00MC45IDAtNTYuNmwtMTQuNC0xNC40ek0zNzUuOSA0MTdjLTQuMSA0LjEtNyA5LjItOC40IDE0LjlsLTE1IDYwLjFjLTEuNCA1LjUgLjIgMTEuMiA0LjIgMTUuMnM5LjcgNS42IDE1LjIgNC4ybDYwLjEtMTVjNS42LTEuNCAxMC44LTQuMyAxNC45LTguNEw1NzYuMSAzNTguN2wtNzEtNzFMMzc1LjkgNDE3elwiXVxufTtcbnZhciBmYVVzZXJFZGl0ID0gZmFVc2VyUGVuO1xudmFyIGZhU2lnbmF0dXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NpZ25hdHVyZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjViN1wiLCBcIk0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2Ny44YzAgMjcuNy0yLjQgNTUuMy03LjEgODIuNWwtODQuNCAyNS4zYy00MC42IDEyLjItNjguNCA0OS42LTY4LjQgOTJ2NzEuOWMwIDQwIDMyLjUgNzIuNSA3Mi41IDcyLjVjMjYgMCA1MC0xMy45IDYyLjktMzYuNWwxMy45LTI0LjNjMjYuOC00NyA0Ni41LTk3LjcgNTguNC0xNTAuNWw5NC40LTI4LjMtMTIuNSAzNy41Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44czE1LjcgMTMuMyAyNiAxMy4zSDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NjAuNGwxOC01My45YzMuOC0xMS4zIC45LTIzLjgtNy40LTMyLjRzLTIwLjctMTEuOC0zMi4yLTguNEwzMTYuNCAxOTguMWMyLjQtMjAuNyAzLjYtNDEuNCAzLjYtNjIuM1YxMjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxMjh6bS05LjIgMTc3bDQ5LTE0LjdjLTEwLjQgMzMuOC0yNC41IDY2LjQtNDIuMSA5Ny4ybC0xMy45IDI0LjNjLTEuNSAyLjYtNC4zIDQuMy03LjQgNC4zYy00LjcgMC04LjUtMy44LTguNS04LjVWMzM1LjZjMC0xNC4xIDkuMy0yNi42IDIyLjgtMzAuN3pNMjQgMzY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDY0LjNjLS4yLTIuOC0uMy01LjYtLjMtOC41VjM2OEgyNHptNTkyIDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDMwNS45Yy02LjcgMTYuMy0xNC4yIDMyLjMtMjIuMyA0OEg2MTZ6XCJdXG59O1xudmFyIGZhU3Ryb29wd2FmZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Ryb29wd2FmZWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NTFcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0zMTIuNiA2My43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEwyNTYgOTcuNiAyMjIuMSA2My43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDMzLjkgMzMuOS00NS4zIDQ1LjMtNTYuNi01Ni42Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDU2LjYgNTYuNi00NS4zIDQ1LjNMODYuMyAxOTkuNGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw5Ny42IDI1NiA2My43IDI4OS45Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzMuOS0zMy45IDQ1LjMgNDUuMy01Ni42IDU2LjZjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni42LTU2LjYgNDUuMyA0NS4zLTMzLjkgMzMuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDI1NiA0MTQuNGwzMy45IDMzLjljNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zMy45LTMzLjkgNDUuMy00NS4zIDU2LjYgNTYuNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTU2LjYtNTYuNiA0NS4zLTQ1LjMgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw0MTQuNCAyNTZsMzMuOS0zMy45YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTMzLjkgMzMuOS00NS4zLTQ1LjMgNTYuNi01Ni42YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTU2LjYgNTYuNi00NS4zLTQ1LjMgMzMuOS0zMy45YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42ek0xNDIuOSAyNTZsNDUuMy00NS4zTDIzMy40IDI1NmwtNDUuMyA0NS4zTDE0Mi45IDI1NnptNjcuOSA2Ny45TDI1NiAyNzguNmw0NS4zIDQ1LjNMMjU2IDM2OS4xbC00NS4zLTQ1LjN6TTI3OC42IDI1Nmw0NS4zLTQ1LjNMMzY5LjEgMjU2bC00NS4zIDQ1LjNMMjc4LjYgMjU2em0yMi42LTY3LjlMMjU2IDIzMy40bC00NS4zLTQ1LjNMMjU2IDE0Mi45bDQ1LjMgNDUuM3pcIl1cbn07XG52YXIgZmFCb2xkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvbGQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYwMzJcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMkg4MCA5NiAyMjRjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhjMCAzMS4zLTExLjMgNjAuMS0zMCA4Mi4zYzM3LjEgMjIuNCA2MiA2My4xIDYyIDEwOS43YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4SDk2IDgwIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ4VjI1NiA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0ek0yMjQgMjI0YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0SDExMlYyMjRIMjI0ek0xMTIgMjg4VjQxNkgyNTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRIMjI0IDExMnpcIl1cbn07XG52YXIgZmFBbmNob3JMb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FuY2hvci1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGFkXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzggMCAxNS45LS42IDIzLjYtMS43Yy00LjgtOS03LjYtMTkuMy03LjYtMzAuM1Y0NDYuN2MtNS4yIC45LTEwLjUgMS4zLTE2IDEuM0gzMjBWMjQwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM0MS4xek01MjggMjQwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQ5NlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbnZhciBmYUJ1aWxkaW5nTmdvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLW5nbycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRkN1wiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoOTZWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2ODBoOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek0xNjggNjRoNDhjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTg0djY0aDE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djI0YzAgMTMuMy0xMC43IDI0LTI0IDI0SDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRWODBjMC04LjggNy4yLTE2IDE2LTE2ek0zMDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZ6bS00OCAxNmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjExMnpNNjEuMyA3MS4xbDM0LjcgNTJWODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40TDY0IDEzMi44VjE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY4MGMwLTcuMSA0LjYtMTMuMyAxMS40LTE1LjNzMTQgLjYgMTcuOSA2LjR6XCJdXG59O1xudmFyIGZhTWFuYXRTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hbmF0LXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxZDVcIiwgXCJNMTkyIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMlY5OC43QzY5LjIgMTEzLjkgMCAxOTIuOSAwIDI4OFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhjMC01OS42IDQwLjgtMTA5LjggOTYtMTI0VjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2NGM1NS4yIDE0LjIgOTYgNjQuMyA5NiAxMjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4YzAtOTUuMS02OS4yLTE3NC4xLTE2MC0xODkuM1Y2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpcIl1cbn07XG52YXIgZmFOb3RFcXVhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdub3QtZXF1YWwnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1M2VcIiwgXCJNMzY5LjggMzcuNGMxNC43IDkuOCAxOC43IDI5LjcgOC45IDQ0LjRMMzM3LjEgMTQ0SDQwMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyOTQuNWwtNjQgOTZINDAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE4Ny44bC02NS4yIDk3LjdjLTkuOCAxNC43LTI5LjcgMTguNy00NC40IDguOXMtMTguNy0yOS43LTguOS00NC40TDExMC45IDM2OEg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxNTMuNWw2NC05Nkg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgyNjAuMmw2NS4yLTk3LjdjOS44LTE0LjcgMjkuNy0xOC43IDQ0LjQtOC45elwiXVxufTtcbnZhciBmYUJvcmRlclRvcExlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9yZGVyLXRvcC1sZWZ0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJib3JkZXItc3R5bGVcIl0sIFwiZjg1M1wiLCBcIk0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzM2YzAtOC44IDcuMi0xNiAxNi0xNmwzMzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCAzMkMzNS44IDMyIDAgNjcuOCAwIDExMkwwIDQ0OHptMTYwIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTkyIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptLTk2IDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTkyIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDE2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTAgMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQm9yZGVyU3R5bGUgPSBmYUJvcmRlclRvcExlZnQ7XG52YXIgZmFNYXBMb2NhdGlvbkRvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXAtbG9jYXRpb24tZG90JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJtYXAtbWFya2VkLWFsdFwiXSwgXCJmNWEwXCIsIFwiTTQwOCAxMjBjMCA1NC42LTczLjEgMTUxLjktMTA1LjIgMTkyYy03LjcgOS42LTIyIDkuNi0yOS42IDBDMjQxLjEgMjcxLjkgMTY4IDE3NC42IDE2OCAxMjBDMTY4IDUzLjcgMjIxLjcgMCAyODggMHMxMjAgNTMuNyAxMjAgMTIwem04IDgwLjRjMy41LTYuOSA2LjctMTMuOCA5LjYtMjAuNmMuNS0xLjIgMS0yLjUgMS41LTMuN2wxMTYtNDYuNEM1NTguOSAxMjMuNCA1NzYgMTM1IDU3NiAxNTJWNDIyLjhjMCA5LjgtNiAxOC42LTE1LjEgMjIuM0w0MTYgNTAzVjIwMC40ek0xMzcuNiAxMzguM2MyLjQgMTQuMSA3LjIgMjguMyAxMi44IDQxLjVjMi45IDYuOCA2LjEgMTMuNyA5LjYgMjAuNlY0NTEuOEwzMi45IDUwMi43QzE3LjEgNTA5IDAgNDk3LjQgMCA0ODAuNFYyMDkuNmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMi42LTQ5ek0zMjcuOCAzMzJjMTMuOS0xNy40IDM1LjctNDUuNyA1Ni4yLTc3VjUwNC4zTDE5MiA0NDkuNFYyNTVjMjAuNSAzMS4zIDQyLjMgNTkuNiA1Ni4yIDc3YzIwLjUgMjUuNiA1OS4xIDI1LjYgNzkuNiAwek0yODggMTUyYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpcIl1cbn07XG52YXIgZmFNYXBNYXJrZWRBbHQgPSBmYU1hcExvY2F0aW9uRG90O1xudmFyIGZhSmVkaSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqZWRpJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNjY5XCIsIFwiTTI0NiAzMTUuN2wtMjEuMi0zMS45Yy0yLjEtMy4yLTEuNy03LjQgMS0xMC4xczYuOS0zLjEgMTAuMS0xbDI5LjUgMTkuN2MyLjEgMS40IDQuOSAwIDUtMi42TDI3OS43IDhjLjEtNC41IDMuOC04IDguMy04czguMSAzLjUgOC4zIDhsOS40IDI4MS45Yy4xIDIuNSAyLjkgMy45IDUgMi42bDI5LjUtMTkuN2MzLjItMi4xIDcuNC0xLjcgMTAuMSAxczMuMSA2LjkgMSAxMC4xTDMzMCAzMTUuN2MtMS4zIDEuOS0uMiA0LjUgMiA0LjlsMzcuNiA3LjVjMy43IC43IDYuNCA0IDYuNCA3LjhzLTIuNyA3LjEtNi40IDcuOEwzMzIgMzUxLjRjLTIuMiAuNC0zLjMgMy0yIDQuOWwyMS4yIDMxLjljMi4xIDMuMiAxLjcgNy40LTEgMTAuMXMtNi45IDMuMS0xMC4xIDFsLTI2LjMtMTcuNmMtMi4yLTEuNC01LjEgLjItNSAyLjhsMi4xIDYxLjVDMzcwLjYgNDM1LjIgNDE2IDM4Mi45IDQxNiAzMjBjMC0zNy0xNS43LTcwLjQtNDAuOC05My43Yy03LTYuNS02LjUtMTguNiAxLTI0LjRDNDEwLjEgMTc1LjUgNDMyIDEzNC4zIDQzMiA4OGMwLTE2LjgtMi45LTMzLTguMi00OGMtNC42LTEzIDEwLjItMzAgMjEuNC0yMmM1My41IDM4IDkyLjcgOTQuOCAxMDcuOCAxNjAuN2MuNSAyLjEtLjIgNC4zLTEuNyA1LjlsLTI4LjQgMjguNGMtNCA0LTEuMiAxMC45IDQuNSAxMC45aDI2YzMuNCAwIDYuMiAyLjYgNi4zIDZjLjEgMy4zIC4yIDYuNiAuMiAxMGMwIDE3LjUtMS43IDM0LjctNC44IDUxLjNjLS4yIDEuMi0uOSAyLjQtMS43IDMuM2wtNDYuNSA0Ni41Yy00IDQtMS4yIDEwLjkgNC41IDEwLjlINTI2YzQuNiAwIDcuNyA0LjggNS43IDlDNDg3LjIgNDUwLjUgMzk0LjggNTEyIDI4OCA1MTJTODguOCA0NTAuNSA0NC4zIDM2MWMtMi4xLTQuMiAxLTkgNS43LTlINjQuNWM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDIyLjYgMjk0LjZjLS45LS45LTEuNS0yLTEuNy0zLjNDMTcuNyAyNzQuNyAxNiAyNTcuNSAxNiAyNDBjMC0zLjMgLjEtNi43IC4yLTEwYy4xLTMuNCAyLjktNiA2LjMtNmgyNmM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDI0LjYgMTg0LjZjLTEuNS0xLjUtMi4yLTMuOC0xLjctNS45QzM4LjEgMTEyLjggNzcuMyA1NiAxMzAuOCAxOGMxMS4zLTggMjYgOC45IDIxLjQgMjJjLTUuMyAxNS04LjIgMzEuMi04LjIgNDhjMCA0Ni4zIDIxLjkgODcuNSA1NS44IDExMy45YzcuNSA1LjggOCAxNy45IDEgMjQuNEMxNzUuNyAyNDkuNiAxNjAgMjgzIDE2MCAzMjBjMCA2Mi45IDQ1LjQgMTE1LjIgMTA1LjEgMTI2bDIuMS02MS41Yy4xLTIuNi0yLjgtNC4yLTUtMi44bC0yNi4zIDE3LjZjLTMuMiAyLjEtNy40IDEuNy0xMC4xLTFzLTMuMS02LjktMS0xMC4xTDI0NiAzNTYuM2MxLjMtMS45IC4yLTQuNS0yLTQuOWwtMzcuNi03LjVjLTMuNy0uNy02LjQtNC02LjQtNy44czIuNy03LjEgNi40LTcuOGwzNy42LTcuNWMyLjItLjQgMy4zLTMgMi00Ljl6XCJdXG59O1xudmFyIGZhU3F1YXJlUG9sbFZlcnRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wb2xsLXZlcnRpY2FsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJwb2xsXCJdLCBcImY2ODFcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCAxOTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNjB6TTMyMCAyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVBvbGwgPSBmYVNxdWFyZVBvbGxWZXJ0aWNhbDtcbnZhciBmYU11Z0hvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtdWctaG90JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTc0OV0sIFwiZjdiNlwiLCBcIk04OCAwQzc0LjcgMCA2NCAxMC43IDY0IDI0YzAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxQzEyMC41IDExMi4zIDEyOCAxMTkuOSAxMjggMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzExOS41IDQ3LjcgMTEyIDQwLjEgMTEyIDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQxNmMwIDUzIDQzIDk2IDk2IDk2SDI4OGM1MyAwIDk2LTQzIDk2LTk2aDE2YzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEySDM1MiAzMnptMzUyIDY0aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDM4NFYyNTZ6TTIyNCAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMUMyMzIuNSAxMTIuMyAyNDAgMTE5LjkgMjQwIDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMyMzEuNSA0Ny43IDIyNCA0MC4xIDIyNCAyNHpcIl1cbn07XG52YXIgZmFDYXJCYXR0ZXJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nhci1iYXR0ZXJ5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJiYXR0ZXJ5LWNhclwiXSwgXCJmNWRmXCIsIFwiTTgwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJoMTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYgMHptMzA0IDk2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djMySDMyMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmgzMnYzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI1NmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzODRWMTkyek04MCAyNDBjMCA4LjggNy4yIDE2IDE2IDE2aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhQmF0dGVyeUNhciA9IGZhQ2FyQmF0dGVyeTtcbnZhciBmYUdpZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2lmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzg3M10sIFwiZjA2YlwiLCBcIk0xOTAuNSA2OC44TDIyNS4zIDEyOEgyMjQgMTUyYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwaDIuMmMxNC45IDAgMjguOCA3LjkgMzYuMyAyMC44ek02NCA4OGMwIDE0LjQgMy41IDI4IDkuNiA0MEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkg0MzguNGM2LjEtMTIgOS42LTI1LjYgOS42LTQwYzAtNDguNi0zOS40LTg4LTg4LTg4aC0yLjJjLTMxLjkgMC02MS41IDE2LjktNzcuNyA0NC40TDI1NiA4NS41bC0yNC4xLTQxQzIxNS43IDE2LjkgMTg2LjEgMCAxNTQuMiAwSDE1MkMxMDMuNCAwIDY0IDM5LjQgNjQgODh6bTMzNiAwYzAgMjIuMS0xNy45IDQwLTQwIDQwSDI4OGgtMS4zbDM0LjgtNTkuMkMzMjkuMSA1NS45IDM0Mi45IDQ4IDM1Ny44IDQ4SDM2MGMyMi4xIDAgNDAgMTcuOSA0MCA0MHpNMzIgMjg4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyMjRWMjg4SDMyek0yODggNTEySDQzMmMyNi41IDAgNDgtMjEuNSA0OC00OFYyODhIMjg4VjUxMnpcIl1cbn07XG52YXIgZmFEaWNlVHdvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UtdHdvJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbOTg1N10sIFwiZjUyOFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2ek0zNTIgMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYUNoZXNzUXVlZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlc3MtcXVlZW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODE5XSwgXCJmNDQ1XCIsIFwiTTI1NiAwYTU2IDU2IDAgMSAxIDAgMTEyQTU2IDU2IDAgMSAxIDI1NiAwek0xMzQuMSAxNDMuOGMzLjMtMTMgMTUtMjMuOCAzMC4yLTIzLjhjMTIuMyAwIDIyLjYgNy4yIDI3LjcgMTdjMTIgMjMuMiAzNi4yIDM5IDY0IDM5czUyLTE1LjggNjQtMzljNS4xLTkuOCAxNS40LTE3IDI3LjctMTdjMTUuMyAwIDI3IDEwLjggMzAuMiAyMy44YzcgMjcuOCAzMi4yIDQ4LjMgNjIuMSA0OC4zYzEwLjggMCAyMS0yLjcgMjkuOC03LjRjOC40LTQuNCAxOC45LTQuNSAyNy42IC45YzEzIDggMTcuMSAyNSA5LjIgMzhMMzk5LjcgNDAwSDM4NCAzNDMuNiAxNjguNCAxMjggMTEyLjNMNS40IDIyMy42Yy03LjktMTMtMy44LTMwIDkuMi0zOGM4LjctNS4zIDE5LjItNS4zIDI3LjYtLjljOC45IDQuNyAxOSA3LjQgMjkuOCA3LjRjMjkuOSAwIDU1LjEtMjAuNSA2Mi4xLTQ4LjN6TTI1NiAyMjRsMCAwIDAgMGgwek0xMTIgNDMySDQwMGw0MS40IDQxLjRjNC4yIDQuMiA2LjYgMTAgNi42IDE2YzAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42SDg2LjZDNzQuMSA1MTIgNjQgNTAxLjkgNjQgNDg5LjRjMC02IDIuNC0xMS44IDYuNi0xNkwxMTIgNDMyelwiXVxufTtcbnZhciBmYUdsYXNzZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2xhc3NlcycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjUzMFwiLCBcIk0xMTguNiA4MGMtMTEuNSAwLTIxLjQgNy45LTI0IDE5LjFMNTcgMjYwLjNjMjAuNS02LjIgNDguMy0xMi4zIDc4LjctMTIuM2MzMi4zIDAgNjEuOCA2LjkgODIuOCAxMy41YzEwLjYgMy4zIDE5LjMgNi43IDI1LjQgOS4yYzMuMSAxLjMgNS41IDIuNCA3LjMgMy4yYy45IC40IDEuNiAuNyAyLjEgMWwuNiAuMyAuMiAuMSAuMSAwIDAgMCAwIDBzMCAwLTYuMyAxMi43aDBsNi4zLTEyLjdjNS44IDIuOSAxMC40IDcuMyAxMy41IDEyLjdoNDAuNmMzLjEtNS4zIDcuNy05LjggMTMuNS0xMi43bDYuMyAxMi43aDBjLTYuMy0xMi43LTYuMy0xMi43LTYuMy0xMi43bDAgMCAwIDAgLjEgMCAuMi0uMSAuNi0uM2MuNS0uMiAxLjItLjYgMi4xLTFjMS44LS44IDQuMi0xLjkgNy4zLTMuMmM2LjEtMi42IDE0LjgtNS45IDI1LjQtOS4yYzIxLTYuNiA1MC40LTEzLjUgODIuOC0xMy41YzMwLjQgMCA1OC4yIDYuMSA3OC43IDEyLjNMNDgxLjQgOTkuMWMtMi42LTExLjItMTIuNi0xOS4xLTI0LTE5LjFjLTMuMSAwLTYuMiAuNi05LjIgMS44TDQxNi45IDk0LjNjLTEyLjMgNC45LTI2LjMtMS4xLTMxLjItMTMuNHMxLjEtMjYuMyAxMy40LTMxLjJsMzEuMy0xMi41YzguNi0zLjQgMTcuNy01LjIgMjctNS4yYzMzLjggMCA2My4xIDIzLjMgNzAuOCA1Ni4ybDQzLjkgMTg4YzEuNyA3LjMgMi45IDE0LjcgMy41IDIyLjFjLjMgMS45IC41IDMuOCAuNSA1Ljd2Ni43VjM1MnYxNmMwIDYxLjktNTAuMSAxMTItMTEyIDExMkg0MTkuN2MtNTkuNCAwLTEwOC41LTQ2LjQtMTExLjgtMTA1LjhMMzA2LjYgMzUySDI2OS40bC0xLjIgMjIuMkMyNjQuOSA0MzMuNiAyMTUuOCA0ODAgMTU2LjMgNDgwSDExMkM1MC4xIDQ4MCAwIDQyOS45IDAgMzY4VjM1MiAzMTAuNyAzMDRjMC0xLjkgLjItMy44IC41LTUuN2MuNi03LjQgMS44LTE0LjggMy41LTIyLjFsNDMuOS0xODhDNTUuNSA1NS4zIDg0LjggMzIgMTE4LjYgMzJjOS4yIDAgMTguNCAxLjggMjcgNS4ybDMxLjMgMTIuNWMxMi4zIDQuOSAxOC4zIDE4LjkgMTMuNCAzMS4ycy0xOC45IDE4LjMtMzEuMiAxMy40TDEyNy44IDgxLjhjLTIuOS0xLjItNi0xLjgtOS4yLTEuOHpNNjQgMzI1LjRWMzY4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDQ0LjNjMjUuNSAwIDQ2LjUtMTkuOSA0Ny45LTQ1LjNsMi41LTQ1LjZjLTIuMy0uOC00LjktMS43LTcuNS0yLjVjLTE3LjItNS40LTM5LjktMTAuNS02My42LTEwLjVjLTIzLjcgMC00Ni4yIDUuMS02My4yIDEwLjVjLTMuMSAxLTUuOSAxLjktOC41IDIuOXpNNTEyIDM2OFYzMjUuNGMtMi42LS45LTUuNS0xLjktOC41LTIuOWMtMTctNS40LTM5LjUtMTAuNS02My4yLTEwLjVjLTIzLjcgMC00Ni40IDUuMS02My42IDEwLjVjLTIuNyAuOC01LjIgMS43LTcuNSAyLjVsMi41IDQ1LjZjMS40IDI1LjQgMjIuNSA0NS4zIDQ3LjkgNDUuM0g0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6XCJdXG59O1xudmFyIGZhQ2hlc3NCb2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1ib2FyZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjQzY1wiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDY0djY0aDY0Vjk2aDY0djY0aDY0Vjk2aDY0djY0SDMyMHY2NGg2NHY2NEgzMjB2NjRoNjR2NjRIMzIwVjM1MkgyNTZ2NjRIMTkyVjM1MkgxMjh2NjRINjRWMzUyaDY0VjI4OEg2NFYyMjRoNjRWMTYwSDY0Vjk2aDY0em02NCAxMjhoNjRWMTYwSDE5MnY2NHptMCA2NFYyMjRIMTI4djY0aDY0em02NCAwSDE5MnY2NGg2NFYyODh6bTAgMGg2NFYyMjRIMjU2djY0elwiXVxufTtcbnZhciBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmctY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGQyXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg5NmMxNS4xIDAgMjguNS02LjkgMzcuMy0xNy44QzM0MC40IDQ2Mi4yIDMyMCA0MTcuNSAzMjAgMzY4YzAtNTQuNyAyNC45LTEwMy41IDY0LTEzNS44VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNjQwIDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl1cbn07XG52YXIgZmFQZXJzb25DaGFsa2JvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaGFsa2JvYXJkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTNkXCIsIFwiTTE5MiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04IDM4NFYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTkyaDU2IDY0IDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM4NFY2NEg1NzZWMjU2SDM4NFYyMjRIMzIwdjQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEgzNjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djgwSDI0My4xIDE3Ny4xYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOUwxMjAgMjU2LjlWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6XCJdXG59O1xudmFyIGZhTWFyc1N0cm9rZVJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcnMtc3Ryb2tlLXJpZ2h0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTg5NywgXCJtYXJzLXN0cm9rZS1oXCJdLCBcImYyMmJcIiwgXCJNMjA4IDM2OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6bTE3NC40LTg4QzM3MC43IDM2NS44IDI5Ny4xIDQzMiAyMDggNDMyYy05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NnM3OC44LTE3NiAxNzYtMTc2Yzg5LjEgMCAxNjIuNyA2Ni4yIDE3NC40IDE1Mkg0MTZWMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NTZoMzJWMTc2YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODAgODBjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJzLTE0LjgtMTIuNS0xNC44LTIyLjJWMjgwSDQ2NHY1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODBIMzgyLjR6XCJdXG59O1xudmFyIGZhTWFyc1N0cm9rZUggPSBmYU1hcnNTdHJva2VSaWdodDtcbnZhciBmYUhhbmRCYWNrRmlzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWJhY2stZmlzdCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiaGFuZC1yb2NrXCJdLCBcImYyNTVcIiwgXCJNMTQ0IDBDMTE3LjUgMCA5NiAyMS41IDk2IDQ4Vjk2djI4LjVWMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjE0OS4zbC05IDcuNUM0MC40IDE2OSAzMiAxODcgMzIgMjA2VjI0NGMwIDM4IDE2LjkgNzQgNDYuMSA5OC4zTDEyOCAzODR2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM3NC43YzQ2LjktMTkgODAtNjUgODAtMTE4LjdWMTc2IDE2MCAxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhjLTEyLjQgMC0yMy42IDQuNy0zMi4xIDEyLjNDMzUwIDgzLjUgMzI5LjMgNjQgMzA0IDY0Yy0xMi40IDAtMjMuNiA0LjctMzIuMSAxMi4zQzI3MCA1MS41IDI0OS4zIDMyIDIyNCAzMmMtMTIuNCAwLTIzLjYgNC43LTMyLjEgMTIuM0MxOTAgMTkuNSAxNjkuMyAwIDE0NCAwelwiXVxufTtcbnZhciBmYUhhbmRSb2NrID0gZmFIYW5kQmFja0Zpc3Q7XG52YXIgZmFTcXVhcmVDYXJldFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1jYXJldC11cCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiY2FyZXQtc3F1YXJlLXVwXCJdLCBcImYxNTFcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0yMjQgMTYwYzYuNyAwIDEzIDIuOCAxNy42IDcuN2wxMDQgMTEyYzYuNSA3IDguMiAxNy4yIDQuNCAyNS45cy0xMi41IDE0LjQtMjIgMTQuNEgxMjBjLTkuNSAwLTE4LjItNS43LTIyLTE0LjRzLTIuMS0xOC45IDQuNC0yNS45bDEwNC0xMTJjNC41LTQuOSAxMC45LTcuNyAxNy42LTcuN3pcIl1cbn07XG52YXIgZmFDYXJldFNxdWFyZVVwID0gZmFTcXVhcmVDYXJldFVwO1xudmFyIGZhQ2xvdWRTaG93ZXJzV2F0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtc2hvd2Vycy13YXRlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRlNFwiLCBcIk0yMjQgMGMzOC42IDAgNzEuOSAyMi44IDg3LjIgNTUuN0MzMjUuNyA0MS4xIDM0NS44IDMyIDM2OCAzMmMzOC43IDAgNzEgMjcuNSA3OC40IDY0SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NEgxMjhjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMC01MyA0My05NiA5Ni05NnpNMTQwLjYgMjkyLjNsLTQ4IDgwYy02LjggMTEuNC0yMS42IDE1LTMyLjkgOC4ycy0xNS4xLTIxLjYtOC4yLTMyLjlsNDgtODBjNi44LTExLjQgMjEuNi0xNS4xIDMyLjktOC4yczE1LjEgMjEuNiA4LjIgMzIuOXptMzI3LjgtMzIuOWMxMS40IDYuOCAxNSAyMS42IDguMiAzMi45bC00OCA4MGMtNi44IDExLjQtMjEuNiAxNS0zMi45IDguMnMtMTUtMjEuNi04LjItMzIuOWw0OC04MGM2LjgtMTEuNCAyMS42LTE1LjEgMzIuOS04LjJ6TTI1Mi42IDI5Mi4zbC00OCA4MGMtNi44IDExLjQtMjEuNiAxNS0zMi45IDguMnMtMTUuMS0yMS42LTguMi0zMi45bDQ4LTgwYzYuOC0xMS40IDIxLjYtMTUuMSAzMi45LTguMnMxNS4xIDIxLjYgOC4yIDMyLjl6bTEwMy44LTMyLjljMTEuNCA2LjggMTUgMjEuNiA4LjIgMzIuOWwtNDggODBjLTYuOCAxMS40LTIxLjYgMTUtMzIuOSA4LjJzLTE1LjEtMjEuNi04LjItMzIuOWw0OC04MGM2LjgtMTEuNCAyMS42LTE1LjEgMzIuOS04LjJ6TTMwNi41IDQyMS45QzMyOSA0MzcuNCAzNTYuNSA0NDggMzg0IDQ0OGMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA1MDEuNyA0MTcgNTEyIDM4NCA1MTJjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyA0MzcuMiAxNjUuMSA0NDggMTkyIDQ0OGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl1cbn07XG52YXIgZmFDaGFydEJhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1iYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImJhci1jaGFydFwiXSwgXCJmMDgwXCIsIFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQwMGMwIDguOCA3LjIgMTYgMTYgMTZINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDgwYy00NC4yIDAtODAtMzUuOC04MC04MFY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgNjRIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCA5Nkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYUJhckNoYXJ0ID0gZmFDaGFydEJhcjtcbnZhciBmYUhhbmRzQnViYmxlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kcy1idWJibGVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJoYW5kcy13YXNoXCJdLCBcImUwNWVcIiwgXCJNNDE2IDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptOTYgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0zMiAxNjBsLjEgNzIuNmMuMSA1Mi4yIDI0IDEwMSA2NCAxMzMuMWMtLjEtMS45LS4xLTMuOC0uMS01Ljd2LThjMC03MS44IDM3LTEzOC42IDk3LjktMTc2LjdsNjAuMi0zNy42YzguNi01LjQgMTcuOS04LjQgMjcuMy05LjRsNDUuOS03OS41YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOGwtNzggMTM1LjFjLTMuMyA1LjctMTAuNyA3LjctMTYuNCA0LjRzLTcuNy0xMC43LTQuNC0xNi40bDYyLTEwNy40YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44UzIxNCA1IDIwNy40IDE2LjVsLTY4IDExNy44IDAgMCAwIDAtNDMuMyA3NUw5NiAxNjBjMC0xNy43LTE0LjQtMzItMzItMzJzLTMyIDE0LjQtMzIgMzJ6TTMzMi4xIDg4LjVMMzA3LjUgMTMxYzEzLjkgNC41IDI2LjQgMTMuNyAzNC43IDI3Yy45IDEuNSAxLjggMi45IDIuNSA0LjRsMjguOS01MGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6bTQ2LjQgNjMuN2wtMjYuOCA0Ni40Yy0uNiA2LTIuMSAxMS44LTQuMyAxNy40SDM1MmgxMy4zbDAgMEgzOTdsMjMtMzkuOGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6TTMxNS4xIDE3NWMtOS40LTE1LTI5LjEtMTkuNS00NC4xLTEwLjJsLTYwLjIgMzcuNkMxNTkuMyAyMzQuNyAxMjggMjkxLjIgMTI4IDM1MnY4YzAgOC45IC44IDE3LjYgMi4yIDI2LjFjMzUuNCA4LjIgNjEuOCA0MCA2MS44IDc3LjljMCA2LjMtLjcgMTIuNS0yLjEgMTguNEMyMTUuMSA1MDEgMjQ2LjMgNTEyIDI4MCA1MTJINDU2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDM2NGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMkg0ODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzY0Yy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEySDUyMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgzNjRjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJINDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDM1MmwwIDAgMCAwSDI1OC44TDMwNSAyMTkuMWMxNS05LjQgMTkuNS0yOS4xIDEwLjItNDQuMXpcIl1cbn07XG52YXIgZmFIYW5kc1dhc2ggPSBmYUhhbmRzQnViYmxlcztcbnZhciBmYUxlc3NUaGFuRXF1YWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGVzcy10aGFuLWVxdWFsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmNTM3XCIsIFwiTTM5NS45IDkzLjdjMTYuNC02LjYgMjQuNC0yNS4yIDE3LjgtNDEuNnMtMjUuMi0yNC40LTQxLjYtMTcuOGwtMzIwIDEyOEM0MCAxNjcuMSAzMiAxNzguOSAzMiAxOTJzOCAyNC45IDIwLjEgMjkuN2wzMjAgMTI4YzE2LjQgNi42IDM1LTEuNCA0MS42LTE3LjhzLTEuNC0zNS0xNy44LTQxLjZMMTUwLjIgMTkyIDM5NS45IDkzLjd6TTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdXG59O1xudmFyIGZhVHJhaW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhaW4nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg2NDZdLCBcImYyMzhcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NlYzNTJjMCA0OCAzNS4yIDg3LjcgODEuMSA5NC45bC00NiA0NkMyOC4xIDQ5OS45IDMzLjEgNTEyIDQzIDUxMkg4Mi43YzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDE2MCA0NDhIMjg4bDU0LjYgNTQuNmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRINDA1YzEwIDAgMTUtMTIuMSA3LjktMTkuMWwtNDYtNDZjNDYtNy4xIDgxLjEtNDYuOSA4MS4xLTk0LjlWOTZjMC01My00My05Ni05Ni05Nkg5NnpNNjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY5NnpNMjI0IDI4OGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xudmFyIGZhRXllTG93VmlzaW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V5ZS1sb3ctdmlzaW9uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJsb3ctdmlzaW9uXCJdLCBcImYyYThcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w1MjUuNiAzODYuN2MzOS42LTQwLjYgNjYuNC04Ni4xIDc5LjktMTE4LjRjMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjZjLTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjFDNDY1LjUgNjguOCA0MDAuOCAzMiAzMjAgMzJjLTY4LjIgMC0xMjUgMjYuMy0xNjkuMyA2MC44TDM4LjggNS4xek0yMjMgMTQ5LjVjNDguNi00NC4zIDEyMy01MC44IDE3OS4zLTExLjdjNjAuOCA0Mi40IDc4LjkgMTIzLjIgNDQuMiAxODYuOUw0MDggMjk0LjVjOC40LTE5LjMgMTAuNi00MS40IDQuOC02My4zYy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM2MwIDEwLjItMi40IDE5LjgtNi42IDI4LjNMMjIzIDE0OS41em0tMTM5LjkgMTJjLTExIDE0LjQtMjAuNSAyOC43LTI4LjQgNDIuMmwzMzkgMjY1LjdjMTguNy01LjUgMzYuMi0xMyA1Mi42LTIxLjhMODMuMSAxNjEuNXptLTUwIDg2LjNjLTEuOCA2LjgtMS4zIDE0IDEuNCAyMC41YzE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjFDMTc0LjUgNDQzLjIgMjM5LjIgNDgwIDMyMCA0ODBjMy4xIDAgNi4xLS4xIDkuMi0uMkwzMy4xIDI0Ny44elwiXVxufTtcbnZhciBmYUxvd1Zpc2lvbiA9IGZhRXllTG93VmlzaW9uO1xudmFyIGZhQ3JvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjcm93JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTIwXCIsIFwiTTQ1NiAwYy00OC42IDAtODggMzkuNC04OCA4OHYyOS4yTDEyLjUgMzkwLjZjLTE0IDEwLjgtMTYuNiAzMC45LTUuOSA0NC45czMwLjkgMTYuNiA0NC45IDUuOUwxMjYuMSAzODRIMjU5LjJsNDYuNiAxMTMuMWM1IDEyLjMgMTkuMSAxOC4xIDMxLjMgMTMuMXMxOC4xLTE5LjEgMTMuMS0zMS4zTDMxMS4xIDM4NEgzNTJjMS4xIDAgMi4xIDAgMy4yIDBsNDYuNiAxMTMuMmM1IDEyLjMgMTkuMSAxOC4xIDMxLjMgMTMuMXMxOC4xLTE5LjEgMTMuMS0zMS4zbC00Mi0xMDJDNDg0LjkgMzU0LjEgNTQ0IDI4MCA1NDQgMTkyVjEyOHYtOGw4MC41LTIwLjFjOC42LTIuMSAxMy44LTEwLjggMTEuNi0xOS40QzYyOSA1MiA2MDMuNCAzMiA1NzQgMzJINTIzLjlDNTA3LjcgMTIuNSA0ODMuMyAwIDQ1NiAwem0wIDY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG52YXIgZmFTYWlsYm9hdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzYWlsYm9hdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTQ0NVwiLCBcIk0yNTYgMTZjMC03IDQuNS0xMy4yIDExLjItMTUuM3MxMy45IC40IDE3LjkgNi4xbDIyNCAzMjBjMy40IDQuOSAzLjggMTEuMyAxLjEgMTYuNnMtOC4yIDguNi0xNC4yIDguNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxNnpNMjEyLjEgOTYuNWM3IDEuOSAxMS45IDguMiAxMS45IDE1LjVWMzM2YzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtNS43IDAtMTEtMy0xMy44LThzLTIuOS0xMS0uMS0xNmwxMjgtMjI0YzMuNi02LjMgMTEtOS40IDE4LTcuNXpNNS43IDQwNC4zQzIuOCAzOTQuMSAxMC41IDM4NCAyMS4xIDM4NEg1NTQuOWMxMC42IDAgMTguMyAxMC4xIDE1LjQgMjAuM2wtNCAxNC4zQzU1MC43IDQ3My45IDUwMC40IDUxMiA0NDMgNTEySDEzM0M3NS42IDUxMiAyNS4zIDQ3My45IDkuNyA0MTguN2wtNC0xNC4zelwiXVxufTtcbnZhciBmYVdpbmRvd1Jlc3RvcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2luZG93LXJlc3RvcmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyZDJcIiwgXCJNNDMyIDY0SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2Vjk2SDEyOFY4MGMwLTQ0LjIgMzUuOC04MCA4MC04MEg0MzJjNDQuMiAwIDgwIDM1LjggODAgODBWMzA0YzAgNDQuMi0zNS44IDgwLTgwIDgwSDQxNlYzMjBoMTZjOC44IDAgMTYtNy4yIDE2LTE2VjgwYzAtOC44LTcuMi0xNi0xNi0xNnpNMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRIMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTkyem02NCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYVNxdWFyZVBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXBsdXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs2MTg0NiwgXCJwbHVzLXNxdWFyZVwiXSwgXCJmMGZlXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjAwIDM0NFYyODBIMTM2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDY0VjE2OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djY0aDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0OHY2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG52YXIgZmFQbHVzU3F1YXJlID0gZmFTcXVhcmVQbHVzO1xudmFyIGZhVG9yaWlHYXRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvcmlpLWdhdGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5OTYxXSwgXCJmNmExXCIsIFwiTTAgODBjMCAyNi41IDIxLjUgNDggNDggNDhINjR2NjRoNjRWMTI4aDk2djY0aDY0VjEyOGg5NnY2NGg2NFYxMjhoMTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTMuNEM1MTIgNiA1MDYgMCA0OTguNiAwYy0xLjcgMC0zLjQgLjMtNSAxbC00OSAxOS42QzQyNS43IDI4LjEgNDA1LjUgMzIgMzg1LjIgMzJIMTI2LjhjLTIwLjQgMC00MC41LTMuOS01OS40LTExLjRMMTguNCAxYy0xLjYtLjYtMy4zLTEtNS0xQzYgMCAwIDYgMCAxMy40Vjgwek02NCAyODhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4SDM4NFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjR6XCJdXG59O1xudmFyIGZhRnJvZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmcm9nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTJlXCIsIFwiTTM2OCAzMmM0MS43IDAgNzUuOSAzMS44IDc5LjcgNzIuNWw4NS42IDI2LjNjMjUuNCA3LjggNDIuOCAzMS4zIDQyLjggNTcuOWMwIDIxLjgtMTEuNyA0MS45LTMwLjcgNTIuN0w0MDAuOCAzMjMuNSA0OTMuMyA0MTZINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDQ4MGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMzQ2LjkgMzYwLjJjMTEuNy0zNiAzLjItNzcuMS0yNS40LTEwNS43Yy00MC42LTQwLjYtMTA2LjMtNDAuNi0xNDYuOS0uMUwxMDEgMzI0LjRjLTYuNCA2LjEtNi43IDE2LjItLjYgMjIuNnMxNi4yIDYuNiAyMi42IC42bDczLjgtNzAuMiAuMS0uMSAuMS0uMWMzLjUtMy41IDcuMy02LjYgMTEuMy05LjJjMjcuOS0xOC41IDY1LjktMTUuNCA5MC41IDkuMmMyNC43IDI0LjcgMjcuNyA2Mi45IDkgOTAuOWMtMi42IDMuOC01LjYgNy41LTkgMTAuOUwyNjEuOCA0MTZIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NEMwIDI0OS42IDEyNyAxMTIuOSAyODkuMyA5Ny41QzI5Ni4yIDYwLjIgMzI4LjggMzIgMzY4IDMyem0wIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xudmFyIGZhQnVja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1Y2tldCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTRjZlwiLCBcIk05NiAxNTJ2OEg0OHYtOEM0OCA2OC4xIDExNi4xIDAgMjAwIDBoNDhjODMuOSAwIDE1MiA2OC4xIDE1MiAxNTJ2OEgzNTJ2LThjMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDRIMjAwQzE0Mi42IDQ4IDk2IDk0LjYgOTYgMTUyek0wIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJoLTUuMUwzODguNSA0NjljLTIuNiAyNC40LTIzLjIgNDMtNDcuNyA0M0gxMDcuMmMtMjQuNiAwLTQ1LjItMTguNS00Ny43LTQzTDM3LjEgMjU2SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFJbWFnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpbWFnZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjAzZVwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2ek0zMjMuOCAyMDIuNWMtNC41LTYuNi0xMS45LTEwLjUtMTkuOC0xMC41cy0xNS40IDMuOS0xOS44IDEwLjVsLTg3IDEyNy42TDE3MC43IDI5N2MtNC42LTUuNy0xMS41LTktMTguNy05cy0xNC4yIDMuMy0xOC43IDlsLTY0IDgwYy01LjggNy4yLTYuOSAxNy4xLTIuOSAyNS40czEyLjQgMTMuNiAyMS42IDEzLjZoOTYgMzJINDI0YzguOSAwIDE3LjEtNC45IDIxLjItMTIuOHMzLjYtMTcuNC0xLjQtMjQuN2wtMTIwLTE3NnpNMTEyIDE5MmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xudmFyIGZhTWljcm9waG9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaWNyb3Bob25lJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMTMwXCIsIFwiTTE5MiAwQzEzOSAwIDk2IDQzIDk2IDk2VjI1NmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2Vjk2YzAtNTMtNDMtOTYtOTYtOTZ6TTY0IDIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0MGMwIDg5LjEgNjYuMiAxNjIuNyAxNTIgMTc0LjRWNDY0SDEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg3MiA3MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyMTZWNDMwLjRjODUuOC0xMS43IDE1Mi04NS4zIDE1Mi0xNzQuNFYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NDBjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhWMjE2elwiXVxufTtcbnZhciBmYUNvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwMDRdLCBcImY2YzhcIiwgXCJNOTYgMjI0djMyVjQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzMjcuOGM5LjkgNi42IDIwLjYgMTIgMzIgMTYuMVYzNjhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzNTEuMWM1LjMgLjYgMTAuNiAuOSAxNiAuOXMxMC43LS4zIDE2LS45VjM2OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjM0My44YzExLjQtNCAyMi4xLTkuNCAzMi0xNi4xVjQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZsMzIgMzJ2NDkuNWMwIDkuNSAyLjggMTguNyA4LjEgMjYuNkw1MzAgNDI3YzguOCAxMy4xIDIzLjUgMjEgMzkuMyAyMWMyMi41IDAgNDEuOS0xNS45IDQ2LjMtMzhsMjAuMy0xMDEuNmMyLjYtMTMtLjMtMjYuNS04LTM3LjNsLTMuOS01LjVWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djE0LjRsLTUyLjktNzQuMUM0OTYgODYuNSA0NTIuNCA2NCA0MDUuOSA2NEgyNzIgMjU2IDE5MiAxNDRDNzcuNyA2NCAyNCAxMTcuNyAyNCAxODR2NTRDOS40IDI0OS44IDAgMjY3LjggMCAyODh2MTcuNmMwIDggNi40IDE0LjQgMTQuNCAxNC40QzQ2LjIgMzIwIDcyIDI5NC4yIDcyIDI2Mi40VjI1NiAyMjQgMTg0YzAtMjQuMyAxMi4xLTQ1LjggMzAuNS01OC45Qzk4LjMgMTM1LjkgOTYgMTQ3LjcgOTYgMTYwdjY0ek01NjAgMzM2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTE2Ni42IDE2Ni42Yy00LjItNC4yLTYuNi0xMC02LjYtMTZjMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZIMzYxLjRjMTIuNSAwIDIyLjYgMTAuMSAyMi42IDIyLjZjMCA2LTIuNCAxMS44LTYuNiAxNmwtMjMuNCAyMy40QzMzMi4yIDIxMS44IDMwMi43IDIyNCAyNzIgMjI0cy02MC4yLTEyLjItODEuOS0zMy45bC0yMy40LTIzLjR6XCJdXG59O1xudmFyIGZhQ2FyZXRVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJldC11cCcsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZjBkOFwiLCBcIk0xODIuNiAxMzcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhIMjg4YzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTEyOC0xMjh6XCJdXG59O1xudmFyIGZhU2NyZXdkcml2ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2NyZXdkcml2ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk2OTFdLCBcImY1NGFcIiwgXCJNNDY1IDdjLTguNS04LjUtMjItOS40LTMxLjYtMi4xbC0xMDQgODBjLTUuOSA0LjUtOS40IDExLjYtOS40IDE5djU0LjFsLTg1LjYgODUuNmM2LjcgNC4yIDEzIDkuMyAxOC44IDE1LjFzMTAuOSAxMi4yIDE1LjEgMTguOEwzNTMuOSAxOTJINDA4YzcuNSAwIDE0LjUtMy41IDE5LTkuNGw4MC0xMDRjNy40LTkuNiA2LjUtMjMuMS0yLjEtMzEuNkw0NjUgN3pNMTIxLjQgMjgxLjRsLTExMiAxMTJjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDExMi0xMTJjMzAuMi0zMC4yIDMwLjItNzkuMSAwLTEwOS4zcy03OS4xLTMwLjItMTA5LjMgMHpcIl1cbn07XG52YXIgZmFGb2xkZXJDbG9zZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9sZGVyLWNsb3NlZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTE4NVwiLCBcIk00NDggNDgwSDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxOTJINTEyVjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NHptNjQtMzIwSDBWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMTkyYzIwLjEgMCAzOS4xIDkuNSA1MS4yIDI1LjZsMTkuMiAyNS42YzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0elwiXVxufTtcbnZhciBmYUhvdXNlVHN1bmFtaSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS10c3VuYW1pJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTE1XCIsIFwiTTgwLjggMTM2LjVDMTA0LjkgOTMuOCAxNTIuNiA2NCAyMDkgNjRjMTYuOSAwIDMzLjEgMi43IDQ4LjIgNy43YzE2LjggNS41IDM0LjktMy42IDQwLjQtMjAuNHMtMy42LTM0LjktMjAuNC00MC40QzI1NS44IDMuOCAyMzIuOCAwIDIwOSAwQzk1LjIgMCAwIDg4IDAgMjAwYzAgOTEuNiA1My41IDE3Mi4xIDE0Mi4yIDE5NC4xYzEzLjQgMy44IDI3LjUgNS45IDQyLjIgNS45Yy43IDAgMS40IDAgMi4xLS4xYzEuOCAwIDMuNyAuMSA1LjUgLjFsMCAwYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjUtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCAzMjUuMiA0MTAuOSAzMzYgMzg0IDMzNmMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwYy0yMi40IDE1LjUtNDkuOSAyNi4xLTc3LjQgMjYuMWMwIDAtLjEgMC0uMSAwYy0xMi40IDAtMjQtMS41LTM0LjktNC4zQzEyMS42IDMyMC4yIDk2IDI4NyA5NiAyNDhjMC00OC41IDM5LjUtODggODguNC04OGMxMy41IDAgMjYuMSAzIDM3LjUgOC4zYzE2IDcuNSAzNS4xIC42IDQyLjUtMTUuNXMuNi0zNS4xLTE1LjUtNDIuNUMyMjkuMyAxMDEuMSAyMDcuNCA5NiAxODQuNCA5NmMtNDAgMC03Ni40IDE1LjQtMTAzLjYgNDAuNXptMjUyLTE4LjFjLTguMSA2LTEyLjggMTUuNS0xMi44IDI1LjZWMjY1YzEuNiAxIDMuMyAyIDQuOCAzLjFjMTguNCAxMi43IDM5LjYgMjAuMyA1OS4yIDIwLjNjMTkgMCA0MS4yLTcuOSA1OS4yLTIwLjNjMjMuOC0xNi43IDU1LjgtMTUuMyA3OC4xIDMuNGMxMC42IDguOCAyNC4yIDE1LjYgMzcuMyAxOC42YzUuOCAxLjQgMTEuMiAzLjQgMTYuMiA2LjJjLjctMi43IDEuMS01LjUgMS4xLTguNGwtLjQtMTQ0YzAtMTAtNC43LTE5LjQtMTIuNy0yNS41bC05NS41LTcyYy0xMS40LTguNi0yNy4xLTguNi0zOC41IDBsLTk2IDcyek0zODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjFjLTExLjEtNy45LTI1LjktNy45LTM3IDBDMjQ3IDQzNy40IDIxOS41IDQ0OCAxOTIgNDQ4Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCA0MzcuMiA0MTAuOSA0NDggMzg0IDQ0OHpcIl1cbn07XG52YXIgZmFTcXVhcmVOZmkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLW5maScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTU3NlwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2em03NS43IDY0LjZDNjguOCAxNjIuNSA2NCAxNjguOCA2NCAxNzZWMzM2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjMzLjhsNjYuMyAxMTAuNWMzLjcgNi4yIDExLjEgOS4xIDE4IDcuMnMxMS43LTguMiAxMS43LTE1LjRWMTc2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjI3OC4yTDkzLjcgMTY3LjhjLTMuNy02LjItMTEuMS05LjEtMTgtNy4yek0yMjQgMTc2djY0IDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjU2aDQ4YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDI1NlYxOTJoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjQwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2MCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjMzNmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE3NnpcIl1cbn07XG52YXIgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLWZyb20tZ3JvdW5kLXdhdGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGI1XCIsIFwiTTI4OCAzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTA5LjNsMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjU2IDEwOS4zVjMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnptLTE4LjUgNjkuOUMyNDcgNDM3LjQgMjE5LjUgNDQ4IDE5MiA0NDhjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSA1MDEuNyAxNTkgNTEyIDE5MiA1MTJjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNSAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNC0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQzOS40IDQzNy4yIDQxMC45IDQ0OCAzODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjFjLTExLjEtNy45LTI1LjktNy45LTM3IDB6TTE5MiAxOTJINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQyNWM1LjMtMy4xIDExLjItNS40IDE3LjUtNi45YzEzLjEtMy4xIDI2LjctOS44IDM3LjMtMTguNmMyMi4yLTE4LjcgNTQuMy0yMC4xIDc4LjEtMy40YzE4IDEyLjQgNDAuMSAyMC4zIDU5LjEgMjAuM1YxOTJ6bTM4NCA0OGMwLTI2LjUtMjEuNS00OC00OC00OEgzODRWNDE2LjVoMGMxOSAwIDQxLjItNy45IDU5LjItMjAuM2MyMy44LTE2LjcgNTUuOC0xNS4zIDc4LjEgMy40YzEwLjYgOC44IDI0LjIgMTUuNiAzNy4zIDE4LjZjNi4zIDEuNSAxMi4xIDMuOCAxNy41IDYuOVYyNDB6XCJdXG59O1xudmFyIGZhTWFydGluaUdsYXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcnRpbmktZ2xhc3MnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NjQsIFwiZ2xhc3MtbWFydGluaS1hbHRcIl0sIFwiZjU3YlwiLCBcIk0zMiAwQzE5LjEgMCA3LjQgNy44IDIuNCAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOUwyMjQgMjY5LjNWNDQ4SDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODhWMjY5LjNMNTAyLjYgNTQuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSAwIDQ4MCAwSDMyek0xNzMuMyAxMjhsLTY0LTY0SDQwMi43bC02NCA2NEgxNzMuM3pcIl1cbn07XG52YXIgZmFHbGFzc01hcnRpbmlBbHQgPSBmYU1hcnRpbmlHbGFzcztcbnZhciBmYVJvdGF0ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm90YXRlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInJvdGF0ZS1iYWNrXCIsIFwicm90YXRlLWJhY2t3YXJkXCIsIFwidW5kby1hbHRcIl0sIFwiZjJlYVwiLCBcIk00OC41IDIyNEg0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWNzJjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yczE5LjMtMS43IDI2LjIgNS4yTDk4LjYgOTYuNmM4Ny42LTg2LjUgMjI4LjctODYuMiAzMTUuOCAxYzg3LjUgODcuNSA4Ny41IDIyOS4zIDAgMzE2LjhzLTIyOS4zIDg3LjUtMzE2LjggMGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGM2Mi41IDYyLjUgMTYzLjggNjIuNSAyMjYuMyAwczYyLjUtMTYzLjggMC0yMjYuM2MtNjIuMi02Mi4yLTE2Mi43LTYyLjUtMjI1LjMtMUwxODUgMTgzYzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJzLTEyLjUgMTQuOC0yMi4yIDE0LjhINDguNXpcIl1cbn07XG52YXIgZmFSb3RhdGVCYWNrID0gZmFSb3RhdGVMZWZ0O1xudmFyIGZhUm90YXRlQmFja3dhcmQgPSBmYVJvdGF0ZUxlZnQ7XG52YXIgZmFVbmRvQWx0ID0gZmFSb3RhdGVMZWZ0O1xudmFyIGZhVGFibGVDb2x1bW5zID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxlLWNvbHVtbnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNvbHVtbnNcIl0sIFwiZjBkYlwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2em02NCA2NFY0MTZIMjI0VjE2MEg2NHptMzg0IDBIMjg4VjQxNkg0NDhWMTYwelwiXVxufTtcbnZhciBmYUNvbHVtbnMgPSBmYVRhYmxlQ29sdW1ucztcbnZhciBmYUxlbW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xlbW9uJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODE5XSwgXCJmMDk0XCIsIFwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NGMtNi42IDAtMTMgMS0xOSAyLjljLTIyLjUgNy00OC4xIDE0LjktNzEgOWMtNzUuMi0xOS4xLTE1Ni40IDExLTIxMy43IDY4LjNTLTcuMiAyNTAuOCAxMS45IDMyNmM1LjggMjIuOS0yIDQ4LjQtOSA3MUMxIDQwMyAwIDQwOS40IDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0YzYuNiAwIDEzLTEgMTkuMS0yLjljMjIuNS03IDQ4LjEtMTQuOSA3MS05Yzc1LjIgMTkuMSAxNTYuNC0xMSAyMTMuNy02OC4zczg3LjUtMTM4LjUgNjguMy0yMTMuN2MtNS44LTIyLjkgMi00OC40IDktNzFjMS45LTYgMi45LTEyLjQgMi45LTE5LjF6TTIxMi41IDEyNy40Yy01NC42IDE2LTEwMS4xIDYyLjUtMTE3LjEgMTE3LjFDOTIuOSAyNTMgODQgMjU3LjggNzUuNSAyNTUuNFM2Mi4yIDI0NCA2NC42IDIzNS41YzE5LjEtNjUuMSA3My43LTExOS44IDEzOC45LTEzOC45YzguNS0yLjUgMTcuNCAyLjQgMTkuOSAxMC45cy0yLjQgMTcuNC0xMC45IDE5Ljl6XCJdXG59O1xudmFyIGZhSGVhZFNpZGVNYXNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWQtc2lkZS1tYXNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDYzXCIsIFwiTTMyIDIyNC4yYzAtMjIuMiAzLjItNDMuNiA5LjItNjMuOUwyNjIuMiAzMjFjLTQgOS41LTYuMiAyMC02LjIgMzFWNTEySDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDA3LjNjMC0xNi43LTYuOS0zMi41LTE3LjEtNDUuOEM0OC42IDMyMi40IDMyIDI3NC4xIDMyIDIyNC4yem0yNDguMyA3MC40TDUzIDEyOS4zQzg4LjcgNTMgMTY2LjIgMCAyNTYgMGgyNGM5NS4yIDAgMTgxLjIgNjkuMyAxOTcuMyAxNjAuMmMyLjMgMTMgNi44IDI1LjcgMTUuMSAzNmw0MiA1Mi42YzUuNCA2LjcgOC42IDE0LjggOS40IDIzLjJIMzM2Yy0yMS43IDAtNDEuMyA4LjYtNTUuNyAyMi42ek0zMzYgMzA0SDUzNGwwIDBoMTBsLTE5LjcgNjRIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDUxNC41bC05LjggMzJIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDQ5NC44bC0uOSAyLjhjLTguMyAyNi45LTMzLjEgNDUuMi02MS4yIDQ1LjJIMjg4VjM1MmMwLTE0IDYtMjYuNyAxNS42LTM1LjRjMCAwIDAgMCAwIDBjOC41LTcuOCAxOS45LTEyLjYgMzIuNC0xMi42em00OC04MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhSGFuZHNoYWtlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzaGFrZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjJiNVwiLCBcIk0zMjMuNCA4NS4ybC05Ni44IDc4LjRjLTE2LjEgMTMtMTkuMiAzNi40LTcgNTMuMWMxMi45IDE3LjggMzggMjEuMyA1NS4zIDcuOGw5OS4zLTc3LjJjNy01LjQgMTctNC4yIDIyLjUgMi44czQuMiAxNy0yLjggMjIuNWwtMjAuOSAxNi4yTDUxMiAzMTYuOFYxMjhoLS43bC0zLjktMi41TDQzNC44IDc5Yy0xNS4zLTkuOC0zMy4yLTE1LTUxLjQtMTVjLTIxLjggMC00MyA3LjUtNjAgMjEuMnptMjIuOCAxMjQuNGwtNTEuNyA0MC4yQzI2MyAyNzQuNCAyMTcuMyAyNjggMTkzLjcgMjM1LjZjLTIyLjItMzAuNS0xNi42LTczLjEgMTIuNy05Ni44bDgzLjItNjcuM2MtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC03MiA0OFYzNTJoMjguMmw5MS40IDgzLjRjMTkuNiAxNy45IDQ5LjkgMTYuNSA2Ny44LTMuMWM1LjUtNi4xIDkuMi0xMy4yIDExLjEtMjAuNmwxNyAxNS42YzE5LjUgMTcuOSA0OS45IDE2LjYgNjcuOC0yLjljNC41LTQuOSA3LjgtMTAuNiA5LjktMTYuNWMxOS40IDEzIDQ1LjggMTAuMyA2Mi4xLTcuNWMxNy45LTE5LjUgMTYuNi00OS45LTIuOS02Ny44bC0xMzQuMi0xMjN6TTE2IDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2VjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxMjhIMTZ6TTQ4IDMyMGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6TTU0NCAxMjhWMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE0NGMwLTguOC03LjItMTYtMTYtMTZINTQ0em0zMiAyMDhhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpcIl1cbn07XG52YXIgZmFHZW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2VtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTQyXSwgXCJmM2E1XCIsIFwiTTExNi43IDMzLjhjNC41LTYuMSAxMS43LTkuOCAxOS4zLTkuOEgzNzZjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40bC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJ6bTM4LjUgMzkuOGMtMy4zIDIuNS00LjIgNy0yLjEgMTAuNWw1Ny40IDk1LjZMNjMuMyAxOTJjLTQuMSAuMy03LjMgMy44LTcuMyA4czMuMiA3LjYgNy4zIDhsMTkyIDE2Yy40IDAgLjkgMCAxLjMgMGwxOTItMTZjNC4xLS4zIDcuMy0zLjggNy4zLThzLTMuMi03LjYtNy4zLThMMzAxLjUgMTc5LjhsNTcuNC05NS42YzIuMS0zLjUgMS4yLTguMS0yLjEtMTAuNXMtNy45LTItMTAuNyAxTDI1NiAxNzIuMiAxNjUuOSA3NC42Yy0yLjgtMy03LjQtMy40LTEwLjctMXpcIl1cbn07XG52YXIgZmFEb2xseSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb2xseScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiZG9sbHktYm94XCJdLCBcImY0NzJcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBoNzIuOWMyNy41IDAgNTIgMTcuNiA2MC43IDQzLjhMMjU3LjcgMzIwYzMwLjEgLjUgNTYuOCAxNC45IDc0IDM3bDIwMi4xLTY3LjRjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVMMzUyIDQxNy43Yy0uOSA1Mi4yLTQzLjUgOTQuMy05NiA5NC4zYy01MyAwLTk2LTQzLTk2LTk2YzAtMzAuOCAxNC41LTU4LjIgMzctNzUuOEwxMDQuOSA2NEgzMkMxNC4zIDY0IDAgNDkuNyAwIDMyek0yNDQuOCAxMzQuNWMtNS41LTE2LjggMy43LTM0LjkgMjAuNS00MC4zTDMxMSA3OS40bDE5LjggNjAuOSA2MC45LTE5LjhMMzcxLjggNTkuNmw0NS43LTE0LjhjMTYuOC01LjUgMzQuOSAzLjcgNDAuMyAyMC41bDQ5LjQgMTUyLjJjNS41IDE2LjgtMy43IDM0LjktMjAuNSA0MC4zTDMzNC41IDMwNy4yYy0xNi44IDUuNS0zNC45LTMuNy00MC4zLTIwLjVMMjQ0LjggMTM0LjV6XCJdXG59O1xudmFyIGZhRG9sbHlCb3ggPSBmYURvbGx5O1xudmFyIGZhU21va2luZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbW9raW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Njg0XSwgXCJmNDhkXCIsIFwiTTQ0OCAzMlY0M2MwIDM4LjIgMTUuMiA3NC44IDQyLjIgMTAxLjhsMjEgMjFjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMnYxMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNDVjMC0xMi43LTUuMS0yNC45LTE0LjEtMzMuOWwtMjEtMjFDNDA1LjkgMTUxLjEgMzg0IDk4LjEgMzg0IDQzVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTU3NiAyNTZWMjQ1YzAtMzguMi0xNS4yLTc0LjgtNDIuMi0xMDEuOGwtMjEtMjFjLTIxLTIxLTMyLjgtNDkuNS0zMi44LTc5LjJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY0M2MwIDEyLjcgNS4xIDI0LjkgMTQuMSAzMy45bDIxIDIxYzM5IDM5IDYwLjkgOTEuOSA2MC45IDE0Ny4xdjExYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyek0wIDQxNmMwLTM1LjMgMjguNy02NCA2NC02NEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjQxNnptMjI0IDB2MzJIMzg0VjQxNkgyMjR6bTI4OC02NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYU1pbmltaXplID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21pbmltaXplJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjb21wcmVzcy1hcnJvd3MtYWx0XCJdLCBcImY3OGNcIiwgXCJNNDU2IDIyNEgzMTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjU2YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw0MCA0MEw0NDIuMyA1LjdDNDQ2IDIgNDUwLjkgMCA0NTYgMHMxMCAyIDEzLjcgNS43bDM2LjcgMzYuN0M1MTAgNDYgNTEyIDUwLjkgNTEyIDU2cy0yIDEwLTUuNyAxMy43TDQzMyAxNDNsNDAgNDBjNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMnMtMTIuNSAxNC44LTIyLjIgMTQuOHptMCA2NGM5LjcgMCAxOC41IDUuOCAyMi4yIDE0LjhzMS43IDE5LjMtNS4yIDI2LjJsLTQwIDQwIDczLjQgNzMuNGMzLjYgMy42IDUuNyA4LjUgNS43IDEzLjdzLTIgMTAtNS43IDEzLjdsLTM2LjcgMzYuN0M0NjYgNTEwIDQ2MS4xIDUxMiA0NTYgNTEycy0xMC0yLTEzLjctNS43TDM2OSA0MzNsLTQwIDQwYy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4ycy0xNC44LTEyLjUtMTQuOC0yMi4yVjMxMmMwLTEzLjMgMTAuNy0yNCAyNC0yNEg0NTZ6bS0yNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY0NTZjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNDAtNDBMNjkuNyA1MDYuM0M2NiA1MTAgNjEuMSA1MTIgNTYgNTEycy0xMC0yLTEzLjctNS43TDUuNyA0NjkuN0MyIDQ2NiAwIDQ2MS4xIDAgNDU2czItMTAgNS43LTEzLjdMNzkgMzY5IDM5IDMyOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMnMxMi41LTE0LjggMjIuMi0xNC44SDIwMHpNNTYgMjI0Yy05LjcgMC0xOC41LTUuOC0yMi4yLTE0LjhzLTEuNy0xOS4zIDUuMi0yNi4ybDQwLTQwTDUuNyA2OS43QzIgNjYgMCA2MS4xIDAgNTZzMi0xMCA1LjctMTMuN0w0Mi4zIDUuN0M0NiAyIDUwLjkgMCA1NiAwczEwIDIgMTMuNyA1LjdMMTQzIDc5bDQwLTQwYzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJzMTQuOCAxMi41IDE0LjggMjIuMlYyMDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRINTZ6XCJdXG59O1xudmFyIGZhQ29tcHJlc3NBcnJvd3NBbHQgPSBmYU1pbmltaXplO1xudmFyIGZhTW9udW1lbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9udW1lbnQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY1YTZcIiwgXCJNMTgwLjcgNC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDgwIDgwYzIuNSAyLjUgNC4xIDUuOCA0LjYgOS4zbDQwLjIgMzIySDU1LjlMOTYuMSA5NGMuNC0zLjUgMi02LjggNC42LTkuM2w4MC04MHpNMTUyIDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxNTJ6TTMyIDQ0OEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhU25vd3Bsb3cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc25vd3Bsb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3ZDJcIiwgXCJNMjk4LjkgNjRsNjguNiAxNjBIMjU2bC02NC02NFY2NEgyOTguOXpNNDQ1LjEgMjQyLjdsLTg3LjQtMjA0QzM0Ny42IDE1LjMgMzI0LjUgMCAyOTguOSAwSDE3NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMTYwSDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlYyOTguOEMyNi4yIDMxNi44IDAgMzU1LjMgMCA0MDBjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJIMzY4YzYxLjkgMCAxMTItNTAuMSAxMTItMTEyYzAtMTcuMi0zLjktMzMuNS0xMC44LTQ4SDUxMnY1MC43YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDU0LjYgNTQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDU3NiA0MDIuN1YzMjAgMjM1LjJMNjMzIDE2NGMxMS0xMy44IDguOC0zMy45LTUtNDVzLTMzLjktOC44LTQ1IDVsLTU3IDcxLjJjLTkuMSAxMS4zLTE0IDI1LjQtMTQgNDBWMjg4SDQ0OFYyNTYuN2MuMS0yLjQtLjItNC44LS42LTcuMXMtMS4yLTQuNy0yLjItNi44ek0zNjggMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDExMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OEgzNjh6TTE0NCA0MDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptMjE2IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTU2LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTIwMCA0MjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYUFuZ2xlc1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FuZ2xlcy1yaWdodCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzE4NywgXCJhbmdsZS1kb3VibGUtcmlnaHRcIl0sIFwiZjEwMVwiLCBcIk00NzAuNiAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDAyLjcgMjU2IDI2NS40IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6bS0zNTIgMTYwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDIxMC43IDI1NiA3My40IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwelwiXVxufTtcbnZhciBmYUFuZ2xlRG91YmxlUmlnaHQgPSBmYUFuZ2xlc1JpZ2h0O1xudmFyIGZhQ2FubmFiaXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FubmFiaXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NWZcIiwgXCJNMjU2IDBjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjFjMTUuOCAyMy41IDM2LjcgNjMuNyA0OS4yIDEwOWM3LjIgMjYuNCAxMS44IDU1LjIgMTAuNCA4NGMxMS41LTguOCAyMy43LTE2LjcgMzUuOC0yMy42YzQxLTIzLjMgODQuNC0zNi45IDExMi4yLTQyLjVjNS4yLTEgMTAuNyAuNiAxNC40IDQuNHM1LjQgOS4yIDQuNCAxNC41Yy01LjYgMjcuNy0xOS4zIDcwLjktNDIuNyAxMTEuN2MtOS4xIDE1LjktMTkuOSAzMS43LTMyLjQgNDYuM2MyNy44IDYuNiA1Mi40IDE3LjMgNjcuMiAyNS41YzUuMSAyLjggOC4yIDguMiA4LjIgMTRzLTMuMiAxMS4yLTguMiAxNGMtMTUuMiA4LjQtNDAuOSAxOS41LTY5LjggMjYuMWMtMjAuMiA0LjYtNDIuOSA3LjItNjUuMiA0LjZsOC4zIDMzLjFjMS41IDYuMS0uNiAxMi40LTUuNSAxNi40cy0xMS42IDQuNi0xNy4yIDEuOUwyODAgNDE3LjJWNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQxNy4ybC01OC41IDI5LjFjLTUuNiAyLjgtMTIuMyAyLjEtMTcuMi0xLjlzLTctMTAuMy01LjUtMTYuNGw4LjMtMzMuMWMtMjIuMiAyLjYtNDUgMC02NS4yLTQuNmMtMjguOS02LjYtNTQuNi0xNy42LTY5LjgtMjYuMWMtNS4xLTIuOC04LjItOC4yLTguMi0xNHMzLjItMTEuMiA4LjItMTRjMTQuOC04LjIgMzkuNC0xOC44IDY3LjItMjUuNUM3OC45IDI5Ni4zIDY4LjEgMjgwLjUgNTkgMjY0LjZjLTIzLjQtNDAuOC0zNy4xLTg0LTQyLjctMTExLjdjLTEuMS01LjIgLjYtMTAuNyA0LjQtMTQuNXM5LjItNS40IDE0LjQtNC40YzI3LjkgNS41IDcxLjIgMTkuMiAxMTIuMiA0Mi41YzEyLjEgNi45IDI0LjMgMTQuNyAzNS44IDIzLjZjLTEuNC0yOC43IDMuMS01Ny42IDEwLjQtODRjMTIuNS00NS4zIDMzLjQtODUuNSA0OS4yLTEwOWMzLTQuNCA4LTcuMSAxMy4zLTcuMXpcIl1cbn07XG52YXIgZmFDaXJjbGVQbGF5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1wbGF5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjksIFwicGxheS1jaXJjbGVcIl0sIFwiZjE0NFwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6TTE4OC4zIDE0Ny4xYy03LjYgNC4yLTEyLjMgMTIuMy0xMi4zIDIwLjlWMzQ0YzAgOC43IDQuNyAxNi43IDEyLjMgMjAuOXMxNi44IDQuMSAyNC4zLS41bDE0NC04OGM3LjEtNC40IDExLjUtMTIuMSAxMS41LTIwLjVzLTQuNC0xNi4xLTExLjUtMjAuNWwtMTQ0LTg4Yy03LjQtNC41LTE2LjctNC43LTI0LjMtLjV6XCJdXG59O1xudmFyIGZhUGxheUNpcmNsZSA9IGZhQ2lyY2xlUGxheTtcbnZhciBmYVRhYmxldHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGV0cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjQ5MFwiLCBcIk02MTQuMyAyNDdjMTYuMy0yNSAyNS43LTU0LjkgMjUuNy04N0M2NDAgNzEuNiA1NjguNCAwIDQ4MCAwYy0zMi4xIDAtNjEuOSA5LjQtODcgMjUuN2MtNy45IDUuMi04LjUgMTYuMi0xLjggMjIuOUw1OTEuNCAyNDguOGM2LjcgNi43IDE3LjggNi4yIDIyLjktMS44ek01NjcgMjk0LjNjNy45LTUuMiA4LjUtMTYuMiAxLjgtMjIuOUwzNjguNiA3MS4yYy02LjctNi43LTE3LjgtNi4yLTIyLjkgMS44Yy0xNi4zIDI1LTI1LjcgNTQuOS0yNS43IDg3YzAgODguNCA3MS42IDE2MCAxNjAgMTYwYzMyLjEgMCA2MS45LTkuNCA4Ny0yNS43ek0zMDEuNSAzNjhIMTguNWMtOS41IDAtMTYuOSA4LjItMTUgMTcuNUMxOC45IDQ1Ny44IDgzLjEgNTEyIDE2MCA1MTJzMTQxLjEtNTQuMiAxNTYuNS0xMjYuNWMyLTkuMy01LjUtMTcuNS0xNS0xNy41em0wLTMyYzkuNSAwIDE2LjktOC4yIDE1LTE3LjVDMzAxLjEgMjQ2LjIgMjM2LjkgMTkyIDE2MCAxOTJTMTguOSAyNDYuMiAzLjUgMzE4LjVjLTIgOS4zIDUuNSAxNy41IDE1IDE3LjVIMzAxLjV6XCJdXG59O1xudmFyIGZhRXRoZXJuZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXRoZXJuZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3OTZcIiwgXCJNMCAyMjRWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDk2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2VjQ0OGg2NFYzMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlY0NDhoNjRWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZWNDQ4aDY0VjMzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2VjQ0OGg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJINDQ4VjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzODRWOTZjMC0xNy43LTE0LjMtMzItMzItMzJIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzMkg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUV1cm9TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V1cm8tc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgWzgzNjQsIFwiZXVyXCIsIFwiZXVyb1wiXSwgXCJmMTUzXCIsIFwiTTQ4LjEgMjQwYy0uMSAyLjctLjEgNS4zLS4xIDh2MTZjMCAyLjcgMCA1LjMgLjEgOEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2MC4zQzg5LjkgNDE5LjkgMTcwIDQ4MCAyNjQgNDgwaDI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI2NGMtNTcuOSAwLTEwOC4yLTMyLjQtMTMzLjktODBIMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMi4yYy0uMS0yLjYtLjItNS4zLS4yLThWMjQ4YzAtMi43IC4xLTUuNCAuMi04SDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxMzAuMWMyNS43LTQ3LjYgNzYtODAgMTMzLjktODBoMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjY0QzE3MCAzMiA4OS45IDkyLjEgNjAuMyAxNzZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDguMXpcIl1cbn07XG52YXIgZmFFdXIgPSBmYUV1cm9TaWduO1xudmFyIGZhRXVybyA9IGZhRXVyb1NpZ247XG52YXIgZmFDaGFpciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFpcicsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTY4MV0sIFwiZjZjMFwiLCBcIk0yNDggNDhWMjU2aDQ4VjU4LjdjMjMuOSAxMy44IDQwIDM5LjcgNDAgNjkuM1YyNTZoNDhWMTI4QzM4NCA1Ny4zIDMyNi43IDAgMjU2IDBIMTkyQzEyMS4zIDAgNjQgNTcuMyA2NCAxMjhWMjU2aDQ4VjEyOGMwLTI5LjYgMTYuMS01NS41IDQwLTY5LjNWMjU2aDQ4VjQ4aDQ4ek00OCAyODhjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTE2IDMyYy01IDkuOS00LjQgMjEuNyAxLjQgMzEuMVMyMC45IDM4NCAzMiAzODRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM4NEgzNTJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRjMTEuMSAwIDIxLjQtNS43IDI3LjItMTUuMnM2LjQtMjEuMiAxLjQtMzEuMWwtMTYtMzJDNDIzLjIgMjk0LjggNDEyLjEgMjg4IDQwMCAyODhINDh6XCJdXG59O1xudmFyIGZhQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzMsIFwiY2hlY2stY2lyY2xlXCJdLCBcImYwNThcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM2OSAyMDlMMjQxIDMzN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDcgNDdMMzM1IDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6XCJdXG59O1xudmFyIGZhQ2hlY2tDaXJjbGUgPSBmYUNpcmNsZUNoZWNrO1xudmFyIGZhQ2lyY2xlU3RvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtc3RvcCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMDk0LCBcInN0b3AtY2lyY2xlXCJdLCBcImYyOGRcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNjBIMzIwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFTdG9wQ2lyY2xlID0gZmFDaXJjbGVTdG9wO1xudmFyIGZhQ29tcGFzc0RyYWZ0aW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbXBhc3MtZHJhZnRpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImRyYWZ0aW5nLWNvbXBhc3NcIl0sIFwiZjU2OFwiLCBcIk0zNTIgOTZjMCAxNC4zLTMuMSAyNy45LTguOCA0MC4yTDM5NiAyMjcuNGMtMjMuNyAyNS4zLTU0LjIgNDQuMS04OC41IDUzLjZMMjU2IDE5MmgwIDBsLTY4IDExNy41YzIxLjUgNi44IDQ0LjMgMTAuNSA2OC4xIDEwLjVjNzAuNyAwIDEzMy44LTMyLjcgMTc0LjktODRjMTEuMS0xMy44IDMxLjItMTYgNDUtNXMxNiAzMS4yIDUgNDVDNDI4LjEgMzQxLjggMzQ3IDM4NCAyNTYgMzg0Yy0zNS40IDAtNjkuNC02LjQtMTAwLjctMTguMUw5OC43IDQ2My43Qzk0IDQ3MS44IDg3IDQ3OC40IDc4LjYgNDgyLjZMMjMuMiA1MTAuM2MtNSAyLjUtMTAuOSAyLjItMTUuNi0uN1MwIDUwMS41IDAgNDk2VjQ0MC42YzAtOC40IDIuMi0xNi43IDYuNS0yNC4xbDYwLTEwMy43QzUzLjcgMzAxLjYgNDEuOCAyODkuMyAzMS4yIDI3NmMtMTEuMS0xMy44LTguOC0zMy45IDUtNDVzMzMuOS04LjggNDUgNWM1LjcgNy4xIDExLjggMTMuOCAxOC4yIDIwLjFsNjkuNC0xMTkuOWMtNS42LTEyLjItOC44LTI1LjgtOC44LTQwLjJjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptMjEgMjk3LjljMzIuNi0xMi44IDYyLjUtMzAuOCA4OC45LTUyLjlsNDMuNyA3NS41YzQuMiA3LjMgNi41IDE1LjYgNi41IDI0LjFWNDk2YzAgNS41LTIuOSAxMC43LTcuNiAxMy42cy0xMC42IDMuMi0xNS42IC43bC01NS40LTI3LjdjLTguNC00LjItMTUuNC0xMC44LTIwLjEtMTguOUwzNzMgMzkzLjl6TTI1NiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYURyYWZ0aW5nQ29tcGFzcyA9IGZhQ29tcGFzc0RyYWZ0aW5nO1xudmFyIGZhUGxhdGVXaGVhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGF0ZS13aGVhdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU1YVwiLCBcIk0xNzYgMzJjNDQuMiAwIDgwIDM1LjggODAgODB2MTZjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MFY0OGMwLTguOCA3LjItMTYgMTYtMTZ6TTU2IDY0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yNCAxMzZIMTM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDQ4YzAtOC44IDcuMi0xNiAxNi0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNmMwIDguOC03LjIgMTYtMTYgMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjQ4ek00MDAgMzJjNDQuMiAwIDgwIDM1LjggODAgODB2MTZjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MFY0OGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2MHYxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI1NmMwLTQ0LjIgMzUuOC04MCA4MC04MGM4LjggMCAxNiA3LjIgMTYgMTZ6TTM1MiAxNzZjOC44IDAgMTYgNy4yIDE2IDE2djE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy04LjggMC0xNi03LjItMTYtMTZWMjU2YzAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZ2MTZjMCA0NC4yLTM1LjggODAtODAgODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNTZjMC00NC4yIDM1LjgtODAgODAtODBjOC44IDAgMTYgNy4yIDE2IDE2ek0zLjUgMzQ3LjZDMS42IDMzMi45IDEzIDMyMCAyNy44IDMyMEg0ODQuMmMxNC44IDAgMjYuMiAxMi45IDI0LjQgMjcuNkM1MDIuMyAzOTcuOCA0NjQuMiA0MzcgNDE2IDQ0NnYyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ2LTJjLTQ4LjItOS04Ni4zLTQ4LjItOTIuNS05OC40elwiXVxufTtcbnZhciBmYUljaWNsZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWNpY2xlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjdhZFwiLCBcIk03NS44IDMwNC44TDEgMzUuN2MtLjctMi41LTEtNS0xLTcuNUMwIDEyLjYgMTIuNiAwIDI4LjIgMEg0ODIuNEM0OTguOCAwIDUxMiAxMy4yIDUxMiAyOS42YzAgMS42LS4xIDMuMy0uNCA0LjlMNDM0LjYgNDk2LjFjLTEuNSA5LjItOS41IDE1LjktMTguOCAxNS45Yy05LjIgMC0xNy4xLTYuNi0xOC43LTE1LjZMMzM2IDE2MCAzMDcuMiAzMDMuOWMtMS45IDkuMy0xMC4xIDE2LjEtMTkuNiAxNi4xYy05LjIgMC0xNy4yLTYuMi0xOS40LTE1LjFMMjQwIDE5MiAyMTAuNiAzNjguMmMtMS41IDkuMS05LjQgMTUuOC0xOC42IDE1LjhzLTE3LjEtNi43LTE4LjYtMTUuOEwxNDQgMTkyIDExNS45IDMwNC4zYy0yLjMgOS4yLTEwLjYgMTUuNy0yMC4xIDE1LjdjLTkuMyAwLTE3LjUtNi4yLTIwLTE1LjJ6XCJdXG59O1xudmFyIGZhUGVyc29uU2hlbHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tc2hlbHRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU0ZlwiLCBcIk0yNzEuOSA0LjJjLTkuOC01LjYtMjEuOS01LjYtMzEuOCAwbC0yMjQgMTI4QzYuMiAxMzcuOSAwIDE0OC41IDAgMTYwVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE3OC42TDI1NiA2OC45IDQ0OCAxNzguNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNjBjMC0xMS41LTYuMi0yMi4xLTE2LjEtMjcuOGwtMjI0LTEyOHpNMjU2IDIwOGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bS04IDI4MFY0MDBoMTZ2ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNy45LTcwLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDI0Ni4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzcuOSA3MC4zYy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEwyMDAgMzEzLjVWNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6XCJdXG59O1xudmFyIGZhTmV1dGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ25ldXRlcicsXG4gIGljb246IFszODQsIDUxMiwgWzk5MDZdLCBcImYyMmNcIiwgXCJNODAgMTc2YTExMiAxMTIgMCAxIDEgMjI0IDBBMTEyIDExMiAwIDEgMSA4MCAxNzZ6TTIyNCAzNDkuMWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMUMzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNDkuMXpcIl1cbn07XG52YXIgZmFJZEJhZGdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2lkLWJhZGdlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMmMxXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTk2IDMyMGg2NGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTMyLTk2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTQ0IDY0aDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFNYXJrZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFya2VyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNWExXCIsIFwiTTQ4MSAzMUM0NDUuMS00LjggMzg2LjktNC44IDM1MSAzMWwtMTUgMTVMMzIyLjkgMzNDMjk0LjggNC45IDI0OS4yIDQuOSAyMjEuMSAzM0wxMzUgMTE5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMMjU1IDY2LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMzAyLjEgODAgMTg2LjMgMTk1LjcgMzE2LjMgMzI1LjcgNDgxIDE2MWMzNS45LTM1LjkgMzUuOS05NC4xIDAtMTI5Ljl6TTI5My43IDM0OC4zTDE2My43IDIxOC4zIDk5LjUgMjgyLjVjLTQ4IDQ4LTgwLjggMTA5LjItOTQuMSAxNzUuOGwtNSAyNWMtMS42IDcuOSAuOSAxNiA2LjYgMjEuN3MxMy44IDguMSAyMS43IDYuNmwyNS01YzY2LjYtMTMuMyAxMjcuOC00Ni4xIDE3NS44LTk0LjFsNjQuMi02NC4yelwiXVxufTtcbnZhciBmYUZhY2VMYXVnaEJlYW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1sYXVnaC1iZWFtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEzLCBcImxhdWdoLWJlYW1cIl0sIFwiZjU5YVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNOTYuOCAzMTQuMWMtMy44LTEzLjcgNy40LTI2LjEgMjEuNi0yNi4xSDM5My42YzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6TTIxNy42IDIxMi44bDAgMCAwIDAtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjIgMCAwIDAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44bDAgMCAwIDB6bTE2MCAwbDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMCAwIDB6XCJdXG59O1xudmFyIGZhTGF1Z2hCZWFtID0gZmFGYWNlTGF1Z2hCZWFtO1xudmFyIGZhSGVsaWNvcHRlclN5bWJvbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWxpY29wdGVyLXN5bWJvbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUwMlwiLCBcIk00NDUuMyAyMjRINTEwQzQ5NS42IDEwOC4yIDQwMy44IDE2LjQgMjg4IDJWNjYuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS4zIDIyNHpNNTEwIDI4OEg0NDUuM0M0MzEuOSAzNjguNCAzNjguNCA0MzEuOSAyODggNDQ1LjRWNTEwYzExNS44LTE0LjQgMjA3LjYtMTA2LjIgMjIyLTIyMnpNMiAyODhDMTYuNCA0MDMuOCAxMDguMiA0OTUuNiAyMjQgNTEwVjQ0NS40QzE0My42IDQzMS45IDgwLjEgMzY4LjQgNjYuNyAyODhIMnptMC02NEg2Ni43QzgwLjEgMTQzLjYgMTQzLjYgODAuMSAyMjQgNjYuN1YyQzEwOC4yIDE2LjQgMTYuNCAxMDguMiAyIDIyNHptMjA2LTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI4OGg5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NEgyMDhWMTYwelwiXVxufTtcbnZhciBmYVVuaXZlcnNhbEFjY2VzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1bml2ZXJzYWwtYWNjZXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMjlhXCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnptMTYxLjUtODYuMWMtMTIuMi01LjItMjYuMyAuNC0zMS41IDEyLjZzLjQgMjYuMyAxMi42IDMxLjVsMTEuOSA1LjFjMTcuMyA3LjQgMzUuMiAxMi45IDUzLjYgMTYuM3Y1MC4xYzAgNC4zLS43IDguNi0yLjEgMTIuNmwtMjguNyA4Ni4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDI0LjQtNzMuMmMxLjMtMy44IDQuOC02LjQgOC44LTYuNHM3LjYgMi42IDguOCA2LjRsMjQuNCA3My4yYzQuMiAxMi42IDE3LjggMTkuNCAzMC40IDE1LjJzMTkuNC0xNy44IDE1LjItMzAuNGwtMjguNy04Ni4xYy0xLjQtNC4xLTIuMS04LjMtMi4xLTEyLjZWMjM1LjVjMTguNC0zLjUgMzYuMy04LjkgNTMuNi0xNi4zbDExLjktNS4xYzEyLjItNS4yIDE3LjgtMTkuMyAxMi42LTMxLjVzLTE5LjMtMTcuOC0zMS41LTEyLjZMMzM4LjcgMTc1Yy0yNi4xIDExLjItNTQuMiAxNy04Mi43IDE3cy01Ni41LTUuOC04Mi43LTE3bC0xMS45LTUuMXpNMjU2IDE2MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6XCJdXG59O1xudmFyIGZhQ2lyY2xlQ2hldnJvblVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1jaGV2cm9uLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjaGV2cm9uLWNpcmNsZS11cFwiXSwgXCJmMTM5XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zNzcgMjcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTg3LTg3LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDIzOSAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMzc3IDI3MXpcIl1cbn07XG52YXIgZmFDaGV2cm9uQ2lyY2xlVXAgPSBmYUNpcmNsZUNoZXZyb25VcDtcbnZhciBmYUxhcmlTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xhcmktc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTFjOFwiLCBcIk0xNDQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTYuN2M1LjMtLjQgMTAuNi0uNyAxNi0uN3MxMC43IC4yIDE2IC43VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NDkuNGM1NC45IDI1LjIgOTUuOCA3NS41IDEwOC4yIDEzNi4yYzMuNSAxNy4zLTcuNyAzNC4yLTI1IDM3LjdzLTM0LjItNy43LTM3LjctMjVjLTYuMS0yOS45LTIyLjUtNTUuOS00NS40LTc0LjNWMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2MWMtNS4yLS43LTEwLjYtMS0xNi0xcy0xMC44IC4zLTE2IDF2OTVjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTg4LjFDODIuNyAyMTEuNSA2NCAyNDcuNiA2NCAyODhjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE5MiAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0OC45QzE4LjUgMzgyIDAgMzM3LjIgMCAyODhjMC03Ny41IDQ1LjktMTQ0LjMgMTEyLTE3NC42VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVZvbGNhbm8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndm9sY2FubycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1NV0sIFwiZjc3MFwiLCBcIk0xNjAgMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzE1LjcgMCAzMCA1LjYgNDEuMiAxNUMyMTIuNCAxMi40IDIzMi43IDAgMjU2IDBzNDMuNiAxMi40IDU0LjggMzFDMzIyIDIxLjYgMzM2LjMgMTYgMzUyIDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy0xNC43IDAtMjguMy01LTM5LjEtMTMuM2wtMzIgNDhDMjc1LjMgMTg3IDI2NiAxOTIgMjU2IDE5MnMtMTkuMy01LTI0LjktMTMuM2wtMzItNDhDMTg4LjMgMTM5IDE3NC43IDE0NCAxNjAgMTQ0ek0xNDQgMzUybDQ4LjQtMjQuMmMxMC4yLTUuMSAyMS42LTcuOCAzMy03LjhjMTkuNiAwIDM4LjQgNy44IDUyLjIgMjEuNmwzMi41IDMyLjVjNi4zIDYuMyAxNC45IDkuOSAyMy44IDkuOWMxMS4zIDAgMjEuOC01LjYgMjgtMTVsOS43LTE0LjYtNTguOS02Ni4zYy05LjEtMTAuMi0yMi4yLTE2LjEtMzUuOS0xNi4xSDIzNS4xYy0xMy43IDAtMjYuOCA1LjktMzUuOSAxNi4xbC01OS45IDY3LjRMMTQ0IDM1MnptMTkuNC05NS44YzE4LjItMjAuNSA0NC4zLTMyLjIgNzEuOC0zMi4yaDQxLjhjMjcuNCAwIDUzLjUgMTEuNyA3MS44IDMyLjJsMTUwLjIgMTY5YzguNSA5LjUgMTMuMiAyMS45IDEzLjIgMzQuN2MwIDI4LjgtMjMuNCA1Mi4yLTUyLjIgNTIuMkg1Mi4yQzIzLjQgNTEyIDAgNDg4LjYgMCA0NTkuOGMwLTEyLjggNC43LTI1LjEgMTMuMi0zNC43bDE1MC4yLTE2OXpcIl1cbn07XG52YXIgZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXdhbGtpbmctZGFzaGVkLWxpbmUtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTNcIiwgXCJNMjA4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTIzLjcgMjAwLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDI4MSAyMzIuN2wtMTUuMy0zNi44QzI0OC41IDE1NC44IDIwOC4zIDEyOCAxNjMuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMzIuOSAxNC42LTU4LjEgNDIuNC02OS40IDc2LjVsLTIuNiA3LjhjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMi42LTcuOGM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41em0tMzAgMTM1LjFMNjguNyAzOTggOS40IDQ1Ny40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDExNi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6TTU1MC42IDE1My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w1MzAuNyAyMjRIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDUzMC43bC0yNS40IDI1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsODAtODBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwek0zOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRWNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMjQgMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTUyek0zOTIgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHYxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjM0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMjQgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWNDQwelwiXVxufTtcbnZhciBmYVN0ZXJsaW5nU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGVybGluZy1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTYzLCBcImdicFwiLCBcInBvdW5kLXNpZ25cIl0sIFwiZjE1NFwiLCBcIk0xMTIgMTYwLjRjMC0zNS41IDI4LjgtNjQuNCA2NC40LTY0LjRjNi45IDAgMTMuOCAxLjEgMjAuNCAzLjNsODEuMiAyNy4xYzE2LjggNS42IDM0LjktMy41IDQwLjUtMjAuMnMtMy41LTM0LjktMjAuMi00MC41TDIxNyAzOC42Yy0xMy4xLTQuNC0yNi44LTYuNi00MC42LTYuNkMxMDUuNSAzMiA0OCA4OS41IDQ4IDE2MC40VjIyNEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0OHY0NC41YzAgMTcuNC00LjcgMzQuNS0xMy43IDQ5LjRMNC42IDQzMS41Yy01LjkgOS45LTYuMSAyMi4yLS40IDMyLjJTMjAuNSA0ODAgMzIgNDgwSDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4OC41bC43LTEuMUMxMDQuMSAzOTAgMTEyIDM2MS41IDExMiAzMzIuNVYyODhIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlYxNjAuNHpcIl1cbn07XG52YXIgZmFHYnAgPSBmYVN0ZXJsaW5nU2lnbjtcbnZhciBmYVBvdW5kU2lnbiA9IGZhU3RlcmxpbmdTaWduO1xudmFyIGZhVmlydXNlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aXJ1c2VzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMDc2XCIsIFwiTTE5MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0VjM3LjVjMCAzNS42IDQzLjEgNTMuNSA2OC4zIDI4LjNsOS41LTkuNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTkuNSA5LjVDMjkzIDEyNC45IDMxMC45IDE2OCAzNDYuNSAxNjhIMzYwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDM0Ni41Yy0zNS42IDAtNTMuNSA0My4xLTI4LjMgNjguM2w5LjUgOS41YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTkuNS05LjVDMjU5LjEgMjkzIDIxNiAzMTAuOSAyMTYgMzQ2LjVWMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM0Ni41YzAtMzUuNi00My4xLTUzLjUtNjguMy0yOC4zbC05LjUgOS41Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDkuNS05LjVDOTEgMjU5LjEgNzMuMSAyMTYgMzcuNSAyMTZIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRIMzcuNWMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM2wtOS41LTkuNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDkuNSA5LjVDMTI0LjkgOTEgMTY4IDczLjEgMTY4IDM3LjVWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTQ4IDIyNGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bS00OC02NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMjAgODBjMCAzMyAzOS45IDQ5LjUgNjMuMiAyNi4yYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkM1NzQuNSAzMTIuMSA1OTEgMzUyIDYyNCAzNTJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTMzIDAtNDkuNSAzOS45LTI2LjIgNjMuMmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwQzU1MS45IDQ0Ni41IDUxMiA0NjMgNTEyIDQ5NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTMzLTM5LjktNDkuNS02My4yLTI2LjJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZDNDE3LjUgNDIzLjkgNDAxIDM4NCAzNjggMzg0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2YzMzIDAgNDkuNS0zOS45IDI2LjItNjMuMmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwQzQ0MC4xIDI4OS41IDQ4MCAyNzMgNDgwIDI0MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0wIDExMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwelwiXVxufTtcbnZhciBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wZXJzb24tY29uZmluZWQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImU1NzdcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em05NiAxMTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptODAgMTA0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZWMzUwLjFjMCAzNi40LTI5LjUgNjUuOS02NS45IDY1LjljLTE3LjUgMC0zNC4zLTYuOS00Ni42LTE5LjNMMTg0LjggMzQybC0yOC4xIDU2LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsNDgtOTZjNC42LTkuMiAxMy4zLTE1LjYgMjMuNS0xNy4zczIwLjUgMS43IDI3LjggOUwyNDAgMzA2LjdWMjQ4elwiXVxufTtcbnZhciBmYVVzZXJUaWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci10aWUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1MDhcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDAgMjU2IDBBMTI4IDEyOCAwIDEgMCA5NiAxMjh6bTk0LjUgMjAwLjJsMTguNiAzMUwxNzUuOCA0ODMuMWwtMzYtMTQ2LjljLTItOC4xLTkuOC0xMy40LTE3LjktMTEuM0M1MS45IDM0Mi40IDAgNDA1LjggMCA0ODEuM2MwIDE3IDEzLjggMzAuNyAzMC43IDMwLjdIMTYyLjVjMCAwIDAgMCAuMSAwSDE2OCAyODBoNS41YzAgMCAwIDAgLjEgMEg0MTcuM2MxNyAwIDMwLjctMTMuOCAzMC43LTMwLjdjMC03NS41LTUxLjktMTM4LjktMTIxLjktMTU2LjRjLTguMS0yLTE1LjkgMy4zLTE3LjkgMTEuM2wtMzYgMTQ2LjlMMjM4LjkgMzU5LjJsMTguNi0zMWM2LjQtMTAuNy0xLjMtMjQuMi0xMy43LTI0LjJIMjI0IDIwNC4zYy0xMi40IDAtMjAuMSAxMy42LTEzLjcgMjQuMnpcIl1cbn07XG52YXIgZmFBcnJvd0Rvd25Mb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24tbG9uZycsXG4gIGljb246IFszODQsIDUxMiwgW1wibG9uZy1hcnJvdy1kb3duXCJdLCBcImYxNzVcIiwgXCJNMTY5LjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgNDAyLjcgMjI0IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzcwLjdMODYuNiAzMjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOHpcIl1cbn07XG52YXIgZmFMb25nQXJyb3dEb3duID0gZmFBcnJvd0Rvd25Mb25nO1xudmFyIGZhVGVudEFycm93RG93blRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW50LWFycm93LWRvd24tdG8tbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU3ZVwiLCBcIk0yNDEuOCAxMTEuOWM4LjkgOS45IDguMSAyNS0xLjggMzMuOWwtODAgNzJjLTkuMSA4LjItMjMgOC4yLTMyLjEgMGwtODAtNzJjLTkuOS04LjktMTAuNy0yNC0xLjgtMzMuOXMyNC0xMC43IDMzLjktMS44bDM5LjkgMzZMMTIwIDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMjIuMSAzOS45LTM2YzkuOS04LjkgMjUtOC4xIDMzLjkgMS44em0xMjIuOCAyMi42YzExLjUtOC43IDI3LjMtOC43IDM4LjggMGwxNjggMTI4YzYuNiA1IDExIDEyLjUgMTIuMyAyMC43bDI0IDE2MCAuNyA0LjdjMTcuNSAuMiAzMS42IDE0LjQgMzEuNiAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxNTkuNmwuNy00LjcgMjQtMTYwYzEuMi04LjIgNS42LTE1LjcgMTIuMy0yMC43bDE2OC0xMjh6TTM4NCA0NDhoODBMNDAyLjcgMzI1LjVjLTEuNy0zLjQtNS4xLTUuNS04LjgtNS41Yy01LjUgMC05LjkgNC40LTkuOSA5LjlWNDQ4elwiXVxufTtcbnZhciBmYUNlcnRpZmljYXRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NlcnRpZmljYXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMGEzXCIsIFwiTTIxMSA3LjNDMjA1IDEgMTk2LTEuNCAxODcuNiAuOHMtMTQuOSA4LjktMTcuMSAxNy4zTDE1NC43IDgwLjZsLTYyLTE3LjVjLTguNC0yLjQtMTcuNCAwLTIzLjUgNi4xcy04LjUgMTUuMS02LjEgMjMuNWwxNy41IDYyTDE4LjEgMTcwLjZjLTguNCAyLjEtMTUgOC43LTE3LjMgMTcuMVMxIDIwNSA3LjMgMjExbDQ2LjIgNDVMNy4zIDMwMUMxIDMwNy0xLjQgMzE2IC44IDMyNC40czguOSAxNC45IDE3LjMgMTcuMWw2Mi41IDE1LjgtMTcuNSA2MmMtMi40IDguNCAwIDE3LjQgNi4xIDIzLjVzMTUuMSA4LjUgMjMuNSA2LjFsNjItMTcuNSAxNS44IDYyLjVjMi4xIDguNCA4LjcgMTUgMTcuMSAxNy4zczE3LjMtLjIgMjMuNC02LjRsNDUtNDYuMiA0NSA0Ni4yYzYuMSA2LjIgMTUgOC43IDIzLjQgNi40czE0LjktOC45IDE3LjEtMTcuM2wxNS44LTYyLjUgNjIgMTcuNWM4LjQgMi40IDE3LjQgMCAyMy41LTYuMXM4LjUtMTUuMSA2LjEtMjMuNWwtMTcuNS02MiA2Mi41LTE1LjhjOC40LTIuMSAxNS04LjcgMTcuMy0xNy4xcy0uMi0xNy40LTYuNC0yMy40bC00Ni4yLTQ1IDQ2LjItNDVjNi4yLTYuMSA4LjctMTUgNi40LTIzLjRzLTguOS0xNC45LTE3LjMtMTcuMWwtNjIuNS0xNS44IDE3LjUtNjJjMi40LTguNCAwLTE3LjQtNi4xLTIzLjVzLTE1LjEtOC41LTIzLjUtNi4xbC02MiAxNy41TDM0MS40IDE4LjFjLTIuMS04LjQtOC43LTE1LTE3LjEtMTcuM1MzMDcgMSAzMDEgNy4zTDI1NiA1My41IDIxMSA3LjN6XCJdXG59O1xudmFyIGZhUmVwbHlBbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVwbHktYWxsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJtYWlsLXJlcGx5LWFsbFwiXSwgXCJmMTIyXCIsIFwiTTIwOS40IDM5LjVjLTkuMS05LjYtMjQuMy0xMC0zMy45LS45TDMzLjggMTczLjJjLTE5LjkgMTguOS0xOS45IDUwLjcgMCA2OS42TDE3NS41IDM3Ny40YzkuNiA5LjEgMjQuOCA4LjcgMzMuOS0uOXM4LjctMjQuOC0uOS0zMy45TDY2LjggMjA4IDIwOC41IDczLjRjOS42LTkuMSAxMC0yNC4zIC45LTMzLjl6TTM1MiA2NGMwLTEyLjYtNy40LTI0LjEtMTktMjkuMnMtMjUtMy0zNC40IDUuNGwtMTYwIDE0NGMtNi43IDYuMS0xMC42IDE0LjctMTAuNiAyMy44czMuOSAxNy43IDEwLjYgMjMuOGwxNjAgMTQ0YzkuNCA4LjUgMjIuOSAxMC42IDM0LjQgNS40czE5LTE2LjYgMTktMjkuMlYyODhoMzJjNTMgMCA5NiA0MyA5NiA5NmMwIDMwLjQtMTIuOCA0Ny45LTIyLjIgNTYuN2MtNS41IDUuMS05LjggMTItOS44IDE5LjVjMCAxMC45IDguOCAxOS43IDE5LjcgMTkuN2MyLjggMCA1LjYtLjYgOC4xLTEuOUM0OTQuNSA0NjcuOSA1NzYgNDE3LjMgNTc2IDMwNGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NkgzNTJWNjR6XCJdXG59O1xudmFyIGZhTWFpbFJlcGx5QWxsID0gZmFSZXBseUFsbDtcbnZhciBmYVN1aXRjYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1aXRjYXNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIzXSwgXCJmMGYyXCIsIFwiTTE3NiA1NlY5NkgzMzZWNTZjMC00LjQtMy42LTgtOC04SDE4NGMtNC40IDAtOCAzLjYtOCA4ek0xMjggOTZWNTZjMC0zMC45IDI1LjEtNTYgNTYtNTZIMzI4YzMwLjkgMCA1NiAyNS4xIDU2IDU2Vjk2djMyVjQ4MEgxMjhWMTI4IDk2ek02NCA5Nkg5NlY0ODBINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDQ4IDQ4MEg0MTZWOTZoMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0elwiXVxufTtcbnZhciBmYVBlcnNvblNrYXRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXNrYXRpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInNrYXRpbmdcIl0sIFwiZjdjNVwiLCBcIk0zNTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTI4IDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMkgzMTkuNGM0My42IDAgNjQuNiA1My40IDMyLjggODMuMWwtNzQuNCA2OS40IDYwLjIgNjAuMmM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOVY0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzQ5LjNsLTc3LjktNzcuOGMtMjYuNi0yNi42LTI0LjYtNzAuMyA0LjMtOTQuNGwyMC40LTE3SDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTgxLjQgMzUzLjRsODYuOS04Ni45YzQuNiAxMCAxMSAxOS4zIDE5LjMgMjcuNWwyMS44IDIxLjgtODIuNyA4Mi43Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM3ptMzIyLjUgOTUuMWM4LjYgMi4xIDEzLjggMTAuOCAxMS42IDE5LjRsLS40IDEuN2MtNi4yIDI0LjktMjguNiA0Mi40LTU0LjMgNDIuNEgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODguOGMxMSAwIDIwLjYtNy41IDIzLjMtMTguMmwuNC0xLjdjMi4xLTguNiAxMC44LTEzLjggMTkuNC0xMS42ek0xMzUuMiA0NzguM2wtNi4yIDMuMWMtMjEuNiAxMC44LTQ3LjYgNi42LTY0LjYtMTAuNUw0LjcgNDExLjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGw1OS42IDU5LjZjNy4zIDcuMyAxOC41IDkuMSAyNy43IDQuNWw2LjItMy4xYzcuOS00IDE3LjUtLjcgMjEuNSA3LjJzLjcgMTcuNS03LjIgMjEuNXpcIl1cbn07XG52YXIgZmFTa2F0aW5nID0gZmFQZXJzb25Ta2F0aW5nO1xudmFyIGZhRmlsdGVyQ2lyY2xlRG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbHRlci1jaXJjbGUtZG9sbGFyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJmdW5uZWwtZG9sbGFyXCJdLCBcImY2NjJcIiwgXCJNMy45IDIyLjlDMTAuNSA4LjkgMjQuNSAwIDQwIDBINDcyYzE1LjUgMCAyOS41IDguOSAzNi4xIDIyLjlzNC42IDMwLjUtNS4yIDQyLjVMMzk2LjQgMTk1LjZDMzE2LjIgMjEyLjEgMjU2IDI4MyAyNTYgMzY4YzAgMjcuNCA2LjMgNTMuNCAxNy41IDc2LjVjLTEuNi0uOC0zLjItMS44LTQuNy0yLjlsLTY0LTQ4Yy04LjEtNi0xMi44LTE1LjUtMTIuOC0yNS42VjI4OC45TDkgNjUuM0MtLjcgNTMuNC0yLjggMzYuOCAzLjkgMjIuOXpNMjg4IDM2OGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xMjAuOC0zMi42Yy42LS45IDEuOC0yLjEgNC4yLTMuNGM1LjEtMi43IDEyLjUtNC4xIDE4LjctNGM4LjIgLjEgMTcuMSAxLjggMjYuNCA0LjFjOC42IDIuMSAxNy4zLTMuMSAxOS40LTExLjdzLTMuMS0xNy4zLTExLjctMTkuNGMtNS42LTEuNC0xMS42LTIuNy0xNy45LTMuN1YyODhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2OS41Yy02LjEgMS4yLTEyLjMgMy4yLTE4IDYuM2MtMTEuOCA2LjMtMjMgMTguNC0yMS44IDM3LjJjMSAxNiAxMS43IDI1LjMgMjEuNiAzMC43YzguOCA0LjcgMTkuNyA3LjggMjguNiAxMC4zbDEuOCAuNWMxMC4zIDIuOSAxNy45IDUuMiAyMy4yIDguM2M0LjUgMi43IDQuNyA0LjIgNC43IDUuNmMuMSAyLjQtLjUgMy43LTEgNC41Yy0uNiAxLTEuOCAyLjItNCAzLjNjLTQuNyAyLjUtMTEuOCAzLjgtMTguNSAzLjZjLTkuNS0uMy0xOC41LTMuMS0yOS45LTYuOGMtMS45LS42LTMuOC0xLjItNS44LTEuOGMtOC40LTIuNi0xNy40IDIuMS0yMCAxMC41czIuMSAxNy40IDEwLjUgMjBjMS42IC41IDMuMyAxIDUgMS42bDAgMCAwIDBjNyAyLjMgMTUuMSA0LjggMjMuNyA2LjZ2MTEuNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjQzOC43YzYuMi0xLjEgMTIuNS0zLjEgMTguMy02LjJjMTIuMS02LjUgMjIuMy0xOC43IDIxLjctMzYuOWMtLjUtMTYuMi0xMC4zLTI2LjMtMjAuNS0zMi4zYy05LjQtNS42LTIxLjItOC45LTMwLjUtMTEuNWwtLjIgMGMtMTAuNC0yLjktMTguMy01LjItMjMuOS04LjJjLTQuOC0yLjYtNC44LTQtNC44LTQuNWwwLS4xYy0uMS0xLjkgLjMtMi45IC44LTMuNnpcIl1cbn07XG52YXIgZmFGdW5uZWxEb2xsYXIgPSBmYUZpbHRlckNpcmNsZURvbGxhcjtcbnZhciBmYUNhbWVyYVJldHJvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbWVyYS1yZXRybycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI0N10sIFwiZjA4M1wiLCBcIk0yMjAuNiAxMjEuMkwyNzEuMSA5NiA0NDggOTZ2OTZIMzMzLjJjLTIxLjktMTUuMS00OC41LTI0LTc3LjItMjRzLTU1LjIgOC45LTc3LjIgMjRINjRWMTI4SDE5MmM5LjkgMCAxOS43LTIuMyAyOC42LTYuOHpNMCAxMjhWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEgyNzEuMWMtOS45IDAtMTkuNyAyLjMtMjguNiA2LjhMMTkyIDY0SDE2MFY0OGMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2QzI4LjcgNjQgMCA5Mi43IDAgMTI4ek0xNjggMzA0YTg4IDg4IDAgMSAxIDE3NiAwIDg4IDg4IDAgMSAxIC0xNzYgMHpcIl1cbn07XG52YXIgZmFDaXJjbGVBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWFycm93LWRvd24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93LWNpcmNsZS1kb3duXCJdLCBcImYwYWJcIiwgXCJNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwek0xMjcgMjgxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzEgNzFMMjMyIDEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTgyLjEgNzEtNzFjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDI3MyAzOTNjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDEyNyAyODF6XCJdXG59O1xudmFyIGZhQXJyb3dDaXJjbGVEb3duID0gZmFDaXJjbGVBcnJvd0Rvd247XG52YXIgZmFGaWxlSW1wb3J0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtaW1wb3J0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvdy1yaWdodC10by1maWxlXCJdLCBcImY1NmZcIiwgXCJNMTI4IDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDM1MlYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJINTEyVjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEgxOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0VjMzNkgzMDIuMWwtMzkgMzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtODAtODBjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzkgMzlIMTI4VjY0em0wIDIyNHY0OEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNEgxMjh6TTUxMiAxMjhIMzg0VjBMNTEyIDEyOHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0VG9GaWxlID0gZmFGaWxlSW1wb3J0O1xudmFyIGZhU3F1YXJlQXJyb3dVcFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1hcnJvdy11cC1yaWdodCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiZXh0ZXJuYWwtbGluay1zcXVhcmVcIl0sIFwiZjE0Y1wiLCBcIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkgzODR6TTE2MCAxNDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoOTQuMUwxMTkgMzI3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTM1LTEzNVYzMjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxNjhjMC0xMy4zLTEwLjctMjQtMjQtMjRIMTYwelwiXVxufTtcbnZhciBmYUV4dGVybmFsTGlua1NxdWFyZSA9IGZhU3F1YXJlQXJyb3dVcFJpZ2h0O1xudmFyIGZhQm94T3BlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3gtb3BlbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjQ5ZVwiLCBcIk01OC45IDQyLjFjMy02LjEgOS42LTkuNiAxNi4zLTguN0wzMjAgNjQgNTY0LjggMzMuNGM2LjctLjggMTMuMyAyLjcgMTYuMyA4LjdsNDEuNyA4My40YzkgMTcuOS0uNiAzOS42LTE5LjggNDUuMUw0MzkuNiAyMTcuM2MtMTMuOSA0LTI4LjgtMS45LTM2LjItMTQuM0wzMjAgNjQgMjM2LjYgMjAzYy03LjQgMTIuNC0yMi4zIDE4LjMtMzYuMiAxNC4zTDM3LjEgMTcwLjZjLTE5LjMtNS41LTI4LjgtMjcuMi0xOS44LTQ1LjFMNTguOSA0Mi4xek0zMjEuMSAxMjhsNTQuOSA5MS40YzE0LjkgMjQuOCA0NC42IDM2LjYgNzIuNSAyOC42TDU3NiAyMTEuNnYxNjdjMCAyMi0xNSA0MS4yLTM2LjQgNDYuNmwtMjA0LjEgNTFjLTEwLjIgMi42LTIwLjkgMi42LTMxIDBsLTIwNC4xLTUxQzc5IDQxOS43IDY0IDQwMC41IDY0IDM3OC41di0xNjdMMTkxLjYgMjQ4YzI3LjggOCA1Ny42LTMuOCA3Mi41LTI4LjZMMzE4LjkgMTI4aDIuMnpcIl1cbn07XG52YXIgZmFTY3JvbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nyb2xsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MjIwXSwgXCJmNzBlXCIsIFwiTTAgODB2NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJINDggOTZWODBjMC0yNi41LTIxLjUtNDgtNDgtNDhTMCA1My41IDAgODB6TTExMiAzMmMxMCAxMy40IDE2IDMwIDE2IDQ4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0di01LjNjMC0zMi40IDI2LjMtNTguNyA1OC43LTU4LjdINDgwVjEyOGMwLTUzLTQzLTk2LTk2LTk2SDExMnpNNDY0IDQ4MGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMmMwLTguOC03LjItMTYtMTYtMTZIMzE0LjdjLTE0LjcgMC0yNi43IDExLjktMjYuNyAyNi43VjM4NGMwIDUzLTQzIDk2LTk2IDk2SDM2OGg5NnpcIl1cbn07XG52YXIgZmFTcGEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3BhJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNWJiXCIsIFwiTTE4My4xIDIzNS4zYzMzLjcgMjAuNyA2Mi45IDQ4LjEgODUuOCA4MC41YzcgOS45IDEzLjQgMjAuMyAxOS4xIDMxYzUuNy0xMC44IDEyLjEtMjEuMSAxOS4xLTMxYzIyLjktMzIuNCA1Mi4xLTU5LjggODUuOC04MC41QzQzNy42IDIwNy44IDQ5MC4xIDE5MiA1NDYgMTkyaDkuOWMxMS4xIDAgMjAuMSA5IDIwLjEgMjAuMUM1NzYgMzYwLjEgNDU2LjEgNDgwIDMwOC4xIDQ4MEgyODggMjY3LjlDMTE5LjkgNDgwIDAgMzYwLjEgMCAyMTIuMUMwIDIwMSA5IDE5MiAyMC4xIDE5MkgzMGM1NS45IDAgMTA4LjQgMTUuOCAxNTMuMSA0My4zek0zMDEuNSAzNy42YzE1LjcgMTYuOSA2MS4xIDcxLjggODQuNCAxNjQuNmMtMzggMjEuNi03MS40IDUwLjgtOTcuOSA4NS42Yy0yNi41LTM0LjgtNTkuOS02My45LTk3LjktODUuNmMyMy4yLTkyLjggNjguNi0xNDcuNyA4NC40LTE2NC42QzI3OCAzMy45IDI4Mi45IDMyIDI4OCAzMnMxMCAxLjkgMTMuNSA1LjZ6XCJdXG59O1xudmFyIGZhTG9jYXRpb25QaW5Mb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xvY2F0aW9uLXBpbi1sb2NrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTFmXCIsIFwiTTIxNS43IDQ5OS4yYzExLTEzLjggMjUuMS0zMS43IDQwLjMtNTIuM1YzNTJjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjI3MmMwLTU1LjYgNDAuNS0xMDEuNyA5My42LTExMC41QzM2NyA3MCAyODcuNyAwIDE5MiAwQzg2IDAgMCA4NiAwIDE5MmMwIDg3LjQgMTE3IDI0MyAxNjguMyAzMDcuMmMxMi4zIDE1LjMgMzUuMSAxNS4zIDQ3LjQgMHpNMTkyIDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDAwIDI0MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEgzNjhWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG52YXIgZmFQYXVzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYXVzZScsXG4gIGljb246IFszMjAsIDUxMiwgWzkyMDhdLCBcImYwNGNcIiwgXCJNNDggNjRDMjEuNSA2NCAwIDg1LjUgMCAxMTJWNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDgwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OEg0OHptMTkyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQwMGMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzMmMyNi41IDAgNDgtMjEuNSA0OC00OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjQwelwiXVxufTtcbnZhciBmYUhpbGxBdmFsYW5jaGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGlsbC1hdmFsYW5jaGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MDdcIiwgXCJNNDM5LjcgNDAxLjljMzQuMiAyMy4xIDgxLjEgMTkuNSAxMTEuNC0xMC44YzM0LjQtMzQuNCAzNC40LTkwLjEgMC0xMjQuNGMtMjcuOC0yNy44LTY5LjUtMzMuMS0xMDIuNi0xNmMtMTEuOCA2LjEtMTYuNCAyMC42LTEwLjMgMzIuM3MyMC42IDE2LjQgMzIuMyAxMC4zYzE1LjEtNy44IDM0LTUuMyA0Ni42IDcuM2MxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNnMtNDAuOSAxNS42LTU2LjYgMGwtODEuNy04MS43QzQwMS4yIDI2MS4zIDQxNiAyMzYuNCA0MTYgMjA4YzAtMzMuOS0yMS4xLTYyLjktNTAuOS03NC41YzEuOS02LjggMi45LTE0IDIuOS0yMS41YzAtNDQuMi0zNS44LTgwLTgwLTgwYy0yNy4zIDAtNTEuNSAxMy43LTY1LjkgMzQuNkMyMTYuMyA0Ni42IDE5Ny45IDMyIDE3NiAzMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhjMCA0IC41IDcuOSAxLjQgMTEuNkw0MzkuNyA0MDEuOXpNNDgwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNjguMyA4N0M0My4xIDYxLjggMCA3OS43IDAgMTE1LjNWNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwSDM5Ni43YzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjMgODd6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmVFbXB0eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1lbXB0eScsXG4gIGljb246IFszMjAsIDUxMiwgW1widGVtcGVyYXR1cmUtMFwiLCBcInRoZXJtb21ldGVyLTBcIiwgXCJ0aGVybW9tZXRlci1lbXB0eVwiXSwgXCJmMmNiXCIsIFwiTTExMiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OFYyNzYuNWMwIDE3LjMgNy4xIDMxLjkgMTUuMyA0Mi41QzIzMy44IDMzMi42IDI0MCAzNDkuNSAyNDAgMzY4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMTguNSA2LjItMzUuNCAxNi43LTQ4LjljOC4yLTEwLjYgMTUuMy0yNS4yIDE1LjMtNDIuNVYxMTJ6TTE2MCAwQzk4LjEgMCA0OCA1MC4yIDQ4IDExMlYyNzYuNWMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEMyNy4yIDMwNC4yIDE2IDMzNC44IDE2IDM2OGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0YzAtMzMuMi0xMS4yLTYzLjgtMzAuMS04OC4xYy0uOS0xLjItMS41LTIuMi0xLjctMi44Yy0uMS0uMy0uMi0uNS0uMi0uNlYxMTJDMjcyIDUwLjIgMjIxLjkgMCAxNjAgMHptMCA0MTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2elwiXVxufTtcbnZhciBmYVRlbXBlcmF0dXJlMCA9IGZhVGVtcGVyYXR1cmVFbXB0eTtcbnZhciBmYVRoZXJtb21ldGVyMCA9IGZhVGVtcGVyYXR1cmVFbXB0eTtcbnZhciBmYVRoZXJtb21ldGVyRW1wdHkgPSBmYVRlbXBlcmF0dXJlRW1wdHk7XG52YXIgZmFCb21iID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvbWInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNjNdLCBcImYxZTJcIiwgXCJNNDU5LjEgNTIuNEw0NDIuNiA2LjVDNDQwLjcgMi42IDQzNi41IDAgNDMyLjEgMHMtOC41IDIuNi0xMC40IDYuNUw0MDUuMiA1Mi40bC00NiAxNi44Yy00LjMgMS42LTcuMyA1LjktNy4yIDEwLjRjMCA0LjUgMyA4LjcgNy4yIDEwLjJsNDUuNyAxNi44IDE2LjggNDUuOGMxLjUgNC40IDUuOCA3LjUgMTAuNCA3LjVzOC45LTMuMSAxMC40LTcuNWwxNi41LTQ1LjggNDUuNy0xNi44YzQuMi0xLjUgNy4yLTUuNyA3LjItMTAuMmMwLTQuNi0zLTguOS03LjItMTAuNEw0NTkuMSA1Mi40em0tMTMyLjQgNTNjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0yLjkgMi45QzI1Ni41IDEwMC4zIDIzMi43IDk2IDIwOCA5NkM5My4xIDk2IDAgMTg5LjEgMCAzMDRTOTMuMSA1MTIgMjA4IDUxMnMyMDgtOTMuMSAyMDgtMjA4YzAtMjQuNy00LjMtNDguNS0xMi4yLTcwLjVsMi45LTIuOWMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtODAtODB6TTIwMCAxOTJjLTU3LjQgMC0xMDQgNDYuNi0xMDQgMTA0djhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZ2LThjMC03NS4xIDYwLjktMTM2IDEzNi0xMzZoOGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmgtOHpcIl1cbn07XG52YXIgZmFSZWdpc3RlcmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlZ2lzdGVyZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxNzRdLCBcImYyNWRcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2MCAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjRoODhjNDQuMiAwIDgwIDM1LjggODAgODBjMCAyOC0xNC40IDUyLjctMzYuMyA2N2wzNC4xIDc1LjFjNS41IDEyLjEgLjEgMjYuMy0xMS45IDMxLjhzLTI2LjMgLjEtMzEuOC0xMS45TDI2OC45IDI4OEgyMDh2NzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjY0IDE1MnptNDggODhoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjA4djY0elwiXVxufTtcbnZhciBmYUFkZHJlc3NDYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FkZHJlc3MtY2FyZCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzYyMTQwLCBcImNvbnRhY3QtY2FyZFwiLCBcInZjYXJkXCJdLCBcImYyYmJcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em04MCAyNTZoNjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODB6bS0zMi05NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTI1Ni0zMkg0OTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDQ5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFDb250YWN0Q2FyZCA9IGZhQWRkcmVzc0NhcmQ7XG52YXIgZmFWY2FyZCA9IGZhQWRkcmVzc0NhcmQ7XG52YXIgZmFTY2FsZVVuYmFsYW5jZWRGbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjYWxlLXVuYmFsYW5jZWQtZmxpcCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiYmFsYW5jZS1zY2FsZS1yaWdodFwiXSwgXCJmNTE2XCIsIFwiTTExNy45IDYyLjRjLTE2LjgtNS42LTI1LjgtMjMuNy0yMC4yLTQwLjVzMjMuNy0yNS44IDQwLjUtMjAuMmwxMTMgMzcuN0MyNjUgMTUuOCAyOTAuNyAwIDMyMCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgMy0uMiA1LjktLjUgOC44bDEyMi42IDQwLjljMTYuOCA1LjYgMjUuOCAyMy43IDIwLjIgNDAuNXMtMjMuNyAyNS44LTQwLjUgMjAuMkwzNjYuNCAxNDUuMmMtNC41IDMuMi05LjMgNS45LTE0LjQgOC4yVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjg4VjE1My4zYy0yMS05LjItMzcuMi0yNy00NC4yLTQ5bC0xMjUuOS00MnpNMjAwLjQgMjg4TDEyOCAxNjMuOCA1NS42IDI4OEgyMDAuNHpNMTI4IDM4NEM2NS4xIDM4NCAxMi44IDM1MCAyIDMwNS4xYy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xQzI0My4yIDM1MCAxOTAuOSAzODQgMTI4IDM4NHptMzgyLjgtOTIuMkw0MzguNCA0MTZINTgzLjNMNTEwLjggMjkxLjh6bTEyNiAxNDEuM0M2MjYgNDc4IDU3My43IDUxMiA1MTAuOCA1MTJzLTExNS4yLTM0LTEyNi03OC45Yy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xelwiXVxufTtcbnZhciBmYUJhbGFuY2VTY2FsZVJpZ2h0ID0gZmFTY2FsZVVuYmFsYW5jZWRGbGlwO1xudmFyIGZhU3Vic2NyaXB0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1YnNjcmlwdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjEyY1wiLCBcIk0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJINDcuM2w4OS42IDEyOEw0Ny4zIDM4NEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NGMxMC40IDAgMjAuMi01LjEgMjYuMi0xMy42TDE3NiAzMTEuOGw4NS44IDEyMi42YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzA0LjdMMjE1LjEgMjU2bDg5LjYtMTI4SDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODhjLTEwLjQgMC0yMC4yIDUuMS0yNi4yIDEzLjZMMTc2IDIwMC4yIDkwLjIgNzcuNkM4NC4yIDY5LjEgNzQuNCA2NCA2NCA2NEgzMnpNNDgwIDMyMGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjlDMzkzIDM2MS41IDQwNC4zIDM2OCA0MTYgMzY4djgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyIDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjMyMHpcIl1cbn07XG52YXIgZmFEaWFtb25kVHVyblJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYW1vbmQtdHVybi1yaWdodCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZGlyZWN0aW9uc1wiXSwgXCJmNWViXCIsIFwiTTIyNy43IDExLjdjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDBsMjE2IDIxNmMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtMjE2IDIxNmMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBsLTIxNi0yMTZjLTE1LjYtMTUuNi0xNS42LTQwLjkgMC01Ni42bDIxNi0yMTZ6bTg3LjYgMTM3Yy00LjYtNC42LTExLjUtNS45LTE3LjQtMy41cy05LjkgOC4zLTkuOSAxNC44djU2SDIyNGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyODBjMC04LjggNy4yLTE2IDE2LTE2aDY0djU2YzAgNi41IDMuOSAxMi4zIDkuOSAxNC44czEyLjkgMS4xIDE3LjQtMy41bDgwLTgwYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC04MC04MHpcIl1cbn07XG52YXIgZmFEaXJlY3Rpb25zID0gZmFEaWFtb25kVHVyblJpZ2h0O1xudmFyIGZhQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVyc3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0ZGNcIiwgXCJNMzcuNiA0LjJDMjgtMi4zIDE1LjItMS4xIDcgN3MtOS40IDIxLTIuOCAzMC41bDExMiAxNjMuM0wxNi42IDIzMy4yQzYuNyAyMzYuNCAwIDI0NS42IDAgMjU2czYuNyAxOS42IDE2LjYgMjIuOGwxMDMuMSAzMy40TDY2LjggNDEyLjhjLTQuOSA5LjMtMy4yIDIwLjcgNC4zIDI4LjFzMTguOCA5LjIgMjguMSA0LjNsMTAwLjYtNTIuOSAzMy40IDEwMy4xYzMuMiA5LjkgMTIuNCAxNi42IDIyLjggMTYuNnMxOS42LTYuNyAyMi44LTE2LjZsMzMuNC0xMDMuMSAxMDAuNiA1Mi45YzkuMyA0LjkgMjAuNyAzLjIgMjguMS00LjNzOS4yLTE4LjggNC4zLTI4LjFMMzkyLjMgMzEyLjJsMTAzLjEtMzMuNGM5LjktMy4yIDE2LjYtMTIuNCAxNi42LTIyLjhzLTYuNy0xOS42LTE2LjYtMjIuOEwzODguOSAxOTguN2wyNS43LTcwLjRjMy4yLTguOCAxLTE4LjYtNS42LTI1LjJzLTE2LjQtOC44LTI1LjItNS42bC03MC40IDI1LjdMMjc4LjggMTYuNkMyNzUuNiA2LjcgMjY2LjQgMCAyNTYgMHMtMTkuNiA2LjctMjIuOCAxNi42bC0zMi4zIDk5LjZMMzcuNiA0LjJ6XCJdXG59O1xudmFyIGZhSG91c2VMYXB0b3AgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtbGFwdG9wJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJsYXB0b3AtaG91c2VcIl0sIFwiZTA2NlwiLCBcIk0yMTguMyA4LjVjMTIuMy0xMS4zIDMxLjItMTEuMyA0My40IDBsMjA4IDE5MmM2LjcgNi4yIDEwLjMgMTQuOCAxMC4zIDIzLjVIMzM2Yy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuN1YyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmg2NFY0MTZIMTEyYy0yNi41IDAtNDgtMjEuNS00OC00OFYyNTZIMzJjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LjEtMzUuMmwyMDgtMTkyek0zNTIgMzA0VjQ0OEg1NDRWMzA0SDM1MnptLTQ4LTE2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDU2MGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhoMzJjOC44IDAgMTYgNy4yIDE2IDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDU0NCAzNTIgMzA0Yy0yNi41IDAtNDgtMjEuNS00OC00OGMwLTguOCA3LjItMTYgMTYtMTZoMzJWMjg4elwiXVxufTtcbnZhciBmYUxhcHRvcEhvdXNlID0gZmFIb3VzZUxhcHRvcDtcbnZhciBmYUZhY2VUaXJlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLXRpcmVkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU1LCBcInRpcmVkXCJdLCBcImY1YzhcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC43IDMyOC43YzIyLTIyIDUzLjktNDAuNyA5MS4zLTQwLjdzNjkuMyAxOC43IDkxLjMgNDAuN2MxMS4xIDExLjEgMjAuMSAyMy40IDI2LjQgMzUuNGM2LjIgMTEuNyAxMC4zIDI0LjQgMTAuMyAzNS45YzAgNS4yLTIuNiAxMC4yLTYuOSAxMy4ycy05LjggMy43LTE0LjcgMS44bC0yMC41LTcuN2MtMjYuOS0xMC4xLTU1LjUtMTUuMy04NC4zLTE1LjNoLTMuMmMtMjguOCAwLTU3LjMgNS4yLTg0LjMgMTUuM0wxNDkuNiA0MTVjLTQuOSAxLjgtMTAuNCAxLjItMTQuNy0xLjhzLTYuOS03LjktNi45LTEzLjJjMC0xMS42IDQuMi0yNC4yIDEwLjMtMzUuOWM2LjMtMTIgMTUuMy0yNC4zIDI2LjQtMzUuNHptLTMxLjItMTgybDg5LjkgNDcuOWMxMC43IDUuNyAxMC43IDIxLjEgMCAyNi44bC04OS45IDQ3LjljLTcuOSA0LjItMTcuNS0xLjUtMTcuNS0xMC41YzAtMi44IDEtNS41IDIuOC03LjZsMzYtNDMuMi0zNi00My4yYy0xLjgtMi4xLTIuOC00LjgtMi44LTcuNmMwLTkgOS42LTE0LjcgMTcuNS0xMC41ek0zOTYgMTU3LjFjMCAyLjgtMSA1LjUtMi44IDcuNmwtMzYgNDMuMiAzNiA0My4yYzEuOCAyLjEgMi44IDQuOCAyLjggNy42YzAgOS05LjYgMTQuNy0xNy41IDEwLjVsLTg5LjktNDcuOWMtMTAuNy01LjctMTAuNy0yMS4xIDAtMjYuOGw4OS45LTQ3LjljNy45LTQuMiAxNy41IDEuNSAxNy41IDEwLjV6XCJdXG59O1xudmFyIGZhVGlyZWQgPSBmYUZhY2VUaXJlZDtcbnZhciBmYU1vbmV5QmlsbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktYmlsbHMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUxZjNcIiwgXCJNOTYgOTZWMzIwYzAgMzUuMyAyOC43IDY0IDY0IDY0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEgxNjBjLTM1LjMgMC02NCAyOC43LTY0IDY0em02NCAxNjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRIMTYwVjI1NnpNMjI0IDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0Vjk2aDY0ek01NzYgMjU2djY0SDUxMmMwLTM1LjMgMjguNy02NCA2NC02NHpNNTEyIDk2aDY0djY0Yy0zNS4zIDAtNjQtMjguNy02NC02NHpNMjg4IDIwOGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTQ4IDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDEwNi43IDAgMTIwVjM2MGMwIDY2LjMgNTMuNyAxMjAgMTIwIDEyMEg1MjBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMTIwYy0zOS44IDAtNzItMzIuMi03Mi03MlYxMjB6XCJdXG59O1xudmFyIGZhU21vZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbW9nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzVmXCIsIFwiTTMyIDE0NGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NEgyOTkuM2MyMi42IDE5LjkgNTIuMiAzMiA4NC43IDMyczYyLjEtMTIuMSA4NC43LTMySDQ5NmM2MS45IDAgMTEyLTUwLjEgMTEyLTExMnMtNTAuMS0xMTItMTEyLTExMmMtMTAuNyAwLTIxIDEuNS0zMC44IDQuM0M0NDMuOCAyNy43IDQwMS4xIDAgMzUyIDBjLTMyLjYgMC02Mi40IDEyLjItODUuMSAzMi4zQzI0Mi4xIDEyLjEgMjEwLjUgMCAxNzYgMEM5Ni41IDAgMzIgNjQuNSAzMiAxNDR6TTYxNiAzNjhIMjgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDYxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHptLTY0IDk2SDQ0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEg1NTJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6bS0xOTIgMEgyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgzNjBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6TTIyNCAzOTJjMC0xMy4zLTEwLjctMjQtMjQtMjRIOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMjAwYzEzLjMgMCAyNC0xMC43IDI0LTI0elwiXVxufTtcbnZhciBmYUNydXRjaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjcnV0Y2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ZjdcIiwgXCJNMjk3LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwem0tOTYgMTQ0bC0zNC44IDM0LjhjLTEyLjkgMTIuOS0yMS45IDI5LjItMjUuOCA0Ny4xTDExNi44IDM0Mi45Yy0xLjMgNS45LTQuMyAxMS40LTguNiAxNS43TDkuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5OC44LTk4LjhjNC4zLTQuMyA5LjctNy4zIDE1LjctOC42bDEwNy42LTIzLjljMTcuOC00IDM0LjEtMTIuOSA0Ny4xLTI1LjhsMzQuNy0zNC43YzAgMCAuMS0uMSAuMS0uMXMuMS0uMSAuMS0uMWw3NC42LTc0LjYtNDUuMy00NS4zTDMzNiAyNDIuNyAyNjkuMyAxNzZsNTIuMS01Mi4xTDI3Ni4xIDc4LjZsLTc0LjcgNzQuN3pNMjI0IDIyMS4zTDI5MC43IDI4OGwtMTIuMiAxMi4yYy00LjMgNC4zLTkuNyA3LjMtMTUuNyA4LjZsLTc2LjcgMTcgMTctNzYuN2MxLjMtNS45IDQuMy0xMS40IDguNi0xNS43TDIyNCAyMjEuM3pcIl1cbn07XG52YXIgZmFGb250QXdlc29tZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb250LWF3ZXNvbWUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjUwMSwgNjI2OTQsIFwiZm9udC1hd2Vzb21lLWZsYWdcIiwgXCJmb250LWF3ZXNvbWUtbG9nby1mdWxsXCJdLCBcImYyYjRcIiwgXCJNOTEuNyA5NkMxMDYuMyA4Ni44IDExNiA3MC41IDExNiA1MkMxMTYgMjMuMyA5Mi43IDAgNjQgMFMxMiAyMy4zIDEyIDUyYzAgMTYuNyA3LjggMzEuNSAyMCA0MWwwIDMgMCAzNTIgMCA2NCA2NCAwIDAtNjQgMzczLjYgMGMxNC42IDAgMjYuNC0xMS44IDI2LjQtMjYuNGMwLTMuNy0uOC03LjMtMi4zLTEwLjdMNDMyIDI3Mmw2MS43LTEzOC45YzEuNS0zLjQgMi4zLTcgMi4zLTEwLjdjMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnpcIl1cbn07XG52YXIgZmFGb250QXdlc29tZUZsYWcgPSBmYUZvbnRBd2Vzb21lO1xudmFyIGZhRm9udEF3ZXNvbWVMb2dvRnVsbCA9IGZhRm9udEF3ZXNvbWU7XG52YXIgZmFDbG91ZEFycm93VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtYXJyb3ctdXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs2MjMzOCwgXCJjbG91ZC11cGxvYWRcIiwgXCJjbG91ZC11cGxvYWQtYWx0XCJdLCBcImYwZWVcIiwgXCJNMTQ0IDQ4MEM2NC41IDQ4MCAwIDQxNS41IDAgMzM2YzAtNjIuOCA0MC4yLTExNi4yIDk2LjItMTM1LjljLS4xLTIuNy0uMi01LjQtLjItOC4xYzAtODguNCA3MS42LTE2MCAxNjAtMTYwYzU5LjMgMCAxMTEgMzIuMiAxMzguNyA4MC4yQzQwOS45IDEwMiA0MjguMyA5NiA0NDggOTZjNTMgMCA5NiA0MyA5NiA5NmMwIDEyLjItMi4zIDIzLjgtNi40IDM0LjZDNTk2IDIzOC40IDY0MCAyOTAuMSA2NDAgMzUyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4SDE0NHptNzktMjE3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzktMzlWMzkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjU3LjlsMzkgMzljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04MC04MGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTgwIDgwelwiXVxufTtcbnZhciBmYUNsb3VkVXBsb2FkID0gZmFDbG91ZEFycm93VXA7XG52YXIgZmFDbG91ZFVwbG9hZEFsdCA9IGZhQ2xvdWRBcnJvd1VwO1xudmFyIGZhUGFsZXR0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWxldHRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTEyXSwgXCJmNTNmXCIsIFwiTTUxMiAyNTZjMCAuOSAwIDEuOCAwIDIuN2MtLjQgMzYuNS0zMy42IDYxLjMtNzAuMSA2MS4zSDM0NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhjMCAzLjQgLjQgNi43IDEgOS45YzIuMSAxMC4yIDYuNSAyMCAxMC44IDI5LjljNi4xIDEzLjggMTIuMSAyNy41IDEyLjEgNDJjMCAzMS44LTIxLjYgNjAuNy01My40IDYyYy0zLjUgLjEtNyAuMi0xMC42IC4yQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ6TTEyOCAyODhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQXJyb3dzVHVyblJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10dXJuLXJpZ2h0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlNGMwXCIsIFwiTTI5Ny40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDMzOC43IDE2MEgxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjIyNEMwIDE1My4zIDU3LjMgOTYgMTI4IDk2SDMzOC43TDI5Ny40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zem0tOTYgMjU2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQyLjcgNDE2SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhjMC01MyA0My05NiA5Ni05NkgyNDIuN2wtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG52YXIgZmFWZXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Zlc3QnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwODVcIiwgXCJNMjA3LjEgMjM3LjRMMTUxLjIgNjkuN0MxNjguNiA3OS43IDE5Mi42IDg4IDIyNCA4OHM1NS40LTguMyA3Mi44LTE4LjNMMjI2LjUgMjgwLjZjLTEuNiA0LjktMi41IDEwLTIuNSAxNS4yVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjcwLjVjMC05LjUtMi44LTE4LjctOC4xLTI2LjZsLTQ3LjktNzEuOGMtNS4zLTcuOS04LjEtMTcuMS04LjEtMjYuNlYxMjggNTQuMyA0OGMwLTI2LjUtMjEuNS00OC00OC00OGgtNC41Yy0uMiAwLS40IDAtLjYgMGMtLjQgMC0uOCAwLTEuMiAwQzMxMSAwIDI5NS43IDkuNyAyODUuNyAxOC44QzI3Ni40IDI3LjIgMjU3LjIgNDAgMjI0IDQwcy01Mi40LTEyLjgtNjEuNy0yMS4yQzE1Mi4zIDkuNyAxMzcgMCAxMTguMyAwYy0uNCAwLS44IDAtMS4yIDBjLS4yIDAtLjQgMC0uNiAwSDExMkM4NS41IDAgNjQgMjEuNSA2NCA0OHY2LjNWMTI4djE3LjVjMCA5LjUtMi44IDE4LjctOC4xIDI2LjZMOC4xIDI0My45QzIuOCAyNTEuOCAwIDI2MS4xIDAgMjcwLjVWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDE3NmM5LjkgMCAxOS0zIDI2LjctOC4xQzE5NS45IDQ5Mi4yIDE5MiA0NzguNSAxOTIgNDY0VjI5NS44YzAtOC42IDEuNC0xNy4xIDQuMS0yNS4zbDExLTMzLjF6TTM0Ny4zIDM1Ni43bDQ4IDQ4YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTQ4LTQ4Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDB6bS0yOTQuNiA0OGw0OC00OGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZsLTQ4IDQ4Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42elwiXVxufTtcbnZhciBmYUZlcnJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZlcnJ5JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGVhXCIsIFwiTTIyNCAwSDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMmg3NS4xYzIwLjYgMCAzMS42IDI0LjMgMTguMSAzOS44TDQ1NiA5NkgxMjBMOTguOCA3MS44Qzg1LjMgNTYuMyA5Ni4zIDMyIDExNi45IDMySDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNOTYgMTI4SDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMlYyODMuNWMwIDEzLjMtNC4yIDI2LjMtMTEuOSAzNy4ybC01MS40IDcxLjljLTEuOSAxLjEtMy43IDIuMi01LjUgMy41Yy0xNS41IDEwLjctMzQgMTgtNTEgMTkuOUgzNzUuNmMtMTcuMS0xLjgtMzUtOS01MC44LTE5LjljLTIyLjEtMTUuNS01MS42LTE1LjUtNzMuNyAwYy0xNC44IDEwLjItMzIuNSAxOC01MC42IDE5LjlIMTgzLjljLTE3LTEuOC0zNS42LTkuMi01MS0xOS45Yy0xLjgtMS4zLTMuNy0yLjQtNS42LTMuNUw3NS45IDMyMC43QzY4LjIgMzA5LjggNjQgMjk2LjggNjQgMjgzLjVWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMiA2NHY5Nkg0NDhWMTkySDEyOHpNMzA2LjUgNDIxLjlDMzI5IDQzNy40IDM1Ni41IDQ0OCAzODQgNDQ4YzI2LjkgMCA1NS4zLTEwLjggNzcuNC0yNi4xbDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDUwMS43IDQxNyA1MTIgMzg0IDUxMmMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNCAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDQzNy4yIDE2NS4xIDQ0OCAxOTIgNDQ4YzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwelwiXVxufTtcbnZhciBmYUFycm93c0Rvd25Ub1Blb3BsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtZG93bi10by1wZW9wbGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YjlcIiwgXCJNMTQ0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjE0Mi4xTDk3IDExOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2NC02NGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyM1YyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzYwIDIwMGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwek0xODQgMjk2YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTMxMiA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6TTIwMCA0NDEuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNi4zLTY3LjVjMS43LTEuNyAzLjItMy42IDQuMy01LjhMMjY0IDM0NS41VjQwMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNDUuNWwyNi45IDQ5LjljMS4yIDIuMiAyLjYgNC4xIDQuMyA1LjhsLTM2LjMgNjcuNWMtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMNDQwIDQ0MS41VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlY0NDEuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNy45LTcwLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDQ4Ni4yYy0xNi4zIDAtMzEuOSA0LjUtNDUuNCAxMi42bC0zMy42LTYyLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDMxMC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzMuNiA2Mi4zYy0xMy41LTguMS0yOS4xLTEyLjYtNDUuNC0xMi42SDEzNC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM0wxOC45IDQ2OC42Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEw4OCA0NDEuNVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJoNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWNDQxLjV6TTQxNSAxNTNsNjQgNjRjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNjQtNjRjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMjMgMjNWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWMTQyLjFsLTIzLTIzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45elwiXVxufTtcbnZhciBmYVNlZWRsaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NlZWRsaW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzkzLCBcInNwcm91dFwiXSwgXCJmNGQ4XCIsIFwiTTUxMiAzMmMwIDExMy42LTg0LjYgMjA3LjUtMTk0LjIgMjIyYy03LjEtNTMuNC0zMC42LTEwMS42LTY1LjMtMTM5LjNDMjkwLjggNDYuMyAzNjQgMCA0NDggMGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NEg2NGMxMjMuNyAwIDIyNCAxMDAuMyAyMjQgMjI0djMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMjBDMTAwLjMgMzIwIDAgMjE5LjcgMCA5NnpcIl1cbn07XG52YXIgZmFTcHJvdXQgPSBmYVNlZWRsaW5nO1xudmFyIGZhTGVmdFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xlZnQtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs4NTk2LCBcImFycm93cy1hbHQtaFwiXSwgXCJmMzM3XCIsIFwiTTUwNC4zIDI3My42YzQuOS00LjUgNy43LTEwLjkgNy43LTE3LjZzLTIuOC0xMy03LjctMTcuNmwtMTEyLTEwNGMtNy02LjUtMTcuMi04LjItMjUuOS00LjRzLTE0LjQgMTIuNS0xNC40IDIybDAgNTYtMTkyIDAgMC01NmMwLTkuNS01LjctMTguMi0xNC40LTIycy0xOC45LTIuMS0yNS45IDQuNGwtMTEyIDEwNEMyLjggMjQzIDAgMjQ5LjMgMCAyNTZzMi44IDEzIDcuNyAxNy42bDExMiAxMDRjNyA2LjUgMTcuMiA4LjIgMjUuOSA0LjRzMTQuNC0xMi41IDE0LjQtMjJsMC01NiAxOTIgMCAwIDU2YzAgOS41IDUuNyAxOC4yIDE0LjQgMjJzMTguOSAyLjEgMjUuOS00LjRsMTEyLTEwNHpcIl1cbn07XG52YXIgZmFBcnJvd3NBbHRIID0gZmFMZWZ0UmlnaHQ7XG52YXIgZmFCb3hlc1BhY2tpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94ZXMtcGFja2luZycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRjN1wiLCBcIk0yNTYgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhINTkyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgzODEuM2MxLjgtNSAyLjctMTAuNCAyLjctMTZWMjUzLjNjMTguNi02LjYgMzItMjQuNCAzMi00NS4zVjE3NmMwLTI2LjUtMjEuNS00OC00OC00OEgyNTZWNDh6TTU3MS4zIDM0Ny4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC02NC02NGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTY0IDY0Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBMNDgwIDMxMC42VjQzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjMxMC42bDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHpNMCAxNzZjMC04LjggNy4yLTE2IDE2LTE2SDM2OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE2Yy04LjggMC0xNi03LjItMTYtMTZWMTc2em0zNTIgODBWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNTZIMzUyek0xNDQgMzIwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE0NHpcIl1cbn07XG52YXIgZmFDaXJjbGVBcnJvd0xlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWFycm93LWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93LWNpcmNsZS1sZWZ0XCJdLCBcImYwYThcIiwgXCJNNTEyIDI1NkEyNTYgMjU2IDAgMSAwIDAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDB6TTIzMSAxMjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC03MSA3MUwzNzYgMjMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xODIuMSAwIDcxIDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTE5IDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMjMxIDEyN3pcIl1cbn07XG52YXIgZmFBcnJvd0NpcmNsZUxlZnQgPSBmYUNpcmNsZUFycm93TGVmdDtcbnZhciBmYUdyb3VwQXJyb3dzUm90YXRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyb3VwLWFycm93cy1yb3RhdGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0ZjZcIiwgXCJNMjAxLjEgNzEuOWMxNi45LTUgMjYuNi0yMi45IDIxLjUtMzkuOHMtMjIuOS0yNi42LTM5LjgtMjEuNWMtMjEuNSA2LjQtNDEuOCAxNS41LTYwLjYgMjdDMTE0LjMgMzQgMTA1LjQgMzIgOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2YzAgOS40IDIgMTguMyA1LjYgMjYuM2MtMTEuNSAxOC43LTIwLjYgMzktMjcgNjAuNmMtNSAxNi45IDQuNiAzNC44IDIxLjUgMzkuOHMzNC44LTQuNiAzOS44LTIxLjVjNC4zLTE0LjYgMTAuNC0yOC41IDE3LjktNDEuNGMyIC4yIDQuMSAuMyA2LjEgLjNjMzUuMyAwIDY0LTI4LjcgNjQtNjRjMC0yLjEtLjEtNC4xLS4zLTYuMWMxMi45LTcuNSAyNi44LTEzLjYgNDEuNC0xNy45em0xMjgtNjEuM2MtMTYuOS01LTM0LjggNC42LTM5LjggMjEuNXM0LjYgMzQuOCAyMS41IDM5LjhjMTQuNiA0LjMgMjguNSAxMC40IDQxLjQgMTcuOWMtLjIgMi0uMyA0LjEtLjMgNi4xYzAgMzUuMyAyOC43IDY0IDY0IDY0YzIuMSAwIDQuMS0uMSA2LjItLjNjNy41IDEyLjkgMTMuNiAyNi44IDE3LjkgNDEuNGM1IDE2LjkgMjIuOSAyNi42IDM5LjggMjEuNXMyNi42LTIyLjkgMjEuNS0zOS44Yy02LjQtMjEuNS0xNS41LTQxLjgtMjctNjAuNmMzLjYtOCA1LjYtMTYuOSA1LjYtMjYuM2MwLTM1LjMtMjguNy02NC02NC02NGMtOS40IDAtMTguMyAyLTI2LjMgNS42Yy0xOC43LTExLjUtMzktMjAuNi02MC42LTI3ek03MS45IDMxMC45Yy01LTE2LjktMjIuOS0yNi42LTM5LjgtMjEuNXMtMjYuNiAyMi45LTIxLjUgMzkuOGM2LjQgMjEuNSAxNS41IDQxLjggMjcgNjAuNkMzNCAzOTcuNyAzMiA0MDYuNiAzMiA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRjOS40IDAgMTguMy0yIDI2LjMtNS42YzE4LjcgMTEuNSAzOSAyMC42IDYwLjYgMjdjMTYuOSA1IDM0LjgtNC42IDM5LjgtMjEuNXMtNC42LTM0LjgtMjEuNS0zOS44Yy0xNC42LTQuMy0yOC41LTEwLjQtNDEuNC0xNy45Yy4yLTIgLjMtNC4xIC4zLTYuMmMwLTM1LjMtMjguNy02NC02NC02NGMtMi4xIDAtNC4xIC4xLTYuMiAuM2MtNy41LTEyLjktMTMuNi0yNi44LTE3LjktNDEuNHptNDI5LjQgMTguM2M1LTE2LjktNC42LTM0LjgtMjEuNS0zOS44cy0zNC44IDQuNi0zOS44IDIxLjVjLTQuMyAxNC42LTEwLjQgMjguNS0xNy45IDQxLjRjLTItLjItNC4xLS4zLTYuMi0uM2MtMzUuMyAwLTY0IDI4LjctNjQgNjRjMCAyLjEgLjEgNC4xIC4zIDYuMmMtMTIuOSA3LjUtMjYuOCAxMy42LTQxLjQgMTcuOWMtMTYuOSA1LTI2LjYgMjIuOS0yMS41IDM5LjhzMjIuOSAyNi42IDM5LjggMjEuNWMyMS41LTYuNCA0MS44LTE1LjUgNjAuNi0yN2M4IDMuNiAxNi45IDUuNiAyNi4zIDUuNmMzNS4zIDAgNjQtMjguNyA2NC02NGMwLTkuNC0yLTE4LjMtNS42LTI2LjNjMTEuNS0xOC43IDIwLjYtMzkgMjctNjAuNnpNMTkyLjggMjU2LjhjMC0xNS42IDUuNi0yOS45IDE0LjktNDEuMUwyMjMgMjMxYzYuNiA2LjYgMTcuOCAxLjkgMTcuOC03LjRWMTYzLjJjMC01LjctNC43LTEwLjQtMTAuNC0xMC40SDE2OS45Yy05LjMgMC0xMy45IDExLjItNy40IDE3LjhsMTEuMiAxMS4yYy0xNy45IDE5LjgtMjguOSA0Ni4yLTI4LjkgNzUuMWMwIDQzLjYgMjQuOSA4MS4zIDYxLjEgOTkuOGMxMS44IDYgMjYuMyAxLjQgMzIuMy0xMC40czEuNC0yNi4zLTEwLjQtMzIuM2MtMjAuOC0xMC42LTM0LjktMzIuMi0zNC45LTU3em05My4xLTU4LjZjMjAuOCAxMC42IDM0LjkgMzIuMiAzNC45IDU3YzAgMTUuNi01LjYgMjkuOS0xNC45IDQxLjFMMjkwLjYgMjgxYy02LjYtNi42LTE3LjgtMS45LTE3LjggNy40djYwLjVjMCA1LjcgNC43IDEwLjQgMTAuNCAxMC40aDYwLjVjOS4zIDAgMTMuOS0xMS4yIDcuNC0xNy44bC0xMS4yLTExLjJjMTcuOS0xOS44IDI4LjktNDYuMiAyOC45LTc1LjFjMC00My42LTI0LjktODEuMy02MS4xLTk5LjhjLTExLjgtNi0yNi4zLTEuNC0zMi4zIDEwLjRzLTEuNCAyNi4zIDEwLjQgMzIuM3pcIl1cbn07XG52YXIgZmFCb3dsRm9vZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3dsLWZvb2QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0YzZcIiwgXCJNMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRjLjUgMCAxLjEgMCAxLjYgMEM3MyA5MS41IDEwNS4zIDY0IDE0NCA2NGMxNSAwIDI5IDQuMSA0MC45IDExLjJDMTk4LjIgNDkuNiAyMjUuMSAzMiAyNTYgMzJzNTcuOCAxNy42IDcxLjEgNDMuMkMzMzkgNjguMSAzNTMgNjQgMzY4IDY0YzM4LjcgMCA3MSAyNy41IDc4LjQgNjRjLjUgMCAxLjEgMCAxLjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGMwIDExLjctMy4xIDIyLjYtOC42IDMySDguNkMzLjEgMjE0LjYgMCAyMDMuNyAwIDE5MnptMCA5MS40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZINDg0LjZjMTUuMSAwIDI3LjQgMTIuMyAyNy40IDI3LjRjMCA3MC41LTQ0LjQgMTMwLjctMTA2LjcgMTU0LjFMNDAzLjUgNDUyYy0yIDE2LTE1LjYgMjgtMzEuOCAyOEgxNDAuMmMtMTYuMSAwLTI5LjgtMTItMzEuOC0yOGwtMS44LTE0LjRDNDQuNCA0MTQuMSAwIDM1My45IDAgMjgzLjR6XCJdXG59O1xudmFyIGZhQ2FuZHlDYW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbmR5LWNhbmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ODZcIiwgXCJNMzQ4LjggMTMxLjVjMy43LTIuMyA3LjktMy41IDEyLjItMy41YzEyLjcgMCAyMyAxMC4zIDIzIDIzdjUuNmMwIDkuOS01LjEgMTkuMS0xMy41IDI0LjNMMzAuMSAzOTMuN0MuMSA0MTIuNS05IDQ1MS45IDkuNyA0ODEuOXM1OC4yIDM5LjEgODguMiAyMC40TDQzOC40IDI4OS41YzQ1LjgtMjguNiA3My42LTc4LjggNzMuNi0xMzIuOFYxNTFDNTEyIDY3LjYgNDQ0LjQgMCAzNjEgMGMtMjguMyAwLTU2IDgtODAuMSAyM0wyNTQuMSAzOS43Yy0zMCAxOC43LTM5LjEgNTguMi0yMC40IDg4LjJzNTguMiAzOS4xIDg4LjIgMjAuNGwyNi44LTE2Ljh6TTI5OC40IDQ5LjhjOS4yLTUuNyAxOS4xLTEwLjEgMjkuNC0xMy4xTDM0OCA5Ny41Yy01LjcgMS40LTExLjIgMy43LTE2LjMgNi44bC0xMi42IDcuOUwyOTguNCA0OS44em04OC41IDUyLjdsNDYuMi00Ni4yYzguNSA2LjUgMTYuMSAxNC4xIDIyLjYgMjIuNmwtNDYuMiA0Ni4yYy01LjEtOS42LTEzLTE3LjUtMjIuNi0yMi42em0yOC45IDU5LjNsNjEuNiAyMC41Yy0yLjIgMTAuNS01LjggMjAuNy0xMC41IDMwLjJsLTYyLTIwLjdjNi4yLTguOCAxMC4xLTE5LjEgMTEtMzAuMXptLTg2LjEgODIuNWw2MC40IDM3LjctMzAuMiAxOC45LTYwLjQtMzcuNyAzMC4yLTE4Ljl6bS0xMDcuMiA2N2w2MC40IDM3LjctMzAuMiAxOC45LTYwLjQtMzcuNyAzMC4yLTE4Ljl6TTExOS4zIDM3NS43bDYwLjQgMzcuNy0zMC4yIDE4LjlMODkuMSAzOTQuNmwzMC4yLTE4Ljl6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duV2lkZVNob3J0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24td2lkZS1zaG9ydCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbW91bnQtYXNjXCIsIFwic29ydC1hbW91bnQtZG93blwiXSwgXCJmMTYwXCIsIFwiTTE1MS42IDQ2OS42QzE0NS41IDQ3Ni4yIDEzNyA0ODAgMTI4IDQ4MHMtMTcuNS0zLjgtMjMuNi0xMC40bC04OC05NmMtMTEuOS0xMy0xMS4xLTMzLjMgMi00NS4yczMzLjMtMTEuMSA0NS4yIDJMOTYgMzY1LjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzNjUuN2wzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwelwiXVxufTtcbnZhciBmYVNvcnRBbW91bnRBc2MgPSBmYUFycm93RG93bldpZGVTaG9ydDtcbnZhciBmYVNvcnRBbW91bnREb3duID0gZmFBcnJvd0Rvd25XaWRlU2hvcnQ7XG52YXIgZmFDbG91ZEJvbHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtYm9sdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc4NSwgXCJ0aHVuZGVyc3Rvcm1cIl0sIFwiZjc2Y1wiLCBcIk0wIDIyNGMwIDUzIDQzIDk2IDk2IDk2aDQ3LjJMMjkwIDIwMi41YzE3LjYtMTQuMSA0Mi42LTE0IDYwLjIgLjJzMjIuOCAzOC42IDEyLjggNTguOEwzMzMuNyAzMjBIMzUyaDY0YzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwYzEuMS01LjIgMS42LTEwLjUgMS42LTE2YzAtNDQuMi0zNS44LTgwLTgwLTgwYy0yNC4zIDAtNDYuMSAxMC45LTYwLjggMjhDMjU2LjUgMjQuMyAyMTkuMSAwIDE3NiAwQzExNC4xIDAgNjQgNTAuMSA2NCAxMTJjMCA3LjEgLjcgMTQuMSAxLjkgMjAuOEMyNy42IDE0NS40IDAgMTgxLjUgMCAyMjR6bTMzMC4xIDMuNmMtNS44LTQuNy0xNC4yLTQuNy0yMC4xLS4xbC0xNjAgMTI4Yy01LjMgNC4yLTcuNCAxMS40LTUuMSAxNy44czguMyAxMC43IDE1LjEgMTAuN2g3MC4xTDE3Ny43IDQ4OC44Yy0zLjQgNi43LTEuNiAxNC45IDQuMyAxOS42czE0LjIgNC43IDIwLjEgLjFsMTYwLTEyOGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44cy04LjMtMTAuNy0xNS4xLTEwLjdIMjgxLjlsNTIuNC0xMDQuOGMzLjQtNi43IDEuNi0xNC45LTQuMi0xOS42elwiXVxufTtcbnZhciBmYVRodW5kZXJzdG9ybSA9IGZhQ2xvdWRCb2x0O1xudmFyIGZhVGV4dFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RleHQtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInJlbW92ZS1mb3JtYXRcIl0sIFwiZjg3ZFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM1NS43IDI1My41IDQwMC4yIDk2SDUwM0w0OTcgMTIwLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTEtNDQuMUM1NzcuNiA2MS4zIDU1NC43IDMyIDUyMy41IDMySDM3Ni4xaC0uM0gyMDQuNWMtMjIgMC00MS4yIDE1LTQ2LjYgMzYuNGwtNi4zIDI1LjJMMzguOCA1LjF6bTE2OCAxMzEuN2MuMS0uMyAuMi0uNyAuMy0xTDIxNyA5NkgzMzMuN0wzMDEuMyAyMTAuOGwtOTQuNS03NC4xek0zMjcuMyAzNTMuOUwyNzIuOSAzMTEgMjQzLjMgNDE2SDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzA5LjhsMTcuNi02Mi4xelwiXVxufTtcbnZhciBmYVJlbW92ZUZvcm1hdCA9IGZhVGV4dFNsYXNoO1xudmFyIGZhRmFjZVNtaWxlV2luayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLXNtaWxlLXdpbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjEsIFwic21pbGUtd2lua1wiXSwgXCJmNGRhXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjQuMSAzMjUuNUMxODIgMzQ2LjIgMjEyLjYgMzY4IDI1NiAzNjhzNzQtMjEuOCA5MS45LTQyLjVjNS44LTYuNyAxNS45LTcuNCAyMi42LTEuNnM3LjQgMTUuOSAxLjYgMjIuNkMzNDkuOCAzNzIuMSAzMTEuMSA0MDAgMjU2IDQwMHMtOTMuOC0yNy45LTExNi4xLTUzLjVjLTUuOC02LjctNS4xLTE2LjggMS42LTIyLjZzMTYuOC01LjEgMjIuNiAxLjZ6TTE0NC40IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNTYuNCAyNS42Yy01LjMgNy4xLTE1LjMgOC41LTIyLjQgMy4ycy04LjUtMTUuMy0zLjItMjIuNGMzMC40LTQwLjUgOTEuMi00MC41IDEyMS42IDBjNS4zIDcuMSAzLjkgMTcuMS0zLjIgMjIuNHMtMTcuMSAzLjktMjIuNC0zLjJjLTE3LjYtMjMuNS01Mi44LTIzLjUtNzAuNCAwelwiXVxufTtcbnZhciBmYVNtaWxlV2luayA9IGZhRmFjZVNtaWxlV2luaztcbnZhciBmYUZpbGVXb3JkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtd29yZCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjFjMlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTExMSAyNTcuMWwyNi44IDg5LjIgMzEuNi05MC4zYzMuNC05LjYgMTIuNS0xNi4xIDIyLjctMTYuMXMxOS4zIDYuNCAyMi43IDE2LjFsMzEuNiA5MC4zTDI3MyAyNTcuMWMzLjgtMTIuNyAxNy4yLTE5LjkgMjkuOS0xNi4xczE5LjkgMTcuMiAxNi4xIDI5LjlsLTQ4IDE2MGMtMyAxMC0xMiAxNi45LTIyLjQgMTcuMXMtMTkuOC02LjItMjMuMi0xNi4xTDE5MiAzMzYuNmwtMzMuMyA5NS4zYy0zLjQgOS44LTEyLjggMTYuMy0yMy4yIDE2LjFzLTE5LjUtNy4xLTIyLjQtMTcuMWwtNDgtMTYwYy0zLjgtMTIuNyAzLjQtMjYuMSAxNi4xLTI5LjlzMjYuMSAzLjQgMjkuOSAxNi4xelwiXVxufTtcbnZhciBmYUZpbGVQb3dlcnBvaW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtcG93ZXJwb2ludCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjFjNFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTEzNiAyNDBoNjhjNDIgMCA3NiAzNCA3NiA3NnMtMzQgNzYtNzYgNzZIMTYwdjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM2OCAyNjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTY4IDEwNGMxNS41IDAgMjgtMTIuNSAyOC0yOHMtMTIuNS0yOC0yOC0yOEgxNjB2NTZoNDR6XCJdXG59O1xudmFyIGZhQXJyb3dzTGVmdFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy1sZWZ0LXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvd3MtaFwiXSwgXCJmMDdlXCIsIFwiTTQwNi42IDM3NC42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDAyLjcgMjI0bC0yOTMuNSAwIDQxLjQtNDEuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4bDI5My41IDAtNDEuNCA0MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwelwiXVxufTtcbnZhciBmYUFycm93c0ggPSBmYUFycm93c0xlZnRSaWdodDtcbnZhciBmYUhvdXNlTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTEwXCIsIFwiTTM4NCA0ODBjMCAxMS43IDMuMSAyMi42IDguNiAzMkgzOTJjLTIyLjEgMC00MC0xNy45LTQwLTQwVjQ0OCAzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NCAyNGMwIDIyLjEtMTcuOSA0MC00MCA0MEgxNjAgMTI4LjFjLTEuNSAwLTMtLjEtNC41LS4yYy0xLjIgLjEtMi40IC4yLTMuNiAuMkgxMDRjLTIyLjEgMC00MC0xNy45LTQwLTQwVjM2MGMwLS45IDAtMS45IC4xLTIuOFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNDkwLjcgMTY2LjNDNDQ3LjIgMTgxLjcgNDE2IDIyMy4yIDQxNiAyNzJ2MjQuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNFY0ODB6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl1cbn07XG52YXIgZmFDbG91ZEFycm93RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbNjIzMzcsIFwiY2xvdWQtZG93bmxvYWRcIiwgXCJjbG91ZC1kb3dubG9hZC1hbHRcIl0sIFwiZjBlZFwiLCBcIk0xNDQgNDgwQzY0LjUgNDgwIDAgNDE1LjUgMCAzMzZjMC02Mi44IDQwLjItMTE2LjIgOTYuMi0xMzUuOWMtLjEtMi43LS4yLTUuNC0uMi04LjFjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBjNTkuMyAwIDExMSAzMi4yIDEzOC43IDgwLjJDNDA5LjkgMTAyIDQyOC4zIDk2IDQ0OCA5NmM1MyAwIDk2IDQzIDk2IDk2YzAgMTIuMi0yLjMgMjMuOC02LjQgMzQuNkM1OTYgMjM4LjQgNjQwIDI5MC4xIDY0MCAzNTJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhIMTQ0em03OS0xNjdsODAgODBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzkgMzlWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjMxOC4xbC0zOS0zOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOXpcIl1cbn07XG52YXIgZmFDbG91ZERvd25sb2FkID0gZmFDbG91ZEFycm93RG93bjtcbnZhciBmYUNsb3VkRG93bmxvYWRBbHQgPSBmYUNsb3VkQXJyb3dEb3duO1xudmFyIGZhQ2hpbGRyZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hpbGRyZW4nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZTFcIiwgXCJNMTYwIDBhNjQgNjQgMCAxIDEgMCAxMjhBNjQgNjQgMCAxIDEgMTYwIDB6TTg4IDQ4MFY0MDBINzAuMmMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsMzEuMS05My40TDU3LjUgMzIzLjNjLTEwLjcgMTQuMS0zMC44IDE2LjgtNDQuOCA2LjJzLTE2LjgtMzAuNy02LjItNDQuOEw2NS40IDIwN2MyMi40LTI5LjYgNTcuNS00NyA5NC42LTQ3czcyLjIgMTcuNCA5NC42IDQ3bDU4LjkgNzcuN2MxMC43IDE0LjEgNy45IDM0LjItNi4yIDQ0LjhzLTM0LjIgNy45LTQ0LjgtNi4ybC0yOC42LTM3LjhMMjY1IDM3OC45YzMuNSAxMC40LTQuMyAyMS4xLTE1LjIgMjEuMUgyMzJ2ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDAwSDE1MnY4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpNNDgwIDBhNjQgNjQgMCAxIDEgMCAxMjhBNjQgNjQgMCAxIDEgNDgwIDB6bS04IDM4NHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMDAuNUwzOTUuMSAzMjFjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMHMtMTkuNC0yOS4yLTEwLTQ0LjFsNTEuNy04Mi4xYzE3LjYtMjcuOSA0OC4zLTQ0LjkgODEuMi00NC45aDEyLjNjMzMgMCA2My43IDE2LjkgODEuMiA0NC45TDYxOS4xIDI4N2M5LjQgMTUgNC45IDM0LjctMTAgNDQuMXMtMzQuNyA0LjktNDQuMS0xMEw1NTIgMzAwLjVWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEg0NzJ6XCJdXG59O1xudmFyIGZhQ2hhbGtib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFsa2JvYXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJibGFja2JvYXJkXCJdLCBcImY1MWJcIiwgXCJNOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2VjM4NEg5NlY5NmwzODQgMFYzODRoNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIOTZ6TTIyNCAzODR2MzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQxNlYzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpcIl1cbn07XG52YXIgZmFCbGFja2JvYXJkID0gZmFDaGFsa2JvYXJkO1xudmFyIGZhVXNlckxhcmdlU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1sYXJnZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1widXNlci1hbHQtc2xhc2hcIl0sIFwiZjRmYVwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM4MS45IDI3NGM0OC41LTIzLjIgODIuMS03Mi43IDgyLjEtMTMwQzQ2NCA2NC41IDM5OS41IDAgMzIwIDBDMjUwLjQgMCAxOTIuNCA0OS4zIDE3OC45IDExNC45TDM4LjggNS4xek01NDUuNSA1MTJINTI4TDI4NC4zIDMyMGgtNTlDMTM2LjIgMzIwIDY0IDM5Mi4yIDY0IDQ4MS4zYzAgMTcgMTMuOCAzMC43IDMwLjcgMzAuN0g1NDUuM2wuMyAwelwiXVxufTtcbnZhciBmYVVzZXJBbHRTbGFzaCA9IGZhVXNlckxhcmdlU2xhc2g7XG52YXIgZmFFbnZlbG9wZU9wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZW52ZWxvcGUtb3BlbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMTM1XSwgXCJmMmI2XCIsIFwiTTY0IDIwOC4xTDI1NiA2NS45IDQ0OCAyMDguMXY0Ny40TDI4OS41IDM3M2MtOS43IDcuMi0yMS40IDExLTMzLjUgMTFzLTIzLjgtMy45LTMzLjUtMTFMNjQgMjU1LjVWMjA4LjF6TTI1NiAwYy0xMi4xIDAtMjMuOCAzLjktMzMuNSAxMUwyNS45IDE1Ni43QzkuNiAxNjguOCAwIDE4Ny44IDAgMjA4LjFWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYyMDguMWMwLTIwLjMtOS42LTM5LjQtMjUuOS01MS40TDI4OS41IDExQzI3OS44IDMuOSAyNjguMSAwIDI1NiAwelwiXVxufTtcbnZhciBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzaGFrZS1zaW1wbGUtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImhhbmRzaGFrZS1hbHQtc2xhc2hcIl0sIFwiZTA1ZlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMzUtMTA1LjhjLTEuMS0xMS4zLTYuMy0yMi4zLTE1LjMtMzAuN2wtMTM0LjItMTIzLTIzLjQgMTguMi0yNi0yMC4zIDc3LjItNjAuMWM3LTUuNCAxNy00LjIgMjIuNSAyLjhzNC4yIDE3LTIuOCAyMi41bC0yMC45IDE2LjJMNTUwLjIgMzUySDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhINTE2aC00LS43bC0zLjktMi41TDQzNC44IDc5Yy0xNS4zLTkuOC0zMy4yLTE1LTUxLjQtMTVjLTIxLjggMC00MyA3LjUtNjAgMjEuMmwtODkuNyA3Mi42LTI1LjgtMjAuMyA4MS44LTY2LjJjLTExLjYtNC45LTI0LjEtNy40LTM2LjgtNy40QzIzNCA2NCAyMTUuNyA2OS42IDIwMCA4MGwtMzUuNSAyMy43TDM4LjggNS4xek00MTMuNiA0MjEuOUw0MS4yIDEyOC41QzE3LjkgMTMxLjggMCAxNTEuOCAwIDE3NlYzMDRjMCAyNi41IDIxLjUgNDggNDggNDhIMTU2LjJsOTEuNCA4My40YzE5LjYgMTcuOSA0OS45IDE2LjUgNjcuOC0zLjFjNS41LTYuMSA5LjItMTMuMiAxMS4xLTIwLjZsMTcgMTUuNmMxOS41IDE3LjkgNDkuOSAxNi42IDY3LjgtMi45Yy44LS44IDEuNS0xLjcgMi4yLTIuNnpcIl1cbn07XG52YXIgZmFIYW5kc2hha2VBbHRTbGFzaCA9IGZhSGFuZHNoYWtlU2ltcGxlU2xhc2g7XG52YXIgZmFNYXR0cmVzc1BpbGxvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXR0cmVzcy1waWxsb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjVcIiwgXCJNMjU2IDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEgyNTZWNjR6bTMyIDM4NEg1NzZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDI4OFY0NDh6TTY0IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjE2MHpcIl1cbn07XG52YXIgZmFHdWFyYW5pU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdndWFyYW5pLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxOWFcIiwgXCJNMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjY2LjdDNjkuMiA4MS45IDAgMTYwLjkgMCAyNTZzNjkuMiAxNzQuMSAxNjAgMTg5LjNWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ1LjNjOTAuOC0xNS4yIDE2MC05NC4yIDE2MC0xODkuM2MwLTE3LjctMTQuMy0zMi0zMi0zMkgyMjRWMTMyYzIyLjEgNS43IDQxLjggMTcuMSA1Ny42IDMyLjZjMTIuNiAxMi40IDMyLjkgMTIuMiA0NS4zLS40czEyLjItMzIuOS0uNS00NS4zQzI5OSA5MiAyNjMuNSA3My4zIDIyNCA2Ni43VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xNjAgMTMyVjM4MGMtNTUuMi0xNC4yLTk2LTY0LjMtOTYtMTI0czQwLjgtMTA5LjggOTYtMTI0ek0yMjQgMzgwVjI4OGg5MmMtMTEuNiA0NS00NyA4MC40LTkyIDkyelwiXVxufTtcbnZhciBmYUFycm93c1JvdGF0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3Mtcm90YXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcyLCBcInJlZnJlc2hcIiwgXCJzeW5jXCJdLCBcImYwMjFcIiwgXCJNMTA1LjEgMjAyLjZjNy43LTIxLjggMjAuMi00Mi4zIDM3LjgtNTkuOGM2Mi41LTYyLjUgMTYzLjgtNjIuNSAyMjYuMyAwTDM4Ni4zIDE2MEgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDYzLjVjMCAwIDAgMCAwIDBoLjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWODBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2MzUuMkw0MTQuNCA5Ny42Yy04Ny41LTg3LjUtMjI5LjMtODcuNS0zMTYuOCAwQzczLjIgMTIyIDU1LjYgMTUwLjcgNDQuOCAxODEuNGMtNS45IDE2LjcgMi45IDM0LjkgMTkuNSA0MC44czM0LjktMi45IDQwLjgtMTkuNXpNMzkgMjg5LjNjLTUgMS41LTkuOCA0LjItMTMuNyA4LjJjLTQgNC02LjcgOC44LTguMSAxNGMtLjMgMS4yLS42IDIuNS0uOCAzLjhjLS4zIDEuNy0uNCAzLjQtLjQgNS4xVjQzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM5Ni45bDE3LjYgMTcuNSAwIDBjODcuNSA4Ny40IDIyOS4zIDg3LjQgMzE2LjcgMGMyNC40LTI0LjQgNDIuMS01My4xIDUyLjktODMuN2M1LjktMTYuNy0yLjktMzQuOS0xOS41LTQwLjhzLTM0LjkgMi45LTQwLjggMTkuNWMtNy43IDIxLjgtMjAuMiA0Mi4zLTM3LjggNTkuOGMtNjIuNSA2Mi41LTE2My44IDYyLjUtMjI2LjMgMGwtLjEtLjFMMTI1LjYgMzUySDE2MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0OC40Yy0xLjYgMC0zLjIgLjEtNC44IC4zcy0zLjEgLjUtNC42IDF6XCJdXG59O1xudmFyIGZhUmVmcmVzaCA9IGZhQXJyb3dzUm90YXRlO1xudmFyIGZhU3luYyA9IGZhQXJyb3dzUm90YXRlO1xudmFyIGZhRmlyZUV4dGluZ3Vpc2hlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaXJlLWV4dGluZ3Vpc2hlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTUxOV0sIFwiZjEzNFwiLCBcIk01MDAuMyA3LjNDNTA3LjcgMTMuMyA1MTIgMjIuNCA1MTIgMzJ2OTZjMCA5LjYtNC4zIDE4LjctMTEuNyAyNC43cy0xNy4yIDguNS0yNi42IDYuNmwtMTYwLTMyQzMwMS41IDEyNC45IDI5MiAxMTUuNyAyODkgMTA0SDIyNHYzNC44YzM3LjggMTggNjQgNTYuNSA2NCAxMDEuMlYzODRINjRWMjQwYzAtNDQuNyAyNi4yLTgzLjIgNjQtMTAxLjJWMTEwYy0zNi4yIDExLjEtNjYgMzYuOS04Mi4zIDcwLjVjLTUuOCAxMS45LTIwLjIgMTYuOS0zMi4xIDExLjFTLTMuMyAxNzEuNCAyLjUgMTU5LjVDMjYuNyAxMDkuOCA3Mi43IDcyLjYgMTI4IDYwLjRWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNTZoNjVjMy0xMS43IDEyLjUtMjAuOSAyNC43LTIzLjRsMTYwLTMyYzkuNC0xLjkgMTkuMSAuNiAyNi42IDYuNnpNMjg4IDQxNnYzMmMwIDM1LjMtMjguNyA2NC02NCA2NEgxMjhjLTM1LjMgMC02NC0yOC43LTY0LTY0VjQxNkgyODh6TTE3NiA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xudmFyIGZhQ3J1emVpcm9TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NydXplaXJvLXNpZ24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUxNTJcIiwgXCJNOTYgMjU2YzAtODguNCA3MS42LTE2MCAxNjAtMTYwYzQxIDAgNzguMyAxNS40IDEwNi43IDQwLjdjMTMuMiAxMS44IDMzLjQgMTAuNyA0NS4yLTIuNXMxMC43LTMzLjQtMi41LTQ1LjJjLTM5LjYtMzUuNS05Mi01Ny0xNDkuMy01N0MxMzIuMyAzMiAzMiAxMzIuMyAzMiAyNTZzMTAwLjMgMjI0IDIyNCAyMjRjNTcuNCAwIDEwOS43LTIxLjYgMTQ5LjMtNTdjMTMuMi0xMS44IDE0LjMtMzIgMi41LTQ1LjJzLTMyLTE0LjMtNDUuMi0yLjVDMzM0LjMgNDAwLjYgMjk3IDQxNiAyNTYgNDE2VjMyMHYtOC43YzAtMTIuOCAxMC40LTIzLjMgMjMuMy0yMy4zYzQuNiAwIDkuMSAxLjQgMTIuOSAzLjlsMTAuMSA2LjdjMTQuNyA5LjggMzQuNiA1LjggNDQuNC04LjlzNS44LTM0LjYtOC45LTQ0LjRsLTEwLjEtNi43Yy0xNC4zLTkuNi0zMS4yLTE0LjctNDguNC0xNC43Yy0xMi40IDAtMjQuMiAyLjYtMzQuOSA3LjNjLTUuNS00LjUtMTIuNi03LjMtMjAuMy03LjNjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjU1LjNWMzIwdjgyLjdDMTM1LjUgMzc4IDk2IDMyMS42IDk2IDI1NnpcIl1cbn07XG52YXIgZmFHcmVhdGVyVGhhbkVxdWFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyZWF0ZXItdGhhbi1lcXVhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUzMlwiLCBcIk01Mi4xIDkzLjdDMzUuNyA4Ny4xIDI3LjcgNjguNSAzNC4zIDUyLjFzMjUuMi0yNC40IDQxLjYtMTcuOGwzMjAgMTI4QzQwOCAxNjcuMSA0MTYgMTc4LjkgNDE2IDE5MnMtOCAyNC45LTIwLjEgMjkuN2wtMzIwIDEyOGMtMTYuNCA2LjYtMzUtMS40LTQxLjYtMTcuOHMxLjQtMzUgMTcuOC00MS42TDI5Ny44IDE5MiA1Mi4xIDkzLjd6TTQxNiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDE2elwiXVxufTtcbnZhciBmYVNoaWVsZEhhbHZlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGllbGQtaGFsdmVkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzaGllbGQtYWx0XCJdLCBcImYzZWRcIiwgXCJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjcgODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjJjLS41IDk5LjItNDEuMyAyODAuNy0yMTMuNiAzNjMuMmMtMTYuNyA4LTM2LjEgOC01Mi44IDBDNTcuMyA0MjAuNyAxNi41IDIzOS4yIDE2IDE0MGMtLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOCAxIDI1MS40IDAgMjU2IDB6bTAgNjYuOFY0NDQuOEMzOTQgMzc4IDQzMS4xIDIzMC4xIDQzMiAxNDEuNEwyNTYgNjYuOGwwIDB6XCJdXG59O1xudmFyIGZhU2hpZWxkQWx0ID0gZmFTaGllbGRIYWx2ZWQ7XG52YXIgZmFCb29rQXRsYXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1hdGxhcycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiYXRsYXNcIl0sIFwiZjU1OFwiLCBcIk0wIDk2QzAgNDMgNDMgMCA5NiAwSDM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0IDk2Yy01MyAwLTk2LTQzLTk2LTk2Vjk2ek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzUyVjM4NEg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTI0Ny40IDI4My44Yy0zLjcgMy43LTYuMiA0LjItNy40IDQuMnMtMy43LS41LTcuNC00LjJjLTMuOC0zLjctOC0xMC0xMS44LTE4LjljLTYuMi0xNC41LTEwLjgtMzQuMy0xMi4yLTU2LjloNjNjLTEuNSAyMi42LTYgNDIuNC0xMi4yIDU2LjljLTMuOCA4LjktOCAxNS4yLTExLjggMTguOXptNDIuNy05LjljNy4zLTE4LjMgMTItNDEuMSAxMy40LTY1LjloMzEuMWMtNC43IDI3LjktMjEuNCA1MS43LTQ0LjUgNjUuOXptMC0xNjMuOGMyMy4yIDE0LjIgMzkuOSAzOCA0NC41IDY1LjlIMzAzLjVjLTEuNC0yNC43LTYuMS00Ny41LTEzLjQtNjUuOXpNMzY4IDE5MmExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAwek0xNDUuMyAyMDhoMzEuMWMxLjQgMjQuNyA2LjEgNDcuNSAxMy40IDY1LjljLTIzLjItMTQuMi0zOS45LTM4LTQ0LjUtNjUuOXptMzEuMS0zMkgxNDUuM2M0LjctMjcuOSAyMS40LTUxLjcgNDQuNS02NS45Yy03LjMgMTguMy0xMiA0MS4xLTEzLjQgNjUuOXptNTYuMS03NS44YzMuNy0zLjcgNi4yLTQuMiA3LjQtNC4yczMuNyAuNSA3LjQgNC4yYzMuOCAzLjcgOCAxMCAxMS44IDE4LjljNi4yIDE0LjUgMTAuOCAzNC4zIDEyLjIgNTYuOWgtNjNjMS41LTIyLjYgNi00Mi40IDEyLjItNTYuOWMzLjgtOC45IDgtMTUuMiAxMS44LTE4Ljl6XCJdXG59O1xudmFyIGZhQXRsYXMgPSBmYUJvb2tBdGxhcztcbnZhciBmYVZpcnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpcnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMDc0XCIsIFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY0My41YzAgNDkuOS02MC4zIDc0LjktOTUuNiAzOS42TDEyMC4yIDc1QzEwNy43IDYyLjUgODcuNSA2Mi41IDc1IDc1cy0xMi41IDMyLjggMCA0NS4zbDguMiA4LjJDMTE4LjQgMTYzLjcgOTMuNCAyMjQgNDMuNSAyMjRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDMuNWM0OS45IDAgNzQuOSA2MC4zIDM5LjYgOTUuNkw3NSAzOTEuOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw4LjItOC4yYzM1LjMtMzUuMyA5NS42LTEwLjMgOTUuNiAzOS42VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQ2OC41YzAtNDkuOSA2MC4zLTc0LjkgOTUuNi0zOS42bDguMiA4LjJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOC4yLTguMmMtMzUuMy0zNS4zLTEwLjMtOTUuNiAzOS42LTk1LjZINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ2OC41Yy00OS45IDAtNzQuOS02MC4zLTM5LjYtOTUuNmw4LjItOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC04LjIgOC4yQzM0OC4zIDExOC40IDI4OCA5My40IDI4OCA0My41VjMyek0xNzYgMjI0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xudmFyIGZhRW52ZWxvcGVDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbnZlbG9wZS1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZThcIiwgXCJNNDggNjRDMjEuNSA2NCAwIDg1LjUgMCAxMTJjMCAxNS4xIDcuMSAyOS4zIDE5LjIgMzguNEwyMzYuOCAzMTMuNmMxMS40IDguNSAyNyA4LjUgMzguNCAwbDU3LjQtNDNjMjMuOS01OS44IDc5LjctMTAzLjMgMTQ2LjMtMTA5LjhsMTMuOS0xMC40YzEyLjEtOS4xIDE5LjItMjMuMyAxOS4yLTM4LjRjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTI5NC40IDMzOS4yYy0yMi44IDE3LjEtNTQgMTcuMS03Ni44IDBMMCAxNzZWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM2MC4yQzMzNS4xIDQxNy42IDMyMCAzNzguNSAzMjAgMzM2YzAtNS42IC4zLTExLjEgLjgtMTYuNmwtMjYuNCAxOS44ek02NDAgMzM2YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzUzLjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbnZhciBmYUxheWVyR3JvdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGF5ZXItZ3JvdXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1ZmRcIiwgXCJNMjY0LjUgNS4yYzE0LjktNi45IDMyLjEtNi45IDQ3IDBsMjE4LjYgMTAxYzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMNDUuOSAxNDkuOEMzNy40IDE0NS44IDMyIDEzNy4zIDMyIDEyOHM1LjQtMTcuOSAxMy45LTIxLjhMMjY0LjUgNS4yek00NzYuOSAyMDkuNmw1My4yIDI0LjZjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEw0NS45IDI3Ny44QzM3LjQgMjczLjggMzIgMjY1LjMgMzIgMjU2czUuNC0xNy45IDEzLjktMjEuOGw1My4yLTI0LjYgMTUyIDcwLjJjMjMuNCAxMC44IDUwLjQgMTAuOCA3My44IDBsMTUyLTcwLjJ6bS0xNTIgMTk4LjJsMTUyLTcwLjIgNTMuMiAyNC42YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMNDUuOSA0MDUuOEMzNy40IDQwMS44IDMyIDM5My4zIDMyIDM4NHM1LjQtMTcuOSAxMy45LTIxLjhsNTMuMi0yNC42IDE1MiA3MC4yYzIzLjQgMTAuOCA1MC40IDEwLjggNzMuOCAwelwiXVxufTtcbnZhciBmYUFycm93c1RvRG90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10by1kb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0YmVcIiwgXCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRoMzJjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOWwtNjQgNjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC02NC02NGMtOS4yLTkuMi0xMS45LTIyLjktNi45LTM0LjlzMTYuNi0xOS44IDI5LjYtMTkuOGgzMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTY5LjQgMzkzLjRsNjQtNjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNjQgNjRjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlzLTE2LjYgMTkuOC0yOS42IDE5LjhIMjg4djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgxOTJjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45ek0zMiAyMjRINjRWMTkyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNlYyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTI5Ny40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDY0LTY0YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45czE5LjggMTYuNiAxOS44IDI5LjZ2MzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDQ4djMyYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC02NC02NHpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhQXJjaHdheSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcmNod2F5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNTU3XCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDk2aDY0VjM1MmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2VjQ4MGg2NCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYxMjhIMzJWNDE2elwiXVxufTtcbnZhciBmYUhlYXJ0Q2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGZkXCIsIFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek01NzYgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0MTYgMzg1LjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbnZhciBmYUhvdXNlQ2hpbW5leUNyYWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWNoaW1uZXktY3JhY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImhvdXNlLWRhbWFnZVwiXSwgXCJmNmYxXCIsIFwiTTU3NS44IDI1NS41YzAgMTgtMTUgMzIuMS0zMiAzMi4xaC0zMmwuNyAxNjAuMmMuMiAzNS41LTI4LjUgNjQuMy02NCA2NC4zSDMyNi40TDI4OCA0NDhsODAuOC02Ny4zYzcuOC02LjUgNy42LTE4LjYtLjQtMjQuOUwyNTAuNiAyNjMuMmMtMTQuNi0xMS41LTMzLjggNy0yMi44IDIyTDI4OCAzNjhsLTg1LjUgNzEuMmMtNi4xIDUtNy41IDEzLjgtMy41IDIwLjVMMjMwLjQgNTEySDEyOC4xYy0zNS4zIDAtNjQtMjguNy02NC02NFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNDE2IDEwMC43VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjE4NWw1Mi44IDQ2LjRjOCA3IDEyIDE1IDExIDI0elwiXVxufTtcbnZhciBmYUhvdXNlRGFtYWdlID0gZmFIb3VzZUNoaW1uZXlDcmFjaztcbnZhciBmYUZpbGVaaXBwZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS16aXBwZXInLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImZpbGUtYXJjaGl2ZVwiXSwgXCJmMWM2XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNOTYgNDhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2em0wIDY0YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZ6bS02LjMgNzEuOGMzLjctMTQgMTYuNC0yMy44IDMwLjktMjMuOGgxNC44YzE0LjUgMCAyNy4yIDkuNyAzMC45IDIzLjhsMjMuNSA4OC4yYzEuNCA1LjQgMi4xIDEwLjkgMi4xIDE2LjRjMCAzNS4yLTI4LjggNjMuNy02NCA2My43cy02NC0yOC41LTY0LTYzLjdjMC01LjUgLjctMTEuMSAyLjEtMTYuNGwyMy41LTg4LjJ6TTExMiAzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMTEyelwiXVxufTtcbnZhciBmYUZpbGVBcmNoaXZlID0gZmFGaWxlWmlwcGVyO1xudmFyIGZhU3F1YXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzk2MzIsIDk3MjMsIDk3MjQsIDYxNTkwXSwgXCJmMGM4XCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6XCJdXG59O1xudmFyIGZhTWFydGluaUdsYXNzRW1wdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFydGluaS1nbGFzcy1lbXB0eScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZ2xhc3MtbWFydGluaVwiXSwgXCJmMDAwXCIsIFwiTTMyIDBDMTkuMSAwIDcuNCA3LjggMi40IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45TDIyNCAyNjkuM1Y0NDhIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2IDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI4OFYyNjkuM0w1MDIuNiA1NC42YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDAgNDgwIDBIMzJ6TTI1NiAyMTAuN0wxMDkuMyA2NEg0MDIuN0wyNTYgMjEwLjd6XCJdXG59O1xudmFyIGZhR2xhc3NNYXJ0aW5pID0gZmFNYXJ0aW5pR2xhc3NFbXB0eTtcbnZhciBmYUNvdWNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvdWNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNGI4XCIsIFwiTTY0IDE2MEM2NCA4OS4zIDEyMS4zIDMyIDE5MiAzMkg0NDhjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjh2MzMuNmMtMzYuNSA3LjQtNjQgMzkuNy02NCA3OC40djQ4SDEyOFYyNzJjMC0zOC43LTI3LjUtNzEtNjQtNzguNFYxNjB6TTU0NCAyNzJjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zYzUtMS44IDEwLjQtMi43IDE2LTIuN2MyNi41IDAgNDggMjEuNSA0OCA0OFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJINTc2Yy0xNy43IDAtMzItMTQuMy0zMi0zMkg5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4YzUuNiAwIDExIDEgMTYgMi43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM3Y0OCAzMmgzMkg1MTJoMzJWMzIwIDI3MnpcIl1cbn07XG52YXIgZmFDZWRpU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjZWRpLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUwZGZcIiwgXCJNMjU2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjY2LjdDMTAxLjIgODEuOSAzMiAxNjAuOSAzMiAyNTZzNjkuMiAxNzQuMSAxNjAgMTg5LjNWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ1LjNjMzAuOS01LjIgNTkuMi0xNy43IDgzLjItMzUuOGMxNC4xLTEwLjYgMTctMzAuNyA2LjQtNDQuOHMtMzAuNy0xNy00NC44LTYuNGMtMTMuMiA5LjktMjguMyAxNy4zLTQ0LjggMjEuNlYxMzJjMTYuNCA0LjIgMzEuNiAxMS42IDQ0LjggMjEuNmMxNC4xIDEwLjYgMzQuMiA3LjggNDQuOC02LjRzNy44LTM0LjItNi40LTQ0LjhjLTI0LTE4LTUyLjQtMzAuNi04My4yLTM1LjhWMzJ6TTE5MiAxMzJWMzgwYy01NS4yLTE0LjItOTYtNjQuMy05Ni0xMjRzNDAuOC0xMDkuOCA5Ni0xMjR6XCJdXG59O1xudmFyIGZhSXRhbGljID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2l0YWxpYycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjAzM1wiLCBcIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI5My4zTDE2MCA0MTZoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIOTAuN0wyMjQgOTZIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFUYWJsZUNlbGxzQ29sdW1uTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZS1jZWxscy1jb2x1bW4tbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTY3OFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjUuMWMtMzcuOCA1LjQtNjkuNCAyOS42LTg1LjIgNjIuOUwzNjAgMjI0bDAgNjQgNTYgMCAwIDguNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNGwtMjQgMCAwIDY0IDI0IDAgMCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTIwOCAwbDAgNjQgODggMCAwLTY0LTg4IDB6bTI0MCAwbC04OCAwIDAgNjQgODggMCAwLTY0ek0yMDggMjI0bDAgNjQgODggMCAwLTY0LTg4IDB6bTAgMTI4bDAgNjQgODggMCAwLTY0LTg4IDB6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tODAgMzJjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMC00OHpcIl1cbn07XG52YXIgZmFDaHVyY2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2h1cmNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTk2Ml0sIFwiZjUxZFwiLCBcIk0zNDQgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWNDhIMjY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDMydjQ2LjRMMTgzLjMgMjEwYy0xNC41IDguNy0yMy4zIDI0LjMtMjMuMyA0MS4yVjUxMmg5NlY0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHY5Nmg5NlYyNTEuMmMwLTE2LjktOC44LTMyLjUtMjMuMy00MS4yTDM0NCAxNDIuNFY5NmgzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgzNDRWMjR6TTI0LjkgMzMwLjNDOS41IDMzOC44IDAgMzU0LjkgMCAzNzIuNFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoODBWMjczLjZMMjQuOSAzMzAuM3pNNTkyIDUxMmMyNi41IDAgNDgtMjEuNSA0OC00OFYzNzIuNGMwLTE3LjUtOS41LTMzLjYtMjQuOS00Mi4xTDUxMiAyNzMuNlY1MTJoODB6XCJdXG59O1xudmFyIGZhQ29tbWVudHNEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudHMtZG9sbGFyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNjUzXCIsIFwiTTQxNiAxNzZjMCA5Ny4yLTkzLjEgMTc2LTIwOCAxNzZjLTM4LjIgMC03My45LTguNy0xMDQuNy0yMy45Yy03LjUgNC0xNiA3LjktMjUuMiAxMS40QzU5LjggMzQ2LjQgMzcuOCAzNTIgMTYgMzUyYy02LjkgMC0xMy4xLTQuNS0xNS4yLTExLjFzLjItMTMuOCA1LjgtMTcuOWwwIDAgMCAwIC4yLS4yYy4yLS4yIC42LS40IDEuMS0uOGMxLS44IDIuNS0yIDQuMy0zLjdjMy42LTMuMyA4LjUtOC4xIDEzLjMtMTQuM2M1LjUtNyAxMC43LTE1LjQgMTQuMi0yNC43QzE0LjcgMjUwLjMgMCAyMTQuNiAwIDE3NkMwIDc4LjggOTMuMSAwIDIwOCAwUzQxNiA3OC44IDQxNiAxNzZ6TTIzMS41IDM4M0MzNDguOSAzNzIuOSA0NDggMjg4LjMgNDQ4IDE3NmMwLTUuMi0uMi0xMC40LS42LTE1LjVDNTU1LjEgMTY3LjEgNjQwIDI0My4yIDY0MCAzMzZjMCAzOC42LTE0LjcgNzQuMy0zOS42IDEwMy40YzMuNSA5LjQgOC43IDE3LjcgMTQuMiAyNC43YzQuOCA2LjIgOS43IDExIDEzLjMgMTQuM2MxLjggMS42IDMuMyAyLjkgNC4zIDMuN2MuNSAuNCAuOSAuNyAxLjEgLjhsLjIgLjIgMCAwIDAgMGM1LjYgNC4xIDcuOSAxMS4zIDUuOCAxNy45Yy0yLjEgNi42LTguMyAxMS4xLTE1LjIgMTEuMWMtMjEuOCAwLTQzLjgtNS42LTYyLjEtMTIuNWMtOS4yLTMuNS0xNy44LTcuNC0yNS4yLTExLjRDNTA1LjkgNTAzLjMgNDcwLjIgNTEyIDQzMiA1MTJjLTk1LjYgMC0xNzYuMi01NC42LTIwMC41LTEyOXpNMjI4IDcyYzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMFY4NmMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjI4MGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFYyNjYuMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjcyelwiXVxufTtcbnZhciBmYURlbW9jcmF0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RlbW9jcmF0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzQ3XCIsIFwiTTY0IDMyYzAtOC45IDMuOC0yMC45IDYuMi0yNy4zQzcxLjIgMS44IDc0IDAgNzcgMGMxLjkgMCAzLjggLjcgNS4yIDIuMUwxMjggNDUuNyAxNzMuOCAyLjFDMTc1LjIgLjcgMTc3LjEgMCAxNzkgMGMzIDAgNS44IDEuOCA2LjggNC43YzIuNCA2LjUgNi4yIDE4LjQgNi4yIDI3LjNjMCAyNi41LTIxLjkgNDItMjkuNSA0Ni42bDc2LjIgNzIuNmM2IDUuNyAxMy45IDguOCAyMi4xIDguOEg0ODBsMzIgMGM0MC4zIDAgNzguMiAxOSAxMDIuNCA1MS4ybDE5LjIgMjUuNmMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhzLTM0LjIgNy43LTQ0LjgtNi40bC0xOS4yLTI1LjZjLTUuMy03LTExLjgtMTIuOC0xOS4yLTE3VjMyMEgxOTJsLTQwLjQtOTQuM2MtMy45LTkuMi0xNS4zLTEyLjYtMjMuNi03bC00Mi4xIDI4Yy05LjEgNi4xLTE5LjcgOS4zLTMwLjcgOS4zaC0yQzIzLjkgMjU2IDAgMjMyLjEgMCAyMDIuN2MwLTEyLjEgNC4xLTIzLjggMTEuNy0zMy4zTDg3LjYgNzQuNkM3OC4xIDY3LjQgNjQgNTMuMiA2NCAzMnpNNDQ4IDM1Mmg5NnY2NCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQxNkgyODh2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTYgMzUyaDk2SDQ0OHpNMjYwLjkgMjEwLjljLS45LTEuOC0yLjgtMi45LTQuOC0yLjlzLTMuOSAxLjEtNC44IDIuOWwtMTAuNSAyMC41LTIzLjUgMy4zYy0yIC4zLTMuNyAxLjYtNC4zIDMuNXMtLjEgMy45IDEuMyA1LjNsMTcgMTYtNCAyMi42Yy0uMyAxLjkgLjUgMy45IDIuMSA1czMuOCAxLjMgNS42IC40bDIxLTEwLjcgMjEgMTAuN2MxLjggLjkgNCAuOCA1LjYtLjRzMi41LTMuMSAyLjEtNWwtNC0yMi42IDE3LTE2YzEuNS0xLjQgMi0zLjQgMS4zLTUuM3MtMi4zLTMuMi00LjMtMy41bC0yMy41LTMuMy0xMC41LTIwLjV6TTM2OC4xIDIwOGMtMiAwLTMuOSAxLjEtNC44IDIuOWwtMTAuNSAyMC41LTIzLjUgMy4zYy0yIC4zLTMuNyAxLjYtNC4zIDMuNXMtLjEgMy45IDEuMyA1LjNsMTcgMTYtNCAyMi42Yy0uMyAxLjkgLjUgMy45IDIuMSA1czMuOCAxLjMgNS42IC40bDIxLTEwLjcgMjEgMTAuN2MxLjggLjkgNCAuOCA1LjYtLjRzMi41LTMuMSAyLjEtNWwtNC0yMi42IDE3LTE2YzEuNS0xLjQgMi0zLjQgMS40LTUuM3MtMi4zLTMuMi00LjMtMy41bC0yMy41LTMuMy0xMC41LTIwLjVjLS45LTEuOC0yLjgtMi45LTQuOC0yLjl6bTExNi44IDIuOWMtLjktMS44LTIuOC0yLjktNC44LTIuOXMtMy45IDEuMS00LjggMi45bC0xMC41IDIwLjUtMjMuNSAzLjNjLTIgLjMtMy43IDEuNi00LjMgMy41cy0uMSAzLjkgMS4zIDUuM2wxNyAxNi00IDIyLjZjLS4zIDEuOSAuNSAzLjkgMi4xIDVzMy44IDEuMyA1LjYgLjRsMjEtMTAuNyAyMSAxMC43YzEuOCAuOSA0IC44IDUuNi0uNHMyLjUtMy4xIDIuMS01bC00LTIyLjYgMTctMTZjMS41LTEuNCAyLTMuNCAxLjQtNS4zcy0yLjMtMy4yLTQuMy0zLjVsLTIzLjUtMy4zLTEwLjUtMjAuNXpcIl1cbn07XG52YXIgZmFaID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3onLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjJdLCBcIjVhXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIMzUyYzEyLjQgMCAyMy43IDcuMiAyOSAxOC40czMuNiAyNC41LTQuNCAzNC4xTDEwMC4zIDQxNkgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTEyLjQgMC0yMy43LTcuMi0yOS0xOC40cy0zLjYtMjQuNSA0LjQtMzQuMUwyODMuNyA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbnZhciBmYVBlcnNvblNraWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tc2tpaW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTk3NSwgXCJza2lpbmdcIl0sIFwiZjdjOVwiLCBcIk0zODAuNyA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0yLjcgMjY4LjljNi4xLTExLjggMjAuNi0xNi4zIDMyLjQtMTAuMkwyMzIuNyAzNjEuM2w0Ni4yLTY5LjItNzUuMS03NS4xYy0xNC42LTE0LjYtMjAuNC0zMy45LTE4LjQtNTIuMWwxMDguOCA1MiAzOS4zIDM5LjNjMTYuMiAxNi4yIDE4LjcgNDEuNSA2IDYwLjZMMjg5LjggMzkxbDEyOC43IDY2LjhjMTMuNiA3LjEgMjkuOCA3LjIgNDMuNiAuM2wxNS4yLTcuNmMxMS45LTUuOSAyNi4zLTEuMSAzMi4yIDEwLjdzMS4xIDI2LjMtMTAuNyAzMi4ybC0xNS4yIDcuNmMtMjcuNSAxMy43LTU5LjkgMTMuNS04Ny4yLS43TDEyLjkgMzAxLjNDMS4yIDI5NS4yLTMuNCAyODAuNyAyLjcgMjY4Ljl6TTExOC45IDY1LjZMMTM3IDc0LjJsOC43LTE3LjRjNC03LjkgMTMuNi0xMS4xIDIxLjUtNy4yczExLjEgMTMuNiA3LjIgMjEuNWwtOC41IDE2LjkgNTQuNyAyNi4yYzEuNS0uNyAzLjEtMS40IDQuNy0yLjFsODMuNC0zMy40YzM0LjItMTMuNyA3Mi44IDQuMiA4NC41IDM5LjJsMTcuMSA1MS4yIDUyLjEgMjYuMWMxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zbC01OC4xLTI5Yy0xMS40LTUuNy0yMC0xNS43LTI0LjEtMjcuOGwtNS44LTE3LjMtMjcuMyAxMi4xLTYuOCAzLTYuNy0zLjJMMTUxLjUgMTE2LjdsLTkuMiAxOC40Yy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJzLTExLjEtMTMuNi03LjItMjEuNWw5LTE4LTE3LjYtOC40Yy04LTMuOC0xMS4zLTEzLjQtNy41LTIxLjNzMTMuNC0xMS4zIDIxLjMtNy41elwiXVxufTtcbnZhciBmYVNraWluZyA9IGZhUGVyc29uU2tpaW5nO1xudmFyIGZhUm9hZExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTY3XCIsIFwiTTI4OCAzMkgyMTMuMmMtMjcuMSAwLTUxLjMgMTcuMS02MC4zIDQyLjZMMzUuMSA0MDcuMmMtMi4xIDUuOS0zLjEgMTItMy4xIDE4LjJDMzIgNDU1LjUgNTYuNSA0ODAgODYuNiA0ODBIMjg4VjQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0aDMyVjM1MmMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRWMjcyYzAtNTguMyA0NC42LTEwNi4yIDEwMS41LTExMS41TDQ4Ny4xIDc0LjZDNDc4IDQ5LjEgNDUzLjkgMzIgNDI2LjggMzJIMzUyVjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMyem02NCAxOTJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTE3NiAxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEg0OTZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG52YXIgZmFBID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2EnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs5N10sIFwiNDFcIiwgXCJNMjIxLjUgNTEuN0MyMTYuNiAzOS44IDIwNC45IDMyIDE5MiAzMnMtMjQuNiA3LjgtMjkuNSAxOS43bC0xMjAgMjg4LTQwIDk2Yy02LjggMTYuMyAuOSAzNSAxNy4yIDQxLjhzMzUtLjkgNDEuOC0xNy4yTDkzLjMgMzg0SDI5MC43bDMxLjggNzYuM2M2LjggMTYuMyAyNS41IDI0IDQxLjggMTcuMnMyNC0yNS41IDE3LjItNDEuOGwtNDAtOTYtMTIwLTI4OHpNMjY0IDMyMEgxMjBsNzItMTcyLjhMMjY0IDMyMHpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZUFycm93RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJ0ZW1wZXJhdHVyZS1kb3duXCJdLCBcImUwM2ZcIiwgXCJNMTI4IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4VjI3Ni41YzAgMTcuMyA3LjEgMzEuOSAxNS4zIDQyLjVDMjQ5LjggMzMyLjYgMjU2IDM0OS41IDI1NiAzNjhjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0xOC41IDYuMi0zNS40IDE2LjctNDguOWM4LjItMTAuNiAxNS4zLTI1LjIgMTUuMy00Mi41VjExMnpNMTc2IDBDMTE0LjEgMCA2NCA1MC4xIDY0IDExMlYyNzYuNGMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEM0My4yIDMwNC4yIDMyIDMzNC44IDMyIDM2OGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0YzAtMzMuMi0xMS4yLTYzLjgtMzAuMS04OC4xYy0uOS0xLjItMS41LTIuMi0xLjctMi44Yy0uMS0uMy0uMi0uNS0uMi0uNlYxMTJDMjg4IDUwLjEgMjM3LjkgMCAxNzYgMHptMCA0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zVjI3MmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY1MC43Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjNjMCAyNi41IDIxLjUgNDggNDggNDh6bTMzNi02NEg0ODBWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzUySDM4NGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjNiA2IDE0LjEgOS40IDIyLjYgOS40czE2LjYtMy40IDIyLjYtOS40bDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45cy0xNi42LTE5LjgtMjkuNi0xOS44elwiXVxufTtcbnZhciBmYVRlbXBlcmF0dXJlRG93biA9IGZhVGVtcGVyYXR1cmVBcnJvd0Rvd247XG52YXIgZmFGZWF0aGVyUG9pbnRlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmZWF0aGVyLXBvaW50ZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImZlYXRoZXItYWx0XCJdLCBcImY1NmJcIiwgXCJNMjc4LjUgMjE1LjZMMjMgNDcxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzQuOC03NC44YzcuNCA0LjYgMTUuMyA4LjIgMjMuOCAxMC41QzIwMC4zIDQ1Mi44IDI3MCA0NTQuNSAzMzggNDA5LjRjMTIuMi04LjEgNS44LTI1LjQtOC44LTI1LjRsLTE2LjEgMGMtNS4xIDAtOS4yLTQuMS05LjItOS4yYzAtNC4xIDIuNy03LjYgNi41LTguOGw5Ny43LTI5LjNjMy40LTEgNi40LTMuMSA4LjQtNi4xYzQuNC02LjQgOC42LTEyLjkgMTIuNi0xOS42YzYuMi0xMC4zLTEuNS0yMy0xMy41LTIzbC0zOC42IDBjLTUuMSAwLTkuMi00LjEtOS4yLTkuMmMwLTQuMSAyLjctNy42IDYuNS04LjhsODAuOS0yNC4zYzQuNi0xLjQgOC40LTQuOCAxMC4yLTkuM0M0OTQuNSAxNjMgNTA3LjggODYuMSA1MTEuOSAzNi44Yy44LTkuOS0zLTE5LjYtMTAtMjYuNnMtMTYuNy0xMC44LTI2LjYtMTBDMzkxLjUgNyAyMjguNSA0MC41IDEzNy40IDEzMS42QzU3LjMgMjExLjcgNTYuNyAzMDIuMyA3MS4zIDM1Ni40YzIuMSA3LjkgMTIgOS42IDE3LjggMy44TDI1My42IDE5NS44YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwYzUuNCA1LjQgNi4xIDEzLjYgMi4yIDE5Ljh6XCJdXG59O1xudmFyIGZhRmVhdGhlckFsdCA9IGZhRmVhdGhlclBvaW50ZWQ7XG52YXIgZmFQID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3AnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMTJdLCBcIjUwXCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJoOTZjODguNCAwIDE2MCA3MS42IDE2MCAxNjBzLTcxLjYgMTYwLTE2MCAxNjBINjR2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzIwIDk2ek02NCAyODhoOTZjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZINjRWMjg4elwiXVxufTtcbnZhciBmYVNub3dmbGFrZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbm93Zmxha2UnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMDA1MiwgMTAwNTRdLCBcImYyZGNcIiwgXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjIuMWwxNS0xNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ5IDQ5djcwLjNsNjEuNC0zNS44IDE3LjctNjYuMWMzLjQtMTIuOCAxNi42LTIwLjQgMjkuNC0xN3MyMC40IDE2LjYgMTcgMjkuNGwtNS4yIDE5LjMgMjMuNi0xMy44YzE1LjMtOC45IDM0LjktMy43IDQzLjggMTEuNXMzLjggMzQuOS0xMS41IDQzLjhsLTI1LjMgMTQuOCAyMS43IDUuOGMxMi44IDMuNCAyMC40IDE2LjYgMTcgMjkuNHMtMTYuNiAyMC40LTI5LjQgMTdsLTY3LjctMTguMUwyODcuNSAyNTZsNjAuOSAzNS41IDY3LjctMTguMWMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN3MtNC4yIDI2LTE3IDI5LjRsLTIxLjcgNS44IDI1LjMgMTQuOGMxNS4zIDguOSAyMC40IDI4LjUgMTEuNSA0My44cy0yOC41IDIwLjQtNDMuOCAxMS41bC0yMy42LTEzLjggNS4yIDE5LjNjMy40IDEyLjgtNC4yIDI2LTE3IDI5LjRzLTI2LTQuMi0yOS40LTE3bC0xNy43LTY2LjFMMjU2IDMxMS43djcwLjNsNDkgNDljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTUtMTVWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OS45bC0xNSAxNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0OS00OVYzMTEuN2wtNjEuNCAzNS44LTE3LjcgNjYuMWMtMy40IDEyLjgtMTYuNiAyMC40LTI5LjQgMTdzLTIwLjQtMTYuNi0xNy0yOS40bDUuMi0xOS4zTDQ4LjEgMzk1LjZjLTE1LjMgOC45LTM0LjkgMy43LTQzLjgtMTEuNXMtMy43LTM0LjkgMTEuNS00My44bDI1LjMtMTQuOC0yMS43LTUuOGMtMTIuOC0zLjQtMjAuNC0xNi42LTE3LTI5LjRzMTYuNi0yMC40IDI5LjQtMTdsNjcuNyAxOC4xTDE2MC41IDI1NiA5OS42IDIyMC41IDMxLjkgMjM4LjZjLTEyLjggMy40LTI2LTQuMi0yOS40LTE3czQuMi0yNiAxNy0yOS40bDIxLjctNS44TDE1LjkgMTcxLjZDLjYgMTYyLjctNC41IDE0My4xIDQuNCAxMjcuOXMyOC41LTIwLjQgNDMuOC0xMS41bDIzLjYgMTMuOC01LjItMTkuM2MtMy40LTEyLjggNC4yLTI2IDE3LTI5LjRzMjYgNC4yIDI5LjQgMTdsMTcuNyA2Ni4xTDE5MiAyMDAuM1YxMjkuOUwxNDMgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxNSAxNVYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFOZXdzcGFwZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbmV3c3BhcGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjQwXSwgXCJmMWVhXCIsIFwiTTk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjQwMGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2Vjk2em02NCAyNHY4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNEgyOTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0SDE4NGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTIwOC04YzAgOC44IDcuMiAxNiAxNiAxNmg0OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzODRjLTguOCAwLTE2IDcuMi0xNiAxNnptMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzg0Yy04LjggMC0xNiA3LjItMTYgMTZ6TTE2MCAzMDRjMCA4LjggNy4yIDE2IDE2IDE2SDQzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnptMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZINDMyYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2elwiXVxufTtcbnZhciBmYVJlY3RhbmdsZUFkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlY3RhbmdsZS1hZCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiYWRcIl0sIFwiZjY0MVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyOS41IDE3My4zbDcyIDE0NGM1LjkgMTEuOSAxLjEgMjYuMy0xMC43IDMyLjJzLTI2LjMgMS4xLTMyLjItMTAuN0wyNTMuMiAzMjhIMTYyLjhsLTUuNCAxMC43Yy01LjkgMTEuOS0yMC4zIDE2LjctMzIuMiAxMC43cy0xNi43LTIwLjMtMTAuNy0zMi4ybDcyLTE0NGM0LjEtOC4xIDEyLjQtMTMuMyAyMS41LTEzLjNzMTcuNCA1LjEgMjEuNSAxMy4zek0yMDggMjM3LjdMMTg2LjggMjgwaDQyLjNMMjA4IDIzNy43ek0zOTIgMjU2YTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHptMjQtNDMuOVYxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY5NiA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGMtNi42IDAtMTIuNi0yLjctMTctN2MtOS40IDQuNS0xOS45IDctMzEgN2MtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmM4LjQgMCAxNi41IDEuNCAyNCA0LjF6XCJdXG59O1xudmFyIGZhQWQgPSBmYVJlY3RhbmdsZUFkO1xudmFyIGZhQ2lyY2xlQXJyb3dSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93LWNpcmNsZS1yaWdodFwiXSwgXCJmMGE5XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDBBMjU2IDI1NiAwIDEgMCAwIDI1NnpNMjgxIDM4NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw3MS03MUwxMzYgMjgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE4Mi4xIDAtNzEtNzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEwzOTMgMjM5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDI4MSAzODV6XCJdXG59O1xudmFyIGZhQXJyb3dDaXJjbGVSaWdodCA9IGZhQ2lyY2xlQXJyb3dSaWdodDtcbnZhciBmYUZpbHRlckNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbHRlci1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUxN2JcIiwgXCJNMy45IDIyLjlDMTAuNSA4LjkgMjQuNSAwIDQwIDBINDcyYzE1LjUgMCAyOS41IDguOSAzNi4xIDIyLjlzNC42IDMwLjUtNS4yIDQyLjVMMzk2LjQgMTk1LjZDMzE2LjIgMjEyLjEgMjU2IDI4MyAyNTYgMzY4YzAgMjcuNCA2LjMgNTMuNCAxNy41IDc2LjVjLTEuNi0uOC0zLjItMS44LTQuNy0yLjlsLTY0LTQ4Yy04LjEtNi0xMi44LTE1LjUtMTIuOC0yNS42VjI4OC45TDkgNjUuM0MtLjcgNTMuNC0yLjggMzYuOCAzLjkgMjIuOXpNNDMyIDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdXG59O1xudmFyIGZhTG9jdXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xvY3VzdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUyMFwiLCBcIk0zMTIgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMTZjOTguNyAwIDE4MC42IDcxLjQgMTk3IDE2NS40Yy05LTMuNS0xOC44LTUuNC0yOS01LjRINDMxLjhsLTQxLjgtOTcuNWMtMy40LTcuOS0xMC44LTEzLjQtMTkuMy0xNC40cy0xNyAyLjctMjIuMSA5LjZsLTQwLjkgNTUuNS0yMS43LTUwLjdjLTMuMy03LjgtMTAuNS0xMy4yLTE4LjktMTQuM3MtMTYuNyAyLjMtMjIgOC45bC0yNDAgMzA0Yy04LjIgMTAuNC02LjQgMjUuNSA0IDMzLjdzMjUuNSA2LjQgMzMuNy00bDc5LjQtMTAwLjUgNDMgMTYuNC00MC41IDU1Yy03LjkgMTAuNy01LjYgMjUuNyA1LjEgMzMuNnMyNS43IDUuNiAzMy42LTUuMUwyMTUuMSA0MDBoNzQuNWwtMjkuMyA0Mi4zYy03LjUgMTAuOS00LjggMjUuOCA2LjEgMzMuNHMyNS44IDQuOCAzMy40LTYuMUwzNDggNDAwaDgwLjRsMzguOCA2Ny45YzYuNiAxMS41IDIxLjIgMTUuNSAzMi43IDguOXMxNS41LTIxLjIgOC45LTMyLjdMNDgzLjYgNDAwSDQ5NmM0NC4xIDAgNzkuOC0zNS43IDgwLTc5LjdjMC0uMSAwLS4yIDAtLjNWMjgwQzU3NiAxNDMgNDY1IDMyIDMyOCAzMkgzMTJ6bTUwLjUgMTY4bDE3LjEgNDBIMzMzbDI5LjUtNDB6bS04Ny43IDM4LjFsLTEuNCAxLjlIMjI1LjFsMzIuNy00MS41IDE2LjkgMzkuNXpNODguOCAyNDBDNTcuNCAyNDAgMzIgMjY1LjQgMzIgMjk2LjhjMCAxNS41IDYuMyAzMCAxNi45IDQwLjRMMTI2LjcgMjQwSDg4Ljh6TTQ5NiAyODhhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyelwiXVxufTtcbnZhciBmYVNvcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc29ydCcsXG4gIGljb246IFszMjAsIDUxMiwgW1widW5zb3J0ZWRcIl0sIFwiZjBkY1wiLCBcIk0xMzcuNCA0MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDEyOCAxMjhjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlzLTE2LjYgMTkuOC0yOS42IDE5LjhIMzJjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDEyOC0xMjh6bTAgNDI5LjNsLTEyOC0xMjhjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45czE2LjYtMTkuOCAyOS42LTE5LjhIMjg4YzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlsLTEyOCAxMjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwelwiXVxufTtcbnZhciBmYVVuc29ydGVkID0gZmFTb3J0O1xudmFyIGZhTGlzdE9sID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpc3Qtb2wnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxpc3QtMS0yXCIsIFwibGlzdC1udW1lcmljXCJdLCBcImYwY2JcIiwgXCJNMjQgNTZjMC0xMy4zIDEwLjctMjQgMjQtMjRIODBjMTMuMyAwIDI0IDEwLjcgMjQgMjRWMTc2aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0SDU2VjgwSDQ4QzM0LjcgODAgMjQgNjkuMyAyNCA1NnpNODYuNyAzNDEuMmMtNi41LTcuNC0xOC4zLTYuOS0yNCAxLjJMNTEuNSAzNTcuOWMtNy43IDEwLjgtMjIuNyAxMy4zLTMzLjUgNS42cy0xMy4zLTIyLjctNS42LTMzLjVsMTEuMS0xNS42YzIzLjctMzMuMiA3Mi4zLTM1LjYgOTkuMi00LjljMjEuMyAyNC40IDIwLjggNjAuOS0xLjEgODQuN0w4Ni44IDQzMkgxMjBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMzJjLTkuNSAwLTE4LjItNS42LTIyLTE0LjRzLTIuMS0xOC45IDQuMy0yNS45bDcyLTc4YzUuMy01LjggNS40LTE0LjYgLjMtMjAuNXpNMjI0IDY0SDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwSDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwSDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhTGlzdDEyID0gZmFMaXN0T2w7XG52YXIgZmFMaXN0TnVtZXJpYyA9IGZhTGlzdE9sO1xudmFyIGZhUGVyc29uRHJlc3NCdXJzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tZHJlc3MtYnVyc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NDRcIiwgXCJNNTI4IDQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTM5MC4yIDM4NEg0MDh2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMTZ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMTcuOGMxMC45IDAgMTguNi0xMC43IDE1LjItMjEuMUw1NDYuNyAyNDguMWwzMy45IDU2LjNjOS4xIDE1LjEgMjguOCAyMCA0My45IDEwLjlzMjAtMjguOCAxMC45LTQzLjlsLTUzLjYtODkuMmMtMjAuMi0zMy43LTU2LjctNTQuMy05Ni01NC4zSDQ3NC4yYy0zOS4zIDAtNzUuNyAyMC42LTk2IDU0LjNsLTUzLjYgODkuMmMtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOWwzMy45LTU2LjNMMzc1IDM2Mi45Yy0zLjUgMTAuNCA0LjMgMjEuMSAxNS4yIDIxLjF6TTE5MC45IDE4LjFDMTg4LjQgMTIgMTgyLjYgOCAxNzYgOHMtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NEw1NS42IDY4LjljLTYuMy0xLjktMTMuMSAuMi0xNy4yIDUuM3MtNC42IDEyLjItMS40IDE3LjlsMzkuNSA2OS4xTDEwLjkgMjA2LjRjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43czYuNyAxMS4yIDEzLjEgMTIuMmw3OC43IDEyLjJMOTAuNiAzMjdjLS41IDYuNSAzLjEgMTIuNyA5IDE1LjVzMTIuOSAxLjggMTcuOC0yLjZMMTc2IDI4Ni4xbDU4LjYgNTMuOWM0LjggNC40IDExLjkgNS41IDE3LjggMi42czkuNS05IDktMTUuNWwtNS42LTc5LjQgNTAuNS03LjggMjQuNC00MC41LTU1LjItMzhMMzE1IDkyLjJjMy4zLTUuNyAyLjctMTIuOC0xLjQtMTcuOXMtMTAuOS03LjItMTcuMi01LjNMMjIwLjMgOTIuMWwtMjkuNC03NHpcIl1cbn07XG52YXIgZmFNb25leUNoZWNrRG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWNoZWNrLWRvbGxhcicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibW9uZXktY2hlY2stYWx0XCJdLCBcImY1M2RcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTI3MiAxOTJINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNMjU2IDMwNGMwLTguOCA3LjItMTYgMTYtMTZINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2ek0xNjQgMTUydjEzLjljNy41IDEuMiAxNC42IDIuOSAyMS4xIDQuN2MxMC43IDIuOCAxNyAxMy44IDE0LjIgMjQuNXMtMTMuOCAxNy0yNC41IDE0LjJjLTExLTIuOS0yMS42LTUtMzEuMi01LjJjLTcuOS0uMS0xNiAxLjgtMjEuNSA1Yy00LjggMi44LTYuMiA1LjYtNi4yIDkuM2MwIDEuOCAuMSAzLjUgNS4zIDYuN2M2LjMgMy44IDE1LjUgNi43IDI4LjMgMTAuNWwuNyAuMmMxMS4yIDMuNCAyNS42IDcuNyAzNy4xIDE1YzEyLjkgOC4xIDI0LjMgMjEuMyAyNC42IDQxLjZjLjMgMjAuOS0xMC41IDM2LjEtMjQuOCA0NWMtNy4yIDQuNS0xNS4yIDcuMy0yMy4yIDlWMzYwYzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMFYzNDUuNGMtMTAuMy0yLjItMjAtNS41LTI4LjItOC40bDAgMCAwIDBjLTIuMS0uNy00LjEtMS40LTYuMS0yLjFjLTEwLjUtMy41LTE2LjEtMTQuOC0xMi42LTI1LjNzMTQuOC0xNi4xIDI1LjMtMTIuNmMyLjUgLjggNC45IDEuNyA3LjIgMi40YzEzLjYgNC42IDI0IDguMSAzNS4xIDguNWM4LjYgLjMgMTYuNS0xLjYgMjEuNC00LjdjNC4xLTIuNSA2LTUuNSA1LjktMTAuNWMwLTIuOS0uOC01LTUuOS04LjJjLTYuMy00LTE1LjQtNi45LTI4LTEwLjdsLTEuNy0uNWMtMTAuOS0zLjMtMjQuNi03LjQtMzUuNi0xNGMtMTIuNy03LjctMjQuNi0yMC41LTI0LjctNDAuN2MtLjEtMjEuMSAxMS44LTM1LjcgMjUuOC00My45YzYuOS00LjEgMTQuNS02LjggMjIuMi04LjVWMTUyYzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwelwiXVxufTtcbnZhciBmYU1vbmV5Q2hlY2tBbHQgPSBmYU1vbmV5Q2hlY2tEb2xsYXI7XG52YXIgZmFWZWN0b3JTcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmVjdG9yLXNxdWFyZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjVjYlwiLCBcIk0zNjggODBoMzJ2MzJIMzY4Vjgwek0zNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMySDEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyVjM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJIOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJIMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMlYxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzUyek05NiAxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJIMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyVjM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJIMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyVjE2MHpNNDggNDAwSDgwdjMySDQ4VjQwMHptMzIwIDMyVjQwMGgzMnYzMkgzNjh6TTQ4IDExMlY4MEg4MHYzMkg0OHpcIl1cbn07XG52YXIgZmFCcmVhZFNsaWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyZWFkLXNsaWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2VjXCIsIFwiTTI1NiAzMkMxOTIgMzIgMCA2NCAwIDE5MmMwIDM1LjMgMjguNyA2NCA2NCA2NFY0MzJjMCAyNi41IDIxLjUgNDggNDggNDhINDAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1NmMzNS4zIDAgNjQtMjguNyA2NC02NEM1MTIgNjQgMzIwIDMyIDI1NiAzMnpcIl1cbn07XG52YXIgZmFMYW5ndWFnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYW5ndWFnZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjFhYlwiLCBcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NEgyNTZoNDggMTZINTc2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEgzMjAgMzA0IDI1NiA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTI4em0zMjAgMFYzODRINTc2VjEyOEgzMjB6TTE3OC4zIDE3NS45Yy0zLjItNy4yLTEwLjQtMTEuOS0xOC4zLTExLjlzLTE1LjEgNC43LTE4LjMgMTEuOWwtNjQgMTQ0Yy00LjUgMTAuMSAuMSAyMS45IDEwLjIgMjYuNHMyMS45LS4xIDI2LjQtMTAuMmw4LjktMjAuMWg3My42bDguOSAyMC4xYzQuNSAxMC4xIDE2LjMgMTQuNiAyNi40IDEwLjJzMTQuNi0xNi4zIDEwLjItMjYuNGwtNjQtMTQ0ek0xNjAgMjMzLjJMMTc5IDI3NkgxNDFsMTktNDIuOHpNNDQ4IDE2NGMxMSAwIDIwIDkgMjAgMjB2NGg0NCAxNmMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBoLTJsLTEuNiA0LjVjLTguOSAyNC40LTIyLjQgNDYuNi0zOS42IDY1LjRjLjkgLjYgMS44IDEuMSAyLjcgMS42bDE4LjkgMTEuM2M5LjUgNS43IDEyLjUgMTggNi45IDI3LjRzLTE4IDEyLjUtMjcuNCA2LjlsLTE4LjktMTEuM2MtNC41LTIuNy04LjgtNS41LTEzLjEtOC41Yy0xMC42IDcuNS0yMS45IDE0LTM0IDE5LjRsLTMuNiAxLjZjLTEwLjEgNC41LTIxLjktLjEtMjYuNC0xMC4ycy4xLTIxLjkgMTAuMi0yNi40bDMuNi0xLjZjNi40LTIuOSAxMi42LTYuMSAxOC41LTkuOGwtMTIuMi0xMi4yYy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDBsMTQuNiAxNC42IC41IC41YzEyLjQtMTMuMSAyMi41LTI4LjMgMjkuOC00NUg0NDggMzc2Yy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGg1MnYtNGMwLTExIDktMjAgMjAtMjB6XCJdXG59O1xudmFyIGZhRmFjZUtpc3NXaW5rSGVhcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1raXNzLXdpbmstaGVhcnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzYsIFwia2lzcy13aW5rLWhlYXJ0XCJdLCBcImY1OThcIiwgXCJNNDk4IDMzOS43YzkuMS0yNi4yIDE0LTU0LjQgMTQtODMuN0M1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyYzM1LjQgMCA2OS4xLTcuMiA5OS43LTIwLjJjLTQuOC01LjUtOC41LTEyLjItMTAuNC0xOS43bC0yMi45LTg5LjNjLTEwLTM5IDExLjgtODAuOSA1MS44LTkyLjFjMzcuMi0xMC40IDczLjggMTAuMSA4Ny41IDQ0YzEyLjctMS42IDI1LjEgLjQgMzYuMiA1ek0yOTYgMzMyYzAgNi45LTMuMSAxMy4yLTcuMyAxOC4zYy00LjMgNS4yLTEwLjEgOS43LTE2LjcgMTMuNGMtMi43IDEuNS01LjcgMy04LjcgNC4zYzMuMSAxLjMgNiAyLjcgOC43IDQuM2M2LjYgMy43IDEyLjUgOC4yIDE2LjcgMTMuNGM0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRDMjU4LjcgNDQzLjEgMjQxLjQgNDQ4IDIyNCA0NDhjLTMuNiAwLTYuOC0yLjUtNy43LTZzLjYtNy4yIDMuOC05bDAgMCAwIDAgMCAwIDAgMCAuMi0uMWMuMi0uMSAuNS0uMyAuOS0uNWMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWwtLjYtLjQtLjMtLjItLjItLjEgMCAwIDAgMCAwIDBjLTIuNS0xLjQtNC4xLTQuMS00LjEtN3MxLjYtNS42IDQuMS03bDAgMCAwIDAgMCAwIDAgMCAwIDAgLjItLjFjLjItLjEgLjUtLjMgLjktLjVjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFjLS40LS4yLS43LS40LS45LS41bC0uMi0uMSAwIDAgMCAwIDAgMGMtMy4yLTEuOC00LjctNS41LTMuOC05czQuMS02IDcuNy02YzE3LjQgMCAzNC43IDQuOSA0Ny45IDEyLjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3pNMTc2LjQgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTk0LjggNTcuNmMtMTcuNi0yMy41LTUyLjgtMjMuNS03MC40IDBjLTUuMyA3LjEtMTUuMyA4LjUtMjIuNCAzLjJzLTguNS0xNS4zLTMuMi0yMi40YzMwLjQtNDAuNSA5MS4yLTQwLjUgMTIxLjYgMGM1LjMgNy4xIDMuOSAxNy4xLTMuMiAyMi40cy0xNy4xIDMuOS0yMi40LTMuMnpNNDM0IDM1Mi4zYy02LTIzLjItMjguOC0zNy01MS4xLTMwLjhzLTM1LjQgMzAuMS0yOS41IDUzLjRsMjIuOSA4OS4zYzIuMiA4LjcgMTEuMiAxMy45IDE5LjggMTEuNGw4NC45LTIzLjhjMjIuMi02LjIgMzUuNC0zMC4xIDI5LjUtNTMuNHMtMjguOC0zNy01MS4xLTMwLjhsLTIwLjIgNS42LTUuNC0yMXpcIl1cbn07XG52YXIgZmFLaXNzV2lua0hlYXJ0ID0gZmFGYWNlS2lzc1dpbmtIZWFydDtcbnZhciBmYUZpbHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWx0ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwYjBcIiwgXCJNMy45IDU0LjlDMTAuNSA0MC45IDI0LjUgMzIgNDAgMzJINDcyYzE1LjUgMCAyOS41IDguOSAzNi4xIDIyLjlzNC42IDMwLjUtNS4yIDQyLjVMMzIwIDMyMC45VjQ0OGMwIDEyLjEtNi44IDIzLjItMTcuNyAyOC42cy0yMy44IDQuMy0zMy41LTNsLTY0LTQ4Yy04LjEtNi0xMi44LTE1LjUtMTIuOC0yNS42VjMyMC45TDkgOTcuM0MtLjcgODUuNC0yLjggNjguOCAzLjkgNTQuOXpcIl1cbn07XG52YXIgZmFRdWVzdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdxdWVzdGlvbicsXG4gIGljb246IFszMjAsIDUxMiwgWzEwMDY3LCAxMDA2OCwgNjE3MzZdLCBcIjNmXCIsIFwiTTgwIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NGgzMmMzNS4zIDAgNjQgMjguNyA2NCA2NHYzLjZjMCAyMS44LTExLjEgNDIuMS0yOS40IDUzLjhsLTQyLjIgMjcuMWMtMjUuMiAxNi4yLTQwLjQgNDQuMS00MC40IDc0VjMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMydi0xLjRjMC04LjIgNC4yLTE1LjggMTEtMjAuMmw0Mi4yLTI3LjFjMzYuNi0yMy42IDU4LjgtNjQuMSA1OC44LTEwNy43VjE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEgxNDRDNzMuMyAzMiAxNiA4OS4zIDE2IDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem04MCAzMjBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwelwiXVxufTtcbnZhciBmYUZpbGVTaWduYXR1cmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1zaWduYXR1cmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1NzNcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFY0MjguN2MtMi43IDEuMS01LjQgMi04LjIgMi43bC02MC4xIDE1Yy0zIC43LTYgMS4yLTkgMS40Yy0uOSAuMS0xLjggLjItMi43IC4ySDI0MGMtNi4xIDAtMTEuNi0zLjQtMTQuMy04LjhsLTguOC0xNy43Yy0xLjctMy40LTUuMS01LjUtOC44LTUuNXMtNy4yIDIuMS04LjggNS41bC04LjggMTcuN2MtMi45IDUuOS05LjIgOS40LTE1LjcgOC44cy0xMi4xLTUuMS0xMy45LTExLjNMMTQ0IDM4MWwtOS44IDMyLjhjLTYuMSAyMC4zLTI0LjggMzQuMi00NiAzNC4ySDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDguMmM3LjEgMCAxMy4zLTQuNiAxNS4zLTExLjRsMTQuOS00OS41YzMuNC0xMS4zIDEzLjgtMTkuMSAyNS42LTE5LjFzMjIuMiA3LjggMjUuNiAxOS4xbDExLjYgMzguNmM3LjQtNi4yIDE2LjgtOS43IDI2LjgtOS43YzE1LjkgMCAzMC40IDkgMzcuNSAyMy4ybDQuNCA4LjhoOC45Yy0zLjEtOC44LTMuNy0xOC40LTEuNC0yNy44bDE1LTYwLjFjMi44LTExLjMgOC42LTIxLjUgMTYuOC0yOS43TDM4NCAyMDMuNlYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek01NDkuOCAxMzkuN2MtMTUuNi0xNS42LTQwLjktMTUuNi01Ni42IDBsLTI5LjQgMjkuNCA3MSA3MSAyOS40LTI5LjRjMTUuNi0xNS42IDE1LjYtNDAuOSAwLTU2LjZsLTE0LjQtMTQuNHpNMzExLjkgMzIxYy00LjEgNC4xLTcgOS4yLTguNCAxNC45bC0xNSA2MC4xYy0xLjQgNS41IC4yIDExLjIgNC4yIDE1LjJzOS43IDUuNiAxNS4yIDQuMmw2MC4xLTE1YzUuNi0xLjQgMTAuOC00LjMgMTQuOS04LjRMNTEyLjEgMjYyLjdsLTcxLTcxTDMxMS45IDMyMXpcIl1cbn07XG52YXIgZmFVcERvd25MZWZ0UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXAtZG93bi1sZWZ0LXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvd3MtYWx0XCJdLCBcImYwYjJcIiwgXCJNMjc4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhoMzJ2OTZIMTI4VjE5MmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45czE5LjgtMTYuNiAxOS44LTI5LjZWMjg4aDk2djk2SDE5MmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhIMjg4VjI4OGg5NnYzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlzLTE5LjggMTYuNi0xOS44IDI5LjZ2MzJIMjg4VjEyOGgzMmMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC02NC02NHpcIl1cbn07XG52YXIgZmFBcnJvd3NBbHQgPSBmYVVwRG93bkxlZnRSaWdodDtcbnZhciBmYUhvdXNlQ2hpbW5leVVzZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY2hpbW5leS11c2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDY1XCIsIFwiTTU0My44IDI4Ny42YzE3IDAgMzItMTQgMzItMzIuMWMxLTktMy0xNy0xMS0yNEw1MTIgMTg1VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzYuN0wzMDkuNSA3Yy02LTUtMTQtNy0yMS03cy0xNSAxLTIyIDhMMTAgMjMxLjVjLTcgNy0xMCAxNS0xMCAyNGMwIDE4IDE0IDMyLjEgMzIgMzIuMWgzMlY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4LjVjMzUuNSAwIDY0LjItMjguOCA2NC02NC4zbC0uNy0xNjAuMmgzMnpNMjg4IDE2MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMTc2IDQwMGMwLTQ0LjIgMzUuOC04MCA4MC04MGg2NGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZIMTkyYy04LjggMC0xNi03LjItMTYtMTZ6XCJdXG59O1xudmFyIGZhSGFuZEhvbGRpbmdIZWFydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWhvbGRpbmctaGVhcnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0YmVcIiwgXCJNMTYzLjkgMTM2LjljLTI5LjQtMjkuOC0yOS40LTc4LjIgMC0xMDhzNzctMjkuOCAxMDYuNCAwbDE3LjcgMTggMTcuNy0xOGMyOS40LTI5LjggNzctMjkuOCAxMDYuNCAwczI5LjQgNzguMiAwIDEwOEwzMTAuNSAyNDAuMWMtNi4yIDYuMy0xNC4zIDkuNC0yMi41IDkuNHMtMTYuMy0zLjEtMjIuNS05LjRMMTYzLjkgMTM2Ljl6TTU2OC4yIDMzNi4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJINjguOGw0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4SDI3MmgxNiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyODggMjcyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDM5Mi42bDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzODRsMCAwLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdXG59O1xudmFyIGZhUHV6emxlUGllY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncHV6emxlLXBpZWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTEzXSwgXCJmMTJlXCIsIFwiTTE5MiAxMDQuOGMwLTkuMi01LjgtMTcuMy0xMy4yLTIyLjhDMTY3LjIgNzMuMyAxNjAgNjEuMyAxNjAgNDhjMC0yNi41IDI4LjctNDggNjQtNDhzNjQgMjEuNSA2NCA0OGMwIDEzLjMtNy4yIDI1LjMtMTguOCAzNGMtNy40IDUuNS0xMy4yIDEzLjYtMTMuMiAyMi44YzAgMTIuOCAxMC40IDIzLjIgMjMuMiAyMy4ySDMzNmMyNi41IDAgNDggMjEuNSA0OCA0OHY1Ni44YzAgMTIuOCAxMC40IDIzLjIgMjMuMiAyMy4yYzkuMiAwIDE3LjMtNS44IDIyLjgtMTMuMmM4LjctMTEuNiAyMC43LTE4LjggMzQtMTguOGMyNi41IDAgNDggMjguNyA0OCA2NHMtMjEuNSA2NC00OCA2NGMtMTMuMyAwLTI1LjMtNy4yLTM0LTE4LjhjLTUuNS03LjQtMTMuNi0xMy4yLTIyLjgtMTMuMmMtMTIuOCAwLTIzLjIgMTAuNC0yMy4yIDIzLjJWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDI3OS4yYy0xMi44IDAtMjMuMi0xMC40LTIzLjItMjMuMmMwLTkuMiA1LjgtMTcuMyAxMy4yLTIyLjhjMTEuNi04LjcgMTguOC0yMC43IDE4LjgtMzRjMC0yNi41LTI4LjctNDgtNjQtNDhzLTY0IDIxLjUtNjQgNDhjMCAxMy4zIDcuMiAyNS4zIDE4LjggMzRjNy40IDUuNSAxMy4yIDEzLjYgMTMuMiAyMi44YzAgMTIuOC0xMC40IDIzLjItMjMuMiAyMy4ySDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzNDMuMkMwIDMzMC40IDEwLjQgMzIwIDIzLjIgMzIwYzkuMiAwIDE3LjMgNS44IDIyLjggMTMuMkM1NC43IDM0NC44IDY2LjcgMzUyIDgwIDM1MmMyNi41IDAgNDgtMjguNyA0OC02NHMtMjEuNS02NC00OC02NGMtMTMuMyAwLTI1LjMgNy4yLTM0IDE4LjhDNDAuNSAyNTAuMiAzMi40IDI1NiAyMy4yIDI1NkMxMC40IDI1NiAwIDI0NS42IDAgMjMyLjhWMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDE2OC44YzEyLjggMCAyMy4yLTEwLjQgMjMuMi0yMy4yelwiXVxufTtcbnZhciBmYU1vbmV5Q2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1M2NcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTQ4IDE2MEgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek05NiAzMzZjMC04LjggNy4yLTE2IDE2LTE2SDQ2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnpNMzc2IDE2MGg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHY0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEgzNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFTdGFySGFsZlN0cm9rZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFyLWhhbGYtc3Ryb2tlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzdGFyLWhhbGYtYWx0XCJdLCBcImY1YzBcIiwgXCJNMjg4IDM3Ni40bC4xLS4xIDI2LjQgMTQuMSA4NS4yIDQ1LjUtMTYuNS05Ny42LTQuOC0yOC43IDIwLjctMjAuNSA3MC4xLTY5LjMtOTYuMS0xNC4yLTI5LjMtNC4zLTEyLjktMjYuNkwyODguMSA4Ni45bC0uMSAuM1YzNzYuNHptMTc1LjEgOTguM2MyIDEyLTMgMjQuMi0xMi45IDMxLjNzLTIzIDgtMzMuOCAyLjNMMjg4LjEgNDM5LjggMTU5LjggNTA4LjNDMTQ5IDUxNCAxMzUuOSA1MTMuMSAxMjYgNTA2cy0xNC45LTE5LjMtMTIuOS0zMS4zTDEzNy44IDMyOSAzMy42IDIyNS45Yy04LjYtOC41LTExLjctMjEuMi03LjktMzIuN3MxMy43LTE5LjkgMjUuNy0yMS43TDE5NSAxNTAuMyAyNTkuNCAxOGM1LjQtMTEgMTYuNS0xOCAyOC44LTE4czIzLjQgNyAyOC44IDE4bDY0LjMgMTMyLjMgMTQzLjYgMjEuMmMxMiAxLjggMjIgMTAuMiAyNS43IDIxLjdzLjcgMjQuMi03LjkgMzIuN0w0MzguNSAzMjlsMjQuNiAxNDUuN3pcIl1cbn07XG52YXIgZmFTdGFySGFsZkFsdCA9IGZhU3RhckhhbGZTdHJva2U7XG52YXIgZmFDb2RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvZGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYxMjFcIiwgXCJNMzkyLjggMS4yYy0xNy00LjktMzQuNyA1LTM5LjYgMjJsLTEyOCA0NDhjLTQuOSAxNyA1IDM0LjcgMjIgMzkuNnMzNC43LTUgMzkuNi0yMmwxMjgtNDQ4YzQuOS0xNy01LTM0LjctMjItMzkuNnptODAuNiAxMjAuMWMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNMNTYyLjcgMjU2bC04OS40IDg5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTEyLTExMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTEyLTExMmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDB6bS0zMDYuNyAwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTEyIDExMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTEyIDExMmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2bDg5LjQtODkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG52YXIgZmFXaGlza2V5R2xhc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2hpc2tleS1nbGFzcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTM0NywgXCJnbGFzcy13aGlza2V5XCJdLCBcImY3YTBcIiwgXCJNMzIgMzJjLTkuMyAwLTE4LjEgNC0yNC4yIDExLjFTLTEgNTkuNCAuMyA2OC42bDUwIDM0Mi45YzUuNyAzOS4zIDM5LjQgNjguNSA3OS4yIDY4LjVoMjUzYzM5LjcgMCA3My40LTI5LjEgNzkuMi02OC41bDUwLTM0Mi45YzEuMy05LjItMS40LTE4LjUtNy41LTI1LjVTNDg5LjMgMzIgNDgwIDMySDMyek04Ny43IDIyNEw2OSA5Nkg0NDNMNDI0LjMgMjI0SDg3Ljd6XCJdXG59O1xudmFyIGZhR2xhc3NXaGlza2V5ID0gZmFXaGlza2V5R2xhc3M7XG52YXIgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLWNpcmNsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRkM1wiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoOTZWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2ODBoOTZjMTUuMSAwIDI4LjUtNi45IDM3LjMtMTcuOEMzNDAuNCA0NjIuMiAzMjAgNDE3LjUgMzIwIDM2OGMwLTU0LjcgMjQuOS0xMDMuNSA2NC0xMzUuOFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xMTItMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDBjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTgwIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJ6TTI3MiA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFnbmlmeWluZy1nbGFzcy1jaGFydCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUyMlwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4em0tMzEyIDh2NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MC05NlYyODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bTgwIDY0djk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0elwiXVxufTtcbnZhciBmYUFycm93VXBSaWdodEZyb21TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImV4dGVybmFsLWxpbmtcIl0sIFwiZjA4ZVwiLCBcIk0zMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg4Mi43TDIwMS40IDI2NS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQ0OCAxMDkuM1YxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMjB6TTgwIDMyQzM1LjggMzIgMCA2Ny44IDAgMTEyVjQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MEg0MDBjNDQuMiAwIDgwLTM1LjggODAtODBWMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2SDE5MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MHpcIl1cbn07XG52YXIgZmFFeHRlcm5hbExpbmsgPSBmYUFycm93VXBSaWdodEZyb21TcXVhcmU7XG52YXIgZmFDdWJlc1N0YWNrZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3ViZXMtc3RhY2tlZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTRlNlwiLCBcIk0xOTIgNjR2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODIuNyAyMDdjLTE1LjMgOC44LTIwLjUgMjguNC0xMS43IDQzLjdsMzIgNTUuNGM4LjggMTUuMyAyOC40IDIwLjUgNDMuNyAxMS43bDU1LjQtMzJjMTUuMy04LjggMjAuNS0yOC40IDExLjctNDMuN2wtMzItNTUuNGMtOC44LTE1LjMtMjguNC0yMC41LTQzLjctMTEuN0w4Mi43IDIwN3pNMjg4IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI4OHptNjQgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMzUyek0xNjAgMzg0djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zMiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnpcIl1cbn07XG52YXIgZmFXb25TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dvbi1zaWduJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbODM2MSwgXCJrcndcIiwgXCJ3b25cIl0sIFwiZjE1OVwiLCBcIk02Mi40IDUzLjlDNTYuOCAzNy4xIDM4LjYgMjguMSAyMS45IDMzLjZTLTMuOSA1Ny40IDEuNiA3NC4xTDUxLjYgMjI0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDcyLjlsNTYuNyAxNzAuMWM0LjUgMTMuNSAxNy40IDIyLjQgMzEuNiAyMS45czI2LjQtMTAuNCAyOS44LTI0LjJMMjMzIDI4OGg0NkwzMjEgNDU1LjhjMy40IDEzLjggMTUuNiAyMy43IDI5LjggMjQuMnMyNy4xLTguNCAzMS42LTIxLjlMNDM5LjEgMjg4SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NjAuNGw1MC0xNDkuOWM1LjYtMTYuOC0zLjUtMzQuOS0yMC4yLTQwLjVzLTM0LjkgMy41LTQwLjUgMjAuMkwzOTIuOSAyMjRIMzI5TDI4NyA1Ni4yQzI4My41IDQyIDI3MC43IDMyIDI1NiAzMnMtMjcuNSAxMC0zMSAyNC4yTDE4MyAyMjRoLTY0TDYyLjQgNTMuOXptNzggMjM0LjFIMTY3bC0xMS40IDQ1LjZMMTQwLjQgMjg4ek0yNDkgMjI0bDctMjguMSA3IDI4LjFIMjQ5em05NiA2NGgyNi42bC0xNS4yIDQ1LjZMMzQ1IDI4OHpcIl1cbn07XG52YXIgZmFLcncgPSBmYVdvblNpZ247XG52YXIgZmFXb24gPSBmYVdvblNpZ247XG52YXIgZmFWaXJ1c0NvdmlkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpcnVzLWNvdmlkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGE4XCIsIFwiTTE5MiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyODBWODEuNmMzMC43IDQuMiA1OC44IDE2LjMgODIuMyAzNC4xTDM4Ni4xIDkyIDM3NC44IDgwLjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni42IDU2LjZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw0MjAgMTI1LjlsLTIzLjggMjMuOGMxNy45IDIzLjUgMjkuOSA1MS43IDM0LjEgODIuM0g0NjRWMjE2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2ODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjgwSDQzMC40Yy00LjIgMzAuNy0xNi4zIDU4LjgtMzQuMSA4Mi4zTDQyMCAzODYuMWwxMS4zLTExLjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01Ni42IDU2LjZjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMzg2LjEgNDIwbC0yMy44LTIzLjhjLTIzLjUgMTcuOS01MS43IDI5LjktODIuMyAzNC4xVjQ2NGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMTZWNDMwLjRjLTMwLjctNC4yLTU4LjgtMTYuMy04Mi4zLTM0LjFMMTI1LjkgNDIwbDExLjMgMTEuM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDQ2LjcgNDA4LjdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEw5MiAzODYuMWwyMy44LTIzLjhDOTcuOSAzMzguOCA4NS44IDMxMC43IDgxLjYgMjgwSDQ4djE2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjIxNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djE2SDgxLjZjNC4yLTMwLjcgMTYuMy01OC44IDM0LjEtODIuM0w5MiAxMjUuOSA4MC42IDEzNy4yYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU2LjYtNTYuNmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMTI1LjkgOTJsMjMuOCAyMy44YzIzLjUtMTcuOSA1MS43LTI5LjkgODIuMy0zNC4xVjQ4SDIxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTQ4IDIwMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem02NCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYUF1c3RyYWxTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2F1c3RyYWwtc2lnbicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTBhOVwiLCBcIk0yNTMuNSA1MS43QzI0OC42IDM5LjggMjM2LjkgMzIgMjI0IDMycy0yNC42IDcuOC0yOS41IDE5LjdMMTIyLjcgMjI0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDk2TDgyLjcgMzIwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDU2TDM0LjUgNDM1LjdjLTYuOCAxNi4zIC45IDM1IDE3LjIgNDEuOHMzNS0uOSA0MS44LTE3LjJMMTI1LjMgMzg0SDMyMi43bDMxLjggNzYuM2M2LjggMTYuMyAyNS41IDI0IDQxLjggMTcuMnMyNC0yNS41IDE3LjItNDEuOEwzOTIgMzg0aDI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM2NS4zTDM1MiAyODhoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzI1LjNMMjUzLjUgNTEuN3pNMjU2IDIyNEgxOTJsMzItNzYuOEwyNTYgMjI0em0tOTAuNyA2NEgyODIuN0wyOTYgMzIwSDE1MmwxMy4zLTMyelwiXVxufTtcbnZhciBmYUYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZicsXG4gIGljb246IFszMjAsIDUxMiwgWzEwMl0sIFwiNDZcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlYyNTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4SDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NFY5NkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINjR6XCJdXG59O1xudmFyIGZhTGVhZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsZWFmJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDZjXCIsIFwiTTI3MiA5NmMtNzguNiAwLTE0NS4xIDUxLjUtMTY3LjcgMTIyLjVjMzMuNi0xNyA3MS41LTI2LjUgMTExLjctMjYuNWg4OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyODggMjE2czAgMCAwIDBjLTE2LjYgMC0zMi43IDEuOS00OC4zIDUuNGMtMjUuOSA1LjktNDkuOSAxNi40LTcxLjQgMzAuN2MwIDAgMCAwIDAgMEMzOC4zIDI5OC44IDAgMzY0LjkgMCA0NDB2MTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDBjMC00OC43IDIwLjctOTIuNSA1My44LTEyMy4yQzEyMS42IDM5Mi4zIDE5MC4zIDQ0OCAyNzIgNDQ4bDEgMGMxMzIuMS0uNyAyMzktMTMwLjkgMjM5LTI5MS40YzAtNDIuNi03LjUtODMuMS0yMS4xLTExOS42Yy0yLjYtNi45LTEyLjctNi42LTE2LjItLjFDNDU1LjkgNzIuMSA0MTguNyA5NiAzNzYgOTZMMjcyIDk2elwiXVxufTtcbnZhciBmYVJvYWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODczOV0sIFwiZjAxOFwiLCBcIk0yNTYgMzJIMTgxLjJjLTI3LjEgMC01MS4zIDE3LjEtNjAuMyA0Mi42TDMuMSA0MDcuMkMxLjEgNDEzIDAgNDE5LjIgMCA0MjUuNEMwIDQ1NS41IDI0LjUgNDgwIDU0LjYgNDgwSDI1NlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY2NEg1MjEuNGMzMC4yIDAgNTQuNi0yNC41IDU0LjYtNTQuNmMwLTYuMi0xLjEtMTIuNC0zLjEtMTguMkw0NTUuMSA3NC42QzQ0NiA0OS4xIDQyMS45IDMyIDM5NC44IDMySDMyMFY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMnptNjQgMTkydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYVRheGkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGF4aScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY2MiwgXCJjYWJcIl0sIFwiZjFiYVwiLCBcIk0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNjRjMCAuMSAwIC4xIDAgLjJjLTM4LjYgMi4yLTcyLjMgMjcuMy04NS4yIDY0LjFMMzkuNiAyMjguOEMxNi40IDIzOC40IDAgMjYxLjMgMCAyODhWNDMydjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQzMkg0MTZ2NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJWNDMyIDI4OGMwLTI2LjctMTYuNC00OS42LTM5LjYtNTkuMkw0MzcuMiAxMjguM2MtMTIuOS0zNi44LTQ2LjYtNjItODUuMi02NC4xYzAtLjEgMC0uMSAwLS4yVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDE5MnpNMTY1LjQgMTI4SDM0Ni42YzEzLjYgMCAyNS43IDguNiAzMC4yIDIxLjRMNDAyLjkgMjI0SDEwOS4xbDI2LjEtNzQuNmM0LjUtMTIuOCAxNi42LTIxLjQgMzAuMi0yMS40ek05NiAyODhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yODggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpcIl1cbn07XG52YXIgZmFDYWIgPSBmYVRheGk7XG52YXIgZmFQZXJzb25DaXJjbGVQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaXJjbGUtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0MVwiLCBcIk0xMTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNTYuOUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmgyOS43YzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDQ0LjkgNzQuN2MtMTYuMSAxNy42LTI4LjYgMzguNS0zNi42IDYxLjVjLTEuOS0xLjgtMy41LTMuOS00LjktNi4zTDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDE1MnpNNDMyIDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTE2IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djQ4SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg0OHY0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjM4NGg0OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg0NDhWMzA0elwiXVxufTtcbnZhciBmYUNoYXJ0UGllID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYXJ0LXBpZScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wicGllLWNoYXJ0XCJdLCBcImYyMDBcIiwgXCJNMzA0IDI0MFYxNi42YzAtOSA3LTE2LjYgMTYtMTYuNkM0NDMuNyAwIDU0NCAxMDAuMyA1NDQgMjI0YzAgOS03LjYgMTYtMTYuNiAxNkgzMDR6TTMyIDI3MkMzMiAxNTAuNyAxMjIuMSA1MC4zIDIzOSAzNC4zYzkuMi0xLjMgMTcgNi4xIDE3IDE1LjRWMjg4TDQxMi41IDQ0NC41YzYuNyA2LjcgNi4yIDE3LjctMS41IDIzLjFDMzcxLjggNDk1LjYgMzIzLjggNTEyIDI3MiA1MTJDMTM5LjUgNTEyIDMyIDQwNC42IDMyIDI3MnptNTI2LjQgMTZjOS4zIDAgMTYuNiA3LjggMTUuNCAxN2MtNy43IDU1LjktMzQuNiAxMDUuNi03My45IDE0Mi4zYy02IDUuNi0xNS40IDUuMi0yMS4yLS43TDMyMCAyODhINTU4LjR6XCJdXG59O1xudmFyIGZhUGllQ2hhcnQgPSBmYUNoYXJ0UGllO1xudmFyIGZhQm9sdExpZ2h0bmluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib2x0LWxpZ2h0bmluZycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTBiN1wiLCBcIk0wIDI1NkwyOC41IDI4YzItMTYgMTUuNi0yOCAzMS44LTI4SDIyOC45YzE1IDAgMjcuMSAxMi4xIDI3LjEgMjcuMWMwIDMuMi0uNiA2LjUtMS43IDkuNUwyMDggMTYwSDM0Ny4zYzIwLjIgMCAzNi43IDE2LjQgMzYuNyAzNi43YzAgNy40LTIuMiAxNC42LTYuNCAyMC43bC0xOTIuMiAyODFjLTUuOSA4LjYtMTUuNiAxMy43LTI1LjkgMTMuN2gtMi45Yy0xNS43IDAtMjguNS0xMi44LTI4LjUtMjguNWMwLTIuMyAuMy00LjYgLjktNi45TDE3NiAyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyelwiXVxufTtcbnZhciBmYVNhY2tYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzYWNrLXhtYXJrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTZhXCIsIFwiTTE5MiA5NkgzMjBsNDcuNC03MS4xQzM3NC41IDE0LjIgMzY2LjkgMCAzNTQuMSAwSDE1Ny45Yy0xMi44IDAtMjAuNCAxNC4yLTEzLjMgMjQuOUwxOTIgOTZ6bTEyOCAzMkgxOTJjLTMuOCAyLjUtOC4xIDUuMy0xMyA4LjRsMCAwIDAgMEMxMjIuMyAxNzIuNyAwIDI1MC45IDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZINDE2YzUzIDAgOTYtNDMgOTYtOTZjMC0xNjUuMS0xMjIuMy0yNDMuMy0xNzktMjc5LjZjLTQuOC0zLjEtOS4yLTUuOS0xMy04LjR6TTI4OS45IDMzNmw0NyA0N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00Ny00NyA0N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Ny00Ny00Ny00N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQ3IDQ3IDQ3LTQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNDcgNDd6XCJdXG59O1xudmFyIGZhRmlsZUV4Y2VsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtZXhjZWwnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYxYzNcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek0xNTUuNyAyNTAuMkwxOTIgMzAyLjFsMzYuMy01MS45YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXMxMy41IDIyLjYgNS45IDMzLjRMMjIxLjMgMzQ0bDQ2LjQgNjYuMmM3LjYgMTAuOSA1IDI1LjgtNS45IDMzLjRzLTI1LjggNS0zMy40LTUuOUwxOTIgMzg1LjhsLTM2LjMgNTEuOWMtNy42IDEwLjktMjIuNiAxMy41LTMzLjQgNS45cy0xMy41LTIyLjYtNS45LTMzLjRMMTYyLjcgMzQ0bC00Ni40LTY2LjJjLTcuNi0xMC45LTUtMjUuOCA1LjktMzMuNHMyNS44LTUgMzMuNCA1Ljl6XCJdXG59O1xudmFyIGZhRmlsZUNvbnRyYWN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY29udHJhY3QnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY1NmNcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek04MCA2NGg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMCA2NGg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptNTQuMiAyNTMuOGMtNi4xIDIwLjMtMjQuOCAzNC4yLTQ2IDM0LjJIODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoOC4yYzcuMSAwIDEzLjMtNC42IDE1LjMtMTEuNGwxNC45LTQ5LjVjMy40LTExLjMgMTMuOC0xOS4xIDI1LjYtMTkuMXMyMi4yIDcuNyAyNS42IDE5LjFsMTEuNiAzOC42YzcuNC02LjIgMTYuOC05LjcgMjYuOC05LjdjMTUuOSAwIDMwLjQgOSAzNy41IDIzLjJsNC40IDguOEgzMDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMjQwYy02LjEgMC0xMS42LTMuNC0xNC4zLTguOGwtOC44LTE3LjdjLTEuNy0zLjQtNS4xLTUuNS04LjgtNS41cy03LjIgMi4xLTguOCA1LjVsLTguOCAxNy43Yy0yLjkgNS45LTkuMiA5LjQtMTUuNyA4LjhzLTEyLjEtNS4xLTEzLjktMTEuM0wxNDQgMzQ5bC05LjggMzIuOHpcIl1cbn07XG52YXIgZmFGaXNoRmlucyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaXNoLWZpbnMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZjJcIiwgXCJNMjc1LjIgMzguNGMtMTAuNi04LTI1LTguNS0zNi4zLTEuNVMyMjIgNTcuMyAyMjQuNiA3MC4zbDkuNyA0OC42Yy0xOS40IDktMzYuOSAxOS45LTUyLjQgMzEuNWMtMTUuMyAxMS41LTI5IDIzLjktNDAuNyAzNi4zTDQ4LjEgMTMyLjRjLTEyLjUtNy4zLTI4LjQtNS4zLTM4LjYgNC45Uy0zIDE2My4zIDQuMiAxNzUuOUw1MCAyNTYgNC4yIDMzNi4xYy03LjIgMTIuNi01IDI4LjQgNS4zIDM4LjZzMjYuMSAxMi4yIDM4LjYgNC45bDkzLjEtNTQuM2MxMS44IDEyLjMgMjUuNCAyNC44IDQwLjcgMzYuM2MxNS41IDExLjYgMzMgMjIuNSA1Mi40IDMxLjVsLTkuNyA0OC42Yy0yLjYgMTMgMy4xIDI2LjMgMTQuMyAzMy4zczI1LjYgNi41IDM2LjMtMS41bDc3LjYtNTguMmM1NC45LTQgMTAxLjUtMjcgMTM3LjItNTMuOGMzOS4yLTI5LjQgNjcuMi02NC43IDgxLjYtODkuNWM1LjgtOS45IDUuOC0yMi4yIDAtMzIuMWMtMTQuNC0yNC44LTQyLjUtNjAuMS04MS42LTg5LjVjLTM1LjgtMjYuOC04Mi4zLTQ5LjgtMTM3LjItNTMuOEwyNzUuMiAzOC40ek0zODQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhQnVpbGRpbmdGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZDVcIiwgXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djgwaDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDQ4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjUxMmg2NFYxOTJINjI0YzguOCAwIDE2LTcuMiAxNi0xNlY0OGMwLTguOC03LjItMTYtMTYtMTZINDgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXVxufTtcbnZhciBmYUZhY2VHcmluQmVhbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tYmVhbScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUxNiwgXCJncmluLWJlYW1cIl0sIFwiZjU4MlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg4LjEgMzEyLjhjMTIuMy0zLjggMjQuMyA2LjkgMTkuMyAxOC43QzM4Mi40IDM5MC42IDMyNC4yIDQzMiAyNTYuMyA0MzJzLTEyNi4yLTQxLjQtMTUxLjEtMTAwLjVjLTUtMTEuOCA3LTIyLjUgMTkuMy0xOC43YzM5LjcgMTIuMiA4NC41IDE5IDEzMS44IDE5czkyLjEtNi44IDEzMS44LTE5em0tMTcwLjUtODRsMCAwIDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMHptMTYwIDBsMCAwLS4yLS4yYy0uMi0uMi0uNC0uNS0uNy0uOWMtLjYtLjgtMS42LTItMi44LTMuNGMtMi41LTIuOC02LTYuNi0xMC4yLTEwLjNjLTguOC03LjgtMTguOC0xNC0yNy43LTE0cy0xOC45IDYuMi0yNy43IDE0Yy00LjIgMy43LTcuNyA3LjUtMTAuMiAxMC4zYy0xLjIgMS40LTIuMiAyLjYtMi44IDMuNGMtLjMgLjQtLjYgLjctLjcgLjlsLS4yIC4yIDAgMCAwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGwwIDAgMCAwIDAgMHpcIl1cbn07XG52YXIgZmFHcmluQmVhbSA9IGZhRmFjZUdyaW5CZWFtO1xudmFyIGZhT2JqZWN0VW5ncm91cCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdvYmplY3QtdW5ncm91cCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjI0OFwiLCBcIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0QzAgMjguNyAyOC43IDAgNjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJIMzI4LjZDMzM5LjYgMTIuOSAzNjAuMyAwIDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNFYyMzIuNmMxOS4xIDExLjEgMzIgMzEuNyAzMiA1NS40YzAgMzUuMy0yOC43IDY0LTY0IDY0Yy0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJIMTE5LjRjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNFYxMTkuNHpNMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNFYyMzIuNmM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRIMzI4LjZjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40VjExOS40Yy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRIMTE5LjR6bTE5MiAzODRjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNFYzNTJoNjR2NDAuNmM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRINTIwLjZjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40VjI3OS40Yy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRoLTQ2Yy01LjQtMTUuNC0xNC42LTI4LjktMjYuNS0zOS42VjE5Mmg3Mi42YzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40VjM5Mi42YzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTIzLjcgMC00NC40LTEyLjktNTUuNC0zMkgzMTEuNHpcIl1cbn07XG52YXIgZmFQb29wID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bvb3AnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY2MTlcIiwgXCJNMjU0LjQgNi42YzMuNS00LjMgOS02LjUgMTQuNS01LjdDMzE1LjggNy4yIDM1MiA0Ny40IDM1MiA5NmMwIDExLjItMS45IDIyLTUuNSAzMkgzNTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxOS4xLTguNCAzNi4zLTIxLjcgNDhINDA4YzM5LjggMCA3MiAzMi4yIDcyIDcyYzAgMjMuMi0xMSA0My44LTI4IDU3YzM0LjEgNS43IDYwIDM1LjMgNjAgNzFjMCAzOS44LTMyLjIgNzItNzIgNzJINzJjLTM5LjggMC03Mi0zMi4yLTcyLTcyYzAtMzUuNyAyNS45LTY1LjMgNjAtNzFjLTE3LTEzLjItMjgtMzMuOC0yOC01N2MwLTM5LjggMzIuMi03MiA3Mi03MmgxMy43QzEwNC40IDIyOC4zIDk2IDIxMS4xIDk2IDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGgxNi4yYzQ0LjEtLjEgNzkuOC0zNS45IDc5LjgtODBjMC05LjItMS41LTE3LjktNC4zLTI2LjFjLTEuOC01LjItLjgtMTEuMSAyLjgtMTUuNHpcIl1cbn07XG52YXIgZmFMb2NhdGlvblBpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NhdGlvbi1waW4nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcIm1hcC1tYXJrZXJcIl0sIFwiZjA0MVwiLCBcIk0zODQgMTkyYzAgODcuNC0xMTcgMjQzLTE2OC4zIDMwNy4yYy0xMi4zIDE1LjMtMzUuMSAxNS4zLTQ3LjQgMEMxMTcgNDM1IDAgMjc5LjQgMCAxOTJDMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyelwiXVxufTtcbnZhciBmYU1hcE1hcmtlciA9IGZhTG9jYXRpb25QaW47XG52YXIgZmFLYWFiYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdrYWFiYScsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODMzMV0sIFwiZjY2YlwiLCBcIk02MCAxMjBsMjI4IDcxLjJMNTE2IDEyMCAyODggNDguOCA2MCAxMjB6TTI3OC41IDEuNWM2LjItMS45IDEyLjktMS45IDE5LjEgMGwyNTYgODBDNTY2LjkgODUuNiA1NzYgOTggNTc2IDExMnYxNiAwIDIxLjJMMjkyLjggMjM3LjdjLTMuMSAxLTYuNCAxLTkuNSAwTDAgMTQ5LjJWMTI4IDExMkMwIDk4IDkuMSA4NS42IDIyLjUgODEuNWwyNTYtODB6bTIzLjkgMjY2LjhMNTc2IDE4Mi44djQ2LjVsLTUyLjggMTYuNWMtOC40IDIuNi0xMy4xIDExLjYtMTAuNSAyMHMxMS42IDEzLjEgMjAgMTAuNUw1NzYgMjYyLjhWNDAwYzAgMTQtOS4xIDI2LjQtMjIuNSAzMC41bC0yNTYgODBjLTYuMiAxLjktMTIuOSAxLjktMTkuMSAwbC0yNTYtODBDOS4xIDQyNi40IDAgNDE0IDAgNDAwVjI2Mi44bDQzLjIgMTMuNWM4LjQgMi42IDE3LjQtMi4xIDIwLTEwLjVzLTIuMS0xNy40LTEwLjUtMjBMMCAyMjkuMlYxODIuOGwyNzMuNyA4NS41YzkuMyAyLjkgMTkuMyAyLjkgMjguNiAwem0tMTg1LjUtMi42Yy04LjQtMi42LTE3LjQgMi4xLTIwIDEwLjVzMi4xIDE3LjQgMTAuNSAyMGw2NCAyMGM4LjQgMi42IDE3LjQtMi4xIDIwLTEwLjVzLTIuMS0xNy40LTEwLjUtMjBsLTY0LTIwem0zNTIgMzAuNWM4LjQtMi42IDEzLjEtMTEuNiAxMC41LTIwcy0xMS42LTEzLjEtMjAtMTAuNWwtNjQgMjBjLTguNCAyLjYtMTMuMSAxMS42LTEwLjUgMjBzMTEuNiAxMy4xIDIwIDEwLjVsNjQtMjB6bS0yMjQgOS41Yy04LjQtMi42LTE3LjQgMi4xLTIwIDEwLjVzMi4xIDE3LjQgMTAuNSAyMGwzOC41IDEyYzkuMyAyLjkgMTkuMyAyLjkgMjguNiAwbDM4LjUtMTJjOC40LTIuNiAxMy4xLTExLjYgMTAuNS0yMHMtMTEuNi0xMy4xLTIwLTEwLjVsLTM4LjUgMTJjLTMuMSAxLTYuNCAxLTkuNSAwbC0zOC41LTEyelwiXVxufTtcbnZhciBmYVRvaWxldFBhcGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvaWxldC1wYXBlcicsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTUzMV0sIFwiZjcxZVwiLCBcIk00NDQuMiAwQzM5Ny4yIDQ5LjYgMzg0IDEyNi41IDM4NCAxOTJjMCAxNTguOC0yNy4zIDI0Ny00Mi43IDI4My45Yy0xMCAyNC0zMy4yIDM2LjEtNTUuNCAzNi4xSDQ4Yy0xMS41IDAtMjIuMi02LjItMjcuOC0xNi4ycy01LjYtMjIuMyAuNC0zMi4yYzkuOC0xNy43IDE1LjQtMzguMiAyMC41LTU3LjdDNTIuMyAzNjIuOCA2NCAyOTMuNSA2NCAxOTJDNjQgODYgMTA3IDAgMTYwIDBINDQ0LjJ6TTUxMiAzODRjLTUzIDAtOTYtODYtOTYtMTkyUzQ1OSAwIDUxMiAwczk2IDg2IDk2IDE5MnMtNDMgMTkyLTk2IDE5MnptMC0xMjhjMTcuNyAwIDMyLTI4LjcgMzItNjRzLTE0LjMtNjQtMzItNjRzLTMyIDI4LjctMzIgNjRzMTQuMyA2NCAzMiA2NHpNMTQ0IDIwOGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem02NCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptODAtMTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpcIl1cbn07XG52YXIgZmFIZWxtZXRTYWZldHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVsbWV0LXNhZmV0eScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaGFyZC1oYXRcIiwgXCJoYXQtaGFyZFwiXSwgXCJmODA3XCIsIFwiTTI1NiAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2Mi4zIDk5LjZjMCA1LjYtNC41IDEwLjEtMTAuMSAxMC4xYy0zLjYgMC03LTEuOS04LjgtNS4xTDE1Ny4xIDg3QzgzIDEyMy41IDMyIDE5OS44IDMyIDI4OHY2NEg1NDRsMC02Ni40Yy0uOS04Ny4yLTUxLjctMTYyLjQtMTI1LjEtMTk4LjZsLTQ4IDgzLjljLTEuOCAzLjItNS4yIDUuMS04LjggNS4xYy01LjYgMC0xMC4xLTQuNS0xMC4xLTEwLjFWNjYuMyA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgyNTZ6TTE2LjYgMzg0QzcuNCAzODQgMCAzOTEuNCAwIDQwMC42YzAgNC43IDIgOS4yIDUuOCAxMS45QzI3LjUgNDI4LjQgMTExLjggNDgwIDI4OCA0ODBzMjYwLjUtNTEuNiAyODIuMi02Ny41YzMuOC0yLjggNS44LTcuMiA1LjgtMTEuOWMwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZIMTYuNnpcIl1cbn07XG52YXIgZmFIYXJkSGF0ID0gZmFIZWxtZXRTYWZldHk7XG52YXIgZmFIYXRIYXJkID0gZmFIZWxtZXRTYWZldHk7XG52YXIgZmFFamVjdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlamVjdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzkxNjddLCBcImYwNTJcIiwgXCJNMjI0IDMyYzEzLjUgMCAyNi4zIDUuNiAzNS40IDE1LjZsMTc2IDE5MmMxMi45IDE0IDE2LjIgMzQuMyA4LjYgNTEuOFM0MTkgMzIwIDQwMCAzMjBINDhjLTE5IDAtMzYuMy0xMS4yLTQzLjktMjguN3MtNC4zLTM3LjcgOC42LTUxLjhsMTc2LTE5MkMxOTcuNyAzNy42IDIxMC41IDMyIDIyNCAzMnpNMCA0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhINDAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OHpcIl1cbn07XG52YXIgZmFDaXJjbGVSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTgzOCwgXCJhcnJvdy1hbHQtY2lyY2xlLXJpZ2h0XCJdLCBcImYzNWFcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMEEyNTYgMjU2IDAgMSAwIDAgMjU2ek0yOTQuNiAxMzUuMWw5OS45IDEwNy4xYzMuNSAzLjggNS41IDguNyA1LjUgMTMuOHMtMiAxMC4xLTUuNSAxMy44TDI5NC42IDM3Ni45Yy00LjIgNC41LTEwLjEgNy4xLTE2LjMgNy4xQzI2NiAzODQgMjU2IDM3NCAyNTYgMzYxLjdsMC01Ny43LTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTU3LjdjMC0xMi4zIDEwLTIyLjMgMjIuMy0yMi4zYzYuMiAwIDEyLjEgMi42IDE2LjMgNy4xelwiXVxufTtcbnZhciBmYUFycm93QWx0Q2lyY2xlUmlnaHQgPSBmYUNpcmNsZVJpZ2h0O1xudmFyIGZhUGxhbmVDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZS1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTVcIiwgXCJNMjU2IDBjLTM1IDAtNjQgNTkuNS02NCA5My43djg0LjZMOC4xIDI4My40Yy01IDIuOC04LjEgOC4yLTguMSAxMy45djY1LjVjMCAxMC42IDEwLjIgMTguMyAyMC40IDE1LjRsMTcxLjYtNDkgMCA3MC45LTU3LjYgNDMuMmMtNCAzLTYuNCA3LjgtNi40IDEyLjh2NDJjMCA3LjggNi4zIDE0IDE0IDE0YzEuMyAwIDIuNi0uMiAzLjktLjVMMjU2IDQ4MGwxMTAuMSAzMS41YzEuMyAuNCAyLjYgLjUgMy45IC41YzYgMCAxMS4xLTMuNyAxMy4xLTlDMzQ0LjUgNDcwLjcgMzIwIDQyMi4yIDMyMCAzNjhjMC02MC42IDMwLjYtMTE0IDc3LjEtMTQ1LjZMMzIwIDE3OC4zVjkzLjdDMzIwIDU5LjUgMjkyIDAgMjU2IDB6TTY0MCAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ4MCAzODUuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdXG59O1xudmFyIGZhRmFjZVJvbGxpbmdFeWVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Utcm9sbGluZy1leWVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTgwLCBcIm1laC1yb2xsaW5nLWV5ZXNcIl0sIFwiZjVhNVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDM2OEgzMjBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTkyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0zMi0xNDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40Yy0zLjcgNS4yLTUuOCAxMS42LTUuOCAxOC40YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02LjktMi4yLTEzLjItNS44LTE4LjRDMjA4LjUgMTc1LjYgMjI0IDE5OCAyMjQgMjI0em0xMjggNjRjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjYgMTUuNS00OC40IDM3LjgtNTguNGMtMy43IDUuMi01LjggMTEuNi01LjggMTguNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40QzQwMC41IDE3NS42IDQxNiAxOTggNDE2IDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NHpcIl1cbn07XG52YXIgZmFNZWhSb2xsaW5nRXllcyA9IGZhRmFjZVJvbGxpbmdFeWVzO1xudmFyIGZhT2JqZWN0R3JvdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnb2JqZWN0LWdyb3VwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjQ3XCIsIFwiTTMyIDExOS40QzEyLjkgMTA4LjQgMCA4Ny43IDAgNjRDMCAyOC43IDI4LjcgMCA2NCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMkg0NTYuNkM0NjcuNiAxMi45IDQ4OC4zIDAgNTEyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40VjM5Mi42YzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTIzLjcgMC00NC40LTEyLjktNTUuNC0zMkgxMTkuNGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjExOS40ek00NTYuNiA5NkgxMTkuNGMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40VjM5Mi42YzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNEg0NTYuNmM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRWMTE5LjRjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNHpNMTI4IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMkgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjB6TTI1NiAzMjBoMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjI0aDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzIwelwiXVxufTtcbnZhciBmYUNoYXJ0TGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1saW5lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsaW5lLWNoYXJ0XCJdLCBcImYyMDFcIiwgXCJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRWNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwSDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjY0em00MDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDMyMCAyMTAuN2wtNTcuNC01Ny40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTEyIDExMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyNDAgMjIxLjNsNTcuNCA1Ny40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6XCJdXG59O1xudmFyIGZhTGluZUNoYXJ0ID0gZmFDaGFydExpbmU7XG52YXIgZmFNYXNrVmVudGlsYXRvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrLXZlbnRpbGF0b3InLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjRcIiwgXCJNMTU5LjEgMTc2QzEzOS40IDIxOS4yIDEyOCAyNjQuNyAxMjggMzAwLjhjMCAxNS45IDIuMiAzMS40IDYuMyA0NmwtMzEuOC03LjlDNzAuNSAzMzAuOSA0OCAzMDIuMSA0OCAyNjlWMTg0YzAtNC40IDMuNi04IDgtOEgxNTkuMXptMjYtNDhINTZjLTMwLjkgMC01NiAyNS4xLTU2IDU2djg1YzAgNTUuMSAzNy41IDEwMy4xIDkwLjkgMTE2LjRsNzEuMyAxNy44YzIyLjcgMzAuNSA1NS40IDU0LjEgOTMuOCA2Ni42VjM5My4zYy0xOS43LTE2LjQtMzItNDAuMy0zMi02Ni45YzAtNDkuNSA0My0xMzQuNCA5Ni0xMzQuNGM1Mi41IDAgOTYgODQuOSA5NiAxMzQuNGMwIDI2LjctMTIuNCA1MC40LTMyIDY2Ljh2NzYuNmMzOC0xMi42IDcwLjYtMzYgOTMuNS02Ni40bDcxLjYtMTcuOUM2MDIuNSAzNzIuMSA2NDAgMzI0LjEgNjQwIDI2OVYxODRjMC0zMC45LTI1LjEtNTYtNTYtNTZINDU0LjVDNDE5LjcgNzMuOCAzNzIuMSAzMiAzMjAgMzJjLTUyLjYgMC0xMDAuMiA0MS44LTEzNC45IDk2em0yOTUuNiA0OEg1ODRjNC40IDAgOCAzLjYgOCA4djg1YzAgMzMtMjIuNSA2MS44LTU0LjUgNjkuOWwtMzEuOCA4YzQuMi0xNC43IDYuNC0zMC4xIDYuNC00Ni4xYzAtMzYuMS0xMS42LTgxLjYtMzEuMy0xMjQuOHpNMjg4IDMyMFY1MTJoNjRWMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUFycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4NTk0XSwgXCJmMDYxXCIsIFwiTTQzOC42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wzMzguOCAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMwNi43IDBMMjMzLjQgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHpcIl1cbn07XG52YXIgZmFTaWduc1Bvc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2lnbnMtcG9zdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibWFwLXNpZ25zXCJdLCBcImYyNzdcIiwgXCJNMjI0IDMySDY0QzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0NDEuNGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDQ4LTQ4YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC00OC00OGMtMy0zLTcuMS00LjctMTEuMy00LjdIMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyek00ODAgMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI4OFYxOTJIMjI0djMySDcwLjZjLTQuMiAwLTguMyAxLjctMTEuMyA0LjdsLTQ4IDQ4Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0OCA0OGMzIDMgNy4xIDQuNyAxMS4zIDQuN0g0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjU2ek0yODggNDgwVjM4NEgyMjR2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpcIl1cbn07XG52YXIgZmFNYXBTaWducyA9IGZhU2lnbnNQb3N0O1xudmFyIGZhQ2FzaFJlZ2lzdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nhc2gtcmVnaXN0ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ODhcIiwgXCJNNjQgMEM0Ni4zIDAgMzIgMTQuMyAzMiAzMlY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg4MHYzMkg4N2MtMzEuNiAwLTU4LjUgMjMuMS02My4zIDU0LjRMMS4xIDM2NC4xQy40IDM2OC44IDAgMzczLjYgMCAzNzguNFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjM3OC40YzAtNC44LS40LTkuNi0xLjEtMTQuNEw0ODguMiAyMTQuNEM0ODMuNSAxODMuMSA0NTYuNiAxNjAgNDI1IDE2MEgyMDhWMTI4aDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDY0ek05NiA0OEgyNTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6TTY0IDQzMmMwLTguOCA3LjItMTYgMTYtMTZINDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZ6bTQ4LTE2OGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6bTEyMC0yNGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0xNjAgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNMzI4IDI0MGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0yNTYgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNNDI0IDI0MGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0zNTIgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpcIl1cbn07XG52YXIgZmFQZXJzb25DaXJjbGVRdWVzdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tY2lyY2xlLXF1ZXN0aW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTQyXCIsIFwiTTExMiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45TDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTUyek00MzIgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyNDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek0zNjggMzIxLjZWMzI4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ2LTYuNGMwLTUuMyA0LjMtOS42IDkuNi05LjZoNDAuNWM3LjcgMCAxMy45IDYuMiAxMy45IDEzLjljMCA1LjItMi45IDkuOS03LjQgMTIuM2wtMzIgMTYuOGMtNS4zIDIuOC04LjYgOC4yLTguNiAxNC4yVjM4NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2di01LjFsMjMuNS0xMi4zYzE1LjEtNy45IDI0LjUtMjMuNiAyNC41LTQwLjZjMC0yNS40LTIwLjYtNDUuOS00NS45LTQ1LjlINDA5LjZjLTIzIDAtNDEuNiAxOC42LTQxLjYgNDEuNnpcIl1cbn07XG52YXIgZmFIID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2gnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMDRdLCBcIjQ4XCIsIFwiTTMyMCAyNTZsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYxOTJMNjQgMTkyIDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0VjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyIDI1NiAwelwiXVxufTtcbnZhciBmYVRhcnAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFycCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU3YlwiLCBcIk01NzYgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzNTIgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NzZWMTI4ek00NDggNDQ4TDU3NiAzMjBINDQ4bDAgMTI4ek05NiAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYVNjcmV3ZHJpdmVyV3JlbmNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjcmV3ZHJpdmVyLXdyZW5jaCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1widG9vbHNcIl0sIFwiZjdkOVwiLCBcIk03OC42IDVDNjkuMS0yLjQgNTUuNi0xLjUgNDcgN0w3IDQ3Yy04LjUgOC41LTkuNCAyMi0yLjEgMzEuNmw4MCAxMDRjNC41IDUuOSAxMS42IDkuNCAxOSA5LjRoNTQuMWwxMDkgMTA5Yy0xNC43IDI5LTEwIDY1LjQgMTQuMyA4OS42bDExMiAxMTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTExMi0xMTJjLTI0LjItMjQuMi02MC42LTI5LTg5LjYtMTQuM2wtMTA5LTEwOVYxMDRjMC03LjUtMy41LTE0LjUtOS40LTE5TDc4LjYgNXpNMTkuOSAzOTYuMUM3LjIgNDA4LjggMCA0MjYuMSAwIDQ0NC4xQzAgNDgxLjYgMzAuNCA1MTIgNjcuOSA1MTJjMTggMCAzNS4zLTcuMiA0OC0xOS45TDIzMy43IDM3NC4zYy03LjgtMjAuOS05LTQzLjYtMy42LTY1LjFsLTYxLjctNjEuN0wxOS45IDM5Ni4xek01MTIgMTQ0YzAtMTAuNS0xLjEtMjAuNy0zLjItMzAuNWMtMi40LTExLjItMTYuMS0xNC4xLTI0LjItNmwtNjMuOSA2My45Yy0zIDMtNy4xIDQuNy0xMS4zIDQuN0gzNTJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMDIuNmMwLTQuMiAxLjctOC4zIDQuNy0xMS4zbDYzLjktNjMuOWM4LjEtOC4xIDUuMi0yMS44LTYtMjQuMkMzODguNyAxLjEgMzc4LjUgMCAzNjggMEMyODguNSAwIDIyNCA2NC41IDIyNCAxNDRsMCAuOCA4NS4zIDg1LjNjMzYtOS4xIDc1LjggLjUgMTA0IDI4LjdMNDI5IDI3NC41YzQ5LTIzIDgzLTcyLjggODMtMTMwLjV6TTU2IDQzMmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwelwiXVxufTtcbnZhciBmYVRvb2xzID0gZmFTY3Jld2RyaXZlcldyZW5jaDtcbnZhciBmYUFycm93c1RvRXllID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10by1leWUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YmZcIiwgXCJNMTUgMTVDMjQuNCA1LjcgMzkuNiA1LjcgNDkgMTVsNjMgNjNWNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNEg0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNEg3OC4xTDE1IDQ5QzUuNyAzOS42IDUuNyAyNC40IDE1IDE1ek0xMzMuNSAyNDMuOUMxNTguNiAxOTMuNiAyMjIuNyAxMTIgMzIwIDExMnMxNjEuNCA4MS42IDE4Ni41IDEzMS45YzMuOCA3LjYgMy44IDE2LjUgMCAyNC4yQzQ4MS40IDMxOC40IDQxNy4zIDQwMCAzMjAgNDAwcy0xNjEuNC04MS42LTE4Ni41LTEzMS45Yy0zLjgtNy42LTMuOC0xNi41IDAtMjQuMnpNMzIwIDMyMGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNNTkxIDE1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjMgNjNINjAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDUwNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNFY3OC4xbDYzLTYzek0xNSA0OTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDYzLTYzSDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDk2YzEzLjMgMCAyNCAxMC43IDI0IDI0djk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQzMy45TDQ5IDQ5N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6bTU3NiAwbC02My02M1Y0NzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMzc2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDk2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2MS45bDYzIDYzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDB6XCJdXG59O1xudmFyIGZhUGx1Z0NpcmNsZUJvbHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1Zy1jaXJjbGUtYm9sdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU1YlwiLCBcIk05NiAwQzc4LjMgMCA2NCAxNC4zIDY0IDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yODggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnYzMmMwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0MTIuOGMxMi4zLTIuNSAyNC4xLTYuNCAzNS4xLTExLjVjLTIuMS0xMC44LTMuMS0yMS45LTMuMS0zMy4zYzAtODAuMyA1My44LTE0OCAxMjcuMy0xNjkuMmMuNS0yLjIgLjctNC41IC43LTYuOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTQ3LjktMjI1YzQuMyAzLjcgNS40IDkuOSAyLjYgMTQuOUw0NTIuNCAzNTZINDg4YzUuMiAwIDkuOCAzLjMgMTEuNCA4LjJzLS4xIDEwLjMtNC4yIDEzLjRsLTk2IDcyYy00LjUgMy40LTEwLjggMy4yLTE1LjEtLjZzLTUuNC05LjktMi42LTE0LjlMNDExLjYgMzgwSDM3NmMtNS4yIDAtOS44LTMuMy0xMS40LTguMnMuMS0xMC4zIDQuMi0xMy40bDk2LTcyYzQuNS0zLjQgMTAuOC0zLjIgMTUuMSAuNnpcIl1cbn07XG52YXIgZmFIZWFydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODE1MywgMTI4MTU0LCAxMjgxNTUsIDEyODE1NiwgMTI4NDIwLCAxMjkyOTMsIDEyOTI5NCwgMTI5NTA1LCA5ODI5LCAxMDA4NCwgNjE1NzhdLCBcImYwMDRcIiwgXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOUw0NjQuNCAzMDAuNGMzMC40LTI4LjMgNDcuNi02OCA0Ny42LTEwOS41di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41elwiXVxufTtcbnZhciBmYU1hcnNBbmRWZW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLWFuZC12ZW51cycsXG4gIGljb246IFs1MTIsIDUxMiwgWzk4OTNdLCBcImYyMjRcIiwgXCJNMzM3LjggMTQuOEMzNDEuNSA1LjggMzUwLjMgMCAzNjAgMEg0NzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRWMTM2YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTI0LjcgMjQuN0M0MDcgMTYzLjMgNDE2IDE5Mi42IDQxNiAyMjRjMCA4MC4yLTU5IDE0Ni42LTEzNiAxNTguMlY0MDhoMjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwdjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQ1NkgyMDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMjRWMzgyLjJDMTU1IDM3MC42IDk2IDMwNC4yIDk2IDIyNGMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MGMzOS42IDAgNzUuOSAxNC40IDEwMy44IDM4LjJMMzgyLjEgODAgMzQzIDQxYy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yek00NDggNDhsMCAwaDB2MHpNMzUyIDIyNGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6XCJdXG59O1xudmFyIGZhSG91c2VVc2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLXVzZXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImhvbWUtdXNlclwiXSwgXCJlMWIwXCIsIFwiTTU3NS44IDI1NS41YzAgMTgtMTUgMzIuMS0zMiAzMi4xaC0zMmwuNyAxNjAuMmMuMiAzNS41LTI4LjUgNjQuMy02NCA2NC4zSDEyOC4xYy0zNS4zIDAtNjQtMjguNy02NC02NFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTY0LjggMjMxLjVjOCA3IDEyIDE1IDExIDI0ek0zNTIgMjI0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHptLTk2IDk2Yy00NC4yIDAtODAgMzUuOC04MCA4MGMwIDguOCA3LjIgMTYgMTYgMTZIMzg0YzguOCAwIDE2LTcuMiAxNi0xNmMwLTQ0LjItMzUuOC04MC04MC04MEgyNTZ6XCJdXG59O1xudmFyIGZhSG9tZVVzZXIgPSBmYUhvdXNlVXNlcjtcbnZhciBmYUR1bXBzdGVyRmlyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkdW1wc3Rlci1maXJlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzk0XCIsIFwiTTQ5LjcgMzJsOTAuOCAwTDExNC45IDE2MGwtOTQgMEM5LjMgMTYwIDAgMTUwLjcgMCAxMzkuMWMwLTIuMSAuMy00LjEgLjktNi4xTDI2LjggNDguOUMyOS45IDM4LjkgMzkuMiAzMiA0OS43IDMyek0yNzIgMTYwbC0xMjQuNSAwTDE3My4xIDMyIDI3MiAzMmwwIDEyOHptMzIgMGwwLTEyOCA5OC45IDAgMTQuNCA3Mi4xYy0xLjcgMS4xLTMuMyAyLjQtNC44IDMuOGMtMTguNCAxNi40LTM1LjQgMzQtNTAuNSA1Mi4xbC01OCAwem0yMDkuOS0yMy43Yy0xLjcgMS42LTMuNCAzLjItNSA0LjhDNDk4IDEyOS42IDQ4Ni43IDExOC42IDQ3NSAxMDhjLTcuNi02LjktMTctMTAuOC0yNi42LTExLjhMNDM1LjUgMzJsOTAuOCAwYzEwLjUgMCAxOS44IDYuOSAyMi45IDE2LjlMNTc1LjEgMTMzYy4yIC43IC40IDEuNCAuNSAyLjFjLTE3LjgtMTUtNDQuMy0xNC42LTYxLjcgMS4yek0zMjUuMiAyMTAuN0MzMDQuMyAyNDQuNSAyODggMjgyLjkgMjg4IDMxOC4xYzAgNDkuMyAxOC42IDk1LjIgNDkuNiAxMjkuOUwxMjggNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDQ0IDI4OGwtMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0IDAtNC0zMiAzMDUuNSAwYy00LjQgNi4yLTguNSAxMi41LTEyLjMgMTguN3ptMTgwLjYtMzQuNUw1MTggMTYyLjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOWM3LjIgMCAxNC4zIDIuNiAxOS45IDcuOGMxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjZDNjI5IDI1OS4yIDY0MCAyOTAuMiA2NDAgMzIwLjJDNjQwIDQwOC44IDU2OC43IDQ4MCA0ODAgNDgwYy04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44YzAtMzcuMyAxNi03My40IDM2LjgtMTA0LjVjMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4yYzUuNy01LjIgMTMuMS03LjcgMjAuMy03LjVjMTQuMSAuMyAyMy44IDExLjQgMzIuNyAyMS42YzAgMCAwIDAgMCAwYzIgMi4zIDQgNC42IDYgNi43bDE5IDE5Ljl6TTU0NCAzNjguMmMwLTM2LjUtMzctNzMtNTQuOC04OC40Yy01LjQtNC43LTEzLjEtNC43LTE4LjUgMEM0NTMgMjk1LjEgNDE2IDMzMS42IDQxNiAzNjguMmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbnZhciBmYUhvdXNlQ3JhY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY3JhY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUzYjFcIiwgXCJNNTQzLjggMjg3LjZjMTcgMCAzMi0xNCAzMi0zMi4xYzEtOS0zLTE3LTExLTI0TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMyVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgyMzAuNGwtMzEuMy01Mi4yYy00LjEtNi44LTIuNi0xNS41IDMuNS0yMC41TDI4OCAzNjhsLTYwLjItODIuOGMtMTAuOS0xNSA4LjItMzMuNSAyMi44LTIybDExNy45IDkyLjZjOCA2LjMgOC4yIDE4LjQgLjQgMjQuOUwyODggNDQ4bDM4LjQgNjRINDQ4LjVjMzUuNSAwIDY0LjItMjguOCA2NC02NC4zbC0uNy0xNjAuMmgzMnpcIl1cbn07XG52YXIgZmFNYXJ0aW5pR2xhc3NDaXRydXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFydGluaS1nbGFzcy1jaXRydXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImNvY2t0YWlsXCJdLCBcImY1NjFcIiwgXCJNNDMyIDI0MGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtMzUuNSAwLTY2LjYgMTkuMy04My4yIDQ4SDI5Ni4yQzMxNiA0MC4xIDM2OS4zIDAgNDMyIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRzLTY0LjUgMTQ0LTE0NCAxNDRjLTI3LjcgMC01My41LTcuOC03NS41LTIxLjNsMzUuNC0zNS40YzEyLjIgNS42IDI1LjggOC43IDQwLjEgOC43ek0xLjggMTQyLjhDNS41IDEzMy44IDE0LjMgMTI4IDI0IDEyOEgzOTJjOS43IDAgMTguNSA1LjggMjIuMiAxNC44czEuNyAxOS4zLTUuMiAyNi4ybC0xNzcgMTc3VjQ2NGg2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMDggMTIwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDY0VjM0NS45TDcgMTY5Yy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yelwiXVxufTtcbnZhciBmYUNvY2t0YWlsID0gZmFNYXJ0aW5pR2xhc3NDaXRydXM7XG52YXIgZmFGYWNlU3VycHJpc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1zdXJwcmlzZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1OCwgXCJzdXJwcmlzZVwiXSwgXCJmNWMyXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYuNCAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjU2IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG52YXIgZmFTdXJwcmlzZSA9IGZhRmFjZVN1cnByaXNlO1xudmFyIGZhQm90dGxlV2F0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm90dGxlLXdhdGVyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNGM1XCIsIFwiTTEyMCAwbDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MEw5NiA2NGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0zMiAxNjcuNWMwLTE5LjUgMTAtMzcuNiAyNi42LTQ3LjlsMTUuOC05LjlDODguNyAxMDAuNyAxMDUuMiA5NiAxMjIuMSA5Nmw3NS44IDBjMTYuOSAwIDMzLjQgNC43IDQ3LjcgMTMuN2wxNS44IDkuOUMyNzggMTI5LjkgMjg4IDE0OCAyODggMTY3LjVjMCAxNy03LjUgMzIuMy0xOS40IDQyLjZDMjgwLjYgMjIxLjcgMjg4IDIzOCAyODggMjU2YzAgMTkuMS04LjQgMzYuMy0yMS43IDQ4YzEzLjMgMTEuNyAyMS43IDI4LjkgMjEuNyA0OHMtOC40IDM2LjMtMjEuNyA0OGMxMy4zIDExLjcgMjEuNyAyOC45IDIxLjcgNDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTE5LjEgOC40LTM2LjMgMjEuNy00OEM0MC40IDM4OC4zIDMyIDM3MS4xIDMyIDM1MnM4LjQtMzYuMyAyMS43LTQ4QzQwLjQgMjkyLjMgMzIgMjc1LjEgMzIgMjU2YzAtMTggNy40LTM0LjMgMTkuNC00NS45QzM5LjUgMTk5LjcgMzIgMTg0LjUgMzIgMTY3LjV6TTk2IDI0MGMwIDguOCA3LjIgMTYgMTYgMTZsOTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtOTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsOTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtOTYgMHpcIl1cbn07XG52YXIgZmFDaXJjbGVQYXVzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtcGF1c2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5MiwgXCJwYXVzZS1jaXJjbGVcIl0sIFwiZjI4YlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjI0IDE5MlYzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwVjMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl1cbn07XG52YXIgZmFQYXVzZUNpcmNsZSA9IGZhQ2lyY2xlUGF1c2U7XG52YXIgZmFUb2lsZXRQYXBlclNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvaWxldC1wYXBlci1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA3MlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMDkuNy04NkM1NjkuOSAzNzQgNjA4IDI5MS45IDYwOCAxOTJDNjA4IDg2IDU2NSAwIDUxMiAwcy05NiA4Ni05NiAxOTJjMCA0OS4xIDkuMiA5My45IDI0LjQgMTI3LjlsLTU5LTQ2LjJjMS42LTI0LjggMi42LTUyIDIuNi04MS42YzAtNjUuNSAxMy4yLTE0Mi40IDYwLjItMTkySDE2MGMtMjQuOCAwLTQ3LjQgMTguOC02NC40IDQ5LjZMMzguOCA1LjF6TTM2Ny4zIDM4NS40TDY2LjUgMTQ4LjRDNjQuOSAxNjIuNCA2NCAxNzcgNjQgMTkyYzAgMTAxLjUtMTEuNyAxNzAuOC0yMyAyMTMuOWMtNS4xIDE5LjQtMTAuNyAzOS45LTIwLjUgNTcuN2MtNS45IDkuOS02LjEgMjIuMS0uNCAzMi4yUzM2LjUgNTEyIDQ4IDUxMkgyODUuOWMyMi4zIDAgNDUuNC0xMi4xIDU1LjQtMzYuMWM3LjQtMTcuNyAxNy41LTQ3LjIgMjYtOTAuNnpNNTQ0IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0czMyIDI4LjcgMzIgNjR6XCJdXG59O1xudmFyIGZhQXBwbGVXaG9sZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcHBsZS13aG9sZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzgyMiwgMTI3ODIzLCBcImFwcGxlLWFsdFwiXSwgXCJmNWQxXCIsIFwiTTIyNCAxMTJjLTguOCAwLTE2LTcuMi0xNi0xNlY4MGMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNmM4LjggMCAxNiA3LjIgMTYgMTZWMzJjMCA0NC4yLTM1LjggODAtODAgODBIMjI0ek0wIDI4OGMwLTc2LjMgMzUuNy0xNjAgMTEyLTE2MGMyNy4zIDAgNTkuNyAxMC4zIDgyLjcgMTkuM2MxOC44IDcuMyAzOS45IDcuMyA1OC43IDBjMjIuOS04LjkgNTUuNC0xOS4zIDgyLjctMTkuM2M3Ni4zIDAgMTEyIDgzLjcgMTEyIDE2MGMwIDEyOC04MCAyMjQtMTYwIDIyNGMtMTYuNSAwLTM4LjEtNi42LTUxLjUtMTEuM2MtOC4xLTIuOC0xNi45LTIuOC0yNSAwYy0xMy40IDQuNy0zNSAxMS4zLTUxLjUgMTEuM0M4MCA1MTIgMCA0MTYgMCAyODh6XCJdXG59O1xudmFyIGZhQXBwbGVBbHQgPSBmYUFwcGxlV2hvbGU7XG52YXIgZmFLaXRjaGVuU2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tpdGNoZW4tc2V0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTFhXCIsIFwiTTI0MCAxNDRBOTYgOTYgMCAxIDAgNDggMTQ0YTk2IDk2IDAgMSAwIDE5MiAwem00NC40IDMyQzI2OS45IDI0MC4xIDIxMi41IDI4OCAxNDQgMjg4QzY0LjUgMjg4IDAgMjIzLjUgMCAxNDRTNjQuNSAwIDE0NCAwYzY4LjUgMCAxMjUuOSA0Ny45IDE0MC40IDExMmg3MS44YzguOC05LjggMjEuNi0xNiAzNS44LTE2SDQ5NmMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgzOTJjLTE0LjIgMC0yNy02LjItMzUuOC0xNkgyODQuNHpNMTQ0IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00MDAgMjQwYzEzLjMgMCAyNCAxMC43IDI0IDI0djhoOTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDk2di04YzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yODggNDY0VjM1Mkg1MTJWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDMzNmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6TTQ4IDMyMGg4MCAxNiAzMmMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCA2NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNjB2MzJoMTZ6TTI0IDQ2NEgyMDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdXG59O1xudmFyIGZhUiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTE0XSwgXCI1MlwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjI4OCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjBoOTUuM0wyNjEuOCA0NjYuNGMxMC4xIDE0LjUgMzAuMSAxOCA0NC42IDcuOXMxOC0zMC4xIDcuOS00NC42TDIzMC4xIDMwOS41QzI4Mi44IDI4OC4xIDMyMCAyMzYuNCAzMjAgMTc2YzAtNzkuNS02NC41LTE0NC0xNDQtMTQ0SDY0ek0xNzYgMjU2SDY0Vjk2SDE3NmM0NC4yIDAgODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVtcGVyYXR1cmUtcXVhcnRlcicsXG4gIGljb246IFszMjAsIDUxMiwgW1widGVtcGVyYXR1cmUtMVwiLCBcInRoZXJtb21ldGVyLTFcIiwgXCJ0aGVybW9tZXRlci1xdWFydGVyXCJdLCBcImYyY2FcIiwgXCJNMTYwIDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OFYyNzYuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41Qzg2LjIgMzMyLjYgODAgMzQ5LjUgODAgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNVYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDExMkM0OCA1MC4yIDk4LjEgMCAxNjAgMHMxMTIgNTAuMSAxMTIgMTEyVjI3Ni41YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTMzLjIgMTEuMi02My44IDMwLjEtODguMWMuOS0xLjIgMS41LTIuMiAxLjctMi44Yy4xLS4zIC4yLS41IC4yLS42VjExMnpNMjA4IDM2OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNWMjcyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2NTAuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmUxID0gZmFUZW1wZXJhdHVyZVF1YXJ0ZXI7XG52YXIgZmFUaGVybW9tZXRlcjEgPSBmYVRlbXBlcmF0dXJlUXVhcnRlcjtcbnZhciBmYVRoZXJtb21ldGVyUXVhcnRlciA9IGZhVGVtcGVyYXR1cmVRdWFydGVyO1xudmFyIGZhQ3ViZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjdWJlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMWIyXCIsIFwiTTIzNC41IDUuN2MxMy45LTUgMjkuMS01IDQzLjEgMGwxOTIgNjguNkM0OTUgODMuNCA1MTIgMTA3LjUgNTEyIDEzNC42VjM3Ny40YzAgMjctMTcgNTEuMi00Mi41IDYwLjNsLTE5MiA2OC42Yy0xMy45IDUtMjkuMSA1LTQzLjEgMGwtMTkyLTY4LjZDMTcgNDI4LjYgMCA0MDQuNSAwIDM3Ny40VjEzNC42YzAtMjcgMTctNTEuMiA0Mi41LTYwLjNsMTkyLTY4LjZ6TTI1NiA2Nkw4Mi4zIDEyOCAyNTYgMTkwbDE3My43LTYyTDI1NiA2NnptMzIgMzY4LjZsMTYwLTU3LjF2LTE4OEwyODggMjQ2LjZ2MTg4elwiXVxufTtcbnZhciBmYUJpdGNvaW5TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JpdGNvaW4tc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTBiNFwiLCBcIk00OCAzMkM0OCAxNC4zIDYyLjMgMCA4MCAwczMyIDE0LjMgMzIgMzJWNjRoMzJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY2NGMwIDEuNS0uMSAzLjEtLjMgNC41QzI1NC4xIDgyLjIgMjg4IDEyNS4xIDI4OCAxNzZjMCAyNC4yLTcuNyA0Ni42LTIwLjcgNjQuOWMzMS43IDE5LjggNTIuNyA1NSA1Mi43IDk1LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDExMnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhINDEuN0MxOC43IDQ0OCAwIDQyOS4zIDAgNDA2LjNWMjg4IDI2NS43IDIyNCAxMDEuNkMwIDgwLjggMTYuOCA2NCAzNy42IDY0SDQ4VjMyek02NCAyMjRIMTc2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDY0djk2em0xMTIgNjRINjR2OTZIMjA4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDE3NnpcIl1cbn07XG52YXIgZmFTaGllbGREb2cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hpZWxkLWRvZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU3M1wiLCBcIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMmMuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjJjMTYuNyA4IDM2LjEgOCA1Mi44IDBDNDU0LjcgNDIwLjcgNDk1LjUgMjM5LjIgNDk2IDE0MGMuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNjAuOSAyODYuMmM0LjggMS4yIDkuOSAxLjggMTUuMSAxLjhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwaDQ0LjJjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN0wzMjAgMTkyaDY0YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDQ0LjItMzUuOCA4MC04MCA4MEgyNzJ2NTAuN2MwIDcuMy01LjkgMTMuMy0xMy4zIDEzLjNjLTEuOCAwLTMuNi0uNC01LjItMS4xbC05OC43LTQyLjNjLTYuNi0yLjgtMTAuOC05LjMtMTAuOC0xNi40YzAtMi44IC42LTUuNSAxLjktOGwxNS0zMHpNMTYwIDE2MGg0MCA4djMyIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE3NmMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbnZhciBmYVNvbGFyUGFuZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc29sYXItcGFuZWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1YmFcIiwgXCJNMTIyLjIgMEM5MS43IDAgNjUuNSAyMS41IDU5LjUgNTEuNEw4LjMgMzA3LjRDLjQgMzQ3IDMwLjYgMzg0IDcxIDM4NEgyODh2NjRIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNTJWMzg0SDU2OWM0MC40IDAgNzAuNy0zNi45IDYyLjgtNzYuNmwtNTEuMi0yNTZDNTc0LjUgMjEuNSA1NDguMyAwIDUxNy44IDBIMTIyLjJ6TTI2MC45IDY0SDM3OS4xbDEwLjQgMTA0aC0xMzlMMjYwLjkgNjR6TTIwMi4zIDE2OEgxMDEuNEwxMjIuMiA2NGg5MC40TDIwMi4zIDE2OHpNOTEuOCAyMTZIMTk3LjVMMTg3LjEgMzIwSDcxTDkxLjggMjE2em0xNTMuOSAwSDM5NC4zbDEwLjQgMTA0LTE2OS40IDAgMTAuNC0xMDR6bTE5Ni44IDBINTQ4LjJMNTY5IDMyMGgtMTE2TDQ0Mi41IDIxNnptOTYtNDhINDM3LjdMNDI3LjMgNjRoOTAuNGwzMS40LTYuM0w1MTcuOCA2NGwyMC44IDEwNHpcIl1cbn07XG52YXIgZmFMb2NrT3BlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NrLW9wZW4nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYzYzFcIiwgXCJNMzUyIDE0NGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwdjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQ0QzU3NiA2NC41IDUxMS41IDAgNDMyIDBTMjg4IDY0LjUgMjg4IDE0NHY0OEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFYyNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzUyVjE0NHpcIl1cbn07XG52YXIgZmFFbGV2YXRvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbGV2YXRvcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTE2ZFwiLCBcIk0xMzIuNyA0LjdsLTY0IDY0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40czguMyA5LjkgMTQuOCA5LjlIMjA4YzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC02NC02NGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTk2IDk2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNODAgNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDExMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDAwem0xOTIgMGMwLTI2LjUgMjEuNS00OCA0OC00OGg2NGMyNi41IDAgNDggMjEuNSA0OCA0OHYxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwMHptMzItMTI4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTM1Ni43IDkxLjNjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFM0MzguNSAwIDQzMiAwSDMwNGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDY0IDY0elwiXVxufTtcbnZhciBmYU1vbmV5QmlsbFRyYW5zZmVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGwtdHJhbnNmZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjhcIiwgXCJNNTM1IDQxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNjQgNjRjNC41IDQuNSA3IDEwLjYgNyAxN3MtMi41IDEyLjUtNyAxN2wtNjQgNjRjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMjMtMjNMMzg0IDExMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNzQuMSAwTDUzNSA0MXpNMTA1IDM3N2wtMjMgMjNMMjU2IDQwMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4MS45IDQ0OGwyMyAyM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgNDQxYy00LjUtNC41LTctMTAuNi03LTE3czIuNS0xMi41IDctMTdsNjQtNjRjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek05NiA2NEgzMzcuOWMtMy43IDcuMi01LjkgMTUuMy01LjkgMjRjMCAyOC43IDIzLjMgNTIgNTIgNTJsMTE3LjQgMGMtNCAxNyAuNiAzNS41IDEzLjggNDguOGMyMC4zIDIwLjMgNTMuMiAyMC4zIDczLjUgMEw2MDggMTY5LjVWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDMwMi4xYzMuNy03LjIgNS45LTE1LjMgNS45LTI0YzAtMjguNy0yMy4zLTUyLTUyLTUybC0xMTcuNCAwYzQtMTctLjYtMzUuNS0xMy44LTQ4LjhjLTIwLjMtMjAuMy01My4yLTIwLjMtNzMuNSAwTDMyIDM0Mi41VjEyOGMwLTM1LjMgMjguNy02NCA2NC02NHptNjQgNjRIOTZ2NjRjMzUuMyAwIDY0LTI4LjcgNjQtNjR6TTU0NCAzMjBjLTM1LjMgMC02NCAyOC43LTY0IDY0aDY0VjMyMHpNMzIwIDM1MmE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDEgMCAwIDE5MnpcIl1cbn07XG52YXIgZmFNb25leUJpbGxUcmVuZFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGwtdHJlbmQtdXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MjlcIiwgXCJNNDcwLjcgOS40YzMgMy4xIDUuMyA2LjYgNi45IDEwLjNzMi40IDcuOCAyLjQgMTIuMmwwIC4xdjAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTA5LjNMMzEwLjYgMjE0LjZjLTExLjggMTEuOC0zMC44IDEyLjYtNDMuNSAxLjdMMTc2IDEzOC4xIDg0LjggMjE2LjNjLTEzLjQgMTEuNS0zMy42IDkuOS00NS4xLTMuNXMtOS45LTMzLjYgMy41LTQ1LjFsMTEyLTk2YzEyLTEwLjMgMjkuNy0xMC4zIDQxLjcgMGw4OS41IDc2LjdMMzcwLjcgNjRIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDk2IDBjOC44IDAgMTYuOCAzLjYgMjIuNiA5LjNsLjEgLjF6TTAgMzA0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDQ2NGMyNi41IDAgNDggMjEuNSA0OCA0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjMwNHpNNDggNDE2djQ4SDk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek05NiAzMDRINDh2NDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6TTQ2NCA0MTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4aDQ4VjQxNnpNNDE2IDMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OFYzMDRINDE2em0tOTYgODBhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwelwiXVxufTtcbnZhciBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtZmxvb2Qtd2F0ZXItY2lyY2xlLWFycm93LXJpZ2h0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTBmXCIsIFwiTTI4OCAxNDRBMTQ0IDE0NCAwIDEgMCAwIDE0NGExNDQgMTQ0IDAgMSAwIDI4OCAwek0xNDAuNyA3Ni43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDU2IDU2YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC01NiA1NmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkwxNjkuNCAxNjBIODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODkuNEwxNDAuNyA5OS4zYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpNMzIwIDE0NGMwIDU3LjMtMjcuNCAxMDguMi02OS44IDE0MC4zYzExLjgtMy42IDIzLTkuNCAzMy0xNi4yYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzIzLjgtMTYuNyA1NS44LTE1LjQgNzguMSAzLjRjMi4xIDEuNyA0LjIgMy4zIDYuNSA0LjlsLS4zLTg0LjRINTc2YzEzLjkgMCAyNi4xLTguOSAzMC40LTIyLjFzLS40LTI3LjYtMTEuNi0zNS44bC0xNzYtMTI4QzQwNy42LTIgMzkyLjQtMiAzODEuMiA2LjFMMzAxIDY0LjRjMTIuMSAyMy45IDE5IDUwLjkgMTkgNzkuNnptMTguNSAxNjUuOWMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNzkgMzI1LjQgMjUxLjUgMzM2IDIyNCAzMzZjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxNTguNSAzODkuNyAxOTEgNDAwIDIyNCA0MDBjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNiAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNS0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQ3MS40IDMyNS4yIDQ0Mi45IDMzNiA0MTYgMzM2Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjF6bTAgMTEyYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwQzI3OSA0MzcuNCAyNTEuNSA0NDggMjI0IDQ0OGMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFsMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzE1OC41IDUwMS43IDE5MSA1MTIgMjI0IDUxMmMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS40LTI3LjMtMTAuMS0zOS4yLTEuN2wwIDBDNDcxLjQgNDM3LjIgNDQyLjkgNDQ4IDQxNiA0NDhjLTI3LjUgMC01NS0xMC42LTc3LjUtMjYuMXpcIl1cbn07XG52YXIgZmFTcXVhcmVQb2xsSG9yaXpvbnRhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtcG9sbC1ob3Jpem9udGFsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJwb2xsLWhcIl0sIFwiZjY4MlwiLCBcIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjU2IDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyem02NCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTkyIDB6TTE5MiAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpcIl1cbn07XG52YXIgZmFQb2xsSCA9IGZhU3F1YXJlUG9sbEhvcml6b250YWw7XG52YXIgZmFDaXJjbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzA4LCAxMjgzMDksIDEyODk5MiwgMTI4OTkzLCAxMjg5OTQsIDEyODk5NSwgMTI4OTk2LCA5Njc5LCA5ODk4LCA5ODk5LCAxMTA0NCwgNjE3MDgsIDYxOTE1XSwgXCJmMTExXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyelwiXVxufTtcbnZhciBmYUJhY2t3YXJkRmFzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWNrd2FyZC1mYXN0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTE5OCwgXCJmYXN0LWJhY2t3YXJkXCJdLCBcImYwNDlcIiwgXCJNNDkzLjYgNDQ1Yy0xMS4yIDUuMy0yNC41IDMuNi0zNC4xLTQuNEwyODggMjk3LjdWNDE2YzAgMTIuNC03LjIgMjMuNy0xOC40IDI5cy0yNC41IDMuNi0zNC4xLTQuNEw2NCAyOTcuN1Y0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRzMzIgMTQuMyAzMiAzMlYyMTQuM0wyMzUuNSA3MS40YzkuNS03LjkgMjIuOC05LjcgMzQuMS00LjRTMjg4IDgzLjYgMjg4IDk2VjIxNC4zTDQ1OS41IDcxLjRjOS41LTcuOSAyMi44LTkuNyAzNC4xLTQuNFM1MTIgODMuNiA1MTIgOTZWNDE2YzAgMTIuNC03LjIgMjMuNy0xOC40IDI5elwiXVxufTtcbnZhciBmYUZhc3RCYWNrd2FyZCA9IGZhQmFja3dhcmRGYXN0O1xudmFyIGZhUmVjeWNsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWN5Y2xlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTg0MiwgOTg1MCwgOTg1MV0sIFwiZjFiOFwiLCBcIk0xNzQuNyA0NS4xQzE5Mi4yIDE3IDIyMyAwIDI1NiAwczYzLjggMTcgODEuMyA0NS4xbDM4LjYgNjEuNyAyNy0xNS42YzguNC00LjkgMTguOS00LjIgMjYuNiAxLjdzMTEuMSAxNS45IDguNiAyNS4zbC0yMy40IDg3LjRjLTMuNCAxMi44LTE2LjYgMjAuNC0yOS40IDE3bC04Ny40LTIzLjRjLTkuNC0yLjUtMTYuMy0xMC40LTE3LjYtMjBzMy40LTE5LjEgMTEuOC0yMy45bDI4LjQtMTYuNEwyODMgNzljLTUuOC05LjMtMTYtMTUtMjctMTVzLTIxLjIgNS43LTI3IDE1bC0xNy41IDI4Yy05LjIgMTQuOC0yOC42IDE5LjUtNDMuNiAxMC41Yy0xNS4zLTkuMi0yMC4yLTI5LjItMTAuNy00NC40bDE3LjUtMjh6TTQyOS41IDI1MS45YzE1LTkgMzQuNC00LjMgNDMuNiAxMC41bDI0LjQgMzkuMWM5LjQgMTUuMSAxNC40IDMyLjQgMTQuNiA1MC4yYy4zIDUzLjEtNDIuNyA5Ni40LTk1LjggOTYuNEwzMjAgNDQ4djMyYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw2NC02NGM2LjktNi45IDE3LjItOC45IDI2LjItNS4yczE0LjggMTIuNSAxNC44IDIyLjJ2MzJsOTYuMiAwYzE3LjYgMCAzMS45LTE0LjQgMzEuOC0zMmMwLTUuOS0xLjctMTEuNy00LjgtMTYuN2wtMjQuNC0zOS4xYy05LjUtMTUuMi00LjctMzUuMiAxMC43LTQ0LjR6bS0zNjQuNi0zMUwzNiAyMDQuMmMtOC40LTQuOS0xMy4xLTE0LjMtMTEuOC0yMy45czguMi0xNy41IDE3LjYtMjBsODcuNC0yMy40YzEyLjgtMy40IDI2IDQuMiAyOS40IDE3TDE4MiAyNDEuMmMyLjUgOS40LS45IDE5LjMtOC42IDI1LjNzLTE4LjIgNi42LTI2LjYgMS43bC0yNi41LTE1LjNMNjguOCAzMzUuM2MtMy4xIDUtNC44IDEwLjgtNC44IDE2LjdjLS4xIDE3LjYgMTQuMiAzMiAzMS44IDMybDMyLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIuMiAwQzQyLjcgNDQ4LS4zIDQwNC44IDAgMzUxLjZjLjEtMTcuOCA1LjEtMzUuMSAxNC42LTUwLjJsNTAuMy04MC41elwiXVxufTtcbnZhciBmYVVzZXJBc3Ryb25hdXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1hc3Ryb25hdXQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY0ZmJcIiwgXCJNMzcwLjcgOTYuMUMzNDYuMSAzOS41IDI4OS43IDAgMjI0IDBTMTAxLjkgMzkuNSA3Ny4zIDk2LjFDNjAuOSA5Ny41IDQ4IDExMS4yIDQ4IDEyOHY2NGMwIDE2LjggMTIuOSAzMC41IDI5LjMgMzEuOUMxMDEuOSAyODAuNSAxNTguMyAzMjAgMjI0IDMyMHMxMjIuMS0zOS41IDE0Ni43LTk2LjFjMTYuNC0xLjQgMjkuMy0xNS4xIDI5LjMtMzEuOVYxMjhjMC0xNi44LTEyLjktMzAuNS0yOS4zLTMxLjl6TTMzNiAxNDR2MTZjMCA1My00MyA5Ni05NiA5NkgyMDhjLTUzIDAtOTYtNDMtOTYtOTZWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDI4OGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTg5LjMgMTYyLjdsLTYtMjEuMmMtLjktMy4zLTMuOS01LjUtNy4zLTUuNXMtNi40IDIuMi03LjMgNS41bC02IDIxLjItMjEuMiA2Yy0zLjMgLjktNS41IDMuOS01LjUgNy4zczIuMiA2LjQgNS41IDcuM2wyMS4yIDYgNiAyMS4yYy45IDMuMyAzLjkgNS41IDcuMyA1LjVzNi40LTIuMiA3LjMtNS41bDYtMjEuMiAyMS4yLTZjMy4zLS45IDUuNS0zLjkgNS41LTcuM3MtMi4yLTYuNC01LjUtNy4zbC0yMS4yLTZ6TTExMi43IDMxNi41QzQ2LjcgMzQyLjYgMCA0MDcgMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDEyOFY0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0bDk4LjMgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuN2MwLTc1LjMtNDYuNy0xMzkuNy0xMTIuNy0xNjUuOEMzMDMuOSAzMzguOCAyNjUuNSAzNTIgMjI0IDM1MnMtNzkuOS0xMy4yLTExMS4zLTM1LjV6TTE3NiA0NDhjLTguOCAwLTE2IDcuMi0xNiAxNnY0OGgzMlY0NjRjMC04LjgtNy4yLTE2LTE2LTE2em05NiAzMmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xudmFyIGZhUGxhbmVTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2OVwiLCBcIk00NDAuNiAzMjBoNzMuOGMzNC4yIDAgOTMuNy0yOCA5My43LTY0YzAtMzUtNTkuNS02NC05My43LTY0bC0xMTYuNiAwTDI5Ny4yIDE2LjFDMjkxLjUgNi4yIDI4MC45IDAgMjY5LjQgMEgyMTMuMmMtMTAuNiAwLTE4LjMgMTAuMi0xNS40IDIwLjRsNDAuMyAxNDAuOUwzOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ0MC42IDMyMHptLTc4LjEgNjEuNkw0MS41IDEyOC43QzM2IDEzMC42IDMyIDEzNS45IDMyIDE0MmMwIDEuMyAuMiAyLjYgLjUgMy45TDY0IDI1NiAzMi41IDM2Ni4xYy0uNCAxLjMtLjUgMi42LS41IDMuOWMwIDcuOCA2LjMgMTQgMTQgMTRIODhjNSAwIDkuOC0yLjQgMTIuOC02LjRMMTQ0IDMyMEgyNDYuOWwtNDkgMTcxLjZjLTIuOSAxMC4yIDQuOCAyMC40IDE1LjQgMjAuNGw1Ni4yIDBjMTEuNSAwIDIyLjEtNi4yIDI3LjgtMTYuMWw2NS4zLTExNC4zelwiXVxufTtcbnZhciBmYVRyYWRlbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cmFkZW1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs4NDgyXSwgXCJmMjVjXCIsIFwiTTM0NS42IDEwOC44Yy04LjMtMTEtMjIuNy0xNS41LTM1LjctMTEuMlMyODggMTE0LjIgMjg4IDEyOFYzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjRsODYuNCAxMTUuMmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44czE5LjYtNC43IDI1LjYtMTIuOEw1NzYgMjI0VjM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjEyOGMwLTEzLjgtOC44LTI2LTIxLjktMzAuNHMtMjcuNSAuMS0zNS43IDExLjJMNDY0IDI2Ni43IDM0NS42IDEwOC44ek0wIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NlYzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNjBoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJDMTQuMyA5NiAwIDExMC4zIDAgMTI4elwiXVxufTtcbnZhciBmYUJhc2tldGJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFza2V0YmFsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzkzNiwgXCJiYXNrZXRiYWxsLWJhbGxcIl0sIFwiZjQzNFwiLCBcIk04Ni42IDY0bDg1LjIgODUuMkMxOTQuNSAxMjEuNyAyMDggODYuNCAyMDggNDhjMC0xNC43LTItMjguOS01LjctNDIuNEMxNTguNiAxNSAxMTkgMzUuNSA4Ni42IDY0ek02NCA4Ni42QzM1LjUgMTE5IDE1IDE1OC42IDUuNiAyMDIuM0MxOS4xIDIwNiAzMy4zIDIwOCA0OCAyMDhjMzguNCAwIDczLjctMTMuNSAxMDEuMy0zNi4xTDY0IDg2LjZ6TTI1NiAwYy03LjMgMC0xNC42IC4zLTIxLjggLjlDMjM4IDE2IDI0MCAzMS44IDI0MCA0OGMwIDQ3LjMtMTcuMSA5MC41LTQ1LjQgMTI0TDI1NiAyMzMuNCA0MjUuNCA2NEMzODAuMiAyNC4yIDMyMC45IDAgMjU2IDB6TTQ4IDI0MGMtMTYuMiAwLTMyLTItNDcuMS01LjhDLjMgMjQxLjQgMCAyNDguNyAwIDI1NmMwIDY0LjkgMjQuMiAxMjQuMiA2NCAxNjkuNEwyMzMuNCAyNTYgMTcyIDE5NC42QzEzOC41IDIyMi45IDk1LjMgMjQwIDQ4IDI0MHptNDYzLjEgMzcuOGMuNi03LjIgLjktMTQuNSAuOS0yMS44YzAtNjQuOS0yNC4yLTEyNC4yLTY0LTE2OS40TDI3OC42IDI1NiAzNDAgMzE3LjRjMzMuNC0yOC4zIDc2LjctNDUuNCAxMjQtNDUuNGMxNi4yIDAgMzIgMiA0Ny4xIDUuOHptLTQuNyAzMS45QzQ5Mi45IDMwNiA0NzguNyAzMDQgNDY0IDMwNGMtMzguNCAwLTczLjcgMTMuNS0xMDEuMyAzNi4xTDQ0OCA0MjUuNGMyOC41LTMyLjMgNDkuMS03MS45IDU4LjQtMTE1Ljd6TTM0MC4xIDM2Mi43QzMxNy41IDM5MC4zIDMwNCA0MjUuNiAzMDQgNDY0YzAgMTQuNyAyIDI4LjkgNS43IDQyLjRDMzUzLjQgNDk3IDM5MyA0NzYuNSA0MjUuNCA0NDhsLTg1LjItODUuMnpNMzE3LjQgMzQwTDI1NiAyNzguNiA4Ni42IDQ0OGM0NS4xIDM5LjggMTA0LjQgNjQgMTY5LjQgNjRjNy4zIDAgMTQuNi0uMyAyMS44LS45QzI3NCA0OTYgMjcyIDQ4MC4yIDI3MiA0NjRjMC00Ny4zIDE3LjEtOTAuNSA0NS40LTEyNHpcIl1cbn07XG52YXIgZmFCYXNrZXRiYWxsQmFsbCA9IGZhQmFza2V0YmFsbDtcbnZhciBmYVNhdGVsbGl0ZURpc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2F0ZWxsaXRlLWRpc2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjVdLCBcImY3YzBcIiwgXCJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyQzM4My4xIDAgNTEyIDEyOC45IDUxMiAyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJDNDQ4IDE2NC4zIDM0Ny43IDY0IDIyNCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTYwLjYgMjIwLjZMMTY0LjcgMzI0LjdsMjguNC0yOC40Yy0uNy0yLjYtMS4xLTUuNC0xLjEtOC4zYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTIuOSAwLTUuNi0uNC04LjMtMS4xbC0yOC40IDI4LjRMMjkxLjQgNDUxLjRjMTQuNSAxNC41IDExLjggMzguOC03LjMgNDYuM0MyNjAuNSA1MDYuOSAyMzQuOSA1MTIgMjA4IDUxMkM5My4xIDUxMiAwIDQxOC45IDAgMzA0YzAtMjYuOSA1LjEtNTIuNSAxNC40LTc2LjFjNy41LTE5IDMxLjgtMjEuOCA0Ni4zLTcuM3pNMjI0IDk2YzEwNiAwIDE5MiA4NiAxOTIgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYUNpcmNsZVVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS11cCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzYxNDY3LCBcImFycm93LWFsdC1jaXJjbGUtdXBcIl0sIFwiZjM1YlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM1LjEgMjE3LjRsMTA3LjEtOTkuOWMzLjgtMy41IDguNy01LjUgMTMuOC01LjVzMTAuMSAyIDEzLjggNS41bDEwNy4xIDk5LjljNC41IDQuMiA3LjEgMTAuMSA3LjEgMTYuM2MwIDEyLjMtMTAgMjIuMy0yMi4zIDIyLjNIMzA0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjU2SDE1MC4zQzEzOCAyNTYgMTI4IDI0NiAxMjggMjMzLjdjMC02LjIgMi42LTEyLjEgNy4xLTE2LjN6XCJdXG59O1xudmFyIGZhQXJyb3dBbHRDaXJjbGVVcCA9IGZhQ2lyY2xlVXA7XG52YXIgZmFNb2JpbGVTY3JlZW5CdXR0b24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9iaWxlLXNjcmVlbi1idXR0b24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcIm1vYmlsZS1hbHRcIl0sIFwiZjNjZFwiLCBcIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwSDMwNGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIODBjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0yMjQgNDQ4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMwNCA2NEg4MFYzODRIMzA0VjY0elwiXVxufTtcbnZhciBmYU1vYmlsZUFsdCA9IGZhTW9iaWxlU2NyZWVuQnV0dG9uO1xudmFyIGZhVm9sdW1lSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2b2x1bWUtaGlnaCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODI2NiwgXCJ2b2x1bWUtdXBcIl0sIFwiZjAyOFwiLCBcIk01MzMuNiAzMi41QzU5OC41IDg1LjIgNjQwIDE2NS44IDY0MCAyNTZzLTQxLjUgMTcwLjctMTA2LjQgMjIzLjVjLTEwLjMgOC40LTI1LjQgNi44LTMzLjgtMy41cy02LjgtMjUuNCAzLjUtMzMuOEM1NTcuNSAzOTguMiA1OTIgMzMxLjIgNTkyIDI1NnMtMzQuNS0xNDIuMi04OC43LTE4Ni4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41ek00NzMuMSAxMDdjNDMuMiAzNS4yIDcwLjkgODguOSA3MC45IDE0OXMtMjcuNyAxMTMuOC03MC45IDE0OWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzQ3NS4zIDM0MS4zIDQ5NiAzMDEuMSA0OTYgMjU2cy0yMC43LTg1LjMtNTMuMi0xMTEuOGMtMTAuMy04LjQtMTEuOC0yMy41LTMuNS0zMy44czIzLjUtMTEuOCAzMy44LTMuNXptLTYwLjUgNzQuNUM0MzQuMSAxOTkuMSA0NDggMjI1LjkgNDQ4IDI1NnMtMTMuOSA1Ni45LTM1LjQgNzQuNWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzM5My4xIDI4NC40IDQwMCAyNzEgNDAwIDI1NnMtNi45LTI4LjQtMTcuNy0zNy4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41ek0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NFY0NDhjMCAxMi42LTcuNCAyNC0xOC45IDI5LjJzLTI1IDMuMS0zNC40LTUuM0wxMzEuOCAzNTJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjIyNGMwLTM1LjMgMjguNy02NCA2NC02NGg2Ny44TDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6XCJdXG59O1xudmFyIGZhVm9sdW1lVXAgPSBmYVZvbHVtZUhpZ2g7XG52YXIgZmFVc2Vyc1JheXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMtcmF5cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU5M1wiLCBcIk00MSA3QzMxLjYtMi4zIDE2LjQtMi4zIDcgN1MtMi4zIDMxLjYgNyA0MWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDEgN3pNNTk5IDdMNTI3IDc5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMHpNNyA1MDVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw3IDQ3MWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjl6bTU5MiAwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJ6TTMyMCAyNTZhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6TTIxMi4xIDMzNmMtMi43IDcuNS00LjEgMTUuNi00LjEgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDA4YzEzLjMgMCAyNC0xMC43IDI0LTI0YzAtOC40LTEuNC0xNi41LTQuMS0yNGMtLjUtMS40LTEtMi43LTEuNi00Yy05LjQtMjIuMy0yOS44LTM4LjktNTQuMy00M2MtMy45LS43LTcuOS0xLTEyLTFIMjgwYy00LjEgMC04LjEgLjMtMTIgMWMtLjggLjEtMS43IC4zLTIuNSAuNWMtMjQuOSA1LjEtNDUuMSAyMy01My40IDQ2LjV6TTE3NS44IDIyNGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS0yNi41IDMyQzExOS45IDI1NiA5NiAyNzkuOSA5NiAzMDkuM2MwIDE0LjcgMTEuOSAyNi43IDI2LjcgMjYuN2g1Ni4xYzgtMzQuMSAzMi44LTYxLjcgNjUuMi03My42Yy03LjUtNC4xLTE2LjItNi40LTI1LjMtNi40SDE0OS4zem0zNjggODBjMTQuNyAwIDI2LjctMTEuOSAyNi43LTI2LjdjMC0yOS41LTIzLjktNTMuMy01My4zLTUzLjNINDIxLjNjLTkuMiAwLTE3LjggMi4zLTI1LjMgNi40YzMyLjQgMTEuOSA1Ny4yIDM5LjUgNjUuMiA3My42aDU2LjF6TTQ2NCAyMjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2elwiXVxufTtcbnZhciBmYVdhbGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YWxsZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NTVcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MmMwLTM1LjMtMjguNy02NC02NC02NEg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNkg0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINjR6TTQxNiAyNzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUNsaXBib2FyZENoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC1jaGVjaycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjQ2Y1wiLCBcIk0xOTIgMGMtNDEuOCAwLTc3LjQgMjYuNy05MC41IDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDI4Mi41QzI2OS40IDI2LjcgMjMzLjggMCAxOTIgMHptMCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTMwNSAyNzNMMTc3IDQwMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMNzkgMzM3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDcgNDdMMjcxIDIzOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6XCJdXG59O1xudmFyIGZhRmlsZUF1ZGlvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtYXVkaW8nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYxYzdcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwem0yIDIyNi4zYzM3LjEgMjIuNCA2MiA2My4xIDYyIDEwOS43cy0yNC45IDg3LjMtNjIgMTA5LjdjLTcuNiA0LjYtMTcuNCAyLjEtMjItNS40cy0yLjEtMTcuNCA1LjQtMjJDMjY5LjQgNDAxLjUgMjg4IDM3MC45IDI4OCAzMzZzLTE4LjYtNjUuNS00Ni41LTgyLjNjLTcuNi00LjYtMTAtMTQuNC01LjQtMjJzMTQuNC0xMCAyMi01LjR6bS05MS45IDMwLjljNiAyLjUgOS45IDguMyA5LjkgMTQuOFY0MDBjMCA2LjUtMy45IDEyLjMtOS45IDE0LjhzLTEyLjkgMS4xLTE3LjQtMy41TDExMy40IDM3Nkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjMxMmMwLTguOCA3LjItMTYgMTYtMTZoMzMuNGwzNS4zLTM1LjNjNC42LTQuNiAxMS41LTUuOSAxNy40LTMuNXptNTEgMzQuOWM2LjYtNS45IDE2LjctNS4zIDIyLjYgMS4zQzI0OS44IDMwNC42IDI1NiAzMTkuNiAyNTYgMzM2cy02LjIgMzEuNC0xNi4zIDQyLjdjLTUuOSA2LjYtMTYgNy4xLTIyLjYgMS4zcy03LjEtMTYtMS4zLTIyLjZjNS4xLTUuNyA4LjEtMTMuMSA4LjEtMjEuM3MtMy4xLTE1LjctOC4xLTIxLjNjLTUuOS02LjYtNS4zLTE2LjcgMS4zLTIyLjZ6XCJdXG59O1xudmFyIGZhQnVyZ2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1cmdlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaGFtYnVyZ2VyXCJdLCBcImY4MDVcIiwgXCJNNjEuMSAyMjRDNDUgMjI0IDMyIDIxMSAzMiAxOTQuOWMwLTEuOSAuMi0zLjcgLjYtNS42QzM3LjkgMTY4LjMgNzguOCAzMiAyNTYgMzJzMjE4LjEgMTM2LjMgMjIzLjQgMTU3LjNjLjUgMS45IC42IDMuNyAuNiA1LjZjMCAxNi4xLTEzIDI5LjEtMjkuMSAyOS4xSDYxLjF6TTE0NCAxMjhhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMjQwIDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpNMjcyIDk2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6TTE2IDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NDhjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhINjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4em0xNiA5NmMwLTguOCA3LjItMTYgMTYtMTZINDY0YzguOCAwIDE2IDcuMiAxNiAxNnYxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNDAwelwiXVxufTtcbnZhciBmYUhhbWJ1cmdlciA9IGZhQnVyZ2VyO1xudmFyIGZhV3JlbmNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dyZW5jaCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI5NV0sIFwiZjBhZFwiLCBcIk0zNTIgMzIwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwYzAtMTUuMy0yLjItMzAuMS02LjItNDQuMmMtMy4xLTEwLjgtMTYuNC0xMy4yLTI0LjMtNS4zbC03Ni44IDc2LjhjLTMgMy03LjEgNC43LTExLjMgNC43SDMzNmMtOC44IDAtMTYtNy4yLTE2LTE2VjExOC42YzAtNC4yIDEuNy04LjMgNC43LTExLjNsNzYuOC03Ni44YzcuOS03LjkgNS40LTIxLjItNS4zLTI0LjNDMzgyLjEgMi4yIDM2Ny4zIDAgMzUyIDBDMjYzLjYgMCAxOTIgNzEuNiAxOTIgMTYwYzAgMTkuMSAzLjQgMzcuNSA5LjUgNTQuNUwxOS45IDM5Ni4xQzcuMiA0MDguOCAwIDQyNi4xIDAgNDQ0LjFDMCA0ODEuNiAzMC40IDUxMiA2Ny45IDUxMmMxOCAwIDM1LjMtNy4yIDQ4LTE5LjlMMjk3LjUgMzEwLjVjMTcgNi4yIDM1LjQgOS41IDU0LjUgOS41ek04MCA0MDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUJ1Z3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVncycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRkMFwiLCBcIk0xNjQuNSAxMDcuNGwzMy40LTczLjVjNS41LTEyLjEgLjEtMjYuMy0xMS45LTMxLjhzLTI2LjMtLjEtMzEuOCAxMS45TDEyOCA3MS43IDEwMS45IDE0LjFDOTYuNCAyIDgyLjEtMy4zIDcwLjEgMi4xUzUyLjcgMjEuOSA1OC4xIDMzLjlsMzMuNCA3My41Yy0xMC4yIDcuMS0xOC4yIDE3LTIyLjkgMjguNmgtMTdsLTQuMS0yMC43Yy0yLjYtMTMtMTUuMi0yMS40LTI4LjItMTguOFMtMi4xIDExMS43IC41IDEyNC43bDggNDBDMTAuNyAxNzUuOSAyMC42IDE4NCAzMiAxODRINjR2MjMuM2wtMzcuOCA5LjVjLTkuNSAyLjQtMTYuNiAxMC4yLTE3LjkgMTkuOWwtOCA1NmMtMS45IDEzLjEgNy4yIDI1LjMgMjAuNCAyNy4yczI1LjMtNy4yIDI3LjItMjAuNGw1LjctNDAgMTguNC00LjZDODIuNyAyNzQuNiAxMDMuOCAyODggMTI4IDI4OHM0NS4zLTEzLjQgNTYuMS0zMy4ybDE4LjQgNC42IDUuNyA0MGMxLjkgMTMuMSAxNCAyMi4yIDI3LjIgMjAuNHMyMi4yLTE0IDIwLjQtMjcuMmwtOC01NmMtMS40LTkuNy04LjUtMTcuNS0xNy45LTE5LjlMMTkyIDIwNy4zVjE4NGgzMmMxMS40IDAgMjEuMy04LjEgMjMuNS0xOS4zbDgtNDBjMi42LTEzLTUuOC0yNS42LTE4LjgtMjguMnMtMjUuNiA1LjgtMjguMiAxOC44TDIwNC4zIDEzNmgtMTdjLTQuNy0xMS42LTEyLjctMjEuNS0yMi45LTI4LjZ6TTQ5NiAyODYuNWw2NS42LTQ3YzEwLjgtNy43IDEzLjMtMjIuNyA1LjYtMzMuNXMtMjIuNy0xMy4zLTMzLjUtNS42bC01MS40IDM2LjggNi4xLTYyLjljMS4zLTEzLjItOC40LTI0LjktMjEuNi0yNi4ycy0yNC45IDguNC0yNi4yIDIxLjZMNDMyLjggMjUwYy0xMi4zIDEtMjQuMiA1LjYtMzQuMSAxMy4zTDM4NCAyNTQuOGw2LjgtMjBjNC4yLTEyLjYtMi41LTI2LjItMTUtMzAuNHMtMjYuMiAyLjUtMzAuNCAxNWwtMTMuMSAzOC42Yy0zLjcgMTAuOCAuOCAyMi44IDEwLjcgMjguNWwyNy43IDE2TDM1OSAzMjIuNyAzMjEuNSAzMTJjLTkuNC0yLjctMTkuNSAuNi0yNS41IDguM2wtMzQuOSA0NC41Yy04LjIgMTAuNC02LjQgMjUuNSA0LjEgMzMuN3MyNS41IDYuNCAzMy43LTQuMWwyNS0zMS44IDE4LjIgNS4yYy0uNSAyMi42IDExIDQ0LjcgMzIgNTYuOHM0NS45IDExIDY1LjItLjdsMTMuNiAxMy4yLTE1LjEgMzcuNWMtNC45IDEyLjMgMSAyNi4zIDEzLjMgMzEuMnMyNi4zLTEgMzEuMi0xMy4zTDUwMy41IDQ0MGMzLjYtOS4xIDEuNC0xOS40LTUuNi0yNi4ybC0yOC0yNy4xIDExLjYtMjAuMSAyNy43IDE2YzkuOSA1LjcgMjIuNSAzLjcgMzAtNC45TDU2Ni4yIDM0N2M4LjctMTAgNy44LTI1LjEtMi4yLTMzLjlzLTI1LjEtNy44LTMzLjkgMi4ybC0xMy45IDE1LjktMTQuNy04LjVjMS43LTEyLjQtLjItMjUtNS41LTM2LjJ6XCJdXG59O1xudmFyIGZhUnVwZWVTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3J1cGVlLXNpZ24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MzYwLCBcInJ1cGVlXCJdLCBcImYxNTZcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmg4MGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDU4LjgtMzUuMiAxMDkuMy04NS43IDEzMS43bDUxLjQgMTI4LjRjNi42IDE2LjQtMS40IDM1LTE3LjggNDEuNnMtMzUtMS40LTQxLjYtMTcuOEwxMDYuMyAzMjBINjRWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI4OCA2NHpNNjQgMjU2aDQ4YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwSDY0VjI1NnptMjU2LjUgMTYuNGMtLjkgNiAwIDguNyAuNCA5LjhjLjQgMS4xIDEuNCAyLjYgNC4yIDQuOWM3LjIgNS43IDE4LjcgMTAgMzcuOSAxNi44bDEuMyAuNWMxNiA1LjYgMzguNyAxMy42IDU1LjcgMjguMWM5LjUgOC4xIDE3LjkgMTguNiAyMy4xIDMyLjNjNS4xIDEzLjcgNi4xIDI4LjUgMy44IDQ0Yy00LjIgMjguMS0yMC41IDQ5LjMtNDMuOCA2MC45Yy0yMi4xIDExLTQ4LjEgMTIuNS03My4yIDhsLS4yIDAgMCAwYy05LjMtMS44LTIwLjUtNS43LTI5LjMtOWMtNi0yLjMtMTIuNi00LjktMTcuNy02LjlsMCAwYy0yLjUtMS00LjYtMS44LTYuMy0yLjVjLTE2LjUtNi40LTI0LjYtMjUtMTguMi00MS40czI0LjktMjQuNiA0MS40LTE4LjJjMi42IDEgNS4yIDIgNy45IDMuMWwwIDBjNC44IDEuOSA5LjggMy45IDE1LjQgNmM4LjggMy4zIDE1LjMgNS40IDE4LjcgNmMxNS43IDIuOCAyNi43IC44IDMyLjktMi4zYzUtMi41IDgtNiA5LjEtMTNjMS02LjkgLjItMTAuNS0uNS0xMi4zYy0uNi0xLjctMS44LTMuNi00LjUtNS45Yy02LjktNS44LTE4LjItMTAuNC0zNi45LTE3bC0zLTEuMWMtMTUuNS01LjQtMzctMTMtNTMuMy0yNS45Yy05LjUtNy41LTE4LjMtMTcuNi0yMy43LTMxYy01LjUtMTMuNC02LjYtMjgtNC40LTQzLjJjOC40LTU3LjEgNjctNzggMTE2LjktNjguOWM2LjkgMS4zIDI3LjMgNS44IDM1LjQgOC40YzE2LjkgNS4yIDI2LjMgMjMuMiAyMS4xIDQwLjFzLTIzLjIgMjYuMy00MC4xIDIxLjFjLTQuNy0xLjQtMjIuMy01LjUtMjcuOS02LjVjLTE0LjYtMi43LTI1LjgtLjQtMzIuNiAzLjJjLTYuMyAzLjMtOC45IDcuNi05LjUgMTJ6XCJdXG59O1xudmFyIGZhUnVwZWUgPSBmYVJ1cGVlU2lnbjtcbnZhciBmYUZpbGVJbWFnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWltYWdlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDQzXSwgXCJmMWM1XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNNjQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE1MiAzMmM1LjMgMCAxMC4yIDIuNiAxMy4yIDYuOWw4OCAxMjhjMy40IDQuOSAzLjcgMTEuMyAxIDE2LjVzLTguMiA4LjYtMTQuMiA4LjZIMjE2IDE3NiAxMjggODBjLTUuOCAwLTExLjEtMy4xLTEzLjktOC4xcy0yLjgtMTEuMiAuMi0xNi4xbDQ4LTgwYzIuOS00LjggOC4xLTcuOCAxMy43LTcuOHMxMC44IDIuOSAxMy43IDcuOGwxMi44IDIxLjQgNDguMy03MC4yYzMtNC4zIDcuOS02LjkgMTMuMi02Ljl6XCJdXG59O1xudmFyIGZhQ2lyY2xlUXVlc3Rpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXF1ZXN0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMDgsIFwicXVlc3Rpb24tY2lyY2xlXCJdLCBcImYwNTlcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2OS44IDE2NS4zYzcuOS0yMi4zIDI5LjEtMzcuMyA1Mi44LTM3LjNoNTguM2MzNC45IDAgNjMuMSAyOC4zIDYzLjEgNjMuMWMwIDIyLjYtMTIuMSA0My41LTMxLjcgNTQuOEwyODAgMjY0LjRjLS4yIDEzLTEwLjkgMjMuNi0yNCAyMy42Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYyNTAuNWMwLTguNiA0LjYtMTYuNSAxMi4xLTIwLjhsNDQuMy0yNS40YzQuNy0yLjcgNy42LTcuNyA3LjYtMTMuMWMwLTguNC02LjgtMTUuMS0xNS4xLTE1LjFIMjIyLjZjLTMuNCAwLTYuNCAyLjEtNy41IDUuM2wtLjQgMS4yYy00LjQgMTIuNS0xOC4yIDE5LTMwLjYgMTQuNnMtMTktMTguMi0xNC42LTMwLjZsLjQtMS4yek0yMjQgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhUXVlc3Rpb25DaXJjbGUgPSBmYUNpcmNsZVF1ZXN0aW9uO1xudmFyIGZhUGxhbmVEZXBhcnR1cmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtZGVwYXJ0dXJlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzQ3XSwgXCJmNWIwXCIsIFwiTTM4MSAxMTQuOUwxODYuMSA0MS44Yy0xNi43LTYuMi0zNS4yLTUuMy01MS4xIDIuN0w4OS4xIDY3LjRDNzggNzMgNzcuMiA4OC41IDg3LjYgOTUuMmwxNDYuOSA5NC41TDEzNiAyNDAgNzcuOCAyMTQuMWMtOC43LTMuOS0xOC44LTMuNy0yNy4zIC42TDE4LjMgMjMwLjhjLTkuMyA0LjctMTEuOCAxNi44LTUgMjQuN2w3My4xIDg1LjNjNi4xIDcuMSAxNSAxMS4yIDI0LjMgMTEuMkgyNDguNGM1IDAgOS45LTEuMiAxNC4zLTMuNEw1MzUuNiAyMTIuMmM0Ni41LTIzLjMgODIuNS02My4zIDEwMC44LTExMkM2NDUuOSA3NSA2MjcuMiA0OCA2MDAuMiA0OEg1NDIuOGMtMjAuMiAwLTQwLjIgNC44LTU4LjIgMTRMMzgxIDExNC45ek0wIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUhhbmRzaGFrZVNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzaGFrZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMzUtMTA1LjhjLTEuMS0xMS4zLTYuMy0yMi4zLTE1LjMtMzAuN2wtMTM0LjItMTIzLTIzLjQgMTguMi0yNi0yMC4zIDc3LjItNjAuMWM3LTUuNCAxNy00LjIgMjIuNSAyLjhzNC4yIDE3LTIuOCAyMi41bC0yMC45IDE2LjJMNTEyIDMxNi44VjEyOGgtLjdsLTMuOS0yLjVMNDM0LjggNzljLTE1LjMtOS44LTMzLjItMTUtNTEuNC0xNWMtMjEuOCAwLTQzIDcuNS02MCAyMS4ybC04OS43IDcyLjYtMjUuOC0yMC4zIDgxLjgtNjYuMmMtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC0zNS41IDIzLjdMMzguOCA1LjF6TTQxMy42IDQyMS45TDEyOCAxOTYuOFYzNTJoMjguMmw5MS40IDgzLjRjMTkuNiAxNy45IDQ5LjkgMTYuNSA2Ny44LTMuMWM1LjUtNi4xIDkuMi0xMy4yIDExLjEtMjAuNmwxNyAxNS42YzE5LjUgMTcuOSA0OS45IDE2LjYgNjcuOC0yLjljLjgtLjggMS41LTEuNyAyLjItMi42ek05NiAxNzEuNkw0MC42IDEyOEgxNmMtOC44IDAtMTYgNy4yLTE2IDE2VjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNzEuNnpNNDggMzIwYTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpNNTQ0IDEyOFYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNkg1NDR6bTMyIDIwOGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbnZhciBmYUJvb2tCb29rbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rLWJvb2ttYXJrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlMGJiXCIsIFwiTTAgOTZDMCA0MyA0MyAwIDk2IDBoOTZWMTkwLjdjMCAxMy40IDE1LjUgMjAuOSAyNiAxMi41TDI3MiAxNjBsNTQgNDMuMmMxMC41IDguNCAyNiAuOSAyNi0xMi41VjBoMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NCA5NmMtNTMgMC05Ni00My05Ni05NlY5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MlYzODRIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUNvZGVCcmFuY2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29kZS1icmFuY2gnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYxMjZcIiwgXCJNODAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM3Y4Ny44YzE4LjgtMTAuOSA0MC43LTE3LjEgNjQtMTcuMWg5NmMzNS4zIDAgNjQtMjguNyA2NC02NHYtNi43QzMwNy43IDE0MSAyODggMTEyLjggMjg4IDgwYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YxNjBjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhIMTc2Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY2LjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuM2MwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zVjM1MiAxNTMuM0MxOS43IDE0MSAwIDExMi44IDAgODBDMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIzMiAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTgwIDQ1NmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xudmFyIGZhSGF0Q293Ym95ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhdC1jb3dib3knLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY4YzBcIiwgXCJNMzIwIDY0YzE0LjQgMCAyMi4zLTcgMzAuOC0xNC40QzM2MC40IDQxLjEgMzcwLjcgMzIgMzkyIDMyYzQ5LjMgMCA4NC40IDE1Mi4yIDk3LjkgMjIxLjlDNDQ3LjggMjcyLjEgMzkwLjkgMjg4IDMyMCAyODhzLTEyNy44LTE1LjktMTY5LjktMzQuMUMxNjMuNiAxODQuMiAxOTguNyAzMiAyNDggMzJjMjEuMyAwIDMxLjYgOS4xIDQxLjIgMTcuNkMyOTcuNyA1NyAzMDUuNiA2NCAzMjAgNjR6TTExMS4xIDI3MC43YzQ3LjIgMjQuNSAxMTcuNSA0OS4zIDIwOSA0OS4zczE2MS44LTI0LjggMjA4LjktNDkuM2MyNC44LTEyLjkgNDkuOC0yOC4zIDcwLjEtNDcuN2M3LjktNy45IDIwLjItOS4yIDI5LjYtMy4zYzkuNSA1LjkgMTMuNSAxNy45IDkuOSAyOC41Yy0xMy41IDM3LjctMzguNCA3Mi4zLTY2LjEgMTAwLjZDNTIzLjcgMzk4LjkgNDQzLjYgNDQ4IDMyMCA0NDhzLTIwMy42LTQ5LjEtMjUyLjUtOTkuMkMzOS44IDMyMC40IDE0LjkgMjg1LjggMS40IDI0OC4xYy0zLjYtMTAuNiAuNC0yMi42IDkuOS0yOC41YzkuNS01LjkgMjEuNy00LjUgMjkuNiAzLjNjMjAuNCAxOS40IDQ1LjMgMzQuOCA3MC4xIDQ3Ljd6XCJdXG59O1xudmFyIGZhQnJpZGdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRjOFwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZINzJ2NjRIMFYyODhjNTMgMCA5NiA0MyA5NiA5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC01MyA0My05NiA5Ni05NlYxNjBINTA0Vjk2aDQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyek00NTYgOTZ2NjRIMzc2Vjk2aDgwek0zMjggOTZ2NjRIMjQ4Vjk2aDgwek0yMDAgOTZ2NjRIMTIwVjk2aDgwelwiXVxufTtcbnZhciBmYVBob25lRmxpcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaG9uZS1mbGlwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzgxLCBcInBob25lLWFsdFwiXSwgXCJmODc5XCIsIFwiTTM0Ny4xIDI0LjZjNy43LTE4LjYgMjgtMjguNSA0Ny40LTIzLjJsODggMjRDNDk5LjkgMzAuMiA1MTIgNDYgNTEyIDY0YzAgMjQ3LjQtMjAwLjYgNDQ4LTQ0OCA0NDhjLTE4IDAtMzMuOC0xMi4xLTM4LjYtMjkuNWwtMjQtODhjLTUuMy0xOS40IDQuNi0zOS43IDIzLjItNDcuNGw5Ni00MGMxNi4zLTYuOCAzNS4yLTIuMSA0Ni4zIDExLjZMMjA3LjMgMzY4YzcwLjQtMzMuMyAxMjcuNC05MC4zIDE2MC43LTE2MC43TDMxOC43IDE2N2MtMTMuNy0xMS4yLTE4LjQtMzAtMTEuNi00Ni4zbDQwLTk2elwiXVxufTtcbnZhciBmYVBob25lQWx0ID0gZmFQaG9uZUZsaXA7XG52YXIgZmFUcnVja0Zyb250ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZyb250JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMmI3XCIsIFwiTTAgODBDMCAzNS44IDM1LjggMCA4MCAwSDQzMmM0NC4yIDAgODAgMzUuOCA4MCA4MFYzNjhjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NHY0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OEgxMjh2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQzMkMxMi42IDQxNy40IDAgMzk0LjIgMCAzNjhWODB6bTEyOS45IDcyLjJMMTEyIDIyNEg0MDBsLTE3LjktNzEuOEMzNzguNSAxMzggMzY1LjcgMTI4IDM1MSAxMjhIMTYxYy0xNC43IDAtMjcuNSAxMC0zMSAyNC4yek0xMjggMzIwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI4OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQ2F0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhdCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODAwOF0sIFwiZjZiZVwiLCBcIk0zMjAgMTkyaDE3LjFjMjIuMSAzOC4zIDYzLjUgNjQgMTEwLjkgNjRjMTEgMCAyMS44LTEuNCAzMi00djQgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMzOS4yTDI4MCA0NDhoNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTkyYy01MyAwLTk2LTQzLTk2LTk2VjE5Mi41YzAtMTYuMS0xMi0yOS44LTI4LTMxLjhsLTcuOS0xYy0xNy41LTIuMi0zMC0xOC4yLTI3LjgtMzUuN3MxOC4yLTMwIDM1LjctMjcuOGw3LjkgMWM0OCA2IDg0LjEgNDYuOCA4NC4xIDk1LjN2ODUuM2MzNC40LTUxLjcgOTMuMi04NS44IDE2MC04NS44em0xNjAgMjYuNXYwYy0xMCAzLjUtMjAuOCA1LjUtMzIgNS41Yy0yOC40IDAtNTQtMTIuNC03MS42LTMyaDBjLTMuNy00LjEtNy04LjUtOS45LTEzLjJDMzU3LjMgMTY0IDM1MiAxNDYuNiAzNTIgMTI4djBWMzIgMTIgMTAuN0MzNTIgNC44IDM1Ni43IC4xIDM2Mi42IDBoLjJjMy4zIDAgNi40IDEuNiA4LjQgNC4ybDAgLjFMMzg0IDIxLjNsMjcuMiAzNi4zTDQxNiA2NGg2NGw0LjgtNi40TDUxMiAyMS4zIDUyNC44IDQuM2wwLS4xYzItMi42IDUuMS00LjIgOC40LTQuMmguMkM1MzkuMyAuMSA1NDQgNC44IDU0NCAxMC43VjEyIDMydjk2YzAgMTcuMy00LjYgMzMuNi0xMi42IDQ3LjZjLTExLjMgMTkuOC0yOS42IDM1LjItNTEuNCA0Mi45ek00MzIgMTI4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG52YXIgZmFBbmNob3JDaXJjbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmNob3ItY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGFiXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzguMiAwIDE2LjMtLjYgMjQuMi0xLjhjLTIyLjItMTYuMi00MC40LTM3LjUtNTMtNjIuMkgzMjBWMzY4IDI0MGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDEuMXpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wLTE0NGM4LjggMCAxNiA3LjIgMTYgMTZ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFUcnVja0ZpZWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZpZWxkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNThkXCIsIFwiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0SDMyMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJoNTEuOGMyNS4zIDAgNDguMiAxNC45IDU4LjUgMzhsNTIuOCAxMTguOGMuNSAxLjEgLjkgMi4xIDEuMyAzLjJINTQ0YzM1LjMgMCA2NCAyOC43IDY0IDY0djMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDU3NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NkgyNTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJWOTZ6TTM4NCAyMjRoODUuOWwtNDIuNy05NkgzODR2OTZ6TTE2MCA0MzJhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0zNjgtNDhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpcIl1cbn07XG52YXIgZmFSb3V0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb3V0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjRkN1wiLCBcIk01MTIgOTZjMCA1MC4yLTU5LjEgMTI1LjEtODQuNiAxNTVjLTMuOCA0LjQtOS40IDYuMS0xNC41IDVIMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2YzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2SDEzOS42YzguNy05LjkgMTkuMy0yMi42IDMwLTM2LjhjNi4zLTguNCAxMi44LTE3LjYgMTktMjcuMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2aDM5LjhjLTIxLTMxLjUtMzkuOC02Ny43LTM5LjgtOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnpNMTE3LjEgNDg5LjFjLTMuOCA0LjMtNy4yIDguMS0xMC4xIDExLjNsLTEuOCAyLS4yLS4yYy02IDQuNi0xNC42IDQtMjAtMS44QzU5LjggNDczIDAgNDAyLjUgMCAzNTJjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDMwLTIxLjEgNjctNDMuNSA5Ny45Yy0xMC43IDE0LjctMjEuNyAyOC0zMC44IDM4LjVsLS42IC43ek0xMjggMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTQxNiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYUNsaXBib2FyZFF1ZXN0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC1xdWVzdGlvbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRlM1wiLCBcIk0xOTIgMGMtNDEuOCAwLTc3LjQgMjYuNy05MC41IDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDI4Mi41QzI2OS40IDI2LjcgMjMzLjggMCAxOTIgMHptMCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTEwNS44IDIyOS4zYzcuOS0yMi4zIDI5LjEtMzcuMyA1Mi44LTM3LjNoNTguM2MzNC45IDAgNjMuMSAyOC4zIDYzLjEgNjMuMWMwIDIyLjYtMTIuMSA0My41LTMxLjcgNTQuOEwyMTYgMzI4LjRjLS4yIDEzLTEwLjkgMjMuNi0yNCAyMy42Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYzMTQuNWMwLTguNiA0LjYtMTYuNSAxMi4xLTIwLjhsNDQuMy0yNS40YzQuNy0yLjcgNy42LTcuNyA3LjYtMTMuMWMwLTguNC02LjgtMTUuMS0xNS4xLTE1LjFIMTU4LjZjLTMuNCAwLTYuNCAyLjEtNy41IDUuM2wtLjQgMS4yYy00LjQgMTIuNS0xOC4yIDE5LTMwLjYgMTQuNnMtMTktMTguMi0xNC42LTMwLjZsLjQtMS4yek0xNjAgNDE2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhUGFub3JhbWEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFub3JhbWEnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUyMDlcIiwgXCJNNDUuNiAzMkMyMC40IDMyIDAgNTIuNCAwIDc3LjZWNDM0LjRDMCA0NTkuNiAyMC40IDQ4MCA0NS42IDQ4MGM1LjEgMCAxMC0uOCAxNC43LTIuNEM3NC42IDQ3Mi44IDE3Ny42IDQ0MCAzMjAgNDQwczI0NS40IDMyLjggMjU5LjYgMzcuNmM0LjcgMS42IDkuNyAyLjQgMTQuNyAyLjRjMjUuMiAwIDQ1LjYtMjAuNCA0NS42LTQ1LjZWNzcuNkM2NDAgNTIuNCA2MTkuNiAzMiA1OTQuNCAzMmMtNSAwLTEwIC44LTE0LjcgMi40QzU2NS40IDM5LjIgNDYyLjQgNzIgMzIwIDcyUzc0LjYgMzkuMiA2MC40IDM0LjRDNTUuNiAzMi44IDUwLjcgMzIgNDUuNiAzMnpNOTYgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTI3MiAwYzcuOSAwIDE1LjQgMy45IDE5LjggMTAuNUw1MTIuMyAzNTNjNS40IDggNS42IDE4LjQgLjQgMjYuNXMtMTQuNyAxMi4zLTI0LjIgMTAuN0M0NDIuNyAzODIuNCAzODUuMiAzNzYgMzIwIDM3NmMtNjUuNiAwLTEyMy40IDYuNS0xNjkuMyAxNC40Yy05LjggMS43LTE5LjctMi45LTI0LjctMTEuNXMtNC4zLTE5LjQgMS45LTI3LjJMMTk3LjMgMjY1YzQuNi01LjcgMTEuNC05IDE4LjctOXMxNC4yIDMuMyAxOC43IDlsMjYuNCAzMy4xIDg3LTEyNy42YzQuNS02LjYgMTEuOS0xMC41IDE5LjgtMTAuNXpcIl1cbn07XG52YXIgZmFDb21tZW50TWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21tZW50LW1lZGljYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ZjVcIiwgXCJNMjU2IDQ0OGMxNDEuNCAwIDI1Ni05My4xIDI1Ni0yMDhTMzk3LjQgMzIgMjU2IDMyUzAgMTI1LjEgMCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuMyAwIDAgMCAwIDAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45ek0yMjQgMTYwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NDhoNDhjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyODh2NDhjMCA4LjgtNy4yIDE2LTE2IDE2SDI0MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMjRjMC04LjggNy4yLTE2IDE2LTE2aDQ4VjE2MHpcIl1cbn07XG52YXIgZmFUZWV0aE9wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVldGgtb3BlbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjYyZlwiLCBcIk05NiAzMkM0MyAzMiAwIDc1IDAgMTI4djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC01My00My05Ni05Ni05Nkg5NnpNMjI0IDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djU2YzAgMTMuMy0xMC43IDI0LTI0IDI0SDIwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em04MCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djU2YzAgMTMuMy0xMC43IDI0LTI0IDI0SDMyOGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMTQ0ek05NiAxMjhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRINzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHptMzM2IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRINDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYxNzZ6TTk2IDQ4MEg0ODBjNTMgMCA5Ni00MyA5Ni05NlYzNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0djMyYzAgNTMgNDMgOTYgOTYgOTZ6bTAtNjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHYyNGMwIDI2LjUtMjEuNSA0OC00OCA0OHptODAtNDhWMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4em0xNzYgNDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHYyNGMwIDI2LjUtMjEuNSA0OC00OCA0OHptODAtNDhWMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4elwiXVxufTtcbnZhciBmYUZpbGVDaXJjbGVNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWNpcmNsZS1taW51cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRlZFwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgyMjRWMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NHYzOC42QzMxMC4xIDIxOS41IDI1NiAyODcuNCAyNTYgMzY4YzAgNTkuMSAyOS4xIDExMS4zIDczLjcgMTQzLjNjLTMuMiAuNS02LjQgLjctOS43IC43SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6TTI4OCAzNjhhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjI0IDBjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg0OTZjOC44IDAgMTYtNy4yIDE2LTE2elwiXVxufTtcbnZhciBmYVRhZ3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFncycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjAyY1wiLCBcIk0zNDUgMzkuMUw0NzIuOCAxNjguNGM1Mi40IDUzIDUyLjQgMTM4LjIgMCAxOTEuMkwzNjAuOCA0NzIuOWMtOS4zIDkuNC0yNC41IDkuNS0zMy45IC4ycy05LjUtMjQuNS0uMi0zMy45TDQzOC42IDMyNS45YzMzLjktMzQuMyAzMy45LTg5LjQgMC0xMjMuN0wzMTAuOSA3Mi45Yy05LjMtOS40LTkuMi0yNC42IC4yLTMzLjlzMjQuNi05LjIgMzMuOSAuMnpNMCAyMjkuNVY4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMkgxOTcuNWMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN2wxNjggMTY4YzI1IDI1IDI1IDY1LjUgMCA5MC41TDI3Ny4zIDQ0Mi43Yy0yNSAyNS02NS41IDI1LTkwLjUgMGwtMTY4LTE2OEM2LjcgMjYyLjcgMCAyNDYuNSAwIDIyOS41ek0xNDQgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xudmFyIGZhV2luZUdsYXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dpbmUtZ2xhc3MnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjc4NjNdLCBcImY0ZTNcIiwgXCJNMzIuMSAyOS4zQzMzLjUgMTIuOCA0Ny40IDAgNjQgMEgyNTZjMTYuNiAwIDMwLjUgMTIuOCAzMS45IDI5LjNsMTQgMTY4LjRjNiA3Mi00Mi41IDEzNS4yLTEwOS45IDE1MC42VjQ0OGg0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxNjAgODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoNDhWMzQ4LjRDNjAuNiAzMzMgMTIuMSAyNjkuOCAxOC4xIDE5Ny44bDE0LTE2OC40em01NiA5OC43SDIzMS45bC01LjMtNjRIOTMuNGwtNS4zIDY0elwiXVxufTtcbnZhciBmYUZvcndhcmRGYXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZvcndhcmQtZmFzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzkxOTcsIFwiZmFzdC1mb3J3YXJkXCJdLCBcImYwNTBcIiwgXCJNMTguNCA0NDVjMTEuMiA1LjMgMjQuNSAzLjYgMzQuMS00LjRMMjI0IDI5Ny43VjQxNmMwIDEyLjQgNy4yIDIzLjcgMTguNCAyOXMyNC41IDMuNiAzNC4xLTQuNEw0NDggMjk3LjdWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjE0LjNMMjc2LjUgNzEuNGMtOS41LTcuOS0yMi44LTkuNy0zNC4xLTQuNFMyMjQgODMuNiAyMjQgOTZWMjE0LjNMNTIuNSA3MS40Yy05LjUtNy45LTIyLjgtOS43LTM0LjEtNC40UzAgODMuNiAwIDk2VjQxNmMwIDEyLjQgNy4yIDIzLjcgMTguNCAyOXpcIl1cbn07XG52YXIgZmFGYXN0Rm9yd2FyZCA9IGZhRm9yd2FyZEZhc3Q7XG52YXIgZmFGYWNlTWVoQmxhbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1tZWgtYmxhbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjYsIFwibWVoLWJsYW5rXCJdLCBcImY1YTRcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0yMDguNC00OGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xMjggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYU1laEJsYW5rID0gZmFGYWNlTWVoQmxhbms7XG52YXIgZmFTcXVhcmVQYXJraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wYXJraW5nJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3MzU5LCBcInBhcmtpbmdcIl0sIFwiZjU0MFwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTE5MiAyNTZoNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTkydjY0em00OCA2NEgxOTJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjg4IDE2OGMwLTIyLjEgMTcuOS00MCA0MC00MGg3MmM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnpcIl1cbn07XG52YXIgZmFQYXJraW5nID0gZmFTcXVhcmVQYXJraW5nO1xudmFyIGZhSG91c2VTaWduYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2Utc2lnbmFsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDEyXCIsIFwiTTM1Ny43IDguNWMtMTIuMy0xMS4zLTMxLjItMTEuMy00My40IDBsLTIwOCAxOTJjLTkuNCA4LjYtMTIuNyAyMi04LjUgMzRjODcuMSAyNS4zIDE1NS42IDk0LjIgMTgwLjMgMTgxLjZINDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1NmgzMmMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LjEtMzUuMmwtMjA4LTE5MnpNMjg4IDIwOGMwLTguOCA3LjItMTYgMTYtMTZoNjRjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkgzMDRjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDh6TTI0IDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGMxMDEuNiAwIDE4NCA4Mi40IDE4NCAxODRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTEyOC4xLTEwMy45LTIzMi0yMzItMjMyem04IDI1NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTAgMzc2YzAgMTMuMyAxMC43IDI0IDI0IDI0YzQ4LjYgMCA4OCAzOS40IDg4IDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC03NS4xLTYwLjktMTM2LTEzNi0xMzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0elwiXVxufTtcbnZhciBmYUJhcnNQcm9ncmVzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXJzLXByb2dyZXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0YXNrcy1hbHRcIl0sIFwiZjgyOFwiLCBcIk00NDggMTYwSDMyMFYxMjhINDQ4djMyek00OCA2NEMyMS41IDY0IDAgODUuNSAwIDExMnY2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek00NDggMzUydjMySDE5MlYzNTJINDQ4ek00OCAyODhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQ2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6XCJdXG59O1xudmFyIGZhVGFza3NBbHQgPSBmYUJhcnNQcm9ncmVzcztcbnZhciBmYUZhdWNldERyaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmF1Y2V0LWRyaXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2ODhdLCBcImUwMDZcIiwgXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDRsOTYtMTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMjU2IDg0bC0zMS0zLjktMS0uMS0xIC4xTDE5MiA4NCA5NiA5NkM3OC4zIDk2IDY0IDgxLjcgNjQgNjRzMTQuMy0zMiAzMi0zMmw5NiAxMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJoOTZsMjIuNi0yMi42YzYtNiAxNC4xLTkuNCAyMi42LTkuNEgxOTJWMTE2LjJsMzItNCAzMiA0VjE2MGgxOC43YzguNSAwIDE2LjYgMy40IDIyLjYgOS40TDMyMCAxOTJoMzJjODguNCAwIDE2MCA3MS42IDE2MCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJINDE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMtMTQuMy0zMi0zMi0zMkgzMTUuOWMtMjAuMiAyOS01My45IDQ4LTkxLjkgNDhzLTcxLjctMTktOTEuOS00OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjI0ek00MzYuOCA0MjMuNGMxLjktNC41IDYuMy03LjQgMTEuMi03LjRzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnYtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMWwxOC4yLTQyLjR6XCJdXG59O1xudmFyIGZhQ2FydEZsYXRiZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FydC1mbGF0YmVkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJkb2xseS1mbGF0YmVkXCJdLCBcImY0NzRcIiwgXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NEg0OGM4LjggMCAxNiA3LjIgMTYgMTZWMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwaDE4LjdjLTEuOCA1LTIuNyAxMC40LTIuNyAxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4YzAtNS42LTEtMTEtMi43LTE2SDQ1MC43Yy0xLjggNS0yLjcgMTAuNC0yLjcgMTZjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZWODBDMTI4IDM1LjggOTIuMiAwIDQ4IDBIMzJ6TTE5MiA4MFYyNzJjMCAyNi41IDIxLjUgNDggNDggNDhINTYwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ2NFYxNzZjMCA1LjktMy4yIDExLjMtOC41IDE0LjFzLTExLjUgMi41LTE2LjQtLjhMNDAwIDE2My4ybC0zOS4xIDI2LjFjLTQuOSAzLjMtMTEuMiAzLjYtMTYuNCAuOHMtOC41LTguMi04LjUtMTQuMVYzMkgyNDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4elwiXVxufTtcbnZhciBmYURvbGx5RmxhdGJlZCA9IGZhQ2FydEZsYXRiZWQ7XG52YXIgZmFCYW5TbW9raW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jhbi1zbW9raW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Njg1LCBcInNtb2tpbmctYmFuXCJdLCBcImY1NGRcIiwgXCJNOTkuNSAxNDQuOEwxNzguNyAyMjRsOTYgOTYgOTIuNSA5Mi41QzMzNS45IDQzNC45IDI5Ny41IDQ0OCAyNTYgNDQ4QzE1MCA0NDggNjQgMzYyIDY0IDI1NmMwLTQxLjUgMTMuMS03OS45IDM1LjUtMTExLjJ6TTMzMy4zIDI4OGwtMzItMzJIMzg0djMySDMzMy4zem0zMiAzMkg0MDBjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMjY5LjNMMTQ0LjggOTkuNUMxNzYuMSA3Ny4xIDIxNC41IDY0IDI1NiA2NGMxMDYgMCAxOTIgODYgMTkyIDE5MmMwIDQxLjUtMTMuMSA3OS45LTM1LjUgMTExLjJMMzY1LjMgMzIwek0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjcyIDk2Yy04LjggMC0xNiA3LjItMTYgMTZjMCAyNi41IDIxLjUgNDggNDggNDhoMzJjOC44IDAgMTYgNy4yIDE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzA0Yy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNnpNMjI5LjUgMzIwbC05Ni05NkgxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZIMjI5LjV6XCJdXG59O1xudmFyIGZhU21va2luZ0JhbiA9IGZhQmFuU21va2luZztcbnZhciBmYVRlcm1pbmFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Rlcm1pbmFsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMTIwXCIsIFwiTTkuNCA4Ni42Qy0zLjEgNzQuMS0zLjEgNTMuOSA5LjQgNDEuNHMzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE3OC43IDI1NiA5LjQgODYuNnpNMjU2IDQxNkg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYU1vYmlsZUJ1dHRvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb2JpbGUtYnV0dG9uJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMTBiXCIsIFwiTTgwIDBDNDQuNyAwIDE2IDI4LjcgMTYgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMwNGMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NEg4MHpNMTkyIDQwMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhSG91c2VNZWRpY2FsRmxhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1tZWRpY2FsLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MTRcIiwgXCJNNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJINjI0YzguOCAwIDE2IDcuMiAxNiAxNlYxNzZjMCA4LjgtNy4yIDE2LTE2IDE2SDUxMlY1MTJINDQ4VjE5MiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjc2LjggMzkuN0w0MTYgMTU5VjUxMmgxbC0uMiAwSDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyODhIMzJjLTEzLjQgMC0yNS40LTguMy0zMC0yMC45cy0xLTI2LjcgOS4yLTM1LjRsMjI0LTE5MmMxMi0xMC4zIDI5LjctMTAuMyA0MS43IDB6TTIyNCAyMDh2NDhIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMzIwaDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDI4OFYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDI0MGMtOC44IDAtMTYgNy4yLTE2IDE2elwiXVxufTtcbnZhciBmYUJhc2tldFNob3BwaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jhc2tldC1zaG9wcGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic2hvcHBpbmctYmFza2V0XCJdLCBcImYyOTFcIiwgXCJNMjUzLjMgMzUuMWM2LjEtMTEuOCAxLjUtMjYuMy0xMC4yLTMyLjRzLTI2LjMtMS41LTMyLjQgMTAuMkwxMTcuNiAxOTJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJMODMuOSA0NjMuNUM5MSA0OTIgMTE2LjYgNTEyIDE0NiA1MTJINDMwYzI5LjQgMCA1NS0yMCA2Mi4xLTQ4LjVMNTQ0IDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NTguNEwzNjUuMyAxMi45QzM1OS4yIDEuMiAzNDQuNy0zLjQgMzMyLjkgMi43cy0xNi4zIDIwLjYtMTAuMiAzMi40TDQwNC4zIDE5MkgxNzEuN0wyNTMuMyAzNS4xek0xOTIgMzA0djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em05Ni0xNmM4LjggMCAxNiA3LjIgMTYgMTZ2OTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzA0YzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYVNob3BwaW5nQmFza2V0ID0gZmFCYXNrZXRTaG9wcGluZztcbnZhciBmYVRhcGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFwZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjRkYlwiLCBcIk0zODAuOCA0MTZjNDEuNS00MC43IDY3LjItOTcuMyA2Ny4yLTE2MEM0NDggMTMyLjMgMzQ3LjcgMzIgMjI0IDMyUzAgMTMyLjMgMCAyNTZTMTAwLjMgNDgwIDIyNCA0ODBINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM4MC44ek0yMjQgMTYwYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem02NCA5NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6XCJdXG59O1xudmFyIGZhQnVzU2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1cy1zaW1wbGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImJ1cy1hbHRcIl0sIFwiZjU1ZVwiLCBcIk0yMjQgMEMzNDguOCAwIDQ0OCAzNS4yIDQ0OCA4MFY5NiA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0NDhIMTI4djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY5NiA4MEMwIDM1LjIgOTkuMiAwIDIyNCAwek02NCAxMjhWMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMlYxMjhjMC0xNy43LTE0LjMtMzItMzItMzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04MCA0MDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0yODggMGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQnVzQWx0ID0gZmFCdXNTaW1wbGU7XG52YXIgZmFFeWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXllJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDY1XSwgXCJmMDZlXCIsIFwiTTI4OCAzMmMtODAuOCAwLTE0NS41IDM2LjgtMTkyLjYgODAuNkM0OC42IDE1NiAxNy4zIDIwOCAyLjUgMjQzLjdjLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42QzE3LjMgMzA0IDQ4LjYgMzU2IDk1LjQgMzk5LjRDMTQyLjUgNDQzLjIgMjA3LjIgNDgwIDI4OCA0ODBzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjFjMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjZjLTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjFDNDMzLjUgNjguOCAzNjguOCAzMiAyODggMzJ6TTE0NCAyNTZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTY0YzAgMzUuMy0yOC43IDY0LTY0IDY0Yy03LjEgMC0xMy45LTEuMi0yMC4zLTMuM2MtNS41LTEuOC0xMS45IDEuNi0xMS43IDcuNGMuMyA2LjkgMS4zIDEzLjggMy4yIDIwLjdjMTMuNyA1MS4yIDY2LjQgODEuNiAxMTcuNiA2Ny45czgxLjYtNjYuNCA2Ny45LTExNy42Yy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM3pcIl1cbn07XG52YXIgZmFGYWNlU2FkQ3J5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Utc2FkLWNyeScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1NywgXCJzYWQtY3J5XCJdLCBcImY1YjNcIiwgXCJNMzUyIDQ5My40Yy0yOS42IDEyLTYyLjEgMTguNi05NiAxOC42cy02Ni40LTYuNi05Ni0xOC42VjI4OGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlY0NzcuOEM1MS41IDQzMy41IDAgMzUwLjggMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgOTQuOC01MS41IDE3Ny41LTEyOCAyMjEuOFYyODhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWNDkzLjR6TTE5NS4yIDIzMy42YzUuMyA3LjEgMTUuMyA4LjUgMjIuNCAzLjJzOC41LTE1LjMgMy4yLTIyLjRjLTMwLjQtNDAuNS05MS4yLTQwLjUtMTIxLjYgMGMtNS4zIDcuMS0zLjkgMTcuMSAzLjIgMjIuNHMxNy4xIDMuOSAyMi40LTMuMmMxNy42LTIzLjUgNTIuOC0yMy41IDcwLjQgMHptMTIxLjYgMGMxNy42LTIzLjUgNTIuOC0yMy41IDcwLjQgMGM1LjMgNy4xIDE1LjMgOC41IDIyLjQgMy4yczguNS0xNS4zIDMuMi0yMi40Yy0zMC40LTQwLjUtOTEuMi00MC41LTEyMS42IDBjLTUuMyA3LjEtMy45IDE3LjEgMy4yIDIyLjRzMTcuMSAzLjkgMjIuNC0zLjJ6TTIwOCAzMzZ2MzJjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OFYzMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6XCJdXG59O1xudmFyIGZhU2FkQ3J5ID0gZmFGYWNlU2FkQ3J5O1xudmFyIGZhQXVkaW9EZXNjcmlwdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhdWRpby1kZXNjcmlwdGlvbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjI5ZVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIxMy41IDE3My4zbDcyIDE0NGM1LjkgMTEuOSAxLjEgMjYuMy0xMC43IDMyLjJzLTI2LjMgMS4xLTMyLjItMTAuN2wtOS40LTE4LjlIMTUwLjlsLTkuNCAxOC45Yy01LjkgMTEuOS0yMC4zIDE2LjctMzIuMiAxMC43cy0xNi43LTIwLjMtMTAuNy0zMi4ybDcyLTE0NGM0LjEtOC4xIDEyLjQtMTMuMyAyMS41LTEzLjNzMTcuNCA1LjEgMjEuNSAxMy4zem0tLjQgMTA2LjZMMTkyIDIzNy43bC0yMS4xIDQyLjJoNDIuMnpNMzA0IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg1NmM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NkgzMjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE4NHptNDggMjR2OTZoMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhIMzUyelwiXVxufTtcbnZhciBmYVBlcnNvbk1pbGl0YXJ5VG9QZXJzb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLW1pbGl0YXJ5LXRvLXBlcnNvbicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU0Y1wiLCBcIk03MSAxMi41Yy04LjYgMS0xNSA4LjItMTUgMTYuOGMwIDkuMyA3LjUgMTYuOCAxNi43IDE2LjlIMTg0LjFjOC44LS4xIDE1LjktNy4yIDE1LjktMTZWMTZjMC05LjUtOC4zLTE3LTE3LjgtMTUuOUw3MSAxMi41ek0xODkuNSA3OC4xSDY2LjVDNjQuOSA4My44IDY0IDg5LjggNjQgOTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTYuMi0uOS0xMi4yLTIuNS0xNy45ek0zMiAyNTZ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJIMTkyYzEuOCAwIDMuNS0uMSA1LjItLjRMNTMgMjA4LjZDNDAuMSAyMjAuMyAzMiAyMzcuMiAzMiAyNTZ6bTE5MC4yIDQyLjVjMS4xLTMuMyAxLjgtNi44IDEuOC0xMC41VjI1NmMwLTM1LjMtMjguNy02NC02NC02NEg5NmMtMy43IDAtNy40IC4zLTEwLjkgLjlMMjIyLjIgMjk4LjV6TTM4NCAxNjBhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bS0zMiAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjR2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJINDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI1NmMwLTM1LjMtMjguNy02NC02NC02NEgzNTJ6TTIxNS44IDQ1MC4xYzUuMi00LjYgOC4yLTExLjEgOC4yLTE4LjFzLTMtMTMuNS04LjItMTguMWwtNjQtNTZjLTcuMS02LjItMTcuMS03LjctMjUuNy0zLjhTMTEyIDM2Ni42IDExMiAzNzZ2MzJsLTg4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODggMHYzMmMwIDkuNCA1LjUgMTggMTQuMSAyMS45czE4LjYgMi40IDI1LjctMy44bDY0LTU2ek0yODggNDMxLjljMCA2LjkgMi45IDEzLjUgOC4xIDE4LjFsNjQgNTYuNGM3LjEgNi4yIDE3LjEgNy44IDI1LjcgMy45czE0LjEtMTIuNCAxNC4xLTIxLjlsMC0zMi40IDg4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg4IDAgMC0zMmMwLTkuNC01LjUtMTgtMTQuMS0yMS45cy0xOC42LTIuNC0yNS43IDMuOGwtNjQgNTZjLTUuMiA0LjUtOC4yIDExLjEtOC4yIDE4elwiXVxufTtcbnZhciBmYUZpbGVTaGllbGQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1zaGllbGQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZjBcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2NDdsLTkyLjggMzcuMWMtMjEuMyA4LjUtMzUuMiAyOS4xLTM1LjIgNTJjMCA1Ni42IDE4LjkgMTQ4IDk0LjIgMjA4LjNjLTkgNC44LTE5LjMgNy42LTMwLjIgNy42SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6bTM5LjEgOTcuN2M1LjctMi4zIDEyLjEtMi4zIDE3LjggMGwxMjAgNDhDNTcwIDI3Ny40IDU3NiAyODYuMiA1NzYgMjk2YzAgNjMuMy0yNS45IDE2OC44LTEzNC44IDIxNC4yYy01LjkgMi41LTEyLjYgMi41LTE4LjUgMEMzMTMuOSA0NjQuOCAyODggMzU5LjMgMjg4IDI5NmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMC00OHpNNTI3LjQgMzEyTDQzMiAyNzMuOFY0NjEuN2M2OC4yLTMzIDkxLjUtOTkgOTUuNC0xNDkuN3pcIl1cbn07XG52YXIgZmFVc2VyU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjUwNlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM1My4zIDI1MS42QzQwNy45IDIzNyA0NDggMTg3LjIgNDQ4IDEyOEM0NDggNTcuMyAzOTAuNyAwIDMyMCAwQzI1MC4yIDAgMTkzLjUgNTUuOCAxOTIgMTI1LjJMMzguOCA1LjF6TTI2NC4zIDMwNC4zQzE3MC41IDMwOS40IDk2IDM4Ny4yIDk2IDQ4Mi4zYzAgMTYuNCAxMy4zIDI5LjcgMjkuNyAyOS43SDUxNC4zYzMuOSAwIDcuNi0uNyAxMS0yLjFsLTI2MS0yMDUuNnpcIl1cbn07XG52YXIgZmFQZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzk0XSwgXCJmMzA0XCIsIFwiTTM2Mi43IDE5LjNMMzE0LjMgNjcuNyA0NDQuMyAxOTcuN2w0OC40LTQ4LjRjMjUtMjUgMjUtNjUuNSAwLTkwLjVMNDUzLjMgMTkuM2MtMjUtMjUtNjUuNS0yNS05MC41IDB6bS03MSA3MUw1OC42IDMyMy41Yy0xMC40IDEwLjQtMTggMjMuMy0yMi4yIDM3LjRMMSA0ODEuMkMtMS41IDQ4OS43IC44IDQ5OC44IDcgNTA1czE1LjMgOC41IDIzLjcgNi4xbDEyMC4zLTM1LjRjMTQuMS00LjIgMjctMTEuOCAzNy40LTIyLjJMNDIxLjcgMjIwLjMgMjkxLjcgOTAuM3pcIl1cbn07XG52YXIgZmFUb3dlck9ic2VydmF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Rvd2VyLW9ic2VydmF0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTg2XCIsIFwiTTI0MS43IDMuNGM5LTQuNSAxOS42LTQuNSAyOC42IDBsMTYwIDgwYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlDNDM5IDEzNy41IDQyNy43IDE0NCA0MTYgMTQ0djgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyaC00LjlsMzIgMTkySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODQuNWMtLjQgMC0uOCAwLTEuMSAwSDEyOC42Yy0uNCAwLS44IDAtMS4xIDBIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoNjguOWwzMi0xOTJIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNDRjLTExLjcgMC0yMy02LjUtMjguNi0xNy43Yy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45bDE2MC04MHpNMzE0LjUgNDQ4TDI1NiAzOTkuMiAxOTcuNSA0NDhoMTE3ek0xOTcuOCAyNTZsLTQuNyAyOC4zTDI1NiAzMzYuOGw2Mi45LTUyLjVMMzE0LjIgMjU2SDE5Ny44em0tMTMuOSA4My4ybC0xMS4yIDY3TDIxOC41IDM2OGwtMzQuNi0yOC44ek0yOTMuNSAzNjhsNDUuOCAzOC4xLTExLjItNjdMMjkzLjUgMzY4ek0xNzYgMTI4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDMzNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNzZ6XCJdXG59O1xudmFyIGZhRmlsZUNvZGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jb2RlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMWM5XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNMTUzIDI4OWwtMzEgMzEgMzEgMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw3MSAzMzdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDQ4LTQ4YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXpNMjY1IDI1NWw0OCA0OGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNDggNDhjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMHpcIl1cbn07XG52YXIgZmFTaWduYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2lnbmFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjQ2LCBcInNpZ25hbC01XCIsIFwic2lnbmFsLXBlcmZlY3RcIl0sIFwiZjAxMlwiLCBcIk01NzYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ0OCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTIgMjI0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNMTkyIDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiA0MTZ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdXG59O1xudmFyIGZhU2lnbmFsNSA9IGZhU2lnbmFsO1xudmFyIGZhU2lnbmFsUGVyZmVjdCA9IGZhU2lnbmFsO1xudmFyIGZhQnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1cycsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODY1M10sIFwiZjIwN1wiLCBcIk0yODggMEM0MjIuNCAwIDUxMiAzNS4yIDUxMiA4MFY5NmwwIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMydjMyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDQ4SDE5MnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJoMFY5NmgwVjgwQzY0IDM1LjIgMTUzLjYgMCAyODggMHpNMTI4IDE2MHY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyNzJWMTI4SDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTMwNCAyODhINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMDRWMjg4ek0xNDQgNDAwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMjg4IDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zODQgODBjMC04LjgtNy4yLTE2LTE2LTE2SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgzNjhjOC44IDAgMTYtNy4yIDE2LTE2elwiXVxufTtcbnZhciBmYUhlYXJ0Q2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTAxXCIsIFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN0w0NTQuNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDMyIDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDA5LjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0MzIgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG52YXIgZmFIb3VzZUNoaW1uZXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY2hpbW5leScsXG4gIGljb246IFs1NzYsIDUxMiwgWzYzNDk5LCBcImhvbWUtbGdcIl0sIFwiZTNhZlwiLCBcIk01NDMuOCAyODcuNmMxNyAwIDMyLTE0IDMyLTMyLjFjMS05LTMtMTctMTEtMjRMNTEyIDE4NVY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkg0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjM2LjdMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFoMzJ2NjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOFY0NzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBoMTZjMS4yIDAgMi40LS4xIDMuNi0uMmMxLjUgLjEgMyAuMiA0LjUgLjJIMTYwaDI0YzIyLjEgMCA0MC0xNy45IDQwLTQwVjQ0OCAzODRjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjQgMjRjMCAyMi4xIDE3LjkgNDAgNDAgNDBoMjQgMzIuNWMxLjQgMCAyLjggMCA0LjItLjFjMS4xIC4xIDIuMiAuMSAzLjMgLjFoMTZjMjIuMSAwIDQwLTE3LjkgNDAtNDBWNDU1LjhjLjMtMi42IC41LTUuMyAuNS04LjFsLS43LTE2MC4yaDMyelwiXVxufTtcbnZhciBmYUhvbWVMZyA9IGZhSG91c2VDaGltbmV5O1xudmFyIGZhV2luZG93TWF4aW1pemUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2luZG93LW1heGltaXplJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcwXSwgXCJmMmQwXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNOTYgOTZINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYUZhY2VGcm93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWZyb3duJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NSwgXCJmcm93blwiXSwgXCJmMTE5XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNTkuMyAzODguN2MtMi42IDguNC0xMS42IDEzLjItMjAgMTAuNXMtMTMuMi0xMS42LTEwLjUtMjBDMTQ1LjIgMzI2LjEgMTk2LjMgMjg4IDI1NiAyODhzMTEwLjggMzguMSAxMjcuMyA5MS4zYzIuNiA4LjQtMi4xIDE3LjQtMTAuNSAyMHMtMTcuNC0yLjEtMjAtMTAuNUMzNDAuNSAzNDkuNCAzMDIuMSAzMjAgMjU2IDMyMHMtODQuNSAyOS40LTk2LjcgNjguN3pNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhRnJvd24gPSBmYUZhY2VGcm93bjtcbnZhciBmYVByZXNjcmlwdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmVzY3JpcHRpb24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1YjFcIiwgXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJWMTkydjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjI0aDUwLjdsMTI4IDEyOEwxMzcuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyODggMzk3LjMgMzkzLjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMzMuMyAzNTIgNDM4LjYgMjQ2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjg4IDMwNi43bC04NS44LTg1LjhDMjUxLjQgMjA5LjEgMjg4IDE2NC44IDI4OCAxMTJDMjg4IDUwLjEgMjM3LjkgMCAxNzYgMEgzMnpNMTc2IDE2MEg2NFY2NEgxNzZjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6XCJdXG59O1xudmFyIGZhU2hvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaG9wJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJzdG9yZS1hbHRcIl0sIFwiZjU0ZlwiLCBcIk0zNi44IDE5Mkg2MDMuMmMyMC4zIDAgMzYuOC0xNi41IDM2LjgtMzYuOGMwLTcuMy0yLjItMTQuNC02LjItMjAuNEw1NTguMiAyMS40QzU0OS4zIDggNTM0LjQgMCA1MTguMyAwSDEyMS43Yy0xNiAwLTMxIDgtMzkuOSAyMS40TDYuMiAxMzQuN2MtNCA2LjEtNi4yIDEzLjItNi4yIDIwLjRDMCAxNzUuNSAxNi41IDE5MiAzNi44IDE5MnpNNjQgMjI0VjM4NHY4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMzZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzg0IDIyNEgzMjBWMzg0SDEyOFYyMjRINjR6bTQ0OCAwVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjIyNEg1MTJ6XCJdXG59O1xudmFyIGZhU3RvcmVBbHQgPSBmYVNob3A7XG52YXIgZmFGbG9wcHlEaXNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Zsb3BweS1kaXNrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTkwLCAxMjg0MjYsIFwic2F2ZVwiXSwgXCJmMGM3XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNzMuM2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNTIgNTAuN0MzNDAgMzguNyAzMjMuNyAzMiAzMDYuNyAzMkg2NHptMCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjEyOHpNMjI0IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG52YXIgZmFTYXZlID0gZmFGbG9wcHlEaXNrO1xudmFyIGZhVmloYXJhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpaGFyYScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjZhN1wiLCBcIk0yODEgMjJMMzA1LjggNC43YzEuMy0uOSAyLjctMS44IDQuMS0yLjRDMzEzLjEgLjcgMzE2LjYgMCAzMjAgMHM2LjkgLjcgMTAuMSAyLjJjMS40IC43IDIuOCAxLjUgNC4xIDIuNEwzNTkgMjJDMzkzIDQ1LjggNDMwLjggNjMuNSA0NzAuOCA3NC40bDIzIDYuM2MxLjggLjUgMy42IDEuMSA1LjIgMmMzLjIgMS43IDUuOSA0IDguMSA2LjhjMy44IDQuOSA1LjYgMTEuMyA0LjcgMTcuOGMtLjQgMi44LTEuMiA1LjQtMi41IDcuOGMtMS43IDMuMi00IDUuOS02LjggOC4xYy00LjMgMy4yLTkuNiA1LjEtMTUuMSA0LjlINDgwdjU2LjFsNi40IDUuMSA1LjIgNC4xYzIxLjEgMTYuNyA0NSAyOS42IDcwLjUgMzguMWwyOC45IDkuNmMxLjYgLjUgMy4yIDEuMiA0LjYgMmMzLjEgMS43IDUuOCA0LjEgNy44IDYuOXMzLjUgNi4xIDQuMSA5LjZjLjUgMi43IC42IDUuNSAuMSA4LjNzLTEuNCA1LjQtMi43IDcuOGMtMS43IDMuMS00LjEgNS44LTYuOSA3LjhzLTYuMSAzLjUtOS42IDQuMWMtMS42IC4zLTMuMyAuNC01IC40SDU0NHY2NS45YzIwLjUgMjIuOCA0Ny40IDM5LjIgNzcuNCA0Ni43QzYzMiA0MDMgNjQwIDQxMi42IDY0MCA0MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRINTc2djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgzNTJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDEyOHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0YzAtMTEuNCA4LTIxIDE4LjYtMjMuNGMzMC03LjYgNTYuOS0yMy45IDc3LjQtNDYuN1YyODhINTYuNmMtMS43IDAtMy40LS4xLTUtLjRjLTMuNS0uNy02LjgtMi4xLTkuNi00LjFzLTUuMi00LjctNy03LjhjLTEuMy0yLjQtMi4zLTUtMi43LTcuOHMtLjQtNS42IC4xLTguM2MuNy0zLjUgMi4xLTYuOCA0LjEtOS42czQuNy01LjIgNy44LTYuOWMxLjQtLjggMy0xLjUgNC42LTJsMjguOS05LjZjMjUuNS04LjUgNDkuNC0yMS40IDcwLjUtMzguMWw1LjItNC4xIDYuNC01LjFWMTc2IDEyOGgtNy41Yy01LjUgLjEtMTAuOC0xLjctMTUuMS00LjljLTIuOC0yLjEtNS4xLTQuOC02LjgtOC4xYy0xLjItMi40LTIuMS01LTIuNS03LjhjLS45LTYuNSAuOS0xMi44IDQuNy0xNy44YzIuMS0yLjggNC44LTUuMSA4LjEtNi44YzEuNi0uOCAzLjQtMS41IDUuMi0ybDIzLTYuM0MyMDkuMiA2My41IDI0NyA0NS44IDI4MSAyMnpNNDE2IDEyOEgzMjAgMjI0djY0aDcyIDQ4IDcyVjEyOHpNMTYwIDI4OHY2NEgyOTZoMjQgMjRINDgwVjI4OEgzNDQgMzIwaDBIMjk2IDE2MHpcIl1cbn07XG52YXIgZmFTY2FsZVVuYmFsYW5jZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2NhbGUtdW5iYWxhbmNlZCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiYmFsYW5jZS1zY2FsZS1sZWZ0XCJdLCBcImY1MTVcIiwgXCJNNTIyLjEgNjIuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41UzUxOC42LTMuOSA1MDEuOSAxLjZsLTExMyAzNy43QzM3NSAxNS44IDM0OS4zIDAgMzIwIDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwYzAgMyAuMiA1LjkgLjUgOC44TDExNy45IDEyOS42Yy0xNi44IDUuNi0yNS44IDIzLjctMjAuMiA0MC41czIzLjcgMjUuOCA0MC41IDIwLjJsMTM1LjUtNDUuMmM0LjUgMy4yIDkuMyA1LjkgMTQuNCA4LjJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDUxMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNTJWMTUzLjNjMjEtOS4yIDM3LjItMjcgNDQuMi00OWwxMjUuOS00MnpNNDM5LjYgMjg4TDUxMiAxNjMuOCA1ODQuNCAyODhINDM5LjZ6TTUxMiAzODRjNjIuOSAwIDExNS4yLTM0IDEyNi03OC45YzIuNi0xMS0xLTIyLjMtNi43LTMyLjFMNTM2LjEgMTA5LjhjLTUtOC42LTE0LjItMTMuOC0yNC4xLTEzLjhzLTE5LjEgNS4zLTI0LjEgMTMuOEwzOTIuNyAyNzMuMWMtNS43IDkuOC05LjMgMjEuMS02LjcgMzIuMUMzOTYuOCAzNTAgNDQ5LjEgMzg0IDUxMiAzODR6TTEyOS4yIDI5MS44TDIwMS42IDQxNkg1Ni43bDcyLjQtMTI0LjJ6TTMuMiA0MzMuMUMxNCA0NzggNjYuMyA1MTIgMTI5LjIgNTEyczExNS4yLTM0IDEyNi03OC45YzIuNi0xMS0xLTIyLjMtNi43LTMyLjFMMTUzLjIgMjM3LjhjLTUtOC42LTE0LjItMTMuOC0yNC4xLTEzLjhzLTE5LjEgNS4zLTI0LjEgMTMuOEw5LjkgNDAxLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjF6XCJdXG59O1xudmFyIGZhQmFsYW5jZVNjYWxlTGVmdCA9IGZhU2NhbGVVbmJhbGFuY2VkO1xudmFyIGZhU29ydFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NvcnQtdXAnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInNvcnQtYXNjXCJdLCBcImYwZGVcIiwgXCJNMTgyLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhIMjg4YzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTEyOC0xMjh6XCJdXG59O1xudmFyIGZhU29ydEFzYyA9IGZhU29ydFVwO1xudmFyIGZhQ29tbWVudERvdHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudC1kb3RzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTcyLCA2MjA3NSwgXCJjb21tZW50aW5nXCJdLCBcImY0YWRcIiwgXCJNMjU2IDQ0OGMxNDEuNCAwIDI1Ni05My4xIDI1Ni0yMDhTMzk3LjQgMzIgMjU2IDMyUzAgMTI1LjEgMCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuMyAwIDAgMCAwIDAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45ek0xMjggMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbnZhciBmYUNvbW1lbnRpbmcgPSBmYUNvbW1lbnREb3RzO1xudmFyIGZhUGxhbnRXaWx0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW50LXdpbHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1YWFcIiwgXCJNMjg4IDEyMGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2djEzYy0yOS4zIDEwLTQ4IDM0LjUtNDggNzAuMWMwIDI3LjkgMjUuMyA3NC44IDY2IDExMS42YzMuOCAzLjUgOC45IDUuMyAxNCA1LjNzMTAuMi0xLjggMTQtNS4zYzQwLjctMzYuOCA2Ni04My43IDY2LTExMS42YzAtMzUuNi0xOC43LTYwLjItNDgtNzAuMVYxMjBDNDY0IDUzLjcgNDEwLjMgMCAzNDQgMFMyMjQgNTMuNyAyMjQgMTIwdjIxLjhDMjA3LjMgMTMzIDE4OC4yIDEyOCAxNjggMTI4Yy02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMHYxM2MtMjkuMyAxMC00OCAzNC41LTQ4IDcwLjFDMCAzNTkgMjUuMyA0MDUuOSA2NiA0NDIuN2MzLjggMy41IDguOSA1LjMgMTQgNS4zczEwLjItMS44IDE0LTUuM2M0MC43LTM2LjggNjYtODMuNyA2Ni0xMTEuNmMwLTM1LjYtMTguNy02MC4yLTQ4LTcwLjFWMjQ4YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZ2MzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjgwIDI0OCAxMjB6XCJdXG59O1xudmFyIGZhRGlhbW9uZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaWFtb25kJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTgzMF0sIFwiZjIxOVwiLCBcIk0yODQuMyAxMS43Yy0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMGwtMjE2IDIxNmMtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZsMjE2IDIxNmMxNS42IDE1LjYgNDAuOSAxNS42IDU2LjYgMGwyMTYtMjE2YzE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42bC0yMTYtMjE2elwiXVxufTtcbnZhciBmYUZhY2VHcmluU3F1aW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3Jpbi1zcXVpbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTgsIFwiZ3Jpbi1zcXVpbnRcIl0sIFwiZjU4NVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg4LjEgMzEyLjhjMTIuMy0zLjggMjQuMyA2LjkgMTkuMyAxOC43QzM4Mi40IDM5MC42IDMyNC4yIDQzMiAyNTYuMyA0MzJzLTEyNi4yLTQxLjQtMTUxLjEtMTAwLjVjLTUtMTEuOCA3LTIyLjUgMTkuMy0xOC43YzM5LjcgMTIuMiA4NC41IDE5IDEzMS44IDE5czkyLjEtNi44IDEzMS44LTE5ek0xMzMuNSAxNDYuN2w4OS45IDQ3LjljMTAuNyA1LjcgMTAuNyAyMS4xIDAgMjYuOGwtODkuOSA0Ny45Yy03LjkgNC4yLTE3LjUtMS41LTE3LjUtMTAuNWMwLTIuOCAxLTUuNSAyLjgtNy42bDM2LTQzLjItMzYtNDMuMmMtMS44LTIuMS0yLjgtNC44LTIuOC03LjZjMC05IDkuNi0xNC43IDE3LjUtMTAuNXpNMzk2IDE1Ny4xYzAgMi44LTEgNS41LTIuOCA3LjZsLTM2IDQzLjIgMzYgNDMuMmMxLjggMi4xIDIuOCA0LjggMi44IDcuNmMwIDktOS42IDE0LjctMTcuNSAxMC41bC04OS45LTQ3LjljLTEwLjctNS43LTEwLjctMjEuMSAwLTI2LjhsODkuOS00Ny45YzcuOS00LjIgMTcuNSAxLjUgMTcuNSAxMC41elwiXVxufTtcbnZhciBmYUdyaW5TcXVpbnQgPSBmYUZhY2VHcmluU3F1aW50O1xudmFyIGZhSGFuZEhvbGRpbmdEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1ob2xkaW5nLWRvbGxhcicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaGFuZC1ob2xkaW5nLXVzZFwiXSwgXCJmNGMwXCIsIFwiTTMxMiAyNFYzNC41YzYuNCAxLjIgMTIuNiAyLjcgMTguMiA0LjJjMTIuOCAzLjQgMjAuNCAxNi42IDE3IDI5LjRzLTE2LjYgMjAuNC0yOS40IDE3Yy0xMC45LTIuOS0yMS4xLTQuOS0zMC4yLTVjLTcuMy0uMS0xNC43IDEuNy0xOS40IDQuNGMtMi4xIDEuMy0zLjEgMi40LTMuNSAzYy0uMyAuNS0uNyAxLjItLjcgMi44YzAgLjMgMCAuNSAwIC42Yy4yIC4yIC45IDEuMiAzLjMgMi42YzUuOCAzLjUgMTQuNCA2LjIgMjcuNCAxMC4xbC45IC4zYzExLjEgMy4zIDI1LjkgNy44IDM3LjkgMTUuM2MxMy43IDguNiAyNi4xIDIyLjkgMjYuNCA0NC45Yy4zIDIyLjUtMTEuNCAzOC45LTI2LjcgNDguNWMtNi43IDQuMS0xMy45IDctMjEuMyA4LjhWMjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjIyMC42Yy05LjUtMi4zLTE4LjItNS4zLTI1LjYtNy44Yy0yLjEtLjctNC4xLTEuNC02LTJjLTEyLjYtNC4yLTE5LjQtMTcuOC0xNS4yLTMwLjRzMTcuOC0xOS40IDMwLjQtMTUuMmMyLjYgLjkgNSAxLjcgNy4zIDIuNWMxMy42IDQuNiAyMy40IDcuOSAzMy45IDguM2M4IC4zIDE1LjEtMS42IDE5LjItNC4xYzEuOS0xLjIgMi44LTIuMiAzLjItMi45Yy40LS42IC45LTEuOCAuOC00LjFsMC0uMmMwLTEgMC0yLjEtNC00LjZjLTUuNy0zLjYtMTQuMy02LjQtMjcuMS0xMC4zbC0xLjktLjZjLTEwLjgtMy4yLTI1LTcuNS0zNi40LTE0LjRjLTEzLjUtOC4xLTI2LjUtMjItMjYuNi00NC4xYy0uMS0yMi45IDEyLjktMzguNiAyNy43LTQ3LjRjNi40LTMuOCAxMy4zLTYuNCAyMC4yLTguMlYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek01NjguMiAzMzYuM2MxMy4xIDE3LjggOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41SDE5MiAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDY4LjhsNDQuOS0zNmMyMi43LTE4LjIgNTAuOS0yOCA4MC0yOEgyNzJoMTYgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjg4IDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgzOTIuNmwxMTkuNy04OC4yYzE3LjgtMTMuMSA0Mi44LTkuMyA1NS45IDguNXpNMTkzLjYgMzg0bDAgMC0uOSAwYy4zIDAgLjYgMCAuOSAwelwiXVxufTtcbnZhciBmYUhhbmRIb2xkaW5nVXNkID0gZmFIYW5kSG9sZGluZ0RvbGxhcjtcbnZhciBmYUJhY3Rlcml1bSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWN0ZXJpdW0nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwNWFcIiwgXCJNNDIzLjEgMzAuNmMzLjYtMTIuNy0zLjctMjYtMTYuNS0yOS43cy0yNiAzLjctMjkuNyAxNi41bC00LjIgMTQuN2MtOS44LS40LTE5LjkgLjUtMjkuOSAyLjhjLTEyLjEgMi44LTIzLjcgNS45LTM0LjkgOS40bC01LjktMTMuN2MtNS4yLTEyLjItMTkuMy0xNy44LTMxLjUtMTIuNnMtMTcuOCAxOS4zLTEyLjYgMzEuNWw0LjkgMTEuM2MtMjIgOS40LTQyIDIwLjEtNjAuMiAzMS44TDE5NiA4Mi43Yy03LjQtMTEtMjIuMy0xNC0zMy4zLTYuN3MtMTQgMjIuMy02LjcgMzMuM2w3LjggMTEuNmMtMTggMTUtMzMuNyAzMC44LTQ3LjMgNDcuMUwxMDMgMTU3LjNjLTEwLjQtOC4zLTI1LjUtNi42LTMzLjcgMy43cy02LjYgMjUuNSAzLjcgMzMuN2wxNSAxMmMtMi4xIDMuMi00LjEgNi41LTYgOS43Yy05LjQgMTUuNy0xNyAzMS0yMy4yIDQ1LjNsLTkuOS0zLjljLTEyLjMtNC45LTI2LjMgMS4xLTMxLjIgMTMuNHMxLjEgMjYuMyAxMy40IDMxLjJsMTEuNiA0LjZjLS4zIDEuMS0uNiAyLjEtLjkgMy4xYy0zLjUgMTIuNS01LjcgMjMuMi03LjEgMzEuM2MtLjcgNC4xLTEuMiA3LjUtMS42IDEwLjNjLS4yIDEuNC0uMyAyLjYtLjQgMy42bC0uMSAxLjQtLjEgLjYgMCAuMyAwIC4xYzAgMCAwIC4xIDM5LjIgMy43bDAgMC0zOS4yLTMuNmMtLjUgNS0uNiAxMC0uNCAxNC45bC0xNC43IDQuMkM0LjcgMzgwLjYtMi43IDM5My44IC45IDQwNi42czE2LjkgMjAuMSAyOS43IDE2LjVsMTMuOC0zLjljMTAuNiAyMC43IDI3LjYgMzcuOCA0OC41IDQ4LjVsLTMuOSAxMy43Yy0zLjYgMTIuNyAzLjcgMjYgMTYuNSAyOS43czI2LTMuNyAyOS43LTE2LjVsNC4yLTE0LjdjMjMuOCAxIDQ2LjMtNS41IDY1LjEtMTcuNkwyMTUgNDczYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTAuNi0xMC42YzkuMS0xNC4xIDE1LjEtMzAuNSAxNy00OC4zbC4xLS44Yy4zLTEuNyAxLTUuMSAyLjMtOS44bC4yLS44IDEyLjYgNS40YzEyLjIgNS4yIDI2LjMtLjQgMzEuNS0xMi42cy0uNC0yNi4zLTEyLjYtMzEuNWwtMTEuMy00LjhjOS45LTE0LjkgMjQuOS0zMS42IDQ4LjYtNDZsMi4xIDcuNWMzLjYgMTIuNyAxNi45IDIwLjEgMjkuNyAxNi41czIwLjEtMTYuOSAxNi41LTI5LjdMMzcxIDI1OS4yYzYuOS0yLjIgMTQuMy00LjMgMjIuMi02LjFjMTIuOS0zIDI0LjctOCAzNS4yLTE0LjhMNDM5IDI0OWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTEwLjYtMTAuNmMxMi4yLTE5IDE4LjYtNDEuNiAxNy42LTY1LjFsMTQuNy00LjJjMTIuNy0zLjYgMjAuMS0xNi45IDE2LjUtMjkuN3MtMTYuOS0yMC4xLTI5LjctMTYuNWwtMTMuNyAzLjljLTEwLjgtMjEuMi0yOC0zOC00OC41LTQ4LjVsMy45LTEzLjh6TTkyLjEgMzYzLjNsMCAwTDE0NCAzNjhsLTUxLjktNC43ek0xMTIgMzIwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTI0MCAxODRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUhhbmRQb2ludGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtcG9pbnRlcicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjI1YVwiLCBcIk0xMjggNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYxODguMmM4LjUtNy42IDE5LjctMTIuMiAzMi0xMi4yYzIwLjYgMCAzOC4yIDEzIDQ1IDMxLjJjOC44LTkuMyAyMS4yLTE1LjIgMzUtMTUuMmMyNS4zIDAgNDYgMTkuNSA0Ny45IDQ0LjNjOC41LTcuNyAxOS44LTEyLjMgMzIuMS0xMi4zYzI2LjUgMCA0OCAyMS41IDQ4IDQ4djQ4IDE2IDQ4YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0xNiAwSDI0MGwtLjEgMGgtNS4yYy01IDAtOS45LS4zLTE0LjctMWMtNTUuMy01LjYtMTA2LjItMzQtMTQwLTc5TDggMzM2Yy0xMy4zLTE3LjctOS43LTQyLjcgOC01NnM0Mi43LTkuNyA1NiA4bDU2IDc0LjdWNDB6TTI0MCAzMDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzMDR6bTQ4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzMDRjMC04LjgtNy4yLTE2LTE2LTE2em04MCAxNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjMwNHpcIl1cbn07XG52YXIgZmFEcnVtU3RlZWxwYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHJ1bS1zdGVlbHBhbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjU2YVwiLCBcIk0yODggMzJjMTU5LjEgMCAyODggNDggMjg4IDEyOFYzNTJjMCA4MC0xMjguOSAxMjgtMjg4IDEyOFMwIDQzMiAwIDM1MlYxNjBDMCA4MCAxMjguOSAzMiAyODggMzJ6TTUyOCAxNjBjMC05LjktOC0yOS45LTU1LTQ5LjhjLTE4LjYtNy45LTQwLjktMTQuNC02Ni0xOS40bC0yNy44IDQzLjZjLTcuMyAxMS41LTExLjIgMjQuOC0xMS4yIDM4LjRjMCAxNy41IDYuNCAzNC40IDE4LjEgNDcuNWw5LjggMTFjMjkuOC01LjIgNTUuOS0xMi41IDc3LjItMjEuNWM0Ny4xLTE5LjkgNTUtMzkuOSA1NS00OS44ek0zNDkuMiAyMzcuM2MtOC0yNi4yLTMyLjQtNDUuMy02MS4yLTQ1LjNzLTUzLjMgMTkuMS02MS4yIDQ1LjNjMTkuNCAxLjcgMzkuOSAyLjcgNjEuMiAyLjdzNDEuOC0uOSA2MS4yLTIuN3pNMTY5IDkwLjhjLTI1LjIgNS00Ny40IDExLjYtNjYgMTkuNEM1NiAxMzAuMSA0OCAxNTAuMSA0OCAxNjBzOCAyOS45IDU1IDQ5LjhjMjEuMyA5IDQ3LjQgMTYuMyA3Ny4yIDIxLjVsOS44LTExYzExLjYtMTMuMSAxOC4xLTMwIDE4LjEtNDcuNWMwLTEzLjYtMy45LTI2LjktMTEuMi0zOC40TDE2OSA5MC44em01Ni4zLThDMjI0LjUgODcgMjI0IDkxLjUgMjI0IDk2YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC00LjUtLjUtOS0xLjQtMTMuMkMzMzAuOCA4MSAzMDkuOCA4MCAyODggODBzLTQyLjggMS02Mi42IDIuOHpcIl1cbn07XG52YXIgZmFIYW5kU2Npc3NvcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1zY2lzc29ycycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjI1N1wiLCBcIk00MCAyMDhjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMTgwLjIgMGMtNy42IDguNS0xMi4yIDE5LjctMTIuMiAzMmMwIDI1LjMgMTkuNSA0NiA0NC4zIDQ3LjljLTcuNyA4LjUtMTIuMyAxOS44LTEyLjMgMzIuMWMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwIDY0IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0xMTMuMWMwLTQwLjItMTYtNzguOC00NC40LTEwNy4zQzQ0NC44IDc2LjggNDEzLjkgNjQgMzgxLjcgNjRMMzM2IDY0Yy0yMS4zIDAtMzkuMyAxMy45LTQ1LjYgMzMuMWw3NC41IDIzLjdjOC40IDIuNyAxMy4xIDExLjcgMTAuNCAyMC4xcy0xMS43IDEzLjEtMjAuMSAxMC40TDI4OCAxMjkuOWwwIC4xTDg0IDY1LjhDNjIuOSA1OS4yIDQwLjUgNzAuOSAzMy44IDkyczUuMSA0My41IDI2LjIgNTAuMkwyNjkuNSAyMDggNDAgMjA4elwiXVxufTtcbnZhciBmYUhhbmRzUHJheWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kcy1wcmF5aW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwcmF5aW5nLWhhbmRzXCJdLCBcImY2ODRcIiwgXCJNMzUxLjIgNC44YzMuMi0yIDYuNi0zLjMgMTAtNC4xYzQuNy0xIDkuNi0uOSAxNC4xIC4xYzcuNyAxLjggMTQuOCA2LjUgMTkuNCAxMy42TDUxNC42IDE5NC4yYzguOCAxMy4xIDEzLjQgMjguNiAxMy40IDQ0LjR2NzMuNWMwIDYuOSA0LjQgMTMgMTAuOSAxNS4ybDc5LjIgMjYuNEM2MzEuMiAzNTggNjQwIDM3MC4yIDY0MCAzODR2OTZjMCA5LjktNC42IDE5LjMtMTIuNSAyNS40cy0xOC4xIDguMS0yNy43IDUuNUw0MzEgNDY1LjljLTU2LTE0LjktOTUtNjUuNy05NS0xMjMuN1YyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIxOS4xYzAtNy0xLjgtMTMuOC01LjMtMTkuOEwzNDAuMyA0OC4xYy0xLjctMy0yLjktNi4xLTMuNi05LjNjLTEtNC43LTEtOS42IC4xLTE0LjFjMS45LTggNi44LTE1LjIgMTQuMy0xOS45em0tNjIuNCAwYzcuNSA0LjYgMTIuNCAxMS45IDE0LjMgMTkuOWMxLjEgNC42IDEuMiA5LjQgLjEgMTQuMWMtLjcgMy4yLTEuOSA2LjMtMy42IDkuM0wyMTMuMyAxOTkuM2MtMy41IDYtNS4zIDEyLjktNS4zIDE5LjhWMzA0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzQyLjNjMCA1OC0zOSAxMDguNy05NSAxMjMuN2wtMTY4LjcgNDVjLTkuNiAyLjYtMTkuOSAuNS0yNy43LTUuNVMwIDQ5MCAwIDQ4MFYzODRjMC0xMy44IDguOC0yNiAyMS45LTMwLjRsNzkuMi0yNi40YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4yVjIzOC41YzAtMTUuOCA0LjctMzEuMiAxMy40LTQ0LjRMMjQ1LjIgMTQuNWM0LjYtNy4xIDExLjctMTEuOCAxOS40LTEzLjZjNC42LTEuMSA5LjQtMS4yIDE0LjEtLjFjMy41IC44IDYuOSAyLjEgMTAgNC4xelwiXVxufTtcbnZhciBmYVByYXlpbmdIYW5kcyA9IGZhSGFuZHNQcmF5aW5nO1xudmFyIGZhQXJyb3dSb3RhdGVSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yb3RhdGUtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs4NjM1LCBcImFycm93LXJpZ2h0LXJvdGF0ZVwiLCBcImFycm93LXJvdGF0ZS1mb3J3YXJkXCIsIFwicmVkb1wiXSwgXCJmMDFlXCIsIFwiTTM4Ni4zIDE2MEgzMzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjUxLjJMNDE0LjQgOTcuNmMtODcuNS04Ny41LTIyOS4zLTg3LjUtMzE2LjggMHMtODcuNSAyMjkuMyAwIDMxNi44czIyOS4zIDg3LjUgMzE2LjggMGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGMtNjIuNSA2Mi41LTE2My44IDYyLjUtMjI2LjMgMHMtNjIuNS0xNjMuOCAwLTIyNi4zczE2My44LTYyLjUgMjI2LjMgMEwzODYuMyAxNjB6XCJdXG59O1xudmFyIGZhQXJyb3dSaWdodFJvdGF0ZSA9IGZhQXJyb3dSb3RhdGVSaWdodDtcbnZhciBmYUFycm93Um90YXRlRm9yd2FyZCA9IGZhQXJyb3dSb3RhdGVSaWdodDtcbnZhciBmYVJlZG8gPSBmYUFycm93Um90YXRlUmlnaHQ7XG52YXIgZmFCaW9oYXphcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmlvaGF6YXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbOTc2M10sIFwiZjc4MFwiLCBcIk0xNzMuMiAwYy0xLjggMC0zLjUgLjctNC44IDJDMTM4LjUgMzIuMyAxMjAgNzQgMTIwIDEyMGMwIDI2LjIgNiA1MC45IDE2LjYgNzNjLTIyIDIuNC00My44IDkuMS02NC4yIDIwLjVDMzcuOSAyMzIuOCAxMy4zIDI2Mi40IC40IDI5NmMtLjcgMS43LS41IDMuNyAuNSA1LjJjMi4yIDMuNyA3LjQgNC4zIDEwLjYgMS4zQzY0LjIgMjU0LjMgMTU4IDI0NS4xIDIwNSAzMjRzLTguMSAxNTMuMS03Ny42IDE3My4yYy00LjIgMS4yLTYuMyA1LjktNC4xIDkuNmMxIDEuNiAyLjYgMi43IDQuNSAzYzM2LjUgNS45IDc1LjIgLjEgMTA5LjctMTkuMmMyMC40LTExLjQgMzcuNC0yNi41IDUwLjUtNDMuOGMxMy4xIDE3LjMgMzAuMSAzMi40IDUwLjUgNDMuOGMzNC41IDE5LjMgNzMuMyAyNS4yIDEwOS43IDE5LjJjMS45LS4zIDMuNS0xLjQgNC41LTNjMi4yLTMuNyAuMS04LjQtNC4xLTkuNkMzNzkuMSA0NzcuMSAzMjQgNDAzIDM3MSAzMjRzMTQwLjctNjkuOCAxOTMuNS0yMS40YzMuMiAyLjkgOC40IDIuMyAxMC42LTEuM2MxLTEuNiAxLjEtMy41IC41LTUuMmMtMTIuOS0zMy42LTM3LjUtNjMuMi03Mi4xLTgyLjVjLTIwLjQtMTEuNC00Mi4yLTE4LjEtNjQuMi0yMC41QzQ1MCAxNzAuOSA0NTYgMTQ2LjIgNDU2IDEyMGMwLTQ2LTE4LjUtODcuNy00OC40LTExOGMtMS4zLTEuMy0zLTItNC44LTJjLTUgMC04LjQgNS4yLTYuNyA5LjlDNDIxLjcgODAuNSAzODUuNiAxNzYgMjg4IDE3NlMxNTQuMyA4MC41IDE3OS45IDkuOWMxLjctNC43LTEuNi05LjktNi43LTkuOXpNMjQwIDI3MmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0xODEuNyA0MTcuNmM2LjMtMTEuOCA5LjgtMjUuMSA4LjYtMzkuOGMtMTkuNS0xOC0zNC00MS40LTQxLjItNjcuOGMtMTIuNS04LjEtMjYuMi0xMS44LTQwLTEyLjRjLTktLjQtMTguMSAuNi0yNy4xIDIuN2M3LjggNTcuMSAzOC43IDEwNi44IDgyLjkgMTM5LjRjNi44LTYuNyAxMi42LTE0LjEgMTYuOC0yMi4xek0yODggNjRjLTI4LjggMC01Ni4zIDUuOS04MS4yIDE2LjVjMiA4LjMgNSAxNi4yIDkgMjMuNWM2LjggMTIuNCAxNi43IDIzLjEgMzAuMSAzMC4zYzEzLjMtNC4xIDI3LjUtNi4zIDQyLjItNi4zczI4LjggMi4yIDQyLjIgNi4zYzEzLjQtNy4yIDIzLjMtMTcuOSAzMC4xLTMwLjNjNC03LjMgNy0xNS4yIDktMjMuNUMzNDQuMyA2OS45IDMxNi44IDY0IDI4OCA2NHpNNDI2LjkgMzEwYy03LjIgMjYuNC0yMS43IDQ5LjctNDEuMiA2Ny44Yy0xLjIgMTQuNyAyLjIgMjguMSA4LjYgMzkuOGM0LjMgOCAxMCAxNS40IDE2LjggMjIuMWM0NC4zLTMyLjYgNzUuMi04Mi4zIDgyLjktMTM5LjRjLTktMi4yLTE4LjEtMy4xLTI3LjEtMi43Yy0xMy44IC42LTI3LjUgNC40LTQwIDEyLjR6XCJdXG59O1xudmFyIGZhTG9jYXRpb25Dcm9zc2hhaXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xvY2F0aW9uLWNyb3NzaGFpcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxvY2F0aW9uXCJdLCBcImY2MDFcIiwgXCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjYuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS4zIDIyNEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDQ1LjNDNDMxLjkgMzY4LjQgMzY4LjQgNDMxLjkgMjg4IDQ0NS4zVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDUuM0MxNDMuNiA0MzEuOSA4MC4xIDM2OC40IDY2LjcgMjg4SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDY2LjdDODAuMSAxNDMuNiAxNDMuNiA4MC4xIDIyNCA2Ni43VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMjggMjU2YTEyOCAxMjggMCAxIDAgMjU2IDAgMTI4IDEyOCAwIDEgMCAtMjU2IDB6bTEyOC04MGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpcIl1cbn07XG52YXIgZmFMb2NhdGlvbiA9IGZhTG9jYXRpb25Dcm9zc2hhaXJzO1xudmFyIGZhTWFyc0RvdWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLWRvdWJsZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzk4OTFdLCBcImYyMjdcIiwgXCJNMzEyIDMyYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDMzLjQgMzMuNEwyNzUuOCAxNTljLTI4LjQtMTkuNS02Mi43LTMxLTk5LjgtMzFDNzguOCAxMjggMCAyMDYuOCAwIDMwNHM3OC44IDE3NiAxNzYgMTc2czE3Ni03OC44IDE3Ni0xNzZjMC0zNy0xMS40LTcxLjQtMzEtOTkuOGw1Mi42LTUyLjZMNDA3IDE4NWM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRIMzEyem04OCA0OGgwdjBsMCAwek02NCAzMDRhMTEyIDExMiAwIDEgMSAyMjQgMEExMTIgMTEyIDAgMSAxIDY0IDMwNHpNMzY4IDQ4MGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDUyLjYtNTIuNkw1OTkgMTg1YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMlY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEg1MDRjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOGMtMS4yIDIuOS0xLjggNi0xLjggOWwwIC4ydi4yYzAgNi4yIDIuNSAxMi4yIDcgMTYuOGwzMy40IDMzLjRMNDgwIDE0Ni43VjE2OGMwIDIyLjYtMTMuNiA0My4xLTM0LjYgNTEuN2MtLjggLjMtMS43IC43LTIuNSAxQzQ2NS43IDI0MS4yIDQ4MCAyNzAuOSA0ODAgMzA0YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyYy01LjQgMC0xMC44LS40LTE2LTEuMWMtMTIuOSAyMC40LTI5LjEgMzguMy00OC4xIDUzLjFjMTkuOCA3LjggNDEuNCAxMiA2NCAxMnpcIl1cbn07XG52YXIgZmFDaGlsZERyZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoaWxkLWRyZXNzJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTljXCIsIFwiTTIyNCA2NEE2NCA2NCAwIDEgMCA5NiA2NGE2NCA2NCAwIDEgMCAxMjggMHpNODggNDAwdjgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDAwaDE2djgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDAwaDE3LjhjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTMxLjEtOTMuNCAyOC42IDM3LjhjMTAuNyAxNC4xIDMwLjggMTYuOCA0NC44IDYuMnMxNi44LTMwLjcgNi4yLTQ0LjhMMjU0LjYgMjA3Yy0yMi40LTI5LjYtNTcuNS00Ny05NC42LTQ3cy03Mi4yIDE3LjQtOTQuNiA0N0w2LjUgMjg0LjdjLTEwLjcgMTQuMS03LjkgMzQuMiA2LjIgNDQuOHMzNC4yIDcuOSA0NC44LTYuMmwyOC43LTM3LjhMNTUgMzc4LjlDNTEuNiAzODkuMyA1OS4zIDQwMCA3MC4yIDQwMEg4OHpcIl1cbn07XG52YXIgZmFVc2Vyc0JldHdlZW5MaW5lcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2Vycy1iZXR3ZWVuLWxpbmVzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTkxXCIsIFwiTTAgMjRDMCAxMC43IDEwLjcgMCAyNCAwSDYxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyNEMxMC43IDQ4IDAgMzcuMyAwIDI0ek0wIDQ4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNEg2MTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek04My4yIDE2MGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyIDMyMGMwLTM1LjMgMjguNy02NCA2NC02NGg5NmMxMi4yIDAgMjMuNyAzLjQgMzMuNCA5LjRjLTM3LjIgMTUuMS02NS42IDQ3LjItNzUuOCA4Ni42SDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnptNDYxLjYgMzJjLTEwLjMtNDAuMS0zOS42LTcyLjYtNzcuNy04Ny40YzkuNC01LjUgMjAuNC04LjYgMzIuMS04LjZoOTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJINDkzLjZ6TTM5MS4yIDI5MC40YzMyLjEgNy40IDU4LjEgMzAuOSA2OC45IDYxLjZjMy41IDEwIDUuNSAyMC44IDUuNSAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmgtMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMmMwLTExLjIgMS45LTIyIDUuNS0zMmMxMC41LTI5LjcgMzUuMy01Mi44IDY2LjEtNjAuOWM3LjgtMi4xIDE2LTMuMSAyNC41LTMuMWg5NmM3LjQgMCAxNC43IC44IDIxLjYgMi40em00NC0xMzAuNGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyMS42IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYUx1bmdzVmlydXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbHVuZ3MtdmlydXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUwNjdcIiwgXCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTU2LjJjLTguNS03LjYtMTkuNy0xMi4yLTMyLTEyLjJzLTIzLjUgNC42LTMyIDEyLjJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ0NC41IDE5NS41Yy0xNi40LTE2LjQtNDEuOC0xOC41LTYwLjUtNi4xVjE2NS4zQzM4NCAxMjcgNDE1IDk2IDQ1My4zIDk2YzIxLjcgMCA0Mi44IDEwLjIgNTUuOCAyOC44YzE1LjQgMjIuMSA0NC4zIDY1LjQgNzEgMTE2LjljMjYuNSA1MC45IDUyLjQgMTEyLjUgNTkuNiAxNzAuM2MuMiAxLjMgLjIgMi42IC4yIDR2N2MwIDQ5LjEtMzkuOCA4OS04OSA4OWMtNy4zIDAtMTQuNS0uOS0yMS42LTIuN2wtNzIuNy0xOC4yYy0yMC45LTUuMi0zOC43LTE3LjEtNTEuNS0zMi45YzE0IDEuNSAyOC41LTMgMzkuMi0xMy44bC0yMi42LTIyLjYgMjIuNiAyMi42YzE4LjctMTguNyAxOC43LTQ5LjEgMC02Ny45Yy0xLjEtMS4xLTEuNC0yLTEuNS0yLjVjLS4xLS44LS4xLTEuOCAuNC0yLjlzMS4yLTEuOSAxLjgtMi4zYy41LS4zIDEuMy0uOCAyLjktLjhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhjLTEuNiAwLTIuNC0uNC0yLjktLjhjLS42LS40LTEuMy0xLjItMS44LTIuM3MtLjUtMi4yLS40LTIuOWMuMS0uNiAuNC0xLjQgMS41LTIuNWMxOC43LTE4LjcgMTguNy00OS4xIDAtNjcuOXpNNDIxLjggNDIxLjhjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwQzM3NS45IDM5OC41IDMzNiA0MTUgMzM2IDQ0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTMzLTM5LjktNDkuNS02My4yLTI2LjJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZDMjQxLjUgMzc1LjkgMjI1IDMzNiAxOTIgMzM2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2YzMzIDAgNDkuNS0zOS45IDI2LjItNjMuMmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwQzI2NC4xIDI0MS41IDMwNCAyMjUgMzA0IDE5MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2YzAgMzMgMzkuOSA0OS41IDYzLjIgMjYuMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZDMzk4LjUgMjY0LjEgNDE1IDMwNCA0NDggMzA0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2Yy0zMyAwLTQ5LjUgMzkuOS0yNi4yIDYzLjJjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZ6TTE4My4zIDQ5MS4ybC03Mi43IDE4LjJjLTcuMSAxLjgtMTQuMyAyLjctMjEuNiAyLjdjLTQ5LjEgMC04OS0zOS44LTg5LTg5di03YzAtMS4zIC4xLTIuNyAuMi00YzcuMi01Ny45IDMzLjEtMTE5LjQgNTkuNi0xNzAuM2MyNi44LTUxLjUgNTUuNi05NC44IDcxLTExNi45YzEzLTE4LjYgMzQtMjguOCA1NS44LTI4LjhDMjI1IDk2IDI1NiAxMjcgMjU2IDE2NS4zdjI0LjFjLTE4LjYtMTIuNC00NC0xMC4zLTYwLjUgNi4xYy0xOC43IDE4LjctMTguNyA0OS4xIDAgNjcuOWMxLjEgMS4xIDEuNCAyIDEuNSAyLjVjLjEgLjggLjEgMS44LS40IDIuOXMtMS4yIDEuOS0xLjggMi4zYy0uNSAuMy0xLjMgLjgtMi45IC44Yy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4YzEuNiAwIDIuNCAuNCAyLjkgLjhjLjYgLjQgMS4zIDEuMiAxLjggMi4zcy41IDIuMiAuNCAyLjljLS4xIC42LS40IDEuNC0xLjUgMi41Yy0xOC43IDE4LjctMTguNyA0OS4xIDAgNjcuOWMxMC43IDEwLjcgMjUuMyAxNS4zIDM5LjIgMTMuOGMtMTIuOCAxNS45LTMwLjYgMjcuNy01MS41IDMyLjl6TTI5NiAzMjBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em03MiAzMmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbnZhciBmYUZhY2VHcmluVGVhcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXRlYXJzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTE0LCBcImdyaW4tdGVhcnNcIl0sIFwiZjU4OFwiLCBcIk01NDguNiAzNzEuNEM1MDYuNCA0NTQuOCA0MTkuOSA1MTIgMzIwIDUxMnMtMTg2LjQtNTcuMi0yMjguNi0xNDAuNmM0LjUtMi45IDguNy02LjMgMTIuNy0xMC4zYzguMS04LjEgMTMuMi0xOC42IDE2LjUtMjYuNmMzLjYtOC44IDYuNS0xOC40IDguOC0yNy41YzQuNi0xOC4yIDcuNy0zNyA5LjMtNDguMmMzLjktMjYuNS0xOC44LTQ5LjItNDUuMi00NS40Yy02LjggLjktMTYuMiAyLjQtMjYuNiA0LjRDODUuMyA5NC41IDE5MS42IDAgMzIwIDBTNTU0LjcgOTQuNSA1NzMuMiAyMTcuN2MtMTAuMy0yLTE5LjgtMy41LTI2LjYtNC40Yy0yNi41LTMuOS00OS4yIDE4LjgtNDUuMiA0NS40YzEuNiAxMS4zIDQuNiAzMCA5LjMgNDguMmMyLjMgOS4xIDUuMiAxOC44IDguOCAyNy41YzMuMyA4LjEgOC40IDE4LjUgMTYuNSAyNi42YzMuOSAzLjkgOC4yIDcuNCAxMi43IDEwLjN6TTEwNyAyNTQuMWMtMy4xIDIxLjUtMTEuNCA3MC4yLTI1LjUgODQuNGMtLjkgMS0xLjkgMS44LTIuOSAyLjdDNjAgMzU2LjcgMzIgMzU1LjUgMTQuMyAzMzcuN2MtMTguNy0xOC43LTE5LjEtNDguOC0uNy02Ny4yYzguNi04LjYgMzAuMS0xNS4xIDUwLjUtMTkuNmMxMy0yLjggMjUuNS00LjggMzMuOS02YzUuNC0uOCA5LjkgMy43IDkgOXptNDU0LjUgODcuMWMtLjgtLjYtMS41LTEuMy0yLjMtMmMtLjItLjItLjUtLjQtLjctLjdjLTE0LjEtMTQuMS0yMi41LTYyLjktMjUuNS04NC40Yy0uOC01LjQgMy43LTkuOSA5LTljMSAuMSAyLjIgLjMgMy4zIC41YzguMiAxLjIgMTkuMiAzIDMwLjYgNS41YzIwLjQgNC40IDQxLjkgMTAuOSA1MC41IDE5LjZjMTguNCAxOC40IDE4IDQ4LjUtLjcgNjcuMmMtMTcuNyAxNy43LTQ1LjcgMTktNjQuMiAzLjR6bS05MC4xLTkuN2M1LTExLjgtNy0yMi41LTE5LjMtMTguN2MtMzkuNyAxMi4yLTg0LjUgMTktMTMxLjggMTlzLTkyLjEtNi44LTEzMS44LTE5Yy0xMi4zLTMuOC0yNC4zIDYuOS0xOS4zIDE4LjdjMjUgNTkuMSA4My4yIDEwMC41IDE1MS4xIDEwMC41czEyNi4yLTQxLjQgMTUxLjEtMTAwLjV6TTI4MS42IDIyOC44bDAgMCAwIDAgMCAwYzIuMSAyLjggNS43IDMuOSA4LjkgMi44czUuNS00LjEgNS41LTcuNmMwLTE3LjktNi43LTM1LjYtMTYuNi00OC44Yy05LjgtMTMtMjMuOS0yMy4yLTM5LjQtMjMuMnMtMjkuNiAxMC4yLTM5LjQgMjMuMkMxOTAuNyAxODguNCAxODQgMjA2LjEgMTg0IDIyNGMwIDMuNCAyLjIgNi41IDUuNSA3LjZzNi45IDAgOC45LTIuOGwwIDAgMCAwIDAgMCAuMi0uMmMuMi0uMiAuNC0uNSAuNy0uOWMuNi0uOCAxLjYtMiAyLjgtMy40YzIuNS0yLjggNi02LjYgMTAuMi0xMC4zYzguOC03LjggMTguOC0xNCAyNy43LTE0czE4LjkgNi4yIDI3LjcgMTRjNC4yIDMuNyA3LjcgNy41IDEwLjIgMTAuM2MxLjIgMS40IDIuMiAyLjYgMi44IDMuNGMuMyAuNCAuNiAuNyAuNyAuOWwuMiAuMiAwIDB6bTE2MCAwbDAgMCAwIDBjMi4xIDIuOCA1LjcgMy45IDguOSAyLjhzNS41LTQuMSA1LjUtNy42YzAtMTcuOS02LjctMzUuNi0xNi42LTQ4LjhjLTkuOC0xMy0yMy45LTIzLjItMzkuNC0yMy4ycy0yOS42IDEwLjItMzkuNCAyMy4yQzM1MC43IDE4OC40IDM0NCAyMDYuMSAzNDQgMjI0YzAgMy40IDIuMiA2LjUgNS41IDcuNnM2LjkgMCA4LjktMi44bDAgMCAwIDAgMCAwIC4yLS4yYy4yLS4yIC40LS41IC43LS45Yy42LS44IDEuNi0yIDIuOC0zLjRjMi41LTIuOCA2LTYuNiAxMC4yLTEwLjNjOC44LTcuOCAxOC44LTE0IDI3LjctMTRzMTguOSA2LjIgMjcuNyAxNGM0LjIgMy43IDcuNyA3LjUgMTAuMiAxMC4zYzEuMiAxLjQgMi4yIDIuNiAyLjggMy40Yy4zIC40IC42IC43IC43IC45bC4yIC4yIDAgMCAwIDB6XCJdXG59O1xudmFyIGZhR3JpblRlYXJzID0gZmFGYWNlR3JpblRlYXJzO1xudmFyIGZhUGhvbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGhvbmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjIsIDEyODM3OV0sIFwiZjA5NVwiLCBcIk0xNjQuOSAyNC42Yy03LjctMTguNi0yOC0yOC41LTQ3LjQtMjMuMmwtODggMjRDMTIuMSAzMC4yIDAgNDYgMCA2NEMwIDMxMS40IDIwMC42IDUxMiA0NDggNTEyYzE4IDAgMzMuOC0xMi4xIDM4LjYtMjkuNWwyNC04OGM1LjMtMTkuNC00LjYtMzkuNy0yMy4yLTQ3LjRsLTk2LTQwYy0xNi4zLTYuOC0zNS4yLTIuMS00Ni4zIDExLjZMMzA0LjcgMzY4QzIzNC4zIDMzNC43IDE3Ny4zIDI3Ny43IDE0NCAyMDcuM0wxOTMuMyAxNjdjMTMuNy0xMS4yIDE4LjQtMzAgMTEuNi00Ni4zbC00MC05NnpcIl1cbn07XG52YXIgZmFDYWxlbmRhclhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbGVuZGFyLXhtYXJrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYWxlbmRhci10aW1lc1wiXSwgXCJmMjczXCIsIFwiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0SDI4OFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjY0aDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djQ4SDBWMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0SDk2VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDE5Mkg0NDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxOTJ6TTMwNSAzMDVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNDcgNDctNDctNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNDcgNDctNDcgNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0Ny00NyA0NyA0N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ3LTQ3IDQ3LTQ3elwiXVxufTtcbnZhciBmYUNhbGVuZGFyVGltZXMgPSBmYUNhbGVuZGFyWG1hcms7XG52YXIgZmFDaGlsZFJlYWNoaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoaWxkLXJlYWNoaW5nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNTlkXCIsIFwiTTI1NiA2NEE2NCA2NCAwIDEgMCAxMjggNjRhNjQgNjQgMCAxIDAgMTI4IDB6TTE1Mi45IDE2OS4zYy0yMy43LTguNC00NC41LTI0LjMtNTguOC00NS44TDc0LjYgOTQuMkM2NC44IDc5LjUgNDUgNzUuNiAzMC4yIDg1LjRzLTE4LjcgMjkuNy04LjkgNDQuNEw0MC45IDE1OWMxOC4xIDI3LjEgNDIuOCA0OC40IDcxLjEgNjIuNFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjEuNmMyOS4xLTE0LjIgNTQuNC0zNi4yIDcyLjctNjQuMmwxOC4yLTI3LjljOS42LTE0LjggNS40LTM0LjYtOS40LTQ0LjNzLTM0LjYtNS41LTQ0LjMgOS40TDI5MSAxMjIuNGMtMjEuOCAzMy40LTU4LjkgNTMuNi05OC44IDUzLjZjLTEyLjYgMC0yNC45LTItMzYuNi01LjhjLS45LS4zLTEuOC0uNy0yLjctLjl6XCJdXG59O1xudmFyIGZhSGVhZFNpZGVWaXJ1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkLXNpZGUtdmlydXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwNjRcIiwgXCJNMCAyMjQuMkMwIDEwMC42IDEwMC4yIDAgMjI0IDBoMjRjOTUuMiAwIDE4MS4yIDY5LjMgMTk3LjMgMTYwLjJjMi4zIDEzIDYuOCAyNS43IDE1LjEgMzZsNDIgNTIuNmM2LjIgNy44IDkuNiAxNy40IDkuNiAyNy40YzAgMjQuMi0xOS42IDQzLjgtNDMuOCA0My44SDQ0OHY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEgzMjB2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwNy4zYzAtMTYuNy02LjktMzIuNS0xNy4xLTQ1LjhDMTYuNiAzMjIuNCAwIDI3NC4xIDAgMjI0LjJ6TTIyNCA2NGMtOC44IDAtMTYgNy4yLTE2IDE2YzAgMzMtMzkuOSA0OS41LTYzLjIgMjYuMmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkMxNDUuNSAxNTIuMSAxMjkgMTkyIDk2IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmMzMyAwIDQ5LjUgMzkuOSAyNi4yIDYzLjJjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEMxNjguMSAyODYuNSAyMDggMzAzIDIwOCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTMzIDM5LjktNDkuNSA2My4yLTI2LjJjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42QzMwMi41IDI2My45IDMxOSAyMjQgMzUyIDIyNGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtMzMgMC00OS41LTM5LjktMjYuMi02My4yYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBDMjc5LjkgMTI5LjUgMjQwIDExMyAyNDAgODBjMC04LjgtNy4yLTE2LTE2LTE2em0tMjQgOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4MGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbnZhciBmYVVzZXJHZWFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItZ2VhcicsXG4gIGljb246IFs2NDAsIDUxMiwgW1widXNlci1jb2dcIl0sIFwiZjRmZVwiLCBcIk0yMjQgMGExMjggMTI4IDAgMSAxIDAgMjU2QTEyOCAxMjggMCAxIDEgMjI0IDB6TTE3OC4zIDMwNGg5MS40YzExLjggMCAyMy40IDEuMiAzNC41IDMuM2MtMi4xIDE4LjUgNy40IDM1LjYgMjEuOCA0NC44Yy0xNi42IDEwLjYtMjYuNyAzMS42LTIwIDUzLjNjNCAxMi45IDkuNCAyNS41IDE2LjQgMzcuNnMxNS4yIDIzLjEgMjQuNCAzM2MxNS43IDE2LjkgMzkuNiAxOC40IDU3LjIgOC43di45YzAgOS4yIDIuNyAxOC41IDcuOSAyNi4zSDI5LjdDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0ek00MzYgMjE4LjJjMC03IDQuNS0xMy4zIDExLjMtMTQuOGMxMC41LTIuNCAyMS41LTMuNyAzMi43LTMuN3MyMi4yIDEuMyAzMi43IDMuN2M2LjggMS41IDExLjMgNy44IDExLjMgMTQuOHYxNy43YzAgNy44IDQuOCAxNC44IDExLjYgMTguN2M2LjggMy45IDE1LjEgNC41IDIxLjggLjZsMTMuOC03LjljNi4xLTMuNSAxMy43LTIuNyAxOC41IDIuNGM3LjYgOC4xIDE0LjMgMTcuMiAyMC4xIDI3LjJzMTAuMyAyMC40IDEzLjUgMzFjMi4xIDYuNy0xLjEgMTMuNy03LjIgMTcuMmwtMTQuNCA4LjNjLTYuNSAzLjctMTAgMTAuOS0xMCAxOC40czMuNSAxNC43IDEwIDE4LjRsMTQuNCA4LjNjNi4xIDMuNSA5LjIgMTAuNSA3LjIgMTcuMmMtMy4zIDEwLjYtNy44IDIxLTEzLjUgMzFzLTEyLjUgMTkuMS0yMC4xIDI3LjJjLTQuOCA1LjEtMTIuNSA1LjktMTguNSAyLjRsLTEzLjgtNy45Yy02LjctMy45LTE1LjEtMy4zLTIxLjggLjZjLTYuOCAzLjktMTEuNiAxMC45LTExLjYgMTguN3YxNy43YzAgNy00LjUgMTMuMy0xMS4zIDE0LjhjLTEwLjUgMi40LTIxLjUgMy43LTMyLjcgMy43cy0yMi4yLTEuMy0zMi43LTMuN2MtNi44LTEuNS0xMS4zLTcuOC0xMS4zLTE0LjhWNDY3LjhjMC03LjktNC45LTE0LjktMTEuNy0xOC45Yy02LjgtMy45LTE1LjItNC41LTIyLS42bC0xMy41IDcuOGMtNi4xIDMuNS0xMy43IDIuNy0xOC41LTIuNGMtNy42LTguMS0xNC4zLTE3LjItMjAuMS0yNy4ycy0xMC4zLTIwLjQtMTMuNS0zMWMtMi4xLTYuNyAxLjEtMTMuNyA3LjItMTcuMmwxNC04LjFjNi41LTMuOCAxMC4xLTExLjEgMTAuMS0xOC42cy0zLjUtMTQuOC0xMC4xLTE4LjZsLTE0LTguMWMtNi4xLTMuNS05LjItMTAuNS03LjItMTcuMmMzLjMtMTAuNiA3LjctMjEgMTMuNS0zMXMxMi41LTE5LjEgMjAuMS0yNy4yYzQuOC01LjEgMTIuNC01LjkgMTguNS0yLjRsMTMuNiA3LjhjNi44IDMuOSAxNS4yIDMuMyAyMi0uNmM2LjktMy45IDExLjctMTEgMTEuNy0xOC45VjIxOC4yem05Mi4xIDEzMy41YTQ4LjEgNDguMSAwIDEgMCAtOTYuMSAwIDQ4LjEgNDguMSAwIDEgMCA5Ni4xIDB6XCJdXG59O1xudmFyIGZhVXNlckNvZyA9IGZhVXNlckdlYXI7XG52YXIgZmFBcnJvd1VwMTkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtMS05JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LW51bWVyaWMtdXBcIl0sIFwiZjE2M1wiLCBcIk00NTAuNyAzOGM4LjMgNiAxMy4zIDE1LjcgMTMuMyAyNnY5NmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjEwOC40bC01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40ek0xNjAgMzJjOSAwIDE3LjUgMy44IDIzLjYgMTAuNGw4OCA5NmMxMS45IDEzIDExLjEgMzMuMy0yIDQ1LjJzLTMzLjMgMTEuMS00NS4yLTJMMTkyIDE0Ni4zVjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNDYuM0w5NS42IDE4MS42Yy0xMS45IDEzLTMyLjIgMTMuOS00NS4yIDJzLTEzLjktMzIuMi0yLTQ1LjJsODgtOTZDMTQyLjUgMzUuOCAxNTEgMzIgMTYwIDMyek00NDUuNyAzNjQuOUEzMiAzMiAwIDEgMCA0MTguMyAzMDdhMzIgMzIgMCAxIDAgMjcuNCA1Ny45em0tNDAuNyA1NC45QzM2OS42IDQwOC40IDM0NCAzNzUuMiAzNDQgMzM2YzAtNDguNiAzOS40LTg4IDg4LTg4czg4IDM5LjQgODggODhjMCAyMy41LTcuNSA0Ni4zLTIxLjUgNjUuMkw0NDkuNyA0NjdjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjdzLTE3LjItMzAuNi02LjctNDQuOGw2LjgtOS4yelwiXVxufTtcbnZhciBmYVNvcnROdW1lcmljVXAgPSBmYUFycm93VXAxOTtcbnZhciBmYURvb3JDbG9zZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9vci1jbG9zZWQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2ODJdLCBcImY1MmFcIiwgXCJNOTYgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRINDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMTQ0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDk2VjY0ek0zODQgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG52YXIgZmFTaGllbGRWaXJ1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGllbGQtdmlydXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwNmNcIiwgXCJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjJjLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yYzE2LjcgOCAzNi4xIDggNTIuOCAwQzQ1NC43IDQyMC43IDQ5NS41IDIzOS4yIDQ5NiAxNDBjLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMjU2IDExMmM4LjggMCAxNiA3LjIgMTYgMTZjMCAzMyAzOS45IDQ5LjUgNjMuMiAyNi4yYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkMzMzQuNSAyMDAuMSAzNTEgMjQwIDM4NCAyNDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTMzIDAtNDkuNSAzOS45LTI2LjIgNjMuMmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwQzMxMS45IDMzNC41IDI3MiAzNTEgMjcyIDM4NGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTMzLTM5LjktNDkuNS02My4yLTI2LjJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZDMTc3LjUgMzExLjkgMTYxIDI3MiAxMjggMjcyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2YzMzIDAgNDkuNS0zOS45IDI2LjItNjMuMmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwQzIwMC4xIDE3Ny41IDI0MCAxNjEgMjQwIDEyOGMwLTguOCA3LjItMTYgMTYtMTZ6TTIzMiAyNTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em03MiAzMmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbnZhciBmYURpY2VTaXggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1zaXgnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODYxXSwgXCJmNTI2XCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6bTE2MCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xMjggMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYU1vc3F1aXRvTmV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vc3F1aXRvLW5ldCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUyY1wiLCBcIk0xNjguOCA0NjIuM2MtNy45LTQtMTEuMS0xMy42LTcuMi0yMS41TDE5MiAzODAuMmwwLTQ0LjJjMC00LjIgMS43LTguMyA0LjctMTEuM0wyNTYgMjY1LjRWMjQyLjJMMTM5LjIgMzQ0Qzg3LjggMzk1LjMgMCAzNTguOSAwIDI4Ni4zYzAtNDEuMSAzMC42LTc1LjggNzEuNC04MC45bDE1OS45LTIzLjktNDkuNi00MS4zYy01LjEtNC4yLTctMTEuMS00LjktMTcuNGwxMy45LTQxLjctMjktNTguMWMtNC03LjktLjctMTcuNSA3LjItMjEuNXMxNy41LS43IDIxLjUgNy4ybDMyIDY0YzEuOSAzLjggMi4yIDguMiAuOSAxMi4ybC0xMi41IDM3LjZMMjU2IDE2MC41VjEzNy45YzAtMTQuOSAxMC4xLTI3LjMgMjMuOC0zMVY2My43YzAtNC41IDMuNy04LjIgOC4yLTguMnM4LjIgMy43IDguMiA4LjJWMTA3YzEzLjcgMy42IDIzLjggMTYuMSAyMy44IDMxdjIyLjZsNDUuNC0zNy44TDM1Mi44IDg1LjFjLTEuMy00LTEtOC40IC45LTEyLjJsMzItNjRjNC03LjkgMTMuNi0xMS4xIDIxLjUtNy4yczExLjEgMTMuNiA3LjIgMjEuNWwtMjkgNTguMSAxMy45IDQxLjdjMi4xIDYuMiAuMSAxMy4xLTQuOSAxNy40bC00OS42IDQxLjMgMTU5LjkgMjMuOWMyMi41IDIuOCA0MS44IDE0LjYgNTQuNyAzMS40Yy0yLjcgMi42LTUuMiA1LjQtNy4zIDguNmMtOC42LTEyLjktMjMuMy0yMS41LTQwLTIxLjVzLTMxLjQgOC41LTQwIDIxLjVjLTguNi0xMi45LTIzLjMtMjEuNS00MC0yMS41Yy0yMS43IDAtNDAgMTQuMy00NS45IDM0LjFjLTEwLjcgMy4yLTE5LjggMTAuMS0yNS45IDE5LjJsLTQwLjItMzV2MjMuMWwzMi40IDMyLjRjLS4zIDItLjQgNC4xLS40IDYuMmMwIDE2LjcgOC41IDMxLjQgMjEuNSA0MGMtNCAyLjYtNy41IDUuOS0xMC42IDkuNUwzMjAgMzEwLjZ2NTBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ2LTUwbC0zMiAzMiAwIDQxLjRjMCAyLjUtLjYgNC45LTEuNyA3LjJsLTMyIDY0Yy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJ6TTUxMiAyNTZjOC44IDAgMTYgNy4yIDE2IDE2djE2aDQ4VjI3MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDYwOHY0OGgxNmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg2MDh2NDhoMTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINjA4djE2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjQ4MEg1Mjh2MTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWNDgwSDQ0OHYxNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY0ODBINDAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDE2VjQwMEg0MDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoMTZWMzIwSDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgxNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYxNmg0OFYyNzJjMC04LjggNy4yLTE2IDE2LTE2em0xNiAxMTJoNDhWMzIwSDUyOHY0OHptMCA4MGg0OFY0MDBINTI4djQ4ek00NDggMzIwdjQ4aDQ4VjMyMEg0NDh6bTAgODB2NDhoNDhWNDAwSDQ0OHpcIl1cbn07XG52YXIgZmFCcmlkZ2VXYXRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmlkZ2Utd2F0ZXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0Y2VcIiwgXCJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NEg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzUuNmMwIDE1LjctMTIuNyAyOC40LTI4LjQgMjguNGMtMzcuMyAwLTY3LjYgMzAuMi02Ny42IDY3LjZWMzUyLjVjLTEyLjkgMC0yNS44IDMuOS0zNi44IDExLjdjLTE4IDEyLjQtNDAuMSAyMC4zLTU5LjIgMjAuM2gwbDAtLjVWMjU2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2VjM4NGwwIC41Yy0xOSAwLTQxLjItNy45LTU5LjEtMjAuM2MtMTEuMS03LjgtMjQtMTEuNy0zNi45LTExLjdWMjI3LjZDOTYgMTkwLjIgNjUuOCAxNjAgMjguNCAxNjBDMTIuNyAxNjAgMCAxNDcuMyAwIDEzMS42Vjk2ek0zMDYuNSAzODkuOUMzMjkgNDA1LjQgMzU2LjUgNDE2IDM4NCA0MTZjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFsMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNDY5LjcgNDE3IDQ4MCAzODQgNDgwYy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgNDA1LjIgMTY1LjEgNDE2IDE5MiA0MTZjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdXG59O1xudmFyIGZhUGVyc29uQm9vdGggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWJvb3RoJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNzU2XCIsIFwiTTI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYxOTJoNjRWMzJ6bTMyMCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMyek0yMjQgNTEyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjMyMEgxOTJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyek0zMjAgMGMtOS4zIDAtMTguMSA0LTI0LjIgMTFzLTguOCAxNi4zLTcuNSAyNS41bDMxLjIgMjE4LjZMMjg4LjYgNDA5LjdjLTMuNSAxNy4zIDcuOCAzNC4yIDI1LjEgMzcuN3MzNC4yLTcuOCAzNy43LTI1LjFsLjctMy42YzEuMyAxNi40IDE1LjEgMjkuNCAzMS45IDI5LjRjMTcuNyAwIDMyLTE0LjMgMzItMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMjB6TTExMiA4MEE0OCA0OCAwIDEgMCAxNiA4MGE0OCA0OCAwIDEgMCA5NiAwem0wIDI2MS4zVjI2OS4zbDQuNyA0LjdjOSA5IDIxLjIgMTQuMSAzMy45IDE0LjFIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE1Ny4zbC00MS42LTQxLjZjLTE0LjMtMTQuMy0zMy44LTIyLjQtNTQtMjIuNEMyNy42IDE2MCAwIDE4Ny42IDAgMjIxLjZ2NTUuN2wwIC45VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM4NGwzMiA0Mi43VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQyMS4zYzAtMTAuNC0zLjQtMjAuNS05LjYtMjguOEwxMTIgMzQxLjN6XCJdXG59O1xudmFyIGZhVGV4dFdpZHRoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RleHQtd2lkdGgnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwMzVcIiwgXCJNNjQgMTI4Vjk2SDE5MmwwIDEyOEgxNzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjU2bDAtMTI4SDM4NHYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDIyNCA0OEMyMS41IDMyIDAgNTMuNSAwIDgwdjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTkuNCAzNjEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNlY0MTZIMzIwdjMyYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXMtMTkuOCAxNi42LTE5LjggMjkuNnYzMkgxMjhWMzIwYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NHpcIl1cbn07XG52YXIgZmFIYXRXaXphcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGF0LXdpemFyZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjZlOFwiLCBcIk02NCA0MTZMMTY4LjYgMTgwLjdjMTUuMy0zNC40IDQwLjMtNjMuNSA3Mi04My43bDE0Ni45LTk0YzMtMS45IDYuNS0yLjkgMTAtMi45QzQwNy43IDAgNDE2IDguMyA0MTYgMTguNnYxLjZjMCAyLjYtLjUgNS4xLTEuNCA3LjVMMzU0LjggMTc2LjljLTEuOSA0LjctMi44IDkuNy0yLjggMTQuN2MwIDUuNSAxLjIgMTEgMy40IDE2LjFMNDQ4IDQxNkgyNDAuOWwxMS44LTM1LjQgNDAuNC0xMy41YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ycy00LjQtMTMtMTAuOS0xNS4ybC00MC40LTEzLjUtMTMuNS00MC40QzIzNyAyNzYuNCAyMzAuOSAyNzIgMjI0IDI3MnMtMTMgNC40LTE1LjIgMTAuOWwtMTMuNSA0MC40LTQwLjQgMTMuNUMxNDguNCAzMzkgMTQ0IDM0NS4xIDE0NCAzNTJzNC40IDEzIDEwLjkgMTUuMmw0MC40IDEzLjVMMjA3LjEgNDE2SDY0ek0yNzkuNiAxNDEuNWMtMS4xLTMuMy00LjEtNS41LTcuNi01LjVzLTYuNSAyLjItNy42IDUuNWwtNi43IDIwLjItMjAuMiA2LjdjLTMuMyAxLjEtNS41IDQuMS01LjUgNy42czIuMiA2LjUgNS41IDcuNmwyMC4yIDYuNyA2LjcgMjAuMmMxLjEgMy4zIDQuMSA1LjUgNy42IDUuNXM2LjUtMi4yIDcuNi01LjVsNi43LTIwLjIgMjAuMi02LjdjMy4zLTEuMSA1LjUtNC4xIDUuNS03LjZzLTIuMi02LjUtNS41LTcuNmwtMjAuMi02LjctNi43LTIwLjJ6TTMyIDQ0OEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhUGVuRmFuY3kgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuLWZhbmN5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzk1LCAxMDAwMl0sIFwiZjVhY1wiLCBcIk0zNzMuNSAyNy4xQzM4OC41IDkuOSA0MTAuMiAwIDQzMyAwYzQzLjYgMCA3OSAzNS40IDc5IDc5YzAgMjIuOC05LjkgNDQuNi0yNy4xIDU5LjZMMjc3LjcgMzE5bC0xMC4zLTEwLjMtNjQtNjRMMTkzIDIzNC4zIDM3My41IDI3LjF6TTE3MC4zIDI1Ni45bDEwLjQgMTAuNCA2NCA2NCAxMC40IDEwLjQtMTkuMiA4My40Yy0zLjkgMTcuMS0xNi45IDMwLjctMzMuOCAzNS40TDI0LjQgNTEwLjNsOTUuNC05NS40YzIuNiAuNyA1LjQgMS4xIDguMyAxLjFjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJjMCAyLjkgLjQgNS42IDEuMSA4LjNMMS43IDQ4Ny42IDUxLjUgMzEwYzQuNy0xNi45IDE4LjMtMjkuOSAzNS40LTMzLjhsODMuNC0xOS4yelwiXVxufTtcbnZhciBmYVBlcnNvbkRpZ2dpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWRpZ2dpbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImRpZ2dpbmdcIl0sIFwiZjg1ZVwiLCBcIk0yMDggNjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNOS44IDIxNC44YzUuMS0xMi4yIDE5LjEtMTggMzEuNC0xMi45TDYwLjcgMjEwbDIyLjktMzguMUM5OS45IDE0NC42IDEyOS4zIDEyOCAxNjEgMTI4YzUxLjQgMCA5NyAzMi45IDExMy4zIDgxLjdsMzQuNiAxMDMuNyA3OS4zIDMzLjEgMzQuMi00NS42YzYuNC04LjUgMTYuNi0xMy4zIDI3LjItMTIuOHMyMC4zIDYuNCAyNS44IDE1LjVsOTYgMTYwYzUuOSA5LjkgNi4xIDIyLjIgLjQgMzIuMnMtMTYuMyAxNi4yLTI3LjggMTYuMkgyODhjLTExLjEgMC0yMS40LTUuNy0yNy4yLTE1LjJzLTYuNC0yMS4yLTEuNC0zMS4xbDE2LTMyYzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdoMzJsMjIuNS0zMEwyMi44IDI0Ni4yYy0xMi4yLTUuMS0xOC0xOS4xLTEyLjktMzEuNHptODIuOCA5MS44bDExMiA0OGMxMS44IDUgMTkuNCAxNi42IDE5LjQgMjkuNHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0MDUuMWwtNjAuNi0yNi0zNyAxMTFjLTUuNiAxNi44LTIzLjcgMjUuOC00MC41IDIwLjJTLTMuOSA0ODYuNiAxLjYgNDY5LjlsNDgtMTQ0IDExLTMzIDMyIDEzLjd6XCJdXG59O1xudmFyIGZhRGlnZ2luZyA9IGZhUGVyc29uRGlnZ2luZztcbnZhciBmYVRyYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYXNoJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMWY4XCIsIFwiTTEzNS4yIDE3LjdMMTI4IDMySDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwbC03LjItMTQuM0MzMDcuNCA2LjggMjk2LjMgMCAyODQuMiAwSDE2My44Yy0xMi4xIDAtMjMuMiA2LjgtMjguNiAxNy43ek00MTYgMTI4SDMyTDUzLjIgNDY3YzEuNiAyNS4zIDIyLjYgNDUgNDcuOSA0NUgzNDYuOWMyNS4zIDAgNDYuMy0xOS43IDQ3LjktNDVMNDE2IDEyOHpcIl1cbn07XG52YXIgZmFHYXVnZVNpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXVnZS1zaW1wbGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImdhdWdlLXNpbXBsZS1tZWRcIiwgXCJ0YWNob21ldGVyLWF2ZXJhZ2VcIl0sIFwiZjYyOVwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTMyMCA5NmMwLTI2LjktMTYuNS00OS45LTQwLTU5LjNWODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWMjkyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuM2MwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbnZhciBmYUdhdWdlU2ltcGxlTWVkID0gZmFHYXVnZVNpbXBsZTtcbnZhciBmYVRhY2hvbWV0ZXJBdmVyYWdlID0gZmFHYXVnZVNpbXBsZTtcbnZhciBmYUJvb2tNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stbWVkaWNhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjdlNlwiLCBcIk0wIDk2QzAgNDMgNDMgMCA5NiAwSDM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0IDk2Yy01MyAwLTk2LTQzLTk2LTk2Vjk2ek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzUyVjM4NEg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTIwOCAxMTJ2NDhIMTYwYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjI0aDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYxNzZjMC04LjgtNy4yLTE2LTE2LTE2SDI3MlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2elwiXVxufTtcbnZhciBmYVBvbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwb28nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNjldLCBcImYyZmVcIiwgXCJNMjY4LjkgLjljLTUuNS0uNy0xMSAxLjQtMTQuNSA1LjdzLTQuNiAxMC4xLTIuOCAxNS40YzIuOCA4LjIgNC4zIDE2LjkgNC4zIDI2LjFjMCA0NC4xLTM1LjcgNzkuOS03OS44IDgwSDE2MGMtMzUuMyAwLTY0IDI4LjctNjQgNjRjMCAxOS4xIDguNCAzNi4zIDIxLjcgNDhIMTA0Yy0zOS44IDAtNzIgMzIuMi03MiA3MmMwIDIzLjIgMTEgNDMuOCAyOCA1N2MtMzQuMSA1LjctNjAgMzUuMy02MCA3MWMwIDM5LjggMzIuMiA3MiA3MiA3Mkg0NDBjMzkuOCAwIDcyLTMyLjIgNzItNzJjMC0zNS43LTI1LjktNjUuMy02MC03MWMxNy0xMy4yIDI4LTMzLjggMjgtNTdjMC0zOS44LTMyLjItNzItNzItNzJIMzk0LjNjMTMuMy0xMS43IDIxLjctMjguOSAyMS43LTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0aC01LjVjMy41LTEwIDUuNS0yMC44IDUuNS0zMmMwLTQ4LjYtMzYuMi04OC44LTgzLjEtOTUuMXpNMTkyIDI1NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTY0IDEwOC4zYzAgMi40LS43IDQuOC0yLjIgNi43Yy04LjIgMTAuNS0zOS41IDQ1LTkzLjggNDVzLTg1LjYtMzQuNi05My44LTQ1Yy0xLjUtMS45LTIuMi00LjMtMi4yLTYuN2MwLTYuOCA1LjUtMTIuMyAxMi4zLTEyLjNIMzM5LjdjNi44IDAgMTIuMyA1LjUgMTIuMyAxMi4zelwiXVxufTtcbnZhciBmYVF1b3RlUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncXVvdGUtcmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MjIxLCBcInF1b3RlLXJpZ2h0LWFsdFwiXSwgXCJmMTBlXCIsIFwiTTQ0OCAyOTZjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBoLThjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoOGMzMC45IDAgNTYtMjUuMSA1Ni01NnYtOEgzMjBjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MGMwLTM1LjMgMjguNy02NCA2NC02NGg2NGMzNS4zIDAgNjQgMjguNyA2NCA2NHYzMiAzMiA3MnptLTI1NiAwYzAgNjYuMy01My43IDEyMC0xMjAgMTIwSDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDhjMzAuOSAwIDU2LTI1LjEgNTYtNTZ2LThINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MGMwLTM1LjMgMjguNy02NCA2NC02NGg2NGMzNS4zIDAgNjQgMjguNyA2NCA2NHYzMiAzMiA3MnpcIl1cbn07XG52YXIgZmFRdW90ZVJpZ2h0QWx0ID0gZmFRdW90ZVJpZ2h0O1xudmFyIGZhU2hpcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hpcnQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwODUsIFwidC1zaGlydFwiLCBcInRzaGlydFwiXSwgXCJmNTUzXCIsIFwiTTIxMS44IDBjNy44IDAgMTQuMyA1LjcgMTYuNyAxMy4yQzI0MC44IDUxLjkgMjc3LjEgODAgMzIwIDgwczc5LjItMjguMSA5MS41LTY2LjhDNDEzLjkgNS43IDQyMC40IDAgNDI4LjIgMGgxMi42YzIyLjUgMCA0NC4yIDcuOSA2MS41IDIyLjNMNjI4LjUgMTI3LjRjNi42IDUuNSAxMC43IDEzLjUgMTEuNCAyMi4xcy0yLjEgMTcuMS03LjggMjMuNmwtNTYgNjRjLTExLjQgMTMuMS0zMS4yIDE0LjYtNDQuNiAzLjVMNDgwIDE5Ny43VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEgyMjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE5Ny43bC01MS41IDQyLjljLTEzLjMgMTEuMS0zMy4xIDkuNi00NC42LTMuNWwtNTYtNjRjLTUuNy02LjUtOC41LTE1LTcuOC0yMy42czQuOC0xNi42IDExLjQtMjIuMUwxMzcuNyAyMi4zQzE1NSA3LjkgMTc2LjcgMCAxOTkuMiAwaDEyLjZ6XCJdXG59O1xudmFyIGZhVFNoaXJ0ID0gZmFTaGlydDtcbnZhciBmYVRzaGlydCA9IGZhU2hpcnQ7XG52YXIgZmFDdWJlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjdWJlcycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjFiM1wiLCBcIk0yOTAuOCA0OC42bDc4LjQgMjkuN0wyODggMTA5LjUgMjA2LjggNzguM2w3OC40LTI5LjdjMS44LS43IDMuOC0uNyA1LjcgMHpNMTM2IDkyLjVWMjA0LjdjLTEuMyAuNC0yLjYgLjgtMy45IDEuM2wtOTYgMzYuNEMxNC40IDI1MC42IDAgMjcxLjUgMCAyOTQuN1Y0MTMuOWMwIDIyLjIgMTMuMSA0Mi4zIDMzLjUgNTEuM2w5NiA0Mi4yYzE0LjQgNi4zIDMwLjcgNi4zIDQ1LjEgMEwyODggNDU3LjVsMTEzLjUgNDkuOWMxNC40IDYuMyAzMC43IDYuMyA0NS4xIDBsOTYtNDIuMmMyMC4zLTguOSAzMy41LTI5LjEgMzMuNS01MS4zVjI5NC43YzAtMjMuMy0xNC40LTQ0LjEtMzYuMS01Mi40bC05Ni0zNi40Yy0xLjMtLjUtMi42LS45LTMuOS0xLjNWOTIuNWMwLTIzLjMtMTQuNC00NC4xLTM2LjEtNTIuNGwtOTYtMzYuNGMtMTIuOC00LjgtMjYuOS00LjgtMzkuNyAwbC05NiAzNi40QzE1MC40IDQ4LjQgMTM2IDY5LjMgMTM2IDkyLjV6TTM5MiAyMTAuNmwtODIuNCAzMS4yVjE1Mi42TDM5MiAxMjF2ODkuNnpNMTU0LjggMjUwLjlsNzguNCAyOS43TDE1MiAzMTEuNyA3MC44IDI4MC42bDc4LjQtMjkuN2MxLjgtLjcgMy44LS43IDUuNyAwem0xOC44IDIwNC40VjM1NC44TDI1NiAzMjMuMnY5NS45bC04Mi40IDM2LjJ6TTQyMS4yIDI1MC45YzEuOC0uNyAzLjgtLjcgNS43IDBsNzguNCAyOS43TDQyNCAzMTEuN2wtODEuMi0zMS4xIDc4LjQtMjkuN3pNNTIzLjIgNDIxLjJsLTc3LjYgMzQuMVYzNTQuOEw1MjggMzIzLjJ2OTAuN2MwIDMuMi0xLjkgNi00LjggNy4zelwiXVxufTtcbnZhciBmYURpdmlkZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaXZpZGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMDEzNSwgMjQ3XSwgXCJmNTI5XCIsIFwiTTI3MiA5NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0wIDMyMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00MDAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQwMHpcIl1cbn07XG52YXIgZmFUZW5nZVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVuZ2Utc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgWzgzNzYsIFwidGVuZ2VcIl0sIFwiZjdkN1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0ek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMkgxOTIgMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFUZW5nZSA9IGZhVGVuZ2VTaWduO1xudmFyIGZhSGVhZHBob25lcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkcGhvbmVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTExXSwgXCJmMDI1XCIsIFwiTTI1NiA4MEMxNDkuOSA4MCA2Mi40IDE1OS40IDQ5LjYgMjYyYzkuNC0zLjggMTkuNi02IDMwLjQtNmMyNi41IDAgNDggMjEuNSA0OCA0OFY0MzJjMCAyNi41LTIxLjUgNDgtNDggNDhjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjM4NCAzMzYgMjg4QzAgMTQ2LjYgMTE0LjYgMzIgMjU2IDMyczI1NiAxMTQuNiAyNTYgMjU2djQ4IDQ4IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy0yNi41IDAtNDgtMjEuNS00OC00OFYzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhjMTAuOCAwIDIxIDIuMSAzMC40IDZDNDQ5LjYgMTU5LjQgMzYyLjEgODAgMjU2IDgwelwiXVxufTtcbnZhciBmYUhhbmRzSG9sZGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kcy1ob2xkaW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNGMyXCIsIFwiTTgwIDEwNGMwLTIyLjEtMTcuOS00MC00MC00MFMwIDgxLjkgMCAxMDR2NTYgNjRWMzI1LjVjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlMMTI4IDQ5My4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdIMjQwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjM4NS4xYzAtMjkuNy0xMS44LTU4LjItMzIuOC03OS4ybC0yNS4zLTI1LjMgMCAwLTE1LjItMTUuMi0zMi0zMmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMzIgMzIgMTUuMiAxNS4yYzExIDExIDkuMiAyOS4yLTMuNyAzNy44Yy05LjcgNi41LTIyLjcgNS4yLTMxLTMuMUw5OC43IDMwOS41Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zVjIyNCAxNDQgMTA0em00ODAgMHY0MCA4MCA0MC4yYzAgMTctNi43IDMzLjMtMTguNyA0NS4zbC01MS4xIDUxLjFjLTguMyA4LjMtMjEuMyA5LjYtMzEgMy4xYy0xMi45LTguNi0xNC43LTI2LjktMy43LTM3LjhsMTUuMi0xNS4yIDMyLTMyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0zMiAzMi0xNS4yIDE1LjIgMCAwLTI1LjMgMjUuM2MtMjEgMjEtMzIuOCA0OS41LTMyLjggNzkuMlY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoNjYuN2MxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2w5OS45LTk5LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOVYyMjQgMTYwIDEwNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHpcIl1cbn07XG52YXIgZmFIYW5kc0NsYXBwaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWNsYXBwaW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMWE4XCIsIFwiTTMzNiAxNlY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0tOTguNyA3LjFsMzIgNDhjNC45IDcuNCAyLjkgMTcuMy00LjQgMjIuMnMtMTcuMyAyLjktMjIuMi00LjRsLTMyLTQ4Yy00LjktNy40LTIuOS0xNy4zIDQuNC0yMi4yczE3LjMtMi45IDIyLjIgNC40ek0xMzUgMTE5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI5Mi43IDI0Mi43YzEwLjEgMTAuMSAyNy4zIDIuOSAyNy4zLTExLjNWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzQ1LjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40Yy02NCAzOC40LTE0NS44IDI4LjMtMTk4LjUtMjQuNEw3IDM2MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDUzIDUzYzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xTDIzIDI2NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDkzIDkzYzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xTDU1IDE4NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDExNyAxMTdjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFsLTkzLTkzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpNNDMzLjEgNDg0LjljLTI0LjIgMTQuNS01MC45IDIyLjEtNzcuNyAyMy4xYzQ4LjEtMzkuNiA3Ni42LTk5IDc2LjYtMTYyLjRsMC05OC4xYzguMi0uMSAxNi02LjQgMTYtMTZWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzQ1LjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40ek00MjQuOSAxOC43YzcuNCA0LjkgOS4zIDE0LjggNC40IDIyLjJsLTMyIDQ4Yy00LjkgNy40LTE0LjggOS4zLTIyLjIgNC40cy05LjMtMTQuOC00LjQtMjIuMmwzMi00OGM0LjktNy40IDE0LjgtOS4zIDIyLjItNC40elwiXVxufTtcbnZhciBmYVJlcHVibGljYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVwdWJsaWNhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjc1ZVwiLCBcIk0wIDE5MkMwIDEwMy42IDcxLjYgMzIgMTYwIDMySDM4NGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MHY2NEgwVjE5MnptNDE1LjktNjRjLTIuNCAwLTQuNyAxLjMtNS43IDMuNGwtMTIuNiAyNC42LTI4LjIgNGMtMi40IC4zLTQuNCAyLTUuMiA0LjJzLS4xIDQuNyAxLjYgNi4zbDIwLjQgMTkuMi00LjggMjcuMWMtLjQgMi4zIC42IDQuNyAyLjUgNnM0LjYgMS42IDYuNyAuNWwyNS4yLTEyLjggMjUuMiAxMi44YzIuMiAxLjEgNC44IC45IDYuNy0uNXMzLTMuNyAyLjUtNmwtNC44LTI3LjFMNDY2IDE3MC41YzEuNy0xLjYgMi40LTQuMSAxLjYtNi4zcy0yLjgtMy45LTUuMi00LjJsLTI4LjItNC0xMi42LTI0LjZjLTEuMS0yLjEtMy4zLTMuNC01LjctMy40em0tMTM4LjMgMy40Yy0xLjEtMi4xLTMuMy0zLjQtNS43LTMuNHMtNC43IDEuMy01LjcgMy40bC0xMi42IDI0LjYtMjguMiA0Yy0yLjQgLjMtNC40IDItNS4yIDQuMnMtLjEgNC43IDEuNiA2LjNsMjAuNCAxOS4yLTQuOCAyNy4xYy0uNCAyLjMgLjYgNC43IDIuNSA2czQuNiAxLjYgNi43IC41bDI1LjItMTIuOCAyNS4yIDEyLjhjMi4yIDEuMSA0LjggLjkgNi43LS41czMtMy43IDIuNS02bC00LjgtMjcuMUwzMjIgMTcwLjVjMS43LTEuNiAyLjQtNC4xIDEuNi02LjNzLTIuOC0zLjktNS4yLTQuMmwtMjguMi00LTEyLjYtMjQuNnpNMTI3LjkgMTI4Yy0yLjQgMC00LjcgMS4zLTUuNyAzLjRsLTEyLjYgMjQuNi0yOC4yIDRjLTIuNCAuMy00LjQgMi01LjIgNC4ycy0uMSA0LjcgMS42IDYuM2wyMC40IDE5LjItNC44IDI3LjFjLS40IDIuMyAuNiA0LjcgMi41IDZzNC42IDEuNiA2LjcgLjVsMjUuMi0xMi44IDI1LjIgMTIuOGMyLjIgMS4xIDQuOCAuOSA2LjctLjVzMy0zLjcgMi41LTZsLTQuOC0yNy4xTDE3OCAxNzAuNWMxLjctMS42IDIuNC00LjEgMS42LTYuM3MtMi44LTMuOS01LjItNC4ybC0yOC4yLTQtMTIuNi0yNC42Yy0xLjEtMi4xLTMuMy0zLjQtNS43LTMuNHptLjEgMTYwSDMyMGg5NiAzMiA2NCAzMnYzMiA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwVjM1Mkg0NDh2MzIgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRIMTI4djY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODQgMjg4SDEyOHpcIl1cbn07XG52YXIgZmFBcnJvd0xlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctbGVmdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg1OTJdLCBcImYwNjBcIiwgXCJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjIgMjg4IDQxNiAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwNi43IDBMMjE0LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6XCJdXG59O1xudmFyIGZhUGVyc29uQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0M1wiLCBcIk0xMTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNTYuOUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmgyOS43YzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDQ0LjkgNzQuN2MtMTYuMSAxNy42LTI4LjYgMzguNS0zNi42IDYxLjVjLTEuOS0xLjgtMy41LTMuOS00LjktNi4zTDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDE1MnpNNDMyIDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdXG59O1xudmFyIGZhUnVsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVsZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMDddLCBcImY1NDVcIiwgXCJNMTc3LjkgNDk0LjFjLTE4LjcgMTguNy00OS4xIDE4LjctNjcuOSAwTDE3LjkgNDAxLjljLTE4LjctMTguNy0xOC43LTQ5LjEgMC02Ny45bDUwLjctNTAuNyA0OCA0OGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4IDQxLjQtNDEuNCA0OCA0OGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4IDQxLjQtNDEuNCA0OCA0OGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4IDQxLjQtNDEuNCA0OCA0OGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4IDUwLjctNTAuN2MxOC43LTE4LjcgNDkuMS0xOC43IDY3LjkgMGw5Mi4xIDkyLjFjMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlMMTc3LjkgNDk0LjF6XCJdXG59O1xudmFyIGZhQWxpZ25MZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FsaWduLWxlZnQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwMzZcIiwgXCJNMjg4IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMkgyNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6XCJdXG59O1xudmFyIGZhRGljZUQ2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UtZDYnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY2ZDFcIiwgXCJNMjAxIDEwLjNjMTQuMy03LjggMzEuNi03LjggNDYgMEw0MjIuMyAxMDZjNS4xIDIuOCA4LjMgOC4yIDguMyAxNHMtMy4yIDExLjItOC4zIDE0TDIzMS43IDIzOGMtNC44IDIuNi0xMC41IDIuNi0xNS4zIDBMMjUuNyAxMzRjLTUuMS0yLjgtOC4zLTguMi04LjMtMTRzMy4yLTExLjIgOC4zLTE0TDIwMSAxMC4zek0yMy43IDE3MGwxNzYgOTZjNS4xIDIuOCA4LjMgOC4yIDguMyAxNFY0OTZjMCA1LjYtMyAxMC45LTcuOCAxMy44cy0xMC45IDMtMTUuOCAuM0wyNSA0MjMuMUM5LjYgNDE0LjcgMCAzOTguNiAwIDM4MVYxODRjMC01LjYgMy0xMC45IDcuOC0xMy44czEwLjktMyAxNS44LS4zem00MDAuNyAwYzUtMi43IDExLTIuNiAxNS44IC4zczcuOCA4LjEgNy44IDEzLjhWMzgxYzAgMTcuNi05LjYgMzMuNy0yNSA0Mi4xTDI2My43IDUxMGMtNSAyLjctMTEgMi42LTE1LjgtLjNzLTcuOC04LjEtNy44LTEzLjhWMjgwYzAtNS45IDMuMi0xMS4yIDguMy0xNGwxNzYtOTZ6XCJdXG59O1xudmFyIGZhUmVzdHJvb20gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVzdHJvb20nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3YmRcIiwgXCJNODAgNDhhNDggNDggMCAxIDEgOTYgMEE0OCA0OCAwIDEgMSA4MCA0OHptNDAgMzA0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMjUuMmMtOC4xIDkuMi0yMS4xIDEzLjItMzMuNSA5LjRjLTE2LjktNS4zLTI2LjMtMjMuMi0yMS00MC4xbDMwLjktOTkuMUM0NC45IDE1NS4zIDgyIDEyOCAxMjQgMTI4aDhjNDIgMCA3OS4xIDI3LjMgOTEuNiA2Ny40bDMwLjkgOTkuMWM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xYy0xMi40IDMuOS0yNS40LS4yLTMzLjUtOS40VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTIwek0zMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTQ2NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00NDAgNDgwVjM4NEg0MjIuMmMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsOS0yNi45Yy0zLjIgMC02LjQtLjUtOS41LTEuNWMtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQyOC40IDE1Ni45IDQ2Ny42IDEyOCA1MTIgMTI4czgzLjYgMjguOSA5Ni44IDcxLjJsMjkuNyA5NS4yYzUuMyAxNi45LTQuMSAzNC44LTIxIDQwLjFjLTMuMiAxLTYuNCAxLjUtOS41IDEuNWw5IDI2LjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xSDU4NHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzODRINTA0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyelwiXVxufTtcbnZhciBmYUogPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaicsXG4gIGljb246IFszMjAsIDUxMiwgWzEwNl0sIFwiNGFcIiwgXCJNMjg4IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjMyMGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwVjI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjMyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhVXNlcnNWaWV3ZmluZGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXJzLXZpZXdmaW5kZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OTVcIiwgXCJNNDggNDhoODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzJDMTQuMyAwIDAgMTQuMyAwIDMyVjEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjQ4ek0xNzUuOCAyMjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tMjYuNSAzMkMxMTkuOSAyNTYgOTYgMjc5LjkgOTYgMzA5LjNjMCAxNC43IDExLjkgMjYuNyAyNi43IDI2LjdoNTYuMWM4LTM0LjEgMzIuOC02MS43IDY1LjItNzMuNmMtNy41LTQuMS0xNi4yLTYuNC0yNS4zLTYuNEgxNDkuM3ptMzY4IDgwYzE0LjcgMCAyNi43LTExLjkgMjYuNy0yNi43YzAtMjkuNS0yMy45LTUzLjMtNTMuMy01My4zSDQyMS4zYy05LjIgMC0xNy44IDIuMy0yNS4zIDYuNGMzMi40IDExLjkgNTcuMiAzOS41IDY1LjIgNzMuNmg1Ni4xem0tODkuNCAwYy04LjYtMjQuMy0yOS45LTQyLjYtNTUuOS00N2MtMy45LS43LTcuOS0xLTEyLTFIMjgwYy00LjEgMC04LjEgLjMtMTIgMWMtMjYgNC40LTQ3LjMgMjIuNy01NS45IDQ3Yy0yLjcgNy41LTQuMSAxNS42LTQuMSAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNEg0MDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRjMC04LjQtMS40LTE2LjUtNC4xLTI0ek00NjQgMjI0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTgwLTMyYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNNTA0IDQ4aDg4djg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJINTA0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0ek00OCA0NjRWMzc2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgxMzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRINDh6bTQ1NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNzZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2ODhINTA0elwiXVxufTtcbnZhciBmYUZpbGVWaWRlbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXZpZGVvJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMWM4XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNNjQgMjg4YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyODh6TTMwMC45IDM5Ny45TDI1NiAzNjhWMzA0bDQ0LjktMjkuOWMyLTEuMyA0LjQtMi4xIDYuOC0yLjFjNi44IDAgMTIuMyA1LjUgMTIuMyAxMi4zVjM4Ny43YzAgNi44LTUuNSAxMi4zLTEyLjMgMTIuM2MtMi40IDAtNC44LS43LTYuOC0yLjF6XCJdXG59O1xudmFyIGZhVXBSaWdodEZyb21TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXAtcmlnaHQtZnJvbS1zcXVhcmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImV4dGVybmFsLWxpbmstYWx0XCJdLCBcImYzNWRcIiwgXCJNMzUyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45TDM3MC43IDk2IDIwMS40IDI2NS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQxNiAxNDEuM2w0MS40IDQxLjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzNTJ6TTgwIDMyQzM1LjggMzIgMCA2Ny44IDAgMTEyVjQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MEg0MDBjNDQuMiAwIDgwLTM1LjggODAtODBWMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2SDE5MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MHpcIl1cbn07XG52YXIgZmFFeHRlcm5hbExpbmtBbHQgPSBmYVVwUmlnaHRGcm9tU3F1YXJlO1xudmFyIGZhVGFibGVDZWxscyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZS1jZWxscycsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGhcIl0sIFwiZjAwYVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTg4IDY0djY0SDY0Vjk2aDg4em01NiAwaDg4djY0SDIwOFY5NnptMjQwIDB2NjRIMzYwVjk2aDg4ek02NCAyMjRoODh2NjRINjRWMjI0em0yMzIgMHY2NEgyMDhWMjI0aDg4em02NCAwaDg4djY0SDM2MFYyMjR6TTE1MiAzNTJ2NjRINjRWMzUyaDg4em01NiAwaDg4djY0SDIwOFYzNTJ6bTI0MCAwdjY0SDM2MFYzNTJoODh6XCJdXG59O1xudmFyIGZhVGggPSBmYVRhYmxlQ2VsbHM7XG52YXIgZmFGaWxlUGRmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtcGRmJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMWMxXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMTQ0LTIwOCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDE0NC00OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0zODQgNjRsLTEyOCAwTDI1NiAwIDM4NCAxMjh6TTE3NiAzNTJsMzIgMGMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1NmwtMTYgMCAwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDggMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6bTMyIDgwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNiAwIDAgNDggMTYgMHptOTYtODBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xMjhjMC04LjggNy4yLTE2IDE2LTE2em0zMiAxMjhjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwIDAgOTYgMTYgMHptODAtMTEyYzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0zMiAwIDAgMzIgMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNjQgMC02NHpcIl1cbn07XG52YXIgZmFCb29rQmlibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1iaWJsZScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiYmlibGVcIl0sIFwiZjY0N1wiLCBcIk05NiAwQzQzIDAgMCA0MyAwIDk2VjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM4NGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMzg0IDk2em0wIDM4NEgzNTJ2NjRIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTIwOCA4MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyVjMwNGMwIDguOC03LjIgMTYtMTYgMTZIMjI0Yy04LjggMC0xNi03LjItMTYtMTZWMTkySDE2MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZoNDhWODB6XCJdXG59O1xudmFyIGZhQmlibGUgPSBmYUJvb2tCaWJsZTtcbnZhciBmYU8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbycsXG4gIGljb246IFs0NDgsIDUxMiwgWzExMV0sIFwiNGZcIiwgXCJNMjI0IDk2YTE2MCAxNjAgMCAxIDAgMCAzMjAgMTYwIDE2MCAwIDEgMCAwLTMyMHpNNDQ4IDI1NkEyMjQgMjI0IDAgMSAxIDAgMjU2YTIyNCAyMjQgMCAxIDEgNDQ4IDB6XCJdXG59O1xudmFyIGZhU3VpdGNhc2VNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1aXRjYXNlLW1lZGljYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcIm1lZGtpdFwiXSwgXCJmMGZhXCIsIFwiTTE4NCA0OEgzMjhjNC40IDAgOCAzLjYgOCA4Vjk2SDE3NlY1NmMwLTQuNCAzLjYtOCA4LTh6bS01NiA4Vjk2djMyVjQ4MEgzODRWMTI4IDk2IDU2YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDE4NGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTk2IDk2SDY0QzI4LjcgOTYgMCAxMjQuNyAwIDE2MFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIOTZWOTZ6TTQxNiA0ODBoMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDQxNlY0ODB6TTIyNCAyMDhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI4OHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMzIwSDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoNDhWMjA4elwiXVxufTtcbnZhciBmYU1lZGtpdCA9IGZhU3VpdGNhc2VNZWRpY2FsO1xudmFyIGZhVXNlclNlY3JldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLXNlY3JldCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODM3M10sIFwiZjIxYlwiLCBcIk0yMjQgMTZjLTYuNyAwLTEwLjgtMi44LTE1LjUtNi4xQzIwMS45IDUuNCAxOTQgMCAxNzYgMGMtMzAuNSAwLTUyIDQzLjctNjYgODkuNEM2Mi43IDk4LjEgMzIgMTEyLjIgMzIgMTI4YzAgMTQuMyAyNSAyNy4xIDY0LjYgMzUuOWMtLjQgNC0uNiA4LS42IDEyLjFjMCAxNyAzLjMgMzMuMiA5LjMgNDhINDUuNEMzOCAyMjQgMzIgMjMwIDMyIDIzNy40YzAgMS43IC4zIDMuNCAxIDVsMzguOCA5Ni45QzI4LjIgMzcxLjggMCA0MjMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJINDE4LjNjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjdjMC01OC41LTI4LjItMTEwLjQtNzEuNy0xNDNMNDE1IDI0Mi40Yy42LTEuNiAxLTMuMyAxLTVjMC03LjQtNi0xMy40LTEzLjQtMTMuNEgzNDIuN2M2LTE0LjggOS4zLTMxIDkuMy00OGMwLTQuMS0uMi04LjEtLjYtMTIuMUMzOTEgMTU1LjEgNDE2IDE0Mi4zIDQxNiAxMjhjMC0xNS44LTMwLjctMjkuOS03OC0zOC42QzMyNCA0My43IDMwMi41IDAgMjcyIDBjLTE4IDAtMjUuOSA1LjQtMzIuNSA5LjljLTQuOCAzLjMtOC44IDYuMS0xNS41IDYuMXptNTYgMjA4SDI2Ny42Yy0xNi41IDAtMzEuMS0xMC42LTM2LjMtMjYuMmMtMi4zLTctMTIuMi03LTE0LjUgMGMtNS4yIDE1LjYtMTkuOSAyNi4yLTM2LjMgMjYuMkgxNjhjLTIyLjEgMC00MC0xNy45LTQwLTQwVjE2OS42YzI4LjIgNC4xIDYxIDYuNCA5NiA2LjRzNjcuOC0yLjMgOTYtNi40VjE4NGMwIDIyLjEtMTcuOSA0MC00MCA0MHptLTg4IDk2bDE2IDMyTDE3NiA0ODAgMTI4IDI4OGw2NCAzMnptMTI4LTMyTDI3MiA0ODAgMjQwIDM1MmwxNi0zMiA2NC0zMnpcIl1cbn07XG52YXIgZmFPdHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdvdHRlcicsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTQ0Nl0sIFwiZjcwMFwiLCBcIk0xODEuNSAxOTcuMWwxMi45IDYuNGM1LjkgMyAxMi40IDQuNSAxOS4xIDQuNWMyMy41IDAgNDIuNi0xOS4xIDQyLjYtNDIuNlYxNDRjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NHYyMS40YzAgMjMuNSAxOS4xIDQyLjYgNDIuNiA0Mi42YzYuNiAwIDEzLjEtMS41IDE5LjEtNC41bDEyLjktNi40IDguNC00LjJMMTM1LjEgMTg1Yy00LjUtMy03LjEtOC03LjEtMTMuM1YxNjhjMC0xMy4zIDEwLjctMjQgMjQtMjRoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjR2My43YzAgNS4zLTIuNyAxMC4zLTcuMSAxMy4zbC0xMS44IDcuOSA4LjQgNC4yem0tOC42IDQ5LjRMMTYwIDI0MGwtMTIuOSA2LjRjLTEyLjYgNi4zLTI2LjUgOS42LTQwLjUgOS42Yy0zLjYgMC03LjEtLjItMTAuNi0uNnYuNmMwIDM1LjMgMjguNyA2NCA2NCA2NGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRWMzM2IDMyMGMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRjOS40LTUuNCAyMC4zLTguNiAzMi04LjZWMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMiAxNiA0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIwNC4zYzAtNDguMi0zMC44LTkxLTc2LjYtMTA2LjNsLTguNS0yLjhjLTgtMi43LTEyLjYtMTEuMS0xMC40LTE5LjNzMTAuMy0xMy4yIDE4LjYtMTEuNmwxOS45IDRDNTc2IDg2LjEgNjQwIDE2NC4yIDY0MCAyNTQuOWwwIDEuMWgwYzAgMTIzLjctMTAwLjMgMjI0LTIyNCAyMjRoLTEuMUgyNTZoLS42QzEzMiA0ODAgMzIgMzgwIDMyIDI1Ni42VjI1NiAyMTYuOGMtMTAuMS0xNC42LTE2LTMyLjMtMTYtNTEuNFYxNDRsMC0xLjRDNi43IDEzOS4zIDAgMTMwLjUgMCAxMjBjMC0xMy4zIDEwLjctMjQgMjQtMjRoMi44QzQ0LjggNTguMiA4My4zIDMyIDEyOCAzMmg2NGM0NC43IDAgODMuMiAyNi4yIDEwMS4yIDY0SDI5NmMxMy4zIDAgMjQgMTAuNyAyNCAyNGMwIDEwLjUtNi43IDE5LjMtMTYgMjIuNmwwIDEuNHYyMS40YzAgMS40IDAgMi44LS4xIDQuM2MxMi02LjIgMjUuNy05LjYgNDAuMS05LjZoOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmgtOGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2OGg1Ni40Yy0xNS4yIDE3LTI0LjQgMzkuNC0yNC40IDY0SDMyMGMtNDIuMyAwLTc4LjItMjcuNC05MS02NS4zYy01LjEgLjktMTAuMyAxLjMtMTUuNiAxLjNjLTE0LjEgMC0yNy45LTMuMy00MC41LTkuNnpNOTYgMTI4YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnptMTEyIDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6XCJdXG59O1xudmFyIGZhUGVyc29uRHJlc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWRyZXNzJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJmZW1hbGVcIl0sIFwiZjE4MlwiLCBcIk0xNjAgMGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTg4IDM4NEg3MC4yYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMUw5My4zIDI0OC4xIDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1My42LTg5LjJjMjAuMy0zMy43IDU2LjctNTQuMyA5Ni01NC4zaDExLjZjMzkuMyAwIDc1LjcgMjAuNiA5NiA1NC4zbDUzLjYgODkuMmM5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOWwtMzMuOS01Ni4zTDI2NSAzNjIuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFIMjMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEgxNTJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0elwiXVxufTtcbnZhciBmYUZlbWFsZSA9IGZhUGVyc29uRHJlc3M7XG52YXIgZmFDb21tZW50RG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbW1lbnQtZG9sbGFyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjUxXCIsIFwiTTI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMlMwIDEyNS4xIDAgMjQwYzAgNDUuMSAxNy43IDg2LjggNDcuNyAxMjAuOWMtMS45IDI0LjUtMTEuNCA0Ni4zLTIxLjQgNjIuOWMtNS41IDkuMi0xMS4xIDE2LjYtMTUuMiAyMS42Yy0yLjEgMi41LTMuNyA0LjQtNC45IDUuN2MtLjYgLjYtMSAxLjEtMS4zIDEuNGwtLjMgLjMgMCAwIDAgMCAwIDAgMCAwYy00LjYgNC42LTUuOSAxMS40LTMuNCAxNy40YzIuNSA2IDguMyA5LjkgMTQuOCA5LjljMjguNyAwIDU3LjYtOC45IDgxLjYtMTkuM2MyMi45LTEwIDQyLjQtMjEuOSA1NC4zLTMwLjZjMzEuOCAxMS41IDY3IDE3LjkgMTA0LjEgMTcuOXptMjAtMzEydjEzLjljNy41IDEuMiAxNC42IDIuOSAyMS4xIDQuN2MxMC43IDIuOCAxNyAxMy44IDE0LjIgMjQuNXMtMTMuOCAxNy0yNC41IDE0LjJjLTExLTIuOS0yMS42LTUtMzEuMi01LjJjLTcuOS0uMS0xNiAxLjgtMjEuNSA1Yy00LjggMi44LTYuMiA1LjYtNi4yIDkuM2MwIDEuOCAuMSAzLjUgNS4zIDYuN2M2LjMgMy44IDE1LjUgNi43IDI4LjMgMTAuNWwuNyAuMmMxMS4yIDMuNCAyNS42IDcuNyAzNy4xIDE1YzEyLjkgOC4xIDI0LjMgMjEuMyAyNC42IDQxLjZjLjMgMjAuOS0xMC41IDM2LjEtMjQuOCA0NWMtNy4yIDQuNS0xNS4yIDcuMy0yMy4yIDlWMzQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMFYzMjkuNGMtMTAuMy0yLjItMjAtNS41LTI4LjItOC40bDAgMCAwIDBjLTIuMS0uNy00LjEtMS40LTYuMS0yLjFjLTEwLjUtMy41LTE2LjEtMTQuOC0xMi42LTI1LjNzMTQuOC0xNi4xIDI1LjMtMTIuNmMyLjUgLjggNC45IDEuNyA3LjIgMi40YzEzLjYgNC42IDI0IDguMSAzNS4xIDguNWM4LjYgLjMgMTYuNS0xLjYgMjEuNC00LjdjNC4xLTIuNSA2LTUuNSA1LjktMTAuNWMwLTIuOS0uOC01LTUuOS04LjJjLTYuMy00LTE1LjQtNi45LTI4LTEwLjdsLTEuNy0uNWMtMTAuOS0zLjMtMjQuNi03LjQtMzUuNi0xNGMtMTIuNy03LjctMjQuNi0yMC41LTI0LjctNDAuN2MtLjEtMjEuMSAxMS44LTM1LjcgMjUuOC00My45YzYuOS00LjEgMTQuNS02LjggMjIuMi04LjVWMTM2YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwelwiXVxufTtcbnZhciBmYUJ1c2luZXNzVGltZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidXNpbmVzcy10aW1lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJicmllZmNhc2UtY2xvY2tcIl0sIFwiZjY0YVwiLCBcIk0xODQgNDhIMzI4YzQuNCAwIDggMy42IDggOFY5NkgxNzZWNTZjMC00LjQgMy42LTggOC04em0tNTYgOFY5Nkg2NEMyOC43IDk2IDAgMTI0LjcgMCAxNjB2OTZIMTkyIDM1Mmg4LjJjMzIuMy0zOS4xIDgxLjEtNjQgMTM1LjgtNjRjNS40IDAgMTAuNyAuMiAxNiAuN1YxNjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzg0VjU2YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDE4NGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTMyMCAzNTJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyODhIMFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzYwLjJDMzM1LjEgNDQ5LjYgMzIwIDQxMC41IDMyMCAzNjhjMC01LjQgLjItMTAuNyAuNy0xNmwtLjcgMHptMzIwIDE2YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTQ5NiAyODhjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDQ5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhQnJpZWZjYXNlQ2xvY2sgPSBmYUJ1c2luZXNzVGltZTtcbnZhciBmYVRhYmxlQ2VsbHNMYXJnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZS1jZWxscy1sYXJnZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGgtbGFyZ2VcIl0sIFwiZjAwOVwiLCBcIk00NDggOTZWMjI0SDI4OFY5Nkg0NDh6bTAgMTkyVjQxNkgyODhWMjg4SDQ0OHpNMjI0IDIyNEg2NFY5NkgyMjRWMjI0ek02NCAyODhIMjI0VjQxNkg2NFYyODh6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpcIl1cbn07XG52YXIgZmFUaExhcmdlID0gZmFUYWJsZUNlbGxzTGFyZ2U7XG52YXIgZmFCb29rVGFuYWtoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stdGFuYWtoJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ0YW5ha2hcIl0sIFwiZjgyN1wiLCBcIk0zNTIgMGM1MyAwIDk2IDQzIDk2IDk2VjQxNmMwIDUzLTQzIDk2LTk2IDk2SDY0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzJDMCAxNC4zIDE0LjMgMCAzMiAwSDY0IDM1MnptMCAzODRIOTZ2NjRIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyek0xMzguNyAyMDhsMTMuOSAyNEgxMjQuOWwxMy45LTI0em0tMTMuOS0yNEw5Ny4xIDIzMmMtNi4yIDEwLjcgMS41IDI0IDEzLjkgMjRoNTUuNGwyNy43IDQ4YzYuMiAxMC43IDIxLjYgMTAuNyAyNy43IDBsMjcuNy00OEgzMDVjMTIuMyAwIDIwLTEzLjMgMTMuOS0yNGwtMjcuNy00OCAyNy43LTQ4YzYuMi0xMC43LTEuNS0yNC0xMy45LTI0SDI0OS42TDIyMS45IDY0Yy02LjItMTAuNy0yMS42LTEwLjctMjcuNyAwbC0yNy43IDQ4SDExMWMtMTIuMyAwLTIwIDEzLjMtMTMuOSAyNGwyNy43IDQ4em0yNy43IDBsMjcuNy00OGg1NS40bDI3LjcgNDgtMjcuNyA0OEgxODAuM2wtMjcuNy00OHptMC00OGwtMTMuOSAyNC0xMy45LTI0aDI3Ljd6bTQxLjYtMjRMMjA4IDg4bDEzLjkgMjRIMTk0LjF6bTY5LjMgMjRoMjcuN2wtMTMuOSAyNC0xMy45LTI0em0xMy45IDcybDEzLjkgMjRIMjYzLjRsMTMuOS0yNHptLTU1LjQgNDhMMjA4IDI4MGwtMTMuOS0yNGgyNy43elwiXVxufTtcbnZhciBmYVRhbmFraCA9IGZhQm9va1RhbmFraDtcbnZhciBmYVBob25lVm9sdW1lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bob25lLXZvbHVtZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1widm9sdW1lLWNvbnRyb2wtcGhvbmVcIl0sIFwiZjJhMFwiLCBcIk0yODAgMEM0MDguMSAwIDUxMiAxMDMuOSA1MTIgMjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTAxLjYtODIuNC0xODQtMTg0LTE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0tMzItNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRjNzUuMSAwIDEzNiA2MC45IDEzNiAxMzZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42LTM5LjQtODgtODgtODhjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xMTcuNSAxLjRjMTkuNC01LjMgMzkuNyA0LjYgNDcuNCAyMy4ybDQwIDk2YzYuOCAxNi4zIDIuMSAzNS4yLTExLjYgNDYuM0wxNDQgMjA3LjNjMzMuMyA3MC40IDkwLjMgMTI3LjQgMTYwLjcgMTYwLjdMMzQ1IDMxOC43YzExLjItMTMuNyAzMC0xOC40IDQ2LjMtMTEuNmw5NiA0MGMxOC42IDcuNyAyOC41IDI4IDIzLjIgNDcuNGwtMjQgODhDNDgxLjggNDk5LjkgNDY2IDUxMiA0NDggNTEyQzIwMC42IDUxMiAwIDMxMS40IDAgNjRDMCA0NiAxMi4xIDMwLjIgMjkuNSAyNS40bDg4LTI0elwiXVxufTtcbnZhciBmYVZvbHVtZUNvbnRyb2xQaG9uZSA9IGZhUGhvbmVWb2x1bWU7XG52YXIgZmFIYXRDb3dib3lTaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhdC1jb3dib3ktc2lkZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjhjMVwiLCBcIk0xNTIuNyAxMzUuOWwtMTAuNCA1Ny4yYzYuOC0uNyAxMy42LTEuMSAyMC41LTEuMWgxMC43YzM5LjQgMCA3Ny44IDEyLjEgMTEwLjEgMzQuN0w1NjIuNCA0MjEuOGwzNS4xIDI0LjZjMjQuNC02IDQyLjUtMjguMSA0Mi41LTU0LjRjMC03NS44LTk0LjctMTI2LjYtMTM0LjYtMTQ0LjdMNDc0IDgzLjlDNDY4LjIgNTMuOCA0NDEuOCAzMiA0MTEuMSAzMmgtMi43Yy01LjYgMC0xMS4xIC43LTE2LjUgMi4yTDE5OS4yIDg1LjVjLTIzLjkgNi40LTQyIDI2LTQ2LjUgNTAuNHpNMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTQ0TDI2NS4zIDI1Mi45Yy0yNi45LTE4LjgtNTguOS0yOC45LTkxLjgtMjguOUgxNjIuOWMtNjAuNiAwLTExNiAzNC4yLTE0My4xIDg4LjRMMTMuNSAzMjVDNC42IDM0Mi43IDAgMzYyLjMgMCAzODIuMlYzODR6XCJdXG59O1xudmFyIGZhQ2xpcGJvYXJkVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbGlwYm9hcmQtdXNlcicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjdmM1wiLCBcIk0xOTIgMGMtNDEuOCAwLTc3LjQgMjYuNy05MC41IDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDI4Mi41QzI2OS40IDI2LjcgMjMzLjggMCAxOTIgMHptMCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTEyOCAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek04MCA0MzJjMC00NC4yIDM1LjgtODAgODAtODBoNjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZ6XCJdXG59O1xudmFyIGZhQ2hpbGQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hpbGQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImYxYWVcIiwgXCJNOTYgNjRhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgOTYgNjR6bTQ4IDMyMHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyODcuOEw1OS4xIDMyMWMtOS40IDE1LTI5LjIgMTkuNC00NC4xIDEwUy00LjUgMzAxLjkgNC45IDI4N2wzOS45LTYzLjNDNjkuNyAxODQgMTEzLjIgMTYwIDE2MCAxNjBzOTAuMyAyNCAxMTUuMiA2My42TDMxNS4xIDI4N2M5LjQgMTUgNC45IDM0LjctMTAgNDQuMXMtMzQuNyA0LjktNDQuMS0xMEwyNDAgMjg3LjhWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEgxNDR6XCJdXG59O1xudmFyIGZhTGlyYVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlyYS1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbODM1Nl0sIFwiZjE5NVwiLCBcIk0xMTIgMTYwLjRjMC0zNS41IDI4LjgtNjQuNCA2NC40LTY0LjRjNi45IDAgMTMuOCAxLjEgMjAuNCAzLjNsODEuMiAyNy4xYzE2LjggNS42IDM0LjktMy41IDQwLjUtMjAuMnMtMy41LTM0LjktMjAuMi00MC41TDIxNyAzOC42Yy0xMy4xLTQuNC0yNi44LTYuNi00MC42LTYuNkMxMDUuNSAzMiA0OCA4OS41IDQ4IDE2MC40VjE5MkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0OHYzMkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0NmMtMi4yIDEwLjUtNi4xIDIwLjYtMTEuNyAyOS45TDQuNiA0MzEuNWMtNS45IDkuOS02LjEgMjIuMi0uNCAzMi4yUzIwLjUgNDgwIDMyIDQ4MEgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIODguNWwuNy0xLjFjMTEuNi0xOS4zIDE4LjktNDAuNyAyMS42LTYyLjlIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlYyNTZIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlYxNjAuNHpcIl1cbn07XG52YXIgZmFTYXRlbGxpdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2F0ZWxsaXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzUyXSwgXCJmN2JmXCIsIFwiTTIzMyA3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtOTYgOTZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDg5LjQgODkuNC0xNS41IDE1LjVDMTUyLjMgMjMwLjQgMTI0LjkgMjI0IDk2IDIyNGMtMzEuNyAwLTYxLjUgNy43LTg3LjggMjEuMmMtOSA0LjctMTAuMyAxNi43LTMuMSAyMy44TDExMi43IDM3Ni43IDk2LjMgMzkzLjFjLTIuNi0uNy01LjQtMS4xLTguMy0xLjFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTIuOS0uNC01LjYtMS4xLTguM2wxNi40LTE2LjRMMjQyLjkgNTA2LjljNy4yIDcuMiAxOS4yIDUuOSAyMy44LTMuMUMyODAuMyA0NzcuNSAyODggNDQ3LjcgMjg4IDQxNmMwLTI4LjktNi40LTU2LjMtMTcuOC04MC45bDE1LjUtMTUuNUwzNzUgNDA5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDk2LTk2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC04OS40LTg5LjQgNTUtNTVjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTQ4LTQ4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNTUgNTVMMjMzIDd6bTE1OSAzNTFsLTcyLjQtNzIuNCA2Mi4xLTYyLjFMNDU0LjEgMjk2IDM5MiAzNTguMXpNMjI2LjMgMTkyLjRMMTUzLjkgMTIwIDIxNiA1Ny45bDcyLjQgNzIuNC02Mi4xIDYyLjF6XCJdXG59O1xudmFyIGZhUGxhbmVMb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW5lLWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NThcIiwgXCJNMTkyIDkzLjdDMTkyIDU5LjUgMjIxIDAgMjU2IDBjMzYgMCA2NCA1OS41IDY0IDkzLjd2ODQuNmwxMDEuOCA1OC4yQzQxOCAyNDcuNiA0MTYgMjU5LjYgNDE2IDI3MnYyNC42Yy0xNy45IDEwLjQtMzAuMyAyOS4xLTMxLjggNTAuOUwzMjAgMzI5LjFWNDAwbDU3LjYgNDMuMmM0IDMgNi40IDcuOCA2LjQgMTIuOHYyNCAxOGMwIDcuOC02LjMgMTQtMTQgMTRjLTEuMyAwLTIuNi0uMi0zLjktLjVMMjU2IDQ4MCAxNDUuOSA1MTEuNWMtMS4zIC40LTIuNiAuNS0zLjkgLjVjLTcuOCAwLTE0LTYuMy0xNC0xNFY0NTZjMC01IDIuNC05LjggNi40LTEyLjhMMTkyIDQwMGwwLTcwLjktMTcxLjYgNDlDMTAuMiAzODEuMSAwIDM3My40IDAgMzYyLjhWMjk3LjNjMC01LjcgMy4xLTExIDguMS0xMy45TDE5MiAxNzguM1Y5My43ek01MjggMjQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY0OGg2NFYyNzJjMC0xNy43LTE0LjMtMzItMzItMzJ6bS04MCAzMmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwdjQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMlYyNzJ6XCJdXG59O1xudmFyIGZhVGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhZycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzk5MV0sIFwiZjAyYlwiLCBcIk0wIDgwVjIyOS41YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDE3NiAxNzZjMjUgMjUgNjUuNSAyNSA5MC41IDBMNDE4LjcgMzE3LjNjMjUtMjUgMjUtNjUuNSAwLTkwLjVsLTE3Ni0xNzZjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdINDhDMjEuNSAzMiAwIDUzLjUgMCA4MHptMTEyIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFDb21tZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbW1lbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0ODksIDYxNjY5XSwgXCJmMDc1XCIsIFwiTTUxMiAyNDBjMCAxMTQuOS0xMTQuNiAyMDgtMjU2IDIwOGMtMzcuMSAwLTcyLjMtNi40LTEwNC4xLTE3LjljLTExLjkgOC43LTMxLjMgMjAuNi01NC4zIDMwLjZDNzMuNiA0NzEuMSA0NC43IDQ4MCAxNiA0ODBjLTYuNSAwLTEyLjMtMy45LTE0LjgtOS45Yy0yLjUtNi0xLjEtMTIuOCAzLjQtMTcuNGwwIDAgMCAwIDAgMCAwIDAgLjMtLjNjLjMtLjMgLjctLjcgMS4zLTEuNGMxLjEtMS4yIDIuOC0zLjEgNC45LTUuN2M0LjEtNSA5LjYtMTIuNCAxNS4yLTIxLjZjMTAtMTYuNiAxOS41LTM4LjQgMjEuNC02Mi45QzE3LjcgMzI2LjggMCAyODUuMSAwIDI0MEMwIDEyNS4xIDExNC42IDMyIDI1NiAzMnMyNTYgOTMuMSAyNTYgMjA4elwiXVxufTtcbnZhciBmYUNha2VDYW5kbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nha2UtY2FuZGxlcycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzg3NCwgXCJiaXJ0aGRheS1jYWtlXCIsIFwiY2FrZVwiXSwgXCJmMWZkXCIsIFwiTTg2LjQgNS41TDYxLjggNDcuNkM1OCA1NC4xIDU2IDYxLjYgNTYgNjkuMlY3MmMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwVjY5LjJjMC03LjYtMi0xNS01LjgtMjEuNkwxMDUuNiA1LjVDMTAzLjYgMi4xIDEwMCAwIDk2IDBzLTcuNiAyLjEtOS42IDUuNXptMTI4IDBMMTg5LjggNDcuNmMtMy44IDYuNS01LjggMTQtNS44IDIxLjZWNzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MFY2OS4yYzAtNy42LTItMTUtNS44LTIxLjZMMjMzLjYgNS41QzIzMS42IDIuMSAyMjggMCAyMjQgMHMtNy42IDIuMS05LjYgNS41ek0zMTcuOCA0Ny42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNlY3MmMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwVjY5LjJjMC03LjYtMi0xNS01LjgtMjEuNkwzNjEuNiA1LjVDMzU5LjYgMi4xIDM1NiAwIDM1MiAwcy03LjYgMi4xLTkuNiA1LjVMMzE3LjggNDcuNnpNMTI4IDE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY0OGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2NzFjOC4zIDUuMiAxOC4xIDkgMjguOCA5YzEzLjUgMCAyNy4yLTYuMSAzOC40LTEzLjRjNS40LTMuNSA5LjktNy4xIDEzLTkuN2MxLjUtMS4zIDIuNy0yLjQgMy41LTMuMWMuNC0uNCAuNy0uNiAuOC0uOGwuMS0uMSAwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGMzLjEtMy4yIDcuNC00LjkgMTEuOS00LjhzOC42IDIuMSAxMS42IDUuNGwwIDAgMCAwIC4xIC4xYy4xIC4xIC40IC40IC43IC43Yy43IC43IDEuNyAxLjcgMy4xIDNjMi44IDIuNiA2LjggNi4xIDExLjggOS41YzEwLjIgNy4xIDIzIDEzLjEgMzYuMyAxMy4xczI2LjEtNiAzNi4zLTEzLjFjNS0zLjUgOS02LjkgMTEuOC05LjVjMS40LTEuMyAyLjQtMi4zIDMuMS0zYy4zLS4zIC42LS42IC43LS43bC4xLS4xYzMtMy41IDcuNC01LjQgMTItNS40czkgMiAxMiA1LjRsLjEgLjFjLjEgLjEgLjQgLjQgLjcgLjdjLjcgLjcgMS43IDEuNyAzLjEgM2MyLjggMi42IDYuOCA2LjEgMTEuOCA5LjVjMTAuMiA3LjEgMjMgMTMuMSAzNi4zIDEzLjFzMjYuMS02IDM2LjMtMTMuMWM1LTMuNSA5LTYuOSAxMS44LTkuNWMxLjQtMS4zIDIuNC0yLjMgMy4xLTNjLjMtLjMgLjYtLjYgLjctLjdsLjEtLjFjMi45LTMuNCA3LjEtNS4zIDExLjYtNS40czguNyAxLjYgMTEuOSA0LjhsMCAwIDAgMCAwIDAgLjEgLjFjLjIgLjIgLjQgLjQgLjggLjhjLjggLjcgMS45IDEuOCAzLjUgMy4xYzMuMSAyLjYgNy41IDYuMiAxMyA5LjdjMTEuMiA3LjMgMjQuOSAxMy40IDM4LjQgMTMuNGMxMC43IDAgMjAuNS0zLjkgMjguOC05VjI4OGMwLTM1LjMtMjguNy02NC02NC02NFYxNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NDhIMjU2VjE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY0OEgxMjhWMTc2ek00NDggMzk0LjZjLTguNSAzLjMtMTguMiA1LjQtMjguOCA1LjRjLTIyLjUgMC00Mi40LTkuOS01NS44LTE4LjZjLTQuMS0yLjctNy44LTUuNC0xMC45LTcuOGMtMi44IDIuNC02LjEgNS05LjggNy41QzMyOS44IDM5MCAzMTAuNiA0MDAgMjg4IDQwMHMtNDEuOC0xMC01NC42LTE4LjljLTMuNS0yLjQtNi43LTQuOS05LjQtNy4yYy0yLjcgMi4zLTUuOSA0LjctOS40IDcuMkMyMDEuOCAzOTAgMTgyLjYgNDAwIDE2MCA0MDBzLTQxLjgtMTAtNTQuNi0xOC45Yy0zLjctMi42LTctNS4yLTkuOC03LjVjLTMuMSAyLjQtNi44IDUuMS0xMC45IDcuOEM3MS4yIDM5MC4xIDUxLjMgNDAwIDI4LjggNDAwYy0xMC42IDAtMjAuMy0yLjItMjguOC01LjRWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYzOTQuNnpcIl1cbn07XG52YXIgZmFCaXJ0aGRheUNha2UgPSBmYUNha2VDYW5kbGVzO1xudmFyIGZhQ2FrZSA9IGZhQ2FrZUNhbmRsZXM7XG52YXIgZmFFbnZlbG9wZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbnZlbG9wZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODM4NiwgOTk5MywgNjE0NDNdLCBcImYwZTBcIiwgXCJNNDggNjRDMjEuNSA2NCAwIDg1LjUgMCAxMTJjMCAxNS4xIDcuMSAyOS4zIDE5LjIgMzguNEwyMzYuOCAzMTMuNmMxMS40IDguNSAyNyA4LjUgMzguNCAwTDQ5Mi44IDE1MC40YzEyLjEtOS4xIDE5LjItMjMuMyAxOS4yLTM4LjRjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTAgMTc2VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTc2TDI5NC40IDMzOS4yYy0yMi44IDE3LjEtNTQgMTcuMS03Ni44IDBMMCAxNzZ6XCJdXG59O1xudmFyIGZhQW5nbGVzVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGVzLXVwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJhbmdsZS1kb3VibGUtdXBcIl0sIFwiZjEwMlwiLCBcIk0yNDYuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyMjQgMTA5LjMgMzYxLjQgMjQ2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHptMTYwIDM1MmwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjI0IDMwMS4zIDM2MS40IDQzOC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xudmFyIGZhQW5nbGVEb3VibGVVcCA9IGZhQW5nbGVzVXA7XG52YXIgZmFQYXBlcmNsaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFwZXJjbGlwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjA2XSwgXCJmMGM2XCIsIFwiTTM2NC4yIDgzLjhjLTI0LjQtMjQuNC02NC0yNC40LTg4LjQgMGwtMTg0IDE4NGMtNDIuMSA0Mi4xLTQyLjEgMTEwLjMgMCAxNTIuNHMxMTAuMyA0Mi4xIDE1Mi40IDBsMTUyLTE1MmMxMC45LTEwLjkgMjguNy0xMC45IDM5LjYgMHMxMC45IDI4LjcgMCAzOS42bC0xNTIgMTUyYy02NCA2NC0xNjcuNiA2NC0yMzEuNiAwcy02NC0xNjcuNiAwLTIzMS42bDE4NC0xODRjNDYuMy00Ni4zIDEyMS4zLTQ2LjMgMTY3LjYgMHM0Ni4zIDEyMS4zIDAgMTY3LjZsLTE3NiAxNzZjLTI4LjYgMjguNi03NSAyOC42LTEwMy42IDBzLTI4LjYtNzUgMC0xMDMuNmwxNDQtMTQ0YzEwLjktMTAuOSAyOC43LTEwLjkgMzkuNiAwczEwLjkgMjguNyAwIDM5LjZsLTE0NCAxNDRjLTYuNyA2LjctNi43IDE3LjcgMCAyNC40czE3LjcgNi43IDI0LjQgMGwxNzYtMTc2YzI0LjQtMjQuNCAyNC40LTY0IDAtODguNHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0VG9DaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXJpZ2h0LXRvLWNpdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YjNcIiwgXCJNMjg4IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjE5Mmg0MFYxMjBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY3MmgyNGMyNi41IDAgNDggMjEuNSA0OCA0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDMyIDMzNmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6bTY0IDMydjMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWODBjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTc2YzAtOC44LTcuMi0xNi0xNi0xNkgzNjh6TTM1MiAyNzJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNzYtMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZINTI4ek01MTIgMzY4djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMzY4YzAtOC44LTcuMi0xNi0xNi0xNkg1MjhjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTY2LjYgMTUzLjRsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxNDYuNyAyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMTQ2LjdsLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMHpcIl1cbn07XG52YXIgZmFSaWJib24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmliYm9uJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODk1XSwgXCJmNGQ2XCIsIFwiTTMzMy4yIDMyMi44bDAgMC0xMzMuOS0xNDYgMCAwTDE0NiAxMTguNmM3LjgtNS4xIDM3LTIyLjYgNzgtMjIuNnM3MC4yIDE3LjQgNzggMjIuNkwyNDUuNyAxODBsODUuNiA5My40IDI3LjQtMjkuOGMxNi4zLTE3LjcgMjUuMy00MC45IDI1LjMtNjVWMTQ5LjFjMC0xOS01LjYtMzcuNS0xNi4xLTUzLjNMMzI3LjggMzUuNkMzMTIuOSAxMy40IDI4Ny45IDAgMjYxLjIgMGgtNzZjLTI1LjggMC01MC4xIDEyLjUtNjUuMSAzMy41TDgxLjkgODdDNzAuMyAxMDMuMiA2NCAxMjIuOCA2NCAxNDIuOFYxNjRjMCAyMy4yIDguNCA0NS42IDIzLjYgNjMuMWw1NiA2NC4yIDAgMCA4My4zIDk1LjYgMCAwIDkxLjggMTA1LjNjMTAgMTEuNSAyNi44IDE0LjMgNDAgNi44bDU0LjUtMzEuMWMxNy44LTEwLjIgMjEuNi0zNC4zIDcuNy00OS40bC04Ny43LTk1Ljd6TTIwNS4yIDQxMC42bC04My4zLTk1LjZMMjcuMSA0MTguNWMtMTMuOSAxNS4xLTEwLjEgMzkuMiA3LjcgNDkuNGw1NS4xIDMxLjVjMTMgNy40IDI5LjMgNC45IDM5LjQtNi4xbDc1LjktODIuNnpcIl1cbn07XG52YXIgZmFMdW5ncyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsdW5ncycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTcyOV0sIFwiZjYwNFwiLCBcIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlYxNjQuMWMwIDE2LjQgOC40IDMxLjcgMjIuMiA0MC41bDkuOCA2LjJWMTY1LjNDMzg0IDEyNyA0MTUgOTYgNDUzLjMgOTZjMjEuNyAwIDQyLjggMTAuMiA1NS44IDI4LjhjMTUuNCAyMi4xIDQ0LjMgNjUuNCA3MSAxMTYuOWMyNi41IDUwLjkgNTIuNCAxMTIuNSA1OS42IDE3MC4zYy4yIDEuMyAuMiAyLjYgLjIgNHY3YzAgNDkuMS0zOS44IDg5LTg5IDg5Yy03LjMgMC0xNC41LS45LTIxLjYtMi43bC03Mi43LTE4LjJDNDE0IDQ4MC41IDM4NCA0NDIuMSAzODQgMzk4VjMyNWw5MC41IDU3LjZjNy41IDQuNyAxNy4zIDIuNSAyMi4xLTQuOXMyLjUtMTcuMy00LjktMjIuMUwzODQgMjg3LjF2LS40bC00NC4xLTI4LjFjLTcuMy00LjYtMTMuOS0xMC4xLTE5LjktMTYuMWMtNS45IDYtMTIuNiAxMS41LTE5LjkgMTYuMUwyNTYgMjg2LjcgMTYxLjIgMzQ3bC0xMy41IDguNmMwIDAgMCAwLS4xIDBjLTcuNCA0LjgtOS42IDE0LjYtNC44IDIyLjFjNC43IDcuNSAxNC42IDkuNyAyMi4xIDQuOWw5MS4xLTU4VjM5OGMwIDQ0LjEtMzAgODIuNS03Mi43IDkzLjFsLTcyLjcgMTguMmMtNy4xIDEuOC0xNC4zIDIuNy0yMS42IDIuN2MtNDkuMSAwLTg5LTM5LjgtODktODl2LTdjMC0xLjMgLjEtMi43IC4yLTRjNy4yLTU3LjkgMzMuMS0xMTkuNCA1OS42LTE3MC4zYzI2LjgtNTEuNSA1NS42LTk0LjggNzEtMTE2LjljMTMtMTguNiAzNC0yOC44IDU1LjgtMjguOEMyMjUgOTYgMjU2IDEyNyAyNTYgMTY1LjN2NDUuNWw5LjgtNi4yYzEzLjgtOC44IDIyLjItMjQuMSAyMi4yLTQwLjVWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhQXJyb3dVcDkxID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLTktMScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1udW1lcmljLXVwLWFsdFwiXSwgXCJmODg3XCIsIFwiTTE2MCAzMmM5IDAgMTcuNSAzLjggMjMuNiAxMC40bDg4IDk2YzExLjkgMTMgMTEuMSAzMy4zLTIgNDUuMnMtMzMuMyAxMS4xLTQ1LjItMkwxOTIgMTQ2LjNWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE0Ni4zTDk1LjYgMTgxLjZjLTExLjkgMTMtMzIuMiAxMy45LTQ1LjIgMnMtMTMuOS0zMi4yLTItNDUuMmw4OC05NkMxNDIuNSAzNS44IDE1MSAzMiAxNjAgMzJ6TTQ1MC43IDI5NGM4LjMgNiAxMy4zIDE1LjcgMTMuMyAyNnY5NmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjM2NC40bC01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40em0tNS0xNDUuMUEzMiAzMiAwIDEgMCA0MTguMyA5MWEzMiAzMiAwIDEgMCAyNy40IDU3Ljl6bS00MC43IDU0LjlDMzY5LjYgMTkyLjQgMzQ0IDE1OS4yIDM0NCAxMjBjMC00OC42IDM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDIzLjUtNy41IDQ2LjMtMjEuNSA2NS4yTDQ0OS43IDI1MWMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuN3MtMTcuMi0zMC42LTYuNy00NC44bDYuOC05LjJ6XCJdXG59O1xudmFyIGZhU29ydE51bWVyaWNVcEFsdCA9IGZhQXJyb3dVcDkxO1xudmFyIGZhTGl0ZWNvaW5TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpdGVjb2luLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxZDNcIiwgXCJNMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRWMjEzLjZMMjMuMiAyMjUuMmMtMTcgNC45LTI2LjggMjIuNi0yMiAzOS42czIyLjYgMjYuOCAzOS42IDIyTDY0IDI4MC4xVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTI4VjI2MS45bDEzNi44LTM5LjFjMTctNC45IDI2LjgtMjIuNiAyMi0zOS42cy0yMi42LTI2LjgtMzkuNi0yMkwxMjggMTk1LjNWNjR6XCJdXG59O1xudmFyIGZhQm9yZGVyTm9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3JkZXItbm9uZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjg1MFwiLCBcIk0zMiA0ODBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em05Ni02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAtMzg0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMCAyNTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0ek0zMjAgNDE2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMC0zMjBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTIyNCA0ODBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wLTQ0OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAgMjU2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHpNNDE2IDQxNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAtMzg0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIgOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0ek00MTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIgMjg4YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMTkyIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTkyIDY0YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHpNMzIgMzIwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNNDE2IDE5MmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6TTMyIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTE5MiA2NGEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6XCJdXG59O1xudmFyIGZhQ2lyY2xlTm9kZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLW5vZGVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGUyXCIsIFwiTTQxOC40IDE1Ny45YzM1LjMtOC4zIDYxLjYtNDAgNjEuNi03Ny45YzAtNDQuMi0zNS44LTgwLTgwLTgwYy00My40IDAtNzguNyAzNC41LTgwIDc3LjVMMTM2LjIgMTUxLjFDMTIxLjcgMTM2LjggMTAxLjkgMTI4IDgwIDEyOGMtNDQuMiAwLTgwIDM1LjgtODAgODBzMzUuOCA4MCA4MCA4MGMxMi4yIDAgMjMuOC0yLjcgMzQuMS03LjZMMjU5LjcgNDA3LjhjLTIuNCA3LjYtMy43IDE1LjgtMy43IDI0LjJjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTI3LjctMTQtNTIuMS0zNS40LTY2LjRsMzcuOC0yMDcuN3pNMTU2LjMgMjMyLjJjMi4yLTYuOSAzLjUtMTQuMiAzLjctMjEuN2wxODMuOC03My41YzMuNiAzLjUgNy40IDYuNyAxMS42IDkuNUwzMTcuNiAzNTQuMWMtNS41IDEuMy0xMC44IDMuMS0xNS44IDUuNUwxNTYuMyAyMzIuMnpcIl1cbn07XG52YXIgZmFQYXJhY2h1dGVCb3ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFyYWNodXRlLWJveCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjRjZFwiLCBcIk0zODMuNSAxOTJjLjMtNS4zIC41LTEwLjYgLjUtMTZjMC01MS0xNS45LTk2LTQwLjItMTI3LjZDMzE5LjUgMTYuOSAyODguMiAwIDI1NiAwcy02My41IDE2LjktODcuOCA0OC40QzE0My45IDgwIDEyOCAxMjUgMTI4IDE3NmMwIDUuNCAuMiAxMC43IC41IDE2SDI0MFYzMjBIMjA4Yy03IDAtMTMuNyAxLjUtMTkuNyA0LjJMNjguMiAxOTJIOTYuNWMtLjMtNS4zLS41LTEwLjYtLjUtMTZjMC02NCAyMi4yLTEyMS4yIDU3LjEtMTU5LjNDNjIgNDkuMyAxOC42IDEyMi42IDQuMiAxNzMuNkMxLjUgMTgzLjEgOSAxOTIgMTguOSAxOTJoNkwxNjUuMiAzNDYuM2MtMy4zIDYuNS01LjIgMTMuOS01LjIgMjEuN3Y5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFYzNjhjMC03LjgtMS45LTE1LjItNS4yLTIxLjdMNDg3LjEgMTkyaDZjOS45IDAgMTcuNC04LjkgMTQuNy0xOC40QzQ5My40IDEyMi42IDQ1MCA0OS4zIDM1OC45IDE2LjdDMzkzLjggNTQuOCA0MTYgMTEyLjEgNDE2IDE3NmMwIDUuNC0uMiAxMC43LS41IDE2aDI4LjNMMzIzLjcgMzI0LjJjLTYtMi43LTEyLjctNC4yLTE5LjctNC4ySDI3MlYxOTJIMzgzLjV6XCJdXG59O1xudmFyIGZhSW5kZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2luZGVudCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAzY1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0ek0xOTIgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA5Nkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyek0wIDQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xMjcuOCAyNjguNkwyNS44IDM0Ny45QzE1LjMgMzU2LjEgMCAzNDguNiAwIDMzNS4zVjE3Ni43YzAtMTMuMyAxNS4zLTIwLjggMjUuOC0xMi42bDEwMS45IDc5LjNjOC4yIDYuNCA4LjIgMTguOSAwIDI1LjN6XCJdXG59O1xudmFyIGZhVHJ1Y2tGaWVsZFVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZpZWxkLXVuJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNThlXCIsIFwiTTk2IDMyQzYwLjcgMzIgMzIgNjAuNyAzMiA5NnYzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJ2MzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NkgzODRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYyODhjMC0zNS4zLTI4LjctNjQtNjQtNjRoLTQuMmMtLjQtMS4xLS45LTIuMS0xLjMtMy4yTDQ4NS43IDEwMmMtMTAuMy0yMy4xLTMzLjItMzgtNTguNS0zOEgzNzUuNEMzNjQuNCA0NC45IDM0My43IDMyIDMyMCAzMkg5NnptMjg4IDk2aDQzLjJsNDIuNyA5NkgzODRWMTI4ek0xMTIgMzg0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTM2OC00OGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTI1My4zIDEzNS4xbDM0LjcgNTJWMTQ0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2OTZjMCA3LjEtNC42IDEzLjMtMTEuNCAxNS4zcy0xNC0uNi0xNy45LTYuNGwtMzQuNy01MlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMTQ0YzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTI4IDE0NHY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYUhvdXJnbGFzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VyZ2xhc3MnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs5MjAzLCA2MjAzMiwgXCJob3VyZ2xhc3MtZW1wdHlcIl0sIFwiZjI1NFwiLCBcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEg2NCAzMjBoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWNzVjMCA0Mi40LTE2LjkgODMuMS00Ni45IDExMy4xTDIzNy4zIDI1Nmw2Ny45IDY3LjljMzAgMzAgNDYuOSA3MC43IDQ2LjkgMTEzLjF2MTFjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwIDY0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjQzN2MwLTQyLjQgMTYuOS04My4xIDQ2LjktMTEzLjFMMTQ2LjcgMjU2IDc4LjkgMTg4LjFDNDguOSAxNTguMSAzMiAxMTcuNCAzMiA3NVY2NEMxNC4zIDY0IDAgNDkuNyAwIDMyek05NiA2NFY3NWMwIDI1LjUgMTAuMSA0OS45IDI4LjEgNjcuOUwxOTIgMjEwLjdsNjcuOS02Ny45YzE4LTE4IDI4LjEtNDIuNCAyOC4xLTY3LjlWNjRIOTZ6bTAgMzg0SDI4OFY0MzdjMC0yNS41LTEwLjEtNDkuOS0yOC4xLTY3LjlMMTkyIDMwMS4zbC02Ny45IDY3LjljLTE4IDE4LTI4LjEgNDIuNC0yOC4xIDY3Ljl2MTF6XCJdXG59O1xudmFyIGZhSG91cmdsYXNzRW1wdHkgPSBmYUhvdXJnbGFzcztcbnZhciBmYU1vdW50YWluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW50YWluJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTU2XSwgXCJmNmZjXCIsIFwiTTI1NiAzMmMxMi41IDAgMjQuMSA2LjQgMzAuOCAxN0w1MDMuNCAzOTQuNGM1LjYgOC45IDguNiAxOS4yIDguNiAyOS43YzAgMzAuOS0yNSA1NS45LTU1LjkgNTUuOUg1NS45QzI1IDQ4MCAwIDQ1NSAwIDQyNC4xYzAtMTAuNSAzLTIwLjggOC42LTI5LjdMMjI1LjIgNDljNi42LTEwLjYgMTguMy0xNyAzMC44LTE3em02NSAxOTJMMjU2IDEyMC40IDE3Ni45IDI0Ni41bDE4LjMgMjQuNGM2LjQgOC41IDE5LjIgOC41IDI1LjYgMGwyNS42LTM0LjFjNi04LjEgMTUuNS0xMi44IDI1LjYtMTIuOGg0OXpcIl1cbn07XG52YXIgZmFVc2VyRG9jdG9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItZG9jdG9yJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ1c2VyLW1kXCJdLCBcImYwZjBcIiwgXCJNMjI0IDI1NkExMjggMTI4IDAgMSAwIDIyNCAwYTEyOCAxMjggMCAxIDAgMCAyNTZ6bS05NiA1NS4yQzU0IDMzMi45IDAgNDAxLjMgMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDQxOC4zYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43YzAtODEtNTQtMTQ5LjQtMTI4LTE3MS4xVjM2MmMyNy42IDcuMSA0OCAzMi4yIDQ4IDYydjQwYzAgOC44LTcuMiAxNi0xNiAxNkgzMzZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZWNDI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjI0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI1NmMtOC44IDAtMTYtNy4yLTE2LTE2VjQyNGMwLTI5LjggMjAuNC01NC45IDQ4LTYyVjMwNC45Yy02LS42LTEyLjEtLjktMTguMy0uOUgxNzguM2MtNi4yIDAtMTIuMyAuMy0xOC4zIC45djY1LjRjMjMuMSA2LjkgNDAgMjguMyA0MCA1My43YzAgMzAuOS0yNS4xIDU2LTU2IDU2cy01Ni0yNS4xLTU2LTU2YzAtMjUuNCAxNi45LTQ2LjggNDAtNTMuN1YzMTEuMnpNMTQ0IDQ0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xudmFyIGZhVXNlck1kID0gZmFVc2VyRG9jdG9yO1xudmFyIGZhQ2lyY2xlSW5mbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtaW5mbycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaW5mby1jaXJjbGVcIl0sIFwiZjA1YVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjE2IDMzNmgyNFYyNzJIMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djg4aDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em00MC0yMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUluZm9DaXJjbGUgPSBmYUNpcmNsZUluZm87XG52YXIgZmFDbG91ZE1lYXRiYWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb3VkLW1lYXRiYWxsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzNiXCIsIFwiTTAgMjI0YzAgNTMgNDMgOTYgOTYgOTZoNDQuN2M5LjUtMjMuNSAzMi41LTQwIDU5LjMtNDBjMiAwIDMuOSAuMSA1LjggLjNDMjE3LjYgMjY1LjUgMjM1LjcgMjU2IDI1NiAyNTZzMzguNCA5LjUgNTAuMiAyNC4zYzEuOS0uMiAzLjktLjMgNS44LS4zYzI2LjkgMCA0OS45IDE2LjUgNTkuMyA0MEg0MTZjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLS41IDAtMS4xIDAtMS42IDBjMS4xLTUuMiAxLjYtMTAuNSAxLjYtMTZjMC00NC4yLTM1LjgtODAtODAtODBjLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOEMyNTYuNSAyNC4zIDIxOS4xIDAgMTc2IDBDMTE0LjEgMCA2NCA1MC4xIDY0IDExMmMwIDcuMSAuNyAxNC4xIDEuOSAyMC44QzI3LjYgMTQ1LjQgMCAxODEuNSAwIDIyNHptMjg4IDk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgMSAuMSAyLjEgLjEgMy4xYy0uNy0uOC0xLjQtMS42LTIuMS0yLjNjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zYy43IC43IDEuNSAxLjQgMi4zIDIuMWMtMS0uMS0yLjEtLjEtMy4xLS4xYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzEgMCAyLjEtLjEgMy4xLS4xYy0uOCAuNy0xLjYgMS4zLTIuMyAyLjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBjLjctLjcgMS40LTEuNSAyLjEtMi4zYy0uMSAxLS4xIDIuMS0uMSAzLjFjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTEtLjEtMi4xLS4xLTMuMWMuNyAuOCAxLjMgMS42IDIuMSAyLjNjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2MtLjctLjctMS41LTEuNC0yLjMtMi4xYzEgLjEgMi4xIC4xIDMuMSAuMWMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmMtMSAwLTIuMSAuMS0zLjEgLjFjLjgtLjcgMS42LTEuMyAyLjMtMi4xYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwYy0uNyAuNy0xLjQgMS41LTIuMSAyLjNjLjEtMSAuMS0yLjEgLjEtMy4xek00OCA0NDhhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em00MTYgMGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xudmFyIGZhQ2FtZXJhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbWVyYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMjU4LCBcImNhbWVyYS1hbHRcIl0sIFwiZjAzMFwiLCBcIk0xNDkuMSA2NC44TDEzOC43IDk2SDY0QzI4LjcgOTYgMCAxMjQuNyAwIDE2MFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MGMwLTM1LjMtMjguNy02NC02NC02NEgzNzMuM0wzNjIuOSA2NC44QzM1Ni40IDQ1LjIgMzM4LjEgMzIgMzE3LjQgMzJIMTk0LjZjLTIwLjcgMC0zOSAxMy4yLTQ1LjUgMzIuOHpNMjU2IDE5MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG52YXIgZmFDYW1lcmFBbHQgPSBmYUNhbWVyYTtcbnZhciBmYVNxdWFyZVZpcnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS12aXJ1cycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTU3OFwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyMy44IDkzLjdjMTMuMyAwIDI0IDEwLjcgMjQgMjRjMCAyOS4zIDM1LjQgNDMuOSA1Ni4xIDIzLjJjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0yMC43IDIwLjctNiA1Ni4xIDIzLjIgNTYuMWMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjkuMyAwLTQzLjkgMzUuNC0yMy4yIDU2LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjAuNy0yMC43LTU2LjEtNi01Ni4xIDIzLjJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yOS4zLTM1LjQtNDMuOS01Ni4xLTIzLjJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMjAuNy0yMC43IDYtNTYuMS0yMy4yLTU2LjFjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjkuMyAwIDQzLjktMzUuNCAyMy4yLTU2LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMyMC43IDIwLjcgNTYuMSA2IDU2LjEtMjMuMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMTkyIDI1NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTg4IDMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6XCJdXG59O1xudmFyIGZhTWV0ZW9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21ldGVvcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3MzJdLCBcImY3NTNcIiwgXCJNNDkzLjcgLjlMMjk5LjQgNzUuNmwyLjMtMjkuM2MxLTEyLjgtMTIuOC0yMS41LTI0LTE1LjFMMTAxLjMgMTMzLjRDMzguNiAxNjkuNyAwIDIzNi42IDAgMzA5QzAgNDIxLjEgOTAuOSA1MTIgMjAzIDUxMmM3Mi40IDAgMTM5LjQtMzguNiAxNzUuNy0xMDEuM0w0ODAuOCAyMzQuM2M2LjUtMTEuMS0yLjItMjUtMTUuMS0yNGwtMjkuMyAyLjNMNTExLjEgMTguM2MuNi0xLjUgLjktMy4yIC45LTQuOEM1MTIgNiA1MDYgMCA0OTguNSAwYy0xLjcgMC0zLjMgLjMtNC44IC45ek0xOTIgMTkyYTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnptMCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xNiA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xudmFyIGZhQ2FyT24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyLW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGRkXCIsIFwiTTI4MCAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI0ek0xODUuOCAyMjRIMzI2LjJjNi44IDAgMTIuOCA0LjMgMTUuMSAxMC42TDM2MC4zIDI4OEgxNTEuN2wxOS4xLTUzLjRjMi4zLTYuNCA4LjMtMTAuNiAxNS4xLTEwLjZ6bS03NS4zLTEwLjlMODIuMiAyOTIuNEM2Mi4xIDMwMC45IDQ4IDMyMC44IDQ4IDM0NHY0MCA2NCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NmMxNy43IDAgMzItMTQuMyAzMi0zMlY0NDhIMzg0djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQ0OCAzODQgMzQ0YzAtMjMuMi0xNC4xLTQzLjEtMzQuMi01MS42bC0yOC4zLTc5LjNDMzkwLjEgMTgxLjMgMzYwIDE2MCAzMjYuMiAxNjBIMTg1LjhjLTMzLjggMC02NCAyMS4zLTc1LjMgNTMuMXpNMTI4IDM0NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTIzMiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zOSAzOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNDggNDhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDczIDM5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHptNDAwIDBMMzkxIDg3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMHpcIl1cbn07XG52YXIgZmFTbGVpZ2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2xlaWdoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmN2NjXCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NlYyNTZjMCA1MyA0MyA5NiA5NiA5NnYzMmg2NFYzNTJIMzg0djMyaDY0VjM1MmM1MyAwIDk2LTQzIDk2LTk2VjE2MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1MTIgNDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY0MS4zYzAgMzAuMi0yNC41IDU0LjctNTQuNyA1NC43Yy03NS41IDAtMTQ1LjYtMzguOS0xODUuNi0xMDIuOWwtNC4zLTYuOUMxNzQuMiA2Ny42IDEyNSAzNy42IDcwLjcgMzIuN2MtMi4yLS41LTQuNC0uNy02LjctLjdINTUgMzJ6TTY0MCAzODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEg2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1NTJjNDguNiAwIDg4LTM5LjQgODgtODh2LTh6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duMTkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi0xLTknLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtbnVtZXJpYy1hc2NcIiwgXCJzb3J0LW51bWVyaWMtZG93blwiXSwgXCJmMTYyXCIsIFwiTTQ1MC43IDM4Yy04LjMtNi0xOS4xLTcuNy0yOC44LTQuNGwtNDggMTZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmw1LjktMlYxNjBIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDQ4IDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ2NFY2NGMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnpNMTYwIDQ4MGM5IDAgMTcuNS0zLjggMjMuNi0xMC40bDg4LTk2YzExLjktMTMgMTEuMS0zMy4zLTItNDUuMnMtMzMuMy0xMS4xLTQ1LjIgMkwxOTIgMzY1LjdWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzY1LjdMOTUuNiAzMzAuNGMtMTEuOS0xMy0zMi4yLTEzLjktNDUuMi0ycy0xMy45IDMyLjItMiA0NS4ybDg4IDk2QzE0Mi41IDQ3Ni4yIDE1MSA0ODAgMTYwIDQ4MHpNNDE4LjMgMzA3YTMyIDMyIDAgMSAxIDI3LjQgNTcuOUEzMiAzMiAwIDEgMSA0MTguMyAzMDd6TTQwNS4xIDQxOS44bC02LjggOS4yYy0xMC41IDE0LjItNy41IDM0LjIgNi43IDQ0LjhzMzQuMiA3LjUgNDQuOC02LjdsNDguOC02NS44YzE0LTE4LjkgMjEuNS00MS43IDIxLjUtNjUuMmMwLTQ4LjYtMzkuNC04OC04OC04OHMtODggMzkuNC04OCA4OGMwIDM5LjIgMjUuNiA3Mi40IDYxLjEgODMuOHpcIl1cbn07XG52YXIgZmFTb3J0TnVtZXJpY0FzYyA9IGZhQXJyb3dEb3duMTk7XG52YXIgZmFTb3J0TnVtZXJpY0Rvd24gPSBmYUFycm93RG93bjE5O1xudmFyIGZhSGFuZEhvbGRpbmdEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtaG9sZGluZy1kcm9wbGV0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJoYW5kLWhvbGRpbmctd2F0ZXJcIl0sIFwiZjRjMVwiLCBcIk0yNzUuNSA2LjZDMjc4LjMgMi41IDI4MyAwIDI4OCAwczkuNyAyLjUgMTIuNSA2LjZMMzY2LjggMTAzQzM3OCAxMTkuMyAzODQgMTM4LjYgMzg0IDE1OC4zVjE2MGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NnYtMS43YzAtMTkuOCA2LTM5IDE3LjItNTUuM0wyNzUuNSA2LjZ6TTU2OC4yIDMzNi4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJINjguOGw0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4SDI3MmgxNiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyODggMjcyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDM5Mi42bDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzODRsMCAwLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdXG59O1xudmFyIGZhSGFuZEhvbGRpbmdXYXRlciA9IGZhSGFuZEhvbGRpbmdEcm9wbGV0O1xudmFyIGZhV2F0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2F0ZXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY3NzNcIiwgXCJNMjY5LjUgNjkuOWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwQzMyOSA4NS40IDM1Ni41IDk2IDM4NCA5NmMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSAxNDkuNyA0MTcgMTYwIDM4NCAxNjBjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40QzQyLjggOTIuNiA2MSA4My41IDc1LjMgNzEuNmMxMS4xLTkuNSAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDg1LjIgMTY1LjEgOTYgMTkyIDk2YzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMXptMzcgMjg4QzMyOSAzNzMuNCAzNTYuNSAzODQgMzg0IDM4NGMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA0MzcuNyA0MTcgNDQ4IDM4NCA0NDhjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyAzNzMuMiAxNjUuMSAzODQgMTkyIDM4NGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHptMC0xNDRDMzI5IDIyOS40IDM1Ni41IDI0MCAzODQgMjQwYzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xbDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDI5My43IDQxNyAzMDQgMzg0IDMwNGMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNSAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDIyOS4yIDE2NS4xIDI0MCAxOTIgMjQwYzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwelwiXVxufTtcbnZhciBmYUNhbGVuZGFyQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItY2hlY2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYyNzRcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnpNMzI5IDMwNWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC05NSA5NS00Ny00N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMEwzMjkgMzA1elwiXVxufTtcbnZhciBmYUJyYWlsbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJhaWxsZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjJhMVwiLCBcIk0wIDk2YTY0IDY0IDAgMSAxIDEyOCAwQTY0IDY0IDAgMSAxIDAgOTZ6TTIyNCAyNzJhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0wLTgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek04MCA0MTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpNMCA0MTZhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgMCA0MTZ6bTI0MCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNjQgMTkyYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0yMjQgMzJhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTM1MiA5NmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSAzNTIgOTZ6bTI0MCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwQTY0IDY0IDAgMSAxIDUxMiA5NnptNjQgMTc2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptMC04MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptMTYgMjI0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNDE2IDI3MmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTAtODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTE2IDIyNGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0tODAgMGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6XCJdXG59O1xudmFyIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmVzY3JpcHRpb24tYm90dGxlLW1lZGljYWwnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcInByZXNjcmlwdGlvbi1ib3R0bGUtYWx0XCJdLCBcImY0ODZcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRWMzJ6bTMyIDk2SDM1MlY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIOTZjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHpNMTYwIDI0MHY0OEgxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNTJoNDhjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIMjI0VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0ID0gZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsO1xudmFyIGZhTGFuZG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFuZG1hcmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjNdLCBcImY2NmZcIiwgXCJNMjQwLjEgNC4yYzkuOC01LjYgMjEuOS01LjYgMzEuOCAwbDE3MS44IDk4LjFMNDQ4IDEwNGwwIC45IDQ3LjkgMjcuNGMxMi42IDcuMiAxOC44IDIyIDE1LjEgMzZzLTE2LjQgMjMuOC0zMC45IDIzLjhIMzJjLTE0LjUgMC0yNy4yLTkuOC0zMC45LTIzLjhzMi41LTI4LjggMTUuMS0zNkw2NCAxMDQuOVYxMDRsNC40LTEuNkwyNDAuMSA0LjJ6TTY0IDIyNGg2NFY0MTZoNDBWMjI0aDY0VjQxNmg0OFYyMjRoNjRWNDE2aDQwVjIyNGg2NFY0MjAuM2MuNiAuMyAxLjIgLjcgMS44IDEuMWw0OCAzMmMxMS43IDcuOCAxNyAyMi40IDEyLjkgMzUuOVM0OTQuMSA1MTIgNDgwIDUxMkgzMmMtMTQuMSAwLTI2LjUtOS4yLTMwLjYtMjIuN3MxLjEtMjguMSAxMi45LTM1LjlsNDgtMzJjLjYtLjQgMS4yLS43IDEuOC0xLjFWMjI0elwiXVxufTtcbnZhciBmYVRydWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjY2LCA5OTUxXSwgXCJmMGQxXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjM2OGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg2NGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2SDM4NGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjI4OCAyNTYgMjM3LjNjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNTEyIDExNC43Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43SDQxNlY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNDE2IDE2MGg1MC43TDU0NCAyMzcuM1YyNTZINDE2VjE2MHpNMTEyIDQxNmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0zNjgtNDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYUNyb3NzaGFpcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3Jvc3NoYWlycycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjA1YlwiLCBcIk0yNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0Mi40YzkzLjcgMTMuOSAxNjcuNyA4OCAxODEuNiAxODEuNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDY5LjZjLTEzLjkgOTMuNy04OCAxNjcuNy0xODEuNiAxODEuNlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDY5LjZDMTMwLjMgNDU1LjcgNTYuMyAzODEuNyA0Mi40IDI4OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0Mi40QzU2LjMgMTMwLjMgMTMwLjMgNTYuMyAyMjQgNDIuNFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTA3LjQgMjg4YzEyLjUgNTguMyA1OC40IDEwNC4xIDExNi42IDExNi42VjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjIwLjZjNTguMy0xMi41IDEwNC4xLTU4LjQgMTE2LjYtMTE2LjZIMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDIwLjZDMzkyLjEgMTY1LjcgMzQ2LjMgMTE5LjkgMjg4IDEwNy40VjEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxMDcuNEMxNjUuNyAxMTkuOSAxMTkuOSAxNjUuNyAxMDcuNCAyMjRIMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDEwNy40ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFQZXJzb25DYW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jYW5lJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlNTNjXCIsIFwiTTI3MiA0OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0tOCAxODcuM2w0Ny40IDU3LjFjMTEuMyAxMy42IDMxLjUgMTUuNSA0NS4xIDQuMnMxNS41LTMxLjUgNC4yLTQ1LjFsLTczLjctODguOWMtMTguMi0yMi00NS4zLTM0LjctNzMuOS0zNC43SDE3Ny4xYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOUwxMjAgMjU2LjlWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUyaDE2VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjIzNS4zek0zNTIgMzc2YzAtNC40IDMuNi04IDgtOHM4IDMuNiA4IDhWNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzc2YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2djhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHYtOHpcIl1cbn07XG52YXIgZmFUZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1N2RcIiwgXCJNMjY5LjQgNkMyODAuNS0yIDI5NS41LTIgMzA2LjYgNmwyMjQgMTYwYzcuNCA1LjMgMTIuMiAxMy41IDEzLjIgMjIuNWwzMiAyODhjMSA5LTEuOSAxOC4xLTggMjQuOXMtMTQuNyAxMC43LTIzLjggMTAuN0g0NjQgNDM1LjhjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdMMzA2LjcgMjkzLjVjLTEuNy0zLjQtNS4xLTUuNS04LjgtNS41Yy01LjUgMC05LjkgNC40LTkuOSA5LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDI0MCAzMmMtOS4xIDAtMTcuOC0zLjktMjMuOC0xMC43cy05LTE1LjgtOC0yNC45bDMyLTI4OGMxLTkgNS44LTE3LjIgMTMuMi0yMi41TDI2OS40IDZ6XCJdXG59O1xudmFyIGZhVmVzdFBhdGNoZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmVzdC1wYXRjaGVzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlMDg2XCIsIFwiTTE1MS4yIDY5LjdsNTUuOSAxNjcuNy0xMSAzMy4xYy0yLjcgOC4yLTQuMSAxNi43LTQuMSAyNS4zVjQ2NGMwIDE0LjUgMy45IDI4LjIgMTAuNyAzOS45QzE5NSA1MDkgMTg1LjkgNTEyIDE3NiA1MTJINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjI3MC41YzAtOS41IDIuOC0xOC43IDguMS0yNi42bDQ3LjktNzEuOGM1LjMtNy45IDguMS0xNy4xIDguMS0yNi42VjEyOCA1NC4zIDQ4QzY0IDIxLjUgODUuNSAwIDExMiAwaDQuNWMuMiAwIC40IDAgLjYgMGMuNCAwIC44IDAgMS4yIDBjMTguOCAwIDM0LjEgOS43IDQ0LjEgMTguOEMxNzEuNiAyNy4yIDE5MC44IDQwIDIyNCA0MHM1Mi40LTEyLjggNjEuNy0yMS4yQzI5NS43IDkuNyAzMTEgMCAzMjkuNyAwYy40IDAgLjggMCAxLjIgMGMuMiAwIC40IDAgLjYgMEgzMzZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2Ni4zVjEyOHYxNy41YzAgOS41IDIuOCAxOC43IDguMSAyNi42bDQ3LjkgNzEuOGM1LjMgNy45IDguMSAxNy4xIDguMSAyNi42VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjI5NS44YzAtNS4yIC44LTEwLjMgMi41LTE1LjJMMjk2LjggNjkuN0MyNzkuNCA3OS43IDI1NS40IDg4IDIyNCA4OHMtNTUuNC04LjMtNzIuOC0xOC4zek05NiA0NTZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek02My41IDI1NS41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdMNzkgMjg4IDYzLjUgMzAzLjVjLTQuNyA0LjctNC43IDEyLjMgMCAxN3MxMi4zIDQuNyAxNyAwTDk2IDMwNWwxNS41IDE1LjVjNC43IDQuNyAxMi4zIDQuNyAxNyAwczQuNy0xMi4zIDAtMTdMMTEzIDI4OGwxNS41LTE1LjVjNC43LTQuNyA0LjctMTIuMyAwLTE3cy0xMi4zLTQuNy0xNyAwTDk2IDI3MSA4MC41IDI1NS41Yy00LjctNC43LTEyLjMtNC43LTE3IDB6TTMwNCAyODB2OCAzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzIgOGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGgtOHYtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHpcIl1cbn07XG52YXIgZmFDaGVja0RvdWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVjay1kb3VibGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1NjBcIiwgXCJNMzQyLjYgODYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxNjAgMTc4LjdsLTU3LjQtNTcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsODAgODBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHptOTYgMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE2MCA0MDIuNyA1NC42IDI5Ny40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDI1Ni0yNTZ6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duQVogPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi1hLXonLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYWxwaGEtYXNjXCIsIFwic29ydC1hbHBoYS1kb3duXCJdLCBcImYxNWRcIiwgXCJNMTgzLjYgNDY5LjZDMTc3LjUgNDc2LjIgMTY5IDQ4MCAxNjAgNDgwcy0xNy41LTMuOC0yMy42LTEwLjRsLTg4LTk2Yy0xMS45LTEzLTExLjEtMzMuMyAyLTQ1LjJzMzMuMy0xMS4xIDQ1LjIgMkwxMjggMzY1LjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzNjUuN2wzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ4MGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDQyOS4zIDQxNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzUyYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOUw0MDIuNyAzNTJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDE2IDMyYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdsNjQgMTI4IDE2IDMyYzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNMNDYwLjIgMjI0SDM3MS44bC03LjIgMTQuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWwxNi0zMiA2NC0xMjhDMzkyLjggMzguOCA0MDMuOSAzMiA0MTYgMzJ6TTM5NS44IDE3Nmg0MC40TDQxNiAxMzUuNiAzOTUuOCAxNzZ6XCJdXG59O1xudmFyIGZhU29ydEFscGhhQXNjID0gZmFBcnJvd0Rvd25BWjtcbnZhciBmYVNvcnRBbHBoYURvd24gPSBmYUFycm93RG93bkFaO1xudmFyIGZhTW9uZXlCaWxsV2hlYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktYmlsbC13aGVhdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUyYVwiLCBcIk0xNzYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgMTZoNDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINTZDNDIuNyA2NCAzMiA1My4zIDMyIDQwczEwLjctMjQgMjQtMjR6TTI0IDg4SDEzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTMTAuNyA4OCAyNCA4OHptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGg0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg1NmMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiAxNmMwLTguOCA3LjItMTYgMTYtMTZjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MHpNNDAwIDBjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE0NGMwIDQ0LjItMzUuOCA4MC04MCA4MGMtOC44IDAtMTYtNy4yLTE2LTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwYzguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDEyOGM4LjggMCAxNiA3LjIgMTYgMTZjMCA0NC4yLTM1LjggODAtODAgODBjLTguOCAwLTE2LTcuMi0xNi0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTk2IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODBjOC44IDAgMTYgNy4yIDE2IDE2ek0wIDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMDR6TTQ4IDQxNnY0OEg5NmMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0SDQ4djQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4ek00NjQgNDE2Yy0yNi41IDAtNDggMjEuNS00OCA0OGg0OFY0MTZ6TTQxNiAzMDRjMCAyNi41IDIxLjUgNDggNDggNDhWMzA0SDQxNnptLTk2IDgwYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpcIl1cbn07XG52YXIgZmFDb29raWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29va2llJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODUwXSwgXCJmNTYzXCIsIFwiTTI0Ny4yIDE3Yy0yMi4xLTMuMS00NC42IC45LTY0LjQgMTEuNGwtNzQgMzkuNUM4OS4xIDc4LjQgNzMuMiA5NC45IDYzLjQgMTE1TDI2LjcgMTkwLjZjLTkuOCAyMC4xLTEzIDQyLjktOS4xIDY0LjlsMTQuNSA4Mi44YzMuOSAyMi4xIDE0LjYgNDIuMyAzMC43IDU3LjlsNjAuMyA1OC40YzE2LjEgMTUuNiAzNi42IDI1LjYgNTguNyAyOC43bDgzIDExLjdjMjIuMSAzLjEgNDQuNi0uOSA2NC40LTExLjRsNzQtMzkuNWMxOS43LTEwLjUgMzUuNi0yNyA0NS40LTQ3LjJsMzYuNy03NS41YzkuOC0yMC4xIDEzLTQyLjkgOS4xLTY0LjlsLTE0LjYtODIuOGMtMy45LTIyLjEtMTQuNi00Mi4zLTMwLjctNTcuOUwzODguOSA1Ny41Yy0xNi4xLTE1LjYtMzYuNi0yNS42LTU4LjctMjguN0wyNDcuMiAxN3pNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFBcnJvd1JvdGF0ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctcm90YXRlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs4NjM0LCBcImFycm93LWxlZnQtcm90YXRlXCIsIFwiYXJyb3ctcm90YXRlLWJhY2tcIiwgXCJhcnJvdy1yb3RhdGUtYmFja3dhcmRcIiwgXCJ1bmRvXCJdLCBcImYwZTJcIiwgXCJNMTI1LjcgMTYwSDE3NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY1MS4yTDk3LjYgOTcuNmM4Ny41LTg3LjUgMjI5LjMtODcuNSAzMTYuOCAwczg3LjUgMjI5LjMgMCAzMTYuOHMtMjI5LjMgODcuNS0zMTYuOCAwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzYyLjUgNjIuNSAxNjMuOCA2Mi41IDIyNi4zIDBzNjIuNS0xNjMuOCAwLTIyNi4zcy0xNjMuOC02Mi41LTIyNi4zIDBMMTI1LjcgMTYwelwiXVxufTtcbnZhciBmYUFycm93TGVmdFJvdGF0ZSA9IGZhQXJyb3dSb3RhdGVMZWZ0O1xudmFyIGZhQXJyb3dSb3RhdGVCYWNrID0gZmFBcnJvd1JvdGF0ZUxlZnQ7XG52YXIgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkID0gZmFBcnJvd1JvdGF0ZUxlZnQ7XG52YXIgZmFVbmRvID0gZmFBcnJvd1JvdGF0ZUxlZnQ7XG52YXIgZmFIYXJkRHJpdmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFyZC1kcml2ZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODQzNiwgXCJoZGRcIl0sIFwiZjBhMFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFYyODAuNGMtMTctMTUuMi0zOS40LTI0LjQtNjQtMjQuNEg2NGMtMjQuNiAwLTQ3IDkuMi02NCAyNC40Vjk2ek02NCAyODhINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzNTJjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTMyMCA0MTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMjgtMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG52YXIgZmFIZGQgPSBmYUhhcmREcml2ZTtcbnZhciBmYUZhY2VHcmluU3F1aW50VGVhcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXNxdWludC10ZWFycycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTMxNSwgXCJncmluLXNxdWludC10ZWFyc1wiXSwgXCJmNTg2XCIsIFwiTTQyNi44IDE0LjJDNDQ2LTUgNDc3LjUtNC42IDQ5Ny4xIDE0LjlzMjAgNTEgLjcgNzAuM2MtNi44IDYuOC0yMS40IDEyLjQtMzcuNCAxNi43Yy0xNi4zIDQuNC0zNC4xIDcuNS00Ni4zIDkuM2MtMS42IC4yLTMuMSAuNS00LjYgLjZjLTUuNiAuOS0xMC4zLTMuOS05LjUtOS41YzEuNi0xMS4yIDQuNi0yOS42IDktNDdjLjMtMS4zIC43LTIuNiAxLTMuOWM0LjMtMTUuOSA5LjgtMzAuNSAxNi43LTM3LjR6bS00NC43IDE5Yy0xLjUgNC44LTIuOSA5LjYtNC4xIDE0LjNjLTQuOCAxOC45LTggMzguNS05LjcgNTAuM2MtNCAyNi44IDE4LjkgNDkuNyA0NS43IDQ1LjhjMTEuOS0xLjYgMzEuNS00LjggNTAuNC05LjdjNC43LTEuMiA5LjUtMi41IDE0LjMtNC4xQzUzNC4yIDIyNy41IDUyMC4yIDM1My44IDQzNyA0MzdjLTgzLjIgODMuMi0yMDkuNSA5Ny4yLTMwNy4yIDQxLjhjMS41LTQuOCAyLjgtOS42IDQtMTQuM2M0LjgtMTguOSA4LTM4LjUgOS43LTUwLjNjNC0yNi44LTE4LjktNDkuNy00NS43LTQ1LjhjLTExLjkgMS42LTMxLjUgNC44LTUwLjQgOS43Yy00LjcgMS4yLTkuNSAyLjUtMTQuMyA0LjFDLTIyLjIgMjg0LjUtOC4yIDE1OC4yIDc1IDc1QzE1OC4yLTguMyAyODQuNS0yMi4yIDM4Mi4yIDMzLjJ6TTUxLjUgNDEwLjFjMTguNS01IDM4LjgtOC4zIDUwLjktMTBjNS42LS45IDEwLjMgMy45IDkuNSA5LjVjLTEuNyAxMi4xLTUgMzIuNC0xMCA1MC45Qzk3LjYgNDc2LjQgOTIgNDkxIDg1LjIgNDk3LjhDNjYgNTE3IDM0LjUgNTE2LjYgMTQuOSA0OTcuMXMtMjAtNTEtLjctNzAuM2M2LjgtNi44IDIxLjQtMTIuNCAzNy40LTE2Ljd6TTQxNi40IDIwMi4zYy00LjgtMTEuOS0yMC45LTEwLjktMjYuOSAuNGMtMTkuNCAzNi43LTQ2LjMgNzMuMi03OS44IDEwNi43cy03MCA2MC4zLTEwNi43IDc5LjhjLTExLjMgNi0xMi4zIDIyLjEtLjQgMjYuOWM1OS40IDI0LjEgMTI5LjkgMTIuMiAxNzcuOS0zNS44czU5LjktMTE4LjUgMzUuOC0xNzcuOXpNODcuMSAyODUuMWMyIDIgNC42IDMuMiA3LjMgMy40bDU2LjEgNS4xIDUuMSA1Ni4xYy4zIDIuOCAxLjUgNS40IDMuNCA3LjNjNi4zIDYuMyAxNy4yIDMuNiAxOS44LTQuOWwyOS43LTk3LjRjMy41LTExLjYtNy4zLTIyLjUtMTktMTlMOTIgMjY1LjNjLTguNiAyLjYtMTEuMyAxMy40LTQuOSAxOS44ek0yNjUuMyA5MmwtMjkuNyA5Ny40Yy0zLjUgMTEuNiA3LjMgMjIuNSAxOSAxOWw5Ny40LTI5LjdjOC42LTIuNiAxMS4zLTEzLjQgNC45LTE5LjhjLTItMi00LjYtMy4yLTcuMy0zLjRsLTU2LjEtNS4xLTUuMS01Ni4xYy0uMy0yLjgtMS41LTUuNC0zLjQtNy4zYy02LjMtNi4zLTE3LjItMy42LTE5LjggNC45elwiXVxufTtcbnZhciBmYUdyaW5TcXVpbnRUZWFycyA9IGZhRmFjZUdyaW5TcXVpbnRUZWFycztcbnZhciBmYUR1bWJiZWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2R1bWJiZWxsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNDRiXCIsIFwiTTk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjIyNHY2NFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJIOTZWNjR6bTQ0OCAwdjY0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDU0NHY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OCAyMjQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTQxNiAyMjR2NjRIMjI0VjIyNEg0MTZ6XCJdXG59O1xudmFyIGZhUmVjdGFuZ2xlTGlzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWN0YW5nbGUtbGlzdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibGlzdC1hbHRcIl0sIFwiZjAyMlwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDUxMmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2ek0xMjggMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzItMTI4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em05Ni0yNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIyNHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEg0NDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjI0em0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDQ0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyMjR6XCJdXG59O1xudmFyIGZhTGlzdEFsdCA9IGZhUmVjdGFuZ2xlTGlzdDtcbnZhciBmYVRhcnBEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhcnAtZHJvcGxldCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU3Y1wiLCBcIk0yODggMTYwYy0zNS4zIDAtNjQtMjYuOS02NC02MGMwLTI0IDMzLjctNzAuMSA1Mi4yLTkzLjVjNi4xLTcuNyAxNy41LTcuNyAyMy42IDBDMzE4LjMgMjkuOSAzNTIgNzYgMzUyIDEwMGMwIDMzLjEtMjguNyA2MC02NCA2MHpNNjQgMTI4SDE5Ny41YzEzLjIgMzcuMyA0OC43IDY0IDkwLjUgNjRzNzcuNC0yNi43IDkwLjUtNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjM1Mkg0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0ek00NDggNTEybDAtMTI4SDU3Nkw0NDggNTEyek05NiAyNTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYUhvdXNlTWVkaWNhbENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLW1lZGljYWwtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTExXCIsIFwiTTMyMCAzNjhjMCA1OS41IDI5LjUgMTEyLjEgNzQuOCAxNDRIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w1MjIuMSAxOTMuOWMtOC41LTEuMy0xNy4zLTEuOS0yNi4xLTEuOWMtNTQuNyAwLTEwMy41IDI0LjktMTM1LjggNjRIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhIMjA4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZ6bTMyIDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjExLjMtNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNDgwIDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xudmFyIGZhUGVyc29uU2tpaW5nTm9yZGljID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1za2lpbmctbm9yZGljJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJza2lpbmctbm9yZGljXCJdLCBcImY3Y2FcIiwgXCJNMzM2IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMjI3LjIgMTYwYzEuOSAwIDMuOCAuMSA1LjYgLjNMMjAxLjYgMjU0Yy05LjMgMjggMS43IDU4LjggMjYuOCA3NC41bDg2LjIgNTMuOUwyOTEuMyA0NjRIMjAyLjhsNDEuMS04OC4xLTMyLjQtMjAuM2MtNy44LTQuOS0xNC43LTEwLjctMjAuNi0xNy4zTDEzMi4yIDQ2NEg5OS43bDU0LjItMjU3LjZjNC42LTEuNSA5LTQuMSAxMi43LTcuOGwyMy4xLTIzLjFjOS45LTkuOSAyMy40LTE1LjUgMzcuNS0xNS41ek0xMjEuNCAxOTguNmMuNCAuNCAuOCAuOCAxLjMgMS4yTDY3IDQ2NEgyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgxNTkuM2MuNCAwIC45IDAgMS4zIDBIMzE5LjNjLjUgMCAxIDAgMS40IDBINTA0YzM5LjggMCA3Mi0zMi4yIDcyLTcydi04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djhjMCAxMy4zLTEwLjcgMjQtMjQgMjRINDM0LjZsMjcuNi0xNzkuM2MxMC41LTUuMiAxNy44LTE2LjEgMTcuOC0yOC43YzAtMTcuNy0xNC4zLTMyLTMyLTMySDQyNi43Yy0xMi45IDAtMjQuNi03LjgtMjkuNS0xOS43bC02LjMtMTVjLTE0LjYtMzUuMS00NC4xLTYxLjktODAuNS03My4xbC00OC43LTE1Yy0xMS4xLTMuNC0yMi43LTUuMi0zNC40LTUuMmMtMzEgMC02MC44IDEyLjMtODIuNyAzNC4zbC0yMy4xIDIzLjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zem0zMDggODkuNEw0MDIuMyA0NjRIMzU3LjhsMjEuNi03NS42YzUuOS0yMC42LTIuNi00Mi42LTIwLjctNTMuOUwzMDIgMjk5bDMwLjktODIuNCA1LjEgMTIuM0MzNTMgMjY0LjcgMzg3LjkgMjg4IDQyNi43IDI4OGgyLjd6XCJdXG59O1xudmFyIGZhU2tpaW5nTm9yZGljID0gZmFQZXJzb25Ta2lpbmdOb3JkaWM7XG52YXIgZmFDYWxlbmRhclBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItcGx1cycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjI3MVwiLCBcIk05NiAzMlY2NEg0OEMyMS41IDY0IDAgODUuNSAwIDExMnY0OEg0NDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDM1MlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY2NEgxNjBWMzJjMC0xNy43LTE0LjMtMzItMzItMzJTOTYgMTQuMyA5NiAzMnpNNDQ4IDE5MkgwVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTkyek0yMjQgMjQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djU2aDU2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0OHY1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYzNzZIMTQ0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDU2VjI3MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFQbGFuZUFycml2YWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtYXJyaXZhbCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODc0OF0sIFwiZjVhZlwiLCBcIk0uMyAxNjYuOUwwIDY4QzAgNTcuNyA5LjUgNTAuMSAxOS41IDUyLjNsMzUuNiA3LjljMTAuNiAyLjMgMTkuMiA5LjkgMjMgMjBMOTYgMTI4bDEyNy4zIDM3LjZMMTgxLjggMjAuNEMxNzguOSAxMC4yIDE4Ni42IDAgMTk3LjIgMGg0MC4xYzExLjYgMCAyMi4yIDYuMiAyNy45IDE2LjNsMTA5IDE5My44IDEwNy4yIDMxLjdjMTUuOSA0LjcgMzAuOCAxMi41IDQzLjcgMjIuOGwzNC40IDI3LjZjMjQgMTkuMiAxOC4xIDU3LjMtMTAuNyA2OC4yYy00MS4yIDE1LjYtODYuMiAxOC4xLTEyOC44IDdMMTIxLjcgMjg5LjhjLTExLjEtMi45LTIxLjItOC43LTI5LjMtMTYuOUw5LjUgMTg5LjRjLTUuOS02LTkuMy0xNC4xLTkuMy0yMi41ek0zMiA0NDhINjA4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem05Ni04MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjgtMTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUNpcmNsZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTg0MCwgXCJhcnJvdy1hbHQtY2lyY2xlLWxlZnRcIl0sIFwiZjM1OVwiLCBcIk01MTIgMjU2QTI1NiAyNTYgMCAxIDAgMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMHpNMjE3LjQgMzc2LjlMMTE3LjUgMjY5LjhjLTMuNS0zLjgtNS41LTguNy01LjUtMTMuOHMyLTEwLjEgNS41LTEzLjhsOTkuOS0xMDcuMWM0LjItNC41IDEwLjEtNy4xIDE2LjMtNy4xYzEyLjMgMCAyMi4zIDEwIDIyLjMgMjIuM2wwIDU3LjcgOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgNTcuN2MwIDEyLjMtMTAgMjIuMy0yMi4zIDIyLjNjLTYuMiAwLTEyLjEtMi42LTE2LjMtNy4xelwiXVxufTtcbnZhciBmYUFycm93QWx0Q2lyY2xlTGVmdCA9IGZhQ2lyY2xlTGVmdDtcbnZhciBmYVRyYWluU3Vid2F5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWluLXN1YndheScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wic3Vid2F5XCJdLCBcImYyMzlcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NlYzNTJjMCA0OCAzNS4yIDg3LjcgODEuMSA5NC45bC00NiA0NkMyOC4xIDQ5OS45IDMzLjEgNTEyIDQzIDUxMkg4Mi43YzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDE2MCA0NDhIMjg4bDU0LjYgNTQuNmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRINDA1YzEwIDAgMTUtMTIuMSA3LjktMTkuMWwtNDYtNDZjNDYtNy4xIDgxLjEtNDYuOSA4MS4xLTk0LjlWOTZjMC01My00My05Ni05Ni05Nkg5NnpNNjQgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxMjh6TTI3MiA5Nmg4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgyNzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTI4OC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhU3Vid2F5ID0gZmFUcmFpblN1YndheTtcbnZhciBmYUNoYXJ0R2FudHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hhcnQtZ2FudHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwZTRcIiwgXCJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDAwYzAgOC44IDcuMiAxNiAxNiAxNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem05NiA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTk2IDY0SDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTE2MCA5Nmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhSW5kaWFuUnVwZWVTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2luZGlhbi1ydXBlZS1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJpbmRpYW4tcnVwZWVcIiwgXCJpbnJcIl0sIFwiZTFiY1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDk2aDE2SDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMzEuOGM5LjYgMTQuNCAxNi43IDMwLjYgMjAuNyA0OEgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjUyLjRjLTEzLjIgNTguMy02MS45IDEwMy4yLTEyMi4yIDExMC45TDI3NC42IDQyMmMxNC40IDEwLjMgMTcuNyAzMC4zIDcuNCA0NC42cy0zMC4zIDE3LjctNDQuNiA3LjRMMTMuNCAzMTRDMi4xIDMwNi0yLjcgMjkxLjUgMS41IDI3OC4yUzE4LjEgMjU2IDMyIDI1Nmg4MGMzMi44IDAgNjEtMTkuNyA3My4zLTQ4SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDE4NS4zQzE3MyAxMTUuNyAxNDQuOCA5NiAxMTIgOTZIOTYgMzJDMTQuMyA5NiAwIDgxLjcgMCA2NHpcIl1cbn07XG52YXIgZmFJbmRpYW5SdXBlZSA9IGZhSW5kaWFuUnVwZWVTaWduO1xudmFyIGZhSW5yID0gZmFJbmRpYW5SdXBlZVNpZ247XG52YXIgZmFDcm9wU2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nyb3Atc2ltcGxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjcm9wLWFsdFwiXSwgXCJmNTY1XCIsIFwiTTEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMyVjY0SDMyQzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMkg2NFYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzUyVjM4NEgxMjhWMzJ6TTM4NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDQ4bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCA2NHY2NGwyMjQgMCAwIDM1MnpcIl1cbn07XG52YXIgZmFDcm9wQWx0ID0gZmFDcm9wU2ltcGxlO1xudmFyIGZhTW9uZXlCaWxsMSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsLTEnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcIm1vbmV5LWJpbGwtYWx0XCJdLCBcImYzZDFcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDMyMEg2NFYzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjR6TTY0IDE5MlYxMjhoNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTQ0OCAzODRjMC0zNS4zIDI4LjctNjQgNjQtNjR2NjRINDQ4em02NC0xOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0aDY0djY0ek0xNzYgMjU2YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6bTc2LTQ4YzAgOS43IDYuOSAxNy43IDE2IDE5LjZWMjc2aC00Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGgyNCAyNGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBoLTRWMjA4YzAtMTEtOS0yMC0yMC0yMEgyNzJjLTExIDAtMjAgOS0yMCAyMHpcIl1cbn07XG52YXIgZmFNb25leUJpbGxBbHQgPSBmYU1vbmV5QmlsbDE7XG52YXIgZmFMZWZ0TG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsZWZ0LWxvbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxvbmctYXJyb3ctYWx0LWxlZnRcIl0sIFwiZjMwYVwiLCBcIk0xNzcuNSA0MTRjLTguOCAzLjgtMTkgMi0yNi00LjZsLTE0NC0xMzZDMi43IDI2OC45IDAgMjYyLjYgMCAyNTZzMi43LTEyLjkgNy41LTE3LjRsMTQ0LTEzNmM3LTYuNiAxNy4yLTguNCAyNi00LjZzMTQuNSAxMi41IDE0LjUgMjJsMCA3MiAyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yODggMCAwIDcyYzAgOS42LTUuNyAxOC4yLTE0LjUgMjJ6XCJdXG59O1xudmFyIGZhTG9uZ0Fycm93QWx0TGVmdCA9IGZhTGVmdExvbmc7XG52YXIgZmFEbmEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG5hJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5NTE2XSwgXCJmNDcxXCIsIFwiTTQxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyYzAgNTkuOC0zMC4zIDEwNy41LTY5LjQgMTQ2LjZjLTI4IDI4LTYyLjUgNTMuNS05Ny4zIDc3LjRsLTIuNSAxLjdjLTExLjkgOC4xLTIzLjggMTYuMS0zNS41IDIzLjlsMCAwIDAgMCAwIDAtMS42IDFjLTYgNC0xMS45IDcuOS0xNy44IDExLjljLTIwLjkgMTQtNDAuOCAyNy43LTU5LjMgNDEuNUgyODMuM2MtOS44LTcuNC0yMC4xLTE0LjctMzAuNy0yMi4xbDctNC43IDMtMmMxNS4xLTEwLjEgMzAuOS0yMC42IDQ2LjctMzEuNmMyNSAxOC4xIDQ4LjkgMzcuMyA2OS40IDU3LjdDNDE3LjcgMzcyLjUgNDQ4IDQyMC4yIDQ0OCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJINjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC01OS44IDMwLjMtMTA3LjUgNjkuNC0xNDYuNmMyOC0yOCA2Mi41LTUzLjUgOTcuMy03Ny40Yy0zNC44LTIzLjktNjkuMy00OS4zLTk3LjMtNzcuNEMzMC4zIDEzOS41IDAgOTEuOCAwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMySDM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzM4LjYgMzg0SDEwOS40Yy0xMC4xIDEwLjYtMTguNiAyMS4zLTI1LjUgMzJIMzY0LjFjLTYuOC0xMC43LTE1LjMtMjEuNC0yNS41LTMyek0xMDkuNCAxMjhIMzM4LjZjMTAuMS0xMC43IDE4LjYtMjEuMyAyNS41LTMySDgzLjljNi44IDEwLjcgMTUuMyAyMS4zIDI1LjUgMzJ6bTU1LjQgNDhjMTguNCAxMy44IDM4LjQgMjcuNSA1OS4zIDQxLjVjMjAuOS0xNCA0MC44LTI3LjcgNTkuMy00MS41SDE2NC43elwiXVxufTtcbnZhciBmYVZpcnVzU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlydXMtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUwNzVcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN2wtMTU0LjMtMTIxYy0yLTMwLjEgMjAuOC02MC4xIDU2LTYwLjFINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDUzMi41Yy00OS45IDAtNzQuOS02MC4zLTM5LjYtOTUuNmw4LjItOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC04LjIgOC4yQzQxMi4zIDExOC40IDM1MiA5My40IDM1MiA0My41VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQzLjVjMCA0OS45LTYwLjMgNzQuOS05NS42IDM5LjZMMTg0LjIgNzVjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwYy0xLjYgMS42LTMuMSAzLjQtNC4zIDUuM0wzOC44IDUuMXptMjI1LjggMTc3YzYuOS0zLjkgMTQuOS02LjEgMjMuNC02LjFjMjYuNSAwIDQ4IDIxLjUgNDggNDhjMCA0LjQtLjYgOC43LTEuNyAxMi43bC02OS43LTU0LjZ6TTQwMiA0MTIuN0wxNDQuNyAyMTBjLTkuNSA4LjUtMjIuMiAxNC0zNy4yIDE0SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDExLjVjNDkuOSAwIDc0LjkgNjAuMyAzOS42IDk1LjZsLTguMiA4LjJjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOC4yLTguMmMzNS4zLTM1LjMgOTUuNi0xMC4zIDk1LjYgMzkuNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NjguNWMwLTMxLjIgMjMuNi01Mi43IDUwLTU1Ljd6XCJdXG59O1xudmFyIGZhTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWludXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MjExLCA4NzIyLCAxMDEzNCwgXCJzdWJ0cmFjdFwiXSwgXCJmMDY4XCIsIFwiTTQzMiAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYVN1YnRyYWN0ID0gZmFNaW51cztcbnZhciBmYUNoZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDM5XCIsIFwiTTE0NCAxNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlYzMkg5NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmgxNlY5Nkg2MC4yQzQ5LjEgOTYgNDAgMTA1LjEgNDAgMTE2LjJjMCAyLjUgLjUgNC45IDEuMyA3LjNMNzMuOCAyMDhINzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNEw2MCAzODRIMTk2TDE4MCAyNTZoNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGgtMS44bDMyLjUtODQuNWMuOS0yLjMgMS4zLTQuOCAxLjMtNy4zYzAtMTEuMi05LjEtMjAuMi0yMC4yLTIwLjJIMTQ0VjY0aDE2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE0NFYxNnpNNDggNDE2TDQuOCA0NzMuNkMxLjcgNDc3LjggMCA0ODIuOCAwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNEgyMzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRjMC01LjItMS43LTEwLjItNC44LTE0LjRMMjA4IDQxNkg0OHptMjg4IDBsLTQzLjIgNTcuNmMtMy4xIDQuMi00LjggOS4yLTQuOCAxNC40YzAgMTMuMyAxMC43IDI0IDI0IDI0SDQ4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNGMwLTUuMi0xLjctMTAuMi00LjgtMTQuNEw0NjQgNDE2SDMzNnpNMzA0IDIwOHY1MS45YzAgNy44IDIuOCAxNS4zIDggMjEuMUwzMzkuMiAzMTIgMzM3IDM4NEg0NjIuNWwtMy4zLTcyIDI4LjMtMzAuOGM1LjQtNS45IDguNS0xMy42IDguNS0yMS43VjIwOGMwLTguOC03LjItMTYtMTYtMTZINDY0Yy04LjggMC0xNiA3LjItMTYgMTZ2MTZINDI0VjIwOGMwLTguOC03LjItMTYtMTYtMTZIMzkyYy04LjggMC0xNiA3LjItMTYgMTZ2MTZIMzUyVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMzIwYy04LjggMC0xNiA3LjItMTYgMTZ6bTgwIDk2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2MzJIMzg0VjMwNHpcIl1cbn07XG52YXIgZmFBcnJvd0xlZnRMb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWxlZnQtbG9uZycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibG9uZy1hcnJvdy1sZWZ0XCJdLCBcImYxNzdcIiwgXCJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDQ4MCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM3MC43IDAgNzMuNC03My40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4elwiXVxufTtcbnZhciBmYUxvbmdBcnJvd0xlZnQgPSBmYUFycm93TGVmdExvbmc7XG52YXIgZmFQbHVnQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1Zy1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NWNcIiwgXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ2MzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDEyLjhjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJ6TTU3NiAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQxNiAzODUuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdXG59O1xudmFyIGZhU3RyZWV0VmlldyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdHJlZXQtdmlldycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjIxZFwiLCBcIk0zMjAgNjRBNjQgNjQgMCAxIDAgMTkyIDY0YTY0IDY0IDAgMSAwIDEyOCAwem0tOTYgOTZjLTM1LjMgMC02NCAyOC43LTY0IDY0djQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDEuOGwxMS4xIDk5LjVjMS44IDE2LjIgMTUuNSAyOC41IDMxLjggMjguNWgzOC43YzE2LjMgMCAzMC0xMi4zIDMxLjgtMjguNUwzMTguMiAzMDRIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNGMwLTM1LjMtMjguNy02NC02NC02NEgyMjR6TTEzMi4zIDM5NC4yYzEzLTIuNCAyMS43LTE0LjkgMTkuMy0yNy45cy0xNC45LTIxLjctMjcuOS0xOS4zYy0zMi40IDUuOS02MC45IDE0LjItODIgMjQuOGMtMTAuNSA1LjMtMjAuMyAxMS43LTI3LjggMTkuNkM2LjQgMzk5LjUgMCA0MTAuNSAwIDQyNGMwIDIxLjQgMTUuNSAzNi4xIDI5LjEgNDVjMTQuNyA5LjYgMzQuMyAxNy4zIDU2LjQgMjMuNEMxMzAuMiA1MDQuNyAxOTAuNCA1MTIgMjU2IDUxMnMxMjUuOC03LjMgMTcwLjQtMTkuNmMyMi4xLTYuMSA0MS44LTEzLjggNTYuNC0yMy40YzEzLjctOC45IDI5LjEtMjMuNiAyOS4xLTQ1YzAtMTMuNS02LjQtMjQuNS0xNC0zMi42Yy03LjUtNy45LTE3LjMtMTQuMy0yNy44LTE5LjZjLTIxLTEwLjYtNDkuNS0xOC45LTgyLTI0LjhjLTEzLTIuNC0yNS41IDYuMy0yNy45IDE5LjNzNi4zIDI1LjUgMTkuMyAyNy45YzMwLjIgNS41IDUzLjcgMTIuOCA2OSAyMC41YzMuMiAxLjYgNS44IDMuMSA3LjkgNC41YzMuNiAyLjQgMy42IDcuMiAwIDkuNmMtOC44IDUuNy0yMy4xIDExLjgtNDMgMTcuM0MzNzQuMyA0NTcgMzE4LjUgNDY0IDI1NiA0NjRzLTExOC4zLTctMTU3LjctMTcuOWMtMTkuOS01LjUtMzQuMi0xMS42LTQzLTE3LjNjLTMuNi0yLjQtMy42LTcuMiAwLTkuNmMyLjEtMS40IDQuOC0yLjkgNy45LTQuNWMxNS4zLTcuNyAzOC44LTE0LjkgNjktMjAuNXpcIl1cbn07XG52YXIgZmFGcmFuY1NpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZnJhbmMtc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTE4ZlwiLCBcIk04MCAzMkM2Mi4zIDMyIDQ4IDQ2LjMgNDggNjRWMjI0djk2SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzg0aDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlYyNTZIMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDExMlY5NkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIODB6XCJdXG59O1xudmFyIGZhVm9sdW1lT2ZmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbHVtZS1vZmYnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImYwMjZcIiwgXCJNMzIwIDY0YzAtMTIuNi03LjQtMjQtMTguOS0yOS4ycy0yNS0zLjEtMzQuNCA1LjNMMTMxLjggMTYwSDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGg2Ny44TDI2Ni43IDQ3MS45YzkuNCA4LjQgMjIuOSAxMC40IDM0LjQgNS4zUzMyMCA0NjAuNiAzMjAgNDQ4VjY0elwiXVxufTtcbnZhciBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWFzbC1pbnRlcnByZXRpbmcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nXCIsIFwiYXNsLWludGVycHJldGluZ1wiLCBcImhhbmRzLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nXCJdLCBcImYyYTNcIiwgXCJNMTU2LjYgNDYuM2M3LjktMTUuOCAxLjUtMzUtMTQuMy00Mi45cy0zNS0xLjUtNDIuOSAxNC4zTDEzLjUgMTg5LjRDNC42IDIwNy4yIDAgMjI2LjggMCAyNDYuN1YyNTZjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhoNzIgOHYtLjNjMzUuMi0yLjcgNjUuNC0yMi44IDgyLjEtNTEuN2M4LjgtMTUuMyAzLjYtMzQuOS0xMS43LTQzLjdzLTM0LjktMy42LTQzLjcgMTEuN2MtNyAxMi0xOS45IDIwLTM0LjcgMjBjLTIyLjEgMC00MC0xNy45LTQwLTQwczE3LjktNDAgNDAtNDBjMTQuOCAwIDI3LjcgOCAzNC43IDIwYzguOCAxNS4zIDI4LjQgMjAuNSA0My43IDExLjdzMjAuNS0yOC40IDExLjctNDMuN2MtMTIuOC0yMi4xLTMzLjYtMzkuMS01OC40LTQ3LjFsODAuOC0yMmMxNy00LjYgMjcuMS0yMi4yIDIyLjUtMzkuM3MtMjIuMi0yNy4xLTM5LjMtMjIuNUwxOTQuOSAxMjQuNmw4MS42LTY4YzEzLjYtMTEuMyAxNS40LTMxLjUgNC4xLTQ1LjFTMjQ5LjEtMy45IDIzNS41IDcuNEwxMzMuNiA5Mi4zbDIzLTQ2ek00ODMuNCA0NjUuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDg1LjktMTcxLjdjOC45LTE3LjggMTMuNS0zNy40IDEzLjUtNTcuMlYyNTZjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhINDQwaC04di4zYy0zNS4yIDIuNy02NS40IDIyLjgtODIuMSA1MS43Yy04LjkgMTUuMy0zLjYgMzQuOSAxMS43IDQzLjdzMzQuOSAzLjYgNDMuNy0xMS43YzctMTIgMTkuOS0yMCAzNC43LTIwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwYy0xNC44IDAtMjcuNy04LTM0LjctMjBjLTguOS0xNS4zLTI4LjQtMjAuNS00My43LTExLjdzLTIwLjUgMjguNC0xMS43IDQzLjdjMTIuOCAyMi4xIDMzLjYgMzkuMSA1OC40IDQ3LjFsLTgwLjggMjJjLTE3LjEgNC43LTI3LjEgMjIuMi0yMi41IDM5LjNzMjIuMiAyNy4xIDM5LjMgMjIuNWwxMDAuNy0yNy41LTgxLjYgNjhjLTEzLjYgMTEuMy0xNS40IDMxLjUtNC4xIDQ1LjFzMzEuNSAxNS40IDQ1LjEgNC4xbDEwMS45LTg0LjktMjMgNDZ6XCJdXG59O1xudmFyIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcgPSBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nO1xudmFyIGZhQXNsSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZztcbnZhciBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcgPSBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nO1xudmFyIGZhR2VhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnZWFyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTg4MSwgXCJjb2dcIl0sIFwiZjAxM1wiLCBcIk00OTUuOSAxNjYuNmMzLjIgOC43IC41IDE4LjQtNi40IDI0LjZsLTQzLjMgMzkuNGMxLjEgOC4zIDEuNyAxNi44IDEuNyAyNS40cy0uNiAxNy4xLTEuNyAyNS40bDQzLjMgMzkuNGM2LjkgNi4yIDkuNiAxNS45IDYuNCAyNC42Yy00LjQgMTEuOS05LjcgMjMuMy0xNS44IDM0LjNsLTQuNyA4LjFjLTYuNiAxMS0xNCAyMS40LTIyLjEgMzEuMmMtNS45IDcuMi0xNS43IDkuNi0yNC41IDYuOGwtNTUuNy0xNy43Yy0xMy40IDEwLjMtMjguMiAxOC45LTQ0IDI1LjRsLTEyLjUgNTcuMWMtMiA5LjEtOSAxNi4zLTE4LjIgMTcuOGMtMTMuOCAyLjMtMjggMy41LTQyLjUgMy41cy0yOC43LTEuMi00Mi41LTMuNWMtOS4yLTEuNS0xNi4yLTguNy0xOC4yLTE3LjhsLTEyLjUtNTcuMWMtMTUuOC02LjUtMzAuNi0xNS4xLTQ0LTI1LjRMODMuMSA0MjUuOWMtOC44IDIuOC0xOC42IC4zLTI0LjUtNi44Yy04LjEtOS44LTE1LjUtMjAuMi0yMi4xLTMxLjJsLTQuNy04LjFjLTYuMS0xMS0xMS40LTIyLjQtMTUuOC0zNC4zYy0zLjItOC43LS41LTE4LjQgNi40LTI0LjZsNDMuMy0zOS40QzY0LjYgMjczLjEgNjQgMjY0LjYgNjQgMjU2cy42LTE3LjEgMS43LTI1LjRMMjIuNCAxOTEuMmMtNi45LTYuMi05LjYtMTUuOS02LjQtMjQuNmM0LjQtMTEuOSA5LjctMjMuMyAxNS44LTM0LjNsNC43LTguMWM2LjYtMTEgMTQtMjEuNCAyMi4xLTMxLjJjNS45LTcuMiAxNS43LTkuNiAyNC41LTYuOGw1NS43IDE3LjdjMTMuNC0xMC4zIDI4LjItMTguOSA0NC0yNS40bDEyLjUtNTcuMWMyLTkuMSA5LTE2LjMgMTguMi0xNy44QzIyNy4zIDEuMiAyNDEuNSAwIDI1NiAwczI4LjcgMS4yIDQyLjUgMy41YzkuMiAxLjUgMTYuMiA4LjcgMTguMiAxNy44bDEyLjUgNTcuMWMxNS44IDYuNSAzMC42IDE1LjEgNDQgMjUuNGw1NS43LTE3LjdjOC44LTIuOCAxOC42LS4zIDI0LjUgNi44YzguMSA5LjggMTUuNSAyMC4yIDIyLjEgMzEuMmw0LjcgOC4xYzYuMSAxMSAxMS40IDIyLjQgMTUuOCAzNC4zek0yNTYgMzM2YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwelwiXVxufTtcbnZhciBmYUNvZyA9IGZhR2VhcjtcbnZhciBmYURyb3BsZXRTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkcm9wbGV0LXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ0aW50LXNsYXNoXCJdLCBcImY1YzdcIiwgXCJNMzIwIDUxMmM1My4yIDAgMTAxLjQtMjEuNiAxMzYuMS01Ni42bC0yOTguMy0yMzVDMTQwIDI1Ny4xIDEyOCAyOTIuMyAxMjggMzIwYzAgMTA2IDg2IDE5MiAxOTIgMTkyek01MDUuMiAzNzAuN2M0LjQtMTYuMSA2LjgtMzMuMSA2LjgtNTAuN2MwLTkxLjItMTMwLjItMjYyLjMtMTY2LjYtMzA4LjNDMzM5LjQgNC4yIDMzMC41IDAgMzIwLjkgMGgtMS44Yy05LjYgMC0xOC41IDQuMi0yNC41IDExLjdDMjc3LjggMzMgMjQwLjcgODEuMyAyMDUuOCAxMzZMMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w1MDUuMiAzNzAuN3pNMjI0IDMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmMtNjEuOSAwLTExMi01MC4xLTExMi0xMTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG52YXIgZmFUaW50U2xhc2ggPSBmYURyb3BsZXRTbGFzaDtcbnZhciBmYU1vc3F1ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb3NxdWUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzJdLCBcImY2NzhcIiwgXCJNNDAwIDBjNSAwIDkuOCAyLjQgMTIuOCA2LjRjMzQuNyA0Ni4zIDc4LjEgNzQuOSAxMzMuNSAxMTEuNWwwIDAgMCAwYzUuMiAzLjQgMTAuNSA3IDE2IDEwLjZjMjguOSAxOS4yIDQ1LjcgNTEuNyA0NS43IDg2LjFjMCAyOC42LTExLjMgNTQuNS0yOS44IDczLjRIMjIxLjhjLTE4LjQtMTktMjkuOC00NC45LTI5LjgtNzMuNGMwLTM0LjQgMTYuNy02Ni45IDQ1LjctODYuMWM1LjQtMy42IDEwLjgtNy4xIDE2LTEwLjZsMCAwIDAgMEMzMDkuMSA4MS4zIDM1Mi41IDUyLjcgMzg3LjIgNi40YzMtNCA3LjgtNi40IDEyLjgtNi40ek0yODggNTEyVjQ0MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY3MkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg2MDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDU2MFY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NzJINDQ4VjQ1NGMwLTE5LTguNC0zNy0yMy00OS4yTDQwMCAzODRsLTI1IDIwLjhDMzYwLjQgNDE3IDM1MiA0MzUgMzUyIDQ1NHY1OEgyODh6TTcwLjQgNS4yYzUuNy00LjMgMTMuNS00LjMgMTkuMiAwbDE2IDEyQzEzOS44IDQyLjkgMTYwIDgzLjIgMTYwIDEyNnYySDB2LTJDMCA4My4yIDIwLjIgNDIuOSA1NC40IDE3LjJsMTYtMTJ6TTAgMTYwSDE2MFYyOTYuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNFY0ODBjMCA5LjYgMi4xIDE4LjYgNS44IDI2LjhjLTYuNiAzLjQtMTQgNS4yLTIxLjggNS4ySDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxNzYgMTYwelwiXVxufTtcbnZhciBmYU1vc3F1aXRvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vc3F1aXRvJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTJiXCIsIFwiTTQ2My43IDUwNS45YzkuOC04LjkgMTAuNy0yNC4zIDIuMS0zNC4zbC00Mi4xLTQ5IDAtNTQuN2MwLTUuNS0xLjgtMTAuOC01LjEtMTUuMUwzNTIgMjY2LjNsMC0uM0w0ODUuNCAzODcuOEM1NDIuNCA0NDcuNiA2NDAgNDA1LjIgNjQwIDMyMC42YzAtNDcuOS0zNC04OC4zLTc5LjQtOTQuMmwtMTUzLTIzLjkgNDAuOC00MC45YzcuOC03LjggOS40LTIwLjEgMy45LTI5LjhMNDI4LjUgOTAuMWwzOC4yLTUwLjljOC0xMC42IDYuMS0yNS45LTQuMy0zNC4xcy0yNS4yLTYuMy0zMy4yIDQuNGwtNDggNjMuOWMtNS45IDcuOS02LjYgMTguNi0xLjcgMjcuMkw0MDIuMiAxNDAgMzUyIDE5MC4zbDAtMzguMmMwLTE0LjktMTAuMi0yNy40LTI0LTMxbDAtNTcuMmMwLTQuNC0zLjYtOC04LThzLTggMy42LTggOGwwIDU3LjJjLTEzLjggMy42LTI0IDE2LjEtMjQgMzFsMCAzOC4xTDIzNy44IDE0MGwyMi42LTM5LjVjNC45LTguNiA0LjItMTkuMy0xLjctMjcuMmwtNDgtNjMuOWMtOC0xMC42LTIyLjgtMTIuNi0zMy4yLTQuNHMtMTIuMiAyMy41LTQuMyAzNC4xbDM4LjIgNTAuOS0yMy45IDQxLjdjLTUuNSA5LjctMy45IDIyIDMuOSAyOS44bDQwLjggNDAuOS0xNTMgMjMuOUMzNCAyMzIuMyAwIDI3Mi43IDAgMzIwLjZjMCA4NC42IDk3LjYgMTI3IDE1NC42IDY3LjFMMjg4IDI2NmwwIC4zLTY2LjUgODYuNGMtMy4zIDQuMy01LjEgOS42LTUuMSAxNS4xbDAgNTQuNy00Mi4xIDQ5Yy04LjYgMTAuMS03LjcgMjUuNSAyLjEgMzQuM3MyNC43IDcuOSAzMy40LTIuMWw0OC01NS45YzMuOC00LjQgNS45LTEwLjIgNS45LTE2LjFsMC01NS40TDI4OCAzNDQuN2wwIDYzLjFjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTYzLjEgMjQuMyAzMS42IDAgNTUuNGMwIDUuOSAyLjEgMTEuNyA1LjkgMTYuMWw0OCA1NS45YzguNiAxMC4xIDIzLjYgMTEgMzMuNCAyLjF6XCJdXG59O1xudmFyIGZhU3Rhck9mRGF2aWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Rhci1vZi1kYXZpZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEwMDE3XSwgXCJmNjlhXCIsIFwiTTQwNC4yIDMwOS41TDM4My4xIDM0NGg0Mi4zbC0yMS4xLTM0LjV6TTM3MS40IDI1NmwtNTQtODhIMTk0LjZsLTU0IDg4IDU0IDg4SDMxNy40bDU0LTg4em02NS43IDBsNTMuNCA4N2MzLjYgNS45IDUuNSAxMi43IDUuNSAxOS42YzAgMjAuNy0xNi44IDM3LjQtMzcuNCAzNy40SDM0OC43bC01Ni4yIDkxLjVDMjg0LjggNTA0LjMgMjcwLjkgNTEyIDI1NiA1MTJzLTI4LjgtNy43LTM2LjYtMjAuNUwxNjMuMyA0MDBINTMuNEMzMi44IDQwMCAxNiAzODMuMiAxNiAzNjIuNmMwLTYuOSAxLjktMTMuNyA1LjUtMTkuNmw1My40LTg3TDIxLjUgMTY5Yy0zLjYtNS45LTUuNS0xMi43LTUuNS0xOS42QzE2IDEyOC44IDMyLjggMTEyIDUzLjQgMTEySDE2My4zbDU2LjItOTEuNUMyMjcuMiA3LjcgMjQxLjEgMCAyNTYgMHMyOC44IDcuNyAzNi42IDIwLjVMMzQ4LjcgMTEySDQ1OC42YzIwLjcgMCAzNy40IDE2LjggMzcuNCAzNy40YzAgNi45LTEuOSAxMy43LTUuNSAxOS42bC01My40IDg3em0tNTQtODhsMjEuMSAzNC41TDQyNS40IDE2OEgzODMuMXpNMjgzIDExMkwyNTYgNjhsLTI3IDQ0aDU0ek0xMjguOSAxNjhIODYuNmwyMS4xIDM0LjVMMTI4LjkgMTY4ek0xMDcuOCAzMDkuNUw4Ni42IDM0NGg0Mi4zbC0yMS4xLTM0LjV6TTIyOSA0MDBsMjcgNDQgMjctNDRIMjI5elwiXVxufTtcbnZhciBmYVBlcnNvbk1pbGl0YXJ5UmlmbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLW1pbGl0YXJ5LXJpZmxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTRiXCIsIFwiTTE2MCAzOWMwLTEzIDEwLTIzLjggMjIuOS0yNC45TDMzNC43IDEuNEMzNDQgLjcgMzUyIDggMzUyIDE3LjRWNDhjMCA4LjgtNy4yIDE2LTE2IDE2SDE4NWMtMTMuOCAwLTI1LTExLjItMjUtMjV6bTE3LjYgNTdIMzM0LjRjMSA1LjIgMS42IDEwLjUgMS42IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtNS41IC42LTEwLjggMS42LTE2em0yMjggMzY0LjNMMzUyIDM2OS43VjQ4MGMwIDEuMy0uMSAyLjUtLjIgMy44TDE3Ny41IDIzNC45YzE2LjYtNy4xIDM0LjYtMTAuOSA1My4zLTEwLjloNTAuNGMxNS45IDAgMzEuMyAyLjggNDUuOCA3LjlMNDIxLjkgNjcuN2MtNy43LTQuNC0xMC4zLTE0LjItNS45LTIxLjlzMTQuMi0xMC4zIDIxLjktNS45bDEzLjkgOCAxMy45IDhjNy43IDQuNCAxMC4zIDE0LjIgNS45IDIxLjlMNDE2IDE3My45bDEuNiAuOWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43TDM5Mi42IDI4MmMyIDIuOCAzLjkgNS44IDUuNyA4LjhsNzYuMSAxMjguOGMxMS4yIDE5IDQuOSA0My41LTE0LjEgNTQuOHMtNDMuNSA0LjktNTQuOC0xNC4xek0zMjAgNTEySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzY5LjdsLTUzLjYgOTAuNmMtMTEuMiAxOS0zNS44IDI1LjMtNTQuOCAxNC4xcy0yNS4zLTM1LjgtMTQuMS01NC44bDc2LjEtMTI4LjhjOS40LTE1LjggMjEuNy0yOS4zIDM2LTQwTDMzMS4xIDUxMGMtMy41IDEuMy03LjIgMi0xMS4xIDJ6TTI5NiAzMjBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYUNhcnRTaG9wcGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJ0LXNob3BwaW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzIyLCBcInNob3BwaW5nLWNhcnRcIl0sIFwiZjA3YVwiLCBcIk0wIDI0QzAgMTAuNyAxMC43IDAgMjQgMEg2OS41YzIyIDAgNDEuNSAxMi44IDUwLjYgMzJoNDExYzI2LjMgMCA0NS41IDI1IDM4LjYgNTAuNGwtNDEgMTUyLjNjLTguNSAzMS40LTM3IDUzLjMtNjkuNSA1My4zSDE3MC43bDUuNCAyOC41YzIuMiAxMS4zIDEyLjEgMTkuNSAyMy42IDE5LjVINDg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE5OS43Yy0zNC42IDAtNjQuMy0yNC42LTcwLjctNTguNUw3Ny40IDU0LjVjLS43LTMuOC00LTYuNS03LjktNi41SDI0QzEwLjcgNDggMCAzNy4zIDAgMjR6TTEyOCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMzM2LTQ4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG52YXIgZmFTaG9wcGluZ0NhcnQgPSBmYUNhcnRTaG9wcGluZztcbnZhciBmYVZpYWxzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpYWxzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDkzXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIODhoNDggNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWNDAwYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwVjk2QzE0LjMgOTYgMCA4MS43IDAgNjR6TTEzNiA5Nkg4OFYyNTZoNDhWOTZ6TTI4OCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg1NiA0OCA1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMlY0MDBjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBWOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00MjQgOTZIMzc2VjI1Nmg0OFY5NnpcIl1cbn07XG52YXIgZmFQbHVnQ2lyY2xlUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbHVnLWNpcmNsZS1wbHVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTVmXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44YzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDQ0OHY0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzODRIMzY4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDQ4VjMwNGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbnZhciBmYVBsYWNlT2ZXb3JzaGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYWNlLW9mLXdvcnNoaXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2N2ZcIiwgXCJNMjI0IDEwOS4zVjIxNy42TDE4My4zIDI0MmMtMTQuNSA4LjctMjMuMyAyNC4zLTIzLjMgNDEuMlY1MTJoOTZWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR2OTZoOTZWMjgzLjJjMC0xNi45LTguOC0zMi41LTIzLjMtNDEuMkw0MTYgMjE3LjZWMTA5LjNjMC04LjUtMy40LTE2LjYtOS40LTIyLjZMMzMxLjMgMTEuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjMzLjQgODYuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42ek0yNC45IDMzMC4zQzkuNSAzMzguOCAwIDM1NC45IDAgMzcyLjRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDgwVjI3My42TDI0LjkgMzMwLjN6TTU5MiA1MTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzcyLjRjMC0xNy41LTkuNS0zMy42LTI0LjktNDIuMUw1MTIgMjczLjZWNTEyaDgwelwiXVxufTtcbnZhciBmYUdyaXBWZXJ0aWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdncmlwLXZlcnRpY2FsJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJmNThlXCIsIFwiTTQwIDM1Mmw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6bTE5MiAwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MHpNNDAgMzIwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMHpNMjMyIDE5Mmw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6TTQwIDE2MGMtMjIuMSAwLTQwLTE3LjktNDAtNDBMMCA3MkMwIDQ5LjkgMTcuOSAzMiA0MCAzMmw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDB6TTIzMiAzMmw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6XCJdXG59O1xudmFyIGZhQXJyb3dUdXJuVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdHVybi11cCcsXG4gIGljb246IFszODQsIDUxMiwgW1wibGV2ZWwtdXBcIl0sIFwiZjE0OFwiLCBcIk0zMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzA2LjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMDkuMyAxNjAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwelwiXVxufTtcbnZhciBmYUxldmVsVXAgPSBmYUFycm93VHVyblVwO1xudmFyIGZhVSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTE3XSwgXCI1NVwiLCBcIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYyODhjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOFY2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjI4OGMwIDEwNi04NiAxOTItMTkyIDE5MlMwIDM5NCAwIDI4OFY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnpcIl1cbn07XG52YXIgZmFTcXVhcmVSb290VmFyaWFibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXJvb3QtdmFyaWFibGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNxdWFyZS1yb290LWFsdFwiXSwgXCJmNjk4XCIsIFwiTTI4Mi42IDc4LjFjOC0yNy4zIDMzLTQ2LjEgNjEuNC00Ni4xSDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzNDRMMjM4LjcgNDU3Yy0zLjYgMTIuMy0xNC4xIDIxLjItMjYuOCAyMi44cy0yNS4xLTQuNi0zMS41LTE1LjZMNzcuNiAyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINzcuNmMyMi44IDAgNDMuOCAxMi4xIDU1LjMgMzEuOGw2NS4yIDExMS44TDI4Mi42IDc4LjF6TTM5My40IDIzMy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDQ4MCAyNzQuN2w0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0w1MjUuMyAzMjBsNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDQ4MCAzNjUuM2wtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MzQuNyAzMjBsLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xudmFyIGZhU3F1YXJlUm9vdEFsdCA9IGZhU3F1YXJlUm9vdFZhcmlhYmxlO1xudmFyIGZhQ2xvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvY2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMzksIFwiY2xvY2stZm91clwiXSwgXCJmMDE3XCIsIFwiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTJBMjU2IDI1NiAwIDEgMSAyNTYgMHpNMjMyIDEyMFYyNTZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjJWMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0elwiXVxufTtcbnZhciBmYUNsb2NrRm91ciA9IGZhQ2xvY2s7XG52YXIgZmFCYWNrd2FyZFN0ZXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFja3dhcmQtc3RlcCcsXG4gIGljb246IFszMjAsIDUxMiwgW1wic3RlcC1iYWNrd2FyZFwiXSwgXCJmMDQ4XCIsIFwiTTI2Ny41IDQ0MC42YzkuNSA3LjkgMjIuOCA5LjcgMzQuMSA0LjRzMTguNC0xNi42IDE4LjQtMjlWOTZjMC0xMi40LTcuMi0yMy43LTE4LjQtMjlzLTI0LjUtMy42LTM0LjEgNC40bC0xOTIgMTYwTDY0IDI0MVY5NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDc4LjMgMCA5NlY0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNzFsMTEuNSA5LjYgMTkyIDE2MHpcIl1cbn07XG52YXIgZmFTdGVwQmFja3dhcmQgPSBmYUJhY2t3YXJkU3RlcDtcbnZhciBmYVBhbGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWxsZXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0ODJcIiwgXCJNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0djY0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDk2IDMyMCA1NDRoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINTc2VjM4NGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1NDQgMzIwIDk2IDMyem05NiA2NEgyODh2NjRIMTI4VjM4NHptMjI0IDBINTEydjY0SDM1MlYzODR6XCJdXG59O1xudmFyIGZhRmF1Y2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhdWNldCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTAwNVwiLCBcIk0xOTIgOTZ2MTJMOTYgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYtMTIgMzEtMy45IDEtLjEgMSAuMSAzMSAzLjkgOTYgMTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDEyVjk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyek0zMiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDEzMi4xYzIwLjIgMjkgNTMuOSA0OCA5MS45IDQ4czcxLjctMTkgOTEuOS00OEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MEgzMjBsLTIyLjYtMjIuNmMtNi02LTE0LjEtOS40LTIyLjYtOS40SDI1NlYxODAuMmwtMzItNC0zMiA0VjIyNEgxNzMuM2MtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRMMTI4IDI1NkgzMnpcIl1cbn07XG52YXIgZmFCYXNlYmFsbEJhdEJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFzZWJhbGwtYmF0LWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0MzJcIiwgXCJNNDI0IDBjLTEyLjQgMC0yNC4yIDQuOS0zMyAxMy43TDIzMy41IDE3MS4yYy0xMC41IDEwLjUtMTkuOCAyMi4xLTI3LjcgMzQuNkwxMzIuNyAzMjEuNmMtNy4zIDExLjUtMTUuOCAyMi4yLTI1LjUgMzEuOUw2OS45IDM5MC43bDUxLjMgNTEuMyAzNy4zLTM3LjNjOS42LTkuNiAyMC4zLTE4LjIgMzEuOS0yNS41bDExNS44LTczLjFjMTIuNS03LjkgMjQuMS0xNy4yIDM0LjYtMjcuN0w0OTguMyAxMjFjOC43LTguNyAxMy43LTIwLjYgMTMuNy0zM3MtNC45LTI0LjItMTMuNy0zM0w0NTcgMTMuN0M0NDguMiA0LjkgNDM2LjQgMCA0MjQgMHptODggNDMyYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHpNMTUgMzk5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDkgMzk5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHpcIl1cbn07XG52YXIgZmFTID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3MnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMTVdLCBcIjUzXCIsIFwiTTk5LjEgMTA1LjRDNzkgMTE0IDY4LjIgMTI3LjIgNjUuMiAxNDQuOGMtMi40IDE0LjEtLjcgMjMuMiAyIDI5LjRjMi44IDYuMyA3LjkgMTIuNCAxNi43IDE4LjZjMTkuMiAxMy40IDQ4LjMgMjIuMSA4NC45IDMyLjVjMSAuMyAxLjkgLjYgMi45IC44YzMyLjcgOS4zIDcyIDIwLjYgMTAwLjkgNDAuN2MxNS43IDEwLjkgMjkuOSAyNS41IDM4LjYgNDUuMWM4LjggMTkuOCAxMC44IDQyIDYuNiA2Ni4zYy03LjMgNDIuNS0zNS4zIDcxLjctNzEuOCA4Ny4zYy0zNS40IDE1LjItNzkuMSAxNy45LTEyMy43IDEwLjlsLS4yIDAgMCAwYy0yNC0zLjktNjIuNy0xNy4xLTg3LjYtMjUuNmMtNC44LTEuNy05LjItMy4xLTEyLjgtNC4zQzUuMSA0NDAuOC0zLjkgNDIyLjcgMS42IDQwNS45czIzLjctMjUuOCA0MC41LTIwLjNjNC45IDEuNiAxMC4yIDMuNCAxNS45IDUuNGMyNS40IDguNiA1Ni40IDE5LjIgNzQuNCAyMi4xYzM2LjggNS43IDY3LjUgMi41IDg4LjUtNi41YzIwLjEtOC42IDMwLjgtMjEuOCAzMy45LTM5LjRjMi40LTE0LjEgLjctMjMuMi0yLTI5LjRjLTIuOC02LjMtNy45LTEyLjQtMTYuNy0xOC42Yy0xOS4yLTEzLjQtNDguMy0yMi4xLTg0LjktMzIuNWMtMS0uMy0xLjktLjYtMi45LS44Yy0zMi43LTkuMy03Mi0yMC42LTEwMC45LTQwLjdjLTE1LjctMTAuOS0yOS45LTI1LjUtMzguNi00NS4xYy04LjgtMTkuOC0xMC44LTQyLTYuNi02Ni4zbDMxLjUgNS41TDIuMSAxMzMuOUM5LjQgOTEuNCAzNy40IDYyLjIgNzMuOSA0Ni42YzM1LjQtMTUuMiA3OS4xLTE3LjkgMTIzLjctMTAuOWMxMyAyIDUyLjQgOS42IDY2LjYgMTMuNGMxNy4xIDQuNSAyNy4yIDIyLjEgMjIuNyAzOS4ycy0yMi4xIDI3LjItMzkuMiAyMi43Yy0xMS4yLTMtNDguMS0xMC4yLTYwLjEtMTJsNC45LTMxLjUtNC45IDMxLjVjLTM2LjktNS44LTY3LjUtMi41LTg4LjYgNi41elwiXVxufTtcbnZhciBmYVRpbWVsaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RpbWVsaW5lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMjljXCIsIFwiTTEyOCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTMyIDk3LjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuM2MwLTQ0LjItMzUuOC04MC04MC04MFM0OCA1MS44IDQ4IDk2YzAgMzIuOCAxOS43IDYxIDQ4IDczLjNWMjI0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDI4OHY1NC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM1YyODhINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDU0NFYxNjkuM2MyOC4zLTEyLjMgNDgtNDAuNSA0OC03My4zYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNWMjI0SDE2MFYxNjkuM3pNNDg4IDk2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTMyMCAzOTJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUtleWJvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tleWJvYXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbOTAwMF0sIFwiZjExY1wiLCBcIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOFYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NEg2NHptMTYgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTYgODBoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwLTE3NmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNDR6bTE2IDgwaDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnpNMTYwIDMzNmMwLTguOCA3LjItMTYgMTYtMTZINDAwYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2ek0yNzIgMTI4aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTQ0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjU2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTM2OCAxMjhoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlYxNDRjMC04LjggNy4yLTE2IDE2LTE2ek0zNTIgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNNDY0IDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZ6TTQ0OCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINDY0Yy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xNiA4MGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhQ2FyZXREb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcmV0LWRvd24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImYwZDdcIiwgXCJNMTM3LjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEwzMiAxOTJjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDEyOCAxMjh6XCJdXG59O1xudmFyIGZhSG91c2VDaGltbmV5TWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaGltbmV5LW1lZGljYWwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImNsaW5pYy1tZWRpY2FsXCJdLCBcImY3ZjJcIiwgXCJNNTc1LjggMjU1LjVjMCAxOC0xNSAzMi4xLTMyIDMyLjFoLTMybC43IDE2MC4yYy4yIDM1LjUtMjguNSA2NC4zLTY0IDY0LjNIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w0MTYgMTAwLjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTg1bDUyLjggNDYuNGM4IDcgMTIgMTUgMTEgMjR6TTI3MiAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY0OEgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzMjBoNDhjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyelwiXVxufTtcbnZhciBmYUNsaW5pY01lZGljYWwgPSBmYUhvdXNlQ2hpbW5leU1lZGljYWw7XG52YXIgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVtcGVyYXR1cmUtdGhyZWUtcXVhcnRlcnMnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInRlbXBlcmF0dXJlLTNcIiwgXCJ0aGVybW9tZXRlci0zXCIsIFwidGhlcm1vbWV0ZXItdGhyZWUtcXVhcnRlcnNcIl0sIFwiZjJjOFwiLCBcIk0xNjAgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI3Ni41YzAgMTcuMy03LjEgMzEuOS0xNS4zIDQyLjVDODYuMiAzMzIuNiA4MCAzNDkuNSA4MCAzNjhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTE4LjUtNi4yLTM1LjQtMTYuNy00OC45Yy04LjItMTAuNi0xNS4zLTI1LjItMTUuMy00Mi41VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDggMTEyQzQ4IDUwLjIgOTguMSAwIDE2MCAwczExMiA1MC4xIDExMiAxMTJWMjc2LjVjMCAuMSAuMSAuMyAuMiAuNmMuMiAuNiAuOCAxLjYgMS43IDIuOGMxOC45IDI0LjQgMzAuMSA1NSAzMC4xIDg4LjFjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0yMDggMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YxNDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlYzMjIuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmUzID0gZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM7XG52YXIgZmFUaGVybW9tZXRlcjMgPSBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycztcbnZhciBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycyA9IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzO1xudmFyIGZhTW9iaWxlU2NyZWVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vYmlsZS1zY3JlZW4nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcIm1vYmlsZS1hbmRyb2lkLWFsdFwiXSwgXCJmM2NmXCIsIFwiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBIMzA0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTE0NCA0NDhjMCA4LjggNy4yIDE2IDE2IDE2aDY0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2ek0zMDQgNjRIODBWMzg0SDMwNFY2NHpcIl1cbn07XG52YXIgZmFNb2JpbGVBbmRyb2lkQWx0ID0gZmFNb2JpbGVTY3JlZW47XG52YXIgZmFQbGFuZVVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW5lLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMjJkXCIsIFwiTTE5MiA5My43QzE5MiA1OS41IDIyMSAwIDI1NiAwYzM2IDAgNjQgNTkuNSA2NCA5My43bDAgNjYuM0w0OTcuOCAyNzguNWM4LjkgNS45IDE0LjIgMTUuOSAxNC4yIDI2LjZ2NTYuN2MwIDEwLjktMTAuNyAxOC42LTIxLjEgMTUuMkwzMjAgMzIwdjgwbDU3LjYgNDMuMmM0IDMgNi40IDcuOCA2LjQgMTIuOHY0MmMwIDcuOC02LjMgMTQtMTQgMTRjLTEuMyAwLTIuNi0uMi0zLjktLjVMMjU2IDQ4MCAxNDUuOSA1MTEuNWMtMS4zIC40LTIuNiAuNS0zLjkgLjVjLTcuOCAwLTE0LTYuMy0xNC0xNFY0NTZjMC01IDIuNC05LjggNi40LTEyLjhMMTkyIDQwMFYzMjBMMjEuMSAzNzdDMTAuNyAzODAuNCAwIDM3Mi43IDAgMzYxLjhWMzA1LjFjMC0xMC43IDUuMy0yMC43IDE0LjItMjYuNkwxOTIgMTYwVjkzLjd6XCJdXG59O1xudmFyIGZhUGlnZ3lCYW5rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BpZ2d5LWJhbmsnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0ZDNcIiwgXCJNNDAwIDk2bDAgLjdjLTUuMy0uNC0xMC42LS43LTE2LS43SDI1NmMtMTYuNSAwLTMyLjUgMi4xLTQ3LjggNmMtLjEtMi0uMi00LS4yLTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptLTE2IDMyYzMuNSAwIDcgLjEgMTAuNCAuM2M0LjIgLjMgOC40IC43IDEyLjYgMS4zQzQyNC42IDEwOS4xIDQ1MC44IDk2IDQ4MCA5NmgxMS41YzEwLjQgMCAxOCA5LjggMTUuNSAxOS45bC0xMy44IDU1LjJjMTUuOCAxNC44IDI4LjcgMzIuOCAzNy41IDUyLjlINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDUxMmMtOS4xIDEyLjEtMTkuOSAyMi45LTMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDQ4SDI1NnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQxNmMtMzQuOS0yNi4yLTU4LjctNjYuMy02My4yLTExMkg2OGMtMzcuNiAwLTY4LTMwLjQtNjgtNjhzMzAuNC02OCA2OC02OGg0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDY4Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMEg5OS4yYzEyLjEtNTkuOCA1Ny43LTEwNy41IDExNi4zLTEyMi44YzEyLjktMy40IDI2LjUtNS4yIDQwLjUtNS4ySDM4NHptNjQgMTM2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6XCJdXG59O1xudmFyIGZhQmF0dGVyeUhhbGYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmF0dGVyeS1oYWxmJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJiYXR0ZXJ5LTNcIl0sIFwiZjI0MlwiLCBcIk00NjQgMTYwYzguOCAwIDE2IDcuMiAxNiAxNlYzMzZjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTc2YzAtOC44IDcuMi0xNiAxNi0xNkg0NjR6TTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NlYzMzZjMCA0NC4yIDM1LjggODAgODAgODBINDY0YzQ0LjIgMCA4MC0zNS44IDgwLTgwVjMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJWMTc2YzAtNDQuMi0zNS44LTgwLTgwLTgwSDgwem0yMDggOTZIOTZWMzIwSDI4OFYxOTJ6XCJdXG59O1xudmFyIGZhQmF0dGVyeTMgPSBmYUJhdHRlcnlIYWxmO1xudmFyIGZhTW91bnRhaW5DaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW50YWluLWNpdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MmVcIiwgXCJNMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djkyLjFsNzEuNCAxMTguNGMyLjUtMS42IDUuNC0yLjUgOC42LTIuNWgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2aC0zLjVsNzMuOCAxMjIuNGMxMi40IDIwLjYgMTIuOSA0Ni4zIDEuMiA2Ny4zYy0uNCAuOC0uOSAxLjYtMS40IDIuM0g1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjQwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDU2OFYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NzJINDgwVjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMzNnptMzIgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlY4MGMwLTguOCA3LjItMTYgMTYtMTZ6TTM1MiAxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZWMTc2em0xNjAgOTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINTI4Yy04LjggMC0xNi03LjItMTYtMTZWMjcyem0xNiA4MGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDUyOGMtOC44IDAtMTYtNy4yLTE2LTE2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCAxODguOUwyODMuOCAyODhIMjIzbC00OCA2NC0yNC42LTQxLjJMMjI0IDE4OC45em0yOS40LTQ0LjJDMjQ3LjEgMTM0LjMgMjM2IDEyOCAyMjQgMTI4cy0yMy4xIDYuMy0yOS40IDE2LjdMNS4xIDQ1OC45Yy02LjUgMTAuOC02LjcgMjQuMy0uNyAzNS4zUzIyIDUxMiAzNC41IDUxMkg0MTMuNWMxMi41IDAgMjQtNi44IDMwLjEtMTcuOHM1LjgtMjQuNS0uNy0zNS4zTDI1My40IDE0NC43elwiXVxufTtcbnZhciBmYUNvaW5zID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvaW5zJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNTFlXCIsIFwiTTUxMiA4MGMwIDE4LTE0LjMgMzQuNi0zOC40IDQ4Yy0yOS4xIDE2LjEtNzIuNSAyNy41LTEyMi4zIDMwLjljLTMuNy0xLjgtNy40LTMuNS0xMS4zLTVDMzAwLjYgMTM3LjQgMjQ4LjIgMTI4IDE5MiAxMjhjLTguMyAwLTE2LjQgLjItMjQuNSAuNmwtMS4xLS42QzE0Mi4zIDExNC42IDEyOCA5OCAxMjggODBjMC00NC4yIDg2LTgwIDE5Mi04MFM1MTIgMzUuOCA1MTIgODB6TTE2MC43IDE2MS4xYzEwLjItLjcgMjAuNy0xLjEgMzEuMy0xLjFjNjIuMiAwIDExNy40IDEyLjMgMTUyLjUgMzEuNEMzNjkuMyAyMDQuOSAzODQgMjIxLjcgMzg0IDI0MGMwIDQtLjcgNy45LTIuMSAxMS43Yy00LjYgMTMuMi0xNyAyNS4zLTM1IDM1LjVjMCAwIDAgMCAwIDBjLS4xIC4xLS4zIC4xLS40IC4ybDAgMCAwIDBjLS4zIC4yLS42IC4zLS45IC41Yy0zNSAxOS40LTkwLjggMzItMTUzLjYgMzJjLTU5LjYgMC0xMTIuOS0xMS4zLTE0OC4yLTI5LjFjLTEuOS0uOS0zLjctMS45LTUuNS0yLjlDMTQuMyAyNzQuNiAwIDI1OCAwIDI0MGMwLTM0LjggNTMuNC02NC41IDEyOC03NS40YzEwLjUtMS41IDIxLjQtMi43IDMyLjctMy41ek00MTYgMjQwYzAtMjEuOS0xMC42LTM5LjktMjQuMS01My40YzI4LjMtNC40IDU0LjItMTEuNCA3Ni4yLTIwLjVjMTYuMy02LjggMzEuNS0xNS4yIDQzLjktMjUuNVYxNzZjMCAxOS4zLTE2LjUgMzcuMS00My44IDUwLjljLTE0LjYgNy40LTMyLjQgMTMuNy01Mi40IDE4LjVjLjEtMS44IC4yLTMuNSAuMi01LjN6bS0zMiA5NmMwIDE4LTE0LjMgMzQuNi0zOC40IDQ4Yy0xLjggMS0zLjYgMS45LTUuNSAyLjlDMzA0LjkgNDA0LjcgMjUxLjYgNDE2IDE5MiA0MTZjLTYyLjggMC0xMTguNi0xMi42LTE1My42LTMyQzE0LjMgMzcwLjYgMCAzNTQgMCAzMzZWMzAwLjZjMTIuNSAxMC4zIDI3LjYgMTguNyA0My45IDI1LjVDODMuNCAzNDIuNiAxMzUuOCAzNTIgMTkyIDM1MnMxMDguNi05LjQgMTQ4LjEtMjUuOWM3LjgtMy4yIDE1LjMtNi45IDIyLjQtMTAuOWM2LjEtMy40IDExLjgtNy4yIDE3LjItMTEuMmMxLjUtMS4xIDIuOS0yLjMgNC4zLTMuNFYzMDR2NS43VjMzNnptMzIgMFYzMDQgMjc4LjFjMTktNC4yIDM2LjUtOS41IDUyLjEtMTZjMTYuMy02LjggMzEuNS0xNS4yIDQzLjktMjUuNVYyNzJjMCAxMC41LTUgMjEtMTQuOSAzMC45Yy0xNi4zIDE2LjMtNDUgMjkuNy04MS4zIDM4LjRjLjEtMS43IC4yLTMuNSAuMi01LjN6TTE5MiA0NDhjNTYuMiAwIDEwOC42LTkuNCAxNDguMS0yNS45YzE2LjMtNi44IDMxLjUtMTUuMiA0My45LTI1LjVWNDMyYzAgNDQuMi04NiA4MC0xOTIgODBTMCA0NzYuMiAwIDQzMlYzOTYuNmMxMi41IDEwLjMgMjcuNiAxOC43IDQzLjkgMjUuNUM4My40IDQzOC42IDEzNS44IDQ0OCAxOTIgNDQ4elwiXVxufTtcbnZhciBmYUtoYW5kYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdraGFuZGEnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5NzcyXSwgXCJmNjZkXCIsIFwiTTI0NS44IDMuN2M1LjktNC45IDE0LjYtNC45IDIwLjUgMGw0OCA0MGM1LjkgNC45IDcuNSAxMy4yIDMuOCAxOS45bDAgMCAwIDAgMCAwIDAgMC0uMSAuMS0uMyAuNmMtLjMgLjUtLjcgMS4zLTEuMiAyLjNjLTEgMi0yLjYgNS00LjQgOC42Yy0uNSAuOS0uOSAxLjktMS40IDIuOUMzNDQuOSA5Ny40IDM2OCAxMzQgMzY4IDE3NnMtMjMuMSA3OC42LTU3LjMgOTcuOGMuNSAxIDEgMiAxLjQgMi45YzEuOCAzLjcgMy4zIDYuNiA0LjQgOC42Yy41IDEgLjkgMS44IDEuMiAyLjNsLjMgLjYgLjEgLjEgMCAwIDAgMGMzLjYgNi43IDIgMTUtMy44IDE5LjlMMjcyIDM0My41djE5LjhsMzUuNi0yNC41IDQxLjEtMjguMmM0Mi44LTI5LjQgNjguNC03OCA2OC40LTEzMGMwLTMxLjEtOS4yLTYxLjYtMjYuNS04Ny41bC0yLjgtNC4yYy00LTYtMy41LTE0IDEuMy0xOS41czEyLjctNyAxOS4yLTMuN0w0MDEuMSA4MGM3LjItMTQuMyA3LjItMTQuMyA3LjItMTQuM2wwIDAgMCAwIC4xIDAgLjMgLjIgMSAuNWMuOCAuNCAyIDEuMSAzLjUgMS45YzIuOSAxLjcgNyA0LjEgMTEuOCA3LjNjOS42IDYuNCAyMi41IDE2LjEgMzUuNCAyOWMyNS43IDI1LjcgNTIuNyA2NS42IDUyLjcgMTE5LjNjMCA1My4xLTI2LjQgMTAwLjUtNTEuMiAxMzMuNmMtMTIuNiAxNi43LTI1LjEgMzAuMy0zNC41IDM5LjdjLTQuNyA0LjctOC43IDguNC0xMS41IDEwLjljLTEuNCAxLjMtMi41IDIuMi0zLjMgMi45bC0uOSAuOC0uMyAuMi0uMSAuMSAwIDAgMCAwczAgMC0xMC4yLTEyLjNsMTAuMiAxMi4zYy01LjEgNC4zLTEyLjQgNC45LTE4LjIgMS42bC03NS42LTQzLTMyLjcgMjIuNSA0NS41IDMxLjNjMS44LS40IDMuNy0uNyA1LjctLjdjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTEyLjIgMC0yMi4zLTkuMS0yMy44LTIxTDI3MiA0MjMuNHYyOC45YzkuNiA1LjUgMTYgMTUuOSAxNiAyNy43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMTEuOCA2LjQtMjIuMiAxNi0yNy43VjQyNC4xbC00MC4zIDI3LjdDMTk3LjggNDYzLjMgMTg3LjkgNDcyIDE3NiA0NzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMi4yIDAgNC40IC4zIDYuNSAuOWw0NS44LTMxLjUtMzIuNy0yMi41LTc1LjYgNDNjLTUuOCAzLjMtMTMgMi43LTE4LjItMS42TDExMiA0MDBjLTEwLjIgMTIuMy0xMC4yIDEyLjMtMTAuMyAxMi4zbDAgMCAwIDAtLjEtLjEtLjMtLjItLjktLjhjLS44LS43LTEuOS0xLjctMy4zLTIuOWMtMi44LTIuNS02LjctNi4yLTExLjUtMTAuOWMtOS40LTkuNC0yMS45LTIzLTM0LjUtMzkuN0MyNi40IDMyNC41IDAgMjc3LjEgMCAyMjRjMC01My43IDI2LjktOTMuNiA1Mi43LTExOS4zYzEyLjktMTIuOSAyNS44LTIyLjYgMzUuNC0yOUM5MyA3Mi41IDk3IDcwIDk5LjkgNjguNGMxLjUtLjggMi42LTEuNSAzLjUtMS45bDEtLjUgLjMtLjIgLjEgMCAwIDAgMCAwczAgMCA3LjIgMTQuM2wtNy4yLTE0LjNjNi41LTMuMiAxNC4zLTEuNyAxOS4yIDMuN3M1LjMgMTMuNCAxLjMgMTkuNWwtMi44IDQuMkMxMDUuMiAxMTkgOTYgMTQ5LjUgOTYgMTgwLjZjMCA1MS45IDI1LjYgMTAwLjYgNjguNCAxMzBsNDEuMSAyOC4yTDI0MCAzNjIuNlYzNDMuNWwtNDIuMi0zNS4yYy01LjktNC45LTcuNS0xMy4yLTMuOC0xOS45bDAgMCAwIDAgMCAwIC4xLS4xIC4zLS42Yy4zLS41IC43LTEuMyAxLjItMi4zYzEtMiAyLjYtNSA0LjQtOC42Yy41LS45IC45LTEuOSAxLjQtMi45QzE2Ny4xIDI1NC42IDE0NCAyMTggMTQ0IDE3NnMyMy4xLTc4LjYgNTcuMy05Ny44Yy0uNS0xLTEtMi0xLjQtMi45Yy0xLjgtMy43LTMuMy02LjYtNC40LTguNmMtLjUtMS0uOS0xLjgtMS4yLTIuM2wtLjMtLjYtLjEtLjEgMCAwIDAgMCAwIDBjLTMuNi02LjctMi0xNSAzLjgtMTkuOWw0OC00MHpNMjIwLjIgMTIyLjljLTE3IDExLjUtMjguMiAzMS0yOC4yIDUzLjFzMTEuMiA0MS42IDI4LjIgNTMuMUMyMjcgMjEwLjIgMjMyIDE5MC45IDIzMiAxNzZzLTUtMzQuMi0xMS44LTUzLjF6bTcxLjUgMTA2LjJjMTctMTEuNSAyOC4yLTMxIDI4LjItNTMuMXMtMTEuMi00MS42LTI4LjItNTMuMUMyODUgMTQxLjggMjgwIDE2MS4xIDI4MCAxNzZzNSAzNC4yIDExLjggNTMuMXpcIl1cbn07XG52YXIgZmFTbGlkZXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NsaWRlcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNsaWRlcnMtaFwiXSwgXCJmMWRlXCIsIFwiTTAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDU0LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNDYuNyAwYy0xMi4zLTI4LjMtNDAuNS00OC03My4zLTQ4cy02MSAxOS43LTczLjMgNDhMMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMTI4IDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMzIwIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMi04MGMtMzIuOCAwLTYxIDE5LjctNzMuMyA0OEwzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjQ2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OGw1NC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTU0LjcgMGMtMTIuMy0yOC4zLTQwLjUtNDgtNzMuMy00OHpNMTkyIDEyOGEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTczLjMtNjRDMjUzIDM1LjcgMjI0LjggMTYgMTkyIDE2cy02MSAxOS43LTczLjMgNDhMMzIgNjRDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMybDg2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgMTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDI2NS4zIDY0elwiXVxufTtcbnZhciBmYVNsaWRlcnNIID0gZmFTbGlkZXJzO1xudmFyIGZhRm9sZGVyVHJlZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb2xkZXItdHJlZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjgwMlwiLCBcIk02NCAzMkM2NCAxNC4zIDQ5LjcgMCAzMiAwUzAgMTQuMyAwIDMydjk2VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEgyNTZWMzg0SDY0VjE2MEgyNTZWOTZINjRWMzJ6TTI4OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ0NS4zYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNEw0MDkuNCA5LjRjLTYtNi0xNC4xLTkuNC0yMi42LTkuNEgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjE5MnptMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkg0NDUuM2MtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTEzLjMtMTMuM2MtNi02LTE0LjEtOS40LTIyLjYtOS40SDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwelwiXVxufTtcbnZhciBmYU5ldHdvcmtXaXJlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICduZXR3b3JrLXdpcmVkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNmZmXCIsIFwiTTI1NiA2NEgzODR2NjRIMjU2VjY0ek0yNDAgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2OTZjMCAyNi41IDIxLjUgNDggNDggNDhoNDh2MzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZ2MzJIODBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDI0MGMyNi41IDAgNDgtMjEuNSA0OC00OFYzNjhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMTkyVjI4OEg0NDh2MzJINDAwYy0yNi41IDAtNDggMjEuNS00OCA0OHY5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OEg1NjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzY4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDUxMlYyODhoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzUyVjE5Mmg0OGMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEgyNDB6TTk2IDQ0OFYzODRIMjI0djY0SDk2em0zMjAtNjRINTQ0djY0SDQxNlYzODR6XCJdXG59O1xudmFyIGZhTWFwUGluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcC1waW4nLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjgyMDVdLCBcImYyNzZcIiwgXCJNMTYgMTQ0YTE0NCAxNDQgMCAxIDEgMjg4IDBBMTQ0IDE0NCAwIDEgMSAxNiAxNDR6TTE2MCA4MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtNTMgMC05NiA0My05NiA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0ek0xMjggNDgwVjMxNy4xYzEwLjQgMS45IDIxLjEgMi45IDMyIDIuOXMyMS42LTEgMzItMi45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpcIl1cbn07XG52YXIgZmFIYW1zYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW1zYScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY2NVwiLCBcIk0zNC42IDI4OEg4MGM4LjggMCAxNi03LjIgMTYtMTZWNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyMDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyMDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyNzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ1LjRjMTkuMSAwIDM0LjYgMTUuNSAzNC42IDM0LjZjMCA4LjYtMy4yIDE2LjktOSAyMy4zTDQxNi42IDQ0MWMtNDEuMSA0NS4yLTk5LjQgNzEtMTYwLjYgNzFzLTExOS40LTI1LjgtMTYwLjYtNzFMOSAzNDUuOWMtNS44LTYuNC05LTE0LjctOS0yMy4zQzAgMzAzLjUgMTUuNSAyODggMzQuNiAyODh6TTI1NiAyODhjLTM4LjQgMC03Ni44IDM1LjgtOTAuNiA1MC4yYy0zLjYgMy43LTUuNCA4LjctNS40IDEzLjhzMS44IDEwLjEgNS40IDEzLjhDMTc5LjIgMzgwLjIgMjE3LjYgNDE2IDI1NiA0MTZzNzYuOC0zNS44IDkwLjYtNTAuMmMzLjYtMy43IDUuNC04LjcgNS40LTEzLjhzLTEuOC0xMC4xLTUuNC0xMy44QzMzMi44IDMyMy44IDI5NC40IDI4OCAyNTYgMjg4em0wIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFDZW50U2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjZW50LXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUzZjVcIiwgXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjYuN2MzMC45IDUuMiA1OS4yIDE3LjcgODMuMiAzNS44YzE0LjEgMTAuNiAxNyAzMC43IDYuNCA0NC44cy0zMC43IDE3LTQ0LjggNi40QzI3OS40IDEzNy41IDI1Mi45IDEyOCAyMjQgMTI4Yy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOHM1Ny4zIDEyOCAxMjggMTI4YzI4LjkgMCA1NS40LTkuNSA3Ni44LTI1LjZjMTQuMS0xMC42IDM0LjItNy44IDQ0LjggNi40czcuOCAzNC4yLTYuNCA0NC44Yy0yNCAxOC01Mi40IDMwLjYtODMuMiAzNS44VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDUuM0MxMDEuMiA0MzAuMSAzMiAzNTEuMSAzMiAyNTZzNjkuMi0xNzQuMSAxNjAtMTg5LjNWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhRmxhc2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmxhc2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwYzNcIiwgXCJNMjg4IDBIMTYwIDEyOEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJzMTQuMyAzMiAzMiAzMlYxOTYuOGMwIDExLjgtMy4zIDIzLjUtOS41IDMzLjVMMTAuMyA0MDYuMkMzLjYgNDE3LjIgMCA0MjkuNyAwIDQ0Mi42QzAgNDgwLjkgMzEuMSA1MTIgNjkuNCA1MTJIMzc4LjZjMzguMyAwIDY5LjQtMzEuMSA2OS40LTY5LjRjMC0xMi44LTMuNi0yNS40LTEwLjMtMzYuNEwzMjkuNSAyMzAuNGMtNi4yLTEwLjEtOS41LTIxLjctOS41LTMzLjVWNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjg4ek0xOTIgMTk2LjhWNjRoNjRWMTk2LjhjMCAyMy43IDYuNiA0Ni45IDE5IDY3LjFMMzA5LjUgMzIwaC0xNzFMMTczIDI2My45YzEyLjQtMjAuMiAxOS00My40IDE5LTY3LjF6XCJdXG59O1xudmFyIGZhUGVyc29uUHJlZ25hbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXByZWduYW50JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMzFlXCIsIFwiTTE5MiAwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMTIwIDM4M2MtMTMuOC0zLjYtMjQtMTYuMS0yNC0zMVYyOTYuOWwtNC42IDcuNmMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTUtMjQuOSA0MC4zLTQxLjUgNjguNy00NS42YzQuMS0uNiA4LjItMSAxMi41LTFoMS4xIDEyLjVIMTkyYzEuNCAwIDIuOCAuMSA0LjEgLjNjMzUuNyAyLjkgNjUuNCAyOS4zIDcyLjEgNjVsNi4xIDMyLjVjNDQuMyA4LjYgNzcuNyA0Ny41IDc3LjcgOTQuM3YzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMDQgMjY0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NGgtOC04djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4M3pcIl1cbn07XG52YXIgZmFXYW5kU3BhcmtsZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2FuZC1zcGFya2xlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjcyYlwiLCBcIk00NjQgNi4xYzkuNS04LjUgMjQtOC4xIDMzIC45bDggOGM5IDkgOS40IDIzLjUgLjkgMzNsLTg1LjggOTUuOWMtMi42IDIuOS00LjEgNi43LTQuMSAxMC43VjE3NmMwIDguOC03LjIgMTYtMTYgMTZIMzg0LjJjLTQuNiAwLTguOSAxLjktMTEuOSA1LjNMMTAwLjcgNTAwLjlDOTQuMyA1MDggODUuMyA1MTIgNzUuOCA1MTJjLTguOCAwLTE3LjMtMy41LTIzLjUtOS44TDkuNyA0NTkuN0MzLjUgNDUzLjQgMCA0NDUgMCA0MzYuMmMwLTkuNSA0LTE4LjUgMTEuMS0yNC44bDExMS42LTk5LjhjMy40LTMgNS4zLTcuNCA1LjMtMTEuOVYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDM0LjZjMy45IDAgNy43LTEuNSAxMC43LTQuMUw0NjQgNi4xek00MzIgMjg4YzMuNiAwIDYuNyAyLjQgNy43IDUuOGwxNC44IDUxLjcgNTEuNyAxNC44YzMuNCAxIDUuOCA0LjEgNS44IDcuN3MtMi40IDYuNy01LjggNy43bC01MS43IDE0LjgtMTQuOCA1MS43Yy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOGwtMTQuOC01MS43LTUxLjctMTQuOGMtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjggMTQuOC01MS43YzEtMy40IDQuMS01LjggNy43LTUuOHpNODcuNyA2OS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOEw4Ny43IDIxOC4yYy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOEw1Ny41IDE2Ni41IDUuOCAxNTEuN2MtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjhMNzIuMyA2OS44YzEtMy40IDQuMS01LjggNy43LTUuOHM2LjcgMi40IDcuNyA1Ljh6TTIwOCAwYzMuNyAwIDYuOSAyLjUgNy44IDYuMWw2LjggMjcuMyAyNy4zIDYuOGMzLjYgLjkgNi4xIDQuMSA2LjEgNy44cy0yLjUgNi45LTYuMSA3LjhsLTI3LjMgNi44LTYuOCAyNy4zYy0uOSAzLjYtNC4xIDYuMS03LjggNi4xcy02LjktMi41LTcuOC02LjFsLTYuOC0yNy4zLTI3LjMtNi44Yy0zLjYtLjktNi4xLTQuMS02LjEtNy44czIuNS02LjkgNi4xLTcuOGwyNy4zLTYuOCA2LjgtMjcuM2MuOS0zLjYgNC4xLTYuMSA3LjgtNi4xelwiXVxufTtcbnZhciBmYUVsbGlwc2lzVmVydGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWxsaXBzaXMtdmVydGljYWwnLFxuICBpY29uOiBbMTI4LCA1MTIsIFtcImVsbGlwc2lzLXZcIl0sIFwiZjE0MlwiLCBcIk02NCAzNjBhNTYgNTYgMCAxIDAgMCAxMTIgNTYgNTYgMCAxIDAgMC0xMTJ6bTAtMTYwYTU2IDU2IDAgMSAwIDAgMTEyIDU2IDU2IDAgMSAwIDAtMTEyek0xMjAgOTZBNTYgNTYgMCAxIDAgOCA5NmE1NiA1NiAwIDEgMCAxMTIgMHpcIl1cbn07XG52YXIgZmFFbGxpcHNpc1YgPSBmYUVsbGlwc2lzVmVydGljYWw7XG52YXIgZmFUaWNrZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGlja2V0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTAzXSwgXCJmMTQ1XCIsIFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4djY0YzAgOC44IDcuNCAxNS43IDE1LjcgMTguNkMzNC41IDIxNy4xIDQ4IDIzNSA0OCAyNTZzLTEzLjUgMzguOS0zMi4zIDQ1LjRDNy40IDMwNC4zIDAgMzExLjIgMCAzMjB2NjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjMyMGMwLTguOC03LjQtMTUuNy0xNS43LTE4LjZDNTQxLjUgMjk0LjkgNTI4IDI3NyA1MjggMjU2czEzLjUtMzguOSAzMi4zLTQ1LjRjOC4zLTIuOSAxNS43LTkuOCAxNS43LTE4LjZWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCAxMTJsMCAxNjBjMCA4LjggNy4yIDE2IDE2IDE2SDQzMmM4LjggMCAxNi03LjIgMTYtMTZWMTc2YzAtOC44LTcuMi0xNi0xNi0xNkgxNDRjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ0OGMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjB6XCJdXG59O1xudmFyIGZhUG93ZXJPZmYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncG93ZXItb2ZmJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTIxMV0sIFwiZjAxMVwiLCBcIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzJ6TTE0My41IDEyMC42YzEzLjYtMTEuMyAxNS40LTMxLjUgNC4xLTQ1LjFzLTMxLjUtMTUuNC00NS4xLTQuMUM0OS43IDExNS40IDE2IDE4MS44IDE2IDI1NmMwIDEzMi41IDEwNy41IDI0MCAyNDAgMjQwczI0MC0xMDcuNSAyNDAtMjQwYzAtNzQuMi0zMy44LTE0MC42LTg2LjYtMTg0LjZjLTEzLjYtMTEuMy0zMy44LTkuNC00NS4xIDQuMXMtOS40IDMzLjggNC4xIDQ1LjFjMzguOSAzMi4zIDYzLjUgODEgNjMuNSAxMzUuNGMwIDk3LjItNzguOCAxNzYtMTc2IDE3NnMtMTc2LTc4LjgtMTc2LTE3NmMwLTU0LjQgMjQuNy0xMDMuMSA2My41LTEzNS40elwiXVxufTtcbnZhciBmYVJpZ2h0TG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyaWdodC1sb25nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsb25nLWFycm93LWFsdC1yaWdodFwiXSwgXCJmMzBiXCIsIFwiTTMzNC41IDQxNGM4LjggMy44IDE5IDIgMjYtNC42bDE0NC0xMzZjNC44LTQuNSA3LjUtMTAuOCA3LjUtMTcuNHMtMi43LTEyLjktNy41LTE3LjRsLTE0NC0xMzZjLTctNi42LTE3LjItOC40LTI2LTQuNnMtMTQuNSAxMi41LTE0LjUgMjJsMCA3MkwzMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjg4IDAgMCA3MmMwIDkuNiA1LjcgMTguMiAxNC41IDIyelwiXVxufTtcbnZhciBmYUxvbmdBcnJvd0FsdFJpZ2h0ID0gZmFSaWdodExvbmc7XG52YXIgZmFGbGFnVXNhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZsYWctdXNhJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmNzRkXCIsIFwiTTMyIDBDNDkuNyAwIDY0IDE0LjMgNjQgMzJWNDhsNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41YzQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xdjM2LjFsLTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtMjAuMy05LTQxLjgtMTQuNy02My42LTE2Ljl2MzIuMmMxNy40IDIuMSAzNC40IDYuNyA1MC42IDEzLjlsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNEw0NDggMTM2LjN2NjJsLTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtNDAuMi0xNy45LTg1LTIyLjUtMTI4LjEtMTMuM0w2NCAyMDMuMXYzMi43bDcwLjItMTUuMWMzNi40LTcuOCA3NC4zLTMuOSAxMDguNCAxMS4zbDE2LjEgNy4yYzQ5LjIgMjEuOSAxMDUgMjMuOCAxNTUuNiA1LjRMNDQ4IDIzMi4zdjYybC00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNMNjQgMjk5LjF2MzIuN2w3MC4yLTE1LjFjMzYuNC03LjggNzQuMy0zLjkgMTA4LjQgMTEuM2wxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40TDQ0OCAzMjguM3YzMy41YzAgMTMuMy04LjMgMjUuMy0yMC44IDMwbC0zNC43IDEzYy00Ni4yIDE3LjMtOTcuNiAxNC42LTE0MS43LTcuNGMtMzcuOS0xOS04MS4zLTIzLjctMTIyLjUtMTMuNEw2NCA0MDB2ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDE2IDM0NS41IDMxMi44IDI0OS41IDIxNi44IDE1My41IDEyMC44IDY0IDMyQzAgMTQuMyAxNC4zIDAgMzIgMHptODAgOTZBMTYgMTYgMCAxIDAgODAgOTZhMTYgMTYgMCAxIDAgMzIgMHptMzIgMGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bS0zMiA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG52YXIgZmFMYXB0b3BGaWxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xhcHRvcC1maWxlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTFkXCIsIFwiTTEyOCAwQzkyLjcgMCA2NCAyOC43IDY0IDY0VjI4OEgxOS4yQzguNiAyODggMCAyOTYuNiAwIDMwNy4yQzAgMzQ5LjYgMzQuNCAzODQgNzYuOCAzODRIMzIwVjI4OEgxMjhWNjRINDQ4Vjk2aDY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDEyOHpNNTEyIDEyOEg0MDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjU2SDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTI4em0zMiAwdjk2aDk2bC05Ni05NnpcIl1cbn07XG52YXIgZmFUdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHR5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0ZWxldHlwZVwiXSwgXCJmMWU0XCIsIFwiTTM4LjMgMjQxLjNMMTUuMSAyMDAuNmMtOS4yLTE2LjItOC40LTM2LjUgNC41LTUwQzYxLjQgMTA2LjggMTQ0LjcgNDggMjU2IDQ4czE5NC42IDU4LjggMjM2LjQgMTAyLjZjMTIuOSAxMy41IDEzLjcgMzMuOCA0LjUgNTBsLTIzLjEgNDAuN2MtNy41IDEzLjItMjMuMyAxOS4zLTM3LjggMTQuNmwtODEuMS0yNi42Yy0xMy4xLTQuMy0yMi0xNi42LTIyLTMwLjRWMTQ0Yy00OS42LTE4LjEtMTA0LTE4LjEtMTUzLjYgMHY1NC44YzAgMTMuOC04LjkgMjYuMS0yMiAzMC40TDc2LjEgMjU1LjhjLTE0LjUgNC43LTMwLjMtMS40LTM3LjgtMTQuNnpNMzIgMzM2YzAtOC44IDcuMi0xNiAxNi0xNkg4MGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ4Yy04LjggMC0xNi03LjItMTYtMTZWMzM2em0wIDk2YzAtOC44IDcuMi0xNiAxNi0xNkg4MGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ4Yy04LjggMC0xNi03LjItMTYtMTZWNDMyek0xNDQgMzIwaDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMzM2em0xMTItMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzMzZjLTguOCAwLTE2LTcuMi0xNi0xNlYzMzZjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg0MzJjLTguOCAwLTE2LTcuMi0xNi0xNlYzMzZ6bTE2IDgwaDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINDMyYy04LjggMC0xNi03LjItMTYtMTZWNDMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDQzMmMwLTguOCA3LjItMTYgMTYtMTZIMzY4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZWNDMyelwiXVxufTtcbnZhciBmYVRlbGV0eXBlID0gZmFUdHk7XG52YXIgZmFEaWFncmFtTmV4dCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaWFncmFtLW5leHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0NzZcIiwgXCJNNTEyIDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NEgyODB2NjRoNDYuMWMyMS40IDAgMzIuMSAyNS45IDE3IDQxTDI3MyAzOTljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDE2OSAzMjljLTE1LjEtMTUuMS00LjQtNDEgMTctNDFIMjMyVjIyNEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0djY0ek00NDggNDE2VjM1MkgzNjUuM2wuNC0uNGMxOC40LTE4LjQgMjAuNC00My43IDExLTYzLjZsNzEuMyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMzUyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDcxLjMgMGMtOS40IDE5LjktNy40IDQ1LjIgMTEgNjMuNmwuNCAuNEg2NHY2NEgyMTAuN2w1LjcgNS43YzIxLjkgMjEuOSA1Ny4zIDIxLjkgNzkuMiAwbDUuNy01LjdINDQ4elwiXVxufTtcbnZhciBmYVBlcnNvblJpZmxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1yaWZsZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0ZVwiLCBcIk0yNjUuMiAxOTJjMjUuNCAwIDQ5LjggNy4xIDcwLjggMTkuOVY1MTJIMTQ0VjMzNy43TDkwLjQgNDI4LjNjLTExLjIgMTktMzUuOCAyNS4zLTU0LjggMTQuMXMtMjUuMy0zNS44LTE0LjEtNTQuOEw5Ny43IDI1OC44YzI0LjUtNDEuNCA2OS02Ni44IDExNy4xLTY2LjhoNTAuNHpNMTYwIDgwYTgwIDgwIDAgMSAxIDE2MCAwQTgwIDgwIDAgMSAxIDE2MCA4MHpNNDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2VjEzMi4zYzkuNiA1LjUgMTYgMTUuOSAxNiAyNy43VjI2OS4zbDE2LTUuM1YyMDhjMC04LjggNy4yLTE2IDE2LTE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnY4NC41YzAgNi45LTQuNCAxMy0xMC45IDE1LjJMNDgwIDMyNS4zVjM1Mmg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MTZjMCA4LjgtNy4yIDE2LTE2IDE2SDQ4NGwyMyA5Mi4xYzIuNSAxMC4xLTUuMSAxOS45LTE1LjUgMTkuOUg0MzJjLTguOCAwLTE2LTcuMi0xNi0xNlY0MDBINDAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJWMTYwYzAtMTEuOCA2LjQtMjIuMiAxNi0yNy43VjMyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDE2IDE2elwiXVxufTtcbnZhciBmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLW1lZGljYWwtY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTEyXCIsIFwiTTMyMCAzNjhjMCA1OS41IDI5LjUgMTEyLjEgNzQuOCAxNDRIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w1MjIuMSAxOTMuOWMtOC41LTEuMy0xNy4zLTEuOS0yNi4xLTEuOWMtNTQuNyAwLTEwMy41IDI0LjktMTM1LjggNjRIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhIMjA4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiAyMjRhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDI0MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTAtMTkyYy04LjggMC0xNiA3LjItMTYgMTZ2ODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyODhjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbnZhciBmYUNsb3NlZENhcHRpb25pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvc2VkLWNhcHRpb25pbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYyMGFcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnpNMjAwIDIwOGMxNC4yIDAgMjcgNi4xIDM1LjggMTZjOC44IDkuOSAyNCAxMC43IDMzLjkgMS45czEwLjctMjQgMS45LTMzLjljLTE3LjUtMTkuNi00My4xLTMyLTcxLjUtMzJjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMjguNCAwIDU0LTEyLjQgNzEuNS0zMmM4LjgtOS45IDgtMjUtMS45LTMzLjlzLTI1LTgtMzMuOSAxLjljLTguOCA5LjktMjEuNiAxNi0zNS44IDE2Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4em0xNDQgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhjMTQuMiAwIDI3IDYuMSAzNS44IDE2YzguOCA5LjkgMjQgMTAuNyAzMy45IDEuOXMxMC43LTI0IDEuOS0zMy45Yy0xNy41LTE5LjYtNDMuMS0zMi03MS41LTMyYy01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2YzI4LjQgMCA1NC0xMi40IDcxLjUtMzJjOC44LTkuOSA4LTI1LTEuOS0zMy45cy0yNS04LTMzLjkgMS45Yy04LjggOS45LTIxLjYgMTYtMzUuOCAxNmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6XCJdXG59O1xudmFyIGZhUGVyc29uSGlraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1oaWtpbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImhpa2luZ1wiXSwgXCJmNmVjXCIsIFwiTTE5MiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem01MS4zIDE4Mi43TDIyNC4yIDMwN2w0OS43IDQ5LjdjOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM5Ny4zbC03My45LTczLjljLTE1LjgtMTUuOC0yMi4yLTM4LjYtMTYuOS02MC4zbDIwLjQtODRjOC4zLTM0LjEgNDIuNy01NC45IDc2LjctNDYuNGMxOSA0LjggMzUuNiAxNi40IDQ2LjQgMzIuN0wzMDUuMSAyMDhIMzM2VjE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djU1LjhjMCAuMSAwIC4yIDAgLjJzMCAuMiAwIC4yVjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyNzJIMjk2LjZjLTE2IDAtMzEtOC0zOS45LTIxLjRsLTEzLjMtMjB6TTgxLjEgNDcxLjlMMTE3LjMgMzM0YzMgNC4yIDYuNCA4LjIgMTAuMSAxMS45bDQxLjkgNDEuOUwxNDIuOSA0ODguMWMtNC41IDE3LjEtMjIgMjcuMy0zOS4xIDIyLjhzLTI3LjMtMjItMjIuOC0zOS4xem01NS41LTM0NkwxMDEuNCAyNjYuNWMtMyAxMi4xLTE0LjkgMTkuOS0yNy4yIDE3LjlsLTQ3LjktOGMtMTQtMi4zLTIyLjktMTYuMy0xOS4yLTMwTDMxLjkgMTU1YzkuNS0zNC44IDQxLjEtNTkgNzcuMi01OWg0LjJjMTUuNiAwIDI3LjEgMTQuNyAyMy4zIDI5Ljh6XCJdXG59O1xudmFyIGZhSGlraW5nID0gZmFQZXJzb25IaWtpbmc7XG52YXIgZmFWZW51c0RvdWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2ZW51cy1kb3VibGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs5ODkwXSwgXCJmMjI2XCIsIFwiTTE5MiAyODhhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0ek0zNjggMTc2YzAgODYuMy02Mi4xIDE1OC4xLTE0NCAxNzMuMVYzODRoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjI0djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMzJWMzQ5LjFDNzguMSAzMzQuMSAxNiAyNjIuMyAxNiAxNzZDMTYgNzguOCA5NC44IDAgMTkyIDBzMTc2IDc4LjggMTc2IDE3NnpNMzQ0IDMxOGMxNC42LTE1LjYgMjYuOC0zMy40IDM2LTUzYzE4LjggMTQuNCA0Mi40IDIzIDY4IDIzYzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEyYy0yNS42IDAtNDkuMSA4LjYtNjggMjNjLTkuMy0xOS41LTIxLjUtMzcuNC0zNi01M0MzNzMuMSAxMi42IDQwOS4xIDAgNDQ4IDBjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xVjM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0ODB2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgzMlYzNDkuMWMtMjYuNi00LjktNTEuMS0xNS43LTcyLTMxLjF6XCJdXG59O1xudmFyIGZhSW1hZ2VzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ltYWdlcycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjMwMlwiLCBcIk0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0VjMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTYwek0zOTYgMTM4LjdsOTYgMTQ0YzQuOSA3LjQgNS40IDE2LjggMS4yIDI0LjZTNDgwLjkgMzIwIDQ3MiAzMjBIMzI4IDI4MCAyMDBjLTkuMiAwLTE3LjYtNS4zLTIxLjYtMTMuNnMtMi45LTE4LjIgMi45LTI1LjRsNjQtODBjNC42LTUuNyAxMS40LTkgMTguNy05czE0LjIgMy4zIDE4LjcgOWwxNy4zIDIxLjYgNTYtODRDMzYwLjUgMTMyIDM2OCAxMjggMzc2IDEyOHMxNS41IDQgMjAgMTAuN3pNMTkyIDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00OCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMDYuNyAwIDEyMFYzNDRjMCA3NS4xIDYwLjkgMTM2IDEzNiAxMzZINDU2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDEzNmMtNDguNiAwLTg4LTM5LjQtODgtODhWMTIwelwiXVxufTtcbnZhciBmYUNhbGN1bGF0b3IgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsY3VsYXRvcicsXG4gIGljb246IFszODQsIDUxMiwgWzEyODQyNV0sIFwiZjFlY1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek05NiA2NEgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMiAxNjBhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHpNOTYgMzUyYTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTkyIDI1NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bTY0LTY0YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHpNMjg4IDQ0OGEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6XCJdXG59O1xudmFyIGZhUGVvcGxlUHVsbGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW9wbGUtcHVsbGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUzNVwiLCBcIk04MCA5NkE0OCA0OCAwIDEgMCA4MCAwYTQ4IDQ4IDAgMSAwIDAgOTZ6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyYzkuOCAwIDE4LjUtNC40IDI0LjQtMTEuMkw4MC40IDQ4NS4zYzIuOSAxNy40IDE5LjQgMjkuMiAzNi44IDI2LjNzMjkuMi0xOS40IDI2LjMtMzYuOEwxMjMuMSAzNTJoMTUuN2wzMCAxMzQuOWMzLjggMTcuMyAyMC45IDI4LjEgMzguMiAyNC4zczI4LjEtMjAuOSAyNC4zLTM4LjJsLTU3LjMtMjU4IDExNi4zIDUzLjhjLjUgLjMgMS4xIC41IDEuNiAuN2M4LjYgMy42IDE4IDMuMSAyNS45LS43YzMuNC0xLjYgNi42LTMuOSA5LjMtNi43YzMuMS0zLjIgNS41LTcgNy4xLTExLjRjLjEtLjMgLjItLjcgLjMtMWwyLjUtNy41YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDUzNyAyMzIuN2wtMTUuMy0zNi44QzUwNC41IDE1NC44IDQ2NC4zIDEyOCA0MTkuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMjQuNCAxMC45LTQ0LjYgMjktNTguMSA1MS42TDE1Ny4zIDEzNi45QzE0NC43IDEzMSAxMzAuOSAxMjggMTE3IDEyOEg2NHpNNDY0IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzQ5LjcgMzM1LjZsLTI1IDYyLjQtNTkuNCA1OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM3Mi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6XCJdXG59O1xudmFyIGZhTiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTEwXSwgXCI0ZVwiLCBcIk0yMS4xIDMzLjljMTIuNy00LjYgMjYuOS0uNyAzNS41IDkuNkwzMjAgMzU5LjZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY0NDhjMCAxMy41LTguNCAyNS41LTIxLjEgMzAuMXMtMjYuOSAuNy0zNS41LTkuNkw2NCAxNTIuNFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjRDMCA1MC41IDguNCAzOC41IDIxLjEgMzMuOXpcIl1cbn07XG52YXIgZmFDYWJsZUNhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWJsZS1jYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2NzMsIDU3NTUxLCBcInRyYW1cIl0sIFwiZjdkYVwiLCBcIk0yODggMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE2MCA1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zMiAyODhjMC0zNS4zIDI4LjctNjQgNjQtNjRIMjMyVjE1Ny41bC0yMDMuMSA0MmMtMTMgMi43LTI1LjctNS43LTI4LjQtMTguNnM1LjctMjUuNyAxOC42LTI4LjRsMjMyLTQ4IDIzMi00OGMxMy0yLjcgMjUuNyA1LjcgMjguNCAxOC42cy01LjcgMjUuNy0xOC42IDI4LjRMMjgwIDE0Ny41VjIyNEg0MTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDk2Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyODh6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIOTZ6bTExMiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZWMzA0YzAtOC44LTcuMi0xNi0xNi0xNkgzNTJ6XCJdXG59O1xudmFyIGZhVHJhbSA9IGZhQ2FibGVDYXI7XG52YXIgZmFDbG91ZFJhaW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtcmFpbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc4MywgOTkyNl0sIFwiZjczZFwiLCBcIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTZjMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjJDNjQuNyAxMjYuMSA2NCAxMTkuMSA2NCAxMTJDNjQgNTAuMSAxMTQuMSAwIDE3NiAwYzQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MGMxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgNS41LS42IDEwLjgtMS42IDE2Yy41IDAgMS4xIDAgMS42IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZIOTZ6bS02LjggNTJjMS4zLTIuNSAzLjktNCA2LjgtNHM1LjQgMS41IDYuOCA0bDM1LjEgNjQuNmM0LjEgNy41IDYuMiAxNS44IDYuMiAyNC4zdjNjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh2LTNjMC04LjUgMi4xLTE2LjkgNi4yLTI0LjNMODkuMiAzNzJ6bTE2MCAwYzEuMy0yLjUgMy45LTQgNi44LTRzNS40IDEuNSA2LjggNGwzNS4xIDY0LjZjNC4xIDcuNSA2LjIgMTUuOCA2LjIgMjQuM3YzYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4di0zYzAtOC41IDIuMS0xNi45IDYuMi0yNC4zTDI0OS4yIDM3MnptMTI0LjkgNjQuNkw0MDkuMiAzNzJjMS4zLTIuNSAzLjktNCA2LjgtNHM1LjQgMS41IDYuOCA0bDM1LjEgNjQuNmM0LjEgNy41IDYuMiAxNS44IDYuMiAyNC4zdjNjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh2LTNjMC04LjUgMi4xLTE2LjkgNi4yLTI0LjN6XCJdXG59O1xudmFyIGZhQnVpbGRpbmdDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZDRcIiwgXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djgwaDk2YzE1LjEgMCAyOC41LTYuOSAzNy4zLTE3LjhDMzQwLjQgNDYyLjIgMzIwIDQxNy41IDMyMCAzNjhjMC01NC43IDI0LjktMTAzLjUgNjQtMTM1LjhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek04MCA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMTEyek0yNzIgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2ek00OTYgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN0w1MTguNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDk2IDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDczLjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0OTYgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG52YXIgZmFTaGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NzRdLCBcImYyMWFcIiwgXCJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMySDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NGg0OGMyNi41IDAgNDggMjEuNSA0OCA0OFYyNDBsNDQuNCAxNC44YzIzLjEgNy43IDI5LjUgMzcuNSAxMS41IDUzLjlsLTEwMSA5Mi42Yy0xNi4yIDkuNC0zNC43IDE1LjEtNTAuOSAxNS4xYy0xOS42IDAtNDAuOC03LjctNTkuMi0yMC4zYy0yMi4xLTE1LjUtNTEuNi0xNS41LTczLjcgMGMtMTcuMSAxMS44LTM4IDIwLjMtNTkuMiAyMC4zYy0xNi4yIDAtMzQuNy01LjctNTAuOS0xNS4xbC0xMDEtOTIuNmMtMTgtMTYuNS0xMS42LTQ2LjIgMTEuNS01My45TDk2IDI0MFYxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhoNDhWMzJ6TTE2MCAyMTguN2wxMDcuOC0zNS45YzEzLjEtNC40IDI3LjMtNC40IDQwLjUgMEw0MTYgMjE4LjdWMTI4SDE2MHY5MC43ek0zMDYuNSA0MjEuOUMzMjkgNDM3LjQgMzU2LjUgNDQ4IDM4NCA0NDhjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFsMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNTAxLjcgNDE3IDUxMiAzODQgNTEyYy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgNDM3LjIgMTY1LjEgNDQ4IDE5MiA0NDhjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdXG59O1xudmFyIGZhQXJyb3dzRG93blRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtZG93bi10by1saW5lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGI4XCIsIFwiTTU0NCA0MTZMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyem0yMi42LTEzNy40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQ4MCAyNzQuNyA0ODAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuNy00MS40LTQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2em0tMzIwLTQ1LjNjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE2MCAyNzQuNyAxNjAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuN0w1NC42IDIzMy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG52YXIgZmFEb3dubG9hZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb3dubG9hZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjAxOVwiLCBcIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjc0LjdsLTczLjQtNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI4OCAyNzQuN1YzMnpNNjQgMzUyYy0zNS4zIDAtNjQgMjguNy02NCA2NHYzMmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNDE2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDM0Ni41bC00NS4zIDQ1LjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwTDE2NS41IDM1Mkg2NHptMzY4IDU2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG52YXIgZmFGYWNlR3JpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTIsIFwiZ3JpblwiXSwgXCJmNTgwXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6TTE0NC40IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUdyaW4gPSBmYUZhY2VHcmluO1xudmFyIGZhRGVsZXRlTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkZWxldGUtbGVmdCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzkwMDMsIFwiYmFja3NwYWNlXCJdLCBcImY1NWFcIiwgXCJNNTc2IDEyOGMwLTM1LjMtMjguNy02NC02NC02NEgyMDUuM2MtMTcgMC0zMy4zIDYuNy00NS4zIDE4LjdMOS40IDIzMy40Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZMMTYwIDQyOS4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOHpNMjcxIDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3IDQ3IDQ3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ3LTQ3LTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ3LTQ3LTQ3LTQ3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpcIl1cbn07XG52YXIgZmFCYWNrc3BhY2UgPSBmYURlbGV0ZUxlZnQ7XG52YXIgZmFFeWVEcm9wcGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V5ZS1kcm9wcGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleWUtZHJvcHBlci1lbXB0eVwiLCBcImV5ZWRyb3BwZXJcIl0sIFwiZjFmYlwiLCBcIk0zNDEuNiAyOS4yTDI0MC4xIDEzMC44bC05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjRMNDgyLjggMTcwLjRjMzktMzkgMzktMTAyLjIgMC0xNDEuMXMtMTAyLjItMzktMTQxLjEgMHpNNTUuNCAzMjMuM2MtMTUgMTUtMjMuNCAzNS40LTIzLjQgNTYuNnY0Mi40TDUuNCA0NjIuMmMtOC41IDEyLjctNi44IDI5LjYgNCA0MC40czI3LjcgMTIuNSA0MC40IDRMODkuNyA0ODBoNDIuNGMyMS4yIDAgNDEuNi04LjQgNTYuNi0yMy40TDMwOS40IDMzNS45bC00NS4zLTQ1LjNMMTQzLjQgNDExLjNjLTMgMy03LjEgNC43LTExLjMgNC43SDk2VjM3OS45YzAtNC4yIDEuNy04LjMgNC43LTExLjNMMjIxLjQgMjQ3LjlsLTQ1LjMtNDUuM0w1NS40IDMyMy4zelwiXVxufTtcbnZhciBmYUV5ZURyb3BwZXJFbXB0eSA9IGZhRXllRHJvcHBlcjtcbnZhciBmYUV5ZWRyb3BwZXIgPSBmYUV5ZURyb3BwZXI7XG52YXIgZmFGaWxlQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1YTBcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4ek0yODggMzY4YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIxMS4zLTQzLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDQxNiAzODUuNGwtMjguNy0yOC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDcyLTcyYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42elwiXVxufTtcbnZhciBmYUZvcndhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9yd2FyZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzkxOTNdLCBcImYwNGVcIiwgXCJNNTIuNSA0NDAuNmMtOS41IDcuOS0yMi44IDkuNy0zNC4xIDQuNFMwIDQyOC40IDAgNDE2Vjk2QzAgODMuNiA3LjIgNzIuMyAxOC40IDY3czI0LjUtMy42IDM0LjEgNC40TDIyNCAyMTQuM1YyNTZ2NDEuN0w1Mi41IDQ0MC42ek0yNTYgMzUyVjI1NiAxMjggOTZjMC0xMi40IDcuMi0yMy43IDE4LjQtMjlzMjQuNS0zLjYgMzQuMSA0LjRsMTkyIDE2MGM3LjMgNi4xIDExLjUgMTUuMSAxMS41IDI0LjZzLTQuMiAxOC41LTExLjUgMjQuNmwtMTkyIDE2MGMtOS41IDcuOS0yMi44IDkuNy0zNC4xIDQuNHMtMTguNC0xNi42LTE4LjQtMjlWMzUyelwiXVxufTtcbnZhciBmYU1vYmlsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb2JpbGUnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNDEsIFwibW9iaWxlLWFuZHJvaWRcIiwgXCJtb2JpbGUtcGhvbmVcIl0sIFwiZjNjZVwiLCBcIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMDRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRIODB6bTgwIDQzMmg2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxNjBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhTW9iaWxlQW5kcm9pZCA9IGZhTW9iaWxlO1xudmFyIGZhTW9iaWxlUGhvbmUgPSBmYU1vYmlsZTtcbnZhciBmYUZhY2VNZWggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1tZWgnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjgsIFwibWVoXCJdLCBcImYxMWFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3Ni40IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xNjAgMzM2SDM1MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxNjBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhTWVoID0gZmFGYWNlTWVoO1xudmFyIGZhQWxpZ25DZW50ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYWxpZ24tY2VudGVyJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDM3XCIsIFwiTTM1MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem05NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNTIgMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6XCJdXG59O1xudmFyIGZhQm9va1NrdWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stc2t1bGwnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImJvb2stZGVhZFwiXSwgXCJmNmI3XCIsIFwiTTAgOTZDMCA0MyA0MyAwIDk2IDBIMzg0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnY2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODQgOTZjLTUzIDAtOTYtNDMtOTYtOTZWOTZ6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzNTJWMzg0SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzIwIDExMmMwLTM1LjMtMzUuOC02NC04MC02NHMtODAgMjguNy04MCA2NGMwIDIwLjkgMTIuNiAzOS41IDMyIDUxLjJWMTc2YzAgOC44IDcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZWMTYzLjJjMTkuNC0xMS43IDMyLTMwLjMgMzItNTEuMnpNMjA4IDk2YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnptNDggMTZhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpNMTM0LjMgMjA5LjNjLTguMS0zLjUtMTcuNSAuMy0yMSA4LjRzLjMgMTcuNSA4LjQgMjFMMTk5LjQgMjcybC03Ny43IDMzLjNjLTguMSAzLjUtMTEuOSAxMi45LTguNCAyMXMxMi45IDExLjkgMjEgOC40TDI0MCAyODkuNGwxMDUuNyA0NS4zYzguMSAzLjUgMTcuNS0uMyAyMS04LjRzLS4zLTE3LjUtOC40LTIxTDI4MC42IDI3Mmw3Ny43LTMzLjNjOC4xLTMuNSAxMS45LTEyLjkgOC40LTIxcy0xMi45LTExLjktMjEtOC40TDI0MCAyNTQuNiAxMzQuMyAyMDkuM3pcIl1cbn07XG52YXIgZmFCb29rRGVhZCA9IGZhQm9va1NrdWxsO1xudmFyIGZhSWRDYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2lkLWNhcmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0NywgXCJkcml2ZXJzLWxpY2Vuc2VcIl0sIFwiZjJjMlwiLCBcIk0wIDk2bDU3NiAwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgMzIgMCA2MC43IDAgOTZ6bTAgMzJWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhIMHpNNjQgNDA1LjNjMC0yOS41IDIzLjktNTMuMyA1My4zLTUzLjNIMjM0LjdjMjkuNSAwIDUzLjMgMjMuOSA1My4zIDUzLjNjMCA1LjktNC44IDEwLjctMTAuNyAxMC43SDc0LjdjLTUuOSAwLTEwLjctNC44LTEwLjctMTAuN3pNMTc2IDE5MmE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptMTc2IDE2YzAtOC44IDcuMi0xNiAxNi0xNkg0OTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZ6bTAgNjRjMC04LjggNy4yLTE2IDE2LTE2SDQ5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbnZhciBmYURyaXZlcnNMaWNlbnNlID0gZmFJZENhcmQ7XG52YXIgZmFPdXRkZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ291dGRlbnQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImRlZGVudFwiXSwgXCJmMDNiXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjR6TTE5MiAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2SDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TS4yIDI2OC42Yy04LjItNi40LTguMi0xOC45IDAtMjUuM2wxMDEuOS03OS4zYzEwLjUtOC4yIDI1LjgtLjcgMjUuOCAxMi42VjMzNS4zYzAgMTMuMy0xNS4zIDIwLjgtMjUuOCAxMi42TC4yIDI2OC42elwiXVxufTtcbnZhciBmYURlZGVudCA9IGZhT3V0ZGVudDtcbnZhciBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGZlXCIsIFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC05NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAtMTQ0YzguOCAwIDE2IDcuMiAxNiAxNnY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyODhjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbnZhciBmYUhvdXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTY4LCA2MzQ5OCwgNjM1MDAsIFwiaG9tZVwiLCBcImhvbWUtYWx0XCIsIFwiaG9tZS1sZy1hbHRcIl0sIFwiZjAxNVwiLCBcIk01NzUuOCAyNTUuNWMwIDE4LTE1IDMyLjEtMzIgMzIuMWgtMzJsLjcgMTYwLjJjMCAyLjctLjIgNS40LS41IDguMVY0NzJjMCAyMi4xLTE3LjkgNDAtNDAgNDBINDU2Yy0xLjEgMC0yLjIgMC0zLjMtLjFjLTEuNCAuMS0yLjggLjEtNC4yIC4xSDQxNiAzOTJjLTIyLjEgMC00MC0xNy45LTQwLTQwVjQ0OCAzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NCAyNGMwIDIyLjEtMTcuOSA0MC00MCA0MEgxNjAgMTI4LjFjLTEuNSAwLTMtLjEtNC41LS4yYy0xLjIgLjEtMi40IC4yLTMuNiAuMkgxMDRjLTIyLjEgMC00MC0xNy45LTQwLTQwVjM2MGMwLS45IDAtMS45IC4xLTIuOFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTY0LjggMjMxLjVjOCA3IDEyIDE1IDExIDI0elwiXVxufTtcbnZhciBmYUhvbWUgPSBmYUhvdXNlO1xudmFyIGZhSG9tZUFsdCA9IGZhSG91c2U7XG52YXIgZmFIb21lTGdBbHQgPSBmYUhvdXNlO1xudmFyIGZhQ2FsZW5kYXJXZWVrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbGVuZGFyLXdlZWsnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY3ODRcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnptODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZIMzY4YzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDgwelwiXVxufTtcbnZhciBmYUxhcHRvcE1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFwdG9wLW1lZGljYWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY4MTJcIiwgXCJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjM1Mkg1MTJWOTZIMTI4VjM1Mkg2NFY5NnpNMCA0MDMuMkMwIDM5Mi42IDguNiAzODQgMTkuMiAzODRINjIwLjhjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmMwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEg3Ni44QzM0LjQgNDgwIDAgNDQ1LjYgMCA0MDMuMnpNMjg4IDE2MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzUydjQ4YzAgOC44LTcuMiAxNi0xNiAxNkgzMDRjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMjI0YzAtOC44IDcuMi0xNiAxNi0xNmg0OFYxNjB6XCJdXG59O1xudmFyIGZhQiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOThdLCBcIjQyXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWMjU2IDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgxOTJjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuN2MxOC43LTIyLjMgMzAtNTEgMzAtODIuM2MwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEg2NHptOTYgMTkySDY0Vjk2aDk2YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek02NCAyODhoOTYgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRINjRWMjg4elwiXVxufTtcbnZhciBmYUZpbGVNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtbWVkaWNhbCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjQ3N1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDIyNHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMzUySDExMmMtOC44IDAtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZoNDhWMjQwelwiXVxufTtcbnZhciBmYURpY2VPbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1vbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU2XSwgXCJmNTI1XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhS2l3aUJpcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAna2l3aS1iaXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTM1XCIsIFwiTTI5MS4yIDM4OC40YzMxLjItMTguOCA2NC43LTM2LjQgMTAxLjEtMzYuNEg0NDhjNC42IDAgOS4xLS4yIDEzLjYtLjdsODUuMyAxMjEuOWM0IDUuNyAxMS4zIDguMiAxNy45IDYuMXMxMS4yLTguMyAxMS4yLTE1LjNWMjI0YzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4SDM5Mi4zYy0zNi40IDAtNjkuOS0xNy42LTEwMS4xLTM2LjRDMjYyLjMgNDIuMSAyMjguMyAzMiAxOTIgMzJDODYgMzIgMCAxMTggMCAyMjRjMCA3MS4xIDM4LjYgMTMzLjEgOTYgMTY2LjNWNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWNDEwYzE1LjMgMy45IDMxLjQgNiA0OCA2YzUuNCAwIDEwLjctLjIgMTYtLjdWNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWNDA1LjFjMTIuNC00LjQgMjQuMi0xMCAzNS4yLTE2Ljd6TTQ0OCAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYUFycm93UmlnaHRBcnJvd0xlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg2NDQsIFwiZXhjaGFuZ2VcIl0sIFwiZjBlY1wiLCBcIk00MzguNiAxNTAuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDMzOC43IDk2IDMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOHMxNC4zIDMyIDMyIDMybDMwNi43IDAtNDEuNCA0MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDk2LTk2em0tMzMzLjMgMzUyYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgNDE2IDQxNiA0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwNi43IDAgNDEuNC00MS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZ6XCJdXG59O1xudmFyIGZhRXhjaGFuZ2UgPSBmYUFycm93UmlnaHRBcnJvd0xlZnQ7XG52YXIgZmFSb3RhdGVSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb3RhdGUtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInJlZG8tYWx0XCIsIFwicm90YXRlLWZvcndhcmRcIl0sIFwiZjJmOVwiLCBcIk00NjMuNSAyMjRINDcyYzEzLjMgMCAyNC0xMC43IDI0LTI0VjcyYzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMnMtMTkuMy0xLjctMjYuMiA1LjJMNDEzLjQgOTYuNmMtODcuNi04Ni41LTIyOC43LTg2LjItMzE1LjggMWMtODcuNSA4Ny41LTg3LjUgMjI5LjMgMCAzMTYuOHMyMjkuMyA4Ny41IDMxNi44IDBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBjLTYyLjUgNjIuNS0xNjMuOCA2Mi41LTIyNi4zIDBzLTYyLjUtMTYzLjggMC0yMjYuM2M2Mi4yLTYyLjIgMTYyLjctNjIuNSAyMjUuMy0xTDMyNyAxODNjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJzMTIuNSAxNC44IDIyLjIgMTQuOEg0NjMuNXpcIl1cbn07XG52YXIgZmFSZWRvQWx0ID0gZmFSb3RhdGVSaWdodDtcbnZhciBmYVJvdGF0ZUZvcndhcmQgPSBmYVJvdGF0ZVJpZ2h0O1xudmFyIGZhVXRlbnNpbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXRlbnNpbHMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4NjAsIDYxNjg1LCBcImN1dGxlcnlcIl0sIFwiZjJlN1wiLCBcIk00MTYgMEM0MDAgMCAyODggMzIgMjg4IDE3NlYyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRoMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUyIDI0MCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNjQgMTZDNjQgNy44IDU3LjkgMSA0OS43IC4xUzM0LjIgNC42IDMyLjQgMTIuNUwyLjEgMTQ4LjhDLjcgMTU1LjEgMCAxNjEuNSAwIDE2Ny45YzAgNDUuOSAzNS4xIDgzLjYgODAgODcuN1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTUuNmM0NC45LTQuMSA4MC00MS44IDgwLTg3LjdjMC02LjQtLjctMTIuOC0yLjEtMTkuMUwxOTEuNiAxMi41Yy0xLjgtOC05LjMtMTMuMy0xNy40LTEyLjRTMTYwIDcuOCAxNjAgMTZWMTUwLjJjMCA1LjQtNC40IDkuOC05LjggOS44Yy01LjEgMC05LjMtMy45LTkuOC05TDEyNy45IDE0LjZDMTI3LjIgNi4zIDEyMC4zIDAgMTEyIDBzLTE1LjIgNi4zLTE1LjkgMTQuNkw4My43IDE1MWMtLjUgNS4xLTQuNyA5LTkuOCA5Yy01LjQgMC05LjgtNC40LTkuOC05LjhWMTZ6bTQ4LjMgMTUybC0uMyAwLS4zIDAgLjMtLjcgLjMgLjd6XCJdXG59O1xudmFyIGZhQ3V0bGVyeSA9IGZhVXRlbnNpbHM7XG52YXIgZmFBcnJvd1VwV2lkZVNob3J0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLXdpZGUtc2hvcnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYW1vdW50LXVwXCJdLCBcImYxNjFcIiwgXCJNMTUxLjYgNDIuNEMxNDUuNSAzNS44IDEzNyAzMiAxMjggMzJzLTE3LjUgMy44LTIzLjYgMTAuNGwtODggOTZjLTExLjkgMTMtMTEuMSAzMy4zIDIgNDUuMnMzMy4zIDExLjEgNDUuMi0yTDk2IDE0Ni4zVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE0Ni4zbDMyLjQgMzUuNGMxMS45IDEzIDMyLjIgMTMuOSA0NS4yIDJzMTMuOS0zMi4yIDItNDUuMmwtODgtOTZ6TTMyMCA0ODBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4SDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdXG59O1xudmFyIGZhU29ydEFtb3VudFVwID0gZmFBcnJvd1VwV2lkZVNob3J0O1xudmFyIGZhTWlsbFNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWlsbC1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMWVkXCIsIFwiTTMwMi4xIDQyLjhjNS45LTE2LjYtMi43LTM1LTE5LjQtNDAuOXMtMzUgMi43LTQwLjkgMTkuNEwyMDggMTE2LjFjLTUuNyA0LTExLjEgOC41LTE2IDEzLjVDMTcxLjcgMTA4LjkgMTQzLjMgOTYgMTEyIDk2Yy0xOS41IDAtMzcuOCA1LTUzLjcgMTMuN0M1Mi41IDEwMS40IDQyLjkgOTYgMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4djgwVjQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjIwOGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djQyLjVMODEuOSA0NjkuMmMtNS45IDE2LjYgMi43IDM1IDE5LjQgNDAuOXMzNS0yLjcgNDAuOS0xOS40bDIxLjQtNjBDMTY4LjkgNDQxIDE3OS42IDQ0OCAxOTIgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI2MS41bDM1LjctMTAwYzMuOS0xIDguMS0xLjYgMTIuMy0xLjZjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjA4YzAtNTguMi00NC4zLTEwNi0xMDEuMS0xMTEuNWwxOS4yLTUzLjh6XCJdXG59O1xudmFyIGZhQm93bFJpY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm93bC1yaWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMmViXCIsIFwiTTE3NiA1NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0yNCA0OGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTU2IDE3Nkg3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg1NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMCAyODMuNEMwIDI2OC4zIDEyLjMgMjU2IDI3LjQgMjU2SDQ4NC42YzE1LjEgMCAyNy40IDEyLjMgMjcuNCAyNy40YzAgNzAuNS00NC40IDEzMC43LTEwNi43IDE1NC4xTDQwMy41IDQ1MmMtMiAxNi0xNS42IDI4LTMxLjggMjhIMTQwLjJjLTE2LjEgMC0yOS44LTEyLTMxLjgtMjhsLTEuOC0xNC40QzQ0LjQgNDE0LjEgMCAzNTMuOSAwIDI4My40ek0yMjQgMjAwYzAtMTMuMyAxMC43LTI0IDI0LTI0aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bS05NiAwYzAtMTMuMyAxMC43LTI0IDI0LTI0aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE1MmMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bS0yNC05NmgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTIxNiA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgzNDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0tMjQtOTZoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjk2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xMjAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptLTI0LTk2aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDM5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMjk2IDMyaDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI5NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpcIl1cbn07XG52YXIgZmFTa3VsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdza3VsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODEyOF0sIFwiZjU0Y1wiLCBcIk00MTYgMzk4LjljNTguNS00MS4xIDk2LTEwNC4xIDk2LTE3NC45QzUxMiAxMDAuMyAzOTcuNCAwIDI1NiAwUzAgMTAwLjMgMCAyMjRjMCA3MC43IDM3LjUgMTMzLjggOTYgMTc0LjljMCAuNCAwIC43IDAgMS4xdjY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDQ4VjQ2NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djQ4aDY0VjQ2NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djQ4aDQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQwMGMwLS40IDAtLjcgMC0xLjF6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSA5NiAyNTZ6bTI1Ni02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG52YXIgZmFUb3dlckJyb2FkY2FzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b3dlci1icm9hZGNhc3QnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImJyb2FkY2FzdC10b3dlclwiXSwgXCJmNTE5XCIsIFwiTTgwLjMgNDRDNjkuOCA2OS45IDY0IDk4LjIgNjQgMTI4czUuOCA1OC4xIDE2LjMgODRjNi42IDE2LjQtMS4zIDM1LTE3LjcgNDEuN3MtMzUtMS4zLTQxLjctMTcuN0M3LjQgMjAyLjYgMCAxNjYuMSAwIDEyOFM3LjQgNTMuNCAyMC45IDIwQzI3LjYgMy42IDQ2LjItNC4zIDYyLjYgMi4zUzg2LjkgMjcuNiA4MC4zIDQ0ek01NTUuMSAyMEM1NjguNiA1My40IDU3NiA4OS45IDU3NiAxMjhzLTcuNCA3NC42LTIwLjkgMTA4Yy02LjYgMTYuNC0yNS4zIDI0LjMtNDEuNyAxNy43UzQ4OS4xIDIyOC40IDQ5NS43IDIxMmMxMC41LTI1LjkgMTYuMy01NC4yIDE2LjMtODRzLTUuOC01OC4xLTE2LjMtODRDNDg5LjEgMjcuNiA0OTcgOSA1MTMuNCAyLjNzMzUgMS4zIDQxLjcgMTcuN3pNMzUyIDEyOGMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE4My40Yy0xOS4xLTExLjEtMzItMzEuNy0zMi01NS40YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6TTE3MC42IDc2LjhDMTYzLjggOTIuNCAxNjAgMTA5LjcgMTYwIDEyOHMzLjggMzUuNiAxMC42IDUxLjJjNy4xIDE2LjItLjMgMzUuMS0xNi41IDQyLjFzLTM1LjEtLjMtNDIuMS0xNi41Yy0xMC4zLTIzLjYtMTYtNDkuNi0xNi03Ni44czUuNy01My4yIDE2LTc2LjhjNy4xLTE2LjIgMjUuOS0yMy42IDQyLjEtMTYuNXMyMy42IDI1LjkgMTYuNSA0Mi4xek00NjQgNTEuMmMxMC4zIDIzLjYgMTYgNDkuNiAxNiA3Ni44cy01LjcgNTMuMi0xNiA3Ni44Yy03LjEgMTYuMi0yNS45IDIzLjYtNDIuMSAxNi41cy0yMy42LTI1LjktMTYuNS00Mi4xYzYuOC0xNS42IDEwLjYtMzIuOSAxMC42LTUxLjJzLTMuOC0zNS42LTEwLjYtNTEuMmMtNy4xLTE2LjIgLjMtMzUuMSAxNi41LTQyLjFzMzUuMSAuMyA0Mi4xIDE2LjV6XCJdXG59O1xudmFyIGZhQnJvYWRjYXN0VG93ZXIgPSBmYVRvd2VyQnJvYWRjYXN0O1xudmFyIGZhVHJ1Y2tQaWNrdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stcGlja3VwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzYzXSwgXCJmNjNjXCIsIFwiTTM2OC42IDk2bDc2LjggOTZIMjg4Vjk2aDgwLjZ6TTIyNCA4MFYxOTJINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY1LjFjLS43IDUuMi0xLjEgMTAuNi0xLjEgMTZjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmMwLTUuNC0uNC0xMC44LTEuMS0xNmg2Ni4zYy0uNyA1LjItMS4xIDEwLjYtMS4xIDE2YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJjMC01LjQtLjQtMTAuOC0xLjEtMTZINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMkg1MjcuNEw0MTguNiA1NmMtMTIuMS0xNS4yLTMwLjUtMjQtNTAtMjRIMjcyYy0yNi41IDAtNDggMjEuNS00OCA0OHptMCAyODhhNDggNDggMCAxIDEgLTk2IDAgNDggNDggMCAxIDEgOTYgMHptMjg4IDBhNDggNDggMCAxIDEgLTk2IDAgNDggNDggMCAxIDEgOTYgMHpcIl1cbn07XG52YXIgZmFVcExvbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXAtbG9uZycsXG4gIGljb246IFszMjAsIDUxMiwgW1wibG9uZy1hcnJvdy1hbHQtdXBcIl0sIFwiZjMwY1wiLCBcIk0zMTggMTc3LjVjMy44LTguOCAyLTE5LTQuNi0yNmwtMTM2LTE0NEMxNzIuOSAyLjcgMTY2LjYgMCAxNjAgMHMtMTIuOSAyLjctMTcuNCA3LjVsLTEzNiAxNDRjLTYuNiA3LTguNCAxNy4yLTQuNiAyNlMxNC40IDE5MiAyNCAxOTJIOTZsMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yODhoNzJjOS42IDAgMTguMi01LjcgMjItMTQuNXpcIl1cbn07XG52YXIgZmFMb25nQXJyb3dBbHRVcCA9IGZhVXBMb25nO1xudmFyIGZhU3RvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdG9wJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbOTIwOV0sIFwiZjA0ZFwiLCBcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjh6XCJdXG59O1xudmFyIGZhQ29kZU1lcmdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvZGUtbWVyZ2UnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYzODdcIiwgXCJNODAgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0zMi40IDk3LjJjMjgtMTIuNCA0Ny42LTQwLjUgNDcuNi03My4yYzAtNDQuMi0zNS44LTgwLTgwLTgwUzAgMzUuOCAwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNWMzU4LjdDMTkuNyAzNzEgMCAzOTkuMiAwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNWMjcyYzI2LjcgMjAuMSA2MCAzMiA5NiAzMmg4Ni43YzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBjLTMyLjggMC02MSAxOS43LTczLjMgNDhIMjA4Yy00OS45IDAtOTEtMzguMS05NS42LTg2Ljh6TTgwIDQwOGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTM0NCAyNzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG52YXIgZmFVcGxvYWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXBsb2FkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDkzXCIsIFwiTTI4OCAxMDkuM1YzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTA5LjNsLTczLjQgNzMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDI4OCAxMDkuM3pNNjQgMzUySDE5MmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NHYzMmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0ek00MzIgNDU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpcIl1cbn07XG52YXIgZmFIdXJyaWNhbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaHVycmljYW5lJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNzUxXCIsIFwiTTAgMjA4QzAgMTA0LjQgNzUuNyAxOC41IDE3NC45IDIuNkMxODQgMS4yIDE5MiA4LjYgMTkyIDE3LjlWODEuMmMwIDguNCA2LjUgMTUuMyAxNC43IDE2LjVDMzA3IDExMi41IDM4NCAxOTkgMzg0IDMwMy40YzAgMTAzLjYtNzUuNyAxODkuNS0xNzQuOSAyMDUuNGMtOS4yIDEuNS0xNy4xLTUuOS0xNy4xLTE1LjJWNDMwLjJjMC04LjQtNi41LTE1LjMtMTQuNy0xNi41Qzc3IDM5OC45IDAgMzEyLjQgMCAyMDh6bTI4OCA0OEE5NiA5NiAwIDEgMCA5NiAyNTZhOTYgOTYgMCAxIDAgMTkyIDB6bS05Ni0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhTW91bmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW91bmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MmRcIiwgXCJNMTQ0LjEgMTc5LjJDMTczLjggMTI3LjcgMjI4LjYgOTYgMjg4IDk2czExNC4yIDMxLjcgMTQzLjkgODMuMkw1NDAuNCAzNjhjMTIuMyAyMS4zLTMuMSA0OC0yNy43IDQ4SDYzLjNjLTI0LjYgMC00MC0yNi42LTI3LjctNDhMMTQ0LjEgMTc5LjJ6XCJdXG59O1xudmFyIGZhVG9pbGV0UG9ydGFibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9pbGV0LXBvcnRhYmxlJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTgzXCIsIFwiTTAgMzJWNjRIMzIwVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgMCAwIDE0LjMgMCAzMnpNMjQgOTZIMHYyNFY0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHYtOEgyNzJ2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjEyMCA5NkgyOTYgMjR6TTI1NiAyNDB2NjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdXG59O1xudmFyIGZhQ29tcGFjdERpc2MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tcGFjdC1kaXNjJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkxLCAxMjgxOTIsIDEyODQ0MF0sIFwiZjUxZlwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTI1NiAzMmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS05Ni0zMmE5NiA5NiAwIDEgMCAxOTIgMCA5NiA5NiAwIDEgMCAtMTkyIDB6TTk2IDI0MGMwLTM1IDE3LjUtNzEuMSA0NS4yLTk4LjhTMjA1IDk2IDI0MCA5NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtNDUuNCAwLTg5LjIgMjIuMy0xMjEuNSA1NC41UzY0IDE5NC42IDY0IDI0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2elwiXVxufTtcbnZhciBmYUZpbGVBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJmaWxlLWRvd25sb2FkXCJdLCBcImY1NmRcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek0yMTYgMjMyVjMzNC4xbDMxLTMxYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC03Mi03MmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMxIDMxVjIzMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbnZhciBmYUZpbGVEb3dubG9hZCA9IGZhRmlsZUFycm93RG93bjtcbnZhciBmYUNhcmF2YW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyYXZhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjhmZlwiLCBcIk0wIDExMkMwIDY3LjggMzUuOCAzMiA4MCAzMkg0MTZjODguNCAwIDE2MCA3MS42IDE2MCAxNjBWMzUyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwSDI4OGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05Nkg4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBWMTEyek0zMjAgMzUySDQ0OFYyNTZINDE2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjM1MnpNOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDk2em05NiAzMzZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2elwiXVxufTtcbnZhciBmYVNoaWVsZENhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGllbGQtY2F0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTcyXCIsIFwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yYy41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMmMxNi43IDggMzYuMSA4IDUyLjggMEM0NTQuNyA0MjAuNyA0OTUuNSAyMzkuMiA0OTYgMTQwYy4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE2MCAxNTQuNGMwLTUuOCA0LjctMTAuNCAxMC40LTEwLjRoLjJjMy40IDAgNi41IDEuNiA4LjUgNC4zbDQwIDUzLjNjMyA0IDcuOCA2LjQgMTIuOCA2LjRoNDhjNSAwIDkuOC0yLjQgMTIuOC02LjRsNDAtNTMuM2MyLTIuNyA1LjItNC4zIDguNS00LjNoLjJjNS44IDAgMTAuNCA0LjcgMTAuNCAxMC40VjI3MmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NlYxNTQuNHpNMjE2IDI4OGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTk2LTE2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6XCJdXG59O1xudmFyIGZhQm9sdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib2x0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbOTg4OSwgXCJ6YXBcIl0sIFwiZjBlN1wiLCBcIk0zNDkuNCA0NC42YzUuOS0xMy43IDEuNS0yOS43LTEwLjYtMzguNXMtMjguNi04LTM5LjkgMS44bC0yNTYgMjI0Yy0xMCA4LjgtMTMuNiAyMi45LTguOSAzNS4zUzUwLjcgMjg4IDY0IDI4OEgxNzUuNUw5OC42IDQ2Ny40Yy01LjkgMTMuNy0xLjUgMjkuNyAxMC42IDM4LjVzMjguNiA4IDM5LjktMS44bDI1Ni0yMjRjMTAtOC44IDEzLjYtMjIuOSA4LjktMzUuM3MtMTYuNi0yMC43LTMwLTIwLjdIMjcyLjVMMzQ5LjQgNDQuNnpcIl1cbn07XG52YXIgZmFaYXAgPSBmYUJvbHQ7XG52YXIgZmFHbGFzc1dhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dsYXNzLXdhdGVyJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNGY0XCIsIFwiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM0gyNzUuM2M0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEgzMnpNNzMgMTU2LjVMNjYuNCA2NEgzMTcuNkwzMTEgMTU2LjVsLTI0LjIgMTIuMWMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwYy0yMC45LTEwLjQtNDUuNS0xMC40LTY2LjQgMGMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwTDczIDE1Ni41elwiXVxufTtcbnZhciBmYU9pbFdlbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnb2lsLXdlbGwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MzJcIiwgXCJNNTI4LjMgNjEuM2MtMTEuNC00Mi43LTU1LjMtNjgtOTgtNTYuNkw0MTQuOSA4LjhDMzk3LjggMTMuNCAzODcuNyAzMSAzOTIuMyA0OGwyNC41IDkxLjRMMzA4LjUgMTY3LjVsLTYuMy0xOC4xQzI5Ny43IDEzNi42IDI4NS42IDEyOCAyNzIgMTI4cy0yNS43IDguNi0zMC4yIDIxLjRsLTEzLjYgMzlMOTYgMjIyLjZWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjQ0OEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDA2LjdMMzQwIDI1Ny41bC02Mi4yIDE2LjFMMzA1LjMgMzUySDIzOC43TDI2NSAyNzdsLTc0LjYgMTkuM0wxMzcuMyA0NDhIOTZWMjg4LjhsMzM3LjQtODcuNSAyNS4yIDk0YzQuNiAxNy4xIDIyLjEgMjcuMiAzOS4yIDIyLjZsMTUuNS00LjFjNDIuNy0xMS40IDY4LTU1LjMgNTYuNi05OEw1MjguMyA2MS4zek0yMDUuMSA0NDhsMTEuMi0zMkgzMjcuN2wxMS4yIDMySDIwNS4xelwiXVxufTtcbnZhciBmYVZhdWx0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZhdWx0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMmM1XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg4MGwxNiAzMmg2NGwxNi0zMkg0MDBsMTYgMzJoNjRsMTYtMzJoMTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyNCAzMjBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMjQwYTE2MCAxNjAgMCAxIDEgMCAzMjAgMTYwIDE2MCAwIDEgMSAwLTMyMHpNNDgwIDIyMS4zVjMzNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyMjEuM2MtMTguNi02LjYtMzItMjQuNC0zMi00NS4zYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhjMCAyMC45LTEzLjQgMzguNy0zMiA0NS4zelwiXVxufTtcbnZhciBmYU1hcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycycsXG4gIGljb246IFs0NDgsIDUxMiwgWzk3OTRdLCBcImYyMjJcIiwgXCJNMjg5LjggNDYuOGMzLjctOSAxMi41LTE0LjggMjIuMi0xNC44SDQyNGMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxNjhjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzMuNC0zMy40TDMyMSAyMDQuMmMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44YzAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzAgNDAxLjIgMCAzMDRzNzguOC0xNzYgMTc2LTE3NmMzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDUyLjYtNTIuNkwyOTUgNzNjLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJ6TTQwMCA4MGwwIDBoMHYwek0xNzYgNDE2YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHpcIl1cbn07XG52YXIgZmFUb2lsZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9pbGV0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NzAxXSwgXCJmN2Q4XCIsIFwiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhoOFYxOTYuOWMtMS45IDEuNC0zLjggMi45LTUuNiA0LjRDMTAuOSAyMTQuNSAwIDIzMi45IDAgMjU2YzAgNDYuOSAxNC4zIDg0LjEgMzcgMTEyLjVjMTQuMiAxNy43IDMxLjEgMzEuMyA0OC41IDQxLjhMNjUuNiA0NjkuOWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOHMxNS43IDEzLjMgMjYgMTMuM0gzNTJjMTAuMyAwIDE5LjktNC45IDI2LTEzLjNzNy43LTE5LjEgNC40LTI4LjhsLTE5LjgtNTkuNWMxNy40LTEwLjUgMzQuMy0yNC4xIDQ4LjUtNDEuOGMyMi43LTI4LjQgMzctNjUuNSAzNy0xMTIuNWMwLTIzLjEtMTAuOS00MS41LTI2LjQtNTQuNmMtMS44LTEuNS0zLjctMy01LjYtNC40VjQ4aDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjR6TTM4NCAyNTYuM2MwIDEtLjMgMi42LTMuOCA1LjZjLTQuOCA0LjEtMTQgOS0yOS4zIDEzLjRDMzIwLjUgMjg0IDI3Ni4xIDI4OCAyMjQgMjg4cy05Ni41LTQtMTI2LjktMTIuOGMtMTUuMy00LjQtMjQuNS05LjMtMjkuMy0xMy40Yy0zLjUtMy0zLjgtNC42LTMuOC01LjZsMC0uMyAwLS4xYzAtMSAwLTIuNSAzLjgtNS44YzQuOC00LjEgMTQtOSAyOS4zLTEzLjRDMTI3LjUgMjI4IDE3MS45IDIyNCAyMjQgMjI0czk2LjUgNCAxMjYuOSAxMi44YzE1LjMgNC40IDI0LjUgOS4zIDI5LjMgMTMuNGMzLjggMy4yIDMuOCA0LjggMy44IDUuOGwwIC4xIDAgLjN6TTMyOC4yIDM4NGwtLjIgLjUgMC0uNWguMnpNMTEyIDY0aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFQbGFuZUNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW5lLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU1N1wiLCBcIk0yNTYgMGMtMzUgMC02NCA1OS41LTY0IDkzLjd2ODQuNkw4LjEgMjgzLjRjLTUgMi44LTguMSA4LjItOC4xIDEzLjl2NjUuNWMwIDEwLjYgMTAuMiAxOC4zIDIwLjQgMTUuNGwxNzEuNi00OSAwIDcwLjktNTcuNiA0My4yYy00IDMtNi40IDcuOC02LjQgMTIuOHY0MmMwIDcuOCA2LjMgMTQgMTQgMTRjMS4zIDAgMi42LS4yIDMuOS0uNUwyNTYgNDgwbDExMC4xIDMxLjVjMS4zIC40IDIuNiAuNSAzLjkgLjVjNiAwIDExLjEtMy43IDEzLjEtOUMzNDQuNSA0NzAuNyAzMjAgNDIyLjIgMzIwIDM2OGMwLTYwLjYgMzAuNi0xMTQgNzcuMS0xNDUuNkwzMjAgMTc4LjNWOTMuN0MzMjAgNTkuNSAyOTIgMCAyNTYgMHpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xudmFyIGZhWWVuU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd5ZW4tc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgWzE2NSwgXCJjbnlcIiwgXCJqcHlcIiwgXCJybWJcIiwgXCJ5ZW5cIl0sIFwiZjE1N1wiLCBcIk01OC42IDQ2LjJDNDguOCAzMS41IDI5IDI3LjYgMTQuMyAzNy40Uy00LjQgNjcgNS40IDgxLjdMMTAwLjIgMjI0SDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwdjMySDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwdjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzg0aDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MlYyODhoODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjE5LjhMMzE0LjYgODEuN2M5LjgtMTQuNyA1LjgtMzQuNi04LjktNDQuNHMtMzQuNi01LjgtNDQuNCA4LjlMMTYwIDE5OC4zIDU4LjYgNDYuMnpcIl1cbn07XG52YXIgZmFDbnkgPSBmYVllblNpZ247XG52YXIgZmFKcHkgPSBmYVllblNpZ247XG52YXIgZmFSbWIgPSBmYVllblNpZ247XG52YXIgZmFZZW4gPSBmYVllblNpZ247XG52YXIgZmFSdWJsZVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVibGUtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgWzgzODEsIFwicm91YmxlXCIsIFwicnViXCIsIFwicnVibGVcIl0sIFwiZjE1OFwiLCBcIk05NiAzMkM3OC4zIDMyIDY0IDQ2LjMgNjQgNjRWMjU2SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0djMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDE2SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxMjhWMzIwSDI0MGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NEg5NnpNMjQwIDI1NkgxMjhWOTZIMjQwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwelwiXVxufTtcbnZhciBmYVJvdWJsZSA9IGZhUnVibGVTaWduO1xudmFyIGZhUnViID0gZmFSdWJsZVNpZ247XG52YXIgZmFSdWJsZSA9IGZhUnVibGVTaWduO1xudmFyIGZhU3VuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1bicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3MjhdLCBcImYxODVcIiwgXCJNMzYxLjUgMS4yYzUgMi4xIDguNiA2LjYgOS42IDExLjlMMzkxIDEyMWwxMDcuOSAxOS44YzUuMyAxIDkuOCA0LjYgMTEuOSA5LjZzMS41IDEwLjctMS42IDE1LjJMNDQ2LjkgMjU2bDYyLjMgOTAuM2MzLjEgNC41IDMuNyAxMC4yIDEuNiAxNS4ycy02LjYgOC42LTExLjkgOS42TDM5MSAzOTEgMzcxLjEgNDk4LjljLTEgNS4zLTQuNiA5LjgtOS42IDExLjlzLTEwLjcgMS41LTE1LjItMS42TDI1NiA0NDYuOWwtOTAuMyA2Mi4zYy00LjUgMy4xLTEwLjIgMy43LTE1LjIgMS42cy04LjYtNi42LTkuNi0xMS45TDEyMSAzOTEgMTMuMSAzNzEuMWMtNS4zLTEtOS44LTQuNi0xMS45LTkuNnMtMS41LTEwLjcgMS42LTE1LjJMNjUuMSAyNTYgMi44IDE2NS43Yy0zLjEtNC41LTMuNy0xMC4yLTEuNi0xNS4yczYuNi04LjYgMTEuOS05LjZMMTIxIDEyMSAxNDAuOSAxMy4xYzEtNS4zIDQuNi05LjggOS42LTExLjlzMTAuNy0xLjUgMTUuMiAxLjZMMjU2IDY1LjEgMzQ2LjMgMi44YzQuNS0zLjEgMTAuMi0zLjcgMTUuMi0xLjZ6TTE2MCAyNTZhOTYgOTYgMCAxIDEgMTkyIDAgOTYgOTYgMCAxIDEgLTE5MiAwem0yMjQgMGExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAwelwiXVxufTtcbnZhciBmYUd1aXRhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdndWl0YXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3YTZcIiwgXCJNNDY1IDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDM4MyA1NWMtMi40IDIuNC00LjMgNS4zLTUuNSA4LjVsLTE1LjQgNDEtNzcuNSA3Ny42Yy00NS4xLTI5LjQtOTkuMy0zMC4yLTEzMSAxLjZjLTExIDExLTE4IDI0LjYtMjEuNCAzOS42Yy0zLjcgMTYuNi0xOS4xIDMwLjctMzYuMSAzMS42Yy0yNS42IDEuMy00OS4zIDEwLjctNjcuMyAyOC42Qy0xNiAzMjguNC03LjYgNDA5LjQgNDcuNSA0NjQuNXMxMzYuMSA2My41IDE4MC45IDE4LjdjMTcuOS0xNy45IDI3LjQtNDEuNyAyOC42LTY3LjNjLjktMTcgMTUtMzIuMyAzMS42LTM2LjFjMTUtMy40IDI4LjYtMTAuNSAzOS42LTIxLjRjMzEuOC0zMS44IDMxLTg1LjkgMS42LTEzMWw3Ny42LTc3LjYgNDEtMTUuNGMzLjItMS4yIDYuMS0zLjEgOC41LTUuNWw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0NjUgN3pNMjA4IDI1NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xudmFyIGZhRmFjZUxhdWdoV2luayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWxhdWdoLXdpbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxhdWdoLXdpbmtcIl0sIFwiZjU5Y1wiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNOTYuOCAzMTQuMWMtMy44LTEzLjcgNy40LTI2LjEgMjEuNi0yNi4xSDM5My42YzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6TTE0NC40IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNTYuNCAyNS42Yy01LjMgNy4xLTE1LjMgOC41LTIyLjQgMy4ycy04LjUtMTUuMy0zLjItMjIuNGMzMC40LTQwLjUgOTEuMi00MC41IDEyMS42IDBjNS4zIDcuMSAzLjkgMTcuMS0zLjIgMjIuNHMtMTcuMSAzLjktMjIuNC0zLjJjLTE3LjYtMjMuNS01Mi44LTIzLjUtNzAuNCAwelwiXVxufTtcbnZhciBmYUxhdWdoV2luayA9IGZhRmFjZUxhdWdoV2luaztcbnZhciBmYUhvcnNlSGVhZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3JzZS1oZWFkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmN2FiXCIsIFwiTTY0IDQ2NFYzMTYuOWMwLTEwOC40IDY4LjMtMjA1LjEgMTcwLjUtMjQxLjNMNDA0LjIgMTUuNUM0MjUuNiA3LjkgNDQ4IDIzLjggNDQ4IDQ2LjRjMCAxMS01LjUgMjEuMi0xNC42IDI3LjNMNDAwIDk2YzQ4LjEgMCA5MS4yIDI5LjggMTA4LjEgNzQuOWw0OC42IDEyOS41YzExLjggMzEuNCA0LjEgNjYuOC0xOS42IDkwLjVjLTE2IDE2LTM3LjggMjUuMS02MC41IDI1LjFoLTMuNGMtMjYuMSAwLTUwLjktMTEuNi02Ny42LTMxLjdsLTMyLjMtMzguN2MtMTEuNyA0LjEtMjQuMiA2LjQtMzcuMyA2LjRsLS4xIDAgMCAwYy02LjMgMC0xMi41LS41LTE4LjYtMS41Yy0zLjYtLjYtNy4yLTEuNC0xMC43LTIuM2wwIDBjLTI4LjktNy44LTUzLjEtMjYuOC02Ny44LTUyLjJjLTQuNC03LjYtMTQuMi0xMC4zLTIxLjktNS44cy0xMC4zIDE0LjItNS44IDIxLjljMjQgNDEuNSA2OC4zIDcwIDExOS4zIDcxLjlsNDcuMiA3MC44YzQgNi4xIDYuMiAxMy4yIDYuMiAyMC40YzAgMjAuMy0xNi41IDM2LjgtMzYuOCAzNi44SDExMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6TTM5MiAyMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbnZhciBmYUJvcmVIb2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvcmUtaG9sZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRjM1wiLCBcIk0yNTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWMjk2LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTIzLjctMTIuOS00NC40LTMyLTU1LjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQ4IDEyOGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQ2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlYzNTJjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZWMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ4elwiXVxufTtcbnZhciBmYUluZHVzdHJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2luZHVzdHJ5JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjc1XCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NFYzMDR2NDggODBjMCAyNi41IDIxLjUgNDggNDggNDhINDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjMwNCAxNTIuMmMwLTE4LjItMTkuNC0yOS43LTM1LjQtMjEuMUwzNTIgMjE1LjRWMTUyLjJjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFMMTYwIDIxNS40VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDY0elwiXVxufTtcbnZhciBmYUNpcmNsZURvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWRvd24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NiwgXCJhcnJvdy1hbHQtY2lyY2xlLWRvd25cIl0sIFwiZjM1OFwiLCBcIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDB6TTM3Ni45IDI5NC42TDI2OS44IDM5NC41Yy0zLjggMy41LTguNyA1LjUtMTMuOCA1LjVzLTEwLjEtMi0xMy44LTUuNUwxMzUuMSAyOTQuNmMtNC41LTQuMi03LjEtMTAuMS03LjEtMTYuM2MwLTEyLjMgMTAtMjIuMyAyMi4zLTIyLjNsNTcuNyAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDU3LjcgMGMxMi4zIDAgMjIuMyAxMCAyMi4zIDIyLjNjMCA2LjItMi42IDEyLjEtNy4xIDE2LjN6XCJdXG59O1xudmFyIGZhQXJyb3dBbHRDaXJjbGVEb3duID0gZmFDaXJjbGVEb3duO1xudmFyIGZhQXJyb3dzVHVyblRvRG90cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtdHVybi10by1kb3RzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGMxXCIsIFwiTTI0OS40IDI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wyNjkuMyA5NiA0MTYgOTZjNTMgMCA5NiA0MyA5NiA5NnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTE0Ni43IDAgMjUuNCAyNS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsODAtODB6bTEzLjMgMjU2bDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQyLjcgNDE2IDk2IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4YzAtNTMgNDMtOTYgOTYtOTZsMTQ2LjcgMC0yNS40LTI1LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDB6TTM4NCAzODRhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek02NCAxOTJBNjQgNjQgMCAxIDEgNjQgNjRhNjQgNjQgMCAxIDEgMCAxMjh6XCJdXG59O1xudmFyIGZhRmxvcmluU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbG9yaW4tc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTE4NFwiLCBcIk0zMTQuNyAzMmMtMzguOCAwLTczLjcgMjMuMy04OC42IDU5LjFMMTcwLjcgMjI0SDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwTDk4LjkgMzk2LjNjLTUgMTEuOS0xNi42IDE5LjctMjkuNSAxOS43SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY5LjNjMzguOCAwIDczLjctMjMuMyA4OC42LTU5LjFMMjEzLjMgMjg4SDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyNDBsNDUuMS0xMDguM2M1LTExLjkgMTYuNi0xOS43IDI5LjUtMTkuN0gzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzE0Ljd6XCJdXG59O1xudmFyIGZhQXJyb3dEb3duU2hvcnRXaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24tc2hvcnQtd2lkZScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbW91bnQtZGVzY1wiLCBcInNvcnQtYW1vdW50LWRvd24tYWx0XCJdLCBcImY4ODRcIiwgXCJNMTUxLjYgNDY5LjZDMTQ1LjUgNDc2LjIgMTM3IDQ4MCAxMjggNDgwcy0xNy41LTMuOC0yMy42LTEwLjRsLTg4LTk2Yy0xMS45LTEzLTExLjEtMzMuMyAyLTQ1LjJzMzMuMy0xMS4xIDQ1LjIgMkw5NiAzNjUuN1Y2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjM2NS43bDMyLjQtMzUuNGMxMS45LTEzIDMyLjItMTMuOSA0NS4yLTJzMTMuOSAzMi4yIDIgNDUuMmwtODggOTZ6TTMyMCAzMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4aDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFTb3J0QW1vdW50RGVzYyA9IGZhQXJyb3dEb3duU2hvcnRXaWRlO1xudmFyIGZhU29ydEFtb3VudERvd25BbHQgPSBmYUFycm93RG93blNob3J0V2lkZTtcbnZhciBmYUxlc3NUaGFuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xlc3MtdGhhbicsXG4gIGljb246IFszODQsIDUxMiwgWzYyNzc0XSwgXCIzY1wiLCBcIk0zODAuNiA4MS43YzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlMMTAzLjYgMjU2IDM2Ni4zIDM4Ny40YzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlzLTI3LjEgMjIuMi00Mi45IDE0LjNsLTMyMC0xNjBDNi44IDI3OS4yIDAgMjY4LjEgMCAyNTZzNi44LTIzLjIgMTcuNy0yOC42bDMyMC0xNjBjMTUuOC03LjkgMzUtMS41IDQyLjkgMTQuM3pcIl1cbn07XG52YXIgZmFBbmdsZURvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtZG93bicsXG4gIGljb246IFs0NDgsIDUxMiwgWzg5NjRdLCBcImYxMDdcIiwgXCJNMjAxLjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzA2LjcgODYuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHpcIl1cbn07XG52YXIgZmFDYXJUdW5uZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyLXR1bm5lbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRkZVwiLCBcIk0yNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0aDQyLjhjLTYuNi01LjktMTAuOC0xNC40LTEwLjgtMjRWMzc2YzAtMjAuOCAxMS4zLTM4LjkgMjguMS00OC42bDIxLTY0LjdjNy41LTIzLjEgMjktMzguNyA1My4zLTM4LjdIMzEzLjZjMjQuMyAwIDQ1LjggMTUuNiA1My4zIDM4LjdsMjEgNjQuN2MxNi44IDkuNyAyOC4yIDI3LjggMjguMiA0OC42VjQ4OGMwIDkuNi00LjIgMTguMS0xMC44IDI0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYyNTZDNTEyIDExNC42IDM5Ny40IDAgMjU2IDB6TTM2Mi44IDUxMmMtNi42LTUuOS0xMC44LTE0LjQtMTAuOC0yNFY0NDhIMTYwdjQwYzAgOS42LTQuMiAxOC4xLTEwLjggMjRIMzYyLjh6TTE5MC44IDI3Ny41TDE3NyAzMjBIMzM1bC0xMy44LTQyLjVjLTEuMS0zLjMtNC4xLTUuNS03LjYtNS41SDE5OC40Yy0zLjUgMC02LjUgMi4yLTcuNiA1LjV6TTE2OCA0MDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yMDAtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpcIl1cbn07XG52YXIgZmFIZWFkU2lkZUNvdWdoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWQtc2lkZS1jb3VnaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MVwiLCBcIk0wIDIyNC4yQzAgMTAwLjYgMTAwLjIgMCAyMjQgMGgyNGM5NS4yIDAgMTgxLjIgNjkuMyAxOTcuMyAxNjAuMmMyLjMgMTMgNi44IDI1LjcgMTUuMSAzNmw0MiA1Mi42YzYuMiA3LjggOS42IDE3LjQgOS42IDI3LjRjMCAyNC4yLTE5LjYgNDMuOC00My44IDQzLjhINDQ4djAgMzJMMzM5LjIgMzY1LjZjLTExIDEuNC0xOS4yIDEwLjctMTkuMiAyMS44YzAgMTEuNiA5IDIxLjIgMjAuNiAyMS45TDQ0OCA0MTZ2MTZjMCAyNi41LTIxLjUgNDgtNDggNDhIMzIwdjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRIMjU2djBIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwNy4zYzAtMTYuNy02LjktMzIuNS0xNy4xLTQ1LjhDMTYuNiAzMjIuNCAwIDI3NC4xIDAgMjI0LjJ6bTM1Mi0uMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTQ2NCAzODRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTUyLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNNTkyIDQ4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek01NTIgMzEyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAtMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNTUyIDQwOGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xudmFyIGZhR3JpcExpbmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyaXAtbGluZXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY3YTRcIiwgXCJNMzIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDI4OHptMC0xMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMTYwelwiXVxufTtcbnZhciBmYVRodW1ic0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGh1bWJzLWRvd24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzgsIDYxNTc2XSwgXCJmMTY1XCIsIFwiTTMxMy40IDQ3OS4xYzI2LTUuMiA0Mi45LTMwLjUgMzcuNy01Ni41bC0yLjMtMTEuNGMtNS4zLTI2LjctMTUuMS01Mi4xLTI4LjgtNzUuMkg0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhjMC0xOC41LTEwLjUtMzQuNi0yNS45LTQyLjZDNDk3IDIzNi42IDUwNCAyMjMuMSA1MDQgMjA4YzAtMjMuNC0xNi44LTQyLjktMzguOS00Ny4xYzQuNC03LjMgNi45LTE1LjggNi45LTI0LjljMC0yMS4zLTEzLjktMzkuNC0zMy4xLTQ1LjZjLjctMy4zIDEuMS02LjggMS4xLTEwLjRjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjk0LjVjLTE5IDAtMzcuNSA1LjYtNTMuMyAxNi4xTDIwMi43IDczLjhDMTc2IDkxLjYgMTYwIDEyMS42IDE2MCAxNTMuN1YxOTJ2NDggMjQuOWMwIDI5LjIgMTMuMyA1Ni43IDM2IDc1bDcuNCA1LjljMjYuNSAyMS4yIDQ0LjYgNTEgNTEuMiA4NC4ybDIuMyAxMS40YzUuMiAyNiAzMC41IDQyLjkgNTYuNSAzNy43ek0zMiAzODRIOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgOTYgMCAxMTAuMyAwIDEyOFYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJ6XCJdXG59O1xudmFyIGZhVXNlckxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTAyXCIsIFwiTTIyNCAyNTZBMTI4IDEyOCAwIDEgMCAyMjQgMGExMjggMTI4IDAgMSAwIDAgMjU2em0tNDUuNyA0OEM3OS44IDMwNCAwIDM4My44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMkgzOTIuNmMtNS40LTkuNC04LjYtMjAuMy04LjYtMzJWMzUyYzAtMi4xIC4xLTQuMiAuMy02LjNjLTMxLTI2LTcxLTQxLjctMTE0LjYtNDEuN0gxNzguM3pNNTI4IDI0MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEg0OTZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0TG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yaWdodC1sb25nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsb25nLWFycm93LXJpZ2h0XCJdLCBcImYxNzhcIiwgXCJNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcwLjcgMC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHpcIl1cbn07XG52YXIgZmFMb25nQXJyb3dSaWdodCA9IGZhQXJyb3dSaWdodExvbmc7XG52YXIgZmFBbmNob3JDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmNob3ItY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGFjXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzguMiAwIDE2LjMtLjYgMjQuMi0xLjhjLTIyLjItMTYuMi00MC40LTM3LjUtNTMtNjIuMkgzMjBWMzY4IDI0MGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDEuMXpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xudmFyIGZhRWxsaXBzaXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWxsaXBzaXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImVsbGlwc2lzLWhcIl0sIFwiZjE0MVwiLCBcIk04IDI1NmE1NiA1NiAwIDEgMSAxMTIgMEE1NiA1NiAwIDEgMSA4IDI1NnptMTYwIDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yMTYtNTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6XCJdXG59O1xudmFyIGZhRWxsaXBzaXNIID0gZmFFbGxpcHNpcztcbnZhciBmYUNoZXNzUGF3biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1wYXduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTgyM10sIFwiZjQ0M1wiLCBcIk0yMTUuNSAyMjRjMjkuMi0xOC40IDQ4LjUtNTAuOSA0OC41LTg4YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0UzU2IDc4LjYgNTYgMTM2YzAgMzcuMSAxOS40IDY5LjYgNDguNSA4OEg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJjMCAxNi41IDEyLjUgMzAgMjguNSAzMS44TDgwIDQwMEgyNDBMMjI3LjUgMjg3LjhjMTYtMS44IDI4LjUtMTUuMyAyOC41LTMxLjhjMC0xNy43LTE0LjMtMzItMzItMzJoLTguNXpNMjIuNiA0NzMuNGMtNC4yIDQuMi02LjYgMTAtNi42IDE2QzE2IDUwMS45IDI2LjEgNTEyIDM4LjYgNTEySDI4MS40YzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZMMjU2IDQzMkg2NEwyMi42IDQ3My40elwiXVxufTtcbnZhciBmYUtpdE1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAna2l0LW1lZGljYWwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImZpcnN0LWFpZFwiXSwgXCJmNDc5XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDk2VjMySDY0em02NCAwVjQ4MEg0NDhWMzJIMTI4ek01MTIgNDgwYzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDQ4MFY0ODBoMzJ6TTI1NiAxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDMyMHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjg4SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZoNDhWMTc2elwiXVxufTtcbnZhciBmYUZpcnN0QWlkID0gZmFLaXRNZWRpY2FsO1xudmFyIGZhUGVyc29uVGhyb3VnaFdpbmRvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tdGhyb3VnaC13aW5kb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1YTlcIiwgXCJNNjQgNjRsMjI0IDAgMCA5LjhjMCAzOS0yMy43IDc0LTU5LjkgODguNEMxNjcuNiAxODYuNSAxMjggMjQ1IDEyOCAzMTAuMmwwIDczLjhzMCAwIDAgMEg2NFY2NHptMjg4IDBsMjI0IDBWMzg0SDUwOC4zbC0zLjctNC41LTc1LjItOTAuMmMtOS4xLTEwLjktMjIuNi0xNy4zLTM2LjktMTcuM2wtNzEuMSAwLTQxLTYzLjFjLS4zLS41LS42LTEtMS0xLjRjNDQuNy0yOSA3Mi41LTc5IDcyLjUtMTMzLjZsMC05Ljh6bTczIDMyMEgzNzkuMmw0Mi43IDY0SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OEMyMS41IDAgMCAyMS41IDAgNDhWNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMwOC4ybDMzLjIgNDkuOGM5LjggMTQuNyAyOS43IDE4LjcgNDQuNCA4LjlzMTguNy0yOS43IDguOS00NC40TDMxMC41IDMzNmw3NC42IDAgNDAgNDh6bS0xNTkuNSAwSDE5MnMwIDAgMCAwbDAtNzMuOGMwLTEwLjIgMS42LTIwLjEgNC43LTI5LjVMMjY1LjUgMzg0ek0xOTIgMTI4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6XCJdXG59O1xudmFyIGZhVG9vbGJveCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b29sYm94JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIwXSwgXCJmNTUyXCIsIFwiTTE3NiA4OGwwIDQwIDE2MCAwIDAtNDBjMC00LjQtMy42LTgtOC04TDE4NCA4MGMtNC40IDAtOCAzLjYtOCA4em0tNDggNDBsMC00MGMwLTMwLjkgMjUuMS01NiA1Ni01NmwxNDQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQwIDI4LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDUxLjkgNTEuOWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOWwwIDkyLjEtMTI4IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyLTEyOCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMkwwIDMyMGwwLTkyLjFjMC0xMi43IDUuMS0yNC45IDE0LjEtMzMuOWw1MS45LTUxLjljOS05IDIxLjItMTQuMSAzMy45LTE0LjFsMjguMSAwek0wIDQxNmwwLTY0IDEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwxMjggMCAwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6XCJdXG59O1xudmFyIGZhSGFuZHNIb2xkaW5nQ2lyY2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWhvbGRpbmctY2lyY2xlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGZiXCIsIFwiTTMyMCAwYTEyOCAxMjggMCAxIDEgMCAyNTZBMTI4IDEyOCAwIDEgMSAzMjAgMHpNNDAgNjRjMjIuMSAwIDQwIDE3LjkgNDAgNDB2NDAgODAgNDAuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1MS4xIDUxLjFjOC4zIDguMyAyMS4zIDkuNiAzMSAzLjFjMTIuOS04LjYgMTQuNy0yNi45IDMuNy0zNy44bC0xNS4yLTE1LjItMzItMzJjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMzIgMzIgMTUuMiAxNS4yIDAgMCAyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMlY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhIMTczLjNjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDI4LjEgMzkzLjRDMTAuMSAzNzUuNCAwIDM1MSAwIDMyNS41VjIyNCAxNjAgMTA0QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHY1NiA2NFYzMjUuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdINDAwYy0yNi41IDAtNDgtMjEuNS00OC00OFYzODUuMWMwLTI5LjcgMTEuOC01OC4yIDMyLjgtNzkuMmwyNS4zLTI1LjMgMCAwIDE1LjItMTUuMiAzMi0zMmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0zMiAzMi0xNS4yIDE1LjJjLTExIDExLTkuMiAyOS4yIDMuNyAzNy44YzkuNyA2LjUgMjIuNyA1LjIgMzEtMy4xbDUxLjEtNTEuMWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zVjIyNCAxNDQgMTA0YzAtMjIuMSAxNy45LTQwIDQwLTQwelwiXVxufTtcbnZhciBmYUJ1ZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxODhcIiwgXCJNMjU2IDBjNTMgMCA5NiA0MyA5NiA5NnYzLjZjMCAxNS43LTEyLjcgMjguNC0yOC40IDI4LjRIMTg4LjRjLTE1LjcgMC0yOC40LTEyLjctMjguNC0yOC40Vjk2YzAtNTMgNDMtOTYgOTYtOTZ6TTQxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNjQgNjRjLjcgLjcgMS4zIDEuNCAxLjkgMi4xYzE0LjItNy4zIDMwLjQtMTEuNCA0Ny41LTExLjRIMzEyYzE3LjEgMCAzMy4yIDQuMSA0Ny41IDExLjRjLjYtLjcgMS4yLTEuNCAxLjktMi4xbDY0LTY0YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0Yy0uNyAuNy0xLjQgMS4zLTIuMSAxLjljNi4yIDEyIDEwLjEgMjUuMyAxMS4xIDM5LjVINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDQxNmMwIDI0LjYtNS41IDQ3LjgtMTUuNCA2OC42YzIuMiAxLjMgNC4yIDIuOSA2IDQuOGw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtNjMuMS02My4xYy0yNC41IDIxLjgtNTUuOCAzNi4yLTkwLjMgMzkuNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWNDc5LjJjLTM0LjUtMy40LTY1LjgtMTcuOC05MC4zLTM5LjZMODYuNiA1MDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjMS45LTEuOSAzLjktMy40IDYtNC44QzEwMS41IDM2Ny44IDk2IDM0NC42IDk2IDMyMEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg5Ni4zYzEuMS0xNC4xIDUtMjcuNSAxMS4xLTM5LjVjLS43LS42LTEuNC0xLjItMi4xLTEuOWwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zelwiXVxufTtcbnZhciBmYUNyZWRpdENhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3JlZGl0LWNhcmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxNzksIDYyMDgzLCBcImNyZWRpdC1jYXJkLWFsdFwiXSwgXCJmMDlkXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZ2MzJINTc2Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek01NzYgMjI0SDBWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYyMjR6TTExMiAzNTJoNjRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0xMTIgMTZjMC04LjggNy4yLTE2IDE2LTE2SDM2OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyNDBjLTguOCAwLTE2LTcuMi0xNi0xNnpcIl1cbn07XG52YXIgZmFDcmVkaXRDYXJkQWx0ID0gZmFDcmVkaXRDYXJkO1xudmFyIGZhQ2FyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY2NCwgXCJhdXRvbW9iaWxlXCJdLCBcImYxYjlcIiwgXCJNMTM1LjIgMTE3LjRMMTA5LjEgMTkySDQwMi45bC0yNi4xLTc0LjZDMzcyLjMgMTA0LjYgMzYwLjIgOTYgMzQ2LjYgOTZIMTY1LjRjLTEzLjYgMC0yNS43IDguNi0zMC4yIDIxLjR6TTM5LjYgMTk2LjhMNzQuOCA5Ni4zQzg4LjMgNTcuOCAxMjQuNiAzMiAxNjUuNCAzMkgzNDYuNmM0MC44IDAgNzcuMSAyNS44IDkwLjYgNjQuM2wzNS4yIDEwMC41YzIzLjIgOS42IDM5LjYgMzIuNSAzOS42IDU5LjJWNDAwdjQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDAwSDk2djQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDAgMjU2YzAtMjYuNyAxNi40LTQ5LjYgMzkuNi01OS4yek0xMjggMjg4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI4OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhQXV0b21vYmlsZSA9IGZhQ2FyO1xudmFyIGZhSGFuZEhvbGRpbmdIYW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtaG9sZGluZy1oYW5kJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGY3XCIsIFwiTTcuOCAyMDcuN2MtMTMuMS0xNy44LTkuMy00Mi44IDguNS01NS45TDE0Mi45IDU4LjVDMTY2LjIgNDEuMyAxOTQuNSAzMiAyMjMuNSAzMkgzODQgNTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDUwNy4ybC00NC45IDM2Yy0yMi43IDE4LjItNTAuOSAyOC04MCAyOEgzMDQgMjg4IDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2NCAxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxODMuNEw2My43IDIxNi4yYy0xNy44IDEzLjEtNDIuOCA5LjMtNTUuOS04LjV6TTM4Mi40IDE2MGwwIDAgLjkgMGMtLjMgMC0uNiAwLS45IDB6TTU2OC4yIDMwNC4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0NTMuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJINjguOGw0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4SDI3MmgxNiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyODggMjcyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDM5Mi42bDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzNTJsMCAwLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdXG59O1xudmFyIGZhQm9va09wZW5SZWFkZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1vcGVuLXJlYWRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYm9vay1yZWFkZXJcIl0sIFwiZjVkYVwiLCBcIk0xNjAgOTZhOTYgOTYgMCAxIDEgMTkyIDBBOTYgOTYgMCAxIDEgMTYwIDk2em04MCAxNTJWNTEybC00OC40LTI0LjJjLTIwLjktMTAuNC00My41LTE3LTY2LjgtMTkuM2wtOTYtOS42QzEyLjUgNDU3LjIgMCA0NDMuNSAwIDQyN1YyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJINjIuM2M2My42IDAgMTI1LjYgMTkuNiAxNzcuNyA1NnptMzIgMjY0VjI0OGM1Mi4xLTM2LjQgMTE0LjEtNTYgMTc3LjctNTZINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQyN2MwIDE2LjQtMTIuNSAzMC4yLTI4LjggMzEuOGwtOTYgOS42Yy0yMy4yIDIuMy00NS45IDguOS02Ni44IDE5LjNMMjcyIDUxMnpcIl1cbn07XG52YXIgZmFCb29rUmVhZGVyID0gZmFCb29rT3BlblJlYWRlcjtcbnZhciBmYU1vdW50YWluU3VuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW50YWluLXN1bicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUyZlwiLCBcIk01NjAgMTYwQTgwIDgwIDAgMSAwIDU2MCAwYTgwIDgwIDAgMSAwIDAgMTYwek01NS45IDUxMkgzODEuMWg3NUg1NzguOWMzMy44IDAgNjEuMS0yNy40IDYxLjEtNjEuMWMwLTExLjItMy4xLTIyLjItOC45LTMxLjhsLTEzMi0yMTYuM0M0OTUgMTk2LjEgNDg3LjggMTkyIDQ4MCAxOTJzLTE1IDQuMS0xOS4xIDEwLjdsLTQ4LjIgNzlMMjg2LjggODFjLTYuNi0xMC42LTE4LjMtMTctMzAuOC0xN3MtMjQuMSA2LjQtMzAuOCAxN0w4LjYgNDI2LjRDMyA0MzUuMyAwIDQ0NS42IDAgNDU2LjFDMCA0ODcgMjUgNTEyIDU1LjkgNTEyelwiXVxufTtcbnZhciBmYUFycm93c0xlZnRSaWdodFRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtbGVmdC1yaWdodC10by1saW5lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGJhXCIsIFwiTTMyIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjk2QzAgNzguMyAxNC4zIDY0IDMyIDY0em0yMTQuNiA3My40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zTDIwNS4zIDIyNGwyMjkuNSAwLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDQzNC43IDI4OGwtMjI5LjUgMCA0MS40IDQxLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHpNNjQwIDk2VjQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYURpY2VEMjAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1kMjAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY2Y2ZcIiwgXCJNNDguNyAxMjUuOGw1My4yIDMxLjljNy44IDQuNyAxNy44IDIgMjIuMi01LjlMMjAxLjYgMTIuMWMzLTUuNC0uOS0xMi4xLTcuMS0xMi4xYy0xLjYgMC0zLjIgLjUtNC42IDEuNEw0Ny45IDk4LjhjLTkuNiA2LjYtOS4yIDIwLjkgLjggMjYuOXpNMTYgMTcxLjdWMjk1LjNjMCA4IDEwLjQgMTEgMTQuNyA0LjRsNjAtOTJjNS03LjYgMi42LTE3LjgtNS4yLTIyLjVMNDAuMiAxNThDMjkuNiAxNTEuNiAxNiAxNTkuMyAxNiAxNzEuN3pNMzEwLjQgMTIuMWw3Ny42IDEzOS42YzQuNCA3LjkgMTQuNSAxMC42IDIyLjIgNS45bDUzLjItMzEuOWMxMC02IDEwLjQtMjAuMyAuOC0yNi45TDMyMi4xIDEuNGMtMS40LS45LTMtMS40LTQuNi0xLjRjLTYuMiAwLTEwLjEgNi43LTcuMSAxMi4xek00OTYgMTcxLjdjMC0xMi40LTEzLjYtMjAuMS0yNC4yLTEzLjdsLTQ1LjMgMjcuMmMtNy44IDQuNy0xMC4xIDE0LjktNS4yIDIyLjVsNjAgOTJjNC4zIDYuNyAxNC43IDMuNiAxNC43LTQuNFYxNzEuN3ptLTQ5LjMgMjQ2TDI4Ni4xIDQzNi42Yy04LjEgLjktMTQuMSA3LjgtMTQuMSAxNS45djUyLjhjMCAzLjcgMyA2LjggNi44IDYuOGMuOCAwIDEuNi0uMSAyLjQtLjRsMTcyLjctNjRjNi4xLTIuMiAxMC4xLTggMTAuMS0xNC41YzAtOS4zLTguMS0xNi41LTE3LjMtMTUuNHpNMjMzLjIgNTEyYzMuNyAwIDYuOC0zIDYuOC02LjhWNDUyLjZjMC04LjEtNi4xLTE0LjktMTQuMS0xNS45bC0xNjAuNi0xOWMtOS4yLTEuMS0xNy4zIDYuMS0xNy4zIDE1LjRjMCA2LjUgNCAxMi4zIDEwLjEgMTQuNWwxNzIuNyA2NGMuOCAuMyAxLjYgLjQgMi40IC40ek00MS43IDM4Mi45bDE3MC45IDIwLjJjNy44IC45IDEzLjQtNy41IDkuNS0xNC4zbC04NS43LTE1MGMtNS45LTEwLjQtMjAuNy0xMC44LTI3LjMtLjhMMzAuMiAzNTguMmMtNi41IDkuOS0uMyAyMy4zIDExLjUgMjQuN3ptNDM5LjYtMjQuOEw0MDIuOSAyMzguMWMtNi41LTEwLTIxLjQtOS42LTI3LjMgLjhMMjkwLjIgMzg4LjVjLTMuOSA2LjggMS42IDE1LjIgOS41IDE0LjNsMTcwLjEtMjBjMTEuOC0xLjQgMTgtMTQuNyAxMS41LTI0LjZ6bS0yMTYuOSAxMWw3OC40LTEzNy4yYzYuMS0xMC43LTEuNi0yMy45LTEzLjktMjMuOUgxODMuMWMtMTIuMyAwLTIwIDEzLjMtMTMuOSAyMy45bDc4LjQgMTM3LjJjMy43IDYuNCAxMyA2LjQgMTYuNyAwek0xNzQuNCAxNzZIMzM3LjZjMTIuMiAwIDE5LjktMTMuMSAxNC0yMy44bC04MC0xNDRjLTIuOC01LjEtOC4yLTguMi0xNC04LjJoLTMuMmMtNS44IDAtMTEuMiAzLjItMTQgOC4ybC04MCAxNDRjLTUuOSAxMC43IDEuOCAyMy44IDE0IDIzLjh6XCJdXG59O1xudmFyIGZhVHJ1Y2tEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWRyb3BsZXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OGNcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzY4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4Vjk2aDUwLjdjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNTg5LjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNWMjU2djMyIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDU3NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NkgyNTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQ4ek00MTYgMjU2SDU0NFYyMzcuM0w0NjYuNyAxNjBINDE2djk2ek0xNjAgNDY0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMzY4LTQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTIwOCAyNzJjMzkuOCAwIDcyLTI5LjYgNzItNjZjMC0yNy0zOS40LTgyLjktNTkuOS0xMTAuM2MtNi4xLTguMi0xOC4xLTguMi0yNC4yIDBDMTc1LjQgMTIzIDEzNiAxNzkgMTM2IDIwNmMwIDM2LjUgMzIuMiA2NiA3MiA2NnpcIl1cbn07XG52YXIgZmFGaWxlQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1YTFcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4em00OCA5NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdXG59O1xudmFyIGZhVGVtcGVyYXR1cmVBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbXBlcmF0dXJlLWFycm93LXVwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJ0ZW1wZXJhdHVyZS11cFwiXSwgXCJlMDQwXCIsIFwiTTEyOCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OFYyNzYuNWMwIDE3LjMgNy4xIDMxLjkgMTUuMyA0Mi41QzI0OS44IDMzMi42IDI1NiAzNDkuNSAyNTYgMzY4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMTguNSA2LjItMzUuNCAxNi43LTQ4LjljOC4yLTEwLjYgMTUuMy0yNS4yIDE1LjMtNDIuNVYxMTJ6TTE3NiAwQzExNC4xIDAgNjQgNTAuMSA2NCAxMTJWMjc2LjRjMCAuMS0uMSAuMy0uMiAuNmMtLjIgLjYtLjggMS42LTEuNyAyLjhDNDMuMiAzMDQuMiAzMiAzMzQuOCAzMiAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGMwLTMzLjItMTEuMi02My44LTMwLjEtODguMWMtLjktMS4yLTEuNS0yLjItMS43LTIuOGMtLjEtLjMtLjItLjUtLjItLjZWMTEyQzI4OCA1MC4xIDIzNy45IDAgMTc2IDB6bTAgNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM1YxMTJjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWMzIyLjdjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OHpNNDgwIDE2MGgzMmMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOXMxNi42IDE5LjggMjkuNiAxOS44aDMyVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2MHpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZVVwID0gZmFUZW1wZXJhdHVyZUFycm93VXA7XG52YXIgZmFNZWRhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtZWRhbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzk0MV0sIFwiZjVhMlwiLCBcIk00LjEgMzguMkMxLjQgMzQuMiAwIDI5LjQgMCAyNC42QzAgMTEgMTEgMCAyNC42IDBIMTMzLjljMTEuMiAwIDIxLjcgNS45IDI3LjQgMTUuNWw2OC41IDExNC4xYy00OC4yIDYuMS05MS4zIDI4LjYtMTIzLjQgNjEuOUw0LjEgMzguMnptNTAzLjcgMEw0MDUuNiAxOTEuNWMtMzIuMS0zMy4zLTc1LjItNTUuOC0xMjMuNC02MS45TDM1MC43IDE1LjVDMzU2LjUgNS45IDM2Ni45IDAgMzc4LjEgMEg0ODcuNEM1MDEgMCA1MTIgMTEgNTEyIDI0LjZjMCA0LjgtMS40IDkuNi00LjEgMTMuNnpNODAgMzM2YTE3NiAxNzYgMCAxIDEgMzUyIDBBMTc2IDE3NiAwIDEgMSA4MCAzMzZ6bTE4NC40LTk0LjljLTMuNC03LTEzLjMtNy0xNi44IDBsLTIyLjQgNDUuNGMtMS40IDIuOC00IDQuNy03IDUuMUwxNjggMjk4LjljLTcuNyAxLjEtMTAuNyAxMC41LTUuMiAxNmwzNi4zIDM1LjRjMi4yIDIuMiAzLjIgNS4yIDIuNyA4LjNsLTguNiA0OS45Yy0xLjMgNy42IDYuNyAxMy41IDEzLjYgOS45bDQ0LjgtMjMuNmMyLjctMS40IDYtMS40IDguNyAwbDQ0LjggMjMuNmM2LjkgMy42IDE0LjktMi4yIDEzLjYtOS45bC04LjYtNDkuOWMtLjUtMyAuNS02LjEgMi43LTguM2wzNi4zLTM1LjRjNS42LTUuNCAyLjUtMTQuOC01LjItMTZsLTUwLjEtNy4zYy0zLS40LTUuNy0yLjQtNy01LjFsLTIyLjQtNDUuNHpcIl1cbn07XG52YXIgZmFCZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmVkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzE2XSwgXCJmMjM2XCIsIFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjMyMEgyODhWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDU0NGM1MyAwIDk2IDQzIDk2IDk2VjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0MTZIMzUyIDMyMCA2NHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptMTQ0IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYVNxdWFyZUggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLWgnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImgtc3F1YXJlXCJdLCBcImYwZmRcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0zMzYgMTUyVjI1NiAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjgwSDE2MGwwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjA4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2ODBIMjg4VjE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbnZhciBmYUhTcXVhcmUgPSBmYVNxdWFyZUg7XG52YXIgZmFQb2RjYXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BvZGNhc3QnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYyY2VcIiwgXCJNMzE5LjQgMzcyYzQ4LjUtMzEuMyA4MC42LTg1LjkgODAuNi0xNDhjMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZTNDggMTI2LjggNDggMjI0YzAgNjIuMSAzMi4xIDExNi42IDgwLjYgMTQ4YzEuMiAxNy4zIDQgMzggNy4yIDU3LjFsLjIgMUM1NiAzOTUuOCAwIDMxNi41IDAgMjI0QzAgMTAwLjMgMTAwLjMgMCAyMjQgMFM0NDggMTAwLjMgNDQ4IDIyNGMwIDkyLjUtNTYgMTcxLjktMTM2IDIwNi4xbC4yLTEuMWMzLjEtMTkuMiA2LTM5LjggNy4yLTU3em0tMi4zLTM4LjFjLTEuNi01LjctMy45LTExLjEtNy0xNi4yYy01LjgtOS43LTEzLjUtMTctMjEuOS0yMi40YzE5LjUtMTcuNiAzMS44LTQzIDMxLjgtNzEuM2MwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDI4LjMgMTIuMyA1My44IDMxLjggNzEuM2MtOC40IDUuNC0xNi4xIDEyLjctMjEuOSAyMi40Yy0zLjEgNS4xLTUuNCAxMC41LTcgMTYuMkM5OS44IDMwNy41IDgwIDI2OCA4MCAyMjRjMC03OS41IDY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NGMwIDQ0LTE5LjggODMuNS01MC45IDEwOS45ek0yMjQgMzEyYzMyLjkgMCA2NCA4LjYgNjQgNDMuOGMwIDMzLTEyLjkgMTA0LjEtMjAuNiAxMzIuOWMtNS4xIDE5LTI0LjUgMjMuNC00My40IDIzLjRzLTM4LjItNC40LTQzLjQtMjMuNGMtNy44LTI4LjUtMjAuNi05OS43LTIwLjYtMTMyLjhjMC0zNS4xIDMxLjEtNDMuOCA2NC00My44em0wLTE0NGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZUZ1bGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVtcGVyYXR1cmUtZnVsbCcsXG4gIGljb246IFszMjAsIDUxMiwgW1widGVtcGVyYXR1cmUtNFwiLCBcInRoZXJtb21ldGVyLTRcIiwgXCJ0aGVybW9tZXRlci1mdWxsXCJdLCBcImYyYzdcIiwgXCJNMTYwIDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OFYyNzYuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41Qzg2LjIgMzMyLjYgODAgMzQ5LjUgODAgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNVYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDExMkM0OCA1MC4yIDk4LjEgMCAxNjAgMHMxMTIgNTAuMSAxMTIgMTEyVjI3Ni41YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTMzLjIgMTEuMi02My44IDMwLjEtODguMWMuOS0xLjIgMS41LTIuMiAxLjctMi44Yy4xLS4zIC4yLS41IC4yLS42VjExMnpNMjA4IDM2OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZWMzIyLjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zelwiXVxufTtcbnZhciBmYVRlbXBlcmF0dXJlNCA9IGZhVGVtcGVyYXR1cmVGdWxsO1xudmFyIGZhVGhlcm1vbWV0ZXI0ID0gZmFUZW1wZXJhdHVyZUZ1bGw7XG52YXIgZmFUaGVybW9tZXRlckZ1bGwgPSBmYVRlbXBlcmF0dXJlRnVsbDtcbnZhciBmYUJlbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmVsbCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODI3NiwgNjE2MDJdLCBcImYwZjNcIiwgXCJNMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjUxLjJDMTE5IDY2IDY0IDEzMC42IDY0IDIwOHYxOC44YzAgNDctMTcuMyA5Mi40LTQ4LjUgMTI3LjZsLTcuNCA4LjNjLTguNCA5LjQtMTAuNCAyMi45LTUuMyAzNC40UzE5LjQgNDE2IDMyIDQxNkg0MTZjMTIuNiAwIDI0LTcuNCAyOS4yLTE4LjlzMy4xLTI1LTUuMy0zNC40bC03LjQtOC4zQzQwMS4zIDMxOS4yIDM4NCAyNzMuOSAzODQgMjI2LjhWMjA4YzAtNzcuNC01NS0xNDItMTI4LTE1Ni44VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyem00NS4zIDQ5My4zYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNIMjI0IDE2MGMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM3MyOC4zIDE4LjcgNDUuMyAxOC43czMzLjMtNi43IDQ1LjMtMTguN3pcIl1cbn07XG52YXIgZmFTdXBlcnNjcmlwdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdXBlcnNjcmlwdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjEyYlwiLCBcIk00ODAgMzJjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRsLTMyIDE2Yy0xNS44IDcuOS0yMi4yIDI3LjEtMTQuMyA0Mi45QzM5MyA3My41IDQwNC4zIDgwIDQxNiA4MHY4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMiAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzMnpNMzIgNjRDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMySDQ3LjNsODkuNiAxMjhMNDcuMyAzODRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjRjMTAuNCAwIDIwLjItNS4xIDI2LjItMTMuNkwxNzYgMzExLjhsODUuOCAxMjIuNmM2IDguNiAxNS44IDEzLjYgMjYuMiAxMy42aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMwNC43TDIxNS4xIDI1Nmw4OS42LTEyOEgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjg4Yy0xMC40IDAtMjAuMiA1LjEtMjYuMiAxMy42TDE3NiAyMDAuMiA5MC4yIDc3LjZDODQuMiA2OS4xIDc0LjQgNjQgNjQgNjRIMzJ6XCJdXG59O1xudmFyIGZhUGx1Z0NpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTYwXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44YzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN0w0NTQuNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDMyIDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDA5LjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0MzIgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG52YXIgZmFTdGFyT2ZMaWZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0YXItb2YtbGlmZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjYyMVwiLCBcIk0yMDggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTcyLjlsMTIyLTcwLjRjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDE2IDI3LjdjOC44IDE1LjMgMy42IDM0LjktMTEuNyA0My43TDM1MiAyNTZsMTIyIDcwLjRjMTUuMyA4LjggMjAuNSAyOC40IDExLjcgNDMuN2wtMTYgMjcuN2MtOC44IDE1LjMtMjguNCAyMC42LTQzLjcgMTEuN0wzMDQgMzM5LjFWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzM5LjFMODYgNDA5LjZjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN2wtMTYtMjcuN2MtOC44LTE1LjMtMy42LTM0LjkgMTEuNy00My43TDE2MCAyNTYgMzggMTg1LjZjLTE1LjMtOC44LTIwLjUtMjguNC0xMS43LTQzLjdsMTYtMjcuN0M1MS4xIDk4LjggNzAuNyA5My42IDg2IDEwMi40bDEyMiA3MC40VjMyelwiXVxufTtcbnZhciBmYVBob25lU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGhvbmUtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYzZGRcIiwgXCJNNjAxLjIgNS4xYzEwLjQtOC4yIDI1LjUtNi4zIDMzLjcgNC4xczYuMyAyNS41LTQuMSAzMy43bC01OTIgNDY0Yy0xMC40IDguMi0yNS41IDYuMy0zMy43LTQuMXMtNi4zLTI1LjUgNC4xLTMzLjdsMTU1LjYtMTIyQzEwMS44IDI3MCA2NCAxNzEuNCA2NCA2NGMwLTE4IDEyLjEtMzMuOCAyOS41LTM4LjZsODgtMjRjMTkuNC01LjMgMzkuNyA0LjYgNDcuNCAyMy4ybDQwIDk2YzYuOCAxNi4zIDIuMSAzNS4yLTExLjYgNDYuM0wyMDggMjA3LjNjMTIgMjUuNSAyNy4yIDQ5LjIgNDUgNzAuN0w2MDEuMiA1LjF6TTIzNC4zIDQxNS42bDkxLjMtNzJjMTMuNyA5LjEgMjggMTcuMyA0MyAyNC4zTDQwOSAzMTguN2MxMS4yLTEzLjcgMzAtMTguNCA0Ni4zLTExLjZsOTYgNDBjMTguNiA3LjcgMjguNSAyOCAyMy4yIDQ3LjRsLTI0IDg4QzU0NS44IDQ5OS45IDUzMCA1MTIgNTEyIDUxMmMtMTA0LjkgMC0yMDEuMy0zNi0yNzcuNy05Ni40elwiXVxufTtcbnZhciBmYVBhaW50Um9sbGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhaW50LXJvbGxlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjVhYVwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgzNTJjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0xNjAgMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjMwNGMwLTQ0LjIgMzUuOC04MCA4MC04MEg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTYwIDY5LjVjMzcuMyAxMy4yIDY0IDQ4LjcgNjQgOTAuNXYzMmMwIDUzLTQzIDk2LTk2IDk2SDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2djE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM1MnpcIl1cbn07XG52YXIgZmFIYW5kc2hha2VBbmdsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kc2hha2UtYW5nbGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImhhbmRzLWhlbHBpbmdcIl0sIFwiZjRjNFwiLCBcIk01NDQgMjQ4djMuM2w2OS43LTY5LjdjMjEuOS0yMS45IDIxLjktNTcuMyAwLTc5LjJMNTM1LjYgMjQuNGMtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDBMNDE2LjMgNjQuNWMtMi43LS4zLTUuNS0uNS04LjMtLjVIMjk2Yy0zNy4xIDAtNjcuNiAyOC03MS42IDY0SDIyNFYyNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MFYxNzZjMCAwIDAtLjEgMC0uMVYxNjBsMTYgMCAxMzYgMGMwIDAgMCAwIC4xIDBINDY0YzQ0LjIgMCA4MCAzNS44IDgwIDgwdjh6TTMzNiAxOTJ2NTZjMCAzOS44LTMyLjIgNzItNzIgNzJzLTcyLTMyLjItNzItNzJWMTI5LjRjLTM1LjkgNi4yLTY1LjggMzIuMy03NiA2OC4yTDk5LjUgMjU1LjIgMjYuMyAzMjguNGMtMjEuOSAyMS45LTIxLjkgNTcuMyAwIDc5LjJsNzguMSA3OC4xYzIxLjkgMjEuOSA1Ny4zIDIxLjkgNzkuMiAwbDM3LjctMzcuN2MuOSAwIDEuOCAuMSAyLjcgLjFIMzg0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4YzAtNS42LTEtMTEtMi43LTE2SDQzMmMyNi41IDAgNDgtMjEuNSA0OC00OGMwLTEyLjgtNS0yNC40LTEzLjItMzNjMjUuNy01IDQ1LjEtMjcuNiA0NS4yLTU0Ljh2LS40Yy0uMS0zMC44LTI1LjEtNTUuOC01Ni01NS44YzAgMCAwIDAgMCAwbC0xMjAgMHpcIl1cbn07XG52YXIgZmFIYW5kc0hlbHBpbmcgPSBmYUhhbmRzaGFrZUFuZ2xlO1xudmFyIGZhTG9jYXRpb25Eb3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbG9jYXRpb24tZG90JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJtYXAtbWFya2VyLWFsdFwiXSwgXCJmM2M1XCIsIFwiTTIxNS43IDQ5OS4yQzI2NyA0MzUgMzg0IDI3OS40IDM4NCAxOTJDMzg0IDg2IDI5OCAwIDE5MiAwUzAgODYgMCAxOTJjMCA4Ny40IDExNyAyNDMgMTY4LjMgMzA3LjJjMTIuMyAxNS4zIDM1LjEgMTUuMyA0Ny40IDB6TTE5MiAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6XCJdXG59O1xudmFyIGZhTWFwTWFya2VyQWx0ID0gZmFMb2NhdGlvbkRvdDtcbnZhciBmYUZpbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZScsXG4gIGljb246IFszODQsIDUxMiwgWzEyODE5NiwgMTI4NDU5LCA2MTQ2Ml0sIFwiZjE1YlwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgyMjRWMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0em0zODQgNjRIMjU2VjBMMzg0IDEyOHpcIl1cbn07XG52YXIgZmFHcmVhdGVyVGhhbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdncmVhdGVyLXRoYW4nLFxuICBpY29uOiBbMzg0LCA1MTIsIFs2Mjc2OV0sIFwiM2VcIiwgXCJNMy40IDgxLjdjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlMMjgwLjUgMjU2IDE3LjcgMzg3LjRDMS45IDM5NS4zLTQuNSA0MTQuNSAzLjQgNDMwLjNzMjcuMSAyMi4yIDQyLjkgMTQuM2wzMjAtMTYwYzEwLjgtNS40IDE3LjctMTYuNSAxNy43LTI4LjZzLTYuOC0yMy4yLTE3LjctMjguNmwtMzIwLTE2MGMtMTUuOC03LjktMzUtMS41LTQyLjkgMTQuM3pcIl1cbn07XG52YXIgZmFQZXJzb25Td2ltbWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tc3dpbW1pbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NDYsIFwic3dpbW1lclwiXSwgXCJmNWM0XCIsIFwiTTMwOS41IDE3OC40TDQ0Ny45IDI5Ny4xYy0xLjYgLjktMy4yIDItNC44IDNjLTE4IDEyLjQtNDAuMSAyMC4zLTU5LjIgMjAuM2MtMTkuNiAwLTQwLjgtNy43LTU5LjItMjAuM2MtMjIuMS0xNS41LTUxLjYtMTUuNS03My43IDBjLTE3LjEgMTEuOC0zOCAyMC4zLTU5LjIgMjAuM2MtMTAuMSAwLTIxLjEtMi4yLTMxLjktNi4yQzE2My4xIDE5My4yIDI2Mi4yIDk2IDM4NCA5Nmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRjLTI2LjkgMC01Mi4zIDYuNi03NC41IDE4LjR6TTE2MCAxNjBBNjQgNjQgMCAxIDEgMzIgMTYwYTY0IDY0IDAgMSAxIDEyOCAwek0zMDYuNSAzMjUuOUMzMjkgMzQxLjQgMzU2LjUgMzUyIDM4NCAzNTJjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFsMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNDA1LjcgNDE3IDQxNiAzODQgNDE2Yy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgMzQxLjIgMTY1LjEgMzUyIDE5MiAzNTJjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdXG59O1xudmFyIGZhU3dpbW1lciA9IGZhUGVyc29uU3dpbW1pbmc7XG52YXIgZmFBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bicsXG4gIGljb246IFszODQsIDUxMiwgWzg1OTVdLCBcImYwNjNcIiwgXCJNMTY5LjQgNDcwLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzcwLjggMjI0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzA2LjdMNTQuNiAyNjUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHpcIl1cbn07XG52YXIgZmFEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Ryb3BsZXQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjcsIFwidGludFwiXSwgXCJmMDQzXCIsIFwiTTE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwQzAgMjI4LjggMTMwLjIgNTcuNyAxNjYuNiAxMS43QzE3Mi42IDQuMiAxODEuNSAwIDE5MS4xIDBoMS44YzkuNiAwIDE4LjUgNC4yIDI0LjUgMTEuN0MyNTMuOCA1Ny43IDM4NCAyMjguOCAzODQgMzIwYzAgMTA2LTg2IDE5Mi0xOTIgMTkyek05NiAzMzZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwelwiXVxufTtcbnZhciBmYVRpbnQgPSBmYURyb3BsZXQ7XG52YXIgZmFFcmFzZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXJhc2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMTJkXCIsIFwiTTI5MC43IDU3LjRMNTcuNCAyOTAuN2MtMjUgMjUtMjUgNjUuNSAwIDkwLjVsODAgODBjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0gyODhoOS40SDUxMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzODcuOUw1MTguNiAyODUuM2MyNS0yNSAyNS02NS41IDAtOTAuNUwzODEuMyA1Ny40Yy0yNS0yNS02NS41LTI1LTkwLjUgMHpNMjk3LjQgNDE2SDI4OGwtMTA1LjQgMC04MC04MEwyMjcuMyAyMTEuMyAzNjQuNyAzNDguNyAyOTcuNCA0MTZ6XCJdXG59O1xudmFyIGZhRWFydGhBbWVyaWNhcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlYXJ0aC1hbWVyaWNhcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1OCwgXCJlYXJ0aFwiLCBcImVhcnRoLWFtZXJpY2FcIiwgXCJnbG9iZS1hbWVyaWNhc1wiXSwgXCJmNTdkXCIsIFwiTTU3LjcgMTkzbDkuNCAxNi40YzguMyAxNC41IDIxLjkgMjUuMiAzOCAyOS44TDE2MyAyNTUuN2MxNy4yIDQuOSAyOSAyMC42IDI5IDM4LjV2MzkuOWMwIDExIDYuMiAyMSAxNiAyNS45czE2IDE0LjkgMTYgMjUuOXYzOWMwIDE1LjYgMTQuOSAyNi45IDI5LjkgMjIuNmMxNi4xLTQuNiAyOC42LTE3LjUgMzIuNy0zMy44bDIuOC0xMS4yYzQuMi0xNi45IDE1LjItMzEuNCAzMC4zLTQwbDguMS00LjZjMTUtOC41IDI0LjItMjQuNSAyNC4yLTQxLjd2LTguM2MwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45bC0zLjktMy45Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUgyNTdjLTExLjEgMC0yMi4xLTIuOS0zMS44LTguNGwtMzQuNS0xOS43Yy00LjMtMi41LTcuNi02LjUtOS4yLTExLjJjLTMuMi05LjYgMS4xLTIwIDEwLjItMjQuNWw1LjktM2M2LjYtMy4zIDE0LjMtMy45IDIxLjMtMS41bDIzLjIgNy43YzguMiAyLjcgMTcuMi0uNCAyMS45LTcuNWM0LjctNyA0LjItMTYuMy0xLjItMjIuOGwtMTMuNi0xNi4zYy0xMC0xMi05LjktMjkuNSAuMy00MS4zbDE1LjctMTguM2M4LjgtMTAuMyAxMC4yLTI1IDMuNS0zNi43bC0yLjQtNC4yYy0zLjUtLjItNi45LS4zLTEwLjQtLjNDMTYzLjEgNDggODQuNCAxMDguOSA1Ny43IDE5M3pNNDY0IDI1NmMwLTM2LjgtOS42LTcxLjQtMjYuNC0xMDEuNUw0MTIgMTY0LjhjLTE1LjcgNi4zLTIzLjggMjMuOC0xOC41IDM5LjhsMTYuOSA1MC43YzMuNSAxMC40IDEyIDE4LjMgMjIuNiAyMC45bDI5LjEgNy4zYzEuMi05IDEuOC0xOC4yIDEuOC0yNy41ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6XCJdXG59O1xudmFyIGZhRWFydGggPSBmYUVhcnRoQW1lcmljYXM7XG52YXIgZmFFYXJ0aEFtZXJpY2EgPSBmYUVhcnRoQW1lcmljYXM7XG52YXIgZmFHbG9iZUFtZXJpY2FzID0gZmFFYXJ0aEFtZXJpY2FzO1xudmFyIGZhUGVyc29uQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWJ1cnN0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTNiXCIsIFwiTTQ4MCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04IDM4NFYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjU2LjlsMjguNiA0Ny41YzkuMSAxNS4xIDI4LjggMjAgNDMuOSAxMC45czIwLTI4LjggMTAuOS00My45bC01OC4zLTk3Yy0xNy40LTI4LjktNDguNi00Ni42LTgyLjMtNDYuNkg0NjUuMWMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjlMNDA4IDI1Ni45VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek0xOTAuOSAxOC4xQzE4OC40IDEyIDE4Mi42IDggMTc2IDhzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzRMNTUuNiA2OC45Yy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNzLTQuNiAxMi4yLTEuNCAxNy45bDM5LjUgNjkuMUwxMC45IDIwNi40Yy01LjQgMy43LTggMTAuMy02LjUgMTYuN3M2LjcgMTEuMiAxMy4xIDEyLjJsNzguNyAxMi4yTDkwLjYgMzI3Yy0uNSA2LjUgMy4xIDEyLjcgOSAxNS41czEyLjkgMS44IDE3LjgtMi42TDE3NiAyODYuMWw1OC42IDUzLjljNC44IDQuNCAxMS45IDUuNSAxNy44IDIuNnM5LjUtOSA5LTE1LjVsLTUuNi03OS40IDUwLjUtNy44IDI0LjMtNDAuNS01NS4yLTM4TDMxNSA5Mi4yYzMuMy01LjcgMi43LTEyLjgtMS40LTE3LjlzLTEwLjktNy4yLTE3LjItNS4zTDIyMC4zIDkyLjFsLTI5LjQtNzR6XCJdXG59O1xudmFyIGZhRG92ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb3ZlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzMwXSwgXCJmNGJhXCIsIFwiTTE2MC44IDk2LjVjMTQgMTcgMzEgMzAuOSA0OS41IDQyLjJjMjUuOSAxNS44IDUzLjcgMjUuOSA3Ny43IDMxLjZWMTM4LjhDMjY1LjggMTA4LjUgMjUwIDcxLjUgMjQ4LjYgMjhjLS40LTExLjMtNy41LTIxLjUtMTguNC0yNC40Yy03LjYtMi0xNS44LS4yLTIxIDUuOGMtMTMuMyAxNS40LTMyLjcgNDQuNi00OC40IDg3LjJ6TTMyMCAxNDR2MzAuNmwwIDB2MS4zbDAgMCAwIDMyLjFjLTYwLjgtNS4xLTE4NS00My44LTIxOS4zLTE1Ny4yQzk3LjQgNDAgODcuOSAzMiA3Ni42IDMyYy03LjkgMC0xNS4zIDMuOS0xOC44IDExQzQ2LjggNjUuOSAzMiAxMTIuMSAzMiAxNzZjMCAxMTYuOSA4MC4xIDE4MC41IDExOC40IDIwMi44TDExLjggNDE2LjZDNi43IDQxOCAyLjYgNDIxLjggLjkgNDI2LjhzLS44IDEwLjYgMi4zIDE0LjhDMjEuNyA0NjYuMiA3Ny4zIDUxMiAxNjAgNTEyYzMuNiAwIDcuMi0xLjIgMTAtMy41TDI0NS42IDQ0OEgzMjBjODguNCAwIDE2MC03MS42IDE2MC0xNjBWMTI4bDI5LjktNDQuOWMxLjMtMiAyLjEtNC40IDIuMS02LjhjMC02LjgtNS41LTEyLjMtMTIuMy0xMi4zSDQwMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6bTgwLTE2YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG52YXIgZmFCYXR0ZXJ5RW1wdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmF0dGVyeS1lbXB0eScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiYmF0dGVyeS0wXCJdLCBcImYyNDRcIiwgXCJNODAgMTYwYy04LjggMC0xNiA3LjItMTYgMTZWMzM2YzAgOC44IDcuMiAxNiAxNiAxNkg0NjRjOC44IDAgMTYtNy4yIDE2LTE2VjE3NmMwLTguOC03LjItMTYtMTYtMTZIODB6TTAgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwSDQ2NGM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnYxNmMwIDQ0LjItMzUuOCA4MC04MCA4MEg4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBWMTc2elwiXVxufTtcbnZhciBmYUJhdHRlcnkwID0gZmFCYXR0ZXJ5RW1wdHk7XG52YXIgZmFTb2NrcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzb2NrcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTUxMF0sIFwiZjY5NlwiLCBcIk0xNzUuMiA0NzYuNmMtOS43LTE4LTE1LjItMzguNy0xNS4yLTYwLjZjMC00MC4zIDE5LTc4LjIgNTEuMi0xMDIuNGw2NC00OGM4LjEtNiAxMi44LTE1LjUgMTIuOC0yNS42Vjk2SDEyOFYyNDBjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhDMTQuMiAzNTcuMyAwIDM4NS44IDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZjMjAuOCAwIDQxLTYuNyA1Ny42LTE5LjJsMjEuNi0xNi4yek0xMjggNjRIMjg4VjQ4YzAtMTQuNSAzLjktMjguMiAxMC43LTM5LjlDMjkxIDMgMjgxLjkgMCAyNzIgMEgxNzZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjY0ek0zMjAgOTZWMjQwYzAgMjAuMS05LjUgMzkuMS0yNS42IDUxLjJsLTY0IDQ4QzIwNi4yIDM1Ny4zIDE5MiAzODUuOCAxOTIgNDE2YzAgNTMgNDMgOTYgOTYgOTZjMjAuOCAwIDQxLTYuNyA1Ny42LTE5LjJsMTE1LjItODYuNEM0OTMgMzgyLjIgNTEyIDM0NC4zIDUxMiAzMDRWOTZIMzIwek01MTIgNjRWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzY4Yy0yNi41IDAtNDggMjEuNS00OCA0OFY2NEg1MTJ6XCJdXG59O1xudmFyIGZhSW5ib3ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5ib3gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwMWNcIiwgXCJNMTIxIDMyQzkxLjYgMzIgNjYgNTIgNTguOSA4MC41TDEuOSAzMDguNEMuNiAzMTMuNSAwIDMxOC43IDAgMzIzLjlWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzMjMuOWMwLTUuMi0uNi0xMC40LTEuOS0xNS41bC01Ny0yMjcuOUM0NDYgNTIgNDIwLjQgMzIgMzkxIDMySDEyMXptMCA2NEgzOTFsNDggMTkySDM4Ny44Yy0xMi4xIDAtMjMuMiA2LjgtMjguNiAxNy43bC0xNC4zIDI4LjZjLTUuNCAxMC44LTE2LjUgMTcuNy0yOC42IDE3LjdIMTk1LjhjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdsLTE0LjMtMjguNmMtNS40LTEwLjgtMTYuNS0xNy43LTI4LjYtMTcuN0g3M0wxMjEgOTZ6XCJdXG59O1xudmFyIGZhU2VjdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzZWN0aW9uJyxcbiAgaWNvbjogWzI1NiwgNTEyLCBbXSwgXCJlNDQ3XCIsIFwiTTY0LjkgOTZDNjcuMSA4NC40IDczLjcgNzYuMiA4NiA3MC42YzEzLjgtNi4yIDM0LjgtOC45IDYxLjItNC41YzguOCAxLjQgMzYuMSA3LjEgNDQuMSA5LjNjMTcgNC44IDM0LjctNS4xIDM5LjUtMjIuMnMtNS4xLTM0LjctMjIuMi0zOS41Yy0xMS4xLTMuMS00MS05LjItNTAuOS0xMC44QzEyMy0yLjcgODguMy0uNiA1OS43IDEyLjNDMjkuOSAyNS44IDcuNSA1MC45IDEuNiA4Ni41Yy0uMSAuNS0uMiAxLjEtLjIgMS42Yy0yLjIgMTkuNyAuMyAzNy45IDguMSA1NC4xYzcuNyAxNi4xIDE5LjQgMjggMzIgMzYuOWMuNiAuNSAxLjMgLjkgMiAxLjRDMjIuMyAxOTQuMiA2LjUgMjE1LjEgMS43IDI0M2MtLjEgLjYtLjIgMS4xLS4yIDEuN2MtMi4zIDE5LjMgLjQgMzcuMSA4LjQgNTNjNy45IDE1LjYgMTkuOCAyNyAzMi4zIDM1LjVjMjIuNCAxNS4yIDUxLjkgMjQgNzUuNCAzMWwwIDAgMy43IDEuMWMyNy4yIDguMiA0Ni45IDE0LjYgNTkuNCAyMy44YzUuNSA0IDguMiA3LjYgOS41IDEwLjljMS4zIDMuMiAyLjYgOC42IC45IDE4LjFjLTEuNyAxMC4xLTcuNyAxOC0yMC43IDIzLjVjLTE0IDYtMzUuNCA4LjUtNjIgNC40Yy0xMi44LTIuMS0zNS4xLTkuNy01NC4xLTE2LjJsMCAwYy00LjMtMS41LTguNS0yLjktMTIuMy00LjJDMjUuMyA0MjAgNy4yIDQyOS4xIDEuNiA0NDUuOHMzLjUgMzQuOSAyMC4zIDQwLjVjMi42IC44IDUuNyAxLjkgOS4yIDMuMWMxOC42IDYuMyA0OC41IDE2LjYgNjcuMyAxOS42bDAgMCAuMiAwYzM0LjUgNS40IDY4LjggMy40IDk3LjItOC43YzI5LjQtMTIuNiA1Mi41LTM2LjUgNTguNS03MS41YzMuMy0xOS4zIDEuOS0zNy40LTUtNTMuOWMtNi4zLTE1LTE2LjQtMjYuNC0yNy42LTM1LjJjMTYuNS0xMy45IDI4LjUtMzMuMiAzMi42LTU4LjJjMy4yLTE5LjggMS45LTM4LjMtNC44LTU1LjFjLTYuNy0xNi44LTE3LjgtMjkuNC0zMC4yLTM5Yy0yMi44LTE3LjYtNTMuNi0yNy40LTc3LjctMzVsLTEuNC0uNWMtMjcuNC04LjctNDcuOC0xNS4zLTYxLjUtMjVjLTYuMS00LjQtOS41LTguNS0xMS40LTEyLjRjLTEuOC0zLjctMy4yLTkuMy0yLjMtMTguNXptNzYuNyAyMDguNWMtLjItLjEtLjQtLjEtLjYtLjJsLTEuNC0uNGMtMjcuNC04LjItNDcuOS0xNC41LTYxLjctMjMuOGMtNi4yLTQuMi05LjMtNy45LTExLTExLjNjLTEuNS0zLTIuOS03LjctMi4xLTE1LjdjMS45LTkuNyA3LjktMTcuMyAyMC41LTIyLjdjMTQtNiAzNS40LTguNSA2Mi4xLTQuM2wxNi40IDIuNmM2LjMgMi45IDExLjcgNiAxNi4yIDkuNWM1LjUgNC4yIDguNCA4LjIgMTAgMTIuMmMxLjYgNCAyLjggMTAuNCAxLjEgMjAuOWMtMi40IDE0LjctMTIuOCAyNi40LTM3LjEgMzFsLTEyLjQgMi4zelwiXVxufTtcbnZhciBmYUdhdWdlSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXVnZS1oaWdoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjI0NjEsIFwidGFjaG9tZXRlci1hbHRcIiwgXCJ0YWNob21ldGVyLWFsdC1mYXN0XCJdLCBcImY2MjVcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0yODggOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMjU2IDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NGMwLTE3LjQtNi45LTMzLjEtMTguMS00NC42TDM2NiAxNjEuN2M1LjMtMTIuMS0uMi0yNi4zLTEyLjMtMzEuNnMtMjYuMyAuMi0zMS42IDEyLjNMMjU3LjkgMjg4Yy0uNiAwLTEuMyAwLTEuOSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0ek0xNzYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTk2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTM1Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwelwiXVxufTtcbnZhciBmYVRhY2hvbWV0ZXJBbHQgPSBmYUdhdWdlSGlnaDtcbnZhciBmYVRhY2hvbWV0ZXJBbHRGYXN0ID0gZmFHYXVnZUhpZ2g7XG52YXIgZmFFbnZlbG9wZU9wZW5UZXh0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VudmVsb3BlLW9wZW4tdGV4dCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY1OFwiLCBcIk0yMTUuNCA5NkgxNDQgMTA3LjggOTZ2OC44VjE0NHY0MC40IDg5TC4yIDIwMi41YzEuNi0xOC4xIDEwLjktMzQuOSAyNS43LTQ1LjhMNDggMTQwLjNWOTZjMC0yNi41IDIxLjUtNDggNDgtNDhoNzYuNmw0OS45LTM2LjlDMjMyLjIgMy45IDI0My45IDAgMjU2IDBzMjMuOCAzLjkgMzMuNSAxMUwzMzkuNCA0OEg0MTZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDQuM2wyMi4xIDE2LjRjMTQuOCAxMC45IDI0LjEgMjcuNyAyNS43IDQ1LjhMNDE2IDI3My40di04OVYxNDQgMTA0LjggOTZINDA0LjIgMzY4IDI5Ni42IDIxNS40ek0wIDQ0OFYyNDIuMUwyMTcuNiA0MDMuM2MxMS4xIDguMiAyNC42IDEyLjcgMzguNCAxMi43czI3LjMtNC40IDM4LjQtMTIuN0w1MTIgMjQyLjFWNDQ4djBjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0djB6TTE3NiAxNjBIMzM2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMCA2NEgzMzZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXVxufTtcbnZhciBmYUhvc3BpdGFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvc3BpdGFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTczLCA2MjU4OSwgXCJob3NwaXRhbC1hbHRcIiwgXCJob3NwaXRhbC13aWRlXCJdLCBcImYwZjhcIiwgXCJNMTkyIDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDQwMGMyNi41IDAgNDggMjEuNSA0OCA0OFY1MTJIMzY4VjQzMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHY4MEgxOTJWNDh6TTQ4IDk2SDE2MFY1MTJINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjMyMEg4MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgwVjIyNEg4MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgwVjE0NGMwLTI2LjUgMjEuNS00OCA0OC00OHptNTQ0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhINTYwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjY0SDU2MGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg4MFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDgwVjk2SDU5MnpNMzEyIDY0Yy04LjggMC0xNiA3LjItMTYgMTZ2MjRIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2MTZjMCA4LjggNy4yIDE2IDE2IDE2aDI0djI0YzAgOC44IDcuMiAxNiAxNiAxNmgxNmM4LjggMCAxNi03LjIgMTYtMTZWMTUyaDI0YzguOCAwIDE2LTcuMiAxNi0xNlYxMjBjMC04LjgtNy4yLTE2LTE2LTE2SDM0NFY4MGMwLTguOC03LjItMTYtMTYtMTZIMzEyelwiXVxufTtcbnZhciBmYUhvc3BpdGFsQWx0ID0gZmFIb3NwaXRhbDtcbnZhciBmYUhvc3BpdGFsV2lkZSA9IGZhSG9zcGl0YWw7XG52YXIgZmFXaW5lQm90dGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dpbmUtYm90dGxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzJmXCIsIFwiTTM5My40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2MtMTEuOCAxMS44LTMwLjcgMTIuNS00My4yIDEuOWwtOS41IDkuNS00OC44IDQ4LjhjLTkuMiA5LjItMTEuNSAyMi45LTguNiAzNS42YzkuNCA0MC45LTEuOSA4NS42LTMzLjggMTE3LjVMMTk3LjMgNDkzLjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC04OC04OGMtMjUtMjUtMjUtNjUuNSAwLTkwLjVMMTgwLjIgMTUzLjNjMzEuOS0zMS45IDc2LjYtNDMuMSAxMTcuNS0zMy44YzEyLjYgMi45IDI2LjQgLjUgMzUuNS04LjZsNDguOC00OC44IDkuNS05LjVjLTEwLjYtMTIuNi0xMC0zMS40IDEuOS00My4yek05OS4zIDM0Ny4zbDY1LjQgNjUuNGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw5Ny40LTk3LjRjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTY1LjQtNjUuNGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMOTkuMyAzMjQuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xudmFyIGZhQ2hlc3NSb29rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXNzLXJvb2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODIwXSwgXCJmNDQ3XCIsIFwiTTMyIDE5MlY0OGMwLTguOCA3LjItMTYgMTYtMTZoNjRjOC44IDAgMTYgNy4yIDE2IDE2Vjg4YzAgNC40IDMuNiA4IDggOGgzMmM0LjQgMCA4LTMuNiA4LThWNDhjMC04LjggNy4yLTE2IDE2LTE2aDY0YzguOCAwIDE2IDcuMiAxNiAxNlY4OGMwIDQuNCAzLjYgOCA4IDhoMzJjNC40IDAgOC0zLjYgOC04VjQ4YzAtOC44IDcuMi0xNiAxNi0xNmg2NGM4LjggMCAxNiA3LjIgMTYgMTZWMTkyYzAgMTAuMS00LjcgMTkuNi0xMi44IDI1LjZMMzUyIDI1NmwxNiAxNDRIODBMOTYgMjU2IDQ0LjggMjE3LjZDMzYuNyAyMTEuNiAzMiAyMDIuMSAzMiAxOTJ6bTE3NiA5NmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjQ4YzAgOC44IDcuMiAxNiAxNiAxNnpNMjIuNiA0NzMuNEw2NCA0MzJIMzg0bDQxLjQgNDEuNGM0LjIgNC4yIDYuNiAxMCA2LjYgMTZjMCAxMi41LTEwLjEgMjIuNi0yMi42IDIyLjZIMzguNkMyNi4xIDUxMiAxNiA1MDEuOSAxNiA0ODkuNGMwLTYgMi40LTExLjggNi42LTE2elwiXVxufTtcbnZhciBmYUJhcnNTdGFnZ2VyZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFycy1zdGFnZ2VyZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInJlb3JkZXJcIiwgXCJzdHJlYW1cIl0sIFwiZjU1MFwiLCBcIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0SDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTY0IDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnpcIl1cbn07XG52YXIgZmFSZW9yZGVyID0gZmFCYXJzU3RhZ2dlcmVkO1xudmFyIGZhU3RyZWFtID0gZmFCYXJzU3RhZ2dlcmVkO1xudmFyIGZhRGhhcm1hY2hha3JhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RoYXJtYWNoYWtyYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3ODRdLCBcImY2NTVcIiwgXCJNMzM3LjggMjA1LjdsNDguNi00Mi41YzEzLjggMTkuMyAyMy40IDQxLjkgMjcuNCA2Ni4ybC02NC40IDQuM2MtMi40LTEwLjEtNi40LTE5LjUtMTEuNi0yOHptMTQwLjEgMTkuNWMtNS4zLTM4LjgtMjAuNi03NC41LTQzLjItMTA0LjNsLjgtLjdDNDQ5IDEwOC40IDQ0OS43IDg3LjYgNDM3IDc1cy0zMy40LTEyLTQ1LjIgMS41bC0uNyAuOGMtMjkuOC0yMi42LTY1LjUtMzcuOS0xMDQuMy00My4ybC4xLTEuMWMxLjItMTcuOS0xMy0zMy0zMC45LTMzcy0zMi4xIDE1LjItMzAuOSAzM2wuMSAxLjFjLTM4LjggNS4zLTc0LjUgMjAuNi0xMDQuMyA0My4ybC0uNy0uOEMxMDguNCA2MyA4Ny42IDYyLjMgNzUgNzVzLTEyIDMzLjQgMS41IDQ1LjJsLjggLjdjLTIyLjYgMjkuOC0zNy45IDY1LjUtNDMuMiAxMDQuM2wtMS4xLS4xYy0xNy45LTEuMi0zMyAxMy0zMyAzMC45czE1LjIgMzIuMSAzMyAzMC45bDEuMS0uMWM1LjMgMzguOCAyMC42IDc0LjUgNDMuMiAxMDQuM2wtLjggLjdDNjMgNDAzLjYgNjIuMyA0MjQuNCA3NSA0MzdzMzMuNCAxMiA0NS4yLTEuNWwuNy0uOGMyOS44IDIyLjYgNjUuNSAzNy45IDEwNC4zIDQzLjJsLS4xIDEuMWMtMS4yIDE3LjkgMTMgMzMgMzAuOSAzM3MzMi4xLTE1LjIgMzAuOS0zM2wtLjEtMS4xYzM4LjgtNS4zIDc0LjUtMjAuNiAxMDQuMy00My4ybC43IC44YzExLjggMTMuNSAzMi41IDE0LjIgNDUuMiAxLjVzMTItMzMuNC0xLjUtNDUuMmwtLjgtLjdjMjIuNi0yOS44IDM3LjktNjUuNSA0My4yLTEwNC4zbDEuMSAuMWMxNy45IDEuMiAzMy0xMyAzMy0zMC45cy0xNS4yLTMyLjEtMzMtMzAuOWwtMS4xIC4xek0xNjMuMiAxMjUuNmMxOS4zLTEzLjggNDEuOS0yMy40IDY2LjItMjcuNWw0LjMgNjQuNGMtMTAgMi40LTE5LjUgNi40LTI4IDExLjZsLTQyLjUtNDguNnptLTY1IDEwMy44YzQuMS0yNC40IDEzLjctNDYuOSAyNy41LTY2LjJsNDguNiA0Mi41Yy01LjMgOC41LTkuMiAxOC0xMS42IDI4bC02NC40LTQuM3ptMjcuNSAxMTkuNGMtMTMuOC0xOS4zLTIzLjQtNDEuOS0yNy41LTY2LjJsNjQuNC00LjNjMi40IDEwIDYuNCAxOS41IDExLjYgMjhsLTQ4LjYgNDIuNXptMTAzLjggNjVjLTI0LjQtNC4xLTQ2LjktMTMuNy02Ni4yLTI3LjRsNDIuNS00OC42YzguNSA1LjMgMTggOS4yIDI4IDExLjZsLTQuMyA2NC40em0xMTkuNC0yNy40Yy0xOS4zIDEzLjgtNDEuOSAyMy40LTY2LjIgMjcuNGwtNC4zLTY0LjRjMTAtMi40IDE5LjUtNi40IDI4LTExLjZsNDIuNSA0OC42em02NS0xMDMuOGMtNC4xIDI0LjQtMTMuNyA0Ni45LTI3LjQgNjYuMmwtNDguNi00Mi41YzUuMy04LjUgOS4yLTE4IDExLjYtMjhsNjQuNCA0LjN6bS02NS0xNTYuOWwtNDIuNSA0OC42Yy04LjUtNS4zLTE4LTkuMi0yOC0xMS42bDQuMy02NC40YzI0LjQgNC4xIDQ2LjkgMTMuNyA2Ni4yIDI3LjV6TTI1NiAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUhvdGRvZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3Rkb2cnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODldLCBcImY4MGZcIiwgXCJNNDg4LjYgMjMuNGMzMS4yIDMxLjIgMzEuMiA4MS45IDAgMTEzLjFsLTM1MiAzNTJjLTMxLjIgMzEuMi04MS45IDMxLjItMTEzLjEgMHMtMzEuMi04MS45IDAtMTEzLjFsMzUyLTM1MmMzMS4yLTMxLjIgODEuOS0zMS4yIDExMy4xIDB6TTQ0My4zIDkyLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwYy0xMi41IDEyLjUtMjMuOCAxNS4xLTM3LjUgMTcuNmwtMi41IC40Yy0xMy44IDIuNS0zMS42IDUuNi00OCAyMmMtMTYuNyAxNi43LTIwLjkgMzYtMjQuMSA1MC45bDAgMHYwbC0uMiAxYy0zLjQgMTUuNi02IDI2LjQtMTUuNyAzNi4xcy0yMC41IDEyLjMtMzYuMSAxNS43bC0xIC4yYy0xNC45IDMuMi0zNC4yIDcuNC01MC45IDI0LjFzLTIwLjkgMzYtMjQuMSA1MC45bC0uMiAxYy0zLjQgMTUuNi02IDI2LjQtMTUuNyAzNi4xYy05LjIgOS4yLTE4IDEwLjgtMzIuNyAxMy40bDAgMC0uOSAuMmMtMTUuNiAyLjgtMzQuOSA2LjktNTQuNCAyNi40Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBjMTIuNS0xMi41IDIzLjgtMTUuMSAzNy41LTE3LjZsMi41LS40YzEzLjgtMi41IDMxLjYtNS42IDQ4LTIyYzE2LjctMTYuNyAyMC45LTM2IDI0LjEtNTAuOWwuMi0xYzMuNC0xNS42IDYtMjYuNCAxNS43LTM2LjFzMjAuNS0xMi4zIDM2LjEtMTUuN2wxLS4yYzE0LjktMy4yIDM0LjItNy40IDUwLjktMjQuMXMyMC45LTM2IDI0LjEtNTAuOWwuMi0xYzMuNC0xNS42IDYtMjYuNCAxNS43LTM2LjFjOS4yLTkuMiAxOC0xMC44IDMyLjctMTMuNGwuOS0uMmMxNS42LTIuOCAzNC45LTYuOSA1NC40LTI2LjRjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6TTE5MS4yIDQ3OS4ybDI4OC0yODhMNDk1IDIwN2MxMC45IDEwLjkgMTcgMjUuNiAxNyA0MXMtNi4xIDMwLjEtMTcgNDFMMjg5IDQ5NWMtMTAuOSAxMC45LTI1LjYgMTctNDEgMTdzLTMwLjEtNi4xLTQxLTE3bC0xNS44LTE1Ljh6TTE3IDMwNUM2LjEgMjk0LjEgMCAyNzkuNCAwIDI2NHM2LjEtMzAuMSAxNy00MUwyMjMgMTdDMjMzLjkgNi4xIDI0OC42IDAgMjY0IDBzMzAuMSA2LjEgNDEgMTdsMTUuOCAxNS44LTI4OCAyODhMMTcgMzA1elwiXVxufTtcbnZhciBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24td2Fsa2luZy13aXRoLWNhbmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImJsaW5kXCJdLCBcImYyOWRcIiwgXCJNMTc2IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTguNCAzMmMtMzYuNCAwLTY5LjYgMjAuNS04NS45IDUzLjFMMzUuNCAyNzMuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zTDEyOCAyMzEuNnY0My4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zTDIyNCAzOTcuM1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzOTAuNmMwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45TDIyNCAzMDYuN1YyMTMuM2w3MC40IDkzLjljMTAuNiAxNC4xIDMwLjcgMTcgNDQuOCA2LjRzMTctMzAuNyA2LjQtNDQuOEwyNjguOCAxNjYuNEMyNTAuNyAxNDIuMiAyMjIuMiAxMjggMTkyIDEyOEgxNjcuNnpNMTI4LjMgMzQ2LjhMOTcgNDcyLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMjItODguMi01Mi44LTUyLjh6TTQ1MC44IDUwNS4xYzUgNy4zIDE1IDkuMSAyMi4zIDRzOS4xLTE1IDQtMjIuM0wzNTguOSAzMTYuMWMtMi44IDMuOC02LjEgNy4zLTEwLjEgMTAuM2MtNSAzLjgtMTAuNSA2LjQtMTYuMiA3LjlMNDUwLjggNTA1LjF6XCJdXG59O1xudmFyIGZhQmxpbmQgPSBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZTtcbnZhciBmYURydW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHJ1bScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTM0NV0sIFwiZjU2OVwiLCBcIk01MDEuMiA3Ni4xYzExLjEtNy4zIDE0LjItMjIuMSA2LjktMzMuMnMtMjIuMS0xNC4yLTMzLjItNi45TDM3MC4yIDEwNC41QzMzNS44IDk4LjcgMjk3IDk2IDI1NiA5NkMxMTQuNiA5NiAwIDEyOCAwIDIwOFYzNjhjMCAzMS4zIDI3LjQgNTguOCA3MiA3OC43VjM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0VjQ2My40YzMzIDguOSA3MS4xIDE0LjUgMTEyIDE2LjFWMzc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRWNDc5LjVjNDAuOS0xLjYgNzktNy4yIDExMi0xNi4xVjM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0VjQ0Ni43YzQ0LjYtMTkuOSA3Mi00Ny40IDcyLTc4LjdWMjA4YzAtNDEuMS0zMC4yLTY5LjUtNzguOC04Ny40bDY3LjktNDQuNXpNMzA3LjQgMTQ1LjZsLTY0LjYgNDIuM2MtMTEuMSA3LjMtMTQuMiAyMi4xLTYuOSAzMy4yczIyLjEgMTQuMiAzMy4yIDYuOWwxMTEuMS03Mi44YzE0LjcgMy4yIDI3LjkgNyAzOS40IDExLjVDNDU4LjQgMTgxLjggNDY0IDE5Ny40IDQ2NCAyMDhjMCAuOC0yLjcgMTcuMi00NiAzNS45QzM3OS4xIDI2MC43IDMyMiAyNzIgMjU2IDI3MnMtMTIzLjEtMTEuMy0xNjItMjguMUM1MC43IDIyNS4yIDQ4IDIwOC44IDQ4IDIwOGMwLTEwLjYgNS42LTI2LjIgNDQuNC00MS4zQzEzMC42IDE1MS45IDE4Ny44IDE0NCAyNTYgMTQ0YzE4IDAgMzUuMSAuNSA1MS40IDEuNnpcIl1cbn07XG52YXIgZmFJY2VDcmVhbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpY2UtY3JlYW0nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4NDhdLCBcImY4MTBcIiwgXCJNMzY3LjEgMTYwYy42LTUuMyAuOS0xMC42IC45LTE2QzM2OCA2NC41IDMwMy41IDAgMjI0IDBTODAgNjQuNSA4MCAxNDRjMCA1LjQgLjMgMTAuNyAuOSAxNkg4MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGg1My41IDE4MUgzNjhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhoLS45ek05NiAyODhMMjAwLjggNDk3LjdjNC40IDguOCAxMy4zIDE0LjMgMjMuMiAxNC4zczE4LjgtNS41IDIzLjItMTQuM0wzNTIgMjg4SDk2elwiXVxufTtcbnZhciBmYUhlYXJ0Q2lyY2xlQm9sdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUtYm9sdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRmY1wiLCBcIk00Ny42IDMwMC40TDIyOC4zIDQ2OS4xYzcuNSA3IDE3LjQgMTAuOSAyNy43IDEwLjlzMjAuMi0zLjkgMjcuNy0xMC45bDIuNi0yLjRDMjY3LjIgNDM4LjYgMjU2IDQwNC42IDI1NiAzNjhjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZjMjguMyAwIDU1IDYuNyA3OC43IDE4LjVjLjktNi41IDEuMy0xMyAxLjMtMTkuNnYtNS44YzAtNjkuOS01MC41LTEyOS41LTExOS40LTE0MUMzNDcgMzYuNSAzMDAuNiA1MS40IDI2OCA4NEwyNTYgOTYgMjQ0IDg0Yy0zMi42LTMyLjYtNzktNDcuNS0xMjQuNi0zOS45QzUwLjUgNTUuNiAwIDExNS4yIDAgMTg1LjF2NS44YzAgNDEuNSAxNy4yIDgxLjIgNDcuNiAxMDkuNXpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTQ3LjktMjI1YzQuMyAzLjcgNS40IDkuOSAyLjYgMTQuOUw0NTIuNCAzNTZINDg4YzUuMiAwIDkuOCAzLjMgMTEuNCA4LjJzLS4xIDEwLjMtNC4yIDEzLjRsLTk2IDcyYy00LjUgMy40LTEwLjggMy4yLTE1LjEtLjZzLTUuNC05LjktMi42LTE0LjlMNDExLjYgMzgwSDM3NmMtNS4yIDAtOS44LTMuMy0xMS40LTguMnMuMS0xMC4zIDQuMi0xMy40bDk2LTcyYzQuNS0zLjQgMTAuOC0zLjIgMTUuMSAuNnpcIl1cbn07XG52YXIgZmFGYXggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmF4JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjI0LCAxMjg0MzldLCBcImYxYWNcIiwgXCJNMTI4IDY0djk2aDY0VjY0SDM4Ni43TDQxNiA5My4zVjE2MGg2NFY5My4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDQzMiAxOC43QzQyMCA2LjcgNDAzLjcgMCAzODYuNyAwSDE5MmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6TTAgMTYwVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem00ODAgMzJIMTI4VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yNTYgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0yMjQgNDE2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xudmFyIGZhUGFyYWdyYXBoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhcmFncmFwaCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzE4Ml0sIFwiZjFkZFwiLCBcIk0xOTIgMzJoNjRINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NGwwIDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM1MkgyODhWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgxOTJjLTg4LjQgMC0xNjAtNzEuNi0xNjAtMTYwczcxLjYtMTYwIDE2MC0xNjB6XCJdXG59O1xudmFyIGZhQ2hlY2tUb1Nsb3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlY2stdG8tc2xvdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1widm90ZS15ZWFcIl0sIFwiZjc3MlwiLCBcIk05NiA4MGMwLTI2LjUgMjEuNS00OCA0OC00OEg0MzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMzg0SDk2Vjgwem0zMTMgNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC0xMTEgMTExLTQ3LTQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDY0IDY0YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwTDQwOSAxNjFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6TTAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDY0VjQxNkg1MTJWMjg4aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMzZ6XCJdXG59O1xudmFyIGZhVm90ZVllYSA9IGZhQ2hlY2tUb1Nsb3Q7XG52YXIgZmFTdGFySGFsZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFyLWhhbGYnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MTczMV0sIFwiZjA4OVwiLCBcIk0yODggMGMtMTIuMiAuMS0yMy4zIDctMjguNiAxOEwxOTUgMTUwLjMgNTEuNCAxNzEuNWMtMTIgMS44LTIyIDEwLjItMjUuNyAyMS43cy0uNyAyNC4yIDcuOSAzMi43TDEzNy44IDMyOSAxMTMuMiA0NzQuN2MtMiAxMiAzIDI0LjIgMTIuOSAzMS4zczIzIDggMzMuOCAyLjNMMjg4IDQzOS44VjB6TTQyOS45IDUxMmMxLjEgLjEgMi4xIC4xIDMuMiAwaC0zLjJ6XCJdXG59O1xudmFyIGZhQm94ZXNTdGFja2VkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JveGVzLXN0YWNrZWQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MjYyNSwgXCJib3hlc1wiLCBcImJveGVzLWFsdFwiXSwgXCJmNDY4XCIsIFwiTTI0OCAwSDIwOGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMTYwYzAgMzUuMyAyOC43IDY0IDY0IDY0SDM1MmMzNS4zIDAgNjQtMjguNyA2NC02NFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEgzMjhWODBjMCA4LjgtNy4yIDE2LTE2IDE2SDI2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjB6TTY0IDI1NmMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDIyNGMzNS4zIDAgNjQtMjguNyA2NC02NFYzMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTg0djgwYzAgOC44LTcuMiAxNi0xNiAxNkgxMjBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNTZINjR6TTM1MiA1MTJINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjMyMGMwLTM1LjMtMjguNy02NC02NC02NEg0NzJ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2SDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjI1NkgzNTJjLTE1IDAtMjguOCA1LjEtMzkuNyAxMy44YzQuOSAxMC40IDcuNyAyMiA3LjcgMzQuMlY0NjRjMCAxMi4yLTIuOCAyMy44LTcuNyAzNC4yQzMyMy4yIDUwNi45IDMzNyA1MTIgMzUyIDUxMnpcIl1cbn07XG52YXIgZmFCb3hlcyA9IGZhQm94ZXNTdGFja2VkO1xudmFyIGZhQm94ZXNBbHQgPSBmYUJveGVzU3RhY2tlZDtcbnZhciBmYUxpbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGluaycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODI3OSwgXCJjaGFpblwiXSwgXCJmMGMxXCIsIFwiTTU3OS44IDI2Ny43YzU2LjUtNTYuNSA1Ni41LTE0OCAwLTIwNC41Yy01MC01MC0xMjguOC01Ni41LTE4Ni4zLTE1LjRsLTEuNiAxLjFjLTE0LjQgMTAuMy0xNy43IDMwLjMtNy40IDQ0LjZzMzAuMyAxNy43IDQ0LjYgNy40bDEuNi0xLjFjMzIuMS0yMi45IDc2LTE5LjMgMTAzLjggOC42YzMxLjUgMzEuNSAzMS41IDgyLjUgMCAxMTRMNDIyLjMgMzM0LjhjLTMxLjUgMzEuNS04Mi41IDMxLjUtMTE0IDBjLTI3LjktMjcuOS0zMS41LTcxLjgtOC42LTEwMy44bDEuMS0xLjZjMTAuMy0xNC40IDYuOS0zNC40LTcuNC00NC42cy0zNC40LTYuOS00NC42IDcuNGwtMS4xIDEuNkMyMDYuNSAyNTEuMiAyMTMgMzMwIDI2MyAzODBjNTYuNSA1Ni41IDE0OCA1Ni41IDIwNC41IDBMNTc5LjggMjY3Ljd6TTYwLjIgMjQ0LjNjLTU2LjUgNTYuNS01Ni41IDE0OCAwIDIwNC41YzUwIDUwIDEyOC44IDU2LjUgMTg2LjMgMTUuNGwxLjYtMS4xYzE0LjQtMTAuMyAxNy43LTMwLjMgNy40LTQ0LjZzLTMwLjMtMTcuNy00NC42LTcuNGwtMS42IDEuMWMtMzIuMSAyMi45LTc2IDE5LjMtMTAzLjgtOC42Qzc0IDM3MiA3NCAzMjEgMTA1LjUgMjg5LjVMMjE3LjcgMTc3LjJjMzEuNS0zMS41IDgyLjUtMzEuNSAxMTQgMGMyNy45IDI3LjkgMzEuNSA3MS44IDguNiAxMDMuOWwtMS4xIDEuNmMtMTAuMyAxNC40LTYuOSAzNC40IDcuNCA0NC42czM0LjQgNi45IDQ0LjYtNy40bDEuMS0xLjZDNDMzLjUgMjYwLjggNDI3IDE4MiAzNzcgMTMyYy01Ni41LTU2LjUtMTQ4LTU2LjUtMjA0LjUgMEw2MC4yIDI0NC4zelwiXVxufTtcbnZhciBmYUNoYWluID0gZmFMaW5rO1xudmFyIGZhRWFyTGlzdGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Vhci1saXN0ZW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFzc2lzdGl2ZS1saXN0ZW5pbmctc3lzdGVtc1wiXSwgXCJmMmEyXCIsIFwiTTM5OC4zIDMuNGMtMTUuOC03LjktMzUtMS41LTQyLjkgMTQuM2MtNy45IDE1LjgtMS41IDM0LjkgMTQuMiA0Mi45bC40IC4yYy40IC4yIDEuMSAuNiAyLjEgMS4yYzIgMS4yIDUgMyA4LjcgNS42YzcuNSA1LjIgMTcuNiAxMy4yIDI3LjcgMjQuMkM0MjguNSAxMTMuNCA0NDggMTQ2IDQ0OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTY2LTI4LjUtMTEzLjQtNTYuNS0xNDMuN0M0NDEuNiAzMy4yIDQyNy43IDIyLjIgNDE3LjMgMTVjLTUuMy0zLjctOS43LTYuNC0xMy04LjNjLTEuNi0xLTMtMS43LTQtMi4yYy0uNS0uMy0uOS0uNS0xLjItLjdsLS40LS4yLS4yLS4xLS4xIDAgMCAwYzAgMCAwIDAtMTQuMyAyOC42TDM5OC4zIDMuNHpNMTI4LjcgMjI3LjVjNi4yLTU2IDUzLjctOTkuNSAxMTEuMy05OS41YzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyYzAgMjkuMy0xMS4yIDU1LjktMjkuNiA3NS45Yy0xNyAxOC40LTM0LjQgNDUuMS0zNC40IDc4VjQwMGMwIDI2LjUtMjEuNSA0OC00OCA0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmM2MS45IDAgMTEyLTUwLjEgMTEyLTExMnYtNi4xYzAtOS44IDUuNC0yMS43IDE3LjQtMzQuN0MzOTguMyAzMjcuOSA0MTYgMjg2IDQxNiAyNDBjMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZDMTQ5LjQgNjQgNzQuOCAxMzIuNSA2NS4xIDIyMC41Yy0xLjkgMTcuNiAxMC43IDMzLjQgMjguMyAzNS4zczMzLjQtMTAuNyAzNS4zLTI4LjN6TTMyIDUxMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTE5MiAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDEuNCAzNjEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwek0yMDggMjQwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0elwiXVxufTtcbnZhciBmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXMgPSBmYUVhckxpc3RlbjtcbnZhciBmYVRyZWVDaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyZWUtY2l0eScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU4N1wiLCBcIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhoOTZjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMTkyaDQwVjEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djcyaDI0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0MzIgMzM2Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHptNjQgMzJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlY4MGMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxNzZjMC04LjgtNy4yLTE2LTE2LTE2SDM2OHpNMzUyIDI3MnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE3Ni0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjcyYzAtOC44LTcuMi0xNi0xNi0xNkg1Mjh6TTUxMiAzNjh2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDUyOGMtOC44IDAtMTYgNy4yLTE2IDE2ek0yMjQgMTYwYzAgNi0xIDExLTIgMTZjMjAgMTQgMzQgMzggMzQgNjRjMCA0NS0zNiA4MC04MCA4MEgxNjBWNDgwYzAgMTgtMTUgMzItMzIgMzJjLTE4IDAtMzItMTQtMzItMzJWMzIwSDgwYy00NSAwLTgwLTM1LTgwLTgwYzAtMjYgMTMtNTAgMzMtNjRjLTEtNS0xLTEwLTEtMTZjMC01MyA0Mi05NiA5Ni05NmM1MyAwIDk2IDQzIDk2IDk2elwiXVxufTtcbnZhciBmYVBsYXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxheScsXG4gIGljb246IFszODQsIDUxMiwgWzk2NTRdLCBcImYwNGJcIiwgXCJNNzMgMzljLTE0LjgtOS4xLTMzLjQtOS40LTQ4LjUtLjlTMCA2Mi42IDAgODBWNDMyYzAgMTcuNCA5LjQgMzMuNCAyNC41IDQxLjlzMzMuNyA4LjEgNDguNS0uOUwzNjEgMjk3YzE0LjMtOC43IDIzLTI0LjIgMjMtNDFzLTguNy0zMi4yLTIzLTQxTDczIDM5elwiXVxufTtcbnZhciBmYUZvbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9udCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAzMVwiLCBcIk0yNTQgNTIuOEMyNDkuMyA0MC4zIDIzNy4zIDMyIDIyNCAzMnMtMjUuMyA4LjMtMzAgMjAuOEw1Ny44IDQxNkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmgtMS44bDE4LTQ4SDMwMy44bDE4IDQ4SDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzOTAuMkwyNTQgNTIuOHpNMjc5LjggMzA0SDE2OC4yTDIyNCAxNTUuMSAyNzkuOCAzMDR6XCJdXG59O1xudmFyIGZhVGFibGVDZWxsc1Jvd0xvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGUtY2VsbHMtcm93LWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU2N2FcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY1LjFjLTM3LjggNS40LTY5LjQgMjkuNi04NS4yIDYyLjlMMzYwIDIyNGwwIDY0IDU2IDAgMCA4LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRsLTI0IDAgMCA2NCAyNCAwIDAgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek02NCAyMjRsMCA2NCA4OCAwIDAtNjQtODggMHptMjMyIDBsLTg4IDAgMCA2NCA4OCAwIDAtNjR6TTE1MiAzNTJsLTg4IDAgMCA2NCA4OCAwIDAtNjR6bTU2IDBsMCA2NCA4OCAwIDAtNjQtODggMHpNNTI4IDI0MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OCA2NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6bS04MCAzMmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwwLTQ4elwiXVxufTtcbnZhciBmYVJ1cGlhaFNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVwaWFoLXNpZ24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUyM2RcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmg4MGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDU4LjgtMzUuMiAxMDkuMy04NS43IDEzMS43bDUxLjQgMTI4LjRjNi42IDE2LjQtMS40IDM1LTE3LjggNDEuNnMtMzUtMS40LTQxLjYtMTcuOEwxMDYuMyAzMjBINjRWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI4OCA2NHpNNjQgMjU2aDQ4YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwSDY0VjI1NnptMjU2LTk2aDgwYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEycy01MC4xIDExMi0xMTIgMTEySDM1MnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTIgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem04MCAxNjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhIMzUydjk2aDQ4elwiXVxufTtcbnZhciBmYU1hZ25pZnlpbmdHbGFzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYWduaWZ5aW5nLWdsYXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjY5LCBcInNlYXJjaFwiXSwgXCJmMDAyXCIsIFwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZjLTM0LjQgMjUuMi03Ni44IDQwLTEyMi43IDQwQzkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwUzQxNiA5My4xIDQxNiAyMDh6TTIwOCAzNTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4elwiXVxufTtcbnZhciBmYVNlYXJjaCA9IGZhTWFnbmlmeWluZ0dsYXNzO1xudmFyIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxlLXRlbm5pcy1wYWRkbGUtYmFsbCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyNzk1NSwgXCJwaW5nLXBvbmctcGFkZGxlLWJhbGxcIiwgXCJ0YWJsZS10ZW5uaXNcIl0sIFwiZjQ1ZFwiLCBcIk00ODAgMjg4Yy01MC4xIDAtOTMuNiAyOC44LTExNC42IDcwLjhMMTMyLjkgMTI2LjNsLjYtLjYgNjAuMS02MC4xYzg3LjUtODcuNSAyMjkuMy04Ny41IDMxNi44IDBjNjcuMSA2Ny4xIDgyLjcgMTY2LjMgNDYuOCAyNDguM0M1MzUuOCAyOTcuNiA1MDkgMjg4IDQ4MCAyODh6TTExMy4zIDE1MS45TDM1NC4xIDM5Mi43Yy0xLjQgNy41LTIuMSAxNS4zLTIuMSAyMy4zYzAgMjMuMiA2LjIgNDQuOSAxNi45IDYzLjdjLTMgLjItNi4xIC4zLTkuMiAuM0gzNTdjLTMzLjkgMC02Ni41LTEzLjUtOTAuNS0zNy41bC05LjgtOS44Yy0xMy4xLTEzLjEtMzQuNi0xMi40LTQ2LjggMS43TDE1Mi4yIDUwMWMtNS44IDYuNy0xNC4yIDEwLjctMjMgMTFzLTE3LjUtMy4xLTIzLjgtOS40bC0zMi0zMmMtNi4zLTYuMy05LjctMTQuOS05LjQtMjMuOHM0LjMtMTcuMiAxMS0yM2w2Ni42LTU3LjdjMTQtMTIuMiAxNC44LTMzLjcgMS43LTQ2LjhsLTkuOC05LjhjLTI0LTI0LTM3LjUtNTYuNi0zNy41LTkwLjV2LTIuN2MwLTIyLjggNi4xLTQ0LjkgMTcuMy02NC4zek00ODAgMzIwYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyelwiXVxufTtcbnZhciBmYVBpbmdQb25nUGFkZGxlQmFsbCA9IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsO1xudmFyIGZhVGFibGVUZW5uaXMgPSBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbDtcbnZhciBmYVBlcnNvbkRvdHNGcm9tTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tZG90cy1mcm9tLWxpbmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImRpYWdub3Nlc1wiXSwgXCJmNDcwXCIsIFwiTTI4OCAxNzZBODggODggMCAxIDAgMjg4IDBhODggODggMCAxIDAgMCAxNzZ6TTc4LjcgMzcyLjljMTUtMTIuNSA1MC0zNC40IDk3LjMtNTAuMVY0MzJINDAwVjMyMi43YzQ3LjMgMTUuOCA4Mi4zIDM3LjcgOTcuMyA1MC4xYzIwLjQgMTcgNTAuNiAxNC4yIDY3LjYtNi4xczE0LjItNTAuNi02LjEtNjcuNmMtMTItMTAtMzAuMS0yMi41LTUzLjItMzVDNDk3LjIgMjc4LjQgNDgxLjcgMjg4IDQ2NCAyODhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4YzAtNC4zIC42LTguNCAxLjYtMTIuNEMzNzkuMSAyMTUuOSAzMzUuMyAyMDggMjg4IDIwOGMtNjAuMiAwLTExNC45IDEyLjktMTYwIDI5LjljMCAuNyAwIDEuNCAwIDIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGMtMTEuOCAwLTIyLjctNC4zLTMxLTExLjRjLTEzLjEgOC4xLTIzLjcgMTUuOS0zMS43IDIyLjVjLTIwLjQgMTctMjMuMSA0Ny4yLTYuMSA2Ny42czQ3LjIgMjMuMSA2Ny42IDYuMXpNMjQgNDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDU1MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyNHpNMjI0IDI4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMDQgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek05NiAyNDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMzY4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG52YXIgZmFEaWFnbm9zZXMgPSBmYVBlcnNvbkRvdHNGcm9tTGluZTtcbnZhciBmYVRyYXNoQ2FuQXJyb3dVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cmFzaC1jYW4tYXJyb3ctdXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInRyYXNoLXJlc3RvcmUtYWx0XCJdLCBcImY4MmFcIiwgXCJNMTYzLjggMEgyODQuMmMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43TDMyMCAzMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJoOTZsNy4yLTE0LjNDMTQwLjYgNi44IDE1MS43IDAgMTYzLjggMHpNMzIgMTI4SDQxNlY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIOTZjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHptMTkyIDY0Yy02LjQgMC0xMi41IDIuNS0xNyA3bC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDM5LTM5VjQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI3My45bDM5IDM5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTQuNS00LjUtMTAuNi03LTE3LTd6XCJdXG59O1xudmFyIGZhVHJhc2hSZXN0b3JlQWx0ID0gZmFUcmFzaENhbkFycm93VXA7XG52YXIgZmFOYWlyYVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbmFpcmEtc2lnbicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTFmNlwiLCBcIk0xMjIuNiA0Ni4zYy03LjgtMTEuNy0yMi40LTE3LTM1LjktMTIuOVM2NCA0OS45IDY0IDY0VjI1NkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjBIMjI4LjJsOTcuMiAxNDUuOGM3LjggMTEuNyAyMi40IDE3IDM1LjkgMTIuOXMyMi43LTE2LjUgMjIuNy0zMC42VjMyMGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzODRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjU2SDI2Mi41TDEyMi42IDQ2LjN6TTMwNS4xIDMyMEgzMjB2MjIuM0wzMDUuMSAzMjB6TTE4NS41IDI1NkgxMjhWMTY5LjdMMTg1LjUgMjU2elwiXVxufTtcbnZhciBmYUNhcnRBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FydC1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjE4XCIsIFwiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhINjkuNWMzLjggMCA3LjEgMi43IDcuOSA2LjVsNTEuNiAyNzFjNi41IDM0IDM2LjIgNTguNSA3MC43IDU4LjVINDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDE5OS43Yy0xMS41IDAtMjEuNC04LjItMjMuNi0xOS41TDE3MC43IDI4OEg0NTkuMmMzMi42IDAgNjEuMS0yMS44IDY5LjUtNTMuM2w0MS0xNTIuM0M1NzYuNiA1NyA1NTcuNCAzMiA1MzEuMSAzMkgzNjBWMTM0LjFsMjMtMjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC02NCA2NGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjMgMjNWMzJIMTIwLjFDMTExIDEyLjggOTEuNiAwIDY5LjUgMEgyNHpNMTc2IDUxMmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTMzNi00OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwelwiXVxufTtcbnZhciBmYVdhbGtpZVRhbGtpZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YWxraWUtdGFsa2llJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmOGVmXCIsIFwiTTExMiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM2NCAxMC43IDY0IDI0Vjk2SDQ4QzIxLjUgOTYgMCAxMTcuNSAwIDE0NFYzMDAuMWMwIDEyLjcgNS4xIDI0LjkgMTQuMSAzMy45bDMuOSAzLjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMwNGMyNi41IDAgNDgtMjEuNSA0OC00OFYzNzEuOWMwLTEyLjcgNS4xLTI0LjkgMTQuMS0zMy45bDMuOS0zLjljOS05IDE0LjEtMjEuMiAxNC4xLTMzLjlWMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMkgyMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJIMTEyVjI0em0wIDEzNkgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFGaWxlUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MjIxLCBcImZpbGUtZWRpdFwiXSwgXCJmMzFjXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0VjI5OS42bC05NC43IDk0LjdjLTguMiA4LjItMTQgMTguNS0xNi44IDI5LjdsLTE1IDYwLjFjLTIuMyA5LjQtMS44IDE5IDEuNCAyNy44SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6TTU0OS44IDIzNS43bDE0LjQgMTQuNGMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtMjkuNCAyOS40LTcxLTcxIDI5LjQtMjkuNGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHpNMzExLjkgNDE3TDQ0MS4xIDI4Ny44bDcxIDcxTDM4Mi45IDQ4Ny45Yy00LjEgNC4xLTkuMiA3LTE0LjkgOC40bC02MC4xIDE1Yy01LjUgMS40LTExLjItLjItMTUuMi00LjJzLTUuNi05LjctNC4yLTE1LjJsMTUtNjAuMWMxLjQtNS42IDQuMy0xMC44IDguNC0xNC45elwiXVxufTtcbnZhciBmYUZpbGVFZGl0ID0gZmFGaWxlUGVuO1xudmFyIGZhUmVjZWlwdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWNlaXB0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTM0XSwgXCJmNTQzXCIsIFwiTTE0IDIuMkMyMi41LTEuNyAzMi41LS4zIDM5LjYgNS44TDgwIDQwLjQgMTIwLjQgNS44YzktNy43IDIyLjMtNy43IDMxLjIgMEwxOTIgNDAuNCAyMzIuNCA1LjhjOS03LjcgMjIuMy03LjcgMzEuMiAwTDMwNCA0MC40IDM0NC40IDUuOGM3LjEtNi4xIDE3LjEtNy41IDI1LjYtMy42czE0IDEyLjQgMTQgMjEuOFY0ODhjMCA5LjQtNS41IDE3LjktMTQgMjEuOHMtMTguNSAyLjUtMjUuNi0zLjZMMzA0IDQ3MS42bC00MC40IDM0LjZjLTkgNy43LTIyLjMgNy43LTMxLjIgMEwxOTIgNDcxLjZsLTQwLjQgMzQuNmMtOSA3LjctMjIuMyA3LjctMzEuMiAwTDgwIDQ3MS42IDM5LjYgNTA2LjJjLTcuMSA2LjEtMTcuMSA3LjUtMjUuNiAzLjZTMCA0OTcuNCAwIDQ4OFYyNEMwIDE0LjYgNS41IDYuMSAxNCAyLjJ6TTk2IDE0NGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgyODhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIOTZ6TTgwIDM1MmMwIDguOCA3LjIgMTYgMTYgMTZIMjg4YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6TTk2IDI0MGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgyODhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIOTZ6XCJdXG59O1xudmFyIGZhU3F1YXJlUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wZW4nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInBlbi1zcXVhcmVcIiwgXCJwZW5jaWwtc3F1YXJlXCJdLCBcImYxNGJcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0zMjUuOCAxMzkuN2wxNC40IDE0LjRjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTIxLjQgMjEuNC03MS03MSAyMS40LTIxLjRjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDB6TTExOS45IDI4OUwyMjUuMSAxODMuOGw3MSA3MUwxOTAuOSAzNTkuOWMtNC4xIDQuMS05LjIgNy0xNC45IDguNGwtNjAuMSAxNWMtNS41IDEuNC0xMS4yLS4yLTE1LjItNC4ycy01LjYtOS43LTQuMi0xNS4ybDE1LTYwLjFjMS40LTUuNiA0LjMtMTAuOCA4LjQtMTQuOXpcIl1cbn07XG52YXIgZmFQZW5TcXVhcmUgPSBmYVNxdWFyZVBlbjtcbnZhciBmYVBlbmNpbFNxdWFyZSA9IGZhU3F1YXJlUGVuO1xudmFyIGZhU3VpdGNhc2VSb2xsaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1aXRjYXNlLXJvbGxpbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY1YzFcIiwgXCJNMTQ0IDU2YzAtNC40IDMuNi04IDgtOGg4MGM0LjQgMCA4IDMuNiA4IDh2NzJIMTQ0VjU2em0xNzYgNzJIMjg4VjU2YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDE1MkMxMjEuMSAwIDk2IDI1LjEgOTYgNTZ2NzJINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMySDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MmMwLTM1LjMtMjguNy02NC02NC02NHpNMTEyIDIyNEgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDEyOEgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXVxufTtcbnZhciBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1M2ZcIiwgXCJNMTEyIDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2LjlMNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZoMjkuN2MzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw0NC45IDc0LjdjLTE2LjEgMTcuNi0yOC42IDM4LjUtMzYuNiA2MS41Yy0xLjktMS44LTMuNS0zLjktNC45LTYuM0wyMzIgMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgxNTJ6TTQzMiAyMjRhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDI0MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTAtMTkyYy04LjggMC0xNiA3LjItMTYgMTZ2ODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyODhjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbnZhciBmYUNoZXZyb25Eb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXZyb24tZG93bicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjA3OFwiLCBcIk0yMzMuNCA0MDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxOTItMTkyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI1NiAzMzguNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxOTIgMTkyelwiXVxufTtcbnZhciBmYUJhdHRlcnlGdWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhdHRlcnktZnVsbCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODI2NywgXCJiYXR0ZXJ5XCIsIFwiYmF0dGVyeS01XCJdLCBcImYyNDBcIiwgXCJNNDY0IDE2MGM4LjggMCAxNiA3LjIgMTYgMTZWMzM2YzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NmMwLTguOCA3LjItMTYgMTYtMTZINDY0ek04MCA5NkMzNS44IDk2IDAgMTMxLjggMCAxNzZWMzM2YzAgNDQuMiAzNS44IDgwIDgwIDgwSDQ2NGM0NC4yIDAgODAtMzUuOCA4MC04MFYzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyVjE3NmMwLTQ0LjItMzUuOC04MC04MC04MEg4MHptMzY4IDk2SDk2VjMyMEg0NDhWMTkyelwiXVxufTtcbnZhciBmYUJhdHRlcnkgPSBmYUJhdHRlcnlGdWxsO1xudmFyIGZhQmF0dGVyeTUgPSBmYUJhdHRlcnlGdWxsO1xudmFyIGZhU2t1bGxDcm9zc2JvbmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NrdWxsLWNyb3NzYm9uZXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgzNjksIDk3NjBdLCBcImY3MTRcIiwgXCJNMzY4IDEyOGMwIDQ0LjQtMjUuNCA4My41LTY0IDEwNi40VjI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNzZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIzNC40Yy0zOC42LTIzLTY0LTYyLjEtNjQtMTA2LjRDODAgNTcuMyAxNDQuNSAwIDIyNCAwczE0NCA1Ny4zIDE0NCAxMjh6TTE2OCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xNDQtMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMy40IDI3My43YzcuOS0xNS44IDI3LjEtMjIuMiA0Mi45LTE0LjNMMjI0IDM0OC4ybDE3Ny43LTg4LjhjMTUuOC03LjkgMzUtMS41IDQyLjkgMTQuM3MxLjUgMzUtMTQuMyA0Mi45TDI5NS42IDM4NGwxMzQuOCA2Ny40YzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlzLTI3LjEgMjIuMi00Mi45IDE0LjNMMjI0IDQxOS44IDQ2LjMgNTA4LjZjLTE1LjggNy45LTM1IDEuNS00Mi45LTE0LjNzLTEuNS0zNSAxNC4zLTQyLjlMMTUyLjQgMzg0IDE3LjcgMzE2LjZDMS45IDMwOC43LTQuNSAyODkuNSAzLjQgMjczLjd6XCJdXG59O1xudmFyIGZhQ29kZUNvbXBhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29kZS1jb21wYXJlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMTNhXCIsIFwiTTMyMCA0ODhjMCA5LjUtNS42IDE4LjEtMTQuMiAyMS45cy0xOC44IDIuMy0yNS44LTQuMWwtODAtNzJjLTUuMS00LjYtNy45LTExLTcuOS0xNy44czIuOS0xMy4zIDcuOS0xNy44bDgwLTcyYzctNi4zIDE3LjItNy45IDI1LjgtNC4xczE0LjIgMTIuNCAxNC4yIDIxLjl2NDBoMTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTUzLjNDMzcxLjcgMTQxIDM1MiAxMTIuOCAzNTIgODBjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zVjMyMGMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOEgzMjB2NDB6TTQ1NiA4MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xOTIgMjRjMC05LjUgNS42LTE4LjEgMTQuMi0yMS45czE4LjgtMi4zIDI1LjggNC4xbDgwIDcyYzUuMSA0LjYgNy45IDExIDcuOSAxNy44cy0yLjkgMTMuMy03LjkgMTcuOGwtODAgNzJjLTcgNi4zLTE3LjIgNy45LTI1LjggNC4xcy0xNC4yLTEyLjQtMTQuMi0yMS45VjEyOEgxNzZjLTM1LjMgMC02NCAyOC43LTY0IDY0VjM1OC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjNjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM1YxOTJjMC03MC43IDU3LjMtMTI4IDEyOC0xMjhoMTZWMjR6TTU2IDQzMmEyNCAyNCAwIDEgMCA0OCAwIDI0IDI0IDAgMSAwIC00OCAwelwiXVxufTtcbnZhciBmYUxpc3RVbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaXN0LXVsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsaXN0LWRvdHNcIl0sIFwiZjBjYVwiLCBcIk02NCAxNDRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0xOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnpNNjQgNDY0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDgtMjA4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6XCJdXG59O1xudmFyIGZhTGlzdERvdHMgPSBmYUxpc3RVbDtcbnZhciBmYVNjaG9vbExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sLWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NmZcIiwgXCJNMzAyLjIgNS40YzEwLjctNy4yIDI0LjgtNy4yIDM1LjUgMEw0NzMuNyA5Nkg1OTJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMjcyYzAtNjEuOS01MC4xLTExMi0xMTItMTEycy0xMTIgNTAuMS0xMTIgMTEydjI0LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRIMzIwLjNsLS4zIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0djk2aDY0djBINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE0NGMwLTI2LjUgMjEuNS00OCA0OC00OEgxNjYuM0wzMDIuMiA1LjR6TTgwIDIwOHY2NGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjIwOGMwLTguOC03LjItMTYtMTYtMTZIOTZjLTguOCAwLTE2IDcuMi0xNiAxNnptMCAxMjh2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzMzZjMC04LjgtNy4yLTE2LTE2LTE2SDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6bTI0MC03MmE4OCA4OCAwIDEgMCAwLTE3NiA4OCA4OCAwIDEgMCAwIDE3NnptMTYtMTIwdjE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDMyMGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0xOTIgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl1cbn07XG52YXIgZmFUb3dlckNlbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG93ZXItY2VsbCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU4NVwiLCBcIk02Mi42IDIuM0M0Ni4yLTQuMyAyNy42IDMuNiAyMC45IDIwQzcuNCA1My40IDAgODkuOSAwIDEyOHM3LjQgNzQuNiAyMC45IDEwOGM2LjYgMTYuNCAyNS4zIDI0LjMgNDEuNyAxNy43Uzg2LjkgMjI4LjQgODAuMyAyMTJDNjkuOCAxODYuMSA2NCAxNTcuOCA2NCAxMjhzNS44LTU4LjEgMTYuMy04NEM4Ni45IDI3LjYgNzkgOSA2Mi42IDIuM3ptNDUwLjggMEM0OTcgOSA0ODkuMSAyNy42IDQ5NS43IDQ0QzUwNi4yIDY5LjkgNTEyIDk4LjIgNTEyIDEyOHMtNS44IDU4LjEtMTYuMyA4NGMtNi42IDE2LjQgMS4zIDM1IDE3LjcgNDEuN3MzNS0xLjMgNDEuNy0xNy43YzEzLjUtMzMuNCAyMC45LTY5LjkgMjAuOS0xMDhzLTcuNC03NC42LTIwLjktMTA4QzU0OC40IDMuNiA1MjkuOC00LjMgNTEzLjQgMi4zek0zNDAuMSAxNjUuMmM3LjUtMTAuNSAxMS45LTIzLjMgMTEuOS0zNy4yYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMTMuOSA0LjQgMjYuNyAxMS45IDM3LjJMOTguOSA0NjYuOGMtNy4zIDE2LjEtLjIgMzUuMSAxNS45IDQyLjRzMzUuMSAuMiA0Mi40LTE1LjlMMTc3LjcgNDQ4SDM5OC4zbDIwLjYgNDUuMmM3LjMgMTYuMSAyNi4zIDIzLjIgNDIuNCAxNS45czIzLjItMjYuMyAxNS45LTQyLjRMMzQwLjEgMTY1LjJ6TTM2OS4yIDM4NEgyMDYuOGwxNC41LTMySDM1NC43bDE0LjUgMzJ6TTI4OCAyMDUuM0wzMjUuNiAyODhIMjUwLjRMMjg4IDIwNS4zek0xNjMuMyA3My42YzUuMy0xMi4xLS4yLTI2LjMtMTIuNC0zMS42cy0yNi4zIC4yLTMxLjYgMTIuNEMxMDkuNSA3NyAxMDQgMTAxLjkgMTA0IDEyOHM1LjUgNTEgMTUuMyA3My42YzUuMyAxMi4xIDE5LjUgMTcuNyAzMS42IDEyLjRzMTcuNy0xOS41IDEyLjQtMzEuNkMxNTYgMTY1LjggMTUyIDE0Ny40IDE1MiAxMjhzNC0zNy44IDExLjMtNTQuNHpNNDU2LjcgNTQuNGMtNS4zLTEyLjEtMTkuNS0xNy43LTMxLjYtMTIuNHMtMTcuNyAxOS41LTEyLjQgMzEuNkM0MjAgOTAuMiA0MjQgMTA4LjYgNDI0IDEyOHMtNCAzNy44LTExLjMgNTQuNGMtNS4zIDEyLjEgLjIgMjYuMyAxMi40IDMxLjZzMjYuMy0uMiAzMS42LTEyLjRDNDY2LjUgMTc5IDQ3MiAxNTQuMSA0NzIgMTI4cy01LjUtNTEtMTUuMy03My42elwiXVxufTtcbnZhciBmYURvd25Mb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Rvd24tbG9uZycsXG4gIGljb246IFszMjAsIDUxMiwgW1wibG9uZy1hcnJvdy1hbHQtZG93blwiXSwgXCJmMzA5XCIsIFwiTTIgMzM0LjVjLTMuOCA4LjgtMiAxOSA0LjYgMjZsMTM2IDE0NGM0LjUgNC44IDEwLjggNy41IDE3LjQgNy41czEyLjktMi43IDE3LjQtNy41bDEzNi0xNDRjNi42LTcgOC40LTE3LjIgNC42LTI2cy0xMi41LTE0LjUtMjItMTQuNWwtNzIgMCAwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMkwxMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJsMCAyODgtNzIgMGMtOS42IDAtMTguMiA1LjctMjIgMTQuNXpcIl1cbn07XG52YXIgZmFMb25nQXJyb3dBbHREb3duID0gZmFEb3duTG9uZztcbnZhciBmYVJhbmtpbmdTdGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Jhbmtpbmctc3RhcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2MVwiLCBcIk0zNTMuOCA1NC4xTDMzMC4yIDYuM2MtMy45LTguMy0xNi4xLTguNi0yMC40IDBMMjg2LjIgNTQuMWwtNTIuMyA3LjVjLTkuMyAxLjQtMTMuMyAxMi45LTYuNCAxOS44bDM4IDM3LTkgNTIuMWMtMS40IDkuMyA4LjIgMTYuNSAxNi44IDEyLjJsNDYuOS0yNC44IDQ2LjYgMjQuNGM4LjYgNC4zIDE4LjMtMi45IDE2LjgtMTIuMmwtOS01Mi4xIDM4LTM2LjZjNi44LTYuOCAyLjktMTguMy02LjQtMTkuOGwtNTIuMy03LjV6TTI1NiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI1NnpNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJIMTYwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnptNDE2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlY0MTZjMC0xNy43LTE0LjMtMzItMzItMzJINDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpcIl1cbn07XG52YXIgZmFDaGVzc0tpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlc3Mta2luZycsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4MThdLCBcImY0M2ZcIiwgXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDhoMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjU2djQ4SDQwOGMyMi4xIDAgNDAgMTcuOSA0MCA0MGMwIDUuMy0xIDEwLjUtMy4xIDE1LjRMMzY4IDQwMEg4MEwzLjEgMjE1LjRDMSAyMTAuNSAwIDIwNS4zIDAgMjAwYzAtMjIuMSAxNy45LTQwIDQwLTQwSDE5MlYxMTJIMTc2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zOC42IDQ3My40TDgwIDQzMkgzNjhsNDEuNCA0MS40YzQuMiA0LjIgNi42IDEwIDYuNiAxNmMwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNkg1NC42QzQyLjEgNTEyIDMyIDUwMS45IDMyIDQ4OS40YzAtNiAyLjQtMTEuOCA2LjYtMTZ6XCJdXG59O1xudmFyIGZhUGVyc29uSGFyYXNzaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1oYXJhc3NpbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NDlcIiwgXCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNTkuNCAzMDQuNUw4OCAyNTYuOVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjM1LjNsNDcuNCA1Ny4xYzExLjMgMTMuNiAzMS41IDE1LjUgNDUuMSA0LjJzMTUuNS0zMS41IDQuMi00NS4xbC03My43LTg4LjljLTE4LjItMjItNDUuMy0zNC43LTczLjktMzQuN0gxNDUuMWMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjl6TTQ4MCAyNDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNNDY0IDM0NHY1OC43bC00MS40LTQxLjRjLTcuMy03LjMtMTcuNi0xMC42LTI3LjgtOXMtMTguOSA4LjEtMjMuNSAxNy4zbC00OCA5NmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zTDQwOC44IDQzOGw1NC43IDU0LjdjMTIuNCAxMi40IDI5LjEgMTkuMyA0Ni42IDE5LjNjMzYuNCAwIDY1LjktMjkuNSA2NS45LTY1LjlWMzQ0YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2ek0yODggNDhjMCA4LjggNy4yIDE2IDE2IDE2aDU2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMwNGMtOC44IDAtMTYgNy4yLTE2IDE2em0tLjggNDkuN2MtNy45LTQtMTcuNS0uNy0yMS41IDcuMnMtLjcgMTcuNSA3LjIgMjEuNWw0OCAyNGM3LjkgNCAxNy41IC43IDIxLjUtNy4ycy43LTE3LjUtNy4yLTIxLjVsLTQ4LTI0elwiXVxufTtcbnZhciBmYUJyYXppbGlhblJlYWxTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyYXppbGlhbi1yZWFsLXNpZ24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0NmNcIiwgXCJNNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNTAuMmMxMi41IDIuMyAyNC43IDYuNCAzNi4yIDEyLjFsMTAuMSA1LjFjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOXMtMjcuMSAyMi4yLTQyLjkgMTQuM2wtMTAuMi01LjFjLTkuOS01LTIwLjktNy41LTMyLTcuNWgtMS43Yy0yOS44IDAtNTMuOSAyNC4xLTUzLjkgNTMuOWMwIDIyIDEzLjQgNDEuOCAzMy45IDUwbDUyIDIwLjhjNDQuNyAxNy45IDc0LjEgNjEuMiA3NC4xIDEwOS40djMuNGMwIDUxLjItMzMuNiA5NC42LTgwIDEwOS4yVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NjAuNmMtMTUtMy41LTI5LjQtOS43LTQyLjMtMTguM2wtMjMuNC0xNS42Yy0xNC43LTkuOC0xOC43LTI5LjctOC45LTQ0LjRzMjkuNy0xOC43IDQ0LjQtOC45TDM2MS4yIDM4OWMxMC44IDcuMiAyMy40IDExIDM2LjMgMTFjMjcuOSAwIDUwLjUtMjIuNiA1MC41LTUwLjV2LTMuNGMwLTIyLTEzLjQtNDEuOC0zMy45LTUwbC01Mi0yMC44QzMxNy4zIDI1Ny40IDI4OCAyMTQuMSAyODggMTY1LjlDMjg4IDExNCAzMjEuNSA3MCAzNjggNTQuMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmg4MGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDU4LjgtMzUuMiAxMDkuMy04NS43IDEzMS43bDUxLjQgMTI4LjRjNi42IDE2LjQtMS40IDM1LTE3LjggNDEuNnMtMzUtMS40LTQxLjYtMTcuOEwxMDYuMyAzMjBINjRWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI4OCA2NHpNNjQgMjU2aDQ4YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwSDY0VjI1NnpcIl1cbn07XG52YXIgZmFMYW5kbWFya0RvbWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFuZG1hcmstZG9tZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGFuZG1hcmstYWx0XCJdLCBcImY3NTJcIiwgXCJNMjQ4IDBoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRWMzQuN0MzNjguNCA0OC4xIDQzMS45IDExMS42IDQ0NS4zIDE5Mkg0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMi43QzgwLjEgMTExLjYgMTQzLjYgNDguMSAyMjQgMzQuN1YyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNjQgMjg4aDY0VjQxNmg0MFYyODhoNjRWNDE2aDQ4VjI4OGg2NFY0MTZoNDBWMjg4aDY0VjQyMC4zYy42IC4zIDEuMiAuNyAxLjcgMS4xbDQ4IDMyYzExLjcgNy44IDE3IDIyLjQgMTIuOSAzNS45UzQ5NC4xIDUxMiA0ODAgNTEySDMyYy0xNC4xIDAtMjYuNS05LjItMzAuNi0yMi43czEuMS0yOC4xIDEyLjktMzUuOWw0OC0zMmMuNi0uNCAxLjItLjcgMS44LTEuMVYyODh6XCJdXG59O1xudmFyIGZhTGFuZG1hcmtBbHQgPSBmYUxhbmRtYXJrRG9tZTtcbnZhciBmYUFycm93VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs4NTkzXSwgXCJmMDYyXCIsIFwiTTIxNC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxNDEuMlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNDEuMkwzMjkuNCAyNDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwelwiXVxufTtcbnZhciBmYVR2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3R2JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbNjM3MTcsIFwidGVsZXZpc2lvblwiLCBcInR2LWFsdFwiXSwgXCJmMjZjXCIsIFwiTTY0IDY0VjM1Mkg1NzZWNjRINjR6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDU3NmMzNS4zIDAgNjQgMjguNyA2NCA2NFYzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0xMjggNDQ4SDUxMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xudmFyIGZhVGVsZXZpc2lvbiA9IGZhVHY7XG52YXIgZmFUdkFsdCA9IGZhVHY7XG52YXIgZmFTaHJpbXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hyaW1wJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NDI0XSwgXCJlNDQ4XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZzMjguNyA2NCA2NCA2NGgxYzMuNyA4OC45IDc3IDE2MCAxNjcgMTYwaDU2VjEyOEgyNjQgODguOCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0NjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZINjR6TTIyNCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRoNzJWNDA3LjhsLTY0LjEtMjIuNGMtMTIuNS00LjQtMjYuMiAyLjItMzAuNiAxNC43czIuMiAyNi4yIDE0LjcgMzAuNmw0LjUgMS42QzIzMyA0MzMuOSAyMjQgNDQzLjkgMjI0IDQ1NnptMTI4IDIzLjNjMzYuNC0zLjMgNjkuNS0xNy42IDk2LjEtMzkuNmwtODYuNS0zNC42Yy0zIDEuOC02LjIgMy4yLTkuNiA0LjN2NjkuOXpNNDcyLjYgNDE1YzI0LjYtMzAuMyAzOS40LTY4LjkgMzkuNC0xMTFjMC0xMi4zLTEuMy0yNC4zLTMuNy0zNS45TDM4Mi44IDM1NS4xYy44IDMuNCAxLjIgNyAxLjIgMTAuNmMwIDQuNi0uNyA5LTEuOSAxMy4xTDQ3Mi42IDQxNXpNMzM2IDEyOEgzMjBWMzIwaDE4LjNjOS45IDAgMTkuMSAzLjIgMjYuNiA4LjVsMTMzLjUtOTIuNEM0NzEuOCAxNzIuNiA0MDkuMSAxMjggMzM2IDEyOHpNMTY4IDE5MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwelwiXVxufTtcbnZhciBmYUxpc3RDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaXN0LWNoZWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0YXNrc1wiXSwgXCJmMGFlXCIsIFwiTTE1Mi4xIDM4LjJjOS45IDguOSAxMC43IDI0IDEuOCAzMy45bC03MiA4MGMtNC40IDQuOS0xMC42IDcuOC0xNy4yIDcuOXMtMTIuOS0yLjQtMTcuNi03TDcgMTEzQy0yLjMgMTAzLjYtMi4zIDg4LjQgNyA3OXMyNC42LTkuNCAzMy45IDBsMjIuMSAyMi4xIDU1LjEtNjEuMmM4LjktOS45IDI0LTEwLjcgMzMuOS0xLjh6bTAgMTYwYzkuOSA4LjkgMTAuNyAyNCAxLjggMzMuOWwtNzIgODBjLTQuNCA0LjktMTAuNiA3LjgtMTcuMiA3LjlzLTEyLjktMi40LTE3LjYtN0w3IDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDIyLjEgMjIuMSA1NS4xLTYxLjJjOC45LTkuOSAyNC0xMC43IDMzLjktMS44ek0yMjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNjAgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00OCAzNjhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYVRhc2tzID0gZmFMaXN0Q2hlY2s7XG52YXIgZmFKdWdEZXRlcmdlbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnanVnLWRldGVyZ2VudCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTUxOVwiLCBcIk05NiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY0OGg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDg4Qzc0LjcgOTYgNjQgODUuMyA2NCA3MnMxMC43LTI0IDI0LTI0aDhWMjR6TTAgMjU2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4SDI1NmM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI1NnptMjU2IDB2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xudmFyIGZhQ2lyY2xlVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtdXNlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMTQyLCBcInVzZXItY2lyY2xlXCJdLCBcImYyYmRcIiwgXCJNMzk5IDM4NC4yQzM3Ni45IDM0NS44IDMzNS40IDMyMCAyODggMzIwSDIyNGMtNDcuNCAwLTg4LjkgMjUuOC0xMTEgNjQuMmMzNS4yIDM5LjIgODYuMiA2My44IDE0MyA2My44czEwNy44LTI0LjcgMTQzLTYzLjh6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnptMjU2IDE2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0elwiXVxufTtcbnZhciBmYVVzZXJDaXJjbGUgPSBmYUNpcmNsZVVzZXI7XG52YXIgZmFVc2VyU2hpZWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItc2hpZWxkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTA1XCIsIFwiTTIyNCAyNTZBMTI4IDEyOCAwIDEgMCAyMjQgMGExMjggMTI4IDAgMSAwIDAgMjU2em0tNDUuNyA0OEM3OS44IDMwNCAwIDM4My44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMkg0MTguM2MxLjggMCAzLjUtLjIgNS4zLS41Yy03Ni4zLTU1LjEtOTkuOC0xNDEtMTAzLjEtMjAwLjJjLTE2LjEtNC44LTMzLjEtNy4zLTUwLjctNy4zSDE3OC4zem0zMDguOC03OC4zbC0xMjAgNDhDMzU4IDI3Ny40IDM1MiAyODYuMiAzNTIgMjk2YzAgNjMuMyAyNS45IDE2OC44IDEzNC44IDIxNC4yYzUuOSAyLjUgMTIuNiAyLjUgMTguNSAwQzYxNC4xIDQ2NC44IDY0MCAzNTkuMyA2NDAgMjk2YzAtOS44LTYtMTguNi0xNS4xLTIyLjNsLTEyMC00OGMtNS43LTIuMy0xMi4xLTIuMy0xNy44IDB6TTU5MS40IDMxMmMtMy45IDUwLjctMjcuMiAxMTYuNy05NS40IDE0OS43VjI3My44TDU5MS40IDMxMnpcIl1cbn07XG52YXIgZmFXaW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dpbmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3MmVcIiwgXCJNMjg4IDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDM1MmM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem02NCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTEyOCA1MTJoMzJjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMTYwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl1cbn07XG52YXIgZmFDYXJCdXJzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXItYnVyc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImNhci1jcmFzaFwiXSwgXCJmNWUxXCIsIFwiTTE3NiA4Yy02LjYgMC0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0TDU1LjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjFMMTAuOSAyMDYuNGMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMkw5MC42IDMyN2MtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNmwzNS4zLTMyLjUgOS41LTM1LjQgMTAuNC0zOC42YzgtMjkuOSAzMC41LTUyLjEgNTcuOS02MC45bDQxLTU5LjJjMTEuMy0xNi4zIDI2LjQtMjguOSA0My41LTM3LjJjLS40LS42LS44LTEuMi0xLjMtMS44Yy00LjEtNS4xLTEwLjktNy4yLTE3LjItNS4zTDIyMC4zIDkyLjFsLTI5LjQtNzRDMTg4LjQgMTIgMTgyLjYgOCAxNzYgOHpNMzY3LjcgMTYxLjVsMTM1LjYgMzYuM2M2LjUgMS44IDExLjMgNy40IDExLjggMTQuMmw0LjYgNTYuNS0yMDEuNS01NCAzMi4yLTQ2LjZjMy44LTUuNiAxMC44LTguMSAxNy4zLTYuNHptLTY5LjktMzBsLTQ3LjkgNjkuM2MtMjEuNiAzLTQwLjMgMTguNi00Ni4zIDQxbC0xMC40IDM4LjYtMTYuNiA2MS44LTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42bDguMy0zMC45IDI0Ny4zIDY2LjMtOC4zIDMwLjljLTQuNiAxNy4xIDUuNiAzNC42IDIyLjYgMzkuMmwxNS41IDQuMWMxNy4xIDQuNiAzNC42LTUuNiAzOS4yLTIyLjZsOC4zLTMwLjlMNTk1IDM4OGwxMC40LTM4LjZjNi0yMi40LTIuNS00NS4yLTE5LjYtNTguN2wtNi44LTg0Yy0yLjctMzMuNy0yNi40LTYyLTU5LTcwLjhMMzg0LjIgOTkuN2MtMzIuNy04LjgtNjcuMyA0LTg2LjUgMzEuOHptLTE3IDEzMWEyNCAyNCAwIDEgMSAtMTIuNCA0Ni40IDI0IDI0IDAgMSAxIDEyLjQtNDYuNHptMjE3LjkgODMuMkEyNCAyNCAwIDEgMSA1NDUgMzU4LjFhMjQgMjQgMCAxIDEgLTQ2LjQtMTIuNHpcIl1cbn07XG52YXIgZmFDYXJDcmFzaCA9IGZhQ2FyQnVyc3Q7XG52YXIgZmFZID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3knLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjFdLCBcIjU5XCIsIFwiTTU4IDQ1LjRDNDcuOCAzMSAyNy44IDI3LjcgMTMuNCAzOFMtNC4zIDY4LjIgNiA4Mi42TDE2MCAyOTguM1Y0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyOTguM0wzNzggODIuNmMxMC4zLTE0LjQgNi45LTM0LjQtNy40LTQ0LjZTMzM2LjIgMzEgMzI2IDQ1LjRMMTkyIDIzMi45IDU4IDQ1LjR6XCJdXG59O1xudmFyIGZhUGVyc29uU25vd2JvYXJkaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1zbm93Ym9hcmRpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MzgsIFwic25vd2JvYXJkaW5nXCJdLCBcImY3Y2VcIiwgXCJNMjA5LjcgMy40YzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjNsMjUgNTAgNDIuNCA4LjVjMTkuNSAzLjkgMzcuOCAxMi4zIDUzLjUgMjQuNWwxMjYuMSA5OC4xYzE0IDEwLjkgMTYuNSAzMSA1LjYgNDQuOXMtMzEgMTYuNS00NC45IDUuNmwtNzIuMS01Ni4xLTcxLjUgMzEuOCAzMy4xIDI3LjZjMjMuMiAxOS4zIDMzLjUgNTAgMjYuNyA3OS40bC0xNy40IDc1LjJjLTIuMiA5LjQtOC4yIDE2LjgtMTYuMSAyMWw4Ni41IDMzLjFjNC42IDEuOCA5LjQgMi42IDE0LjMgMi42SDQ3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg0NDMuOGMtMTAuOCAwLTIxLjQtMi0zMS41LTUuOEw2MC4xIDM3MS4zYy0xMS41LTQuNC0yMi0xMS4yLTMwLjgtMjBMNyAzMjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyMi40IDIyLjRjNCA0IDguNyA3LjEgMTQgOS4xbDIyLjQgOC42Yy0uOC0xLjYtMS41LTMuMi0yLjEtNC45Yy01LjYtMTYuOCAzLjUtMzQuOSAyMC4yLTQwLjVMMTkyIDI2NC45bDAtNTMuMmMwLTI0LjIgMTMuNy00Ni40IDM1LjQtNTcuMmw0NS4yLTIyLjYtNy41LTEuNWMtMTkuNC0zLjktMzUuOS0xNi41LTQ0LjctMzQuMWwtMjUtNTBjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjl6TTEzOSAzNTAuMWwxNTkgNjAuOWMtMi4xLTUuNi0yLjYtMTEuOS0xLjEtMTguMmwxNy40LTc1LjJjMS40LTUuOS0uNy0xMi01LjMtMTUuOWwtNTIuOC00NCAwIDE4LjhjMCAyMC43LTEzLjIgMzktMzIuOCA0NS41TDEzOSAzNTAuMXpNNDMyIDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYVNub3dib2FyZGluZyA9IGZhUGVyc29uU25vd2JvYXJkaW5nO1xudmFyIGZhVHJ1Y2tGYXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZhc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInNoaXBwaW5nLWZhc3RcIl0sIFwiZjQ4YlwiLCBcIk0xMTIgMEM4NS41IDAgNjQgMjEuNSA2NCA0OFY5NkgxNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg2NCAyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZINjQgMjQwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDY0IDE2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDY0IDIwOGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg2NFY0MTZjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NkgzODRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYyODggMjU2IDIzNy4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxMTQuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0g0MTZWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMTEyek01NDQgMjM3LjNWMjU2SDQxNlYxNjBoNTAuN0w1NDQgMjM3LjN6TTE2MCAzNjhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0yNzIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpcIl1cbn07XG52YXIgZmFTaGlwcGluZ0Zhc3QgPSBmYVRydWNrRmFzdDtcbnZhciBmYUZpc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlzaCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODAzMV0sIFwiZjU3OFwiLCBcIk0xODAuNSAxNDEuNUMyMTkuNyAxMDguNSAyNzIuNiA4MCAzMzYgODBzMTE2LjMgMjguNSAxNTUuNSA2MS41YzM5LjEgMzMgNjYuOSA3Mi40IDgxIDk5LjhjNC43IDkuMiA0LjcgMjAuMSAwIDI5LjNjLTE0LjEgMjcuNC00MS45IDY2LjgtODEgOTkuOEM0NTIuMyA0MDMuNSAzOTkuNCA0MzIgMzM2IDQzMnMtMTE2LjMtMjguNS0xNTUuNS02MS41Yy0xNi4yLTEzLjctMzAuNS0yOC41LTQyLjctNDMuMUw0OC4xIDM3OS42Yy0xMi41IDcuMy0yOC40IDUuMy0zOC43LTQuOVMtMyAzNDguNyA0LjIgMzM2LjFMNTAgMjU2IDQuMiAxNzUuOWMtNy4yLTEyLjYtNS0yOC40IDUuMy0zOC42czI2LjEtMTIuMiAzOC43LTQuOWw4OS43IDUyLjNjMTIuMi0xNC42IDI2LjUtMjkuNCA0Mi43LTQzLjF6TTQ0OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG52YXIgZmFVc2VyR3JhZHVhdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1ncmFkdWF0ZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUwMVwiLCBcIk0yMTkuMyAuNWMzLjEtLjYgNi4zLS42IDkuNCAwbDIwMCA0MEM0MzkuOSA0Mi43IDQ0OCA1Mi42IDQ0OCA2NHMtOC4xIDIxLjMtMTkuMyAyMy41TDM1MiAxMDIuOVYxNjBjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhWMTAyLjlMNDggOTMuM3Y2NS4xbDE1LjcgNzguNGMuOSA0LjctLjMgOS42LTMuMyAxMy4zcy03LjYgNS45LTEyLjQgNS45SDE2Yy00LjggMC05LjMtMi4xLTEyLjQtNS45cy00LjMtOC42LTMuMy0xMy4zTDE2IDE1OC40Vjg2LjZDNi41IDgzLjMgMCA3NC4zIDAgNjRDMCA1Mi42IDguMSA0Mi43IDE5LjMgNDAuNWwyMDAtNDB6TTExMS45IDMyNy43YzEwLjUtMy40IDIxLjggLjQgMjkuNCA4LjVsNzEgNzUuNWM2LjMgNi43IDE3IDYuNyAyMy4zIDBsNzEtNzUuNWM3LjYtOC4xIDE4LjktMTEuOSAyOS40LTguNUM0MDEgMzQ4LjYgNDQ4IDQwOS40IDQ0OCA0ODEuM2MwIDE3LTEzLjggMzAuNy0zMC43IDMwLjdIMzAuN0MxMy44IDUxMiAwIDQ5OC4yIDAgNDgxLjNjMC03MS45IDQ3LTEzMi43IDExMS45LTE1My42elwiXVxufTtcbnZhciBmYUNpcmNsZUhhbGZTdHJva2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWhhbGYtc3Ryb2tlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTY4MCwgXCJhZGp1c3RcIl0sIFwiZjA0MlwiLCBcIk00NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyVjQ0OGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2elwiXVxufTtcbnZhciBmYUFkanVzdCA9IGZhQ2lyY2xlSGFsZlN0cm9rZTtcbnZhciBmYUNsYXBwZXJib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbGFwcGVyYm9hcmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUxMzFcIiwgXCJNNDQ4IDMySDM2MS45bC0xIDEtMTI3IDEyN2g5Mi4xbDEtMUw0NTMuOCAzMi4zYy0xLjktLjItMy44LS4zLTUuOC0uM3ptNjQgMTI4Vjk2YzAtMTUuMS01LjMtMjkuMS0xNC00MGwtMTA0IDEwNEg1MTJ6TTI5NC4xIDMySDIwMS45bC0xIDFMNzMuOSAxNjBoOTIuMWwxLTEgMTI3LTEyN3pNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnY2NEg2LjFsMS0xIDEyNy0xMjdINjR6TTUxMiAxOTJIMFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MnpcIl1cbn07XG52YXIgZmFDaXJjbGVSYWRpYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXJhZGlhdGlvbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3NjIsIFwicmFkaWF0aW9uLWFsdFwiXSwgXCJmN2JhXCIsIFwiTTI1NiA2NGExOTIgMTkyIDAgMSAxIDAgMzg0IDE5MiAxOTIgMCAxIDEgMC0zODR6bTAgNDQ4QTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjAwIDI1NmMwLTIwLjcgMTEuMy0zOC44IDI4LTQ4LjVsLTM2LTYyLjNjLTguOC0xNS4zLTI4LjctMjAuOC00Mi05Yy0yNS42IDIyLjYtNDMuOSA1My4zLTUwLjkgODguMUM5NS43IDI0MS41IDExMC4zIDI1NiAxMjggMjU2bDcyIDB6bTI4IDQ4LjVsLTM2IDYyLjRjLTguOCAxNS4zLTMuNiAzNS4yIDEzLjEgNDAuOGMxNiA1LjQgMzMuMSA4LjMgNTAuOSA4LjNzMzQuOS0yLjkgNTAuOS04LjNjMTYuNy01LjYgMjEuOS0yNS41IDEzLjEtNDAuOGwtMzYtNjIuNGMtOC4yIDQuOC0xNy44IDcuNS0yOCA3LjVzLTE5LjgtMi43LTI4LTcuNXpNMzEyIDI1Nmw3MiAwYzE3LjcgMCAzMi4zLTE0LjUgMjguOC0zMS44Yy03LTM0LjgtMjUuMy02NS41LTUwLjktODguMWMtMTMuMi0xMS43LTMzLjEtNi4zLTQyIDlsLTM2IDYyLjNjMTYuNyA5LjcgMjggMjcuOCAyOCA0OC41em0tNTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYVJhZGlhdGlvbkFsdCA9IGZhQ2lyY2xlUmFkaWF0aW9uO1xudmFyIGZhQmFzZWJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFzZWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNTgsIDk5MTgsIFwiYmFzZWJhbGwtYmFsbFwiXSwgXCJmNDMzXCIsIFwiTTYyLjcgMjIzLjRjLTQuOCAuNC05LjcgLjYtMTQuNyAuNmMtMTUuNiAwLTMwLjgtMi00NS4yLTUuOUMxOS4yIDEwNy4xIDEwNy4xIDE5LjIgMjE4LjEgMi44QzIyMiAxNy4yIDIyNCAzMi40IDIyNCA0OGMwIDQuOS0uMiA5LjgtLjYgMTQuN2MtLjcgOC44IDUuOCAxNi41IDE0LjYgMTcuM3MxNi41LTUuOCAxNy4zLTE0LjZjLjUtNS43IC43LTExLjUgLjctMTcuM2MwLTE2LjUtMS45LTMyLjYtNS42LTQ3LjljMS44IDAgMy43LS4xIDUuNi0uMUMzOTcuNCAwIDUxMiAxMTQuNiA1MTIgMjU2YzAgMS45IDAgMy43LS4xIDUuNmMtMTUuNC0zLjYtMzEuNC01LjYtNDcuOS01LjZjLTUuOCAwLTExLjYgLjItMTcuMyAuN2MtOC44IC43LTE1LjQgOC41LTE0LjYgMTcuM3M4LjUgMTUuNCAxNy4zIDE0LjZjNC44LS40IDkuNy0uNiAxNC43LS42YzE1LjYgMCAzMC44IDIgNDUuMiA1LjlDNDkyLjggNDA0LjkgNDA0LjkgNDkyLjggMjkzLjkgNTA5LjJDMjkwIDQ5NC44IDI4OCA0NzkuNiAyODggNDY0YzAtNC45IC4yLTkuOCAuNi0xNC43Yy43LTguOC01LjgtMTYuNS0xNC42LTE3LjNzLTE2LjUgNS44LTE3LjMgMTQuNmMtLjUgNS43LS43IDExLjUtLjcgMTcuM2MwIDE2LjUgMS45IDMyLjYgNS42IDQ3LjljLTEuOCAwLTMuNyAuMS01LjYgLjFDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZjMC0xLjkgMC0zLjcgLjEtNS42QzE1LjQgMjU0LjEgMzEuNSAyNTYgNDggMjU2YzUuOCAwIDExLjYtLjIgMTcuMy0uN2M4LjgtLjcgMTUuNC04LjUgMTQuNi0xNy4zcy04LjUtMTUuNC0xNy4zLTE0LjZ6TTEyMS4zIDIwOGMtOCAzLjctMTEuNiAxMy4yLTcuOSAyMS4yczEzLjIgMTEuNiAyMS4yIDcuOWM0NS4yLTIwLjggODEuNy01Ny4yIDEwMi41LTEwMi41YzMuNy04IC4yLTE3LjUtNy45LTIxLjJzLTE3LjUtLjItMjEuMiA3LjljLTE3LjYgMzguMy00OC41IDY5LjItODYuNyA4Ni43em0yNzcuMiA3NC43Yy0zLjctOC0xMy4yLTExLjYtMjEuMi03LjljLTQ1LjIgMjAuOC04MS43IDU3LjItMTAyLjUgMTAyLjVjLTMuNyA4LS4yIDE3LjUgNy45IDIxLjJzMTcuNSAuMiAyMS4yLTcuOWMxNy42LTM4LjMgNDguNS02OS4yIDg2LjctODYuN2M4LTMuNyAxMS42LTEzLjIgNy45LTIxLjJ6XCJdXG59O1xudmFyIGZhQmFzZWJhbGxCYWxsID0gZmFCYXNlYmFsbDtcbnZhciBmYUpldEZpZ2h0ZXJVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqZXQtZmlnaHRlci11cCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUxOFwiLCBcIk0yNzAuNyA5LjdDMjY4LjIgMy44IDI2Mi40IDAgMjU2IDBzLTEyLjIgMy44LTE0LjcgOS43TDE5Ny4yIDExMi42Yy0zLjQgOC01LjIgMTYuNS01LjIgMjUuMnY3N2wtMTQ0IDg0VjI4MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY1NiAzMiAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0di04SDE5MnYzMi43TDEzMy41IDQ2OGMtMy41IDMtNS41IDcuNC01LjUgMTJ2MTZjMCA4LjggNy4yIDE2IDE2IDE2aDk2VjQ0OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djY0aDk2YzguOCAwIDE2LTcuMiAxNi0xNlY0ODBjMC00LjYtMi05LTUuNS0xMkwzMjAgNDE2LjdWMzg0SDQ2NHY4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzY4IDMzNiAyODBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2MTguOGwtMTQ0LTg0di03N2MwLTguNy0xLjgtMTcuMi01LjItMjUuMkwyNzAuNyA5Ljd6XCJdXG59O1xudmFyIGZhRGlhZ3JhbVByb2plY3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGlhZ3JhbS1wcm9qZWN0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJwcm9qZWN0LWRpYWdyYW1cIl0sIFwiZjU0MlwiLCBcIk0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMyaDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4Vjk2SDM4NFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg5NmMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0MzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE2MEgxOTJ2MTZjMCAxLjctLjEgMy40LS4zIDVMMjcyIDI4OGg5NmMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjMzNmMwLTEuNyAuMS0zLjQgLjMtNUwxNDQgMjI0SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MHpcIl1cbn07XG52YXIgZmFQcm9qZWN0RGlhZ3JhbSA9IGZhRGlhZ3JhbVByb2plY3Q7XG52YXIgZmFDb3B5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvcHknLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwYzVcIiwgXCJNMjA4IDBIMzMyLjFjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlWMzM2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDIwOGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDhjMC0yNi41IDIxLjUtNDggNDgtNDh6TTQ4IDEyOGg4MHY2NEg2NFY0NDhIMjU2VjQxNmg2NHY0OGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbnZhciBmYVZvbHVtZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbHVtZS14bWFyaycsXG4gIGljb246IFs1NzYsIDUxMiwgW1widm9sdW1lLW11dGVcIiwgXCJ2b2x1bWUtdGltZXNcIl0sIFwiZjZhOVwiLCBcIk0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NFY0NDhjMCAxMi42LTcuNCAyNC0xOC45IDI5LjJzLTI1IDMuMS0zNC40LTUuM0wxMzEuOCAzNTJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjIyNGMwLTM1LjMgMjguNy02NCA2NC02NGg2Ny44TDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6TTQyNSAxNjdsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXVxufTtcbnZhciBmYVZvbHVtZU11dGUgPSBmYVZvbHVtZVhtYXJrO1xudmFyIGZhVm9sdW1lVGltZXMgPSBmYVZvbHVtZVhtYXJrO1xudmFyIGZhSGFuZFNwYXJrbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtc3BhcmtsZXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUwNWRcIiwgXCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMjQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYyNDBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzMjMuMWMtMTEuOSA0LjgtMjEuMyAxNC45LTI1IDI3LjhsLTguOSAzMS4yTDQ3OC45IDM5MUM0NjAuNiAzOTYuMyA0NDggNDEzIDQ0OCA0MzJjMCAxOC45IDEyLjUgMzUuNiAzMC42IDQwLjlDNDQ4LjQgNDk3LjQgNDA5LjkgNTEyIDM2OCA1MTJIMzQ4LjhjLTU5LjYgMC0xMTYuOS0yMi45LTE2MC02NEw3Ni40IDM0MWMtMTYtMTUuMi0xNi42LTQwLjYtMS40LTU2LjZzNDAuNi0xNi42IDU2LjYtMS40bDYwLjUgNTcuNmMwLTEuNS0uMS0zLjEtLjEtNC42VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMjQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS03LjMgMzI2LjZjLTEuMS0zLjktNC43LTYuNi04LjctNi42cy03LjYgMi43LTguNyA2LjZMMjg4IDM1MmwtMjUuNCA3LjNjLTMuOSAxLjEtNi42IDQuNy02LjYgOC43czIuNyA3LjYgNi42IDguN0wyODggMzg0bDcuMyAyNS40YzEuMSAzLjkgNC43IDYuNiA4LjcgNi42czcuNi0yLjcgOC43LTYuNkwzMjAgMzg0bDI1LjQtNy4zYzMuOS0xLjEgNi42LTQuNyA2LjYtOC43cy0yLjctNy42LTYuNi04LjdMMzIwIDM1MmwtNy4zLTI1LjR6TTEwNCAxMjBsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkwxMDQgMTY4IDkwLjIgMjE2LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1NiAxNjggNy43IDE1NC4yQzMuMSAxNTIuOSAwIDE0OC43IDAgMTQ0czMuMS04LjkgNy43LTEwLjJMNTYgMTIwIDY5LjggNzEuN0M3MS4xIDY3LjEgNzUuMyA2NCA4MCA2NHM4LjkgMy4xIDEwLjIgNy43TDEwNCAxMjB6TTU4NCA0MDhsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkw1ODQgNDU2bC0xMy44IDQ4LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1MzYgNDU2bC00OC4zLTEzLjhjLTQuNi0xLjMtNy43LTUuNS03LjctMTAuMnMzLjEtOC45IDcuNy0xMC4yTDUzNiA0MDhsMTMuOC00OC4zYzEuMy00LjYgNS41LTcuNyAxMC4yLTcuN3M4LjkgMy4xIDEwLjIgNy43TDU4NCA0MDh6XCJdXG59O1xudmFyIGZhR3JpcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdncmlwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJncmlwLWhvcml6b250YWxcIl0sIFwiZjU4ZFwiLCBcIk0xMjggMTM2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDk2QzE3LjkgOTYgMCAxMTMuOSAwIDEzNmwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwSDg4YzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6bTAgMTkyYzAtMjIuMS0xNy45LTQwLTQwLTQwSDQwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwSDg4YzIyLjEgMCA0MC0xNy45IDQwLTQwVjMyOHptMzItMTkydjQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwaDQ4YzIyLjEgMCA0MC0xNy45IDQwLTQwVjEzNmMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTI4OCAzMjhjMC0yMi4xLTE3LjktNDAtNDAtNDBIMjAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwaDQ4YzIyLjEgMCA0MC0xNy45IDQwLTQwVjMyOHptMzItMTkydjQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwaDQ4YzIyLjEgMCA0MC0xNy45IDQwLTQwVjEzNmMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTQ0OCAzMjhjMC0yMi4xLTE3LjktNDAtNDAtNDBIMzYwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHY0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGg0OGMyMi4xIDAgNDAtMTcuOSA0MC00MFYzMjh6XCJdXG59O1xudmFyIGZhR3JpcEhvcml6b250YWwgPSBmYUdyaXA7XG52YXIgZmFTaGFyZUZyb21TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hhcmUtZnJvbS1zcXVhcmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MTUwOSwgXCJzaGFyZS1zcXVhcmVcIl0sIFwiZjE0ZFwiLCBcIk0zNTIgMjI0SDMwNS41Yy00NSAwLTgxLjUgMzYuNS04MS41IDgxLjVjMCAyMi4zIDEwLjMgMzQuMyAxOS4yIDQwLjVjNi44IDQuNyAxMi44IDEyIDEyLjggMjAuM2MwIDkuOC04IDE3LjgtMTcuOCAxNy44aC0yLjVjLTIuNCAwLTQuOC0uNC03LjEtMS40QzIxMC44IDM3NC44IDEyOCAzMzMuNCAxMjggMjQwYzAtNzkuNSA2NC41LTE0NCAxNDQtMTQ0aDgwVjM0LjdDMzUyIDE1LjUgMzY3LjUgMCAzODYuNyAwYzguNiAwIDE2LjggMy4yIDIzLjIgOC45TDU0OC4xIDEzMy4zYzcuNiA2LjggMTEuOSAxNi41IDExLjkgMjYuN3MtNC4zIDE5LjktMTEuOSAyNi43bC0xMzkgMTI1LjFjLTUuOSA1LjMtMTMuNSA4LjItMjEuNCA4LjJIMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyMjR6TTgwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZWNDMyYzAgOC44IDcuMiAxNiAxNiAxNkg0MDBjOC44IDAgMTYtNy4yIDE2LTE2VjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwSDgwYy00NC4yIDAtODAtMzUuOC04MC04MFYxMTJDMCA2Ny44IDM1LjggMzIgODAgMzJoNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODB6XCJdXG59O1xudmFyIGZhU2hhcmVTcXVhcmUgPSBmYVNoYXJlRnJvbVNxdWFyZTtcbnZhciBmYUNoaWxkQ29tYmF0YW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoaWxkLWNvbWJhdGFudCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiY2hpbGQtcmlmbGVcIl0sIFwiZTRlMFwiLCBcIk0xNzYgMTI4QTY0IDY0IDAgMSAwIDE3NiAwYTY0IDY0IDAgMSAwIDAgMTI4em0tOCAzNTJWMzUyaDE2VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMwMC41TDI2MC45IDMyMWM5LjQgMTUgMjkuMiAxOS40IDQ0LjEgMTBzMTkuNC0yOS4yIDEwLTQ0LjFsLTUxLjctODIuMWMtMTcuNi0yNy45LTQ4LjMtNDQuOS04MS4yLTQ0LjlIMTY5LjhjLTMzIDAtNjMuNyAxNi45LTgxLjIgNDQuOUwzNi45IDI4N2MtOS40IDE1LTQuOSAzNC43IDEwIDQ0LjFzMzQuNyA0LjkgNDQuMS0xMEwxMDQgMzAwLjVWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTQ0OCAwSDQzMiA0MTZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZWMTMyLjNjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43djMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMlYzNjhjMCAxNy43IDE0LjMgMzIgMzIgMzJoMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2aDU5LjVjMTAuNCAwIDE4LTkuOCAxNS41LTE5LjlMNDg0IDQwMGg0NGM4LjggMCAxNi03LjIgMTYtMTZWMzY4YzAtOC44LTcuMi0xNi0xNi0xNkg0ODBWMzI1LjNsNTMuMS0xNy43YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4yVjIwOGMwLTguOC03LjItMTYtMTYtMTZINTEyYy04LjggMC0xNiA3LjItMTYgMTZ2NTZsLTE2IDUuM1YxNjBjMC0xMS44LTYuNC0yMi4yLTE2LTI3LjdWMTZjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbnZhciBmYUNoaWxkUmlmbGUgPSBmYUNoaWxkQ29tYmF0YW50O1xudmFyIGZhR3VuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2d1bicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTE5YlwiLCBcIk01MjggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2OEgzMkMxNC4zIDY0IDAgNzguMyAwIDk2VjIwOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0MmMyMC44IDAgMzYuMSAxOS42IDMxIDM5LjhMMzMgNDQwLjJjLTIuNCA5LjYtLjIgMTkuNyA1LjggMjcuNVM1NC4xIDQ4MCA2NCA0ODBoOTZjMTQuNyAwIDI3LjUtMTAgMzEtMjQuMkwyMTcgMzUySDMyMS40YzIzLjcgMCA0NC44LTE0LjkgNTIuNy0zNy4yTDQwMC45IDI0MEg0MzJjOC41IDAgMTYuNi0zLjQgMjIuNi05LjRMNDc3LjMgMjA4SDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMlY5NmMwLTE3LjctMTQuMy0zMi0zMi0zMkg1MjhWNTZ6TTMyMS40IDMwNEgyMjlsMTYtNjRoMTA1bC0yMSA1OC43Yy0xLjEgMy4yLTQuMiA1LjMtNy41IDUuM3pNODAgMTI4SDQ2NGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFTcXVhcmVQaG9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtcGhvbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInBob25lLXNxdWFyZVwiXSwgXCJmMDk4XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHptOTAuNyA5Ni43YzkuNy0yLjYgMTkuOSAyLjMgMjMuNyAxMS42bDIwIDQ4YzMuNCA4LjIgMSAxNy42LTUuOCAyMy4yTDE2OCAyMzEuN2MxNi42IDM1LjIgNDUuMSA2My43IDgwLjMgODAuM2wyMC4yLTI0LjdjNS42LTYuOCAxNS05LjIgMjMuMi01LjhsNDggMjBjOS4zIDMuOSAxNC4yIDE0IDExLjYgMjMuN2wtMTIgNDRDMzM2LjkgMzc4IDMyOSAzODQgMzIwIDM4NEMxOTYuMyAzODQgOTYgMjgzLjcgOTYgMTYwYzAtOSA2LTE2LjkgMTQuNy0xOS4zbDQ0LTEyelwiXVxufTtcbnZhciBmYVBob25lU3F1YXJlID0gZmFTcXVhcmVQaG9uZTtcbnZhciBmYVBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1cycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEwMTMzLCA2MTU0MywgXCJhZGRcIl0sIFwiMmJcIiwgXCJNMjU2IDgwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjIyNEg0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgxOTJWNDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4SDQwMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyNTZWODB6XCJdXG59O1xudmFyIGZhQWRkID0gZmFQbHVzO1xudmFyIGZhRXhwYW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V4cGFuZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjA2NVwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NFYzNTJ6TTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg2NHY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyMHpNNDQ4IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NEgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyelwiXVxufTtcbnZhciBmYUNvbXB1dGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbXB1dGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGU1XCIsIFwiTTM4NCA5NlYzMjBINjRMNjQgOTZIMzg0ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NEgxODEuM2wtMTAuNyAzMkg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjc3LjNsLTEwLjctMzJIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em00NjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDUyOHptMTYgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINTQ0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tMTYgODBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDU0NGMtOC44IDAtMTYtNy4yLTE2LTE2em0zMiAxNjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3htYXJrJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDczLCAxMDAwNSwgMTAwMDYsIDEwMDYwLCAyMTUsIFwiY2xvc2VcIiwgXCJtdWx0aXBseVwiLCBcInJlbW92ZVwiLCBcInRpbWVzXCJdLCBcImYwMGRcIiwgXCJNMzQyLjYgMTUwLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDIxMC43IDg2LjYgMTA1LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ni43IDI1NiA0MS40IDM2MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAzMDEuMyAyOTcuNCA0MDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIzNy4zIDI1NiAzNDIuNiAxNTAuNnpcIl1cbn07XG52YXIgZmFDbG9zZSA9IGZhWG1hcms7XG52YXIgZmFNdWx0aXBseSA9IGZhWG1hcms7XG52YXIgZmFSZW1vdmUgPSBmYVhtYXJrO1xudmFyIGZhVGltZXMgPSBmYVhtYXJrO1xudmFyIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy11cC1kb3duLWxlZnQtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93c1wiXSwgXCJmMDQ3XCIsIFwiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjRWMjI0SDEwOS4zbDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40SDIyNFY0MDIuN2wtOS40LTkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTkuNCA5LjRWMjg4SDQwMi43bC05LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNEgyODhWMTA5LjNsOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHpcIl1cbn07XG52YXIgZmFBcnJvd3MgPSBmYUFycm93c1VwRG93bkxlZnRSaWdodDtcbnZhciBmYUNoYWxrYm9hcmRVc2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYWxrYm9hcmQtdXNlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiY2hhbGtib2FyZC10ZWFjaGVyXCJdLCBcImY1MWNcIiwgXCJNMTYwIDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDU3NmMzNS4zIDAgNjQgMjguNyA2NCA2NFYzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzM2LjhjLTExLjgtMjUuNS0yOS45LTQ3LjUtNTIuNC02NEgzODRWMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjMyaDY0VjY0TDIyNCA2NHY0OS4xQzIwNS4yIDEwMi4yIDE4My4zIDk2IDE2MCA5NlY2NHptMCA2NGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpNMTMzLjMgMzUyaDUzLjNDMjYwLjMgMzUyIDMyMCA0MTEuNyAzMjAgNDg1LjNjMCAxNC43LTExLjkgMjYuNy0yNi43IDI2LjdIMjYuN0MxMS45IDUxMiAwIDUwMC4xIDAgNDg1LjNDMCA0MTEuNyA1OS43IDM1MiAxMzMuMyAzNTJ6XCJdXG59O1xudmFyIGZhQ2hhbGtib2FyZFRlYWNoZXIgPSBmYUNoYWxrYm9hcmRVc2VyO1xudmFyIGZhUGVzb1NpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVzby1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMjIyXCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHY2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgNjR2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoODBjNjguNCAwIDEyNy43LTM5IDE1Ni44LTk2SDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmgtLjdjLjUtNS4zIC43LTEwLjYgLjctMTZzLS4yLTEwLjctLjctMTZoLjdjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzMyLjhDMzAzLjcgNzEgMjQ0LjQgMzIgMTc2IDMySDY0em0xOTAuNCA5Nkg5NlY5Nmg4MGMzMC41IDAgNTguMiAxMi4yIDc4LjQgMzJ6TTk2IDE5MkgyODYuOWMuNyA1LjIgMS4xIDEwLjYgMS4xIDE2cy0uNCAxMC44LTEuMSAxNkg5NlYxOTJ6bTE1OC40IDk2Yy0yMC4yIDE5LjgtNDcuOSAzMi03OC40IDMySDk2VjI4OEgyNTQuNHpcIl1cbn07XG52YXIgZmFCdWlsZGluZ1NoaWVsZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1zaGllbGQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZDhcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjIwN2wtNDIuNCAxN0gzMDQgMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2MzIgMjQuMlYzMDRjMCAuOSAuMSAxLjcgLjIgMi42YzIuMyA1OC4xIDI0LjEgMTQ0LjggOTguNyAyMDEuNWMtNS44IDIuNS0xMi4yIDMuOS0xOC45IDMuOUgyNDBWNDMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4djgwSDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpNODAgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwem04MCAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ6TTY0IDExMnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDE3NnptODAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2ek00MjMuMSAyMjUuN2M1LjctMi4zIDEyLjEtMi4zIDE3LjggMGwxMjAgNDhDNTcwIDI3Ny40IDU3NiAyODYuMiA1NzYgMjk2YzAgNjMuMy0yNS45IDE2OC44LTEzNC44IDIxNC4yYy01LjkgMi41LTEyLjYgMi41LTE4LjUgMEMzMTMuOSA0NjQuOCAyODggMzU5LjMgMjg4IDI5NmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMC00OHpNNTI3LjQgMzEyTDQzMiAyNzMuOFY0NjEuN2M2OC4yLTMzIDkxLjUtOTkgOTUuNC0xNDkuN3pcIl1cbn07XG52YXIgZmFCYWJ5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhYnknLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY3N2NcIiwgXCJNMTUyIDg4YTcyIDcyIDAgMSAxIDE0NCAwQTcyIDcyIDAgMSAxIDE1MiA4OHpNMzkuNyAxNDQuNWMxMy0xNy45IDM4LTIxLjggNTUuOS04LjhMMTMxLjggMTYyYzI2LjggMTkuNSA1OS4xIDMwIDkyLjIgMzBzNjUuNC0xMC41IDkyLjItMzBsMzYuMi0yNi40YzE3LjktMTMgNDIuOS05IDU1LjkgOC44czkgNDIuOS04LjggNTUuOWwtMzYuMiAyNi40Yy0xMy42IDkuOS0yOC4xIDE4LjItNDMuMyAyNVYyODhIMTI4VjI1MS43Yy0xNS4yLTYuNy0yOS43LTE1LjEtNDMuMy0yNUw0OC41IDIwMC4zYy0xNy45LTEzLTIxLjgtMzgtOC44LTU1Ljl6bTg5LjggMTg0LjhsNjAuNiA1My0yNiAzNy4yIDI0LjMgMjQuM2MxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNnMtNDAuOSAxNS42LTU2LjYgMGwtNDgtNDhDNzAgNDM4LjYgNjguMSA0MTcgNzkuMiA0MDEuMWw1MC4yLTcxLjh6bTEyOC41IDUzbDYwLjYtNTMgNTAuMiA3MS44YzExLjEgMTUuOSA5LjIgMzcuNS00LjUgNTEuMmwtNDggNDhjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwcy0xNS42LTQwLjkgMC01Ni42TDI4NCA0MTkuNGwtMjYtMzcuMnpcIl1cbn07XG52YXIgZmFVc2Vyc0xpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMtbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU5MlwiLCBcIk0yMTEuMiA5NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTMyIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg4NS42YzEwLjEtMzkuNCAzOC42LTcxLjUgNzUuOC04Ni42Yy05LjctNi0yMS4yLTkuNC0zMy40LTkuNEg5NmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTQ2MS42IDMySDU3NmMxNy43IDAgMzItMTQuMyAzMi0zMmMwLTM1LjMtMjguNy02NC02NC02NEg0NDhjLTExLjcgMC0yMi43IDMuMS0zMi4xIDguNmMzOC4xIDE0LjggNjcuNCA0Ny4zIDc3LjcgODcuNHpNMzkxLjIgMjI2LjRjLTYuOS0xLjYtMTQuMi0yLjQtMjEuNi0yLjRoLTk2Yy04LjUgMC0xNi43IDEuMS0yNC41IDMuMWMtMzAuOCA4LjEtNTUuNiAzMS4xLTY2LjEgNjAuOWMtMy41IDEwLTUuNSAyMC44LTUuNSAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgyMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJjMC0xMS4yLTEuOS0yMi01LjUtMzJjLTEwLjgtMzAuNy0zNi44LTU0LjItNjguOS02MS42ek01NjMuMiA5NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTMyMS42IDE5MmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpcIl1cbn07XG52YXIgZmFRdW90ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncXVvdGUtbGVmdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzgyMjAsIFwicXVvdGUtbGVmdC1hbHRcIl0sIFwiZjEwZFwiLCBcIk0wIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2aDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJoLThjLTMwLjkgMC01NiAyNS4xLTU2IDU2djhoNjRjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjMyMCAyODggMjE2em0yNTYgMGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMGg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyaC04Yy0zMC45IDAtNTYgMjUuMS01NiA1NnY4aDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDMyMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMzIwIDI4OCAyMTZ6XCJdXG59O1xudmFyIGZhUXVvdGVMZWZ0QWx0ID0gZmFRdW90ZUxlZnQ7XG52YXIgZmFUcmFjdG9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWN0b3InLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjg2NjhdLCBcImY3MjJcIiwgXCJNOTYgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRIMjY2LjNjMjYuMiAwIDQ5LjcgMTUuOSA1OS40IDQwLjJMMzczLjcgMTYwSDQ4MFYxMjYuMmMwLTI0LjggNS44LTQ5LjMgMTYuOS03MS42bDIuNS01YzcuOS0xNS44IDI3LjEtMjIuMiA0Mi45LTE0LjNzMjIuMiAyNy4xIDE0LjMgNDIuOWwtMi41IDVjLTYuNyAxMy4zLTEwLjEgMjgtMTAuMSA0Mi45VjE2MGg1NmMyMi4xIDAgNDAgMTcuOSA0MCA0MHY0NS40YzAgMTYuNS04LjUgMzEuOS0yMi42IDQwLjdsLTQzLjMgMjcuMWMtMTQuMi01LjktMjkuOC05LjItNDYuMS05LjJjLTM5LjMgMC03NC4xIDE4LjktOTYgNDhIMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMyaC04LjJjLTEuNyA0LjgtMy43IDkuNS01LjggMTQuMWw1LjggNS44YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0yMi42IDIyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01LjgtNS44Yy00LjYgMi4yLTkuMyA0LjEtMTQuMSA1LjhWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ2LTguMmMtNC44LTEuNy05LjUtMy43LTE0LjEtNS44bC01LjggNS44Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw0MC4yIDQ0OS4xYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w1LjgtNS44Yy0yLjItNC42LTQuMS05LjMtNS44LTE0LjFIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg4LjJjMS43LTQuOCAzLjctOS41IDUuOC0xNC4xbC01LjgtNS44Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wyMi42LTIyLjZjOS05IDIxLjktMTEuNSAzMy4xLTcuNlYxOTIgMTYwIDY0em0xNzAuMyAwSDE2MHY5NmgzMkgzMDQuN0wyNjYuMyA2NHpNMTc2IDI1NmE4MCA4MCAwIDEgMCAwIDE2MCA4MCA4MCAwIDEgMCAwLTE2MHpNNTI4IDQ0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTAgNjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4YzAtMjkuOCAxNC44LTU2LjEgMzcuNC03MmMxNC4zLTEwLjEgMzEuOC0xNiA1MC42LTE2YzIuNyAwIDUuMyAuMSA3LjkgLjNjNDQuOSA0IDgwLjEgNDEuNyA4MC4xIDg3LjdjMCA0OC42LTM5LjQgODgtODggODh6XCJdXG59O1xudmFyIGZhVHJhc2hBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYXNoLWFycm93LXVwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ0cmFzaC1yZXN0b3JlXCJdLCBcImY4MjlcIiwgXCJNMTYzLjggMEgyODQuMmMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43TDMyMCAzMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJoOTZsNy4yLTE0LjNDMTQwLjYgNi44IDE1MS43IDAgMTYzLjggMHpNMzIgMTI4SDQxNkwzOTQuOCA0NjdjLTEuNiAyNS4zLTIyLjYgNDUtNDcuOSA0NUgxMDEuMWMtMjUuMyAwLTQ2LjMtMTkuNy00Ny45LTQ1TDMyIDEyOHptMTkyIDY0Yy02LjQgMC0xMi41IDIuNS0xNyA3bC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDM5LTM5VjQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI3My45bDM5IDM5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTQuNS00LjUtMTAuNi03LTE3LTd6XCJdXG59O1xudmFyIGZhVHJhc2hSZXN0b3JlID0gZmFUcmFzaEFycm93VXA7XG52YXIgZmFBcnJvd0Rvd25VcExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi11cC1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGIwXCIsIFwiTTE1MC42IDUwMi42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE2MCA0MDIuN1YyODhINDE2VjI3MmMwLTE3LjIgMy45LTMzLjUgMTAuOC00OEgzNTJWMTA5LjNsNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy02LTYtMTQuMS05LjQtMjIuNi05LjRzLTE2LjYgMy40LTIyLjYgOS40bC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyODggMTA5LjNWMjI0bC0xMjggMEg5NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5NlY0MDIuN0w1NC42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHpNMTYwIDE5MlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYxOTJoNjR6TTI4OCAzMjBWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzIwSDI4OHptMjQwLTgwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQ5NlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbnZhciBmYUxpbmVzTGVhbmluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaW5lcy1sZWFuaW5nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNTFlXCIsIFwiTTE5MC40IDc0LjFjNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJsLTEyOCAzODRjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMTI4LTM4NHptNzAuOS00MS43Yy0xNy40LTIuOS0zMy45IDguOS0zNi44IDI2LjNsLTY0IDM4NGMtMi45IDE3LjQgOC45IDMzLjkgMjYuMyAzNi44czMzLjktOC45IDM2LjgtMjYuM2w2NC0zODRjMi45LTE3LjQtOC45LTMzLjktMjYuMy0zNi44ek0zNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXVxufTtcbnZhciBmYVJ1bGVyQ29tYmluZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVsZXItY29tYmluZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NDZcIiwgXCJNLjIgNDY4LjlDMi43IDQ5My4xIDIzLjEgNTEyIDQ4IDUxMmw5NiAwIDMyMCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTY0LTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTY0LTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgMzY4bDAgOTZjMCAxLjcgLjEgMy4zIC4yIDQuOXpcIl1cbn07XG52YXIgZmFDb3B5cmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29weXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTY5XSwgXCJmMWY5XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xOTkuNCAzMTIuNmMzMS4yIDMxLjIgODEuOSAzMS4yIDExMy4xIDBjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy01MCA1MC0xMzEgNTAtMTgxIDBzLTUwLTEzMSAwLTE4MXMxMzEtNTAgMTgxIDBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMzEuMi0zMS4yLTgxLjktMzEuMi0xMTMuMSAwcy0zMS4yIDgxLjkgMCAxMTMuMXpcIl1cbn07XG52YXIgZmFFcXVhbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjI3NjRdLCBcIjNkXCIsIFwiTTQ4IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDh6bTAgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQwMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0OHpcIl1cbn07XG52YXIgZmFCbGVuZGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JsZW5kZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1MTdcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBoNjQgMzJINDcwLjFjMjEuMSAwIDM2LjQgMjAuMSAzMC45IDQwLjRMNDk0LjUgNjRIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDQ4NS44bC0xNy41IDY0SDMzNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg0NTkuNmwtMTcuNSA2NEgzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoOTcuNUw0MTYgMzUySDE2MGwtOC43LTk2SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHpNMTQ1LjUgMTkyTDEzMy44IDY0SDY0VjE5Mmg4MS41ek0xNDQgMzg0SDQzMmMyNi41IDAgNDggMjEuNSA0OCA0OHYzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEgxNDRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHptMTQ0IDk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG52YXIgZmFUZWV0aCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZWV0aCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjYyZVwiLCBcIk0wIDEyOEMwIDc1IDQzIDMyIDk2IDMySDQ4MGM1MyAwIDk2IDQzIDk2IDk2VjM4NGMwIDUzLTQzIDk2LTk2IDk2SDk2Yy01MyAwLTk2LTQzLTk2LTk2VjEyOHptMTc2IDQ4djU2YzAgMTMuMyAxMC43IDI0IDI0IDI0aDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE3NmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHptMTc2LTQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHY1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDIwOHYyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYyMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTk2IDM4NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRINzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0djI0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em04MC00OGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4VjMxMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyMDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0djI0em0xNzYgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2MjRjMCAyNi41IDIxLjUgNDggNDggNDh6bTgwLTE3NnYyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYyMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6bTQ4IDE3NmMyNi41IDAgNDgtMjEuNSA0OC00OFYzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRINDU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHYyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OHpcIl1cbn07XG52YXIgZmFTaGVrZWxTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoZWtlbC1zaWduJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbODM2MiwgXCJpbHNcIiwgXCJzaGVrZWxcIiwgXCJzaGVxZWxcIiwgXCJzaGVxZWwtc2lnblwiXSwgXCJmMjBiXCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZIMTkyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEgzMnpNMzIwIDQ4MGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMTkyVjE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzIwelwiXVxufTtcbnZhciBmYUlscyA9IGZhU2hla2VsU2lnbjtcbnZhciBmYVNoZWtlbCA9IGZhU2hla2VsU2lnbjtcbnZhciBmYVNoZXFlbCA9IGZhU2hla2VsU2lnbjtcbnZhciBmYVNoZXFlbFNpZ24gPSBmYVNoZWtlbFNpZ247XG52YXIgZmFNYXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NTA2LCA2MjA3Ml0sIFwiZjI3OVwiLCBcIk0zODQgNDc2LjFMMTkyIDQyMS4yVjM1LjlMMzg0IDkwLjhWNDc2LjF6bTMyLTEuMlY4OC40TDU0My4xIDM3LjVjMTUuOC02LjMgMzIuOSA1LjMgMzIuOSAyMi4zVjM5NC42YzAgOS44LTYgMTguNi0xNS4xIDIyLjNMNDE2IDQ3NC44ek0xNS4xIDk1LjFMMTYwIDM3LjJWNDIzLjZMMzIuOSA0NzQuNUMxNy4xIDQ4MC44IDAgNDY5LjIgMCA0NTIuMlYxMTcuNGMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zelwiXVxufTtcbnZhciBmYVJvY2tldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb2NrZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxMzVcIiwgXCJNMTU2LjYgMzg0LjlMMTI1LjcgMzU0Yy04LjUtOC41LTExLjUtMjAuOC03LjctMzIuMmMzLTguOSA3LTIwLjUgMTEuOC0zMy44TDI0IDI4OGMtOC42IDAtMTYuNi00LjYtMjAuOS0xMi4xcy00LjItMTYuNyAuMi0yNC4xbDUyLjUtODguNWMxMy0yMS45IDM2LjUtMzUuMyA2MS45LTM1LjNsODIuMyAwYzIuNC00IDQuOC03LjcgNy4yLTExLjNDMjg5LjEtNC4xIDQxMS4xLTguMSA0ODMuOSA1LjNjMTEuNiAyLjEgMjAuNiAxMS4yIDIyLjggMjIuOGMxMy40IDcyLjkgOS4zIDE5NC44LTExMS40IDI3Ni43Yy0zLjUgMi40LTcuMyA0LjgtMTEuMyA3LjJ2ODIuM2MwIDI1LjQtMTMuNCA0OS0zNS4zIDYxLjlsLTg4LjUgNTIuNWMtNy40IDQuNC0xNi42IDQuNS0yNC4xIC4ycy0xMi4xLTEyLjItMTIuMS0yMC45VjM4MC44Yy0xNC4xIDQuOS0yNi40IDguOS0zNS43IDExLjljLTExLjIgMy42LTIzLjQgLjUtMzEuOC03Ljh6TTM4NCAxNjhhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwelwiXVxufTtcbnZhciBmYVBob3RvRmlsbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaG90by1maWxtJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwaG90by12aWRlb1wiXSwgXCJmODdjXCIsIFwiTTI1NiAwSDU3NmMzNS4zIDAgNjQgMjguNyA2NCA2NFYyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMjU2Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDc2IDEwNi43QzQ3MS41IDEwMCA0NjQgOTYgNDU2IDk2cy0xNS41IDQtMjAgMTAuN2wtNTYgODRMMzYyLjcgMTY5Yy00LjYtNS43LTExLjUtOS0xOC43LTlzLTE0LjIgMy4zLTE4LjcgOWwtNjQgODBjLTUuOCA3LjItNi45IDE3LjEtMi45IDI1LjRzMTIuNCAxMy42IDIxLjYgMTMuNmg4MCA0OEg1NTJjOC45IDAgMTctNC45IDIxLjItMTIuN3MzLjctMTcuMy0xLjItMjQuNmwtOTYtMTQ0ek0zMzYgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNjQgMTI4aDk2VjM4NHYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzg0SDUxMnY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0em04IDY0Yy04LjggMC0xNiA3LjItMTYgMTZ2MTZjMCA4LjggNy4yIDE2IDE2IDE2SDg4YzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDcyem0wIDEwNGMtOC44IDAtMTYgNy4yLTE2IDE2djE2YzAgOC44IDcuMiAxNiAxNiAxNkg4OGM4LjggMCAxNi03LjIgMTYtMTZWMzEyYzAtOC44LTcuMi0xNi0xNi0xNkg3MnptMCAxMDRjLTguOCAwLTE2IDcuMi0xNiAxNnYxNmMwIDguOCA3LjIgMTYgMTYgMTZIODhjOC44IDAgMTYtNy4yIDE2LTE2VjQxNmMwLTguOC03LjItMTYtMTYtMTZINzJ6bTMzNiAxNnYxNmMwIDguOCA3LjIgMTYgMTYgMTZoMTZjOC44IDAgMTYtNy4yIDE2LTE2VjQxNmMwLTguOC03LjItMTYtMTYtMTZINDI0Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhUGhvdG9WaWRlbyA9IGZhUGhvdG9GaWxtO1xudmFyIGZhRm9sZGVyTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9sZGVyLW1pbnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjVkXCIsIFwiTTQ0OCA0ODBINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDE5MmMyMC4xIDAgMzkuMSA5LjUgNTEuMiAyNS42bDE5LjIgMjUuNmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTE4NCAyNzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMzI4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDE4NHpcIl1cbn07XG52YXIgZmFTdG9yZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdG9yZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjU0ZVwiLCBcIk01NDcuNiAxMDMuOEw0OTAuMyAxMy4xQzQ4NS4yIDUgNDc2LjEgMCA0NjYuNCAwSDEwOS42Qzk5LjkgMCA5MC44IDUgODUuNyAxMy4xTDI4LjMgMTAzLjhjLTI5LjYgNDYuOC0zLjQgMTExLjkgNTEuOSAxMTkuNGM0IC41IDguMSAuOCAxMi4xIC44YzI2LjEgMCA0OS4zLTExLjQgNjUuMi0yOWMxNS45IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzI2LjEgMCA0OS4zLTExLjQgNjUuMi0yOWMxNS45IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzI2LjIgMCA0OS4zLTExLjQgNjUuMi0yOWMxNiAxNy42IDM5LjEgMjkgNjUuMiAyOWM0LjEgMCA4LjEtLjMgMTIuMS0uOGM1NS41LTcuNCA4MS44LTcyLjUgNTIuMS0xMTkuNHpNNDk5LjcgMjU0LjlsLS4xIDBjLTUuMyAuNy0xMC43IDEuMS0xNi4yIDEuMWMtMTIuNCAwLTI0LjMtMS45LTM1LjQtNS4zVjM4NEgxMjhWMjUwLjZjLTExLjIgMy41LTIzLjIgNS40LTM1LjYgNS40Yy01LjUgMC0xMS0uNC0xNi4zLTEuMWwtLjEgMGMtNC4xLS42LTguMS0xLjMtMTItMi4zVjM4NHY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMzg0IDI1Mi42Yy00IDEtOCAxLjgtMTIuMyAyLjN6XCJdXG59O1xudmFyIGZhQXJyb3dUcmVuZFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXRyZW5kLXVwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDk4XCIsIFwiTTM4NCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjI4OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyMDUuM0wzNDIuNiAzNzQuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMMTkyIDI2OS4zIDU0LjYgNDA2LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBMMzIwIDMwNi43IDQ2Ni43IDE2MEgzODR6XCJdXG59O1xudmFyIGZhUGx1Z0NpcmNsZU1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLW1pbnVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTVlXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44YzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek01NzYgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS02NCAwYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZINDk2YzguOCAwIDE2IDcuMiAxNiAxNnpcIl1cbn07XG52YXIgZmFTaWduSGFuZ2luZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaWduLWhhbmdpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNpZ25cIl0sIFwiZjRkOVwiLCBcIk05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0bDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNTIgMFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTI4SDMyQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0SDY0VjMyQzY0IDE0LjMgNzguMyAwIDk2IDB6bTk2IDE2MEg0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVNpZ24gPSBmYVNpZ25IYW5naW5nO1xudmFyIGZhQmV6aWVyQ3VydmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmV6aWVyLWN1cnZlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTViXCIsIFwiTTI5NiAxMzZWODhoNDh2NDhIMjk2ek0yODggMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djRIMTIxLjZDMTExLjIgNjIuNyA4OS4zIDQ4IDY0IDQ4QzI4LjcgNDggMCA3Ni43IDAgMTEyczI4LjcgNjQgNjQgNjRjMjUuMyAwIDQ3LjItMTQuNyA1Ny42LTM2aDY2LjljLTU4LjkgMzkuNi05OC45IDEwNS0xMDQgMTgwSDgwYy0yNi41IDAtNDggMjEuNS00OCA0OHY2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzNjhjMC0yNi41LTIxLjUtNDgtNDgtNDhoLTMuM2M1LjktNjcgNDguNS0xMjMuNCAxMDcuNS0xNDkuMWM4LjYgMTIuNyAyMy4yIDIxLjEgMzkuOCAyMS4xaDY0YzE2LjYgMCAzMS4xLTguNCAzOS44LTIxLjFjNTkgMjUuNyAxMDEuNiA4Mi4xIDEwNy41IDE0OS4xSDQ5NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2NjRjMCAyNi41IDIxLjUgNDggNDggNDhoNjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzY4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4aC00LjVjLTUtNzUtNDUuMS0xNDAuNC0xMDQtMTgwaDY2LjljMTAuNCAyMS4zIDMyLjMgMzYgNTcuNiAzNmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NGMtMjUuMyAwLTQ3LjIgMTQuNy01Ny42IDM2SDQwMFY4MGMwLTI2LjUtMjEuNS00OC00OC00OEgyODh6TTg4IDM3Nmg0OHY0OEg4OFYzNzZ6bTQxNiA0OFYzNzZoNDh2NDhINTA0elwiXVxufTtcbnZhciBmYUJlbGxTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiZWxsLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Mjc3LCA2MTk0M10sIFwiZjFmNlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC05MC4yLTcwLjdjLjItLjQgLjQtLjkgLjYtMS4zYzUuMi0xMS41IDMuMS0yNS01LjMtMzQuNGwtNy40LTguM0M0OTcuMyAzMTkuMiA0ODAgMjczLjkgNDgwIDIyNi44VjIwOGMwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY1MS4yYy00Mi42IDguNi03OSAzNC4yLTEwMiA2OS4zTDM4LjggNS4xek00MDYuMiA0MTZMMTYwIDIyMi4xdjQuOGMwIDQ3LTE3LjMgOTIuNC00OC41IDEyNy42bC03LjQgOC4zYy04LjQgOS40LTEwLjQgMjIuOS01LjMgMzQuNFMxMTUuNCA0MTYgMTI4IDQxNkg0MDYuMnptLTQwLjkgNzcuM2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zSDMyMCAyNTZjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNzMjguMyAxOC43IDQ1LjMgMTguN3MzMy4zLTYuNyA0NS4zLTE4Ljd6XCJdXG59O1xudmFyIGZhVGFibGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxldCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1widGFibGV0LWFuZHJvaWRcIl0sIFwiZjNmYlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0xNzYgNDMyaDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFUYWJsZXRBbmRyb2lkID0gZmFUYWJsZXQ7XG52YXIgZmFTY2hvb2xGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjaG9vbC1mbGFnJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTZlXCIsIFwiTTI4OCAwSDQwMGM4LjggMCAxNiA3LjIgMTYgMTZWODBjMCA4LjgtNy4yIDE2LTE2IDE2SDMyMC43bDg5LjYgNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEgzMzZWNDAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4VjUxMkg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDE2NS43TDI1NiA5NS41VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem00OCAyNDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNODAgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwem0zNjggMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDQ2NGMtOC44IDAtMTYgNy4yLTE2IDE2ek04MCAzNTJjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjM2OGMwLTguOC03LjItMTYtMTYtMTZIODB6bTM4NCAwYy04LjggMC0xNiA3LjItMTYgMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDQ2NHpcIl1cbn07XG52YXIgZmFGaWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NzVcIiwgXCJNODYuNiA5LjRDNzQuMS0zLjEgNTMuOS0zLjEgNDEuNCA5LjRzLTEyLjUgMzIuOCAwIDQ1LjNMMTIyLjcgMTM2IDMwLjYgMjI4LjFjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOEwxNDguMSA0ODEuNGMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBMNDc0LjMgMjkwLjljMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44TDMyMi45IDM3LjdjLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMEwxNjggOTAuNyA4Ni42IDkuNHpNMTY4IDE4MS4zbDQ5LjQgNDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIxMy4zIDEzNmw1My4xLTUzLjFjMy4xLTMuMSA4LjItMy4xIDExLjMgMEw0MjkuMSAyMzQuM2MzLjEgMy4xIDMuMSA4LjIgMCAxMS4zTDM4Ni43IDI4OEg2Ny41YzEuNC01LjQgNC4yLTEwLjQgOC40LTE0LjZMMTY4IDE4MS4zelwiXVxufTtcbnZhciBmYUFuZ2xlVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtdXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4OTYzXSwgXCJmMTA2XCIsIFwiTTIwMS40IDEzNy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjI0IDIwNS4zIDg2LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjB6XCJdXG59O1xudmFyIGZhRHJ1bXN0aWNrQml0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkcnVtc3RpY2stYml0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjZkN1wiLCBcIk0xNjAgMjY1LjJjMCA4LjUtMy40IDE2LjYtOS40IDIyLjZsLTI2LjggMjYuOGMtMTIuMyAxMi4zLTMyLjUgMTEuNC00OS40IDcuMkM2OS44IDMyMC42IDY1IDMyMCA2MCAzMjBjLTMzLjEgMC02MCAyNi45LTYwIDYwczI2LjkgNjAgNjAgNjBjNi4zIDAgMTIgNS43IDEyIDEyYzAgMzMuMSAyNi45IDYwIDYwIDYwczYwLTI2LjkgNjAtNjBjMC01LS42LTkuOC0xLjgtMTQuNWMtNC4yLTE2LjktNS4yLTM3LjEgNy4yLTQ5LjRsMjYuOC0yNi44YzYtNiAxNC4xLTkuNCAyMi42LTkuNEgzMzZjNi4zIDAgMTIuNC0uMyAxOC41LTFjMTEuOS0xLjIgMTYuNC0xNS41IDEwLjgtMjZjLTguNS0xNS44LTEzLjMtMzMuOC0xMy4zLTUzYzAtNjEuOSA1MC4xLTExMiAxMTItMTEyYzggMCAxNS43IC44IDIzLjIgMi40YzExLjcgMi41IDI0LjEtNS45IDIyLTE3LjZDNDk0LjUgNjIuNSA0MjIuNSAwIDMzNiAwQzIzOC44IDAgMTYwIDc4LjggMTYwIDE3NnY4OS4yelwiXVxufTtcbnZhciBmYUhvbGx5QmVycnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG9sbHktYmVycnknLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3YWFcIiwgXCJNMjU2IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMjc2LjggMzgzLjhjMSAuMSAyLjEgLjIgMy4yIC4yYzM5LjggMCA3MiAzMi4yIDcyIDcydjIyLjdjMCAxNi40IDE2IDI3LjkgMzEuNiAyMi44bDEyLjgtNC4zYzE4LTYgMzcuMy02LjUgNTUuNi0xLjVsMTkuNCA1LjNjMTcuOSA0LjkgMzQuNC0xMS42IDI5LjUtMjkuNUw0OTUuNiA0NTJjLTUtMTguMy00LjQtMzcuNiAxLjUtNTUuNmw0LjMtMTIuOGM1LjItMTUuNS02LjQtMzEuNi0yMi44LTMxLjZjLTM0LjYgMC02Mi43LTI4LjEtNjIuNy02Mi43di0zMmMwLTE2LjQtMTYtMjcuOS0zMS42LTIyLjhsLTEyLjggNC4zYy0xOCA2LTM3LjMgNi41LTU1LjYgMS41bC0yOS42LTguMWMtMi45LS44LTUuOS0xLTguNy0uN2M0LjIgOS43IDUuOCAyMC44IDMuNyAzMi4zTDI3NSAyOTguN2MtMS41IDguNC0xLjQgMTcgLjUgMjUuM2w1LjMgMjMuOWMyLjggMTIuNyAxLjEgMjUuMi00IDM1Ljl6TTEyNy42IDIzNC41Yy0xNS41LTUuMi0zMS42IDYuNC0zMS42IDIyLjh2MzJDOTYgMzIzLjkgNjcuOSAzNTIgMzMuMyAzNTJjLTE2LjQgMC0yNy45IDE2LTIyLjggMzEuNmw0LjMgMTIuOGM2IDE4IDYuNSAzNy4zIDEuNSA1NS42bC01LjMgMTkuNEM2LjIgNDg5LjQgMjIuNiA1MDUuOCA0MC41IDUwMUw2MCA0OTUuNmMxOC4zLTUgMzcuNi00LjUgNTUuNiAxLjVsMTIuOCA0LjNjMTUuNSA1LjIgMzEuNi02LjQgMzEuNi0yMi44di0zMmMwLTM0LjYgMjguMS02Mi43IDYyLjctNjIuN2MxNi40IDAgMjcuOS0xNiAyMi44LTMxLjZsLTQuMy0xMi44Yy02LTE4LTYuNS0zNy4zLTEuNS01NS42bDUuMy0xOS40YzQuOS0xNy45LTExLjYtMzQuNC0yOS41LTI5LjVMMTk2IDI0MC40Yy0xOC4zIDUtMzcuNiA0LjQtNTUuNi0xLjVsLTEyLjgtNC4zek0zODQgMTQ0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6XCJdXG59O1xudmFyIGZhQ2hldnJvbkxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hldnJvbi1sZWZ0JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTAwMV0sIFwiZjA1M1wiLCBcIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyNDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyelwiXVxufTtcbnZhciBmYUJhY3RlcmlhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhY3RlcmlhJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMDU5XCIsIFwiTTMwNC45IC43Yy05LjYtMi43LTE5LjUgMi44LTIyLjMgMTIuNGwtNC4zIDE1LjJjLTguMy0uNi0xNi44IDAtMjUuMiAxLjljLTcuMyAxLjctMTQuMyAzLjUtMjEuMSA1LjVsLTUuNS0xMi43Yy0zLjktOS4xLTE0LjUtMTMuNC0yMy42LTkuNXMtMTMuNCAxNC41LTkuNSAyMy42bDQuNCAxMC40Yy0xNi42IDYuNy0zMS43IDE0LjQtNDUuNCAyMi44TDE0NyA2MmMtNS41LTguMy0xNi43LTEwLjUtMjUtNXMtMTAuNSAxNi43LTUgMjVsNiA5Yy0xMy43IDExLTI1LjUgMjIuOC0zNS44IDM0LjlsLTEwLThjLTcuOC02LjItMTkuMS01LTI1LjMgMi44cy01IDE5LjEgMi44IDI1LjNMNjUuOSAxNTVjLTEuOCAyLjgtMy41IDUuNy01LjEgOC41Yy02LjYgMTEuNC0xMS44IDIyLjYtMTYgMzNsLTgtMy4yYy05LjItMy43LTE5LjcgLjgtMjMuNCAxMHMuOCAxOS43IDEwIDIzLjRsMTAuNCA0LjJjLS4yIC44LS40IDEuNS0uNSAyLjNjLTIuMiA5LjMtMy40IDE3LjMtNC4xIDIzLjRjLS40IDMuMS0uNiA1LjctLjggNy44Yy0uMSAxLjEtLjEgMi0uMiAyLjhsLS4xIDEuMSAwIC41IDAgLjIgMCAuMWMwIDAgMCAuMSAyOS4xIDFsLS4xIDBMMjggMjY5LjNjLS4xIDMuMSAwIDYuMSAuMiA5LjFsLTE1LjIgNC4zQzMuNSAyODUuNC0yIDI5NS40IC43IDMwNC45czEyLjcgMTUuMSAyMi4zIDEyLjRsMTUuNi00LjVjNy42IDEzLjYgMTguOSAyNSAzMi42IDMyLjZMNjYuNyAzNjFjLTIuNyA5LjYgMi44IDE5LjUgMTIuNCAyMi4zczE5LjUtMi44IDIyLjMtMTIuNGw0LjMtMTUuMmMxLjIgLjEgMi40IC4yIDMuNiAuMmMxNS42IC41IDMwLjMtMy4zIDQzLTEwLjJsOSA5YzcgNyAxOC40IDcgMjUuNSAwczctMTguNCAwLTI1LjVsLTcuMi03LjJjOS4zLTEyLjYgMTUuMi0yNy44IDE2LjMtNDQuNWw3LjEgM2M5LjEgMy45IDE5LjctLjMgMjMuNi05LjVzLS4zLTE5LjctOS41LTIzLjZsLTguNi0zLjdjNi40LTkuOSAxNy4zLTIyLjQgMzYuOS0zMy4zbDEuMyA0LjRjMi43IDkuNiAxMi43IDE1LjEgMjIuMyAxMi40czE1LjEtMTIuNyAxMi40LTIyLjNsLTIuMy04LjFjMy44LTEuMSA3LjctMi4xIDExLjktMy4xYzExLjYtMi43IDIyLjEtNy43IDMxLjEtMTQuNGw3LjIgNy4yYzcgNyAxOC40IDcgMjUuNSAwczctMTguNCAwLTI1LjVsLTktOWM3LjYtMTMuOSAxMS4zLTMwLjEgMTAuMS00Ni42bDE1LjItNC4zYzkuNi0yLjcgMTUuMS0xMi43IDEyLjQtMjIuM1MzNzAuNiA2NCAzNjEgNjYuN2wtMTUuNiA0LjVjLTcuNy0xMy45LTE5LjEtMjUuMS0zMi42LTMyLjZsNC41LTE1LjZjMi43LTkuNi0yLjgtMTkuNS0xMi40LTIyLjN6TTExMiAyNzJsLTQ4LTEuNSAwIDBjMTEuNyAuNCAyNy4zIC45IDQ4IDEuNnptMTYtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NC00OGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwek0zMjIuNyA0ODljLTIuNyA5LjYgMi44IDE5LjUgMTIuNCAyMi4zczE5LjUtMi44IDIyLjItMTIuNGw0LjMtMTUuMmM4LjMgLjYgMTYuOCAwIDI1LjItMS45YzcuMy0xLjcgMTQuMy0zLjUgMjEuMS01LjVsNS41IDEyLjdjMy45IDkuMSAxNC41IDEzLjQgMjMuNiA5LjVzMTMuNC0xNC41IDkuNS0yMy42bC00LjQtMTAuNGMxNi42LTYuNyAzMS43LTE0LjQgNDUuNC0yMi44TDQ5MyA0NTBjNS41IDguMyAxNi43IDEwLjUgMjUgNXMxMC41LTE2LjcgNS0yNWwtNi05YzEzLjctMTEgMjUuNS0yMi44IDM1LjgtMzQuOWwxMCA4YzcuOCA2LjIgMTkuMSA1IDI1LjMtMi44czUtMTkuMS0yLjgtMjUuM0w1NzQuMSAzNTdjMS44LTIuOCAzLjUtNS43IDUuMS04LjVjNi42LTExLjQgMTEuOC0yMi42IDE2LTMzbDggMy4yYzkuMiAzLjcgMTkuNy0uOCAyMy40LTEwcy0uOC0xOS43LTEwLTIzLjRsLTEwLjQtNC4yYy4yLS44IC40LTEuNSAuNS0yLjNjMi4yLTkuMyAzLjQtMTcuMyA0LjEtMjMuNGMuNC0zLjEgLjYtNS43IC44LTcuOGMuMS0xLjEgLjEtMiAuMi0yLjhsLjEtMS4xIDAtLjUgMC0uMiAwLS4xYzAgMCAwLS4xLTI5LjEtMWwuMSAwIDI5LjEgLjljLjEtMy4xIDAtNi4xLS4yLTkuMWwxNS4yLTQuM2M5LjYtMi43IDE1LjEtMTIuNyAxMi40LTIyLjNzLTEyLjctMTUuMS0yMi4zLTEyLjRsLTE1LjYgNC41Yy03LjYtMTMuNi0xOC45LTI1LTMyLjYtMzIuNmw0LjUtMTUuNmMyLjctOS42LTIuOC0xOS41LTEyLjQtMjIuM3MtMTkuNSAyLjgtMjIuMyAxMi40bC00LjMgMTUuMmMtMS4yLS4xLTIuNC0uMi0zLjYtLjJjLTE1LjYtLjUtMzAuMyAzLjMtNDMgMTAuMmwtOS05Yy03LTctMTguNC03LTI1LjUgMHMtNyAxOC40IDAgMjUuNWw3LjIgNy4yYy05LjMgMTIuNi0xNS4yIDI3LjgtMTYuMyA0NC41bC03LjEtM2MtOS4xLTMuOS0xOS43IC4zLTIzLjYgOS41cy4zIDE5LjcgOS41IDIzLjZsOC42IDMuN2MtNi40IDkuOS0xNy4zIDIyLjQtMzYuOSAzMy4zbC0xLjMtNC40Yy0yLjctOS42LTEyLjctMTUuMS0yMi4zLTEyLjRzLTE1LjEgMTIuNy0xMi40IDIyLjNsMi4zIDguMWMtMy44IDEuMS03LjcgMi4xLTExLjkgMy4xYy0xMS42IDIuNy0yMi4xIDcuNy0zMS4xIDE0LjRsLTcuMi03LjJjLTctNy0xOC40LTctMjUuNSAwcy03IDE4LjQgMCAyNS41bDkgOWMtNy42IDEzLjktMTEuMyAzMC4xLTEwLjEgNDYuNmwtMTUuMiA0LjNjLTkuNiAyLjctMTUuMSAxMi43LTEyLjQgMjIuMnMxMi43IDE1LjEgMjIuMyAxMi40bDE1LjYtNC41YzcuNyAxMy45IDE5LjEgMjUuMSAzMi42IDMyLjZMMzIyLjcgNDg5ek01NzYgMjQxLjVsMCAwYy0xMS43LS40LTI3LjMtLjktNDgtMS42bDQ4IDEuNXpNNDQ4IDM4NGEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwelwiXVxufTtcbnZhciBmYUhhbmRMaXphcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1saXphcmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyNThcIiwgXCJNMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIMTYwaDgwIDQ2LjVjMzYuOCAwIDcxLjIgMTggOTIuMSA0OC4ybDExMy41IDE2NGMxMyAxOC43IDE5LjkgNDEgMTkuOSA2My44djEyIDE2IDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDAyLjJMMjczLjkgMzUySDI0MCAxNjAgMTEyYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4aDQ4IDgwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDE2MCA0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6XCJdXG59O1xudmFyIGZhTm90ZGVmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ25vdGRlZicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTFmZVwiLCBcIk02NCAzOTAuM0wxNTMuNSAyNTYgNjQgMTIxLjdWMzkwLjN6TTEwMi41IDQ0OEgyODEuNUwxOTIgMzEzLjcgMTAyLjUgNDQ4em0xMjgtMTkyTDMyMCAzOTAuM1YxMjEuN0wyMzAuNSAyNTZ6TTI4MS41IDY0SDEwMi41TDE5MiAxOTguMyAyODEuNSA2NHpNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6XCJdXG59O1xudmFyIGZhRGlzZWFzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaXNlYXNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2ZhXCIsIFwiTTIzNi40IDYxLjRMMjI3IDc1LjVjLTIxLjMgMzItNTkuNCA0OC41LTk3LjMgNDIuMWwtNTkuNi05LjlDMzMuNCAxMDEuNiAwIDEyOS45IC4xIDE2Ny4xYzAgMTUuOSA2LjQgMzEuMiAxNy42IDQyLjVsMjkuMiAyOS4yYzExIDExIDE3LjIgMjUuOSAxNy4yIDQxLjVjMCAxNS44LTYuNCAzMC45LTE3LjcgNDJMMzMuMyAzMzUuMUMyMi4yIDM0NS45IDE2IDM2MC43IDE2IDM3Ni4yYzAgMzYuOCAzNC4xIDY0LjIgNzAuMSA1Ni4ybDYyLjMtMTMuOGM3LjctMS43IDE1LjctMi42IDIzLjYtMi42aDEwYzI3LjIgMCA1My43IDkuMyA3NSAyNi4zTDI4Ny44IDQ2N2MxMC41IDguNCAyMy42IDEzIDM3IDEzYzMyLjcgMCA1OS4zLTI2LjUgNTkuMy01OS4zbDAtMjUuMmMwLTM0LjkgMjEuNC02Ni4yIDUzLjktNzguOGwzNi45LTE0LjNjMjIuNC04LjcgMzcuMi0zMC4zIDM3LjItNTQuM2MwLTI4LjEtMjAuMS01Mi4zLTQ3LjgtNTcuM2wtMjgtNS4xYy0zNi41LTYuNy02NS40LTM0LjUtNzMuNi03MC43bC03LjEtMzEuNUMzNDguOSA1My40IDMyMi4xIDMyIDI5MS4zIDMyYy0yMiAwLTQyLjYgMTEtNTQuOSAyOS40ek0xNjAgMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bTAgODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUJyaWVmY2FzZU1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJpZWZjYXNlLW1lZGljYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0NjlcIiwgXCJNMTg0IDQ4SDMyOGM0LjQgMCA4IDMuNiA4IDhWOTZIMTc2VjU2YzAtNC40IDMuNi04IDgtOHptLTU2IDhWOTZINjRDMjguNyA5NiAwIDEyNC43IDAgMTYwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDM4NFY1NmMwLTMwLjktMjUuMS01Ni01Ni01NkgxODRjLTMwLjkgMC01NiAyNS4xLTU2IDU2em05NiAxNTJjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI4OHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMzIwSDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoNDhWMjA4elwiXVxufTtcbnZhciBmYUdlbmRlcmxlc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2VuZGVybGVzcycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjIyZFwiLCBcIk0xOTIgMTQ0YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptMCAyODhhMTc2IDE3NiAwIDEgMCAwLTM1MiAxNzYgMTc2IDAgMSAwIDAgMzUyelwiXVxufTtcbnZhciBmYUNoZXZyb25SaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGV2cm9uLXJpZ2h0JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTAwMl0sIFwiZjA1NFwiLCBcIk0zMTAuNiAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTkyIDE5MmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQyLjcgMjU2IDczLjQgODYuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyelwiXVxufTtcbnZhciBmYVJldHdlZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmV0d2VldCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjA3OVwiLCBcIk0yNzIgNDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTkyaDMyYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhsMzIgMCAwIDEyOGMwIDUzIDQzIDk2IDk2IDk2SDI3MnpNMzA0IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4SDQxNmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhsLTMyIDBWMTkyYzAtNTMtNDMtOTYtOTYtOTZMMzA0IDk2elwiXVxufTtcbnZhciBmYUNhclJlYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyLXJlYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNhci1hbHRcIl0sIFwiZjVkZVwiLCBcIk0xNjUuNCA5NkgzNDYuNmMxMy42IDAgMjUuNyA4LjYgMzAuMiAyMS40TDQwMi45IDE5MkgxMDkuMWwyNi4xLTc0LjZjNC41LTEyLjggMTYuNi0yMS40IDMwLjItMjEuNHptLTkwLjYgLjNMMzkuNiAxOTYuOEMxNi40IDIwNi40IDAgMjI5LjMgMCAyNTZ2ODBjMCAyMy43IDEyLjkgNDQuNCAzMiA1NS40VjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NmMxNy43IDAgMzItMTQuMyAzMi0zMlY0MDBIMzg0djQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM5MS40YzE5LjEtMTEuMSAzMi0zMS43IDMyLTU1LjRWMjU2YzAtMjYuNy0xNi40LTQ5LjYtMzkuNi01OS4yTDQzNy4yIDk2LjNDNDIzLjcgNTcuOCAzODcuNCAzMiAzNDYuNiAzMkgxNjUuNGMtNDAuOCAwLTc3LjEgMjUuOC05MC42IDY0LjN6TTIwOCAyNzJoOTZjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNlYyODhjMC04LjggNy4yLTE2IDE2LTE2ek00OCAyODBjMC0xMy4zIDEwLjctMjQgMjQtMjRoMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zNjAtMjRoMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINDA4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0elwiXVxufTtcbnZhciBmYUNhckFsdCA9IGZhQ2FyUmVhcjtcbnZhciBmYVB1bXBTb2FwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3B1bXAtc29hcCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA2YlwiLCBcIk0xMjggMzJ2OTZIMjU2Vjk2aDYwLjFjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2wzMy45IDMzLjljMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzNzIuNyA1NS40Yy0xNS0xNS0zNS40LTIzLjQtNTYuNi0yMy40SDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xMTcuNCAxNjBjLTMzLjMgMC02MSAyNS41LTYzLjggNTguN0wzNSA0NDIuN0MzMS45IDQ4MCA2MS4zIDUxMiA5OC44IDUxMkgyODUuMmMzNy40IDAgNjYuOS0zMiA2My44LTY5LjNsLTE4LjctMjI0Yy0yLjgtMzMuMi0zMC41LTU4LjctNjMuOC01OC43SDExNy40ek0yNTYgMzYwYzAgMzUuMy0yOC43IDU2LTY0IDU2cy02NC0yMC43LTY0LTU2YzAtMzIuNSAzNy04MC45IDUwLjktOTcuOWMzLjItMy45IDguMS02LjEgMTMuMS02LjFzOS45IDIuMiAxMy4xIDYuMUMyMTkgMjc5LjEgMjU2IDMyNy41IDI1NiAzNjB6XCJdXG59O1xudmFyIGZhVmlkZW9TbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aWRlby1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjRlMlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC04Ni40LTY3LjcgMTMuOCA5LjJjOS44IDYuNSAyMi40IDcuMiAzMi45IDEuNnMxNi45LTE2LjQgMTYuOS0yOC4yVjEyOGMwLTExLjgtNi41LTIyLjYtMTYuOS0yOC4ycy0yMy01LTMyLjkgMS42bC05NiA2NEw0NDggMTc0LjlWMTkyIDMyMHY1LjhsLTMyLTI1LjFWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDExMy45TDM4LjggNS4xek00MDcgNDE2LjdMMzIuMyAxMjEuNWMtLjIgMi4xLS4zIDQuMy0uMyA2LjVWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM1MmMyMy40IDAgNDMuOS0xMi42IDU1LTMxLjN6XCJdXG59O1xudmFyIGZhQmF0dGVyeVF1YXJ0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmF0dGVyeS1xdWFydGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJiYXR0ZXJ5LTJcIl0sIFwiZjI0M1wiLCBcIk00NjQgMTYwYzguOCAwIDE2IDcuMiAxNiAxNlYzMzZjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTc2YzAtOC44IDcuMi0xNiAxNi0xNkg0NjR6TTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NlYzMzZjMCA0NC4yIDM1LjggODAgODAgODBINDY0YzQ0LjIgMCA4MC0zNS44IDgwLTgwVjMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJWMTc2YzAtNDQuMi0zNS44LTgwLTgwLTgwSDgwem0xMTIgOTZIOTZWMzIwaDk2VjE5MnpcIl1cbn07XG52YXIgZmFCYXR0ZXJ5MiA9IGZhQmF0dGVyeVF1YXJ0ZXI7XG52YXIgZmFSYWRpbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyYWRpbycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI1MV0sIFwiZjhkN1wiLCBcIk00OTQuOCA0N2MxMi43LTMuNyAyMC0xNy4xIDE2LjMtMjkuOFM0OTQtMi44IDQ4MS4yIDFMNTEuNyAxMjYuOWMtOS40IDIuNy0xNy45IDcuMy0yNS4xIDEzLjJDMTAuNSAxNTEuNyAwIDE3MC42IDAgMTkydjRWMzA0IDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0SDIxOC41TDQ5NC44IDQ3ek0zNjggMjQwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek04MCAyNTZjMC04LjggNy4yLTE2IDE2LTE2aDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZ6TTY0IDMyMGMwLTguOCA3LjItMTYgMTYtMTZIMjA4YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZ6bTE2IDY0YzAtOC44IDcuMi0xNiAxNi0xNmg5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbnZhciBmYUJhYnlDYXJyaWFnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWJ5LWNhcnJpYWdlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjYXJyaWFnZS1iYWJ5XCJdLCBcImY3N2RcIiwgXCJNMjU2IDE5MkguMUMyLjcgMTE3LjkgNDEuMyA1Mi45IDk5IDE0LjFjMTMuMy04LjkgMzAuOC00LjMgMzkuOSA4LjhMMjU2IDE5MnptMTI4LTMyYzAtMzUuMyAyOC43LTY0IDY0LTY0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwdjY0YzAgMjUuMi01LjggNTAuMi0xNyA3My41cy0yNy44IDQ0LjUtNDguNiA2Mi4zcy00NS41IDMyLTcyLjcgNDEuNlMyNTMuNCA0MTYgMjI0IDQxNnMtNTguNS01LTg1LjctMTQuNnMtNTEuOS0yMy44LTcyLjctNDEuNnMtMzcuMy0zOS00OC42LTYyLjNTMCAyNDkuMiAwIDIyNGwyMjQgMCAxNjAgMFYxNjB6TTgwIDQxNmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTI0MCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwelwiXVxufTtcbnZhciBmYUNhcnJpYWdlQmFieSA9IGZhQmFieUNhcnJpYWdlO1xudmFyIGZhVHJhZmZpY0xpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWZmaWMtbGlnaHQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjg2NzhdLCBcImY2MzdcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwczE2MC03MS42IDE2MC0xNjBWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTk2IDQxNmE0OCA0OCAwIDEgMSAwLTk2IDQ4IDQ4IDAgMSAxIDAgOTZ6bTQ4LTE3NmE0OCA0OCAwIDEgMSAtOTYgMCA0OCA0OCAwIDEgMSA5NiAwem0tNDgtODBhNDggNDggMCAxIDEgMC05NiA0OCA0OCAwIDEgMSAwIDk2elwiXVxufTtcbnZhciBmYVRoZXJtb21ldGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RoZXJtb21ldGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDkxXCIsIFwiTTk2IDM4Mi4xVjI5My4zYzAtMTQuOSA1LjktMjkuMSAxNi40LTM5LjZsMjcuMy0yNy4zIDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDUuNS00NS41QzM1NS4yIDEwLjkgMzgxLjQgMCA0MDguOCAwQzQ2NS44IDAgNTEyIDQ2LjIgNTEyIDEwMy4yYzAgMjcuNC0xMC45IDUzLjYtMzAuMiA3M0wyNTguMyAzOTkuNmMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRIMTI5LjlMNDEgNTA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg5LTg5elwiXVxufTtcbnZhciBmYVZyQ2FyZGJvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZyLWNhcmRib2FyZCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjcyOVwiLCBcIk01NzYgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDE4NC40YzI0LjIgMCA0Ni40LTEzLjcgNTcuMi0zNS40bDMyLTY0YzguOC0xNy41IDI2LjctMjguNiA0Ni4zLTI4LjZzMzcuNSAxMS4xIDQ2LjMgMjguNmwzMiA2NGMxMC44IDIxLjcgMzMgMzUuNCA1Ny4yIDM1LjRINTc2YzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NHpNOTYgMjQwYTY0IDY0IDAgMSAxIDEyOCAwQTY0IDY0IDAgMSAxIDk2IDI0MHptMzg0LTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4elwiXVxufTtcbnZhciBmYUhhbmRNaWRkbGVGaW5nZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1taWRkbGUtZmluZ2VyJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NDA1XSwgXCJmODA2XCIsIFwiTTIzMiAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MFYyMDQuMmMtOC41LTcuNi0xOS43LTEyLjItMzItMTIuMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2NyA3M2MwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyNjQuM2MtMiAxLjQtMy45IDMtNS44IDQuNUw1NSAyODQuOEM0MC40IDI5NyAzMiAzMTUgMzIgMzM0VjM3MmMwIDM4IDE2LjkgNzQgNDYuMSA5OC4zbDUuNCA0LjVjMjguOCAyNCA2NSAzNy4xIDEwMi40IDM3LjFIMzA0YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4VjMyMCAyODhjMC0yNi41LTIxLjUtNDgtNDgtNDhjLTEyLjQgMC0yMy42IDQuNy0zMi4xIDEyLjNDMzUwIDIyNy41IDMyOS4zIDIwOCAzMDQgMjA4Yy0xMi4zIDAtMjMuNSA0LjYtMzIgMTIuMlY0MGMwLTIyLjEtMTcuOS00MC00MC00MHpcIl1cbn07XG52YXIgZmFQZXJjZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcmNlbnQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs2MjEwMSwgNjI3ODUsIFwicGVyY2VudGFnZVwiXSwgXCIyNVwiLCBcIk0zNzQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMzIwIDMyMGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwzMjAtMzIwek0xMjggMTI4QTY0IDY0IDAgMSAwIDAgMTI4YTY0IDY0IDAgMSAwIDEyOCAwek0zODQgMzg0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpcIl1cbn07XG52YXIgZmFQZXJjZW50YWdlID0gZmFQZXJjZW50O1xudmFyIGZhVHJ1Y2tNb3ZpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stbW92aW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNGRmXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWMzA0djgwIDE2YzAgNDQuMiAzNS44IDgwIDgwIDgwYzI2LjIgMCA0OS40LTEyLjYgNjQtMzJjMTQuNiAxOS40IDM3LjggMzIgNjQgMzJjNDQuMiAwIDgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZINDE2aDMzLjZjLTEgNS4yLTEuNiAxMC41LTEuNiAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtNS41LS42LTEwLjgtMS42LTE2SDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYyODggMjcyIDI2MS43YzAtOS4yLTMuMi0xOC4yLTktMjUuM2wtNTguOC03MS44Yy0xMC42LTEzLTI2LjUtMjAuNS00My4zLTIwLjVINDgwVjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek01ODUgMjU2SDQ4MFYxOTJoNDguOGMyLjQgMCA0LjcgMS4xIDYuMiAyLjlMNTg1IDI1NnpNNTI4IDM2OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE3NiA0MDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNODAgMzY4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFHbGFzc1dhdGVyRHJvcGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnbGFzcy13YXRlci1kcm9wbGV0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNGY1XCIsIFwiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM0gyNzUuM2M0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEgzMnpNODMgMjk3LjVMNjYuNCA2NEgzMTcuNkwzMDEgMjk3LjUgMjg4IDMwNGMtMjAuMSAxMC4xLTQzLjkgMTAuMS02NCAwcy00My45LTEwLjEtNjQgMHMtNDMuOSAxMC4xLTY0IDBsLTEzLTYuNXpNMjU2IDE5NmMwLTI0LTMzLjctNzAuMS01Mi4yLTkzLjVjLTYuMS03LjctMTcuNS03LjctMjMuNiAwQzE2MS43IDEyNS45IDEyOCAxNzIgMTI4IDE5NmMwIDMzLjEgMjguNyA2MCA2NCA2MHM2NC0yNi45IDY0LTYwelwiXVxufTtcbnZhciBmYURpc3BsYXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGlzcGxheScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTE2M1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFYzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjQwbC0xMC43IDMySDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzQ2LjdMMzM2IDQxNkg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTUxMiA2NFYzNTJINjRWNjRINTEyelwiXVxufTtcbnZhciBmYUZhY2VTbWlsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLXNtaWxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTc4LCBcInNtaWxlXCJdLCBcImYxMThcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC4xIDMyNS41QzE4MiAzNDYuMiAyMTIuNiAzNjggMjU2IDM2OHM3NC0yMS44IDkxLjktNDIuNWM1LjgtNi43IDE1LjktNy40IDIyLjYtMS42czcuNCAxNS45IDEuNiAyMi42QzM0OS44IDM3Mi4xIDMxMS4xIDQwMCAyNTYgNDAwcy05My44LTI3LjktMTE2LjEtNTMuNWMtNS44LTYuNy01LjEtMTYuOCAxLjYtMjIuNnMxNi44LTUuMSAyMi42IDEuNnpNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhU21pbGUgPSBmYUZhY2VTbWlsZTtcbnZhciBmYVRodW1idGFjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0aHVtYnRhY2snLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDQsIDEyODM5MiwgXCJ0aHVtYi10YWNrXCJdLCBcImYwOGRcIiwgXCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMEgzMjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjkwLjVsMTEuNCAxNDguMmMzNi43IDE5LjkgNjUuNyA1My4yIDc5LjUgOTQuN2wxIDNjMy4zIDkuOCAxLjYgMjAuNS00LjQgMjguOHMtMTUuNyAxMy4zLTI2IDEzLjNIMzJjLTEwLjMgMC0xOS45LTQuOS0yNi0xMy4zcy03LjctMTkuMS00LjQtMjguOGwxLTNjMTMuOC00MS41IDQyLjgtNzQuOCA3OS41LTk0LjdMOTMuNSA2NEg2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6TTE2MCAzODRoNjR2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0elwiXVxufTtcbnZhciBmYVRodW1iVGFjayA9IGZhVGh1bWJ0YWNrO1xudmFyIGZhVHJvcGh5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Ryb3BoeScsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyNzk0Ml0sIFwiZjA5MVwiLCBcIk00MDAgMEgxNzZjLTI2LjUgMC00OC4xIDIxLjgtNDcuMSA0OC4yYy4yIDUuMyAuNCAxMC42IC43IDE1LjhIMjRDMTAuNyA2NCAwIDc0LjcgMCA4OGMwIDkyLjYgMzMuNSAxNTcgNzguNSAyMDAuN2M0NC4zIDQzLjEgOTguMyA2NC44IDEzOC4xIDc1LjhjMjMuNCA2LjUgMzkuNCAyNiAzOS40IDQ1LjZjMCAyMC45LTE3IDM3LjktMzcuOSAzNy45SDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzU3LjlDMzM3IDQ0OCAzMjAgNDMxIDMyMCA0MTAuMWMwLTE5LjYgMTUuOS0zOS4yIDM5LjQtNDUuNmMzOS45LTExIDkzLjktMzIuNyAxMzguMi03NS44QzU0Mi41IDI0NSA1NzYgMTgwLjYgNTc2IDg4YzAtMTMuMy0xMC43LTI0LTI0LTI0SDQ0Ni40Yy4zLTUuMiAuNS0xMC40IC43LTE1LjhDNDQ4LjEgMjEuOCA0MjYuNSAwIDQwMCAwek00OC45IDExMmg4NC40YzkuMSA5MC4xIDI5LjIgMTUwLjMgNTEuOSAxOTAuNmMtMjQuOS0xMS01MC44LTI2LjUtNzMuMi00OC4zYy0zMi0zMS4xLTU4LTc2LTYzLTE0Mi4zek00NjQuMSAyNTQuM2MtMjIuNCAyMS44LTQ4LjMgMzcuMy03My4yIDQ4LjNjMjIuNy00MC4zIDQyLjgtMTAwLjUgNTEuOS0xOTAuNmg4NC40Yy01LjEgNjYuMy0zMS4xIDExMS4yLTYzIDE0Mi4zelwiXVxufTtcbnZhciBmYVBlcnNvblByYXlpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXByYXlpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg3MjAsIFwicHJheVwiXSwgXCJmNjgzXCIsIFwiTTM1MiA2NEE2NCA2NCAwIDEgMCAyMjQgNjRhNjQgNjQgMCAxIDAgMTI4IDB6TTIzMi43IDI2NGwyMi45IDMxLjVjNi41IDguOSAxNi4zIDE0LjcgMjcuMiAxNi4xczIxLjktMS43IDMwLjQtOC43bDg4LTcyYzE3LjEtMTQgMTkuNi0zOS4yIDUuNi01Ni4zcy0zOS4yLTE5LjYtNTYuMy01LjZsLTU1LjIgNDUuMi0yNi4yLTM2QzI1My42IDE1Ni43IDIyOC42IDE0NCAyMDIgMTQ0Yy0zMC45IDAtNTkuMiAxNy4xLTczLjYgNDQuNEw3OS44IDI4MC45Yy0yMC4yIDM4LjUtOS40IDg1LjkgMjUuNiAxMTEuOEwxNTguNiA0MzJINzJjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBIMjgwYzE3LjMgMCAzMi42LTExLjEgMzgtMjcuNXMtLjMtMzQuNC0xNC4yLTQ0LjdMMTg3LjcgMzU0bDQ1LTkwelwiXVxufTtcbnZhciBmYVByYXkgPSBmYVBlcnNvblByYXlpbmc7XG52YXIgZmFIYW1tZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFtbWVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mjk2XSwgXCJmNmUzXCIsIFwiTTQxMy41IDIzNy41Yy0yOC4yIDQuOC01OC4yLTMuNi04MC0yNS40bC0zOC4xLTM4LjFDMjgwLjQgMTU5IDI3MiAxMzguOCAyNzIgMTE3LjZWMTA1LjVMMTkyLjMgNjJjLTUuMy0yLjktOC42LTguNi04LjMtMTQuN3MzLjktMTEuNSA5LjUtMTRsNDcuMi0yMUMyNTkuMSA0LjIgMjc5IDAgMjk5LjIgMGgxOC4xYzM2LjcgMCA3MiAxNCA5OC43IDM5LjFsNDQuNiA0MmMyNC4yIDIyLjggMzMuMiA1NS43IDI2LjYgODZMNTAzIDE4M2w4LThjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMjQgMjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg4IDg4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMjQtMjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDgtOC0xNy41LTE3LjV6TTI3LjQgMzc3LjFMMjYwLjkgMTgyLjZjMy41IDQuOSA3LjUgOS42IDExLjggMTRsMzguMSAzOC4xYzYgNiAxMi40IDExLjIgMTkuMiAxNS43TDEzNC45IDQ4NC42Yy0xNC41IDE3LjQtMzYgMjcuNC01OC42IDI3LjRDMzQuMSA1MTIgMCA0NzcuOCAwIDQzNS43YzAtMjIuNiAxMC4xLTQ0LjEgMjcuNC01OC42elwiXVxufTtcbnZhciBmYUhhbmRQZWFjZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLXBlYWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTk5Nl0sIFwiZjI1YlwiLCBcIk0yMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlYyNDBIMTkyVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjIyNHpNOTMuMyA1MS4yTDE3NS45IDI0MEgxMDYuMUwzNC43IDc2LjhDMjcuNiA2MC42IDM1IDQxLjggNTEuMiAzNC43czM1LjEgLjMgNDIuMSAxNi41em0yNyAyMjEuM2wtLjItLjVoNjkuOUgyMTZjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBIMTYwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDU2YzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjZjMTMuMiAwIDI1LjQtNCAzNS42LTEwLjhjOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOGMxMS43IDAgMjIuNi0zLjEgMzItOC42VjM1MmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MEgyMjYuM2MtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45bC0xMS42LTExLjZDNzcuNSA0MjkuNSA2NCAzOTYuOSA2NCAzNjNWMzM2YzAtMzIuNyAyNC42LTU5LjcgNTYuMy02My41elwiXVxufTtcbnZhciBmYVJvdGF0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb3RhdGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNjAsIFwic3luYy1hbHRcIl0sIFwiZjJmMVwiLCBcIk0xNDIuOSAxNDIuOWM2Mi4yLTYyLjIgMTYyLjctNjIuNSAyMjUuMy0xTDMyNyAxODNjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJzMTIuNSAxNC44IDIyLjIgMTQuOEg0NjMuNWMwIDAgMCAwIDAgMEg0NzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNzJjMC05LjctNS44LTE4LjUtMTQuOC0yMi4ycy0xOS4zLTEuNy0yNi4yIDUuMkw0MTMuNCA5Ni42Yy04Ny42LTg2LjUtMjI4LjctODYuMi0zMTUuOCAxQzczLjIgMTIyIDU1LjYgMTUwLjcgNDQuOCAxODEuNGMtNS45IDE2LjcgMi45IDM0LjkgMTkuNSA0MC44czM0LjktMi45IDQwLjgtMTkuNWM3LjctMjEuOCAyMC4yLTQyLjMgMzcuOC01OS44ek0xNiAzMTJ2Ny42IC43VjQ0MGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsNDEuNi00MS42Yzg3LjYgODYuNSAyMjguNyA4Ni4yIDMxNS44LTFjMjQuNC0yNC40IDQyLjEtNTMuMSA1Mi45LTgzLjdjNS45LTE2LjctMi45LTM0LjktMTkuNS00MC44cy0zNC45IDIuOS00MC44IDE5LjVjLTcuNyAyMS44LTIwLjIgNDIuMy0zNy44IDU5LjhjLTYyLjIgNjIuMi0xNjIuNyA2Mi41LTIyNS4zIDFMMTg1IDMyOWM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4ycy0xMi41LTE0LjgtMjIuMi0xNC44SDQ4LjRoLS43SDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpcIl1cbn07XG52YXIgZmFTeW5jQWx0ID0gZmFSb3RhdGU7XG52YXIgZmFTcGlubmVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NwaW5uZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxMTBcIiwgXCJNMzA0IDQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTAgNDE2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQ4IDMwNGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQ2NC00OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xNDIuOSA0MzdBNDggNDggMCAxIDAgNzUgMzY5LjEgNDggNDggMCAxIDAgMTQyLjkgNDM3em0wLTI5NC4yQTQ4IDQ4IDAgMSAwIDc1IDc1YTQ4IDQ4IDAgMSAwIDY3LjkgNjcuOXpNMzY5LjEgNDM3QTQ4IDQ4IDAgMSAwIDQzNyAzNjkuMSA0OCA0OCAwIDEgMCAzNjkuMSA0Mzd6XCJdXG59O1xudmFyIGZhUm9ib3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9ib3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzMDJdLCBcImY1NDRcIiwgXCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTZINDcyYzM5LjggMCA3MiAzMi4yIDcyIDcyVjQ0MGMwIDM5LjgtMzIuMiA3Mi03MiA3MkgxNjhjLTM5LjggMC03Mi0zMi4yLTcyLTcyVjE2OGMwLTM5LjggMzIuMi03MiA3Mi03MkgyODhWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTIwOCAzODRjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjA4em05NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMwNHptOTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg0MDB6TTI2NCAyNTZhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHptMTUyIDQwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpNNDggMjI0SDY0VjQxNkg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em01NDQgMGMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEg1NzZWMjI0aDE2elwiXVxufTtcbnZhciBmYVBlYWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlYWNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTc3NF0sIFwiZjY3Y1wiLCBcIk0yMjQgNDQ1LjNWMzIzLjVsLTk0LjMgNzcuMWMyNi4xIDIyLjggNTguNSAzOC43IDk0LjMgNDQuN3pNODkuMiAzNTEuMUwyMjQgMjQwLjhWNjYuN0MxMzMuMiA4MS45IDY0IDE2MC45IDY0IDI1NmMwIDM0LjYgOS4yIDY3LjEgMjUuMiA5NS4xem0yOTMuMSA0OS41TDI4OCAzMjMuNVY0NDUuM2MzNS43LTYgNjguMS0yMS45IDk0LjMtNDQuN3ptNDAuNi00OS41YzE2LTI4IDI1LjItNjAuNSAyNS4yLTk1LjFjMC05NS4xLTY5LjItMTc0LjEtMTYwLTE4OS4zVjI0MC44TDQyMi44IDM1MS4xek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6XCJdXG59O1xudmFyIGZhR2VhcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2VhcnMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImNvZ3NcIl0sIFwiZjA4NVwiLCBcIk0zMDguNSAxMzUuM2M3LjEtNi4zIDkuOS0xNi4yIDYuMi0yNWMtMi4zLTUuMy00LjgtMTAuNS03LjYtMTUuNUwzMDQgODkuNGMtMy01LTYuMy05LjktOS44LTE0LjZjLTUuNy03LjYtMTUuNy0xMC4xLTI0LjctNy4xbC0yOC4yIDkuM2MtMTAuNy04LjgtMjMtMTYtMzYuMi0yMC45TDE5OSAyNy4xYy0xLjktOS4zLTkuMS0xNi43LTE4LjUtMTcuOEMxNzMuOSA4LjQgMTY3LjIgOCAxNjAuNCA4aC0uN2MtNi44IDAtMTMuNSAuNC0yMC4xIDEuMmMtOS40IDEuMS0xNi42IDguNi0xOC41IDE3LjhMMTE1IDU2LjFjLTEzLjMgNS0yNS41IDEyLjEtMzYuMiAyMC45TDUwLjUgNjcuOGMtOS0zLTE5LS41LTI0LjcgNy4xYy0zLjUgNC43LTYuOCA5LjYtOS45IDE0LjZsLTMgNS4zYy0yLjggNS01LjMgMTAuMi03LjYgMTUuNmMtMy43IDguNy0uOSAxOC42IDYuMiAyNWwyMi4yIDE5LjhDMzIuNiAxNjEuOSAzMiAxNjguOSAzMiAxNzZzLjYgMTQuMSAxLjcgMjAuOUwxMS41IDIxNi43Yy03LjEgNi4zLTkuOSAxNi4yLTYuMiAyNWMyLjMgNS4zIDQuOCAxMC41IDcuNiAxNS42bDMgNS4yYzMgNS4xIDYuMyA5LjkgOS45IDE0LjZjNS43IDcuNiAxNS43IDEwLjEgMjQuNyA3LjFsMjguMi05LjNjMTAuNyA4LjggMjMgMTYgMzYuMiAyMC45bDYuMSAyOS4xYzEuOSA5LjMgOS4xIDE2LjcgMTguNSAxNy44YzYuNyAuOCAxMy41IDEuMiAyMC40IDEuMnMxMy43LS40IDIwLjQtMS4yYzkuNC0xLjEgMTYuNi04LjYgMTguNS0xNy44bDYuMS0yOS4xYzEzLjMtNSAyNS41LTEyLjEgMzYuMi0yMC45bDI4LjIgOS4zYzkgMyAxOSAuNSAyNC43LTcuMWMzLjUtNC43IDYuOC05LjUgOS44LTE0LjZsMy4xLTUuNGMyLjgtNSA1LjMtMTAuMiA3LjYtMTUuNWMzLjctOC43IC45LTE4LjYtNi4yLTI1bC0yMi4yLTE5LjhjMS4xLTYuOCAxLjctMTMuOCAxLjctMjAuOXMtLjYtMTQuMS0xLjctMjAuOWwyMi4yLTE5Ljh6TTExMiAxNzZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNTA0LjcgNTAwLjVjNi4zIDcuMSAxNi4yIDkuOSAyNSA2LjJjNS4zLTIuMyAxMC41LTQuOCAxNS41LTcuNmw1LjQtMy4xYzUtMyA5LjktNi4zIDE0LjYtOS44YzcuNi01LjcgMTAuMS0xNS43IDcuMS0yNC43bC05LjMtMjguMmM4LjgtMTAuNyAxNi0yMyAyMC45LTM2LjJsMjkuMS02LjFjOS4zLTEuOSAxNi43LTkuMSAxNy44LTE4LjVjLjgtNi43IDEuMi0xMy41IDEuMi0yMC40cy0uNC0xMy43LTEuMi0yMC40Yy0xLjEtOS40LTguNi0xNi42LTE3LjgtMTguNUw1ODMuOSAzMDdjLTUtMTMuMy0xMi4xLTI1LjUtMjAuOS0zNi4ybDkuMy0yOC4yYzMtOSAuNS0xOS03LjEtMjQuN2MtNC43LTMuNS05LjYtNi44LTE0LjYtOS45bC01LjMtM2MtNS0yLjgtMTAuMi01LjMtMTUuNi03LjZjLTguNy0zLjctMTguNi0uOS0yNSA2LjJsLTE5LjggMjIuMmMtNi44LTEuMS0xMy44LTEuNy0yMC45LTEuN3MtMTQuMSAuNi0yMC45IDEuN2wtMTkuOC0yMi4yYy02LjMtNy4xLTE2LjItOS45LTI1LTYuMmMtNS4zIDIuMy0xMC41IDQuOC0xNS42IDcuNmwtNS4yIDNjLTUuMSAzLTkuOSA2LjMtMTQuNiA5LjljLTcuNiA1LjctMTAuMSAxNS43LTcuMSAyNC43bDkuMyAyOC4yYy04LjggMTAuNy0xNiAyMy0yMC45IDM2LjJMMzE1LjEgMzEzYy05LjMgMS45LTE2LjcgOS4xLTE3LjggMTguNWMtLjggNi43LTEuMiAxMy41LTEuMiAyMC40cy40IDEzLjcgMS4yIDIwLjRjMS4xIDkuNCA4LjYgMTYuNiAxNy44IDE4LjVsMjkuMSA2LjFjNSAxMy4zIDEyLjEgMjUuNSAyMC45IDM2LjJsLTkuMyAyOC4yYy0zIDktLjUgMTkgNy4xIDI0LjdjNC43IDMuNSA5LjUgNi44IDE0LjYgOS44bDUuNCAzLjFjNSAyLjggMTAuMiA1LjMgMTUuNSA3LjZjOC43IDMuNyAxOC42IC45IDI1LTYuMmwxOS44LTIyLjJjNi44IDEuMSAxMy44IDEuNyAyMC45IDEuN3MxNC4xLS42IDIwLjktMS43bDE5LjggMjIuMnpNNDY0IDMwNGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xudmFyIGZhQ29ncyA9IGZhR2VhcnM7XG52YXIgZmFXYXJlaG91c2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2FyZWhvdXNlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNDk0XCIsIFwiTTAgNDg4VjE3MS4zYzAtMjYuMiAxNS45LTQ5LjcgNDAuMi01OS40TDMwOC4xIDQuOGM3LjYtMy4xIDE2LjEtMy4xIDIzLjggMEw1OTkuOCAxMTEuOWMyNC4zIDkuNyA0MC4yIDMzLjMgNDAuMiA1OS40VjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEg1NjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTQ4OCAyNGwtMzM2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjQzMkg1MTJsMCA1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHpNMTI4IDQwMFYzMzZINTEydjY0SDEyOHptMC05NlYyMjRINTEybDAgODBIMTI4elwiXVxufTtcbnZhciBmYUFycm93VXBSaWdodERvdHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtcmlnaHQtZG90cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRiN1wiLCBcIk0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg1MC43TDkuNCAyNjUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyNTYgMTA5LjNWMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMTYwek01NzYgODBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNNDQ4IDIwOGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00MDAgMzg0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDggODBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHptMTI4IDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMjcyIDM4NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQ4IDgwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTE0NCA1MTJhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek01NzYgMzM2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bS00OC04MGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xudmFyIGZhU3Bsb3RjaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcGxvdGNoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNWJjXCIsIFwiTTIwOC41IDYyLjNsMjguMS0zNi45QzI0OC44IDkuNCAyNjcuOCAwIDI4OCAwYzI4LjUgMCA1My42IDE4LjcgNjEuOCA0NmwxNy44IDU5LjRjMTAuMyAzNC40IDM2LjEgNjIgNjkuOCA3NC42bDM5LjggMTQuOWMyMC45IDcuOSAzNC44IDI3LjkgMzQuOCA1MC4yYzAgMTYuOS03LjkgMzIuOC0yMS41IDQyLjlsLTY3LjMgNTAuNWMtMjQuMyAxOC4yLTM3LjIgNDcuOS0zMy44IDc4LjFsMi41IDIyLjdjNC4zIDM4LjctMjYgNzIuNi02NSA3Mi42Yy0xNC44IDAtMjkuMy01LjEtNDAuOC0xNC4zbC01NS40LTQ0LjNjLTQuNS0zLjYtOS4zLTYuNy0xNC41LTkuMmMtMTUuOC03LjktMzMuNy0xMC40LTUxLTcuM0w4Mi40IDQ1MS45QzQ3LjggNDU4LjIgMTYgNDMxLjYgMTYgMzk2LjVjMC0xMy4yIDQuNy0yNiAxMy4xLTM2LjJsMTEuMi0xMy40YzE0LjYtMTcuNCAyMi42LTM5LjQgMjIuNi02Mi4xYzAtMTguOC01LjUtMzcuMi0xNS44LTUzTDguOCAxNzMuNUMzLjEgMTY0LjcgMCAxNTQuNCAwIDE0My45YzAtMzMuNCAzMC4xLTU4LjggNjMtNTMuMmw1MS4zIDguN2MzNS45IDYuMSA3Mi4yLTguMiA5NC4yLTM3LjF6XCJdXG59O1xudmFyIGZhRmFjZUdyaW5IZWFydHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLWhlYXJ0cycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUyNSwgXCJncmluLWhlYXJ0c1wiXSwgXCJmNTg0XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6TTE5OS4zIDEyOS4xYzE3LjggNC44IDI4LjQgMjMuMSAyMy42IDQwLjhsLTE3LjQgNjVjLTIuMyA4LjUtMTEuMSAxMy42LTE5LjYgMTEuM2wtNjUuMS0xNy40Yy0xNy44LTQuOC0yOC40LTIzLjEtMjMuNi00MC44czIzLjEtMjguNCA0MC44LTIzLjZsMTYuMSA0LjMgNC4zLTE2LjFjNC44LTE3LjggMjMuMS0yOC40IDQwLjgtMjMuNnptMTU0LjMgMjMuNmw0LjMgMTYuMSAxNi4xLTQuM2MxNy44LTQuOCAzNi4xIDUuOCA0MC44IDIzLjZzLTUuOCAzNi4xLTIzLjYgNDAuOGwtNjUuMSAxNy40Yy04LjUgMi4zLTE3LjMtMi44LTE5LjYtMTEuM2wtMTcuNC02NWMtNC44LTE3LjggNS44LTM2LjEgMjMuNi00MC44czM2LjEgNS44IDQwLjkgMjMuNnpcIl1cbn07XG52YXIgZmFHcmluSGVhcnRzID0gZmFGYWNlR3JpbkhlYXJ0cztcbnZhciBmYURpY2VGb3VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UtZm91cicsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4NTldLCBcImY1MjRcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkgzODRjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnptMTYwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zNTIgMTYwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYVNpbUNhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2ltLWNhcmQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY3YzRcIiwgXCJNNjQgMEgyNDIuN2MxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyA5NmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zVjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjRDMCAyOC43IDI4LjcgMCA2NCAwek05NiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyaDY0VjE5Mkg5NnpNNjQgMzUyaDgwIDk2IDgwVjI4OEgyNDAgMTQ0IDY0djY0ek0zMjAgMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI1NnY2NGg2NFYyMjR6TTE2MCAxOTJ2NjRoNjRWMTkySDE2MHpNMjg4IDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRIMjU2djY0aDMyek0xNjAgMzg0djY0aDY0VjM4NEgxNjB6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMlYzODRINjR2MzJ6XCJdXG59O1xudmFyIGZhVHJhbnNnZW5kZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhbnNnZW5kZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODk1LCBcInRyYW5zZ2VuZGVyLWFsdFwiXSwgXCJmMjI1XCIsIFwiTTExMiAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC0zMSAzMUwxMTIgNzguMWw3LTdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC03IDcgMTUuMiAxNS4yQzE4Ny43IDEwNy42IDIyMC41IDk2IDI1NiA5NnM2OC4zIDExLjYgOTQuOSAzMS4ybDY4LjgtNjguOC0zMS0zMWMtNC42LTQuNi01LjktMTEuNS0zLjUtMTcuNHM4LjMtOS45IDE0LjgtOS45aDk2YzguOCAwIDE2IDcuMiAxNiAxNnY5NmMwIDYuNS0zLjkgMTIuMy05LjkgMTQuOHMtMTIuOSAxLjEtMTcuNC0zLjVsLTMxLTMxLTY4LjggNjguOEM0MDQuNCAxODcuNyA0MTYgMjIwLjUgNDE2IDI1NmMwIDgwLjItNTkgMTQ2LjYtMTM2IDE1OC4yVjQzMmgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyODB2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHYtOEgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMTZWNDE0LjJDMTU1IDQwMi42IDk2IDMzNi4yIDk2IDI1NmMwLTM1LjUgMTEuNi02OC4zIDMxLjItOTQuOUwxMTIgMTQ1LjlsLTcgN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw3LTdMNTguMyA5Mi4zbC0zMSAzMWMtNC42IDQuNi0xMS41IDUuOS0xNy40IDMuNVMwIDExOC41IDAgMTEyVjE2QzAgNy4yIDcuMiAwIDE2IDBoOTZ6TTM1MiAyNTZhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwelwiXVxufTtcbnZhciBmYVRyYW5zZ2VuZGVyQWx0ID0gZmFUcmFuc2dlbmRlcjtcbnZhciBmYU1lcmN1cnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWVyY3VyeScsXG4gIGljb246IFszODQsIDUxMiwgWzk3OTFdLCBcImYyMjNcIiwgXCJNNzIuMSA3Qzg1LjgtNCAxMDYtMS44IDExNyAxMmMxNy42IDIyIDQ0LjcgMzYgNzUgMzZzNTcuMy0xNCA3NS0zNmMxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NWMtNy44IDkuNy0xNi42IDE4LjQtMjYuNCAyNi4xQzMzNy4zIDEwOS43IDM2OCAxNjMuMyAzNjggMjI0YzAgODkuMS02Ni4yIDE2Mi43LTE1MiAxNzQuNFY0MjRoMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjE2djE2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQ3MkgxMzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMzJWMzk4LjRDODIuMiAzODYuNyAxNiAzMTMuMSAxNiAyMjRjMC02MC43IDMwLjctMTE0LjMgNzcuNS0xNDUuOUM4My43IDcwLjUgNzQuOSA2MS43IDY3LjEgNTJjLTExLjEtMTMuOC04LjgtMzMuOSA1LTQ1ek04MCAyMjRhMTEyIDExMiAwIDEgMCAyMjQgMEExMTIgMTEyIDAgMSAwIDgwIDIyNHpcIl1cbn07XG52YXIgZmFBcnJvd1R1cm5Eb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXR1cm4tZG93bicsXG4gIGljb246IFszODQsIDUxMiwgW1wibGV2ZWwtZG93blwiXSwgXCJmMTQ5XCIsIFwiTTMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJTMTQuMyAwIDMyIDBsOTYgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMzA2LjcgNzMuNC03My40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTEyOCAxMjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xMjgtMTI4Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDE2MCA0MDIuNyAxNjAgOTZjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgNjR6XCJdXG59O1xudmFyIGZhTGV2ZWxEb3duID0gZmFBcnJvd1R1cm5Eb3duO1xudmFyIGZhUGVyc29uRmFsbGluZ0J1cnN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1mYWxsaW5nLWJ1cnN0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTQ3XCIsIFwiTTI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDkuOGMwIDM5LTIzLjcgNzQtNTkuOSA4OC40QzcxLjYgMTU0LjUgMzIgMjEzIDMyIDI3OC4yVjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNzMuOGMwLTEwIDEuNi0xOS44IDQuNS0yOUwyNjEuMSA0OTcuNGM5LjYgMTQuOCAyOS40IDE5LjEgNDQuMyA5LjVzMTkuMS0yOS40IDkuNS00NC4zTDIyMi42IDMyMEgyMjRsODAgMCAzOC40IDUxLjJjMTAuNiAxNC4xIDMwLjcgMTcgNDQuOCA2LjRzMTctMzAuNyA2LjQtNDQuOGwtNDMuMi01Ny42QzM0MS4zIDI2My4xIDMyNy4xIDI1NiAzMTIgMjU2bC03MS41IDAtNTYuOC04MC4yLS4yLS4zYzQ0LjctMjkgNzIuNS03OSA3Mi41LTEzMy42bDAtOS44ek05NiA4MEE0OCA0OCAwIDEgMCAwIDgwYTQ4IDQ4IDAgMSAwIDk2IDB6TTQ2NCAyODYuMWw1OC42IDUzLjljNC44IDQuNCAxMS45IDUuNSAxNy44IDIuNnM5LjUtOSA5LTE1LjVsLTUuNi03OS40IDc4LjctMTIuMmM2LjUtMSAxMS43LTUuOSAxMy4xLTEyLjJzLTEuMS0xMy02LjUtMTYuN2wtNjUuNi00NS4xTDYwMyA5Mi4yYzMuMy01LjcgMi43LTEyLjgtMS40LTE3LjlzLTEwLjktNy4yLTE3LjItNS4zTDUwOC4zIDkyLjFsLTI5LjQtNzRDNDc2LjQgMTIgNDcwLjYgOCA0NjQgOHMtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NEwzNDMuNiA2OC45Yy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNzLTQuNiAxMi4yLTEuNCAxNy45bDM5LjUgNjkuMS02NS42IDQ1LjFjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43Yy4xIC4zIC4xIC42IC4yIC44bDE5LjQgMGMyMC4xIDAgMzkuMiA3LjUgNTMuOCAyMC44bDE4LjQgMi45TDM4MyAyNjUuM2wzNi4yIDQ4LjNjMi4xIDIuOCAzLjkgNS43IDUuNSA4LjZMNDY0IDI4Ni4xelwiXVxufTtcbnZhciBmYUF3YXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2F3YXJkJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNTU5XCIsIFwiTTE3My44IDUuNWMxMS03LjMgMjUuNC03LjMgMzYuNCAwTDIyOCAxNy4yYzYgMy45IDEzIDUuOCAyMC4xIDUuNGwyMS4zLTEuM2MxMy4yLS44IDI1LjYgNi40IDMxLjUgMTguMmw5LjYgMTkuMWMzLjIgNi40IDguNCAxMS41IDE0LjcgMTQuN0wzNDQuNSA4M2MxMS44IDUuOSAxOSAxOC4zIDE4LjIgMzEuNWwtMS4zIDIxLjNjLS40IDcuMSAxLjUgMTQuMiA1LjQgMjAuMWwxMS44IDE3LjhjNy4zIDExIDcuMyAyNS40IDAgMzYuNEwzNjYuOCAyMjhjLTMuOSA2LTUuOCAxMy01LjQgMjAuMWwxLjMgMjEuM2MuOCAxMy4yLTYuNCAyNS42LTE4LjIgMzEuNWwtMTkuMSA5LjZjLTYuNCAzLjItMTEuNSA4LjQtMTQuNyAxNC43TDMwMSAzNDQuNWMtNS45IDExLjgtMTguMyAxOS0zMS41IDE4LjJsLTIxLjMtMS4zYy03LjEtLjQtMTQuMiAxLjUtMjAuMSA1LjRsLTE3LjggMTEuOGMtMTEgNy4zLTI1LjQgNy4zLTM2LjQgMEwxNTYgMzY2LjhjLTYtMy45LTEzLTUuOC0yMC4xLTUuNGwtMjEuMyAxLjNjLTEzLjIgLjgtMjUuNi02LjQtMzEuNS0xOC4ybC05LjYtMTkuMWMtMy4yLTYuNC04LjQtMTEuNS0xNC43LTE0LjdMMzkuNSAzMDFjLTExLjgtNS45LTE5LTE4LjMtMTguMi0zMS41bDEuMy0yMS4zYy40LTcuMS0xLjUtMTQuMi01LjQtMjAuMUw1LjUgMjEwLjJjLTcuMy0xMS03LjMtMjUuNCAwLTM2LjRMMTcuMiAxNTZjMy45LTYgNS44LTEzIDUuNC0yMC4xbC0xLjMtMjEuM2MtLjgtMTMuMiA2LjQtMjUuNiAxOC4yLTMxLjVsMTkuMS05LjZDNjUgNzAuMiA3MC4yIDY1IDczLjQgNTguNkw4MyAzOS41YzUuOS0xMS44IDE4LjMtMTkgMzEuNS0xOC4ybDIxLjMgMS4zYzcuMSAuNCAxNC4yLTEuNSAyMC4xLTUuNEwxNzMuOCA1LjV6TTI3MiAxOTJhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAwek0xLjMgNDQxLjhMNDQuNCAzMzkuM2MuMiAuMSAuMyAuMiAuNCAuNGw5LjYgMTkuMWMxMS43IDIzLjIgMzYgMzcuMyA2MiAzNS44bDIxLjMtMS4zYy4yIDAgLjUgMCAuNyAuMmwxNy44IDExLjhjNS4xIDMuMyAxMC41IDUuOSAxNi4xIDcuN2wtMzcuNiA4OS4zYy0yLjMgNS41LTcuNCA5LjItMTMuMyA5LjdzLTExLjYtMi4yLTE0LjgtNy4yTDc0LjQgNDU1LjVsLTU2LjEgOC4zYy01LjcgLjgtMTEuNC0xLjUtMTUtNnMtNC4zLTEwLjctMi4xLTE2em0yNDggNjAuNEwyMTEuNyA0MTNjNS42LTEuOCAxMS00LjMgMTYuMS03LjdsMTcuOC0xMS44Yy4yLS4xIC40LS4yIC43LS4ybDIxLjMgMS4zYzI2IDEuNSA1MC4zLTEyLjYgNjItMzUuOGw5LjYtMTkuMWMuMS0uMiAuMi0uMyAuNC0uNGw0My4yIDEwMi41YzIuMiA1LjMgMS40IDExLjQtMi4xIDE2cy05LjMgNi45LTE1IDZsLTU2LjEtOC4zLTMyLjIgNDkuMmMtMy4yIDUtOC45IDcuNy0xNC44IDcuMnMtMTEtNC4zLTEzLjMtOS43elwiXVxufTtcbnZhciBmYVRpY2tldFNpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0aWNrZXQtc2ltcGxlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJ0aWNrZXQtYWx0XCJdLCBcImYzZmZcIiwgXCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgOC44LTcuNCAxNS43LTE1LjcgMTguNkM1NDEuNSAyMTcuMSA1MjggMjM1IDUyOCAyNTZzMTMuNSAzOC45IDMyLjMgNDUuNGM4LjMgMi45IDE1LjcgOS44IDE1LjcgMTguNnY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMzIwYzAtOC44IDcuNC0xNS43IDE1LjctMTguNkMzNC41IDI5NC45IDQ4IDI3NyA0OCAyNTZzLTEzLjUtMzguOS0zMi4zLTQ1LjRDNy40IDIwNy43IDAgMjAwLjggMCAxOTJWMTI4elwiXVxufTtcbnZhciBmYVRpY2tldEFsdCA9IGZhVGlja2V0U2ltcGxlO1xudmFyIGZhQnVpbGRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjc5NzAsIDYxNjg3XSwgXCJmMWFkXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xMTItMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDBjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTgwIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJ6TTI3MiA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhQW5nbGVzTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmdsZXMtbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzE3MSwgXCJhbmdsZS1kb3VibGUtbGVmdFwiXSwgXCJmMTAwXCIsIFwiTTQxLjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyNTYgMjQ2LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6bTM1Mi0xNjBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMDEuMyAyNTYgNDM4LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDB6XCJdXG59O1xudmFyIGZhQW5nbGVEb3VibGVMZWZ0ID0gZmFBbmdsZXNMZWZ0O1xudmFyIGZhUXJjb2RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3FyY29kZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAyOVwiLCBcIk0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMyaDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MHpNNjQgOTZ2NjRoNjRWOTZINjR6TTAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMzZ6bTY0IDE2djY0aDY0VjM1Mkg2NHpNMzA0IDMyaDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDMwNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODBjMC0yNi41IDIxLjUtNDggNDgtNDh6bTgwIDY0SDMyMHY2NGg2NFY5NnpNMjU2IDMwNGMwLTguOCA3LjItMTYgMTYtMTZoNjRjOC44IDAgMTYgNy4yIDE2IDE2czcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY5NmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYzMDR6TTM2OCA0ODBhMTYgMTYgMCAxIDEgMC0zMiAxNiAxNiAwIDEgMSAwIDMyem02NCAwYTE2IDE2IDAgMSAxIDAtMzIgMTYgMTYgMCAxIDEgMCAzMnpcIl1cbn07XG52YXIgZmFDbG9ja1JvdGF0ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvY2stcm90YXRlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhpc3RvcnlcIl0sIFwiZjFkYVwiLCBcIk03NSA3NUw0MSA0MUMyNS45IDI1LjkgMCAzNi42IDAgNTcuOVYxNjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRIMTM0LjFjMjEuNCAwIDMyLjEtMjUuOSAxNy00MWwtMzAuOC0zMC44QzE1NSA4NS41IDIwMyA2NCAyNTYgNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJzLTg2IDE5Mi0xOTIgMTkyYy00MC44IDAtNzguNi0xMi43LTEwOS43LTM0LjRjLTE0LjUtMTAuMS0zNC40LTYuNi00NC42IDcuOXMtNi42IDM0LjQgNy45IDQ0LjZDMTUxLjIgNDk1IDIwMS43IDUxMiAyNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMEMxODUuMyAwIDEyMS4zIDI4LjcgNzUgNzV6bTE4MSA1M2MtMTMuMyAwLTI0IDEwLjctMjQgMjRWMjU2YzAgNi40IDIuNSAxMi41IDcgMTdsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NS02NVYxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6XCJdXG59O1xudmFyIGZhSGlzdG9yeSA9IGZhQ2xvY2tSb3RhdGVMZWZ0O1xudmFyIGZhRmFjZUdyaW5CZWFtU3dlYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLWJlYW0tc3dlYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTcsIFwiZ3Jpbi1iZWFtLXN3ZWF0XCJdLCBcImY1ODNcIiwgXCJNNDc2LjggMTI2LjNjLTQuMSAxLjEtOC40IDEuNy0xMi44IDEuN2MtMjYuNSAwLTQ4LTIxLTQ4LTQ3YzAtNSAxLjgtMTEuMyA0LjYtMTguMWMuMy0uNyAuNi0xLjQgLjktMi4xYzktMjAuMiAyNi41LTQ0LjkgMzYtNTcuNWMzLjItNC40IDkuNi00LjQgMTIuOCAwQzQ4My40IDIwLjYgNTEyIDYxIDUxMiA4MWMwIDIxLjctMTQuOSAzOS44LTM1LjIgNDUuM3pNMjU2IDBjNTEuNCAwIDk5LjMgMTUuMiAxMzkuNCA0MS4yYy0xLjUgMy4xLTMgNi4yLTQuMyA5LjNjLTMuNCA4LTcuMSAxOS03LjEgMzAuNWMwIDQ0LjMgMzYuNiA3OSA4MCA3OWM5LjYgMCAxOC44LTEuNyAyNy40LTQuOGMxMy4zIDMwLjkgMjAuNiA2NSAyMC42IDEwMC44YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwek0zODguMSAzMTIuOGMtMzkuNyAxMi4yLTg0LjUgMTktMTMxLjggMTlzLTkyLjEtNi44LTEzMS44LTE5Yy0xMi4zLTMuOC0yNC4zIDYuOS0xOS4zIDE4LjdjMjUgNTkuMSA4My4yIDEwMC41IDE1MS4xIDEwMC41czEyNi4yLTQxLjQgMTUxLjEtMTAwLjVjNS0xMS44LTctMjIuNS0xOS4zLTE4Ljd6bS0xNzAuNS04NGwwIDAgMCAwYzIuMSAyLjggNS43IDMuOSA4LjkgMi44czUuNS00LjEgNS41LTcuNmMwLTE3LjktNi43LTM1LjYtMTYuNi00OC44Yy05LjgtMTMtMjMuOS0yMy4yLTM5LjQtMjMuMnMtMjkuNiAxMC4yLTM5LjQgMjMuMkMxMjYuNyAxODguNCAxMjAgMjA2LjEgMTIwIDIyNGMwIDMuNCAyLjIgNi41IDUuNSA3LjZzNi45IDAgOC45LTIuOGwwIDAgMCAwIDAgMCAuMi0uMmMuMi0uMiAuNC0uNSAuNy0uOWMuNi0uOCAxLjYtMiAyLjgtMy40YzIuNS0yLjggNi02LjYgMTAuMi0xMC4zYzguOC03LjggMTguOC0xNCAyNy43LTE0czE4LjkgNi4yIDI3LjcgMTRjNC4yIDMuNyA3LjcgNy41IDEwLjIgMTAuM2MxLjIgMS40IDIuMiAyLjYgMi44IDMuNGMuMyAuNCAuNiAuNyAuNyAuOWwuMiAuMiAwIDAgMCAwem0xNjAgMGwwIDAgMCAwIDAgMGMyLjEgMi44IDUuNyAzLjkgOC45IDIuOHM1LjUtNC4xIDUuNS03LjZjMC0xNy45LTYuNy0zNS42LTE2LjYtNDguOGMtOS44LTEzLTIzLjktMjMuMi0zOS40LTIzLjJzLTI5LjYgMTAuMi0zOS40IDIzLjJDMjg2LjcgMTg4LjQgMjgwIDIwNi4xIDI4MCAyMjRjMCAzLjQgMi4yIDYuNSA1LjUgNy42czYuOSAwIDguOS0yLjhsMCAwIDAgMCAwIDAgLjItLjJjLjItLjIgLjQtLjUgLjctLjljLjYtLjggMS42LTIgMi44LTMuNGMyLjUtMi44IDYtNi42IDEwLjItMTAuM2M4LjgtNy44IDE4LjgtMTQgMjcuNy0xNHMxOC45IDYuMiAyNy43IDE0YzQuMiAzLjcgNy43IDcuNSAxMC4yIDEwLjNjMS4yIDEuNCAyLjIgMi42IDIuOCAzLjRjLjMgLjQgLjYgLjcgLjcgLjlsLjIgLjIgMCAwelwiXVxufTtcbnZhciBmYUdyaW5CZWFtU3dlYXQgPSBmYUZhY2VHcmluQmVhbVN3ZWF0O1xudmFyIGZhRmlsZUV4cG9ydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWV4cG9ydCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiYXJyb3ctcmlnaHQtZnJvbS1maWxlXCJdLCBcImY1NmVcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODRWMjg4SDIxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgzODRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHpNMzg0IDMzNlYyODhINDk0LjFsLTM5LTM5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsODAgODBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTgwIDgwYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDM5LTM5SDM4NHptMC0yMDhIMjU2VjBMMzg0IDEyOHpcIl1cbn07XG52YXIgZmFBcnJvd1JpZ2h0RnJvbUZpbGUgPSBmYUZpbGVFeHBvcnQ7XG52YXIgZmFTaGllbGQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hpZWxkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzM3LCBcInNoaWVsZC1ibGFua1wiXSwgXCJmMTMyXCIsIFwiTTI1NiAwYzQuNiAwIDkuMiAxIDEzLjQgMi45TDQ1Ny43IDgyLjhjMjIgOS4zIDM4LjQgMzEgMzguMyA1Ny4yYy0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjYgMzYzLjJjLTE2LjcgOC0zNi4xIDgtNTIuOCAwQzU3LjMgNDIwLjcgMTYuNSAyMzkuMiAxNiAxNDBjLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjggMSAyNTEuNCAwIDI1NiAwelwiXVxufTtcbnZhciBmYVNoaWVsZEJsYW5rID0gZmFTaGllbGQ7XG52YXIgZmFBcnJvd1VwU2hvcnRXaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLXNob3J0LXdpZGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYW1vdW50LXVwLWFsdFwiXSwgXCJmODg1XCIsIFwiTTE1MS42IDQyLjRDMTQ1LjUgMzUuOCAxMzcgMzIgMTI4IDMycy0xNy41IDMuOC0yMy42IDEwLjRsLTg4IDk2Yy0xMS45IDEzLTExLjEgMzMuMyAyIDQ1LjJzMzMuMyAxMS4xIDQ1LjItMkw5NiAxNDYuM1Y0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNDYuM2wzMi40IDM1LjRjMTEuOSAxMyAzMi4yIDEzLjkgNDUuMiAyczEzLjktMzIuMiAyLTQ1LjJsLTg4LTk2ek0zMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6XCJdXG59O1xudmFyIGZhU29ydEFtb3VudFVwQWx0ID0gZmFBcnJvd1VwU2hvcnRXaWRlO1xudmFyIGZhSG91c2VNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLW1lZGljYWwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUzYjJcIiwgXCJNNTQzLjggMjg3LjZjMTcgMCAzMi0xNCAzMi0zMi4xYzEtOS0zLTE3LTExLTI0TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMyVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDguNWMzNS41IDAgNjQuMi0yOC44IDY0LTY0LjNsLS43LTE2MC4yaDMyek0yNTYgMjA4YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NDhoNDhjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzMjB2NDhjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjMyMEgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDQ4VjIwOHpcIl1cbn07XG52YXIgZmFHb2xmQmFsbFRlZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnb2xmLWJhbGwtdGVlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJnb2xmLWJhbGxcIl0sIFwiZjQ1MFwiLCBcIk0zODQgMTkyYzAgNjYuOC0zNC4xIDEyNS42LTg1LjggMTYwSDg1LjhDMzQuMSAzMTcuNiAwIDI1OC44IDAgMTkyQzAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MnpNMjQyLjEgMjU2LjZjMCAxOC41LTE1IDMzLjUtMzMuNSAzMy41Yy00LjkgMC05LjEgNS4xLTUuNCA4LjRjNS45IDUuMiAxMy43IDguNCAyMi4xIDguNGMxOC41IDAgMzMuNS0xNSAzMy41LTMzLjVjMC04LjUtMy4yLTE2LjItOC40LTIyLjFjLTMuMy0zLjctOC40IC41LTguNCA1LjR6bS01Mi4zLTQ5LjNjLTQuOSAwLTkuMSA1LjEtNS40IDguNGM1LjkgNS4yIDEzLjcgOC40IDIyLjEgOC40YzE4LjUgMCAzMy41LTE1IDMzLjUtMzMuNWMwLTguNS0zLjItMTYuMi04LjQtMjIuMWMtMy4zLTMuNy04LjQgLjUtOC40IDUuNGMwIDE4LjUtMTUgMzMuNS0zMy41IDMzLjV6bTExMy41LTE3LjVjMCAxOC41LTE1IDMzLjUtMzMuNSAzMy41Yy00LjkgMC05LjEgNS4xLTUuNCA4LjRjNS45IDUuMiAxMy43IDguNCAyMi4xIDguNGMxOC41IDAgMzMuNS0xNSAzMy41LTMzLjVjMC04LjUtMy4yLTE2LjItOC40LTIyLjFjLTMuMy0zLjctOC40IC41LTguNCA1LjR6TTk2IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyNDBjLTguOCAwLTE2IDcuMi0xNiAxNnYxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NjRjMC04LjgtNy4yLTE2LTE2LTE2SDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdXG59O1xudmFyIGZhR29sZkJhbGwgPSBmYUdvbGZCYWxsVGVlO1xudmFyIGZhQ2lyY2xlQ2hldnJvbkxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZXZyb24tbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY2hldnJvbi1jaXJjbGUtbGVmdFwiXSwgXCJmMTM3XCIsIFwiTTUxMiAyNTZBMjU2IDI1NiAwIDEgMCAwIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwek0yNzEgMTM1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODcgODcgODcgODdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxNjcgMjczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwyNzEgMTM1elwiXVxufTtcbnZhciBmYUNoZXZyb25DaXJjbGVMZWZ0ID0gZmFDaXJjbGVDaGV2cm9uTGVmdDtcbnZhciBmYUhvdXNlQ2hpbW5leVdpbmRvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaGltbmV5LXdpbmRvdycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTAwZFwiLCBcIk01NzUuOCAyNTUuNWMwIDE4LTE1IDMyLjEtMzIgMzIuMWgtMzJsLjcgMTYwLjJjLjIgMzUuNS0yOC41IDY0LjMtNjQgNjQuM0gxMjguMWMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQxNiAxMDAuN1Y2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYxODVsNTIuOCA0Ni40YzggNyAxMiAxNSAxMSAyNHpNMjQ4IDE5MmMtMTMuMyAwLTI0IDEwLjctMjQgMjR2ODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMjE2YzAtMTMuMy0xMC43LTI0LTI0LTI0SDI0OHpcIl1cbn07XG52YXIgZmFQZW5OaWIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuLW5pYicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEwMDAxXSwgXCJmNWFkXCIsIFwiTTM2OC40IDE4LjNMMzEyLjcgNzQuMSA0MzcuOSAxOTkuM2w1NS43LTU1LjdjMjEuOS0yMS45IDIxLjktNTcuMyAwLTc5LjJMNDQ3LjYgMTguM2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDB6TTI4OCA5NC42bC05LjIgMi44TDEzNC43IDE0MC42Yy0xOS45IDYtMzUuNyAyMS4yLTQyLjMgNDFMMy44IDQ0NS44Yy0zLjggMTEuMy0xIDIzLjkgNy4zIDMyLjRMMTY0LjcgMzI0LjdjLTMtNi4zLTQuNy0xMy4zLTQuNy0yMC43YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhjLTcuNCAwLTE0LjQtMS43LTIwLjctNC43TDMzLjcgNTAwLjljOC42IDguMyAyMS4xIDExLjIgMzIuNCA3LjNsMjY0LjMtODguNmMxOS43LTYuNiAzNS0yMi40IDQxLTQyLjNsNDMuMi0xNDQuMSAyLjgtOS4yTDI4OCA5NC42elwiXVxufTtcbnZhciBmYVRlbnRBcnJvd1R1cm5MZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbnQtYXJyb3ctdHVybi1sZWZ0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTgwXCIsIFwiTTEyMC4xIDQxLjhjOS45LTguOSAxMC43LTI0IDEuOC0zMy45Uzk3LjgtMi43IDg3LjkgNi4ybC04MCA3MkMyLjkgODIuNyAwIDg5LjIgMCA5NnMyLjkgMTMuMyA3LjkgMTcuOGw4MCA3MmM5LjkgOC45IDI1IDguMSAzMy45LTEuOHM4LjEtMjUtMS44LTMzLjlMODYuNSAxMjAgNDU2IDEyMGMzOS44IDAgNzIgMzIuMiA3MiA3MnY0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjE5MmMwLTY2LjMtNTMuNy0xMjAtMTIwLTEyMEw4Ni41IDcybDMzLjUtMzAuMnpNMzA3LjQgMTY2LjVjLTExLjUtOC43LTI3LjMtOC43LTM4LjggMGwtMTY4IDEyOGMtNi42IDUtMTEgMTIuNS0xMi4zIDIwLjdsLTI0IDE2MGMtMS40IDkuMiAxLjMgMTguNiA3LjQgMjUuNlM4Ni43IDUxMiA5NiA1MTJIMjQwaDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM2MS45YzAtNS41IDQuNC05LjkgOS45LTkuOWMzLjcgMCA3LjIgMi4xIDguOCA1LjVsNjguNCAxMzYuOGM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43SDQ2NGgxNmM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjh6XCJdXG59O1xudmFyIGZhVGVudHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVudHMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1ODJcIiwgXCJNMzk2LjYgNi41TDIzNS44IDEyOS4xYzkuNiAxLjggMTguOSA1LjggMjcgMTJsMTY4IDEyOGMxMy4yIDEwLjEgMjIgMjQuOSAyNC41IDQxLjRsNi4yIDQxLjVINjA4YzkuMyAwIDE4LjItNC4xIDI0LjItMTEuMXM4LjgtMTYuNCA3LjQtMjUuNmwtMjQtMTYwYy0xLjItOC4yLTUuNi0xNS43LTEyLjMtMjAuN2wtMTY4LTEyOGMtMTEuNS04LjctMjcuMy04LjctMzguOCAwem0tMTUzLjIgMTYwYy0xMS41LTguNy0yNy4zLTguNy0zOC44IDBsLTE2OCAxMjhjLTYuNiA1LTExIDEyLjUtMTIuMyAyMC43bC0yNCAxNjBjLTEuNCA5LjIgMS4zIDE4LjYgNy40IDI1LjZTMjIuNyA1MTIgMzIgNTEySDE3NmgxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYzNjEuOWMwLTUuNSA0LjQtOS45IDkuOS05LjljMy43IDAgNy4yIDIuMSA4LjggNS41bDY4LjQgMTM2LjhjNS40IDEwLjggMTYuNSAxNy43IDI4LjYgMTcuN0g0MDBoMTZjOS4zIDAgMTguMi00LjEgMjQuMi0xMS4xczguOC0xNi40IDcuNC0yNS42bC0yNC0xNjBjLTEuMi04LjItNS42LTE1LjctMTIuMy0yMC43bC0xNjgtMTI4elwiXVxufTtcbnZhciBmYVdhbmRNYWdpYyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YW5kLW1hZ2ljJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJtYWdpY1wiXSwgXCJmMGQwXCIsIFwiTTE0LjEgNDYzLjNjLTE4LjctMTguNy0xOC43LTQ5LjEgMC02Ny45TDM5NS40IDE0LjFjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBsMzQuNiAzNC42YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDExNi41IDQ5Ny45Yy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwxNC4xIDQ2My4zek0zNDcuNiAxODcuNmwxMDUtMTA1TDQyOS40IDU5LjNsLTEwNSAxMDUgMjMuMyAyMy4zelwiXVxufTtcbnZhciBmYU1hZ2ljID0gZmFXYW5kTWFnaWM7XG52YXIgZmFEb2cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDIxXSwgXCJmNmQzXCIsIFwiTTMwOS42IDE1OC41TDMzMi43IDE5LjhDMzM0LjYgOC40IDM0NC41IDAgMzU2LjEgMGM3LjUgMCAxNC41IDMuNSAxOSA5LjVMMzkyIDMyaDUyLjFjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMUw0OTYgNjRoNTZjMTMuMyAwIDI0IDEwLjcgMjQgMjR2MjRjMCA0NC4yLTM1LjggODAtODAgODBINDY0IDQ0OCA0MjYuN2wtNS4xIDMwLjUtMTEyLTY0ek00MTYgMjU2LjFMNDE2IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM2NC44Yy0yNCAxMi4zLTUxLjIgMTkuMi04MCAxOS4ycy01Ni02LjktODAtMTkuMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI0OS44Yy0yOC44LTEwLjktNTEuNC0zNS4zLTU5LjItNjYuNUwxIDE2Ny44Yy00LjMtMTcuMSA2LjEtMzQuNSAyMy4zLTM4LjhzMzQuNSA2LjEgMzguOCAyMy4zbDMuOSAxNS41QzcwLjUgMTgyIDgzLjMgMTkyIDk4IDE5MmgzMCAxNkgzMDMuOEw0MTYgMjU2LjF6TTQ2NCA4MGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbnZhciBmYUNhcnJvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJyb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNjVdLCBcImY3ODdcIiwgXCJNMzQ2LjcgNkMzMzcuNiAxNyAzMjAgNDIuMyAzMjAgNzJjMCA0MCAxNS4zIDU1LjMgNDAgODBzNDAgNDAgODAgNDBjMjkuNyAwIDU1LTE3LjYgNjYtMjYuN2M0LTMuMyA2LTguMiA2LTEzLjNzLTItMTAtNi0xMy4yYy0xMS40LTkuMS0zOC4zLTI2LjgtNzQtMjYuOGMtMzIgMC00MCA4LTQwIDhzOC04IDgtNDBjMC0zNS43LTE3LjctNjIuNi0yNi44LTc0QzM3MCAyIDM2NS4xIDAgMzYwIDBzLTEwIDItMTMuMyA2ek0yNDQuNiAxMzZjLTQwIDAtNzcuMSAxOC4xLTEwMS43IDQ4LjJsNjAuNSA2MC41YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTU1LjMtNTUuMyAwIC4xTDIuMiA0NzcuOUMtMiA0ODctLjEgNDk3LjggNyA1MDVzMTcuOSA5IDI3LjEgNC44bDEzNC43LTYyLjQtNTIuMS01Mi4xYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMMTk5LjcgNDMzbDEwMC4yLTQ2LjRjNDYuNC0yMS41IDc2LjItNjggNzYuMi0xMTkuMkMzNzYgMTk0LjggMzE3LjIgMTM2IDI0NC42IDEzNnpcIl1cbn07XG52YXIgZmFNb29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vb24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjc3NjksIDkyMTRdLCBcImYxODZcIiwgXCJNMjIzLjUgMzJDMTAwIDMyIDAgMTMyLjMgMCAyNTZTMTAwIDQ4MCAyMjMuNSA0ODBjNjAuNiAwIDExNS41LTI0LjIgMTU1LjgtNjMuNGM1LTQuOSA2LjMtMTIuNSAzLjEtMTguN3MtMTAuMS05LjctMTctOC41Yy05LjggMS43LTE5LjggMi42LTMwLjEgMi42Yy05Ni45IDAtMTc1LjUtNzguOC0xNzUuNS0xNzZjMC02NS44IDM2LTEyMy4xIDg5LjMtMTUzLjNjNi4xLTMuNSA5LjItMTAuNSA3LjctMTcuM3MtNy4zLTExLjktMTQuMy0xMi41Yy02LjMtLjUtMTIuNi0uOC0xOS0uOHpcIl1cbn07XG52YXIgZmFXaW5lR2xhc3NFbXB0eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3aW5lLWdsYXNzLWVtcHR5JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJ3aW5lLWdsYXNzLWFsdFwiXSwgXCJmNWNlXCIsIFwiTTY0IDBDNDcuNCAwIDMzLjUgMTIuOCAzMi4xIDI5LjNsLTE0IDE2OC40Yy02IDcyIDQyLjUgMTM1LjIgMTA5LjkgMTUwLjZWNDQ4SDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwIDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MlYzNDguNGM2Ny40LTE1LjQgMTE1LjktNzguNiAxMDkuOS0xNTAuNmwtMTQtMTY4LjRDMjg2LjUgMTIuOCAyNzIuNiAwIDI1NiAwSDY0ek04MS45IDIwMy4xTDkzLjQgNjRIMjI2LjZsMTEuNiAxMzkuMUMyNDIgMjQ4LjggMjA1LjkgMjg4IDE2MCAyODhzLTgyLTM5LjItNzguMS04NC45elwiXVxufTtcbnZhciBmYVdpbmVHbGFzc0FsdCA9IGZhV2luZUdsYXNzRW1wdHk7XG52YXIgZmFDaGVlc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlZXNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2VmXCIsIFwiTTUxMiAyNDAuMlYyNTZIMGMwLTIwIDEwLTM4LjcgMjYuNi00OS44TDI3NC45IDQwLjdjOC42LTUuNyAxOC42LTguNyAyOC45LTguN0M0MTguOCAzMiA1MTIgMTI1LjIgNTEyIDI0MC4yem0wIDQ3LjhWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyODhINTEyelwiXVxufTtcbnZhciBmYVlpbllhbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneWluLXlhbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5Nzc1XSwgXCJmNmFkXCIsIFwiTTI1NiA2NGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZDMTUwIDQ0OCA2NCAzNjIgNjQgMjU2UzE1MCA2NCAyNTYgNjR6bTAgNDQ4QTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptMzItMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTIyNCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpcIl1cbn07XG52YXIgZmFNdXNpYyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtdXNpYycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzkyNV0sIFwiZjAwMVwiLCBcIk00OTkuMSA2LjNjOC4xIDYgMTIuOSAxNS42IDEyLjkgMjUuN3Y3MlYzNjhjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwczQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42VjE0N0wxOTIgMjIzLjhWNDMyYzAgNDQuMi00MyA4MC05NiA4MHMtOTYtMzUuOC05Ni04MHM0My04MCA5Ni04MGMxMS4yIDAgMjIgMS42IDMyIDQuNlYyMDAgMTI4YzAtMTQuMSA5LjMtMjYuNiAyMi44LTMwLjdsMzIwLTk2YzkuNy0yLjkgMjAuMi0xLjEgMjguMyA1elwiXVxufTtcbnZhciBmYUNvZGVDb21taXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29kZS1jb21taXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYzODZcIiwgXCJNMzIwIDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTU2LjgtNDhDNDYyIDM2MSAzOTcuNCA0MTYgMzIwIDQxNnMtMTQyLTU1LTE1Ni44LTEyOEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxNjMuMkMxNzggMTUxIDI0Mi42IDk2IDMyMCA5NnMxNDIgNTUgMTU2LjggMTI4SDYwOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0NzYuOHpcIl1cbn07XG52YXIgZmFUZW1wZXJhdHVyZUxvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1sb3cnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3NmJcIiwgXCJNNDQ4IDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCA5NmE5NiA5NiAwIDEgMSAxOTIgMEE5NiA5NiAwIDEgMSAzMjAgOTZ6TTE0NCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMjc2LjVjMCAxNy4zLTcuMSAzMS45LTE1LjMgNDIuNUM3MC4yIDMzMi42IDY0IDM0OS41IDY0IDM2OGMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMTguNS02LjItMzUuNC0xNi43LTQ4LjljLTguMi0xMC42LTE1LjMtMjUuMi0xNS4zLTQyLjVWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0zMiAxMTJDMzIgNTAuMiA4Mi4xIDAgMTQ0IDBzMTEyIDUwLjEgMTEyIDExMlYyNzYuNWMwIC4xIC4xIC4zIC4yIC42Yy4yIC42IC44IDEuNiAxLjcgMi44YzE4LjkgMjQuNCAzMC4xIDU1IDMwLjEgODguMWMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMwIDQ0Ny41IDAgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0xOTIgMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YyNzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY1MC43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM3pcIl1cbn07XG52YXIgZmFQZXJzb25CaWtpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWJpa2luZycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY5MiwgXCJiaWtpbmdcIl0sIFwiZjg0YVwiLCBcIk00MDAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0yNy4yIDY0bC02MS44LTQ4LjhjLTE3LjMtMTMuNi00MS43LTEzLjgtNTkuMS0uM2wtODMuMSA2NC4yYy0zMC43IDIzLjgtMjguNSA3MC44IDQuMyA5MS42TDI4OCAzMDUuMVY0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhjMC0xMC43LTUuMy0yMC43LTE0LjItMjYuNkwyOTUgMjMyLjlsNjAuMy00OC41TDM5NiAyMTdjNS43IDQuNSAxMi43IDcgMjAgN2g2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0MjcuMnpNNTYgMzg0YTcyIDcyIDAgMSAxIDE0NCAwQTcyIDcyIDAgMSAxIDU2IDM4NHptMjAwIDBBMTI4IDEyOCAwIDEgMCAwIDM4NGExMjggMTI4IDAgMSAwIDI1NiAwem0xODQgMGE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6bTIwMCAwYTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6XCJdXG59O1xudmFyIGZhQmlraW5nID0gZmFQZXJzb25CaWtpbmc7XG52YXIgZmFCcm9vbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicm9vbScsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyOTUyOV0sIFwiZjUxYVwiLCBcIk01NjYuNiA1NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyLTM0LjctMzQuN2MtNC4yLTQuMi0xMC02LjYtMTYtNi42Yy0xMi41IDAtMjIuNiAxMC4xLTIyLjYgMjIuNnYyOS4xTDM2NC4zIDMyMGgyOS4xYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZsLTM0LjctMzQuNyAxOTItMTkyek0zNDEuMSAzNTMuNEwyMjIuNiAyMzQuOWMtNDIuNy0zLjctODUuMiAxMS43LTExNS44IDQyLjNsLTggOEM3Ni41IDMwNy41IDY0IDMzNy43IDY0IDM2OS4yYzAgNi44IDcuMSAxMS4yIDEzLjIgOC4ybDUxLjEtMjUuNWM1LTIuNSA5LjUgNC4xIDUuNCA3LjlMNy4zIDQ3My40QzIuNyA0NzcuNiAwIDQ4My42IDAgNDg5LjlDMCA1MDIuMSA5LjkgNTEyIDIyLjEgNTEybDE3My4zIDBjMzguOCAwIDc1LjktMTUuNCAxMDMuNC00Mi44YzMwLjYtMzAuNiA0NS45LTczLjEgNDIuMy0xMTUuOHpcIl1cbn07XG52YXIgZmFTaGllbGRIZWFydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGllbGQtaGVhcnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NzRcIiwgXCJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjJjLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yYzE2LjcgOCAzNi4xIDggNTIuOCAwQzQ1NC43IDQyMC43IDQ5NS41IDIzOS4yIDQ5NiAxNDBjLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMTQ0IDIyMS4zYzAtMzMuOCAyNy40LTYxLjMgNjEuMy02MS4zYzE2LjIgMCAzMS44IDYuNSA0My4zIDE3LjlsNy40IDcuNCA3LjQtNy40YzExLjUtMTEuNSAyNy4xLTE3LjkgNDMuMy0xNy45YzMzLjggMCA2MS4zIDI3LjQgNjEuMyA2MS4zYzAgMTYuMi02LjUgMzEuOC0xNy45IDQzLjNsLTgyLjcgODIuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTgyLjctODIuN2MtMTEuNS0xMS41LTE3LjktMjcuMS0xNy45LTQzLjN6XCJdXG59O1xudmFyIGZhR29wdXJhbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnb3B1cmFtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjY0XCIsIFwiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0djhoNDBWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY4aDQ4VjI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2OGg0MFYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djhWNjR2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJINDE2VjM1MkgzODRWMjI0SDM1MlYxMjhIMzIwdjk2aDMyVjM1MmgzMlY1MTJIMzA0VjQ2NGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHY0OEgxMjhWMzUyaDMyVjIyNGgzMlYxMjhIMTYwdjk2SDEyOFYzNTJIOTZWNTEySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJWMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMlY2NCAzMiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjU2IDI3MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NDhoNjRWMzA0YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMzItODB2MzJoNjRWMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyelwiXVxufTtcbnZhciBmYUVhcnRoT2NlYW5pYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlYXJ0aC1vY2VhbmlhJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJnbG9iZS1vY2VhbmlhXCJdLCBcImU0N2JcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwOC42IDM1Ny4zbC0zOS0xMy41Yy02LjUtMi4yLTEzLjYtMi4zLTIwLjEtLjNsLTE1LjMgNC45Yy0xOC41IDUuOS0zOC41LTIuNC00Ny41LTE5LjVsLTMuMy02LjJjLTEwLjYtMjAuMS0yLjMtNDUgMTguMi01NC43bDM1LjMtMTYuOGMyLjMtMS4xIDQuNC0yLjggNS45LTQuOGw1LjMtN2M3LjItOS42IDE4LjYtMTUuMyAzMC42LTE1LjNzMjMuNCA1LjcgMzAuNiAxNS4zbDQuNiA2LjFjMiAyLjYgNC45IDQuNSA4LjEgNS4xYzcuOCAxLjYgMTUuNy0xLjUgMjAuNC03LjlsMTAuNC0xNC4yYzItMi44IDUuMy00LjQgOC43LTQuNGM0LjQgMCA4LjQgMi43IDEwIDYuOGwxMC4xIDI1LjljMi44IDcuMiA2LjcgMTQgMTEuNSAyMC4yTDMxMSAyOTkuOGM1LjggNy40IDkgMTYuNiA5IDI2cy0zLjIgMTguNi05IDI2TDI5OSAzNjcuMmMtOC4zIDEwLjYtMjEgMTYuOC0zNC40IDE2LjhjLTguNCAwLTE2LjYtMi40LTIzLjctN2wtMjUuNC0xNi40Yy0yLjItMS40LTQuNS0yLjUtNi45LTMuNHptNjUuMi0yMTQuOEwyOTYgMTY0LjdjMTAuMSAxMC4xIDIuOSAyNy4zLTExLjMgMjcuM0gyNTQuOGMtNS42IDAtMTEuMS0xLjItMTYuMi0zLjRsLTQyLjgtMTljLTE0LjMtNi4zLTExLjktMjcuMyAzLjQtMzAuM2wzOC41LTcuN2MxMy4xLTIuNiAyNi43IDEuNSAzNi4xIDEwLjl6TTI0OCA0MzJjMC04LjggNy4yLTE2IDE2LTE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI2NGMtOC44IDAtMTYtNy4yLTE2LTE2ek00MzEuMiAyOTguOWw4IDI0YzIuOCA4LjQtMS43IDE3LjQtMTAuMSAyMC4ycy0xNy40LTEuNy0yMC4yLTEwLjFsLTgtMjRjLTIuOC04LjQgMS43LTE3LjQgMTAuMS0yMC4yczE3LjQgMS43IDIwLjIgMTAuMXptLTE5LjkgODAuNGwtMzIgMzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzItMzJjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbnZhciBmYUdsb2JlT2NlYW5pYSA9IGZhRWFydGhPY2VhbmlhO1xudmFyIGZhU3F1YXJlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXhtYXJrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTAwNjIsIFwidGltZXMtc3F1YXJlXCIsIFwieG1hcmstc3F1YXJlXCJdLCBcImYyZDNcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em03OSAxNDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNDcgNDcgNDctNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC00NyA0NyA0NyA0N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00Ny00NyA0N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Ny00Ny00Ny00N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6XCJdXG59O1xudmFyIGZhVGltZXNTcXVhcmUgPSBmYVNxdWFyZVhtYXJrO1xudmFyIGZhWG1hcmtTcXVhcmUgPSBmYVNxdWFyZVhtYXJrO1xudmFyIGZhSGFzaHRhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYXNodGFnJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjIwOThdLCBcIjIzXCIsIFwiTTE4MS4zIDMyLjRjMTcuNCAyLjkgMjkuMiAxOS40IDI2LjMgMzYuOEwxOTcuOCAxMjhoOTUuMWwxMS41LTY5LjNjMi45LTE3LjQgMTkuNC0yOS4yIDM2LjgtMjYuM3MyOS4yIDE5LjQgMjYuMyAzNi44TDM1Ny44IDEyOEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzQ3LjFMMzI1LjggMzIwSDM4NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMTUuMWwtMTEuNSA2OS4zYy0yLjkgMTcuNC0xOS40IDI5LjItMzYuOCAyNi4zcy0yOS4yLTE5LjQtMjYuMy0zNi44bDkuOC01OC43SDE1NS4xbC0xMS41IDY5LjNjLTIuOSAxNy40LTE5LjQgMjkuMi0zNi44IDI2LjNzLTI5LjItMTkuNC0yNi4zLTM2LjhMOTAuMiAzODRIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoNjguOWwyMS4zLTEyOEg2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2OC45bDExLjUtNjkuM2MyLjktMTcuNCAxOS40LTI5LjIgMzYuOC0yNi4zek0xODcuMSAxOTJMMTY1LjggMzIwaDk1LjFsMjEuMy0xMjhIMTg3LjF6XCJdXG59O1xudmFyIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1cC1yaWdodC1hbmQtZG93bi1sZWZ0LWZyb20tY2VudGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleHBhbmQtYWx0XCJdLCBcImY0MjRcIiwgXCJNMzQ0IDBINDg4YzEzLjMgMCAyNCAxMC43IDI0IDI0VjE2OGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC0zOS0zOS04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTMyLTMyYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4Ny04N0wzMjcgNDFjLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTMzM0LjMgMCAzNDQgMHpNMTY4IDUxMkgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMzQ0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmwzOSAzOSA4Ny04N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMiAzMmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODcgODcgMzkgMzljNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMnMtMTIuNSAxNC44LTIyLjIgMTQuOHpcIl1cbn07XG52YXIgZmFFeHBhbmRBbHQgPSBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXI7XG52YXIgZmFPaWxDYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnb2lsLWNhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjYxM1wiLCBcIk0zMjAgMTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMnYzMkgxNDQgOTYgNDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djY0LjhjMCAxOSAxMS4yIDM2LjIgMjguNSA0My45bDY3LjUgMzBWMzY4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQwMy4xYzE4LjQgMCAzNS44LTcuOSA0OC0yMS43TDYzMy41IDE4Ny43YzEyLjMtMTMuOS0uMy0zNS40LTE4LjQtMzEuNUw0NDggMTkybC01MC41LTI1LjJjLTguOS00LjQtMTguNy02LjgtMjguNi02LjhIMjg4VjEyOGgzMnpNOTYgMjA4djg2LjFMNDggMjcyLjhWMjA4SDk2elwiXVxufTtcbnZhciBmYVQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndCcsXG4gIGljb246IFszODQsIDUxMiwgWzExNl0sIFwiNTRcIiwgXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2SDE2MFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY5NkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTkyIDMyelwiXVxufTtcbnZhciBmYUhpcHBvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hpcHBvJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI5NDM1XSwgXCJmNmVkXCIsIFwiTTQwNyA0N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxNy4yIDE3LjJjMS45LS4xIDMuOS0uMiA1LjgtLjJoMzJjMTEuMiAwIDIxLjkgMi4zIDMxLjYgNi41TDU0MyA1NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNTY0IDEwMS45YzcuNiAxMi4yIDEyIDI2LjcgMTIgNDIuMWMwIDEwLjIgNy40IDE4LjggMTYuNyAyM2MyNy45IDEyLjUgNDcuMyA0MC41IDQ3LjMgNzNjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NHYzMmMwIDguOC03LjIgMTYtMTYgMTZINTYwYy04LjggMC0xNi03LjItMTYtMTZWMzIwSDQ4MHYxNmMwIDguOC03LjIgMTYtMTYgMTZINDMyYy04LjggMC0xNi03LjItMTYtMTZWMzE4LjRjLTExLjgtMi40LTIyLjctNy40LTMyLTE0LjRjLTEuNS0xLjEtMi45LTIuMy00LjMtMy41Yy0xNy0xNC43LTI3LjctMzYuNC0yNy43LTYwLjVjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZjMCA0NC43IDI2LjIgODMuMiA2NCAxMDEuMlYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzNzJjLTE5LjggNy43LTQxLjQgMTItNjQgMTJzLTQ0LjItNC4zLTY0LTEydjc2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYzMjkuMUw0NS45IDM2OS43Yy01LjQgMTIuMS0xOS42IDE3LjYtMzEuNyAxMi4yUy0zLjMgMzYyLjQgMi4xIDM1MC4zTDI0IDMwMC45YzUuMy0xMS45IDgtMjQuNyA4LTM3LjdDMzIgMTU1LjcgMTE3LjIgNjggMjIzLjggNjQuMWwuMi0uMWg3LjJIMjU2aDMyYzQxLjcgMCA4My40IDEyLjEgMTE3LjIgMjUuN2MxLjctMS44IDMuNS0zLjYgNS4zLTUuMkw0MDcgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45em03MyAxODVhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptODggMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek00ODAgMTQ0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG52YXIgZmFDaGFydENvbHVtbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1jb2x1bW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwZTNcIiwgXCJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDAwYzAgOC44IDcuMiAxNiAxNiAxNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0xNjAgMjI0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTI4LTY0VjMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptNjQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00ODAgOTZWMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdXG59O1xudmFyIGZhSW5maW5pdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5maW5pdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFs4NzM0LCA5ODU0XSwgXCJmNTM0XCIsIFwiTTAgMjQxLjFDMCAxNjEgNjUgOTYgMTQ1LjEgOTZjMzguNSAwIDc1LjQgMTUuMyAxMDIuNiA0Mi41TDMyMCAyMTAuN2w3Mi4yLTcyLjJDNDE5LjUgMTExLjMgNDU2LjQgOTYgNDk0LjkgOTZDNTc1IDk2IDY0MCAxNjEgNjQwIDI0MS4xdjI5LjdDNjQwIDM1MSA1NzUgNDE2IDQ5NC45IDQxNmMtMzguNSAwLTc1LjQtMTUuMy0xMDIuNi00Mi41TDMyMCAzMDEuM2wtNzIuMiA3Mi4yQzIyMC41IDQwMC43IDE4My42IDQxNiAxNDUuMSA0MTZDNjUgNDE2IDAgMzUxIDAgMjcwLjlWMjQxLjF6TTI3NC43IDI1NmwtNzIuMi03Mi4yYy0xNS4yLTE1LjItMzUuOS0yMy44LTU3LjQtMjMuOEMxMDAuMyAxNjAgNjQgMTk2LjMgNjQgMjQxLjF2MjkuN2MwIDQ0LjggMzYuMyA4MS4xIDgxLjEgODEuMWMyMS41IDAgNDIuMi04LjUgNTcuNC0yMy44TDI3NC43IDI1NnptOTAuNSAwbDcyLjIgNzIuMmMxNS4yIDE1LjIgMzUuOSAyMy44IDU3LjQgMjMuOGM0NC44IDAgODEuMS0zNi4zIDgxLjEtODEuMVYyNDEuMWMwLTQ0LjgtMzYuMy04MS4xLTgxLjEtODEuMWMtMjEuNSAwLTQyLjIgOC41LTU3LjQgMjMuOEwzNjUuMyAyNTZ6XCJdXG59O1xudmFyIGZhVmlhbENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpYWwtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTk2XCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJIOTZoNjQgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWMjY2LjhjLTIwLjIgMjguNi0zMiA2My41LTMyIDEwMS4yYzAgMjUuMiA1LjMgNDkuMSAxNC44IDcwLjhDMTg5LjUgNDYzLjcgMTYwLjYgNDgwIDEyOCA0ODBjLTUzIDAtOTYtNDMtOTYtOTZWOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNOTYgOTZ2OTZoNjRWOTZIOTZ6TTIyNCAzNjhhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjExLjMtNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMzUyIDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xudmFyIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1hcnJvdy1kb3duLXRvLWxpbmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MzhcIiwgXCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTggMzUyVjM1MmgxNnY5NkgxODR6bS02NCAwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE1Mmg4MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjY0VjI1Ni45bDI4LjYgNDcuNWM5LjEgMTUuMSAyOC44IDIwIDQzLjkgMTAuOXMyMC0yOC44IDEwLjktNDMuOWwtNTguMy05N2MtMTcuNC0yOC45LTQ4LjYtNDYuNi04Mi4zLTQ2LjZIMTc3LjFjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45TDEyMCAyNTYuOVY0NDh6TTQ2NCA2NFYzMDYuN2wtMjUuNC0yNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w4MCA4MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw4MC04MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEw1MjggMzA2LjdWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xudmFyIGZhVm9pY2VtYWlsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvaWNlbWFpbCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjg5N1wiLCBcIk0xNDQgMzIwYTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYwem0xMTkuOCAwYzE1LjMtMjIuOSAyNC4yLTUwLjQgMjQuMi04MGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFMwIDE2MC41IDAgMjQwczY0LjUgMTQ0IDE0NCAxNDRINDk2Yzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0YzAgMjkuNiA4LjkgNTcuMSAyNC4yIDgwSDI2My44ek00OTYgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbnZhciBmYUZhbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY4NjNcIiwgXCJNMjU4LjYgMGMtMS43IDAtMy40IC4xLTUuMSAuNUMxNjggMTcgMTE1LjYgMTAyLjMgMTMwLjUgMTg5LjNjMi45IDE3IDguNCAzMi45IDE1LjkgNDcuNEwzMiAyMjRIMjkuNEMxMy4yIDIyNCAwIDIzNy4yIDAgMjUzLjRjMCAxLjcgLjEgMy40IC41IDUuMUMxNyAzNDQgMTAyLjMgMzk2LjQgMTg5LjMgMzgxLjVjMTctMi45IDMyLjktOC40IDQ3LjQtMTUuOUwyMjQgNDgwdjIuNmMwIDE2LjIgMTMuMiAyOS40IDI5LjQgMjkuNGMxLjcgMCAzLjQtLjEgNS4xLS41QzM0NCA0OTUgMzk2LjQgNDA5LjcgMzgxLjUgMzIyLjdjLTIuOS0xNy04LjQtMzIuOS0xNS45LTQ3LjRMNDgwIDI4OGgyLjZjMTYuMiAwIDI5LjQtMTMuMiAyOS40LTI5LjRjMC0xLjctLjEtMy40LS41LTUuMUM0OTUgMTY4IDQwOS43IDExNS42IDMyMi43IDEzMC41Yy0xNyAyLjktMzIuOSA4LjQtNDcuNCAxNS45TDI4OCAzMlYyOS40QzI4OCAxMy4yIDI3NC44IDAgMjU4LjYgMHpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXdhbGtpbmctbHVnZ2FnZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU1NFwiLCBcIk00MzIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0zNDcuNyAyMDAuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlMNTA1IDIzMi43bC0xNS4zLTM2LjhDNDcyLjUgMTU0LjggNDMyLjMgMTI4IDM4Ny43IDEyOGMtMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0zMi45IDE0LjYtNTguMSA0Mi40LTY5LjQgNzYuNWwtMi42IDcuOGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwyLjYtNy44YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjV6bS0zMCAxMzUuMWwtMjUgNjIuNC01OS40IDU5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMzQwLjMgNDQxYzQuNi00LjYgOC4yLTEwLjEgMTAuNi0xNi4xbDE0LjUtMzYuMi00MC43LTQ0LjRjLTIuNS0yLjctNC44LTUuNi03LTguNnpNMjU2IDI3NC4xYy03LjctNC40LTE3LjQtMS44LTIxLjkgNS45bC0zMiA1NS40TDE0Ny43IDMwNGMtMTUuMy04LjgtMzQuOS0zLjYtNDMuNyAxMS43TDQwIDQyNi42Yy04LjggMTUuMy0zLjYgMzQuOSAxMS43IDQzLjdsNTUuNCAzMmMxNS4zIDguOCAzNC45IDMuNiA0My43LTExLjdsNjQtMTEwLjljMS41LTIuNiAyLjYtNS4yIDMuMy04TDI2MS45IDI5NmM0LjQtNy43IDEuOC0xNy40LTUuOS0yMS45elwiXVxufTtcbnZhciBmYVVwRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1cC1kb3duJyxcbiAgaWNvbjogWzI1NiwgNTEyLCBbODU5NywgMTEwMjEsIFwiYXJyb3dzLWFsdC12XCJdLCBcImYzMzhcIiwgXCJNMTQ1LjYgNy43QzE0MSAyLjggMTM0LjcgMCAxMjggMHMtMTMgMi44LTE3LjYgNy43bC0xMDQgMTEyYy02LjUgNy04LjIgMTcuMi00LjQgMjUuOVMxNC41IDE2MCAyNCAxNjBIODBWMzUySDI0Yy05LjUgMC0xOC4yIDUuNy0yMiAxNC40cy0yLjEgMTguOSA0LjQgMjUuOWwxMDQgMTEyYzQuNSA0LjkgMTAuOSA3LjcgMTcuNiA3LjdzMTMtMi44IDE3LjYtNy43bDEwNC0xMTJjNi41LTcgOC4yLTE3LjIgNC40LTI1LjlzLTEyLjUtMTQuNC0yMi0xNC40SDE3NlYxNjBoNTZjOS41IDAgMTguMi01LjcgMjItMTQuNHMyLjEtMTguOS00LjQtMjUuOWwtMTA0LTExMnpcIl1cbn07XG52YXIgZmFBcnJvd3NBbHRWID0gZmFVcERvd247XG52YXIgZmFDbG91ZE1vb25SYWluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb3VkLW1vb24tcmFpbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjczY1wiLCBcIk00ODEuMiAwQzQxNyAwIDM2My41IDQ2LjUgMzUzLjcgMTA3LjZjMzUuNCAxNy42IDYwLjIgNTMuMyA2Mi4xIDk1LjFjMjMuMiAxMSA0MiAyOS43IDUzLjEgNTIuN2M0IC40IDguMSAuNiAxMi4zIC42YzM0LjkgMCA2Ni43LTEzLjggODkuOS0zNi4xYzUuMS00LjkgNi40LTEyLjUgMy4yLTE4LjdzLTEwLjEtOS43LTE3LTguNmMtNC45IC44LTEwIDEuMy0xNS4yIDEuM2MtNDkgMC04OC40LTM5LjMtODguNC04Ny40YzAtMzIuNiAxOC02MS4xIDQ0LjktNzYuMWM2LjEtMy40IDkuMy0xMC41IDcuOC0xNy40cy03LjMtMTItMTQuMy0xMi42Yy0zLjYtLjMtNy4zLS41LTEwLjktLjV6TTM2Ny45IDM4My45YzQ0LjIgMCA4MC0zNS44IDgwLTgwYzAtMzkuMy0yOC40LTcyLjEtNjUuOC03OC43YzEuMi01LjYgMS45LTExLjMgMS45LTE3LjJjMC00NC4yLTM1LjgtODAtODAtODBjLTE3IDAtMzIuOCA1LjMtNDUuOCAxNC40QzI0MS4zIDExNC42IDIxMC44IDk2IDE3NiA5NmMtNTMgMC05NiA0My05NiA5NmwwIDEuM2MtNDUuNCA3LjYtODAgNDcuMS04MCA5NC42YzAgNTMgNDMgOTYgOTYgOTZIMzY3Ljl6TTg1LjQgNDIwLjFjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6XCJdXG59O1xudmFyIGZhQ2FsZW5kYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXInLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTcsIDEyODE5OF0sIFwiZjEzM1wiLCBcIk05NiAzMlY2NEg0OEMyMS41IDY0IDAgODUuNSAwIDExMnY0OEg0NDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDM1MlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY2NEgxNjBWMzJjMC0xNy43LTE0LjMtMzItMzItMzJTOTYgMTQuMyA5NiAzMnpNNDQ4IDE5MkgwVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTkyelwiXVxufTtcbnZhciBmYVRyYWlsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhaWxlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA0MVwiLCBcIk00OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwVjMzNmMwIDI2LjUgMjEuNSA0OCA0OCA0OEg2NS4xYzcuOC01NC4zIDU0LjQtOTYgMTEwLjktOTZzMTAzLjEgNDEuNyAxMTAuOSA5Nkg0ODhoOEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINTQ0VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek04MCA5NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxMzEuMmMtMTEuNCA1LjktMjIuMiAxMi45LTMyIDIxVjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTk2IDEyOGMtNS40IDAtMTAuNyAuMi0xNiAuN0wxNjAgMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMTIuN2MtNS4zLS41LTEwLjYtLjctMTYtLjd6bTgwIDE5LjJMMjU2IDExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTUyLjJjLTkuOC04LjEtMjAuNi0xNS4yLTMyLTIxek0zNjggOTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTkyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTkyYzAtOC44IDcuMi0xNiAxNi0xNnptMTEyIDE2bDAgMTkyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTkyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6TTE3NiA0ODBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMTEyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFCYWhhaSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWhhaScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaGF5a2FsXCJdLCBcImY2NjZcIiwgXCJNMjg4IDBjMTQuNSAwIDI3LjIgOS43IDMwLjkgMjMuOGwyMy45IDg5LjYgNzUuOS01My4zYzExLjktOC4zIDI3LjgtNy42IDM5IDEuN3MxNC42IDI0LjkgOC40IDM4LjFsLTM5LjMgODQgOTIuNCA4YzE0LjQgMS4yIDI2LjIgMTIgMjguOCAyNi4zcy00LjkgMjguNS0xOCAzNC42bC04NC4xIDM5LjEgNjUuNyA2NS41YzEwLjMgMTAuMiAxMi40IDI2LjEgNS4xIDM4LjdzLTIyIDE4LjctMzYgMTQuOUwzOTEgMzg2LjhsOC4yIDkyLjRjMS4zIDE0LjQtNy4zIDI3LjktMjAuOSAzMi45cy0yOC45IC4xLTM3LjItMTEuN2wtNTMuMS03Ni01My4xIDc2Yy04LjMgMTEuOS0yMy42IDE2LjctMzcuMiAxMS43cy0yMi4yLTE4LjUtMjAuOS0zMi45bDguMi05Mi40TDk1LjQgNDEwLjljLTE0IDMuOC0yOC44LTIuMy0zNi0xNC45cy01LjItMjguNCA1LjEtMzguN2w2NS43LTY1LjVMNDYgMjUyLjdjLTEzLjEtNi4xLTIwLjUtMjAuMy0xOC0zNC42czE0LjMtMjUuMSAyOC44LTI2LjNsOTIuNC04LTM5LjMtODRjLTYuMS0xMy4xLTIuNy0yOC44IDguNC0zOC4xczI3LjEtMTAgMzktMS43bDc1LjkgNTMuMyAyMy45LTg5LjZDMjYwLjggOS43IDI3My41IDAgMjg4IDB6bTAgMTU2LjJsLTQuOCAxOGMtMi43IDEwLjEtMTAuMiAxOC4yLTIwIDIxLjhzLTIwLjggMi4xLTI5LjMtMy45bC0xNS4yLTEwLjcgNy45IDE2LjhjNC40IDkuNSA0IDIwLjUtMS4zIDI5LjZzLTE0LjUgMTUtMjUgMTUuOWwtMTguNSAxLjYgMTYuOCA3LjhjOS41IDQuNCAxNi4yIDEzLjIgMTggMjMuNXMtMS41IDIwLjgtOC45IDI4LjJsLTEzLjIgMTMuMSAxNy45LTQuOGMxMC4xLTIuNyAyMC45LS4zIDI4LjkgNi40czEyLjIgMTYuOSAxMS4zIDI3LjNsLTEuNiAxOC41IDEwLjYtMTUuMmM2LTguNiAxNS44LTEzLjcgMjYuMi0xMy43czIwLjIgNS4xIDI2LjIgMTMuN2wxMC42IDE1LjItMS42LTE4LjVjLS45LTEwLjQgMy4zLTIwLjYgMTEuMy0yNy4zczE4LjgtOS4xIDI4LjktNi40bDE3LjkgNC44LTEzLjItMTMuMWMtNy40LTcuNC0xMC43LTE3LjktOC45LTI4LjJzOC41LTE5LjEgMTgtMjMuNWwxNi44LTcuOC0xOC41LTEuNmMtMTAuNC0uOS0xOS43LTYuOC0yNS0xNS45cy01LjctMjAuMS0xLjMtMjkuNmw3LjktMTYuOC0xNS4yIDEwLjdjLTguNiA2LTE5LjUgNy41LTI5LjMgMy45cy0xNy4zLTExLjctMjAtMjEuOGwtNC44LTE4elwiXVxufTtcbnZhciBmYUhheWthbCA9IGZhQmFoYWk7XG52YXIgZmFTZENhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2QtY2FyZCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjdjMlwiLCBcIk0zMjAgMEgxNDEuM0MxMjQuMyAwIDEwOCA2LjcgOTYgMTguN0wxOC43IDk2QzYuNyAxMDggMCAxMjQuMyAwIDE0MS4zVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTE2MCA4OHY0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFY4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em04MCAwdjQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0Vjg4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTgwIDB2NDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWODhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl1cbn07XG52YXIgZmFEcmFnb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHJhZ29uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MDA5XSwgXCJmNmQ1XCIsIFwiTTM1MiAxMjQuNWwtNTEuOS0xM2MtNi41LTEuNi0xMS4zLTcuMS0xMi0xMy44czIuOC0xMy4xIDguNy0xNi4xbDQwLjgtMjAuNEwyOTQuNCAyOC44Yy01LjUtNC4xLTcuOC0xMS4zLTUuNi0xNy45UzI5Ny4xIDAgMzA0IDBINDE2aDMyIDE2YzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40bDU3LjYgNzYuOGM2LjIgOC4zIDkuNiAxOC40IDkuNiAyOC44YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDUzOC41Yy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0w0ODAgMTYwSDQ0OHYyMS41YzAgMjQuOCAxMi44IDQ3LjkgMzMuOCA2MS4xbDEwNi42IDY2LjZjMzIuMSAyMC4xIDUxLjYgNTUuMiA1MS42IDkzLjFDNjQwIDQ2Mi45IDU5MC45IDUxMiA1MzAuMiA1MTJINDk2IDQzMiAzMi4zYy0zLjMgMC02LjYtLjQtOS42LTEuNEMxMy41IDUwNy44IDYgNTAxIDIuNCA0OTIuMUMxIDQ4OC43IC4yIDQ4NS4yIDAgNDgxLjRjLS4yLTMuNyAuMy03LjMgMS4zLTEwLjdjMi44LTkuMiA5LjYtMTYuNyAxOC42LTIwLjRjMy0xLjIgNi4yLTIgOS41LTIuMkw0MzMuMyA0MTJjOC4zLS43IDE0LjctNy43IDE0LjctMTYuMWMwLTQuMy0xLjctOC40LTQuNy0xMS40bC00NC40LTQ0LjRjLTMwLTMwLTQ2LjktNzAuNy00Ni45LTExMy4xVjE4MS41di01N3pNNTEyIDcyLjNjMC0uMSAwLS4yIDAtLjNzMC0uMiAwLS4zdi42em0tMS4zIDcuNEw0NjQuMyA2OC4xYy0uMiAxLjMtLjMgMi42LS4zIDMuOWMwIDEzLjMgMTAuNyAyNCAyNCAyNGMxMC42IDAgMTkuNS02LjggMjIuNy0xNi4zek0xMzAuOSAxMTYuNWMxNi4zLTE0LjUgNDAuNC0xNi4yIDU4LjUtNC4xbDEzMC42IDg3VjIyN2MwIDMyLjggOC40IDY0LjggMjQgOTNIMTEyYy02LjcgMC0xMi43LTQuMi0xNS0xMC40cy0uNS0xMy4zIDQuNi0xNy43TDE3MSAyMzIuMyAxOC40IDI1NS44Yy03IDEuMS0xMy45LTIuNi0xNi45LTlzLTEuNS0xNC4xIDMuOC0xOC44TDEzMC45IDExNi41elwiXVxufTtcbnZhciBmYVNob2VQcmludHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hvZS1wcmludHMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1NGJcIiwgXCJNNDE2IDBDMzUyLjMgMCAyNTYgMzIgMjU2IDMyVjE2MGM0OCAwIDc2IDE2IDEwNCAzMnM1NiAzMiAxMDQgMzJjNTYuNCAwIDE3Ni0xNiAxNzYtOTZTNTEyIDAgNDE2IDB6TTEyOCA5NmMwIDM1LjMgMjguNyA2NCA2NCA2NGgzMlYzMkgxOTJjLTM1LjMgMC02NCAyOC43LTY0IDY0ek0yODggNTEyYzk2IDAgMjI0LTQ4IDIyNC0xMjhzLTExOS42LTk2LTE3Ni05NmMtNDggMC03NiAxNi0xMDQgMzJzLTU2IDMyLTEwNCAzMlY0ODBzOTYuMyAzMiAxNjAgMzJ6TTAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDk2VjM1Mkg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6XCJdXG59O1xudmFyIGZhQ2lyY2xlUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtcGx1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wicGx1cy1jaXJjbGVcIl0sIFwiZjA1NVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjMyIDM0NFYyODBIMTY4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDY0VjE2OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djY0aDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI4MHY2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG52YXIgZmFQbHVzQ2lyY2xlID0gZmFDaXJjbGVQbHVzO1xudmFyIGZhRmFjZUdyaW5Ub25ndWVXaW5rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3Jpbi10b25ndWUtd2luaycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU0MCwgXCJncmluLXRvbmd1ZS13aW5rXCJdLCBcImY1OGJcIiwgXCJNMTc0LjUgNDk4LjhDNzMuMSA0NjQuNyAwIDM2OC45IDAgMjU2QzAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NmMwIDExMi45LTczLjEgMjA4LjctMTc0LjUgMjQyLjhDMzQ2LjcgNDg0IDM1MiA0NjYuNiAzNTIgNDQ4VjQwMS4xYzI0LjMtMTcuNSA0My42LTQxLjYgNTUuNC02OS42YzUtMTEuOC03LTIyLjUtMTkuMy0xOC43Yy0zOS43IDEyLjItODQuNSAxOS0xMzEuOCAxOXMtOTIuMS02LjgtMTMxLjgtMTljLTEyLjMtMy44LTI0LjMgNi45LTE5LjMgMTguN2MxMS43IDI3LjggMzAuOCA1MS43IDU0LjggNjkuMlY0NDhjMCAxOC42IDUuMyAzNiAxNC41IDUwLjh6bTIwLjctMjY1LjJjNS4zIDcuMSAxNS4zIDguNSAyMi40IDMuMnM4LjUtMTUuMyAzLjItMjIuNGMtMzAuNC00MC41LTkxLjItNDAuNS0xMjEuNiAwYy01LjMgNy4xLTMuOSAxNy4xIDMuMiAyMi40czE3LjEgMy45IDIyLjQtMy4yYzE3LjYtMjMuNSA1Mi44LTIzLjUgNzAuNCAwek0zMzYgMjcyYTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4ek0zMjAgNDAyLjZWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0VjQwMi42YzAtMTQuNyAxMS45LTI2LjYgMjYuNi0yNi42aDJjMTEuMyAwIDIxLjEgNy45IDIzLjYgMTguOWMyLjggMTIuNiAyMC44IDEyLjYgMjMuNiAwYzIuNS0xMS4xIDEyLjMtMTguOSAyMy42LTE4LjloMmMxNC43IDAgMjYuNiAxMS45IDI2LjYgMjYuNnpNMzM2IDE4NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xudmFyIGZhR3JpblRvbmd1ZVdpbmsgPSBmYUZhY2VHcmluVG9uZ3VlV2luaztcbnZhciBmYUhhbmRIb2xkaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtaG9sZGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjRiZFwiLCBcIk01NTkuNyAzOTIuMmMxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgxNiA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODggMjcyIDE5My43Yy0yOS4xIDAtNTcuMyA5LjktODAgMjhMNjguOCAzODRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDE5MiAzNTIuNWMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zem0tMzY2LjEtOC4zYS41IC41IDAgMSAxIC0uOSAuMiAuNSAuNSAwIDEgMSAuOS0uMnpcIl1cbn07XG52YXIgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1Zy1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NWRcIiwgXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ2MzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDEyLjhjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJ6TTQzMiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xudmFyIGZhTGlua1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpbmstc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImNoYWluLWJyb2tlblwiLCBcImNoYWluLXNsYXNoXCIsIFwidW5saW5rXCJdLCBcImYxMjdcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w0ODkuMyAzNTguMmw5MC41LTkwLjVjNTYuNS01Ni41IDU2LjUtMTQ4IDAtMjA0LjVjLTUwLTUwLTEyOC44LTU2LjUtMTg2LjMtMTUuNGwtMS42IDEuMWMtMTQuNCAxMC4zLTE3LjcgMzAuMy03LjQgNDQuNnMzMC4zIDE3LjcgNDQuNiA3LjRsMS42LTEuMWMzMi4xLTIyLjkgNzYtMTkuMyAxMDMuOCA4LjZjMzEuNSAzMS41IDMxLjUgODIuNSAwIDExNGwtOTYgOTYtMzEuOS0yNUM0MzAuOSAyMzkuNiA0MjAuMSAxNzUuMSAzNzcgMTMyYy01Mi4yLTUyLjMtMTM0LjUtNTYuMi0xOTEuMy0xMS43TDM4LjggNS4xek0yMzkgMTYyYzMwLjEtMTQuOSA2Ny43LTkuOSA5Mi44IDE1LjNjMjAgMjAgMjcuNSA0OC4zIDIxLjcgNzQuNUwyMzkgMTYyek0xMTYuNiAxODcuOUw2MC4yIDI0NC4zYy01Ni41IDU2LjUtNTYuNSAxNDggMCAyMDQuNWM1MCA1MCAxMjguOCA1Ni41IDE4Ni4zIDE1LjRsMS42LTEuMWMxNC40LTEwLjMgMTcuNy0zMC4zIDcuNC00NC42cy0zMC4zLTE3LjctNDQuNi03LjRsLTEuNiAxLjFjLTMyLjEgMjIuOS03NiAxOS4zLTEwMy44LTguNkM3NCAzNzIgNzQgMzIxIDEwNS41IDI4OS41bDYxLjgtNjEuOC01MC42LTM5Ljl6TTIyMC45IDI3MGMtMi4xIDM5LjggMTIuMiA4MC4xIDQyLjIgMTEwYzM4LjkgMzguOSA5NC40IDUxIDE0My42IDM2LjNMMjIwLjkgMjcwelwiXVxufTtcbnZhciBmYUNoYWluQnJva2VuID0gZmFMaW5rU2xhc2g7XG52YXIgZmFDaGFpblNsYXNoID0gZmFMaW5rU2xhc2g7XG52YXIgZmFVbmxpbmsgPSBmYUxpbmtTbGFzaDtcbnZhciBmYUNsb25lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb25lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMjRkXCIsIFwiTTI4OCA0NDhINjRWMjI0aDY0VjE2MEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDI4OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzODRIMjg4djY0em0tNjQtOTZINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDIyNGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWMjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0elwiXVxufTtcbnZhciBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi13YWxraW5nLWFycm93LWxvb3AtbGVmdCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU1MVwiLCBcIk0yMDggOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0xMjMuNyAyMDAuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlMMjgxIDIzMi43bC0xNS4zLTM2LjhDMjQ4LjUgMTU0LjggMjA4LjMgMTI4IDE2My43IDEyOGMtMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0zMi45IDE0LjYtNTguMSA0Mi40LTY5LjQgNzYuNWwtMi42IDcuOGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwyLjYtNy44YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjV6bS0zMCAxMzUuMUw2OC43IDM5OCA5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTE2LjMgNDQxYzQuNi00LjYgOC4yLTEwLjEgMTAuNi0xNi4xbDE0LjUtMzYuMi00MC43LTQ0LjRjLTIuNS0yLjctNC44LTUuNi03LTguNnptMzQ3LjcgMTE5YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMNDYxLjMgMzg0SDQ4MGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MHMtNzEuNi0xNjAtMTYwLTE2MEwzNTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZINDYxLjNsMjUuNC0yNS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsODAgODB6XCJdXG59O1xudmFyIGZhQXJyb3dVcFpBID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLXotYScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbHBoYS11cC1hbHRcIl0sIFwiZjg4MlwiLCBcIk0xODMuNiA0Mi40QzE3Ny41IDM1LjggMTY5IDMyIDE2MCAzMnMtMTcuNSAzLjgtMjMuNiAxMC40bC04OCA5NmMtMTEuOSAxMy0xMS4xIDMzLjMgMiA0NS4yczMzLjMgMTEuMSA0NS4yLTJMMTI4IDE0Ni4zVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE0Ni4zbDMyLjQgMzUuNGMxMS45IDEzIDMyLjIgMTMuOSA0NS4yIDJzMTMuOS0zMi4yIDItNDUuMmwtODgtOTZ6TTMyMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg1MC43bC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQyOS4zbDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem05NiAxOTJjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTY0IDEyOC0xNiAzMmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zaDg4LjRsNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC0xNi0zMi02NC0xMjhDNDM5LjIgMjYyLjggNDI4LjEgMjU2IDQxNiAyNTZ6TTM5NS44IDQwMEw0MTYgMzU5LjYgNDM2LjIgNDAwSDM5NS44elwiXVxufTtcbnZhciBmYVNvcnRBbHBoYVVwQWx0ID0gZmFBcnJvd1VwWkE7XG52YXIgZmFGaXJlRmxhbWVDdXJ2ZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlyZS1mbGFtZS1jdXJ2ZWQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImZpcmUtYWx0XCJdLCBcImY3ZTRcIiwgXCJNMTUzLjYgMjkuOWwxNi0yMS4zQzE3My42IDMuMiAxODAgMCAxODYuNyAwQzE5OC40IDAgMjA4IDkuNiAyMDggMjEuM1Y0My41YzAgMTMuMSA1LjQgMjUuNyAxNC45IDM0LjdMMzA3LjYgMTU5QzM1Ni40IDIwNS42IDM4NCAyNzAuMiAzODQgMzM3LjdDMzg0IDQzNCAzMDYgNTEyIDIwOS43IDUxMkgxOTJDODYgNTEyIDAgNDI2IDAgMzIwdi0zLjhjMC00OC44IDE5LjQtOTUuNiA1My45LTEzMC4xbDMuNS0zLjVjNC4yLTQuMiAxMC02LjYgMTYtNi42Qzg1LjkgMTc2IDk2IDE4Ni4xIDk2IDE5OC42VjI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0di0zLjljMC0xOC03LjItMzUuMy0xOS45LTQ4bC0zOC42LTM4LjZjLTI0LTI0LTM3LjUtNTYuNy0zNy41LTkwLjdjMC0yNy43IDktNTQuOCAyNS42LTc2Ljl6XCJdXG59O1xudmFyIGZhRmlyZUFsdCA9IGZhRmlyZUZsYW1lQ3VydmVkO1xudmFyIGZhVG9ybmFkbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b3JuYWRvJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3Nzg2XSwgXCJmNzZmXCIsIFwiTTAgMzJWNDUuNkMwIDYyLjcgMS43IDc5LjYgNSA5NkgzNTcuOGMzLjItNi45IDcuNS0xMy4zIDEzLTE4LjhsMzguNi0zOC42YzQuMi00LjIgNi42LTEwIDYuNi0xNkM0MTYgMTAuMSA0MDUuOSAwIDM5My40IDBIMzJDMTQuMyAwIDAgMTQuMyAwIDMyem0zNTIuMiA5NkgxMy42YzEyLjIgMzUuOSAzMi4zIDY4LjcgNTguOCA5Nkg0MTJsLTQ3LjItNjIuOWMtNy4zLTkuNy0xMS42LTIxLjItMTIuNi0zMy4xem0tMjI2IDEzOC4ybDExNi40IDY4LjVjOC4yIDQuOCAxNS44IDEwLjcgMjIuNSAxNy4zSDQ0NWMyLTkuOCAzLTE5LjkgMy0zMC4xYzAtMjMtNS4zLTQ1LjUtMTUuMy02NS45SDExMC4yYzUuMiAzLjYgMTAuNSA3IDE2IDEwLjJ6TTI4OCAzODRjMTAuMyAyMS40IDEzLjggNDUuNSA5LjkgNjlsLTUuOSAzNS43Yy0yIDEyLjIgNy40IDIzLjQgMTkuOCAyMy40YzUuMyAwIDEwLjQtMi4xIDE0LjItNS45bDc4LjItNzguMmMxMi44LTEyLjggMjMuMS0yNy43IDMwLjQtNDMuOUgyODh6XCJdXG59O1xudmFyIGZhRmlsZUNpcmNsZVBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgWzU4NjA2XSwgXCJlNDk0XCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0djM4LjZDMzEwLjEgMjE5LjUgMjU2IDI4Ny40IDI1NiAzNjhjMCA1OS4xIDI5LjEgMTExLjMgNzMuNyAxNDMuM2MtMy4yIC41LTYuNCAuNy05LjcgLjdINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0em0zODQgNjRIMjU2VjBMMzg0IDEyOHptNDggOTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0xNiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY0OEgzNjhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzODRoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZINDQ4VjMwNHpcIl1cbn07XG52YXIgZmFCb29rUXVyYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1xdXJhbicsXG4gIGljb246IFs0NDgsIDUxMiwgW1wicXVyYW5cIl0sIFwiZjY4N1wiLCBcIk0zNTIgMGM1MyAwIDk2IDQzIDk2IDk2VjQxNmMwIDUzLTQzIDk2LTk2IDk2SDY0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzJDMCAxNC4zIDE0LjMgMCAzMiAwSDY0IDM1MnptMCAzODRIOTZ2NjRIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyek0yNzQuMSAxNTAuMmwtOC45IDIxLjQtMjMuMSAxLjljLTUuNyAuNS04IDcuNS0zLjcgMTEuMkwyNTYgMTk5LjhsLTUuNCAyMi42Yy0xLjMgNS41IDQuNyA5LjkgOS42IDYuOUwyODAgMjE3LjJsMTkuOCAxMi4xYzQuOSAzIDEwLjktMS40IDkuNi02LjlMMzA0IDE5OS44bDE3LjYtMTUuMWM0LjMtMy43IDItMTAuOC0zLjctMTEuMmwtMjMuMS0xLjktOC45LTIxLjRjLTIuMi01LjMtOS42LTUuMy0xMS44IDB6TTk2IDE5MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGMyNS42IDAgNDkuNS03LjUgNjkuNS0yMC41YzMuMi0yLjEgNC41LTYuMiAzLjEtOS43cy01LjItNS42LTktNC44Yy02LjEgMS4yLTEyLjUgMS45LTE5IDEuOWMtNTIuNCAwLTk0LjktNDIuNS05NC45LTk0LjlzNDIuNS05NC45IDk0LjktOTQuOWM2LjUgMCAxMi44IC43IDE5IDEuOWMzLjggLjggNy41LTEuMyA5LTQuOHMuMi03LjYtMy4xLTkuN0MyNzMuNSA3MS41IDI0OS42IDY0IDIyNCA2NEMxNTMuMyA2NCA5NiAxMjEuMyA5NiAxOTJ6XCJdXG59O1xudmFyIGZhUXVyYW4gPSBmYUJvb2tRdXJhbjtcbnZhciBmYUFuY2hvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmNob3InLFxuICBpY29uOiBbNTc2LCA1MTIsIFs5ODc1XSwgXCJmMTNkXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwdi02LjFsNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTYtNTZjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC01NiA1NmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDctN1YzNTJjMCA1My00MyA5Ni05NiA5NkgzMjBWMjQwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM0MS4xelwiXVxufTtcbnZhciBmYUJvcmRlckFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3JkZXItYWxsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmODRjXCIsIFwiTTM4NCA5NlYyMjRIMjU2Vjk2SDM4NHptMCAxOTJWNDE2SDI1NlYyODhIMzg0ek0xOTIgMjI0SDY0Vjk2SDE5MlYyMjR6TTY0IDI4OEgxOTJWNDE2SDY0VjI4OHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0elwiXVxufTtcbnZhciBmYUZhY2VBbmdyeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWFuZ3J5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ0LCBcImFuZ3J5XCJdLCBcImY1NTZcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0zMzguNyAzOTUuOWM2LjYtNS45IDcuMS0xNiAxLjItMjIuNkMzMjMuOCAzNTUuNCAyOTUuNyAzMzYgMjU2IDMzNnMtNjcuOCAxOS40LTgzLjkgMzcuM2MtNS45IDYuNi01LjQgMTYuNyAxLjIgMjIuNnMxNi43IDUuNCAyMi42LTEuMmMxMS43LTEzIDMxLjYtMjYuNyA2MC4xLTI2LjdzNDguNCAxMy43IDYwLjEgMjYuN2M1LjkgNi42IDE2IDcuMSAyMi42IDEuMnpNMTc2LjQgMjcyYzE3LjcgMCAzMi0xNC4zIDMyLTMyYzAtMS41LS4xLTMtLjMtNC40bDEwLjkgMy42YzguNCAyLjggMTcuNC0xLjcgMjAuMi0xMC4xcy0xLjctMTcuNC0xMC4xLTIwLjJsLTk2LTMyYy04LjQtMi44LTE3LjQgMS43LTIwLjIgMTAuMXMxLjcgMTcuNCAxMC4xIDIwLjJsMzAuNyAxMC4yYy01LjggNS44LTkuMyAxMy44LTkuMyAyMi42YzAgMTcuNyAxNC4zIDMyIDMyIDMyem0xOTItMzJjMC04LjktMy42LTE3LTkuNS0yMi44bDMwLjItMTAuMWM4LjQtMi44IDEyLjktMTEuOSAxMC4xLTIwLjJzLTExLjktMTIuOS0yMC4yLTEwLjFsLTk2IDMyYy04LjQgMi44LTEyLjkgMTEuOS0xMC4xIDIwLjJzMTEuOSAxMi45IDIwLjIgMTAuMWwxMS43LTMuOWMtLjIgMS41LS4zIDMuMS0uMyA0LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpcIl1cbn07XG52YXIgZmFBbmdyeSA9IGZhRmFjZUFuZ3J5O1xudmFyIGZhQ29va2llQml0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb29raWUtYml0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjU2NFwiLCBcIk0yNTcuNSAyNy42Yy0uOC01LjQtNC45LTkuOC0xMC4zLTEwLjZ2MGMtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45djBjLS45LTUuMy01LjMtOS4zLTEwLjYtMTAuMWMtNTEuNS04LjItOTIuOC00Ny4xLTEwNC41LTk3LjRjLTEuOC03LjYtOC0xMy40LTE1LjctMTQuNmMtNTQuNi04LjctOTcuNy01Mi0xMDYuMi0xMDYuOHpNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFBcnJvd1RyZW5kRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy10cmVuZC1kb3duJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDk3XCIsIFwiTTM4NCAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY4Mi43TDM0Mi42IDEzNy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMjQyLjcgNTQuNiAxMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMEwzMjAgMjA1LjMgNDY2LjcgMzUySDM4NHpcIl1cbn07XG52YXIgZmFSc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnNzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJmZWVkXCJdLCBcImYwOWVcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmMyMjkuOCAwIDQxNiAxODYuMiA0MTYgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyQzM4NCAyNTMuNiAyMjYuNCA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0wIDQxNmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSAwIDQxNnpNMzIgMTYwYzE1OS4xIDAgMjg4IDEyOC45IDI4OCAyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0xMjMuNy0xMDAuMy0yMjQtMjI0LTIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFGZWVkID0gZmFSc3M7XG52YXIgZmFEcmF3UG9seWdvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkcmF3LXBvbHlnb24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1ZWVcIiwgXCJNOTYgMTUxLjRWMzYwLjZjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40SDMyOC42YzAtLjEgLjEtLjIgLjEtLjNsLTQuNS03LjktMzItNTYgMCAwYy0xLjQgLjEtMi44IC4xLTQuMiAuMWMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxLjQgMCAyLjggMCA0LjIgLjFsMCAwIDMyLTU2IDQuNS03LjktLjEtLjNIMTE5LjRjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNHpNMzg0LjMgMzUyYzM1LjIgLjIgNjMuNyAyOC43IDYzLjcgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTIzLjcgMC00NC40LTEyLjktNTUuNC0zMkgxMTkuNGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjE1MS40QzEyLjkgMTQwLjQgMCAxMTkuNyAwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMkgzMjguNmMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMzUuMy0yOC41IDYzLjgtNjMuNyA2NGwtNC41IDcuOS0zMiA1Ni0yLjMgNGM0LjIgOC41IDYuNSAxOCA2LjUgMjguMXMtMi4zIDE5LjYtNi41IDI4LjFsMi4zIDQgMzIgNTYgNC41IDcuOXpcIl1cbn07XG52YXIgZmFTY2FsZUJhbGFuY2VkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjYWxlLWJhbGFuY2VkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTg3OCwgXCJiYWxhbmNlLXNjYWxlXCJdLCBcImYyNGVcIiwgXCJNMzg0IDMySDUxMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzOTguNGMtNS4yIDI1LjgtMjIuOSA0Ny4xLTQ2LjQgNTcuM1Y0NDhINTEyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMCAxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjg4VjE1My4zYy0yMy41LTEwLjMtNDEuMi0zMS42LTQ2LjQtNTcuM0gxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjU2YzE0LjYtMTkuNCAzNy44LTMyIDY0LTMyczQ5LjQgMTIuNiA2NCAzMnptNTUuNiAyODhINTg0LjRMNTEyIDE5NS44IDQzOS42IDMyMHpNNTEyIDQxNmMtNjIuOSAwLTExNS4yLTM0LTEyNi03OC45Yy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xQzYyNy4yIDM4MiA1NzQuOSA0MTYgNTEyIDQxNnpNMTI2LjggMTk1LjhMNTQuNCAzMjBIMTk5LjNMMTI2LjggMTk1Ljh6TS45IDMzNy4xYy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xQzI0MiAzODIgMTg5LjcgNDE2IDEyNi44IDQxNlMxMS43IDM4MiAuOSAzMzcuMXpcIl1cbn07XG52YXIgZmFCYWxhbmNlU2NhbGUgPSBmYVNjYWxlQmFsYW5jZWQ7XG52YXIgZmFHYXVnZVNpbXBsZUhpZ2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2F1Z2Utc2ltcGxlLWhpZ2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTY2OCwgXCJ0YWNob21ldGVyXCIsIFwidGFjaG9tZXRlci1mYXN0XCJdLCBcImY2MmFcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0zMjAgOTZjMC0xNS45LTUuOC0zMC40LTE1LjMtNDEuNmw3Ni42LTE0Ny40YzYuMS0xMS44IDEuNS0yNi4zLTEwLjItMzIuNHMtMjYuMi0xLjUtMzIuNCAxMC4yTDI2Mi4xIDI4OC4zYy0yLS4yLTQtLjMtNi4xLS4zYy0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6XCJdXG59O1xudmFyIGZhVGFjaG9tZXRlciA9IGZhR2F1Z2VTaW1wbGVIaWdoO1xudmFyIGZhVGFjaG9tZXRlckZhc3QgPSBmYUdhdWdlU2ltcGxlSGlnaDtcbnZhciBmYVNob3dlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaG93ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MDNdLCBcImYyY2NcIiwgXCJNNjQgMTMxLjlDNjQgMTEyLjEgODAuMSA5NiA5OS45IDk2YzkuNSAwIDE4LjYgMy44IDI1LjQgMTAuNWwxNi4yIDE2LjJjLTIxIDM4LjktMTcuNCA4Ny41IDEwLjkgMTIzTDE1MSAyNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwzNDUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTEuMyAxLjNjLTM1LjUtMjguMy04NC4yLTMxLjktMTIzLTEwLjlMMTcwLjUgNjEuM0MxNTEuOCA0Mi41IDEyNi40IDMyIDk5LjkgMzJDNDQuNyAzMiAwIDc2LjcgMCAxMzEuOVY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxMzEuOXpNMjU2IDM1MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC0xMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMi0zMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xudmFyIGZhRGVza3RvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkZXNrdG9wJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NDIxLCA2MTcwNCwgXCJkZXNrdG9wLWFsdFwiXSwgXCJmMzkwXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NEgyNDBsLTEwLjcgMzJIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDYuN0wzMzYgNDE2SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNNTEyIDY0VjI4OEg2NFY2NEg1MTJ6XCJdXG59O1xudmFyIGZhRGVza3RvcEFsdCA9IGZhRGVza3RvcDtcbnZhciBmYU0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEwOV0sIFwiNGRcIiwgXCJNMjIuNyAzMy40YzEzLjUtNC4xIDI4LjEgMS4xIDM1LjkgMTIuOUwyMjQgMjk0LjMgMzg5LjQgNDYuMmM3LjgtMTEuNyAyMi40LTE3IDM1LjktMTIuOVM0NDggNDkuOSA0NDggNjRWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2OS43TDI1MC42IDM2OS44Yy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJzLTIwLjctNS4zLTI2LjYtMTQuMkw2NCAxNjkuN1Y0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjRDMCA0OS45IDkuMiAzNy41IDIyLjcgMzMuNHpcIl1cbn07XG52YXIgZmFUYWJsZUxpc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGUtbGlzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGgtbGlzdFwiXSwgXCJmMDBiXCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6bTY0IDB2NjRoNjRWOTZINjR6bTM4NCAwSDE5MnY2NEg0NDhWOTZ6TTY0IDIyNHY2NGg2NFYyMjRINjR6bTM4NCAwSDE5MnY2NEg0NDhWMjI0ek02NCAzNTJ2NjRoNjRWMzUySDY0em0zODQgMEgxOTJ2NjRINDQ4VjM1MnpcIl1cbn07XG52YXIgZmFUaExpc3QgPSBmYVRhYmxlTGlzdDtcbnZhciBmYUNvbW1lbnRTbXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudC1zbXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNtc1wiXSwgXCJmN2NkXCIsIFwiTTI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMlMwIDEyNS4xIDAgMjQwYzAgNDUuMSAxNy43IDg2LjggNDcuNyAxMjAuOWMtMS45IDI0LjUtMTEuNCA0Ni4zLTIxLjQgNjIuOWMtNS41IDkuMi0xMS4xIDE2LjYtMTUuMiAyMS42Yy0yLjEgMi41LTMuNyA0LjQtNC45IDUuN2MtLjYgLjYtMSAxLjEtMS4zIDEuNGwtLjMgLjMgMCAwIDAgMCAwIDAgMCAwYy00LjYgNC42LTUuOSAxMS40LTMuNCAxNy40YzIuNSA2IDguMyA5LjkgMTQuOCA5LjljMjguNyAwIDU3LjYtOC45IDgxLjYtMTkuM2MyMi45LTEwIDQyLjQtMjEuOSA1NC4zLTMwLjZjMzEuOCAxMS41IDY3IDE3LjkgMTA0LjEgMTcuOXpNOTYgMjEyLjhjMC0yMC4zIDE2LjUtMzYuOCAzNi44LTM2LjhIMTUyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDEzMi44Yy0yLjcgMC00LjggMi4yLTQuOCA0LjhjMCAxLjYgLjggMy4xIDIuMiA0bDI5LjQgMTkuNmMxMC4zIDYuOCAxNi40IDE4LjMgMTYuNCAzMC43YzAgMjAuMy0xNi41IDM2LjgtMzYuOCAzNi44SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgyNy4yYzIuNyAwIDQuOC0yLjIgNC44LTQuOGMwLTEuNi0uOC0zLjEtMi4yLTRsLTI5LjQtMTkuNkMxMDIuMiAyMzYuNyA5NiAyMjUuMiA5NiAyMTIuOHpNMzcyLjggMTc2SDM5MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNzIuOGMtMi43IDAtNC44IDIuMi00LjggNC44YzAgMS42IC44IDMuMSAyLjIgNGwyOS40IDE5LjZjMTAuMiA2LjggMTYuNCAxOC4zIDE2LjQgMzAuN2MwIDIwLjMtMTYuNSAzNi44LTM2LjggMzYuOEgzNTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoMjcuMmMyLjcgMCA0LjgtMi4yIDQuOC00LjhjMC0xLjYtLjgtMy4xLTIuMi00bC0yOS40LTE5LjZjLTEwLjItNi44LTE2LjQtMTguMy0xNi40LTMwLjdjMC0yMC4zIDE2LjUtMzYuOCAzNi44LTM2Ljh6bS0xNTIgNi40TDI1NiAyMjkuM2wzNS4yLTQ2LjljNC4xLTUuNSAxMS4zLTcuOCAxNy45LTUuNnMxMC45IDguMyAxMC45IDE1LjJ2OTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjQwbC0xOS4yIDI1LjZjLTMgNC03LjggNi40LTEyLjggNi40cy05LjgtMi40LTEyLjgtNi40TDIyNCAyNDB2NDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMTkyYzAtNi45IDQuNC0xMyAxMC45LTE1LjJzMTMuNyAuMSAxNy45IDUuNnpcIl1cbn07XG52YXIgZmFTbXMgPSBmYUNvbW1lbnRTbXM7XG52YXIgZmFCb29rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyMTJdLCBcImYwMmRcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NlY0MTZjMCA1MyA0MyA5NiA5NiA5NkgzODRoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDM4NCA5NnptMCAzODRIMzUydjY0SDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0zMi0yNDBjMC04LjggNy4yLTE2IDE2LTE2SDMzNmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxNDRjLTguOCAwLTE2LTcuMi0xNi0xNnptMTYgNDhIMzM2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFVc2VyUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLXBsdXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYyMzRcIiwgXCJNOTYgMTI4YTEyOCAxMjggMCAxIDEgMjU2IDBBMTI4IDEyOCAwIDEgMSA5NiAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNTA0IDMxMlYyNDhINDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDY0VjEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djY0aDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU1MnY2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG52YXIgZmFDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVjaycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEwMDAzLCAxMDAwNF0sIFwiZjAwY1wiLCBcIk00MzguNiAxMDUuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMjU2IDI1NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTYwIDMzOC43IDM5My40IDEwNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwelwiXVxufTtcbnZhciBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhdHRlcnktdGhyZWUtcXVhcnRlcnMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImJhdHRlcnktNFwiXSwgXCJmMjQxXCIsIFwiTTQ2NCAxNjBjOC44IDAgMTYgNy4yIDE2IDE2VjMzNmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2SDQ2NHpNODAgOTZDMzUuOCA5NiAwIDEzMS44IDAgMTc2VjMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MEg0NjRjNDQuMiAwIDgwLTM1LjggODAtODBWMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMlYxNzZjMC00NC4yLTM1LjgtODAtODAtODBIODB6bTI3MiA5Nkg5NlYzMjBIMzUyVjE5MnpcIl1cbn07XG52YXIgZmFCYXR0ZXJ5NCA9IGZhQmF0dGVyeVRocmVlUXVhcnRlcnM7XG52YXIgZmFIb3VzZUNpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWNpcmNsZS1jaGVjaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUwOVwiLCBcIk0zMjAuNyAzNTJjOC4xLTg5LjcgODMuNS0xNjAgMTc1LjMtMTYwYzguOSAwIDE3LjYgLjcgMjYuMSAxLjlMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFoMzJ2NjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOFY0NzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBoMTZjMS4yIDAgMi40LS4xIDMuNi0uMmMxLjUgLjEgMyAuMiA0LjUgLjJIMTYwaDI0YzIyLjEgMCA0MC0xNy45IDQwLTQwVjQ0OCAzODRjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRsLjcgMHpNNjQwIDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl1cbn07XG52YXIgZmFBbmdsZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtbGVmdCcsXG4gIGljb246IFszMjAsIDUxMiwgWzgyNDldLCBcImYxMDRcIiwgXCJNNDEuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI1NiAyNDYuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHpcIl1cbn07XG52YXIgZmFEaWFncmFtU3VjY2Vzc29yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYWdyYW0tc3VjY2Vzc29yJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNDdhXCIsIFwiTTUxMiA0MTZsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjR6TTY0IDE2MGwwLTY0IDE0NCAwIDE2IDAgMCA2NEw2NCAxNjB6bTIyNCAwbDAtNjQgODAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNi0zOC4xIDBjLTIxLjQgMC0zMi4xIDI1LjktMTcgNDFMMzk5IDIzOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMEw1MDMgMTY5YzE1LjEtMTUuMSA0LjQtNDEtMTctNDFMNDQ4IDEyOGwwLTE2YzAtNDQuMi0zNS44LTgwLTgwLTgwTDIyNCAzMmwtMTYgMEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjR6XCJdXG59O1xudmFyIGZhVHJ1Y2tBcnJvd1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWFycm93LXJpZ2h0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNThiXCIsIFwiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwSDM2OGMyNi41IDAgNDggMjEuNSA0OCA0OFY5Nmg1MC43YzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDU4OS4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zVjI1NnYzMiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg1NzZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZIMjU2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpNNDE2IDI1Nkg1NDRWMjM3LjNMNDY2LjcgMTYwSDQxNnY5NnpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTM2OC00OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0yNTcgOTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzkgMzlIOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMjYyLjFsLTM5IDM5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMMjU3IDk1elwiXVxufTtcbnZhciBmYUFycm93c1NwbGl0VXBBbmRMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy1zcGxpdC11cC1hbmQtbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRiY1wiLCBcIk0yNDYuNiAxNTAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzUyIDEwOS4zVjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MTZjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDEwOS4zbDQxLjQgNDEuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMjU2SDIyNGMyMy4zIDAgNDUuMiA2LjIgNjQgMTcuMVYxMDkuM2wtNDEuNCA0MS40elwiXVxufTtcbnZhciBmYUhhbmRGaXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtZmlzdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzk5OTQsIFwiZmlzdC1yYWlzZWRcIl0sIFwiZjZkZVwiLCBcIk0xOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlYxNDRIMTYwVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjgwSDY0VjY0em0xOTIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjY0em05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjEyOHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjZjMTMuMiAwIDI1LjQtNCAzNS42LTEwLjhjOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOGMxMS43IDAgMjIuNi0zLjEgMzItOC42VjI1NmMwIDUyLjMtMjUuMSA5OC44LTY0IDEyOHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwMS42Yy0xNy4zLTcuOS0zMy4yLTE4LjgtNDYuOS0zMi41TDY5LjUgMzU3LjVDNDUuNSAzMzMuNSAzMiAzMDAuOSAzMiAyNjdWMjQwYzAtMzUuMyAyOC43LTY0IDY0LTY0aDg4YzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwSDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg1NmMzOS44IDAgNzItMzIuMiA3Mi03MnpcIl1cbn07XG52YXIgZmFGaXN0UmFpc2VkID0gZmFIYW5kRmlzdDtcbnZhciBmYUNsb3VkTW9vbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1tb29uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNmMzXCIsIFwiTTQ5NS44IDBjNS41IDAgMTAuOSAuMiAxNi4zIC43YzcgLjYgMTIuOCA1LjcgMTQuMyAxMi41cy0xLjYgMTMuOS03LjcgMTcuM2MtNDQuNCAyNS4yLTc0LjQgNzMtNzQuNCAxMjcuOGMwIDgxIDY1LjUgMTQ2LjYgMTQ2LjIgMTQ2LjZjOC42IDAgMTctLjcgMjUuMS0yLjFjNi45LTEuMiAxMy44IDIuMiAxNyA4LjVzMS45IDEzLjgtMy4xIDE4LjdjLTM0LjUgMzMuNi04MS43IDU0LjQtMTMzLjYgNTQuNGMtOS4zIDAtMTguNC0uNy0yNy40LTEuOWMtMTEuMi0yMi42LTI5LjgtNDAuOS01Mi42LTUxLjdjLTIuNy01OC41LTUwLjMtMTA1LjMtMTA5LjItMTA2LjdjLTEuNy0xMC40LTIuNi0yMS0yLjYtMzEuOEMzMDQgODYuMSAzODkuOCAwIDQ5NS44IDB6TTQ0Ny45IDQzMS45YzAgNDQuMi0zNS44IDgwLTgwIDgwSDk2Yy01MyAwLTk2LTQzLTk2LTk2YzAtNDcuNiAzNC42LTg3IDgwLTk0LjZsMC0xLjNjMC01MyA0My05NiA5Ni05NmMzNC45IDAgNjUuNCAxOC42IDgyLjIgNDYuNGMxMy05LjEgMjguOC0xNC40IDQ1LjgtMTQuNGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDUuOS0uNiAxMS43LTEuOSAxNy4yYzM3LjQgNi43IDY1LjggMzkuNCA2NS44IDc4Ljd6XCJdXG59O1xudmFyIGZhQnJpZWZjYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWVmY2FzZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODE4OF0sIFwiZjBiMVwiLCBcIk0xODQgNDhIMzI4YzQuNCAwIDggMy42IDggOFY5NkgxNzZWNTZjMC00LjQgMy42LTggOC04em0tNTYgOFY5Nkg2NEMyOC43IDk2IDAgMTI0LjcgMCAxNjB2OTZIMTkyIDMyMCA1MTJWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDM4NFY1NmMwLTMwLjktMjUuMS01Ni01Ni01NkgxODRjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek01MTIgMjg4SDMyMHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OEgwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjg4elwiXVxufTtcbnZhciBmYVBlcnNvbkZhbGxpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWZhbGxpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NDZcIiwgXCJNMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5LjhjMCA1NC42LTI3LjkgMTA0LjYtNzIuNSAxMzMuNmwuMiAuM0wzMDQuNSAyNTZsODcuNSAwYzE1LjEgMCAyOS4zIDcuMSAzOC40IDE5LjJsNDMuMiA1Ny42YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOHMtMzQuMiA3LjctNDQuOC02LjRMMzg0IDMyMGwtOTYgMGgtMS40bDkyLjMgMTQyLjZjOS42IDE0LjggNS40IDM0LjYtOS41IDQ0LjNzLTM0LjYgNS40LTQ0LjMtOS41TDE2NC41IDI0OS4yYy0yLjkgOS4yLTQuNSAxOS00LjUgMjlsMCA3My44YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI3OC4yYzAtNjUuMSAzOS42LTEyMy43IDEwMC4xLTE0Ny45QzIzMi4zIDExNS44IDI1NiA4MC44IDI1NiA0MS44bDAtOS44YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMTIgMzJhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbnZhciBmYUltYWdlUG9ydHJhaXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW1hZ2UtcG9ydHJhaXQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcInBvcnRyYWl0XCJdLCBcImYzZTBcIiwgXCJNMzg0IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0ek0xMjggMTkyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNODAgMzU2LjZjMC0zNy45IDMwLjctNjguNiA2OC42LTY4LjZoODYuOWMzNy45IDAgNjguNiAzMC43IDY4LjYgNjguNmMwIDE1LjEtMTIuMyAyNy40LTI3LjQgMjcuNEgxMDcuNEM5Mi4zIDM4NCA4MCAzNzEuNyA4MCAzNTYuNnpcIl1cbn07XG52YXIgZmFQb3J0cmFpdCA9IGZhSW1hZ2VQb3J0cmFpdDtcbnZhciBmYVVzZXJUYWcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci10YWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1MDdcIiwgXCJNMjI0IDI1NkExMjggMTI4IDAgMSAwIDIyNCAwYTEyOCAxMjggMCAxIDAgMCAyNTZ6bS00NS43IDQ4Qzc5LjggMzA0IDAgMzgzLjggMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDQxOC4zYzEwIDAgMTguOC00LjkgMjQuMi0xMi41bC05OS4yLTk5LjJjLTE0LjktMTQuOS0yMy4zLTM1LjEtMjMuMy01Ni4xdi0zM2MtMTUuOS00LjctMzIuOC03LjItNTAuMy03LjJIMTc4LjN6TTM4NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjgyLjdjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMNDc4LjEgNDkxLjNjMTguNyAxOC43IDQ5LjEgMTguNyA2Ny45IDBsNzMuNC03My40YzE4LjctMTguNyAxOC43LTQ5LjEgMC02Ny45TDUxMiAyNDIuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0gzODR6bTI0IDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6XCJdXG59O1xudmFyIGZhUnVnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3J1ZycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2OVwiLCBcIk0yNCA2NEg1NiA4MFY4OHY4OCA4MCA4MCA4OCAyNEg1NiAyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjM2MEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjI4MEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjIwMEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjExMkgyNEMxMC43IDExMiAwIDEwMS4zIDAgODhTMTAuNyA2NCAyNCA2NHptODggMEg1MjhWNDQ4SDExMlY2NHpNNjQwIDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0aC04djQwaDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRoLTh2MzJoOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGgtOHYzMmg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0aC04djQwaDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINTg0IDU2MFY0MjQgMzM2IDI1NiAxNzYgODggNjRoMjQgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjR6XCJdXG59O1xudmFyIGZhRWFydGhFdXJvcGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWFydGgtZXVyb3BlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJnbG9iZS1ldXJvcGVcIl0sIFwiZjdhMlwiLCBcIk0yNjYuMyA0OC4zTDIzMi41IDczLjZjLTUuNCA0LTguNSAxMC40LTguNSAxNy4xdjkuMWMwIDYuOCA1LjUgMTIuMyAxMi4zIDEyLjNjMi40IDAgNC44LS43IDYuOC0yLjFsNDEuOC0yNy45YzItMS4zIDQuNC0yLjEgNi44LTIuMWgxYzYuMiAwIDExLjMgNS4xIDExLjMgMTEuM2MwIDMtMS4yIDUuOS0zLjMgOGwtMTkuOSAxOS45Yy01LjggNS44LTEyLjkgMTAuMi0yMC43IDEyLjhsLTI2LjUgOC44Yy01LjggMS45LTkuNiA3LjMtOS42IDEzLjRjMCAzLjctMS41IDcuMy00LjEgMTBsLTE3LjkgMTcuOWMtNi40IDYuNC05LjkgMTUtOS45IDI0djQuM2MwIDE2LjQgMTMuNiAyOS43IDI5LjkgMjkuN2MxMSAwIDIxLjItNi4yIDI2LjEtMTZsNC04LjFjMi40LTQuOCA3LjQtNy45IDEyLjgtNy45YzQuNSAwIDguNyAyLjEgMTEuNCA1LjdsMTYuMyAyMS43YzIuMSAyLjkgNS41IDQuNSA5LjEgNC41YzguNCAwIDEzLjktOC45IDEwLjEtMTYuNGwtMS4xLTIuM2MtMy41LTcgMC0xNS41IDcuNS0xOGwyMS4yLTcuMWM3LjYtMi41IDEyLjctOS42IDEyLjctMTcuNmMwLTEwLjMgOC4zLTE4LjYgMTguNi0xOC42SDQwMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNzkuM2MtNy4yIDAtMTQuMiAyLjktMTkuMyA4bC00LjcgNC43Yy0yLjEgMi4xLTMuMyA1LTMuMyA4YzAgNi4yIDUuMSAxMS4zIDExLjMgMTEuM2gxMS4zYzYgMCAxMS44IDIuNCAxNiA2LjZsNi41IDYuNWMxLjggMS44IDIuOCA0LjMgMi44IDYuOHMtMSA1LTIuOCA2LjhsLTcuNSA3LjVDMzg2IDI2MiAzODQgMjY2LjkgMzg0IDI3MnMyIDEwIDUuNyAxMy43TDQwOCAzMDRjMTAuMiAxMC4yIDI0LjEgMTYgMzguNiAxNkg0NTRjNi41LTIwLjIgMTAtNDEuNyAxMC02NGMwLTExMS40LTg3LjYtMjAyLjQtMTk3LjctMjA3Ljd6bTE3MiAzMDcuOWMtMy43LTIuNi04LjItNC4xLTEzLTQuMWMtNiAwLTExLjgtMi40LTE2LTYuNkwzOTYgMzMyYy03LjctNy43LTE4LTEyLTI4LjktMTJjLTkuNyAwLTE5LjItMy41LTI2LjYtOS44TDMxNCAyODcuNGMtMTEuNi05LjktMjYuNC0xNS40LTQxLjctMTUuNEgyNTEuNGMtMTIuNiAwLTI1IDMuNy0zNS41IDEwLjdMMTg4LjUgMzAxYy0xNy44IDExLjktMjguNSAzMS45LTI4LjUgNTMuM3YzLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsMTYgMTZjOC41IDguNSAyMCAxMy4zIDMyIDEzLjNIMjQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0YzAgMi41IC40IDUgMS4xIDcuM2M3MS4zLTUuOCAxMzIuNS00Ny42IDE2NS4yLTEwNy4yek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6TTE4Ny4zIDEwMC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMzIgMzJjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzMi0zMmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG52YXIgZmFHbG9iZUV1cm9wZSA9IGZhRWFydGhFdXJvcGU7XG52YXIgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcnQtZmxhdGJlZC1zdWl0Y2FzZScsXG4gIGljb246IFs2NDAsIDUxMiwgW1wibHVnZ2FnZS1jYXJ0XCJdLCBcImY1OWRcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBINDhjNDQuMiAwIDgwIDM1LjggODAgODBWMzY4YzAgOC44IDcuMiAxNiAxNiAxNkg2MDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTQxLjNjMS44IDUgMi43IDEwLjQgMi43IDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNS42IDEtMTEgMi43LTE2SDI1My4zYzEuOCA1IDIuNyAxMC40IDIuNyAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTUuNiAxLTExIDIuNy0xNkgxNDRjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjgwYzAtOC44LTcuMi0xNi0xNi0xNkgzMkMxNC4zIDY0IDAgNDkuNyAwIDMyek00MzIgOTZWNTZjMC00LjQtMy42LTgtOC04SDM0NGMtNC40IDAtOCAzLjYtOCA4Vjk2aDk2ek0yODggOTZWNTZjMC0zMC45IDI1LjEtNTYgNTYtNTZoODBjMzAuOSAwIDU2IDI1LjEgNTYgNTZWOTYgMzIwSDI4OFY5NnpNNTEyIDMyMFY5NmgxNmMyNi41IDAgNDggMjEuNSA0OCA0OFYyNzJjMCAyNi41LTIxLjUgNDgtNDggNDhINTEyek0yNDAgOTZoMTZWMzIwSDI0MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbnZhciBmYUx1Z2dhZ2VDYXJ0ID0gZmFDYXJ0RmxhdGJlZFN1aXRjYXNlO1xudmFyIGZhUmVjdGFuZ2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVjdGFuZ2xlLXhtYXJrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjIxNjQsIFwicmVjdGFuZ2xlLXRpbWVzXCIsIFwidGltZXMtcmVjdGFuZ2xlXCIsIFwid2luZG93LWNsb3NlXCJdLCBcImY0MTBcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0xNzUgMTc1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDQ3IDQ3IDQ3LTQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNDcgNDcgNDcgNDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDctNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDctNDctNDctNDdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45elwiXVxufTtcbnZhciBmYVJlY3RhbmdsZVRpbWVzID0gZmFSZWN0YW5nbGVYbWFyaztcbnZhciBmYVRpbWVzUmVjdGFuZ2xlID0gZmFSZWN0YW5nbGVYbWFyaztcbnZhciBmYVdpbmRvd0Nsb3NlID0gZmFSZWN0YW5nbGVYbWFyaztcbnZhciBmYUJhaHRTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhaHQtc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTBhY1wiLCBcIk0xNDQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNjRIMzcuNkMxNi44IDY0IDAgODAuOCAwIDEwMS42VjIyNHY0MS43VjI4OCA0MDYuM2MwIDIzIDE4LjcgNDEuNyA0MS43IDQxLjdIMTEydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ4aDMyYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyYzAtNDAuMS0yMS4xLTc1LjMtNTIuNy05NS4xQzI4MC4zIDIyMi42IDI4OCAyMDAuMiAyODggMTc2YzAtNjEuOS01MC4xLTExMi0xMTItMTEyVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xMTIgMTI4djk2SDY0VjEyOGg0OHptNjQgOTZWMTI4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4em0tNjQgNjR2OTZINjRWMjg4aDQ4em02NCA5NlYyODhoMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhIMTc2elwiXVxufTtcbnZhciBmYUJvb2tPcGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stb3BlbicsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODIxNCwgMTI4MzY2XSwgXCJmNTE4XCIsIFwiTTI0OS42IDQ3MS41YzEwLjggMy44IDIyLjQtNC4xIDIyLjQtMTUuNVY3OC42YzAtNC4yLTEuNi04LjQtNS0xMUMyNDcuNCA1MiAyMDIuNCAzMiAxNDQgMzJDOTMuNSAzMiA0Ni4zIDQ1LjMgMTguMSA1Ni4xQzYuOCA2MC41IDAgNzEuNyAwIDgzLjhWNDU0LjFjMCAxMS45IDEyLjggMjAuMiAyNC4xIDE2LjVDNTUuNiA0NjAuMSAxMDUuNSA0NDggMTQ0IDQ0OGMzMy45IDAgNzkgMTQgMTA1LjYgMjMuNXptNzYuOCAwQzM1MyA0NjIgMzk4LjEgNDQ4IDQzMiA0NDhjMzguNSAwIDg4LjQgMTIuMSAxMTkuOSAyMi42YzExLjMgMy44IDI0LjEtNC42IDI0LjEtMTYuNVY4My44YzAtMTIuMS02LjgtMjMuMy0xOC4xLTI3LjZDNTI5LjcgNDUuMyA0ODIuNSAzMiA0MzIgMzJjLTU4LjQgMC0xMDMuNCAyMC0xMjMgMzUuNmMtMy4zIDIuNi01IDYuOC01IDExVjQ1NmMwIDExLjQgMTEuNyAxOS4zIDIyLjQgMTUuNXpcIl1cbn07XG52YXIgZmFCb29rSm91cm5hbFdoaWxscyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rLWpvdXJuYWwtd2hpbGxzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJqb3VybmFsLXdoaWxsc1wiXSwgXCJmNjZhXCIsIFwiTTAgOTZDMCA0MyA0MyAwIDk2IDBIMzg0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnY2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODQgOTZjLTUzIDAtOTYtNDMtOTYtOTZWOTZ6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzNTJWMzg0SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTAuNC0yMzQuNGwtMjEuMi0yMS4yYy0zIDEwLjEtNS4xIDIwLjYtNS4xIDMxLjZjMCAuMiAwIC41IC4xIC44cy4xIC41IC4xIC44TDE2NS4yIDIyNmMyLjUgMi4xIDMuNCA1LjggMi4zIDguOWMtMS4zIDMtNC4xIDUuMS03LjUgNS4xYy0xLjktLjEtMy44LS44LTUuMi0ybC0yMy42LTIwLjZDMTQyLjggMjY3IDE4Ni45IDMwNCAyNDAgMzA0czk3LjMtMzcgMTA4LjktODYuNkwzMjUuMyAyMzhjLTEuNCAxLjItMy4zIDItNS4zIDJjLTIuMi0uMS00LjQtMS4xLTYtMi44Yy0xLjItMS41LTEuOS0zLjQtMi01LjJjLjEtMi4yIDEuMS00LjQgMi44LTZsMzcuMS0zMi41YzAtLjMgMC0uNSAuMS0uOHMuMS0uNSAuMS0uOGMwLTExLTIuMS0yMS41LTUuMS0zMS42bC0yMS4yIDIxLjJjLTMuMSAzLjEtOC4xIDMuMS0xMS4zIDBzLTMuMS04LjEgMC0xMS4ybDI2LjQtMjYuNWMtOC4yLTE3LTIwLjUtMzEuNy0zNS45LTQyLjZjLTIuNy0xLjktNi4yIDEuNC01IDQuNWM4LjUgMjIuNCAzLjYgNDgtMTMgNjUuNmMtMy4yIDMuNC0zLjYgOC45LS45IDEyLjdjOS44IDE0IDEyLjcgMzEuOSA3LjUgNDguNWMtNS45IDE5LjQtMjIgMzQuMS00MS45IDM4LjNsLTEuNC0zNC4zIDEyLjYgOC42Yy42IC40IDEuNSAuNiAyLjMgLjZjMS41IDAgMi43LS44IDMuNS0ycy42LTIuOC0uMS00TDI2MCAyMjUuNGwxOC0zLjZjMS44LS40IDMuMS0yLjEgMy4xLTRzLTEuNC0zLjUtMy4xLTMuOWwtMTgtMy43IDguNS0xNC4zYy44LTEuMiAuOS0yLjkgLjEtNC4xcy0yLTItMy41LTJsLS4xIDBjLS43IC4xLTEuNSAuMy0yLjEgLjdsLTE0LjEgOS42TDI0NCA4Ny45Yy0uMS0yLjItMS45LTMuOS00LTMuOXMtMy45IDEuNi00IDMuOWwtNC42IDExMC44LTEyLTguMWMtMS41LTEuMS0zLjYtLjktNSAuNHMtMS42IDMuNC0uOCA1bDguNiAxNC4zLTE4IDMuN2MtMS44IC40LTMuMSAyLTMuMSAzLjlzMS40IDMuNiAzLjEgNGwxOCAzLjgtOC42IDE0LjJjLS4yIC42LS41IDEuNC0uNSAyYzAgMS4xIC41IDIuMSAxLjIgM2MuOCAuNiAxLjggMSAyLjggMWMuNyAwIDEuNi0uMiAyLjItLjZsMTAuNC03LjEtMS40IDMyLjhjLTE5LjktNC4xLTM2LTE4LjktNDEuOS0zOC4zYy01LjEtMTYuNi0yLjItMzQuNCA3LjYtNDguNWMyLjctMy45IDIuMy05LjMtLjktMTIuN2MtMTYuNi0xNy41LTIxLjYtNDMuMS0xMy4xLTY1LjVjMS4yLTMuMS0yLjMtNi40LTUtNC41Yy0xNS4zIDEwLjktMjcuNiAyNS42LTM1LjggNDIuNmwyNi40IDI2LjVjMy4xIDMuMSAzLjEgOC4xIDAgMTEuMnMtOC4xIDMuMS0xMS4yIDB6XCJdXG59O1xudmFyIGZhSm91cm5hbFdoaWxscyA9IGZhQm9va0pvdXJuYWxXaGlsbHM7XG52YXIgZmFIYW5kY3VmZnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZGN1ZmZzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGY4XCIsIFwiTTI0MCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xOTIgNDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0tMzIgODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJoOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHYxNmMwIDEuNy0uMiAzLjQtLjUgNS4xQzI4MC4zIDIyOS42IDMyMCAyODYuMiAzMjAgMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDQwLjQgMCAzNTJjMC02NS44IDM5LjctMTIyLjQgOTYuNS0xNDYuOWMtLjQtMS42LS41LTMuMy0uNS01LjFWMTg0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMzIwYTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyem0xOTItOTZjMC0yNS45LTUuMS01MC41LTE0LjQtNzMuMWMxNi45LTMyLjkgNDQuOC01OS4xIDc4LjktNzMuOWMtLjQtMS42LS41LTMuMy0uNS01LjFWMTg0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmg4YzEzLjMgMCAyNCAxMC43IDI0IDI0djE2YzAgMS43LS4yIDMuNC0uNSA1LjFDNjAwLjMgMjI5LjYgNjQwIDI4Ni4yIDY0MCAzNTJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBjLTYyIDAtMTE1LjgtMzUuMy0xNDIuNC04Ni45YzkuMy0yMi41IDE0LjQtNDcuMiAxNC40LTczLjF6bTIyNCAwYTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpNMzY4IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em04MCA0OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhVHJpYW5nbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cmlhbmdsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk4ODgsIFwiZXhjbGFtYXRpb24tdHJpYW5nbGVcIiwgXCJ3YXJuaW5nXCJdLCBcImYwNzFcIiwgXCJNMjU2IDMyYzE0LjIgMCAyNy4zIDcuNSAzNC41IDE5LjhsMjE2IDM2OGM3LjMgMTIuNCA3LjMgMjcuNyAuMiA0MC4xUzQ4Ni4zIDQ4MCA0NzIgNDgwSDQwYy0xNC4zIDAtMjcuNi03LjctMzQuNy0yMC4xcy03LTI3LjggLjItNDAuMWwyMTYtMzY4QzIyOC43IDM5LjUgMjQxLjggMzIgMjU2IDMyem0wIDEyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRWMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0em0zMiAyMjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG52YXIgZmFFeGNsYW1hdGlvblRyaWFuZ2xlID0gZmFUcmlhbmdsZUV4Y2xhbWF0aW9uO1xudmFyIGZhV2FybmluZyA9IGZhVHJpYW5nbGVFeGNsYW1hdGlvbjtcbnZhciBmYURhdGFiYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RhdGFiYXNlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMWMwXCIsIFwiTTQ0OCA4MHY0OGMwIDQ0LjItMTAwLjMgODAtMjI0IDgwUzAgMTcyLjIgMCAxMjhWODBDMCAzNS44IDEwMC4zIDAgMjI0IDBTNDQ4IDM1LjggNDQ4IDgwek0zOTMuMiAyMTQuN2MyMC44LTcuNCAzOS45LTE2LjkgNTQuOC0yOC42VjI4OGMwIDQ0LjItMTAwLjMgODAtMjI0IDgwUzAgMzMyLjIgMCAyODhWMTg2LjFjMTQuOSAxMS44IDM0IDIxLjIgNTQuOCAyOC42Qzk5LjcgMjMwLjcgMTU5LjUgMjQwIDIyNCAyNDBzMTI0LjMtOS4zIDE2OS4yLTI1LjN6TTAgMzQ2LjFjMTQuOSAxMS44IDM0IDIxLjIgNTQuOCAyOC42Qzk5LjcgMzkwLjcgMTU5LjUgNDAwIDIyNCA0MDBzMTI0LjMtOS4zIDE2OS4yLTI1LjNjMjAuOC03LjQgMzkuOS0xNi45IDU0LjgtMjguNlY0MzJjMCA0NC4yLTEwMC4zIDgwLTIyNCA4MFMwIDQ3Ni4yIDAgNDMyVjM0Ni4xelwiXVxufTtcbnZhciBmYVNoYXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoYXJlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJtYWlsLWZvcndhcmRcIl0sIFwiZjA2NFwiLCBcIk0zMDcgMzQuOGMtMTEuNSA1LjEtMTkgMTYuNi0xOSAyOS4ydjY0SDE3NkM3OC44IDEyOCAwIDIwNi44IDAgMzA0QzAgNDE3LjMgODEuNSA0NjcuOSAxMDAuMiA0NzguMWMyLjUgMS40IDUuMyAxLjkgOC4xIDEuOWMxMC45IDAgMTkuNy04LjkgMTkuNy0xOS43YzAtNy41LTQuMy0xNC40LTkuOC0xOS41QzEwOC44IDQzMS45IDk2IDQxNC40IDk2IDM4NGMwLTUzIDQzLTk2IDk2LTk2aDk2djY0YzAgMTIuNiA3LjQgMjQuMSAxOSAyOS4yczI1IDMgMzQuNC01LjRsMTYwLTE0NGM2LjctNi4xIDEwLjYtMTQuNyAxMC42LTIzLjhzLTMuOC0xNy43LTEwLjYtMjMuOGwtMTYwLTE0NGMtOS40LTguNS0yMi45LTEwLjYtMzQuNC01LjR6XCJdXG59O1xudmFyIGZhTWFpbEZvcndhcmQgPSBmYVNoYXJlO1xudmFyIGZhQm90dGxlRHJvcGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3R0bGUtZHJvcGxldCcsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTRjNFwiLCBcIk05NiAwQzgyLjcgMCA3MiAxMC43IDcyIDI0czEwLjcgMjQgMjQgMjRjNC40IDAgOCAzLjYgOCA4djY0LjljMCAxMi4yLTcuMiAyMy4xLTE3LjIgMzAuMUM1My43IDE3NC4xIDMyIDIxMi41IDMyIDI1NlY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjI0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjI1NmMwLTQzLjUtMjEuNy04MS45LTU0LjgtMTA1Yy0xMC03LTE3LjItMTcuOS0xNy4yLTMwLjFWNTZjMC00LjQgMy42LTggOC04YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMCAwIDAgMEgxMDRsMCAwIDAgMEw5NiAwem02NCAzODJjLTI2LjUgMC00OC0yMC4xLTQ4LTQ1YzAtMTYuOCAyMi4xLTQ4LjEgMzYuMy02Ni40YzYtNy44IDE3LjUtNy44IDIzLjUgMEMxODUuOSAyODguOSAyMDggMzIwLjIgMjA4IDMzN2MwIDI0LjktMjEuNSA0NS00OCA0NXpcIl1cbn07XG52YXIgZmFNYXNrRmFjZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrLWZhY2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUxZDdcIiwgXCJNMzIwIDY0Yy0yNy4yIDAtNTMuOCA4LTc2LjQgMjMuMWwtMzcuMSAyNC44Yy0xNS44IDEwLjUtMzQuMyAxNi4xLTUzLjMgMTYuMUgxNDQgMTI4IDU2Yy0zMC45IDAtNTYgMjUuMS01NiA1NnY4NWMwIDU1LjEgMzcuNSAxMDMuMSA5MC45IDExNi40bDEwOCAyN0MyMzMuOCA0MzUgMjc1LjQgNDQ4IDMyMCA0NDhzODYuMi0xMyAxMjEuMS0zNS41bDEwOC0yN0M2MDIuNSAzNzIuMSA2NDAgMzI0LjEgNjQwIDI2OVYxODRjMC0zMC45LTI1LjEtNTYtNTYtNTZINTEyIDQ5NmgtOS4yYy0xOSAwLTM3LjUtNS42LTUzLjMtMTYuMUwzOTYuNCA4Ny4xQzM3My44IDcyIDM0Ny4yIDY0IDMyMCA2NHpNMTMyLjMgMzQ2LjNsLTI5LjgtNy40QzcwLjUgMzMwLjkgNDggMzAyLjEgNDggMjY5VjE4NGMwLTQuNCAzLjYtOCA4LThIOTZ2NDhjMCA0NS4xIDEzLjQgODcuMiAzNi4zIDEyMi4zem00MDUuMS03LjRsLTI5LjggNy40YzIzLTM1LjIgMzYuMy03Ny4yIDM2LjMtMTIyLjNWMTc2aDQwYzQuNCAwIDggMy42IDggOHY4NWMwIDMzLTIyLjUgNjEuOC01NC41IDY5Ljl6TTE5MiAyMDhjMC04LjggNy4yLTE2IDE2LTE2SDQzMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNnptMTYgNDhINDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMTYgODBjMC04LjggNy4yLTE2IDE2LTE2SDQwMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyNDBjLTguOCAwLTE2LTcuMi0xNi0xNnpcIl1cbn07XG52YXIgZmFIaWxsUm9ja3NsaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hpbGwtcm9ja3NsaWRlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTA4XCIsIFwiTTI1Mi40IDEwMy44bDI3IDQ4YzIuOCA1IDguMiA4LjIgMTMuOSA4LjJsNTMuMyAwYzUuOCAwIDExLjEtMy4xIDEzLjktOC4ybDI3LTQ4YzIuNy00LjkgMi43LTEwLjggMC0xNS43bC0yNy00OGMtMi44LTUtOC4yLTguMi0xMy45LTguMkgyOTMuNGMtNS44IDAtMTEuMSAzLjEtMTMuOSA4LjJsLTI3IDQ4Yy0yLjcgNC45LTIuNyAxMC44IDAgMTUuN3pNNjguMyA4N0M0My4xIDYxLjggMCA3OS43IDAgMTE1LjNWNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwSDM5Ni43YzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjMgODd6TTUwNC4yIDQwMy42YzQuOSAyLjcgMTAuOCAyLjcgMTUuNyAwbDQ4LTI3YzUtMi44IDguMi04LjIgOC4yLTEzLjlWMzA5LjRjMC01LjgtMy4xLTExLjEtOC4yLTEzLjlsLTQ4LTI3Yy00LjktMi43LTEwLjgtMi43LTE1LjcgMGwtNDggMjdjLTUgMi44LTguMiA4LjItOC4yIDEzLjl2NTMuM2MwIDUuOCAzLjEgMTEuMSA4LjIgMTMuOWw0OCAyN3pNMTkyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM4NCAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYVJpZ2h0TGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyaWdodC1sZWZ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleGNoYW5nZS1hbHRcIl0sIFwiZjM2MlwiLCBcIk0zMiA5NmwzMjAgMFYzMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDk2IDk2YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTk2IDk2Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNlYxNjBMMzIgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyek00ODAgMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE2MHY2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtOTYtOTZjLTYtNi05LjQtMTQuMS05LjQtMjIuNnMzLjQtMTYuNiA5LjQtMjIuNmw5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOXMxOS44IDE2LjYgMTkuOCAyOS42bDAgNjRINDgwelwiXVxufTtcbnZhciBmYUV4Y2hhbmdlQWx0ID0gZmFSaWdodExlZnQ7XG52YXIgZmFQYXBlclBsYW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhcGVyLXBsYW5lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE5MTNdLCBcImYxZDhcIiwgXCJNNDk4LjEgNS42YzEwLjEgNyAxNS40IDE5LjEgMTMuNSAzMS4ybC02NCA0MTZjLTEuNSA5LjctNy40IDE4LjItMTYgMjNzLTE4LjkgNS40LTI4IDEuNkwyODQgNDI3LjdsLTY4LjUgNzQuMWMtOC45IDkuNy0yMi45IDEyLjktMzUuMiA4LjFTMTYwIDQ5My4yIDE2MCA0ODBWMzk2LjRjMC00IDEuNS03LjggNC4yLTEwLjdMMzMxLjggMjAyLjhjNS44LTYuMyA1LjYtMTYtLjQtMjJzLTE1LjctNi40LTIyLS43TDEwNiAzNjAuOCAxNy43IDMxNi42QzcuMSAzMTEuMyAuMyAzMDAuNyAwIDI4OC45czUuOS0yMi44IDE2LjEtMjguN2w0NDgtMjU2YzEwLjctNi4xIDIzLjktNS41IDM0IDEuNHpcIl1cbn07XG52YXIgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NjVcIiwgXCJNMjEzLjIgMzJIMjg4Vjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzJoNzQuOGMyNy4xIDAgNTEuMyAxNy4xIDYwLjMgNDIuNmw0Mi43IDEyMC42Yy0xMC45LTIuMS0yMi4yLTMuMi0zMy44LTMuMmMtNTkuNSAwLTExMi4xIDI5LjYtMTQ0IDc0LjhWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyYzIuMyAwIDQuNi0uMyA2LjgtLjdjLTQuNSAxNS41LTYuOCAzMS44LTYuOCA0OC43YzAgNS40IC4yIDEwLjcgLjcgMTZsLS43IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0SDg2LjZDNTYuNSA0ODAgMzIgNDU1LjUgMzIgNDI1LjRjMC02LjIgMS4xLTEyLjQgMy4xLTE4LjJMMTUyLjkgNzQuNkMxNjIgNDkuMSAxODYuMSAzMiAyMTMuMiAzMnpNNDk2IDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMC0xOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI4OGMwLTguOC03LjItMTYtMTYtMTZ6XCJdXG59O1xudmFyIGZhRHVuZ2VvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkdW5nZW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNmQ5XCIsIFwiTTMzNi42IDE1Ni41YzEuMyAxLjEgMi43IDIuMiAzLjkgMy4zYzkuMyA4LjIgMjMgMTAuNSAzMy40IDMuNmw2Ny42LTQ1LjFjMTEuNC03LjYgMTQuMi0yMy4yIDUuMS0zMy40QzQzMCA2Ni42IDQxMC45IDUwLjYgMzg5LjcgMzcuNmMtMTEuOS03LjMtMjYuOS0xLjQtMzIuMSAxMS42bC0zMC41IDc2LjJjLTQuNSAxMS4xIC4yIDIzLjYgOS41IDMxLjJ6TTMyOCAzNi44YzUuMS0xMi44LTEuNi0yNy40LTE1LTMwLjVDMjk0LjcgMi4yIDI3NS42IDAgMjU2IDBzLTM4LjcgMi4yLTU3IDYuNEMxODUuNSA5LjQgMTc4LjggMjQgMTg0IDM2LjhsMzAuMyA3NS44YzQuNSAxMS4zIDE2LjggMTcuMiAyOSAxNmM0LjItLjQgOC40LS42IDEyLjctLjZzOC42IC4yIDEyLjcgLjZjMTIuMSAxLjIgMjQuNC00LjcgMjktMTZMMzI4IDM2Ljh6TTY1LjUgODVjLTkuMSAxMC4yLTYuMyAyNS44IDUuMSAzMy40bDY3LjYgNDUuMWMxMC4zIDYuOSAyNC4xIDQuNiAzMy40LTMuNmMxLjMtMS4xIDIuNi0yLjMgNC0zLjNjOS4zLTcuNSAxMy45LTIwLjEgOS41LTMxLjJMMTU0LjQgNDkuMmMtNS4yLTEyLjktMjAuMy0xOC44LTMyLjEtMTEuNkMxMDEuMSA1MC42IDgyIDY2LjYgNjUuNSA4NXptMzE0IDEzNy4xYy45IDMuMyAxLjcgNi42IDIuMyAxMGMyLjUgMTMgMTMgMjMuOSAyNi4yIDIzLjloODBjMTMuMyAwIDI0LjEtMTAuOCAyMi45LTI0Yy0yLjUtMjcuMi05LjMtNTMuMi0xOS43LTc3LjNjLTUuNS0xMi45LTIxLjQtMTYuNi0zMy4xLTguOWwtNjguNiA0NS43Yy05LjggNi41LTEzLjIgMTkuMi0xMCAzMC41ek01My45IDE0NS44Yy0xMS42LTcuOC0yNy42LTQtMzMuMSA4LjlDMTAuNCAxNzguOCAzLjYgMjA0LjggMS4xIDIzMmMtMS4yIDEzLjIgOS42IDI0IDIyLjkgMjRoODBjMTMuMyAwIDIzLjgtMTAuOCAyNi4yLTIzLjljLjYtMy40IDEuNC02LjcgMi4zLTEwYzMuMS0xMS40LS4yLTI0LTEwLTMwLjVMNTMuOSAxNDUuOHpNMTA0IDI4OEgyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0zMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDQwOHpNMjQgNDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRIMjR6bTM4NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRINDA4ek0yNzIgMTkyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjQ2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE5MnptLTY0IDMyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjQ2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIyNHptMTI4IDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWNDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjI0elwiXVxufTtcbnZhciBmYUFsaWduUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYWxpZ24tcmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwMzhcIiwgXCJNNDQ4IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyelwiXVxufTtcbnZhciBmYU1vbmV5QmlsbDFXYXZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGwtMS13YXZlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJtb25leS1iaWxsLXdhdmUtYWx0XCJdLCBcImY1M2JcIiwgXCJNMCAxMTIuNVY0MjIuM2MwIDE4IDEwLjEgMzUgMjcgNDEuM2M4NyAzMi41IDE3NCAxMC4zIDI2MS0xMS45Yzc5LjgtMjAuMyAxNTkuNi00MC43IDIzOS4zLTE4LjljMjMgNi4zIDQ4LjctOS41IDQ4LjctMzMuNFY4OS43YzAtMTgtMTAuMS0zNS0yNy00MS4zQzQ2MiAxNS45IDM3NSAzOC4xIDI4OCA2MC4zQzIwOC4yIDgwLjYgMTI4LjQgMTAwLjkgNDguNyA3OS4xQzI1LjYgNzIuOCAwIDg4LjYgMCAxMTIuNXpNMTI4IDQxNkg2NFYzNTJjMzUuMyAwIDY0IDI4LjcgNjQgNjR6TTY0IDIyNFYxNjBoNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTQ0OCAzNTJjMC0zNS4zIDI4LjctNjQgNjQtNjR2NjRINDQ4em02NC0xOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0aDY0djY0ek0zODQgMjU2YzAgNjEuOS00MyAxMTItOTYgMTEycy05Ni01MC4xLTk2LTExMnM0My0xMTIgOTYtMTEyczk2IDUwLjEgOTYgMTEyek0yNTIgMjA4YzAgOS43IDYuOSAxNy43IDE2IDE5LjZWMjc2aC00Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGgyNCAyNGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBoLTRWMjA4YzAtMTEtOS0yMC0yMC0yMEgyNzJjLTExIDAtMjAgOS0yMCAyMHpcIl1cbn07XG52YXIgZmFNb25leUJpbGxXYXZlQWx0ID0gZmFNb25leUJpbGwxV2F2ZTtcbnZhciBmYUxpZmVSaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpZmUtcmluZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjFjZFwiLCBcIk0zNjcuMiA0MTIuNUMzMzUuOSA0MzQuOSAyOTcuNSA0NDggMjU2IDQ0OHMtNzkuOS0xMy4xLTExMS4yLTM1LjVsNTgtNThjMTUuOCA4LjYgMzQgMTMuNSA1My4zIDEzLjVzMzcuNC00LjkgNTMuMy0xMy41bDU4IDU4em05MC43IC44YzMzLjgtNDMuNCA1NC05OCA1NC0xNTcuM3MtMjAuMi0xMTMuOS01NC0xNTcuM2M5LTEyLjUgNy45LTMwLjEtMy40LTQxLjNTNDI1LjggNDUgNDEzLjMgNTRDMzY5LjkgMjAuMiAzMTUuMyAwIDI1NiAwUzE0Mi4xIDIwLjIgOTguNyA1NGMtMTIuNS05LTMwLjEtNy45LTQxLjMgMy40UzQ1IDg2LjIgNTQgOTguN0MyMC4yIDE0Mi4xIDAgMTk2LjcgMCAyNTZzMjAuMiAxMTMuOSA1NCAxNTcuM2MtOSAxMi41LTcuOSAzMC4xIDMuNCA0MS4zUzg2LjIgNDY3IDk4LjcgNDU4YzQzLjQgMzMuOCA5OCA1NCAxNTcuMyA1NHMxMTMuOS0yMC4yIDE1Ny4zLTU0YzEyLjUgOSAzMC4xIDcuOSA0MS4zLTMuNHMxMi40LTI4LjggMy40LTQxLjN6bS00NS41LTQ2LjFsLTU4LTU4YzguNi0xNS44IDEzLjUtMzQgMTMuNS01My4zcy00LjktMzcuNC0xMy41LTUzLjNsNTgtNThDNDM0LjkgMTc2LjEgNDQ4IDIxNC41IDQ0OCAyNTZzLTEzLjEgNzkuOS0zNS41IDExMS4yek0zNjcuMiA5OS41bC01OCA1OGMtMTUuOC04LjYtMzQtMTMuNS01My4zLTEzLjVzLTM3LjQgNC45LTUzLjMgMTMuNWwtNTgtNThDMTc2LjEgNzcuMSAyMTQuNSA2NCAyNTYgNjRzNzkuOSAxMy4xIDExMS4yIDM1LjV6TTE1Ny41IDMwOS4zbC01OCA1OEM3Ny4xIDMzNS45IDY0IDI5Ny41IDY0IDI1NnMxMy4xLTc5LjkgMzUuNS0xMTEuMmw1OCA1OGMtOC42IDE1LjgtMTMuNSAzNC0xMy41IDUzLjNzNC45IDM3LjQgMTMuNSA1My4zek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6XCJdXG59O1xudmFyIGZhSGFuZHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNpZ24tbGFuZ3VhZ2VcIiwgXCJzaWduaW5nXCJdLCBcImYyYTdcIiwgXCJNNTQ0IDE2MGwtLjEgNzIuNmMtLjEgNTIuMi0yNCAxMDEtNjQgMTMzLjFjLjEtMS45IC4xLTMuOCAuMS01Ljd2LThjMC03MS44LTM3LTEzOC42LTk3LjktMTc2LjdsLTYwLjItMzcuNmMtOC42LTUuNC0xNy45LTguNC0yNy4zLTkuNEwyNDguNyA0OC44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOGw3OCAxMzUuMWMzLjMgNS43IDEwLjcgNy43IDE2LjQgNC40czcuNy0xMC43IDQuNC0xNi40bC02Mi0xMDcuNGMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhTMzYyIDUgMzY4LjYgMTYuNWw2OCAxMTcuOCAwIDAgMCAwIDQzLjMgNzVMNDgwIDE2MGMwLTE3LjcgMTQuNC0zMiAzMi0zMnMzMiAxNC40IDMyIDMyek0yNDMuOSA4OC41TDI2OC41IDEzMWMtMTMuOSA0LjUtMjYuNCAxMy43LTM0LjcgMjdjLS45IDEuNC0xLjcgMi45LTIuNSA0LjRsLTI4LjktNTBjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44em0tNDYuNCA2My43bDI2LjggNDYuNGMuNiA2IDIuMSAxMS44IDQuMyAxNy40SDIyNCAyMTAuN2wwIDBIMTc5bC0yMy0zOS44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOHpNMjYwLjkgMTc1YzkuNC0xNSAyOS4xLTE5LjUgNDQuMS0xMC4ybDYwLjIgMzcuNkM0MTYuNyAyMzQuNyA0NDggMjkxLjIgNDQ4IDM1MnY4YzAgODMuOS02OC4xIDE1Mi0xNTIgMTUySDEyMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg5MmM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkg4OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNEgyMTJjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJINTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRIMjEyYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEySDg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0SDIyNGwwIDAgMCAwaDkzLjJMMjcxIDIxOS4xYy0xNS05LjQtMTkuNS0yOS4xLTEwLjItNDQuMXpcIl1cbn07XG52YXIgZmFTaWduTGFuZ3VhZ2UgPSBmYUhhbmRzO1xudmFyIGZhU2lnbmluZyA9IGZhSGFuZHM7XG52YXIgZmFDYWxlbmRhckRheSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWxlbmRhci1kYXknLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY3ODNcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnptODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnY5NmMwIDguOCA3LjIgMTYgMTYgMTZoOTZjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIODB6XCJdXG59O1xudmFyIGZhV2F0ZXJMYWRkZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2F0ZXItbGFkZGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJsYWRkZXItd2F0ZXJcIiwgXCJzd2ltbWluZy1wb29sXCJdLCBcImY1YzVcIiwgXCJNMTI4IDEyNy43QzEyOCA3NC45IDE3MC45IDMyIDIyMy43IDMyYzQ4LjMgMCA4OSAzNiA5NSA4My45bDEgOC4yYzIuMiAxNy41LTEwLjIgMzMuNS0yNy44IDM1LjdzLTMzLjUtMTAuMi0zNS43LTI3LjhsLTEtOC4yYy0yLTE1LjktMTUuNS0yNy44LTMxLjUtMjcuOGMtMTcuNSAwLTMxLjcgMTQuMi0zMS43IDMxLjdWMjI0SDM4NFYxMjcuN0MzODQgNzQuOSA0MjYuOSAzMiA0NzkuNyAzMmM0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjhjLTE3LjUgMC0zMS43IDE0LjItMzEuNyAzMS43VjM2MWMtMS42IDEtMy4zIDItNC44IDMuMWMtMTggMTIuNC00MC4xIDIwLjMtNTkuMiAyMC4zaDBWMjg4SDE5MnY5Ni41Yy0xOSAwLTQxLjItNy45LTU5LjEtMjAuM2MtMS42LTEuMS0zLjItMi4yLTQuOS0zLjFWMTI3Ljd6TTMwNi41IDM4OS45QzMyOSA0MDUuNCAzNTYuNSA0MTYgMzg0IDQxNmMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA0NjkuNyA0MTcgNDgwIDM4NCA0ODBjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyA0MDUuMiAxNjUuMSA0MTYgMTkyIDQxNmMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl1cbn07XG52YXIgZmFMYWRkZXJXYXRlciA9IGZhV2F0ZXJMYWRkZXI7XG52YXIgZmFTd2ltbWluZ1Bvb2wgPSBmYVdhdGVyTGFkZGVyO1xudmFyIGZhQXJyb3dzVXBEb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy11cC1kb3duJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJhcnJvd3MtdlwiXSwgXCJmMDdkXCIsIFwiTTE4Mi42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDEyOCAxMDkuM1Y0MDIuN0w4Ni42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDAyLjdWMTA5LjNsNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2elwiXVxufTtcbnZhciBmYUFycm93c1YgPSBmYUFycm93c1VwRG93bjtcbnZhciBmYUZhY2VHcmltYWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3JpbWFjZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1NiwgXCJncmltYWNlXCJdLCBcImY1N2ZcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTk2LTExMmgtOFYzNjBsNTUuMyAwYy0zLjggMjIuNy0yMy42IDQwLTQ3LjMgNDB6bTQ3LjMtNTZMMzQ0IDM0NFYzMDRoOGMyMy44IDAgNDMuNSAxNy4zIDQ3LjMgNDB6TTMyOCAzNDRIMjY0VjMwNGg2NHY0MHptMCA1NkgyNjRWMzYwaDY0djQwem0tODAtOTZ2NDBsLTY0IDBWMzA0aDY0em0wIDU2djQwSDE4NFYzNjBsNjQgMHptLTgwLTE2SDExMi43YzMuOC0yMi43IDIzLjYtNDAgNDcuMy00MGg4djQwem0wIDU2aC04Yy0yMy44IDAtNDMuNS0xNy4zLTQ3LjMtNDBIMTY4djQwek0xNDQuNCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFHcmltYWNlID0gZmFGYWNlR3JpbWFjZTtcbnZhciBmYVdoZWVsY2hhaXJNb3ZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWVsY2hhaXItbW92ZScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wid2hlZWxjaGFpci1hbHRcIl0sIFwiZTJjZVwiLCBcIk0zMjAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMjA0LjUgMTIxLjNjLTUuNC0yLjUtMTEuNy0xLjktMTYuNCAxLjdsLTQwLjkgMzAuN2MtMTQuMSAxMC42LTM0LjIgNy43LTQ0LjgtNi40cy03LjctMzQuMiA2LjQtNDQuOGw0MC45LTMwLjdjMjMuNy0xNy44IDU1LjMtMjEgODIuMS04LjRsOTAuNCA0Mi41YzI5LjEgMTMuNyAzNi44IDUxLjYgMTUuMiA3NS41TDI5OS4xIDIyNGg5Ny40YzMwLjMgMCA1MyAyNy43IDQ3LjEgNTcuNEw0MTUuNCA0MjIuM2MtMy41IDE3LjMtMjAuMyAyOC42LTM3LjcgMjUuMXMtMjguNi0yMC4zLTI1LjEtMzcuN0wzNzcgMjg4SDMwNi43YzguNiAxOS42IDEzLjMgNDEuMiAxMy4zIDY0YzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDQwLjQgMCAzNTJzNzEuNi0xNjAgMTYwLTE2MGMxMS4xIDAgMjIgMS4xIDMyLjQgMy4zbDU0LjItNTQuMi00Mi4xLTE5Ljh6TTE2MCA0NDhhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6XCJdXG59O1xudmFyIGZhV2hlZWxjaGFpckFsdCA9IGZhV2hlZWxjaGFpck1vdmU7XG52YXIgZmFUdXJuRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0dXJuLWRvd24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMDU0OSwgXCJsZXZlbC1kb3duLWFsdFwiXSwgXCJmM2JlXCIsIFwiTTM1MCAzMzQuNWMzLjggOC44IDIgMTktNC42IDI2bC0xMzYgMTQ0Yy00LjUgNC44LTEwLjggNy41LTE3LjQgNy41cy0xMi45LTIuNy0xNy40LTcuNWwtMTM2LTE0NGMtNi42LTctOC40LTE3LjItNC42LTI2czEyLjUtMTQuNSAyMi0xNC41aDg4bDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRWMzJDMCAxNC4zIDE0LjMgMCAzMiAwbDgwIDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAxOTJoODhjOS42IDAgMTguMiA1LjcgMjIgMTQuNXpcIl1cbn07XG52YXIgZmFMZXZlbERvd25BbHQgPSBmYVR1cm5Eb3duO1xudmFyIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXdhbGtpbmctYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTJcIiwgXCJNMjA4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTIzLjcgMjAwLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDI4MSAyMzIuN2wtMTUuMy0zNi44QzI0OC41IDE1NC44IDIwOC4zIDEyOCAxNjMuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMzIuOSAxNC42LTU4LjEgNDIuNC02OS40IDc2LjVsLTIuNiA3LjhjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMi42LTcuOGM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41em0tMzAgMTM1LjFMNjguNyAzOTggOS40IDQ1Ny40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDExNi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6TTU1MC42IDE1My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w1MzAuNyAyMjRIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDUzMC43bC0yNS40IDI1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsODAtODBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwelwiXVxufTtcbnZhciBmYVNxdWFyZUVudmVsb3BlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1lbnZlbG9wZScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiZW52ZWxvcGUtc3F1YXJlXCJdLCBcImYxOTlcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0yMTggMjcxLjdMNjQuMiAxNzIuNEM2NiAxNTYuNCA3OS41IDE0NCA5NiAxNDRIMzUyYzE2LjUgMCAzMCAxMi40IDMxLjggMjguNEwyMzAgMjcxLjdjLTEuOCAxLjItMy45IDEuOC02IDEuOHMtNC4yLS42LTYtMS44em0yOS40IDI2LjlMMzg0IDIxMC40VjMzNmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjEwLjRsMTM2LjYgODguMmM3IDQuNSAxNS4xIDYuOSAyMy40IDYuOXMxNi40LTIuNCAyMy40LTYuOXpcIl1cbn07XG52YXIgZmFFbnZlbG9wZVNxdWFyZSA9IGZhU3F1YXJlRW52ZWxvcGU7XG52YXIgZmFEaWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5MjJdLCBcImY1MjJcIiwgXCJNMjc0LjkgMzQuM2MtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwTDM0LjMgMTczLjFjLTI4LjEgMjguMS0yOC4xIDczLjcgMCAxMDEuOEwxNzMuMSA0MTMuN2MyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDBMNDEzLjcgMjc0LjljMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44TDI3NC45IDM0LjN6TTIwMCAyMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNOTYgMjAwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjI0IDM3NmEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTM1MiAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yMjQgMTIwYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptOTYgMzI4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFYyNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINDYxLjdjMTEuNiAzNiAzLjEgNzctMjUuNCAxMDUuNUwzMjAgNDEzLjhWNDQ4ek00ODAgMzI4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG52YXIgZmFCb3dsaW5nQmFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3dsaW5nLWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0MzZcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI0MCA4MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTIwOCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTY0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG52YXIgZmFCcmFpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmFpbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTUwNF0sIFwiZjVkY1wiLCBcIk0xODQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NlY0NTZjMCAzMC45LTI1LjEgNTYtNTYgNTZjLTI4LjkgMC01Mi43LTIxLjktNTUuNy01MC4xYy01LjIgMS40LTEwLjcgMi4xLTE2LjMgMi4xYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTcuNCAxLjMtMTQuNiAzLjYtMjEuMkMyMS40IDM2Ny40IDAgMzM4LjIgMCAzMDRjMC0zMS45IDE4LjctNTkuNSA0NS44LTcyLjNDMzcuMSAyMjAuOCAzMiAyMDcgMzIgMTkyYzAtMzAuNyAyMS42LTU2LjMgNTAuNC02Mi42QzgwLjggMTIzLjkgODAgMTE4IDgwIDExMmMwLTI5LjkgMjAuNi01NS4xIDQ4LjMtNjIuMUMxMzEuMyAyMS45IDE1NS4xIDAgMTg0IDB6TTMyOCAwYzI4LjkgMCA1Mi42IDIxLjkgNTUuNyA0OS45YzI3LjggNyA0OC4zIDMyLjEgNDguMyA2Mi4xYzAgNi0uOCAxMS45LTIuNCAxNy40YzI4LjggNi4yIDUwLjQgMzEuOSA1MC40IDYyLjZjMCAxNS01LjEgMjguOC0xMy44IDM5LjdDNDkzLjMgMjQ0LjUgNTEyIDI3Mi4xIDUxMiAzMDRjMCAzNC4yLTIxLjQgNjMuNC01MS42IDc0LjhjMi4zIDYuNiAzLjYgMTMuOCAzLjYgMjEuMmMwIDM1LjMtMjguNyA2NC02NCA2NGMtNS42IDAtMTEuMS0uNy0xNi4zLTIuMWMtMyAyOC4yLTI2LjggNTAuMS01NS43IDUwLjFjLTMwLjkgMC01Ni0yNS4xLTU2LTU2VjU2YzAtMzAuOSAyNS4xLTU2IDU2LTU2elwiXVxufTtcbnZhciBmYUJhbmRhZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFuZGFnZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTY1NywgXCJiYW5kLWFpZFwiXSwgXCJmNDYyXCIsIFwiTTQ4MCA0MTZoOTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDQ4MFY0MTZ6TTQ0OCA5NkgxOTJWNDE2SDQ0OFY5NnpNNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwVjM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGg5NlY5Nkg2NHpNMjQ4IDIwOGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yNDggMzA0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xudmFyIGZhQmFuZEFpZCA9IGZhQmFuZGFnZTtcbnZhciBmYUNhbGVuZGFyTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItbWludXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYyNzJcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnpNMzEyIDM3NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxMzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMzEyelwiXVxufTtcbnZhciBmYUNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS14bWFyaycsXG4gIGljb246IFs1MTIsIDUxMiwgWzYxNTMyLCBcInRpbWVzLWNpcmNsZVwiLCBcInhtYXJrLWNpcmNsZVwiXSwgXCJmMDU3XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzUgMTc1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDQ3IDQ3IDQ3LTQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNDcgNDcgNDcgNDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDctNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDctNDctNDctNDdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45elwiXVxufTtcbnZhciBmYVRpbWVzQ2lyY2xlID0gZmFDaXJjbGVYbWFyaztcbnZhciBmYVhtYXJrQ2lyY2xlID0gZmFDaXJjbGVYbWFyaztcbnZhciBmYUdpZnRzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dpZnRzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzljXCIsIFwiTTIwMC42IDMyQzIwNSAxOS41IDE5OC41IDUuOCAxODYgMS40UzE1OS44IDMuNSAxNTUuNCAxNkwxNDQuNyA0Ni4ybC05LjktMjkuOEMxMzAuNiAzLjggMTE3LTMgMTA0LjQgMS4yUzg1IDE5IDg5LjIgMzEuNmw4LjMgMjUtMjcuNC0yMGMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNzLTUuNCAyNS43IDUuMyAzMy41TDcwLjIgOTZINDhDMjEuNSA5NiAwIDExNy41IDAgMTQ0VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyMDAuNmMtNS40LTkuNC04LjYtMjAuMy04LjYtMzJWMjU2YzAtMjkuOSAyMC41LTU1IDQ4LjItNjJjMS44LTMxIDE3LjEtNTguMiA0MC4xLTc2LjFDMjcxLjcgMTA0LjcgMjU2LjkgOTYgMjQwIDk2SDIxNy44bDI4LjMtMjAuNmMxMC43LTcuOCAxMy4xLTIyLjggNS4zLTMzLjVzLTIyLjgtMTMuMS0zMy41LTUuM0wxOTIuNSA1NS4xIDIwMC42IDMyek0zNjMuNSAxODUuNUwzOTMuMSAyMjRIMzQ0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNGMwLTEzLjEgMTAuOC0yNCAyNC4yLTI0YzcuNiAwIDE0LjcgMy41IDE5LjMgOS41ek0yNzIgMjAwYzAgOC40IDEuNCAxNi41IDQuMSAyNEgyNzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djgwSDQxNlYyNTZoMzJ2OTZINjQwVjI3MmMwLTI2LjUtMjEuNS00OC00OC00OGgtNC4xYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0YzAtMzkuOS0zMi41LTcyLTcyLjItNzJjLTIyLjQgMC00My42IDEwLjQtNTcuMyAyOC4yTDQzMiAxOTUuOGwtMzAuNS0zOS42Yy0xMy43LTE3LjgtMzUtMjguMi01Ny4zLTI4LjJjLTM5LjcgMC03Mi4yIDMyLjEtNzIuMiA3MnpNMjI0IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MTZWMzg0SDIyNHY4MHptMjI0IDQ4SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYzODRINDQ4VjUxMnptOTYtMzEyYzAgMTMuMy0xMC43IDI0LTI0IDI0SDQ3MC45bDI5LjYtMzguNWM0LjYtNS45IDExLjctOS41IDE5LjMtOS41YzEzLjQgMCAyNC4yIDEwLjkgMjQuMiAyNHpcIl1cbn07XG52YXIgZmFIb3RlbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3RlbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzk3Nl0sIFwiZjU5NFwiLCBcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWNDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMwNFY0NjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh2NDhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnptOTYgODB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDExMmMtOC44IDAtMTYgNy4yLTE2IDE2ek0yNDAgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIMjQwem0xMTIgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xMTIgMTkyYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDExMnptMTEyIDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjA4YzAtOC44LTcuMi0xNi0xNi0xNkgyNDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTQ0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDM2OHpNMzI4IDM4NGMxMy4zIDAgMjQuMy0xMC45IDIxLTIzLjhjLTEwLjYtNDEuNS00OC4yLTcyLjItOTMtNzIuMnMtODIuNSAzMC43LTkzIDcyLjJjLTMuMyAxMi44IDcuOCAyMy44IDIxIDIzLjhIMzI4elwiXVxufTtcbnZhciBmYUVhcnRoQXNpYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlYXJ0aC1hc2lhJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzU5LCBcImdsb2JlLWFzaWFcIl0sIFwiZjU3ZVwiLCBcIk01MS43IDI5NS4xbDMxLjcgNi4zYzcuOSAxLjYgMTYtLjkgMjEuNy02LjZsMTUuNC0xNS40YzExLjYtMTEuNiAzMS4xLTguNCAzOC40IDYuMmw5LjMgMTguNWM0LjggOS42IDE0LjYgMTUuNyAyNS40IDE1LjdjMTUuMiAwIDI2LjEtMTQuNiAyMS43LTI5LjJsLTYtMTkuOWMtNC42LTE1LjQgNi45LTMwLjkgMjMtMzAuOWgyLjNjMTMuNCAwIDI1LjktNi43IDMzLjMtMTcuOGwxMC43LTE2LjFjNS42LTguNSA1LjMtMTkuNi0uOC0yNy43bC0xNi4xLTIxLjVjLTEwLjMtMTMuNy0zLjMtMzMuNSAxMy40LTM3LjdsMTctNC4zYzcuNS0xLjkgMTMuNi03LjIgMTYuNS0xNC40bDE2LjQtNDAuOUMzMDMuNCA1Mi4xIDI4MC4yIDQ4IDI1NiA0OEMxNDEuMSA0OCA0OCAxNDEuMSA0OCAyNTZjMCAxMy40IDEuMyAyNi41IDMuNyAzOS4xem00MDcuNyA0LjZjLTMtLjMtNi0uMS05IC44bC0xNS44IDQuNGMtNi43IDEuOS0xMy44LS45LTE3LjUtNi43bC0yLTMuMWMtNi05LjQtMTYuNC0xNS4xLTI3LjYtMTUuMXMtMjEuNiA1LjctMjcuNiAxNS4xbC02LjEgOS41Yy0xLjQgMi4yLTMuNCA0LjEtNS43IDUuM0wzMTIgMzMwLjFjLTE4LjEgMTAuMS0yNS41IDMyLjQtMTcgNTEuM2w1LjUgMTIuNGM4LjYgMTkuMiAzMC43IDI4LjUgNTAuNSAyMS4xbDIuNi0xYzEwLTMuNyAyMS4zLTIuMiAyOS45IDQuMWwxLjUgMS4xYzM3LjItMjkuNSA2NC4xLTcxLjQgNzQuNC0xMTkuNXpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0xNDQuNSA5Mi4xYy0yLjEgOC42IDMuMSAxNy4zIDExLjYgMTkuNGwzMiA4YzguNiAyLjEgMTcuMy0zLjEgMTkuNC0xMS42cy0zLjEtMTcuMy0xMS42LTE5LjRsLTMyLThjLTguNi0yLjEtMTcuMyAzLjEtMTkuNCAxMS42em05Mi0yMGMtMi4xIDguNiAzLjEgMTcuMyAxMS42IDE5LjRzMTcuMy0zLjEgMTkuNC0xMS42bDgtMzJjMi4xLTguNi0zLjEtMTcuMy0xMS42LTE5LjRzLTE3LjMgMy4xLTE5LjQgMTEuNmwtOCAzMnpNMzQzLjIgMTEzLjdjLTcuOS00LTE3LjUtLjctMjEuNSA3LjJsLTE2IDMyYy00IDcuOS0uNyAxNy41IDcuMiAyMS41czE3LjUgLjcgMjEuNS03LjJsMTYtMzJjNC03LjkgLjctMTcuNS03LjItMjEuNXpcIl1cbn07XG52YXIgZmFHbG9iZUFzaWEgPSBmYUVhcnRoQXNpYTtcbnZhciBmYUlkQ2FyZENsaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWQtY2FyZC1jbGlwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJpZC1jYXJkLWFsdFwiXSwgXCJmNDdmXCIsIFwiTTI1NiAwaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDY0SDE5MnY0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFY2NEg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjR6TTE3NiA0MzcuM2MwIDUuOSA0LjggMTAuNyAxMC43IDEwLjdIMzg5LjNjNS45IDAgMTAuNy00LjggMTAuNy0xMC43YzAtMjkuNS0yMy45LTUzLjMtNTMuMy01My4zSDIyOS4zYy0yOS41IDAtNTMuMyAyMy45LTUzLjMgNTMuM3pNMjg4IDM1MmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpcIl1cbn07XG52YXIgZmFJZENhcmRBbHQgPSBmYUlkQ2FyZENsaXA7XG52YXIgZmFNYWduaWZ5aW5nR2xhc3NQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtcGx1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2VhcmNoLXBsdXNcIl0sIFwiZjAwZVwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0xODQgMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjMyaDY0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIzMlYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NjRIMTIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDY0djY0elwiXVxufTtcbnZhciBmYVNlYXJjaFBsdXMgPSBmYU1hZ25pZnlpbmdHbGFzc1BsdXM7XG52YXIgZmFUaHVtYnNVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0aHVtYnMtdXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzcsIDYxNTc1XSwgXCJmMTY0XCIsIFwiTTMxMy40IDMyLjljMjYgNS4yIDQyLjkgMzAuNSAzNy43IDU2LjVsLTIuMyAxMS40Yy01LjMgMjYuNy0xNS4xIDUyLjEtMjguOCA3NS4ySDQ2NGMyNi41IDAgNDggMjEuNSA0OCA0OGMwIDE4LjUtMTAuNSAzNC42LTI1LjkgNDIuNkM0OTcgMjc1LjQgNTA0IDI4OC45IDUwNCAzMDRjMCAyMy40LTE2LjggNDIuOS0zOC45IDQ3LjFjNC40IDcuMyA2LjkgMTUuOCA2LjkgMjQuOWMwIDIxLjMtMTMuOSAzOS40LTMzLjEgNDUuNmMuNyAzLjMgMS4xIDYuOCAxLjEgMTAuNGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyOTQuNWMtMTkgMC0zNy41LTUuNi01My4zLTE2LjFsLTM4LjUtMjUuN0MxNzYgNDIwLjQgMTYwIDM5MC40IDE2MCAzNTguM1YzMjAgMjcyIDI0Ny4xYzAtMjkuMiAxMy4zLTU2LjcgMzYtNzVsNy40LTUuOWMyNi41LTIxLjIgNDQuNi01MSA1MS4yLTg0LjJsMi4zLTExLjRjNS4yLTI2IDMwLjUtNDIuOSA1Ni41LTM3Ljd6TTMyIDE5Mkg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG52YXIgZmFVc2VyQ2xvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1jbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjRmZFwiLCBcIk0yMjQgMGExMjggMTI4IDAgMSAxIDAgMjU2QTEyOCAxMjggMCAxIDEgMjI0IDB6TTE3OC4zIDMwNGg5MS40YzIwLjYgMCA0MC40IDMuNSA1OC44IDkuOUMzMjMgMzMxIDMyMCAzNDkuMSAzMjAgMzY4YzAgNTkuNSAyOS41IDExMi4xIDc0LjggMTQ0SDI5LjdDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0ek0zNTIgMzY4YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC04MGMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmg0OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg1MTJWMzA0YzAtOC44LTcuMi0xNi0xNi0xNnpcIl1cbn07XG52YXIgZmFIYW5kRG90cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWRvdHMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFsbGVyZ2llc1wiXSwgXCJmNDYxXCIsIFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzM2YzAgMS41IDAgMy4xIC4xIDQuNkw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRzLTE0LjYgNDEuMyAxLjQgNTYuNkwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NEgzMDRjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZWMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjI0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzJ6TTI0MCAzMzZhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHptODAgMTZhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem00OC0xNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwem0tMTYgODBhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyek0yNDAgNDMyYTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bS00OC00OGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6XCJdXG59O1xudmFyIGZhQWxsZXJnaWVzID0gZmFIYW5kRG90cztcbnZhciBmYUZpbGVJbnZvaWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtaW52b2ljZScsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU3MFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTgwIDY0aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0xNiA5NkgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAzMnY2NEgyODhWMjU2SDk2ek0yNDAgNDE2aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI0MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG52YXIgZmFXaW5kb3dNaW5pbWl6ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3aW5kb3ctbWluaW1pemUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NjldLCBcImYyZDFcIiwgXCJNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpcIl1cbn07XG52YXIgZmFNdWdTYXVjZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbXVnLXNhdWNlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiY29mZmVlXCJdLCBcImYwZjRcIiwgXCJNOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJINDQ4aDY0YzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4SDQ4MGMwIDUzLTQzIDk2LTk2IDk2SDE5MmMtNTMgMC05Ni00My05Ni05NlY2NHpNNDgwIDIyNGgzMmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NEg0ODBWMjI0ek0zMiA0MTZINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYUNvZmZlZSA9IGZhTXVnU2F1Y2VyO1xudmFyIGZhQnJ1c2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJ1c2gnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY1NWRcIiwgXCJNMTYyLjQgNmMtMS41LTMuNi01LTYtOC45LTZoLTE5Yy0zLjkgMC03LjUgMi40LTguOSA2TDEwNC45IDU3LjdjLTMuMiA4LTE0LjYgOC0xNy44IDBMNjYuNCA2Yy0xLjUtMy42LTUtNi04LjktNkg0OEMyMS41IDAgMCAyMS41IDAgNDhWMjI0djIyLjRWMjU2SDkuNiAzNzQuNCAzODR2LTkuNlYyMjQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjMwLjVjLTMuOSAwLTcuNSAyLjQtOC45IDZMMjAwLjkgNTcuN2MtMy4yIDgtMTQuNiA4LTE3LjggMEwxNjIuNCA2ek0wIDI4OHYzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGg2NHY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0VjM4NGg2NGMzNS4zIDAgNjQtMjguNyA2NC02NFYyODhIMHpNMTkyIDQzMmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6XCJdXG59O1xudmFyIGZhTWFzayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNmZhXCIsIFwiTTI4OCA2NEM2NCA2NCAwIDE2MCAwIDI3MlM4MCA0NDggMTc2IDQ0OGg4LjRjMjQuMiAwIDQ2LjQtMTMuNyA1Ny4yLTM1LjRsMjMuMi00Ni4zYzQuNC04LjggMTMuMy0xNC4zIDIzLjItMTQuM3MxOC44IDUuNSAyMy4yIDE0LjNsMjMuMiA0Ni4zYzEwLjggMjEuNyAzMyAzNS40IDU3LjIgMzUuNEg0MDBjOTYgMCAxNzYtNjQgMTc2LTE3NnMtNjQtMjA4LTI4OC0yMDh6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSA5NiAyNTZ6bTMyMC02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG52YXIgZmFNYWduaWZ5aW5nR2xhc3NNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYWduaWZ5aW5nLWdsYXNzLW1pbnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzZWFyY2gtbWludXNcIl0sIFwiZjAxMFwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0xMzYgMTg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDI4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxMzZ6XCJdXG59O1xudmFyIGZhU2VhcmNoTWludXMgPSBmYU1hZ25pZnlpbmdHbGFzc01pbnVzO1xudmFyIGZhUnVsZXJWZXJ0aWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdydWxlci12ZXJ0aWNhbCcsXG4gIGljb246IFsyNTYsIDUxMiwgW10sIFwiZjU0OFwiLCBcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEgyMDhjMjYuNSAwIDQ4IDIxLjUgNDggNDhWOTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjY0SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg4MHY2NEgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoODB2NjRIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpcIl1cbn07XG52YXIgZmFVc2VyTGFyZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1sYXJnZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1widXNlci1hbHRcIl0sIFwiZjQwNlwiLCBcIk0yNTYgMjg4QTE0NCAxNDQgMCAxIDAgMjU2IDBhMTQ0IDE0NCAwIDEgMCAwIDI4OHptLTk0LjcgMzJDNzIuMiAzMjAgMCAzOTIuMiAwIDQ4MS4zYzAgMTcgMTMuOCAzMC43IDMwLjcgMzAuN0g0ODEuM2MxNyAwIDMwLjctMTMuOCAzMC43LTMwLjdDNTEyIDM5Mi4yIDQzOS44IDMyMCAzNTAuNyAzMjBIMTYxLjN6XCJdXG59O1xudmFyIGZhVXNlckFsdCA9IGZhVXNlckxhcmdlO1xudmFyIGZhVHJhaW5UcmFtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWluLXRyYW0nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg2NTBdLCBcImU1YjRcIiwgXCJNODYuOCA0OGMtMTIuMiAwLTIzLjYgNS41LTMxLjIgMTVMNDIuNyA3OUMzNC41IDg5LjMgMTkuNCA5MSA5IDgyLjdTLTMgNTkuNCA1LjMgNDlMMTggMzNDMzQuNyAxMi4yIDYwIDAgODYuOCAwSDM2MS4yYzI2LjcgMCA1MiAxMi4yIDY4LjcgMzNsMTIuOCAxNmM4LjMgMTAuNCA2LjYgMjUuNS0zLjggMzMuN3MtMjUuNSA2LjYtMzMuNy0zLjdMMzkyLjUgNjNjLTcuNi05LjUtMTkuMS0xNS0zMS4yLTE1SDI0OFY5Nmg0MGM1MyAwIDk2IDQzIDk2IDk2VjM1MmMwIDMwLjYtMTQuMyA1Ny44LTM2LjYgNzUuNGw2NS41IDY1LjVjNy4xIDcuMSAyLjEgMTkuMS03LjkgMTkuMUgzNjUuM2MtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMjg4IDQ0OEgxNjBsLTU0LjYgNTQuNmMtNiA2LTE0LjEgOS40LTIyLjYgOS40SDQzYy0xMCAwLTE1LTEyLjEtNy45LTE5LjFsNjUuNS02NS41Qzc4LjMgNDA5LjggNjQgMzgyLjYgNjQgMzUyVjE5MmMwLTUzIDQzLTk2IDk2LTk2aDQwVjQ4SDg2Ljh6TTE2MCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMlYxOTJjMC0xNy43LTE0LjMtMzItMzItMzJIMTYwem0zMiAxOTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbnZhciBmYVVzZXJOdXJzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLW51cnNlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmODJmXCIsIFwiTTk2IDEyOFY3MC4yYzAtMTMuMyA4LjMtMjUuMyAyMC44LTMwbDk2LTM2YzcuMi0yLjcgMTUuMi0yLjcgMjIuNSAwbDk2IDM2YzEyLjUgNC43IDIwLjggMTYuNiAyMC44IDMwVjEyOGgtLjNjLjIgMi42IC4zIDUuMyAuMyA4djQwYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4VjEzNmMwLTIuNyAuMS01LjQgLjMtOEg5NnptNDggNDhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MFYxNjBIMTQ0djE2ek0xMTEuOSAzMjcuN2MxMC41LTMuNCAyMS44IC40IDI5LjQgOC41bDcxIDc1LjVjNi4zIDYuNyAxNyA2LjcgMjMuMyAwbDcxLTc1LjVjNy42LTguMSAxOC45LTExLjkgMjkuNC04LjVDNDAxIDM0OC42IDQ0OCA0MDkuNCA0NDggNDgxLjNjMCAxNy0xMy44IDMwLjctMzAuNyAzMC43SDMwLjdDMTMuOCA1MTIgMCA0OTguMiAwIDQ4MS4zYzAtNzEuOSA0Ny0xMzIuNyAxMTEuOS0xNTMuNnpNMjA4IDQ4VjY0SDE5MmMtNC40IDAtOCAzLjYtOCA4Vjg4YzAgNC40IDMuNiA4IDggOGgxNnYxNmMwIDQuNCAzLjYgOCA4IDhoMTZjNC40IDAgOC0zLjYgOC04Vjk2aDE2YzQuNCAwIDgtMy42IDgtOFY3MmMwLTQuNC0zLjYtOC04LThIMjQwVjQ4YzAtNC40LTMuNi04LTgtOEgyMTZjLTQuNCAwLTggMy42LTggOHpcIl1cbn07XG52YXIgZmFTeXJpbmdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N5cmluZ2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxMzddLCBcImY0OGVcIiwgXCJNNDQxIDdsMzIgMzIgMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTUtMTVMNDE3LjkgMTI4bDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTcyLTcyTDI5NSA3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDU1IDU1TDQyMi4xIDU2IDQwNyA0MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwek0yMTAuMyAxNTUuN2w2MS4xLTYxLjFjLjMgLjMgLjYgLjcgMSAxbDE2IDE2IDU2IDU2IDU2IDU2IDE2IDE2Yy4zIC4zIC42IC42IDEgMWwtMTkxIDE5MWMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRIOTcuOUw0MSA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTctNTdWMzI1LjNjMC0xNC45IDUuOS0yOS4xIDE2LjQtMzkuNmw0My4zLTQzLjMgNTcgNTdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ny01NyA0MS40LTQxLjQgNTcgNTdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ny01N3pcIl1cbn07XG52YXIgZmFDbG91ZFN1biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1zdW4nLFxuICBpY29uOiBbNjQwLCA1MTIsIFs5OTI1XSwgXCJmNmM0XCIsIFwiTTI5NC4yIDEuMmM1LjEgMi4xIDguNyA2LjcgOS42IDEyLjFsMTQuMSA4NC43IDg0LjcgMTQuMWM1LjQgLjkgMTAgNC41IDEyLjEgOS42czEuNSAxMC45LTEuNiAxNS40bC0zOC41IDU1Yy0yLjItLjEtNC40LS4yLTYuNy0uMmMtMjMuMyAwLTQ1LjEgNi4yLTY0IDE3LjFsMC0xLjFjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjOC4xIDAgMTUuOS0xIDIzLjQtMi45Yy0zNi42IDE4LjEtNjMuMyA1My4xLTY5LjggOTQuOWwtMjQuNCAxN2MtNC41IDMuMS0xMC4zIDMuOC0xNS40IDEuNnMtOC43LTYuNy05LjYtMTIuMUw5OC4xIDMxNy45IDEzLjQgMzAzLjhjLTUuNC0uOS0xMC00LjUtMTIuMS05LjZzLTEuNS0xMC45IDEuNi0xNS40TDUyLjUgMjA4IDIuOSAxMzcuMmMtMy4yLTQuNS0zLjgtMTAuMy0xLjYtMTUuNHM2LjctOC43IDEyLjEtOS42TDk4LjEgOTguMWwxNC4xLTg0LjdjLjktNS40IDQuNS0xMCA5LjYtMTIuMXMxMC45LTEuNSAxNS40IDEuNkwyMDggNTIuNSAyNzguOCAyLjljNC41LTMuMiAxMC4zLTMuOCAxNS40LTEuNnpNMTQ0IDIwOGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTYzOS45IDQzMS45YzAgNDQuMi0zNS44IDgwLTgwIDgwSDI4OGMtNTMgMC05Ni00My05Ni05NmMwLTQ3LjYgMzQuNi04NyA4MC05NC42bDAtMS4zYzAtNTMgNDMtOTYgOTYtOTZjMzQuOSAwIDY1LjQgMTguNiA4Mi4yIDQ2LjRjMTMtOS4xIDI4LjgtMTQuNCA0NS44LTE0LjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA1LjktLjYgMTEuNy0xLjkgMTcuMmMzNy40IDYuNyA2NS44IDM5LjQgNjUuOCA3OC43elwiXVxufTtcbnZhciBmYVN0b3B3YXRjaDIwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0b3B3YXRjaC0yMCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA2ZlwiLCBcIk0xNzYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgxNlY5OC40QzkyLjMgMTEzLjggMTYgMjAwIDE2IDMwNGMwIDExNC45IDkzLjEgMjA4IDIwOCAyMDhzMjA4LTkzLjEgMjA4LTIwOGMwLTQxLjgtMTIuMy04MC43LTMzLjUtMTEzLjJsMjQuMS0yNC4xYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDM1NS43IDE0M2MtMjguMS0yMy02Mi4yLTM4LjgtOTkuNy00NC42VjY0aDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE3NnpNMjg4IDIwNGMyOC43IDAgNTIgMjMuMyA1MiA1MnY5NmMwIDI4LjctMjMuMyA1Mi01MiA1MnMtNTItMjMuMy01Mi01MlYyNTZjMC0yOC43IDIzLjMtNTIgNTItNTJ6bS0xMiA1MnY5NmMwIDYuNiA1LjQgMTIgMTIgMTJzMTItNS40IDEyLTEyVjI1NmMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMnpNMTU5LjUgMjQ0Yy01LjQgMC0xMC4yIDMuNS0xMS45IDguNmwtLjYgMS43Yy0zLjUgMTAuNS0xNC44IDE2LjEtMjUuMyAxMi42cy0xNi4xLTE0LjgtMTIuNi0yNS4zbC42LTEuN2M3LjItMjEuNSAyNy4yLTM1LjkgNDkuOC0zNS45YzI5IDAgNTIuNSAyMy41IDUyLjUgNTIuNXYyLjJjMCAxMy40LTQuOSAyNi40LTEzLjggMzYuNGwtMzkgNDMuOWMtNi4yIDctMTAgMTUuNy0xMC45IDI0LjlIMTkyYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMEgxMjhjLTExIDAtMjAtOS0yMC0yMFYzNjguM2MwLTIwLjYgNy41LTQwLjQgMjEuMi01NS44bDM5LTQzLjljMi40LTIuNyAzLjctNi4yIDMuNy05Ljh2LTIuMmMwLTYuOS01LjYtMTIuNS0xMi41LTEyLjV6XCJdXG59O1xudmFyIGZhU3F1YXJlRnVsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtZnVsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODk5NywgMTI4OTk4LCAxMjg5OTksIDEyOTAwMCwgMTI5MDAxLCAxMjkwMDIsIDEyOTAwMywgMTEwMzUsIDExMDM2XSwgXCJmNDVjXCIsIFwiTTAgMEg1MTJWNTEySDBWMHpcIl1cbn07XG52YXIgZmFNYWduZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFnbmV0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5NTIyXSwgXCJmMDc2XCIsIFwiTTAgMTYwdjk2QzAgMzc5LjcgMTAwLjMgNDgwIDIyNCA0ODBzMjI0LTEwMC4zIDIyNC0yMjRWMTYwSDMyMHY5NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NlYxNjBIMHptMC0zMkgxMjhWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NHY2NHptMzIwIDBINDQ4VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjR6XCJdXG59O1xudmFyIGZhSmFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2phcicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTUxNlwiLCBcIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwSDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6TTAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0SDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MHptOTYgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZjMC0xNy43LTE0LjMtMzItMzItMzJIOTZ6XCJdXG59O1xudmFyIGZhTm90ZVN0aWNreSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdub3RlLXN0aWNreScsXG4gIGljb246IFs0NDgsIDUxMiwgWzYyMDI2LCBcInN0aWNreS1ub3RlXCJdLCBcImYyNDlcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjg4VjM2OGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NDhWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTQ0OCAzNTJINDAyLjcgMzM2Yy04LjggMC0xNiA3LjItMTYgMTZ2NjYuN1Y0ODBsMzItMzIgNjQtNjQgMzItMzJ6XCJdXG59O1xudmFyIGZhU3RpY2t5Tm90ZSA9IGZhTm90ZVN0aWNreTtcbnZhciBmYUJ1Z1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1Zy1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTQ5MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ3Ny40IDM0OC45YzEuNy05LjQgMi42LTE5IDIuNi0yOC45aDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ3OS43Yy0xLjEtMTQuMS01LTI3LjUtMTEuMS0zOS41Yy43LS42IDEuNC0xLjIgMi4xLTEuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLS43IC43LTEuMyAxLjQtMS45IDIuMUM0MDkuMiAxNjQuMSAzOTMuMSAxNjAgMzc2IDE2MEgyNjRjLTguMyAwLTE2LjMgMS0yNCAyLjhMMzguOCA1LjF6bTM5MiA0MzAuM0wzMzYgMzYwLjdWNDc5LjJjMzYuNi0zLjYgNjkuNy0xOS42IDk0LjgtNDMuOHpNMTY2LjcgMjI3LjNjLTMuNCA5LTUuNiAxOC43LTYuNCAyOC43SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDY0YzAgMjQuNiA1LjUgNDcuOCAxNS40IDY4LjZjLTIuMiAxLjMtNC4yIDIuOS02IDQuOGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjMuMS02My4xYzI0LjUgMjEuOCA1NS44IDM2LjIgOTAuMyAzOS42VjMzNS41TDE2Ni43IDIyNy4zek0zMjAgMGMtNTMgMC05NiA0My05NiA5NnYzLjZjMCAxNS43IDEyLjcgMjguNCAyOC40IDI4LjRIMzg3LjZjMTUuNyAwIDI4LjQtMTIuNyAyOC40LTI4LjRWOTZjMC01My00My05Ni05Ni05NnpcIl1cbn07XG52YXIgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC1mcm9tLXdhdGVyLXB1bXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0YjZcIiwgXCJNMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhWMjU2SDQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHY5NmMwIDggMiAxNS42IDUuNCAyMi4yYzMuOC0xLjcgNy44LTMuMSAxMi00LjFjMTMuMS0zLjEgMjYuNy05LjggMzcuMy0xOC42YzIyLjItMTguNyA1NC4zLTIwLjEgNzguMS0zLjRjMTggMTIuNCA0MC4xIDIwLjMgNTkuMiAyMC4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzIzLjgtMTYuNyA1NS44LTE1LjMgNzguMSAzLjRjMTAuNiA4LjggMjQuMiAxNS42IDM3LjMgMTguNmM0LjIgMSA4LjIgMi40IDEyIDQuMUM1NzQgNDE1LjYgNTc2IDQwOCA1NzYgNDAwVjMwNGMwLTI2LjUtMjEuNS00OC00OC00OEg0ODBsMC0xNDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw0MTYgMTA5LjMgNDE2IDI1NkgyODhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMTEyek0zMDYuNSA0MjEuOWMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNDcgNDM3LjQgMjE5LjUgNDQ4IDE5MiA0NDhjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSA1MDEuNyAxNTkgNTEyIDE5MiA1MTJjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNSAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNC0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQzOS40IDQzNy4yIDQxMC45IDQ0OCAzODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjF6XCJdXG59O1xudmFyIGZhQm9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib25lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NDYwXSwgXCJmNWQ3XCIsIFwiTTE1My43IDE0NC44YzYuOSAxNi4zIDIwLjYgMzEuMiAzOC4zIDMxLjJIMzg0YzE3LjcgMCAzMS40LTE0LjkgMzguMy0zMS4yQzQzNC40IDExNi4xIDQ2Mi45IDk2IDQ5NiA5NmM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDMwLjQtMTcgNTYuOS00MiA3MC40Yy0zLjYgMS45LTYgNS41LTYgOS42czIuNCA3LjcgNiA5LjZjMjUgMTMuNSA0MiA0MCA0MiA3MC40YzAgNDQuMi0zNS44IDgwLTgwIDgwYy0zMy4xIDAtNjEuNi0yMC4xLTczLjctNDguOEM0MTUuNCAzNTAuOSA0MDEuNyAzMzYgMzg0IDMzNkgxOTJjLTE3LjcgMC0zMS40IDE0LjktMzguMyAzMS4yQzE0MS42IDM5NS45IDExMy4xIDQxNiA4MCA0MTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwYzAtMzAuNCAxNy01Ni45IDQyLTcwLjRjMy42LTEuOSA2LTUuNSA2LTkuNnMtMi40LTcuNy02LTkuNkMxNyAyMzIuOSAwIDIwNi40IDAgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwYzMzLjEgMCA2MS42IDIwLjEgNzMuNyA0OC44elwiXVxufTtcbnZhciBmYVVzZXJJbmp1cmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItaW5qdXJlZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjcyOFwiLCBcIk0yNDAgODBIMzQyLjdjLTcuOS0xOS41LTIwLjQtMzYuNS0zNi4yLTQ5LjlMMjQwIDgwem0zNy43LTY4LjJDMjYxLjMgNC4yIDI0My4yIDAgMjI0IDBjLTUzLjcgMC05OS43IDMzLjEtMTE4LjcgODBoODEuNGw5MS02OC4yek0yMjQgMjU2YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4YzAtNS40LS4zLTEwLjgtMS0xNkg5N2MtLjcgNS4yLTEgMTAuNi0xIDE2YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4ek0xMjQgMzEyLjRjLTkuNyAzLjEtMTkuMSA3LTI4IDExLjdWNTEySDI0My43TDE4MS41IDQwOC4yIDEyNCAzMTIuNHptMzMtNy4yTDIwNC4zIDM4NEgyNzJjNDQuMiAwIDgwIDM1LjggODAgODBjMCAxOC02IDM0LjYtMTYgNDhoODIuM2MxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuN0M0NDggMzgzLjggMzY4LjIgMzA0IDI2OS43IDMwNEgxNzguM2MtNy4yIDAtMTQuMyAuNC0yMS4zIDEuM3pNMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDY0VjM0NS40QzI0LjkgMzc4LjEgMCA0MjcuMyAwIDQ4Mi4zek0zMjAgNDY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDIyMy41bDU3LjEgOTUuMkMzMDMgNTA3LjIgMzIwIDQ4Ny42IDMyMCA0NjR6XCJdXG59O1xudmFyIGZhRmFjZVNhZFRlYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1zYWQtdGVhcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU0NiwgXCJzYWQtdGVhclwiXSwgXCJmNWI0XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDBBMjU2IDI1NiAwIDEgMCAwIDI1NnptMjQwIDgwYzAtOC44IDcuMi0xNiAxNi0xNmM0NSAwIDg1LjYgMjAuNSAxMTUuNyA1My4xYzYgNi41IDUuNiAxNi42LS45IDIyLjZzLTE2LjYgNS42LTIyLjYtLjljLTI1LTI3LjEtNTcuNC00Mi45LTkyLjMtNDIuOWMtOC44IDAtMTYtNy4yLTE2LTE2em0tODAgODBjLTI2LjUgMC00OC0yMS00OC00N2MwLTIwIDI4LjYtNjAuNCA0MS42LTc3LjdjMy4yLTQuNCA5LjYtNC40IDEyLjggMEMxNzkuNiAzMDguNiAyMDggMzQ5IDIwOCAzNjljMCAyNi0yMS41IDQ3LTQ4IDQ3ek0zNjcuNiAyMDhhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xudmFyIGZhU2FkVGVhciA9IGZhRmFjZVNhZFRlYXI7XG52YXIgZmFQbGFuZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjA3MlwiLCBcIk00ODIuMyAxOTJjMzQuMiAwIDkzLjcgMjkgOTMuNyA2NGMwIDM2LTU5LjUgNjQtOTMuNyA2NGwtMTE2LjYgMEwyNjUuMiA0OTUuOWMtNS43IDEwLTE2LjMgMTYuMS0yNy44IDE2LjFsLTU2LjIgMGMtMTAuNiAwLTE4LjMtMTAuMi0xNS40LTIwLjRsNDktMTcxLjZMMTEyIDMyMCA2OC44IDM3Ny42Yy0zIDQtNy44IDYuNC0xMi44IDYuNGwtNDIgMGMtNy44IDAtMTQtNi4zLTE0LTE0YzAtMS4zIC4yLTIuNiAuNS0zLjlMMzIgMjU2IC41IDE0NS45Yy0uNC0xLjMtLjUtMi42LS41LTMuOWMwLTcuOCA2LjMtMTQgMTQtMTRsNDIgMGM1IDAgOS44IDIuNCAxMi44IDYuNEwxMTIgMTkybDEwMi45IDAtNDktMTcxLjZDMTYyLjkgMTAuMiAxNzAuNiAwIDE4MS4yIDBsNTYuMiAwYzExLjUgMCAyMi4xIDYuMiAyNy44IDE2LjFMMzY1LjcgMTkybDExNi42IDB6XCJdXG59O1xudmFyIGZhVGVudEFycm93c0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVudC1hcnJvd3MtZG93bicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU4MVwiLCBcIk0yMDkuOCAxMTEuOWMtOC45LTkuOS0yNC0xMC43LTMzLjktMS44bC0zOS45IDM2TDEzNiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM4OCAxMC43IDg4IDI0bDAgMTIyLjEtMzkuOS0zNmMtOS45LTguOS0yNS04LjEtMzMuOSAxLjhzLTguMSAyNSAxLjggMzMuOWw4MCA3MmM5LjEgOC4yIDIzIDguMiAzMi4xIDBsODAtNzJjOS45LTguOSAxMC43LTI0IDEuOC0zMy45em0zNTIgMGMtOC45LTkuOS0yNC0xMC43LTMzLjktMS44bC0zOS45IDM2VjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0VjE0Ni4xbC0zOS45LTM2Yy05LjktOC45LTI1LTguMS0zMy45IDEuOHMtOC4xIDI1IDEuOCAzMy45bDgwIDcyYzkuMSA4LjIgMjMgOC4yIDMyLjEgMGw4MC03MmM5LjktOC45IDEwLjctMjQgMS44LTMzLjl6TTMwNy40IDE2Ni41Yy0xMS41LTguNy0yNy4zLTguNy0zOC44IDBsLTE2OCAxMjhjLTYuNiA1LTExIDEyLjUtMTIuMyAyMC43bC0yNCAxNjBjLTEuNCA5LjIgMS4zIDE4LjYgNy40IDI1LjZTODYuNyA1MTIgOTYgNTEySDI0MGgxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYzNjEuOWMwLTUuNSA0LjQtOS45IDkuOS05LjljMy43IDAgNy4yIDIuMSA4LjggNS41bDY4LjQgMTM2LjhjNS40IDEwLjggMTYuNSAxNy43IDI4LjYgMTcuN0g0NjRoMTZjOS4zIDAgMTguMi00LjEgMjQuMi0xMS4xczguOC0xNi40IDcuNC0yNS42bC0yNC0xNjBjLTEuMi04LjItNS42LTE1LjctMTIuMy0yMC43bC0xNjgtMTI4elwiXVxufTtcbnZhciBmYUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzY0LCA1MTIsIFsxMDA2OSwgMTAwNzEsIDYxNzM4XSwgXCIyMVwiLCBcIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NFYzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY2NHpNMzIgNDgwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpcIl1cbn07XG52YXIgZmFBcnJvd3NTcGluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy1zcGluJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGJiXCIsIFwiTTI1NiA5NmMzOC40IDAgNzMuNyAxMy41IDEwMS4zIDM2LjFsLTMyLjYgMzIuNmMtNC42IDQuNi01LjkgMTEuNS0zLjUgMTcuNHM4LjMgOS45IDE0LjggOS45SDQ0OGM4LjggMCAxNi03LjIgMTYtMTZWNjRjMC02LjUtMy45LTEyLjMtOS45LTE0LjhzLTEyLjktMS4xLTE3LjQgMy41bC0zNCAzNEMzNjMuNCA1Mi42IDMxMi4xIDMyIDI1NiAzMmMtMTAuOSAwLTIxLjUgLjgtMzIgMi4zVjk5LjJjMTAuMy0yLjEgMjEtMy4yIDMyLTMuMnpNMTMyLjEgMTU0LjdsMzIuNiAzMi42YzQuNiA0LjYgMTEuNSA1LjkgMTcuNCAzLjVzOS45LTguMyA5LjktMTQuOFY2NGMwLTguOC03LjItMTYtMTYtMTZINjRjLTYuNSAwLTEyLjMgMy45LTE0LjggOS45cy0xLjEgMTIuOSAzLjUgMTcuNGwzNCAzNEM1Mi42IDE0OC42IDMyIDE5OS45IDMyIDI1NmMwIDEwLjkgLjggMjEuNSAyLjMgMzJIOTkuMmMtMi4xLTEwLjMtMy4yLTIxLTMuMi0zMmMwLTM4LjQgMTMuNS03My43IDM2LjEtMTAxLjN6TTQ3Ny43IDIyNEg0MTIuOGMyLjEgMTAuMyAzLjIgMjEgMy4yIDMyYzAgMzguNC0xMy41IDczLjctMzYuMSAxMDEuM2wtMzIuNi0zMi42Yy00LjYtNC42LTExLjUtNS45LTE3LjQtMy41cy05LjkgOC4zLTkuOSAxNC44VjQ0OGMwIDguOCA3LjIgMTYgMTYgMTZINDQ4YzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC0zNC0zNEM0NTkuNCAzNjMuNCA0ODAgMzEyLjEgNDgwIDI1NmMwLTEwLjktLjgtMjEuNS0yLjMtMzJ6TTI1NiA0MTZjLTM4LjQgMC03My43LTEzLjUtMTAxLjMtMzYuMWwzMi42LTMyLjZjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNHMtOC4zLTkuOS0xNC44LTkuOUg2NGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyYzAgNi41IDMuOSAxMi4zIDkuOSAxNC44czEyLjkgMS4xIDE3LjQtMy41bDM0LTM0QzE0OC42IDQ1OS40IDE5OS45IDQ4MCAyNTYgNDgwYzEwLjkgMCAyMS41LS44IDMyLTIuM1Y0MTIuOGMtMTAuMyAyLjEtMjEgMy4yLTMyIDMuMnpcIl1cbn07XG52YXIgZmFQcmludCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmludCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODQyNCwgMTI4NDM4LCA5MTEzXSwgXCJmMDJmXCIsIFwiTTEyOCAwQzkyLjcgMCA2NCAyOC43IDY0IDY0djk2aDY0VjY0SDM1NC43TDM4NCA5My4zVjE2MGg2NFY5My4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDQwMCAxOC43QzM4OCA2LjcgMzcxLjcgMCAzNTQuNyAwSDEyOHpNMzg0IDM1MnYzMiA2NEgxMjhWMzg0IDM2OCAzNTJIMzg0em02NCAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0djk2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDY0djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFYzODR6TTQzMiAyNDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbnZhciBmYVR1cmtpc2hMaXJhU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0dXJraXNoLWxpcmEtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW1widHJ5XCIsIFwidHVya2lzaC1saXJhXCJdLCBcImUyYmJcIiwgXCJNOTYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTkuM0wyNDcuMiA2NS4yYzE3LTQuOSAzNC43IDUgMzkuNiAyMnMtNSAzNC43LTIyIDM5LjZMMTI4IDE2NS45djI5LjRsMTE5LjItMzQuMWMxNy00LjkgMzQuNyA1IDM5LjYgMjJzLTUgMzQuNy0yMiAzOS42TDEyOCAyNjEuOVY0MTZoNjMuOGM2OC4yIDAgMTI0LjQtNTMuNSAxMjcuOC0xMjEuNmwuNC04Yy45LTE3LjcgMTUuOS0zMS4yIDMzLjYtMzAuNHMzMS4yIDE1LjkgMzAuNCAzMy42bC0uNCA4QzM3OC41IDM5OS44IDI5NC4xIDQ4MCAxOTEuOCA0ODBIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4MC4xbC0yMy4yIDYuNmMtMTcgNC45LTM0LjctNS0zOS42LTIyczUtMzQuNyAyMi0zOS42TDY0IDIxMy42VjE4NC4xbC0yMy4yIDYuNmMtMTcgNC45LTM0LjctNS0zOS42LTIyczUtMzQuNyAyMi0zOS42TDY0IDExNy42VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYVRyeSA9IGZhVHVya2lzaExpcmFTaWduO1xudmFyIGZhVHVya2lzaExpcmEgPSBmYVR1cmtpc2hMaXJhU2lnbjtcbnZhciBmYURvbGxhclNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9sbGFyLXNpZ24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjgxNzgsIDYxNzgxLCBcImRvbGxhclwiLCBcInVzZFwiXSwgXCIyNFwiLCBcIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2Ny43YzEuNiAuMiAzLjEgLjQgNC43IC43Yy40IC4xIC43IC4xIDEuMSAuMmw0OCA4LjhjMTcuNCAzLjIgMjguOSAxOS45IDI1LjcgMzcuMnMtMTkuOSAyOC45LTM3LjIgMjUuN2wtNDcuNS04LjdjLTMxLjMtNC42LTU4LjktMS41LTc4LjMgNi4ycy0yNy4yIDE4LjMtMjkgMjguMWMtMiAxMC43LS41IDE2LjcgMS4yIDIwLjRjMS44IDMuOSA1LjUgOC4zIDEyLjggMTMuMmMxNi4zIDEwLjcgNDEuMyAxNy43IDczLjcgMjYuM2wyLjkgLjhjMjguNiA3LjYgNjMuNiAxNi44IDg5LjYgMzMuOGMxNC4yIDkuMyAyNy42IDIxLjkgMzUuOSAzOS41YzguNSAxNy45IDEwLjMgMzcuOSA2LjQgNTkuMmMtNi45IDM4LTMzLjEgNjMuNC02NS42IDc2LjdjLTEzLjcgNS42LTI4LjYgOS4yLTQ0LjQgMTFWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0NS4xYy0uNC0uMS0uOS0uMS0xLjMtLjJsLS4yIDAgMCAwYy0yNC40LTMuOC02NC41LTE0LjMtOTEuNS0yNi4zYy0xNi4xLTcuMi0yMy40LTI2LjEtMTYuMi00Mi4yczI2LjEtMjMuNCA0Mi4yLTE2LjJjMjAuOSA5LjMgNTUuMyAxOC41IDc1LjIgMjEuNmMzMS45IDQuNyA1OC4yIDIgNzYtNS4zYzE2LjktNi45IDI0LjYtMTYuOSAyNi44LTI4LjljMS45LTEwLjYgLjQtMTYuNy0xLjMtMjAuNGMtMS45LTQtNS42LTguNC0xMy0xMy4zYy0xNi40LTEwLjctNDEuNS0xNy43LTc0LTI2LjNsLTIuOC0uNyAwIDBDMTE5LjQgMjc5LjMgODQuNCAyNzAgNTguNCAyNTNjLTE0LjItOS4zLTI3LjUtMjItMzUuOC0zOS42Yy04LjQtMTcuOS0xMC4xLTM3LjktNi4xLTU5LjJDMjMuNyAxMTYgNTIuMyA5MS4yIDg0LjggNzguM2MxMy4zLTUuMyAyNy45LTguOSA0My4yLTExVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbnZhciBmYURvbGxhciA9IGZhRG9sbGFyU2lnbjtcbnZhciBmYVVzZCA9IGZhRG9sbGFyU2lnbjtcbnZhciBmYVggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneCcsXG4gIGljb246IFszODQsIDUxMiwgWzEyMF0sIFwiNThcIiwgXCJNMzc2LjYgODQuNWMxMS4zLTEzLjYgOS41LTMzLjgtNC4xLTQ1LjFzLTMzLjgtOS41LTQ1LjEgNC4xTDE5MiAyMDYgNTYuNiA0My41QzQ1LjMgMjkuOSAyNS4xIDI4LjEgMTEuNSAzOS40Uy0zLjkgNzAuOSA3LjQgODQuNUwxNTAuMyAyNTYgNy40IDQyNy41Yy0xMS4zIDEzLjYtOS41IDMzLjggNC4xIDQ1LjFzMzMuOCA5LjUgNDUuMS00LjFMMTkyIDMwNiAzMjcuNCA0NjguNWMxMS4zIDEzLjYgMzEuNSAxNS40IDQ1LjEgNC4xczE1LjQtMzEuNSA0LjEtNDUuMUwyMzMuNyAyNTYgMzc2LjYgODQuNXpcIl1cbn07XG52YXIgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFnbmlmeWluZy1nbGFzcy1kb2xsYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNlYXJjaC1kb2xsYXJcIl0sIFwiZjY4OFwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0yMjggMTA0YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMHYxNGMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjMxMmMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFYyOTguMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjEwNHpcIl1cbn07XG52YXIgZmFTZWFyY2hEb2xsYXIgPSBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhcjtcbnZhciBmYVVzZXJzR2VhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2Vycy1nZWFyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2Vycy1jb2dcIl0sIFwiZjUwOVwiLCBcIk0xNDQgMTYwQTgwIDgwIDAgMSAwIDE0NCAwYTgwIDgwIDAgMSAwIDAgMTYwem0zNjggMEE4MCA4MCAwIDEgMCA1MTIgMGE4MCA4MCAwIDEgMCAwIDE2MHpNMCAyOTguN0MwIDMxMC40IDkuNiAzMjAgMjEuMyAzMjBIMjM0LjdjLjIgMCAuNCAwIC43IDBjLTI2LjYtMjMuNS00My4zLTU3LjgtNDMuMy05NmMwLTcuNiAuNy0xNSAxLjktMjIuM2MtMTMuNi02LjMtMjguNy05LjctNDQuNi05LjdIMTA2LjdDNDcuOCAxOTIgMCAyMzkuOCAwIDI5OC43ek0zMjAgMzIwYzI0IDAgNDUuOS04LjggNjIuNy0yMy4zYzIuNS0zLjcgNS4yLTcuMyA4LTEwLjdjMi43LTMuMyA1LjctNi4xIDktOC4zQzQxMCAyNjIuMyA0MTYgMjQzLjkgNDE2IDIyNGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnM0MyA5NiA5NiA5NnptNjUuNCA2MC4yYy0xMC4zLTUuOS0xOC4xLTE2LjItMjAuOC0yOC4ySDI2MS4zQzE4Ny43IDM1MiAxMjggNDExLjcgMTI4IDQ4NS4zYzAgMTQuNyAxMS45IDI2LjcgMjYuNyAyNi43SDQ1NS4yYy0yLjEtNS4yLTMuMi0xMC45LTMuMi0xNi40di0zYy0xLjMtLjctMi43LTEuNS00LTIuM2wtMi42IDEuNWMtMTYuOCA5LjctNDAuNSA4LTU0LjctOS43Yy00LjUtNS42LTguNi0xMS41LTEyLjQtMTcuNmwtLjEtLjItLjEtLjItMi40LTQuMS0uMS0uMi0uMS0uMmMtMy40LTYuMi02LjQtMTIuNi05LTE5LjNjLTguMi0yMS4yIDIuMi00Mi42IDE5LTUyLjNsMi43LTEuNWMwLS44IDAtMS41IDAtMi4zczAtMS41IDAtMi4zbC0yLjctMS41ek01MzMuMyAxOTJINDkwLjdjLTE1LjkgMC0zMSAzLjUtNDQuNiA5LjdjMS4zIDcuMiAxLjkgMTQuNyAxLjkgMjIuM2MwIDE3LjQtMy41IDMzLjktOS43IDQ5YzIuNSAuOSA0LjkgMiA3LjEgMy4zbDIuNiAxLjVjMS4zLS44IDIuNi0xLjYgNC0yLjN2LTNjMC0xOS40IDEzLjMtMzkuMSAzNS44LTQyLjZjNy45LTEuMiAxNi0xLjkgMjQuMi0xLjlzMTYuMyAuNiAyNC4yIDEuOWMyMi41IDMuNSAzNS44IDIzLjIgMzUuOCA0Mi42djNjMS4zIC43IDIuNyAxLjUgNCAyLjNsMi42LTEuNWMxNi44LTkuNyA0MC41LTggNTQuNyA5LjdjMi4zIDIuOCA0LjUgNS44IDYuNiA4LjdjLTIuMS01Ny4xLTQ5LTEwMi43LTEwNi42LTEwMi43em05MS4zIDE2My45YzYuMy0zLjYgOS41LTExLjEgNi44LTE4Yy0yLjEtNS41LTQuNi0xMC44LTcuNC0xNS45bC0yLjMtNGMtMy4xLTUuMS02LjUtOS45LTEwLjItMTQuNWMtNC42LTUuNy0xMi43LTYuNy0xOS0zbC0yLjkgMS43Yy05LjIgNS4zLTIwLjQgNC0yOS42LTEuM3MtMTYuMS0xNC41LTE2LjEtMjUuMXYtMy40YzAtNy4zLTQuOS0xMy44LTEyLjEtMTQuOWMtNi41LTEtMTMuMS0xLjUtMTkuOS0xLjVzLTEzLjQgLjUtMTkuOSAxLjVjLTcuMiAxLjEtMTIuMSA3LjYtMTIuMSAxNC45djMuNGMwIDEwLjYtNi45IDE5LjgtMTYuMSAyNS4xcy0yMC40IDYuNi0yOS42IDEuM2wtMi45LTEuN2MtNi4zLTMuNi0xNC40LTIuNi0xOSAzYy0zLjcgNC42LTcuMSA5LjUtMTAuMiAxNC42bC0yLjMgMy45Yy0yLjggNS4xLTUuMyAxMC40LTcuNCAxNS45Yy0yLjYgNi44IC41IDE0LjMgNi44IDE3LjlsMi45IDEuN2M5LjIgNS4zIDEzLjcgMTUuOCAxMy43IDI2LjRzLTQuNSAyMS4xLTEzLjcgMjYuNGwtMyAxLjdjLTYuMyAzLjYtOS41IDExLjEtNi44IDE3LjljMi4xIDUuNSA0LjYgMTAuNyA3LjQgMTUuOGwyLjQgNC4xYzMgNS4xIDYuNCA5LjkgMTAuMSAxNC41YzQuNiA1LjcgMTIuNyA2LjcgMTkgM2wyLjktMS43YzkuMi01LjMgMjAuNC00IDI5LjYgMS4zczE2LjEgMTQuNSAxNi4xIDI1LjF2My40YzAgNy4zIDQuOSAxMy44IDEyLjEgMTQuOWM2LjUgMSAxMy4xIDEuNSAxOS45IDEuNXMxMy40LS41IDE5LjktMS41YzcuMi0xLjEgMTIuMS03LjYgMTIuMS0xNC45di0zLjRjMC0xMC42IDYuOS0xOS44IDE2LjEtMjUuMXMyMC40LTYuNiAyOS42LTEuM2wyLjkgMS43YzYuMyAzLjYgMTQuNCAyLjYgMTktM2MzLjctNC42IDcuMS05LjQgMTAuMS0xNC41bDIuNC00LjJjMi44LTUuMSA1LjMtMTAuMyA3LjQtMTUuOGMyLjYtNi44LS41LTE0LjMtNi44LTE3LjlsLTMtMS43Yy05LjItNS4zLTEzLjctMTUuOC0xMy43LTI2LjRzNC41LTIxLjEgMTMuNy0yNi40bDMtMS43ek00NzIgMzg0YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6XCJdXG59O1xudmFyIGZhVXNlcnNDb2cgPSBmYVVzZXJzR2VhcjtcbnZhciBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLW1pbGl0YXJ5LXBvaW50aW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTRhXCIsIFwiTTI0Ni45IDE0LjFDMjM0IDE1LjIgMjI0IDI2IDIyNCAzOWMwIDEzLjggMTEuMiAyNSAyNSAyNUg0MDBjOC44IDAgMTYtNy4yIDE2LTE2VjE3LjRDNDE2IDggNDA4IC43IDM5OC43IDEuNEwyNDYuOSAxNC4xek0yNDAgMTEyYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZIMjQxLjZjLTEgNS4yLTEuNiAxMC41LTEuNiAxNnpNNzIgMjI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwSDIyNHY4OS40TDM4Ni44IDIzMC41Yy0xMy4zLTQuMy0yNy4zLTYuNS00MS42LTYuNUgyNDAgNzJ6bTM0NS43IDIwLjlMMjQ2LjYgNDE2SDQxNlYzNjkuN2w1My42IDkwLjZjMTEuMiAxOSAzNS44IDI1LjMgNTQuOCAxNC4xczI1LjMtMzUuOCAxNC4xLTU0LjhMNDYyLjMgMjkwLjhjLTExLjItMTguOS0yNi42LTM0LjUtNDQuNi00NS45ek0yMjQgNDQ4djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMlY0NDhIMjI0elwiXVxufTtcbnZhciBmYUJ1aWxkaW5nQ29sdW1ucyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1jb2x1bW5zJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJiYW5rXCIsIFwiaW5zdGl0dXRpb25cIiwgXCJtdXNldW1cIiwgXCJ1bml2ZXJzaXR5XCJdLCBcImYxOWNcIiwgXCJNMjQzLjQgMi42bC0yMjQgOTZjLTE0IDYtMjEuOCAyMS0xOC43IDM1LjhTMTYuOCAxNjAgMzIgMTYwdjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDU2YzEzLjMgMCAyNC0xMC43IDI0LTI0di04YzE1LjIgMCAyOC4zLTEwLjcgMzEuMy0yNS42cy00LjgtMjkuOS0xOC43LTM1LjhsLTIyNC05NmMtOC0zLjQtMTcuMi0zLjQtMjUuMiAwek0xMjggMjI0SDY0VjQyMC4zYy0uNiAuMy0xLjIgLjctMS44IDEuMWwtNDggMzJjLTExLjcgNy44LTE3IDIyLjQtMTIuOSAzNS45UzE3LjkgNTEyIDMyIDUxMkg0ODBjMTQuMSAwIDI2LjUtOS4yIDMwLjYtMjIuN3MtMS4xLTI4LjEtMTIuOS0zNS45bC00OC0zMmMtLjYtLjQtMS4yLS43LTEuOC0xLjFWMjI0SDM4NFY0MTZIMzQ0VjIyNEgyODBWNDE2SDIzMlYyMjRIMTY4VjQxNkgxMjhWMjI0ek0yNTYgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbnZhciBmYUJhbmsgPSBmYUJ1aWxkaW5nQ29sdW1ucztcbnZhciBmYUluc3RpdHV0aW9uID0gZmFCdWlsZGluZ0NvbHVtbnM7XG52YXIgZmFNdXNldW0gPSBmYUJ1aWxkaW5nQ29sdW1ucztcbnZhciBmYVVuaXZlcnNpdHkgPSBmYUJ1aWxkaW5nQ29sdW1ucztcbnZhciBmYVVtYnJlbGxhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VtYnJlbGxhJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMGU5XCIsIFwiTTI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ5LjdDNDUxLjggNjMuNCA1NTcuNyAxNjEgNTczLjkgMjg1LjljMiAxNS42LTE3LjMgMjQuNC0yNy44IDEyLjdDNTMyLjEgMjgzIDUwNC44IDI3MiA0ODAgMjcyYy0zOC43IDAtNzEgMjcuNS03OC40IDY0LjFjLTEuNyA4LjctOC43IDE1LjktMTcuNiAxNS45cy0xNS44LTcuMi0xNy42LTE1LjlDMzU5IDI5OS41IDMyNi43IDI3MiAyODggMjcycy03MSAyNy41LTc4LjQgNjQuMWMtMS43IDguNy04LjcgMTUuOS0xNy42IDE1LjlzLTE1LjgtNy4yLTE3LjYtMTUuOUMxNjcgMjk5LjUgMTM0LjcgMjcyIDk2IDI3MmMtMjQuOCAwLTUyLjEgMTEtNjYuMSAyNi43QzE5LjQgMzEwLjQgLjEgMzAxLjUgMi4xIDI4NS45QzE4LjMgMTYxIDEyNC4yIDYzLjQgMjU2IDQ5LjdWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMzA0YzEyLjMgMCAyMy41IDQuNiAzMiAxMi4yVjQzMC42YzAgNDUtMzYuNSA4MS40LTgxLjQgODEuNGMtMzAuOCAwLTU5LTE3LjQtNzIuOC00NWwtMi4zLTQuN2MtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDIuMyA0LjdjMyA1LjkgOSA5LjYgMTUuNiA5LjZjOS42IDAgMTcuNC03LjggMTcuNC0xNy40VjMxNi4yYzguNS03LjYgMTkuNy0xMi4yIDMyLTEyLjJ6XCJdXG59O1xudmFyIGZhVHJvd2VsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Ryb3dlbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU4OVwiLCBcIk0zNDMuOSAyMTMuNEwyNDUuMyAzMTJsNjUuNCA2NS40YzcuOSA3LjkgMTEuMSAxOS40IDguNCAzMC4zcy0xMC44IDE5LjYtMjEuNSAyMi45bC0yNTYgODBjLTExLjQgMy41LTIzLjggLjUtMzIuMi03LjlTLTIuMSA0ODEuOCAxLjUgNDcwLjVsODAtMjU2YzMuMy0xMC43IDEyLTE4LjkgMjIuOS0yMS41czIyLjQgLjUgMzAuMyA4LjRMMjAwIDI2Ni43bDk4LjYtOTguNmMtMTQuMy0xNC42LTE0LjItMzggLjMtNTIuNWw5NS40LTk1LjRjMjYuOS0yNi45IDcwLjUtMjYuOSA5Ny41IDBzMjYuOSA3MC41IDAgOTcuNWwtOTUuNCA5NS40Yy0xNC41IDE0LjUtMzcuOSAxNC42LTUyLjUgLjN6XCJdXG59O1xudmFyIGZhRCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTAwXSwgXCI0NFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyaDk2YzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRzLTEwMC4zIDIyNC0yMjQgMjI0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnptMTYwIDBINjRWNDE2aDk2Yzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwcy03MS42LTE2MC0xNjAtMTYwelwiXVxufTtcbnZhciBmYVN0YXBsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RhcGxlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTVhZlwiLCBcIk02NDAgMjk5LjNWMzA0IDQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEg1MTIgNDQ4IDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ0OFYzNjhIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIxOS40TDMzLjggMjE0QzE0LjIgMjEwLjUgMCAxOTMuNSAwIDE3My43YzAtOC45IDIuOS0xNy41IDguMi0yNC42bDM1LjYtNDcuNUM3Ni43IDU3LjggMTI4LjIgMzIgMTgyLjkgMzJjMjcgMCA1My42IDYuMyA3Ny44IDE4LjRMNTg2LjkgMjEzLjVDNjE5LjUgMjI5LjcgNjQwIDI2MyA2NDAgMjk5LjN6TTQ0OCAzMDRWMjg4TDEyOCAyMzAuOVYzMDRINDQ4elwiXVxufTtcbnZhciBmYU1hc2tzVGhlYXRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrcy10aGVhdGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTE3LCBcInRoZWF0ZXItbWFza3NcIl0sIFwiZjYzMFwiLCBcIk03NC42IDM3My4yYzQxLjcgMzYuMSAxMDggODIuNSAxNjYuMSA3My43YzYuMS0uOSAxMi4xLTIuNSAxOC00LjVjLTkuMi0xMi4zLTE3LjMtMjQuNC0yNC4yLTM1LjRjLTIxLjktMzUtMjguOC03NS4yLTI1LjktMTEzLjZjLTIwLjYgNC4xLTM5LjIgMTMtNTQuNyAyNS40Yy02LjUgNS4yLTE2LjMgMS4zLTE0LjgtN2M2LjQtMzMuNSAzMy02MC45IDY4LjItNjYuM2MyLjYtLjQgNS4zLS43IDcuOS0uOGwxOS40LTEzMS4zYzItMTMuOCA4LTMyLjcgMjUtNDUuOUMyNzguMiA1My4yIDMxMC41IDM3IDM2My4yIDMyLjJjLS44LS43LTEuNi0xLjQtMi40LTIuMUMzNDAuNiAxNC41IDI4OC40LTExLjUgMTc1LjcgNS42UzIwLjUgNjMgNS43IDgzLjlDMCA5MS45LS44IDEwMiAuNiAxMTEuOEwyNC44IDI3Ni4xYzUuNSAzNy4zIDIxLjUgNzIuNiA0OS44IDk3LjJ6bTg3LjctMjE5LjZjNC40LTMuMSAxMC44LTIgMTEuOCAzLjNjLjEgLjUgLjIgMS4xIC4zIDEuNmMzLjIgMjEuOC0xMS42IDQyLTMzLjEgNDUuM3MtNDEuNS0xMS44LTQ0LjctMzMuNWMtLjEtLjUtLjEtMS4xLS4yLTEuNmMtLjYtNS40IDUuMi04LjQgMTAuMy02LjdjOSAzIDE4LjggMy45IDI4LjcgMi40czE5LjEtNS4zIDI2LjgtMTAuOHpNMjYxLjYgMzkwYzI5LjQgNDYuOSA3OS41IDExMC45IDEzNy42IDExOS43czEyNC41LTM3LjUgMTY2LjEtNzMuN2MyOC4zLTI0LjUgNDQuMy01OS44IDQ5LjgtOTcuMmwyNC4yLTE2NC4zYzEuNC05LjggLjYtMTkuOS01LjEtMjcuOWMtMTQuOC0yMC45LTU3LjMtNjEuMi0xNzAtNzguM1MyOTkuNCA3Ny4yIDI3OS4yIDkyLjhjLTcuOCA2LTExLjUgMTUuNC0xMi45IDI1LjJMMjQyLjEgMjgyLjNjLTUuNSAzNy4zLS40IDc1LjggMTkuNiAxMDcuN3pNNDA0LjUgMjM1LjNjLTcuNy01LjUtMTYuOC05LjMtMjYuOC0xMC44cy0xOS44LS42LTI4LjcgMi40Yy01LjEgMS43LTEwLjktMS4zLTEwLjMtNi43Yy4xLS41IC4xLTEuMSAuMi0xLjZjMy4yLTIxLjggMjMuMi0zNi44IDQ0LjctMzMuNXMzNi4zIDIzLjUgMzMuMSA0NS4zYy0uMSAuNS0uMiAxLjEtLjMgMS42Yy0xIDUuMy03LjQgNi40LTExLjggMy4zem0xMzYuMiAxNS41Yy0xIDUuMy03LjQgNi40LTExLjggMy4zYy03LjctNS41LTE2LjgtOS4zLTI2LjgtMTAuOHMtMTkuOC0uNi0yOC43IDIuNGMtNS4xIDEuNy0xMC45LTEuMy0xMC4zLTYuN2MuMS0uNSAuMS0xLjEgLjItMS42YzMuMi0yMS44IDIzLjItMzYuOCA0NC43LTMzLjVzMzYuMyAyMy41IDMzLjEgNDUuM2MtLjEgLjUtLjIgMS4xLS4zIDEuNnpNNTMwIDM1MC4yYy0xOS42IDQ0LjctNjYuOCA3Mi41LTExNi44IDY0LjlzLTg3LjEtNDguMi05My05Ni43Yy0xLTguMyA4LjktMTIuMSAxNS4yLTYuN2MyMy45IDIwLjggNTMuNiAzNS4zIDg3IDQwLjNzNjYuMSAuMSA5NC45LTEyLjhjNy42LTMuNCAxNiAzLjIgMTIuNiAxMC45elwiXVxufTtcbnZhciBmYVRoZWF0ZXJNYXNrcyA9IGZhTWFza3NUaGVhdGVyO1xudmFyIGZhS2lwU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdraXAtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTFjNFwiLCBcIk0zNDAuOCA4OC4zYzEzLjQtMTEuNSAxNS0zMS43IDMuNS00NS4xcy0zMS43LTE1LTQ1LjEtMy41TDEyOCAxODYuNFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCA0Ni4zIDY0IDY0VjIyNEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjUuNkwyOTkuMiA0NzIuM2MxMy40IDExLjUgMzMuNiA5LjkgNDUuMS0zLjVzOS45LTMzLjYtMy41LTQ1LjFMMTgyLjUgMjg4SDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxODIuNUwzNDAuOCA4OC4zelwiXVxufTtcbnZhciBmYUhhbmRQb2ludExlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1wb2ludC1sZWZ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMGE1XCIsIFwiTTMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOHMxNC4zIDMyIDMyIDMybDIwOCAwIDAtNjRMMzIgOTZ6TTE5MiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMHptLTY0LTY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQ4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem05NiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMHptODgtOTZsLS42IDBjNS40IDkuNCA4LjYgMjAuMyA4LjYgMzJjMCAxMy4yLTQgMjUuNC0xMC44IDM1LjZjMjQuOSA4LjcgNDIuOCAzMi41IDQyLjggNjAuNGMwIDExLjctMy4xIDIyLjYtOC42IDMybDguNiAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwbDAtNjEuN2MwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTExLjYtMTEuNkM0MjkuNSA3Ny41IDM5Ni45IDY0IDM2MyA2NGwtMjcgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4OGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtNTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDU2YzAgMzkuOC0zMi4yIDcyLTcyIDcyelwiXVxufTtcbnZhciBmYUhhbmRzaGFrZVNpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kc2hha2Utc2ltcGxlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzA5LCBcImhhbmRzaGFrZS1hbHRcIl0sIFwiZjRjNlwiLCBcIk0zMjMuNCA4NS4ybC05Ni44IDc4LjRjLTE2LjEgMTMtMTkuMiAzNi40LTcgNTMuMWMxMi45IDE3LjggMzggMjEuMyA1NS4zIDcuOGw5OS4zLTc3LjJjNy01LjQgMTctNC4yIDIyLjUgMi44czQuMiAxNy0yLjggMjIuNWwtMjAuOSAxNi4yTDU1MC4yIDM1Mkg1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTc2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDUxNmgtNC0uN2wtMy45LTIuNUw0MzQuOCA3OWMtMTUuMy05LjgtMzMuMi0xNS01MS40LTE1Yy0yMS44IDAtNDMgNy41LTYwIDIxLjJ6bTIyLjggMTI0LjRsLTUxLjcgNDAuMkMyNjMgMjc0LjQgMjE3LjMgMjY4IDE5My43IDIzNS42Yy0yMi4yLTMwLjUtMTYuNi03My4xIDEyLjctOTYuOGw4My4yLTY3LjNjLTExLjYtNC45LTI0LjEtNy40LTM2LjgtNy40QzIzNCA2NCAyMTUuNyA2OS42IDIwMCA4MGwtNzIgNDhINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgxNTYuMmw5MS40IDgzLjRjMTkuNiAxNy45IDQ5LjkgMTYuNSA2Ny44LTMuMWM1LjUtNi4xIDkuMi0xMy4yIDExLjEtMjAuNmwxNyAxNS42YzE5LjUgMTcuOSA0OS45IDE2LjYgNjcuOC0yLjljNC41LTQuOSA3LjgtMTAuNiA5LjktMTYuNWMxOS40IDEzIDQ1LjggMTAuMyA2Mi4xLTcuNWMxNy45LTE5LjUgMTYuNi00OS45LTIuOS02Ny44bC0xMzQuMi0xMjN6XCJdXG59O1xudmFyIGZhSGFuZHNoYWtlQWx0ID0gZmFIYW5kc2hha2VTaW1wbGU7XG52YXIgZmFKZXRGaWdodGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2pldC1maWdodGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJmaWdodGVyLWpldFwiXSwgXCJmMGZiXCIsIFwiTTE2MCAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNEgyOTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwTDM4NCAxOTJINTAwLjRjNy43IDAgMTUuMyAxLjQgMjIuNSA0LjFMNjI1IDIzNC40YzkgMy40IDE1IDEyIDE1IDIxLjZzLTYgMTguMi0xNSAyMS42TDUyMi45IDMxNS45Yy03LjIgMi43LTE0LjggNC4xLTIyLjUgNC4xSDM4NEwyODAgNDY0aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjMyMEgxNjBsLTU0LjYgNTQuNmMtNiA2LTE0LjEgOS40LTIyLjYgOS40SDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDgyLjdjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRMMTYwIDE5MmgzMlY0OGgtOGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTgwIDI0MGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg4MHpcIl1cbn07XG52YXIgZmFGaWdodGVySmV0ID0gZmFKZXRGaWdodGVyO1xudmFyIGZhU3F1YXJlU2hhcmVOb2RlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtc2hhcmUtbm9kZXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInNoYXJlLWFsdC1zcXVhcmVcIl0sIFwiZjFlMVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTM4NCAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTE1LjQgMC0yOS41LTUuNC00MC42LTE0LjVMMTk0LjEgMjU2bDg1LjMgNDYuNWMxMS05LjEgMjUuMi0xNC41IDQwLjYtMTQuNWMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTIuNSAuMS00LjkgLjQtNy4zTDE3NC41IDMwMGMtMTEuNyAxMi4zLTI4LjIgMjAtNDYuNSAyMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxOC4zIDAgMzQuOCA3LjcgNDYuNSAyMGw4MS45LTQ0LjdjLS4zLTIuNC0uNC00LjktLjQtNy4zYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6XCJdXG59O1xudmFyIGZhU2hhcmVBbHRTcXVhcmUgPSBmYVNxdWFyZVNoYXJlTm9kZXM7XG52YXIgZmFCYXJjb2RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhcmNvZGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwMmFcIiwgXCJNMjQgMzJDMTAuNyAzMiAwIDQyLjcgMCA1NlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRIMjR6bTg4IDBjLTguOCAwLTE2IDcuMi0xNiAxNlY0NjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlY0OGMwLTguOC03LjItMTYtMTYtMTZ6bTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgxODR6bTk2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyODB6TTQ0OCA1NlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRINDcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptLTY0LThWNDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWNDhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6XCJdXG59O1xudmFyIGZhUGx1c01pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdXMtbWludXMnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImU0M2NcIiwgXCJNMjI0IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjE0NEg0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgxNjBWMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjA4SDMzNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyMjRWMzJ6TTAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xudmFyIGZhVmlkZW8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlkZW8nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInZpZGVvLWNhbWVyYVwiXSwgXCJmMDNkXCIsIFwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NFYzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHpNNTU5LjEgOTkuOGMxMC40IDUuNiAxNi45IDE2LjQgMTYuOSAyOC4yVjM4NGMwIDExLjgtNi41IDIyLjYtMTYuOSAyOC4ycy0yMyA1LTMyLjktMS42bC05Ni02NEw0MTYgMzM3LjFWMzIwIDE5MiAxNzQuOWwxNC4yLTkuNSA5Ni02NGM5LjgtNi41IDIyLjQtNy4yIDMyLjktMS42elwiXVxufTtcbnZhciBmYVZpZGVvQ2FtZXJhID0gZmFWaWRlbztcbnZhciBmYUdyYWR1YXRpb25DYXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ3JhZHVhdGlvbi1jYXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc4OTEsIFwibW9ydGFyLWJvYXJkXCJdLCBcImYxOWRcIiwgXCJNMzIwIDMyYy04LjEgMC0xNi4xIDEuNC0yMy43IDQuMUwxNS44IDEzNy40QzYuMyAxNDAuOSAwIDE0OS45IDAgMTYwczYuMyAxOS4xIDE1LjggMjIuNmw1Ny45IDIwLjlDNTcuMyAyMjkuMyA0OCAyNTkuOCA0OCAyOTEuOXYyOC4xYzAgMjguNC0xMC44IDU3LjctMjIuMyA4MC44Yy02LjUgMTMtMTMuOSAyNS44LTIyLjUgMzcuNkMwIDQ0Mi43LS45IDQ0OC4zIC45IDQ1My40czYgOC45IDExLjIgMTAuMmw2NCAxNmM0LjIgMS4xIDguNyAuMyAxMi40LTJzNi4zLTYuMSA3LjEtMTAuNGM4LjYtNDIuOCA0LjMtODEuMi0yLjEtMTA4LjdDOTAuMyAzNDQuMyA4NiAzMjkuOCA4MCAzMTYuNVYyOTEuOWMwLTMwLjIgMTAuMi01OC43IDI3LjktODEuNWMxMi45LTE1LjUgMjkuNi0yOCA0OS4yLTM1LjdsMTU3LTYxLjdjOC4yLTMuMiAxNy41IC44IDIwLjcgOXMtLjggMTcuNS05IDIwLjdsLTE1NyA2MS43Yy0xMi40IDQuOS0yMy4zIDEyLjQtMzIuMiAyMS42bDE1OS42IDU3LjZjNy42IDIuNyAxNS42IDQuMSAyMy43IDQuMXMxNi4xLTEuNCAyMy43LTQuMUw2MjQuMiAxODIuNmM5LjUtMy40IDE1LjgtMTIuNSAxNS44LTIyLjZzLTYuMy0xOS4xLTE1LjgtMjIuNkwzNDMuNyAzNi4xQzMzNi4xIDMzLjQgMzI4LjEgMzIgMzIwIDMyek0xMjggNDA4YzAgMzUuMyA4NiA3MiAxOTIgNzJzMTkyLTM2LjcgMTkyLTcyTDQ5Ni43IDI2Mi42IDM1NC41IDMxNGMtMTEuMSA0LTIyLjggNi0zNC41IDZzLTIzLjUtMi0zNC41LTZMMTQzLjMgMjYyLjYgMTI4IDQwOHpcIl1cbn07XG52YXIgZmFNb3J0YXJCb2FyZCA9IGZhR3JhZHVhdGlvbkNhcDtcbnZhciBmYUhhbmRIb2xkaW5nTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWhvbGRpbmctbWVkaWNhbCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTA1Y1wiLCBcIk0yMjQgMjRWODBIMTY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg1NnY1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxNzZoNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0SDMyMFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek01NTkuNyAzOTIuMmMxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgxNiA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODggMjcyIDE5My43Yy0yOS4xIDAtNTcuMyA5LjktODAgMjhMNjguOCAzODRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDE5MiAzNTIuNWMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zem0tMzY3LTguMmwuOSAwIDAgMGMtLjMgMC0uNiAwLS45IDB6XCJdXG59O1xudmFyIGZhUGVyc29uQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWNpcmNsZS1jaGVjaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUzZVwiLCBcIk0xMTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNTYuOUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmgyOS43YzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDQ0LjkgNzQuN2MtMTYuMSAxNy42LTI4LjYgMzguNS0zNi42IDYxLjVjLTEuOS0xLjgtMy41LTMuOS00LjktNi4zTDIzMiAyNTYuOVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDE1MnptMTM2IDE2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIxMS4zLTQzLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDQxNiAzODUuNGwtMjguNy0yOC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDcyLTcyYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42elwiXVxufTtcbnZhciBmYVR1cm5VcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0dXJuLXVwJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTA1NDgsIFwibGV2ZWwtdXAtYWx0XCJdLCBcImYzYmZcIiwgXCJNMzUwIDE3Ny41YzMuOC04LjggMi0xOS00LjYtMjZsLTEzNi0xNDRDMjA0LjkgMi43IDE5OC42IDAgMTkyIDBzLTEyLjkgMi43LTE3LjQgNy41bC0xMzYgMTQ0Yy02LjYgNy04LjQgMTcuMi00LjYgMjZzMTIuNSAxNC41IDIyIDE0LjVoODhsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDgwIDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0xOTJoODhjOS42IDAgMTguMi01LjcgMjItMTQuNXpcIl1cbn07XG52YXIgZmFMZXZlbFVwQWx0ID0gZmFUdXJuVXA7XG52YXIgaWNvbnMgPSB7XG4gIGZhMDogZmEwLFxuICBmYTE6IGZhMSxcbiAgZmEyOiBmYTIsXG4gIGZhMzogZmEzLFxuICBmYTQ6IGZhNCxcbiAgZmE1OiBmYTUsXG4gIGZhNjogZmE2LFxuICBmYTc6IGZhNyxcbiAgZmE4OiBmYTgsXG4gIGZhOTogZmE5LFxuICBmYUZpbGxEcmlwOiBmYUZpbGxEcmlwLFxuICBmYUFycm93c1RvQ2lyY2xlOiBmYUFycm93c1RvQ2lyY2xlLFxuICBmYUNpcmNsZUNoZXZyb25SaWdodDogZmFDaXJjbGVDaGV2cm9uUmlnaHQsXG4gIGZhQ2hldnJvbkNpcmNsZVJpZ2h0OiBmYUNoZXZyb25DaXJjbGVSaWdodCxcbiAgZmFBdDogZmFBdCxcbiAgZmFUcmFzaENhbjogZmFUcmFzaENhbixcbiAgZmFUcmFzaEFsdDogZmFUcmFzaEFsdCxcbiAgZmFUZXh0SGVpZ2h0OiBmYVRleHRIZWlnaHQsXG4gIGZhVXNlclhtYXJrOiBmYVVzZXJYbWFyayxcbiAgZmFVc2VyVGltZXM6IGZhVXNlclRpbWVzLFxuICBmYVN0ZXRob3Njb3BlOiBmYVN0ZXRob3Njb3BlLFxuICBmYU1lc3NhZ2U6IGZhTWVzc2FnZSxcbiAgZmFDb21tZW50QWx0OiBmYUNvbW1lbnRBbHQsXG4gIGZhSW5mbzogZmFJbmZvLFxuICBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyOiBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyLFxuICBmYUNvbXByZXNzQWx0OiBmYUNvbXByZXNzQWx0LFxuICBmYUV4cGxvc2lvbjogZmFFeHBsb3Npb24sXG4gIGZhRmlsZUxpbmVzOiBmYUZpbGVMaW5lcyxcbiAgZmFGaWxlQWx0OiBmYUZpbGVBbHQsXG4gIGZhRmlsZVRleHQ6IGZhRmlsZVRleHQsXG4gIGZhV2F2ZVNxdWFyZTogZmFXYXZlU3F1YXJlLFxuICBmYVJpbmc6IGZhUmluZyxcbiAgZmFCdWlsZGluZ1VuOiBmYUJ1aWxkaW5nVW4sXG4gIGZhRGljZVRocmVlOiBmYURpY2VUaHJlZSxcbiAgZmFDYWxlbmRhckRheXM6IGZhQ2FsZW5kYXJEYXlzLFxuICBmYUNhbGVuZGFyQWx0OiBmYUNhbGVuZGFyQWx0LFxuICBmYUFuY2hvckNpcmNsZUNoZWNrOiBmYUFuY2hvckNpcmNsZUNoZWNrLFxuICBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodDogZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsXG4gIGZhVm9sbGV5YmFsbDogZmFWb2xsZXliYWxsLFxuICBmYVZvbGxleWJhbGxCYWxsOiBmYVZvbGxleWJhbGxCYWxsLFxuICBmYUFycm93c1VwVG9MaW5lOiBmYUFycm93c1VwVG9MaW5lLFxuICBmYVNvcnREb3duOiBmYVNvcnREb3duLFxuICBmYVNvcnREZXNjOiBmYVNvcnREZXNjLFxuICBmYUNpcmNsZU1pbnVzOiBmYUNpcmNsZU1pbnVzLFxuICBmYU1pbnVzQ2lyY2xlOiBmYU1pbnVzQ2lyY2xlLFxuICBmYURvb3JPcGVuOiBmYURvb3JPcGVuLFxuICBmYVJpZ2h0RnJvbUJyYWNrZXQ6IGZhUmlnaHRGcm9tQnJhY2tldCxcbiAgZmFTaWduT3V0QWx0OiBmYVNpZ25PdXRBbHQsXG4gIGZhQXRvbTogZmFBdG9tLFxuICBmYVNvYXA6IGZhU29hcCxcbiAgZmFJY29uczogZmFJY29ucyxcbiAgZmFIZWFydE11c2ljQ2FtZXJhQm9sdDogZmFIZWFydE11c2ljQ2FtZXJhQm9sdCxcbiAgZmFNaWNyb3Bob25lTGluZXNTbGFzaDogZmFNaWNyb3Bob25lTGluZXNTbGFzaCxcbiAgZmFNaWNyb3Bob25lQWx0U2xhc2g6IGZhTWljcm9waG9uZUFsdFNsYXNoLFxuICBmYUJyaWRnZUNpcmNsZUNoZWNrOiBmYUJyaWRnZUNpcmNsZUNoZWNrLFxuICBmYVB1bXBNZWRpY2FsOiBmYVB1bXBNZWRpY2FsLFxuICBmYUZpbmdlcnByaW50OiBmYUZpbmdlcnByaW50LFxuICBmYUhhbmRQb2ludFJpZ2h0OiBmYUhhbmRQb2ludFJpZ2h0LFxuICBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uOiBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uLFxuICBmYVNlYXJjaExvY2F0aW9uOiBmYVNlYXJjaExvY2F0aW9uLFxuICBmYUZvcndhcmRTdGVwOiBmYUZvcndhcmRTdGVwLFxuICBmYVN0ZXBGb3J3YXJkOiBmYVN0ZXBGb3J3YXJkLFxuICBmYUZhY2VTbWlsZUJlYW06IGZhRmFjZVNtaWxlQmVhbSxcbiAgZmFTbWlsZUJlYW06IGZhU21pbGVCZWFtLFxuICBmYUZsYWdDaGVja2VyZWQ6IGZhRmxhZ0NoZWNrZXJlZCxcbiAgZmFGb290YmFsbDogZmFGb290YmFsbCxcbiAgZmFGb290YmFsbEJhbGw6IGZhRm9vdGJhbGxCYWxsLFxuICBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uOiBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uLFxuICBmYUNyb3A6IGZhQ3JvcCxcbiAgZmFBbmdsZXNEb3duOiBmYUFuZ2xlc0Rvd24sXG4gIGZhQW5nbGVEb3VibGVEb3duOiBmYUFuZ2xlRG91YmxlRG93bixcbiAgZmFVc2Vyc1JlY3RhbmdsZTogZmFVc2Vyc1JlY3RhbmdsZSxcbiAgZmFQZW9wbGVSb29mOiBmYVBlb3BsZVJvb2YsXG4gIGZhUGVvcGxlTGluZTogZmFQZW9wbGVMaW5lLFxuICBmYUJlZXJNdWdFbXB0eTogZmFCZWVyTXVnRW1wdHksXG4gIGZhQmVlcjogZmFCZWVyLFxuICBmYURpYWdyYW1QcmVkZWNlc3NvcjogZmFEaWFncmFtUHJlZGVjZXNzb3IsXG4gIGZhQXJyb3dVcExvbmc6IGZhQXJyb3dVcExvbmcsXG4gIGZhTG9uZ0Fycm93VXA6IGZhTG9uZ0Fycm93VXAsXG4gIGZhRmlyZUZsYW1lU2ltcGxlOiBmYUZpcmVGbGFtZVNpbXBsZSxcbiAgZmFCdXJuOiBmYUJ1cm4sXG4gIGZhUGVyc29uOiBmYVBlcnNvbixcbiAgZmFNYWxlOiBmYU1hbGUsXG4gIGZhTGFwdG9wOiBmYUxhcHRvcCxcbiAgZmFGaWxlQ3N2OiBmYUZpbGVDc3YsXG4gIGZhTWVub3JhaDogZmFNZW5vcmFoLFxuICBmYVRydWNrUGxhbmU6IGZhVHJ1Y2tQbGFuZSxcbiAgZmFSZWNvcmRWaW55bDogZmFSZWNvcmRWaW55bCxcbiAgZmFGYWNlR3JpblN0YXJzOiBmYUZhY2VHcmluU3RhcnMsXG4gIGZhR3JpblN0YXJzOiBmYUdyaW5TdGFycyxcbiAgZmFCb25nOiBmYUJvbmcsXG4gIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZzogZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLFxuICBmYVBhc3RhZmFyaWFuaXNtOiBmYVBhc3RhZmFyaWFuaXNtLFxuICBmYUFycm93RG93blVwQWNyb3NzTGluZTogZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsXG4gIGZhU3Bvb246IGZhU3Bvb24sXG4gIGZhVXRlbnNpbFNwb29uOiBmYVV0ZW5zaWxTcG9vbixcbiAgZmFKYXJXaGVhdDogZmFKYXJXaGVhdCxcbiAgZmFFbnZlbG9wZXNCdWxrOiBmYUVudmVsb3Blc0J1bGssXG4gIGZhTWFpbEJ1bGs6IGZhTWFpbEJ1bGssXG4gIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uOiBmYUZpbGVDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFDaXJjbGVIOiBmYUNpcmNsZUgsXG4gIGZhSG9zcGl0YWxTeW1ib2w6IGZhSG9zcGl0YWxTeW1ib2wsXG4gIGZhUGFnZXI6IGZhUGFnZXIsXG4gIGZhQWRkcmVzc0Jvb2s6IGZhQWRkcmVzc0Jvb2ssXG4gIGZhQ29udGFjdEJvb2s6IGZhQ29udGFjdEJvb2ssXG4gIGZhU3RyaWtldGhyb3VnaDogZmFTdHJpa2V0aHJvdWdoLFxuICBmYUs6IGZhSyxcbiAgZmFMYW5kbWFya0ZsYWc6IGZhTGFuZG1hcmtGbGFnLFxuICBmYVBlbmNpbDogZmFQZW5jaWwsXG4gIGZhUGVuY2lsQWx0OiBmYVBlbmNpbEFsdCxcbiAgZmFCYWNrd2FyZDogZmFCYWNrd2FyZCxcbiAgZmFDYXJldFJpZ2h0OiBmYUNhcmV0UmlnaHQsXG4gIGZhQ29tbWVudHM6IGZhQ29tbWVudHMsXG4gIGZhUGFzdGU6IGZhUGFzdGUsXG4gIGZhRmlsZUNsaXBib2FyZDogZmFGaWxlQ2xpcGJvYXJkLFxuICBmYUNvZGVQdWxsUmVxdWVzdDogZmFDb2RlUHVsbFJlcXVlc3QsXG4gIGZhQ2xpcGJvYXJkTGlzdDogZmFDbGlwYm9hcmRMaXN0LFxuICBmYVRydWNrUmFtcEJveDogZmFUcnVja1JhbXBCb3gsXG4gIGZhVHJ1Y2tMb2FkaW5nOiBmYVRydWNrTG9hZGluZyxcbiAgZmFVc2VyQ2hlY2s6IGZhVXNlckNoZWNrLFxuICBmYVZpYWxWaXJ1czogZmFWaWFsVmlydXMsXG4gIGZhU2hlZXRQbGFzdGljOiBmYVNoZWV0UGxhc3RpYyxcbiAgZmFCbG9nOiBmYUJsb2csXG4gIGZhVXNlck5pbmphOiBmYVVzZXJOaW5qYSxcbiAgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmU6IGZhUGVyc29uQXJyb3dVcEZyb21MaW5lLFxuICBmYVNjcm9sbFRvcmFoOiBmYVNjcm9sbFRvcmFoLFxuICBmYVRvcmFoOiBmYVRvcmFoLFxuICBmYUJyb29tQmFsbDogZmFCcm9vbUJhbGwsXG4gIGZhUXVpZGRpdGNoOiBmYVF1aWRkaXRjaCxcbiAgZmFRdWlkZGl0Y2hCcm9vbUJhbGw6IGZhUXVpZGRpdGNoQnJvb21CYWxsLFxuICBmYVRvZ2dsZU9mZjogZmFUb2dnbGVPZmYsXG4gIGZhQm94QXJjaGl2ZTogZmFCb3hBcmNoaXZlLFxuICBmYUFyY2hpdmU6IGZhQXJjaGl2ZSxcbiAgZmFQZXJzb25Ecm93bmluZzogZmFQZXJzb25Ecm93bmluZyxcbiAgZmFBcnJvd0Rvd245MTogZmFBcnJvd0Rvd245MSxcbiAgZmFTb3J0TnVtZXJpY0Rlc2M6IGZhU29ydE51bWVyaWNEZXNjLFxuICBmYVNvcnROdW1lcmljRG93bkFsdDogZmFTb3J0TnVtZXJpY0Rvd25BbHQsXG4gIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ6IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsXG4gIGZhR3JpblRvbmd1ZVNxdWludDogZmFHcmluVG9uZ3VlU3F1aW50LFxuICBmYVNwcmF5Q2FuOiBmYVNwcmF5Q2FuLFxuICBmYVRydWNrTW9uc3RlcjogZmFUcnVja01vbnN0ZXIsXG4gIGZhVzogZmFXLFxuICBmYUVhcnRoQWZyaWNhOiBmYUVhcnRoQWZyaWNhLFxuICBmYUdsb2JlQWZyaWNhOiBmYUdsb2JlQWZyaWNhLFxuICBmYVJhaW5ib3c6IGZhUmFpbmJvdyxcbiAgZmFDaXJjbGVOb3RjaDogZmFDaXJjbGVOb3RjaCxcbiAgZmFUYWJsZXRTY3JlZW5CdXR0b246IGZhVGFibGV0U2NyZWVuQnV0dG9uLFxuICBmYVRhYmxldEFsdDogZmFUYWJsZXRBbHQsXG4gIGZhUGF3OiBmYVBhdyxcbiAgZmFDbG91ZDogZmFDbG91ZCxcbiAgZmFUcm93ZWxCcmlja3M6IGZhVHJvd2VsQnJpY2tzLFxuICBmYUZhY2VGbHVzaGVkOiBmYUZhY2VGbHVzaGVkLFxuICBmYUZsdXNoZWQ6IGZhRmx1c2hlZCxcbiAgZmFIb3NwaXRhbFVzZXI6IGZhSG9zcGl0YWxVc2VyLFxuICBmYVRlbnRBcnJvd0xlZnRSaWdodDogZmFUZW50QXJyb3dMZWZ0UmlnaHQsXG4gIGZhR2F2ZWw6IGZhR2F2ZWwsXG4gIGZhTGVnYWw6IGZhTGVnYWwsXG4gIGZhQmlub2N1bGFyczogZmFCaW5vY3VsYXJzLFxuICBmYU1pY3JvcGhvbmVTbGFzaDogZmFNaWNyb3Bob25lU2xhc2gsXG4gIGZhQm94VGlzc3VlOiBmYUJveFRpc3N1ZSxcbiAgZmFNb3RvcmN5Y2xlOiBmYU1vdG9yY3ljbGUsXG4gIGZhQmVsbENvbmNpZXJnZTogZmFCZWxsQ29uY2llcmdlLFxuICBmYUNvbmNpZXJnZUJlbGw6IGZhQ29uY2llcmdlQmVsbCxcbiAgZmFQZW5SdWxlcjogZmFQZW5SdWxlcixcbiAgZmFQZW5jaWxSdWxlcjogZmFQZW5jaWxSdWxlcixcbiAgZmFQZW9wbGVBcnJvd3M6IGZhUGVvcGxlQXJyb3dzLFxuICBmYVBlb3BsZUFycm93c0xlZnRSaWdodDogZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsXG4gIGZhTWFyc0FuZFZlbnVzQnVyc3Q6IGZhTWFyc0FuZFZlbnVzQnVyc3QsXG4gIGZhU3F1YXJlQ2FyZXRSaWdodDogZmFTcXVhcmVDYXJldFJpZ2h0LFxuICBmYUNhcmV0U3F1YXJlUmlnaHQ6IGZhQ2FyZXRTcXVhcmVSaWdodCxcbiAgZmFTY2lzc29yczogZmFTY2lzc29ycyxcbiAgZmFDdXQ6IGZhQ3V0LFxuICBmYVN1blBsYW50V2lsdDogZmFTdW5QbGFudFdpbHQsXG4gIGZhVG9pbGV0c1BvcnRhYmxlOiBmYVRvaWxldHNQb3J0YWJsZSxcbiAgZmFIb2NrZXlQdWNrOiBmYUhvY2tleVB1Y2ssXG4gIGZhVGFibGU6IGZhVGFibGUsXG4gIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodDogZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0LFxuICBmYVRhY2hvZ3JhcGhEaWdpdGFsOiBmYVRhY2hvZ3JhcGhEaWdpdGFsLFxuICBmYURpZ2l0YWxUYWNob2dyYXBoOiBmYURpZ2l0YWxUYWNob2dyYXBoLFxuICBmYVVzZXJzU2xhc2g6IGZhVXNlcnNTbGFzaCxcbiAgZmFDbG92ZXI6IGZhQ2xvdmVyLFxuICBmYVJlcGx5OiBmYVJlcGx5LFxuICBmYU1haWxSZXBseTogZmFNYWlsUmVwbHksXG4gIGZhU3RhckFuZENyZXNjZW50OiBmYVN0YXJBbmRDcmVzY2VudCxcbiAgZmFIb3VzZUZpcmU6IGZhSG91c2VGaXJlLFxuICBmYVNxdWFyZU1pbnVzOiBmYVNxdWFyZU1pbnVzLFxuICBmYU1pbnVzU3F1YXJlOiBmYU1pbnVzU3F1YXJlLFxuICBmYUhlbGljb3B0ZXI6IGZhSGVsaWNvcHRlcixcbiAgZmFDb21wYXNzOiBmYUNvbXBhc3MsXG4gIGZhU3F1YXJlQ2FyZXREb3duOiBmYVNxdWFyZUNhcmV0RG93bixcbiAgZmFDYXJldFNxdWFyZURvd246IGZhQ2FyZXRTcXVhcmVEb3duLFxuICBmYUZpbGVDaXJjbGVRdWVzdGlvbjogZmFGaWxlQ2lyY2xlUXVlc3Rpb24sXG4gIGZhTGFwdG9wQ29kZTogZmFMYXB0b3BDb2RlLFxuICBmYVN3YXRjaGJvb2s6IGZhU3dhdGNoYm9vayxcbiAgZmFQcmVzY3JpcHRpb25Cb3R0bGU6IGZhUHJlc2NyaXB0aW9uQm90dGxlLFxuICBmYUJhcnM6IGZhQmFycyxcbiAgZmFOYXZpY29uOiBmYU5hdmljb24sXG4gIGZhUGVvcGxlR3JvdXA6IGZhUGVvcGxlR3JvdXAsXG4gIGZhSG91cmdsYXNzRW5kOiBmYUhvdXJnbGFzc0VuZCxcbiAgZmFIb3VyZ2xhc3MzOiBmYUhvdXJnbGFzczMsXG4gIGZhSGVhcnRDcmFjazogZmFIZWFydENyYWNrLFxuICBmYUhlYXJ0QnJva2VuOiBmYUhlYXJ0QnJva2VuLFxuICBmYVNxdWFyZVVwUmlnaHQ6IGZhU3F1YXJlVXBSaWdodCxcbiAgZmFFeHRlcm5hbExpbmtTcXVhcmVBbHQ6IGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0LFxuICBmYUZhY2VLaXNzQmVhbTogZmFGYWNlS2lzc0JlYW0sXG4gIGZhS2lzc0JlYW06IGZhS2lzc0JlYW0sXG4gIGZhRmlsbTogZmFGaWxtLFxuICBmYVJ1bGVySG9yaXpvbnRhbDogZmFSdWxlckhvcml6b250YWwsXG4gIGZhUGVvcGxlUm9iYmVyeTogZmFQZW9wbGVSb2JiZXJ5LFxuICBmYUxpZ2h0YnVsYjogZmFMaWdodGJ1bGIsXG4gIGZhQ2FyZXRMZWZ0OiBmYUNhcmV0TGVmdCxcbiAgZmFDaXJjbGVFeGNsYW1hdGlvbjogZmFDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFFeGNsYW1hdGlvbkNpcmNsZTogZmFFeGNsYW1hdGlvbkNpcmNsZSxcbiAgZmFTY2hvb2xDaXJjbGVYbWFyazogZmFTY2hvb2xDaXJjbGVYbWFyayxcbiAgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQ6IGZhQXJyb3dSaWdodEZyb21CcmFja2V0LFxuICBmYVNpZ25PdXQ6IGZhU2lnbk91dCxcbiAgZmFDaXJjbGVDaGV2cm9uRG93bjogZmFDaXJjbGVDaGV2cm9uRG93bixcbiAgZmFDaGV2cm9uQ2lyY2xlRG93bjogZmFDaGV2cm9uQ2lyY2xlRG93bixcbiAgZmFVbmxvY2tLZXlob2xlOiBmYVVubG9ja0tleWhvbGUsXG4gIGZhVW5sb2NrQWx0OiBmYVVubG9ja0FsdCxcbiAgZmFDbG91ZFNob3dlcnNIZWF2eTogZmFDbG91ZFNob3dlcnNIZWF2eSxcbiAgZmFIZWFkcGhvbmVzU2ltcGxlOiBmYUhlYWRwaG9uZXNTaW1wbGUsXG4gIGZhSGVhZHBob25lc0FsdDogZmFIZWFkcGhvbmVzQWx0LFxuICBmYVNpdGVtYXA6IGZhU2l0ZW1hcCxcbiAgZmFDaXJjbGVEb2xsYXJUb1Nsb3Q6IGZhQ2lyY2xlRG9sbGFyVG9TbG90LFxuICBmYURvbmF0ZTogZmFEb25hdGUsXG4gIGZhTWVtb3J5OiBmYU1lbW9yeSxcbiAgZmFSb2FkU3Bpa2VzOiBmYVJvYWRTcGlrZXMsXG4gIGZhRmlyZUJ1cm5lcjogZmFGaXJlQnVybmVyLFxuICBmYUZsYWc6IGZhRmxhZyxcbiAgZmFIYW51a2lhaDogZmFIYW51a2lhaCxcbiAgZmFGZWF0aGVyOiBmYUZlYXRoZXIsXG4gIGZhVm9sdW1lTG93OiBmYVZvbHVtZUxvdyxcbiAgZmFWb2x1bWVEb3duOiBmYVZvbHVtZURvd24sXG4gIGZhQ29tbWVudFNsYXNoOiBmYUNvbW1lbnRTbGFzaCxcbiAgZmFDbG91ZFN1blJhaW46IGZhQ2xvdWRTdW5SYWluLFxuICBmYUNvbXByZXNzOiBmYUNvbXByZXNzLFxuICBmYVdoZWF0QXduOiBmYVdoZWF0QXduLFxuICBmYVdoZWF0QWx0OiBmYVdoZWF0QWx0LFxuICBmYUFua2g6IGZhQW5raCxcbiAgZmFIYW5kc0hvbGRpbmdDaGlsZDogZmFIYW5kc0hvbGRpbmdDaGlsZCxcbiAgZmFBc3RlcmlzazogZmFBc3RlcmlzayxcbiAgZmFTcXVhcmVDaGVjazogZmFTcXVhcmVDaGVjayxcbiAgZmFDaGVja1NxdWFyZTogZmFDaGVja1NxdWFyZSxcbiAgZmFQZXNldGFTaWduOiBmYVBlc2V0YVNpZ24sXG4gIGZhSGVhZGluZzogZmFIZWFkaW5nLFxuICBmYUhlYWRlcjogZmFIZWFkZXIsXG4gIGZhR2hvc3Q6IGZhR2hvc3QsXG4gIGZhTGlzdDogZmFMaXN0LFxuICBmYUxpc3RTcXVhcmVzOiBmYUxpc3RTcXVhcmVzLFxuICBmYVNxdWFyZVBob25lRmxpcDogZmFTcXVhcmVQaG9uZUZsaXAsXG4gIGZhUGhvbmVTcXVhcmVBbHQ6IGZhUGhvbmVTcXVhcmVBbHQsXG4gIGZhQ2FydFBsdXM6IGZhQ2FydFBsdXMsXG4gIGZhR2FtZXBhZDogZmFHYW1lcGFkLFxuICBmYUNpcmNsZURvdDogZmFDaXJjbGVEb3QsXG4gIGZhRG90Q2lyY2xlOiBmYURvdENpcmNsZSxcbiAgZmFGYWNlRGl6enk6IGZhRmFjZURpenp5LFxuICBmYURpenp5OiBmYURpenp5LFxuICBmYUVnZzogZmFFZ2csXG4gIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcms6IGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssXG4gIGZhQ2FtcGdyb3VuZDogZmFDYW1wZ3JvdW5kLFxuICBmYUZvbGRlclBsdXM6IGZhRm9sZGVyUGx1cyxcbiAgZmFGdXRib2w6IGZhRnV0Ym9sLFxuICBmYUZ1dGJvbEJhbGw6IGZhRnV0Ym9sQmFsbCxcbiAgZmFTb2NjZXJCYWxsOiBmYVNvY2NlckJhbGwsXG4gIGZhUGFpbnRicnVzaDogZmFQYWludGJydXNoLFxuICBmYVBhaW50QnJ1c2g6IGZhUGFpbnRCcnVzaCxcbiAgZmFMb2NrOiBmYUxvY2ssXG4gIGZhR2FzUHVtcDogZmFHYXNQdW1wLFxuICBmYUhvdFR1YlBlcnNvbjogZmFIb3RUdWJQZXJzb24sXG4gIGZhSG90VHViOiBmYUhvdFR1YixcbiAgZmFNYXBMb2NhdGlvbjogZmFNYXBMb2NhdGlvbixcbiAgZmFNYXBNYXJrZWQ6IGZhTWFwTWFya2VkLFxuICBmYUhvdXNlRmxvb2RXYXRlcjogZmFIb3VzZUZsb29kV2F0ZXIsXG4gIGZhVHJlZTogZmFUcmVlLFxuICBmYUJyaWRnZUxvY2s6IGZhQnJpZGdlTG9jayxcbiAgZmFTYWNrRG9sbGFyOiBmYVNhY2tEb2xsYXIsXG4gIGZhUGVuVG9TcXVhcmU6IGZhUGVuVG9TcXVhcmUsXG4gIGZhRWRpdDogZmFFZGl0LFxuICBmYUNhclNpZGU6IGZhQ2FyU2lkZSxcbiAgZmFTaGFyZU5vZGVzOiBmYVNoYXJlTm9kZXMsXG4gIGZhU2hhcmVBbHQ6IGZhU2hhcmVBbHQsXG4gIGZhSGVhcnRDaXJjbGVNaW51czogZmFIZWFydENpcmNsZU1pbnVzLFxuICBmYUhvdXJnbGFzc0hhbGY6IGZhSG91cmdsYXNzSGFsZixcbiAgZmFIb3VyZ2xhc3MyOiBmYUhvdXJnbGFzczIsXG4gIGZhTWljcm9zY29wZTogZmFNaWNyb3Njb3BlLFxuICBmYVNpbms6IGZhU2luayxcbiAgZmFCYWdTaG9wcGluZzogZmFCYWdTaG9wcGluZyxcbiAgZmFTaG9wcGluZ0JhZzogZmFTaG9wcGluZ0JhZyxcbiAgZmFBcnJvd0Rvd25aQTogZmFBcnJvd0Rvd25aQSxcbiAgZmFTb3J0QWxwaGFEZXNjOiBmYVNvcnRBbHBoYURlc2MsXG4gIGZhU29ydEFscGhhRG93bkFsdDogZmFTb3J0QWxwaGFEb3duQWx0LFxuICBmYU1pdHRlbjogZmFNaXR0ZW4sXG4gIGZhUGVyc29uUmF5czogZmFQZXJzb25SYXlzLFxuICBmYVVzZXJzOiBmYVVzZXJzLFxuICBmYUV5ZVNsYXNoOiBmYUV5ZVNsYXNoLFxuICBmYUZsYXNrVmlhbDogZmFGbGFza1ZpYWwsXG4gIGZhSGFuZDogZmFIYW5kLFxuICBmYUhhbmRQYXBlcjogZmFIYW5kUGFwZXIsXG4gIGZhT206IGZhT20sXG4gIGZhV29ybTogZmFXb3JtLFxuICBmYUhvdXNlQ2lyY2xlWG1hcms6IGZhSG91c2VDaXJjbGVYbWFyayxcbiAgZmFQbHVnOiBmYVBsdWcsXG4gIGZhQ2hldnJvblVwOiBmYUNoZXZyb25VcCxcbiAgZmFIYW5kU3BvY2s6IGZhSGFuZFNwb2NrLFxuICBmYVN0b3B3YXRjaDogZmFTdG9wd2F0Y2gsXG4gIGZhRmFjZUtpc3M6IGZhRmFjZUtpc3MsXG4gIGZhS2lzczogZmFLaXNzLFxuICBmYUJyaWRnZUNpcmNsZVhtYXJrOiBmYUJyaWRnZUNpcmNsZVhtYXJrLFxuICBmYUZhY2VHcmluVG9uZ3VlOiBmYUZhY2VHcmluVG9uZ3VlLFxuICBmYUdyaW5Ub25ndWU6IGZhR3JpblRvbmd1ZSxcbiAgZmFDaGVzc0Jpc2hvcDogZmFDaGVzc0Jpc2hvcCxcbiAgZmFGYWNlR3Jpbldpbms6IGZhRmFjZUdyaW5XaW5rLFxuICBmYUdyaW5XaW5rOiBmYUdyaW5XaW5rLFxuICBmYUVhckRlYWY6IGZhRWFyRGVhZixcbiAgZmFEZWFmOiBmYURlYWYsXG4gIGZhRGVhZm5lc3M6IGZhRGVhZm5lc3MsXG4gIGZhSGFyZE9mSGVhcmluZzogZmFIYXJkT2ZIZWFyaW5nLFxuICBmYVJvYWRDaXJjbGVDaGVjazogZmFSb2FkQ2lyY2xlQ2hlY2ssXG4gIGZhRGljZUZpdmU6IGZhRGljZUZpdmUsXG4gIGZhU3F1YXJlUnNzOiBmYVNxdWFyZVJzcyxcbiAgZmFSc3NTcXVhcmU6IGZhUnNzU3F1YXJlLFxuICBmYUxhbmRNaW5lT246IGZhTGFuZE1pbmVPbixcbiAgZmFJQ3Vyc29yOiBmYUlDdXJzb3IsXG4gIGZhU3RhbXA6IGZhU3RhbXAsXG4gIGZhU3RhaXJzOiBmYVN0YWlycyxcbiAgZmFJOiBmYUksXG4gIGZhSHJ5dm5pYVNpZ246IGZhSHJ5dm5pYVNpZ24sXG4gIGZhSHJ5dm5pYTogZmFIcnl2bmlhLFxuICBmYVBpbGxzOiBmYVBpbGxzLFxuICBmYUZhY2VHcmluV2lkZTogZmFGYWNlR3JpbldpZGUsXG4gIGZhR3JpbkFsdDogZmFHcmluQWx0LFxuICBmYVRvb3RoOiBmYVRvb3RoLFxuICBmYVY6IGZhVixcbiAgZmFCYW5nbGFkZXNoaVRha2FTaWduOiBmYUJhbmdsYWRlc2hpVGFrYVNpZ24sXG4gIGZhQmljeWNsZTogZmFCaWN5Y2xlLFxuICBmYVN0YWZmU25ha2U6IGZhU3RhZmZTbmFrZSxcbiAgZmFSb2RBc2NsZXBpdXM6IGZhUm9kQXNjbGVwaXVzLFxuICBmYVJvZFNuYWtlOiBmYVJvZFNuYWtlLFxuICBmYVN0YWZmQWVzY3VsYXBpdXM6IGZhU3RhZmZBZXNjdWxhcGl1cyxcbiAgZmFIZWFkU2lkZUNvdWdoU2xhc2g6IGZhSGVhZFNpZGVDb3VnaFNsYXNoLFxuICBmYVRydWNrTWVkaWNhbDogZmFUcnVja01lZGljYWwsXG4gIGZhQW1idWxhbmNlOiBmYUFtYnVsYW5jZSxcbiAgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uOiBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhU25vd21hbjogZmFTbm93bWFuLFxuICBmYU1vcnRhclBlc3RsZTogZmFNb3J0YXJQZXN0bGUsXG4gIGZhUm9hZEJhcnJpZXI6IGZhUm9hZEJhcnJpZXIsXG4gIGZhU2Nob29sOiBmYVNjaG9vbCxcbiAgZmFJZ2xvbzogZmFJZ2xvbyxcbiAgZmFKb2ludDogZmFKb2ludCxcbiAgZmFBbmdsZVJpZ2h0OiBmYUFuZ2xlUmlnaHQsXG4gIGZhSG9yc2U6IGZhSG9yc2UsXG4gIGZhUTogZmFRLFxuICBmYUc6IGZhRyxcbiAgZmFOb3Rlc01lZGljYWw6IGZhTm90ZXNNZWRpY2FsLFxuICBmYVRlbXBlcmF0dXJlSGFsZjogZmFUZW1wZXJhdHVyZUhhbGYsXG4gIGZhVGVtcGVyYXR1cmUyOiBmYVRlbXBlcmF0dXJlMixcbiAgZmFUaGVybW9tZXRlcjI6IGZhVGhlcm1vbWV0ZXIyLFxuICBmYVRoZXJtb21ldGVySGFsZjogZmFUaGVybW9tZXRlckhhbGYsXG4gIGZhRG9uZ1NpZ246IGZhRG9uZ1NpZ24sXG4gIGZhQ2Fwc3VsZXM6IGZhQ2Fwc3VsZXMsXG4gIGZhUG9vU3Rvcm06IGZhUG9vU3Rvcm0sXG4gIGZhUG9vQm9sdDogZmFQb29Cb2x0LFxuICBmYUZhY2VGcm93bk9wZW46IGZhRmFjZUZyb3duT3BlbixcbiAgZmFGcm93bk9wZW46IGZhRnJvd25PcGVuLFxuICBmYUhhbmRQb2ludFVwOiBmYUhhbmRQb2ludFVwLFxuICBmYU1vbmV5QmlsbDogZmFNb25leUJpbGwsXG4gIGZhQm9va21hcms6IGZhQm9va21hcmssXG4gIGZhQWxpZ25KdXN0aWZ5OiBmYUFsaWduSnVzdGlmeSxcbiAgZmFVbWJyZWxsYUJlYWNoOiBmYVVtYnJlbGxhQmVhY2gsXG4gIGZhSGVsbWV0VW46IGZhSGVsbWV0VW4sXG4gIGZhQnVsbHNleWU6IGZhQnVsbHNleWUsXG4gIGZhQmFjb246IGZhQmFjb24sXG4gIGZhSGFuZFBvaW50RG93bjogZmFIYW5kUG9pbnREb3duLFxuICBmYUFycm93VXBGcm9tQnJhY2tldDogZmFBcnJvd1VwRnJvbUJyYWNrZXQsXG4gIGZhRm9sZGVyOiBmYUZvbGRlcixcbiAgZmFGb2xkZXJCbGFuazogZmFGb2xkZXJCbGFuayxcbiAgZmFGaWxlV2F2ZWZvcm06IGZhRmlsZVdhdmVmb3JtLFxuICBmYUZpbGVNZWRpY2FsQWx0OiBmYUZpbGVNZWRpY2FsQWx0LFxuICBmYVJhZGlhdGlvbjogZmFSYWRpYXRpb24sXG4gIGZhQ2hhcnRTaW1wbGU6IGZhQ2hhcnRTaW1wbGUsXG4gIGZhTWFyc1N0cm9rZTogZmFNYXJzU3Ryb2tlLFxuICBmYVZpYWw6IGZhVmlhbCxcbiAgZmFHYXVnZTogZmFHYXVnZSxcbiAgZmFEYXNoYm9hcmQ6IGZhRGFzaGJvYXJkLFxuICBmYUdhdWdlTWVkOiBmYUdhdWdlTWVkLFxuICBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlOiBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlLFxuICBmYVdhbmRNYWdpY1NwYXJrbGVzOiBmYVdhbmRNYWdpY1NwYXJrbGVzLFxuICBmYU1hZ2ljV2FuZFNwYXJrbGVzOiBmYU1hZ2ljV2FuZFNwYXJrbGVzLFxuICBmYUU6IGZhRSxcbiAgZmFQZW5DbGlwOiBmYVBlbkNsaXAsXG4gIGZhUGVuQWx0OiBmYVBlbkFsdCxcbiAgZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbjogZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFVc2VyOiBmYVVzZXIsXG4gIGZhU2Nob29sQ2lyY2xlQ2hlY2s6IGZhU2Nob29sQ2lyY2xlQ2hlY2ssXG4gIGZhRHVtcHN0ZXI6IGZhRHVtcHN0ZXIsXG4gIGZhVmFuU2h1dHRsZTogZmFWYW5TaHV0dGxlLFxuICBmYVNodXR0bGVWYW46IGZhU2h1dHRsZVZhbixcbiAgZmFCdWlsZGluZ1VzZXI6IGZhQnVpbGRpbmdVc2VyLFxuICBmYVNxdWFyZUNhcmV0TGVmdDogZmFTcXVhcmVDYXJldExlZnQsXG4gIGZhQ2FyZXRTcXVhcmVMZWZ0OiBmYUNhcmV0U3F1YXJlTGVmdCxcbiAgZmFIaWdobGlnaHRlcjogZmFIaWdobGlnaHRlcixcbiAgZmFLZXk6IGZhS2V5LFxuICBmYUJ1bGxob3JuOiBmYUJ1bGxob3JuLFxuICBmYUdsb2JlOiBmYUdsb2JlLFxuICBmYVN5bmFnb2d1ZTogZmFTeW5hZ29ndWUsXG4gIGZhUGVyc29uSGFsZkRyZXNzOiBmYVBlcnNvbkhhbGZEcmVzcyxcbiAgZmFSb2FkQnJpZGdlOiBmYVJvYWRCcmlkZ2UsXG4gIGZhTG9jYXRpb25BcnJvdzogZmFMb2NhdGlvbkFycm93LFxuICBmYUM6IGZhQyxcbiAgZmFUYWJsZXRCdXR0b246IGZhVGFibGV0QnV0dG9uLFxuICBmYUJ1aWxkaW5nTG9jazogZmFCdWlsZGluZ0xvY2ssXG4gIGZhUGl6emFTbGljZTogZmFQaXp6YVNsaWNlLFxuICBmYU1vbmV5QmlsbFdhdmU6IGZhTW9uZXlCaWxsV2F2ZSxcbiAgZmFDaGFydEFyZWE6IGZhQ2hhcnRBcmVhLFxuICBmYUFyZWFDaGFydDogZmFBcmVhQ2hhcnQsXG4gIGZhSG91c2VGbGFnOiBmYUhvdXNlRmxhZyxcbiAgZmFQZXJzb25DaXJjbGVNaW51czogZmFQZXJzb25DaXJjbGVNaW51cyxcbiAgZmFCYW46IGZhQmFuLFxuICBmYUNhbmNlbDogZmFDYW5jZWwsXG4gIGZhQ2FtZXJhUm90YXRlOiBmYUNhbWVyYVJvdGF0ZSxcbiAgZmFTcHJheUNhblNwYXJrbGVzOiBmYVNwcmF5Q2FuU3BhcmtsZXMsXG4gIGZhQWlyRnJlc2hlbmVyOiBmYUFpckZyZXNoZW5lcixcbiAgZmFTdGFyOiBmYVN0YXIsXG4gIGZhUmVwZWF0OiBmYVJlcGVhdCxcbiAgZmFDcm9zczogZmFDcm9zcyxcbiAgZmFCb3g6IGZhQm94LFxuICBmYVZlbnVzTWFyczogZmFWZW51c01hcnMsXG4gIGZhQXJyb3dQb2ludGVyOiBmYUFycm93UG9pbnRlcixcbiAgZmFNb3VzZVBvaW50ZXI6IGZhTW91c2VQb2ludGVyLFxuICBmYU1heGltaXplOiBmYU1heGltaXplLFxuICBmYUV4cGFuZEFycm93c0FsdDogZmFFeHBhbmRBcnJvd3NBbHQsXG4gIGZhQ2hhcmdpbmdTdGF0aW9uOiBmYUNoYXJnaW5nU3RhdGlvbixcbiAgZmFTaGFwZXM6IGZhU2hhcGVzLFxuICBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlOiBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlLFxuICBmYVNodWZmbGU6IGZhU2h1ZmZsZSxcbiAgZmFSYW5kb206IGZhUmFuZG9tLFxuICBmYVBlcnNvblJ1bm5pbmc6IGZhUGVyc29uUnVubmluZyxcbiAgZmFSdW5uaW5nOiBmYVJ1bm5pbmcsXG4gIGZhTW9iaWxlUmV0cm86IGZhTW9iaWxlUmV0cm8sXG4gIGZhR3JpcExpbmVzVmVydGljYWw6IGZhR3JpcExpbmVzVmVydGljYWwsXG4gIGZhU3BpZGVyOiBmYVNwaWRlcixcbiAgZmFIYW5kc0JvdW5kOiBmYUhhbmRzQm91bmQsXG4gIGZhRmlsZUludm9pY2VEb2xsYXI6IGZhRmlsZUludm9pY2VEb2xsYXIsXG4gIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbjogZmFQbGFuZUNpcmNsZUV4Y2xhbWF0aW9uLFxuICBmYVhSYXk6IGZhWFJheSxcbiAgZmFTcGVsbENoZWNrOiBmYVNwZWxsQ2hlY2ssXG4gIGZhU2xhc2g6IGZhU2xhc2gsXG4gIGZhQ29tcHV0ZXJNb3VzZTogZmFDb21wdXRlck1vdXNlLFxuICBmYU1vdXNlOiBmYU1vdXNlLFxuICBmYUFycm93UmlnaHRUb0JyYWNrZXQ6IGZhQXJyb3dSaWdodFRvQnJhY2tldCxcbiAgZmFTaWduSW46IGZhU2lnbkluLFxuICBmYVNob3BTbGFzaDogZmFTaG9wU2xhc2gsXG4gIGZhU3RvcmVBbHRTbGFzaDogZmFTdG9yZUFsdFNsYXNoLFxuICBmYVNlcnZlcjogZmFTZXJ2ZXIsXG4gIGZhVmlydXNDb3ZpZFNsYXNoOiBmYVZpcnVzQ292aWRTbGFzaCxcbiAgZmFTaG9wTG9jazogZmFTaG9wTG9jayxcbiAgZmFIb3VyZ2xhc3NTdGFydDogZmFIb3VyZ2xhc3NTdGFydCxcbiAgZmFIb3VyZ2xhc3MxOiBmYUhvdXJnbGFzczEsXG4gIGZhQmxlbmRlclBob25lOiBmYUJsZW5kZXJQaG9uZSxcbiAgZmFCdWlsZGluZ1doZWF0OiBmYUJ1aWxkaW5nV2hlYXQsXG4gIGZhUGVyc29uQnJlYXN0ZmVlZGluZzogZmFQZXJzb25CcmVhc3RmZWVkaW5nLFxuICBmYVJpZ2h0VG9CcmFja2V0OiBmYVJpZ2h0VG9CcmFja2V0LFxuICBmYVNpZ25JbkFsdDogZmFTaWduSW5BbHQsXG4gIGZhVmVudXM6IGZhVmVudXMsXG4gIGZhUGFzc3BvcnQ6IGZhUGFzc3BvcnQsXG4gIGZhSGVhcnRQdWxzZTogZmFIZWFydFB1bHNlLFxuICBmYUhlYXJ0YmVhdDogZmFIZWFydGJlYXQsXG4gIGZhUGVvcGxlQ2FycnlCb3g6IGZhUGVvcGxlQ2FycnlCb3gsXG4gIGZhUGVvcGxlQ2Fycnk6IGZhUGVvcGxlQ2FycnksXG4gIGZhVGVtcGVyYXR1cmVIaWdoOiBmYVRlbXBlcmF0dXJlSGlnaCxcbiAgZmFNaWNyb2NoaXA6IGZhTWljcm9jaGlwLFxuICBmYUNyb3duOiBmYUNyb3duLFxuICBmYVdlaWdodEhhbmdpbmc6IGZhV2VpZ2h0SGFuZ2luZyxcbiAgZmFYbWFya3NMaW5lczogZmFYbWFya3NMaW5lcyxcbiAgZmFGaWxlUHJlc2NyaXB0aW9uOiBmYUZpbGVQcmVzY3JpcHRpb24sXG4gIGZhV2VpZ2h0U2NhbGU6IGZhV2VpZ2h0U2NhbGUsXG4gIGZhV2VpZ2h0OiBmYVdlaWdodCxcbiAgZmFVc2VyR3JvdXA6IGZhVXNlckdyb3VwLFxuICBmYVVzZXJGcmllbmRzOiBmYVVzZXJGcmllbmRzLFxuICBmYUFycm93VXBBWjogZmFBcnJvd1VwQVosXG4gIGZhU29ydEFscGhhVXA6IGZhU29ydEFscGhhVXAsXG4gIGZhQ2hlc3NLbmlnaHQ6IGZhQ2hlc3NLbmlnaHQsXG4gIGZhRmFjZUxhdWdoU3F1aW50OiBmYUZhY2VMYXVnaFNxdWludCxcbiAgZmFMYXVnaFNxdWludDogZmFMYXVnaFNxdWludCxcbiAgZmFXaGVlbGNoYWlyOiBmYVdoZWVsY2hhaXIsXG4gIGZhQ2lyY2xlQXJyb3dVcDogZmFDaXJjbGVBcnJvd1VwLFxuICBmYUFycm93Q2lyY2xlVXA6IGZhQXJyb3dDaXJjbGVVcCxcbiAgZmFUb2dnbGVPbjogZmFUb2dnbGVPbixcbiAgZmFQZXJzb25XYWxraW5nOiBmYVBlcnNvbldhbGtpbmcsXG4gIGZhV2Fsa2luZzogZmFXYWxraW5nLFxuICBmYUw6IGZhTCxcbiAgZmFGaXJlOiBmYUZpcmUsXG4gIGZhQmVkUHVsc2U6IGZhQmVkUHVsc2UsXG4gIGZhUHJvY2VkdXJlczogZmFQcm9jZWR1cmVzLFxuICBmYVNodXR0bGVTcGFjZTogZmFTaHV0dGxlU3BhY2UsXG4gIGZhU3BhY2VTaHV0dGxlOiBmYVNwYWNlU2h1dHRsZSxcbiAgZmFGYWNlTGF1Z2g6IGZhRmFjZUxhdWdoLFxuICBmYUxhdWdoOiBmYUxhdWdoLFxuICBmYUZvbGRlck9wZW46IGZhRm9sZGVyT3BlbixcbiAgZmFIZWFydENpcmNsZVBsdXM6IGZhSGVhcnRDaXJjbGVQbHVzLFxuICBmYUNvZGVGb3JrOiBmYUNvZGVGb3JrLFxuICBmYUNpdHk6IGZhQ2l0eSxcbiAgZmFNaWNyb3Bob25lTGluZXM6IGZhTWljcm9waG9uZUxpbmVzLFxuICBmYU1pY3JvcGhvbmVBbHQ6IGZhTWljcm9waG9uZUFsdCxcbiAgZmFQZXBwZXJIb3Q6IGZhUGVwcGVySG90LFxuICBmYVVubG9jazogZmFVbmxvY2ssXG4gIGZhQ29sb25TaWduOiBmYUNvbG9uU2lnbixcbiAgZmFIZWFkc2V0OiBmYUhlYWRzZXQsXG4gIGZhU3RvcmVTbGFzaDogZmFTdG9yZVNsYXNoLFxuICBmYVJvYWRDaXJjbGVYbWFyazogZmFSb2FkQ2lyY2xlWG1hcmssXG4gIGZhVXNlck1pbnVzOiBmYVVzZXJNaW51cyxcbiAgZmFNYXJzU3Ryb2tlVXA6IGZhTWFyc1N0cm9rZVVwLFxuICBmYU1hcnNTdHJva2VWOiBmYU1hcnNTdHJva2VWLFxuICBmYUNoYW1wYWduZUdsYXNzZXM6IGZhQ2hhbXBhZ25lR2xhc3NlcyxcbiAgZmFHbGFzc0NoZWVyczogZmFHbGFzc0NoZWVycyxcbiAgZmFDbGlwYm9hcmQ6IGZhQ2xpcGJvYXJkLFxuICBmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb246IGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFGaWxlQXJyb3dVcDogZmFGaWxlQXJyb3dVcCxcbiAgZmFGaWxlVXBsb2FkOiBmYUZpbGVVcGxvYWQsXG4gIGZhV2lmaTogZmFXaWZpLFxuICBmYVdpZmkzOiBmYVdpZmkzLFxuICBmYVdpZmlTdHJvbmc6IGZhV2lmaVN0cm9uZyxcbiAgZmFCYXRoOiBmYUJhdGgsXG4gIGZhQmF0aHR1YjogZmFCYXRodHViLFxuICBmYVVuZGVybGluZTogZmFVbmRlcmxpbmUsXG4gIGZhVXNlclBlbjogZmFVc2VyUGVuLFxuICBmYVVzZXJFZGl0OiBmYVVzZXJFZGl0LFxuICBmYVNpZ25hdHVyZTogZmFTaWduYXR1cmUsXG4gIGZhU3Ryb29wd2FmZWw6IGZhU3Ryb29wd2FmZWwsXG4gIGZhQm9sZDogZmFCb2xkLFxuICBmYUFuY2hvckxvY2s6IGZhQW5jaG9yTG9jayxcbiAgZmFCdWlsZGluZ05nbzogZmFCdWlsZGluZ05nbyxcbiAgZmFNYW5hdFNpZ246IGZhTWFuYXRTaWduLFxuICBmYU5vdEVxdWFsOiBmYU5vdEVxdWFsLFxuICBmYUJvcmRlclRvcExlZnQ6IGZhQm9yZGVyVG9wTGVmdCxcbiAgZmFCb3JkZXJTdHlsZTogZmFCb3JkZXJTdHlsZSxcbiAgZmFNYXBMb2NhdGlvbkRvdDogZmFNYXBMb2NhdGlvbkRvdCxcbiAgZmFNYXBNYXJrZWRBbHQ6IGZhTWFwTWFya2VkQWx0LFxuICBmYUplZGk6IGZhSmVkaSxcbiAgZmFTcXVhcmVQb2xsVmVydGljYWw6IGZhU3F1YXJlUG9sbFZlcnRpY2FsLFxuICBmYVBvbGw6IGZhUG9sbCxcbiAgZmFNdWdIb3Q6IGZhTXVnSG90LFxuICBmYUNhckJhdHRlcnk6IGZhQ2FyQmF0dGVyeSxcbiAgZmFCYXR0ZXJ5Q2FyOiBmYUJhdHRlcnlDYXIsXG4gIGZhR2lmdDogZmFHaWZ0LFxuICBmYURpY2VUd286IGZhRGljZVR3byxcbiAgZmFDaGVzc1F1ZWVuOiBmYUNoZXNzUXVlZW4sXG4gIGZhR2xhc3NlczogZmFHbGFzc2VzLFxuICBmYUNoZXNzQm9hcmQ6IGZhQ2hlc3NCb2FyZCxcbiAgZmFCdWlsZGluZ0NpcmNsZUNoZWNrOiBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssXG4gIGZhUGVyc29uQ2hhbGtib2FyZDogZmFQZXJzb25DaGFsa2JvYXJkLFxuICBmYU1hcnNTdHJva2VSaWdodDogZmFNYXJzU3Ryb2tlUmlnaHQsXG4gIGZhTWFyc1N0cm9rZUg6IGZhTWFyc1N0cm9rZUgsXG4gIGZhSGFuZEJhY2tGaXN0OiBmYUhhbmRCYWNrRmlzdCxcbiAgZmFIYW5kUm9jazogZmFIYW5kUm9jayxcbiAgZmFTcXVhcmVDYXJldFVwOiBmYVNxdWFyZUNhcmV0VXAsXG4gIGZhQ2FyZXRTcXVhcmVVcDogZmFDYXJldFNxdWFyZVVwLFxuICBmYUNsb3VkU2hvd2Vyc1dhdGVyOiBmYUNsb3VkU2hvd2Vyc1dhdGVyLFxuICBmYUNoYXJ0QmFyOiBmYUNoYXJ0QmFyLFxuICBmYUJhckNoYXJ0OiBmYUJhckNoYXJ0LFxuICBmYUhhbmRzQnViYmxlczogZmFIYW5kc0J1YmJsZXMsXG4gIGZhSGFuZHNXYXNoOiBmYUhhbmRzV2FzaCxcbiAgZmFMZXNzVGhhbkVxdWFsOiBmYUxlc3NUaGFuRXF1YWwsXG4gIGZhVHJhaW46IGZhVHJhaW4sXG4gIGZhRXllTG93VmlzaW9uOiBmYUV5ZUxvd1Zpc2lvbixcbiAgZmFMb3dWaXNpb246IGZhTG93VmlzaW9uLFxuICBmYUNyb3c6IGZhQ3JvdyxcbiAgZmFTYWlsYm9hdDogZmFTYWlsYm9hdCxcbiAgZmFXaW5kb3dSZXN0b3JlOiBmYVdpbmRvd1Jlc3RvcmUsXG4gIGZhU3F1YXJlUGx1czogZmFTcXVhcmVQbHVzLFxuICBmYVBsdXNTcXVhcmU6IGZhUGx1c1NxdWFyZSxcbiAgZmFUb3JpaUdhdGU6IGZhVG9yaWlHYXRlLFxuICBmYUZyb2c6IGZhRnJvZyxcbiAgZmFCdWNrZXQ6IGZhQnVja2V0LFxuICBmYUltYWdlOiBmYUltYWdlLFxuICBmYU1pY3JvcGhvbmU6IGZhTWljcm9waG9uZSxcbiAgZmFDb3c6IGZhQ293LFxuICBmYUNhcmV0VXA6IGZhQ2FyZXRVcCxcbiAgZmFTY3Jld2RyaXZlcjogZmFTY3Jld2RyaXZlcixcbiAgZmFGb2xkZXJDbG9zZWQ6IGZhRm9sZGVyQ2xvc2VkLFxuICBmYUhvdXNlVHN1bmFtaTogZmFIb3VzZVRzdW5hbWksXG4gIGZhU3F1YXJlTmZpOiBmYVNxdWFyZU5maSxcbiAgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyOiBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsXG4gIGZhTWFydGluaUdsYXNzOiBmYU1hcnRpbmlHbGFzcyxcbiAgZmFHbGFzc01hcnRpbmlBbHQ6IGZhR2xhc3NNYXJ0aW5pQWx0LFxuICBmYVJvdGF0ZUxlZnQ6IGZhUm90YXRlTGVmdCxcbiAgZmFSb3RhdGVCYWNrOiBmYVJvdGF0ZUJhY2ssXG4gIGZhUm90YXRlQmFja3dhcmQ6IGZhUm90YXRlQmFja3dhcmQsXG4gIGZhVW5kb0FsdDogZmFVbmRvQWx0LFxuICBmYVRhYmxlQ29sdW1uczogZmFUYWJsZUNvbHVtbnMsXG4gIGZhQ29sdW1uczogZmFDb2x1bW5zLFxuICBmYUxlbW9uOiBmYUxlbW9uLFxuICBmYUhlYWRTaWRlTWFzazogZmFIZWFkU2lkZU1hc2ssXG4gIGZhSGFuZHNoYWtlOiBmYUhhbmRzaGFrZSxcbiAgZmFHZW06IGZhR2VtLFxuICBmYURvbGx5OiBmYURvbGx5LFxuICBmYURvbGx5Qm94OiBmYURvbGx5Qm94LFxuICBmYVNtb2tpbmc6IGZhU21va2luZyxcbiAgZmFNaW5pbWl6ZTogZmFNaW5pbWl6ZSxcbiAgZmFDb21wcmVzc0Fycm93c0FsdDogZmFDb21wcmVzc0Fycm93c0FsdCxcbiAgZmFNb251bWVudDogZmFNb251bWVudCxcbiAgZmFTbm93cGxvdzogZmFTbm93cGxvdyxcbiAgZmFBbmdsZXNSaWdodDogZmFBbmdsZXNSaWdodCxcbiAgZmFBbmdsZURvdWJsZVJpZ2h0OiBmYUFuZ2xlRG91YmxlUmlnaHQsXG4gIGZhQ2FubmFiaXM6IGZhQ2FubmFiaXMsXG4gIGZhQ2lyY2xlUGxheTogZmFDaXJjbGVQbGF5LFxuICBmYVBsYXlDaXJjbGU6IGZhUGxheUNpcmNsZSxcbiAgZmFUYWJsZXRzOiBmYVRhYmxldHMsXG4gIGZhRXRoZXJuZXQ6IGZhRXRoZXJuZXQsXG4gIGZhRXVyb1NpZ246IGZhRXVyb1NpZ24sXG4gIGZhRXVyOiBmYUV1cixcbiAgZmFFdXJvOiBmYUV1cm8sXG4gIGZhQ2hhaXI6IGZhQ2hhaXIsXG4gIGZhQ2lyY2xlQ2hlY2s6IGZhQ2lyY2xlQ2hlY2ssXG4gIGZhQ2hlY2tDaXJjbGU6IGZhQ2hlY2tDaXJjbGUsXG4gIGZhQ2lyY2xlU3RvcDogZmFDaXJjbGVTdG9wLFxuICBmYVN0b3BDaXJjbGU6IGZhU3RvcENpcmNsZSxcbiAgZmFDb21wYXNzRHJhZnRpbmc6IGZhQ29tcGFzc0RyYWZ0aW5nLFxuICBmYURyYWZ0aW5nQ29tcGFzczogZmFEcmFmdGluZ0NvbXBhc3MsXG4gIGZhUGxhdGVXaGVhdDogZmFQbGF0ZVdoZWF0LFxuICBmYUljaWNsZXM6IGZhSWNpY2xlcyxcbiAgZmFQZXJzb25TaGVsdGVyOiBmYVBlcnNvblNoZWx0ZXIsXG4gIGZhTmV1dGVyOiBmYU5ldXRlcixcbiAgZmFJZEJhZGdlOiBmYUlkQmFkZ2UsXG4gIGZhTWFya2VyOiBmYU1hcmtlcixcbiAgZmFGYWNlTGF1Z2hCZWFtOiBmYUZhY2VMYXVnaEJlYW0sXG4gIGZhTGF1Z2hCZWFtOiBmYUxhdWdoQmVhbSxcbiAgZmFIZWxpY29wdGVyU3ltYm9sOiBmYUhlbGljb3B0ZXJTeW1ib2wsXG4gIGZhVW5pdmVyc2FsQWNjZXNzOiBmYVVuaXZlcnNhbEFjY2VzcyxcbiAgZmFDaXJjbGVDaGV2cm9uVXA6IGZhQ2lyY2xlQ2hldnJvblVwLFxuICBmYUNoZXZyb25DaXJjbGVVcDogZmFDaGV2cm9uQ2lyY2xlVXAsXG4gIGZhTGFyaVNpZ246IGZhTGFyaVNpZ24sXG4gIGZhVm9sY2FubzogZmFWb2xjYW5vLFxuICBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodDogZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQsXG4gIGZhU3RlcmxpbmdTaWduOiBmYVN0ZXJsaW5nU2lnbixcbiAgZmFHYnA6IGZhR2JwLFxuICBmYVBvdW5kU2lnbjogZmFQb3VuZFNpZ24sXG4gIGZhVmlydXNlczogZmFWaXJ1c2VzLFxuICBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkOiBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkLFxuICBmYVVzZXJUaWU6IGZhVXNlclRpZSxcbiAgZmFBcnJvd0Rvd25Mb25nOiBmYUFycm93RG93bkxvbmcsXG4gIGZhTG9uZ0Fycm93RG93bjogZmFMb25nQXJyb3dEb3duLFxuICBmYVRlbnRBcnJvd0Rvd25Ub0xpbmU6IGZhVGVudEFycm93RG93blRvTGluZSxcbiAgZmFDZXJ0aWZpY2F0ZTogZmFDZXJ0aWZpY2F0ZSxcbiAgZmFSZXBseUFsbDogZmFSZXBseUFsbCxcbiAgZmFNYWlsUmVwbHlBbGw6IGZhTWFpbFJlcGx5QWxsLFxuICBmYVN1aXRjYXNlOiBmYVN1aXRjYXNlLFxuICBmYVBlcnNvblNrYXRpbmc6IGZhUGVyc29uU2thdGluZyxcbiAgZmFTa2F0aW5nOiBmYVNrYXRpbmcsXG4gIGZhRmlsdGVyQ2lyY2xlRG9sbGFyOiBmYUZpbHRlckNpcmNsZURvbGxhcixcbiAgZmFGdW5uZWxEb2xsYXI6IGZhRnVubmVsRG9sbGFyLFxuICBmYUNhbWVyYVJldHJvOiBmYUNhbWVyYVJldHJvLFxuICBmYUNpcmNsZUFycm93RG93bjogZmFDaXJjbGVBcnJvd0Rvd24sXG4gIGZhQXJyb3dDaXJjbGVEb3duOiBmYUFycm93Q2lyY2xlRG93bixcbiAgZmFGaWxlSW1wb3J0OiBmYUZpbGVJbXBvcnQsXG4gIGZhQXJyb3dSaWdodFRvRmlsZTogZmFBcnJvd1JpZ2h0VG9GaWxlLFxuICBmYVNxdWFyZUFycm93VXBSaWdodDogZmFTcXVhcmVBcnJvd1VwUmlnaHQsXG4gIGZhRXh0ZXJuYWxMaW5rU3F1YXJlOiBmYUV4dGVybmFsTGlua1NxdWFyZSxcbiAgZmFCb3hPcGVuOiBmYUJveE9wZW4sXG4gIGZhU2Nyb2xsOiBmYVNjcm9sbCxcbiAgZmFTcGE6IGZhU3BhLFxuICBmYUxvY2F0aW9uUGluTG9jazogZmFMb2NhdGlvblBpbkxvY2ssXG4gIGZhUGF1c2U6IGZhUGF1c2UsXG4gIGZhSGlsbEF2YWxhbmNoZTogZmFIaWxsQXZhbGFuY2hlLFxuICBmYVRlbXBlcmF0dXJlRW1wdHk6IGZhVGVtcGVyYXR1cmVFbXB0eSxcbiAgZmFUZW1wZXJhdHVyZTA6IGZhVGVtcGVyYXR1cmUwLFxuICBmYVRoZXJtb21ldGVyMDogZmFUaGVybW9tZXRlcjAsXG4gIGZhVGhlcm1vbWV0ZXJFbXB0eTogZmFUaGVybW9tZXRlckVtcHR5LFxuICBmYUJvbWI6IGZhQm9tYixcbiAgZmFSZWdpc3RlcmVkOiBmYVJlZ2lzdGVyZWQsXG4gIGZhQWRkcmVzc0NhcmQ6IGZhQWRkcmVzc0NhcmQsXG4gIGZhQ29udGFjdENhcmQ6IGZhQ29udGFjdENhcmQsXG4gIGZhVmNhcmQ6IGZhVmNhcmQsXG4gIGZhU2NhbGVVbmJhbGFuY2VkRmxpcDogZmFTY2FsZVVuYmFsYW5jZWRGbGlwLFxuICBmYUJhbGFuY2VTY2FsZVJpZ2h0OiBmYUJhbGFuY2VTY2FsZVJpZ2h0LFxuICBmYVN1YnNjcmlwdDogZmFTdWJzY3JpcHQsXG4gIGZhRGlhbW9uZFR1cm5SaWdodDogZmFEaWFtb25kVHVyblJpZ2h0LFxuICBmYURpcmVjdGlvbnM6IGZhRGlyZWN0aW9ucyxcbiAgZmFCdXJzdDogZmFCdXJzdCxcbiAgZmFIb3VzZUxhcHRvcDogZmFIb3VzZUxhcHRvcCxcbiAgZmFMYXB0b3BIb3VzZTogZmFMYXB0b3BIb3VzZSxcbiAgZmFGYWNlVGlyZWQ6IGZhRmFjZVRpcmVkLFxuICBmYVRpcmVkOiBmYVRpcmVkLFxuICBmYU1vbmV5QmlsbHM6IGZhTW9uZXlCaWxscyxcbiAgZmFTbW9nOiBmYVNtb2csXG4gIGZhQ3J1dGNoOiBmYUNydXRjaCxcbiAgZmFGb250QXdlc29tZTogZmFGb250QXdlc29tZSxcbiAgZmFGb250QXdlc29tZUZsYWc6IGZhRm9udEF3ZXNvbWVGbGFnLFxuICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGw6IGZhRm9udEF3ZXNvbWVMb2dvRnVsbCxcbiAgZmFDbG91ZEFycm93VXA6IGZhQ2xvdWRBcnJvd1VwLFxuICBmYUNsb3VkVXBsb2FkOiBmYUNsb3VkVXBsb2FkLFxuICBmYUNsb3VkVXBsb2FkQWx0OiBmYUNsb3VkVXBsb2FkQWx0LFxuICBmYVBhbGV0dGU6IGZhUGFsZXR0ZSxcbiAgZmFBcnJvd3NUdXJuUmlnaHQ6IGZhQXJyb3dzVHVyblJpZ2h0LFxuICBmYVZlc3Q6IGZhVmVzdCxcbiAgZmFGZXJyeTogZmFGZXJyeSxcbiAgZmFBcnJvd3NEb3duVG9QZW9wbGU6IGZhQXJyb3dzRG93blRvUGVvcGxlLFxuICBmYVNlZWRsaW5nOiBmYVNlZWRsaW5nLFxuICBmYVNwcm91dDogZmFTcHJvdXQsXG4gIGZhTGVmdFJpZ2h0OiBmYUxlZnRSaWdodCxcbiAgZmFBcnJvd3NBbHRIOiBmYUFycm93c0FsdEgsXG4gIGZhQm94ZXNQYWNraW5nOiBmYUJveGVzUGFja2luZyxcbiAgZmFDaXJjbGVBcnJvd0xlZnQ6IGZhQ2lyY2xlQXJyb3dMZWZ0LFxuICBmYUFycm93Q2lyY2xlTGVmdDogZmFBcnJvd0NpcmNsZUxlZnQsXG4gIGZhR3JvdXBBcnJvd3NSb3RhdGU6IGZhR3JvdXBBcnJvd3NSb3RhdGUsXG4gIGZhQm93bEZvb2Q6IGZhQm93bEZvb2QsXG4gIGZhQ2FuZHlDYW5lOiBmYUNhbmR5Q2FuZSxcbiAgZmFBcnJvd0Rvd25XaWRlU2hvcnQ6IGZhQXJyb3dEb3duV2lkZVNob3J0LFxuICBmYVNvcnRBbW91bnRBc2M6IGZhU29ydEFtb3VudEFzYyxcbiAgZmFTb3J0QW1vdW50RG93bjogZmFTb3J0QW1vdW50RG93bixcbiAgZmFDbG91ZEJvbHQ6IGZhQ2xvdWRCb2x0LFxuICBmYVRodW5kZXJzdG9ybTogZmFUaHVuZGVyc3Rvcm0sXG4gIGZhVGV4dFNsYXNoOiBmYVRleHRTbGFzaCxcbiAgZmFSZW1vdmVGb3JtYXQ6IGZhUmVtb3ZlRm9ybWF0LFxuICBmYUZhY2VTbWlsZVdpbms6IGZhRmFjZVNtaWxlV2luayxcbiAgZmFTbWlsZVdpbms6IGZhU21pbGVXaW5rLFxuICBmYUZpbGVXb3JkOiBmYUZpbGVXb3JkLFxuICBmYUZpbGVQb3dlcnBvaW50OiBmYUZpbGVQb3dlcnBvaW50LFxuICBmYUFycm93c0xlZnRSaWdodDogZmFBcnJvd3NMZWZ0UmlnaHQsXG4gIGZhQXJyb3dzSDogZmFBcnJvd3NILFxuICBmYUhvdXNlTG9jazogZmFIb3VzZUxvY2ssXG4gIGZhQ2xvdWRBcnJvd0Rvd246IGZhQ2xvdWRBcnJvd0Rvd24sXG4gIGZhQ2xvdWREb3dubG9hZDogZmFDbG91ZERvd25sb2FkLFxuICBmYUNsb3VkRG93bmxvYWRBbHQ6IGZhQ2xvdWREb3dubG9hZEFsdCxcbiAgZmFDaGlsZHJlbjogZmFDaGlsZHJlbixcbiAgZmFDaGFsa2JvYXJkOiBmYUNoYWxrYm9hcmQsXG4gIGZhQmxhY2tib2FyZDogZmFCbGFja2JvYXJkLFxuICBmYVVzZXJMYXJnZVNsYXNoOiBmYVVzZXJMYXJnZVNsYXNoLFxuICBmYVVzZXJBbHRTbGFzaDogZmFVc2VyQWx0U2xhc2gsXG4gIGZhRW52ZWxvcGVPcGVuOiBmYUVudmVsb3BlT3BlbixcbiAgZmFIYW5kc2hha2VTaW1wbGVTbGFzaDogZmFIYW5kc2hha2VTaW1wbGVTbGFzaCxcbiAgZmFIYW5kc2hha2VBbHRTbGFzaDogZmFIYW5kc2hha2VBbHRTbGFzaCxcbiAgZmFNYXR0cmVzc1BpbGxvdzogZmFNYXR0cmVzc1BpbGxvdyxcbiAgZmFHdWFyYW5pU2lnbjogZmFHdWFyYW5pU2lnbixcbiAgZmFBcnJvd3NSb3RhdGU6IGZhQXJyb3dzUm90YXRlLFxuICBmYVJlZnJlc2g6IGZhUmVmcmVzaCxcbiAgZmFTeW5jOiBmYVN5bmMsXG4gIGZhRmlyZUV4dGluZ3Vpc2hlcjogZmFGaXJlRXh0aW5ndWlzaGVyLFxuICBmYUNydXplaXJvU2lnbjogZmFDcnV6ZWlyb1NpZ24sXG4gIGZhR3JlYXRlclRoYW5FcXVhbDogZmFHcmVhdGVyVGhhbkVxdWFsLFxuICBmYVNoaWVsZEhhbHZlZDogZmFTaGllbGRIYWx2ZWQsXG4gIGZhU2hpZWxkQWx0OiBmYVNoaWVsZEFsdCxcbiAgZmFCb29rQXRsYXM6IGZhQm9va0F0bGFzLFxuICBmYUF0bGFzOiBmYUF0bGFzLFxuICBmYVZpcnVzOiBmYVZpcnVzLFxuICBmYUVudmVsb3BlQ2lyY2xlQ2hlY2s6IGZhRW52ZWxvcGVDaXJjbGVDaGVjayxcbiAgZmFMYXllckdyb3VwOiBmYUxheWVyR3JvdXAsXG4gIGZhQXJyb3dzVG9Eb3Q6IGZhQXJyb3dzVG9Eb3QsXG4gIGZhQXJjaHdheTogZmFBcmNod2F5LFxuICBmYUhlYXJ0Q2lyY2xlQ2hlY2s6IGZhSGVhcnRDaXJjbGVDaGVjayxcbiAgZmFIb3VzZUNoaW1uZXlDcmFjazogZmFIb3VzZUNoaW1uZXlDcmFjayxcbiAgZmFIb3VzZURhbWFnZTogZmFIb3VzZURhbWFnZSxcbiAgZmFGaWxlWmlwcGVyOiBmYUZpbGVaaXBwZXIsXG4gIGZhRmlsZUFyY2hpdmU6IGZhRmlsZUFyY2hpdmUsXG4gIGZhU3F1YXJlOiBmYVNxdWFyZSxcbiAgZmFNYXJ0aW5pR2xhc3NFbXB0eTogZmFNYXJ0aW5pR2xhc3NFbXB0eSxcbiAgZmFHbGFzc01hcnRpbmk6IGZhR2xhc3NNYXJ0aW5pLFxuICBmYUNvdWNoOiBmYUNvdWNoLFxuICBmYUNlZGlTaWduOiBmYUNlZGlTaWduLFxuICBmYUl0YWxpYzogZmFJdGFsaWMsXG4gIGZhVGFibGVDZWxsc0NvbHVtbkxvY2s6IGZhVGFibGVDZWxsc0NvbHVtbkxvY2ssXG4gIGZhQ2h1cmNoOiBmYUNodXJjaCxcbiAgZmFDb21tZW50c0RvbGxhcjogZmFDb21tZW50c0RvbGxhcixcbiAgZmFEZW1vY3JhdDogZmFEZW1vY3JhdCxcbiAgZmFaOiBmYVosXG4gIGZhUGVyc29uU2tpaW5nOiBmYVBlcnNvblNraWluZyxcbiAgZmFTa2lpbmc6IGZhU2tpaW5nLFxuICBmYVJvYWRMb2NrOiBmYVJvYWRMb2NrLFxuICBmYUE6IGZhQSxcbiAgZmFUZW1wZXJhdHVyZUFycm93RG93bjogZmFUZW1wZXJhdHVyZUFycm93RG93bixcbiAgZmFUZW1wZXJhdHVyZURvd246IGZhVGVtcGVyYXR1cmVEb3duLFxuICBmYUZlYXRoZXJQb2ludGVkOiBmYUZlYXRoZXJQb2ludGVkLFxuICBmYUZlYXRoZXJBbHQ6IGZhRmVhdGhlckFsdCxcbiAgZmFQOiBmYVAsXG4gIGZhU25vd2ZsYWtlOiBmYVNub3dmbGFrZSxcbiAgZmFOZXdzcGFwZXI6IGZhTmV3c3BhcGVyLFxuICBmYVJlY3RhbmdsZUFkOiBmYVJlY3RhbmdsZUFkLFxuICBmYUFkOiBmYUFkLFxuICBmYUNpcmNsZUFycm93UmlnaHQ6IGZhQ2lyY2xlQXJyb3dSaWdodCxcbiAgZmFBcnJvd0NpcmNsZVJpZ2h0OiBmYUFycm93Q2lyY2xlUmlnaHQsXG4gIGZhRmlsdGVyQ2lyY2xlWG1hcms6IGZhRmlsdGVyQ2lyY2xlWG1hcmssXG4gIGZhTG9jdXN0OiBmYUxvY3VzdCxcbiAgZmFTb3J0OiBmYVNvcnQsXG4gIGZhVW5zb3J0ZWQ6IGZhVW5zb3J0ZWQsXG4gIGZhTGlzdE9sOiBmYUxpc3RPbCxcbiAgZmFMaXN0MTI6IGZhTGlzdDEyLFxuICBmYUxpc3ROdW1lcmljOiBmYUxpc3ROdW1lcmljLFxuICBmYVBlcnNvbkRyZXNzQnVyc3Q6IGZhUGVyc29uRHJlc3NCdXJzdCxcbiAgZmFNb25leUNoZWNrRG9sbGFyOiBmYU1vbmV5Q2hlY2tEb2xsYXIsXG4gIGZhTW9uZXlDaGVja0FsdDogZmFNb25leUNoZWNrQWx0LFxuICBmYVZlY3RvclNxdWFyZTogZmFWZWN0b3JTcXVhcmUsXG4gIGZhQnJlYWRTbGljZTogZmFCcmVhZFNsaWNlLFxuICBmYUxhbmd1YWdlOiBmYUxhbmd1YWdlLFxuICBmYUZhY2VLaXNzV2lua0hlYXJ0OiBmYUZhY2VLaXNzV2lua0hlYXJ0LFxuICBmYUtpc3NXaW5rSGVhcnQ6IGZhS2lzc1dpbmtIZWFydCxcbiAgZmFGaWx0ZXI6IGZhRmlsdGVyLFxuICBmYVF1ZXN0aW9uOiBmYVF1ZXN0aW9uLFxuICBmYUZpbGVTaWduYXR1cmU6IGZhRmlsZVNpZ25hdHVyZSxcbiAgZmFVcERvd25MZWZ0UmlnaHQ6IGZhVXBEb3duTGVmdFJpZ2h0LFxuICBmYUFycm93c0FsdDogZmFBcnJvd3NBbHQsXG4gIGZhSG91c2VDaGltbmV5VXNlcjogZmFIb3VzZUNoaW1uZXlVc2VyLFxuICBmYUhhbmRIb2xkaW5nSGVhcnQ6IGZhSGFuZEhvbGRpbmdIZWFydCxcbiAgZmFQdXp6bGVQaWVjZTogZmFQdXp6bGVQaWVjZSxcbiAgZmFNb25leUNoZWNrOiBmYU1vbmV5Q2hlY2ssXG4gIGZhU3RhckhhbGZTdHJva2U6IGZhU3RhckhhbGZTdHJva2UsXG4gIGZhU3RhckhhbGZBbHQ6IGZhU3RhckhhbGZBbHQsXG4gIGZhQ29kZTogZmFDb2RlLFxuICBmYVdoaXNrZXlHbGFzczogZmFXaGlza2V5R2xhc3MsXG4gIGZhR2xhc3NXaGlza2V5OiBmYUdsYXNzV2hpc2tleSxcbiAgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uOiBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQ6IGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQsXG4gIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTogZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLFxuICBmYUV4dGVybmFsTGluazogZmFFeHRlcm5hbExpbmssXG4gIGZhQ3ViZXNTdGFja2VkOiBmYUN1YmVzU3RhY2tlZCxcbiAgZmFXb25TaWduOiBmYVdvblNpZ24sXG4gIGZhS3J3OiBmYUtydyxcbiAgZmFXb246IGZhV29uLFxuICBmYVZpcnVzQ292aWQ6IGZhVmlydXNDb3ZpZCxcbiAgZmFBdXN0cmFsU2lnbjogZmFBdXN0cmFsU2lnbixcbiAgZmFGOiBmYUYsXG4gIGZhTGVhZjogZmFMZWFmLFxuICBmYVJvYWQ6IGZhUm9hZCxcbiAgZmFUYXhpOiBmYVRheGksXG4gIGZhQ2FiOiBmYUNhYixcbiAgZmFQZXJzb25DaXJjbGVQbHVzOiBmYVBlcnNvbkNpcmNsZVBsdXMsXG4gIGZhQ2hhcnRQaWU6IGZhQ2hhcnRQaWUsXG4gIGZhUGllQ2hhcnQ6IGZhUGllQ2hhcnQsXG4gIGZhQm9sdExpZ2h0bmluZzogZmFCb2x0TGlnaHRuaW5nLFxuICBmYVNhY2tYbWFyazogZmFTYWNrWG1hcmssXG4gIGZhRmlsZUV4Y2VsOiBmYUZpbGVFeGNlbCxcbiAgZmFGaWxlQ29udHJhY3Q6IGZhRmlsZUNvbnRyYWN0LFxuICBmYUZpc2hGaW5zOiBmYUZpc2hGaW5zLFxuICBmYUJ1aWxkaW5nRmxhZzogZmFCdWlsZGluZ0ZsYWcsXG4gIGZhRmFjZUdyaW5CZWFtOiBmYUZhY2VHcmluQmVhbSxcbiAgZmFHcmluQmVhbTogZmFHcmluQmVhbSxcbiAgZmFPYmplY3RVbmdyb3VwOiBmYU9iamVjdFVuZ3JvdXAsXG4gIGZhUG9vcDogZmFQb29wLFxuICBmYUxvY2F0aW9uUGluOiBmYUxvY2F0aW9uUGluLFxuICBmYU1hcE1hcmtlcjogZmFNYXBNYXJrZXIsXG4gIGZhS2FhYmE6IGZhS2FhYmEsXG4gIGZhVG9pbGV0UGFwZXI6IGZhVG9pbGV0UGFwZXIsXG4gIGZhSGVsbWV0U2FmZXR5OiBmYUhlbG1ldFNhZmV0eSxcbiAgZmFIYXJkSGF0OiBmYUhhcmRIYXQsXG4gIGZhSGF0SGFyZDogZmFIYXRIYXJkLFxuICBmYUVqZWN0OiBmYUVqZWN0LFxuICBmYUNpcmNsZVJpZ2h0OiBmYUNpcmNsZVJpZ2h0LFxuICBmYUFycm93QWx0Q2lyY2xlUmlnaHQ6IGZhQXJyb3dBbHRDaXJjbGVSaWdodCxcbiAgZmFQbGFuZUNpcmNsZUNoZWNrOiBmYVBsYW5lQ2lyY2xlQ2hlY2ssXG4gIGZhRmFjZVJvbGxpbmdFeWVzOiBmYUZhY2VSb2xsaW5nRXllcyxcbiAgZmFNZWhSb2xsaW5nRXllczogZmFNZWhSb2xsaW5nRXllcyxcbiAgZmFPYmplY3RHcm91cDogZmFPYmplY3RHcm91cCxcbiAgZmFDaGFydExpbmU6IGZhQ2hhcnRMaW5lLFxuICBmYUxpbmVDaGFydDogZmFMaW5lQ2hhcnQsXG4gIGZhTWFza1ZlbnRpbGF0b3I6IGZhTWFza1ZlbnRpbGF0b3IsXG4gIGZhQXJyb3dSaWdodDogZmFBcnJvd1JpZ2h0LFxuICBmYVNpZ25zUG9zdDogZmFTaWduc1Bvc3QsXG4gIGZhTWFwU2lnbnM6IGZhTWFwU2lnbnMsXG4gIGZhQ2FzaFJlZ2lzdGVyOiBmYUNhc2hSZWdpc3RlcixcbiAgZmFQZXJzb25DaXJjbGVRdWVzdGlvbjogZmFQZXJzb25DaXJjbGVRdWVzdGlvbixcbiAgZmFIOiBmYUgsXG4gIGZhVGFycDogZmFUYXJwLFxuICBmYVNjcmV3ZHJpdmVyV3JlbmNoOiBmYVNjcmV3ZHJpdmVyV3JlbmNoLFxuICBmYVRvb2xzOiBmYVRvb2xzLFxuICBmYUFycm93c1RvRXllOiBmYUFycm93c1RvRXllLFxuICBmYVBsdWdDaXJjbGVCb2x0OiBmYVBsdWdDaXJjbGVCb2x0LFxuICBmYUhlYXJ0OiBmYUhlYXJ0LFxuICBmYU1hcnNBbmRWZW51czogZmFNYXJzQW5kVmVudXMsXG4gIGZhSG91c2VVc2VyOiBmYUhvdXNlVXNlcixcbiAgZmFIb21lVXNlcjogZmFIb21lVXNlcixcbiAgZmFEdW1wc3RlckZpcmU6IGZhRHVtcHN0ZXJGaXJlLFxuICBmYUhvdXNlQ3JhY2s6IGZhSG91c2VDcmFjayxcbiAgZmFNYXJ0aW5pR2xhc3NDaXRydXM6IGZhTWFydGluaUdsYXNzQ2l0cnVzLFxuICBmYUNvY2t0YWlsOiBmYUNvY2t0YWlsLFxuICBmYUZhY2VTdXJwcmlzZTogZmFGYWNlU3VycHJpc2UsXG4gIGZhU3VycHJpc2U6IGZhU3VycHJpc2UsXG4gIGZhQm90dGxlV2F0ZXI6IGZhQm90dGxlV2F0ZXIsXG4gIGZhQ2lyY2xlUGF1c2U6IGZhQ2lyY2xlUGF1c2UsXG4gIGZhUGF1c2VDaXJjbGU6IGZhUGF1c2VDaXJjbGUsXG4gIGZhVG9pbGV0UGFwZXJTbGFzaDogZmFUb2lsZXRQYXBlclNsYXNoLFxuICBmYUFwcGxlV2hvbGU6IGZhQXBwbGVXaG9sZSxcbiAgZmFBcHBsZUFsdDogZmFBcHBsZUFsdCxcbiAgZmFLaXRjaGVuU2V0OiBmYUtpdGNoZW5TZXQsXG4gIGZhUjogZmFSLFxuICBmYVRlbXBlcmF0dXJlUXVhcnRlcjogZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsXG4gIGZhVGVtcGVyYXR1cmUxOiBmYVRlbXBlcmF0dXJlMSxcbiAgZmFUaGVybW9tZXRlcjE6IGZhVGhlcm1vbWV0ZXIxLFxuICBmYVRoZXJtb21ldGVyUXVhcnRlcjogZmFUaGVybW9tZXRlclF1YXJ0ZXIsXG4gIGZhQ3ViZTogZmFDdWJlLFxuICBmYUJpdGNvaW5TaWduOiBmYUJpdGNvaW5TaWduLFxuICBmYVNoaWVsZERvZzogZmFTaGllbGREb2csXG4gIGZhU29sYXJQYW5lbDogZmFTb2xhclBhbmVsLFxuICBmYUxvY2tPcGVuOiBmYUxvY2tPcGVuLFxuICBmYUVsZXZhdG9yOiBmYUVsZXZhdG9yLFxuICBmYU1vbmV5QmlsbFRyYW5zZmVyOiBmYU1vbmV5QmlsbFRyYW5zZmVyLFxuICBmYU1vbmV5QmlsbFRyZW5kVXA6IGZhTW9uZXlCaWxsVHJlbmRVcCxcbiAgZmFIb3VzZUZsb29kV2F0ZXJDaXJjbGVBcnJvd1JpZ2h0OiBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQsXG4gIGZhU3F1YXJlUG9sbEhvcml6b250YWw6IGZhU3F1YXJlUG9sbEhvcml6b250YWwsXG4gIGZhUG9sbEg6IGZhUG9sbEgsXG4gIGZhQ2lyY2xlOiBmYUNpcmNsZSxcbiAgZmFCYWNrd2FyZEZhc3Q6IGZhQmFja3dhcmRGYXN0LFxuICBmYUZhc3RCYWNrd2FyZDogZmFGYXN0QmFja3dhcmQsXG4gIGZhUmVjeWNsZTogZmFSZWN5Y2xlLFxuICBmYVVzZXJBc3Ryb25hdXQ6IGZhVXNlckFzdHJvbmF1dCxcbiAgZmFQbGFuZVNsYXNoOiBmYVBsYW5lU2xhc2gsXG4gIGZhVHJhZGVtYXJrOiBmYVRyYWRlbWFyayxcbiAgZmFCYXNrZXRiYWxsOiBmYUJhc2tldGJhbGwsXG4gIGZhQmFza2V0YmFsbEJhbGw6IGZhQmFza2V0YmFsbEJhbGwsXG4gIGZhU2F0ZWxsaXRlRGlzaDogZmFTYXRlbGxpdGVEaXNoLFxuICBmYUNpcmNsZVVwOiBmYUNpcmNsZVVwLFxuICBmYUFycm93QWx0Q2lyY2xlVXA6IGZhQXJyb3dBbHRDaXJjbGVVcCxcbiAgZmFNb2JpbGVTY3JlZW5CdXR0b246IGZhTW9iaWxlU2NyZWVuQnV0dG9uLFxuICBmYU1vYmlsZUFsdDogZmFNb2JpbGVBbHQsXG4gIGZhVm9sdW1lSGlnaDogZmFWb2x1bWVIaWdoLFxuICBmYVZvbHVtZVVwOiBmYVZvbHVtZVVwLFxuICBmYVVzZXJzUmF5czogZmFVc2Vyc1JheXMsXG4gIGZhV2FsbGV0OiBmYVdhbGxldCxcbiAgZmFDbGlwYm9hcmRDaGVjazogZmFDbGlwYm9hcmRDaGVjayxcbiAgZmFGaWxlQXVkaW86IGZhRmlsZUF1ZGlvLFxuICBmYUJ1cmdlcjogZmFCdXJnZXIsXG4gIGZhSGFtYnVyZ2VyOiBmYUhhbWJ1cmdlcixcbiAgZmFXcmVuY2g6IGZhV3JlbmNoLFxuICBmYUJ1Z3M6IGZhQnVncyxcbiAgZmFSdXBlZVNpZ246IGZhUnVwZWVTaWduLFxuICBmYVJ1cGVlOiBmYVJ1cGVlLFxuICBmYUZpbGVJbWFnZTogZmFGaWxlSW1hZ2UsXG4gIGZhQ2lyY2xlUXVlc3Rpb246IGZhQ2lyY2xlUXVlc3Rpb24sXG4gIGZhUXVlc3Rpb25DaXJjbGU6IGZhUXVlc3Rpb25DaXJjbGUsXG4gIGZhUGxhbmVEZXBhcnR1cmU6IGZhUGxhbmVEZXBhcnR1cmUsXG4gIGZhSGFuZHNoYWtlU2xhc2g6IGZhSGFuZHNoYWtlU2xhc2gsXG4gIGZhQm9va0Jvb2ttYXJrOiBmYUJvb2tCb29rbWFyayxcbiAgZmFDb2RlQnJhbmNoOiBmYUNvZGVCcmFuY2gsXG4gIGZhSGF0Q293Ym95OiBmYUhhdENvd2JveSxcbiAgZmFCcmlkZ2U6IGZhQnJpZGdlLFxuICBmYVBob25lRmxpcDogZmFQaG9uZUZsaXAsXG4gIGZhUGhvbmVBbHQ6IGZhUGhvbmVBbHQsXG4gIGZhVHJ1Y2tGcm9udDogZmFUcnVja0Zyb250LFxuICBmYUNhdDogZmFDYXQsXG4gIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb246IGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhVHJ1Y2tGaWVsZDogZmFUcnVja0ZpZWxkLFxuICBmYVJvdXRlOiBmYVJvdXRlLFxuICBmYUNsaXBib2FyZFF1ZXN0aW9uOiBmYUNsaXBib2FyZFF1ZXN0aW9uLFxuICBmYVBhbm9yYW1hOiBmYVBhbm9yYW1hLFxuICBmYUNvbW1lbnRNZWRpY2FsOiBmYUNvbW1lbnRNZWRpY2FsLFxuICBmYVRlZXRoT3BlbjogZmFUZWV0aE9wZW4sXG4gIGZhRmlsZUNpcmNsZU1pbnVzOiBmYUZpbGVDaXJjbGVNaW51cyxcbiAgZmFUYWdzOiBmYVRhZ3MsXG4gIGZhV2luZUdsYXNzOiBmYVdpbmVHbGFzcyxcbiAgZmFGb3J3YXJkRmFzdDogZmFGb3J3YXJkRmFzdCxcbiAgZmFGYXN0Rm9yd2FyZDogZmFGYXN0Rm9yd2FyZCxcbiAgZmFGYWNlTWVoQmxhbms6IGZhRmFjZU1laEJsYW5rLFxuICBmYU1laEJsYW5rOiBmYU1laEJsYW5rLFxuICBmYVNxdWFyZVBhcmtpbmc6IGZhU3F1YXJlUGFya2luZyxcbiAgZmFQYXJraW5nOiBmYVBhcmtpbmcsXG4gIGZhSG91c2VTaWduYWw6IGZhSG91c2VTaWduYWwsXG4gIGZhQmFyc1Byb2dyZXNzOiBmYUJhcnNQcm9ncmVzcyxcbiAgZmFUYXNrc0FsdDogZmFUYXNrc0FsdCxcbiAgZmFGYXVjZXREcmlwOiBmYUZhdWNldERyaXAsXG4gIGZhQ2FydEZsYXRiZWQ6IGZhQ2FydEZsYXRiZWQsXG4gIGZhRG9sbHlGbGF0YmVkOiBmYURvbGx5RmxhdGJlZCxcbiAgZmFCYW5TbW9raW5nOiBmYUJhblNtb2tpbmcsXG4gIGZhU21va2luZ0JhbjogZmFTbW9raW5nQmFuLFxuICBmYVRlcm1pbmFsOiBmYVRlcm1pbmFsLFxuICBmYU1vYmlsZUJ1dHRvbjogZmFNb2JpbGVCdXR0b24sXG4gIGZhSG91c2VNZWRpY2FsRmxhZzogZmFIb3VzZU1lZGljYWxGbGFnLFxuICBmYUJhc2tldFNob3BwaW5nOiBmYUJhc2tldFNob3BwaW5nLFxuICBmYVNob3BwaW5nQmFza2V0OiBmYVNob3BwaW5nQmFza2V0LFxuICBmYVRhcGU6IGZhVGFwZSxcbiAgZmFCdXNTaW1wbGU6IGZhQnVzU2ltcGxlLFxuICBmYUJ1c0FsdDogZmFCdXNBbHQsXG4gIGZhRXllOiBmYUV5ZSxcbiAgZmFGYWNlU2FkQ3J5OiBmYUZhY2VTYWRDcnksXG4gIGZhU2FkQ3J5OiBmYVNhZENyeSxcbiAgZmFBdWRpb0Rlc2NyaXB0aW9uOiBmYUF1ZGlvRGVzY3JpcHRpb24sXG4gIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbjogZmFQZXJzb25NaWxpdGFyeVRvUGVyc29uLFxuICBmYUZpbGVTaGllbGQ6IGZhRmlsZVNoaWVsZCxcbiAgZmFVc2VyU2xhc2g6IGZhVXNlclNsYXNoLFxuICBmYVBlbjogZmFQZW4sXG4gIGZhVG93ZXJPYnNlcnZhdGlvbjogZmFUb3dlck9ic2VydmF0aW9uLFxuICBmYUZpbGVDb2RlOiBmYUZpbGVDb2RlLFxuICBmYVNpZ25hbDogZmFTaWduYWwsXG4gIGZhU2lnbmFsNTogZmFTaWduYWw1LFxuICBmYVNpZ25hbFBlcmZlY3Q6IGZhU2lnbmFsUGVyZmVjdCxcbiAgZmFCdXM6IGZhQnVzLFxuICBmYUhlYXJ0Q2lyY2xlWG1hcms6IGZhSGVhcnRDaXJjbGVYbWFyayxcbiAgZmFIb3VzZUNoaW1uZXk6IGZhSG91c2VDaGltbmV5LFxuICBmYUhvbWVMZzogZmFIb21lTGcsXG4gIGZhV2luZG93TWF4aW1pemU6IGZhV2luZG93TWF4aW1pemUsXG4gIGZhRmFjZUZyb3duOiBmYUZhY2VGcm93bixcbiAgZmFGcm93bjogZmFGcm93bixcbiAgZmFQcmVzY3JpcHRpb246IGZhUHJlc2NyaXB0aW9uLFxuICBmYVNob3A6IGZhU2hvcCxcbiAgZmFTdG9yZUFsdDogZmFTdG9yZUFsdCxcbiAgZmFGbG9wcHlEaXNrOiBmYUZsb3BweURpc2ssXG4gIGZhU2F2ZTogZmFTYXZlLFxuICBmYVZpaGFyYTogZmFWaWhhcmEsXG4gIGZhU2NhbGVVbmJhbGFuY2VkOiBmYVNjYWxlVW5iYWxhbmNlZCxcbiAgZmFCYWxhbmNlU2NhbGVMZWZ0OiBmYUJhbGFuY2VTY2FsZUxlZnQsXG4gIGZhU29ydFVwOiBmYVNvcnRVcCxcbiAgZmFTb3J0QXNjOiBmYVNvcnRBc2MsXG4gIGZhQ29tbWVudERvdHM6IGZhQ29tbWVudERvdHMsXG4gIGZhQ29tbWVudGluZzogZmFDb21tZW50aW5nLFxuICBmYVBsYW50V2lsdDogZmFQbGFudFdpbHQsXG4gIGZhRGlhbW9uZDogZmFEaWFtb25kLFxuICBmYUZhY2VHcmluU3F1aW50OiBmYUZhY2VHcmluU3F1aW50LFxuICBmYUdyaW5TcXVpbnQ6IGZhR3JpblNxdWludCxcbiAgZmFIYW5kSG9sZGluZ0RvbGxhcjogZmFIYW5kSG9sZGluZ0RvbGxhcixcbiAgZmFIYW5kSG9sZGluZ1VzZDogZmFIYW5kSG9sZGluZ1VzZCxcbiAgZmFCYWN0ZXJpdW06IGZhQmFjdGVyaXVtLFxuICBmYUhhbmRQb2ludGVyOiBmYUhhbmRQb2ludGVyLFxuICBmYURydW1TdGVlbHBhbjogZmFEcnVtU3RlZWxwYW4sXG4gIGZhSGFuZFNjaXNzb3JzOiBmYUhhbmRTY2lzc29ycyxcbiAgZmFIYW5kc1ByYXlpbmc6IGZhSGFuZHNQcmF5aW5nLFxuICBmYVByYXlpbmdIYW5kczogZmFQcmF5aW5nSGFuZHMsXG4gIGZhQXJyb3dSb3RhdGVSaWdodDogZmFBcnJvd1JvdGF0ZVJpZ2h0LFxuICBmYUFycm93UmlnaHRSb3RhdGU6IGZhQXJyb3dSaWdodFJvdGF0ZSxcbiAgZmFBcnJvd1JvdGF0ZUZvcndhcmQ6IGZhQXJyb3dSb3RhdGVGb3J3YXJkLFxuICBmYVJlZG86IGZhUmVkbyxcbiAgZmFCaW9oYXphcmQ6IGZhQmlvaGF6YXJkLFxuICBmYUxvY2F0aW9uQ3Jvc3NoYWlyczogZmFMb2NhdGlvbkNyb3NzaGFpcnMsXG4gIGZhTG9jYXRpb246IGZhTG9jYXRpb24sXG4gIGZhTWFyc0RvdWJsZTogZmFNYXJzRG91YmxlLFxuICBmYUNoaWxkRHJlc3M6IGZhQ2hpbGREcmVzcyxcbiAgZmFVc2Vyc0JldHdlZW5MaW5lczogZmFVc2Vyc0JldHdlZW5MaW5lcyxcbiAgZmFMdW5nc1ZpcnVzOiBmYUx1bmdzVmlydXMsXG4gIGZhRmFjZUdyaW5UZWFyczogZmFGYWNlR3JpblRlYXJzLFxuICBmYUdyaW5UZWFyczogZmFHcmluVGVhcnMsXG4gIGZhUGhvbmU6IGZhUGhvbmUsXG4gIGZhQ2FsZW5kYXJYbWFyazogZmFDYWxlbmRhclhtYXJrLFxuICBmYUNhbGVuZGFyVGltZXM6IGZhQ2FsZW5kYXJUaW1lcyxcbiAgZmFDaGlsZFJlYWNoaW5nOiBmYUNoaWxkUmVhY2hpbmcsXG4gIGZhSGVhZFNpZGVWaXJ1czogZmFIZWFkU2lkZVZpcnVzLFxuICBmYVVzZXJHZWFyOiBmYVVzZXJHZWFyLFxuICBmYVVzZXJDb2c6IGZhVXNlckNvZyxcbiAgZmFBcnJvd1VwMTk6IGZhQXJyb3dVcDE5LFxuICBmYVNvcnROdW1lcmljVXA6IGZhU29ydE51bWVyaWNVcCxcbiAgZmFEb29yQ2xvc2VkOiBmYURvb3JDbG9zZWQsXG4gIGZhU2hpZWxkVmlydXM6IGZhU2hpZWxkVmlydXMsXG4gIGZhRGljZVNpeDogZmFEaWNlU2l4LFxuICBmYU1vc3F1aXRvTmV0OiBmYU1vc3F1aXRvTmV0LFxuICBmYUJyaWRnZVdhdGVyOiBmYUJyaWRnZVdhdGVyLFxuICBmYVBlcnNvbkJvb3RoOiBmYVBlcnNvbkJvb3RoLFxuICBmYVRleHRXaWR0aDogZmFUZXh0V2lkdGgsXG4gIGZhSGF0V2l6YXJkOiBmYUhhdFdpemFyZCxcbiAgZmFQZW5GYW5jeTogZmFQZW5GYW5jeSxcbiAgZmFQZXJzb25EaWdnaW5nOiBmYVBlcnNvbkRpZ2dpbmcsXG4gIGZhRGlnZ2luZzogZmFEaWdnaW5nLFxuICBmYVRyYXNoOiBmYVRyYXNoLFxuICBmYUdhdWdlU2ltcGxlOiBmYUdhdWdlU2ltcGxlLFxuICBmYUdhdWdlU2ltcGxlTWVkOiBmYUdhdWdlU2ltcGxlTWVkLFxuICBmYVRhY2hvbWV0ZXJBdmVyYWdlOiBmYVRhY2hvbWV0ZXJBdmVyYWdlLFxuICBmYUJvb2tNZWRpY2FsOiBmYUJvb2tNZWRpY2FsLFxuICBmYVBvbzogZmFQb28sXG4gIGZhUXVvdGVSaWdodDogZmFRdW90ZVJpZ2h0LFxuICBmYVF1b3RlUmlnaHRBbHQ6IGZhUXVvdGVSaWdodEFsdCxcbiAgZmFTaGlydDogZmFTaGlydCxcbiAgZmFUU2hpcnQ6IGZhVFNoaXJ0LFxuICBmYVRzaGlydDogZmFUc2hpcnQsXG4gIGZhQ3ViZXM6IGZhQ3ViZXMsXG4gIGZhRGl2aWRlOiBmYURpdmlkZSxcbiAgZmFUZW5nZVNpZ246IGZhVGVuZ2VTaWduLFxuICBmYVRlbmdlOiBmYVRlbmdlLFxuICBmYUhlYWRwaG9uZXM6IGZhSGVhZHBob25lcyxcbiAgZmFIYW5kc0hvbGRpbmc6IGZhSGFuZHNIb2xkaW5nLFxuICBmYUhhbmRzQ2xhcHBpbmc6IGZhSGFuZHNDbGFwcGluZyxcbiAgZmFSZXB1YmxpY2FuOiBmYVJlcHVibGljYW4sXG4gIGZhQXJyb3dMZWZ0OiBmYUFycm93TGVmdCxcbiAgZmFQZXJzb25DaXJjbGVYbWFyazogZmFQZXJzb25DaXJjbGVYbWFyayxcbiAgZmFSdWxlcjogZmFSdWxlcixcbiAgZmFBbGlnbkxlZnQ6IGZhQWxpZ25MZWZ0LFxuICBmYURpY2VENjogZmFEaWNlRDYsXG4gIGZhUmVzdHJvb206IGZhUmVzdHJvb20sXG4gIGZhSjogZmFKLFxuICBmYVVzZXJzVmlld2ZpbmRlcjogZmFVc2Vyc1ZpZXdmaW5kZXIsXG4gIGZhRmlsZVZpZGVvOiBmYUZpbGVWaWRlbyxcbiAgZmFVcFJpZ2h0RnJvbVNxdWFyZTogZmFVcFJpZ2h0RnJvbVNxdWFyZSxcbiAgZmFFeHRlcm5hbExpbmtBbHQ6IGZhRXh0ZXJuYWxMaW5rQWx0LFxuICBmYVRhYmxlQ2VsbHM6IGZhVGFibGVDZWxscyxcbiAgZmFUaDogZmFUaCxcbiAgZmFGaWxlUGRmOiBmYUZpbGVQZGYsXG4gIGZhQm9va0JpYmxlOiBmYUJvb2tCaWJsZSxcbiAgZmFCaWJsZTogZmFCaWJsZSxcbiAgZmFPOiBmYU8sXG4gIGZhU3VpdGNhc2VNZWRpY2FsOiBmYVN1aXRjYXNlTWVkaWNhbCxcbiAgZmFNZWRraXQ6IGZhTWVka2l0LFxuICBmYVVzZXJTZWNyZXQ6IGZhVXNlclNlY3JldCxcbiAgZmFPdHRlcjogZmFPdHRlcixcbiAgZmFQZXJzb25EcmVzczogZmFQZXJzb25EcmVzcyxcbiAgZmFGZW1hbGU6IGZhRmVtYWxlLFxuICBmYUNvbW1lbnREb2xsYXI6IGZhQ29tbWVudERvbGxhcixcbiAgZmFCdXNpbmVzc1RpbWU6IGZhQnVzaW5lc3NUaW1lLFxuICBmYUJyaWVmY2FzZUNsb2NrOiBmYUJyaWVmY2FzZUNsb2NrLFxuICBmYVRhYmxlQ2VsbHNMYXJnZTogZmFUYWJsZUNlbGxzTGFyZ2UsXG4gIGZhVGhMYXJnZTogZmFUaExhcmdlLFxuICBmYUJvb2tUYW5ha2g6IGZhQm9va1RhbmFraCxcbiAgZmFUYW5ha2g6IGZhVGFuYWtoLFxuICBmYVBob25lVm9sdW1lOiBmYVBob25lVm9sdW1lLFxuICBmYVZvbHVtZUNvbnRyb2xQaG9uZTogZmFWb2x1bWVDb250cm9sUGhvbmUsXG4gIGZhSGF0Q293Ym95U2lkZTogZmFIYXRDb3dib3lTaWRlLFxuICBmYUNsaXBib2FyZFVzZXI6IGZhQ2xpcGJvYXJkVXNlcixcbiAgZmFDaGlsZDogZmFDaGlsZCxcbiAgZmFMaXJhU2lnbjogZmFMaXJhU2lnbixcbiAgZmFTYXRlbGxpdGU6IGZhU2F0ZWxsaXRlLFxuICBmYVBsYW5lTG9jazogZmFQbGFuZUxvY2ssXG4gIGZhVGFnOiBmYVRhZyxcbiAgZmFDb21tZW50OiBmYUNvbW1lbnQsXG4gIGZhQ2FrZUNhbmRsZXM6IGZhQ2FrZUNhbmRsZXMsXG4gIGZhQmlydGhkYXlDYWtlOiBmYUJpcnRoZGF5Q2FrZSxcbiAgZmFDYWtlOiBmYUNha2UsXG4gIGZhRW52ZWxvcGU6IGZhRW52ZWxvcGUsXG4gIGZhQW5nbGVzVXA6IGZhQW5nbGVzVXAsXG4gIGZhQW5nbGVEb3VibGVVcDogZmFBbmdsZURvdWJsZVVwLFxuICBmYVBhcGVyY2xpcDogZmFQYXBlcmNsaXAsXG4gIGZhQXJyb3dSaWdodFRvQ2l0eTogZmFBcnJvd1JpZ2h0VG9DaXR5LFxuICBmYVJpYmJvbjogZmFSaWJib24sXG4gIGZhTHVuZ3M6IGZhTHVuZ3MsXG4gIGZhQXJyb3dVcDkxOiBmYUFycm93VXA5MSxcbiAgZmFTb3J0TnVtZXJpY1VwQWx0OiBmYVNvcnROdW1lcmljVXBBbHQsXG4gIGZhTGl0ZWNvaW5TaWduOiBmYUxpdGVjb2luU2lnbixcbiAgZmFCb3JkZXJOb25lOiBmYUJvcmRlck5vbmUsXG4gIGZhQ2lyY2xlTm9kZXM6IGZhQ2lyY2xlTm9kZXMsXG4gIGZhUGFyYWNodXRlQm94OiBmYVBhcmFjaHV0ZUJveCxcbiAgZmFJbmRlbnQ6IGZhSW5kZW50LFxuICBmYVRydWNrRmllbGRVbjogZmFUcnVja0ZpZWxkVW4sXG4gIGZhSG91cmdsYXNzOiBmYUhvdXJnbGFzcyxcbiAgZmFIb3VyZ2xhc3NFbXB0eTogZmFIb3VyZ2xhc3NFbXB0eSxcbiAgZmFNb3VudGFpbjogZmFNb3VudGFpbixcbiAgZmFVc2VyRG9jdG9yOiBmYVVzZXJEb2N0b3IsXG4gIGZhVXNlck1kOiBmYVVzZXJNZCxcbiAgZmFDaXJjbGVJbmZvOiBmYUNpcmNsZUluZm8sXG4gIGZhSW5mb0NpcmNsZTogZmFJbmZvQ2lyY2xlLFxuICBmYUNsb3VkTWVhdGJhbGw6IGZhQ2xvdWRNZWF0YmFsbCxcbiAgZmFDYW1lcmE6IGZhQ2FtZXJhLFxuICBmYUNhbWVyYUFsdDogZmFDYW1lcmFBbHQsXG4gIGZhU3F1YXJlVmlydXM6IGZhU3F1YXJlVmlydXMsXG4gIGZhTWV0ZW9yOiBmYU1ldGVvcixcbiAgZmFDYXJPbjogZmFDYXJPbixcbiAgZmFTbGVpZ2g6IGZhU2xlaWdoLFxuICBmYUFycm93RG93bjE5OiBmYUFycm93RG93bjE5LFxuICBmYVNvcnROdW1lcmljQXNjOiBmYVNvcnROdW1lcmljQXNjLFxuICBmYVNvcnROdW1lcmljRG93bjogZmFTb3J0TnVtZXJpY0Rvd24sXG4gIGZhSGFuZEhvbGRpbmdEcm9wbGV0OiBmYUhhbmRIb2xkaW5nRHJvcGxldCxcbiAgZmFIYW5kSG9sZGluZ1dhdGVyOiBmYUhhbmRIb2xkaW5nV2F0ZXIsXG4gIGZhV2F0ZXI6IGZhV2F0ZXIsXG4gIGZhQ2FsZW5kYXJDaGVjazogZmFDYWxlbmRhckNoZWNrLFxuICBmYUJyYWlsbGU6IGZhQnJhaWxsZSxcbiAgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsOiBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwsXG4gIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0OiBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCxcbiAgZmFMYW5kbWFyazogZmFMYW5kbWFyayxcbiAgZmFUcnVjazogZmFUcnVjayxcbiAgZmFDcm9zc2hhaXJzOiBmYUNyb3NzaGFpcnMsXG4gIGZhUGVyc29uQ2FuZTogZmFQZXJzb25DYW5lLFxuICBmYVRlbnQ6IGZhVGVudCxcbiAgZmFWZXN0UGF0Y2hlczogZmFWZXN0UGF0Y2hlcyxcbiAgZmFDaGVja0RvdWJsZTogZmFDaGVja0RvdWJsZSxcbiAgZmFBcnJvd0Rvd25BWjogZmFBcnJvd0Rvd25BWixcbiAgZmFTb3J0QWxwaGFBc2M6IGZhU29ydEFscGhhQXNjLFxuICBmYVNvcnRBbHBoYURvd246IGZhU29ydEFscGhhRG93bixcbiAgZmFNb25leUJpbGxXaGVhdDogZmFNb25leUJpbGxXaGVhdCxcbiAgZmFDb29raWU6IGZhQ29va2llLFxuICBmYUFycm93Um90YXRlTGVmdDogZmFBcnJvd1JvdGF0ZUxlZnQsXG4gIGZhQXJyb3dMZWZ0Um90YXRlOiBmYUFycm93TGVmdFJvdGF0ZSxcbiAgZmFBcnJvd1JvdGF0ZUJhY2s6IGZhQXJyb3dSb3RhdGVCYWNrLFxuICBmYUFycm93Um90YXRlQmFja3dhcmQ6IGZhQXJyb3dSb3RhdGVCYWNrd2FyZCxcbiAgZmFVbmRvOiBmYVVuZG8sXG4gIGZhSGFyZERyaXZlOiBmYUhhcmREcml2ZSxcbiAgZmFIZGQ6IGZhSGRkLFxuICBmYUZhY2VHcmluU3F1aW50VGVhcnM6IGZhRmFjZUdyaW5TcXVpbnRUZWFycyxcbiAgZmFHcmluU3F1aW50VGVhcnM6IGZhR3JpblNxdWludFRlYXJzLFxuICBmYUR1bWJiZWxsOiBmYUR1bWJiZWxsLFxuICBmYVJlY3RhbmdsZUxpc3Q6IGZhUmVjdGFuZ2xlTGlzdCxcbiAgZmFMaXN0QWx0OiBmYUxpc3RBbHQsXG4gIGZhVGFycERyb3BsZXQ6IGZhVGFycERyb3BsZXQsXG4gIGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2s6IGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2ssXG4gIGZhUGVyc29uU2tpaW5nTm9yZGljOiBmYVBlcnNvblNraWluZ05vcmRpYyxcbiAgZmFTa2lpbmdOb3JkaWM6IGZhU2tpaW5nTm9yZGljLFxuICBmYUNhbGVuZGFyUGx1czogZmFDYWxlbmRhclBsdXMsXG4gIGZhUGxhbmVBcnJpdmFsOiBmYVBsYW5lQXJyaXZhbCxcbiAgZmFDaXJjbGVMZWZ0OiBmYUNpcmNsZUxlZnQsXG4gIGZhQXJyb3dBbHRDaXJjbGVMZWZ0OiBmYUFycm93QWx0Q2lyY2xlTGVmdCxcbiAgZmFUcmFpblN1YndheTogZmFUcmFpblN1YndheSxcbiAgZmFTdWJ3YXk6IGZhU3Vid2F5LFxuICBmYUNoYXJ0R2FudHQ6IGZhQ2hhcnRHYW50dCxcbiAgZmFJbmRpYW5SdXBlZVNpZ246IGZhSW5kaWFuUnVwZWVTaWduLFxuICBmYUluZGlhblJ1cGVlOiBmYUluZGlhblJ1cGVlLFxuICBmYUlucjogZmFJbnIsXG4gIGZhQ3JvcFNpbXBsZTogZmFDcm9wU2ltcGxlLFxuICBmYUNyb3BBbHQ6IGZhQ3JvcEFsdCxcbiAgZmFNb25leUJpbGwxOiBmYU1vbmV5QmlsbDEsXG4gIGZhTW9uZXlCaWxsQWx0OiBmYU1vbmV5QmlsbEFsdCxcbiAgZmFMZWZ0TG9uZzogZmFMZWZ0TG9uZyxcbiAgZmFMb25nQXJyb3dBbHRMZWZ0OiBmYUxvbmdBcnJvd0FsdExlZnQsXG4gIGZhRG5hOiBmYURuYSxcbiAgZmFWaXJ1c1NsYXNoOiBmYVZpcnVzU2xhc2gsXG4gIGZhTWludXM6IGZhTWludXMsXG4gIGZhU3VidHJhY3Q6IGZhU3VidHJhY3QsXG4gIGZhQ2hlc3M6IGZhQ2hlc3MsXG4gIGZhQXJyb3dMZWZ0TG9uZzogZmFBcnJvd0xlZnRMb25nLFxuICBmYUxvbmdBcnJvd0xlZnQ6IGZhTG9uZ0Fycm93TGVmdCxcbiAgZmFQbHVnQ2lyY2xlQ2hlY2s6IGZhUGx1Z0NpcmNsZUNoZWNrLFxuICBmYVN0cmVldFZpZXc6IGZhU3RyZWV0VmlldyxcbiAgZmFGcmFuY1NpZ246IGZhRnJhbmNTaWduLFxuICBmYVZvbHVtZU9mZjogZmFWb2x1bWVPZmYsXG4gIGZhSGFuZHNBc2xJbnRlcnByZXRpbmc6IGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsXG4gIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmc6IGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsXG4gIGZhQXNsSW50ZXJwcmV0aW5nOiBmYUFzbEludGVycHJldGluZyxcbiAgZmFIYW5kc0FtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nOiBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsXG4gIGZhR2VhcjogZmFHZWFyLFxuICBmYUNvZzogZmFDb2csXG4gIGZhRHJvcGxldFNsYXNoOiBmYURyb3BsZXRTbGFzaCxcbiAgZmFUaW50U2xhc2g6IGZhVGludFNsYXNoLFxuICBmYU1vc3F1ZTogZmFNb3NxdWUsXG4gIGZhTW9zcXVpdG86IGZhTW9zcXVpdG8sXG4gIGZhU3Rhck9mRGF2aWQ6IGZhU3Rhck9mRGF2aWQsXG4gIGZhUGVyc29uTWlsaXRhcnlSaWZsZTogZmFQZXJzb25NaWxpdGFyeVJpZmxlLFxuICBmYUNhcnRTaG9wcGluZzogZmFDYXJ0U2hvcHBpbmcsXG4gIGZhU2hvcHBpbmdDYXJ0OiBmYVNob3BwaW5nQ2FydCxcbiAgZmFWaWFsczogZmFWaWFscyxcbiAgZmFQbHVnQ2lyY2xlUGx1czogZmFQbHVnQ2lyY2xlUGx1cyxcbiAgZmFQbGFjZU9mV29yc2hpcDogZmFQbGFjZU9mV29yc2hpcCxcbiAgZmFHcmlwVmVydGljYWw6IGZhR3JpcFZlcnRpY2FsLFxuICBmYUFycm93VHVyblVwOiBmYUFycm93VHVyblVwLFxuICBmYUxldmVsVXA6IGZhTGV2ZWxVcCxcbiAgZmFVOiBmYVUsXG4gIGZhU3F1YXJlUm9vdFZhcmlhYmxlOiBmYVNxdWFyZVJvb3RWYXJpYWJsZSxcbiAgZmFTcXVhcmVSb290QWx0OiBmYVNxdWFyZVJvb3RBbHQsXG4gIGZhQ2xvY2s6IGZhQ2xvY2ssXG4gIGZhQ2xvY2tGb3VyOiBmYUNsb2NrRm91cixcbiAgZmFCYWNrd2FyZFN0ZXA6IGZhQmFja3dhcmRTdGVwLFxuICBmYVN0ZXBCYWNrd2FyZDogZmFTdGVwQmFja3dhcmQsXG4gIGZhUGFsbGV0OiBmYVBhbGxldCxcbiAgZmFGYXVjZXQ6IGZhRmF1Y2V0LFxuICBmYUJhc2ViYWxsQmF0QmFsbDogZmFCYXNlYmFsbEJhdEJhbGwsXG4gIGZhUzogZmFTLFxuICBmYVRpbWVsaW5lOiBmYVRpbWVsaW5lLFxuICBmYUtleWJvYXJkOiBmYUtleWJvYXJkLFxuICBmYUNhcmV0RG93bjogZmFDYXJldERvd24sXG4gIGZhSG91c2VDaGltbmV5TWVkaWNhbDogZmFIb3VzZUNoaW1uZXlNZWRpY2FsLFxuICBmYUNsaW5pY01lZGljYWw6IGZhQ2xpbmljTWVkaWNhbCxcbiAgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM6IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzLFxuICBmYVRlbXBlcmF0dXJlMzogZmFUZW1wZXJhdHVyZTMsXG4gIGZhVGhlcm1vbWV0ZXIzOiBmYVRoZXJtb21ldGVyMyxcbiAgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnM6IGZhVGhlcm1vbWV0ZXJUaHJlZVF1YXJ0ZXJzLFxuICBmYU1vYmlsZVNjcmVlbjogZmFNb2JpbGVTY3JlZW4sXG4gIGZhTW9iaWxlQW5kcm9pZEFsdDogZmFNb2JpbGVBbmRyb2lkQWx0LFxuICBmYVBsYW5lVXA6IGZhUGxhbmVVcCxcbiAgZmFQaWdneUJhbms6IGZhUGlnZ3lCYW5rLFxuICBmYUJhdHRlcnlIYWxmOiBmYUJhdHRlcnlIYWxmLFxuICBmYUJhdHRlcnkzOiBmYUJhdHRlcnkzLFxuICBmYU1vdW50YWluQ2l0eTogZmFNb3VudGFpbkNpdHksXG4gIGZhQ29pbnM6IGZhQ29pbnMsXG4gIGZhS2hhbmRhOiBmYUtoYW5kYSxcbiAgZmFTbGlkZXJzOiBmYVNsaWRlcnMsXG4gIGZhU2xpZGVyc0g6IGZhU2xpZGVyc0gsXG4gIGZhRm9sZGVyVHJlZTogZmFGb2xkZXJUcmVlLFxuICBmYU5ldHdvcmtXaXJlZDogZmFOZXR3b3JrV2lyZWQsXG4gIGZhTWFwUGluOiBmYU1hcFBpbixcbiAgZmFIYW1zYTogZmFIYW1zYSxcbiAgZmFDZW50U2lnbjogZmFDZW50U2lnbixcbiAgZmFGbGFzazogZmFGbGFzayxcbiAgZmFQZXJzb25QcmVnbmFudDogZmFQZXJzb25QcmVnbmFudCxcbiAgZmFXYW5kU3BhcmtsZXM6IGZhV2FuZFNwYXJrbGVzLFxuICBmYUVsbGlwc2lzVmVydGljYWw6IGZhRWxsaXBzaXNWZXJ0aWNhbCxcbiAgZmFFbGxpcHNpc1Y6IGZhRWxsaXBzaXNWLFxuICBmYVRpY2tldDogZmFUaWNrZXQsXG4gIGZhUG93ZXJPZmY6IGZhUG93ZXJPZmYsXG4gIGZhUmlnaHRMb25nOiBmYVJpZ2h0TG9uZyxcbiAgZmFMb25nQXJyb3dBbHRSaWdodDogZmFMb25nQXJyb3dBbHRSaWdodCxcbiAgZmFGbGFnVXNhOiBmYUZsYWdVc2EsXG4gIGZhTGFwdG9wRmlsZTogZmFMYXB0b3BGaWxlLFxuICBmYVR0eTogZmFUdHksXG4gIGZhVGVsZXR5cGU6IGZhVGVsZXR5cGUsXG4gIGZhRGlhZ3JhbU5leHQ6IGZhRGlhZ3JhbU5leHQsXG4gIGZhUGVyc29uUmlmbGU6IGZhUGVyc29uUmlmbGUsXG4gIGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb246IGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhQ2xvc2VkQ2FwdGlvbmluZzogZmFDbG9zZWRDYXB0aW9uaW5nLFxuICBmYVBlcnNvbkhpa2luZzogZmFQZXJzb25IaWtpbmcsXG4gIGZhSGlraW5nOiBmYUhpa2luZyxcbiAgZmFWZW51c0RvdWJsZTogZmFWZW51c0RvdWJsZSxcbiAgZmFJbWFnZXM6IGZhSW1hZ2VzLFxuICBmYUNhbGN1bGF0b3I6IGZhQ2FsY3VsYXRvcixcbiAgZmFQZW9wbGVQdWxsaW5nOiBmYVBlb3BsZVB1bGxpbmcsXG4gIGZhTjogZmFOLFxuICBmYUNhYmxlQ2FyOiBmYUNhYmxlQ2FyLFxuICBmYVRyYW06IGZhVHJhbSxcbiAgZmFDbG91ZFJhaW46IGZhQ2xvdWRSYWluLFxuICBmYUJ1aWxkaW5nQ2lyY2xlWG1hcms6IGZhQnVpbGRpbmdDaXJjbGVYbWFyayxcbiAgZmFTaGlwOiBmYVNoaXAsXG4gIGZhQXJyb3dzRG93blRvTGluZTogZmFBcnJvd3NEb3duVG9MaW5lLFxuICBmYURvd25sb2FkOiBmYURvd25sb2FkLFxuICBmYUZhY2VHcmluOiBmYUZhY2VHcmluLFxuICBmYUdyaW46IGZhR3JpbixcbiAgZmFEZWxldGVMZWZ0OiBmYURlbGV0ZUxlZnQsXG4gIGZhQmFja3NwYWNlOiBmYUJhY2tzcGFjZSxcbiAgZmFFeWVEcm9wcGVyOiBmYUV5ZURyb3BwZXIsXG4gIGZhRXllRHJvcHBlckVtcHR5OiBmYUV5ZURyb3BwZXJFbXB0eSxcbiAgZmFFeWVkcm9wcGVyOiBmYUV5ZWRyb3BwZXIsXG4gIGZhRmlsZUNpcmNsZUNoZWNrOiBmYUZpbGVDaXJjbGVDaGVjayxcbiAgZmFGb3J3YXJkOiBmYUZvcndhcmQsXG4gIGZhTW9iaWxlOiBmYU1vYmlsZSxcbiAgZmFNb2JpbGVBbmRyb2lkOiBmYU1vYmlsZUFuZHJvaWQsXG4gIGZhTW9iaWxlUGhvbmU6IGZhTW9iaWxlUGhvbmUsXG4gIGZhRmFjZU1laDogZmFGYWNlTWVoLFxuICBmYU1laDogZmFNZWgsXG4gIGZhQWxpZ25DZW50ZXI6IGZhQWxpZ25DZW50ZXIsXG4gIGZhQm9va1NrdWxsOiBmYUJvb2tTa3VsbCxcbiAgZmFCb29rRGVhZDogZmFCb29rRGVhZCxcbiAgZmFJZENhcmQ6IGZhSWRDYXJkLFxuICBmYURyaXZlcnNMaWNlbnNlOiBmYURyaXZlcnNMaWNlbnNlLFxuICBmYU91dGRlbnQ6IGZhT3V0ZGVudCxcbiAgZmFEZWRlbnQ6IGZhRGVkZW50LFxuICBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb246IGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFIb3VzZTogZmFIb3VzZSxcbiAgZmFIb21lOiBmYUhvbWUsXG4gIGZhSG9tZUFsdDogZmFIb21lQWx0LFxuICBmYUhvbWVMZ0FsdDogZmFIb21lTGdBbHQsXG4gIGZhQ2FsZW5kYXJXZWVrOiBmYUNhbGVuZGFyV2VlayxcbiAgZmFMYXB0b3BNZWRpY2FsOiBmYUxhcHRvcE1lZGljYWwsXG4gIGZhQjogZmFCLFxuICBmYUZpbGVNZWRpY2FsOiBmYUZpbGVNZWRpY2FsLFxuICBmYURpY2VPbmU6IGZhRGljZU9uZSxcbiAgZmFLaXdpQmlyZDogZmFLaXdpQmlyZCxcbiAgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0OiBmYUFycm93UmlnaHRBcnJvd0xlZnQsXG4gIGZhRXhjaGFuZ2U6IGZhRXhjaGFuZ2UsXG4gIGZhUm90YXRlUmlnaHQ6IGZhUm90YXRlUmlnaHQsXG4gIGZhUmVkb0FsdDogZmFSZWRvQWx0LFxuICBmYVJvdGF0ZUZvcndhcmQ6IGZhUm90YXRlRm9yd2FyZCxcbiAgZmFVdGVuc2lsczogZmFVdGVuc2lscyxcbiAgZmFDdXRsZXJ5OiBmYUN1dGxlcnksXG4gIGZhQXJyb3dVcFdpZGVTaG9ydDogZmFBcnJvd1VwV2lkZVNob3J0LFxuICBmYVNvcnRBbW91bnRVcDogZmFTb3J0QW1vdW50VXAsXG4gIGZhTWlsbFNpZ246IGZhTWlsbFNpZ24sXG4gIGZhQm93bFJpY2U6IGZhQm93bFJpY2UsXG4gIGZhU2t1bGw6IGZhU2t1bGwsXG4gIGZhVG93ZXJCcm9hZGNhc3Q6IGZhVG93ZXJCcm9hZGNhc3QsXG4gIGZhQnJvYWRjYXN0VG93ZXI6IGZhQnJvYWRjYXN0VG93ZXIsXG4gIGZhVHJ1Y2tQaWNrdXA6IGZhVHJ1Y2tQaWNrdXAsXG4gIGZhVXBMb25nOiBmYVVwTG9uZyxcbiAgZmFMb25nQXJyb3dBbHRVcDogZmFMb25nQXJyb3dBbHRVcCxcbiAgZmFTdG9wOiBmYVN0b3AsXG4gIGZhQ29kZU1lcmdlOiBmYUNvZGVNZXJnZSxcbiAgZmFVcGxvYWQ6IGZhVXBsb2FkLFxuICBmYUh1cnJpY2FuZTogZmFIdXJyaWNhbmUsXG4gIGZhTW91bmQ6IGZhTW91bmQsXG4gIGZhVG9pbGV0UG9ydGFibGU6IGZhVG9pbGV0UG9ydGFibGUsXG4gIGZhQ29tcGFjdERpc2M6IGZhQ29tcGFjdERpc2MsXG4gIGZhRmlsZUFycm93RG93bjogZmFGaWxlQXJyb3dEb3duLFxuICBmYUZpbGVEb3dubG9hZDogZmFGaWxlRG93bmxvYWQsXG4gIGZhQ2FyYXZhbjogZmFDYXJhdmFuLFxuICBmYVNoaWVsZENhdDogZmFTaGllbGRDYXQsXG4gIGZhQm9sdDogZmFCb2x0LFxuICBmYVphcDogZmFaYXAsXG4gIGZhR2xhc3NXYXRlcjogZmFHbGFzc1dhdGVyLFxuICBmYU9pbFdlbGw6IGZhT2lsV2VsbCxcbiAgZmFWYXVsdDogZmFWYXVsdCxcbiAgZmFNYXJzOiBmYU1hcnMsXG4gIGZhVG9pbGV0OiBmYVRvaWxldCxcbiAgZmFQbGFuZUNpcmNsZVhtYXJrOiBmYVBsYW5lQ2lyY2xlWG1hcmssXG4gIGZhWWVuU2lnbjogZmFZZW5TaWduLFxuICBmYUNueTogZmFDbnksXG4gIGZhSnB5OiBmYUpweSxcbiAgZmFSbWI6IGZhUm1iLFxuICBmYVllbjogZmFZZW4sXG4gIGZhUnVibGVTaWduOiBmYVJ1YmxlU2lnbixcbiAgZmFSb3VibGU6IGZhUm91YmxlLFxuICBmYVJ1YjogZmFSdWIsXG4gIGZhUnVibGU6IGZhUnVibGUsXG4gIGZhU3VuOiBmYVN1bixcbiAgZmFHdWl0YXI6IGZhR3VpdGFyLFxuICBmYUZhY2VMYXVnaFdpbms6IGZhRmFjZUxhdWdoV2luayxcbiAgZmFMYXVnaFdpbms6IGZhTGF1Z2hXaW5rLFxuICBmYUhvcnNlSGVhZDogZmFIb3JzZUhlYWQsXG4gIGZhQm9yZUhvbGU6IGZhQm9yZUhvbGUsXG4gIGZhSW5kdXN0cnk6IGZhSW5kdXN0cnksXG4gIGZhQ2lyY2xlRG93bjogZmFDaXJjbGVEb3duLFxuICBmYUFycm93QWx0Q2lyY2xlRG93bjogZmFBcnJvd0FsdENpcmNsZURvd24sXG4gIGZhQXJyb3dzVHVyblRvRG90czogZmFBcnJvd3NUdXJuVG9Eb3RzLFxuICBmYUZsb3JpblNpZ246IGZhRmxvcmluU2lnbixcbiAgZmFBcnJvd0Rvd25TaG9ydFdpZGU6IGZhQXJyb3dEb3duU2hvcnRXaWRlLFxuICBmYVNvcnRBbW91bnREZXNjOiBmYVNvcnRBbW91bnREZXNjLFxuICBmYVNvcnRBbW91bnREb3duQWx0OiBmYVNvcnRBbW91bnREb3duQWx0LFxuICBmYUxlc3NUaGFuOiBmYUxlc3NUaGFuLFxuICBmYUFuZ2xlRG93bjogZmFBbmdsZURvd24sXG4gIGZhQ2FyVHVubmVsOiBmYUNhclR1bm5lbCxcbiAgZmFIZWFkU2lkZUNvdWdoOiBmYUhlYWRTaWRlQ291Z2gsXG4gIGZhR3JpcExpbmVzOiBmYUdyaXBMaW5lcyxcbiAgZmFUaHVtYnNEb3duOiBmYVRodW1ic0Rvd24sXG4gIGZhVXNlckxvY2s6IGZhVXNlckxvY2ssXG4gIGZhQXJyb3dSaWdodExvbmc6IGZhQXJyb3dSaWdodExvbmcsXG4gIGZhTG9uZ0Fycm93UmlnaHQ6IGZhTG9uZ0Fycm93UmlnaHQsXG4gIGZhQW5jaG9yQ2lyY2xlWG1hcms6IGZhQW5jaG9yQ2lyY2xlWG1hcmssXG4gIGZhRWxsaXBzaXM6IGZhRWxsaXBzaXMsXG4gIGZhRWxsaXBzaXNIOiBmYUVsbGlwc2lzSCxcbiAgZmFDaGVzc1Bhd246IGZhQ2hlc3NQYXduLFxuICBmYUtpdE1lZGljYWw6IGZhS2l0TWVkaWNhbCxcbiAgZmFGaXJzdEFpZDogZmFGaXJzdEFpZCxcbiAgZmFQZXJzb25UaHJvdWdoV2luZG93OiBmYVBlcnNvblRocm91Z2hXaW5kb3csXG4gIGZhVG9vbGJveDogZmFUb29sYm94LFxuICBmYUhhbmRzSG9sZGluZ0NpcmNsZTogZmFIYW5kc0hvbGRpbmdDaXJjbGUsXG4gIGZhQnVnOiBmYUJ1ZyxcbiAgZmFDcmVkaXRDYXJkOiBmYUNyZWRpdENhcmQsXG4gIGZhQ3JlZGl0Q2FyZEFsdDogZmFDcmVkaXRDYXJkQWx0LFxuICBmYUNhcjogZmFDYXIsXG4gIGZhQXV0b21vYmlsZTogZmFBdXRvbW9iaWxlLFxuICBmYUhhbmRIb2xkaW5nSGFuZDogZmFIYW5kSG9sZGluZ0hhbmQsXG4gIGZhQm9va09wZW5SZWFkZXI6IGZhQm9va09wZW5SZWFkZXIsXG4gIGZhQm9va1JlYWRlcjogZmFCb29rUmVhZGVyLFxuICBmYU1vdW50YWluU3VuOiBmYU1vdW50YWluU3VuLFxuICBmYUFycm93c0xlZnRSaWdodFRvTGluZTogZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUsXG4gIGZhRGljZUQyMDogZmFEaWNlRDIwLFxuICBmYVRydWNrRHJvcGxldDogZmFUcnVja0Ryb3BsZXQsXG4gIGZhRmlsZUNpcmNsZVhtYXJrOiBmYUZpbGVDaXJjbGVYbWFyayxcbiAgZmFUZW1wZXJhdHVyZUFycm93VXA6IGZhVGVtcGVyYXR1cmVBcnJvd1VwLFxuICBmYVRlbXBlcmF0dXJlVXA6IGZhVGVtcGVyYXR1cmVVcCxcbiAgZmFNZWRhbDogZmFNZWRhbCxcbiAgZmFCZWQ6IGZhQmVkLFxuICBmYVNxdWFyZUg6IGZhU3F1YXJlSCxcbiAgZmFIU3F1YXJlOiBmYUhTcXVhcmUsXG4gIGZhUG9kY2FzdDogZmFQb2RjYXN0LFxuICBmYVRlbXBlcmF0dXJlRnVsbDogZmFUZW1wZXJhdHVyZUZ1bGwsXG4gIGZhVGVtcGVyYXR1cmU0OiBmYVRlbXBlcmF0dXJlNCxcbiAgZmFUaGVybW9tZXRlcjQ6IGZhVGhlcm1vbWV0ZXI0LFxuICBmYVRoZXJtb21ldGVyRnVsbDogZmFUaGVybW9tZXRlckZ1bGwsXG4gIGZhQmVsbDogZmFCZWxsLFxuICBmYVN1cGVyc2NyaXB0OiBmYVN1cGVyc2NyaXB0LFxuICBmYVBsdWdDaXJjbGVYbWFyazogZmFQbHVnQ2lyY2xlWG1hcmssXG4gIGZhU3Rhck9mTGlmZTogZmFTdGFyT2ZMaWZlLFxuICBmYVBob25lU2xhc2g6IGZhUGhvbmVTbGFzaCxcbiAgZmFQYWludFJvbGxlcjogZmFQYWludFJvbGxlcixcbiAgZmFIYW5kc2hha2VBbmdsZTogZmFIYW5kc2hha2VBbmdsZSxcbiAgZmFIYW5kc0hlbHBpbmc6IGZhSGFuZHNIZWxwaW5nLFxuICBmYUxvY2F0aW9uRG90OiBmYUxvY2F0aW9uRG90LFxuICBmYU1hcE1hcmtlckFsdDogZmFNYXBNYXJrZXJBbHQsXG4gIGZhRmlsZTogZmFGaWxlLFxuICBmYUdyZWF0ZXJUaGFuOiBmYUdyZWF0ZXJUaGFuLFxuICBmYVBlcnNvblN3aW1taW5nOiBmYVBlcnNvblN3aW1taW5nLFxuICBmYVN3aW1tZXI6IGZhU3dpbW1lcixcbiAgZmFBcnJvd0Rvd246IGZhQXJyb3dEb3duLFxuICBmYURyb3BsZXQ6IGZhRHJvcGxldCxcbiAgZmFUaW50OiBmYVRpbnQsXG4gIGZhRXJhc2VyOiBmYUVyYXNlcixcbiAgZmFFYXJ0aEFtZXJpY2FzOiBmYUVhcnRoQW1lcmljYXMsXG4gIGZhRWFydGg6IGZhRWFydGgsXG4gIGZhRWFydGhBbWVyaWNhOiBmYUVhcnRoQW1lcmljYSxcbiAgZmFHbG9iZUFtZXJpY2FzOiBmYUdsb2JlQW1lcmljYXMsXG4gIGZhUGVyc29uQnVyc3Q6IGZhUGVyc29uQnVyc3QsXG4gIGZhRG92ZTogZmFEb3ZlLFxuICBmYUJhdHRlcnlFbXB0eTogZmFCYXR0ZXJ5RW1wdHksXG4gIGZhQmF0dGVyeTA6IGZhQmF0dGVyeTAsXG4gIGZhU29ja3M6IGZhU29ja3MsXG4gIGZhSW5ib3g6IGZhSW5ib3gsXG4gIGZhU2VjdGlvbjogZmFTZWN0aW9uLFxuICBmYUdhdWdlSGlnaDogZmFHYXVnZUhpZ2gsXG4gIGZhVGFjaG9tZXRlckFsdDogZmFUYWNob21ldGVyQWx0LFxuICBmYVRhY2hvbWV0ZXJBbHRGYXN0OiBmYVRhY2hvbWV0ZXJBbHRGYXN0LFxuICBmYUVudmVsb3BlT3BlblRleHQ6IGZhRW52ZWxvcGVPcGVuVGV4dCxcbiAgZmFIb3NwaXRhbDogZmFIb3NwaXRhbCxcbiAgZmFIb3NwaXRhbEFsdDogZmFIb3NwaXRhbEFsdCxcbiAgZmFIb3NwaXRhbFdpZGU6IGZhSG9zcGl0YWxXaWRlLFxuICBmYVdpbmVCb3R0bGU6IGZhV2luZUJvdHRsZSxcbiAgZmFDaGVzc1Jvb2s6IGZhQ2hlc3NSb29rLFxuICBmYUJhcnNTdGFnZ2VyZWQ6IGZhQmFyc1N0YWdnZXJlZCxcbiAgZmFSZW9yZGVyOiBmYVJlb3JkZXIsXG4gIGZhU3RyZWFtOiBmYVN0cmVhbSxcbiAgZmFEaGFybWFjaGFrcmE6IGZhRGhhcm1hY2hha3JhLFxuICBmYUhvdGRvZzogZmFIb3Rkb2csXG4gIGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lOiBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZSxcbiAgZmFCbGluZDogZmFCbGluZCxcbiAgZmFEcnVtOiBmYURydW0sXG4gIGZhSWNlQ3JlYW06IGZhSWNlQ3JlYW0sXG4gIGZhSGVhcnRDaXJjbGVCb2x0OiBmYUhlYXJ0Q2lyY2xlQm9sdCxcbiAgZmFGYXg6IGZhRmF4LFxuICBmYVBhcmFncmFwaDogZmFQYXJhZ3JhcGgsXG4gIGZhQ2hlY2tUb1Nsb3Q6IGZhQ2hlY2tUb1Nsb3QsXG4gIGZhVm90ZVllYTogZmFWb3RlWWVhLFxuICBmYVN0YXJIYWxmOiBmYVN0YXJIYWxmLFxuICBmYUJveGVzU3RhY2tlZDogZmFCb3hlc1N0YWNrZWQsXG4gIGZhQm94ZXM6IGZhQm94ZXMsXG4gIGZhQm94ZXNBbHQ6IGZhQm94ZXNBbHQsXG4gIGZhTGluazogZmFMaW5rLFxuICBmYUNoYWluOiBmYUNoYWluLFxuICBmYUVhckxpc3RlbjogZmFFYXJMaXN0ZW4sXG4gIGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtczogZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zLFxuICBmYVRyZWVDaXR5OiBmYVRyZWVDaXR5LFxuICBmYVBsYXk6IGZhUGxheSxcbiAgZmFGb250OiBmYUZvbnQsXG4gIGZhVGFibGVDZWxsc1Jvd0xvY2s6IGZhVGFibGVDZWxsc1Jvd0xvY2ssXG4gIGZhUnVwaWFoU2lnbjogZmFSdXBpYWhTaWduLFxuICBmYU1hZ25pZnlpbmdHbGFzczogZmFNYWduaWZ5aW5nR2xhc3MsXG4gIGZhU2VhcmNoOiBmYVNlYXJjaCxcbiAgZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw6IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsLFxuICBmYVBpbmdQb25nUGFkZGxlQmFsbDogZmFQaW5nUG9uZ1BhZGRsZUJhbGwsXG4gIGZhVGFibGVUZW5uaXM6IGZhVGFibGVUZW5uaXMsXG4gIGZhUGVyc29uRG90c0Zyb21MaW5lOiBmYVBlcnNvbkRvdHNGcm9tTGluZSxcbiAgZmFEaWFnbm9zZXM6IGZhRGlhZ25vc2VzLFxuICBmYVRyYXNoQ2FuQXJyb3dVcDogZmFUcmFzaENhbkFycm93VXAsXG4gIGZhVHJhc2hSZXN0b3JlQWx0OiBmYVRyYXNoUmVzdG9yZUFsdCxcbiAgZmFOYWlyYVNpZ246IGZhTmFpcmFTaWduLFxuICBmYUNhcnRBcnJvd0Rvd246IGZhQ2FydEFycm93RG93bixcbiAgZmFXYWxraWVUYWxraWU6IGZhV2Fsa2llVGFsa2llLFxuICBmYUZpbGVQZW46IGZhRmlsZVBlbixcbiAgZmFGaWxlRWRpdDogZmFGaWxlRWRpdCxcbiAgZmFSZWNlaXB0OiBmYVJlY2VpcHQsXG4gIGZhU3F1YXJlUGVuOiBmYVNxdWFyZVBlbixcbiAgZmFQZW5TcXVhcmU6IGZhUGVuU3F1YXJlLFxuICBmYVBlbmNpbFNxdWFyZTogZmFQZW5jaWxTcXVhcmUsXG4gIGZhU3VpdGNhc2VSb2xsaW5nOiBmYVN1aXRjYXNlUm9sbGluZyxcbiAgZmFQZXJzb25DaXJjbGVFeGNsYW1hdGlvbjogZmFQZXJzb25DaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFDaGV2cm9uRG93bjogZmFDaGV2cm9uRG93bixcbiAgZmFCYXR0ZXJ5RnVsbDogZmFCYXR0ZXJ5RnVsbCxcbiAgZmFCYXR0ZXJ5OiBmYUJhdHRlcnksXG4gIGZhQmF0dGVyeTU6IGZhQmF0dGVyeTUsXG4gIGZhU2t1bGxDcm9zc2JvbmVzOiBmYVNrdWxsQ3Jvc3Nib25lcyxcbiAgZmFDb2RlQ29tcGFyZTogZmFDb2RlQ29tcGFyZSxcbiAgZmFMaXN0VWw6IGZhTGlzdFVsLFxuICBmYUxpc3REb3RzOiBmYUxpc3REb3RzLFxuICBmYVNjaG9vbExvY2s6IGZhU2Nob29sTG9jayxcbiAgZmFUb3dlckNlbGw6IGZhVG93ZXJDZWxsLFxuICBmYURvd25Mb25nOiBmYURvd25Mb25nLFxuICBmYUxvbmdBcnJvd0FsdERvd246IGZhTG9uZ0Fycm93QWx0RG93bixcbiAgZmFSYW5raW5nU3RhcjogZmFSYW5raW5nU3RhcixcbiAgZmFDaGVzc0tpbmc6IGZhQ2hlc3NLaW5nLFxuICBmYVBlcnNvbkhhcmFzc2luZzogZmFQZXJzb25IYXJhc3NpbmcsXG4gIGZhQnJhemlsaWFuUmVhbFNpZ246IGZhQnJhemlsaWFuUmVhbFNpZ24sXG4gIGZhTGFuZG1hcmtEb21lOiBmYUxhbmRtYXJrRG9tZSxcbiAgZmFMYW5kbWFya0FsdDogZmFMYW5kbWFya0FsdCxcbiAgZmFBcnJvd1VwOiBmYUFycm93VXAsXG4gIGZhVHY6IGZhVHYsXG4gIGZhVGVsZXZpc2lvbjogZmFUZWxldmlzaW9uLFxuICBmYVR2QWx0OiBmYVR2QWx0LFxuICBmYVNocmltcDogZmFTaHJpbXAsXG4gIGZhTGlzdENoZWNrOiBmYUxpc3RDaGVjayxcbiAgZmFUYXNrczogZmFUYXNrcyxcbiAgZmFKdWdEZXRlcmdlbnQ6IGZhSnVnRGV0ZXJnZW50LFxuICBmYUNpcmNsZVVzZXI6IGZhQ2lyY2xlVXNlcixcbiAgZmFVc2VyQ2lyY2xlOiBmYVVzZXJDaXJjbGUsXG4gIGZhVXNlclNoaWVsZDogZmFVc2VyU2hpZWxkLFxuICBmYVdpbmQ6IGZhV2luZCxcbiAgZmFDYXJCdXJzdDogZmFDYXJCdXJzdCxcbiAgZmFDYXJDcmFzaDogZmFDYXJDcmFzaCxcbiAgZmFZOiBmYVksXG4gIGZhUGVyc29uU25vd2JvYXJkaW5nOiBmYVBlcnNvblNub3dib2FyZGluZyxcbiAgZmFTbm93Ym9hcmRpbmc6IGZhU25vd2JvYXJkaW5nLFxuICBmYVRydWNrRmFzdDogZmFUcnVja0Zhc3QsXG4gIGZhU2hpcHBpbmdGYXN0OiBmYVNoaXBwaW5nRmFzdCxcbiAgZmFGaXNoOiBmYUZpc2gsXG4gIGZhVXNlckdyYWR1YXRlOiBmYVVzZXJHcmFkdWF0ZSxcbiAgZmFDaXJjbGVIYWxmU3Ryb2tlOiBmYUNpcmNsZUhhbGZTdHJva2UsXG4gIGZhQWRqdXN0OiBmYUFkanVzdCxcbiAgZmFDbGFwcGVyYm9hcmQ6IGZhQ2xhcHBlcmJvYXJkLFxuICBmYUNpcmNsZVJhZGlhdGlvbjogZmFDaXJjbGVSYWRpYXRpb24sXG4gIGZhUmFkaWF0aW9uQWx0OiBmYVJhZGlhdGlvbkFsdCxcbiAgZmFCYXNlYmFsbDogZmFCYXNlYmFsbCxcbiAgZmFCYXNlYmFsbEJhbGw6IGZhQmFzZWJhbGxCYWxsLFxuICBmYUpldEZpZ2h0ZXJVcDogZmFKZXRGaWdodGVyVXAsXG4gIGZhRGlhZ3JhbVByb2plY3Q6IGZhRGlhZ3JhbVByb2plY3QsXG4gIGZhUHJvamVjdERpYWdyYW06IGZhUHJvamVjdERpYWdyYW0sXG4gIGZhQ29weTogZmFDb3B5LFxuICBmYVZvbHVtZVhtYXJrOiBmYVZvbHVtZVhtYXJrLFxuICBmYVZvbHVtZU11dGU6IGZhVm9sdW1lTXV0ZSxcbiAgZmFWb2x1bWVUaW1lczogZmFWb2x1bWVUaW1lcyxcbiAgZmFIYW5kU3BhcmtsZXM6IGZhSGFuZFNwYXJrbGVzLFxuICBmYUdyaXA6IGZhR3JpcCxcbiAgZmFHcmlwSG9yaXpvbnRhbDogZmFHcmlwSG9yaXpvbnRhbCxcbiAgZmFTaGFyZUZyb21TcXVhcmU6IGZhU2hhcmVGcm9tU3F1YXJlLFxuICBmYVNoYXJlU3F1YXJlOiBmYVNoYXJlU3F1YXJlLFxuICBmYUNoaWxkQ29tYmF0YW50OiBmYUNoaWxkQ29tYmF0YW50LFxuICBmYUNoaWxkUmlmbGU6IGZhQ2hpbGRSaWZsZSxcbiAgZmFHdW46IGZhR3VuLFxuICBmYVNxdWFyZVBob25lOiBmYVNxdWFyZVBob25lLFxuICBmYVBob25lU3F1YXJlOiBmYVBob25lU3F1YXJlLFxuICBmYVBsdXM6IGZhUGx1cyxcbiAgZmFBZGQ6IGZhQWRkLFxuICBmYUV4cGFuZDogZmFFeHBhbmQsXG4gIGZhQ29tcHV0ZXI6IGZhQ29tcHV0ZXIsXG4gIGZhWG1hcms6IGZhWG1hcmssXG4gIGZhQ2xvc2U6IGZhQ2xvc2UsXG4gIGZhTXVsdGlwbHk6IGZhTXVsdGlwbHksXG4gIGZhUmVtb3ZlOiBmYVJlbW92ZSxcbiAgZmFUaW1lczogZmFUaW1lcyxcbiAgZmFBcnJvd3NVcERvd25MZWZ0UmlnaHQ6IGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LFxuICBmYUFycm93czogZmFBcnJvd3MsXG4gIGZhQ2hhbGtib2FyZFVzZXI6IGZhQ2hhbGtib2FyZFVzZXIsXG4gIGZhQ2hhbGtib2FyZFRlYWNoZXI6IGZhQ2hhbGtib2FyZFRlYWNoZXIsXG4gIGZhUGVzb1NpZ246IGZhUGVzb1NpZ24sXG4gIGZhQnVpbGRpbmdTaGllbGQ6IGZhQnVpbGRpbmdTaGllbGQsXG4gIGZhQmFieTogZmFCYWJ5LFxuICBmYVVzZXJzTGluZTogZmFVc2Vyc0xpbmUsXG4gIGZhUXVvdGVMZWZ0OiBmYVF1b3RlTGVmdCxcbiAgZmFRdW90ZUxlZnRBbHQ6IGZhUXVvdGVMZWZ0QWx0LFxuICBmYVRyYWN0b3I6IGZhVHJhY3RvcixcbiAgZmFUcmFzaEFycm93VXA6IGZhVHJhc2hBcnJvd1VwLFxuICBmYVRyYXNoUmVzdG9yZTogZmFUcmFzaFJlc3RvcmUsXG4gIGZhQXJyb3dEb3duVXBMb2NrOiBmYUFycm93RG93blVwTG9jayxcbiAgZmFMaW5lc0xlYW5pbmc6IGZhTGluZXNMZWFuaW5nLFxuICBmYVJ1bGVyQ29tYmluZWQ6IGZhUnVsZXJDb21iaW5lZCxcbiAgZmFDb3B5cmlnaHQ6IGZhQ29weXJpZ2h0LFxuICBmYUVxdWFsczogZmFFcXVhbHMsXG4gIGZhQmxlbmRlcjogZmFCbGVuZGVyLFxuICBmYVRlZXRoOiBmYVRlZXRoLFxuICBmYVNoZWtlbFNpZ246IGZhU2hla2VsU2lnbixcbiAgZmFJbHM6IGZhSWxzLFxuICBmYVNoZWtlbDogZmFTaGVrZWwsXG4gIGZhU2hlcWVsOiBmYVNoZXFlbCxcbiAgZmFTaGVxZWxTaWduOiBmYVNoZXFlbFNpZ24sXG4gIGZhTWFwOiBmYU1hcCxcbiAgZmFSb2NrZXQ6IGZhUm9ja2V0LFxuICBmYVBob3RvRmlsbTogZmFQaG90b0ZpbG0sXG4gIGZhUGhvdG9WaWRlbzogZmFQaG90b1ZpZGVvLFxuICBmYUZvbGRlck1pbnVzOiBmYUZvbGRlck1pbnVzLFxuICBmYVN0b3JlOiBmYVN0b3JlLFxuICBmYUFycm93VHJlbmRVcDogZmFBcnJvd1RyZW5kVXAsXG4gIGZhUGx1Z0NpcmNsZU1pbnVzOiBmYVBsdWdDaXJjbGVNaW51cyxcbiAgZmFTaWduSGFuZ2luZzogZmFTaWduSGFuZ2luZyxcbiAgZmFTaWduOiBmYVNpZ24sXG4gIGZhQmV6aWVyQ3VydmU6IGZhQmV6aWVyQ3VydmUsXG4gIGZhQmVsbFNsYXNoOiBmYUJlbGxTbGFzaCxcbiAgZmFUYWJsZXQ6IGZhVGFibGV0LFxuICBmYVRhYmxldEFuZHJvaWQ6IGZhVGFibGV0QW5kcm9pZCxcbiAgZmFTY2hvb2xGbGFnOiBmYVNjaG9vbEZsYWcsXG4gIGZhRmlsbDogZmFGaWxsLFxuICBmYUFuZ2xlVXA6IGZhQW5nbGVVcCxcbiAgZmFEcnVtc3RpY2tCaXRlOiBmYURydW1zdGlja0JpdGUsXG4gIGZhSG9sbHlCZXJyeTogZmFIb2xseUJlcnJ5LFxuICBmYUNoZXZyb25MZWZ0OiBmYUNoZXZyb25MZWZ0LFxuICBmYUJhY3RlcmlhOiBmYUJhY3RlcmlhLFxuICBmYUhhbmRMaXphcmQ6IGZhSGFuZExpemFyZCxcbiAgZmFOb3RkZWY6IGZhTm90ZGVmLFxuICBmYURpc2Vhc2U6IGZhRGlzZWFzZSxcbiAgZmFCcmllZmNhc2VNZWRpY2FsOiBmYUJyaWVmY2FzZU1lZGljYWwsXG4gIGZhR2VuZGVybGVzczogZmFHZW5kZXJsZXNzLFxuICBmYUNoZXZyb25SaWdodDogZmFDaGV2cm9uUmlnaHQsXG4gIGZhUmV0d2VldDogZmFSZXR3ZWV0LFxuICBmYUNhclJlYXI6IGZhQ2FyUmVhcixcbiAgZmFDYXJBbHQ6IGZhQ2FyQWx0LFxuICBmYVB1bXBTb2FwOiBmYVB1bXBTb2FwLFxuICBmYVZpZGVvU2xhc2g6IGZhVmlkZW9TbGFzaCxcbiAgZmFCYXR0ZXJ5UXVhcnRlcjogZmFCYXR0ZXJ5UXVhcnRlcixcbiAgZmFCYXR0ZXJ5MjogZmFCYXR0ZXJ5MixcbiAgZmFSYWRpbzogZmFSYWRpbyxcbiAgZmFCYWJ5Q2FycmlhZ2U6IGZhQmFieUNhcnJpYWdlLFxuICBmYUNhcnJpYWdlQmFieTogZmFDYXJyaWFnZUJhYnksXG4gIGZhVHJhZmZpY0xpZ2h0OiBmYVRyYWZmaWNMaWdodCxcbiAgZmFUaGVybW9tZXRlcjogZmFUaGVybW9tZXRlcixcbiAgZmFWckNhcmRib2FyZDogZmFWckNhcmRib2FyZCxcbiAgZmFIYW5kTWlkZGxlRmluZ2VyOiBmYUhhbmRNaWRkbGVGaW5nZXIsXG4gIGZhUGVyY2VudDogZmFQZXJjZW50LFxuICBmYVBlcmNlbnRhZ2U6IGZhUGVyY2VudGFnZSxcbiAgZmFUcnVja01vdmluZzogZmFUcnVja01vdmluZyxcbiAgZmFHbGFzc1dhdGVyRHJvcGxldDogZmFHbGFzc1dhdGVyRHJvcGxldCxcbiAgZmFEaXNwbGF5OiBmYURpc3BsYXksXG4gIGZhRmFjZVNtaWxlOiBmYUZhY2VTbWlsZSxcbiAgZmFTbWlsZTogZmFTbWlsZSxcbiAgZmFUaHVtYnRhY2s6IGZhVGh1bWJ0YWNrLFxuICBmYVRodW1iVGFjazogZmFUaHVtYlRhY2ssXG4gIGZhVHJvcGh5OiBmYVRyb3BoeSxcbiAgZmFQZXJzb25QcmF5aW5nOiBmYVBlcnNvblByYXlpbmcsXG4gIGZhUHJheTogZmFQcmF5LFxuICBmYUhhbW1lcjogZmFIYW1tZXIsXG4gIGZhSGFuZFBlYWNlOiBmYUhhbmRQZWFjZSxcbiAgZmFSb3RhdGU6IGZhUm90YXRlLFxuICBmYVN5bmNBbHQ6IGZhU3luY0FsdCxcbiAgZmFTcGlubmVyOiBmYVNwaW5uZXIsXG4gIGZhUm9ib3Q6IGZhUm9ib3QsXG4gIGZhUGVhY2U6IGZhUGVhY2UsXG4gIGZhR2VhcnM6IGZhR2VhcnMsXG4gIGZhQ29nczogZmFDb2dzLFxuICBmYVdhcmVob3VzZTogZmFXYXJlaG91c2UsXG4gIGZhQXJyb3dVcFJpZ2h0RG90czogZmFBcnJvd1VwUmlnaHREb3RzLFxuICBmYVNwbG90Y2g6IGZhU3Bsb3RjaCxcbiAgZmFGYWNlR3JpbkhlYXJ0czogZmFGYWNlR3JpbkhlYXJ0cyxcbiAgZmFHcmluSGVhcnRzOiBmYUdyaW5IZWFydHMsXG4gIGZhRGljZUZvdXI6IGZhRGljZUZvdXIsXG4gIGZhU2ltQ2FyZDogZmFTaW1DYXJkLFxuICBmYVRyYW5zZ2VuZGVyOiBmYVRyYW5zZ2VuZGVyLFxuICBmYVRyYW5zZ2VuZGVyQWx0OiBmYVRyYW5zZ2VuZGVyQWx0LFxuICBmYU1lcmN1cnk6IGZhTWVyY3VyeSxcbiAgZmFBcnJvd1R1cm5Eb3duOiBmYUFycm93VHVybkRvd24sXG4gIGZhTGV2ZWxEb3duOiBmYUxldmVsRG93bixcbiAgZmFQZXJzb25GYWxsaW5nQnVyc3Q6IGZhUGVyc29uRmFsbGluZ0J1cnN0LFxuICBmYUF3YXJkOiBmYUF3YXJkLFxuICBmYVRpY2tldFNpbXBsZTogZmFUaWNrZXRTaW1wbGUsXG4gIGZhVGlja2V0QWx0OiBmYVRpY2tldEFsdCxcbiAgZmFCdWlsZGluZzogZmFCdWlsZGluZyxcbiAgZmFBbmdsZXNMZWZ0OiBmYUFuZ2xlc0xlZnQsXG4gIGZhQW5nbGVEb3VibGVMZWZ0OiBmYUFuZ2xlRG91YmxlTGVmdCxcbiAgZmFRcmNvZGU6IGZhUXJjb2RlLFxuICBmYUNsb2NrUm90YXRlTGVmdDogZmFDbG9ja1JvdGF0ZUxlZnQsXG4gIGZhSGlzdG9yeTogZmFIaXN0b3J5LFxuICBmYUZhY2VHcmluQmVhbVN3ZWF0OiBmYUZhY2VHcmluQmVhbVN3ZWF0LFxuICBmYUdyaW5CZWFtU3dlYXQ6IGZhR3JpbkJlYW1Td2VhdCxcbiAgZmFGaWxlRXhwb3J0OiBmYUZpbGVFeHBvcnQsXG4gIGZhQXJyb3dSaWdodEZyb21GaWxlOiBmYUFycm93UmlnaHRGcm9tRmlsZSxcbiAgZmFTaGllbGQ6IGZhU2hpZWxkLFxuICBmYVNoaWVsZEJsYW5rOiBmYVNoaWVsZEJsYW5rLFxuICBmYUFycm93VXBTaG9ydFdpZGU6IGZhQXJyb3dVcFNob3J0V2lkZSxcbiAgZmFTb3J0QW1vdW50VXBBbHQ6IGZhU29ydEFtb3VudFVwQWx0LFxuICBmYUhvdXNlTWVkaWNhbDogZmFIb3VzZU1lZGljYWwsXG4gIGZhR29sZkJhbGxUZWU6IGZhR29sZkJhbGxUZWUsXG4gIGZhR29sZkJhbGw6IGZhR29sZkJhbGwsXG4gIGZhQ2lyY2xlQ2hldnJvbkxlZnQ6IGZhQ2lyY2xlQ2hldnJvbkxlZnQsXG4gIGZhQ2hldnJvbkNpcmNsZUxlZnQ6IGZhQ2hldnJvbkNpcmNsZUxlZnQsXG4gIGZhSG91c2VDaGltbmV5V2luZG93OiBmYUhvdXNlQ2hpbW5leVdpbmRvdyxcbiAgZmFQZW5OaWI6IGZhUGVuTmliLFxuICBmYVRlbnRBcnJvd1R1cm5MZWZ0OiBmYVRlbnRBcnJvd1R1cm5MZWZ0LFxuICBmYVRlbnRzOiBmYVRlbnRzLFxuICBmYVdhbmRNYWdpYzogZmFXYW5kTWFnaWMsXG4gIGZhTWFnaWM6IGZhTWFnaWMsXG4gIGZhRG9nOiBmYURvZyxcbiAgZmFDYXJyb3Q6IGZhQ2Fycm90LFxuICBmYU1vb246IGZhTW9vbixcbiAgZmFXaW5lR2xhc3NFbXB0eTogZmFXaW5lR2xhc3NFbXB0eSxcbiAgZmFXaW5lR2xhc3NBbHQ6IGZhV2luZUdsYXNzQWx0LFxuICBmYUNoZWVzZTogZmFDaGVlc2UsXG4gIGZhWWluWWFuZzogZmFZaW5ZYW5nLFxuICBmYU11c2ljOiBmYU11c2ljLFxuICBmYUNvZGVDb21taXQ6IGZhQ29kZUNvbW1pdCxcbiAgZmFUZW1wZXJhdHVyZUxvdzogZmFUZW1wZXJhdHVyZUxvdyxcbiAgZmFQZXJzb25CaWtpbmc6IGZhUGVyc29uQmlraW5nLFxuICBmYUJpa2luZzogZmFCaWtpbmcsXG4gIGZhQnJvb206IGZhQnJvb20sXG4gIGZhU2hpZWxkSGVhcnQ6IGZhU2hpZWxkSGVhcnQsXG4gIGZhR29wdXJhbTogZmFHb3B1cmFtLFxuICBmYUVhcnRoT2NlYW5pYTogZmFFYXJ0aE9jZWFuaWEsXG4gIGZhR2xvYmVPY2VhbmlhOiBmYUdsb2JlT2NlYW5pYSxcbiAgZmFTcXVhcmVYbWFyazogZmFTcXVhcmVYbWFyayxcbiAgZmFUaW1lc1NxdWFyZTogZmFUaW1lc1NxdWFyZSxcbiAgZmFYbWFya1NxdWFyZTogZmFYbWFya1NxdWFyZSxcbiAgZmFIYXNodGFnOiBmYUhhc2h0YWcsXG4gIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlcjogZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyLFxuICBmYUV4cGFuZEFsdDogZmFFeHBhbmRBbHQsXG4gIGZhT2lsQ2FuOiBmYU9pbENhbixcbiAgZmFUOiBmYVQsXG4gIGZhSGlwcG86IGZhSGlwcG8sXG4gIGZhQ2hhcnRDb2x1bW46IGZhQ2hhcnRDb2x1bW4sXG4gIGZhSW5maW5pdHk6IGZhSW5maW5pdHksXG4gIGZhVmlhbENpcmNsZUNoZWNrOiBmYVZpYWxDaXJjbGVDaGVjayxcbiAgZmFQZXJzb25BcnJvd0Rvd25Ub0xpbmU6IGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLFxuICBmYVZvaWNlbWFpbDogZmFWb2ljZW1haWwsXG4gIGZhRmFuOiBmYUZhbixcbiAgZmFQZXJzb25XYWxraW5nTHVnZ2FnZTogZmFQZXJzb25XYWxraW5nTHVnZ2FnZSxcbiAgZmFVcERvd246IGZhVXBEb3duLFxuICBmYUFycm93c0FsdFY6IGZhQXJyb3dzQWx0VixcbiAgZmFDbG91ZE1vb25SYWluOiBmYUNsb3VkTW9vblJhaW4sXG4gIGZhQ2FsZW5kYXI6IGZhQ2FsZW5kYXIsXG4gIGZhVHJhaWxlcjogZmFUcmFpbGVyLFxuICBmYUJhaGFpOiBmYUJhaGFpLFxuICBmYUhheWthbDogZmFIYXlrYWwsXG4gIGZhU2RDYXJkOiBmYVNkQ2FyZCxcbiAgZmFEcmFnb246IGZhRHJhZ29uLFxuICBmYVNob2VQcmludHM6IGZhU2hvZVByaW50cyxcbiAgZmFDaXJjbGVQbHVzOiBmYUNpcmNsZVBsdXMsXG4gIGZhUGx1c0NpcmNsZTogZmFQbHVzQ2lyY2xlLFxuICBmYUZhY2VHcmluVG9uZ3VlV2luazogZmFGYWNlR3JpblRvbmd1ZVdpbmssXG4gIGZhR3JpblRvbmd1ZVdpbms6IGZhR3JpblRvbmd1ZVdpbmssXG4gIGZhSGFuZEhvbGRpbmc6IGZhSGFuZEhvbGRpbmcsXG4gIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uOiBmYVBsdWdDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFMaW5rU2xhc2g6IGZhTGlua1NsYXNoLFxuICBmYUNoYWluQnJva2VuOiBmYUNoYWluQnJva2VuLFxuICBmYUNoYWluU2xhc2g6IGZhQ2hhaW5TbGFzaCxcbiAgZmFVbmxpbms6IGZhVW5saW5rLFxuICBmYUNsb25lOiBmYUNsb25lLFxuICBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0OiBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0LFxuICBmYUFycm93VXBaQTogZmFBcnJvd1VwWkEsXG4gIGZhU29ydEFscGhhVXBBbHQ6IGZhU29ydEFscGhhVXBBbHQsXG4gIGZhRmlyZUZsYW1lQ3VydmVkOiBmYUZpcmVGbGFtZUN1cnZlZCxcbiAgZmFGaXJlQWx0OiBmYUZpcmVBbHQsXG4gIGZhVG9ybmFkbzogZmFUb3JuYWRvLFxuICBmYUZpbGVDaXJjbGVQbHVzOiBmYUZpbGVDaXJjbGVQbHVzLFxuICBmYUJvb2tRdXJhbjogZmFCb29rUXVyYW4sXG4gIGZhUXVyYW46IGZhUXVyYW4sXG4gIGZhQW5jaG9yOiBmYUFuY2hvcixcbiAgZmFCb3JkZXJBbGw6IGZhQm9yZGVyQWxsLFxuICBmYUZhY2VBbmdyeTogZmFGYWNlQW5ncnksXG4gIGZhQW5ncnk6IGZhQW5ncnksXG4gIGZhQ29va2llQml0ZTogZmFDb29raWVCaXRlLFxuICBmYUFycm93VHJlbmREb3duOiBmYUFycm93VHJlbmREb3duLFxuICBmYVJzczogZmFSc3MsXG4gIGZhRmVlZDogZmFGZWVkLFxuICBmYURyYXdQb2x5Z29uOiBmYURyYXdQb2x5Z29uLFxuICBmYVNjYWxlQmFsYW5jZWQ6IGZhU2NhbGVCYWxhbmNlZCxcbiAgZmFCYWxhbmNlU2NhbGU6IGZhQmFsYW5jZVNjYWxlLFxuICBmYUdhdWdlU2ltcGxlSGlnaDogZmFHYXVnZVNpbXBsZUhpZ2gsXG4gIGZhVGFjaG9tZXRlcjogZmFUYWNob21ldGVyLFxuICBmYVRhY2hvbWV0ZXJGYXN0OiBmYVRhY2hvbWV0ZXJGYXN0LFxuICBmYVNob3dlcjogZmFTaG93ZXIsXG4gIGZhRGVza3RvcDogZmFEZXNrdG9wLFxuICBmYURlc2t0b3BBbHQ6IGZhRGVza3RvcEFsdCxcbiAgZmFNOiBmYU0sXG4gIGZhVGFibGVMaXN0OiBmYVRhYmxlTGlzdCxcbiAgZmFUaExpc3Q6IGZhVGhMaXN0LFxuICBmYUNvbW1lbnRTbXM6IGZhQ29tbWVudFNtcyxcbiAgZmFTbXM6IGZhU21zLFxuICBmYUJvb2s6IGZhQm9vayxcbiAgZmFVc2VyUGx1czogZmFVc2VyUGx1cyxcbiAgZmFDaGVjazogZmFDaGVjayxcbiAgZmFCYXR0ZXJ5VGhyZWVRdWFydGVyczogZmFCYXR0ZXJ5VGhyZWVRdWFydGVycyxcbiAgZmFCYXR0ZXJ5NDogZmFCYXR0ZXJ5NCxcbiAgZmFIb3VzZUNpcmNsZUNoZWNrOiBmYUhvdXNlQ2lyY2xlQ2hlY2ssXG4gIGZhQW5nbGVMZWZ0OiBmYUFuZ2xlTGVmdCxcbiAgZmFEaWFncmFtU3VjY2Vzc29yOiBmYURpYWdyYW1TdWNjZXNzb3IsXG4gIGZhVHJ1Y2tBcnJvd1JpZ2h0OiBmYVRydWNrQXJyb3dSaWdodCxcbiAgZmFBcnJvd3NTcGxpdFVwQW5kTGVmdDogZmFBcnJvd3NTcGxpdFVwQW5kTGVmdCxcbiAgZmFIYW5kRmlzdDogZmFIYW5kRmlzdCxcbiAgZmFGaXN0UmFpc2VkOiBmYUZpc3RSYWlzZWQsXG4gIGZhQ2xvdWRNb29uOiBmYUNsb3VkTW9vbixcbiAgZmFCcmllZmNhc2U6IGZhQnJpZWZjYXNlLFxuICBmYVBlcnNvbkZhbGxpbmc6IGZhUGVyc29uRmFsbGluZyxcbiAgZmFJbWFnZVBvcnRyYWl0OiBmYUltYWdlUG9ydHJhaXQsXG4gIGZhUG9ydHJhaXQ6IGZhUG9ydHJhaXQsXG4gIGZhVXNlclRhZzogZmFVc2VyVGFnLFxuICBmYVJ1ZzogZmFSdWcsXG4gIGZhRWFydGhFdXJvcGU6IGZhRWFydGhFdXJvcGUsXG4gIGZhR2xvYmVFdXJvcGU6IGZhR2xvYmVFdXJvcGUsXG4gIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZTogZmFDYXJ0RmxhdGJlZFN1aXRjYXNlLFxuICBmYUx1Z2dhZ2VDYXJ0OiBmYUx1Z2dhZ2VDYXJ0LFxuICBmYVJlY3RhbmdsZVhtYXJrOiBmYVJlY3RhbmdsZVhtYXJrLFxuICBmYVJlY3RhbmdsZVRpbWVzOiBmYVJlY3RhbmdsZVRpbWVzLFxuICBmYVRpbWVzUmVjdGFuZ2xlOiBmYVRpbWVzUmVjdGFuZ2xlLFxuICBmYVdpbmRvd0Nsb3NlOiBmYVdpbmRvd0Nsb3NlLFxuICBmYUJhaHRTaWduOiBmYUJhaHRTaWduLFxuICBmYUJvb2tPcGVuOiBmYUJvb2tPcGVuLFxuICBmYUJvb2tKb3VybmFsV2hpbGxzOiBmYUJvb2tKb3VybmFsV2hpbGxzLFxuICBmYUpvdXJuYWxXaGlsbHM6IGZhSm91cm5hbFdoaWxscyxcbiAgZmFIYW5kY3VmZnM6IGZhSGFuZGN1ZmZzLFxuICBmYVRyaWFuZ2xlRXhjbGFtYXRpb246IGZhVHJpYW5nbGVFeGNsYW1hdGlvbixcbiAgZmFFeGNsYW1hdGlvblRyaWFuZ2xlOiBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUsXG4gIGZhV2FybmluZzogZmFXYXJuaW5nLFxuICBmYURhdGFiYXNlOiBmYURhdGFiYXNlLFxuICBmYVNoYXJlOiBmYVNoYXJlLFxuICBmYU1haWxGb3J3YXJkOiBmYU1haWxGb3J3YXJkLFxuICBmYUJvdHRsZURyb3BsZXQ6IGZhQm90dGxlRHJvcGxldCxcbiAgZmFNYXNrRmFjZTogZmFNYXNrRmFjZSxcbiAgZmFIaWxsUm9ja3NsaWRlOiBmYUhpbGxSb2Nrc2xpZGUsXG4gIGZhUmlnaHRMZWZ0OiBmYVJpZ2h0TGVmdCxcbiAgZmFFeGNoYW5nZUFsdDogZmFFeGNoYW5nZUFsdCxcbiAgZmFQYXBlclBsYW5lOiBmYVBhcGVyUGxhbmUsXG4gIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uOiBmYVJvYWRDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFEdW5nZW9uOiBmYUR1bmdlb24sXG4gIGZhQWxpZ25SaWdodDogZmFBbGlnblJpZ2h0LFxuICBmYU1vbmV5QmlsbDFXYXZlOiBmYU1vbmV5QmlsbDFXYXZlLFxuICBmYU1vbmV5QmlsbFdhdmVBbHQ6IGZhTW9uZXlCaWxsV2F2ZUFsdCxcbiAgZmFMaWZlUmluZzogZmFMaWZlUmluZyxcbiAgZmFIYW5kczogZmFIYW5kcyxcbiAgZmFTaWduTGFuZ3VhZ2U6IGZhU2lnbkxhbmd1YWdlLFxuICBmYVNpZ25pbmc6IGZhU2lnbmluZyxcbiAgZmFDYWxlbmRhckRheTogZmFDYWxlbmRhckRheSxcbiAgZmFXYXRlckxhZGRlcjogZmFXYXRlckxhZGRlcixcbiAgZmFMYWRkZXJXYXRlcjogZmFMYWRkZXJXYXRlcixcbiAgZmFTd2ltbWluZ1Bvb2w6IGZhU3dpbW1pbmdQb29sLFxuICBmYUFycm93c1VwRG93bjogZmFBcnJvd3NVcERvd24sXG4gIGZhQXJyb3dzVjogZmFBcnJvd3NWLFxuICBmYUZhY2VHcmltYWNlOiBmYUZhY2VHcmltYWNlLFxuICBmYUdyaW1hY2U6IGZhR3JpbWFjZSxcbiAgZmFXaGVlbGNoYWlyTW92ZTogZmFXaGVlbGNoYWlyTW92ZSxcbiAgZmFXaGVlbGNoYWlyQWx0OiBmYVdoZWVsY2hhaXJBbHQsXG4gIGZhVHVybkRvd246IGZhVHVybkRvd24sXG4gIGZhTGV2ZWxEb3duQWx0OiBmYUxldmVsRG93bkFsdCxcbiAgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodDogZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCxcbiAgZmFTcXVhcmVFbnZlbG9wZTogZmFTcXVhcmVFbnZlbG9wZSxcbiAgZmFFbnZlbG9wZVNxdWFyZTogZmFFbnZlbG9wZVNxdWFyZSxcbiAgZmFEaWNlOiBmYURpY2UsXG4gIGZhQm93bGluZ0JhbGw6IGZhQm93bGluZ0JhbGwsXG4gIGZhQnJhaW46IGZhQnJhaW4sXG4gIGZhQmFuZGFnZTogZmFCYW5kYWdlLFxuICBmYUJhbmRBaWQ6IGZhQmFuZEFpZCxcbiAgZmFDYWxlbmRhck1pbnVzOiBmYUNhbGVuZGFyTWludXMsXG4gIGZhQ2lyY2xlWG1hcms6IGZhQ2lyY2xlWG1hcmssXG4gIGZhVGltZXNDaXJjbGU6IGZhVGltZXNDaXJjbGUsXG4gIGZhWG1hcmtDaXJjbGU6IGZhWG1hcmtDaXJjbGUsXG4gIGZhR2lmdHM6IGZhR2lmdHMsXG4gIGZhSG90ZWw6IGZhSG90ZWwsXG4gIGZhRWFydGhBc2lhOiBmYUVhcnRoQXNpYSxcbiAgZmFHbG9iZUFzaWE6IGZhR2xvYmVBc2lhLFxuICBmYUlkQ2FyZENsaXA6IGZhSWRDYXJkQ2xpcCxcbiAgZmFJZENhcmRBbHQ6IGZhSWRDYXJkQWx0LFxuICBmYU1hZ25pZnlpbmdHbGFzc1BsdXM6IGZhTWFnbmlmeWluZ0dsYXNzUGx1cyxcbiAgZmFTZWFyY2hQbHVzOiBmYVNlYXJjaFBsdXMsXG4gIGZhVGh1bWJzVXA6IGZhVGh1bWJzVXAsXG4gIGZhVXNlckNsb2NrOiBmYVVzZXJDbG9jayxcbiAgZmFIYW5kRG90czogZmFIYW5kRG90cyxcbiAgZmFBbGxlcmdpZXM6IGZhQWxsZXJnaWVzLFxuICBmYUZpbGVJbnZvaWNlOiBmYUZpbGVJbnZvaWNlLFxuICBmYVdpbmRvd01pbmltaXplOiBmYVdpbmRvd01pbmltaXplLFxuICBmYU11Z1NhdWNlcjogZmFNdWdTYXVjZXIsXG4gIGZhQ29mZmVlOiBmYUNvZmZlZSxcbiAgZmFCcnVzaDogZmFCcnVzaCxcbiAgZmFNYXNrOiBmYU1hc2ssXG4gIGZhTWFnbmlmeWluZ0dsYXNzTWludXM6IGZhTWFnbmlmeWluZ0dsYXNzTWludXMsXG4gIGZhU2VhcmNoTWludXM6IGZhU2VhcmNoTWludXMsXG4gIGZhUnVsZXJWZXJ0aWNhbDogZmFSdWxlclZlcnRpY2FsLFxuICBmYVVzZXJMYXJnZTogZmFVc2VyTGFyZ2UsXG4gIGZhVXNlckFsdDogZmFVc2VyQWx0LFxuICBmYVRyYWluVHJhbTogZmFUcmFpblRyYW0sXG4gIGZhVXNlck51cnNlOiBmYVVzZXJOdXJzZSxcbiAgZmFTeXJpbmdlOiBmYVN5cmluZ2UsXG4gIGZhQ2xvdWRTdW46IGZhQ2xvdWRTdW4sXG4gIGZhU3RvcHdhdGNoMjA6IGZhU3RvcHdhdGNoMjAsXG4gIGZhU3F1YXJlRnVsbDogZmFTcXVhcmVGdWxsLFxuICBmYU1hZ25ldDogZmFNYWduZXQsXG4gIGZhSmFyOiBmYUphcixcbiAgZmFOb3RlU3RpY2t5OiBmYU5vdGVTdGlja3ksXG4gIGZhU3RpY2t5Tm90ZTogZmFTdGlja3lOb3RlLFxuICBmYUJ1Z1NsYXNoOiBmYUJ1Z1NsYXNoLFxuICBmYUFycm93VXBGcm9tV2F0ZXJQdW1wOiBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLFxuICBmYUJvbmU6IGZhQm9uZSxcbiAgZmFVc2VySW5qdXJlZDogZmFVc2VySW5qdXJlZCxcbiAgZmFGYWNlU2FkVGVhcjogZmFGYWNlU2FkVGVhcixcbiAgZmFTYWRUZWFyOiBmYVNhZFRlYXIsXG4gIGZhUGxhbmU6IGZhUGxhbmUsXG4gIGZhVGVudEFycm93c0Rvd246IGZhVGVudEFycm93c0Rvd24sXG4gIGZhRXhjbGFtYXRpb246IGZhRXhjbGFtYXRpb24sXG4gIGZhQXJyb3dzU3BpbjogZmFBcnJvd3NTcGluLFxuICBmYVByaW50OiBmYVByaW50LFxuICBmYVR1cmtpc2hMaXJhU2lnbjogZmFUdXJraXNoTGlyYVNpZ24sXG4gIGZhVHJ5OiBmYVRyeSxcbiAgZmFUdXJraXNoTGlyYTogZmFUdXJraXNoTGlyYSxcbiAgZmFEb2xsYXJTaWduOiBmYURvbGxhclNpZ24sXG4gIGZhRG9sbGFyOiBmYURvbGxhcixcbiAgZmFVc2Q6IGZhVXNkLFxuICBmYVg6IGZhWCxcbiAgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXI6IGZhTWFnbmlmeWluZ0dsYXNzRG9sbGFyLFxuICBmYVNlYXJjaERvbGxhcjogZmFTZWFyY2hEb2xsYXIsXG4gIGZhVXNlcnNHZWFyOiBmYVVzZXJzR2VhcixcbiAgZmFVc2Vyc0NvZzogZmFVc2Vyc0NvZyxcbiAgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nOiBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsXG4gIGZhQnVpbGRpbmdDb2x1bW5zOiBmYUJ1aWxkaW5nQ29sdW1ucyxcbiAgZmFCYW5rOiBmYUJhbmssXG4gIGZhSW5zdGl0dXRpb246IGZhSW5zdGl0dXRpb24sXG4gIGZhTXVzZXVtOiBmYU11c2V1bSxcbiAgZmFVbml2ZXJzaXR5OiBmYVVuaXZlcnNpdHksXG4gIGZhVW1icmVsbGE6IGZhVW1icmVsbGEsXG4gIGZhVHJvd2VsOiBmYVRyb3dlbCxcbiAgZmFEOiBmYUQsXG4gIGZhU3RhcGxlcjogZmFTdGFwbGVyLFxuICBmYU1hc2tzVGhlYXRlcjogZmFNYXNrc1RoZWF0ZXIsXG4gIGZhVGhlYXRlck1hc2tzOiBmYVRoZWF0ZXJNYXNrcyxcbiAgZmFLaXBTaWduOiBmYUtpcFNpZ24sXG4gIGZhSGFuZFBvaW50TGVmdDogZmFIYW5kUG9pbnRMZWZ0LFxuICBmYUhhbmRzaGFrZVNpbXBsZTogZmFIYW5kc2hha2VTaW1wbGUsXG4gIGZhSGFuZHNoYWtlQWx0OiBmYUhhbmRzaGFrZUFsdCxcbiAgZmFKZXRGaWdodGVyOiBmYUpldEZpZ2h0ZXIsXG4gIGZhRmlnaHRlckpldDogZmFGaWdodGVySmV0LFxuICBmYVNxdWFyZVNoYXJlTm9kZXM6IGZhU3F1YXJlU2hhcmVOb2RlcyxcbiAgZmFTaGFyZUFsdFNxdWFyZTogZmFTaGFyZUFsdFNxdWFyZSxcbiAgZmFCYXJjb2RlOiBmYUJhcmNvZGUsXG4gIGZhUGx1c01pbnVzOiBmYVBsdXNNaW51cyxcbiAgZmFWaWRlbzogZmFWaWRlbyxcbiAgZmFWaWRlb0NhbWVyYTogZmFWaWRlb0NhbWVyYSxcbiAgZmFHcmFkdWF0aW9uQ2FwOiBmYUdyYWR1YXRpb25DYXAsXG4gIGZhTW9ydGFyQm9hcmQ6IGZhTW9ydGFyQm9hcmQsXG4gIGZhSGFuZEhvbGRpbmdNZWRpY2FsOiBmYUhhbmRIb2xkaW5nTWVkaWNhbCxcbiAgZmFQZXJzb25DaXJjbGVDaGVjazogZmFQZXJzb25DaXJjbGVDaGVjayxcbiAgZmFUdXJuVXA6IGZhVHVyblVwLFxuICBmYUxldmVsVXBBbHQ6IGZhTGV2ZWxVcEFsdFxufTtcblxuZXhwb3J0IHsgaWNvbnMgYXMgZmFzLCBwcmVmaXgsIGZhMCwgZmExLCBmYTIsIGZhMywgZmE0LCBmYTUsIGZhNiwgZmE3LCBmYTgsIGZhOSwgZmFGaWxsRHJpcCwgZmFBcnJvd3NUb0NpcmNsZSwgZmFDaXJjbGVDaGV2cm9uUmlnaHQsIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LCBmYUF0LCBmYVRyYXNoQ2FuLCBmYVRyYXNoQWx0LCBmYVRleHRIZWlnaHQsIGZhVXNlclhtYXJrLCBmYVVzZXJUaW1lcywgZmFTdGV0aG9zY29wZSwgZmFNZXNzYWdlLCBmYUNvbW1lbnRBbHQsIGZhSW5mbywgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciwgZmFDb21wcmVzc0FsdCwgZmFFeHBsb3Npb24sIGZhRmlsZUxpbmVzLCBmYUZpbGVBbHQsIGZhRmlsZVRleHQsIGZhV2F2ZVNxdWFyZSwgZmFSaW5nLCBmYUJ1aWxkaW5nVW4sIGZhRGljZVRocmVlLCBmYUNhbGVuZGFyRGF5cywgZmFDYWxlbmRhckFsdCwgZmFBbmNob3JDaXJjbGVDaGVjaywgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsIGZhVm9sbGV5YmFsbCwgZmFWb2xsZXliYWxsQmFsbCwgZmFBcnJvd3NVcFRvTGluZSwgZmFTb3J0RG93biwgZmFTb3J0RGVzYywgZmFDaXJjbGVNaW51cywgZmFNaW51c0NpcmNsZSwgZmFEb29yT3BlbiwgZmFSaWdodEZyb21CcmFja2V0LCBmYVNpZ25PdXRBbHQsIGZhQXRvbSwgZmFTb2FwLCBmYUljb25zLCBmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0LCBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLCBmYU1pY3JvcGhvbmVBbHRTbGFzaCwgZmFCcmlkZ2VDaXJjbGVDaGVjaywgZmFQdW1wTWVkaWNhbCwgZmFGaW5nZXJwcmludCwgZmFIYW5kUG9pbnRSaWdodCwgZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbiwgZmFTZWFyY2hMb2NhdGlvbiwgZmFGb3J3YXJkU3RlcCwgZmFTdGVwRm9yd2FyZCwgZmFGYWNlU21pbGVCZWFtLCBmYVNtaWxlQmVhbSwgZmFGbGFnQ2hlY2tlcmVkLCBmYUZvb3RiYWxsLCBmYUZvb3RiYWxsQmFsbCwgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiwgZmFDcm9wLCBmYUFuZ2xlc0Rvd24sIGZhQW5nbGVEb3VibGVEb3duLCBmYVVzZXJzUmVjdGFuZ2xlLCBmYVBlb3BsZVJvb2YsIGZhUGVvcGxlTGluZSwgZmFCZWVyTXVnRW1wdHksIGZhQmVlciwgZmFEaWFncmFtUHJlZGVjZXNzb3IsIGZhQXJyb3dVcExvbmcsIGZhTG9uZ0Fycm93VXAsIGZhRmlyZUZsYW1lU2ltcGxlLCBmYUJ1cm4sIGZhUGVyc29uLCBmYU1hbGUsIGZhTGFwdG9wLCBmYUZpbGVDc3YsIGZhTWVub3JhaCwgZmFUcnVja1BsYW5lLCBmYVJlY29yZFZpbnlsLCBmYUZhY2VHcmluU3RhcnMsIGZhR3JpblN0YXJzLCBmYUJvbmcsIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZywgZmFQYXN0YWZhcmlhbmlzbSwgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsIGZhU3Bvb24sIGZhVXRlbnNpbFNwb29uLCBmYUphcldoZWF0LCBmYUVudmVsb3Blc0J1bGssIGZhTWFpbEJ1bGssIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUNpcmNsZUgsIGZhSG9zcGl0YWxTeW1ib2wsIGZhUGFnZXIsIGZhQWRkcmVzc0Jvb2ssIGZhQ29udGFjdEJvb2ssIGZhU3RyaWtldGhyb3VnaCwgZmFLLCBmYUxhbmRtYXJrRmxhZywgZmFQZW5jaWwsIGZhUGVuY2lsQWx0LCBmYUJhY2t3YXJkLCBmYUNhcmV0UmlnaHQsIGZhQ29tbWVudHMsIGZhUGFzdGUsIGZhRmlsZUNsaXBib2FyZCwgZmFDb2RlUHVsbFJlcXVlc3QsIGZhQ2xpcGJvYXJkTGlzdCwgZmFUcnVja1JhbXBCb3gsIGZhVHJ1Y2tMb2FkaW5nLCBmYVVzZXJDaGVjaywgZmFWaWFsVmlydXMsIGZhU2hlZXRQbGFzdGljLCBmYUJsb2csIGZhVXNlck5pbmphLCBmYVBlcnNvbkFycm93VXBGcm9tTGluZSwgZmFTY3JvbGxUb3JhaCwgZmFUb3JhaCwgZmFCcm9vbUJhbGwsIGZhUXVpZGRpdGNoLCBmYVF1aWRkaXRjaEJyb29tQmFsbCwgZmFUb2dnbGVPZmYsIGZhQm94QXJjaGl2ZSwgZmFBcmNoaXZlLCBmYVBlcnNvbkRyb3duaW5nLCBmYUFycm93RG93bjkxLCBmYVNvcnROdW1lcmljRGVzYywgZmFTb3J0TnVtZXJpY0Rvd25BbHQsIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsIGZhR3JpblRvbmd1ZVNxdWludCwgZmFTcHJheUNhbiwgZmFUcnVja01vbnN0ZXIsIGZhVywgZmFFYXJ0aEFmcmljYSwgZmFHbG9iZUFmcmljYSwgZmFSYWluYm93LCBmYUNpcmNsZU5vdGNoLCBmYVRhYmxldFNjcmVlbkJ1dHRvbiwgZmFUYWJsZXRBbHQsIGZhUGF3LCBmYUNsb3VkLCBmYVRyb3dlbEJyaWNrcywgZmFGYWNlRmx1c2hlZCwgZmFGbHVzaGVkLCBmYUhvc3BpdGFsVXNlciwgZmFUZW50QXJyb3dMZWZ0UmlnaHQsIGZhR2F2ZWwsIGZhTGVnYWwsIGZhQmlub2N1bGFycywgZmFNaWNyb3Bob25lU2xhc2gsIGZhQm94VGlzc3VlLCBmYU1vdG9yY3ljbGUsIGZhQmVsbENvbmNpZXJnZSwgZmFDb25jaWVyZ2VCZWxsLCBmYVBlblJ1bGVyLCBmYVBlbmNpbFJ1bGVyLCBmYVBlb3BsZUFycm93cywgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsIGZhTWFyc0FuZFZlbnVzQnVyc3QsIGZhU3F1YXJlQ2FyZXRSaWdodCwgZmFDYXJldFNxdWFyZVJpZ2h0LCBmYVNjaXNzb3JzLCBmYUN1dCwgZmFTdW5QbGFudFdpbHQsIGZhVG9pbGV0c1BvcnRhYmxlLCBmYUhvY2tleVB1Y2ssIGZhVGFibGUsIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCwgZmFUYWNob2dyYXBoRGlnaXRhbCwgZmFEaWdpdGFsVGFjaG9ncmFwaCwgZmFVc2Vyc1NsYXNoLCBmYUNsb3ZlciwgZmFSZXBseSwgZmFNYWlsUmVwbHksIGZhU3RhckFuZENyZXNjZW50LCBmYUhvdXNlRmlyZSwgZmFTcXVhcmVNaW51cywgZmFNaW51c1NxdWFyZSwgZmFIZWxpY29wdGVyLCBmYUNvbXBhc3MsIGZhU3F1YXJlQ2FyZXREb3duLCBmYUNhcmV0U3F1YXJlRG93biwgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sIGZhTGFwdG9wQ29kZSwgZmFTd2F0Y2hib29rLCBmYVByZXNjcmlwdGlvbkJvdHRsZSwgZmFCYXJzLCBmYU5hdmljb24sIGZhUGVvcGxlR3JvdXAsIGZhSG91cmdsYXNzRW5kLCBmYUhvdXJnbGFzczMsIGZhSGVhcnRDcmFjaywgZmFIZWFydEJyb2tlbiwgZmFTcXVhcmVVcFJpZ2h0LCBmYUV4dGVybmFsTGlua1NxdWFyZUFsdCwgZmFGYWNlS2lzc0JlYW0sIGZhS2lzc0JlYW0sIGZhRmlsbSwgZmFSdWxlckhvcml6b250YWwsIGZhUGVvcGxlUm9iYmVyeSwgZmFMaWdodGJ1bGIsIGZhQ2FyZXRMZWZ0LCBmYUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUV4Y2xhbWF0aW9uQ2lyY2xlLCBmYVNjaG9vbENpcmNsZVhtYXJrLCBmYUFycm93UmlnaHRGcm9tQnJhY2tldCwgZmFTaWduT3V0LCBmYUNpcmNsZUNoZXZyb25Eb3duLCBmYUNoZXZyb25DaXJjbGVEb3duLCBmYVVubG9ja0tleWhvbGUsIGZhVW5sb2NrQWx0LCBmYUNsb3VkU2hvd2Vyc0hlYXZ5LCBmYUhlYWRwaG9uZXNTaW1wbGUsIGZhSGVhZHBob25lc0FsdCwgZmFTaXRlbWFwLCBmYUNpcmNsZURvbGxhclRvU2xvdCwgZmFEb25hdGUsIGZhTWVtb3J5LCBmYVJvYWRTcGlrZXMsIGZhRmlyZUJ1cm5lciwgZmFGbGFnLCBmYUhhbnVraWFoLCBmYUZlYXRoZXIsIGZhVm9sdW1lTG93LCBmYVZvbHVtZURvd24sIGZhQ29tbWVudFNsYXNoLCBmYUNsb3VkU3VuUmFpbiwgZmFDb21wcmVzcywgZmFXaGVhdEF3biwgZmFXaGVhdEFsdCwgZmFBbmtoLCBmYUhhbmRzSG9sZGluZ0NoaWxkLCBmYUFzdGVyaXNrLCBmYVNxdWFyZUNoZWNrLCBmYUNoZWNrU3F1YXJlLCBmYVBlc2V0YVNpZ24sIGZhSGVhZGluZywgZmFIZWFkZXIsIGZhR2hvc3QsIGZhTGlzdCwgZmFMaXN0U3F1YXJlcywgZmFTcXVhcmVQaG9uZUZsaXAsIGZhUGhvbmVTcXVhcmVBbHQsIGZhQ2FydFBsdXMsIGZhR2FtZXBhZCwgZmFDaXJjbGVEb3QsIGZhRG90Q2lyY2xlLCBmYUZhY2VEaXp6eSwgZmFEaXp6eSwgZmFFZ2csIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssIGZhQ2FtcGdyb3VuZCwgZmFGb2xkZXJQbHVzLCBmYUZ1dGJvbCwgZmFGdXRib2xCYWxsLCBmYVNvY2NlckJhbGwsIGZhUGFpbnRicnVzaCwgZmFQYWludEJydXNoLCBmYUxvY2ssIGZhR2FzUHVtcCwgZmFIb3RUdWJQZXJzb24sIGZhSG90VHViLCBmYU1hcExvY2F0aW9uLCBmYU1hcE1hcmtlZCwgZmFIb3VzZUZsb29kV2F0ZXIsIGZhVHJlZSwgZmFCcmlkZ2VMb2NrLCBmYVNhY2tEb2xsYXIsIGZhUGVuVG9TcXVhcmUsIGZhRWRpdCwgZmFDYXJTaWRlLCBmYVNoYXJlTm9kZXMsIGZhU2hhcmVBbHQsIGZhSGVhcnRDaXJjbGVNaW51cywgZmFIb3VyZ2xhc3NIYWxmLCBmYUhvdXJnbGFzczIsIGZhTWljcm9zY29wZSwgZmFTaW5rLCBmYUJhZ1Nob3BwaW5nLCBmYVNob3BwaW5nQmFnLCBmYUFycm93RG93blpBLCBmYVNvcnRBbHBoYURlc2MsIGZhU29ydEFscGhhRG93bkFsdCwgZmFNaXR0ZW4sIGZhUGVyc29uUmF5cywgZmFVc2VycywgZmFFeWVTbGFzaCwgZmFGbGFza1ZpYWwsIGZhSGFuZCwgZmFIYW5kUGFwZXIsIGZhT20sIGZhV29ybSwgZmFIb3VzZUNpcmNsZVhtYXJrLCBmYVBsdWcsIGZhQ2hldnJvblVwLCBmYUhhbmRTcG9jaywgZmFTdG9wd2F0Y2gsIGZhRmFjZUtpc3MsIGZhS2lzcywgZmFCcmlkZ2VDaXJjbGVYbWFyaywgZmFGYWNlR3JpblRvbmd1ZSwgZmFHcmluVG9uZ3VlLCBmYUNoZXNzQmlzaG9wLCBmYUZhY2VHcmluV2luaywgZmFHcmluV2luaywgZmFFYXJEZWFmLCBmYURlYWYsIGZhRGVhZm5lc3MsIGZhSGFyZE9mSGVhcmluZywgZmFSb2FkQ2lyY2xlQ2hlY2ssIGZhRGljZUZpdmUsIGZhU3F1YXJlUnNzLCBmYVJzc1NxdWFyZSwgZmFMYW5kTWluZU9uLCBmYUlDdXJzb3IsIGZhU3RhbXAsIGZhU3RhaXJzLCBmYUksIGZhSHJ5dm5pYVNpZ24sIGZhSHJ5dm5pYSwgZmFQaWxscywgZmFGYWNlR3JpbldpZGUsIGZhR3JpbkFsdCwgZmFUb290aCwgZmFWLCBmYUJhbmdsYWRlc2hpVGFrYVNpZ24sIGZhQmljeWNsZSwgZmFTdGFmZlNuYWtlLCBmYVJvZEFzY2xlcGl1cywgZmFSb2RTbmFrZSwgZmFTdGFmZkFlc2N1bGFwaXVzLCBmYUhlYWRTaWRlQ291Z2hTbGFzaCwgZmFUcnVja01lZGljYWwsIGZhQW1idWxhbmNlLCBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24sIGZhU25vd21hbiwgZmFNb3J0YXJQZXN0bGUsIGZhUm9hZEJhcnJpZXIsIGZhU2Nob29sLCBmYUlnbG9vLCBmYUpvaW50LCBmYUFuZ2xlUmlnaHQsIGZhSG9yc2UsIGZhUSwgZmFHLCBmYU5vdGVzTWVkaWNhbCwgZmFUZW1wZXJhdHVyZUhhbGYsIGZhVGVtcGVyYXR1cmUyLCBmYVRoZXJtb21ldGVyMiwgZmFUaGVybW9tZXRlckhhbGYsIGZhRG9uZ1NpZ24sIGZhQ2Fwc3VsZXMsIGZhUG9vU3Rvcm0sIGZhUG9vQm9sdCwgZmFGYWNlRnJvd25PcGVuLCBmYUZyb3duT3BlbiwgZmFIYW5kUG9pbnRVcCwgZmFNb25leUJpbGwsIGZhQm9va21hcmssIGZhQWxpZ25KdXN0aWZ5LCBmYVVtYnJlbGxhQmVhY2gsIGZhSGVsbWV0VW4sIGZhQnVsbHNleWUsIGZhQmFjb24sIGZhSGFuZFBvaW50RG93biwgZmFBcnJvd1VwRnJvbUJyYWNrZXQsIGZhRm9sZGVyLCBmYUZvbGRlckJsYW5rLCBmYUZpbGVXYXZlZm9ybSwgZmFGaWxlTWVkaWNhbEFsdCwgZmFSYWRpYXRpb24sIGZhQ2hhcnRTaW1wbGUsIGZhTWFyc1N0cm9rZSwgZmFWaWFsLCBmYUdhdWdlLCBmYURhc2hib2FyZCwgZmFHYXVnZU1lZCwgZmFUYWNob21ldGVyQWx0QXZlcmFnZSwgZmFXYW5kTWFnaWNTcGFya2xlcywgZmFNYWdpY1dhbmRTcGFya2xlcywgZmFFLCBmYVBlbkNsaXAsIGZhUGVuQWx0LCBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYVVzZXIsIGZhU2Nob29sQ2lyY2xlQ2hlY2ssIGZhRHVtcHN0ZXIsIGZhVmFuU2h1dHRsZSwgZmFTaHV0dGxlVmFuLCBmYUJ1aWxkaW5nVXNlciwgZmFTcXVhcmVDYXJldExlZnQsIGZhQ2FyZXRTcXVhcmVMZWZ0LCBmYUhpZ2hsaWdodGVyLCBmYUtleSwgZmFCdWxsaG9ybiwgZmFHbG9iZSwgZmFTeW5hZ29ndWUsIGZhUGVyc29uSGFsZkRyZXNzLCBmYVJvYWRCcmlkZ2UsIGZhTG9jYXRpb25BcnJvdywgZmFDLCBmYVRhYmxldEJ1dHRvbiwgZmFCdWlsZGluZ0xvY2ssIGZhUGl6emFTbGljZSwgZmFNb25leUJpbGxXYXZlLCBmYUNoYXJ0QXJlYSwgZmFBcmVhQ2hhcnQsIGZhSG91c2VGbGFnLCBmYVBlcnNvbkNpcmNsZU1pbnVzLCBmYUJhbiwgZmFDYW5jZWwsIGZhQ2FtZXJhUm90YXRlLCBmYVNwcmF5Q2FuU3BhcmtsZXMsIGZhQWlyRnJlc2hlbmVyLCBmYVN0YXIsIGZhUmVwZWF0LCBmYUNyb3NzLCBmYUJveCwgZmFWZW51c01hcnMsIGZhQXJyb3dQb2ludGVyLCBmYU1vdXNlUG9pbnRlciwgZmFNYXhpbWl6ZSwgZmFFeHBhbmRBcnJvd3NBbHQsIGZhQ2hhcmdpbmdTdGF0aW9uLCBmYVNoYXBlcywgZmFUcmlhbmdsZUNpcmNsZVNxdWFyZSwgZmFTaHVmZmxlLCBmYVJhbmRvbSwgZmFQZXJzb25SdW5uaW5nLCBmYVJ1bm5pbmcsIGZhTW9iaWxlUmV0cm8sIGZhR3JpcExpbmVzVmVydGljYWwsIGZhU3BpZGVyLCBmYUhhbmRzQm91bmQsIGZhRmlsZUludm9pY2VEb2xsYXIsIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiwgZmFYUmF5LCBmYVNwZWxsQ2hlY2ssIGZhU2xhc2gsIGZhQ29tcHV0ZXJNb3VzZSwgZmFNb3VzZSwgZmFBcnJvd1JpZ2h0VG9CcmFja2V0LCBmYVNpZ25JbiwgZmFTaG9wU2xhc2gsIGZhU3RvcmVBbHRTbGFzaCwgZmFTZXJ2ZXIsIGZhVmlydXNDb3ZpZFNsYXNoLCBmYVNob3BMb2NrLCBmYUhvdXJnbGFzc1N0YXJ0LCBmYUhvdXJnbGFzczEsIGZhQmxlbmRlclBob25lLCBmYUJ1aWxkaW5nV2hlYXQsIGZhUGVyc29uQnJlYXN0ZmVlZGluZywgZmFSaWdodFRvQnJhY2tldCwgZmFTaWduSW5BbHQsIGZhVmVudXMsIGZhUGFzc3BvcnQsIGZhSGVhcnRQdWxzZSwgZmFIZWFydGJlYXQsIGZhUGVvcGxlQ2FycnlCb3gsIGZhUGVvcGxlQ2FycnksIGZhVGVtcGVyYXR1cmVIaWdoLCBmYU1pY3JvY2hpcCwgZmFDcm93biwgZmFXZWlnaHRIYW5naW5nLCBmYVhtYXJrc0xpbmVzLCBmYUZpbGVQcmVzY3JpcHRpb24sIGZhV2VpZ2h0U2NhbGUsIGZhV2VpZ2h0LCBmYVVzZXJHcm91cCwgZmFVc2VyRnJpZW5kcywgZmFBcnJvd1VwQVosIGZhU29ydEFscGhhVXAsIGZhQ2hlc3NLbmlnaHQsIGZhRmFjZUxhdWdoU3F1aW50LCBmYUxhdWdoU3F1aW50LCBmYVdoZWVsY2hhaXIsIGZhQ2lyY2xlQXJyb3dVcCwgZmFBcnJvd0NpcmNsZVVwLCBmYVRvZ2dsZU9uLCBmYVBlcnNvbldhbGtpbmcsIGZhV2Fsa2luZywgZmFMLCBmYUZpcmUsIGZhQmVkUHVsc2UsIGZhUHJvY2VkdXJlcywgZmFTaHV0dGxlU3BhY2UsIGZhU3BhY2VTaHV0dGxlLCBmYUZhY2VMYXVnaCwgZmFMYXVnaCwgZmFGb2xkZXJPcGVuLCBmYUhlYXJ0Q2lyY2xlUGx1cywgZmFDb2RlRm9yaywgZmFDaXR5LCBmYU1pY3JvcGhvbmVMaW5lcywgZmFNaWNyb3Bob25lQWx0LCBmYVBlcHBlckhvdCwgZmFVbmxvY2ssIGZhQ29sb25TaWduLCBmYUhlYWRzZXQsIGZhU3RvcmVTbGFzaCwgZmFSb2FkQ2lyY2xlWG1hcmssIGZhVXNlck1pbnVzLCBmYU1hcnNTdHJva2VVcCwgZmFNYXJzU3Ryb2tlViwgZmFDaGFtcGFnbmVHbGFzc2VzLCBmYUdsYXNzQ2hlZXJzLCBmYUNsaXBib2FyZCwgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUZpbGVBcnJvd1VwLCBmYUZpbGVVcGxvYWQsIGZhV2lmaSwgZmFXaWZpMywgZmFXaWZpU3Ryb25nLCBmYUJhdGgsIGZhQmF0aHR1YiwgZmFVbmRlcmxpbmUsIGZhVXNlclBlbiwgZmFVc2VyRWRpdCwgZmFTaWduYXR1cmUsIGZhU3Ryb29wd2FmZWwsIGZhQm9sZCwgZmFBbmNob3JMb2NrLCBmYUJ1aWxkaW5nTmdvLCBmYU1hbmF0U2lnbiwgZmFOb3RFcXVhbCwgZmFCb3JkZXJUb3BMZWZ0LCBmYUJvcmRlclN0eWxlLCBmYU1hcExvY2F0aW9uRG90LCBmYU1hcE1hcmtlZEFsdCwgZmFKZWRpLCBmYVNxdWFyZVBvbGxWZXJ0aWNhbCwgZmFQb2xsLCBmYU11Z0hvdCwgZmFDYXJCYXR0ZXJ5LCBmYUJhdHRlcnlDYXIsIGZhR2lmdCwgZmFEaWNlVHdvLCBmYUNoZXNzUXVlZW4sIGZhR2xhc3NlcywgZmFDaGVzc0JvYXJkLCBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssIGZhUGVyc29uQ2hhbGtib2FyZCwgZmFNYXJzU3Ryb2tlUmlnaHQsIGZhTWFyc1N0cm9rZUgsIGZhSGFuZEJhY2tGaXN0LCBmYUhhbmRSb2NrLCBmYVNxdWFyZUNhcmV0VXAsIGZhQ2FyZXRTcXVhcmVVcCwgZmFDbG91ZFNob3dlcnNXYXRlciwgZmFDaGFydEJhciwgZmFCYXJDaGFydCwgZmFIYW5kc0J1YmJsZXMsIGZhSGFuZHNXYXNoLCBmYUxlc3NUaGFuRXF1YWwsIGZhVHJhaW4sIGZhRXllTG93VmlzaW9uLCBmYUxvd1Zpc2lvbiwgZmFDcm93LCBmYVNhaWxib2F0LCBmYVdpbmRvd1Jlc3RvcmUsIGZhU3F1YXJlUGx1cywgZmFQbHVzU3F1YXJlLCBmYVRvcmlpR2F0ZSwgZmFGcm9nLCBmYUJ1Y2tldCwgZmFJbWFnZSwgZmFNaWNyb3Bob25lLCBmYUNvdywgZmFDYXJldFVwLCBmYVNjcmV3ZHJpdmVyLCBmYUZvbGRlckNsb3NlZCwgZmFIb3VzZVRzdW5hbWksIGZhU3F1YXJlTmZpLCBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsIGZhTWFydGluaUdsYXNzLCBmYUdsYXNzTWFydGluaUFsdCwgZmFSb3RhdGVMZWZ0LCBmYVJvdGF0ZUJhY2ssIGZhUm90YXRlQmFja3dhcmQsIGZhVW5kb0FsdCwgZmFUYWJsZUNvbHVtbnMsIGZhQ29sdW1ucywgZmFMZW1vbiwgZmFIZWFkU2lkZU1hc2ssIGZhSGFuZHNoYWtlLCBmYUdlbSwgZmFEb2xseSwgZmFEb2xseUJveCwgZmFTbW9raW5nLCBmYU1pbmltaXplLCBmYUNvbXByZXNzQXJyb3dzQWx0LCBmYU1vbnVtZW50LCBmYVNub3dwbG93LCBmYUFuZ2xlc1JpZ2h0LCBmYUFuZ2xlRG91YmxlUmlnaHQsIGZhQ2FubmFiaXMsIGZhQ2lyY2xlUGxheSwgZmFQbGF5Q2lyY2xlLCBmYVRhYmxldHMsIGZhRXRoZXJuZXQsIGZhRXVyb1NpZ24sIGZhRXVyLCBmYUV1cm8sIGZhQ2hhaXIsIGZhQ2lyY2xlQ2hlY2ssIGZhQ2hlY2tDaXJjbGUsIGZhQ2lyY2xlU3RvcCwgZmFTdG9wQ2lyY2xlLCBmYUNvbXBhc3NEcmFmdGluZywgZmFEcmFmdGluZ0NvbXBhc3MsIGZhUGxhdGVXaGVhdCwgZmFJY2ljbGVzLCBmYVBlcnNvblNoZWx0ZXIsIGZhTmV1dGVyLCBmYUlkQmFkZ2UsIGZhTWFya2VyLCBmYUZhY2VMYXVnaEJlYW0sIGZhTGF1Z2hCZWFtLCBmYUhlbGljb3B0ZXJTeW1ib2wsIGZhVW5pdmVyc2FsQWNjZXNzLCBmYUNpcmNsZUNoZXZyb25VcCwgZmFDaGV2cm9uQ2lyY2xlVXAsIGZhTGFyaVNpZ24sIGZhVm9sY2FubywgZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQsIGZhU3RlcmxpbmdTaWduLCBmYUdicCwgZmFQb3VuZFNpZ24sIGZhVmlydXNlcywgZmFTcXVhcmVQZXJzb25Db25maW5lZCwgZmFVc2VyVGllLCBmYUFycm93RG93bkxvbmcsIGZhTG9uZ0Fycm93RG93biwgZmFUZW50QXJyb3dEb3duVG9MaW5lLCBmYUNlcnRpZmljYXRlLCBmYVJlcGx5QWxsLCBmYU1haWxSZXBseUFsbCwgZmFTdWl0Y2FzZSwgZmFQZXJzb25Ta2F0aW5nLCBmYVNrYXRpbmcsIGZhRmlsdGVyQ2lyY2xlRG9sbGFyLCBmYUZ1bm5lbERvbGxhciwgZmFDYW1lcmFSZXRybywgZmFDaXJjbGVBcnJvd0Rvd24sIGZhQXJyb3dDaXJjbGVEb3duLCBmYUZpbGVJbXBvcnQsIGZhQXJyb3dSaWdodFRvRmlsZSwgZmFTcXVhcmVBcnJvd1VwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLCBmYUJveE9wZW4sIGZhU2Nyb2xsLCBmYVNwYSwgZmFMb2NhdGlvblBpbkxvY2ssIGZhUGF1c2UsIGZhSGlsbEF2YWxhbmNoZSwgZmFUZW1wZXJhdHVyZUVtcHR5LCBmYVRlbXBlcmF0dXJlMCwgZmFUaGVybW9tZXRlcjAsIGZhVGhlcm1vbWV0ZXJFbXB0eSwgZmFCb21iLCBmYVJlZ2lzdGVyZWQsIGZhQWRkcmVzc0NhcmQsIGZhQ29udGFjdENhcmQsIGZhVmNhcmQsIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCwgZmFCYWxhbmNlU2NhbGVSaWdodCwgZmFTdWJzY3JpcHQsIGZhRGlhbW9uZFR1cm5SaWdodCwgZmFEaXJlY3Rpb25zLCBmYUJ1cnN0LCBmYUhvdXNlTGFwdG9wLCBmYUxhcHRvcEhvdXNlLCBmYUZhY2VUaXJlZCwgZmFUaXJlZCwgZmFNb25leUJpbGxzLCBmYVNtb2csIGZhQ3J1dGNoLCBmYUZvbnRBd2Vzb21lLCBmYUZvbnRBd2Vzb21lRmxhZywgZmFGb250QXdlc29tZUxvZ29GdWxsLCBmYUNsb3VkQXJyb3dVcCwgZmFDbG91ZFVwbG9hZCwgZmFDbG91ZFVwbG9hZEFsdCwgZmFQYWxldHRlLCBmYUFycm93c1R1cm5SaWdodCwgZmFWZXN0LCBmYUZlcnJ5LCBmYUFycm93c0Rvd25Ub1Blb3BsZSwgZmFTZWVkbGluZywgZmFTcHJvdXQsIGZhTGVmdFJpZ2h0LCBmYUFycm93c0FsdEgsIGZhQm94ZXNQYWNraW5nLCBmYUNpcmNsZUFycm93TGVmdCwgZmFBcnJvd0NpcmNsZUxlZnQsIGZhR3JvdXBBcnJvd3NSb3RhdGUsIGZhQm93bEZvb2QsIGZhQ2FuZHlDYW5lLCBmYUFycm93RG93bldpZGVTaG9ydCwgZmFTb3J0QW1vdW50QXNjLCBmYVNvcnRBbW91bnREb3duLCBmYUNsb3VkQm9sdCwgZmFUaHVuZGVyc3Rvcm0sIGZhVGV4dFNsYXNoLCBmYVJlbW92ZUZvcm1hdCwgZmFGYWNlU21pbGVXaW5rLCBmYVNtaWxlV2luaywgZmFGaWxlV29yZCwgZmFGaWxlUG93ZXJwb2ludCwgZmFBcnJvd3NMZWZ0UmlnaHQsIGZhQXJyb3dzSCwgZmFIb3VzZUxvY2ssIGZhQ2xvdWRBcnJvd0Rvd24sIGZhQ2xvdWREb3dubG9hZCwgZmFDbG91ZERvd25sb2FkQWx0LCBmYUNoaWxkcmVuLCBmYUNoYWxrYm9hcmQsIGZhQmxhY2tib2FyZCwgZmFVc2VyTGFyZ2VTbGFzaCwgZmFVc2VyQWx0U2xhc2gsIGZhRW52ZWxvcGVPcGVuLCBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLCBmYUhhbmRzaGFrZUFsdFNsYXNoLCBmYU1hdHRyZXNzUGlsbG93LCBmYUd1YXJhbmlTaWduLCBmYUFycm93c1JvdGF0ZSwgZmFSZWZyZXNoLCBmYVN5bmMsIGZhRmlyZUV4dGluZ3Vpc2hlciwgZmFDcnV6ZWlyb1NpZ24sIGZhR3JlYXRlclRoYW5FcXVhbCwgZmFTaGllbGRIYWx2ZWQsIGZhU2hpZWxkQWx0LCBmYUJvb2tBdGxhcywgZmFBdGxhcywgZmFWaXJ1cywgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLCBmYUxheWVyR3JvdXAsIGZhQXJyb3dzVG9Eb3QsIGZhQXJjaHdheSwgZmFIZWFydENpcmNsZUNoZWNrLCBmYUhvdXNlQ2hpbW5leUNyYWNrLCBmYUhvdXNlRGFtYWdlLCBmYUZpbGVaaXBwZXIsIGZhRmlsZUFyY2hpdmUsIGZhU3F1YXJlLCBmYU1hcnRpbmlHbGFzc0VtcHR5LCBmYUdsYXNzTWFydGluaSwgZmFDb3VjaCwgZmFDZWRpU2lnbiwgZmFJdGFsaWMsIGZhVGFibGVDZWxsc0NvbHVtbkxvY2ssIGZhQ2h1cmNoLCBmYUNvbW1lbnRzRG9sbGFyLCBmYURlbW9jcmF0LCBmYVosIGZhUGVyc29uU2tpaW5nLCBmYVNraWluZywgZmFSb2FkTG9jaywgZmFBLCBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLCBmYVRlbXBlcmF0dXJlRG93biwgZmFGZWF0aGVyUG9pbnRlZCwgZmFGZWF0aGVyQWx0LCBmYVAsIGZhU25vd2ZsYWtlLCBmYU5ld3NwYXBlciwgZmFSZWN0YW5nbGVBZCwgZmFBZCwgZmFDaXJjbGVBcnJvd1JpZ2h0LCBmYUFycm93Q2lyY2xlUmlnaHQsIGZhRmlsdGVyQ2lyY2xlWG1hcmssIGZhTG9jdXN0LCBmYVNvcnQsIGZhVW5zb3J0ZWQsIGZhTGlzdE9sLCBmYUxpc3QxMiwgZmFMaXN0TnVtZXJpYywgZmFQZXJzb25EcmVzc0J1cnN0LCBmYU1vbmV5Q2hlY2tEb2xsYXIsIGZhTW9uZXlDaGVja0FsdCwgZmFWZWN0b3JTcXVhcmUsIGZhQnJlYWRTbGljZSwgZmFMYW5ndWFnZSwgZmFGYWNlS2lzc1dpbmtIZWFydCwgZmFLaXNzV2lua0hlYXJ0LCBmYUZpbHRlciwgZmFRdWVzdGlvbiwgZmFGaWxlU2lnbmF0dXJlLCBmYVVwRG93bkxlZnRSaWdodCwgZmFBcnJvd3NBbHQsIGZhSG91c2VDaGltbmV5VXNlciwgZmFIYW5kSG9sZGluZ0hlYXJ0LCBmYVB1enpsZVBpZWNlLCBmYU1vbmV5Q2hlY2ssIGZhU3RhckhhbGZTdHJva2UsIGZhU3RhckhhbGZBbHQsIGZhQ29kZSwgZmFXaGlza2V5R2xhc3MsIGZhR2xhc3NXaGlza2V5LCBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24sIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQsIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSwgZmFFeHRlcm5hbExpbmssIGZhQ3ViZXNTdGFja2VkLCBmYVdvblNpZ24sIGZhS3J3LCBmYVdvbiwgZmFWaXJ1c0NvdmlkLCBmYUF1c3RyYWxTaWduLCBmYUYsIGZhTGVhZiwgZmFSb2FkLCBmYVRheGksIGZhQ2FiLCBmYVBlcnNvbkNpcmNsZVBsdXMsIGZhQ2hhcnRQaWUsIGZhUGllQ2hhcnQsIGZhQm9sdExpZ2h0bmluZywgZmFTYWNrWG1hcmssIGZhRmlsZUV4Y2VsLCBmYUZpbGVDb250cmFjdCwgZmFGaXNoRmlucywgZmFCdWlsZGluZ0ZsYWcsIGZhRmFjZUdyaW5CZWFtLCBmYUdyaW5CZWFtLCBmYU9iamVjdFVuZ3JvdXAsIGZhUG9vcCwgZmFMb2NhdGlvblBpbiwgZmFNYXBNYXJrZXIsIGZhS2FhYmEsIGZhVG9pbGV0UGFwZXIsIGZhSGVsbWV0U2FmZXR5LCBmYUhhcmRIYXQsIGZhSGF0SGFyZCwgZmFFamVjdCwgZmFDaXJjbGVSaWdodCwgZmFBcnJvd0FsdENpcmNsZVJpZ2h0LCBmYVBsYW5lQ2lyY2xlQ2hlY2ssIGZhRmFjZVJvbGxpbmdFeWVzLCBmYU1laFJvbGxpbmdFeWVzLCBmYU9iamVjdEdyb3VwLCBmYUNoYXJ0TGluZSwgZmFMaW5lQ2hhcnQsIGZhTWFza1ZlbnRpbGF0b3IsIGZhQXJyb3dSaWdodCwgZmFTaWduc1Bvc3QsIGZhTWFwU2lnbnMsIGZhQ2FzaFJlZ2lzdGVyLCBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLCBmYUgsIGZhVGFycCwgZmFTY3Jld2RyaXZlcldyZW5jaCwgZmFUb29scywgZmFBcnJvd3NUb0V5ZSwgZmFQbHVnQ2lyY2xlQm9sdCwgZmFIZWFydCwgZmFNYXJzQW5kVmVudXMsIGZhSG91c2VVc2VyLCBmYUhvbWVVc2VyLCBmYUR1bXBzdGVyRmlyZSwgZmFIb3VzZUNyYWNrLCBmYU1hcnRpbmlHbGFzc0NpdHJ1cywgZmFDb2NrdGFpbCwgZmFGYWNlU3VycHJpc2UsIGZhU3VycHJpc2UsIGZhQm90dGxlV2F0ZXIsIGZhQ2lyY2xlUGF1c2UsIGZhUGF1c2VDaXJjbGUsIGZhVG9pbGV0UGFwZXJTbGFzaCwgZmFBcHBsZVdob2xlLCBmYUFwcGxlQWx0LCBmYUtpdGNoZW5TZXQsIGZhUiwgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsIGZhVGVtcGVyYXR1cmUxLCBmYVRoZXJtb21ldGVyMSwgZmFUaGVybW9tZXRlclF1YXJ0ZXIsIGZhQ3ViZSwgZmFCaXRjb2luU2lnbiwgZmFTaGllbGREb2csIGZhU29sYXJQYW5lbCwgZmFMb2NrT3BlbiwgZmFFbGV2YXRvciwgZmFNb25leUJpbGxUcmFuc2ZlciwgZmFNb25leUJpbGxUcmVuZFVwLCBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQsIGZhU3F1YXJlUG9sbEhvcml6b250YWwsIGZhUG9sbEgsIGZhQ2lyY2xlLCBmYUJhY2t3YXJkRmFzdCwgZmFGYXN0QmFja3dhcmQsIGZhUmVjeWNsZSwgZmFVc2VyQXN0cm9uYXV0LCBmYVBsYW5lU2xhc2gsIGZhVHJhZGVtYXJrLCBmYUJhc2tldGJhbGwsIGZhQmFza2V0YmFsbEJhbGwsIGZhU2F0ZWxsaXRlRGlzaCwgZmFDaXJjbGVVcCwgZmFBcnJvd0FsdENpcmNsZVVwLCBmYU1vYmlsZVNjcmVlbkJ1dHRvbiwgZmFNb2JpbGVBbHQsIGZhVm9sdW1lSGlnaCwgZmFWb2x1bWVVcCwgZmFVc2Vyc1JheXMsIGZhV2FsbGV0LCBmYUNsaXBib2FyZENoZWNrLCBmYUZpbGVBdWRpbywgZmFCdXJnZXIsIGZhSGFtYnVyZ2VyLCBmYVdyZW5jaCwgZmFCdWdzLCBmYVJ1cGVlU2lnbiwgZmFSdXBlZSwgZmFGaWxlSW1hZ2UsIGZhQ2lyY2xlUXVlc3Rpb24sIGZhUXVlc3Rpb25DaXJjbGUsIGZhUGxhbmVEZXBhcnR1cmUsIGZhSGFuZHNoYWtlU2xhc2gsIGZhQm9va0Jvb2ttYXJrLCBmYUNvZGVCcmFuY2gsIGZhSGF0Q293Ym95LCBmYUJyaWRnZSwgZmFQaG9uZUZsaXAsIGZhUGhvbmVBbHQsIGZhVHJ1Y2tGcm9udCwgZmFDYXQsIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sIGZhVHJ1Y2tGaWVsZCwgZmFSb3V0ZSwgZmFDbGlwYm9hcmRRdWVzdGlvbiwgZmFQYW5vcmFtYSwgZmFDb21tZW50TWVkaWNhbCwgZmFUZWV0aE9wZW4sIGZhRmlsZUNpcmNsZU1pbnVzLCBmYVRhZ3MsIGZhV2luZUdsYXNzLCBmYUZvcndhcmRGYXN0LCBmYUZhc3RGb3J3YXJkLCBmYUZhY2VNZWhCbGFuaywgZmFNZWhCbGFuaywgZmFTcXVhcmVQYXJraW5nLCBmYVBhcmtpbmcsIGZhSG91c2VTaWduYWwsIGZhQmFyc1Byb2dyZXNzLCBmYVRhc2tzQWx0LCBmYUZhdWNldERyaXAsIGZhQ2FydEZsYXRiZWQsIGZhRG9sbHlGbGF0YmVkLCBmYUJhblNtb2tpbmcsIGZhU21va2luZ0JhbiwgZmFUZXJtaW5hbCwgZmFNb2JpbGVCdXR0b24sIGZhSG91c2VNZWRpY2FsRmxhZywgZmFCYXNrZXRTaG9wcGluZywgZmFTaG9wcGluZ0Jhc2tldCwgZmFUYXBlLCBmYUJ1c1NpbXBsZSwgZmFCdXNBbHQsIGZhRXllLCBmYUZhY2VTYWRDcnksIGZhU2FkQ3J5LCBmYUF1ZGlvRGVzY3JpcHRpb24sIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiwgZmFGaWxlU2hpZWxkLCBmYVVzZXJTbGFzaCwgZmFQZW4sIGZhVG93ZXJPYnNlcnZhdGlvbiwgZmFGaWxlQ29kZSwgZmFTaWduYWwsIGZhU2lnbmFsNSwgZmFTaWduYWxQZXJmZWN0LCBmYUJ1cywgZmFIZWFydENpcmNsZVhtYXJrLCBmYUhvdXNlQ2hpbW5leSwgZmFIb21lTGcsIGZhV2luZG93TWF4aW1pemUsIGZhRmFjZUZyb3duLCBmYUZyb3duLCBmYVByZXNjcmlwdGlvbiwgZmFTaG9wLCBmYVN0b3JlQWx0LCBmYUZsb3BweURpc2ssIGZhU2F2ZSwgZmFWaWhhcmEsIGZhU2NhbGVVbmJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZUxlZnQsIGZhU29ydFVwLCBmYVNvcnRBc2MsIGZhQ29tbWVudERvdHMsIGZhQ29tbWVudGluZywgZmFQbGFudFdpbHQsIGZhRGlhbW9uZCwgZmFGYWNlR3JpblNxdWludCwgZmFHcmluU3F1aW50LCBmYUhhbmRIb2xkaW5nRG9sbGFyLCBmYUhhbmRIb2xkaW5nVXNkLCBmYUJhY3Rlcml1bSwgZmFIYW5kUG9pbnRlciwgZmFEcnVtU3RlZWxwYW4sIGZhSGFuZFNjaXNzb3JzLCBmYUhhbmRzUHJheWluZywgZmFQcmF5aW5nSGFuZHMsIGZhQXJyb3dSb3RhdGVSaWdodCwgZmFBcnJvd1JpZ2h0Um90YXRlLCBmYUFycm93Um90YXRlRm9yd2FyZCwgZmFSZWRvLCBmYUJpb2hhemFyZCwgZmFMb2NhdGlvbkNyb3NzaGFpcnMsIGZhTG9jYXRpb24sIGZhTWFyc0RvdWJsZSwgZmFDaGlsZERyZXNzLCBmYVVzZXJzQmV0d2VlbkxpbmVzLCBmYUx1bmdzVmlydXMsIGZhRmFjZUdyaW5UZWFycywgZmFHcmluVGVhcnMsIGZhUGhvbmUsIGZhQ2FsZW5kYXJYbWFyaywgZmFDYWxlbmRhclRpbWVzLCBmYUNoaWxkUmVhY2hpbmcsIGZhSGVhZFNpZGVWaXJ1cywgZmFVc2VyR2VhciwgZmFVc2VyQ29nLCBmYUFycm93VXAxOSwgZmFTb3J0TnVtZXJpY1VwLCBmYURvb3JDbG9zZWQsIGZhU2hpZWxkVmlydXMsIGZhRGljZVNpeCwgZmFNb3NxdWl0b05ldCwgZmFCcmlkZ2VXYXRlciwgZmFQZXJzb25Cb290aCwgZmFUZXh0V2lkdGgsIGZhSGF0V2l6YXJkLCBmYVBlbkZhbmN5LCBmYVBlcnNvbkRpZ2dpbmcsIGZhRGlnZ2luZywgZmFUcmFzaCwgZmFHYXVnZVNpbXBsZSwgZmFHYXVnZVNpbXBsZU1lZCwgZmFUYWNob21ldGVyQXZlcmFnZSwgZmFCb29rTWVkaWNhbCwgZmFQb28sIGZhUXVvdGVSaWdodCwgZmFRdW90ZVJpZ2h0QWx0LCBmYVNoaXJ0LCBmYVRTaGlydCwgZmFUc2hpcnQsIGZhQ3ViZXMsIGZhRGl2aWRlLCBmYVRlbmdlU2lnbiwgZmFUZW5nZSwgZmFIZWFkcGhvbmVzLCBmYUhhbmRzSG9sZGluZywgZmFIYW5kc0NsYXBwaW5nLCBmYVJlcHVibGljYW4sIGZhQXJyb3dMZWZ0LCBmYVBlcnNvbkNpcmNsZVhtYXJrLCBmYVJ1bGVyLCBmYUFsaWduTGVmdCwgZmFEaWNlRDYsIGZhUmVzdHJvb20sIGZhSiwgZmFVc2Vyc1ZpZXdmaW5kZXIsIGZhRmlsZVZpZGVvLCBmYVVwUmlnaHRGcm9tU3F1YXJlLCBmYUV4dGVybmFsTGlua0FsdCwgZmFUYWJsZUNlbGxzLCBmYVRoLCBmYUZpbGVQZGYsIGZhQm9va0JpYmxlLCBmYUJpYmxlLCBmYU8sIGZhU3VpdGNhc2VNZWRpY2FsLCBmYU1lZGtpdCwgZmFVc2VyU2VjcmV0LCBmYU90dGVyLCBmYVBlcnNvbkRyZXNzLCBmYUZlbWFsZSwgZmFDb21tZW50RG9sbGFyLCBmYUJ1c2luZXNzVGltZSwgZmFCcmllZmNhc2VDbG9jaywgZmFUYWJsZUNlbGxzTGFyZ2UsIGZhVGhMYXJnZSwgZmFCb29rVGFuYWtoLCBmYVRhbmFraCwgZmFQaG9uZVZvbHVtZSwgZmFWb2x1bWVDb250cm9sUGhvbmUsIGZhSGF0Q293Ym95U2lkZSwgZmFDbGlwYm9hcmRVc2VyLCBmYUNoaWxkLCBmYUxpcmFTaWduLCBmYVNhdGVsbGl0ZSwgZmFQbGFuZUxvY2ssIGZhVGFnLCBmYUNvbW1lbnQsIGZhQ2FrZUNhbmRsZXMsIGZhQmlydGhkYXlDYWtlLCBmYUNha2UsIGZhRW52ZWxvcGUsIGZhQW5nbGVzVXAsIGZhQW5nbGVEb3VibGVVcCwgZmFQYXBlcmNsaXAsIGZhQXJyb3dSaWdodFRvQ2l0eSwgZmFSaWJib24sIGZhTHVuZ3MsIGZhQXJyb3dVcDkxLCBmYVNvcnROdW1lcmljVXBBbHQsIGZhTGl0ZWNvaW5TaWduLCBmYUJvcmRlck5vbmUsIGZhQ2lyY2xlTm9kZXMsIGZhUGFyYWNodXRlQm94LCBmYUluZGVudCwgZmFUcnVja0ZpZWxkVW4sIGZhSG91cmdsYXNzLCBmYUhvdXJnbGFzc0VtcHR5LCBmYU1vdW50YWluLCBmYVVzZXJEb2N0b3IsIGZhVXNlck1kLCBmYUNpcmNsZUluZm8sIGZhSW5mb0NpcmNsZSwgZmFDbG91ZE1lYXRiYWxsLCBmYUNhbWVyYSwgZmFDYW1lcmFBbHQsIGZhU3F1YXJlVmlydXMsIGZhTWV0ZW9yLCBmYUNhck9uLCBmYVNsZWlnaCwgZmFBcnJvd0Rvd24xOSwgZmFTb3J0TnVtZXJpY0FzYywgZmFTb3J0TnVtZXJpY0Rvd24sIGZhSGFuZEhvbGRpbmdEcm9wbGV0LCBmYUhhbmRIb2xkaW5nV2F0ZXIsIGZhV2F0ZXIsIGZhQ2FsZW5kYXJDaGVjaywgZmFCcmFpbGxlLCBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwsIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0LCBmYUxhbmRtYXJrLCBmYVRydWNrLCBmYUNyb3NzaGFpcnMsIGZhUGVyc29uQ2FuZSwgZmFUZW50LCBmYVZlc3RQYXRjaGVzLCBmYUNoZWNrRG91YmxlLCBmYUFycm93RG93bkFaLCBmYVNvcnRBbHBoYUFzYywgZmFTb3J0QWxwaGFEb3duLCBmYU1vbmV5QmlsbFdoZWF0LCBmYUNvb2tpZSwgZmFBcnJvd1JvdGF0ZUxlZnQsIGZhQXJyb3dMZWZ0Um90YXRlLCBmYUFycm93Um90YXRlQmFjaywgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkLCBmYVVuZG8sIGZhSGFyZERyaXZlLCBmYUhkZCwgZmFGYWNlR3JpblNxdWludFRlYXJzLCBmYUdyaW5TcXVpbnRUZWFycywgZmFEdW1iYmVsbCwgZmFSZWN0YW5nbGVMaXN0LCBmYUxpc3RBbHQsIGZhVGFycERyb3BsZXQsIGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2ssIGZhUGVyc29uU2tpaW5nTm9yZGljLCBmYVNraWluZ05vcmRpYywgZmFDYWxlbmRhclBsdXMsIGZhUGxhbmVBcnJpdmFsLCBmYUNpcmNsZUxlZnQsIGZhQXJyb3dBbHRDaXJjbGVMZWZ0LCBmYVRyYWluU3Vid2F5LCBmYVN1YndheSwgZmFDaGFydEdhbnR0LCBmYUluZGlhblJ1cGVlU2lnbiwgZmFJbmRpYW5SdXBlZSwgZmFJbnIsIGZhQ3JvcFNpbXBsZSwgZmFDcm9wQWx0LCBmYU1vbmV5QmlsbDEsIGZhTW9uZXlCaWxsQWx0LCBmYUxlZnRMb25nLCBmYUxvbmdBcnJvd0FsdExlZnQsIGZhRG5hLCBmYVZpcnVzU2xhc2gsIGZhTWludXMsIGZhU3VidHJhY3QsIGZhQ2hlc3MsIGZhQXJyb3dMZWZ0TG9uZywgZmFMb25nQXJyb3dMZWZ0LCBmYVBsdWdDaXJjbGVDaGVjaywgZmFTdHJlZXRWaWV3LCBmYUZyYW5jU2lnbiwgZmFWb2x1bWVPZmYsIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsIGZhQXNsSW50ZXJwcmV0aW5nLCBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsIGZhR2VhciwgZmFDb2csIGZhRHJvcGxldFNsYXNoLCBmYVRpbnRTbGFzaCwgZmFNb3NxdWUsIGZhTW9zcXVpdG8sIGZhU3Rhck9mRGF2aWQsIGZhUGVyc29uTWlsaXRhcnlSaWZsZSwgZmFDYXJ0U2hvcHBpbmcsIGZhU2hvcHBpbmdDYXJ0LCBmYVZpYWxzLCBmYVBsdWdDaXJjbGVQbHVzLCBmYVBsYWNlT2ZXb3JzaGlwLCBmYUdyaXBWZXJ0aWNhbCwgZmFBcnJvd1R1cm5VcCwgZmFMZXZlbFVwLCBmYVUsIGZhU3F1YXJlUm9vdFZhcmlhYmxlLCBmYVNxdWFyZVJvb3RBbHQsIGZhQ2xvY2ssIGZhQ2xvY2tGb3VyLCBmYUJhY2t3YXJkU3RlcCwgZmFTdGVwQmFja3dhcmQsIGZhUGFsbGV0LCBmYUZhdWNldCwgZmFCYXNlYmFsbEJhdEJhbGwsIGZhUywgZmFUaW1lbGluZSwgZmFLZXlib2FyZCwgZmFDYXJldERvd24sIGZhSG91c2VDaGltbmV5TWVkaWNhbCwgZmFDbGluaWNNZWRpY2FsLCBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycywgZmFUZW1wZXJhdHVyZTMsIGZhVGhlcm1vbWV0ZXIzLCBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycywgZmFNb2JpbGVTY3JlZW4sIGZhTW9iaWxlQW5kcm9pZEFsdCwgZmFQbGFuZVVwLCBmYVBpZ2d5QmFuaywgZmFCYXR0ZXJ5SGFsZiwgZmFCYXR0ZXJ5MywgZmFNb3VudGFpbkNpdHksIGZhQ29pbnMsIGZhS2hhbmRhLCBmYVNsaWRlcnMsIGZhU2xpZGVyc0gsIGZhRm9sZGVyVHJlZSwgZmFOZXR3b3JrV2lyZWQsIGZhTWFwUGluLCBmYUhhbXNhLCBmYUNlbnRTaWduLCBmYUZsYXNrLCBmYVBlcnNvblByZWduYW50LCBmYVdhbmRTcGFya2xlcywgZmFFbGxpcHNpc1ZlcnRpY2FsLCBmYUVsbGlwc2lzViwgZmFUaWNrZXQsIGZhUG93ZXJPZmYsIGZhUmlnaHRMb25nLCBmYUxvbmdBcnJvd0FsdFJpZ2h0LCBmYUZsYWdVc2EsIGZhTGFwdG9wRmlsZSwgZmFUdHksIGZhVGVsZXR5cGUsIGZhRGlhZ3JhbU5leHQsIGZhUGVyc29uUmlmbGUsIGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb24sIGZhQ2xvc2VkQ2FwdGlvbmluZywgZmFQZXJzb25IaWtpbmcsIGZhSGlraW5nLCBmYVZlbnVzRG91YmxlLCBmYUltYWdlcywgZmFDYWxjdWxhdG9yLCBmYVBlb3BsZVB1bGxpbmcsIGZhTiwgZmFDYWJsZUNhciwgZmFUcmFtLCBmYUNsb3VkUmFpbiwgZmFCdWlsZGluZ0NpcmNsZVhtYXJrLCBmYVNoaXAsIGZhQXJyb3dzRG93blRvTGluZSwgZmFEb3dubG9hZCwgZmFGYWNlR3JpbiwgZmFHcmluLCBmYURlbGV0ZUxlZnQsIGZhQmFja3NwYWNlLCBmYUV5ZURyb3BwZXIsIGZhRXllRHJvcHBlckVtcHR5LCBmYUV5ZWRyb3BwZXIsIGZhRmlsZUNpcmNsZUNoZWNrLCBmYUZvcndhcmQsIGZhTW9iaWxlLCBmYU1vYmlsZUFuZHJvaWQsIGZhTW9iaWxlUGhvbmUsIGZhRmFjZU1laCwgZmFNZWgsIGZhQWxpZ25DZW50ZXIsIGZhQm9va1NrdWxsLCBmYUJvb2tEZWFkLCBmYUlkQ2FyZCwgZmFEcml2ZXJzTGljZW5zZSwgZmFPdXRkZW50LCBmYURlZGVudCwgZmFIZWFydENpcmNsZUV4Y2xhbWF0aW9uLCBmYUhvdXNlLCBmYUhvbWUsIGZhSG9tZUFsdCwgZmFIb21lTGdBbHQsIGZhQ2FsZW5kYXJXZWVrLCBmYUxhcHRvcE1lZGljYWwsIGZhQiwgZmFGaWxlTWVkaWNhbCwgZmFEaWNlT25lLCBmYUtpd2lCaXJkLCBmYUFycm93UmlnaHRBcnJvd0xlZnQsIGZhRXhjaGFuZ2UsIGZhUm90YXRlUmlnaHQsIGZhUmVkb0FsdCwgZmFSb3RhdGVGb3J3YXJkLCBmYVV0ZW5zaWxzLCBmYUN1dGxlcnksIGZhQXJyb3dVcFdpZGVTaG9ydCwgZmFTb3J0QW1vdW50VXAsIGZhTWlsbFNpZ24sIGZhQm93bFJpY2UsIGZhU2t1bGwsIGZhVG93ZXJCcm9hZGNhc3QsIGZhQnJvYWRjYXN0VG93ZXIsIGZhVHJ1Y2tQaWNrdXAsIGZhVXBMb25nLCBmYUxvbmdBcnJvd0FsdFVwLCBmYVN0b3AsIGZhQ29kZU1lcmdlLCBmYVVwbG9hZCwgZmFIdXJyaWNhbmUsIGZhTW91bmQsIGZhVG9pbGV0UG9ydGFibGUsIGZhQ29tcGFjdERpc2MsIGZhRmlsZUFycm93RG93biwgZmFGaWxlRG93bmxvYWQsIGZhQ2FyYXZhbiwgZmFTaGllbGRDYXQsIGZhQm9sdCwgZmFaYXAsIGZhR2xhc3NXYXRlciwgZmFPaWxXZWxsLCBmYVZhdWx0LCBmYU1hcnMsIGZhVG9pbGV0LCBmYVBsYW5lQ2lyY2xlWG1hcmssIGZhWWVuU2lnbiwgZmFDbnksIGZhSnB5LCBmYVJtYiwgZmFZZW4sIGZhUnVibGVTaWduLCBmYVJvdWJsZSwgZmFSdWIsIGZhUnVibGUsIGZhU3VuLCBmYUd1aXRhciwgZmFGYWNlTGF1Z2hXaW5rLCBmYUxhdWdoV2luaywgZmFIb3JzZUhlYWQsIGZhQm9yZUhvbGUsIGZhSW5kdXN0cnksIGZhQ2lyY2xlRG93biwgZmFBcnJvd0FsdENpcmNsZURvd24sIGZhQXJyb3dzVHVyblRvRG90cywgZmFGbG9yaW5TaWduLCBmYUFycm93RG93blNob3J0V2lkZSwgZmFTb3J0QW1vdW50RGVzYywgZmFTb3J0QW1vdW50RG93bkFsdCwgZmFMZXNzVGhhbiwgZmFBbmdsZURvd24sIGZhQ2FyVHVubmVsLCBmYUhlYWRTaWRlQ291Z2gsIGZhR3JpcExpbmVzLCBmYVRodW1ic0Rvd24sIGZhVXNlckxvY2ssIGZhQXJyb3dSaWdodExvbmcsIGZhTG9uZ0Fycm93UmlnaHQsIGZhQW5jaG9yQ2lyY2xlWG1hcmssIGZhRWxsaXBzaXMsIGZhRWxsaXBzaXNILCBmYUNoZXNzUGF3biwgZmFLaXRNZWRpY2FsLCBmYUZpcnN0QWlkLCBmYVBlcnNvblRocm91Z2hXaW5kb3csIGZhVG9vbGJveCwgZmFIYW5kc0hvbGRpbmdDaXJjbGUsIGZhQnVnLCBmYUNyZWRpdENhcmQsIGZhQ3JlZGl0Q2FyZEFsdCwgZmFDYXIsIGZhQXV0b21vYmlsZSwgZmFIYW5kSG9sZGluZ0hhbmQsIGZhQm9va09wZW5SZWFkZXIsIGZhQm9va1JlYWRlciwgZmFNb3VudGFpblN1biwgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUsIGZhRGljZUQyMCwgZmFUcnVja0Ryb3BsZXQsIGZhRmlsZUNpcmNsZVhtYXJrLCBmYVRlbXBlcmF0dXJlQXJyb3dVcCwgZmFUZW1wZXJhdHVyZVVwLCBmYU1lZGFsLCBmYUJlZCwgZmFTcXVhcmVILCBmYUhTcXVhcmUsIGZhUG9kY2FzdCwgZmFUZW1wZXJhdHVyZUZ1bGwsIGZhVGVtcGVyYXR1cmU0LCBmYVRoZXJtb21ldGVyNCwgZmFUaGVybW9tZXRlckZ1bGwsIGZhQmVsbCwgZmFTdXBlcnNjcmlwdCwgZmFQbHVnQ2lyY2xlWG1hcmssIGZhU3Rhck9mTGlmZSwgZmFQaG9uZVNsYXNoLCBmYVBhaW50Um9sbGVyLCBmYUhhbmRzaGFrZUFuZ2xlLCBmYUhhbmRzSGVscGluZywgZmFMb2NhdGlvbkRvdCwgZmFNYXBNYXJrZXJBbHQsIGZhRmlsZSwgZmFHcmVhdGVyVGhhbiwgZmFQZXJzb25Td2ltbWluZywgZmFTd2ltbWVyLCBmYUFycm93RG93biwgZmFEcm9wbGV0LCBmYVRpbnQsIGZhRXJhc2VyLCBmYUVhcnRoQW1lcmljYXMsIGZhRWFydGgsIGZhRWFydGhBbWVyaWNhLCBmYUdsb2JlQW1lcmljYXMsIGZhUGVyc29uQnVyc3QsIGZhRG92ZSwgZmFCYXR0ZXJ5RW1wdHksIGZhQmF0dGVyeTAsIGZhU29ja3MsIGZhSW5ib3gsIGZhU2VjdGlvbiwgZmFHYXVnZUhpZ2gsIGZhVGFjaG9tZXRlckFsdCwgZmFUYWNob21ldGVyQWx0RmFzdCwgZmFFbnZlbG9wZU9wZW5UZXh0LCBmYUhvc3BpdGFsLCBmYUhvc3BpdGFsQWx0LCBmYUhvc3BpdGFsV2lkZSwgZmFXaW5lQm90dGxlLCBmYUNoZXNzUm9vaywgZmFCYXJzU3RhZ2dlcmVkLCBmYVJlb3JkZXIsIGZhU3RyZWFtLCBmYURoYXJtYWNoYWtyYSwgZmFIb3Rkb2csIGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lLCBmYUJsaW5kLCBmYURydW0sIGZhSWNlQ3JlYW0sIGZhSGVhcnRDaXJjbGVCb2x0LCBmYUZheCwgZmFQYXJhZ3JhcGgsIGZhQ2hlY2tUb1Nsb3QsIGZhVm90ZVllYSwgZmFTdGFySGFsZiwgZmFCb3hlc1N0YWNrZWQsIGZhQm94ZXMsIGZhQm94ZXNBbHQsIGZhTGluaywgZmFDaGFpbiwgZmFFYXJMaXN0ZW4sIGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtcywgZmFUcmVlQ2l0eSwgZmFQbGF5LCBmYUZvbnQsIGZhVGFibGVDZWxsc1Jvd0xvY2ssIGZhUnVwaWFoU2lnbiwgZmFNYWduaWZ5aW5nR2xhc3MsIGZhU2VhcmNoLCBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbCwgZmFQaW5nUG9uZ1BhZGRsZUJhbGwsIGZhVGFibGVUZW5uaXMsIGZhUGVyc29uRG90c0Zyb21MaW5lLCBmYURpYWdub3NlcywgZmFUcmFzaENhbkFycm93VXAsIGZhVHJhc2hSZXN0b3JlQWx0LCBmYU5haXJhU2lnbiwgZmFDYXJ0QXJyb3dEb3duLCBmYVdhbGtpZVRhbGtpZSwgZmFGaWxlUGVuLCBmYUZpbGVFZGl0LCBmYVJlY2VpcHQsIGZhU3F1YXJlUGVuLCBmYVBlblNxdWFyZSwgZmFQZW5jaWxTcXVhcmUsIGZhU3VpdGNhc2VSb2xsaW5nLCBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uLCBmYUNoZXZyb25Eb3duLCBmYUJhdHRlcnlGdWxsLCBmYUJhdHRlcnksIGZhQmF0dGVyeTUsIGZhU2t1bGxDcm9zc2JvbmVzLCBmYUNvZGVDb21wYXJlLCBmYUxpc3RVbCwgZmFMaXN0RG90cywgZmFTY2hvb2xMb2NrLCBmYVRvd2VyQ2VsbCwgZmFEb3duTG9uZywgZmFMb25nQXJyb3dBbHREb3duLCBmYVJhbmtpbmdTdGFyLCBmYUNoZXNzS2luZywgZmFQZXJzb25IYXJhc3NpbmcsIGZhQnJhemlsaWFuUmVhbFNpZ24sIGZhTGFuZG1hcmtEb21lLCBmYUxhbmRtYXJrQWx0LCBmYUFycm93VXAsIGZhVHYsIGZhVGVsZXZpc2lvbiwgZmFUdkFsdCwgZmFTaHJpbXAsIGZhTGlzdENoZWNrLCBmYVRhc2tzLCBmYUp1Z0RldGVyZ2VudCwgZmFDaXJjbGVVc2VyLCBmYVVzZXJDaXJjbGUsIGZhVXNlclNoaWVsZCwgZmFXaW5kLCBmYUNhckJ1cnN0LCBmYUNhckNyYXNoLCBmYVksIGZhUGVyc29uU25vd2JvYXJkaW5nLCBmYVNub3dib2FyZGluZywgZmFUcnVja0Zhc3QsIGZhU2hpcHBpbmdGYXN0LCBmYUZpc2gsIGZhVXNlckdyYWR1YXRlLCBmYUNpcmNsZUhhbGZTdHJva2UsIGZhQWRqdXN0LCBmYUNsYXBwZXJib2FyZCwgZmFDaXJjbGVSYWRpYXRpb24sIGZhUmFkaWF0aW9uQWx0LCBmYUJhc2ViYWxsLCBmYUJhc2ViYWxsQmFsbCwgZmFKZXRGaWdodGVyVXAsIGZhRGlhZ3JhbVByb2plY3QsIGZhUHJvamVjdERpYWdyYW0sIGZhQ29weSwgZmFWb2x1bWVYbWFyaywgZmFWb2x1bWVNdXRlLCBmYVZvbHVtZVRpbWVzLCBmYUhhbmRTcGFya2xlcywgZmFHcmlwLCBmYUdyaXBIb3Jpem9udGFsLCBmYVNoYXJlRnJvbVNxdWFyZSwgZmFTaGFyZVNxdWFyZSwgZmFDaGlsZENvbWJhdGFudCwgZmFDaGlsZFJpZmxlLCBmYUd1biwgZmFTcXVhcmVQaG9uZSwgZmFQaG9uZVNxdWFyZSwgZmFQbHVzLCBmYUFkZCwgZmFFeHBhbmQsIGZhQ29tcHV0ZXIsIGZhWG1hcmssIGZhQ2xvc2UsIGZhTXVsdGlwbHksIGZhUmVtb3ZlLCBmYVRpbWVzLCBmYUFycm93c1VwRG93bkxlZnRSaWdodCwgZmFBcnJvd3MsIGZhQ2hhbGtib2FyZFVzZXIsIGZhQ2hhbGtib2FyZFRlYWNoZXIsIGZhUGVzb1NpZ24sIGZhQnVpbGRpbmdTaGllbGQsIGZhQmFieSwgZmFVc2Vyc0xpbmUsIGZhUXVvdGVMZWZ0LCBmYVF1b3RlTGVmdEFsdCwgZmFUcmFjdG9yLCBmYVRyYXNoQXJyb3dVcCwgZmFUcmFzaFJlc3RvcmUsIGZhQXJyb3dEb3duVXBMb2NrLCBmYUxpbmVzTGVhbmluZywgZmFSdWxlckNvbWJpbmVkLCBmYUNvcHlyaWdodCwgZmFFcXVhbHMsIGZhQmxlbmRlciwgZmFUZWV0aCwgZmFTaGVrZWxTaWduLCBmYUlscywgZmFTaGVrZWwsIGZhU2hlcWVsLCBmYVNoZXFlbFNpZ24sIGZhTWFwLCBmYVJvY2tldCwgZmFQaG90b0ZpbG0sIGZhUGhvdG9WaWRlbywgZmFGb2xkZXJNaW51cywgZmFTdG9yZSwgZmFBcnJvd1RyZW5kVXAsIGZhUGx1Z0NpcmNsZU1pbnVzLCBmYVNpZ25IYW5naW5nLCBmYVNpZ24sIGZhQmV6aWVyQ3VydmUsIGZhQmVsbFNsYXNoLCBmYVRhYmxldCwgZmFUYWJsZXRBbmRyb2lkLCBmYVNjaG9vbEZsYWcsIGZhRmlsbCwgZmFBbmdsZVVwLCBmYURydW1zdGlja0JpdGUsIGZhSG9sbHlCZXJyeSwgZmFDaGV2cm9uTGVmdCwgZmFCYWN0ZXJpYSwgZmFIYW5kTGl6YXJkLCBmYU5vdGRlZiwgZmFEaXNlYXNlLCBmYUJyaWVmY2FzZU1lZGljYWwsIGZhR2VuZGVybGVzcywgZmFDaGV2cm9uUmlnaHQsIGZhUmV0d2VldCwgZmFDYXJSZWFyLCBmYUNhckFsdCwgZmFQdW1wU29hcCwgZmFWaWRlb1NsYXNoLCBmYUJhdHRlcnlRdWFydGVyLCBmYUJhdHRlcnkyLCBmYVJhZGlvLCBmYUJhYnlDYXJyaWFnZSwgZmFDYXJyaWFnZUJhYnksIGZhVHJhZmZpY0xpZ2h0LCBmYVRoZXJtb21ldGVyLCBmYVZyQ2FyZGJvYXJkLCBmYUhhbmRNaWRkbGVGaW5nZXIsIGZhUGVyY2VudCwgZmFQZXJjZW50YWdlLCBmYVRydWNrTW92aW5nLCBmYUdsYXNzV2F0ZXJEcm9wbGV0LCBmYURpc3BsYXksIGZhRmFjZVNtaWxlLCBmYVNtaWxlLCBmYVRodW1idGFjaywgZmFUaHVtYlRhY2ssIGZhVHJvcGh5LCBmYVBlcnNvblByYXlpbmcsIGZhUHJheSwgZmFIYW1tZXIsIGZhSGFuZFBlYWNlLCBmYVJvdGF0ZSwgZmFTeW5jQWx0LCBmYVNwaW5uZXIsIGZhUm9ib3QsIGZhUGVhY2UsIGZhR2VhcnMsIGZhQ29ncywgZmFXYXJlaG91c2UsIGZhQXJyb3dVcFJpZ2h0RG90cywgZmFTcGxvdGNoLCBmYUZhY2VHcmluSGVhcnRzLCBmYUdyaW5IZWFydHMsIGZhRGljZUZvdXIsIGZhU2ltQ2FyZCwgZmFUcmFuc2dlbmRlciwgZmFUcmFuc2dlbmRlckFsdCwgZmFNZXJjdXJ5LCBmYUFycm93VHVybkRvd24sIGZhTGV2ZWxEb3duLCBmYVBlcnNvbkZhbGxpbmdCdXJzdCwgZmFBd2FyZCwgZmFUaWNrZXRTaW1wbGUsIGZhVGlja2V0QWx0LCBmYUJ1aWxkaW5nLCBmYUFuZ2xlc0xlZnQsIGZhQW5nbGVEb3VibGVMZWZ0LCBmYVFyY29kZSwgZmFDbG9ja1JvdGF0ZUxlZnQsIGZhSGlzdG9yeSwgZmFGYWNlR3JpbkJlYW1Td2VhdCwgZmFHcmluQmVhbVN3ZWF0LCBmYUZpbGVFeHBvcnQsIGZhQXJyb3dSaWdodEZyb21GaWxlLCBmYVNoaWVsZCwgZmFTaGllbGRCbGFuaywgZmFBcnJvd1VwU2hvcnRXaWRlLCBmYVNvcnRBbW91bnRVcEFsdCwgZmFIb3VzZU1lZGljYWwsIGZhR29sZkJhbGxUZWUsIGZhR29sZkJhbGwsIGZhQ2lyY2xlQ2hldnJvbkxlZnQsIGZhQ2hldnJvbkNpcmNsZUxlZnQsIGZhSG91c2VDaGltbmV5V2luZG93LCBmYVBlbk5pYiwgZmFUZW50QXJyb3dUdXJuTGVmdCwgZmFUZW50cywgZmFXYW5kTWFnaWMsIGZhTWFnaWMsIGZhRG9nLCBmYUNhcnJvdCwgZmFNb29uLCBmYVdpbmVHbGFzc0VtcHR5LCBmYVdpbmVHbGFzc0FsdCwgZmFDaGVlc2UsIGZhWWluWWFuZywgZmFNdXNpYywgZmFDb2RlQ29tbWl0LCBmYVRlbXBlcmF0dXJlTG93LCBmYVBlcnNvbkJpa2luZywgZmFCaWtpbmcsIGZhQnJvb20sIGZhU2hpZWxkSGVhcnQsIGZhR29wdXJhbSwgZmFFYXJ0aE9jZWFuaWEsIGZhR2xvYmVPY2VhbmlhLCBmYVNxdWFyZVhtYXJrLCBmYVRpbWVzU3F1YXJlLCBmYVhtYXJrU3F1YXJlLCBmYUhhc2h0YWcsIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlciwgZmFFeHBhbmRBbHQsIGZhT2lsQ2FuLCBmYVQsIGZhSGlwcG8sIGZhQ2hhcnRDb2x1bW4sIGZhSW5maW5pdHksIGZhVmlhbENpcmNsZUNoZWNrLCBmYVBlcnNvbkFycm93RG93blRvTGluZSwgZmFWb2ljZW1haWwsIGZhRmFuLCBmYVBlcnNvbldhbGtpbmdMdWdnYWdlLCBmYVVwRG93biwgZmFBcnJvd3NBbHRWLCBmYUNsb3VkTW9vblJhaW4sIGZhQ2FsZW5kYXIsIGZhVHJhaWxlciwgZmFCYWhhaSwgZmFIYXlrYWwsIGZhU2RDYXJkLCBmYURyYWdvbiwgZmFTaG9lUHJpbnRzLCBmYUNpcmNsZVBsdXMsIGZhUGx1c0NpcmNsZSwgZmFGYWNlR3JpblRvbmd1ZVdpbmssIGZhR3JpblRvbmd1ZVdpbmssIGZhSGFuZEhvbGRpbmcsIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uLCBmYUxpbmtTbGFzaCwgZmFDaGFpbkJyb2tlbiwgZmFDaGFpblNsYXNoLCBmYVVubGluaywgZmFDbG9uZSwgZmFQZXJzb25XYWxraW5nQXJyb3dMb29wTGVmdCwgZmFBcnJvd1VwWkEsIGZhU29ydEFscGhhVXBBbHQsIGZhRmlyZUZsYW1lQ3VydmVkLCBmYUZpcmVBbHQsIGZhVG9ybmFkbywgZmFGaWxlQ2lyY2xlUGx1cywgZmFCb29rUXVyYW4sIGZhUXVyYW4sIGZhQW5jaG9yLCBmYUJvcmRlckFsbCwgZmFGYWNlQW5ncnksIGZhQW5ncnksIGZhQ29va2llQml0ZSwgZmFBcnJvd1RyZW5kRG93biwgZmFSc3MsIGZhRmVlZCwgZmFEcmF3UG9seWdvbiwgZmFTY2FsZUJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZSwgZmFHYXVnZVNpbXBsZUhpZ2gsIGZhVGFjaG9tZXRlciwgZmFUYWNob21ldGVyRmFzdCwgZmFTaG93ZXIsIGZhRGVza3RvcCwgZmFEZXNrdG9wQWx0LCBmYU0sIGZhVGFibGVMaXN0LCBmYVRoTGlzdCwgZmFDb21tZW50U21zLCBmYVNtcywgZmFCb29rLCBmYVVzZXJQbHVzLCBmYUNoZWNrLCBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzLCBmYUJhdHRlcnk0LCBmYUhvdXNlQ2lyY2xlQ2hlY2ssIGZhQW5nbGVMZWZ0LCBmYURpYWdyYW1TdWNjZXNzb3IsIGZhVHJ1Y2tBcnJvd1JpZ2h0LCBmYUFycm93c1NwbGl0VXBBbmRMZWZ0LCBmYUhhbmRGaXN0LCBmYUZpc3RSYWlzZWQsIGZhQ2xvdWRNb29uLCBmYUJyaWVmY2FzZSwgZmFQZXJzb25GYWxsaW5nLCBmYUltYWdlUG9ydHJhaXQsIGZhUG9ydHJhaXQsIGZhVXNlclRhZywgZmFSdWcsIGZhRWFydGhFdXJvcGUsIGZhR2xvYmVFdXJvcGUsIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZSwgZmFMdWdnYWdlQ2FydCwgZmFSZWN0YW5nbGVYbWFyaywgZmFSZWN0YW5nbGVUaW1lcywgZmFUaW1lc1JlY3RhbmdsZSwgZmFXaW5kb3dDbG9zZSwgZmFCYWh0U2lnbiwgZmFCb29rT3BlbiwgZmFCb29rSm91cm5hbFdoaWxscywgZmFKb3VybmFsV2hpbGxzLCBmYUhhbmRjdWZmcywgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uLCBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUsIGZhV2FybmluZywgZmFEYXRhYmFzZSwgZmFTaGFyZSwgZmFNYWlsRm9yd2FyZCwgZmFCb3R0bGVEcm9wbGV0LCBmYU1hc2tGYWNlLCBmYUhpbGxSb2Nrc2xpZGUsIGZhUmlnaHRMZWZ0LCBmYUV4Y2hhbmdlQWx0LCBmYVBhcGVyUGxhbmUsIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uLCBmYUR1bmdlb24sIGZhQWxpZ25SaWdodCwgZmFNb25leUJpbGwxV2F2ZSwgZmFNb25leUJpbGxXYXZlQWx0LCBmYUxpZmVSaW5nLCBmYUhhbmRzLCBmYVNpZ25MYW5ndWFnZSwgZmFTaWduaW5nLCBmYUNhbGVuZGFyRGF5LCBmYVdhdGVyTGFkZGVyLCBmYUxhZGRlcldhdGVyLCBmYVN3aW1taW5nUG9vbCwgZmFBcnJvd3NVcERvd24sIGZhQXJyb3dzViwgZmFGYWNlR3JpbWFjZSwgZmFHcmltYWNlLCBmYVdoZWVsY2hhaXJNb3ZlLCBmYVdoZWVsY2hhaXJBbHQsIGZhVHVybkRvd24sIGZhTGV2ZWxEb3duQWx0LCBmYVBlcnNvbldhbGtpbmdBcnJvd1JpZ2h0LCBmYVNxdWFyZUVudmVsb3BlLCBmYUVudmVsb3BlU3F1YXJlLCBmYURpY2UsIGZhQm93bGluZ0JhbGwsIGZhQnJhaW4sIGZhQmFuZGFnZSwgZmFCYW5kQWlkLCBmYUNhbGVuZGFyTWludXMsIGZhQ2lyY2xlWG1hcmssIGZhVGltZXNDaXJjbGUsIGZhWG1hcmtDaXJjbGUsIGZhR2lmdHMsIGZhSG90ZWwsIGZhRWFydGhBc2lhLCBmYUdsb2JlQXNpYSwgZmFJZENhcmRDbGlwLCBmYUlkQ2FyZEFsdCwgZmFNYWduaWZ5aW5nR2xhc3NQbHVzLCBmYVNlYXJjaFBsdXMsIGZhVGh1bWJzVXAsIGZhVXNlckNsb2NrLCBmYUhhbmREb3RzLCBmYUFsbGVyZ2llcywgZmFGaWxlSW52b2ljZSwgZmFXaW5kb3dNaW5pbWl6ZSwgZmFNdWdTYXVjZXIsIGZhQ29mZmVlLCBmYUJydXNoLCBmYU1hc2ssIGZhTWFnbmlmeWluZ0dsYXNzTWludXMsIGZhU2VhcmNoTWludXMsIGZhUnVsZXJWZXJ0aWNhbCwgZmFVc2VyTGFyZ2UsIGZhVXNlckFsdCwgZmFUcmFpblRyYW0sIGZhVXNlck51cnNlLCBmYVN5cmluZ2UsIGZhQ2xvdWRTdW4sIGZhU3RvcHdhdGNoMjAsIGZhU3F1YXJlRnVsbCwgZmFNYWduZXQsIGZhSmFyLCBmYU5vdGVTdGlja3ksIGZhU3RpY2t5Tm90ZSwgZmFCdWdTbGFzaCwgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCwgZmFCb25lLCBmYVVzZXJJbmp1cmVkLCBmYUZhY2VTYWRUZWFyLCBmYVNhZFRlYXIsIGZhUGxhbmUsIGZhVGVudEFycm93c0Rvd24sIGZhRXhjbGFtYXRpb24sIGZhQXJyb3dzU3BpbiwgZmFQcmludCwgZmFUdXJraXNoTGlyYVNpZ24sIGZhVHJ5LCBmYVR1cmtpc2hMaXJhLCBmYURvbGxhclNpZ24sIGZhRG9sbGFyLCBmYVVzZCwgZmFYLCBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciwgZmFTZWFyY2hEb2xsYXIsIGZhVXNlcnNHZWFyLCBmYVVzZXJzQ29nLCBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsIGZhQnVpbGRpbmdDb2x1bW5zLCBmYUJhbmssIGZhSW5zdGl0dXRpb24sIGZhTXVzZXVtLCBmYVVuaXZlcnNpdHksIGZhVW1icmVsbGEsIGZhVHJvd2VsLCBmYUQsIGZhU3RhcGxlciwgZmFNYXNrc1RoZWF0ZXIsIGZhVGhlYXRlck1hc2tzLCBmYUtpcFNpZ24sIGZhSGFuZFBvaW50TGVmdCwgZmFIYW5kc2hha2VTaW1wbGUsIGZhSGFuZHNoYWtlQWx0LCBmYUpldEZpZ2h0ZXIsIGZhRmlnaHRlckpldCwgZmFTcXVhcmVTaGFyZU5vZGVzLCBmYVNoYXJlQWx0U3F1YXJlLCBmYUJhcmNvZGUsIGZhUGx1c01pbnVzLCBmYVZpZGVvLCBmYVZpZGVvQ2FtZXJhLCBmYUdyYWR1YXRpb25DYXAsIGZhTW9ydGFyQm9hcmQsIGZhSGFuZEhvbGRpbmdNZWRpY2FsLCBmYVBlcnNvbkNpcmNsZUNoZWNrLCBmYVR1cm5VcCwgZmFMZXZlbFVwQWx0IH07XG4iLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfd3JhcFJlZ0V4cCgpIHtcbiAgX3dyYXBSZWdFeHAgPSBmdW5jdGlvbiAocmUsIGdyb3Vwcykge1xuICAgIHJldHVybiBuZXcgQmFiZWxSZWdFeHAocmUsIHZvaWQgMCwgZ3JvdXBzKTtcbiAgfTtcblxuICB2YXIgX3N1cGVyID0gUmVnRXhwLnByb3RvdHlwZSxcbiAgICAgIF9ncm91cHMgPSBuZXcgV2Vha01hcCgpO1xuXG4gIGZ1bmN0aW9uIEJhYmVsUmVnRXhwKHJlLCBmbGFncywgZ3JvdXBzKSB7XG4gICAgdmFyIF90aGlzID0gbmV3IFJlZ0V4cChyZSwgZmxhZ3MpO1xuXG4gICAgcmV0dXJuIF9ncm91cHMuc2V0KF90aGlzLCBncm91cHMgfHwgX2dyb3Vwcy5nZXQocmUpKSwgX3NldFByb3RvdHlwZU9mKF90aGlzLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRHcm91cHMocmVzdWx0LCByZSkge1xuICAgIHZhciBnID0gX2dyb3Vwcy5nZXQocmUpO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGcpLnJlZHVjZShmdW5jdGlvbiAoZ3JvdXBzLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZ3JvdXBzW25hbWVdID0gcmVzdWx0W2dbbmFtZV1dLCBncm91cHM7XG4gICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIH1cblxuICByZXR1cm4gX2luaGVyaXRzKEJhYmVsUmVnRXhwLCBSZWdFeHApLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgcmVzdWx0ID0gX3N1cGVyLmV4ZWMuY2FsbCh0aGlzLCBzdHIpO1xuXG4gICAgcmV0dXJuIHJlc3VsdCAmJiAocmVzdWx0Lmdyb3VwcyA9IGJ1aWxkR3JvdXBzKHJlc3VsdCwgdGhpcykpLCByZXN1bHQ7XG4gIH0sIEJhYmVsUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wucmVwbGFjZV0gPSBmdW5jdGlvbiAoc3RyLCBzdWJzdGl0dXRpb24pIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2Ygc3Vic3RpdHV0aW9uKSB7XG4gICAgICB2YXIgZ3JvdXBzID0gX2dyb3Vwcy5nZXQodGhpcyk7XG5cbiAgICAgIHJldHVybiBfc3VwZXJbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgc3RyLCBzdWJzdGl0dXRpb24ucmVwbGFjZSgvXFwkPChbXj5dKyk+L2csIGZ1bmN0aW9uIChfLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBcIiRcIiArIGdyb3Vwc1tuYW1lXTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBzdWJzdGl0dXRpb24pIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBfc3VwZXJbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgc3RyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gXCJvYmplY3RcIiAhPSB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdICYmIChhcmdzID0gW10uc2xpY2UuY2FsbChhcmdzKSkucHVzaChidWlsZEdyb3VwcyhhcmdzLCBfdGhpcykpLCBzdWJzdGl0dXRpb24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3N1cGVyW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHN0ciwgc3Vic3RpdHV0aW9uKTtcbiAgfSwgX3dyYXBSZWdFeHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTtcbn1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG5cbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG5cbiAgdmFyIF9zLCBfZTtcblxuICB0cnkge1xuICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICByZXR1cm4gYXJyMjtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbnZhciBfV0lORE9XID0ge307XG52YXIgX0RPQ1VNRU5UID0ge307XG52YXIgX01VVEFUSU9OX09CU0VSVkVSID0gbnVsbDtcbnZhciBfUEVSRk9STUFOQ0UgPSB7XG4gIG1hcms6IG5vb3AsXG4gIG1lYXN1cmU6IG5vb3Bcbn07XG5cbnRyeSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgX1dJTkRPVyA9IHdpbmRvdztcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIF9ET0NVTUVOVCA9IGRvY3VtZW50O1xuICBpZiAodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSBfTVVUQVRJT05fT0JTRVJWRVIgPSBNdXRhdGlvbk9ic2VydmVyO1xuICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJykgX1BFUkZPUk1BTkNFID0gcGVyZm9ybWFuY2U7XG59IGNhdGNoIChlKSB7fVxuXG52YXIgX3JlZiA9IF9XSU5ET1cubmF2aWdhdG9yIHx8IHt9LFxuICAgIF9yZWYkdXNlckFnZW50ID0gX3JlZi51c2VyQWdlbnQsXG4gICAgdXNlckFnZW50ID0gX3JlZiR1c2VyQWdlbnQgPT09IHZvaWQgMCA/ICcnIDogX3JlZiR1c2VyQWdlbnQ7XG52YXIgV0lORE9XID0gX1dJTkRPVztcbnZhciBET0NVTUVOVCA9IF9ET0NVTUVOVDtcbnZhciBNVVRBVElPTl9PQlNFUlZFUiA9IF9NVVRBVElPTl9PQlNFUlZFUjtcbnZhciBQRVJGT1JNQU5DRSA9IF9QRVJGT1JNQU5DRTtcbnZhciBJU19CUk9XU0VSID0gISFXSU5ET1cuZG9jdW1lbnQ7XG52YXIgSVNfRE9NID0gISFET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQgJiYgISFET0NVTUVOVC5oZWFkICYmIHR5cGVvZiBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBET0NVTUVOVC5jcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xudmFyIElTX0lFID0gfnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgfHwgfnVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG52YXIgX2ZhbWlseVByb3h5LCBfZmFtaWx5UHJveHkyLCBfZmFtaWx5UHJveHkzLCBfZmFtaWx5UHJveHk0LCBfZmFtaWx5UHJveHk1O1xuXG52YXIgTkFNRVNQQUNFX0lERU5USUZJRVIgPSAnX19fRk9OVF9BV0VTT01FX19fJztcbnZhciBVTklUU19JTl9HUklEID0gMTY7XG52YXIgREVGQVVMVF9DU1NfUFJFRklYID0gJ2ZhJztcbnZhciBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTID0gJ3N2Zy1pbmxpbmUtLWZhJztcbnZhciBEQVRBX0ZBX0kyU1ZHID0gJ2RhdGEtZmEtaTJzdmcnO1xudmFyIERBVEFfRkFfUFNFVURPX0VMRU1FTlQgPSAnZGF0YS1mYS1wc2V1ZG8tZWxlbWVudCc7XG52YXIgREFUQV9GQV9QU0VVRE9fRUxFTUVOVF9QRU5ESU5HID0gJ2RhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZyc7XG52YXIgREFUQV9QUkVGSVggPSAnZGF0YS1wcmVmaXgnO1xudmFyIERBVEFfSUNPTiA9ICdkYXRhLWljb24nO1xudmFyIEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUyA9ICdmb250YXdlc29tZS1pMnN2Zyc7XG52YXIgTVVUQVRJT05fQVBQUk9BQ0hfQVNZTkMgPSAnYXN5bmMnO1xudmFyIFRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTID0gWydIVE1MJywgJ0hFQUQnLCAnU1RZTEUnLCAnU0NSSVBUJ107XG52YXIgUFJPRFVDVElPTiA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSgpO1xudmFyIEZBTUlMWV9DTEFTU0lDID0gJ2NsYXNzaWMnO1xudmFyIEZBTUlMWV9TSEFSUCA9ICdzaGFycCc7XG52YXIgRkFNSUxJRVMgPSBbRkFNSUxZX0NMQVNTSUMsIEZBTUlMWV9TSEFSUF07XG5cbmZ1bmN0aW9uIGZhbWlseVByb3h5KG9iaikge1xuICAvLyBEZWZhdWx0cyB0byB0aGUgY2xhc3NpYyBmYW1pbHkgaWYgZmFtaWx5IGlzIG5vdCBhdmFpbGFibGVcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgIHJldHVybiBwcm9wIGluIHRhcmdldCA/IHRhcmdldFtwcm9wXSA6IHRhcmdldFtGQU1JTFlfQ0xBU1NJQ107XG4gICAgfVxuICB9KTtcbn1cbnZhciBQUkVGSVhfVE9fU1RZTEUgPSBmYW1pbHlQcm94eSgoX2ZhbWlseVByb3h5ID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZmFtaWx5UHJveHksIEZBTUlMWV9DTEFTU0lDLCB7XG4gICdmYSc6ICdzb2xpZCcsXG4gICdmYXMnOiAnc29saWQnLFxuICAnZmEtc29saWQnOiAnc29saWQnLFxuICAnZmFyJzogJ3JlZ3VsYXInLFxuICAnZmEtcmVndWxhcic6ICdyZWd1bGFyJyxcbiAgJ2ZhbCc6ICdsaWdodCcsXG4gICdmYS1saWdodCc6ICdsaWdodCcsXG4gICdmYXQnOiAndGhpbicsXG4gICdmYS10aGluJzogJ3RoaW4nLFxuICAnZmFkJzogJ2R1b3RvbmUnLFxuICAnZmEtZHVvdG9uZSc6ICdkdW90b25lJyxcbiAgJ2ZhYic6ICdicmFuZHMnLFxuICAnZmEtYnJhbmRzJzogJ2JyYW5kcycsXG4gICdmYWsnOiAna2l0JyxcbiAgJ2Zha2QnOiAna2l0JyxcbiAgJ2ZhLWtpdCc6ICdraXQnLFxuICAnZmEta2l0LWR1b3RvbmUnOiAna2l0J1xufSksIF9kZWZpbmVQcm9wZXJ0eShfZmFtaWx5UHJveHksIEZBTUlMWV9TSEFSUCwge1xuICAnZmEnOiAnc29saWQnLFxuICAnZmFzcyc6ICdzb2xpZCcsXG4gICdmYS1zb2xpZCc6ICdzb2xpZCcsXG4gICdmYXNyJzogJ3JlZ3VsYXInLFxuICAnZmEtcmVndWxhcic6ICdyZWd1bGFyJyxcbiAgJ2Zhc2wnOiAnbGlnaHQnLFxuICAnZmEtbGlnaHQnOiAnbGlnaHQnLFxuICAnZmFzdCc6ICd0aGluJyxcbiAgJ2ZhLXRoaW4nOiAndGhpbidcbn0pLCBfZmFtaWx5UHJveHkpKTtcbnZhciBTVFlMRV9UT19QUkVGSVggPSBmYW1pbHlQcm94eSgoX2ZhbWlseVByb3h5MiA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2ZhbWlseVByb3h5MiwgRkFNSUxZX0NMQVNTSUMsIHtcbiAgc29saWQ6ICdmYXMnLFxuICByZWd1bGFyOiAnZmFyJyxcbiAgbGlnaHQ6ICdmYWwnLFxuICB0aGluOiAnZmF0JyxcbiAgZHVvdG9uZTogJ2ZhZCcsXG4gIGJyYW5kczogJ2ZhYicsXG4gIGtpdDogJ2Zhaydcbn0pLCBfZGVmaW5lUHJvcGVydHkoX2ZhbWlseVByb3h5MiwgRkFNSUxZX1NIQVJQLCB7XG4gIHNvbGlkOiAnZmFzcycsXG4gIHJlZ3VsYXI6ICdmYXNyJyxcbiAgbGlnaHQ6ICdmYXNsJyxcbiAgdGhpbjogJ2Zhc3QnXG59KSwgX2ZhbWlseVByb3h5MikpO1xudmFyIFBSRUZJWF9UT19MT05HX1NUWUxFID0gZmFtaWx5UHJveHkoKF9mYW1pbHlQcm94eTMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9mYW1pbHlQcm94eTMsIEZBTUlMWV9DTEFTU0lDLCB7XG4gIGZhYjogJ2ZhLWJyYW5kcycsXG4gIGZhZDogJ2ZhLWR1b3RvbmUnLFxuICBmYWs6ICdmYS1raXQnLFxuICBmYWw6ICdmYS1saWdodCcsXG4gIGZhcjogJ2ZhLXJlZ3VsYXInLFxuICBmYXM6ICdmYS1zb2xpZCcsXG4gIGZhdDogJ2ZhLXRoaW4nXG59KSwgX2RlZmluZVByb3BlcnR5KF9mYW1pbHlQcm94eTMsIEZBTUlMWV9TSEFSUCwge1xuICBmYXNzOiAnZmEtc29saWQnLFxuICBmYXNyOiAnZmEtcmVndWxhcicsXG4gIGZhc2w6ICdmYS1saWdodCcsXG4gIGZhc3Q6ICdmYS10aGluJ1xufSksIF9mYW1pbHlQcm94eTMpKTtcbnZhciBMT05HX1NUWUxFX1RPX1BSRUZJWCA9IGZhbWlseVByb3h5KChfZmFtaWx5UHJveHk0ID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZmFtaWx5UHJveHk0LCBGQU1JTFlfQ0xBU1NJQywge1xuICAnZmEtYnJhbmRzJzogJ2ZhYicsXG4gICdmYS1kdW90b25lJzogJ2ZhZCcsXG4gICdmYS1raXQnOiAnZmFrJyxcbiAgJ2ZhLWxpZ2h0JzogJ2ZhbCcsXG4gICdmYS1yZWd1bGFyJzogJ2ZhcicsXG4gICdmYS1zb2xpZCc6ICdmYXMnLFxuICAnZmEtdGhpbic6ICdmYXQnXG59KSwgX2RlZmluZVByb3BlcnR5KF9mYW1pbHlQcm94eTQsIEZBTUlMWV9TSEFSUCwge1xuICAnZmEtc29saWQnOiAnZmFzcycsXG4gICdmYS1yZWd1bGFyJzogJ2Zhc3InLFxuICAnZmEtbGlnaHQnOiAnZmFzbCcsXG4gICdmYS10aGluJzogJ2Zhc3QnXG59KSwgX2ZhbWlseVByb3h5NCkpO1xudmFyIElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOID0gL2ZhKHN8cnxsfHR8ZHxifGt8c3N8c3J8c2x8c3QpP1tcXC1cXCBdLzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuXG52YXIgTEFZRVJTX1RFWFRfQ0xBU1NOQU1FID0gJ2ZhLWxheWVycy10ZXh0JztcbnZhciBGT05UX0ZBTUlMWV9QQVRURVJOID0gL0ZvbnQgP0F3ZXNvbWUgPyhbNTYgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycHxLaXQpPy4qL2k7XG52YXIgRk9OVF9XRUlHSFRfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoKF9mYW1pbHlQcm94eTUgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9mYW1pbHlQcm94eTUsIEZBTUlMWV9DTEFTU0lDLCB7XG4gIDkwMDogJ2ZhcycsXG4gIDQwMDogJ2ZhcicsXG4gIG5vcm1hbDogJ2ZhcicsXG4gIDMwMDogJ2ZhbCcsXG4gIDEwMDogJ2ZhdCdcbn0pLCBfZGVmaW5lUHJvcGVydHkoX2ZhbWlseVByb3h5NSwgRkFNSUxZX1NIQVJQLCB7XG4gIDkwMDogJ2Zhc3MnLFxuICA0MDA6ICdmYXNyJyxcbiAgMzAwOiAnZmFzbCcsXG4gIDEwMDogJ2Zhc3QnXG59KSwgX2ZhbWlseVByb3h5NSkpO1xudmFyIG9uZVRvVGVuID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbnZhciBvbmVUb1R3ZW50eSA9IG9uZVRvVGVuLmNvbmNhdChbMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdKTtcbnZhciBBVFRSSUJVVEVTX1dBVENIRURfRk9SX01VVEFUSU9OID0gWydjbGFzcycsICdkYXRhLXByZWZpeCcsICdkYXRhLWljb24nLCAnZGF0YS1mYS10cmFuc2Zvcm0nLCAnZGF0YS1mYS1tYXNrJ107XG52YXIgRFVPVE9ORV9DTEFTU0VTID0ge1xuICBHUk9VUDogJ2R1b3RvbmUtZ3JvdXAnLFxuICBTV0FQX09QQUNJVFk6ICdzd2FwLW9wYWNpdHknLFxuICBQUklNQVJZOiAncHJpbWFyeScsXG4gIFNFQ09OREFSWTogJ3NlY29uZGFyeSdcbn07XG52YXIgcHJlZml4ZXMgPSBuZXcgU2V0KCk7XG5PYmplY3Qua2V5cyhTVFlMRV9UT19QUkVGSVhbRkFNSUxZX0NMQVNTSUNdKS5tYXAocHJlZml4ZXMuYWRkLmJpbmQocHJlZml4ZXMpKTtcbk9iamVjdC5rZXlzKFNUWUxFX1RPX1BSRUZJWFtGQU1JTFlfU0hBUlBdKS5tYXAocHJlZml4ZXMuYWRkLmJpbmQocHJlZml4ZXMpKTtcbnZhciBSRVNFUlZFRF9DTEFTU0VTID0gW10uY29uY2F0KEZBTUlMSUVTLCBfdG9Db25zdW1hYmxlQXJyYXkocHJlZml4ZXMpLCBbJzJ4cycsICd4cycsICdzbScsICdsZycsICd4bCcsICcyeGwnLCAnYmVhdCcsICdib3JkZXInLCAnZmFkZScsICdiZWF0LWZhZGUnLCAnYm91bmNlJywgJ2ZsaXAtYm90aCcsICdmbGlwLWhvcml6b250YWwnLCAnZmxpcC12ZXJ0aWNhbCcsICdmbGlwJywgJ2Z3JywgJ2ludmVyc2UnLCAnbGF5ZXJzLWNvdW50ZXInLCAnbGF5ZXJzLXRleHQnLCAnbGF5ZXJzJywgJ2xpJywgJ3B1bGwtbGVmdCcsICdwdWxsLXJpZ2h0JywgJ3B1bHNlJywgJ3JvdGF0ZS0xODAnLCAncm90YXRlLTI3MCcsICdyb3RhdGUtOTAnLCAncm90YXRlLWJ5JywgJ3NoYWtlJywgJ3NwaW4tcHVsc2UnLCAnc3Bpbi1yZXZlcnNlJywgJ3NwaW4nLCAnc3RhY2stMXgnLCAnc3RhY2stMngnLCAnc3RhY2snLCAndWwnLCBEVU9UT05FX0NMQVNTRVMuR1JPVVAsIERVT1RPTkVfQ0xBU1NFUy5TV0FQX09QQUNJVFksIERVT1RPTkVfQ0xBU1NFUy5QUklNQVJZLCBEVU9UT05FX0NMQVNTRVMuU0VDT05EQVJZXSkuY29uY2F0KG9uZVRvVGVuLm1hcChmdW5jdGlvbiAobikge1xuICByZXR1cm4gXCJcIi5jb25jYXQobiwgXCJ4XCIpO1xufSkpLmNvbmNhdChvbmVUb1R3ZW50eS5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIFwidy1cIi5jb25jYXQobik7XG59KSk7XG5cbnZhciBpbml0aWFsID0gV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnIHx8IHt9O1xuXG5mdW5jdGlvbiBnZXRBdHRyQ29uZmlnKGF0dHIpIHtcbiAgdmFyIGVsZW1lbnQgPSBET0NVTUVOVC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbJyArIGF0dHIgKyAnXScpO1xuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcbiAgLy8gR2V0dGluZyBhbiBlbXB0eSBzdHJpbmcgd2lsbCBvY2N1ciBpZiB0aGUgYXR0cmlidXRlIGlzIHNldCBvbiB0aGUgSFRNTCB0YWcgYnV0IHdpdGhvdXQgYSB2YWx1ZVxuICAvLyBXZSdsbCBhc3N1bWUgdGhhdCB0aGlzIGlzIGFuIGluZGljYXRpb24gdGhhdCBpdCBzaG91bGQgYmUgdG9nZ2xlZCB0byB0cnVlXG4gIGlmICh2YWwgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHZhbCA9PT0gJ2ZhbHNlJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodmFsID09PSAndHJ1ZScpIHJldHVybiB0cnVlO1xuICByZXR1cm4gdmFsO1xufVxuXG5pZiAoRE9DVU1FTlQgJiYgdHlwZW9mIERPQ1VNRU5ULnF1ZXJ5U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgdmFyIGF0dHJzID0gW1snZGF0YS1mYW1pbHktcHJlZml4JywgJ2ZhbWlseVByZWZpeCddLCBbJ2RhdGEtY3NzLXByZWZpeCcsICdjc3NQcmVmaXgnXSwgWydkYXRhLWZhbWlseS1kZWZhdWx0JywgJ2ZhbWlseURlZmF1bHQnXSwgWydkYXRhLXN0eWxlLWRlZmF1bHQnLCAnc3R5bGVEZWZhdWx0J10sIFsnZGF0YS1yZXBsYWNlbWVudC1jbGFzcycsICdyZXBsYWNlbWVudENsYXNzJ10sIFsnZGF0YS1hdXRvLXJlcGxhY2Utc3ZnJywgJ2F1dG9SZXBsYWNlU3ZnJ10sIFsnZGF0YS1hdXRvLWFkZC1jc3MnLCAnYXV0b0FkZENzcyddLCBbJ2RhdGEtYXV0by1hMTF5JywgJ2F1dG9BMTF5J10sIFsnZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzJywgJ3NlYXJjaFBzZXVkb0VsZW1lbnRzJ10sIFsnZGF0YS1vYnNlcnZlLW11dGF0aW9ucycsICdvYnNlcnZlTXV0YXRpb25zJ10sIFsnZGF0YS1tdXRhdGUtYXBwcm9hY2gnLCAnbXV0YXRlQXBwcm9hY2gnXSwgWydkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlJywgJ2tlZXBPcmlnaW5hbFNvdXJjZSddLCBbJ2RhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZScsICdtZWFzdXJlUGVyZm9ybWFuY2UnXSwgWydkYXRhLXNob3ctbWlzc2luZy1pY29ucycsICdzaG93TWlzc2luZ0ljb25zJ11dO1xuICBhdHRycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICAgIGF0dHIgPSBfcmVmMlswXSxcbiAgICAgICAga2V5ID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdmFsID0gY29lcmNlKGdldEF0dHJDb25maWcoYXR0cikpO1xuXG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaW5pdGlhbFtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfZGVmYXVsdCA9IHtcbiAgc3R5bGVEZWZhdWx0OiAnc29saWQnLFxuICBmYW1pbHlEZWZhdWx0OiAnY2xhc3NpYycsXG4gIGNzc1ByZWZpeDogREVGQVVMVF9DU1NfUFJFRklYLFxuICByZXBsYWNlbWVudENsYXNzOiBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTLFxuICBhdXRvUmVwbGFjZVN2ZzogdHJ1ZSxcbiAgYXV0b0FkZENzczogdHJ1ZSxcbiAgYXV0b0ExMXk6IHRydWUsXG4gIHNlYXJjaFBzZXVkb0VsZW1lbnRzOiBmYWxzZSxcbiAgb2JzZXJ2ZU11dGF0aW9uczogdHJ1ZSxcbiAgbXV0YXRlQXBwcm9hY2g6ICdhc3luYycsXG4gIGtlZXBPcmlnaW5hbFNvdXJjZTogdHJ1ZSxcbiAgbWVhc3VyZVBlcmZvcm1hbmNlOiBmYWxzZSxcbiAgc2hvd01pc3NpbmdJY29uczogdHJ1ZVxufTsgLy8gZmFtaWx5UHJlZml4IGlzIGRlcHJlY2F0ZWQgYnV0IHdlIG11c3Qgc3RpbGwgc3VwcG9ydCBpdCBpZiBwcmVzZW50XG5cbmlmIChpbml0aWFsLmZhbWlseVByZWZpeCkge1xuICBpbml0aWFsLmNzc1ByZWZpeCA9IGluaXRpYWwuZmFtaWx5UHJlZml4O1xufVxuXG52YXIgX2NvbmZpZyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfZGVmYXVsdCksIGluaXRpYWwpO1xuXG5pZiAoIV9jb25maWcuYXV0b1JlcGxhY2VTdmcpIF9jb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IGZhbHNlO1xudmFyIGNvbmZpZyA9IHt9O1xuT2JqZWN0LmtleXMoX2RlZmF1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgX2NvbmZpZ1trZXldID0gdmFsO1xuXG4gICAgICBfb25DaGFuZ2VDYi5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICByZXR1cm4gY2IoY29uZmlnKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2NvbmZpZ1trZXldO1xuICAgIH1cbiAgfSk7XG59KTsgLy8gZmFtaWx5UHJlZml4IGlzIGRlcHJlY2F0ZWQgYXMgb2YgNi4yLjAgYW5kIHNob3VsZCBiZSByZW1vdmVkIGluIDcuMC4wXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25maWcsICdmYW1pbHlQcmVmaXgnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgIF9jb25maWcuY3NzUHJlZml4ID0gdmFsO1xuXG4gICAgX29uQ2hhbmdlQ2IuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgIHJldHVybiBjYihjb25maWcpO1xuICAgIH0pO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmZpZy5jc3NQcmVmaXg7XG4gIH1cbn0pO1xuV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnID0gY29uZmlnO1xudmFyIF9vbkNoYW5nZUNiID0gW107XG5mdW5jdGlvbiBvbkNoYW5nZShjYikge1xuICBfb25DaGFuZ2VDYi5wdXNoKGNiKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIF9vbkNoYW5nZUNiLnNwbGljZShfb25DaGFuZ2VDYi5pbmRleE9mKGNiKSwgMSk7XG4gIH07XG59XG5cbnZhciBkID0gVU5JVFNfSU5fR1JJRDtcbnZhciBtZWFuaW5nbGVzc1RyYW5zZm9ybSA9IHtcbiAgc2l6ZTogMTYsXG4gIHg6IDAsXG4gIHk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgZmxpcFg6IGZhbHNlLFxuICBmbGlwWTogZmFsc2Vcbn07XG5mdW5jdGlvbiBpbnNlcnRDc3MoY3NzKSB7XG4gIGlmICghY3NzIHx8ICFJU19ET00pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc3R5bGUgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgc3R5bGUuaW5uZXJIVE1MID0gY3NzO1xuICB2YXIgaGVhZENoaWxkcmVuID0gRE9DVU1FTlQuaGVhZC5jaGlsZE5vZGVzO1xuICB2YXIgYmVmb3JlQ2hpbGQgPSBudWxsO1xuXG4gIGZvciAodmFyIGkgPSBoZWFkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcbiAgICB2YXIgY2hpbGQgPSBoZWFkQ2hpbGRyZW5baV07XG4gICAgdmFyIHRhZ05hbWUgPSAoY2hpbGQudGFnTmFtZSB8fCAnJykudG9VcHBlckNhc2UoKTtcblxuICAgIGlmIChbJ1NUWUxFJywgJ0xJTksnXS5pbmRleE9mKHRhZ05hbWUpID4gLTEpIHtcbiAgICAgIGJlZm9yZUNoaWxkID0gY2hpbGQ7XG4gICAgfVxuICB9XG5cbiAgRE9DVU1FTlQuaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGJlZm9yZUNoaWxkKTtcbiAgcmV0dXJuIGNzcztcbn1cbnZhciBpZFBvb2wgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xuZnVuY3Rpb24gbmV4dFVuaXF1ZUlkKCkge1xuICB2YXIgc2l6ZSA9IDEyO1xuICB2YXIgaWQgPSAnJztcblxuICB3aGlsZSAoc2l6ZS0tID4gMCkge1xuICAgIGlkICs9IGlkUG9vbFtNYXRoLnJhbmRvbSgpICogNjIgfCAwXTtcbiAgfVxuXG4gIHJldHVybiBpZDtcbn1cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAob2JqIHx8IFtdKS5sZW5ndGggPj4+IDA7IGktLTspIHtcbiAgICBhcnJheVtpXSA9IG9ialtpXTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbmZ1bmN0aW9uIGNsYXNzQXJyYXkobm9kZSkge1xuICBpZiAobm9kZS5jbGFzc0xpc3QpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlLmNsYXNzTGlzdCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChub2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKGkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBodG1sRXNjYXBlKHN0cikge1xuICByZXR1cm4gXCJcIi5jb25jYXQoc3RyKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG5mdW5jdGlvbiBqb2luQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzIHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgYXR0cmlidXRlTmFtZSkge1xuICAgIHJldHVybiBhY2MgKyBcIlwiLmNvbmNhdChhdHRyaWJ1dGVOYW1lLCBcIj1cXFwiXCIpLmNvbmNhdChodG1sRXNjYXBlKGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pLCBcIlxcXCIgXCIpO1xuICB9LCAnJykudHJpbSgpO1xufVxuZnVuY3Rpb24gam9pblN0eWxlcyhzdHlsZXMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHN0eWxlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHN0eWxlTmFtZSkge1xuICAgIHJldHVybiBhY2MgKyBcIlwiLmNvbmNhdChzdHlsZU5hbWUsIFwiOiBcIikuY29uY2F0KHN0eWxlc1tzdHlsZU5hbWVdLnRyaW0oKSwgXCI7XCIpO1xuICB9LCAnJyk7XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1Jc01lYW5pbmdmdWwodHJhbnNmb3JtKSB7XG4gIHJldHVybiB0cmFuc2Zvcm0uc2l6ZSAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0uc2l6ZSB8fCB0cmFuc2Zvcm0ueCAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0ueCB8fCB0cmFuc2Zvcm0ueSAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0ueSB8fCB0cmFuc2Zvcm0ucm90YXRlICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5yb3RhdGUgfHwgdHJhbnNmb3JtLmZsaXBYIHx8IHRyYW5zZm9ybS5mbGlwWTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUZvclN2ZyhfcmVmKSB7XG4gIHZhciB0cmFuc2Zvcm0gPSBfcmVmLnRyYW5zZm9ybSxcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gX3JlZi5jb250YWluZXJXaWR0aCxcbiAgICAgIGljb25XaWR0aCA9IF9yZWYuaWNvbldpZHRoO1xuICB2YXIgb3V0ZXIgPSB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoY29udGFpbmVyV2lkdGggLyAyLCBcIiAyNTYpXCIpXG4gIH07XG4gIHZhciBpbm5lclRyYW5zbGF0ZSA9IFwidHJhbnNsYXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ueCAqIDMyLCBcIiwgXCIpLmNvbmNhdCh0cmFuc2Zvcm0ueSAqIDMyLCBcIikgXCIpO1xuICB2YXIgaW5uZXJTY2FsZSA9IFwic2NhbGUoXCIuY29uY2F0KHRyYW5zZm9ybS5zaXplIC8gMTYgKiAodHJhbnNmb3JtLmZsaXBYID8gLTEgOiAxKSwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0uZmxpcFkgPyAtMSA6IDEpLCBcIikgXCIpO1xuICB2YXIgaW5uZXJSb3RhdGUgPSBcInJvdGF0ZShcIi5jb25jYXQodHJhbnNmb3JtLnJvdGF0ZSwgXCIgMCAwKVwiKTtcbiAgdmFyIGlubmVyID0ge1xuICAgIHRyYW5zZm9ybTogXCJcIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsIFwiIFwiKS5jb25jYXQoaW5uZXJTY2FsZSwgXCIgXCIpLmNvbmNhdChpbm5lclJvdGF0ZSlcbiAgfTtcbiAgdmFyIHBhdGggPSB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCBcIiAtMjU2KVwiKVxuICB9O1xuICByZXR1cm4ge1xuICAgIG91dGVyOiBvdXRlcixcbiAgICBpbm5lcjogaW5uZXIsXG4gICAgcGF0aDogcGF0aFxuICB9O1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtRm9yQ3NzKF9yZWYyKSB7XG4gIHZhciB0cmFuc2Zvcm0gPSBfcmVmMi50cmFuc2Zvcm0sXG4gICAgICBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gVU5JVFNfSU5fR1JJRCA6IF9yZWYyJHdpZHRoLFxuICAgICAgX3JlZjIkaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0LFxuICAgICAgaGVpZ2h0ID0gX3JlZjIkaGVpZ2h0ID09PSB2b2lkIDAgPyBVTklUU19JTl9HUklEIDogX3JlZjIkaGVpZ2h0LFxuICAgICAgX3JlZjIkc3RhcnRDZW50ZXJlZCA9IF9yZWYyLnN0YXJ0Q2VudGVyZWQsXG4gICAgICBzdGFydENlbnRlcmVkID0gX3JlZjIkc3RhcnRDZW50ZXJlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRzdGFydENlbnRlcmVkO1xuICB2YXIgdmFsID0gJyc7XG5cbiAgaWYgKHN0YXJ0Q2VudGVyZWQgJiYgSVNfSUUpIHtcbiAgICB2YWwgKz0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54IC8gZCAtIHdpZHRoIC8gMiwgXCJlbSwgXCIpLmNvbmNhdCh0cmFuc2Zvcm0ueSAvIGQgLSBoZWlnaHQgLyAyLCBcImVtKSBcIik7XG4gIH0gZWxzZSBpZiAoc3RhcnRDZW50ZXJlZCkge1xuICAgIHZhbCArPSBcInRyYW5zbGF0ZShjYWxjKC01MCUgKyBcIi5jb25jYXQodHJhbnNmb3JtLnggLyBkLCBcImVtKSwgY2FsYygtNTAlICsgXCIpLmNvbmNhdCh0cmFuc2Zvcm0ueSAvIGQsIFwiZW0pKSBcIik7XG4gIH0gZWxzZSB7XG4gICAgdmFsICs9IFwidHJhbnNsYXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ueCAvIGQsIFwiZW0sIFwiKS5jb25jYXQodHJhbnNmb3JtLnkgLyBkLCBcImVtKSBcIik7XG4gIH1cblxuICB2YWwgKz0gXCJzY2FsZShcIi5jb25jYXQodHJhbnNmb3JtLnNpemUgLyBkICogKHRyYW5zZm9ybS5mbGlwWCA/IC0xIDogMSksIFwiLCBcIikuY29uY2F0KHRyYW5zZm9ybS5zaXplIC8gZCAqICh0cmFuc2Zvcm0uZmxpcFkgPyAtMSA6IDEpLCBcIikgXCIpO1xuICB2YWwgKz0gXCJyb3RhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS5yb3RhdGUsIFwiZGVnKSBcIik7XG4gIHJldHVybiB2YWw7XG59XG5cbnZhciBiYXNlU3R5bGVzID0gXCI6cm9vdCwgOmhvc3Qge1xcbiAgLS1mYS1mb250LXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBTb2xpZFxcXCI7XFxuICAtLWZhLWZvbnQtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgUmVndWxhclxcXCI7XFxuICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IExpZ2h0XFxcIjtcXG4gIC0tZmEtZm9udC10aGluOiBub3JtYWwgMTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBUaGluXFxcIjtcXG4gIC0tZmEtZm9udC1kdW90b25lOiBub3JtYWwgOTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBEdW90b25lXFxcIjtcXG4gIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgU2hhcnBcXFwiO1xcbiAgLS1mYS1mb250LXNoYXJwLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFNoYXJwXFxcIjtcXG4gIC0tZmEtZm9udC1zaGFycC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgU2hhcnBcXFwiO1xcbiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFNoYXJwXFxcIjtcXG4gIC0tZmEtZm9udC1icmFuZHM6IG5vcm1hbCA0MDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IEJyYW5kc1xcXCI7XFxufVxcblxcbnN2Zzpub3QoOnJvb3QpLnN2Zy1pbmxpbmUtLWZhLCBzdmc6bm90KDpob3N0KS5zdmctaW5saW5lLS1mYSB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbn1cXG5cXG4uc3ZnLWlubGluZS0tZmEge1xcbiAgZGlzcGxheTogdmFyKC0tZmEtZGlzcGxheSwgaW5saW5lLWJsb2NrKTtcXG4gIGhlaWdodDogMWVtO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS0yeHMge1xcbiAgdmVydGljYWwtYWxpZ246IDAuMWVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEteHMge1xcbiAgdmVydGljYWwtYWxpZ246IDBlbTtcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzA1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS1sZyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEteGwge1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS0yeGwge1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTtcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHtcXG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcXG4gIHRvcDogMC4yNWVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEtZncge1xcbiAgd2lkdGg6IHZhcigtLWZhLWZ3LXdpZHRoLCAxLjI1ZW0pO1xcbn1cXG5cXG4uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYSB7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxufVxcblxcbi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmZhLWxheWVycyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDFlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcXG4gIHdpZHRoOiAxZW07XFxufVxcbi5mYS1sYXllcnMgc3ZnLnN2Zy1pbmxpbmUtLWZhIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcXG59XFxuXFxuLmZhLWxheWVycy10ZXh0IHtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRvcDogNTAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XFxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5mYS1sYXllcnMtY291bnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1mYS1jb3VudGVyLWJhY2tncm91bmQtY29sb3IsICNmZjI1M2EpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtY291bnRlci1ib3JkZXItcmFkaXVzLCAxZW0pO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mYS1jb3VudGVyLWxpbmUtaGVpZ2h0LCAxKTtcXG4gIG1heC13aWR0aDogdmFyKC0tZmEtY291bnRlci1tYXgtd2lkdGgsIDVlbSk7XFxuICBtaW4td2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWluLXdpZHRoLCAxLjVlbSk7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcGFkZGluZzogdmFyKC0tZmEtY291bnRlci1wYWRkaW5nLCAwLjI1ZW0gMC41ZW0pO1xcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgdG9wOiB2YXIoLS1mYS10b3AsIDApO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1jb3VudGVyLXNjYWxlLCAwLjI1KSk7XFxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0O1xcbn1cXG5cXG4uZmEtbGF5ZXJzLWJvdHRvbS1yaWdodCB7XFxuICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7XFxuICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApO1xcbiAgdG9wOiBhdXRvO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7XFxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSByaWdodDtcXG59XFxuXFxuLmZhLWxheWVycy1ib3R0b20tbGVmdCB7XFxuICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7XFxuICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgdG9wOiBhdXRvO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDtcXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7XFxufVxcblxcbi5mYS1sYXllcnMtdG9wLXJpZ2h0IHtcXG4gIHRvcDogdmFyKC0tZmEtdG9wLCAwKTtcXG4gIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0O1xcbn1cXG5cXG4uZmEtbGF5ZXJzLXRvcC1sZWZ0IHtcXG4gIGxlZnQ6IHZhcigtLWZhLWxlZnQsIDApO1xcbiAgcmlnaHQ6IGF1dG87XFxuICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDtcXG59XFxuXFxuLmZhLTF4IHtcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbn1cXG5cXG4uZmEtMngge1xcbiAgZm9udC1zaXplOiAyZW07XFxufVxcblxcbi5mYS0zeCB7XFxuICBmb250LXNpemU6IDNlbTtcXG59XFxuXFxuLmZhLTR4IHtcXG4gIGZvbnQtc2l6ZTogNGVtO1xcbn1cXG5cXG4uZmEtNXgge1xcbiAgZm9udC1zaXplOiA1ZW07XFxufVxcblxcbi5mYS02eCB7XFxuICBmb250LXNpemU6IDZlbTtcXG59XFxuXFxuLmZhLTd4IHtcXG4gIGZvbnQtc2l6ZTogN2VtO1xcbn1cXG5cXG4uZmEtOHgge1xcbiAgZm9udC1zaXplOiA4ZW07XFxufVxcblxcbi5mYS05eCB7XFxuICBmb250LXNpemU6IDllbTtcXG59XFxuXFxuLmZhLTEweCB7XFxuICBmb250LXNpemU6IDEwZW07XFxufVxcblxcbi5mYS0yeHMge1xcbiAgZm9udC1zaXplOiAwLjYyNWVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuMWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjI1ZW07XFxufVxcblxcbi5mYS14cyB7XFxuICBmb250LXNpemU6IDAuNzVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjA4MzMzMzMzMzdlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAwLjEyNWVtO1xcbn1cXG5cXG4uZmEtc20ge1xcbiAgZm9udC1zaXplOiAwLjg3NWVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuMDcxNDI4NTcxOGVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMDUzNTcxNDI5NWVtO1xcbn1cXG5cXG4uZmEtbGcge1xcbiAgZm9udC1zaXplOiAxLjI1ZW07XFxuICBsaW5lLWhlaWdodDogMC4wNWVtO1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjA3NWVtO1xcbn1cXG5cXG4uZmEteGwge1xcbiAgZm9udC1zaXplOiAxLjVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjA0MTY2NjY2ODJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcXG59XFxuXFxuLmZhLTJ4bCB7XFxuICBmb250LXNpemU6IDJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjAzMTI1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTg3NWVtO1xcbn1cXG5cXG4uZmEtZncge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgd2lkdGg6IDEuMjVlbTtcXG59XFxuXFxuLmZhLXVsIHtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1mYS1saS1tYXJnaW4sIDIuNWVtKTtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuLmZhLXVsID4gbGkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uZmEtbGkge1xcbiAgbGVmdDogY2FsYyh2YXIoLS1mYS1saS13aWR0aCwgMmVtKSAqIC0xKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG5cXG4uZmEtYm9yZGVyIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmEtYm9yZGVyLWNvbG9yLCAjZWVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTtcXG4gIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWZhLWJvcmRlci13aWR0aCwgMC4wOGVtKTtcXG4gIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjJlbSAwLjI1ZW0gMC4xNWVtKTtcXG59XFxuXFxuLmZhLXB1bGwtbGVmdCB7XFxuICBmbG9hdDogbGVmdDtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTtcXG59XFxuXFxuLmZhLXB1bGwtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxufVxcblxcbi5mYS1iZWF0IHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQ7XFxuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0O1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpO1xcbiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7XFxufVxcblxcbi5mYS1ib3VuY2Uge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtYm91bmNlO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtYm91bmNlO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuMjgsIDAuODQsIDAuNDIsIDEpKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuMjgsIDAuODQsIDAuNDIsIDEpKTtcXG59XFxuXFxuLmZhLWZhZGUge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtZmFkZTtcXG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhLWZhZGU7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7XFxufVxcblxcbi5mYS1iZWF0LWZhZGUge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtYmVhdC1mYWRlO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtYmVhdC1mYWRlO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpO1xcbn1cXG5cXG4uZmEtZmxpcCB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1mbGlwO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtZmxpcDtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpO1xcbn1cXG5cXG4uZmEtc2hha2Uge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtc2hha2U7XFxuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XFxuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XFxufVxcblxcbi5mYS1zcGluIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47XFxuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMnMpO1xcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMnMpO1xcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTtcXG59XFxuXFxuLmZhLXNwaW4tcmV2ZXJzZSB7XFxuICAtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb246IHJldmVyc2U7XFxufVxcblxcbi5mYS1wdWxzZSxcXG4uZmEtc3Bpbi1wdWxzZSB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1zcGluO1xcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTtcXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgc3RlcHMoOCkpO1xcbn1cXG5cXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgLmZhLWJlYXQsXFxuLmZhLWJvdW5jZSxcXG4uZmEtZmFkZSxcXG4uZmEtYmVhdC1mYWRlLFxcbi5mYS1mbGlwLFxcbi5mYS1wdWxzZSxcXG4uZmEtc2hha2UsXFxuLmZhLXNwaW4sXFxuLmZhLXNwaW4tcHVsc2Uge1xcbiAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLTFtcztcXG4gICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0xbXM7XFxuICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAxbXM7XFxuICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxbXM7XFxuICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTtcXG4gICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xcbiAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IDBzO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xcbiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDBzO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDBzO1xcbiAgfVxcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmEtYmVhdCB7XFxuICAwJSwgOTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxuICA0NSUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhLWJlYXQge1xcbiAgMCUsIDkwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbiAgNDUlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLWJvdW5jZSB7XFxuICAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG4gIDEwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuICAzMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xKSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAtMC41ZW0pKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7XFxuICB9XFxuICA1MCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgNTclIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIC0wLjEyNWVtKSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpO1xcbiAgfVxcbiAgNjQlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1ib3VuY2Uge1xcbiAgMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuICAxMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgMzAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjkpLCB2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS15LCAxLjEpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIC0wLjVlbSkpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG4gIDU3JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgLTAuMTI1ZW0pKTtcXG4gIH1cXG4gIDY0JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmYS1mYWRlIHtcXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1mYWRlIHtcXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7XFxuICAwJSwgMTAwJSB7XFxuICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHtcXG4gIDAlLCAxMDAlIHtcXG4gICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbiAgNTAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTtcXG4gIH1cXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLWZsaXAge1xcbiAgNTAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0xODBkZWcpKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0xODBkZWcpKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1mbGlwIHtcXG4gIDUwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmYS1zaGFrZSB7XFxuICAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTE1ZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xcbiAgfVxcbiAgNCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7XFxuICB9XFxuICA4JSwgMjQlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMThkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xOGRlZyk7XFxuICB9XFxuICAxMiUsIDI4JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTtcXG4gIH1cXG4gIDE2JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpO1xcbiAgfVxcbiAgMjAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyMmRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjJkZWcpO1xcbiAgfVxcbiAgMzIlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTJkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XFxuICB9XFxuICAzNiUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7XFxuICB9XFxuICA0MCUsIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhLXNoYWtlIHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7XFxuICB9XFxuICA0JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTtcXG4gIH1cXG4gIDglLCAyNCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xOGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTtcXG4gIH1cXG4gIDEyJSwgMjglIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxOGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpO1xcbiAgfVxcbiAgMTYlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0yMmRlZyk7XFxuICB9XFxuICAyMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyMmRlZyk7XFxuICB9XFxuICAzMiUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyZGVnKTtcXG4gIH1cXG4gIDM2JSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTJkZWcpO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTtcXG4gIH1cXG4gIDQwJSwgMTAwJSB7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmYS1zcGluIHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1zcGluIHtcXG4gIDAlIHtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuLmZhLXJvdGF0ZS05MCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xcbn1cXG5cXG4uZmEtcm90YXRlLTE4MCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5mYS1yb3RhdGUtMjcwIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcXG59XFxuXFxuLmZhLWZsaXAtaG9yaXpvbnRhbCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTtcXG59XFxuXFxuLmZhLWZsaXAtdmVydGljYWwge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7XFxufVxcblxcbi5mYS1mbGlwLWJvdGgsXFxuLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgtMSwgLTEpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7XFxufVxcblxcbi5mYS1yb3RhdGUtYnkge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSh2YXIoLS1mYS1yb3RhdGUtYW5nbGUsIDApKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCAwKSk7XFxufVxcblxcbi5mYS1zdGFjayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgaGVpZ2h0OiAyZW07XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMi41ZW07XFxufVxcblxcbi5mYS1zdGFjay0xeCxcXG4uZmEtc3RhY2stMngge1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIG1hcmdpbjogYXV0bztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7XFxuICBoZWlnaHQ6IDFlbTtcXG4gIHdpZHRoOiAxLjI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7XFxuICBoZWlnaHQ6IDJlbTtcXG4gIHdpZHRoOiAyLjVlbTtcXG59XFxuXFxuLmZhLWludmVyc2Uge1xcbiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpO1xcbn1cXG5cXG4uc3Itb25seSxcXG4uZmEtc3Itb25seSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAtMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbn1cXG5cXG4uc3Itb25seS1mb2N1c2FibGU6bm90KDpmb2N1cyksXFxuLmZhLXNyLW9ubHktZm9jdXNhYmxlOm5vdCg6Zm9jdXMpIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IC0xcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBib3JkZXItd2lkdGg6IDA7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7XFxuICBmaWxsOiB2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpO1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTtcXG59XFxuXFxuLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkge1xcbiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpO1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXByaW1hcnkge1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7XFxuICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpO1xcbn1cXG5cXG4uc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSxcXG4uc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtc2Vjb25kYXJ5IHtcXG4gIGZpbGw6IGJsYWNrO1xcbn1cXG5cXG4uZmFkLmZhLWludmVyc2UsXFxuLmZhLWR1b3RvbmUuZmEtaW52ZXJzZSB7XFxuICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7XFxufVwiO1xuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIHZhciBkY3AgPSBERUZBVUxUX0NTU19QUkVGSVg7XG4gIHZhciBkcmMgPSBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTO1xuICB2YXIgZnAgPSBjb25maWcuY3NzUHJlZml4O1xuICB2YXIgcmMgPSBjb25maWcucmVwbGFjZW1lbnRDbGFzcztcbiAgdmFyIHMgPSBiYXNlU3R5bGVzO1xuXG4gIGlmIChmcCAhPT0gZGNwIHx8IHJjICE9PSBkcmMpIHtcbiAgICB2YXIgZFBhdHQgPSBuZXcgUmVnRXhwKFwiXFxcXC5cIi5jb25jYXQoZGNwLCBcIlxcXFwtXCIpLCAnZycpO1xuICAgIHZhciBjdXN0b21Qcm9wUGF0dCA9IG5ldyBSZWdFeHAoXCJcXFxcLS1cIi5jb25jYXQoZGNwLCBcIlxcXFwtXCIpLCAnZycpO1xuICAgIHZhciByUGF0dCA9IG5ldyBSZWdFeHAoXCJcXFxcLlwiLmNvbmNhdChkcmMpLCAnZycpO1xuICAgIHMgPSBzLnJlcGxhY2UoZFBhdHQsIFwiLlwiLmNvbmNhdChmcCwgXCItXCIpKS5yZXBsYWNlKGN1c3RvbVByb3BQYXR0LCBcIi0tXCIuY29uY2F0KGZwLCBcIi1cIikpLnJlcGxhY2UoclBhdHQsIFwiLlwiLmNvbmNhdChyYykpO1xuICB9XG5cbiAgcmV0dXJuIHM7XG59XG5cbnZhciBfY3NzSW5zZXJ0ZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW5zdXJlQ3NzKCkge1xuICBpZiAoY29uZmlnLmF1dG9BZGRDc3MgJiYgIV9jc3NJbnNlcnRlZCkge1xuICAgIGluc2VydENzcyhjc3MoKSk7XG4gICAgX2Nzc0luc2VydGVkID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgSW5qZWN0Q1NTID0ge1xuICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tOiB7XG4gICAgICAgIGNzczogY3NzLFxuICAgICAgICBpbnNlcnRDc3M6IGVuc3VyZUNzc1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIGhvb2tzOiBmdW5jdGlvbiBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uOiBmdW5jdGlvbiBiZWZvcmVET01FbGVtZW50Q3JlYXRpb24oKSB7XG4gICAgICAgIGVuc3VyZUNzcygpO1xuICAgICAgfSxcbiAgICAgIGJlZm9yZUkyc3ZnOiBmdW5jdGlvbiBiZWZvcmVJMnN2ZygpIHtcbiAgICAgICAgZW5zdXJlQ3NzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIHcgPSBXSU5ET1cgfHwge307XG5pZiAoIXdbTkFNRVNQQUNFX0lERU5USUZJRVJdKSB3W05BTUVTUEFDRV9JREVOVElGSUVSXSA9IHt9O1xuaWYgKCF3W05BTUVTUEFDRV9JREVOVElGSUVSXS5zdHlsZXMpIHdbTkFNRVNQQUNFX0lERU5USUZJRVJdLnN0eWxlcyA9IHt9O1xuaWYgKCF3W05BTUVTUEFDRV9JREVOVElGSUVSXS5ob29rcykgd1tOQU1FU1BBQ0VfSURFTlRJRklFUl0uaG9va3MgPSB7fTtcbmlmICghd1tOQU1FU1BBQ0VfSURFTlRJRklFUl0uc2hpbXMpIHdbTkFNRVNQQUNFX0lERU5USUZJRVJdLnNoaW1zID0gW107XG52YXIgbmFtZXNwYWNlID0gd1tOQU1FU1BBQ0VfSURFTlRJRklFUl07XG5cbnZhciBmdW5jdGlvbnMgPSBbXTtcblxudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gIERPQ1VNRU5ULnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBsaXN0ZW5lcik7XG4gIGxvYWRlZCA9IDE7XG4gIGZ1bmN0aW9ucy5tYXAoZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0pO1xufTtcblxudmFyIGxvYWRlZCA9IGZhbHNlO1xuXG5pZiAoSVNfRE9NKSB7XG4gIGxvYWRlZCA9IChET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoRE9DVU1FTlQucmVhZHlTdGF0ZSk7XG4gIGlmICghbG9hZGVkKSBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgbGlzdGVuZXIpO1xufVxuXG5mdW5jdGlvbiBkb21yZWFkeSAoZm4pIHtcbiAgaWYgKCFJU19ET00pIHJldHVybjtcbiAgbG9hZGVkID8gc2V0VGltZW91dChmbiwgMCkgOiBmdW5jdGlvbnMucHVzaChmbik7XG59XG5cbmZ1bmN0aW9uIHRvSHRtbChhYnN0cmFjdE5vZGVzKSB7XG4gIHZhciB0YWcgPSBhYnN0cmFjdE5vZGVzLnRhZyxcbiAgICAgIF9hYnN0cmFjdE5vZGVzJGF0dHJpYiA9IGFic3RyYWN0Tm9kZXMuYXR0cmlidXRlcyxcbiAgICAgIGF0dHJpYnV0ZXMgPSBfYWJzdHJhY3ROb2RlcyRhdHRyaWIgPT09IHZvaWQgMCA/IHt9IDogX2Fic3RyYWN0Tm9kZXMkYXR0cmliLFxuICAgICAgX2Fic3RyYWN0Tm9kZXMkY2hpbGRyID0gYWJzdHJhY3ROb2Rlcy5jaGlsZHJlbixcbiAgICAgIGNoaWxkcmVuID0gX2Fic3RyYWN0Tm9kZXMkY2hpbGRyID09PSB2b2lkIDAgPyBbXSA6IF9hYnN0cmFjdE5vZGVzJGNoaWxkcjtcblxuICBpZiAodHlwZW9mIGFic3RyYWN0Tm9kZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGh0bWxFc2NhcGUoYWJzdHJhY3ROb2Rlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiPFwiLmNvbmNhdCh0YWcsIFwiIFwiKS5jb25jYXQoam9pbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyksIFwiPlwiKS5jb25jYXQoY2hpbGRyZW4ubWFwKHRvSHRtbCkuam9pbignJyksIFwiPC9cIikuY29uY2F0KHRhZywgXCI+XCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGljb25Gcm9tTWFwcGluZyhtYXBwaW5nLCBwcmVmaXgsIGljb25OYW1lKSB7XG4gIGlmIChtYXBwaW5nICYmIG1hcHBpbmdbcHJlZml4XSAmJiBtYXBwaW5nW3ByZWZpeF1baWNvbk5hbWVdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgaWNvbk5hbWU6IGljb25OYW1lLFxuICAgICAgaWNvbjogbWFwcGluZ1twcmVmaXhdW2ljb25OYW1lXVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgdG8gYmluZCBhIGZ1bmN0aW9uIGtub3duIHRvIGhhdmUgNCBhcmd1bWVudHNcbiAqIHRvIGEgZ2l2ZW4gY29udGV4dC5cbiAqL1xuXG52YXIgYmluZEludGVybmFsNCA9IGZ1bmN0aW9uIGJpbmRJbnRlcm5hbDQoZnVuYywgdGhpc0NvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQ29udGV4dCwgYSwgYiwgYywgZCk7XG4gIH07XG59O1xuXG4vKipcbiAqICMgUmVkdWNlXG4gKlxuICogQSBmYXN0IG9iamVjdCBgLnJlZHVjZSgpYCBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgc3ViamVjdCAgICAgIFRoZSBvYmplY3QgdG8gcmVkdWNlIG92ZXIuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gICAgICAgICAgIFRoZSByZWR1Y2VyIGZ1bmN0aW9uLlxuICogQHBhcmFtICB7bWl4ZWR9ICAgIGluaXRpYWxWYWx1ZSBUaGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHJlZHVjZXIsIGRlZmF1bHRzIHRvIHN1YmplY3RbMF0uXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgdGhpc0NvbnRleHQgIFRoZSBjb250ZXh0IGZvciB0aGUgcmVkdWNlci5cbiAqIEByZXR1cm4ge21peGVkfSAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHJlc3VsdC5cbiAqL1xuXG5cbnZhciByZWR1Y2UgPSBmdW5jdGlvbiBmYXN0UmVkdWNlT2JqZWN0KHN1YmplY3QsIGZuLCBpbml0aWFsVmFsdWUsIHRoaXNDb250ZXh0KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3ViamVjdCksXG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aCxcbiAgICAgIGl0ZXJhdG9yID0gdGhpc0NvbnRleHQgIT09IHVuZGVmaW5lZCA/IGJpbmRJbnRlcm5hbDQoZm4sIHRoaXNDb250ZXh0KSA6IGZuLFxuICAgICAgaSxcbiAgICAgIGtleSxcbiAgICAgIHJlc3VsdDtcblxuICBpZiAoaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICBpID0gMTtcbiAgICByZXN1bHQgPSBzdWJqZWN0W2tleXNbMF1dO1xuICB9IGVsc2Uge1xuICAgIGkgPSAwO1xuICAgIHJlc3VsdCA9IGluaXRpYWxWYWx1ZTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgc3ViamVjdFtrZXldLCBrZXksIHN1YmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogdWNzMmRlY29kZSgpIGFuZCBjb2RlUG9pbnRBdCgpIGFyZSBib3RoIHdvcmtzIG9mIE1hdGhpYXMgQnluZW5zIGFuZCBsaWNlbnNlZCB1bmRlciBNSVRcbiAqXG4gKiBDb3B5cmlnaHQgTWF0aGlhcyBCeW5lbnMgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS8+XG5cbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4gKiBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbiAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xuICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG4gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkVcbiAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT05cbiAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKi9cbmZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgdmFyIGNvdW50ZXIgPSAwO1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXG4gICAgICBpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICAgICAgb3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gdG9IZXgodW5pY29kZSkge1xuICB2YXIgZGVjb2RlZCA9IHVjczJkZWNvZGUodW5pY29kZSk7XG4gIHJldHVybiBkZWNvZGVkLmxlbmd0aCA9PT0gMSA/IGRlY29kZWRbMF0udG9TdHJpbmcoMTYpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGNvZGVQb2ludEF0KHN0cmluZywgaW5kZXgpIHtcbiAgdmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuICB2YXIgZmlyc3QgPSBzdHJpbmcuY2hhckNvZGVBdChpbmRleCk7XG4gIHZhciBzZWNvbmQ7XG5cbiAgaWYgKGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgc2l6ZSA+IGluZGV4ICsgMSkge1xuICAgIHNlY29uZCA9IHN0cmluZy5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG5cbiAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7XG4gICAgICByZXR1cm4gKGZpcnN0IC0gMHhEODAwKSAqIDB4NDAwICsgc2Vjb25kIC0gMHhEQzAwICsgMHgxMDAwMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlyc3Q7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUljb25zKGljb25zKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhpY29ucykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGljb25OYW1lKSB7XG4gICAgdmFyIGljb24gPSBpY29uc1tpY29uTmFtZV07XG4gICAgdmFyIGV4cGFuZGVkID0gISFpY29uLmljb247XG5cbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIGFjY1tpY29uLmljb25OYW1lXSA9IGljb24uaWNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2ljb25OYW1lXSA9IGljb247XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVJY29ucyhwcmVmaXgsIGljb25zKSB7XG4gIHZhciBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICB2YXIgX3BhcmFtcyRza2lwSG9va3MgPSBwYXJhbXMuc2tpcEhvb2tzLFxuICAgICAgc2tpcEhvb2tzID0gX3BhcmFtcyRza2lwSG9va3MgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwSG9va3M7XG4gIHZhciBub3JtYWxpemVkID0gbm9ybWFsaXplSWNvbnMoaWNvbnMpO1xuXG4gIGlmICh0eXBlb2YgbmFtZXNwYWNlLmhvb2tzLmFkZFBhY2sgPT09ICdmdW5jdGlvbicgJiYgIXNraXBIb29rcykge1xuICAgIG5hbWVzcGFjZS5ob29rcy5hZGRQYWNrKHByZWZpeCwgbm9ybWFsaXplSWNvbnMoaWNvbnMpKTtcbiAgfSBlbHNlIHtcbiAgICBuYW1lc3BhY2Uuc3R5bGVzW3ByZWZpeF0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbmFtZXNwYWNlLnN0eWxlc1twcmVmaXhdIHx8IHt9KSwgbm9ybWFsaXplZCk7XG4gIH1cbiAgLyoqXG4gICAqIEZvbnQgQXdlc29tZSA0IHVzZWQgdGhlIHByZWZpeCBvZiBgZmFgIGZvciBhbGwgaWNvbnMuIFdpdGggdGhlIGludHJvZHVjdGlvblxuICAgKiBvZiBuZXcgc3R5bGVzIHdlIG5lZWRlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlbS4gUHJlZml4IGBmYWAgaXMgbm93IGFuIGFsaWFzXG4gICAqIGZvciBgZmFzYCBzbyB3ZSdsbCBlYXNlIHRoZSB1cGdyYWRlIHByb2Nlc3MgZm9yIG91ciB1c2VycyBieSBhdXRvbWF0aWNhbGx5IGRlZmluaW5nXG4gICAqIHRoaXMgYXMgd2VsbC5cbiAgICovXG5cblxuICBpZiAocHJlZml4ID09PSAnZmFzJykge1xuICAgIGRlZmluZUljb25zKCdmYScsIGljb25zKTtcbiAgfVxufVxuXG52YXIgZHVvdG9uZVBhdGhSZSA9IFsvKiNfX1BVUkVfXyovX3dyYXBSZWdFeHAoL3BhdGggZD1cIigoPzooPyFcIilbXFxzXFxTXSkrKVwiLipwYXRoIGQ9XCIoKD86KD8hXCIpW1xcc1xcU10pKylcIi8sIHtcbiAgZDE6IDEsXG4gIGQyOiAyXG59KSwgLyojX19QVVJFX18qL193cmFwUmVnRXhwKC9wYXRoIGNsYXNzPVwiKCg/Oig/IVwiKVtcXHNcXFNdKSspXCIuKmQ9XCIoKD86KD8hXCIpW1xcc1xcU10pKylcIi4qcGF0aCBjbGFzcz1cIigoPzooPyFcIilbXFxzXFxTXSkrKVwiLipkPVwiKCg/Oig/IVwiKVtcXHNcXFNdKSspXCIvLCB7XG4gIGNsczE6IDEsXG4gIGQxOiAyLFxuICBjbHMyOiAzLFxuICBkMjogNFxufSksIC8qI19fUFVSRV9fKi9fd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz1cIigoPzooPyFcIilbXFxzXFxTXSkrKVwiLipkPVwiKCg/Oig/IVwiKVtcXHNcXFNdKSspXCIvLCB7XG4gIGNsczE6IDEsXG4gIGQxOiAyXG59KV07XG5cbnZhciBfTE9OR19TVFlMRSwgX1BSRUZJWEVTLCBfUFJFRklYRVNfRk9SX0ZBTUlMWTtcbnZhciBzdHlsZXMgPSBuYW1lc3BhY2Uuc3R5bGVzLFxuICAgIHNoaW1zID0gbmFtZXNwYWNlLnNoaW1zO1xudmFyIExPTkdfU1RZTEUgPSAoX0xPTkdfU1RZTEUgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9MT05HX1NUWUxFLCBGQU1JTFlfQ0xBU1NJQywgT2JqZWN0LnZhbHVlcyhQUkVGSVhfVE9fTE9OR19TVFlMRVtGQU1JTFlfQ0xBU1NJQ10pKSwgX2RlZmluZVByb3BlcnR5KF9MT05HX1NUWUxFLCBGQU1JTFlfU0hBUlAsIE9iamVjdC52YWx1ZXMoUFJFRklYX1RPX0xPTkdfU1RZTEVbRkFNSUxZX1NIQVJQXSkpLCBfTE9OR19TVFlMRSk7XG52YXIgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBudWxsO1xudmFyIF9ieVVuaWNvZGUgPSB7fTtcbnZhciBfYnlMaWdhdHVyZSA9IHt9O1xudmFyIF9ieU9sZE5hbWUgPSB7fTtcbnZhciBfYnlPbGRVbmljb2RlID0ge307XG52YXIgX2J5QWxpYXMgPSB7fTtcbnZhciBQUkVGSVhFUyA9IChfUFJFRklYRVMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9QUkVGSVhFUywgRkFNSUxZX0NMQVNTSUMsIE9iamVjdC5rZXlzKFBSRUZJWF9UT19TVFlMRVtGQU1JTFlfQ0xBU1NJQ10pKSwgX2RlZmluZVByb3BlcnR5KF9QUkVGSVhFUywgRkFNSUxZX1NIQVJQLCBPYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbRkFNSUxZX1NIQVJQXSkpLCBfUFJFRklYRVMpO1xuXG5mdW5jdGlvbiBpc1Jlc2VydmVkKG5hbWUpIHtcbiAgcmV0dXJuIH5SRVNFUlZFRF9DTEFTU0VTLmluZGV4T2YobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldEljb25OYW1lKGNzc1ByZWZpeCwgY2xzKSB7XG4gIHZhciBwYXJ0cyA9IGNscy5zcGxpdCgnLScpO1xuICB2YXIgcHJlZml4ID0gcGFydHNbMF07XG4gIHZhciBpY29uTmFtZSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oJy0nKTtcblxuICBpZiAocHJlZml4ID09PSBjc3NQcmVmaXggJiYgaWNvbk5hbWUgIT09ICcnICYmICFpc1Jlc2VydmVkKGljb25OYW1lKSkge1xuICAgIHJldHVybiBpY29uTmFtZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxudmFyIGJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoKSB7XG4gIHZhciBsb29rdXAgPSBmdW5jdGlvbiBsb29rdXAocmVkdWNlcikge1xuICAgIHJldHVybiByZWR1Y2Uoc3R5bGVzLCBmdW5jdGlvbiAobywgc3R5bGUsIHByZWZpeCkge1xuICAgICAgb1twcmVmaXhdID0gcmVkdWNlKHN0eWxlLCByZWR1Y2VyLCB7fSk7XG4gICAgICByZXR1cm4gbztcbiAgICB9LCB7fSk7XG4gIH07XG5cbiAgX2J5VW5pY29kZSA9IGxvb2t1cChmdW5jdGlvbiAoYWNjLCBpY29uLCBpY29uTmFtZSkge1xuICAgIGlmIChpY29uWzNdKSB7XG4gICAgICBhY2NbaWNvblszXV0gPSBpY29uTmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaWNvblsyXSkge1xuICAgICAgdmFyIGFsaWFzZXMgPSBpY29uWzJdLmZpbHRlcihmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInO1xuICAgICAgfSk7XG4gICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgIGFjY1thbGlhcy50b1N0cmluZygxNildID0gaWNvbk5hbWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9KTtcbiAgX2J5TGlnYXR1cmUgPSBsb29rdXAoZnVuY3Rpb24gKGFjYywgaWNvbiwgaWNvbk5hbWUpIHtcbiAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7XG5cbiAgICBpZiAoaWNvblsyXSkge1xuICAgICAgdmFyIGFsaWFzZXMgPSBpY29uWzJdLmZpbHRlcihmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdzdHJpbmcnO1xuICAgICAgfSk7XG4gICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgIGFjY1thbGlhc10gPSBpY29uTmFtZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0pO1xuICBfYnlBbGlhcyA9IGxvb2t1cChmdW5jdGlvbiAoYWNjLCBpY29uLCBpY29uTmFtZSkge1xuICAgIHZhciBhbGlhc2VzID0gaWNvblsyXTtcbiAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7XG4gICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgYWNjW2FsaWFzXSA9IGljb25OYW1lO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0pOyAvLyBJZiB3ZSBoYXZlIGEgS2l0LCB3ZSBjYW4ndCBkZXRlcm1pbmUgaWYgcmVndWxhciBpcyBhdmFpbGFibGUgc2luY2Ugd2VcbiAgLy8gY291bGQgYmUgYXV0by1mZXRjaGluZyBpdC4gV2UnbGwgaGF2ZSB0byBhc3N1bWUgdGhhdCBpdCBpcyBhdmFpbGFibGUuXG5cbiAgdmFyIGhhc1JlZ3VsYXIgPSAnZmFyJyBpbiBzdHlsZXMgfHwgY29uZmlnLmF1dG9GZXRjaFN2ZztcbiAgdmFyIHNoaW1Mb29rdXBzID0gcmVkdWNlKHNoaW1zLCBmdW5jdGlvbiAoYWNjLCBzaGltKSB7XG4gICAgdmFyIG1heWJlTmFtZU1heWJlVW5pY29kZSA9IHNoaW1bMF07XG4gICAgdmFyIHByZWZpeCA9IHNoaW1bMV07XG4gICAgdmFyIGljb25OYW1lID0gc2hpbVsyXTtcblxuICAgIGlmIChwcmVmaXggPT09ICdmYXInICYmICFoYXNSZWd1bGFyKSB7XG4gICAgICBwcmVmaXggPSAnZmFzJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1heWJlTmFtZU1heWJlVW5pY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFjYy5uYW1lc1ttYXliZU5hbWVNYXliZVVuaWNvZGVdID0ge1xuICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgaWNvbk5hbWU6IGljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWF5YmVOYW1lTWF5YmVVbmljb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgYWNjLnVuaWNvZGVzW21heWJlTmFtZU1heWJlVW5pY29kZS50b1N0cmluZygxNildID0ge1xuICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgaWNvbk5hbWU6IGljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHtcbiAgICBuYW1lczoge30sXG4gICAgdW5pY29kZXM6IHt9XG4gIH0pO1xuICBfYnlPbGROYW1lID0gc2hpbUxvb2t1cHMubmFtZXM7XG4gIF9ieU9sZFVuaWNvZGUgPSBzaGltTG9va3Vwcy51bmljb2RlcztcbiAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoY29uZmlnLnN0eWxlRGVmYXVsdCwge1xuICAgIGZhbWlseTogY29uZmlnLmZhbWlseURlZmF1bHRcbiAgfSk7XG59O1xub25DaGFuZ2UoZnVuY3Rpb24gKGMpIHtcbiAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoYy5zdHlsZURlZmF1bHQsIHtcbiAgICBmYW1pbHk6IGNvbmZpZy5mYW1pbHlEZWZhdWx0XG4gIH0pO1xufSk7XG5idWlsZCgpO1xuZnVuY3Rpb24gYnlVbmljb2RlKHByZWZpeCwgdW5pY29kZSkge1xuICByZXR1cm4gKF9ieVVuaWNvZGVbcHJlZml4XSB8fCB7fSlbdW5pY29kZV07XG59XG5mdW5jdGlvbiBieUxpZ2F0dXJlKHByZWZpeCwgbGlnYXR1cmUpIHtcbiAgcmV0dXJuIChfYnlMaWdhdHVyZVtwcmVmaXhdIHx8IHt9KVtsaWdhdHVyZV07XG59XG5mdW5jdGlvbiBieUFsaWFzKHByZWZpeCwgYWxpYXMpIHtcbiAgcmV0dXJuIChfYnlBbGlhc1twcmVmaXhdIHx8IHt9KVthbGlhc107XG59XG5mdW5jdGlvbiBieU9sZE5hbWUobmFtZSkge1xuICByZXR1cm4gX2J5T2xkTmFtZVtuYW1lXSB8fCB7XG4gICAgcHJlZml4OiBudWxsLFxuICAgIGljb25OYW1lOiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiBieU9sZFVuaWNvZGUodW5pY29kZSkge1xuICB2YXIgb2xkVW5pY29kZSA9IF9ieU9sZFVuaWNvZGVbdW5pY29kZV07XG4gIHZhciBuZXdVbmljb2RlID0gYnlVbmljb2RlKCdmYXMnLCB1bmljb2RlKTtcbiAgcmV0dXJuIG9sZFVuaWNvZGUgfHwgKG5ld1VuaWNvZGUgPyB7XG4gICAgcHJlZml4OiAnZmFzJyxcbiAgICBpY29uTmFtZTogbmV3VW5pY29kZVxuICB9IDogbnVsbCkgfHwge1xuICAgIHByZWZpeDogbnVsbCxcbiAgICBpY29uTmFtZTogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpIHtcbiAgcmV0dXJuIF9kZWZhdWx0VXNhYmxlUHJlZml4O1xufVxudmFyIGVtcHR5Q2Fub25pY2FsSWNvbiA9IGZ1bmN0aW9uIGVtcHR5Q2Fub25pY2FsSWNvbigpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmVmaXg6IG51bGwsXG4gICAgaWNvbk5hbWU6IG51bGwsXG4gICAgcmVzdDogW11cbiAgfTtcbn07XG5mdW5jdGlvbiBnZXRDYW5vbmljYWxQcmVmaXgoc3R5bGVPclByZWZpeCkge1xuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIF9wYXJhbXMkZmFtaWx5ID0gcGFyYW1zLmZhbWlseSxcbiAgICAgIGZhbWlseSA9IF9wYXJhbXMkZmFtaWx5ID09PSB2b2lkIDAgPyBGQU1JTFlfQ0xBU1NJQyA6IF9wYXJhbXMkZmFtaWx5O1xuICB2YXIgc3R5bGUgPSBQUkVGSVhfVE9fU1RZTEVbZmFtaWx5XVtzdHlsZU9yUHJlZml4XTtcbiAgdmFyIHByZWZpeCA9IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlT3JQcmVmaXhdIHx8IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlXTtcbiAgdmFyIGRlZmluZWQgPSBzdHlsZU9yUHJlZml4IGluIG5hbWVzcGFjZS5zdHlsZXMgPyBzdHlsZU9yUHJlZml4IDogbnVsbDtcbiAgcmV0dXJuIHByZWZpeCB8fCBkZWZpbmVkIHx8IG51bGw7XG59XG52YXIgUFJFRklYRVNfRk9SX0ZBTUlMWSA9IChfUFJFRklYRVNfRk9SX0ZBTUlMWSA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX1BSRUZJWEVTX0ZPUl9GQU1JTFksIEZBTUlMWV9DTEFTU0lDLCBPYmplY3Qua2V5cyhQUkVGSVhfVE9fTE9OR19TVFlMRVtGQU1JTFlfQ0xBU1NJQ10pKSwgX2RlZmluZVByb3BlcnR5KF9QUkVGSVhFU19GT1JfRkFNSUxZLCBGQU1JTFlfU0hBUlAsIE9iamVjdC5rZXlzKFBSRUZJWF9UT19MT05HX1NUWUxFW0ZBTUlMWV9TSEFSUF0pKSwgX1BSRUZJWEVTX0ZPUl9GQU1JTFkpO1xuZnVuY3Rpb24gZ2V0Q2Fub25pY2FsSWNvbih2YWx1ZXMpIHtcbiAgdmFyIF9mYW1Qcm9wcztcblxuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIF9wYXJhbXMkc2tpcExvb2t1cHMgPSBwYXJhbXMuc2tpcExvb2t1cHMsXG4gICAgICBza2lwTG9va3VwcyA9IF9wYXJhbXMkc2tpcExvb2t1cHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwTG9va3VwcztcbiAgdmFyIGZhbVByb3BzID0gKF9mYW1Qcm9wcyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2ZhbVByb3BzLCBGQU1JTFlfQ0xBU1NJQywgXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChGQU1JTFlfQ0xBU1NJQykpLCBfZGVmaW5lUHJvcGVydHkoX2ZhbVByb3BzLCBGQU1JTFlfU0hBUlAsIFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLVwiKS5jb25jYXQoRkFNSUxZX1NIQVJQKSksIF9mYW1Qcm9wcyk7XG4gIHZhciBnaXZlblByZWZpeCA9IG51bGw7XG4gIHZhciBmYW1pbHkgPSBGQU1JTFlfQ0xBU1NJQztcblxuICBpZiAodmFsdWVzLmluY2x1ZGVzKGZhbVByb3BzW0ZBTUlMWV9DTEFTU0lDXSkgfHwgdmFsdWVzLnNvbWUoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gUFJFRklYRVNfRk9SX0ZBTUlMWVtGQU1JTFlfQ0xBU1NJQ10uaW5jbHVkZXModik7XG4gIH0pKSB7XG4gICAgZmFtaWx5ID0gRkFNSUxZX0NMQVNTSUM7XG4gIH1cblxuICBpZiAodmFsdWVzLmluY2x1ZGVzKGZhbVByb3BzW0ZBTUlMWV9TSEFSUF0pIHx8IHZhbHVlcy5zb21lKGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIFBSRUZJWEVTX0ZPUl9GQU1JTFlbRkFNSUxZX1NIQVJQXS5pbmNsdWRlcyh2KTtcbiAgfSkpIHtcbiAgICBmYW1pbHkgPSBGQU1JTFlfU0hBUlA7XG4gIH1cblxuICB2YXIgY2Fub25pY2FsID0gdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjbHMpIHtcbiAgICB2YXIgaWNvbk5hbWUgPSBnZXRJY29uTmFtZShjb25maWcuY3NzUHJlZml4LCBjbHMpO1xuXG4gICAgaWYgKHN0eWxlc1tjbHNdKSB7XG4gICAgICBjbHMgPSBMT05HX1NUWUxFW2ZhbWlseV0uaW5jbHVkZXMoY2xzKSA/IExPTkdfU1RZTEVfVE9fUFJFRklYW2ZhbWlseV1bY2xzXSA6IGNscztcbiAgICAgIGdpdmVuUHJlZml4ID0gY2xzO1xuICAgICAgYWNjLnByZWZpeCA9IGNscztcbiAgICB9IGVsc2UgaWYgKFBSRUZJWEVTW2ZhbWlseV0uaW5kZXhPZihjbHMpID4gLTEpIHtcbiAgICAgIGdpdmVuUHJlZml4ID0gY2xzO1xuICAgICAgYWNjLnByZWZpeCA9IGdldENhbm9uaWNhbFByZWZpeChjbHMsIHtcbiAgICAgICAgZmFtaWx5OiBmYW1pbHlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaWNvbk5hbWUpIHtcbiAgICAgIGFjYy5pY29uTmFtZSA9IGljb25OYW1lO1xuICAgIH0gZWxzZSBpZiAoY2xzICE9PSBjb25maWcucmVwbGFjZW1lbnRDbGFzcyAmJiBjbHMgIT09IGZhbVByb3BzW0ZBTUlMWV9DTEFTU0lDXSAmJiBjbHMgIT09IGZhbVByb3BzW0ZBTUlMWV9TSEFSUF0pIHtcbiAgICAgIGFjYy5yZXN0LnB1c2goY2xzKTtcbiAgICB9XG5cbiAgICBpZiAoIXNraXBMb29rdXBzICYmIGFjYy5wcmVmaXggJiYgYWNjLmljb25OYW1lKSB7XG4gICAgICB2YXIgc2hpbSA9IGdpdmVuUHJlZml4ID09PSAnZmEnID8gYnlPbGROYW1lKGFjYy5pY29uTmFtZSkgOiB7fTtcbiAgICAgIHZhciBhbGlhc0ljb25OYW1lID0gYnlBbGlhcyhhY2MucHJlZml4LCBhY2MuaWNvbk5hbWUpO1xuXG4gICAgICBpZiAoc2hpbS5wcmVmaXgpIHtcbiAgICAgICAgZ2l2ZW5QcmVmaXggPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBhY2MuaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGFsaWFzSWNvbk5hbWUgfHwgYWNjLmljb25OYW1lO1xuICAgICAgYWNjLnByZWZpeCA9IHNoaW0ucHJlZml4IHx8IGFjYy5wcmVmaXg7XG5cbiAgICAgIGlmIChhY2MucHJlZml4ID09PSAnZmFyJyAmJiAhc3R5bGVzWydmYXInXSAmJiBzdHlsZXNbJ2ZhcyddICYmICFjb25maWcuYXV0b0ZldGNoU3ZnKSB7XG4gICAgICAgIC8vIEFsbG93IGEgZmFsbGJhY2sgZnJvbSB0aGUgcmVndWxhciBzdHlsZSB0byBzb2xpZCBpZiByZWd1bGFyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgLy8gYnV0IG9ubHkgaWYgd2UgYXJlbid0IGF1dG8tZmV0Y2hpbmcgU1ZHc1xuICAgICAgICBhY2MucHJlZml4ID0gJ2Zhcyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgZW1wdHlDYW5vbmljYWxJY29uKCkpO1xuXG4gIGlmICh2YWx1ZXMuaW5jbHVkZXMoJ2ZhLWJyYW5kcycpIHx8IHZhbHVlcy5pbmNsdWRlcygnZmFiJykpIHtcbiAgICBjYW5vbmljYWwucHJlZml4ID0gJ2ZhYic7XG4gIH1cblxuICBpZiAodmFsdWVzLmluY2x1ZGVzKCdmYS1kdW90b25lJykgfHwgdmFsdWVzLmluY2x1ZGVzKCdmYWQnKSkge1xuICAgIGNhbm9uaWNhbC5wcmVmaXggPSAnZmFkJztcbiAgfVxuXG4gIGlmICghY2Fub25pY2FsLnByZWZpeCAmJiBmYW1pbHkgPT09IEZBTUlMWV9TSEFSUCAmJiAoc3R5bGVzWydmYXNzJ10gfHwgY29uZmlnLmF1dG9GZXRjaFN2ZykpIHtcbiAgICBjYW5vbmljYWwucHJlZml4ID0gJ2Zhc3MnO1xuICAgIGNhbm9uaWNhbC5pY29uTmFtZSA9IGJ5QWxpYXMoY2Fub25pY2FsLnByZWZpeCwgY2Fub25pY2FsLmljb25OYW1lKSB8fCBjYW5vbmljYWwuaWNvbk5hbWU7XG4gIH1cblxuICBpZiAoY2Fub25pY2FsLnByZWZpeCA9PT0gJ2ZhJyB8fCBnaXZlblByZWZpeCA9PT0gJ2ZhJykge1xuICAgIC8vIFRoZSBmYSBwcmVmaXggaXMgbm90IGNhbm9uaWNhbC4gU28gaWYgaXQgaGFzIG1hZGUgaXQgdGhyb3VnaCB1bnRpbCB0aGlzIHBvaW50XG4gICAgLy8gd2Ugd2lsbCBzaGlmdCBpdCB0byB0aGUgY29ycmVjdCBwcmVmaXguXG4gICAgY2Fub25pY2FsLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKSB8fCAnZmFzJztcbiAgfVxuXG4gIHJldHVybiBjYW5vbmljYWw7XG59XG5cbnZhciBMaWJyYXJ5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTGlicmFyeSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGlicmFyeSk7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zID0ge307XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGlicmFyeSwgW3tcbiAgICBrZXk6IFwiYWRkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBkZWZpbml0aW9ucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgZGVmaW5pdGlvbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHZhciBhZGRpdGlvbnMgPSBkZWZpbml0aW9ucy5yZWR1Y2UodGhpcy5fcHVsbERlZmluaXRpb25zLCB7fSk7XG4gICAgICBPYmplY3Qua2V5cyhhZGRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfdGhpcy5kZWZpbml0aW9uc1trZXldID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmRlZmluaXRpb25zW2tleV0gfHwge30pLCBhZGRpdGlvbnNba2V5XSk7XG4gICAgICAgIGRlZmluZUljb25zKGtleSwgYWRkaXRpb25zW2tleV0pOyAvLyBUT0RPIGNhbiB3ZSBzdG9wIGRvaW5nIHRoaXM/IFdlIGNhbid0IGdldCB0aGUgaWNvbnMgYnkgJ2ZhLXNvbGlkJyBhbnkgbG9uZ2VyIHNvIHRoaXMgcHJvYmFibHkgbmVlZHMgdG8gY2hhbmdlXG5cbiAgICAgICAgdmFyIGxvbmdQcmVmaXggPSBQUkVGSVhfVE9fTE9OR19TVFlMRVtGQU1JTFlfQ0xBU1NJQ11ba2V5XTtcbiAgICAgICAgaWYgKGxvbmdQcmVmaXgpIGRlZmluZUljb25zKGxvbmdQcmVmaXgsIGFkZGl0aW9uc1trZXldKTtcbiAgICAgICAgYnVpbGQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3B1bGxEZWZpbml0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcHVsbERlZmluaXRpb25zKGFkZGl0aW9ucywgZGVmaW5pdGlvbikge1xuICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBkZWZpbml0aW9uLnByZWZpeCAmJiBkZWZpbml0aW9uLmljb25OYW1lICYmIGRlZmluaXRpb24uaWNvbiA/IHtcbiAgICAgICAgMDogZGVmaW5pdGlvblxuICAgICAgfSA6IGRlZmluaXRpb247XG4gICAgICBPYmplY3Qua2V5cyhub3JtYWxpemVkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgX25vcm1hbGl6ZWQka2V5ID0gbm9ybWFsaXplZFtrZXldLFxuICAgICAgICAgICAgcHJlZml4ID0gX25vcm1hbGl6ZWQka2V5LnByZWZpeCxcbiAgICAgICAgICAgIGljb25OYW1lID0gX25vcm1hbGl6ZWQka2V5Lmljb25OYW1lLFxuICAgICAgICAgICAgaWNvbiA9IF9ub3JtYWxpemVkJGtleS5pY29uO1xuICAgICAgICB2YXIgYWxpYXNlcyA9IGljb25bMl07XG4gICAgICAgIGlmICghYWRkaXRpb25zW3ByZWZpeF0pIGFkZGl0aW9uc1twcmVmaXhdID0ge307XG5cbiAgICAgICAgaWYgKGFsaWFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGFkZGl0aW9uc1twcmVmaXhdW2FsaWFzXSA9IGljb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRpdGlvbnNbcHJlZml4XVtpY29uTmFtZV0gPSBpY29uO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWRkaXRpb25zO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMaWJyYXJ5O1xufSgpO1xuXG52YXIgX3BsdWdpbnMgPSBbXTtcbnZhciBfaG9va3MgPSB7fTtcbnZhciBwcm92aWRlcnMgPSB7fTtcbnZhciBkZWZhdWx0UHJvdmlkZXJLZXlzID0gT2JqZWN0LmtleXMocHJvdmlkZXJzKTtcbmZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2lucyhuZXh0UGx1Z2lucywgX3JlZikge1xuICB2YXIgb2JqID0gX3JlZi5taXhvdXRzVG87XG4gIF9wbHVnaW5zID0gbmV4dFBsdWdpbnM7XG4gIF9ob29rcyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm92aWRlcnMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICBpZiAoZGVmYXVsdFByb3ZpZGVyS2V5cy5pbmRleE9mKGspID09PSAtMSkge1xuICAgICAgZGVsZXRlIHByb3ZpZGVyc1trXTtcbiAgICB9XG4gIH0pO1xuXG4gIF9wbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIHZhciBtaXhvdXQgPSBwbHVnaW4ubWl4b3V0ID8gcGx1Z2luLm1peG91dCgpIDoge307XG4gICAgT2JqZWN0LmtleXMobWl4b3V0KS5mb3JFYWNoKGZ1bmN0aW9uICh0aykge1xuICAgICAgaWYgKHR5cGVvZiBtaXhvdXRbdGtdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9ialt0a10gPSBtaXhvdXRbdGtdO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3R5cGVvZihtaXhvdXRbdGtdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobWl4b3V0W3RrXSkuZm9yRWFjaChmdW5jdGlvbiAoc2spIHtcbiAgICAgICAgICBpZiAoIW9ialt0a10pIHtcbiAgICAgICAgICAgIG9ialt0a10gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYmpbdGtdW3NrXSA9IG1peG91dFt0a11bc2tdO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwbHVnaW4uaG9va3MpIHtcbiAgICAgIHZhciBob29rcyA9IHBsdWdpbi5ob29rcygpO1xuICAgICAgT2JqZWN0LmtleXMoaG9va3MpLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgaWYgKCFfaG9va3NbaG9va10pIHtcbiAgICAgICAgICBfaG9va3NbaG9va10gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9ob29rc1tob29rXS5wdXNoKGhvb2tzW2hvb2tdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwbHVnaW4ucHJvdmlkZXMpIHtcbiAgICAgIHBsdWdpbi5wcm92aWRlcyhwcm92aWRlcnMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGNoYWluSG9va3MoaG9vaywgYWNjdW11bGF0b3IpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107XG4gIGhvb2tGbnMuZm9yRWFjaChmdW5jdGlvbiAoaG9va0ZuKSB7XG4gICAgYWNjdW11bGF0b3IgPSBob29rRm4uYXBwbHkobnVsbCwgW2FjY3VtdWxhdG9yXS5jb25jYXQoYXJncykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICB9KTtcbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuZnVuY3Rpb24gY2FsbEhvb2tzKGhvb2spIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107XG4gIGhvb2tGbnMuZm9yRWFjaChmdW5jdGlvbiAoaG9va0ZuKSB7XG4gICAgaG9va0ZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNhbGxQcm92aWRlZCgpIHtcbiAgdmFyIGhvb2sgPSBhcmd1bWVudHNbMF07XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgcmV0dXJuIHByb3ZpZGVyc1tob29rXSA/IHByb3ZpZGVyc1tob29rXS5hcHBseShudWxsLCBhcmdzKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmluZEljb25EZWZpbml0aW9uKGljb25Mb29rdXApIHtcbiAgaWYgKGljb25Mb29rdXAucHJlZml4ID09PSAnZmEnKSB7XG4gICAgaWNvbkxvb2t1cC5wcmVmaXggPSAnZmFzJztcbiAgfVxuXG4gIHZhciBpY29uTmFtZSA9IGljb25Mb29rdXAuaWNvbk5hbWU7XG4gIHZhciBwcmVmaXggPSBpY29uTG9va3VwLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybjtcbiAgaWNvbk5hbWUgPSBieUFsaWFzKHByZWZpeCwgaWNvbk5hbWUpIHx8IGljb25OYW1lO1xuICByZXR1cm4gaWNvbkZyb21NYXBwaW5nKGxpYnJhcnkuZGVmaW5pdGlvbnMsIHByZWZpeCwgaWNvbk5hbWUpIHx8IGljb25Gcm9tTWFwcGluZyhuYW1lc3BhY2Uuc3R5bGVzLCBwcmVmaXgsIGljb25OYW1lKTtcbn1cbnZhciBsaWJyYXJ5ID0gbmV3IExpYnJhcnkoKTtcbnZhciBub0F1dG8gPSBmdW5jdGlvbiBub0F1dG8oKSB7XG4gIGNvbmZpZy5hdXRvUmVwbGFjZVN2ZyA9IGZhbHNlO1xuICBjb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IGZhbHNlO1xuICBjYWxsSG9va3MoJ25vQXV0bycpO1xufTtcbnZhciBkb20gPSB7XG4gIGkyc3ZnOiBmdW5jdGlvbiBpMnN2ZygpIHtcbiAgICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIGlmIChJU19ET00pIHtcbiAgICAgIGNhbGxIb29rcygnYmVmb3JlSTJzdmcnLCBwYXJhbXMpO1xuICAgICAgY2FsbFByb3ZpZGVkKCdwc2V1ZG9FbGVtZW50czJzdmcnLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIGNhbGxQcm92aWRlZCgnaTJzdmcnLCBwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ09wZXJhdGlvbiByZXF1aXJlcyBhIERPTSBvZiBzb21lIGtpbmQuJyk7XG4gICAgfVxuICB9LFxuICB3YXRjaDogZnVuY3Rpb24gd2F0Y2goKSB7XG4gICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGF1dG9SZXBsYWNlU3ZnUm9vdCA9IHBhcmFtcy5hdXRvUmVwbGFjZVN2Z1Jvb3Q7XG5cbiAgICBpZiAoY29uZmlnLmF1dG9SZXBsYWNlU3ZnID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnLmF1dG9SZXBsYWNlU3ZnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IHRydWU7XG4gICAgZG9tcmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICAgYXV0b1JlcGxhY2Uoe1xuICAgICAgICBhdXRvUmVwbGFjZVN2Z1Jvb3Q6IGF1dG9SZXBsYWNlU3ZnUm9vdFxuICAgICAgfSk7XG4gICAgICBjYWxsSG9va3MoJ3dhdGNoJywgcGFyYW1zKTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBwYXJzZSA9IHtcbiAgaWNvbjogZnVuY3Rpb24gaWNvbihfaWNvbikge1xuICAgIGlmIChfaWNvbiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKF90eXBlb2YoX2ljb24pID09PSAnb2JqZWN0JyAmJiBfaWNvbi5wcmVmaXggJiYgX2ljb24uaWNvbk5hbWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeDogX2ljb24ucHJlZml4LFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhfaWNvbi5wcmVmaXgsIF9pY29uLmljb25OYW1lKSB8fCBfaWNvbi5pY29uTmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShfaWNvbikgJiYgX2ljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgaWNvbk5hbWUgPSBfaWNvblsxXS5pbmRleE9mKCdmYS0nKSA9PT0gMCA/IF9pY29uWzFdLnNsaWNlKDMpIDogX2ljb25bMV07XG4gICAgICB2YXIgcHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KF9pY29uWzBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhwcmVmaXgsIGljb25OYW1lKSB8fCBpY29uTmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9pY29uID09PSAnc3RyaW5nJyAmJiAoX2ljb24uaW5kZXhPZihcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1cIikpID4gLTEgfHwgX2ljb24ubWF0Y2goSUNPTl9TRUxFQ1RJT05fU1lOVEFYX1BBVFRFUk4pKSkge1xuICAgICAgdmFyIGNhbm9uaWNhbEljb24gPSBnZXRDYW5vbmljYWxJY29uKF9pY29uLnNwbGl0KCcgJyksIHtcbiAgICAgICAgc2tpcExvb2t1cHM6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4OiBjYW5vbmljYWxJY29uLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCksXG4gICAgICAgIGljb25OYW1lOiBieUFsaWFzKGNhbm9uaWNhbEljb24ucHJlZml4LCBjYW5vbmljYWxJY29uLmljb25OYW1lKSB8fCBjYW5vbmljYWxJY29uLmljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgX2ljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgX3ByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4OiBfcHJlZml4LFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhfcHJlZml4LCBfaWNvbikgfHwgX2ljb25cbiAgICAgIH07XG4gICAgfVxuICB9XG59O1xudmFyIGFwaSA9IHtcbiAgbm9BdXRvOiBub0F1dG8sXG4gIGNvbmZpZzogY29uZmlnLFxuICBkb206IGRvbSxcbiAgcGFyc2U6IHBhcnNlLFxuICBsaWJyYXJ5OiBsaWJyYXJ5LFxuICBmaW5kSWNvbkRlZmluaXRpb246IGZpbmRJY29uRGVmaW5pdGlvbixcbiAgdG9IdG1sOiB0b0h0bWxcbn07XG5cbnZhciBhdXRvUmVwbGFjZSA9IGZ1bmN0aW9uIGF1dG9SZXBsYWNlKCkge1xuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIF9wYXJhbXMkYXV0b1JlcGxhY2VTdiA9IHBhcmFtcy5hdXRvUmVwbGFjZVN2Z1Jvb3QsXG4gICAgICBhdXRvUmVwbGFjZVN2Z1Jvb3QgPSBfcGFyYW1zJGF1dG9SZXBsYWNlU3YgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRhdXRvUmVwbGFjZVN2O1xuICBpZiAoKE9iamVjdC5rZXlzKG5hbWVzcGFjZS5zdHlsZXMpLmxlbmd0aCA+IDAgfHwgY29uZmlnLmF1dG9GZXRjaFN2ZykgJiYgSVNfRE9NICYmIGNvbmZpZy5hdXRvUmVwbGFjZVN2ZykgYXBpLmRvbS5pMnN2Zyh7XG4gICAgbm9kZTogYXV0b1JlcGxhY2VTdmdSb290XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZG9tVmFyaWFudHModmFsLCBhYnN0cmFjdENyZWF0b3IpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgJ2Fic3RyYWN0Jywge1xuICAgIGdldDogYWJzdHJhY3RDcmVhdG9yXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAnaHRtbCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB2YWwuYWJzdHJhY3QubWFwKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiB0b0h0bWwoYSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAnbm9kZScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIGlmICghSVNfRE9NKSByZXR1cm47XG4gICAgICB2YXIgY29udGFpbmVyID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdmFsLmh0bWw7XG4gICAgICByZXR1cm4gY29udGFpbmVyLmNoaWxkcmVuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGFzSWNvbiAoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgbWFpbiA9IF9yZWYubWFpbixcbiAgICAgIG1hc2sgPSBfcmVmLm1hc2ssXG4gICAgICBhdHRyaWJ1dGVzID0gX3JlZi5hdHRyaWJ1dGVzLFxuICAgICAgc3R5bGVzID0gX3JlZi5zdHlsZXMsXG4gICAgICB0cmFuc2Zvcm0gPSBfcmVmLnRyYW5zZm9ybTtcblxuICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybSkgJiYgbWFpbi5mb3VuZCAmJiAhbWFzay5mb3VuZCkge1xuICAgIHZhciB3aWR0aCA9IG1haW4ud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IG1haW4uaGVpZ2h0O1xuICAgIHZhciBvZmZzZXQgPSB7XG4gICAgICB4OiB3aWR0aCAvIGhlaWdodCAvIDIsXG4gICAgICB5OiAwLjVcbiAgICB9O1xuICAgIGF0dHJpYnV0ZXNbJ3N0eWxlJ10gPSBqb2luU3R5bGVzKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdHlsZXMpLCB7fSwge1xuICAgICAgJ3RyYW5zZm9ybS1vcmlnaW4nOiBcIlwiLmNvbmNhdChvZmZzZXQueCArIHRyYW5zZm9ybS54IC8gMTYsIFwiZW0gXCIpLmNvbmNhdChvZmZzZXQueSArIHRyYW5zZm9ybS55IC8gMTYsIFwiZW1cIilcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4gW3tcbiAgICB0YWc6ICdzdmcnLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH1dO1xufVxuXG5mdW5jdGlvbiBhc1N5bWJvbCAoX3JlZikge1xuICB2YXIgcHJlZml4ID0gX3JlZi5wcmVmaXgsXG4gICAgICBpY29uTmFtZSA9IF9yZWYuaWNvbk5hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBhdHRyaWJ1dGVzID0gX3JlZi5hdHRyaWJ1dGVzLFxuICAgICAgc3ltYm9sID0gX3JlZi5zeW1ib2w7XG4gIHZhciBpZCA9IHN5bWJvbCA9PT0gdHJ1ZSA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCItXCIpLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1cIikuY29uY2F0KGljb25OYW1lKSA6IHN5bWJvbDtcbiAgcmV0dXJuIFt7XG4gICAgdGFnOiAnc3ZnJyxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBzdHlsZTogJ2Rpc3BsYXk6IG5vbmU7J1xuICAgIH0sXG4gICAgY2hpbGRyZW46IFt7XG4gICAgICB0YWc6ICdzeW1ib2wnLFxuICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGF0dHJpYnV0ZXMpLCB7fSwge1xuICAgICAgICBpZDogaWRcbiAgICAgIH0pLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfV1cbiAgfV07XG59XG5cbmZ1bmN0aW9uIG1ha2VJbmxpbmVTdmdBYnN0cmFjdChwYXJhbXMpIHtcbiAgdmFyIF9wYXJhbXMkaWNvbnMgPSBwYXJhbXMuaWNvbnMsXG4gICAgICBtYWluID0gX3BhcmFtcyRpY29ucy5tYWluLFxuICAgICAgbWFzayA9IF9wYXJhbXMkaWNvbnMubWFzayxcbiAgICAgIHByZWZpeCA9IHBhcmFtcy5wcmVmaXgsXG4gICAgICBpY29uTmFtZSA9IHBhcmFtcy5pY29uTmFtZSxcbiAgICAgIHRyYW5zZm9ybSA9IHBhcmFtcy50cmFuc2Zvcm0sXG4gICAgICBzeW1ib2wgPSBwYXJhbXMuc3ltYm9sLFxuICAgICAgdGl0bGUgPSBwYXJhbXMudGl0bGUsXG4gICAgICBtYXNrSWQgPSBwYXJhbXMubWFza0lkLFxuICAgICAgdGl0bGVJZCA9IHBhcmFtcy50aXRsZUlkLFxuICAgICAgZXh0cmEgPSBwYXJhbXMuZXh0cmEsXG4gICAgICBfcGFyYW1zJHdhdGNoYWJsZSA9IHBhcmFtcy53YXRjaGFibGUsXG4gICAgICB3YXRjaGFibGUgPSBfcGFyYW1zJHdhdGNoYWJsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHdhdGNoYWJsZTtcblxuICB2YXIgX3JlZiA9IG1hc2suZm91bmQgPyBtYXNrIDogbWFpbixcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9yZWYuaGVpZ2h0O1xuXG4gIHZhciBpc1VwbG9hZGVkSWNvbiA9IHByZWZpeCA9PT0gJ2Zhayc7XG4gIHZhciBhdHRyQ2xhc3MgPSBbY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIGljb25OYW1lID8gXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChpY29uTmFtZSkgOiAnJ10uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGV4dHJhLmNsYXNzZXMuaW5kZXhPZihjKSA9PT0gLTE7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjICE9PSAnJyB8fCAhIWM7XG4gIH0pLmNvbmNhdChleHRyYS5jbGFzc2VzKS5qb2luKCcgJyk7XG4gIHZhciBjb250ZW50ID0ge1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuYXR0cmlidXRlcyksIHt9LCB7XG4gICAgICAnZGF0YS1wcmVmaXgnOiBwcmVmaXgsXG4gICAgICAnZGF0YS1pY29uJzogaWNvbk5hbWUsXG4gICAgICAnY2xhc3MnOiBhdHRyQ2xhc3MsXG4gICAgICAncm9sZSc6IGV4dHJhLmF0dHJpYnV0ZXMucm9sZSB8fCAnaW1nJyxcbiAgICAgICd4bWxucyc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gICAgICAndmlld0JveCc6IFwiMCAwIFwiLmNvbmNhdCh3aWR0aCwgXCIgXCIpLmNvbmNhdChoZWlnaHQpXG4gICAgfSlcbiAgfTtcbiAgdmFyIHVwbG9hZGVkSWNvbldpZHRoU3R5bGUgPSBpc1VwbG9hZGVkSWNvbiAmJiAhfmV4dHJhLmNsYXNzZXMuaW5kZXhPZignZmEtZncnKSA/IHtcbiAgICB3aWR0aDogXCJcIi5jb25jYXQod2lkdGggLyBoZWlnaHQgKiAxNiAqIDAuMDYyNSwgXCJlbVwiKVxuICB9IDoge307XG5cbiAgaWYgKHdhdGNoYWJsZSkge1xuICAgIGNvbnRlbnQuYXR0cmlidXRlc1tEQVRBX0ZBX0kyU1ZHXSA9ICcnO1xuICB9XG5cbiAgaWYgKHRpdGxlKSB7XG4gICAgY29udGVudC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgIHRhZzogJ3RpdGxlJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgaWQ6IGNvbnRlbnQuYXR0cmlidXRlc1snYXJpYS1sYWJlbGxlZGJ5J10gfHwgXCJ0aXRsZS1cIi5jb25jYXQodGl0bGVJZCB8fCBuZXh0VW5pcXVlSWQoKSlcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW3RpdGxlXVxuICAgIH0pO1xuICAgIGRlbGV0ZSBjb250ZW50LmF0dHJpYnV0ZXMudGl0bGU7XG4gIH1cblxuICB2YXIgYXJncyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb250ZW50KSwge30sIHtcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBpY29uTmFtZTogaWNvbk5hbWUsXG4gICAgbWFpbjogbWFpbixcbiAgICBtYXNrOiBtYXNrLFxuICAgIG1hc2tJZDogbWFza0lkLFxuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgIHN5bWJvbDogc3ltYm9sLFxuICAgIHN0eWxlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHVwbG9hZGVkSWNvbldpZHRoU3R5bGUpLCBleHRyYS5zdHlsZXMpXG4gIH0pO1xuXG4gIHZhciBfcmVmMiA9IG1hc2suZm91bmQgJiYgbWFpbi5mb3VuZCA/IGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVBYnN0cmFjdE1hc2snLCBhcmdzKSB8fCB7XG4gICAgY2hpbGRyZW46IFtdLFxuICAgIGF0dHJpYnV0ZXM6IHt9XG4gIH0gOiBjYWxsUHJvdmlkZWQoJ2dlbmVyYXRlQWJzdHJhY3RJY29uJywgYXJncykgfHwge1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBhdHRyaWJ1dGVzOiB7fVxuICB9LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgIGF0dHJpYnV0ZXMgPSBfcmVmMi5hdHRyaWJ1dGVzO1xuXG4gIGFyZ3MuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgYXJncy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcblxuICBpZiAoc3ltYm9sKSB7XG4gICAgcmV0dXJuIGFzU3ltYm9sKGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhc0ljb24oYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIG1ha2VMYXllcnNUZXh0QWJzdHJhY3QocGFyYW1zKSB7XG4gIHZhciBjb250ZW50ID0gcGFyYW1zLmNvbnRlbnQsXG4gICAgICB3aWR0aCA9IHBhcmFtcy53aWR0aCxcbiAgICAgIGhlaWdodCA9IHBhcmFtcy5oZWlnaHQsXG4gICAgICB0cmFuc2Zvcm0gPSBwYXJhbXMudHJhbnNmb3JtLFxuICAgICAgdGl0bGUgPSBwYXJhbXMudGl0bGUsXG4gICAgICBleHRyYSA9IHBhcmFtcy5leHRyYSxcbiAgICAgIF9wYXJhbXMkd2F0Y2hhYmxlMiA9IHBhcmFtcy53YXRjaGFibGUsXG4gICAgICB3YXRjaGFibGUgPSBfcGFyYW1zJHdhdGNoYWJsZTIgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyR3YXRjaGFibGUyO1xuXG4gIHZhciBhdHRyaWJ1dGVzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLmF0dHJpYnV0ZXMpLCB0aXRsZSA/IHtcbiAgICAndGl0bGUnOiB0aXRsZVxuICB9IDoge30pLCB7fSwge1xuICAgICdjbGFzcyc6IGV4dHJhLmNsYXNzZXMuam9pbignICcpXG4gIH0pO1xuXG4gIGlmICh3YXRjaGFibGUpIHtcbiAgICBhdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gJyc7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLnN0eWxlcyk7XG5cbiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pKSB7XG4gICAgc3R5bGVzWyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybUZvckNzcyh7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICAgIHN0YXJ0Q2VudGVyZWQ6IHRydWUsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH0pO1xuICAgIHN0eWxlc1snLXdlYmtpdC10cmFuc2Zvcm0nXSA9IHN0eWxlc1sndHJhbnNmb3JtJ107XG4gIH1cblxuICB2YXIgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlcyk7XG5cbiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICBhdHRyaWJ1dGVzWydzdHlsZSddID0gc3R5bGVTdHJpbmc7XG4gIH1cblxuICB2YXIgdmFsID0gW107XG4gIHZhbC5wdXNoKHtcbiAgICB0YWc6ICdzcGFuJyxcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgIGNoaWxkcmVuOiBbY29udGVudF1cbiAgfSk7XG5cbiAgaWYgKHRpdGxlKSB7XG4gICAgdmFsLnB1c2goe1xuICAgICAgdGFnOiAnc3BhbicsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiAnc3Itb25seSdcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW3RpdGxlXVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIG1ha2VMYXllcnNDb3VudGVyQWJzdHJhY3QocGFyYW1zKSB7XG4gIHZhciBjb250ZW50ID0gcGFyYW1zLmNvbnRlbnQsXG4gICAgICB0aXRsZSA9IHBhcmFtcy50aXRsZSxcbiAgICAgIGV4dHJhID0gcGFyYW1zLmV4dHJhO1xuXG4gIHZhciBhdHRyaWJ1dGVzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLmF0dHJpYnV0ZXMpLCB0aXRsZSA/IHtcbiAgICAndGl0bGUnOiB0aXRsZVxuICB9IDoge30pLCB7fSwge1xuICAgICdjbGFzcyc6IGV4dHJhLmNsYXNzZXMuam9pbignICcpXG4gIH0pO1xuXG4gIHZhciBzdHlsZVN0cmluZyA9IGpvaW5TdHlsZXMoZXh0cmEuc3R5bGVzKTtcblxuICBpZiAoc3R5bGVTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgIGF0dHJpYnV0ZXNbJ3N0eWxlJ10gPSBzdHlsZVN0cmluZztcbiAgfVxuXG4gIHZhciB2YWwgPSBbXTtcbiAgdmFsLnB1c2goe1xuICAgIHRhZzogJ3NwYW4nLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IFtjb250ZW50XVxuICB9KTtcblxuICBpZiAodGl0bGUpIHtcbiAgICB2YWwucHVzaCh7XG4gICAgICB0YWc6ICdzcGFuJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdzci1vbmx5J1xuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdGl0bGVdXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG52YXIgc3R5bGVzJDEgPSBuYW1lc3BhY2Uuc3R5bGVzO1xuZnVuY3Rpb24gYXNGb3VuZEljb24oaWNvbikge1xuICB2YXIgd2lkdGggPSBpY29uWzBdO1xuICB2YXIgaGVpZ2h0ID0gaWNvblsxXTtcblxuICB2YXIgX2ljb24kc2xpY2UgPSBpY29uLnNsaWNlKDQpLFxuICAgICAgX2ljb24kc2xpY2UyID0gX3NsaWNlZFRvQXJyYXkoX2ljb24kc2xpY2UsIDEpLFxuICAgICAgdmVjdG9yRGF0YSA9IF9pY29uJHNsaWNlMlswXTtcblxuICB2YXIgZWxlbWVudCA9IG51bGw7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmVjdG9yRGF0YSkpIHtcbiAgICBlbGVtZW50ID0ge1xuICAgICAgdGFnOiAnZycsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1cIikuY29uY2F0KERVT1RPTkVfQ0xBU1NFUy5HUk9VUClcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdGFnOiAncGF0aCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjbGFzczogXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuU0VDT05EQVJZKSxcbiAgICAgICAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICAgICAgICBkOiB2ZWN0b3JEYXRhWzBdXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgdGFnOiAncGF0aCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjbGFzczogXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuUFJJTUFSWSksXG4gICAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgICAgZDogdmVjdG9yRGF0YVsxXVxuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudCA9IHtcbiAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICAgICAgZDogdmVjdG9yRGF0YVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvdW5kOiB0cnVlLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICBpY29uOiBlbGVtZW50XG4gIH07XG59XG52YXIgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4gPSB7XG4gIGZvdW5kOiBmYWxzZSxcbiAgd2lkdGg6IDUxMixcbiAgaGVpZ2h0OiA1MTJcbn07XG5cbmZ1bmN0aW9uIG1heWJlTm90aWZ5TWlzc2luZyhpY29uTmFtZSwgcHJlZml4KSB7XG4gIGlmICghUFJPRFVDVElPTiAmJiAhY29uZmlnLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSWNvbiB3aXRoIG5hbWUgXFxcIlwiLmNvbmNhdChpY29uTmFtZSwgXCJcXFwiIGFuZCBwcmVmaXggXFxcIlwiKS5jb25jYXQocHJlZml4LCBcIlxcXCIgaXMgbWlzc2luZy5cIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpIHtcbiAgdmFyIGdpdmVuUHJlZml4ID0gcHJlZml4O1xuXG4gIGlmIChwcmVmaXggPT09ICdmYScgJiYgY29uZmlnLnN0eWxlRGVmYXVsdCAhPT0gbnVsbCkge1xuICAgIHByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHZhbCA9IHtcbiAgICAgIGZvdW5kOiBmYWxzZSxcbiAgICAgIHdpZHRoOiA1MTIsXG4gICAgICBoZWlnaHQ6IDUxMixcbiAgICAgIGljb246IGNhbGxQcm92aWRlZCgnbWlzc2luZ0ljb25BYnN0cmFjdCcpIHx8IHt9XG4gICAgfTtcblxuICAgIGlmIChnaXZlblByZWZpeCA9PT0gJ2ZhJykge1xuICAgICAgdmFyIHNoaW0gPSBieU9sZE5hbWUoaWNvbk5hbWUpIHx8IHt9O1xuICAgICAgaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGljb25OYW1lO1xuICAgICAgcHJlZml4ID0gc2hpbS5wcmVmaXggfHwgcHJlZml4O1xuICAgIH1cblxuICAgIGlmIChpY29uTmFtZSAmJiBwcmVmaXggJiYgc3R5bGVzJDFbcHJlZml4XSAmJiBzdHlsZXMkMVtwcmVmaXhdW2ljb25OYW1lXSkge1xuICAgICAgdmFyIGljb24gPSBzdHlsZXMkMVtwcmVmaXhdW2ljb25OYW1lXTtcbiAgICAgIHJldHVybiByZXNvbHZlKGFzRm91bmRJY29uKGljb24pKTtcbiAgICB9XG5cbiAgICBtYXliZU5vdGlmeU1pc3NpbmcoaWNvbk5hbWUsIHByZWZpeCk7XG4gICAgcmVzb2x2ZShfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4pLCB7fSwge1xuICAgICAgaWNvbjogY29uZmlnLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUgPyBjYWxsUHJvdmlkZWQoJ21pc3NpbmdJY29uQWJzdHJhY3QnKSB8fCB7fSA6IHt9XG4gICAgfSkpO1xuICB9KTtcbn1cblxudmFyIG5vb3AkMSA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxudmFyIHAgPSBjb25maWcubWVhc3VyZVBlcmZvcm1hbmNlICYmIFBFUkZPUk1BTkNFICYmIFBFUkZPUk1BTkNFLm1hcmsgJiYgUEVSRk9STUFOQ0UubWVhc3VyZSA/IFBFUkZPUk1BTkNFIDoge1xuICBtYXJrOiBub29wJDEsXG4gIG1lYXN1cmU6IG5vb3AkMVxufTtcbnZhciBwcmVhbWJsZSA9IFwiRkEgXFxcIjYuNS4yXFxcIlwiO1xuXG52YXIgYmVnaW4gPSBmdW5jdGlvbiBiZWdpbihuYW1lKSB7XG4gIHAubWFyayhcIlwiLmNvbmNhdChwcmVhbWJsZSwgXCIgXCIpLmNvbmNhdChuYW1lLCBcIiBiZWdpbnNcIikpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBlbmQobmFtZSk7XG4gIH07XG59O1xuXG52YXIgZW5kID0gZnVuY3Rpb24gZW5kKG5hbWUpIHtcbiAgcC5tYXJrKFwiXCIuY29uY2F0KHByZWFtYmxlLCBcIiBcIikuY29uY2F0KG5hbWUsIFwiIGVuZHNcIikpO1xuICBwLm1lYXN1cmUoXCJcIi5jb25jYXQocHJlYW1ibGUsIFwiIFwiKS5jb25jYXQobmFtZSksIFwiXCIuY29uY2F0KHByZWFtYmxlLCBcIiBcIikuY29uY2F0KG5hbWUsIFwiIGJlZ2luc1wiKSwgXCJcIi5jb25jYXQocHJlYW1ibGUsIFwiIFwiKS5jb25jYXQobmFtZSwgXCIgZW5kc1wiKSk7XG59O1xuXG52YXIgcGVyZiA9IHtcbiAgYmVnaW46IGJlZ2luLFxuICBlbmQ6IGVuZFxufTtcblxudmFyIG5vb3AkMiA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxuZnVuY3Rpb24gaXNXYXRjaGVkKG5vZGUpIHtcbiAgdmFyIGkyc3ZnID0gbm9kZS5nZXRBdHRyaWJ1dGUgPyBub2RlLmdldEF0dHJpYnV0ZShEQVRBX0ZBX0kyU1ZHKSA6IG51bGw7XG4gIHJldHVybiB0eXBlb2YgaTJzdmcgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBoYXNQcmVmaXhBbmRJY29uKG5vZGUpIHtcbiAgdmFyIHByZWZpeCA9IG5vZGUuZ2V0QXR0cmlidXRlID8gbm9kZS5nZXRBdHRyaWJ1dGUoREFUQV9QUkVGSVgpIDogbnVsbDtcbiAgdmFyIGljb24gPSBub2RlLmdldEF0dHJpYnV0ZSA/IG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgOiBudWxsO1xuICByZXR1cm4gcHJlZml4ICYmIGljb247XG59XG5cbmZ1bmN0aW9uIGhhc0JlZW5SZXBsYWNlZChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUuY2xhc3NMaXN0ICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNvbmZpZy5yZXBsYWNlbWVudENsYXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0TXV0YXRvcigpIHtcbiAgaWYgKGNvbmZpZy5hdXRvUmVwbGFjZVN2ZyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlO1xuICB9XG5cbiAgdmFyIG11dGF0b3IgPSBtdXRhdG9yc1tjb25maWcuYXV0b1JlcGxhY2VTdmddO1xuICByZXR1cm4gbXV0YXRvciB8fCBtdXRhdG9ycy5yZXBsYWNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50TlModGFnKSB7XG4gIHJldHVybiBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgdGFnKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcpIHtcbiAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQodGFnKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFNWRyhhYnN0cmFjdE9iaikge1xuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIF9wYXJhbXMkY2VGbiA9IHBhcmFtcy5jZUZuLFxuICAgICAgY2VGbiA9IF9wYXJhbXMkY2VGbiA9PT0gdm9pZCAwID8gYWJzdHJhY3RPYmoudGFnID09PSAnc3ZnJyA/IGNyZWF0ZUVsZW1lbnROUyA6IGNyZWF0ZUVsZW1lbnQgOiBfcGFyYW1zJGNlRm47XG5cbiAgaWYgKHR5cGVvZiBhYnN0cmFjdE9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gRE9DVU1FTlQuY3JlYXRlVGV4dE5vZGUoYWJzdHJhY3RPYmopO1xuICB9XG5cbiAgdmFyIHRhZyA9IGNlRm4oYWJzdHJhY3RPYmoudGFnKTtcbiAgT2JqZWN0LmtleXMoYWJzdHJhY3RPYmouYXR0cmlidXRlcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZShrZXksIGFic3RyYWN0T2JqLmF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuICB2YXIgY2hpbGRyZW4gPSBhYnN0cmFjdE9iai5jaGlsZHJlbiB8fCBbXTtcbiAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICB0YWcuYXBwZW5kQ2hpbGQoY29udmVydFNWRyhjaGlsZCwge1xuICAgICAgY2VGbjogY2VGblxuICAgIH0pKTtcbiAgfSk7XG4gIHJldHVybiB0YWc7XG59XG5cbmZ1bmN0aW9uIG5vZGVBc0NvbW1lbnQobm9kZSkge1xuICB2YXIgY29tbWVudCA9IFwiIFwiLmNvbmNhdChub2RlLm91dGVySFRNTCwgXCIgXCIpO1xuICAvKiBCRUdJTi5BVFRSSUJVVElPTiAqL1xuXG4gIGNvbW1lbnQgPSBcIlwiLmNvbmNhdChjb21tZW50LCBcIkZvbnQgQXdlc29tZSBmb250YXdlc29tZS5jb20gXCIpO1xuICAvKiBFTkQuQVRUUklCVVRJT04gKi9cblxuICByZXR1cm4gY29tbWVudDtcbn1cblxudmFyIG11dGF0b3JzID0ge1xuICByZXBsYWNlOiBmdW5jdGlvbiByZXBsYWNlKG11dGF0aW9uKSB7XG4gICAgdmFyIG5vZGUgPSBtdXRhdGlvblswXTtcblxuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgIG11dGF0aW9uWzFdLmZvckVhY2goZnVuY3Rpb24gKF9hYnN0cmFjdCkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNvbnZlcnRTVkcoX2Fic3RyYWN0KSwgbm9kZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpID09PSBudWxsICYmIGNvbmZpZy5rZWVwT3JpZ2luYWxTb3VyY2UpIHtcbiAgICAgICAgdmFyIGNvbW1lbnQgPSBET0NVTUVOVC5jcmVhdGVDb21tZW50KG5vZGVBc0NvbW1lbnQobm9kZSkpO1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbW1lbnQsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG5lc3Q6IGZ1bmN0aW9uIG5lc3QobXV0YXRpb24pIHtcbiAgICB2YXIgbm9kZSA9IG11dGF0aW9uWzBdO1xuICAgIHZhciBfYWJzdHJhY3QyID0gbXV0YXRpb25bMV07IC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIHJlcGxhY2VkIG5vZGUgd2UgZG8gbm90IHdhbnQgdG8gY29udGludWUgbmVzdGluZyB3aXRoaW4gaXQuXG4gICAgLy8gU2hvcnQtY2lyY3VpdCB0byB0aGUgc3RhbmRhcmQgcmVwbGFjZW1lbnRcblxuICAgIGlmICh+Y2xhc3NBcnJheShub2RlKS5pbmRleE9mKGNvbmZpZy5yZXBsYWNlbWVudENsYXNzKSkge1xuICAgICAgcmV0dXJuIG11dGF0b3JzLnJlcGxhY2UobXV0YXRpb24pO1xuICAgIH1cblxuICAgIHZhciBmb3JTdmcgPSBuZXcgUmVnRXhwKFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLS4qXCIpKTtcbiAgICBkZWxldGUgX2Fic3RyYWN0MlswXS5hdHRyaWJ1dGVzLmlkO1xuXG4gICAgaWYgKF9hYnN0cmFjdDJbMF0uYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgdmFyIHNwbGl0Q2xhc3NlcyA9IF9hYnN0cmFjdDJbMF0uYXR0cmlidXRlcy5jbGFzcy5zcGxpdCgnICcpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjbHMpIHtcbiAgICAgICAgaWYgKGNscyA9PT0gY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MgfHwgY2xzLm1hdGNoKGZvclN2ZykpIHtcbiAgICAgICAgICBhY2MudG9TdmcucHVzaChjbHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy50b05vZGUucHVzaChjbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHtcbiAgICAgICAgdG9Ob2RlOiBbXSxcbiAgICAgICAgdG9Tdmc6IFtdXG4gICAgICB9KTtcblxuICAgICAgX2Fic3RyYWN0MlswXS5hdHRyaWJ1dGVzLmNsYXNzID0gc3BsaXRDbGFzc2VzLnRvU3ZnLmpvaW4oJyAnKTtcblxuICAgICAgaWYgKHNwbGl0Q2xhc3Nlcy50b05vZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgc3BsaXRDbGFzc2VzLnRvTm9kZS5qb2luKCcgJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdJbm5lckhUTUwgPSBfYWJzdHJhY3QyLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIHRvSHRtbChhKTtcbiAgICB9KS5qb2luKCdcXG4nKTtcblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcsICcnKTtcbiAgICBub2RlLmlubmVySFRNTCA9IG5ld0lubmVySFRNTDtcbiAgfVxufTtcblxuZnVuY3Rpb24gcGVyZm9ybU9wZXJhdGlvblN5bmMob3ApIHtcbiAgb3AoKTtcbn1cblxuZnVuY3Rpb24gcGVyZm9ybShtdXRhdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsYmFja0Z1bmN0aW9uID0gdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBub29wJDI7XG5cbiAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZyYW1lID0gcGVyZm9ybU9wZXJhdGlvblN5bmM7XG5cbiAgICBpZiAoY29uZmlnLm11dGF0ZUFwcHJvYWNoID09PSBNVVRBVElPTl9BUFBST0FDSF9BU1lOQykge1xuICAgICAgZnJhbWUgPSBXSU5ET1cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHBlcmZvcm1PcGVyYXRpb25TeW5jO1xuICAgIH1cblxuICAgIGZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtdXRhdG9yID0gZ2V0TXV0YXRvcigpO1xuICAgICAgdmFyIG1hcmsgPSBwZXJmLmJlZ2luKCdtdXRhdGUnKTtcbiAgICAgIG11dGF0aW9ucy5tYXAobXV0YXRvcik7XG4gICAgICBtYXJrKCk7XG4gICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gICAgfSk7XG4gIH1cbn1cbnZhciBkaXNhYmxlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZGlzYWJsZU9ic2VydmF0aW9uKCkge1xuICBkaXNhYmxlZCA9IHRydWU7XG59XG5mdW5jdGlvbiBlbmFibGVPYnNlcnZhdGlvbigpIHtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbn1cbnZhciBtbyA9IG51bGw7XG5mdW5jdGlvbiBvYnNlcnZlKG9wdGlvbnMpIHtcbiAgaWYgKCFNVVRBVElPTl9PQlNFUlZFUikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghY29uZmlnLm9ic2VydmVNdXRhdGlvbnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkdHJlZUNhbGxiYWNrID0gb3B0aW9ucy50cmVlQ2FsbGJhY2ssXG4gICAgICB0cmVlQ2FsbGJhY2sgPSBfb3B0aW9ucyR0cmVlQ2FsbGJhY2sgPT09IHZvaWQgMCA/IG5vb3AkMiA6IF9vcHRpb25zJHRyZWVDYWxsYmFjayxcbiAgICAgIF9vcHRpb25zJG5vZGVDYWxsYmFjayA9IG9wdGlvbnMubm9kZUNhbGxiYWNrLFxuICAgICAgbm9kZUNhbGxiYWNrID0gX29wdGlvbnMkbm9kZUNhbGxiYWNrID09PSB2b2lkIDAgPyBub29wJDIgOiBfb3B0aW9ucyRub2RlQ2FsbGJhY2ssXG4gICAgICBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4gPSBvcHRpb25zLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssXG4gICAgICBwc2V1ZG9FbGVtZW50c0NhbGxiYWNrID0gX29wdGlvbnMkcHNldWRvRWxlbWVuID09PSB2b2lkIDAgPyBub29wJDIgOiBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4sXG4gICAgICBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPSBvcHRpb25zLm9ic2VydmVNdXRhdGlvbnNSb290LFxuICAgICAgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX29wdGlvbnMkb2JzZXJ2ZU11dGF0O1xuICBtbyA9IG5ldyBNVVRBVElPTl9PQlNFUlZFUihmdW5jdGlvbiAob2JqZWN0cykge1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgIHZhciBkZWZhdWx0UHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpO1xuICAgIHRvQXJyYXkob2JqZWN0cykuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb25SZWNvcmQpIHtcbiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAnY2hpbGRMaXN0JyAmJiBtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgJiYgIWlzV2F0Y2hlZChtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzWzBdKSkge1xuICAgICAgICBpZiAoY29uZmlnLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgICAgcHNldWRvRWxlbWVudHNDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJlZUNhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAnYXR0cmlidXRlcycgJiYgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnBhcmVudE5vZGUgJiYgY29uZmlnLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0LnBhcmVudE5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobXV0YXRpb25SZWNvcmQudHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIGlzV2F0Y2hlZChtdXRhdGlvblJlY29yZC50YXJnZXQpICYmIH5BVFRSSUJVVEVTX1dBVENIRURfRk9SX01VVEFUSU9OLmluZGV4T2YobXV0YXRpb25SZWNvcmQuYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLmF0dHJpYnV0ZU5hbWUgPT09ICdjbGFzcycgJiYgaGFzUHJlZml4QW5kSWNvbihtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7XG4gICAgICAgICAgdmFyIF9nZXRDYW5vbmljYWxJY29uID0gZ2V0Q2Fub25pY2FsSWNvbihjbGFzc0FycmF5KG11dGF0aW9uUmVjb3JkLnRhcmdldCkpLFxuICAgICAgICAgICAgICBwcmVmaXggPSBfZ2V0Q2Fub25pY2FsSWNvbi5wcmVmaXgsXG4gICAgICAgICAgICAgIGljb25OYW1lID0gX2dldENhbm9uaWNhbEljb24uaWNvbk5hbWU7XG5cbiAgICAgICAgICBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfUFJFRklYLCBwcmVmaXggfHwgZGVmYXVsdFByZWZpeCk7XG4gICAgICAgICAgaWYgKGljb25OYW1lKSBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfSUNPTiwgaWNvbk5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0JlZW5SZXBsYWNlZChtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7XG4gICAgICAgICAgbm9kZUNhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIG1vLm9ic2VydmUob2JzZXJ2ZU11dGF0aW9uc1Jvb3QsIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgIHN1YnRyZWU6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBkaXNjb25uZWN0KCkge1xuICBpZiAoIW1vKSByZXR1cm47XG4gIG1vLmRpc2Nvbm5lY3QoKTtcbn1cblxuZnVuY3Rpb24gc3R5bGVQYXJzZXIgKG5vZGUpIHtcbiAgdmFyIHN0eWxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gIHZhciB2YWwgPSBbXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICB2YWwgPSBzdHlsZS5zcGxpdCgnOycpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBzdHlsZSkge1xuICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIgcHJvcCA9IHN0eWxlc1swXTtcbiAgICAgIHZhciB2YWx1ZSA9IHN0eWxlcy5zbGljZSgxKTtcblxuICAgICAgaWYgKHByb3AgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBhY2NbcHJvcF0gPSB2YWx1ZS5qb2luKCc6JykudHJpbSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGNsYXNzUGFyc2VyIChub2RlKSB7XG4gIHZhciBleGlzdGluZ1ByZWZpeCA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXByZWZpeCcpO1xuICB2YXIgZXhpc3RpbmdJY29uTmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWljb24nKTtcbiAgdmFyIGlubmVyVGV4dCA9IG5vZGUuaW5uZXJUZXh0ICE9PSB1bmRlZmluZWQgPyBub2RlLmlubmVyVGV4dC50cmltKCkgOiAnJztcbiAgdmFyIHZhbCA9IGdldENhbm9uaWNhbEljb24oY2xhc3NBcnJheShub2RlKSk7XG5cbiAgaWYgKCF2YWwucHJlZml4KSB7XG4gICAgdmFsLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgfVxuXG4gIGlmIChleGlzdGluZ1ByZWZpeCAmJiBleGlzdGluZ0ljb25OYW1lKSB7XG4gICAgdmFsLnByZWZpeCA9IGV4aXN0aW5nUHJlZml4O1xuICAgIHZhbC5pY29uTmFtZSA9IGV4aXN0aW5nSWNvbk5hbWU7XG4gIH1cblxuICBpZiAodmFsLmljb25OYW1lICYmIHZhbC5wcmVmaXgpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgaWYgKHZhbC5wcmVmaXggJiYgaW5uZXJUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICB2YWwuaWNvbk5hbWUgPSBieUxpZ2F0dXJlKHZhbC5wcmVmaXgsIG5vZGUuaW5uZXJUZXh0KSB8fCBieVVuaWNvZGUodmFsLnByZWZpeCwgdG9IZXgobm9kZS5pbm5lclRleHQpKTtcbiAgfVxuXG4gIGlmICghdmFsLmljb25OYW1lICYmIGNvbmZpZy5hdXRvRmV0Y2hTdmcgJiYgbm9kZS5maXJzdENoaWxkICYmIG5vZGUuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICB2YWwuaWNvbk5hbWUgPSBub2RlLmZpcnN0Q2hpbGQuZGF0YTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGF0dHJpYnV0ZXNQYXJzZXIgKG5vZGUpIHtcbiAgdmFyIGV4dHJhQXR0cmlidXRlcyA9IHRvQXJyYXkobm9kZS5hdHRyaWJ1dGVzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgYXR0cikge1xuICAgIGlmIChhY2MubmFtZSAhPT0gJ2NsYXNzJyAmJiBhY2MubmFtZSAhPT0gJ3N0eWxlJykge1xuICAgICAgYWNjW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIHRpdGxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gIHZhciB0aXRsZUlkID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmEtdGl0bGUtaWQnKTtcblxuICBpZiAoY29uZmlnLmF1dG9BMTF5KSB7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXNbJ2FyaWEtbGFiZWxsZWRieSddID0gXCJcIi5jb25jYXQoY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIFwiLXRpdGxlLVwiKS5jb25jYXQodGl0bGVJZCB8fCBuZXh0VW5pcXVlSWQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlc1snYXJpYS1oaWRkZW4nXSA9ICd0cnVlJztcbiAgICAgIGV4dHJhQXR0cmlidXRlc1snZm9jdXNhYmxlJ10gPSAnZmFsc2UnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHRyYUF0dHJpYnV0ZXM7XG59XG5cbmZ1bmN0aW9uIGJsYW5rTWV0YSgpIHtcbiAgcmV0dXJuIHtcbiAgICBpY29uTmFtZTogbnVsbCxcbiAgICB0aXRsZTogbnVsbCxcbiAgICB0aXRsZUlkOiBudWxsLFxuICAgIHByZWZpeDogbnVsbCxcbiAgICB0cmFuc2Zvcm06IG1lYW5pbmdsZXNzVHJhbnNmb3JtLFxuICAgIHN5bWJvbDogZmFsc2UsXG4gICAgbWFzazoge1xuICAgICAgaWNvbk5hbWU6IG51bGwsXG4gICAgICBwcmVmaXg6IG51bGwsXG4gICAgICByZXN0OiBbXVxuICAgIH0sXG4gICAgbWFza0lkOiBudWxsLFxuICAgIGV4dHJhOiB7XG4gICAgICBjbGFzc2VzOiBbXSxcbiAgICAgIHN0eWxlczoge30sXG4gICAgICBhdHRyaWJ1dGVzOiB7fVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlTWV0YShub2RlKSB7XG4gIHZhciBwYXJzZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICBzdHlsZVBhcnNlcjogdHJ1ZVxuICB9O1xuXG4gIHZhciBfY2xhc3NQYXJzZXIgPSBjbGFzc1BhcnNlcihub2RlKSxcbiAgICAgIGljb25OYW1lID0gX2NsYXNzUGFyc2VyLmljb25OYW1lLFxuICAgICAgcHJlZml4ID0gX2NsYXNzUGFyc2VyLnByZWZpeCxcbiAgICAgIGV4dHJhQ2xhc3NlcyA9IF9jbGFzc1BhcnNlci5yZXN0O1xuXG4gIHZhciBleHRyYUF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzUGFyc2VyKG5vZGUpO1xuICB2YXIgcGx1Z2luTWV0YSA9IGNoYWluSG9va3MoJ3BhcnNlTm9kZUF0dHJpYnV0ZXMnLCB7fSwgbm9kZSk7XG4gIHZhciBleHRyYVN0eWxlcyA9IHBhcnNlci5zdHlsZVBhcnNlciA/IHN0eWxlUGFyc2VyKG5vZGUpIDogW107XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMih7XG4gICAgaWNvbk5hbWU6IGljb25OYW1lLFxuICAgIHRpdGxlOiBub2RlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSxcbiAgICB0aXRsZUlkOiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS10aXRsZS1pZCcpLFxuICAgIHByZWZpeDogcHJlZml4LFxuICAgIHRyYW5zZm9ybTogbWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgbWFzazoge1xuICAgICAgaWNvbk5hbWU6IG51bGwsXG4gICAgICBwcmVmaXg6IG51bGwsXG4gICAgICByZXN0OiBbXVxuICAgIH0sXG4gICAgbWFza0lkOiBudWxsLFxuICAgIHN5bWJvbDogZmFsc2UsXG4gICAgZXh0cmE6IHtcbiAgICAgIGNsYXNzZXM6IGV4dHJhQ2xhc3NlcyxcbiAgICAgIHN0eWxlczogZXh0cmFTdHlsZXMsXG4gICAgICBhdHRyaWJ1dGVzOiBleHRyYUF0dHJpYnV0ZXNcbiAgICB9XG4gIH0sIHBsdWdpbk1ldGEpO1xufVxuXG52YXIgc3R5bGVzJDIgPSBuYW1lc3BhY2Uuc3R5bGVzO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZU11dGF0aW9uKG5vZGUpIHtcbiAgdmFyIG5vZGVNZXRhID0gY29uZmlnLmF1dG9SZXBsYWNlU3ZnID09PSAnbmVzdCcgPyBwYXJzZU1ldGEobm9kZSwge1xuICAgIHN0eWxlUGFyc2VyOiBmYWxzZVxuICB9KSA6IHBhcnNlTWV0YShub2RlKTtcblxuICBpZiAofm5vZGVNZXRhLmV4dHJhLmNsYXNzZXMuaW5kZXhPZihMQVlFUlNfVEVYVF9DTEFTU05BTUUpKSB7XG4gICAgcmV0dXJuIGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVMYXllcnNUZXh0Jywgbm9kZSwgbm9kZU1ldGEpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYWxsUHJvdmlkZWQoJ2dlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbicsIG5vZGUsIG5vZGVNZXRhKTtcbiAgfVxufVxuXG52YXIga25vd25QcmVmaXhlcyA9IG5ldyBTZXQoKTtcbkZBTUlMSUVTLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gIGtub3duUHJlZml4ZXMuYWRkKFwiZmEtXCIuY29uY2F0KGZhbWlseSkpO1xufSk7XG5PYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbRkFNSUxZX0NMQVNTSUNdKS5tYXAoa25vd25QcmVmaXhlcy5hZGQuYmluZChrbm93blByZWZpeGVzKSk7XG5PYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbRkFNSUxZX1NIQVJQXSkubWFwKGtub3duUHJlZml4ZXMuYWRkLmJpbmQoa25vd25QcmVmaXhlcykpO1xua25vd25QcmVmaXhlcyA9IF90b0NvbnN1bWFibGVBcnJheShrbm93blByZWZpeGVzKTtcblxuZnVuY3Rpb24gb25UcmVlKHJvb3QpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICBpZiAoIUlTX0RPTSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB2YXIgaHRtbENsYXNzTGlzdCA9IERPQ1VNRU5ULmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Q7XG5cbiAgdmFyIGhjbEFkZCA9IGZ1bmN0aW9uIGhjbEFkZChzdWZmaXgpIHtcbiAgICByZXR1cm4gaHRtbENsYXNzTGlzdC5hZGQoXCJcIi5jb25jYXQoSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCBcIi1cIikuY29uY2F0KHN1ZmZpeCkpO1xuICB9O1xuXG4gIHZhciBoY2xSZW1vdmUgPSBmdW5jdGlvbiBoY2xSZW1vdmUoc3VmZml4KSB7XG4gICAgcmV0dXJuIGh0bWxDbGFzc0xpc3QucmVtb3ZlKFwiXCIuY29uY2F0KEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgXCItXCIpLmNvbmNhdChzdWZmaXgpKTtcbiAgfTtcblxuICB2YXIgcHJlZml4ZXMgPSBjb25maWcuYXV0b0ZldGNoU3ZnID8ga25vd25QcmVmaXhlcyA6IEZBTUlMSUVTLm1hcChmdW5jdGlvbiAoZikge1xuICAgIHJldHVybiBcImZhLVwiLmNvbmNhdChmKTtcbiAgfSkuY29uY2F0KE9iamVjdC5rZXlzKHN0eWxlcyQyKSk7XG5cbiAgaWYgKCFwcmVmaXhlcy5pbmNsdWRlcygnZmEnKSkge1xuICAgIHByZWZpeGVzLnB1c2goJ2ZhJyk7XG4gIH1cblxuICB2YXIgcHJlZml4ZXNEb21RdWVyeSA9IFtcIi5cIi5jb25jYXQoTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCBcIjpub3QoW1wiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgXCJdKVwiKV0uY29uY2F0KHByZWZpeGVzLm1hcChmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBcIi5cIi5jb25jYXQocCwgXCI6bm90KFtcIikuY29uY2F0KERBVEFfRkFfSTJTVkcsIFwiXSlcIik7XG4gIH0pKS5qb2luKCcsICcpO1xuXG4gIGlmIChwcmVmaXhlc0RvbVF1ZXJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHZhciBjYW5kaWRhdGVzID0gW107XG5cbiAgdHJ5IHtcbiAgICBjYW5kaWRhdGVzID0gdG9BcnJheShyb290LnF1ZXJ5U2VsZWN0b3JBbGwocHJlZml4ZXNEb21RdWVyeSkpO1xuICB9IGNhdGNoIChlKSB7Ly8gbm9vcFxuICB9XG5cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGhjbEFkZCgncGVuZGluZycpO1xuICAgIGhjbFJlbW92ZSgnY29tcGxldGUnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICB2YXIgbWFyayA9IHBlcmYuYmVnaW4oJ29uVHJlZScpO1xuICB2YXIgbXV0YXRpb25zID0gY2FuZGlkYXRlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgbXV0YXRpb24gPSBnZW5lcmF0ZU11dGF0aW9uKG5vZGUpO1xuXG4gICAgICBpZiAobXV0YXRpb24pIHtcbiAgICAgICAgYWNjLnB1c2gobXV0YXRpb24pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghUFJPRFVDVElPTikge1xuICAgICAgICBpZiAoZS5uYW1lID09PSAnTWlzc2luZ0ljb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBQcm9taXNlLmFsbChtdXRhdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHJlc29sdmVkTXV0YXRpb25zKSB7XG4gICAgICBwZXJmb3JtKHJlc29sdmVkTXV0YXRpb25zLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhjbEFkZCgnYWN0aXZlJyk7XG4gICAgICAgIGhjbEFkZCgnY29tcGxldGUnKTtcbiAgICAgICAgaGNsUmVtb3ZlKCdwZW5kaW5nJyk7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgIG1hcmsoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIG1hcmsoKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uTm9kZShub2RlKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgZ2VuZXJhdGVNdXRhdGlvbihub2RlKS50aGVuKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgIGlmIChtdXRhdGlvbikge1xuICAgICAgcGVyZm9ybShbbXV0YXRpb25dLCBjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUljb25zKG5leHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtYXliZUljb25EZWZpbml0aW9uKSB7XG4gICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGljb25EZWZpbml0aW9uID0gKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pLmljb24gPyBtYXliZUljb25EZWZpbml0aW9uIDogZmluZEljb25EZWZpbml0aW9uKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pO1xuICAgIHZhciBtYXNrID0gcGFyYW1zLm1hc2s7XG5cbiAgICBpZiAobWFzaykge1xuICAgICAgbWFzayA9IChtYXNrIHx8IHt9KS5pY29uID8gbWFzayA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXNrIHx8IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChpY29uRGVmaW5pdGlvbiwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHBhcmFtcyksIHt9LCB7XG4gICAgICBtYXNrOiBtYXNrXG4gICAgfSkpO1xuICB9O1xufVxuXG52YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKGljb25EZWZpbml0aW9uKSB7XG4gIHZhciBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgX3BhcmFtcyR0cmFuc2Zvcm0gPSBwYXJhbXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNmb3JtID0gX3BhcmFtcyR0cmFuc2Zvcm0gPT09IHZvaWQgMCA/IG1lYW5pbmdsZXNzVHJhbnNmb3JtIDogX3BhcmFtcyR0cmFuc2Zvcm0sXG4gICAgICBfcGFyYW1zJHN5bWJvbCA9IHBhcmFtcy5zeW1ib2wsXG4gICAgICBzeW1ib2wgPSBfcGFyYW1zJHN5bWJvbCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHN5bWJvbCxcbiAgICAgIF9wYXJhbXMkbWFzayA9IHBhcmFtcy5tYXNrLFxuICAgICAgbWFzayA9IF9wYXJhbXMkbWFzayA9PT0gdm9pZCAwID8gbnVsbCA6IF9wYXJhbXMkbWFzayxcbiAgICAgIF9wYXJhbXMkbWFza0lkID0gcGFyYW1zLm1hc2tJZCxcbiAgICAgIG1hc2tJZCA9IF9wYXJhbXMkbWFza0lkID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyRtYXNrSWQsXG4gICAgICBfcGFyYW1zJHRpdGxlID0gcGFyYW1zLnRpdGxlLFxuICAgICAgdGl0bGUgPSBfcGFyYW1zJHRpdGxlID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyR0aXRsZSxcbiAgICAgIF9wYXJhbXMkdGl0bGVJZCA9IHBhcmFtcy50aXRsZUlkLFxuICAgICAgdGl0bGVJZCA9IF9wYXJhbXMkdGl0bGVJZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9wYXJhbXMkdGl0bGVJZCxcbiAgICAgIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtcy5jbGFzc2VzLFxuICAgICAgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXMsXG4gICAgICBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMuYXR0cmlidXRlcyxcbiAgICAgIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLFxuICAgICAgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMuc3R5bGVzLFxuICAgICAgc3R5bGVzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7XG4gIGlmICghaWNvbkRlZmluaXRpb24pIHJldHVybjtcbiAgdmFyIHByZWZpeCA9IGljb25EZWZpbml0aW9uLnByZWZpeCxcbiAgICAgIGljb25OYW1lID0gaWNvbkRlZmluaXRpb24uaWNvbk5hbWUsXG4gICAgICBpY29uID0gaWNvbkRlZmluaXRpb24uaWNvbjtcbiAgcmV0dXJuIGRvbVZhcmlhbnRzKF9vYmplY3RTcHJlYWQyKHtcbiAgICB0eXBlOiAnaWNvbidcbiAgfSwgaWNvbkRlZmluaXRpb24pLCBmdW5jdGlvbiAoKSB7XG4gICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICBpY29uRGVmaW5pdGlvbjogaWNvbkRlZmluaXRpb24sXG4gICAgICBwYXJhbXM6IHBhcmFtc1xuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5hdXRvQTExeSkge1xuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ2FyaWEtbGFiZWxsZWRieSddID0gXCJcIi5jb25jYXQoY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIFwiLXRpdGxlLVwiKS5jb25jYXQodGl0bGVJZCB8fCBuZXh0VW5pcXVlSWQoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgICBhdHRyaWJ1dGVzWydmb2N1c2FibGUnXSA9ICdmYWxzZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJbmxpbmVTdmdBYnN0cmFjdCh7XG4gICAgICBpY29uczoge1xuICAgICAgICBtYWluOiBhc0ZvdW5kSWNvbihpY29uKSxcbiAgICAgICAgbWFzazogbWFzayA/IGFzRm91bmRJY29uKG1hc2suaWNvbikgOiB7XG4gICAgICAgICAgZm91bmQ6IGZhbHNlLFxuICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICBpY29uOiB7fVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJlZml4OiBwcmVmaXgsXG4gICAgICBpY29uTmFtZTogaWNvbk5hbWUsXG4gICAgICB0cmFuc2Zvcm06IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtZWFuaW5nbGVzc1RyYW5zZm9ybSksIHRyYW5zZm9ybSksXG4gICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIG1hc2tJZDogbWFza0lkLFxuICAgICAgdGl0bGVJZDogdGl0bGVJZCxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgICBjbGFzc2VzOiBjbGFzc2VzXG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcbnZhciBSZXBsYWNlRWxlbWVudHMgPSB7XG4gIG1peG91dDogZnVuY3Rpb24gbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiByZXNvbHZlSWNvbnMocmVuZGVyKVxuICAgIH07XG4gIH0sXG4gIGhvb2tzOiBmdW5jdGlvbiBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrczogZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyhhY2N1bXVsYXRvcikge1xuICAgICAgICBhY2N1bXVsYXRvci50cmVlQ2FsbGJhY2sgPSBvblRyZWU7XG4gICAgICAgIGFjY3VtdWxhdG9yLm5vZGVDYWxsYmFjayA9IG9uTm9kZTtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHtcbiAgICBwcm92aWRlcnMkJDEuaTJzdmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICB2YXIgX3BhcmFtcyRub2RlID0gcGFyYW1zLm5vZGUsXG4gICAgICAgICAgbm9kZSA9IF9wYXJhbXMkbm9kZSA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfcGFyYW1zJG5vZGUsXG4gICAgICAgICAgX3BhcmFtcyRjYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjayxcbiAgICAgICAgICBjYWxsYmFjayA9IF9wYXJhbXMkY2FsbGJhY2sgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHt9IDogX3BhcmFtcyRjYWxsYmFjaztcbiAgICAgIHJldHVybiBvblRyZWUobm9kZSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVNZXRhKSB7XG4gICAgICB2YXIgaWNvbk5hbWUgPSBub2RlTWV0YS5pY29uTmFtZSxcbiAgICAgICAgICB0aXRsZSA9IG5vZGVNZXRhLnRpdGxlLFxuICAgICAgICAgIHRpdGxlSWQgPSBub2RlTWV0YS50aXRsZUlkLFxuICAgICAgICAgIHByZWZpeCA9IG5vZGVNZXRhLnByZWZpeCxcbiAgICAgICAgICB0cmFuc2Zvcm0gPSBub2RlTWV0YS50cmFuc2Zvcm0sXG4gICAgICAgICAgc3ltYm9sID0gbm9kZU1ldGEuc3ltYm9sLFxuICAgICAgICAgIG1hc2sgPSBub2RlTWV0YS5tYXNrLFxuICAgICAgICAgIG1hc2tJZCA9IG5vZGVNZXRhLm1hc2tJZCxcbiAgICAgICAgICBleHRyYSA9IG5vZGVNZXRhLmV4dHJhO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwoW2ZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpLCBtYXNrLmljb25OYW1lID8gZmluZEljb24obWFzay5pY29uTmFtZSwgbWFzay5wcmVmaXgpIDogUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICBmb3VuZDogZmFsc2UsXG4gICAgICAgICAgd2lkdGg6IDUxMixcbiAgICAgICAgICBoZWlnaHQ6IDUxMixcbiAgICAgICAgICBpY29uOiB7fVxuICAgICAgICB9KV0pLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgICAgICAgICAgbWFpbiA9IF9yZWYyWzBdLFxuICAgICAgICAgICAgICBtYXNrID0gX3JlZjJbMV07XG5cbiAgICAgICAgICByZXNvbHZlKFtub2RlLCBtYWtlSW5saW5lU3ZnQWJzdHJhY3Qoe1xuICAgICAgICAgICAgaWNvbnM6IHtcbiAgICAgICAgICAgICAgbWFpbjogbWFpbixcbiAgICAgICAgICAgICAgbWFzazogbWFza1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICAgICAgaWNvbk5hbWU6IGljb25OYW1lLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgICAgICAgIG1hc2tJZDogbWFza0lkLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgdGl0bGVJZDogdGl0bGVJZCxcbiAgICAgICAgICAgIGV4dHJhOiBleHRyYSxcbiAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pXSk7XG4gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlQWJzdHJhY3RJY29uID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBfcmVmMy5jaGlsZHJlbixcbiAgICAgICAgICBhdHRyaWJ1dGVzID0gX3JlZjMuYXR0cmlidXRlcyxcbiAgICAgICAgICBtYWluID0gX3JlZjMubWFpbixcbiAgICAgICAgICB0cmFuc2Zvcm0gPSBfcmVmMy50cmFuc2Zvcm0sXG4gICAgICAgICAgc3R5bGVzID0gX3JlZjMuc3R5bGVzO1xuICAgICAgdmFyIHN0eWxlU3RyaW5nID0gam9pblN0eWxlcyhzdHlsZXMpO1xuXG4gICAgICBpZiAoc3R5bGVTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICBhdHRyaWJ1dGVzWydzdHlsZSddID0gc3R5bGVTdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0Q2hpbGQ7XG5cbiAgICAgIGlmICh0cmFuc2Zvcm1Jc01lYW5pbmdmdWwodHJhbnNmb3JtKSkge1xuICAgICAgICBuZXh0Q2hpbGQgPSBjYWxsUHJvdmlkZWQoJ2dlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZycsIHtcbiAgICAgICAgICBtYWluOiBtYWluLFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYWluLndpZHRoLFxuICAgICAgICAgIGljb25XaWR0aDogbWFpbi53aWR0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaChuZXh0Q2hpbGQgfHwgbWFpbi5pY29uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICAgICAgfTtcbiAgICB9O1xuICB9XG59O1xuXG52YXIgTGF5ZXJzID0ge1xuICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF5ZXI6IGZ1bmN0aW9uIGxheWVyKGFzc2VtYmxlcikge1xuICAgICAgICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgICAgdmFyIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtcy5jbGFzc2VzLFxuICAgICAgICAgICAgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXM7XG4gICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7XG4gICAgICAgICAgdHlwZTogJ2xheWVyJ1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICAgICAgICBhc3NlbWJsZXI6IGFzc2VtYmxlcixcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgICAgICAgYXNzZW1ibGVyKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncy5tYXAoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoYS5hYnN0cmFjdCk7XG4gICAgICAgICAgICB9KSA6IGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGFyZ3MuYWJzdHJhY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIGNsYXNzOiBbXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItbGF5ZXJzXCIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzZXMpKS5qb2luKCcgJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgICB9XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIExheWVyc0NvdW50ZXIgPSB7XG4gIG1peG91dDogZnVuY3Rpb24gbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3VudGVyOiBmdW5jdGlvbiBjb3VudGVyKGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgIHZhciBfcGFyYW1zJHRpdGxlID0gcGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgdGl0bGUgPSBfcGFyYW1zJHRpdGxlID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyR0aXRsZSxcbiAgICAgICAgICAgIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtcy5jbGFzc2VzLFxuICAgICAgICAgICAgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXMsXG4gICAgICAgICAgICBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMuc3R5bGVzLFxuICAgICAgICAgICAgc3R5bGVzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7XG4gICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInLFxuICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxIb29rcygnYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uJywge1xuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG1ha2VMYXllcnNDb3VudGVyQWJzdHJhY3Qoe1xuICAgICAgICAgICAgY29udGVudDogY29udGVudC50b1N0cmluZygpLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1sYXllcnMtY291bnRlclwiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIExheWVyc1RleHQgPSB7XG4gIG1peG91dDogZnVuY3Rpb24gbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiBmdW5jdGlvbiB0ZXh0KGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgIHZhciBfcGFyYW1zJHRyYW5zZm9ybSA9IHBhcmFtcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICB0cmFuc2Zvcm0gPSBfcGFyYW1zJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbWVhbmluZ2xlc3NUcmFuc2Zvcm0gOiBfcGFyYW1zJHRyYW5zZm9ybSxcbiAgICAgICAgICAgIF9wYXJhbXMkdGl0bGUgPSBwYXJhbXMudGl0bGUsXG4gICAgICAgICAgICB0aXRsZSA9IF9wYXJhbXMkdGl0bGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJHRpdGxlLFxuICAgICAgICAgICAgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zLmNsYXNzZXMsXG4gICAgICAgICAgICBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcyxcbiAgICAgICAgICAgIF9wYXJhbXMkYXR0cmlidXRlcyA9IHBhcmFtcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgYXR0cmlidXRlcyA9IF9wYXJhbXMkYXR0cmlidXRlcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1zJGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBfcGFyYW1zJHN0eWxlcyA9IHBhcmFtcy5zdHlsZXMsXG4gICAgICAgICAgICBzdHlsZXMgPSBfcGFyYW1zJHN0eWxlcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1zJHN0eWxlcztcbiAgICAgICAgcmV0dXJuIGRvbVZhcmlhbnRzKHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgY29udGVudDogY29udGVudFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gbWFrZUxheWVyc1RleHRBYnN0cmFjdCh7XG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWVhbmluZ2xlc3NUcmFuc2Zvcm0pLCB0cmFuc2Zvcm0pLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1sYXllcnMtdGV4dFwiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzKHByb3ZpZGVycyQkMSkge1xuICAgIHByb3ZpZGVycyQkMS5nZW5lcmF0ZUxheWVyc1RleHQgPSBmdW5jdGlvbiAobm9kZSwgbm9kZU1ldGEpIHtcbiAgICAgIHZhciB0aXRsZSA9IG5vZGVNZXRhLnRpdGxlLFxuICAgICAgICAgIHRyYW5zZm9ybSA9IG5vZGVNZXRhLnRyYW5zZm9ybSxcbiAgICAgICAgICBleHRyYSA9IG5vZGVNZXRhLmV4dHJhO1xuICAgICAgdmFyIHdpZHRoID0gbnVsbDtcbiAgICAgIHZhciBoZWlnaHQgPSBudWxsO1xuXG4gICAgICBpZiAoSVNfSUUpIHtcbiAgICAgICAgdmFyIGNvbXB1dGVkRm9udFNpemUgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG5vZGUpLmZvbnRTaXplLCAxMCk7XG4gICAgICAgIHZhciBib3VuZGluZ0NsaWVudFJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB3aWR0aCA9IGJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCAvIGNvbXB1dGVkRm9udFNpemU7XG4gICAgICAgIGhlaWdodCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLyBjb21wdXRlZEZvbnRTaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmF1dG9BMTF5ICYmICF0aXRsZSkge1xuICAgICAgICBleHRyYS5hdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtub2RlLCBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHtcbiAgICAgICAgY29udGVudDogbm9kZS5pbm5lckhUTUwsXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIGV4dHJhOiBleHRyYSxcbiAgICAgICAgd2F0Y2hhYmxlOiB0cnVlXG4gICAgICB9KV0pO1xuICAgIH07XG4gIH1cbn07XG5cbnZhciBDTEVBTl9DT05URU5UX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXFxcIlwiLCAndWcnKTtcbnZhciBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSA9IFsxMTA1OTIwLCAxMTEyMzE5XTtcbmZ1bmN0aW9uIGhleFZhbHVlRnJvbUNvbnRlbnQoY29udGVudCkge1xuICB2YXIgY2xlYW5lZCA9IGNvbnRlbnQucmVwbGFjZShDTEVBTl9DT05URU5UX1BBVFRFUk4sICcnKTtcbiAgdmFyIGNvZGVQb2ludCA9IGNvZGVQb2ludEF0KGNsZWFuZWQsIDApO1xuICB2YXIgaXNQcmVwZW5kVGVuID0gY29kZVBvaW50ID49IFNFQ09OREFSWV9VTklDT0RFX1JBTkdFWzBdICYmIGNvZGVQb2ludCA8PSBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRVsxXTtcbiAgdmFyIGlzRG91YmxlZCA9IGNsZWFuZWQubGVuZ3RoID09PSAyID8gY2xlYW5lZFswXSA9PT0gY2xlYW5lZFsxXSA6IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBpc0RvdWJsZWQgPyB0b0hleChjbGVhbmVkWzBdKSA6IHRvSGV4KGNsZWFuZWQpLFxuICAgIGlzU2Vjb25kYXJ5OiBpc1ByZXBlbmRUZW4gfHwgaXNEb3VibGVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlLCBwb3NpdGlvbikge1xuICB2YXIgcGVuZGluZ0F0dHJpYnV0ZSA9IFwiXCIuY29uY2F0KERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORykuY29uY2F0KHBvc2l0aW9uLnJlcGxhY2UoJzonLCAnLScpKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUocGVuZGluZ0F0dHJpYnV0ZSkgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgbm9kZSBpcyBhbHJlYWR5IGJlaW5nIHByb2Nlc3NlZFxuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0b0FycmF5KG5vZGUuY2hpbGRyZW4pO1xuICAgIHZhciBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCA9IGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgcmV0dXJuIGMuZ2V0QXR0cmlidXRlKERBVEFfRkFfUFNFVURPX0VMRU1FTlQpID09PSBwb3NpdGlvbjtcbiAgICB9KVswXTtcbiAgICB2YXIgc3R5bGVzID0gV0lORE9XLmdldENvbXB1dGVkU3R5bGUobm9kZSwgcG9zaXRpb24pO1xuICAgIHZhciBmb250RmFtaWx5ID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtZmFtaWx5JykubWF0Y2goRk9OVF9GQU1JTFlfUEFUVEVSTik7XG4gICAgdmFyIGZvbnRXZWlnaHQgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC13ZWlnaHQnKTtcbiAgICB2YXIgY29udGVudCA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG5cbiAgICBpZiAoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgJiYgIWZvbnRGYW1pbHkpIHtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkIGl0IGJ1dCB0aGUgY3VycmVudCBjb21wdXRlZCBzdHlsZSBkb2VzIG5vdCByZXN1bHQgaW4gYSBmb250LWZhbWlseSxcbiAgICAgIC8vIHRoYXQgcHJvYmFibHkgbWVhbnMgdGhhdCBhIGNsYXNzIG5hbWUgdGhhdCB3YXMgcHJldmlvdXNseSBwcmVzZW50IHRvIG1ha2UgdGhlIGljb24gaGFzIGJlZW5cbiAgICAgIC8vIHJlbW92ZWQuIFNvIHdlIG5vdyBzaG91bGQgZGVsZXRlIHRoZSBpY29uLlxuICAgICAgbm9kZS5yZW1vdmVDaGlsZChhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCk7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZm9udEZhbWlseSAmJiBjb250ZW50ICE9PSAnbm9uZScgJiYgY29udGVudCAhPT0gJycpIHtcbiAgICAgIHZhciBfY29udGVudCA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG5cbiAgICAgIHZhciBmYW1pbHkgPSB+WydTaGFycCddLmluZGV4T2YoZm9udEZhbWlseVsyXSkgPyBGQU1JTFlfU0hBUlAgOiBGQU1JTFlfQ0xBU1NJQztcbiAgICAgIHZhciBwcmVmaXggPSB+WydTb2xpZCcsICdSZWd1bGFyJywgJ0xpZ2h0JywgJ1RoaW4nLCAnRHVvdG9uZScsICdCcmFuZHMnLCAnS2l0J10uaW5kZXhPZihmb250RmFtaWx5WzJdKSA/IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW2ZvbnRGYW1pbHlbMl0udG9Mb3dlckNhc2UoKV0gOiBGT05UX1dFSUdIVF9UT19QUkVGSVhbZmFtaWx5XVtmb250V2VpZ2h0XTtcblxuICAgICAgdmFyIF9oZXhWYWx1ZUZyb21Db250ZW50ID0gaGV4VmFsdWVGcm9tQ29udGVudChfY29udGVudCksXG4gICAgICAgICAgaGV4VmFsdWUgPSBfaGV4VmFsdWVGcm9tQ29udGVudC52YWx1ZSxcbiAgICAgICAgICBpc1NlY29uZGFyeSA9IF9oZXhWYWx1ZUZyb21Db250ZW50LmlzU2Vjb25kYXJ5O1xuXG4gICAgICB2YXIgaXNWNCA9IGZvbnRGYW1pbHlbMF0uc3RhcnRzV2l0aCgnRm9udEF3ZXNvbWUnKTtcbiAgICAgIHZhciBpY29uTmFtZSA9IGJ5VW5pY29kZShwcmVmaXgsIGhleFZhbHVlKTtcbiAgICAgIHZhciBpY29uSWRlbnRpZmllciA9IGljb25OYW1lO1xuXG4gICAgICBpZiAoaXNWNCkge1xuICAgICAgICB2YXIgaWNvbk5hbWU0ID0gYnlPbGRVbmljb2RlKGhleFZhbHVlKTtcblxuICAgICAgICBpZiAoaWNvbk5hbWU0Lmljb25OYW1lICYmIGljb25OYW1lNC5wcmVmaXgpIHtcbiAgICAgICAgICBpY29uTmFtZSA9IGljb25OYW1lNC5pY29uTmFtZTtcbiAgICAgICAgICBwcmVmaXggPSBpY29uTmFtZTQucHJlZml4O1xuICAgICAgICB9XG4gICAgICB9IC8vIE9ubHkgY29udmVydCB0aGUgcHNldWRvIGVsZW1lbnQgaW4gdGhpcyA6OmJlZm9yZS86OmFmdGVyIHBvc2l0aW9uIGludG8gYW4gaWNvbiBpZiB3ZSBoYXZlbid0XG4gICAgICAvLyBhbHJlYWR5IGRvbmUgc28gd2l0aCB0aGUgc2FtZSBwcmVmaXggYW5kIGljb25OYW1lXG5cblxuICAgICAgaWYgKGljb25OYW1lICYmICFpc1NlY29uZGFyeSAmJiAoIWFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50IHx8IGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50LmdldEF0dHJpYnV0ZShEQVRBX1BSRUZJWCkgIT09IHByZWZpeCB8fCBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudC5nZXRBdHRyaWJ1dGUoREFUQV9JQ09OKSAhPT0gaWNvbklkZW50aWZpZXIpKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUsIGljb25JZGVudGlmaWVyKTtcblxuICAgICAgICBpZiAoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpIHtcbiAgICAgICAgICAvLyBEZWxldGUgdGhlIG9sZCBvbmUsIHNpbmNlIHdlJ3JlIHJlcGxhY2luZyBpdCB3aXRoIGEgbmV3IG9uZVxuICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1ldGEgPSBibGFua01ldGEoKTtcbiAgICAgICAgdmFyIGV4dHJhID0gbWV0YS5leHRyYTtcbiAgICAgICAgZXh0cmEuYXR0cmlidXRlc1tEQVRBX0ZBX1BTRVVET19FTEVNRU5UXSA9IHBvc2l0aW9uO1xuICAgICAgICBmaW5kSWNvbihpY29uTmFtZSwgcHJlZml4KS50aGVuKGZ1bmN0aW9uIChtYWluKSB7XG4gICAgICAgICAgdmFyIF9hYnN0cmFjdCA9IG1ha2VJbmxpbmVTdmdBYnN0cmFjdChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWV0YSksIHt9LCB7XG4gICAgICAgICAgICBpY29uczoge1xuICAgICAgICAgICAgICBtYWluOiBtYWluLFxuICAgICAgICAgICAgICBtYXNrOiBlbXB0eUNhbm9uaWNhbEljb24oKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICAgICAgaWNvbk5hbWU6IGljb25JZGVudGlmaWVyLFxuICAgICAgICAgICAgZXh0cmE6IGV4dHJhLFxuICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlXG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgdmFyIGVsZW1lbnQgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnOjpiZWZvcmUnKSB7XG4gICAgICAgICAgICBub2RlLmluc2VydEJlZm9yZShlbGVtZW50LCBub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnQub3V0ZXJIVE1MID0gX2Fic3RyYWN0Lm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIHRvSHRtbChhKTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlKG5vZGUpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKFtyZXBsYWNlRm9yUG9zaXRpb24obm9kZSwgJzo6YmVmb3JlJyksIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlLCAnOjphZnRlcicpXSk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NhYmxlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSAhPT0gZG9jdW1lbnQuaGVhZCAmJiAhflRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTLmluZGV4T2Yobm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpICYmICFub2RlLmdldEF0dHJpYnV0ZShEQVRBX0ZBX1BTRVVET19FTEVNRU5UKSAmJiAoIW5vZGUucGFyZW50Tm9kZSB8fCBub2RlLnBhcmVudE5vZGUudGFnTmFtZSAhPT0gJ3N2ZycpO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hQc2V1ZG9FbGVtZW50cyhyb290KSB7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIG9wZXJhdGlvbnMgPSB0b0FycmF5KHJvb3QucXVlcnlTZWxlY3RvckFsbCgnKicpKS5maWx0ZXIocHJvY2Vzc2FibGUpLm1hcChyZXBsYWNlKTtcbiAgICB2YXIgZW5kID0gcGVyZi5iZWdpbignc2VhcmNoUHNldWRvRWxlbWVudHMnKTtcbiAgICBkaXNhYmxlT2JzZXJ2YXRpb24oKTtcbiAgICBQcm9taXNlLmFsbChvcGVyYXRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGVuZCgpO1xuICAgICAgZW5hYmxlT2JzZXJ2YXRpb24oKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBlbmQoKTtcbiAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7XG4gICAgICByZWplY3QoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbnZhciBQc2V1ZG9FbGVtZW50cyA9IHtcbiAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOiBmdW5jdGlvbiBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzKGFjY3VtdWxhdG9yKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBzZWFyY2hQc2V1ZG9FbGVtZW50cztcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHtcbiAgICBwcm92aWRlcnMkJDEucHNldWRvRWxlbWVudHMyc3ZnID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgdmFyIF9wYXJhbXMkbm9kZSA9IHBhcmFtcy5ub2RlLFxuICAgICAgICAgIG5vZGUgPSBfcGFyYW1zJG5vZGUgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRub2RlO1xuXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbnZhciBfdW53YXRjaGVkID0gZmFsc2U7XG52YXIgTXV0YXRpb25PYnNlcnZlciQxID0ge1xuICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tOiB7XG4gICAgICAgIHVud2F0Y2g6IGZ1bmN0aW9uIHVud2F0Y2goKSB7XG4gICAgICAgICAgZGlzYWJsZU9ic2VydmF0aW9uKCk7XG4gICAgICAgICAgX3Vud2F0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBob29rczogZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvb3RzdHJhcDogZnVuY3Rpb24gYm9vdHN0cmFwKCkge1xuICAgICAgICBvYnNlcnZlKGNoYWluSG9va3MoJ211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MnLCB7fSkpO1xuICAgICAgfSxcbiAgICAgIG5vQXV0bzogZnVuY3Rpb24gbm9BdXRvKCkge1xuICAgICAgICBkaXNjb25uZWN0KCk7XG4gICAgICB9LFxuICAgICAgd2F0Y2g6IGZ1bmN0aW9uIHdhdGNoKHBhcmFtcykge1xuICAgICAgICB2YXIgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBwYXJhbXMub2JzZXJ2ZU11dGF0aW9uc1Jvb3Q7XG5cbiAgICAgICAgaWYgKF91bndhdGNoZWQpIHtcbiAgICAgICAgICBlbmFibGVPYnNlcnZhdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic2VydmUoY2hhaW5Ib29rcygnbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcycsIHtcbiAgICAgICAgICAgIG9ic2VydmVNdXRhdGlvbnNSb290OiBvYnNlcnZlTXV0YXRpb25zUm9vdFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbnZhciBwYXJzZVRyYW5zZm9ybVN0cmluZyA9IGZ1bmN0aW9uIHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZykge1xuICB2YXIgdHJhbnNmb3JtID0ge1xuICAgIHNpemU6IDE2LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBmbGlwWDogZmFsc2UsXG4gICAgZmxpcFk6IGZhbHNlLFxuICAgIHJvdGF0ZTogMFxuICB9O1xuICByZXR1cm4gdHJhbnNmb3JtU3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbikge1xuICAgIHZhciBwYXJ0cyA9IG4udG9Mb3dlckNhc2UoKS5zcGxpdCgnLScpO1xuICAgIHZhciBmaXJzdCA9IHBhcnRzWzBdO1xuICAgIHZhciByZXN0ID0gcGFydHMuc2xpY2UoMSkuam9pbignLScpO1xuXG4gICAgaWYgKGZpcnN0ICYmIHJlc3QgPT09ICdoJykge1xuICAgICAgYWNjLmZsaXBYID0gdHJ1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgaWYgKGZpcnN0ICYmIHJlc3QgPT09ICd2Jykge1xuICAgICAgYWNjLmZsaXBZID0gdHJ1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgcmVzdCA9IHBhcnNlRmxvYXQocmVzdCk7XG5cbiAgICBpZiAoaXNOYU4ocmVzdCkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaXJzdCkge1xuICAgICAgY2FzZSAnZ3Jvdyc6XG4gICAgICAgIGFjYy5zaXplID0gYWNjLnNpemUgKyByZXN0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2hyaW5rJzpcbiAgICAgICAgYWNjLnNpemUgPSBhY2Muc2l6ZSAtIHJlc3Q7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgYWNjLnggPSBhY2MueCAtIHJlc3Q7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGFjYy54ID0gYWNjLnggKyByZXN0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndXAnOlxuICAgICAgICBhY2MueSA9IGFjYy55IC0gcmVzdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICBhY2MueSA9IGFjYy55ICsgcmVzdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JvdGF0ZSc6XG4gICAgICAgIGFjYy5yb3RhdGUgPSBhY2Mucm90YXRlICsgcmVzdDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgdHJhbnNmb3JtKTtcbn07XG52YXIgUG93ZXJUcmFuc2Zvcm1zID0ge1xuICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2U6IHtcbiAgICAgICAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0odHJhbnNmb3JtU3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBob29rczogZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlTm9kZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIHBhcnNlTm9kZUF0dHJpYnV0ZXMoYWNjdW11bGF0b3IsIG5vZGUpIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmluZyA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWZhLXRyYW5zZm9ybScpO1xuXG4gICAgICAgIGlmICh0cmFuc2Zvcm1TdHJpbmcpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci50cmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVN0cmluZyh0cmFuc2Zvcm1TdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMpIHtcbiAgICBwcm92aWRlcnMuZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBtYWluID0gX3JlZi5tYWluLFxuICAgICAgICAgIHRyYW5zZm9ybSA9IF9yZWYudHJhbnNmb3JtLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoID0gX3JlZi5jb250YWluZXJXaWR0aCxcbiAgICAgICAgICBpY29uV2lkdGggPSBfcmVmLmljb25XaWR0aDtcbiAgICAgIHZhciBvdXRlciA9IHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoY29udGFpbmVyV2lkdGggLyAyLCBcIiAyNTYpXCIpXG4gICAgICB9O1xuICAgICAgdmFyIGlubmVyVHJhbnNsYXRlID0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54ICogMzIsIFwiLCBcIikuY29uY2F0KHRyYW5zZm9ybS55ICogMzIsIFwiKSBcIik7XG4gICAgICB2YXIgaW5uZXJTY2FsZSA9IFwic2NhbGUoXCIuY29uY2F0KHRyYW5zZm9ybS5zaXplIC8gMTYgKiAodHJhbnNmb3JtLmZsaXBYID8gLTEgOiAxKSwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0uZmxpcFkgPyAtMSA6IDEpLCBcIikgXCIpO1xuICAgICAgdmFyIGlubmVyUm90YXRlID0gXCJyb3RhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS5yb3RhdGUsIFwiIDAgMClcIik7XG4gICAgICB2YXIgaW5uZXIgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJcIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsIFwiIFwiKS5jb25jYXQoaW5uZXJTY2FsZSwgXCIgXCIpLmNvbmNhdChpbm5lclJvdGF0ZSlcbiAgICAgIH07XG4gICAgICB2YXIgcGF0aCA9IHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCBcIiAtMjU2KVwiKVxuICAgICAgfTtcbiAgICAgIHZhciBvcGVyYXRpb25zID0ge1xuICAgICAgICBvdXRlcjogb3V0ZXIsXG4gICAgICAgIGlubmVyOiBpbm5lcixcbiAgICAgICAgcGF0aDogcGF0aFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJ2cnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgb3BlcmF0aW9ucy5vdXRlciksXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHRhZzogJ2cnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBvcGVyYXRpb25zLmlubmVyKSxcbiAgICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICAgIHRhZzogbWFpbi5pY29uLnRhZyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBtYWluLmljb24uY2hpbGRyZW4sXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWFpbi5pY29uLmF0dHJpYnV0ZXMpLCBvcGVyYXRpb25zLnBhdGgpXG4gICAgICAgICAgfV1cbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfTtcbiAgfVxufTtcblxudmFyIEFMTF9TUEFDRSA9IHtcbiAgeDogMCxcbiAgeTogMCxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJSdcbn07XG5cbmZ1bmN0aW9uIGZpbGxCbGFjayhfYWJzdHJhY3QpIHtcbiAgdmFyIGZvcmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gIGlmIChfYWJzdHJhY3QuYXR0cmlidXRlcyAmJiAoX2Fic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCB8fCBmb3JjZSkpIHtcbiAgICBfYWJzdHJhY3QuYXR0cmlidXRlcy5maWxsID0gJ2JsYWNrJztcbiAgfVxuXG4gIHJldHVybiBfYWJzdHJhY3Q7XG59XG5cbmZ1bmN0aW9uIGRlR3JvdXAoX2Fic3RyYWN0Mikge1xuICBpZiAoX2Fic3RyYWN0Mi50YWcgPT09ICdnJykge1xuICAgIHJldHVybiBfYWJzdHJhY3QyLmNoaWxkcmVuO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbX2Fic3RyYWN0Ml07XG4gIH1cbn1cblxudmFyIE1hc2tzID0ge1xuICBob29rczogZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlTm9kZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIHBhcnNlTm9kZUF0dHJpYnV0ZXMoYWNjdW11bGF0b3IsIG5vZGUpIHtcbiAgICAgICAgdmFyIG1hc2tEYXRhID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmEtbWFzaycpO1xuICAgICAgICB2YXIgbWFzayA9ICFtYXNrRGF0YSA/IGVtcHR5Q2Fub25pY2FsSWNvbigpIDogZ2V0Q2Fub25pY2FsSWNvbihtYXNrRGF0YS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBpLnRyaW0oKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmICghbWFzay5wcmVmaXgpIHtcbiAgICAgICAgICBtYXNrLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjY3VtdWxhdG9yLm1hc2sgPSBtYXNrO1xuICAgICAgICBhY2N1bXVsYXRvci5tYXNrSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS1tYXNrLWlkJyk7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXMocHJvdmlkZXJzKSB7XG4gICAgcHJvdmlkZXJzLmdlbmVyYXRlQWJzdHJhY3RNYXNrID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgICAgYXR0cmlidXRlcyA9IF9yZWYuYXR0cmlidXRlcyxcbiAgICAgICAgICBtYWluID0gX3JlZi5tYWluLFxuICAgICAgICAgIG1hc2sgPSBfcmVmLm1hc2ssXG4gICAgICAgICAgZXhwbGljaXRNYXNrSWQgPSBfcmVmLm1hc2tJZCxcbiAgICAgICAgICB0cmFuc2Zvcm0gPSBfcmVmLnRyYW5zZm9ybTtcbiAgICAgIHZhciBtYWluV2lkdGggPSBtYWluLndpZHRoLFxuICAgICAgICAgIG1haW5QYXRoID0gbWFpbi5pY29uO1xuICAgICAgdmFyIG1hc2tXaWR0aCA9IG1hc2sud2lkdGgsXG4gICAgICAgICAgbWFza1BhdGggPSBtYXNrLmljb247XG4gICAgICB2YXIgdHJhbnMgPSB0cmFuc2Zvcm1Gb3JTdmcoe1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IG1hc2tXaWR0aCxcbiAgICAgICAgaWNvbldpZHRoOiBtYWluV2lkdGhcbiAgICAgIH0pO1xuICAgICAgdmFyIG1hc2tSZWN0ID0ge1xuICAgICAgICB0YWc6ICdyZWN0JyxcbiAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFMTF9TUEFDRSksIHt9LCB7XG4gICAgICAgICAgZmlsbDogJ3doaXRlJ1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIHZhciBtYXNrSW5uZXJHcm91cENoaWxkcmVuTWl4aW4gPSBtYWluUGF0aC5jaGlsZHJlbiA/IHtcbiAgICAgICAgY2hpbGRyZW46IG1haW5QYXRoLmNoaWxkcmVuLm1hcChmaWxsQmxhY2spXG4gICAgICB9IDoge307XG4gICAgICB2YXIgbWFza0lubmVyR3JvdXAgPSB7XG4gICAgICAgIHRhZzogJ2cnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgdHJhbnMuaW5uZXIpLFxuICAgICAgICBjaGlsZHJlbjogW2ZpbGxCbGFjayhfb2JqZWN0U3ByZWFkMih7XG4gICAgICAgICAgdGFnOiBtYWluUGF0aC50YWcsXG4gICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1haW5QYXRoLmF0dHJpYnV0ZXMpLCB0cmFucy5wYXRoKVxuICAgICAgICB9LCBtYXNrSW5uZXJHcm91cENoaWxkcmVuTWl4aW4pKV1cbiAgICAgIH07XG4gICAgICB2YXIgbWFza091dGVyR3JvdXAgPSB7XG4gICAgICAgIHRhZzogJ2cnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgdHJhbnMub3V0ZXIpLFxuICAgICAgICBjaGlsZHJlbjogW21hc2tJbm5lckdyb3VwXVxuICAgICAgfTtcbiAgICAgIHZhciBtYXNrSWQgPSBcIm1hc2stXCIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTtcbiAgICAgIHZhciBjbGlwSWQgPSBcImNsaXAtXCIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTtcbiAgICAgIHZhciBtYXNrVGFnID0ge1xuICAgICAgICB0YWc6ICdtYXNrJyxcbiAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFMTF9TUEFDRSksIHt9LCB7XG4gICAgICAgICAgaWQ6IG1hc2tJZCxcbiAgICAgICAgICBtYXNrVW5pdHM6ICd1c2VyU3BhY2VPblVzZScsXG4gICAgICAgICAgbWFza0NvbnRlbnRVbml0czogJ3VzZXJTcGFjZU9uVXNlJ1xuICAgICAgICB9KSxcbiAgICAgICAgY2hpbGRyZW46IFttYXNrUmVjdCwgbWFza091dGVyR3JvdXBdXG4gICAgICB9O1xuICAgICAgdmFyIGRlZnMgPSB7XG4gICAgICAgIHRhZzogJ2RlZnMnLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0YWc6ICdjbGlwUGF0aCcsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgaWQ6IGNsaXBJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hpbGRyZW46IGRlR3JvdXAobWFza1BhdGgpXG4gICAgICAgIH0sIG1hc2tUYWddXG4gICAgICB9O1xuICAgICAgY2hpbGRyZW4ucHVzaChkZWZzLCB7XG4gICAgICAgIHRhZzogJ3JlY3QnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7XG4gICAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgICAgJ2NsaXAtcGF0aCc6IFwidXJsKCNcIi5jb25jYXQoY2xpcElkLCBcIilcIiksXG4gICAgICAgICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChtYXNrSWQsIFwiKVwiKVxuICAgICAgICB9LCBBTExfU1BBQ0UpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICAgICAgfTtcbiAgICB9O1xuICB9XG59O1xuXG52YXIgTWlzc2luZ0ljb25JbmRpY2F0b3IgPSB7XG4gIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMpIHtcbiAgICB2YXIgcmVkdWNlTW90aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoV0lORE9XLm1hdGNoTWVkaWEpIHtcbiAgICAgIHJlZHVjZU1vdGlvbiA9IFdJTkRPVy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7XG4gICAgfVxuXG4gICAgcHJvdmlkZXJzLm1pc3NpbmdJY29uQWJzdHJhY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZ0NoaWxkcmVuID0gW107XG4gICAgICB2YXIgRklMTCA9IHtcbiAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcidcbiAgICAgIH07XG4gICAgICB2YXIgQU5JTUFUSU9OX0JBU0UgPSB7XG4gICAgICAgIGF0dHJpYnV0ZVR5cGU6ICdYTUwnLFxuICAgICAgICByZXBlYXRDb3VudDogJ2luZGVmaW5pdGUnLFxuICAgICAgICBkdXI6ICcycydcbiAgICAgIH07IC8vIFJpbmdcblxuICAgICAgZ0NoaWxkcmVuLnB1c2goe1xuICAgICAgICB0YWc6ICdwYXRoJyxcbiAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEZJTEwpLCB7fSwge1xuICAgICAgICAgIGQ6ICdNMTU2LjUsNDQ3LjdsLTEyLjYsMjkuNWMtMTguNy05LjUtMzUuOS0yMS4yLTUxLjUtMzQuOWwyMi43LTIyLjdDMTI3LjYsNDMwLjUsMTQxLjUsNDQwLDE1Ni41LDQ0Ny43eiBNNDAuNiwyNzJIOC41IGMxLjQsMjEuMiw1LjQsNDEuNywxMS43LDYxLjFMNTAsMzIxLjJDNDUuMSwzMDUuNSw0MS44LDI4OSw0MC42LDI3MnogTTQwLjYsMjQwYzEuNC0xOC44LDUuMi0zNywxMS4xLTU0LjFsLTI5LjUtMTIuNiBDMTQuNywxOTQuMywxMCwyMTYuNyw4LjUsMjQwSDQwLjZ6IE02NC4zLDE1Ni41YzcuOC0xNC45LDE3LjItMjguOCwyOC4xLTQxLjVMNjkuNyw5Mi4zYy0xMy43LDE1LjYtMjUuNSwzMi44LTM0LjksNTEuNSBMNjQuMywxNTYuNXogTTM5Nyw0MTkuNmMtMTMuOSwxMi0yOS40LDIyLjMtNDYuMSwzMC40bDExLjksMjkuOGMyMC43LTkuOSwzOS44LTIyLjYsNTYuOS0zNy42TDM5Nyw0MTkuNnogTTExNSw5Mi40IGMxMy45LTEyLDI5LjQtMjIuMyw0Ni4xLTMwLjRsLTExLjktMjkuOGMtMjAuNyw5LjktMzkuOCwyMi42LTU2LjgsMzcuNkwxMTUsOTIuNHogTTQ0Ny43LDM1NS41Yy03LjgsMTQuOS0xNy4yLDI4LjgtMjguMSw0MS41IGwyMi43LDIyLjdjMTMuNy0xNS42LDI1LjUtMzIuOSwzNC45LTUxLjVMNDQ3LjcsMzU1LjV6IE00NzEuNCwyNzJjLTEuNCwxOC44LTUuMiwzNy0xMS4xLDU0LjFsMjkuNSwxMi42IGM3LjUtMjEuMSwxMi4yLTQzLjUsMTMuNi02Ni44SDQ3MS40eiBNMzIxLjIsNDYyYy0xNS43LDUtMzIuMiw4LjItNDkuMiw5LjR2MzIuMWMyMS4yLTEuNCw0MS43LTUuNCw2MS4xLTExLjdMMzIxLjIsNDYyeiBNMjQwLDQ3MS40Yy0xOC44LTEuNC0zNy01LjItNTQuMS0xMS4xbC0xMi42LDI5LjVjMjEuMSw3LjUsNDMuNSwxMi4yLDY2LjgsMTMuNlY0NzEuNHogTTQ2MiwxOTAuOGM1LDE1LjcsOC4yLDMyLjIsOS40LDQ5LjJoMzIuMSBjLTEuNC0yMS4yLTUuNC00MS43LTExLjctNjEuMUw0NjIsMTkwLjh6IE05Mi40LDM5N2MtMTItMTMuOS0yMi4zLTI5LjQtMzAuNC00Ni4xbC0yOS44LDExLjljOS45LDIwLjcsMjIuNiwzOS44LDM3LjYsNTYuOSBMOTIuNCwzOTd6IE0yNzIsNDAuNmMxOC44LDEuNCwzNi45LDUuMiw1NC4xLDExLjFsMTIuNi0yOS41QzMxNy43LDE0LjcsMjk1LjMsMTAsMjcyLDguNVY0MC42eiBNMTkwLjgsNTAgYzE1LjctNSwzMi4yLTguMiw0OS4yLTkuNFY4LjVjLTIxLjIsMS40LTQxLjcsNS40LTYxLjEsMTEuN0wxOTAuOCw1MHogTTQ0Mi4zLDkyLjNMNDE5LjYsMTE1YzEyLDEzLjksMjIuMywyOS40LDMwLjUsNDYuMSBsMjkuOC0xMS45QzQ3MCwxMjguNSw0NTcuMywxMDkuNCw0NDIuMyw5Mi4zeiBNMzk3LDkyLjRsMjIuNy0yMi43Yy0xNS42LTEzLjctMzIuOC0yNS41LTUxLjUtMzQuOWwtMTIuNiwyOS41IEMzNzAuNCw3Mi4xLDM4NC40LDgxLjUsMzk3LDkyLjR6J1xuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBPUEFDSVRZX0FOSU1BVEUgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgQU5JTUFUSU9OX0JBU0UpLCB7fSwge1xuICAgICAgICBhdHRyaWJ1dGVOYW1lOiAnb3BhY2l0eSdcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZG90ID0ge1xuICAgICAgICB0YWc6ICdjaXJjbGUnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7XG4gICAgICAgICAgY3g6ICcyNTYnLFxuICAgICAgICAgIGN5OiAnMzY0JyxcbiAgICAgICAgICByOiAnMjgnXG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgIH07XG5cbiAgICAgIGlmICghcmVkdWNlTW90aW9uKSB7XG4gICAgICAgIGRvdC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICB0YWc6ICdhbmltYXRlJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgQU5JTUFUSU9OX0JBU0UpLCB7fSwge1xuICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogJ3InLFxuICAgICAgICAgICAgdmFsdWVzOiAnMjg7MTQ7Mjg7Mjg7MTQ7Mjg7J1xuICAgICAgICAgIH0pXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0YWc6ICdhbmltYXRlJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgT1BBQ0lUWV9BTklNQVRFKSwge30sIHtcbiAgICAgICAgICAgIHZhbHVlczogJzE7MDsxOzE7MDsxOydcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ0NoaWxkcmVuLnB1c2goZG90KTtcbiAgICAgIGdDaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdGFnOiAncGF0aCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHtcbiAgICAgICAgICBvcGFjaXR5OiAnMScsXG4gICAgICAgICAgZDogJ00yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnonXG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogcmVkdWNlTW90aW9uID8gW10gOiBbe1xuICAgICAgICAgIHRhZzogJ2FuaW1hdGUnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBPUEFDSVRZX0FOSU1BVEUpLCB7fSwge1xuICAgICAgICAgICAgdmFsdWVzOiAnMTswOzA7MDswOzE7J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1dXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHtcbiAgICAgICAgLy8gRXhjbGFtYXRpb25cbiAgICAgICAgZ0NoaWxkcmVuLnB1c2goe1xuICAgICAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHtcbiAgICAgICAgICAgIG9wYWNpdHk6ICcwJyxcbiAgICAgICAgICAgIGQ6ICdNMjMyLjUsMTM0LjVsNywxNjhjMC4zLDYuNCw1LjYsMTEuNSwxMiwxMS41aDljNi40LDAsMTEuNy01LjEsMTItMTEuNWw3LTE2OGMwLjMtNi44LTUuMi0xMi41LTEyLTEyLjVoLTIzIEMyMzcuNywxMjIsMjMyLjIsMTI3LjcsMjMyLjUsMTM0LjV6J1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgICAgdGFnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgT1BBQ0lUWV9BTklNQVRFKSwge30sIHtcbiAgICAgICAgICAgICAgdmFsdWVzOiAnMDswOzE7MTswOzA7J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiAnZycsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAnY2xhc3MnOiAnbWlzc2luZydcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IGdDaGlsZHJlblxuICAgICAgfTtcbiAgICB9O1xuICB9XG59O1xuXG52YXIgU3ZnU3ltYm9scyA9IHtcbiAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlKSB7XG4gICAgICAgIHZhciBzeW1ib2xEYXRhID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmEtc3ltYm9sJyk7XG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xEYXRhID09PSBudWxsID8gZmFsc2UgOiBzeW1ib2xEYXRhID09PSAnJyA/IHRydWUgOiBzeW1ib2xEYXRhO1xuICAgICAgICBhY2N1bXVsYXRvclsnc3ltYm9sJ10gPSBzeW1ib2w7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuXG52YXIgcGx1Z2lucyA9IFtJbmplY3RDU1MsIFJlcGxhY2VFbGVtZW50cywgTGF5ZXJzLCBMYXllcnNDb3VudGVyLCBMYXllcnNUZXh0LCBQc2V1ZG9FbGVtZW50cywgTXV0YXRpb25PYnNlcnZlciQxLCBQb3dlclRyYW5zZm9ybXMsIE1hc2tzLCBNaXNzaW5nSWNvbkluZGljYXRvciwgU3ZnU3ltYm9sc107XG5cbnJlZ2lzdGVyUGx1Z2lucyhwbHVnaW5zLCB7XG4gIG1peG91dHNUbzogYXBpXG59KTtcbnZhciBub0F1dG8kMSA9IGFwaS5ub0F1dG87XG52YXIgY29uZmlnJDEgPSBhcGkuY29uZmlnO1xudmFyIGxpYnJhcnkkMSA9IGFwaS5saWJyYXJ5O1xudmFyIGRvbSQxID0gYXBpLmRvbTtcbnZhciBwYXJzZSQxID0gYXBpLnBhcnNlO1xudmFyIGZpbmRJY29uRGVmaW5pdGlvbiQxID0gYXBpLmZpbmRJY29uRGVmaW5pdGlvbjtcbnZhciB0b0h0bWwkMSA9IGFwaS50b0h0bWw7XG52YXIgaWNvbiA9IGFwaS5pY29uO1xudmFyIGxheWVyID0gYXBpLmxheWVyO1xudmFyIHRleHQgPSBhcGkudGV4dDtcbnZhciBjb3VudGVyID0gYXBpLmNvdW50ZXI7XG5cbmV4cG9ydCB7IG5vQXV0byQxIGFzIG5vQXV0bywgY29uZmlnJDEgYXMgY29uZmlnLCBsaWJyYXJ5JDEgYXMgbGlicmFyeSwgZG9tJDEgYXMgZG9tLCBwYXJzZSQxIGFzIHBhcnNlLCBmaW5kSWNvbkRlZmluaXRpb24kMSBhcyBmaW5kSWNvbkRlZmluaXRpb24sIHRvSHRtbCQxIGFzIHRvSHRtbCwgaWNvbiwgbGF5ZXIsIHRleHQsIGNvdW50ZXIsIGFwaSB9O1xuIiwgImltcG9ydCB7IHBhcnNlLCBpY29uIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICByZXR1cm4gYXJyMjtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxuLy8gR2V0IENTUyBjbGFzcyBsaXN0IGZyb20gYSBwcm9wcyBvYmplY3RcbmZ1bmN0aW9uIGNsYXNzTGlzdChwcm9wcykge1xuICB2YXIgX2NsYXNzZXM7XG5cbiAgdmFyIGJlYXQgPSBwcm9wcy5iZWF0LFxuICAgICAgZmFkZSA9IHByb3BzLmZhZGUsXG4gICAgICBiZWF0RmFkZSA9IHByb3BzLmJlYXRGYWRlLFxuICAgICAgYm91bmNlID0gcHJvcHMuYm91bmNlLFxuICAgICAgc2hha2UgPSBwcm9wcy5zaGFrZSxcbiAgICAgIGZsYXNoID0gcHJvcHMuZmxhc2gsXG4gICAgICBzcGluID0gcHJvcHMuc3BpbixcbiAgICAgIHNwaW5QdWxzZSA9IHByb3BzLnNwaW5QdWxzZSxcbiAgICAgIHNwaW5SZXZlcnNlID0gcHJvcHMuc3BpblJldmVyc2UsXG4gICAgICBwdWxzZSA9IHByb3BzLnB1bHNlLFxuICAgICAgZml4ZWRXaWR0aCA9IHByb3BzLmZpeGVkV2lkdGgsXG4gICAgICBpbnZlcnNlID0gcHJvcHMuaW52ZXJzZSxcbiAgICAgIGJvcmRlciA9IHByb3BzLmJvcmRlcixcbiAgICAgIGxpc3RJdGVtID0gcHJvcHMubGlzdEl0ZW0sXG4gICAgICBmbGlwID0gcHJvcHMuZmxpcCxcbiAgICAgIHNpemUgPSBwcm9wcy5zaXplLFxuICAgICAgcm90YXRpb24gPSBwcm9wcy5yb3RhdGlvbixcbiAgICAgIHB1bGwgPSBwcm9wcy5wdWxsOyAvLyBtYXAgb2YgQ1NTIGNsYXNzIG5hbWVzIHRvIHByb3BlcnRpZXNcblxuICB2YXIgY2xhc3NlcyA9IChfY2xhc3NlcyA9IHtcbiAgICAnZmEtYmVhdCc6IGJlYXQsXG4gICAgJ2ZhLWZhZGUnOiBmYWRlLFxuICAgICdmYS1iZWF0LWZhZGUnOiBiZWF0RmFkZSxcbiAgICAnZmEtYm91bmNlJzogYm91bmNlLFxuICAgICdmYS1zaGFrZSc6IHNoYWtlLFxuICAgICdmYS1mbGFzaCc6IGZsYXNoLFxuICAgICdmYS1zcGluJzogc3BpbixcbiAgICAnZmEtc3Bpbi1yZXZlcnNlJzogc3BpblJldmVyc2UsXG4gICAgJ2ZhLXNwaW4tcHVsc2UnOiBzcGluUHVsc2UsXG4gICAgJ2ZhLXB1bHNlJzogcHVsc2UsXG4gICAgJ2ZhLWZ3JzogZml4ZWRXaWR0aCxcbiAgICAnZmEtaW52ZXJzZSc6IGludmVyc2UsXG4gICAgJ2ZhLWJvcmRlcic6IGJvcmRlcixcbiAgICAnZmEtbGknOiBsaXN0SXRlbSxcbiAgICAnZmEtZmxpcCc6IGZsaXAgPT09IHRydWUsXG4gICAgJ2ZhLWZsaXAtaG9yaXpvbnRhbCc6IGZsaXAgPT09ICdob3Jpem9udGFsJyB8fCBmbGlwID09PSAnYm90aCcsXG4gICAgJ2ZhLWZsaXAtdmVydGljYWwnOiBmbGlwID09PSAndmVydGljYWwnIHx8IGZsaXAgPT09ICdib3RoJ1xuICB9LCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzZXMsIFwiZmEtXCIuY29uY2F0KHNpemUpLCB0eXBlb2Ygc2l6ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2l6ZSAhPT0gbnVsbCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NlcywgXCJmYS1yb3RhdGUtXCIuY29uY2F0KHJvdGF0aW9uKSwgdHlwZW9mIHJvdGF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiByb3RhdGlvbiAhPT0gbnVsbCAmJiByb3RhdGlvbiAhPT0gMCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NlcywgXCJmYS1wdWxsLVwiLmNvbmNhdChwdWxsKSwgdHlwZW9mIHB1bGwgIT09ICd1bmRlZmluZWQnICYmIHB1bGwgIT09IG51bGwpLCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzZXMsICdmYS1zd2FwLW9wYWNpdHknLCBwcm9wcy5zd2FwT3BhY2l0eSksIF9jbGFzc2VzKTsgLy8gbWFwIG92ZXIgYWxsIHRoZSBrZXlzIGluIHRoZSBjbGFzc2VzIG9iamVjdFxuICAvLyByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIGtleXMgd2hlcmUgdGhlIHZhbHVlIGZvciB0aGUga2V5IGlzIG5vdCBudWxsXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNsYXNzZXMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGNsYXNzZXNba2V5XSA/IGtleSA6IG51bGw7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG59XG5cbi8vIENhbWVsaXplIHRha2VuIGZyb20gaHVtcHNcbi8vIGh1bXBzIGlzIGNvcHlyaWdodCBcdTAwQTkgMjAxMisgRG9tIENocmlzdGllXG4vLyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBQZXJmb3JtYW50IHdheSB0byBkZXRlcm1pbmUgaWYgb2JqZWN0IGNvZXJjZXMgdG8gYSBudW1iZXJcbmZ1bmN0aW9uIF9pc051bWVyaWNhbChvYmopIHtcbiAgb2JqID0gb2JqIC0gMDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuXG4gIHJldHVybiBvYmogPT09IG9iajtcbn1cblxuZnVuY3Rpb24gY2FtZWxpemUoc3RyaW5nKSB7XG4gIGlmIChfaXNOdW1lcmljYWwoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5cblxuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvW1xcLV9cXHNdKyguKT8vZywgZnVuY3Rpb24gKG1hdGNoLCBjaHIpIHtcbiAgICByZXR1cm4gY2hyID8gY2hyLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgfSk7IC8vIEVuc3VyZSAxc3QgY2hhciBpcyBhbHdheXMgbG93ZXJjYXNlXG5cbiAgcmV0dXJuIHN0cmluZy5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zdWJzdHIoMSk7XG59XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gY2FwaXRhbGl6ZSh2YWwpIHtcbiAgcmV0dXJuIHZhbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbC5zbGljZSgxKTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUb09iamVjdChzdHlsZSkge1xuICByZXR1cm4gc3R5bGUuc3BsaXQoJzsnKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcy50cmltKCk7XG4gIH0pLmZpbHRlcihmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzO1xuICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGFpcikge1xuICAgIHZhciBpID0gcGFpci5pbmRleE9mKCc6Jyk7XG4gICAgdmFyIHByb3AgPSBjYW1lbGl6ZShwYWlyLnNsaWNlKDAsIGkpKTtcbiAgICB2YXIgdmFsdWUgPSBwYWlyLnNsaWNlKGkgKyAxKS50cmltKCk7XG4gICAgcHJvcC5zdGFydHNXaXRoKCd3ZWJraXQnKSA/IGFjY1tjYXBpdGFsaXplKHByb3ApXSA9IHZhbHVlIDogYWNjW3Byb3BdID0gdmFsdWU7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0KGNyZWF0ZUVsZW1lbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGV4dHJhUHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IChlbGVtZW50LmNoaWxkcmVuIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNvbnZlcnQoY3JlYXRlRWxlbWVudCwgY2hpbGQpO1xuICB9KTtcbiAgLyogZXNsaW50LWRpc2FibGUgZG90LW5vdGF0aW9uICovXG5cbiAgdmFyIG1peGlucyA9IE9iamVjdC5rZXlzKGVsZW1lbnQuYXR0cmlidXRlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgIHZhciB2YWwgPSBlbGVtZW50LmF0dHJpYnV0ZXNba2V5XTtcblxuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgIGFjYy5hdHRyc1snY2xhc3NOYW1lJ10gPSB2YWw7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LmF0dHJpYnV0ZXNbJ2NsYXNzJ107XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdHlsZSc6XG4gICAgICAgIGFjYy5hdHRyc1snc3R5bGUnXSA9IHN0eWxlVG9PYmplY3QodmFsKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZignYXJpYS0nKSA9PT0gMCB8fCBrZXkuaW5kZXhPZignZGF0YS0nKSA9PT0gMCkge1xuICAgICAgICAgIGFjYy5hdHRyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjLmF0dHJzW2NhbWVsaXplKGtleSldID0gdmFsO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7XG4gICAgYXR0cnM6IHt9XG4gIH0pO1xuXG4gIHZhciBfZXh0cmFQcm9wcyRzdHlsZSA9IGV4dHJhUHJvcHMuc3R5bGUsXG4gICAgICBleGlzdGluZ1N0eWxlID0gX2V4dHJhUHJvcHMkc3R5bGUgPT09IHZvaWQgMCA/IHt9IDogX2V4dHJhUHJvcHMkc3R5bGUsXG4gICAgICByZW1haW5pbmcgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZXh0cmFQcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBtaXhpbnMuYXR0cnNbJ3N0eWxlJ10gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWl4aW5zLmF0dHJzWydzdHlsZSddKSwgZXhpc3RpbmdTdHlsZSk7XG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudC5hcHBseSh2b2lkIDAsIFtlbGVtZW50LnRhZywgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1peGlucy5hdHRycyksIHJlbWFpbmluZyldLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY2hpbGRyZW4pKSk7XG59XG5cbnZhciBQUk9EVUNUSU9OID0gZmFsc2U7XG5cbnRyeSB7XG4gIFBST0RVQ1RJT04gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xufSBjYXRjaCAoZSkge31cblxuZnVuY3Rpb24gbG9nICgpIHtcbiAgaWYgKCFQUk9EVUNUSU9OICYmIGNvbnNvbGUgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgX2NvbnNvbGU7XG5cbiAgICAoX2NvbnNvbGUgPSBjb25zb2xlKS5lcnJvci5hcHBseShfY29uc29sZSwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVJY29uQXJncyhpY29uKSB7XG4gIC8vIHRoaXMgaGFzIGV2ZXJ5dGhpbmcgdGhhdCBpdCBuZWVkcyB0byBiZSByZW5kZXJlZCB3aGljaCBtZWFucyBpdCB3YXMgcHJvYmFibHkgaW1wb3J0ZWRcbiAgLy8gZGlyZWN0bHkgZnJvbSBhbiBpY29uIHN2ZyBwYWNrYWdlXG4gIGlmIChpY29uICYmIF90eXBlb2YoaWNvbikgPT09ICdvYmplY3QnICYmIGljb24ucHJlZml4ICYmIGljb24uaWNvbk5hbWUgJiYgaWNvbi5pY29uKSB7XG4gICAgcmV0dXJuIGljb247XG4gIH1cblxuICBpZiAocGFyc2UuaWNvbikge1xuICAgIHJldHVybiBwYXJzZS5pY29uKGljb24pO1xuICB9IC8vIGlmIHRoZSBpY29uIGlzIG51bGwsIHRoZXJlJ3Mgbm90aGluZyB0byBkb1xuXG5cbiAgaWYgKGljb24gPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBpZiB0aGUgaWNvbiBpcyBhbiBvYmplY3QgYW5kIGhhcyBhIHByZWZpeCBhbmQgYW4gaWNvbiBuYW1lLCByZXR1cm4gaXRcblxuXG4gIGlmIChpY29uICYmIF90eXBlb2YoaWNvbikgPT09ICdvYmplY3QnICYmIGljb24ucHJlZml4ICYmIGljb24uaWNvbk5hbWUpIHtcbiAgICByZXR1cm4gaWNvbjtcbiAgfSAvLyBpZiBpdCdzIGFuIGFycmF5IHdpdGggbGVuZ3RoIG9mIHR3b1xuXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaWNvbikgJiYgaWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAvLyB1c2UgdGhlIGZpcnN0IGl0ZW0gYXMgcHJlZml4LCBzZWNvbmQgYXMgaWNvbiBuYW1lXG4gICAgcmV0dXJuIHtcbiAgICAgIHByZWZpeDogaWNvblswXSxcbiAgICAgIGljb25OYW1lOiBpY29uWzFdXG4gICAgfTtcbiAgfSAvLyBpZiBpdCdzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIGljb24gbmFtZVxuXG5cbiAgaWYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXg6ICdmYXMnLFxuICAgICAgaWNvbk5hbWU6IGljb25cbiAgICB9O1xuICB9XG59XG5cbi8vIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggYSBrZXkgb2Yga2V5XG4vLyBhbmQgYSB2YWx1ZSBvZiB2YWx1ZVxuLy8gaWYgY2VydGFpbiBjb25kaXRpb25zIGFyZSBtZXRcbmZ1bmN0aW9uIG9iamVjdFdpdGhLZXkoa2V5LCB2YWx1ZSkge1xuICAvLyBpZiB0aGUgdmFsdWUgaXMgYSBub24tZW1wdHkgYXJyYXlcbiAgLy8gb3IgaXQncyBub3QgYW4gYXJyYXkgYnV0IGl0IGlzIHRydXRoeVxuICAvLyB0aGVuIGNyZWF0ZSB0aGUgb2JqZWN0IHdpdGggdGhlIGtleSBhbmQgdGhlIHZhbHVlXG4gIC8vIGlmIG5vdCwgcmV0dXJuIGFuIGVtcHR5IGFycmF5XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSA/IF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCB2YWx1ZSkgOiB7fTtcbn1cblxudmFyIEZvbnRBd2Vzb21lSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBpY29uQXJncyA9IHByb3BzLmljb24sXG4gICAgICBtYXNrQXJncyA9IHByb3BzLm1hc2ssXG4gICAgICBzeW1ib2wgPSBwcm9wcy5zeW1ib2wsXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICB0aXRsZSA9IHByb3BzLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IHByb3BzLnRpdGxlSWQsXG4gICAgICBtYXNrSWQgPSBwcm9wcy5tYXNrSWQ7XG4gIHZhciBpY29uTG9va3VwID0gbm9ybWFsaXplSWNvbkFyZ3MoaWNvbkFyZ3MpO1xuICB2YXIgY2xhc3NlcyA9IG9iamVjdFdpdGhLZXkoJ2NsYXNzZXMnLCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzTGlzdChwcm9wcykpLCBfdG9Db25zdW1hYmxlQXJyYXkoY2xhc3NOYW1lLnNwbGl0KCcgJykpKSk7XG4gIHZhciB0cmFuc2Zvcm0gPSBvYmplY3RXaXRoS2V5KCd0cmFuc2Zvcm0nLCB0eXBlb2YgcHJvcHMudHJhbnNmb3JtID09PSAnc3RyaW5nJyA/IHBhcnNlLnRyYW5zZm9ybShwcm9wcy50cmFuc2Zvcm0pIDogcHJvcHMudHJhbnNmb3JtKTtcbiAgdmFyIG1hc2sgPSBvYmplY3RXaXRoS2V5KCdtYXNrJywgbm9ybWFsaXplSWNvbkFyZ3MobWFza0FyZ3MpKTtcbiAgdmFyIHJlbmRlcmVkSWNvbiA9IGljb24oaWNvbkxvb2t1cCwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGNsYXNzZXMpLCB0cmFuc2Zvcm0pLCBtYXNrKSwge30sIHtcbiAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICB0aXRsZTogdGl0bGUsXG4gICAgdGl0bGVJZDogdGl0bGVJZCxcbiAgICBtYXNrSWQ6IG1hc2tJZFxuICB9KSk7XG5cbiAgaWYgKCFyZW5kZXJlZEljb24pIHtcbiAgICBsb2coJ0NvdWxkIG5vdCBmaW5kIGljb24nLCBpY29uTG9va3VwKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhYnN0cmFjdCA9IHJlbmRlcmVkSWNvbi5hYnN0cmFjdDtcbiAgdmFyIGV4dHJhUHJvcHMgPSB7XG4gICAgcmVmOiByZWZcbiAgfTtcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoIUZvbnRBd2Vzb21lSWNvbi5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgZXh0cmFQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29udmVydEN1cnJ5KGFic3RyYWN0WzBdLCBleHRyYVByb3BzKTtcbn0pO1xuRm9udEF3ZXNvbWVJY29uLmRpc3BsYXlOYW1lID0gJ0ZvbnRBd2Vzb21lSWNvbic7XG5Gb250QXdlc29tZUljb24ucHJvcFR5cGVzID0ge1xuICBiZWF0OiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgYmVhdEZhZGU6IFByb3BUeXBlcy5ib29sLFxuICBib3VuY2U6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZhZGU6IFByb3BUeXBlcy5ib29sLFxuICBmbGFzaDogUHJvcFR5cGVzLmJvb2wsXG4gIG1hc2s6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICBtYXNrSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZpeGVkV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpbnZlcnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgZmxpcDogUHJvcFR5cGVzLm9uZU9mKFt0cnVlLCBmYWxzZSwgJ2hvcml6b250YWwnLCAndmVydGljYWwnLCAnYm90aCddKSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIGxpc3RJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHVsbDogUHJvcFR5cGVzLm9uZU9mKFsncmlnaHQnLCAnbGVmdCddKSxcbiAgcHVsc2U6IFByb3BUeXBlcy5ib29sLFxuICByb3RhdGlvbjogUHJvcFR5cGVzLm9uZU9mKFswLCA5MCwgMTgwLCAyNzBdKSxcbiAgc2hha2U6IFByb3BUeXBlcy5ib29sLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoWycyeHMnLCAneHMnLCAnc20nLCAnbGcnLCAneGwnLCAnMnhsJywgJzF4JywgJzJ4JywgJzN4JywgJzR4JywgJzV4JywgJzZ4JywgJzd4JywgJzh4JywgJzl4JywgJzEweCddKSxcbiAgc3BpbjogUHJvcFR5cGVzLmJvb2wsXG4gIHNwaW5QdWxzZTogUHJvcFR5cGVzLmJvb2wsXG4gIHNwaW5SZXZlcnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgc3ltYm9sOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGl0bGVJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHJhbnNmb3JtOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIHN3YXBPcGFjaXR5OiBQcm9wVHlwZXMuYm9vbFxufTtcbkZvbnRBd2Vzb21lSWNvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGJvcmRlcjogZmFsc2UsXG4gIGNsYXNzTmFtZTogJycsXG4gIG1hc2s6IG51bGwsXG4gIG1hc2tJZDogbnVsbCxcbiAgZml4ZWRXaWR0aDogZmFsc2UsXG4gIGludmVyc2U6IGZhbHNlLFxuICBmbGlwOiBmYWxzZSxcbiAgaWNvbjogbnVsbCxcbiAgbGlzdEl0ZW06IGZhbHNlLFxuICBwdWxsOiBudWxsLFxuICBwdWxzZTogZmFsc2UsXG4gIHJvdGF0aW9uOiBudWxsLFxuICBzaXplOiBudWxsLFxuICBzcGluOiBmYWxzZSxcbiAgc3BpblB1bHNlOiBmYWxzZSxcbiAgc3BpblJldmVyc2U6IGZhbHNlLFxuICBiZWF0OiBmYWxzZSxcbiAgZmFkZTogZmFsc2UsXG4gIGJlYXRGYWRlOiBmYWxzZSxcbiAgYm91bmNlOiBmYWxzZSxcbiAgc2hha2U6IGZhbHNlLFxuICBzeW1ib2w6IGZhbHNlLFxuICB0aXRsZTogJycsXG4gIHRpdGxlSWQ6IG51bGwsXG4gIHRyYW5zZm9ybTogbnVsbCxcbiAgc3dhcE9wYWNpdHk6IGZhbHNlXG59O1xudmFyIGNvbnZlcnRDdXJyeSA9IGNvbnZlcnQuYmluZChudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KTtcblxuZXhwb3J0IHsgRm9udEF3ZXNvbWVJY29uIH07XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cbmltcG9ydCB7IEdyb3VwRWxlbWVudCwgR3JvdXBpbmcsIEdyb3VwaW5ncywgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBEaXNwYXRjaCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IENVUlJFTlRfRklMRV9DT05URVhULCBMaXQgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IHVzZUludGVybmluZyB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tIFwicHJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBWTm9kZSwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBDb250cm9sbGVkUGFnZXIsIHVzZURhdGFjb3JlUGFnaW5nIH0gZnJvbSBcIi4vcGFnaW5nXCI7XG5cbmltcG9ydCBcIi4vdGFibGUuY3NzXCI7XG5pbXBvcnQgeyBFZGl0YWJsZSwgRWRpdGFibGVBY3Rpb24sIHVzZUVkaXRhYmxlRGlzcGF0Y2ggfSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlXCI7XG5pbXBvcnQgeyBmYVNvcnREb3duLCBmYVNvcnRVcCwgZmFTb3J0IH0gZnJvbSBcIkBmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29uc1wiO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVJY29uIH0gZnJvbSBcIkBmb3J0YXdlc29tZS9yZWFjdC1mb250YXdlc29tZVwiO1xuXG4vKiogQSBzaW1wbGUgY29sdW1uIGRlZmluaXRpb24gd2hpY2ggYWxsb3dzIGZvciBjdXN0b20gcmVuZGVyZXJzIGFuZCB0aXRsZXMuXG4gKiBAZ3JvdXAgUHJvcHNcbiAqIEB0eXBlUGFyYW0gVCAtIHRoZSB0eXBlIG9mIGVhY2ggcm93XG4gKiBAdHlwZVBhcmFtIFYgLSB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgaW4gdGhpcyBjb2x1bW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYW5pbGxhQ29sdW1uPFQsIFYgPSBMaXRlcmFsPiB7XG4gICAgLyoqIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyB0YWJsZSBjb2x1bW47IHlvdSBjYW5ub3QgaGF2ZSBtdWx0aXBsZSBjb2x1bW5zIHdpdGggdGhlIHNhbWUgSUQgaW4gYSBnaXZlbiB0YWJsZS4gKi9cbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSB0aXRsZSB3aGljaCB3aWxsIGRpc3BsYXkgYXQgdGhlIHRvcCBvZiB0aGUgY29sdW1uIGlmIHByZXNlbnQuICovXG4gICAgdGl0bGU/OiBzdHJpbmcgfCBWTm9kZSB8ICgoKSA9PiBzdHJpbmcgfCBWTm9kZSk7XG5cbiAgICAvKiogSWYgcHJlc2VudCwgdGhlIENTUyB3aWR0aCB0byBhcHBseSB0byB0aGUgY29sdW1uLiAnbWluaW11bScgd2lsbCBzZXQgdGhlIGNvbHVtbiBzaXplIHRvIGl0J3Mgc21hbGxlc3QgcG9zc2libGUgdmFsdWUsIHdoaWxlICdtYXhpbXVtJyB3aWxsIGRvIHRoZSBvcHBvc2l0ZS4gKi9cbiAgICB3aWR0aD86IFwibWluaW11bVwiIHwgXCJtYXhpbXVtXCIgfCBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgcm93IHRvIHRoZSB2YWx1ZSBiZWluZyByZW5kZXJlZC4gKi9cbiAgICB2YWx1ZTogKG9iamVjdDogVCkgPT4gVjtcblxuICAgIC8qKiBDYWxsZWQgdG8gcmVuZGVyIHRoZSBnaXZlbiBjb2x1bW4gdmFsdWUuIENhbiBkZXBlbmQgb24gYm90aCB0aGUgc3BlY2lmaWMgdmFsdWUgYW5kIHRoZSByb3cgb2JqZWN0LiAqL1xuICAgIHJlbmRlcj86ICh2YWx1ZTogViwgb2JqZWN0OiBUKSA9PiBMaXRlcmFsIHwgVk5vZGU7XG5cbiAgICAvKiogd2hldGhlciB0aGlzIGNvbHVtbiBpcyBlZGl0YWJsZSBvciBub3QgKi9cbiAgICBlZGl0YWJsZT86IGJvb2xlYW47XG5cbiAgICAvKiogUmVuZGVyZWQgd2hlbiBlZGl0aW5nIHRoZSBjb2x1bW4gKi9cbiAgICBlZGl0b3I/OiAodmFsdWU6IFYsIG9iamVjdDogVCkgPT4gSlNYLkVsZW1lbnQ7XG5cbiAgICAvKiogQ2FsbGVkIHdoZW4gdGhlIGNvbHVtbiB2YWx1ZSB1cGRhdGVzLiAqL1xuICAgIG9uVXBkYXRlPzogKHZhbHVlOiBWLCBvYmplY3Q6IFQpID0+IHVua25vd247XG59XG5cbi8qKiBNZXRhZGF0YSBmb3IgY29uZmlndXJpbmcgaG93IGdyb3VwaW5ncyBpbiB0aGUgZGF0YSBzaG91bGQgYmUgaGFuZGxlZC5cbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwaW5nQ29uZmlnPFQ+IHtcbiAgICAvKiogSG93IGEgZ3JvdXBpbmcgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFuZCBzZXQgb2Ygcm93cyBzaG91bGQgYmUgaGFuZGxlZC4gKi9cbiAgICByZW5kZXI/OiAoa2V5OiBMaXRlcmFsLCByb3dzOiBHcm91cGluZzxUPikgPT4gTGl0ZXJhbCB8IFZOb2RlO1xufVxuXG4vKiogQWxsIGF2YWlsYWJsZSBwcm9wcyBmb3IgYSB2YW5pbGxhIHRhYmxlLlxuICogQGdyb3VwIFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFuaWxsYVRhYmxlUHJvcHM8VD4ge1xuICAgIC8qKiBUaGUgY29sdW1ucyB0byByZW5kZXIgaW4gdGhlIHRhYmxlLiAqL1xuICAgIGNvbHVtbnM6IFZhbmlsbGFDb2x1bW48VD5bXTtcblxuICAgIC8qKiBUaGUgcm93cyB0byByZW5kZXI7IG1heSBwb3RlbnRpYWxseSBiZSBncm91cGVkIG9yIGp1c3QgYSBwbGFpbiBhcnJheS4gKi9cbiAgICByb3dzOiBHcm91cGluZzxUPjtcblxuICAgIC8qKiBBbGxvd3MgZm9yIGdyb3VwaW5nIGhlYWRlciBjb2x1bW5zIHRvIGJlIG92ZXJyaWRkZW4gd2l0aCBjdXN0b20gcmVuZGVyaW5nL2xvZ2ljLiAqL1xuICAgIGdyb3VwaW5ncz86IEdyb3VwaW5nQ29uZmlnPFQ+IHwgR3JvdXBpbmdDb25maWc8VD5bXSB8ICgoa2V5OiBMaXRlcmFsLCByb3dzOiBHcm91cGluZzxUPikgPT4gTGl0ZXJhbCB8IFZOb2RlKTtcblxuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBhIGJvb2xlYW4gLSBlbmFibGVzIG9yIGRpc2FibGVzIHBhZ2luZy5cbiAgICAgKiBJZiBzZXQgdG8gYSBudW1iZXIsIHBhZ2luZyB3aWxsIGJlIGVuYWJsZWQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuXG4gICAgICovXG4gICAgcGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHZpZXcgd2lsbCBzY3JvbGwgdG8gdGhlIHRvcCBhdXRvbWF0aWNhbGx5IG9uIHBhZ2UgY2hhbmdlcy4gSWYgdHJ1ZSwgd2lsbCBhbHdheXMgc2Nyb2xsIG9uIHBhZ2UgY2hhbmdlcy5cbiAgICAgKiBJZiBhIG51bWJlciwgd2lsbCBzY3JvbGwgb25seSBpZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBwYWdlIHNpemUuXG4gICAgICoqL1xuICAgIHNjcm9sbE9uUGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcbn1cblxuLyoqIEEgc2ltcGxlIHRhYmxlIHdoaWNoIHN1cHBvcnRzIGdyb3VwaW5nLCBzb3J0aW5nLCBwYWdpbmcsIGFuZCBjdXN0b20gY29sdW1ucy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKiBAcGFyYW0gcHJvcHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFZhbmlsbGFUYWJsZTxUPihwcm9wczogVmFuaWxsYVRhYmxlUHJvcHM8VD4pIHtcbiAgICAvLyBDYWNoZSBjb2x1bW5zIGJ5IHJlZmVyZW5jZSBlcXVhbGl0eSBvZiB0aGUgc3BlY2lmaWMgY29sdW1ucy4gQ29sdW1ucyBoYXZlIHZhcmlvdXMgZnVuY3Rpb24gcmVmZXJlbmNlc1xuICAgIC8vIGluc2lkZSB0aGVtIGFuZCBzbyBjYW5ub3QgYmUgY29tcGFyZWQgYnkgdmFsdWUgZXF1YWxpdHkuXG4gICAgY29uc3QgY29sdW1ucyA9IHVzZUludGVybmluZyhwcm9wcy5jb2x1bW5zLCAoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGEuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT0gYltpbmRleF0pO1xuICAgIH0pO1xuXG4gICAgLy8gQ291bnQgdG90YWwgZWxlbWVudHMgYW5kIHRoZW4gcGFnZSBhcHByb3ByaWF0ZWx5LlxuICAgIGNvbnN0IHRhYmxlUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgICBjb25zdCB0b3RhbEVsZW1lbnRzID0gdXNlTWVtbygoKSA9PiBHcm91cGluZ3MuY291bnQocHJvcHMucm93cyksIFtwcm9wcy5yb3dzXSk7XG4gICAgY29uc3QgcGFnaW5nID0gdXNlRGF0YWNvcmVQYWdpbmcoe1xuICAgICAgICBpbml0aWFsUGFnZTogMCxcbiAgICAgICAgcGFnaW5nOiBwcm9wcy5wYWdpbmcsXG4gICAgICAgIHNjcm9sbE9uUGFnZUNoYW5nZTogcHJvcHMuc2Nyb2xsT25QYWdpbmcsXG4gICAgICAgIGVsZW1lbnRzOiB0b3RhbEVsZW1lbnRzLFxuICAgICAgICBjb250YWluZXI6IHRhYmxlUmVmLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGFnZWRSb3dzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChwYWdpbmcuZW5hYmxlZClcbiAgICAgICAgICAgIHJldHVybiBHcm91cGluZ3Muc2xpY2UocHJvcHMucm93cywgcGFnaW5nLnBhZ2UgKiBwYWdpbmcucGFnZVNpemUsIChwYWdpbmcucGFnZSArIDEpICogcGFnaW5nLnBhZ2VTaXplKTtcbiAgICAgICAgZWxzZSByZXR1cm4gcHJvcHMucm93cztcbiAgICB9LCBbcGFnaW5nLnBhZ2UsIHBhZ2luZy5wYWdlU2l6ZSwgcGFnaW5nLmVuYWJsZWQsIHByb3BzLnJvd3NdKTtcblxuICAgIGNvbnN0IGdyb3VwaW5ncyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzLmdyb3VwaW5ncykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMuZ3JvdXBpbmdzKSkgcmV0dXJuIHByb3BzLmdyb3VwaW5ncztcblxuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbihwcm9wcy5ncm91cGluZ3MpKSByZXR1cm4gW3sgcmVuZGVyOiBwcm9wcy5ncm91cGluZ3MgfV07XG4gICAgICAgIGVsc2UgcmV0dXJuIFtwcm9wcy5ncm91cGluZ3NdO1xuICAgIH0sIFtwcm9wcy5ncm91cGluZ3NdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgcmVmPXt0YWJsZVJlZn0+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGVcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWYW5pbGxhVGFibGVIZWFkZXJDZWxsIGNvbHVtbj17Y29sfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtwYWdlZFJvd3MubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxWYW5pbGxhUm93R3JvdXAgbGV2ZWw9ezB9IGdyb3VwaW5ncz17Z3JvdXBpbmdzfSBjb2x1bW5zPXtjb2x1bW5zfSBlbGVtZW50PXtyb3d9IC8+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAge3BhZ2luZy5lbmFibGVkICYmIChcbiAgICAgICAgICAgICAgICA8Q29udHJvbGxlZFBhZ2VyIHBhZ2U9e3BhZ2luZy5wYWdlfSB0b3RhbFBhZ2VzPXtwYWdpbmcudG90YWxQYWdlc30gc2V0UGFnZT17cGFnaW5nLnNldFBhZ2V9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuXG4vKiogQW4gaW5kaXZpZHVhbCBjb2x1bW4gY2VsbCBpbiB0aGUgdGFibGUuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWYW5pbGxhVGFibGVIZWFkZXJDZWxsPFQ+KHsgY29sdW1uIH06IHsgY29sdW1uOiBWYW5pbGxhQ29sdW1uPFQ+IH0pIHtcbiAgICBjb25zdCBoZWFkZXI6IHN0cmluZyB8IFZOb2RlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uLmlkO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2x1bW4udGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi50aXRsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi50aXRsZTtcbiAgICAgICAgfVxuICAgIH0sIFtjb2x1bW4uaWQsIGNvbHVtbi50aXRsZV0pO1xuXG4gICAgY29uc3QgcmVhbFdpZHRoID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gKGNvbHVtbi53aWR0aCA9PT0gXCJtaW5pbXVtXCIgPyBcIjFweFwiIDogY29sdW1uLndpZHRoID09PSBcIm1heGltdW1cIiA/IFwiYXV0b1wiIDogY29sdW1uLndpZHRoKSxcbiAgICAgICAgW2NvbHVtbi53aWR0aF1cbiAgICApO1xuXG4gICAgLy8gV2UgdXNlIGFuIGludGVybmFsIGRpdiB0byBhdm9pZCBmbGV4IG1lc3Npbmcgd2l0aCB0aGUgdGFibGUgbGF5b3V0LlxuICAgIHJldHVybiAoXG4gICAgICAgIDx0aCB3aWR0aD17cmVhbFdpZHRofSBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItY2VsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItdGl0bGVcIj57aGVhZGVyfTwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICk7XG59XG5cbi8qKiBBIGdyb3VwaW5nIGluIHRoZSB0YWJsZSwgb3IgYW4gaW5kaXZpZHVhbCByb3cuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWYW5pbGxhUm93R3JvdXA8VD4oe1xuICAgIGxldmVsLFxuICAgIGNvbHVtbnMsXG4gICAgZWxlbWVudCxcbiAgICBncm91cGluZ3MsXG59OiB7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICBjb2x1bW5zOiBWYW5pbGxhQ29sdW1uPFQ+W107XG4gICAgZWxlbWVudDogVCB8IEdyb3VwRWxlbWVudDxUPjtcbiAgICBncm91cGluZ3M/OiBHcm91cGluZ0NvbmZpZzxUPltdO1xufSkge1xuICAgIGlmIChHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdDb25maWcgPSBncm91cGluZ3MgPyBncm91cGluZ3NbTWF0aC5taW4oZ3JvdXBpbmdzLmxlbmd0aCAtIDEsIGxldmVsKV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8VGFibGVHcm91cEhlYWRlciBsZXZlbD17bGV2ZWx9IHZhbHVlPXtlbGVtZW50fSB3aWR0aD17Y29sdW1ucy5sZW5ndGh9IGNvbmZpZz17Z3JvdXBpbmdDb25maWd9IC8+XG4gICAgICAgICAgICAgICAge2VsZW1lbnQucm93cy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8VmFuaWxsYVJvd0dyb3VwIGxldmVsPXtsZXZlbCArIDF9IGNvbHVtbnM9e2NvbHVtbnN9IGVsZW1lbnQ9e3Jvd30gLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxUYWJsZVJvdyBsZXZlbD17bGV2ZWx9IHJvdz17ZWxlbWVudH0gY29sdW1ucz17Y29sdW1uc30gLz47XG4gICAgfVxufVxuXG4vKiogQSBoZWFkZXIgb2YgYSBncm91cGVkIHNldCBvZiBjb2x1bW5zLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gVGFibGVHcm91cEhlYWRlcjxUPih7XG4gICAgbGV2ZWwsXG4gICAgdmFsdWUsXG4gICAgd2lkdGgsXG4gICAgY29uZmlnLFxufToge1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgdmFsdWU6IEdyb3VwRWxlbWVudDxUPjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGNvbmZpZz86IEdyb3VwaW5nQ29uZmlnPFQ+O1xufSkge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCByYXdSZW5kZXJhYmxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChjb25maWc/LnJlbmRlcikgcmV0dXJuIGNvbmZpZy5yZW5kZXIodmFsdWUua2V5LCB2YWx1ZS5yb3dzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8aDI+XG4gICAgICAgICAgICAgICAgICAgIDxMaXQgc291cmNlUGF0aD17c291cmNlUGF0aH0gaW5saW5lPXt0cnVlfSB2YWx1ZT17dmFsdWUua2V5fSAvPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICApO1xuICAgIH0sIFtjb25maWc/LnJlbmRlciwgdmFsdWUua2V5LCB2YWx1ZS5yb3dzXSk7XG4gICAgY29uc3QgcmVuZGVyYWJsZSA9IHVzZUFzRWxlbWVudChyYXdSZW5kZXJhYmxlKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDx0ciBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1ncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDx0ZCBjb2xTcGFuPXt3aWR0aH0+e3JlbmRlcmFibGV9PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICApO1xufVxuXG4vKiogQSBzaW5nbGUgcm93IGluc2lkZSB0aGUgdGFibGUuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUYWJsZVJvdzxUPih7IGxldmVsLCByb3csIGNvbHVtbnMgfTogeyBsZXZlbDogbnVtYmVyOyByb3c6IFQ7IGNvbHVtbnM6IFZhbmlsbGFDb2x1bW48VD5bXSB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRyIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLXJvd1wiIHN0eWxlPXtsZXZlbCA/IGBwYWRkaW5nLWxlZnQ6ICR7bGV2ZWwgKiA1fXB4YCA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCkgPT4gKFxuICAgICAgICAgICAgICAgIDxUYWJsZVJvd0NlbGwgcm93PXtyb3d9IGNvbHVtbj17Y29sfSAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvdHI+XG4gICAgKTtcbn1cblxuLyoqIEEgc2luZ2xlIGNlbGwgaW5zaWRlIG9mIGEgcm93IG9mIHRoZSB0YWJsZS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRhYmxlUm93Q2VsbDxUPih7IHJvdywgY29sdW1uIH06IHsgcm93OiBUOyBjb2x1bW46IFZhbmlsbGFDb2x1bW48VD4gfSkge1xuICAgIGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKSA9PiBjb2x1bW4udmFsdWUocm93KSwgW3JvdywgY29sdW1uLnZhbHVlXSk7XG4gICAgY29uc3QgW2VkaXRhYmxlU3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8dHlwZW9mIHZhbHVlPih7XG4gICAgICAgIGNvbnRlbnQ6IHZhbHVlLFxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICB1cGRhdGVyOiAodikgPT4gY29sdW1uLm9uVXBkYXRlICYmIGNvbHVtbi5vblVwZGF0ZSh2LCByb3cpLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlcmFibGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5yZW5kZXIpIHtcbiAgICAgICAgICAgIGxldCByID0gY29sdW1uLnJlbmRlcihlZGl0YWJsZVN0YXRlLmNvbnRlbnQsIHJvdyk7XG4gICAgICAgICAgICBpZiAociAmJiB0eXBlb2YgciA9PSBcIm9iamVjdFwiICYmIFwicHJvcHNcIiBpbiByKSByZXR1cm4geyAuLi5yLCBwcm9wczogeyAuLi5yLnByb3BzLCBkaXNwYXRjaCB9IH07XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHJldHVybiB2YWx1ZTtcbiAgICB9LCBbcm93LCBjb2x1bW4ucmVuZGVyLCB2YWx1ZV0pO1xuXG4gICAgY29uc3QgcmVuZGVyZWQgPSB1c2VBc0VsZW1lbnQocmVuZGVyYWJsZSk7XG5cbiAgICBjb25zdCBFZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IGU7XG4gICAgICAgIGlmIChjb2x1bW4uZWRpdGFibGUgJiYgY29sdW1uLmVkaXRvcikgZSA9IGNvbHVtbi5lZGl0b3IoZWRpdGFibGVTdGF0ZS5jb250ZW50LCByb3cpO1xuICAgICAgICBlbHNlIGUgPSBudWxsO1xuICAgICAgICBpZiAoZSkgcmV0dXJuIHsgLi4uZSwgcHJvcHM6IHsgLi4uZS5wcm9wcywgZGlzcGF0Y2ggfSB9O1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9LCBbcm93LCBjb2x1bW4uZWRpdG9yLCBjb2x1bW4uZWRpdGFibGUsIHZhbHVlXSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRkXG4gICAgICAgICAgICBvbkRibENsaWNrPXsoKSA9PiBkaXNwYXRjaCh7IHR5cGU6IFwiZWRpdGluZy10b2dnbGVkXCIsIG5ld1ZhbHVlOiAhZWRpdGFibGVTdGF0ZS5pc0VkaXRpbmcgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1jZWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge2NvbHVtbi5lZGl0YWJsZSA/IChcbiAgICAgICAgICAgICAgICA8RWRpdGFibGU8dHlwZW9mIHZhbHVlPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVuZGVyPXtyZW5kZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yPXtFZGl0b3J9XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgc3RhdGU9e2VkaXRhYmxlU3RhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvdGQ+XG4gICAgKTtcbn1cblxuLyoqIEVuc3VyZSB0aGF0IGEgZ2l2ZW4gbGl0ZXJhbCBvciBlbGVtZW50IGlucHV0IGlzIHJlbmRlcmVkIGFzIGEgSlNYLkVsZW1lbnQuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBc0VsZW1lbnQoZWxlbWVudDogVk5vZGUgfCBMaXRlcmFsKTogVk5vZGUge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcblxuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudCBhcyBWTm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiA8TGl0IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17dHJ1ZX0gdmFsdWU9e2VsZW1lbnQgYXMgYW55fSAvPjtcbiAgICAgICAgfVxuICAgIH0sIFtlbGVtZW50XSk7XG59XG4vKiogUHJvdmlkZXMgYSBzb3J0IGJ1dHRvbiB0aGF0IGhhcyBhIGNsaWNrIGhhbmRsZXIuICovXG5leHBvcnQgZnVuY3Rpb24gU29ydEJ1dHRvbih7XG4gICAgZGlyZWN0aW9uLFxuICAgIG9uQ2xpY2ssXG4gICAgY2xhc3NOYW1lLFxufToge1xuICAgIGRpcmVjdGlvbj86IFNvcnREaXJlY3Rpb247XG4gICAgb25DbGljaz86IChldnQ6IE1vdXNlRXZlbnQpID0+IGFueTtcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgaWNvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09IFwiYXNjZW5kaW5nXCIpIHJldHVybiBmYVNvcnREb3duO1xuICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gXCJkZXNjZW5kaW5nXCIpIHJldHVybiBmYVNvcnRVcDtcbiAgICAgICAgcmV0dXJuIGZhU29ydDtcbiAgICB9LCBbZGlyZWN0aW9uXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IG9uQ2xpY2s9e29uQ2xpY2t9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17aWNvbn0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cblxuLyoqIERlZmF1bHQgY29tcGFyYXRvciBmb3Igc29ydGluZyBvbiBhIHRhYmxlIGNvbHVtbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RBQkxFX0NPTVBBUkFUT1I6IDxUPihhOiBMaXRlcmFsLCBiOiBMaXRlcmFsLCBhbzogVCwgYm86IFQpID0+IG51bWJlciA9IChhLCBiLCBfYW8sIF9ibykgPT5cbiAgICBMaXRlcmFscy5jb21wYXJlKGEsIGIpO1xuXG4vLy8vLy8vLy8vLy8vLy8vL1xuLy8gVGFibGUgSG9va3MgLy9cbi8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFRhYmxlQWN0aW9uID1cbiAgICB8IHsgdHlwZTogXCJyZXNldC1hbGxcIiB9XG4gICAgfCB7IHR5cGU6IFwic2V0LXBhZ2VcIjsgcGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogXCJzb3J0LWNvbHVtblwiOyBjb2x1bW46IHN0cmluZzsgZGlyZWN0aW9uPzogXCJhc2NlbmRpbmdcIiB8IFwiZGVzY2VuZGluZ1wiIH07XG5cbmV4cG9ydCB0eXBlIFNvcnREaXJlY3Rpb24gPSBcImFzY2VuZGluZ1wiIHwgXCJkZXNjZW5kaW5nXCI7XG5cbi8qKiBUaGUgd2F5cyB0aGF0IHRoZSB0YWJsZSBjYW4gYmUgc29ydGVkLiAqL1xuZXhwb3J0IHR5cGUgU29ydE9uID0geyB0eXBlOiBcImNvbHVtblwiOyBpZDogc3RyaW5nOyBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gfTtcbiIsICIvKipcbiAqIEBtb2R1bGUgdmlld3NcbiAqL1xuaW1wb3J0IHsgVk5vZGUgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBQcm9wc1dpdGhDaGlsZHJlbiB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVkU3RhdGUgfSBmcm9tIFwidWkvaG9va3NcIjtcblxuaW1wb3J0IFwiLi9jYWxsb3V0LmNzc1wiO1xuaW1wb3J0IHsgY29tYmluZUNsYXNzZXMgfSBmcm9tIFwiLi4vYmFzaWNzXCI7XG5cbi8qKiBHZW5lcmFsIHByb3BlcnRpZXMgZm9yIGNvbmZpZ3VyaW5nIGEgY2FsbG91dC5cbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENhbGxvdXRQcm9wcyB7XG4gICAgLyoqIFRpdGxlIG9mIHRoZSBjYWxsb3V0LiAqL1xuICAgIHRpdGxlOiBzdHJpbmcgfCBWTm9kZTtcbiAgICAvKiogQXJiaXRyYXJ5IGljb24gdG8gc2hvdyBhdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0aXRsZSBpbiB0aGUgY2FsbG91dC4gKi9cbiAgICBpY29uPzogVk5vZGU7XG4gICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBjYWxsb3V0LiAqL1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNhbGxvdXQgaXMgY29sbGFwc2libGUgKGRlZmF1bHRzIHRvIHRydWUpLiAqL1xuICAgIGNvbGxhcHNpYmxlPzogYm9vbGVhbjtcblxuICAgIC8qKiBDb250cm9sbGVkIHByb3AgZm9yIHNldHRpbmcgd2hldGhlciB0aGUgY2FsbG91dCBpcyBvcGVuLiAqL1xuICAgIG9wZW46IGJvb2xlYW47XG4gICAgLyoqIFdoZXRoZXIgdGhlIGNhbGxvdXQgaXMgaW5pdGlhbGx5IG9wZW4gaWYgdW5jb250cm9sbGVkLiAqL1xuICAgIGluaXRpYWxPcGVuPzogYm9vbGVhbjtcbiAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIHRoZSBvcGVuIHN0YXRlIG9mIHRoZSBjYWxsb3V0IGNoYW5nZXMgZHVlIHRvIHVzZXIgYWN0aW9uLiAqL1xuICAgIG9uT3BlbkNoYW5nZT86ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuLyoqIFNwbGl0cyBvbiBgfDxzdHVmZj5gLiAqL1xuY29uc3QgTUVUQURBVEFfU1BMSVRfUkVHRVggPSAvXFx8KC4qKS9zO1xuXG4vKipcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKiBAcGFyYW0gcHJvcHMge0Bpbmhlcml0RG9jIENhbGxvdXRQcm9wc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENhbGxvdXQoe1xuICAgIGNvbGxhcHNpYmxlID0gdHJ1ZSxcbiAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICBpbml0aWFsT3BlbixcbiAgICBvbk9wZW5DaGFuZ2UsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBjaGlsZHJlbixcbiAgICB0eXBlLFxufTogUHJvcHNXaXRoQ2hpbGRyZW48Q2FsbG91dFByb3BzPikge1xuICAgIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShpbml0aWFsT3BlbiA/PyB0cnVlLCBvcGVuUHJvcCwgb25PcGVuQ2hhbmdlKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBkYXRhLWNhbGxvdXQtbWV0YWRhdGE9e3R5cGU/LnNwbGl0KE1FVEFEQVRBX1NQTElUX1JFR0VYKT8uWzFdfVxuICAgICAgICAgICAgZGF0YS1jYWxsb3V0PXt0eXBlPy5zcGxpdChNRVRBREFUQV9TUExJVF9SRUdFWCk/LlswXX1cbiAgICAgICAgICAgIGRhdGEtY2FsbG91dC1mb2xkPXtvcGVuID8gXCIrXCIgOiBcIi1cIn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJkYXRhY29yZVwiLCBcImNhbGxvdXRcIiwgY29sbGFwc2libGUgPyBcImlzLWNvbGxhcHNpYmxlXCIgOiB1bmRlZmluZWQpfVxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhbGxvdXQtdGl0bGVcIiBvbkNsaWNrPXsoKSA9PiBjb2xsYXBzaWJsZSAmJiBzZXRPcGVuKCFvcGVuKX0+XG4gICAgICAgICAgICAgICAge2ljb24gJiYgPGRpdiBjbGFzc05hbWU9XCJjYWxsb3V0LWljb25cIj57aWNvbn08L2Rpdj59XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYWxsb3V0LXRpdGxlLWlubmVyXCI+e3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgIHtjb2xsYXBzaWJsZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImNhbGxvdXQtZm9sZFwiLCAhb3BlbiA/IFwiaXMtY29sbGFwc2VkXCIgOiB1bmRlZmluZWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gbHVjaWRlLWNoZXZyb24tZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIm02IDkgNiA2IDYtNlwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7b3BlbiAmJiA8ZGl2IGNsYXNzTmFtZT1cImNhbGxvdXQtY29udGVudFwiPntjaGlsZHJlbn08L2Rpdj59XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cblxuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcblxuaW1wb3J0IFwiLi9jYXJkcy5jc3NcIjtcbi8qKlxuICogUHJvcHMgZm9yIHRoZSBjYXJkIGNvbXBvbmVudFxuICpcbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcmRQcm9wczxUPiB7XG4gICAgLyoqIHRoZSBhY3R1YWwgdmFsdWUgaGVsZCBpbiB0aGlzIGNhcmQuICovXG4gICAgdmFsdWU6IFQ7XG5cbiAgICAvKiogVGhlIHRpdGxlIG9mIHRoZSBjYXJkLiAqL1xuICAgIHRpdGxlOiBMaXRlcmFsIHwgKCh2YWw6IFQpID0+IExpdGVyYWwgfCBWTm9kZSk7XG5cbiAgICAvKiogVGhlIHJhdyBjb250ZW50IG9mIHRoZSBjYXJkLiAqL1xuICAgIGNvbnRlbnQ6IExpdGVyYWwgfCAoKHZhbDogVCkgPT4gTGl0ZXJhbCB8IFZOb2RlKTtcblxuICAgIC8qKiBvcHRpb25hbCBmb290ZXIgKGJlY2F1c2Ugd2h5IG5vdD8pICovXG4gICAgZm9vdGVyPzogTGl0ZXJhbCB8ICgodmFsOiBUKSA9PiBMaXRlcmFsIHwgVk5vZGUpO1xuXG4gICAgLyoqIElmIHRydWUsIHRoZSB0aXRsZSB3aWxsIGJlIHJlbmRlcmVkIGNlbnRlcmVkLiAqL1xuICAgIGNlbnRlclRpdGxlPzogYm9vbGVhbjtcbn1cbi8qKlxuICogQSBjYXJkIHdpdGggYSB0aXRsZSBhbmQgY29udGVudFxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDYXJkPFQ+KHByb3BzOiBDYXJkUHJvcHM8VD4pIHtcbiAgICBjb25zdCBjYXJkVGl0bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy50aXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGl0bGUocHJvcHMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRpdGxlO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZhbHVlLCBwcm9wcy50aXRsZV0pO1xuXG4gICAgY29uc3QgaW5uZXJDb250ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gcHJvcHMuY29udGVudChwcm9wcy52YWx1ZSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHByb3BzLmNvbnRlbnQ7XG4gICAgfSwgW3Byb3BzLnZhbHVlLCBwcm9wcy5jb250ZW50XSk7XG5cbiAgICBjb25zdCBmb290ZXJDb250ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5mb290ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5mb290ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5mb290ZXIocHJvcHMudmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuZm9vdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sIFtwcm9wcy5mb290ZXIsIHByb3BzLnZhbHVlXSk7XG5cbiAgICBjb25zdCB0aXRsZUNsYXNzZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IGJhc2UgPSBbXCJkYXRhY29yZS1jYXJkLXRpdGxlXCJdO1xuICAgICAgICBpZiAocHJvcHMuY2VudGVyVGl0bGUpIGJhc2UgPSBiYXNlLmNvbmNhdChcImNlbnRlcmVkXCIpO1xuICAgICAgICByZXR1cm4gYmFzZTtcbiAgICB9LCBbcHJvcHMuY2VudGVyVGl0bGUsIHByb3BzLnRpdGxlLCBwcm9wcy5jb250ZW50LCBwcm9wcy52YWx1ZV0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1jYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGl0bGVDbGFzc2VzLmpvaW4oXCIgXCIpfT57Y2FyZFRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1jYXJkLWlubmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1jYXJkLWNvbnRlbnRcIj57aW5uZXJDb250ZW50fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtY2FyZC1mb290ZXJcIj57Zm9vdGVyQ29udGVudH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSBhcGlcbiAqL1xuaW1wb3J0IHsgR3JvdXBpbmdzLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcblxuLyoqIEEgZnVuY3Rpb24gd2hpY2ggbWFwcyBhbiBhcnJheSBlbGVtZW50IHRvIHNvbWUgdmFsdWUuICovXG5leHBvcnQgdHlwZSBBcnJheUZ1bmM8VCwgTz4gPSAoZWxlbTogVCwgaW5kZXg6IG51bWJlciwgYXJyOiBUW10pID0+IE87XG5cbi8qKiBBIGZ1bmN0aW9uIHdoaWNoIGNvbXBhcmVzIHR3byB0eXBlcy4gKi9cbmV4cG9ydCB0eXBlIEFycmF5Q29tcGFyYXRvcjxUPiA9IChhOiBULCBiOiBUKSA9PiBudW1iZXI7XG5cbi8qKiBGaW5kcyB0aGUgdmFsdWUgb2YgdGhlIGxvd2VzdCB2YWx1ZSB0eXBlIGluIGEgZ3JvdXBpbmcuICovXG5leHBvcnQgdHlwZSBMb3dlc3RLZXk8VD4gPSBUIGV4dGVuZHMgeyBrZXk6IGFueTsgcm93czogYW55IH0gPyBMb3dlc3RLZXk8VFtcInJvd3NcIl1bMF0+IDogVDtcblxuLyoqIEEgcmlkaWN1bG91cyB0eXBlIHdoaWNoIHByb3Blcmx5IHR5cGVzIHRoZSByZXN1bHQgb2YgdGhlICdncm91cEluJyBjb21tYW5kLiAqL1xuZXhwb3J0IHR5cGUgSW5ncm91cGVkPFUsIFQ+ID0gVCBleHRlbmRzIHsga2V5OiBhbnk7IHJvd3M6IGFueSB9XG4gICAgPyB7IGtleTogVFtcImtleVwiXTsgcm93czogSW5ncm91cGVkPFUsIFRbXCJyb3dzXCJdWzBdPiB9XG4gICAgOiB7IGtleTogVTsgcm93czogVFtdIH07XG5cbi8qKlxuICogUHJveGllZCBpbnRlcmZhY2Ugd2hpY2ggYWxsb3dzIG1hbmlwdWxhdGluZyBhcnJheS1iYXNlZCBkYXRhLiBBbGwgZnVuY3Rpb25zIG9uIGEgZGF0YSBhcnJheSBwcm9kdWNlIGEgTkVXIGFycmF5XG4gKiAoaS5lLiwgdGhlIGFycmF5cyBhcmUgaW1tdXRhYmxlKS5cbiAqIEBncm91cCBDb21tb24gVHlwZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhQXJyYXk8VD4ge1xuICAgIC8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS4gKi9cbiAgICBsZW5ndGg6IG51bWJlcjtcblxuICAgIC8qKiBBcHBsaWVzIHRoZSBnaXZlbiBmdW5jdGlvbiB0byB0aGUgZW50aXJlIGRhdGEgYXJyYXkuIEFsbG93cyB1c2luZyBmdW5jdGlvbiBjaGFpbmluZyB3aGlsZSBhcHBseWluZyBhbiBhcmJpdHJhcnkgaW50ZXJtZWRpYXRlIGZ1bmN0aW9uLiAqL1xuICAgIGNoYWluPFU+KG9wOiAoYXJyOiBEYXRhQXJyYXk8VD4pID0+IERhdGFBcnJheTxVPik6IERhdGFBcnJheTxVPjtcblxuICAgIC8qKiBGaWx0ZXIgdGhlIGRhdGEgYXJyYXkgZG93biB0byBqdXN0IGVsZW1lbnRzIHdoaWNoIG1hdGNoIHRoZSBnaXZlbiBwcmVkaWNhdGUuICovXG4gICAgd2hlcmUocHJlZGljYXRlOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBEYXRhQXJyYXk8VD47XG4gICAgLyoqIEFsaWFzIGZvciAnd2hlcmUnIGZvciBwZW9wbGUgd2hvIHdhbnQgYXJyYXkgc2VtYW50aWNzLiAqL1xuICAgIGZpbHRlcihwcmVkaWNhdGU6IEFycmF5RnVuYzxULCBib29sZWFuPik6IERhdGFBcnJheTxUPjtcblxuICAgIC8qKiBNYXAgZWxlbWVudHMgaW4gdGhlIGRhdGEgYXJyYXkgYnkgYXBwbHlpbmcgYSBmdW5jdGlvbiB0byBlYWNoLiAqL1xuICAgIG1hcDxVPihmOiBBcnJheUZ1bmM8VCwgVT4pOiBEYXRhQXJyYXk8VT47XG4gICAgLyoqIE1hcCBlbGVtZW50cyBpbiB0aGUgZGF0YSBhcnJheSBieSBhcHBseWluZyBhIGZ1bmN0aW9uIHRvIGVhY2gsIHRoZW4gZmxhdHRlbiB0aGUgcmVzdWx0cyB0byBwcm9kdWNlIGEgbmV3IGFycmF5LiAqL1xuICAgIGZsYXRNYXA8VT4oZjogQXJyYXlGdW5jPFQsIFVbXT4pOiBEYXRhQXJyYXk8VT47XG4gICAgLyoqIE11dGFibHkgY2hhbmdlIGVhY2ggdmFsdWUgaW4gdGhlIGFycmF5LCByZXR1cm5pbmcgdGhlIHNhbWUgYXJyYXkgd2hpY2ggeW91IGNhbiBmdXJ0aGVyIGNoYWluIG9mZiBvZi4gKi9cbiAgICBtdXRhdGUoZjogQXJyYXlGdW5jPFQsIHZvaWQ+KTogRGF0YUFycmF5PFQ+O1xuXG4gICAgLyoqIExpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYXJyYXkgdG8gdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIGxpbWl0KGNvdW50OiBudW1iZXIpOiBEYXRhQXJyYXk8VD47XG4gICAgLyoqXG4gICAgICogVGFrZSBhIHNsaWNlIG9mIHRoZSBhcnJheS4gSWYgYHN0YXJ0YCBpcyB1bmRlZmluZWQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgMDsgaWYgYGVuZGAgaXMgdW5kZWZpbmVkLCBpdCBpcyBhc3N1bWJlZFxuICAgICAqIHRvIGJlIHRoZSBlbmQgb2YgdGhlIGFycmF5LlxuICAgICAqL1xuICAgIHNsaWNlKHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBEYXRhQXJyYXk8VD47XG4gICAgLyoqIENvbmNhdGVuYXRlIHRoZSB2YWx1ZXMgaW4gdGhpcyBkYXRhIGFycmF5IHdpdGggdGhvc2Ugb2YgYW5vdGhlciBpdGVyYWJsZSAvIGRhdGEgYXJyYXkgLyBhcnJheS4gKi9cbiAgICBjb25jYXQob3RoZXI6IEl0ZXJhYmxlPFQ+KTogRGF0YUFycmF5PFQ+O1xuXG4gICAgLyoqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgdGhlIGdpdmVuIChvcHRpb25hbGx5IHN0YXJ0aW5nIHRoZSBzZWFyY2gpICovXG4gICAgaW5kZXhPZihlbGVtZW50OiBULCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG4gICAgLyoqIFJldHVybiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IHNhdGlzZmllcyB0aGUgZ2l2ZW4gcHJlZGljYXRlLiAqL1xuICAgIGZpbmQocHJlZDogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogVCB8IHVuZGVmaW5lZDtcbiAgICAvKiogRmluZCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS4gUmV0dXJucyAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC4gKi9cbiAgICBmaW5kSW5kZXgocHJlZDogQXJyYXlGdW5jPFQsIGJvb2xlYW4+LCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXI7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXkgY29udGFpbnMgdGhlIGdpdmVuIGVsZW1lbnQsIGFuZCBmYWxzZSBvdGhlcndpc2UuICovXG4gICAgaW5jbHVkZXMoZWxlbWVudDogVCk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgb2J0YWluZWQgYnkgY29udmVydGluZyBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHRvIGEgc3RyaW5nLCBhbmQgam9pbmluZyBpdCB3aXRoIHRoZVxuICAgICAqIGdpdmVuIHNlcGFyYXRvciAod2hpY2ggZGVmYXVsdHMgdG8gJywgJykuXG4gICAgICovXG4gICAgam9pbihzZXA/OiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBzb3J0ZWQgYXJyYXkgc29ydGVkIGJ5IHRoZSBnaXZlbiBrZXk7IGFuIG9wdGlvbmFsIGNvbXBhcmF0b3IgY2FuIGJlIHByb3ZpZGVkLCB3aGljaCB3aWxsXG4gICAgICogYmUgdXNlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIGxlaXUgb2YgdGhlIGRlZmF1bHQgZGF0YXZpZXcgY29tcGFyYXRvci5cbiAgICAgKi9cbiAgICBzb3J0PFU+KGtleTogQXJyYXlGdW5jPFQsIFU+LCBkaXJlY3Rpb24/OiBcImFzY1wiIHwgXCJkZXNjXCIsIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD47XG5cbiAgICAvKipcbiAgICAgKiBNdXRhYmx5IG1vZGlmeSB0aGUgY3VycmVudCBhcnJheSB3aXRoIGFuIGluIHBsYWNlIHNvcnQ7IHRoaXMgaXMgbGVzcyBmbGV4aWJsZSB0aGFuIGEgcmVndWxhciBzb3J0IGluIGV4Y2hhbmdlXG4gICAgICogZm9yIGJlaW5nIGEgbGl0dGxlIG1vcmUgcGVyZm9ybWFudC4gT25seSB1c2UgdGhpcyBpcyBwZXJmb3JtYW5jZSBpcyBhIHNlcmlvdXMgY29uc2lkZXJhdGlvbi5cbiAgICAgKi9cbiAgICBzb3J0SW5QbGFjZTxVPihrZXk6ICh2OiBUKSA9PiBVLCBkaXJlY3Rpb24/OiBcImFzY1wiIHwgXCJkZXNjXCIsIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD47XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgd2hlcmUgZWxlbWVudHMgYXJlIGdyb3VwZWQgYnkgdGhlIGdpdmVuIGtleTsgdGhlIHJlc3VsdGluZyBhcnJheSB3aWxsIGhhdmUgb2JqZWN0cyBvZiB0aGUgZm9ybVxuICAgICAqIFxcYHsga2V5OiBcXDxrZXkgdmFsdWVcXD4sIHJvd3M6IERhdGFBcnJheSB9YC5cbiAgICAgKi9cbiAgICBncm91cEJ5PFU+KGtleTogQXJyYXlGdW5jPFQsIFU+LCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PHsga2V5OiBVOyByb3dzOiBUW10gfT47XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgYXJyYXkgaXMgbm90IGdyb3VwZWQsIGdyb3VwcyBpdCBhcyBgZ3JvdXBCeWAgZG9lczsgb3RoZXJ3aXNlLCBncm91cHMgdGhlIGVsZW1lbnRzIGluc2lkZSBlYWNoIGN1cnJlbnRcbiAgICAgKiBncm91cC4gVGhpcyBhbGxvd3MgZm9yIHRvcC1kb3duIHJlY3Vyc2l2ZSBncm91cGluZyB3aGljaCBtYXkgYmUgZWFzaWVyIHRoYW4gYm90dG9tLXVwIGdyb3VwaW5nLlxuICAgICAqL1xuICAgIGdyb3VwSW48VT4oa2V5OiBBcnJheUZ1bmM8TG93ZXN0S2V5PFQ+LCBVPiwgY29tcGFyYXRvcj86IEFycmF5Q29tcGFyYXRvcjxVPik6IERhdGFBcnJheTxJbmdyb3VwZWQ8VSwgVD4+O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGRpc3RpbmN0IGVudHJpZXMuIElmIGEga2V5IGlzIHByb3ZpZGVkLCB0aGVuIHJvd3Mgd2l0aCBkaXN0aW5jdCBrZXlzIGFyZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBkaXN0aW5jdDxVPihrZXk/OiBBcnJheUZ1bmM8VCwgVT4sIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD47XG5cbiAgICAvKiogUmV0dXJuIHRydWUgaWYgdGhlIHByZWRpY2F0ZSBpcyB0cnVlIGZvciBhbGwgdmFsdWVzLiAqL1xuICAgIGV2ZXJ5KGY6IEFycmF5RnVuYzxULCBib29sZWFuPik6IGJvb2xlYW47XG4gICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBwcmVkaWNhdGUgaXMgdHJ1ZSBmb3IgYXQgbGVhc3Qgb25lIHZhbHVlLiAqL1xuICAgIHNvbWUoZjogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogYm9vbGVhbjtcbiAgICAvKiogUmV0dXJuIHRydWUgaWYgdGhlIHByZWRpY2F0ZSBpcyBGQUxTRSBmb3IgYWxsIHZhbHVlcy4gKi9cbiAgICBub25lKGY6IEFycmF5RnVuYzxULCBib29sZWFuPik6IGJvb2xlYW47XG5cbiAgICAvKiogUmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkYXRhIGFycmF5LiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuICovXG4gICAgZmlyc3QoKTogVDtcbiAgICAvKiogUmV0dXJuIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGRhdGEgYXJyYXkuIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBhcnJheSBpcyBlbXB0eS4gKi9cbiAgICBsYXN0KCk6IFQ7XG5cbiAgICAvKiogTWFwIGV2ZXJ5IGVsZW1lbnQgaW4gdGhpcyBkYXRhIGFycmF5IHRvIHRoZSBnaXZlbiBrZXksIGFuZCB0aGVuIGZsYXR0ZW4gaXQuKi9cbiAgICB0byhrZXk6IHN0cmluZyk6IERhdGFBcnJheTxhbnk+O1xuICAgIC8qKiBNYXAgZXZlcnkgZWxlbWVudCBpbiB0aGlzIGRhdGEgYXJyYXkgdG8gdGhlIGdpdmVuIGtleTsgdW5saWtlIHRvKCksIGRvZXMgbm90IGZsYXR0ZW4gdGhlIHJlc3VsdC4gKi9cbiAgICBpbnRvKGtleTogc3RyaW5nKTogRGF0YUFycmF5PGFueT47XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBleHBhbmQgdGhlIGdpdmVuIGtleSwgZmxhdHRlbmluZyBhIHRyZWUgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBrZXkgaW50byBhIGZsYXQgYXJyYXkuIFVzZWZ1bCBmb3IgaGFuZGxpbmdcbiAgICAgKiBoZWlyYXJjaGljYWwgZGF0YSBsaWtlIHRhc2tzIHdpdGggJ3N1YnRhc2tzJy5cbiAgICAgKi9cbiAgICBleHBhbmQoa2V5OiBzdHJpbmcpOiBEYXRhQXJyYXk8YW55PjtcblxuICAgIC8qKiBSdW4gYSBsYW1iZGEgb24gZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheS4gKi9cbiAgICBmb3JFYWNoKGY6IEFycmF5RnVuYzxULCB2b2lkPik6IHZvaWQ7XG5cbiAgICAvKiogQ29udmVydCB0aGlzIHRvIGEgcGxhaW4gamF2YXNjcmlwdCBhcnJheS4gKi9cbiAgICBhcnJheSgpOiBUW107XG5cbiAgICAvKiogQWxsb3cgaXRlcmF0aW5nIGRpcmVjdGx5IG92ZXIgdGhlIGFycmF5LiAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhdG9yPFQ+O1xuXG4gICAgLyoqIE1hcCBpbmRleGVzIHRvIHZhbHVlcy4gKi9cbiAgICBbaW5kZXg6IG51bWJlcl06IGFueTtcbiAgICAvKiogQXV0b21hdGljIGZsYXR0ZW5pbmcgb2YgZmllbGRzLiBFcXVpdmFsZW50IHRvIGltcGxpY2l0bHkgY2FsbGluZyBgYXJyYXkudG8oXCJmaWVsZFwiKWAgKi9cbiAgICBbZmllbGQ6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBoaWRkZW5cbiAqIEltcGxlbWVudGF0aW9uIG9mIERhdGFBcnJheSwgbWludXMgdGhlIGR5bmFtaWMgdmFyaWFibGUgYWNjZXNzLCB3aGljaCBpcyBpbXBsZW1lbnRlZCB2aWEgcHJveHkuXG4gKiAqL1xuY2xhc3MgRGF0YUFycmF5SW1wbDxUPiBpbXBsZW1lbnRzIERhdGFBcnJheTxUPiB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgQVJSQVlfRlVOQ1RJT05TOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICAgICBcImNoYWluXCIsXG4gICAgICAgIFwid2hlcmVcIixcbiAgICAgICAgXCJmaWx0ZXJcIixcbiAgICAgICAgXCJtYXBcIixcbiAgICAgICAgXCJmbGF0TWFwXCIsXG4gICAgICAgIFwibXV0YXRlXCIsXG4gICAgICAgIFwic2xpY2VcIixcbiAgICAgICAgXCJjb25jYXRcIixcbiAgICAgICAgXCJpbmRleE9mXCIsXG4gICAgICAgIFwibGltaXRcIixcbiAgICAgICAgXCJmaW5kXCIsXG4gICAgICAgIFwiZmluZEluZGV4XCIsXG4gICAgICAgIFwiaW5jbHVkZXNcIixcbiAgICAgICAgXCJqb2luXCIsXG4gICAgICAgIFwic29ydFwiLFxuICAgICAgICBcInNvcnRJblBsYWNlXCIsXG4gICAgICAgIFwiZ3JvdXBCeVwiLFxuICAgICAgICBcImdyb3VwSW5cIixcbiAgICAgICAgXCJkaXN0aW5jdFwiLFxuICAgICAgICBcImV2ZXJ5XCIsXG4gICAgICAgIFwic29tZVwiLFxuICAgICAgICBcIm5vbmVcIixcbiAgICAgICAgXCJmaXJzdFwiLFxuICAgICAgICBcImxhc3RcIixcbiAgICAgICAgXCJ0b1wiLFxuICAgICAgICBcImludG9cIixcbiAgICAgICAgXCJsd3JhcFwiLFxuICAgICAgICBcImV4cGFuZFwiLFxuICAgICAgICBcImZvckVhY2hcIixcbiAgICAgICAgXCJsZW5ndGhcIixcbiAgICAgICAgXCJ2YWx1ZXNcIixcbiAgICAgICAgXCJhcnJheVwiLFxuICAgICAgICBcImRlZmF1bHRDb21wYXJhdG9yXCIsXG4gICAgICAgIFwidG9TdHJpbmdcIixcbiAgICAgICAgXCJzZXR0aW5nc1wiLFxuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgQVJSQVlfUFJPWFk6IFByb3h5SGFuZGxlcjxEYXRhQXJyYXlJbXBsPGFueT4+ID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIHByb3AsIHJlY2lldmVyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3ltYm9sXCIpIHJldHVybiAodGFyZ2V0IGFzIGFueSlbcHJvcF07XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHRhcmdldC52YWx1ZXNbcHJvcF07XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSBcImNvbnN0cnVjdG9yXCIpIHJldHVybiB0YXJnZXQudmFsdWVzLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgZWxzZSBpZiAoIWlzTmFOKHBhcnNlSW50KHByb3ApKSkgcmV0dXJuIHRhcmdldC52YWx1ZXNbcGFyc2VJbnQocHJvcCldO1xuICAgICAgICAgICAgZWxzZSBpZiAoRGF0YUFycmF5SW1wbC5BUlJBWV9GVU5DVElPTlMuaGFzKHByb3AudG9TdHJpbmcoKSkpIHJldHVybiB0YXJnZXRbcHJvcC50b1N0cmluZygpXTtcblxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC50byhwcm9wKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgcHVibGljIHN0YXRpYyB3cmFwPFQ+KGFycjogVFtdLCBkZWZhdWx0Q29tcGFyYXRvcjogQXJyYXlDb21wYXJhdG9yPGFueT4gPSBMaXRlcmFscy5jb21wYXJlKTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eTxEYXRhQXJyYXlJbXBsPFQ+PihuZXcgRGF0YUFycmF5SW1wbDxUPihhcnIsIGRlZmF1bHRDb21wYXJhdG9yKSwgRGF0YUFycmF5SW1wbC5BUlJBWV9QUk9YWSk7XG4gICAgfVxuXG4gICAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHZhbHVlczogYW55W10sIHB1YmxpYyBkZWZhdWx0Q29tcGFyYXRvcjogQXJyYXlDb21wYXJhdG9yPGFueT4gPSBMaXRlcmFscy5jb21wYXJlKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGx3cmFwPFU+KHZhbHVlczogVVtdKTogRGF0YUFycmF5PFU+IHtcbiAgICAgICAgcmV0dXJuIERhdGFBcnJheUltcGwud3JhcCh2YWx1ZXMsIHRoaXMuZGVmYXVsdENvbXBhcmF0b3IpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFpbjxVPihvcDogKGFycjogRGF0YUFycmF5PFQ+KSA9PiBEYXRhQXJyYXk8VT4pOiBEYXRhQXJyYXk8VT4ge1xuICAgICAgICByZXR1cm4gb3AodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdoZXJlKHByZWRpY2F0ZTogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAodGhpcy52YWx1ZXMuZmlsdGVyKHByZWRpY2F0ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXIocHJlZGljYXRlOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy53aGVyZShwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXA8VT4oZjogQXJyYXlGdW5jPFQsIFU+KTogRGF0YUFycmF5PFU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAodGhpcy52YWx1ZXMubWFwKGYpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmxhdE1hcDxVPihmOiBBcnJheUZ1bmM8VCwgVVtdPik6IERhdGFBcnJheTxVPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBmKHRoaXMudmFsdWVzW2luZGV4XSwgaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoID09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBmb3IgKGxldCByIG9mIHZhbHVlKSByZXN1bHQucHVzaChyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIG11dGF0ZShmOiBBcnJheUZ1bmM8VCwgdm9pZD4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBmKHRoaXMudmFsdWVzW2luZGV4XSwgaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbGltaXQoY291bnQ6IG51bWJlcik6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHRoaXMudmFsdWVzLnNsaWNlKDAsIGNvdW50KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNsaWNlKHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcCh0aGlzLnZhbHVlcy5zbGljZShzdGFydCwgZW5kKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmNhdChvdGhlcjogRGF0YUFycmF5PFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAodGhpcy52YWx1ZXMuY29uY2F0KG90aGVyLnZhbHVlcykpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IG9mIHRoZSBnaXZlbiAob3B0aW9uYWxseSBzdGFydGluZyB0aGUgc2VhcmNoKSAqL1xuICAgIHB1YmxpYyBpbmRleE9mKGVsZW1lbnQ6IFQsIGZyb21JbmRleD86IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRJbmRleCgoZSkgPT4gdGhpcy5kZWZhdWx0Q29tcGFyYXRvcihlLCBlbGVtZW50KSA9PSAwLCBmcm9tSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS4gKi9cbiAgICBwdWJsaWMgZmluZChwcmVkOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5maW5kSW5kZXgocHJlZCk7XG4gICAgICAgIGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kSW5kZXgocHJlZDogQXJyYXlGdW5jPFQsIGJvb2xlYW4+LCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IGZyb21JbmRleCA/PyAwOyBpbmRleCA8IHRoaXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpZiAocHJlZCh0aGlzLnZhbHVlc1tpbmRleF0sIGluZGV4LCB0aGlzLnZhbHVlcykpIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5jbHVkZXMoZWxlbWVudDogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleE9mKGVsZW1lbnQsIDApICE9IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBqb2luKHNlcD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcCgocykgPT4gTGl0ZXJhbHMudG9TdHJpbmcocykpXG4gICAgICAgICAgICAuYXJyYXkoKVxuICAgICAgICAgICAgLmpvaW4oc2VwID8/IFwiLCBcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnQ8VT4oa2V5PzogQXJyYXlGdW5jPFQsIFU+LCBkaXJlY3Rpb24/OiBcImFzY1wiIHwgXCJkZXNjXCIsIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09IDApIHJldHVybiB0aGlzO1xuICAgICAgICBsZXQgcmVhbENvbXBhcmF0b3IgPSBjb21wYXJhdG9yID8/IHRoaXMuZGVmYXVsdENvbXBhcmF0b3I7XG4gICAgICAgIGxldCByZWFsS2V5ID0ga2V5ID8/ICgobDogVCkgPT4gbCBhcyBhbnkgYXMgVSk7XG5cbiAgICAgICAgLy8gQXNzb2NpYXRlIGVhY2ggZW50cnkgd2l0aCBpdCdzIGluZGV4IGZvciB0aGUga2V5IGZ1bmN0aW9uLCBhbmQgdGhlbiBkbyBhIG5vcm1hbCBzb3J0LlxuICAgICAgICBsZXQgY29weSA9IChbXSBhcyBhbnlbXSkuY29uY2F0KHRoaXMuYXJyYXkoKSkubWFwKChlbGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgaW5kZXg6IGluZGV4LCB2YWx1ZTogZWxlbSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29weS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBsZXQgYUtleSA9IHJlYWxLZXkoYS52YWx1ZSwgYS5pbmRleCwgdGhpcy52YWx1ZXMpO1xuICAgICAgICAgICAgbGV0IGJLZXkgPSByZWFsS2V5KGIudmFsdWUsIGIuaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IFwiZGVzY1wiID8gLXJlYWxDb21wYXJhdG9yKGFLZXksIGJLZXkpIDogcmVhbENvbXBhcmF0b3IoYUtleSwgYktleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKGNvcHkubWFwKChlKSA9PiBlLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnRJblBsYWNlPFU+KFxuICAgICAgICBrZXk/OiAodmFsdWU6IFQpID0+IFUsXG4gICAgICAgIGRpcmVjdGlvbj86IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgICAgICAgY29tcGFyYXRvcj86IEFycmF5Q29tcGFyYXRvcjxVPlxuICAgICk6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggPT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgICAgIGxldCByZWFsQ29tcGFyYXRvciA9IGNvbXBhcmF0b3IgPz8gdGhpcy5kZWZhdWx0Q29tcGFyYXRvcjtcbiAgICAgICAgbGV0IHJlYWxLZXkgPSBrZXkgPz8gKChsOiBUKSA9PiBsIGFzIGFueSBhcyBVKTtcblxuICAgICAgICB0aGlzLnZhbHVlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBsZXQgYUtleSA9IHJlYWxLZXkoYSk7XG4gICAgICAgICAgICBsZXQgYktleSA9IHJlYWxLZXkoYik7XG5cbiAgICAgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gXCJkZXNjXCIgPyAtcmVhbENvbXBhcmF0b3IoYUtleSwgYktleSkgOiByZWFsQ29tcGFyYXRvcihhS2V5LCBiS2V5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwQnk8VT4oa2V5OiBBcnJheUZ1bmM8VCwgVT4sIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8eyBrZXk6IFU7IHJvd3M6IFRbXSB9PiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggPT0gMCkgcmV0dXJuIHRoaXMubHdyYXAoW10pO1xuXG4gICAgICAgIC8vIEphdmFTY3JpcHQgc3Vja3MgYW5kIHdlIGNhbid0IG1ha2UgaGFzaCBtYXBzIG92ZXIgYXJiaXRyYXJ5IHR5cGVzIChvbmx5IHN0cmluZ3MvaW50cyksIHNvXG4gICAgICAgIC8vIHdlIGRvIGEgcG9vciBtYW4gYWxnb3JpdGhtIHdoZXJlIHdlIFNPUlQsIGZvbGxvd2VkIGJ5IGdyb3VwaW5nLlxuICAgICAgICBsZXQgaW50ZXJtZWRpYXRlID0gdGhpcy5zb3J0KGtleSwgXCJhc2NcIiwgY29tcGFyYXRvcik7XG4gICAgICAgIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yID8/IHRoaXMuZGVmYXVsdENvbXBhcmF0b3I7XG5cbiAgICAgICAgbGV0IHJlc3VsdDogeyBrZXk6IFU7IHJvd3M6IFRbXSB9W10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3cgPSBbaW50ZXJtZWRpYXRlWzBdXTtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBrZXkoaW50ZXJtZWRpYXRlWzBdLCAwLCBpbnRlcm1lZGlhdGUudmFsdWVzKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGludGVybWVkaWF0ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGxldCBuZXdLZXkgPSBrZXkoaW50ZXJtZWRpYXRlW2luZGV4XSwgaW5kZXgsIGludGVybWVkaWF0ZS52YWx1ZXMpO1xuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoY3VycmVudCwgbmV3S2V5KSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBrZXk6IGN1cnJlbnQsIHJvd3M6IGN1cnJlbnRSb3cgfSk7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG5ld0tleTtcbiAgICAgICAgICAgICAgICBjdXJyZW50Um93ID0gW2ludGVybWVkaWF0ZVtpbmRleF1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Um93LnB1c2goaW50ZXJtZWRpYXRlW2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goeyBrZXk6IGN1cnJlbnQsIHJvd3M6IGN1cnJlbnRSb3cgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBJbjxVPihrZXk6IEFycmF5RnVuYzxMb3dlc3RLZXk8VD4sIFU+LCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PEluZ3JvdXBlZDxVLCBUPj4ge1xuICAgICAgICBpZiAoR3JvdXBpbmdzLmlzR3JvdXBpbmcodGhpcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICh2IGFzIGFueSkua2V5LFxuICAgICAgICAgICAgICAgICAgICByb3dzOiBEYXRhQXJyYXkud3JhcCgodiBhcyBhbnkpLnJvd3MpLmdyb3VwSW4oa2V5IGFzIGFueSwgY29tcGFyYXRvciBhcyBhbnkpLFxuICAgICAgICAgICAgICAgIH0gYXMgYW55O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cEJ5KGtleSBhcyBhbnksIGNvbXBhcmF0b3IpIGFzIGFueTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXN0aW5jdDxVPihrZXk/OiBBcnJheUZ1bmM8VCwgVT4sIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09IDApIHJldHVybiB0aGlzO1xuICAgICAgICBsZXQgcmVhbEtleSA9IGtleSA/PyAoKHgpID0+IHggYXMgYW55IGFzIFUpO1xuXG4gICAgICAgIC8vIEZvciBzaW1pbGFyIHJlYXNvbnMgdG8gZ3JvdXBCeSwgZG8gYSBzb3J0IGFuZCB0YWtlIHRoZSBmaXJzdCBlbGVtZW50IG9mIGVhY2ggYmxvY2suXG4gICAgICAgIGxldCBpbnRlcm1lZGlhdGUgPSB0aGlzLm1hcCgoeCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleTogcmVhbEtleSh4LCBpbmRleCwgdGhpcy52YWx1ZXMpLCB2YWx1ZTogeCB9O1xuICAgICAgICB9KS5zb3J0KCh4KSA9PiB4LmtleSwgXCJhc2NcIiwgY29tcGFyYXRvcik7XG4gICAgICAgIGNvbXBhcmF0b3IgPSBjb21wYXJhdG9yID8/IHRoaXMuZGVmYXVsdENvbXBhcmF0b3I7XG5cbiAgICAgICAgbGV0IHJlc3VsdDogVFtdID0gW2ludGVybWVkaWF0ZVswXS52YWx1ZV07XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpbnRlcm1lZGlhdGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpZiAoY29tcGFyYXRvcihpbnRlcm1lZGlhdGVbaW5kZXggLSAxXS5rZXksIGludGVybWVkaWF0ZVtpbmRleF0ua2V5KSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaW50ZXJtZWRpYXRlW2luZGV4XS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBldmVyeShmOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmV2ZXJ5KGYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb21lKGY6IEFycmF5RnVuYzxULCBib29sZWFuPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMuc29tZShmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm9uZShmOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmV2ZXJ5KCh2LCBpLCBhKSA9PiAhZih2LCBpLCBhKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpcnN0KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoID4gMCA/IHRoaXMudmFsdWVzWzBdIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwdWJsaWMgbGFzdCgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLnZhbHVlc1t0aGlzLnZhbHVlcy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG8oa2V5OiBzdHJpbmcpOiBEYXRhQXJyYXk8YW55PiB7XG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgICAgIGZvciAobGV0IGNoaWxkIG9mIHRoaXMudmFsdWVzKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBjaGlsZFtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgRGF0YUFycmF5LmlzRGF0YUFycmF5KHZhbHVlKSkgdmFsdWUuZm9yRWFjaCgodikgPT4gcmVzdWx0LnB1c2godikpO1xuICAgICAgICAgICAgZWxzZSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnRvKGtleTogc3RyaW5nKTogRGF0YUFycmF5PGFueT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gY2hpbGRba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwYW5kKGtleTogc3RyaW5nKTogRGF0YUFycmF5PGFueT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBxdWV1ZTogYW55W10gPSAoW10gYXMgYW55W10pLmNvbmNhdCh0aGlzLnZhbHVlcyk7XG5cbiAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gcXVldWUucG9wKCk7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBuZXh0W2tleV07XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUuZm9yRWFjaCgodikgPT4gcXVldWUucHVzaCh2KSk7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFBcnJheUltcGwpIHZhbHVlLmZvckVhY2goKHYpID0+IHF1ZXVlLnB1c2godikpO1xuICAgICAgICAgICAgZWxzZSBxdWV1ZS5wdXNoKHZhbHVlKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JFYWNoKGY6IEFycmF5RnVuYzxULCB2b2lkPikge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBmKHRoaXMudmFsdWVzW2luZGV4XSwgaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhcnJheSgpOiBUW10ge1xuICAgICAgICByZXR1cm4gKFtdIGFzIGFueVtdKS5jb25jYXQodGhpcy52YWx1ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYXRvcjxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIltcIiArIHRoaXMudmFsdWVzLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xuICAgIH1cbn1cblxuLyoqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBnZW5lcmF0aW5nIGRhdGEgYXJyYXlzLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgbmFtZXNwYWNlIERhdGFBcnJheSB7XG4gICAgLyoqIENyZWF0ZSBhIG5ldyBEYXRhdmlldyBkYXRhIGFycmF5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB3cmFwPFQ+KHJhdzogVFtdIHwgRGF0YUFycmF5PFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgaWYgKGlzRGF0YUFycmF5KHJhdykpIHJldHVybiByYXc7XG4gICAgICAgIHJldHVybiBEYXRhQXJyYXlJbXBsLndyYXAocmF3KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbmV3IERhdGFBcnJheSBmcm9tIGFuIGl0ZXJhYmxlIG9iamVjdC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZnJvbTxUPihyYXc6IEl0ZXJhYmxlPFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgaWYgKGlzRGF0YUFycmF5KHJhdykpIHJldHVybiByYXc7XG5cbiAgICAgICAgbGV0IGRhdGEgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbSBvZiByYXcpIGRhdGEucHVzaChlbGVtKTtcbiAgICAgICAgcmV0dXJuIERhdGFBcnJheUltcGwud3JhcChkYXRhKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIG9iamVjdCBpcyBhIGRhdGEgYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUFycmF5KG9iajogYW55KTogb2JqIGlzIERhdGFBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGFBcnJheUltcGw7XG4gICAgfVxufVxuXG4vLyBBIHNjYXJ5IGxvb2tpbmcgcG9seWZpbGwsIHN1cmUsIGJ1dCBpdCBmaXhlcyB1cCBkYXRhIGFycmF5L2FycmF5IGludGVyb3AgZm9yIHVzLlxuY29uc3Qgb2xkQXJyYXlJc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbkFycmF5LmlzQXJyYXkgPSAoYXJnKTogYXJnIGlzIGFueVtdID0+IHtcbiAgICByZXR1cm4gb2xkQXJyYXlJc0FycmF5KGFyZykgfHwgRGF0YUFycmF5LmlzRGF0YUFycmF5KGFyZyk7XG59O1xuIiwgIi8qKiBAaWdub3JlICovXG4vLyEgVXRpbGl0aWVzIGZvciBmb3JjaW5nIHR5cGVzIHRvIGJlIG9mIGEgc3BlY2lmaWMgdHlwZSBvciByZXR1cm5pbmcgJ3VuZGVmaW5lZCcgaWYgbm90LCBhbGxvd2luZyBmb3IgbXVjaCBtb3JlIGNvbmNpc2UgdHlwaW5nLlxuXG5pbXBvcnQgeyBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFBSSU1JVElWRVMgfSBmcm9tIFwiZXhwcmVzc2lvbi9wYXJzZXJcIjtcbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgcmVuZGVyTWluaW1hbERhdGUgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBDb2VyY2Uge1xuICAgIC8qKiBDb2VyY2VzIGNvbW1vbiB0eXBlcyB0byBzdHJpbmcgb3Igb3RoZXJ3aXNlIHVuZGVmaW5lZC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gc3RyaW5nKHZhbHVlOiBMaXRlcmFsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlck1pbmltYWxEYXRlKHdyYXBwZWQudmFsdWUsIFwieXl5eS1NTS1kZFwiLCBcInl5eXktTU0tZGQgSEg6bW06c3NcIik7XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm1hcmtkb3duKCk7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb2VyY2VzIGJvb2xlYW5zIGFuZCBzdHJpbmctYm9vbGVhbnMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4odmFsdWU6IExpdGVyYWwpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIENvZXJjZXMgbnVtYmVycyBhbmQgc3RyaW5ncyB0byBudW1iZXJzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBudW1iZXIodmFsdWU6IExpdGVyYWwpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkpIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBDb2VyY2VzIGRhdGVzIGFuZCBzdHJpbmdzIGludG8gZGF0ZXMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGRhdGUodmFsdWU6IExpdGVyYWwpOiBEYXRlVGltZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGVUaW1lKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gUFJJTUlUSVZFUy5kYXRlUGx1cy5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkLnN0YXR1cykgcmV0dXJuIHBhcnNlZC52YWx1ZTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIENvZXJjZXMgZHVyYXRpb25zIGFuZCBzdHJpbmdzIGludG8gZHVyYXRpb25zLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBkdXJhdGlvbih2YWx1ZTogTGl0ZXJhbCk6IER1cmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRHVyYXRpb24pIHJldHVybiB2YWx1ZTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBQUklNSVRJVkVTLmR1cmF0aW9uLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQuc3RhdHVzKSByZXR1cm4gcGFyc2VkLnZhbHVlO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQ29lcmNlcyBsaW5rcyBhbmQgc3RyaW5ncyBpbnRvIGxpbmtzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsaW5rKHZhbHVlOiBMaXRlcmFsKTogTGluayB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpbmspIHJldHVybiB2YWx1ZTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBQUklNSVRJVkVTLmVtYmVkTGluay5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkLnN0YXR1cykgcmV0dXJuIHBhcnNlZC52YWx1ZTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIENvZXJjZXMgYW55dGhpbmcgaW50byBhbiBhcnJheSwgYnkgY29udmVydGluZyBub24tYXJyYXlzIGludG8gdW5pdCBsZW5ndGggYXJyYXlzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBhcnJheSh2YWx1ZTogTGl0ZXJhbCk6IExpdGVyYWxbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBlbHNlIHJldHVybiBbdmFsdWVdO1xuICAgIH1cbn1cbiIsICIvKiogQSBwcm9taXNlIHRoYXQgY2FuIGJlIHJlc29sdmVkIGRpcmVjdGx5LiAqL1xuZXhwb3J0IHR5cGUgRGVmZXJyZWQ8VD4gPSBQcm9taXNlPFQ+ICYge1xuICAgIHJlc29sdmU6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgICByZWplY3Q6IChlcnJvcjogYW55KSA9PiB2b2lkO1xufTtcblxuLyoqIENyZWF0ZSBhIG5ldyBkZWZlcnJlZCBvYmplY3QsIHdoaWNoIGlzIGEgcmVzb2x2YWJsZSBwcm9taXNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmVycmVkPFQ+KCk6IERlZmVycmVkPFQ+IHtcbiAgICBsZXQgcmVzb2x2ZTogKHZhbHVlOiBUKSA9PiB2b2lkO1xuICAgIGxldCByZWplY3Q6IChlcnJvcjogYW55KSA9PiB2b2lkO1xuXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICByZWplY3QgPSByZWo7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZlcnJlZCA9IHByb21pc2UgYXMgYW55IGFzIERlZmVycmVkPFQ+O1xuICAgIGRlZmVycmVkLnJlc29sdmUgPSByZXNvbHZlITtcbiAgICBkZWZlcnJlZC5yZWplY3QgPSByZWplY3QhO1xuXG4gICAgcmV0dXJuIGRlZmVycmVkO1xufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRhc3RvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YXN0b3JlXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9yZXN1bHRcIjtcbmltcG9ydCB7IE1hcmtkb3duQ29kZWJsb2NrLCBNYXJrZG93blNlY3Rpb24gfSBmcm9tIFwiaW5kZXgvdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IERlZmVycmVkLCBkZWZlcnJlZCB9IGZyb20gXCJ1dGlscy9kZWZlcnJlZFwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UsIGFzeW5jRXZhbEluQ29udGV4dCwgdHJhbnNwaWxlIH0gZnJvbSBcInV0aWxzL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IGxpbmVSYW5nZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgVEZpbGUgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEZyYWdtZW50LCBoIH0gZnJvbSBcInByZWFjdFwiO1xuXG4vKiogQSBzY3JpcHQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgbG9hZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkaW5nU2NyaXB0IHtcbiAgICB0eXBlOiBcImxvYWRpbmdcIjtcblxuICAgIHBhdGg6IHN0cmluZztcbiAgICBwcm9taXNlOiBEZWZlcnJlZDxSZXN1bHQ8YW55LCBzdHJpbmc+Pjtcbn1cblxuLyoqIEEgc2NyaXB0IHRoYXQgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlZFNjcmlwdCB7XG4gICAgdHlwZTogXCJsb2FkZWRcIjtcblxuICAgIHBhdGg6IHN0cmluZztcbiAgICBvYmplY3Q6IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YWNvcmVTY3JpcHQgPSBMb2FkaW5nU2NyaXB0IHwgTG9hZGVkU2NyaXB0O1xuXG4vKiogQSBzaW1wbGUgY2FjaGluZyBzY3JpcHQgbG9hZGVyIHRoYXQgY2FuIGxvYWQgYW55IERBRyBvZiBzY3JpcHQgZGVwZW5kZW5jaWVzLiAqL1xuZXhwb3J0IGNsYXNzIFNjcmlwdENhY2hlIHtcbiAgICAvKiogQWxsIG9mIHRoZSB0YWdzIHdlIHJlY29nbml6ZSBmb3Igc2NyaXB0cy4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyBTQ1JJUFRfTEFOR1VBR0VTOiBSZWNvcmQ8c3RyaW5nLCBTY3JpcHRMYW5ndWFnZT4gPSB7XG4gICAgICAgIGpzOiBcImpzXCIsXG4gICAgICAgIGphdmFzY3JpcHQ6IFwianNcIixcbiAgICAgICAgZGF0YWNvcmVqczogXCJqc1wiLFxuICAgICAgICB0eXBlc2NyaXB0OiBcInRzXCIsXG4gICAgICAgIHRzOiBcInRzXCIsXG4gICAgICAgIGRhdGFjb3JldHM6IFwidHNcIixcbiAgICAgICAganN4OiBcImpzeFwiLFxuICAgICAgICBkYXRhY29yZWpzeDogXCJqc3hcIixcbiAgICAgICAgdHN4OiBcInRzeFwiLFxuICAgICAgICBkYXRhY29yZXRzeDogXCJ0c3hcIixcbiAgICB9O1xuXG4gICAgLyoqIEFsbCBvZiB0aGUgZGlyZWN0IGZpbGUgZXh0ZW5zaW9ucyB3ZSBjYW4gbG9hZC4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyBGSUxFX0VYVEVOU0lPTlM6IFJlY29yZDxzdHJpbmcsIFNjcmlwdExhbmd1YWdlPiA9IHtcbiAgICAgICAgdHN4OiBcInRzeFwiLFxuICAgICAgICBqc3g6IFwianN4XCIsXG4gICAgICAgIGpzOiBcImpzXCIsXG4gICAgICAgIHRzOiBcInRzXCIsXG4gICAgfTtcblxuICAgIC8qKiBDYWNoZXMgc2NyaXB0cyBieSBmdWxseSBxdWFsaWZpZWQgcGF0aC4gKi9cbiAgICBwdWJsaWMgc2NyaXB0czogTWFwPHN0cmluZywgRGF0YWNvcmVTY3JpcHQ+ID0gbmV3IE1hcDxzdHJpbmcsIERhdGFjb3JlU2NyaXB0PigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IERhdGFzdG9yZSkge31cblxuICAgIC8qKiBMb2FkIHRoZSBnaXZlbiBzY3JpcHQgYXQgdGhlIGdpdmVuIHBhdGgsIHJlY3Vyc2l2ZWx5IGxvYWRpbmcgYW55IHN1YnNjcmlwdHMgYXMgd2VsbC4gICovXG4gICAgcHVibGljIGFzeW5jIGxvYWQocGF0aDogc3RyaW5nIHwgTGluaywgY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8UmVzdWx0PGFueSwgc3RyaW5nPj4ge1xuICAgICAgICAvLyBBbHdheXMgY2hlY2sgdGhlIGNhY2hlIGZpcnN0LlxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnBhdGhrZXkocGF0aCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTY3JpcHQgPSB0aGlzLnNjcmlwdHMuZ2V0KGtleSk7XG4gICAgICAgIGlmIChjdXJyZW50U2NyaXB0KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFNjcmlwdC50eXBlID09PSBcImxvYWRlZFwiKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoY3VycmVudFNjcmlwdC5vYmplY3QpO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBJZiB3ZSB0cnkgdG8gbG9hZCBhbiBhbHJlYWR5LWxvYWRpbmcgc2NyaXB0LCB3ZSBhcmUgYWxtb3N0IGNlcnRhaW5seSBkb2luZyBzb21ldGhpbmdcbiAgICAgICAgICAgIC8vIHdlaXJkLiBFaXRoZXIgdGhlIGNhbGxlciBpcyBub3QgYGF3YWl0YC1pbmcgdGhlIGxvYWQgYW5kIGxvYWRpbmcgbXVsdGlwbGUgdGltZXMsIE9SXG4gICAgICAgICAgICAvLyB3ZSBhcmUgaW4gYSBgcmVxdWlyZSgpYCBsb29wLiBFaXRoZXIgd2F5LCB3ZSdsbCBlcnJvciBvdXQgZm9yIG5vdyBzaW5jZSB3ZSBjYW4ndCBoYW5kbGVcbiAgICAgICAgICAgIC8vIGVpdGhlciBjYXNlIGN1cnJlbnRseS5cbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShcbiAgICAgICAgICAgICAgICBgRmFpbGVkIHRvIGltcG9ydCBzY3JpcHQgXCIke3BhdGgudG9TdHJpbmcoKX1cIiwgYXMgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZyBsb2FkZWQuIERvIHlvdSBoYXZlXG4gICAgICAgICAgICAgICAgIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbiB5b3VyIHJlcXVpcmUoKSBjYWxscz8gVGhlIGN1cnJlbnRseSBsb2FkZWQgb3IgbG9hZGluZyBzY3JpcHRzIGFyZTogXG4gICAgICAgICAgICAgICAgICR7QXJyYXkuZnJvbSh0aGlzLnNjcmlwdHMudmFsdWVzKCkpXG4gICAgICAgICAgICAgICAgICAgICAubWFwKChzYykgPT4gXCJcXHRcIiArIHNjLnBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAuam9pbihcIlxcblwiKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FjaGUgaGFzIG1pc3NlZCwgc28gYWRkIG91cnNlbHZlcyB0byB0aGUgY2FjaGUgYW5kIHRyeSBhbmQgbG9hZCBpdCBkaXJlY3RseS5cbiAgICAgICAgY29uc3QgZGVmZXJyYWwgPSBkZWZlcnJlZDxSZXN1bHQ8YW55LCBzdHJpbmc+PigpO1xuICAgICAgICB0aGlzLnNjcmlwdHMuc2V0KGtleSwgeyB0eXBlOiBcImxvYWRpbmdcIiwgcHJvbWlzZTogZGVmZXJyYWwsIHBhdGg6IGtleSB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmxvYWRVbmNhY2hlZChwYXRoLCBjb250ZXh0KTtcbiAgICAgICAgZGVmZXJyYWwucmVzb2x2ZShyZXN1bHQpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzc2Z1bCkge1xuICAgICAgICAgICAgdGhpcy5zY3JpcHRzLnNldChrZXksIHsgdHlwZTogXCJsb2FkZWRcIiwgcGF0aDoga2V5LCBvYmplY3Q6IHJlc3VsdC52YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2NyaXB0cy5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqIExvYWQgYSBzY3JpcHQsIGRpcmVjdGx5IGJ5cGFzc2luZyB0aGUgY2FjaGUuICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkVW5jYWNoZWQocGF0aDogc3RyaW5nIHwgTGluaywgY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8UmVzdWx0PGFueSwgc3RyaW5nPj4ge1xuICAgICAgICBjb25zdCBtYXliZVNvdXJjZSA9IGF3YWl0IHRoaXMucmVzb2x2ZVNvdXJjZShwYXRoKTtcbiAgICAgICAgaWYgKCFtYXliZVNvdXJjZS5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVTb3VyY2U7XG5cbiAgICAgICAgLy8gVHJhbnNwaWxlIHRvIHZhbmlsbGEgamF2YXNjcmlwdCBmaXJzdC4uLlxuICAgICAgICBjb25zdCB7IGNvZGUsIGxhbmd1YWdlIH0gPSBtYXliZVNvdXJjZS52YWx1ZTtcbiAgICAgICAgbGV0IGJhc2ljO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYmFzaWMgPSB0cmFuc3BpbGUoY29kZSwgbGFuZ3VhZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBGYWlsZWQgdG8gaW1wb3J0ICR7cGF0aC50b1N0cmluZygpfSB3aGlsZSB0cmFuc3BpbGluZyBmcm9tICR7bGFuZ3VhZ2V9OiAke2Vycm9yfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlbiBmaW5hbGx5IGV4ZWN1dGUgdGhlIHNjcmlwdCB0byAnbG9hZCcgaXQuXG4gICAgICAgIGNvbnN0IGZpbmFsQ29udGV4dCA9IE9iamVjdC5hc3NpZ24oeyBoOiBoLCBGcmFnbWVudDogRnJhZ21lbnQgfSwgY29udGV4dCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoYXdhaXQgYXN5bmNFdmFsSW5Db250ZXh0KGJhc2ljLCBmaW5hbENvbnRleHQpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgRmFpbGVkIHRvIGV4ZWN1dGUgc2NyaXB0ICcke3BhdGgudG9TdHJpbmcoKX0nOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE5vcm1hbGl6ZSBhIHBhdGggb3IgbGluayB0byBhIHRleHR1YWwgcGF0aC4gKi9cbiAgICBwcml2YXRlIHBhdGhrZXkocGF0aDogc3RyaW5nIHwgTGluayk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXRoIGluc3RhbmNlb2YgTGluaykgcmV0dXJuIHBhdGgub2JzaWRpYW5MaW5rKCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgLyoqIEF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHNvdXJjZSB0byBsb2FkIGdpdmVuIGEgcGF0aCBvciBsaW5rIHRvIGEgbWFya2Rvd24gc2VjdGlvbi4gKi9cbiAgICBwcml2YXRlIGFzeW5jIHJlc29sdmVTb3VyY2UoXG4gICAgICAgIHBhdGg6IHN0cmluZyB8IExpbmtcbiAgICApOiBQcm9taXNlPFJlc3VsdDx7IGNvZGU6IHN0cmluZzsgbGFuZ3VhZ2U6IFNjcmlwdExhbmd1YWdlIH0sIHN0cmluZz4+IHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5zdG9yZS5yZXNvbHZlTGluayhwYXRoKTtcbiAgICAgICAgaWYgKCFvYmplY3QpIHJldHVybiBSZXN1bHQuZmFpbHVyZShcIkNvdWxkIG5vdCBmaW5kIGEgc2NyaXB0IGF0IHRoZSBnaXZlbiBwYXRoOiBcIiArIHBhdGgudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgY29uc3QgdGZpbGUgPSB0aGlzLnN0b3JlLnZhdWx0LmdldEZpbGVCeVBhdGgob2JqZWN0LiRmaWxlISk7XG4gICAgICAgIGlmICghdGZpbGUpIHJldHVybiBSZXN1bHQuZmFpbHVyZShgRmlsZSBcIiR7b2JqZWN0LiRmaWxlfVwiIG5vdCBmb3VuZC5gKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgSlMgZmlsZSB3ZSBzaG91bGQgbG9hZCBkaXJlY3RseS5cbiAgICAgICAgaWYgKHRmaWxlLmV4dGVuc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpIGluIFNjcmlwdENhY2hlLkZJTEVfRVhURU5TSU9OUykge1xuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBTY3JpcHRDYWNoZS5GSUxFX0VYVEVOU0lPTlNbdGZpbGUuZXh0ZW5zaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCldO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBhd2FpdCB0aGlzLnN0b3JlLnZhdWx0LmNhY2hlZFJlYWQodGZpbGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh7IGNvZGUsIGxhbmd1YWdlIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZhaWx1cmUoXCJGYWlsZWQgdG8gbG9hZCBqYXZhc2NyaXB0L3R5cGVzY3JpcHQgc291cmNlIGZpbGU6IFwiICsgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBpcyBhIG1hcmtkb3duIHNlY3Rpb24sIHNlYXJjaCBmb3IgYW55IGphdmFzY3JpcHQgY29kZWJsb2Nrczsgb3RoZXJ3aXNlLCBjaGVjayBpZiBpdCBpcyBhIGZ1bGwgc2NyaXB0IGZpbGUuXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNYXJrZG93blNlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlQmxvY2sgPSBvYmplY3QuJGJsb2Nrc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGIpOiBiIGlzIE1hcmtkb3duQ29kZWJsb2NrID0+IGIuJHR5cGUgPT09IFwiY29kZWJsb2NrXCIpXG4gICAgICAgICAgICAgICAgLmZpbmQoKGNiKSA9PlxuICAgICAgICAgICAgICAgICAgICBjYi4kbGFuZ3VhZ2VzLnNvbWUoKGxhbmd1YWdlKSA9PiBsYW5ndWFnZS50b0xvY2FsZUxvd2VyQ2FzZSgpIGluIFNjcmlwdENhY2hlLlNDUklQVF9MQU5HVUFHRVMpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFtYXliZUJsb2NrKVxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShcIkNvdWxkIG5vdCBmaW5kIGEgc2NyaXB0IGluIHRoZSBnaXZlbiBtYXJrZG93biBzZWN0aW9uOiBcIiArIHBhdGgudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID1cbiAgICAgICAgICAgICAgICBTY3JpcHRDYWNoZS5TQ1JJUFRfTEFOR1VBR0VTW1xuICAgICAgICAgICAgICAgICAgICBtYXliZUJsb2NrLiRsYW5ndWFnZXMuZmluZCgobGFuZykgPT4gbGFuZy50b0xvY2FsZUxvd2VyQ2FzZSgpIGluIFNjcmlwdENhY2hlLlNDUklQVF9MQU5HVUFHRVMpIVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMucmVhZENvZGVibG9jayh0ZmlsZSwgbWF5YmVCbG9jaykpLm1hcCgoY29kZSkgPT4gKHsgY29kZSwgbGFuZ3VhZ2UgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE1hcmtkb3duQ29kZWJsb2NrKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUxhbmd1YWdlID0gb2JqZWN0LiRsYW5ndWFnZXMuZmluZChcbiAgICAgICAgICAgICAgICAobGFuZykgPT4gbGFuZy50b0xvY2FsZUxvd2VyQ2FzZSgpIGluIFNjcmlwdENhY2hlLlNDUklQVF9MQU5HVUFHRVNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIW1heWJlTGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBUaGUgY29kZWJsb2NrIHJlZmVyZW5jZWQgYnkgJyR7cGF0aH0nIGlzIG5vdCBhIEpTL1RTIGNvZGVibG9jay5gKTtcblxuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBTY3JpcHRDYWNoZS5TQ1JJUFRfTEFOR1VBR0VTW21heWJlTGFuZ3VhZ2VdO1xuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnJlYWRDb2RlYmxvY2sodGZpbGUsIG9iamVjdCkpLm1hcCgoY29kZSkgPT4gKHsgY29kZSwgbGFuZ3VhZ2UgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBDYW5ub3QgaW1wb3J0ICcke3BhdGgudG9TdHJpbmcoKX06IG5vdCBhIEpTL1RTIGZpbGUgb3IgY29kZWJsb2NrIHJlZmVyZW5jZS5gKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCB0aGUgY29udGVudHMgb2YgYSBjb2RlYmxvY2sgZnJvbSBhIGZpbGUuICovXG4gICAgcHJpdmF0ZSBhc3luYyByZWFkQ29kZWJsb2NrKGZpbGU6IFRGaWxlLCBibG9jazogTWFya2Rvd25Db2RlYmxvY2spOiBQcm9taXNlPFJlc3VsdDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGxpbmVSYW5nZShcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JlLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSksXG4gICAgICAgICAgICAgICAgYmxvY2suJGNvbnRlbnRQb3NpdGlvbi5zdGFydCxcbiAgICAgICAgICAgICAgICBibG9jay4kY29udGVudFBvc2l0aW9uLmVuZFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGJsb2NrLiRzdHlsZSA9PT0gXCJmZW5jZWRcIikgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHJhdyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICByYXdcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltU3RhcnQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgRmFpbGVkIHRvIHJlYWQgYSBjb2RlYmxvY2sgZnJvbSAke2ZpbGUucGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ2hlY2tib3gsIE9taXR0YWJsZSwgU2xpZGVyLCBTd2l0Y2ggfSBmcm9tIFwiYXBpL3VpL2Jhc2ljc1wiO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgRGlzcGF0Y2gsIHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IHVzZUZpbmFsaXplciwgdXNlU2V0RmllbGQgfSBmcm9tIFwidXRpbHMvZmllbGRzXCI7XG5pbXBvcnQgeyBFZGl0YWJsZUFjdGlvbiwgVW5jb250cm9sbGVkVGV4dEVkaXRhYmxlIH0gZnJvbSBcIi4vZWRpdGFibGVcIjtcbmltcG9ydCBTZWxlY3QgZnJvbSBcInJlYWN0LXNlbGVjdFwiO1xuZXhwb3J0IGZ1bmN0aW9uIEZpZWxkQ2hlY2tib3goXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBmaWVsZDogRmllbGQ7XG4gICAgICAgIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgICAgICAgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPEZpZWxkPj47XG4gICAgfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PlxuKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZGVmYXVsdENoZWNrZWQgPSBmYWxzZSwgZGlzcGF0Y2gsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBkaXNhYmxlZD17dW5kZWZpbmVkfVxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ9eyhmaWVsZD8udmFsdWUgPz8gZGVmYXVsdENoZWNrZWQpIGFzIGJvb2xlYW59XG4gICAgICAgICAgICBvbkNoZWNrQ2hhbmdlPXt1c2VTZXRGaWVsZChmaWVsZCwgKGIpID0+XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRlbnQtY2hhbmdlZFwiLCBuZXdWYWx1ZTogeyAuLi5maWVsZCwgdmFsdWU6IGIgfSB9KVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3VuZGVmaW5lZH1cbiAgICAgICAgLz5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRWRpdGFibGVUZXh0RmllbGQocHJvcHM6IHtcbiAgICBmaWVsZDogRmllbGQ7XG4gICAgaW5saW5lOiBib29sZWFuO1xuICAgIGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxzdHJpbmc+Pjtcbn0pIHtcbiAgICBjb25zdCB7IGZpZWxkLCBkZWZhdWx0VmFsdWUgPSBcIlwiLCBpbmxpbmUsIGRpc3BhdGNoIH0gPSBwcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgICA8Q29udHJvbGxlZEVkaXRhYmxlVGV4dEZpZWxkXG4gICAgICAgICAgICB0ZXh0PXsoZmllbGQ/LnZhbHVlID8/IGRlZmF1bHRWYWx1ZSkgYXMgc3RyaW5nfVxuICAgICAgICAgICAgaW5saW5lPXtpbmxpbmV9XG4gICAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgIC8+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZWRFZGl0YWJsZVRleHRGaWVsZChwcm9wczoge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBpbmxpbmU6IGJvb2xlYW47XG4gICAgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPHN0cmluZz4+O1xufSkge1xuICAgIGNvbnN0IHsgdGV4dCwgaW5saW5lLCBkaXNwYXRjaCB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3RleHRTdGF0ZSwgc2V0VGV4dF0gPSB1c2VTdGF0ZSh0ZXh0KTtcbiAgICBjb25zdCBvbklucHV0ID0gYXN5bmMgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgc2V0VGV4dCgoZS5jdXJyZW50VGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5saW5lKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB1c2VGaW5hbGl6ZXIodGV4dFN0YXRlLCBkaXNwYXRjaCkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiICYmIGUuY3RybEtleSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB1c2VGaW5hbGl6ZXIodGV4dFN0YXRlLCBkaXNwYXRjaCkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIDxVbmNvbnRyb2xsZWRUZXh0RWRpdGFibGUgdGV4dD17dGV4dH0gaW5saW5lPXtpbmxpbmV9IGRpc3BhdGNoPXtkaXNwYXRjaH0gb25JbnB1dD17b25JbnB1dH0gLz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWVsZFNsaWRlcihcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICAgICAgbWluOiBudW1iZXI7XG4gICAgICAgIG1heDogbnVtYmVyO1xuICAgICAgICBzdGVwOiBudW1iZXI7XG4gICAgICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyO1xuICAgICAgICBmaWVsZDogRmllbGQ7XG4gICAgICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxGaWVsZD4+O1xuICAgIH0gJiBPbWl0PFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PiwgT21pdHRhYmxlPlxuKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZGlzcGF0Y2gsIGRlZmF1bHRWYWx1ZSA9IDAsIG1pbiwgbWF4LCBzdGVwLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IChmaWVsZD8udmFsdWUgPz8gZGVmYXVsdFZhbHVlKSBhcyBudW1iZXI7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFNsaWRlclxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgbWluPXttaW59XG4gICAgICAgICAgICBtYXg9e21heH1cbiAgICAgICAgICAgIHN0ZXA9e3N0ZXB9XG4gICAgICAgICAgICB2YWx1ZT17dW5kZWZpbmVkfVxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17dXNlU2V0RmllbGQoZmllbGQsIChiKSA9PlxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWU6IHsgLi4uZmllbGQsIHZhbHVlOiBiIH0gfSlcbiAgICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpZWxkU3dpdGNoKFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgICBkZWZhdWx0VmFsdWU6IGJvb2xlYW47XG4gICAgICAgIGZpZWxkOiBGaWVsZDtcbiAgICAgICAgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPEZpZWxkPj47XG4gICAgfSAmIE9taXQ8UmVhY3QuSFRNTFByb3BzPEhUTUxJbnB1dEVsZW1lbnQ+LCBPbWl0dGFibGU+XG4pIHtcbiAgICBjb25zdCB7IGZpZWxkLCBkaXNwYXRjaCwgZGVmYXVsdFZhbHVlID0gZmFsc2UsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgb25Ub2dnbGVDaGFuZ2U9e3VzZVNldEZpZWxkKGZpZWxkLCAoYikgPT5cbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiB7IC4uLmZpZWxkLCB2YWx1ZTogYiB9IH0pXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ9eyhmaWVsZD8udmFsdWUgPz8gZGVmYXVsdFZhbHVlKSBhcyBib29sZWFufVxuICAgICAgICAgICAgY2hlY2tlZD17dW5kZWZpbmVkfVxuICAgICAgICAvPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWVsZFNlbGVjdCh7XG4gICAgbXVsdGkgPSBmYWxzZSxcbiAgICBvcHRpb25zLFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBmaWVsZCxcbiAgICBkaXNwYXRjaCxcbn06IHtcbiAgICBtdWx0aT86IGJvb2xlYW47XG4gICAgZGVmYXVsdFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBmaWVsZDogRmllbGQ7XG4gICAgb3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248RmllbGQ+Pjtcbn0pIHtcbiAgICBjb25zdCBpbm5lckNhbGxiYWNrID0gdXNlU2V0RmllbGQoZmllbGQsIChiKSA9PlxuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiB7IC4uLmZpZWxkLCB2YWx1ZTogYiB9IH0pXG4gICAgKTtcbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAobmV3VmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gbmV3VmFsdWUubWFwKCh4KSA9PiB4LnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IG5ld1ZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5uZXJDYWxsYmFjayhub3JtYWxpemVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgW2ZpZWxkLCBpbm5lckNhbGxiYWNrXVxuICAgICk7XG5cbiAgICBjb25zdCBhcnJheVZhbCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IChBcnJheS5pc0FycmF5KGZpZWxkPy52YWx1ZSkgPyBmaWVsZC52YWx1ZSA6ICEhZmllbGQgPyBbZmllbGQudmFsdWVdIDogW2RlZmF1bHRWYWx1ZV0pLFxuICAgICAgICBbZmllbGRdXG4gICAgKTtcbiAgICBjb25zdCBkZWZWYWwgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgbXVsdGlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKChhKSA9PiBhcnJheVZhbC5maW5kSW5kZXgoKGIpID0+IGIgPT0gYS52YWx1ZSkgIT0gLTEpXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmZpbmQoKGEpID0+IGEudmFsdWUgPT0gZmllbGQ/LnZhbHVlKSxcbiAgICAgICAgW29wdGlvbnMsIG11bHRpXVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lUHJlZml4PVwiZGF0YWNvcmUtc2VsZWN0YWJsZVwiXG4gICAgICAgICAgICBvbkNoYW5nZT17KG4pID0+IG9uQ2hhbmdlKG4pfVxuICAgICAgICAgICAgdW5zdHlsZWRcbiAgICAgICAgICAgIGlzTXVsdGk9e211bHRpID8/IGZhbHNlfVxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQ9e2RvY3VtZW50LmJvZHl9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZlZhbH1cbiAgICAgICAgICAgIGNsYXNzTmFtZXM9e3tcbiAgICAgICAgICAgICAgICBpbnB1dDogKCkgPT4gXCJwcm9tcHQtaW5wdXRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRhaW5lcjogKCkgPT4gXCJzdWdnZXN0aW9uLWl0ZW0gdmFsdWUtY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiAoKSA9PiBcInN1Z2dlc3Rpb24tY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgbWVudTogKCkgPT4gXCJzdWdnZXN0aW9uLWNvbnRlbnQgc3VnZ2VzdGlvbi1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBvcHRpb246IChwcm9wczogYW55KSA9PiBgc3VnZ2VzdGlvbi1pdGVtJHtwcm9wcy5pc1NlbGVjdGVkID8gXCIgaXMtc2VsZWN0ZWRcIiA6IFwiXCJ9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgeyBHcm91cEVsZW1lbnQsIEdyb3VwaW5nLCBHcm91cGluZ3MsIExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgR3JvdXBpbmdDb25maWcsIHVzZUFzRWxlbWVudCwgVmFuaWxsYUNvbHVtbiwgVmFuaWxsYVRhYmxlUHJvcHMgfSBmcm9tIFwiLi90YWJsZVwiO1xuaW1wb3J0IHsgdXNlSW50ZXJuaW5nLCB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0IHsgRGlzcGF0Y2gsIFJlZHVjZXIsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZHVjZXIsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IENvbnRyb2xsZWRQYWdlciwgdXNlRGF0YWNvcmVQYWdpbmcgfSBmcm9tIFwiLi9wYWdpbmdcIjtcbmltcG9ydCB7IERFRkFVTFRfVEFCTEVfQ09NUEFSQVRPUiwgU29ydEJ1dHRvbiwgU29ydERpcmVjdGlvbiwgU29ydE9uIH0gZnJvbSBcIi4vdGFibGVcIjtcbmltcG9ydCB7IENvbnRleHQsIGNyZWF0ZUNvbnRleHQsIEZyYWdtZW50LCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IENVUlJFTlRfRklMRV9DT05URVhULCBMaXQgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IEVkaXRhYmxlLCB1c2VFZGl0YWJsZURpc3BhdGNoIH0gZnJvbSBcInVpL2ZpZWxkcy9lZGl0YWJsZVwiO1xuaW1wb3J0IHsgY29tYmluZUNsYXNzZXMgfSBmcm9tIFwiLi4vYmFzaWNzXCI7XG5pbXBvcnQgeyBJbmRleGFibGUgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZVRhYmxlUm93RGF0YTxUPiB7XG4gICAgdmFsdWU6IFQ7XG4gICAgY2hpbGRyZW46IFRyZWVUYWJsZVJvd0RhdGE8VD5bXTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUcmVlVXRpbHMge1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc1RyZWVUYWJsZVJvd0RhdGE8VD4oZGF0YTogYW55KTogZGF0YSBpcyBUcmVlVGFibGVSb3dEYXRhPFQ+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwiY2hpbGRyZW5cIiBpbiBkYXRhICYmXG4gICAgICAgICAgICBcInZhbHVlXCIgaW4gZGF0YSAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoZGF0YSkgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PSAyICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEuY2hpbGRyZW4pXG4gICAgICAgICk7XG4gICAgfVxuICAgIGV4cG9ydCBmdW5jdGlvbiBjb3VudEluVHJlZVJvdzxUPihub2RlOiBUcmVlVGFibGVSb3dEYXRhPFQ+LCB0b3A6IGJvb2xlYW4gPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIGlmICghdG9wKSByZXN1bHQrKztcbiAgICAgICAgZm9yIChsZXQgbiBvZiBub2RlLmNoaWxkcmVuKSByZXN1bHQgKz0gY291bnRJblRyZWVSb3cobiwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBleHBvcnQgZnVuY3Rpb24gb2ZBcnJheTxUPihzb3VyY2U6IFRbXSwgY2hpbGRGbjogKGVsOiBUKSA9PiBUW10pOiBUcmVlVGFibGVSb3dEYXRhPFQ+W10ge1xuICAgICAgICBjb25zdCBtYXBwZXIgPSAoZWw6IFQpOiBUcmVlVGFibGVSb3dEYXRhPFQ+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGVsLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZEZuKGVsKS5tYXAobWFwcGVyKSxcbiAgICAgICAgICAgIH0gYXMgVHJlZVRhYmxlUm93RGF0YTxUPjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5tYXAobWFwcGVyKTtcbiAgICB9XG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9mTm9kZTxUPihzb3VyY2U6IFQsIGNoaWxkRm46IChlbDogVCkgPT4gVFtdKTogVHJlZVRhYmxlUm93RGF0YTxUPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogc291cmNlLFxuICAgICAgICAgICAgY2hpbGRyZW46IG9mQXJyYXkoY2hpbGRGbihzb3VyY2UpLCBjaGlsZEZuKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gb2ZHcm91cGluZzxUPihlbGVtZW50czogR3JvdXBpbmc8VD4sIGNoaWxkRm46IChlbDogVCkgPT4gVFtdKTogR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj4ge1xuICAgICAgICBjb25zdCBtYXBwZXIgPSAobDogVCB8IEdyb3VwRWxlbWVudDxUPik6IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PiB8IFRyZWVUYWJsZVJvd0RhdGE8VD4gPT4ge1xuICAgICAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChsKSlcbiAgICAgICAgICAgICAgICByZXR1cm4geyBrZXk6IGwua2V5LCByb3dzOiBsLnJvd3MubWFwKG1hcHBlcikgfSBhcyBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj47XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBsLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZEZuKGwpLm1hcChtYXBwZXIpLFxuICAgICAgICAgICAgfSBhcyBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKG1hcHBlcikgYXMgR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj47XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNvdW50PFQ+KGVsZW1lbnRzOiBHcm91cGluZzxUcmVlVGFibGVSb3dEYXRhPFQ+PiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+Pik6IG51bWJlciB7XG4gICAgICAgIGlmIChHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291bnQoZWxlbWVudHMucm93cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoR3JvdXBpbmdzLmlzR3JvdXBpbmcoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGdyb3VwIG9mIGVsZW1lbnRzKSByZXN1bHQgKz0gY291bnQoZ3JvdXAucm93cyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLnJlZHVjZSgocHYsIGN2KSA9PiBwdiArIGNvdW50SW5UcmVlUm93KGN2KSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzbGljZUluVHJlZVJvdzxUPihlbGVtZW50czogVHJlZVRhYmxlUm93RGF0YTxUPltdLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRyZWVUYWJsZVJvd0RhdGE8VD5bXSB7XG4gICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiBbXTtcblxuICAgICAgICBsZXQgaW5kZXggPSAwLFxuICAgICAgICAgICAgc2VlbiA9IDA7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGVsZW1lbnRzLmxlbmd0aCAmJiBzZWVuICsgY291bnRJblRyZWVSb3coZWxlbWVudHNbaW5kZXhdKSA8PSBzdGFydCkge1xuICAgICAgICAgICAgc2VlbiArPSBjb3VudEluVHJlZVJvdyhlbGVtZW50c1tpbmRleF0pO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA+PSBlbGVtZW50cy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IFRyZWVUYWJsZVJvd0RhdGE8VD5bXSA9IFtdO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBlbGVtZW50cy5sZW5ndGggJiYgc2VlbiA8IGVuZCkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBlbGVtZW50c1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBncm91cFNpemUgPSBjb3VudEluVHJlZVJvdyhncm91cCk7XG4gICAgICAgICAgICBjb25zdCBncm91cFN0YXJ0ID0gTWF0aC5tYXgoc2Vlbiwgc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBFbmQgPSBNYXRoLm1pbihncm91cFNpemUgKyBzZWVuLCBlbmQpO1xuXG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBzbGljZUluVHJlZVJvdyhncm91cC5jaGlsZHJlbiwgZ3JvdXBTdGFydCAtIHNlZW4sIGdyb3VwRW5kIC0gc2VlbiksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2VlbiArPSBncm91cFNpemU7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gc2xpY2U8VD4oXG4gICAgICAgIGVsZW1lbnRzOiBHcm91cGluZzxUcmVlVGFibGVSb3dEYXRhPFQ+PixcbiAgICAgICAgc3RhcnQ6IG51bWJlcixcbiAgICAgICAgZW5kOiBudW1iZXJcbiAgICApOiBHcm91cGluZzxUcmVlVGFibGVSb3dEYXRhPFQ+PiB7XG4gICAgICAgIGxldCBpbml0aWFsID0gWy4uLkdyb3VwaW5ncy5zbGljZShlbGVtZW50cywgc3RhcnQsIGVuZCldIGFzIEdyb3VwaW5nPFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgICAgICBsZXQgaW5kZXggPSAwLFxuICAgICAgICAgICAgc2VlbiA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBpbml0aWFsKSB7XG4gICAgICAgICAgICBpZiAoR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwU2l6ZSA9IEdyb3VwaW5ncy5jb3VudChlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwU3RhcnQgPSBNYXRoLm1pbihzZWVuLCBzdGFydCk7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwRW5kID0gTWF0aC5taW4oZ3JvdXBTaXplLCBlbmQpO1xuICAgICAgICAgICAgICAgIChpbml0aWFsW2luZGV4XSBhcyBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4pLnJvd3MgPSBHcm91cGluZ3Muc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucm93cyxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBFbmRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNlZW4gKz0gZ3JvdXBTaXplO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWVuICs9IGNvdW50SW5UcmVlUm93KGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICB9XG4gICAgLyoqIHJlY3Vyc2l2ZWx5IHNvcnQgYSB0cmVlICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNvcnQ8VCwgViA9IExpdGVyYWw+KFxuICAgICAgICByb3dzOiAoVHJlZVRhYmxlUm93RGF0YTxUPiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PilbXSxcbiAgICAgICAgY29tcGFyYXRvcnM6IHtcbiAgICAgICAgICAgIGZuOiAoYTogViwgYjogViwgYW86IFQsIGFiOiBUKSA9PiBudW1iZXI7XG4gICAgICAgICAgICBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBhY3R1YWxWYWx1ZTogKG9iajogVCkgPT4gVjtcbiAgICAgICAgfVtdXG4gICAgKTogKFRyZWVUYWJsZVJvd0RhdGE8VD4gfCBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4pW10ge1xuICAgICAgICBjb25zdCByZWFsQ29tcGFyYXRvciA9IChcbiAgICAgICAgICAgIGE6IFRyZWVUYWJsZVJvd0RhdGE8VD4gfCBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4sXG4gICAgICAgICAgICBiOiBUcmVlVGFibGVSb3dEYXRhPFQ+IHwgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+XG4gICAgICAgICk6IG51bWJlciA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBjb21wIG9mIGNvbXBhcmF0b3JzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY29tcC5kaXJlY3Rpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gXCJhc2NlbmRpbmdcIiA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwKGEpICYmIEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIUdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChhKSAmJiAhR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwKGIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gKiBjb21wLmZuKGNvbXAuYWN0dWFsVmFsdWUoYS52YWx1ZSksIGNvbXAuYWN0dWFsVmFsdWUoYi52YWx1ZSksIGEudmFsdWUsIGIudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWFwID0gKFxuICAgICAgICAgICAgdDogVHJlZVRhYmxlUm93RGF0YTxUPiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PlxuICAgICAgICApOiBUcmVlVGFibGVSb3dEYXRhPFQ+IHwgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+ID0+IHtcbiAgICAgICAgICAgIGxldCByO1xuICAgICAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cCh0KSlcbiAgICAgICAgICAgICAgICByID0geyAuLi50LCByb3dzOiBzb3J0KHQucm93cywgY29tcGFyYXRvcnMpLm1hcChtYXApIH0gYXMgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgICAgICAgICAgZWxzZSByID0geyAuLi50LCBjaGlsZHJlbjogc29ydCh0LmNoaWxkcmVuLCBjb21wYXJhdG9ycykubWFwKG1hcCkgfSBhcyBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByb3dzLm1hcChtYXApLnNvcnQocmVhbENvbXBhcmF0b3IpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdXNlS2V5Rm48VD4oaWQ6IFRyZWVUYWJsZVN0YXRlPFQ+W1wiaWRcIl0sIC4uLmRlcHM6IGFueVtdKSB7XG4gICAgY29uc3QgcmV0ID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChlbDogVHJlZVRhYmxlUm93RGF0YTxUPiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PikgPT4ge1xuICAgICAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWwua2V5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWQoZWwudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbLi4uZGVwc11cbiAgICApO1xuICAgIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZVRhYmxlQ29sdW1uPFQsIFYgPSBMaXRlcmFsPiBleHRlbmRzIFZhbmlsbGFDb2x1bW48VCwgVj4ge1xuICAgIHNvcnRhYmxlPzogYm9vbGVhbjtcblxuICAgIGNvbXBhcmF0b3I/OiAoZmlyc3Q6IFYsIHNlY29uZDogViwgZmlyc3RPYmplY3Q6IFQsIHNlY29uZE9iamVjdDogVCkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVUYWJsZVN0YXRlPFQ+IHtcbiAgICBzb3J0T24/OiBTb3J0T25bXTtcbiAgICBvcGVuTWFwPzogTWFwPHN0cmluZywgYm9vbGVhbj47XG4gICAgaWQ6IChvYmo6IFQpID0+IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmVlVGFibGVQcm9wczxUPiB7XG4gICAgY29sdW1uczogVHJlZVRhYmxlQ29sdW1uPFQ+W107XG4gICAgcm93czogVFtdIHwgR3JvdXBpbmc8VD47XG4gICAgcGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcbiAgICBzY3JvbGxPblBhZ2luZz86IGJvb2xlYW4gfCBudW1iZXI7XG4gICAgZ3JvdXBpbmdzPzogVmFuaWxsYVRhYmxlUHJvcHM8VHJlZVRhYmxlUm93RGF0YTxUPj5bXCJncm91cGluZ3NcIl07XG4gICAgc29ydE9uPzogU29ydE9uW107XG4gICAgY2hpbGRTZWxlY3RvcjogKHJhdzogVCkgPT4gVFtdO1xuICAgIGlkPzogKG9iajogVCkgPT4gc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBUcmVlVGFibGVBY3Rpb248VD4gPVxuICAgIHwgeyB0eXBlOiBcInNvcnQtY29sdW1uXCI7IGNvbHVtbjogc3RyaW5nOyBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gfCB1bmRlZmluZWQgfVxuICAgIHwge1xuICAgICAgICAgIHR5cGU6IFwicm93LWV4cGFuZFwiO1xuICAgICAgICAgIHJvdzogVDtcbiAgICAgICAgICBuZXdWYWx1ZTogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHsgdHlwZTogXCJvcGVuLW1hcC1jaGFuZ2VkXCI7IG5ld1ZhbHVlOiBNYXA8c3RyaW5nLCBib29sZWFuPiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdHJlZVRhYmxlUmVkdWNlcjxUPihzdGF0ZTogVHJlZVRhYmxlU3RhdGU8VD4sIGFjdGlvbjogVHJlZVRhYmxlQWN0aW9uPFQ+KTogVHJlZVRhYmxlU3RhdGU8VD4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcInNvcnQtY29sdW1uXCI6XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmRpcmVjdGlvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc29ydE9uOiB1bmRlZmluZWQgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRPbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBhY3Rpb24uZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIFwicm93LWV4cGFuZFwiOlxuICAgICAgICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLm9wZW5NYXApIHJldHVybiB7IC4uLnN0YXRlIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygc3RhdGUub3Blbk1hcC5rZXlzKCkpIG5ld01hcC5zZXQoaywgc3RhdGUub3Blbk1hcC5nZXQoaykhKTtcbiAgICAgICAgICAgIG5ld01hcC5zZXQoc3RhdGUuaWQoYWN0aW9uLnJvdyksIGFjdGlvbi5uZXdWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3Blbk1hcDogbmV3TWFwIH07XG4gICAgICAgIGNhc2UgXCJvcGVuLW1hcC1jaGFuZ2VkXCI6XG4gICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgb3Blbk1hcDogYWN0aW9uLm5ld1ZhbHVlIH07XG4gICAgfVxuICAgIGNvbnNvbGUud2FybihcImRhdGFjb3JlOiBFbmNvdW50ZXJlZCB1bnJlY29nbml6ZWQgb3BlcmF0aW9uOiBcIiArIChhY3Rpb24gYXMgVHJlZVRhYmxlQWN0aW9uPFQ+KS50eXBlKTtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUcmVlVGFibGVEaXNwYXRjaDxUPihcbiAgICBpbml0aWFsOiBUcmVlVGFibGVTdGF0ZTxUPiB8ICgoKSA9PiBUcmVlVGFibGVTdGF0ZTxUPilcbik6IFtUcmVlVGFibGVTdGF0ZTxUPiwgRGlzcGF0Y2g8VHJlZVRhYmxlQWN0aW9uPFQ+Pl0ge1xuICAgIGNvbnN0IGluaXQgPSB1c2VNZW1vKCgpID0+ICh0eXBlb2YgaW5pdGlhbCA9PSBcImZ1bmN0aW9uXCIgPyBpbml0aWFsKCkgOiBpbml0aWFsKSwgW10pO1xuICAgIHJldHVybiB1c2VSZWR1Y2VyKHRyZWVUYWJsZVJlZHVjZXIgYXMgUmVkdWNlcjxUcmVlVGFibGVTdGF0ZTxUPiwgVHJlZVRhYmxlQWN0aW9uPFQ+PiwgaW5pdCk7XG59XG5cbmV4cG9ydCB0eXBlIFJvd0V4cGFuc2lvbkNvbnRleHRUeXBlPFQ+ID0ge1xuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxUcmVlVGFibGVBY3Rpb248VD4+O1xuICAgIG9wZW5NYXA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIGlkOiAob2JqOiBUKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgRVhQQU5ERURfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8Um93RXhwYW5zaW9uQ29udGV4dFR5cGU8dW5rbm93bj4gfCBudWxsPihudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFR5cGVkRXhwYW5kZWRDb250ZXh0PFQ+KCkge1xuICAgIHJldHVybiBFWFBBTkRFRF9DT05URVhUIGFzIENvbnRleHQ8Um93RXhwYW5zaW9uQ29udGV4dFR5cGU8VD4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlSGVhZGVyQ2VsbDxUPih7XG4gICAgY29sdW1uLFxuICAgIHNvcnQsXG4gICAgc29ydGFibGUsXG59OiB7XG4gICAgY29sdW1uOiBUcmVlVGFibGVDb2x1bW48VD47XG4gICAgc29ydD86IFNvcnREaXJlY3Rpb247XG4gICAgc29ydGFibGU6IGJvb2xlYW47XG59KSB7XG4gICAgY29uc3QgeyBkaXNwYXRjaCB9ID0gdXNlQ29udGV4dChUeXBlZEV4cGFuZGVkQ29udGV4dDxUPigpKTtcbiAgICBjb25zdCBoZWFkZXI6IHN0cmluZyB8IFZOb2RlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghY29sdW1uLnRpdGxlKSByZXR1cm4gY29sdW1uLmlkO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uLnRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb2x1bW4udGl0bGUoKTtcbiAgICAgICAgZWxzZSByZXR1cm4gY29sdW1uLnRpdGxlO1xuICAgIH0sIFtjb2x1bW4uaWQsIGNvbHVtbi50aXRsZV0pO1xuXG4gICAgY29uc3Qgc29ydENsaWNrZWQgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgKF9ldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvcnQgPT0gdW5kZWZpbmVkKSBkaXNwYXRjaCh7IHR5cGU6IFwic29ydC1jb2x1bW5cIiwgY29sdW1uOiBjb2x1bW4uaWQsIGRpcmVjdGlvbjogXCJhc2NlbmRpbmdcIiB9KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHNvcnQgPT0gXCJhc2NlbmRpbmdcIikgZGlzcGF0Y2goeyB0eXBlOiBcInNvcnQtY29sdW1uXCIsIGNvbHVtbjogY29sdW1uLmlkLCBkaXJlY3Rpb246IFwiZGVzY2VuZGluZ1wiIH0pO1xuICAgICAgICAgICAgZWxzZSBkaXNwYXRjaCh7IHR5cGU6IFwic29ydC1jb2x1bW5cIiwgY29sdW1uOiBjb2x1bW4uaWQsIGRpcmVjdGlvbjogdW5kZWZpbmVkIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbY29sdW1uLmlkXVxuICAgICk7XG5cbiAgICBjb25zdCByZWFsV2lkdGggPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiAoY29sdW1uLndpZHRoID09PSBcIm1pbmltdW1cIiA/IFwiMXB4XCIgOiBjb2x1bW4ud2lkdGggPT09IFwibWF4aW11bVwiID8gXCJhdXRvXCIgOiBjb2x1bW4ud2lkdGggKyBcInB4XCIpLFxuICAgICAgICBbY29sdW1uLndpZHRoXVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRoIHdpZHRoPXtyZWFsV2lkdGh9IGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci1jZWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci1jZWxsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICB7c29ydGFibGUgJiYgPFNvcnRCdXR0b24gY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtc29ydFwiIGRpcmVjdGlvbj17c29ydH0gb25DbGljaz17c29ydENsaWNrZWR9IC8+fVxuICAgICAgICAgICAgICAgIDxkaXYgb25DbGljaz17c29ydENsaWNrZWR9IGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyZWVUYWJsZUdyb3VwSGVhZGVyPFQ+KHtcbiAgICBsZXZlbCxcbiAgICB2YWx1ZSxcbiAgICB3aWR0aCxcbiAgICBjb25maWcsXG59OiB7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB2YWx1ZTogR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgY29uZmlnPzogR3JvdXBpbmdDb25maWc8VHJlZVRhYmxlUm93RGF0YTxUPj47XG59KSB7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuICAgIGNvbnN0IHJhd1JlbmRlcmFibGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZz8ucmVuZGVyKSByZXR1cm4gY29uZmlnLnJlbmRlcih2YWx1ZS5rZXksIHZhbHVlLnJvd3MpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgICAgICAgICAgPExpdCBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSBpbmxpbmU9e3RydWV9IHZhbHVlPXt2YWx1ZS5rZXl9IC8+XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICk7XG4gICAgfSwgW2NvbmZpZz8ucmVuZGVyLCB2YWx1ZS5rZXksIHZhbHVlLnJvd3NdKTtcbiAgICBjb25zdCByZW5kZXJhYmxlID0gdXNlQXNFbGVtZW50KHJhd1JlbmRlcmFibGUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRyIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAgPHRkIHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiBgJHtsZXZlbCAqIDEuMTJ9ZW1gIH19IGNvbFNwYW49e3dpZHRoICsgMX0+XG4gICAgICAgICAgICAgICAge3JlbmRlcmFibGV9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlUm93R3JvdXA8VD4oe1xuICAgIGxldmVsLFxuICAgIGNvbHVtbnMsXG4gICAgZWxlbWVudCxcbiAgICBncm91cGluZ3MsXG59OiB7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICBjb2x1bW5zOiBUcmVlVGFibGVDb2x1bW48VD5bXTtcbiAgICBlbGVtZW50OiBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4gfCBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgIGdyb3VwaW5ncz86IEdyb3VwaW5nQ29uZmlnPFRyZWVUYWJsZVJvd0RhdGE8VD4+W107XG59KSB7XG4gICAgY29uc3QgeyBpZCB9ID0gdXNlQ29udGV4dChUeXBlZEV4cGFuZGVkQ29udGV4dDxUPigpKTtcbiAgICBjb25zdCBrZXlGbiA9IHVzZUtleUZuKGlkKTtcbiAgICBjb25zdCBncm91cEluZGV4ID0gZ3JvdXBpbmdzID8gTWF0aC5taW4oZ3JvdXBpbmdzLmxlbmd0aCAtIDEsIGxldmVsKSA6IDA7XG4gICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBncm91cGluZ0NvbmZpZyA9IGdyb3VwaW5ncyA/IGdyb3VwaW5nc1tncm91cEluZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e2tleUZuKGVsZW1lbnQpfT5cbiAgICAgICAgICAgICAgICA8VHJlZVRhYmxlR3JvdXBIZWFkZXIgbGV2ZWw9e2xldmVsfSB2YWx1ZT17ZWxlbWVudH0gd2lkdGg9e2NvbHVtbnMubGVuZ3RofSBjb25maWc9e2dyb3VwaW5nQ29uZmlnfSAvPlxuICAgICAgICAgICAgICAgIHtlbGVtZW50LnJvd3MubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFRyZWVUYWJsZVJvd0dyb3VwPFQ+IGxldmVsPXtsZXZlbCArIDF9IGNvbHVtbnM9e2NvbHVtbnN9IGVsZW1lbnQ9e3Jvd30gZ3JvdXBpbmdzPXtncm91cGluZ3N9IC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA8VHJlZVRhYmxlUm93IHJvdz17ZWxlbWVudH0gY29sdW1ucz17Y29sdW1uc30gbGV2ZWw9e2xldmVsIC0gZ3JvdXBJbmRleCArIDF9IGtleT17a2V5Rm4oZWxlbWVudCl9IC8+O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyZWVUYWJsZVJvd0V4cGFuZGVyPFQ+KHsgcm93LCBsZXZlbCB9OiB7IHJvdzogVDsgbGV2ZWw6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyBvcGVuTWFwLCBkaXNwYXRjaCwgaWQgfSA9IHVzZUNvbnRleHQoVHlwZWRFeHBhbmRlZENvbnRleHQ8VD4oKSk7XG4gICAgY29uc3Qgb3BlbiA9IHVzZU1lbW8oKCkgPT4gb3Blbk1hcC5nZXQoaWQocm93KSkgPz8gZmFsc2UsIFtyb3csIG9wZW5NYXAsIG9wZW5NYXAuZ2V0KGlkKHJvdykpLCBkaXNwYXRjaF0pO1xuICAgIHJldHVybiAoXG4gICAgICAgIDx0ZFxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goeyB0eXBlOiBcInJvdy1leHBhbmRcIiwgcm93LCBuZXdWYWx1ZTogIW9wZW4gfSl9XG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogYCR7KGxldmVsIC0gMSkgKiAxLjEyNX1lbWAgfX1cbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGF0YWNvcmUtY29sbGFwc2VyXCIsICFvcGVuID8gXCJpcy1jb2xsYXBzZWRcIiA6IHVuZGVmaW5lZCl9IGRpcj1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZnLWljb24gcmlnaHQtdHJpYW5nbGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDhMMTIgMTdMMjEgOFwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmVlVGFibGVSb3c8VD4oe1xuICAgIGxldmVsLFxuICAgIHJvdyxcbiAgICBjb2x1bW5zLFxufToge1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgcm93OiBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgIGNvbHVtbnM6IFRyZWVUYWJsZUNvbHVtbjxUPltdO1xufSkge1xuICAgIGNvbnN0IHsgb3Blbk1hcCwgaWQgfSA9IHVzZUNvbnRleHQoVHlwZWRFeHBhbmRlZENvbnRleHQ8VD4oKSk7XG4gICAgY29uc3Qgb3BlbiA9IHVzZU1lbW8oKCkgPT4gb3Blbk1hcC5nZXQoaWQocm93LnZhbHVlKSksIFtvcGVuTWFwLCBvcGVuTWFwLmdldChpZChyb3cudmFsdWUpKSwgcm93LCByb3cudmFsdWVdKTtcbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IHVzZU1lbW8oKCkgPT4gcm93LmNoaWxkcmVuLmxlbmd0aCA+IDAsIFtyb3csIHJvdy5jaGlsZHJlbiwgcm93LnZhbHVlXSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgICAgIHtoYXNDaGlsZHJlbiA/IDxUcmVlVGFibGVSb3dFeHBhbmRlcjxUPiBsZXZlbD17bGV2ZWx9IHJvdz17cm93LnZhbHVlfSAvPiA6IDx0ZD48L3RkPn1cbiAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8VHJlZVRhYmxlUm93Q2VsbDxUPiByb3c9e3Jvd30gY29sdW1uPXtjb2x9IGxldmVsPXtsZXZlbH0gaXNGaXJzdD17aSA9PSAwfSAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIHtvcGVuXG4gICAgICAgICAgICAgICAgPyByb3cuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUcmVlVGFibGVSb3cgcm93PXtjaGlsZH0gY29sdW1ucz17Y29sdW1uc30gbGV2ZWw9e2xldmVsICsgMX0ga2V5PXtpZChjaGlsZC52YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlUm93Q2VsbDxUPih7XG4gICAgcm93LFxuICAgIGNvbHVtbixcbiAgICBsZXZlbCxcbiAgICBpc0ZpcnN0ID0gZmFsc2UsXG59OiB7XG4gICAgcm93OiBUcmVlVGFibGVSb3dEYXRhPFQ+O1xuICAgIGNvbHVtbjogVHJlZVRhYmxlQ29sdW1uPFQ+O1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgaXNGaXJzdDogYm9vbGVhbjtcbn0pIHtcbiAgICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oKCkgPT4gY29sdW1uLnZhbHVlKHJvdy52YWx1ZSksIFtyb3cudmFsdWUsIGNvbHVtbi52YWx1ZSwgY29sdW1uLnZhbHVlKHJvdy52YWx1ZSldKTtcbiAgICBjb25zdCB1cGRhdGVyID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICh2OiBMaXRlcmFsKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW4ub25VcGRhdGUgJiYgY29sdW1uLm9uVXBkYXRlKHYsIHJvdy52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFt2YWx1ZSwgcm93LnZhbHVlXVxuICAgICk7XG4gICAgY29uc3QgW2VkaXRhYmxlU3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8dHlwZW9mIHZhbHVlPih7XG4gICAgICAgIGNvbnRlbnQ6IHZhbHVlLFxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICB1cGRhdGVyOiAodikgPT4gY29sdW1uLm9uVXBkYXRlICYmIGNvbHVtbi5vblVwZGF0ZSh2LCByb3cudmFsdWUpLFxuICAgIH0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWU6IHZhbHVlIH0pO1xuICAgIH0sIFt2YWx1ZSwgdXBkYXRlcl0pO1xuICAgIGxldCByZW5kZXJlZENvbHVtbiA9IGNvbHVtbi5yZW5kZXIgPyBjb2x1bW4ucmVuZGVyKGVkaXRhYmxlU3RhdGUuY29udGVudCwgcm93LnZhbHVlKSA6IHZhbHVlO1xuICAgIGNvbnN0IHJlbmRlcmFibGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHJlbmRlcmVkQ29sdW1uICYmIHR5cGVvZiByZW5kZXJlZENvbHVtbiA9PSBcIm9iamVjdFwiICYmIFwicHJvcHNcIiBpbiByZW5kZXJlZENvbHVtbilcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlbmRlcmVkQ29sdW1uLCB7IHByb3BzOiBPYmplY3QuYXNzaWduKHJlbmRlcmVkQ29sdW1uLnByb3BzLCB7IGRpc3BhdGNoIH0pIH0pO1xuICAgICAgICBlbHNlIHJldHVybiByZW5kZXJlZENvbHVtbjtcbiAgICB9LCBbY29sdW1uLnJlbmRlciwgdmFsdWUsIGVkaXRhYmxlU3RhdGUuY29udGVudCwgcmVuZGVyZWRDb2x1bW4sIHJvdy52YWx1ZSwgdXBkYXRlcl0pO1xuXG4gICAgY29uc3QgcmVuZGVyZWQgPSB1c2VBc0VsZW1lbnQocmVuZGVyYWJsZSk7XG5cbiAgICBjb25zdCBFZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IGU7XG4gICAgICAgIGlmIChjb2x1bW4uZWRpdGFibGUgJiYgY29sdW1uLmVkaXRvcikgZSA9IGNvbHVtbi5lZGl0b3IoZWRpdGFibGVTdGF0ZS5jb250ZW50LCByb3cudmFsdWUpO1xuICAgICAgICBlbHNlIGUgPSBudWxsO1xuICAgICAgICBpZiAoZSkgcmV0dXJuIE9iamVjdC5hc3NpZ24oZSwgeyBwcm9wczogT2JqZWN0LmFzc2lnbihlLnByb3BzLCB7IGRpc3BhdGNoIH0pIH0pO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9LCBbY29sdW1uLmVkaXRvciwgY29sdW1uLmVkaXRhYmxlLCBlZGl0YWJsZVN0YXRlLmNvbnRlbnQsIHJvdy52YWx1ZV0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRkXG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogaXNGaXJzdCA/IGAkeyhsZXZlbCAtIDEpICogMS4yfWVtYCA6IHVuZGVmaW5lZCB9fVxuICAgICAgICAgICAgb25EYmxDbGljaz17KCkgPT4gZGlzcGF0Y2goeyB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLCBuZXdWYWx1ZTogIWVkaXRhYmxlU3RhdGUuaXNFZGl0aW5nIH0pfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtY2VsbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHtjb2x1bW4uZWRpdGFibGUgPyAoXG4gICAgICAgICAgICAgICAgPEVkaXRhYmxlPHR5cGVvZiB2YWx1ZT5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlbmRlcj17cmVuZGVyZWR9XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcj17RWRpdG9yfVxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPXtlZGl0YWJsZVN0YXRlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIHJlbmRlcmVkXG4gICAgICAgICAgICApfVxuICAgICAgICA8L3RkPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb250cm9sbGVkVHJlZVRhYmxlVmlldzxUPihcbiAgICBwcm9wczogVHJlZVRhYmxlU3RhdGU8VD4gJiBUcmVlVGFibGVQcm9wczxUPiAmIHsgZGlzcGF0Y2g6IERpc3BhdGNoPFRyZWVUYWJsZUFjdGlvbjxUPj4gfVxuKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHVzZUludGVybmluZyhwcm9wcy5jb2x1bW5zLCAoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGEuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT0gYltpbmRleF0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHRvdGFsRWxlbWVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0dyb3VwaW5nKHByb3BzLnJvd3MpKSByZXR1cm4gR3JvdXBpbmdzLmNvdW50KHByb3BzLnJvd3MpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMucm93cy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKHB2LCBjdikgPT4gcHYgKyBUcmVlVXRpbHMuY291bnRJblRyZWVSb3coVHJlZVV0aWxzLm9mTm9kZShjdiwgcHJvcHMuY2hpbGRTZWxlY3RvcikpLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgfSwgW3Byb3BzLnJvd3NdKTtcbiAgICBjb25zdCB0YWJsZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gICAgY29uc3QgcGFnaW5nID0gdXNlRGF0YWNvcmVQYWdpbmcoe1xuICAgICAgICBpbml0aWFsUGFnZTogMCxcbiAgICAgICAgcGFnaW5nOiBwcm9wcy5wYWdpbmcsXG4gICAgICAgIHNjcm9sbE9uUGFnZUNoYW5nZTogcHJvcHMuc2Nyb2xsT25QYWdpbmcsXG4gICAgICAgIGVsZW1lbnRzOiB0b3RhbEVsZW1lbnRzLFxuICAgICAgICBjb250YWluZXI6IHRhYmxlUmVmLFxuICAgIH0pO1xuICAgIGNvbnN0IHJhd1NvcnRzID0gdXNlSW50ZXJuaW5nKHByb3BzLnNvcnRPbiwgKGEsIGIpID0+IExpdGVyYWxzLmNvbXBhcmUoYSwgYikgPT0gMCk7XG4gICAgY29uc3Qgc29ydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHJhd1NvcnRzPy5maWx0ZXIoKHNvcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuaWQgPT0gc29ydC5pZCk7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uICYmIChjb2x1bW4uc29ydGFibGUgPz8gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtjb2x1bW5zLCByYXdTb3J0c10pO1xuICAgIGNvbnN0IGdyb3VwaW5ncyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzLmdyb3VwaW5ncykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMuZ3JvdXBpbmdzKSkgcmV0dXJuIHByb3BzLmdyb3VwaW5ncztcblxuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbihwcm9wcy5ncm91cGluZ3MpKSByZXR1cm4gW3sgcmVuZGVyOiBwcm9wcy5ncm91cGluZ3MgfV07XG4gICAgICAgIGVsc2UgcmV0dXJuIFtwcm9wcy5ncm91cGluZ3NdO1xuICAgIH0sIFtwcm9wcy5ncm91cGluZ3NdKTtcbiAgICBjb25zdCByYXdSb3dzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghR3JvdXBpbmdzLmlzR3JvdXBpbmcocHJvcHMucm93cykpIHJldHVybiBUcmVlVXRpbHMub2ZBcnJheShwcm9wcy5yb3dzLCBwcm9wcy5jaGlsZFNlbGVjdG9yKTtcbiAgICAgICAgcmV0dXJuIFRyZWVVdGlscy5vZkdyb3VwaW5nKHByb3BzLnJvd3MsIHByb3BzLmNoaWxkU2VsZWN0b3IpO1xuICAgIH0sIFtwcm9wcy5yb3dzXSk7XG4gICAgY29uc3Qgcm93cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc29ydHMgPT0gdW5kZWZpbmVkIHx8IHNvcnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gcmF3Um93cztcbiAgICAgICAgY29uc3QgY29tcGFyYXRvcnMgPSBzb3J0cy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnMuZmluZCgoeSkgPT4geS5pZCA9PSB4LmlkKSE7XG4gICAgICAgICAgICBjb25zdCBjb21wID0gY29sPy5jb21wYXJhdG9yID8/IERFRkFVTFRfVEFCTEVfQ09NUEFSQVRPUjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm46IGNvbXAsXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB4LmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZTogY29sLnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBUcmVlVXRpbHMuc29ydDxULCBMaXRlcmFsPihyYXdSb3dzLCBjb21wYXJhdG9ycykgYXMgR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj47XG4gICAgfSwgW3Jhd1Jvd3MsIHNvcnRzXSk7XG5cbiAgICBjb25zdCBwYWdlZFJvd3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHBhZ2luZy5lbmFibGVkKVxuICAgICAgICAgICAgcmV0dXJuIFRyZWVVdGlscy5zbGljZShyb3dzLCBwYWdpbmcucGFnZSAqIHBhZ2luZy5wYWdlU2l6ZSwgKHBhZ2luZy5wYWdlICsgMSkgKiBwYWdpbmcucGFnZVNpemUpO1xuICAgICAgICByZXR1cm4gcm93cztcbiAgICB9LCBbcGFnaW5nLnBhZ2UsIHBhZ2luZy5wYWdlU2l6ZSwgcGFnaW5nLmVuYWJsZWQsIHByb3BzLnJvd3MsIHJvd3NdKTtcblxuICAgIGNvbnN0IGtleUZuID0gdXNlS2V5Rm4ocHJvcHMuaWQsIHBhZ2VkUm93cyk7XG4gICAgY29uc3QgQ29udGV4dCA9IFR5cGVkRXhwYW5kZWRDb250ZXh0PFQ+KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgb3Blbk1hcDogcHJvcHMub3Blbk1hcCEsIGRpc3BhdGNoOiBwcm9wcy5kaXNwYXRjaCwgaWQ6IHByb3BzLmlkIH19PlxuICAgICAgICAgICAgPGRpdiByZWY9e3RhYmxlUmVmfT5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtaGVhZGVyLWNlbGxcIiB3aWR0aD1cIjFweFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKCh4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmVlVGFibGVIZWFkZXJDZWxsPFQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0PXtwcm9wcy5zb3J0T24/LmZpbmQoKHMpID0+IHMuaWQgPT09IHguaWQpPy5kaXJlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW49e3h9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZT17eC5zb3J0YWJsZSA/PyB0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhZ2VkUm93cy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmVlVGFibGVSb3dHcm91cDxUPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtyb3d9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPXswfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ3M9e2dyb3VwaW5nc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtrZXlGbihyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIHtwYWdpbmcuZW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxDb250cm9sbGVkUGFnZXIgcGFnZT17cGFnaW5nLnBhZ2V9IHRvdGFsUGFnZXM9e3BhZ2luZy50b3RhbFBhZ2VzfSBzZXRQYWdlPXtwYWdpbmcuc2V0UGFnZX0gLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlVmlldzxUPihwcm9wczogVHJlZVRhYmxlUHJvcHM8VD4pIHtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVRyZWVUYWJsZURpc3BhdGNoPFQ+KHtcbiAgICAgICAgc29ydE9uOiBwcm9wcy5zb3J0T24gPz8gW10sXG4gICAgICAgIGlkOiBwcm9wcy5pZCA/IHByb3BzLmlkIDogKHgpID0+ICh4IGFzIEluZGV4YWJsZSkuJGlkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVmU3RhdGUgPSB1c2VNZW1vKCgpID0+IHVzZVJlZihzdGF0ZSksIFtzdGF0ZV0pO1xuICAgIGlmIChzdGF0ZS5vcGVuTWFwICE9PSB1bmRlZmluZWQpIHJlZlN0YXRlLmN1cnJlbnQgPSBzdGF0ZTtcbiAgICBlbHNlIHJlZlN0YXRlLmN1cnJlbnQub3Blbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJvcGVuLW1hcC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiByZWZTdGF0ZS5jdXJyZW50Lm9wZW5NYXAgPz8gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCkgfSk7XG4gICAgfSwgW2Rpc3BhdGNoXSk7XG4gICAgZGVsZXRlIHByb3BzLnNvcnRPbjtcbiAgICByZXR1cm4gPENvbnRyb2xsZWRUcmVlVGFibGVWaWV3PFQ+IGRpc3BhdGNoPXtkaXNwYXRjaH0gey4uLnN0YXRlfSB7Li4ucHJvcHN9IC8+O1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSBhcGlcbiAqL1xuaW1wb3J0IHsgRGF0YWNvcmVBcGkgfSBmcm9tIFwiYXBpL2FwaVwiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwiaW5kZXgvZGF0YXN0b3JlXCI7XG5pbXBvcnQgeyBJbmRleFF1ZXJ5IH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4LXF1ZXJ5XCI7XG5pbXBvcnQgeyBJbmRleGFibGUgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBNYXJrZG93blBhZ2UsIE1hcmtkb3duVGFza0l0ZW0gfSBmcm9tIFwiaW5kZXgvdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgdXNlRmlsZU1ldGFkYXRhLCB1c2VGdWxsUXVlcnksIHVzZUluZGV4VXBkYXRlcywgdXNlSW50ZXJuaW5nLCB1c2VRdWVyeSB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0ICogYXMgbHV4b24gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgKiBhcyBwcmVhY3QgZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0ICogYXMgaG9va3MgZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4vcmVzdWx0XCI7XG5pbXBvcnQgeyBHcm91cCwgU3RhY2sgfSBmcm9tIFwiLi91aS9sYXlvdXRcIjtcbmltcG9ydCB7IEVtYmVkLCBMaW5lU3BhbkVtYmVkIH0gZnJvbSBcImFwaS91aS9lbWJlZFwiO1xuaW1wb3J0IHsgQ1VSUkVOVF9GSUxFX0NPTlRFWFQsIExpdCwgTWFya2Rvd24sIE9ic2lkaWFuTGluayB9IGZyb20gXCJ1aS9tYXJrZG93blwiO1xuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBMaXRlcmFsIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgQnV0dG9uLCBDaGVja2JveCwgSWNvbiwgU2xpZGVyLCBTd2l0Y2gsIFRleHRib3gsIFZhbmlsbGFTZWxlY3QgfSBmcm9tIFwiLi91aS9iYXNpY3NcIjtcbmltcG9ydCB7IFRhc2tMaXN0IH0gZnJvbSBcIi4vdWkvdmlld3MvdGFza1wiO1xuaW1wb3J0IHsgVmFuaWxsYVRhYmxlIH0gZnJvbSBcIi4vdWkvdmlld3MvdGFibGVcIjtcbmltcG9ydCB7IENhbGxvdXQgfSBmcm9tIFwiLi91aS92aWV3cy9jYWxsb3V0XCI7XG5pbXBvcnQgeyBDYXJkIH0gZnJvbSBcIi4vdWkvdmlld3MvY2FyZHNcIjtcbmltcG9ydCB7IERhdGFBcnJheSB9IGZyb20gXCIuL2RhdGEtYXJyYXlcIjtcbmltcG9ydCB7IENvZXJjZSB9IGZyb20gXCIuL2NvZXJjZVwiO1xuaW1wb3J0IHsgU2NyaXB0Q2FjaGUgfSBmcm9tIFwiLi9zY3JpcHQtY2FjaGVcIjtcbmltcG9ydCB7IHNldFRhc2tUZXh0LCB1c2VTZXRGaWVsZCB9IGZyb20gXCJ1dGlscy9maWVsZHNcIjtcbmltcG9ydCB7XG4gICAgQ29udHJvbGxlZEVkaXRhYmxlVGV4dEZpZWxkLFxuICAgIEZpZWxkQ2hlY2tib3gsXG4gICAgRWRpdGFibGVUZXh0RmllbGQsXG4gICAgRmllbGRTbGlkZXIsXG4gICAgRmllbGRTZWxlY3QsXG4gICAgRmllbGRTd2l0Y2gsXG59IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGUtZmllbGRzXCI7XG5pbXBvcnQgeyBjb21wbGV0ZVRhc2sgfSBmcm9tIFwidXRpbHMvdGFza1wiO1xuaW1wb3J0IHsgVHJlZVRhYmxlVmlldyB9IGZyb20gXCIuL3VpL3ZpZXdzL3RyZWUtdGFibGVcIjtcblxuLyoqIExvY2FsIEFQSSBwcm92aWRlZCB0byBzcGVjaWZpYyBjb2RlYmxvY2tzIHdoZW4gdGhleSBhcmUgZXhlY3V0aW5nLlxuICogQGdyb3VwIENvcmVcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFjb3JlTG9jYWxBcGkge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzY3JpcHRDYWNoZTogU2NyaXB0Q2FjaGU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGFwaTogRGF0YWNvcmVBcGksIHB1YmxpYyBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zY3JpcHRDYWNoZSA9IG5ldyBTY3JpcHRDYWNoZSh0aGlzLmNvcmUuZGF0YXN0b3JlKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgZmlsZSBwYXRoIGZvciB0aGUgbG9jYWwgQVBJLiAqL1xuICAgIHB1YmxpYyBjdXJyZW50UGF0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZnVsbCBtYXJrZG93biBmaWxlIG1ldGFkYXRhIGZvciB0aGUgY3VycmVudCBmaWxlLiAqL1xuICAgIHB1YmxpYyBjdXJyZW50RmlsZSgpOiBNYXJrZG93blBhZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucGFnZSh0aGlzLnBhdGgpITtcbiAgICB9XG5cbiAgICAvKiogR2V0IGFjZXNzIHRvIGx1eG9uIGZ1bmN0aW9ucy4gKi9cbiAgICBnZXQgbHV4b24oKTogdHlwZW9mIGx1eG9uIHtcbiAgICAgICAgcmV0dXJuIGx1eG9uO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYWNjZXNzIHRvIHByZWFjdCBmdW5jdGlvbnMuICovXG4gICAgZ2V0IHByZWFjdCgpOiB0eXBlb2YgcHJlYWN0IHtcbiAgICAgICAgcmV0dXJuIHByZWFjdDtcbiAgICB9XG5cbiAgICAvKiogQ2VudHJhbCBPYnNpZGlhbiBhcHAgb2JqZWN0LiAqL1xuICAgIGdldCBhcHAoKTogQXBwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29yZS5hcHA7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBpbnRlcm5hbCBwbHVnaW4gY2VudHJhbCBkYXRhc3RydWN0dXJlLiAqL1xuICAgIGdldCBjb3JlKCk6IERhdGFjb3JlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmNvcmU7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2NyaXB0IGxvYWRpbmcgdXRpbGl0aWVzIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKipcbiAgICAgKiBBc3luY2hyb25vdXNseSBsb2FkIGEgamF2YXNjcmlwdCBibG9jayBmcm9tIHRoZSBnaXZlbiBwYXRoIG9yIGxpbms7IHlvdSBjYW4gZWl0aGVyIGxvYWQgZnJvbSBKUy9UUy9KU1gvVFNYIGZpbGVzXG4gICAgICogZGlyZWN0bHksIG9yIGZyb20gY29kZWJsb2NrcyBieSBsb2FkaW5nIGZyb20gdGhlIHNlY3Rpb24gdGhlIGNvZGVibG9jayBpcyBpbnNpZGUgb2YuIFRoZXJlIGFyZSBhIGZldyBzdGlwdWxhdGlvbnNcbiAgICAgKiB0byBsb2FkaW5nOlxuICAgICAqIC0gWW91IGNhbm5vdCBsb2FkIGN5Y2xpY2FsIGRlcGVuZGVuY2llcy5cbiAgICAgKiAtIFRoaXMgaXMgc2ltaWxhciB0byB2YW5pbGxhIGpzIGByZXF1aXJlKClgLCBub3QgYGltcG9ydCAuLi4gYC4gWW91ciBzY3JpcHRzIHlvdSBhcmUgcmVxdWlyaW5nIG5lZWQgdG8gZXhwbGljaXRseVxuICAgICAqICAgcmV0dXJuIHRoZSB0aGluZ3MgdGhleSBhcmUgZXhwb3J0aW5nLCBsaWtlIHRoZSBleGFtcGxlIGJlbG93LiBUaGUgYGV4cG9ydGAga2V5d29yZCBkb2VzIG5vdCB3b3JrLlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBmdW5jdGlvbiBNeUVsZW1lbnQoKSB7XG4gICAgICogIC4uLlxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHJldHVybiB7IE15RWxlbWVudCB9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyByZXF1aXJlKHBhdGg6IHN0cmluZyB8IExpbmspOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNjcmlwdENhY2hlLmxvYWQocGF0aCwgeyBkYzogdGhpcyB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5vckVsc2VUaHJvdygpO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gR2VuZXJhbCB1dGlsaXRpZXMgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLyoqIFV0aWxpdGllcyBmb3IgY29lcmNpbmcgdHlwZXMgaW50byBvbmUgc3BlY2lmaWMgdHlwZSBmb3IgZWFzaWVyIHByb2dyYW1taW5nLiAqL1xuICAgIHB1YmxpYyBjb2VyY2UgPSBDb2VyY2U7XG5cbiAgICAvKiogUmVzb2x2ZSBhIGxvY2FsIG9yIGFic29sdXRlIHBhdGggb3IgbGluayB0byBhbiBhYnNvbHV0ZSBwYXRoLiAqL1xuICAgIHB1YmxpYyByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcgfCBMaW5rLCBzb3VyY2VQYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc29sdmVQYXRoKHBhdGgsIHNvdXJjZVBhdGggPz8gdGhpcy5wYXRoKTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIHRoZSBnaXZlbiBxdWVyeSwgcmV0dXJuaW5nIGEgbW9uYWRpYyBzdWNjZXNzL2ZhaWx1cmUgcmVzdWx0LiAqL1xuICAgIHB1YmxpYyB0cnlQYXJzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogUmVzdWx0PEluZGV4UXVlcnksIHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkudHJ5UGFyc2VRdWVyeShxdWVyeSk7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSB0aGUgZ2l2ZW4gcXVlcnksIHRocm93aW5nIGFuIGVycm9yIGlmIGl0IGlzIGludmFsaWQuICovXG4gICAgcHVibGljIHBhcnNlUXVlcnkocXVlcnk6IHN0cmluZyB8IEluZGV4UXVlcnkpOiBJbmRleFF1ZXJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5UGFyc2VRdWVyeShxdWVyeSkub3JFbHNlVGhyb3coKGUpID0+IFwiRmFpbGVkIHRvIHBhcnNlIHF1ZXJ5OiBcIiArIGUpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBmaWxlIGxpbmsgcG9pbnRpbmcgdG8gdGhlIGdpdmVuIHBhdGguICovXG4gICAgcHVibGljIGZpbGVMaW5rKHBhdGg6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5maWxlKHBhdGgpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgaGVhZGVyIHdpdGggdGhlIGdpdmVuIG5hbWUuICovXG4gICAgcHVibGljIGhlYWRlckxpbmsocGF0aDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5oZWFkZXIocGF0aCwgaGVhZGVyKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIGJsb2NrIHdpdGggdGhlIGdpdmVuIHBhdGggYW5kIGJsb2NrIElELiAqL1xuICAgIHB1YmxpYyBibG9ja0xpbmsocGF0aDogc3RyaW5nLCBibG9jazogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHBhdGgsIGJsb2NrKTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIHRoZSBnaXZlbiBsaW5rLCB0aHJvd2luZyBhbiBlcnJvciBpZiBpdCBpcyBpbnZhbGlkLiAqL1xuICAgIHB1YmxpYyBwYXJzZUxpbmsobGlua3RleHQ6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucGFyc2VMaW5rKGxpbmt0ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIGEgbGluaywgcmV0dXJuaW5nIGEgbW9uYWRpYyBzdWNjZXNzL2ZhaWx1cmUgcmVzdWx0LiAqL1xuICAgIHB1YmxpYyB0cnlQYXJzZUxpbmsobGlua3RleHQ6IHN0cmluZyk6IFJlc3VsdDxMaW5rLCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnRyeVBhcnNlTGluayhsaW5rdGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIGRhdGEgYXJyYXkgZnJvbSBhIHJlZ3VsYXIgYXJyYXkuICovXG4gICAgcHVibGljIGFycmF5PFQ+KGlucHV0OiBUW10gfCBEYXRhQXJyYXk8VD4pOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gRGF0YUFycmF5LndyYXAoaW5wdXQpO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHRoZSB0ZXh0IG9mIGEgZ2l2ZW4gdGFzayBwcm9ncmFtbWF0aWNhbGx5LiAqL1xuXG4gICAgcHVibGljIHNldFRhc2tUZXh0KG5ld1RleHQ6IHN0cmluZywgdGFzazogTWFya2Rvd25UYXNrSXRlbSk6IHZvaWQge1xuICAgICAgICBzZXRUYXNrVGV4dCh0aGlzLmFwcCwgdGhpcy5jb3JlLCBuZXdUZXh0LCB0YXNrKTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSBnaXZlbiB0YXNrIHByb2dyYW1tYXRpY2FsbHkuICovXG4gICAgcHVibGljIHNldFRhc2tDb21wbGV0aW9uKGNvbXBsZXRlZDogYm9vbGVhbiwgdGFzazogTWFya2Rvd25UYXNrSXRlbSk6IHZvaWQge1xuICAgICAgICBjb21wbGV0ZVRhc2soY29tcGxldGVkLCB0YXNrLCB0aGlzLmFwcC52YXVsdCwgdGhpcy5jb3JlKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vXG4gICAgLy8gIEhvb2tzICAvL1xuICAgIC8vLy8vLy8vLy8vLy9cblxuICAgIC8vIEV4cG9ydCB0aGUgY29tbW9uIHByZWFjdCBob29rcyBmb3IgcGVvcGxlIHRvIHVzZSB2aWEgYGRjLmA6XG4gICAgcHVibGljIHVzZVN0YXRlID0gaG9va3MudXNlU3RhdGU7XG4gICAgcHVibGljIHVzZUNhbGxiYWNrID0gaG9va3MudXNlQ2FsbGJhY2s7XG4gICAgcHVibGljIHVzZVJlZHVjZXIgPSBob29rcy51c2VSZWR1Y2VyO1xuICAgIHB1YmxpYyB1c2VNZW1vID0gaG9va3MudXNlTWVtbztcbiAgICBwdWJsaWMgdXNlRWZmZWN0ID0gaG9va3MudXNlRWZmZWN0O1xuICAgIHB1YmxpYyBjcmVhdGVDb250ZXh0ID0gcHJlYWN0LmNyZWF0ZUNvbnRleHQ7XG4gICAgcHVibGljIHVzZUNvbnRleHQgPSBob29rcy51c2VDb250ZXh0O1xuICAgIHB1YmxpYyB1c2VSZWYgPSBob29rcy51c2VSZWY7XG4gICAgcHVibGljIHVzZUludGVybmluZyA9IHVzZUludGVybmluZztcbiAgICBwdWJsaWMgdXNlU2V0RmllbGQgPSB1c2VTZXRGaWVsZDtcblxuICAgIC8qKiBNZW1vaXplIHRoZSBpbnB1dCBhdXRvbWF0aWNhbGx5IGFuZCBwcm9jZXNzIGl0IHVzaW5nIGEgRGF0YSBBcnJheTsgcmV0dXJucyBhIHZhbmlsbGEgYXJyYXkgYmFjay4gKi9cbiAgICBwdWJsaWMgdXNlQXJyYXk8VCwgVT4oaW5wdXQ6IFRbXSB8IERhdGFBcnJheTxUPiwgcHJvY2VzczogKGRhdGE6IERhdGFBcnJheTxUPikgPT4gRGF0YUFycmF5PFU+LCBkZXBzPzogYW55W10pOiBVW10ge1xuICAgICAgICByZXR1cm4gaG9va3MudXNlTWVtbygoKSA9PiBwcm9jZXNzKERhdGFBcnJheS53cmFwKGlucHV0KSkuYXJyYXkoKSwgW2lucHV0LCAuLi4oZGVwcyA/PyBbXSldKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBmaWxlIG1ldGFkYXRhIGZvciB0aGUgY3VycmVudCBmaWxlLiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHZpZXcgd2hlbiB0aGUgY3VycmVudCBmaWxlIG1ldGFkYXRhIGNoYW5nZXMuICovXG4gICAgcHVibGljIHVzZUN1cnJlbnRGaWxlKHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogTWFya2Rvd25QYWdlIHtcbiAgICAgICAgcmV0dXJuIHVzZUZpbGVNZXRhZGF0YSh0aGlzLmNvcmUsIHRoaXMucGF0aCwgc2V0dGluZ3MpIGFzIE1hcmtkb3duUGFnZTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBjdXJyZW50IHBhdGguIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgdmlldyBpZiB0aGUgcGF0aCBjaGFuZ2VzICh0aG91Z2ggdGhhdCB3b3VsZCBiZSB3ZWlyZCkuICovXG4gICAgcHVibGljIHVzZUN1cnJlbnRQYXRoKHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMudXNlQ3VycmVudEZpbGUoc2V0dGluZ3MpO1xuICAgICAgICByZXR1cm4gbWV0YS4kcGF0aDtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBmaWxlIG1ldGFkYXRhIGZvciBhIHNwZWNpZmljIGZpbGUuIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgdmlldyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMuICovXG4gICAgcHVibGljIHVzZUZpbGUocGF0aDogc3RyaW5nLCBzZXR0aW5ncz86IHsgZGVib3VuY2U/OiBudW1iZXIgfSk6IEluZGV4YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB1c2VGaWxlTWV0YWRhdGEodGhpcy5jb3JlLCBwYXRoLCBzZXR0aW5ncykhO1xuICAgIH1cblxuICAgIC8qKiBBdXRvbWF0aWNhbGx5IHJlZnJlc2ggdGhlIHZpZXcgd2hlbmV2ZXIgdGhlIGluZGV4IHVwZGF0ZXM7IHJldHVybnMgdGhlIGxhdGVzdCBpbmRleCByZXZpc2lvbiBJRC4gKi9cbiAgICBwdWJsaWMgdXNlSW5kZXhVcGRhdGVzKHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHVzZUluZGV4VXBkYXRlcyh0aGlzLmNvcmUsIHNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW4gYSBxdWVyeSwgYXV0b21hdGljYWxseSByZS1ydW5uaW5nIGl0IHdoZW5ldmVyIHRoZSB2YXVsdCBjaGFuZ2VzLiBSZXR1cm5zIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1ZXJ5XG4gICAgICogZXhlY3V0aW9uLCBzdWNoIGFzIGluZGV4IHJldmlzaW9uIGFuZCB0b3RhbCBzZWFyY2ggZHVyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHVzZUZ1bGxRdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSwgc2V0dGluZ3M/OiB7IGRlYm91bmNlPzogbnVtYmVyIH0pOiBTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiB7XG4gICAgICAgIHJldHVybiB1c2VGdWxsUXVlcnkodGhpcy5jb3JlLCB0aGlzLnBhcnNlUXVlcnkocXVlcnkpLCBzZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFJ1biBhIHF1ZXJ5LCBhdXRvbWF0aWNhbGx5IHJlLXJ1bm5pbmcgaXQgd2hlbmV2ZXIgdGhlIHZhdWx0IGNoYW5nZXMuICovXG4gICAgcHVibGljIHVzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5LCBzZXR0aW5ncz86IHsgZGVib3VuY2U/OiBudW1iZXIgfSk6IEluZGV4YWJsZVtdIHtcbiAgICAgICAgLy8gSG9va3MgbmVlZCB0byBiZSBjYWxsZWQgaW4gYSBjb25zaXN0ZW50IG9yZGVyLCBzbyB3ZSBkb24ndCBuZXN0IHRoZSBgdXNlUXVlcnlgIGNhbGwgaW4gdGhlIERhdGFBcnJheS53cmFwIF9qdXN0XyBpbiBjYXNlLlxuICAgICAgICByZXR1cm4gdXNlUXVlcnkodGhpcy5jb3JlLCB0aGlzLnBhcnNlUXVlcnkocXVlcnkpLCBzZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVmlzdWFsIEVsZW1lbnRzIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKiogVmVydGljYWwgZmxleGJveCBjb250YWluZXI7IGdvb2QgZm9yIHB1dHRpbmcgaXRlbXMgdG9nZXRoZXIgaW4gYSBjb2x1bW4uICovXG4gICAgcHVibGljIFN0YWNrID0gU3RhY2s7XG4gICAgLyoqIEhvcml6b250YWwgZmxleGJveCBjb250YWluZXI7IGdvb2QgZm9yIHB1dHRpbmcgaXRlbXMgdG9nZXRoZXIgaW4gYSByb3cuICovXG4gICAgcHVibGljIEdyb3VwID0gR3JvdXA7XG5cbiAgICAvKiogUmVuZGVycyBhIGxpdGVyYWwgdmFsdWUgaW4gYSBwcmV0dHkgd2F5IHRoYXQgcmVzcGVjdHMgc2V0dGluZ3MuICovXG4gICAgcHVibGljIExpdGVyYWwgPSAoKHsgdmFsdWUsIHNvdXJjZVBhdGgsIGlubGluZSB9OiB7IHZhbHVlOiBMaXRlcmFsOyBzb3VyY2VQYXRoPzogc3RyaW5nOyBpbmxpbmU/OiBib29sZWFuIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRTb3VyY2VQYXRoID0gaG9va3MudXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgICAgIHJldHVybiA8TGl0IHZhbHVlPXt2YWx1ZX0gc291cmNlUGF0aD17c291cmNlUGF0aCA/PyBpbXBsaWNpdFNvdXJjZVBhdGggPz8gdGhpcy5wYXRofSBpbmxpbmU9e2lubGluZX0gLz47XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8qKiBSZW5kZXJzIG1hcmtkb3duIHVzaW5nIHRoZSBPYnNpZGlhbiBtYXJrZG93biByZW5kZXJlciwgb3B0aW9uYWxseSBhdHRhY2hpbmcgYWRkaXRpb25hbCBzdHlsZXMuICovXG4gICAgcHVibGljIE1hcmtkb3duID0gKCh7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHNvdXJjZVBhdGgsXG4gICAgICAgIGlubGluZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICB9OiB7XG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICAgICAgc291cmNlUGF0aD86IHN0cmluZztcbiAgICAgICAgaW5saW5lPzogYm9vbGVhbjtcbiAgICAgICAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzO1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBpbXBsaWNpdFNvdXJjZVBhdGggPSBob29rcy51c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgc291cmNlUGF0aD17c291cmNlUGF0aCA/PyBpbXBsaWNpdFNvdXJjZVBhdGggPz8gdGhpcy5wYXRofVxuICAgICAgICAgICAgICAgIGlubGluZT17aW5saW5lfVxuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICAgICAgICBjbHM9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8qKiBSZW5kZXJzIGFuIG9ic2lkaWFuLXN0eWxlIGxpbmsgZGlyZWN0bHkgYW5kIG1vcmUgZWZmaWVpY250bHkgdGhhbiByZW5kZXJpbmcgbWFya2Rvd24uICovXG4gICAgcHVibGljIExpbmsgPSBPYnNpZGlhbkxpbms7XG5cbiAgICAvKiogQ3JlYXRlIGEgdmFuaWxsYSBPYnNpZGlhbiBlbWJlZCBmb3IgdGhlIGdpdmVuIGxpbmsuICovXG4gICAgcHVibGljIExpbmtFbWJlZCA9ICgoe1xuICAgICAgICBsaW5rLFxuICAgICAgICBpbmxpbmUsXG4gICAgICAgIHNvdXJjZVBhdGgsXG4gICAgfToge1xuICAgICAgICBsaW5rOiBzdHJpbmcgfCBMaW5rO1xuICAgICAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgICAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVhbExpbmsgPSBob29rcy51c2VNZW1vKCgpID0+ICh0eXBlb2YgbGluayA9PT0gXCJzdHJpbmdcIiA/IExpbmsuZmlsZShsaW5rKSA6IGxpbmspLCBbbGlua10pO1xuICAgICAgICBjb25zdCBpbXBsaWNpdFNvdXJjZVBhdGggPSBob29rcy51c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFbWJlZFxuICAgICAgICAgICAgICAgIGxpbms9e3JlYWxMaW5rfVxuICAgICAgICAgICAgICAgIGlubGluZT17aW5saW5lID8/IGZhbHNlfVxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3NvdXJjZVBhdGggPz8gaW1wbGljaXRTb3VyY2VQYXRoID8/IHRoaXMucGF0aH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8qKiBDcmVhdGUgYW4gZXhwbGljaXQgJ3NwYW4nIGVtYmVkIHdoaWNoIGV4dHJhY3RzIGEgc3BhbiBvZiBsaW5lcyBmcm9tIGEgbWFya2Rvd24gZmlsZS4gKi9cbiAgICBwdWJsaWMgU3BhbkVtYmVkID0gKCh7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmQsXG4gICAgICAgIGV4cGxhaW4sXG4gICAgICAgIHNob3dFeHBsYWluLFxuICAgICAgICBzb3VyY2VQYXRoOiBtYXliZVNvdXJjZVBhdGgsXG4gICAgfToge1xuICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gICAgICAgIGV4cGxhaW4/OiBzdHJpbmc7XG4gICAgICAgIHNob3dFeHBsYWluPzogYm9vbGVhbjtcbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfSkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBwYXRoIHRvIHRoZSBjb3JyZWN0IHBhdGggaWYgYSBzb3VyY2UgcGF0aCBpcyBwcm92aWRlZC5cbiAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyB0aGlzLnBhdGg7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IGhvb2tzLnVzZU1lbW8oKCkgPT4gdGhpcy5yZXNvbHZlUGF0aChwYXRoLCBzb3VyY2VQYXRoKSwgW3BhdGgsIHNvdXJjZVBhdGhdKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPExpbmVTcGFuRW1iZWQgcGF0aD17cmVzb2x2ZWRQYXRofSBzdGFydD17c3RhcnR9IGVuZD17ZW5kfSBleHBsYWluPXtleHBsYWlufSBzaG93RXhwbGFpbj17c2hvd0V4cGxhaW59IC8+XG4gICAgICAgICk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8qKiBSZW5kZXJzIGFuIG9ic2lkaWFuIGx1Y2lkZSBpY29uLiAqL1xuICAgIHB1YmxpYyBJY29uID0gSWNvbjtcblxuICAgIC8vLy8vLy8vLy8vXG4gICAgLy8gVmlld3MgLy9cbiAgICAvLy8vLy8vLy8vL1xuXG4gICAgcHVibGljIFRhc2tMaXN0ID0gVGFza0xpc3Q7XG4gICAgcHVibGljIFZhbmlsbGFUYWJsZSA9IFZhbmlsbGFUYWJsZTtcbiAgICBwdWJsaWMgVHJlZVRhYmxlID0gVHJlZVRhYmxlVmlldztcbiAgICBwdWJsaWMgQ2FyZCA9IENhcmQ7XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gSW50ZXJhdGl2ZSBlbGVtZW50cyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHB1YmxpYyBCdXR0b24gPSBCdXR0b247XG4gICAgcHVibGljIFRleHRib3ggPSBUZXh0Ym94O1xuICAgIHB1YmxpYyBDYWxsb3V0ID0gQ2FsbG91dDtcbiAgICBwdWJsaWMgQ2hlY2tib3ggPSBDaGVja2JveDtcbiAgICBwdWJsaWMgU2xpZGVyID0gU2xpZGVyO1xuICAgIHB1YmxpYyBTd2l0Y2ggPSBTd2l0Y2g7XG4gICAgcHVibGljIFZhbmlsbGFTZWxlY3QgPSBWYW5pbGxhU2VsZWN0O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vICAgIGZpZWxkIGVkaXRvcnMgICAgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgcHVibGljIEZpZWxkQ2hlY2tib3ggPSBGaWVsZENoZWNrYm94O1xuICAgIHB1YmxpYyBGaWVsZFNsaWRlciA9IEZpZWxkU2xpZGVyO1xuICAgIHB1YmxpYyBGaWVsZFNlbGVjdCA9IEZpZWxkU2VsZWN0O1xuICAgIHB1YmxpYyBGaWVsZFN3aXRjaCA9IEZpZWxkU3dpdGNoO1xuICAgIHB1YmxpYyBUZXh0RmllbGQgPSBFZGl0YWJsZVRleHRGaWVsZDtcbiAgICBwdWJsaWMgVmFuaWxsYVRleHRCb3ggPSBDb250cm9sbGVkRWRpdGFibGVUZXh0RmllbGQ7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGFwaVxuICovXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdCB9IGZyb20gXCJpbmRleC9kYXRhc3RvcmVcIjtcbmltcG9ydCB7IFBSSU1JVElWRVMsIFFVRVJZIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5pbXBvcnQgeyBJbmRleFF1ZXJ5IH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4LXF1ZXJ5XCI7XG5pbXBvcnQgeyBJbmRleGFibGUgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBNYXJrZG93blBhZ2UgfSBmcm9tIFwiaW5kZXgvdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCIuL3Jlc3VsdFwiO1xuaW1wb3J0IHsgQXBwLCBDb21wb25lbnQsIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsIE1hcmtkb3duUmVuZGVyQ2hpbGQgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IERhdGFjb3JlSlNSZW5kZXJlciB9IGZyb20gXCJ1aS9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBEYXRhY29yZUxvY2FsQXBpIH0gZnJvbSBcIi4vbG9jYWwtYXBpXCI7XG5pbXBvcnQgUGFyc2ltbW9uIGZyb20gXCJwYXJzaW1tb25cIjtcbmltcG9ydCB7IENvZXJjZSB9IGZyb20gXCIuL2NvZXJjZVwiO1xuaW1wb3J0IHsgRGF0YUFycmF5IH0gZnJvbSBcIi4vZGF0YS1hcnJheVwiO1xuaW1wb3J0ICogYXMgbHV4b24gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgKiBhcyBwcmVhY3QgZnJvbSBcInByZWFjdFwiO1xuXG4vKiogRXh0ZXJhbGx5IHZpc2libGUgQVBJIGZvciBkYXRhY29yZS5cbiAqIEBncm91cCBDb3JlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhY29yZUFwaSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBjb3JlOiBEYXRhY29yZSkge31cblxuICAgIC8qKiBHZXQgYWNlc3MgdG8gbHV4b24gZnVuY3Rpb25zLiAqL1xuICAgIGdldCBsdXhvbigpOiB0eXBlb2YgbHV4b24ge1xuICAgICAgICByZXR1cm4gbHV4b247XG4gICAgfVxuXG4gICAgLyoqIEdldCBhY2Nlc3MgdG8gcHJlYWN0IGZ1bmN0aW9ucy4gKi9cbiAgICBnZXQgcHJlYWN0KCk6IHR5cGVvZiBwcmVhY3Qge1xuICAgICAgICByZXR1cm4gcHJlYWN0O1xuICAgIH1cblxuICAgIC8qKiBDZW50cmFsIE9ic2lkaWFuIGFwcCBvYmplY3QuICovXG4gICAgZ2V0IGFwcCgpOiBBcHAge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3JlLmFwcDtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBMb2NhbCBBUEkgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy9cblxuICAgIC8qKiBDb25zdHJ1Y3QgYSBsb2NhbCBBUEkgZm9yIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoLiAqL1xuICAgIHB1YmxpYyBsb2NhbChwYXRoOiBzdHJpbmcpOiBEYXRhY29yZUxvY2FsQXBpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhY29yZUxvY2FsQXBpKHRoaXMsIHBhdGgpO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBRdWVyeWluZyArIEZldGNoaW5nIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLyoqIExvYWQgYSBtYXJrZG93biBmaWxlIGJ5IGZ1bGwgcGF0aCBvciBsaW5rLiAqL1xuICAgIHB1YmxpYyBwYWdlKHBhdGg6IHN0cmluZyB8IExpbmspOiBNYXJrZG93blBhZ2UgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCByZWFsUGF0aCA9IHBhdGggaW5zdGFuY2VvZiBMaW5rID8gcGF0aC5wYXRoIDogcGF0aDtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb3JlLmRhdGFzdG9yZS5sb2FkKHJlYWxQYXRoKSBhcyBNYXJrZG93blBhZ2UgfCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGUgYSB0ZXh0dWFsIG9yIHR5cGVkIGluZGV4IHF1ZXJ5LCByZXR1cm5pbmcgYWxsIHJlc3VsdHMuICovXG4gICAgcHVibGljIHF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogSW5kZXhhYmxlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50cnlRdWVyeShxdWVyeSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogRXhlY3V0ZSBhIHRleHR1YWwgb3IgdHlwZWQgaW5kZXggcXVlcnksIHJldHVybmluZyBhbGwgcmVzdWx0cy4gKi9cbiAgICBwdWJsaWMgdHJ5UXVlcnkocXVlcnk6IHN0cmluZyB8IEluZGV4UXVlcnkpOiBSZXN1bHQ8SW5kZXhhYmxlW10sIHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cnlGdWxsUXVlcnkocXVlcnkpLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucmVzdWx0cyk7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGUgYSB0ZXh0dWFsIG9yIHR5cGVkIGluZGV4IHF1ZXJ5LCByZXR1cm5pbmcgcmVzdWx0cyBwbHVzIHBlcmZvcm1hbmNlIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBmdWxscXVlcnkocXVlcnk6IHN0cmluZyB8IEluZGV4UXVlcnkpOiBTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyeUZ1bGxRdWVyeShxdWVyeSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogRXhlY3V0ZSBhIHRleHR1YWwgb3IgdHlwZWQgaW5kZXggcXVlcnksIHJldHVybmluZyByZXN1bHRzIHBsdXMgcGVyZm9ybWFuY2UgbWV0YWRhdGEuICovXG4gICAgcHVibGljIHRyeUZ1bGxRdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSk6IFJlc3VsdDxTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiID8gUVVFUlkucXVlcnkudHJ5UGFyc2UocXVlcnkpIDogcXVlcnk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvcmUuZGF0YXN0b3JlLnNlYXJjaChwYXJzZWRRdWVyeSk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBHZW5lcmFsIHV0aWxpdGllcyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKiogVXRpbGl0aWVzIGZvciBjb2VyY2luZyB0eXBlcyBpbnRvIG9uZSBzcGVjaWZpYyB0eXBlIGZvciBlYXNpZXIgcHJvZ3JhbW1pbmcuICovXG4gICAgcHVibGljIGNvZXJjZSA9IENvZXJjZTtcblxuICAgIC8qKiBSZXNvbHZlIGEgbG9jYWwgb3IgYWJzb2x1dGUgcGF0aCBvciBsaW5rIHRvIGFuIGFic29sdXRlIHBhdGguICovXG4gICAgcHVibGljIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyB8IExpbmssIHNvdXJjZVBhdGg/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByYXdwYXRoID0gcGF0aCBpbnN0YW5jZW9mIExpbmsgPyBwYXRoLnBhdGggOiBwYXRoO1xuICAgICAgICBpZiAocmF3cGF0aC5zdGFydHNXaXRoKFwiL1wiKSkgcmV0dXJuIHJhd3BhdGguc3Vic3RyaW5nKDEpO1xuXG4gICAgICAgIGNvbnN0IGFic29sdXRlID0gdGhpcy5jb3JlLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QocmF3cGF0aCwgc291cmNlUGF0aCA/PyBcIlwiKTtcbiAgICAgICAgaWYgKGFic29sdXRlKSByZXR1cm4gYWJzb2x1dGUucGF0aDtcblxuICAgICAgICByZXR1cm4gcmF3cGF0aDtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIHRoZSBnaXZlbiBxdWVyeSwgcmV0dXJuaW5nIGEgbW9uYWRpYyBzdWNjZXNzL2ZhaWx1cmUgcmVzdWx0LiAqL1xuICAgIHB1YmxpYyB0cnlQYXJzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogUmVzdWx0PEluZGV4UXVlcnksIHN0cmluZz4ge1xuICAgICAgICBpZiAoISh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIpKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocXVlcnkpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFFVRVJZLnF1ZXJ5LnBhcnNlKHF1ZXJ5KTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQudmFsdWUpO1xuICAgICAgICBlbHNlIHJldHVybiBSZXN1bHQuZmFpbHVyZShQYXJzaW1tb24uZm9ybWF0RXJyb3IocXVlcnksIHJlc3VsdCkpO1xuICAgIH1cblxuICAgIC8qKiBUcnkgdG8gcGFyc2UgdGhlIGdpdmVuIHF1ZXJ5LCB0aHJvd2luZyBhbiBlcnJvciBpZiBpdCBpcyBpbnZhbGlkLiAqL1xuICAgIHB1YmxpYyBwYXJzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogSW5kZXhRdWVyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyeVBhcnNlUXVlcnkocXVlcnkpLm9yRWxzZVRocm93KChlKSA9PiBcIkZhaWxlZCB0byBwYXJzZSBxdWVyeTogXCIgKyBlKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgZmlsZSBsaW5rIHBvaW50aW5nIHRvIHRoZSBnaXZlbiBwYXRoLiAqL1xuICAgIHB1YmxpYyBmaWxlTGluayhwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZShwYXRoKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIGhlYWRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLiAqL1xuICAgIHB1YmxpYyBoZWFkZXJMaW5rKHBhdGg6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHBhdGgsIGhlYWRlcik7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIGxpbmsgdG8gYSBibG9jayB3aXRoIHRoZSBnaXZlbiBwYXRoIGFuZCBibG9jayBJRC4gKi9cbiAgICBwdWJsaWMgYmxvY2tMaW5rKHBhdGg6IHN0cmluZywgYmxvY2s6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5ibG9jayhwYXRoLCBibG9jayk7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSB0aGUgZ2l2ZW4gbGluaywgdGhyb3dpbmcgYW4gZXJyb3IgaWYgaXQgaXMgaW52YWxpZC4gKi9cbiAgICBwdWJsaWMgcGFyc2VMaW5rKGxpbmt0ZXh0OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5UGFyc2VMaW5rKGxpbmt0ZXh0KS5vckVsc2VUaHJvdygoZSkgPT4gXCJGYWlsZWQgdG8gcGFyc2UgbGluazogXCIgKyBlKTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIGEgbGluaywgcmV0dXJuaW5nIGEgbW9uYWRpYyBzdWNjZXNzL2ZhaWx1cmUgcmVzdWx0LiAqL1xuICAgIHB1YmxpYyB0cnlQYXJzZUxpbmsobGlua3RleHQ6IHN0cmluZyk6IFJlc3VsdDxMaW5rLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gUFJJTUlUSVZFUy5lbWJlZExpbmsucGFyc2UobGlua3RleHQpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdGF0dXMpIHJldHVybiBSZXN1bHQuZmFpbHVyZShQYXJzaW1tb24uZm9ybWF0RXJyb3IobGlua3RleHQsIHBhcnNlZCkpO1xuXG4gICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhwYXJzZWQudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBkYXRhIGFycmF5IGZyb20gYSByZWd1bGFyIGFycmF5LiAqL1xuICAgIHB1YmxpYyBhcnJheTxUPihpbnB1dDogVFtdIHwgRGF0YUFycmF5PFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIERhdGFBcnJheS53cmFwKGlucHV0KTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBWaXN1YWwgRWxlbWVudHMgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgZ2l2ZW4gRGF0YWNvcmVKUyBzY3JpcHQsIHJlbmRlcmluZyBpdCBpbnRvIHRoZSBnaXZlbiBjb250YWluZXIuIFRoaXMgZnVuY3Rpb25cbiAgICAgKiB3aWxsIHJldHVybiBxdWlja2x5OyBhY3R1YWwgcmVuZGVyaW5nIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGEgbWFya2Rvd24gcmVuZGVyIGNoaWxkIHJlcHJlc2VudGluZyB0aGUgcmVuZGVyZWQgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBleGVjdXRlSnMoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCB8IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsXG4gICAgICAgIHNvdXJjZVBhdGg6IHN0cmluZ1xuICAgICk6IE1hcmtkb3duUmVuZGVyQ2hpbGQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVySmF2YXNjcmlwdChzb3VyY2UsIGNvbnRhaW5lciwgY29tcG9uZW50LCBzb3VyY2VQYXRoLCBcImpzXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpbWlsYXIgdG8gYGV4ZWN1dGVKc2AsIGJ1dCBmb3IgSlNYIHNjcmlwdHMuIElmIHlvdSBhcmUgdW5zdXJlIGlmIHlvdXIgaW5wdXQgd2lsbCBiZSBKU1xuICAgICAqIG9yIEpTWCwgdXNlIHRoaXMgb25lLCBhcyBpdCBhbHNvIHN1cHBvcnRzIHJlZ3VsYXIgamF2YXNjcmlwdCAoYWxiZWl0IGF0IGF0IGEgbWlsZCBwZXJmb3JtYW5jZVxuICAgICAqIGhpdCB0byByZW5kZXJpbmcpLlxuICAgICAqL1xuICAgIHB1YmxpYyBleGVjdXRlSnN4KFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQgfCBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmdcbiAgICApOiBNYXJrZG93blJlbmRlckNoaWxkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckphdmFzY3JpcHQoc291cmNlLCBjb250YWluZXIsIGNvbXBvbmVudCwgc291cmNlUGF0aCwgXCJqc3hcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2ltaWxhciB0byBgZXhlY3V0ZUpzYCwgYnV0IGZvciBUeXBlU2NyaXB0IHNjcmlwdHMuIFVzZSB0aGUgVFNYIHZhcmlhbnQgZm9yIFRTWCBzdXBwcm90LlxuICAgICAqL1xuICAgIHB1YmxpYyBleGVjdXRlVHMoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCB8IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsXG4gICAgICAgIHNvdXJjZVBhdGg6IHN0cmluZ1xuICAgICk6IE1hcmtkb3duUmVuZGVyQ2hpbGQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVySmF2YXNjcmlwdChzb3VyY2UsIGNvbnRhaW5lciwgY29tcG9uZW50LCBzb3VyY2VQYXRoLCBcInRzXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpbWlsYXIgdG8gYGV4ZWN1dGVUc2AsIGJ1dCBmb3IgVFNYIHNjcmlwdHMuIElmIHlvdSBhcmUgdW5zdXJlIGlmIHlvdXIgaW5wdXQgd2lsbCBiZSBUU1xuICAgICAqIG9yIFRTWCwgdXNlIHRoaXMgb25lLCBhcyBpdCBhbHNvIHN1cHBvcnRzIHJlZ3VsYXIgamF2YXNjcmlwdCAoYWxiZWl0IGF0IGF0IGEgbWlsZCBwZXJmb3JtYW5jZVxuICAgICAqIGhpdCB0byByZW5kZXJpbmcpLlxuICAgICAqXG4gICAgICogVGhpcyBnZW5lcmFsbHkgd2lsbCBhbHNvIHdvcmsgaWYgeW91IGFyZSB1bnN1cmUgaWYgeW91ciBpbnB1dCBpcyBqYXZhc2NyaXB0IG9yIHR5cGVzY3JpcHQsXG4gICAgICogdGhvdWdoIGJld2FyZSB0aGVyZSBhcmUgYSBmZXcgbmljaGUgY2FzZXMgd2hlcmUgamF2YXNjcmlwdCBhbmQgdHlwZXNjcmlwdCBkaXZlcmdlIGluIHN5bnRheC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZVRzeChcbiAgICAgICAgc291cmNlOiBzdHJpbmcsXG4gICAgICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50IHwgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCxcbiAgICAgICAgc291cmNlUGF0aDogc3RyaW5nXG4gICAgKTogTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJKYXZhc2NyaXB0KHNvdXJjZSwgY29udGFpbmVyLCBjb21wb25lbnQsIHNvdXJjZVBhdGgsIFwidHN4XCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU2hhcmVkIGxvZ2ljIGZvciByZW5kZXJpbmcgYW55IEpTL1RTIHNjcmlwdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW5kZXJKYXZhc2NyaXB0KFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQgfCBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gICAgICAgIGxhbmd1YWdlOiBcImpzXCIgfCBcInRzXCIgfCBcImpzeFwiIHwgXCJ0c3hcIlxuICAgICkge1xuICAgICAgICBsZXQgbG9jYWwgPSBuZXcgRGF0YWNvcmVMb2NhbEFwaSh0aGlzLCBzb3VyY2VQYXRoKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgRGF0YWNvcmVKU1JlbmRlcmVyKGxvY2FsLCBjb250YWluZXIsIHNvdXJjZVBhdGgsIHNvdXJjZSwgbGFuZ3VhZ2UpO1xuICAgICAgICBjb21wb25lbnQuYWRkQ2hpbGQocmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybiByZW5kZXJlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0UGFyZW50Rm9sZGVyIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5pbXBvcnQgeyBURmlsZSwgVEZvbGRlciwgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuLyoqIFNwZWNpZmljIGluZGV4IGZvciB0cmFja2luZyBvYmplY3RzIGluIHJlbGF0aXZlIHBhdGhzLiBTcGVjaWZpY2FsbHkgdHJhY2tzIHRvcC1sZXZlbCBwYWdlIG9iamVjdHMuICovXG5leHBvcnQgY2xhc3MgRm9sZGVySW5kZXgge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB2YXVsdDogVmF1bHQpIHt9XG5cbiAgICAvKiogR2V0IHRoZSBsaXN0IG9mIGFsbCBmaWxlcyB1bmRlciB0aGUgZ2l2ZW4gcGF0aC4gKi9cbiAgICBwdWJsaWMgZ2V0KHByZWZpeDogc3RyaW5nLCBmaWx0ZXI/OiAocGF0aDogc3RyaW5nKSA9PiBib29sZWFuKTogU2V0PHN0cmluZz4ge1xuICAgICAgICBsZXQgZm9sZGVyID0gdGhpcy52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocHJlZml4IHx8IFwiL1wiKTtcbiAgICAgICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBGb2xkZXJJbmRleC5FTVBUWV9TRVQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcy53YWxrKGZvbGRlciwgZmlsdGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIocHJlZml4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KHByZWZpeCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBGb2xkZXJJbmRleC5FTVBUWV9TRVQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBsaXN0IG9mIGZpbGVzIHNwZWNpZmljYWxseSB1bmRlciB0aGUgZ2l2ZW4gcGF0aC4gKi9cbiAgICBwdWJsaWMgZ2V0RXhhY3QocHJlZml4OiBzdHJpbmcsIGZpbHRlcj86IChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIGxldCBmb2xkZXIgPSB0aGlzLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChwcmVmaXggfHwgXCIvXCIpO1xuICAgICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICAgICAgcmV0dXJuIEZvbGRlckluZGV4LkVNUFRZX1NFVDtcbiAgICAgICAgfSBlbHNlIGlmIChmb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZvbGRlci5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihmaWxlLnBhdGgpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLmFkZChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIocHJlZml4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KHByZWZpeCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBGb2xkZXJJbmRleC5FTVBUWV9TRVQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gcGF0aCBleGlzdHMgaW4gdGhlIGluZGV4LiAqL1xuICAgIHB1YmxpYyBwYXRoRXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocGF0aCB8fCBcIi9cIikgIT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZm9sZGVyIGV4aXN0cyBpbiB0aGUgaW5kZXguICovXG4gICAgcHVibGljIGZvbGRlckV4aXN0cyhmb2xkZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZm9sZGVyIHx8IFwiL1wiKSBpbnN0YW5jZW9mIFRGb2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlIHRoZSBpbi1tZW1vcnkgcHJlZml4IGluZGV4IHRvIGNvbnZlcnQgYSByZWxhdGl2ZSBwYXRoIHRvIGFuIGFic29sdXRlIG9uZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZVJlbGF0aXZlKHBhdGg6IHN0cmluZywgb3JpZ2luPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFvcmlnaW4pIHJldHVybiBwYXRoO1xuICAgICAgICBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMSk7XG5cbiAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IGdldFBhcmVudEZvbGRlcihvcmlnaW4pICsgXCIvXCIgKyBwYXRoO1xuICAgICAgICBpZiAodGhpcy5wYXRoRXhpc3RzKHJlbGF0aXZlUGF0aCkpIHJldHVybiByZWxhdGl2ZVBhdGg7XG4gICAgICAgIGVsc2UgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSAqd2Fsayhmb2xkZXI6IFRGb2xkZXIsIGZpbHRlcj86IChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmb2xkZXIuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLndhbGsoZmlsZSwgZmlsdGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyID8gZmlsdGVyKGZpbGUucGF0aCkgOiB0cnVlKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZmlsZS5wYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVtcHR5IHBsYWNlaG9sZGVyIHNldC4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyBFTVBUWV9TRVQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xufVxuIiwgIi8qKiBUcmFja3MgYW4gaW52ZXJ0ZWQgaW5kZXggb2YgdmFsdWUgLT4gc2V0XFw8aWRzXFw+LiAqL1xuZXhwb3J0IGNsYXNzIEludmVydGVkSW5kZXg8Vj4ge1xuICAgIHByaXZhdGUgaW52ZXJ0ZWQ6IE1hcDxWLCBTZXQ8c3RyaW5nPj47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW52ZXJ0ZWQgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCB0aGUga2V5IHRvIHRoZSBnaXZlbiB2YWx1ZXMuICovXG4gICAgcHVibGljIHNldChrZXk6IHN0cmluZywgdmFsdWVzOiBJdGVyYWJsZTxWPikge1xuICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnZlcnRlZC5oYXModmFsdWUpKSB0aGlzLmludmVydGVkLnNldCh2YWx1ZSwgbmV3IFNldCgpKTtcbiAgICAgICAgICAgIHRoaXMuaW52ZXJ0ZWQuZ2V0KHZhbHVlKSEuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0IGFsbCBrZXlzIHRoYXQgbWFwIHRvIHRoZSBnaXZlbiB2YWx1ZS4gKi9cbiAgICBwdWJsaWMgZ2V0KHZhbHVlOiBWKTogU2V0PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZlcnRlZC5nZXQodmFsdWUpID8/IEludmVydGVkSW5kZXguRU1QVFlfU0VUO1xuICAgIH1cblxuICAgIC8qKiBEZWxldGUgYSBrZXkgZnJvbSB0aGUgc2V0IG9mIGFzc29jaWF0ZWQgdmFsdWVzLiAqL1xuICAgIHB1YmxpYyBkZWxldGUoa2V5OiBzdHJpbmcsIHZhbHVlczogSXRlcmFibGU8Vj4pIHtcbiAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBzZXQgPSB0aGlzLmludmVydGVkLmdldCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc2V0KSB7XG4gICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2V0ICYmIHNldC5zaXplID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludmVydGVkLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuaW52ZXJ0ZWQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBFTVBUWV9TRVQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xufVxuIiwgIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxhdFF1ZXVlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlkcyA9IFtdO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBwdXNoKGlkLCB2YWx1ZSkge1xuICAgICAgICBsZXQgcG9zID0gdGhpcy5sZW5ndGgrKztcblxuICAgICAgICB3aGlsZSAocG9zID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gKHBvcyAtIDEpID4+IDE7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMudmFsdWVzW3BhcmVudF07XG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gcGFyZW50VmFsdWUpIGJyZWFrO1xuICAgICAgICAgICAgdGhpcy5pZHNbcG9zXSA9IHRoaXMuaWRzW3BhcmVudF07XG4gICAgICAgICAgICB0aGlzLnZhbHVlc1twb3NdID0gcGFyZW50VmFsdWU7XG4gICAgICAgICAgICBwb3MgPSBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlkc1twb3NdID0gaWQ7XG4gICAgICAgIHRoaXMudmFsdWVzW3Bvc10gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmlkc1swXTtcbiAgICAgICAgdGhpcy5sZW5ndGgtLTtcblxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuaWRzWzBdID0gdGhpcy5pZHNbdGhpcy5sZW5ndGhdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlc1swXSA9IHRoaXMudmFsdWVzW3RoaXMubGVuZ3RoXTtcbiAgICAgICAgICAgIGNvbnN0IGhhbGZMZW5ndGggPSB0aGlzLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgICAgICAgIHdoaWxlIChwb3MgPCBoYWxmTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxlZnQgPSAocG9zIDw8IDEpICsgMTtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodCA9IGxlZnQgKyAxO1xuICAgICAgICAgICAgICAgIGxldCBiZXN0SW5kZXggPSB0aGlzLmlkc1tsZWZ0XTtcbiAgICAgICAgICAgICAgICBsZXQgYmVzdFZhbHVlID0gdGhpcy52YWx1ZXNbbGVmdF07XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRWYWx1ZSA9IHRoaXMudmFsdWVzW3JpZ2h0XTtcblxuICAgICAgICAgICAgICAgIGlmIChyaWdodCA8IHRoaXMubGVuZ3RoICYmIHJpZ2h0VmFsdWUgPCBiZXN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHJpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBiZXN0SW5kZXggPSB0aGlzLmlkc1tyaWdodF07XG4gICAgICAgICAgICAgICAgICAgIGJlc3RWYWx1ZSA9IHJpZ2h0VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiZXN0VmFsdWUgPj0gdmFsdWUpIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pZHNbcG9zXSA9IGJlc3RJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1twb3NdID0gYmVzdFZhbHVlO1xuICAgICAgICAgICAgICAgIHBvcyA9IGxlZnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaWRzW3Bvc10gPSBpZDtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW3Bvc10gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b3A7XG4gICAgfVxuXG4gICAgcGVlaygpIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5pZHNbMF07XG4gICAgfVxuXG4gICAgcGVla1ZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcbiAgICB9XG5cbiAgICBzaHJpbmsoKSB7XG4gICAgICAgIHRoaXMuaWRzLmxlbmd0aCA9IHRoaXMudmFsdWVzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCBCVHJlZSBmcm9tIFwic29ydGVkLWJ0cmVlXCI7XG5cbi8qKiBHZW5lcmFsIGFic3RyYWN0aW9uIGZvciBhbGwgZmllbGQgaW5kaWNlczsgc29tZSBtYXkgYmUgb3B0aW1pemVkIGZvciBzb21lIHR5cGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZEluZGV4IHtcbiAgICAvLyBUT0RPOiBDaGFuZ2UgYWxsKCkgYW5kIGVxdWFscygpIHRvIHJldHVybiBGaWx0ZXI8c3RyaW5nPiBpbnN0ZWFkIGZvciBwZXJmb3JtYW5jZSBvbiBzb21lIGluZGV4IHR5cGVzLlxuXG4gICAgLyoqIEFkZCBhbiAob2JqZWN0LCB2YWx1ZSkgcGFpcmluZyB0byB0aGUgY29sbGVjdGlvbi4gKi9cbiAgICBhZGQoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkO1xuXG4gICAgLyoqIERlbGV0ZSBhbiAob2JqZWN0LCB2YWx1ZSkgcGFpcmluZyBmcm9tIHRoZSBjb2xsZWN0aW9uLiAqL1xuICAgIGRlbGV0ZShpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQ7XG5cbiAgICAvKiogUmV0dXJuIGEgc2V0IG9mIGFsbCBwYWdlcyBpbiB0aGUgY29sbGVjdGlvbi4gKi9cbiAgICBhbGwoKTogU2V0PHN0cmluZz47XG5cbiAgICAvKiogRm9yIGluZGljZXMgd2hpY2ggc3VwcG9ydCBmYXN0IHZhbHVlIGxvb2t1cHMsIHJldHVybnMgdGhlIHNldCBvZiBhbGwgZG9jdW1lbnRzIHdpdGggdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIGVxdWFscyh2YWx1ZTogTGl0ZXJhbCk6IFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkO1xufVxuXG4vKiogRmllbGQgaW5kZXggZm9yIGFueSBmaWVsZCB3aGljaCBpcyBhbHdheXMgb3IgYWxtb3N0IGFsd2F5cyBwcmVzZW50ICgkcmV2aXNpb24sICR0eXBlcykuICovXG5leHBvcnQgY2xhc3MgRXZlcnl0aGluZ0ZpZWxkSW5kZXggaW1wbGVtZW50cyBGaWVsZEluZGV4IHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGFsbDogKCkgPT4gU2V0PHN0cmluZz4pIHt9XG5cbiAgICBwdWJsaWMgYWRkKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZCB7fVxuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgZXF1YWxzKHZhbHVlOiBMaXRlcmFsKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLyoqIFNwZWNpYWxpemVkIGZpZWxkIGluZGV4IGZvciBJRHMgd2hpY2gga25vd3MgdG8gZGlyZWN0bHkganVzdCByZXR1cm4gdGhlIElELiAqL1xuZXhwb3J0IGNsYXNzIElkRmllbGRJbmRleCBpbXBsZW1lbnRzIEZpZWxkSW5kZXgge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgYWxsOiAoKSA9PiBTZXQ8c3RyaW5nPiwgcHVibGljIGxvb2t1cDogKGlkOiBzdHJpbmcpID0+IGJvb2xlYW4pIHt9XG5cbiAgICBwdWJsaWMgYWRkKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZCB7fVxuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgZXF1YWxzKHZhbHVlOiBMaXRlcmFsKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIUxpdGVyYWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5sb29rdXAodmFsdWUgYXMgc3RyaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoW3ZhbHVlIGFzIHN0cmluZ10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIERlZmF1bHQgZmllbGQgaW5kZXggd2hpY2ggdHJhY2tzIGZpZWxkIGxvY2F0aW9ucyB1c2luZyBhIHNldC4gKi9cbmV4cG9ydCBjbGFzcyBTZXRGaWVsZEluZGV4IGltcGxlbWVudHMgRmllbGRJbmRleCB7XG4gICAgLyoqIFRoZSBJRCBvZiBldmVyeSBvYmplY3QgdGhhdCB0aGlzIGZpZWxkIGlzIHByZXNlbnQgb24uICovXG4gICAgcHJpdmF0ZSBwcmVzZW50OiBTZXQ8c3RyaW5nPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcmVzZW50ID0gbmV3IFNldCgpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgYW4gKG9iamVjdCwgdmFsdWUpIHBhaXJpbmcgdG8gdGhlIGNvbGxlY3Rpb24uICovXG4gICAgcHVibGljIGFkZChpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXNlbnQuYWRkKGlkKTtcbiAgICB9XG5cbiAgICAvKiogRGVsZXRlIGFuIChvYmplY3QsIHZhbHVlKSBwYWlyaW5nIGZyb20gdGhlIGNvbGxlY3Rpb24uICovXG4gICAgcHVibGljIGRlbGV0ZShpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXNlbnQuZGVsZXRlKGlkKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIGEgc2V0IG9mIGFsbCBwYWdlcyBpbiB3aGljaCB0aGUgZmllbGQgZXhpc3RzIGF0IGFsbCAoZXZlbiBpZiB1bmRlZmluZWQpLiAqL1xuICAgIHB1YmxpYyBhbGwoKTogU2V0PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZW50O1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYWxsIHBhZ2VzIHdpdGggYSB2YWx1ZSBleGFjdGx5IGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZS4gKi9cbiAgICBwdWJsaWMgZXF1YWxzKHZhbHVlOiBMaXRlcmFsKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLyoqIEZpZWxkIGluZGV4IHdoaWNoIHRyYWNrcyBmaWVsZCBsb2NhdGlvbnMgdXNpbmcgYm90aCBhbiBvdmVyYWxsIHNldCBhbmQgYSBCVHJlZSBvZiB2YWx1ZXMuICovXG5leHBvcnQgY2xhc3MgQlRyZWVGaWVsZEluZGV4IGltcGxlbWVudHMgRmllbGRJbmRleCB7XG4gICAgLyoqIFRoZSBJRCBvZiBldmVyeSBvYmplY3QgdGhhdCB0aGlzIGZpZWxkIGlzIHByZXNlbnQgb24uICovXG4gICAgcHJpdmF0ZSBwcmVzZW50OiBTZXQ8c3RyaW5nPjtcbiAgICAvKiogTWFwcyAodmFsdWUsIHNldCBvZiBwYWdlcyBjb250YWluaW5nIHRoYXQgdmFsdWUpLiAqL1xuICAgIHByaXZhdGUgdmFsdWVzOiBCVHJlZTxMaXRlcmFsLCBTZXQ8c3RyaW5nPj47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJlc2VudCA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgQlRyZWUoW10sIChhLCBiKSA9PiBMaXRlcmFscy5jb21wYXJlKGEsIGIpKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIGFuIChvYmplY3QsIHZhbHVlKSBwYWlyaW5nIHRvIHRoZSBjb2xsZWN0aW9uLiAqL1xuICAgIHB1YmxpYyBhZGQoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmVzZW50LmFkZChpZCk7XG5cbiAgICAgICAgdGhpcy52YWx1ZXMuc2V0SWZOb3RQcmVzZW50KHZhbHVlLCBuZXcgU2V0KCkpO1xuICAgICAgICB0aGlzLnZhbHVlcy5nZXQodmFsdWUpIS5hZGQoaWQpO1xuICAgIH1cblxuICAgIC8qKiBEZWxldGUgYW4gKG9iamVjdCwgdmFsdWUpIHBhaXJpbmcgZnJvbSB0aGUgY29sbGVjdGlvbi4gKi9cbiAgICBwdWJsaWMgZGVsZXRlKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJlc2VudC5kZWxldGUoaWQpO1xuXG4gICAgICAgIGNvbnN0IHNldCA9IHRoaXMudmFsdWVzLmdldCh2YWx1ZSk7XG4gICAgICAgIHNldD8uZGVsZXRlKGlkKTtcblxuICAgICAgICBpZiAoc2V0ID09IG51bGwgfHwgc2V0LnNpemUgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBzZXQgb2YgYWxsIHBhZ2VzIGluIHdoaWNoIHRoZSBmaWVsZCBleGlzdHMgYXQgYWxsIChldmVuIGlmIHVuZGVmaW5lZCkuICovXG4gICAgcHVibGljIGFsbCgpOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbnQ7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhbGwgcGFnZXMgd2l0aCBhIHZhbHVlIGV4YWN0bHkgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExpdGVyYWwpOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5nZXQodmFsdWUsIEJUcmVlRmllbGRJbmRleC5FTVBUWV9TRVQpO1xuICAgIH1cblxuICAgIC8qKiBQbGFjZWhvbGRlciBlbXB0eSBzZXQuICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgRU1QVFlfU0VUID0gbmV3IFNldDxzdHJpbmc+KCk7XG59XG4iLCAiLyoqIFByb3ZpZGVzIGEgZ2xvYmFsIGRpc3BhdGNoIHRhYmxlIGZvciBldmFsdWF0aW5nIGJpbmFyeSBvcGVyYXRvcnMsIGluY2x1ZGluZyBjb21wYXJpc29uLiAqL1xuaW1wb3J0IHsgTGl0ZXJhbFJlcHIsIExpdGVyYWxUeXBlLCBMaXRlcmFsLCBMaXRlcmFscywgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUR1cmF0aW9uIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuaW1wb3J0IHsgQmluYXJ5T3AsIEV4cHJlc3Npb25zIH0gZnJvbSBcImV4cHJlc3Npb24vZXhwcmVzc2lvblwiO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0b3IgfSBmcm9tIFwiZXhwcmVzc2lvbi9ldmFsdWF0b3JcIjtcbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgU2V0dGluZ3MgfSBmcm9tIFwic2V0dGluZ3NcIjtcbmltcG9ydCB7IEZpZWxkYmVhcmluZ3MgfSBmcm9tIFwiLi9maWVsZFwiO1xuXG4vKiogQSBsaXRlcmFsIHR5cGUgb3IgYSBjYXRjaC1hbGwgJyonLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFR5cGVPckFsbCA9IExpdGVyYWxUeXBlIHwgXCIqXCI7XG5cbi8qKiBNYXBzIGEgbGl0ZXJhbCB0eXBlIG9yIHRoZSBjYXRjaC1hbGwgJyonLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFJlcHJBbGw8VCBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+ID0gVCBleHRlbmRzIFwiKlwiXG4gICAgPyBMaXRlcmFsXG4gICAgOiBUIGV4dGVuZHMgTGl0ZXJhbFR5cGVcbiAgICA/IExpdGVyYWxSZXByPFQ+XG4gICAgOiBhbnk7XG5cbi8qKiBBbiBpbXBsZW1lbnRhdGlvbiBmb3IgYSBiaW5hcnkgb3BlcmF0b3IuICovXG5leHBvcnQgdHlwZSBCaW5hcnlPcEltcGw8QSBleHRlbmRzIExpdGVyYWwsIEIgZXh0ZW5kcyBMaXRlcmFsPiA9IChmaXJzdDogQSwgc2Vjb25kOiBCLCBjdHg6IEV2YWx1YXRvcikgPT4gTGl0ZXJhbDtcbi8qKiBCaW5hcnkgb3BlcmF0b3Igd2hpY2ggY2FuIGZhaWwgYW5kIHByb2R1Y2UgYW4gZXJyb3IuICovXG5leHBvcnQgdHlwZSBCaW5hcnlPcFJlc3VsdEltcGw8QSBleHRlbmRzIExpdGVyYWwsIEIgZXh0ZW5kcyBMaXRlcmFsPiA9IChcbiAgICBmaXJzdDogQSxcbiAgICBzZWNvbmQ6IEIsXG4gICAgY3R4OiBFdmFsdWF0b3JcbikgPT4gUmVzdWx0PExpdGVyYWwsIHN0cmluZz47XG4vKiogQW4gaW1wbGVtZW50YXRpb24gb2YgYSBjb21wYXJhdG9yIChyZXR1cm5pbmcgYSBudW1iZXIpIHdoaWNoIHRoZW4gYXV0b21hdGljYWxseSBkZWZpbmVzIGFsbCBvZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuICovXG5leHBvcnQgdHlwZSBDb21wYXJlSW1wbDxUIGV4dGVuZHMgTGl0ZXJhbD4gPSAoZmlyc3Q6IFQsIHNlY29uZDogVCwgY3R4OiBFdmFsdWF0b3IpID0+IG51bWJlcjtcblxuLyoqIFByb3ZpZGVzIGltcGxlbWVudGF0aW9ucyBmb3IgYmluYXJ5IG9wZXJhdG9ycyBvbiB0d28gdHlwZXMgdXNpbmcgYSByZWdpc3RyeS4gKi9cbmV4cG9ydCBjbGFzcyBCaW5hcnlPcEhhbmRsZXIge1xuICAgIHByaXZhdGUgbWFwOiBNYXA8c3RyaW5nLCBCaW5hcnlPcFJlc3VsdEltcGw8YW55LCBhbnk+PjtcbiAgICBwcml2YXRlIGhhbmRsZURlZmF1bHROdWxsczogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJpbmFyeU9wSGFuZGxlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRGVmYXVsdE51bGxzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBVIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGxlZnQ6IFQsXG4gICAgICAgIG9wOiBCaW5hcnlPcCxcbiAgICAgICAgcmlnaHQ6IFUsXG4gICAgICAgIGZ1bmM6IEJpbmFyeU9wSW1wbDxMaXRlcmFsUmVwckFsbDxUPiwgTGl0ZXJhbFJlcHJBbGw8VT4+XG4gICAgKTogQmluYXJ5T3BIYW5kbGVyIHtcbiAgICAgICAgdGhpcy5tYXAuc2V0KEJpbmFyeU9wSGFuZGxlci5yZXByKG9wLCBsZWZ0LCByaWdodCksIChhLCBiLCBjKSA9PiBSZXN1bHQuc3VjY2VzcyhmdW5jKGEsIGIsIGMpKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclJlc3VsdDxUIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbCwgVSBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+KFxuICAgICAgICBsZWZ0OiBULFxuICAgICAgICBvcDogQmluYXJ5T3AsXG4gICAgICAgIHJpZ2h0OiBVLFxuICAgICAgICBmdW5jOiBCaW5hcnlPcFJlc3VsdEltcGw8TGl0ZXJhbFJlcHJBbGw8VD4sIExpdGVyYWxSZXByQWxsPFU+PlxuICAgICk6IEJpbmFyeU9wSGFuZGxlciB7XG4gICAgICAgIHRoaXMubWFwLnNldChCaW5hcnlPcEhhbmRsZXIucmVwcihvcCwgbGVmdCwgcmlnaHQpLCBmdW5jKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyQ29tbTxUIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbCwgVSBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+KFxuICAgICAgICBsZWZ0OiBULFxuICAgICAgICBvcDogQmluYXJ5T3AsXG4gICAgICAgIHJpZ2h0OiBVLFxuICAgICAgICBmdW5jOiBCaW5hcnlPcEltcGw8TGl0ZXJhbFJlcHJBbGw8VD4sIExpdGVyYWxSZXByQWxsPFU+PlxuICAgICk6IEJpbmFyeU9wSGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyKGxlZnQsIG9wLCByaWdodCwgZnVuYykucmVnaXN0ZXIocmlnaHQsIG9wLCBsZWZ0LCAoYSwgYiwgY3R4KSA9PiBmdW5jKGIsIGEsIGN0eCkpO1xuICAgIH1cblxuICAgIC8qKiBJZiBlbmFibGVkLCBhbGwgbnVsbCAob3ApIG51bGwgb3BlcmF0aW9ucyBwcm9kdWNlIG51bGwuICovXG4gICAgcHVibGljIHdpdGhEZWZhdWx0TnVsbEhhbmRsaW5nKCk6IEJpbmFyeU9wSGFuZGxlciB7XG4gICAgICAgIHRoaXMuaGFuZGxlRGVmYXVsdE51bGxzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqIEltcGxlbWVudCBhIGNvbXBhcmlzb24gZnVuY3Rpb24uICovXG4gICAgcHVibGljIGNvbXBhcmU8VCBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+KHR5cGU6IFQsIGNvbXBhcmU6IENvbXBhcmVJbXBsPExpdGVyYWxSZXByQWxsPFQ+Pik6IEJpbmFyeU9wSGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyKHR5cGUsIFwiPFwiLCB0eXBlLCAoYSwgYiwgY3R4KSA9PiBjb21wYXJlKGEsIGIsIGN0eCkgPCAwKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKHR5cGUsIFwiPD1cIiwgdHlwZSwgKGEsIGIsIGN0eCkgPT4gY29tcGFyZShhLCBiLCBjdHgpIDw9IDApXG4gICAgICAgICAgICAucmVnaXN0ZXIodHlwZSwgXCI+XCIsIHR5cGUsIChhLCBiLCBjdHgpID0+IGNvbXBhcmUoYSwgYiwgY3R4KSA+IDApXG4gICAgICAgICAgICAucmVnaXN0ZXIodHlwZSwgXCI+PVwiLCB0eXBlLCAoYSwgYiwgY3R4KSA9PiBjb21wYXJlKGEsIGIsIGN0eCkgPj0gMClcbiAgICAgICAgICAgIC5yZWdpc3Rlcih0eXBlLCBcIj1cIiwgdHlwZSwgKGEsIGIsIGN0eCkgPT4gY29tcGFyZShhLCBiLCBjdHgpID09IDApXG4gICAgICAgICAgICAucmVnaXN0ZXIodHlwZSwgXCIhPVwiLCB0eXBlLCAoYSwgYiwgY3R4KSA9PiBjb21wYXJlKGEsIGIsIGN0eCkgIT0gMCk7XG4gICAgfVxuXG4gICAgLyoqIEF0dGVtcHQgdG8gZXZhbHVhdGUgdGhlIGdpdmVuIGJpbmFyeSBvcGVyYXRvciBvbiB0aGUgdHdvIGxpdGVyYWwgZmllbGRzLiAqL1xuICAgIHB1YmxpYyBldmFsdWF0ZShvcDogQmluYXJ5T3AsIGxlZnQ6IExpdGVyYWwsIHJpZ2h0OiBMaXRlcmFsLCBjdHg6IEV2YWx1YXRvcik6IFJlc3VsdDxMaXRlcmFsLCBzdHJpbmc+IHtcbiAgICAgICAgbGV0IGxlZnRUeXBlID0gTGl0ZXJhbHMudHlwZU9mKGxlZnQpO1xuICAgICAgICBsZXQgcmlnaHRUeXBlID0gTGl0ZXJhbHMudHlwZU9mKHJpZ2h0KTtcbiAgICAgICAgaWYgKCFsZWZ0VHlwZSkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBVbnJlY29nbml6ZWQgdmFsdWUgJyR7bGVmdH0nYCk7XG4gICAgICAgIGVsc2UgaWYgKCFyaWdodFR5cGUpIHJldHVybiBSZXN1bHQuZmFpbHVyZShgVW5yZWNvZ25pemVkIHZhbHVlICcke3JpZ2h0fSdgKTtcblxuICAgICAgICAvLyBRdWljayBjYXNlOiBoYW5kbGUgbnVsbCAob3ApIG51bGwgYnkgZGVmYXVsdCBpZiBlbmFibGVkLlxuICAgICAgICBpZiAodGhpcy5oYW5kbGVEZWZhdWx0TnVsbHMgJiYgbGVmdFR5cGUgPT09IFwibnVsbFwiICYmIHJpZ2h0VHlwZSA9PT0gXCJudWxsXCIpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsKTtcblxuICAgICAgICBsZXQgaGFuZGxlciA9IHRoaXMubWFwLmdldChCaW5hcnlPcEhhbmRsZXIucmVwcihvcCwgbGVmdFR5cGUsIHJpZ2h0VHlwZSkpO1xuICAgICAgICBpZiAoaGFuZGxlcikgcmV0dXJuIGhhbmRsZXIobGVmdCwgcmlnaHQsIGN0eCk7XG5cbiAgICAgICAgLy8gUmlnaHQtJyonIGZhbGxiYWNrOlxuICAgICAgICBsZXQgaGFuZGxlcjIgPSB0aGlzLm1hcC5nZXQoQmluYXJ5T3BIYW5kbGVyLnJlcHIob3AsIGxlZnRUeXBlLCBcIipcIikpO1xuICAgICAgICBpZiAoaGFuZGxlcjIpIHJldHVybiBoYW5kbGVyMihsZWZ0LCByaWdodCwgY3R4KTtcblxuICAgICAgICAvLyBMZWZ0LScqJyBmYWxsYmFjazpcbiAgICAgICAgbGV0IGhhbmRsZXIzID0gdGhpcy5tYXAuZ2V0KEJpbmFyeU9wSGFuZGxlci5yZXByKG9wLCBcIipcIiwgcmlnaHRUeXBlKSk7XG4gICAgICAgIGlmIChoYW5kbGVyMykgcmV0dXJuIGhhbmRsZXIzKGxlZnQsIHJpZ2h0LCBjdHgpO1xuXG4gICAgICAgIC8vIERvdWJsZSAnKicgZmFsbGJhY2suXG4gICAgICAgIGxldCBoYW5kbGVyNCA9IHRoaXMubWFwLmdldChCaW5hcnlPcEhhbmRsZXIucmVwcihvcCwgXCIqXCIsIFwiKlwiKSk7XG4gICAgICAgIGlmIChoYW5kbGVyNCkgcmV0dXJuIGhhbmRsZXI0KGxlZnQsIHJpZ2h0LCBjdHgpO1xuXG4gICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgTm8gaW1wbGVtZW50YXRpb24gZm91bmQgZm9yICcke2xlZnRUeXBlfSAke29wfSAke3JpZ2h0VHlwZX0nYCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gdHJpcGxldCBmb3IgdW5pcXVlIGxvb2t1cCBpbiB0aGUgbWFwLiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVwcihvcDogQmluYXJ5T3AsIGxlZnQ6IExpdGVyYWxUeXBlT3JBbGwsIHJpZ2h0OiBMaXRlcmFsVHlwZU9yQWxsKSB7XG4gICAgICAgIHJldHVybiBgJHtsZWZ0fSwke29wfSwke3JpZ2h0fWA7XG4gICAgfVxufVxuXG4vKiogQ29uZmlndXJlIGFuZCBjcmVhdGUgYSBiaW5hcnkgT1AgaGFuZGxlciB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJpbmFyeU9wcyhsaW5rTm9ybWFsaXplcjogKHg6IHN0cmluZykgPT4gc3RyaW5nKTogQmluYXJ5T3BIYW5kbGVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBCaW5hcnlPcEhhbmRsZXIuY3JlYXRlKClcbiAgICAgICAgICAgIC5jb21wYXJlKFwiKlwiLCAoYSwgYikgPT4gTGl0ZXJhbHMuY29tcGFyZShhLCBiLCBsaW5rTm9ybWFsaXplcikpXG4gICAgICAgICAgICAvLyBHbG9iYWwgYm9vbGVhbiBvcGVyYXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiKlwiLCBcIiZcIiwgXCIqXCIsIChhLCBiKSA9PiBMaXRlcmFscy5pc1RydXRoeShhKSAmJiBMaXRlcmFscy5pc1RydXRoeShiKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIipcIiwgXCJ8XCIsIFwiKlwiLCAoYSwgYikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkoYSkgfHwgTGl0ZXJhbHMuaXNUcnV0aHkoYikpXG4gICAgICAgICAgICAvLyBOdW1iZXIgaW1wbGVtZW50YXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwibnVtYmVyXCIsIFwiK1wiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gYSArIGIpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJudW1iZXJcIiwgXCItXCIsIFwibnVtYmVyXCIsIChhLCBiKSA9PiBhIC0gYilcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIm51bWJlclwiLCBcIipcIiwgXCJudW1iZXJcIiwgKGEsIGIpID0+IGEgKiBiKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwibnVtYmVyXCIsIFwiL1wiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gYSAvIGIpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJudW1iZXJcIiwgXCIlXCIsIFwibnVtYmVyXCIsIChhLCBiKSA9PiBhICUgYilcbiAgICAgICAgICAgIC8vIFN0cmluZyBpbXBsZW1lbnRhdGlvbnMuXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJzdHJpbmdcIiwgXCIrXCIsIFwiKlwiLCAoYSwgYiwgY3R4KSA9PiBhICsgTGl0ZXJhbHMudG9TdHJpbmcoYiwgc3RyaW5nU2V0dGluZ3MoY3R4LnNldHRpbmdzKSkpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCIqXCIsIFwiK1wiLCBcInN0cmluZ1wiLCAoYSwgYiwgY3R4KSA9PiBMaXRlcmFscy50b1N0cmluZyhhLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSArIGIpXG4gICAgICAgICAgICAucmVnaXN0ZXJDb21tKFwic3RyaW5nXCIsIFwiKlwiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gKGIgPCAwID8gXCJcIiA6IGEucmVwZWF0KGIpKSlcbiAgICAgICAgICAgIC8vIERhdGUgT3BlcmF0aW9ucy5cbiAgICAgICAgICAgIC5yZWdpc3RlcihcImRhdGVcIiwgXCItXCIsIFwiZGF0ZVwiLCAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVEdXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgYS5kaWZmKGIsIFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiLCBcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIiwgXCJtaWxsaXNlY29uZHNcIl0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJkYXRlXCIsIFwiLVwiLCBcImR1cmF0aW9uXCIsIChhLCBiKSA9PiBhLm1pbnVzKGIpKVxuICAgICAgICAgICAgLnJlZ2lzdGVyQ29tbShcImRhdGVcIiwgXCIrXCIsIFwiZHVyYXRpb25cIiwgKGEsIGIpID0+IGEucGx1cyhiKSlcbiAgICAgICAgICAgIC8vIER1cmF0aW9uIE9wZXJhdGlvbnMuXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJkdXJhdGlvblwiLCBcIitcIiwgXCJkdXJhdGlvblwiLCAoYSwgYikgPT4gbm9ybWFsaXplRHVyYXRpb24oYS5wbHVzKGIpKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcImR1cmF0aW9uXCIsIFwiLVwiLCBcImR1cmF0aW9uXCIsIChhLCBiKSA9PiBub3JtYWxpemVEdXJhdGlvbihhLm1pbnVzKGIpKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcImR1cmF0aW9uXCIsIFwiL1wiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gbm9ybWFsaXplRHVyYXRpb24oYS5tYXBVbml0cygoeCkgPT4geCAvIGIpKSlcbiAgICAgICAgICAgIC5yZWdpc3RlckNvbW0oXCJkdXJhdGlvblwiLCBcIipcIiwgXCJudW1iZXJcIiwgKGEsIGIpID0+IG5vcm1hbGl6ZUR1cmF0aW9uKGEubWFwVW5pdHMoKHgpID0+IHggKiBiKSkpXG4gICAgICAgICAgICAvLyBBcnJheSBvcGVyYXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiYXJyYXlcIiwgXCIrXCIsIFwiYXJyYXlcIiwgKGEsIGIpID0+IChbXSBhcyBMaXRlcmFsW10pLmNvbmNhdChhKS5jb25jYXQoYikpXG4gICAgICAgICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucy5cbiAgICAgICAgICAgIC5yZWdpc3RlcihcIm9iamVjdFwiLCBcIitcIiwgXCJvYmplY3RcIiwgKGEsIGIpID0+IE9iamVjdC5hc3NpZ24oe30sIGEsIGIpKVxuICAgICAgICAgICAgLy8gSW5kZXggb3BlcmF0aW9ucy5cbiAgICAgICAgICAgIC5yZWdpc3RlcihcImFycmF5XCIsIFwiaW5kZXhcIiwgXCJudW1iZXJcIiwgKGFyciwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IGFyci5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJbaWR4XTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVnaXN0ZXJSZXN1bHQoXCJhcnJheVwiLCBcImluZGV4XCIsIFwic3RyaW5nXCIsIChhcnIsIGtleSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHJldHVybiBSZXN1bHQuc3VjY2VzcyhbXSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gY29udGV4dC5ldmFsdWF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLmluZGV4KEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbWVudCksIEV4cHJlc3Npb25zLmxpdGVyYWwoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZC5zdWNjZXNzZnVsKSByZXR1cm4gUmVzdWx0LmZhaWx1cmUocmVzb2x2ZWQuZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc29sdmVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJvYmplY3RcIiwgXCJpbmRleFwiLCBcInN0cmluZ1wiLCAob2JqLCBrZXkpID0+IEZpZWxkYmVhcmluZ3MuZ2V0KG9iaiwga2V5KSA/PyBudWxsKVxuICAgICAgICAgICAgLnJlZ2lzdGVyUmVzdWx0KFwibGlua1wiLCBcImluZGV4XCIsIFwic3RyaW5nXCIsIGluZGV4TGluaylcbiAgICAgICAgICAgIC5yZWdpc3RlclJlc3VsdChcImxpbmtcIiwgXCJpbmRleFwiLCBcIm51bWJlclwiLCBpbmRleExpbmspXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJvYmplY3RcIiwgXCJpbmRleFwiLCBcIm51bWJlclwiLCAob2JqLCBrZXkpID0+IG9ialtrZXldID8/IG51bGwpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJzdHJpbmdcIiwgXCJpbmRleFwiLCBcIm51bWJlclwiLCAoc3RyLCBpZHgpID0+IChpZHggPCAwIHx8IGlkeCA+PSBzdHIubGVuZ3RoID8gbnVsbCA6IHN0cltpZHhdKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcImRhdGVcIiwgXCJpbmRleFwiLCBcInN0cmluZ1wiLCBpbmRleERhdGUpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJkdXJhdGlvblwiLCBcImluZGV4XCIsIFwic3RyaW5nXCIsIGluZGV4RHVyYXRpb24pXG4gICAgICAgICAgICAud2l0aERlZmF1bHROdWxsSGFuZGxpbmcoKVxuICAgICk7XG59XG5cbi8qKiBDb252ZXJ0IGhpZ2ggbGV2ZWwgc2V0dGluZ3MgdG8gc2V0dGluZ3MgdXNlZCBmb3Igc3RyaW5nIHJlbmRlcmluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdTZXR0aW5ncyhzZXR0aW5nczogU2V0dGluZ3MpOiBMaXRlcmFscy5Ub1N0cmluZ1NldHRpbmdzIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkYXRlRm9ybWF0OiBzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCxcbiAgICAgICAgZGF0ZVRpbWVGb3JtYXQ6IHNldHRpbmdzLmRlZmF1bHREYXRlVGltZUZvcm1hdCxcbiAgICAgICAgbnVsbFJlcHJlc2VudGF0aW9uOiBzZXR0aW5ncy5yZW5kZXJOdWxsQXMsXG4gICAgfTtcbn1cblxuLyoqIEFsbG93cyB5b3UgdG8gaW5kZXggaW50byBsaW5rcyB0byBnZXQgbWV0YWRhdGEuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhMaW5rKGxpbms6IExpbmssIGtleTogc3RyaW5nIHwgbnVtYmVyLCBjb250ZXh0OiBFdmFsdWF0b3IpOiBSZXN1bHQ8TGl0ZXJhbCwgc3RyaW5nPiB7XG4gICAgY29uc3Qgb2JqZWN0ID0gY29udGV4dC5saW5rSGFuZGxlci5yZXNvbHZlKGxpbmspO1xuICAgIGlmICghb2JqZWN0KSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobnVsbCk7XG5cbiAgICByZXR1cm4gY29udGV4dC5ldmFsdWF0ZShFeHByZXNzaW9ucy5pbmRleChFeHByZXNzaW9ucy5saXRlcmFsKG9iamVjdCksIEV4cHJlc3Npb25zLmxpdGVyYWwoa2V5KSkpO1xufVxuXG4vKiogSW5kZXggaW50byBhIGRhdGUsIHByb2R1Y2luZyB2YXJpb3VzIHVzZWZ1bCBmaWVsZHMuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhEYXRlKGRhdGU6IERhdGVUaW1lLCBrZXk6IHN0cmluZykge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJ5ZWFyXCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS55ZWFyO1xuICAgICAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLm1vbnRoO1xuICAgICAgICBjYXNlIFwiZGF5XCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5kYXk7XG4gICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5ob3VyO1xuICAgICAgICBjYXNlIFwibWludXRlXCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5taW51dGU7XG4gICAgICAgIGNhc2UgXCJzZWNvbmRcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnNlY29uZDtcbiAgICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kXCI6XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5taWxsaXNlY29uZDtcbiAgICAgICAgY2FzZSBcIndlZWtcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLndlZWtOdW1iZXI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbi8qKiBJbmRleCBpbnRvIGEgZHVyYXRpb24sIHByb2R1Y2luZyB2YXJpb3VzIHVzZWZ1bCBmaWVsZHMuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhEdXJhdGlvbihkdXI6IER1cmF0aW9uLCBrZXk6IHN0cmluZykge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJ5ZWFyc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci55ZWFycztcbiAgICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci5tb250aHM7XG4gICAgICAgIGNhc2UgXCJkYXlzXCI6XG4gICAgICAgICAgICByZXR1cm4gZHVyLmRheXM7XG4gICAgICAgIGNhc2UgXCJob3Vyc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci5ob3VycztcbiAgICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgICAgIHJldHVybiBkdXIubWludXRlcztcbiAgICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgICAgIHJldHVybiBkdXIuc2Vjb25kcztcbiAgICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci5taWxsaXNlY29uZHM7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiLyoqIERlZmF1bHQgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIGZvciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0b3IuICovXG5cbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgeyBMaXRlcmFsVHlwZSwgTGluaywgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBlc2NhcGVSZWdleCwgY3VycmVudExvY2FsZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgTGl0ZXJhbFJlcHJBbGwsIExpdGVyYWxUeXBlT3JBbGwsIHN0cmluZ1NldHRpbmdzIH0gZnJvbSBcImV4cHJlc3Npb24vYmluYXJ5b3BcIjtcbmltcG9ydCB7IEV2YWx1YXRvciB9IGZyb20gXCJleHByZXNzaW9uL2V2YWx1YXRvclwiO1xuaW1wb3J0IHsgRXhwcmVzc2lvbnMgfSBmcm9tIFwiZXhwcmVzc2lvbi9leHByZXNzaW9uXCI7XG5pbXBvcnQgeyBQUklNSVRJVkVTIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5cbi8qKlxuICogQSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiB3aGljaCB0YWtlcyBpbiBhIGZ1bmN0aW9uIGNvbnRleHQgYW5kIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gVGhyb3dzIGFuIGVycm9yIGlmIGFuXG4gKiBpbnZhbGlkIG51bWJlci90eXBlIG9mIGFyZ3VtZW50cyBhcmUgcGFzc2VkLlxuICovXG5leHBvcnQgdHlwZSBGdW5jdGlvbkltcGwgPSAoY29udGV4dDogRXZhbHVhdG9yLCAuLi5yZXN0OiBMaXRlcmFsW10pID0+IExpdGVyYWw7XG4vKiogQSBcImJvdW5kXCIgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gd2hpY2ggaGFzIGFscmVhZHkgaGFkIGEgZnVuY3Rpb24gY29udGV4dCBwYXNzZWQgdG8gaXQuICovXG5leHBvcnQgdHlwZSBCb3VuZEZ1bmN0aW9uSW1wbCA9ICguLi5hcmdzOiBMaXRlcmFsW10pID0+IExpdGVyYWw7XG5cbi8qKiBBIGZ1bmN0aW9uIHZhcmlhbnQgdXNlZCBpbiB0aGUgZnVuY3Rpb24gYnVpbGRlciB3aGljaCBob2xkcyB0aGUgYXJndW1lbnQgdHlwZXMuICovXG5pbnRlcmZhY2UgRnVuY3Rpb25WYXJpYW50IHtcbiAgICBhcmdzOiBMaXRlcmFsVHlwZU9yQWxsW107XG4gICAgdmFyYXJnczogYm9vbGVhbjtcbiAgICAvKiogVGhlIGltcGxlbWVudGluZyBmdW5jdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyB2YXJpYW50LiAqL1xuICAgIGltcGw6IEZ1bmN0aW9uSW1wbDtcbn1cblxuLyoqXG4gKiBBbGxvd3MgZm9yIHRoZSBjcmVhdGlvbiBvZiBmdW5jdGlvbnMgdGhhdCBjaGVjayB0aGUgbnVtYmVyIGFuZCB0eXBlIG9mIHRoZWlyIGFyZ3VtZW50cywgYW5kIGRpc3BhdGNoXG4gKiB0byBkaWZmZXJlbnQgaW1wbGVtZW5hdGlvbnMgYmFzZWQgb24gdGhlIHR5cGVzIG9mIHRoZSBpbnB1dHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkJ1aWxkZXIge1xuICAgIHZhcmlhbnRzOiBGdW5jdGlvblZhcmlhbnRbXTtcbiAgICB2ZWN0b3JpemVkOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXJbXT47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnZhcmlhbnRzID0gW107XG4gICAgICAgIHRoaXMudmVjdG9yaXplZCA9IHt9O1xuICAgIH1cblxuICAgIC8qKiBBZGQgYSBnZW5lcmFsIGZ1bmN0aW9uIHZhcmlhbnQgd2hpY2ggYWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBvZiBhbnkgdHlwZS4gKi9cbiAgICBwdWJsaWMgdmFyYXJnKGltcGw6IEZ1bmN0aW9uSW1wbCk6IEZ1bmN0aW9uQnVpbGRlciB7XG4gICAgICAgIHRoaXMudmFyaWFudHMucHVzaCh7IGFyZ3M6IFtdLCB2YXJhcmdzOiB0cnVlLCBpbXBsIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogQWRkIGEgZnVuY3Rpb24gdmFyaWFudCB3aGljaCB0YWtlcyBpbiBhIHNpbmdsZSBhcmd1bWVudC4gKi9cbiAgICBwdWJsaWMgYWRkMTxUIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGFyZ1R5cGU6IFQsXG4gICAgICAgIGltcGw6IChhOiBMaXRlcmFsUmVwckFsbDxUPiwgY29udGV4dDogRXZhbHVhdG9yKSA9PiBMaXRlcmFsXG4gICAgKTogRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAgICAgdGhpcy52YXJpYW50cy5wdXNoKHtcbiAgICAgICAgICAgIGFyZ3M6IFthcmdUeXBlXSxcbiAgICAgICAgICAgIHZhcmFyZ3M6IGZhbHNlLFxuICAgICAgICAgICAgaW1wbDogKGMsIC4uLnJlc3QpID0+IGltcGwocmVzdFswXSBhcyBMaXRlcmFsUmVwckFsbDxUPiwgYyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogQWRkIGEgZnVuY3Rpb24gdmFyaWFudCB3aGljaCB0YWtlcyBpbiB0d28gdHlwZWQgYXJndW1lbnRzLiAqL1xuICAgIHB1YmxpYyBhZGQyPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBVIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGFyZzE6IFQsXG4gICAgICAgIGFyZzI6IFUsXG4gICAgICAgIGltcGw6IChhOiBMaXRlcmFsUmVwckFsbDxUPiwgYjogTGl0ZXJhbFJlcHJBbGw8VT4sIGNvbnRleHQ6IEV2YWx1YXRvcikgPT4gTGl0ZXJhbFxuICAgICk6IEZ1bmN0aW9uQnVpbGRlciB7XG4gICAgICAgIHRoaXMudmFyaWFudHMucHVzaCh7XG4gICAgICAgICAgICBhcmdzOiBbYXJnMSwgYXJnMl0sXG4gICAgICAgICAgICB2YXJhcmdzOiBmYWxzZSxcbiAgICAgICAgICAgIGltcGw6IChjLCAuLi5yZXN0KSA9PiBpbXBsKHJlc3RbMF0gYXMgTGl0ZXJhbFJlcHJBbGw8VD4sIHJlc3RbMV0gYXMgTGl0ZXJhbFJlcHJBbGw8VT4sIGMpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBhIGZ1bmN0aW9uIHZhcmlhbnQgd2hpY2ggdGFrZXMgaW4gdGhyZWUgdHlwZWQgYXJndW1lbnRzLiAqL1xuICAgIHB1YmxpYyBhZGQzPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBVIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbCwgViBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGw+KFxuICAgICAgICBhcmcxOiBULFxuICAgICAgICBhcmcyOiBVLFxuICAgICAgICBhcmczOiBWLFxuICAgICAgICBpbXBsOiAoYTogTGl0ZXJhbFJlcHJBbGw8VD4sIGI6IExpdGVyYWxSZXByQWxsPFU+LCBjOiBMaXRlcmFsUmVwckFsbDxWPiwgY29udGV4dDogRXZhbHVhdG9yKSA9PiBMaXRlcmFsXG4gICAgKTogRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAgICAgdGhpcy52YXJpYW50cy5wdXNoKHtcbiAgICAgICAgICAgIGFyZ3M6IFthcmcxLCBhcmcyLCBhcmczXSxcbiAgICAgICAgICAgIHZhcmFyZ3M6IGZhbHNlLFxuICAgICAgICAgICAgaW1wbDogKGMsIC4uLnJlc3QpID0+XG4gICAgICAgICAgICAgICAgaW1wbChyZXN0WzBdIGFzIExpdGVyYWxSZXByQWxsPFQ+LCByZXN0WzFdIGFzIExpdGVyYWxSZXByQWxsPFU+LCByZXN0WzJdIGFzIExpdGVyYWxSZXByQWxsPFY+LCBjKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKiBBZGQgdmVjdG9yaXplZCB2YXJpYW50cyB3aGljaCBhY2NlcHQgdGhlIGdpdmVuIG51bWJlciBvZiBhcmd1bWVudHMgYW5kIGRlbGVnYXRlLiAqL1xuICAgIHB1YmxpYyB2ZWN0b3JpemUobnVtQXJnczogbnVtYmVyLCBwb3NpdGlvbnM6IG51bWJlcltdKTogRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAgICAgdGhpcy52ZWN0b3JpemVkW251bUFyZ3NdID0gcG9zaXRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIGEgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIHRoZSBudW1iZXIgYW5kIHR5cGUgb2YgYXJndW1lbnRzLCBwYXNzaW5nIHRoZW0gb24gdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHZhcmlhbnQuICovXG4gICAgcHVibGljIGJ1aWxkKCk6IEZ1bmN0aW9uSW1wbCB7XG4gICAgICAgIGxldCBzZWxmOiBGdW5jdGlvbkltcGwgPSAoY29udGV4dDogRXZhbHVhdG9yLCAuLi5hcmdzOiBMaXRlcmFsW10pID0+IHtcbiAgICAgICAgICAgIGxldCB0eXBlczogTGl0ZXJhbFR5cGVbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnVHlwZSA9IExpdGVyYWxzLnR5cGVPZihhcmcpO1xuICAgICAgICAgICAgICAgIGlmICghYXJnVHlwZSkgdGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCBhcmd1bWVudCB0eXBlIGZvciBhcmd1bWVudCAnJHthcmd9J2ApO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goYXJnVHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSB2ZWN0b3JpemF0aW9uLCBwb3NzaWJseSBpbiBtdWx0aXBsZSBmaWVsZHMuXG4gICAgICAgICAgICBpZiAodGhpcy52ZWN0b3JpemVkW3R5cGVzLmxlbmd0aF0pIHtcbiAgICAgICAgICAgICAgICBsZXQgdmVjdG9yaXplZFBvc2l0aW9ucyA9IHRoaXMudmVjdG9yaXplZFt0eXBlcy5sZW5ndGhdLmZpbHRlcigoaykgPT4gdHlwZXNba10gPT0gXCJhcnJheVwiKTtcbiAgICAgICAgICAgICAgICBpZiAodmVjdG9yaXplZFBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtaW5MZW5ndGggPSB2ZWN0b3JpemVkUG9zaXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChwKSA9PiAoYXJnc1twXSBhcyBhbnlbXSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gTWF0aC5taW4ocCwgYykpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGwgdGhlIHN1YmZ1bmN0aW9uIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIGxvbmdlc3QgYXJyYXkuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHlvdSBjYWxsIGEgdmVjdG9yaXplZCBmdW5jdGlvbiB3aXRoIGRpZmZlcmVudC1sZW5ndGggYXJyYXlzLFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3V0cHV0IGlzIGxpbWl0ZWQgYnkgdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlc3QgYXJyYXkuXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdnBvcyA9IDA7IHZwb3MgPCBtaW5MZW5ndGg7IHZwb3MrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YmFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZWN0b3JpemVkUG9zaXRpb25zLmluY2x1ZGVzKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gYXJnc1tpbmRleF0gYXMgYW55W107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFyZ3MucHVzaChhcnJbdnBvc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFyZ3MucHVzaChhcmdzW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzZWxmKGNvbnRleHQsIC4uLnN1YmFyZ3MpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRlcjogZm9yIChsZXQgdmFyaWFudCBvZiB0aGlzLnZhcmlhbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQudmFyYXJncykgcmV0dXJuIHZhcmlhbnQuaW1wbChjb250ZXh0LCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hcmdzLmxlbmd0aCAhPSB0eXBlcy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZhcmlhbnQuYXJncy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYXJnc1tpbmRleF0gIT0gXCIqXCIgJiYgdmFyaWFudC5hcmdzW2luZGV4XSAhPSB0eXBlc1tpbmRleF0pIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50LmltcGwoY29udGV4dCwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBpbXBsZW1lbnRhdGlvbiBvZiAnJHt0aGlzLm5hbWV9JyBmb3VuZCBmb3IgYXJndW1lbnRzOiAke3R5cGVzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG59XG5cbi8qKiBVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgRnVuY3Rpb25zIHtcbiAgICAvKiogQmluZCBhIGNvbnRleHQgdG8gYSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiwgeWllbGRpbmcgYSBmdW5jdGlvbiB3aGljaCBkb2VzIG5vdCBuZWVkIHRoZSBjb250ZXh0IGFyZ3VtZW50LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBiaW5kKGZ1bmM6IEZ1bmN0aW9uSW1wbCwgY29udGV4dDogRXZhbHVhdG9yKTogQm91bmRGdW5jdGlvbkltcGwge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3M6IExpdGVyYWxbXSkgPT4gZnVuYyhjb250ZXh0LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICAvKiogQmluZCBhIGNvbnRleHQgdG8gYWxsIGZ1bmN0aW9ucyBpbiB0aGUgZ2l2ZW4gbWFwLCB5aWVsZGluZyBhIG5ldyBtYXAgb2YgYm91bmQgZnVuY3Rpb25zLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBiaW5kQWxsKFxuICAgICAgICBmdW5jczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb25JbXBsPixcbiAgICAgICAgY29udGV4dDogRXZhbHVhdG9yXG4gICAgKTogUmVjb3JkPHN0cmluZywgQm91bmRGdW5jdGlvbkltcGw+IHtcbiAgICAgICAgbGV0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgQm91bmRGdW5jdGlvbkltcGw+ID0ge307XG4gICAgICAgIGZvciAobGV0IFtrZXksIGZ1bmNdIG9mIE9iamVjdC5lbnRyaWVzKGZ1bmNzKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBGdW5jdGlvbnMuYmluZChmdW5jLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vKipcbiAqIENvbGxlY3Rpb24gb2YgYWxsIGRlZmluZWQgZnVuY3Rpb25zOyBkZWZpbmVkIGhlcmUgc28gdGhhdCB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZGF0YXZpZXcsXG4gKiBhbmQgdGVzdCBjb2RlLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIERlZmF1bHRGdW5jdGlvbnMge1xuICAgIGV4cG9ydCBjb25zdCB0eXBlT2YgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwidHlwZVwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChfKSA9PiBcImFycmF5XCIpXG4gICAgICAgIC5hZGQxKFwiYm9vbGVhblwiLCAoXykgPT4gXCJib29sZWFuXCIpXG4gICAgICAgIC5hZGQxKFwiZGF0ZVwiLCAoXykgPT4gXCJkYXRlXCIpXG4gICAgICAgIC5hZGQxKFwiZHVyYXRpb25cIiwgKF8pID0+IFwiZHVyYXRpb25cIilcbiAgICAgICAgLmFkZDEoXCJmdW5jdGlvblwiLCAoXykgPT4gXCJmdW5jdGlvblwiKVxuICAgICAgICAuYWRkMShcImxpbmtcIiwgKF8pID0+IFwibGlua1wiKVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKF8pID0+IFwibnVsbFwiKVxuICAgICAgICAuYWRkMShcIm51bWJlclwiLCAoXykgPT4gXCJudW1iZXJcIilcbiAgICAgICAgLmFkZDEoXCJvYmplY3RcIiwgKF8pID0+IFwib2JqZWN0XCIpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChfKSA9PiBcInN0cmluZ1wiKVxuICAgICAgICAuYWRkMShcIipcIiwgKF8pID0+IFwidW5rbm93blwiKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBDb21wdXRlIHRoZSBsZW5ndGggb2YgYSBkYXRhIHR5cGUuICovXG4gICAgZXhwb3J0IGNvbnN0IGxlbmd0aCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJsZW5ndGhcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYSkgPT4gYS5sZW5ndGgpXG4gICAgICAgIC5hZGQxKFwib2JqZWN0XCIsIChhKSA9PiBPYmplY3Qua2V5cyhhKS5sZW5ndGgpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChhKSA9PiBhLmxlbmd0aClcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsIChfYSkgPT4gMClcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKiogTGlzdCBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgY29uc3QgbGlzdDogRnVuY3Rpb25JbXBsID0gKF9jb250ZXh0LCAuLi5hcmdzKSA9PiBhcmdzO1xuXG4gICAgLyoqIE9iamVjdCBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgY29uc3Qgb2JqZWN0OiBGdW5jdGlvbkltcGwgPSAoX2NvbnRleHQsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICUgMiAhPSAwKSB0aHJvdyBFcnJvcihcIm9iamVjdCgpIHJlcXVpcmVzIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50c1wiKTtcbiAgICAgICAgbGV0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgTGl0ZXJhbD4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gYXJnc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoIUxpdGVyYWxzLmlzU3RyaW5nKGtleSkpIHRocm93IEVycm9yKFwia2V5cyBzaG91bGQgYmUgb2YgdHlwZSBzdHJpbmcgZm9yIG9iamVjdChrZXkxLCB2YWx1ZTEsIC4uLilcIik7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IGFyZ3NbaW5kZXggKyAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8qKiBJbnRlcm5hbCBsaW5rIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBjb25zdCBsaW5rOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibGlua1wiKVxuICAgICAgICAuYWRkMShcInN0cmluZ1wiLCAoYSwgYykgPT4gTGluay5maWxlKGMubGlua0hhbmRsZXIubm9ybWFsaXplKGEpLCBmYWxzZSkpXG4gICAgICAgIC5hZGQxKFwibGlua1wiLCAoYSkgPT4gYSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsIChfYSkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsICh0LCBkLCBjKSA9PiBMaW5rLmZpbGUoYy5saW5rSGFuZGxlci5ub3JtYWxpemUodCksIGZhbHNlLCBkKSlcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsICh0LCBkLCBlLCBjKSA9PiBMaW5rLmZpbGUoYy5saW5rSGFuZGxlci5ub3JtYWxpemUodCksIGUsIGQpKVxuICAgICAgICAuYWRkMihcImxpbmtcIiwgXCJzdHJpbmdcIiwgKHQsIGQpID0+IHQud2l0aERpc3BsYXkoZCkpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAodCwgX24sIGMpID0+IGxpbmsoYywgdCkpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBFbWJlZCBhbmQgdW4tZW1iZWQgYSBsaW5rLiAqL1xuICAgIGV4cG9ydCBjb25zdCBlbWJlZDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImVtYmVkXCIpXG4gICAgICAgIC5hZGQxKFwibGlua1wiLCAobCkgPT4gbC50b0VtYmVkKCkpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYWRkMihcImxpbmtcIiwgXCJib29sZWFuXCIsIChsLCBlLCBjKSA9PiAoZSA/IGwudG9FbWJlZCgpIDogbC5mcm9tRW1iZWQoKSkpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLyoqIERhdGUgY29uc3RydWN0b3IgZnVuY3Rpb24uICovXG4gICAgZXhwb3J0IGNvbnN0IGRhdGUgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZGF0ZVwiKVxuICAgICAgICAuYWRkMShcInN0cmluZ1wiLCAoc3RyKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkRGF0ZSA9IFBSSU1JVElWRVMuZGF0ZVBsdXMucGFyc2Uoc3RyKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLnN0YXR1cykgcmV0dXJuIHBhcnNlZERhdGUudmFsdWU7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcImRhdGVcIiwgKGQpID0+IGQpXG4gICAgICAgIC5hZGQxKFwibGlua1wiLCAobGluaywgYykgPT4ge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGZyb20gdGhlIGRpc3BsYXkuLi5cbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkRGF0ZSA9IFBSSU1JVElWRVMuZGF0ZS5wYXJzZShsaW5rLmRpc3BsYXkpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLnN0YXR1cykgcmV0dXJuIHBhcnNlZERhdGUudmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRoZW4gdHJ5IHRvIHBhcnNlIGZyb20gdGhlIHBhdGguLi5cbiAgICAgICAgICAgIGxldCBwYXJzZWREYXRlID0gUFJJTUlUSVZFUy5kYXRlLnBhcnNlKGxpbmsucGF0aCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkRGF0ZS5zdGF0dXMpIHJldHVybiBwYXJzZWREYXRlLnZhbHVlO1xuXG4gICAgICAgICAgICAvLyBUaGVuIHB1bGwgaXQgZnJvbSB0aGUgZmlsZS5cbiAgICAgICAgICAgIGxldCByZXNvbHZlZCA9IGMubGlua0hhbmRsZXIucmVzb2x2ZShsaW5rLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHJlc29sdmVkICYmIChyZXNvbHZlZCBhcyBhbnkpPy5maWxlPy5kYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHJlc29sdmVkIGFzIGFueSk/LmZpbGU/LmRheTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChkLCBmKSA9PiB7XG4gICAgICAgICAgICBpZiAoZiA9PT0gXCJ4XCIgfHwgZiA9PT0gXCJYXCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2ggPSBOVU1CRVJfUkVHRVguZXhlYyhkKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHJldHVybiBEYXRlVGltZS5mcm9tTWlsbGlzKE51bWJlci5wYXJzZUludChtYXRjaFswXSkgKiAoZiA9PT0gXCJYXCIgPyAxMDAwIDogMSkpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk5vdCBhIG51bWJlciBmb3IgZm9ybWF0KCAoJHsgZiB9KTogJHsgZCB9XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZERhdGUgPSBEYXRlVGltZS5mcm9tRm9ybWF0KGQsIGYpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLmlzVmFsaWQpIHJldHVybiBwYXJzZWREYXRlO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgQ2FuJ3QgaGFuZGxlIGZvcm1hdCAoJHtmfSkgb24gZGF0ZSBzdHJpbmcgKCR7ZH0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLyoqIER1cmF0aW9uIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBjb25zdCBkdXIgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZHVyXCIpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChzdHIpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXJzZWREdXIgPSBQUklNSVRJVkVTLmR1cmF0aW9uLnBhcnNlKHN0ci50cmltKCkpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZER1ci5zdGF0dXMpIHJldHVybiBwYXJzZWREdXIudmFsdWU7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcImR1cmF0aW9uXCIsIChkKSA9PiBkKVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKGQpID0+IGQpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBGb3JtYXQgYSBkYXRlIHVzaW5nIGEgbHV4b24vbW9tZW50LXN0eWxlIGRhdGUgZm9ybWF0LiAqL1xuICAgIGV4cG9ydCBjb25zdCBkYXRlZm9ybWF0ID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImRhdGVmb3JtYXRcIilcbiAgICAgICAgLmFkZDIoXCJkYXRlXCIsIFwic3RyaW5nXCIsIChkYXRlLCBmb3JtYXQpID0+IGRhdGUudG9Gb3JtYXQoZm9ybWF0LCB7IGxvY2FsZTogY3VycmVudExvY2FsZSgpIH0pKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCJzdHJpbmdcIiwgKF9udWwsIF9mb3JtYXQpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBsb2NhbHRpbWUgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibG9jYWx0aW1lXCIpXG4gICAgICAgIC5hZGQxKFwiZGF0ZVwiLCAoZCkgPT4gZC50b0xvY2FsKCkpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBjb25zdCBOVU1CRVJfUkVHRVggPSAvLT9bMC05XSsoXFwuWzAtOV0rKT8vO1xuXG4gICAgLyoqIE51bWJlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgY29uc3QgbnVtYmVyID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm51bWJlclwiKVxuICAgICAgICAuYWRkMShcIm51bWJlclwiLCAoYSkgPT4gYSlcbiAgICAgICAgLmFkZDEoXCJzdHJpbmdcIiwgKHN0cikgPT4ge1xuICAgICAgICAgICAgbGV0IG1hdGNoID0gTlVNQkVSX1JFR0VYLmV4ZWMoc3RyKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkgcmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KG1hdGNoWzBdKTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGFueSB2YWx1ZSB0byBhIHJlYXNvbmFibGUgaW50ZXJuYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBNb3N0IHVzZWZ1bCBmb3IgZGF0ZXMsIHN0cmluZ3MsIG51bWJlcnMsIGFuZFxuICAgICAqIHNvIG9uLlxuICAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBzdHJpbmcgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwic3RyaW5nXCIpXG4gICAgICAgIC5hZGQxKFwiKlwiLCAoYSwgY3R4KSA9PiBMaXRlcmFscy50b1N0cmluZyhhLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgcm91bmQgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicm91bmRcIilcbiAgICAgICAgLmFkZDEoXCJudW1iZXJcIiwgKG4pID0+IE1hdGgucm91bmQobikpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmFkZDIoXCJudW1iZXJcIiwgXCJudW1iZXJcIiwgKG4sIHApID0+IHtcbiAgICAgICAgICAgIGlmIChwIDw9IDApIHJldHVybiBNYXRoLnJvdW5kKG4pO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobi50b0ZpeGVkKHApKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJudW1iZXJcIiwgXCJudWxsXCIsIChuKSA9PiBNYXRoLnJvdW5kKG4pKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBtaW46IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJtaW5cIilcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoYSwgX24pID0+IGEpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKF9uLCBhKSA9PiBhKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsIChhLCBiLCBjdHgpID0+IChMaXRlcmFscy5jb21wYXJlKGEsIGIsIGN0eC5saW5rSGFuZGxlci5ub3JtYWxpemUpIDw9IDAgPyBhIDogYikpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGEsIGN0eCkgPT4gbWluKGN0eCwgLi4uYSkpXG4gICAgICAgIC52YXJhcmcoKGN0eCwgLi4uYXJncykgPT4gKGFyZ3MubGVuZ3RoID09IDAgPyBudWxsIDogYXJncy5yZWR1Y2UoKHAsIGMpID0+IG1pbihjdHgsIHAsIGMpKSkpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IG1heDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm1heFwiKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsIChhLCBfbikgPT4gYSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoX24sIGEpID0+IGEpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIipcIiwgKGEsIGIsIGN0eCkgPT4gKExpdGVyYWxzLmNvbXBhcmUoYSwgYiwgY3R4LmxpbmtIYW5kbGVyLm5vcm1hbGl6ZSkgPiAwID8gYSA6IGIpKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhLCBjdHgpID0+IG1heChjdHgsIC4uLmEpKVxuICAgICAgICAudmFyYXJnKChjdHgsIC4uLmFyZ3MpID0+IChhcmdzLmxlbmd0aCA9PSAwID8gbnVsbCA6IGFyZ3MucmVkdWNlKChwLCBjKSA9PiBtYXgoY3R4LCBwLCBjKSkpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBtaW5ieTogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm1pbmJ5XCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmdW5jLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWVzID0gYXJyLm1hcCgodikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2LCBtYXBwZWQ6IGZ1bmMoY3R4LCB2KSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgZmlsdGVyZWQgPSB2YWx1ZXMuZmlsdGVyKCh2KSA9PiAhTGl0ZXJhbHMuaXNOdWxsKHYubWFwcGVkKSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID09IDApIHJldHVybiBhcnJbMF07XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5yZWR1Y2UoKHAsIGMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoTGl0ZXJhbHMuY29tcGFyZShwLm1hcHBlZCwgYy5tYXBwZWQsIGN0eC5saW5rSGFuZGxlci5ub3JtYWxpemUpIDw9IDApIHJldHVybiBwO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGM7XG4gICAgICAgICAgICB9KS52YWx1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiZnVuY3Rpb25cIiwgKF9hcnIsIF9mdW5jLCBfY3R4KSA9PiBudWxsKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBtYXhieTogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm1heGJ5XCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmdW5jLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWVzID0gYXJyLm1hcCgodikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2LCBtYXBwZWQ6IGZ1bmMoY3R4LCB2KSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgZmlsdGVyZWQgPSB2YWx1ZXMuZmlsdGVyKCh2KSA9PiAhTGl0ZXJhbHMuaXNOdWxsKHYubWFwcGVkKSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID09IDApIHJldHVybiBhcnJbMF07XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5yZWR1Y2UoKHAsIGMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoTGl0ZXJhbHMuY29tcGFyZShwLm1hcHBlZCwgYy5tYXBwZWQsIGN0eC5saW5rSGFuZGxlci5ub3JtYWxpemUpID4gMCkgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYztcbiAgICAgICAgICAgIH0pLnZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCJmdW5jdGlvblwiLCAoX2FyciwgX2Z1bmMsIF9jdHgpID0+IG51bGwpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHN0cmlwdGltZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzdHJpcHRpbWVcIilcbiAgICAgICAgLmFkZDEoXCJkYXRlXCIsIChkKSA9PiBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogZC55ZWFyLCBtb250aDogZC5tb250aCwgZGF5OiBkLmRheSB9KSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsIChfbikgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gRGVmYXVsdCBjb250YWlucywgd2hpY2ggbG9va3MgdGhyb3VnaCBkYXRhIHN0cnVjdHVyZXMgcmVjdXJzaXZlbHkuXG4gICAgZXhwb3J0IGNvbnN0IGNvbnRhaW5zOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiY29udGFpbnNcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcIipcIiwgKGwsIGVsZW0sIGNvbnRleHQpID0+IGwuc29tZSgoZSkgPT4gY29udGFpbnMoY29udGV4dCwgZSwgZWxlbSkpKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoaGF5c3RhY2ssIG5lZWRsZSkgPT4gaGF5c3RhY2suaW5jbHVkZXMobmVlZGxlKSlcbiAgICAgICAgLmFkZDIoXCJvYmplY3RcIiwgXCJzdHJpbmdcIiwgKG9iaiwga2V5KSA9PiBrZXkgaW4gb2JqKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsIChlbGVtMSwgZWxlbTIsIGNvbnRleHQpID0+XG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbTEpLCBcIj1cIiwgRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtMikpKVxuICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpXG4gICAgICAgIClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gQ2FzZSBpbnNlbnNpdGl2ZSB2ZXJzaW9uIG9mIGNvbnRhaW5zLlxuICAgIGV4cG9ydCBjb25zdCBpY29udGFpbnM6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJpY29udGFpbnNcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcIipcIiwgKGwsIGVsZW0sIGNvbnRleHQpID0+IGwuc29tZSgoZSkgPT4gaWNvbnRhaW5zKGNvbnRleHQsIGUsIGVsZW0pKSlcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKGhheXN0YWNrLCBuZWVkbGUpID0+XG4gICAgICAgICAgICBoYXlzdGFjay50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKG5lZWRsZS50b0xvY2FsZUxvd2VyQ2FzZSgpKVxuICAgICAgICApXG4gICAgICAgIC5hZGQyKFwib2JqZWN0XCIsIFwic3RyaW5nXCIsIChvYmosIGtleSkgPT4ga2V5IGluIG9iailcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwiKlwiLCAoZWxlbTEsIGVsZW0yLCBjb250ZXh0KSA9PlxuICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5iaW5hcnlPcChFeHByZXNzaW9ucy5saXRlcmFsKGVsZW0xKSwgXCI9XCIsIEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbTIpKSlcbiAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKVxuICAgICAgICApXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vIFwiZXhhY3RcIiBjb250YWlucywgZG9lcyBub3QgbG9vayByZWN1cnNpdmVseS5cbiAgICBleHBvcnQgY29uc3QgZWNvbnRhaW5zOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZWNvbnRhaW5zXCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCIqXCIsIChsLCBlbGVtLCBjb250ZXh0KSA9PlxuICAgICAgICAgICAgbC5zb21lKChlKSA9PlxuICAgICAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbSksIFwiPVwiLCBFeHByZXNzaW9ucy5saXRlcmFsKGUpKSlcbiAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoaGF5c3RhY2ssIG5lZWRsZSkgPT4gaGF5c3RhY2suaW5jbHVkZXMobmVlZGxlKSlcbiAgICAgICAgLmFkZDIoXCJvYmplY3RcIiwgXCJzdHJpbmdcIiwgKG9iaiwga2V5KSA9PiBrZXkgaW4gb2JqKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsIChlbGVtMSwgZWxlbTIsIGNvbnRleHQpID0+XG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbTEpLCBcIj1cIiwgRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtMikpKVxuICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpXG4gICAgICAgIClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gQ2FzZSBpbnNlbnNpdGl2ZSBjb250YWlucyB3aGljaCBsb29rcyBmb3IgZXhhY3Qgd29yZCBtYXRjaGVzIChpLmUuLCBib3VuZHJ5LXRvLWJvdW5kcnkgbWF0Y2gpLlxuICAgIGV4cG9ydCBjb25zdCBjb250YWluc3dvcmQ6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJjb250YWluc3dvcmRcIilcbiAgICAgICAgLmFkZDIoXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgICAgIChoYXksIG5lZWRsZSkgPT4gISFoYXkubWF0Y2gobmV3IFJlZ0V4cChcIi4qXFxcXGJcIiArIGVzY2FwZVJlZ2V4KG5lZWRsZSkgKyBcIlxcXFxiLipcIiwgXCJpXCIpKVxuICAgICAgICApXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKF9hLCBfYikgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoX2EsIF9iKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKiogRXh0cmFjdCAwIG9yIG1vcmUga2V5cyBmcm9tIGEgZ2l2ZW4gb2JqZWN0IHZpYSBpbmRleGluZy4gKi9cbiAgICBleHBvcnQgY29uc3QgZXh0cmFjdDogRnVuY3Rpb25JbXBsID0gKGNvbnRleHQ6IEV2YWx1YXRvciwgLi4uYXJnczogTGl0ZXJhbFtdKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwKSByZXR1cm4gXCJleHRyYWN0KG9iamVjdCwga2V5MSwgLi4uKSByZXF1aXJlcyBhdCBsZWFzdCAxIGFyZ3VtZW50XCI7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgaGFuZGxlIHZlY3Rvcml6YXRpb24gaW4gdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgICAgICBsZXQgb2JqZWN0ID0gYXJnc1swXTtcbiAgICAgICAgaWYgKExpdGVyYWxzLmlzQXJyYXkob2JqZWN0KSkgcmV0dXJuIG9iamVjdC5tYXAoKHYpID0+IGV4dHJhY3QoY29udGV4dCwgdiwgLi4uYXJncy5zbGljZSgxKSkpO1xuXG4gICAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge307XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKCFMaXRlcmFscy5pc1N0cmluZyhrZXkpKSB0aHJvdyBFcnJvcihcImV4dHJhY3Qob2JqZWN0LCBrZXkxLCAuLi4pIG11c3QgYmUgY2FsbGVkIHdpdGggc3RyaW5nIGtleXNcIik7XG5cbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY29udGV4dFxuICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5pbmRleChFeHByZXNzaW9ucy5saXRlcmFsKG9iamVjdCksIEV4cHJlc3Npb25zLmxpdGVyYWwoa2V5KSkpXG4gICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBSZXZlcnNlIGFuIGFycmF5IG9yIHN0cmluZy5cbiAgICBleHBvcnQgY29uc3QgcmV2ZXJzZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyZXZlcnNlXCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGwpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gbC5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSByZXN1bHQucHVzaChsW2luZGV4XSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcInN0cmluZ1wiLCAobCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGwubGVuZ3RoOyBjKyspIHJlc3VsdCArPSBsW2wubGVuZ3RoIC0gYyAtIDFdO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDEoXCIqXCIsIChlKSA9PiBlKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vIFNvcnQgYW4gYXJyYXk7IGlmIGdpdmVuIHR3byBhcmd1bWVudHMsIHNvcnRzIGJ5IHRoZSBrZXkgcmV0dXJuZWQuXG4gICAgZXhwb3J0IGNvbnN0IHNvcnQ6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzb3J0XCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGxpc3QsIGNvbnRleHQpID0+IHNvcnQoY29udGV4dCwgbGlzdCwgKF9jdHg6IEV2YWx1YXRvciwgYTogTGl0ZXJhbCkgPT4gYSkpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAobGlzdCwga2V5LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gKFtdIGFzIExpdGVyYWxbXSkuY29uY2F0KGxpc3QpO1xuICAgICAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYWtleSA9IGtleShjb250ZXh0LCBhKTtcbiAgICAgICAgICAgICAgICBsZXQgYmtleSA9IGtleShjb250ZXh0LCBiKTtcbiAgICAgICAgICAgICAgICBsZXQgbGUgPSBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5iaW5hcnlPcChFeHByZXNzaW9ucy5saXRlcmFsKGFrZXkpLCBcIjxcIiwgRXhwcmVzc2lvbnMubGl0ZXJhbChia2V5KSkpXG4gICAgICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpO1xuICAgICAgICAgICAgICAgIGlmIChMaXRlcmFscy5pc1RydXRoeShsZSkpIHJldHVybiAtMTtcblxuICAgICAgICAgICAgICAgIGxldCBlcSA9IGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoYWtleSksIFwiPVwiLCBFeHByZXNzaW9ucy5saXRlcmFsKGJrZXkpKSlcbiAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKExpdGVyYWxzLmlzVHJ1dGh5KGVxKSkgcmV0dXJuIDA7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDEoXCIqXCIsIChlKSA9PiBlKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCByZWdleHRlc3QgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicmVnZXh0ZXN0XCIpXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChwYXR0ZXJuOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpID0+IFJlZ0V4cChwYXR0ZXJuKS50ZXN0KGZpZWxkKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoX24sIF9hKSA9PiBmYWxzZSlcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoX2EsIF9uKSA9PiBmYWxzZSlcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHJlZ2V4bWF0Y2ggPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicmVnZXhtYXRjaFwiKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAocGF0dGVybjogc3RyaW5nLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4uc3RhcnRzV2l0aChcIl5cIikgJiYgIXBhdHRlcm4uZW5kc1dpdGgoXCIkXCIpKSBwYXR0ZXJuID0gXCJeXCIgKyBwYXR0ZXJuICsgXCIkXCI7XG4gICAgICAgICAgICByZXR1cm4gISFmaWVsZC5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoX24sIF9hKSA9PiBmYWxzZSlcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoX2EsIF9uKSA9PiBmYWxzZSlcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHJlZ2V4cmVwbGFjZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyZWdleHJlcGxhY2VcIilcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKGZpZWxkOiBzdHJpbmcsIHBhdDogc3RyaW5nLCByZXA6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVnID0gbmV3IFJlZ0V4cChwYXQsIFwiZ1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQucmVwbGFjZShyZWcsIHJlcCk7XG4gICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIHJlZ2V4cCAnJHtwYXR9JyBpbiByZWdleHJlcGxhY2VgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDMoXCJudWxsXCIsIFwiKlwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgzLCBbMCwgMSwgMl0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGxvd2VyID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImxvd2VyXCIpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChzKSA9PiBzLnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgdXBwZXIgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwidXBwZXJcIilcbiAgICAgICAgLmFkZDEoXCJzdHJpbmdcIiwgKHMpID0+IHMudG9Mb2NhbGVVcHBlckNhc2UoKSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCByZXBsYWNlID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInJlcGxhY2VcIilcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHN0ciwgcGF0LCByZXByKSA9PiBzdHIuc3BsaXQocGF0KS5qb2luKHJlcHIpKVxuICAgICAgICAuYWRkMyhcIm51bGxcIiwgXCIqXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvLyBFbnN1cmUgdW5kZWZpbmVkIG1hdGNoZXMgdHVybiBpbnRvIGVtcHR5IHN0cmluZ3MgZm9yIHNwbGl0LzIgYW5kIHNwbGl0LzMuXG4gICAgY29uc3Qgc3BsaXRJbXBsID0gKHN0cjogc3RyaW5nLCBkZWxpbTogc3RyaW5nLCBsaW1pdD86IG51bWJlcik6IHN0cmluZ1tdID0+XG4gICAgICAgIHN0ci5zcGxpdChuZXcgUmVnRXhwKGRlbGltKSwgbGltaXQpLm1hcCgoc3RyKSA9PiBzdHIgfHwgXCJcIik7XG5cbiAgICAvKiogU3BsaXQgYSBzdHJpbmcgb24gYSBnaXZlbiBzdHJpbmcuICovXG4gICAgZXhwb3J0IGNvbnN0IHNwbGl0OiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwic3BsaXRcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHN0cmluZywgc3BsaXR0ZXIpID0+IHNwbGl0SW1wbChzdHJpbmcsIHNwbGl0dGVyKSlcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgKHN0cmluZywgc3BsaXR0ZXIsIGxpbWl0KSA9PiBzcGxpdEltcGwoc3RyaW5nLCBzcGxpdHRlciwgbGltaXQpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCJudWxsXCIsIFwiKlwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgc3RhcnRzd2l0aDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInN0YXJ0c3dpdGhcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHN0ciwgc3RhcnRpbmcpID0+IHN0ci5zdGFydHNXaXRoKHN0YXJ0aW5nKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBlbmRzd2l0aDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImVuZHN3aXRoXCIpXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChzdHIsIGVuZGluZykgPT4gc3RyLmVuZHNXaXRoKGVuZGluZykpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgcGFkbGVmdDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInBhZGxlZnRcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgKHN0ciwgbGVuKSA9PiBzdHIucGFkU3RhcnQobGVuLCBcIiBcIikpXG4gICAgICAgIC5hZGQzKFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwic3RyaW5nXCIsIChzdHIsIGxlbiwgcGFkZGluZykgPT4gc3RyLnBhZFN0YXJ0KGxlbiwgcGFkZGluZykpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIm51bGxcIiwgXCIqXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLnZlY3Rvcml6ZSgzLCBbMCwgMSwgMl0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHBhZHJpZ2h0OiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicGFkcmlnaHRcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgKHN0ciwgbGVuKSA9PiBzdHIucGFkRW5kKGxlbiwgXCIgXCIpKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcInN0cmluZ1wiLCAoc3RyLCBsZW4sIHBhZGRpbmcpID0+IHN0ci5wYWRFbmQobGVuLCBwYWRkaW5nKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwibnVsbFwiLCBcIipcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgc3Vic3RyaW5nOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwic3Vic3RyaW5nXCIpXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIChzdHIsIHN0YXJ0KSA9PiBzdHIuc3Vic3RyaW5nKHN0YXJ0KSlcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJudW1iZXJcIiwgKHN0ciwgc3RhcnQsIGVuZCkgPT4gc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwibnVsbFwiLCBcIipcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgdHJ1bmNhdGU6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJ0cnVuY2F0ZVwiKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcInN0cmluZ1wiLCAoc3RyLCBsZW5ndGgsIHN1ZmZpeCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPiBsZW5ndGggLSBzdWZmaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgTWF0aC5tYXgoMCwgbGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCkpICsgc3VmZml4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcIm51bWJlclwiLCAoc3RyLCBsZW5ndGgsIGN0eCkgPT4gdHJ1bmNhdGUoY3R4LCBzdHIsIGxlbmd0aCwgXCIuLi5cIikpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIm51bGxcIiwgXCIqXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLnZlY3Rvcml6ZSgzLCBbMCwgMSwgMl0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGZkZWZhdWx0ID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImRlZmF1bHRcIilcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwiKlwiLCAodiwgYmspID0+IChMaXRlcmFscy5pc051bGwodikgPyBiayA6IHYpKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgbGRlZmF1bHQgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibGRlZmF1bHRcIilcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwiKlwiLCAodiwgYmspID0+IChMaXRlcmFscy5pc051bGwodikgPyBiayA6IHYpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBjaG9pY2UgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiY2hvaWNlXCIpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCIqXCIsIChiLCBsZWZ0LCByaWdodCkgPT4gKExpdGVyYWxzLmlzVHJ1dGh5KGIpID8gbGVmdCA6IHJpZ2h0KSlcbiAgICAgICAgLnZlY3Rvcml6ZSgzLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHJlZHVjZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyZWR1Y2VcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcInN0cmluZ1wiLCAobGlzLCBvcCwgY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxpcy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvcCAhPSBcIitcIiAmJiBvcCAhPSBcIi1cIiAmJiBvcCAhPSBcIipcIiAmJiBvcCAhPSBcIi9cIiAmJiBvcCAhPSBcIiZcIiAmJiBvcCAhPSBcInxcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcInJlZHVjZShhcnJheSwgb3ApIHN1cHBvcnRzICcrJywgJy0nLCAnLycsICcqJywgJyYnLCBhbmQgJ3wnXCIpO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBsaXNbMF07XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbGlzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gY29udGV4dFxuICAgICAgICAgICAgICAgICAgICAuZXZhbHVhdGUoRXhwcmVzc2lvbnMuYmluYXJ5T3AoRXhwcmVzc2lvbnMubGl0ZXJhbCh2YWx1ZSksIG9wLCBFeHByZXNzaW9ucy5saXRlcmFsKGxpc1tpbmRleF0pKSlcbiAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChsaXMsIG9wLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBpZiAobGlzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbGlzWzBdO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGxpcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIG51bGwgdmFsdWVzIHRvIHJlZHVjZSB0aGUgcGFpbiBvZiBzdW1taW5nIG92ZXIgZmllbGRzIHRoYXQgbWF5IG9yIG1heSBub3QgZXhpc3QuXG4gICAgICAgICAgICAgICAgaWYgKExpdGVyYWxzLmlzTnVsbChsaXNbaW5kZXhdKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG9wKGNvbnRleHQsIHZhbHVlLCBsaXNbaW5kZXhdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHN1bSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzdW1cIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyLCBjKSA9PiByZWR1Y2UoYywgYXJyLCBcIitcIikpXG4gICAgICAgIC5hZGQxKFwiKlwiLCAoZSkgPT4gZSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgYXZlcmFnZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJhdmVyYWdlXCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGFycmF5LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBhZGQgPSBzdW0oY29udGV4dCwgYXJyYXkpO1xuICAgICAgICAgICAgaWYgKGFkZCA9PSBudWxsIHx8IGFkZCA9PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFxuICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5iaW5hcnlPcChFeHByZXNzaW9ucy5saXRlcmFsKGFkZCksIFwiL1wiLCBFeHByZXNzaW9ucy5saXRlcmFsKGFycmF5Lmxlbmd0aCkpKVxuICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcIipcIiwgKGUpID0+IGUpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHByb2R1Y3QgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicHJvZHVjdFwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhcnIsIGMpID0+IHJlZHVjZShjLCBhcnIsIFwiKlwiKSlcbiAgICAgICAgLmFkZDEoXCIqXCIsIChlKSA9PiBlKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBqb2luOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiam9pblwiKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwic3RyaW5nXCIsIChhcnIsIHNlcCwgY3R4KSA9PlxuICAgICAgICAgICAgYXJyLm1hcCgoZSkgPT4gTGl0ZXJhbHMudG9TdHJpbmcoZSwgc3RyaW5nU2V0dGluZ3MoY3R4LnNldHRpbmdzKSkpLmpvaW4oc2VwKVxuICAgICAgICApXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJudWxsXCIsIChhcnIsIF9zLCBjb250ZXh0KSA9PiBqb2luKGNvbnRleHQsIGFyciwgXCIsIFwiKSlcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwic3RyaW5nXCIsIChlbGVtLCBzZXAsIGN0eCkgPT4gTGl0ZXJhbHMudG9TdHJpbmcoZWxlbSwgc3RyaW5nU2V0dGluZ3MoY3R4LnNldHRpbmdzKSkpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGFyciwgY29udGV4dCkgPT4gam9pbihjb250ZXh0LCBhcnIsIFwiLCBcIikpXG4gICAgICAgIC5hZGQxKFwiKlwiLCAoZSwgY3R4KSA9PiBMaXRlcmFscy50b1N0cmluZyhlLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSlcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGFueSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJhbnlcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyKSA9PiBhcnIuc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkodikpKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwiZnVuY3Rpb25cIiwgKGFyciwgZiwgY3R4KSA9PiBhcnIuc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkoZihjdHgsIHYpKSkpXG4gICAgICAgIC52YXJhcmcoKF9jdHgsIC4uLmFyZ3MpID0+IGFyZ3Muc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkodikpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBhbGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiYWxsXCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGFycikgPT4gYXJyLmV2ZXJ5KCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeSh2KSkpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmLCBjdHgpID0+IGFyci5ldmVyeSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkoZihjdHgsIHYpKSkpXG4gICAgICAgIC52YXJhcmcoKF9jdHgsIC4uLmFyZ3MpID0+IGFyZ3MuZXZlcnkoKHYpID0+IExpdGVyYWxzLmlzVHJ1dGh5KHYpKSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgbm9uZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJhbGxcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyKSA9PiAhYXJyLnNvbWUoKHYpID0+IExpdGVyYWxzLmlzVHJ1dGh5KHYpKSlcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChhcnIsIGYsIGN0eCkgPT4gIWFyci5zb21lKCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeShmKGN0eCwgdikpKSlcbiAgICAgICAgLnZhcmFyZygoX2N0eCwgLi4uYXJncykgPT4gIWFyZ3Muc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkodikpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBmaWx0ZXIgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZmlsdGVyXCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmLCBjdHgpID0+IGFyci5maWx0ZXIoKHYpID0+IExpdGVyYWxzLmlzVHJ1dGh5KGYoY3R4LCB2KSkpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IG1hcCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJtYXBcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChhcnIsIGYsIGN0eCkgPT4gYXJyLm1hcCgodikgPT4gZihjdHgsIHYpKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBub25udWxsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm5vbm51bGxcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyKSA9PiBhcnIuZmlsdGVyKCh2KSA9PiBMaXRlcmFscy50eXBlT2YodikgIT0gXCJudWxsXCIpKVxuICAgICAgICAudmFyYXJnKChfY3R4LCAuLi5hcmdzKSA9PiBhcmdzLmZpbHRlcigodikgPT4gTGl0ZXJhbHMudHlwZU9mKHYpICE9IFwibnVsbFwiKSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKiogR2V0cyBhbiBvYmplY3QgY29udGFpbmluZyBhIGxpbmsncyBvd24gcHJvcGVydGllcyAqL1xuICAgIGV4cG9ydCBjb25zdCBtZXRhOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibWV0YVwiKVxuICAgICAgICAuYWRkMShcImxpbmtcIiwgKGxpbmspID0+ICh7XG4gICAgICAgICAgICBkaXNwbGF5OiBsaW5rLmRpc3BsYXkgPz8gbnVsbCxcbiAgICAgICAgICAgIGVtYmVkOiBsaW5rLmVtYmVkLFxuICAgICAgICAgICAgcGF0aDogbGluay5wYXRoLFxuICAgICAgICAgICAgc3VicGF0aDogbGluay5zdWJwYXRoID8/IG51bGwsXG4gICAgICAgICAgICB0eXBlOiBsaW5rLnR5cGUsXG4gICAgICAgIH0pKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vIENvbmNhdGVuYXRlcyBzdWItYXJyYXkgZWxlbWVudHMgaW50byBhIG5ldyBhcnJheVxuICAgIGV4cG9ydCBjb25zdCBmbGF0ID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImZsYXRcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEuZmxhdCgpO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwibnVtYmVyXCIsIChhLCBuKSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICByZXR1cm4gYS5mbGF0KG4pO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmJ1aWxkKCk7XG59XG5cbi8qKiBEZWZhdWx0IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdG9yLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlVOQ1RJT05TOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbkltcGw+ID0ge1xuICAgIC8vIENvbnN0cnVjdG9ycy5cbiAgICBsaXN0OiBEZWZhdWx0RnVuY3Rpb25zLmxpc3QsXG4gICAgYXJyYXk6IERlZmF1bHRGdW5jdGlvbnMubGlzdCxcbiAgICBsaW5rOiBEZWZhdWx0RnVuY3Rpb25zLmxpbmssXG4gICAgZW1iZWQ6IERlZmF1bHRGdW5jdGlvbnMuZW1iZWQsXG4gICAgZGF0ZTogRGVmYXVsdEZ1bmN0aW9ucy5kYXRlLFxuICAgIGR1cjogRGVmYXVsdEZ1bmN0aW9ucy5kdXIsXG4gICAgZGF0ZWZvcm1hdDogRGVmYXVsdEZ1bmN0aW9ucy5kYXRlZm9ybWF0LFxuICAgIGxvY2FsdGltZTogRGVmYXVsdEZ1bmN0aW9ucy5sb2NhbHRpbWUsXG4gICAgbnVtYmVyOiBEZWZhdWx0RnVuY3Rpb25zLm51bWJlcixcbiAgICBzdHJpbmc6IERlZmF1bHRGdW5jdGlvbnMuc3RyaW5nLFxuICAgIG9iamVjdDogRGVmYXVsdEZ1bmN0aW9ucy5vYmplY3QsXG4gICAgdHlwZW9mOiBEZWZhdWx0RnVuY3Rpb25zLnR5cGVPZixcblxuICAgIC8vIE1hdGggT3BlcmF0aW9ucy5cbiAgICByb3VuZDogRGVmYXVsdEZ1bmN0aW9ucy5yb3VuZCxcbiAgICBtaW46IERlZmF1bHRGdW5jdGlvbnMubWluLFxuICAgIG1heDogRGVmYXVsdEZ1bmN0aW9ucy5tYXgsXG4gICAgbWluYnk6IERlZmF1bHRGdW5jdGlvbnMubWluYnksXG4gICAgbWF4Ynk6IERlZmF1bHRGdW5jdGlvbnMubWF4YnksXG5cbiAgICAvLyBTdHJpbmcgb3BlcmF0aW9ucy5cbiAgICByZWdleHJlcGxhY2U6IERlZmF1bHRGdW5jdGlvbnMucmVnZXhyZXBsYWNlLFxuICAgIHJlZ2V4dGVzdDogRGVmYXVsdEZ1bmN0aW9ucy5yZWdleHRlc3QsXG4gICAgcmVnZXhtYXRjaDogRGVmYXVsdEZ1bmN0aW9ucy5yZWdleG1hdGNoLFxuICAgIHJlcGxhY2U6IERlZmF1bHRGdW5jdGlvbnMucmVwbGFjZSxcbiAgICBsb3dlcjogRGVmYXVsdEZ1bmN0aW9ucy5sb3dlcixcbiAgICB1cHBlcjogRGVmYXVsdEZ1bmN0aW9ucy51cHBlcixcbiAgICBzcGxpdDogRGVmYXVsdEZ1bmN0aW9ucy5zcGxpdCxcbiAgICBzdGFydHN3aXRoOiBEZWZhdWx0RnVuY3Rpb25zLnN0YXJ0c3dpdGgsXG4gICAgZW5kc3dpdGg6IERlZmF1bHRGdW5jdGlvbnMuZW5kc3dpdGgsXG4gICAgcGFkbGVmdDogRGVmYXVsdEZ1bmN0aW9ucy5wYWRsZWZ0LFxuICAgIHBhZHJpZ2h0OiBEZWZhdWx0RnVuY3Rpb25zLnBhZHJpZ2h0LFxuICAgIHN1YnN0cmluZzogRGVmYXVsdEZ1bmN0aW9ucy5zdWJzdHJpbmcsXG4gICAgdHJ1bmNhdGU6IERlZmF1bHRGdW5jdGlvbnMudHJ1bmNhdGUsXG5cbiAgICAvLyBEYXRlIE9wZXJhdGlvbnMuXG4gICAgc3RyaXB0aW1lOiBEZWZhdWx0RnVuY3Rpb25zLnN0cmlwdGltZSxcblxuICAgIC8vIExpc3Qgb3BlcmF0aW9ucy5cbiAgICBsZW5ndGg6IERlZmF1bHRGdW5jdGlvbnMubGVuZ3RoLFxuICAgIGNvbnRhaW5zOiBEZWZhdWx0RnVuY3Rpb25zLmNvbnRhaW5zLFxuICAgIGljb250YWluczogRGVmYXVsdEZ1bmN0aW9ucy5pY29udGFpbnMsXG4gICAgZWNvbnRhaW5zOiBEZWZhdWx0RnVuY3Rpb25zLmVjb250YWlucyxcbiAgICBjb250YWluc3dvcmQ6IERlZmF1bHRGdW5jdGlvbnMuY29udGFpbnN3b3JkLFxuICAgIHJldmVyc2U6IERlZmF1bHRGdW5jdGlvbnMucmV2ZXJzZSxcbiAgICBzb3J0OiBEZWZhdWx0RnVuY3Rpb25zLnNvcnQsXG4gICAgZmxhdDogRGVmYXVsdEZ1bmN0aW9ucy5mbGF0LFxuXG4gICAgLy8gQWdncmVnYXRpb24gb3BlcmF0aW9ucyBsaWtlIHJlZHVjZS5cbiAgICByZWR1Y2U6IERlZmF1bHRGdW5jdGlvbnMucmVkdWNlLFxuICAgIGpvaW46IERlZmF1bHRGdW5jdGlvbnMuam9pbixcbiAgICBzdW06IERlZmF1bHRGdW5jdGlvbnMuc3VtLFxuICAgIHByb2R1Y3Q6IERlZmF1bHRGdW5jdGlvbnMucHJvZHVjdCxcbiAgICBhdmVyYWdlOiBEZWZhdWx0RnVuY3Rpb25zLmF2ZXJhZ2UsXG4gICAgYWxsOiBEZWZhdWx0RnVuY3Rpb25zLmFsbCxcbiAgICBhbnk6IERlZmF1bHRGdW5jdGlvbnMuYW55LFxuICAgIG5vbmU6IERlZmF1bHRGdW5jdGlvbnMubm9uZSxcbiAgICBmaWx0ZXI6IERlZmF1bHRGdW5jdGlvbnMuZmlsdGVyLFxuICAgIG1hcDogRGVmYXVsdEZ1bmN0aW9ucy5tYXAsXG4gICAgbm9ubnVsbDogRGVmYXVsdEZ1bmN0aW9ucy5ub25udWxsLFxuXG4gICAgLy8gT2JqZWN0L1V0aWxpdHkgb3BlcmF0aW9ucy5cbiAgICBleHRyYWN0OiBEZWZhdWx0RnVuY3Rpb25zLmV4dHJhY3QsXG4gICAgZGVmYXVsdDogRGVmYXVsdEZ1bmN0aW9ucy5mZGVmYXVsdCxcbiAgICBsZGVmYXVsdDogRGVmYXVsdEZ1bmN0aW9ucy5sZGVmYXVsdCxcbiAgICBjaG9pY2U6IERlZmF1bHRGdW5jdGlvbnMuY2hvaWNlLFxuICAgIG1ldGE6IERlZmF1bHRGdW5jdGlvbnMubWV0YSxcbn07XG4iLCAiLyoqIENvcmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHF1ZXJ5IGxhbmd1YWdlIGV2YWx1YXRpb24gZW5naW5lLiAqL1xuXG5pbXBvcnQgeyBEYXRhT2JqZWN0LCBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCJhcGkvcmVzdWx0XCI7XG5pbXBvcnQgeyBCaW5hcnlPcEhhbmRsZXIsIGNyZWF0ZUJpbmFyeU9wcyB9IGZyb20gXCIuL2JpbmFyeW9wXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9uLCBFeHByZXNzaW9ucyB9IGZyb20gXCJleHByZXNzaW9uL2V4cHJlc3Npb25cIjtcbmltcG9ydCB7IERFRkFVTFRfRlVOQ1RJT05TLCBGdW5jdGlvbkltcGwgfSBmcm9tIFwiLi9mdW5jdGlvbnNcIjtcbmltcG9ydCB7IFNldHRpbmdzIH0gZnJvbSBcInNldHRpbmdzXCI7XG5pbXBvcnQgeyBGaWVsZGJlYXJpbmcsIEZpZWxkYmVhcmluZ3MgfSBmcm9tIFwiLi9maWVsZFwiO1xuXG4vKiogSGFuZGxlcyBsaW5rIHJlc29sdXRpb24gYW5kIG5vcm1hbGl6YXRpb24gaW5zaWRlIG9mIGEgY29udGV4dC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua0hhbmRsZXIge1xuICAgIC8qKiBSZXNvbHZlIGEgbGluayB0byB0aGUgbWV0YWRhdGEgaXQgY29udGFpbnMuICovXG4gICAgcmVzb2x2ZShwYXRoOiBzdHJpbmcgfCBMaW5rKTogRGF0YU9iamVjdCB8IG51bGw7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGEgbGluayB0byBpdCdzIGZ1bGx5LXF1YWxpZmllZCBwYXRoIGZvciBjb21wYXJpc29uIHB1cnBvc2VzLlxuICAgICAqIElmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0LCByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICAgKi9cbiAgICBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nO1xuICAgIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gcGF0aCBhY3R1YWxseSBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS4gKi9cbiAgICBleGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbjtcbn1cblxuLyoqIFNvdXJjZSBvZiB2YXJpYWJsZXMgd2hpY2ggY2FuIGJlIHJlZmVyZW5jZWQgaW4gdGhlIGV2YWx1YXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVzIHtcbiAgICAvKiogUmVuZGVyIHRoZSBlbnRpcmUgdmFyaWFibGUgc3RvcmUgdG8gYSBrZXktdmFsdWUgbWFwLiAqL1xuICAgIGFsbCgpOiBEYXRhT2JqZWN0O1xuXG4gICAgLyoqIFJlc29sdmUgYSB2YXJpYWJsZSBieSBuYW1lLiAqL1xuICAgIHJlc29sdmUobmFtZTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFdmFsdWF0aW9uIGNvbnRleHQgdGhhdCBleHByZXNzaW9ucyBjYW4gYmUgZXZhbHVhdGVkIGluLiBJbmNsdWRlcyBnbG9iYWwgc3RhdGUsIGFzIHdlbGwgYXMgYXZhaWxhYmxlIGZ1bmN0aW9ucyBhbmQgYSBoYW5kbGVyXG4gKiBmb3IgYmluYXJ5IG9wZXJhdG9ycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2YWx1YXRvciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlIG9mIGdsb2JhbHMsIGFzIHdlbGwgYXMgb3B0aW9uYWxseSB3aXRoIGN1c3RvbSBiaW5hcnkgb3BlcmF0b3IsIGZ1bmN0aW9uLFxuICAgICAqIGFuZCBsaW5rIGhhbmRsZXJzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGxpbmtIYW5kbGVyOiBMaW5rSGFuZGxlcixcbiAgICAgICAgcHVibGljIHNldHRpbmdzOiBTZXR0aW5ncyxcbiAgICAgICAgcHVibGljIGdsb2JhbHM6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge30sXG4gICAgICAgIHB1YmxpYyBiaW5hcnlPcHM6IEJpbmFyeU9wSGFuZGxlciA9IGNyZWF0ZUJpbmFyeU9wcyhsaW5rSGFuZGxlci5ub3JtYWxpemUpLFxuICAgICAgICBwdWJsaWMgZnVuY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbkltcGw+ID0gREVGQVVMVF9GVU5DVElPTlNcbiAgICApIHt9XG5cbiAgICAvKiogU2V0IGEgZ2xvYmFsIHZhbHVlIGluIHRoaXMgY29udGV4dC4gKi9cbiAgICBwdWJsaWMgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiBFdmFsdWF0b3Ige1xuICAgICAgICB0aGlzLmdsb2JhbHNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgdmFsdWUgb2YgYSBnbG9iYWwgdmFyaWFibGUgYnkgbmFtZS4gUmV0dXJucyBudWxsIGlmIG5vdCBwcmVzZW50LiAqL1xuICAgIHB1YmxpYyBnZXQobmFtZTogc3RyaW5nKTogTGl0ZXJhbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbHNbbmFtZV0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIGV2YWx1YXRlIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGluIHRoaXMgY29udGV4dCwgcmFpc2luZyBhbiBleGNlcHRpb24gb24gZmFpbHVyZS4gKi9cbiAgICBwdWJsaWMgdHJ5RXZhbHVhdGUoZXhwcjogRXhwcmVzc2lvbiwgdmFyaWFibGVzOiBWYXJpYWJsZXMgPSBWYXJpYWJsZXMuZW1wdHkoKSk6IExpdGVyYWwge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShleHByLCB2YXJpYWJsZXMpLm9yRWxzZVRocm93KCk7XG4gICAgfVxuXG4gICAgLyoqIEV2YWx1YXRlIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGluIHRoaXMgY29udGV4dC4gKi9cbiAgICBwdWJsaWMgZXZhbHVhdGUoZXhwcjogRXhwcmVzc2lvbiwgdmFyaWFibGVzOiBWYXJpYWJsZXMgPSBWYXJpYWJsZXMuZW1wdHkoKSk6IFJlc3VsdDxMaXRlcmFsLCBzdHJpbmc+IHtcbiAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGV4cHIudmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBcInZhcmlhYmxlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubmFtZSA9PT0gRXhwcmVzc2lvbnMuUk9XKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3ModmFyaWFibGVzLmFsbCgpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gdmFyaWFibGVzLnJlc29sdmUoZXhwci5uYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHJlc29sdmVkKTtcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5uYW1lIGluIHRoaXMuZ2xvYmFscykgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHRoaXMuZ2xvYmFsc1tleHByLm5hbWVdKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGUoZXhwci5jaGlsZCwgdmFyaWFibGVzKS5tYXAoKHMpID0+ICFMaXRlcmFscy5pc1RydXRoeShzKSk7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZsYXRNYXAyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlKGV4cHIubGVmdCwgdmFyaWFibGVzKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZShleHByLnJpZ2h0LCB2YXJpYWJsZXMpLFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT4gdGhpcy5iaW5hcnlPcHMuZXZhbHVhdGUoZXhwci5vcCwgYSwgYiwgdGhpcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgZXhwci52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1YmV2YWwgPSB0aGlzLmV2YWx1YXRlKGNoaWxkLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YmV2YWwuc3VjY2Vzc2Z1bCkgcmV0dXJuIHN1YmV2YWw7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN1YmV2YWwudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0KTtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICBsZXQgb2JqUmVzdWx0OiBEYXRhT2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKGV4cHIudmFsdWVzKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViZXZhbCA9IHRoaXMuZXZhbHVhdGUoY2hpbGQsIHZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3ViZXZhbC5zdWNjZXNzZnVsKSByZXR1cm4gc3ViZXZhbDtcbiAgICAgICAgICAgICAgICAgICAgb2JqUmVzdWx0W2tleV0gPSBzdWJldmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3Mob2JqUmVzdWx0KTtcbiAgICAgICAgICAgIGNhc2UgXCJsYW1iZGFcIjpcbiAgICAgICAgICAgICAgICAvLyBKdXN0IHJlbHlpbmcgb24gSlMgdG8gY2FwdHVyZSAnZGF0YScgZm9yIHVzIGltcGxpY2l0bHk7IHVuc3VyZVxuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgY29ycmVjdCB0aGluZyB0byBkby4gQ291bGQgY2F1c2Ugd2VpcmQgYmVoYXZpb3JzLlxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcygoY3R4OiBFdmFsdWF0b3IsIC4uLmFyZ3M6IExpdGVyYWxbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYWxzOiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhcmcgPSAwOyBhcmcgPCBNYXRoLm1pbihhcmdzLmxlbmd0aCwgZXhwci5hcmd1bWVudHMubGVuZ3RoKTsgYXJnKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsc1tleHByLmFyZ3VtZW50c1thcmddXSA9IGFyZ3NbYXJnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZXZhbHVhdGUoZXhwci52YWx1ZSwgVmFyaWFibGVzLmxhbWJkYSh2YXJpYWJsZXMsIGxvY2FscykpLm9yRWxzZVRocm93KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICBsZXQgcmF3RnVuYyA9XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuZnVuYy50eXBlID09IFwidmFyaWFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBSZXN1bHQuc3VjY2VzczxzdHJpbmcsIHN0cmluZz4oZXhwci5mdW5jLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZXZhbHVhdGUoZXhwci5mdW5jLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghcmF3RnVuYy5zdWNjZXNzZnVsKSByZXR1cm4gcmF3RnVuYztcbiAgICAgICAgICAgICAgICBsZXQgZnVuYyA9IHJhd0Z1bmMudmFsdWU7XG5cbiAgICAgICAgICAgICAgICBsZXQgYXJnczogTGl0ZXJhbFtdID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXJnIG9mIGV4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNvbHZlZCA9IHRoaXMuZXZhbHVhdGUoYXJnLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkLnN1Y2Nlc3NmdWwpIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHJlc29sdmVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgY2FsbDogRnVuY3Rpb25JbXBsO1xuICAgICAgICAgICAgICAgIGlmIChMaXRlcmFscy5pc0Z1bmN0aW9uKGZ1bmMpKSBjYWxsID0gZnVuYyBhcyBGdW5jdGlvbkltcGw7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoTGl0ZXJhbHMuaXNTdHJpbmcoZnVuYykgJiYgZnVuYyBpbiB0aGlzLmZ1bmN0aW9ucykgY2FsbCA9IHRoaXMuZnVuY3Rpb25zW2Z1bmNdO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKExpdGVyYWxzLmlzU3RyaW5nKGZ1bmMpKSByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYFVucmVjb2duaXplZCBmdW5jdGlvbiBuYW1lICcke2Z1bmN9J2ApO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBDYW5ub3QgY2FsbCB0eXBlICcke0xpdGVyYWxzLnR5cGVPZihmdW5jKX0nIGFzIGEgZnVuY3Rpb25gKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhjYWxsKHRoaXMsIC4uLmFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIEdldCB2YXJpYWJsZXMgZnJvbSBhIHBsYWluIG9iamVjdC4gKi9cbmV4cG9ydCBjbGFzcyBPYmplY3RWYXJpYWJsZXMgaW1wbGVtZW50cyBWYXJpYWJsZXMge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqZWN0OiBEYXRhT2JqZWN0KSB7fVxuXG4gICAgcHVibGljIGFsbCgpOiBEYXRhT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlKG5hbWU6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RbbmFtZV07XG4gICAgfVxufVxuXG4vKiogR2V0IHZhcmlhYmxlcyBmcm9tIGEgZmllbGQtYmVhcmluZyBvYmplY3QgKHdoaWNoIHN1cHBvcnRzIGNhc2UgaW5zZW5zaXRpdml0eSkuICovXG5leHBvcnQgY2xhc3MgRmllbGRiZWFyaW5nVmFyaWFibGVzIGltcGxlbWVudHMgVmFyaWFibGVzIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIG9iamVjdDogRmllbGRiZWFyaW5nKSB7fVxuXG4gICAgcHVibGljIGFsbCgpOiBEYXRhT2JqZWN0IHtcbiAgICAgICAgY29uc3Qgb2JqZWN0OiBEYXRhT2JqZWN0ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5vYmplY3QuZmllbGRzKSB7XG4gICAgICAgICAgICBvYmplY3RbZmllbGQua2V5XSA9IGZpZWxkLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZShuYW1lOiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0LmZpZWxkKG5hbWUpPy52YWx1ZTtcbiAgICB9XG59XG5cbi8qKiBEZWxlZ2F0ZSB0byBsb2NhbCBjb250ZXh0IGZpcnN0LCB0aGVuIHRvIHBhcmVudCBjb250ZXh0IGlmIG5vdCBhdmFpbGFibGUuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhVmFyaWFibGVzIGltcGxlbWVudHMgVmFyaWFibGVzIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHBhcmVudDogVmFyaWFibGVzLCBwdWJsaWMgbG9jYWxzOiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPikge31cblxuICAgIHB1YmxpYyBhbGwoKTogRGF0YU9iamVjdCB7XG4gICAgICAgIHJldHVybiB7IC4uLnRoaXMucGFyZW50LmFsbCgpLCAuLi50aGlzLmxvY2FscyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlKG5hbWU6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbHNbbmFtZV0gPz8gdGhpcy5wYXJlbnQucmVzb2x2ZShuYW1lKTtcbiAgICB9XG59XG5cbi8qKiBEZWZhdWx0IHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYWtpbmcgdmFyaWFibGUgc3RvcmVzLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBWYXJpYWJsZXMge1xuICAgIGV4cG9ydCBmdW5jdGlvbiBlbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RWYXJpYWJsZXMoe30pO1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBpbmZlcihvYmplY3Q6IGFueSk6IFZhcmlhYmxlcyB7XG4gICAgICAgIGlmIChGaWVsZGJlYXJpbmdzLmlzRmllbGRiZWFyaW5nKG9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmllbGRiZWFyaW5nVmFyaWFibGVzKG9iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9iamVjdFZhcmlhYmxlcyhvYmplY3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGxhbWJkYShwYXJlbnQ6IFZhcmlhYmxlcywgbG9jYWxzOiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPik6IFZhcmlhYmxlcyB7XG4gICAgICAgIHJldHVybiBuZXcgTGFtYmRhVmFyaWFibGVzKHBhcmVudCwgbG9jYWxzKTtcbiAgICB9XG59XG4iLCAiLy8hIFByb3ZpZGVzIHV0aWxpdGllcyBmb3IgZXhlY3V0aW5nIHF1ZXJpZXMgYWdhaW5zdCB0aGUgc3RvcmFnZSBsYXllci5cbmltcG9ydCB7IEluZGV4UHJpbWl0aXZlLCBJbmRleFF1ZXJ5LCBJbmRleFNvdXJjZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJzIH0gZnJvbSBcImV4cHJlc3Npb24vZmlsdGVyc1wiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcbmltcG9ydCB7IEV4cHJlc3Npb24sIEV4cHJlc3Npb25zIH0gZnJvbSBcImV4cHJlc3Npb24vZXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRXZhbHVhdG9yLCBWYXJpYWJsZXMgfSBmcm9tIFwiZXhwcmVzc2lvbi9ldmFsdWF0b3JcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEluZGV4IFF1ZXJ5IE9wdGltaXphdGlvbiAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKiBQZXJmb3JtIHNpbXBsZSByZWN1cnNpdmUgb3B0aW1pemF0aW9ucyBvdmVyIGFuIGluZGV4IHF1ZXJ5LCBzdWNoIGFzIGNvbnN0YW50IGZvbGRpbmcgYW5kIGRlLW5lc3RpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gb3B0aW1pemVRdWVyeShxdWVyeTogSW5kZXhRdWVyeSk6IEluZGV4UXVlcnkge1xuICAgIHF1ZXJ5ID0gZGVuZXN0KHF1ZXJ5KTtcbiAgICBxdWVyeSA9IGNvbnN0YW50Zm9sZChxdWVyeSk7XG5cbiAgICByZXR1cm4gcXVlcnk7XG59XG5cbi8qKiBEZS1uZXN0IHJlY3Vyc2l2ZWx5IG5lc3RlZCBBTkQgYW5kIE9SIHF1ZXJpZXMgaW50byBhIHNpbmdsZSB0b3AtbGV2ZWwgYW5kL29yLiAqL1xuZnVuY3Rpb24gZGVuZXN0KHF1ZXJ5OiBJbmRleFF1ZXJ5KTogSW5kZXhRdWVyeSB7XG4gICAgc3dpdGNoIChxdWVyeS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgICAgIGNvbnN0IGFuZHMgPSBxdWVyeS5lbGVtZW50cy5mbGF0TWFwKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZml4ZWQgPSBkZW5lc3QoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpeGVkLnR5cGUgPT09IFwiYW5kXCIpIHJldHVybiBmaXhlZC5lbGVtZW50cztcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBbZml4ZWRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImFuZFwiLCBlbGVtZW50czogYW5kcyB9O1xuICAgICAgICBjYXNlIFwib3JcIjpcbiAgICAgICAgICAgIGNvbnN0IG9ycyA9IHF1ZXJ5LmVsZW1lbnRzLmZsYXRNYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXhlZCA9IGRlbmVzdChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZml4ZWQudHlwZSA9PT0gXCJvclwiKSByZXR1cm4gZml4ZWQuZWxlbWVudHM7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gW2ZpeGVkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJvclwiLCBlbGVtZW50czogb3JzIH07XG4gICAgICAgIGNhc2UgXCJub3RcIjpcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwibm90XCIsIGVsZW1lbnQ6IGRlbmVzdChxdWVyeS5lbGVtZW50KSB9O1xuICAgICAgICBjYXNlIFwiY2hpbGQtb2ZcIjpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgeyBwYXJlbnRzOiBkZW5lc3QocXVlcnkucGFyZW50cykgfSk7XG4gICAgICAgIGNhc2UgXCJwYXJlbnQtb2ZcIjpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgeyBjaGlsZHJlbjogZGVuZXN0KHF1ZXJ5LmNoaWxkcmVuKSB9KTtcbiAgICAgICAgY2FzZSBcImxpbmtlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5LCB7IHNvdXJjZTogZGVuZXN0KHF1ZXJ5LnNvdXJjZSkgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxufVxuXG4vKiogUGVyZm9ybSBjb25zdGFudCBmb2xkaW5nIGJ5IGVsaW1pbmF0aW5nIGRlYWQgJ3RydWUnIGFuZCAnZmFsc2UnIHRlcm1zLiAqL1xuZnVuY3Rpb24gY29uc3RhbnRmb2xkKHF1ZXJ5OiBJbmRleFF1ZXJ5KTogSW5kZXhRdWVyeSB7XG4gICAgc3dpdGNoIChxdWVyeS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgICAgIGNvbnN0IGFjaGlsZHJlbiA9IFtdIGFzIEluZGV4UXVlcnlbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcXVlcnkuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb2xkZWQgPSBjb25zdGFudGZvbGQoY2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgLy8gRWxpbWluYXRlICd0cnVlJyBjb25zdGFudHMgYW5kIGVsaW1pbmF0ZSB0aGUgZW50aXJlIGFuZCBvbiBhICdmYWxzZScgY29uc3RhbnQuXG4gICAgICAgICAgICAgICAgaWYgKGZvbGRlZC50eXBlID09PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlZC5jb25zdGFudCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhY2hpbGRyZW4ucHVzaChmb2xkZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImFuZFwiLCBlbGVtZW50czogYWNoaWxkcmVuIH07XG4gICAgICAgIGNhc2UgXCJvclwiOlxuICAgICAgICAgICAgY29uc3Qgb2NoaWxkcmVuID0gW10gYXMgSW5kZXhRdWVyeVtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBxdWVyeS5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbGRlZCA9IGNvbnN0YW50Zm9sZChjaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBFbGltaW5hdGUgJ2ZhbHNlJyBjb25zdGFudHMgYW5kIHNob3J0IGNpcmN1aXQgb24gYSAndHJ1ZScgY29uc3RhbnQuXG4gICAgICAgICAgICAgICAgaWYgKGZvbGRlZC50eXBlID09PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb2xkZWQuY29uc3RhbnQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB7IHR5cGU6IFwiY29uc3RhbnRcIiwgY29uc3RhbnQ6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvY2hpbGRyZW4ucHVzaChmb2xkZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIm9yXCIsIGVsZW1lbnRzOiBvY2hpbGRyZW4gfTtcbiAgICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICAgICAgY29uc3QgZm9sZGVkID0gY29uc3RhbnRmb2xkKHF1ZXJ5LmVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAoZm9sZGVkLnR5cGUgPT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiY29uc3RhbnRcIiwgY29uc3RhbnQ6ICFmb2xkZWQuY29uc3RhbnQgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3RcIiwgZWxlbWVudDogZm9sZGVkIH07XG4gICAgICAgIGNhc2UgXCJjaGlsZC1vZlwiOlxuICAgICAgICAgICAgLy8gcGFyZW50cyA9IEVNUFRZIG1lYW5zIHRoaXMgd2lsbCBhbHNvIGJlIGVtcHR5LlxuICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IGNvbnN0YW50Zm9sZChxdWVyeS5wYXJlbnRzKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRzLnR5cGUgPT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghcGFyZW50cy5jb25zdGFudCkgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJlbnRzLmNvbnN0YW50ICYmIHF1ZXJ5LmluY2x1c2l2ZSkgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnksIHsgcGFyZW50cyB9KTtcbiAgICAgICAgY2FzZSBcInBhcmVudC1vZlwiOlxuICAgICAgICAgICAgLy8gY2hpbGRyZW4gPSBFTVBUWSBtZWFucyB0aGlzIHdpbGwgYWxzbyBiZSBlbXB0eS5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY29uc3RhbnRmb2xkKHF1ZXJ5LmNoaWxkcmVuKTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi50eXBlID09PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuLmNvbnN0YW50KSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkcmVuLmNvbnN0YW50ICYmIHF1ZXJ5LmluY2x1c2l2ZSkgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnksIHsgY2hpbGRyZW4gfSk7XG4gICAgICAgIGNhc2UgXCJsaW5rZWRcIjpcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnN0YW50Zm9sZChxdWVyeS5zb3VyY2UpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSBcImNvbnN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5jb25zdGFudCkgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2UuY29uc3RhbnQgJiYgcXVlcnkuaW5jbHVzaXZlKSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgeyBzb3VyY2UgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSW5kZXggUXVlcnkgRXhlY3V0b3IgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKiBJbnRlcmZhY2UgcHJvdmlkZWQgdG8gdGhlIHF1ZXJ5IGV4ZWN1dG9yIHRvIHJlc29sdmUgcXVlcnkgbGVhZiBub2RlcyAobGlrZSBcImZpbmQgYWxsIHBhZ2VzIG1hdGNoaW5nICcjdGFnJ1wiKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhSZXNvbHZlcjxUPiB7XG4gICAgLyoqIFRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIG9iamVjdHMuICovXG4gICAgdW5pdmVyc2U6IFNldDxUPjtcblxuICAgIC8qKiBSZXNvbHZlIGFuIGFyYml0cmFyeSBpbmRleCBzb3VyY2UgKGxpa2UgXCJmaW5kIGFsbCBwYWdlcyBtYXRjaGluZyAnI3RhZydcIikgaW50byBhIGZpbHRlci4gICovXG4gICAgcmVzb2x2ZShsZWFmOiBJbmRleFNvdXJjZSk6IFJlc3VsdDxGaWx0ZXI8VD4sIHN0cmluZz47XG5cbiAgICAvKiogUmVzb2x2ZSBhbiBpbmRleCBwcmltaXRpdmUsIHdoaWNoIGlzIGdhcmF1bnRlZWQgdG8gbmV2ZXIgcmFpc2UgYW4gZXhjZXB0aW9uLiAqL1xuICAgIHJlc29sdmVQcmltaXRpdmUobGVhZjogSW5kZXhQcmltaXRpdmUpOiBGaWx0ZXI8VD47XG5cbiAgICAvKiogTG9hZCBhIHNwZWNpZmljIG9iamVjdCBpZiBhdmFpbGFibGUuICovXG4gICAgbG9hZChpZDogVCk6IEluZGV4YWJsZSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEV4ZWN1dGUgYSBxdWVyeSwgdXNpbmcgdGhlIGdpdmVuIHJlc29sdmVyIHRvIGV4ZWN1dGUgdGhlIGxlYWYgbm9kZXMgYW5kIHRoZSBnaXZlbiBldmFsdWF0b3IgdG8gcmVzb2x2ZSBleHByZXNzaW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlPFQ+KFxuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5LFxuICAgIHJlc29sdmVyOiBJbmRleFJlc29sdmVyPFQ+LFxuICAgIGV2YWx1YXRvcjogRXZhbHVhdG9yXG4pOiBSZXN1bHQ8RmlsdGVyPFQ+LCBzdHJpbmc+IHtcbiAgICByZXR1cm4gc2ltcGxpZnkocXVlcnksIHJlc29sdmVyKS5mbGF0TWFwKCh0cmVlKSA9PiBjb2xsYXBzZSh0cmVlLCByZXNvbHZlciwgZXZhbHVhdG9yKSk7XG59XG5cbi8qKiBTaW1wbGlmeSBhIHRyZWUsIGNvbWJpbmluZyBwcmltaXRpdmVzIGluIEFORHMvT1JzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsaWZ5PFQ+KHF1ZXJ5OiBJbmRleFF1ZXJ5LCByZXNvbHZlcjogSW5kZXhSZXNvbHZlcjxUPik6IFJlc3VsdDxGaWx0ZXJUcmVlPFQ+LCBzdHJpbmc+IHtcbiAgICBzd2l0Y2ggKHF1ZXJ5LnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImFuZFwiOlxuICAgICAgICAgICAgLy8gVE9ETzogRWFybHkgcmV0dXJuIG9uIGEgTk9USElORyBpbnNpZGUgdGhlIG1hcEFsbCBsb29wLlxuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5tYXBBbGwocXVlcnkuZWxlbWVudHMsIChjaGlsZCkgPT4gc2ltcGxpZnkoY2hpbGQsIHJlc29sdmVyKSkubWFwKChlbGVtZW50cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IGVsZW1lbnRzLmZsYXRNYXAoKGVsZW1lbnQpID0+XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gXCJhbmRcIiA/IGVsZW1lbnQuZWxlbWVudHMgOiBbZWxlbWVudF1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXI6IEZpbHRlclRyZWU8VD5bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW1pdGl2ZSA9IEZpbHRlcnMubGF6eUludGVyc2VjdChmbGF0dGVuZWQsIChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwiZmlsdGVyXCIpIHJldHVybiBlbGVtZW50LmZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdGhlci5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gRWFybHkgcmV0dXJuIG9uIE5PVEhJTkcgKG5vdGhpbmcgd2lsbCBtYXRjaCksIGFuZCBza2lwIG9uIE5PVEhJTkcuXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZS50eXBlID09PSBcIm5vdGhpbmdcIikgcmV0dXJuIHsgdHlwZTogXCJmaWx0ZXJcIiwgZmlsdGVyOiBGaWx0ZXJzLk5PVEhJTkcgfTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmUudHlwZSAhPSBcImV2ZXJ5dGhpbmdcIikgb3RoZXIucHVzaChGaWx0ZXJUcmVlcy5maWx0ZXIocHJpbWl0aXZlKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyVHJlZXMuYW5kKG90aGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwib3JcIjpcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQubWFwQWxsKHF1ZXJ5LmVsZW1lbnRzLCAoY2hpbGQpID0+IHNpbXBsaWZ5KGNoaWxkLCByZXNvbHZlcikpLm1hcCgoZWxlbWVudHMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBlbGVtZW50cy5mbGF0TWFwKChlbGVtZW50KSA9PiAoZWxlbWVudC50eXBlID09PSBcIm9yXCIgPyBlbGVtZW50LmVsZW1lbnRzIDogW2VsZW1lbnRdKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcjogRmlsdGVyVHJlZTxUPltdID0gW107XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbWl0aXZlID0gRmlsdGVycy5sYXp5VW5pb24oZmxhdHRlbmVkLCAoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcImZpbHRlclwiKSByZXR1cm4gZWxlbWVudC5maWx0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIEVhcmx5IHJldHVybiBvbiBFVkVSWVRISU5HIChhbGwgd2lsbCBtYXRjaCksIGFuZCBza2lwIG9uIE5PVEhJTkcuXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZS50eXBlID09PSBcImV2ZXJ5dGhpbmdcIikgcmV0dXJuIHsgdHlwZTogXCJmaWx0ZXJcIiwgZmlsdGVyOiBGaWx0ZXJzLkVWRVJZVEhJTkcgfTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmUudHlwZSAhPSBcIm5vdGhpbmdcIikgb3RoZXIucHVzaChGaWx0ZXJUcmVlcy5maWx0ZXIocHJpbWl0aXZlKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVyVHJlZXMub3Iob3RoZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJub3RcIjpcbiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeShxdWVyeS5lbGVtZW50LCByZXNvbHZlcikubWFwKEZpbHRlclRyZWVzLm5vdCk7XG4gICAgICAgIGNhc2UgXCJleHByZXNzaW9uXCI6XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gaGFzVmFyaWFibGVzKHF1ZXJ5LmV4cHJlc3Npb24sIHJlc29sdmVyKTtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh7IHR5cGU6IFwic2NhblwiLCBjYW5kaWRhdGVzLCBleHByZXNzaW9uOiBxdWVyeS5leHByZXNzaW9uIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUocXVlcnkpLm1hcCgoZmlsdGVyKSA9PiAoeyB0eXBlOiBcImZpbHRlclwiLCBmaWx0ZXIgfSkpO1xuICAgIH1cbn1cblxuLyoqIENvbGxhcHNlIGEgZmlsdGVyIHRyZWUgYnkgZXZhbHVhdGluZyBhbGwgc2NhbnMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsYXBzZTxUPihcbiAgICB0cmVlOiBGaWx0ZXJUcmVlPFQ+LFxuICAgIHJlc29sdmVyOiBJbmRleFJlc29sdmVyPFQ+LFxuICAgIGV2YWx1YXRvcjogRXZhbHVhdG9yLFxuICAgIGxpbWl0OiBGaWx0ZXI8VD4gPSBGaWx0ZXJzLkVWRVJZVEhJTkdcbik6IFJlc3VsdDxGaWx0ZXI8VD4sIHN0cmluZz4ge1xuICAgIHN3aXRjaCAodHJlZS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJvclwiOlxuICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMubGF6eUZhaWxhYmxlVW5pb24odHJlZS5lbGVtZW50cywgKGVsZW1lbnQpID0+IGNvbGxhcHNlKGVsZW1lbnQsIHJlc29sdmVyLCBldmFsdWF0b3IsIGxpbWl0KSk7XG4gICAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgICAgIGNvbnN0IHByaW1pdGl2ZXMgPSB0cmVlLmVsZW1lbnRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZWxlbSk6IGVsZW0gaXMgeyB0eXBlOiBcImZpbHRlclwiOyBmaWx0ZXI6IEZpbHRlcjxUPiB9ID0+IGVsZW0udHlwZSA9PT0gXCJmaWx0ZXJcIilcbiAgICAgICAgICAgICAgICAubWFwKChmKSA9PiBmLmZpbHRlcik7XG4gICAgICAgICAgICBsZXQgcmVzdHJpY3RlZExpbWl0ID0gRmlsdGVycy5pbnRlcnNlY3QoW2xpbWl0LCAuLi5wcmltaXRpdmVzXSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0cmVlLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJmaWx0ZXJcIikgY29udGludWU7IC8vIEFscmVhZHkgaW4gdGhlIGludGVyc2VjdGlvbi5cblxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlRXZhbHVhdGVkID0gY29sbGFwc2UoZWxlbWVudCwgcmVzb2x2ZXIsIGV2YWx1YXRvciwgcmVzdHJpY3RlZExpbWl0KTtcbiAgICAgICAgICAgICAgICBpZiAoIW1heWJlRXZhbHVhdGVkLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUV2YWx1YXRlZC5jYXN0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBldmFsdWF0ZWQgPSBtYXliZUV2YWx1YXRlZC52YWx1ZTtcbiAgICAgICAgICAgICAgICByZXN0cmljdGVkTGltaXQgPSBGaWx0ZXJzLmludGVyc2VjdChbcmVzdHJpY3RlZExpbWl0LCBldmFsdWF0ZWRdKTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkTGltaXQudHlwZSA9PT0gXCJub3RoaW5nXCIpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLk5PVEhJTkcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdHJpY3RlZExpbWl0KTtcbiAgICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxhcHNlKHRyZWUuZWxlbWVudCwgcmVzb2x2ZXIsIGV2YWx1YXRvciwgbGltaXQpLm1hcChGaWx0ZXJzLm5lZ2F0ZSk7XG4gICAgICAgIGNhc2UgXCJmaWx0ZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh0cmVlLmZpbHRlcik7XG4gICAgICAgIGNhc2UgXCJzY2FuXCI6XG4gICAgICAgICAgICAvLyBMb2NhbCB0cmVlIGNhbmRpZGF0ZXMgKyBleGlzdGluZyBsaW1pdCB0byBwcm9kdWNlIHRoZSBtaW5pbWFsIHNldCBvZiBjYW5kaWRhdGVzLlxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IEZpbHRlcnMucmVzb2x2ZShGaWx0ZXJzLmludGVyc2VjdChbdHJlZS5jYW5kaWRhdGVzLCBsaW1pdF0pLCByZXNvbHZlci51bml2ZXJzZSk7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyU2NhbihjYW5kaWRhdGVzLCB0cmVlLmV4cHJlc3Npb24sIGV2YWx1YXRvciwgcmVzb2x2ZXIpLm1hcChGaWx0ZXJzLmF0b20pO1xuICAgIH1cbn1cblxuLyoqIFNjYW4gb3ZlciBhbGwgY2FuZGlkYXRlIG9iamVjdHMsIHJldHVybmluZyBvYmplY3RzIGZvciB3aGljaCB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiByZXNvbHZlcyB0byB0cnVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclNjYW48VD4oXG4gICAgY2FuZGlkYXRlczogU2V0PFQ+LFxuICAgIGV4cHI6IEV4cHJlc3Npb24sXG4gICAgZXZhbHVhdG9yOiBFdmFsdWF0b3IsXG4gICAgcmVzb2x2ZXI6IEluZGV4UmVzb2x2ZXI8VD5cbik6IFJlc3VsdDxTZXQ8VD4sIHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHJlc29sdmVyLmxvYWQoY2FuZGlkYXRlKTtcbiAgICAgICAgaWYgKCFvYmplY3QpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHIsIFZhcmlhYmxlcy5pbmZlcihvYmplY3QpKTtcbiAgICAgICAgaWYgKCF2YWx1ZS5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYEVycm9yIHdoaWxlIGV2YWx1YXRpbmcgZXhwcmVzc2lvbiBcIiR7RXhwcmVzc2lvbnMudG9TdHJpbmcoZXhwcil9XCI6ICR7dmFsdWUuZXJyb3J9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoTGl0ZXJhbHMuaXNUcnV0aHkodmFsdWUudmFsdWUpKSByZXN1bHQuYWRkKGNhbmRpZGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0KTtcbn1cblxuLyoqIEZpbHRlcnMgYW4gZXhwcmVzc2lvbiB0byBmaW5kIHBhZ2VzIHRoYXQgaGF2ZSB0aGUgdmFyaWFibGVzIGZvciB0aGF0IGV4cHJlc3Npb24uICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhcmlhYmxlczxUPihleHByOiBFeHByZXNzaW9uLCByZXNvbHZlcjogSW5kZXhSZXNvbHZlcjxUPik6IEZpbHRlcjxUPiB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gRXhwcmVzc2lvbnMudW5ib3VuZFZhcmlhYmxlcyhleHByLCBuZXcgU2V0KFtFeHByZXNzaW9ucy5ST1csIFwidGhpc1wiXSkpO1xuXG4gICAgLy8gdmFyaWFibGVzID0gMCBpbXBsaWVzcyBzb21lIHdlaXJkIGZ1bmN0aW9uIG9yIGNvbnN0YW50IGV4cHJlc3Npb24uXG4gICAgLy8gVE9ETzogd2UgY2FuIHByb2JhYmx5IGV2YWx1YXRlIGl0IHdpdGhvdXQgZXZlbiBzY2FubmluZyB0byBgdHJ1ZWAgb3IgYGZhbHNlYCBidXQgdG8gYmUgZGVmZW5zaXZlIGhhdmUgdG8gcmV0dXJuIGV2ZXJ5dGhpbmcgZm9yIG5vdy5cbiAgICBpZiAodmFyaWFibGVzLnNpemUgPT0gMCkgcmV0dXJuIEZpbHRlcnMuRVZFUllUSElORztcblxuICAgIHJldHVybiBGaWx0ZXJzLmxhenlVbmlvbih2YXJpYWJsZXMsICh2YXJpYWJsZSkgPT4gcmVzb2x2ZXIucmVzb2x2ZVByaW1pdGl2ZSh7IHR5cGU6IFwiZmllbGRcIiwgdmFsdWU6IHZhcmlhYmxlIH0pKTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBGaWx0ZXIgVHJlZXMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJUcmVlPFQ+ID1cbiAgICB8IHsgdHlwZTogXCJhbmRcIjsgZWxlbWVudHM6IEZpbHRlclRyZWU8VD5bXSB9XG4gICAgfCB7IHR5cGU6IFwib3JcIjsgZWxlbWVudHM6IEZpbHRlclRyZWU8VD5bXSB9XG4gICAgfCB7IHR5cGU6IFwibm90XCI7IGVsZW1lbnQ6IEZpbHRlclRyZWU8VD4gfVxuICAgIHwgeyB0eXBlOiBcImZpbHRlclwiOyBmaWx0ZXI6IEZpbHRlcjxUPiB9XG4gICAgfCB7IHR5cGU6IFwic2NhblwiOyBjYW5kaWRhdGVzOiBGaWx0ZXI8VD47IGV4cHJlc3Npb246IEV4cHJlc3Npb24gfTtcblxuZXhwb3J0IG5hbWVzcGFjZSBGaWx0ZXJUcmVlcyB7XG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxUPihmaWx0ZXI6IEZpbHRlcjxUPik6IEZpbHRlclRyZWU8VD4ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImZpbHRlclwiLCBmaWx0ZXIgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gYW5kPFQ+KGNoaWxkcmVuOiBGaWx0ZXJUcmVlPFQ+W10pOiBGaWx0ZXJUcmVlPFQ+IHtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAwKSByZXR1cm4gZmlsdGVyKEZpbHRlcnMuRVZFUllUSElORyk7XG4gICAgICAgIGVsc2UgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAxKSByZXR1cm4gY2hpbGRyZW5bMF07XG4gICAgICAgIGVsc2UgcmV0dXJuIHsgdHlwZTogXCJhbmRcIiwgZWxlbWVudHM6IGNoaWxkcmVuIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9yPFQ+KGNoaWxkcmVuOiBGaWx0ZXJUcmVlPFQ+W10pOiBGaWx0ZXJUcmVlPFQ+IHtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAwKSByZXR1cm4gZmlsdGVyKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgIGVsc2UgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAxKSByZXR1cm4gY2hpbGRyZW5bMF07XG4gICAgICAgIGVsc2UgcmV0dXJuIHsgdHlwZTogXCJvclwiLCBlbGVtZW50czogY2hpbGRyZW4gfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbm90PFQ+KGNoaWxkOiBGaWx0ZXJUcmVlPFQ+KTogRmlsdGVyVHJlZTxUPiB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSBcImZpbHRlclwiKSByZXR1cm4geyB0eXBlOiBcImZpbHRlclwiLCBmaWx0ZXI6IEZpbHRlcnMubmVnYXRlKGNoaWxkLmZpbHRlcikgfTtcbiAgICAgICAgZWxzZSByZXR1cm4geyB0eXBlOiBcIm5vdFwiLCBlbGVtZW50OiBjaGlsZCB9O1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBMaW5rLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVycyB9IGZyb20gXCJleHByZXNzaW9uL2ZpbHRlcnNcIjtcbmltcG9ydCB7IEZvbGRlckluZGV4IH0gZnJvbSBcImluZGV4L3N0b3JhZ2UvZm9sZGVyXCI7XG5pbXBvcnQgeyBJbnZlcnRlZEluZGV4IH0gZnJvbSBcImluZGV4L3N0b3JhZ2UvaW52ZXJ0ZWRcIjtcbmltcG9ydCB7IEluZGV4UHJpbWl0aXZlLCBJbmRleFF1ZXJ5LCBJbmRleFNvdXJjZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlLCBMSU5LQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBUQUdHQUJMRV9UWVBFIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgTWV0YWRhdGFDYWNoZSwgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IE1hcmtkb3duUGFnZSB9IGZyb20gXCIuL3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBleHRyYWN0U3VidGFncywgbm9ybWFsaXplSGVhZGVyRm9yTGluayB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IEZsYXRRdWV1ZSBmcm9tIFwiZmxhdHF1ZXVlXCI7XG5pbXBvcnQgeyBCVHJlZUZpZWxkSW5kZXgsIEV2ZXJ5dGhpbmdGaWVsZEluZGV4LCBGaWVsZEluZGV4LCBJZEZpZWxkSW5kZXgsIFNldEZpZWxkSW5kZXggfSBmcm9tIFwiaW5kZXgvc3RvcmFnZS9maWVsZHNcIjtcbmltcG9ydCB7IEZJRUxEQkVBUklOR19UWVBFLCBGaWVsZCwgRmllbGRiZWFyaW5nIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IEluZGV4UmVzb2x2ZXIsIGV4ZWN1dGUsIG9wdGltaXplUXVlcnkgfSBmcm9tIFwiaW5kZXgvc3RvcmFnZS9xdWVyeS1leGVjdXRvclwiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcbmltcG9ydCB7IEV2YWx1YXRvciB9IGZyb20gXCJleHByZXNzaW9uL2V2YWx1YXRvclwiO1xuaW1wb3J0IHsgU2V0dGluZ3MgfSBmcm9tIFwic2V0dGluZ3NcIjtcblxuLyoqIENlbnRyYWwsIGluZGV4IHN0b3JhZ2UgZm9yIGRhdGFjb3JlIHZhbHVlcy4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhc3RvcmUge1xuICAgIC8qKiBUaGUgY3VycmVudCBzdG9yZSByZXZpc2lvbi4gKi9cbiAgICBwdWJsaWMgcmV2aXNpb246IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBNYXN0ZXIgY29sbGVjdGlvbiBvZiBhbGwgb2JqZWN0IElEcy4gVGhpcyBpcyB0ZWNobmljYWxseSByZWR1bmRhbnQgd2l0aCBvYmplY3RzLmtleXMoKSBidXQgdGhpcyBpcyBhIGZhc3Qgc2V0XG4gICAgICogY29tcGFyZWQgdG8gYW4gaXRlcmF0b3IuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpZHM6IFNldDxzdHJpbmc+O1xuICAgIC8qKiBUaGUgbWFzdGVyIGNvbGxlY3Rpb24gb2YgQUxMIGluZGV4ZWQgb2JqZWN0cywgbWFwcGluZyBJRCAtPiB0aGUgb2JqZWN0LiAqL1xuICAgIHByaXZhdGUgb2JqZWN0czogTWFwPHN0cmluZywgSW5kZXhhYmxlPjtcbiAgICAvKiogTWFwIHBhcmVudCBvYmplY3QgdG8gaXQncyBkaXJlY3QgY2hpbGQgb2JqZWN0cy4gKi9cbiAgICBwcml2YXRlIGNoaWxkcmVuOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj47XG5cbiAgICAvLyBJbmRpY2VzIGZvciB0aGUgdmFyaW91cyBhY2NlcHRlZCBxdWVyeSB0eXBlcy4gVGhlc2Ugd2lsbCBwcm9iYWJseSBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCB0eXBlIGxhdGVyLlxuICAgIC8qKiBHbG9iYWwgbWFwIG9mIG9iamVjdCB0eXBlIC0+IGxpc3Qgb2YgYWxsIG9iamVjdHMgb2YgdGhhdCB0eXBlLiAqL1xuICAgIHByaXZhdGUgdHlwZXM6IEludmVydGVkSW5kZXg8c3RyaW5nPjtcbiAgICAvKiogVHJhY2tzIGV4YWN0IHRhZyBvY2N1cmVuY2UgaW4gb2JqZWN0cy4gKi9cbiAgICBwcml2YXRlIGV0YWdzOiBJbnZlcnRlZEluZGV4PHN0cmluZz47XG4gICAgLyoqIFRyYWNrcyB0YWcgb2NjdXJlbmNlIGluIG9iamVjdHMuICovXG4gICAgcHJpdmF0ZSB0YWdzOiBJbnZlcnRlZEluZGV4PHN0cmluZz47XG4gICAgLyoqIE1hcHMgbGluayBzdHJpbmdzIHRvIHRoZSBvYmplY3QgSURzIHRoYXQgbGluayB0byB0aG9zZSBsaW5rcy4gKi9cbiAgICBwcml2YXRlIGxpbmtzOiBJbnZlcnRlZEluZGV4PHN0cmluZz47XG4gICAgLyoqIFRyYWNrcyB0aGUgZXhpc3RlbmNlIG9mIGZpZWxkcyAoaW5kZXhlZCBieSBub3JtYWxpemVkIGtleSBuYW1lKS4gKi9cbiAgICBwcml2YXRlIGZpZWxkczogTWFwPHN0cmluZywgRmllbGRJbmRleD47XG4gICAgLyoqXG4gICAgICogUXVpY2sgc2VhcmNoZXMgZm9yIG9iamVjdHMgaW4gZm9sZGVycy4gVGhpcyBpbmRleCBvbmx5IHRyYWNrcyB0b3AtbGV2ZWwgb2JqZWN0cyAtIGl0IGlzIGV4cGFuZGVkIHJlY3Vyc2l2ZWx5IHRvXG4gICAgICogZmluZCBjaGlsZCBvYmplY3RzLlxuICAgICAqL1xuICAgIHByaXZhdGUgZm9sZGVyOiBGb2xkZXJJbmRleDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmF1bHQ6IFZhdWx0LCBwdWJsaWMgbWV0YWRhdGFDYWNoZTogTWV0YWRhdGFDYWNoZSwgcHVibGljIHNldHRpbmdzOiBTZXR0aW5ncykge1xuICAgICAgICB0aGlzLnJldmlzaW9uID0gMDtcbiAgICAgICAgdGhpcy5pZHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMub2JqZWN0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IG5ldyBNYXAoKTtcblxuICAgICAgICB0aGlzLnR5cGVzID0gbmV3IEludmVydGVkSW5kZXgoKTtcbiAgICAgICAgdGhpcy5ldGFncyA9IG5ldyBJbnZlcnRlZEluZGV4KCk7XG4gICAgICAgIHRoaXMudGFncyA9IG5ldyBJbnZlcnRlZEluZGV4KCk7XG4gICAgICAgIHRoaXMubGlua3MgPSBuZXcgSW52ZXJ0ZWRJbmRleCgpO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuX2luaXRpYWxpemVGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5mb2xkZXIgPSBuZXcgRm9sZGVySW5kZXgodmF1bHQpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzdG9yZS4gKi9cbiAgICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cy5zaXplO1xuICAgIH1cblxuICAgIC8qKiBVcGRhdGUgdGhlIHJldmlzaW9uIG9mIHRoZSBkYXRhc3RvcmUgZHVlIHRvIGFuIGV4dGVybmFsIHVwZGF0ZS4gKi9cbiAgICBwdWJsaWMgdG91Y2goKSB7XG4gICAgICAgIHRoaXMucmV2aXNpb24gKz0gMTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBhbiBvYmplY3QgYnkgSUQuICovXG4gICAgcHVibGljIGxvYWQoaWQ6IHN0cmluZyk6IEluZGV4YWJsZSB8IHVuZGVmaW5lZDtcbiAgICAvKiogTG9hZCBhIGxpc3Qgb2Ygb2JqZWN0cyBieSBJRC4gKi9cbiAgICBwdWJsaWMgbG9hZChpZHM6IHN0cmluZ1tdKTogSW5kZXhhYmxlW107XG5cbiAgICAvKiogTG9hZCBhbiBvYmplY3QgYnkgSUQgb3IgbGlzdCBvZiBJRHMuICovXG4gICAgbG9hZChpZDogc3RyaW5nIHwgc3RyaW5nW10pOiBJbmRleGFibGUgfCBJbmRleGFibGVbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkLm1hcCgoYSkgPT4gdGhpcy5sb2FkKGEpKS5maWx0ZXIoKG9iaik6IG9iaiBpcyBJbmRleGFibGUgPT4gb2JqICE9PSB1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cy5nZXQoaWQpO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHVwIHNhbmUgZmllbGQgZGVmYXVsdHMgZm9yIHNldmVyYWwgaW5kZXhhYmxlIGZpZWxkcy4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRmllbGRzKCk6IE1hcDxzdHJpbmcsIEZpZWxkSW5kZXg+IHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gbmV3IE1hcDxzdHJpbmcsIEZpZWxkSW5kZXg+KCk7XG5cbiAgICAgICAgLy8gU3BlY2lhbGl6ZSBpbmRpY2VzIGZvciAkaWQgYW5kIHRoZSBvdGhlciBvbW5pcHJlc2VudCBmaWVsZCB2YWx1ZXMuXG4gICAgICAgIGZpZWxkcy5zZXQoXG4gICAgICAgICAgICBcIiRpZFwiLFxuICAgICAgICAgICAgbmV3IElkRmllbGRJbmRleChcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmlkcyxcbiAgICAgICAgICAgICAgICAoaWQpID0+IHRoaXMub2JqZWN0cy5oYXMoaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZpZWxkcy5zZXQoXCIkdHlwZXNcIiwgbmV3IEV2ZXJ5dGhpbmdGaWVsZEluZGV4KCgpID0+IHRoaXMuaWRzKSk7XG4gICAgICAgIGZpZWxkcy5zZXQoXCIkdHlwZW5hbWVcIiwgbmV3IEV2ZXJ5dGhpbmdGaWVsZEluZGV4KCgpID0+IHRoaXMuaWRzKSk7XG4gICAgICAgIGZpZWxkcy5zZXQoXCIkcmV2aXNpb25cIiwgbmV3IEV2ZXJ5dGhpbmdGaWVsZEluZGV4KCgpID0+IHRoaXMuaWRzKSk7XG5cbiAgICAgICAgLy8gT3B0aW1pemUgb3ZlciAkY29tcGxldGVkIGFuZCAkc3RhdHVzIGxvb2t1cHMgZm9yIHRhc2tzLlxuICAgICAgICBmaWVsZHMuc2V0KFwiJGNvbXBsZXRlZFwiLCBuZXcgQlRyZWVGaWVsZEluZGV4KCkpO1xuICAgICAgICBmaWVsZHMuc2V0KFwiJHN0YXR1c1wiLCBuZXcgQlRyZWVGaWVsZEluZGV4KCkpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcmUgdGhlIGdpdmVuIG9iamVjdCwgbWFraW5nIGl0IGltbWVkaWF0ZWx5IHF1ZXJ5YWJsZS4gU3RvcmluZyBhbiBvYmplY3RcbiAgICAgKiB0YWtlcyBvd25lcnNoaXAgb3ZlciBpdCwgYW5kIGluZGV4LXNwZWNpZmljIHZhcmlhYmxlcyAocHJlZml4ZWQgdmlhICckJykgbWF5IGJlXG4gICAgICogYWRkZWQgdG8gdGhlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RvcmU8VCBleHRlbmRzIEluZGV4YWJsZT4ob2JqZWN0OiBUIHwgVFtdLCBzdWJzdG9yZXI/OiBTdWJzdG9yZXI8VD4pIHtcbiAgICAgICAgdGhpcy5fcmVjdXJzaXZlU3RvcmUob2JqZWN0LCB0aGlzLnJldmlzaW9uKyssIHN1YnN0b3JlciwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgc3RvcmUgb2JqZWN0cyB1c2luZyBhIHBvdGVudGlhbCBzdWJpbmRleGVyLiAqL1xuICAgIHByaXZhdGUgX3JlY3Vyc2l2ZVN0b3JlPFQgZXh0ZW5kcyBJbmRleGFibGU+KFxuICAgICAgICBvYmplY3Q6IFQgfCBUW10sXG4gICAgICAgIHJldmlzaW9uOiBudW1iZXIsXG4gICAgICAgIHN1YnN0b3Jlcj86IFN1YnN0b3JlcjxUPixcbiAgICAgICAgcGFyZW50PzogSW5kZXhhYmxlXG4gICAgKSB7XG4gICAgICAgIC8vIEhhbmRsZSBhcnJheSBpbnB1dHMuXG4gICAgICAgIGlmIChMaXRlcmFscy5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVjdXJzaXZlU3RvcmUoZWxlbWVudCwgcmV2aXNpb24sIHN1YnN0b3JlciwgcGFyZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVsZXRlIHRoZSBwcmV2aW91cyBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCBpZiBwcmVzZW50LlxuICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBvbmx5IGFjdHVhbGx5IG5lZWQgdG8gZGVsZXRlIHRoZSByb290IG9iamVjdHMuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVJlY3Vyc2l2ZShvYmplY3QuJGlkKTtcblxuICAgICAgICAvLyBBc3NpZ24gdGhlIG5leHQgcmV2aXNpb24gdG8gdGhpcyBvYmplY3Q7IGluZGV4ZWQgb2JqZWN0cyBhcmUgaW1wbGllZCB0byBiZSByb290IG9iamVjdHMuXG4gICAgICAgIG9iamVjdC4kcmV2aXNpb24gPSByZXZpc2lvbjtcbiAgICAgICAgb2JqZWN0LiRwYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICAgICAgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGFwcHJvcHJpYXRlIG9iamVjdCBtYXBzLlxuICAgICAgICB0aGlzLmlkcy5hZGQob2JqZWN0LiRpZCk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5zZXQob2JqZWN0LiRpZCwgb2JqZWN0KTtcblxuICAgICAgICAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgcGFyZW50IGNoaWxkcmVuIG1hcC5cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuLmhhcyhwYXJlbnQuJGlkKSkgdGhpcy5jaGlsZHJlbi5zZXQocGFyZW50LiRpZCwgbmV3IFNldCgpKTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZ2V0KHBhcmVudC4kaWQpIS5hZGQob2JqZWN0LiRpZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbmRleChvYmplY3QpO1xuXG4gICAgICAgIC8vIEluZGV4IGFueSBzdWJvcmRpbmF0ZSBvYmplY3RzIGluIHRoaXMgb2JqZWN0LlxuICAgICAgICBzdWJzdG9yZXI/LihvYmplY3QsIChpbmNvbWluZywgc3ViaW5kZXgpID0+IHRoaXMuX3JlY3Vyc2l2ZVN0b3JlKGluY29taW5nLCByZXZpc2lvbiwgc3ViaW5kZXgsIG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKiBEZWxldGUgYW4gb2JqZWN0IGJ5IElEIGZyb20gdGhlIGluZGV4LCByZWN1cnNpdmVseSBkZWxldGluZyBhbnkgY2hpbGQgb2JqZWN0cyBhcyB3ZWxsLiAqL1xuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fZGVsZXRlUmVjdXJzaXZlKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5yZXZpc2lvbisrO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEludGVybmFsIG1ldGhvZCB0aGF0IGRvZXMgbm90IGJ1bXAgdGhlIHJldmlzaW9uLiAqL1xuICAgIHByaXZhdGUgX2RlbGV0ZVJlY3Vyc2l2ZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMub2JqZWN0cy5nZXQoaWQpO1xuICAgICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZGVsZXRlIGFsbCBjaGlsZCBvYmplY3RzLlxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4uZ2V0KGlkKTtcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVJlY3Vyc2l2ZShjaGlsZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERyb3AgdGhpcyBvYmplY3QgZnJvbSB0aGUgYXBwcm9wcmlhdGUgbWFwcy5cbiAgICAgICAgdGhpcy5fdW5pbmRleChvYmplY3QpO1xuICAgICAgICB0aGlzLmlkcy5kZWxldGUoaWQpO1xuICAgICAgICB0aGlzLm9iamVjdHMuZGVsZXRlKGlkKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEFkZCB0aGUgZ2l2ZW4gaW5kZXhhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZSBpbmRpY2VzLiAqL1xuICAgIHByaXZhdGUgX2luZGV4KG9iamVjdDogSW5kZXhhYmxlKSB7XG4gICAgICAgIHRoaXMudHlwZXMuc2V0KG9iamVjdC4kaWQsIG9iamVjdC4kdHlwZXMpO1xuXG4gICAgICAgIC8vIEV4YWN0IGFuZCBkZXJpdmVkIHRhZ3MuXG4gICAgICAgIGlmIChvYmplY3QuJHR5cGVzLmNvbnRhaW5zKFRBR0dBQkxFX1RZUEUpICYmIGl0ZXJhYmxlRXhpc3RzKG9iamVjdCwgXCIkdGFnc1wiKSkge1xuICAgICAgICAgICAgY29uc3QgdGFncyA9IG9iamVjdC4kdGFncyBhcyBTZXQ8c3RyaW5nPjtcblxuICAgICAgICAgICAgdGhpcy5ldGFncy5zZXQob2JqZWN0LiRpZCwgdGFncyk7XG4gICAgICAgICAgICB0aGlzLnRhZ3Muc2V0KG9iamVjdC4kaWQsIGV4dHJhY3RTdWJ0YWdzKHRhZ3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4YWN0IGFuZCBkZXJpdmVkIGxpbmtzLlxuICAgICAgICBpZiAob2JqZWN0LiR0eXBlcy5jb250YWlucyhMSU5LQkVBUklOR19UWVBFKSAmJiBpdGVyYWJsZUV4aXN0cyhvYmplY3QsIFwiJGxpbmtzXCIpKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtzLnNldChcbiAgICAgICAgICAgICAgICBvYmplY3QuJGlkLFxuICAgICAgICAgICAgICAgIChvYmplY3QuJGxpbmtzIGFzIExpbmtbXSkubWFwKChsaW5rKSA9PiBsaW5rLm9ic2lkaWFuTGluaygpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFsbCBmaWVsZHMgb24gYW4gb2JqZWN0LlxuICAgICAgICBpZiAob2JqZWN0LiR0eXBlcy5jb250YWlucyhGSUVMREJFQVJJTkdfVFlQRSkgJiYgXCJmaWVsZHNcIiBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2Ygb2JqZWN0LmZpZWxkcyBhcyBJdGVyYWJsZTxGaWVsZD4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtID0gZmllbGQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkcy5oYXMobm9ybSkpIHRoaXMuZmllbGRzLnNldChub3JtLCBuZXcgU2V0RmllbGRJbmRleCgpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLmdldChub3JtKSEuYWRkKG9iamVjdC4kaWQsIGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgdGhlIGdpdmVuIGluZGV4YWJsZSBmcm9tIGFsbCBpbmRpY2VzLiAqL1xuICAgIHByaXZhdGUgX3VuaW5kZXgob2JqZWN0OiBJbmRleGFibGUpIHtcbiAgICAgICAgdGhpcy50eXBlcy5kZWxldGUob2JqZWN0LiRpZCwgb2JqZWN0LiR0eXBlcyk7XG5cbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZXMuY29udGFpbnMoVEFHR0FCTEVfVFlQRSkgJiYgaXRlcmFibGVFeGlzdHMob2JqZWN0LCBcIiR0YWdzXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0YWdzID0gb2JqZWN0LiR0YWdzIGFzIFNldDxzdHJpbmc+O1xuXG4gICAgICAgICAgICB0aGlzLmV0YWdzLmRlbGV0ZShvYmplY3QuJGlkLCB0YWdzKTtcbiAgICAgICAgICAgIHRoaXMudGFncy5kZWxldGUob2JqZWN0LiRpZCwgZXh0cmFjdFN1YnRhZ3ModGFncykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZXMuY29udGFpbnMoTElOS0JFQVJJTkdfVFlQRSkgJiYgaXRlcmFibGVFeGlzdHMob2JqZWN0LCBcIiRsaW5rc1wiKSkge1xuICAgICAgICAgICAgLy8gQXNzdW1lIGxpbmtzIGFyZSBub3JtYWxpemVkIHdoZW4gZGVsZXRpbmcgdGhlbS4gQ291bGQgYmUgYnJva2VuIGJ1dCBJIGhvcGUgbm90LiBXZSBjYW4gYWx3YXlzIHVzZSBhIDItd2F5IGluZGV4IHRvXG4gICAgICAgICAgICAvLyBmaXggdGhpcyBpZiB3ZSBlbmNvdW50ZXIgbm9uLW5vcm1hbGl6ZWQgbGlua3MuXG4gICAgICAgICAgICB0aGlzLmxpbmtzLmRlbGV0ZShcbiAgICAgICAgICAgICAgICBvYmplY3QuJGlkLFxuICAgICAgICAgICAgICAgIChvYmplY3QuJGxpbmtzIGFzIExpbmtbXSkubWFwKChsaW5rKSA9PiBsaW5rLm9ic2lkaWFuTGluaygpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYmplY3QuJHR5cGVzLmNvbnRhaW5zKEZJRUxEQkVBUklOR19UWVBFKSAmJiBcImZpZWxkc1wiIGluIG9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBvYmplY3QuZmllbGRzIGFzIEl0ZXJhYmxlPEZpZWxkPikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm0gPSBmaWVsZC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmllbGRzLmhhcyhub3JtKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5nZXQobm9ybSkhLmRlbGV0ZShvYmplY3QuJGlkLCBmaWVsZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29tcGxldGVseSBjbGVhciB0aGUgZGF0YXN0b3JlIG9mIGFsbCB2YWx1ZXMuICovXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmlkcy5jbGVhcigpO1xuICAgICAgICB0aGlzLm9iamVjdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMudHlwZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy50YWdzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZXRhZ3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5saW5rcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmZpZWxkcy5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMucmV2aXNpb24rKztcbiAgICB9XG5cbiAgICAvKiogRmluZCB0aGUgY29ycmVzcG9uZGluZyBvYmplY3QgZm9yIGEgZ2l2ZW4gbGluay4gKi9cbiAgICBwdWJsaWMgcmVzb2x2ZUxpbmsocmF3TGluazogc3RyaW5nIHwgTGluaywgc291cmNlUGF0aD86IHN0cmluZyk6IEluZGV4YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBsaW5rID0gdHlwZW9mIHJhd0xpbmsgPT09IFwic3RyaW5nXCIgPyBMaW5rLnBhcnNlSW5uZXIocmF3TGluaykgOiByYXdMaW5rO1xuXG4gICAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rZGVzdCA9IHRoaXMubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChsaW5rLnBhdGgsIHNvdXJjZVBhdGgpO1xuICAgICAgICAgICAgaWYgKGxpbmtkZXN0KSBsaW5rID0gbGluay53aXRoUGF0aChsaW5rZGVzdC5wYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9iamVjdHMuZ2V0KGxpbmsucGF0aCk7XG4gICAgICAgIGlmICghZmlsZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobGluay50eXBlID09PSBcImZpbGVcIikgcmV0dXJuIGZpbGU7XG5cbiAgICAgICAgLy8gQmxvY2tzIGFuZCBoZWFkZXIgbGlua3MgY2FuIG9ubHkgcmVzb2x2ZSBpbnNpZGUgb2YgbWFya2Rvd24gZmlsZXMuXG4gICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBNYXJrZG93blBhZ2UpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChsaW5rLnR5cGUgPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBmaWxlLiRzZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgIChzZWMpID0+IG5vcm1hbGl6ZUhlYWRlckZvckxpbmsoc2VjLiR0aXRsZSkgPT0gbGluay5zdWJwYXRoIHx8IHNlYy4kdGl0bGUgPT0gbGluay5zdWJwYXRoXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoc2VjdGlvbikgcmV0dXJuIHNlY3Rpb247XG4gICAgICAgICAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAobGluay50eXBlID09PSBcImJsb2NrXCIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmaWxlLiRzZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gc2VjdGlvbi4kYmxvY2tzLmZpbmQoKGJsKSA9PiBibC4kYmxvY2tJZCA9PT0gbGluay5zdWJwYXRoKTtcblxuICAgICAgICAgICAgICAgIGlmIChibG9jaykgcmV0dXJuIGJsb2NrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgbGluayB0eXBlOiAke2xpbmsudHlwZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCB0aGUgZGF0YXN0b3JlIGZvciBhbGwgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBnaXZlbiBxdWVyeSwgcmV0dXJuaW5nIHRoZW1cbiAgICAgKiBhcyBhIGxpc3Qgb2YgaW5kZXhlZCBvYmplY3RzIGFsb25nIHdpdGggcGVyZm9ybWFuY2UgbWV0YWRhdGEuXG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaChxdWVyeTogSW5kZXhRdWVyeSwgc2V0dGluZ3M/OiBTZWFyY2hTZXR0aW5ncyk6IFJlc3VsdDxTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBjb25zdCBtYXliZUZpbHRlciA9IHRoaXMuX3NlYXJjaChxdWVyeSwgc2V0dGluZ3MpO1xuICAgICAgICBpZiAoIW1heWJlRmlsdGVyLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUZpbHRlci5jYXN0KCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEZpbHRlcnMucmVzb2x2ZShtYXliZUZpbHRlci52YWx1ZSwgdGhpcy5pZHMpO1xuXG4gICAgICAgIGNvbnN0IG9iamVjdHM6IEluZGV4YWJsZVtdID0gW107XG4gICAgICAgIGxldCBtYXhSZXZpc2lvbiA9IDA7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIHJlc3VsdCkge1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5vYmplY3RzLmdldChpZCk7XG4gICAgICAgICAgICBpZiAob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgbWF4UmV2aXNpb24gPSBNYXRoLm1heChtYXhSZXZpc2lvbiwgb2JqZWN0LiRyZXZpc2lvbiA/PyAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICByZXN1bHRzOiBvYmplY3RzLFxuICAgICAgICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMC4wLFxuICAgICAgICAgICAgcmV2aXNpb246IG1heFJldmlzaW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJuYWwgc2VhcmNoIHdoaWNoIHlpZWxkcyBhIGZpbHRlciBvZiByZXN1bHRzLiAqL1xuICAgIHByaXZhdGUgX3NlYXJjaChxdWVyeTogSW5kZXhRdWVyeSwgc2V0dGluZ3M/OiBTZWFyY2hTZXR0aW5ncyk6IFJlc3VsdDxGaWx0ZXI8c3RyaW5nPiwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBzZXR0aW5ncz8uc291cmNlUGF0aDtcbiAgICAgICAgY29uc3QgZmlsZSA9IHNvdXJjZVBhdGggPyB0aGlzLm9iamVjdHMuZ2V0KHNvdXJjZVBhdGgpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IGV2YWx1YXRvciA9IG5ldyBFdmFsdWF0b3IoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhpc3RzOiAocGF0aDogc3RyaW5nIHwgTGluaykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGluayh0eXBlb2YgcGF0aCA9PSBcInN0cmluZ1wiID8gTGluay5maWxlKHBhdGgpIDogcGF0aCwgc291cmNlUGF0aCkgIT0gbnVsbCxcbiAgICAgICAgICAgICAgICByZXNvbHZlOiAocGF0aDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMaW5rKHR5cGVvZiBwYXRoID09IFwic3RyaW5nXCIgPyBMaW5rLmZpbGUocGF0aCkgOiBwYXRoLCBzb3VyY2VQYXRoKSA/PyBudWxsLFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZTogKHBhdGg6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KHBhdGgsIHNvdXJjZVBhdGggPz8gXCJcIik/LnBhdGggPz8gcGF0aCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gU2V0IGB0aGlzYCBvbiB0aGUgZmlsZSBpZiBuZWVkZWQuXG4gICAgICAgIGlmIChmaWxlKSBldmFsdWF0b3Iuc2V0KFwidGhpc1wiLCBmaWxlKTtcblxuICAgICAgICBjb25zdCByZXNvbHZlcjogSW5kZXhSZXNvbHZlcjxzdHJpbmc+ID0ge1xuICAgICAgICAgICAgdW5pdmVyc2U6IHRoaXMuaWRzLFxuICAgICAgICAgICAgcmVzb2x2ZTogKGxlYWYpID0+IHRoaXMuX3Jlc29sdmVTb3VyY2UobGVhZiwgc2V0dGluZ3MpLFxuICAgICAgICAgICAgcmVzb2x2ZVByaW1pdGl2ZTogKGxlYWYpID0+IHRoaXMuX3Jlc29sdmVQcmltaXRpdmUobGVhZiwgc2V0dGluZ3MpLFxuICAgICAgICAgICAgbG9hZDogKGlkKSA9PiB0aGlzLmxvYWQoaWQpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBleGVjdXRlKG9wdGltaXplUXVlcnkocXVlcnkpLCByZXNvbHZlciwgZXZhbHVhdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlU291cmNlKHF1ZXJ5OiBJbmRleFNvdXJjZSwgc2V0dGluZ3M/OiBTZWFyY2hTZXR0aW5ncyk6IFJlc3VsdDxGaWx0ZXI8c3RyaW5nPiwgc3RyaW5nPiB7XG4gICAgICAgIHN3aXRjaCAocXVlcnkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImNoaWxkLW9mXCI6XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY29udmVydGluZyB0aGlzIHRvIGJlIGEgc2NhbiBpbnN0ZWFkIGZvciBhIG5vdGljYWJsZSBzcGVlZHVwLlxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlUGFyZW50cyA9IHRoaXMuX3NlYXJjaChxdWVyeS5wYXJlbnRzLCBzZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXliZVBhcmVudHMuc3VjY2Vzc2Z1bCkgcmV0dXJuIG1heWJlUGFyZW50cy5jYXN0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRzID0gbWF5YmVQYXJlbnRzLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChGaWx0ZXJzLmVtcHR5KHBhcmVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLk5PVEhJTkcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50cy50eXBlID09PSBcImV2ZXJ5dGhpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkuaW5jbHVzaXZlKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5FVkVSWVRISU5HKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHNldCBhbGwgY2hpbGRyZW4uIFRPRE86IENvbnNpZGVyIGNhY2hpbmcgdmlhIGEgYHBhcmVudHNgIG1hcC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMub2JqZWN0cy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuJHBhcmVudCkgYWxsQ2hpbGRyZW4uYWRkKGVsZW1lbnQuJGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oYWxsQ2hpbGRyZW4pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFBhcmVudHMgPSBGaWx0ZXJzLnJlc29sdmUocGFyZW50cywgdGhpcy5pZHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVzdWx0cyA9IG5ldyBTZXQ8c3RyaW5nPihxdWVyeS5pbmNsdXNpdmUgPyByZXNvbHZlZFBhcmVudHMgOiBbXSk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiByZXNvbHZlZFBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLl9pdGVyYXRlQ2hpbGRyZW4ocGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRSZXN1bHRzLmFkZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKGNoaWxkUmVzdWx0cykpO1xuICAgICAgICAgICAgY2FzZSBcInBhcmVudC1vZlwiOlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGNvbnZlcnRpbmcgdGhpcyB0byBiZSBhIHNjYW4gaW5zdGVhZCBmb3IgYSBub3RpY2FibGUgc3BlZWR1cC5cbiAgICAgICAgICAgICAgICBjb25zdCBtYXliZUNoaWxkcmVuID0gdGhpcy5fc2VhcmNoKHF1ZXJ5LmNoaWxkcmVuLCBzZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXliZUNoaWxkcmVuLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZUNoaWxkcmVuLmNhc3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG1heWJlQ2hpbGRyZW4udmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoRmlsdGVycy5lbXB0eShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbi50eXBlID09PSBcImV2ZXJ5dGhpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkuaW5jbHVzaXZlKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5FVkVSWVRISU5HKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKG5ldyBTZXQodGhpcy5jaGlsZHJlbi5rZXlzKCkpKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRDaGlsZHJlbiA9IEZpbHRlcnMucmVzb2x2ZShjaGlsZHJlbiwgdGhpcy5pZHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFJlc3VsdHMgPSBuZXcgU2V0PHN0cmluZz4ocXVlcnkuaW5jbHVzaXZlID8gcmVzb2x2ZWRDaGlsZHJlbiA6IFtdKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcmVzb2x2ZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLl9pdGVyYXRlUGFyZW50cyhjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFJlc3VsdHMuYWRkKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHBhcmVudFJlc3VsdHMpKTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rZWRcIjpcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZGlzdGFuY2UgJiYgcXVlcnkuZGlzdGFuY2UgPCAwKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5OT1RISU5HKTtcblxuICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHNvdXJjZSBvYmplY3RzIGZpcnN0LlxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlU291cmNlcyA9IHRoaXMuX3NlYXJjaChxdWVyeS5zb3VyY2UsIHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1heWJlU291cmNlcy5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVTb3VyY2VzLmNhc3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VzID0gbWF5YmVTb3VyY2VzLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKEZpbHRlcnMuZW1wdHkoc291cmNlcykpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLk5PVEhJTkcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZXMudHlwZSA9PT0gXCJldmVyeXRoaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5LmluY2x1c2l2ZSkgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuRVZFUllUSElORyk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRTb3VyY2VzID0gRmlsdGVycy5yZXNvbHZlKHNvdXJjZXMsIHRoaXMuaWRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBxdWVyeS5kaXJlY3Rpb24gPz8gXCJib3RoXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuX3RyYXZlcnNlTGlua2VkKHJlc29sdmVkU291cmNlcywgcXVlcnkuZGlzdGFuY2UgPz8gMSwgKGlkKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVyYXRlQWRqYWNlbnRMaW5rZWQoaWQsIGRpcmVjdGlvbilcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFxdWVyeS5pbmNsdXNpdmUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oRmlsdGVycy5zZXRJbnRlcnNlY3ROZWdhdGlvbihyZXN1bHRzLCByZXNvbHZlZFNvdXJjZXMpKSk7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHJlc3VsdHMpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHRoaXMuX3Jlc29sdmVQcmltaXRpdmUocXVlcnksIHNldHRpbmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVzb2x2ZSBsZWFmIG5vZGVzIGluIGEgc2VhcmNoIEFTVCwgeWllbGRpbmcgcmF3IHNldHMgb2YgcmVzdWx0cy4gKi9cbiAgICBwcml2YXRlIF9yZXNvbHZlUHJpbWl0aXZlKHF1ZXJ5OiBJbmRleFByaW1pdGl2ZSwgc2V0dGluZ3M/OiBTZWFyY2hTZXR0aW5ncyk6IEZpbHRlcjxzdHJpbmc+IHtcbiAgICAgICAgc3dpdGNoIChxdWVyeS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiY29uc3RhbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5jb25zdGFudChxdWVyeS5jb25zdGFudCk7XG4gICAgICAgICAgICBjYXNlIFwiaWRcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBleGFjdE9iamVjdCA9IHRoaXMub2JqZWN0cy5nZXQocXVlcnkudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBleGFjdE9iamVjdCA/IEZpbHRlcnMuYXRvbShuZXcgU2V0KFtleGFjdE9iamVjdC4kaWRdKSkgOiBGaWx0ZXJzLk5PVEhJTkc7XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHRoaXMubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkudmFsdWUucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3M/LnNvdXJjZVBhdGggPz8gXCJcIlxuICAgICAgICAgICAgICAgICk/LnBhdGg7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlZFBhdGggPyBxdWVyeS52YWx1ZS53aXRoUGF0aChyZXNvbHZlZFBhdGgpIDogcXVlcnkudmFsdWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLnJlc29sdmVMaW5rKHJlc29sdmVkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gRmlsdGVycy5hdG9tKG5ldyBTZXQoW29iamVjdC4kaWRdKSkgOiBGaWx0ZXJzLk5PVEhJTkc7XG4gICAgICAgICAgICBjYXNlIFwidHlwZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5udWxsYWJsZUF0b20odGhpcy50eXBlcy5nZXQocXVlcnkudmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0YWdnZWRcIjpcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZXhhY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMubnVsbGFibGVBdG9tKHRoaXMuZXRhZ3MuZ2V0KHF1ZXJ5LnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMubnVsbGFibGVBdG9tKHRoaXMudGFncy5nZXQocXVlcnkudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGF0aFwiOlxuICAgICAgICAgICAgICAgIGxldCB0b3BsZXZlbDtcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZXhhY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSB0aGlzLmZvbGRlci5nZXRFeGFjdChxdWVyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5LnZhbHVlID09IFwiXCIgfHwgcXVlcnkudmFsdWUgPT0gXCIvXCIpIHJldHVybiBGaWx0ZXJzLkVWRVJZVEhJTkc7XG5cbiAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPSB0aGlzLmZvbGRlci5nZXQocXVlcnkudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0b3BsZXZlbC5zaXplID09IDApIHJldHVybiBGaWx0ZXJzLk5PVEhJTkc7XG5cbiAgICAgICAgICAgICAgICAvLyBFeHBhbmQgYWxsIGNoaWxkcmVuLlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQodG9wbGV2ZWwpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHRvcCBvZiB0b3BsZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLl9pdGVyYXRlQ2hpbGRyZW4odG9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5hdG9tKHJlc3VsdCk7XG4gICAgICAgICAgICBjYXNlIFwiZmllbGRcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBub3Jta2V5ID0gcXVlcnkudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5maWVsZHMuZ2V0KG5vcm1rZXkpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZEluZGV4ID09IG51bGwpIHJldHVybiBGaWx0ZXJzLk5PVEhJTkc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5hdG9tKGZpZWxkSW5kZXguYWxsKCkpO1xuICAgICAgICAgICAgY2FzZSBcImVxdWFsLXZhbHVlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbHRlcnMubGF6eVVuaW9uKHF1ZXJ5LnZhbHVlcywgKHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJGaWVsZHMoXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleCkgPT4gaW5kZXguZXF1YWxzKHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZCkgPT4gTGl0ZXJhbHMuY29tcGFyZSh2YWx1ZSwgZmllbGQudmFsdWUpID09IDBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRmlsdGVyIGRvY3VtZW50cyBieSBmaWVsZCB2YWx1ZXMsIHVzaW5nIHRoZSBmYXN0IGxvb2t1cCBpZiBpdCByZXR1cm5zIGEgcmVzdWx0IGFuZCBvdGhlcndpc2UgZmlsdGVyaW5nIG92ZXIgZXZlcnkgZG9jdW1lbnQgdXNpbmcgdGhlIHNsb3cgcHJlZGljYXRlLiAqL1xuICAgIHByaXZhdGUgX2ZpbHRlckZpZWxkcyhcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIGZhc3Q6IChpbmRleDogRmllbGRJbmRleCkgPT4gU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4gICAgICAgIHNsb3c6IChmaWVsZDogRmllbGQpID0+IGJvb2xlYW5cbiAgICApOiBGaWx0ZXI8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IG5vcm1rZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZpZWxkcy5nZXQobm9ybWtleSk7XG4gICAgICAgIGlmIChpbmRleCA9PSBudWxsKSByZXR1cm4gRmlsdGVycy5OT1RISU5HO1xuXG4gICAgICAgIGNvbnN0IGZhc3Rsb29rdXAgPSBmYXN0KGluZGV4KTtcbiAgICAgICAgaWYgKGZhc3Rsb29rdXAgIT0gbnVsbCkgcmV0dXJuIEZpbHRlcnMuYXRvbShmYXN0bG9va3VwKTtcblxuICAgICAgICAvLyBDb21wdXRlIGJ5IGl0ZXJhdGluZyBvdmVyIGVhY2ggZmllbGQuXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBvYmplY3RJZCBvZiBpbmRleC5hbGwoKSkge1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5vYmplY3RzLmdldChvYmplY3RJZCk7XG4gICAgICAgICAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LiR0eXBlcy5jb250YWlucyhGSUVMREJFQVJJTkdfVFlQRSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IChvYmplY3QgYXMgYW55IGFzIEZpZWxkYmVhcmluZykuZmllbGQobm9ybWtleSk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKHNsb3coZmllbGQpKSBtYXRjaGVzLmFkZChvYmplY3RJZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRmlsdGVycy5hdG9tKG1hdGNoZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvZXMgQnJlYWR0aC1maXJzdCBTZWFyY2ggdG8gZmluZCBhbGwgbGlua2VkIGZpbGVzIHdpdGhpbiBkaXN0YW5jZSA8ZGlzdGFuY2U+LiBUaGlzIGluY2x1ZGVzIGFsbCBzb3VyY2Ugbm9kZXMsXG4gICAgICogc28gcmVtb3ZlIHRoZW0gYWZ0ZXJ3YXJkcyBpZiB5b3UgZG8gbm90IHdhbnQgdGhlbS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF90cmF2ZXJzZUxpbmtlZChcbiAgICAgICAgc291cmNlSWRzOiBTZXQ8c3RyaW5nPixcbiAgICAgICAgZGlzdGFuY2U6IG51bWJlcixcbiAgICAgICAgYWRqYWNlbnQ6IChpZDogc3RyaW5nKSA9PiBJdGVyYWJsZTxzdHJpbmc+XG4gICAgKTogU2V0PHN0cmluZz4ge1xuICAgICAgICBpZiAoZGlzdGFuY2UgPCAwKSByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICBpZiAoc291cmNlSWRzLnNpemUgPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcblxuICAgICAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KHNvdXJjZUlkcyk7XG5cbiAgICAgICAgY29uc3QgcXVldWUgPSBuZXcgRmxhdFF1ZXVlPHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNvdXJjZUlkcykgcXVldWUucHVzaChlbGVtZW50LCAwKTtcblxuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZGlzdCA9IHF1ZXVlLnBlZWtWYWx1ZSgpITtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBxdWV1ZS5wb3AoKSE7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbmVpZ2hib3Igb2YgYWRqYWNlbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlzaXRlZC5oYXMobmVpZ2hib3IpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5laWdoYm9yKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlzdCA8IGRpc3RhbmNlKSBxdWV1ZS5wdXNoKG5laWdoYm9yLCBkaXN0ICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICB9XG5cbiAgICAvKiogSXRlcmF0ZSBhbGwgbGlua2VkIG9iamVjdHMgZm9yIHRoZSBnaXZlbiBvYmplY3QuICovXG4gICAgcHJpdmF0ZSAqX2l0ZXJhdGVBZGphY2VudExpbmtlZChpZDogc3RyaW5nLCBkaXJlY3Rpb246IFwiaW5jb21pbmdcIiB8IFwib3V0Z29pbmdcIiB8IFwiYm90aFwiKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLm9iamVjdHMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFvYmplY3QpIHJldHVybjtcblxuICAgICAgICBpZiAoKGRpcmVjdGlvbiA9PT0gXCJib3RoXCIgfHwgZGlyZWN0aW9uID09PSBcImluY29taW5nXCIpICYmIFwiJGxpbmtcIiBpbiBvYmplY3QgJiYgb2JqZWN0W1wiJGxpbmtcIl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGluY29taW5nID0gdGhpcy5saW5rcy5nZXQoKG9iamVjdC4kbGluayBhcyBMaW5rKS5vYnNpZGlhbkxpbmsoKSk7XG4gICAgICAgICAgICBpZiAoaW5jb21pbmcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGluY29taW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChkaXJlY3Rpb24gPT09IFwiYm90aFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJvdXRnb2luZ1wiKSAmJlxuICAgICAgICAgICAgb2JqZWN0LiR0eXBlcy5jb250YWlucyhMSU5LQUJMRV9UWVBFKSAmJlxuICAgICAgICAgICAgaXRlcmFibGVFeGlzdHMob2JqZWN0LCBcIiRsaW5rc1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluayBvZiBvYmplY3QuJGxpbmtzIGFzIExpbmtbXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlTGluayhsaW5rKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWQpIHlpZWxkIHJlc29sdmVkLiRpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBJdGVyYXRvciB3aGljaCBwcm9kdWNlcyBhbGwgcGFyZW50cyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAqL1xuICAgIHByaXZhdGUgKl9pdGVyYXRlUGFyZW50cyhjaGlsZDogc3RyaW5nKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5vYmplY3RzLmdldChjaGlsZCk7XG4gICAgICAgIHdoaWxlIChvYmplY3QgJiYgb2JqZWN0Py4kcGFyZW50KSB7XG4gICAgICAgICAgICB5aWVsZCBvYmplY3QuJHBhcmVudC4kaWQ7XG4gICAgICAgICAgICBvYmplY3QgPSBvYmplY3QuJHBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBJdGVyYXRpdmUgd2hpY2ggcHJvZHVjZXMgYWxsIGNoaWxkcmVuIChyZWN1cnNpdmVseSkgb2YgdGhlIGdpdmVuIG9iamVjdC4gKi9cbiAgICBwcml2YXRlICpfaXRlcmF0ZUNoaWxkcmVuKHBhcmVudDogc3RyaW5nKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4uZ2V0KHBhcmVudCk7XG4gICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5zaXplID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjaGlsZDtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy5faXRlcmF0ZUNoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIEEgZ2VuZXJhbCBmdW5jdGlvbiBmb3Igc3RvcmluZyBzdWItb2JqZWN0cyBpbiBhIGdpdmVuIG9iamVjdC4gKi9cbmV4cG9ydCB0eXBlIFN1YnN0b3JlcjxUIGV4dGVuZHMgSW5kZXhhYmxlPiA9IChcbiAgICBvYmplY3Q6IFQsXG4gICAgYWRkOiA8VSBleHRlbmRzIEluZGV4YWJsZT4ob2JqZWN0OiBVIHwgVVtdLCBzdWJpbmRleD86IFN1YnN0b3JlcjxVPikgPT4gdm9pZFxuKSA9PiB2b2lkO1xuXG4vKiogVGhlIHJlc3VsdCBvZiBzZWFyY2hpbmcgZ2l2ZW4gYW4gaW5kZXggcXVlcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdDxPPiB7XG4gICAgLyoqIFRoZSBxdWVyeSB1c2VkIHRvIHNlYXJjaC4gKi9cbiAgICBxdWVyeTogSW5kZXhRdWVyeTtcbiAgICAvKiogQWxsIG9mIHRoZSByZXR1cm5lZCByZXN1bHRzLiAqL1xuICAgIHJlc3VsdHM6IE9bXTtcbiAgICAvKiogVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdGhhdCB0aGUgc2VhcmNoIHRvb2suICovXG4gICAgZHVyYXRpb246IG51bWJlcjtcbiAgICAvKiogVGhlIG1heGltdW0gcmV2aXNpb24gb2YgYW55IGRvY3VtZW50IGluIHRoZSByZXN1bHQsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgZGlmZmluZy4gKi9cbiAgICByZXZpc2lvbjogbnVtYmVyO1xufVxuXG4vKiogRXh0cmEgc2V0dGluZ3MgdGhhdCBjYW4gYmUgcHJvdmlkZWQgdG8gYSBzZWFyY2guICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFNldHRpbmdzIHtcbiAgICAvKiogVGhlIHBhdGggdG8gcnVuIGZyb20gd2hlbiByZXNvbHZpbmcgbGlua3MgYW5kIGB0aGlzYCBzZWN0aW9ucy4gKi9cbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xufVxuXG4vKiogVHlwZSBndWFyZCB3aGljaCBjaGVja3MgaWYgb2JqZWN0W2tleV0gZXhpc3RzIGFuZCBpcyBhbiBpdGVyYWJsZS4gKi9cbmZ1bmN0aW9uIGl0ZXJhYmxlRXhpc3RzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFQsXG4gICAga2V5OiBLXG4pOiBvYmplY3QgaXMgVCAmIFJlY29yZDxLLCBJdGVyYWJsZTxhbnk+PiB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmplY3QgJiYgb2JqZWN0W2tleV0gIT09IHVuZGVmaW5lZCAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gb2JqZWN0W2tleV07XG59XG4iLCAiaW1wb3J0IGxvY2FsZm9yYWdlIGZyb20gXCJsb2NhbGZvcmFnZVwiO1xuXG4vKiogQSBwaWVjZSBvZiBkYXRhIHRoYXQgaGFzIGJlZW4gY2FjaGVkIGZvciBhIHNwZWNpZmljIHZlcnNpb24gYW5kIHRpbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZDxUPiB7XG4gICAgLyoqIFRoZSB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4gdGhhdCB0aGUgZGF0YSB3YXMgd3JpdHRlbiB0byBjYWNoZSB3aXRoLiAqL1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICAvKiogVGhlIFVOSVggZXBvY2ggdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgZGF0YSB3YXMgd3JpdHRlbiB0byBjYWNoZS4gKi9cbiAgICB0aW1lOiBudW1iZXI7XG4gICAgLyoqIFRoZSBkYXRhIHRoYXQgd2FzIGNhY2hlZC4gKi9cbiAgICBkYXRhOiBUO1xufVxuXG4vKiogU2ltcGxlciB3cmFwcGVyIGZvciBhIGZpbGUtYmFja2VkIGNhY2hlIGZvciBhcmJpdHJhcnkgbWV0YWRhdGEuICovXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlQ2FjaGUge1xuICAgIHB1YmxpYyBwZXJzaXN0ZXI6IExvY2FsRm9yYWdlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBhcHBJZDogc3RyaW5nLCBwdWJsaWMgdmVyc2lvbjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGVyc2lzdGVyID0gbG9jYWxmb3JhZ2UuY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgICAgICAgbmFtZTogXCJkYXRhY29yZS9jYWNoZS9cIiArIGFwcElkLFxuICAgICAgICAgICAgZHJpdmVyOiBbbG9jYWxmb3JhZ2UuSU5ERVhFRERCXSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNhY2hlIG1ldGFkYXRhIGFib3V0IGZpbGVzIGFuZCBzZWN0aW9ucyBpbiB0aGUgZGF0YWNvcmUgaW5kZXguXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEcm9wIHRoZSBlbnRpcmUgY2FjaGUgaW5zdGFuY2UgYW5kIHJlLWNyZWF0ZSBhIG5ldyBmcmVzaCBpbnN0YW5jZS4gKi9cbiAgICBwdWJsaWMgYXN5bmMgcmVjcmVhdGUoKSB7XG4gICAgICAgIGF3YWl0IGxvY2FsZm9yYWdlLmRyb3BJbnN0YW5jZSh7IG5hbWU6IFwiZGF0YWNvcmUvY2FjaGUvXCIgKyB0aGlzLmFwcElkIH0pO1xuXG4gICAgICAgIHRoaXMucGVyc2lzdGVyID0gbG9jYWxmb3JhZ2UuY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgICAgICAgbmFtZTogXCJkYXRhY29yZS9jYWNoZS9cIiArIHRoaXMuYXBwSWQsXG4gICAgICAgICAgICBkcml2ZXI6IFtsb2NhbGZvcmFnZS5JTkRFWEVEREJdLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ2FjaGUgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIHNlY3Rpb25zIGluIHRoZSBkYXRhY29yZSBpbmRleC5cIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIExvYWQgZmlsZSBtZXRhZGF0YSBieSBwYXRoLiAqL1xuICAgIHB1YmxpYyBhc3luYyBsb2FkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlZDxQYXJ0aWFsPGFueT4+IHwgbnVsbCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZXIuZ2V0SXRlbSh0aGlzLmZpbGVLZXkocGF0aCkpLnRoZW4oKHJhdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJhdyBhcyBhbnkgYXMgQ2FjaGVkPFBhcnRpYWw8YW55Pj47XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBTdG9yZSBmaWxlIG1ldGFkYXRhIGJ5IHBhdGguICovXG4gICAgcHVibGljIGFzeW5jIHN0b3JlRmlsZShwYXRoOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8YW55Pik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBlcnNpc3Rlci5zZXRJdGVtKHRoaXMuZmlsZUtleShwYXRoKSwge1xuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEcm9wIG9sZCBmaWxlIGtleXMgdGhhdCBubyBsb25nZXIgZXhpc3QuICovXG4gICAgcHVibGljIGFzeW5jIHN5bmNocm9uaXplKGV4aXN0aW5nOiBzdHJpbmdbXSB8IFNldDxzdHJpbmc+KTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICAgICAgICBsZXQga2V5cyA9IG5ldyBTZXQoYXdhaXQgdGhpcy5hbGxGaWxlcygpKTtcbiAgICAgICAgZm9yIChsZXQgZXhpc3Qgb2YgZXhpc3RpbmcpIGtleXMuZGVsZXRlKGV4aXN0KTtcblxuICAgICAgICAvLyBBbnkga2V5cyByZW1haW5pbmcgYWZ0ZXIgZGVsZXRpbmcgZXhpc3Rpbmcga2V5cyBhcmUgbm9uLWV4aXN0ZW50IGtleXMgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCBmcm9tIGNhY2hlLlxuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykgYXdhaXQgdGhpcy5wZXJzaXN0ZXIucmVtb3ZlSXRlbSh0aGlzLmZpbGVLZXkoa2V5KSk7XG5cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfVxuXG4gICAgLyoqIE9idGFpbiBhIGxpc3Qgb2YgYWxsIG1ldGFkYXRhIGtleXMuICovXG4gICAgcHVibGljIGFzeW5jIGFsbEtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZXIua2V5cygpO1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gYSBsaXN0IG9mIGFsbCBwZXJzaXN0ZWQgZmlsZXMuICovXG4gICAgcHVibGljIGFzeW5jIGFsbEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgbGV0IGtleXMgPSBhd2FpdCB0aGlzLmFsbEtleXMoKTtcbiAgICAgICAgcmV0dXJuIGtleXMuZmlsdGVyKChrKSA9PiBrLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkubWFwKChrKSA9PiBrLnN1YnN0cmluZyg1KSk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBhIHVuaXF1ZSBrZXkgZm9yIGEgZ2l2ZW4gZmlsZSBwYXRoLiAqL1xuICAgIHB1YmxpYyBmaWxlS2V5KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcImZpbGU6XCIgKyBwYXRoO1xuICAgIH1cbn1cbiIsICJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlubGluZVdvcmtlcihzY3JpcHRUZXh0KSB7XG4gIGxldCBibG9iID0gbmV3IEJsb2IoW3NjcmlwdFRleHRdLCB7dHlwZTogJ3RleHQvamF2YXNjcmlwdCd9KTtcbiAgbGV0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gIGxldCB3b3JrZXIgPSBuZXcgV29ya2VyKHVybCwge1wibmFtZVwiOlwiRGF0YWNvcmUgSW5kZXhlclwifSk7XG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgcmV0dXJuIHdvcmtlcjtcbn1cbiIsICJpbXBvcnQgaW5saW5lV29ya2VyIGZyb20gJ19faW5saW5lLXdvcmtlcidcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFdvcmtlcigpIHtcbiAgcmV0dXJuIGlubGluZVdvcmtlcihcInZhciBpbD1PYmplY3QuY3JlYXRlO3ZhciBXcz1PYmplY3QuZGVmaW5lUHJvcGVydHksb2w9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsYWw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix1bD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxsbD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxWcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGNsPU9iamVjdC5nZXRQcm90b3R5cGVPZixIcz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHZvPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7dmFyIE9vPShuLGUsdCk9PmUgaW4gbj9XcyhuLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpuW2VdPXQsJD0obixlKT0+e2Zvcih2YXIgdCBpbiBlfHwoZT17fSkpSHMuY2FsbChlLHQpJiZPbyhuLHQsZVt0XSk7aWYoVnIpZm9yKHZhciB0IG9mIFZyKGUpKXZvLmNhbGwoZSx0KSYmT28obix0LGVbdF0pO3JldHVybiBufSxGZT0obixlKT0+b2wobix1bChlKSk7dmFyIEtzPShuLGUpPT57dmFyIHQ9e307Zm9yKHZhciByIGluIG4pSHMuY2FsbChuLHIpJiZlLmluZGV4T2Yocik8MCYmKHRbcl09bltyXSk7aWYobiE9bnVsbCYmVnIpZm9yKHZhciByIG9mIFZyKG4pKWUuaW5kZXhPZihyKTwwJiZ2by5jYWxsKG4scikmJih0W3JdPW5bcl0pO3JldHVybiB0fTt2YXIgSW89KG4sZSk9PigpPT4oZXx8bigoZT17ZXhwb3J0czp7fX0pLmV4cG9ydHMsZSksZS5leHBvcnRzKTt2YXIgZmw9KG4sZSx0LHIpPT57aWYoZSYmdHlwZW9mIGU9PVxcXCJvYmplY3RcXFwifHx0eXBlb2YgZT09XFxcImZ1bmN0aW9uXFxcIilmb3IobGV0IHMgb2YgbGwoZSkpIUhzLmNhbGwobixzKSYmcyE9PXQmJldzKG4scyx7Z2V0OigpPT5lW3NdLGVudW1lcmFibGU6IShyPWFsKGUscykpfHxyLmVudW1lcmFibGV9KTtyZXR1cm4gbn07dmFyIHFyPShuLGUsdCk9Pih0PW4hPW51bGw/aWwoY2wobikpOnt9LGZsKGV8fCFufHwhbi5fX2VzTW9kdWxlP1dzKHQsXFxcImRlZmF1bHRcXFwiLHt2YWx1ZTpuLGVudW1lcmFibGU6ITB9KTp0LG4pKTt2YXIgbnM9SW8oKGhyLElpKT0+eyhmdW5jdGlvbihuLGUpe3R5cGVvZiBocj09XFxcIm9iamVjdFxcXCImJnR5cGVvZiBJaT09XFxcIm9iamVjdFxcXCI/SWkuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09XFxcImZ1bmN0aW9uXFxcIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6dHlwZW9mIGhyPT1cXFwib2JqZWN0XFxcIj9oci5QYXJzaW1tb249ZSgpOm4uUGFyc2ltbW9uPWUoKX0pKHR5cGVvZiBzZWxmIT1cXFwidW5kZWZpbmVkXFxcIj9zZWxmOmhyLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPXt9O2Z1bmN0aW9uIHQocil7aWYoZVtyXSlyZXR1cm4gZVtyXS5leHBvcnRzO3ZhciBzPWVbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBuW3JdLmNhbGwocy5leHBvcnRzLHMscy5leHBvcnRzLHQpLHMubD0hMCxzLmV4cG9ydHN9cmV0dXJuIHQubT1uLHQuYz1lLHQuZD1mdW5jdGlvbihyLHMsaSl7dC5vKHIscyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHMse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDppfSl9LHQucj1mdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcXFwiX19lc01vZHVsZVxcXCIse3ZhbHVlOiEwfSl9LHQubj1mdW5jdGlvbihyKXt2YXIgcz1yJiZyLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiByfTtyZXR1cm4gdC5kKHMsXFxcImFcXFwiLHMpLHN9LHQubz1mdW5jdGlvbihyLHMpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixzKX0sdC5wPVxcXCJcXFwiLHQodC5zPTApfShbZnVuY3Rpb24obixlLHQpe1xcXCJ1c2Ugc3RyaWN0XFxcIjtmdW5jdGlvbiByKGMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihjKTt0aGlzLl89Y312YXIgcz1yLnByb3RvdHlwZTtmdW5jdGlvbiBpKGMsbSl7Zm9yKHZhciBFPTA7RTxjO0UrKyltKEUpfWZ1bmN0aW9uIG8oYyxtLEUpe3JldHVybiBmdW5jdGlvbihrLEkpe2koSS5sZW5ndGgsZnVuY3Rpb24oTil7ayhJW05dLE4sSSl9KX0oZnVuY3Rpb24oayxJLE4pe209YyhtLGssSSxOKX0sRSksbX1mdW5jdGlvbiBhKGMsbSl7cmV0dXJuIG8oZnVuY3Rpb24oRSxrLEksTil7cmV0dXJuIEUuY29uY2F0KFtjKGssSSxOKV0pfSxbXSxtKX1mdW5jdGlvbiB1KGMsbSl7dmFyIEU9e3Y6MCxidWY6bX07cmV0dXJuIGkoYyxmdW5jdGlvbigpe3ZhciBrO0U9e3Y6RS52PDwxfChrPUUuYnVmLGtbMF0+PjcpLGJ1ZjpmdW5jdGlvbihJKXt2YXIgTj1vKGZ1bmN0aW9uKEwscSxuZSxTZSl7cmV0dXJuIEwuY29uY2F0KG5lPT09U2UubGVuZ3RoLTE/QnVmZmVyLmZyb20oW3EsMF0pLnJlYWRVSW50MTZCRSgwKTpTZS5yZWFkVUludDE2QkUobmUpKX0sW10sSSk7cmV0dXJuIEJ1ZmZlci5mcm9tKGEoZnVuY3Rpb24oTCl7cmV0dXJuKEw8PDEmNjU1MzUpPj44fSxOKSl9KEUuYnVmKX19KSxFfWZ1bmN0aW9uIGwoKXtyZXR1cm4gdHlwZW9mIEJ1ZmZlciE9XFxcInVuZGVmaW5lZFxcXCJ9ZnVuY3Rpb24gZCgpe2lmKCFsKCkpdGhyb3cgbmV3IEVycm9yKFxcXCJCdWZmZXIgZ2xvYmFsIGRvZXMgbm90IGV4aXN0OyBwbGVhc2UgdXNlIHdlYnBhY2sgaWYgeW91IG5lZWQgdG8gcGFyc2UgQnVmZmVycyBpbiB0aGUgYnJvd3Nlci5cXFwiKX1mdW5jdGlvbiBoKGMpe2QoKTt2YXIgbT1vKGZ1bmN0aW9uKE4sTCl7cmV0dXJuIE4rTH0sMCxjKTtpZihtJTghPTApdGhyb3cgbmV3IEVycm9yKFxcXCJUaGUgYml0cyBbXFxcIitjLmpvaW4oXFxcIiwgXFxcIikrXFxcIl0gYWRkIHVwIHRvIFxcXCIrbStcXFwiIHdoaWNoIGlzIG5vdCBhbiBldmVuIG51bWJlciBvZiBieXRlczsgdGhlIHRvdGFsIHNob3VsZCBiZSBkaXZpc2libGUgYnkgOFxcXCIpO3ZhciBFLGs9bS84LEk9KEU9ZnVuY3Rpb24oTil7cmV0dXJuIE4+NDh9LG8oZnVuY3Rpb24oTixMKXtyZXR1cm4gTnx8KEUoTCk/TDpOKX0sbnVsbCxjKSk7aWYoSSl0aHJvdyBuZXcgRXJyb3IoSStcXFwiIGJpdCByYW5nZSByZXF1ZXN0ZWQgZXhjZWVkcyA0OCBiaXQgKDYgYnl0ZSkgTnVtYmVyIG1heC5cXFwiKTtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oTixMKXt2YXIgcT1rK0w7cmV0dXJuIHE+Ti5sZW5ndGg/VChMLGsudG9TdHJpbmcoKStcXFwiIGJ5dGVzXFxcIik6dyhxLG8oZnVuY3Rpb24obmUsU2Upe3ZhciBnZT11KFNlLG5lLmJ1Zik7cmV0dXJue2NvbGw6bmUuY29sbC5jb25jYXQoZ2UudiksYnVmOmdlLmJ1Zn19LHtjb2xsOltdLGJ1ZjpOLnNsaWNlKEwscSl9LGMpLmNvbGwpfSl9ZnVuY3Rpb24gcChjLG0pe3JldHVybiBuZXcgcihmdW5jdGlvbihFLGspe3JldHVybiBkKCksayttPkUubGVuZ3RoP1QoayxtK1xcXCIgYnl0ZXMgZm9yIFxcXCIrYyk6dyhrK20sRS5zbGljZShrLGsrbSkpfSl9ZnVuY3Rpb24gZihjLG0pe2lmKHR5cGVvZihFPW0pIT1cXFwibnVtYmVyXFxcInx8TWF0aC5mbG9vcihFKSE9PUV8fG08MHx8bT42KXRocm93IG5ldyBFcnJvcihjK1xcXCIgcmVxdWlyZXMgaW50ZWdlciBsZW5ndGggaW4gcmFuZ2UgWzAsIDZdLlxcXCIpO3ZhciBFfWZ1bmN0aW9uIEYoYyl7cmV0dXJuIGYoXFxcInVpbnRCRVxcXCIsYykscChcXFwidWludEJFKFxcXCIrYytcXFwiKVxcXCIsYykubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLnJlYWRVSW50QkUoMCxjKX0pfWZ1bmN0aW9uIGcoYyl7cmV0dXJuIGYoXFxcInVpbnRMRVxcXCIsYykscChcXFwidWludExFKFxcXCIrYytcXFwiKVxcXCIsYykubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLnJlYWRVSW50TEUoMCxjKX0pfWZ1bmN0aW9uIHkoYyl7cmV0dXJuIGYoXFxcImludEJFXFxcIixjKSxwKFxcXCJpbnRCRShcXFwiK2MrXFxcIilcXFwiLGMpLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbS5yZWFkSW50QkUoMCxjKX0pfWZ1bmN0aW9uIFMoYyl7cmV0dXJuIGYoXFxcImludExFXFxcIixjKSxwKFxcXCJpbnRMRShcXFwiK2MrXFxcIilcXFwiLGMpLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbS5yZWFkSW50TEUoMCxjKX0pfWZ1bmN0aW9uIE8oYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiByfWZ1bmN0aW9uIHYoYyl7cmV0dXJue30udG9TdHJpbmcuY2FsbChjKT09PVxcXCJbb2JqZWN0IEFycmF5XVxcXCJ9ZnVuY3Rpb24gRChjKXtyZXR1cm4gbCgpJiZCdWZmZXIuaXNCdWZmZXIoYyl9ZnVuY3Rpb24gdyhjLG0pe3JldHVybntzdGF0dXM6ITAsaW5kZXg6Yyx2YWx1ZTptLGZ1cnRoZXN0Oi0xLGV4cGVjdGVkOltdfX1mdW5jdGlvbiBUKGMsbSl7cmV0dXJuIHYobSl8fChtPVttXSkse3N0YXR1czohMSxpbmRleDotMSx2YWx1ZTpudWxsLGZ1cnRoZXN0OmMsZXhwZWN0ZWQ6bX19ZnVuY3Rpb24gQyhjLG0pe2lmKCFtfHxjLmZ1cnRoZXN0Pm0uZnVydGhlc3QpcmV0dXJuIGM7dmFyIEU9Yy5mdXJ0aGVzdD09PW0uZnVydGhlc3Q/ZnVuY3Rpb24oayxJKXtpZihmdW5jdGlvbigpe2lmKHIuX3N1cHBvcnRzU2V0IT09dm9pZCAwKXJldHVybiByLl9zdXBwb3J0c1NldDt2YXIgaHQ9dHlwZW9mIFNldCE9XFxcInVuZGVmaW5lZFxcXCI7cmV0dXJuIHIuX3N1cHBvcnRzU2V0PWh0LGh0fSgpJiZBcnJheS5mcm9tKXtmb3IodmFyIE49bmV3IFNldChrKSxMPTA7TDxJLmxlbmd0aDtMKyspTi5hZGQoSVtMXSk7dmFyIHE9QXJyYXkuZnJvbShOKTtyZXR1cm4gcS5zb3J0KCkscX1mb3IodmFyIG5lPXt9LFNlPTA7U2U8ay5sZW5ndGg7U2UrKyluZVtrW1NlXV09ITA7Zm9yKHZhciBnZT0wO2dlPEkubGVuZ3RoO2dlKyspbmVbSVtnZV1dPSEwO3ZhciBkdD1bXTtmb3IodmFyIHZlIGluIG5lKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChuZSx2ZSkmJmR0LnB1c2godmUpO3JldHVybiBkdC5zb3J0KCksZHR9KGMuZXhwZWN0ZWQsbS5leHBlY3RlZCk6bS5leHBlY3RlZDtyZXR1cm57c3RhdHVzOmMuc3RhdHVzLGluZGV4OmMuaW5kZXgsdmFsdWU6Yy52YWx1ZSxmdXJ0aGVzdDptLmZ1cnRoZXN0LGV4cGVjdGVkOkV9fXZhciBNPXt9O2Z1bmN0aW9uIFYoYyxtKXtpZihEKGMpKXJldHVybntvZmZzZXQ6bSxsaW5lOi0xLGNvbHVtbjotMX07YyBpbiBNfHwoTVtjXT17fSk7Zm9yKHZhciBFPU1bY10saz0wLEk9MCxOPTAsTD1tO0w+PTA7KXtpZihMIGluIEUpe2s9RVtMXS5saW5lLE49PT0wJiYoTj1FW0xdLmxpbmVTdGFydCk7YnJlYWt9KGMuY2hhckF0KEwpPT09YFxcbmB8fGMuY2hhckF0KEwpPT09XFxcIlxcXFxyXFxcIiYmYy5jaGFyQXQoTCsxKSE9PWBcXG5gKSYmKEkrKyxOPT09MCYmKE49TCsxKSksTC0tfXZhciBxPWsrSSxuZT1tLU47cmV0dXJuIEVbbV09e2xpbmU6cSxsaW5lU3RhcnQ6Tn0se29mZnNldDptLGxpbmU6cSsxLGNvbHVtbjpuZSsxfX1mdW5jdGlvbiBqKGMpe2lmKCFPKGMpKXRocm93IG5ldyBFcnJvcihcXFwibm90IGEgcGFyc2VyOiBcXFwiK2MpfWZ1bmN0aW9uIHooYyxtKXtyZXR1cm4gdHlwZW9mIGM9PVxcXCJzdHJpbmdcXFwiP2MuY2hhckF0KG0pOmNbbV19ZnVuY3Rpb24gcmUoYyl7aWYodHlwZW9mIGMhPVxcXCJudW1iZXJcXFwiKXRocm93IG5ldyBFcnJvcihcXFwibm90IGEgbnVtYmVyOiBcXFwiK2MpfWZ1bmN0aW9uIGxlKGMpe2lmKHR5cGVvZiBjIT1cXFwiZnVuY3Rpb25cXFwiKXRocm93IG5ldyBFcnJvcihcXFwibm90IGEgZnVuY3Rpb246IFxcXCIrYyl9ZnVuY3Rpb24geChjKXtpZih0eXBlb2YgYyE9XFxcInN0cmluZ1xcXCIpdGhyb3cgbmV3IEVycm9yKFxcXCJub3QgYSBzdHJpbmc6IFxcXCIrYyl9dmFyIFI9MixRPTMsY2U9OCxFZT01KmNlLFZlPTQqY2UsdG49XFxcIiAgXFxcIjtmdW5jdGlvbiBCdChjLG0pe3JldHVybiBuZXcgQXJyYXkobSsxKS5qb2luKGMpfWZ1bmN0aW9uIFB0KGMsbSxFKXt2YXIgaz1tLWMubGVuZ3RoO3JldHVybiBrPD0wP2M6QnQoRSxrKStjfWZ1bmN0aW9uIEFlKGMsbSxFLGspe3JldHVybntmcm9tOmMtbT4wP2MtbTowLHRvOmMrRT5rP2s6YytFfX1mdW5jdGlvbiAkdChjLG0pe3ZhciBFLGssSSxOLEwscT1tLmluZGV4LG5lPXEub2Zmc2V0LFNlPTE7aWYobmU9PT1jLmxlbmd0aClyZXR1cm5cXFwiR290IHRoZSBlbmQgb2YgdGhlIGlucHV0XFxcIjtpZihEKGMpKXt2YXIgZ2U9bmUtbmUlY2UsZHQ9bmUtZ2UsdmU9QWUoZ2UsRWUsVmUrY2UsYy5sZW5ndGgpLGh0PWEoZnVuY3Rpb24oZGUpe3JldHVybiBhKGZ1bmN0aW9uKHJuKXtyZXR1cm4gUHQocm4udG9TdHJpbmcoMTYpLDIsXFxcIjBcXFwiKX0sZGUpfSxmdW5jdGlvbihkZSxybil7dmFyIHNuPWRlLmxlbmd0aCxWdD1bXSxvbj0wO2lmKHNuPD1ybilyZXR1cm5bZGUuc2xpY2UoKV07Zm9yKHZhciBhbj0wO2FuPHNuO2FuKyspVnRbb25dfHxWdC5wdXNoKFtdKSxWdFtvbl0ucHVzaChkZVthbl0pLChhbisxKSVybj09MCYmb24rKztyZXR1cm4gVnR9KGMuc2xpY2UodmUuZnJvbSx2ZS50bykudG9KU09OKCkuZGF0YSxjZSkpO049ZnVuY3Rpb24oZGUpe3JldHVybiBkZS5mcm9tPT09MCYmZGUudG89PT0xP3tmcm9tOmRlLmZyb20sdG86ZGUudG99Ontmcm9tOmRlLmZyb20vY2UsdG86TWF0aC5mbG9vcihkZS50by9jZSl9fSh2ZSksaz1nZS9jZSxFPTMqZHQsZHQ+PTQmJihFKz0xKSxTZT0yLEk9YShmdW5jdGlvbihkZSl7cmV0dXJuIGRlLmxlbmd0aDw9ND9kZS5qb2luKFxcXCIgXFxcIik6ZGUuc2xpY2UoMCw0KS5qb2luKFxcXCIgXFxcIikrXFxcIiAgXFxcIitkZS5zbGljZSg0KS5qb2luKFxcXCIgXFxcIil9LGh0KSwoTD0oOCooTi50bz4wP04udG8tMTpOLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKEw9Mil9ZWxzZXt2YXIgbm49Yy5zcGxpdCgvXFxcXHJcXFxcbnxbXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOV0vKTtFPXEuY29sdW1uLTEsaz1xLmxpbmUtMSxOPUFlKGssUixRLG5uLmxlbmd0aCksST1ubi5zbGljZShOLmZyb20sTi50byksTD1OLnRvLnRvU3RyaW5nKCkubGVuZ3RofXZhciBzbD1rLU4uZnJvbTtyZXR1cm4gRChjKSYmKEw9KDgqKE4udG8+MD9OLnRvLTE6Ti50bykpLnRvU3RyaW5nKDE2KS5sZW5ndGgpPDImJihMPTIpLG8oZnVuY3Rpb24oZGUscm4sc24pe3ZhciBWdCxvbj1zbj09PXNsLGFuPW9uP1xcXCI+IFxcXCI6dG47cmV0dXJuIFZ0PUQoYyk/UHQoKDgqKE4uZnJvbStzbikpLnRvU3RyaW5nKDE2KSxMLFxcXCIwXFxcIik6UHQoKE4uZnJvbStzbisxKS50b1N0cmluZygpLEwsXFxcIiBcXFwiKSxbXS5jb25jYXQoZGUsW2FuK1Z0K1xcXCIgfCBcXFwiK3JuXSxvbj9bdG4rQnQoXFxcIiBcXFwiLEwpK1xcXCIgfCBcXFwiK1B0KFxcXCJcXFwiLEUsXFxcIiBcXFwiKStCdChcXFwiXlxcXCIsU2UpXTpbXSl9LFtdLEkpLmpvaW4oYFxcbmApfWZ1bmN0aW9uIGJvKGMsbSl7cmV0dXJuW2BcXG5gLFxcXCItLSBQQVJTSU5HIEZBSUxFRCBcXFwiK0J0KFxcXCItXFxcIiw1MCksYFxcblxcbmAsJHQoYyxtKSxgXFxuXFxuYCwoRT1tLmV4cGVjdGVkLEUubGVuZ3RoPT09MT9gRXhwZWN0ZWQ6XFxuXFxuYCtFWzBdOmBFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXFxuXFxuYCtFLmpvaW4oXFxcIiwgXFxcIikpLGBcXG5gXS5qb2luKFxcXCJcXFwiKTt2YXIgRX1mdW5jdGlvbiBFbyhjKXtyZXR1cm4gYy5mbGFncyE9PXZvaWQgMD9jLmZsYWdzOltjLmdsb2JhbD9cXFwiZ1xcXCI6XFxcIlxcXCIsYy5pZ25vcmVDYXNlP1xcXCJpXFxcIjpcXFwiXFxcIixjLm11bHRpbGluZT9cXFwibVxcXCI6XFxcIlxcXCIsYy51bmljb2RlP1xcXCJ1XFxcIjpcXFwiXFxcIixjLnN0aWNreT9cXFwieVxcXCI6XFxcIlxcXCJdLmpvaW4oXFxcIlxcXCIpfWZ1bmN0aW9uIEJyKCl7Zm9yKHZhciBjPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxtPWMubGVuZ3RoLEU9MDtFPG07RSs9MSlqKGNbRV0pO3JldHVybiByKGZ1bmN0aW9uKGssSSl7Zm9yKHZhciBOLEw9bmV3IEFycmF5KG0pLHE9MDtxPG07cSs9MSl7aWYoIShOPUMoY1txXS5fKGssSSksTikpLnN0YXR1cylyZXR1cm4gTjtMW3FdPU4udmFsdWUsST1OLmluZGV4fXJldHVybiBDKHcoSSxMKSxOKX0pfWZ1bmN0aW9uIFJ0KCl7dmFyIGM9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKGMubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoXFxcInNlcU1hcCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnRcXFwiKTt2YXIgbT1jLnBvcCgpO3JldHVybiBsZShtKSxCci5hcHBseShudWxsLGMpLm1hcChmdW5jdGlvbihFKXtyZXR1cm4gbS5hcHBseShudWxsLEUpfSl9ZnVuY3Rpb24gUHIoKXt2YXIgYz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksbT1jLmxlbmd0aDtpZihtPT09MClyZXR1cm4gJHIoXFxcInplcm8gYWx0ZXJuYXRlc1xcXCIpO2Zvcih2YXIgRT0wO0U8bTtFKz0xKWooY1tFXSk7cmV0dXJuIHIoZnVuY3Rpb24oayxJKXtmb3IodmFyIE4sTD0wO0w8Yy5sZW5ndGg7TCs9MSlpZigoTj1DKGNbTF0uXyhrLEkpLE4pKS5zdGF0dXMpcmV0dXJuIE47cmV0dXJuIE59KX1mdW5jdGlvbiBGbyhjLG0pe3JldHVybiBWcyhjLG0pLm9yKGp0KFtdKSl9ZnVuY3Rpb24gVnMoYyxtKXtyZXR1cm4gaihjKSxqKG0pLFJ0KGMsbS50aGVuKGMpLm1hbnkoKSxmdW5jdGlvbihFLGspe3JldHVybltFXS5jb25jYXQoayl9KX1mdW5jdGlvbiBfbihjKXt4KGMpO3ZhciBtPVxcXCInXFxcIitjK1xcXCInXFxcIjtyZXR1cm4gcihmdW5jdGlvbihFLGspe3ZhciBJPWsrYy5sZW5ndGgsTj1FLnNsaWNlKGssSSk7cmV0dXJuIE49PT1jP3coSSxOKTpUKGssbSl9KX1mdW5jdGlvbiBmdChjLG0peyhmdW5jdGlvbihJKXtpZighKEkgaW5zdGFuY2VvZiBSZWdFeHApKXRocm93IG5ldyBFcnJvcihcXFwibm90IGEgcmVnZXhwOiBcXFwiK0kpO2Zvcih2YXIgTj1FbyhJKSxMPTA7TDxOLmxlbmd0aDtMKyspe3ZhciBxPU4uY2hhckF0KEwpO2lmKHEhPT1cXFwiaVxcXCImJnEhPT1cXFwibVxcXCImJnEhPT1cXFwidVxcXCImJnEhPT1cXFwic1xcXCIpdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCByZWdleHAgZmxhZyBcXFwiJytxKydcXFwiOiAnK0kpfX0pKGMpLGFyZ3VtZW50cy5sZW5ndGg+PTI/cmUobSk6bT0wO3ZhciBFPWZ1bmN0aW9uKEkpe3JldHVybiBSZWdFeHAoXFxcIl4oPzpcXFwiK0kuc291cmNlK1xcXCIpXFxcIixFbyhJKSl9KGMpLGs9XFxcIlxcXCIrYztyZXR1cm4gcihmdW5jdGlvbihJLE4pe3ZhciBMPUUuZXhlYyhJLnNsaWNlKE4pKTtpZihMKXtpZigwPD1tJiZtPD1MLmxlbmd0aCl7dmFyIHE9TFswXSxuZT1MW21dO3JldHVybiB3KE4rcS5sZW5ndGgsbmUpfXJldHVybiBUKE4sXFxcInZhbGlkIG1hdGNoIGdyb3VwICgwIHRvIFxcXCIrTC5sZW5ndGgrXFxcIikgaW4gXFxcIitrKX1yZXR1cm4gVChOLGspfSl9ZnVuY3Rpb24ganQoYyl7cmV0dXJuIHIoZnVuY3Rpb24obSxFKXtyZXR1cm4gdyhFLGMpfSl9ZnVuY3Rpb24gJHIoYyl7cmV0dXJuIHIoZnVuY3Rpb24obSxFKXtyZXR1cm4gVChFLGMpfSl9ZnVuY3Rpb24gUnIoYyl7aWYoTyhjKSlyZXR1cm4gcihmdW5jdGlvbihtLEUpe3ZhciBrPWMuXyhtLEUpO3JldHVybiBrLmluZGV4PUUsay52YWx1ZT1cXFwiXFxcIixrfSk7aWYodHlwZW9mIGM9PVxcXCJzdHJpbmdcXFwiKXJldHVybiBScihfbihjKSk7aWYoYyBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gUnIoZnQoYykpO3Rocm93IG5ldyBFcnJvcihcXFwibm90IGEgc3RyaW5nLCByZWdleHAsIG9yIHBhcnNlcjogXFxcIitjKX1mdW5jdGlvbiB3byhjKXtyZXR1cm4gaihjKSxyKGZ1bmN0aW9uKG0sRSl7dmFyIGs9Yy5fKG0sRSksST1tLnNsaWNlKEUsay5pbmRleCk7cmV0dXJuIGsuc3RhdHVzP1QoRSwnbm90IFxcXCInK0krJ1xcXCInKTp3KEUsbnVsbCl9KX1mdW5jdGlvbiBqcihjKXtyZXR1cm4gbGUoYykscihmdW5jdGlvbihtLEUpe3ZhciBrPXoobSxFKTtyZXR1cm4gRTxtLmxlbmd0aCYmYyhrKT93KEUrMSxrKTpUKEUsXFxcImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgXFxcIitjKX0pfWZ1bmN0aW9uIFRvKGMsbSl7YXJndW1lbnRzLmxlbmd0aDwyJiYobT1jLGM9dm9pZCAwKTt2YXIgRT1yKGZ1bmN0aW9uKGssSSl7cmV0dXJuIEUuXz1tKCkuXyxFLl8oayxJKX0pO3JldHVybiBjP0UuZGVzYyhjKTpFfWZ1bmN0aW9uIHFzKCl7cmV0dXJuICRyKFxcXCJmYW50YXN5LWxhbmQvZW1wdHlcXFwiKX1zLnBhcnNlPWZ1bmN0aW9uKGMpe2lmKHR5cGVvZiBjIT1cXFwic3RyaW5nXFxcIiYmIUQoYykpdGhyb3cgbmV3IEVycm9yKFxcXCIucGFyc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN0cmluZyBvciBCdWZmZXIgYXMgaXRzIGFyZ3VtZW50XFxcIik7dmFyIG0sRT10aGlzLnNraXAoVXMpLl8oYywwKTtyZXR1cm4gbT1FLnN0YXR1cz97c3RhdHVzOiEwLHZhbHVlOkUudmFsdWV9OntzdGF0dXM6ITEsaW5kZXg6VihjLEUuZnVydGhlc3QpLGV4cGVjdGVkOkUuZXhwZWN0ZWR9LGRlbGV0ZSBNW2NdLG19LHMudHJ5UGFyc2U9ZnVuY3Rpb24oYyl7dmFyIG09dGhpcy5wYXJzZShjKTtpZihtLnN0YXR1cylyZXR1cm4gbS52YWx1ZTt2YXIgRT1ibyhjLG0pLGs9bmV3IEVycm9yKEUpO3Rocm93IGsudHlwZT1cXFwiUGFyc2ltbW9uRXJyb3JcXFwiLGsucmVzdWx0PW0sa30scy5hc3NlcnQ9ZnVuY3Rpb24oYyxtKXtyZXR1cm4gdGhpcy5jaGFpbihmdW5jdGlvbihFKXtyZXR1cm4gYyhFKT9qdChFKTokcihtKX0pfSxzLm9yPWZ1bmN0aW9uKGMpe3JldHVybiBQcih0aGlzLGMpfSxzLnRyaW09ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMud3JhcChjLGMpfSxzLndyYXA9ZnVuY3Rpb24oYyxtKXtyZXR1cm4gUnQoYyx0aGlzLG0sZnVuY3Rpb24oRSxrKXtyZXR1cm4ga30pfSxzLnRocnU9ZnVuY3Rpb24oYyl7cmV0dXJuIGModGhpcyl9LHMudGhlbj1mdW5jdGlvbihjKXtyZXR1cm4gaihjKSxCcih0aGlzLGMpLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbVsxXX0pfSxzLm1hbnk9ZnVuY3Rpb24oKXt2YXIgYz10aGlzO3JldHVybiByKGZ1bmN0aW9uKG0sRSl7Zm9yKHZhciBrPVtdLEk9dm9pZCAwOzspe2lmKCEoST1DKGMuXyhtLEUpLEkpKS5zdGF0dXMpcmV0dXJuIEModyhFLGspLEkpO2lmKEU9PT1JLmluZGV4KXRocm93IG5ldyBFcnJvcihcXFwiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIGEgcGFyc2VyIHdoaWNoIGNhbiBhY2NlcHQgemVybyBjaGFyYWN0ZXJzIGlzIHVzdWFsbHkgdGhlIGNhdXNlXFxcIik7RT1JLmluZGV4LGsucHVzaChJLnZhbHVlKX19KX0scy50aWVXaXRoPWZ1bmN0aW9uKGMpe3JldHVybiB4KGMpLHRoaXMubWFwKGZ1bmN0aW9uKG0pe2lmKGZ1bmN0aW9uKEkpe2lmKCF2KEkpKXRocm93IG5ldyBFcnJvcihcXFwibm90IGFuIGFycmF5OiBcXFwiK0kpfShtKSxtLmxlbmd0aCl7eChtWzBdKTtmb3IodmFyIEU9bVswXSxrPTE7azxtLmxlbmd0aDtrKyspeChtW2tdKSxFKz1jK21ba107cmV0dXJuIEV9cmV0dXJuXFxcIlxcXCJ9KX0scy50aWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aWVXaXRoKFxcXCJcXFwiKX0scy50aW1lcz1mdW5jdGlvbihjLG0pe3ZhciBFPXRoaXM7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKG09YykscmUoYykscmUobSkscihmdW5jdGlvbihrLEkpe2Zvcih2YXIgTj1bXSxMPXZvaWQgMCxxPXZvaWQgMCxuZT0wO25lPGM7bmUrPTEpe2lmKHE9QyhMPUUuXyhrLEkpLHEpLCFMLnN0YXR1cylyZXR1cm4gcTtJPUwuaW5kZXgsTi5wdXNoKEwudmFsdWUpfWZvcig7bmU8bSYmKHE9QyhMPUUuXyhrLEkpLHEpLEwuc3RhdHVzKTtuZSs9MSlJPUwuaW5kZXgsTi5wdXNoKEwudmFsdWUpO3JldHVybiBDKHcoSSxOKSxxKX0pfSxzLnJlc3VsdD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gY30pfSxzLmF0TW9zdD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50aW1lcygwLGMpfSxzLmF0TGVhc3Q9ZnVuY3Rpb24oYyl7cmV0dXJuIFJ0KHRoaXMudGltZXMoYyksdGhpcy5tYW55KCksZnVuY3Rpb24obSxFKXtyZXR1cm4gbS5jb25jYXQoRSl9KX0scy5tYXA9ZnVuY3Rpb24oYyl7bGUoYyk7dmFyIG09dGhpcztyZXR1cm4gcihmdW5jdGlvbihFLGspe3ZhciBJPW0uXyhFLGspO3JldHVybiBJLnN0YXR1cz9DKHcoSS5pbmRleCxjKEkudmFsdWUpKSxJKTpJfSl9LHMuY29udHJhbWFwPWZ1bmN0aW9uKGMpe2xlKGMpO3ZhciBtPXRoaXM7cmV0dXJuIHIoZnVuY3Rpb24oRSxrKXt2YXIgST1tLnBhcnNlKGMoRS5zbGljZShrKSkpO3JldHVybiBJLnN0YXR1cz93KGsrRS5sZW5ndGgsSS52YWx1ZSk6SX0pfSxzLnByb21hcD1mdW5jdGlvbihjLG0pe3JldHVybiBsZShjKSxsZShtKSx0aGlzLmNvbnRyYW1hcChjKS5tYXAobSl9LHMuc2tpcD1mdW5jdGlvbihjKXtyZXR1cm4gQnIodGhpcyxjKS5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG1bMF19KX0scy5tYXJrPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KEJuLHRoaXMsQm4sZnVuY3Rpb24oYyxtLEUpe3JldHVybntzdGFydDpjLHZhbHVlOm0sZW5kOkV9fSl9LHMubm9kZT1mdW5jdGlvbihjKXtyZXR1cm4gUnQoQm4sdGhpcyxCbixmdW5jdGlvbihtLEUsayl7cmV0dXJue25hbWU6Yyx2YWx1ZTpFLHN0YXJ0Om0sZW5kOmt9fSl9LHMuc2VwQnk9ZnVuY3Rpb24oYyl7cmV0dXJuIEZvKHRoaXMsYyl9LHMuc2VwQnkxPWZ1bmN0aW9uKGMpe3JldHVybiBWcyh0aGlzLGMpfSxzLmxvb2thaGVhZD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5za2lwKFJyKGMpKX0scy5ub3RGb2xsb3dlZEJ5PWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLnNraXAod28oYykpfSxzLmRlc2M9ZnVuY3Rpb24oYyl7dihjKXx8KGM9W2NdKTt2YXIgbT10aGlzO3JldHVybiByKGZ1bmN0aW9uKEUsayl7dmFyIEk9bS5fKEUsayk7cmV0dXJuIEkuc3RhdHVzfHwoSS5leHBlY3RlZD1jKSxJfSl9LHMuZmFsbGJhY2s9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMub3IoanQoYykpfSxzLmFwPWZ1bmN0aW9uKGMpe3JldHVybiBSdChjLHRoaXMsZnVuY3Rpb24obSxFKXtyZXR1cm4gbShFKX0pfSxzLmNoYWluPWZ1bmN0aW9uKGMpe3ZhciBtPXRoaXM7cmV0dXJuIHIoZnVuY3Rpb24oRSxrKXt2YXIgST1tLl8oRSxrKTtyZXR1cm4gSS5zdGF0dXM/QyhjKEkudmFsdWUpLl8oRSxJLmluZGV4KSxJKTpJfSl9LHMuY29uY2F0PXMub3Iscy5lbXB0eT1xcyxzLm9mPWp0LHNbXFxcImZhbnRhc3ktbGFuZC9hcFxcXCJdPXMuYXAsc1tcXFwiZmFudGFzeS1sYW5kL2NoYWluXFxcIl09cy5jaGFpbixzW1xcXCJmYW50YXN5LWxhbmQvY29uY2F0XFxcIl09cy5jb25jYXQsc1tcXFwiZmFudGFzeS1sYW5kL2VtcHR5XFxcIl09cy5lbXB0eSxzW1xcXCJmYW50YXN5LWxhbmQvb2ZcXFwiXT1zLm9mLHNbXFxcImZhbnRhc3ktbGFuZC9tYXBcXFwiXT1zLm1hcDt2YXIgQm49cihmdW5jdGlvbihjLG0pe3JldHVybiB3KG0sVihjLG0pKX0pLFl1PXIoZnVuY3Rpb24oYyxtKXtyZXR1cm4gbT49Yy5sZW5ndGg/VChtLFxcXCJhbnkgY2hhcmFjdGVyL2J5dGVcXFwiKTp3KG0rMSx6KGMsbSkpfSksR3U9cihmdW5jdGlvbihjLG0pe3JldHVybiB3KGMubGVuZ3RoLGMuc2xpY2UobSkpfSksVXM9cihmdW5jdGlvbihjLG0pe3JldHVybiBtPGMubGVuZ3RoP1QobSxcXFwiRU9GXFxcIik6dyhtLG51bGwpfSksWnU9ZnQoL1swLTldLykuZGVzYyhcXFwiYSBkaWdpdFxcXCIpLFF1PWZ0KC9bMC05XSovKS5kZXNjKFxcXCJvcHRpb25hbCBkaWdpdHNcXFwiKSxYdT1mdCgvW2Etel0vaSkuZGVzYyhcXFwiYSBsZXR0ZXJcXFwiKSxlbD1mdCgvW2Etel0qL2kpLmRlc2MoXFxcIm9wdGlvbmFsIGxldHRlcnNcXFwiKSx0bD1mdCgvXFxcXHMqLykuZGVzYyhcXFwib3B0aW9uYWwgd2hpdGVzcGFjZVxcXCIpLG5sPWZ0KC9cXFxccysvKS5kZXNjKFxcXCJ3aGl0ZXNwYWNlXFxcIiksU289X24oXFxcIlxcXFxyXFxcIiksa289X24oYFxcbmApLENvPV9uKGBcXFxcclxcbmApLHhvPVByKENvLGtvLFNvKS5kZXNjKFxcXCJuZXdsaW5lXFxcIikscmw9UHIoeG8sVXMpO3IuYWxsPUd1LHIuYWx0PVByLHIuYW55PVl1LHIuY3I9U28sci5jcmVhdGVMYW5ndWFnZT1mdW5jdGlvbihjKXt2YXIgbT17fTtmb3IodmFyIEUgaW4gYykoe30pLmhhc093blByb3BlcnR5LmNhbGwoYyxFKSYmZnVuY3Rpb24oayl7bVtrXT1UbyhmdW5jdGlvbigpe3JldHVybiBjW2tdKG0pfSl9KEUpO3JldHVybiBtfSxyLmNybGY9Q28sci5jdXN0b209ZnVuY3Rpb24oYyl7cmV0dXJuIHIoYyh3LFQpKX0sci5kaWdpdD1adSxyLmRpZ2l0cz1RdSxyLmVtcHR5PXFzLHIuZW5kPXJsLHIuZW9mPVVzLHIuZmFpbD0kcixyLmZvcm1hdEVycm9yPWJvLHIuaW5kZXg9Qm4sci5pc1BhcnNlcj1PLHIubGF6eT1UbyxyLmxldHRlcj1YdSxyLmxldHRlcnM9ZWwsci5sZj1rbyxyLmxvb2thaGVhZD1ScixyLm1ha2VGYWlsdXJlPVQsci5tYWtlU3VjY2Vzcz13LHIubmV3bGluZT14byxyLm5vbmVPZj1mdW5jdGlvbihjKXtyZXR1cm4ganIoZnVuY3Rpb24obSl7cmV0dXJuIGMuaW5kZXhPZihtKTwwfSkuZGVzYyhcXFwibm9uZSBvZiAnXFxcIitjK1xcXCInXFxcIil9LHIubm90Rm9sbG93ZWRCeT13byxyLm9mPWp0LHIub25lT2Y9ZnVuY3Rpb24oYyl7Zm9yKHZhciBtPWMuc3BsaXQoXFxcIlxcXCIpLEU9MDtFPG0ubGVuZ3RoO0UrKyltW0VdPVxcXCInXFxcIittW0VdK1xcXCInXFxcIjtyZXR1cm4ganIoZnVuY3Rpb24oayl7cmV0dXJuIGMuaW5kZXhPZihrKT49MH0pLmRlc2MobSl9LHIub3B0V2hpdGVzcGFjZT10bCxyLlBhcnNlcj1yLHIucmFuZ2U9ZnVuY3Rpb24oYyxtKXtyZXR1cm4ganIoZnVuY3Rpb24oRSl7cmV0dXJuIGM8PUUmJkU8PW19KS5kZXNjKGMrXFxcIi1cXFwiK20pfSxyLnJlZ2V4PWZ0LHIucmVnZXhwPWZ0LHIuc2VwQnk9Rm8sci5zZXBCeTE9VnMsci5zZXE9QnIsci5zZXFNYXA9UnQsci5zZXFPYmo9ZnVuY3Rpb24oKXtmb3IodmFyIGMsbT17fSxFPTAsaz0oYz1hcmd1bWVudHMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYykpLEk9ay5sZW5ndGgsTj0wO048STtOKz0xKXt2YXIgTD1rW05dO2lmKCFPKEwpKXtpZih2KEwpJiZMLmxlbmd0aD09PTImJnR5cGVvZiBMWzBdPT1cXFwic3RyaW5nXFxcIiYmTyhMWzFdKSl7dmFyIHE9TFswXTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxxKSl0aHJvdyBuZXcgRXJyb3IoXFxcInNlcU9iajogZHVwbGljYXRlIGtleSBcXFwiK3EpO21bcV09ITAsRSsrO2NvbnRpbnVlfXRocm93IG5ldyBFcnJvcihcXFwic2VxT2JqIGFyZ3VtZW50cyBtdXN0IGJlIHBhcnNlcnMgb3IgW3N0cmluZywgcGFyc2VyXSBhcnJheSBwYWlycy5cXFwiKX19aWYoRT09PTApdGhyb3cgbmV3IEVycm9yKFxcXCJzZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFyc2VyLCBmb3VuZCB6ZXJvXFxcIik7cmV0dXJuIHIoZnVuY3Rpb24obmUsU2Upe2Zvcih2YXIgZ2UsZHQ9e30sdmU9MDt2ZTxJO3ZlKz0xKXt2YXIgaHQsbm47aWYodihrW3ZlXSk/KGh0PWtbdmVdWzBdLG5uPWtbdmVdWzFdKTooaHQ9bnVsbCxubj1rW3ZlXSksIShnZT1DKG5uLl8obmUsU2UpLGdlKSkuc3RhdHVzKXJldHVybiBnZTtodCYmKGR0W2h0XT1nZS52YWx1ZSksU2U9Z2UuaW5kZXh9cmV0dXJuIEModyhTZSxkdCksZ2UpfSl9LHIuc3RyaW5nPV9uLHIuc3VjY2VlZD1qdCxyLnRha2VXaGlsZT1mdW5jdGlvbihjKXtyZXR1cm4gbGUoYykscihmdW5jdGlvbihtLEUpe2Zvcih2YXIgaz1FO2s8bS5sZW5ndGgmJmMoeihtLGspKTspaysrO3JldHVybiB3KGssbS5zbGljZShFLGspKX0pfSxyLnRlc3Q9anIsci53aGl0ZXNwYWNlPW5sLHJbXFxcImZhbnRhc3ktbGFuZC9lbXB0eVxcXCJdPXFzLHJbXFxcImZhbnRhc3ktbGFuZC9vZlxcXCJdPWp0LHIuQmluYXJ5PXtiaXRTZXE6aCxiaXRTZXFPYmo6ZnVuY3Rpb24oYyl7ZCgpO3ZhciBtPXt9LEU9MCxrPWEoZnVuY3Rpb24oTil7aWYodihOKSl7dmFyIEw9TjtpZihMLmxlbmd0aCE9PTIpdGhyb3cgbmV3IEVycm9yKFxcXCJbXFxcIitMLmpvaW4oXFxcIiwgXFxcIikrXFxcIl0gc2hvdWxkIGJlIGxlbmd0aCAyLCBnb3QgbGVuZ3RoIFxcXCIrTC5sZW5ndGgpO2lmKHgoTFswXSkscmUoTFsxXSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sTFswXSkpdGhyb3cgbmV3IEVycm9yKFxcXCJkdXBsaWNhdGUga2V5IGluIGJpdFNlcU9iajogXFxcIitMWzBdKTtyZXR1cm4gbVtMWzBdXT0hMCxFKyssTH1yZXR1cm4gcmUoTiksW251bGwsTl19LGMpO2lmKEU8MSl0aHJvdyBuZXcgRXJyb3IoXFxcImJpdFNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYWlyLCBnb3QgW1xcXCIrYy5qb2luKFxcXCIsIFxcXCIpK1xcXCJdXFxcIik7dmFyIEk9YShmdW5jdGlvbihOKXtyZXR1cm4gTlswXX0sayk7cmV0dXJuIGgoYShmdW5jdGlvbihOKXtyZXR1cm4gTlsxXX0saykpLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gbyhmdW5jdGlvbihMLHEpe3JldHVybiBxWzBdIT09bnVsbCYmKExbcVswXV09cVsxXSksTH0se30sYShmdW5jdGlvbihMLHEpe3JldHVybltMLE5bcV1dfSxJKSl9KX0sYnl0ZTpmdW5jdGlvbihjKXtpZihkKCkscmUoYyksYz4yNTUpdGhyb3cgbmV3IEVycm9yKFxcXCJWYWx1ZSBzcGVjaWZpZWQgdG8gYnl0ZSBjb25zdHJ1Y3RvciAoXFxcIitjK1xcXCI9MHhcXFwiK2MudG9TdHJpbmcoMTYpK1xcXCIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuXFxcIik7dmFyIG09KGM+MTU/XFxcIjB4XFxcIjpcXFwiMHgwXFxcIikrYy50b1N0cmluZygxNik7cmV0dXJuIHIoZnVuY3Rpb24oRSxrKXt2YXIgST16KEUsayk7cmV0dXJuIEk9PT1jP3coaysxLEkpOlQoayxtKX0pfSxidWZmZXI6ZnVuY3Rpb24oYyl7cmV0dXJuIHAoXFxcImJ1ZmZlclxcXCIsYykubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBCdWZmZXIuZnJvbShtKX0pfSxlbmNvZGVkU3RyaW5nOmZ1bmN0aW9uKGMsbSl7cmV0dXJuIHAoXFxcInN0cmluZ1xcXCIsbSkubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBFLnRvU3RyaW5nKGMpfSl9LHVpbnRCRTpGLHVpbnQ4QkU6RigxKSx1aW50MTZCRTpGKDIpLHVpbnQzMkJFOkYoNCksdWludExFOmcsdWludDhMRTpnKDEpLHVpbnQxNkxFOmcoMiksdWludDMyTEU6Zyg0KSxpbnRCRTp5LGludDhCRTp5KDEpLGludDE2QkU6eSgyKSxpbnQzMkJFOnkoNCksaW50TEU6UyxpbnQ4TEU6UygxKSxpbnQxNkxFOlMoMiksaW50MzJMRTpTKDQpLGZsb2F0QkU6cChcXFwiZmxvYXRCRVxcXCIsNCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLnJlYWRGbG9hdEJFKDApfSksZmxvYXRMRTpwKFxcXCJmbG9hdExFXFxcIiw0KS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVhZEZsb2F0TEUoMCl9KSxkb3VibGVCRTpwKFxcXCJkb3VibGVCRVxcXCIsOCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLnJlYWREb3VibGVCRSgwKX0pLGRvdWJsZUxFOnAoXFxcImRvdWJsZUxFXFxcIiw4KS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVhZERvdWJsZUxFKDApfSl9LG4uZXhwb3J0cz1yfV0pfSl9KTt2YXIgTXU9SW8oTGU9PntcXFwidXNlIHN0cmljdFxcXCI7dmFyIGdmPUxlJiZMZS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ocixzKXtyLl9fcHJvdG9fXz1zfXx8ZnVuY3Rpb24ocixzKXtmb3IodmFyIGkgaW4gcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyxpKSYmKHJbaV09c1tpXSl9LG4oZSx0KX07cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQhPVxcXCJmdW5jdGlvblxcXCImJnQhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXFxcIitTdHJpbmcodCkrXFxcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXFxcIik7bihlLHQpO2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPWV9ZS5wcm90b3R5cGU9dD09PW51bGw/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGUsXFxcIl9fZXNNb2R1bGVcXFwiLHt2YWx1ZTohMH0pO0xlLkVtcHR5QlRyZWU9TGUuYXNTZXQ9TGUuc2ltcGxlQ29tcGFyYXRvcj1MZS5kZWZhdWx0Q29tcGFyYXRvcj12b2lkIDA7ZnVuY3Rpb24gTnUobixlKXtpZihOdW1iZXIuaXNGaW5pdGUobikmJk51bWJlci5pc0Zpbml0ZShlKSlyZXR1cm4gbi1lO3ZhciB0PXR5cGVvZiBuLHI9dHlwZW9mIGU7aWYodCE9PXIpcmV0dXJuIHQ8cj8tMToxO2lmKHQ9PT1cXFwib2JqZWN0XFxcIil7aWYobj09PW51bGwpcmV0dXJuIGU9PT1udWxsPzA6LTE7aWYoZT09PW51bGwpcmV0dXJuIDE7aWYobj1uLnZhbHVlT2YoKSxlPWUudmFsdWVPZigpLHQ9dHlwZW9mIG4scj10eXBlb2YgZSx0IT09cilyZXR1cm4gdDxyPy0xOjF9cmV0dXJuIG48ZT8tMTpuPmU/MTpuPT09ZT8wOk51bWJlci5pc05hTihuKT9OdW1iZXIuaXNOYU4oZSk/MDotMTpOdW1iZXIuaXNOYU4oZSk/MTpBcnJheS5pc0FycmF5KG4pPzA6TnVtYmVyLk5hTn1MZS5kZWZhdWx0Q29tcGFyYXRvcj1OdTtmdW5jdGlvbiBiZihuLGUpe3JldHVybiBuPmU/MTpuPGU/LTE6MH1MZS5zaW1wbGVDb21wYXJhdG9yPWJmO3ZhciBsdD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oZSx0LHIpe3RoaXMuX3Jvb3Q9dW8sdGhpcy5fc2l6ZT0wLHRoaXMuX21heE5vZGVTaXplPXI+PTQ/TWF0aC5taW4ociwyNTYpOjMyLHRoaXMuX2NvbXBhcmU9dHx8TnUsZSYmdGhpcy5zZXRQYWlycyhlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFxcXCJzaXplXFxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFxcXCJsZW5ndGhcXFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcImlzRW1wdHlcXFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZT09PTB9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9yb290PXVvLHRoaXMuX3NpemU9MH0sbi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7cmV0dXJuIHQhPT12b2lkIDAmJihlPWUuYmluZCh0KSksdGhpcy5mb3JFYWNoUGFpcihmdW5jdGlvbihzLGkpe3JldHVybiBlKGkscyxyKX0pfSxuLnByb3RvdHlwZS5mb3JFYWNoUGFpcj1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubWluS2V5KCkscz10aGlzLm1heEtleSgpO3JldHVybiB0aGlzLmZvclJhbmdlKHIscywhMCxlLHQpfSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcm9vdC5nZXQoZSx0LHRoaXMpfSxuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX3Jvb3QuaXNTaGFyZWQmJih0aGlzLl9yb290PXRoaXMuX3Jvb3QuY2xvbmUoKSk7dmFyIHM9dGhpcy5fcm9vdC5zZXQoZSx0LHIsdGhpcyk7cmV0dXJuIHM9PT0hMHx8cz09PSExP3M6KHRoaXMuX3Jvb3Q9bmV3IEZmKFt0aGlzLl9yb290LHNdKSwhMCl9LG4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5mb3JSYW5nZShlLGUsITAsdm9pZCAwKSE9PTB9LG4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lZGl0UmFuZ2UoZSxlLCEwLHZ1KSE9PTB9LG4ucHJvdG90eXBlLndpdGg9ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXRoaXMuY2xvbmUoKTtyZXR1cm4gcy5zZXQoZSx0LHIpfHxyP3M6dGhpc30sbi5wcm90b3R5cGUud2l0aFBhaXJzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jbG9uZSgpO3JldHVybiByLnNldFBhaXJzKGUsdCkhPT0wfHx0P3I6dGhpc30sbi5wcm90b3R5cGUud2l0aEtleXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5jbG9uZSgpLHM9ITEsaT0wO2k8ZS5sZW5ndGg7aSsrKXM9ci5zZXQoZVtpXSx2b2lkIDAsITEpfHxzO3JldHVybiB0JiYhcz90aGlzOnJ9LG4ucHJvdG90eXBlLndpdGhvdXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy53aXRob3V0UmFuZ2UoZSxlLCEwLHQpfSxuLnByb3RvdHlwZS53aXRob3V0S2V5cz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY2xvbmUoKTtyZXR1cm4gci5kZWxldGVLZXlzKGUpfHwhdD9yOnRoaXN9LG4ucHJvdG90eXBlLndpdGhvdXRSYW5nZT1mdW5jdGlvbihlLHQscixzKXt2YXIgaT10aGlzLmNsb25lKCk7cmV0dXJuIGkuZGVsZXRlUmFuZ2UoZSx0LHIpPT09MCYmcz90aGlzOml9LG4ucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ3JlZWR5Q2xvbmUoKSxzO3JldHVybiByLmVkaXRBbGwoZnVuY3Rpb24oaSxvLGEpe2lmKCFlKGksbyxhKSlyZXR1cm4gcz1BdX0pLCFzJiZ0P3RoaXM6cn0sbi5wcm90b3R5cGUubWFwVmFsdWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9LHI9dGhpcy5ncmVlZHlDbG9uZSgpO3JldHVybiByLmVkaXRBbGwoZnVuY3Rpb24ocyxpLG8pe3JldHVybiB0LnZhbHVlPWUoaSxzLG8pLHR9KSxyfSxuLnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MCxzPXQsaT10aGlzLmVudHJpZXModGhpcy5taW5LZXkoKSxMciksbzshKG89aS5uZXh0KCkpLmRvbmU7KXM9ZShzLG8udmFsdWUscisrLHRoaXMpO3JldHVybiBzfSxuLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5maW5kUGF0aChlKTtpZihyPT09dm9pZCAwKXJldHVybiBMbigpO3ZhciBzPXIubm9kZXF1ZXVlLGk9ci5ub2RlaW5kZXgsbz1yLmxlYWYsYT10IT09dm9pZCAwPzE6MCx1PWU9PT12b2lkIDA/LTE6by5pbmRleE9mKGUsMCx0aGlzLl9jb21wYXJlKS0xO3JldHVybiBMbihmdW5jdGlvbigpe2U6Zm9yKDs7KXN3aXRjaChhKXtjYXNlIDA6aWYoKyt1PG8ua2V5cy5sZW5ndGgpcmV0dXJue2RvbmU6ITEsdmFsdWU6W28ua2V5c1t1XSxvLnZhbHVlc1t1XV19O2E9Mjtjb250aW51ZTtjYXNlIDE6aWYoKyt1PG8ua2V5cy5sZW5ndGgpcmV0dXJuIHRbMF09by5rZXlzW3VdLHRbMV09by52YWx1ZXNbdV0se2RvbmU6ITEsdmFsdWU6dH07YT0yO2Nhc2UgMjpmb3IodmFyIGw9LTE7Oyl7aWYoKytsPj1zLmxlbmd0aCl7YT0zO2NvbnRpbnVlIGV9aWYoKytpW2xdPHNbbF0ubGVuZ3RoKWJyZWFrfWZvcig7bD4wO2wtLSlzW2wtMV09c1tsXVtpW2xdXS5jaGlsZHJlbixpW2wtMV09MDtvPXNbMF1baVswXV0sdT0tMSxhPXQhPT12b2lkIDA/MTowO2NvbnRpbnVlO2Nhc2UgMzpyZXR1cm57ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fX0pfSxuLnByb3RvdHlwZS5lbnRyaWVzUmV2ZXJzZWQ9ZnVuY3Rpb24oZSx0LHIpe2lmKGU9PT12b2lkIDAmJihlPXRoaXMubWF4S2V5KCkscj12b2lkIDAsZT09PXZvaWQgMCkpcmV0dXJuIExuKCk7dmFyIHM9dGhpcy5maW5kUGF0aChlKXx8dGhpcy5maW5kUGF0aCh0aGlzLm1heEtleSgpKSxpPXMubm9kZXF1ZXVlLG89cy5ub2RlaW5kZXgsYT1zLmxlYWY7TmUoIWlbMF18fGE9PT1pWzBdW29bMF1dLFxcXCJ3YXQhXFxcIik7dmFyIHU9YS5pbmRleE9mKGUsMCx0aGlzLl9jb21wYXJlKTshciYmdTxhLmtleXMubGVuZ3RoJiZ0aGlzLl9jb21wYXJlKGEua2V5c1t1XSxlKTw9MCYmdSsrO3ZhciBsPXQhPT12b2lkIDA/MTowO3JldHVybiBMbihmdW5jdGlvbigpe2U6Zm9yKDs7KXN3aXRjaChsKXtjYXNlIDA6aWYoLS11Pj0wKXJldHVybntkb25lOiExLHZhbHVlOlthLmtleXNbdV0sYS52YWx1ZXNbdV1dfTtsPTI7Y29udGludWU7Y2FzZSAxOmlmKC0tdT49MClyZXR1cm4gdFswXT1hLmtleXNbdV0sdFsxXT1hLnZhbHVlc1t1XSx7ZG9uZTohMSx2YWx1ZTp0fTtsPTI7Y2FzZSAyOmZvcih2YXIgZD0tMTs7KXtpZigrK2Q+PWkubGVuZ3RoKXtsPTM7Y29udGludWUgZX1pZigtLW9bZF0+PTApYnJlYWt9Zm9yKDtkPjA7ZC0tKWlbZC0xXT1pW2RdW29bZF1dLmNoaWxkcmVuLG9bZC0xXT1pW2QtMV0ubGVuZ3RoLTE7YT1pWzBdW29bMF1dLHU9YS5rZXlzLmxlbmd0aCxsPXQhPT12b2lkIDA/MTowO2NvbnRpbnVlO2Nhc2UgMzpyZXR1cm57ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fX0pfSxuLnByb3RvdHlwZS5maW5kUGF0aD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yb290LHIscztpZih0LmlzTGVhZilyPUl1LHM9SXU7ZWxzZXtyPVtdLHM9W107Zm9yKHZhciBpPTA7IXQuaXNMZWFmO2krKyl7aWYocltpXT10LmNoaWxkcmVuLHNbaV09ZT09PXZvaWQgMD8wOnQuaW5kZXhPZihlLDAsdGhpcy5fY29tcGFyZSksc1tpXT49cltpXS5sZW5ndGgpcmV0dXJuO3Q9cltpXVtzW2ldXX1yLnJldmVyc2UoKSxzLnJldmVyc2UoKX1yZXR1cm57bm9kZXF1ZXVlOnIsbm9kZWluZGV4OnMsbGVhZjp0fX0sbi5wcm90b3R5cGUuZGlmZkFnYWluc3Q9ZnVuY3Rpb24oZSx0LHIscyl7aWYoZS5fY29tcGFyZSE9PXRoaXMuX2NvbXBhcmUpdGhyb3cgbmV3IEVycm9yKFxcXCJUcmVlIGNvbXBhcmF0b3JzIGFyZSBub3QgdGhlIHNhbWUuXFxcIik7aWYodGhpcy5pc0VtcHR5fHxlLmlzRW1wdHkpcmV0dXJuIHRoaXMuaXNFbXB0eSYmZS5pc0VtcHR5P3ZvaWQgMDp0aGlzLmlzRW1wdHk/cj09PXZvaWQgMD92b2lkIDA6bi5zdGVwVG9FbmQobi5tYWtlRGlmZkN1cnNvcihlKSxyKTp0PT09dm9pZCAwP3ZvaWQgMDpuLnN0ZXBUb0VuZChuLm1ha2VEaWZmQ3Vyc29yKHRoaXMpLHQpO2Zvcih2YXIgaT10aGlzLl9jb21wYXJlLG89bi5tYWtlRGlmZkN1cnNvcih0aGlzKSxhPW4ubWFrZURpZmZDdXJzb3IoZSksdT0hMCxsPSEwLGQ9bi5jb21wYXJlKG8sYSxpKTt1JiZsOyl7dmFyIGg9bi5jb21wYXJlKG8sYSxpKSxwPW8ubGVhZixmPW8uaW50ZXJuYWxTcGluZSxGPW8ubGV2ZWxJbmRpY2VzLGc9YS5sZWFmLHk9YS5pbnRlcm5hbFNwaW5lLFM9YS5sZXZlbEluZGljZXM7aWYocHx8Zyl7aWYoZCE9PTApe2lmKGg9PT0wKXtpZihwJiZnJiZzKXt2YXIgTz1wLnZhbHVlc1tGW0YubGVuZ3RoLTFdXSx2PWcudmFsdWVzW1NbUy5sZW5ndGgtMV1dO2lmKCFPYmplY3QuaXMoTyx2KSl7dmFyIEQ9cyhvLmN1cnJlbnRLZXksTyx2KTtpZihEJiZELmJyZWFrKXJldHVybiBELmJyZWFrfX19ZWxzZSBpZihoPjApe2lmKGcmJnIpe3ZhciB3PWcudmFsdWVzW1NbUy5sZW5ndGgtMV1dLEQ9cihhLmN1cnJlbnRLZXksdyk7aWYoRCYmRC5icmVhaylyZXR1cm4gRC5icmVha319ZWxzZSBpZih0JiZwJiZkIT09MCl7dmFyIE89cC52YWx1ZXNbRltGLmxlbmd0aC0xXV0sRD10KG8uY3VycmVudEtleSxPKTtpZihEJiZELmJyZWFrKXJldHVybiBELmJyZWFrfX19ZWxzZSBpZighcCYmIWcmJmg9PT0wKXt2YXIgVD1mLmxlbmd0aC0xLEM9eS5sZW5ndGgtMSxNPWZbVF1bRltUXV0sVj15W0NdW1NbQ11dO2lmKFY9PT1NKXtkPTAsdT1uLnN0ZXAobywhMCksbD1uLnN0ZXAoYSwhMCk7Y29udGludWV9fWQ9aCxoPDA/dT1uLnN0ZXAobyk6bD1uLnN0ZXAoYSl9aWYodSYmdClyZXR1cm4gbi5maW5pc2hDdXJzb3JXYWxrKG8sYSxpLHQpO2lmKGwmJnIpcmV0dXJuIG4uZmluaXNoQ3Vyc29yV2FsayhhLG8saSxyKX0sbi5maW5pc2hDdXJzb3JXYWxrPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBpPW4uY29tcGFyZShlLHQscik7aWYoaT09PTApe2lmKCFuLnN0ZXAoZSkpcmV0dXJufWVsc2UgaTwwJiZOZSghMSxcXFwiY3Vyc29yIHdhbGsgdGVybWluYXRlZCBlYXJseVxcXCIpO3JldHVybiBuLnN0ZXBUb0VuZChlLHMpfSxuLnN0ZXBUb0VuZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0hMDtyOyl7dmFyIHM9ZS5sZWFmLGk9ZS5sZXZlbEluZGljZXMsbz1lLmN1cnJlbnRLZXk7aWYocyl7dmFyIGE9cy52YWx1ZXNbaVtpLmxlbmd0aC0xXV0sdT10KG8sYSk7aWYodSYmdS5icmVhaylyZXR1cm4gdS5icmVha31yPW4uc3RlcChlKX19LG4ubWFrZURpZmZDdXJzb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fcm9vdCxyPWUuaGVpZ2h0O3JldHVybntoZWlnaHQ6cixpbnRlcm5hbFNwaW5lOltbdF1dLGxldmVsSW5kaWNlczpbMF0sbGVhZjp2b2lkIDAsY3VycmVudEtleTp0Lm1heEtleSgpfX0sbi5zdGVwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5pbnRlcm5hbFNwaW5lLHM9ZS5sZXZlbEluZGljZXMsaT1lLmxlYWY7aWYodD09PSEwfHxpKXt2YXIgbz1zLmxlbmd0aDtpZih0PT09ITB8fHNbby0xXT09PTApe3ZhciBhPXIubGVuZ3RoO2lmKGE9PT0wKXJldHVybiExO2Zvcih2YXIgdT1hLTEsbD11O2w+PTA7KXtpZihzW2xdPjApcmV0dXJuIGw8by0xJiYoZS5sZWFmPXZvaWQgMCxzLnBvcCgpKSxsPHUmJihlLmludGVybmFsU3BpbmU9ci5zbGljZSgwLGwrMSkpLGUuY3VycmVudEtleT1yW2xdWy0tc1tsXV0ubWF4S2V5KCksITA7bC0tfXJldHVybiExfWVsc2V7dmFyIGQ9LS1zW28tMV07cmV0dXJuIGUuY3VycmVudEtleT1pLmtleXNbZF0sITB9fWVsc2V7dmFyIGg9ci5sZW5ndGgscD1oLTEsZj1yW3BdW3NbcF1dO2lmKGYuaXNMZWFmKXtlLmxlYWY9Zjt2YXIgZD1zW2hdPWYudmFsdWVzLmxlbmd0aC0xO2UuY3VycmVudEtleT1mLmtleXNbZF19ZWxzZXt2YXIgRj1mLmNoaWxkcmVuO3JbaF09Rjt2YXIgZz1GLmxlbmd0aC0xO3NbaF09ZyxlLmN1cnJlbnRLZXk9RltnXS5tYXhLZXkoKX1yZXR1cm4hMH19LG4uY29tcGFyZT1mdW5jdGlvbihlLHQscil7dmFyIHM9ZS5oZWlnaHQsaT1lLmN1cnJlbnRLZXksbz1lLmxldmVsSW5kaWNlcyxhPXQuaGVpZ2h0LHU9dC5jdXJyZW50S2V5LGw9dC5sZXZlbEluZGljZXMsZD1yKHUsaSk7aWYoZCE9PTApcmV0dXJuIGQ7dmFyIGg9czxhP3M6YSxwPW8ubGVuZ3RoLShzLWgpLGY9bC5sZW5ndGgtKGEtaCk7cmV0dXJuIHAtZn0sbi5wcm90b3R5cGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXMoZSxMcik7cmV0dXJuIExuKGZ1bmN0aW9uKCl7dmFyIHI9dC5uZXh0KCk7cmV0dXJuIHIudmFsdWUmJihyLnZhbHVlPXIudmFsdWVbMF0pLHJ9KX0sbi5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW50cmllcyhlLExyKTtyZXR1cm4gTG4oZnVuY3Rpb24oKXt2YXIgcj10Lm5leHQoKTtyZXR1cm4gci52YWx1ZSYmKHIudmFsdWU9ci52YWx1ZVsxXSkscn0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcIm1heE5vZGVTaXplXFxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heE5vZGVTaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG4ucHJvdG90eXBlLm1pbktleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290Lm1pbktleSgpfSxuLnByb3RvdHlwZS5tYXhLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdC5tYXhLZXkoKX0sbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LmlzU2hhcmVkPSEwO3ZhciBlPW5ldyBuKHZvaWQgMCx0aGlzLl9jb21wYXJlLHRoaXMuX21heE5vZGVTaXplKTtyZXR1cm4gZS5fcm9vdD10aGlzLl9yb290LGUuX3NpemU9dGhpcy5fc2l6ZSxlfSxuLnByb3RvdHlwZS5ncmVlZHlDbG9uZT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgbih2b2lkIDAsdGhpcy5fY29tcGFyZSx0aGlzLl9tYXhOb2RlU2l6ZSk7cmV0dXJuIHQuX3Jvb3Q9dGhpcy5fcm9vdC5ncmVlZHlDbG9uZShlKSx0Ll9zaXplPXRoaXMuX3NpemUsdH0sbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihlKXtlPT09dm9pZCAwJiYoZT0yMTQ3NDgzNjQ3KTt2YXIgdD10aGlzLm1pbktleSgpLHI9dGhpcy5tYXhLZXkoKTtyZXR1cm4gdCE9PXZvaWQgMD90aGlzLmdldFJhbmdlKHQsciwhMCxlKTpbXX0sbi5wcm90b3R5cGUua2V5c0FycmF5PWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSx0aGlzLm1heEtleSgpLCEwLCExLHRoaXMsMCxmdW5jdGlvbih0LHIpe2UucHVzaCh0KX0pLGV9LG4ucHJvdG90eXBlLnZhbHVlc0FycmF5PWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSx0aGlzLm1heEtleSgpLCEwLCExLHRoaXMsMCxmdW5jdGlvbih0LHIpe2UucHVzaChyKX0pLGV9LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9BcnJheSgpLnRvU3RyaW5nKCl9LG4ucHJvdG90eXBlLnNldElmTm90UHJlc2VudD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNldChlLHQsITEpfSxuLnByb3RvdHlwZS5uZXh0SGlnaGVyUGFpcj1mdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fFtdLGU9PT12b2lkIDA/dGhpcy5fcm9vdC5taW5QYWlyKHQpOnRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dEhpZ2hlcihlLHRoaXMuX2NvbXBhcmUsITEsdCl9LG4ucHJvdG90eXBlLm5leHRIaWdoZXJLZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uZXh0SGlnaGVyUGFpcihlLExyKTtyZXR1cm4gdCYmdFswXX0sbi5wcm90b3R5cGUubmV4dExvd2VyUGFpcj1mdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fFtdLGU9PT12b2lkIDA/dGhpcy5fcm9vdC5tYXhQYWlyKHQpOnRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGUsdGhpcy5fY29tcGFyZSwhMSx0KX0sbi5wcm90b3R5cGUubmV4dExvd2VyS2V5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubmV4dExvd2VyUGFpcihlLExyKTtyZXR1cm4gdCYmdFswXX0sbi5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGUsdGhpcy5fY29tcGFyZSwhMCx0fHxbXSl9LG4ucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0SGlnaGVyKGUsdGhpcy5fY29tcGFyZSwhMCx0fHxbXSl9LG4ucHJvdG90eXBlLmNoYW5nZUlmUHJlc2VudD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVkaXRSYW5nZShlLGUsITAsZnVuY3Rpb24ocixzKXtyZXR1cm57dmFsdWU6dH19KSE9PTB9LG4ucHJvdG90eXBlLmdldFJhbmdlPWZ1bmN0aW9uKGUsdCxyLHMpe3M9PT12b2lkIDAmJihzPTY3MTA4ODYzKTt2YXIgaT1bXTtyZXR1cm4gdGhpcy5fcm9vdC5mb3JSYW5nZShlLHQsciwhMSx0aGlzLDAsZnVuY3Rpb24obyxhKXtyZXR1cm4gaS5wdXNoKFtvLGFdKSxpLmxlbmd0aD5zP3dmOnZvaWQgMH0pLGl9LG4ucHJvdG90eXBlLnNldFBhaXJzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAscz0wO3M8ZS5sZW5ndGg7cysrKXRoaXMuc2V0KGVbc11bMF0sZVtzXVsxXSx0KSYmcisrO3JldHVybiByfSxuLnByb3RvdHlwZS5mb3JSYW5nZT1mdW5jdGlvbihlLHQscixzLGkpe3ZhciBvPXRoaXMuX3Jvb3QuZm9yUmFuZ2UoZSx0LHIsITEsdGhpcyxpfHwwLHMpO3JldHVybiB0eXBlb2Ygbz09XFxcIm51bWJlclxcXCI/bzpvLmJyZWFrfSxuLnByb3RvdHlwZS5lZGl0UmFuZ2U9ZnVuY3Rpb24oZSx0LHIscyxpKXt2YXIgbz10aGlzLl9yb290O28uaXNTaGFyZWQmJih0aGlzLl9yb290PW89by5jbG9uZSgpKTt0cnl7dmFyIGE9by5mb3JSYW5nZShlLHQsciwhMCx0aGlzLGl8fDAscyk7cmV0dXJuIHR5cGVvZiBhPT1cXFwibnVtYmVyXFxcIj9hOmEuYnJlYWt9ZmluYWxseXtmb3IodmFyIHU9dm9pZCAwO28ua2V5cy5sZW5ndGg8PTEmJiFvLmlzTGVhZjspdXx8KHU9by5pc1NoYXJlZCksdGhpcy5fcm9vdD1vPW8ua2V5cy5sZW5ndGg9PT0wP3VvOm8uY2hpbGRyZW5bMF07dSYmKG8uaXNTaGFyZWQ9ITApfX0sbi5wcm90b3R5cGUuZWRpdEFsbD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVkaXRSYW5nZSh0aGlzLm1pbktleSgpLHRoaXMubWF4S2V5KCksITAsZSx0KX0sbi5wcm90b3R5cGUuZGVsZXRlUmFuZ2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmVkaXRSYW5nZShlLHQscix2dSl9LG4ucHJvdG90eXBlLmRlbGV0ZUtleXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuZGVsZXRlKGVbdF0pJiZyKys7cmV0dXJuIHJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcXFwiaGVpZ2h0XFxcIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX3Jvb3QsdD0tMTtlOyl0KyssZT1lLmlzTGVhZj92b2lkIDA6ZS5jaGlsZHJlblswXTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuLnByb3RvdHlwZS5mcmVlemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuY2xlYXI9ZS5zZXQ9ZS5lZGl0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXFxcIkF0dGVtcHRlZCB0byBtb2RpZnkgYSBmcm96ZW4gQlRyZWVcXFwiKX19LG4ucHJvdG90eXBlLnVuZnJlZXplPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2xlYXIsZGVsZXRlIHRoaXMuc2V0LGRlbGV0ZSB0aGlzLmVkaXRSYW5nZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFxcXCJpc0Zyb3plblxcXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KFxcXCJlZGl0UmFuZ2VcXFwiKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuLnByb3RvdHlwZS5jaGVja1ZhbGlkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcm9vdC5jaGVja1ZhbGlkKDAsdGhpcywwKTtOZShlPT09dGhpcy5zaXplLFxcXCJzaXplIG1pc21hdGNoOiBjb3VudGVkIFxcXCIsZSxcXFwiYnV0IHN0b3JlZFxcXCIsdGhpcy5zaXplKX0sbn0oKTtMZS5kZWZhdWx0PWx0O2Z1bmN0aW9uIEVmKG4pe3JldHVybiBufUxlLmFzU2V0PUVmO1N5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiYobHQucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09bHQucHJvdG90eXBlLmVudHJpZXMpO2x0LnByb3RvdHlwZS53aGVyZT1sdC5wcm90b3R5cGUuZmlsdGVyO2x0LnByb3RvdHlwZS5zZXRSYW5nZT1sdC5wcm90b3R5cGUuc2V0UGFpcnM7bHQucHJvdG90eXBlLmFkZD1sdC5wcm90b3R5cGUuc2V0O2Z1bmN0aW9uIExuKG4pe249PT12b2lkIDAmJihuPWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0pO3ZhciBlPXtuZXh0Om59O3JldHVybiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmKGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksZX12YXIgTHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7ZT09PXZvaWQgMCYmKGU9W10pLHRoaXMua2V5cz1lLHRoaXMudmFsdWVzPXR8fGJlLHRoaXMuaXNTaGFyZWQ9dm9pZCAwfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcImlzTGVhZlxcXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuPT09dm9pZCAwfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG4ucHJvdG90eXBlLm1heEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleXNbdGhpcy5rZXlzLmxlbmd0aC0xXX0sbi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBzPXRoaXMua2V5cyxpPTAsbz1zLmxlbmd0aCxhPW8+PjE7aTxvOyl7dmFyIHU9cihzW2FdLGUpO2lmKHU8MClpPWErMTtlbHNlIGlmKHU+MClvPWE7ZWxzZXtpZih1PT09MClyZXR1cm4gYTtpZihlPT09ZSlyZXR1cm4gcy5sZW5ndGg7dGhyb3cgbmV3IEVycm9yKFxcXCJCVHJlZTogTmFOIHdhcyB1c2VkIGFzIGEga2V5XFxcIil9YT1pK28+PjF9cmV0dXJuIGFedH0sbi5wcm90b3R5cGUubWluS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c1swXX0sbi5wcm90b3R5cGUubWluUGFpcj1mdW5jdGlvbihlKXtpZih0aGlzLmtleXMubGVuZ3RoIT09MClyZXR1cm4gZVswXT10aGlzLmtleXNbMF0sZVsxXT10aGlzLnZhbHVlc1swXSxlfSxuLnByb3RvdHlwZS5tYXhQYWlyPWZ1bmN0aW9uKGUpe2lmKHRoaXMua2V5cy5sZW5ndGghPT0wKXt2YXIgdD10aGlzLmtleXMubGVuZ3RoLTE7cmV0dXJuIGVbMF09dGhpcy5rZXlzW3RdLGVbMV09dGhpcy52YWx1ZXNbdF0sZX19LG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZXM7cmV0dXJuIG5ldyBuKHRoaXMua2V5cy5zbGljZSgwKSxlPT09YmU/ZTplLnNsaWNlKDApKX0sbi5wcm90b3R5cGUuZ3JlZWR5Q2xvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNTaGFyZWQmJiFlP3RoaXM6dGhpcy5jbG9uZSgpfSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXRoaXMuaW5kZXhPZihlLC0xLHIuX2NvbXBhcmUpO3JldHVybiBzPDA/dDp0aGlzLnZhbHVlc1tzXX0sbi5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBpPXRoaXMuaW5kZXhPZihlLC0xLHQpLG89aTwwP35pLTE6cj9pOmktMTtpZihvPj0wKXJldHVybiBzWzBdPXRoaXMua2V5c1tvXSxzWzFdPXRoaXMudmFsdWVzW29dLHN9LG4ucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXI9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGk9dGhpcy5pbmRleE9mKGUsLTEsdCksbz1pPDA/fmk6cj9pOmkrMSxhPXRoaXMua2V5cztpZihvPGEubGVuZ3RoKXJldHVybiBzWzBdPWFbb10sc1sxXT10aGlzLnZhbHVlc1tvXSxzfSxuLnByb3RvdHlwZS5jaGVja1ZhbGlkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz10aGlzLmtleXMubGVuZ3RoLGk9dGhpcy52YWx1ZXMubGVuZ3RoO3JldHVybiBOZSh0aGlzLnZhbHVlcz09PWJlP3M8PWk6cz09PWksXFxcImtleXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaDogZGVwdGhcXFwiLGUsXFxcIndpdGggbGVuZ3Roc1xcXCIscyxpLFxcXCJhbmQgYmFzZUluZGV4XFxcIixyKSxOZShlPT0wfHxzPjAsXFxcImVtcHR5IGxlYWYgYXQgZGVwdGhcXFwiLGUsXFxcImFuZCBiYXNlSW5kZXhcXFwiLHIpLHN9LG4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQscixzKXt2YXIgaT10aGlzLmluZGV4T2YoZSwtMSxzLl9jb21wYXJlKTtpZihpPDApe2lmKGk9fmkscy5fc2l6ZSsrLHRoaXMua2V5cy5sZW5ndGg8cy5fbWF4Tm9kZVNpemUpcmV0dXJuIHRoaXMuaW5zZXJ0SW5MZWFmKGksZSx0LHMpO3ZhciBvPXRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSxhPXRoaXM7cmV0dXJuIGk+dGhpcy5rZXlzLmxlbmd0aCYmKGktPXRoaXMua2V5cy5sZW5ndGgsYT1vKSxhLmluc2VydEluTGVhZihpLGUsdCxzKSxvfWVsc2UgcmV0dXJuIHIhPT0hMSYmKHQhPT12b2lkIDAmJnRoaXMucmVpZnlWYWx1ZXMoKSx0aGlzLmtleXNbaV09ZSx0aGlzLnZhbHVlc1tpXT10KSwhMX0sbi5wcm90b3R5cGUucmVpZnlWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZXM9PT1iZT90aGlzLnZhbHVlcz10aGlzLnZhbHVlcy5zbGljZSgwLHRoaXMua2V5cy5sZW5ndGgpOnRoaXMudmFsdWVzfSxuLnByb3RvdHlwZS5pbnNlcnRJbkxlYWY9ZnVuY3Rpb24oZSx0LHIscyl7aWYodGhpcy5rZXlzLnNwbGljZShlLDAsdCksdGhpcy52YWx1ZXM9PT1iZSl7Zm9yKDtiZS5sZW5ndGg8cy5fbWF4Tm9kZVNpemU7KWJlLnB1c2godm9pZCAwKTtpZihyPT09dm9pZCAwKXJldHVybiEwO3RoaXMudmFsdWVzPWJlLnNsaWNlKDAsdGhpcy5rZXlzLmxlbmd0aC0xKX1yZXR1cm4gdGhpcy52YWx1ZXMuc3BsaWNlKGUsMCxyKSwhMH0sbi5wcm90b3R5cGUudGFrZUZyb21SaWdodD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnZhbHVlcztlLnZhbHVlcz09PWJlP3QhPT1iZSYmdC5wdXNoKHZvaWQgMCk6KHQ9dGhpcy5yZWlmeVZhbHVlcygpLHQucHVzaChlLnZhbHVlcy5zaGlmdCgpKSksdGhpcy5rZXlzLnB1c2goZS5rZXlzLnNoaWZ0KCkpfSxuLnByb3RvdHlwZS50YWtlRnJvbUxlZnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy52YWx1ZXM7ZS52YWx1ZXM9PT1iZT90IT09YmUmJnQudW5zaGlmdCh2b2lkIDApOih0PXRoaXMucmVpZnlWYWx1ZXMoKSx0LnVuc2hpZnQoZS52YWx1ZXMucG9wKCkpKSx0aGlzLmtleXMudW5zaGlmdChlLmtleXMucG9wKCkpfSxuLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMua2V5cy5sZW5ndGg+PjEsdD10aGlzLmtleXMuc3BsaWNlKGUpLHI9dGhpcy52YWx1ZXM9PT1iZT9iZTp0aGlzLnZhbHVlcy5zcGxpY2UoZSk7cmV0dXJuIG5ldyBuKHQscil9LG4ucHJvdG90eXBlLmZvclJhbmdlPWZ1bmN0aW9uKGUsdCxyLHMsaSxvLGEpe3ZhciB1PWkuX2NvbXBhcmUsbCxkO2lmKHQ9PT1lKXtpZighcnx8KGQ9KGw9dGhpcy5pbmRleE9mKGUsLTEsdSkpKzEsbDwwKSlyZXR1cm4gb31lbHNlIGw9dGhpcy5pbmRleE9mKGUsMCx1KSxkPXRoaXMuaW5kZXhPZih0LC0xLHUpLGQ8MD9kPX5kOnI9PT0hMCYmZCsrO3ZhciBoPXRoaXMua2V5cyxwPXRoaXMudmFsdWVzO2lmKGEhPT12b2lkIDApZm9yKHZhciBmPWw7ZjxkO2YrKyl7dmFyIEY9aFtmXSxnPWEoRixwW2ZdLG8rKyk7aWYoZyE9PXZvaWQgMCl7aWYocz09PSEwKXtpZihGIT09aFtmXXx8dGhpcy5pc1NoYXJlZD09PSEwKXRocm93IG5ldyBFcnJvcihcXFwiQlRyZWUgaWxsZWdhbGx5IGNoYW5nZWQgb3IgY2xvbmVkIGluIGVkaXRSYW5nZVxcXCIpO2cuZGVsZXRlPyh0aGlzLmtleXMuc3BsaWNlKGYsMSksdGhpcy52YWx1ZXMhPT1iZSYmdGhpcy52YWx1ZXMuc3BsaWNlKGYsMSksaS5fc2l6ZS0tLGYtLSxkLS0pOmcuaGFzT3duUHJvcGVydHkoXFxcInZhbHVlXFxcIikmJihwW2ZdPWcudmFsdWUpfWlmKGcuYnJlYWshPT12b2lkIDApcmV0dXJuIGd9fWVsc2Ugbys9ZC1sO3JldHVybiBvfSxuLnByb3RvdHlwZS5tZXJnZVNpYmxpbmc9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmtleXMucHVzaC5hcHBseSh0aGlzLmtleXMsZS5rZXlzKSx0aGlzLnZhbHVlcz09PWJlKXtpZihlLnZhbHVlcz09PWJlKXJldHVybjt0aGlzLnZhbHVlcz10aGlzLnZhbHVlcy5zbGljZSgwLHRoaXMua2V5cy5sZW5ndGgpfXRoaXMudmFsdWVzLnB1c2guYXBwbHkodGhpcy52YWx1ZXMsZS5yZWlmeVZhbHVlcygpKX0sbn0oKSxGZj1mdW5jdGlvbihuKXtnZihlLG4pO2Z1bmN0aW9uIGUodCxyKXt2YXIgcz10aGlzO2lmKCFyKXtyPVtdO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXJbaV09dFtpXS5tYXhLZXkoKX1yZXR1cm4gcz1uLmNhbGwodGhpcyxyKXx8dGhpcyxzLmNoaWxkcmVuPXQsc31yZXR1cm4gZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5jaGlsZHJlbi5zbGljZSgwKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pc1NoYXJlZD0hMDtyZXR1cm4gbmV3IGUodCx0aGlzLmtleXMuc2xpY2UoMCkpfSxlLnByb3RvdHlwZS5ncmVlZHlDbG9uZT1mdW5jdGlvbih0KXtpZih0aGlzLmlzU2hhcmVkJiYhdClyZXR1cm4gdGhpcztmb3IodmFyIHI9bmV3IGUodGhpcy5jaGlsZHJlbi5zbGljZSgwKSx0aGlzLmtleXMuc2xpY2UoMCkpLHM9MDtzPHIuY2hpbGRyZW4ubGVuZ3RoO3MrKylyLmNoaWxkcmVuW3NdPXIuY2hpbGRyZW5bc10uZ3JlZWR5Q2xvbmUodCk7cmV0dXJuIHJ9LGUucHJvdG90eXBlLm1pbktleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdLm1pbktleSgpfSxlLnByb3RvdHlwZS5taW5QYWlyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdLm1pblBhaXIodCl9LGUucHJvdG90eXBlLm1heFBhaXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGgtMV0ubWF4UGFpcih0KX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQscixzKXt2YXIgaT10aGlzLmluZGV4T2YodCwwLHMuX2NvbXBhcmUpLG89dGhpcy5jaGlsZHJlbjtyZXR1cm4gaTxvLmxlbmd0aD9vW2ldLmdldCh0LHIscyk6dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXI9ZnVuY3Rpb24odCxyLHMsaSl7dmFyIG89dGhpcy5pbmRleE9mKHQsMCxyKSxhPXRoaXMuY2hpbGRyZW47aWYobz49YS5sZW5ndGgpcmV0dXJuIHRoaXMubWF4UGFpcihpKTt2YXIgdT1hW29dLmdldFBhaXJPck5leHRMb3dlcih0LHIscyxpKTtyZXR1cm4gdT09PXZvaWQgMCYmbz4wP2Fbby0xXS5tYXhQYWlyKGkpOnV9LGUucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXI9ZnVuY3Rpb24odCxyLHMsaSl7dmFyIG89dGhpcy5pbmRleE9mKHQsMCxyKSxhPXRoaXMuY2hpbGRyZW4sdT1hLmxlbmd0aDtpZighKG8+PXUpKXt2YXIgbD1hW29dLmdldFBhaXJPck5leHRIaWdoZXIodCxyLHMsaSk7cmV0dXJuIGw9PT12b2lkIDAmJm88dS0xP2FbbysxXS5taW5QYWlyKGkpOmx9fSxlLnByb3RvdHlwZS5jaGVja1ZhbGlkPWZ1bmN0aW9uKHQscixzKXt2YXIgaT10aGlzLmtleXMubGVuZ3RoLG89dGhpcy5jaGlsZHJlbi5sZW5ndGg7TmUoaT09PW8sXFxcImtleXMvY2hpbGRyZW4gbGVuZ3RoIG1pc21hdGNoOiBkZXB0aFxcXCIsdCxcXFwibGVuZ3Roc1xcXCIsaSxvLFxcXCJiYXNlSW5kZXhcXFwiLHMpLE5lKGk+MXx8dD4wLFxcXCJpbnRlcm5hbCBub2RlIGhhcyBsZW5ndGhcXFwiLGksXFxcImF0IGRlcHRoXFxcIix0LFxcXCJiYXNlSW5kZXhcXFwiLHMpO2Zvcih2YXIgYT0wLHU9dGhpcy5jaGlsZHJlbixsPXRoaXMua2V5cyxkPTAsaD0wO2g8bztoKyspYSs9dVtoXS5jaGVja1ZhbGlkKHQrMSxyLHMrYSksZCs9dVtoXS5rZXlzLmxlbmd0aCxOZShhPj1kLFxcXCJ3dGZcXFwiLHMpLE5lKGg9PT0wfHx1W2gtMV0uY29uc3RydWN0b3I9PT11W2hdLmNvbnN0cnVjdG9yLFxcXCJ0eXBlIG1pc21hdGNoLCBiYXNlSW5kZXg6XFxcIixzKSx1W2hdLm1heEtleSgpIT1sW2hdJiZOZSghMSxcXFwia2V5c1tcXFwiLGgsXFxcIl0gPVxcXCIsbFtoXSxcXFwiaXMgd3JvbmcsIHNob3VsZCBiZSBcXFwiLHVbaF0ubWF4S2V5KCksXFxcImF0IGRlcHRoXFxcIix0LFxcXCJiYXNlSW5kZXhcXFwiLHMpLGg9PT0wfHxyLl9jb21wYXJlKGxbaC0xXSxsW2hdKTwwfHxOZSghMSxcXFwic29ydCB2aW9sYXRpb24gYXQgZGVwdGhcXFwiLHQsXFxcImluZGV4XFxcIixoLFxcXCJrZXlzXFxcIixsW2gtMV0sbFtoXSk7dmFyIHA9ZD09PTA7cmV0dXJuKHB8fGQ+ci5tYXhOb2RlU2l6ZSpvKSYmTmUoITEscD9cXFwidG9vIGZld1xcXCI6XFxcInRvbyBtYW55XFxcIixcXFwiY2hpbGRyZW4gKFxcXCIsZCxhLFxcXCIpIGF0IGRlcHRoXFxcIix0LFxcXCJtYXhOb2RlU2l6ZTpcXFwiLHIubWF4Tm9kZVNpemUsXFxcImNoaWxkcmVuLmxlbmd0aDpcXFwiLG8sXFxcImJhc2VJbmRleDpcXFwiLHMpLGF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIscyxpKXt2YXIgbz10aGlzLmNoaWxkcmVuLGE9aS5fbWF4Tm9kZVNpemUsdT1pLl9jb21wYXJlLGw9TWF0aC5taW4odGhpcy5pbmRleE9mKHQsMCx1KSxvLmxlbmd0aC0xKSxkPW9bbF07aWYoZC5pc1NoYXJlZCYmKG9bbF09ZD1kLmNsb25lKCkpLGQua2V5cy5sZW5ndGg+PWEpe3ZhciBoO2w+MCYmKGg9b1tsLTFdKS5rZXlzLmxlbmd0aDxhJiZ1KGQua2V5c1swXSx0KTwwPyhoLmlzU2hhcmVkJiYob1tsLTFdPWg9aC5jbG9uZSgpKSxoLnRha2VGcm9tUmlnaHQoZCksdGhpcy5rZXlzW2wtMV09aC5tYXhLZXkoKSk6KGg9b1tsKzFdKSE9PXZvaWQgMCYmaC5rZXlzLmxlbmd0aDxhJiZ1KGQubWF4S2V5KCksdCk8MCYmKGguaXNTaGFyZWQmJihvW2wrMV09aD1oLmNsb25lKCkpLGgudGFrZUZyb21MZWZ0KGQpLHRoaXMua2V5c1tsXT1vW2xdLm1heEtleSgpKX12YXIgcD1kLnNldCh0LHIscyxpKTtpZihwPT09ITEpcmV0dXJuITE7aWYodGhpcy5rZXlzW2xdPWQubWF4S2V5KCkscD09PSEwKXJldHVybiEwO2lmKHRoaXMua2V5cy5sZW5ndGg8YSlyZXR1cm4gdGhpcy5pbnNlcnQobCsxLHApLCEwO3ZhciBmPXRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSxGPXRoaXM7cmV0dXJuIHUocC5tYXhLZXkoKSx0aGlzLm1heEtleSgpKT4wJiYoRj1mLGwtPXRoaXMua2V5cy5sZW5ndGgpLEYuaW5zZXJ0KGwrMSxwKSxmfSxlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxyKXt0aGlzLmNoaWxkcmVuLnNwbGljZSh0LDAsciksdGhpcy5rZXlzLnNwbGljZSh0LDAsci5tYXhLZXkoKSl9LGUucHJvdG90eXBlLnNwbGl0T2ZmUmlnaHRTaWRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jaGlsZHJlbi5sZW5ndGg+PjE7cmV0dXJuIG5ldyBlKHRoaXMuY2hpbGRyZW4uc3BsaWNlKHQpLHRoaXMua2V5cy5zcGxpY2UodCkpfSxlLnByb3RvdHlwZS50YWtlRnJvbVJpZ2h0PWZ1bmN0aW9uKHQpe3RoaXMua2V5cy5wdXNoKHQua2V5cy5zaGlmdCgpKSx0aGlzLmNoaWxkcmVuLnB1c2godC5jaGlsZHJlbi5zaGlmdCgpKX0sZS5wcm90b3R5cGUudGFrZUZyb21MZWZ0PWZ1bmN0aW9uKHQpe3RoaXMua2V5cy51bnNoaWZ0KHQua2V5cy5wb3AoKSksdGhpcy5jaGlsZHJlbi51bnNoaWZ0KHQuY2hpbGRyZW4ucG9wKCkpfSxlLnByb3RvdHlwZS5mb3JSYW5nZT1mdW5jdGlvbih0LHIscyxpLG8sYSx1KXt2YXIgbD1vLl9jb21wYXJlLGQ9dGhpcy5rZXlzLGg9dGhpcy5jaGlsZHJlbixwPXRoaXMuaW5kZXhPZih0LDAsbCksZj1wLEY9TWF0aC5taW4ocj09PXQ/cDp0aGlzLmluZGV4T2YociwwLGwpLGQubGVuZ3RoLTEpO2lmKGkpe2lmKGY8PUYpdHJ5e2Zvcig7Zjw9RjtmKyspe2hbZl0uaXNTaGFyZWQmJihoW2ZdPWhbZl0uY2xvbmUoKSk7dmFyIGc9aFtmXS5mb3JSYW5nZSh0LHIscyxpLG8sYSx1KTtpZihkW2ZdPWhbZl0ubWF4S2V5KCksdHlwZW9mIGchPVxcXCJudW1iZXJcXFwiKXJldHVybiBnO2E9Z319ZmluYWxseXt2YXIgeT1vLl9tYXhOb2RlU2l6ZT4+MTtmb3IocD4wJiZwLS0sZj1GO2Y+PXA7Zi0tKWhbZl0ua2V5cy5sZW5ndGg8PXkmJihoW2ZdLmtleXMubGVuZ3RoIT09MD90aGlzLnRyeU1lcmdlKGYsby5fbWF4Tm9kZVNpemUpOihkLnNwbGljZShmLDEpLGguc3BsaWNlKGYsMSkpKTtoLmxlbmd0aCE9PTAmJmhbMF0ua2V5cy5sZW5ndGg9PT0wJiZOZSghMSxcXFwiZW1wdGluZXNzIGJ1Z1xcXCIpfX1lbHNlIGZvcig7Zjw9RjtmKyspe3ZhciBnPWhbZl0uZm9yUmFuZ2UodCxyLHMsaSxvLGEsdSk7aWYodHlwZW9mIGchPVxcXCJudW1iZXJcXFwiKXJldHVybiBnO2E9Z31yZXR1cm4gYX0sZS5wcm90b3R5cGUudHJ5TWVyZ2U9ZnVuY3Rpb24odCxyKXt2YXIgcz10aGlzLmNoaWxkcmVuO3JldHVybiB0Pj0wJiZ0KzE8cy5sZW5ndGgmJnNbdF0ua2V5cy5sZW5ndGgrc1t0KzFdLmtleXMubGVuZ3RoPD1yPyhzW3RdLmlzU2hhcmVkJiYoc1t0XT1zW3RdLmNsb25lKCkpLHNbdF0ubWVyZ2VTaWJsaW5nKHNbdCsxXSxyKSxzLnNwbGljZSh0KzEsMSksdGhpcy5rZXlzLnNwbGljZSh0KzEsMSksdGhpcy5rZXlzW3RdPXNbdF0ubWF4S2V5KCksITApOiExfSxlLnByb3RvdHlwZS5tZXJnZVNpYmxpbmc9ZnVuY3Rpb24odCxyKXt2YXIgcz10aGlzLmtleXMubGVuZ3RoO3RoaXMua2V5cy5wdXNoLmFwcGx5KHRoaXMua2V5cyx0LmtleXMpO3ZhciBpPXQuY2hpbGRyZW47aWYodGhpcy5jaGlsZHJlbi5wdXNoLmFwcGx5KHRoaXMuY2hpbGRyZW4saSksdC5pc1NoYXJlZCYmIXRoaXMuaXNTaGFyZWQpZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5pc1NoYXJlZD0hMDt0aGlzLnRyeU1lcmdlKHMtMSxyKX0sZX0oTHUpLGJlPVtdLEF1PXtkZWxldGU6ITB9LHZ1PWZ1bmN0aW9uKCl7cmV0dXJuIEF1fSx3Zj17YnJlYWs6ITB9LHVvPWZ1bmN0aW9uKCl7dmFyIG49bmV3IEx1O3JldHVybiBuLmlzU2hhcmVkPSEwLG59KCksSXU9W10sTHI9W107ZnVuY3Rpb24gTmUobil7Zm9yKHZhciBlPVtdLHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdC0xXT1hcmd1bWVudHNbdF07aWYoIW4pdGhyb3cgZS51bnNoaWZ0KFxcXCJCKyB0cmVlXFxcIiksbmV3IEVycm9yKGUuam9pbihcXFwiIFxcXCIpKX1MZS5FbXB0eUJUcmVlPWZ1bmN0aW9uKCl7dmFyIG49bmV3IGx0O3JldHVybiBuLmZyZWV6ZSgpLG59KCl9KTt2YXIgcHQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcnt9LFVyPWNsYXNzIGV4dGVuZHMgcHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEludmFsaWQgRGF0ZVRpbWU6ICR7ZS50b01lc3NhZ2UoKX1gKX19LFdyPWNsYXNzIGV4dGVuZHMgcHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEludmFsaWQgSW50ZXJ2YWw6ICR7ZS50b01lc3NhZ2UoKX1gKX19LEhyPWNsYXNzIGV4dGVuZHMgcHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEludmFsaWQgRHVyYXRpb246ICR7ZS50b01lc3NhZ2UoKX1gKX19LG10PWNsYXNzIGV4dGVuZHMgcHR7fSx1bj1jbGFzcyBleHRlbmRzIHB0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBJbnZhbGlkIHVuaXQgJHtlfWApfX0sRGU9Y2xhc3MgZXh0ZW5kcyBwdHt9LHFlPWNsYXNzIGV4dGVuZHMgcHR7Y29uc3RydWN0b3IoKXtzdXBlcihcXFwiWm9uZSBpcyBhbiBhYnN0cmFjdCBjbGFzc1xcXCIpfX07dmFyIF89XFxcIm51bWVyaWNcXFwiLFVlPVxcXCJzaG9ydFxcXCIsSWU9XFxcImxvbmdcXFwiLGxuPXt5ZWFyOl8sbW9udGg6XyxkYXk6X30sUG49e3llYXI6Xyxtb250aDpVZSxkYXk6X30sSnM9e3llYXI6Xyxtb250aDpVZSxkYXk6Xyx3ZWVrZGF5OlVlfSwkbj17eWVhcjpfLG1vbnRoOkllLGRheTpffSxSbj17eWVhcjpfLG1vbnRoOkllLGRheTpfLHdlZWtkYXk6SWV9LGpuPXtob3VyOl8sbWludXRlOl99LFZuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl99LHFuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl8sdGltZVpvbmVOYW1lOlVlfSxVbj17aG91cjpfLG1pbnV0ZTpfLHNlY29uZDpfLHRpbWVab25lTmFtZTpJZX0sV249e2hvdXI6XyxtaW51dGU6Xyxob3VyQ3ljbGU6XFxcImgyM1xcXCJ9LEhuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl8saG91ckN5Y2xlOlxcXCJoMjNcXFwifSxLbj17aG91cjpfLG1pbnV0ZTpfLHNlY29uZDpfLGhvdXJDeWNsZTpcXFwiaDIzXFxcIix0aW1lWm9uZU5hbWU6VWV9LEpuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl8saG91ckN5Y2xlOlxcXCJoMjNcXFwiLHRpbWVab25lTmFtZTpJZX0sem49e3llYXI6Xyxtb250aDpfLGRheTpfLGhvdXI6XyxtaW51dGU6X30sWW49e3llYXI6Xyxtb250aDpfLGRheTpfLGhvdXI6XyxtaW51dGU6XyxzZWNvbmQ6X30sR249e3llYXI6Xyxtb250aDpVZSxkYXk6Xyxob3VyOl8sbWludXRlOl99LFpuPXt5ZWFyOl8sbW9udGg6VWUsZGF5Ol8saG91cjpfLG1pbnV0ZTpfLHNlY29uZDpffSx6cz17eWVhcjpfLG1vbnRoOlVlLGRheTpfLHdlZWtkYXk6VWUsaG91cjpfLG1pbnV0ZTpffSxRbj17eWVhcjpfLG1vbnRoOkllLGRheTpfLGhvdXI6XyxtaW51dGU6Xyx0aW1lWm9uZU5hbWU6VWV9LFhuPXt5ZWFyOl8sbW9udGg6SWUsZGF5Ol8saG91cjpfLG1pbnV0ZTpfLHNlY29uZDpfLHRpbWVab25lTmFtZTpVZX0sZXI9e3llYXI6Xyxtb250aDpJZSxkYXk6Xyx3ZWVrZGF5OkllLGhvdXI6XyxtaW51dGU6Xyx0aW1lWm9uZU5hbWU6SWV9LHRyPXt5ZWFyOl8sbW9udGg6SWUsZGF5Ol8sd2Vla2RheTpJZSxob3VyOl8sbWludXRlOl8sc2Vjb25kOl8sdGltZVpvbmVOYW1lOkllfTtmdW5jdGlvbiBVKG4pe3JldHVybiB0eXBlb2Ygbj09XFxcInVuZGVmaW5lZFxcXCJ9ZnVuY3Rpb24gbnQobil7cmV0dXJuIHR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIn1mdW5jdGlvbiBucihuKXtyZXR1cm4gdHlwZW9mIG49PVxcXCJudW1iZXJcXFwiJiZuJTE9PT0wfWZ1bmN0aW9uIE5vKG4pe3JldHVybiB0eXBlb2Ygbj09XFxcInN0cmluZ1xcXCJ9ZnVuY3Rpb24gTG8obil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PVxcXCJbb2JqZWN0IERhdGVdXFxcIn1mdW5jdGlvbiBLcigpe3RyeXtyZXR1cm4gdHlwZW9mIEludGwhPVxcXCJ1bmRlZmluZWRcXFwiJiYhIUludGwuUmVsYXRpdmVUaW1lRm9ybWF0fWNhdGNoKG4pe3JldHVybiExfX1mdW5jdGlvbiBBbyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBHcyhuLGUsdCl7aWYobi5sZW5ndGghPT0wKXJldHVybiBuLnJlZHVjZSgocixzKT0+e2xldCBpPVtlKHMpLHNdO3JldHVybiByJiZ0KHJbMF0saVswXSk9PT1yWzBdP3I6aX0sbnVsbClbMV19ZnVuY3Rpb24gTW8obixlKXtyZXR1cm4gZS5yZWR1Y2UoKHQscik9Pih0W3JdPW5bcl0sdCkse30pfWZ1bmN0aW9uIGt0KG4sZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpfWZ1bmN0aW9uIHJ0KG4sZSx0KXtyZXR1cm4gbnIobikmJm4+PWUmJm48PXR9ZnVuY3Rpb24gZGwobixlKXtyZXR1cm4gbi1lKk1hdGguZmxvb3Iobi9lKX1mdW5jdGlvbiBpZShuLGU9Mil7bGV0IHQ9bjwwLHI7cmV0dXJuIHQ/cj1cXFwiLVxcXCIrKFxcXCJcXFwiKy1uKS5wYWRTdGFydChlLFxcXCIwXFxcIik6cj0oXFxcIlxcXCIrbikucGFkU3RhcnQoZSxcXFwiMFxcXCIpLHJ9ZnVuY3Rpb24gRHQobil7aWYoIShVKG4pfHxuPT09bnVsbHx8bj09PVxcXCJcXFwiKSlyZXR1cm4gcGFyc2VJbnQobiwxMCl9ZnVuY3Rpb24gQ3Qobil7aWYoIShVKG4pfHxuPT09bnVsbHx8bj09PVxcXCJcXFwiKSlyZXR1cm4gcGFyc2VGbG9hdChuKX1mdW5jdGlvbiBycihuKXtpZighKFUobil8fG49PT1udWxsfHxuPT09XFxcIlxcXCIpKXtsZXQgZT1wYXJzZUZsb2F0KFxcXCIwLlxcXCIrbikqMWUzO3JldHVybiBNYXRoLmZsb29yKGUpfX1mdW5jdGlvbiBjbihuLGUsdD0hMSl7bGV0IHI9MTAqKmU7cmV0dXJuKHQ/TWF0aC50cnVuYzpNYXRoLnJvdW5kKShuKnIpL3J9ZnVuY3Rpb24gcXQobil7cmV0dXJuIG4lND09PTAmJihuJTEwMCE9PTB8fG4lNDAwPT09MCl9ZnVuY3Rpb24gVXQobil7cmV0dXJuIHF0KG4pPzM2NjozNjV9ZnVuY3Rpb24gZm4obixlKXtsZXQgdD1kbChlLTEsMTIpKzEscj1uKyhlLXQpLzEyO3JldHVybiB0PT09Mj9xdChyKT8yOToyODpbMzEsbnVsbCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV1bdC0xXX1mdW5jdGlvbiBzcihuKXtsZXQgZT1EYXRlLlVUQyhuLnllYXIsbi5tb250aC0xLG4uZGF5LG4uaG91cixuLm1pbnV0ZSxuLnNlY29uZCxuLm1pbGxpc2Vjb25kKTtyZXR1cm4gbi55ZWFyPDEwMCYmbi55ZWFyPj0wJiYoZT1uZXcgRGF0ZShlKSxlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKS0xOTAwKSksK2V9ZnVuY3Rpb24gZG4obil7bGV0IGU9KG4rTWF0aC5mbG9vcihuLzQpLU1hdGguZmxvb3Iobi8xMDApK01hdGguZmxvb3Iobi80MDApKSU3LHQ9bi0xLHI9KHQrTWF0aC5mbG9vcih0LzQpLU1hdGguZmxvb3IodC8xMDApK01hdGguZmxvb3IodC80MDApKSU3O3JldHVybiBlPT09NHx8cj09PTM/NTM6NTJ9ZnVuY3Rpb24gaXIobil7cmV0dXJuIG4+OTk/bjpuPjYwPzE5MDArbjoyZTMrbn1mdW5jdGlvbiBKcihuLGUsdCxyPW51bGwpe2xldCBzPW5ldyBEYXRlKG4pLGk9e2hvdXJDeWNsZTpcXFwiaDIzXFxcIix5ZWFyOlxcXCJudW1lcmljXFxcIixtb250aDpcXFwiMi1kaWdpdFxcXCIsZGF5OlxcXCIyLWRpZ2l0XFxcIixob3VyOlxcXCIyLWRpZ2l0XFxcIixtaW51dGU6XFxcIjItZGlnaXRcXFwifTtyJiYoaS50aW1lWm9uZT1yKTtsZXQgbz0kKHt0aW1lWm9uZU5hbWU6ZX0saSksYT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0LG8pLmZvcm1hdFRvUGFydHMocykuZmluZCh1PT51LnR5cGUudG9Mb3dlckNhc2UoKT09PVxcXCJ0aW1lem9uZW5hbWVcXFwiKTtyZXR1cm4gYT9hLnZhbHVlOm51bGx9ZnVuY3Rpb24gV3QobixlKXtsZXQgdD1wYXJzZUludChuLDEwKTtOdW1iZXIuaXNOYU4odCkmJih0PTApO2xldCByPXBhcnNlSW50KGUsMTApfHwwLHM9dDwwfHxPYmplY3QuaXModCwtMCk/LXI6cjtyZXR1cm4gdCo2MCtzfWZ1bmN0aW9uIFpzKG4pe2xldCBlPU51bWJlcihuKTtpZih0eXBlb2Ygbj09XFxcImJvb2xlYW5cXFwifHxuPT09XFxcIlxcXCJ8fE51bWJlci5pc05hTihlKSl0aHJvdyBuZXcgRGUoYEludmFsaWQgdW5pdCB2YWx1ZSAke259YCk7cmV0dXJuIGV9ZnVuY3Rpb24gaG4obixlKXtsZXQgdD17fTtmb3IobGV0IHIgaW4gbilpZihrdChuLHIpKXtsZXQgcz1uW3JdO2lmKHM9PW51bGwpY29udGludWU7dFtlKHIpXT1acyhzKX1yZXR1cm4gdH1mdW5jdGlvbiB4dChuLGUpe2xldCB0PU1hdGgudHJ1bmMoTWF0aC5hYnMobi82MCkpLHI9TWF0aC50cnVuYyhNYXRoLmFicyhuJTYwKSkscz1uPj0wP1xcXCIrXFxcIjpcXFwiLVxcXCI7c3dpdGNoKGUpe2Nhc2VcXFwic2hvcnRcXFwiOnJldHVybmAke3N9JHtpZSh0LDIpfToke2llKHIsMil9YDtjYXNlXFxcIm5hcnJvd1xcXCI6cmV0dXJuYCR7c30ke3R9JHtyPjA/YDoke3J9YDpcXFwiXFxcIn1gO2Nhc2VcXFwidGVjaGllXFxcIjpyZXR1cm5gJHtzfSR7aWUodCwyKX0ke2llKHIsMil9YDtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBWYWx1ZSBmb3JtYXQgJHtlfSBpcyBvdXQgb2YgcmFuZ2UgZm9yIHByb3BlcnR5IGZvcm1hdGApfX1mdW5jdGlvbiBvcihuKXtyZXR1cm4gTW8obixbXFxcImhvdXJcXFwiLFxcXCJtaW51dGVcXFwiLFxcXCJzZWNvbmRcXFwiLFxcXCJtaWxsaXNlY29uZFxcXCJdKX12YXIgUXM9L1tBLVphLXpfKy1dezEsMjU2fSg/Ojo/XFxcXC9bQS1aYS16MC05XystXXsxLDI1Nn0oPzpcXFxcL1tBLVphLXowLTlfKy1dezEsMjU2fSk/KT8vO3ZhciBobD1bXFxcIkphbnVhcnlcXFwiLFxcXCJGZWJydWFyeVxcXCIsXFxcIk1hcmNoXFxcIixcXFwiQXByaWxcXFwiLFxcXCJNYXlcXFwiLFxcXCJKdW5lXFxcIixcXFwiSnVseVxcXCIsXFxcIkF1Z3VzdFxcXCIsXFxcIlNlcHRlbWJlclxcXCIsXFxcIk9jdG9iZXJcXFwiLFxcXCJOb3ZlbWJlclxcXCIsXFxcIkRlY2VtYmVyXFxcIl0sWHM9W1xcXCJKYW5cXFwiLFxcXCJGZWJcXFwiLFxcXCJNYXJcXFwiLFxcXCJBcHJcXFwiLFxcXCJNYXlcXFwiLFxcXCJKdW5cXFwiLFxcXCJKdWxcXFwiLFxcXCJBdWdcXFwiLFxcXCJTZXBcXFwiLFxcXCJPY3RcXFwiLFxcXCJOb3ZcXFwiLFxcXCJEZWNcXFwiXSxwbD1bXFxcIkpcXFwiLFxcXCJGXFxcIixcXFwiTVxcXCIsXFxcIkFcXFwiLFxcXCJNXFxcIixcXFwiSlxcXCIsXFxcIkpcXFwiLFxcXCJBXFxcIixcXFwiU1xcXCIsXFxcIk9cXFwiLFxcXCJOXFxcIixcXFwiRFxcXCJdO2Z1bmN0aW9uIGVpKG4pe3N3aXRjaChuKXtjYXNlXFxcIm5hcnJvd1xcXCI6cmV0dXJuWy4uLnBsXTtjYXNlXFxcInNob3J0XFxcIjpyZXR1cm5bLi4uWHNdO2Nhc2VcXFwibG9uZ1xcXCI6cmV0dXJuWy4uLmhsXTtjYXNlXFxcIm51bWVyaWNcXFwiOnJldHVybltcXFwiMVxcXCIsXFxcIjJcXFwiLFxcXCIzXFxcIixcXFwiNFxcXCIsXFxcIjVcXFwiLFxcXCI2XFxcIixcXFwiN1xcXCIsXFxcIjhcXFwiLFxcXCI5XFxcIixcXFwiMTBcXFwiLFxcXCIxMVxcXCIsXFxcIjEyXFxcIl07Y2FzZVxcXCIyLWRpZ2l0XFxcIjpyZXR1cm5bXFxcIjAxXFxcIixcXFwiMDJcXFwiLFxcXCIwM1xcXCIsXFxcIjA0XFxcIixcXFwiMDVcXFwiLFxcXCIwNlxcXCIsXFxcIjA3XFxcIixcXFwiMDhcXFwiLFxcXCIwOVxcXCIsXFxcIjEwXFxcIixcXFwiMTFcXFwiLFxcXCIxMlxcXCJdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciB0aT1bXFxcIk1vbmRheVxcXCIsXFxcIlR1ZXNkYXlcXFwiLFxcXCJXZWRuZXNkYXlcXFwiLFxcXCJUaHVyc2RheVxcXCIsXFxcIkZyaWRheVxcXCIsXFxcIlNhdHVyZGF5XFxcIixcXFwiU3VuZGF5XFxcIl0sbmk9W1xcXCJNb25cXFwiLFxcXCJUdWVcXFwiLFxcXCJXZWRcXFwiLFxcXCJUaHVcXFwiLFxcXCJGcmlcXFwiLFxcXCJTYXRcXFwiLFxcXCJTdW5cXFwiXSxtbD1bXFxcIk1cXFwiLFxcXCJUXFxcIixcXFwiV1xcXCIsXFxcIlRcXFwiLFxcXCJGXFxcIixcXFwiU1xcXCIsXFxcIlNcXFwiXTtmdW5jdGlvbiByaShuKXtzd2l0Y2gobil7Y2FzZVxcXCJuYXJyb3dcXFwiOnJldHVyblsuLi5tbF07Y2FzZVxcXCJzaG9ydFxcXCI6cmV0dXJuWy4uLm5pXTtjYXNlXFxcImxvbmdcXFwiOnJldHVyblsuLi50aV07Y2FzZVxcXCJudW1lcmljXFxcIjpyZXR1cm5bXFxcIjFcXFwiLFxcXCIyXFxcIixcXFwiM1xcXCIsXFxcIjRcXFwiLFxcXCI1XFxcIixcXFwiNlxcXCIsXFxcIjdcXFwiXTtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgc2k9W1xcXCJBTVxcXCIsXFxcIlBNXFxcIl0sRGw9W1xcXCJCZWZvcmUgQ2hyaXN0XFxcIixcXFwiQW5ubyBEb21pbmlcXFwiXSx5bD1bXFxcIkJDXFxcIixcXFwiQURcXFwiXSxnbD1bXFxcIkJcXFwiLFxcXCJBXFxcIl07ZnVuY3Rpb24gaWkobil7c3dpdGNoKG4pe2Nhc2VcXFwibmFycm93XFxcIjpyZXR1cm5bLi4uZ2xdO2Nhc2VcXFwic2hvcnRcXFwiOnJldHVyblsuLi55bF07Y2FzZVxcXCJsb25nXFxcIjpyZXR1cm5bLi4uRGxdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIF9vKG4pe3JldHVybiBzaVtuLmhvdXI8MTI/MDoxXX1mdW5jdGlvbiBCbyhuLGUpe3JldHVybiByaShlKVtuLndlZWtkYXktMV19ZnVuY3Rpb24gUG8obixlKXtyZXR1cm4gZWkoZSlbbi5tb250aC0xXX1mdW5jdGlvbiAkbyhuLGUpe3JldHVybiBpaShlKVtuLnllYXI8MD8wOjFdfWZ1bmN0aW9uIFJvKG4sZSx0PVxcXCJhbHdheXNcXFwiLHI9ITEpe2xldCBzPXt5ZWFyczpbXFxcInllYXJcXFwiLFxcXCJ5ci5cXFwiXSxxdWFydGVyczpbXFxcInF1YXJ0ZXJcXFwiLFxcXCJxdHIuXFxcIl0sbW9udGhzOltcXFwibW9udGhcXFwiLFxcXCJtby5cXFwiXSx3ZWVrczpbXFxcIndlZWtcXFwiLFxcXCJ3ay5cXFwiXSxkYXlzOltcXFwiZGF5XFxcIixcXFwiZGF5XFxcIixcXFwiZGF5c1xcXCJdLGhvdXJzOltcXFwiaG91clxcXCIsXFxcImhyLlxcXCJdLG1pbnV0ZXM6W1xcXCJtaW51dGVcXFwiLFxcXCJtaW4uXFxcIl0sc2Vjb25kczpbXFxcInNlY29uZFxcXCIsXFxcInNlYy5cXFwiXX0saT1bXFxcImhvdXJzXFxcIixcXFwibWludXRlc1xcXCIsXFxcInNlY29uZHNcXFwiXS5pbmRleE9mKG4pPT09LTE7aWYodD09PVxcXCJhdXRvXFxcIiYmaSl7bGV0IGg9bj09PVxcXCJkYXlzXFxcIjtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiBoP1xcXCJ0b21vcnJvd1xcXCI6YG5leHQgJHtzW25dWzBdfWA7Y2FzZS0xOnJldHVybiBoP1xcXCJ5ZXN0ZXJkYXlcXFwiOmBsYXN0ICR7c1tuXVswXX1gO2Nhc2UgMDpyZXR1cm4gaD9cXFwidG9kYXlcXFwiOmB0aGlzICR7c1tuXVswXX1gO2RlZmF1bHQ6fX1sZXQgbz1PYmplY3QuaXMoZSwtMCl8fGU8MCxhPU1hdGguYWJzKGUpLHU9YT09PTEsbD1zW25dLGQ9cj91P2xbMV06bFsyXXx8bFsxXTp1P3Nbbl1bMF06bjtyZXR1cm4gbz9gJHthfSAke2R9IGFnb2A6YGluICR7YX0gJHtkfWB9ZnVuY3Rpb24gam8obixlKXtsZXQgdD1cXFwiXFxcIjtmb3IobGV0IHIgb2YgbilyLmxpdGVyYWw/dCs9ci52YWw6dCs9ZShyLnZhbCk7cmV0dXJuIHR9dmFyIGJsPXtEOmxuLEREOlBuLERERDokbixEREREOlJuLHQ6am4sdHQ6Vm4sdHR0OnFuLHR0dHQ6VW4sVDpXbixUVDpIbixUVFQ6S24sVFRUVDpKbixmOnpuLGZmOkduLGZmZjpRbixmZmZmOmVyLEY6WW4sRkY6Wm4sRkZGOlhuLEZGRkY6dHJ9LGZlPWNsYXNze3N0YXRpYyBjcmVhdGUoZSx0PXt9KXtyZXR1cm4gbmV3IGZlKGUsdCl9c3RhdGljIHBhcnNlRm9ybWF0KGUpe2xldCB0PW51bGwscj1cXFwiXFxcIixzPSExLGk9W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2xldCBhPWUuY2hhckF0KG8pO2E9PT1cXFwiJ1xcXCI/KHIubGVuZ3RoPjAmJmkucHVzaCh7bGl0ZXJhbDpzLHZhbDpyfSksdD1udWxsLHI9XFxcIlxcXCIscz0hcyk6c3x8YT09PXQ/cis9YTooci5sZW5ndGg+MCYmaS5wdXNoKHtsaXRlcmFsOiExLHZhbDpyfSkscj1hLHQ9YSl9cmV0dXJuIHIubGVuZ3RoPjAmJmkucHVzaCh7bGl0ZXJhbDpzLHZhbDpyfSksaX1zdGF0aWMgbWFjcm9Ub2tlblRvRm9ybWF0T3B0cyhlKXtyZXR1cm4gYmxbZV19Y29uc3RydWN0b3IoZSx0KXt0aGlzLm9wdHM9dCx0aGlzLmxvYz1lLHRoaXMuc3lzdGVtTG9jPW51bGx9Zm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZSx0KXtyZXR1cm4gdGhpcy5zeXN0ZW1Mb2M9PT1udWxsJiYodGhpcy5zeXN0ZW1Mb2M9dGhpcy5sb2MucmVkZWZhdWx0VG9TeXN0ZW0oKSksdGhpcy5zeXN0ZW1Mb2MuZHRGb3JtYXR0ZXIoZSwkKCQoe30sdGhpcy5vcHRzKSx0KSkuZm9ybWF0KCl9Zm9ybWF0RGF0ZVRpbWUoZSx0PXt9KXtyZXR1cm4gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZSwkKCQoe30sdGhpcy5vcHRzKSx0KSkuZm9ybWF0KCl9Zm9ybWF0RGF0ZVRpbWVQYXJ0cyhlLHQ9e30pe3JldHVybiB0aGlzLmxvYy5kdEZvcm1hdHRlcihlLCQoJCh7fSx0aGlzLm9wdHMpLHQpKS5mb3JtYXRUb1BhcnRzKCl9cmVzb2x2ZWRPcHRpb25zKGUsdD17fSl7cmV0dXJuIHRoaXMubG9jLmR0Rm9ybWF0dGVyKGUsJCgkKHt9LHRoaXMub3B0cyksdCkpLnJlc29sdmVkT3B0aW9ucygpfW51bShlLHQ9MCl7aWYodGhpcy5vcHRzLmZvcmNlU2ltcGxlKXJldHVybiBpZShlLHQpO2xldCByPSQoe30sdGhpcy5vcHRzKTtyZXR1cm4gdD4wJiYoci5wYWRUbz10KSx0aGlzLmxvYy5udW1iZXJGb3JtYXR0ZXIocikuZm9ybWF0KGUpfWZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhlLHQpe2xldCByPXRoaXMubG9jLmxpc3RpbmdNb2RlKCk9PT1cXFwiZW5cXFwiLHM9dGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXImJnRoaXMubG9jLm91dHB1dENhbGVuZGFyIT09XFxcImdyZWdvcnlcXFwiLGk9KGYsRik9PnRoaXMubG9jLmV4dHJhY3QoZSxmLEYpLG89Zj0+ZS5pc09mZnNldEZpeGVkJiZlLm9mZnNldD09PTAmJmYuYWxsb3daP1xcXCJaXFxcIjplLmlzVmFsaWQ/ZS56b25lLmZvcm1hdE9mZnNldChlLnRzLGYuZm9ybWF0KTpcXFwiXFxcIixhPSgpPT5yP19vKGUpOmkoe2hvdXI6XFxcIm51bWVyaWNcXFwiLGhvdXJDeWNsZTpcXFwiaDEyXFxcIn0sXFxcImRheXBlcmlvZFxcXCIpLHU9KGYsRik9PnI/UG8oZSxmKTppKEY/e21vbnRoOmZ9Onttb250aDpmLGRheTpcXFwibnVtZXJpY1xcXCJ9LFxcXCJtb250aFxcXCIpLGw9KGYsRik9PnI/Qm8oZSxmKTppKEY/e3dlZWtkYXk6Zn06e3dlZWtkYXk6Zixtb250aDpcXFwibG9uZ1xcXCIsZGF5OlxcXCJudW1lcmljXFxcIn0sXFxcIndlZWtkYXlcXFwiKSxkPWY9PntsZXQgRj1mZS5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKGYpO3JldHVybiBGP3RoaXMuZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZSxGKTpmfSxoPWY9PnI/JG8oZSxmKTppKHtlcmE6Zn0sXFxcImVyYVxcXCIpLHA9Zj0+e3N3aXRjaChmKXtjYXNlXFxcIlNcXFwiOnJldHVybiB0aGlzLm51bShlLm1pbGxpc2Vjb25kKTtjYXNlXFxcInVcXFwiOmNhc2VcXFwiU1NTXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5taWxsaXNlY29uZCwzKTtjYXNlXFxcInNcXFwiOnJldHVybiB0aGlzLm51bShlLnNlY29uZCk7Y2FzZVxcXCJzc1xcXCI6cmV0dXJuIHRoaXMubnVtKGUuc2Vjb25kLDIpO2Nhc2VcXFwidXVcXFwiOnJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGUubWlsbGlzZWNvbmQvMTApLDIpO2Nhc2VcXFwidXV1XFxcIjpyZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihlLm1pbGxpc2Vjb25kLzEwMCkpO2Nhc2VcXFwibVxcXCI6cmV0dXJuIHRoaXMubnVtKGUubWludXRlKTtjYXNlXFxcIm1tXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5taW51dGUsMik7Y2FzZVxcXCJoXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5ob3VyJTEyPT09MD8xMjplLmhvdXIlMTIpO2Nhc2VcXFwiaGhcXFwiOnJldHVybiB0aGlzLm51bShlLmhvdXIlMTI9PT0wPzEyOmUuaG91ciUxMiwyKTtjYXNlXFxcIkhcXFwiOnJldHVybiB0aGlzLm51bShlLmhvdXIpO2Nhc2VcXFwiSEhcXFwiOnJldHVybiB0aGlzLm51bShlLmhvdXIsMik7Y2FzZVxcXCJaXFxcIjpyZXR1cm4gbyh7Zm9ybWF0OlxcXCJuYXJyb3dcXFwiLGFsbG93Wjp0aGlzLm9wdHMuYWxsb3dafSk7Y2FzZVxcXCJaWlxcXCI6cmV0dXJuIG8oe2Zvcm1hdDpcXFwic2hvcnRcXFwiLGFsbG93Wjp0aGlzLm9wdHMuYWxsb3dafSk7Y2FzZVxcXCJaWlpcXFwiOnJldHVybiBvKHtmb3JtYXQ6XFxcInRlY2hpZVxcXCIsYWxsb3daOnRoaXMub3B0cy5hbGxvd1p9KTtjYXNlXFxcIlpaWlpcXFwiOnJldHVybiBlLnpvbmUub2Zmc2V0TmFtZShlLnRzLHtmb3JtYXQ6XFxcInNob3J0XFxcIixsb2NhbGU6dGhpcy5sb2MubG9jYWxlfSk7Y2FzZVxcXCJaWlpaWlxcXCI6cmV0dXJuIGUuem9uZS5vZmZzZXROYW1lKGUudHMse2Zvcm1hdDpcXFwibG9uZ1xcXCIsbG9jYWxlOnRoaXMubG9jLmxvY2FsZX0pO2Nhc2VcXFwielxcXCI6cmV0dXJuIGUuem9uZU5hbWU7Y2FzZVxcXCJhXFxcIjpyZXR1cm4gYSgpO2Nhc2VcXFwiZFxcXCI6cmV0dXJuIHM/aSh7ZGF5OlxcXCJudW1lcmljXFxcIn0sXFxcImRheVxcXCIpOnRoaXMubnVtKGUuZGF5KTtjYXNlXFxcImRkXFxcIjpyZXR1cm4gcz9pKHtkYXk6XFxcIjItZGlnaXRcXFwifSxcXFwiZGF5XFxcIik6dGhpcy5udW0oZS5kYXksMik7Y2FzZVxcXCJjXFxcIjpyZXR1cm4gdGhpcy5udW0oZS53ZWVrZGF5KTtjYXNlXFxcImNjY1xcXCI6cmV0dXJuIGwoXFxcInNob3J0XFxcIiwhMCk7Y2FzZVxcXCJjY2NjXFxcIjpyZXR1cm4gbChcXFwibG9uZ1xcXCIsITApO2Nhc2VcXFwiY2NjY2NcXFwiOnJldHVybiBsKFxcXCJuYXJyb3dcXFwiLCEwKTtjYXNlXFxcIkVcXFwiOnJldHVybiB0aGlzLm51bShlLndlZWtkYXkpO2Nhc2VcXFwiRUVFXFxcIjpyZXR1cm4gbChcXFwic2hvcnRcXFwiLCExKTtjYXNlXFxcIkVFRUVcXFwiOnJldHVybiBsKFxcXCJsb25nXFxcIiwhMSk7Y2FzZVxcXCJFRUVFRVxcXCI6cmV0dXJuIGwoXFxcIm5hcnJvd1xcXCIsITEpO2Nhc2VcXFwiTFxcXCI6cmV0dXJuIHM/aSh7bW9udGg6XFxcIm51bWVyaWNcXFwiLGRheTpcXFwibnVtZXJpY1xcXCJ9LFxcXCJtb250aFxcXCIpOnRoaXMubnVtKGUubW9udGgpO2Nhc2VcXFwiTExcXFwiOnJldHVybiBzP2koe21vbnRoOlxcXCIyLWRpZ2l0XFxcIixkYXk6XFxcIm51bWVyaWNcXFwifSxcXFwibW9udGhcXFwiKTp0aGlzLm51bShlLm1vbnRoLDIpO2Nhc2VcXFwiTExMXFxcIjpyZXR1cm4gdShcXFwic2hvcnRcXFwiLCEwKTtjYXNlXFxcIkxMTExcXFwiOnJldHVybiB1KFxcXCJsb25nXFxcIiwhMCk7Y2FzZVxcXCJMTExMTFxcXCI6cmV0dXJuIHUoXFxcIm5hcnJvd1xcXCIsITApO2Nhc2VcXFwiTVxcXCI6cmV0dXJuIHM/aSh7bW9udGg6XFxcIm51bWVyaWNcXFwifSxcXFwibW9udGhcXFwiKTp0aGlzLm51bShlLm1vbnRoKTtjYXNlXFxcIk1NXFxcIjpyZXR1cm4gcz9pKHttb250aDpcXFwiMi1kaWdpdFxcXCJ9LFxcXCJtb250aFxcXCIpOnRoaXMubnVtKGUubW9udGgsMik7Y2FzZVxcXCJNTU1cXFwiOnJldHVybiB1KFxcXCJzaG9ydFxcXCIsITEpO2Nhc2VcXFwiTU1NTVxcXCI6cmV0dXJuIHUoXFxcImxvbmdcXFwiLCExKTtjYXNlXFxcIk1NTU1NXFxcIjpyZXR1cm4gdShcXFwibmFycm93XFxcIiwhMSk7Y2FzZVxcXCJ5XFxcIjpyZXR1cm4gcz9pKHt5ZWFyOlxcXCJudW1lcmljXFxcIn0sXFxcInllYXJcXFwiKTp0aGlzLm51bShlLnllYXIpO2Nhc2VcXFwieXlcXFwiOnJldHVybiBzP2koe3llYXI6XFxcIjItZGlnaXRcXFwifSxcXFwieWVhclxcXCIpOnRoaXMubnVtKGUueWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwyKTtjYXNlXFxcInl5eXlcXFwiOnJldHVybiBzP2koe3llYXI6XFxcIm51bWVyaWNcXFwifSxcXFwieWVhclxcXCIpOnRoaXMubnVtKGUueWVhciw0KTtjYXNlXFxcInl5eXl5eVxcXCI6cmV0dXJuIHM/aSh7eWVhcjpcXFwibnVtZXJpY1xcXCJ9LFxcXCJ5ZWFyXFxcIik6dGhpcy5udW0oZS55ZWFyLDYpO2Nhc2VcXFwiR1xcXCI6cmV0dXJuIGgoXFxcInNob3J0XFxcIik7Y2FzZVxcXCJHR1xcXCI6cmV0dXJuIGgoXFxcImxvbmdcXFwiKTtjYXNlXFxcIkdHR0dHXFxcIjpyZXR1cm4gaChcXFwibmFycm93XFxcIik7Y2FzZVxcXCJra1xcXCI6cmV0dXJuIHRoaXMubnVtKGUud2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksMik7Y2FzZVxcXCJra2trXFxcIjpyZXR1cm4gdGhpcy5udW0oZS53ZWVrWWVhciw0KTtjYXNlXFxcIldcXFwiOnJldHVybiB0aGlzLm51bShlLndlZWtOdW1iZXIpO2Nhc2VcXFwiV1dcXFwiOnJldHVybiB0aGlzLm51bShlLndlZWtOdW1iZXIsMik7Y2FzZVxcXCJvXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5vcmRpbmFsKTtjYXNlXFxcIm9vb1xcXCI6cmV0dXJuIHRoaXMubnVtKGUub3JkaW5hbCwzKTtjYXNlXFxcInFcXFwiOnJldHVybiB0aGlzLm51bShlLnF1YXJ0ZXIpO2Nhc2VcXFwicXFcXFwiOnJldHVybiB0aGlzLm51bShlLnF1YXJ0ZXIsMik7Y2FzZVxcXCJYXFxcIjpyZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihlLnRzLzFlMykpO2Nhc2VcXFwieFxcXCI6cmV0dXJuIHRoaXMubnVtKGUudHMpO2RlZmF1bHQ6cmV0dXJuIGQoZil9fTtyZXR1cm4gam8oZmUucGFyc2VGb3JtYXQodCkscCl9Zm9ybWF0RHVyYXRpb25Gcm9tU3RyaW5nKGUsdCl7bGV0IHI9dT0+e3N3aXRjaCh1WzBdKXtjYXNlXFxcIlNcXFwiOnJldHVyblxcXCJtaWxsaXNlY29uZFxcXCI7Y2FzZVxcXCJzXFxcIjpyZXR1cm5cXFwic2Vjb25kXFxcIjtjYXNlXFxcIm1cXFwiOnJldHVyblxcXCJtaW51dGVcXFwiO2Nhc2VcXFwiaFxcXCI6cmV0dXJuXFxcImhvdXJcXFwiO2Nhc2VcXFwiZFxcXCI6cmV0dXJuXFxcImRheVxcXCI7Y2FzZVxcXCJ3XFxcIjpyZXR1cm5cXFwid2Vla1xcXCI7Y2FzZVxcXCJNXFxcIjpyZXR1cm5cXFwibW9udGhcXFwiO2Nhc2VcXFwieVxcXCI6cmV0dXJuXFxcInllYXJcXFwiO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxzPXU9Pmw9PntsZXQgZD1yKGwpO3JldHVybiBkP3RoaXMubnVtKHUuZ2V0KGQpLGwubGVuZ3RoKTpsfSxpPWZlLnBhcnNlRm9ybWF0KHQpLG89aS5yZWR1Y2UoKHUse2xpdGVyYWw6bCx2YWw6ZH0pPT5sP3U6dS5jb25jYXQoZCksW10pLGE9ZS5zaGlmdFRvKC4uLm8ubWFwKHIpLmZpbHRlcih1PT51KSk7cmV0dXJuIGpvKGkscyhhKSl9fTt2YXIgeWU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnJlYXNvbj1lLHRoaXMuZXhwbGFuYXRpb249dH10b01lc3NhZ2UoKXtyZXR1cm4gdGhpcy5leHBsYW5hdGlvbj9gJHt0aGlzLnJlYXNvbn06ICR7dGhpcy5leHBsYW5hdGlvbn1gOnRoaXMucmVhc29ufX07dmFyIHhlPWNsYXNze2dldCB0eXBlKCl7dGhyb3cgbmV3IHFlfWdldCBuYW1lKCl7dGhyb3cgbmV3IHFlfWdldCBpYW5hTmFtZSgpe3JldHVybiB0aGlzLm5hbWV9Z2V0IGlzVW5pdmVyc2FsKCl7dGhyb3cgbmV3IHFlfW9mZnNldE5hbWUoZSx0KXt0aHJvdyBuZXcgcWV9Zm9ybWF0T2Zmc2V0KGUsdCl7dGhyb3cgbmV3IHFlfW9mZnNldChlKXt0aHJvdyBuZXcgcWV9ZXF1YWxzKGUpe3Rocm93IG5ldyBxZX1nZXQgaXNWYWxpZCgpe3Rocm93IG5ldyBxZX19O3ZhciBhaT1udWxsLE90PWNsYXNzIGV4dGVuZHMgeGV7c3RhdGljIGdldCBpbnN0YW5jZSgpe3JldHVybiBhaT09PW51bGwmJihhaT1uZXcgT3QpLGFpfWdldCB0eXBlKCl7cmV0dXJuXFxcInN5c3RlbVxcXCJ9Z2V0IG5hbWUoKXtyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZX1nZXQgaXNVbml2ZXJzYWwoKXtyZXR1cm4hMX1vZmZzZXROYW1lKGUse2Zvcm1hdDp0LGxvY2FsZTpyfSl7cmV0dXJuIEpyKGUsdCxyKX1mb3JtYXRPZmZzZXQoZSx0KXtyZXR1cm4geHQodGhpcy5vZmZzZXQoZSksdCl9b2Zmc2V0KGUpe3JldHVybi1uZXcgRGF0ZShlKS5nZXRUaW1lem9uZU9mZnNldCgpfWVxdWFscyhlKXtyZXR1cm4gZS50eXBlPT09XFxcInN5c3RlbVxcXCJ9Z2V0IGlzVmFsaWQoKXtyZXR1cm4hMH19O3ZhciBZcj17fTtmdW5jdGlvbiBFbChuKXtyZXR1cm4gWXJbbl18fChZcltuXT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChcXFwiZW4tVVNcXFwiLHtob3VyMTI6ITEsdGltZVpvbmU6bix5ZWFyOlxcXCJudW1lcmljXFxcIixtb250aDpcXFwiMi1kaWdpdFxcXCIsZGF5OlxcXCIyLWRpZ2l0XFxcIixob3VyOlxcXCIyLWRpZ2l0XFxcIixtaW51dGU6XFxcIjItZGlnaXRcXFwiLHNlY29uZDpcXFwiMi1kaWdpdFxcXCIsZXJhOlxcXCJzaG9ydFxcXCJ9KSksWXJbbl19dmFyIEZsPXt5ZWFyOjAsbW9udGg6MSxkYXk6MixlcmE6Myxob3VyOjQsbWludXRlOjUsc2Vjb25kOjZ9O2Z1bmN0aW9uIHdsKG4sZSl7bGV0IHQ9bi5mb3JtYXQoZSkucmVwbGFjZSgvXFxcXHUyMDBFL2csXFxcIlxcXCIpLHI9LyhcXFxcZCspXFxcXC8oXFxcXGQrKVxcXFwvKFxcXFxkKykgKEFEfEJDKSw/IChcXFxcZCspOihcXFxcZCspOihcXFxcZCspLy5leGVjKHQpLFsscyxpLG8sYSx1LGwsZF09cjtyZXR1cm5bbyxzLGksYSx1LGwsZF19ZnVuY3Rpb24gVGwobixlKXtsZXQgdD1uLmZvcm1hdFRvUGFydHMoZSkscj1bXTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKyl7bGV0e3R5cGU6aSx2YWx1ZTpvfT10W3NdLGE9RmxbaV07aT09PVxcXCJlcmFcXFwiP3JbYV09bzpVKGEpfHwoclthXT1wYXJzZUludChvLDEwKSl9cmV0dXJuIHJ9dmFyIHpyPXt9LGhlPWNsYXNzIGV4dGVuZHMgeGV7c3RhdGljIGNyZWF0ZShlKXtyZXR1cm4genJbZV18fCh6cltlXT1uZXcgaGUoZSkpLHpyW2VdfXN0YXRpYyByZXNldENhY2hlKCl7enI9e30sWXI9e319c3RhdGljIGlzVmFsaWRTcGVjaWZpZXIoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZFpvbmUoZSl9c3RhdGljIGlzVmFsaWRab25lKGUpe2lmKCFlKXJldHVybiExO3RyeXtyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXFxcImVuLVVTXFxcIix7dGltZVpvbmU6ZX0pLmZvcm1hdCgpLCEwfWNhdGNoKHQpe3JldHVybiExfX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuem9uZU5hbWU9ZSx0aGlzLnZhbGlkPWhlLmlzVmFsaWRab25lKGUpfWdldCB0eXBlKCl7cmV0dXJuXFxcImlhbmFcXFwifWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuem9uZU5hbWV9Z2V0IGlzVW5pdmVyc2FsKCl7cmV0dXJuITF9b2Zmc2V0TmFtZShlLHtmb3JtYXQ6dCxsb2NhbGU6cn0pe3JldHVybiBKcihlLHQscix0aGlzLm5hbWUpfWZvcm1hdE9mZnNldChlLHQpe3JldHVybiB4dCh0aGlzLm9mZnNldChlKSx0KX1vZmZzZXQoZSl7bGV0IHQ9bmV3IERhdGUoZSk7aWYoaXNOYU4odCkpcmV0dXJuIE5hTjtsZXQgcj1FbCh0aGlzLm5hbWUpLFtzLGksbyxhLHUsbCxkXT1yLmZvcm1hdFRvUGFydHM/VGwocix0KTp3bChyLHQpO2E9PT1cXFwiQkNcXFwiJiYocz0tTWF0aC5hYnMocykrMSk7bGV0IHA9c3Ioe3llYXI6cyxtb250aDppLGRheTpvLGhvdXI6dT09PTI0PzA6dSxtaW51dGU6bCxzZWNvbmQ6ZCxtaWxsaXNlY29uZDowfSksZj0rdCxGPWYlMWUzO3JldHVybiBmLT1GPj0wP0Y6MWUzK0YsKHAtZikvKDYwKjFlMyl9ZXF1YWxzKGUpe3JldHVybiBlLnR5cGU9PT1cXFwiaWFuYVxcXCImJmUubmFtZT09PXRoaXMubmFtZX1nZXQgaXNWYWxpZCgpe3JldHVybiB0aGlzLnZhbGlkfX07dmFyIHVpPW51bGwsb2U9Y2xhc3MgZXh0ZW5kcyB4ZXtzdGF0aWMgZ2V0IHV0Y0luc3RhbmNlKCl7cmV0dXJuIHVpPT09bnVsbCYmKHVpPW5ldyBvZSgwKSksdWl9c3RhdGljIGluc3RhbmNlKGUpe3JldHVybiBlPT09MD9vZS51dGNJbnN0YW5jZTpuZXcgb2UoZSl9c3RhdGljIHBhcnNlU3BlY2lmaWVyKGUpe2lmKGUpe2xldCB0PWUubWF0Y2goL151dGMoPzooWystXVxcXFxkezEsMn0pKD86OihcXFxcZHsyfSkpPyk/JC9pKTtpZih0KXJldHVybiBuZXcgb2UoV3QodFsxXSx0WzJdKSl9cmV0dXJuIG51bGx9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmZpeGVkPWV9Z2V0IHR5cGUoKXtyZXR1cm5cXFwiZml4ZWRcXFwifWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuZml4ZWQ9PT0wP1xcXCJVVENcXFwiOmBVVEMke3h0KHRoaXMuZml4ZWQsXFxcIm5hcnJvd1xcXCIpfWB9Z2V0IGlhbmFOYW1lKCl7cmV0dXJuIHRoaXMuZml4ZWQ9PT0wP1xcXCJFdGMvVVRDXFxcIjpgRXRjL0dNVCR7eHQoLXRoaXMuZml4ZWQsXFxcIm5hcnJvd1xcXCIpfWB9b2Zmc2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9Zm9ybWF0T2Zmc2V0KGUsdCl7cmV0dXJuIHh0KHRoaXMuZml4ZWQsdCl9Z2V0IGlzVW5pdmVyc2FsKCl7cmV0dXJuITB9b2Zmc2V0KCl7cmV0dXJuIHRoaXMuZml4ZWR9ZXF1YWxzKGUpe3JldHVybiBlLnR5cGU9PT1cXFwiZml4ZWRcXFwiJiZlLmZpeGVkPT09dGhpcy5maXhlZH1nZXQgaXNWYWxpZCgpe3JldHVybiEwfX07dmFyIHBuPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnpvbmVOYW1lPWV9Z2V0IHR5cGUoKXtyZXR1cm5cXFwiaW52YWxpZFxcXCJ9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy56b25lTmFtZX1nZXQgaXNVbml2ZXJzYWwoKXtyZXR1cm4hMX1vZmZzZXROYW1lKCl7cmV0dXJuIG51bGx9Zm9ybWF0T2Zmc2V0KCl7cmV0dXJuXFxcIlxcXCJ9b2Zmc2V0KCl7cmV0dXJuIE5hTn1lcXVhbHMoKXtyZXR1cm4hMX1nZXQgaXNWYWxpZCgpe3JldHVybiExfX07ZnVuY3Rpb24gV2UobixlKXtsZXQgdDtpZihVKG4pfHxuPT09bnVsbClyZXR1cm4gZTtpZihuIGluc3RhbmNlb2YgeGUpcmV0dXJuIG47aWYoTm8obikpe2xldCByPW4udG9Mb3dlckNhc2UoKTtyZXR1cm4gcj09PVxcXCJsb2NhbFxcXCJ8fHI9PT1cXFwic3lzdGVtXFxcIj9lOnI9PT1cXFwidXRjXFxcInx8cj09PVxcXCJnbXRcXFwiP29lLnV0Y0luc3RhbmNlOm9lLnBhcnNlU3BlY2lmaWVyKHIpfHxoZS5jcmVhdGUobil9ZWxzZSByZXR1cm4gbnQobik/b2UuaW5zdGFuY2Uobik6dHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiZuLm9mZnNldCYmdHlwZW9mIG4ub2Zmc2V0PT1cXFwibnVtYmVyXFxcIj9uOm5ldyBwbihuKX12YXIgVm89KCk9PkRhdGUubm93KCkscW89XFxcInN5c3RlbVxcXCIsVW89bnVsbCxXbz1udWxsLEhvPW51bGwsS28sWD1jbGFzc3tzdGF0aWMgZ2V0IG5vdygpe3JldHVybiBWb31zdGF0aWMgc2V0IG5vdyhlKXtWbz1lfXN0YXRpYyBzZXQgZGVmYXVsdFpvbmUoZSl7cW89ZX1zdGF0aWMgZ2V0IGRlZmF1bHRab25lKCl7cmV0dXJuIFdlKHFvLE90Lmluc3RhbmNlKX1zdGF0aWMgZ2V0IGRlZmF1bHRMb2NhbGUoKXtyZXR1cm4gVW99c3RhdGljIHNldCBkZWZhdWx0TG9jYWxlKGUpe1VvPWV9c3RhdGljIGdldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKCl7cmV0dXJuIFdvfXN0YXRpYyBzZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbShlKXtXbz1lfXN0YXRpYyBnZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKCl7cmV0dXJuIEhvfXN0YXRpYyBzZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKGUpe0hvPWV9c3RhdGljIGdldCB0aHJvd09uSW52YWxpZCgpe3JldHVybiBLb31zdGF0aWMgc2V0IHRocm93T25JbnZhbGlkKGUpe0tvPWV9c3RhdGljIHJlc2V0Q2FjaGVzKCl7Wi5yZXNldENhY2hlKCksaGUucmVzZXRDYWNoZSgpfX07dmFyIEpvPXt9O2Z1bmN0aW9uIFNsKG4sZT17fSl7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoW24sZV0pLHI9Sm9bdF07cmV0dXJuIHJ8fChyPW5ldyBJbnRsLkxpc3RGb3JtYXQobixlKSxKb1t0XT1yKSxyfXZhciBsaT17fTtmdW5jdGlvbiBjaShuLGU9e30pe2xldCB0PUpTT04uc3RyaW5naWZ5KFtuLGVdKSxyPWxpW3RdO3JldHVybiByfHwocj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChuLGUpLGxpW3RdPXIpLHJ9dmFyIGZpPXt9O2Z1bmN0aW9uIGtsKG4sZT17fSl7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoW24sZV0pLHI9ZmlbdF07cmV0dXJuIHJ8fChyPW5ldyBJbnRsLk51bWJlckZvcm1hdChuLGUpLGZpW3RdPXIpLHJ9dmFyIGRpPXt9O2Z1bmN0aW9uIENsKG4sZT17fSl7bGV0IG89ZSx7YmFzZTp0fT1vLHI9S3MobyxbXFxcImJhc2VcXFwiXSkscz1KU09OLnN0cmluZ2lmeShbbixyXSksaT1kaVtzXTtyZXR1cm4gaXx8KGk9bmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KG4sZSksZGlbc109aSksaX12YXIgYXI9bnVsbDtmdW5jdGlvbiB4bCgpe3JldHVybiBhcnx8KGFyPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLGFyKX1mdW5jdGlvbiBPbChuKXtsZXQgZT1uLmluZGV4T2YoXFxcIi11LVxcXCIpO2lmKGU9PT0tMSlyZXR1cm5bbl07e2xldCB0LHI9bi5zdWJzdHJpbmcoMCxlKTt0cnl7dD1jaShuKS5yZXNvbHZlZE9wdGlvbnMoKX1jYXRjaChvKXt0PWNpKHIpLnJlc29sdmVkT3B0aW9ucygpfWxldHtudW1iZXJpbmdTeXN0ZW06cyxjYWxlbmRhcjppfT10O3JldHVybltyLHMsaV19fWZ1bmN0aW9uIHZsKG4sZSx0KXtyZXR1cm4odHx8ZSkmJihuKz1cXFwiLXVcXFwiLHQmJihuKz1gLWNhLSR7dH1gKSxlJiYobis9YC1udS0ke2V9YCkpLG59ZnVuY3Rpb24gSWwobil7bGV0IGU9W107Zm9yKGxldCB0PTE7dDw9MTI7dCsrKXtsZXQgcj1CLnV0YygyMDE2LHQsMSk7ZS5wdXNoKG4ocikpfXJldHVybiBlfWZ1bmN0aW9uIE5sKG4pe2xldCBlPVtdO2ZvcihsZXQgdD0xO3Q8PTc7dCsrKXtsZXQgcj1CLnV0YygyMDE2LDExLDEzK3QpO2UucHVzaChuKHIpKX1yZXR1cm4gZX1mdW5jdGlvbiBHcihuLGUsdCxyLHMpe2xldCBpPW4ubGlzdGluZ01vZGUodCk7cmV0dXJuIGk9PT1cXFwiZXJyb3JcXFwiP251bGw6aT09PVxcXCJlblxcXCI/cihlKTpzKGUpfWZ1bmN0aW9uIExsKG4pe3JldHVybiBuLm51bWJlcmluZ1N5c3RlbSYmbi5udW1iZXJpbmdTeXN0ZW0hPT1cXFwibGF0blxcXCI/ITE6bi5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCJ8fCFuLmxvY2FsZXx8bi5sb2NhbGUuc3RhcnRzV2l0aChcXFwiZW5cXFwiKXx8bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobi5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCJ9dmFyIGhpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnBhZFRvPXIucGFkVG98fDAsdGhpcy5mbG9vcj1yLmZsb29yfHwhMTtsZXQgYT1yLHtwYWRUbzpzLGZsb29yOml9PWEsbz1LcyhhLFtcXFwicGFkVG9cXFwiLFxcXCJmbG9vclxcXCJdKTtpZighdHx8T2JqZWN0LmtleXMobykubGVuZ3RoPjApe2xldCB1PSQoe3VzZUdyb3VwaW5nOiExfSxyKTtyLnBhZFRvPjAmJih1Lm1pbmltdW1JbnRlZ2VyRGlnaXRzPXIucGFkVG8pLHRoaXMuaW5mPWtsKGUsdSl9fWZvcm1hdChlKXtpZih0aGlzLmluZil7bGV0IHQ9dGhpcy5mbG9vcj9NYXRoLmZsb29yKGUpOmU7cmV0dXJuIHRoaXMuaW5mLmZvcm1hdCh0KX1lbHNle2xldCB0PXRoaXMuZmxvb3I/TWF0aC5mbG9vcihlKTpjbihlLDMpO3JldHVybiBpZSh0LHRoaXMucGFkVG8pfX19LHBpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm9wdHM9cjtsZXQgcztpZihlLnpvbmUuaXNVbml2ZXJzYWwpe2xldCBvPS0xKihlLm9mZnNldC82MCksYT1vPj0wP2BFdGMvR01UKyR7b31gOmBFdGMvR01UJHtvfWA7ZS5vZmZzZXQhPT0wJiZoZS5jcmVhdGUoYSkudmFsaWQ/KHM9YSx0aGlzLmR0PWUpOihzPVxcXCJVVENcXFwiLHIudGltZVpvbmVOYW1lP3RoaXMuZHQ9ZTp0aGlzLmR0PWUub2Zmc2V0PT09MD9lOkIuZnJvbU1pbGxpcyhlLnRzK2Uub2Zmc2V0KjYwKjFlMykpfWVsc2UgZS56b25lLnR5cGU9PT1cXFwic3lzdGVtXFxcIj90aGlzLmR0PWU6KHRoaXMuZHQ9ZSxzPWUuem9uZS5uYW1lKTtsZXQgaT0kKHt9LHRoaXMub3B0cyk7cyYmKGkudGltZVpvbmU9cyksdGhpcy5kdGY9Y2kodCxpKX1mb3JtYXQoKXtyZXR1cm4gdGhpcy5kdGYuZm9ybWF0KHRoaXMuZHQudG9KU0RhdGUoKSl9Zm9ybWF0VG9QYXJ0cygpe3JldHVybiB0aGlzLmR0Zi5mb3JtYXRUb1BhcnRzKHRoaXMuZHQudG9KU0RhdGUoKSl9cmVzb2x2ZWRPcHRpb25zKCl7cmV0dXJuIHRoaXMuZHRmLnJlc29sdmVkT3B0aW9ucygpfX0sbWk9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMub3B0cz0kKHtzdHlsZTpcXFwibG9uZ1xcXCJ9LHIpLCF0JiZLcigpJiYodGhpcy5ydGY9Q2woZSxyKSl9Zm9ybWF0KGUsdCl7cmV0dXJuIHRoaXMucnRmP3RoaXMucnRmLmZvcm1hdChlLHQpOlJvKHQsZSx0aGlzLm9wdHMubnVtZXJpYyx0aGlzLm9wdHMuc3R5bGUhPT1cXFwibG9uZ1xcXCIpfWZvcm1hdFRvUGFydHMoZSx0KXtyZXR1cm4gdGhpcy5ydGY/dGhpcy5ydGYuZm9ybWF0VG9QYXJ0cyhlLHQpOltdfX0sWj1jbGFzc3tzdGF0aWMgZnJvbU9wdHMoZSl7cmV0dXJuIFouY3JlYXRlKGUubG9jYWxlLGUubnVtYmVyaW5nU3lzdGVtLGUub3V0cHV0Q2FsZW5kYXIsZS5kZWZhdWx0VG9FTil9c3RhdGljIGNyZWF0ZShlLHQscixzPSExKXtsZXQgaT1lfHxYLmRlZmF1bHRMb2NhbGUsbz1pfHwocz9cXFwiZW4tVVNcXFwiOnhsKCkpLGE9dHx8WC5kZWZhdWx0TnVtYmVyaW5nU3lzdGVtLHU9cnx8WC5kZWZhdWx0T3V0cHV0Q2FsZW5kYXI7cmV0dXJuIG5ldyBaKG8sYSx1LGkpfXN0YXRpYyByZXNldENhY2hlKCl7YXI9bnVsbCxsaT17fSxmaT17fSxkaT17fX1zdGF0aWMgZnJvbU9iamVjdCh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnQsb3V0cHV0Q2FsZW5kYXI6cn09e30pe3JldHVybiBaLmNyZWF0ZShlLHQscil9Y29uc3RydWN0b3IoZSx0LHIscyl7bGV0W2ksbyxhXT1PbChlKTt0aGlzLmxvY2FsZT1pLHRoaXMubnVtYmVyaW5nU3lzdGVtPXR8fG98fG51bGwsdGhpcy5vdXRwdXRDYWxlbmRhcj1yfHxhfHxudWxsLHRoaXMuaW50bD12bCh0aGlzLmxvY2FsZSx0aGlzLm51bWJlcmluZ1N5c3RlbSx0aGlzLm91dHB1dENhbGVuZGFyKSx0aGlzLndlZWtkYXlzQ2FjaGU9e2Zvcm1hdDp7fSxzdGFuZGFsb25lOnt9fSx0aGlzLm1vbnRoc0NhY2hlPXtmb3JtYXQ6e30sc3RhbmRhbG9uZTp7fX0sdGhpcy5tZXJpZGllbUNhY2hlPW51bGwsdGhpcy5lcmFDYWNoZT17fSx0aGlzLnNwZWNpZmllZExvY2FsZT1zLHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ9bnVsbH1nZXQgZmFzdE51bWJlcnMoKXtyZXR1cm4gdGhpcy5mYXN0TnVtYmVyc0NhY2hlZD09bnVsbCYmKHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ9TGwodGhpcykpLHRoaXMuZmFzdE51bWJlcnNDYWNoZWR9bGlzdGluZ01vZGUoKXtsZXQgZT10aGlzLmlzRW5nbGlzaCgpLHQ9KHRoaXMubnVtYmVyaW5nU3lzdGVtPT09bnVsbHx8dGhpcy5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCIpJiYodGhpcy5vdXRwdXRDYWxlbmRhcj09PW51bGx8fHRoaXMub3V0cHV0Q2FsZW5kYXI9PT1cXFwiZ3JlZ29yeVxcXCIpO3JldHVybiBlJiZ0P1xcXCJlblxcXCI6XFxcImludGxcXFwifWNsb25lKGUpe3JldHVybiFlfHxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5sZW5ndGg9PT0wP3RoaXM6Wi5jcmVhdGUoZS5sb2NhbGV8fHRoaXMuc3BlY2lmaWVkTG9jYWxlLGUubnVtYmVyaW5nU3lzdGVtfHx0aGlzLm51bWJlcmluZ1N5c3RlbSxlLm91dHB1dENhbGVuZGFyfHx0aGlzLm91dHB1dENhbGVuZGFyLGUuZGVmYXVsdFRvRU58fCExKX1yZWRlZmF1bHRUb0VOKGU9e30pe3JldHVybiB0aGlzLmNsb25lKEZlKCQoe30sZSkse2RlZmF1bHRUb0VOOiEwfSkpfXJlZGVmYXVsdFRvU3lzdGVtKGU9e30pe3JldHVybiB0aGlzLmNsb25lKEZlKCQoe30sZSkse2RlZmF1bHRUb0VOOiExfSkpfW1vbnRocyhlLHQ9ITEscj0hMCl7cmV0dXJuIEdyKHRoaXMsZSxyLGVpLCgpPT57bGV0IHM9dD97bW9udGg6ZSxkYXk6XFxcIm51bWVyaWNcXFwifTp7bW9udGg6ZX0saT10P1xcXCJmb3JtYXRcXFwiOlxcXCJzdGFuZGFsb25lXFxcIjtyZXR1cm4gdGhpcy5tb250aHNDYWNoZVtpXVtlXXx8KHRoaXMubW9udGhzQ2FjaGVbaV1bZV09SWwobz0+dGhpcy5leHRyYWN0KG8scyxcXFwibW9udGhcXFwiKSkpLHRoaXMubW9udGhzQ2FjaGVbaV1bZV19KX13ZWVrZGF5cyhlLHQ9ITEscj0hMCl7cmV0dXJuIEdyKHRoaXMsZSxyLHJpLCgpPT57bGV0IHM9dD97d2Vla2RheTplLHllYXI6XFxcIm51bWVyaWNcXFwiLG1vbnRoOlxcXCJsb25nXFxcIixkYXk6XFxcIm51bWVyaWNcXFwifTp7d2Vla2RheTplfSxpPXQ/XFxcImZvcm1hdFxcXCI6XFxcInN0YW5kYWxvbmVcXFwiO3JldHVybiB0aGlzLndlZWtkYXlzQ2FjaGVbaV1bZV18fCh0aGlzLndlZWtkYXlzQ2FjaGVbaV1bZV09Tmwobz0+dGhpcy5leHRyYWN0KG8scyxcXFwid2Vla2RheVxcXCIpKSksdGhpcy53ZWVrZGF5c0NhY2hlW2ldW2VdfSl9bWVyaWRpZW1zKGU9ITApe3JldHVybiBHcih0aGlzLHZvaWQgMCxlLCgpPT5zaSwoKT0+e2lmKCF0aGlzLm1lcmlkaWVtQ2FjaGUpe2xldCB0PXtob3VyOlxcXCJudW1lcmljXFxcIixob3VyQ3ljbGU6XFxcImgxMlxcXCJ9O3RoaXMubWVyaWRpZW1DYWNoZT1bQi51dGMoMjAxNiwxMSwxMyw5KSxCLnV0YygyMDE2LDExLDEzLDE5KV0ubWFwKHI9PnRoaXMuZXh0cmFjdChyLHQsXFxcImRheXBlcmlvZFxcXCIpKX1yZXR1cm4gdGhpcy5tZXJpZGllbUNhY2hlfSl9ZXJhcyhlLHQ9ITApe3JldHVybiBHcih0aGlzLGUsdCxpaSwoKT0+e2xldCByPXtlcmE6ZX07cmV0dXJuIHRoaXMuZXJhQ2FjaGVbZV18fCh0aGlzLmVyYUNhY2hlW2VdPVtCLnV0YygtNDAsMSwxKSxCLnV0YygyMDE3LDEsMSldLm1hcChzPT50aGlzLmV4dHJhY3QocyxyLFxcXCJlcmFcXFwiKSkpLHRoaXMuZXJhQ2FjaGVbZV19KX1leHRyYWN0KGUsdCxyKXtsZXQgcz10aGlzLmR0Rm9ybWF0dGVyKGUsdCksaT1zLmZvcm1hdFRvUGFydHMoKSxvPWkuZmluZChhPT5hLnR5cGUudG9Mb3dlckNhc2UoKT09PXIpO3JldHVybiBvP28udmFsdWU6bnVsbH1udW1iZXJGb3JtYXR0ZXIoZT17fSl7cmV0dXJuIG5ldyBoaSh0aGlzLmludGwsZS5mb3JjZVNpbXBsZXx8dGhpcy5mYXN0TnVtYmVycyxlKX1kdEZvcm1hdHRlcihlLHQ9e30pe3JldHVybiBuZXcgcGkoZSx0aGlzLmludGwsdCl9cmVsRm9ybWF0dGVyKGU9e30pe3JldHVybiBuZXcgbWkodGhpcy5pbnRsLHRoaXMuaXNFbmdsaXNoKCksZSl9bGlzdEZvcm1hdHRlcihlPXt9KXtyZXR1cm4gU2wodGhpcy5pbnRsLGUpfWlzRW5nbGlzaCgpe3JldHVybiB0aGlzLmxvY2FsZT09PVxcXCJlblxcXCJ8fHRoaXMubG9jYWxlLnRvTG93ZXJDYXNlKCk9PT1cXFwiZW4tdXNcXFwifHxuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmludGwpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZS5zdGFydHNXaXRoKFxcXCJlbi11c1xcXCIpfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5sb2NhbGU9PT1lLmxvY2FsZSYmdGhpcy5udW1iZXJpbmdTeXN0ZW09PT1lLm51bWJlcmluZ1N5c3RlbSYmdGhpcy5vdXRwdXRDYWxlbmRhcj09PWUub3V0cHV0Q2FsZW5kYXJ9fTtmdW5jdGlvbiBEbiguLi5uKXtsZXQgZT1uLnJlZHVjZSgodCxyKT0+dCtyLnNvdXJjZSxcXFwiXFxcIik7cmV0dXJuIFJlZ0V4cChgXiR7ZX0kYCl9ZnVuY3Rpb24geW4oLi4ubil7cmV0dXJuIGU9Pm4ucmVkdWNlKChbdCxyLHNdLGkpPT57bGV0W28sYSx1XT1pKGUscyk7cmV0dXJuWyQoJCh7fSx0KSxvKSxhfHxyLHVdfSxbe30sbnVsbCwxXSkuc2xpY2UoMCwyKX1mdW5jdGlvbiBnbihuLC4uLmUpe2lmKG49PW51bGwpcmV0dXJuW251bGwsbnVsbF07Zm9yKGxldFt0LHJdb2YgZSl7bGV0IHM9dC5leGVjKG4pO2lmKHMpcmV0dXJuIHIocyl9cmV0dXJuW251bGwsbnVsbF19ZnVuY3Rpb24gWW8oLi4ubil7cmV0dXJuKGUsdCk9PntsZXQgcj17fSxzO2ZvcihzPTA7czxuLmxlbmd0aDtzKyspcltuW3NdXT1EdChlW3Qrc10pO3JldHVybltyLG51bGwsdCtzXX19dmFyIEdvPS8oPzooWil8KFsrLV1cXFxcZFxcXFxkKSg/Ojo/KFxcXFxkXFxcXGQpKT8pLyxBbD1gKD86JHtHby5zb3VyY2V9Pyg/OlxcXFxcXFxcWygke1FzLnNvdXJjZX0pXFxcXFxcXFxdKT8pP2AsRGk9LyhcXFxcZFxcXFxkKSg/Ojo/KFxcXFxkXFxcXGQpKD86Oj8oXFxcXGRcXFxcZCkoPzpbLixdKFxcXFxkezEsMzB9KSk/KT8pPy8sWm89UmVnRXhwKGAke0RpLnNvdXJjZX0ke0FsfWApLHlpPVJlZ0V4cChgKD86VCR7Wm8uc291cmNlfSk/YCksTWw9LyhbKy1dXFxcXGR7Nn18XFxcXGR7NH0pKD86LT8oXFxcXGRcXFxcZCkoPzotPyhcXFxcZFxcXFxkKSk/KT8vLF9sPS8oXFxcXGR7NH0pLT9XKFxcXFxkXFxcXGQpKD86LT8oXFxcXGQpKT8vLEJsPS8oXFxcXGR7NH0pLT8oXFxcXGR7M30pLyxQbD1ZbyhcXFwid2Vla1llYXJcXFwiLFxcXCJ3ZWVrTnVtYmVyXFxcIixcXFwid2Vla0RheVxcXCIpLCRsPVlvKFxcXCJ5ZWFyXFxcIixcXFwib3JkaW5hbFxcXCIpLFJsPS8oXFxcXGR7NH0pLShcXFxcZFxcXFxkKS0oXFxcXGRcXFxcZCkvLFFvPVJlZ0V4cChgJHtEaS5zb3VyY2V9ID8oPzoke0dvLnNvdXJjZX18KCR7UXMuc291cmNlfSkpP2ApLGpsPVJlZ0V4cChgKD86ICR7UW8uc291cmNlfSk/YCk7ZnVuY3Rpb24gbW4obixlLHQpe2xldCByPW5bZV07cmV0dXJuIFUocik/dDpEdChyKX1mdW5jdGlvbiBWbChuLGUpe3JldHVyblt7eWVhcjptbihuLGUpLG1vbnRoOm1uKG4sZSsxLDEpLGRheTptbihuLGUrMiwxKX0sbnVsbCxlKzNdfWZ1bmN0aW9uIGJuKG4sZSl7cmV0dXJuW3tob3VyczptbihuLGUsMCksbWludXRlczptbihuLGUrMSwwKSxzZWNvbmRzOm1uKG4sZSsyLDApLG1pbGxpc2Vjb25kczpycihuW2UrM10pfSxudWxsLGUrNF19ZnVuY3Rpb24gdXIobixlKXtsZXQgdD0hbltlXSYmIW5bZSsxXSxyPVd0KG5bZSsxXSxuW2UrMl0pLHM9dD9udWxsOm9lLmluc3RhbmNlKHIpO3JldHVyblt7fSxzLGUrM119ZnVuY3Rpb24gbHIobixlKXtsZXQgdD1uW2VdP2hlLmNyZWF0ZShuW2VdKTpudWxsO3JldHVyblt7fSx0LGUrMV19dmFyIHFsPVJlZ0V4cChgXlQ/JHtEaS5zb3VyY2V9JGApLFVsPS9eLT9QKD86KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pWSk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pTSk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pVyk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pRCk/KD86VCg/OigtP1xcXFxkezEsMjB9KD86XFxcXC5cXFxcZHsxLDIwfSk/KUgpPyg/OigtP1xcXFxkezEsMjB9KD86XFxcXC5cXFxcZHsxLDIwfSk/KU0pPyg/OigtP1xcXFxkezEsMjB9KSg/OlsuLF0oLT9cXFxcZHsxLDIwfSkpP1MpPyk/KSQvO2Z1bmN0aW9uIFdsKG4pe2xldFtlLHQscixzLGksbyxhLHUsbF09bixkPWVbMF09PT1cXFwiLVxcXCIsaD11JiZ1WzBdPT09XFxcIi1cXFwiLHA9KGYsRj0hMSk9PmYhPT12b2lkIDAmJihGfHxmJiZkKT8tZjpmO3JldHVyblt7eWVhcnM6cChDdCh0KSksbW9udGhzOnAoQ3QocikpLHdlZWtzOnAoQ3QocykpLGRheXM6cChDdChpKSksaG91cnM6cChDdChvKSksbWludXRlczpwKEN0KGEpKSxzZWNvbmRzOnAoQ3QodSksdT09PVxcXCItMFxcXCIpLG1pbGxpc2Vjb25kczpwKHJyKGwpLGgpfV19dmFyIEhsPXtHTVQ6MCxFRFQ6LTQqNjAsRVNUOi01KjYwLENEVDotNSo2MCxDU1Q6LTYqNjAsTURUOi02KjYwLE1TVDotNyo2MCxQRFQ6LTcqNjAsUFNUOi04KjYwfTtmdW5jdGlvbiBnaShuLGUsdCxyLHMsaSxvKXtsZXQgYT17eWVhcjplLmxlbmd0aD09PTI/aXIoRHQoZSkpOkR0KGUpLG1vbnRoOlhzLmluZGV4T2YodCkrMSxkYXk6RHQociksaG91cjpEdChzKSxtaW51dGU6RHQoaSl9O3JldHVybiBvJiYoYS5zZWNvbmQ9RHQobykpLG4mJihhLndlZWtkYXk9bi5sZW5ndGg+Mz90aS5pbmRleE9mKG4pKzE6bmkuaW5kZXhPZihuKSsxKSxhfXZhciBLbD0vXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLFxcXFxzKT8oXFxcXGR7MSwyfSlcXFxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXFxccyhcXFxcZHsyLDR9KVxcXFxzKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKSg/OjooXFxcXGRcXFxcZCkpP1xcXFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXFxcXGRcXFxcZCkoXFxcXGRcXFxcZCkpKSQvO2Z1bmN0aW9uIEpsKG4pe2xldFssZSx0LHIscyxpLG8sYSx1LGwsZCxoXT1uLHA9Z2koZSxzLHIsdCxpLG8sYSksZjtyZXR1cm4gdT9mPUhsW3VdOmw/Zj0wOmY9V3QoZCxoKSxbcCxuZXcgb2UoZildfWZ1bmN0aW9uIHpsKG4pe3JldHVybiBuLnJlcGxhY2UoL1xcXFwoW14oKV0qXFxcXCl8W1xcXFxuXFxcXHRdL2csXFxcIiBcXFwiKS5yZXBsYWNlKC8oXFxcXHNcXFxccyspL2csXFxcIiBcXFwiKS50cmltKCl9dmFyIFlsPS9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcXFxcZFxcXFxkKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpIChcXFxcZHs0fSkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgR01UJC8sR2w9L14oTW9uZGF5fFR1ZXNkYXl8V2VkbmVzZGF5fFRodXJzZGF5fEZyaWRheXxTYXR1cmRheXxTdW5kYXkpLCAoXFxcXGRcXFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxcXGRcXFxcZCkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgR01UJC8sWmw9L14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpICggXFxcXGR8XFxcXGRcXFxcZCkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgKFxcXFxkezR9KSQvO2Z1bmN0aW9uIHpvKG4pe2xldFssZSx0LHIscyxpLG8sYV09bjtyZXR1cm5bZ2koZSxzLHIsdCxpLG8sYSksb2UudXRjSW5zdGFuY2VdfWZ1bmN0aW9uIFFsKG4pe2xldFssZSx0LHIscyxpLG8sYV09bjtyZXR1cm5bZ2koZSxhLHQscixzLGksbyksb2UudXRjSW5zdGFuY2VdfXZhciBYbD1EbihNbCx5aSksZWM9RG4oX2wseWkpLHRjPURuKEJsLHlpKSxuYz1EbihabyksWG89eW4oVmwsYm4sdXIsbHIpLHJjPXluKFBsLGJuLHVyLGxyKSxzYz15bigkbCxibix1cixsciksaWM9eW4oYm4sdXIsbHIpO2Z1bmN0aW9uIGVhKG4pe3JldHVybiBnbihuLFtYbCxYb10sW2VjLHJjXSxbdGMsc2NdLFtuYyxpY10pfWZ1bmN0aW9uIHRhKG4pe3JldHVybiBnbih6bChuKSxbS2wsSmxdKX1mdW5jdGlvbiBuYShuKXtyZXR1cm4gZ24obixbWWwsem9dLFtHbCx6b10sW1psLFFsXSl9ZnVuY3Rpb24gcmEobil7cmV0dXJuIGduKG4sW1VsLFdsXSl9dmFyIG9jPXluKGJuKTtmdW5jdGlvbiBzYShuKXtyZXR1cm4gZ24obixbcWwsb2NdKX12YXIgYWM9RG4oUmwsamwpLHVjPURuKFFvKSxsYz15bihibix1cixscik7ZnVuY3Rpb24gaWEobil7cmV0dXJuIGduKG4sW2FjLFhvXSxbdWMsbGNdKX12YXIgY2M9XFxcIkludmFsaWQgRHVyYXRpb25cXFwiLG9hPXt3ZWVrczp7ZGF5czo3LGhvdXJzOjcqMjQsbWludXRlczo3KjI0KjYwLHNlY29uZHM6NyoyNCo2MCo2MCxtaWxsaXNlY29uZHM6NyoyNCo2MCo2MCoxZTN9LGRheXM6e2hvdXJzOjI0LG1pbnV0ZXM6MjQqNjAsc2Vjb25kczoyNCo2MCo2MCxtaWxsaXNlY29uZHM6MjQqNjAqNjAqMWUzfSxob3Vyczp7bWludXRlczo2MCxzZWNvbmRzOjYwKjYwLG1pbGxpc2Vjb25kczo2MCo2MCoxZTN9LG1pbnV0ZXM6e3NlY29uZHM6NjAsbWlsbGlzZWNvbmRzOjYwKjFlM30sc2Vjb25kczp7bWlsbGlzZWNvbmRzOjFlM319LGZjPSQoe3llYXJzOntxdWFydGVyczo0LG1vbnRoczoxMix3ZWVrczo1MixkYXlzOjM2NSxob3VyczozNjUqMjQsbWludXRlczozNjUqMjQqNjAsc2Vjb25kczozNjUqMjQqNjAqNjAsbWlsbGlzZWNvbmRzOjM2NSoyNCo2MCo2MCoxZTN9LHF1YXJ0ZXJzOnttb250aHM6Myx3ZWVrczoxMyxkYXlzOjkxLGhvdXJzOjkxKjI0LG1pbnV0ZXM6OTEqMjQqNjAsc2Vjb25kczo5MSoyNCo2MCo2MCxtaWxsaXNlY29uZHM6OTEqMjQqNjAqNjAqMWUzfSxtb250aHM6e3dlZWtzOjQsZGF5czozMCxob3VyczozMCoyNCxtaW51dGVzOjMwKjI0KjYwLHNlY29uZHM6MzAqMjQqNjAqNjAsbWlsbGlzZWNvbmRzOjMwKjI0KjYwKjYwKjFlM319LG9hKSxNZT0xNDYwOTcvNDAwLEVuPTE0NjA5Ny80ODAwLGRjPSQoe3llYXJzOntxdWFydGVyczo0LG1vbnRoczoxMix3ZWVrczpNZS83LGRheXM6TWUsaG91cnM6TWUqMjQsbWludXRlczpNZSoyNCo2MCxzZWNvbmRzOk1lKjI0KjYwKjYwLG1pbGxpc2Vjb25kczpNZSoyNCo2MCo2MCoxZTN9LHF1YXJ0ZXJzOnttb250aHM6Myx3ZWVrczpNZS8yOCxkYXlzOk1lLzQsaG91cnM6TWUqMjQvNCxtaW51dGVzOk1lKjI0KjYwLzQsc2Vjb25kczpNZSoyNCo2MCo2MC80LG1pbGxpc2Vjb25kczpNZSoyNCo2MCo2MCoxZTMvNH0sbW9udGhzOnt3ZWVrczpFbi83LGRheXM6RW4saG91cnM6RW4qMjQsbWludXRlczpFbioyNCo2MCxzZWNvbmRzOkVuKjI0KjYwKjYwLG1pbGxpc2Vjb25kczpFbioyNCo2MCo2MCoxZTN9fSxvYSksS3Q9W1xcXCJ5ZWFyc1xcXCIsXFxcInF1YXJ0ZXJzXFxcIixcXFwibW9udGhzXFxcIixcXFwid2Vla3NcXFwiLFxcXCJkYXlzXFxcIixcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCIsXFxcIm1pbGxpc2Vjb25kc1xcXCJdLGhjPUt0LnNsaWNlKDApLnJldmVyc2UoKTtmdW5jdGlvbiBIdChuLGUsdD0hMSl7bGV0IHI9e3ZhbHVlczp0P2UudmFsdWVzOiQoJCh7fSxuLnZhbHVlcyksZS52YWx1ZXN8fHt9KSxsb2M6bi5sb2MuY2xvbmUoZS5sb2MpLGNvbnZlcnNpb25BY2N1cmFjeTplLmNvbnZlcnNpb25BY2N1cmFjeXx8bi5jb252ZXJzaW9uQWNjdXJhY3l9O3JldHVybiBuZXcgQShyKX1mdW5jdGlvbiBwYyhuKXtyZXR1cm4gbjwwP01hdGguZmxvb3Iobik6TWF0aC5jZWlsKG4pfWZ1bmN0aW9uIGFhKG4sZSx0LHIscyl7bGV0IGk9bltzXVt0XSxvPWVbdF0vaSxhPU1hdGguc2lnbihvKT09PU1hdGguc2lnbihyW3NdKSx1PSFhJiZyW3NdIT09MCYmTWF0aC5hYnMobyk8PTE/cGMobyk6TWF0aC50cnVuYyhvKTtyW3NdKz11LGVbdF0tPXUqaX1mdW5jdGlvbiBtYyhuLGUpe2hjLnJlZHVjZSgodCxyKT0+VShlW3JdKT90Oih0JiZhYShuLGUsdCxlLHIpLHIpLG51bGwpfXZhciBBPWNsYXNze2NvbnN0cnVjdG9yKGUpe2xldCB0PWUuY29udmVyc2lvbkFjY3VyYWN5PT09XFxcImxvbmd0ZXJtXFxcInx8ITE7dGhpcy52YWx1ZXM9ZS52YWx1ZXMsdGhpcy5sb2M9ZS5sb2N8fFouY3JlYXRlKCksdGhpcy5jb252ZXJzaW9uQWNjdXJhY3k9dD9cXFwibG9uZ3Rlcm1cXFwiOlxcXCJjYXN1YWxcXFwiLHRoaXMuaW52YWxpZD1lLmludmFsaWR8fG51bGwsdGhpcy5tYXRyaXg9dD9kYzpmYyx0aGlzLmlzTHV4b25EdXJhdGlvbj0hMH1zdGF0aWMgZnJvbU1pbGxpcyhlLHQpe3JldHVybiBBLmZyb21PYmplY3Qoe21pbGxpc2Vjb25kczplfSx0KX1zdGF0aWMgZnJvbU9iamVjdChlLHQ9e30pe2lmKGU9PW51bGx8fHR5cGVvZiBlIT1cXFwib2JqZWN0XFxcIil0aHJvdyBuZXcgRGUoYER1cmF0aW9uLmZyb21PYmplY3Q6IGFyZ3VtZW50IGV4cGVjdGVkIHRvIGJlIGFuIG9iamVjdCwgZ290ICR7ZT09PW51bGw/XFxcIm51bGxcXFwiOnR5cGVvZiBlfWApO3JldHVybiBuZXcgQSh7dmFsdWVzOmhuKGUsQS5ub3JtYWxpemVVbml0KSxsb2M6Wi5mcm9tT2JqZWN0KHQpLGNvbnZlcnNpb25BY2N1cmFjeTp0LmNvbnZlcnNpb25BY2N1cmFjeX0pfXN0YXRpYyBmcm9tRHVyYXRpb25MaWtlKGUpe2lmKG50KGUpKXJldHVybiBBLmZyb21NaWxsaXMoZSk7aWYoQS5pc0R1cmF0aW9uKGUpKXJldHVybiBlO2lmKHR5cGVvZiBlPT1cXFwib2JqZWN0XFxcIilyZXR1cm4gQS5mcm9tT2JqZWN0KGUpO3Rocm93IG5ldyBEZShgVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAke2V9IG9mIHR5cGUgJHt0eXBlb2YgZX1gKX1zdGF0aWMgZnJvbUlTTyhlLHQpe2xldFtyXT1yYShlKTtyZXR1cm4gcj9BLmZyb21PYmplY3Qocix0KTpBLmludmFsaWQoXFxcInVucGFyc2FibGVcXFwiLGB0aGUgaW5wdXQgXFxcIiR7ZX1cXFwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApfXN0YXRpYyBmcm9tSVNPVGltZShlLHQpe2xldFtyXT1zYShlKTtyZXR1cm4gcj9BLmZyb21PYmplY3Qocix0KTpBLmludmFsaWQoXFxcInVucGFyc2FibGVcXFwiLGB0aGUgaW5wdXQgXFxcIiR7ZX1cXFwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApfXN0YXRpYyBpbnZhbGlkKGUsdD1udWxsKXtpZighZSl0aHJvdyBuZXcgRGUoXFxcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRHVyYXRpb24gaXMgaW52YWxpZFxcXCIpO2xldCByPWUgaW5zdGFuY2VvZiB5ZT9lOm5ldyB5ZShlLHQpO2lmKFgudGhyb3dPbkludmFsaWQpdGhyb3cgbmV3IEhyKHIpO3JldHVybiBuZXcgQSh7aW52YWxpZDpyfSl9c3RhdGljIG5vcm1hbGl6ZVVuaXQoZSl7bGV0IHQ9e3llYXI6XFxcInllYXJzXFxcIix5ZWFyczpcXFwieWVhcnNcXFwiLHF1YXJ0ZXI6XFxcInF1YXJ0ZXJzXFxcIixxdWFydGVyczpcXFwicXVhcnRlcnNcXFwiLG1vbnRoOlxcXCJtb250aHNcXFwiLG1vbnRoczpcXFwibW9udGhzXFxcIix3ZWVrOlxcXCJ3ZWVrc1xcXCIsd2Vla3M6XFxcIndlZWtzXFxcIixkYXk6XFxcImRheXNcXFwiLGRheXM6XFxcImRheXNcXFwiLGhvdXI6XFxcImhvdXJzXFxcIixob3VyczpcXFwiaG91cnNcXFwiLG1pbnV0ZTpcXFwibWludXRlc1xcXCIsbWludXRlczpcXFwibWludXRlc1xcXCIsc2Vjb25kOlxcXCJzZWNvbmRzXFxcIixzZWNvbmRzOlxcXCJzZWNvbmRzXFxcIixtaWxsaXNlY29uZDpcXFwibWlsbGlzZWNvbmRzXFxcIixtaWxsaXNlY29uZHM6XFxcIm1pbGxpc2Vjb25kc1xcXCJ9W2UmJmUudG9Mb3dlckNhc2UoKV07aWYoIXQpdGhyb3cgbmV3IHVuKGUpO3JldHVybiB0fXN0YXRpYyBpc0R1cmF0aW9uKGUpe3JldHVybiBlJiZlLmlzTHV4b25EdXJhdGlvbnx8ITF9Z2V0IGxvY2FsZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5sb2MubG9jYWxlOm51bGx9Z2V0IG51bWJlcmluZ1N5c3RlbSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtOm51bGx9dG9Gb3JtYXQoZSx0PXt9KXtsZXQgcj1GZSgkKHt9LHQpLHtmbG9vcjp0LnJvdW5kIT09ITEmJnQuZmxvb3IhPT0hMX0pO3JldHVybiB0aGlzLmlzVmFsaWQ/ZmUuY3JlYXRlKHRoaXMubG9jLHIpLmZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyh0aGlzLGUpOmNjfXRvSHVtYW4oZT17fSl7bGV0IHQ9S3QubWFwKHI9PntsZXQgcz10aGlzLnZhbHVlc1tyXTtyZXR1cm4gVShzKT9udWxsOnRoaXMubG9jLm51bWJlckZvcm1hdHRlcihGZSgkKHtzdHlsZTpcXFwidW5pdFxcXCIsdW5pdERpc3BsYXk6XFxcImxvbmdcXFwifSxlKSx7dW5pdDpyLnNsaWNlKDAsLTEpfSkpLmZvcm1hdChzKX0pLmZpbHRlcihyPT5yKTtyZXR1cm4gdGhpcy5sb2MubGlzdEZvcm1hdHRlcigkKHt0eXBlOlxcXCJjb25qdW5jdGlvblxcXCIsc3R5bGU6ZS5saXN0U3R5bGV8fFxcXCJuYXJyb3dcXFwifSxlKSkuZm9ybWF0KHQpfXRvT2JqZWN0KCl7cmV0dXJuIHRoaXMuaXNWYWxpZD8kKHt9LHRoaXMudmFsdWVzKTp7fX10b0lTTygpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIG51bGw7bGV0IGU9XFxcIlBcXFwiO3JldHVybiB0aGlzLnllYXJzIT09MCYmKGUrPXRoaXMueWVhcnMrXFxcIllcXFwiKSwodGhpcy5tb250aHMhPT0wfHx0aGlzLnF1YXJ0ZXJzIT09MCkmJihlKz10aGlzLm1vbnRocyt0aGlzLnF1YXJ0ZXJzKjMrXFxcIk1cXFwiKSx0aGlzLndlZWtzIT09MCYmKGUrPXRoaXMud2Vla3MrXFxcIldcXFwiKSx0aGlzLmRheXMhPT0wJiYoZSs9dGhpcy5kYXlzK1xcXCJEXFxcIiksKHRoaXMuaG91cnMhPT0wfHx0aGlzLm1pbnV0ZXMhPT0wfHx0aGlzLnNlY29uZHMhPT0wfHx0aGlzLm1pbGxpc2Vjb25kcyE9PTApJiYoZSs9XFxcIlRcXFwiKSx0aGlzLmhvdXJzIT09MCYmKGUrPXRoaXMuaG91cnMrXFxcIkhcXFwiKSx0aGlzLm1pbnV0ZXMhPT0wJiYoZSs9dGhpcy5taW51dGVzK1xcXCJNXFxcIiksKHRoaXMuc2Vjb25kcyE9PTB8fHRoaXMubWlsbGlzZWNvbmRzIT09MCkmJihlKz1jbih0aGlzLnNlY29uZHMrdGhpcy5taWxsaXNlY29uZHMvMWUzLDMpK1xcXCJTXFxcIiksZT09PVxcXCJQXFxcIiYmKGUrPVxcXCJUMFNcXFwiKSxlfXRvSVNPVGltZShlPXt9KXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiBudWxsO2xldCB0PXRoaXMudG9NaWxsaXMoKTtpZih0PDB8fHQ+PTg2NGU1KXJldHVybiBudWxsO2U9JCh7c3VwcHJlc3NNaWxsaXNlY29uZHM6ITEsc3VwcHJlc3NTZWNvbmRzOiExLGluY2x1ZGVQcmVmaXg6ITEsZm9ybWF0OlxcXCJleHRlbmRlZFxcXCJ9LGUpO2xldCByPXRoaXMuc2hpZnRUbyhcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCIsXFxcIm1pbGxpc2Vjb25kc1xcXCIpLHM9ZS5mb3JtYXQ9PT1cXFwiYmFzaWNcXFwiP1xcXCJoaG1tXFxcIjpcXFwiaGg6bW1cXFwiOyghZS5zdXBwcmVzc1NlY29uZHN8fHIuc2Vjb25kcyE9PTB8fHIubWlsbGlzZWNvbmRzIT09MCkmJihzKz1lLmZvcm1hdD09PVxcXCJiYXNpY1xcXCI/XFxcInNzXFxcIjpcXFwiOnNzXFxcIiwoIWUuc3VwcHJlc3NNaWxsaXNlY29uZHN8fHIubWlsbGlzZWNvbmRzIT09MCkmJihzKz1cXFwiLlNTU1xcXCIpKTtsZXQgaT1yLnRvRm9ybWF0KHMpO3JldHVybiBlLmluY2x1ZGVQcmVmaXgmJihpPVxcXCJUXFxcIitpKSxpfXRvSlNPTigpe3JldHVybiB0aGlzLnRvSVNPKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy50b0lTTygpfXRvTWlsbGlzKCl7cmV0dXJuIHRoaXMuYXMoXFxcIm1pbGxpc2Vjb25kc1xcXCIpfXZhbHVlT2YoKXtyZXR1cm4gdGhpcy50b01pbGxpcygpfXBsdXMoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1BLmZyb21EdXJhdGlvbkxpa2UoZSkscj17fTtmb3IobGV0IHMgb2YgS3QpKGt0KHQudmFsdWVzLHMpfHxrdCh0aGlzLnZhbHVlcyxzKSkmJihyW3NdPXQuZ2V0KHMpK3RoaXMuZ2V0KHMpKTtyZXR1cm4gSHQodGhpcyx7dmFsdWVzOnJ9LCEwKX1taW51cyhlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PUEuZnJvbUR1cmF0aW9uTGlrZShlKTtyZXR1cm4gdGhpcy5wbHVzKHQubmVnYXRlKCkpfW1hcFVuaXRzKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9e307Zm9yKGxldCByIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSl0W3JdPVpzKGUodGhpcy52YWx1ZXNbcl0scikpO3JldHVybiBIdCh0aGlzLHt2YWx1ZXM6dH0sITApfWdldChlKXtyZXR1cm4gdGhpc1tBLm5vcm1hbGl6ZVVuaXQoZSldfXNldChlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PSQoJCh7fSx0aGlzLnZhbHVlcyksaG4oZSxBLm5vcm1hbGl6ZVVuaXQpKTtyZXR1cm4gSHQodGhpcyx7dmFsdWVzOnR9KX1yZWNvbmZpZ3VyZSh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnQsY29udmVyc2lvbkFjY3VyYWN5OnJ9PXt9KXtsZXQgcz10aGlzLmxvYy5jbG9uZSh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnR9KSxpPXtsb2M6c307cmV0dXJuIHImJihpLmNvbnZlcnNpb25BY2N1cmFjeT1yKSxIdCh0aGlzLGkpfWFzKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5zaGlmdFRvKGUpLmdldChlKTpOYU59bm9ybWFsaXplKCl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgZT10aGlzLnRvT2JqZWN0KCk7cmV0dXJuIG1jKHRoaXMubWF0cml4LGUpLEh0KHRoaXMse3ZhbHVlczplfSwhMCl9c2hpZnRUbyguLi5lKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdGhpcztlPWUubWFwKG89PkEubm9ybWFsaXplVW5pdChvKSk7bGV0IHQ9e30scj17fSxzPXRoaXMudG9PYmplY3QoKSxpO2ZvcihsZXQgbyBvZiBLdClpZihlLmluZGV4T2Yobyk+PTApe2k9bztsZXQgYT0wO2ZvcihsZXQgbCBpbiByKWErPXRoaXMubWF0cml4W2xdW29dKnJbbF0scltsXT0wO250KHNbb10pJiYoYSs9c1tvXSk7bGV0IHU9TWF0aC50cnVuYyhhKTt0W29dPXUscltvXT0oYSoxZTMtdSoxZTMpLzFlMztmb3IobGV0IGwgaW4gcylLdC5pbmRleE9mKGwpPkt0LmluZGV4T2YobykmJmFhKHRoaXMubWF0cml4LHMsbCx0LG8pfWVsc2UgbnQoc1tvXSkmJihyW29dPXNbb10pO2ZvcihsZXQgbyBpbiByKXJbb10hPT0wJiYodFtpXSs9bz09PWk/cltvXTpyW29dL3RoaXMubWF0cml4W2ldW29dKTtyZXR1cm4gSHQodGhpcyx7dmFsdWVzOnR9LCEwKS5ub3JtYWxpemUoKX1uZWdhdGUoKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCBlPXt9O2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpZVt0XT10aGlzLnZhbHVlc1t0XT09PTA/MDotdGhpcy52YWx1ZXNbdF07cmV0dXJuIEh0KHRoaXMse3ZhbHVlczplfSwhMCl9Z2V0IHllYXJzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy55ZWFyc3x8MDpOYU59Z2V0IHF1YXJ0ZXJzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5xdWFydGVyc3x8MDpOYU59Z2V0IG1vbnRocygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMubW9udGhzfHwwOk5hTn1nZXQgd2Vla3MoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudmFsdWVzLndlZWtzfHwwOk5hTn1nZXQgZGF5cygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMuZGF5c3x8MDpOYU59Z2V0IGhvdXJzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5ob3Vyc3x8MDpOYU59Z2V0IG1pbnV0ZXMoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudmFsdWVzLm1pbnV0ZXN8fDA6TmFOfWdldCBzZWNvbmRzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5zZWNvbmRzfHwwOk5hTn1nZXQgbWlsbGlzZWNvbmRzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5taWxsaXNlY29uZHN8fDA6TmFOfWdldCBpc1ZhbGlkKCl7cmV0dXJuIHRoaXMuaW52YWxpZD09PW51bGx9Z2V0IGludmFsaWRSZWFzb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkP3RoaXMuaW52YWxpZC5yZWFzb246bnVsbH1nZXQgaW52YWxpZEV4cGxhbmF0aW9uKCl7cmV0dXJuIHRoaXMuaW52YWxpZD90aGlzLmludmFsaWQuZXhwbGFuYXRpb246bnVsbH1lcXVhbHMoZSl7aWYoIXRoaXMuaXNWYWxpZHx8IWUuaXNWYWxpZHx8IXRoaXMubG9jLmVxdWFscyhlLmxvYykpcmV0dXJuITE7ZnVuY3Rpb24gdChyLHMpe3JldHVybiByPT09dm9pZCAwfHxyPT09MD9zPT09dm9pZCAwfHxzPT09MDpyPT09c31mb3IobGV0IHIgb2YgS3QpaWYoIXQodGhpcy52YWx1ZXNbcl0sZS52YWx1ZXNbcl0pKXJldHVybiExO3JldHVybiEwfX07dmFyIGNyPVxcXCJJbnZhbGlkIEludGVydmFsXFxcIjtmdW5jdGlvbiBEYyhuLGUpe3JldHVybiFufHwhbi5pc1ZhbGlkP3RlLmludmFsaWQoXFxcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGFydFxcXCIpOiFlfHwhZS5pc1ZhbGlkP3RlLmludmFsaWQoXFxcIm1pc3Npbmcgb3IgaW52YWxpZCBlbmRcXFwiKTplPG4/dGUuaW52YWxpZChcXFwiZW5kIGJlZm9yZSBzdGFydFxcXCIsYFRoZSBlbmQgb2YgYW4gaW50ZXJ2YWwgbXVzdCBiZSBhZnRlciBpdHMgc3RhcnQsIGJ1dCB5b3UgaGFkIHN0YXJ0PSR7bi50b0lTTygpfSBhbmQgZW5kPSR7ZS50b0lTTygpfWApOm51bGx9dmFyIHRlPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucz1lLnN0YXJ0LHRoaXMuZT1lLmVuZCx0aGlzLmludmFsaWQ9ZS5pbnZhbGlkfHxudWxsLHRoaXMuaXNMdXhvbkludGVydmFsPSEwfXN0YXRpYyBpbnZhbGlkKGUsdD1udWxsKXtpZighZSl0aHJvdyBuZXcgRGUoXFxcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgSW50ZXJ2YWwgaXMgaW52YWxpZFxcXCIpO2xldCByPWUgaW5zdGFuY2VvZiB5ZT9lOm5ldyB5ZShlLHQpO2lmKFgudGhyb3dPbkludmFsaWQpdGhyb3cgbmV3IFdyKHIpO3JldHVybiBuZXcgdGUoe2ludmFsaWQ6cn0pfXN0YXRpYyBmcm9tRGF0ZVRpbWVzKGUsdCl7bGV0IHI9Rm4oZSkscz1Gbih0KSxpPURjKHIscyk7cmV0dXJuIGk9PW51bGw/bmV3IHRlKHtzdGFydDpyLGVuZDpzfSk6aX1zdGF0aWMgYWZ0ZXIoZSx0KXtsZXQgcj1BLmZyb21EdXJhdGlvbkxpa2UodCkscz1GbihlKTtyZXR1cm4gdGUuZnJvbURhdGVUaW1lcyhzLHMucGx1cyhyKSl9c3RhdGljIGJlZm9yZShlLHQpe2xldCByPUEuZnJvbUR1cmF0aW9uTGlrZSh0KSxzPUZuKGUpO3JldHVybiB0ZS5mcm9tRGF0ZVRpbWVzKHMubWludXMocikscyl9c3RhdGljIGZyb21JU08oZSx0KXtsZXRbcixzXT0oZXx8XFxcIlxcXCIpLnNwbGl0KFxcXCIvXFxcIiwyKTtpZihyJiZzKXtsZXQgaSxvO3RyeXtpPUIuZnJvbUlTTyhyLHQpLG89aS5pc1ZhbGlkfWNhdGNoKGwpe289ITF9bGV0IGEsdTt0cnl7YT1CLmZyb21JU08ocyx0KSx1PWEuaXNWYWxpZH1jYXRjaChsKXt1PSExfWlmKG8mJnUpcmV0dXJuIHRlLmZyb21EYXRlVGltZXMoaSxhKTtpZihvKXtsZXQgbD1BLmZyb21JU08ocyx0KTtpZihsLmlzVmFsaWQpcmV0dXJuIHRlLmFmdGVyKGksbCl9ZWxzZSBpZih1KXtsZXQgbD1BLmZyb21JU08ocix0KTtpZihsLmlzVmFsaWQpcmV0dXJuIHRlLmJlZm9yZShhLGwpfX1yZXR1cm4gdGUuaW52YWxpZChcXFwidW5wYXJzYWJsZVxcXCIsYHRoZSBpbnB1dCBcXFwiJHtlfVxcXCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCl9c3RhdGljIGlzSW50ZXJ2YWwoZSl7cmV0dXJuIGUmJmUuaXNMdXhvbkludGVydmFsfHwhMX1nZXQgc3RhcnQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuczpudWxsfWdldCBlbmQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuZTpudWxsfWdldCBpc1ZhbGlkKCl7cmV0dXJuIHRoaXMuaW52YWxpZFJlYXNvbj09PW51bGx9Z2V0IGludmFsaWRSZWFzb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkP3RoaXMuaW52YWxpZC5yZWFzb246bnVsbH1nZXQgaW52YWxpZEV4cGxhbmF0aW9uKCl7cmV0dXJuIHRoaXMuaW52YWxpZD90aGlzLmludmFsaWQuZXhwbGFuYXRpb246bnVsbH1sZW5ndGgoZT1cXFwibWlsbGlzZWNvbmRzXFxcIil7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnRvRHVyYXRpb24oZSkuZ2V0KGUpOk5hTn1jb3VudChlPVxcXCJtaWxsaXNlY29uZHNcXFwiKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiBOYU47bGV0IHQ9dGhpcy5zdGFydC5zdGFydE9mKGUpLHI9dGhpcy5lbmQuc3RhcnRPZihlKTtyZXR1cm4gTWF0aC5mbG9vcihyLmRpZmYodCxlKS5nZXQoZSkpKzF9aGFzU2FtZShlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuaXNFbXB0eSgpfHx0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsZSk6ITF9aXNFbXB0eSgpe3JldHVybiB0aGlzLnMudmFsdWVPZigpPT09dGhpcy5lLnZhbHVlT2YoKX1pc0FmdGVyKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5zPmU6ITF9aXNCZWZvcmUoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmU8PWU6ITF9Y29udGFpbnMoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnM8PWUmJnRoaXMuZT5lOiExfXNldCh7c3RhcnQ6ZSxlbmQ6dH09e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/dGUuZnJvbURhdGVUaW1lcyhlfHx0aGlzLnMsdHx8dGhpcy5lKTp0aGlzfXNwbGl0QXQoLi4uZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm5bXTtsZXQgdD1lLm1hcChGbikuZmlsdGVyKG89PnRoaXMuY29udGFpbnMobykpLnNvcnQoKSxyPVtdLHtzfT10aGlzLGk9MDtmb3IoO3M8dGhpcy5lOyl7bGV0IG89dFtpXXx8dGhpcy5lLGE9K28+K3RoaXMuZT90aGlzLmU6bztyLnB1c2godGUuZnJvbURhdGVUaW1lcyhzLGEpKSxzPWEsaSs9MX1yZXR1cm4gcn1zcGxpdEJ5KGUpe2xldCB0PUEuZnJvbUR1cmF0aW9uTGlrZShlKTtpZighdGhpcy5pc1ZhbGlkfHwhdC5pc1ZhbGlkfHx0LmFzKFxcXCJtaWxsaXNlY29uZHNcXFwiKT09PTApcmV0dXJuW107bGV0e3M6cn09dGhpcyxzPTEsaSxvPVtdO2Zvcig7cjx0aGlzLmU7KXtsZXQgYT10aGlzLnN0YXJ0LnBsdXModC5tYXBVbml0cyh1PT51KnMpKTtpPSthPit0aGlzLmU/dGhpcy5lOmEsby5wdXNoKHRlLmZyb21EYXRlVGltZXMocixpKSkscj1pLHMrPTF9cmV0dXJuIG99ZGl2aWRlRXF1YWxseShlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuc3BsaXRCeSh0aGlzLmxlbmd0aCgpL2UpLnNsaWNlKDAsZSk6W119b3ZlcmxhcHMoZSl7cmV0dXJuIHRoaXMuZT5lLnMmJnRoaXMuczxlLmV9YWJ1dHNTdGFydChlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkPyt0aGlzLmU9PStlLnM6ITF9YWJ1dHNFbmQoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD8rZS5lPT0rdGhpcy5zOiExfWVuZ3VsZnMoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnM8PWUucyYmdGhpcy5lPj1lLmU6ITF9ZXF1YWxzKGUpe3JldHVybiF0aGlzLmlzVmFsaWR8fCFlLmlzVmFsaWQ/ITE6dGhpcy5zLmVxdWFscyhlLnMpJiZ0aGlzLmUuZXF1YWxzKGUuZSl9aW50ZXJzZWN0aW9uKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9dGhpcy5zPmUucz90aGlzLnM6ZS5zLHI9dGhpcy5lPGUuZT90aGlzLmU6ZS5lO3JldHVybiB0Pj1yP251bGw6dGUuZnJvbURhdGVUaW1lcyh0LHIpfXVuaW9uKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9dGhpcy5zPGUucz90aGlzLnM6ZS5zLHI9dGhpcy5lPmUuZT90aGlzLmU6ZS5lO3JldHVybiB0ZS5mcm9tRGF0ZVRpbWVzKHQscil9c3RhdGljIG1lcmdlKGUpe2xldFt0LHJdPWUuc29ydCgocyxpKT0+cy5zLWkucykucmVkdWNlKChbcyxpXSxvKT0+aT9pLm92ZXJsYXBzKG8pfHxpLmFidXRzU3RhcnQobyk/W3MsaS51bmlvbihvKV06W3MuY29uY2F0KFtpXSksb106W3Msb10sW1tdLG51bGxdKTtyZXR1cm4gciYmdC5wdXNoKHIpLHR9c3RhdGljIHhvcihlKXtsZXQgdD1udWxsLHI9MCxzPVtdLGk9ZS5tYXAodT0+W3t0aW1lOnUucyx0eXBlOlxcXCJzXFxcIn0se3RpbWU6dS5lLHR5cGU6XFxcImVcXFwifV0pLG89QXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5pKSxhPW8uc29ydCgodSxsKT0+dS50aW1lLWwudGltZSk7Zm9yKGxldCB1IG9mIGEpcis9dS50eXBlPT09XFxcInNcXFwiPzE6LTEscj09PTE/dD11LnRpbWU6KHQmJit0IT0rdS50aW1lJiZzLnB1c2godGUuZnJvbURhdGVUaW1lcyh0LHUudGltZSkpLHQ9bnVsbCk7cmV0dXJuIHRlLm1lcmdlKHMpfWRpZmZlcmVuY2UoLi4uZSl7cmV0dXJuIHRlLnhvcihbdGhpc10uY29uY2F0KGUpKS5tYXAodD0+dGhpcy5pbnRlcnNlY3Rpb24odCkpLmZpbHRlcih0PT50JiYhdC5pc0VtcHR5KCkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9gWyR7dGhpcy5zLnRvSVNPKCl9IFxcXFx1MjAxMyAke3RoaXMuZS50b0lTTygpfSlgOmNyfXRvSVNPKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/YCR7dGhpcy5zLnRvSVNPKGUpfS8ke3RoaXMuZS50b0lTTyhlKX1gOmNyfXRvSVNPRGF0ZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/YCR7dGhpcy5zLnRvSVNPRGF0ZSgpfS8ke3RoaXMuZS50b0lTT0RhdGUoKX1gOmNyfXRvSVNPVGltZShlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2Ake3RoaXMucy50b0lTT1RpbWUoZSl9LyR7dGhpcy5lLnRvSVNPVGltZShlKX1gOmNyfXRvRm9ybWF0KGUse3NlcGFyYXRvcjp0PVxcXCIgXFxcXHUyMDEzIFxcXCJ9PXt9KXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2Ake3RoaXMucy50b0Zvcm1hdChlKX0ke3R9JHt0aGlzLmUudG9Gb3JtYXQoZSl9YDpjcn10b0R1cmF0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmUuZGlmZih0aGlzLnMsZSx0KTpBLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKX1tYXBFbmRwb2ludHMoZSl7cmV0dXJuIHRlLmZyb21EYXRlVGltZXMoZSh0aGlzLnMpLGUodGhpcy5lKSl9fTt2YXIgeXQ9Y2xhc3N7c3RhdGljIGhhc0RTVChlPVguZGVmYXVsdFpvbmUpe2xldCB0PUIubm93KCkuc2V0Wm9uZShlKS5zZXQoe21vbnRoOjEyfSk7cmV0dXJuIWUuaXNVbml2ZXJzYWwmJnQub2Zmc2V0IT09dC5zZXQoe21vbnRoOjZ9KS5vZmZzZXR9c3RhdGljIGlzVmFsaWRJQU5BWm9uZShlKXtyZXR1cm4gaGUuaXNWYWxpZFpvbmUoZSl9c3RhdGljIG5vcm1hbGl6ZVpvbmUoZSl7cmV0dXJuIFdlKGUsWC5kZWZhdWx0Wm9uZSl9c3RhdGljIG1vbnRocyhlPVxcXCJsb25nXFxcIix7bG9jYWxlOnQ9bnVsbCxudW1iZXJpbmdTeXN0ZW06cj1udWxsLGxvY09iajpzPW51bGwsb3V0cHV0Q2FsZW5kYXI6aT1cXFwiZ3JlZ29yeVxcXCJ9PXt9KXtyZXR1cm4oc3x8Wi5jcmVhdGUodCxyLGkpKS5tb250aHMoZSl9c3RhdGljIG1vbnRoc0Zvcm1hdChlPVxcXCJsb25nXFxcIix7bG9jYWxlOnQ9bnVsbCxudW1iZXJpbmdTeXN0ZW06cj1udWxsLGxvY09iajpzPW51bGwsb3V0cHV0Q2FsZW5kYXI6aT1cXFwiZ3JlZ29yeVxcXCJ9PXt9KXtyZXR1cm4oc3x8Wi5jcmVhdGUodCxyLGkpKS5tb250aHMoZSwhMCl9c3RhdGljIHdlZWtkYXlzKGU9XFxcImxvbmdcXFwiLHtsb2NhbGU6dD1udWxsLG51bWJlcmluZ1N5c3RlbTpyPW51bGwsbG9jT2JqOnM9bnVsbH09e30pe3JldHVybihzfHxaLmNyZWF0ZSh0LHIsbnVsbCkpLndlZWtkYXlzKGUpfXN0YXRpYyB3ZWVrZGF5c0Zvcm1hdChlPVxcXCJsb25nXFxcIix7bG9jYWxlOnQ9bnVsbCxudW1iZXJpbmdTeXN0ZW06cj1udWxsLGxvY09iajpzPW51bGx9PXt9KXtyZXR1cm4oc3x8Wi5jcmVhdGUodCxyLG51bGwpKS53ZWVrZGF5cyhlLCEwKX1zdGF0aWMgbWVyaWRpZW1zKHtsb2NhbGU6ZT1udWxsfT17fSl7cmV0dXJuIFouY3JlYXRlKGUpLm1lcmlkaWVtcygpfXN0YXRpYyBlcmFzKGU9XFxcInNob3J0XFxcIix7bG9jYWxlOnQ9bnVsbH09e30pe3JldHVybiBaLmNyZWF0ZSh0LG51bGwsXFxcImdyZWdvcnlcXFwiKS5lcmFzKGUpfXN0YXRpYyBmZWF0dXJlcygpe3JldHVybntyZWxhdGl2ZTpLcigpfX19O2Z1bmN0aW9uIHVhKG4sZSl7bGV0IHQ9cz0+cy50b1VUQygwLHtrZWVwTG9jYWxUaW1lOiEwfSkuc3RhcnRPZihcXFwiZGF5XFxcIikudmFsdWVPZigpLHI9dChlKS10KG4pO3JldHVybiBNYXRoLmZsb29yKEEuZnJvbU1pbGxpcyhyKS5hcyhcXFwiZGF5c1xcXCIpKX1mdW5jdGlvbiB5YyhuLGUsdCl7bGV0IHI9W1tcXFwieWVhcnNcXFwiLChhLHUpPT51LnllYXItYS55ZWFyXSxbXFxcInF1YXJ0ZXJzXFxcIiwoYSx1KT0+dS5xdWFydGVyLWEucXVhcnRlcl0sW1xcXCJtb250aHNcXFwiLChhLHUpPT51Lm1vbnRoLWEubW9udGgrKHUueWVhci1hLnllYXIpKjEyXSxbXFxcIndlZWtzXFxcIiwoYSx1KT0+e2xldCBsPXVhKGEsdSk7cmV0dXJuKGwtbCU3KS83fV0sW1xcXCJkYXlzXFxcIix1YV1dLHM9e30saSxvO2ZvcihsZXRbYSx1XW9mIHIpaWYodC5pbmRleE9mKGEpPj0wKXtpPWE7bGV0IGw9dShuLGUpO289bi5wbHVzKHtbYV06bH0pLG8+ZT8obj1uLnBsdXMoe1thXTpsLTF9KSxsLT0xKTpuPW8sc1thXT1sfXJldHVybltuLHMsbyxpXX1mdW5jdGlvbiBsYShuLGUsdCxyKXtsZXRbcyxpLG8sYV09eWMobixlLHQpLHU9ZS1zLGw9dC5maWx0ZXIoaD0+W1xcXCJob3Vyc1xcXCIsXFxcIm1pbnV0ZXNcXFwiLFxcXCJzZWNvbmRzXFxcIixcXFwibWlsbGlzZWNvbmRzXFxcIl0uaW5kZXhPZihoKT49MCk7bC5sZW5ndGg9PT0wJiYobzxlJiYobz1zLnBsdXMoe1thXToxfSkpLG8hPT1zJiYoaVthXT0oaVthXXx8MCkrdS8oby1zKSkpO2xldCBkPUEuZnJvbU9iamVjdChpLHIpO3JldHVybiBsLmxlbmd0aD4wP0EuZnJvbU1pbGxpcyh1LHIpLnNoaWZ0VG8oLi4ubCkucGx1cyhkKTpkfXZhciBiaT17YXJhYjpcXFwiW1xcXFx1MDY2MC1cXFxcdTA2NjldXFxcIixhcmFiZXh0OlxcXCJbXFxcXHUwNkYwLVxcXFx1MDZGOV1cXFwiLGJhbGk6XFxcIltcXFxcdTFCNTAtXFxcXHUxQjU5XVxcXCIsYmVuZzpcXFwiW1xcXFx1MDlFNi1cXFxcdTA5RUZdXFxcIixkZXZhOlxcXCJbXFxcXHUwOTY2LVxcXFx1MDk2Rl1cXFwiLGZ1bGx3aWRlOlxcXCJbXFxcXHVGRjEwLVxcXFx1RkYxOV1cXFwiLGd1anI6XFxcIltcXFxcdTBBRTYtXFxcXHUwQUVGXVxcXCIsaGFuaWRlYzpcXFwiW1xcXFx1MzAwN3xcXFxcdTRFMDB8XFxcXHU0RThDfFxcXFx1NEUwOXxcXFxcdTU2REJ8XFxcXHU0RTk0fFxcXFx1NTE2RHxcXFxcdTRFMDN8XFxcXHU1MTZCfFxcXFx1NEU1RF1cXFwiLGtobXI6XFxcIltcXFxcdTE3RTAtXFxcXHUxN0U5XVxcXCIsa25kYTpcXFwiW1xcXFx1MENFNi1cXFxcdTBDRUZdXFxcIixsYW9vOlxcXCJbXFxcXHUwRUQwLVxcXFx1MEVEOV1cXFwiLGxpbWI6XFxcIltcXFxcdTE5NDYtXFxcXHUxOTRGXVxcXCIsbWx5bTpcXFwiW1xcXFx1MEQ2Ni1cXFxcdTBENkZdXFxcIixtb25nOlxcXCJbXFxcXHUxODEwLVxcXFx1MTgxOV1cXFwiLG15bXI6XFxcIltcXFxcdTEwNDAtXFxcXHUxMDQ5XVxcXCIsb3J5YTpcXFwiW1xcXFx1MEI2Ni1cXFxcdTBCNkZdXFxcIix0YW1sZGVjOlxcXCJbXFxcXHUwQkU2LVxcXFx1MEJFRl1cXFwiLHRlbHU6XFxcIltcXFxcdTBDNjYtXFxcXHUwQzZGXVxcXCIsdGhhaTpcXFwiW1xcXFx1MEU1MC1cXFxcdTBFNTldXFxcIix0aWJ0OlxcXCJbXFxcXHUwRjIwLVxcXFx1MEYyOV1cXFwiLGxhdG46XFxcIlxcXFxcXFxcZFxcXCJ9LGNhPXthcmFiOlsxNjMyLDE2NDFdLGFyYWJleHQ6WzE3NzYsMTc4NV0sYmFsaTpbNjk5Miw3MDAxXSxiZW5nOlsyNTM0LDI1NDNdLGRldmE6WzI0MDYsMjQxNV0sZnVsbHdpZGU6WzY1Mjk2LDY1MzAzXSxndWpyOlsyNzkwLDI3OTldLGtobXI6WzYxMTIsNjEyMV0sa25kYTpbMzMwMiwzMzExXSxsYW9vOlszNzkyLDM4MDFdLGxpbWI6WzY0NzAsNjQ3OV0sbWx5bTpbMzQzMCwzNDM5XSxtb25nOls2MTYwLDYxNjldLG15bXI6WzQxNjAsNDE2OV0sb3J5YTpbMjkxOCwyOTI3XSx0YW1sZGVjOlszMDQ2LDMwNTVdLHRlbHU6WzMxNzQsMzE4M10sdGhhaTpbMzY2NCwzNjczXSx0aWJ0OlszODcyLDM4ODFdfSxnYz1iaS5oYW5pZGVjLnJlcGxhY2UoL1tcXFxcW3xcXFxcXV0vZyxcXFwiXFxcIikuc3BsaXQoXFxcIlxcXCIpO2Z1bmN0aW9uIGZhKG4pe2xldCBlPXBhcnNlSW50KG4sMTApO2lmKGlzTmFOKGUpKXtlPVxcXCJcXFwiO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtsZXQgcj1uLmNoYXJDb2RlQXQodCk7aWYoblt0XS5zZWFyY2goYmkuaGFuaWRlYykhPT0tMSllKz1nYy5pbmRleE9mKG5bdF0pO2Vsc2UgZm9yKGxldCBzIGluIGNhKXtsZXRbaSxvXT1jYVtzXTtyPj1pJiZyPD1vJiYoZSs9ci1pKX19cmV0dXJuIHBhcnNlSW50KGUsMTApfWVsc2UgcmV0dXJuIGV9ZnVuY3Rpb24gX2Uoe251bWJlcmluZ1N5c3RlbTpufSxlPVxcXCJcXFwiKXtyZXR1cm4gbmV3IFJlZ0V4cChgJHtiaVtufHxcXFwibGF0blxcXCJdfSR7ZX1gKX12YXIgYmM9XFxcIm1pc3NpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzIHN1cHBvcnRcXFwiO2Z1bmN0aW9uIFkobixlPXQ9PnQpe3JldHVybntyZWdleDpuLGRlc2VyOihbdF0pPT5lKGZhKHQpKX19dmFyIEVjPVN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSxwYT1gWyAke0VjfV1gLG1hPW5ldyBSZWdFeHAocGEsXFxcImdcXFwiKTtmdW5jdGlvbiBGYyhuKXtyZXR1cm4gbi5yZXBsYWNlKC9cXFxcLi9nLFxcXCJcXFxcXFxcXC4/XFxcIikucmVwbGFjZShtYSxwYSl9ZnVuY3Rpb24gZGEobil7cmV0dXJuIG4ucmVwbGFjZSgvXFxcXC4vZyxcXFwiXFxcIikucmVwbGFjZShtYSxcXFwiIFxcXCIpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gSGUobixlKXtyZXR1cm4gbj09PW51bGw/bnVsbDp7cmVnZXg6UmVnRXhwKG4ubWFwKEZjKS5qb2luKFxcXCJ8XFxcIikpLGRlc2VyOihbdF0pPT5uLmZpbmRJbmRleChyPT5kYSh0KT09PWRhKHIpKStlfX1mdW5jdGlvbiBoYShuLGUpe3JldHVybntyZWdleDpuLGRlc2VyOihbLHQscl0pPT5XdCh0LHIpLGdyb3VwczplfX1mdW5jdGlvbiBFaShuKXtyZXR1cm57cmVnZXg6bixkZXNlcjooW2VdKT0+ZX19ZnVuY3Rpb24gd2Mobil7cmV0dXJuIG4ucmVwbGFjZSgvW1xcXFwtXFxcXFtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXFxcXF4kfCNcXFxcc10vZyxcXFwiXFxcXFxcXFwkJlxcXCIpfWZ1bmN0aW9uIFRjKG4sZSl7bGV0IHQ9X2UoZSkscj1fZShlLFxcXCJ7Mn1cXFwiKSxzPV9lKGUsXFxcInszfVxcXCIpLGk9X2UoZSxcXFwiezR9XFxcIiksbz1fZShlLFxcXCJ7Nn1cXFwiKSxhPV9lKGUsXFxcInsxLDJ9XFxcIiksdT1fZShlLFxcXCJ7MSwzfVxcXCIpLGw9X2UoZSxcXFwiezEsNn1cXFwiKSxkPV9lKGUsXFxcInsxLDl9XFxcIiksaD1fZShlLFxcXCJ7Miw0fVxcXCIpLHA9X2UoZSxcXFwiezQsNn1cXFwiKSxmPXk9Pih7cmVnZXg6UmVnRXhwKHdjKHkudmFsKSksZGVzZXI6KFtTXSk9PlMsbGl0ZXJhbDohMH0pLGc9KHk9PntpZihuLmxpdGVyYWwpcmV0dXJuIGYoeSk7c3dpdGNoKHkudmFsKXtjYXNlXFxcIkdcXFwiOnJldHVybiBIZShlLmVyYXMoXFxcInNob3J0XFxcIiwhMSksMCk7Y2FzZVxcXCJHR1xcXCI6cmV0dXJuIEhlKGUuZXJhcyhcXFwibG9uZ1xcXCIsITEpLDApO2Nhc2VcXFwieVxcXCI6cmV0dXJuIFkobCk7Y2FzZVxcXCJ5eVxcXCI6cmV0dXJuIFkoaCxpcik7Y2FzZVxcXCJ5eXl5XFxcIjpyZXR1cm4gWShpKTtjYXNlXFxcInl5eXl5XFxcIjpyZXR1cm4gWShwKTtjYXNlXFxcInl5eXl5eVxcXCI6cmV0dXJuIFkobyk7Y2FzZVxcXCJNXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcIk1NXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIk1NTVxcXCI6cmV0dXJuIEhlKGUubW9udGhzKFxcXCJzaG9ydFxcXCIsITAsITEpLDEpO2Nhc2VcXFwiTU1NTVxcXCI6cmV0dXJuIEhlKGUubW9udGhzKFxcXCJsb25nXFxcIiwhMCwhMSksMSk7Y2FzZVxcXCJMXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcIkxMXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIkxMTFxcXCI6cmV0dXJuIEhlKGUubW9udGhzKFxcXCJzaG9ydFxcXCIsITEsITEpLDEpO2Nhc2VcXFwiTExMTFxcXCI6cmV0dXJuIEhlKGUubW9udGhzKFxcXCJsb25nXFxcIiwhMSwhMSksMSk7Y2FzZVxcXCJkXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcImRkXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIm9cXFwiOnJldHVybiBZKHUpO2Nhc2VcXFwib29vXFxcIjpyZXR1cm4gWShzKTtjYXNlXFxcIkhIXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIkhcXFwiOnJldHVybiBZKGEpO2Nhc2VcXFwiaGhcXFwiOnJldHVybiBZKHIpO2Nhc2VcXFwiaFxcXCI6cmV0dXJuIFkoYSk7Y2FzZVxcXCJtbVxcXCI6cmV0dXJuIFkocik7Y2FzZVxcXCJtXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcInFcXFwiOnJldHVybiBZKGEpO2Nhc2VcXFwicXFcXFwiOnJldHVybiBZKHIpO2Nhc2VcXFwic1xcXCI6cmV0dXJuIFkoYSk7Y2FzZVxcXCJzc1xcXCI6cmV0dXJuIFkocik7Y2FzZVxcXCJTXFxcIjpyZXR1cm4gWSh1KTtjYXNlXFxcIlNTU1xcXCI6cmV0dXJuIFkocyk7Y2FzZVxcXCJ1XFxcIjpyZXR1cm4gRWkoZCk7Y2FzZVxcXCJ1dVxcXCI6cmV0dXJuIEVpKGEpO2Nhc2VcXFwidXV1XFxcIjpyZXR1cm4gWSh0KTtjYXNlXFxcImFcXFwiOnJldHVybiBIZShlLm1lcmlkaWVtcygpLDApO2Nhc2VcXFwia2tra1xcXCI6cmV0dXJuIFkoaSk7Y2FzZVxcXCJra1xcXCI6cmV0dXJuIFkoaCxpcik7Y2FzZVxcXCJXXFxcIjpyZXR1cm4gWShhKTtjYXNlXFxcIldXXFxcIjpyZXR1cm4gWShyKTtjYXNlXFxcIkVcXFwiOmNhc2VcXFwiY1xcXCI6cmV0dXJuIFkodCk7Y2FzZVxcXCJFRUVcXFwiOnJldHVybiBIZShlLndlZWtkYXlzKFxcXCJzaG9ydFxcXCIsITEsITEpLDEpO2Nhc2VcXFwiRUVFRVxcXCI6cmV0dXJuIEhlKGUud2Vla2RheXMoXFxcImxvbmdcXFwiLCExLCExKSwxKTtjYXNlXFxcImNjY1xcXCI6cmV0dXJuIEhlKGUud2Vla2RheXMoXFxcInNob3J0XFxcIiwhMCwhMSksMSk7Y2FzZVxcXCJjY2NjXFxcIjpyZXR1cm4gSGUoZS53ZWVrZGF5cyhcXFwibG9uZ1xcXCIsITAsITEpLDEpO2Nhc2VcXFwiWlxcXCI6Y2FzZVxcXCJaWlxcXCI6cmV0dXJuIGhhKG5ldyBSZWdFeHAoYChbKy1dJHthLnNvdXJjZX0pKD86Oigke3Iuc291cmNlfSkpP2ApLDIpO2Nhc2VcXFwiWlpaXFxcIjpyZXR1cm4gaGEobmV3IFJlZ0V4cChgKFsrLV0ke2Euc291cmNlfSkoJHtyLnNvdXJjZX0pP2ApLDIpO2Nhc2VcXFwielxcXCI6cmV0dXJuIEVpKC9bYS16XystL117MSwyNTZ9Py9pKTtkZWZhdWx0OnJldHVybiBmKHkpfX0pKG4pfHx7aW52YWxpZFJlYXNvbjpiY307cmV0dXJuIGcudG9rZW49bixnfXZhciBTYz17eWVhcjp7XFxcIjItZGlnaXRcXFwiOlxcXCJ5eVxcXCIsbnVtZXJpYzpcXFwieXl5eXlcXFwifSxtb250aDp7bnVtZXJpYzpcXFwiTVxcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJNTVxcXCIsc2hvcnQ6XFxcIk1NTVxcXCIsbG9uZzpcXFwiTU1NTVxcXCJ9LGRheTp7bnVtZXJpYzpcXFwiZFxcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJkZFxcXCJ9LHdlZWtkYXk6e3Nob3J0OlxcXCJFRUVcXFwiLGxvbmc6XFxcIkVFRUVcXFwifSxkYXlwZXJpb2Q6XFxcImFcXFwiLGRheVBlcmlvZDpcXFwiYVxcXCIsaG91cjp7bnVtZXJpYzpcXFwiaFxcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJoaFxcXCJ9LG1pbnV0ZTp7bnVtZXJpYzpcXFwibVxcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJtbVxcXCJ9LHNlY29uZDp7bnVtZXJpYzpcXFwic1xcXCIsXFxcIjItZGlnaXRcXFwiOlxcXCJzc1xcXCJ9fTtmdW5jdGlvbiBrYyhuLGUsdCl7bGV0e3R5cGU6cix2YWx1ZTpzfT1uO2lmKHI9PT1cXFwibGl0ZXJhbFxcXCIpcmV0dXJue2xpdGVyYWw6ITAsdmFsOnN9O2xldCBpPXRbcl0sbz1TY1tyXTtpZih0eXBlb2Ygbz09XFxcIm9iamVjdFxcXCImJihvPW9baV0pLG8pcmV0dXJue2xpdGVyYWw6ITEsdmFsOm99fWZ1bmN0aW9uIENjKG4pe3JldHVybltgXiR7bi5tYXAodD0+dC5yZWdleCkucmVkdWNlKCh0LHIpPT5gJHt0fSgke3Iuc291cmNlfSlgLFxcXCJcXFwiKX0kYCxuXX1mdW5jdGlvbiB4YyhuLGUsdCl7bGV0IHI9bi5tYXRjaChlKTtpZihyKXtsZXQgcz17fSxpPTE7Zm9yKGxldCBvIGluIHQpaWYoa3QodCxvKSl7bGV0IGE9dFtvXSx1PWEuZ3JvdXBzP2EuZ3JvdXBzKzE6MTshYS5saXRlcmFsJiZhLnRva2VuJiYoc1thLnRva2VuLnZhbFswXV09YS5kZXNlcihyLnNsaWNlKGksaSt1KSkpLGkrPXV9cmV0dXJuW3Isc119ZWxzZSByZXR1cm5bcix7fV19ZnVuY3Rpb24gT2Mobil7bGV0IGU9aT0+e3N3aXRjaChpKXtjYXNlXFxcIlNcXFwiOnJldHVyblxcXCJtaWxsaXNlY29uZFxcXCI7Y2FzZVxcXCJzXFxcIjpyZXR1cm5cXFwic2Vjb25kXFxcIjtjYXNlXFxcIm1cXFwiOnJldHVyblxcXCJtaW51dGVcXFwiO2Nhc2VcXFwiaFxcXCI6Y2FzZVxcXCJIXFxcIjpyZXR1cm5cXFwiaG91clxcXCI7Y2FzZVxcXCJkXFxcIjpyZXR1cm5cXFwiZGF5XFxcIjtjYXNlXFxcIm9cXFwiOnJldHVyblxcXCJvcmRpbmFsXFxcIjtjYXNlXFxcIkxcXFwiOmNhc2VcXFwiTVxcXCI6cmV0dXJuXFxcIm1vbnRoXFxcIjtjYXNlXFxcInlcXFwiOnJldHVyblxcXCJ5ZWFyXFxcIjtjYXNlXFxcIkVcXFwiOmNhc2VcXFwiY1xcXCI6cmV0dXJuXFxcIndlZWtkYXlcXFwiO2Nhc2VcXFwiV1xcXCI6cmV0dXJuXFxcIndlZWtOdW1iZXJcXFwiO2Nhc2VcXFwia1xcXCI6cmV0dXJuXFxcIndlZWtZZWFyXFxcIjtjYXNlXFxcInFcXFwiOnJldHVyblxcXCJxdWFydGVyXFxcIjtkZWZhdWx0OnJldHVybiBudWxsfX0sdD1udWxsLHI7cmV0dXJuIFUobi56KXx8KHQ9aGUuY3JlYXRlKG4ueikpLFUobi5aKXx8KHR8fCh0PW5ldyBvZShuLlopKSxyPW4uWiksVShuLnEpfHwobi5NPShuLnEtMSkqMysxKSxVKG4uaCl8fChuLmg8MTImJm4uYT09PTE/bi5oKz0xMjpuLmg9PT0xMiYmbi5hPT09MCYmKG4uaD0wKSksbi5HPT09MCYmbi55JiYobi55PS1uLnkpLFUobi51KXx8KG4uUz1ycihuLnUpKSxbT2JqZWN0LmtleXMobikucmVkdWNlKChpLG8pPT57bGV0IGE9ZShvKTtyZXR1cm4gYSYmKGlbYV09bltvXSksaX0se30pLHQscl19dmFyIEZpPW51bGw7ZnVuY3Rpb24gdmMoKXtyZXR1cm4gRml8fChGaT1CLmZyb21NaWxsaXMoMTU1NTU1NTU1NTU1NSkpLEZpfWZ1bmN0aW9uIEljKG4sZSl7aWYobi5saXRlcmFsKXJldHVybiBuO2xldCB0PWZlLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMobi52YWwpO2lmKCF0KXJldHVybiBuO2xldCBpPWZlLmNyZWF0ZShlLHQpLmZvcm1hdERhdGVUaW1lUGFydHModmMoKSkubWFwKG89PmtjKG8sZSx0KSk7cmV0dXJuIGkuaW5jbHVkZXModm9pZCAwKT9uOml9ZnVuY3Rpb24gTmMobixlKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5uLm1hcCh0PT5JYyh0LGUpKSl9ZnVuY3Rpb24gd2kobixlLHQpe2xldCByPU5jKGZlLnBhcnNlRm9ybWF0KHQpLG4pLHM9ci5tYXAobz0+VGMobyxuKSksaT1zLmZpbmQobz0+by5pbnZhbGlkUmVhc29uKTtpZihpKXJldHVybntpbnB1dDplLHRva2VuczpyLGludmFsaWRSZWFzb246aS5pbnZhbGlkUmVhc29ufTt7bGV0W28sYV09Q2MocyksdT1SZWdFeHAobyxcXFwiaVxcXCIpLFtsLGRdPXhjKGUsdSxhKSxbaCxwLGZdPWQ/T2MoZCk6W251bGwsbnVsbCx2b2lkIDBdO2lmKGt0KGQsXFxcImFcXFwiKSYma3QoZCxcXFwiSFxcXCIpKXRocm93IG5ldyBtdChcXFwiQ2FuJ3QgaW5jbHVkZSBtZXJpZGllbSB3aGVuIHNwZWNpZnlpbmcgMjQtaG91ciBmb3JtYXRcXFwiKTtyZXR1cm57aW5wdXQ6ZSx0b2tlbnM6cixyZWdleDp1LHJhd01hdGNoZXM6bCxtYXRjaGVzOmQscmVzdWx0Omgsem9uZTpwLHNwZWNpZmljT2Zmc2V0OmZ9fX1mdW5jdGlvbiBEYShuLGUsdCl7bGV0e3Jlc3VsdDpyLHpvbmU6cyxzcGVjaWZpY09mZnNldDppLGludmFsaWRSZWFzb246b309d2kobixlLHQpO3JldHVybltyLHMsaSxvXX12YXIgeWE9WzAsMzEsNTksOTAsMTIwLDE1MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNF0sZ2E9WzAsMzEsNjAsOTEsMTIxLDE1MiwxODIsMjEzLDI0NCwyNzQsMzA1LDMzNV07ZnVuY3Rpb24gQmUobixlKXtyZXR1cm4gbmV3IHllKFxcXCJ1bml0IG91dCBvZiByYW5nZVxcXCIsYHlvdSBzcGVjaWZpZWQgJHtlfSAob2YgdHlwZSAke3R5cGVvZiBlfSkgYXMgYSAke259LCB3aGljaCBpcyBpbnZhbGlkYCl9ZnVuY3Rpb24gYmEobixlLHQpe2xldCByPW5ldyBEYXRlKERhdGUuVVRDKG4sZS0xLHQpKTtuPDEwMCYmbj49MCYmci5zZXRVVENGdWxsWWVhcihyLmdldFVUQ0Z1bGxZZWFyKCktMTkwMCk7bGV0IHM9ci5nZXRVVENEYXkoKTtyZXR1cm4gcz09PTA/NzpzfWZ1bmN0aW9uIEVhKG4sZSx0KXtyZXR1cm4gdCsocXQobik/Z2E6eWEpW2UtMV19ZnVuY3Rpb24gRmEobixlKXtsZXQgdD1xdChuKT9nYTp5YSxyPXQuZmluZEluZGV4KGk9Pmk8ZSkscz1lLXRbcl07cmV0dXJue21vbnRoOnIrMSxkYXk6c319ZnVuY3Rpb24gWnIobil7bGV0e3llYXI6ZSxtb250aDp0LGRheTpyfT1uLHM9RWEoZSx0LHIpLGk9YmEoZSx0LHIpLG89TWF0aC5mbG9vcigocy1pKzEwKS83KSxhO3JldHVybiBvPDE/KGE9ZS0xLG89ZG4oYSkpOm8+ZG4oZSk/KGE9ZSsxLG89MSk6YT1lLCQoe3dlZWtZZWFyOmEsd2Vla051bWJlcjpvLHdlZWtkYXk6aX0sb3IobikpfWZ1bmN0aW9uIFRpKG4pe2xldHt3ZWVrWWVhcjplLHdlZWtOdW1iZXI6dCx3ZWVrZGF5OnJ9PW4scz1iYShlLDEsNCksaT1VdChlKSxvPXQqNytyLXMtMyxhO288MT8oYT1lLTEsbys9VXQoYSkpOm8+aT8oYT1lKzEsby09VXQoZSkpOmE9ZTtsZXR7bW9udGg6dSxkYXk6bH09RmEoYSxvKTtyZXR1cm4gJCh7eWVhcjphLG1vbnRoOnUsZGF5Omx9LG9yKG4pKX1mdW5jdGlvbiBRcihuKXtsZXR7eWVhcjplLG1vbnRoOnQsZGF5OnJ9PW4scz1FYShlLHQscik7cmV0dXJuICQoe3llYXI6ZSxvcmRpbmFsOnN9LG9yKG4pKX1mdW5jdGlvbiBTaShuKXtsZXR7eWVhcjplLG9yZGluYWw6dH09bix7bW9udGg6cixkYXk6c309RmEoZSx0KTtyZXR1cm4gJCh7eWVhcjplLG1vbnRoOnIsZGF5OnN9LG9yKG4pKX1mdW5jdGlvbiB3YShuKXtsZXQgZT1ucihuLndlZWtZZWFyKSx0PXJ0KG4ud2Vla051bWJlciwxLGRuKG4ud2Vla1llYXIpKSxyPXJ0KG4ud2Vla2RheSwxLDcpO3JldHVybiBlP3Q/cj8hMTpCZShcXFwid2Vla2RheVxcXCIsbi53ZWVrZGF5KTpCZShcXFwid2Vla1xcXCIsbi53ZWVrKTpCZShcXFwid2Vla1llYXJcXFwiLG4ud2Vla1llYXIpfWZ1bmN0aW9uIFRhKG4pe2xldCBlPW5yKG4ueWVhciksdD1ydChuLm9yZGluYWwsMSxVdChuLnllYXIpKTtyZXR1cm4gZT90PyExOkJlKFxcXCJvcmRpbmFsXFxcIixuLm9yZGluYWwpOkJlKFxcXCJ5ZWFyXFxcIixuLnllYXIpfWZ1bmN0aW9uIGtpKG4pe2xldCBlPW5yKG4ueWVhciksdD1ydChuLm1vbnRoLDEsMTIpLHI9cnQobi5kYXksMSxmbihuLnllYXIsbi5tb250aCkpO3JldHVybiBlP3Q/cj8hMTpCZShcXFwiZGF5XFxcIixuLmRheSk6QmUoXFxcIm1vbnRoXFxcIixuLm1vbnRoKTpCZShcXFwieWVhclxcXCIsbi55ZWFyKX1mdW5jdGlvbiBDaShuKXtsZXR7aG91cjplLG1pbnV0ZTp0LHNlY29uZDpyLG1pbGxpc2Vjb25kOnN9PW4saT1ydChlLDAsMjMpfHxlPT09MjQmJnQ9PT0wJiZyPT09MCYmcz09PTAsbz1ydCh0LDAsNTkpLGE9cnQociwwLDU5KSx1PXJ0KHMsMCw5OTkpO3JldHVybiBpP28/YT91PyExOkJlKFxcXCJtaWxsaXNlY29uZFxcXCIscyk6QmUoXFxcInNlY29uZFxcXCIscik6QmUoXFxcIm1pbnV0ZVxcXCIsdCk6QmUoXFxcImhvdXJcXFwiLGUpfXZhciB4aT1cXFwiSW52YWxpZCBEYXRlVGltZVxcXCIsU2E9ODY0ZTEzO2Z1bmN0aW9uIFhyKG4pe3JldHVybiBuZXcgeWUoXFxcInVuc3VwcG9ydGVkIHpvbmVcXFwiLGB0aGUgem9uZSBcXFwiJHtuLm5hbWV9XFxcIiBpcyBub3Qgc3VwcG9ydGVkYCl9ZnVuY3Rpb24gT2kobil7cmV0dXJuIG4ud2Vla0RhdGE9PT1udWxsJiYobi53ZWVrRGF0YT1acihuLmMpKSxuLndlZWtEYXRhfWZ1bmN0aW9uIGZyKG4sZSl7bGV0IHQ9e3RzOm4udHMsem9uZTpuLnpvbmUsYzpuLmMsbzpuLm8sbG9jOm4ubG9jLGludmFsaWQ6bi5pbnZhbGlkfTtyZXR1cm4gbmV3IEIoRmUoJCgkKHt9LHQpLGUpLHtvbGQ6dH0pKX1mdW5jdGlvbiBMYShuLGUsdCl7bGV0IHI9bi1lKjYwKjFlMyxzPXQub2Zmc2V0KHIpO2lmKGU9PT1zKXJldHVybltyLGVdO3ItPShzLWUpKjYwKjFlMztsZXQgaT10Lm9mZnNldChyKTtyZXR1cm4gcz09PWk/W3Isc106W24tTWF0aC5taW4ocyxpKSo2MCoxZTMsTWF0aC5tYXgocyxpKV19ZnVuY3Rpb24ga2EobixlKXtuKz1lKjYwKjFlMztsZXQgdD1uZXcgRGF0ZShuKTtyZXR1cm57eWVhcjp0LmdldFVUQ0Z1bGxZZWFyKCksbW9udGg6dC5nZXRVVENNb250aCgpKzEsZGF5OnQuZ2V0VVRDRGF0ZSgpLGhvdXI6dC5nZXRVVENIb3VycygpLG1pbnV0ZTp0LmdldFVUQ01pbnV0ZXMoKSxzZWNvbmQ6dC5nZXRVVENTZWNvbmRzKCksbWlsbGlzZWNvbmQ6dC5nZXRVVENNaWxsaXNlY29uZHMoKX19ZnVuY3Rpb24gdHMobixlLHQpe3JldHVybiBMYShzcihuKSxlLHQpfWZ1bmN0aW9uIENhKG4sZSl7bGV0IHQ9bi5vLHI9bi5jLnllYXIrTWF0aC50cnVuYyhlLnllYXJzKSxzPW4uYy5tb250aCtNYXRoLnRydW5jKGUubW9udGhzKStNYXRoLnRydW5jKGUucXVhcnRlcnMpKjMsaT1GZSgkKHt9LG4uYykse3llYXI6cixtb250aDpzLGRheTpNYXRoLm1pbihuLmMuZGF5LGZuKHIscykpK01hdGgudHJ1bmMoZS5kYXlzKStNYXRoLnRydW5jKGUud2Vla3MpKjd9KSxvPUEuZnJvbU9iamVjdCh7eWVhcnM6ZS55ZWFycy1NYXRoLnRydW5jKGUueWVhcnMpLHF1YXJ0ZXJzOmUucXVhcnRlcnMtTWF0aC50cnVuYyhlLnF1YXJ0ZXJzKSxtb250aHM6ZS5tb250aHMtTWF0aC50cnVuYyhlLm1vbnRocyksd2Vla3M6ZS53ZWVrcy1NYXRoLnRydW5jKGUud2Vla3MpLGRheXM6ZS5kYXlzLU1hdGgudHJ1bmMoZS5kYXlzKSxob3VyczplLmhvdXJzLG1pbnV0ZXM6ZS5taW51dGVzLHNlY29uZHM6ZS5zZWNvbmRzLG1pbGxpc2Vjb25kczplLm1pbGxpc2Vjb25kc30pLmFzKFxcXCJtaWxsaXNlY29uZHNcXFwiKSxhPXNyKGkpLFt1LGxdPUxhKGEsdCxuLnpvbmUpO3JldHVybiBvIT09MCYmKHUrPW8sbD1uLnpvbmUub2Zmc2V0KHUpKSx7dHM6dSxvOmx9fWZ1bmN0aW9uIGRyKG4sZSx0LHIscyxpKXtsZXR7c2V0Wm9uZTpvLHpvbmU6YX09dDtpZihuJiZPYmplY3Qua2V5cyhuKS5sZW5ndGghPT0wKXtsZXQgdT1lfHxhLGw9Qi5mcm9tT2JqZWN0KG4sRmUoJCh7fSx0KSx7em9uZTp1LHNwZWNpZmljT2Zmc2V0Oml9KSk7cmV0dXJuIG8/bDpsLnNldFpvbmUoYSl9ZWxzZSByZXR1cm4gQi5pbnZhbGlkKG5ldyB5ZShcXFwidW5wYXJzYWJsZVxcXCIsYHRoZSBpbnB1dCBcXFwiJHtzfVxcXCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7cn1gKSl9ZnVuY3Rpb24gZXMobixlLHQ9ITApe3JldHVybiBuLmlzVmFsaWQ/ZmUuY3JlYXRlKFouY3JlYXRlKFxcXCJlbi1VU1xcXCIpLHthbGxvd1o6dCxmb3JjZVNpbXBsZTohMH0pLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhuLGUpOm51bGx9ZnVuY3Rpb24gdmkobixlKXtsZXQgdD1uLmMueWVhcj45OTk5fHxuLmMueWVhcjwwLHI9XFxcIlxcXCI7cmV0dXJuIHQmJm4uYy55ZWFyPj0wJiYocis9XFxcIitcXFwiKSxyKz1pZShuLmMueWVhcix0PzY6NCksZT8ocis9XFxcIi1cXFwiLHIrPWllKG4uYy5tb250aCkscis9XFxcIi1cXFwiLHIrPWllKG4uYy5kYXkpKToocis9aWUobi5jLm1vbnRoKSxyKz1pZShuLmMuZGF5KSkscn1mdW5jdGlvbiB4YShuLGUsdCxyLHMsaSl7bGV0IG89aWUobi5jLmhvdXIpO3JldHVybiBlPyhvKz1cXFwiOlxcXCIsbys9aWUobi5jLm1pbnV0ZSksKG4uYy5zZWNvbmQhPT0wfHwhdCkmJihvKz1cXFwiOlxcXCIpKTpvKz1pZShuLmMubWludXRlKSwobi5jLnNlY29uZCE9PTB8fCF0KSYmKG8rPWllKG4uYy5zZWNvbmQpLChuLmMubWlsbGlzZWNvbmQhPT0wfHwhcikmJihvKz1cXFwiLlxcXCIsbys9aWUobi5jLm1pbGxpc2Vjb25kLDMpKSkscyYmKG4uaXNPZmZzZXRGaXhlZCYmbi5vZmZzZXQ9PT0wJiYhaT9vKz1cXFwiWlxcXCI6bi5vPDA/KG8rPVxcXCItXFxcIixvKz1pZShNYXRoLnRydW5jKC1uLm8vNjApKSxvKz1cXFwiOlxcXCIsbys9aWUoTWF0aC50cnVuYygtbi5vJTYwKSkpOihvKz1cXFwiK1xcXCIsbys9aWUoTWF0aC50cnVuYyhuLm8vNjApKSxvKz1cXFwiOlxcXCIsbys9aWUoTWF0aC50cnVuYyhuLm8lNjApKSkpLGkmJihvKz1cXFwiW1xcXCIrbi56b25lLmlhbmFOYW1lK1xcXCJdXFxcIiksb312YXIgQWE9e21vbnRoOjEsZGF5OjEsaG91cjowLG1pbnV0ZTowLHNlY29uZDowLG1pbGxpc2Vjb25kOjB9LExjPXt3ZWVrTnVtYmVyOjEsd2Vla2RheToxLGhvdXI6MCxtaW51dGU6MCxzZWNvbmQ6MCxtaWxsaXNlY29uZDowfSxBYz17b3JkaW5hbDoxLGhvdXI6MCxtaW51dGU6MCxzZWNvbmQ6MCxtaWxsaXNlY29uZDowfSxNYT1bXFxcInllYXJcXFwiLFxcXCJtb250aFxcXCIsXFxcImRheVxcXCIsXFxcImhvdXJcXFwiLFxcXCJtaW51dGVcXFwiLFxcXCJzZWNvbmRcXFwiLFxcXCJtaWxsaXNlY29uZFxcXCJdLE1jPVtcXFwid2Vla1llYXJcXFwiLFxcXCJ3ZWVrTnVtYmVyXFxcIixcXFwid2Vla2RheVxcXCIsXFxcImhvdXJcXFwiLFxcXCJtaW51dGVcXFwiLFxcXCJzZWNvbmRcXFwiLFxcXCJtaWxsaXNlY29uZFxcXCJdLF9jPVtcXFwieWVhclxcXCIsXFxcIm9yZGluYWxcXFwiLFxcXCJob3VyXFxcIixcXFwibWludXRlXFxcIixcXFwic2Vjb25kXFxcIixcXFwibWlsbGlzZWNvbmRcXFwiXTtmdW5jdGlvbiBPYShuKXtsZXQgZT17eWVhcjpcXFwieWVhclxcXCIseWVhcnM6XFxcInllYXJcXFwiLG1vbnRoOlxcXCJtb250aFxcXCIsbW9udGhzOlxcXCJtb250aFxcXCIsZGF5OlxcXCJkYXlcXFwiLGRheXM6XFxcImRheVxcXCIsaG91cjpcXFwiaG91clxcXCIsaG91cnM6XFxcImhvdXJcXFwiLG1pbnV0ZTpcXFwibWludXRlXFxcIixtaW51dGVzOlxcXCJtaW51dGVcXFwiLHF1YXJ0ZXI6XFxcInF1YXJ0ZXJcXFwiLHF1YXJ0ZXJzOlxcXCJxdWFydGVyXFxcIixzZWNvbmQ6XFxcInNlY29uZFxcXCIsc2Vjb25kczpcXFwic2Vjb25kXFxcIixtaWxsaXNlY29uZDpcXFwibWlsbGlzZWNvbmRcXFwiLG1pbGxpc2Vjb25kczpcXFwibWlsbGlzZWNvbmRcXFwiLHdlZWtkYXk6XFxcIndlZWtkYXlcXFwiLHdlZWtkYXlzOlxcXCJ3ZWVrZGF5XFxcIix3ZWVrbnVtYmVyOlxcXCJ3ZWVrTnVtYmVyXFxcIix3ZWVrc251bWJlcjpcXFwid2Vla051bWJlclxcXCIsd2Vla251bWJlcnM6XFxcIndlZWtOdW1iZXJcXFwiLHdlZWt5ZWFyOlxcXCJ3ZWVrWWVhclxcXCIsd2Vla3llYXJzOlxcXCJ3ZWVrWWVhclxcXCIsb3JkaW5hbDpcXFwib3JkaW5hbFxcXCJ9W24udG9Mb3dlckNhc2UoKV07aWYoIWUpdGhyb3cgbmV3IHVuKG4pO3JldHVybiBlfWZ1bmN0aW9uIHZhKG4sZSl7bGV0IHQ9V2UoZS56b25lLFguZGVmYXVsdFpvbmUpLHI9Wi5mcm9tT2JqZWN0KGUpLHM9WC5ub3coKSxpLG87aWYoVShuLnllYXIpKWk9cztlbHNle2ZvcihsZXQgbCBvZiBNYSlVKG5bbF0pJiYobltsXT1BYVtsXSk7bGV0IGE9a2kobil8fENpKG4pO2lmKGEpcmV0dXJuIEIuaW52YWxpZChhKTtsZXQgdT10Lm9mZnNldChzKTtbaSxvXT10cyhuLHUsdCl9cmV0dXJuIG5ldyBCKHt0czppLHpvbmU6dCxsb2M6cixvfSl9ZnVuY3Rpb24gSWEobixlLHQpe2xldCByPVUodC5yb3VuZCk/ITA6dC5yb3VuZCxzPShvLGEpPT4obz1jbihvLHJ8fHQuY2FsZW5kYXJ5PzA6MiwhMCksZS5sb2MuY2xvbmUodCkucmVsRm9ybWF0dGVyKHQpLmZvcm1hdChvLGEpKSxpPW89PnQuY2FsZW5kYXJ5P2UuaGFzU2FtZShuLG8pPzA6ZS5zdGFydE9mKG8pLmRpZmYobi5zdGFydE9mKG8pLG8pLmdldChvKTplLmRpZmYobixvKS5nZXQobyk7aWYodC51bml0KXJldHVybiBzKGkodC51bml0KSx0LnVuaXQpO2ZvcihsZXQgbyBvZiB0LnVuaXRzKXtsZXQgYT1pKG8pO2lmKE1hdGguYWJzKGEpPj0xKXJldHVybiBzKGEsbyl9cmV0dXJuIHMobj5lPy0wOjAsdC51bml0c1t0LnVuaXRzLmxlbmd0aC0xXSl9ZnVuY3Rpb24gTmEobil7bGV0IGU9e30sdDtyZXR1cm4gbi5sZW5ndGg+MCYmdHlwZW9mIG5bbi5sZW5ndGgtMV09PVxcXCJvYmplY3RcXFwiPyhlPW5bbi5sZW5ndGgtMV0sdD1BcnJheS5mcm9tKG4pLnNsaWNlKDAsbi5sZW5ndGgtMSkpOnQ9QXJyYXkuZnJvbShuKSxbZSx0XX12YXIgQj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtsZXQgdD1lLnpvbmV8fFguZGVmYXVsdFpvbmUscj1lLmludmFsaWR8fChOdW1iZXIuaXNOYU4oZS50cyk/bmV3IHllKFxcXCJpbnZhbGlkIGlucHV0XFxcIik6bnVsbCl8fCh0LmlzVmFsaWQ/bnVsbDpYcih0KSk7dGhpcy50cz1VKGUudHMpP1gubm93KCk6ZS50cztsZXQgcz1udWxsLGk9bnVsbDtpZighcilpZihlLm9sZCYmZS5vbGQudHM9PT10aGlzLnRzJiZlLm9sZC56b25lLmVxdWFscyh0KSlbcyxpXT1bZS5vbGQuYyxlLm9sZC5vXTtlbHNle2xldCBhPXQub2Zmc2V0KHRoaXMudHMpO3M9a2EodGhpcy50cyxhKSxyPU51bWJlci5pc05hTihzLnllYXIpP25ldyB5ZShcXFwiaW52YWxpZCBpbnB1dFxcXCIpOm51bGwscz1yP251bGw6cyxpPXI/bnVsbDphfXRoaXMuX3pvbmU9dCx0aGlzLmxvYz1lLmxvY3x8Wi5jcmVhdGUoKSx0aGlzLmludmFsaWQ9cix0aGlzLndlZWtEYXRhPW51bGwsdGhpcy5jPXMsdGhpcy5vPWksdGhpcy5pc0x1eG9uRGF0ZVRpbWU9ITB9c3RhdGljIG5vdygpe3JldHVybiBuZXcgQih7fSl9c3RhdGljIGxvY2FsKCl7bGV0W2UsdF09TmEoYXJndW1lbnRzKSxbcixzLGksbyxhLHUsbF09dDtyZXR1cm4gdmEoe3llYXI6cixtb250aDpzLGRheTppLGhvdXI6byxtaW51dGU6YSxzZWNvbmQ6dSxtaWxsaXNlY29uZDpsfSxlKX1zdGF0aWMgdXRjKCl7bGV0W2UsdF09TmEoYXJndW1lbnRzKSxbcixzLGksbyxhLHUsbF09dDtyZXR1cm4gZS56b25lPW9lLnV0Y0luc3RhbmNlLHZhKHt5ZWFyOnIsbW9udGg6cyxkYXk6aSxob3VyOm8sbWludXRlOmEsc2Vjb25kOnUsbWlsbGlzZWNvbmQ6bH0sZSl9c3RhdGljIGZyb21KU0RhdGUoZSx0PXt9KXtsZXQgcj1MbyhlKT9lLnZhbHVlT2YoKTpOYU47aWYoTnVtYmVyLmlzTmFOKHIpKXJldHVybiBCLmludmFsaWQoXFxcImludmFsaWQgaW5wdXRcXFwiKTtsZXQgcz1XZSh0LnpvbmUsWC5kZWZhdWx0Wm9uZSk7cmV0dXJuIHMuaXNWYWxpZD9uZXcgQih7dHM6cix6b25lOnMsbG9jOlouZnJvbU9iamVjdCh0KX0pOkIuaW52YWxpZChYcihzKSl9c3RhdGljIGZyb21NaWxsaXMoZSx0PXt9KXtpZihudChlKSlyZXR1cm4gZTwtU2F8fGU+U2E/Qi5pbnZhbGlkKFxcXCJUaW1lc3RhbXAgb3V0IG9mIHJhbmdlXFxcIik6bmV3IEIoe3RzOmUsem9uZTpXZSh0LnpvbmUsWC5kZWZhdWx0Wm9uZSksbG9jOlouZnJvbU9iamVjdCh0KX0pO3Rocm93IG5ldyBEZShgZnJvbU1pbGxpcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCwgYnV0IHJlY2VpdmVkIGEgJHt0eXBlb2YgZX0gd2l0aCB2YWx1ZSAke2V9YCl9c3RhdGljIGZyb21TZWNvbmRzKGUsdD17fSl7aWYobnQoZSkpcmV0dXJuIG5ldyBCKHt0czplKjFlMyx6b25lOldlKHQuem9uZSxYLmRlZmF1bHRab25lKSxsb2M6Wi5mcm9tT2JqZWN0KHQpfSk7dGhyb3cgbmV3IERlKFxcXCJmcm9tU2Vjb25kcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dFxcXCIpfXN0YXRpYyBmcm9tT2JqZWN0KGUsdD17fSl7ZT1lfHx7fTtsZXQgcj1XZSh0LnpvbmUsWC5kZWZhdWx0Wm9uZSk7aWYoIXIuaXNWYWxpZClyZXR1cm4gQi5pbnZhbGlkKFhyKHIpKTtsZXQgcz1YLm5vdygpLGk9VSh0LnNwZWNpZmljT2Zmc2V0KT9yLm9mZnNldChzKTp0LnNwZWNpZmljT2Zmc2V0LG89aG4oZSxPYSksYT0hVShvLm9yZGluYWwpLHU9IVUoby55ZWFyKSxsPSFVKG8ubW9udGgpfHwhVShvLmRheSksZD11fHxsLGg9by53ZWVrWWVhcnx8by53ZWVrTnVtYmVyLHA9Wi5mcm9tT2JqZWN0KHQpO2lmKChkfHxhKSYmaCl0aHJvdyBuZXcgbXQoXFxcIkNhbid0IG1peCB3ZWVrWWVhci93ZWVrTnVtYmVyIHVuaXRzIHdpdGggeWVhci9tb250aC9kYXkgb3Igb3JkaW5hbHNcXFwiKTtpZihsJiZhKXRocm93IG5ldyBtdChcXFwiQ2FuJ3QgbWl4IG9yZGluYWwgZGF0ZXMgd2l0aCBtb250aC9kYXlcXFwiKTtsZXQgZj1ofHxvLndlZWtkYXkmJiFkLEYsZyx5PWthKHMsaSk7Zj8oRj1NYyxnPUxjLHk9WnIoeSkpOmE/KEY9X2MsZz1BYyx5PVFyKHkpKTooRj1NYSxnPUFhKTtsZXQgUz0hMTtmb3IobGV0IE0gb2YgRil7bGV0IFY9b1tNXTtVKFYpP1M/b1tNXT1nW01dOm9bTV09eVtNXTpTPSEwfWxldCBPPWY/d2Eobyk6YT9UYShvKTpraShvKSx2PU98fENpKG8pO2lmKHYpcmV0dXJuIEIuaW52YWxpZCh2KTtsZXQgRD1mP1RpKG8pOmE/U2kobyk6byxbdyxUXT10cyhELGksciksQz1uZXcgQih7dHM6dyx6b25lOnIsbzpULGxvYzpwfSk7cmV0dXJuIG8ud2Vla2RheSYmZCYmZS53ZWVrZGF5IT09Qy53ZWVrZGF5P0IuaW52YWxpZChcXFwibWlzbWF0Y2hlZCB3ZWVrZGF5XFxcIixgeW91IGNhbid0IHNwZWNpZnkgYm90aCBhIHdlZWtkYXkgb2YgJHtvLndlZWtkYXl9IGFuZCBhIGRhdGUgb2YgJHtDLnRvSVNPKCl9YCk6Q31zdGF0aWMgZnJvbUlTTyhlLHQ9e30pe2xldFtyLHNdPWVhKGUpO3JldHVybiBkcihyLHMsdCxcXFwiSVNPIDg2MDFcXFwiLGUpfXN0YXRpYyBmcm9tUkZDMjgyMihlLHQ9e30pe2xldFtyLHNdPXRhKGUpO3JldHVybiBkcihyLHMsdCxcXFwiUkZDIDI4MjJcXFwiLGUpfXN0YXRpYyBmcm9tSFRUUChlLHQ9e30pe2xldFtyLHNdPW5hKGUpO3JldHVybiBkcihyLHMsdCxcXFwiSFRUUFxcXCIsdCl9c3RhdGljIGZyb21Gb3JtYXQoZSx0LHI9e30pe2lmKFUoZSl8fFUodCkpdGhyb3cgbmV3IERlKFxcXCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXRcXFwiKTtsZXR7bG9jYWxlOnM9bnVsbCxudW1iZXJpbmdTeXN0ZW06aT1udWxsfT1yLG89Wi5mcm9tT3B0cyh7bG9jYWxlOnMsbnVtYmVyaW5nU3lzdGVtOmksZGVmYXVsdFRvRU46ITB9KSxbYSx1LGwsZF09RGEobyxlLHQpO3JldHVybiBkP0IuaW52YWxpZChkKTpkcihhLHUscixgZm9ybWF0ICR7dH1gLGUsbCl9c3RhdGljIGZyb21TdHJpbmcoZSx0LHI9e30pe3JldHVybiBCLmZyb21Gb3JtYXQoZSx0LHIpfXN0YXRpYyBmcm9tU1FMKGUsdD17fSl7bGV0W3Isc109aWEoZSk7cmV0dXJuIGRyKHIscyx0LFxcXCJTUUxcXFwiLGUpfXN0YXRpYyBpbnZhbGlkKGUsdD1udWxsKXtpZighZSl0aHJvdyBuZXcgRGUoXFxcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZFxcXCIpO2xldCByPWUgaW5zdGFuY2VvZiB5ZT9lOm5ldyB5ZShlLHQpO2lmKFgudGhyb3dPbkludmFsaWQpdGhyb3cgbmV3IFVyKHIpO3JldHVybiBuZXcgQih7aW52YWxpZDpyfSl9c3RhdGljIGlzRGF0ZVRpbWUoZSl7cmV0dXJuIGUmJmUuaXNMdXhvbkRhdGVUaW1lfHwhMX1nZXQoZSl7cmV0dXJuIHRoaXNbZV19Z2V0IGlzVmFsaWQoKXtyZXR1cm4gdGhpcy5pbnZhbGlkPT09bnVsbH1nZXQgaW52YWxpZFJlYXNvbigpe3JldHVybiB0aGlzLmludmFsaWQ/dGhpcy5pbnZhbGlkLnJlYXNvbjpudWxsfWdldCBpbnZhbGlkRXhwbGFuYXRpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkP3RoaXMuaW52YWxpZC5leHBsYW5hdGlvbjpudWxsfWdldCBsb2NhbGUoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMubG9jLmxvY2FsZTpudWxsfWdldCBudW1iZXJpbmdTeXN0ZW0oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMubG9jLm51bWJlcmluZ1N5c3RlbTpudWxsfWdldCBvdXRwdXRDYWxlbmRhcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXI6bnVsbH1nZXQgem9uZSgpe3JldHVybiB0aGlzLl96b25lfWdldCB6b25lTmFtZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy56b25lLm5hbWU6bnVsbH1nZXQgeWVhcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5jLnllYXI6TmFOfWdldCBxdWFydGVyKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9NYXRoLmNlaWwodGhpcy5jLm1vbnRoLzMpOk5hTn1nZXQgbW9udGgoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuYy5tb250aDpOYU59Z2V0IGRheSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5jLmRheTpOYU59Z2V0IGhvdXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuYy5ob3VyOk5hTn1nZXQgbWludXRlKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmMubWludXRlOk5hTn1nZXQgc2Vjb25kKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmMuc2Vjb25kOk5hTn1nZXQgbWlsbGlzZWNvbmQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuYy5taWxsaXNlY29uZDpOYU59Z2V0IHdlZWtZZWFyKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9PaSh0aGlzKS53ZWVrWWVhcjpOYU59Z2V0IHdlZWtOdW1iZXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP09pKHRoaXMpLndlZWtOdW1iZXI6TmFOfWdldCB3ZWVrZGF5KCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9PaSh0aGlzKS53ZWVrZGF5Ok5hTn1nZXQgb3JkaW5hbCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/UXIodGhpcy5jKS5vcmRpbmFsOk5hTn1nZXQgbW9udGhTaG9ydCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/eXQubW9udGhzKFxcXCJzaG9ydFxcXCIse2xvY09iajp0aGlzLmxvY30pW3RoaXMubW9udGgtMV06bnVsbH1nZXQgbW9udGhMb25nKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD95dC5tb250aHMoXFxcImxvbmdcXFwiLHtsb2NPYmo6dGhpcy5sb2N9KVt0aGlzLm1vbnRoLTFdOm51bGx9Z2V0IHdlZWtkYXlTaG9ydCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/eXQud2Vla2RheXMoXFxcInNob3J0XFxcIix7bG9jT2JqOnRoaXMubG9jfSlbdGhpcy53ZWVrZGF5LTFdOm51bGx9Z2V0IHdlZWtkYXlMb25nKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD95dC53ZWVrZGF5cyhcXFwibG9uZ1xcXCIse2xvY09iajp0aGlzLmxvY30pW3RoaXMud2Vla2RheS0xXTpudWxsfWdldCBvZmZzZXQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkPyt0aGlzLm86TmFOfWdldCBvZmZzZXROYW1lU2hvcnQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMse2Zvcm1hdDpcXFwic2hvcnRcXFwiLGxvY2FsZTp0aGlzLmxvY2FsZX0pOm51bGx9Z2V0IG9mZnNldE5hbWVMb25nKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLHtmb3JtYXQ6XFxcImxvbmdcXFwiLGxvY2FsZTp0aGlzLmxvY2FsZX0pOm51bGx9Z2V0IGlzT2Zmc2V0Rml4ZWQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuem9uZS5pc1VuaXZlcnNhbDpudWxsfWdldCBpc0luRFNUKCl7cmV0dXJuIHRoaXMuaXNPZmZzZXRGaXhlZD8hMTp0aGlzLm9mZnNldD50aGlzLnNldCh7bW9udGg6MSxkYXk6MX0pLm9mZnNldHx8dGhpcy5vZmZzZXQ+dGhpcy5zZXQoe21vbnRoOjV9KS5vZmZzZXR9Z2V0IGlzSW5MZWFwWWVhcigpe3JldHVybiBxdCh0aGlzLnllYXIpfWdldCBkYXlzSW5Nb250aCgpe3JldHVybiBmbih0aGlzLnllYXIsdGhpcy5tb250aCl9Z2V0IGRheXNJblllYXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP1V0KHRoaXMueWVhcik6TmFOfWdldCB3ZWVrc0luV2Vla1llYXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2RuKHRoaXMud2Vla1llYXIpOk5hTn1yZXNvbHZlZExvY2FsZU9wdGlvbnMoZT17fSl7bGV0e2xvY2FsZTp0LG51bWJlcmluZ1N5c3RlbTpyLGNhbGVuZGFyOnN9PWZlLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShlKSxlKS5yZXNvbHZlZE9wdGlvbnModGhpcyk7cmV0dXJue2xvY2FsZTp0LG51bWJlcmluZ1N5c3RlbTpyLG91dHB1dENhbGVuZGFyOnN9fXRvVVRDKGU9MCx0PXt9KXtyZXR1cm4gdGhpcy5zZXRab25lKG9lLmluc3RhbmNlKGUpLHQpfXRvTG9jYWwoKXtyZXR1cm4gdGhpcy5zZXRab25lKFguZGVmYXVsdFpvbmUpfXNldFpvbmUoZSx7a2VlcExvY2FsVGltZTp0PSExLGtlZXBDYWxlbmRhclRpbWU6cj0hMX09e30pe2lmKGU9V2UoZSxYLmRlZmF1bHRab25lKSxlLmVxdWFscyh0aGlzLnpvbmUpKXJldHVybiB0aGlzO2lmKGUuaXNWYWxpZCl7bGV0IHM9dGhpcy50cztpZih0fHxyKXtsZXQgaT1lLm9mZnNldCh0aGlzLnRzKSxvPXRoaXMudG9PYmplY3QoKTtbc109dHMobyxpLGUpfXJldHVybiBmcih0aGlzLHt0czpzLHpvbmU6ZX0pfWVsc2UgcmV0dXJuIEIuaW52YWxpZChYcihlKSl9cmVjb25maWd1cmUoe2xvY2FsZTplLG51bWJlcmluZ1N5c3RlbTp0LG91dHB1dENhbGVuZGFyOnJ9PXt9KXtsZXQgcz10aGlzLmxvYy5jbG9uZSh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnQsb3V0cHV0Q2FsZW5kYXI6cn0pO3JldHVybiBmcih0aGlzLHtsb2M6c30pfXNldExvY2FsZShlKXtyZXR1cm4gdGhpcy5yZWNvbmZpZ3VyZSh7bG9jYWxlOmV9KX1zZXQoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1obihlLE9hKSxyPSFVKHQud2Vla1llYXIpfHwhVSh0LndlZWtOdW1iZXIpfHwhVSh0LndlZWtkYXkpLHM9IVUodC5vcmRpbmFsKSxpPSFVKHQueWVhciksbz0hVSh0Lm1vbnRoKXx8IVUodC5kYXkpLGE9aXx8byx1PXQud2Vla1llYXJ8fHQud2Vla051bWJlcjtpZigoYXx8cykmJnUpdGhyb3cgbmV3IG10KFxcXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXFxcIik7aWYobyYmcyl0aHJvdyBuZXcgbXQoXFxcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XFxcIik7bGV0IGw7cj9sPVRpKCQoJCh7fSxacih0aGlzLmMpKSx0KSk6VSh0Lm9yZGluYWwpPyhsPSQoJCh7fSx0aGlzLnRvT2JqZWN0KCkpLHQpLFUodC5kYXkpJiYobC5kYXk9TWF0aC5taW4oZm4obC55ZWFyLGwubW9udGgpLGwuZGF5KSkpOmw9U2koJCgkKHt9LFFyKHRoaXMuYykpLHQpKTtsZXRbZCxoXT10cyhsLHRoaXMubyx0aGlzLnpvbmUpO3JldHVybiBmcih0aGlzLHt0czpkLG86aH0pfXBsdXMoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1BLmZyb21EdXJhdGlvbkxpa2UoZSk7cmV0dXJuIGZyKHRoaXMsQ2EodGhpcyx0KSl9bWludXMoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1BLmZyb21EdXJhdGlvbkxpa2UoZSkubmVnYXRlKCk7cmV0dXJuIGZyKHRoaXMsQ2EodGhpcyx0KSl9c3RhcnRPZihlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PXt9LHI9QS5ub3JtYWxpemVVbml0KGUpO3N3aXRjaChyKXtjYXNlXFxcInllYXJzXFxcIjp0Lm1vbnRoPTE7Y2FzZVxcXCJxdWFydGVyc1xcXCI6Y2FzZVxcXCJtb250aHNcXFwiOnQuZGF5PTE7Y2FzZVxcXCJ3ZWVrc1xcXCI6Y2FzZVxcXCJkYXlzXFxcIjp0LmhvdXI9MDtjYXNlXFxcImhvdXJzXFxcIjp0Lm1pbnV0ZT0wO2Nhc2VcXFwibWludXRlc1xcXCI6dC5zZWNvbmQ9MDtjYXNlXFxcInNlY29uZHNcXFwiOnQubWlsbGlzZWNvbmQ9MDticmVhaztjYXNlXFxcIm1pbGxpc2Vjb25kc1xcXCI6YnJlYWt9aWYocj09PVxcXCJ3ZWVrc1xcXCImJih0LndlZWtkYXk9MSkscj09PVxcXCJxdWFydGVyc1xcXCIpe2xldCBzPU1hdGguY2VpbCh0aGlzLm1vbnRoLzMpO3QubW9udGg9KHMtMSkqMysxfXJldHVybiB0aGlzLnNldCh0KX1lbmRPZihlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMucGx1cyh7W2VdOjF9KS5zdGFydE9mKGUpLm1pbnVzKDEpOnRoaXN9dG9Gb3JtYXQoZSx0PXt9KXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2ZlLmNyZWF0ZSh0aGlzLmxvYy5yZWRlZmF1bHRUb0VOKHQpKS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcodGhpcyxlKTp4aX10b0xvY2FsZVN0cmluZyhlPWxuLHQ9e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/ZmUuY3JlYXRlKHRoaXMubG9jLmNsb25lKHQpLGUpLmZvcm1hdERhdGVUaW1lKHRoaXMpOnhpfXRvTG9jYWxlUGFydHMoZT17fSl7cmV0dXJuIHRoaXMuaXNWYWxpZD9mZS5jcmVhdGUodGhpcy5sb2MuY2xvbmUoZSksZSkuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKTpbXX10b0lTTyh7Zm9ybWF0OmU9XFxcImV4dGVuZGVkXFxcIixzdXBwcmVzc1NlY29uZHM6dD0hMSxzdXBwcmVzc01pbGxpc2Vjb25kczpyPSExLGluY2x1ZGVPZmZzZXQ6cz0hMCxleHRlbmRlZFpvbmU6aT0hMX09e30pe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIG51bGw7bGV0IG89ZT09PVxcXCJleHRlbmRlZFxcXCIsYT12aSh0aGlzLG8pO3JldHVybiBhKz1cXFwiVFxcXCIsYSs9eGEodGhpcyxvLHQscixzLGkpLGF9dG9JU09EYXRlKHtmb3JtYXQ6ZT1cXFwiZXh0ZW5kZWRcXFwifT17fSl7cmV0dXJuIHRoaXMuaXNWYWxpZD92aSh0aGlzLGU9PT1cXFwiZXh0ZW5kZWRcXFwiKTpudWxsfXRvSVNPV2Vla0RhdGUoKXtyZXR1cm4gZXModGhpcyxcXFwia2tray0nVydXVy1jXFxcIil9dG9JU09UaW1lKHtzdXBwcmVzc01pbGxpc2Vjb25kczplPSExLHN1cHByZXNzU2Vjb25kczp0PSExLGluY2x1ZGVPZmZzZXQ6cj0hMCxpbmNsdWRlUHJlZml4OnM9ITEsZXh0ZW5kZWRab25lOmk9ITEsZm9ybWF0Om89XFxcImV4dGVuZGVkXFxcIn09e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/KHM/XFxcIlRcXFwiOlxcXCJcXFwiKSt4YSh0aGlzLG89PT1cXFwiZXh0ZW5kZWRcXFwiLHQsZSxyLGkpOm51bGx9dG9SRkMyODIyKCl7cmV0dXJuIGVzKHRoaXMsXFxcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgWlpaXFxcIiwhMSl9dG9IVFRQKCl7cmV0dXJuIGVzKHRoaXMudG9VVEMoKSxcXFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyAnR01UJ1xcXCIpfXRvU1FMRGF0ZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dmkodGhpcywhMCk6bnVsbH10b1NRTFRpbWUoe2luY2x1ZGVPZmZzZXQ6ZT0hMCxpbmNsdWRlWm9uZTp0PSExLGluY2x1ZGVPZmZzZXRTcGFjZTpyPSEwfT17fSl7bGV0IHM9XFxcIkhIOm1tOnNzLlNTU1xcXCI7cmV0dXJuKHR8fGUpJiYociYmKHMrPVxcXCIgXFxcIiksdD9zKz1cXFwielxcXCI6ZSYmKHMrPVxcXCJaWlxcXCIpKSxlcyh0aGlzLHMsITApfXRvU1FMKGU9e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/YCR7dGhpcy50b1NRTERhdGUoKX0gJHt0aGlzLnRvU1FMVGltZShlKX1gOm51bGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudG9JU08oKTp4aX12YWx1ZU9mKCl7cmV0dXJuIHRoaXMudG9NaWxsaXMoKX10b01pbGxpcygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy50czpOYU59dG9TZWNvbmRzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnRzLzFlMzpOYU59dG9Vbml4SW50ZWdlcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/TWF0aC5mbG9vcih0aGlzLnRzLzFlMyk6TmFOfXRvSlNPTigpe3JldHVybiB0aGlzLnRvSVNPKCl9dG9CU09OKCl7cmV0dXJuIHRoaXMudG9KU0RhdGUoKX10b09iamVjdChlPXt9KXtpZighdGhpcy5pc1ZhbGlkKXJldHVybnt9O2xldCB0PSQoe30sdGhpcy5jKTtyZXR1cm4gZS5pbmNsdWRlQ29uZmlnJiYodC5vdXRwdXRDYWxlbmRhcj10aGlzLm91dHB1dENhbGVuZGFyLHQubnVtYmVyaW5nU3lzdGVtPXRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSx0LmxvY2FsZT10aGlzLmxvYy5sb2NhbGUpLHR9dG9KU0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy5pc1ZhbGlkP3RoaXMudHM6TmFOKX1kaWZmKGUsdD1cXFwibWlsbGlzZWNvbmRzXFxcIixyPXt9KXtpZighdGhpcy5pc1ZhbGlkfHwhZS5pc1ZhbGlkKXJldHVybiBBLmludmFsaWQoXFxcImNyZWF0ZWQgYnkgZGlmZmluZyBhbiBpbnZhbGlkIERhdGVUaW1lXFxcIik7bGV0IHM9JCh7bG9jYWxlOnRoaXMubG9jYWxlLG51bWJlcmluZ1N5c3RlbTp0aGlzLm51bWJlcmluZ1N5c3RlbX0sciksaT1Bbyh0KS5tYXAoQS5ub3JtYWxpemVVbml0KSxvPWUudmFsdWVPZigpPnRoaXMudmFsdWVPZigpLGE9bz90aGlzOmUsdT1vP2U6dGhpcyxsPWxhKGEsdSxpLHMpO3JldHVybiBvP2wubmVnYXRlKCk6bH1kaWZmTm93KGU9XFxcIm1pbGxpc2Vjb25kc1xcXCIsdD17fSl7cmV0dXJuIHRoaXMuZGlmZihCLm5vdygpLGUsdCl9dW50aWwoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90ZS5mcm9tRGF0ZVRpbWVzKHRoaXMsZSk6dGhpc31oYXNTYW1lKGUsdCl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4hMTtsZXQgcj1lLnZhbHVlT2YoKSxzPXRoaXMuc2V0Wm9uZShlLnpvbmUse2tlZXBMb2NhbFRpbWU6ITB9KTtyZXR1cm4gcy5zdGFydE9mKHQpPD1yJiZyPD1zLmVuZE9mKHQpfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkJiZlLmlzVmFsaWQmJnRoaXMudmFsdWVPZigpPT09ZS52YWx1ZU9mKCkmJnRoaXMuem9uZS5lcXVhbHMoZS56b25lKSYmdGhpcy5sb2MuZXF1YWxzKGUubG9jKX10b1JlbGF0aXZlKGU9e30pe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIG51bGw7bGV0IHQ9ZS5iYXNlfHxCLmZyb21PYmplY3Qoe30se3pvbmU6dGhpcy56b25lfSkscj1lLnBhZGRpbmc/dGhpczx0Py1lLnBhZGRpbmc6ZS5wYWRkaW5nOjAscz1bXFxcInllYXJzXFxcIixcXFwibW9udGhzXFxcIixcXFwiZGF5c1xcXCIsXFxcImhvdXJzXFxcIixcXFwibWludXRlc1xcXCIsXFxcInNlY29uZHNcXFwiXSxpPWUudW5pdDtyZXR1cm4gQXJyYXkuaXNBcnJheShlLnVuaXQpJiYocz1lLnVuaXQsaT12b2lkIDApLElhKHQsdGhpcy5wbHVzKHIpLEZlKCQoe30sZSkse251bWVyaWM6XFxcImFsd2F5c1xcXCIsdW5pdHM6cyx1bml0Oml9KSl9dG9SZWxhdGl2ZUNhbGVuZGFyKGU9e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/SWEoZS5iYXNlfHxCLmZyb21PYmplY3Qoe30se3pvbmU6dGhpcy56b25lfSksdGhpcyxGZSgkKHt9LGUpLHtudW1lcmljOlxcXCJhdXRvXFxcIix1bml0czpbXFxcInllYXJzXFxcIixcXFwibW9udGhzXFxcIixcXFwiZGF5c1xcXCJdLGNhbGVuZGFyeTohMH0pKTpudWxsfXN0YXRpYyBtaW4oLi4uZSl7aWYoIWUuZXZlcnkoQi5pc0RhdGVUaW1lKSl0aHJvdyBuZXcgRGUoXFxcIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1xcXCIpO3JldHVybiBHcyhlLHQ9PnQudmFsdWVPZigpLE1hdGgubWluKX1zdGF0aWMgbWF4KC4uLmUpe2lmKCFlLmV2ZXJ5KEIuaXNEYXRlVGltZSkpdGhyb3cgbmV3IERlKFxcXCJtYXggcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcXFwiKTtyZXR1cm4gR3MoZSx0PT50LnZhbHVlT2YoKSxNYXRoLm1heCl9c3RhdGljIGZyb21Gb3JtYXRFeHBsYWluKGUsdCxyPXt9KXtsZXR7bG9jYWxlOnM9bnVsbCxudW1iZXJpbmdTeXN0ZW06aT1udWxsfT1yLG89Wi5mcm9tT3B0cyh7bG9jYWxlOnMsbnVtYmVyaW5nU3lzdGVtOmksZGVmYXVsdFRvRU46ITB9KTtyZXR1cm4gd2kobyxlLHQpfXN0YXRpYyBmcm9tU3RyaW5nRXhwbGFpbihlLHQscj17fSl7cmV0dXJuIEIuZnJvbUZvcm1hdEV4cGxhaW4oZSx0LHIpfXN0YXRpYyBnZXQgREFURV9TSE9SVCgpe3JldHVybiBsbn1zdGF0aWMgZ2V0IERBVEVfTUVEKCl7cmV0dXJuIFBufXN0YXRpYyBnZXQgREFURV9NRURfV0lUSF9XRUVLREFZKCl7cmV0dXJuIEpzfXN0YXRpYyBnZXQgREFURV9GVUxMKCl7cmV0dXJuICRufXN0YXRpYyBnZXQgREFURV9IVUdFKCl7cmV0dXJuIFJufXN0YXRpYyBnZXQgVElNRV9TSU1QTEUoKXtyZXR1cm4gam59c3RhdGljIGdldCBUSU1FX1dJVEhfU0VDT05EUygpe3JldHVybiBWbn1zdGF0aWMgZ2V0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQoKXtyZXR1cm4gcW59c3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKXtyZXR1cm4gVW59c3RhdGljIGdldCBUSU1FXzI0X1NJTVBMRSgpe3JldHVybiBXbn1zdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9TRUNPTkRTKCl7cmV0dXJuIEhufXN0YXRpYyBnZXQgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCgpe3JldHVybiBLbn1zdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCgpe3JldHVybiBKbn1zdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUKCl7cmV0dXJuIHpufXN0YXRpYyBnZXQgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKCl7cmV0dXJuIFlufXN0YXRpYyBnZXQgREFURVRJTUVfTUVEKCl7cmV0dXJuIEdufXN0YXRpYyBnZXQgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUygpe3JldHVybiBabn1zdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKXtyZXR1cm4genN9c3RhdGljIGdldCBEQVRFVElNRV9GVUxMKCl7cmV0dXJuIFFufXN0YXRpYyBnZXQgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMoKXtyZXR1cm4gWG59c3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCl7cmV0dXJuIGVyfXN0YXRpYyBnZXQgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMoKXtyZXR1cm4gdHJ9fTtmdW5jdGlvbiBGbihuKXtpZihCLmlzRGF0ZVRpbWUobikpcmV0dXJuIG47aWYobiYmbi52YWx1ZU9mJiZudChuLnZhbHVlT2YoKSkpcmV0dXJuIEIuZnJvbUpTRGF0ZShuKTtpZihuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCIpcmV0dXJuIEIuZnJvbU9iamVjdChuKTt0aHJvdyBuZXcgRGUoYFVua25vd24gZGF0ZXRpbWUgYXJndW1lbnQ6ICR7bn0sIG9mIHR5cGUgJHt0eXBlb2Ygbn1gKX12YXIgZ3Q9cXIobnMoKSk7dmFyIHduPSgpPT4vWyMqMC05XVxcXFx1RkUwRj9cXFxcdTIwRTN8W1xcXFx4QTlcXFxceEFFXFxcXHUyMDNDXFxcXHUyMDQ5XFxcXHUyMTIyXFxcXHUyMTM5XFxcXHUyMTk0LVxcXFx1MjE5OVxcXFx1MjFBOVxcXFx1MjFBQVxcXFx1MjMxQVxcXFx1MjMxQlxcXFx1MjMyOFxcXFx1MjNDRlxcXFx1MjNFRC1cXFxcdTIzRUZcXFxcdTIzRjFcXFxcdTIzRjJcXFxcdTIzRjgtXFxcXHUyM0ZBXFxcXHUyNEMyXFxcXHUyNUFBXFxcXHUyNUFCXFxcXHUyNUI2XFxcXHUyNUMwXFxcXHUyNUZCXFxcXHUyNUZDXFxcXHUyNUZFXFxcXHUyNjAwLVxcXFx1MjYwNFxcXFx1MjYwRVxcXFx1MjYxMVxcXFx1MjYxNFxcXFx1MjYxNVxcXFx1MjYxOFxcXFx1MjYyMFxcXFx1MjYyMlxcXFx1MjYyM1xcXFx1MjYyNlxcXFx1MjYyQVxcXFx1MjYyRVxcXFx1MjYyRlxcXFx1MjYzOC1cXFxcdTI2M0FcXFxcdTI2NDBcXFxcdTI2NDJcXFxcdTI2NDgtXFxcXHUyNjUzXFxcXHUyNjVGXFxcXHUyNjYwXFxcXHUyNjYzXFxcXHUyNjY1XFxcXHUyNjY2XFxcXHUyNjY4XFxcXHUyNjdCXFxcXHUyNjdFXFxcXHUyNjdGXFxcXHUyNjkyXFxcXHUyNjk0LVxcXFx1MjY5N1xcXFx1MjY5OVxcXFx1MjY5QlxcXFx1MjY5Q1xcXFx1MjZBMFxcXFx1MjZBN1xcXFx1MjZBQVxcXFx1MjZCMFxcXFx1MjZCMVxcXFx1MjZCRFxcXFx1MjZCRVxcXFx1MjZDNFxcXFx1MjZDOFxcXFx1MjZDRlxcXFx1MjZEMVxcXFx1MjZFOVxcXFx1MjZGMC1cXFxcdTI2RjVcXFxcdTI2RjdcXFxcdTI2RjhcXFxcdTI2RkFcXFxcdTI3MDJcXFxcdTI3MDhcXFxcdTI3MDlcXFxcdTI3MEZcXFxcdTI3MTJcXFxcdTI3MTRcXFxcdTI3MTZcXFxcdTI3MURcXFxcdTI3MjFcXFxcdTI3MzNcXFxcdTI3MzRcXFxcdTI3NDRcXFxcdTI3NDdcXFxcdTI3NTdcXFxcdTI3NjNcXFxcdTI3QTFcXFxcdTI5MzRcXFxcdTI5MzVcXFxcdTJCMDUtXFxcXHUyQjA3XFxcXHUyQjFCXFxcXHUyQjFDXFxcXHUyQjU1XFxcXHUzMDMwXFxcXHUzMDNEXFxcXHUzMjk3XFxcXHUzMjk5XVxcXFx1RkUwRj98W1xcXFx1MjYxRFxcXFx1MjcwQ1xcXFx1MjcwRF0oPzpcXFxcdUZFMEZ8XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT98W1xcXFx1MjcwQVxcXFx1MjcwQl0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pP3xbXFxcXHUyM0U5LVxcXFx1MjNFQ1xcXFx1MjNGMFxcXFx1MjNGM1xcXFx1MjVGRFxcXFx1MjY5M1xcXFx1MjZBMVxcXFx1MjZBQlxcXFx1MjZDNVxcXFx1MjZDRVxcXFx1MjZENFxcXFx1MjZFQVxcXFx1MjZGRFxcXFx1MjcwNVxcXFx1MjcyOFxcXFx1Mjc0Q1xcXFx1Mjc0RVxcXFx1Mjc1My1cXFxcdTI3NTVcXFxcdTI3OTUtXFxcXHUyNzk3XFxcXHUyN0IwXFxcXHUyN0JGXFxcXHUyQjUwXXxcXFxcdTI2RDNcXFxcdUZFMEY/KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQ0E1KT98XFxcXHUyNkY5KD86XFxcXHVGRTBGfFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98XFxcXHUyNzY0XFxcXHVGRTBGPyg/OlxcXFx1MjAwRCg/OlxcXFx1RDgzRFxcXFx1REQyNXxcXFxcdUQ4M0VcXFxcdURFNzkpKT98XFxcXHVEODNDKD86W1xcXFx1REMwNFxcXFx1REQ3MFxcXFx1REQ3MVxcXFx1REQ3RVxcXFx1REQ3RlxcXFx1REUwMlxcXFx1REUzN1xcXFx1REYyMVxcXFx1REYyNC1cXFxcdURGMkNcXFxcdURGMzZcXFxcdURGN0RcXFxcdURGOTZcXFxcdURGOTdcXFxcdURGOTktXFxcXHVERjlCXFxcXHVERjlFXFxcXHVERjlGXFxcXHVERkNEXFxcXHVERkNFXFxcXHVERkQ0LVxcXFx1REZERlxcXFx1REZGNVxcXFx1REZGN11cXFxcdUZFMEY/fFtcXFxcdURGODVcXFxcdURGQzJcXFxcdURGQzddKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT98W1xcXFx1REZDNFxcXFx1REZDQV0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pPyg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFtcXFxcdURGQ0JcXFxcdURGQ0NdKD86XFxcXHVGRTBGfFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98W1xcXFx1RENDRlxcXFx1REQ4RVxcXFx1REQ5MS1cXFxcdUREOUFcXFxcdURFMDFcXFxcdURFMUFcXFxcdURFMkZcXFxcdURFMzItXFxcXHVERTM2XFxcXHVERTM4LVxcXFx1REUzQVxcXFx1REU1MFxcXFx1REU1MVxcXFx1REYwMC1cXFxcdURGMjBcXFxcdURGMkQtXFxcXHVERjM1XFxcXHVERjM3LVxcXFx1REY0M1xcXFx1REY0NS1cXFxcdURGNEFcXFxcdURGNEMtXFxcXHVERjdDXFxcXHVERjdFLVxcXFx1REY4NFxcXFx1REY4Ni1cXFxcdURGOTNcXFxcdURGQTAtXFxcXHVERkMxXFxcXHVERkM1XFxcXHVERkM2XFxcXHVERkM4XFxcXHVERkM5XFxcXHVERkNGLVxcXFx1REZEM1xcXFx1REZFMC1cXFxcdURGRjBcXFxcdURGRjgtXFxcXHVERkZGXXxcXFxcdURERTZcXFxcdUQ4M0NbXFxcXHVEREU4LVxcXFx1RERFQ1xcXFx1RERFRVxcXFx1RERGMVxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGNi1cXFxcdURERkFcXFxcdURERkNcXFxcdURERkRcXFxcdURERkZdfFxcXFx1RERFN1xcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERTdcXFxcdURERTktXFxcXHVEREVGXFxcXHVEREYxLVxcXFx1RERGNFxcXFx1RERGNi1cXFxcdURERjlcXFxcdURERkJcXFxcdURERkNcXFxcdURERkVcXFxcdURERkZdfFxcXFx1RERFOFxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERThcXFxcdURERTlcXFxcdURERUItXFxcXHVEREVFXFxcXHVEREYwLVxcXFx1RERGNVxcXFx1RERGN1xcXFx1RERGQS1cXFxcdURERkZdfFxcXFx1RERFOVxcXFx1RDgzQ1tcXFxcdURERUFcXFxcdURERUNcXFxcdURERUZcXFxcdURERjBcXFxcdURERjJcXFxcdURERjRcXFxcdURERkZdfFxcXFx1RERFQVxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERThcXFxcdURERUFcXFxcdURERUNcXFxcdURERURcXFxcdURERjctXFxcXHVEREZBXXxcXFxcdURERUJcXFxcdUQ4M0NbXFxcXHVEREVFLVxcXFx1RERGMFxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGN118XFxcXHVEREVDXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFN1xcXFx1RERFOS1cXFxcdURERUVcXFxcdURERjEtXFxcXHVEREYzXFxcXHVEREY1LVxcXFx1RERGQVxcXFx1RERGQ1xcXFx1RERGRV18XFxcXHVEREVEXFxcXHVEODNDW1xcXFx1RERGMFxcXFx1RERGMlxcXFx1RERGM1xcXFx1RERGN1xcXFx1RERGOVxcXFx1RERGQV18XFxcXHVEREVFXFxcXHVEODNDW1xcXFx1RERFOC1cXFxcdURERUFcXFxcdURERjEtXFxcXHVEREY0XFxcXHVEREY2LVxcXFx1RERGOV18XFxcXHVEREVGXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGNV18XFxcXHVEREYwXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERFQy1cXFxcdURERUVcXFxcdURERjJcXFxcdURERjNcXFxcdURERjVcXFxcdURERjdcXFxcdURERkNcXFxcdURERkVcXFxcdURERkZdfFxcXFx1RERGMVxcXFx1RDgzQ1tcXFxcdURERTYtXFxcXHVEREU4XFxcXHVEREVFXFxcXHVEREYwXFxcXHVEREY3LVxcXFx1RERGQlxcXFx1RERGRV18XFxcXHVEREYyXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFOC1cXFxcdURERURcXFxcdURERjAtXFxcXHVEREZGXXxcXFxcdURERjNcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREU4XFxcXHVEREVBLVxcXFx1RERFQ1xcXFx1RERFRVxcXFx1RERGMVxcXFx1RERGNFxcXFx1RERGNVxcXFx1RERGN1xcXFx1RERGQVxcXFx1RERGRl18XFxcXHVEREY0XFxcXHVEODNDXFxcXHVEREYyfFxcXFx1RERGNVxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERUEtXFxcXHVEREVEXFxcXHVEREYwLVxcXFx1RERGM1xcXFx1RERGNy1cXFxcdURERjlcXFxcdURERkNcXFxcdURERkVdfFxcXFx1RERGNlxcXFx1RDgzQ1xcXFx1RERFNnxcXFxcdURERjdcXFxcdUQ4M0NbXFxcXHVEREVBXFxcXHVEREY0XFxcXHVEREY4XFxcXHVEREZBXFxcXHVEREZDXXxcXFxcdURERjhcXFxcdUQ4M0NbXFxcXHVEREU2LVxcXFx1RERFQVxcXFx1RERFQy1cXFxcdURERjRcXFxcdURERjctXFxcXHVEREY5XFxcXHVEREZCXFxcXHVEREZELVxcXFx1RERGRl18XFxcXHVEREY5XFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFOFxcXFx1RERFOVxcXFx1RERFQi1cXFxcdURERURcXFxcdURERUYtXFxcXHVEREY0XFxcXHVEREY3XFxcXHVEREY5XFxcXHVEREZCXFxcXHVEREZDXFxcXHVEREZGXXxcXFxcdURERkFcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREVDXFxcXHVEREYyXFxcXHVEREYzXFxcXHVEREY4XFxcXHVEREZFXFxcXHVEREZGXXxcXFxcdURERkJcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREU4XFxcXHVEREVBXFxcXHVEREVDXFxcXHVEREVFXFxcXHVEREYzXFxcXHVEREZBXXxcXFxcdURERkNcXFxcdUQ4M0NbXFxcXHVEREVCXFxcXHVEREY4XXxcXFxcdURERkRcXFxcdUQ4M0NcXFxcdURERjB8XFxcXHVEREZFXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERGOV18XFxcXHVEREZGXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERGMlxcXFx1RERGQ118XFxcXHVERjQ0KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVERkVCKT98XFxcXHVERjRCKD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVERkU5KT98XFxcXHVERkMzKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT8oPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjQwXFxcXHUyNjQyXVxcXFx1RkUwRj8oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98XFxcXHUyN0ExXFxcXHVGRTBGPykpP3xcXFxcdURGRjNcXFxcdUZFMEY/KD86XFxcXHUyMDBEKD86XFxcXHUyNkE3XFxcXHVGRTBGP3xcXFxcdUQ4M0NcXFxcdURGMDgpKT98XFxcXHVERkY0KD86XFxcXHUyMDBEXFxcXHUyNjIwXFxcXHVGRTBGP3xcXFxcdURCNDBcXFxcdURDNjdcXFxcdURCNDBcXFxcdURDNjJcXFxcdURCNDAoPzpcXFxcdURDNjVcXFxcdURCNDBcXFxcdURDNkVcXFxcdURCNDBcXFxcdURDNjd8XFxcXHVEQzczXFxcXHVEQjQwXFxcXHVEQzYzXFxcXHVEQjQwXFxcXHVEQzc0fFxcXFx1REM3N1xcXFx1REI0MFxcXFx1REM2Q1xcXFx1REI0MFxcXFx1REM3MylcXFxcdURCNDBcXFxcdURDN0YpPyl8XFxcXHVEODNEKD86W1xcXFx1REMzRlxcXFx1RENGRFxcXFx1REQ0OVxcXFx1REQ0QVxcXFx1REQ2RlxcXFx1REQ3MFxcXFx1REQ3M1xcXFx1REQ3Ni1cXFxcdURENzlcXFxcdUREODdcXFxcdUREOEEtXFxcXHVERDhEXFxcXHVEREE1XFxcXHVEREE4XFxcXHVEREIxXFxcXHVEREIyXFxcXHVEREJDXFxcXHVEREMyLVxcXFx1RERDNFxcXFx1REREMS1cXFxcdURERDNcXFxcdUREREMtXFxcXHVERERFXFxcXHVEREUxXFxcXHVEREUzXFxcXHVEREU4XFxcXHVEREVGXFxcXHVEREYzXFxcXHVEREZBXFxcXHVERUNCXFxcXHVERUNELVxcXFx1REVDRlxcXFx1REVFMC1cXFxcdURFRTVcXFxcdURFRTlcXFxcdURFRjBcXFxcdURFRjNdXFxcXHVGRTBGP3xbXFxcXHVEQzQyXFxcXHVEQzQzXFxcXHVEQzQ2LVxcXFx1REM1MFxcXFx1REM2NlxcXFx1REM2N1xcXFx1REM2Qi1cXFxcdURDNkRcXFxcdURDNzJcXFxcdURDNzQtXFxcXHVEQzc2XFxcXHVEQzc4XFxcXHVEQzdDXFxcXHVEQzgzXFxcXHVEQzg1XFxcXHVEQzhGXFxcXHVEQzkxXFxcXHVEQ0FBXFxcXHVERDdBXFxcXHVERDk1XFxcXHVERDk2XFxcXHVERTRDXFxcXHVERTRGXFxcXHVERUMwXFxcXHVERUNDXSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/fFtcXFxcdURDNkVcXFxcdURDNzBcXFxcdURDNzFcXFxcdURDNzNcXFxcdURDNzdcXFxcdURDODFcXFxcdURDODJcXFxcdURDODZcXFxcdURDODdcXFxcdURFNDUtXFxcXHVERTQ3XFxcXHVERTRCXFxcXHVERTREXFxcXHVERTRFXFxcXHVERUEzXFxcXHVERUI0XFxcXHVERUI1XSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98W1xcXFx1REQ3NFxcXFx1REQ5MF0oPzpcXFxcdUZFMEZ8XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT98W1xcXFx1REMwMC1cXFxcdURDMDdcXFxcdURDMDktXFxcXHVEQzE0XFxcXHVEQzE2LVxcXFx1REMyNVxcXFx1REMyNy1cXFxcdURDM0FcXFxcdURDM0MtXFxcXHVEQzNFXFxcXHVEQzQwXFxcXHVEQzQ0XFxcXHVEQzQ1XFxcXHVEQzUxLVxcXFx1REM2NVxcXFx1REM2QVxcXFx1REM3OS1cXFxcdURDN0JcXFxcdURDN0QtXFxcXHVEQzgwXFxcXHVEQzg0XFxcXHVEQzg4LVxcXFx1REM4RVxcXFx1REM5MFxcXFx1REM5Mi1cXFxcdURDQTlcXFxcdURDQUItXFxcXHVEQ0ZDXFxcXHVEQ0ZGLVxcXFx1REQzRFxcXFx1REQ0Qi1cXFxcdURENEVcXFxcdURENTAtXFxcXHVERDY3XFxcXHVEREE0XFxcXHVEREZCLVxcXFx1REUyRFxcXFx1REUyRi1cXFxcdURFMzRcXFxcdURFMzctXFxcXHVERTQxXFxcXHVERTQzXFxcXHVERTQ0XFxcXHVERTQ4LVxcXFx1REU0QVxcXFx1REU4MC1cXFxcdURFQTJcXFxcdURFQTQtXFxcXHVERUIzXFxcXHVERUI3LVxcXFx1REVCRlxcXFx1REVDMS1cXFxcdURFQzVcXFxcdURFRDAtXFxcXHVERUQyXFxcXHVERUQ1LVxcXFx1REVEN1xcXFx1REVEQy1cXFxcdURFREZcXFxcdURFRUJcXFxcdURFRUNcXFxcdURFRjQtXFxcXHVERUZDXFxcXHVERkUwLVxcXFx1REZFQlxcXFx1REZGMF18XFxcXHVEQzA4KD86XFxcXHUyMDBEXFxcXHUyQjFCKT98XFxcXHVEQzE1KD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREJBKT98XFxcXHVEQzI2KD86XFxcXHUyMDBEKD86XFxcXHUyQjFCfFxcXFx1RDgzRFxcXFx1REQyNSkpP3xcXFxcdURDM0IoPzpcXFxcdTIwMERcXFxcdTI3NDRcXFxcdUZFMEY/KT98XFxcXHVEQzQxXFxcXHVGRTBGPyg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RERFOFxcXFx1RkUwRj8pP3xcXFxcdURDNjgoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4fFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldXFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPyl8W1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPyl8XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdKSl8XFxcXHVEODNDKD86XFxcXHVERkZCKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0QpP1xcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQy1cXFxcdURGRkZdKSkpP3xcXFxcdURGRkMoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RcXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZELVxcXFx1REZGRl0pKSk/fFxcXFx1REZGRCg/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEKT9cXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkJcXFxcdURGRkNcXFxcdURGRkVcXFxcdURGRkZdKSkpP3xcXFxcdURGRkUoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RcXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRFxcXFx1REZGRl0pKSk/fFxcXFx1REZGRig/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEKT9cXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZFXSkpKT8pKT98XFxcXHVEQzY5KD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0QpP1tcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRCg/OltcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1REM2Nig/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2Nik/fFxcXFx1REM2Nyg/OlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjZcXFxcdURDNjddKT98XFxcXHVEQzY5XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPykpfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXSkpfFxcXFx1RDgzQyg/OlxcXFx1REZGQig/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86W1xcXFx1REM2OFxcXFx1REM2OV18XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV0pXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XVxcXFx1RDgzQ1tcXFxcdURGRkMtXFxcXHVERkZGXSkpKT98XFxcXHVERkZDKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpbXFxcXHVEQzY4XFxcXHVEQzY5XXxcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XSlcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldXFxcXHVEODNDW1xcXFx1REZGQlxcXFx1REZGRC1cXFxcdURGRkZdKSkpP3xcXFxcdURGRkQoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldKVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV1cXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZDXFxcXHVERkZFXFxcXHVERkZGXSkpKT98XFxcXHVERkZFKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpbXFxcXHVEQzY4XFxcXHVEQzY5XXxcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XSlcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkRcXFxcdURGRkZdKSkpP3xcXFxcdURGRkYoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldKVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV1cXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRV0pKSk/KSk/fFxcXFx1REM2Rig/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFxcXFx1REQ3NSg/OlxcXFx1RkUwRnxcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pPyg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFxcXFx1REUyRSg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RENBOCk/fFxcXFx1REUzNSg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RENBQik/fFxcXFx1REUzNig/OlxcXFx1MjAwRFxcXFx1RDgzQ1xcXFx1REYyQlxcXFx1RkUwRj8pP3xcXFxcdURFNDIoPzpcXFxcdTIwMERbXFxcXHUyMTk0XFxcXHUyMTk1XVxcXFx1RkUwRj8pP3xcXFxcdURFQjYoPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pPyg/OlxcXFx1MjAwRCg/OltcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xcXFxcdTI3QTFcXFxcdUZFMEY/KSk/KXxcXFxcdUQ4M0UoPzpbXFxcXHVERDBDXFxcXHVERDBGXFxcXHVERDE4LVxcXFx1REQxRlxcXFx1REQzMC1cXFxcdUREMzRcXFxcdUREMzZcXFxcdURENzdcXFxcdUREQjVcXFxcdUREQjZcXFxcdUREQkJcXFxcdURERDJcXFxcdURERDNcXFxcdURERDVcXFxcdURFQzMtXFxcXHVERUM1XFxcXHVERUYwXFxcXHVERUYyLVxcXFx1REVGOF0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pP3xbXFxcXHVERDI2XFxcXHVERDM1XFxcXHVERDM3LVxcXFx1REQzOVxcXFx1REQzRFxcXFx1REQzRVxcXFx1RERCOFxcXFx1RERCOVxcXFx1RERDRFxcXFx1RERDRlxcXFx1RERENFxcXFx1RERENi1cXFxcdURERERdKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT8oPzpcXFxcdTIwMERbXFxcXHUyNjQwXFxcXHUyNjQyXVxcXFx1RkUwRj8pP3xbXFxcXHVERERFXFxcXHVERERGXSg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFtcXFxcdUREMERcXFxcdUREMEVcXFxcdUREMTAtXFxcXHVERDE3XFxcXHVERDIwLVxcXFx1REQyNVxcXFx1REQyNy1cXFxcdUREMkZcXFxcdUREM0FcXFxcdUREM0YtXFxcXHVERDQ1XFxcXHVERDQ3LVxcXFx1REQ3NlxcXFx1REQ3OC1cXFxcdUREQjRcXFxcdUREQjdcXFxcdUREQkFcXFxcdUREQkMtXFxcXHVERENDXFxcXHVEREQwXFxcXHVEREUwLVxcXFx1RERGRlxcXFx1REU3MC1cXFxcdURFN0NcXFxcdURFODAtXFxcXHVERTg4XFxcXHVERTkwLVxcXFx1REVCRFxcXFx1REVCRi1cXFxcdURFQzJcXFxcdURFQ0UtXFxcXHVERURCXFxcXHVERUUwLVxcXFx1REVFOF18XFxcXHVERDNDKD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/fFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/fFxcXFx1RERDRSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEKD86W1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFxcXFx1MjdBMVxcXFx1RkUwRj8pKT98XFxcXHVEREQxKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGODRcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDF8XFxcXHVEREQxXFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQyKD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQyKT98XFxcXHVEREQyKD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQyKT8pKXxcXFxcdUQ4M0MoPzpcXFxcdURGRkIoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRCg/OlxcXFx1RDgzRFxcXFx1REM4QlxcXFx1MjAwRCk/XFxcXHVEODNFXFxcXHVEREQxXFxcXHVEODNDW1xcXFx1REZGQy1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGODRcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pKSk/fFxcXFx1REZGQyg/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEKD86XFxcXHVEODNEXFxcXHVEQzhCXFxcXHUyMDBEKT9cXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZELVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY4NFxcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSkpKT98XFxcXHVERkZEKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMEQoPzpcXFxcdUQ4M0RcXFxcdURDOEJcXFxcdTIwMEQpP1xcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkJcXFxcdURGRkNcXFxcdURGRkVcXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGODRcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pKSk/fFxcXFx1REZGRSg/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEKD86XFxcXHVEODNEXFxcXHVEQzhCXFxcXHUyMDBEKT9cXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRFxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY4NFxcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSkpKT98XFxcXHVERkZGKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMEQoPzpcXFxcdUQ4M0RcXFxcdURDOEJcXFxcdTIwMEQpP1xcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZFXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjg0XFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQxXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKSkpPykpP3xcXFxcdURFRjEoPzpcXFxcdUQ4M0MoPzpcXFxcdURGRkIoPzpcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURFRjJcXFxcdUQ4M0NbXFxcXHVERkZDLVxcXFx1REZGRl0pP3xcXFxcdURGRkMoPzpcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURFRjJcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZELVxcXFx1REZGRl0pP3xcXFxcdURGRkQoPzpcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURFRjJcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZDXFxcXHVERkZFXFxcXHVERkZGXSk/fFxcXFx1REZGRSg/OlxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REVGMlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZEXFxcXHVERkZGXSk/fFxcXFx1REZGRig/OlxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REVGMlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZFXSk/KSk/KS9nO2Z1bmN0aW9uIE5pKG4pe3JldHVybiBuPT1udWxsP246bi5zaGlmdFRvKFxcXCJ5ZWFyc1xcXCIsXFxcIm1vbnRoc1xcXCIsXFxcIndlZWtzXFxcIixcXFwiZGF5c1xcXCIsXFxcImhvdXJzXFxcIixcXFwibWludXRlc1xcXCIsXFxcInNlY29uZHNcXFwiLFxcXCJtaWxsaXNlY29uZHNcXFwiKS5ub3JtYWxpemUoKX1mdW5jdGlvbiBfYShuLGUsdCxyKXtyZXR1cm4gbi5zZWNvbmQ9PTAmJm4ubWludXRlPT0wJiZuLmhvdXI9PTA/bi50b0xvY2FsKCkudG9Gb3JtYXQoZSx7bG9jYWxlOnJ9KTpuLnRvTG9jYWwoKS50b0Zvcm1hdCh0LHtsb2NhbGU6cn0pfWZ1bmN0aW9uIEJhKG4pe249Tmkobik7bGV0IGU9XFxcIlxcXCI7cmV0dXJuIG4ueWVhcnMmJihlKz1gJHtuLnllYXJzfSB5ZWFycywgYCksbi5tb250aHMmJihlKz1gJHtuLm1vbnRoc30gbW9udGhzLCBgKSxuLndlZWtzJiYoZSs9YCR7bi53ZWVrc30gd2Vla3MsIGApLG4uZGF5cyYmKGUrPWAke24uZGF5c30gZGF5cywgYCksbi5ob3VycyYmKGUrPWAke24uaG91cnN9IGhvdXJzLCBgKSxuLm1pbnV0ZXMmJihlKz1gJHtuLm1pbnV0ZXN9IG1pbnV0ZXMsIGApLG4uc2Vjb25kcyYmKGUrPWAke01hdGgucm91bmQobi5zZWNvbmRzKX0gc2Vjb25kcywgYCksbi5taWxsaXNlY29uZHMmJihlKz1gJHtNYXRoLnJvdW5kKG4ubWlsbGlzZWNvbmRzKX0gbXMsIGApLGUuZW5kc1dpdGgoXFxcIiwgXFxcIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMikpLGV9ZnVuY3Rpb24gVG4obil7cmV0dXJuIG4uaW5jbHVkZXMoXFxcIi9cXFwiKSYmKG49bi5zdWJzdHJpbmcobi5sYXN0SW5kZXhPZihcXFwiL1xcXCIpKzEpKSxuLmVuZHNXaXRoKFxcXCIubWRcXFwiKSYmKG49bi5zdWJzdHJpbmcoMCxuLmxlbmd0aC0zKSksbn1mdW5jdGlvbiBQYShuKXtyZXR1cm4gbi5pbmNsdWRlcyhcXFwiLlxcXCIpP24uc3Vic3RyaW5nKG4ubGFzdEluZGV4T2YoXFxcIi5cXFwiKSsxKTpcXFwiXFxcIn12YXIgQmM9Z3QuYWx0KGd0LnJlZ2V4KG5ldyBSZWdFeHAod24oKSxcXFwiXFxcIikpLGd0LnJlZ2V4KC9bMC05XFxcXHB7TGV0dGVyfV8tXSsvdSksZ3Qud2hpdGVzcGFjZS5tYXAobj0+XFxcIiBcXFwiKSxndC5hbnkubWFwKG49PlxcXCIgXFxcIikpLm1hbnkoKS5tYXAobj0+bi5qb2luKFxcXCJcXFwiKS5zcGxpdCgvXFxcXHMrLykuam9pbihcXFwiIFxcXCIpLnRyaW0oKSk7ZnVuY3Rpb24gJGEobil7cmV0dXJuIEJjLnRyeVBhcnNlKG4pfXZhciBlZT1jbGFzc3tzdGF0aWMgZmlsZShlLHQ9ITEscil7cmV0dXJuIG5ldyBlZSh7cGF0aDplLGVtYmVkOnQsZGlzcGxheTpyLHN1YnBhdGg6dm9pZCAwLHR5cGU6XFxcImZpbGVcXFwifSl9c3RhdGljIGluZmVyKGUsdD0hMSxyKXtpZihlLmluY2x1ZGVzKFxcXCIjXlxcXCIpKXtsZXQgcz1lLnNwbGl0KFxcXCIjXlxcXCIpO3JldHVybiBlZS5ibG9jayhzWzBdLHNbMV0sdCxyKX1lbHNlIGlmKGUuaW5jbHVkZXMoXFxcIiNcXFwiKSl7bGV0IHM9ZS5zcGxpdChcXFwiI1xcXCIpO3JldHVybiBlZS5oZWFkZXIoc1swXSxzWzFdLHQscil9ZWxzZSByZXR1cm4gZWUuZmlsZShlLHQscil9c3RhdGljIGhlYWRlcihlLHQscixzKXtyZXR1cm4gbmV3IGVlKHtwYXRoOmUsZW1iZWQ6cixkaXNwbGF5OnMsc3VicGF0aDokYSh0KSx0eXBlOlxcXCJoZWFkZXJcXFwifSl9c3RhdGljIGJsb2NrKGUsdCxyLHMpe3JldHVybiBuZXcgZWUoe3BhdGg6ZSxlbWJlZDpyLGRpc3BsYXk6cyxzdWJwYXRoOnQsdHlwZTpcXFwiYmxvY2tcXFwifSl9c3RhdGljIGZyb21PYmplY3QoZSl7cmV0dXJuIG5ldyBlZShlKX1zdGF0aWMgcGFyc2VJbm5lcihlKXtsZXRbdCxyXT1QYyhlKTtyZXR1cm4gZWUuaW5mZXIodCwhMSxyKX1jb25zdHJ1Y3RvcihlKXtPYmplY3QuYXNzaWduKHRoaXMsZSl9d2l0aFBhdGgoZSl7cmV0dXJuIG5ldyBlZShPYmplY3QuYXNzaWduKHt9LHRoaXMse3BhdGg6ZX0pKX13aXRoRGlzcGxheShlKXtyZXR1cm4gbmV3IGVlKE9iamVjdC5hc3NpZ24oe30sdGhpcyx7ZGlzcGxheTplfSkpfXdpdGhFbWJlZChlKXtyZXR1cm4gdGhpcy5lbWJlZD09ZT90aGlzOm5ldyBlZShPYmplY3QuYXNzaWduKHt9LHRoaXMse2VtYmVkOmV9KSl9d2l0aEhlYWRlcihlKXtyZXR1cm4gZWUuaGVhZGVyKHRoaXMucGF0aCxlLHRoaXMuZW1iZWQsdGhpcy5kaXNwbGF5KX13aXRoQmxvY2soZSl7cmV0dXJuIGVlLmJsb2NrKHRoaXMucGF0aCxlLHRoaXMuZW1iZWQsdGhpcy5kaXNwbGF5KX1lcXVhbHMoZSl7cmV0dXJuIGU9PW51bGx8fGU9PW51bGw/ITE6dGhpcy5wYXRoPT1lLnBhdGgmJnRoaXMudHlwZT09ZS50eXBlJiZ0aGlzLnN1YnBhdGg9PWUuc3VicGF0aH10b1N0cmluZygpe3JldHVybiB0aGlzLm1hcmtkb3duKCl9dG9PYmplY3QoKXtyZXR1cm57cGF0aDp0aGlzLnBhdGgsdHlwZTp0aGlzLnR5cGUsc3VicGF0aDp0aGlzLnN1YnBhdGgsZGlzcGxheTp0aGlzLmRpc3BsYXksZW1iZWQ6dGhpcy5lbWJlZH19dG9GaWxlKCl7cmV0dXJuIGVlLmZpbGUodGhpcy5wYXRoLHRoaXMuZW1iZWQsdGhpcy5kaXNwbGF5KX10b0VtYmVkKCl7cmV0dXJuIHRoaXMud2l0aEVtYmVkKCEwKX1mcm9tRW1iZWQoKXtyZXR1cm4gdGhpcy53aXRoRW1iZWQoITEpfW1hcmtkb3duKCl7bGV0IGU9KHRoaXMuZW1iZWQ/XFxcIiFcXFwiOlxcXCJcXFwiKStcXFwiW1tcXFwiK3RoaXMub2JzaWRpYW5MaW5rKCk7cmV0dXJuIGUrPVxcXCJ8XFxcIixlKz10aGlzLmRpc3BsYXlPckRlZmF1bHQoKSxlKz1cXFwiXV1cXFwiLGV9ZGlzcGxheU9yRGVmYXVsdCgpe2lmKHRoaXMuZGlzcGxheSlyZXR1cm4gdGhpcy5kaXNwbGF5O3tsZXQgZT1Ubih0aGlzLnBhdGgpO3JldHVybih0aGlzLnR5cGU9PVxcXCJoZWFkZXJcXFwifHx0aGlzLnR5cGU9PVxcXCJibG9ja1xcXCIpJiYoZSs9XFxcIiA+IFxcXCIrdGhpcy5zdWJwYXRoKSxlfX1vYnNpZGlhbkxpbmsoKXt2YXIgdCxyO2xldCBlPXRoaXMucGF0aC5yZXBsYWNlKFxcXCJ8XFxcIixcXFwiXFxcXFxcXFx8XFxcIik7cmV0dXJuIHRoaXMudHlwZT09XFxcImhlYWRlclxcXCI/ZStcXFwiI1xcXCIrKCh0PXRoaXMuc3VicGF0aCk9PW51bGw/dm9pZCAwOnQucmVwbGFjZShcXFwifFxcXCIsXFxcIlxcXFxcXFxcfFxcXCIpKTp0aGlzLnR5cGU9PVxcXCJibG9ja1xcXCI/ZStcXFwiI15cXFwiKygocj10aGlzLnN1YnBhdGgpPT1udWxsP3ZvaWQgMDpyLnJlcGxhY2UoXFxcInxcXFwiLFxcXCJcXFxcXFxcXHxcXFwiKSk6ZX1maWxlTmFtZSgpe3JldHVybiBUbih0aGlzLnBhdGgpfX07ZnVuY3Rpb24gUGMobil7bGV0IGU9LTE7Zm9yKDsoZT1uLmluZGV4T2YoXFxcInxcXFwiLGUrMSkpPj0wOylpZighKGU+MCYmbltlLTFdPT1cXFwiXFxcXFxcXFxcXFwiKSlyZXR1cm5bbi5zdWJzdHJpbmcoMCxlKS5yZXBsYWNlKC9cXFxcXFxcXFxcXFx8L2csXFxcInxcXFwiKSxuLnN1YnN0cmluZyhlKzEpXTtyZXR1cm5bbi5yZXBsYWNlKC9cXFxcXFxcXFxcXFx8L2csXFxcInxcXFwiKSx2b2lkIDBdfXZhciBycz1TeW1ib2wuZm9yKFxcXCJ5YW1sLmFsaWFzXFxcIiksc3M9U3ltYm9sLmZvcihcXFwieWFtbC5kb2N1bWVudFxcXCIpLEtlPVN5bWJvbC5mb3IoXFxcInlhbWwubWFwXFxcIiksTGk9U3ltYm9sLmZvcihcXFwieWFtbC5wYWlyXFxcIiksUGU9U3ltYm9sLmZvcihcXFwieWFtbC5zY2FsYXJcXFwiKSxidD1TeW1ib2wuZm9yKFxcXCJ5YW1sLnNlcVxcXCIpLGtlPVN5bWJvbC5mb3IoXFxcInlhbWwubm9kZS50eXBlXFxcIiksSmU9bj0+ISFuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm5ba2VdPT09cnMsRXQ9bj0+ISFuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm5ba2VdPT09c3MsemU9bj0+ISFuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm5ba2VdPT09S2UsSD1uPT4hIW4mJnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIiYmbltrZV09PT1MaSxXPW49PiEhbiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiZuW2tlXT09PVBlLFllPW49PiEhbiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiZuW2tlXT09PWJ0O2Z1bmN0aW9uIEcobil7aWYobiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiKXN3aXRjaChuW2tlXSl7Y2FzZSBLZTpjYXNlIGJ0OnJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEsobil7aWYobiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiKXN3aXRjaChuW2tlXSl7Y2FzZSByczpjYXNlIEtlOmNhc2UgUGU6Y2FzZSBidDpyZXR1cm4hMH1yZXR1cm4hMX12YXIgUmE9bj0+KFcobil8fEcobikpJiYhIW4uYW5jaG9yO3ZhciBPZT1TeW1ib2woXFxcImJyZWFrIHZpc2l0XFxcIiksamE9U3ltYm9sKFxcXCJza2lwIGNoaWxkcmVuXFxcIiksc3Q9U3ltYm9sKFxcXCJyZW1vdmUgbm9kZVxcXCIpO2Z1bmN0aW9uIEdlKG4sZSl7bGV0IHQ9VmEoZSk7RXQobik/U24obnVsbCxuLmNvbnRlbnRzLHQsT2JqZWN0LmZyZWV6ZShbbl0pKT09PXN0JiYobi5jb250ZW50cz1udWxsKTpTbihudWxsLG4sdCxPYmplY3QuZnJlZXplKFtdKSl9R2UuQlJFQUs9T2U7R2UuU0tJUD1qYTtHZS5SRU1PVkU9c3Q7ZnVuY3Rpb24gU24obixlLHQscil7bGV0IHM9cWEobixlLHQscik7aWYoSyhzKXx8SChzKSlyZXR1cm4gVWEobixyLHMpLFNuKG4scyx0LHIpO2lmKHR5cGVvZiBzIT1cXFwic3ltYm9sXFxcIil7aWYoRyhlKSl7cj1PYmplY3QuZnJlZXplKHIuY29uY2F0KGUpKTtmb3IobGV0IGk9MDtpPGUuaXRlbXMubGVuZ3RoOysraSl7bGV0IG89U24oaSxlLml0ZW1zW2ldLHQscik7aWYodHlwZW9mIG89PVxcXCJudW1iZXJcXFwiKWk9by0xO2Vsc2V7aWYobz09PU9lKXJldHVybiBPZTtvPT09c3QmJihlLml0ZW1zLnNwbGljZShpLDEpLGktPTEpfX19ZWxzZSBpZihIKGUpKXtyPU9iamVjdC5mcmVlemUoci5jb25jYXQoZSkpO2xldCBpPVNuKFxcXCJrZXlcXFwiLGUua2V5LHQscik7aWYoaT09PU9lKXJldHVybiBPZTtpPT09c3QmJihlLmtleT1udWxsKTtsZXQgbz1TbihcXFwidmFsdWVcXFwiLGUudmFsdWUsdCxyKTtpZihvPT09T2UpcmV0dXJuIE9lO289PT1zdCYmKGUudmFsdWU9bnVsbCl9fXJldHVybiBzfWFzeW5jIGZ1bmN0aW9uIGlzKG4sZSl7bGV0IHQ9VmEoZSk7RXQobik/YXdhaXQga24obnVsbCxuLmNvbnRlbnRzLHQsT2JqZWN0LmZyZWV6ZShbbl0pKT09PXN0JiYobi5jb250ZW50cz1udWxsKTphd2FpdCBrbihudWxsLG4sdCxPYmplY3QuZnJlZXplKFtdKSl9aXMuQlJFQUs9T2U7aXMuU0tJUD1qYTtpcy5SRU1PVkU9c3Q7YXN5bmMgZnVuY3Rpb24ga24obixlLHQscil7bGV0IHM9YXdhaXQgcWEobixlLHQscik7aWYoSyhzKXx8SChzKSlyZXR1cm4gVWEobixyLHMpLGtuKG4scyx0LHIpO2lmKHR5cGVvZiBzIT1cXFwic3ltYm9sXFxcIil7aWYoRyhlKSl7cj1PYmplY3QuZnJlZXplKHIuY29uY2F0KGUpKTtmb3IobGV0IGk9MDtpPGUuaXRlbXMubGVuZ3RoOysraSl7bGV0IG89YXdhaXQga24oaSxlLml0ZW1zW2ldLHQscik7aWYodHlwZW9mIG89PVxcXCJudW1iZXJcXFwiKWk9by0xO2Vsc2V7aWYobz09PU9lKXJldHVybiBPZTtvPT09c3QmJihlLml0ZW1zLnNwbGljZShpLDEpLGktPTEpfX19ZWxzZSBpZihIKGUpKXtyPU9iamVjdC5mcmVlemUoci5jb25jYXQoZSkpO2xldCBpPWF3YWl0IGtuKFxcXCJrZXlcXFwiLGUua2V5LHQscik7aWYoaT09PU9lKXJldHVybiBPZTtpPT09c3QmJihlLmtleT1udWxsKTtsZXQgbz1hd2FpdCBrbihcXFwidmFsdWVcXFwiLGUudmFsdWUsdCxyKTtpZihvPT09T2UpcmV0dXJuIE9lO289PT1zdCYmKGUudmFsdWU9bnVsbCl9fXJldHVybiBzfWZ1bmN0aW9uIFZhKG4pe3JldHVybiB0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJihuLkNvbGxlY3Rpb258fG4uTm9kZXx8bi5WYWx1ZSk/T2JqZWN0LmFzc2lnbih7QWxpYXM6bi5Ob2RlLE1hcDpuLk5vZGUsU2NhbGFyOm4uTm9kZSxTZXE6bi5Ob2RlfSxuLlZhbHVlJiZ7TWFwOm4uVmFsdWUsU2NhbGFyOm4uVmFsdWUsU2VxOm4uVmFsdWV9LG4uQ29sbGVjdGlvbiYme01hcDpuLkNvbGxlY3Rpb24sU2VxOm4uQ29sbGVjdGlvbn0sbik6bn1mdW5jdGlvbiBxYShuLGUsdCxyKXt2YXIgcyxpLG8sYSx1O2lmKHR5cGVvZiB0PT1cXFwiZnVuY3Rpb25cXFwiKXJldHVybiB0KG4sZSxyKTtpZih6ZShlKSlyZXR1cm4ocz10Lk1hcCk9PW51bGw/dm9pZCAwOnMuY2FsbCh0LG4sZSxyKTtpZihZZShlKSlyZXR1cm4oaT10LlNlcSk9PW51bGw/dm9pZCAwOmkuY2FsbCh0LG4sZSxyKTtpZihIKGUpKXJldHVybihvPXQuUGFpcik9PW51bGw/dm9pZCAwOm8uY2FsbCh0LG4sZSxyKTtpZihXKGUpKXJldHVybihhPXQuU2NhbGFyKT09bnVsbD92b2lkIDA6YS5jYWxsKHQsbixlLHIpO2lmKEplKGUpKXJldHVybih1PXQuQWxpYXMpPT1udWxsP3ZvaWQgMDp1LmNhbGwodCxuLGUscil9ZnVuY3Rpb24gVWEobixlLHQpe2xldCByPWVbZS5sZW5ndGgtMV07aWYoRyhyKSlyLml0ZW1zW25dPXQ7ZWxzZSBpZihIKHIpKW49PT1cXFwia2V5XFxcIj9yLmtleT10OnIudmFsdWU9dDtlbHNlIGlmKEV0KHIpKXIuY29udGVudHM9dDtlbHNle2xldCBzPUplKHIpP1xcXCJhbGlhc1xcXCI6XFxcInNjYWxhclxcXCI7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVwbGFjZSBub2RlIHdpdGggJHtzfSBwYXJlbnRgKX19dmFyICRjPXtcXFwiIVxcXCI6XFxcIiUyMVxcXCIsXFxcIixcXFwiOlxcXCIlMkNcXFwiLFxcXCJbXFxcIjpcXFwiJTVCXFxcIixcXFwiXVxcXCI6XFxcIiU1RFxcXCIsXFxcIntcXFwiOlxcXCIlN0JcXFwiLFxcXCJ9XFxcIjpcXFwiJTdEXFxcIn0sUmM9bj0+bi5yZXBsYWNlKC9bISxbXFxcXF17fV0vZyxlPT4kY1tlXSkscGU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRvY1N0YXJ0PW51bGwsdGhpcy5kb2NFbmQ9ITEsdGhpcy55YW1sPU9iamVjdC5hc3NpZ24oe30scGUuZGVmYXVsdFlhbWwsZSksdGhpcy50YWdzPU9iamVjdC5hc3NpZ24oe30scGUuZGVmYXVsdFRhZ3MsdCl9Y2xvbmUoKXtsZXQgZT1uZXcgcGUodGhpcy55YW1sLHRoaXMudGFncyk7cmV0dXJuIGUuZG9jU3RhcnQ9dGhpcy5kb2NTdGFydCxlfWF0RG9jdW1lbnQoKXtsZXQgZT1uZXcgcGUodGhpcy55YW1sLHRoaXMudGFncyk7c3dpdGNoKHRoaXMueWFtbC52ZXJzaW9uKXtjYXNlXFxcIjEuMVxcXCI6dGhpcy5hdE5leHREb2N1bWVudD0hMDticmVhaztjYXNlXFxcIjEuMlxcXCI6dGhpcy5hdE5leHREb2N1bWVudD0hMSx0aGlzLnlhbWw9e2V4cGxpY2l0OnBlLmRlZmF1bHRZYW1sLmV4cGxpY2l0LHZlcnNpb246XFxcIjEuMlxcXCJ9LHRoaXMudGFncz1PYmplY3QuYXNzaWduKHt9LHBlLmRlZmF1bHRUYWdzKTticmVha31yZXR1cm4gZX1hZGQoZSx0KXt0aGlzLmF0TmV4dERvY3VtZW50JiYodGhpcy55YW1sPXtleHBsaWNpdDpwZS5kZWZhdWx0WWFtbC5leHBsaWNpdCx2ZXJzaW9uOlxcXCIxLjFcXFwifSx0aGlzLnRhZ3M9T2JqZWN0LmFzc2lnbih7fSxwZS5kZWZhdWx0VGFncyksdGhpcy5hdE5leHREb2N1bWVudD0hMSk7bGV0IHI9ZS50cmltKCkuc3BsaXQoL1sgXFxcXHRdKy8pLHM9ci5zaGlmdCgpO3N3aXRjaChzKXtjYXNlXFxcIiVUQUdcXFwiOntpZihyLmxlbmd0aCE9PTImJih0KDAsXFxcIiVUQUcgZGlyZWN0aXZlIHNob3VsZCBjb250YWluIGV4YWN0bHkgdHdvIHBhcnRzXFxcIiksci5sZW5ndGg8MikpcmV0dXJuITE7bGV0W2ksb109cjtyZXR1cm4gdGhpcy50YWdzW2ldPW8sITB9Y2FzZVxcXCIlWUFNTFxcXCI6e2lmKHRoaXMueWFtbC5leHBsaWNpdD0hMCxyLmxlbmd0aCE9PTEpcmV0dXJuIHQoMCxcXFwiJVlBTUwgZGlyZWN0aXZlIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25lIHBhcnRcXFwiKSwhMTtsZXRbaV09cjtpZihpPT09XFxcIjEuMVxcXCJ8fGk9PT1cXFwiMS4yXFxcIilyZXR1cm4gdGhpcy55YW1sLnZlcnNpb249aSwhMDt7bGV0IG89L15cXFxcZCtcXFxcLlxcXFxkKyQvLnRlc3QoaSk7cmV0dXJuIHQoNixgVW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uICR7aX1gLG8pLCExfX1kZWZhdWx0OnJldHVybiB0KDAsYFVua25vd24gZGlyZWN0aXZlICR7c31gLCEwKSwhMX19dGFnTmFtZShlLHQpe2lmKGU9PT1cXFwiIVxcXCIpcmV0dXJuXFxcIiFcXFwiO2lmKGVbMF0hPT1cXFwiIVxcXCIpcmV0dXJuIHQoYE5vdCBhIHZhbGlkIHRhZzogJHtlfWApLG51bGw7aWYoZVsxXT09PVxcXCI8XFxcIil7bGV0IG89ZS5zbGljZSgyLC0xKTtyZXR1cm4gbz09PVxcXCIhXFxcInx8bz09PVxcXCIhIVxcXCI/KHQoYFZlcmJhdGltIHRhZ3MgYXJlbid0IHJlc29sdmVkLCBzbyAke2V9IGlzIGludmFsaWQuYCksbnVsbCk6KGVbZS5sZW5ndGgtMV0hPT1cXFwiPlxcXCImJnQoXFxcIlZlcmJhdGltIHRhZ3MgbXVzdCBlbmQgd2l0aCBhID5cXFwiKSxvKX1sZXRbLHIsc109ZS5tYXRjaChuZXcgUmVnRXhwKFxcXCJeKC4qISkoW14hXSopJFxcXCIsXFxcInNcXFwiKSk7c3x8dChgVGhlICR7ZX0gdGFnIGhhcyBubyBzdWZmaXhgKTtsZXQgaT10aGlzLnRhZ3Nbcl07aWYoaSl0cnl7cmV0dXJuIGkrZGVjb2RlVVJJQ29tcG9uZW50KHMpfWNhdGNoKG8pe3JldHVybiB0KFN0cmluZyhvKSksbnVsbH1yZXR1cm4gcj09PVxcXCIhXFxcIj9lOih0KGBDb3VsZCBub3QgcmVzb2x2ZSB0YWc6ICR7ZX1gKSxudWxsKX10YWdTdHJpbmcoZSl7Zm9yKGxldFt0LHJdb2YgT2JqZWN0LmVudHJpZXModGhpcy50YWdzKSlpZihlLnN0YXJ0c1dpdGgocikpcmV0dXJuIHQrUmMoZS5zdWJzdHJpbmcoci5sZW5ndGgpKTtyZXR1cm4gZVswXT09PVxcXCIhXFxcIj9lOmAhPCR7ZX0+YH10b1N0cmluZyhlKXtsZXQgdD10aGlzLnlhbWwuZXhwbGljaXQ/W2AlWUFNTCAke3RoaXMueWFtbC52ZXJzaW9ufHxcXFwiMS4yXFxcIn1gXTpbXSxyPU9iamVjdC5lbnRyaWVzKHRoaXMudGFncykscztpZihlJiZyLmxlbmd0aD4wJiZLKGUuY29udGVudHMpKXtsZXQgaT17fTtHZShlLmNvbnRlbnRzLChvLGEpPT57SyhhKSYmYS50YWcmJihpW2EudGFnXT0hMCl9KSxzPU9iamVjdC5rZXlzKGkpfWVsc2Ugcz1bXTtmb3IobGV0W2ksb11vZiByKWk9PT1cXFwiISFcXFwiJiZvPT09XFxcInRhZzp5YW1sLm9yZywyMDAyOlxcXCJ8fCghZXx8cy5zb21lKGE9PmEuc3RhcnRzV2l0aChvKSkpJiZ0LnB1c2goYCVUQUcgJHtpfSAke299YCk7cmV0dXJuIHQuam9pbihgXFxuYCl9fTtwZS5kZWZhdWx0WWFtbD17ZXhwbGljaXQ6ITEsdmVyc2lvbjpcXFwiMS4yXFxcIn07cGUuZGVmYXVsdFRhZ3M9e1xcXCIhIVxcXCI6XFxcInRhZzp5YW1sLm9yZywyMDAyOlxcXCJ9O2Z1bmN0aW9uIG9zKG4pe2lmKC9bXFxcXHgwMC1cXFxceDE5XFxcXHMsW1xcXFxde31dLy50ZXN0KG4pKXtsZXQgdD1gQW5jaG9yIG11c3Qgbm90IGNvbnRhaW4gd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJhY3RlcnM6ICR7SlNPTi5zdHJpbmdpZnkobil9YDt0aHJvdyBuZXcgRXJyb3IodCl9cmV0dXJuITB9ZnVuY3Rpb24gQWkobil7bGV0IGU9bmV3IFNldDtyZXR1cm4gR2Uobix7VmFsdWUodCxyKXtyLmFuY2hvciYmZS5hZGQoci5hbmNob3IpfX0pLGV9ZnVuY3Rpb24gTWkobixlKXtmb3IobGV0IHQ9MTs7Kyt0KXtsZXQgcj1gJHtufSR7dH1gO2lmKCFlLmhhcyhyKSlyZXR1cm4gcn19ZnVuY3Rpb24gV2EobixlKXtsZXQgdD1bXSxyPW5ldyBNYXAscz1udWxsO3JldHVybntvbkFuY2hvcjppPT57dC5wdXNoKGkpLHN8fChzPUFpKG4pKTtsZXQgbz1NaShlLHMpO3JldHVybiBzLmFkZChvKSxvfSxzZXRBbmNob3JzOigpPT57Zm9yKGxldCBpIG9mIHQpe2xldCBvPXIuZ2V0KGkpO2lmKHR5cGVvZiBvPT1cXFwib2JqZWN0XFxcIiYmby5hbmNob3ImJihXKG8ubm9kZSl8fEcoby5ub2RlKSkpby5ub2RlLmFuY2hvcj1vLmFuY2hvcjtlbHNle2xldCBhPW5ldyBFcnJvcihcXFwiRmFpbGVkIHRvIHJlc29sdmUgcmVwZWF0ZWQgb2JqZWN0ICh0aGlzIHNob3VsZCBub3QgaGFwcGVuKVxcXCIpO3Rocm93IGEuc291cmNlPWksYX19fSxzb3VyY2VPYmplY3RzOnJ9fWZ1bmN0aW9uIHZ0KG4sZSx0LHIpe2lmKHImJnR5cGVvZiByPT1cXFwib2JqZWN0XFxcIilpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgcz0wLGk9ci5sZW5ndGg7czxpOysrcyl7bGV0IG89cltzXSxhPXZ0KG4scixTdHJpbmcocyksbyk7YT09PXZvaWQgMD9kZWxldGUgcltzXTphIT09byYmKHJbc109YSl9ZWxzZSBpZihyIGluc3RhbmNlb2YgTWFwKWZvcihsZXQgcyBvZiBBcnJheS5mcm9tKHIua2V5cygpKSl7bGV0IGk9ci5nZXQocyksbz12dChuLHIscyxpKTtvPT09dm9pZCAwP3IuZGVsZXRlKHMpOm8hPT1pJiZyLnNldChzLG8pfWVsc2UgaWYociBpbnN0YW5jZW9mIFNldClmb3IobGV0IHMgb2YgQXJyYXkuZnJvbShyKSl7bGV0IGk9dnQobixyLHMscyk7aT09PXZvaWQgMD9yLmRlbGV0ZShzKTppIT09cyYmKHIuZGVsZXRlKHMpLHIuYWRkKGkpKX1lbHNlIGZvcihsZXRbcyxpXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgbz12dChuLHIscyxpKTtvPT09dm9pZCAwP2RlbGV0ZSByW3NdOm8hPT1pJiYocltzXT1vKX1yZXR1cm4gbi5jYWxsKGUsdCxyKX1mdW5jdGlvbiBtZShuLGUsdCl7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbi5tYXAoKHIscyk9Pm1lKHIsU3RyaW5nKHMpLHQpKTtpZihuJiZ0eXBlb2Ygbi50b0pTT049PVxcXCJmdW5jdGlvblxcXCIpe2lmKCF0fHwhUmEobikpcmV0dXJuIG4udG9KU09OKGUsdCk7bGV0IHI9e2FsaWFzQ291bnQ6MCxjb3VudDoxLHJlczp2b2lkIDB9O3QuYW5jaG9ycy5zZXQobixyKSx0Lm9uQ3JlYXRlPWk9PntyLnJlcz1pLGRlbGV0ZSB0Lm9uQ3JlYXRlfTtsZXQgcz1uLnRvSlNPTihlLHQpO3JldHVybiB0Lm9uQ3JlYXRlJiZ0Lm9uQ3JlYXRlKHMpLHN9cmV0dXJuIHR5cGVvZiBuPT1cXFwiYmlnaW50XFxcIiYmISh0IT1udWxsJiZ0LmtlZXApP051bWJlcihuKTpufXZhciBJdD1jbGFzc3tjb25zdHJ1Y3RvcihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxrZSx7dmFsdWU6ZX0pfWNsb25lKCl7bGV0IGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGhpcykpO3JldHVybiB0aGlzLnJhbmdlJiYoZS5yYW5nZT10aGlzLnJhbmdlLnNsaWNlKCkpLGV9dG9KUyhlLHttYXBBc01hcDp0LG1heEFsaWFzQ291bnQ6cixvbkFuY2hvcjpzLHJldml2ZXI6aX09e30pe2lmKCFFdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJBIGRvY3VtZW50IGFyZ3VtZW50IGlzIHJlcXVpcmVkXFxcIik7bGV0IG89e2FuY2hvcnM6bmV3IE1hcCxkb2M6ZSxrZWVwOiEwLG1hcEFzTWFwOnQ9PT0hMCxtYXBLZXlXYXJuZWQ6ITEsbWF4QWxpYXNDb3VudDp0eXBlb2Ygcj09XFxcIm51bWJlclxcXCI/cjoxMDB9LGE9bWUodGhpcyxcXFwiXFxcIixvKTtpZih0eXBlb2Ygcz09XFxcImZ1bmN0aW9uXFxcIilmb3IobGV0e2NvdW50OnUscmVzOmx9b2Ygby5hbmNob3JzLnZhbHVlcygpKXMobCx1KTtyZXR1cm4gdHlwZW9mIGk9PVxcXCJmdW5jdGlvblxcXCI/dnQoaSx7XFxcIlxcXCI6YX0sXFxcIlxcXCIsYSk6YX19O3ZhciBGdD1jbGFzcyBleHRlbmRzIEl0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHJzKSx0aGlzLnNvdXJjZT1lLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFxcXCJ0YWdcXFwiLHtzZXQoKXt0aHJvdyBuZXcgRXJyb3IoXFxcIkFsaWFzIG5vZGVzIGNhbm5vdCBoYXZlIHRhZ3NcXFwiKX19KX1yZXNvbHZlKGUpe2xldCB0O3JldHVybiBHZShlLHtOb2RlOihyLHMpPT57aWYocz09PXRoaXMpcmV0dXJuIEdlLkJSRUFLO3MuYW5jaG9yPT09dGhpcy5zb3VyY2UmJih0PXMpfX0pLHR9dG9KU09OKGUsdCl7aWYoIXQpcmV0dXJue3NvdXJjZTp0aGlzLnNvdXJjZX07bGV0e2FuY2hvcnM6cixkb2M6cyxtYXhBbGlhc0NvdW50Oml9PXQsbz10aGlzLnJlc29sdmUocyk7aWYoIW8pe2xldCB1PWBVbnJlc29sdmVkIGFsaWFzICh0aGUgYW5jaG9yIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYWxpYXMpOiAke3RoaXMuc291cmNlfWA7dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKHUpfWxldCBhPXIuZ2V0KG8pO2lmKGF8fChtZShvLG51bGwsdCksYT1yLmdldChvKSksIWF8fGEucmVzPT09dm9pZCAwKXtsZXQgdT1cXFwiVGhpcyBzaG91bGQgbm90IGhhcHBlbjogQWxpYXMgYW5jaG9yIHdhcyBub3QgcmVzb2x2ZWQ/XFxcIjt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IodSl9aWYoaT49MCYmKGEuY291bnQrPTEsYS5hbGlhc0NvdW50PT09MCYmKGEuYWxpYXNDb3VudD1hcyhzLG8scikpLGEuY291bnQqYS5hbGlhc0NvdW50PmkpKXtsZXQgdT1cXFwiRXhjZXNzaXZlIGFsaWFzIGNvdW50IGluZGljYXRlcyBhIHJlc291cmNlIGV4aGF1c3Rpb24gYXR0YWNrXFxcIjt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IodSl9cmV0dXJuIGEucmVzfXRvU3RyaW5nKGUsdCxyKXtsZXQgcz1gKiR7dGhpcy5zb3VyY2V9YDtpZihlKXtpZihvcyh0aGlzLnNvdXJjZSksZS5vcHRpb25zLnZlcmlmeUFsaWFzT3JkZXImJiFlLmFuY2hvcnMuaGFzKHRoaXMuc291cmNlKSl7bGV0IGk9YFVucmVzb2x2ZWQgYWxpYXMgKHRoZSBhbmNob3IgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBhbGlhcyk6ICR7dGhpcy5zb3VyY2V9YDt0aHJvdyBuZXcgRXJyb3IoaSl9aWYoZS5pbXBsaWNpdEtleSlyZXR1cm5gJHtzfSBgfXJldHVybiBzfX07ZnVuY3Rpb24gYXMobixlLHQpe2lmKEplKGUpKXtsZXQgcj1lLnJlc29sdmUobikscz10JiZyJiZ0LmdldChyKTtyZXR1cm4gcz9zLmNvdW50KnMuYWxpYXNDb3VudDowfWVsc2UgaWYoRyhlKSl7bGV0IHI9MDtmb3IobGV0IHMgb2YgZS5pdGVtcyl7bGV0IGk9YXMobixzLHQpO2k+ciYmKHI9aSl9cmV0dXJuIHJ9ZWxzZSBpZihIKGUpKXtsZXQgcj1hcyhuLGUua2V5LHQpLHM9YXMobixlLnZhbHVlLHQpO3JldHVybiBNYXRoLm1heChyLHMpfXJldHVybiAxfXZhciB1cz1uPT4hbnx8dHlwZW9mIG4hPVxcXCJmdW5jdGlvblxcXCImJnR5cGVvZiBuIT1cXFwib2JqZWN0XFxcIixQPWNsYXNzIGV4dGVuZHMgSXR7Y29uc3RydWN0b3IoZSl7c3VwZXIoUGUpLHRoaXMudmFsdWU9ZX10b0pTT04oZSx0KXtyZXR1cm4gdCE9bnVsbCYmdC5rZWVwP3RoaXMudmFsdWU6bWUodGhpcy52YWx1ZSxlLHQpfXRvU3RyaW5nKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlKX19O1AuQkxPQ0tfRk9MREVEPVxcXCJCTE9DS19GT0xERURcXFwiO1AuQkxPQ0tfTElURVJBTD1cXFwiQkxPQ0tfTElURVJBTFxcXCI7UC5QTEFJTj1cXFwiUExBSU5cXFwiO1AuUVVPVEVfRE9VQkxFPVxcXCJRVU9URV9ET1VCTEVcXFwiO1AuUVVPVEVfU0lOR0xFPVxcXCJRVU9URV9TSU5HTEVcXFwiO3ZhciBqYz1cXFwidGFnOnlhbWwub3JnLDIwMDI6XFxcIjtmdW5jdGlvbiBWYyhuLGUsdCl7dmFyIHI7aWYoZSl7bGV0IHM9dC5maWx0ZXIobz0+by50YWc9PT1lKSxpPShyPXMuZmluZChvPT4hby5mb3JtYXQpKSE9bnVsbD9yOnNbMF07aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBUYWcgJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gaX1yZXR1cm4gdC5maW5kKHM9Pnt2YXIgaTtyZXR1cm4oKGk9cy5pZGVudGlmeSk9PW51bGw/dm9pZCAwOmkuY2FsbChzLG4pKSYmIXMuZm9ybWF0fSl9ZnVuY3Rpb24gd3QobixlLHQpe3ZhciBoLHAsZjtpZihFdChuKSYmKG49bi5jb250ZW50cyksSyhuKSlyZXR1cm4gbjtpZihIKG4pKXtsZXQgRj0ocD0oaD10LnNjaGVtYVtLZV0pLmNyZWF0ZU5vZGUpPT1udWxsP3ZvaWQgMDpwLmNhbGwoaCx0LnNjaGVtYSxudWxsLHQpO3JldHVybiBGLml0ZW1zLnB1c2gobiksRn0obiBpbnN0YW5jZW9mIFN0cmluZ3x8biBpbnN0YW5jZW9mIE51bWJlcnx8biBpbnN0YW5jZW9mIEJvb2xlYW58fHR5cGVvZiBCaWdJbnQhPVxcXCJ1bmRlZmluZWRcXFwiJiZuIGluc3RhbmNlb2YgQmlnSW50KSYmKG49bi52YWx1ZU9mKCkpO2xldHthbGlhc0R1cGxpY2F0ZU9iamVjdHM6cixvbkFuY2hvcjpzLG9uVGFnT2JqOmksc2NoZW1hOm8sc291cmNlT2JqZWN0czphfT10LHU7aWYociYmbiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiKXtpZih1PWEuZ2V0KG4pLHUpcmV0dXJuIHUuYW5jaG9yfHwodS5hbmNob3I9cyhuKSksbmV3IEZ0KHUuYW5jaG9yKTt1PXthbmNob3I6bnVsbCxub2RlOm51bGx9LGEuc2V0KG4sdSl9ZSE9bnVsbCYmZS5zdGFydHNXaXRoKFxcXCIhIVxcXCIpJiYoZT1qYytlLnNsaWNlKDIpKTtsZXQgbD1WYyhuLGUsby50YWdzKTtpZighbCl7aWYobiYmdHlwZW9mIG4udG9KU09OPT1cXFwiZnVuY3Rpb25cXFwiJiYobj1uLnRvSlNPTigpKSwhbnx8dHlwZW9mIG4hPVxcXCJvYmplY3RcXFwiKXtsZXQgRj1uZXcgUChuKTtyZXR1cm4gdSYmKHUubm9kZT1GKSxGfWw9biBpbnN0YW5jZW9mIE1hcD9vW0tlXTpTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KG4pP29bYnRdOm9bS2VdfWkmJihpKGwpLGRlbGV0ZSB0Lm9uVGFnT2JqKTtsZXQgZD1sIT1udWxsJiZsLmNyZWF0ZU5vZGU/bC5jcmVhdGVOb2RlKHQuc2NoZW1hLG4sdCk6dHlwZW9mKChmPWw9PW51bGw/dm9pZCAwOmwubm9kZUNsYXNzKT09bnVsbD92b2lkIDA6Zi5mcm9tKT09XFxcImZ1bmN0aW9uXFxcIj9sLm5vZGVDbGFzcy5mcm9tKHQuc2NoZW1hLG4sdCk6bmV3IFAobik7cmV0dXJuIGU/ZC50YWc9ZTpsLmRlZmF1bHR8fChkLnRhZz1sLnRhZyksdSYmKHUubm9kZT1kKSxkfWZ1bmN0aW9uIHByKG4sZSx0KXtsZXQgcj10O2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PTA7LS1zKXtsZXQgaT1lW3NdO2lmKHR5cGVvZiBpPT1cXFwibnVtYmVyXFxcIiYmTnVtYmVyLmlzSW50ZWdlcihpKSYmaT49MCl7bGV0IG89W107b1tpXT1yLHI9b31lbHNlIHI9bmV3IE1hcChbW2kscl1dKX1yZXR1cm4gd3Qocix2b2lkIDAse2FsaWFzRHVwbGljYXRlT2JqZWN0czohMSxrZWVwVW5kZWZpbmVkOiExLG9uQW5jaG9yOigpPT57dGhyb3cgbmV3IEVycm9yKFxcXCJUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBwbGVhc2UgcmVwb3J0IGEgYnVnLlxcXCIpfSxzY2hlbWE6bixzb3VyY2VPYmplY3RzOm5ldyBNYXB9KX12YXIgQ249bj0+bj09bnVsbHx8dHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiYhIW5bU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lLEp0PWNsYXNzIGV4dGVuZHMgSXR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcXFwic2NoZW1hXFxcIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMH0pfWNsb25lKGUpe2xldCB0PU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHRoaXMpKTtyZXR1cm4gZSYmKHQuc2NoZW1hPWUpLHQuaXRlbXM9dC5pdGVtcy5tYXAocj0+SyhyKXx8SChyKT9yLmNsb25lKGUpOnIpLHRoaXMucmFuZ2UmJih0LnJhbmdlPXRoaXMucmFuZ2Uuc2xpY2UoKSksdH1hZGRJbihlLHQpe2lmKENuKGUpKXRoaXMuYWRkKHQpO2Vsc2V7bGV0W3IsLi4uc109ZSxpPXRoaXMuZ2V0KHIsITApO2lmKEcoaSkpaS5hZGRJbihzLHQpO2Vsc2UgaWYoaT09PXZvaWQgMCYmdGhpcy5zY2hlbWEpdGhpcy5zZXQocixwcih0aGlzLnNjaGVtYSxzLHQpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0ICR7cn0uIFJlbWFpbmluZyBwYXRoOiAke3N9YCl9fWRlbGV0ZUluKGUpe2xldFt0LC4uLnJdPWU7aWYoci5sZW5ndGg9PT0wKXJldHVybiB0aGlzLmRlbGV0ZSh0KTtsZXQgcz10aGlzLmdldCh0LCEwKTtpZihHKHMpKXJldHVybiBzLmRlbGV0ZUluKHIpO3Rocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0ICR7dH0uIFJlbWFpbmluZyBwYXRoOiAke3J9YCl9Z2V0SW4oZSx0KXtsZXRbciwuLi5zXT1lLGk9dGhpcy5nZXQociwhMCk7cmV0dXJuIHMubGVuZ3RoPT09MD8hdCYmVyhpKT9pLnZhbHVlOmk6RyhpKT9pLmdldEluKHMsdCk6dm9pZCAwfWhhc0FsbE51bGxWYWx1ZXMoZSl7cmV0dXJuIHRoaXMuaXRlbXMuZXZlcnkodD0+e2lmKCFIKHQpKXJldHVybiExO2xldCByPXQudmFsdWU7cmV0dXJuIHI9PW51bGx8fGUmJlcocikmJnIudmFsdWU9PW51bGwmJiFyLmNvbW1lbnRCZWZvcmUmJiFyLmNvbW1lbnQmJiFyLnRhZ30pfWhhc0luKGUpe2xldFt0LC4uLnJdPWU7aWYoci5sZW5ndGg9PT0wKXJldHVybiB0aGlzLmhhcyh0KTtsZXQgcz10aGlzLmdldCh0LCEwKTtyZXR1cm4gRyhzKT9zLmhhc0luKHIpOiExfXNldEluKGUsdCl7bGV0W3IsLi4uc109ZTtpZihzLmxlbmd0aD09PTApdGhpcy5zZXQocix0KTtlbHNle2xldCBpPXRoaXMuZ2V0KHIsITApO2lmKEcoaSkpaS5zZXRJbihzLHQpO2Vsc2UgaWYoaT09PXZvaWQgMCYmdGhpcy5zY2hlbWEpdGhpcy5zZXQocixwcih0aGlzLnNjaGVtYSxzLHQpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWUFNTCBjb2xsZWN0aW9uIGF0ICR7cn0uIFJlbWFpbmluZyBwYXRoOiAke3N9YCl9fX07SnQubWF4Rmxvd1N0cmluZ1NpbmdsZUxpbmVMZW5ndGg9NjA7dmFyIEhhPW49Pm4ucmVwbGFjZSgvXig/ISQpKD86ICQpPy9nbSxcXFwiI1xcXCIpO2Z1bmN0aW9uICRlKG4sZSl7cmV0dXJuL15cXFxcbiskLy50ZXN0KG4pP24uc3Vic3RyaW5nKDEpOmU/bi5yZXBsYWNlKC9eKD8hICokKS9nbSxlKTpufXZhciBpdD0obixlLHQpPT5uLmVuZHNXaXRoKGBcXG5gKT8kZSh0LGUpOnQuaW5jbHVkZXMoYFxcbmApP2BcXG5gKyRlKHQsZSk6KG4uZW5kc1dpdGgoXFxcIiBcXFwiKT9cXFwiXFxcIjpcXFwiIFxcXCIpK3Q7dmFyIF9pPVxcXCJmbG93XFxcIixscz1cXFwiYmxvY2tcXFwiLG1yPVxcXCJxdW90ZWRcXFwiO2Z1bmN0aW9uIERyKG4sZSx0PVxcXCJmbG93XFxcIix7aW5kZW50QXRTdGFydDpyLGxpbmVXaWR0aDpzPTgwLG1pbkNvbnRlbnRXaWR0aDppPTIwLG9uRm9sZDpvLG9uT3ZlcmZsb3c6YX09e30pe2lmKCFzfHxzPDApcmV0dXJuIG47bGV0IHU9TWF0aC5tYXgoMStpLDErcy1lLmxlbmd0aCk7aWYobi5sZW5ndGg8PXUpcmV0dXJuIG47bGV0IGw9W10sZD17fSxoPXMtZS5sZW5ndGg7dHlwZW9mIHI9PVxcXCJudW1iZXJcXFwiJiYocj5zLU1hdGgubWF4KDIsaSk/bC5wdXNoKDApOmg9cy1yKTtsZXQgcCxmLEY9ITEsZz0tMSx5PS0xLFM9LTE7dD09PWxzJiYoZz1LYShuLGcsZS5sZW5ndGgpLGchPT0tMSYmKGg9Zyt1KSk7Zm9yKGxldCB2O3Y9bltnKz0xXTspe2lmKHQ9PT1tciYmdj09PVxcXCJcXFxcXFxcXFxcXCIpe3N3aXRjaCh5PWcsbltnKzFdKXtjYXNlXFxcInhcXFwiOmcrPTM7YnJlYWs7Y2FzZVxcXCJ1XFxcIjpnKz01O2JyZWFrO2Nhc2VcXFwiVVxcXCI6Zys9OTticmVhaztkZWZhdWx0OmcrPTF9Uz1nfWlmKHY9PT1gXFxuYCl0PT09bHMmJihnPUthKG4sZyxlLmxlbmd0aCkpLGg9ZytlLmxlbmd0aCt1LHA9dm9pZCAwO2Vsc2V7aWYodj09PVxcXCIgXFxcIiYmZiYmZiE9PVxcXCIgXFxcIiYmZiE9PWBcXG5gJiZmIT09XFxcIlxcdFxcXCIpe2xldCBEPW5bZysxXTtEJiZEIT09XFxcIiBcXFwiJiZEIT09YFxcbmAmJkQhPT1cXFwiXFx0XFxcIiYmKHA9Zyl9aWYoZz49aClpZihwKWwucHVzaChwKSxoPXArdSxwPXZvaWQgMDtlbHNlIGlmKHQ9PT1tcil7Zm9yKDtmPT09XFxcIiBcXFwifHxmPT09XFxcIlxcdFxcXCI7KWY9dix2PW5bZys9MV0sRj0hMDtsZXQgRD1nPlMrMT9nLTI6eS0xO2lmKGRbRF0pcmV0dXJuIG47bC5wdXNoKEQpLGRbRF09ITAsaD1EK3UscD12b2lkIDB9ZWxzZSBGPSEwfWY9dn1pZihGJiZhJiZhKCksbC5sZW5ndGg9PT0wKXJldHVybiBuO28mJm8oKTtsZXQgTz1uLnNsaWNlKDAsbFswXSk7Zm9yKGxldCB2PTA7djxsLmxlbmd0aDsrK3Ype2xldCBEPWxbdl0sdz1sW3YrMV18fG4ubGVuZ3RoO0Q9PT0wP089YFxcbiR7ZX0ke24uc2xpY2UoMCx3KX1gOih0PT09bXImJmRbRF0mJihPKz1gJHtuW0RdfVxcXFxcXFxcYCksTys9YFxcbiR7ZX0ke24uc2xpY2UoRCsxLHcpfWApfXJldHVybiBPfWZ1bmN0aW9uIEthKG4sZSx0KXtsZXQgcj1lLHM9ZSsxLGk9bltzXTtmb3IoO2k9PT1cXFwiIFxcXCJ8fGk9PT1cXFwiXFx0XFxcIjspaWYoZTxzK3QpaT1uWysrZV07ZWxzZXtkbyBpPW5bKytlXTt3aGlsZShpJiZpIT09YFxcbmApO3I9ZSxzPWUrMSxpPW5bc119cmV0dXJuIHJ9dmFyIGZzPShuLGUpPT4oe2luZGVudEF0U3RhcnQ6ZT9uLmluZGVudC5sZW5ndGg6bi5pbmRlbnRBdFN0YXJ0LGxpbmVXaWR0aDpuLm9wdGlvbnMubGluZVdpZHRoLG1pbkNvbnRlbnRXaWR0aDpuLm9wdGlvbnMubWluQ29udGVudFdpZHRofSksZHM9bj0+L14oJXwtLS18XFxcXC5cXFxcLlxcXFwuKS9tLnRlc3Qobik7ZnVuY3Rpb24gcWMobixlLHQpe2lmKCFlfHxlPDApcmV0dXJuITE7bGV0IHI9ZS10LHM9bi5sZW5ndGg7aWYoczw9cilyZXR1cm4hMTtmb3IobGV0IGk9MCxvPTA7aTxzOysraSlpZihuW2ldPT09YFxcbmApe2lmKGktbz5yKXJldHVybiEwO2lmKG89aSsxLHMtbzw9cilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiB5cihuLGUpe2xldCB0PUpTT04uc3RyaW5naWZ5KG4pO2lmKGUub3B0aW9ucy5kb3VibGVRdW90ZWRBc0pTT04pcmV0dXJuIHQ7bGV0e2ltcGxpY2l0S2V5OnJ9PWUscz1lLm9wdGlvbnMuZG91YmxlUXVvdGVkTWluTXVsdGlMaW5lTGVuZ3RoLGk9ZS5pbmRlbnR8fChkcyhuKT9cXFwiICBcXFwiOlxcXCJcXFwiKSxvPVxcXCJcXFwiLGE9MDtmb3IobGV0IHU9MCxsPXRbdV07bDtsPXRbKyt1XSlpZihsPT09XFxcIiBcXFwiJiZ0W3UrMV09PT1cXFwiXFxcXFxcXFxcXFwiJiZ0W3UrMl09PT1cXFwiblxcXCImJihvKz10LnNsaWNlKGEsdSkrXFxcIlxcXFxcXFxcIFxcXCIsdSs9MSxhPXUsbD1cXFwiXFxcXFxcXFxcXFwiKSxsPT09XFxcIlxcXFxcXFxcXFxcIilzd2l0Y2godFt1KzFdKXtjYXNlXFxcInVcXFwiOntvKz10LnNsaWNlKGEsdSk7bGV0IGQ9dC5zdWJzdHIodSsyLDQpO3N3aXRjaChkKXtjYXNlXFxcIjAwMDBcXFwiOm8rPVxcXCJcXFxcXFxcXDBcXFwiO2JyZWFrO2Nhc2VcXFwiMDAwN1xcXCI6bys9XFxcIlxcXFxcXFxcYVxcXCI7YnJlYWs7Y2FzZVxcXCIwMDBiXFxcIjpvKz1cXFwiXFxcXFxcXFx2XFxcIjticmVhaztjYXNlXFxcIjAwMWJcXFwiOm8rPVxcXCJcXFxcXFxcXGVcXFwiO2JyZWFrO2Nhc2VcXFwiMDA4NVxcXCI6bys9XFxcIlxcXFxcXFxcTlxcXCI7YnJlYWs7Y2FzZVxcXCIwMGEwXFxcIjpvKz1cXFwiXFxcXFxcXFxfXFxcIjticmVhaztjYXNlXFxcIjIwMjhcXFwiOm8rPVxcXCJcXFxcXFxcXExcXFwiO2JyZWFrO2Nhc2VcXFwiMjAyOVxcXCI6bys9XFxcIlxcXFxcXFxcUFxcXCI7YnJlYWs7ZGVmYXVsdDpkLnN1YnN0cigwLDIpPT09XFxcIjAwXFxcIj9vKz1cXFwiXFxcXFxcXFx4XFxcIitkLnN1YnN0cigyKTpvKz10LnN1YnN0cih1LDYpfXUrPTUsYT11KzF9YnJlYWs7Y2FzZVxcXCJuXFxcIjppZihyfHx0W3UrMl09PT0nXFxcIid8fHQubGVuZ3RoPHMpdSs9MTtlbHNle2ZvcihvKz10LnNsaWNlKGEsdSkrYFxcblxcbmA7dFt1KzJdPT09XFxcIlxcXFxcXFxcXFxcIiYmdFt1KzNdPT09XFxcIm5cXFwiJiZ0W3UrNF0hPT0nXFxcIic7KW8rPWBcXG5gLHUrPTI7bys9aSx0W3UrMl09PT1cXFwiIFxcXCImJihvKz1cXFwiXFxcXFxcXFxcXFwiKSx1Kz0xLGE9dSsxfWJyZWFrO2RlZmF1bHQ6dSs9MX1yZXR1cm4gbz1hP28rdC5zbGljZShhKTp0LHI/bzpEcihvLGksbXIsZnMoZSwhMSkpfWZ1bmN0aW9uIEJpKG4sZSl7aWYoZS5vcHRpb25zLnNpbmdsZVF1b3RlPT09ITF8fGUuaW1wbGljaXRLZXkmJm4uaW5jbHVkZXMoYFxcbmApfHwvWyBcXFxcdF1cXFxcbnxcXFxcblsgXFxcXHRdLy50ZXN0KG4pKXJldHVybiB5cihuLGUpO2xldCB0PWUuaW5kZW50fHwoZHMobik/XFxcIiAgXFxcIjpcXFwiXFxcIikscj1cXFwiJ1xcXCIrbi5yZXBsYWNlKC8nL2csXFxcIicnXFxcIikucmVwbGFjZSgvXFxcXG4rL2csYCQmXFxuJHt0fWApK1xcXCInXFxcIjtyZXR1cm4gZS5pbXBsaWNpdEtleT9yOkRyKHIsdCxfaSxmcyhlLCExKSl9ZnVuY3Rpb24geG4obixlKXtsZXR7c2luZ2xlUXVvdGU6dH09ZS5vcHRpb25zLHI7aWYodD09PSExKXI9eXI7ZWxzZXtsZXQgcz1uLmluY2x1ZGVzKCdcXFwiJyksaT1uLmluY2x1ZGVzKFxcXCInXFxcIik7cyYmIWk/cj1CaTppJiYhcz9yPXlyOnI9dD9CaTp5cn1yZXR1cm4gcihuLGUpfXZhciBQaTt0cnl7UGk9bmV3IFJlZ0V4cChgKF58KD88IVxcbikpXFxuKyg/IVxcbnwkKWAsXFxcImdcXFwiKX1jYXRjaChuKXtQaT0vXFxcXG4rKD8hXFxcXG58JCkvZ31mdW5jdGlvbiBjcyh7Y29tbWVudDpuLHR5cGU6ZSx2YWx1ZTp0fSxyLHMsaSl7bGV0e2Jsb2NrUXVvdGU6byxjb21tZW50U3RyaW5nOmEsbGluZVdpZHRoOnV9PXIub3B0aW9ucztpZighb3x8L1xcXFxuW1xcXFx0IF0rJC8udGVzdCh0KXx8L15cXFxccyokLy50ZXN0KHQpKXJldHVybiB4bih0LHIpO2xldCBsPXIuaW5kZW50fHwoci5mb3JjZUJsb2NrSW5kZW50fHxkcyh0KT9cXFwiICBcXFwiOlxcXCJcXFwiKSxkPW89PT1cXFwibGl0ZXJhbFxcXCI/ITA6bz09PVxcXCJmb2xkZWRcXFwifHxlPT09UC5CTE9DS19GT0xERUQ/ITE6ZT09PVAuQkxPQ0tfTElURVJBTD8hMDohcWModCx1LGwubGVuZ3RoKTtpZighdClyZXR1cm4gZD9gfFxcbmA6YD5cXG5gO2xldCBoLHA7Zm9yKHA9dC5sZW5ndGg7cD4wOy0tcCl7bGV0IFQ9dFtwLTFdO2lmKFQhPT1gXFxuYCYmVCE9PVxcXCJcXHRcXFwiJiZUIT09XFxcIiBcXFwiKWJyZWFrfWxldCBmPXQuc3Vic3RyaW5nKHApLEY9Zi5pbmRleE9mKGBcXG5gKTtGPT09LTE/aD1cXFwiLVxcXCI6dD09PWZ8fEYhPT1mLmxlbmd0aC0xPyhoPVxcXCIrXFxcIixpJiZpKCkpOmg9XFxcIlxcXCIsZiYmKHQ9dC5zbGljZSgwLC1mLmxlbmd0aCksZltmLmxlbmd0aC0xXT09PWBcXG5gJiYoZj1mLnNsaWNlKDAsLTEpKSxmPWYucmVwbGFjZShQaSxgJCYke2x9YCkpO2xldCBnPSExLHksUz0tMTtmb3IoeT0wO3k8dC5sZW5ndGg7Kyt5KXtsZXQgVD10W3ldO2lmKFQ9PT1cXFwiIFxcXCIpZz0hMDtlbHNlIGlmKFQ9PT1gXFxuYClTPXk7ZWxzZSBicmVha31sZXQgTz10LnN1YnN0cmluZygwLFM8eT9TKzE6eSk7TyYmKHQ9dC5zdWJzdHJpbmcoTy5sZW5ndGgpLE89Ty5yZXBsYWNlKC9cXFxcbisvZyxgJCYke2x9YCkpO2xldCBEPShkP1xcXCJ8XFxcIjpcXFwiPlxcXCIpKyhnP2w/XFxcIjJcXFwiOlxcXCIxXFxcIjpcXFwiXFxcIikraDtpZihuJiYoRCs9XFxcIiBcXFwiK2Eobi5yZXBsYWNlKC8gP1tcXFxcclxcXFxuXSsvZyxcXFwiIFxcXCIpKSxzJiZzKCkpLGQpcmV0dXJuIHQ9dC5yZXBsYWNlKC9cXFxcbisvZyxgJCYke2x9YCksYCR7RH1cXG4ke2x9JHtPfSR7dH0ke2Z9YDt0PXQucmVwbGFjZSgvXFxcXG4rL2csYFxcbiQmYCkucmVwbGFjZSgvKD86XnxcXFxcbikoW1xcXFx0IF0uKikoPzooW1xcXFxuXFxcXHQgXSopXFxcXG4oPyFbXFxcXG5cXFxcdCBdKSk/L2csXFxcIiQxJDJcXFwiKS5yZXBsYWNlKC9cXFxcbisvZyxgJCYke2x9YCk7bGV0IHc9RHIoYCR7T30ke3R9JHtmfWAsbCxscyxmcyhyLCEwKSk7cmV0dXJuYCR7RH1cXG4ke2x9JHt3fWB9ZnVuY3Rpb24gVWMobixlLHQscil7bGV0e3R5cGU6cyx2YWx1ZTppfT1uLHthY3R1YWxTdHJpbmc6byxpbXBsaWNpdEtleTphLGluZGVudDp1LGluZGVudFN0ZXA6bCxpbkZsb3c6ZH09ZTtpZihhJiZpLmluY2x1ZGVzKGBcXG5gKXx8ZCYmL1tbXFxcXF17fSxdLy50ZXN0KGkpKXJldHVybiB4bihpLGUpO2lmKCFpfHwvXltcXFxcblxcXFx0ICxbXFxcXF17fSMmKiF8PidcXFwiJUBgXXxeWz8tXSR8Xls/LV1bIFxcXFx0XXxbXFxcXG46XVsgXFxcXHRdfFsgXFxcXHRdXFxcXG58W1xcXFxuXFxcXHQgXSN8W1xcXFxuXFxcXHQgOl0kLy50ZXN0KGkpKXJldHVybiBhfHxkfHwhaS5pbmNsdWRlcyhgXFxuYCk/eG4oaSxlKTpjcyhuLGUsdCxyKTtpZighYSYmIWQmJnMhPT1QLlBMQUlOJiZpLmluY2x1ZGVzKGBcXG5gKSlyZXR1cm4gY3MobixlLHQscik7aWYoZHMoaSkpe2lmKHU9PT1cXFwiXFxcIilyZXR1cm4gZS5mb3JjZUJsb2NrSW5kZW50PSEwLGNzKG4sZSx0LHIpO2lmKGEmJnU9PT1sKXJldHVybiB4bihpLGUpfWxldCBoPWkucmVwbGFjZSgvXFxcXG4rL2csYCQmXFxuJHt1fWApO2lmKG8pe2xldCBwPWc9Pnt2YXIgeTtyZXR1cm4gZy5kZWZhdWx0JiZnLnRhZyE9PVxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHJcXFwiJiYoKHk9Zy50ZXN0KT09bnVsbD92b2lkIDA6eS50ZXN0KGgpKX0se2NvbXBhdDpmLHRhZ3M6Rn09ZS5kb2Muc2NoZW1hO2lmKEYuc29tZShwKXx8ZiE9bnVsbCYmZi5zb21lKHApKXJldHVybiB4bihpLGUpfXJldHVybiBhP2g6RHIoaCx1LF9pLGZzKGUsITEpKX1mdW5jdGlvbiB6dChuLGUsdCxyKXtsZXR7aW1wbGljaXRLZXk6cyxpbkZsb3c6aX09ZSxvPXR5cGVvZiBuLnZhbHVlPT1cXFwic3RyaW5nXFxcIj9uOk9iamVjdC5hc3NpZ24oe30sbix7dmFsdWU6U3RyaW5nKG4udmFsdWUpfSkse3R5cGU6YX09bjthIT09UC5RVU9URV9ET1VCTEUmJi9bXFxcXHgwMC1cXFxceDA4XFxcXHgwYi1cXFxceDFmXFxcXHg3Zi1cXFxceDlmXFxcXHV7RDgwMH0tXFxcXHV7REZGRn1dL3UudGVzdChvLnZhbHVlKSYmKGE9UC5RVU9URV9ET1VCTEUpO2xldCB1PWQ9Pntzd2l0Y2goZCl7Y2FzZSBQLkJMT0NLX0ZPTERFRDpjYXNlIFAuQkxPQ0tfTElURVJBTDpyZXR1cm4gc3x8aT94bihvLnZhbHVlLGUpOmNzKG8sZSx0LHIpO2Nhc2UgUC5RVU9URV9ET1VCTEU6cmV0dXJuIHlyKG8udmFsdWUsZSk7Y2FzZSBQLlFVT1RFX1NJTkdMRTpyZXR1cm4gQmkoby52YWx1ZSxlKTtjYXNlIFAuUExBSU46cmV0dXJuIFVjKG8sZSx0LHIpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxsPXUoYSk7aWYobD09PW51bGwpe2xldHtkZWZhdWx0S2V5VHlwZTpkLGRlZmF1bHRTdHJpbmdUeXBlOmh9PWUub3B0aW9ucyxwPXMmJmR8fGg7aWYobD11KHApLGw9PT1udWxsKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGVmYXVsdCBzdHJpbmcgdHlwZSAke3B9YCl9cmV0dXJuIGx9ZnVuY3Rpb24gaHMobixlKXtsZXQgdD1PYmplY3QuYXNzaWduKHtibG9ja1F1b3RlOiEwLGNvbW1lbnRTdHJpbmc6SGEsZGVmYXVsdEtleVR5cGU6bnVsbCxkZWZhdWx0U3RyaW5nVHlwZTpcXFwiUExBSU5cXFwiLGRpcmVjdGl2ZXM6bnVsbCxkb3VibGVRdW90ZWRBc0pTT046ITEsZG91YmxlUXVvdGVkTWluTXVsdGlMaW5lTGVuZ3RoOjQwLGZhbHNlU3RyOlxcXCJmYWxzZVxcXCIsZmxvd0NvbGxlY3Rpb25QYWRkaW5nOiEwLGluZGVudFNlcTohMCxsaW5lV2lkdGg6ODAsbWluQ29udGVudFdpZHRoOjIwLG51bGxTdHI6XFxcIm51bGxcXFwiLHNpbXBsZUtleXM6ITEsc2luZ2xlUXVvdGU6bnVsbCx0cnVlU3RyOlxcXCJ0cnVlXFxcIix2ZXJpZnlBbGlhc09yZGVyOiEwfSxuLnNjaGVtYS50b1N0cmluZ09wdGlvbnMsZSkscjtzd2l0Y2godC5jb2xsZWN0aW9uU3R5bGUpe2Nhc2VcXFwiYmxvY2tcXFwiOnI9ITE7YnJlYWs7Y2FzZVxcXCJmbG93XFxcIjpyPSEwO2JyZWFrO2RlZmF1bHQ6cj1udWxsfXJldHVybnthbmNob3JzOm5ldyBTZXQsZG9jOm4sZmxvd0NvbGxlY3Rpb25QYWRkaW5nOnQuZmxvd0NvbGxlY3Rpb25QYWRkaW5nP1xcXCIgXFxcIjpcXFwiXFxcIixpbmRlbnQ6XFxcIlxcXCIsaW5kZW50U3RlcDp0eXBlb2YgdC5pbmRlbnQ9PVxcXCJudW1iZXJcXFwiP1xcXCIgXFxcIi5yZXBlYXQodC5pbmRlbnQpOlxcXCIgIFxcXCIsaW5GbG93OnIsb3B0aW9uczp0fX1mdW5jdGlvbiBXYyhuLGUpe3ZhciBzLGksbyxhO2lmKGUudGFnKXtsZXQgdT1uLmZpbHRlcihsPT5sLnRhZz09PWUudGFnKTtpZih1Lmxlbmd0aD4wKXJldHVybihzPXUuZmluZChsPT5sLmZvcm1hdD09PWUuZm9ybWF0KSkhPW51bGw/czp1WzBdfWxldCB0LHI7aWYoVyhlKSl7cj1lLnZhbHVlO2xldCB1PW4uZmlsdGVyKGw9Pnt2YXIgZDtyZXR1cm4oZD1sLmlkZW50aWZ5KT09bnVsbD92b2lkIDA6ZC5jYWxsKGwscil9KTt0PShpPXUuZmluZChsPT5sLmZvcm1hdD09PWUuZm9ybWF0KSkhPW51bGw/aTp1LmZpbmQobD0+IWwuZm9ybWF0KX1lbHNlIHI9ZSx0PW4uZmluZCh1PT51Lm5vZGVDbGFzcyYmciBpbnN0YW5jZW9mIHUubm9kZUNsYXNzKTtpZighdCl7bGV0IHU9KGE9KG89cj09bnVsbD92b2lkIDA6ci5jb25zdHJ1Y3Rvcik9PW51bGw/dm9pZCAwOm8ubmFtZSkhPW51bGw/YTp0eXBlb2Ygcjt0aHJvdyBuZXcgRXJyb3IoYFRhZyBub3QgcmVzb2x2ZWQgZm9yICR7dX0gdmFsdWVgKX1yZXR1cm4gdH1mdW5jdGlvbiBIYyhuLGUse2FuY2hvcnM6dCxkb2M6cn0pe2lmKCFyLmRpcmVjdGl2ZXMpcmV0dXJuXFxcIlxcXCI7bGV0IHM9W10saT0oVyhuKXx8RyhuKSkmJm4uYW5jaG9yO2kmJm9zKGkpJiYodC5hZGQoaSkscy5wdXNoKGAmJHtpfWApKTtsZXQgbz1uLnRhZz9uLnRhZzplLmRlZmF1bHQ/bnVsbDplLnRhZztyZXR1cm4gbyYmcy5wdXNoKHIuZGlyZWN0aXZlcy50YWdTdHJpbmcobykpLHMuam9pbihcXFwiIFxcXCIpfWZ1bmN0aW9uIFR0KG4sZSx0LHIpe3ZhciB1LGw7aWYoSChuKSlyZXR1cm4gbi50b1N0cmluZyhlLHQscik7aWYoSmUobikpe2lmKGUuZG9jLmRpcmVjdGl2ZXMpcmV0dXJuIG4udG9TdHJpbmcoZSk7aWYoKHU9ZS5yZXNvbHZlZEFsaWFzZXMpIT1udWxsJiZ1LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3Qgc3RyaW5naWZ5IGNpcmN1bGFyIHN0cnVjdHVyZSB3aXRob3V0IGFsaWFzIG5vZGVzXFxcIik7ZS5yZXNvbHZlZEFsaWFzZXM/ZS5yZXNvbHZlZEFsaWFzZXMuYWRkKG4pOmUucmVzb2x2ZWRBbGlhc2VzPW5ldyBTZXQoW25dKSxuPW4ucmVzb2x2ZShlLmRvYyl9bGV0IHMsaT1LKG4pP246ZS5kb2MuY3JlYXRlTm9kZShuLHtvblRhZ09iajpkPT5zPWR9KTtzfHwocz1XYyhlLmRvYy5zY2hlbWEudGFncyxpKSk7bGV0IG89SGMoaSxzLGUpO28ubGVuZ3RoPjAmJihlLmluZGVudEF0U3RhcnQ9KChsPWUuaW5kZW50QXRTdGFydCkhPW51bGw/bDowKStvLmxlbmd0aCsxKTtsZXQgYT10eXBlb2Ygcy5zdHJpbmdpZnk9PVxcXCJmdW5jdGlvblxcXCI/cy5zdHJpbmdpZnkoaSxlLHQscik6VyhpKT96dChpLGUsdCxyKTppLnRvU3RyaW5nKGUsdCxyKTtyZXR1cm4gbz9XKGkpfHxhWzBdPT09XFxcIntcXFwifHxhWzBdPT09XFxcIltcXFwiP2Ake299ICR7YX1gOmAke299XFxuJHtlLmluZGVudH0ke2F9YDphfWZ1bmN0aW9uIEphKHtrZXk6bix2YWx1ZTplfSx0LHIscyl7dmFyIEMsTTtsZXR7YWxsTnVsbFZhbHVlczppLGRvYzpvLGluZGVudDphLGluZGVudFN0ZXA6dSxvcHRpb25zOntjb21tZW50U3RyaW5nOmwsaW5kZW50U2VxOmQsc2ltcGxlS2V5czpofX09dCxwPUsobikmJm4uY29tbWVudHx8bnVsbDtpZihoKXtpZihwKXRocm93IG5ldyBFcnJvcihcXFwiV2l0aCBzaW1wbGUga2V5cywga2V5IG5vZGVzIGNhbm5vdCBoYXZlIGNvbW1lbnRzXFxcIik7aWYoRyhuKSl7bGV0IFY9XFxcIldpdGggc2ltcGxlIGtleXMsIGNvbGxlY3Rpb24gY2Fubm90IGJlIHVzZWQgYXMgYSBrZXkgdmFsdWVcXFwiO3Rocm93IG5ldyBFcnJvcihWKX19bGV0IGY9IWgmJighbnx8cCYmZT09bnVsbCYmIXQuaW5GbG93fHxHKG4pfHwoVyhuKT9uLnR5cGU9PT1QLkJMT0NLX0ZPTERFRHx8bi50eXBlPT09UC5CTE9DS19MSVRFUkFMOnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIikpO3Q9T2JqZWN0LmFzc2lnbih7fSx0LHthbGxOdWxsVmFsdWVzOiExLGltcGxpY2l0S2V5OiFmJiYoaHx8IWkpLGluZGVudDphK3V9KTtsZXQgRj0hMSxnPSExLHk9VHQobix0LCgpPT5GPSEwLCgpPT5nPSEwKTtpZighZiYmIXQuaW5GbG93JiZ5Lmxlbmd0aD4xMDI0KXtpZihoKXRocm93IG5ldyBFcnJvcihcXFwiV2l0aCBzaW1wbGUga2V5cywgc2luZ2xlIGxpbmUgc2NhbGFyIG11c3Qgbm90IHNwYW4gbW9yZSB0aGFuIDEwMjQgY2hhcmFjdGVyc1xcXCIpO2Y9ITB9aWYodC5pbkZsb3cpe2lmKGl8fGU9PW51bGwpcmV0dXJuIEYmJnImJnIoKSx5PT09XFxcIlxcXCI/XFxcIj9cXFwiOmY/YD8gJHt5fWA6eX1lbHNlIGlmKGkmJiFofHxlPT1udWxsJiZmKXJldHVybiB5PWA/ICR7eX1gLHAmJiFGP3krPWl0KHksdC5pbmRlbnQsbChwKSk6ZyYmcyYmcygpLHk7RiYmKHA9bnVsbCksZj8ocCYmKHkrPWl0KHksdC5pbmRlbnQsbChwKSkpLHk9YD8gJHt5fVxcbiR7YX06YCk6KHk9YCR7eX06YCxwJiYoeSs9aXQoeSx0LmluZGVudCxsKHApKSkpO2xldCBTLE8sdjtLKGUpPyhTPSEhZS5zcGFjZUJlZm9yZSxPPWUuY29tbWVudEJlZm9yZSx2PWUuY29tbWVudCk6KFM9ITEsTz1udWxsLHY9bnVsbCxlJiZ0eXBlb2YgZT09XFxcIm9iamVjdFxcXCImJihlPW8uY3JlYXRlTm9kZShlKSkpLHQuaW1wbGljaXRLZXk9ITEsIWYmJiFwJiZXKGUpJiYodC5pbmRlbnRBdFN0YXJ0PXkubGVuZ3RoKzEpLGc9ITEsIWQmJnUubGVuZ3RoPj0yJiYhdC5pbkZsb3cmJiFmJiZZZShlKSYmIWUuZmxvdyYmIWUudGFnJiYhZS5hbmNob3ImJih0LmluZGVudD10LmluZGVudC5zdWJzdHJpbmcoMikpO2xldCBEPSExLHc9VHQoZSx0LCgpPT5EPSEwLCgpPT5nPSEwKSxUPVxcXCIgXFxcIjtpZihwfHxTfHxPKXtpZihUPVM/YFxcbmA6XFxcIlxcXCIsTyl7bGV0IFY9bChPKTtUKz1gXFxuJHskZShWLHQuaW5kZW50KX1gfXc9PT1cXFwiXFxcIiYmIXQuaW5GbG93P1Q9PT1gXFxuYCYmKFQ9YFxcblxcbmApOlQrPWBcXG4ke3QuaW5kZW50fWB9ZWxzZSBpZighZiYmRyhlKSl7bGV0IFY9d1swXSxqPXcuaW5kZXhPZihgXFxuYCksej1qIT09LTEscmU9KE09KEM9dC5pbkZsb3cpIT1udWxsP0M6ZS5mbG93KSE9bnVsbD9NOmUuaXRlbXMubGVuZ3RoPT09MDtpZih6fHwhcmUpe2xldCBsZT0hMTtpZih6JiYoVj09PVxcXCImXFxcInx8Vj09PVxcXCIhXFxcIikpe2xldCB4PXcuaW5kZXhPZihcXFwiIFxcXCIpO1Y9PT1cXFwiJlxcXCImJnghPT0tMSYmeDxqJiZ3W3grMV09PT1cXFwiIVxcXCImJih4PXcuaW5kZXhPZihcXFwiIFxcXCIseCsxKSksKHg9PT0tMXx8ajx4KSYmKGxlPSEwKX1sZXx8KFQ9YFxcbiR7dC5pbmRlbnR9YCl9fWVsc2Uodz09PVxcXCJcXFwifHx3WzBdPT09YFxcbmApJiYoVD1cXFwiXFxcIik7cmV0dXJuIHkrPVQrdyx0LmluRmxvdz9EJiZyJiZyKCk6diYmIUQ/eSs9aXQoeSx0LmluZGVudCxsKHYpKTpnJiZzJiZzKCkseX1mdW5jdGlvbiBwcyhuLGUpeyhuPT09XFxcImRlYnVnXFxcInx8bj09PVxcXCJ3YXJuXFxcIikmJih0eXBlb2YgcHJvY2VzcyE9XFxcInVuZGVmaW5lZFxcXCImJnByb2Nlc3MuZW1pdFdhcm5pbmc/cHJvY2Vzcy5lbWl0V2FybmluZyhlKTpjb25zb2xlLndhcm4oZSkpfXZhciB6YT1cXFwiPDxcXFwiO2Z1bmN0aW9uIG1zKG4sZSx7a2V5OnQsdmFsdWU6cn0pe2lmKG4hPW51bGwmJm4uZG9jLnNjaGVtYS5tZXJnZSYmS2ModCkpaWYocj1KZShyKT9yLnJlc29sdmUobi5kb2MpOnIsWWUocikpZm9yKGxldCBzIG9mIHIuaXRlbXMpJGkobixlLHMpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHMgb2YgcikkaShuLGUscyk7ZWxzZSAkaShuLGUscik7ZWxzZXtsZXQgcz1tZSh0LFxcXCJcXFwiLG4pO2lmKGUgaW5zdGFuY2VvZiBNYXApZS5zZXQocyxtZShyLHMsbikpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFNldCllLmFkZChzKTtlbHNle2xldCBpPUpjKHQscyxuKSxvPW1lKHIsaSxuKTtpIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSx7dmFsdWU6byx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbaV09b319cmV0dXJuIGV9dmFyIEtjPW49Pm49PT16YXx8VyhuKSYmbi52YWx1ZT09PXphJiYoIW4udHlwZXx8bi50eXBlPT09UC5QTEFJTik7ZnVuY3Rpb24gJGkobixlLHQpe2xldCByPW4mJkplKHQpP3QucmVzb2x2ZShuLmRvYyk6dDtpZighemUocikpdGhyb3cgbmV3IEVycm9yKFxcXCJNZXJnZSBzb3VyY2VzIG11c3QgYmUgbWFwcyBvciBtYXAgYWxpYXNlc1xcXCIpO2xldCBzPXIudG9KU09OKG51bGwsbixNYXApO2ZvcihsZXRbaSxvXW9mIHMpZSBpbnN0YW5jZW9mIE1hcD9lLmhhcyhpKXx8ZS5zZXQoaSxvKTplIGluc3RhbmNlb2YgU2V0P2UuYWRkKGkpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLHt2YWx1ZTpvLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7cmV0dXJuIGV9ZnVuY3Rpb24gSmMobixlLHQpe2lmKGU9PT1udWxsKXJldHVyblxcXCJcXFwiO2lmKHR5cGVvZiBlIT1cXFwib2JqZWN0XFxcIilyZXR1cm4gU3RyaW5nKGUpO2lmKEsobikmJih0IT1udWxsJiZ0LmRvYykpe2xldCByPWhzKHQuZG9jLHt9KTtyLmFuY2hvcnM9bmV3IFNldDtmb3IobGV0IGkgb2YgdC5hbmNob3JzLmtleXMoKSlyLmFuY2hvcnMuYWRkKGkuYW5jaG9yKTtyLmluRmxvdz0hMCxyLmluU3RyaW5naWZ5S2V5PSEwO2xldCBzPW4udG9TdHJpbmcocik7aWYoIXQubWFwS2V5V2FybmVkKXtsZXQgaT1KU09OLnN0cmluZ2lmeShzKTtpLmxlbmd0aD40MCYmKGk9aS5zdWJzdHJpbmcoMCwzNikrJy4uLlxcXCInKSxwcyh0LmRvYy5vcHRpb25zLmxvZ0xldmVsLGBLZXlzIHdpdGggY29sbGVjdGlvbiB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZCBkdWUgdG8gSlMgT2JqZWN0IHJlc3RyaWN0aW9uczogJHtpfS4gU2V0IG1hcEFzTWFwOiB0cnVlIHRvIHVzZSBvYmplY3Qga2V5cy5gKSx0Lm1hcEtleVdhcm5lZD0hMH1yZXR1cm4gc31yZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9ZnVuY3Rpb24gT24obixlLHQpe2xldCByPXd0KG4sdm9pZCAwLHQpLHM9d3QoZSx2b2lkIDAsdCk7cmV0dXJuIG5ldyBzZShyLHMpfXZhciBzZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsa2Use3ZhbHVlOkxpfSksdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPXR9Y2xvbmUoZSl7bGV0e2tleTp0LHZhbHVlOnJ9PXRoaXM7cmV0dXJuIEsodCkmJih0PXQuY2xvbmUoZSkpLEsocikmJihyPXIuY2xvbmUoZSkpLG5ldyBzZSh0LHIpfXRvSlNPTihlLHQpe2xldCByPXQhPW51bGwmJnQubWFwQXNNYXA/bmV3IE1hcDp7fTtyZXR1cm4gbXModCxyLHRoaXMpfXRvU3RyaW5nKGUsdCxyKXtyZXR1cm4gZSE9bnVsbCYmZS5kb2M/SmEodGhpcyxlLHQscik6SlNPTi5zdHJpbmdpZnkodGhpcyl9fTtmdW5jdGlvbiB5cyhuLGUsdCl7dmFyIGk7cmV0dXJuKCgoaT1lLmluRmxvdykhPW51bGw/aTpuLmZsb3cpP1ljOnpjKShuLGUsdCl9ZnVuY3Rpb24gemMoe2NvbW1lbnQ6bixpdGVtczplfSx0LHtibG9ja0l0ZW1QcmVmaXg6cixmbG93Q2hhcnM6cyxpdGVtSW5kZW50Omksb25DaG9tcEtlZXA6byxvbkNvbW1lbnQ6YX0pe2xldHtpbmRlbnQ6dSxvcHRpb25zOntjb21tZW50U3RyaW5nOmx9fT10LGQ9T2JqZWN0LmFzc2lnbih7fSx0LHtpbmRlbnQ6aSx0eXBlOm51bGx9KSxoPSExLHA9W107Zm9yKGxldCBGPTA7RjxlLmxlbmd0aDsrK0Ype2xldCBnPWVbRl0seT1udWxsO2lmKEsoZykpIWgmJmcuc3BhY2VCZWZvcmUmJnAucHVzaChcXFwiXFxcIiksRHModCxwLGcuY29tbWVudEJlZm9yZSxoKSxnLmNvbW1lbnQmJih5PWcuY29tbWVudCk7ZWxzZSBpZihIKGcpKXtsZXQgTz1LKGcua2V5KT9nLmtleTpudWxsO08mJighaCYmTy5zcGFjZUJlZm9yZSYmcC5wdXNoKFxcXCJcXFwiKSxEcyh0LHAsTy5jb21tZW50QmVmb3JlLGgpKX1oPSExO2xldCBTPVR0KGcsZCwoKT0+eT1udWxsLCgpPT5oPSEwKTt5JiYoUys9aXQoUyxpLGwoeSkpKSxoJiZ5JiYoaD0hMSkscC5wdXNoKHIrUyl9bGV0IGY7aWYocC5sZW5ndGg9PT0wKWY9cy5zdGFydCtzLmVuZDtlbHNle2Y9cFswXTtmb3IobGV0IEY9MTtGPHAubGVuZ3RoOysrRil7bGV0IGc9cFtGXTtmKz1nP2BcXG4ke3V9JHtnfWA6YFxcbmB9fXJldHVybiBuPyhmKz1gXFxuYCskZShsKG4pLHUpLGEmJmEoKSk6aCYmbyYmbygpLGZ9ZnVuY3Rpb24gWWMoe2l0ZW1zOm59LGUse2Zsb3dDaGFyczp0LGl0ZW1JbmRlbnQ6cn0pe2xldHtpbmRlbnQ6cyxpbmRlbnRTdGVwOmksZmxvd0NvbGxlY3Rpb25QYWRkaW5nOm8sb3B0aW9uczp7Y29tbWVudFN0cmluZzphfX09ZTtyKz1pO2xldCB1PU9iamVjdC5hc3NpZ24oe30sZSx7aW5kZW50OnIsaW5GbG93OiEwLHR5cGU6bnVsbH0pLGw9ITEsZD0wLGg9W107Zm9yKGxldCBGPTA7RjxuLmxlbmd0aDsrK0Ype2xldCBnPW5bRl0seT1udWxsO2lmKEsoZykpZy5zcGFjZUJlZm9yZSYmaC5wdXNoKFxcXCJcXFwiKSxEcyhlLGgsZy5jb21tZW50QmVmb3JlLCExKSxnLmNvbW1lbnQmJih5PWcuY29tbWVudCk7ZWxzZSBpZihIKGcpKXtsZXQgTz1LKGcua2V5KT9nLmtleTpudWxsO08mJihPLnNwYWNlQmVmb3JlJiZoLnB1c2goXFxcIlxcXCIpLERzKGUsaCxPLmNvbW1lbnRCZWZvcmUsITEpLE8uY29tbWVudCYmKGw9ITApKTtsZXQgdj1LKGcudmFsdWUpP2cudmFsdWU6bnVsbDt2Pyh2LmNvbW1lbnQmJih5PXYuY29tbWVudCksdi5jb21tZW50QmVmb3JlJiYobD0hMCkpOmcudmFsdWU9PW51bGwmJihPIT1udWxsJiZPLmNvbW1lbnQpJiYoeT1PLmNvbW1lbnQpfXkmJihsPSEwKTtsZXQgUz1UdChnLHUsKCk9Pnk9bnVsbCk7RjxuLmxlbmd0aC0xJiYoUys9XFxcIixcXFwiKSx5JiYoUys9aXQoUyxyLGEoeSkpKSwhbCYmKGgubGVuZ3RoPmR8fFMuaW5jbHVkZXMoYFxcbmApKSYmKGw9ITApLGgucHVzaChTKSxkPWgubGVuZ3RofWxldHtzdGFydDpwLGVuZDpmfT10O2lmKGgubGVuZ3RoPT09MClyZXR1cm4gcCtmO2lmKCFsKXtsZXQgRj1oLnJlZHVjZSgoZyx5KT0+Zyt5Lmxlbmd0aCsyLDIpO2w9ZS5vcHRpb25zLmxpbmVXaWR0aD4wJiZGPmUub3B0aW9ucy5saW5lV2lkdGh9aWYobCl7bGV0IEY9cDtmb3IobGV0IGcgb2YgaClGKz1nP2BcXG4ke2l9JHtzfSR7Z31gOmBcXG5gO3JldHVybmAke0Z9XFxuJHtzfSR7Zn1gfWVsc2UgcmV0dXJuYCR7cH0ke299JHtoLmpvaW4oXFxcIiBcXFwiKX0ke299JHtmfWB9ZnVuY3Rpb24gRHMoe2luZGVudDpuLG9wdGlvbnM6e2NvbW1lbnRTdHJpbmc6ZX19LHQscixzKXtpZihyJiZzJiYocj1yLnJlcGxhY2UoL15cXFxcbisvLFxcXCJcXFwiKSkscil7bGV0IGk9JGUoZShyKSxuKTt0LnB1c2goaS50cmltU3RhcnQoKSl9fWZ1bmN0aW9uIE50KG4sZSl7bGV0IHQ9VyhlKT9lLnZhbHVlOmU7Zm9yKGxldCByIG9mIG4paWYoSChyKSYmKHIua2V5PT09ZXx8ci5rZXk9PT10fHxXKHIua2V5KSYmci5rZXkudmFsdWU9PT10KSlyZXR1cm4gcn12YXIgdWU9Y2xhc3MgZXh0ZW5kcyBKdHtzdGF0aWMgZ2V0IHRhZ05hbWUoKXtyZXR1cm5cXFwidGFnOnlhbWwub3JnLDIwMDI6bWFwXFxcIn1jb25zdHJ1Y3RvcihlKXtzdXBlcihLZSxlKSx0aGlzLml0ZW1zPVtdfXN0YXRpYyBmcm9tKGUsdCxyKXtsZXR7a2VlcFVuZGVmaW5lZDpzLHJlcGxhY2VyOml9PXIsbz1uZXcgdGhpcyhlKSxhPSh1LGwpPT57aWYodHlwZW9mIGk9PVxcXCJmdW5jdGlvblxcXCIpbD1pLmNhbGwodCx1LGwpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSYmIWkuaW5jbHVkZXModSkpcmV0dXJuOyhsIT09dm9pZCAwfHxzKSYmby5pdGVtcy5wdXNoKE9uKHUsbCxyKSl9O2lmKHQgaW5zdGFuY2VvZiBNYXApZm9yKGxldFt1LGxdb2YgdClhKHUsbCk7ZWxzZSBpZih0JiZ0eXBlb2YgdD09XFxcIm9iamVjdFxcXCIpZm9yKGxldCB1IG9mIE9iamVjdC5rZXlzKHQpKWEodSx0W3VdKTtyZXR1cm4gdHlwZW9mIGUuc29ydE1hcEVudHJpZXM9PVxcXCJmdW5jdGlvblxcXCImJm8uaXRlbXMuc29ydChlLnNvcnRNYXBFbnRyaWVzKSxvfWFkZChlLHQpe3ZhciBvO2xldCByO0goZSk/cj1lOiFlfHx0eXBlb2YgZSE9XFxcIm9iamVjdFxcXCJ8fCEoXFxcImtleVxcXCJpbiBlKT9yPW5ldyBzZShlLGU9PW51bGw/dm9pZCAwOmUudmFsdWUpOnI9bmV3IHNlKGUua2V5LGUudmFsdWUpO2xldCBzPU50KHRoaXMuaXRlbXMsci5rZXkpLGk9KG89dGhpcy5zY2hlbWEpPT1udWxsP3ZvaWQgMDpvLnNvcnRNYXBFbnRyaWVzO2lmKHMpe2lmKCF0KXRocm93IG5ldyBFcnJvcihgS2V5ICR7ci5rZXl9IGFscmVhZHkgc2V0YCk7VyhzLnZhbHVlKSYmdXMoci52YWx1ZSk/cy52YWx1ZS52YWx1ZT1yLnZhbHVlOnMudmFsdWU9ci52YWx1ZX1lbHNlIGlmKGkpe2xldCBhPXRoaXMuaXRlbXMuZmluZEluZGV4KHU9Pmkocix1KTwwKTthPT09LTE/dGhpcy5pdGVtcy5wdXNoKHIpOnRoaXMuaXRlbXMuc3BsaWNlKGEsMCxyKX1lbHNlIHRoaXMuaXRlbXMucHVzaChyKX1kZWxldGUoZSl7bGV0IHQ9TnQodGhpcy5pdGVtcyxlKTtyZXR1cm4gdD90aGlzLml0ZW1zLnNwbGljZSh0aGlzLml0ZW1zLmluZGV4T2YodCksMSkubGVuZ3RoPjA6ITF9Z2V0KGUsdCl7dmFyIGk7bGV0IHI9TnQodGhpcy5pdGVtcyxlKSxzPXI9PW51bGw/dm9pZCAwOnIudmFsdWU7cmV0dXJuKGk9IXQmJlcocyk/cy52YWx1ZTpzKSE9bnVsbD9pOnZvaWQgMH1oYXMoZSl7cmV0dXJuISFOdCh0aGlzLml0ZW1zLGUpfXNldChlLHQpe3RoaXMuYWRkKG5ldyBzZShlLHQpLCEwKX10b0pTT04oZSx0LHIpe2xldCBzPXI/bmV3IHI6dCE9bnVsbCYmdC5tYXBBc01hcD9uZXcgTWFwOnt9O3QhPW51bGwmJnQub25DcmVhdGUmJnQub25DcmVhdGUocyk7Zm9yKGxldCBpIG9mIHRoaXMuaXRlbXMpbXModCxzLGkpO3JldHVybiBzfXRvU3RyaW5nKGUsdCxyKXtpZighZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7Zm9yKGxldCBzIG9mIHRoaXMuaXRlbXMpaWYoIUgocykpdGhyb3cgbmV3IEVycm9yKGBNYXAgaXRlbXMgbXVzdCBhbGwgYmUgcGFpcnM7IGZvdW5kICR7SlNPTi5zdHJpbmdpZnkocyl9IGluc3RlYWRgKTtyZXR1cm4hZS5hbGxOdWxsVmFsdWVzJiZ0aGlzLmhhc0FsbE51bGxWYWx1ZXMoITEpJiYoZT1PYmplY3QuYXNzaWduKHt9LGUse2FsbE51bGxWYWx1ZXM6ITB9KSkseXModGhpcyxlLHtibG9ja0l0ZW1QcmVmaXg6XFxcIlxcXCIsZmxvd0NoYXJzOntzdGFydDpcXFwie1xcXCIsZW5kOlxcXCJ9XFxcIn0saXRlbUluZGVudDplLmluZGVudHx8XFxcIlxcXCIsb25DaG9tcEtlZXA6cixvbkNvbW1lbnQ6dH0pfX07dmFyIFplPXtjb2xsZWN0aW9uOlxcXCJtYXBcXFwiLGRlZmF1bHQ6ITAsbm9kZUNsYXNzOnVlLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6bWFwXFxcIixyZXNvbHZlKG4sZSl7cmV0dXJuIHplKG4pfHxlKFxcXCJFeHBlY3RlZCBhIG1hcHBpbmcgZm9yIHRoaXMgdGFnXFxcIiksbn0sY3JlYXRlTm9kZToobixlLHQpPT51ZS5mcm9tKG4sZSx0KX07dmFyIHdlPWNsYXNzIGV4dGVuZHMgSnR7c3RhdGljIGdldCB0YWdOYW1lKCl7cmV0dXJuXFxcInRhZzp5YW1sLm9yZywyMDAyOnNlcVxcXCJ9Y29uc3RydWN0b3IoZSl7c3VwZXIoYnQsZSksdGhpcy5pdGVtcz1bXX1hZGQoZSl7dGhpcy5pdGVtcy5wdXNoKGUpfWRlbGV0ZShlKXtsZXQgdD1ncyhlKTtyZXR1cm4gdHlwZW9mIHQhPVxcXCJudW1iZXJcXFwiPyExOnRoaXMuaXRlbXMuc3BsaWNlKHQsMSkubGVuZ3RoPjB9Z2V0KGUsdCl7bGV0IHI9Z3MoZSk7aWYodHlwZW9mIHIhPVxcXCJudW1iZXJcXFwiKXJldHVybjtsZXQgcz10aGlzLml0ZW1zW3JdO3JldHVybiF0JiZXKHMpP3MudmFsdWU6c31oYXMoZSl7bGV0IHQ9Z3MoZSk7cmV0dXJuIHR5cGVvZiB0PT1cXFwibnVtYmVyXFxcIiYmdDx0aGlzLml0ZW1zLmxlbmd0aH1zZXQoZSx0KXtsZXQgcj1ncyhlKTtpZih0eXBlb2YgciE9XFxcIm51bWJlclxcXCIpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHZhbGlkIGluZGV4LCBub3QgJHtlfS5gKTtsZXQgcz10aGlzLml0ZW1zW3JdO1cocykmJnVzKHQpP3MudmFsdWU9dDp0aGlzLml0ZW1zW3JdPXR9dG9KU09OKGUsdCl7bGV0IHI9W107dCE9bnVsbCYmdC5vbkNyZWF0ZSYmdC5vbkNyZWF0ZShyKTtsZXQgcz0wO2ZvcihsZXQgaSBvZiB0aGlzLml0ZW1zKXIucHVzaChtZShpLFN0cmluZyhzKyspLHQpKTtyZXR1cm4gcn10b1N0cmluZyhlLHQscil7cmV0dXJuIGU/eXModGhpcyxlLHtibG9ja0l0ZW1QcmVmaXg6XFxcIi0gXFxcIixmbG93Q2hhcnM6e3N0YXJ0OlxcXCJbXFxcIixlbmQ6XFxcIl1cXFwifSxpdGVtSW5kZW50OihlLmluZGVudHx8XFxcIlxcXCIpK1xcXCIgIFxcXCIsb25DaG9tcEtlZXA6cixvbkNvbW1lbnQ6dH0pOkpTT04uc3RyaW5naWZ5KHRoaXMpfXN0YXRpYyBmcm9tKGUsdCxyKXtsZXR7cmVwbGFjZXI6c309cixpPW5ldyB0aGlzKGUpO2lmKHQmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpe2xldCBvPTA7Zm9yKGxldCBhIG9mIHQpe2lmKHR5cGVvZiBzPT1cXFwiZnVuY3Rpb25cXFwiKXtsZXQgdT10IGluc3RhbmNlb2YgU2V0P2E6U3RyaW5nKG8rKyk7YT1zLmNhbGwodCx1LGEpfWkuaXRlbXMucHVzaCh3dChhLHZvaWQgMCxyKSl9fXJldHVybiBpfX07ZnVuY3Rpb24gZ3Mobil7bGV0IGU9VyhuKT9uLnZhbHVlOm47cmV0dXJuIGUmJnR5cGVvZiBlPT1cXFwic3RyaW5nXFxcIiYmKGU9TnVtYmVyKGUpKSx0eXBlb2YgZT09XFxcIm51bWJlclxcXCImJk51bWJlci5pc0ludGVnZXIoZSkmJmU+PTA/ZTpudWxsfXZhciBRZT17Y29sbGVjdGlvbjpcXFwic2VxXFxcIixkZWZhdWx0OiEwLG5vZGVDbGFzczp3ZSx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOnNlcVxcXCIscmVzb2x2ZShuLGUpe3JldHVybiBZZShuKXx8ZShcXFwiRXhwZWN0ZWQgYSBzZXF1ZW5jZSBmb3IgdGhpcyB0YWdcXFwiKSxufSxjcmVhdGVOb2RlOihuLGUsdCk9PndlLmZyb20obixlLHQpfTt2YXIgTHQ9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwic3RyaW5nXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6c3RyXFxcIixyZXNvbHZlOm49Pm4sc3RyaW5naWZ5KG4sZSx0LHIpe3JldHVybiBlPU9iamVjdC5hc3NpZ24oe2FjdHVhbFN0cmluZzohMH0sZSksenQobixlLHQscil9fTt2YXIgWXQ9e2lkZW50aWZ5Om49Pm49PW51bGwsY3JlYXRlTm9kZTooKT0+bmV3IFAobnVsbCksZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOm51bGxcXFwiLHRlc3Q6L14oPzp+fFtObl11bGx8TlVMTCk/JC8scmVzb2x2ZTooKT0+bmV3IFAobnVsbCksc3RyaW5naWZ5Oih7c291cmNlOm59LGUpPT50eXBlb2Ygbj09XFxcInN0cmluZ1xcXCImJll0LnRlc3QudGVzdChuKT9uOmUub3B0aW9ucy5udWxsU3RyfTt2YXIgZ3I9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwiYm9vbGVhblxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmJvb2xcXFwiLHRlc3Q6L14oPzpbVHRdcnVlfFRSVUV8W0ZmXWFsc2V8RkFMU0UpJC8scmVzb2x2ZTpuPT5uZXcgUChuWzBdPT09XFxcInRcXFwifHxuWzBdPT09XFxcIlRcXFwiKSxzdHJpbmdpZnkoe3NvdXJjZTpuLHZhbHVlOmV9LHQpe2lmKG4mJmdyLnRlc3QudGVzdChuKSl7bGV0IHI9blswXT09PVxcXCJ0XFxcInx8blswXT09PVxcXCJUXFxcIjtpZihlPT09cilyZXR1cm4gbn1yZXR1cm4gZT90Lm9wdGlvbnMudHJ1ZVN0cjp0Lm9wdGlvbnMuZmFsc2VTdHJ9fTtmdW5jdGlvbiBUZSh7Zm9ybWF0Om4sbWluRnJhY3Rpb25EaWdpdHM6ZSx0YWc6dCx2YWx1ZTpyfSl7aWYodHlwZW9mIHI9PVxcXCJiaWdpbnRcXFwiKXJldHVybiBTdHJpbmcocik7bGV0IHM9dHlwZW9mIHI9PVxcXCJudW1iZXJcXFwiP3I6TnVtYmVyKHIpO2lmKCFpc0Zpbml0ZShzKSlyZXR1cm4gaXNOYU4ocyk/XFxcIi5uYW5cXFwiOnM8MD9cXFwiLS5pbmZcXFwiOlxcXCIuaW5mXFxcIjtsZXQgaT1KU09OLnN0cmluZ2lmeShyKTtpZighbiYmZSYmKCF0fHx0PT09XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIikmJi9eXFxcXGQvLnRlc3QoaSkpe2xldCBvPWkuaW5kZXhPZihcXFwiLlxcXCIpO288MCYmKG89aS5sZW5ndGgsaSs9XFxcIi5cXFwiKTtsZXQgYT1lLShpLmxlbmd0aC1vLTEpO2Zvcig7YS0tID4wOylpKz1cXFwiMFxcXCJ9cmV0dXJuIGl9dmFyIGJzPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIix0ZXN0Oi9eKD86Wy0rXT9cXFxcLig/OmluZnxJbmZ8SU5GfG5hbnxOYU58TkFOKSkkLyxyZXNvbHZlOm49Pm4uc2xpY2UoLTMpLnRvTG93ZXJDYXNlKCk9PT1cXFwibmFuXFxcIj9OYU46blswXT09PVxcXCItXFxcIj9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHN0cmluZ2lmeTpUZX0sRXM9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLGZvcm1hdDpcXFwiRVhQXFxcIix0ZXN0Oi9eWy0rXT8oPzpcXFxcLlswLTldK3xbMC05XSsoPzpcXFxcLlswLTldKik/KVtlRV1bLStdP1swLTldKyQvLHJlc29sdmU6bj0+cGFyc2VGbG9hdChuKSxzdHJpbmdpZnkobil7bGV0IGU9TnVtYmVyKG4udmFsdWUpO3JldHVybiBpc0Zpbml0ZShlKT9lLnRvRXhwb25lbnRpYWwoKTpUZShuKX19LEZzPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIix0ZXN0Oi9eWy0rXT8oPzpcXFxcLlswLTldK3xbMC05XStcXFxcLlswLTldKikkLyxyZXNvbHZlKG4pe2xldCBlPW5ldyBQKHBhcnNlRmxvYXQobikpLHQ9bi5pbmRleE9mKFxcXCIuXFxcIik7cmV0dXJuIHQhPT0tMSYmbltuLmxlbmd0aC0xXT09PVxcXCIwXFxcIiYmKGUubWluRnJhY3Rpb25EaWdpdHM9bi5sZW5ndGgtdC0xKSxlfSxzdHJpbmdpZnk6VGV9O3ZhciB3cz1uPT50eXBlb2Ygbj09XFxcImJpZ2ludFxcXCJ8fE51bWJlci5pc0ludGVnZXIobiksUmk9KG4sZSx0LHtpbnRBc0JpZ0ludDpyfSk9PnI/QmlnSW50KG4pOnBhcnNlSW50KG4uc3Vic3RyaW5nKGUpLHQpO2Z1bmN0aW9uIFlhKG4sZSx0KXtsZXR7dmFsdWU6cn09bjtyZXR1cm4gd3MocikmJnI+PTA/dCtyLnRvU3RyaW5nKGUpOlRlKG4pfXZhciBUcz17aWRlbnRpZnk6bj0+d3MobikmJm4+PTAsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJPQ1RcXFwiLHRlc3Q6L14wb1swLTddKyQvLHJlc29sdmU6KG4sZSx0KT0+UmkobiwyLDgsdCksc3RyaW5naWZ5Om49PllhKG4sOCxcXFwiMG9cXFwiKX0sU3M9e2lkZW50aWZ5OndzLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLHRlc3Q6L15bLStdP1swLTldKyQvLHJlc29sdmU6KG4sZSx0KT0+UmkobiwwLDEwLHQpLHN0cmluZ2lmeTpUZX0sa3M9e2lkZW50aWZ5Om49PndzKG4pJiZuPj0wLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLGZvcm1hdDpcXFwiSEVYXFxcIix0ZXN0Oi9eMHhbMC05YS1mQS1GXSskLyxyZXNvbHZlOihuLGUsdCk9PlJpKG4sMiwxNix0KSxzdHJpbmdpZnk6bj0+WWEobiwxNixcXFwiMHhcXFwiKX07dmFyIEdhPVtaZSxRZSxMdCxZdCxncixUcyxTcyxrcyxicyxFcyxGc107ZnVuY3Rpb24gWmEobil7cmV0dXJuIHR5cGVvZiBuPT1cXFwiYmlnaW50XFxcInx8TnVtYmVyLmlzSW50ZWdlcihuKX12YXIgQ3M9KHt2YWx1ZTpufSk9PkpTT04uc3RyaW5naWZ5KG4pLEdjPVt7aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJzdHJpbmdcXFwiLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHJcXFwiLHJlc29sdmU6bj0+bixzdHJpbmdpZnk6Q3N9LHtpZGVudGlmeTpuPT5uPT1udWxsLGNyZWF0ZU5vZGU6KCk9Pm5ldyBQKG51bGwpLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsXFxcIix0ZXN0Oi9ebnVsbCQvLHJlc29sdmU6KCk9Pm51bGwsc3RyaW5naWZ5OkNzfSx7aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJib29sZWFuXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6Ym9vbFxcXCIsdGVzdDovXnRydWV8ZmFsc2UkLyxyZXNvbHZlOm49Pm49PT1cXFwidHJ1ZVxcXCIsc3RyaW5naWZ5OkNzfSx7aWRlbnRpZnk6WmEsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsdGVzdDovXi0/KD86MHxbMS05XVswLTldKikkLyxyZXNvbHZlOihuLGUse2ludEFzQmlnSW50OnR9KT0+dD9CaWdJbnQobik6cGFyc2VJbnQobiwxMCksc3RyaW5naWZ5Oih7dmFsdWU6bn0pPT5aYShuKT9uLnRvU3RyaW5nKCk6SlNPTi5zdHJpbmdpZnkobil9LHtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIix0ZXN0Oi9eLT8oPzowfFsxLTldWzAtOV0qKSg/OlxcXFwuWzAtOV0qKT8oPzpbZUVdWy0rXT9bMC05XSspPyQvLHJlc29sdmU6bj0+cGFyc2VGbG9hdChuKSxzdHJpbmdpZnk6Q3N9XSxaYz17ZGVmYXVsdDohMCx0YWc6XFxcIlxcXCIsdGVzdDovXi8scmVzb2x2ZShuLGUpe3JldHVybiBlKGBVbnJlc29sdmVkIHBsYWluIHNjYWxhciAke0pTT04uc3RyaW5naWZ5KG4pfWApLG59fSxRYT1bWmUsUWVdLmNvbmNhdChHYyxaYyk7dmFyIGJyPXtpZGVudGlmeTpuPT5uIGluc3RhbmNlb2YgVWludDhBcnJheSxkZWZhdWx0OiExLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5XFxcIixyZXNvbHZlKG4sZSl7aWYodHlwZW9mIEJ1ZmZlcj09XFxcImZ1bmN0aW9uXFxcIilyZXR1cm4gQnVmZmVyLmZyb20obixcXFwiYmFzZTY0XFxcIik7aWYodHlwZW9mIGF0b2I9PVxcXCJmdW5jdGlvblxcXCIpe2xldCB0PWF0b2Iobi5yZXBsYWNlKC9bXFxcXG5cXFxccl0vZyxcXFwiXFxcIikpLHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7KytzKXJbc109dC5jaGFyQ29kZUF0KHMpO3JldHVybiByfWVsc2UgcmV0dXJuIGUoXFxcIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGJpbmFyeSB0YWdzOyBlaXRoZXIgQnVmZmVyIG9yIGF0b2IgaXMgcmVxdWlyZWRcXFwiKSxufSxzdHJpbmdpZnkoe2NvbW1lbnQ6bix0eXBlOmUsdmFsdWU6dH0scixzLGkpe2xldCBvPXQsYTtpZih0eXBlb2YgQnVmZmVyPT1cXFwiZnVuY3Rpb25cXFwiKWE9byBpbnN0YW5jZW9mIEJ1ZmZlcj9vLnRvU3RyaW5nKFxcXCJiYXNlNjRcXFwiKTpCdWZmZXIuZnJvbShvLmJ1ZmZlcikudG9TdHJpbmcoXFxcImJhc2U2NFxcXCIpO2Vsc2UgaWYodHlwZW9mIGJ0b2E9PVxcXCJmdW5jdGlvblxcXCIpe2xldCB1PVxcXCJcXFwiO2ZvcihsZXQgbD0wO2w8by5sZW5ndGg7KytsKXUrPVN0cmluZy5mcm9tQ2hhckNvZGUob1tsXSk7YT1idG9hKHUpfWVsc2UgdGhyb3cgbmV3IEVycm9yKFxcXCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgd3JpdGluZyBiaW5hcnkgdGFnczsgZWl0aGVyIEJ1ZmZlciBvciBidG9hIGlzIHJlcXVpcmVkXFxcIik7aWYoZXx8KGU9UC5CTE9DS19MSVRFUkFMKSxlIT09UC5RVU9URV9ET1VCTEUpe2xldCB1PU1hdGgubWF4KHIub3B0aW9ucy5saW5lV2lkdGgtci5pbmRlbnQubGVuZ3RoLHIub3B0aW9ucy5taW5Db250ZW50V2lkdGgpLGw9TWF0aC5jZWlsKGEubGVuZ3RoL3UpLGQ9bmV3IEFycmF5KGwpO2ZvcihsZXQgaD0wLHA9MDtoPGw7KytoLHArPXUpZFtoXT1hLnN1YnN0cihwLHUpO2E9ZC5qb2luKGU9PT1QLkJMT0NLX0xJVEVSQUw/YFxcbmA6XFxcIiBcXFwiKX1yZXR1cm4genQoe2NvbW1lbnQ6bix0eXBlOmUsdmFsdWU6YX0scixzLGkpfX07ZnVuY3Rpb24gamkobixlKXt2YXIgdDtpZihZZShuKSlmb3IobGV0IHI9MDtyPG4uaXRlbXMubGVuZ3RoOysrcil7bGV0IHM9bi5pdGVtc1tyXTtpZighSChzKSl7aWYoemUocykpe3MuaXRlbXMubGVuZ3RoPjEmJmUoXFxcIkVhY2ggcGFpciBtdXN0IGhhdmUgaXRzIG93biBzZXF1ZW5jZSBpbmRpY2F0b3JcXFwiKTtsZXQgaT1zLml0ZW1zWzBdfHxuZXcgc2UobmV3IFAobnVsbCkpO2lmKHMuY29tbWVudEJlZm9yZSYmKGkua2V5LmNvbW1lbnRCZWZvcmU9aS5rZXkuY29tbWVudEJlZm9yZT9gJHtzLmNvbW1lbnRCZWZvcmV9XFxuJHtpLmtleS5jb21tZW50QmVmb3JlfWA6cy5jb21tZW50QmVmb3JlKSxzLmNvbW1lbnQpe2xldCBvPSh0PWkudmFsdWUpIT1udWxsP3Q6aS5rZXk7by5jb21tZW50PW8uY29tbWVudD9gJHtzLmNvbW1lbnR9XFxuJHtvLmNvbW1lbnR9YDpzLmNvbW1lbnR9cz1pfW4uaXRlbXNbcl09SChzKT9zOm5ldyBzZShzKX19ZWxzZSBlKFxcXCJFeHBlY3RlZCBhIHNlcXVlbmNlIGZvciB0aGlzIHRhZ1xcXCIpO3JldHVybiBufWZ1bmN0aW9uIFZpKG4sZSx0KXtsZXR7cmVwbGFjZXI6cn09dCxzPW5ldyB3ZShuKTtzLnRhZz1cXFwidGFnOnlhbWwub3JnLDIwMDI6cGFpcnNcXFwiO2xldCBpPTA7aWYoZSYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlmb3IobGV0IG8gb2YgZSl7dHlwZW9mIHI9PVxcXCJmdW5jdGlvblxcXCImJihvPXIuY2FsbChlLFN0cmluZyhpKyspLG8pKTtsZXQgYSx1O2lmKEFycmF5LmlzQXJyYXkobykpaWYoby5sZW5ndGg9PT0yKWE9b1swXSx1PW9bMV07ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBba2V5LCB2YWx1ZV0gdHVwbGU6ICR7b31gKTtlbHNlIGlmKG8mJm8gaW5zdGFuY2VvZiBPYmplY3Qpe2xldCBsPU9iamVjdC5rZXlzKG8pO2lmKGwubGVuZ3RoPT09MSlhPWxbMF0sdT1vW2FdO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgdHVwbGUgd2l0aCBvbmUga2V5LCBub3QgJHtsLmxlbmd0aH0ga2V5c2ApfWVsc2UgYT1vO3MuaXRlbXMucHVzaChPbihhLHUsdCkpfXJldHVybiBzfXZhciBFcj17Y29sbGVjdGlvbjpcXFwic2VxXFxcIixkZWZhdWx0OiExLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6cGFpcnNcXFwiLHJlc29sdmU6amksY3JlYXRlTm9kZTpWaX07dmFyIEF0PWNsYXNzIGV4dGVuZHMgd2V7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkPXVlLnByb3RvdHlwZS5hZGQuYmluZCh0aGlzKSx0aGlzLmRlbGV0ZT11ZS5wcm90b3R5cGUuZGVsZXRlLmJpbmQodGhpcyksdGhpcy5nZXQ9dWUucHJvdG90eXBlLmdldC5iaW5kKHRoaXMpLHRoaXMuaGFzPXVlLnByb3RvdHlwZS5oYXMuYmluZCh0aGlzKSx0aGlzLnNldD11ZS5wcm90b3R5cGUuc2V0LmJpbmQodGhpcyksdGhpcy50YWc9QXQudGFnfXRvSlNPTihlLHQpe2lmKCF0KXJldHVybiBzdXBlci50b0pTT04oZSk7bGV0IHI9bmV3IE1hcDt0IT1udWxsJiZ0Lm9uQ3JlYXRlJiZ0Lm9uQ3JlYXRlKHIpO2ZvcihsZXQgcyBvZiB0aGlzLml0ZW1zKXtsZXQgaSxvO2lmKEgocyk/KGk9bWUocy5rZXksXFxcIlxcXCIsdCksbz1tZShzLnZhbHVlLGksdCkpOmk9bWUocyxcXFwiXFxcIix0KSxyLmhhcyhpKSl0aHJvdyBuZXcgRXJyb3IoXFxcIk9yZGVyZWQgbWFwcyBtdXN0IG5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBrZXlzXFxcIik7ci5zZXQoaSxvKX1yZXR1cm4gcn1zdGF0aWMgZnJvbShlLHQscil7bGV0IHM9VmkoZSx0LHIpLGk9bmV3IHRoaXM7cmV0dXJuIGkuaXRlbXM9cy5pdGVtcyxpfX07QXQudGFnPVxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwXFxcIjt2YXIgRnI9e2NvbGxlY3Rpb246XFxcInNlcVxcXCIsaWRlbnRpZnk6bj0+biBpbnN0YW5jZW9mIE1hcCxub2RlQ2xhc3M6QXQsZGVmYXVsdDohMSx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOm9tYXBcXFwiLHJlc29sdmUobixlKXtsZXQgdD1qaShuLGUpLHI9W107Zm9yKGxldHtrZXk6c31vZiB0Lml0ZW1zKVcocykmJihyLmluY2x1ZGVzKHMudmFsdWUpP2UoYE9yZGVyZWQgbWFwcyBtdXN0IG5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBrZXlzOiAke3MudmFsdWV9YCk6ci5wdXNoKHMudmFsdWUpKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQXQsdCl9LGNyZWF0ZU5vZGU6KG4sZSx0KT0+QXQuZnJvbShuLGUsdCl9O2Z1bmN0aW9uIFhhKHt2YWx1ZTpuLHNvdXJjZTplfSx0KXtyZXR1cm4gZSYmKG4/cWk6VWkpLnRlc3QudGVzdChlKT9lOm4/dC5vcHRpb25zLnRydWVTdHI6dC5vcHRpb25zLmZhbHNlU3RyfXZhciBxaT17aWRlbnRpZnk6bj0+bj09PSEwLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sXFxcIix0ZXN0Oi9eKD86WXx5fFtZeV1lc3xZRVN8W1R0XXJ1ZXxUUlVFfFtPb11ufE9OKSQvLHJlc29sdmU6KCk9Pm5ldyBQKCEwKSxzdHJpbmdpZnk6WGF9LFVpPXtpZGVudGlmeTpuPT5uPT09ITEsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmJvb2xcXFwiLHRlc3Q6L14oPzpOfG58W05uXW98Tk98W0ZmXWFsc2V8RkFMU0V8W09vXWZmfE9GRikkLyxyZXNvbHZlOigpPT5uZXcgUCghMSksc3RyaW5naWZ5OlhhfTt2YXIgZXU9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLHRlc3Q6L15bLStdP1xcXFwuKD86aW5mfEluZnxJTkZ8bmFufE5hTnxOQU4pJC8scmVzb2x2ZTpuPT5uLnNsaWNlKC0zKS50b0xvd2VyQ2FzZSgpPT09XFxcIm5hblxcXCI/TmFOOm5bMF09PT1cXFwiLVxcXCI/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzdHJpbmdpZnk6VGV9LHR1PXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIixmb3JtYXQ6XFxcIkVYUFxcXCIsdGVzdDovXlstK10/KD86WzAtOV1bMC05X10qKT8oPzpcXFxcLlswLTlfXSopP1tlRV1bLStdP1swLTldKyQvLHJlc29sdmU6bj0+cGFyc2VGbG9hdChuLnJlcGxhY2UoL18vZyxcXFwiXFxcIikpLHN0cmluZ2lmeShuKXtsZXQgZT1OdW1iZXIobi52YWx1ZSk7cmV0dXJuIGlzRmluaXRlKGUpP2UudG9FeHBvbmVudGlhbCgpOlRlKG4pfX0sbnU9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLHRlc3Q6L15bLStdPyg/OlswLTldWzAtOV9dKik/XFxcXC5bMC05X10qJC8scmVzb2x2ZShuKXtsZXQgZT1uZXcgUChwYXJzZUZsb2F0KG4ucmVwbGFjZSgvXy9nLFxcXCJcXFwiKSkpLHQ9bi5pbmRleE9mKFxcXCIuXFxcIik7aWYodCE9PS0xKXtsZXQgcj1uLnN1YnN0cmluZyh0KzEpLnJlcGxhY2UoL18vZyxcXFwiXFxcIik7cltyLmxlbmd0aC0xXT09PVxcXCIwXFxcIiYmKGUubWluRnJhY3Rpb25EaWdpdHM9ci5sZW5ndGgpfXJldHVybiBlfSxzdHJpbmdpZnk6VGV9O3ZhciB3cj1uPT50eXBlb2Ygbj09XFxcImJpZ2ludFxcXCJ8fE51bWJlci5pc0ludGVnZXIobik7ZnVuY3Rpb24geHMobixlLHQse2ludEFzQmlnSW50OnJ9KXtsZXQgcz1uWzBdO2lmKChzPT09XFxcIi1cXFwifHxzPT09XFxcIitcXFwiKSYmKGUrPTEpLG49bi5zdWJzdHJpbmcoZSkucmVwbGFjZSgvXy9nLFxcXCJcXFwiKSxyKXtzd2l0Y2godCl7Y2FzZSAyOm49YDBiJHtufWA7YnJlYWs7Y2FzZSA4Om49YDBvJHtufWA7YnJlYWs7Y2FzZSAxNjpuPWAweCR7bn1gO2JyZWFrfWxldCBvPUJpZ0ludChuKTtyZXR1cm4gcz09PVxcXCItXFxcIj9CaWdJbnQoLTEpKm86b31sZXQgaT1wYXJzZUludChuLHQpO3JldHVybiBzPT09XFxcIi1cXFwiPy0xKmk6aX1mdW5jdGlvbiBXaShuLGUsdCl7bGV0e3ZhbHVlOnJ9PW47aWYod3Iocikpe2xldCBzPXIudG9TdHJpbmcoZSk7cmV0dXJuIHI8MD9cXFwiLVxcXCIrdCtzLnN1YnN0cigxKTp0K3N9cmV0dXJuIFRlKG4pfXZhciBydT17aWRlbnRpZnk6d3IsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJCSU5cXFwiLHRlc3Q6L15bLStdPzBiWzAtMV9dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwyLDIsdCksc3RyaW5naWZ5Om49PldpKG4sMixcXFwiMGJcXFwiKX0sc3U9e2lkZW50aWZ5OndyLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLGZvcm1hdDpcXFwiT0NUXFxcIix0ZXN0Oi9eWy0rXT8wWzAtN19dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwxLDgsdCksc3RyaW5naWZ5Om49PldpKG4sOCxcXFwiMFxcXCIpfSxpdT17aWRlbnRpZnk6d3IsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsdGVzdDovXlstK10/WzAtOV1bMC05X10qJC8scmVzb2x2ZToobixlLHQpPT54cyhuLDAsMTAsdCksc3RyaW5naWZ5OlRlfSxvdT17aWRlbnRpZnk6d3IsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJIRVhcXFwiLHRlc3Q6L15bLStdPzB4WzAtOWEtZkEtRl9dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwyLDE2LHQpLHN0cmluZ2lmeTpuPT5XaShuLDE2LFxcXCIweFxcXCIpfTt2YXIgTXQ9Y2xhc3MgZXh0ZW5kcyB1ZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnRhZz1NdC50YWd9YWRkKGUpe2xldCB0O0goZSk/dD1lOmUmJnR5cGVvZiBlPT1cXFwib2JqZWN0XFxcIiYmXFxcImtleVxcXCJpbiBlJiZcXFwidmFsdWVcXFwiaW4gZSYmZS52YWx1ZT09PW51bGw/dD1uZXcgc2UoZS5rZXksbnVsbCk6dD1uZXcgc2UoZSxudWxsKSxOdCh0aGlzLml0ZW1zLHQua2V5KXx8dGhpcy5pdGVtcy5wdXNoKHQpfWdldChlLHQpe2xldCByPU50KHRoaXMuaXRlbXMsZSk7cmV0dXJuIXQmJkgocik/VyhyLmtleSk/ci5rZXkudmFsdWU6ci5rZXk6cn1zZXQoZSx0KXtpZih0eXBlb2YgdCE9XFxcImJvb2xlYW5cXFwiKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYm9vbGVhbiB2YWx1ZSBmb3Igc2V0KGtleSwgdmFsdWUpIGluIGEgWUFNTCBzZXQsIG5vdCAke3R5cGVvZiB0fWApO2xldCByPU50KHRoaXMuaXRlbXMsZSk7ciYmIXQ/dGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pdGVtcy5pbmRleE9mKHIpLDEpOiFyJiZ0JiZ0aGlzLml0ZW1zLnB1c2gobmV3IHNlKGUpKX10b0pTT04oZSx0KXtyZXR1cm4gc3VwZXIudG9KU09OKGUsdCxTZXQpfXRvU3RyaW5nKGUsdCxyKXtpZighZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7aWYodGhpcy5oYXNBbGxOdWxsVmFsdWVzKCEwKSlyZXR1cm4gc3VwZXIudG9TdHJpbmcoT2JqZWN0LmFzc2lnbih7fSxlLHthbGxOdWxsVmFsdWVzOiEwfSksdCxyKTt0aHJvdyBuZXcgRXJyb3IoXFxcIlNldCBpdGVtcyBtdXN0IGFsbCBoYXZlIG51bGwgdmFsdWVzXFxcIil9c3RhdGljIGZyb20oZSx0LHIpe2xldHtyZXBsYWNlcjpzfT1yLGk9bmV3IHRoaXMoZSk7aWYodCYmU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlmb3IobGV0IG8gb2YgdCl0eXBlb2Ygcz09XFxcImZ1bmN0aW9uXFxcIiYmKG89cy5jYWxsKHQsbyxvKSksaS5pdGVtcy5wdXNoKE9uKG8sbnVsbCxyKSk7cmV0dXJuIGl9fTtNdC50YWc9XFxcInRhZzp5YW1sLm9yZywyMDAyOnNldFxcXCI7dmFyIFRyPXtjb2xsZWN0aW9uOlxcXCJtYXBcXFwiLGlkZW50aWZ5Om49Pm4gaW5zdGFuY2VvZiBTZXQsbm9kZUNsYXNzOk10LGRlZmF1bHQ6ITEsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXRcXFwiLGNyZWF0ZU5vZGU6KG4sZSx0KT0+TXQuZnJvbShuLGUsdCkscmVzb2x2ZShuLGUpe2lmKHplKG4pKXtpZihuLmhhc0FsbE51bGxWYWx1ZXMoITApKXJldHVybiBPYmplY3QuYXNzaWduKG5ldyBNdCxuKTtlKFxcXCJTZXQgaXRlbXMgbXVzdCBhbGwgaGF2ZSBudWxsIHZhbHVlc1xcXCIpfWVsc2UgZShcXFwiRXhwZWN0ZWQgYSBtYXBwaW5nIGZvciB0aGlzIHRhZ1xcXCIpO3JldHVybiBufX07ZnVuY3Rpb24gSGkobixlKXtsZXQgdD1uWzBdLHI9dD09PVxcXCItXFxcInx8dD09PVxcXCIrXFxcIj9uLnN1YnN0cmluZygxKTpuLHM9bz0+ZT9CaWdJbnQobyk6TnVtYmVyKG8pLGk9ci5yZXBsYWNlKC9fL2csXFxcIlxcXCIpLnNwbGl0KFxcXCI6XFxcIikucmVkdWNlKChvLGEpPT5vKnMoNjApK3MoYSkscygwKSk7cmV0dXJuIHQ9PT1cXFwiLVxcXCI/cygtMSkqaTppfWZ1bmN0aW9uIGF1KG4pe2xldHt2YWx1ZTplfT1uLHQ9bz0+bztpZih0eXBlb2YgZT09XFxcImJpZ2ludFxcXCIpdD1vPT5CaWdJbnQobyk7ZWxzZSBpZihpc05hTihlKXx8IWlzRmluaXRlKGUpKXJldHVybiBUZShuKTtsZXQgcj1cXFwiXFxcIjtlPDAmJihyPVxcXCItXFxcIixlKj10KC0xKSk7bGV0IHM9dCg2MCksaT1bZSVzXTtyZXR1cm4gZTw2MD9pLnVuc2hpZnQoMCk6KGU9KGUtaVswXSkvcyxpLnVuc2hpZnQoZSVzKSxlPj02MCYmKGU9KGUtaVswXSkvcyxpLnVuc2hpZnQoZSkpKSxyK2kubWFwKG89PlN0cmluZyhvKS5wYWRTdGFydCgyLFxcXCIwXFxcIikpLmpvaW4oXFxcIjpcXFwiKS5yZXBsYWNlKC8wMDAwMDBcXFxcZCokLyxcXFwiXFxcIil9dmFyIE9zPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcImJpZ2ludFxcXCJ8fE51bWJlci5pc0ludGVnZXIobiksZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJUSU1FXFxcIix0ZXN0Oi9eWy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pKyQvLHJlc29sdmU6KG4sZSx7aW50QXNCaWdJbnQ6dH0pPT5IaShuLHQpLHN0cmluZ2lmeTphdX0sdnM9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLGZvcm1hdDpcXFwiVElNRVxcXCIsdGVzdDovXlstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXFxcLlswLTlfXSokLyxyZXNvbHZlOm49PkhpKG4sITEpLHN0cmluZ2lmeTphdX0sdm49e2lkZW50aWZ5Om49Pm4gaW5zdGFuY2VvZiBEYXRlLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXBcXFwiLHRlc3Q6UmVnRXhwKFxcXCJeKFswLTldezR9KS0oWzAtOV17MSwyfSktKFswLTldezEsMn0pKD86KD86dHxUfFsgXFxcXFxcXFx0XSspKFswLTldezEsMn0pOihbMC05XXsxLDJ9KTooWzAtOV17MSwyfShcXFxcXFxcXC5bMC05XSspPykoPzpbIFxcXFxcXFxcdF0qKFp8Wy0rXVswMTJdP1swLTldKD86OlswLTldezJ9KT8pKT8pPyRcXFwiKSxyZXNvbHZlKG4pe2xldCBlPW4ubWF0Y2godm4udGVzdCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFxcXCIhIXRpbWVzdGFtcCBleHBlY3RzIGEgZGF0ZSwgc3RhcnRpbmcgd2l0aCB5eXl5LW1tLWRkXFxcIik7bGV0Wyx0LHIscyxpLG8sYV09ZS5tYXAoTnVtYmVyKSx1PWVbN10/TnVtYmVyKChlWzddK1xcXCIwMFxcXCIpLnN1YnN0cigxLDMpKTowLGw9RGF0ZS5VVEModCxyLTEscyxpfHwwLG98fDAsYXx8MCx1KSxkPWVbOF07aWYoZCYmZCE9PVxcXCJaXFxcIil7bGV0IGg9SGkoZCwhMSk7TWF0aC5hYnMoaCk8MzAmJihoKj02MCksbC09NmU0Kmh9cmV0dXJuIG5ldyBEYXRlKGwpfSxzdHJpbmdpZnk6KHt2YWx1ZTpufSk9Pm4udG9JU09TdHJpbmcoKS5yZXBsYWNlKC8oKFQwMDowMCk/OjAwKT9cXFxcLjAwMFokLyxcXFwiXFxcIil9O3ZhciBLaT1bWmUsUWUsTHQsWXQscWksVWkscnUsc3UsaXUsb3UsZXUsdHUsbnUsYnIsRnIsRXIsVHIsT3MsdnMsdm5dO3ZhciB1dT1uZXcgTWFwKFtbXFxcImNvcmVcXFwiLEdhXSxbXFxcImZhaWxzYWZlXFxcIixbWmUsUWUsTHRdXSxbXFxcImpzb25cXFwiLFFhXSxbXFxcInlhbWwxMVxcXCIsS2ldLFtcXFwieWFtbC0xLjFcXFwiLEtpXV0pLGx1PXtiaW5hcnk6YnIsYm9vbDpncixmbG9hdDpGcyxmbG9hdEV4cDpFcyxmbG9hdE5hTjpicyxmbG9hdFRpbWU6dnMsaW50OlNzLGludEhleDprcyxpbnRPY3Q6VHMsaW50VGltZTpPcyxtYXA6WmUsbnVsbDpZdCxvbWFwOkZyLHBhaXJzOkVyLHNlcTpRZSxzZXQ6VHIsdGltZXN0YW1wOnZufSxjdT17XFxcInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeVxcXCI6YnIsXFxcInRhZzp5YW1sLm9yZywyMDAyOm9tYXBcXFwiOkZyLFxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlyc1xcXCI6RXIsXFxcInRhZzp5YW1sLm9yZywyMDAyOnNldFxcXCI6VHIsXFxcInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcFxcXCI6dm59O2Z1bmN0aW9uIElzKG4sZSl7bGV0IHQ9dXUuZ2V0KGUpO2lmKCF0KWlmKEFycmF5LmlzQXJyYXkobikpdD1bXTtlbHNle2xldCByPUFycmF5LmZyb20odXUua2V5cygpKS5maWx0ZXIocz0+cyE9PVxcXCJ5YW1sMTFcXFwiKS5tYXAocz0+SlNPTi5zdHJpbmdpZnkocykpLmpvaW4oXFxcIiwgXFxcIik7dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNjaGVtYSBcXFwiJHtlfVxcXCI7IHVzZSBvbmUgb2YgJHtyfSBvciBkZWZpbmUgY3VzdG9tVGFncyBhcnJheWApfWlmKEFycmF5LmlzQXJyYXkobikpZm9yKGxldCByIG9mIG4pdD10LmNvbmNhdChyKTtlbHNlIHR5cGVvZiBuPT1cXFwiZnVuY3Rpb25cXFwiJiYodD1uKHQuc2xpY2UoKSkpO3JldHVybiB0Lm1hcChyPT57aWYodHlwZW9mIHIhPVxcXCJzdHJpbmdcXFwiKXJldHVybiByO2xldCBzPWx1W3JdO2lmKHMpcmV0dXJuIHM7bGV0IGk9T2JqZWN0LmtleXMobHUpLm1hcChvPT5KU09OLnN0cmluZ2lmeShvKSkuam9pbihcXFwiLCBcXFwiKTt0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY3VzdG9tIHRhZyBcXFwiJHtyfVxcXCI7IHVzZSBvbmUgb2YgJHtpfWApfSl9dmFyIFFjPShuLGUpPT5uLmtleTxlLmtleT8tMTpuLmtleT5lLmtleT8xOjAsR3Q9Y2xhc3N7Y29uc3RydWN0b3Ioe2NvbXBhdDplLGN1c3RvbVRhZ3M6dCxtZXJnZTpyLHJlc29sdmVLbm93blRhZ3M6cyxzY2hlbWE6aSxzb3J0TWFwRW50cmllczpvLHRvU3RyaW5nRGVmYXVsdHM6YX0pe3RoaXMuY29tcGF0PUFycmF5LmlzQXJyYXkoZSk/SXMoZSxcXFwiY29tcGF0XFxcIik6ZT9JcyhudWxsLGUpOm51bGwsdGhpcy5tZXJnZT0hIXIsdGhpcy5uYW1lPXR5cGVvZiBpPT1cXFwic3RyaW5nXFxcIiYmaXx8XFxcImNvcmVcXFwiLHRoaXMua25vd25UYWdzPXM/Y3U6e30sdGhpcy50YWdzPUlzKHQsdGhpcy5uYW1lKSx0aGlzLnRvU3RyaW5nT3B0aW9ucz1hIT1udWxsP2E6bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxLZSx7dmFsdWU6WmV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxQZSx7dmFsdWU6THR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxidCx7dmFsdWU6UWV9KSx0aGlzLnNvcnRNYXBFbnRyaWVzPXR5cGVvZiBvPT1cXFwiZnVuY3Rpb25cXFwiP286bz09PSEwP1FjOm51bGx9Y2xvbmUoKXtsZXQgZT1PYmplY3QuY3JlYXRlKEd0LnByb3RvdHlwZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0aGlzKSk7cmV0dXJuIGUudGFncz10aGlzLnRhZ3Muc2xpY2UoKSxlfX07ZnVuY3Rpb24gZnUobixlKXt2YXIgdTtsZXQgdD1bXSxyPWUuZGlyZWN0aXZlcz09PSEwO2lmKGUuZGlyZWN0aXZlcyE9PSExJiZuLmRpcmVjdGl2ZXMpe2xldCBsPW4uZGlyZWN0aXZlcy50b1N0cmluZyhuKTtsPyh0LnB1c2gobCkscj0hMCk6bi5kaXJlY3RpdmVzLmRvY1N0YXJ0JiYocj0hMCl9ciYmdC5wdXNoKFxcXCItLS1cXFwiKTtsZXQgcz1ocyhuLGUpLHtjb21tZW50U3RyaW5nOml9PXMub3B0aW9ucztpZihuLmNvbW1lbnRCZWZvcmUpe3QubGVuZ3RoIT09MSYmdC51bnNoaWZ0KFxcXCJcXFwiKTtsZXQgbD1pKG4uY29tbWVudEJlZm9yZSk7dC51bnNoaWZ0KCRlKGwsXFxcIlxcXCIpKX1sZXQgbz0hMSxhPW51bGw7aWYobi5jb250ZW50cyl7aWYoSyhuLmNvbnRlbnRzKSl7aWYobi5jb250ZW50cy5zcGFjZUJlZm9yZSYmciYmdC5wdXNoKFxcXCJcXFwiKSxuLmNvbnRlbnRzLmNvbW1lbnRCZWZvcmUpe2xldCBoPWkobi5jb250ZW50cy5jb21tZW50QmVmb3JlKTt0LnB1c2goJGUoaCxcXFwiXFxcIikpfXMuZm9yY2VCbG9ja0luZGVudD0hIW4uY29tbWVudCxhPW4uY29udGVudHMuY29tbWVudH1sZXQgbD1hP3ZvaWQgMDooKT0+bz0hMCxkPVR0KG4uY29udGVudHMscywoKT0+YT1udWxsLGwpO2EmJihkKz1pdChkLFxcXCJcXFwiLGkoYSkpKSwoZFswXT09PVxcXCJ8XFxcInx8ZFswXT09PVxcXCI+XFxcIikmJnRbdC5sZW5ndGgtMV09PT1cXFwiLS0tXFxcIj90W3QubGVuZ3RoLTFdPWAtLS0gJHtkfWA6dC5wdXNoKGQpfWVsc2UgdC5wdXNoKFR0KG4uY29udGVudHMscykpO2lmKCh1PW4uZGlyZWN0aXZlcykhPW51bGwmJnUuZG9jRW5kKWlmKG4uY29tbWVudCl7bGV0IGw9aShuLmNvbW1lbnQpO2wuaW5jbHVkZXMoYFxcbmApPyh0LnB1c2goXFxcIi4uLlxcXCIpLHQucHVzaCgkZShsLFxcXCJcXFwiKSkpOnQucHVzaChgLi4uICR7bH1gKX1lbHNlIHQucHVzaChcXFwiLi4uXFxcIik7ZWxzZXtsZXQgbD1uLmNvbW1lbnQ7bCYmbyYmKGw9bC5yZXBsYWNlKC9eXFxcXG4rLyxcXFwiXFxcIikpLGwmJigoIW98fGEpJiZ0W3QubGVuZ3RoLTFdIT09XFxcIlxcXCImJnQucHVzaChcXFwiXFxcIiksdC5wdXNoKCRlKGkobCksXFxcIlxcXCIpKSl9cmV0dXJuIHQuam9pbihgXFxuYCkrYFxcbmB9dmFyIG90PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmNvbW1lbnRCZWZvcmU9bnVsbCx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLmVycm9ycz1bXSx0aGlzLndhcm5pbmdzPVtdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGtlLHt2YWx1ZTpzc30pO2xldCBzPW51bGw7dHlwZW9mIHQ9PVxcXCJmdW5jdGlvblxcXCJ8fEFycmF5LmlzQXJyYXkodCk/cz10OnI9PT12b2lkIDAmJnQmJihyPXQsdD12b2lkIDApO2xldCBpPU9iamVjdC5hc3NpZ24oe2ludEFzQmlnSW50OiExLGtlZXBTb3VyY2VUb2tlbnM6ITEsbG9nTGV2ZWw6XFxcIndhcm5cXFwiLHByZXR0eUVycm9yczohMCxzdHJpY3Q6ITAsdW5pcXVlS2V5czohMCx2ZXJzaW9uOlxcXCIxLjJcXFwifSxyKTt0aGlzLm9wdGlvbnM9aTtsZXR7dmVyc2lvbjpvfT1pO3IhPW51bGwmJnIuX2RpcmVjdGl2ZXM/KHRoaXMuZGlyZWN0aXZlcz1yLl9kaXJlY3RpdmVzLmF0RG9jdW1lbnQoKSx0aGlzLmRpcmVjdGl2ZXMueWFtbC5leHBsaWNpdCYmKG89dGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbikpOnRoaXMuZGlyZWN0aXZlcz1uZXcgcGUoe3ZlcnNpb246b30pLHRoaXMuc2V0U2NoZW1hKG8sciksdGhpcy5jb250ZW50cz1lPT09dm9pZCAwP251bGw6dGhpcy5jcmVhdGVOb2RlKGUscyxyKX1jbG9uZSgpe2xldCBlPU9iamVjdC5jcmVhdGUob3QucHJvdG90eXBlLHtba2VdOnt2YWx1ZTpzc319KTtyZXR1cm4gZS5jb21tZW50QmVmb3JlPXRoaXMuY29tbWVudEJlZm9yZSxlLmNvbW1lbnQ9dGhpcy5jb21tZW50LGUuZXJyb3JzPXRoaXMuZXJyb3JzLnNsaWNlKCksZS53YXJuaW5ncz10aGlzLndhcm5pbmdzLnNsaWNlKCksZS5vcHRpb25zPU9iamVjdC5hc3NpZ24oe30sdGhpcy5vcHRpb25zKSx0aGlzLmRpcmVjdGl2ZXMmJihlLmRpcmVjdGl2ZXM9dGhpcy5kaXJlY3RpdmVzLmNsb25lKCkpLGUuc2NoZW1hPXRoaXMuc2NoZW1hLmNsb25lKCksZS5jb250ZW50cz1LKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuY2xvbmUoZS5zY2hlbWEpOnRoaXMuY29udGVudHMsdGhpcy5yYW5nZSYmKGUucmFuZ2U9dGhpcy5yYW5nZS5zbGljZSgpKSxlfWFkZChlKXtJbih0aGlzLmNvbnRlbnRzKSYmdGhpcy5jb250ZW50cy5hZGQoZSl9YWRkSW4oZSx0KXtJbih0aGlzLmNvbnRlbnRzKSYmdGhpcy5jb250ZW50cy5hZGRJbihlLHQpfWNyZWF0ZUFsaWFzKGUsdCl7aWYoIWUuYW5jaG9yKXtsZXQgcj1BaSh0aGlzKTtlLmFuY2hvcj0hdHx8ci5oYXModCk/TWkodHx8XFxcImFcXFwiLHIpOnR9cmV0dXJuIG5ldyBGdChlLmFuY2hvcil9Y3JlYXRlTm9kZShlLHQscil7bGV0IHM7aWYodHlwZW9mIHQ9PVxcXCJmdW5jdGlvblxcXCIpZT10LmNhbGwoe1xcXCJcXFwiOmV9LFxcXCJcXFwiLGUpLHM9dDtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe2xldCB5PU89PnR5cGVvZiBPPT1cXFwibnVtYmVyXFxcInx8TyBpbnN0YW5jZW9mIFN0cmluZ3x8TyBpbnN0YW5jZW9mIE51bWJlcixTPXQuZmlsdGVyKHkpLm1hcChTdHJpbmcpO1MubGVuZ3RoPjAmJih0PXQuY29uY2F0KFMpKSxzPXR9ZWxzZSByPT09dm9pZCAwJiZ0JiYocj10LHQ9dm9pZCAwKTtsZXR7YWxpYXNEdXBsaWNhdGVPYmplY3RzOmksYW5jaG9yUHJlZml4Om8sZmxvdzphLGtlZXBVbmRlZmluZWQ6dSxvblRhZ09iajpsLHRhZzpkfT1yIT1udWxsP3I6e30se29uQW5jaG9yOmgsc2V0QW5jaG9yczpwLHNvdXJjZU9iamVjdHM6Zn09V2EodGhpcyxvfHxcXFwiYVxcXCIpLEY9e2FsaWFzRHVwbGljYXRlT2JqZWN0czppIT1udWxsP2k6ITAsa2VlcFVuZGVmaW5lZDp1IT1udWxsP3U6ITEsb25BbmNob3I6aCxvblRhZ09iajpsLHJlcGxhY2VyOnMsc2NoZW1hOnRoaXMuc2NoZW1hLHNvdXJjZU9iamVjdHM6Zn0sZz13dChlLGQsRik7cmV0dXJuIGEmJkcoZykmJihnLmZsb3c9ITApLHAoKSxnfWNyZWF0ZVBhaXIoZSx0LHI9e30pe2xldCBzPXRoaXMuY3JlYXRlTm9kZShlLG51bGwsciksaT10aGlzLmNyZWF0ZU5vZGUodCxudWxsLHIpO3JldHVybiBuZXcgc2UocyxpKX1kZWxldGUoZSl7cmV0dXJuIEluKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZGVsZXRlKGUpOiExfWRlbGV0ZUluKGUpe3JldHVybiBDbihlKT90aGlzLmNvbnRlbnRzPT1udWxsPyExOih0aGlzLmNvbnRlbnRzPW51bGwsITApOkluKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZGVsZXRlSW4oZSk6ITF9Z2V0KGUsdCl7cmV0dXJuIEcodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy5nZXQoZSx0KTp2b2lkIDB9Z2V0SW4oZSx0KXtyZXR1cm4gQ24oZSk/IXQmJlcodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy52YWx1ZTp0aGlzLmNvbnRlbnRzOkcodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy5nZXRJbihlLHQpOnZvaWQgMH1oYXMoZSl7cmV0dXJuIEcodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy5oYXMoZSk6ITF9aGFzSW4oZSl7cmV0dXJuIENuKGUpP3RoaXMuY29udGVudHMhPT12b2lkIDA6Ryh0aGlzLmNvbnRlbnRzKT90aGlzLmNvbnRlbnRzLmhhc0luKGUpOiExfXNldChlLHQpe3RoaXMuY29udGVudHM9PW51bGw/dGhpcy5jb250ZW50cz1wcih0aGlzLnNjaGVtYSxbZV0sdCk6SW4odGhpcy5jb250ZW50cykmJnRoaXMuY29udGVudHMuc2V0KGUsdCl9c2V0SW4oZSx0KXtDbihlKT90aGlzLmNvbnRlbnRzPXQ6dGhpcy5jb250ZW50cz09bnVsbD90aGlzLmNvbnRlbnRzPXByKHRoaXMuc2NoZW1hLEFycmF5LmZyb20oZSksdCk6SW4odGhpcy5jb250ZW50cykmJnRoaXMuY29udGVudHMuc2V0SW4oZSx0KX1zZXRTY2hlbWEoZSx0PXt9KXt0eXBlb2YgZT09XFxcIm51bWJlclxcXCImJihlPVN0cmluZyhlKSk7bGV0IHI7c3dpdGNoKGUpe2Nhc2VcXFwiMS4xXFxcIjp0aGlzLmRpcmVjdGl2ZXM/dGhpcy5kaXJlY3RpdmVzLnlhbWwudmVyc2lvbj1cXFwiMS4xXFxcIjp0aGlzLmRpcmVjdGl2ZXM9bmV3IHBlKHt2ZXJzaW9uOlxcXCIxLjFcXFwifSkscj17bWVyZ2U6ITAscmVzb2x2ZUtub3duVGFnczohMSxzY2hlbWE6XFxcInlhbWwtMS4xXFxcIn07YnJlYWs7Y2FzZVxcXCIxLjJcXFwiOmNhc2VcXFwibmV4dFxcXCI6dGhpcy5kaXJlY3RpdmVzP3RoaXMuZGlyZWN0aXZlcy55YW1sLnZlcnNpb249ZTp0aGlzLmRpcmVjdGl2ZXM9bmV3IHBlKHt2ZXJzaW9uOmV9KSxyPXttZXJnZTohMSxyZXNvbHZlS25vd25UYWdzOiEwLHNjaGVtYTpcXFwiY29yZVxcXCJ9O2JyZWFrO2Nhc2UgbnVsbDp0aGlzLmRpcmVjdGl2ZXMmJmRlbGV0ZSB0aGlzLmRpcmVjdGl2ZXMscj1udWxsO2JyZWFrO2RlZmF1bHQ6e2xldCBzPUpTT04uc3RyaW5naWZ5KGUpO3Rocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJzEuMScsICcxLjInIG9yIG51bGwgYXMgZmlyc3QgYXJndW1lbnQsIGJ1dCBmb3VuZDogJHtzfWApfX1pZih0LnNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCl0aGlzLnNjaGVtYT10LnNjaGVtYTtlbHNlIGlmKHIpdGhpcy5zY2hlbWE9bmV3IEd0KE9iamVjdC5hc3NpZ24ocix0KSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoXFxcIldpdGggYSBudWxsIFlBTUwgdmVyc2lvbiwgdGhlIHsgc2NoZW1hOiBTY2hlbWEgfSBvcHRpb24gaXMgcmVxdWlyZWRcXFwiKX10b0pTKHtqc29uOmUsanNvbkFyZzp0LG1hcEFzTWFwOnIsbWF4QWxpYXNDb3VudDpzLG9uQW5jaG9yOmkscmV2aXZlcjpvfT17fSl7bGV0IGE9e2FuY2hvcnM6bmV3IE1hcCxkb2M6dGhpcyxrZWVwOiFlLG1hcEFzTWFwOnI9PT0hMCxtYXBLZXlXYXJuZWQ6ITEsbWF4QWxpYXNDb3VudDp0eXBlb2Ygcz09XFxcIm51bWJlclxcXCI/czoxMDB9LHU9bWUodGhpcy5jb250ZW50cyx0IT1udWxsP3Q6XFxcIlxcXCIsYSk7aWYodHlwZW9mIGk9PVxcXCJmdW5jdGlvblxcXCIpZm9yKGxldHtjb3VudDpsLHJlczpkfW9mIGEuYW5jaG9ycy52YWx1ZXMoKSlpKGQsbCk7cmV0dXJuIHR5cGVvZiBvPT1cXFwiZnVuY3Rpb25cXFwiP3Z0KG8se1xcXCJcXFwiOnV9LFxcXCJcXFwiLHUpOnV9dG9KU09OKGUsdCl7cmV0dXJuIHRoaXMudG9KUyh7anNvbjohMCxqc29uQXJnOmUsbWFwQXNNYXA6ITEsb25BbmNob3I6dH0pfXRvU3RyaW5nKGU9e30pe2lmKHRoaXMuZXJyb3JzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihcXFwiRG9jdW1lbnQgd2l0aCBlcnJvcnMgY2Fubm90IGJlIHN0cmluZ2lmaWVkXFxcIik7aWYoXFxcImluZGVudFxcXCJpbiBlJiYoIU51bWJlci5pc0ludGVnZXIoZS5pbmRlbnQpfHxOdW1iZXIoZS5pbmRlbnQpPD0wKSl7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoZS5pbmRlbnQpO3Rocm93IG5ldyBFcnJvcihgXFxcImluZGVudFxcXCIgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBub3QgJHt0fWApfXJldHVybiBmdSh0aGlzLGUpfX07ZnVuY3Rpb24gSW4obil7aWYoRyhuKSlyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoXFxcIkV4cGVjdGVkIGEgWUFNTCBjb2xsZWN0aW9uIGFzIGRvY3VtZW50IGNvbnRlbnRzXFxcIil9dmFyIFNyPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIscyl7c3VwZXIoKSx0aGlzLm5hbWU9ZSx0aGlzLmNvZGU9cix0aGlzLm1lc3NhZ2U9cyx0aGlzLnBvcz10fX0sWGU9Y2xhc3MgZXh0ZW5kcyBTcntjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoXFxcIllBTUxQYXJzZUVycm9yXFxcIixlLHQscil9fSxrcj1jbGFzcyBleHRlbmRzIFNye2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcihcXFwiWUFNTFdhcm5pbmdcXFwiLGUsdCxyKX19LEppPShuLGUpPT50PT57aWYodC5wb3NbMF09PT0tMSlyZXR1cm47dC5saW5lUG9zPXQucG9zLm1hcChhPT5lLmxpbmVQb3MoYSkpO2xldHtsaW5lOnIsY29sOnN9PXQubGluZVBvc1swXTt0Lm1lc3NhZ2UrPWAgYXQgbGluZSAke3J9LCBjb2x1bW4gJHtzfWA7bGV0IGk9cy0xLG89bi5zdWJzdHJpbmcoZS5saW5lU3RhcnRzW3ItMV0sZS5saW5lU3RhcnRzW3JdKS5yZXBsYWNlKC9bXFxcXG5cXFxccl0rJC8sXFxcIlxcXCIpO2lmKGk+PTYwJiZvLmxlbmd0aD44MCl7bGV0IGE9TWF0aC5taW4oaS0zOSxvLmxlbmd0aC03OSk7bz1cXFwiXFxcXHUyMDI2XFxcIitvLnN1YnN0cmluZyhhKSxpLT1hLTF9aWYoby5sZW5ndGg+ODAmJihvPW8uc3Vic3RyaW5nKDAsNzkpK1xcXCJcXFxcdTIwMjZcXFwiKSxyPjEmJi9eICokLy50ZXN0KG8uc3Vic3RyaW5nKDAsaSkpKXtsZXQgYT1uLnN1YnN0cmluZyhlLmxpbmVTdGFydHNbci0yXSxlLmxpbmVTdGFydHNbci0xXSk7YS5sZW5ndGg+ODAmJihhPWEuc3Vic3RyaW5nKDAsNzkpK2BcXFxcdTIwMjZcXG5gKSxvPWErb31pZigvW14gXS8udGVzdChvKSl7bGV0IGE9MSx1PXQubGluZVBvc1sxXTt1JiZ1LmxpbmU9PT1yJiZ1LmNvbD5zJiYoYT1NYXRoLm1heCgxLE1hdGgubWluKHUuY29sLXMsODAtaSkpKTtsZXQgbD1cXFwiIFxcXCIucmVwZWF0KGkpK1xcXCJeXFxcIi5yZXBlYXQoYSk7dC5tZXNzYWdlKz1gOlxcblxcbiR7b31cXG4ke2x9XFxuYH19O2Z1bmN0aW9uIGF0KG4se2Zsb3c6ZSxpbmRpY2F0b3I6dCxuZXh0OnIsb2Zmc2V0OnMsb25FcnJvcjppLHN0YXJ0T25OZXdsaW5lOm99KXtsZXQgYT0hMSx1PW8sbD1vLGQ9XFxcIlxcXCIsaD1cXFwiXFxcIixwPSExLGY9ITEsRj0hMSxnPW51bGwseT1udWxsLFM9bnVsbCxPPW51bGwsdj1udWxsO2ZvcihsZXQgVCBvZiBuKXN3aXRjaChGJiYoVC50eXBlIT09XFxcInNwYWNlXFxcIiYmVC50eXBlIT09XFxcIm5ld2xpbmVcXFwiJiZULnR5cGUhPT1cXFwiY29tbWFcXFwiJiZpKFQub2Zmc2V0LFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJUYWdzIGFuZCBhbmNob3JzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIG5leHQgdG9rZW4gYnkgd2hpdGUgc3BhY2VcXFwiKSxGPSExKSxULnR5cGUpe2Nhc2VcXFwic3BhY2VcXFwiOiFlJiZ1JiZ0IT09XFxcImRvYy1zdGFydFxcXCImJlQuc291cmNlWzBdPT09XFxcIlxcdFxcXCImJmkoVCxcXFwiVEFCX0FTX0lOREVOVFxcXCIsXFxcIlRhYnMgYXJlIG5vdCBhbGxvd2VkIGFzIGluZGVudGF0aW9uXFxcIiksbD0hMDticmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOntsfHxpKFQsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkNvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnNcXFwiKTtsZXQgQz1ULnNvdXJjZS5zdWJzdHJpbmcoMSl8fFxcXCIgXFxcIjtkP2QrPWgrQzpkPUMsaD1cXFwiXFxcIix1PSExO2JyZWFrfWNhc2VcXFwibmV3bGluZVxcXCI6dT9kP2QrPVQuc291cmNlOmE9ITA6aCs9VC5zb3VyY2UsdT0hMCxwPSEwLChnfHx5KSYmKGY9ITApLGw9ITA7YnJlYWs7Y2FzZVxcXCJhbmNob3JcXFwiOmcmJmkoVCxcXFwiTVVMVElQTEVfQU5DSE9SU1xcXCIsXFxcIkEgbm9kZSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBhbmNob3JcXFwiKSxULnNvdXJjZS5lbmRzV2l0aChcXFwiOlxcXCIpJiZpKFQub2Zmc2V0K1Quc291cmNlLmxlbmd0aC0xLFxcXCJCQURfQUxJQVNcXFwiLFxcXCJBbmNob3IgZW5kaW5nIGluIDogaXMgYW1iaWd1b3VzXFxcIiwhMCksZz1ULHY9PT1udWxsJiYodj1ULm9mZnNldCksdT0hMSxsPSExLEY9ITA7YnJlYWs7Y2FzZVxcXCJ0YWdcXFwiOnt5JiZpKFQsXFxcIk1VTFRJUExFX1RBR1NcXFwiLFxcXCJBIG5vZGUgY2FuIGhhdmUgYXQgbW9zdCBvbmUgdGFnXFxcIikseT1ULHY9PT1udWxsJiYodj1ULm9mZnNldCksdT0hMSxsPSExLEY9ITA7YnJlYWt9Y2FzZSB0OihnfHx5KSYmaShULFxcXCJCQURfUFJPUF9PUkRFUlxcXCIsYEFuY2hvcnMgYW5kIHRhZ3MgbXVzdCBiZSBhZnRlciB0aGUgJHtULnNvdXJjZX0gaW5kaWNhdG9yYCksTyYmaShULFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgVW5leHBlY3RlZCAke1Quc291cmNlfSBpbiAke2UhPW51bGw/ZTpcXFwiY29sbGVjdGlvblxcXCJ9YCksTz1ULHU9ITEsbD0hMTticmVhaztjYXNlXFxcImNvbW1hXFxcIjppZihlKXtTJiZpKFQsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICwgaW4gJHtlfWApLFM9VCx1PSExLGw9ITE7YnJlYWt9ZGVmYXVsdDppKFQsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICR7VC50eXBlfSB0b2tlbmApLHU9ITEsbD0hMX1sZXQgRD1uW24ubGVuZ3RoLTFdLHc9RD9ELm9mZnNldCtELnNvdXJjZS5sZW5ndGg6cztyZXR1cm4gRiYmciYmci50eXBlIT09XFxcInNwYWNlXFxcIiYmci50eXBlIT09XFxcIm5ld2xpbmVcXFwiJiZyLnR5cGUhPT1cXFwiY29tbWFcXFwiJiYoci50eXBlIT09XFxcInNjYWxhclxcXCJ8fHIuc291cmNlIT09XFxcIlxcXCIpJiZpKHIub2Zmc2V0LFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJUYWdzIGFuZCBhbmNob3JzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIG5leHQgdG9rZW4gYnkgd2hpdGUgc3BhY2VcXFwiKSx7Y29tbWE6Uyxmb3VuZDpPLHNwYWNlQmVmb3JlOmEsY29tbWVudDpkLGhhc05ld2xpbmU6cCxoYXNOZXdsaW5lQWZ0ZXJQcm9wOmYsYW5jaG9yOmcsdGFnOnksZW5kOncsc3RhcnQ6diE9bnVsbD92Ond9fWZ1bmN0aW9uIF90KG4pe2lmKCFuKXJldHVybiBudWxsO3N3aXRjaChuLnR5cGUpe2Nhc2VcXFwiYWxpYXNcXFwiOmNhc2VcXFwic2NhbGFyXFxcIjpjYXNlXFxcImRvdWJsZS1xdW90ZWQtc2NhbGFyXFxcIjpjYXNlXFxcInNpbmdsZS1xdW90ZWQtc2NhbGFyXFxcIjppZihuLnNvdXJjZS5pbmNsdWRlcyhgXFxuYCkpcmV0dXJuITA7aWYobi5lbmQpe2ZvcihsZXQgZSBvZiBuLmVuZClpZihlLnR5cGU9PT1cXFwibmV3bGluZVxcXCIpcmV0dXJuITB9cmV0dXJuITE7Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOmZvcihsZXQgZSBvZiBuLml0ZW1zKXtmb3IobGV0IHQgb2YgZS5zdGFydClpZih0LnR5cGU9PT1cXFwibmV3bGluZVxcXCIpcmV0dXJuITA7aWYoZS5zZXApe2ZvcihsZXQgdCBvZiBlLnNlcClpZih0LnR5cGU9PT1cXFwibmV3bGluZVxcXCIpcmV0dXJuITB9aWYoX3QoZS5rZXkpfHxfdChlLnZhbHVlKSlyZXR1cm4hMH1yZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiBDcihuLGUsdCl7aWYoKGU9PW51bGw/dm9pZCAwOmUudHlwZSk9PT1cXFwiZmxvdy1jb2xsZWN0aW9uXFxcIil7bGV0IHI9ZS5lbmRbMF07ci5pbmRlbnQ9PT1uJiYoci5zb3VyY2U9PT1cXFwiXVxcXCJ8fHIuc291cmNlPT09XFxcIn1cXFwiKSYmX3QoZSkmJnQocixcXFwiQkFEX0lOREVOVFxcXCIsXFxcIkZsb3cgZW5kIGluZGljYXRvciBzaG91bGQgYmUgbW9yZSBpbmRlbnRlZCB0aGFuIHBhcmVudFxcXCIsITApfX1mdW5jdGlvbiBOcyhuLGUsdCl7bGV0e3VuaXF1ZUtleXM6cn09bi5vcHRpb25zO2lmKHI9PT0hMSlyZXR1cm4hMTtsZXQgcz10eXBlb2Ygcj09XFxcImZ1bmN0aW9uXFxcIj9yOihpLG8pPT5pPT09b3x8VyhpKSYmVyhvKSYmaS52YWx1ZT09PW8udmFsdWUmJiEoaS52YWx1ZT09PVxcXCI8PFxcXCImJm4uc2NoZW1hLm1lcmdlKTtyZXR1cm4gZS5zb21lKGk9PnMoaS5rZXksdCkpfXZhciBkdT1cXFwiQWxsIG1hcHBpbmcgaXRlbXMgbXVzdCBzdGFydCBhdCB0aGUgc2FtZSBjb2x1bW5cXFwiO2Z1bmN0aW9uIGh1KHtjb21wb3NlTm9kZTpuLGNvbXBvc2VFbXB0eU5vZGU6ZX0sdCxyLHMsaSl7dmFyIGQsaDtsZXQgbz0oZD1pPT1udWxsP3ZvaWQgMDppLm5vZGVDbGFzcykhPW51bGw/ZDp1ZSxhPW5ldyBvKHQuc2NoZW1hKTt0LmF0Um9vdCYmKHQuYXRSb290PSExKTtsZXQgdT1yLm9mZnNldCxsPW51bGw7Zm9yKGxldCBwIG9mIHIuaXRlbXMpe2xldHtzdGFydDpmLGtleTpGLHNlcDpnLHZhbHVlOnl9PXAsUz1hdChmLHtpbmRpY2F0b3I6XFxcImV4cGxpY2l0LWtleS1pbmRcXFwiLG5leHQ6RiE9bnVsbD9GOmc9PW51bGw/dm9pZCAwOmdbMF0sb2Zmc2V0OnUsb25FcnJvcjpzLHN0YXJ0T25OZXdsaW5lOiEwfSksTz0hUy5mb3VuZDtpZihPKXtpZihGJiYoRi50eXBlPT09XFxcImJsb2NrLXNlcVxcXCI/cyh1LFxcXCJCTE9DS19BU19JTVBMSUNJVF9LRVlcXFwiLFxcXCJBIGJsb2NrIHNlcXVlbmNlIG1heSBub3QgYmUgdXNlZCBhcyBhbiBpbXBsaWNpdCBtYXAga2V5XFxcIik6XFxcImluZGVudFxcXCJpbiBGJiZGLmluZGVudCE9PXIuaW5kZW50JiZzKHUsXFxcIkJBRF9JTkRFTlRcXFwiLGR1KSksIVMuYW5jaG9yJiYhUy50YWcmJiFnKXtsPVMuZW5kLFMuY29tbWVudCYmKGEuY29tbWVudD9hLmNvbW1lbnQrPWBcXG5gK1MuY29tbWVudDphLmNvbW1lbnQ9Uy5jb21tZW50KTtjb250aW51ZX0oUy5oYXNOZXdsaW5lQWZ0ZXJQcm9wfHxfdChGKSkmJnMoRiE9bnVsbD9GOmZbZi5sZW5ndGgtMV0sXFxcIk1VTFRJTElORV9JTVBMSUNJVF9LRVlcXFwiLFxcXCJJbXBsaWNpdCBrZXlzIG5lZWQgdG8gYmUgb24gYSBzaW5nbGUgbGluZVxcXCIpfWVsc2UoKGg9Uy5mb3VuZCk9PW51bGw/dm9pZCAwOmguaW5kZW50KSE9PXIuaW5kZW50JiZzKHUsXFxcIkJBRF9JTkRFTlRcXFwiLGR1KTtsZXQgdj1TLmVuZCxEPUY/bih0LEYsUyxzKTplKHQsdixmLG51bGwsUyxzKTt0LnNjaGVtYS5jb21wYXQmJkNyKHIuaW5kZW50LEYscyksTnModCxhLml0ZW1zLEQpJiZzKHYsXFxcIkRVUExJQ0FURV9LRVlcXFwiLFxcXCJNYXAga2V5cyBtdXN0IGJlIHVuaXF1ZVxcXCIpO2xldCB3PWF0KGchPW51bGw/ZzpbXSx7aW5kaWNhdG9yOlxcXCJtYXAtdmFsdWUtaW5kXFxcIixuZXh0Onksb2Zmc2V0OkQucmFuZ2VbMl0sb25FcnJvcjpzLHN0YXJ0T25OZXdsaW5lOiFGfHxGLnR5cGU9PT1cXFwiYmxvY2stc2NhbGFyXFxcIn0pO2lmKHU9dy5lbmQsdy5mb3VuZCl7TyYmKCh5PT1udWxsP3ZvaWQgMDp5LnR5cGUpPT09XFxcImJsb2NrLW1hcFxcXCImJiF3Lmhhc05ld2xpbmUmJnModSxcXFwiQkxPQ0tfQVNfSU1QTElDSVRfS0VZXFxcIixcXFwiTmVzdGVkIG1hcHBpbmdzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wYWN0IG1hcHBpbmdzXFxcIiksdC5vcHRpb25zLnN0cmljdCYmUy5zdGFydDx3LmZvdW5kLm9mZnNldC0xMDI0JiZzKEQucmFuZ2UsXFxcIktFWV9PVkVSXzEwMjRfQ0hBUlNcXFwiLFxcXCJUaGUgOiBpbmRpY2F0b3IgbXVzdCBiZSBhdCBtb3N0IDEwMjQgY2hhcnMgYWZ0ZXIgdGhlIHN0YXJ0IG9mIGFuIGltcGxpY2l0IGJsb2NrIG1hcHBpbmcga2V5XFxcIikpO2xldCBUPXk/bih0LHksdyxzKTplKHQsdSxnLG51bGwsdyxzKTt0LnNjaGVtYS5jb21wYXQmJkNyKHIuaW5kZW50LHkscyksdT1ULnJhbmdlWzJdO2xldCBDPW5ldyBzZShELFQpO3Qub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zJiYoQy5zcmNUb2tlbj1wKSxhLml0ZW1zLnB1c2goQyl9ZWxzZXtPJiZzKEQucmFuZ2UsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkltcGxpY2l0IG1hcCBrZXlzIG5lZWQgdG8gYmUgZm9sbG93ZWQgYnkgbWFwIHZhbHVlc1xcXCIpLHcuY29tbWVudCYmKEQuY29tbWVudD9ELmNvbW1lbnQrPWBcXG5gK3cuY29tbWVudDpELmNvbW1lbnQ9dy5jb21tZW50KTtsZXQgVD1uZXcgc2UoRCk7dC5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMmJihULnNyY1Rva2VuPXApLGEuaXRlbXMucHVzaChUKX19cmV0dXJuIGwmJmw8dSYmcyhsLFxcXCJJTVBPU1NJQkxFXFxcIixcXFwiTWFwIGNvbW1lbnQgd2l0aCB0cmFpbGluZyBjb250ZW50XFxcIiksYS5yYW5nZT1bci5vZmZzZXQsdSxsIT1udWxsP2w6dV0sYX1mdW5jdGlvbiBwdSh7Y29tcG9zZU5vZGU6bixjb21wb3NlRW1wdHlOb2RlOmV9LHQscixzLGkpe3ZhciBkO2xldCBvPShkPWk9PW51bGw/dm9pZCAwOmkubm9kZUNsYXNzKSE9bnVsbD9kOndlLGE9bmV3IG8odC5zY2hlbWEpO3QuYXRSb290JiYodC5hdFJvb3Q9ITEpO2xldCB1PXIub2Zmc2V0LGw9bnVsbDtmb3IobGV0e3N0YXJ0OmgsdmFsdWU6cH1vZiByLml0ZW1zKXtsZXQgZj1hdChoLHtpbmRpY2F0b3I6XFxcInNlcS1pdGVtLWluZFxcXCIsbmV4dDpwLG9mZnNldDp1LG9uRXJyb3I6cyxzdGFydE9uTmV3bGluZTohMH0pO2lmKCFmLmZvdW5kKWlmKGYuYW5jaG9yfHxmLnRhZ3x8cClwJiZwLnR5cGU9PT1cXFwiYmxvY2stc2VxXFxcIj9zKGYuZW5kLFxcXCJCQURfSU5ERU5UXFxcIixcXFwiQWxsIHNlcXVlbmNlIGl0ZW1zIG11c3Qgc3RhcnQgYXQgdGhlIHNhbWUgY29sdW1uXFxcIik6cyh1LFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJTZXF1ZW5jZSBpdGVtIHdpdGhvdXQgLSBpbmRpY2F0b3JcXFwiKTtlbHNle2w9Zi5lbmQsZi5jb21tZW50JiYoYS5jb21tZW50PWYuY29tbWVudCk7Y29udGludWV9bGV0IEY9cD9uKHQscCxmLHMpOmUodCxmLmVuZCxoLG51bGwsZixzKTt0LnNjaGVtYS5jb21wYXQmJkNyKHIuaW5kZW50LHAscyksdT1GLnJhbmdlWzJdLGEuaXRlbXMucHVzaChGKX1yZXR1cm4gYS5yYW5nZT1bci5vZmZzZXQsdSxsIT1udWxsP2w6dV0sYX1mdW5jdGlvbiB1dChuLGUsdCxyKXtsZXQgcz1cXFwiXFxcIjtpZihuKXtsZXQgaT0hMSxvPVxcXCJcXFwiO2ZvcihsZXQgYSBvZiBuKXtsZXR7c291cmNlOnUsdHlwZTpsfT1hO3N3aXRjaChsKXtjYXNlXFxcInNwYWNlXFxcIjppPSEwO2JyZWFrO2Nhc2VcXFwiY29tbWVudFxcXCI6e3QmJiFpJiZyKGEsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkNvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnNcXFwiKTtsZXQgZD11LnN1YnN0cmluZygxKXx8XFxcIiBcXFwiO3M/cys9bytkOnM9ZCxvPVxcXCJcXFwiO2JyZWFrfWNhc2VcXFwibmV3bGluZVxcXCI6cyYmKG8rPXUpLGk9ITA7YnJlYWs7ZGVmYXVsdDpyKGEsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICR7bH0gYXQgbm9kZSBlbmRgKX1lKz11Lmxlbmd0aH19cmV0dXJue2NvbW1lbnQ6cyxvZmZzZXQ6ZX19dmFyIHppPVxcXCJCbG9jayBjb2xsZWN0aW9ucyBhcmUgbm90IGFsbG93ZWQgd2l0aGluIGZsb3cgY29sbGVjdGlvbnNcXFwiLFlpPW49Pm4mJihuLnR5cGU9PT1cXFwiYmxvY2stbWFwXFxcInx8bi50eXBlPT09XFxcImJsb2NrLXNlcVxcXCIpO2Z1bmN0aW9uIG11KHtjb21wb3NlTm9kZTpuLGNvbXBvc2VFbXB0eU5vZGU6ZX0sdCxyLHMsaSl7dmFyIHksUztsZXQgbz1yLnN0YXJ0LnNvdXJjZT09PVxcXCJ7XFxcIixhPW8/XFxcImZsb3cgbWFwXFxcIjpcXFwiZmxvdyBzZXF1ZW5jZVxcXCIsdT0oeT1pPT1udWxsP3ZvaWQgMDppLm5vZGVDbGFzcykhPW51bGw/eTpvP3VlOndlLGw9bmV3IHUodC5zY2hlbWEpO2wuZmxvdz0hMDtsZXQgZD10LmF0Um9vdDtkJiYodC5hdFJvb3Q9ITEpO2xldCBoPXIub2Zmc2V0K3Iuc3RhcnQuc291cmNlLmxlbmd0aDtmb3IobGV0IE89MDtPPHIuaXRlbXMubGVuZ3RoOysrTyl7bGV0IHY9ci5pdGVtc1tPXSx7c3RhcnQ6RCxrZXk6dyxzZXA6VCx2YWx1ZTpDfT12LE09YXQoRCx7ZmxvdzphLGluZGljYXRvcjpcXFwiZXhwbGljaXQta2V5LWluZFxcXCIsbmV4dDp3IT1udWxsP3c6VD09bnVsbD92b2lkIDA6VFswXSxvZmZzZXQ6aCxvbkVycm9yOnMsc3RhcnRPbk5ld2xpbmU6ITF9KTtpZighTS5mb3VuZCl7aWYoIU0uYW5jaG9yJiYhTS50YWcmJiFUJiYhQyl7Tz09PTAmJk0uY29tbWE/cyhNLmNvbW1hLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgVW5leHBlY3RlZCAsIGluICR7YX1gKTpPPHIuaXRlbXMubGVuZ3RoLTEmJnMoTS5zdGFydCxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYFVuZXhwZWN0ZWQgZW1wdHkgaXRlbSBpbiAke2F9YCksTS5jb21tZW50JiYobC5jb21tZW50P2wuY29tbWVudCs9YFxcbmArTS5jb21tZW50OmwuY29tbWVudD1NLmNvbW1lbnQpLGg9TS5lbmQ7Y29udGludWV9IW8mJnQub3B0aW9ucy5zdHJpY3QmJl90KHcpJiZzKHcsXFxcIk1VTFRJTElORV9JTVBMSUNJVF9LRVlcXFwiLFxcXCJJbXBsaWNpdCBrZXlzIG9mIGZsb3cgc2VxdWVuY2UgcGFpcnMgbmVlZCB0byBiZSBvbiBhIHNpbmdsZSBsaW5lXFxcIil9aWYoTz09PTApTS5jb21tYSYmcyhNLmNvbW1hLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgVW5leHBlY3RlZCAsIGluICR7YX1gKTtlbHNlIGlmKE0uY29tbWF8fHMoTS5zdGFydCxcXFwiTUlTU0lOR19DSEFSXFxcIixgTWlzc2luZyAsIGJldHdlZW4gJHthfSBpdGVtc2ApLE0uY29tbWVudCl7bGV0IFY9XFxcIlxcXCI7ZTpmb3IobGV0IGogb2YgRClzd2l0Y2goai50eXBlKXtjYXNlXFxcImNvbW1hXFxcIjpjYXNlXFxcInNwYWNlXFxcIjpicmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOlY9ai5zb3VyY2Uuc3Vic3RyaW5nKDEpO2JyZWFrIGU7ZGVmYXVsdDpicmVhayBlfWlmKFYpe2xldCBqPWwuaXRlbXNbbC5pdGVtcy5sZW5ndGgtMV07SChqKSYmKGo9KFM9ai52YWx1ZSkhPW51bGw/UzpqLmtleSksai5jb21tZW50P2ouY29tbWVudCs9YFxcbmArVjpqLmNvbW1lbnQ9VixNLmNvbW1lbnQ9TS5jb21tZW50LnN1YnN0cmluZyhWLmxlbmd0aCsxKX19aWYoIW8mJiFUJiYhTS5mb3VuZCl7bGV0IFY9Qz9uKHQsQyxNLHMpOmUodCxNLmVuZCxULG51bGwsTSxzKTtsLml0ZW1zLnB1c2goViksaD1WLnJhbmdlWzJdLFlpKEMpJiZzKFYucmFuZ2UsXFxcIkJMT0NLX0lOX0ZMT1dcXFwiLHppKX1lbHNle2xldCBWPU0uZW5kLGo9dz9uKHQsdyxNLHMpOmUodCxWLEQsbnVsbCxNLHMpO1lpKHcpJiZzKGoucmFuZ2UsXFxcIkJMT0NLX0lOX0ZMT1dcXFwiLHppKTtsZXQgej1hdChUIT1udWxsP1Q6W10se2Zsb3c6YSxpbmRpY2F0b3I6XFxcIm1hcC12YWx1ZS1pbmRcXFwiLG5leHQ6QyxvZmZzZXQ6ai5yYW5nZVsyXSxvbkVycm9yOnMsc3RhcnRPbk5ld2xpbmU6ITF9KTtpZih6LmZvdW5kKXtpZighbyYmIU0uZm91bmQmJnQub3B0aW9ucy5zdHJpY3Qpe2lmKFQpZm9yKGxldCB4IG9mIFQpe2lmKHg9PT16LmZvdW5kKWJyZWFrO2lmKHgudHlwZT09PVxcXCJuZXdsaW5lXFxcIil7cyh4LFxcXCJNVUxUSUxJTkVfSU1QTElDSVRfS0VZXFxcIixcXFwiSW1wbGljaXQga2V5cyBvZiBmbG93IHNlcXVlbmNlIHBhaXJzIG5lZWQgdG8gYmUgb24gYSBzaW5nbGUgbGluZVxcXCIpO2JyZWFrfX1NLnN0YXJ0PHouZm91bmQub2Zmc2V0LTEwMjQmJnMoei5mb3VuZCxcXFwiS0VZX09WRVJfMTAyNF9DSEFSU1xcXCIsXFxcIlRoZSA6IGluZGljYXRvciBtdXN0IGJlIGF0IG1vc3QgMTAyNCBjaGFycyBhZnRlciB0aGUgc3RhcnQgb2YgYW4gaW1wbGljaXQgZmxvdyBzZXF1ZW5jZSBrZXlcXFwiKX19ZWxzZSBDJiYoXFxcInNvdXJjZVxcXCJpbiBDJiZDLnNvdXJjZSYmQy5zb3VyY2VbMF09PT1cXFwiOlxcXCI/cyhDLFxcXCJNSVNTSU5HX0NIQVJcXFwiLGBNaXNzaW5nIHNwYWNlIGFmdGVyIDogaW4gJHthfWApOnMoei5zdGFydCxcXFwiTUlTU0lOR19DSEFSXFxcIixgTWlzc2luZyAsIG9yIDogYmV0d2VlbiAke2F9IGl0ZW1zYCkpO2xldCByZT1DP24odCxDLHoscyk6ei5mb3VuZD9lKHQsei5lbmQsVCxudWxsLHoscyk6bnVsbDtyZT9ZaShDKSYmcyhyZS5yYW5nZSxcXFwiQkxPQ0tfSU5fRkxPV1xcXCIsemkpOnouY29tbWVudCYmKGouY29tbWVudD9qLmNvbW1lbnQrPWBcXG5gK3ouY29tbWVudDpqLmNvbW1lbnQ9ei5jb21tZW50KTtsZXQgbGU9bmV3IHNlKGoscmUpO2lmKHQub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zJiYobGUuc3JjVG9rZW49diksbyl7bGV0IHg9bDtOcyh0LHguaXRlbXMsaikmJnMoVixcXFwiRFVQTElDQVRFX0tFWVxcXCIsXFxcIk1hcCBrZXlzIG11c3QgYmUgdW5pcXVlXFxcIikseC5pdGVtcy5wdXNoKGxlKX1lbHNle2xldCB4PW5ldyB1ZSh0LnNjaGVtYSk7eC5mbG93PSEwLHguaXRlbXMucHVzaChsZSksbC5pdGVtcy5wdXNoKHgpfWg9cmU/cmUucmFuZ2VbMl06ei5lbmR9fWxldCBwPW8/XFxcIn1cXFwiOlxcXCJdXFxcIixbZiwuLi5GXT1yLmVuZCxnPWg7aWYoZiYmZi5zb3VyY2U9PT1wKWc9Zi5vZmZzZXQrZi5zb3VyY2UubGVuZ3RoO2Vsc2V7bGV0IE89YVswXS50b1VwcGVyQ2FzZSgpK2Euc3Vic3RyaW5nKDEpLHY9ZD9gJHtPfSBtdXN0IGVuZCB3aXRoIGEgJHtwfWA6YCR7T30gaW4gYmxvY2sgY29sbGVjdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBpbmRlbnRlZCBhbmQgZW5kIHdpdGggYSAke3B9YDtzKGgsZD9cXFwiTUlTU0lOR19DSEFSXFxcIjpcXFwiQkFEX0lOREVOVFxcXCIsdiksZiYmZi5zb3VyY2UubGVuZ3RoIT09MSYmRi51bnNoaWZ0KGYpfWlmKEYubGVuZ3RoPjApe2xldCBPPXV0KEYsZyx0Lm9wdGlvbnMuc3RyaWN0LHMpO08uY29tbWVudCYmKGwuY29tbWVudD9sLmNvbW1lbnQrPWBcXG5gK08uY29tbWVudDpsLmNvbW1lbnQ9Ty5jb21tZW50KSxsLnJhbmdlPVtyLm9mZnNldCxnLE8ub2Zmc2V0XX1lbHNlIGwucmFuZ2U9W3Iub2Zmc2V0LGcsZ107cmV0dXJuIGx9ZnVuY3Rpb24gR2kobixlLHQscixzLGkpe2xldCBvPXQudHlwZT09PVxcXCJibG9jay1tYXBcXFwiP2h1KG4sZSx0LHIsaSk6dC50eXBlPT09XFxcImJsb2NrLXNlcVxcXCI/cHUobixlLHQscixpKTptdShuLGUsdCxyLGkpLGE9by5jb25zdHJ1Y3RvcjtyZXR1cm4gcz09PVxcXCIhXFxcInx8cz09PWEudGFnTmFtZT8oby50YWc9YS50YWdOYW1lLG8pOihzJiYoby50YWc9cyksbyl9ZnVuY3Rpb24gRHUobixlLHQscixzKXt2YXIgaCxwO2xldCBpPXI/ZS5kaXJlY3RpdmVzLnRhZ05hbWUoci5zb3VyY2UsZj0+cyhyLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGYpKTpudWxsLG89dC50eXBlPT09XFxcImJsb2NrLW1hcFxcXCI/XFxcIm1hcFxcXCI6dC50eXBlPT09XFxcImJsb2NrLXNlcVxcXCI/XFxcInNlcVxcXCI6dC5zdGFydC5zb3VyY2U9PT1cXFwie1xcXCI/XFxcIm1hcFxcXCI6XFxcInNlcVxcXCI7aWYoIXJ8fCFpfHxpPT09XFxcIiFcXFwifHxpPT09dWUudGFnTmFtZSYmbz09PVxcXCJtYXBcXFwifHxpPT09d2UudGFnTmFtZSYmbz09PVxcXCJzZXFcXFwifHwhbylyZXR1cm4gR2kobixlLHQscyxpKTtsZXQgYT1lLnNjaGVtYS50YWdzLmZpbmQoZj0+Zi50YWc9PT1pJiZmLmNvbGxlY3Rpb249PT1vKTtpZighYSl7bGV0IGY9ZS5zY2hlbWEua25vd25UYWdzW2ldO2lmKGYmJmYuY29sbGVjdGlvbj09PW8pZS5zY2hlbWEudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oe30sZix7ZGVmYXVsdDohMX0pKSxhPWY7ZWxzZSByZXR1cm4gZiE9bnVsbCYmZi5jb2xsZWN0aW9uP3MocixcXFwiQkFEX0NPTExFQ1RJT05fVFlQRVxcXCIsYCR7Zi50YWd9IHVzZWQgZm9yICR7b30gY29sbGVjdGlvbiwgYnV0IGV4cGVjdHMgJHtmLmNvbGxlY3Rpb259YCwhMCk6cyhyLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGBVbnJlc29sdmVkIHRhZzogJHtpfWAsITApLEdpKG4sZSx0LHMsaSl9bGV0IHU9R2kobixlLHQscyxpLGEpLGw9KHA9KGg9YS5yZXNvbHZlKT09bnVsbD92b2lkIDA6aC5jYWxsKGEsdSxmPT5zKHIsXFxcIlRBR19SRVNPTFZFX0ZBSUxFRFxcXCIsZiksZS5vcHRpb25zKSkhPW51bGw/cDp1LGQ9SyhsKT9sOm5ldyBQKGwpO3JldHVybiBkLnJhbmdlPXUucmFuZ2UsZC50YWc9aSxhIT1udWxsJiZhLmZvcm1hdCYmKGQuZm9ybWF0PWEuZm9ybWF0KSxkfWZ1bmN0aW9uIFppKG4sZSx0KXtsZXQgcj1uLm9mZnNldCxzPVhjKG4sZSx0KTtpZighcylyZXR1cm57dmFsdWU6XFxcIlxcXCIsdHlwZTpudWxsLGNvbW1lbnQ6XFxcIlxcXCIscmFuZ2U6W3IscixyXX07bGV0IGk9cy5tb2RlPT09XFxcIj5cXFwiP1AuQkxPQ0tfRk9MREVEOlAuQkxPQ0tfTElURVJBTCxvPW4uc291cmNlP2VmKG4uc291cmNlKTpbXSxhPW8ubGVuZ3RoO2ZvcihsZXQgZz1vLmxlbmd0aC0xO2c+PTA7LS1nKXtsZXQgeT1vW2ddWzFdO2lmKHk9PT1cXFwiXFxcInx8eT09PVxcXCJcXFxcclxcXCIpYT1nO2Vsc2UgYnJlYWt9aWYoYT09PTApe2xldCBnPXMuY2hvbXA9PT1cXFwiK1xcXCImJm8ubGVuZ3RoPjA/YFxcbmAucmVwZWF0KE1hdGgubWF4KDEsby5sZW5ndGgtMSkpOlxcXCJcXFwiLHk9citzLmxlbmd0aDtyZXR1cm4gbi5zb3VyY2UmJih5Kz1uLnNvdXJjZS5sZW5ndGgpLHt2YWx1ZTpnLHR5cGU6aSxjb21tZW50OnMuY29tbWVudCxyYW5nZTpbcix5LHldfX1sZXQgdT1uLmluZGVudCtzLmluZGVudCxsPW4ub2Zmc2V0K3MubGVuZ3RoLGQ9MDtmb3IobGV0IGc9MDtnPGE7KytnKXtsZXRbeSxTXT1vW2ddO2lmKFM9PT1cXFwiXFxcInx8Uz09PVxcXCJcXFxcclxcXCIpcy5pbmRlbnQ9PT0wJiZ5Lmxlbmd0aD51JiYodT15Lmxlbmd0aCk7ZWxzZXtpZih5Lmxlbmd0aDx1KXtsZXQgTz1cXFwiQmxvY2sgc2NhbGFycyB3aXRoIG1vcmUtaW5kZW50ZWQgbGVhZGluZyBlbXB0eSBsaW5lcyBtdXN0IHVzZSBhbiBleHBsaWNpdCBpbmRlbnRhdGlvbiBpbmRpY2F0b3JcXFwiO3QobCt5Lmxlbmd0aCxcXFwiTUlTU0lOR19DSEFSXFxcIixPKX1zLmluZGVudD09PTAmJih1PXkubGVuZ3RoKSxkPWc7YnJlYWt9bCs9eS5sZW5ndGgrUy5sZW5ndGgrMX1mb3IobGV0IGc9by5sZW5ndGgtMTtnPj1hOy0tZylvW2ddWzBdLmxlbmd0aD51JiYoYT1nKzEpO2xldCBoPVxcXCJcXFwiLHA9XFxcIlxcXCIsZj0hMTtmb3IobGV0IGc9MDtnPGQ7KytnKWgrPW9bZ11bMF0uc2xpY2UodSkrYFxcbmA7Zm9yKGxldCBnPWQ7ZzxhOysrZyl7bGV0W3ksU109b1tnXTtsKz15Lmxlbmd0aCtTLmxlbmd0aCsxO2xldCBPPVNbUy5sZW5ndGgtMV09PT1cXFwiXFxcXHJcXFwiO2lmKE8mJihTPVMuc2xpY2UoMCwtMSkpLFMmJnkubGVuZ3RoPHUpe2xldCBEPWBCbG9jayBzY2FsYXIgbGluZXMgbXVzdCBub3QgYmUgbGVzcyBpbmRlbnRlZCB0aGFuIHRoZWlyICR7cy5pbmRlbnQ/XFxcImV4cGxpY2l0IGluZGVudGF0aW9uIGluZGljYXRvclxcXCI6XFxcImZpcnN0IGxpbmVcXFwifWA7dChsLVMubGVuZ3RoLShPPzI6MSksXFxcIkJBRF9JTkRFTlRcXFwiLEQpLHk9XFxcIlxcXCJ9aT09PVAuQkxPQ0tfTElURVJBTD8oaCs9cCt5LnNsaWNlKHUpK1MscD1gXFxuYCk6eS5sZW5ndGg+dXx8U1swXT09PVxcXCJcXHRcXFwiPyhwPT09XFxcIiBcXFwiP3A9YFxcbmA6IWYmJnA9PT1gXFxuYCYmKHA9YFxcblxcbmApLGgrPXAreS5zbGljZSh1KStTLHA9YFxcbmAsZj0hMCk6Uz09PVxcXCJcXFwiP3A9PT1gXFxuYD9oKz1gXFxuYDpwPWBcXG5gOihoKz1wK1MscD1cXFwiIFxcXCIsZj0hMSl9c3dpdGNoKHMuY2hvbXApe2Nhc2VcXFwiLVxcXCI6YnJlYWs7Y2FzZVxcXCIrXFxcIjpmb3IobGV0IGc9YTtnPG8ubGVuZ3RoOysrZyloKz1gXFxuYCtvW2ddWzBdLnNsaWNlKHUpO2hbaC5sZW5ndGgtMV0hPT1gXFxuYCYmKGgrPWBcXG5gKTticmVhaztkZWZhdWx0OmgrPWBcXG5gfWxldCBGPXIrcy5sZW5ndGgrbi5zb3VyY2UubGVuZ3RoO3JldHVybnt2YWx1ZTpoLHR5cGU6aSxjb21tZW50OnMuY29tbWVudCxyYW5nZTpbcixGLEZdfX1mdW5jdGlvbiBYYyh7b2Zmc2V0Om4scHJvcHM6ZX0sdCxyKXtpZihlWzBdLnR5cGUhPT1cXFwiYmxvY2stc2NhbGFyLWhlYWRlclxcXCIpcmV0dXJuIHIoZVswXSxcXFwiSU1QT1NTSUJMRVxcXCIsXFxcIkJsb2NrIHNjYWxhciBoZWFkZXIgbm90IGZvdW5kXFxcIiksbnVsbDtsZXR7c291cmNlOnN9PWVbMF0saT1zWzBdLG89MCxhPVxcXCJcXFwiLHU9LTE7Zm9yKGxldCBwPTE7cDxzLmxlbmd0aDsrK3Ape2xldCBmPXNbcF07aWYoIWEmJihmPT09XFxcIi1cXFwifHxmPT09XFxcIitcXFwiKSlhPWY7ZWxzZXtsZXQgRj1OdW1iZXIoZik7IW8mJkY/bz1GOnU9PT0tMSYmKHU9bitwKX19dSE9PS0xJiZyKHUsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBCbG9jayBzY2FsYXIgaGVhZGVyIGluY2x1ZGVzIGV4dHJhIGNoYXJhY3RlcnM6ICR7c31gKTtsZXQgbD0hMSxkPVxcXCJcXFwiLGg9cy5sZW5ndGg7Zm9yKGxldCBwPTE7cDxlLmxlbmd0aDsrK3Ape2xldCBmPWVbcF07c3dpdGNoKGYudHlwZSl7Y2FzZVxcXCJzcGFjZVxcXCI6bD0hMDtjYXNlXFxcIm5ld2xpbmVcXFwiOmgrPWYuc291cmNlLmxlbmd0aDticmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOnQmJiFsJiZyKGYsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkNvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnNcXFwiKSxoKz1mLnNvdXJjZS5sZW5ndGgsZD1mLnNvdXJjZS5zdWJzdHJpbmcoMSk7YnJlYWs7Y2FzZVxcXCJlcnJvclxcXCI6cihmLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixmLm1lc3NhZ2UpLGgrPWYuc291cmNlLmxlbmd0aDticmVhaztkZWZhdWx0OntsZXQgRj1gVW5leHBlY3RlZCB0b2tlbiBpbiBibG9jayBzY2FsYXIgaGVhZGVyOiAke2YudHlwZX1gO3IoZixcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsRik7bGV0IGc9Zi5zb3VyY2U7ZyYmdHlwZW9mIGc9PVxcXCJzdHJpbmdcXFwiJiYoaCs9Zy5sZW5ndGgpfX19cmV0dXJue21vZGU6aSxpbmRlbnQ6byxjaG9tcDphLGNvbW1lbnQ6ZCxsZW5ndGg6aH19ZnVuY3Rpb24gZWYobil7bGV0IGU9bi5zcGxpdCgvXFxcXG4oICopLyksdD1lWzBdLHI9dC5tYXRjaCgvXiggKikvKSxpPVtyIT1udWxsJiZyWzFdP1tyWzFdLHQuc2xpY2UoclsxXS5sZW5ndGgpXTpbXFxcIlxcXCIsdF1dO2ZvcihsZXQgbz0xO288ZS5sZW5ndGg7bys9MilpLnB1c2goW2Vbb10sZVtvKzFdXSk7cmV0dXJuIGl9ZnVuY3Rpb24gUWkobixlLHQpe2xldHtvZmZzZXQ6cix0eXBlOnMsc291cmNlOmksZW5kOm99PW4sYSx1LGw9KHAsZixGKT0+dChyK3AsZixGKTtzd2l0Y2gocyl7Y2FzZVxcXCJzY2FsYXJcXFwiOmE9UC5QTEFJTix1PXRmKGksbCk7YnJlYWs7Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6YT1QLlFVT1RFX1NJTkdMRSx1PW5mKGksbCk7YnJlYWs7Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6YT1QLlFVT1RFX0RPVUJMRSx1PXJmKGksbCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdChuLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgRXhwZWN0ZWQgYSBmbG93IHNjYWxhciB2YWx1ZSwgYnV0IGZvdW5kOiAke3N9YCkse3ZhbHVlOlxcXCJcXFwiLHR5cGU6bnVsbCxjb21tZW50OlxcXCJcXFwiLHJhbmdlOltyLHIraS5sZW5ndGgscitpLmxlbmd0aF19fWxldCBkPXIraS5sZW5ndGgsaD11dChvLGQsZSx0KTtyZXR1cm57dmFsdWU6dSx0eXBlOmEsY29tbWVudDpoLmNvbW1lbnQscmFuZ2U6W3IsZCxoLm9mZnNldF19fWZ1bmN0aW9uIHRmKG4sZSl7bGV0IHQ9XFxcIlxcXCI7c3dpdGNoKG5bMF0pe2Nhc2VcXFwiXFx0XFxcIjp0PVxcXCJhIHRhYiBjaGFyYWN0ZXJcXFwiO2JyZWFrO2Nhc2VcXFwiLFxcXCI6dD1cXFwiZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVyICxcXFwiO2JyZWFrO2Nhc2VcXFwiJVxcXCI6dD1cXFwiZGlyZWN0aXZlIGluZGljYXRvciBjaGFyYWN0ZXIgJVxcXCI7YnJlYWs7Y2FzZVxcXCJ8XFxcIjpjYXNlXFxcIj5cXFwiOnt0PWBibG9jayBzY2FsYXIgaW5kaWNhdG9yICR7blswXX1gO2JyZWFrfWNhc2VcXFwiQFxcXCI6Y2FzZVxcXCJgXFxcIjp7dD1gcmVzZXJ2ZWQgY2hhcmFjdGVyICR7blswXX1gO2JyZWFrfX1yZXR1cm4gdCYmZSgwLFxcXCJCQURfU0NBTEFSX1NUQVJUXFxcIixgUGxhaW4gdmFsdWUgY2Fubm90IHN0YXJ0IHdpdGggJHt0fWApLHl1KG4pfWZ1bmN0aW9uIG5mKG4sZSl7cmV0dXJuKG5bbi5sZW5ndGgtMV0hPT1cXFwiJ1xcXCJ8fG4ubGVuZ3RoPT09MSkmJmUobi5sZW5ndGgsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIk1pc3NpbmcgY2xvc2luZyAncXVvdGVcXFwiKSx5dShuLnNsaWNlKDEsLTEpKS5yZXBsYWNlKC8nJy9nLFxcXCInXFxcIil9ZnVuY3Rpb24geXUobil7dmFyIHU7bGV0IGUsdDt0cnl7ZT1uZXcgUmVnRXhwKGAoLio/KSg/PCFbIFxcdF0pWyBcXHRdKlxcXFxyP1xcbmAsXFxcInN5XFxcIiksdD1uZXcgUmVnRXhwKGBbIFxcdF0qKC4qPykoPzooPzwhWyBcXHRdKVsgXFx0XSopP1xcXFxyP1xcbmAsXFxcInN5XFxcIil9Y2F0Y2gobCl7ZT1uZXcgUmVnRXhwKFxcXCIoLio/KVsgXFxcXFxcXFx0XSpcXFxcXFxcXHI/XFxcXFxcXFxuXFxcIixcXFwic3lcXFwiKSx0PW5ldyBSZWdFeHAoXFxcIlsgXFxcXFxcXFx0XSooLio/KVsgXFxcXFxcXFx0XSpcXFxcXFxcXHI/XFxcXFxcXFxuXFxcIixcXFwic3lcXFwiKX1sZXQgcj1lLmV4ZWMobik7aWYoIXIpcmV0dXJuIG47bGV0IHM9clsxXSxpPVxcXCIgXFxcIixvPWUubGFzdEluZGV4O2Zvcih0Lmxhc3RJbmRleD1vO3I9dC5leGVjKG4pOylyWzFdPT09XFxcIlxcXCI/aT09PWBcXG5gP3MrPWk6aT1gXFxuYDoocys9aStyWzFdLGk9XFxcIiBcXFwiKSxvPXQubGFzdEluZGV4O2xldCBhPW5ldyBSZWdFeHAoXFxcIlsgXFxcXFxcXFx0XSooLiopXFxcIixcXFwic3lcXFwiKTtyZXR1cm4gYS5sYXN0SW5kZXg9byxyPWEuZXhlYyhuKSxzK2krKCh1PXI9PW51bGw/dm9pZCAwOnJbMV0pIT1udWxsP3U6XFxcIlxcXCIpfWZ1bmN0aW9uIHJmKG4sZSl7bGV0IHQ9XFxcIlxcXCI7Zm9yKGxldCByPTE7cjxuLmxlbmd0aC0xOysrcil7bGV0IHM9bltyXTtpZighKHM9PT1cXFwiXFxcXHJcXFwiJiZuW3IrMV09PT1gXFxuYCkpaWYocz09PWBcXG5gKXtsZXR7Zm9sZDppLG9mZnNldDpvfT1zZihuLHIpO3QrPWkscj1vfWVsc2UgaWYocz09PVxcXCJcXFxcXFxcXFxcXCIpe2xldCBpPW5bKytyXSxvPW9mW2ldO2lmKG8pdCs9bztlbHNlIGlmKGk9PT1gXFxuYClmb3IoaT1uW3IrMV07aT09PVxcXCIgXFxcInx8aT09PVxcXCJcXHRcXFwiOylpPW5bKytyKzFdO2Vsc2UgaWYoaT09PVxcXCJcXFxcclxcXCImJm5bcisxXT09PWBcXG5gKWZvcihpPW5bKytyKzFdO2k9PT1cXFwiIFxcXCJ8fGk9PT1cXFwiXFx0XFxcIjspaT1uWysrcisxXTtlbHNlIGlmKGk9PT1cXFwieFxcXCJ8fGk9PT1cXFwidVxcXCJ8fGk9PT1cXFwiVVxcXCIpe2xldCBhPXt4OjIsdTo0LFU6OH1baV07dCs9YWYobixyKzEsYSxlKSxyKz1hfWVsc2V7bGV0IGE9bi5zdWJzdHIoci0xLDIpO2Uoci0xLFxcXCJCQURfRFFfRVNDQVBFXFxcIixgSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgJHthfWApLHQrPWF9fWVsc2UgaWYocz09PVxcXCIgXFxcInx8cz09PVxcXCJcXHRcXFwiKXtsZXQgaT1yLG89bltyKzFdO2Zvcig7bz09PVxcXCIgXFxcInx8bz09PVxcXCJcXHRcXFwiOylvPW5bKytyKzFdO28hPT1gXFxuYCYmIShvPT09XFxcIlxcXFxyXFxcIiYmbltyKzJdPT09YFxcbmApJiYodCs9cj5pP24uc2xpY2UoaSxyKzEpOnMpfWVsc2UgdCs9c31yZXR1cm4obltuLmxlbmd0aC0xXSE9PSdcXFwiJ3x8bi5sZW5ndGg9PT0xKSYmZShuLmxlbmd0aCxcXFwiTUlTU0lOR19DSEFSXFxcIiwnTWlzc2luZyBjbG9zaW5nIFxcXCJxdW90ZScpLHR9ZnVuY3Rpb24gc2YobixlKXtsZXQgdD1cXFwiXFxcIixyPW5bZSsxXTtmb3IoOyhyPT09XFxcIiBcXFwifHxyPT09XFxcIlxcdFxcXCJ8fHI9PT1gXFxuYHx8cj09PVxcXCJcXFxcclxcXCIpJiYhKHI9PT1cXFwiXFxcXHJcXFwiJiZuW2UrMl0hPT1gXFxuYCk7KXI9PT1gXFxuYCYmKHQrPWBcXG5gKSxlKz0xLHI9bltlKzFdO3JldHVybiB0fHwodD1cXFwiIFxcXCIpLHtmb2xkOnQsb2Zmc2V0OmV9fXZhciBvZj17MDpcXFwiXFxcXDBcXFwiLGE6XFxcIlxcXFx4MDdcXFwiLGI6XFxcIlxcXFxiXFxcIixlOlxcXCJcXFxceDFCXFxcIixmOlxcXCJcXFxcZlxcXCIsbjpgXFxuYCxyOlxcXCJcXFxcclxcXCIsdDpcXFwiXFx0XFxcIix2OlxcXCJcXFxcdlxcXCIsTjpcXFwiXFxcXHg4NVxcXCIsXzpcXFwiXFxcXHhBMFxcXCIsTDpcXFwiXFxcXHUyMDI4XFxcIixQOlxcXCJcXFxcdTIwMjlcXFwiLFxcXCIgXFxcIjpcXFwiIFxcXCIsJ1xcXCInOidcXFwiJyxcXFwiL1xcXCI6XFxcIi9cXFwiLFxcXCJcXFxcXFxcXFxcXCI6XFxcIlxcXFxcXFxcXFxcIixcXFwiXFx0XFxcIjpcXFwiXFx0XFxcIn07ZnVuY3Rpb24gYWYobixlLHQscil7bGV0IHM9bi5zdWJzdHIoZSx0KSxvPXMubGVuZ3RoPT09dCYmL15bMC05YS1mQS1GXSskLy50ZXN0KHMpP3BhcnNlSW50KHMsMTYpOk5hTjtpZihpc05hTihvKSl7bGV0IGE9bi5zdWJzdHIoZS0yLHQrMik7cmV0dXJuIHIoZS0yLFxcXCJCQURfRFFfRVNDQVBFXFxcIixgSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgJHthfWApLGF9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KG8pfWZ1bmN0aW9uIFhpKG4sZSx0LHIpe2xldHt2YWx1ZTpzLHR5cGU6aSxjb21tZW50Om8scmFuZ2U6YX09ZS50eXBlPT09XFxcImJsb2NrLXNjYWxhclxcXCI/WmkoZSxuLm9wdGlvbnMuc3RyaWN0LHIpOlFpKGUsbi5vcHRpb25zLnN0cmljdCxyKSx1PXQ/bi5kaXJlY3RpdmVzLnRhZ05hbWUodC5zb3VyY2UsaD0+cih0LFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGgpKTpudWxsLGw9dCYmdT91ZihuLnNjaGVtYSxzLHUsdCxyKTplLnR5cGU9PT1cXFwic2NhbGFyXFxcIj9sZihuLHMsZSxyKTpuLnNjaGVtYVtQZV0sZDt0cnl7bGV0IGg9bC5yZXNvbHZlKHMscD0+cih0IT1udWxsP3Q6ZSxcXFwiVEFHX1JFU09MVkVfRkFJTEVEXFxcIixwKSxuLm9wdGlvbnMpO2Q9VyhoKT9oOm5ldyBQKGgpfWNhdGNoKGgpe2xldCBwPWggaW5zdGFuY2VvZiBFcnJvcj9oLm1lc3NhZ2U6U3RyaW5nKGgpO3IodCE9bnVsbD90OmUsXFxcIlRBR19SRVNPTFZFX0ZBSUxFRFxcXCIscCksZD1uZXcgUChzKX1yZXR1cm4gZC5yYW5nZT1hLGQuc291cmNlPXMsaSYmKGQudHlwZT1pKSx1JiYoZC50YWc9dSksbC5mb3JtYXQmJihkLmZvcm1hdD1sLmZvcm1hdCksbyYmKGQuY29tbWVudD1vKSxkfWZ1bmN0aW9uIHVmKG4sZSx0LHIscyl7dmFyIGE7aWYodD09PVxcXCIhXFxcIilyZXR1cm4gbltQZV07bGV0IGk9W107Zm9yKGxldCB1IG9mIG4udGFncylpZighdS5jb2xsZWN0aW9uJiZ1LnRhZz09PXQpaWYodS5kZWZhdWx0JiZ1LnRlc3QpaS5wdXNoKHUpO2Vsc2UgcmV0dXJuIHU7Zm9yKGxldCB1IG9mIGkpaWYoKGE9dS50ZXN0KSE9bnVsbCYmYS50ZXN0KGUpKXJldHVybiB1O2xldCBvPW4ua25vd25UYWdzW3RdO3JldHVybiBvJiYhby5jb2xsZWN0aW9uPyhuLnRhZ3MucHVzaChPYmplY3QuYXNzaWduKHt9LG8se2RlZmF1bHQ6ITEsdGVzdDp2b2lkIDB9KSksbyk6KHMocixcXFwiVEFHX1JFU09MVkVfRkFJTEVEXFxcIixgVW5yZXNvbHZlZCB0YWc6ICR7dH1gLHQhPT1cXFwidGFnOnlhbWwub3JnLDIwMDI6c3RyXFxcIiksbltQZV0pfWZ1bmN0aW9uIGxmKHtkaXJlY3RpdmVzOm4sc2NoZW1hOmV9LHQscixzKXt2YXIgbztsZXQgaT1lLnRhZ3MuZmluZChhPT57dmFyIHU7cmV0dXJuIGEuZGVmYXVsdCYmKCh1PWEudGVzdCk9PW51bGw/dm9pZCAwOnUudGVzdCh0KSl9KXx8ZVtQZV07aWYoZS5jb21wYXQpe2xldCBhPShvPWUuY29tcGF0LmZpbmQodT0+e3ZhciBsO3JldHVybiB1LmRlZmF1bHQmJigobD11LnRlc3QpPT1udWxsP3ZvaWQgMDpsLnRlc3QodCkpfSkpIT1udWxsP286ZVtQZV07aWYoaS50YWchPT1hLnRhZyl7bGV0IHU9bi50YWdTdHJpbmcoaS50YWcpLGw9bi50YWdTdHJpbmcoYS50YWcpLGQ9YFZhbHVlIG1heSBiZSBwYXJzZWQgYXMgZWl0aGVyICR7dX0gb3IgJHtsfWA7cyhyLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGQsITApfX1yZXR1cm4gaX1mdW5jdGlvbiBndShuLGUsdCl7aWYoZSl7dD09PW51bGwmJih0PWUubGVuZ3RoKTtmb3IobGV0IHI9dC0xO3I+PTA7LS1yKXtsZXQgcz1lW3JdO3N3aXRjaChzLnR5cGUpe2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6Y2FzZVxcXCJuZXdsaW5lXFxcIjpuLT1zLnNvdXJjZS5sZW5ndGg7Y29udGludWV9Zm9yKHM9ZVsrK3JdOyhzPT1udWxsP3ZvaWQgMDpzLnR5cGUpPT09XFxcInNwYWNlXFxcIjspbis9cy5zb3VyY2UubGVuZ3RoLHM9ZVsrK3JdO2JyZWFrfX1yZXR1cm4gbn12YXIgY2Y9e2NvbXBvc2VOb2RlOmVvLGNvbXBvc2VFbXB0eU5vZGU6THN9O2Z1bmN0aW9uIGVvKG4sZSx0LHIpe2xldHtzcGFjZUJlZm9yZTpzLGNvbW1lbnQ6aSxhbmNob3I6byx0YWc6YX09dCx1LGw9ITA7c3dpdGNoKGUudHlwZSl7Y2FzZVxcXCJhbGlhc1xcXCI6dT1mZihuLGUsciksKG98fGEpJiZyKGUsXFxcIkFMSUFTX1BST1BTXFxcIixcXFwiQW4gYWxpYXMgbm9kZSBtdXN0IG5vdCBzcGVjaWZ5IGFueSBwcm9wZXJ0aWVzXFxcIik7YnJlYWs7Y2FzZVxcXCJzY2FsYXJcXFwiOmNhc2VcXFwic2luZ2xlLXF1b3RlZC1zY2FsYXJcXFwiOmNhc2VcXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiOmNhc2VcXFwiYmxvY2stc2NhbGFyXFxcIjp1PVhpKG4sZSxhLHIpLG8mJih1LmFuY2hvcj1vLnNvdXJjZS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2VcXFwiYmxvY2stbWFwXFxcIjpjYXNlXFxcImJsb2NrLXNlcVxcXCI6Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOnU9RHUoY2YsbixlLGEsciksbyYmKHUuYW5jaG9yPW8uc291cmNlLnN1YnN0cmluZygxKSk7YnJlYWs7ZGVmYXVsdDp7bGV0IGQ9ZS50eXBlPT09XFxcImVycm9yXFxcIj9lLm1lc3NhZ2U6YFVuc3VwcG9ydGVkIHRva2VuICh0eXBlOiAke2UudHlwZX0pYDtyKGUsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGQpLHU9THMobixlLm9mZnNldCx2b2lkIDAsbnVsbCx0LHIpLGw9ITF9fXJldHVybiBvJiZ1LmFuY2hvcj09PVxcXCJcXFwiJiZyKG8sXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nXFxcIikscyYmKHUuc3BhY2VCZWZvcmU9ITApLGkmJihlLnR5cGU9PT1cXFwic2NhbGFyXFxcIiYmZS5zb3VyY2U9PT1cXFwiXFxcIj91LmNvbW1lbnQ9aTp1LmNvbW1lbnRCZWZvcmU9aSksbi5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMmJmwmJih1LnNyY1Rva2VuPWUpLHV9ZnVuY3Rpb24gTHMobixlLHQscix7c3BhY2VCZWZvcmU6cyxjb21tZW50OmksYW5jaG9yOm8sdGFnOmEsZW5kOnV9LGwpe2xldCBkPXt0eXBlOlxcXCJzY2FsYXJcXFwiLG9mZnNldDpndShlLHQsciksaW5kZW50Oi0xLHNvdXJjZTpcXFwiXFxcIn0saD1YaShuLGQsYSxsKTtyZXR1cm4gbyYmKGguYW5jaG9yPW8uc291cmNlLnN1YnN0cmluZygxKSxoLmFuY2hvcj09PVxcXCJcXFwiJiZsKG8sXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nXFxcIikpLHMmJihoLnNwYWNlQmVmb3JlPSEwKSxpJiYoaC5jb21tZW50PWksaC5yYW5nZVsyXT11KSxofWZ1bmN0aW9uIGZmKHtvcHRpb25zOm59LHtvZmZzZXQ6ZSxzb3VyY2U6dCxlbmQ6cn0scyl7bGV0IGk9bmV3IEZ0KHQuc3Vic3RyaW5nKDEpKTtpLnNvdXJjZT09PVxcXCJcXFwiJiZzKGUsXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFsaWFzIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmdcXFwiKSxpLnNvdXJjZS5lbmRzV2l0aChcXFwiOlxcXCIpJiZzKGUrdC5sZW5ndGgtMSxcXFwiQkFEX0FMSUFTXFxcIixcXFwiQWxpYXMgZW5kaW5nIGluIDogaXMgYW1iaWd1b3VzXFxcIiwhMCk7bGV0IG89ZSt0Lmxlbmd0aCxhPXV0KHIsbyxuLnN0cmljdCxzKTtyZXR1cm4gaS5yYW5nZT1bZSxvLGEub2Zmc2V0XSxhLmNvbW1lbnQmJihpLmNvbW1lbnQ9YS5jb21tZW50KSxpfWZ1bmN0aW9uIGJ1KG4sZSx7b2Zmc2V0OnQsc3RhcnQ6cix2YWx1ZTpzLGVuZDppfSxvKXtsZXQgYT1PYmplY3QuYXNzaWduKHtfZGlyZWN0aXZlczplfSxuKSx1PW5ldyBvdCh2b2lkIDAsYSksbD17YXRSb290OiEwLGRpcmVjdGl2ZXM6dS5kaXJlY3RpdmVzLG9wdGlvbnM6dS5vcHRpb25zLHNjaGVtYTp1LnNjaGVtYX0sZD1hdChyLHtpbmRpY2F0b3I6XFxcImRvYy1zdGFydFxcXCIsbmV4dDpzIT1udWxsP3M6aT09bnVsbD92b2lkIDA6aVswXSxvZmZzZXQ6dCxvbkVycm9yOm8sc3RhcnRPbk5ld2xpbmU6ITB9KTtkLmZvdW5kJiYodS5kaXJlY3RpdmVzLmRvY1N0YXJ0PSEwLHMmJihzLnR5cGU9PT1cXFwiYmxvY2stbWFwXFxcInx8cy50eXBlPT09XFxcImJsb2NrLXNlcVxcXCIpJiYhZC5oYXNOZXdsaW5lJiZvKGQuZW5kLFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJCbG9jayBjb2xsZWN0aW9uIGNhbm5vdCBzdGFydCBvbiBzYW1lIGxpbmUgd2l0aCBkaXJlY3RpdmVzLWVuZCBtYXJrZXJcXFwiKSksdS5jb250ZW50cz1zP2VvKGwscyxkLG8pOkxzKGwsZC5lbmQscixudWxsLGQsbyk7bGV0IGg9dS5jb250ZW50cy5yYW5nZVsyXSxwPXV0KGksaCwhMSxvKTtyZXR1cm4gcC5jb21tZW50JiYodS5jb21tZW50PXAuY29tbWVudCksdS5yYW5nZT1bdCxoLHAub2Zmc2V0XSx1fWZ1bmN0aW9uIHhyKG4pe2lmKHR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIilyZXR1cm5bbixuKzFdO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG4ubGVuZ3RoPT09Mj9uOltuWzBdLG5bMV1dO2xldHtvZmZzZXQ6ZSxzb3VyY2U6dH09bjtyZXR1cm5bZSxlKyh0eXBlb2YgdD09XFxcInN0cmluZ1xcXCI/dC5sZW5ndGg6MSldfWZ1bmN0aW9uIEV1KG4pe3ZhciBzO2xldCBlPVxcXCJcXFwiLHQ9ITEscj0hMTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoOysraSl7bGV0IG89bltpXTtzd2l0Y2gob1swXSl7Y2FzZVxcXCIjXFxcIjplKz0oZT09PVxcXCJcXFwiP1xcXCJcXFwiOnI/YFxcblxcbmA6YFxcbmApKyhvLnN1YnN0cmluZygxKXx8XFxcIiBcXFwiKSx0PSEwLHI9ITE7YnJlYWs7Y2FzZVxcXCIlXFxcIjooKHM9bltpKzFdKT09bnVsbD92b2lkIDA6c1swXSkhPT1cXFwiI1xcXCImJihpKz0xKSx0PSExO2JyZWFrO2RlZmF1bHQ6dHx8KHI9ITApLHQ9ITF9fXJldHVybntjb21tZW50OmUsYWZ0ZXJFbXB0eUxpbmU6cn19dmFyIE9yPWNsYXNze2NvbnN0cnVjdG9yKGU9e30pe3RoaXMuZG9jPW51bGwsdGhpcy5hdERpcmVjdGl2ZXM9ITEsdGhpcy5wcmVsdWRlPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMud2FybmluZ3M9W10sdGhpcy5vbkVycm9yPSh0LHIscyxpKT0+e2xldCBvPXhyKHQpO2k/dGhpcy53YXJuaW5ncy5wdXNoKG5ldyBrcihvLHIscykpOnRoaXMuZXJyb3JzLnB1c2gobmV3IFhlKG8scixzKSl9LHRoaXMuZGlyZWN0aXZlcz1uZXcgcGUoe3ZlcnNpb246ZS52ZXJzaW9ufHxcXFwiMS4yXFxcIn0pLHRoaXMub3B0aW9ucz1lfWRlY29yYXRlKGUsdCl7bGV0e2NvbW1lbnQ6cixhZnRlckVtcHR5TGluZTpzfT1FdSh0aGlzLnByZWx1ZGUpO2lmKHIpe2xldCBpPWUuY29udGVudHM7aWYodCllLmNvbW1lbnQ9ZS5jb21tZW50P2Ake2UuY29tbWVudH1cXG4ke3J9YDpyO2Vsc2UgaWYoc3x8ZS5kaXJlY3RpdmVzLmRvY1N0YXJ0fHwhaSllLmNvbW1lbnRCZWZvcmU9cjtlbHNlIGlmKEcoaSkmJiFpLmZsb3cmJmkuaXRlbXMubGVuZ3RoPjApe2xldCBvPWkuaXRlbXNbMF07SChvKSYmKG89by5rZXkpO2xldCBhPW8uY29tbWVudEJlZm9yZTtvLmNvbW1lbnRCZWZvcmU9YT9gJHtyfVxcbiR7YX1gOnJ9ZWxzZXtsZXQgbz1pLmNvbW1lbnRCZWZvcmU7aS5jb21tZW50QmVmb3JlPW8/YCR7cn1cXG4ke299YDpyfX10PyhBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLmVycm9ycyx0aGlzLmVycm9ycyksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZS53YXJuaW5ncyx0aGlzLndhcm5pbmdzKSk6KGUuZXJyb3JzPXRoaXMuZXJyb3JzLGUud2FybmluZ3M9dGhpcy53YXJuaW5ncyksdGhpcy5wcmVsdWRlPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMud2FybmluZ3M9W119c3RyZWFtSW5mbygpe3JldHVybntjb21tZW50OkV1KHRoaXMucHJlbHVkZSkuY29tbWVudCxkaXJlY3RpdmVzOnRoaXMuZGlyZWN0aXZlcyxlcnJvcnM6dGhpcy5lcnJvcnMsd2FybmluZ3M6dGhpcy53YXJuaW5nc319KmNvbXBvc2UoZSx0PSExLHI9LTEpe2ZvcihsZXQgcyBvZiBlKXlpZWxkKnRoaXMubmV4dChzKTt5aWVsZCp0aGlzLmVuZCh0LHIpfSpuZXh0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2VcXFwiZGlyZWN0aXZlXFxcIjp0aGlzLmRpcmVjdGl2ZXMuYWRkKGUuc291cmNlLCh0LHIscyk9PntsZXQgaT14cihlKTtpWzBdKz10LHRoaXMub25FcnJvcihpLFxcXCJCQURfRElSRUNUSVZFXFxcIixyLHMpfSksdGhpcy5wcmVsdWRlLnB1c2goZS5zb3VyY2UpLHRoaXMuYXREaXJlY3RpdmVzPSEwO2JyZWFrO2Nhc2VcXFwiZG9jdW1lbnRcXFwiOntsZXQgdD1idSh0aGlzLm9wdGlvbnMsdGhpcy5kaXJlY3RpdmVzLGUsdGhpcy5vbkVycm9yKTt0aGlzLmF0RGlyZWN0aXZlcyYmIXQuZGlyZWN0aXZlcy5kb2NTdGFydCYmdGhpcy5vbkVycm9yKGUsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIk1pc3NpbmcgZGlyZWN0aXZlcy1lbmQvZG9jLXN0YXJ0IGluZGljYXRvciBsaW5lXFxcIiksdGhpcy5kZWNvcmF0ZSh0LCExKSx0aGlzLmRvYyYmKHlpZWxkIHRoaXMuZG9jKSx0aGlzLmRvYz10LHRoaXMuYXREaXJlY3RpdmVzPSExO2JyZWFrfWNhc2VcXFwiYnl0ZS1vcmRlci1tYXJrXFxcIjpjYXNlXFxcInNwYWNlXFxcIjpicmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6dGhpcy5wcmVsdWRlLnB1c2goZS5zb3VyY2UpO2JyZWFrO2Nhc2VcXFwiZXJyb3JcXFwiOntsZXQgdD1lLnNvdXJjZT9gJHtlLm1lc3NhZ2V9OiAke0pTT04uc3RyaW5naWZ5KGUuc291cmNlKX1gOmUubWVzc2FnZSxyPW5ldyBYZSh4cihlKSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsdCk7dGhpcy5hdERpcmVjdGl2ZXN8fCF0aGlzLmRvYz90aGlzLmVycm9ycy5wdXNoKHIpOnRoaXMuZG9jLmVycm9ycy5wdXNoKHIpO2JyZWFrfWNhc2VcXFwiZG9jLWVuZFxcXCI6e2lmKCF0aGlzLmRvYyl7bGV0IHI9XFxcIlVuZXhwZWN0ZWQgZG9jLWVuZCB3aXRob3V0IHByZWNlZGluZyBkb2N1bWVudFxcXCI7dGhpcy5lcnJvcnMucHVzaChuZXcgWGUoeHIoZSksXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLHIpKTticmVha310aGlzLmRvYy5kaXJlY3RpdmVzLmRvY0VuZD0hMDtsZXQgdD11dChlLmVuZCxlLm9mZnNldCtlLnNvdXJjZS5sZW5ndGgsdGhpcy5kb2Mub3B0aW9ucy5zdHJpY3QsdGhpcy5vbkVycm9yKTtpZih0aGlzLmRlY29yYXRlKHRoaXMuZG9jLCEwKSx0LmNvbW1lbnQpe2xldCByPXRoaXMuZG9jLmNvbW1lbnQ7dGhpcy5kb2MuY29tbWVudD1yP2Ake3J9XFxuJHt0LmNvbW1lbnR9YDp0LmNvbW1lbnR9dGhpcy5kb2MucmFuZ2VbMl09dC5vZmZzZXQ7YnJlYWt9ZGVmYXVsdDp0aGlzLmVycm9ycy5wdXNoKG5ldyBYZSh4cihlKSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYFVuc3VwcG9ydGVkIHRva2VuICR7ZS50eXBlfWApKX19KmVuZChlPSExLHQ9LTEpe2lmKHRoaXMuZG9jKXRoaXMuZGVjb3JhdGUodGhpcy5kb2MsITApLHlpZWxkIHRoaXMuZG9jLHRoaXMuZG9jPW51bGw7ZWxzZSBpZihlKXtsZXQgcj1PYmplY3QuYXNzaWduKHtfZGlyZWN0aXZlczp0aGlzLmRpcmVjdGl2ZXN9LHRoaXMub3B0aW9ucykscz1uZXcgb3Qodm9pZCAwLHIpO3RoaXMuYXREaXJlY3RpdmVzJiZ0aGlzLm9uRXJyb3IodCxcXFwiTUlTU0lOR19DSEFSXFxcIixcXFwiTWlzc2luZyBkaXJlY3RpdmVzLWVuZCBpbmRpY2F0b3IgbGluZVxcXCIpLHMucmFuZ2U9WzAsdCx0XSx0aGlzLmRlY29yYXRlKHMsITEpLHlpZWxkIHN9fX07dmFyIHRvPVN5bWJvbChcXFwiYnJlYWsgdmlzaXRcXFwiKSxkZj1TeW1ib2woXFxcInNraXAgY2hpbGRyZW5cXFwiKSxGdT1TeW1ib2woXFxcInJlbW92ZSBpdGVtXFxcIik7ZnVuY3Rpb24gWnQobixlKXtcXFwidHlwZVxcXCJpbiBuJiZuLnR5cGU9PT1cXFwiZG9jdW1lbnRcXFwiJiYobj17c3RhcnQ6bi5zdGFydCx2YWx1ZTpuLnZhbHVlfSksd3UoT2JqZWN0LmZyZWV6ZShbXSksbixlKX1adC5CUkVBSz10bztadC5TS0lQPWRmO1p0LlJFTU9WRT1GdTtadC5pdGVtQXRQYXRoPShuLGUpPT57bGV0IHQ9bjtmb3IobGV0W3Isc11vZiBlKXtsZXQgaT10PT1udWxsP3ZvaWQgMDp0W3JdO2lmKGkmJlxcXCJpdGVtc1xcXCJpbiBpKXQ9aS5pdGVtc1tzXTtlbHNlIHJldHVybn1yZXR1cm4gdH07WnQucGFyZW50Q29sbGVjdGlvbj0obixlKT0+e2xldCB0PVp0Lml0ZW1BdFBhdGgobixlLnNsaWNlKDAsLTEpKSxyPWVbZS5sZW5ndGgtMV1bMF0scz10PT1udWxsP3ZvaWQgMDp0W3JdO2lmKHMmJlxcXCJpdGVtc1xcXCJpbiBzKXJldHVybiBzO3Rocm93IG5ldyBFcnJvcihcXFwiUGFyZW50IGNvbGxlY3Rpb24gbm90IGZvdW5kXFxcIil9O2Z1bmN0aW9uIHd1KG4sZSx0KXtsZXQgcj10KGUsbik7aWYodHlwZW9mIHI9PVxcXCJzeW1ib2xcXFwiKXJldHVybiByO2ZvcihsZXQgcyBvZltcXFwia2V5XFxcIixcXFwidmFsdWVcXFwiXSl7bGV0IGk9ZVtzXTtpZihpJiZcXFwiaXRlbXNcXFwiaW4gaSl7Zm9yKGxldCBvPTA7bzxpLml0ZW1zLmxlbmd0aDsrK28pe2xldCBhPXd1KE9iamVjdC5mcmVlemUobi5jb25jYXQoW1tzLG9dXSkpLGkuaXRlbXNbb10sdCk7aWYodHlwZW9mIGE9PVxcXCJudW1iZXJcXFwiKW89YS0xO2Vsc2V7aWYoYT09PXRvKXJldHVybiB0bzthPT09RnUmJihpLml0ZW1zLnNwbGljZShvLDEpLG8tPTEpfX10eXBlb2Ygcj09XFxcImZ1bmN0aW9uXFxcIiYmcz09PVxcXCJrZXlcXFwiJiYocj1yKGUsbikpfX1yZXR1cm4gdHlwZW9mIHI9PVxcXCJmdW5jdGlvblxcXCI/cihlLG4pOnJ9dmFyIG5vPVxcXCJcXFxcdUZFRkZcXFwiLHJvPVxcXCJcXHUwMDAyXFxcIixzbz1cXFwiXFx1MDAxOFxcXCIsQXM9XFxcIlxcdTAwMWZcXFwiO2Z1bmN0aW9uIFR1KG4pe3N3aXRjaChuKXtjYXNlIG5vOnJldHVyblxcXCJieXRlLW9yZGVyLW1hcmtcXFwiO2Nhc2Ugcm86cmV0dXJuXFxcImRvYy1tb2RlXFxcIjtjYXNlIHNvOnJldHVyblxcXCJmbG93LWVycm9yLWVuZFxcXCI7Y2FzZSBBczpyZXR1cm5cXFwic2NhbGFyXFxcIjtjYXNlXFxcIi0tLVxcXCI6cmV0dXJuXFxcImRvYy1zdGFydFxcXCI7Y2FzZVxcXCIuLi5cXFwiOnJldHVyblxcXCJkb2MtZW5kXFxcIjtjYXNlXFxcIlxcXCI6Y2FzZWBcXG5gOmNhc2VgXFxcXHJcXG5gOnJldHVyblxcXCJuZXdsaW5lXFxcIjtjYXNlXFxcIi1cXFwiOnJldHVyblxcXCJzZXEtaXRlbS1pbmRcXFwiO2Nhc2VcXFwiP1xcXCI6cmV0dXJuXFxcImV4cGxpY2l0LWtleS1pbmRcXFwiO2Nhc2VcXFwiOlxcXCI6cmV0dXJuXFxcIm1hcC12YWx1ZS1pbmRcXFwiO2Nhc2VcXFwie1xcXCI6cmV0dXJuXFxcImZsb3ctbWFwLXN0YXJ0XFxcIjtjYXNlXFxcIn1cXFwiOnJldHVyblxcXCJmbG93LW1hcC1lbmRcXFwiO2Nhc2VcXFwiW1xcXCI6cmV0dXJuXFxcImZsb3ctc2VxLXN0YXJ0XFxcIjtjYXNlXFxcIl1cXFwiOnJldHVyblxcXCJmbG93LXNlcS1lbmRcXFwiO2Nhc2VcXFwiLFxcXCI6cmV0dXJuXFxcImNvbW1hXFxcIn1zd2l0Y2goblswXSl7Y2FzZVxcXCIgXFxcIjpjYXNlXFxcIlxcdFxcXCI6cmV0dXJuXFxcInNwYWNlXFxcIjtjYXNlXFxcIiNcXFwiOnJldHVyblxcXCJjb21tZW50XFxcIjtjYXNlXFxcIiVcXFwiOnJldHVyblxcXCJkaXJlY3RpdmUtbGluZVxcXCI7Y2FzZVxcXCIqXFxcIjpyZXR1cm5cXFwiYWxpYXNcXFwiO2Nhc2VcXFwiJlxcXCI6cmV0dXJuXFxcImFuY2hvclxcXCI7Y2FzZVxcXCIhXFxcIjpyZXR1cm5cXFwidGFnXFxcIjtjYXNlXFxcIidcXFwiOnJldHVyblxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI7Y2FzZSdcXFwiJzpyZXR1cm5cXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiO2Nhc2VcXFwifFxcXCI6Y2FzZVxcXCI+XFxcIjpyZXR1cm5cXFwiYmxvY2stc2NhbGFyLWhlYWRlclxcXCJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUmUobil7c3dpdGNoKG4pe2Nhc2Ugdm9pZCAwOmNhc2VcXFwiIFxcXCI6Y2FzZWBcXG5gOmNhc2VcXFwiXFxcXHJcXFwiOmNhc2VcXFwiXFx0XFxcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgU3U9XFxcIjAxMjM0NTY3ODlBQkNERUZhYmNkZWZcXFwiLnNwbGl0KFxcXCJcXFwiKSxwZj1cXFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotIzsvPzpAJj0rJF8uIX4qJygpXFxcIi5zcGxpdChcXFwiXFxcIiksaW89XFxcIixbXXt9XFxcIi5zcGxpdChcXFwiXFxcIiksbWY9YCAsW117fVxcblxcXFxyXFx0YC5zcGxpdChcXFwiXFxcIiksb289bj0+IW58fG1mLmluY2x1ZGVzKG4pLHZyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdEVuZD0hMSx0aGlzLmJsb2NrU2NhbGFySW5kZW50PS0xLHRoaXMuYmxvY2tTY2FsYXJLZWVwPSExLHRoaXMuYnVmZmVyPVxcXCJcXFwiLHRoaXMuZmxvd0tleT0hMSx0aGlzLmZsb3dMZXZlbD0wLHRoaXMuaW5kZW50TmV4dD0wLHRoaXMuaW5kZW50VmFsdWU9MCx0aGlzLmxpbmVFbmRQb3M9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLnBvcz0wfSpsZXgoZSx0PSExKXt2YXIgcztlJiYodGhpcy5idWZmZXI9dGhpcy5idWZmZXI/dGhpcy5idWZmZXIrZTplLHRoaXMubGluZUVuZFBvcz1udWxsKSx0aGlzLmF0RW5kPSF0O2xldCByPShzPXRoaXMubmV4dCkhPW51bGw/czpcXFwic3RyZWFtXFxcIjtmb3IoO3ImJih0fHx0aGlzLmhhc0NoYXJzKDEpKTspcj15aWVsZCp0aGlzLnBhcnNlTmV4dChyKX1hdExpbmVFbmQoKXtsZXQgZT10aGlzLnBvcyx0PXRoaXMuYnVmZmVyW2VdO2Zvcig7dD09PVxcXCIgXFxcInx8dD09PVxcXCJcXHRcXFwiOyl0PXRoaXMuYnVmZmVyWysrZV07cmV0dXJuIXR8fHQ9PT1cXFwiI1xcXCJ8fHQ9PT1gXFxuYD8hMDp0PT09XFxcIlxcXFxyXFxcIj90aGlzLmJ1ZmZlcltlKzFdPT09YFxcbmA6ITF9Y2hhckF0KGUpe3JldHVybiB0aGlzLmJ1ZmZlclt0aGlzLnBvcytlXX1jb250aW51ZVNjYWxhcihlKXtsZXQgdD10aGlzLmJ1ZmZlcltlXTtpZih0aGlzLmluZGVudE5leHQ+MCl7bGV0IHI9MDtmb3IoO3Q9PT1cXFwiIFxcXCI7KXQ9dGhpcy5idWZmZXJbKytyK2VdO2lmKHQ9PT1cXFwiXFxcXHJcXFwiKXtsZXQgcz10aGlzLmJ1ZmZlcltyK2UrMV07aWYocz09PWBcXG5gfHwhcyYmIXRoaXMuYXRFbmQpcmV0dXJuIGUrcisxfXJldHVybiB0PT09YFxcbmB8fHI+PXRoaXMuaW5kZW50TmV4dHx8IXQmJiF0aGlzLmF0RW5kP2UrcjotMX1pZih0PT09XFxcIi1cXFwifHx0PT09XFxcIi5cXFwiKXtsZXQgcj10aGlzLmJ1ZmZlci5zdWJzdHIoZSwzKTtpZigocj09PVxcXCItLS1cXFwifHxyPT09XFxcIi4uLlxcXCIpJiZSZSh0aGlzLmJ1ZmZlcltlKzNdKSlyZXR1cm4tMX1yZXR1cm4gZX1nZXRMaW5lKCl7bGV0IGU9dGhpcy5saW5lRW5kUG9zO3JldHVybih0eXBlb2YgZSE9XFxcIm51bWJlclxcXCJ8fGUhPT0tMSYmZTx0aGlzLnBvcykmJihlPXRoaXMuYnVmZmVyLmluZGV4T2YoYFxcbmAsdGhpcy5wb3MpLHRoaXMubGluZUVuZFBvcz1lKSxlPT09LTE/dGhpcy5hdEVuZD90aGlzLmJ1ZmZlci5zdWJzdHJpbmcodGhpcy5wb3MpOm51bGw6KHRoaXMuYnVmZmVyW2UtMV09PT1cXFwiXFxcXHJcXFwiJiYoZS09MSksdGhpcy5idWZmZXIuc3Vic3RyaW5nKHRoaXMucG9zLGUpKX1oYXNDaGFycyhlKXtyZXR1cm4gdGhpcy5wb3MrZTw9dGhpcy5idWZmZXIubGVuZ3RofXNldE5leHQoZSl7cmV0dXJuIHRoaXMuYnVmZmVyPXRoaXMuYnVmZmVyLnN1YnN0cmluZyh0aGlzLnBvcyksdGhpcy5wb3M9MCx0aGlzLmxpbmVFbmRQb3M9bnVsbCx0aGlzLm5leHQ9ZSxudWxsfXBlZWsoZSl7cmV0dXJuIHRoaXMuYnVmZmVyLnN1YnN0cih0aGlzLnBvcyxlKX0qcGFyc2VOZXh0KGUpe3N3aXRjaChlKXtjYXNlXFxcInN0cmVhbVxcXCI6cmV0dXJuIHlpZWxkKnRoaXMucGFyc2VTdHJlYW0oKTtjYXNlXFxcImxpbmUtc3RhcnRcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlTGluZVN0YXJ0KCk7Y2FzZVxcXCJibG9jay1zdGFydFxcXCI6cmV0dXJuIHlpZWxkKnRoaXMucGFyc2VCbG9ja1N0YXJ0KCk7Y2FzZVxcXCJkb2NcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlRG9jdW1lbnQoKTtjYXNlXFxcImZsb3dcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlRmxvd0NvbGxlY3Rpb24oKTtjYXNlXFxcInF1b3RlZC1zY2FsYXJcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlUXVvdGVkU2NhbGFyKCk7Y2FzZVxcXCJibG9jay1zY2FsYXJcXFwiOnJldHVybiB5aWVsZCp0aGlzLnBhcnNlQmxvY2tTY2FsYXIoKTtjYXNlXFxcInBsYWluLXNjYWxhclxcXCI6cmV0dXJuIHlpZWxkKnRoaXMucGFyc2VQbGFpblNjYWxhcigpfX0qcGFyc2VTdHJlYW0oKXtsZXQgZT10aGlzLmdldExpbmUoKTtpZihlPT09bnVsbClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJzdHJlYW1cXFwiKTtpZihlWzBdPT09bm8mJih5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSxlPWUuc3Vic3RyaW5nKDEpKSxlWzBdPT09XFxcIiVcXFwiKXtsZXQgdD1lLmxlbmd0aCxyPWUuaW5kZXhPZihcXFwiI1xcXCIpO2lmKHIhPT0tMSl7bGV0IGk9ZVtyLTFdOyhpPT09XFxcIiBcXFwifHxpPT09XFxcIlxcdFxcXCIpJiYodD1yLTEpfWZvcig7Oyl7bGV0IGk9ZVt0LTFdO2lmKGk9PT1cXFwiIFxcXCJ8fGk9PT1cXFwiXFx0XFxcIil0LT0xO2Vsc2UgYnJlYWt9bGV0IHM9KHlpZWxkKnRoaXMucHVzaENvdW50KHQpKSsoeWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKSk7cmV0dXJuIHlpZWxkKnRoaXMucHVzaENvdW50KGUubGVuZ3RoLXMpLHRoaXMucHVzaE5ld2xpbmUoKSxcXFwic3RyZWFtXFxcIn1pZih0aGlzLmF0TGluZUVuZCgpKXtsZXQgdD15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApO3JldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudChlLmxlbmd0aC10KSx5aWVsZCp0aGlzLnB1c2hOZXdsaW5lKCksXFxcInN0cmVhbVxcXCJ9cmV0dXJuIHlpZWxkIHJvLHlpZWxkKnRoaXMucGFyc2VMaW5lU3RhcnQoKX0qcGFyc2VMaW5lU3RhcnQoKXtsZXQgZT10aGlzLmNoYXJBdCgwKTtpZighZSYmIXRoaXMuYXRFbmQpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwibGluZS1zdGFydFxcXCIpO2lmKGU9PT1cXFwiLVxcXCJ8fGU9PT1cXFwiLlxcXCIpe2lmKCF0aGlzLmF0RW5kJiYhdGhpcy5oYXNDaGFycyg0KSlyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJsaW5lLXN0YXJ0XFxcIik7bGV0IHQ9dGhpcy5wZWVrKDMpO2lmKHQ9PT1cXFwiLS0tXFxcIiYmUmUodGhpcy5jaGFyQXQoMykpKXJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudCgzKSx0aGlzLmluZGVudFZhbHVlPTAsdGhpcy5pbmRlbnROZXh0PTAsXFxcImRvY1xcXCI7aWYodD09PVxcXCIuLi5cXFwiJiZSZSh0aGlzLmNoYXJBdCgzKSkpcmV0dXJuIHlpZWxkKnRoaXMucHVzaENvdW50KDMpLFxcXCJzdHJlYW1cXFwifXJldHVybiB0aGlzLmluZGVudFZhbHVlPXlpZWxkKnRoaXMucHVzaFNwYWNlcyghMSksdGhpcy5pbmRlbnROZXh0PnRoaXMuaW5kZW50VmFsdWUmJiFSZSh0aGlzLmNoYXJBdCgxKSkmJih0aGlzLmluZGVudE5leHQ9dGhpcy5pbmRlbnRWYWx1ZSkseWllbGQqdGhpcy5wYXJzZUJsb2NrU3RhcnQoKX0qcGFyc2VCbG9ja1N0YXJ0KCl7bGV0W2UsdF09dGhpcy5wZWVrKDIpO2lmKCF0JiYhdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJibG9jay1zdGFydFxcXCIpO2lmKChlPT09XFxcIi1cXFwifHxlPT09XFxcIj9cXFwifHxlPT09XFxcIjpcXFwiKSYmUmUodCkpe2xldCByPSh5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSkrKHlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCkpO3JldHVybiB0aGlzLmluZGVudE5leHQ9dGhpcy5pbmRlbnRWYWx1ZSsxLHRoaXMuaW5kZW50VmFsdWUrPXIseWllbGQqdGhpcy5wYXJzZUJsb2NrU3RhcnQoKX1yZXR1cm5cXFwiZG9jXFxcIn0qcGFyc2VEb2N1bWVudCgpe3lpZWxkKnRoaXMucHVzaFNwYWNlcyghMCk7bGV0IGU9dGhpcy5nZXRMaW5lKCk7aWYoZT09PW51bGwpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwiZG9jXFxcIik7bGV0IHQ9eWllbGQqdGhpcy5wdXNoSW5kaWNhdG9ycygpO3N3aXRjaChlW3RdKXtjYXNlXFxcIiNcXFwiOnlpZWxkKnRoaXMucHVzaENvdW50KGUubGVuZ3RoLXQpO2Nhc2Ugdm9pZCAwOnJldHVybiB5aWVsZCp0aGlzLnB1c2hOZXdsaW5lKCkseWllbGQqdGhpcy5wYXJzZUxpbmVTdGFydCgpO2Nhc2VcXFwie1xcXCI6Y2FzZVxcXCJbXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wdXNoQ291bnQoMSksdGhpcy5mbG93S2V5PSExLHRoaXMuZmxvd0xldmVsPTEsXFxcImZsb3dcXFwiO2Nhc2VcXFwifVxcXCI6Y2FzZVxcXCJdXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wdXNoQ291bnQoMSksXFxcImRvY1xcXCI7Y2FzZVxcXCIqXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wdXNoVW50aWwob28pLFxcXCJkb2NcXFwiO2Nhc2UnXFxcIic6Y2FzZVxcXCInXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wYXJzZVF1b3RlZFNjYWxhcigpO2Nhc2VcXFwifFxcXCI6Y2FzZVxcXCI+XFxcIjpyZXR1cm4gdCs9eWllbGQqdGhpcy5wYXJzZUJsb2NrU2NhbGFySGVhZGVyKCksdCs9eWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKSx5aWVsZCp0aGlzLnB1c2hDb3VudChlLmxlbmd0aC10KSx5aWVsZCp0aGlzLnB1c2hOZXdsaW5lKCkseWllbGQqdGhpcy5wYXJzZUJsb2NrU2NhbGFyKCk7ZGVmYXVsdDpyZXR1cm4geWllbGQqdGhpcy5wYXJzZVBsYWluU2NhbGFyKCl9fSpwYXJzZUZsb3dDb2xsZWN0aW9uKCl7bGV0IGUsdCxyPS0xO2RvIGU9eWllbGQqdGhpcy5wdXNoTmV3bGluZSgpLGU+MD8odD15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITEpLHRoaXMuaW5kZW50VmFsdWU9cj10KTp0PTAsdCs9eWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKTt3aGlsZShlK3Q+MCk7bGV0IHM9dGhpcy5nZXRMaW5lKCk7aWYocz09PW51bGwpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwiZmxvd1xcXCIpO2lmKChyIT09LTEmJnI8dGhpcy5pbmRlbnROZXh0JiZzWzBdIT09XFxcIiNcXFwifHxyPT09MCYmKHMuc3RhcnRzV2l0aChcXFwiLS0tXFxcIil8fHMuc3RhcnRzV2l0aChcXFwiLi4uXFxcIikpJiZSZShzWzNdKSkmJiEocj09PXRoaXMuaW5kZW50TmV4dC0xJiZ0aGlzLmZsb3dMZXZlbD09PTEmJihzWzBdPT09XFxcIl1cXFwifHxzWzBdPT09XFxcIn1cXFwiKSkpcmV0dXJuIHRoaXMuZmxvd0xldmVsPTAseWllbGQgc28seWllbGQqdGhpcy5wYXJzZUxpbmVTdGFydCgpO2xldCBpPTA7Zm9yKDtzW2ldPT09XFxcIixcXFwiOylpKz15aWVsZCp0aGlzLnB1c2hDb3VudCgxKSxpKz15aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApLHRoaXMuZmxvd0tleT0hMTtzd2l0Y2goaSs9eWllbGQqdGhpcy5wdXNoSW5kaWNhdG9ycygpLHNbaV0pe2Nhc2Ugdm9pZCAwOnJldHVyblxcXCJmbG93XFxcIjtjYXNlXFxcIiNcXFwiOnJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudChzLmxlbmd0aC1pKSxcXFwiZmxvd1xcXCI7Y2FzZVxcXCJ7XFxcIjpjYXNlXFxcIltcXFwiOnJldHVybiB5aWVsZCp0aGlzLnB1c2hDb3VudCgxKSx0aGlzLmZsb3dLZXk9ITEsdGhpcy5mbG93TGV2ZWwrPTEsXFxcImZsb3dcXFwiO2Nhc2VcXFwifVxcXCI6Y2FzZVxcXCJdXFxcIjpyZXR1cm4geWllbGQqdGhpcy5wdXNoQ291bnQoMSksdGhpcy5mbG93S2V5PSEwLHRoaXMuZmxvd0xldmVsLT0xLHRoaXMuZmxvd0xldmVsP1xcXCJmbG93XFxcIjpcXFwiZG9jXFxcIjtjYXNlXFxcIipcXFwiOnJldHVybiB5aWVsZCp0aGlzLnB1c2hVbnRpbChvbyksXFxcImZsb3dcXFwiO2Nhc2UnXFxcIic6Y2FzZVxcXCInXFxcIjpyZXR1cm4gdGhpcy5mbG93S2V5PSEwLHlpZWxkKnRoaXMucGFyc2VRdW90ZWRTY2FsYXIoKTtjYXNlXFxcIjpcXFwiOntsZXQgbz10aGlzLmNoYXJBdCgxKTtpZih0aGlzLmZsb3dLZXl8fFJlKG8pfHxvPT09XFxcIixcXFwiKXJldHVybiB0aGlzLmZsb3dLZXk9ITEseWllbGQqdGhpcy5wdXNoQ291bnQoMSkseWllbGQqdGhpcy5wdXNoU3BhY2VzKCEwKSxcXFwiZmxvd1xcXCJ9ZGVmYXVsdDpyZXR1cm4gdGhpcy5mbG93S2V5PSExLHlpZWxkKnRoaXMucGFyc2VQbGFpblNjYWxhcigpfX0qcGFyc2VRdW90ZWRTY2FsYXIoKXtsZXQgZT10aGlzLmNoYXJBdCgwKSx0PXRoaXMuYnVmZmVyLmluZGV4T2YoZSx0aGlzLnBvcysxKTtpZihlPT09XFxcIidcXFwiKWZvcig7dCE9PS0xJiZ0aGlzLmJ1ZmZlclt0KzFdPT09XFxcIidcXFwiOyl0PXRoaXMuYnVmZmVyLmluZGV4T2YoXFxcIidcXFwiLHQrMik7ZWxzZSBmb3IoO3QhPT0tMTspe2xldCBpPTA7Zm9yKDt0aGlzLmJ1ZmZlclt0LTEtaV09PT1cXFwiXFxcXFxcXFxcXFwiOylpKz0xO2lmKGklMj09PTApYnJlYWs7dD10aGlzLmJ1ZmZlci5pbmRleE9mKCdcXFwiJyx0KzEpfWxldCByPXRoaXMuYnVmZmVyLnN1YnN0cmluZygwLHQpLHM9ci5pbmRleE9mKGBcXG5gLHRoaXMucG9zKTtpZihzIT09LTEpe2Zvcig7cyE9PS0xOyl7bGV0IGk9dGhpcy5jb250aW51ZVNjYWxhcihzKzEpO2lmKGk9PT0tMSlicmVhaztzPXIuaW5kZXhPZihgXFxuYCxpKX1zIT09LTEmJih0PXMtKHJbcy0xXT09PVxcXCJcXFxcclxcXCI/MjoxKSl9aWYodD09PS0xKXtpZighdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJxdW90ZWQtc2NhbGFyXFxcIik7dD10aGlzLmJ1ZmZlci5sZW5ndGh9cmV0dXJuIHlpZWxkKnRoaXMucHVzaFRvSW5kZXgodCsxLCExKSx0aGlzLmZsb3dMZXZlbD9cXFwiZmxvd1xcXCI6XFxcImRvY1xcXCJ9KnBhcnNlQmxvY2tTY2FsYXJIZWFkZXIoKXt0aGlzLmJsb2NrU2NhbGFySW5kZW50PS0xLHRoaXMuYmxvY2tTY2FsYXJLZWVwPSExO2xldCBlPXRoaXMucG9zO2Zvcig7Oyl7bGV0IHQ9dGhpcy5idWZmZXJbKytlXTtpZih0PT09XFxcIitcXFwiKXRoaXMuYmxvY2tTY2FsYXJLZWVwPSEwO2Vsc2UgaWYodD5cXFwiMFxcXCImJnQ8PVxcXCI5XFxcIil0aGlzLmJsb2NrU2NhbGFySW5kZW50PU51bWJlcih0KS0xO2Vsc2UgaWYodCE9PVxcXCItXFxcIilicmVha31yZXR1cm4geWllbGQqdGhpcy5wdXNoVW50aWwodD0+UmUodCl8fHQ9PT1cXFwiI1xcXCIpfSpwYXJzZUJsb2NrU2NhbGFyKCl7bGV0IGU9dGhpcy5wb3MtMSx0PTAscjtlOmZvcihsZXQgcz10aGlzLnBvcztyPXRoaXMuYnVmZmVyW3NdOysrcylzd2l0Y2gocil7Y2FzZVxcXCIgXFxcIjp0Kz0xO2JyZWFrO2Nhc2VgXFxuYDplPXMsdD0wO2JyZWFrO2Nhc2VcXFwiXFxcXHJcXFwiOntsZXQgaT10aGlzLmJ1ZmZlcltzKzFdO2lmKCFpJiYhdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJibG9jay1zY2FsYXJcXFwiKTtpZihpPT09YFxcbmApYnJlYWt9ZGVmYXVsdDpicmVhayBlfWlmKCFyJiYhdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJibG9jay1zY2FsYXJcXFwiKTtpZih0Pj10aGlzLmluZGVudE5leHQpe3RoaXMuYmxvY2tTY2FsYXJJbmRlbnQ9PT0tMT90aGlzLmluZGVudE5leHQ9dDp0aGlzLmluZGVudE5leHQrPXRoaXMuYmxvY2tTY2FsYXJJbmRlbnQ7ZG97bGV0IHM9dGhpcy5jb250aW51ZVNjYWxhcihlKzEpO2lmKHM9PT0tMSlicmVhaztlPXRoaXMuYnVmZmVyLmluZGV4T2YoYFxcbmAscyl9d2hpbGUoZSE9PS0xKTtpZihlPT09LTEpe2lmKCF0aGlzLmF0RW5kKXJldHVybiB0aGlzLnNldE5leHQoXFxcImJsb2NrLXNjYWxhclxcXCIpO2U9dGhpcy5idWZmZXIubGVuZ3RofX1pZighdGhpcy5ibG9ja1NjYWxhcktlZXApZG97bGV0IHM9ZS0xLGk9dGhpcy5idWZmZXJbc107aT09PVxcXCJcXFxcclxcXCImJihpPXRoaXMuYnVmZmVyWy0tc10pO2xldCBvPXM7Zm9yKDtpPT09XFxcIiBcXFwifHxpPT09XFxcIlxcdFxcXCI7KWk9dGhpcy5idWZmZXJbLS1zXTtpZihpPT09YFxcbmAmJnM+PXRoaXMucG9zJiZzKzErdD5vKWU9cztlbHNlIGJyZWFrfXdoaWxlKCEwKTtyZXR1cm4geWllbGQgQXMseWllbGQqdGhpcy5wdXNoVG9JbmRleChlKzEsITApLHlpZWxkKnRoaXMucGFyc2VMaW5lU3RhcnQoKX0qcGFyc2VQbGFpblNjYWxhcigpe2xldCBlPXRoaXMuZmxvd0xldmVsPjAsdD10aGlzLnBvcy0xLHI9dGhpcy5wb3MtMSxzO2Zvcig7cz10aGlzLmJ1ZmZlclsrK3JdOylpZihzPT09XFxcIjpcXFwiKXtsZXQgaT10aGlzLmJ1ZmZlcltyKzFdO2lmKFJlKGkpfHxlJiZpPT09XFxcIixcXFwiKWJyZWFrO3Q9cn1lbHNlIGlmKFJlKHMpKXtsZXQgaT10aGlzLmJ1ZmZlcltyKzFdO2lmKHM9PT1cXFwiXFxcXHJcXFwiJiYoaT09PWBcXG5gPyhyKz0xLHM9YFxcbmAsaT10aGlzLmJ1ZmZlcltyKzFdKTp0PXIpLGk9PT1cXFwiI1xcXCJ8fGUmJmlvLmluY2x1ZGVzKGkpKWJyZWFrO2lmKHM9PT1gXFxuYCl7bGV0IG89dGhpcy5jb250aW51ZVNjYWxhcihyKzEpO2lmKG89PT0tMSlicmVhaztyPU1hdGgubWF4KHIsby0yKX19ZWxzZXtpZihlJiZpby5pbmNsdWRlcyhzKSlicmVhazt0PXJ9cmV0dXJuIXMmJiF0aGlzLmF0RW5kP3RoaXMuc2V0TmV4dChcXFwicGxhaW4tc2NhbGFyXFxcIik6KHlpZWxkIEFzLHlpZWxkKnRoaXMucHVzaFRvSW5kZXgodCsxLCEwKSxlP1xcXCJmbG93XFxcIjpcXFwiZG9jXFxcIil9KnB1c2hDb3VudChlKXtyZXR1cm4gZT4wPyh5aWVsZCB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MsZSksdGhpcy5wb3MrPWUsZSk6MH0qcHVzaFRvSW5kZXgoZSx0KXtsZXQgcj10aGlzLmJ1ZmZlci5zbGljZSh0aGlzLnBvcyxlKTtyZXR1cm4gcj8oeWllbGQgcix0aGlzLnBvcys9ci5sZW5ndGgsci5sZW5ndGgpOih0JiYoeWllbGRcXFwiXFxcIiksMCl9KnB1c2hJbmRpY2F0b3JzKCl7c3dpdGNoKHRoaXMuY2hhckF0KDApKXtjYXNlXFxcIiFcXFwiOnJldHVybih5aWVsZCp0aGlzLnB1c2hUYWcoKSkrKHlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCkpKyh5aWVsZCp0aGlzLnB1c2hJbmRpY2F0b3JzKCkpO2Nhc2VcXFwiJlxcXCI6cmV0dXJuKHlpZWxkKnRoaXMucHVzaFVudGlsKG9vKSkrKHlpZWxkKnRoaXMucHVzaFNwYWNlcyghMCkpKyh5aWVsZCp0aGlzLnB1c2hJbmRpY2F0b3JzKCkpO2Nhc2VcXFwiLVxcXCI6Y2FzZVxcXCI/XFxcIjpjYXNlXFxcIjpcXFwiOntsZXQgZT10aGlzLmZsb3dMZXZlbD4wLHQ9dGhpcy5jaGFyQXQoMSk7aWYoUmUodCl8fGUmJmlvLmluY2x1ZGVzKHQpKXJldHVybiBlP3RoaXMuZmxvd0tleSYmKHRoaXMuZmxvd0tleT0hMSk6dGhpcy5pbmRlbnROZXh0PXRoaXMuaW5kZW50VmFsdWUrMSwoeWllbGQqdGhpcy5wdXNoQ291bnQoMSkpKyh5aWVsZCp0aGlzLnB1c2hTcGFjZXMoITApKSsoeWllbGQqdGhpcy5wdXNoSW5kaWNhdG9ycygpKX19cmV0dXJuIDB9KnB1c2hUYWcoKXtpZih0aGlzLmNoYXJBdCgxKT09PVxcXCI8XFxcIil7bGV0IGU9dGhpcy5wb3MrMix0PXRoaXMuYnVmZmVyW2VdO2Zvcig7IVJlKHQpJiZ0IT09XFxcIj5cXFwiOyl0PXRoaXMuYnVmZmVyWysrZV07cmV0dXJuIHlpZWxkKnRoaXMucHVzaFRvSW5kZXgodD09PVxcXCI+XFxcIj9lKzE6ZSwhMSl9ZWxzZXtsZXQgZT10aGlzLnBvcysxLHQ9dGhpcy5idWZmZXJbZV07Zm9yKDt0OylpZihwZi5pbmNsdWRlcyh0KSl0PXRoaXMuYnVmZmVyWysrZV07ZWxzZSBpZih0PT09XFxcIiVcXFwiJiZTdS5pbmNsdWRlcyh0aGlzLmJ1ZmZlcltlKzFdKSYmU3UuaW5jbHVkZXModGhpcy5idWZmZXJbZSsyXSkpdD10aGlzLmJ1ZmZlcltlKz0zXTtlbHNlIGJyZWFrO3JldHVybiB5aWVsZCp0aGlzLnB1c2hUb0luZGV4KGUsITEpfX0qcHVzaE5ld2xpbmUoKXtsZXQgZT10aGlzLmJ1ZmZlclt0aGlzLnBvc107cmV0dXJuIGU9PT1gXFxuYD95aWVsZCp0aGlzLnB1c2hDb3VudCgxKTplPT09XFxcIlxcXFxyXFxcIiYmdGhpcy5jaGFyQXQoMSk9PT1gXFxuYD95aWVsZCp0aGlzLnB1c2hDb3VudCgyKTowfSpwdXNoU3BhY2VzKGUpe2xldCB0PXRoaXMucG9zLTEscjtkbyByPXRoaXMuYnVmZmVyWysrdF07d2hpbGUocj09PVxcXCIgXFxcInx8ZSYmcj09PVxcXCJcXHRcXFwiKTtsZXQgcz10LXRoaXMucG9zO3JldHVybiBzPjAmJih5aWVsZCB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MscyksdGhpcy5wb3M9dCksc30qcHVzaFVudGlsKGUpe2xldCB0PXRoaXMucG9zLHI9dGhpcy5idWZmZXJbdF07Zm9yKDshZShyKTspcj10aGlzLmJ1ZmZlclsrK3RdO3JldHVybiB5aWVsZCp0aGlzLnB1c2hUb0luZGV4KHQsITEpfX07dmFyIElyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lU3RhcnRzPVtdLHRoaXMuYWRkTmV3TGluZT1lPT50aGlzLmxpbmVTdGFydHMucHVzaChlKSx0aGlzLmxpbmVQb3M9ZT0+e2xldCB0PTAscj10aGlzLmxpbmVTdGFydHMubGVuZ3RoO2Zvcig7dDxyOyl7bGV0IGk9dCtyPj4xO3RoaXMubGluZVN0YXJ0c1tpXTxlP3Q9aSsxOnI9aX1pZih0aGlzLmxpbmVTdGFydHNbdF09PT1lKXJldHVybntsaW5lOnQrMSxjb2w6MX07aWYodD09PTApcmV0dXJue2xpbmU6MCxjb2w6ZX07bGV0IHM9dGhpcy5saW5lU3RhcnRzW3QtMV07cmV0dXJue2xpbmU6dCxjb2w6ZS1zKzF9fX19O2Z1bmN0aW9uIGV0KG4sZSl7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDsrK3QpaWYoblt0XS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrdShuKXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOysrZSlzd2l0Y2gobltlXS50eXBlKXtjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZX1yZXR1cm4tMX1mdW5jdGlvbiB4dShuKXtzd2l0Y2gobj09bnVsbD92b2lkIDA6bi50eXBlKXtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIE1zKG4pe3ZhciBlO3N3aXRjaChuLnR5cGUpe2Nhc2VcXFwiZG9jdW1lbnRcXFwiOnJldHVybiBuLnN0YXJ0O2Nhc2VcXFwiYmxvY2stbWFwXFxcIjp7bGV0IHQ9bi5pdGVtc1tuLml0ZW1zLmxlbmd0aC0xXTtyZXR1cm4oZT10LnNlcCkhPW51bGw/ZTp0LnN0YXJ0fWNhc2VcXFwiYmxvY2stc2VxXFxcIjpyZXR1cm4gbi5pdGVtc1tuLml0ZW1zLmxlbmd0aC0xXS5zdGFydDtkZWZhdWx0OnJldHVybltdfX1mdW5jdGlvbiBObihuKXt2YXIgdDtpZihuLmxlbmd0aD09PTApcmV0dXJuW107bGV0IGU9bi5sZW5ndGg7ZTpmb3IoOy0tZT49MDspc3dpdGNoKG5bZV0udHlwZSl7Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOmNhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjpjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6Y2FzZVxcXCJuZXdsaW5lXFxcIjpicmVhayBlfWZvcig7KCh0PW5bKytlXSk9PW51bGw/dm9pZCAwOnQudHlwZSk9PT1cXFwic3BhY2VcXFwiOyk7cmV0dXJuIG4uc3BsaWNlKGUsbi5sZW5ndGgpfWZ1bmN0aW9uIEN1KG4pe2lmKG4uc3RhcnQudHlwZT09PVxcXCJmbG93LXNlcS1zdGFydFxcXCIpZm9yKGxldCBlIG9mIG4uaXRlbXMpZS5zZXAmJiFlLnZhbHVlJiYhZXQoZS5zdGFydCxcXFwiZXhwbGljaXQta2V5LWluZFxcXCIpJiYhZXQoZS5zZXAsXFxcIm1hcC12YWx1ZS1pbmRcXFwiKSYmKGUua2V5JiYoZS52YWx1ZT1lLmtleSksZGVsZXRlIGUua2V5LHh1KGUudmFsdWUpP2UudmFsdWUuZW5kP0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGUudmFsdWUuZW5kLGUuc2VwKTplLnZhbHVlLmVuZD1lLnNlcDpBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLnN0YXJ0LGUuc2VwKSxkZWxldGUgZS5zZXApfXZhciBOcj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmF0U2NhbGFyPSExLHRoaXMuaW5kZW50PTAsdGhpcy5vZmZzZXQ9MCx0aGlzLm9uS2V5TGluZT0hMSx0aGlzLnN0YWNrPVtdLHRoaXMuc291cmNlPVxcXCJcXFwiLHRoaXMudHlwZT1cXFwiXFxcIix0aGlzLmxleGVyPW5ldyB2cix0aGlzLm9uTmV3TGluZT1lfSpwYXJzZShlLHQ9ITEpe3RoaXMub25OZXdMaW5lJiZ0aGlzLm9mZnNldD09PTAmJnRoaXMub25OZXdMaW5lKDApO2ZvcihsZXQgciBvZiB0aGlzLmxleGVyLmxleChlLHQpKXlpZWxkKnRoaXMubmV4dChyKTt0fHwoeWllbGQqdGhpcy5lbmQoKSl9Km5leHQoZSl7aWYodGhpcy5zb3VyY2U9ZSx0aGlzLmF0U2NhbGFyKXt0aGlzLmF0U2NhbGFyPSExLHlpZWxkKnRoaXMuc3RlcCgpLHRoaXMub2Zmc2V0Kz1lLmxlbmd0aDtyZXR1cm59bGV0IHQ9VHUoZSk7aWYodClpZih0PT09XFxcInNjYWxhclxcXCIpdGhpcy5hdE5ld0xpbmU9ITEsdGhpcy5hdFNjYWxhcj0hMCx0aGlzLnR5cGU9XFxcInNjYWxhclxcXCI7ZWxzZXtzd2l0Y2godGhpcy50eXBlPXQseWllbGQqdGhpcy5zdGVwKCksdCl7Y2FzZVxcXCJuZXdsaW5lXFxcIjp0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmluZGVudD0wLHRoaXMub25OZXdMaW5lJiZ0aGlzLm9uTmV3TGluZSh0aGlzLm9mZnNldCtlLmxlbmd0aCk7YnJlYWs7Y2FzZVxcXCJzcGFjZVxcXCI6dGhpcy5hdE5ld0xpbmUmJmVbMF09PT1cXFwiIFxcXCImJih0aGlzLmluZGVudCs9ZS5sZW5ndGgpO2JyZWFrO2Nhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjpjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6dGhpcy5hdE5ld0xpbmUmJih0aGlzLmluZGVudCs9ZS5sZW5ndGgpO2JyZWFrO2Nhc2VcXFwiZG9jLW1vZGVcXFwiOmNhc2VcXFwiZmxvdy1lcnJvci1lbmRcXFwiOnJldHVybjtkZWZhdWx0OnRoaXMuYXROZXdMaW5lPSExfXRoaXMub2Zmc2V0Kz1lLmxlbmd0aH1lbHNle2xldCByPWBOb3QgYSBZQU1MIHRva2VuOiAke2V9YDt5aWVsZCp0aGlzLnBvcCh7dHlwZTpcXFwiZXJyb3JcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxtZXNzYWdlOnIsc291cmNlOmV9KSx0aGlzLm9mZnNldCs9ZS5sZW5ndGh9fSplbmQoKXtmb3IoO3RoaXMuc3RhY2subGVuZ3RoPjA7KXlpZWxkKnRoaXMucG9wKCl9Z2V0IHNvdXJjZVRva2VuKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsc291cmNlOnRoaXMuc291cmNlfX0qc3RlcCgpe2xldCBlPXRoaXMucGVlaygxKTtpZih0aGlzLnR5cGU9PT1cXFwiZG9jLWVuZFxcXCImJighZXx8ZS50eXBlIT09XFxcImRvYy1lbmRcXFwiKSl7Zm9yKDt0aGlzLnN0YWNrLmxlbmd0aD4wOyl5aWVsZCp0aGlzLnBvcCgpO3RoaXMuc3RhY2sucHVzaCh7dHlwZTpcXFwiZG9jLWVuZFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LHNvdXJjZTp0aGlzLnNvdXJjZX0pO3JldHVybn1pZighZSlyZXR1cm4geWllbGQqdGhpcy5zdHJlYW0oKTtzd2l0Y2goZS50eXBlKXtjYXNlXFxcImRvY3VtZW50XFxcIjpyZXR1cm4geWllbGQqdGhpcy5kb2N1bWVudChlKTtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6cmV0dXJuIHlpZWxkKnRoaXMuc2NhbGFyKGUpO2Nhc2VcXFwiYmxvY2stc2NhbGFyXFxcIjpyZXR1cm4geWllbGQqdGhpcy5ibG9ja1NjYWxhcihlKTtjYXNlXFxcImJsb2NrLW1hcFxcXCI6cmV0dXJuIHlpZWxkKnRoaXMuYmxvY2tNYXAoZSk7Y2FzZVxcXCJibG9jay1zZXFcXFwiOnJldHVybiB5aWVsZCp0aGlzLmJsb2NrU2VxdWVuY2UoZSk7Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOnJldHVybiB5aWVsZCp0aGlzLmZsb3dDb2xsZWN0aW9uKGUpO2Nhc2VcXFwiZG9jLWVuZFxcXCI6cmV0dXJuIHlpZWxkKnRoaXMuZG9jdW1lbnRFbmQoZSl9eWllbGQqdGhpcy5wb3AoKX1wZWVrKGUpe3JldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWVdfSpwb3AoZSl7bGV0IHQ9ZSE9bnVsbD9lOnRoaXMuc3RhY2sucG9wKCk7aWYodClpZih0aGlzLnN0YWNrLmxlbmd0aD09PTApeWllbGQgdDtlbHNle2xldCByPXRoaXMucGVlaygxKTtzd2l0Y2godC50eXBlPT09XFxcImJsb2NrLXNjYWxhclxcXCI/dC5pbmRlbnQ9XFxcImluZGVudFxcXCJpbiByP3IuaW5kZW50OjA6dC50eXBlPT09XFxcImZsb3ctY29sbGVjdGlvblxcXCImJnIudHlwZT09PVxcXCJkb2N1bWVudFxcXCImJih0LmluZGVudD0wKSx0LnR5cGU9PT1cXFwiZmxvdy1jb2xsZWN0aW9uXFxcIiYmQ3UodCksci50eXBlKXtjYXNlXFxcImRvY3VtZW50XFxcIjpyLnZhbHVlPXQ7YnJlYWs7Y2FzZVxcXCJibG9jay1zY2FsYXJcXFwiOnIucHJvcHMucHVzaCh0KTticmVhaztjYXNlXFxcImJsb2NrLW1hcFxcXCI6e2xldCBzPXIuaXRlbXNbci5pdGVtcy5sZW5ndGgtMV07aWYocy52YWx1ZSl7ci5pdGVtcy5wdXNoKHtzdGFydDpbXSxrZXk6dCxzZXA6W119KSx0aGlzLm9uS2V5TGluZT0hMDtyZXR1cm59ZWxzZSBpZihzLnNlcClzLnZhbHVlPXQ7ZWxzZXtPYmplY3QuYXNzaWduKHMse2tleTp0LHNlcDpbXX0pLHRoaXMub25LZXlMaW5lPSFldChzLnN0YXJ0LFxcXCJleHBsaWNpdC1rZXktaW5kXFxcIik7cmV0dXJufWJyZWFrfWNhc2VcXFwiYmxvY2stc2VxXFxcIjp7bGV0IHM9ci5pdGVtc1tyLml0ZW1zLmxlbmd0aC0xXTtzLnZhbHVlP3IuaXRlbXMucHVzaCh7c3RhcnQ6W10sdmFsdWU6dH0pOnMudmFsdWU9dDticmVha31jYXNlXFxcImZsb3ctY29sbGVjdGlvblxcXCI6e2xldCBzPXIuaXRlbXNbci5pdGVtcy5sZW5ndGgtMV07IXN8fHMudmFsdWU/ci5pdGVtcy5wdXNoKHtzdGFydDpbXSxrZXk6dCxzZXA6W119KTpzLnNlcD9zLnZhbHVlPXQ6T2JqZWN0LmFzc2lnbihzLHtrZXk6dCxzZXA6W119KTtyZXR1cm59ZGVmYXVsdDp5aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMucG9wKHQpfWlmKChyLnR5cGU9PT1cXFwiZG9jdW1lbnRcXFwifHxyLnR5cGU9PT1cXFwiYmxvY2stbWFwXFxcInx8ci50eXBlPT09XFxcImJsb2NrLXNlcVxcXCIpJiYodC50eXBlPT09XFxcImJsb2NrLW1hcFxcXCJ8fHQudHlwZT09PVxcXCJibG9jay1zZXFcXFwiKSl7bGV0IHM9dC5pdGVtc1t0Lml0ZW1zLmxlbmd0aC0xXTtzJiYhcy5zZXAmJiFzLnZhbHVlJiZzLnN0YXJ0Lmxlbmd0aD4wJiZrdShzLnN0YXJ0KT09PS0xJiYodC5pbmRlbnQ9PT0wfHxzLnN0YXJ0LmV2ZXJ5KGk9PmkudHlwZSE9PVxcXCJjb21tZW50XFxcInx8aS5pbmRlbnQ8dC5pbmRlbnQpKSYmKHIudHlwZT09PVxcXCJkb2N1bWVudFxcXCI/ci5lbmQ9cy5zdGFydDpyLml0ZW1zLnB1c2goe3N0YXJ0OnMuc3RhcnR9KSx0Lml0ZW1zLnNwbGljZSgtMSwxKSl9fWVsc2V7bGV0IHI9XFxcIlRyaWVkIHRvIHBvcCBhbiBlbXB0eSBzdGFja1xcXCI7eWllbGR7dHlwZTpcXFwiZXJyb3JcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxzb3VyY2U6XFxcIlxcXCIsbWVzc2FnZTpyfX19KnN0cmVhbSgpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcXFwiZGlyZWN0aXZlLWxpbmVcXFwiOnlpZWxke3R5cGU6XFxcImRpcmVjdGl2ZVxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LHNvdXJjZTp0aGlzLnNvdXJjZX07cmV0dXJuO2Nhc2VcXFwiYnl0ZS1vcmRlci1tYXJrXFxcIjpjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6eWllbGQgdGhpcy5zb3VyY2VUb2tlbjtyZXR1cm47Y2FzZVxcXCJkb2MtbW9kZVxcXCI6Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOntsZXQgZT17dHlwZTpcXFwiZG9jdW1lbnRcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxzdGFydDpbXX07dGhpcy50eXBlPT09XFxcImRvYy1zdGFydFxcXCImJmUuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKSx0aGlzLnN0YWNrLnB1c2goZSk7cmV0dXJufX15aWVsZHt0eXBlOlxcXCJlcnJvclxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LG1lc3NhZ2U6YFVuZXhwZWN0ZWQgJHt0aGlzLnR5cGV9IHRva2VuIGluIFlBTUwgc3RyZWFtYCxzb3VyY2U6dGhpcy5zb3VyY2V9fSpkb2N1bWVudChlKXtpZihlLnZhbHVlKXJldHVybiB5aWVsZCp0aGlzLmxpbmVFbmQoZSk7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOntrdShlLnN0YXJ0KSE9PS0xPyh5aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMuc3RlcCgpKTplLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJufWNhc2VcXFwiYW5jaG9yXFxcIjpjYXNlXFxcInRhZ1xcXCI6Y2FzZVxcXCJzcGFjZVxcXCI6Y2FzZVxcXCJjb21tZW50XFxcIjpjYXNlXFxcIm5ld2xpbmVcXFwiOmUuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm59bGV0IHQ9dGhpcy5zdGFydEJsb2NrVmFsdWUoZSk7dD90aGlzLnN0YWNrLnB1c2godCk6eWllbGR7dHlwZTpcXFwiZXJyb3JcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxtZXNzYWdlOmBVbmV4cGVjdGVkICR7dGhpcy50eXBlfSB0b2tlbiBpbiBZQU1MIGRvY3VtZW50YCxzb3VyY2U6dGhpcy5zb3VyY2V9fSpzY2FsYXIoZSl7aWYodGhpcy50eXBlPT09XFxcIm1hcC12YWx1ZS1pbmRcXFwiKXtsZXQgdD1Ncyh0aGlzLnBlZWsoMikpLHI9Tm4odCkscztlLmVuZD8ocz1lLmVuZCxzLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZGVsZXRlIGUuZW5kKTpzPVt0aGlzLnNvdXJjZVRva2VuXTtsZXQgaT17dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6ZS5vZmZzZXQsaW5kZW50OmUuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6cixrZXk6ZSxzZXA6c31dfTt0aGlzLm9uS2V5TGluZT0hMCx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdPWl9ZWxzZSB5aWVsZCp0aGlzLmxpbmVFbmQoZSl9KmJsb2NrU2NhbGFyKGUpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6Y2FzZVxcXCJuZXdsaW5lXFxcIjplLnByb3BzLnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwic2NhbGFyXFxcIjppZihlLnNvdXJjZT10aGlzLnNvdXJjZSx0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmluZGVudD0wLHRoaXMub25OZXdMaW5lKXtsZXQgdD10aGlzLnNvdXJjZS5pbmRleE9mKGBcXG5gKSsxO2Zvcig7dCE9PTA7KXRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0K3QpLHQ9dGhpcy5zb3VyY2UuaW5kZXhPZihgXFxuYCx0KSsxfXlpZWxkKnRoaXMucG9wKCk7YnJlYWs7ZGVmYXVsdDp5aWVsZCp0aGlzLnBvcCgpLHlpZWxkKnRoaXMuc3RlcCgpfX0qYmxvY2tNYXAoZSl7dmFyIHI7bGV0IHQ9ZS5pdGVtc1tlLml0ZW1zLmxlbmd0aC0xXTtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcIm5ld2xpbmVcXFwiOmlmKHRoaXMub25LZXlMaW5lPSExLHQudmFsdWUpe2xldCBzPVxcXCJlbmRcXFwiaW4gdC52YWx1ZT90LnZhbHVlLmVuZDp2b2lkIDAsaT1BcnJheS5pc0FycmF5KHMpP3Nbcy5sZW5ndGgtMV06dm9pZCAwOyhpPT1udWxsP3ZvaWQgMDppLnR5cGUpPT09XFxcImNvbW1lbnRcXFwiP3M9PW51bGx8fHMucHVzaCh0aGlzLnNvdXJjZVRva2VuKTplLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pfWVsc2UgdC5zZXA/dC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTp0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6aWYodC52YWx1ZSllLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pO2Vsc2UgaWYodC5zZXApdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtlbHNle2lmKHRoaXMuYXRJbmRlbnRlZENvbW1lbnQodC5zdGFydCxlLmluZGVudCkpe2xldCBzPWUuaXRlbXNbZS5pdGVtcy5sZW5ndGgtMl0saT0ocj1zPT1udWxsP3ZvaWQgMDpzLnZhbHVlKT09bnVsbD92b2lkIDA6ci5lbmQ7aWYoQXJyYXkuaXNBcnJheShpKSl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSx0LnN0YXJ0KSxpLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wb3AoKTtyZXR1cm59fXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKX1yZXR1cm59aWYodGhpcy5pbmRlbnQ+PWUuaW5kZW50KXtsZXQgcz0hdGhpcy5vbktleUxpbmUmJnRoaXMuaW5kZW50PT09ZS5pbmRlbnQmJnQuc2VwJiZ0aGlzLnR5cGUhPT1cXFwic2VxLWl0ZW0taW5kXFxcIixpPVtdO2lmKHMmJnQuc2VwJiYhdC52YWx1ZSl7bGV0IG89W107Zm9yKGxldCBhPTA7YTx0LnNlcC5sZW5ndGg7KythKXtsZXQgdT10LnNlcFthXTtzd2l0Y2godS50eXBlKXtjYXNlXFxcIm5ld2xpbmVcXFwiOm8ucHVzaChhKTticmVhaztjYXNlXFxcInNwYWNlXFxcIjpicmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOnUuaW5kZW50PmUuaW5kZW50JiYoby5sZW5ndGg9MCk7YnJlYWs7ZGVmYXVsdDpvLmxlbmd0aD0wfX1vLmxlbmd0aD49MiYmKGk9dC5zZXAuc3BsaWNlKG9bMV0pKX1zd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImFuY2hvclxcXCI6Y2FzZVxcXCJ0YWdcXFwiOnN8fHQudmFsdWU/KGkucHVzaCh0aGlzLnNvdXJjZVRva2VuKSxlLml0ZW1zLnB1c2goe3N0YXJ0Oml9KSx0aGlzLm9uS2V5TGluZT0hMCk6dC5zZXA/dC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTp0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6IXQuc2VwJiYhZXQodC5zdGFydCxcXFwiZXhwbGljaXQta2V5LWluZFxcXCIpP3Quc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTpzfHx0LnZhbHVlPyhpLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wdXNoKHtzdGFydDppfSkpOnRoaXMuc3RhY2sucHVzaCh7dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6W3RoaXMuc291cmNlVG9rZW5dfV19KSx0aGlzLm9uS2V5TGluZT0hMDtyZXR1cm47Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjppZihldCh0LnN0YXJ0LFxcXCJleHBsaWNpdC1rZXktaW5kXFxcIikpaWYodC5zZXApaWYodC52YWx1ZSllLml0ZW1zLnB1c2goe3N0YXJ0OltdLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19KTtlbHNlIGlmKGV0KHQuc2VwLFxcXCJtYXAtdmFsdWUtaW5kXFxcIikpdGhpcy5zdGFjay5wdXNoKHt0eXBlOlxcXCJibG9jay1tYXBcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDppLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19XX0pO2Vsc2UgaWYoeHUodC5rZXkpJiYhZXQodC5zZXAsXFxcIm5ld2xpbmVcXFwiKSl7bGV0IG89Tm4odC5zdGFydCksYT10LmtleSx1PXQuc2VwO3UucHVzaCh0aGlzLnNvdXJjZVRva2VuKSxkZWxldGUgdC5rZXksZGVsZXRlIHQuc2VwLHRoaXMuc3RhY2sucHVzaCh7dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6byxrZXk6YSxzZXA6dX1dfSl9ZWxzZSBpLmxlbmd0aD4wP3Quc2VwPXQuc2VwLmNvbmNhdChpLHRoaXMuc291cmNlVG9rZW4pOnQuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik7ZWxzZSBpZihldCh0LnN0YXJ0LFxcXCJuZXdsaW5lXFxcIikpT2JqZWN0LmFzc2lnbih0LHtrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk7ZWxzZXtsZXQgbz1Obih0LnN0YXJ0KTt0aGlzLnN0YWNrLnB1c2goe3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0Om8sa2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX1dfSl9ZWxzZSB0LnNlcD90LnZhbHVlfHxzP2UuaXRlbXMucHVzaCh7c3RhcnQ6aSxrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk6ZXQodC5zZXAsXFxcIm1hcC12YWx1ZS1pbmRcXFwiKT90aGlzLnN0YWNrLnB1c2goe3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0OltdLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19XX0pOnQuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik6T2JqZWN0LmFzc2lnbih0LHtrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk7dGhpcy5vbktleUxpbmU9ITA7cmV0dXJuO2Nhc2VcXFwiYWxpYXNcXFwiOmNhc2VcXFwic2NhbGFyXFxcIjpjYXNlXFxcInNpbmdsZS1xdW90ZWQtc2NhbGFyXFxcIjpjYXNlXFxcImRvdWJsZS1xdW90ZWQtc2NhbGFyXFxcIjp7bGV0IG89dGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7c3x8dC52YWx1ZT8oZS5pdGVtcy5wdXNoKHtzdGFydDppLGtleTpvLHNlcDpbXX0pLHRoaXMub25LZXlMaW5lPSEwKTp0LnNlcD90aGlzLnN0YWNrLnB1c2gobyk6KE9iamVjdC5hc3NpZ24odCx7a2V5Om8sc2VwOltdfSksdGhpcy5vbktleUxpbmU9ITApO3JldHVybn1kZWZhdWx0OntsZXQgbz10aGlzLnN0YXJ0QmxvY2tWYWx1ZShlKTtpZihvKXtzJiZvLnR5cGUhPT1cXFwiYmxvY2stc2VxXFxcIiYmZXQodC5zdGFydCxcXFwiZXhwbGljaXQta2V5LWluZFxcXCIpJiZlLml0ZW1zLnB1c2goe3N0YXJ0Oml9KSx0aGlzLnN0YWNrLnB1c2gobyk7cmV0dXJufX19fXlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5zdGVwKCl9KmJsb2NrU2VxdWVuY2UoZSl7dmFyIHI7bGV0IHQ9ZS5pdGVtc1tlLml0ZW1zLmxlbmd0aC0xXTtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcIm5ld2xpbmVcXFwiOmlmKHQudmFsdWUpe2xldCBzPVxcXCJlbmRcXFwiaW4gdC52YWx1ZT90LnZhbHVlLmVuZDp2b2lkIDAsaT1BcnJheS5pc0FycmF5KHMpP3Nbcy5sZW5ndGgtMV06dm9pZCAwOyhpPT1udWxsP3ZvaWQgMDppLnR5cGUpPT09XFxcImNvbW1lbnRcXFwiP3M9PW51bGx8fHMucHVzaCh0aGlzLnNvdXJjZVRva2VuKTplLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pfWVsc2UgdC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmlmKHQudmFsdWUpZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KTtlbHNle2lmKHRoaXMuYXRJbmRlbnRlZENvbW1lbnQodC5zdGFydCxlLmluZGVudCkpe2xldCBzPWUuaXRlbXNbZS5pdGVtcy5sZW5ndGgtMl0saT0ocj1zPT1udWxsP3ZvaWQgMDpzLnZhbHVlKT09bnVsbD92b2lkIDA6ci5lbmQ7aWYoQXJyYXkuaXNBcnJheShpKSl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSx0LnN0YXJ0KSxpLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wb3AoKTtyZXR1cm59fXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKX1yZXR1cm47Y2FzZVxcXCJhbmNob3JcXFwiOmNhc2VcXFwidGFnXFxcIjppZih0LnZhbHVlfHx0aGlzLmluZGVudDw9ZS5pbmRlbnQpYnJlYWs7dC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6aWYodGhpcy5pbmRlbnQhPT1lLmluZGVudClicmVhazt0LnZhbHVlfHxldCh0LnN0YXJ0LFxcXCJzZXEtaXRlbS1pbmRcXFwiKT9lLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pOnQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm59aWYodGhpcy5pbmRlbnQ+ZS5pbmRlbnQpe2xldCBzPXRoaXMuc3RhcnRCbG9ja1ZhbHVlKGUpO2lmKHMpe3RoaXMuc3RhY2sucHVzaChzKTtyZXR1cm59fXlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5zdGVwKCl9KmZsb3dDb2xsZWN0aW9uKGUpe2xldCB0PWUuaXRlbXNbZS5pdGVtcy5sZW5ndGgtMV07aWYodGhpcy50eXBlPT09XFxcImZsb3ctZXJyb3ItZW5kXFxcIil7bGV0IHI7ZG8geWllbGQqdGhpcy5wb3AoKSxyPXRoaXMucGVlaygxKTt3aGlsZShyJiZyLnR5cGU9PT1cXFwiZmxvdy1jb2xsZWN0aW9uXFxcIil9ZWxzZSBpZihlLmVuZC5sZW5ndGg9PT0wKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImNvbW1hXFxcIjpjYXNlXFxcImV4cGxpY2l0LWtleS1pbmRcXFwiOiF0fHx0LnNlcD9lLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pOnQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm47Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjohdHx8dC52YWx1ZT9lLml0ZW1zLnB1c2goe3N0YXJ0OltdLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19KTp0LnNlcD90LnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pOk9iamVjdC5hc3NpZ24odCx7a2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX0pO3JldHVybjtjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6Y2FzZVxcXCJhbmNob3JcXFwiOmNhc2VcXFwidGFnXFxcIjohdHx8dC52YWx1ZT9lLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pOnQuc2VwP3Quc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik6dC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pO3JldHVybjtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6e2xldCBzPXRoaXMuZmxvd1NjYWxhcih0aGlzLnR5cGUpOyF0fHx0LnZhbHVlP2UuaXRlbXMucHVzaCh7c3RhcnQ6W10sa2V5OnMsc2VwOltdfSk6dC5zZXA/dGhpcy5zdGFjay5wdXNoKHMpOk9iamVjdC5hc3NpZ24odCx7a2V5OnMsc2VwOltdfSk7cmV0dXJufWNhc2VcXFwiZmxvdy1tYXAtZW5kXFxcIjpjYXNlXFxcImZsb3ctc2VxLWVuZFxcXCI6ZS5lbmQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm59bGV0IHI9dGhpcy5zdGFydEJsb2NrVmFsdWUoZSk7cj90aGlzLnN0YWNrLnB1c2gocik6KHlpZWxkKnRoaXMucG9wKCkseWllbGQqdGhpcy5zdGVwKCkpfWVsc2V7bGV0IHI9dGhpcy5wZWVrKDIpO2lmKHIudHlwZT09PVxcXCJibG9jay1tYXBcXFwiJiYodGhpcy50eXBlPT09XFxcIm1hcC12YWx1ZS1pbmRcXFwiJiZyLmluZGVudD09PWUuaW5kZW50fHx0aGlzLnR5cGU9PT1cXFwibmV3bGluZVxcXCImJiFyLml0ZW1zW3IuaXRlbXMubGVuZ3RoLTFdLnNlcCkpeWllbGQqdGhpcy5wb3AoKSx5aWVsZCp0aGlzLnN0ZXAoKTtlbHNlIGlmKHRoaXMudHlwZT09PVxcXCJtYXAtdmFsdWUtaW5kXFxcIiYmci50eXBlIT09XFxcImZsb3ctY29sbGVjdGlvblxcXCIpe2xldCBzPU1zKHIpLGk9Tm4ocyk7Q3UoZSk7bGV0IG89ZS5lbmQuc3BsaWNlKDEsZS5lbmQubGVuZ3RoKTtvLnB1c2godGhpcy5zb3VyY2VUb2tlbik7bGV0IGE9e3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OmUub2Zmc2V0LGluZGVudDplLmluZGVudCxpdGVtczpbe3N0YXJ0Omksa2V5OmUsc2VwOm99XX07dGhpcy5vbktleUxpbmU9ITAsdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXT1hfWVsc2UgeWllbGQqdGhpcy5saW5lRW5kKGUpfX1mbG93U2NhbGFyKGUpe2lmKHRoaXMub25OZXdMaW5lKXtsZXQgdD10aGlzLnNvdXJjZS5pbmRleE9mKGBcXG5gKSsxO2Zvcig7dCE9PTA7KXRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0K3QpLHQ9dGhpcy5zb3VyY2UuaW5kZXhPZihgXFxuYCx0KSsxfXJldHVybnt0eXBlOmUsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxzb3VyY2U6dGhpcy5zb3VyY2V9fXN0YXJ0QmxvY2tWYWx1ZShlKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6cmV0dXJuIHRoaXMuZmxvd1NjYWxhcih0aGlzLnR5cGUpO2Nhc2VcXFwiYmxvY2stc2NhbGFyLWhlYWRlclxcXCI6cmV0dXJue3R5cGU6XFxcImJsb2NrLXNjYWxhclxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxwcm9wczpbdGhpcy5zb3VyY2VUb2tlbl0sc291cmNlOlxcXCJcXFwifTtjYXNlXFxcImZsb3ctbWFwLXN0YXJ0XFxcIjpjYXNlXFxcImZsb3ctc2VxLXN0YXJ0XFxcIjpyZXR1cm57dHlwZTpcXFwiZmxvdy1jb2xsZWN0aW9uXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LHN0YXJ0OnRoaXMuc291cmNlVG9rZW4saXRlbXM6W10sZW5kOltdfTtjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6cmV0dXJue3R5cGU6XFxcImJsb2NrLXNlcVxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX1dfTtjYXNlXFxcImV4cGxpY2l0LWtleS1pbmRcXFwiOnt0aGlzLm9uS2V5TGluZT0hMDtsZXQgdD1NcyhlKSxyPU5uKHQpO3JldHVybiByLnB1c2godGhpcy5zb3VyY2VUb2tlbikse3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0OnJ9XX19Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjp7dGhpcy5vbktleUxpbmU9ITA7bGV0IHQ9TXMoZSkscj1Obih0KTtyZXR1cm57dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6cixrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfV19fX1yZXR1cm4gbnVsbH1hdEluZGVudGVkQ29tbWVudChlLHQpe3JldHVybiB0aGlzLnR5cGUhPT1cXFwiY29tbWVudFxcXCJ8fHRoaXMuaW5kZW50PD10PyExOmUuZXZlcnkocj0+ci50eXBlPT09XFxcIm5ld2xpbmVcXFwifHxyLnR5cGU9PT1cXFwic3BhY2VcXFwiKX0qZG9jdW1lbnRFbmQoZSl7dGhpcy50eXBlIT09XFxcImRvYy1tb2RlXFxcIiYmKGUuZW5kP2UuZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik6ZS5lbmQ9W3RoaXMuc291cmNlVG9rZW5dLHRoaXMudHlwZT09PVxcXCJuZXdsaW5lXFxcIiYmKHlpZWxkKnRoaXMucG9wKCkpKX0qbGluZUVuZChlKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImNvbW1hXFxcIjpjYXNlXFxcImRvYy1zdGFydFxcXCI6Y2FzZVxcXCJkb2MtZW5kXFxcIjpjYXNlXFxcImZsb3ctc2VxLWVuZFxcXCI6Y2FzZVxcXCJmbG93LW1hcC1lbmRcXFwiOmNhc2VcXFwibWFwLXZhbHVlLWluZFxcXCI6eWllbGQqdGhpcy5wb3AoKSx5aWVsZCp0aGlzLnN0ZXAoKTticmVhaztjYXNlXFxcIm5ld2xpbmVcXFwiOnRoaXMub25LZXlMaW5lPSExO2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6ZGVmYXVsdDplLmVuZD9lLmVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pOmUuZW5kPVt0aGlzLnNvdXJjZVRva2VuXSx0aGlzLnR5cGU9PT1cXFwibmV3bGluZVxcXCImJih5aWVsZCp0aGlzLnBvcCgpKX19fTtmdW5jdGlvbiBEZihuKXtsZXQgZT1uLnByZXR0eUVycm9ycyE9PSExO3JldHVybntsaW5lQ291bnRlcjpuLmxpbmVDb3VudGVyfHxlJiZuZXcgSXJ8fG51bGwscHJldHR5RXJyb3JzOmV9fWZ1bmN0aW9uIE91KG4sZT17fSl7bGV0e2xpbmVDb3VudGVyOnQscHJldHR5RXJyb3JzOnJ9PURmKGUpLHM9bmV3IE5yKHQ9PW51bGw/dm9pZCAwOnQuYWRkTmV3TGluZSksaT1uZXcgT3IoZSksbz1udWxsO2ZvcihsZXQgYSBvZiBpLmNvbXBvc2Uocy5wYXJzZShuKSwhMCxuLmxlbmd0aCkpaWYoIW8pbz1hO2Vsc2UgaWYoby5vcHRpb25zLmxvZ0xldmVsIT09XFxcInNpbGVudFxcXCIpe28uZXJyb3JzLnB1c2gobmV3IFhlKGEucmFuZ2Uuc2xpY2UoMCwyKSxcXFwiTVVMVElQTEVfRE9DU1xcXCIsXFxcIlNvdXJjZSBjb250YWlucyBtdWx0aXBsZSBkb2N1bWVudHM7IHBsZWFzZSB1c2UgWUFNTC5wYXJzZUFsbERvY3VtZW50cygpXFxcIikpO2JyZWFrfXJldHVybiByJiZ0JiYoby5lcnJvcnMuZm9yRWFjaChKaShuLHQpKSxvLndhcm5pbmdzLmZvckVhY2goSmkobix0KSkpLG99ZnVuY3Rpb24gYW8obixlLHQpe2xldCByO3R5cGVvZiBlPT1cXFwiZnVuY3Rpb25cXFwiP3I9ZTp0PT09dm9pZCAwJiZlJiZ0eXBlb2YgZT09XFxcIm9iamVjdFxcXCImJih0PWUpO2xldCBzPU91KG4sdCk7aWYoIXMpcmV0dXJuIG51bGw7aWYocy53YXJuaW5ncy5mb3JFYWNoKGk9PnBzKHMub3B0aW9ucy5sb2dMZXZlbCxpKSkscy5lcnJvcnMubGVuZ3RoPjApe2lmKHMub3B0aW9ucy5sb2dMZXZlbCE9PVxcXCJzaWxlbnRcXFwiKXRocm93IHMuZXJyb3JzWzBdO3MuZXJyb3JzPVtdfXJldHVybiBzLnRvSlMoT2JqZWN0LmFzc2lnbih7cmV2aXZlcjpyfSx0KSl9dmFyICRzPXFyKE11KCkpO3ZhciBiPXFyKG5zKCkpO3ZhciB0dDsodj0+e3YuREVGQVVMVF9UT19TVFJJTkc9e251bGxSZXByZXNlbnRhdGlvbjpcXFwiLVxcXCIsZGF0ZUZvcm1hdDpcXFwiTU1NTSBkZCwgeXl5eVxcXCIsZGF0ZVRpbWVGb3JtYXQ6XFxcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcXFwifTtmdW5jdGlvbiBlKEQsdz12LkRFRkFVTFRfVE9fU1RSSU5HLFQ9ITEpe2xldCBDPXQoRCk7aWYoIUMpcmV0dXJuIHcubnVsbFJlcHJlc2VudGF0aW9uO3N3aXRjaChDLnR5cGUpe2Nhc2VcXFwibnVsbFxcXCI6cmV0dXJuIHcubnVsbFJlcHJlc2VudGF0aW9uO2Nhc2VcXFwic3RyaW5nXFxcIjpyZXR1cm4gQy52YWx1ZTtjYXNlXFxcIm51bWJlclxcXCI6Y2FzZVxcXCJib29sZWFuXFxcIjpyZXR1cm5cXFwiXFxcIitDLnZhbHVlO2Nhc2VcXFwibGlua1xcXCI6cmV0dXJuIEMudmFsdWUubWFya2Rvd24oKTtjYXNlXFxcImZ1bmN0aW9uXFxcIjpyZXR1cm5cXFwiPGZ1bmN0aW9uPlxcXCI7Y2FzZVxcXCJhcnJheVxcXCI6bGV0IE09XFxcIlxcXCI7cmV0dXJuIFQmJihNKz1cXFwiW1xcXCIpLE0rPUMudmFsdWUubWFwKFY9PmUoVix3LCEwKSkuam9pbihcXFwiLCBcXFwiKSxUJiYoTSs9XFxcIl1cXFwiKSxNO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm5cXFwieyBcXFwiK09iamVjdC5lbnRyaWVzKEMudmFsdWUpLm1hcChWPT5WWzBdK1xcXCI6IFxcXCIrZShWWzFdLHcsITApKS5qb2luKFxcXCIsIFxcXCIpK1xcXCIgfVxcXCI7Y2FzZVxcXCJkYXRlXFxcIjpyZXR1cm4gX2EoQy52YWx1ZSx3LmRhdGVGb3JtYXQsdy5kYXRlVGltZUZvcm1hdCk7Y2FzZVxcXCJkdXJhdGlvblxcXCI6cmV0dXJuIEJhKEMudmFsdWUpfX12LnRvU3RyaW5nPWU7ZnVuY3Rpb24gdChEKXtyZXR1cm4gZihEKT97dHlwZTpcXFwibnVsbFxcXCIsdmFsdWU6RH06ZChEKT97dHlwZTpcXFwibnVtYmVyXFxcIix2YWx1ZTpEfTpsKEQpP3t0eXBlOlxcXCJzdHJpbmdcXFwiLHZhbHVlOkR9OmcoRCk/e3R5cGU6XFxcImJvb2xlYW5cXFwiLHZhbHVlOkR9OnAoRCk/e3R5cGU6XFxcImR1cmF0aW9uXFxcIix2YWx1ZTpEfTpoKEQpP3t0eXBlOlxcXCJkYXRlXFxcIix2YWx1ZTpEfTpGKEQpP3t0eXBlOlxcXCJhcnJheVxcXCIsdmFsdWU6RH06eShEKT97dHlwZTpcXFwibGlua1xcXCIsdmFsdWU6RH06TyhEKT97dHlwZTpcXFwiZnVuY3Rpb25cXFwiLHZhbHVlOkR9OlMoRCk/e3R5cGU6XFxcIm9iamVjdFxcXCIsdmFsdWU6RH06dm9pZCAwfXYud3JhcFZhbHVlPXQ7ZnVuY3Rpb24gcihELHcpe2lmKFMoRCkpe2xldCBUPXt9O2ZvcihsZXRbQyxNXW9mIE9iamVjdC5lbnRyaWVzKEQpKVRbQ109cihNLHcpO3JldHVybiBUfWVsc2UgaWYoRihEKSl7bGV0IFQ9W107Zm9yKGxldCBDIG9mIEQpVC5wdXNoKHIoQyx3KSk7cmV0dXJuIFR9ZWxzZSByZXR1cm4gdyhEKX12Lm1hcExlYXZlcz1yO2Z1bmN0aW9uIHMoRCx3KXtyZXR1cm4gaShELHcpPT0wfXYuZXF1YWxzPXM7ZnVuY3Rpb24gaShELHcsVCl7dmFyIFYsajtpZihEPT09d3x8KEQ9PT12b2lkIDAmJihEPW51bGwpLHc9PT12b2lkIDAmJih3PW51bGwpLEQ9PT1udWxsJiZ3PT09bnVsbCkpcmV0dXJuIDA7aWYoRD09PW51bGwpcmV0dXJuLTE7aWYodz09PW51bGwpcmV0dXJuIDE7bGV0IEM9dChEKSxNPXQodyk7aWYoQz09PXZvaWQgMCYmTT09PXZvaWQgMClyZXR1cm4gMDtpZihDPT09dm9pZCAwKXJldHVybi0xO2lmKE09PT12b2lkIDApcmV0dXJuIDE7aWYoQy50eXBlIT1NLnR5cGUpcmV0dXJuIEMudHlwZS5sb2NhbGVDb21wYXJlKE0udHlwZSk7aWYoQy52YWx1ZT09PU0udmFsdWUpcmV0dXJuIDA7c3dpdGNoKEMudHlwZSl7Y2FzZVxcXCJzdHJpbmdcXFwiOnJldHVybiBDLnZhbHVlLmxvY2FsZUNvbXBhcmUoTS52YWx1ZSk7Y2FzZVxcXCJudW1iZXJcXFwiOnJldHVybiBDLnZhbHVlPE0udmFsdWU/LTE6Qy52YWx1ZT09TS52YWx1ZT8wOjE7Y2FzZVxcXCJudWxsXFxcIjpyZXR1cm4gMDtjYXNlXFxcImJvb2xlYW5cXFwiOnJldHVybiBDLnZhbHVlPT1NLnZhbHVlPzA6Qy52YWx1ZT8xOi0xO2Nhc2VcXFwibGlua1xcXCI6bGV0IHo9Qy52YWx1ZSxyZT1NLnZhbHVlLGxlPVQhPW51bGw/VDpBZT0+QWUseD1sZSh6LnBhdGgpLmxvY2FsZUNvbXBhcmUobGUocmUucGF0aCkpO2lmKHghPTApcmV0dXJuIHg7bGV0IFI9ei50eXBlLmxvY2FsZUNvbXBhcmUocmUudHlwZSk7cmV0dXJuIFIhPTA/Ujp6LnN1YnBhdGgmJiFyZS5zdWJwYXRoPzE6IXouc3VicGF0aCYmcmUuc3VicGF0aD8tMTohei5zdWJwYXRoJiYhcmUuc3VicGF0aD8wOigoVj16LnN1YnBhdGgpIT1udWxsP1Y6XFxcIlxcXCIpLmxvY2FsZUNvbXBhcmUoKGo9cmUuc3VicGF0aCkhPW51bGw/ajpcXFwiXFxcIik7Y2FzZVxcXCJkYXRlXFxcIjpyZXR1cm4gQy52YWx1ZTxNLnZhbHVlPy0xOkMudmFsdWUuZXF1YWxzKE0udmFsdWUpPzA6MTtjYXNlXFxcImR1cmF0aW9uXFxcIjpyZXR1cm4gQy52YWx1ZTxNLnZhbHVlPy0xOkMudmFsdWUuZXF1YWxzKE0udmFsdWUpPzA6MTtjYXNlXFxcImFycmF5XFxcIjpsZXQgUT1DLnZhbHVlLGNlPU0udmFsdWU7Zm9yKGxldCBBZT0wO0FlPE1hdGgubWluKFEubGVuZ3RoLGNlLmxlbmd0aCk7QWUrKyl7bGV0ICR0PWkoUVtBZV0sY2VbQWVdKTtpZigkdCE9MClyZXR1cm4gJHR9cmV0dXJuIFEubGVuZ3RoLWNlLmxlbmd0aDtjYXNlXFxcIm9iamVjdFxcXCI6bGV0IEVlPUMudmFsdWUsVmU9TS52YWx1ZSx0bj1BcnJheS5mcm9tKE9iamVjdC5rZXlzKEVlKSksQnQ9QXJyYXkuZnJvbShPYmplY3Qua2V5cyhWZSkpO3RuLnNvcnQoKSxCdC5zb3J0KCk7bGV0IFB0PWkodG4sQnQpO2lmKFB0IT0wKXJldHVybiBQdDtmb3IobGV0IEFlIG9mIHRuKXtsZXQgJHQ9aShFZVtBZV0sVmVbQWVdKTtpZigkdCE9MClyZXR1cm4gJHR9cmV0dXJuIDA7Y2FzZVxcXCJmdW5jdGlvblxcXCI6cmV0dXJuIDB9fXYuY29tcGFyZT1pO2Z1bmN0aW9uIG8oRCl7dmFyIHc7cmV0dXJuKHc9dChEKSk9PW51bGw/dm9pZCAwOncudHlwZX12LnR5cGVPZj1vO2Z1bmN0aW9uIGEoRCl7bGV0IHc9dChEKTtpZighdylyZXR1cm4hMTtzd2l0Y2gody50eXBlKXtjYXNlXFxcIm51bWJlclxcXCI6cmV0dXJuIHcudmFsdWUhPTA7Y2FzZVxcXCJzdHJpbmdcXFwiOnJldHVybiB3LnZhbHVlLmxlbmd0aD4wO2Nhc2VcXFwiYm9vbGVhblxcXCI6cmV0dXJuIHcudmFsdWU7Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm4hIXcudmFsdWUucGF0aDtjYXNlXFxcImRhdGVcXFwiOnJldHVybiB3LnZhbHVlLnRvTWlsbGlzKCkhPTA7Y2FzZVxcXCJkdXJhdGlvblxcXCI6cmV0dXJuIHcudmFsdWUuYXMoXFxcInNlY29uZHNcXFwiKSE9MDtjYXNlXFxcIm9iamVjdFxcXCI6cmV0dXJuIE9iamVjdC5rZXlzKHcudmFsdWUpLmxlbmd0aD4wO2Nhc2VcXFwiYXJyYXlcXFwiOnJldHVybiB3LnZhbHVlLmxlbmd0aD4wO2Nhc2VcXFwibnVsbFxcXCI6cmV0dXJuITE7Y2FzZVxcXCJmdW5jdGlvblxcXCI6cmV0dXJuITB9fXYuaXNUcnV0aHk9YTtmdW5jdGlvbiB1KEQpe2lmKEQ9PW51bGwpcmV0dXJuIEQ7aWYodi5pc0FycmF5KEQpKXJldHVybltdLmNvbmNhdChELm1hcCh3PT51KHcpKSk7aWYodi5pc09iamVjdChEKSl7bGV0IHc9e307Zm9yKGxldFtULENdb2YgT2JqZWN0LmVudHJpZXMoRCkpd1tUXT11KEMpO3JldHVybiB3fWVsc2UgcmV0dXJuIER9di5kZWVwQ29weT11O2Z1bmN0aW9uIGwoRCl7cmV0dXJuIHR5cGVvZiBEPT1cXFwic3RyaW5nXFxcIn12LmlzU3RyaW5nPWw7ZnVuY3Rpb24gZChEKXtyZXR1cm4gdHlwZW9mIEQ9PVxcXCJudW1iZXJcXFwifXYuaXNOdW1iZXI9ZDtmdW5jdGlvbiBoKEQpe3JldHVybiBEIGluc3RhbmNlb2YgQn12LmlzRGF0ZT1oO2Z1bmN0aW9uIHAoRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiBBfXYuaXNEdXJhdGlvbj1wO2Z1bmN0aW9uIGYoRCl7cmV0dXJuIEQ9PW51bGx9di5pc051bGw9ZjtmdW5jdGlvbiBGKEQpe3JldHVybiBBcnJheS5pc0FycmF5KEQpfXYuaXNBcnJheT1GO2Z1bmN0aW9uIGcoRCl7cmV0dXJuIHR5cGVvZiBEPT1cXFwiYm9vbGVhblxcXCJ9di5pc0Jvb2xlYW49ZztmdW5jdGlvbiB5KEQpe3JldHVybiBEIGluc3RhbmNlb2YgZWV9di5pc0xpbms9eTtmdW5jdGlvbiBTKEQpe3JldHVybiBEIT09dm9pZCAwJiZ0eXBlb2YgRD09XFxcIm9iamVjdFxcXCImJiFGKEQpJiYhcChEKSYmIWgoRCkmJiF5KEQpJiYhZihEKX12LmlzT2JqZWN0PVM7ZnVuY3Rpb24gTyhEKXtyZXR1cm4gdHlwZW9mIEQ9PVxcXCJmdW5jdGlvblxcXCJ9di5pc0Z1bmN0aW9uPU99KSh0dHx8KHR0PXt9KSk7dmFyIF91OyhpPT57ZnVuY3Rpb24gbihvKXtyZXR1cm4gdHQuaXNPYmplY3QobykmJk9iamVjdC5rZXlzKG8pLmxlbmd0aD09MiYmXFxcImtleVxcXCJpbiBvJiZcXFwicm93c1xcXCJpbiBvfWkuaXNFbGVtZW50R3JvdXA9bjtmdW5jdGlvbiBlKG8pe2ZvcihsZXQgYSBvZiBvKWlmKCFuKGEpKXJldHVybiExO3JldHVybiEwfWkuaXNHcm91cGluZz1lO2Z1bmN0aW9uIHQobyl7Zm9yKGxldCBhIG9mIG8paWYobihhKSlyZXR1cm4hMTtyZXR1cm4hMH1pLmlzTGVhZj10O2Z1bmN0aW9uIHIobyl7aWYobihvKSlyZXR1cm4gcihvLnJvd3MpO2lmKGUobykpe2xldCBhPTA7Zm9yKGxldCB1IG9mIG8pYSs9cih1LnJvd3MpO3JldHVybiBhfWVsc2UgcmV0dXJuIG8ubGVuZ3RofWkuY291bnQ9cjtmdW5jdGlvbiBzKG8sYSx1KXtpZih1PD1hKXJldHVybltdO2lmKHQobykpcmV0dXJuIG8uc2xpY2UoYSx1KTtsZXQgbD0wLGQ9MDtmb3IoO2w8by5sZW5ndGgmJmQrcihvW2xdKTw9YTspZCs9cihvW2xdKSxsKys7aWYobD49by5sZW5ndGgpcmV0dXJuW107bGV0IGg9W107Zm9yKDtsPG8ubGVuZ3RoJiZkPHU7KXtsZXQgcD1vW2xdLGY9cihwKSxGPU1hdGgubWF4KGQsYSksZz1NYXRoLm1pbihmK2QsdSk7aC5wdXNoKHtrZXk6cC5rZXkscm93czpzKHAucm93cyxGLWQsZy1kKX0pLGQrPWYsbCsrfXJldHVybiBofWkuc2xpY2U9c30pKF91fHwoX3U9e30pKTt2YXIgQXI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT1lO3RoaXMuc3VjY2Vzc2Z1bD0hMH1tYXAoZSl7cmV0dXJuIG5ldyBBcihlKHRoaXMudmFsdWUpKX1mbGF0TWFwKGUpe3JldHVybiBlKHRoaXMudmFsdWUpfW1hcEVycihlKXtyZXR1cm4gdGhpc31iaW1hcChlLHQpe3JldHVybiB0aGlzLm1hcChlKX1vckVsc2UoZSl7cmV0dXJuIHRoaXMudmFsdWV9Y2FzdCgpe3JldHVybiB0aGlzfW9yRWxzZVRocm93KGUpe3JldHVybiB0aGlzLnZhbHVlfX0sTXI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5lcnJvcj1lO3RoaXMuc3VjY2Vzc2Z1bD0hMX1tYXAoZSl7cmV0dXJuIHRoaXN9ZmxhdE1hcChlKXtyZXR1cm4gdGhpc31tYXBFcnIoZSl7cmV0dXJuIG5ldyBNcihlKHRoaXMuZXJyb3IpKX1iaW1hcChlLHQpe3JldHVybiB0aGlzLm1hcEVycih0KX1vckVsc2UoZSl7cmV0dXJuIGV9Y2FzdCgpe3JldHVybiB0aGlzfW9yRWxzZVRocm93KGUpe3Rocm93IGU/bmV3IEVycm9yKGUodGhpcy5lcnJvcikpOm5ldyBFcnJvcihcXFwiXFxcIit0aGlzLmVycm9yKX19LENlOyhhPT57ZnVuY3Rpb24gbih1KXtyZXR1cm4gbmV3IEFyKHUpfWEuc3VjY2Vzcz1uO2Z1bmN0aW9uIGUodSl7cmV0dXJuIG5ldyBNcih1KX1hLmZhaWx1cmU9ZTtmdW5jdGlvbiB0KHUsbCxkKXtyZXR1cm4gdS5zdWNjZXNzZnVsP2wuc3VjY2Vzc2Z1bD9kKHUudmFsdWUsbC52YWx1ZSk6ZShsLmVycm9yKTplKHUuZXJyb3IpfWEuZmxhdE1hcDI9dDtmdW5jdGlvbiByKHUsbCxkKXtyZXR1cm4gdCh1LGwsKGgscCk9Pm4oZChoLHApKSl9YS5tYXAyPXI7ZnVuY3Rpb24gcyh1LGwpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiB1KXtsZXQgcD1sKGgpO2lmKCFwLnN1Y2Nlc3NmdWwpcmV0dXJuIHAuY2FzdCgpO2QucHVzaChwLnZhbHVlKX1yZXR1cm4gYS5zdWNjZXNzKGQpfWEubWFwQWxsPXM7ZnVuY3Rpb24gaSh1KXt0cnl7cmV0dXJuIGEuc3VjY2Vzcyh1KCkpfWNhdGNoKGwpe3JldHVybiBhLmZhaWx1cmUobCl9fWEudHJ5aW5nPWk7YXN5bmMgZnVuY3Rpb24gbyh1KXt0cnl7cmV0dXJuIGEuc3VjY2Vzcyhhd2FpdCB1KX1jYXRjaChsKXtyZXR1cm4gYS5mYWlsdXJlKGwpfX1hLmFzeW5jPW99KShDZXx8KENlPXt9KSk7dmFyIFF0Oyh2PT57di5FVkVSWVRISU5HPXt0eXBlOlxcXCJldmVyeXRoaW5nXFxcIn0sdi5OT1RISU5HPXt0eXBlOlxcXCJub3RoaW5nXFxcIn0sdi5FTVBUWV9TRVQ9bmV3IFNldDtmdW5jdGlvbiByKEQpe3JldHVybiBELnNpemU9PTA/di5OT1RISU5HOnt0eXBlOlxcXCJhdG9tXFxcIix2YWx1ZTpEfX12LmF0b209cjtmdW5jdGlvbiBzKEQpe3JldHVybiBEP3YuRVZFUllUSElORzp2Lk5PVEhJTkd9di5jb25zdGFudD1zO2Z1bmN0aW9uIGkoRCl7cmV0dXJuIEQhPT12b2lkIDA/cihEKTp2Lk5PVEhJTkd9di5udWxsYWJsZUF0b209aTtmdW5jdGlvbiBvKEQpe3JldHVybiBELnNpemU9PTA/di5FVkVSWVRISU5HOnt0eXBlOlxcXCJuZWdhdGVkXFxcIix2YWx1ZTpEfX12Lm5lZ2F0ZWQ9bztmdW5jdGlvbiBhKEQpe3N3aXRjaChELnR5cGUpe2Nhc2VcXFwiZXZlcnl0aGluZ1xcXCI6cmV0dXJuIHYuTk9USElORztjYXNlXFxcIm5vdGhpbmdcXFwiOnJldHVybiB2LkVWRVJZVEhJTkc7Y2FzZVxcXCJhdG9tXFxcIjpyZXR1cm4gbyhELnZhbHVlKTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiByKEQudmFsdWUpfX12Lm5lZ2F0ZT1hO2Z1bmN0aW9uIHUoRCl7c3dpdGNoKEQudHlwZSl7Y2FzZVxcXCJldmVyeXRoaW5nXFxcIjpyZXR1cm4hMTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiExO2Nhc2VcXFwiYXRvbVxcXCI6cmV0dXJuIEQudmFsdWUuc2l6ZT09MDtjYXNlXFxcIm5vdGhpbmdcXFwiOnJldHVybiEwfX12LmVtcHR5PXU7ZnVuY3Rpb24gbChELHcpe3N3aXRjaChELnR5cGUpe2Nhc2VcXFwiZXZlcnl0aGluZ1xcXCI6cmV0dXJuIHc7Y2FzZVxcXCJub3RoaW5nXFxcIjpyZXR1cm4gdi5FTVBUWV9TRVQ7Y2FzZVxcXCJhdG9tXFxcIjpyZXR1cm4gRC52YWx1ZTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiBPKHcsRC52YWx1ZSl9fXYucmVzb2x2ZT1sO2Z1bmN0aW9uIGQoRCl7cmV0dXJuIGgoRCx3PT53KX12LmludGVyc2VjdD1kO2Z1bmN0aW9uIGgoRCx3KXtyZXR1cm4gcChELFQ9PkNlLnN1Y2Nlc3ModyhUKSkpLm9yRWxzZVRocm93KCl9di5sYXp5SW50ZXJzZWN0PWg7ZnVuY3Rpb24gcChELHcpe2xldCBUPVtdLEM9W107Zm9yKGxldCBNIG9mIEQpe2xldCBWPXcoTSk7aWYoIVYuc3VjY2Vzc2Z1bClyZXR1cm4gVi5jYXN0KCk7bGV0IGo9Vi52YWx1ZTtpZihqIT09dm9pZCAwKXtpZih1KGopKXJldHVybiBDZS5zdWNjZXNzKHYuTk9USElORyk7ai50eXBlIT09XFxcImV2ZXJ5dGhpbmdcXFwiJiYoai50eXBlPT1cXFwiYXRvbVxcXCI/VC5wdXNoKGoudmFsdWUpOmoudHlwZT09XFxcIm5lZ2F0ZWRcXFwiJiZDLnB1c2goai52YWx1ZSkpfX1yZXR1cm4gVC5sZW5ndGg9PTAmJkMubGVuZ3RoPT0wP0NlLnN1Y2Nlc3Modi5FVkVSWVRISU5HKTpULmxlbmd0aD4wJiZDLmxlbmd0aD09MD9DZS5zdWNjZXNzKHIoeShUKSkpOlQubGVuZ3RoPT0wJiZDLmxlbmd0aD4wP0NlLnN1Y2Nlc3MobyhTKEMpKSk6Q2Uuc3VjY2Vzcyh2LmF0b20oTyh5KFQpLFMoQykpKSl9di5sYXp5RmFpbGFibGVJbnRlcnNlY3Rpb249cDtmdW5jdGlvbiBmKEQpe3JldHVybiBGKEQsdz0+dyl9di51bmlvbj1mO2Z1bmN0aW9uIEYoRCx3KXtyZXR1cm4gZyhELFQ9PkNlLnN1Y2Nlc3ModyhUKSkpLm9yRWxzZVRocm93KCl9di5sYXp5VW5pb249RjtmdW5jdGlvbiBnKEQsdyl7bGV0IFQ9W10sQz1bXTtmb3IobGV0IE0gb2YgRCl7bGV0IFY9dyhNKTtpZighVi5zdWNjZXNzZnVsKXJldHVybiBWLmNhc3QoKTtsZXQgaj1WLnZhbHVlO2lmKGohPT12b2lkIDApe2lmKGoudHlwZT09PVxcXCJldmVyeXRoaW5nXFxcIilyZXR1cm4gQ2Uuc3VjY2Vzcyh2LkVWRVJZVEhJTkcpO3Uoail8fChqLnR5cGU9PVxcXCJhdG9tXFxcIj9ULnB1c2goai52YWx1ZSk6ai50eXBlPT1cXFwibmVnYXRlZFxcXCImJkMucHVzaChqLnZhbHVlKSl9fXJldHVybiBULmxlbmd0aD09MCYmQy5sZW5ndGg9PTA/Q2Uuc3VjY2Vzcyh2Lk5PVEhJTkcpOlQubGVuZ3RoPjAmJkMubGVuZ3RoPT0wP0NlLnN1Y2Nlc3Modi5hdG9tKFMoVCkpKTpULmxlbmd0aD09MCYmQy5sZW5ndGg+MD9DZS5zdWNjZXNzKHYubmVnYXRlZCh5KEMpKSk6Q2Uuc3VjY2VzcyhvKE8oeShDKSxTKFQpKSkpfXYubGF6eUZhaWxhYmxlVW5pb249ZztmdW5jdGlvbiB5KEQpe2lmKEQubGVuZ3RoPT0wKXJldHVybiBuZXcgU2V0O2lmKEQubGVuZ3RoPT0xKXJldHVybiBEWzBdO2xldCB3PVtdLmNvbmNhdChEKS5zb3J0KChULEMpPT5ULnNpemUtQy5zaXplKTtmb3IoO3cubGVuZ3RoPjE7KXtsZXQgVD1uZXcgU2V0LEM9dy5wb3AoKTtmb3IobGV0IE0gb2Ygd1swXSlDLmhhcyhNKSYmVC5hZGQoTSk7d1swXT1UfXJldHVybiB3WzBdfXYuc2V0SW50ZXJzZWN0PXk7ZnVuY3Rpb24gUyhEKXtpZihELmxlbmd0aD09MClyZXR1cm4gbmV3IFNldDtpZihELmxlbmd0aD09MSlyZXR1cm4gRFswXTtsZXQgdz1uZXcgU2V0O2ZvcihsZXQgVCBvZiBEKWZvcihsZXQgQyBvZiBUKXcuYWRkKEMpO3JldHVybiB3fXYuc2V0VW5pb249UztmdW5jdGlvbiBPKEQsdyl7aWYoRC5zaXplPncuc2l6ZSl7bGV0IFQ9bmV3IFNldChEKTtmb3IobGV0IEMgb2YgdylULmRlbGV0ZShDKTtyZXR1cm4gVH1lbHNle2xldCBUPW5ldyBTZXQ7Zm9yKGxldCBDIG9mIEQpdy5oYXMoQyl8fFQuYWRkKEMpO3JldHVybiBUfX12LnNldEludGVyc2VjdE5lZ2F0aW9uPU99KShRdHx8KFF0PXt9KSk7dmFyIGFlOyhnPT57Zy5ST1c9XFxcIiRyb3dcXFwiO2Z1bmN0aW9uIGUoeSl7cmV0dXJue3R5cGU6XFxcInZhcmlhYmxlXFxcIixuYW1lOnl9fWcudmFyaWFibGU9ZTtmdW5jdGlvbiB0KHkpe3JldHVybnt0eXBlOlxcXCJsaXRlcmFsXFxcIix2YWx1ZTp5fX1nLmxpdGVyYWw9dDtmdW5jdGlvbiByKHksUyxPKXtyZXR1cm57dHlwZTpcXFwiYmluYXJ5b3BcXFwiLGxlZnQ6eSxvcDpTLHJpZ2h0Ok99fWcuYmluYXJ5T3A9cjtmdW5jdGlvbiBzKHksUyl7cmV0dXJue3R5cGU6XFxcImJpbmFyeW9wXFxcIixsZWZ0OnkscmlnaHQ6UyxvcDpcXFwiaW5kZXhcXFwifX1nLmluZGV4PXM7ZnVuY3Rpb24gaSh5KXtsZXQgUz15LnNwbGl0KFxcXCIuXFxcIiksTz1nLnZhcmlhYmxlKFNbMF0pO2ZvcihsZXQgdj0xO3Y8Uy5sZW5ndGg7disrKU89Zy5pbmRleChPLGcubGl0ZXJhbChTW3ZdKSk7cmV0dXJuIE99Zy5pbmRleFZhcmlhYmxlPWk7ZnVuY3Rpb24gbyh5LFMpe3JldHVybnt0eXBlOlxcXCJsYW1iZGFcXFwiLGFyZ3VtZW50czp5LHZhbHVlOlN9fWcubGFtYmRhPW87ZnVuY3Rpb24gYSh5LFMpe3JldHVybnt0eXBlOlxcXCJmdW5jdGlvblxcXCIsZnVuYzp5LGFyZ3VtZW50czpTfX1nLmZ1bmM9YTtmdW5jdGlvbiB1KHkpe3JldHVybnt0eXBlOlxcXCJsaXN0XFxcIix2YWx1ZXM6eX19Zy5saXN0PXU7ZnVuY3Rpb24gbCh5KXtyZXR1cm57dHlwZTpcXFwib2JqZWN0XFxcIix2YWx1ZXM6eX19Zy5vYmplY3Q9bDtmdW5jdGlvbiBkKHkpe3JldHVybnt0eXBlOlxcXCJuZWdhdGVkXFxcIixjaGlsZDp5fX1nLm5lZ2F0ZT1kO2Z1bmN0aW9uIGgoeSl7cmV0dXJuIHk9PVxcXCI8PVxcXCJ8fHk9PVxcXCI8XFxcInx8eT09XFxcIj5cXFwifHx5PT1cXFwiPj1cXFwifHx5PT1cXFwiIT1cXFwifHx5PT1cXFwiPVxcXCJ9Zy5pc0NvbXBhcmVPcD1oO2Z1bmN0aW9uIHAoeSxTPW5ldyBTZXQoW2cuUk9XXSkpe3N3aXRjaCh5LnR5cGUpe2Nhc2VcXFwiYmluYXJ5b3BcXFwiOnJldHVybiB5Lm9wPT09XFxcImluZGV4XFxcIiYmeS5sZWZ0LnR5cGU9PVxcXCJ2YXJpYWJsZVxcXCImJnkubGVmdC5uYW1lPT1nLlJPVyYmeS5yaWdodC50eXBlPT1cXFwibGl0ZXJhbFxcXCImJnR0LmlzU3RyaW5nKHkucmlnaHQudmFsdWUpP1MuaGFzKHkucmlnaHQudmFsdWUpP25ldyBTZXQ6bmV3IFNldChbeS5yaWdodC52YWx1ZV0pOlF0LnNldFVuaW9uKFtwKHkubGVmdCxTKSxwKHkucmlnaHQsUyldKTtjYXNlXFxcImZ1bmN0aW9uXFxcIjpyZXR1cm4gUXQuc2V0VW5pb24oeS5hcmd1bWVudHMubWFwKHY9PnAodixTKSkpO2Nhc2VcXFwibGFtYmRhXFxcIjpsZXQgTz1TIT1udWxsP1M6bmV3IFNldDtmb3IobGV0IHYgb2YgeS5hcmd1bWVudHMpTy5hZGQodik7cmV0dXJuIHAoeS52YWx1ZSxPKTtjYXNlXFxcImxpc3RcXFwiOnJldHVybiBRdC5zZXRVbmlvbih5LnZhbHVlcy5tYXAodj0+cCh2LFMpKSk7Y2FzZVxcXCJuZWdhdGVkXFxcIjpyZXR1cm4gcCh5LmNoaWxkLFMpO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gUXQuc2V0VW5pb24oT2JqZWN0LnZhbHVlcyh5LnZhbHVlcykubWFwKHY9PnAodixTKSkpO2Nhc2VcXFwidmFyaWFibGVcXFwiOnJldHVybiBTJiZTLmhhcyh5Lm5hbWUpP25ldyBTZXQ6bmV3IFNldChbeS5uYW1lXSk7Y2FzZVxcXCJsaXRlcmFsXFxcIjpyZXR1cm4gbmV3IFNldH19Zy51bmJvdW5kVmFyaWFibGVzPXA7ZnVuY3Rpb24gZih5KXtzd2l0Y2goeS50eXBlKXtjYXNlXFxcImJpbmFyeW9wXFxcIjpyZXR1cm4geS5vcD09PVxcXCJpbmRleFxcXCI/YCR7Zih5LmxlZnQpfVske2YoeS5yaWdodCl9XWA6YCR7Zih5LmxlZnQpfSAke3kub3B9ICR7Zih5LnJpZ2h0KX1gO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOnJldHVybmAke2YoeS5mdW5jKX0oJHt5LmFyZ3VtZW50cy5tYXAoZikuam9pbihcXFwiLCBcXFwiKX0pYDtjYXNlXFxcImxhbWJkYVxcXCI6cmV0dXJuYCgke3kuYXJndW1lbnRzLmpvaW4oXFxcIiwgXFxcIil9KSA9PiAke2YoeS52YWx1ZSl9YDtjYXNlXFxcImxpc3RcXFwiOnJldHVybmBbJHt5LnZhbHVlcy5tYXAoZikuam9pbihcXFwiLCBcXFwiKX1dYDtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybmAhJHtmKHkuY2hpbGQpfWA7Y2FzZVxcXCJvYmplY3RcXFwiOnJldHVybmB7JHtPYmplY3QuZW50cmllcyh5LnZhbHVlcykubWFwKChbTyx2XSk9PmAke099OiAke2Yodil9YCkuam9pbihcXFwiLCBcXFwiKX19YDtjYXNlXFxcInZhcmlhYmxlXFxcIjpyZXR1cm4geS5uYW1lO2Nhc2VcXFwibGl0ZXJhbFxcXCI6bGV0IFM9dHQud3JhcFZhbHVlKHkudmFsdWUpO2lmKCFTKXJldHVyblxcXCJudWxsXFxcIjtzd2l0Y2goUy50eXBlKXtjYXNlXFxcInN0cmluZ1xcXCI6cmV0dXJuYFxcXCIke1MudmFsdWV9XFxcImA7ZGVmYXVsdDpyZXR1cm4gdHQudG9TdHJpbmcoUy52YWx1ZSl9fX1nLnRvU3RyaW5nPWYsZy5OVUxMPWcubGl0ZXJhbChudWxsKX0pKGFlfHwoYWU9e30pKTt2YXIgSj1iLmNyZWF0ZUxhbmd1YWdlKHtudW1iZXI6bj0+Yi5yZWdleHAoLy0/WzAtOV0rKFxcXFwuWzAtOV0rKT8vKS5tYXAoZT0+TnVtYmVyLnBhcnNlRmxvYXQoZSkpLmRlc2MoXFxcIm51bWJlclxcXCIpLHN0cmluZzpuPT5iLnN0cmluZygnXFxcIicpLnRoZW4oYi5hbHQobi5lc2NhcGVDaGFyYWN0ZXIsYi5ub25lT2YoJ1xcXCJcXFxcXFxcXCcpKS5hdExlYXN0KDApLm1hcChlPT5lLmpvaW4oXFxcIlxcXCIpKSkuc2tpcChiLnN0cmluZygnXFxcIicpKS5kZXNjKFxcXCJzdHJpbmdcXFwiKSxlc2NhcGVDaGFyYWN0ZXI6bj0+Yi5zdHJpbmcoXFxcIlxcXFxcXFxcXFxcIikudGhlbihiLmFueSkubWFwKGU9PmU9PT0nXFxcIic/J1xcXCInOmU9PT1cXFwiXFxcXFxcXFxcXFwiP1xcXCJcXFxcXFxcXFxcXCI6XFxcIlxcXFxcXFxcXFxcIitlKSxib29sOm49PmIucmVnZXhwKC90cnVlfGZhbHNlfFRydWV8RmFsc2UvKS5tYXAoZT0+ZS50b0xvd2VyQ2FzZSgpPT1cXFwidHJ1ZVxcXCIpLmRlc2MoXFxcImJvb2xlYW5cXFwiKSx0YWc6bj0+Yi5zZXFNYXAoYi5zdHJpbmcoXFxcIiNcXFwiKSxiLmFsdChiLnJlZ2V4cCgvW15cXFxcdTIwMDAtXFxcXHUyMDZGXFxcXHUyRTAwLVxcXFx1MkU3RichXFxcIiMkJSYoKSorLC46Ozw9Pj9AXmB7fH1+XFxcXFtcXFxcXVxcXFxcXFxcXFxcXHNdLykuZGVzYyhcXFwidGV4dFxcXCIpKS5tYW55KCksKGUsdCk9PmUrdC5qb2luKFxcXCJcXFwiKSkuZGVzYyhcXFwidGFnXFxcIiksaWRlbnRpZmllcjpuPT5iLnNlcU1hcChiLmFsdChiLnJlZ2V4cCgvW1xcXFxwe0xldHRlcn0kXS91KSxiLnJlZ2V4cChCdSkuZGVzYyhcXFwidGV4dFxcXCIpKSxiLmFsdChiLnJlZ2V4cCgvWzAtOVxcXFxwe0xldHRlcn0kXy1dL3UpLGIucmVnZXhwKEJ1KS5kZXNjKFxcXCJ0ZXh0XFxcIikpLm1hbnkoKSwoZSx0KT0+ZSt0LmpvaW4oXFxcIlxcXCIpKS5kZXNjKFxcXCJ2YXJpYWJsZVxcXCIpLGxpbms6bj0+Yi5yZWdleHAoL1xcXFxbXFxcXFsoW15cXFxcW1xcXFxdXSo/KVxcXFxdXFxcXF0vdSwxKS5tYXAoZT0+ZWUucGFyc2VJbm5lcihlKSkuZGVzYyhcXFwiZmlsZSBsaW5rXFxcIiksZW1iZWRMaW5rOm49PmIuc2VxTWFwKGIuc3RyaW5nKFxcXCIhXFxcIikuYXRNb3N0KDEpLG4ubGluaywoZSx0KT0+KGUubGVuZ3RoPjAmJih0LmVtYmVkPSEwKSx0KSkuZGVzYyhcXFwiZmlsZSBsaW5rXFxcIiksYmluYXJ5UGx1c01pbnVzOm49PmIucmVnZXhwKC9cXFxcK3wtLykubWFwKGU9PmUpLmRlc2MoXFxcIicrJyBvciAnLSdcXFwiKSxiaW5hcnlNdWxEaXY6bj0+Yi5yZWdleHAoL1xcXFwqfFxcXFwvfCUvKS5tYXAoZT0+ZSkuZGVzYyhcXFwiJyonIG9yICcvJyBvciAnJSdcXFwiKSxiaW5hcnlDb21wYXJlT3A6bj0+Yi5yZWdleHAoLz49fDw9fCE9fD58PHw9LykubWFwKGU9PmUpLmRlc2MoXFxcIic+PScgb3IgJzw9JyBvciAnIT0nIG9yICc9JyBvciAnPicgb3IgJzwnXFxcIiksYmluYXJ5QW5kT3A6bj0+Yi5yZWdleHAoL2FuZHwmL2kpLm1hcChlPT5cXFwiJlxcXCIpLmRlc2MoXFxcIidhbmQnXFxcIiksYmluYXJ5T3JPcDpuPT5iLnJlZ2V4cCgvb3J8XFxcXHwvaSkubWFwKGU9PlxcXCJ8XFxcIikuZGVzYyhcXFwiJ29yJ1xcXCIpLHJvb3REYXRlOm49PmIuc2VxTWFwKGIucmVnZXhwKC9cXFxcZHs0fS8pLGIuc3RyaW5nKFxcXCItXFxcIiksYi5yZWdleHAoL1xcXFxkezJ9LyksKGUsdCxyKT0+Qi5mcm9tT2JqZWN0KHt5ZWFyOk51bWJlci5wYXJzZUludChlKSxtb250aDpOdW1iZXIucGFyc2VJbnQocil9KSkuZGVzYyhcXFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXFxcIiksZGF0ZVNob3J0aGFuZDpuPT5iLmFsdCguLi5PYmplY3Qua2V5cygkdSkuc29ydCgoZSx0KT0+dC5sZW5ndGgtZS5sZW5ndGgpLm1hcChiLnN0cmluZykpLGRhdGU6bj0+VGYobi5yb290RGF0ZSxlPT5iLnNlcU1hcChiLnN0cmluZyhcXFwiLVxcXCIpLGIucmVnZXhwKC9cXFxcZHsyfS8pLCh0LHIpPT5lLnNldCh7ZGF5Ok51bWJlci5wYXJzZUludChyKX0pKSxlPT5iLnNlcU1hcChiLnN0cmluZyhcXFwiVFxcXCIpLGIucmVnZXhwKC9cXFxcZHsyfS8pLCh0LHIpPT5lLnNldCh7aG91cjpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Yi5zZXFNYXAoYi5zdHJpbmcoXFxcIjpcXFwiKSxiLnJlZ2V4cCgvXFxcXGR7Mn0vKSwodCxyKT0+ZS5zZXQoe21pbnV0ZTpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Yi5zZXFNYXAoYi5zdHJpbmcoXFxcIjpcXFwiKSxiLnJlZ2V4cCgvXFxcXGR7Mn0vKSwodCxyKT0+ZS5zZXQoe3NlY29uZDpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Yi5hbHQoYi5zZXFNYXAoYi5zdHJpbmcoXFxcIi5cXFwiKSxiLnJlZ2V4cCgvXFxcXGR7M30vKSwodCxyKT0+ZS5zZXQoe21pbGxpc2Vjb25kOk51bWJlci5wYXJzZUludChyKX0pKSxiLnN1Y2NlZWQoZSkpLGU9PmIuYWx0KGIuc2VxTWFwKGIuc3RyaW5nKFxcXCIrXFxcIikub3IoYi5zdHJpbmcoXFxcIi1cXFwiKSksYi5yZWdleHAoL1xcXFxkezEsMn0oOlxcXFxkezJ9KT8vKSwodCxyKT0+ZS5zZXRab25lKFxcXCJVVENcXFwiK3Qrcix7a2VlcExvY2FsVGltZTohMH0pKSxiLnNlcU1hcChiLnN0cmluZyhcXFwiWlxcXCIpLCgpPT5lLnNldFpvbmUoXFxcInV0Y1xcXCIse2tlZXBMb2NhbFRpbWU6ITB9KSksYi5zZXFNYXAoYi5zdHJpbmcoXFxcIltcXFwiKSxiLnJlZ2V4cCgvWzAtOUEtWmEteistXFxcXC9dKy91KSxiLnN0cmluZyhcXFwiXVxcXCIpLCh0LHIscyk9PmUuc2V0Wm9uZShyLHtrZWVwTG9jYWxUaW1lOiEwfSkpKSkuYXNzZXJ0KGU9PmUuaXNWYWxpZCxcXFwidmFsaWQgZGF0ZVxcXCIpLmRlc2MoXFxcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXVxcXCIpLGRhdGVQbHVzOm49PmIuYWx0KG4uZGF0ZVNob3J0aGFuZC5tYXAoZT0+JHVbZV0oKSksbi5kYXRlKS5kZXNjKFxcXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10gb3IgaW4gc2hvcnRoYW5kXFxcIiksZHVyYXRpb25UeXBlOm49PmIuYWx0KC4uLk9iamVjdC5rZXlzKFB1KS5zb3J0KChlLHQpPT50Lmxlbmd0aC1lLmxlbmd0aCkubWFwKGIuc3RyaW5nKSksZHVyYXRpb246bj0+Yi5zZXFNYXAobi5udW1iZXIsYi5vcHRXaGl0ZXNwYWNlLG4uZHVyYXRpb25UeXBlLChlLHQscik9PlB1W3JdLm1hcFVuaXRzKHM9PnMqZSkpLnNlcEJ5MShiLnN0cmluZyhcXFwiLFxcXCIpLnRyaW0oYi5vcHRXaGl0ZXNwYWNlKS5vcihiLm9wdFdoaXRlc3BhY2UpKS5tYXAoZT0+ZS5yZWR1Y2UoKHQscik9PnQucGx1cyhyKSkpLmRlc2MoXFxcImR1cmF0aW9uIGxpa2UgNGhyMm1pblxcXCIpLHJhd051bGw6bj0+Yi5zdHJpbmcoXFxcIm51bGxcXFwiKSxhdG9tSW5saW5lRmllbGQ6bj0+Yi5hbHQobi5kYXRlLG4uZHVyYXRpb24ubWFwKGU9Pk5pKGUpKSxuLnN0cmluZyxuLnRhZyxuLmVtYmVkTGluayxuLmJvb2wsbi5udW1iZXIsbi5yYXdOdWxsKSxpbmxpbmVGaWVsZExpc3Q6bj0+bi5hdG9tSW5saW5lRmllbGQuc2VwQnkoYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSkubG9va2FoZWFkKG4uYXRvbUlubGluZUZpZWxkKSksaW5saW5lRmllbGQ6bj0+Yi5hbHQoYi5zZXFNYXAobi5hdG9tSW5saW5lRmllbGQsYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSksbi5pbmxpbmVGaWVsZExpc3QsKGUsdCxyKT0+W2VdLmNvbmNhdChyKSksbi5hdG9tSW5saW5lRmllbGQpfSksQnU9bmV3IFJlZ0V4cCh3bigpLFxcXCJcXFwiKSxQdT17eWVhcjpBLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5ZWFyczpBLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5cjpBLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5cnM6QS5mcm9tT2JqZWN0KHt5ZWFyczoxfSksbW9udGg6QS5mcm9tT2JqZWN0KHttb250aHM6MX0pLG1vbnRoczpBLmZyb21PYmplY3Qoe21vbnRoczoxfSksbW86QS5mcm9tT2JqZWN0KHttb250aHM6MX0pLG1vczpBLmZyb21PYmplY3Qoe21vbnRoczoxfSksd2VlazpBLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3ZWVrczpBLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3azpBLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3a3M6QS5mcm9tT2JqZWN0KHt3ZWVrczoxfSksdzpBLmZyb21PYmplY3Qoe3dlZWtzOjF9KSxkYXk6QS5mcm9tT2JqZWN0KHtkYXlzOjF9KSxkYXlzOkEuZnJvbU9iamVjdCh7ZGF5czoxfSksZDpBLmZyb21PYmplY3Qoe2RheXM6MX0pLGhvdXI6QS5mcm9tT2JqZWN0KHtob3VyczoxfSksaG91cnM6QS5mcm9tT2JqZWN0KHtob3VyczoxfSksaHI6QS5mcm9tT2JqZWN0KHtob3VyczoxfSksaHJzOkEuZnJvbU9iamVjdCh7aG91cnM6MX0pLGg6QS5mcm9tT2JqZWN0KHtob3VyczoxfSksbWludXRlOkEuZnJvbU9iamVjdCh7bWludXRlczoxfSksbWludXRlczpBLmZyb21PYmplY3Qoe21pbnV0ZXM6MX0pLG1pbjpBLmZyb21PYmplY3Qoe21pbnV0ZXM6MX0pLG1pbnM6QS5mcm9tT2JqZWN0KHttaW51dGVzOjF9KSxtOkEuZnJvbU9iamVjdCh7bWludXRlczoxfSksc2Vjb25kOkEuZnJvbU9iamVjdCh7c2Vjb25kczoxfSksc2Vjb25kczpBLmZyb21PYmplY3Qoe3NlY29uZHM6MX0pLHNlYzpBLmZyb21PYmplY3Qoe3NlY29uZHM6MX0pLHNlY3M6QS5mcm9tT2JqZWN0KHtzZWNvbmRzOjF9KSxzOkEuZnJvbU9iamVjdCh7c2Vjb25kczoxfSl9LCR1PXtub3c6KCk9PkIubG9jYWwoKSx0b2RheTooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcImRheVxcXCIpLHllc3RlcmRheTooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcImRheVxcXCIpLm1pbnVzKEEuZnJvbU9iamVjdCh7ZGF5czoxfSkpLHRvbW9ycm93OigpPT5CLmxvY2FsKCkuc3RhcnRPZihcXFwiZGF5XFxcIikucGx1cyhBLmZyb21PYmplY3Qoe2RheXM6MX0pKSxzb3c6KCk9PkIubG9jYWwoKS5zdGFydE9mKFxcXCJ3ZWVrXFxcIiksXFxcInN0YXJ0LW9mLXdlZWtcXFwiOigpPT5CLmxvY2FsKCkuc3RhcnRPZihcXFwid2Vla1xcXCIpLGVvdzooKT0+Qi5sb2NhbCgpLmVuZE9mKFxcXCJ3ZWVrXFxcIiksXFxcImVuZC1vZi13ZWVrXFxcIjooKT0+Qi5sb2NhbCgpLmVuZE9mKFxcXCJ3ZWVrXFxcIiksc295OigpPT5CLmxvY2FsKCkuc3RhcnRPZihcXFwieWVhclxcXCIpLFxcXCJzdGFydC1vZi15ZWFyXFxcIjooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcInllYXJcXFwiKSxlb3k6KCk9PkIubG9jYWwoKS5lbmRPZihcXFwieWVhclxcXCIpLFxcXCJlbmQtb2YteWVhclxcXCI6KCk9PkIubG9jYWwoKS5lbmRPZihcXFwieWVhclxcXCIpLHNvbTooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcIm1vbnRoXFxcIiksXFxcInN0YXJ0LW9mLW1vbnRoXFxcIjooKT0+Qi5sb2NhbCgpLnN0YXJ0T2YoXFxcIm1vbnRoXFxcIiksZW9tOigpPT5CLmxvY2FsKCkuZW5kT2YoXFxcIm1vbnRoXFxcIiksXFxcImVuZC1vZi1tb250aFxcXCI6KCk9PkIubG9jYWwoKS5lbmRPZihcXFwibW9udGhcXFwiKX0sUnU9Yi5jcmVhdGVMYW5ndWFnZSh7dmFyaWFibGU6bj0+Si5pZGVudGlmaWVyLm1hcChhZS52YXJpYWJsZSkuZGVzYyhcXFwidmFyaWFibGVcXFwiKSxudW1iZXI6bj0+Si5udW1iZXIubWFwKGFlLmxpdGVyYWwpLmRlc2MoXFxcIm51bWJlclxcXCIpLHN0cmluZzpuPT5KLnN0cmluZy5tYXAoYWUubGl0ZXJhbCkuZGVzYyhcXFwic3RyaW5nXFxcIiksYm9vbDpuPT5KLmJvb2wubWFwKGFlLmxpdGVyYWwpLmRlc2MoXFxcImJvb2xlYW5cXFwiKSxkYXRlOm49PlN0KFxcXCJkYXRlXFxcIixKLmRhdGVQbHVzKS5tYXAoKFtlLHRdKT0+YWUubGl0ZXJhbCh0KSkuZGVzYyhcXFwiZGF0ZVxcXCIpLGR1cmF0aW9uOm49PlN0KFxcXCJkdXJcXFwiLEouZHVyYXRpb24pLm1hcCgoW2UsdF0pPT5hZS5saXRlcmFsKHQpKS5kZXNjKFxcXCJkdXJhdGlvblxcXCIpLG51bGw6bj0+Si5yYXdOdWxsLm1hcChlPT5hZS5OVUxMKSxsaW5rOm49PkoubGluay5tYXAoYWUubGl0ZXJhbCksbGlzdDpuPT5uLmV4cHJlc3Npb24uc2VwQnkoYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSkpLndyYXAoYi5zdHJpbmcoXFxcIltcXFwiKS5za2lwKGIub3B0V2hpdGVzcGFjZSksYi5vcHRXaGl0ZXNwYWNlLnRoZW4oYi5zdHJpbmcoXFxcIl1cXFwiKSkpLm1hcChlPT5hZS5saXN0KGUpKS5kZXNjKFxcXCJsaXN0XFxcIiksb2JqZWN0Om49PmIuc2VxTWFwKEouaWRlbnRpZmllci5vcihKLnN0cmluZyksYi5zdHJpbmcoXFxcIjpcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSksbi5leHByZXNzaW9uLChlLHQscik9Pih7bmFtZTplLHZhbHVlOnJ9KSkuc2VwQnkoYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSkpLndyYXAoYi5zdHJpbmcoXFxcIntcXFwiKS5za2lwKGIub3B0V2hpdGVzcGFjZSksYi5vcHRXaGl0ZXNwYWNlLnRoZW4oYi5zdHJpbmcoXFxcIn1cXFwiKSkpLm1hcChlPT57bGV0IHQ9e307Zm9yKGxldCByIG9mIGUpdFtyLm5hbWVdPXIudmFsdWU7cmV0dXJuIGFlLm9iamVjdCh0KX0pLmRlc2MoXFxcIm9iamVjdCAoJ3sgYTogMSwgYjogMiB9JylcXFwiKSxhdG9tOm49PmIuYWx0KEouZW1iZWRMaW5rLm1hcChlPT5hZS5saXRlcmFsKGUpKSxuLm5lZ2F0ZWQsbi5saW5rLG4ubGlzdCxuLm9iamVjdCxuLmxhbWJkYSxuLnBhcmVucyxuLmJvb2wsbi5udW1iZXIsbi5zdHJpbmcsbi5kYXRlLG4uZHVyYXRpb24sbi5udWxsLG4udmFyaWFibGUpLGluZGV4Om49PmIuc2VxTWFwKG4uYXRvbSxiLmFsdChuLmRvdFBvc3RmaXgsbi5pbmRleFBvc3RmaXgsbi5mdW5jdGlvblBvc3RmaXgpLm1hbnkoKSwoZSx0KT0+e2xldCByPWU7Zm9yKGxldCBzIG9mIHQpc3dpdGNoKHMudHlwZSl7Y2FzZVxcXCJkb3RcXFwiOnI9YWUuaW5kZXgocixhZS5saXRlcmFsKHMuZXhwcikpO2JyZWFrO2Nhc2VcXFwiaW5kZXhcXFwiOnI9YWUuaW5kZXgocixzLmV4cHIpO2JyZWFrO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOnI9YWUuZnVuYyhyLHMuZXhwcnMpO2JyZWFrfXJldHVybiByfSksbmVnYXRlZDpuPT5iLnNlcU1hcChiLnN0cmluZyhcXFwiIVxcXCIpLG4uaW5kZXgsKGUsdCk9PmFlLm5lZ2F0ZSh0KSkuZGVzYyhcXFwibmVnYXRlZCBmaWVsZFxcXCIpLHBhcmVuczpuPT5uLmV4cHJlc3Npb24udHJpbShiLm9wdFdoaXRlc3BhY2UpLndyYXAoYi5zdHJpbmcoXFxcIihcXFwiKSxiLnN0cmluZyhcXFwiKVxcXCIpKSxsYW1iZGE6bj0+Yi5zZXFNYXAoSi5pZGVudGlmaWVyLnNlcEJ5KGIuc3RyaW5nKFxcXCIsXFxcIikudHJpbShiLm9wdFdoaXRlc3BhY2UpKS53cmFwKGIuc3RyaW5nKFxcXCIoXFxcIikudHJpbShiLm9wdFdoaXRlc3BhY2UpLGIuc3RyaW5nKFxcXCIpXFxcIikudHJpbShiLm9wdFdoaXRlc3BhY2UpKSxiLnN0cmluZyhcXFwiPT5cXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSksbi5leHByZXNzaW9uLChlLHQscik9Pih7dHlwZTpcXFwibGFtYmRhXFxcIixhcmd1bWVudHM6ZSx2YWx1ZTpyfSkpLGRvdFBvc3RmaXg6bj0+Yi5zZXFNYXAoYi5zdHJpbmcoXFxcIi5cXFwiKSxKLmlkZW50aWZpZXIsKGUsdCk9Pih7dHlwZTpcXFwiZG90XFxcIixleHByOnR9KSksaW5kZXhQb3N0Zml4Om49PmIuc2VxTWFwKGIuc3RyaW5nKFxcXCJbXFxcIiksYi5vcHRXaGl0ZXNwYWNlLG4uZXhwcmVzc2lvbixiLm9wdFdoaXRlc3BhY2UsYi5zdHJpbmcoXFxcIl1cXFwiKSwoZSx0LHIscyxpKT0+KHt0eXBlOlxcXCJpbmRleFxcXCIsZXhwcjpyfSkpLGZ1bmN0aW9uUG9zdGZpeDpuPT5iLnNlcU1hcChiLnN0cmluZyhcXFwiKFxcXCIpLGIub3B0V2hpdGVzcGFjZSxuLmV4cHJlc3Npb24uc2VwQnkoYi5zdHJpbmcoXFxcIixcXFwiKS50cmltKGIub3B0V2hpdGVzcGFjZSkpLGIub3B0V2hpdGVzcGFjZSxiLnN0cmluZyhcXFwiKVxcXCIpLChlLHQscixzLGkpPT4oe3R5cGU6XFxcImZ1bmN0aW9uXFxcIixleHByczpyfSkpLGJpbmFyeU11bERpdjpuPT5BbihuLmluZGV4LEouYmluYXJ5TXVsRGl2LGFlLmJpbmFyeU9wKSxiaW5hcnlQbHVzTWludXM6bj0+QW4obi5iaW5hcnlNdWxEaXYsSi5iaW5hcnlQbHVzTWludXMsYWUuYmluYXJ5T3ApLGJpbmFyeUNvbXBhcmU6bj0+QW4obi5iaW5hcnlQbHVzTWludXMsSi5iaW5hcnlDb21wYXJlT3AsYWUuYmluYXJ5T3ApLGJpbmFyeUJvb2xlYW46bj0+QW4obi5iaW5hcnlDb21wYXJlLEouYmluYXJ5QW5kT3Aub3IoSi5iaW5hcnlPck9wKSxhZS5iaW5hcnlPcCksYmluYXJ5T3A6bj0+bi5iaW5hcnlCb29sZWFuLGV4cHJlc3Npb246bj0+bi5iaW5hcnlPcH0pLEowPWIuY3JlYXRlTGFuZ3VhZ2Uoe3F1ZXJ5VGFnOm49PkoudGFnLm1hcChlPT4oe3R5cGU6XFxcInRhZ2dlZFxcXCIsdmFsdWU6ZX0pKSxxdWVyeUlkOm49PlN0KFxcXCJpZFxcXCIsSi5zdHJpbmcpLm1hcCgoW2UsdF0pPT4oe3R5cGU6XFxcImlkXFxcIix2YWx1ZTp0fSkpLHF1ZXJ5VHlwZTpuPT5iLnN0cmluZyhcXFwiQFxcXCIpLnRoZW4oSi5pZGVudGlmaWVyKS5tYXAoZT0+KHt0eXBlOlxcXCJ0eXBlZFxcXCIsdmFsdWU6ZX0pKSxxdWVyeVBhdGg6bj0+U3QoYi5yZWdleHAoL2U/cGF0aC9pKS5kZXNjKFxcXCJbZV1wYXRoXFxcIiksSi5zdHJpbmcpLm1hcCgoW2UsdF0pPT4oe3R5cGU6XFxcInBhdGhcXFwiLHZhbHVlOnQsZXhhY3Q6ZS50b0xvd2VyQ2FzZSgpPT09XFxcImVwYXRoXFxcIn0pKSxxdWVyeVBhcmVudE9mOm49PlN0KGIucmVnZXhwKC9wYXJlbnRvZnxzdXBlcnRyZWUvaSkuZGVzYyhcXFwicGFyZW50b2ZcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJwYXJlbnQtb2ZcXFwiLGNoaWxkcmVuOnQsaW5jbHVzaXZlOmUudG9Mb3dlckNhc2UoKT09PVxcXCJzdXBlcnRyZWVcXFwifSkpLHF1ZXJ5Q2hpbGRPZjpuPT5TdChiLnJlZ2V4cCgvY2hpbGRvZnxzdWJ0cmVlL2kpLmRlc2MoXFxcImNoaWxkb2ZcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJjaGlsZC1vZlxcXCIscGFyZW50czp0LGluY2x1c2l2ZTplLnRvTG93ZXJDYXNlKCk9PT1cXFwic3VidHJlZVxcXCJ9KSkscXVlcnlTaW1wbGVMaW5rZWQ6bj0+Si5saW5rLm1hcChlPT4oe3R5cGU6XFxcImxpbmtlZFxcXCIsc291cmNlOnt0eXBlOlxcXCJsaW5rXFxcIix2YWx1ZTplfSxkaXJlY3Rpb246XFxcImluY29taW5nXFxcIn0pKSxxdWVyeUxpbmtlZDpuPT5TdChiLnJlZ2V4cCgvbGlua3N0b3xsaW5rZWRmcm9tfGNvbm5lY3RlZC9pKS5kZXNjKFxcXCJjb25uZWN0ZWRcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJsaW5rZWRcXFwiLHNvdXJjZTp0LGRpcmVjdGlvbjplLnRvTG93ZXJDYXNlKCk9PVxcXCJsaW5rc3RvXFxcIj9cXFwiaW5jb21pbmdcXFwiOmUudG9Mb3dlckNhc2UoKT09XFxcImxpbmtlZGZyb21cXFwiP1xcXCJvdXRnb2luZ1xcXCI6XFxcImJvdGhcXFwifSkpLHF1ZXJ5RXhpc3RzOm49PlN0KGIucmVnZXhwKC9leGlzdHMvaSkuZGVzYyhcXFwiZXhpc3RzXFxcIiksSi5pZGVudGlmaWVyLm9yKEouc3RyaW5nKSkubWFwKChbZSx0XSk9Pih7dHlwZTpcXFwiZmllbGRcXFwiLHZhbHVlOnR9KSkscXVlcnlRdW90ZWRFeHByZXNzaW9uOm49PlN0KGIucmVnZXhwKC9leHByL2kpLmRlc2MoXFxcImV4cHJcXFwiKSxSdS5leHByZXNzaW9uKS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJleHByZXNzaW9uXFxcIixleHByZXNzaW9uOnR9KSkscXVlcnlSYXdFeHByZXNzaW9uOm49PlJ1LmJpbmFyeUNvbXBhcmUubWFwKGU9Pih7dHlwZTpcXFwiZXhwcmVzc2lvblxcXCIsZXhwcmVzc2lvbjplfSkpLHF1ZXJ5UGFyZW5zOm49Pm4ucXVlcnkudHJpbShiLm9wdFdoaXRlc3BhY2UpLndyYXAoYi5zdHJpbmcoXFxcIihcXFwiKSxiLnN0cmluZyhcXFwiKVxcXCIpKSxxdWVyeU5lZ2F0ZTpuPT5iLnN0cmluZyhcXFwiIVxcXCIpLnNraXAoYi5vcHRXaGl0ZXNwYWNlKS50aGVuKG4ucXVlcnlBdG9tKS5tYXAoZT0+KHt0eXBlOlxcXCJub3RcXFwiLGVsZW1lbnQ6ZX0pKSxxdWVyeUF0b206bj0+Yi5hbHQobi5xdWVyeVBhcmVucyxuLnF1ZXJ5TmVnYXRlLG4ucXVlcnlTaW1wbGVMaW5rZWQsbi5xdWVyeVRhZyxuLnF1ZXJ5VHlwZSxuLnF1ZXJ5SWQsbi5xdWVyeUV4aXN0cyxuLnF1ZXJ5Q2hpbGRPZixuLnF1ZXJ5UGFyZW50T2Ysbi5xdWVyeUxpbmtlZCxuLnF1ZXJ5UGF0aCxuLnF1ZXJ5UXVvdGVkRXhwcmVzc2lvbixuLnF1ZXJ5UmF3RXhwcmVzc2lvbikscXVlcnlBbmRzOm49PkFuKG4ucXVlcnlBdG9tLEouYmluYXJ5QW5kT3AsKGUsdCxyKT0+KHt0eXBlOlxcXCJhbmRcXFwiLGVsZW1lbnRzOltlLHJdfSkpLHF1ZXJ5T3JzOm49PkFuKG4ucXVlcnlBbmRzLEouYmluYXJ5T3JPcCwoZSx0LHIpPT4oe3R5cGU6XFxcIm9yXFxcIixlbGVtZW50czpbZSxyXX0pKSxxdWVyeTpuPT5uLnF1ZXJ5T3JzLnRyaW0oYi5vcHRXaGl0ZXNwYWNlKX0pO2Z1bmN0aW9uIEFuKG4sZSx0KXtyZXR1cm4gYi5zZXFNYXAobixiLnNlcShiLm9wdFdoaXRlc3BhY2UsZSxiLm9wdFdoaXRlc3BhY2UsbikubWFueSgpLChyLHMpPT57aWYocy5sZW5ndGg9PTApcmV0dXJuIHI7bGV0IGk9dChyLHNbMF1bMV0sc1swXVszXSk7Zm9yKGxldCBvPTE7bzxzLmxlbmd0aDtvKyspaT10KGksc1tvXVsxXSxzW29dWzNdKTtyZXR1cm4gaX0pfWZ1bmN0aW9uIFN0KG4sZSl7bGV0IHQ9dHlwZW9mIG49PVxcXCJzdHJpbmdcXFwiP2Iuc3RyaW5nKG4pOm47cmV0dXJuIGIuc2VxTWFwKHQuc2tpcChiLm9wdFdoaXRlc3BhY2UpLGUudHJpbShiLm9wdFdoaXRlc3BhY2UpLndyYXAoYi5zdHJpbmcoXFxcIihcXFwiKSxiLnN0cmluZyhcXFwiKVxcXCIpKSwocixzKT0+W3Isc10pfWZ1bmN0aW9uIFRmKG4sLi4uZSl7cmV0dXJuIGIuY3VzdG9tKCh0LHIpPT4ocyxpKT0+e2xldCBvPW4uXyhzLGkpO2lmKCFvLnN0YXR1cylyZXR1cm4gbztmb3IobGV0IGEgb2YgZSl7bGV0IHU9YShvLnZhbHVlKS5fKHMsby5pbmRleCk7aWYoIXUuc3RhdHVzKXJldHVybiBvO289dX1yZXR1cm4gb30pfXZhciBlbj1xcihucygpKTtmdW5jdGlvbiBYdChuLGUpe2xldCB0PXt9O2ZvcihsZXRbcixzXW9mIE9iamVjdC5lbnRyaWVzKG4pKXRbcl09ZShzKTtyZXR1cm4gdH12YXIgTW47KHI9PntyLk5PT1BfTk9STUFMSVpFUj1zPT5zO2Z1bmN0aW9uIGUocyl7bGV0IGk9dHQud3JhcFZhbHVlKHMpO2lmKCFpKXJldHVybiBudWxsO3N3aXRjaChpPT1udWxsP3ZvaWQgMDppLnR5cGUpe2Nhc2VcXFwiYXJyYXlcXFwiOnJldHVybiBpLnZhbHVlLm1hcChyLmpzb24pO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gWHQoaS52YWx1ZSxyLmpzb24pO2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJueyRfdHlwZTpcXFwiZGF0ZVxcXCIsdmFsdWU6aS52YWx1ZS50b0lTTyh7ZXh0ZW5kZWRab25lOiEwLGluY2x1ZGVPZmZzZXQ6ITB9KX07Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm57JF90eXBlOlxcXCJsaW5rXFxcIix2YWx1ZTppLnZhbHVlLnRvT2JqZWN0KCl9O2Nhc2VcXFwiZHVyYXRpb25cXFwiOnJldHVybnskX3R5cGU6XFxcImR1cmF0aW9uXFxcIix2YWx1ZTppLnZhbHVlLnRvSVNPKCl9O2Nhc2VcXFwiYm9vbGVhblxcXCI6Y2FzZVxcXCJudW1iZXJcXFwiOmNhc2VcXFwic3RyaW5nXFxcIjpyZXR1cm4gaS52YWx1ZTtjYXNlXFxcImZ1bmN0aW9uXFxcIjpjYXNlXFxcIm51bGxcXFwiOnJldHVybiBudWxsfX1yLmpzb249ZTtmdW5jdGlvbiB0KHMsaT1yLk5PT1BfTk9STUFMSVpFUil7aWYocz09bnVsbClyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KHMpKXJldHVybiBpKHMubWFwKG89PnIudmFsdWUobyxpKSkpO2lmKHR5cGVvZiBzPT1cXFwib2JqZWN0XFxcIil7aWYoIShcXFwiJF90eXBlXFxcImluIHMpKXJldHVybiBYdChzLGE9PnIudmFsdWUoYSxpKSk7bGV0IG89cy4kX3R5cGU7c3dpdGNoKG8pe2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJuIGkoQi5mcm9tSVNPKHMudmFsdWUpKTtjYXNlXFxcImR1cmF0aW9uXFxcIjpyZXR1cm4gaShBLmZyb21JU08ocy52YWx1ZSkpO2Nhc2VcXFwibGlua1xcXCI6cmV0dXJuIGkoZWUuZnJvbU9iamVjdChzLnZhbHVlKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBzZXJpYWxpemVkIHR5cGUgJyR7b30nIWApfX1yZXR1cm4gaShzKX1yLnZhbHVlPXR9KShNbnx8KE1uPXt9KSk7ZnVuY3Rpb24ganUobil7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sbix7dmFsdWU6TW4uanNvbihuLnZhbHVlKX0pfWZ1bmN0aW9uIEJzKG4sZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5tYXAodD0+QnModCxlKSk6e2tleTpuLmtleSxyYXc6bi52YWx1ZSx2YWx1ZTpDZihuLnZhbHVlKSxwb3NpdGlvbjp7bGluZTplLHN0YXJ0Om4uc3RhcnQsc3RhcnRWYWx1ZTpuLnN0YXJ0VmFsdWUsZW5kOm4uZW5kfSx3cmFwcGluZzpuLndyYXBwaW5nfX12YXIgX3M9T2JqZWN0LmZyZWV6ZSh7XFxcIltcXFwiOlxcXCJdXFxcIixcXFwiKFxcXCI6XFxcIilcXFwifSk7ZnVuY3Rpb24gU2YobixlLHQscil7bGV0IHM9MCxpPSExO2ZvcihsZXQgbz1lO288bi5sZW5ndGg7bysrKXtsZXQgYT1uLmNoYXJBdChvKTtpZihhPT1cXFwiXFxcXFxcXFxcXFwiKXtpPSFpO2NvbnRpbnVlfWlmKGkpe2k9ITE7Y29udGludWV9aWYoYT09dD9zKys6YT09ciYmcy0tLHM8MClyZXR1cm57dmFsdWU6bi5zdWJzdHJpbmcoZSxvKS50cmltKCksZW5kSW5kZXg6bysxfTtpPSExfX1mdW5jdGlvbiBWdShuLGUpe2xldCB0PW4uaW5kZXhPZihcXFwiOjpcXFwiLGUpO2lmKCEodDwwKSlyZXR1cm57a2V5Om4uc3Vic3RyaW5nKGUsdCkudHJpbSgpLHZhbHVlSW5kZXg6dCsyfX1mdW5jdGlvbiBrZihuLGUpe2xldCB0PW4uY2hhckF0KGUpLHI9VnUobixlKzEpO2lmKHI9PT12b2lkIDApcmV0dXJuO2ZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhfcykuY29uY2F0KE9iamVjdC52YWx1ZXMoX3MpKSlpZihyLmtleS5pbmNsdWRlcyhpKSlyZXR1cm47bGV0IHM9U2YobixyLnZhbHVlSW5kZXgsdCxfc1t0XSk7aWYocyE9PXZvaWQgMClyZXR1cm57a2V5OnIua2V5LHZhbHVlOnMudmFsdWUsc3RhcnQ6ZSxzdGFydFZhbHVlOnIudmFsdWVJbmRleCxlbmQ6cy5lbmRJbmRleCx3cmFwcGluZzp0fX1mdW5jdGlvbiBDZihuKXtpZihuLnRyaW0oKT09XFxcIlxcXCIpcmV0dXJuIG51bGw7bGV0IGU9Si5pbmxpbmVGaWVsZC5wYXJzZShuKTtyZXR1cm4gZS5zdGF0dXM/ZS52YWx1ZTpufWZ1bmN0aW9uIHF1KG4sZT0hMSl7bGV0IHQ9W107Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKF9zKSl7bGV0IGk9bi5pbmRleE9mKHMpO2Zvcig7aT49MDspe2xldCBvPWtmKG4saSk7aWYoIW8pe2k9bi5pbmRleE9mKHMsaSsxKTtjb250aW51ZX10LnB1c2gobyksaT1uLmluZGV4T2YocyxvLmVuZCl9fWUmJih0PXQuY29uY2F0KF9mKG4pKSksdC5zb3J0KChzLGkpPT5zLnN0YXJ0LWkuc3RhcnQpO2xldCByPVtdO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKShzPT0wfHxyW3IubGVuZ3RoLTFdLmVuZDx0W3NdLnN0YXJ0KSYmci5wdXNoKHRbc10pO3JldHVybiByfXZhciB4Zj1lbi5hbHQoZW4ucmVnZXhwKG5ldyBSZWdFeHAod24oKSxcXFwidVxcXCIpKSxlbi5yZWdleHAoL1swLTlcXFxccHtMZXR0ZXJ9XFxcXHdcXFxcc18vLV0rL3UpKS5tYW55KCkubWFwKG49Pm4uam9pbihcXFwiXFxcIikpLE9mPWVuLnJlZ2V4cCgvW14wLTlcXFxcd1xcXFxwe0xldHRlcn1dKi91KS50aGVuKHhmKS5za2lwKGVuLnJlZ2V4cCgvW19cXFxcKn5gXSovdSkpO2Z1bmN0aW9uIFV1KG4pe2xldCBlPVZ1KG4sMCk7aWYoIWUpcmV0dXJuO2xldCB0PU9mLnBhcnNlKGUua2V5KTtpZih0LnN0YXR1cylyZXR1cm57a2V5OnQudmFsdWUsdmFsdWU6bi5zdWJzdHJpbmcoZS52YWx1ZUluZGV4KS50cmltKCksc3RhcnQ6MCxzdGFydFZhbHVlOmUudmFsdWVJbmRleCxlbmQ6bi5sZW5ndGh9fXZhciB2Zj0vXFxcXHV7Mjc5NX1cXFxccyooXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn0pL3UsSWY9Lyg/OlxcXFx1ezFGNEM1fXxcXFxcdXsxRjRDNn18XFxcXHV7MUY1RDN9XFxcXHV7RkUwRn0/KVxcXFxzKihcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfSkvdSxOZj0vXFxcXHV7MjcwNX1cXFxccyooXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn0pL3UsTGY9L1tcXFxcdXsyM0YzfVxcXFx1ezIzMUJ9XVxcXFxzKihcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfSkvdSxBZj0vXFxcXHV7MUY2RUJ9XFxcXHMqKFxcXFxkezR9LVxcXFxkezJ9LVxcXFxkezJ9KS91LE1mPVt7cmVnZXg6dmYsa2V5OlxcXCJjcmVhdGVkXFxcIn0se3JlZ2V4OkFmLGtleTpcXFwic3RhcnRcXFwifSx7cmVnZXg6TGYsa2V5OlxcXCJzY2hlZHVsZWRcXFwifSx7cmVnZXg6SWYsa2V5OlxcXCJkdWVcXFwifSx7cmVnZXg6TmYsa2V5OlxcXCJjb21wbGV0aW9uXFxcIn1dO2Z1bmN0aW9uIF9mKG4pe2xldCBlPVtdO2ZvcihsZXR7cmVnZXg6dCxrZXk6cn1vZiBNZil7bGV0IHM9dC5leGVjKG4pO3MmJmUucHVzaCh7a2V5OnIsdmFsdWU6c1sxXSxzdGFydDpzLmluZGV4LHN0YXJ0VmFsdWU6cy5pbmRleCsxLGVuZDpzLmluZGV4K3NbMF0ubGVuZ3RoLHdyYXBwaW5nOlxcXCJlbW9qaS1zaG9ydGhhbmRcXFwifSl9cmV0dXJuIGV9dmFyIFBzOyh0PT57ZnVuY3Rpb24gbihyKXtsZXQgcz10dC53cmFwVmFsdWUoZSk7aWYoIXMpcmV0dXJuIG51bGw7c3dpdGNoKHMudHlwZSl7Y2FzZVxcXCJzdHJpbmdcXFwiOmNhc2VcXFwiYm9vbGVhblxcXCI6Y2FzZVxcXCJudWxsXFxcIjpjYXNlXFxcIm51bWJlclxcXCI6cmV0dXJuIHMudmFsdWU7Y2FzZVxcXCJhcnJheVxcXCI6cmV0dXJuIHMudmFsdWUubWFwKG4pO2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJuIHMudmFsdWUudG9JU08oKTtjYXNlXFxcImR1cmF0aW9uXFxcIjpyZXR1cm4gcy52YWx1ZS50b0h1bWFuKCk7Y2FzZVxcXCJmdW5jdGlvblxcXCI6cmV0dXJuIG51bGw7Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm4gcy52YWx1ZS5tYXJrZG93bigpO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gWHQocy52YWx1ZSxuKX19dC55YW1sPW47ZnVuY3Rpb24gZShyKXtpZihyPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiByPT1cXFwib2JqZWN0XFxcIilpZihBcnJheS5pc0FycmF5KHIpKXtsZXQgcz1bXTtmb3IobGV0IGkgb2YgcilzLnB1c2goZShpKSk7cmV0dXJuIHN9ZWxzZXtpZihyIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gQi5mcm9tSlNEYXRlKHIpO3tsZXQgcz1yLGk9e307Zm9yKGxldCBvIGluIHMpaVtvXT1lKHNbb10pO3JldHVybiBpfX1lbHNle2lmKHR5cGVvZiByPT1cXFwibnVtYmVyXFxcIilyZXR1cm4gcjtpZih0eXBlb2Ygcj09XFxcImJvb2xlYW5cXFwiKXJldHVybiByO2lmKHR5cGVvZiByPT1cXFwic3RyaW5nXFxcIil7bGV0IHM9Si5kYXRlLnBhcnNlKHIpO2lmKHMuc3RhdHVzKXJldHVybiBzLnZhbHVlO2xldCBpPUouZHVyYXRpb24ucGFyc2Uocik7aWYoaS5zdGF0dXMpcmV0dXJuIGkudmFsdWU7bGV0IG89Si5saW5rLnBhcnNlKHIpO3JldHVybiBvLnN0YXR1cz9vLnZhbHVlOnJ9fXJldHVybiBudWxsfXQubGl0ZXJhbD1lfSkoUHN8fChQcz17fSkpO3ZhciBCZj0vYGBgeWFtbDpkYXRhL2ksUGY9L14oPzpgYGB8fn5+KSguKikkL2ltLCRmPS9eW1xcXFxzPl0qKFxcXFxkK1xcXFwufFxcXFxkK1xcXFwpfFxcXFwqfC18XFxcXCspXFxcXHMqKFxcXFxbLnswLDF9XFxcXF0pP1xcXFxzKiguKikkL211O2Z1bmN0aW9uIEt1KG4sZSx0LHIpe2xldHtsaW5lczpzLG1ldGFkYXRhOmksZnJvbnRtYXR0ZXI6byxzZWN0aW9uczphfT1tbyhuLGUsdCk7cmV0dXJuIG5ldyBsbyhuLHIscy5sZW5ndGgsaSxhLG8pLmJ1aWxkKCl9ZnVuY3Rpb24gbW8obixlLHQpe3ZhciBGLGcseSxTLE8sdixELHcsVCxDLE0sVixqLHoscmUsbGU7bGV0IHI9dC5mcm9udG1hdHRlcj9IdSh0LmZyb250bWF0dGVyKTp2b2lkIDAscz1lLnNwbGl0KC9cXFxcclxcXFxufFxcXFxyfFxcXFxuLyksaT1uZXcgamUsbz1bXSxhPShGPXQuaGVhZGluZ3MpIT1udWxsP0Y6W107YS5zb3J0KCh4LFIpPT54LnBvc2l0aW9uLnN0YXJ0LmxpbmUtUi5wb3NpdGlvbi5zdGFydC5saW5lKTtsZXQgdT1uZXcgJHMuZGVmYXVsdCh2b2lkIDAsKHgsUik9PngtUik7Zm9yKGxldCB4PTA7eDxhLmxlbmd0aDt4Kyspe2xldCBSPWFbeF0sUT1SLnBvc2l0aW9uLnN0YXJ0LmxpbmUsY2U9eD09YS5sZW5ndGgtMT9zLmxlbmd0aDphW3grMV0ucG9zaXRpb24uc3RhcnQubGluZSxFZT1uZXcgX3IoUSxjZSxSLmhlYWRpbmcsUi5sZXZlbCx4KzEpO3Uuc2V0KFEsRWUpfWlmKHUuc2l6ZT09MCl7aWYoIVd1KHMsMCxzLmxlbmd0aCkpe2xldCB4PW5ldyBfcigwLHMubGVuZ3RoLFRuKG4pLDEsMCk7dS5zZXQoMCx4KX19ZWxzZXtsZXQgeD0oZz11LmdldFBhaXJPck5leHRIaWdoZXIoMCkpPT1udWxsP3ZvaWQgMDpnWzFdO2lmKHguc3RhcnQ+MCYmIVd1KHMsMCx4LnN0YXJ0KSl7bGV0IFI9bmV3IF9yKDAseC5zdGFydCxUbihuKSwxLDApO3Uuc2V0KDAsUil9fWxldCBsPW5ldyAkcy5kZWZhdWx0KHZvaWQgMCwoeCxSKT0+eC1SKSxkPTE7Zm9yKGxldCB4IG9mIHQuc2VjdGlvbnN8fFtdKXtpZih4LnR5cGU9PT1cXFwiaGVhZGluZ1xcXCIpY29udGludWU7bGV0IFI9eC5wb3NpdGlvbi5zdGFydC5saW5lLFE9eC5wb3NpdGlvbi5lbmQubGluZSsxLGNlPXNbUl07aWYoeC50eXBlPT09XFxcImxpc3RcXFwiKWwuc2V0KFIsbmV3IGNvKFIsUSxkKysseC5pZCkpO2Vsc2UgaWYoeC50eXBlPT1cXFwiY29kZVxcXCImJkJmLnRlc3QoY2UpKXtsZXQgRWU9cy5zbGljZShSKzEsUS0xKS5qb2luKGBcXG5gKS5yZXBsYWNlKC9cXFxcdC9nbSxcXFwiICBcXFwiKSxWZT1IdShhbyhFZSkpO2wuc2V0KFIsbmV3IGZvKFIsUSxkKyssVmUseC5pZCkpfWVsc2UgaWYoeC50eXBlPT09XFxcImNvZGVcXFwiKXtsZXQgRWU9Y2UubWF0Y2goUGYpO2lmKCFFZSlsLnNldChSLG5ldyBScyhSLFEsZCsrLFtdLFxcXCJpbmRlbnRcXFwiLFIsUSx4LmlkKSk7ZWxzZXtsZXQgVmU9RWUubGVuZ3RoPjEmJkVlWzFdP0VlWzFdLnNwbGl0KFxcXCIsXFxcIik6W107bC5zZXQoUixuZXcgUnMoUixRLGQrKyxWZSxcXFwiZmVuY2VkXFxcIixSKzEsUS0xLHguaWQpKX19ZWxzZSBsLnNldChSLG5ldyBobyhSLFEsZCsrLHgudHlwZSx4LmlkKSl9Zm9yKGxldCB4IG9mIGwudmFsdWVzKCkpKHk9Y3QoeC5zdGFydCx1KSk9PW51bGx8fHkuYmxvY2soeCk7bGV0IGg9L15bXFxcXHRcXFxcZlxcXFx2IF0qW1xcXFwtK1xcXFwqXVxcXFxzKFxcXFxbLlxcXFxdXFxcXHMpPy8scD0vXig+P1xcXFxzPykqKFxcXFx0fFxcXFxzKSovZyxmPW5ldyAkcy5kZWZhdWx0KHZvaWQgMCwoeCxSKT0+eC1SKTtmb3IobGV0IHggb2YgdC5saXN0SXRlbXN8fFtdKXtsZXQgUT1zW3gucG9zaXRpb24uc3RhcnQubGluZV0ubWF0Y2goJGYpLGNlLEVlO1EmJihjZT1RWzFdLEVlPVFbM10pO2xldCBWZT1uZXcgcG8oeC5wb3NpdGlvbi5zdGFydC5saW5lLHgucG9zaXRpb24uZW5kLmxpbmUrMSx4LnBhcmVudCxjZSx4LmlkLHgudGFzayxFZSk7Zi5zZXQoVmUuc3RhcnQsVmUpfWZvcihsZXQgeCBvZiBmLnZhbHVlcygpKWlmKHgucGFyZW50TGluZTwwKXtsZXQgUj1sLmdldCgteC5wYXJlbnRMaW5lKTtpZighUnx8Ui50eXBlIT09XFxcImxpc3RcXFwiKWNvbnRpbnVlO1IuaXRlbXMucHVzaCh4KX1lbHNlKFM9Zi5nZXQoeC5wYXJlbnRMaW5lKSk9PW51bGx8fFMuZWxlbWVudHMucHVzaCh4KTtmb3IobGV0IHggb2YoTz10LnRhZ3MpIT1udWxsP086W10pe2xldCBSPXgudGFnLnN0YXJ0c1dpdGgoXFxcIiNcXFwiKT94LnRhZzpcXFwiI1xcXCIreC50YWcsUT14LnBvc2l0aW9uLnN0YXJ0LmxpbmU7aS50YWcoUiksKHY9Y3QoUSx1KSk9PW51bGx8fHYubWV0YWRhdGEudGFnKFIpLChEPWN0KFEsbCkpPT1udWxsfHxELm1ldGFkYXRhLnRhZyhSKSwodz1jdChRLGYpKT09bnVsbHx8dy5tZXRhZGF0YS50YWcoUil9aWYodC5mcm9udG1hdHRlcilmb3IobGV0IHggb2YgUmYodC5mcm9udG1hdHRlcikpe2xldCBSPXguc3RhcnRzV2l0aChcXFwiI1xcXCIpP3g6XFxcIiNcXFwiK3g7aS50YWcoUil9Zm9yKGxldCB4IG9mKFQ9dC5saW5rcykhPW51bGw/VDpbXSl7bGV0IFI9ZWUuaW5mZXIoeC5saW5rKSxRPXgucG9zaXRpb24uc3RhcnQubGluZTtpLmxpbmsoUiksKEM9Y3QoUSx1KSk9PW51bGx8fEMubWV0YWRhdGEubGluayhSKSwoTT1jdChRLGwpKT09bnVsbHx8TS5tZXRhZGF0YS5saW5rKFIpLChWPWN0KFEsZikpPT1udWxsfHxWLm1ldGFkYXRhLmxpbmsoUil9Zm9yKGxldCB4IG9mKGo9dC5mcm9udG1hdHRlckxpbmtzKSE9bnVsbD9qOltdKWkubGluayhlZS5pbmZlcih4LmxpbmssITEseC5kaXNwbGF5VGV4dCkpO2ZvcihsZXQgeCBvZiBEbyhzKSl7bGV0IFI9eC5wb3NpdGlvbi5saW5lO2kuaW5saW5lRmllbGQoeCksKHo9Y3QoUix1KSk9PW51bGx8fHoubWV0YWRhdGEuaW5saW5lRmllbGQoeCksKHJlPWN0KFIsbCkpPT1udWxsfHxyZS5tZXRhZGF0YS5pbmxpbmVGaWVsZCh4KSwobGU9Y3QoUixmKSk9PW51bGx8fGxlLm1ldGFkYXRhLmlubGluZUZpZWxkKHgpfXJldHVybiBvLnB1c2goLi4udS52YWx1ZXMoKSkse2xpbmVzOnMsZnJvbnRtYXR0ZXI6cixtZXRhZGF0YTppLHNlY3Rpb25zOm99fWZ1bmN0aW9uIFd1KG4sZSx0KXtmb3IobGV0IHI9ZTtyPHQ7cisrKWlmKG5bcl0udHJpbSgpIT09XFxcIlxcXCIpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24qRG8obil7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCB0PW5bZV07aWYodC5sZW5ndGg+MzI3Njh8fCF0LmluY2x1ZGVzKFxcXCI6OlxcXCIpKWNvbnRpbnVlO2xldCByPXF1KHQpO2lmKHIubGVuZ3RoPjApZm9yKGxldCBzIG9mIHIpeWllbGQgQnMocyxlKTtlbHNle2xldCBzPVV1KHQpO3MmJih5aWVsZCBCcyhzLGUpKX19fWZ1bmN0aW9uIEh1KG4pe2xldCBlPXt9O2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHI9blt0XTtlW3QudG9Mb3dlckNhc2UoKV09e2tleTp0LHZhbHVlOk1uLmpzb24oUHMubGl0ZXJhbChyKSkscmF3OnJ9fXJldHVybiBlfWZ1bmN0aW9uIGN0KG4sZSl7dmFyIHI7bGV0IHQ9KHI9ZS5nZXRQYWlyT3JOZXh0TG93ZXIobikpPT1udWxsP3ZvaWQgMDpyWzFdO2lmKHQmJnQuZW5kPj1uKXJldHVybiB0fWZ1bmN0aW9uIFJmKG4pe3JldHVybiBPYmplY3Qua2V5cyhuKS5maWx0ZXIodD0+dC50b0xvd2VyQ2FzZSgpPT1cXFwidGFnc1xcXCJ8fHQudG9Mb3dlckNhc2UoKT09XFxcInRhZ1xcXCIpLm1hcCh0PT5KdShuW3RdLC9bLFxcXFxzXSsvKSkucmVkdWNlKCh0LHIpPT50LmNvbmNhdChyKSxbXSkubWFwKHQ9PnQuc3RhcnRzV2l0aChcXFwiI1xcXCIpP3Q6XFxcIiNcXFwiK3QpfWZ1bmN0aW9uIEp1KG4sZSl7cmV0dXJuIG49PW51bGx8fG49PW51bGw/W106QXJyYXkuaXNBcnJheShuKT9uLmZpbHRlcih0PT4hIXQpLm1hcCh0PT5KdSh0LGUpKS5yZWR1Y2UoKHQscik9PnQuY29uY2F0KHIpLFtdKTooXFxcIlxcXCIrbikuc3BsaXQoZSkuZmlsdGVyKHQ9PiEhdCkubWFwKHQ9PnQudHJpbSgpKS5maWx0ZXIodD0+dC5sZW5ndGg+MCl9dmFyIGplPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50YWdzPW5ldyBTZXQ7dGhpcy5saW5rcz1bXTt0aGlzLmlubGluZUZpZWxkcz17fX10YWcoZSl7dGhpcy50YWdzLmFkZChlKX1saW5rKGUpe3RoaXMubGlua3MuZmluZCh0PT50LmVxdWFscyhlKSl8fHRoaXMubGlua3MucHVzaChlKX1pbmxpbmVGaWVsZChlKXtsZXQgdD1lLmtleS50b0xvd2VyQ2FzZSgpO09iamVjdC5rZXlzKHRoaXMuaW5saW5lRmllbGRzKS5zb21lKHI9PnIudG9Mb3dlckNhc2UoKT09dCl8fCh0aGlzLmlubGluZUZpZWxkc1t0XT1lKX1maW5pc2hUYWdzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy50YWdzKX1maW5pc2hMaW5rcygpe3JldHVybiB0aGlzLmxpbmtzLm1hcChlPT5lLnRvT2JqZWN0KCkpfWZpbmlzaElubGluZUZpZWxkcygpe3JldHVybiBYdCh0aGlzLmlubGluZUZpZWxkcyxqdSl9fSxsbz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGksbyl7dGhpcy5wYXRoPWU7dGhpcy5zdGF0cz10O3RoaXMubGVuZ3RoPXI7dGhpcy5tZXRhZGF0YT1zO3RoaXMuc2VjdGlvbnM9aTt0aGlzLmZyb250bWF0dGVyPW99YnVpbGQoKXtyZXR1cm57JHBhdGg6dGhpcy5wYXRoLCRjdGltZTp0aGlzLnN0YXRzLmN0aW1lLCRtdGltZTp0aGlzLnN0YXRzLm10aW1lLCRzaXplOnRoaXMuc3RhdHMuc2l6ZSwkZXh0ZW5zaW9uOlBhKHRoaXMucGF0aCksJHBvc2l0aW9uOntzdGFydDowLGVuZDp0aGlzLmxlbmd0aH0sJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkaW5maWVsZHM6dGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSwkc2VjdGlvbnM6dGhpcy5zZWN0aW9ucy5tYXAoZT0+ZS5idWlsZCgpKSwkZnJvbnRtYXR0ZXI6dGhpcy5mcm9udG1hdHRlcn19fSxfcj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGkpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMudGl0bGU9cjt0aGlzLmxldmVsPXM7dGhpcy5vcmRpbmFsPWk7dGhpcy5ibG9ja3M9W107dGhpcy5tZXRhZGF0YT1uZXcgamV9YmxvY2soZSl7dGhpcy5ibG9ja3MucHVzaChlKX1idWlsZCgpe3JldHVybnskdGl0bGU6dGhpcy50aXRsZSwkb3JkaW5hbDp0aGlzLm9yZGluYWwsJGxldmVsOnRoaXMubGV2ZWwsJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkcG9zaXRpb246e3N0YXJ0OnRoaXMuc3RhcnQsZW5kOnRoaXMuZW5kfSwkYmxvY2tzOnRoaXMuYmxvY2tzLm1hcChlPT5lLmJ1aWxkKCkpfX19LGNvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLHMpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMub3JkaW5hbD1yO3RoaXMuYmxvY2tJZD1zO3RoaXMudHlwZT1cXFwibGlzdFxcXCI7dGhpcy5tZXRhZGF0YT1uZXcgamU7dGhpcy5pdGVtcz1bXX1idWlsZCgpe3JldHVybnskb3JkaW5hbDp0aGlzLm9yZGluYWwsJHBvc2l0aW9uOntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH0sJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkdHlwZTpcXFwibGlzdFxcXCIsJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRlbGVtZW50czp0aGlzLml0ZW1zLm1hcChlPT5lLmJ1aWxkKCkpfX19LFJzPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLHMsaSxvLGEsdSl7dGhpcy5zdGFydD1lO3RoaXMuZW5kPXQ7dGhpcy5vcmRpbmFsPXI7dGhpcy5sYW5ndWFnZXM9czt0aGlzLnN0eWxlPWk7dGhpcy5jb250ZW50U3RhcnQ9bzt0aGlzLmNvbnRlbnRFbmQ9YTt0aGlzLmJsb2NrSWQ9dTt0aGlzLnR5cGU9XFxcImNvZGVibG9ja1xcXCI7dGhpcy5tZXRhZGF0YT1uZXcgamV9YnVpbGQoKXtyZXR1cm57JHR5cGU6XFxcImNvZGVibG9ja1xcXCIsJG9yZGluYWw6dGhpcy5vcmRpbmFsLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRsYW5ndWFnZXM6dGhpcy5sYW5ndWFnZXMsJHN0eWxlOnRoaXMuc3R5bGUsJGNvbnRlbnRQb3NpdGlvbjp7c3RhcnQ6dGhpcy5jb250ZW50U3RhcnQsZW5kOnRoaXMuY29udGVudEVuZH19fX0sZm89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIscyxpKXt0aGlzLnN0YXJ0PWU7dGhpcy5lbmQ9dDt0aGlzLm9yZGluYWw9cjt0aGlzLmRhdGE9czt0aGlzLmJsb2NrSWQ9aTt0aGlzLnR5cGU9XFxcImRhdGFibG9ja1xcXCI7dGhpcy5tZXRhZGF0YT1uZXcgamV9YnVpbGQoKXtyZXR1cm57JHR5cGU6XFxcImRhdGFibG9ja1xcXCIsJG9yZGluYWw6dGhpcy5vcmRpbmFsLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRkYXRhOnRoaXMuZGF0YX19fSxobz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGkpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMub3JkaW5hbD1yO3RoaXMudHlwZT1zO3RoaXMuYmxvY2tJZD1pO3RoaXMubWV0YWRhdGE9bmV3IGplfWJ1aWxkKCl7cmV0dXJueyR0eXBlOnRoaXMudHlwZSwkb3JkaW5hbDp0aGlzLm9yZGluYWwsJHBvc2l0aW9uOntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH0sJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkYmxvY2tJZDp0aGlzLmJsb2NrSWR9fX0scG89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIscyxpLG8sYSl7dGhpcy5zdGFydD1lO3RoaXMuZW5kPXQ7dGhpcy5wYXJlbnRMaW5lPXI7dGhpcy5zeW1ib2w9czt0aGlzLmJsb2NrSWQ9aTt0aGlzLnN0YXR1cz1vO3RoaXMudGV4dD1hO3RoaXMubWV0YWRhdGE9bmV3IGplO3RoaXMuZWxlbWVudHM9W119YnVpbGQoKXtyZXR1cm57JHBhcmVudExpbmU6dGhpcy5wYXJlbnRMaW5lLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRibG9ja0lkOnRoaXMuYmxvY2tJZCwkZWxlbWVudHM6dGhpcy5lbGVtZW50cy5tYXAoZT0+ZS5idWlsZCgpKSwkdHlwZTp0aGlzLnN0YXR1cz9cXFwidGFza1xcXCI6XFxcImxpc3RcXFwiLCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJHN0YXR1czp0aGlzLnN0YXR1cywkc3ltYm9sOnRoaXMuc3ltYm9sLCR0ZXh0OnRoaXMudGV4dH19fTtmdW5jdGlvbiB6dShuLGUsdCxyKXt2YXIgbztsZXQgcz1uZXcgZ28obixyKSxpPUpTT04ucGFyc2UoZSk7Zm9yKGxldCBhIG9mIGkubm9kZXMpaWYoYS50eXBlIT1cXFwiZ3JvdXBcXFwiKWlmKGEudHlwZT09XFxcInRleHRcXFwiKXtsZXR7ZnJvbnRtYXR0ZXI6dSxtZXRhZGF0YTpsLGxpbmVzOmQsc2VjdGlvbnM6aH09bW8obixhLnRleHQsdC5jYWNoZXNbYS5pZF0pLHA9bmV3IGpzKG4sYS5pZCxhLHUpO2guZm9yRWFjaChmPT5wLnNlY3Rpb24oZikpLHMuY2FyZChwKTtmb3IobGV0IGYgaW4gbC50YWdzKXMubWV0YWRhdGEudGFnKGYpO2ZvcihsZXQgZiBvZihvPWwubGlua3MpIT1udWxsP286W10pcy5tZXRhZGF0YS5saW5rKGYpO2ZvcihsZXQgZiBvZiBEbyhkKSlzLm1ldGFkYXRhLmlubGluZUZpZWxkKGYpfWVsc2V7bGV0IHU9bmV3IGpzKG4sYS5pZCxhKTtzLmNhcmQodSl9cmV0dXJuIHMuYnVpbGQoKX12YXIgeW89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMucGF0aD1lO3RoaXMuaWQ9dDt0aGlzLm5vZGVKc29uPXI7dGhpcy5tZXRhZGF0YT1uZXcgamV9YnVpbGQoKXtyZXR1cm57JGZpbGU6dGhpcy5wYXRoLCRpZDp0aGlzLmlkLCRwb3NpdGlvbjp7eDp0aGlzLm5vZGVKc29uLngseTp0aGlzLm5vZGVKc29uLnl9LCRkaW1lbnNpb25zOnt3aWR0aDp0aGlzLm5vZGVKc29uLndpZHRoLGhlaWdodDp0aGlzLm5vZGVKc29uLmhlaWdodH0sJGNvbG9yOnRoaXMubm9kZUpzb24uY29sb3IsJGxpbms6ZWUuZmlsZSh0aGlzLnBhdGgpLndpdGhCbG9jayh0aGlzLmlkKS50b09iamVjdCgpfX19LGpzPWNsYXNzIGV4dGVuZHMgeW97Y29uc3RydWN0b3IodCxyLHMsaSl7c3VwZXIodCxyLHMpO3RoaXMucGF0aD10O3RoaXMuaWQ9cjt0aGlzLm5vZGVKc29uPXM7dGhpcy5mcm9udG1hdHRlcj1pO3RoaXMuc2VjdGlvbnM9W119c2VjdGlvbih0KXtyZXR1cm4gdGhpcy5zZWN0aW9ucy5wdXNoKHQpLHR9YnVpbGQoKXtzd2l0Y2godGhpcy5ub2RlSnNvbi50eXBlKXtjYXNlXFxcInRleHRcXFwiOnJldHVybiBGZSgkKHt9LHN1cGVyLmJ1aWxkKCkpLHskaW5maWVsZHM6dGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSwkZnJvbnRtYXR0ZXI6dGhpcy5mcm9udG1hdHRlciwkc2VjdGlvbnM6dGhpcy5zZWN0aW9ucy5tYXAodD0+dC5idWlsZCgpKSwkdGFnczp0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSwkbGlua3M6dGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLCR0eXBlOlxcXCJ0ZXh0LWNhcmRcXFwiLCRjb2xvcjp0aGlzLm5vZGVKc29uLmNvbG9yfSk7Y2FzZVxcXCJmaWxlXFxcIjpyZXR1cm4gRmUoJCh7fSxzdXBlci5idWlsZCgpKSx7JGxpbmtlZEZpbGU6dGhpcy5ub2RlSnNvbi5maWxlfSk7Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm4gRmUoJCh7fSxzdXBlci5idWlsZCgpKSx7JHVybDp0aGlzLm5vZGVKc29uLnVybH0pfX19LGdvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wYXRoPWU7dGhpcy5zdGF0cz10O3RoaXMuY2FyZHM9W107dGhpcy5tZXRhZGF0YT1uZXcgamV9Y2FyZChlKXtyZXR1cm4gdGhpcy5jYXJkcy5wdXNoKGUpLGV9YnVpbGQoKXtyZXR1cm57JGNhcmRzOnRoaXMuY2FyZHMubWFwKGU9PmUuYnVpbGQoKSksJGN0aW1lOnRoaXMuc3RhdHMuY3RpbWUsJG10aW1lOnRoaXMuc3RhdHMubXRpbWUsJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkdGFnczp0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSwkcGF0aDp0aGlzLnBhdGgsJHNpemU6dGhpcy5zdGF0cy5zaXplfX19O29ubWVzc2FnZT1hc3luYyBuPT57dHJ5e2xldCBlPW4uZGF0YTtpZihlLnR5cGU9PT1cXFwibWFya2Rvd25cXFwiKXtsZXQgdD1LdShlLnBhdGgsZS5jb250ZW50cyxlLm1ldGFkYXRhLGUuc3RhdCk7cG9zdE1lc3NhZ2Uoe3R5cGU6XFxcIm1hcmtkb3duXFxcIixyZXN1bHQ6dH0pfWVsc2UgaWYoZS50eXBlPT09XFxcImNhbnZhc1xcXCIpe2xldCB0PXp1KGUucGF0aCxlLmNvbnRlbnRzLGUuaW5kZXgsZS5zdGF0KTtwb3N0TWVzc2FnZSh7dHlwZTpcXFwiY2FudmFzXFxcIixyZXN1bHQ6dH0pfWVsc2UgcG9zdE1lc3NhZ2UoeyRlcnJvcjpcXFwiVW5zdXBwb3J0ZWQgaW1wb3J0IG1ldGhvZC5cXFwifSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihgRGF0YWNvcmUgSW5kZXhlciBmYWlsZWQgdG8gaW5kZXggJHtuLmRhdGEucGF0aH06ICR7ZX1gKSxwb3N0TWVzc2FnZSh7JGVycm9yOmUubWVzc2FnZX0pfX07XFxuXCIpO1xufVxuIiwgIi8qKiBDb250cm9scyBhbmQgY3JlYXRlcyBEYXRhdmlldyBmaWxlIGltcG9ydGVycywgYWxsb3dpbmcgZm9yIGFzeW5jaHJvbm91cyBsb2FkaW5nIGFuZCBwYXJzaW5nIG9mIGZpbGVzLiAqL1xuXG5pbXBvcnQgSW1wb3J0V29ya2VyIGZyb20gXCJpbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLndvcmtlclwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGaWxlTWFuYWdlciwgTWV0YWRhdGFDYWNoZSwgVEZpbGUsIFZhdWx0IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBDYW52YXNJbXBvcnQsIE1hcmtkb3duSW1wb3J0IH0gZnJvbSBcImluZGV4L3dlYi13b3JrZXIvbWVzc2FnZVwiO1xuaW1wb3J0IHsgRGVmZXJyZWQsIGRlZmVycmVkIH0gZnJvbSBcInV0aWxzL2RlZmVycmVkXCI7XG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIkBkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZVwiO1xuXG4vKiogU2V0dGluZ3MgZm9yIHRocm90dGxpbmcgaW1wb3J0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRUaHJvdHRsZSB7XG4gICAgLyoqIFRoZSBudW1iZXIgb2Ygd29ya2VycyB0byB1c2UgZm9yIGltcG9ydHMuICovXG4gICAgd29ya2VyczogbnVtYmVyO1xuICAgIC8qKiBBIG51bWJlciBiZXR3ZWVuIDAuMSBhbmQgMSB3aGljaCBpbmRpY2F0ZXMgdG90YWwgY3B1IHV0aWxpemF0aW9uIHRhcmdldDsgMC4xIG1lYW5zIHNwZW5kIDEwJSBvZiB0aW1lICAqL1xuICAgIHV0aWxpemF0aW9uOiBudW1iZXI7XG59XG5cbi8qKiBEZWZhdWx0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USFJPVFRMRTogSW1wb3J0VGhyb3R0bGUgPSB7XG4gICAgd29ya2VyczogMixcbiAgICB1dGlsaXphdGlvbjogMC43NSxcbn07XG5cbi8qKiBNdWx0aS10aHJlYWRlZCBmaWxlIHBhcnNlciB3aGljaCBkZWJvdW5jZXMgcmFwaWQgZmlsZSByZXF1ZXN0cyBhdXRvbWF0aWNhbGx5LiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVJbXBvcnRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyogQmFja2dyb3VuZCB3b3JrZXJzIHdoaWNoIGRvIHRoZSBhY3R1YWwgZmlsZSBwYXJzaW5nLiAqL1xuICAgIHdvcmtlcnM6IE1hcDxudW1iZXIsIFBvb2xXb3JrZXI+O1xuICAgIC8qKiBUaGUgbmV4dCB3b3JrZXIgSUQgdG8gaGFuZCBvdXQuICovXG4gICAgbmV4dFdvcmtlcklkOiBudW1iZXI7XG4gICAgLyoqIElmIHRydWUsIHRoZSBpbXBvcnRlciBpcyBub3cgaW5hY3RpdmUgYW5kIHdpbGwgbm90IHByb2Nlc3MgZnVydGhlciBmaWxlcy4gKi9cbiAgICBzaHV0ZG93bjogYm9vbGVhbjtcblxuICAgIC8qKiBMaXN0IG9mIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBxdWV1ZWQgZm9yIGEgcmVsb2FkLiAqL1xuICAgIHF1ZXVlOiBRdWV1ZTxbVEZpbGUsIERlZmVycmVkPGFueT5dPjtcbiAgICAvKiogT3V0c3RhbmRpbmcgbG9hZHMgaW5kZXhlZCBieSBwYXRoLiAqL1xuICAgIG91dHN0YW5kaW5nOiBNYXA8c3RyaW5nLCBQcm9taXNlPGFueT4+O1xuICAgIC8qKiBUaHJvdHRsZSBzZXR0aW5ncy4gKi9cbiAgICB0aHJvdHRsZTogKCkgPT4gSW1wb3J0VGhyb3R0bGU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB2YXVsdDogVmF1bHQsXG4gICAgICAgIHB1YmxpYyBmaWxlTWFuYWdlcjogRmlsZU1hbmFnZXIsXG4gICAgICAgIHB1YmxpYyBtZXRhZGF0YUNhY2hlOiBNZXRhZGF0YUNhY2hlLFxuICAgICAgICB0aHJvdHRsZT86ICgpID0+IEltcG9ydFRocm90dGxlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMud29ya2VycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5zaHV0ZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5leHRXb3JrZXJJZCA9IDA7XG4gICAgICAgIHRoaXMudGhyb3R0bGUgPSB0aHJvdHRsZSA/PyAoKCkgPT4gREVGQVVMVF9USFJPVFRMRSk7XG5cbiAgICAgICAgdGhpcy5xdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuICAgICAgICB0aGlzLm91dHN0YW5kaW5nID0gbmV3IE1hcCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXVlIHRoZSBnaXZlbiBmaWxlIGZvciBpbXBvcnRpbmcuIE11bHRpcGxlIGltcG9ydCByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgZmlsZSBpbiBhIHNob3J0IHRpbWUgcGVyaW9kIHdpbGwgYmUgZGUtYm91bmNlZFxuICAgICAqIGFuZCBhbGwgYmUgcmVzb2x2ZWQgYnkgYSBzaW5nbGUgYWN0dWFsIGZpbGUgcmVsb2FkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbXBvcnQ8VD4oZmlsZTogVEZpbGUpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgLy8gRGUtYm91bmNlIHJlcGVhdGVkIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBmaWxlLlxuICAgICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm91dHN0YW5kaW5nLmdldChmaWxlLnBhdGgpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgICAgICBsZXQgcHJvbWlzZSA9IGRlZmVycmVkPFQ+KCk7XG5cbiAgICAgICAgdGhpcy5vdXRzdGFuZGluZy5zZXQoZmlsZS5wYXRoLCBwcm9taXNlKTtcbiAgICAgICAgdGhpcy5xdWV1ZS5lbnF1ZXVlKFtmaWxlLCBwcm9taXNlXSk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqIFJlc2V0IGFueSBhY3RpdmUgdGhyb3R0bGVzIG9uIHRoZSBpbXBvcnRlciAoc3VjaCBhcyBpZiB0aGUgdXRpbGl6YXRpb24gY2hhbmdlcykuICovXG4gICAgcHVibGljIHVudGhyb3R0bGUoKSB7XG4gICAgICAgIGZvciAobGV0IHdvcmtlciBvZiB0aGlzLndvcmtlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IERhdGUubm93KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUG9sbCBmcm9tIHRoZSBxdWV1ZSBhbmQgZXhlY3V0ZSBpZiB0aGVyZSBpcyBhbiBhdmFpbGFibGUgd29ya2VyLiAqL1xuICAgIHByaXZhdGUgYXN5bmMgc2NoZWR1bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXVlLnNpemUoKSA9PSAwIHx8IHRoaXMuc2h1dGRvd24pIHJldHVybjtcblxuICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLmF2YWlsYWJsZVdvcmtlcigpO1xuICAgICAgICBpZiAoIXdvcmtlcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IFtmaWxlLCBwcm9taXNlXSA9IHRoaXMucXVldWUuZGVxdWV1ZSgpITtcbiAgICAgICAgd29ya2VyLmFjdGl2ZSA9IFtmaWxlLCBwcm9taXNlLCBEYXRlLm5vdygpXTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3dpdGNoIChmaWxlLmV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXJrZG93blwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJtZFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdGhpcy52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXIhLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm1hcmtkb3duXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0OiBmaWxlLnN0YXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKSxcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBNYXJrZG93bkltcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFwiY2FudmFzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBhd2FpdCB0aGlzLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlciEud29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2FudmFzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0OiBmaWxlLnN0YXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5maWxlTWFuYWdlci5saW5rVXBkYXRlcnMuY2FudmFzLmNhbnZhcy5pbmRleC5pbmRleFtmaWxlLnBhdGhdLFxuICAgICAgICAgICAgICAgICAgICB9IGFzIENhbnZhc0ltcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWNvcmU6IEJhY2tncm91bmQgZmlsZSByZWxvYWRpbmcgZmFpbGVkLiBcIiArIGV4KTtcblxuICAgICAgICAgICAgLy8gTWVzc2FnZSBmYWlsZWQsIHJlbGVhc2UgdGhpcyB3b3JrZXIuXG4gICAgICAgICAgICB3b3JrZXIuYWN0aXZlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZpbmlzaCB0aGUgcGFyc2luZyBvZiBhIGZpbGUsIHBvdGVudGlhbGx5IHF1ZXVlaW5nIGEgbmV3IGZpbGUuICovXG4gICAgcHJpdmF0ZSBmaW5pc2god29ya2VyOiBQb29sV29ya2VyLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgaWYgKCF3b3JrZXIuYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFjb3JlOiBSZWNlaXZlZCBhIHN0YWxlIHdvcmtlciBtZXNzYWdlLiBJZ25vcmluZy5cIiwgZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbZmlsZSwgcHJvbWlzZSwgc3RhcnRdID0gd29ya2VyLmFjdGl2ZSE7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwcm9taXNlcyB0byBsZXQgdXNlcnMga25vdyB0aGlzIGZpbGUgaGFzIGZpbmlzaGVkLlxuICAgICAgICBpZiAoXCIkZXJyb3JcIiBpbiBkYXRhKSBwcm9taXNlLnJlamVjdChkYXRhW1wiJGVycm9yXCJdKTtcbiAgICAgICAgZWxzZSBwcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGZpbGUgZnJvbSBvdXRzdGFuZGluZy5cbiAgICAgICAgdGhpcy5vdXRzdGFuZGluZy5kZWxldGUoZmlsZS5wYXRoKTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhpcyB3b3JrZXIgaWYgd2UgYXJlIG92ZXIgY2FwYWNpdHkuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgbm90aWZ5IHRoZSBxdWV1ZSB0aGlzIGZpbGUgaXMgYXZhaWxhYmxlIGZvciBuZXcgd29yay5cbiAgICAgICAgaWYgKHRoaXMud29ya2Vycy5zaXplID4gdGhpcy50aHJvdHRsZSgpLndvcmtlcnMpIHtcbiAgICAgICAgICAgIHRoaXMud29ya2Vycy5kZWxldGUod29ya2VyLmlkKTtcbiAgICAgICAgICAgIHRlcm1pbmF0ZSh3b3JrZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IHRocm90dGxlID0gTWF0aC5tYXgoMC4xLCB0aGlzLnRocm90dGxlKCkudXRpbGl6YXRpb24pIC0gMS4wO1xuICAgICAgICAgICAgY29uc3QgZGVsYXkgPSAobm93IC0gc3RhcnQpICogdGhyb3R0bGU7XG5cbiAgICAgICAgICAgIHdvcmtlci5hY3RpdmUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmIChkZWxheSA8PSAxZS0xMCkge1xuICAgICAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IG5vdztcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IG5vdyArIGRlbGF5O1xuXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogSSdtIHByZXR0eSBzdXJlIHRoaXMgd2lsbCBnYXJhdW50ZWUgdGhhdCB0aGlzIGV4ZWN1dGVzIEFGVEVSIGRlbGF5IG1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICAvLyBzbyB0aGlzIHNob3VsZCBiZSBmaW5lOyBpZiBpdCdzIG5vdCwgd2UnbGwgaGF2ZSB0byBzd2FwIHRvIGFuIGV4dGVybmFsIHRpbWVvdXQgbG9vcFxuICAgICAgICAgICAgICAgIC8vIHdoaWNoIGluZmluaXRlbHkgcmVzY2hlZHVsZXMgaXRzZWxmIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBleGVjdXRpb24gdGltZS5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuc2NoZWR1bGUuYmluZCh0aGlzKSwgZGVsYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9idGFpbiBhbiBhdmFpbGFibGUgd29ya2VyLCByZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG9uZSBkb2VzIG5vdCBleGlzdC4gKi9cbiAgICBwcml2YXRlIGF2YWlsYWJsZVdvcmtlcigpOiBQb29sV29ya2VyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZm9yIChsZXQgd29ya2VyIG9mIHRoaXMud29ya2Vycy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKCF3b3JrZXIuYWN0aXZlICYmIHdvcmtlci5hdmFpbGFibGVBdCA8PSBub3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBhIG5ldyB3b3JrZXIgaWYgd2UgY2FuLlxuICAgICAgICBpZiAodGhpcy53b3JrZXJzLnNpemUgPCB0aGlzLnRocm90dGxlKCkud29ya2Vycykge1xuICAgICAgICAgICAgbGV0IHdvcmtlciA9IHRoaXMubmV3V29ya2VyKCk7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMuc2V0KHdvcmtlci5pZCwgd29ya2VyKTtcbiAgICAgICAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBuZXcgd29ya2VyIGJvdW5kIHRvIHRoaXMgaW1wb3J0ZXIuICovXG4gICAgcHJpdmF0ZSBuZXdXb3JrZXIoKTogUG9vbFdvcmtlciB7XG4gICAgICAgIGxldCB3b3JrZXI6IFBvb2xXb3JrZXIgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5uZXh0V29ya2VySWQrKyxcbiAgICAgICAgICAgIGF2YWlsYWJsZUF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgd29ya2VyOiBuZXcgSW1wb3J0V29ya2VyKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgd29ya2VyLndvcmtlci5vbm1lc3NhZ2UgPSAoZXZ0KSA9PiB0aGlzLmZpbmlzaCh3b3JrZXIsIGV2dC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIHdvcmtlcjtcbiAgICB9XG5cbiAgICAvKiogUmVqZWN0IGFsbCBvdXRzdGFuZGluZyBwcm9taXNlcyBhbmQgY2xvc2UgYWxsIHdvcmtlcnMgb24gY2xvc2UuICovXG4gICAgcHVibGljIG9udW5sb2FkKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCB3b3JrZXIgb2YgdGhpcy53b3JrZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB0ZXJtaW5hdGUod29ya2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICghdGhpcy5xdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtfZmlsZSwgcHJvbWlzZV0gPSB0aGlzLnF1ZXVlLnBvcCgpITtcbiAgICAgICAgICAgIHByb21pc2UucmVqZWN0KFwiVGVybWluYXRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2h1dGRvd24gPSB0cnVlO1xuICAgIH1cbn1cblxuLyoqIEEgd29ya2VyIGluIHRoZSBwb29sIG9mIGV4ZWN1dGluZyB3b3JrZXJzLiAqL1xuaW50ZXJmYWNlIFBvb2xXb3JrZXIge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhpcyB3b3JrZXIuICovXG4gICAgaWQ6IG51bWJlcjtcbiAgICAvKiogVGhlIHJhdyB1bmRlcmx5aW5nIHdvcmtlci4gKi9cbiAgICB3b3JrZXI6IFdvcmtlcjtcbiAgICAvKiogVU5JWCB0aW1lIGluZGljYXRpbmcgdGhlIG5leHQgdGltZSB0aGlzIHdvcmtlciBpcyBhdmFpbGFibGUgZm9yIGV4ZWN1dGlvbiBhY2NvcmRpbmcgdG8gdGFyZ2V0IHV0aWxpemF0aW9uLiAqL1xuICAgIGF2YWlsYWJsZUF0OiBudW1iZXI7XG4gICAgLyoqIFRoZSBhY3RpdmUgcHJvbWlzZSB0aGlzIHdvcmtlciBpcyB3b3JraW5nIG9uLCBpZiBhbnkuICovXG4gICAgYWN0aXZlPzogW1RGaWxlLCBEZWZlcnJlZDxhbnk+LCBudW1iZXJdO1xufVxuXG4vKiogVGVybWluYXRlIGEgcG9vbCB3b3JrZXIuICovXG5mdW5jdGlvbiB0ZXJtaW5hdGUod29ya2VyOiBQb29sV29ya2VyKSB7XG4gICAgd29ya2VyLndvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgIGlmICh3b3JrZXIuYWN0aXZlKSB3b3JrZXIuYWN0aXZlWzFdLnJlamVjdChcIlRlcm1pbmF0ZWRcIik7XG4gICAgd29ya2VyLmFjdGl2ZSA9IHVuZGVmaW5lZDtcbn1cbiIsICJpbXBvcnQgeyBkZWZlcnJlZCwgRGVmZXJyZWQgfSBmcm9tIFwidXRpbHMvZGVmZXJyZWRcIjtcbmltcG9ydCB7IERhdGFzdG9yZSwgU3Vic3RvcmVyIH0gZnJvbSBcImluZGV4L2RhdGFzdG9yZVwiO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlQ2FjaGUgfSBmcm9tIFwiaW5kZXgvcGVyc2lzdGVyXCI7XG5pbXBvcnQgeyBJbmRleGFibGUsIElOREVYQUJMRV9FWFRFTlNJT05TIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgRmlsZUltcG9ydGVyLCBJbXBvcnRUaHJvdHRsZSB9IGZyb20gXCJpbmRleC93ZWItd29ya2VyL2ltcG9ydGVyXCI7XG5pbXBvcnQgeyBJbXBvcnRSZXN1bHQgfSBmcm9tIFwiaW5kZXgvd2ViLXdvcmtlci9tZXNzYWdlXCI7XG5pbXBvcnQgeyBBcHAsIENvbXBvbmVudCwgRXZlbnRSZWYsIEV2ZW50cywgTWV0YWRhdGFDYWNoZSwgVEFic3RyYWN0RmlsZSwgVEZpbGUsIFZhdWx0IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuaW1wb3J0IHsgTWFya2Rvd25MaXN0QmxvY2ssIE1hcmtkb3duTGlzdEl0ZW0sIE1hcmtkb3duUGFnZSB9IGZyb20gXCIuL3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBHZW5lcmljRmlsZSB9IGZyb20gXCIuL3R5cGVzL2ZpbGVzXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgRW1iZWRRdWV1ZSB9IGZyb20gXCIuL2VtYmVkLXF1ZXVlXCI7XG5pbXBvcnQgeyBKc29uTWFya2Rvd25QYWdlIH0gZnJvbSBcIi4vdHlwZXMvanNvbi9tYXJrZG93blwiO1xuaW1wb3J0IHsgQ2FudmFzLCBDYW52YXNUZXh0Q2FyZCB9IGZyb20gXCIuL3R5cGVzL2NhbnZhc1wiO1xuXG4vKiogQ2VudHJhbCBBUEkgb2JqZWN0OyBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBldmVudHMsIGRlYm91bmNpbmcsIGFuZCBhY2Nlc3MgdG8gZGF0YWNvcmUgZnVuY3Rpb25hbGl0eS4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhY29yZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyoqIEFjY2VzcyB0byB0aGUgb2JzaWRpYW4gdmF1bHQuICovXG4gICAgdmF1bHQ6IFZhdWx0O1xuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyLShtYXJrZG93biktZmlsZSBtZXRhZGF0YS4gKi9cbiAgICBtZXRhZGF0YUNhY2hlOiBNZXRhZGF0YUNhY2hlO1xuICAgIC8qKiBEYXRhY29yZSBldmVudHMsIG1haW5seSB1c2VkIHRvIHVwZGF0ZSBkb3duc3RyZWFtIHZpZXdzLiBUaGlzIG9iamVjdCBpcyBzaGFkb3dlZCBieSB0aGUgRGF0YWNvcmUgb2JqZWN0IGl0c2VsZi4gKi9cbiAgICBldmVudHM6IEV2ZW50cztcblxuICAgIC8qKiBJbi1tZW1vcnkgaW5kZXggb3ZlciBhbGwgc3RvcmVkIG1ldGFkYXRhLiAqL1xuICAgIGRhdGFzdG9yZTogRGF0YXN0b3JlO1xuICAgIC8qKiBBc3luY2hyb25vdXMgbXVsdGktdGhyZWFkZWQgZmlsZSBpbXBvcnRlciB3aXRoIHRocm90dGxpbmcuICovXG4gICAgaW1wb3J0ZXI6IEZpbGVJbXBvcnRlcjtcbiAgICAvKiogUXVldWUgb2YgYXN5bmNocm9ub3VzIHJlYWQgcmVxdWVzdHM7IGVuc3VyZXMgd2UgbGltaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgZmlsZSBsb2Fkcy4gKi9cbiAgICByZWFkczogRW1iZWRRdWV1ZTtcbiAgICAvKiogTG9jYWwtc3RvcmFnZSBiYWNrZWQgY2FjaGUgb2YgbWV0YWRhdGEgb2JqZWN0cy4gKi9cbiAgICBwZXJzaXN0ZXI6IExvY2FsU3RvcmFnZUNhY2hlO1xuICAgIC8qKiBPbmx5IHNldCB3aGVuIGRhdGFjb3JlIGlzIGluIHRoZSBtaWRzdCBvZiBpbml0aWFsaXphdGlvbjsgdHJhY2tzIGN1cnJlbnQgcHJvZ3Jlc3MuICovXG4gICAgaW5pdGlhbGl6ZXI/OiBEYXRhY29yZUluaXRpYWxpemVyO1xuICAgIC8qKiBJZiB0cnVlLCBkYXRhY29yZSBpcyBmdWxseSBoeWRyYXRlZCBhbmQgYWxsIGZpbGVzIGhhdmUgYmVlbiBpbmRleGVkLiAqL1xuICAgIGluaXRpYWxpemVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGFwcDogQXBwLCBwdWJsaWMgdmVyc2lvbjogc3RyaW5nLCBwdWJsaWMgc2V0dGluZ3M6IFNldHRpbmdzKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy52YXVsdCA9IGFwcC52YXVsdDtcbiAgICAgICAgdGhpcy5tZXRhZGF0YUNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGU7XG4gICAgICAgIHRoaXMucGVyc2lzdGVyID0gbmV3IExvY2FsU3RvcmFnZUNhY2hlKFwicHJpbWFyeVwiLCB2ZXJzaW9uKTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG5cbiAgICAgICAgdGhpcy5kYXRhc3RvcmUgPSBuZXcgRGF0YXN0b3JlKGFwcC52YXVsdCwgYXBwLm1ldGFkYXRhQ2FjaGUsIHNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICAgICAgICAodGhpcy5pbXBvcnRlciA9IG5ldyBGaWxlSW1wb3J0ZXIoYXBwLnZhdWx0LCBhcHAuZmlsZU1hbmFnZXIsIGFwcC5tZXRhZGF0YUNhY2hlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2Vyczogc2V0dGluZ3MuaW1wb3J0ZXJOdW1UaHJlYWRzLFxuICAgICAgICAgICAgICAgICAgICB1dGlsaXphdGlvbjogTWF0aC5tYXgoMC4xLCBNYXRoLm1pbigxLjAsIHNldHRpbmdzLmltcG9ydGVyVXRpbGl6YXRpb24pKSxcbiAgICAgICAgICAgICAgICB9IGFzIEltcG9ydFRocm90dGxlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVE9ETyAoYmxhY2tzbWl0aGd1KTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIGVtYmVkIHF1ZXVlIGNvbmN1cnJlbmN5LlxuICAgICAgICB0aGlzLmFkZENoaWxkKCh0aGlzLnJlYWRzID0gbmV3IEVtYmVkUXVldWUoYXBwLnZhdWx0LCAoKSA9PiA4KSkpO1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGN1cnJlbnQgaW5kZXggcmV2aXNpb24sIGZvciBkZXRlcm1pbmluZyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZC4gKi9cbiAgICBnZXQgcmV2aXNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzdG9yZS5yZXZpc2lvbjtcbiAgICB9XG5cbiAgICAvKiogSW5pdGlhbGl6ZSBkYXRhY29yZSBieSBzY2FubmluZyBwZXJzaXN0ZWQgY2FjaGVzIGFuZCBhbGwgYXZhaWxhYmxlIGZpbGVzLCBhbmQgcXVldWVpbmcgcGFyc2VzIGFzIG5lZWRlZC4gKi9cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICAvLyBNZXRhZGF0YSBjYWNoZSBoYW5kbGVzIG1hcmtkb3duIGZpbGUgdXBkYXRlcy5cbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMubWV0YWRhdGFDYWNoZS5vbihcInJlc29sdmVcIiwgKGZpbGUpID0+IHRoaXMucmVsb2FkKGZpbGUpKSk7XG5cbiAgICAgICAgLy8gUmVuYW1lcyBkbyBub3Qgc2V0IG9mZiB0aGUgbWV0YWRhdGEgY2FjaGU7IGNhdGNoIHRoZXNlIGV4cGxpY2l0bHkuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLnZhdWx0Lm9uKFwicmVuYW1lXCIsIHRoaXMucmVuYW1lLCB0aGlzKSk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGdlbmVyaWMgZmlsZSBjcmVhdGVzIGFuZCB1cGRhdGVzOyByZXNvbHZlIGdlbmVyYWxseSBvbmx5IGFwcGxpZXMgdG8gbWFya2Rvd24gZmlsZXNcbiAgICAgICAgLy8gYnV0IHdlIGRvIGtlZXAgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYWxsIGZpbGVzLlxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoXG4gICAgICAgICAgICB0aGlzLnZhdWx0Lm9uKFwiY3JlYXRlXCIsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlZCBieSB0aGUgbWV0YWRhdGEgY2FjaGUuXG4gICAgICAgICAgICAgICAgaWYgKElOREVYQUJMRV9FWFRFTlNJT05TLmhhcyhmaWxlLmV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoZmlsZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudChcbiAgICAgICAgICAgIHRoaXMudmF1bHQub24oXCJtb2RpZnlcIiwgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGVkIGJ5IHRoZSBtZXRhZGF0YSBjYWNoZS5cbiAgICAgICAgICAgICAgICBpZiAoSU5ERVhBQkxFX0VYVEVOU0lPTlMuaGFzKGZpbGUuZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZChmaWxlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRmlsZSBjcmVhdGlvbiBkb2VzIGNhdXNlIGEgbWV0YWRhdGEgY2hhbmdlLCBidXQgZGVsZXRlcyBkbyBub3QuIENsZWFyIHRoZSBjYWNoZXMgZm9yIHRoaXMuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudChcbiAgICAgICAgICAgIHRoaXMudmF1bHQub24oXCJkZWxldGVcIiwgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXN0b3JlLmRlbGV0ZShmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pbmRleCgpO1xuICAgIH1cblxuICAgIC8qKiBTdGFydHMgdGhlIGJhY2tncm91bmQgaW5pdGlhbGl6ZXIuICovXG4gICAgaW5kZXgoKSB7XG4gICAgICAgIC8vIEFzeW5jaHJvbm91c2x5IGluaXRpYWxpemUgYWN0dWFsIGNvbnRlbnQgaW4gdGhlIGJhY2tncm91bmQgdXNpbmcgYSBsaWZlY3ljbGUtcmVzcGVjdGluZyBvYmplY3QuXG4gICAgICAgIGNvbnN0IGluaXQgPSAodGhpcy5pbml0aWFsaXplciA9IG5ldyBEYXRhY29yZUluaXRpYWxpemVyKHRoaXMpKTtcbiAgICAgICAgaW5pdC5maW5pc2hlZCgpLnRoZW4oKHN0YXRzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGluaXQpO1xuXG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvblNlY3MgPSAoc3RhdHMuZHVyYXRpb25NcyAvIDEwMDAuMCkudG9GaXhlZCgzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGBEYXRhY29yZTogSW1wb3J0ZWQgYWxsIGZpbGVzIGluIHRoZSB2YXVsdCBpbiAke2R1cmF0aW9uU2Vjc31zIGAgK1xuICAgICAgICAgICAgICAgICAgICBgKCR7c3RhdHMuaW1wb3J0ZWR9IGltcG9ydGVkLCAke3N0YXRzLmNhY2hlZH0gY2FjaGVkLCAke3N0YXRzLnNraXBwZWR9IHNraXBwZWQpLmBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YXN0b3JlLnRvdWNoKCk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJ1cGRhdGVcIiwgdGhpcy5yZXZpc2lvbik7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJpbml0aWFsaXplZFwiKTtcblxuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGRvY3VtZW50cyB3aGljaCBubyBsb25nZXIgZXhpc3QgaW4gdGhlIHZhdWx0LlxuICAgICAgICAgICAgLy8gVE9ETzogSSB0aGluayB0aGlzIG1heSByYWNlIHdpdGggb3RoZXIgY29uY3VycmVudCBvcGVyYXRpb25zLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyBtYXkgbmVlZCB0byBoYXBwZW4gYXQgdGhlIHN0YXJ0IG9mIGluaXQgYW5kIG5vdCBhdCB0aGUgZW5kLlxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbGVzID0gdGhpcy52YXVsdC5nZXRGaWxlcygpLm1hcCgoZmlsZSkgPT4gZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVyXG4gICAgICAgICAgICAgICAgLnN5bmNocm9uaXplKGN1cnJlbnRGaWxlcylcbiAgICAgICAgICAgICAgICAudGhlbigoY2xlYXJlZCkgPT4gY29uc29sZS5sb2coYERhdGFjb3JlOiBkcm9wcGVkICR7Y2xlYXJlZC5zaXplfSBvdXQtb2YtZGF0ZSBmaWxlIG1ldGFkYXRhIGJsb2Nrcy5gKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoaW5pdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5hbWUoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlbGV0ZSB0aGUgZmlsZSBhdCB0aGUgb2xkIHBhdGgsIHRoZW4gcmVxdWVzdCBhIHJlbG9hZCBhdCB0aGUgbmV3IHBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgbGVzcyBvcHRpbWFsIHRoYW4gd2hhdCBjYW4gcHJvYmFibHkgYmUgZG9uZSwgYnV0IHBhdGhzIGFyZSB1c2VkIGluIGEgYnVuY2ggb2YgcGxhY2VzXG4gICAgICAgIC8vIChmb3Igc2VjdGlvbnMsIHRhc2tzLCBldGMgdG8gcmVmZXIgdG8gdGhlaXIgcGFyZW50IGZpbGUpIGFuZCBpdCByZXF1aXJlcyBzb21lIGZpbmVzc2UgdG8gZml4LlxuICAgICAgICB0aGlzLmRhdGFzdG9yZS5kZWxldGUob2xkUGF0aCk7XG4gICAgICAgIHRoaXMucmVsb2FkKGZpbGUpO1xuXG4gICAgICAgIC8vIFRPRE86IEZvciBjb3JyZWN0bmVzcywgcHJvYmFibHkgaGF2ZSB0byBlaXRoZXIgZml4IGxpbmtzIGluIGFsbCBsaW5rZWQgZmlsZXMgT1JcbiAgICAgICAgLy8ganVzdCBzdG9wIG5vcm1hbGl6aW5nIGxpbmtzIGluIHRoZSBzdG9yZS5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgZmlsZSBmcm9tIHRoZSBPYnNpZGlhbiBjYWNoZSBlZmZpY2llbnRseSwgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHJlcXVlc3QgYW5kIGRlYm91bmNpbmdcbiAgICAgKiBtdWx0aXBsZSByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgZmlsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgcmVhZChmaWxlOiBURmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRzLnJlYWQoZmlsZSk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgZmlsZSBmb3IgcmVsb2FkaW5nOyB0aGlzIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgaW4gdGhlIGJhY2tncm91bmQgYW5kIG1heSB0YWtlIGEgZmV3IHNlY29uZHMuICovXG4gICAgcHVibGljIGFzeW5jIHJlbG9hZChmaWxlOiBURmlsZSk6IFByb21pc2U8SW5kZXhhYmxlPiB7XG4gICAgICAgIC8vIEZpbHRlciBmaWxlcyBieSBmaWxlIGV4dGVuc2lvbnMuXG4gICAgICAgIGlmICghSU5ERVhBQkxFX0VYVEVOU0lPTlMuaGFzKGZpbGUuZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEdlbmVyaWNGaWxlKFxuICAgICAgICAgICAgICAgIGZpbGUucGF0aCxcbiAgICAgICAgICAgICAgICBEYXRlVGltZS5mcm9tTWlsbGlzKGZpbGUuc3RhdC5jdGltZSksXG4gICAgICAgICAgICAgICAgRGF0ZVRpbWUuZnJvbU1pbGxpcyhmaWxlLnN0YXQubXRpbWUpLFxuICAgICAgICAgICAgICAgIGZpbGUuc3RhdC5zaXplXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFzdG9yZS5zdG9yZShyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaW1wb3J0ZXIuaW1wb3J0PEltcG9ydFJlc3VsdD4oZmlsZSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGltcG9ydCBmaWxlICcke2ZpbGUubmFtZX06ICR7cmVzdWx0LiRlcnJvcn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQudHlwZSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgZmlsZSBhbmQgbm9ybWFsaXplIG1ldGFkYXRhIGZyb20gaXQuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBNYXJrZG93blBhZ2UuZnJvbShyZXN1bHQucmVzdWx0LCAobGluaykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJwYXRoID0gdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KGxpbmsucGF0aCwgcmVzdWx0LnJlc3VsdC4kcGF0aCEpO1xuICAgICAgICAgICAgICAgIGlmIChycGF0aCkgcmV0dXJuIGxpbmsud2l0aFBhdGgocnBhdGgucGF0aCk7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gbGluaztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBTdG9yZSBpdCByZWN1cnNpdmVseSBpbnRvIHRoZSBkYXRhc3RvcmUgZm9yIHF1ZXJ5aW5nLlxuICAgICAgICAgICAgdGhpcy5zdG9yZU1hcmtkb3duKHBhcnNlZCk7XG5cbiAgICAgICAgICAgIC8vIFdyaXRlIGl0IHRvIHRoZSBmaWxlIGNhY2hlIGZvciBmYXN0ZXIgbG9hZHMgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVyLnN0b3JlRmlsZShwYXJzZWQuJHBhdGgsIHBhcnNlZC5qc29uKCkpO1xuXG4gICAgICAgICAgICAvLyBBbmQgZmluYWxseSB0cmlnZ2VyIGFuIHVwZGF0ZS5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInVwZGF0ZVwiLCB0aGlzLnJldmlzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnR5cGUgPT09IFwiY2FudmFzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IENhbnZhcy5mcm9tKHJlc3VsdC5yZXN1bHQsIChsaW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnBhdGggPSB0aGlzLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGluay5wYXRoLCByZXN1bHQucmVzdWx0LiRwYXRoISk7XG4gICAgICAgICAgICAgICAgaWYgKHJwYXRoKSByZXR1cm4gbGluay53aXRoUGF0aChycGF0aC5wYXRoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBsaW5rO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlQ2FudmFzKHBhcnNlZCk7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3Rlci5zdG9yZUZpbGUocGFyc2VkLiRwYXRoLCBwYXJzZWQuanNvbigpKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInVwZGF0ZVwiLCB0aGlzLnJldmlzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvdW50ZXJlZCB1bnJlY29nbml6ZWQgaW1wb3J0IHJlc3VsdCB0eXBlOiBcIiArIChyZXN1bHQgYXMgYW55KS50eXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcmVDYW52YXMoZGF0YTogQ2FudmFzKSB7XG4gICAgICAgIHRoaXMuZGF0YXN0b3JlLnN0b3JlKGRhdGEsIChvYmplY3QsIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICBzdG9yZShvYmplY3QuJGNhcmRzLCAoY2FyZCwgc3RvcmUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FyZCBpbnN0YW5jZW9mIENhbnZhc1RleHRDYXJkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlKGNhcmQuJHNlY3Rpb25zLCAoc2VjdGlvbiwgc3RvcmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlKHNlY3Rpb24uJGJsb2NrcywgKGJsb2NrLCBzdG9yZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jayBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZSBzdG9yZSBmdW5jdGlvbiBmb3Igc3RvcmluZyBsaXN0IGhlaXJhcmNoaWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yZVJlYzogU3Vic3RvcmVyPE1hcmtkb3duTGlzdEl0ZW0+ID0gKGl0ZW0sIHN0b3JlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUoaXRlbS4kZWxlbWVudHMsIHN0b3JlUmVjKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZShibG9jay4kZWxlbWVudHMsIHN0b3JlUmVjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBTdG9yZSBhIG1hcmtkb3duIGRvY3VtZW50LiAqL1xuICAgIHB1YmxpYyBzdG9yZU1hcmtkb3duKGRhdGE6IE1hcmtkb3duUGFnZSkge1xuICAgICAgICB0aGlzLmRhdGFzdG9yZS5zdG9yZShkYXRhLCAob2JqZWN0LCBzdG9yZSkgPT4ge1xuICAgICAgICAgICAgc3RvcmUob2JqZWN0LiRzZWN0aW9ucywgKHNlY3Rpb24sIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUoc2VjdGlvbi4kYmxvY2tzLCAoYmxvY2ssIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9jayBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWN1cnNpdmUgc3RvcmUgZnVuY3Rpb24gZm9yIHN0b3JpbmcgbGlzdCBoZWlyYXJjaGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlUmVjOiBTdWJzdG9yZXI8TWFya2Rvd25MaXN0SXRlbT4gPSAoaXRlbSwgc3RvcmUpID0+IHN0b3JlKGl0ZW0uJGVsZW1lbnRzLCBzdG9yZVJlYyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlKGJsb2NrLiRlbGVtZW50cywgc3RvcmVSZWMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRXZlbnQgcHJvcG9nYXRpb24uXG5cbiAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIHRoZSBpbmRleCB1cGRhdGVzIHRvIGEgbmV3IHJldmlzaW9uLiBUaGlzIGlzIHRoZSBicm9hZGVzdCBwb3NzaWJsZSBkYXRhY29yZSBldmVudC4gKi9cbiAgICBwdWJsaWMgb24oZXZ0OiBcInVwZGF0ZVwiLCBjYWxsYmFjazogKHJldmlzaW9uOiBudW1iZXIpID0+IGFueSwgY29udGV4dD86IGFueSk6IEV2ZW50UmVmO1xuICAgIHB1YmxpYyBvbihldnQ6IFwiaW5pdGlhbGl6ZWRcIiwgY2FsbGJhY2s6ICgpID0+IGFueSwgY29udGV4dD86IGFueSk6IEV2ZW50UmVmO1xuXG4gICAgb24oZXZ0OiBzdHJpbmcsIGNhbGxiYWNrOiAoLi4uZGF0YTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBFdmVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5vbihldnQsIGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCB1c2luZyB0aGUgZXZlbnQgYW5kIG9yaWdpbmFsIGNhbGxiYWNrLiAqL1xuICAgIG9mZihldnQ6IHN0cmluZywgY2FsbGJhY2s6ICguLi5kYXRhOiBhbnkpID0+IGFueSkge1xuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoZXZ0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqIFVuc3Vic2NyaWJlIGZyb20gYW4gZXZlbnQgdXNpbmcgdGhlIGV2ZW50IHJlZmVyZW5jZS4gICovXG4gICAgb2ZmcmVmKHJlZjogRXZlbnRSZWYpIHtcbiAgICAgICAgdGhpcy5ldmVudHMub2ZmcmVmKHJlZik7XG4gICAgfVxuXG4gICAgLyoqIFRyaWdnZXIgYW4gdXBkYXRlIGV2ZW50LiAqL1xuICAgIHByaXZhdGUgdHJpZ2dlcihldnQ6IFwidXBkYXRlXCIsIHJldmlzaW9uOiBudW1iZXIpOiB2b2lkO1xuICAgIC8qKiBUcmlnZ2VyIGFuIGluaXRpYWxpemF0aW9uIGV2ZW50LiAqL1xuICAgIHByaXZhdGUgdHJpZ2dlcihldnQ6IFwiaW5pdGlhbGl6ZWRcIik6IHZvaWQ7XG5cbiAgICAvKiogVHJpZ2dlciBhbiBldmVudC4gKi9cbiAgICBwcml2YXRlIHRyaWdnZXIoZXZ0OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzLnRyaWdnZXIoZXZ0LCAuLi5hcmdzKTtcbiAgICB9XG59XG5cbi8qKiBMaWZlY3ljbGUtcmVzcGVjdGluZyBmaWxlIHF1ZXVlIHdoaWNoIHdpbGwgaW1wb3J0IGZpbGVzLCByZWFkaW5nIHRoZW0gZnJvbSB0aGUgZmlsZSBjYWNoZSBpZiBuZWVkZWQuICovXG5leHBvcnQgY2xhc3MgRGF0YWNvcmVJbml0aWFsaXplciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyoqIE51bWJlciBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnMgdGhlIGluaXRpYWxpemVyIHdpbGwgcGVyZm9ybS4gKi9cbiAgICBzdGF0aWMgQkFUQ0hfU0laRTogbnVtYmVyID0gODtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpbml0aWFsaXplciBzaG91bGQgY29udGludWUgdG8gcnVuLiAqL1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcblxuICAgIC8qKiBRdWV1ZSBvZiBmaWxlcyB0byBzdGlsbCBpbXBvcnQuICovXG4gICAgcXVldWU6IFRGaWxlW107XG4gICAgLyoqIFRoZSBmaWxlcyBhY3RpdmVseSBiZWluZyBpbXBvcnRlZC4gKi9cbiAgICBjdXJyZW50OiBURmlsZVtdO1xuICAgIC8qKiBEZWZlcnJlZCBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gaW1wb3J0aW5nIGlzIGRvbmUuICovXG4gICAgZG9uZTogRGVmZXJyZWQ8SW5pdGlhbGl6YXRpb25TdGF0cz47XG5cbiAgICAvKiogVGhlIHRvdGFsIG51bWJlciBvZiB0YXJnZXQgZmlsZXMgdG8gaW1wb3J0LiAqL1xuICAgIHRhcmdldFRvdGFsOiBudW1iZXI7XG4gICAgLyoqIFRoZSB0aW1lIHRoYXQgaW5pdCBzdGFydGVkIGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgICBzdGFydDogbnVtYmVyO1xuICAgIC8qKiBUb3RhbCBudW1iZXIgb2YgZmlsZXMgdG8gaW1wb3J0LiAqL1xuICAgIGZpbGVzOiBudW1iZXI7XG4gICAgLyoqIFRvdGFsIG51bWJlciBvZiBpbXBvcnRlZCBmaWxlcyBzbyBmYXIuICovXG4gICAgaW5pdGlhbGl6ZWQ6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGltcG9ydGVkIGZpbGVzLiAqL1xuICAgIGltcG9ydGVkOiBudW1iZXI7XG4gICAgLyoqIFRvdGFsIG51bWJlciBvZiBza2lwcGVkIGZpbGVzLiAqL1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGNhY2hlZCBmaWxlcy4gKi9cbiAgICBjYWNoZWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjb3JlOiBEYXRhY29yZSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLmNvcmUudmF1bHQuZ2V0RmlsZXMoKTtcbiAgICAgICAgdGhpcy50YXJnZXRUb3RhbCA9IHRoaXMucXVldWUubGVuZ3RoO1xuICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5xdWV1ZS5sZW5ndGg7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5kb25lID0gZGVmZXJyZWQoKTtcblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdGhpcy5pbXBvcnRlZCA9IHRoaXMuc2tpcHBlZCA9IHRoaXMuY2FjaGVkID0gMDtcbiAgICB9XG5cbiAgICBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIC8vIFF1ZXVlIEJBVENIX1NJWkUgZWxlbWVudHMgZnJvbSB0aGUgcXVldWUgdG8gaW1wb3J0LlxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5ydW5OZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzLiAqL1xuICAgIGZpbmlzaGVkKCk6IFByb21pc2U8SW5pdGlhbGl6YXRpb25TdGF0cz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb25lO1xuICAgIH1cblxuICAgIC8qKiBDYW5jZWwgaW5pdGlhbGl6YXRpb24uICovXG4gICAgb251bmxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZG9uZS5yZWplY3QoXCJJbml0aWFsaXphdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBjb21wbGV0aW5nLlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBQb2xsIGZvciBhbm90aGVyIHRhc2sgdG8gZXhlY3V0ZSBmcm9tIHRoZSBxdWV1ZS4gKi9cbiAgICBwcml2YXRlIHJ1bk5leHQoKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgbWF4IG51bWJlciBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnMgYWxyZWFkeSBydW5uaW5nLlxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlIHx8IHRoaXMuY3VycmVudC5sZW5ndGggPj0gRGF0YWNvcmVJbml0aWFsaXplci5CQVRDSF9TSVpFKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgdG8gZXhlY3V0ZSBhbm90aGVyLlxuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5xdWV1ZS5wb3AoKTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudC5wdXNoKG5leHQpO1xuICAgICAgICAgICAgdGhpcy5pbml0KG5leHQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVSZXN1bHQobmV4dCwgcmVzdWx0KSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVSZXN1bHQobmV4dCwgcmVzdWx0KSk7XG5cbiAgICAgICAgICAgIHRoaXMucnVuTmV4dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFuZXh0ICYmIHRoaXMuY3VycmVudC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gQWxsIHdvcmsgaXMgZG9uZSwgcmVzb2x2ZS5cbiAgICAgICAgICAgIHRoaXMuZG9uZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydCxcbiAgICAgICAgICAgICAgICBmaWxlczogdGhpcy5maWxlcyxcbiAgICAgICAgICAgICAgICBpbXBvcnRlZDogdGhpcy5pbXBvcnRlZCxcbiAgICAgICAgICAgICAgICBza2lwcGVkOiB0aGlzLnNraXBwZWQsXG4gICAgICAgICAgICAgICAgY2FjaGVkOiB0aGlzLmNhY2hlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFByb2Nlc3MgdGhlIHJlc3VsdCBvZiBhbiBpbml0aWFsaXphdGlvbiBhbmQgcXVldWUgbW9yZSBydW5zLiAqL1xuICAgIHByaXZhdGUgaGFuZGxlUmVzdWx0KGZpbGU6IFRGaWxlLCByZXN1bHQ6IEluaXRpYWxpemF0aW9uUmVzdWx0KSB7XG4gICAgICAgIHRoaXMuY3VycmVudC5yZW1vdmUoZmlsZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQrKztcblxuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJza2lwcGVkXCIpIHRoaXMuc2tpcHBlZCsrO1xuICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImltcG9ydGVkXCIpIHRoaXMuaW1wb3J0ZWQrKztcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJjYWNoZWRcIikgdGhpcy5jYWNoZWQrKztcblxuICAgICAgICAvLyBRdWV1ZSBtb3JlIGpvYnMgZm9yIHByb2Nlc3NpbmcuXG4gICAgICAgIHRoaXMucnVuTmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBJbml0aWFsaXplIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwcml2YXRlIGFzeW5jIGluaXQoZmlsZTogVEZpbGUpOiBQcm9taXNlPEluaXRpYWxpemF0aW9uUmVzdWx0PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgbG9hZGluZyBtYXJrZG93biBmaWxlcyBmcm9tIGNhY2hlLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gYXdhaXQgdGhpcy5jb3JlLnBlcnNpc3Rlci5sb2FkRmlsZShmaWxlLnBhdGgpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQudGltZSA+PSBmaWxlLnN0YXQubXRpbWUgJiYgY2FjaGVkLnZlcnNpb24gPT0gdGhpcy5jb3JlLnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5leHRlbnNpb24gPT09IFwibWRcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gTWFya2Rvd25QYWdlLmZyb20oY2FjaGVkLmRhdGEgYXMgSnNvbk1hcmtkb3duUGFnZSwgKGxpbmspID0+IGxpbmspO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcmUuc3RvcmVNYXJrZG93bihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImNhY2hlZFwiIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEb2VzIG5vdCBtYXRjaCBhbiBleGlzdGluZyBpbXBvcnQgdHlwZSwganVzdCByZWxvYWQgbm9ybWFsbHkuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcmUucmVsb2FkKGZpbGUpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImltcG9ydGVkXCIgfTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWNvcmU6IEZhaWxlZCB0byBpbXBvcnQgZmlsZTogXCIsIGV4KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogXCJza2lwcGVkXCIgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIFN0YXRpc3RpY3MgYWJvdXQgYSBzdWNjZXNzZnVsIHZhdWx0IGluaXRpYWxpemF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXphdGlvblN0YXRzIHtcbiAgICAvKiogSG93IGxvbmcgaW5pdGlhbGl6YXRvbiB0b29rIGluIG1pbGlzZWNvbmRzLiAqL1xuICAgIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2VyZSBpbXBvcnRlZCAqL1xuICAgIGZpbGVzOiBudW1iZXI7XG4gICAgLyoqIFRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCB3ZXJlIGxvYWRlZCBhbmQgaW1wb3J0ZWQgdmlhIGJhY2tncm91bmQgd29ya2Vycy4gKi9cbiAgICBpbXBvcnRlZDogbnVtYmVyO1xuICAgIC8qKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2VyZSBza2lwcGVkIGR1ZSB0byBubyBsb25nZXIgZXhpc3Rpbmcgb3Igbm90IGJlaW5nIHJlYWR5LiAqL1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICAvKiogVGhlIG51bWJlciBvZiBmaWxlcyBsb2FkZWQgZnJvbSB0aGUgSW5kZXhlZERCIGNhY2hlLiAqL1xuICAgIGNhY2hlZDogbnVtYmVyO1xufVxuXG4vKiogVGhlIHJlc3VsdCBvZiBpbml0aWFsaXppbmcgYSBmaWxlLiAqL1xuaW50ZXJmYWNlIEluaXRpYWxpemF0aW9uUmVzdWx0IHtcbiAgICBzdGF0dXM6IFwic2tpcHBlZFwiIHwgXCJpbXBvcnRlZFwiIHwgXCJjYWNoZWRcIjtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgRklMRV9UWVBFLCBGaWxlLCBJbmRleGFibGUsIExJTktBQkxFX1RZUEUsIExpbmthYmxlIH0gZnJvbSBcIi4vaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgRXh0cmFjdG9ycywgRklFTERCRUFSSU5HX1RZUEUsIEZpZWxkRXh0cmFjdG9yLCBGaWVsZGJlYXJpbmcgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcblxuLyoqIERhdGFjb3JlIHJlcHJlc2VudGF0aW9uIG9mIGEgZ2VuZXJpYyBmaWxlIHdpdGggbm8gYWRkaXRpb25hbCBwYXJzaW5nLiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNGaWxlIGltcGxlbWVudHMgRmlsZSwgSW5kZXhhYmxlLCBGaWVsZGJlYXJpbmcsIExpbmthYmxlIHtcbiAgICBzdGF0aWMgVFlQRVM6IHN0cmluZ1tdID0gW0ZJTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEUsIExJTktBQkxFX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IEdlbmVyaWNGaWxlLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJGaWxlXCI7XG5cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgY3JlYXRlZC4gKi9cbiAgICAkY3RpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgbW9kaWZpZWQuICovXG4gICAgJG10aW1lOiBEYXRlVGltZTtcbiAgICAvKiogT2JzaWRpYW4tcHJvdmlkZWQgc2l6ZSBvZiB0aGlzIHBhZ2UgaW4gYnl0ZXMuICovXG4gICAgJHNpemU6IG51bWJlcjtcbiAgICAvKiogVGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICAkZXh0ZW5zaW9uOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogc3RyaW5nLCBjdGltZTogRGF0ZVRpbWUsIG10aW1lOiBEYXRlVGltZSwgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuJHBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLiRjdGltZSA9IGN0aW1lO1xuICAgICAgICB0aGlzLiRtdGltZSA9IG10aW1lO1xuICAgICAgICB0aGlzLiRzaXplID0gc2l6ZTtcblxuICAgICAgICBjb25zdCBsYXN0RG90ID0gcGF0aC5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgICAgIHRoaXMuJGV4dGVuc2lvbiA9IGxhc3REb3QgPCAwID8gXCJcIiA6IHBhdGguc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcbiAgICB9XG5cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gR2VuZXJpY0ZpbGUuRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gR2VuZXJpY0ZpbGUuRklFTERfREVGKHRoaXMsIGtleSk/LlswXTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkLiAqL1xuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogVW5pcXVlIElEIGZvciB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgJGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZmlsZSBmb3IgdGhlIGZpbGUgaXMgdGhlIGZpbGUuICovXG4gICAgZ2V0ICRmaWxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIC8qKiBBIGxpbmsgdG8gdGhlIGZpbGUuICovXG4gICAgZ2V0ICRsaW5rKCk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5maWxlKHRoaXMuJHBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8R2VuZXJpY0ZpbGU+ID0gRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCk7XG59XG4iLCAiaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiQGRhdGFzdHJ1Y3R1cmVzLWpzL3F1ZXVlXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBURmlsZSwgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IERlZmVycmVkLCBkZWZlcnJlZCB9IGZyb20gXCJ1dGlscy9kZWZlcnJlZFwiO1xuXG4vKiogUXVldWVzIHVwIGxvYWRzIG9mIGZpbGVzIHRvIHJlZHVjZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBsb2Fkcy4gKi9cbmV4cG9ydCBjbGFzcyBFbWJlZFF1ZXVlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICAvKiogU2V0IG9mIHBlbmRpbmcgbG9hZHMuICovXG4gICAgcHJpdmF0ZSBxdWV1ZTogUXVldWU8VEZpbGU+ID0gbmV3IFF1ZXVlKCk7XG4gICAgLyoqIFNldCBvZiBwcm9taXNlcyB3YWl0aW5nIG9uIGVhY2ggcGF0aC4gKi9cbiAgICBwcml2YXRlIHByb21pc2VzOiBNYXA8c3RyaW5nLCBEZWZlcnJlZDxzdHJpbmc+W10+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBBY3RpdmUgc2V0IG9mIGxvYWRzLiAqL1xuICAgIHByaXZhdGUgYWN0aXZlOiBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBJZiB0cnVlLCBwcmV2ZW50IGFueSBmdXJ0aGVyIGxvYWRzLiAqL1xuICAgIHByaXZhdGUgc2h1dGRvd246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmF1bHQ6IFZhdWx0LCBwdWJsaWMgY29uY3VycmVuY3k6ICgpID0+IG51bWJlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIGEgZmlsZSBhc3luY2hyb25vdXNseSwgY29udHJvbGxpbmcgY29uY3VycmVuY3kgdG8gcHJldmVudCB0b28gbWFueSBmaWxlcyBiZWluZyBsb2FkZWQgc2ltdWx0YW5lb3VzbHkuICovXG4gICAgcHVibGljIGFzeW5jIHJlYWQoZmlsZTogVEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy5zaHV0ZG93bikgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiRW1iZWQgcXVldWUgaXMgc2h1dGRvd24uXCIpO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBkZWZlcnJlZDxzdHJpbmc+KCk7XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlbid0IGFscmVhZHkgaW4gdGhlIHF1ZXVlLCBhZGQgb3Vyc2VsdmVzIHRvIHF1ZXVlLiBPdGhlcndpc2UganVzdCBhcHBlbmQgb3V0c2VsZnMgdG8gdGhlIGludGVyZXN0ZWQgd2F0Y2hlciBmb3IgdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoIXRoaXMucHJvbWlzZXMuaGFzKGZpbGUucGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMucXVldWUucHVzaChmaWxlKTtcbiAgICAgICAgICAgIHRoaXMucHJvbWlzZXMuc2V0KGZpbGUucGF0aCwgW3Byb21pc2VdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvbWlzZXMuZ2V0KGZpbGUucGF0aCkhLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIC8qKiBTY2hlZHVsZSBtb3JlIGxvYWRzIGZyb20gdGhlIHF1ZXVlIGludG8gdGhlIGFjdGl2ZSBzZXQgaWYgdGhlcmUgaXMgYXZhaWxhYmxlIHNwYWNlLiAqL1xuICAgIHByaXZhdGUgc2NoZWR1bGUoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmFjdGl2ZS5zaXplIDwgdGhpcy5jb25jdXJyZW5jeSgpICYmIHRoaXMucXVldWUuc2l6ZSgpID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMucXVldWUucG9wKCkhO1xuXG4gICAgICAgICAgICBjb25zdCByZWFkID0gdGhpcy52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KGZpbGUucGF0aCwgcmVhZCk7XG5cbiAgICAgICAgICAgIHJlYWQudGhlbigoY29udGVudCkgPT4gdGhpcy5maW5pc2goZmlsZSwgUmVzdWx0LnN1Y2Nlc3MoY29udGVudCkpKS5jYXRjaCgoZXJyb3IpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2goZmlsZSwgUmVzdWx0LmZhaWx1cmUoZXJyb3IpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb21tdW5pY2F0ZSB0aGUgcmVzdWx0IG9mIGEgbG9hZGVkIGZpbGUgYW5kIHRoZW4gc2NoZWR1bGUgbW9yZSBmaWxlcyB0byBiZSBsb2FkZWQuICovXG4gICAgcHJpdmF0ZSBmaW5pc2goZmlsZTogVEZpbGUsIHJlc3VsdDogUmVzdWx0PHN0cmluZywgYW55Pikge1xuICAgICAgICB0aGlzLmFjdGl2ZS5kZWxldGUoZmlsZS5wYXRoKTtcblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMucHJvbWlzZXMuZ2V0KGZpbGUucGF0aCkgPz8gW107XG4gICAgICAgIHRoaXMucHJvbWlzZXMuZGVsZXRlKGZpbGUucGF0aCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlc29sdmUocmVzdWx0LnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlamVjdChyZXN1bHQuZXJyb3IpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICB9XG5cbiAgICAvKiogQ2FuY2VsbCBhbGwgb3V0c3RhbmRpbmcgbG9hZHMgb24gdW5sb2FkLiAqL1xuICAgIHB1YmxpYyBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVqZWN0IGFsbCBvdXRzdGFuZGluZyBsb2Fkcy5cbiAgICAgICAgZm9yIChjb25zdCBwcm9taXNlcyBvZiB0aGlzLnByb21pc2VzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlamVjdChcIkVtYmVkIHF1ZXVlIGlzIHNodXR0aW5nIGRvd24uXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2h1dGRvd24gPSB0cnVlO1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBFeHRyYWN0b3JzLCBGaWVsZCwgRmllbGRiZWFyaW5nLCBGSUVMREJFQVJJTkdfVFlQRSwgRmllbGRFeHRyYWN0b3IgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgRklMRV9UWVBFLCBJbmRleGFibGUsIExpbmthYmxlLCBMSU5LQUJMRV9UWVBFLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIFRBR0dBQkxFX1RZUEUgfSBmcm9tIFwiLi9pbmRleGFibGVcIjtcbmltcG9ydCB7XG4gICAgQ2FyZERpbWVuc2lvbnMsXG4gICAgQ2FyZFBvcyxcbiAgICBKc29uQmFzZUNhbnZhc0NhcmQsXG4gICAgSnNvbkNhbnZhcyxcbiAgICBKc29uQ2FudmFzQ2FyZCxcbiAgICBKc29uQ2FudmFzRmlsZUNhcmQsXG4gICAgSnNvbkNhbnZhc1RleHRDYXJkLFxuICAgIEpzb25DYW52YXNXZWJDYXJkLFxufSBmcm9tIFwiLi9qc29uL2NhbnZhc1wiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQge1xuICAgIEZyb250bWF0dGVyRW50cnksXG4gICAgTGlua05vcm1hbGl6ZXIsXG4gICAgTWFya2Rvd25TZWN0aW9uLFxuICAgIE5PT1BfTk9STUFMSVpFUixcbiAgICBub3JtYWxpemVMaW5rcyxcbiAgICB2YWx1ZUZyb250bWF0dGVyRW50cnksXG59IGZyb20gXCIuL21hcmtkb3duXCI7XG5pbXBvcnQgeyBJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBGaWxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcblxuLyoqIEEgY2FudmFzIGZpbGUsIGNvbnNpc3Rpbmcgb2YgYSBzZXQgb2YgY2FudmFzIGNhcmRzLiAqL1xuZXhwb3J0IGNsYXNzIENhbnZhcyBpbXBsZW1lbnRzIExpbmthYmxlLCBGaWxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbRklMRV9UWVBFLCBcImNhbnZhc1wiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQUJMRV9UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gQ2FudmFzLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJDYW52YXNcIjtcblxuICAgICRjdGltZTogRGF0ZVRpbWU7XG4gICAgJG10aW1lOiBEYXRlVGltZTtcblxuICAgICRleHRlbnNpb246IHN0cmluZyA9IFwiY2FudmFzXCI7XG5cbiAgICBnZXQgJGZpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIGdldCAkaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIGdldCAkbGluaygpIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZSh0aGlzLiRwYXRoKTtcbiAgICB9XG5cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgICRjYXJkczogQmFzZUNhbnZhc0NhcmRbXSA9IFtdO1xuICAgICRzaXplOiBudW1iZXIgPSAwO1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAkbGlua3M6IExpbmtbXTtcbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxDYW52YXM+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgZ2V0IGZpZWxkcygpOiBGaWVsZFtdIHtcbiAgICAgICAgcmV0dXJuIENhbnZhcy5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gQ2FudmFzLkZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF07XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbkNhbnZhcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkY2FyZHM6IHRoaXMuJGNhcmRzLm1hcCgoeCkgPT4geC5qc29uKCkpIGFzIEpzb25DYW52YXNDYXJkW10sXG4gICAgICAgICAgICAkY3RpbWU6IHRoaXMuJGN0aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkbXRpbWU6IHRoaXMuJG10aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkc2l6ZTogdGhpcy4kc2l6ZSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy4kbGlua3MsXG4gICAgICAgICAgICAkcGF0aDogdGhpcy4kcGF0aCxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25DYW52YXMsIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyID0gTk9PUF9OT1JNQUxJWkVSKTogQ2FudmFzIHtcbiAgICAgICAgY29uc3QgY2FyZHMgPSByYXcuJGNhcmRzXG4gICAgICAgICAgICAubWFwKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzLiR0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0LWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNUZXh0Q2FyZC5mcm9tKHMsIHJhdy4kcGF0aCwgbm9ybWFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmaWxlLWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNGaWxlQ2FyZC5mcm9tKHMpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwid2ViLWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNXZWJDYXJkLmZyb20ocywgcmF3LiRwYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCk6IHggaXMgQ2FudmFzVGV4dENhcmQgPT4gISF4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW52YXMoe1xuICAgICAgICAgICAgJGNhcmRzOiBjYXJkcyxcbiAgICAgICAgICAgICRjdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJGN0aW1lKSxcbiAgICAgICAgICAgICRtdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJG10aW1lKSxcbiAgICAgICAgICAgICRzaXplOiByYXcuJHNpemUsXG4gICAgICAgICAgICAkZXh0ZW5zaW9uOiBcImNhbnZhc1wiLFxuICAgICAgICAgICAgJHBhdGg6IHJhdy4kcGF0aCxcbiAgICAgICAgICAgICRsaW5rczogcmF3LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkaW5maWVsZHM6IHJhdy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkdGFnczogcmF3LiR0YWdzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzdGF0aWMgRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxDYW52YXM+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbmxpbmVGaWVsZHMoKGYpID0+IGYuJGluZmllbGRzKSxcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKClcbiAgICApO1xufVxuXG4vKiogQWxsIHN1cHBvcnRlZCBjYW52YXMgY2FyZCB0eXBlcy4gKi9cbmV4cG9ydCB0eXBlIENhbnZhc0NhcmQgPSBDYW52YXNUZXh0Q2FyZCB8IENhbnZhc0ZpbGVDYXJkIHwgQ2FudmFzV2ViQ2FyZDtcblxuLyoqIFNoYXJlZCBtZXRhZGF0YSBmb3IgYWxsIGNhbnZhcyBjYXJkcy4gKi9cbmFic3RyYWN0IGNsYXNzIEJhc2VDYW52YXNDYXJkIGltcGxlbWVudHMgSW5kZXhhYmxlLCBMaW5rYWJsZSB7XG4gICAgYWJzdHJhY3QgJHR5cGVzOiBzdHJpbmdbXTtcbiAgICBhYnN0cmFjdCAkdHlwZW5hbWU6IHN0cmluZztcbiAgICBhYnN0cmFjdCByZWFkb25seSAkdHlwZTogc3RyaW5nO1xuXG4gICAgJHJldmlzaW9uPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRwb3NpdGlvbjogQ2FyZFBvcztcbiAgICAkZGltZW5zaW9uczogQ2FyZERpbWVuc2lvbnM7XG4gICAgJHBhcmVudD86IEluZGV4YWJsZTtcbiAgICAkZmlsZTogc3RyaW5nO1xuICAgICRjb2xvcj86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPEJhc2VDYW52YXNDYXJkPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xuICAgIH1cblxuICAgIGdldCAkbGluaygpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZSh0aGlzLiRmaWxlKS53aXRoQmxvY2sodGhpcy4kaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25CYXNlQ2FudmFzQ2FyZCB7XG4gICAgICAgIGNvbnN0IHsgJGlkLCAkcG9zaXRpb24sICRjb2xvciwgJGRpbWVuc2lvbnMsICRmaWxlLCAkbGluayB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpZCxcbiAgICAgICAgICAgICRwb3NpdGlvbixcbiAgICAgICAgICAgICRjb2xvcixcbiAgICAgICAgICAgICRkaW1lbnNpb25zLFxuICAgICAgICAgICAgJGZpbGUsXG4gICAgICAgICAgICAkbGluazogJGxpbmsudG9PYmplY3QoKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8qKiBDYW52YXMgY2FyZCB3aXRoIG1hcmtkb3duIHRleHQgaW4gaXQuICovXG5leHBvcnQgY2xhc3MgQ2FudmFzVGV4dENhcmQgZXh0ZW5kcyBCYXNlQ2FudmFzQ2FyZCBpbXBsZW1lbnRzIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgSW5kZXhhYmxlLCBGaWVsZGJlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcImNhbnZhcy1jYXJkXCIsIFwibWFya2Rvd25cIiwgXCJjYW52YXMtdGV4dC1jYXJkXCIsIFRBR0dBQkxFX1RZUEUsIExJTktBQkxFX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBDYW52YXNUZXh0Q2FyZC5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiVGV4dCBDYXJkXCI7XG4gICAgJHR5cGU6IHN0cmluZyA9IFwiY2FudmFzLWNhcmRcIjtcbiAgICAkaWQ6IHN0cmluZztcblxuICAgICRmaWxlOiBzdHJpbmc7XG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgICR0aXRsZTogc3RyaW5nO1xuICAgICRwYXJlbnQ/OiBJbmRleGFibGU7XG4gICAgJHJldmlzaW9uPzogbnVtYmVyO1xuICAgICRpbmZpZWxkczogUmVjb3JkPHN0cmluZywgSW5saW5lRmllbGQ+O1xuICAgICRmcm9udG1hdHRlcj86IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+O1xuXG4gICAgJGRpbWVuc2lvbnM6IENhcmREaW1lbnNpb25zO1xuICAgICRzZWN0aW9uczogTWFya2Rvd25TZWN0aW9uW107XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8Q2FudmFzVGV4dENhcmQ+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cblxuICAgIGdldCBmaWVsZHMoKTogRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBDYW52YXNUZXh0Q2FyZC5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gQ2FudmFzVGV4dENhcmQuRklFTERfREVGKHRoaXMsIGtleSk/LlswXTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uQ2FudmFzVGV4dENhcmQge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMuJHRhZ3MsXG4gICAgICAgICAgICAkdHlwZTogXCJ0ZXh0LWNhcmRcIixcbiAgICAgICAgICAgICRzZWN0aW9uczogdGhpcy4kc2VjdGlvbnMubWFwKChhKSA9PiBhLmpzb24oKSksXG4gICAgICAgIH0pIGFzIEpzb25DYW52YXNUZXh0Q2FyZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25DYW52YXNUZXh0Q2FyZCwgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUikge1xuICAgICAgICBsZXQgJHNlY3Rpb25zID0gcmF3LiRzZWN0aW9ucy5tYXAoKHMpID0+IE1hcmtkb3duU2VjdGlvbi5mcm9tKHMsIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW52YXNUZXh0Q2FyZCh7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogcmF3LiRpZCxcbiAgICAgICAgICAgICRzZWN0aW9ucyxcbiAgICAgICAgICAgICRsaW5rczogcmF3LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkZGltZW5zaW9uczogcmF3LiRkaW1lbnNpb25zLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiByYXcuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJGZyb250bWF0dGVyOiByYXcuJGZyb250bWF0dGVyXG4gICAgICAgICAgICAgICAgPyBtYXBPYmplY3RWYWx1ZXMocmF3LiRmcm9udG1hdHRlciwgKGZtKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUZyb250bWF0dGVyRW50cnkoZm0pLCBub3JtYWxpemVyKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICRpbmZpZWxkczogcmF3LiRpbmZpZWxkcyxcbiAgICAgICAgICAgICR0YWdzOiByYXcuJHRhZ3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPENhbnZhc1RleHRDYXJkPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpLFxuICAgICAgICBFeHRyYWN0b3JzLmZyb250bWF0dGVyKChmKSA9PiBmLiRmcm9udG1hdHRlcilcbiAgICApO1xufVxuXG4vKiogQ2FudmFzIGNhcmQgdGhhdCBpcyBqdXN0IGEgZmlsZSBlbWJlZGRpbmcuICovXG5leHBvcnQgY2xhc3MgQ2FudmFzRmlsZUNhcmQgZXh0ZW5kcyBCYXNlQ2FudmFzQ2FyZCBpbXBsZW1lbnRzIEluZGV4YWJsZSB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wiY2FudmFzLWNhcmRcIiwgXCJtYXJrZG93blwiLCBcImNhbnZhcy1maWxlLWNhcmRcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IENhbnZhc1RleHRDYXJkLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJGaWxlIENhcmRcIjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxDYW52YXNGaWxlQ2FyZD4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgJHR5cGU6IHN0cmluZyA9IFwiZmlsZS1jYXJkXCI7XG4gICAgJGxpbmtlZEZpbGU6IHN0cmluZztcblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25DYW52YXNGaWxlQ2FyZCB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN1cGVyLmpzb24oKSwge1xuICAgICAgICAgICAgJGxpbmtlZEZpbGU6IHRoaXMuJGxpbmtlZEZpbGUsXG4gICAgICAgICAgICAkdHlwZTogXCJmaWxlLWNhcmRcIixcbiAgICAgICAgfSkgYXMgSnNvbkNhbnZhc0ZpbGVDYXJkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbkNhbnZhc0ZpbGVDYXJkKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FudmFzRmlsZUNhcmQoe1xuICAgICAgICAgICAgJGZpbGU6IHJhdy4kZmlsZSxcbiAgICAgICAgICAgICRpZDogcmF3LiRpZCxcbiAgICAgICAgICAgICRwb3NpdGlvbjogcmF3LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRkaW1lbnNpb25zOiByYXcuJGRpbWVuc2lvbnMsXG4gICAgICAgICAgICAkbGlua2VkRmlsZTogcmF3LiRsaW5rZWRGaWxlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW52YXNXZWJDYXJkIGV4dGVuZHMgQmFzZUNhbnZhc0NhcmQgaW1wbGVtZW50cyBJbmRleGFibGUge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcImNhbnZhcy1jYXJkXCIsIFwibWFya2Rvd25cIiwgXCJjYW52YXMtd2ViLWNhcmRcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IENhbnZhc1RleHRDYXJkLlRZUEVTO1xuICAgIHJlYWRvbmx5ICR0eXBlOiBzdHJpbmcgPSBcIndlYi1jYXJkXCI7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIldlYiBDYXJkXCI7XG5cbiAgICAkdXJsOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8Q2FudmFzV2ViQ2FyZD4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbkNhbnZhc1dlYkNhcmQge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICR1cmw6IHRoaXMuJHVybCxcbiAgICAgICAgICAgICR0eXBlOiBcIndlYi1jYXJkXCIsXG4gICAgICAgIH0pIGFzIEpzb25DYW52YXNXZWJDYXJkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbkNhbnZhc1dlYkNhcmQsIGZpbGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IENhbnZhc1dlYkNhcmQoe1xuICAgICAgICAgICAgJGRpbWVuc2lvbnM6IHJhdy4kZGltZW5zaW9ucyxcbiAgICAgICAgICAgICRwb3NpdGlvbjogcmF3LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiByYXcuJGlkLFxuICAgICAgICAgICAgJHVybDogcmF3LiR1cmwsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsICIvKiogQWxsIGRhdGFjb3JlIHNldHRpbmdzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5ncyB7XG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB0aGUgaW1wb3J0ZXIgd2lsbCB1c2UgZm9yIGltcG9ydGluZy4gKi9cbiAgICBpbXBvcnRlck51bVRocmVhZHM6IG51bWJlcjtcbiAgICAvKiogVGhlIENQVSB1dGlsaXphdGlvbiAoYmV0d2VlbiAwLjEgYW5kIDEuMCkgdGhhdCBpbXBvcnRlciB0aHJlYWRzIHNob3VsZCB1c2UuICovXG4gICAgaW1wb3J0ZXJVdGlsaXphdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqIEFyZSBKUyB2aWV3cyBlbmFibGVkPyAqL1xuICAgIGVuYWJsZUpzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB2aWV3cyBhcmUgcGFnZWQgYnkgZGVmYXVsdC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLFxuICAgICAqIHNpbmNlIHNob3dpbmcgaHVuZHJlZHMgb3IgdGhvdXNhbmRzIG9mIHJlc3VsdHMgY2FuIGJlIGZhaXJseSBzbG93IVxuICAgICAqL1xuICAgIGRlZmF1bHRQYWdpbmdFbmFibGVkOiBib29sZWFuO1xuICAgIC8qKiBEZWZhdWx0IHBhZ2luZyBzaXplIGZvciBhbGwgdmlld3MgKG51bWJlciBvZiBlbnRyaWVzIHBlciBwYWdlLikgKi9cbiAgICBkZWZhdWx0UGFnZVNpemU6IG51bWJlcjtcbiAgICAvKiogSWYgc2V0LCB2aWV3cyB3aWxsIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSB2aWV3IG9uIHBhZ2UgY2hhbmdlcy4gKi9cbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2U6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIGRlcHRoIHRoYXQgb2JqZWN0cyB3aWxsIGJlIHJlbmRlcmVkIHRvIChpLmUuLCBob3cgbWFueSBsZXZlbHMgb2Ygc3VicHJvcGVydGllc1xuICAgICAqIHdpbGwgYmUgcmVuZGVyZWQgYnkgZGVmYXVsdCkuIFRoaXMgYXZvaWRzIGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8gc2VsZiByZWZlcmVudGlhbCBvYmplY3RzXG4gICAgICogYW5kIGFsc28gZW5zdXJlcyB0aGF0IHJlbmRlcmluZyBvYmplY3RzIGlzIGFjY2VwdGFibHkgcGVyZm9ybWFudC5cbiAgICAgKi9cbiAgICBtYXhSZWN1cnNpdmVSZW5kZXJEZXB0aDogbnVtYmVyO1xuXG4gICAgLyoqIFRoZSBkZWZhdWx0IGZvcm1hdCB0aGF0IGRhdGVzIGFyZSByZW5kZXJlZCBpbiAodXNpbmcgbHV4b24ncyBtb21lbnQtbGlrZSBmb3JtYXR0aW5nKS4gKi9cbiAgICBkZWZhdWx0RGF0ZUZvcm1hdDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGVmYXVsdCBmb3JtYXQgdGhhdCBkYXRlLXRpbWVzIGFyZSByZW5kZXJlZCBpbiAodXNpbmcgbHV4b25zIG1vbWVudC1saWtlIGZvcm1hdHRpbmcpLiAqL1xuICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdDogc3RyaW5nO1xuICAgIC8qKiBNYXJrZG93biB0ZXh0IGZvciBob3cgdG8gcmVuZGVyIG51bGwgdmFsdWVzIGluIHRhYmxlcyBvciBzaW1pbGFyLiAqL1xuICAgIHJlbmRlck51bGxBczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaW5kZXggaW5saW5lIGZpZWxkcyBieSBkZWZhdWx0LiBJbmxpbmUgZmllbGQgcGFyc2luZyByZXF1aXJlcyBhIGZ1bGwgc2NhbiBvZiB0aGUgZG9jdW1lbnQsIHdoaWNoIGNhbiBtYWtlIGluZGV4aW5nIHRha2UgMi0zeCBsb25nZXIuICovXG4gICAgaW5kZXhJbmxpbmVGaWVsZHM6IGJvb2xlYW47XG5cbiAgICAvKiogV2hldGhlciB0byBpbmRleCBsaXN0IGFuZCB0YXNrIGl0ZW0gdGV4dCBhbmQgc3RhdGVzLiBJbmRleGluZyBsaXN0cyAmIHRhc2tzIHJlcXVpcmVzIHNvbWUgYWRkaXRpb25hbCByZWdleCBwYXJzaW5nIHdoaWNoIG1ha2VzIGluZGV4aW5nIG1vZGVzdGx5IHNsb3dlci4gKi9cbiAgICBpbmRleExpc3RJdGVtczogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGNoZWNrIHRhc2sgaXRlbXMgb2ZmIHJlY3Vyc2l2ZWx5IGluIGRhdGFjb3JlIHZpZXdzICovXG4gICAgcmVjdXJzaXZlVGFza0NvbXBsZXRpb246IGJvb2xlYW47XG5cbiAgICAvKiogTmFtZSBvZiB0aGUgaW5saW5lIGZpZWxkIGluIHdoaWNoIHRvIHN0b3JlIGNvbXBsZXRpb24gZGF0ZS90aW1lICovXG4gICAgdGFza0NvbXBsZXRpb25UZXh0OiBzdHJpbmc7XG5cbiAgICAvKiogSWYgZW5hYmxlZCwgYXV0b21hdGljIGNvbXBsZXRpb25zIHdpbGwgdXNlIGVtb2ppIHNob3J0aGFuZCBcdTI3MDUgWVlZWS1NTS1ERCBpbnN0ZWFkIG9mIFtjb21wbGV0aW9uOjogZGF0ZV0uICovXG4gICAgdGFza0NvbXBsZXRpb25Vc2VFbW9qaVNob3J0aGFuZDogYm9vbGVhbjtcbn1cblxuLyoqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwbHVnaW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogUmVhZG9ubHk8U2V0dGluZ3M+ID0gT2JqZWN0LmZyZWV6ZTxTZXR0aW5ncz4oe1xuICAgIGltcG9ydGVyTnVtVGhyZWFkczogMixcbiAgICBpbXBvcnRlclV0aWxpemF0aW9uOiAwLjc1LFxuXG4gICAgZW5hYmxlSnM6IGZhbHNlLFxuXG4gICAgZGVmYXVsdFBhZ2luZ0VuYWJsZWQ6IHRydWUsXG4gICAgZGVmYXVsdFBhZ2VTaXplOiA1MCxcbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2U6IGZhbHNlLFxuXG4gICAgbWF4UmVjdXJzaXZlUmVuZGVyRGVwdGg6IDUsXG5cbiAgICBkZWZhdWx0RGF0ZUZvcm1hdDogXCJNTU1NIGRkLCB5eXl5XCIsXG4gICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0OiBcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcIixcblxuICAgIHJlbmRlck51bGxBczogXCItXCIsXG5cbiAgICBpbmRleElubGluZUZpZWxkczogdHJ1ZSxcbiAgICBpbmRleExpc3RJdGVtczogdHJ1ZSxcbiAgICByZWN1cnNpdmVUYXNrQ29tcGxldGlvbjogZmFsc2UsXG4gICAgdGFza0NvbXBsZXRpb25UZXh0OiBcImNvbXBsZXRlZEF0XCIsXG4gICAgdGFza0NvbXBsZXRpb25Vc2VFbW9qaVNob3J0aGFuZDogZmFsc2UsXG59KTtcbiIsICJpbXBvcnQgeyBkZWJvdW5jZSwgSXRlbVZpZXcsIE1hcmtkb3duUmVuZGVyQ2hpbGQsIE1lbnUsIFZpZXdTdGF0ZVJlc3VsdCwgV29ya3NwYWNlTGVhZiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UgfSBmcm9tIFwidXRpbHMvamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YWNvcmVKU1JlbmRlcmVyLCBSZWFjdFJlbmRlcmVyIH0gZnJvbSBcIi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YWNvcmVMb2NhbEFwaSB9IGZyb20gXCJhcGkvbG9jYWwtYXBpXCI7XG5pbXBvcnQgeyBEYXRhY29yZUFwaSB9IGZyb20gXCJhcGkvYXBpXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgR3JvdXAsIFN0YWNrIH0gZnJvbSBcImFwaS91aS9sYXlvdXRcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IFRleHRib3gsIFZhbmlsbGFTZWxlY3QgfSBmcm9tIFwiYXBpL3VpL2Jhc2ljc1wiO1xuaW1wb3J0IHsgdXNlSW5kZXhVcGRhdGVzIH0gZnJvbSBcIi4vaG9va3NcIjtcbmltcG9ydCB7IERBVEFDT1JFX0NPTlRFWFQsIEVycm9yTWVzc2FnZSB9IGZyb20gXCIuL21hcmtkb3duXCI7XG5pbXBvcnQgU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3RcIjtcblxuLyoqIEtleSBmb3IgZGF0YWNvcmUgSlMgcXVlcnkgdmlld3MuICovXG5leHBvcnQgY29uc3QgVklFV19UWVBFX0RBVEFDT1JFSlMgPSBcImRhdGFjb3JlanMtdmlld1wiO1xuXG4vKiogU3RvcmVzIHRoZSBjdXJyZW50IE9ic2lkaWFuIHZpZXcgb2JqZWN0LCBzbyBpdCBjYW4gYmUgbWFuaXB1bGF0ZWQgZnJvbSByZWFjdC4gKi9cbmNvbnN0IENVU1RPTV9WSUVXX0NPTlRFWFQgPSBjcmVhdGVDb250ZXh0PERhdGFjb3JlUXVlcnlWaWV3Pih1bmRlZmluZWQhKTtcblxuLyoqIFByb3ZpZGVzIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgZGF0YWNvcmUgdmlldyBwYW5lLiAqL1xuZnVuY3Rpb24gRGF0YWNvcmVWaWV3U2V0dGluZ3MoKSB7XG4gICAgY29uc3QgdmlldyA9IHVzZUNvbnRleHQoQ1VTVE9NX1ZJRVdfQ09OVEVYVCkgYXMgRGF0YWNvcmVRdWVyeVZpZXc7XG4gICAgY29uc3Qgc2V0Vmlld1N0YXRlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gZGVib3VuY2UoKHN0YXRlOiBQYXJ0aWFsPERhdGFjb3JlVmlld1N0YXRlPikgPT4gdmlldy5zZXRTdGF0ZShzdGF0ZSwgeyBoaXN0b3J5OiBmYWxzZSB9KSwgNTAwKSxcbiAgICAgICAgW3ZpZXddXG4gICAgKTtcblxuICAgIGNvbnN0IFtsb2NhbFN0YXRlLCBzZXRMb2NhbFN0YXRlXSA9IHVzZVN0YXRlKHZpZXcuZ2V0U3RhdGUoKSk7XG4gICAgY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHN0YXRlOiBQYXJ0aWFsPERhdGFjb3JlVmlld1N0YXRlPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluYWxTdGF0ZSA9IHsgLi4ubG9jYWxTdGF0ZSwgLi4uc3RhdGUgfTtcbiAgICAgICAgICAgIC8vIE5vdCBkZWJvdW5jZWQuXG4gICAgICAgICAgICBzZXRMb2NhbFN0YXRlKGZpbmFsU3RhdGUpO1xuXG4gICAgICAgICAgICAvLyBEZWJvdW5jZWQuXG4gICAgICAgICAgICBzZXRWaWV3U3RhdGUoZmluYWxTdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFtsb2NhbFN0YXRlLCBzZXRMb2NhbFN0YXRlLCB2aWV3XVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8U3RhY2sgYWxpZ249XCJzdHJldGNoXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZS1pY29uXCIgc3R5bGU9XCJhbGlnbi1zZWxmOiBzdGFydFwiIG9uQ2xpY2s9eygpID0+IHZpZXcudmlldyhcInNjcmlwdFwiKX0+XG4gICAgICAgICAgICAgICAge0JBQ0tfQlVUVE9OfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8R3JvdXAganVzdGlmeT1cInNwYWNlLWJldHdlZW5cIiBhbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoNj5WaWV3IFRpdGxlPC9oNj5cbiAgICAgICAgICAgICAgICA8VGV4dGJveFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZpZXcuZ2V0U3RhdGUoKS50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTdGF0ZSh7IHRpdGxlOiBlLmN1cnJlbnRUYXJnZXQudmFsdWUgYXMgc3RyaW5nIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgPEdyb3VwIGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+VmlldyBUeXBlPC9oNj5cbiAgICAgICAgICAgICAgICA8VmFuaWxsYVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZpZXcuZ2V0U3RhdGUoKS5zb3VyY2VUeXBlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtMQU5HVUFHRV9PUFRJT05TfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bG9jYWxTdGF0ZS5zb3VyY2VUeXBlfVxuICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsocykgPT4gc2V0U3RhdGUoeyBzb3VyY2VUeXBlOiBzIGFzIFNjcmlwdExhbmd1YWdlIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgPEdyb3VwIGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+U2NyaXB0L1ZpZXcgc291cmNlPC9oNj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgcmVzaXplOiBcInZlcnRpY2FsXCIsIG1pbldpZHRoOiBcIjc1JVwiLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiIH19XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17bG9jYWxTdGF0ZS5zY3JpcHR9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtsb2NhbFN0YXRlLnNjcmlwdH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTdGF0ZSh7IHNjcmlwdDogZS5jdXJyZW50VGFyZ2V0LnZhbHVlIGFzIHN0cmluZyB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgICAgIDxHcm91cCBqdXN0aWZ5PVwic3BhY2UtYmV0d2VlblwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPFN0YWNrPlxuICAgICAgICAgICAgICAgICAgICA8aDY+Q3VycmVudCBGaWxlPC9oNj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlRoZSBwYXRoIHJldHVybmVkIGJ5IGZ1bmN0aW9ucyBsaWtlIGB1c2VDdXJyZW50UGF0aGAgaW4gdGhpcyB2aWV3PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L1N0YWNrPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWluV2lkdGg6IFwiNTAlXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxDdXJyZW50RmlsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2xvY2FsU3RhdGUuY3VycmVudEZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHNldFN0YXRlKHsgY3VycmVudEZpbGU6IHYgfSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICA8L1N0YWNrPlxuICAgICk7XG59XG5cbi8qKiBSZWFjdCBjb21wb25lbnQgZm9yIGFzeW5jaHJvbm91c2x5IHNob3dpbmcgdGhlIGFjdGl2ZSBzZXQgb2YgY3VycmVudCBmaWxlcyB0byBzZWxlY3Qgb25lIGZyb20uICovXG5mdW5jdGlvbiBDdXJyZW50RmlsZVNlbGVjdG9yKHtcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgb25DaGFuZ2UsXG59OiB7XG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbn0pIHtcbiAgICBjb25zdCBjb3JlID0gdXNlQ29udGV4dChEQVRBQ09SRV9DT05URVhUKTtcbiAgICBjb25zdCByZXZpc2lvbiA9IHVzZUluZGV4VXBkYXRlcyhjb3JlLCB7IGRlYm91bmNlOiAyMDAwIH0pO1xuXG4gICAgLy8gQ2FjaGVkIGxpc3Qgb2YgcmVsZXZhbnQgZmlsZXMsIHdoaWNoIGlzIG9ubHkgcmVjb21wdXRlZCBvbiB2YXVsdCBjaGFuZ2VzLlxuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvcmUudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpLm1hcCgoZikgPT4gKHsgbGFiZWw6IGYucGF0aCwgdmFsdWU6IGYucGF0aCB9KSk7XG4gICAgfSwgW3JldmlzaW9uXSk7XG5cbiAgICBjb25zdCBkZWZhdWx0T3B0aW9uID0gZGVmYXVsdFZhbHVlXG4gICAgICAgID8geyBsYWJlbDogXCJObyBmaWxlXCIsIHZhbHVlOiB1bmRlZmluZWQgfVxuICAgICAgICA6IHsgbGFiZWw6IGRlZmF1bHRWYWx1ZSwgdmFsdWU6IGRlZmF1bHRWYWx1ZSB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIGNsYXNzTmFtZVByZWZpeD1cImRhdGFjb3JlLXNlbGVjdGFibGVcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0T3B0aW9ufVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhudiwgX2FtKSA9PiBvbkNoYW5nZShudj8udmFsdWUpfVxuICAgICAgICAgICAgdW5zdHlsZWRcbiAgICAgICAgLz5cbiAgICApO1xufVxuXG4vKiogU2VsZWN0YWJsZSBvcHRpb25zIGZvciBwaWNraW5nIHdoaWNoIGxhbmd1YWdlIHRvIGV4ZWN1dGUgdGhlIHNjcmlwdCBpbi4gKi9cbmNvbnN0IExBTkdVQUdFX09QVElPTlM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IFNjcmlwdExhbmd1YWdlIH1bXSA9IFtcbiAgICB7IGxhYmVsOiBcIkphdmFzY3JpcHRcIiwgdmFsdWU6IFwianNcIiB9LFxuICAgIHsgbGFiZWw6IFwiVHlwZXNjcmlwdFwiLCB2YWx1ZTogXCJ0c1wiIH0sXG4gICAgeyBsYWJlbDogXCJKYXZhc2NyaXB0IChKU1gpXCIsIHZhbHVlOiBcImpzeFwiIH0sXG4gICAgeyBsYWJlbDogXCJUeXBlc2NyaXB0IEpTWFwiLCB2YWx1ZTogXCJ0c3hcIiB9LFxuXTtcblxuLyoqIFNWRyBiYWNrIGJ1dHRvbiBzaG93biB0byBleGl0IHRoZSBzZXR0aW5ncyB2aWV3LiAqL1xuY29uc3QgQkFDS19CVVRUT04gPSAoXG4gICAgPHN2Z1xuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIGNsYXNzPVwic3ZnLWljb24gbHVjaWRlLWFycm93LWxlZnRcIlxuICAgID5cbiAgICAgICAgPHBhdGggZD1cIm0xMiAxOS03LTcgNy03XCI+PC9wYXRoPlxuICAgICAgICA8cGF0aCBkPVwiTTE5IDEySDVcIj48L3BhdGg+XG4gICAgPC9zdmc+XG4pO1xuXG4vKiogU3RhdGUgZm9yIHRoZSBkYXRhY29yZSB2aWV3IHBhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFjb3JlVmlld1N0YXRlIHtcbiAgICAvKiogQ3VzdG9tIHRpdGxlIGZvciB0aGUgdmlldyBwYW5lLiAqL1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIC8qKiBMYW5ndWFnZSB0aGF0IHRoZSBzY3JpcHQgd2lsbCBiZSBleGVjdXRlZCBpbi4gKi9cbiAgICBzb3VyY2VUeXBlPzogU2NyaXB0TGFuZ3VhZ2U7XG4gICAgLyoqIElmIGRlZmluZWQsIHRoZSBmaWxlIHRoZSB2aWV3IHdpbGwgYmUgcmVsYXRpdmUgdG8uICovXG4gICAgY3VycmVudEZpbGU/OiBzdHJpbmc7XG4gICAgLyoqIENvbnRlbnRzIG9mIHRoZSBzY3JpcHQuICovXG4gICAgc2NyaXB0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgY3VycmVudCB2aWV3OyBkZWZhdWx0cyB0byAnc2V0dGluZ3MnIGZvciBpbml0aWFsaXphdGlvbi4gKi9cbiAgICB2aWV3PzogXCJzZXR0aW5nc1wiIHwgXCJzY3JpcHRcIjtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFjb3JlUXVlcnlWaWV3IGV4dGVuZHMgSXRlbVZpZXcge1xuICAgIC8qKiBJbnRlcm5hbCBjdXJyZW50IHN0YXRlIG9mIHRoZSB2aWV3OyBjYW4gYmUgbW9kaWZpZWQgYnkgc2V0U3RhdGUuICovXG4gICAgcHVibGljIGludGVybmFsU3RhdGU6IERhdGFjb3JlVmlld1N0YXRlID0ge1xuICAgICAgICB0aXRsZTogXCJOZXcgdmlld1wiLFxuICAgICAgICBzY3JpcHQ6IFwiXCIsXG4gICAgICAgIHNvdXJjZVR5cGU6IFwianNcIixcbiAgICAgICAgdmlldzogXCJzZXR0aW5nc1wiLFxuICAgIH07XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgYWN0aXZlIHZpZXcgLSBlaXRoZXIgdGhlIHNldHRpbmdzIHZpZXcgKi9cbiAgICBwcml2YXRlIGFjdGl2ZVZpZXc6IE1hcmtkb3duUmVuZGVyQ2hpbGQ7XG4gICAgcHJpdmF0ZSBhY3RpdmVWaWV3VHlwZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IobGVhZjogV29ya3NwYWNlTGVhZiwgcHVibGljIGFwaTogRGF0YWNvcmVBcGkpIHtcbiAgICAgICAgc3VwZXIobGVhZik7XG4gICAgICAgIHRoaXMucmVyZW5kZXIoKTtcbiAgICB9XG5cbiAgICAvKiogU2hvdWxkIGFsd2F5cyBiZSBWSUVXX1RZUEVfREFUQUNPUkVKUy4gKi9cbiAgICBnZXRWaWV3VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gVklFV19UWVBFX0RBVEFDT1JFSlM7XG4gICAgfVxuXG4gICAgLyoqIFRleHQgc2hvd24gaW4gdGhlIHRpdGxlIHdpbmRvdy4gKi9cbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pbnRlcm5hbFN0YXRlLnRpdGxlfSAoRGF0YWNvcmVKUylgO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIHRoaXMuY29udGVudEVsLmFkZENsYXNzKFwibWFya2Rvd24tcmVuZGVyZWRcIik7XG4gICAgICAgIHRoaXMucmVyZW5kZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcpIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICB9XG5cbiAgICAvKiogU3luY2hyb25pemVzIHRoZSBzY3JlZW4gc3RhdGUgdG8gcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudCBpbnRlcm5hbCBzdGF0ZS4gKi9cbiAgICByZXJlbmRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sZWFmLnRhYkhlYWRlcklubmVyVGl0bGVFbC50ZXh0Q29udGVudCA9IHRoaXMudGl0bGVFbC50ZXh0Q29udGVudCA9IHRoaXMuZ2V0RGlzcGxheVRleHQoKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlld1R5cGUgPT0gdGhpcy5pbnRlcm5hbFN0YXRlLnZpZXcpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3KSB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsU3RhdGUudmlldyA9PT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdUeXBlID0gXCJzZXR0aW5nc1wiO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gbmV3IFJlYWN0UmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgdGhpcy5hcGkuY29yZSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRFbCxcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIDxDVVNUT01fVklFV19DT05URVhULlByb3ZpZGVyIHZhbHVlPXt0aGlzfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEYXRhY29yZVZpZXdTZXR0aW5ncyAvPlxuICAgICAgICAgICAgICAgICAgICA8L0NVU1RPTV9WSUVXX0NPTlRFWFQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIGEgc2NyaXB0LCB0cnkgdG8gZXhlY3V0ZSBpdDsgb3RoZXJ3aXNlLCBzaG93IGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLlxuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3VHlwZSA9IFwic2NyaXB0XCI7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFN0YXRlLnNjcmlwdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IG5ldyBEYXRhY29yZUpTUmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBEYXRhY29yZUxvY2FsQXBpKHRoaXMuYXBpLCB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudEVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXRlLnNjcmlwdCB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuc291cmNlVHlwZSB8fCBcImpzXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBuZXcgUmVhY3RSZW5kZXJlcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpLmNvcmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudEVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPENVU1RPTV9WSUVXX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e3RoaXN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIk5vIHNjcmlwdCBkZWZpbmVkIGZvciB0aGlzIHZpZXcuXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ1VTVE9NX1ZJRVdfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENoaWxkKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFN0YXRlO1xuICAgIH1cblxuICAgIC8qKiBVcGRhdGUgdGhlIHN0YXRlIG9mIHRoaXMgdmlldyB3aXRoIG5ldyBtZXRhZGF0YS4gR2VuZXJhbGx5IGNvbnRyb2xsZWQgYnkgdGhlIHNldHRpbmdzIHBhbmUuICovXG4gICAgcHVibGljIGFzeW5jIHNldFN0YXRlKHN0YXRlOiBEYXRhY29yZVZpZXdTdGF0ZSwgX3Jlc3VsdDogVmlld1N0YXRlUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLnJlcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgLyoqIFN3YXAgdGhlIGFjdGl2ZSB2aWV3LiAqL1xuICAgIHB1YmxpYyB2aWV3KG1vZGU6IFwic2V0dGluZ3NcIiB8IFwic2NyaXB0XCIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXRlLnZpZXcgPSBtb2RlO1xuICAgICAgICB0aGlzLnJlcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uT3BlbigpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgICAvKiogSGFuZGxlIGZvciByaWdodCBjbGljayBtZW51cy4gKi9cbiAgICBwdWJsaWMgb25QYW5lTWVudShtZW51OiBNZW51LCBzb3VyY2U6IFwibW9yZS1vcHRpb25zXCIgfCBcInRhYi1oZWFkZXJcIiB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoc291cmNlID09PSBcIm1vcmUtb3B0aW9uc1wiKSB7XG4gICAgICAgICAgICBtZW51LmFkZEl0ZW0oKGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgaXQuc2V0SWNvbihcInNldHRpbmdzXCIpO1xuICAgICAgICAgICAgICAgIGl0LnNldFRpdGxlKFwiQ29uZmlndXJlIFZpZXdcIik7XG4gICAgICAgICAgICAgICAgaXQub25DbGljaygoZSkgPT4gdGhpcy52aWV3KFwic2V0dGluZ3NcIikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcbmltcG9ydCB7IHVzZUluZGV4VXBkYXRlcyB9IGZyb20gXCJ1aS9ob29rc1wiO1xuXG4vKiogUmVuZGVyIGEgaGVscGZ1bCBzdGF0dXMgaW5kaWNhdG9yIGluIHRoZSBzdGF0dXMgYmFyIG9mIGhvdyB0aGUgaW1wb3J0IGlzIGdvaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEluZGV4U3RhdHVzQmFyKHsgZGF0YWNvcmUgfTogeyBkYXRhY29yZTogRGF0YWNvcmUgfSkge1xuICAgIHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZSwgeyBkZWJvdW5jZTogMjUwIH0pO1xuXG4gICAgLy8gV2hlbmV2ZXIgdGhlIHZpZXcgdXBkYXRlcywgZmlndXJlIG91dCB3aGF0IHN0YXRlIHdlIGFyZSBpbiBiYXNlZCBvbiBpZiBhbiBpbml0aWFsaXplciBpcyBwcmVzZW50LlxuICAgIGlmIChkYXRhY29yZS5pbml0aWFsaXplcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgU2Nhbm5pbmcge2RhdGFjb3JlLmluaXRpYWxpemVyLmluaXRpYWxpemVkfSBvZiB7ZGF0YWNvcmUuaW5pdGlhbGl6ZXIuZmlsZXN9IGZpbGVzXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChkYXRhY29yZS5pbXBvcnRlci5xdWV1ZS5zaXplKCkgPiAwKSB7XG4gICAgICAgIHJldHVybiA8c3Bhbj5VcGRhdGluZyB7ZGF0YWNvcmUuaW1wb3J0ZXIucXVldWUuc2l6ZSgpfSBmaWxlczwvc3Bhbj47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxzcGFuPntkYXRhY29yZS5kYXRhc3RvcmUuc2l6ZX0gb2JqZWN0czwvc3Bhbj47XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSwrREFBQUEsU0FBQTtBQUFBLEtBQUMsU0FBU0MsSUFBRUMsSUFBRTtBQUFDLGtCQUFVLE9BQU8sV0FBUyxZQUFVLE9BQU9GLFVBQU9BLFFBQU8sVUFBUUUsR0FBRSxJQUFFLGNBQVksT0FBTyxVQUFRLE9BQU8sTUFBSSxPQUFPLENBQUMsR0FBRUEsRUFBQyxJQUFFLFlBQVUsT0FBTyxVQUFRLFFBQVEsWUFBVUEsR0FBRSxJQUFFRCxHQUFFLFlBQVVDLEdBQUU7QUFBQSxJQUFDLEVBQUUsZUFBYSxPQUFPLE9BQUssT0FBSyxTQUFL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QUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUNSO0FBRUEsSUFBTSx3QkFBd0I7QUFBQSxFQUM1QixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsU0FBUyxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ3BCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLFVBQVUsQ0FBQyxPQUFPLEtBQUs7QUFBQSxFQUN2QixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixTQUFTLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDcEIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQ25CO0FBRUEsSUFBTSxlQUFl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SztBQUNILGVBQU8sTUFBTSxJQUFJLE9BQU8sU0FBUyxPQUFPLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDbkQsS0FBSztBQUNILGVBQU8sTUFBTSxJQUFJLE9BQU8sUUFBUSxPQUFPLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFFbEQsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFFcEIsS0FBSztBQUNILGVBQU8sUUFBUSxVQUFVO0FBQUEsTUFDM0IsS0FBSztBQUNILGVBQU8sUUFBUSxLQUFLO0FBQUEsTUFFdEIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxRQUFRO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFDcEIsS0FBSztBQUNILGVBQU8sUUFBUSxVQUFVO0FBQUEsTUFDM0IsS0FBSztBQUNILGVBQU8sUUFBUSxLQUFLO0FBQUEsTUFDdEIsS0FBSztBQUNILGVBQU8sT0FBTyxTQUFTO0FBQUEsTUFDekIsS0FBSztBQUNILGVBQU8sT0FBTyxRQUFRO0FBQUEsTUFDeEIsS0FBSztBQUNILGVBQU8sUUFBUSxHQUFHO0FBQUEsTUFFcEIsS0FBSztBQUNILGVBQU8sTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDO0FBQUEsTUFFakMsS0FBSztBQUNILGVBQU8sUUFBUSxJQUFJO0FBQUEsTUFDckIs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LGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNiLGFBQU87QUFBQSxJQUNULEtBQUssVUFBVTtBQUNi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LFFBQU0sT0FBTztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsTUFBTSxJQUFJLElBQUksSUFBSTtBQUN2RCxRQUFNLE1BQU07QUFBSSxFQUFBQSxXQUFVQSxXQUFVLEtBQUssSUFBSSxHQUFHLElBQUk7QUFDcEQsUUFBTSxRQUFRO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxPQUFPLElBQUksS0FBSyxJQUFJO0FBQzFELFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLFNBQVM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsUUFBTSxTQUFTO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLFNBQVM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsUUFBTSxTQUFTO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLFNBQVM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsUUFBTSxTQUFTO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLFFBQVE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLE9BQU8sSUFBSSxLQUFLLElBQUk7QUFDMUQsUUFBTUMsYUFBWTtBQUFJLEVBQUFELFdBQVVBLFdBQVUsV0FBVyxJQUFJQyxVQUFTLElBQUk7QUFDdEUsUUFBTSxXQUFXO0FBQUksRUFBQUQsV0FBVUEsV0FBVSxVQUFVLElBQUksUUFBUSxJQUFJO0FBQ25FLFFBQU0sV0FBVztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsVUFBVSxJQUFJLFFBQVEsSUFBSTtBQUNuRSxRQUFNLGNBQWM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLGFBQWEsSUFBSSxXQUFXLElBQUk7QUFDNUUsUUFBTSxlQUFlO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxjQUFjLElBQUksWUFBWSxJQUFJO0FBQy9FLFFBQU0sU0FBUztBQUFJLEVBQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sb0JBQW9CO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxtQkFBbUIsSUFBSSxpQkFBaUIsSUFBSTtBQUM5RixRQUFNLFlBQVk7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFdBQVcsSUFBSSxTQUFTLElBQUk7QUFDdEUsUUFBTSxxQkFBcUI7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLG9CQUFvQixJQUFJLGtCQUFrQixJQUFJO0FBQ2pHLFFBQU1FLFNBQVE7QUFBSSxFQUFBRixXQUFVQSxXQUFVLE9BQU8sSUFBSUUsTUFBSyxJQUFJO0FBQzFELFFBQU0sYUFBYTtBQUFJLEVBQUFGLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGNBQWM7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLGFBQWEsSUFBSSxXQUFXLElBQUk7QUFDNUUsUUFBTSxhQUFhO0FBQUksRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFFBQU0sYUFBYTtBQUFJLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxRQUFNLGFBQWE7QUFBSSxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVBQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxRQUFNLGFBQWE7QUFBSyxFQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsUUFBTSxhQUFhO0FBQUssRUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFFBQU0sYUFBYTtBQUFLLEVB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LE1BQU07QUFDNUQsU0FBUyxVQUFVLFVBQVUsUUFBUSxXQUFXLFVBQVUsUUFBUSxXQUFXO0FBQzNFLHNCQUFvQixPQUFPLElBQUk7QUFDakM7OztBQzVCTyxJQUFNLGlCQUFpQixJQUFJLFdBQVc7QUFBQTtBQUFBLEVBRTNDO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSztBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQTtBQUFBLEVBRTlJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTNHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXhHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixhQUFhO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXRJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixhQUFhO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXRJLGtCQUFrQixPQUFPO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQTtBQUFBLEVBRWxJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixXQUFXO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXJJLGtCQUFrQixZQUFZO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXJJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixVQUFVO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRW5JO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHLGtCQUFrQixVQUFVO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRW5JO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXhHLFVBQUcsVUFBVSxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFIO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRS9HO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUs7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTNHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFLO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXhHLFVBQUcsU0FBUyxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXpIO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXpHLFVBQUcsVUFBVSxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFIO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHLGtCQUFrQixXQUFXO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRXBJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXpHLFVBQUcsVUFBVSxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFIO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTVHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEdBRXpHLFVBQUcsVUFBVSxLQUFLO0FBQUEsRUFBRztBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTVIO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQTtBQUFBLEVBRTFHLGtCQUFrQixnQkFBZ0I7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxhQUFhLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFaEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxhQUFhLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFlBQVk7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFckk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxZQUFZLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFMUgsVUFBRyxPQUFPLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFOUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFNBQVM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0gsa0JBQWtCLFlBQVk7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFckk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxZQUFZLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUg7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsR0FFekcsVUFBRyxZQUFZLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFNBQVM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxhQUFhLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFFBQVE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFakk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFL0csVUFBRyxPQUFPLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGVBQWU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFMUgsVUFBRyxPQUFPLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFN0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFVBQVU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxlQUFlLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFL0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGNBQWM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkksa0JBQWtCLE9BQU87QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFaEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFVBQVU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFOUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGNBQWM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFaEgsa0JBQWtCLE9BQU87QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFaEk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFFBQVE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFakk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGFBQWE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFlBQVk7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFckk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGNBQWM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkksa0JBQWtCLFVBQVU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFOUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGFBQWE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFlBQVk7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFckk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFM0g7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFcEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLGNBQWM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFdkk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFFBQVE7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFakk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFM0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFOUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFeEgsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFNBQVM7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxXQUFXLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFM0g7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFdBQVc7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFcEk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUcsa0JBQWtCLFVBQVU7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFbkk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxRQUFRLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFeEg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFNUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxTQUFTLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFekg7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQU07QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFNO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsRUFFMUc7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBTTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBO0FBQUEsR0FFekcsVUFBRyxVQUFVLEtBQUs7QUFBQSxFQUFHO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUk7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QSxFQUNoQixDQUFDLE9BQU8sTUFBUTtBQUFBLEVBQ2hCLENBQUMsT0FBTyxNQUFRO0FBQUEsRUFDaEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLE9BQU8sTUFBUTtBQUFBLEVBQ2hCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxPQUFPLE1BQVE7QUFBQSxFQUNoQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsRUFDbEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxFQUNqQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLEVBQ2pCLENBQUMsT0FBTyxNQUFRO0FBQUEsRUFDaEIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLEVBQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLEVBQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsRUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxRQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxFQUNqQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxFQUNqQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxXQUFXLFFBQVE7QUFBQSxFQUNwQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLE1BQU0sUUFBUTtBQUFBLEVBQ2YsQ0FBQyxNQUFNLFFBQVE7QUFBQSxFQUNmLENBQUMsTUFBTSxRQUFRO0FBQUEsRUFDZixDQUFDLFdBQVcsUUFBUTtBQUFBLEVBQ3BCLENBQUMsTUFBTSxRQUFRO0FBQUEsRUFDZixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLFdBQVcsUUFBUTtBQUFBLEVBQ3BCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFdBQVcsUUFBUTtBQUFBLEVBQ3BCLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFVBQVUsUUFBUTtBQUFBLEVBQ25CLENBQUMsTUFBTSxRQUFRO0FBQUEsRUFDZixDQUFDLE1BQU0sUUFBUTtBQUFBLEVBQ2YsQ0FBQyxNQUFNLFFBQVE7QUFBQSxFQUNmLENBQUMsV0FBVyxRQUFRO0FBQUEsRUFDcEIsQ0FBQyxNQUFNLFFBQVE7QUFBQSxFQUNmLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxXQUFXLFFBQVE7QUFBQSxFQUNwQixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsWUFBWSxRQUFRO0FBQUEsRUFDckIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxFQUNqQixDQUFDLFVBQVUsUUFBUTtBQUFBLEVBQ25CLENBQUMsUUFBUSxRQUFRO0FBQUEsRUFDakIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLE9BQU8sUUFBUTtBQUFBLEVBQ2hCLENBQUMsT0FBTyxRQUFRO0FBQUEsRUFDaEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsVUFBVSxRQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsVUFBVSxRQUFRO0FBQUEsRUFDbkIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFNBQVMsUUFBUTtBQUFBLEVBQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFVBQVUsUUFBUTtBQUFBLEVBQ25CLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxFQUNsQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsRUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxFQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLEVBQ2pCLENB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LEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFN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dkIsUUFBUSw4QkFBOEIsRUFDdEMsUUFBUSw0RkFBNEYsRUFDcEcsVUFBVSxDQUFDLE9BQU87QUFDZixTQUFHLFNBQVMsS0FBSyxPQUFPLFNBQVMsdUJBQXVCLEVBQUUsU0FBUyxPQUFPLFFBQVE7QUFDOUUsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLHlCQUF5QixJQUFJLENBQUM7QUFBQSxNQUNyRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsU0FBSyxZQUFZLFNBQVMsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWpELFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEsc0JBQXNCLEVBQzlCLFFBQVEsa0VBQWtFLEVBQzFFLFFBQVEsQ0FBQ0EsVUFBUztBQUNmLE1BQUFBLE1BQUssU0FBUyxLQUFLLE9BQU8sU0FBUyxrQkFBa0IsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUM3RSxjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUsb0JBQW9CLE1BQU0sQ0FBQztBQUFBLE1BQ2xFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFTCxRQUFJLDBCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLHlDQUF5QyxFQUNqRDtBQUFBLE1BQ0c7QUFBQSxJQUVKLEVBQ0MsVUFBVSxDQUFDLE9BQU87QUFDZixTQUFHLFNBQVMsS0FBSyxPQUFPLFNBQVMsK0JBQStCLEVBQUUsU0FBUyxPQUFPLFFBQVE7QUFDdEYsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLGlDQUFpQyxJQUFJLENBQUM7QUFBQSxNQUM3RSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFDVDtBQUNKOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibiIsICJ0IiwgInIiLCAiZSIsICJ1IiwgIm8iLCAiaSIsICJhIiwgImYiLCAiYyIsICJzIiwgImwiLCAieCIsICJiIiwgImgiLCAicCIsICJkIiwgInYiLCAiZyIsICJtIiwgInkiLCAiRSIsICJ3IiwgIkIiLCAiaiIsICJTIiwgIl8iLCAiTCIsICJPIiwgImsiLCAiUCIsICJxIiwgIkEiLCAiSSIsICJGIiwgIk0iLCAieiIsICJSIiwgIlUiLCAiVyIsICJEIiwgIk4iLCAiRyIsICJDIiwgIkoiLCAiVCIsICJZIiwgIlYiLCAiSCIsICJYIiwgIksiLCAiUSIsICJaIiwgIiQiLCAibm4iLCAidG4iLCAicm4iLCAiYW4iLCAiZW4iLCAidW4iLCAib24iLCAiZm4iLCAiY24iLCAic24iLCAiaG4iLCAicG4iLCAiZG4iLCAidm4iLCAiZ24iLCAibW4iLCAieW4iLCAic2V0IiwgImdldCIsICJpbmRleCIsICJhcnJheSIsICJsZW5ndGgiLCAiaSIsICJrIiwgInNlbWljb2xvbiIsICJpIiwgImMiLCAic3RhdGUiLCAiaW5kZXgiLCAibGluZSIsICJqIiwgInNoaWZ0IiwgImxlbmd0aCIsICJhIiwgImIiLCAibmV4dCIsICJpbnB1dCIsICJtYXRjaCIsICJoYXNoIiwgInVybCIsICJpbmRleCIsICJpIiwgImlucHV0IiwgImluZGV4IiwgImkiLCAibGluZSIsICJqIiwgImEiLCAiYiIsICJzdGF0ZSIsICJzb3VyY2VJbmRleCIsICJhcnJheSIsICJwYXJzZSIsICJvZmZzZXQiLCAiYXBwZW5kIiwgImNvbHVtbiIsICJpc1N0cmluZyIsICJmcm9tIiwgInMiLCAiZW5jb2RlIiwgImRlY29kZSIsICJjbG9uZSIsICJic0ZvdW5kIiwgIm1pbiIsICJtYXgiLCAiR2VuTWFwcGluZyIsICJTZXRBcnJheSIsICJtYXliZUFkZFNlZ21lbnQiLCAiaW5kZXgiLCAicHV0IiwgInJlbW92ZSIsICJ0b0VuY29kZWRNYXAiLCAiZW5jb2RlIiwgImlucHV0IiwgIlRyYWNlTWFwIiwgImRlY29kZWRNYXBwaW5ncyIsICJpIiwgImxpbmUiLCAiaiIsICJhcnJheSIsICJsZW5ndGgiLCAicHJldiIsICJkIiwgImIiLCAicCIsICJWRXJyb3IiLCAiTm9vcENvbnRleHQiLCAiRGV0YWlsQ29udGV4dCIsICJ1IiwgImkiLCAibSIsICJEZXRhaWxVbmlvblJlc29sdmVyIiwgImQiLCAiYiIsICJwIiwgIlRUeXBlIiwgIm5hbWUiLCAiVE5hbWUiLCAibGl0IiwgIlRMaXRlcmFsIiwgImFycmF5IiwgIlRBcnJheSIsICJpIiwgIl9pIiwgInQiLCAiVFR1cGxlIiwgInVuaW9uIiwgIlRVbmlvbiIsICJuIiwgIlRJbnRlcnNlY3Rpb24iLCAiVEVudW1UeXBlIiwgIlRFbnVtTGl0ZXJhbCIsICJpZmFjZSIsICJUSWZhY2UiLCAidiIsICJvcHQiLCAiVE9wdGlvbmFsIiwgIlRQcm9wIiwgIlRGdW5jIiwgIlRQYXJhbSIsICJUUGFyYW1MaXN0IiwgInBhcmFtIiwgIkJhc2ljVHlwZSIsICJhcnJheV8xIiwgInMiLCAiaSIsICJyIiwgImsiLCAiYSIsICJqIiwgImNyZWF0ZUNoZWNrZXJzIiwgIkNoZWNrZXIiLCAicCIsICJMaW5lc0FuZENvbHVtbnMiLCAic3RyaW5nIiwgIm9mZnNldCIsICJpbmRleCIsICJsaW5lIiwgImNvbHVtbiIsICJFbGVtZW50IiwgImlzRWxlbWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgImkiLCAiZSIsICJtb2R1bGUiLCAiaGFzT3duUHJvcGVydHkiLCAiaSIsICJuIiwgImZyb20iLCAicyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJ0ZXh0IiwgIngiLCAibW9kdWxlIiwgImFzc2lnbiIsICJ0ZXh0IiwgIngiLCAieSIsICJpIiwgImNoZWNrZXIiLCAiaXNOb2RlIiwgIm1vZHVsZSIsICJkIiwgImIiLCAicCIsICJhIiwgIkJUcmVlIiwgImsiLCAidiIsICJpIiwgIm5leHQiLCAic3RhdGUiLCAiY3Vyc29yIiwgIm5vZGUiLCAibiIsICJtaW4iLCAibWF4IiwgInIiLCAidCIsICJzaXplIiwgIkJOb2RlIiwgImMiLCAiXyIsICJCTm9kZUludGVybmFsIiwgImxlbmd0aCIsICJtb2R1bGUiLCAiZiIsICJnIiwgImRlZmluZSIsICJleHBvcnRzIiwgImUiLCAidCIsICJuIiwgInIiLCAicyIsICJvIiwgInUiLCAiYSIsICJpIiwgImwiLCAiZ2xvYmFsIiwgIlByb21pc2UiLCAic2VsZiIsICJfdHlwZW9mIiwgIl9jbGFzc0NhbGxDaGVjayIsICJrZXkiLCAibGVuZ3RoIiwgImlkYiIsICJvcHRpb25zIiwgImoiLCAiayIsICJmb3JhZ2UiLCAiY3Vyc29yIiwgInZhbHVlIiwgImVyciIsICJrZXlzIiwgImRiIiwgInAiLCAic2VyaWFsaXplIiwgImVycm9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgInNhbWVWYWx1ZSIsICJ4IiwgInkiLCAiaW5jbHVkZXMiLCAiYXJyYXkiLCAiaXNBcnJheSIsICJMb2NhbEZvcmFnZSIsICJjb25maWciLCAiY29uZmlndXJlTWlzc2luZ01ldGhvZHMiLCAibWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5IiwgInByb21pc2UiLCAic2V0RHJpdmVyU3VwcG9ydCIsICJzdXBwb3J0ZWREcml2ZXJzIiwgIlF1ZXVlIiwgInJlcXVpcmVfcXVldWUiLCAiUXVldWUiLCAibyIsICJlIiwgIm5leHQiLCAiYSIsICJrIiwgIngiLCAibiIsICJpbnB1dCIsICJzdHJpbmciLCAiZiIsICJkIiwgInAyIiwgIm0iLCAidSIsICJ2IiwgIm9mZnNldCIsICJsZW5ndGgiLCAicyIsICJ0b2tlbiIsICJpIiwgImMiLCAibiIsICJwIiwgInN0cmluZyIsICJmb3JtYXRPZmZzZXQiLCAibGVuZ3RoIiwgInQiLCAiaSIsICJzIiwgImUiLCAic2luZ2xldG9uIiwgIm9mZnNldCIsICJzIiwgInIiLCAiaW5wdXQiLCAiZGVmYXVsdFpvbmUiLCAib2Zmc2V0IiwgIm4iLCAidCIsICJvcHRpb25zIiwgImUiLCAiZiIsICJpIiwgImxlbmd0aCIsICJmbG9vciIsICJ6IiwgIm0iLCAiZiIsICJyIiwgIm0iLCAiY3Vyc29yIiwgIm5leHQiLCAicyIsICJyZWdleCIsICJtYXRjaCIsICJpIiwgIm9mZnNldCIsICJuIiwgImNvbmZpZyIsICJ0ZXh0IiwgIm8iLCAibCIsICJzIiwgImsiLCAiZm4iLCAidSIsICJpIiwgInYyIiwgIklOVkFMSUQiLCAiZW5kIiwgImNvbmZpZyIsICJ0ZXh0IiwgInMiLCAiZSIsICJvIiwgImQiLCAiaSIsICJuZXh0IiwgIngiLCAiYSIsICJiIiwgImlucHV0IiwgImxlbmd0aCIsICJjdXJzb3IiLCAiYSIsICJiIiwgInUiLCAiaSIsICJtaW4iLCAibWF4IiwgImFwcGVuZCIsICJyZWdleCIsICJpIiwgInMiLCAiaCIsICJtIiwgInRva2VuIiwgInQiLCAidSIsICJmIiwgInIiLCAiaW5wdXQiLCAiayIsICJwIiwgImQiLCAiaSIsICJJTlZBTElEIiwgImNsb25lIiwgIm8iLCAibzIiLCAibzMiLCAib2Zmc2V0IiwgImQiLCAiYyIsICJ0ZXh0IiwgIm9yZGVyZWRVbml0cyIsICJ1IiwgImVuZCIsICJyb3VuZCIsICJjb25maWciLCAib3B0aW9ucyIsICJ2IiwgInEiLCAiaSIsICJfIiwgInRleHQiLCAiZW5kIiwgIm9mZnNldCIsICJwb3NpdGlvbiIsICJQIiwgIkxpdGVyYWxzIiwgImYiLCAiZSIsICJpc051bWJlciIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNBcnJheSIsICJ4IiwgImYyIiwgImluZGV4IiwgIm8yIiwgImsyIiwgInYiLCAiR3JvdXBpbmdzIiwgInNsaWNlIiwgImVuZCIsICJmIiwgIlJlc3VsdCIsICJhIiwgImIiLCAiaW5wdXQiLCAiRmlsdGVycyIsICJzZXQiLCAieCIsICJ1bmlvbiIsICJhIiwgImIiLCAiYXRvbSIsICJuZWdhdGVkIiwgIkV4cHJlc3Npb25zIiwgImluZGV4IiwgImZ1bmMiLCAiYSIsICJ2IiwgImsiLCAiXyIsICJxIiwgInAiLCAibCIsICJhIiwgImIiLCAiZCIsICJ0IiwgIngiLCAiYyIsICJmIiwgIl8yIiwgIl8zIiwgImNvbWJpbmUiLCAibm9kZSIsICJpbmRleCIsICJmIiwgImEiLCAiaW5wdXQiLCAiaSIsICJuZXh0IiwgIm1hdGNoIiwgIm1hdGNoMiIsICJNT0RFX0hZRFJBVEUiLCAic2xpY2UiLCAib3B0aW9ucyIsICJ2bm9kZUlkIiwgImlzVmFsaWRFbGVtZW50IiwgInJlcmVuZGVyUXVldWUiLCAicHJldkRlYm91bmNlIiwgImRlZmVyIiwgImRlcHRoU29ydCIsICJldmVudENsb2NrIiwgImV2ZW50UHJveHkiLCAiZXZlbnRQcm94eUNhcHR1cmUiLCAiaSIsICJFTVBUWV9PQkoiLCAiRU1QVFlfQVJSIiwgIklTX05PTl9ESU1FTlNJT05BTCIsICJpc0FycmF5IiwgIkFycmF5IiwgImFzc2lnbiIsICJvYmoiLCAicHJvcHMiLCAicmVtb3ZlTm9kZSIsICJub2RlIiwgInBhcmVudE5vZGUiLCAicmVtb3ZlQ2hpbGQiLCAiY3JlYXRlRWxlbWVudCIsICJ0eXBlIiwgImNoaWxkcmVuIiwgImtleSIsICJyZWYiLCAibm9ybWFsaXplZFByb3BzIiwgImFyZ3VtZW50cyIsICJsZW5ndGgiLCAiY2FsbCIsICJkZWZhdWx0UHJvcHMiLCAiY3JlYXRlVk5vZGUiLCAib3JpZ2luYWwiLCAidm5vZGUiLCAiX19rIiwgIl9fIiwgIl9fYiIsICJfX2UiLCAiX19kIiwgIl9fYyIsICJjb25zdHJ1Y3RvciIsICJfX3YiLCAiX19pIiwgIl9fdSIsICJjcmVhdGVSZWYiLCAiY3VycmVudCIsICJGcmFnbWVudCIsICJCYXNlQ29tcG9uZW50IiwgImNvbnRleHQiLCAidGhpcyIsICJnZXREb21TaWJsaW5nIiwgImNoaWxkSW5kZXgiLCAic2libGluZyIsICJ1cGRhdGVQYXJlbnREb21Qb2ludGVycyIsICJjaGlsZCIsICJiYXNlIiwgImVucXVldWVSZW5kZXIiLCAiYyIsICJwdXNoIiwgInByb2Nlc3MiLCAiZGVib3VuY2VSZW5kZXJpbmciLCAicmVuZGVyUXVldWVMZW5ndGgiLCAiY29tcG9uZW50IiwgIm5ld1ZOb2RlIiwgIm9sZFZOb2RlIiwgIm9sZERvbSIsICJjb21taXRRdWV1ZSIsICJyZWZRdWV1ZSIsICJzb3J0IiwgInNoaWZ0IiwgIl9fUCIsICJkaWZmIiwgIl9fbiIsICJvd25lclNWR0VsZW1lbnQiLCAiY29tbWl0Um9vdCIsICJkaWZmQ2hpbGRyZW4iLCAicGFyZW50RG9tIiwgInJlbmRlclJlc3VsdCIsICJuZXdQYXJlbnRWTm9kZSIsICJvbGRQYXJlbnRWTm9kZSIsICJnbG9iYWxDb250ZXh0IiwgImlzU3ZnIiwgImV4Y2Vzc0RvbUNoaWxkcmVuIiwgImlzSHlkcmF0aW5nIiwgImNoaWxkVk5vZGUiLCAibmV3RG9tIiwgImZpcnN0Q2hpbGREb20iLCAib2xkQ2hpbGRyZW4iLCAibmV3Q2hpbGRyZW5MZW5ndGgiLCAiY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheSIsICJhcHBseVJlZiIsICJpc0Nvbm5lY3RlZCIsICJpbnNlcnQiLCAibmV4dFNpYmxpbmciLCAic2tld2VkSW5kZXgiLCAibWF0Y2hpbmdJbmRleCIsICJvbGRDaGlsZHJlbkxlbmd0aCIsICJyZW1haW5pbmdPbGRDaGlsZHJlbiIsICJza2V3IiwgIlN0cmluZyIsICJmaW5kTWF0Y2hpbmdJbmRleCIsICJ1bm1vdW50IiwgInBhcmVudFZOb2RlIiwgImluc2VydEJlZm9yZSIsICJub2RlVHlwZSIsICJ0b0NoaWxkQXJyYXkiLCAib3V0IiwgInNvbWUiLCAieCIsICJ5IiwgInNldFN0eWxlIiwgInN0eWxlIiwgInZhbHVlIiwgInNldFByb3BlcnR5IiwgInRlc3QiLCAiZG9tIiwgIm5hbWUiLCAib2xkVmFsdWUiLCAidXNlQ2FwdHVyZSIsICJvIiwgImNzc1RleHQiLCAicmVwbGFjZSIsICJ0b0xvd2VyQ2FzZSIsICJsIiwgIl9hdHRhY2hlZCIsICJhZGRFdmVudExpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiZSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAic2V0QXR0cmlidXRlIiwgImNyZWF0ZUV2ZW50UHJveHkiLCAiZXZlbnRIYW5kbGVyIiwgIl9kaXNwYXRjaGVkIiwgImV2ZW50IiwgInRtcCIsICJpc05ldyIsICJvbGRQcm9wcyIsICJvbGRTdGF0ZSIsICJzbmFwc2hvdCIsICJjbGVhclByb2Nlc3NpbmdFeGNlcHRpb24iLCAibmV3UHJvcHMiLCAicHJvdmlkZXIiLCAiY29tcG9uZW50Q29udGV4dCIsICJyZW5kZXJIb29rIiwgImNvdW50IiwgIm5ld1R5cGUiLCAib3V0ZXIiLCAiY29udGV4dFR5cGUiLCAiX19FIiwgInByb3RvdHlwZSIsICJyZW5kZXIiLCAiZG9SZW5kZXIiLCAic3ViIiwgInN0YXRlIiwgIl9faCIsICJfc2IiLCAiX19zIiwgImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsICJjb21wb25lbnRXaWxsTW91bnQiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsICJzaG91bGRDb21wb25lbnRVcGRhdGUiLCAiZm9yRWFjaCIsICJjb21wb25lbnRXaWxsVXBkYXRlIiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJfX3IiLCAiZ2V0Q2hpbGRDb250ZXh0IiwgImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwgImluZGV4T2YiLCAiZGlmZkVsZW1lbnROb2RlcyIsICJkaWZmZWQiLCAicm9vdCIsICJjYiIsICJuZXdIdG1sIiwgIm9sZEh0bWwiLCAibmV3Q2hpbGRyZW4iLCAiaW5wdXRWYWx1ZSIsICJjaGVja2VkIiwgImxvY2FsTmFtZSIsICJkb2N1bWVudCIsICJjcmVhdGVUZXh0Tm9kZSIsICJjcmVhdGVFbGVtZW50TlMiLCAiaXMiLCAiZGF0YSIsICJjaGlsZE5vZGVzIiwgImF0dHJpYnV0ZXMiLCAiX19odG1sIiwgImlubmVySFRNTCIsICJza2lwUmVtb3ZlIiwgInIiLCAiY29tcG9uZW50V2lsbFVubW91bnQiLCAicmVwbGFjZU5vZGUiLCAiZmlyc3RDaGlsZCIsICJoeWRyYXRlIiwgImNsb25lRWxlbWVudCIsICJjcmVhdGVDb250ZXh0IiwgImRlZmF1bHRWYWx1ZSIsICJjb250ZXh0SWQiLCAiQ29uc3VtZXIiLCAiY29udGV4dFZhbHVlIiwgIlByb3ZpZGVyIiwgInN1YnMiLCAiY3R4IiwgIl9wcm9wcyIsICJvbGQiLCAic3BsaWNlIiwgImVycm9yIiwgImVycm9ySW5mbyIsICJjdG9yIiwgImhhbmRsZWQiLCAiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwgInNldFN0YXRlIiwgImNvbXBvbmVudERpZENhdGNoIiwgInVuZGVmaW5lZCIsICJ1cGRhdGUiLCAiY2FsbGJhY2siLCAicyIsICJmb3JjZVVwZGF0ZSIsICJQcm9taXNlIiwgInRoZW4iLCAiYmluZCIsICJyZXNvbHZlIiwgInNldFRpbWVvdXQiLCAiYSIsICJiIiwgImN1cnJlbnRJbmRleCIsICJjdXJyZW50Q29tcG9uZW50IiwgInByZXZpb3VzQ29tcG9uZW50IiwgInByZXZSYWYiLCAiY3VycmVudEhvb2siLCAiYWZ0ZXJQYWludEVmZmVjdHMiLCAiRU1QVFkiLCAib3B0aW9ucyIsICJfb3B0aW9ucyIsICJvbGRCZWZvcmVEaWZmIiwgIl9fYiIsICJvbGRCZWZvcmVSZW5kZXIiLCAiX19yIiwgIm9sZEFmdGVyRGlmZiIsICJkaWZmZWQiLCAib2xkQ29tbWl0IiwgIl9fYyIsICJvbGRCZWZvcmVVbm1vdW50IiwgInVubW91bnQiLCAib2xkUm9vdCIsICJfXyIsICJnZXRIb29rU3RhdGUiLCAiaW5kZXgiLCAidHlwZSIsICJfX2giLCAiaG9va3MiLCAiX19IIiwgImxlbmd0aCIsICJwdXNoIiwgIl9fViIsICJ1c2VTdGF0ZSIsICJpbml0aWFsU3RhdGUiLCAidXNlUmVkdWNlciIsICJpbnZva2VPclJldHVybiIsICJyZWR1Y2VyIiwgImluaXQiLCAiaG9va1N0YXRlIiwgIl9yZWR1Y2VyIiwgImFjdGlvbiIsICJjdXJyZW50VmFsdWUiLCAiX19OIiwgIm5leHRWYWx1ZSIsICJzZXRTdGF0ZSIsICJfaGFzU2N1RnJvbUhvb2tzIiwgInVwZGF0ZUhvb2tTdGF0ZSIsICJwIiwgInMiLCAiYyIsICJzdGF0ZUhvb2tzIiwgImZpbHRlciIsICJ4IiwgImV2ZXJ5IiwgInByZXZTY3UiLCAiY2FsbCIsICJ0aGlzIiwgInNob3VsZFVwZGF0ZSIsICJmb3JFYWNoIiwgImhvb2tJdGVtIiwgInByb3BzIiwgInNob3VsZENvbXBvbmVudFVwZGF0ZSIsICJwcmV2Q1dVIiwgImNvbXBvbmVudFdpbGxVcGRhdGUiLCAiX19lIiwgInRtcCIsICJ1c2VFZmZlY3QiLCAiY2FsbGJhY2siLCAiYXJncyIsICJzdGF0ZSIsICJhcmdzQ2hhbmdlZCIsICJfcGVuZGluZ0FyZ3MiLCAidXNlTGF5b3V0RWZmZWN0IiwgIl9fcyIsICJ1c2VSZWYiLCAiaW5pdGlhbFZhbHVlIiwgInVzZU1lbW8iLCAiY3VycmVudCIsICJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwgInJlZiIsICJjcmVhdGVIYW5kbGUiLCAiY29uY2F0IiwgImZhY3RvcnkiLCAidXNlQ2FsbGJhY2siLCAidXNlQ29udGV4dCIsICJjb250ZXh0IiwgInByb3ZpZGVyIiwgInN1YiIsICJ2YWx1ZSIsICJ1c2VEZWJ1Z1ZhbHVlIiwgImZvcm1hdHRlciIsICJ1c2VFcnJvckJvdW5kYXJ5IiwgImNiIiwgImVyclN0YXRlIiwgImNvbXBvbmVudERpZENhdGNoIiwgImVyciIsICJlcnJvckluZm8iLCAidW5kZWZpbmVkIiwgInVzZUlkIiwgInJvb3QiLCAiX19tIiwgIm1hc2siLCAiZmx1c2hBZnRlclBhaW50RWZmZWN0cyIsICJjb21wb25lbnQiLCAic2hpZnQiLCAiX19QIiwgImludm9rZUNsZWFudXAiLCAiaW52b2tlRWZmZWN0IiwgImUiLCAiX192IiwgInZub2RlIiwgInBhcmVudERvbSIsICJfX2siLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgImFmdGVyTmV4dEZyYW1lIiwgImNvbW1pdFF1ZXVlIiwgInNvbWUiLCAiaGFzRXJyb3JlZCIsICJIQVNfUkFGIiwgInJhZiIsICJkb25lIiwgImNsZWFyVGltZW91dCIsICJ0aW1lb3V0IiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgInNldFRpbWVvdXQiLCAiaG9vayIsICJjb21wIiwgImNsZWFudXAiLCAib2xkQXJncyIsICJuZXdBcmdzIiwgImFyZyIsICJmIiwgImFzc2lnbiIsICJvYmoiLCAicHJvcHMiLCAiaSIsICJzaGFsbG93RGlmZmVycyIsICJhIiwgImIiLCAiUHVyZUNvbXBvbmVudCIsICJwIiwgImMiLCAidGhpcyIsICJjb250ZXh0IiwgIm1lbW8iLCAiY29tcGFyZXIiLCAic2hvdWxkVXBkYXRlIiwgIm5leHRQcm9wcyIsICJyZWYiLCAidXBkYXRlUmVmIiwgImNhbGwiLCAiY3VycmVudCIsICJNZW1vZWQiLCAic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwgImNyZWF0ZUVsZW1lbnQiLCAiZGlzcGxheU5hbWUiLCAibmFtZSIsICJwcm90b3R5cGUiLCAiaXNSZWFjdENvbXBvbmVudCIsICJDb21wb25lbnQiLCAiaXNQdXJlUmVhY3RDb21wb25lbnQiLCAic3RhdGUiLCAib2xkRGlmZkhvb2siLCAib3B0aW9ucyIsICJfX2IiLCAidm5vZGUiLCAidHlwZSIsICJfX2YiLCAiUkVBQ1RfRk9SV0FSRF9TWU1CT0wiLCAiU3ltYm9sIiwgImZvciIsICJmb3J3YXJkUmVmIiwgImZuIiwgIkZvcndhcmRlZCIsICJjbG9uZSIsICIkJHR5cGVvZiIsICJyZW5kZXIiLCAibWFwRm4iLCAiY2hpbGRyZW4iLCAidG9DaGlsZEFycmF5IiwgIm1hcCIsICJDaGlsZHJlbiIsICJmb3JFYWNoIiwgImNvdW50IiwgImxlbmd0aCIsICJvbmx5IiwgIm5vcm1hbGl6ZWQiLCAidG9BcnJheSIsICJvbGRDYXRjaEVycm9yIiwgImVycm9yIiwgIm5ld1ZOb2RlIiwgIm9sZFZOb2RlIiwgImVycm9ySW5mbyIsICJ0aGVuIiwgImNvbXBvbmVudCIsICJfXyIsICJfX2MiLCAiX19lIiwgIl9fayIsICJvbGRVbm1vdW50IiwgInVubW91bnQiLCAiZGV0YWNoZWRDbG9uZSIsICJkZXRhY2hlZFBhcmVudCIsICJwYXJlbnREb20iLCAiX19IIiwgImVmZmVjdCIsICJfX1AiLCAiY2hpbGQiLCAicmVtb3ZlT3JpZ2luYWwiLCAib3JpZ2luYWxQYXJlbnQiLCAiX192IiwgImFwcGVuZENoaWxkIiwgIlN1c3BlbnNlIiwgIl9fdSIsICJfc3VzcGVuZGVycyIsICJzdXNwZW5kZWQiLCAiX19hIiwgImxhenkiLCAibG9hZGVyIiwgInByb20iLCAiTGF6eSIsICJleHBvcnRzIiwgImRlZmF1bHQiLCAiZSIsICJTdXNwZW5zZUxpc3QiLCAiX25leHQiLCAiX21hcCIsICJfX1IiLCAicHJvbWlzZSIsICJzdXNwZW5kaW5nVk5vZGUiLCAic3VzcGVuZGluZ0NvbXBvbmVudCIsICJwdXNoIiwgInJlc29sdmUiLCAicmVzb2x2ZWQiLCAib25SZXNvbHZlZCIsICJvblN1c3BlbnNpb25Db21wbGV0ZSIsICJzdXNwZW5kZWRWTm9kZSIsICJfX08iLCAic2V0U3RhdGUiLCAicG9wIiwgImZvcmNlVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgImRvY3VtZW50IiwgImRldGFjaGVkQ29tcG9uZW50IiwgImZhbGxiYWNrIiwgIkZyYWdtZW50IiwgImxpc3QiLCAibm9kZSIsICJkZWxldGUiLCAicmV2ZWFsT3JkZXIiLCAic2l6ZSIsICJDb250ZXh0UHJvdmlkZXIiLCAiZ2V0Q2hpbGRDb250ZXh0IiwgIlBvcnRhbCIsICJfdGhpcyIsICJjb250YWluZXIiLCAiX2NvbnRhaW5lciIsICJfdGVtcCIsICJub2RlVHlwZSIsICJwYXJlbnROb2RlIiwgImNoaWxkTm9kZXMiLCAiaW5zZXJ0QmVmb3JlIiwgImJlZm9yZSIsICJyZW1vdmVDaGlsZCIsICJzcGxpY2UiLCAiaW5kZXhPZiIsICJjcmVhdGVQb3J0YWwiLCAiZWwiLCAiY29udGFpbmVySW5mbyIsICJkZWxlZ2F0ZWQiLCAiZ2V0IiwgInVuc3VzcGVuZCIsICJ3cmFwcGVkVW5zdXNwZW5kIiwgIk1hcCIsICJyZXZlcnNlIiwgInNldCIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiUkVBQ1RfRUxFTUVOVF9UWVBFIiwgIkNBTUVMX1BST1BTIiwgIk9OX0FOSSIsICJDQU1FTF9SRVBMQUNFIiwgIklTX0RPTSIsICJvbkNoYW5nZUlucHV0VHlwZSIsICJ0ZXN0IiwgInBhcmVudCIsICJjYWxsYmFjayIsICJ0ZXh0Q29udGVudCIsICJwcmVhY3RSZW5kZXIiLCAiaHlkcmF0ZSIsICJwcmVhY3RIeWRyYXRlIiwgImtleSIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgInYiLCAid3JpdGFibGUiLCAidmFsdWUiLCAib2xkRXZlbnRIb29rIiwgImV2ZW50IiwgImVtcHR5IiwgImlzUHJvcGFnYXRpb25TdG9wcGVkIiwgImNhbmNlbEJ1YmJsZSIsICJpc0RlZmF1bHRQcmV2ZW50ZWQiLCAiZGVmYXVsdFByZXZlbnRlZCIsICJwZXJzaXN0IiwgIm5hdGl2ZUV2ZW50IiwgImN1cnJlbnRDb21wb25lbnQiLCAiY2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlIiwgImVudW1lcmFibGUiLCAiY2xhc3MiLCAib2xkVk5vZGVIb29rIiwgIm5vcm1hbGl6ZWRQcm9wcyIsICJsb3dlckNhc2VkIiwgInRvTG93ZXJDYXNlIiwgInJlcGxhY2UiLCAibXVsdGlwbGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJzZWxlY3RlZCIsICJkZWZhdWx0VmFsdWUiLCAiY2xhc3NOYW1lIiwgIm9sZEJlZm9yZVJlbmRlciIsICJfX3IiLCAib2xkRGlmZmVkIiwgImRpZmZlZCIsICJkb20iLCAiX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQiLCAiUmVhY3RDdXJyZW50RGlzcGF0Y2hlciIsICJyZWFkQ29udGV4dCIsICJfX24iLCAidXNlQ2FsbGJhY2siLCAidXNlQ29udGV4dCIsICJ1c2VEZWJ1Z1ZhbHVlIiwgInVzZURlZmVycmVkVmFsdWUiLCAidXNlRWZmZWN0IiwgInVzZUlkIiwgInVzZUltcGVyYXRpdmVIYW5kbGUiLCAidXNlSW5zZXJ0aW9uRWZmZWN0IiwgInVzZUxheW91dEVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVJlZHVjZXIiLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwgInVzZVRyYW5zaXRpb24iLCAiY3JlYXRlRmFjdG9yeSIsICJ0eXBlIiwgImNyZWF0ZUVsZW1lbnQiLCAiYmluZCIsICJpc1ZhbGlkRWxlbWVudCIsICJlbGVtZW50IiwgIiQkdHlwZW9mIiwgIlJFQUNUX0VMRU1FTlRfVFlQRSIsICJpc0ZyYWdtZW50IiwgIkZyYWdtZW50IiwgImlzTWVtbyIsICJkaXNwbGF5TmFtZSIsICJTdHJpbmciLCAic3RhcnRzV2l0aCIsICJjbG9uZUVsZW1lbnQiLCAicHJlYWN0Q2xvbmVFbGVtZW50IiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwgImNvbnRhaW5lciIsICJfX2siLCAicHJlYWN0UmVuZGVyIiwgImZpbmRET01Ob2RlIiwgImNvbXBvbmVudCIsICJiYXNlIiwgIm5vZGVUeXBlIiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgImNhbGxiYWNrIiwgImFyZyIsICJmbHVzaFN5bmMiLCAiU3RyaWN0TW9kZSIsICJzdGFydFRyYW5zaXRpb24iLCAiY2IiLCAidXNlRGVmZXJyZWRWYWx1ZSIsICJ2YWwiLCAidXNlVHJhbnNpdGlvbiIsICJ1c2VJbnNlcnRpb25FZmZlY3QiLCAidXNlTGF5b3V0RWZmZWN0IiwgImlzRWxlbWVudCIsICJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsICJzdWJzY3JpYmUiLCAiZ2V0U25hcHNob3QiLCAidmFsdWUiLCAidXNlU3RhdGUiLCAiX2luc3RhbmNlIiwgIl9fIiwgIl9nZXRTbmFwc2hvdCIsICJfdXNlU3RhdGUiLCAiZm9yY2VVcGRhdGUiLCAiZGlkU25hcHNob3RDaGFuZ2UiLCAidXNlRWZmZWN0IiwgImluc3QiLCAieCIsICJ5IiwgImxhdGVzdEdldFNuYXBzaG90IiwgInByZXZWYWx1ZSIsICJuZXh0VmFsdWUiLCAiZXJyb3IiLCAiaW5kZXgiLCAidXNlSWQiLCAidXNlUmVkdWNlciIsICJ1c2VSZWYiLCAidXNlSW1wZXJhdGl2ZUhhbmRsZSIsICJ1c2VNZW1vIiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRleHQiLCAidXNlRGVidWdWYWx1ZSIsICJ2ZXJzaW9uIiwgIkNoaWxkcmVuIiwgInJlbmRlciIsICJoeWRyYXRlIiwgImNyZWF0ZVBvcnRhbCIsICJjcmVhdGVDb250ZXh0IiwgImNyZWF0ZVJlZiIsICJDb21wb25lbnQiLCAiUHVyZUNvbXBvbmVudCIsICJtZW1vIiwgImZvcndhcmRSZWYiLCAiU3VzcGVuc2UiLCAiU3VzcGVuc2VMaXN0IiwgImxhenkiLCAiX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQiLCAidm5vZGVJZCIsICJpc0FycmF5IiwgIkFycmF5IiwgImNyZWF0ZVZOb2RlIiwgInR5cGUiLCAicHJvcHMiLCAia2V5IiwgImlzU3RhdGljQ2hpbGRyZW4iLCAiX19zb3VyY2UiLCAiX19zZWxmIiwgInJlZiIsICJpIiwgIm5vcm1hbGl6ZWRQcm9wcyIsICJ2bm9kZSIsICJfX2siLCAiX18iLCAiX19iIiwgIl9fZSIsICJfX2QiLCAiX19jIiwgImNvbnN0cnVjdG9yIiwgIl9fdiIsICJfX2kiLCAiX191IiwgImRlZmF1bHRQcm9wcyIsICJvcHRpb25zIiwgImlubGluZSIsICJQIiwgIkYiLCAicSIsICJfIiwgInUiLCAiZW5kIiwgIngiLCAic3RhdGUiLCAieSIsICJ1IiwgIlAiLCAicSIsICJ4IiwgImlubGluZSIsICJGIiwgIl8iLCAiaW5kZXgiLCAidmFsdWUiLCAiYiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiQ29udGV4dHVhbEtleXdvcmQiLCAiVG9rZW5UeXBlIiwgInJlZ2V4cCIsICJzdHJpbmciLCAiYXJyb3ciLCAiaGFzaCIsICJhc3NpZ24iLCAiX2RlZmF1bHQiLCAiX2V4dGVuZHMiLCAiX3R5cGVvZiIsICJlbmQiLCAiY2hhckNvZGVzIiwgInNlbWljb2xvbiIsICJjYXJldCIsICJsaW5lIiwgImNvbHVtbiIsICJpIiwgImwiLCAibWF0Y2giLCAiaSIsICJjaGFyIiwgImkiLCAibmV4dCIsICJJZGVudGlmaWVyUm9sZSIsICJKU1hSb2xlIiwgInRva2VuIiwgImkiLCAibWF0Y2giLCAic2l6ZSIsICJpbmRleCIsICJ0b2tlbiIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAicHJlZml4IiwgImluZGV4IiwgInRva2VuIiwgInMiLCAidGV4dCIsICJ3aGl0ZXNwYWNlIiwgImkiLCAiYyIsICJvcHRpb25zIiwgImkiLCAidG9rZW4iLCAib3B0aW9ucyIsICJpIiwgImNvbXBvbmVudHMiLCAiaW5kZXgiLCAidG9rZW4iLCAib3B0aW9ucyIsICJsaW5lIiwgImkiLCAidG9rZW4iLCAiaSIsICJ0b2tlbiIsICJ0IiwgIm9wdGlvbnMiLCAibWF0Y2giLCAibWF0Y2giLCAiRnVuY3Rpb25UeXBlIiwgImkiLCAibWF0Y2giLCAibWF0Y2giLCAibWF0Y2giLCAibWF0Y2giLCAidG9rZW4iLCAiZGVjbGFyYXRpb24iLCAibWF0Y2giLCAidG9rZW4iLCAiZW5kIiwgInBhcnNlIiwgImlucHV0IiwgImlzSlNYRW5hYmxlZCIsICJpc1R5cGVTY3JpcHRFbmFibGVkIiwgImlzRmxvd0VuYWJsZWQiLCAiaW5kZXgiLCAidG9rZW4iLCAiaXNGbG93RW5hYmxlZCIsICJpbmRleCIsICJ0b2tlbiIsICJ0MiIsICJ0MyIsICJwcmVmaXgiLCAiaSIsICJ0b2tlbiIsICJpIiwgInRva2VuIiwgInByZWZpeCIsICJ0b2tlbiIsICJpZGVudGlmaWVyIiwgImluZGV4IiwgIm9wdGlvbnMiLCAiaSIsICJpIiwgImZuIiwgIl8iLCAiXzIiLCAidG9rZW4iLCAibmV4dFRva2VuIiwgImkiLCAiaW5kZXgiLCAib3B0aW9ucyIsICJpbmRleCIsICJ0b2tlbiIsICJ0b2tlbiIsICJpIiwgIm9wdGlvbnMiLCAicHJlZml4IiwgInYiLCAicyIsICJuZXh0VG9rZW4iLCAiaSIsICJpIiwgImluZGV4IiwgIm9wdGlvbnMiLCAiZSIsICJvcHRpb25zIiwgImlzSlNYRW5hYmxlZCIsICJpc1R5cGVTY3JpcHRFbmFibGVkIiwgImlzRmxvd0VuYWJsZWQiLCAicGFyc2UiLCAiXyIsICJpbXBvcnRfb2JzaWRpYW4iLCAicCIsICJxIiwgIl8iLCAiRiIsICJlIiwgIkYiLCAiXyIsICJ4IiwgInN0YXRlIiwgInAiLCAidSIsICJwIiwgIl8iLCAiZXJyb3IiLCAieCIsICJhcGkiLCAidSIsICJxIiwgInN0eWxlIiwgInUiLCAiaW1wb3J0X29ic2lkaWFuIiwgInUiLCAiZGlzYWJsZWQiLCAib25DaGFuZ2UiLCAieCIsICJtaW4iLCAibWF4IiwgIm9wdGlvbnMiLCAiZSIsICJpY29uIiwgImMiLCAiRmllbGRiZWFyaW5ncyIsICJnZXQiLCAiRXh0cmFjdG9ycyIsICJrZXkiLCAiZnJvbnRtYXR0ZXIiLCAibWVyZ2UiLCAiUCIsICJKc29uQ29udmVyc2lvbiIsICJpbnB1dCIsICJqc29uIiwgInYiLCAibGluZSIsICJpbmRleCIsICJjaGFyIiwgImxpbmUiLCAiYSIsICJiIiwgImkiLCAibGluZSIsICJyZWdleCIsICJtYXRjaCIsICJmIiwgInByZWZpeCIsICJmIiwgImwiLCAiaSIsICJsaW5lIiwgImlucHV0IiwgIngiLCAibyIsICJ0IiwgInIiLCAiZSIsICJpIiwgInQiLCAiaSIsICJlIiwgInIiLCAidCIsICJvIiwgInIiLCAibCIsICJ0IiwgImUiLCAibiIsICJpIiwgInUiLCAiYSIsICJmIiwgIm8iLCAiaSIsICJvIiwgIm4iLCAiaSIsICJpIiwgIl9yZWYiLCAicCIsICJvbkNoYW5nZSIsICJ4IiwgInZhbHVlIiwgImkiLCAiaSIsICJvIiwgInAiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAiX2dldFByb3RvdHlwZU9mIiwgInQiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJzZWxmIiwgInNlbGYiLCAiaSIsICJvcHRpb25zIiwgIlN0eWxlU2hlZXQiLCAiaXNJbXBvcnRSdWxlIiwgImUiLCAibGVuZ3RoIiwgIm1hdGNoIiwgImluZGV4IiwgImJlZ2luIiwgImVuZCIsICJhcnJheSIsICJsZW5ndGgiLCAibmV4dCIsICJiZWdpbiIsICJlbmQiLCAid2hpdGVzcGFjZSIsICJuZXh0IiwgImluZGV4IiwgIm5leHQiLCAicGFyc2UiLCAiaW5kZXgiLCAib2Zmc2V0IiwgImxlbmd0aCIsICJjaGFyYWN0ZXIiLCAiY2hhcmFjdGVycyIsICJuZXh0IiwgIndoaXRlc3BhY2UiLCAic2l6ZSIsICJpIiwgImoiLCAiayIsICJ4IiwgInkiLCAieiIsICJsZW5ndGgiLCAiaSIsICJpbmRleCIsICJsZW5ndGgiLCAiaW5kZXgiLCAiaSIsICJmbiIsICJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCAiYmVnaW4iLCAiaW5kZXgiLCAiY2hhcmFjdGVyIiwgIm5leHQiLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJjb21wYXQiLCAiaSIsICJrIiwgImoiLCAicmVtb3ZlTGFiZWwiLCAiaXNJZ25vcmluZ0NvbW1lbnQiLCAiY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0iLCAibm9kZSIsICJpc0ltcG9ydFJ1bGUiLCAiaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzIiwgIm51bGxpZnlFbGVtZW50IiwgImluY29ycmVjdEltcG9ydEFsYXJtIiwgImxlbmd0aCIsICJwcmVmaXhlciIsICJtYXRjaCIsICJjcmVhdGVDYWNoZSIsICJvcHRpb25zIiwgInN0eWxpcyIsICJzdHlsZXMiLCAiaW5zZXJ0IiwgImNsYXNzTmFtZXMiLCAicmVnaXN0ZXJTdHlsZXMiLCAiaW5zZXJ0U3R5bGVzIiwgImgiLCAiayIsICJpIiwgImlzQ3VzdG9tUHJvcGVydHkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInByb2Nlc3NTdHlsZVZhbHVlIiwgIm1hdGNoIiwgInAyIiwgIm5leHQiLCAic3R5bGVzIiwgInN0cmluZyIsICJpIiwgInNlcmlhbGl6ZVN0eWxlcyIsICJzeW5jRmFsbGJhY2siLCAiQSIsICJpc0Jyb3dzZXIiLCAid2l0aEVtb3Rpb25DYWNoZSIsICJrIiwgIlAiLCAiaXNCcm93c2VyIiwgImdldExhc3RQYXJ0IiwgImdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZSIsICJsaW5lIiwgIm1hdGNoIiwgInNhbml0aXplSWRlbnRpZmllciIsICJpZGVudGlmaWVyIiwgImdldExhYmVsRnJvbVN0YWNrVHJhY2UiLCAiaSIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiUCIsICJqc3giLCAiaSIsICJzdHlsZXMiLCAiUCIsICJpc0Jyb3dzZXIiLCAiX3JlZiIsICJuZXh0IiwgIkYiLCAibm9kZSIsICJrZXlmcmFtZXMiLCAiY2xhc3NuYW1lcyIsICJrIiwgImNzcyIsICJJbnNlcnRpb24iLCAiY3giLCAidiIsICJ4IiwgInkiLCAibm9kZSIsICJfcmVmIiwgImdldENvbXB1dGVkU3R5bGUiLCAibm9kZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgIm5vZGUiLCAiY3NzIiwgImdldENvbXB1dGVkU3R5bGUiLCAiJCIsICJ4IiwgInkiLCAib3B0aW9ucyIsICJlIiwgIl9yZWYiLCAiQSIsICJub29wIiwgInByZWZpeCIsICJzdGF0ZSIsICJpIiwgImNsZWFuVmFsdWUiLCAiY2xlYW5Db21tb25Qcm9wcyIsICJnZXRTdHlsZVByb3BzIiwgInQiLCAiYiIsICJjIiwgImQiLCAiZSIsICJ3IiwgInJlbW92ZVByb3BzIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiY29udHJvbEhlaWdodCIsICJjb2VyY2VQbGFjZW1lbnQiLCAicCIsICJtZW51Q1NTIiwgIl9vYmplY3RTcHJlYWQyIiwgImJvcmRlclJhZGl1cyIsICJzcGFjaW5nIiwgImNvbG9ycyIsICJNZW51UGxhY2VyIiwgIlAiLCAiRiIsICJzdGF0ZSIsICJNZW51IiwgIm1lbnVMaXN0Q1NTIiwgImJhc2VVbml0IiwgIk1lbnVMaXN0IiwgIm5vdGljZUNTUyIsICJOb09wdGlvbnNNZXNzYWdlIiwgIkxvYWRpbmdNZXNzYWdlIiwgIm1lbnVQb3J0YWxDU1MiLCAib2Zmc2V0IiwgInBvc2l0aW9uIiwgIk1lbnVQb3J0YWwiLCAicSIsICJ4IiwgImoiLCAiY29udGFpbmVyQ1NTIiwgIlNlbGVjdENvbnRhaW5lciIsICJ2YWx1ZUNvbnRhaW5lckNTUyIsICJWYWx1ZUNvbnRhaW5lciIsICJpbmRpY2F0b3JzQ29udGFpbmVyQ1NTIiwgIkluZGljYXRvcnNDb250YWluZXIiLCAiU3ZnIiwgInNpemUiLCAiQ3Jvc3NJY29uIiwgIkRvd25DaGV2cm9uIiwgImJhc2VDU1MiLCAiRHJvcGRvd25JbmRpY2F0b3IiLCAiQ2xlYXJJbmRpY2F0b3IiLCAiaW5kaWNhdG9yU2VwYXJhdG9yQ1NTIiwgIkluZGljYXRvclNlcGFyYXRvciIsICJsb2FkaW5nSW5kaWNhdG9yQ1NTIiwgIkxvYWRpbmdEb3QiLCAiTG9hZGluZ0luZGljYXRvciIsICJjc3MiLCAiQ29udHJvbCIsICJncm91cENTUyIsICJHcm91cCIsICJncm91cEhlYWRpbmdDU1MiLCAiR3JvdXBIZWFkaW5nIiwgIl9leGNsdWRlZCIsICJpbnB1dENTUyIsICJpbnB1dFN0eWxlIiwgIklucHV0IiwgIm11bHRpVmFsdWVDU1MiLCAibXVsdGlWYWx1ZUxhYmVsQ1NTIiwgIm11bHRpVmFsdWVSZW1vdmVDU1MiLCAiTXVsdGlWYWx1ZUdlbmVyaWMiLCAiTXVsdGlWYWx1ZSIsICJjb21wb25lbnRzIiwgIm9wdGlvbkNTUyIsICJPcHRpb24iLCAicGxhY2Vob2xkZXJDU1MiLCAiUGxhY2Vob2xkZXIiLCAiU2luZ2xlVmFsdWUiLCAiZGVmYXVsdENvbXBvbmVudHMiLCAiaSIsICJpc0VxdWFsIiwgIkExMXlUZXh0IiwgIm9wdGlvbnMiLCAiaXNBcHBsZURldmljZSIsICJnZXRBcnJheUluZGV4IiwgImRpc2FibGVkIiwgIkxpdmVSZWdpb24iLCAiZ2V0T3B0aW9uTGFiZWwiLCAiaXNPcHRpb25EaXNhYmxlZCIsICJzY3JlZW5SZWFkZXJTdGF0dXMiLCAicSIsICJhc09wdGlvbiIsICJkIiwgImkiLCAiaiIsICJzdHJpcERpYWNyaXRpY3MiLCAibWF0Y2giLCAidHJpbVN0cmluZyIsICJkZWZhdWx0U3RyaW5naWZ5IiwgImNyZWF0ZUZpbHRlciIsICJjb25maWciLCAic3RyaW5naWZ5IiwgInRyaW0iLCAiaW5wdXQiLCAiX2V4Y2x1ZGVkIiwgIl9yZWYiLCAiY2FuY2VsU2Nyb2xsIiwgIkYiLCAieCIsICJfIiwgImUiLCAiYmx1clNlbGVjdElucHV0IiwgInRhcmdldFJlZiIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmMiIsICJSZXF1aXJlZElucHV0IiwgIm9uRm9jdXMiLCAib25DaGFuZ2UiLCAiZm9ybWF0R3JvdXBMYWJlbCIsICJjc3MiLCAiX3JlZiIsICJpbmRleCIsICJnZXRPcHRpb25MYWJlbCIsICJnZXRPcHRpb25WYWx1ZSIsICJjYXRlZ29yaXplZE9wdGlvbiIsICJzdGF0ZSIsICJvcHRpb25zIiwgImdldEZvY3VzZWRPcHRpb25JZCIsICJpIiwgInNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMiLCAiU2VsZWN0IiwgIm9uQ2hhbmdlIiwgImN1c3RvbSIsICJfcmVmMiIsICJfcmVmMyIsICJlIiwgImlzQ2xlYXJhYmxlIiwgImlzT3B0aW9uRGlzYWJsZWQiLCAiZm9ybWF0R3JvdXBMYWJlbCIsICJJbnB1dCIsICJNdWx0aVZhbHVlIiwgIk11bHRpVmFsdWVDb250YWluZXIiLCAiTXVsdGlWYWx1ZUxhYmVsIiwgIk11bHRpVmFsdWVSZW1vdmUiLCAiU2luZ2xlVmFsdWUiLCAiUGxhY2Vob2xkZXIiLCAib3B0IiwgIkNsZWFySW5kaWNhdG9yIiwgIkxvYWRpbmdJbmRpY2F0b3IiLCAiRHJvcGRvd25JbmRpY2F0b3IiLCAiSW5kaWNhdG9yU2VwYXJhdG9yIiwgIkdyb3VwIiwgIkdyb3VwSGVhZGluZyIsICJNZW51IiwgIk1lbnVMaXN0IiwgIk1lbnVQb3J0YWwiLCAiTG9hZGluZ01lc3NhZ2UiLCAiTm9PcHRpb25zTWVzc2FnZSIsICJPcHRpb24iLCAibG9hZGluZ01lc3NhZ2UiLCAibm9PcHRpb25zTWVzc2FnZSIsICJyZW5kZXIiLCAiZGVsaW1pdGVyIiwgImlucHV0IiwgIkNvbnRyb2wiLCAiSW5kaWNhdG9yc0NvbnRhaW5lciIsICJTZWxlY3RDb250YWluZXIiLCAiVmFsdWVDb250YWluZXIiLCAiayIsICJzdGF0ZSIsICJvbkNoYW5nZSIsICJ1IiwgIkYiLCAiXyIsICJlIiwgInUiLCAiY29uZmlnIiwgInN0YXRlIiwgInEiLCAiciIsICJpIiwgIl9hIiwgInUiLCAidGV4dCIsICJ0cmltIiwgIm1hdGNoIiwgImwiLCAieCIsICJ0IiwgIllhbWxDb252ZXJzaW9uIiwgImxpbmUiLCAib25DaGFuZ2UiLCAiUCIsICJ4IiwgInRleHQiLCAiaW5pdGlhbCIsICJxIiwgInkiLCAicyIsICJzdGF0ZSIsICJGIiwgInUiLCAiXyIsICJjb25maWciLCAib25DaGFuZ2UiLCAieCIsICJvIiwgIlAiLCAidiIsICJlIiwgInRleHQiLCAiaW5saW5lIiwgInAiLCAiUCIsICJ1IiwgImluZGV4IiwgInUiLCAicSIsICJQIiwgImEiLCAicCIsICJjb21wbGV0ZWRSZWYiLCAiRiIsICJfIiwgImMiLCAiZiIsICJfYSIsICJ2IiwgInEiLCAidSIsICJpIiwgInAiLCAieCIsICJwYWdlIiwgIlAiLCAiaW5wdXQiLCAibWluIiwgIm1heCIsICJfIiwgIm93bktleXMiLCAiX29iamVjdFNwcmVhZDIiLCAiaSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgImkiLCAiX2NyZWF0ZUNsYXNzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJpIiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfbiIsICJvIiwgIm4iLCAibm9vcCIsICJlIiwgIl9yZWYiLCAiZ2V0IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfcmVmMiIsICJfb2JqZWN0U3ByZWFkMiIsICJzZXQiLCAib25DaGFuZ2UiLCAiZCIsICJjc3MiLCAic2l6ZSIsICJhcnJheSIsICJub2RlIiwgInN0eWxlcyIsICJ0cmFuc2Zvcm0iLCAicyIsICJ3IiwgImxpc3RlbmVyIiwgImZuIiwgInByZWZpeCIsICJiaW5kSW50ZXJuYWw0IiwgImEiLCAiYiIsICJjIiwgImxlbmd0aCIsICJzdHJpbmciLCAiY291bnRlciIsICJpbmRleCIsICJpY29uIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJwcmVmaXgiLCAiYnVpbGQiLCAibG9va3VwIiwgIm8iLCAiaWNvbiIsICJhIiwgIm9uQ2hhbmdlIiwgImMiLCAiZW1wdHlDYW5vbmljYWxJY29uIiwgInYiLCAiTGlicmFyeSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NyZWF0ZUNsYXNzIiwgIl9vYmplY3RTcHJlYWQyIiwgIl9yZWYiLCAiayIsICJtaXhvdXQiLCAiX3R5cGVvZiIsICJob29rcyIsICJub0F1dG8iLCAicGFyc2UiLCAiYXV0b1JlcGxhY2UiLCAiZ2V0IiwgInN0eWxlcyIsICJ0cmFuc2Zvcm0iLCAib2Zmc2V0IiwgIl9yZWYyIiwgIl9zbGljZWRUb0FycmF5IiwgIm5vb3AiLCAicCIsICJiZWdpbiIsICJlbmQiLCAibm9kZSIsICJpMnN2ZyIsICJjb21tZW50IiwgInJlcGxhY2UiLCAib3B0aW9ucyIsICJzdHlsZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiaGNsQWRkIiwgImhjbFJlbW92ZSIsICJwcmVmaXhlcyIsICJmIiwgImUiLCAibmV4dCIsICJyZW5kZXIiLCAibWFzayIsICJfcmVmMyIsICJsYXllciIsICJjb3VudGVyIiwgInRleHQiLCAicHJvdmlkZXMiLCAicG9zaXRpb24iLCAid2F0Y2giLCAicGFyc2VUcmFuc2Zvcm1TdHJpbmciLCAibiIsICJwcm92aWRlcnMiLCAiaSIsICJvd25LZXlzIiwgIl9vYmplY3RTcHJlYWQyIiwgImkiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90eXBlb2YiLCAib2JqIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJvIiwgIm4iLCAiZmxpcCIsICJzaXplIiwgInN0cmluZyIsICJtYXRjaCIsICJfZXhjbHVkZWQiLCAicyIsICJjb252ZXJ0IiwgImNyZWF0ZUVsZW1lbnQiLCAiUFJPRFVDVElPTiIsICJlIiwgImljb24iLCAidHJhbnNmb3JtIiwgIlByb3BUeXBlcyIsICJhIiwgImIiLCAiaW5kZXgiLCAiRiIsICJxIiwgInUiLCAiY29sdW1uIiwgImNvbmZpZyIsICJQIiwgInYiLCAiciIsICJlIiwgImljb24iLCAiaWNvbiIsICJ1IiwgInEiLCAidSIsICJmIiwgImluZGV4IiwgInIiLCAiZW5kIiwgImUiLCAicyIsICJsIiwgImNvcHkiLCAiYSIsICJiIiwgInYiLCAieCIsICJpIiwgIm5leHQiLCAiRGF0YUFycmF5IiwgImZyb20iLCAiQ29lcmNlIiwgInN0cmluZyIsICJhcnJheSIsICJkZWZlcnJlZCIsICJiIiwgImxhbmd1YWdlIiwgImxpbmUiLCAidSIsICJiIiwgImlubGluZSIsICJ0ZXh0IiwgInAiLCAiZSIsICJtaW4iLCAibWF4IiwgIm9wdGlvbnMiLCAib25DaGFuZ2UiLCAieCIsICJxIiwgImEiLCAibiIsICJUcmVlVXRpbHMiLCAibm9kZSIsICJuIiwgImwiLCAiZW5kIiwgImluZGV4IiwgInNsaWNlIiwgImluaXRpYWwiLCAiYSIsICJiIiwgInQiLCAiciIsICJ4IiwgInN0YXRlIiwgImsiLCAicSIsICJ5IiwgImNvbHVtbiIsICJQIiwgInUiLCAiY29uZmlnIiwgImkiLCAidiIsICJfIiwgImUiLCAiRiIsICJDb250ZXh0IiwgInMiLCAiX2EiLCAiYXBpIiwgInAiLCAieCIsICJ5IiwgInEiLCAiXyIsICJQIiwgIkYiLCAiaW5saW5lIiwgInUiLCAiZW5kIiwgImUiLCAiaW5wdXQiLCAicHJvY2VzcyIsICJQYXJzaW1tb24iLCAiZSIsICJpbnB1dCIsICJpbXBvcnRfb2JzaWRpYW4iLCAicHJlZml4IiwgInNldCIsICJCVHJlZSIsICJhIiwgImIiLCAic2V0IiwgImEiLCAiYiIsICJjIiwgIngiLCAiYyIsICJzZWxmIiwgImsiLCAicCIsICJpbmRleCIsICJGdW5jdGlvbnMiLCAiRGVmYXVsdEZ1bmN0aW9ucyIsICJfIiwgImEiLCAidCIsICJkIiwgImUiLCAiX24iLCAibCIsICJsaW5rIiwgInBhcnNlZERhdGUiLCAiZiIsICJtYXRjaCIsICJkYXRlIiwgIm4iLCAiYiIsICJ2IiwgIm9iamVjdCIsICJsaXN0IiwgInMiLCAic3RyIiwgInN0cmluZyIsICJlbmQiLCAibGVuZ3RoIiwgImFycmF5IiwgImZ1bmN0aW9ucyIsICJzIiwgImEiLCAiYiIsICJhcmdzIiwgInJlc29sdmVkIiwgImUiLCAiVmFyaWFibGVzIiwgImZvbGRlZCIsICJmIiwgIkZpbHRlclRyZWVzIiwgImZpbHRlciIsICJhIiwgImluZGV4IiwgImlkIiwgImxvY2FsZm9yYWdlIiwgImsiLCAiV29ya2VyIiwgImltcG9ydF9vYnNpZGlhbiIsICJub3ciLCAiV29ya2VyIiwgImltcG9ydF9vYnNpZGlhbiIsICJzaXplIiwgImltcG9ydF9xdWV1ZSIsICJpbXBvcnRfb2JzaWRpYW4iLCAieCIsICJzIiwgImwiLCAiZiIsICJhIiwgInJlc3VsdCIsICJzdG9yZSIsICJuZXh0IiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiUCIsICJxIiwgInN0YXRlIiwgInAiLCAieCIsICJ1IiwgImUiLCAicyIsICJ2IiwgIm9uQ2hhbmdlIiwgIm9wdGlvbnMiLCAiZiIsICJhcGkiLCAidSIsICJjb25maWciLCAidGV4dCIsICJlIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL3BhcnNpbW1vbi9zcmMvcGFyc2ltbW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci90b2tlbml6ZXIva2V5d29yZHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdG9rZW5pemVyL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3Rva2VuaXplci9zdGF0ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci91dGlsL2NoYXJjb2Rlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci90cmF2ZXJzZXIvYmFzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci90cmF2ZXJzZXIvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci91dGlsL3doaXRlc3BhY2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdXRpbC9pZGVudGlmaWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3Rva2VuaXplci9yZWFkV29yZFRyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdG9rZW5pemVyL3JlYWRXb3JkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3Rva2VuaXplci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3BhcnNlci9wbHVnaW5zL2pzeC94aHRtbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvZ2V0SlNYUHJhZ21hSW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9UcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9KU1hUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvQ0pTSW1wb3J0UHJvY2Vzc29yLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9zZXQtYXJyYXkvc3JjL3NldC1hcnJheS50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjL3NyYy92bHEudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9zcmMvc3RyaW5ncy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjL3NyYy9zY29wZXMudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9zcmMvc291cmNlbWFwLWNvZGVjLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9yZXNvbHZlLXVyaS9zcmMvcmVzb2x2ZS11cmkudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvc3JjL3Jlc29sdmUudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvc3JjL3N0cmlwLWZpbGVuYW1lLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy9zb3VyY2VtYXAtc2VnbWVudC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvc29ydC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvYmluYXJ5LXNlYXJjaC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy9zcmMvYnktc291cmNlLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy9hbnktbWFwLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nL3NyYy90cmFjZS1tYXBwaW5nLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9nZW4tbWFwcGluZy9zcmMvc291cmNlbWFwLXNlZ21lbnQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nL3NyYy9nZW4tbWFwcGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2NvbXB1dGVTb3VyY2VNYXAuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9IZWxwZXJNYW5hZ2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL2dldElkZW50aWZpZXJOYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L05hbWVNYW5hZ2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy90cy1pbnRlcmZhY2UtY2hlY2tlci9kaXN0L3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWludGVyZmFjZS1jaGVja2VyL2Rpc3QvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWludGVyZmFjZS1jaGVja2VyL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9PcHRpb25zLWdlbi10eXBlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L09wdGlvbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdHJhdmVyc2VyL2x2YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvcGx1Z2lucy90eXBlc2NyaXB0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3BsdWdpbnMvanN4L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3BsdWdpbnMvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdHJhdmVyc2VyL2V4cHJlc3Npb24uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvcGx1Z2lucy9mbG93LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL3RyYXZlcnNlci9zdGF0ZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC9wYXJzZXIvdHJhdmVyc2VyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvcGFyc2VyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdXRpbC9pc0FzeW5jT3BlcmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvVG9rZW5Qcm9jZXNzb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL2dldENsYXNzSW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvZWxpZGVJbXBvcnRFcXVhbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL2dldERlY2xhcmF0aW9uSW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvaXNFeHBvcnRGcm9tLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdXRpbC9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL3Nob3VsZEVsaWRlRGVmYXVsdEV4cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9DSlNJbXBvcnRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9FU01JbXBvcnRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9GbG93VHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC90cmFuc2Zvcm1lcnMvSmVzdEhvaXN0VHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC90cmFuc2Zvcm1lcnMvTnVtZXJpY1NlcGFyYXRvclRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdHJhbnNmb3JtZXJzL09wdGlvbmFsQ2F0Y2hCaW5kaW5nVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC90cmFuc2Zvcm1lcnMvT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9SZWFjdERpc3BsYXlOYW1lVHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC90cmFuc2Zvcm1lcnMvUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3V0aWwvaXNJZGVudGlmaWVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdHJhbnNmb3JtZXJzL1R5cGVTY3JpcHRUcmFuc2Zvcm1lci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L3RyYW5zZm9ybWVycy9Sb290VHJhbnNmb3JtZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2xpbmVzLWFuZC1jb2x1bW5zL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdWNyYXNlL2Rpc3QvdXRpbC9mb3JtYXRUb2tlbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N1Y3Jhc2UvZGlzdC91dGlsL2dldFRTSW1wb3J0ZWROYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3VjcmFzZS9kaXN0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY29uc3RhbnRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvb3B0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtZWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb21wb25lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9wcm9wcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtY29udGV4dC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL2NoaWxkcmVuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvcmVuZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvY2F0Y2gtZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY2xvbmUtZWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL3NyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvUHVyZUNvbXBvbmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvbWVtby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvZm9yd2FyZFJlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvQ2hpbGRyZW4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL3N1c3BlbnNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9zdXNwZW5zZS1saXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvcG9ydGFscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvcmVuZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvdXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdC9kaXN0L3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QuY2pzLnByb2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QvZGlzdC91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmNqcy5kZXYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QvZGlzdC91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmNqcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5janMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkMi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZVN1cGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90YWdnZWRUZW1wbGF0ZUxpdGVyYWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9oYXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvcmVhY3QtZm9udGF3ZXNvbWUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NvcnRlZC1idHJlZS9iK3RyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2xvY2FsZm9yYWdlL2Rpc3QvbG9jYWxmb3JhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZS9zcmMvcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZS9pbmRleC5qcyIsICIuLi8uLi9zcmMvbWFpbi50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2x1eG9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9lbmdsaXNoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC9mb3JtYXR0ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2ludmFsaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy96b25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvc3lzdGVtWm9uZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL3pvbmVzL0lBTkFab25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvZml4ZWRPZmZzZXRab25lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvem9uZXMvaW52YWxpZFpvbmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL3pvbmVVdGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvc2V0dGluZ3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9pbXBsL2xvY2FsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvcmVnZXhQYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9kdXJhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ludGVydmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW5mby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlmZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvZGlnaXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9sdXhvbi9zcmMvaW1wbC90b2tlblBhcnNlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvbHV4b24vc3JjL2ltcGwvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2x1eG9uL3NyYy9kYXRldGltZS5qcyIsICIuLi8uLi9zcmMvdXRpbHMvbm9ybWFsaXplcnMudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vbGluay50cyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9wYXJzZXIudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vbGl0ZXJhbC50cyIsICIuLi8uLi9zcmMvYXBpL3Jlc3VsdC50cyIsICIuLi8uLi9zcmMvZXhwcmVzc2lvbi9maWx0ZXJzLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2V4cHJlc3Npb24udHMiLCAiLi4vLi4vc3JjL3VpL21hcmtkb3duLnRzeCIsICIuLi8uLi9zcmMvdXRpbHMvbWVkaWEudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY29uc3RhbnRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvb3B0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtZWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb21wb25lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9wcm9wcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtY29udGV4dC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL2NoaWxkcmVuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvcmVuZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2Nsb25lLWVsZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9jYXRjaC1lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL3NyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvUHVyZUNvbXBvbmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvbWVtby5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvZm9yd2FyZFJlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvQ2hpbGRyZW4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL3N1c3BlbnNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9zdXNwZW5zZS1saXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvcG9ydGFscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvcmVuZGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL3NyYy91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9zcmMvaW5kZXguanMiLCAiLi4vLi4vc3JjL2FwaS91aS9lbWJlZC50c3giLCAiLi4vLi4vc3JjL3VpL2phdmFzY3JpcHQudHN4IiwgIi4uLy4uL3NyYy91dGlscy9qYXZhc2NyaXB0LnRzIiwgIi4uLy4uL3NyYy91aS9ob29rcy50cyIsICIuLi8uLi9zcmMvdWkvbG9hZGluZy1ib3VuZGFyeS50c3giLCAiLi4vLi4vc3JjL2FwaS91aS9sYXlvdXQudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvYmFzaWNzLnRzeCIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvaW5kZXhhYmxlLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2ZpZWxkLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkLnRzIiwgIi4uLy4uL3NyYy91dGlscy9kYXRhLnRzIiwgIi4uLy4uL3NyYy9pbmRleC90eXBlcy9qc29uL2NvbW1vbi50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvbWFya2Rvd24udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVTdXBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL0VudW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9Ub2tlbml6ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvUGFyc2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1NlcmlhbGl6ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvTWlkZGxld2FyZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vd2Vhay1tZW1vaXplL2Rpc3QvZW1vdGlvbi13ZWFrLW1lbW9pemUuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXRpbHMvZGlzdC9lbW90aW9uLXV0aWxzLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtYjRjOGIyNjUuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMuZG9tLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L2luZGV4LWEzMDFmNTI2LmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvU2VsZWN0LTFmZDU4OGM5LmVzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvcmVhY3Qtc2VsZWN0LmVzbS5qcyIsICIuLi8uLi9zcmMvdWkvZmllbGRzL2Jvb2xlYW4tZmllbGQudHN4IiwgIi4uLy4uL3NyYy91aS9maWVsZHMvcHJvZ3Jlc3MtZmllbGQudHN4IiwgIi4uLy4uL3NyYy91aS9maWVsZHMvcmF0aW5nLnRzeCIsICIuLi8uLi9zcmMvdXRpbHMvdGFzay50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMveWFtbC50cyIsICIuLi8uLi9zcmMvaW5kZXgvZWRpdC9maWVsZC50cyIsICIuLi8uLi9zcmMvdXRpbHMvZmllbGRzLnRzIiwgIi4uLy4uL3NyYy91aS9maWVsZHMvZWRpdGFibGUudHN4IiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvbGlzdC50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy90YXNrLnRzeCIsICIuLi8uLi9zcmMvYXBpL3VpL3ZpZXdzL3BhZ2luZy50c3giLCAiLi4vLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9pbmRleC5tanMiLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy90YWJsZS50c3giLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9jYWxsb3V0LnRzeCIsICIuLi8uLi9zcmMvYXBpL3VpL3ZpZXdzL2NhcmRzLnRzeCIsICIuLi8uLi9zcmMvYXBpL2RhdGEtYXJyYXkudHMiLCAiLi4vLi4vc3JjL2FwaS9jb2VyY2UudHMiLCAiLi4vLi4vc3JjL3V0aWxzL2RlZmVycmVkLnRzIiwgIi4uLy4uL3NyYy9hcGkvc2NyaXB0LWNhY2hlLnRzIiwgIi4uLy4uL3NyYy91aS9maWVsZHMvZWRpdGFibGUtZmllbGRzLnRzeCIsICIuLi8uLi9zcmMvYXBpL3VpL3ZpZXdzL3RyZWUtdGFibGUudHN4IiwgIi4uLy4uL3NyYy9hcGkvbG9jYWwtYXBpLnRzeCIsICIuLi8uLi9zcmMvYXBpL2FwaS50cyIsICIuLi8uLi9zcmMvaW5kZXgvc3RvcmFnZS9mb2xkZXIudHMiLCAiLi4vLi4vc3JjL2luZGV4L3N0b3JhZ2UvaW52ZXJ0ZWQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2ZsYXRxdWV1ZS9pbmRleC5qcyIsICIuLi8uLi9zcmMvaW5kZXgvc3RvcmFnZS9maWVsZHMudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vYmluYXJ5b3AudHMiLCAiLi4vLi4vc3JjL2V4cHJlc3Npb24vZnVuY3Rpb25zLnRzIiwgIi4uLy4uL3NyYy9leHByZXNzaW9uL2V2YWx1YXRvci50cyIsICIuLi8uLi9zcmMvaW5kZXgvc3RvcmFnZS9xdWVyeS1leGVjdXRvci50cyIsICIuLi8uLi9zcmMvaW5kZXgvZGF0YXN0b3JlLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9wZXJzaXN0ZXIudHMiLCAiaW5saW5lLXdvcmtlcjpfX2lubGluZS13b3JrZXIiLCAiLi4vLi4vc3JjL2luZGV4L3dlYi13b3JrZXIvaW1wb3J0ZXIud29ya2VyLnRzIiwgIi4uLy4uL3NyYy9pbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLnRzIiwgIi4uLy4uL3NyYy9pbmRleC9kYXRhY29yZS50cyIsICIuLi8uLi9zcmMvaW5kZXgvdHlwZXMvZmlsZXMudHMiLCAiLi4vLi4vc3JjL2luZGV4L2VtYmVkLXF1ZXVlLnRzIiwgIi4uLy4uL3NyYy9pbmRleC90eXBlcy9jYW52YXMudHMiLCAiLi4vLi4vc3JjL3NldHRpbmdzLnRzIiwgIi4uLy4uL3NyYy91aS92aWV3LXBhZ2UudHN4IiwgIi4uLy4uL3NyYy91aS9pbmRleC1zdGF0dXMudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gUGFyc2ltbW9uKGFjdGlvbikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2ltbW9uKSkge1xuICAgIHJldHVybiBuZXcgUGFyc2ltbW9uKGFjdGlvbik7XG4gIH1cbiAgdGhpcy5fID0gYWN0aW9uO1xufVxuXG52YXIgXyA9IFBhcnNpbW1vbi5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIHRpbWVzKG4sIGYpIHtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKGk7IGkgPCBuOyBpKyspIHtcbiAgICBmKGkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvckVhY2goZiwgYXJyKSB7XG4gIHRpbWVzKGFyci5sZW5ndGgsIGZ1bmN0aW9uKGkpIHtcbiAgICBmKGFycltpXSwgaSwgYXJyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZShmLCBzZWVkLCBhcnIpIHtcbiAgZm9yRWFjaChmdW5jdGlvbihlbGVtLCBpLCBhcnIpIHtcbiAgICBzZWVkID0gZihzZWVkLCBlbGVtLCBpLCBhcnIpO1xuICB9LCBhcnIpO1xuICByZXR1cm4gc2VlZDtcbn1cblxuZnVuY3Rpb24gbWFwKGYsIGFycikge1xuICByZXR1cm4gcmVkdWNlKFxuICAgIGZ1bmN0aW9uKGFjYywgZWxlbSwgaSwgYSkge1xuICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW2YoZWxlbSwgaSwgYSldKTtcbiAgICB9LFxuICAgIFtdLFxuICAgIGFyclxuICApO1xufVxuXG5mdW5jdGlvbiBsc2hpZnRCdWZmZXIoaW5wdXQpIHtcbiAgdmFyIGFzVHdvQnl0ZXMgPSByZWR1Y2UoXG4gICAgZnVuY3Rpb24oYSwgdiwgaSwgYikge1xuICAgICAgcmV0dXJuIGEuY29uY2F0KFxuICAgICAgICBpID09PSBiLmxlbmd0aCAtIDFcbiAgICAgICAgICA/IEJ1ZmZlci5mcm9tKFt2LCAwXSkucmVhZFVJbnQxNkJFKDApXG4gICAgICAgICAgOiBiLnJlYWRVSW50MTZCRShpKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtdLFxuICAgIGlucHV0XG4gICk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICBtYXAoZnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuICgoeCA8PCAxKSAmIDB4ZmZmZikgPj4gODtcbiAgICB9LCBhc1R3b0J5dGVzKVxuICApO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lQml0c0Zyb21CdWZmZXIobiwgaW5wdXQpIHtcbiAgdmFyIHN0YXRlID0geyB2OiAwLCBidWY6IGlucHV0IH07XG4gIHRpbWVzKG4sIGZ1bmN0aW9uKCkge1xuICAgIHN0YXRlID0ge1xuICAgICAgdjogKHN0YXRlLnYgPDwgMSkgfCBiaXRQZWVrQnVmZmVyKHN0YXRlLmJ1ZiksXG4gICAgICBidWY6IGxzaGlmdEJ1ZmZlcihzdGF0ZS5idWYpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYml0UGVla0J1ZmZlcihpbnB1dCkge1xuICByZXR1cm4gaW5wdXRbMF0gPj4gNztcbn1cblxuZnVuY3Rpb24gc3VtKG51bUFycikge1xuICByZXR1cm4gcmVkdWNlKFxuICAgIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ICsgeTtcbiAgICB9LFxuICAgIDAsXG4gICAgbnVtQXJyXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbmQocHJlZCwgYXJyKSB7XG4gIHJldHVybiByZWR1Y2UoXG4gICAgZnVuY3Rpb24oZm91bmQsIGVsZW0pIHtcbiAgICAgIHJldHVybiBmb3VuZCB8fCAocHJlZChlbGVtKSA/IGVsZW0gOiBmb3VuZCk7XG4gICAgfSxcbiAgICBudWxsLFxuICAgIGFyclxuICApO1xufVxuXG5mdW5jdGlvbiBidWZmZXJFeGlzdHMoKSB7XG4gIHJldHVybiB0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiO1xufVxuXG5mdW5jdGlvbiBzZXRFeGlzdHMoKSB7XG4gIGlmIChQYXJzaW1tb24uX3N1cHBvcnRzU2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gUGFyc2ltbW9uLl9zdXBwb3J0c1NldDtcbiAgfVxuICB2YXIgZXhpc3RzID0gdHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgUGFyc2ltbW9uLl9zdXBwb3J0c1NldCA9IGV4aXN0cztcbiAgcmV0dXJuIGV4aXN0cztcbn1cblxuZnVuY3Rpb24gZW5zdXJlQnVmZmVyKCkge1xuICBpZiAoIWJ1ZmZlckV4aXN0cygpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJCdWZmZXIgZ2xvYmFsIGRvZXMgbm90IGV4aXN0OyBwbGVhc2UgdXNlIHdlYnBhY2sgaWYgeW91IG5lZWQgdG8gcGFyc2UgQnVmZmVycyBpbiB0aGUgYnJvd3Nlci5cIlxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYml0U2VxKGFsaWdubWVudHMpIHtcbiAgZW5zdXJlQnVmZmVyKCk7XG4gIHZhciB0b3RhbEJpdHMgPSBzdW0oYWxpZ25tZW50cyk7XG4gIGlmICh0b3RhbEJpdHMgJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGUgYml0cyBbXCIgK1xuICAgICAgICBhbGlnbm1lbnRzLmpvaW4oXCIsIFwiKSArXG4gICAgICAgIFwiXSBhZGQgdXAgdG8gXCIgK1xuICAgICAgICB0b3RhbEJpdHMgK1xuICAgICAgICBcIiB3aGljaCBpcyBub3QgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXM7IHRoZSB0b3RhbCBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IDhcIlxuICAgICk7XG4gIH1cbiAgdmFyIGJ5dGVzID0gdG90YWxCaXRzIC8gODtcblxuICB2YXIgdG9vQmlnUmFuZ2UgPSBmaW5kKGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCA+IDQ4O1xuICB9LCBhbGlnbm1lbnRzKTtcbiAgaWYgKHRvb0JpZ1JhbmdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgdG9vQmlnUmFuZ2UgKyBcIiBiaXQgcmFuZ2UgcmVxdWVzdGVkIGV4Y2VlZHMgNDggYml0ICg2IGJ5dGUpIE51bWJlciBtYXguXCJcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQYXJzaW1tb24oZnVuY3Rpb24oaW5wdXQsIGkpIHtcbiAgICB2YXIgbmV3UG9zID0gYnl0ZXMgKyBpO1xuICAgIGlmIChuZXdQb3MgPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBtYWtlRmFpbHVyZShpLCBieXRlcy50b1N0cmluZygpICsgXCIgYnl0ZXNcIik7XG4gICAgfVxuICAgIHJldHVybiBtYWtlU3VjY2VzcyhcbiAgICAgIG5ld1BvcyxcbiAgICAgIHJlZHVjZShcbiAgICAgICAgZnVuY3Rpb24oYWNjLCBiaXRzKSB7XG4gICAgICAgICAgdmFyIHN0YXRlID0gY29uc3VtZUJpdHNGcm9tQnVmZmVyKGJpdHMsIGFjYy5idWYpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2xsOiBhY2MuY29sbC5jb25jYXQoc3RhdGUudiksXG4gICAgICAgICAgICBidWY6IHN0YXRlLmJ1ZlxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHsgY29sbDogW10sIGJ1ZjogaW5wdXQuc2xpY2UoaSwgbmV3UG9zKSB9LFxuICAgICAgICBhbGlnbm1lbnRzXG4gICAgICApLmNvbGxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYml0U2VxT2JqKG5hbWVkQWxpZ25tZW50cykge1xuICBlbnN1cmVCdWZmZXIoKTtcbiAgdmFyIHNlZW5LZXlzID0ge307XG4gIHZhciB0b3RhbEtleXMgPSAwO1xuICB2YXIgZnVsbEFsaWdubWVudHMgPSBtYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgIGlmIChpc0FycmF5KGl0ZW0pKSB7XG4gICAgICB2YXIgcGFpciA9IGl0ZW07XG4gICAgICBpZiAocGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIHBhaXIuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgIFwiXSBzaG91bGQgYmUgbGVuZ3RoIDIsIGdvdCBsZW5ndGggXCIgK1xuICAgICAgICAgICAgcGFpci5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFN0cmluZyhwYWlyWzBdKTtcbiAgICAgIGFzc2VydE51bWJlcihwYWlyWzFdKTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VlbktleXMsIHBhaXJbMF0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImR1cGxpY2F0ZSBrZXkgaW4gYml0U2VxT2JqOiBcIiArIHBhaXJbMF0pO1xuICAgICAgfVxuICAgICAgc2VlbktleXNbcGFpclswXV0gPSB0cnVlO1xuICAgICAgdG90YWxLZXlzKys7XG4gICAgICByZXR1cm4gcGFpcjtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0TnVtYmVyKGl0ZW0pO1xuICAgICAgcmV0dXJuIFtudWxsLCBpdGVtXTtcbiAgICB9XG4gIH0sIG5hbWVkQWxpZ25tZW50cyk7XG4gIGlmICh0b3RhbEtleXMgPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJiaXRTZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFpciwgZ290IFtcIiArXG4gICAgICAgIG5hbWVkQWxpZ25tZW50cy5qb2luKFwiLCBcIikgK1xuICAgICAgICBcIl1cIlxuICAgICk7XG4gIH1cbiAgdmFyIG5hbWVzT25seSA9IG1hcChmdW5jdGlvbihwYWlyKSB7XG4gICAgcmV0dXJuIHBhaXJbMF07XG4gIH0sIGZ1bGxBbGlnbm1lbnRzKTtcbiAgdmFyIGFsaWdubWVudHNPbmx5ID0gbWFwKGZ1bmN0aW9uKHBhaXIpIHtcbiAgICByZXR1cm4gcGFpclsxXTtcbiAgfSwgZnVsbEFsaWdubWVudHMpO1xuXG4gIHJldHVybiBiaXRTZXEoYWxpZ25tZW50c09ubHkpLm1hcChmdW5jdGlvbihwYXJzZWQpIHtcbiAgICB2YXIgbmFtZWRQYXJzZWQgPSBtYXAoZnVuY3Rpb24obmFtZSwgaSkge1xuICAgICAgcmV0dXJuIFtuYW1lLCBwYXJzZWRbaV1dO1xuICAgIH0sIG5hbWVzT25seSk7XG5cbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgZnVuY3Rpb24ob2JqLCBrdikge1xuICAgICAgICBpZiAoa3ZbMF0gIT09IG51bGwpIHtcbiAgICAgICAgICBvYmpba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICAgIG5hbWVkUGFyc2VkXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQnVmZmVyRm9yKG90aGVyLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyBQYXJzaW1tb24oZnVuY3Rpb24oaW5wdXQsIGkpIHtcbiAgICBlbnN1cmVCdWZmZXIoKTtcbiAgICBpZiAoaSArIGxlbmd0aCA+IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIGxlbmd0aCArIFwiIGJ5dGVzIGZvciBcIiArIG90aGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VTdWNjZXNzKGkgKyBsZW5ndGgsIGlucHV0LnNsaWNlKGksIGkgKyBsZW5ndGgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQnVmZmVyKGxlbmd0aCkge1xuICByZXR1cm4gcGFyc2VCdWZmZXJGb3IoXCJidWZmZXJcIiwgbGVuZ3RoKS5tYXAoZnVuY3Rpb24odW5zYWZlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHVuc2FmZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVkU3RyaW5nKGVuY29kaW5nLCBsZW5ndGgpIHtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwic3RyaW5nXCIsIGxlbmd0aCkubWFwKGZ1bmN0aW9uKGJ1ZmYpIHtcbiAgICByZXR1cm4gYnVmZi50b1N0cmluZyhlbmNvZGluZyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkSW50ZWdlckJ5dGVMZW5ndGhGb3Iod2hvLCBsZW5ndGgpIHtcbiAgaWYgKCFpc0ludGVnZXIobGVuZ3RoKSB8fCBsZW5ndGggPCAwIHx8IGxlbmd0aCA+IDYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Iod2hvICsgXCIgcmVxdWlyZXMgaW50ZWdlciBsZW5ndGggaW4gcmFuZ2UgWzAsIDZdLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1aW50QkUobGVuZ3RoKSB7XG4gIGFzc2VydFZhbGlkSW50ZWdlckJ5dGVMZW5ndGhGb3IoXCJ1aW50QkVcIiwgbGVuZ3RoKTtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwidWludEJFKFwiICsgbGVuZ3RoICsgXCIpXCIsIGxlbmd0aCkubWFwKGZ1bmN0aW9uKGJ1ZmYpIHtcbiAgICByZXR1cm4gYnVmZi5yZWFkVUludEJFKDAsIGxlbmd0aCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1aW50TEUobGVuZ3RoKSB7XG4gIGFzc2VydFZhbGlkSW50ZWdlckJ5dGVMZW5ndGhGb3IoXCJ1aW50TEVcIiwgbGVuZ3RoKTtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwidWludExFKFwiICsgbGVuZ3RoICsgXCIpXCIsIGxlbmd0aCkubWFwKGZ1bmN0aW9uKGJ1ZmYpIHtcbiAgICByZXR1cm4gYnVmZi5yZWFkVUludExFKDAsIGxlbmd0aCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnRCRShsZW5ndGgpIHtcbiAgYXNzZXJ0VmFsaWRJbnRlZ2VyQnl0ZUxlbmd0aEZvcihcImludEJFXCIsIGxlbmd0aCk7XG4gIHJldHVybiBwYXJzZUJ1ZmZlckZvcihcImludEJFKFwiICsgbGVuZ3RoICsgXCIpXCIsIGxlbmd0aCkubWFwKGZ1bmN0aW9uKGJ1ZmYpIHtcbiAgICByZXR1cm4gYnVmZi5yZWFkSW50QkUoMCwgbGVuZ3RoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludExFKGxlbmd0aCkge1xuICBhc3NlcnRWYWxpZEludGVnZXJCeXRlTGVuZ3RoRm9yKFwiaW50TEVcIiwgbGVuZ3RoKTtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwiaW50TEUoXCIgKyBsZW5ndGggKyBcIilcIiwgbGVuZ3RoKS5tYXAoZnVuY3Rpb24oYnVmZikge1xuICAgIHJldHVybiBidWZmLnJlYWRJbnRMRSgwLCBsZW5ndGgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmxvYXRCRSgpIHtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwiZmxvYXRCRVwiLCA0KS5tYXAoZnVuY3Rpb24oYnVmZikge1xuICAgIHJldHVybiBidWZmLnJlYWRGbG9hdEJFKDApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmxvYXRMRSgpIHtcbiAgcmV0dXJuIHBhcnNlQnVmZmVyRm9yKFwiZmxvYXRMRVwiLCA0KS5tYXAoZnVuY3Rpb24oYnVmZikge1xuICAgIHJldHVybiBidWZmLnJlYWRGbG9hdExFKDApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZG91YmxlQkUoKSB7XG4gIHJldHVybiBwYXJzZUJ1ZmZlckZvcihcImRvdWJsZUJFXCIsIDgpLm1hcChmdW5jdGlvbihidWZmKSB7XG4gICAgcmV0dXJuIGJ1ZmYucmVhZERvdWJsZUJFKDApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZG91YmxlTEUoKSB7XG4gIHJldHVybiBwYXJzZUJ1ZmZlckZvcihcImRvdWJsZUxFXCIsIDgpLm1hcChmdW5jdGlvbihidWZmKSB7XG4gICAgcmV0dXJuIGJ1ZmYucmVhZERvdWJsZUxFKDApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheShhcnJMaWtlKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnJMaWtlKTtcbn1cbi8vIC0qLSBIZWxwZXJzIC0qLVxuXG5mdW5jdGlvbiBpc1BhcnNlcihvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFBhcnNpbW1vbjtcbn1cblxuZnVuY3Rpb24gaXNBcnJheSh4KSB7XG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHgpID09PSBcIltvYmplY3QgQXJyYXldXCI7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyKHgpIHtcbiAgLyogZ2xvYmFsIEJ1ZmZlciAqL1xuICByZXR1cm4gYnVmZmVyRXhpc3RzKCkgJiYgQnVmZmVyLmlzQnVmZmVyKHgpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3VjY2VzcyhpbmRleCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IHRydWUsXG4gICAgaW5kZXg6IGluZGV4LFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBmdXJ0aGVzdDogLTEsXG4gICAgZXhwZWN0ZWQ6IFtdXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1ha2VGYWlsdXJlKGluZGV4LCBleHBlY3RlZCkge1xuICBpZiAoIWlzQXJyYXkoZXhwZWN0ZWQpKSB7XG4gICAgZXhwZWN0ZWQgPSBbZXhwZWN0ZWRdO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiBmYWxzZSxcbiAgICBpbmRleDogLTEsXG4gICAgdmFsdWU6IG51bGwsXG4gICAgZnVydGhlc3Q6IGluZGV4LFxuICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVJlcGxpZXMocmVzdWx0LCBsYXN0KSB7XG4gIGlmICghbGFzdCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKHJlc3VsdC5mdXJ0aGVzdCA+IGxhc3QuZnVydGhlc3QpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBleHBlY3RlZCA9XG4gICAgcmVzdWx0LmZ1cnRoZXN0ID09PSBsYXN0LmZ1cnRoZXN0XG4gICAgICA/IHVuaW9uKHJlc3VsdC5leHBlY3RlZCwgbGFzdC5leHBlY3RlZClcbiAgICAgIDogbGFzdC5leHBlY3RlZDtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgaW5kZXg6IHJlc3VsdC5pbmRleCxcbiAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxuICAgIGZ1cnRoZXN0OiBsYXN0LmZ1cnRoZXN0LFxuICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICB9O1xufVxuXG4vLyBpbmRleCBvZiB7IGlucHV0ID0+IHsgaW5kZXggPT4geyBsaW5lTnVtYmVyLCBzdGFydE9mTGluZSB9IH0gfVxuLy8gd2hlbiB3ZSBzZWUgYSBuZXcgaW5kZXggd2UganVzdCB3YWxrIGJhY2t3YXJkcyB0byB0aGUgbGFzdCBzZWVuIGluZGV4IGFuZFxuLy8gY29tcHV0ZSB0aGUgbmV3IGxpbmVOdW1iZXIgYW5kIHN0YXJ0T2ZMaW5lIGZyb20gdGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0b1xuLy8gcmVjb21wdXRlIGZyb20gdGhlIHdob2xlIGlucHV0XG52YXIgbGluZUNvbHVtbkluZGV4ID0ge307XG5mdW5jdGlvbiBtYWtlTGluZUNvbHVtbkluZGV4KGlucHV0LCBpKSB7XG4gIGlmIChpc0J1ZmZlcihpbnB1dCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiBpLFxuICAgICAgbGluZTogLTEsXG4gICAgICBjb2x1bW46IC0xXG4gICAgfTtcbiAgfVxuXG4gIC8vIGluaXRpYWxpemUgaWYgd2UgaGF2ZW4ndCBzZWVuIHRoaXMgaW5wdXQgeWV0XG4gIGlmICghKGlucHV0IGluIGxpbmVDb2x1bW5JbmRleCkpIHtcbiAgICBsaW5lQ29sdW1uSW5kZXhbaW5wdXRdID0ge307XG4gIH1cblxuICB2YXIgaW5wdXRJbmRleCA9IGxpbmVDb2x1bW5JbmRleFtpbnB1dF07XG5cbiAgdmFyIHByZXZMaW5lID0gMDtcbiAgdmFyIG5ld0xpbmVzID0gMDtcbiAgdmFyIGxpbmVTdGFydCA9IDA7XG4gIHZhciBqID0gaTtcbiAgd2hpbGUgKGogPj0gMCkge1xuICAgIGlmIChqIGluIGlucHV0SW5kZXgpIHtcbiAgICAgIHByZXZMaW5lID0gaW5wdXRJbmRleFtqXS5saW5lO1xuICAgICAgLy8gbGluZVN0YXJ0ID09PSAwIHdoZW4gd2UgaGF2ZW4ndCBmb3VuZCBhIG5ldyBsaW5lIG9uIHRoZSB3YWxrXG4gICAgICAvLyBiYWNrIGZyb20gaSwgc28gd2UgYXJlIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIHByZXZpb3VzbHkgY2FjaGVkXG4gICAgICAvLyBpbmRleFxuICAgICAgaWYgKGxpbmVTdGFydCA9PT0gMCkge1xuICAgICAgICBsaW5lU3RhcnQgPSBpbnB1dEluZGV4W2pdLmxpbmVTdGFydDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIC8vIFVuaXggTEYgKFxcbikgb3IgV2luZG93cyBDUkxGIChcXHJcXG4pIGxpbmUgZW5kaW5nXG4gICAgICBpbnB1dC5jaGFyQXQoaikgPT09IFwiXFxuXCIgfHxcbiAgICAgIC8vIE9sZCBNYWMgQ1IgKFxccikgbGluZSBlbmRpbmdcbiAgICAgIChpbnB1dC5jaGFyQXQoaikgPT09IFwiXFxyXCIgJiYgaW5wdXQuY2hhckF0KGogKyAxKSAhPT0gXCJcXG5cIilcbiAgICApIHtcbiAgICAgIG5ld0xpbmVzKys7XG4gICAgICAvLyBsaW5lU3RhcnQgPT09IDAgd2hlbiB0aGlzIGlzIHRoZSBmaXJzdCBuZXcgbGluZSB3ZSBoYXZlIGZvdW5kXG4gICAgICBpZiAobGluZVN0YXJ0ID09PSAwKSB7XG4gICAgICAgIGxpbmVTdGFydCA9IGogKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBqLS07XG4gIH1cblxuICB2YXIgbGluZVdlQXJlVXBUbyA9IHByZXZMaW5lICsgbmV3TGluZXM7XG4gIHZhciBjb2x1bW5XZUFyZVVwVG8gPSBpIC0gbGluZVN0YXJ0O1xuXG4gIGlucHV0SW5kZXhbaV0gPSB7IGxpbmU6IGxpbmVXZUFyZVVwVG8sIGxpbmVTdGFydDogbGluZVN0YXJ0IH07XG5cbiAgLy8gbGluZXMgYW5kIGNvbHVtbnMgYXJlIDEtaW5kZXhlZFxuICByZXR1cm4ge1xuICAgIG9mZnNldDogaSxcbiAgICBsaW5lOiBsaW5lV2VBcmVVcFRvICsgMSxcbiAgICBjb2x1bW46IGNvbHVtbldlQXJlVXBUbyArIDFcbiAgfTtcbn1cblxuLy8gUmV0dXJucyB0aGUgc29ydGVkIHNldCB1bmlvbiBvZiB0d28gYXJyYXlzIG9mIHN0cmluZ3NcbmZ1bmN0aW9uIHVuaW9uKHhzLCB5cykge1xuICAvLyBmb3IgbmV3ZXIgYnJvd3NlcnMvbm9kZSB3ZSBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSB1c2luZ1xuICAvLyBtb2Rlcm4gSlNcbiAgaWYgKHNldEV4aXN0cygpICYmIEFycmF5LmZyb20pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgc2V0ID0gbmV3IFNldCh4cyk7XG4gICAgZm9yICh2YXIgeSA9IDA7IHkgPCB5cy5sZW5ndGg7IHkrKykge1xuICAgICAgc2V0LmFkZCh5c1t5XSk7XG4gICAgfVxuICAgIHZhciBhcnIgPSBBcnJheS5mcm9tKHNldCk7XG4gICAgYXJyLnNvcnQoKTtcbiAgICByZXR1cm4gYXJyO1xuICB9XG4gIHZhciBvYmogPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIG9ialt4c1tpXV0gPSB0cnVlO1xuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDwgeXMubGVuZ3RoOyBqKyspIHtcbiAgICBvYmpbeXNbal1dID0gdHJ1ZTtcbiAgfVxuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaykpIHtcbiAgICAgIGtleXMucHVzaChrKTtcbiAgICB9XG4gIH1cbiAga2V5cy5zb3J0KCk7XG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZXIocCkge1xuICBpZiAoIWlzUGFyc2VyKHApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgcGFyc2VyOiBcIiArIHApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldChpbnB1dCwgaSkge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGlucHV0LmNoYXJBdChpKTtcbiAgfVxuICByZXR1cm4gaW5wdXRbaV07XG59XG5cbi8vIFRPRE9bRVM1XTogU3dpdGNoIHRvIEFycmF5LmlzQXJyYXkgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIGFzc2VydEFycmF5KHgpIHtcbiAgaWYgKCFpc0FycmF5KHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGFuIGFycmF5OiBcIiArIHgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE51bWJlcih4KSB7XG4gIGlmICh0eXBlb2YgeCAhPT0gXCJudW1iZXJcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBhIG51bWJlcjogXCIgKyB4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRSZWdleHAoeCkge1xuICBpZiAoISh4IGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBhIHJlZ2V4cDogXCIgKyB4KTtcbiAgfVxuICB2YXIgZiA9IGZsYWdzKHgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGYubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IGYuY2hhckF0KGkpO1xuICAgIC8vIE9ubHkgYWxsb3cgcmVnZXhwIGZsYWdzIFtpbXVzXSBmb3Igbm93LCBzaW5jZSBbZ10gYW5kIFt5XSBzcGVjaWZpY2FsbHlcbiAgICAvLyBtZXNzIHVwIFBhcnNpbW1vbi4gSWYgbW9yZSBub24tc3RhdGVmdWwgcmVnZXhwIGZsYWdzIGFyZSBhZGRlZCBpbiB0aGVcbiAgICAvLyBmdXR1cmUsIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZC5cbiAgICBpZiAoYyAhPT0gXCJpXCIgJiYgYyAhPT0gXCJtXCIgJiYgYyAhPT0gXCJ1XCIgJiYgYyAhPT0gXCJzXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgcmVnZXhwIGZsYWcgXCInICsgYyArICdcIjogJyArIHgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRGdW5jdGlvbih4KSB7XG4gIGlmICh0eXBlb2YgeCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgZnVuY3Rpb246IFwiICsgeCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U3RyaW5nKHgpIHtcbiAgaWYgKHR5cGVvZiB4ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGEgc3RyaW5nOiBcIiArIHgpO1xuICB9XG59XG5cbi8vIC0qLSBFcnJvciBGb3JtYXR0aW5nIC0qLVxuXG52YXIgbGluZXNCZWZvcmVTdHJpbmdFcnJvciA9IDI7XG52YXIgbGluZXNBZnRlclN0cmluZ0Vycm9yID0gMztcbnZhciBieXRlc1BlckxpbmUgPSA4O1xudmFyIGJ5dGVzQmVmb3JlID0gYnl0ZXNQZXJMaW5lICogNTtcbnZhciBieXRlc0FmdGVyID0gYnl0ZXNQZXJMaW5lICogNDtcbnZhciBkZWZhdWx0TGluZVByZWZpeCA9IFwiICBcIjtcblxuZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgYW1vdW50KSB7XG4gIHJldHVybiBuZXcgQXJyYXkoYW1vdW50ICsgMSkuam9pbihzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRFeHBlY3RlZChleHBlY3RlZCkge1xuICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIFwiRXhwZWN0ZWQ6XFxuXFxuXCIgKyBleHBlY3RlZFswXTtcbiAgfVxuICByZXR1cm4gXCJFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXFxuXFxuXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIik7XG59XG5cbmZ1bmN0aW9uIGxlZnRQYWQoc3RyLCBwYWQsIGNoYXIpIHtcbiAgdmFyIGFkZCA9IHBhZCAtIHN0ci5sZW5ndGg7XG4gIGlmIChhZGQgPD0gMCkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIHJlcGVhdChjaGFyLCBhZGQpICsgc3RyO1xufVxuXG5mdW5jdGlvbiB0b0NodW5rcyhhcnIsIGNodW5rU2l6ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgdmFyIGNodW5rcyA9IFtdO1xuICB2YXIgY2h1bmtJbmRleCA9IDA7XG5cbiAgaWYgKGxlbmd0aCA8PSBjaHVua1NpemUpIHtcbiAgICByZXR1cm4gW2Fyci5zbGljZSgpXTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWNodW5rc1tjaHVua0luZGV4XSkge1xuICAgICAgY2h1bmtzLnB1c2goW10pO1xuICAgIH1cblxuICAgIGNodW5rc1tjaHVua0luZGV4XS5wdXNoKGFycltpXSk7XG5cbiAgICBpZiAoKGkgKyAxKSAlIGNodW5rU2l6ZSA9PT0gMCkge1xuICAgICAgY2h1bmtJbmRleCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaHVua3M7XG59XG5cbi8vIEdldCBhIHJhbmdlIG9mIGluZGV4ZXMgaW5jbHVkaW5nIGBpYC10aCBlbGVtZW50IGFuZCBgYmVmb3JlYCBhbmQgYGFmdGVyYCBhbW91bnQgb2YgZWxlbWVudHMgZnJvbSBgYXJyYC5cbmZ1bmN0aW9uIHJhbmdlRnJvbUluZGV4QW5kT2Zmc2V0cyhpLCBiZWZvcmUsIGFmdGVyLCBsZW5ndGgpIHtcbiAgcmV0dXJuIHtcbiAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSBuZWdhdGl2ZSB1cHBlciBib3VuZCBmb3IgbGluZXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC5cbiAgICBmcm9tOiBpIC0gYmVmb3JlID4gMCA/IGkgLSBiZWZvcmUgOiAwLFxuICAgIHRvOiBpICsgYWZ0ZXIgPiBsZW5ndGggPyBsZW5ndGggOiBpICsgYWZ0ZXJcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnl0ZVJhbmdlVG9SYW5nZShieXRlUmFuZ2UpIHtcbiAgLy8gRXhjZXB0aW9uIGZvciBpbnB1dHMgc21hbGxlciB0aGFuIGBieXRlc1BlckxpbmVgXG4gIGlmIChieXRlUmFuZ2UuZnJvbSA9PT0gMCAmJiBieXRlUmFuZ2UudG8gPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogYnl0ZVJhbmdlLmZyb20sXG4gICAgICB0bzogYnl0ZVJhbmdlLnRvXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZnJvbTogYnl0ZVJhbmdlLmZyb20gLyBieXRlc1BlckxpbmUsXG4gICAgLy8gUm91bmQgYHRvYCwgc28gd2UgZG9uJ3QgZ2V0IGZsb2F0IGlmIHRoZSBhbW91bnQgb2YgYnl0ZXMgaXMgbm90IGRpdmlzaWJsZSBieSBgYnl0ZXNQZXJMaW5lYFxuICAgIHRvOiBNYXRoLmZsb29yKGJ5dGVSYW5nZS50byAvIGJ5dGVzUGVyTGluZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0R290KGlucHV0LCBlcnJvcikge1xuICB2YXIgaW5kZXggPSBlcnJvci5pbmRleDtcbiAgdmFyIGkgPSBpbmRleC5vZmZzZXQ7XG5cbiAgdmFyIHZlcnRpY2FsTWFya2VyTGVuZ3RoID0gMTtcbiAgdmFyIGNvbHVtbjtcbiAgdmFyIGxpbmVXaXRoRXJyb3JJbmRleDtcbiAgdmFyIGxpbmVzO1xuICB2YXIgbGluZVJhbmdlO1xuICB2YXIgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aDtcblxuICBpZiAoaSA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFwiR290IHRoZSBlbmQgb2YgdGhlIGlucHV0XCI7XG4gIH1cblxuICBpZiAoaXNCdWZmZXIoaW5wdXQpKSB7XG4gICAgdmFyIGJ5dGVMaW5lV2l0aEVycm9ySW5kZXggPSBpIC0gKGkgJSBieXRlc1BlckxpbmUpO1xuICAgIHZhciBjb2x1bW5CeXRlSW5kZXggPSBpIC0gYnl0ZUxpbmVXaXRoRXJyb3JJbmRleDtcbiAgICB2YXIgYnl0ZVJhbmdlID0gcmFuZ2VGcm9tSW5kZXhBbmRPZmZzZXRzKFxuICAgICAgYnl0ZUxpbmVXaXRoRXJyb3JJbmRleCxcbiAgICAgIGJ5dGVzQmVmb3JlLFxuICAgICAgYnl0ZXNBZnRlciArIGJ5dGVzUGVyTGluZSxcbiAgICAgIGlucHV0Lmxlbmd0aFxuICAgICk7XG4gICAgdmFyIGJ5dGVzID0gaW5wdXQuc2xpY2UoYnl0ZVJhbmdlLmZyb20sIGJ5dGVSYW5nZS50byk7XG4gICAgdmFyIGJ5dGVzSW5DaHVua3MgPSB0b0NodW5rcyhieXRlcy50b0pTT04oKS5kYXRhLCBieXRlc1BlckxpbmUpO1xuXG4gICAgdmFyIGJ5dGVMaW5lcyA9IG1hcChmdW5jdGlvbihieXRlUm93KSB7XG4gICAgICByZXR1cm4gbWFwKGZ1bmN0aW9uKGJ5dGVWYWx1ZSkge1xuICAgICAgICAvLyBQcmVmaXggYnl0ZSB2YWx1ZXMgd2l0aCBhIGAwYCBpZiB0aGV5IGFyZSBzaG9ydGVyIHRoYW4gMiBjaGFyYWN0ZXJzLlxuICAgICAgICByZXR1cm4gbGVmdFBhZChieXRlVmFsdWUudG9TdHJpbmcoMTYpLCAyLCBcIjBcIik7XG4gICAgICB9LCBieXRlUm93KTtcbiAgICB9LCBieXRlc0luQ2h1bmtzKTtcblxuICAgIGxpbmVSYW5nZSA9IGJ5dGVSYW5nZVRvUmFuZ2UoYnl0ZVJhbmdlKTtcbiAgICBsaW5lV2l0aEVycm9ySW5kZXggPSBieXRlTGluZVdpdGhFcnJvckluZGV4IC8gYnl0ZXNQZXJMaW5lO1xuICAgIGNvbHVtbiA9IGNvbHVtbkJ5dGVJbmRleCAqIDM7XG5cbiAgICAvLyBBY2NvdW50IGZvciBhbiBleHRyYSBzcGFjZS5cbiAgICBpZiAoY29sdW1uQnl0ZUluZGV4ID49IDQpIHtcbiAgICAgIGNvbHVtbiArPSAxO1xuICAgIH1cblxuICAgIHZlcnRpY2FsTWFya2VyTGVuZ3RoID0gMjtcbiAgICBsaW5lcyA9IG1hcChmdW5jdGlvbihieXRlTGluZSkge1xuICAgICAgcmV0dXJuIGJ5dGVMaW5lLmxlbmd0aCA8PSA0XG4gICAgICAgID8gYnl0ZUxpbmUuam9pbihcIiBcIilcbiAgICAgICAgOiBieXRlTGluZS5zbGljZSgwLCA0KS5qb2luKFwiIFwiKSArIFwiICBcIiArIGJ5dGVMaW5lLnNsaWNlKDQpLmpvaW4oXCIgXCIpO1xuICAgIH0sIGJ5dGVMaW5lcyk7XG4gICAgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aCA9IChcbiAgICAgIChsaW5lUmFuZ2UudG8gPiAwID8gbGluZVJhbmdlLnRvIC0gMSA6IGxpbmVSYW5nZS50bykgKiA4XG4gICAgKS50b1N0cmluZygxNikubGVuZ3RoO1xuXG4gICAgaWYgKGxhc3RMaW5lTnVtYmVyTGFiZWxMZW5ndGggPCAyKSB7XG4gICAgICBsYXN0TGluZU51bWJlckxhYmVsTGVuZ3RoID0gMjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGlucHV0TGluZXMgPSBpbnB1dC5zcGxpdCgvXFxyXFxufFtcXG5cXHJcXHUyMDI4XFx1MjAyOV0vKTtcbiAgICBjb2x1bW4gPSBpbmRleC5jb2x1bW4gLSAxO1xuICAgIGxpbmVXaXRoRXJyb3JJbmRleCA9IGluZGV4LmxpbmUgLSAxO1xuICAgIGxpbmVSYW5nZSA9IHJhbmdlRnJvbUluZGV4QW5kT2Zmc2V0cyhcbiAgICAgIGxpbmVXaXRoRXJyb3JJbmRleCxcbiAgICAgIGxpbmVzQmVmb3JlU3RyaW5nRXJyb3IsXG4gICAgICBsaW5lc0FmdGVyU3RyaW5nRXJyb3IsXG4gICAgICBpbnB1dExpbmVzLmxlbmd0aFxuICAgICk7XG5cbiAgICBsaW5lcyA9IGlucHV0TGluZXMuc2xpY2UobGluZVJhbmdlLmZyb20sIGxpbmVSYW5nZS50byk7XG4gICAgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aCA9IGxpbmVSYW5nZS50by50b1N0cmluZygpLmxlbmd0aDtcbiAgfVxuXG4gIHZhciBsaW5lV2l0aEVycm9yQ3VycmVudEluZGV4ID0gbGluZVdpdGhFcnJvckluZGV4IC0gbGluZVJhbmdlLmZyb207XG5cbiAgaWYgKGlzQnVmZmVyKGlucHV0KSkge1xuICAgIGxhc3RMaW5lTnVtYmVyTGFiZWxMZW5ndGggPSAoXG4gICAgICAobGluZVJhbmdlLnRvID4gMCA/IGxpbmVSYW5nZS50byAtIDEgOiBsaW5lUmFuZ2UudG8pICogOFxuICAgICkudG9TdHJpbmcoMTYpLmxlbmd0aDtcblxuICAgIGlmIChsYXN0TGluZU51bWJlckxhYmVsTGVuZ3RoIDwgMikge1xuICAgICAgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aCA9IDI7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpbmVzV2l0aExpbmVOdW1iZXJzID0gcmVkdWNlKFxuICAgIGZ1bmN0aW9uKGFjYywgbGluZVNvdXJjZSwgaW5kZXgpIHtcbiAgICAgIHZhciBpc0xpbmVXaXRoRXJyb3IgPSBpbmRleCA9PT0gbGluZVdpdGhFcnJvckN1cnJlbnRJbmRleDtcbiAgICAgIHZhciBwcmVmaXggPSBpc0xpbmVXaXRoRXJyb3IgPyBcIj4gXCIgOiBkZWZhdWx0TGluZVByZWZpeDtcbiAgICAgIHZhciBsaW5lTnVtYmVyTGFiZWw7XG5cbiAgICAgIGlmIChpc0J1ZmZlcihpbnB1dCkpIHtcbiAgICAgICAgbGluZU51bWJlckxhYmVsID0gbGVmdFBhZChcbiAgICAgICAgICAoKGxpbmVSYW5nZS5mcm9tICsgaW5kZXgpICogOCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgIGxhc3RMaW5lTnVtYmVyTGFiZWxMZW5ndGgsXG4gICAgICAgICAgXCIwXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVOdW1iZXJMYWJlbCA9IGxlZnRQYWQoXG4gICAgICAgICAgKGxpbmVSYW5nZS5mcm9tICsgaW5kZXggKyAxKS50b1N0cmluZygpLFxuICAgICAgICAgIGxhc3RMaW5lTnVtYmVyTGFiZWxMZW5ndGgsXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdLmNvbmNhdChcbiAgICAgICAgYWNjLFxuICAgICAgICBbcHJlZml4ICsgbGluZU51bWJlckxhYmVsICsgXCIgfCBcIiArIGxpbmVTb3VyY2VdLFxuICAgICAgICBpc0xpbmVXaXRoRXJyb3JcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgZGVmYXVsdExpbmVQcmVmaXggK1xuICAgICAgICAgICAgICAgIHJlcGVhdChcIiBcIiwgbGFzdExpbmVOdW1iZXJMYWJlbExlbmd0aCkgK1xuICAgICAgICAgICAgICAgIFwiIHwgXCIgK1xuICAgICAgICAgICAgICAgIGxlZnRQYWQoXCJcIiwgY29sdW1uLCBcIiBcIikgK1xuICAgICAgICAgICAgICAgIHJlcGVhdChcIl5cIiwgdmVydGljYWxNYXJrZXJMZW5ndGgpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtdLFxuICAgIGxpbmVzXG4gICk7XG5cbiAgcmV0dXJuIGxpbmVzV2l0aExpbmVOdW1iZXJzLmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKGlucHV0LCBlcnJvcikge1xuICByZXR1cm4gW1xuICAgIFwiXFxuXCIsXG4gICAgXCItLSBQQVJTSU5HIEZBSUxFRCBcIiArIHJlcGVhdChcIi1cIiwgNTApLFxuICAgIFwiXFxuXFxuXCIsXG4gICAgZm9ybWF0R290KGlucHV0LCBlcnJvciksXG4gICAgXCJcXG5cXG5cIixcbiAgICBmb3JtYXRFeHBlY3RlZChlcnJvci5leHBlY3RlZCksXG4gICAgXCJcXG5cIlxuICBdLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGZsYWdzKHJlKSB7XG4gIGlmIChyZS5mbGFncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlLmZsYWdzO1xuICB9XG4gIC8vIGxlZ2FjeSBicm93c2VyIHN1cHBvcnRcbiAgcmV0dXJuIFtcbiAgICByZS5nbG9iYWwgPyBcImdcIiA6IFwiXCIsXG4gICAgcmUuaWdub3JlQ2FzZSA/IFwiaVwiIDogXCJcIixcbiAgICByZS5tdWx0aWxpbmUgPyBcIm1cIiA6IFwiXCIsXG4gICAgcmUudW5pY29kZSA/IFwidVwiIDogXCJcIixcbiAgICByZS5zdGlja3kgPyBcInlcIiA6IFwiXCJcbiAgXS5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBhbmNob3JlZFJlZ2V4cChyZSkge1xuICByZXR1cm4gUmVnRXhwKFwiXig/OlwiICsgcmUuc291cmNlICsgXCIpXCIsIGZsYWdzKHJlKSk7XG59XG5cbi8vIC0qLSBDb21iaW5hdG9ycyAtKi1cblxuZnVuY3Rpb24gc2VxKCkge1xuICB2YXIgcGFyc2VycyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgdmFyIG51bVBhcnNlcnMgPSBwYXJzZXJzLmxlbmd0aDtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1QYXJzZXJzOyBqICs9IDEpIHtcbiAgICBhc3NlcnRQYXJzZXIocGFyc2Vyc1tqXSk7XG4gIH1cbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdmFyIGFjY3VtID0gbmV3IEFycmF5KG51bVBhcnNlcnMpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtUGFyc2VyczsgaiArPSAxKSB7XG4gICAgICByZXN1bHQgPSBtZXJnZVJlcGxpZXMocGFyc2Vyc1tqXS5fKGlucHV0LCBpKSwgcmVzdWx0KTtcbiAgICAgIGlmICghcmVzdWx0LnN0YXR1cykge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgYWNjdW1bal0gPSByZXN1bHQudmFsdWU7XG4gICAgICBpID0gcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VSZXBsaWVzKG1ha2VTdWNjZXNzKGksIGFjY3VtKSwgcmVzdWx0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlcU9iaigpIHtcbiAgdmFyIHNlZW5LZXlzID0ge307XG4gIHZhciB0b3RhbEtleXMgPSAwO1xuICB2YXIgcGFyc2VycyA9IHRvQXJyYXkoYXJndW1lbnRzKTtcbiAgdmFyIG51bVBhcnNlcnMgPSBwYXJzZXJzLmxlbmd0aDtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1QYXJzZXJzOyBqICs9IDEpIHtcbiAgICB2YXIgcCA9IHBhcnNlcnNbal07XG4gICAgaWYgKGlzUGFyc2VyKHApKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkocCkpIHtcbiAgICAgIHZhciBpc1dlbGxGb3JtZWQgPVxuICAgICAgICBwLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgcFswXSA9PT0gXCJzdHJpbmdcIiAmJiBpc1BhcnNlcihwWzFdKTtcbiAgICAgIGlmIChpc1dlbGxGb3JtZWQpIHtcbiAgICAgICAgdmFyIGtleSA9IHBbMF07XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VlbktleXMsIGtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXFPYmo6IGR1cGxpY2F0ZSBrZXkgXCIgKyBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICB0b3RhbEtleXMrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwic2VxT2JqIGFyZ3VtZW50cyBtdXN0IGJlIHBhcnNlcnMgb3IgW3N0cmluZywgcGFyc2VyXSBhcnJheSBwYWlycy5cIlxuICAgICk7XG4gIH1cbiAgaWYgKHRvdGFsS2V5cyA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYXJzZXIsIGZvdW5kIHplcm9cIik7XG4gIH1cbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdmFyIGFjY3VtID0ge307XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1QYXJzZXJzOyBqICs9IDEpIHtcbiAgICAgIHZhciBuYW1lO1xuICAgICAgdmFyIHBhcnNlcjtcbiAgICAgIGlmIChpc0FycmF5KHBhcnNlcnNbal0pKSB7XG4gICAgICAgIG5hbWUgPSBwYXJzZXJzW2pdWzBdO1xuICAgICAgICBwYXJzZXIgPSBwYXJzZXJzW2pdWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IG51bGw7XG4gICAgICAgIHBhcnNlciA9IHBhcnNlcnNbal07XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBtZXJnZVJlcGxpZXMocGFyc2VyLl8oaW5wdXQsIGkpLCByZXN1bHQpO1xuICAgICAgaWYgKCFyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBhY2N1bVtuYW1lXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZVJlcGxpZXMobWFrZVN1Y2Nlc3MoaSwgYWNjdW0pLCByZXN1bHQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2VxTWFwKCkge1xuICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic2VxTWFwIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudFwiKTtcbiAgfVxuICB2YXIgbWFwcGVyID0gYXJncy5wb3AoKTtcbiAgYXNzZXJ0RnVuY3Rpb24obWFwcGVyKTtcbiAgcmV0dXJuIHNlcS5hcHBseShudWxsLCBhcmdzKS5tYXAoZnVuY3Rpb24ocmVzdWx0cykge1xuICAgIHJldHVybiBtYXBwZXIuYXBwbHkobnVsbCwgcmVzdWx0cyk7XG4gIH0pO1xufVxuXG4vLyBUT0RPW0VTNV06IFJldmlzaXQgdGhpcyB3aXRoIE9iamVjdC5rZXlzIGFuZCAuYmluZC5cbmZ1bmN0aW9uIGNyZWF0ZUxhbmd1YWdlKHBhcnNlcnMpIHtcbiAgdmFyIGxhbmd1YWdlID0ge307XG4gIGZvciAodmFyIGtleSBpbiBwYXJzZXJzKSB7XG4gICAgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwocGFyc2Vycywga2V5KSkge1xuICAgICAgKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXJzW2tleV0obGFuZ3VhZ2UpO1xuICAgICAgICB9O1xuICAgICAgICBsYW5ndWFnZVtrZXldID0gbGF6eShmdW5jKTtcbiAgICAgIH0pKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsYW5ndWFnZTtcbn1cblxuZnVuY3Rpb24gYWx0KCkge1xuICB2YXIgcGFyc2VycyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgdmFyIG51bVBhcnNlcnMgPSBwYXJzZXJzLmxlbmd0aDtcbiAgaWYgKG51bVBhcnNlcnMgPT09IDApIHtcbiAgICByZXR1cm4gZmFpbChcInplcm8gYWx0ZXJuYXRlc1wiKTtcbiAgfVxuICBmb3IgKHZhciBqID0gMDsgaiA8IG51bVBhcnNlcnM7IGogKz0gMSkge1xuICAgIGFzc2VydFBhcnNlcihwYXJzZXJzW2pdKTtcbiAgfVxuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcnNlcnMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIHJlc3VsdCA9IG1lcmdlUmVwbGllcyhwYXJzZXJzW2pdLl8oaW5wdXQsIGkpLCByZXN1bHQpO1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlcEJ5KHBhcnNlciwgc2VwYXJhdG9yKSB7XG4gIC8vIEFyZ3VtZW50IGFzc2VydGVkIGJ5IHNlcEJ5MVxuICByZXR1cm4gc2VwQnkxKHBhcnNlciwgc2VwYXJhdG9yKS5vcihzdWNjZWVkKFtdKSk7XG59XG5cbmZ1bmN0aW9uIHNlcEJ5MShwYXJzZXIsIHNlcGFyYXRvcikge1xuICBhc3NlcnRQYXJzZXIocGFyc2VyKTtcbiAgYXNzZXJ0UGFyc2VyKHNlcGFyYXRvcik7XG4gIHZhciBwYWlycyA9IHNlcGFyYXRvci50aGVuKHBhcnNlcikubWFueSgpO1xuICByZXR1cm4gc2VxTWFwKHBhcnNlciwgcGFpcnMsIGZ1bmN0aW9uKHIsIHJzKSB7XG4gICAgcmV0dXJuIFtyXS5jb25jYXQocnMpO1xuICB9KTtcbn1cblxuLy8gLSotIENvcmUgUGFyc2luZyBNZXRob2RzIC0qLVxuXG5fLnBhcnNlID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJzdHJpbmdcIiAmJiAhaXNCdWZmZXIoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCIucGFyc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN0cmluZyBvciBCdWZmZXIgYXMgaXRzIGFyZ3VtZW50XCJcbiAgICApO1xuICB9XG4gIHZhciBwYXJzZVJlc3VsdCA9IHRoaXMuc2tpcChlb2YpLl8oaW5wdXQsIDApO1xuXG4gIHZhciByZXN1bHQ7XG4gIGlmIChwYXJzZVJlc3VsdC5zdGF0dXMpIHtcbiAgICByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHRydWUsXG4gICAgICB2YWx1ZTogcGFyc2VSZXN1bHQudmFsdWVcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICBpbmRleDogbWFrZUxpbmVDb2x1bW5JbmRleChpbnB1dCwgcGFyc2VSZXN1bHQuZnVydGhlc3QpLFxuICAgICAgZXhwZWN0ZWQ6IHBhcnNlUmVzdWx0LmV4cGVjdGVkXG4gICAgfTtcbiAgfVxuXG4gIC8vIHJlbGVhc2UgbWVtb3J5IGZyb20gbGluZUNvbHVtbkluZGV4IG5vdyB3ZSBhcmUgZG9uZSBwYXJzaW5nXG4gIGRlbGV0ZSBsaW5lQ29sdW1uSW5kZXhbaW5wdXRdO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAtKi0gT3RoZXIgTWV0aG9kcyAtKi1cblxuXy50cnlQYXJzZSA9IGZ1bmN0aW9uKHN0cikge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZShzdHIpO1xuICBpZiAocmVzdWx0LnN0YXR1cykge1xuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG1zZyA9IGZvcm1hdEVycm9yKHN0ciwgcmVzdWx0KTtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgZXJyLnR5cGUgPSBcIlBhcnNpbW1vbkVycm9yXCI7XG4gICAgZXJyLnJlc3VsdCA9IHJlc3VsdDtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn07XG5cbl8uYXNzZXJ0ID0gZnVuY3Rpb24oY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIHtcbiAgcmV0dXJuIHRoaXMuY2hhaW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uKHZhbHVlKSA/IHN1Y2NlZWQodmFsdWUpIDogZmFpbChlcnJvck1lc3NhZ2UpO1xuICB9KTtcbn07XG5cbl8ub3IgPSBmdW5jdGlvbihhbHRlcm5hdGl2ZSkge1xuICByZXR1cm4gYWx0KHRoaXMsIGFsdGVybmF0aXZlKTtcbn07XG5cbl8udHJpbSA9IGZ1bmN0aW9uKHBhcnNlcikge1xuICByZXR1cm4gdGhpcy53cmFwKHBhcnNlciwgcGFyc2VyKTtcbn07XG5cbl8ud3JhcCA9IGZ1bmN0aW9uKGxlZnRQYXJzZXIsIHJpZ2h0UGFyc2VyKSB7XG4gIHJldHVybiBzZXFNYXAobGVmdFBhcnNlciwgdGhpcywgcmlnaHRQYXJzZXIsIGZ1bmN0aW9uKGxlZnQsIG1pZGRsZSkge1xuICAgIHJldHVybiBtaWRkbGU7XG4gIH0pO1xufTtcblxuXy50aHJ1ID0gZnVuY3Rpb24od3JhcHBlcikge1xuICByZXR1cm4gd3JhcHBlcih0aGlzKTtcbn07XG5cbl8udGhlbiA9IGZ1bmN0aW9uKG5leHQpIHtcbiAgYXNzZXJ0UGFyc2VyKG5leHQpO1xuICByZXR1cm4gc2VxKHRoaXMsIG5leHQpLm1hcChmdW5jdGlvbihyZXN1bHRzKSB7XG4gICAgcmV0dXJuIHJlc3VsdHNbMV07XG4gIH0pO1xufTtcblxuXy5tYW55ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIGFjY3VtID0gW107XG4gICAgdmFyIHJlc3VsdCA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAoOzspIHtcbiAgICAgIHJlc3VsdCA9IG1lcmdlUmVwbGllcyhzZWxmLl8oaW5wdXQsIGkpLCByZXN1bHQpO1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMpIHtcbiAgICAgICAgaWYgKGkgPT09IHJlc3VsdC5pbmRleCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIFwiICtcbiAgICAgICAgICAgICAgXCJhIHBhcnNlciB3aGljaCBjYW4gYWNjZXB0IHplcm8gY2hhcmFjdGVycyBpcyB1c3VhbGx5IHRoZSBjYXVzZVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gcmVzdWx0LmluZGV4O1xuICAgICAgICBhY2N1bS5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWVyZ2VSZXBsaWVzKG1ha2VTdWNjZXNzKGksIGFjY3VtKSwgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuXy50aWVXaXRoID0gZnVuY3Rpb24oc2VwYXJhdG9yKSB7XG4gIGFzc2VydFN0cmluZyhzZXBhcmF0b3IpO1xuICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oYXJncykge1xuICAgIGFzc2VydEFycmF5KGFyZ3MpO1xuICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgYXNzZXJ0U3RyaW5nKGFyZ3NbMF0pO1xuICAgICAgdmFyIHMgPSBhcmdzWzBdO1xuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFzc2VydFN0cmluZyhhcmdzW2ldKTtcbiAgICAgICAgcyArPSBzZXBhcmF0b3IgKyBhcmdzW2ldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfSk7XG59O1xuXG5fLnRpZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50aWVXaXRoKFwiXCIpO1xufTtcblxuXy50aW1lcyA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWF4ID0gbWluO1xuICB9XG4gIGFzc2VydE51bWJlcihtaW4pO1xuICBhc3NlcnROdW1iZXIobWF4KTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBhY2N1bSA9IFtdO1xuICAgIHZhciByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdmFyIHByZXZSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgZm9yICh2YXIgdGltZXMgPSAwOyB0aW1lcyA8IG1pbjsgdGltZXMgKz0gMSkge1xuICAgICAgcmVzdWx0ID0gc2VsZi5fKGlucHV0LCBpKTtcbiAgICAgIHByZXZSZXN1bHQgPSBtZXJnZVJlcGxpZXMocmVzdWx0LCBwcmV2UmVzdWx0KTtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgIGkgPSByZXN1bHQuaW5kZXg7XG4gICAgICAgIGFjY3VtLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwcmV2UmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDsgdGltZXMgPCBtYXg7IHRpbWVzICs9IDEpIHtcbiAgICAgIHJlc3VsdCA9IHNlbGYuXyhpbnB1dCwgaSk7XG4gICAgICBwcmV2UmVzdWx0ID0gbWVyZ2VSZXBsaWVzKHJlc3VsdCwgcHJldlJlc3VsdCk7XG4gICAgICBpZiAocmVzdWx0LnN0YXR1cykge1xuICAgICAgICBpID0gcmVzdWx0LmluZGV4O1xuICAgICAgICBhY2N1bS5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlUmVwbGllcyhtYWtlU3VjY2VzcyhpLCBhY2N1bSksIHByZXZSZXN1bHQpO1xuICB9KTtcbn07XG5cbl8ucmVzdWx0ID0gZnVuY3Rpb24ocmVzKSB7XG4gIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbn07XG5cbl8uYXRNb3N0ID0gZnVuY3Rpb24obikge1xuICByZXR1cm4gdGhpcy50aW1lcygwLCBuKTtcbn07XG5cbl8uYXRMZWFzdCA9IGZ1bmN0aW9uKG4pIHtcbiAgcmV0dXJuIHNlcU1hcCh0aGlzLnRpbWVzKG4pLCB0aGlzLm1hbnkoKSwgZnVuY3Rpb24oaW5pdCwgcmVzdCkge1xuICAgIHJldHVybiBpbml0LmNvbmNhdChyZXN0KTtcbiAgfSk7XG59O1xuXG5fLm1hcCA9IGZ1bmN0aW9uKGZuKSB7XG4gIGFzc2VydEZ1bmN0aW9uKGZuKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIHJlc3VsdCA9IHNlbGYuXyhpbnB1dCwgaSk7XG4gICAgaWYgKCFyZXN1bHQuc3RhdHVzKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VSZXBsaWVzKG1ha2VTdWNjZXNzKHJlc3VsdC5pbmRleCwgZm4ocmVzdWx0LnZhbHVlKSksIHJlc3VsdCk7XG4gIH0pO1xufTtcblxuXy5jb250cmFtYXAgPSBmdW5jdGlvbihmbikge1xuICBhc3NlcnRGdW5jdGlvbihmbik7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciByZXN1bHQgPSBzZWxmLnBhcnNlKGZuKGlucHV0LnNsaWNlKGkpKSk7XG4gICAgaWYgKCFyZXN1bHQuc3RhdHVzKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVN1Y2Nlc3MoaSArIGlucHV0Lmxlbmd0aCwgcmVzdWx0LnZhbHVlKTtcbiAgfSk7XG59O1xuXG5fLnByb21hcCA9IGZ1bmN0aW9uKGYsIGcpIHtcbiAgYXNzZXJ0RnVuY3Rpb24oZik7XG4gIGFzc2VydEZ1bmN0aW9uKGcpO1xuICByZXR1cm4gdGhpcy5jb250cmFtYXAoZikubWFwKGcpO1xufTtcblxuXy5za2lwID0gZnVuY3Rpb24obmV4dCkge1xuICByZXR1cm4gc2VxKHRoaXMsIG5leHQpLm1hcChmdW5jdGlvbihyZXN1bHRzKSB7XG4gICAgcmV0dXJuIHJlc3VsdHNbMF07XG4gIH0pO1xufTtcblxuXy5tYXJrID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzZXFNYXAoaW5kZXgsIHRoaXMsIGluZGV4LCBmdW5jdGlvbihzdGFydCwgdmFsdWUsIGVuZCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbmQ6IGVuZFxuICAgIH07XG4gIH0pO1xufTtcblxuXy5ub2RlID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gc2VxTWFwKGluZGV4LCB0aGlzLCBpbmRleCwgZnVuY3Rpb24oc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgIGVuZDogZW5kXG4gICAgfTtcbiAgfSk7XG59O1xuXG5fLnNlcEJ5ID0gZnVuY3Rpb24oc2VwYXJhdG9yKSB7XG4gIHJldHVybiBzZXBCeSh0aGlzLCBzZXBhcmF0b3IpO1xufTtcblxuXy5zZXBCeTEgPSBmdW5jdGlvbihzZXBhcmF0b3IpIHtcbiAgcmV0dXJuIHNlcEJ5MSh0aGlzLCBzZXBhcmF0b3IpO1xufTtcblxuXy5sb29rYWhlYWQgPSBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB0aGlzLnNraXAobG9va2FoZWFkKHgpKTtcbn07XG5cbl8ubm90Rm9sbG93ZWRCeSA9IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHRoaXMuc2tpcChub3RGb2xsb3dlZEJ5KHgpKTtcbn07XG5cbl8uZGVzYyA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gIGlmICghaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICBleHBlY3RlZCA9IFtleHBlY3RlZF07XG4gIH1cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIHJlcGx5ID0gc2VsZi5fKGlucHV0LCBpKTtcbiAgICBpZiAoIXJlcGx5LnN0YXR1cykge1xuICAgICAgcmVwbHkuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcGx5O1xuICB9KTtcbn07XG5cbl8uZmFsbGJhY2sgPSBmdW5jdGlvbihyZXN1bHQpIHtcbiAgcmV0dXJuIHRoaXMub3Ioc3VjY2VlZChyZXN1bHQpKTtcbn07XG5cbl8uYXAgPSBmdW5jdGlvbihvdGhlcikge1xuICByZXR1cm4gc2VxTWFwKG90aGVyLCB0aGlzLCBmdW5jdGlvbihmLCB4KSB7XG4gICAgcmV0dXJuIGYoeCk7XG4gIH0pO1xufTtcblxuXy5jaGFpbiA9IGZ1bmN0aW9uKGYpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIHJlc3VsdCA9IHNlbGYuXyhpbnB1dCwgaSk7XG4gICAgaWYgKCFyZXN1bHQuc3RhdHVzKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB2YXIgbmV4dFBhcnNlciA9IGYocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gbWVyZ2VSZXBsaWVzKG5leHRQYXJzZXIuXyhpbnB1dCwgcmVzdWx0LmluZGV4KSwgcmVzdWx0KTtcbiAgfSk7XG59O1xuXG4vLyAtKi0gQ29uc3RydWN0b3JzIC0qLVxuXG5mdW5jdGlvbiBzdHJpbmcoc3RyKSB7XG4gIGFzc2VydFN0cmluZyhzdHIpO1xuICB2YXIgZXhwZWN0ZWQgPSBcIidcIiArIHN0ciArIFwiJ1wiO1xuICByZXR1cm4gUGFyc2ltbW9uKGZ1bmN0aW9uKGlucHV0LCBpKSB7XG4gICAgdmFyIGogPSBpICsgc3RyLmxlbmd0aDtcbiAgICB2YXIgaGVhZCA9IGlucHV0LnNsaWNlKGksIGopO1xuICAgIGlmIChoZWFkID09PSBzdHIpIHtcbiAgICAgIHJldHVybiBtYWtlU3VjY2VzcyhqLCBoZWFkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIGV4cGVjdGVkKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBieXRlKGIpIHtcbiAgZW5zdXJlQnVmZmVyKCk7XG4gIGFzc2VydE51bWJlcihiKTtcbiAgaWYgKGIgPiAweGZmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJWYWx1ZSBzcGVjaWZpZWQgdG8gYnl0ZSBjb25zdHJ1Y3RvciAoXCIgK1xuICAgICAgICBiICtcbiAgICAgICAgXCI9MHhcIiArXG4gICAgICAgIGIudG9TdHJpbmcoMTYpICtcbiAgICAgICAgXCIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuXCJcbiAgICApO1xuICB9XG4gIHZhciBleHBlY3RlZCA9IChiID4gMHhmID8gXCIweFwiIDogXCIweDBcIikgKyBiLnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBoZWFkID0gZ2V0KGlucHV0LCBpKTtcbiAgICBpZiAoaGVhZCA9PT0gYikge1xuICAgICAgcmV0dXJuIG1ha2VTdWNjZXNzKGkgKyAxLCBoZWFkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIGV4cGVjdGVkKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdleHAocmUsIGdyb3VwKSB7XG4gIGFzc2VydFJlZ2V4cChyZSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHtcbiAgICBhc3NlcnROdW1iZXIoZ3JvdXApO1xuICB9IGVsc2Uge1xuICAgIGdyb3VwID0gMDtcbiAgfVxuICB2YXIgYW5jaG9yZWQgPSBhbmNob3JlZFJlZ2V4cChyZSk7XG4gIHZhciBleHBlY3RlZCA9IFwiXCIgKyByZTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBtYXRjaCA9IGFuY2hvcmVkLmV4ZWMoaW5wdXQuc2xpY2UoaSkpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgaWYgKDAgPD0gZ3JvdXAgJiYgZ3JvdXAgPD0gbWF0Y2gubGVuZ3RoKSB7XG4gICAgICAgIHZhciBmdWxsTWF0Y2ggPSBtYXRjaFswXTtcbiAgICAgICAgdmFyIGdyb3VwTWF0Y2ggPSBtYXRjaFtncm91cF07XG4gICAgICAgIHJldHVybiBtYWtlU3VjY2VzcyhpICsgZnVsbE1hdGNoLmxlbmd0aCwgZ3JvdXBNYXRjaCk7XG4gICAgICB9XG4gICAgICB2YXIgbWVzc2FnZSA9XG4gICAgICAgIFwidmFsaWQgbWF0Y2ggZ3JvdXAgKDAgdG8gXCIgKyBtYXRjaC5sZW5ndGggKyBcIikgaW4gXCIgKyBleHBlY3RlZDtcbiAgICAgIHJldHVybiBtYWtlRmFpbHVyZShpLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIGV4cGVjdGVkKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN1Y2NlZWQodmFsdWUpIHtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHJldHVybiBtYWtlU3VjY2VzcyhpLCB2YWx1ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmYWlsKGV4cGVjdGVkKSB7XG4gIHJldHVybiBQYXJzaW1tb24oZnVuY3Rpb24oaW5wdXQsIGkpIHtcbiAgICByZXR1cm4gbWFrZUZhaWx1cmUoaSwgZXhwZWN0ZWQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbG9va2FoZWFkKHgpIHtcbiAgaWYgKGlzUGFyc2VyKHgpKSB7XG4gICAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHguXyhpbnB1dCwgaSk7XG4gICAgICByZXN1bHQuaW5kZXggPSBpO1xuICAgICAgcmVzdWx0LnZhbHVlID0gXCJcIjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gbG9va2FoZWFkKHN0cmluZyh4KSk7XG4gIH0gZWxzZSBpZiAoeCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBsb29rYWhlYWQocmVnZXhwKHgpKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgYSBzdHJpbmcsIHJlZ2V4cCwgb3IgcGFyc2VyOiBcIiArIHgpO1xufVxuXG5mdW5jdGlvbiBub3RGb2xsb3dlZEJ5KHBhcnNlcikge1xuICBhc3NlcnRQYXJzZXIocGFyc2VyKTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciByZXN1bHQgPSBwYXJzZXIuXyhpbnB1dCwgaSk7XG4gICAgdmFyIHRleHQgPSBpbnB1dC5zbGljZShpLCByZXN1bHQuaW5kZXgpO1xuICAgIHJldHVybiByZXN1bHQuc3RhdHVzXG4gICAgICA/IG1ha2VGYWlsdXJlKGksICdub3QgXCInICsgdGV4dCArICdcIicpXG4gICAgICA6IG1ha2VTdWNjZXNzKGksIG51bGwpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdGVzdChwcmVkaWNhdGUpIHtcbiAgYXNzZXJ0RnVuY3Rpb24ocHJlZGljYXRlKTtcbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBjaGFyID0gZ2V0KGlucHV0LCBpKTtcbiAgICBpZiAoaSA8IGlucHV0Lmxlbmd0aCAmJiBwcmVkaWNhdGUoY2hhcikpIHtcbiAgICAgIHJldHVybiBtYWtlU3VjY2VzcyhpICsgMSwgY2hhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtYWtlRmFpbHVyZShpLCBcImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgXCIgKyBwcmVkaWNhdGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uZU9mKHN0cikge1xuICB2YXIgZXhwZWN0ZWQgPSBzdHIuc3BsaXQoXCJcIik7XG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGV4cGVjdGVkLmxlbmd0aDsgaWR4KyspIHtcbiAgICBleHBlY3RlZFtpZHhdID0gXCInXCIgKyBleHBlY3RlZFtpZHhdICsgXCInXCI7XG4gIH1cbiAgcmV0dXJuIHRlc3QoZnVuY3Rpb24oY2gpIHtcbiAgICByZXR1cm4gc3RyLmluZGV4T2YoY2gpID49IDA7XG4gIH0pLmRlc2MoZXhwZWN0ZWQpO1xufVxuXG5mdW5jdGlvbiBub25lT2Yoc3RyKSB7XG4gIHJldHVybiB0ZXN0KGZ1bmN0aW9uKGNoKSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKGNoKSA8IDA7XG4gIH0pLmRlc2MoXCJub25lIG9mICdcIiArIHN0ciArIFwiJ1wiKTtcbn1cblxuZnVuY3Rpb24gY3VzdG9tKHBhcnNpbmdGdW5jdGlvbikge1xuICByZXR1cm4gUGFyc2ltbW9uKHBhcnNpbmdGdW5jdGlvbihtYWtlU3VjY2VzcywgbWFrZUZhaWx1cmUpKTtcbn1cblxuLy8gVE9ET1tFUzVdOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgdXNpbmcgSlNPTi5zdHJpbmdpZnkgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIHJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgcmV0dXJuIHRlc3QoZnVuY3Rpb24oY2gpIHtcbiAgICByZXR1cm4gYmVnaW4gPD0gY2ggJiYgY2ggPD0gZW5kO1xuICB9KS5kZXNjKGJlZ2luICsgXCItXCIgKyBlbmQpO1xufVxuXG5mdW5jdGlvbiB0YWtlV2hpbGUocHJlZGljYXRlKSB7XG4gIGFzc2VydEZ1bmN0aW9uKHByZWRpY2F0ZSk7XG5cbiAgcmV0dXJuIFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHZhciBqID0gaTtcbiAgICB3aGlsZSAoaiA8IGlucHV0Lmxlbmd0aCAmJiBwcmVkaWNhdGUoZ2V0KGlucHV0LCBqKSkpIHtcbiAgICAgIGorKztcbiAgICB9XG4gICAgcmV0dXJuIG1ha2VTdWNjZXNzKGosIGlucHV0LnNsaWNlKGksIGopKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGxhenkoZGVzYywgZikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICBmID0gZGVzYztcbiAgICBkZXNjID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHBhcnNlciA9IFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICAgIHBhcnNlci5fID0gZigpLl87XG4gICAgcmV0dXJuIHBhcnNlci5fKGlucHV0LCBpKTtcbiAgfSk7XG5cbiAgaWYgKGRlc2MpIHtcbiAgICByZXR1cm4gcGFyc2VyLmRlc2MoZGVzYyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuXG4vLyAtKi0gRmFudGFzeSBMYW5kIEV4dHJhcyAtKi1cblxuZnVuY3Rpb24gZW1wdHkoKSB7XG4gIHJldHVybiBmYWlsKFwiZmFudGFzeS1sYW5kL2VtcHR5XCIpO1xufVxuXG5fLmNvbmNhdCA9IF8ub3I7XG5fLmVtcHR5ID0gZW1wdHk7XG5fLm9mID0gc3VjY2VlZDtcbl9bXCJmYW50YXN5LWxhbmQvYXBcIl0gPSBfLmFwO1xuX1tcImZhbnRhc3ktbGFuZC9jaGFpblwiXSA9IF8uY2hhaW47XG5fW1wiZmFudGFzeS1sYW5kL2NvbmNhdFwiXSA9IF8uY29uY2F0O1xuX1tcImZhbnRhc3ktbGFuZC9lbXB0eVwiXSA9IF8uZW1wdHk7XG5fW1wiZmFudGFzeS1sYW5kL29mXCJdID0gXy5vZjtcbl9bXCJmYW50YXN5LWxhbmQvbWFwXCJdID0gXy5tYXA7XG5cbi8vIC0qLSBCYXNlIFBhcnNlcnMgLSotXG5cbnZhciBpbmRleCA9IFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICByZXR1cm4gbWFrZVN1Y2Nlc3MoaSwgbWFrZUxpbmVDb2x1bW5JbmRleChpbnB1dCwgaSkpO1xufSk7XG5cbnZhciBhbnkgPSBQYXJzaW1tb24oZnVuY3Rpb24oaW5wdXQsIGkpIHtcbiAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG1ha2VGYWlsdXJlKGksIFwiYW55IGNoYXJhY3Rlci9ieXRlXCIpO1xuICB9XG4gIHJldHVybiBtYWtlU3VjY2VzcyhpICsgMSwgZ2V0KGlucHV0LCBpKSk7XG59KTtcblxudmFyIGFsbCA9IFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICByZXR1cm4gbWFrZVN1Y2Nlc3MoaW5wdXQubGVuZ3RoLCBpbnB1dC5zbGljZShpKSk7XG59KTtcblxudmFyIGVvZiA9IFBhcnNpbW1vbihmdW5jdGlvbihpbnB1dCwgaSkge1xuICBpZiAoaSA8IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiBtYWtlRmFpbHVyZShpLCBcIkVPRlwiKTtcbiAgfVxuICByZXR1cm4gbWFrZVN1Y2Nlc3MoaSwgbnVsbCk7XG59KTtcblxudmFyIGRpZ2l0ID0gcmVnZXhwKC9bMC05XS8pLmRlc2MoXCJhIGRpZ2l0XCIpO1xudmFyIGRpZ2l0cyA9IHJlZ2V4cCgvWzAtOV0qLykuZGVzYyhcIm9wdGlvbmFsIGRpZ2l0c1wiKTtcbnZhciBsZXR0ZXIgPSByZWdleHAoL1thLXpdL2kpLmRlc2MoXCJhIGxldHRlclwiKTtcbnZhciBsZXR0ZXJzID0gcmVnZXhwKC9bYS16XSovaSkuZGVzYyhcIm9wdGlvbmFsIGxldHRlcnNcIik7XG52YXIgb3B0V2hpdGVzcGFjZSA9IHJlZ2V4cCgvXFxzKi8pLmRlc2MoXCJvcHRpb25hbCB3aGl0ZXNwYWNlXCIpO1xudmFyIHdoaXRlc3BhY2UgPSByZWdleHAoL1xccysvKS5kZXNjKFwid2hpdGVzcGFjZVwiKTtcbnZhciBjciA9IHN0cmluZyhcIlxcclwiKTtcbnZhciBsZiA9IHN0cmluZyhcIlxcblwiKTtcbnZhciBjcmxmID0gc3RyaW5nKFwiXFxyXFxuXCIpO1xudmFyIG5ld2xpbmUgPSBhbHQoY3JsZiwgbGYsIGNyKS5kZXNjKFwibmV3bGluZVwiKTtcbnZhciBlbmQgPSBhbHQobmV3bGluZSwgZW9mKTtcblxuUGFyc2ltbW9uLmFsbCA9IGFsbDtcblBhcnNpbW1vbi5hbHQgPSBhbHQ7XG5QYXJzaW1tb24uYW55ID0gYW55O1xuUGFyc2ltbW9uLmNyID0gY3I7XG5QYXJzaW1tb24uY3JlYXRlTGFuZ3VhZ2UgPSBjcmVhdGVMYW5ndWFnZTtcblBhcnNpbW1vbi5jcmxmID0gY3JsZjtcblBhcnNpbW1vbi5jdXN0b20gPSBjdXN0b207XG5QYXJzaW1tb24uZGlnaXQgPSBkaWdpdDtcblBhcnNpbW1vbi5kaWdpdHMgPSBkaWdpdHM7XG5QYXJzaW1tb24uZW1wdHkgPSBlbXB0eTtcblBhcnNpbW1vbi5lbmQgPSBlbmQ7XG5QYXJzaW1tb24uZW9mID0gZW9mO1xuUGFyc2ltbW9uLmZhaWwgPSBmYWlsO1xuUGFyc2ltbW9uLmZvcm1hdEVycm9yID0gZm9ybWF0RXJyb3I7XG5QYXJzaW1tb24uaW5kZXggPSBpbmRleDtcblBhcnNpbW1vbi5pc1BhcnNlciA9IGlzUGFyc2VyO1xuUGFyc2ltbW9uLmxhenkgPSBsYXp5O1xuUGFyc2ltbW9uLmxldHRlciA9IGxldHRlcjtcblBhcnNpbW1vbi5sZXR0ZXJzID0gbGV0dGVycztcblBhcnNpbW1vbi5sZiA9IGxmO1xuUGFyc2ltbW9uLmxvb2thaGVhZCA9IGxvb2thaGVhZDtcblBhcnNpbW1vbi5tYWtlRmFpbHVyZSA9IG1ha2VGYWlsdXJlO1xuUGFyc2ltbW9uLm1ha2VTdWNjZXNzID0gbWFrZVN1Y2Nlc3M7XG5QYXJzaW1tb24ubmV3bGluZSA9IG5ld2xpbmU7XG5QYXJzaW1tb24ubm9uZU9mID0gbm9uZU9mO1xuUGFyc2ltbW9uLm5vdEZvbGxvd2VkQnkgPSBub3RGb2xsb3dlZEJ5O1xuUGFyc2ltbW9uLm9mID0gc3VjY2VlZDtcblBhcnNpbW1vbi5vbmVPZiA9IG9uZU9mO1xuUGFyc2ltbW9uLm9wdFdoaXRlc3BhY2UgPSBvcHRXaGl0ZXNwYWNlO1xuUGFyc2ltbW9uLlBhcnNlciA9IFBhcnNpbW1vbjtcblBhcnNpbW1vbi5yYW5nZSA9IHJhbmdlO1xuUGFyc2ltbW9uLnJlZ2V4ID0gcmVnZXhwO1xuUGFyc2ltbW9uLnJlZ2V4cCA9IHJlZ2V4cDtcblBhcnNpbW1vbi5zZXBCeSA9IHNlcEJ5O1xuUGFyc2ltbW9uLnNlcEJ5MSA9IHNlcEJ5MTtcblBhcnNpbW1vbi5zZXEgPSBzZXE7XG5QYXJzaW1tb24uc2VxTWFwID0gc2VxTWFwO1xuUGFyc2ltbW9uLnNlcU9iaiA9IHNlcU9iajtcblBhcnNpbW1vbi5zdHJpbmcgPSBzdHJpbmc7XG5QYXJzaW1tb24uc3VjY2VlZCA9IHN1Y2NlZWQ7XG5QYXJzaW1tb24udGFrZVdoaWxlID0gdGFrZVdoaWxlO1xuUGFyc2ltbW9uLnRlc3QgPSB0ZXN0O1xuUGFyc2ltbW9uLndoaXRlc3BhY2UgPSB3aGl0ZXNwYWNlO1xuUGFyc2ltbW9uW1wiZmFudGFzeS1sYW5kL2VtcHR5XCJdID0gZW1wdHk7XG5QYXJzaW1tb25bXCJmYW50YXN5LWxhbmQvb2ZcIl0gPSBzdWNjZWVkO1xuXG5QYXJzaW1tb24uQmluYXJ5ID0ge1xuICBiaXRTZXE6IGJpdFNlcSxcbiAgYml0U2VxT2JqOiBiaXRTZXFPYmosXG4gIGJ5dGU6IGJ5dGUsXG4gIGJ1ZmZlcjogcGFyc2VCdWZmZXIsXG4gIGVuY29kZWRTdHJpbmc6IGVuY29kZWRTdHJpbmcsXG4gIHVpbnRCRTogdWludEJFLFxuICB1aW50OEJFOiB1aW50QkUoMSksXG4gIHVpbnQxNkJFOiB1aW50QkUoMiksXG4gIHVpbnQzMkJFOiB1aW50QkUoNCksXG4gIHVpbnRMRTogdWludExFLFxuICB1aW50OExFOiB1aW50TEUoMSksXG4gIHVpbnQxNkxFOiB1aW50TEUoMiksXG4gIHVpbnQzMkxFOiB1aW50TEUoNCksXG4gIGludEJFOiBpbnRCRSxcbiAgaW50OEJFOiBpbnRCRSgxKSxcbiAgaW50MTZCRTogaW50QkUoMiksXG4gIGludDMyQkU6IGludEJFKDQpLFxuICBpbnRMRTogaW50TEUsXG4gIGludDhMRTogaW50TEUoMSksXG4gIGludDE2TEU6IGludExFKDIpLFxuICBpbnQzMkxFOiBpbnRMRSg0KSxcbiAgZmxvYXRCRTogZmxvYXRCRSgpLFxuICBmbG9hdExFOiBmbG9hdExFKCksXG4gIGRvdWJsZUJFOiBkb3VibGVCRSgpLFxuICBkb3VibGVMRTogZG91YmxlTEUoKVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzaW1tb247XG4iLCAibW9kdWxlLmV4cG9ydHMgPSAoKSA9PiB7XG5cdC8vIGh0dHBzOi8vbXRocy5iZS9lbW9qaVxuXHRyZXR1cm4gL1sjKjAtOV1cXHVGRTBGP1xcdTIwRTN8W1xceEE5XFx4QUVcXHUyMDNDXFx1MjA0OVxcdTIxMjJcXHUyMTM5XFx1MjE5NC1cXHUyMTk5XFx1MjFBOVxcdTIxQUFcXHUyMzFBXFx1MjMxQlxcdTIzMjhcXHUyM0NGXFx1MjNFRC1cXHUyM0VGXFx1MjNGMVxcdTIzRjJcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkJcXHUyNUZDXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYyMFxcdTI2MjJcXHUyNjIzXFx1MjYyNlxcdTI2MkFcXHUyNjJFXFx1MjYyRlxcdTI2MzgtXFx1MjYzQVxcdTI2NDBcXHUyNjQyXFx1MjY0OC1cXHUyNjUzXFx1MjY1RlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3QlxcdTI2N0VcXHUyNjdGXFx1MjY5MlxcdTI2OTQtXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkE3XFx1MjZBQVxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDOFxcdTI2Q0ZcXHUyNkQxXFx1MjZFOVxcdTI2RjAtXFx1MjZGNVxcdTI2RjdcXHUyNkY4XFx1MjZGQVxcdTI3MDJcXHUyNzA4XFx1MjcwOVxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzU3XFx1Mjc2M1xcdTI3QTFcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldXFx1RkUwRj98W1xcdTI2MURcXHUyNzBDXFx1MjcwRF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/fFtcXHUyNzBBXFx1MjcwQl0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjY5M1xcdTI2QTFcXHUyNkFCXFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RkRcXHUyNzA1XFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjUwXXxcXHUyNkQzXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURDQTUpP3xcXHUyNkY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHUyNzY0XFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1RDgzRFxcdUREMjV8XFx1RDgzRVxcdURFNzkpKT98XFx1RDgzQyg/OltcXHVEQzA0XFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdURFMDJcXHVERTM3XFx1REYyMVxcdURGMjQtXFx1REYyQ1xcdURGMzZcXHVERjdEXFx1REY5NlxcdURGOTdcXHVERjk5LVxcdURGOUJcXHVERjlFXFx1REY5RlxcdURGQ0RcXHVERkNFXFx1REZENC1cXHVERkRGXFx1REZGNVxcdURGRjddXFx1RkUwRj98W1xcdURGODVcXHVERkMyXFx1REZDN10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REZDNFxcdURGQ0FdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURGQ0JcXHVERkNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURDQ0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1REUwMVxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTM2XFx1REUzOC1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjBcXHVERjJELVxcdURGMzVcXHVERjM3LVxcdURGNDNcXHVERjQ1LVxcdURGNEFcXHVERjRDLVxcdURGN0NcXHVERjdFLVxcdURGODRcXHVERjg2LVxcdURGOTNcXHVERkEwLVxcdURGQzFcXHVERkM1XFx1REZDNlxcdURGQzhcXHVERkM5XFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGOC1cXHVERkZGXXxcXHVEREU2XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXXxcXHVEREU3XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRlxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERThcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGN1xcdURERkEtXFx1RERGRl18XFx1RERFOVxcdUQ4M0NbXFx1RERFQVxcdURERUNcXHVEREVGXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGRl18XFx1RERFQVxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdfFxcdURERUJcXHVEODNDW1xcdURERUUtXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGN118XFx1RERFQ1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV18XFx1RERFRFxcdUQ4M0NbXFx1RERGMFxcdURERjJcXHVEREYzXFx1RERGN1xcdURERjlcXHVEREZBXXxcXHVEREVFXFx1RDgzQ1tcXHVEREU4LVxcdURERUFcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjldfFxcdURERUZcXHVEODNDW1xcdURERUFcXHVEREYyXFx1RERGNFxcdURERjVdfFxcdURERjBcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREYxXFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdfFxcdURERjJcXHVEODNDW1xcdURERTZcXHVEREU4LVxcdURERURcXHVEREYwLVxcdURERkZdfFxcdURERjNcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQS1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREY0XFx1RERGNVxcdURERjdcXHVEREZBXFx1RERGRl18XFx1RERGNFxcdUQ4M0NcXHVEREYyfFxcdURERjVcXHVEODNDW1xcdURERTZcXHVEREVBLVxcdURERURcXHVEREYwLVxcdURERjNcXHVEREY3LVxcdURERjlcXHVEREZDXFx1RERGRV18XFx1RERGNlxcdUQ4M0NcXHVEREU2fFxcdURERjdcXHVEODNDW1xcdURERUFcXHVEREY0XFx1RERGOFxcdURERkFcXHVEREZDXXxcXHVEREY4XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXXxcXHVEREY5XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERURcXHVEREVGLVxcdURERjRcXHVEREY3XFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRl18XFx1RERGQVxcdUQ4M0NbXFx1RERFNlxcdURERUNcXHVEREYyXFx1RERGM1xcdURERjhcXHVEREZFXFx1RERGRl18XFx1RERGQlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV18XFx1RERGQ1xcdUQ4M0NbXFx1RERFQlxcdURERjhdfFxcdURERkRcXHVEODNDXFx1RERGMHxcXHVEREZFXFx1RDgzQ1tcXHVEREVBXFx1RERGOV18XFx1RERGRlxcdUQ4M0NbXFx1RERFNlxcdURERjJcXHVEREZDXXxcXHVERjQ0KD86XFx1MjAwRFxcdUQ4M0RcXHVERkVCKT98XFx1REY0Qig/OlxcdTIwMERcXHVEODNEXFx1REZFOSk/fFxcdURGQzMoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMEQoPzpbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98XFx1MjdBMVxcdUZFMEY/KSk/fFxcdURGRjNcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHUyNkE3XFx1RkUwRj98XFx1RDgzQ1xcdURGMDgpKT98XFx1REZGNCg/OlxcdTIwMERcXHUyNjIwXFx1RkUwRj98XFx1REI0MFxcdURDNjdcXHVEQjQwXFx1REM2MlxcdURCNDAoPzpcXHVEQzY1XFx1REI0MFxcdURDNkVcXHVEQjQwXFx1REM2N3xcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3Rik/KXxcXHVEODNEKD86W1xcdURDM0ZcXHVEQ0ZEXFx1REQ0OVxcdURENEFcXHVERDZGXFx1REQ3MFxcdURENzNcXHVERDc2LVxcdURENzlcXHVERDg3XFx1REQ4QS1cXHVERDhEXFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkFcXHVERUNCXFx1REVDRC1cXHVERUNGXFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRjBcXHVERUYzXVxcdUZFMEY/fFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MlxcdURDNzQtXFx1REM3NlxcdURDNzhcXHVEQzdDXFx1REM4M1xcdURDODVcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDdBXFx1REQ5NVxcdUREOTZcXHVERTRDXFx1REU0RlxcdURFQzBcXHVERUNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNFxcdURFQjVdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURENzRcXHVERDkwXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT98W1xcdURDMDAtXFx1REMwN1xcdURDMDktXFx1REMxNFxcdURDMTYtXFx1REMyNVxcdURDMjctXFx1REMzQVxcdURDM0MtXFx1REMzRVxcdURDNDBcXHVEQzQ0XFx1REM0NVxcdURDNTEtXFx1REM2NVxcdURDNkFcXHVEQzc5LVxcdURDN0JcXHVEQzdELVxcdURDODBcXHVEQzg0XFx1REM4OC1cXHVEQzhFXFx1REM5MFxcdURDOTItXFx1RENBOVxcdURDQUItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREQTRcXHVEREZCLVxcdURFMkRcXHVERTJGLVxcdURFMzRcXHVERTM3LVxcdURFNDFcXHVERTQzXFx1REU0NFxcdURFNDgtXFx1REU0QVxcdURFODAtXFx1REVBMlxcdURFQTQtXFx1REVCM1xcdURFQjctXFx1REVCRlxcdURFQzEtXFx1REVDNVxcdURFRDAtXFx1REVEMlxcdURFRDUtXFx1REVEN1xcdURFREMtXFx1REVERlxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZDXFx1REZFMC1cXHVERkVCXFx1REZGMF18XFx1REMwOCg/OlxcdTIwMERcXHUyQjFCKT98XFx1REMxNSg/OlxcdTIwMERcXHVEODNFXFx1RERCQSk/fFxcdURDMjYoPzpcXHUyMDBEKD86XFx1MkIxQnxcXHVEODNEXFx1REQyNSkpP3xcXHVEQzNCKD86XFx1MjAwRFxcdTI3NDRcXHVGRTBGPyk/fFxcdURDNDFcXHVGRTBGPyg/OlxcdTIwMERcXHVEODNEXFx1RERFOFxcdUZFMEY/KT98XFx1REM2OCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4fFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldXFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KXxbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2OSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9bXFx1REM2OFxcdURDNjldfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/fFxcdURDNjlcXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVEQzZGKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdURENzUoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdURFMkUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQTgpP3xcXHVERTM1KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0FCKT98XFx1REUzNig/OlxcdTIwMERcXHVEODNDXFx1REYyQlxcdUZFMEY/KT98XFx1REU0Mig/OlxcdTIwMERbXFx1MjE5NFxcdTIxOTVdXFx1RkUwRj8pP3xcXHVERUI2KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpPyl8XFx1RDgzRSg/OltcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMzAtXFx1REQzNFxcdUREMzZcXHVERDc3XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMlxcdURERDNcXHVEREQ1XFx1REVDMy1cXHVERUM1XFx1REVGMFxcdURFRjItXFx1REVGOF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REQyNlxcdUREMzVcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRFxcdUREQ0ZcXHVEREQ0XFx1RERENi1cXHVEREREXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERERFXFx1RERERl0oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREMERcXHVERDBFXFx1REQxMC1cXHVERDE3XFx1REQyMC1cXHVERDI1XFx1REQyNy1cXHVERDJGXFx1REQzQVxcdUREM0YtXFx1REQ0NVxcdURENDctXFx1REQ3NlxcdURENzgtXFx1RERCNFxcdUREQjdcXHVEREJBXFx1RERCQy1cXHVERENDXFx1REREMFxcdURERTAtXFx1RERGRlxcdURFNzAtXFx1REU3Q1xcdURFODAtXFx1REU4OVxcdURFOEYtXFx1REVDMlxcdURFQzZcXHVERUNFLVxcdURFRENcXHVERURGLVxcdURFRTldfFxcdUREM0MoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/fFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFxcdUREQ0UoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMEQoPzpbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98XFx1MjdBMVxcdUZFMEY/KSk/fFxcdURERDEoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdURERDFcXHUyMDBEXFx1RDgzRVxcdURERDIoPzpcXHUyMDBEXFx1RDgzRVxcdURERDIpP3xcXHVEREQyKD86XFx1MjAwRFxcdUQ4M0VcXHVEREQyKT8pKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpPykpP3xcXHVERUYxKD86XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pP3xcXHVERkZDKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSk/fFxcdURGRkQoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKT98XFx1REZGRSg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pP3xcXHVERkZGKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKT8pKT8pL2c7XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIENvbnRleHR1YWxLZXl3b3JkOyAoZnVuY3Rpb24gKENvbnRleHR1YWxLZXl3b3JkKSB7XG4gIGNvbnN0IE5PTkUgPSAwOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIk5PTkVcIl0gPSBOT05FXSA9IFwiTk9ORVwiO1xuICBjb25zdCBfYWJzdHJhY3QgPSBOT05FICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYWJzdHJhY3RcIl0gPSBfYWJzdHJhY3RdID0gXCJfYWJzdHJhY3RcIjtcbiAgY29uc3QgX2FjY2Vzc29yID0gX2Fic3RyYWN0ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYWNjZXNzb3JcIl0gPSBfYWNjZXNzb3JdID0gXCJfYWNjZXNzb3JcIjtcbiAgY29uc3QgX2FzID0gX2FjY2Vzc29yICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXNcIl0gPSBfYXNdID0gXCJfYXNcIjtcbiAgY29uc3QgX2Fzc2VydCA9IF9hcyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Fzc2VydFwiXSA9IF9hc3NlcnRdID0gXCJfYXNzZXJ0XCI7XG4gIGNvbnN0IF9hc3NlcnRzID0gX2Fzc2VydCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Fzc2VydHNcIl0gPSBfYXNzZXJ0c10gPSBcIl9hc3NlcnRzXCI7XG4gIGNvbnN0IF9hc3luYyA9IF9hc3NlcnRzICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXN5bmNcIl0gPSBfYXN5bmNdID0gXCJfYXN5bmNcIjtcbiAgY29uc3QgX2F3YWl0ID0gX2FzeW5jICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfYXdhaXRcIl0gPSBfYXdhaXRdID0gXCJfYXdhaXRcIjtcbiAgY29uc3QgX2NoZWNrcyA9IF9hd2FpdCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2NoZWNrc1wiXSA9IF9jaGVja3NdID0gXCJfY2hlY2tzXCI7XG4gIGNvbnN0IF9jb25zdHJ1Y3RvciA9IF9jaGVja3MgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9jb25zdHJ1Y3RvclwiXSA9IF9jb25zdHJ1Y3Rvcl0gPSBcIl9jb25zdHJ1Y3RvclwiO1xuICBjb25zdCBfZGVjbGFyZSA9IF9jb25zdHJ1Y3RvciArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2RlY2xhcmVcIl0gPSBfZGVjbGFyZV0gPSBcIl9kZWNsYXJlXCI7XG4gIGNvbnN0IF9lbnVtID0gX2RlY2xhcmUgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9lbnVtXCJdID0gX2VudW1dID0gXCJfZW51bVwiO1xuICBjb25zdCBfZXhwb3J0cyA9IF9lbnVtICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfZXhwb3J0c1wiXSA9IF9leHBvcnRzXSA9IFwiX2V4cG9ydHNcIjtcbiAgY29uc3QgX2Zyb20gPSBfZXhwb3J0cyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2Zyb21cIl0gPSBfZnJvbV0gPSBcIl9mcm9tXCI7XG4gIGNvbnN0IF9nZXQgPSBfZnJvbSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2dldFwiXSA9IF9nZXRdID0gXCJfZ2V0XCI7XG4gIGNvbnN0IF9nbG9iYWwgPSBfZ2V0ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfZ2xvYmFsXCJdID0gX2dsb2JhbF0gPSBcIl9nbG9iYWxcIjtcbiAgY29uc3QgX2ltcGxlbWVudHMgPSBfZ2xvYmFsICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfaW1wbGVtZW50c1wiXSA9IF9pbXBsZW1lbnRzXSA9IFwiX2ltcGxlbWVudHNcIjtcbiAgY29uc3QgX2luZmVyID0gX2ltcGxlbWVudHMgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9pbmZlclwiXSA9IF9pbmZlcl0gPSBcIl9pbmZlclwiO1xuICBjb25zdCBfaW50ZXJmYWNlID0gX2luZmVyICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfaW50ZXJmYWNlXCJdID0gX2ludGVyZmFjZV0gPSBcIl9pbnRlcmZhY2VcIjtcbiAgY29uc3QgX2lzID0gX2ludGVyZmFjZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2lzXCJdID0gX2lzXSA9IFwiX2lzXCI7XG4gIGNvbnN0IF9rZXlvZiA9IF9pcyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX2tleW9mXCJdID0gX2tleW9mXSA9IFwiX2tleW9mXCI7XG4gIGNvbnN0IF9taXhpbnMgPSBfa2V5b2YgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9taXhpbnNcIl0gPSBfbWl4aW5zXSA9IFwiX21peGluc1wiO1xuICBjb25zdCBfbW9kdWxlID0gX21peGlucyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX21vZHVsZVwiXSA9IF9tb2R1bGVdID0gXCJfbW9kdWxlXCI7XG4gIGNvbnN0IF9uYW1lc3BhY2UgPSBfbW9kdWxlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfbmFtZXNwYWNlXCJdID0gX25hbWVzcGFjZV0gPSBcIl9uYW1lc3BhY2VcIjtcbiAgY29uc3QgX29mID0gX25hbWVzcGFjZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX29mXCJdID0gX29mXSA9IFwiX29mXCI7XG4gIGNvbnN0IF9vcGFxdWUgPSBfb2YgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9vcGFxdWVcIl0gPSBfb3BhcXVlXSA9IFwiX29wYXF1ZVwiO1xuICBjb25zdCBfb3V0ID0gX29wYXF1ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX291dFwiXSA9IF9vdXRdID0gXCJfb3V0XCI7XG4gIGNvbnN0IF9vdmVycmlkZSA9IF9vdXQgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9vdmVycmlkZVwiXSA9IF9vdmVycmlkZV0gPSBcIl9vdmVycmlkZVwiO1xuICBjb25zdCBfcHJpdmF0ZSA9IF9vdmVycmlkZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3ByaXZhdGVcIl0gPSBfcHJpdmF0ZV0gPSBcIl9wcml2YXRlXCI7XG4gIGNvbnN0IF9wcm90ZWN0ZWQgPSBfcHJpdmF0ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3Byb3RlY3RlZFwiXSA9IF9wcm90ZWN0ZWRdID0gXCJfcHJvdGVjdGVkXCI7XG4gIGNvbnN0IF9wcm90byA9IF9wcm90ZWN0ZWQgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9wcm90b1wiXSA9IF9wcm90b10gPSBcIl9wcm90b1wiO1xuICBjb25zdCBfcHVibGljID0gX3Byb3RvICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfcHVibGljXCJdID0gX3B1YmxpY10gPSBcIl9wdWJsaWNcIjtcbiAgY29uc3QgX3JlYWRvbmx5ID0gX3B1YmxpYyArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3JlYWRvbmx5XCJdID0gX3JlYWRvbmx5XSA9IFwiX3JlYWRvbmx5XCI7XG4gIGNvbnN0IF9yZXF1aXJlID0gX3JlYWRvbmx5ICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfcmVxdWlyZVwiXSA9IF9yZXF1aXJlXSA9IFwiX3JlcXVpcmVcIjtcbiAgY29uc3QgX3NhdGlzZmllcyA9IF9yZXF1aXJlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfc2F0aXNmaWVzXCJdID0gX3NhdGlzZmllc10gPSBcIl9zYXRpc2ZpZXNcIjtcbiAgY29uc3QgX3NldCA9IF9zYXRpc2ZpZXMgKyAxOyBDb250ZXh0dWFsS2V5d29yZFtDb250ZXh0dWFsS2V5d29yZFtcIl9zZXRcIl0gPSBfc2V0XSA9IFwiX3NldFwiO1xuICBjb25zdCBfc3RhdGljID0gX3NldCArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3N0YXRpY1wiXSA9IF9zdGF0aWNdID0gXCJfc3RhdGljXCI7XG4gIGNvbnN0IF9zeW1ib2wgPSBfc3RhdGljICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfc3ltYm9sXCJdID0gX3N5bWJvbF0gPSBcIl9zeW1ib2xcIjtcbiAgY29uc3QgX3R5cGUgPSBfc3ltYm9sICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfdHlwZVwiXSA9IF90eXBlXSA9IFwiX3R5cGVcIjtcbiAgY29uc3QgX3VuaXF1ZSA9IF90eXBlICsgMTsgQ29udGV4dHVhbEtleXdvcmRbQ29udGV4dHVhbEtleXdvcmRbXCJfdW5pcXVlXCJdID0gX3VuaXF1ZV0gPSBcIl91bmlxdWVcIjtcbiAgY29uc3QgX3VzaW5nID0gX3VuaXF1ZSArIDE7IENvbnRleHR1YWxLZXl3b3JkW0NvbnRleHR1YWxLZXl3b3JkW1wiX3VzaW5nXCJdID0gX3VzaW5nXSA9IFwiX3VzaW5nXCI7XG59KShDb250ZXh0dWFsS2V5d29yZCB8fCAoZXhwb3J0cy5Db250ZXh0dWFsS2V5d29yZCA9IENvbnRleHR1YWxLZXl3b3JkID0ge30pKTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOy8vIEdlbmVyYXRlZCBmaWxlLCBkbyBub3QgZWRpdCEgUnVuIFwieWFybiBnZW5lcmF0ZVwiIHRvIHJlLWdlbmVyYXRlIHRoaXMgZmlsZS5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIEVudW0gb2YgYWxsIHRva2VuIHR5cGVzLCB3aXRoIGJpdCBmaWVsZHMgdG8gc2lnbmlmeSBtZWFuaW5nZnVsIHByb3BlcnRpZXMuXG4gKi9cbnZhciBUb2tlblR5cGU7IChmdW5jdGlvbiAoVG9rZW5UeXBlKSB7XG4gIC8vIFByZWNlZGVuY2UgMCBtZWFucyBub3QgYW4gb3BlcmF0b3I7IG90aGVyd2lzZSBpdCBpcyBhIHBvc2l0aXZlIG51bWJlciB1cCB0byAxMi5cbiAgY29uc3QgUFJFQ0VERU5DRV9NQVNLID0gMHhmOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiUFJFQ0VERU5DRV9NQVNLXCJdID0gUFJFQ0VERU5DRV9NQVNLXSA9IFwiUFJFQ0VERU5DRV9NQVNLXCI7XG4gIGNvbnN0IElTX0tFWVdPUkQgPSAxIDw8IDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJJU19LRVlXT1JEXCJdID0gSVNfS0VZV09SRF0gPSBcIklTX0tFWVdPUkRcIjtcbiAgY29uc3QgSVNfQVNTSUdOID0gMSA8PCA1OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfQVNTSUdOXCJdID0gSVNfQVNTSUdOXSA9IFwiSVNfQVNTSUdOXCI7XG4gIGNvbnN0IElTX1JJR0hUX0FTU09DSUFUSVZFID0gMSA8PCA2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfUklHSFRfQVNTT0NJQVRJVkVcIl0gPSBJU19SSUdIVF9BU1NPQ0lBVElWRV0gPSBcIklTX1JJR0hUX0FTU09DSUFUSVZFXCI7XG4gIGNvbnN0IElTX1BSRUZJWCA9IDEgPDwgNzsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIklTX1BSRUZJWFwiXSA9IElTX1BSRUZJWF0gPSBcIklTX1BSRUZJWFwiO1xuICBjb25zdCBJU19QT1NURklYID0gMSA8PCA4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSVNfUE9TVEZJWFwiXSA9IElTX1BPU1RGSVhdID0gXCJJU19QT1NURklYXCI7XG4gIGNvbnN0IElTX0VYUFJFU1NJT05fU1RBUlQgPSAxIDw8IDk7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJJU19FWFBSRVNTSU9OX1NUQVJUXCJdID0gSVNfRVhQUkVTU0lPTl9TVEFSVF0gPSBcIklTX0VYUFJFU1NJT05fU1RBUlRcIjtcblxuICBjb25zdCBudW0gPSA1MTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJudW1cIl0gPSBudW1dID0gXCJudW1cIjsgLy8gbnVtIHN0YXJ0c0V4cHJcbiAgY29uc3QgYmlnaW50ID0gMTUzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJpZ2ludFwiXSA9IGJpZ2ludF0gPSBcImJpZ2ludFwiOyAvLyBiaWdpbnQgc3RhcnRzRXhwclxuICBjb25zdCBkZWNpbWFsID0gMjU2MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImRlY2ltYWxcIl0gPSBkZWNpbWFsXSA9IFwiZGVjaW1hbFwiOyAvLyBkZWNpbWFsIHN0YXJ0c0V4cHJcbiAgY29uc3QgcmVnZXhwID0gMzU4NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInJlZ2V4cFwiXSA9IHJlZ2V4cF0gPSBcInJlZ2V4cFwiOyAvLyByZWdleHAgc3RhcnRzRXhwclxuICBjb25zdCBzdHJpbmcgPSA0NjA4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wic3RyaW5nXCJdID0gc3RyaW5nXSA9IFwic3RyaW5nXCI7IC8vIHN0cmluZyBzdGFydHNFeHByXG4gIGNvbnN0IG5hbWUgPSA1NjMyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibmFtZVwiXSA9IG5hbWVdID0gXCJuYW1lXCI7IC8vIG5hbWUgc3RhcnRzRXhwclxuICBjb25zdCBlb2YgPSA2MTQ0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiZW9mXCJdID0gZW9mXSA9IFwiZW9mXCI7IC8vIGVvZlxuICBjb25zdCBicmFja2V0TCA9IDc2ODA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFja2V0TFwiXSA9IGJyYWNrZXRMXSA9IFwiYnJhY2tldExcIjsgLy8gWyBzdGFydHNFeHByXG4gIGNvbnN0IGJyYWNrZXRSID0gODE5MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJyYWNrZXRSXCJdID0gYnJhY2tldFJdID0gXCJicmFja2V0UlwiOyAvLyBdXG4gIGNvbnN0IGJyYWNlTCA9IDk3Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFjZUxcIl0gPSBicmFjZUxdID0gXCJicmFjZUxcIjsgLy8geyBzdGFydHNFeHByXG4gIGNvbnN0IGJyYWNlQmFyTCA9IDEwNzUyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYnJhY2VCYXJMXCJdID0gYnJhY2VCYXJMXSA9IFwiYnJhY2VCYXJMXCI7IC8vIHt8IHN0YXJ0c0V4cHJcbiAgY29uc3QgYnJhY2VSID0gMTEyNjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJicmFjZVJcIl0gPSBicmFjZVJdID0gXCJicmFjZVJcIjsgLy8gfVxuICBjb25zdCBicmFjZUJhclIgPSAxMjI4ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJyYWNlQmFyUlwiXSA9IGJyYWNlQmFyUl0gPSBcImJyYWNlQmFyUlwiOyAvLyB8fVxuICBjb25zdCBwYXJlbkwgPSAxMzgyNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInBhcmVuTFwiXSA9IHBhcmVuTF0gPSBcInBhcmVuTFwiOyAvLyAoIHN0YXJ0c0V4cHJcbiAgY29uc3QgcGFyZW5SID0gMTQzMzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwYXJlblJcIl0gPSBwYXJlblJdID0gXCJwYXJlblJcIjsgLy8gKVxuICBjb25zdCBjb21tYSA9IDE1MzYwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiY29tbWFcIl0gPSBjb21tYV0gPSBcImNvbW1hXCI7IC8vICxcbiAgY29uc3Qgc2VtaSA9IDE2Mzg0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wic2VtaVwiXSA9IHNlbWldID0gXCJzZW1pXCI7IC8vIDtcbiAgY29uc3QgY29sb24gPSAxNzQwODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImNvbG9uXCJdID0gY29sb25dID0gXCJjb2xvblwiOyAvLyA6XG4gIGNvbnN0IGRvdWJsZUNvbG9uID0gMTg0MzI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJkb3VibGVDb2xvblwiXSA9IGRvdWJsZUNvbG9uXSA9IFwiZG91YmxlQ29sb25cIjsgLy8gOjpcbiAgY29uc3QgZG90ID0gMTk0NTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJkb3RcIl0gPSBkb3RdID0gXCJkb3RcIjsgLy8gLlxuICBjb25zdCBxdWVzdGlvbiA9IDIwNDgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicXVlc3Rpb25cIl0gPSBxdWVzdGlvbl0gPSBcInF1ZXN0aW9uXCI7IC8vID9cbiAgY29uc3QgcXVlc3Rpb25Eb3QgPSAyMTUwNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInF1ZXN0aW9uRG90XCJdID0gcXVlc3Rpb25Eb3RdID0gXCJxdWVzdGlvbkRvdFwiOyAvLyA/LlxuICBjb25zdCBhcnJvdyA9IDIyNTI4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYXJyb3dcIl0gPSBhcnJvd10gPSBcImFycm93XCI7IC8vID0+XG4gIGNvbnN0IHRlbXBsYXRlID0gMjM1NTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJ0ZW1wbGF0ZVwiXSA9IHRlbXBsYXRlXSA9IFwidGVtcGxhdGVcIjsgLy8gdGVtcGxhdGVcbiAgY29uc3QgZWxsaXBzaXMgPSAyNDU3NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImVsbGlwc2lzXCJdID0gZWxsaXBzaXNdID0gXCJlbGxpcHNpc1wiOyAvLyAuLi5cbiAgY29uc3QgYmFja1F1b3RlID0gMjU2MDA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiYWNrUXVvdGVcIl0gPSBiYWNrUXVvdGVdID0gXCJiYWNrUXVvdGVcIjsgLy8gYFxuICBjb25zdCBkb2xsYXJCcmFjZUwgPSAyNzEzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImRvbGxhckJyYWNlTFwiXSA9IGRvbGxhckJyYWNlTF0gPSBcImRvbGxhckJyYWNlTFwiOyAvLyAkeyBzdGFydHNFeHByXG4gIGNvbnN0IGF0ID0gMjc2NDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJhdFwiXSA9IGF0XSA9IFwiYXRcIjsgLy8gQFxuICBjb25zdCBoYXNoID0gMjkxODQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJoYXNoXCJdID0gaGFzaF0gPSBcImhhc2hcIjsgLy8gIyBzdGFydHNFeHByXG4gIGNvbnN0IGVxID0gMjk3Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJlcVwiXSA9IGVxXSA9IFwiZXFcIjsgLy8gPSBpc0Fzc2lnblxuICBjb25zdCBhc3NpZ24gPSAzMDc1MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImFzc2lnblwiXSA9IGFzc2lnbl0gPSBcImFzc2lnblwiOyAvLyBfPSBpc0Fzc2lnblxuICBjb25zdCBwcmVJbmNEZWMgPSAzMjY0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInByZUluY0RlY1wiXSA9IHByZUluY0RlY10gPSBcInByZUluY0RlY1wiOyAvLyArKy8tLSBwcmVmaXggcG9zdGZpeCBzdGFydHNFeHByXG4gIGNvbnN0IHBvc3RJbmNEZWMgPSAzMzY2NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInBvc3RJbmNEZWNcIl0gPSBwb3N0SW5jRGVjXSA9IFwicG9zdEluY0RlY1wiOyAvLyArKy8tLSBwcmVmaXggcG9zdGZpeCBzdGFydHNFeHByXG4gIGNvbnN0IGJhbmcgPSAzNDQzMjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJhbmdcIl0gPSBiYW5nXSA9IFwiYmFuZ1wiOyAvLyAhIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IHRpbGRlID0gMzU0NTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJ0aWxkZVwiXSA9IHRpbGRlXSA9IFwidGlsZGVcIjsgLy8gfiBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBwaXBlbGluZSA9IDM1ODQxOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicGlwZWxpbmVcIl0gPSBwaXBlbGluZV0gPSBcInBpcGVsaW5lXCI7IC8vIHw+IHByZWM6MVxuICBjb25zdCBudWxsaXNoQ29hbGVzY2luZyA9IDM2ODY2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibnVsbGlzaENvYWxlc2NpbmdcIl0gPSBudWxsaXNoQ29hbGVzY2luZ10gPSBcIm51bGxpc2hDb2FsZXNjaW5nXCI7IC8vID8/IHByZWM6MlxuICBjb25zdCBsb2dpY2FsT1IgPSAzNzg5MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImxvZ2ljYWxPUlwiXSA9IGxvZ2ljYWxPUl0gPSBcImxvZ2ljYWxPUlwiOyAvLyB8fCBwcmVjOjJcbiAgY29uc3QgbG9naWNhbEFORCA9IDM4OTE1OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibG9naWNhbEFORFwiXSA9IGxvZ2ljYWxBTkRdID0gXCJsb2dpY2FsQU5EXCI7IC8vICYmIHByZWM6M1xuICBjb25zdCBiaXR3aXNlT1IgPSAzOTk0MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJpdHdpc2VPUlwiXSA9IGJpdHdpc2VPUl0gPSBcImJpdHdpc2VPUlwiOyAvLyB8IHByZWM6NFxuICBjb25zdCBiaXR3aXNlWE9SID0gNDA5NjU7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaXR3aXNlWE9SXCJdID0gYml0d2lzZVhPUl0gPSBcImJpdHdpc2VYT1JcIjsgLy8gXiBwcmVjOjVcbiAgY29uc3QgYml0d2lzZUFORCA9IDQxOTkwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiYml0d2lzZUFORFwiXSA9IGJpdHdpc2VBTkRdID0gXCJiaXR3aXNlQU5EXCI7IC8vICYgcHJlYzo2XG4gIGNvbnN0IGVxdWFsaXR5ID0gNDMwMTU7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJlcXVhbGl0eVwiXSA9IGVxdWFsaXR5XSA9IFwiZXF1YWxpdHlcIjsgLy8gPT0vIT0gcHJlYzo3XG4gIGNvbnN0IGxlc3NUaGFuID0gNDQwNDA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJsZXNzVGhhblwiXSA9IGxlc3NUaGFuXSA9IFwibGVzc1RoYW5cIjsgLy8gPCBwcmVjOjhcbiAgY29uc3QgZ3JlYXRlclRoYW4gPSA0NTA2NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImdyZWF0ZXJUaGFuXCJdID0gZ3JlYXRlclRoYW5dID0gXCJncmVhdGVyVGhhblwiOyAvLyA+IHByZWM6OFxuICBjb25zdCByZWxhdGlvbmFsT3JFcXVhbCA9IDQ2MDg4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wicmVsYXRpb25hbE9yRXF1YWxcIl0gPSByZWxhdGlvbmFsT3JFcXVhbF0gPSBcInJlbGF0aW9uYWxPckVxdWFsXCI7IC8vIDw9Lz49IHByZWM6OFxuICBjb25zdCBiaXRTaGlmdEwgPSA0NzExMzsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImJpdFNoaWZ0TFwiXSA9IGJpdFNoaWZ0TF0gPSBcImJpdFNoaWZ0TFwiOyAvLyA8PCBwcmVjOjlcbiAgY29uc3QgYml0U2hpZnRSID0gNDgxMzc7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJiaXRTaGlmdFJcIl0gPSBiaXRTaGlmdFJdID0gXCJiaXRTaGlmdFJcIjsgLy8gPj4vPj4+IHByZWM6OVxuICBjb25zdCBwbHVzID0gNDk4MDI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJwbHVzXCJdID0gcGx1c10gPSBcInBsdXNcIjsgLy8gKyBwcmVjOjEwIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IG1pbnVzID0gNTA4MjY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJtaW51c1wiXSA9IG1pbnVzXSA9IFwibWludXNcIjsgLy8gLSBwcmVjOjEwIHByZWZpeCBzdGFydHNFeHByXG4gIGNvbnN0IG1vZHVsbyA9IDUxNzIzOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibW9kdWxvXCJdID0gbW9kdWxvXSA9IFwibW9kdWxvXCI7IC8vICUgcHJlYzoxMSBzdGFydHNFeHByXG4gIGNvbnN0IHN0YXIgPSA1MjIzNTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInN0YXJcIl0gPSBzdGFyXSA9IFwic3RhclwiOyAvLyAqIHByZWM6MTFcbiAgY29uc3Qgc2xhc2ggPSA1MzI1OTsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcInNsYXNoXCJdID0gc2xhc2hdID0gXCJzbGFzaFwiOyAvLyAvIHByZWM6MTFcbiAgY29uc3QgZXhwb25lbnQgPSA1NDM0ODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImV4cG9uZW50XCJdID0gZXhwb25lbnRdID0gXCJleHBvbmVudFwiOyAvLyAqKiBwcmVjOjEyIHJpZ2h0QXNzb2NpYXRpdmVcbiAgY29uc3QganN4TmFtZSA9IDU1Mjk2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wianN4TmFtZVwiXSA9IGpzeE5hbWVdID0gXCJqc3hOYW1lXCI7IC8vIGpzeE5hbWVcbiAgY29uc3QganN4VGV4dCA9IDU2MzIwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wianN4VGV4dFwiXSA9IGpzeFRleHRdID0gXCJqc3hUZXh0XCI7IC8vIGpzeFRleHRcbiAgY29uc3QganN4RW1wdHlUZXh0ID0gNTczNDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJqc3hFbXB0eVRleHRcIl0gPSBqc3hFbXB0eVRleHRdID0gXCJqc3hFbXB0eVRleHRcIjsgLy8ganN4RW1wdHlUZXh0XG4gIGNvbnN0IGpzeFRhZ1N0YXJ0ID0gNTg4ODA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJqc3hUYWdTdGFydFwiXSA9IGpzeFRhZ1N0YXJ0XSA9IFwianN4VGFnU3RhcnRcIjsgLy8ganN4VGFnU3RhcnQgc3RhcnRzRXhwclxuICBjb25zdCBqc3hUYWdFbmQgPSA1OTM5MjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcImpzeFRhZ0VuZFwiXSA9IGpzeFRhZ0VuZF0gPSBcImpzeFRhZ0VuZFwiOyAvLyBqc3hUYWdFbmRcbiAgY29uc3QgdHlwZVBhcmFtZXRlclN0YXJ0ID0gNjA5Mjg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJ0eXBlUGFyYW1ldGVyU3RhcnRcIl0gPSB0eXBlUGFyYW1ldGVyU3RhcnRdID0gXCJ0eXBlUGFyYW1ldGVyU3RhcnRcIjsgLy8gdHlwZVBhcmFtZXRlclN0YXJ0IHN0YXJ0c0V4cHJcbiAgY29uc3Qgbm9uTnVsbEFzc2VydGlvbiA9IDYxNDQwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wibm9uTnVsbEFzc2VydGlvblwiXSA9IG5vbk51bGxBc3NlcnRpb25dID0gXCJub25OdWxsQXNzZXJ0aW9uXCI7IC8vIG5vbk51bGxBc3NlcnRpb25cbiAgY29uc3QgX2JyZWFrID0gNjI0ODA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfYnJlYWtcIl0gPSBfYnJlYWtdID0gXCJfYnJlYWtcIjsgLy8gYnJlYWsga2V5d29yZFxuICBjb25zdCBfY2FzZSA9IDYzNTA0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2Nhc2VcIl0gPSBfY2FzZV0gPSBcIl9jYXNlXCI7IC8vIGNhc2Uga2V5d29yZFxuICBjb25zdCBfY2F0Y2ggPSA2NDUyODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9jYXRjaFwiXSA9IF9jYXRjaF0gPSBcIl9jYXRjaFwiOyAvLyBjYXRjaCBrZXl3b3JkXG4gIGNvbnN0IF9jb250aW51ZSA9IDY1NTUyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2NvbnRpbnVlXCJdID0gX2NvbnRpbnVlXSA9IFwiX2NvbnRpbnVlXCI7IC8vIGNvbnRpbnVlIGtleXdvcmRcbiAgY29uc3QgX2RlYnVnZ2VyID0gNjY1NzY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZGVidWdnZXJcIl0gPSBfZGVidWdnZXJdID0gXCJfZGVidWdnZXJcIjsgLy8gZGVidWdnZXIga2V5d29yZFxuICBjb25zdCBfZGVmYXVsdCA9IDY3NjAwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2RlZmF1bHRcIl0gPSBfZGVmYXVsdF0gPSBcIl9kZWZhdWx0XCI7IC8vIGRlZmF1bHQga2V5d29yZFxuICBjb25zdCBfZG8gPSA2ODYyNDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9kb1wiXSA9IF9kb10gPSBcIl9kb1wiOyAvLyBkbyBrZXl3b3JkXG4gIGNvbnN0IF9lbHNlID0gNjk2NDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZWxzZVwiXSA9IF9lbHNlXSA9IFwiX2Vsc2VcIjsgLy8gZWxzZSBrZXl3b3JkXG4gIGNvbnN0IF9maW5hbGx5ID0gNzA2NzI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZmluYWxseVwiXSA9IF9maW5hbGx5XSA9IFwiX2ZpbmFsbHlcIjsgLy8gZmluYWxseSBrZXl3b3JkXG4gIGNvbnN0IF9mb3IgPSA3MTY5NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9mb3JcIl0gPSBfZm9yXSA9IFwiX2ZvclwiOyAvLyBmb3Iga2V5d29yZFxuICBjb25zdCBfZnVuY3Rpb24gPSA3MzIzMjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9mdW5jdGlvblwiXSA9IF9mdW5jdGlvbl0gPSBcIl9mdW5jdGlvblwiOyAvLyBmdW5jdGlvbiBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2lmID0gNzM3NDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfaWZcIl0gPSBfaWZdID0gXCJfaWZcIjsgLy8gaWYga2V5d29yZFxuICBjb25zdCBfcmV0dXJuID0gNzQ3Njg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfcmV0dXJuXCJdID0gX3JldHVybl0gPSBcIl9yZXR1cm5cIjsgLy8gcmV0dXJuIGtleXdvcmRcbiAgY29uc3QgX3N3aXRjaCA9IDc1NzkyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3N3aXRjaFwiXSA9IF9zd2l0Y2hdID0gXCJfc3dpdGNoXCI7IC8vIHN3aXRjaCBrZXl3b3JkXG4gIGNvbnN0IF90aHJvdyA9IDc3NDU2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3Rocm93XCJdID0gX3Rocm93XSA9IFwiX3Rocm93XCI7IC8vIHRocm93IGtleXdvcmQgcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgX3RyeSA9IDc3ODQwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3RyeVwiXSA9IF90cnldID0gXCJfdHJ5XCI7IC8vIHRyeSBrZXl3b3JkXG4gIGNvbnN0IF92YXIgPSA3ODg2NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl92YXJcIl0gPSBfdmFyXSA9IFwiX3ZhclwiOyAvLyB2YXIga2V5d29yZFxuICBjb25zdCBfbGV0ID0gNzk4ODg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfbGV0XCJdID0gX2xldF0gPSBcIl9sZXRcIjsgLy8gbGV0IGtleXdvcmRcbiAgY29uc3QgX2NvbnN0ID0gODA5MTI7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfY29uc3RcIl0gPSBfY29uc3RdID0gXCJfY29uc3RcIjsgLy8gY29uc3Qga2V5d29yZFxuICBjb25zdCBfd2hpbGUgPSA4MTkzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl93aGlsZVwiXSA9IF93aGlsZV0gPSBcIl93aGlsZVwiOyAvLyB3aGlsZSBrZXl3b3JkXG4gIGNvbnN0IF93aXRoID0gODI5NjA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfd2l0aFwiXSA9IF93aXRoXSA9IFwiX3dpdGhcIjsgLy8gd2l0aCBrZXl3b3JkXG4gIGNvbnN0IF9uZXcgPSA4NDQ5NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9uZXdcIl0gPSBfbmV3XSA9IFwiX25ld1wiOyAvLyBuZXcga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF90aGlzID0gODU1MjA7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfdGhpc1wiXSA9IF90aGlzXSA9IFwiX3RoaXNcIjsgLy8gdGhpcyBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3N1cGVyID0gODY1NDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfc3VwZXJcIl0gPSBfc3VwZXJdID0gXCJfc3VwZXJcIjsgLy8gc3VwZXIga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9jbGFzcyA9IDg3NTY4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2NsYXNzXCJdID0gX2NsYXNzXSA9IFwiX2NsYXNzXCI7IC8vIGNsYXNzIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZXh0ZW5kcyA9IDg4MDgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2V4dGVuZHNcIl0gPSBfZXh0ZW5kc10gPSBcIl9leHRlbmRzXCI7IC8vIGV4dGVuZHMga2V5d29yZFxuICBjb25zdCBfZXhwb3J0ID0gODkxMDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZXhwb3J0XCJdID0gX2V4cG9ydF0gPSBcIl9leHBvcnRcIjsgLy8gZXhwb3J0IGtleXdvcmRcbiAgY29uc3QgX2ltcG9ydCA9IDkwNjQwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2ltcG9ydFwiXSA9IF9pbXBvcnRdID0gXCJfaW1wb3J0XCI7IC8vIGltcG9ydCBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3lpZWxkID0gOTE2NjQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfeWllbGRcIl0gPSBfeWllbGRdID0gXCJfeWllbGRcIjsgLy8geWllbGQga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9udWxsID0gOTI2ODg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfbnVsbFwiXSA9IF9udWxsXSA9IFwiX251bGxcIjsgLy8gbnVsbCBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3RydWUgPSA5MzcxMjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90cnVlXCJdID0gX3RydWVdID0gXCJfdHJ1ZVwiOyAvLyB0cnVlIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZmFsc2UgPSA5NDczNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9mYWxzZVwiXSA9IF9mYWxzZV0gPSBcIl9mYWxzZVwiOyAvLyBmYWxzZSBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2luID0gOTUyNTY7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfaW5cIl0gPSBfaW5dID0gXCJfaW5cIjsgLy8gaW4gcHJlYzo4IGtleXdvcmRcbiAgY29uc3QgX2luc3RhbmNlb2YgPSA5NjI4MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9pbnN0YW5jZW9mXCJdID0gX2luc3RhbmNlb2ZdID0gXCJfaW5zdGFuY2VvZlwiOyAvLyBpbnN0YW5jZW9mIHByZWM6OCBrZXl3b3JkXG4gIGNvbnN0IF90eXBlb2YgPSA5NzkzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl90eXBlb2ZcIl0gPSBfdHlwZW9mXSA9IFwiX3R5cGVvZlwiOyAvLyB0eXBlb2Yga2V5d29yZCBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBfdm9pZCA9IDk4OTYwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3ZvaWRcIl0gPSBfdm9pZF0gPSBcIl92b2lkXCI7IC8vIHZvaWQga2V5d29yZCBwcmVmaXggc3RhcnRzRXhwclxuICBjb25zdCBfZGVsZXRlID0gOTk5ODQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfZGVsZXRlXCJdID0gX2RlbGV0ZV0gPSBcIl9kZWxldGVcIjsgLy8gZGVsZXRlIGtleXdvcmQgcHJlZml4IHN0YXJ0c0V4cHJcbiAgY29uc3QgX2FzeW5jID0gMTAwODgwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2FzeW5jXCJdID0gX2FzeW5jXSA9IFwiX2FzeW5jXCI7IC8vIGFzeW5jIGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfZ2V0ID0gMTAxOTA0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2dldFwiXSA9IF9nZXRdID0gXCJfZ2V0XCI7IC8vIGdldCBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3NldCA9IDEwMjkyODsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9zZXRcIl0gPSBfc2V0XSA9IFwiX3NldFwiOyAvLyBzZXQga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9kZWNsYXJlID0gMTAzOTUyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2RlY2xhcmVcIl0gPSBfZGVjbGFyZV0gPSBcIl9kZWNsYXJlXCI7IC8vIGRlY2xhcmUga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9yZWFkb25seSA9IDEwNDk3NjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9yZWFkb25seVwiXSA9IF9yZWFkb25seV0gPSBcIl9yZWFkb25seVwiOyAvLyByZWFkb25seSBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX2Fic3RyYWN0ID0gMTA2MDAwOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2Fic3RyYWN0XCJdID0gX2Fic3RyYWN0XSA9IFwiX2Fic3RyYWN0XCI7IC8vIGFic3RyYWN0IGtleXdvcmQgc3RhcnRzRXhwclxuICBjb25zdCBfc3RhdGljID0gMTA3MDI0OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3N0YXRpY1wiXSA9IF9zdGF0aWNdID0gXCJfc3RhdGljXCI7IC8vIHN0YXRpYyBrZXl3b3JkIHN0YXJ0c0V4cHJcbiAgY29uc3QgX3B1YmxpYyA9IDEwNzUzNjsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9wdWJsaWNcIl0gPSBfcHVibGljXSA9IFwiX3B1YmxpY1wiOyAvLyBwdWJsaWMga2V5d29yZFxuICBjb25zdCBfcHJpdmF0ZSA9IDEwODU2MDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9wcml2YXRlXCJdID0gX3ByaXZhdGVdID0gXCJfcHJpdmF0ZVwiOyAvLyBwcml2YXRlIGtleXdvcmRcbiAgY29uc3QgX3Byb3RlY3RlZCA9IDEwOTU4NDsgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIl9wcm90ZWN0ZWRcIl0gPSBfcHJvdGVjdGVkXSA9IFwiX3Byb3RlY3RlZFwiOyAvLyBwcm90ZWN0ZWQga2V5d29yZFxuICBjb25zdCBfb3ZlcnJpZGUgPSAxMTA2MDg7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfb3ZlcnJpZGVcIl0gPSBfb3ZlcnJpZGVdID0gXCJfb3ZlcnJpZGVcIjsgLy8gb3ZlcnJpZGUga2V5d29yZFxuICBjb25zdCBfYXMgPSAxMTIxNDQ7IFRva2VuVHlwZVtUb2tlblR5cGVbXCJfYXNcIl0gPSBfYXNdID0gXCJfYXNcIjsgLy8gYXMga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9lbnVtID0gMTEzMTY4OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2VudW1cIl0gPSBfZW51bV0gPSBcIl9lbnVtXCI7IC8vIGVudW0ga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF90eXBlID0gMTE0MTkyOyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX3R5cGVcIl0gPSBfdHlwZV0gPSBcIl90eXBlXCI7IC8vIHR5cGUga2V5d29yZCBzdGFydHNFeHByXG4gIGNvbnN0IF9pbXBsZW1lbnRzID0gMTE1MjE2OyBUb2tlblR5cGVbVG9rZW5UeXBlW1wiX2ltcGxlbWVudHNcIl0gPSBfaW1wbGVtZW50c10gPSBcIl9pbXBsZW1lbnRzXCI7IC8vIGltcGxlbWVudHMga2V5d29yZCBzdGFydHNFeHByXG59KShUb2tlblR5cGUgfHwgKGV4cG9ydHMuVG9rZW5UeXBlID0gVG9rZW5UeXBlID0ge30pKTtcbiBmdW5jdGlvbiBmb3JtYXRUb2tlblR5cGUodG9rZW5UeXBlKSB7XG4gIHN3aXRjaCAodG9rZW5UeXBlKSB7XG4gICAgY2FzZSBUb2tlblR5cGUubnVtOlxuICAgICAgcmV0dXJuIFwibnVtXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYmlnaW50OlxuICAgICAgcmV0dXJuIFwiYmlnaW50XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZGVjaW1hbDpcbiAgICAgIHJldHVybiBcImRlY2ltYWxcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5yZWdleHA6XG4gICAgICByZXR1cm4gXCJyZWdleHBcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5zdHJpbmc6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5uYW1lOlxuICAgICAgcmV0dXJuIFwibmFtZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmVvZjpcbiAgICAgIHJldHVybiBcImVvZlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNrZXRMOlxuICAgICAgcmV0dXJuIFwiW1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNrZXRSOlxuICAgICAgcmV0dXJuIFwiXVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNlTDpcbiAgICAgIHJldHVybiBcIntcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5icmFjZUJhckw6XG4gICAgICByZXR1cm4gXCJ7fFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJyYWNlUjpcbiAgICAgIHJldHVybiBcIn1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5icmFjZUJhclI6XG4gICAgICByZXR1cm4gXCJ8fVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnBhcmVuTDpcbiAgICAgIHJldHVybiBcIihcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5wYXJlblI6XG4gICAgICByZXR1cm4gXCIpXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuY29tbWE6XG4gICAgICByZXR1cm4gXCIsXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuc2VtaTpcbiAgICAgIHJldHVybiBcIjtcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5jb2xvbjpcbiAgICAgIHJldHVybiBcIjpcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5kb3VibGVDb2xvbjpcbiAgICAgIHJldHVybiBcIjo6XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZG90OlxuICAgICAgcmV0dXJuIFwiLlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnF1ZXN0aW9uOlxuICAgICAgcmV0dXJuIFwiP1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnF1ZXN0aW9uRG90OlxuICAgICAgcmV0dXJuIFwiPy5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5hcnJvdzpcbiAgICAgIHJldHVybiBcIj0+XCI7XG4gICAgY2FzZSBUb2tlblR5cGUudGVtcGxhdGU6XG4gICAgICByZXR1cm4gXCJ0ZW1wbGF0ZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmVsbGlwc2lzOlxuICAgICAgcmV0dXJuIFwiLi4uXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYmFja1F1b3RlOlxuICAgICAgcmV0dXJuIFwiYFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmRvbGxhckJyYWNlTDpcbiAgICAgIHJldHVybiBcIiR7XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYXQ6XG4gICAgICByZXR1cm4gXCJAXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuaGFzaDpcbiAgICAgIHJldHVybiBcIiNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5lcTpcbiAgICAgIHJldHVybiBcIj1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5hc3NpZ246XG4gICAgICByZXR1cm4gXCJfPVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLnByZUluY0RlYzpcbiAgICAgIHJldHVybiBcIisrLy0tXCI7XG4gICAgY2FzZSBUb2tlblR5cGUucG9zdEluY0RlYzpcbiAgICAgIHJldHVybiBcIisrLy0tXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYmFuZzpcbiAgICAgIHJldHVybiBcIiFcIjtcbiAgICBjYXNlIFRva2VuVHlwZS50aWxkZTpcbiAgICAgIHJldHVybiBcIn5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5waXBlbGluZTpcbiAgICAgIHJldHVybiBcInw+XCI7XG4gICAgY2FzZSBUb2tlblR5cGUubnVsbGlzaENvYWxlc2Npbmc6XG4gICAgICByZXR1cm4gXCI/P1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmxvZ2ljYWxPUjpcbiAgICAgIHJldHVybiBcInx8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUubG9naWNhbEFORDpcbiAgICAgIHJldHVybiBcIiYmXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0d2lzZU9SOlxuICAgICAgcmV0dXJuIFwifFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJpdHdpc2VYT1I6XG4gICAgICByZXR1cm4gXCJeXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0d2lzZUFORDpcbiAgICAgIHJldHVybiBcIiZcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5lcXVhbGl0eTpcbiAgICAgIHJldHVybiBcIj09LyE9XCI7XG4gICAgY2FzZSBUb2tlblR5cGUubGVzc1RoYW46XG4gICAgICByZXR1cm4gXCI8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuZ3JlYXRlclRoYW46XG4gICAgICByZXR1cm4gXCI+XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucmVsYXRpb25hbE9yRXF1YWw6XG4gICAgICByZXR1cm4gXCI8PS8+PVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmJpdFNoaWZ0TDpcbiAgICAgIHJldHVybiBcIjw8XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuYml0U2hpZnRSOlxuICAgICAgcmV0dXJuIFwiPj4vPj4+XCI7XG4gICAgY2FzZSBUb2tlblR5cGUucGx1czpcbiAgICAgIHJldHVybiBcIitcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5taW51czpcbiAgICAgIHJldHVybiBcIi1cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5tb2R1bG86XG4gICAgICByZXR1cm4gXCIlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuc3RhcjpcbiAgICAgIHJldHVybiBcIipcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5zbGFzaDpcbiAgICAgIHJldHVybiBcIi9cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5leHBvbmVudDpcbiAgICAgIHJldHVybiBcIioqXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuanN4TmFtZTpcbiAgICAgIHJldHVybiBcImpzeE5hbWVcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5qc3hUZXh0OlxuICAgICAgcmV0dXJuIFwianN4VGV4dFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmpzeEVtcHR5VGV4dDpcbiAgICAgIHJldHVybiBcImpzeEVtcHR5VGV4dFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLmpzeFRhZ1N0YXJ0OlxuICAgICAgcmV0dXJuIFwianN4VGFnU3RhcnRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5qc3hUYWdFbmQ6XG4gICAgICByZXR1cm4gXCJqc3hUYWdFbmRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQ6XG4gICAgICByZXR1cm4gXCJ0eXBlUGFyYW1ldGVyU3RhcnRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5ub25OdWxsQXNzZXJ0aW9uOlxuICAgICAgcmV0dXJuIFwibm9uTnVsbEFzc2VydGlvblwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9icmVhazpcbiAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2Nhc2U6XG4gICAgICByZXR1cm4gXCJjYXNlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2NhdGNoOlxuICAgICAgcmV0dXJuIFwiY2F0Y2hcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY29udGludWU6XG4gICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9kZWJ1Z2dlcjpcbiAgICAgIHJldHVybiBcImRlYnVnZ2VyXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2RlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJkZWZhdWx0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2RvOlxuICAgICAgcmV0dXJuIFwiZG9cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZWxzZTpcbiAgICAgIHJldHVybiBcImVsc2VcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZmluYWxseTpcbiAgICAgIHJldHVybiBcImZpbmFsbHlcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZm9yOlxuICAgICAgcmV0dXJuIFwiZm9yXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2Z1bmN0aW9uOlxuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5faWY6XG4gICAgICByZXR1cm4gXCJpZlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9yZXR1cm46XG4gICAgICByZXR1cm4gXCJyZXR1cm5cIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fc3dpdGNoOlxuICAgICAgcmV0dXJuIFwic3dpdGNoXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3Rocm93OlxuICAgICAgcmV0dXJuIFwidGhyb3dcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdHJ5OlxuICAgICAgcmV0dXJuIFwidHJ5XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3ZhcjpcbiAgICAgIHJldHVybiBcInZhclwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9sZXQ6XG4gICAgICByZXR1cm4gXCJsZXRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fY29uc3Q6XG4gICAgICByZXR1cm4gXCJjb25zdFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl93aGlsZTpcbiAgICAgIHJldHVybiBcIndoaWxlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3dpdGg6XG4gICAgICByZXR1cm4gXCJ3aXRoXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX25ldzpcbiAgICAgIHJldHVybiBcIm5ld1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl90aGlzOlxuICAgICAgcmV0dXJuIFwidGhpc1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9zdXBlcjpcbiAgICAgIHJldHVybiBcInN1cGVyXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2NsYXNzOlxuICAgICAgcmV0dXJuIFwiY2xhc3NcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZXh0ZW5kczpcbiAgICAgIHJldHVybiBcImV4dGVuZHNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZXhwb3J0OlxuICAgICAgcmV0dXJuIFwiZXhwb3J0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2ltcG9ydDpcbiAgICAgIHJldHVybiBcImltcG9ydFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl95aWVsZDpcbiAgICAgIHJldHVybiBcInlpZWxkXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX251bGw6XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3RydWU6XG4gICAgICByZXR1cm4gXCJ0cnVlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2ZhbHNlOlxuICAgICAgcmV0dXJuIFwiZmFsc2VcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5faW46XG4gICAgICByZXR1cm4gXCJpblwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9pbnN0YW5jZW9mOlxuICAgICAgcmV0dXJuIFwiaW5zdGFuY2VvZlwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl90eXBlb2Y6XG4gICAgICByZXR1cm4gXCJ0eXBlb2ZcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fdm9pZDpcbiAgICAgIHJldHVybiBcInZvaWRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZGVsZXRlOlxuICAgICAgcmV0dXJuIFwiZGVsZXRlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2FzeW5jOlxuICAgICAgcmV0dXJuIFwiYXN5bmNcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fZ2V0OlxuICAgICAgcmV0dXJuIFwiZ2V0XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3NldDpcbiAgICAgIHJldHVybiBcInNldFwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9kZWNsYXJlOlxuICAgICAgcmV0dXJuIFwiZGVjbGFyZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9yZWFkb25seTpcbiAgICAgIHJldHVybiBcInJlYWRvbmx5XCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2Fic3RyYWN0OlxuICAgICAgcmV0dXJuIFwiYWJzdHJhY3RcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fc3RhdGljOlxuICAgICAgcmV0dXJuIFwic3RhdGljXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3B1YmxpYzpcbiAgICAgIHJldHVybiBcInB1YmxpY1wiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9wcml2YXRlOlxuICAgICAgcmV0dXJuIFwicHJpdmF0ZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9wcm90ZWN0ZWQ6XG4gICAgICByZXR1cm4gXCJwcm90ZWN0ZWRcIjtcbiAgICBjYXNlIFRva2VuVHlwZS5fb3ZlcnJpZGU6XG4gICAgICByZXR1cm4gXCJvdmVycmlkZVwiO1xuICAgIGNhc2UgVG9rZW5UeXBlLl9hczpcbiAgICAgIHJldHVybiBcImFzXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2VudW06XG4gICAgICByZXR1cm4gXCJlbnVtXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX3R5cGU6XG4gICAgICByZXR1cm4gXCJ0eXBlXCI7XG4gICAgY2FzZSBUb2tlblR5cGUuX2ltcGxlbWVudHM6XG4gICAgICByZXR1cm4gXCJpbXBsZW1lbnRzXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59IGV4cG9ydHMuZm9ybWF0VG9rZW5UeXBlID0gZm9ybWF0VG9rZW5UeXBlO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7XG52YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi9rZXl3b3JkcycpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcblxuIGNsYXNzIFNjb3BlIHtcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGlzRnVuY3Rpb25TY29wZSkge1xuICAgIHRoaXMuc3RhcnRUb2tlbkluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuICAgIHRoaXMuZW5kVG9rZW5JbmRleCA9IGVuZFRva2VuSW5kZXg7XG4gICAgdGhpcy5pc0Z1bmN0aW9uU2NvcGUgPSBpc0Z1bmN0aW9uU2NvcGU7XG4gIH1cbn0gZXhwb3J0cy5TY29wZSA9IFNjb3BlO1xuXG4gY2xhc3MgU3RhdGVTbmFwc2hvdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICBwb3RlbnRpYWxBcnJvd0F0LFxuICAgICBub0Fub25GdW5jdGlvblR5cGUsXG4gICAgIGluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCxcbiAgICAgdG9rZW5zTGVuZ3RoLFxuICAgICBzY29wZXNMZW5ndGgsXG4gICAgIHBvcyxcbiAgICAgdHlwZSxcbiAgICAgY29udGV4dHVhbEtleXdvcmQsXG4gICAgIHN0YXJ0LFxuICAgICBlbmQsXG4gICAgIGlzVHlwZSxcbiAgICAgc2NvcGVEZXB0aCxcbiAgICAgZXJyb3IsXG4gICkgezt0aGlzLnBvdGVudGlhbEFycm93QXQgPSBwb3RlbnRpYWxBcnJvd0F0O3RoaXMubm9Bbm9uRnVuY3Rpb25UeXBlID0gbm9Bbm9uRnVuY3Rpb25UeXBlO3RoaXMuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O3RoaXMudG9rZW5zTGVuZ3RoID0gdG9rZW5zTGVuZ3RoO3RoaXMuc2NvcGVzTGVuZ3RoID0gc2NvcGVzTGVuZ3RoO3RoaXMucG9zID0gcG9zO3RoaXMudHlwZSA9IHR5cGU7dGhpcy5jb250ZXh0dWFsS2V5d29yZCA9IGNvbnRleHR1YWxLZXl3b3JkO3RoaXMuc3RhcnQgPSBzdGFydDt0aGlzLmVuZCA9IGVuZDt0aGlzLmlzVHlwZSA9IGlzVHlwZTt0aGlzLnNjb3BlRGVwdGggPSBzY29wZURlcHRoO3RoaXMuZXJyb3IgPSBlcnJvcjt9XG59IGV4cG9ydHMuU3RhdGVTbmFwc2hvdCA9IFN0YXRlU25hcHNob3Q7XG5cbiBjbGFzcyBTdGF0ZSB7Y29uc3RydWN0b3IoKSB7IFN0YXRlLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0NS5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQ2LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDcuY2FsbCh0aGlzKTtTdGF0ZS5wcm90b3R5cGUuX19pbml0OC5jYWxsKHRoaXMpO1N0YXRlLnByb3RvdHlwZS5fX2luaXQ5LmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDEwLmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDExLmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDEyLmNhbGwodGhpcyk7U3RhdGUucHJvdG90eXBlLl9faW5pdDEzLmNhbGwodGhpcyk7IH1cbiAgLy8gVXNlZCB0byBzaWduaWZ5IHRoZSBzdGFydCBvZiBhIHBvdGVudGlhbCBhcnJvdyBmdW5jdGlvblxuICBfX2luaXQoKSB7dGhpcy5wb3RlbnRpYWxBcnJvd0F0ID0gLTF9XG5cbiAgLy8gVXNlZCBieSBGbG93IHRvIGhhbmRsZSBhbiBlZGdlIGNhc2UgaW52b2x2aW5nIGZ1bmN0aW9uIHR5cGUgcGFyc2luZy5cbiAgX19pbml0MigpIHt0aGlzLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IGZhbHNlfVxuXG4gIC8vIFVzZWQgYnkgVHlwZVNjcmlwdCB0byBoYW5kbGUgYW1iaWd1aXRpZXMgd2hlbiBwYXJzaW5nIGNvbmRpdGlvbmFsIHR5cGVzLlxuICBfX2luaXQzKCkge3RoaXMuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gZmFsc2V9XG5cbiAgLy8gVG9rZW4gc3RvcmUuXG4gIF9faW5pdDQoKSB7dGhpcy50b2tlbnMgPSBbXX1cblxuICAvLyBBcnJheSBvZiBhbGwgb2JzZXJ2ZWQgc2NvcGVzLCBvcmRlcmVkIGJ5IHRoZWlyIGVuZGluZyBwb3NpdGlvbi5cbiAgX19pbml0NSgpIHt0aGlzLnNjb3BlcyA9IFtdfVxuXG4gIC8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b2tlbml6ZXIgaW4gdGhlIGlucHV0LlxuICBfX2luaXQ2KCkge3RoaXMucG9zID0gMH1cblxuICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCB0b2tlbi5cbiAgX19pbml0NygpIHt0aGlzLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLmVvZn1cbiAgX19pbml0OCgpIHt0aGlzLmNvbnRleHR1YWxLZXl3b3JkID0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLk5PTkV9XG4gIF9faW5pdDkoKSB7dGhpcy5zdGFydCA9IDB9XG4gIF9faW5pdDEwKCkge3RoaXMuZW5kID0gMH1cblxuICBfX2luaXQxMSgpIHt0aGlzLmlzVHlwZSA9IGZhbHNlfVxuICBfX2luaXQxMigpIHt0aGlzLnNjb3BlRGVwdGggPSAwfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcGFyc2VyIGlzIGluIGFuIGVycm9yIHN0YXRlLCB0aGVuIHRoZSB0b2tlbiBpcyBhbHdheXMgdHQuZW9mIGFuZCBhbGwgZnVuY3Rpb25zIGNhblxuICAgKiBrZWVwIGV4ZWN1dGluZyBidXQgc2hvdWxkIGJlIHdyaXR0ZW4gc28gdGhleSBkb24ndCBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIGluIHRoaXMgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGFwcHJvYWNoLCBjb21iaW5lZCB3aXRoIHRoZSBhYmlsaXR5IHRvIHNuYXBzaG90IGFuZCByZXN0b3JlIHN0YXRlLCBhbGxvd3MgdXMgdG8gaW1wbGVtZW50XG4gICAqIGJhY2t0cmFja2luZyB3aXRob3V0IGV4Y2VwdGlvbnMgYW5kIHdpdGhvdXQgbmVlZGluZyB0byBleHBsaWNpdGx5IHByb3BhZ2F0ZSBlcnJvciBzdGF0ZXNcbiAgICogZXZlcnl3aGVyZS5cbiAgICovXG4gIF9faW5pdDEzKCkge3RoaXMuZXJyb3IgPSBudWxsfVxuXG4gIHNuYXBzaG90KCkge1xuICAgIHJldHVybiBuZXcgU3RhdGVTbmFwc2hvdChcbiAgICAgIHRoaXMucG90ZW50aWFsQXJyb3dBdCxcbiAgICAgIHRoaXMubm9Bbm9uRnVuY3Rpb25UeXBlLFxuICAgICAgdGhpcy5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQsXG4gICAgICB0aGlzLnRva2Vucy5sZW5ndGgsXG4gICAgICB0aGlzLnNjb3Blcy5sZW5ndGgsXG4gICAgICB0aGlzLnBvcyxcbiAgICAgIHRoaXMudHlwZSxcbiAgICAgIHRoaXMuY29udGV4dHVhbEtleXdvcmQsXG4gICAgICB0aGlzLnN0YXJ0LFxuICAgICAgdGhpcy5lbmQsXG4gICAgICB0aGlzLmlzVHlwZSxcbiAgICAgIHRoaXMuc2NvcGVEZXB0aCxcbiAgICAgIHRoaXMuZXJyb3IsXG4gICAgKTtcbiAgfVxuXG4gIHJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICB0aGlzLnBvdGVudGlhbEFycm93QXQgPSBzbmFwc2hvdC5wb3RlbnRpYWxBcnJvd0F0O1xuICAgIHRoaXMubm9Bbm9uRnVuY3Rpb25UeXBlID0gc25hcHNob3Qubm9Bbm9uRnVuY3Rpb25UeXBlO1xuICAgIHRoaXMuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gc25hcHNob3QuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICAgIHRoaXMudG9rZW5zLmxlbmd0aCA9IHNuYXBzaG90LnRva2Vuc0xlbmd0aDtcbiAgICB0aGlzLnNjb3Blcy5sZW5ndGggPSBzbmFwc2hvdC5zY29wZXNMZW5ndGg7XG4gICAgdGhpcy5wb3MgPSBzbmFwc2hvdC5wb3M7XG4gICAgdGhpcy50eXBlID0gc25hcHNob3QudHlwZTtcbiAgICB0aGlzLmNvbnRleHR1YWxLZXl3b3JkID0gc25hcHNob3QuY29udGV4dHVhbEtleXdvcmQ7XG4gICAgdGhpcy5zdGFydCA9IHNuYXBzaG90LnN0YXJ0O1xuICAgIHRoaXMuZW5kID0gc25hcHNob3QuZW5kO1xuICAgIHRoaXMuaXNUeXBlID0gc25hcHNob3QuaXNUeXBlO1xuICAgIHRoaXMuc2NvcGVEZXB0aCA9IHNuYXBzaG90LnNjb3BlRGVwdGg7XG4gICAgdGhpcy5lcnJvciA9IHNuYXBzaG90LmVycm9yO1xuICB9XG59IGV4cG9ydHMuZGVmYXVsdCA9IFN0YXRlO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIGNoYXJDb2RlczsgKGZ1bmN0aW9uIChjaGFyQ29kZXMpIHtcbiAgY29uc3QgYmFja1NwYWNlID0gODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImJhY2tTcGFjZVwiXSA9IGJhY2tTcGFjZV0gPSBcImJhY2tTcGFjZVwiO1xuICBjb25zdCBsaW5lRmVlZCA9IDEwOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibGluZUZlZWRcIl0gPSBsaW5lRmVlZF0gPSBcImxpbmVGZWVkXCI7IC8vICAnXFxuJ1xuICBjb25zdCB0YWIgPSA5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1widGFiXCJdID0gdGFiXSA9IFwidGFiXCI7IC8vICAnXFx0J1xuICBjb25zdCBjYXJyaWFnZVJldHVybiA9IDEzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiY2FycmlhZ2VSZXR1cm5cIl0gPSBjYXJyaWFnZVJldHVybl0gPSBcImNhcnJpYWdlUmV0dXJuXCI7IC8vICAnXFxyJ1xuICBjb25zdCBzaGlmdE91dCA9IDE0OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wic2hpZnRPdXRcIl0gPSBzaGlmdE91dF0gPSBcInNoaWZ0T3V0XCI7XG4gIGNvbnN0IHNwYWNlID0gMzI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJzcGFjZVwiXSA9IHNwYWNlXSA9IFwic3BhY2VcIjtcbiAgY29uc3QgZXhjbGFtYXRpb25NYXJrID0gMzM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJleGNsYW1hdGlvbk1hcmtcIl0gPSBleGNsYW1hdGlvbk1hcmtdID0gXCJleGNsYW1hdGlvbk1hcmtcIjsgLy8gICchJ1xuICBjb25zdCBxdW90YXRpb25NYXJrID0gMzQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJxdW90YXRpb25NYXJrXCJdID0gcXVvdGF0aW9uTWFya10gPSBcInF1b3RhdGlvbk1hcmtcIjsgLy8gICdcIidcbiAgY29uc3QgbnVtYmVyU2lnbiA9IDM1OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibnVtYmVyU2lnblwiXSA9IG51bWJlclNpZ25dID0gXCJudW1iZXJTaWduXCI7IC8vICAnIydcbiAgY29uc3QgZG9sbGFyU2lnbiA9IDM2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZG9sbGFyU2lnblwiXSA9IGRvbGxhclNpZ25dID0gXCJkb2xsYXJTaWduXCI7IC8vICAnJCdcbiAgY29uc3QgcGVyY2VudFNpZ24gPSAzNzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInBlcmNlbnRTaWduXCJdID0gcGVyY2VudFNpZ25dID0gXCJwZXJjZW50U2lnblwiOyAvLyAgJyUnXG4gIGNvbnN0IGFtcGVyc2FuZCA9IDM4OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiYW1wZXJzYW5kXCJdID0gYW1wZXJzYW5kXSA9IFwiYW1wZXJzYW5kXCI7IC8vICAnJidcbiAgY29uc3QgYXBvc3Ryb3BoZSA9IDM5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiYXBvc3Ryb3BoZVwiXSA9IGFwb3N0cm9waGVdID0gXCJhcG9zdHJvcGhlXCI7IC8vICAnJydcbiAgY29uc3QgbGVmdFBhcmVudGhlc2lzID0gNDA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsZWZ0UGFyZW50aGVzaXNcIl0gPSBsZWZ0UGFyZW50aGVzaXNdID0gXCJsZWZ0UGFyZW50aGVzaXNcIjsgLy8gICcoJ1xuICBjb25zdCByaWdodFBhcmVudGhlc2lzID0gNDE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJyaWdodFBhcmVudGhlc2lzXCJdID0gcmlnaHRQYXJlbnRoZXNpc10gPSBcInJpZ2h0UGFyZW50aGVzaXNcIjsgLy8gICcpJ1xuICBjb25zdCBhc3RlcmlzayA9IDQyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiYXN0ZXJpc2tcIl0gPSBhc3Rlcmlza10gPSBcImFzdGVyaXNrXCI7IC8vICAnKidcbiAgY29uc3QgcGx1c1NpZ24gPSA0MzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInBsdXNTaWduXCJdID0gcGx1c1NpZ25dID0gXCJwbHVzU2lnblwiOyAvLyAgJysnXG4gIGNvbnN0IGNvbW1hID0gNDQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJjb21tYVwiXSA9IGNvbW1hXSA9IFwiY29tbWFcIjsgLy8gICcsJ1xuICBjb25zdCBkYXNoID0gNDU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkYXNoXCJdID0gZGFzaF0gPSBcImRhc2hcIjsgLy8gICctJ1xuICBjb25zdCBkb3QgPSA0NjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRvdFwiXSA9IGRvdF0gPSBcImRvdFwiOyAvLyAgJy4nXG4gIGNvbnN0IHNsYXNoID0gNDc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJzbGFzaFwiXSA9IHNsYXNoXSA9IFwic2xhc2hcIjsgLy8gICcvJ1xuICBjb25zdCBkaWdpdDAgPSA0ODsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0MFwiXSA9IGRpZ2l0MF0gPSBcImRpZ2l0MFwiOyAvLyAgJzAnXG4gIGNvbnN0IGRpZ2l0MSA9IDQ5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQxXCJdID0gZGlnaXQxXSA9IFwiZGlnaXQxXCI7IC8vICAnMSdcbiAgY29uc3QgZGlnaXQyID0gNTA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDJcIl0gPSBkaWdpdDJdID0gXCJkaWdpdDJcIjsgLy8gICcyJ1xuICBjb25zdCBkaWdpdDMgPSA1MTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0M1wiXSA9IGRpZ2l0M10gPSBcImRpZ2l0M1wiOyAvLyAgJzMnXG4gIGNvbnN0IGRpZ2l0NCA9IDUyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQ0XCJdID0gZGlnaXQ0XSA9IFwiZGlnaXQ0XCI7IC8vICAnNCdcbiAgY29uc3QgZGlnaXQ1ID0gNTM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDVcIl0gPSBkaWdpdDVdID0gXCJkaWdpdDVcIjsgLy8gICc1J1xuICBjb25zdCBkaWdpdDYgPSA1NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0NlwiXSA9IGRpZ2l0Nl0gPSBcImRpZ2l0NlwiOyAvLyAgJzYnXG4gIGNvbnN0IGRpZ2l0NyA9IDU1OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZGlnaXQ3XCJdID0gZGlnaXQ3XSA9IFwiZGlnaXQ3XCI7IC8vICAnNydcbiAgY29uc3QgZGlnaXQ4ID0gNTY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJkaWdpdDhcIl0gPSBkaWdpdDhdID0gXCJkaWdpdDhcIjsgLy8gICc4J1xuICBjb25zdCBkaWdpdDkgPSA1NzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImRpZ2l0OVwiXSA9IGRpZ2l0OV0gPSBcImRpZ2l0OVwiOyAvLyAgJzknXG4gIGNvbnN0IGNvbG9uID0gNTg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJjb2xvblwiXSA9IGNvbG9uXSA9IFwiY29sb25cIjsgLy8gICc6J1xuICBjb25zdCBzZW1pY29sb24gPSA1OTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInNlbWljb2xvblwiXSA9IHNlbWljb2xvbl0gPSBcInNlbWljb2xvblwiOyAvLyAgJzsnXG4gIGNvbnN0IGxlc3NUaGFuID0gNjA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsZXNzVGhhblwiXSA9IGxlc3NUaGFuXSA9IFwibGVzc1RoYW5cIjsgLy8gICc8J1xuICBjb25zdCBlcXVhbHNUbyA9IDYxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wiZXF1YWxzVG9cIl0gPSBlcXVhbHNUb10gPSBcImVxdWFsc1RvXCI7IC8vICAnPSdcbiAgY29uc3QgZ3JlYXRlclRoYW4gPSA2MjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImdyZWF0ZXJUaGFuXCJdID0gZ3JlYXRlclRoYW5dID0gXCJncmVhdGVyVGhhblwiOyAvLyAgJz4nXG4gIGNvbnN0IHF1ZXN0aW9uTWFyayA9IDYzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicXVlc3Rpb25NYXJrXCJdID0gcXVlc3Rpb25NYXJrXSA9IFwicXVlc3Rpb25NYXJrXCI7IC8vICAnPydcbiAgY29uc3QgYXRTaWduID0gNjQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJhdFNpZ25cIl0gPSBhdFNpZ25dID0gXCJhdFNpZ25cIjsgLy8gICdAJ1xuICBjb25zdCB1cHBlcmNhc2VBID0gNjU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VBXCJdID0gdXBwZXJjYXNlQV0gPSBcInVwcGVyY2FzZUFcIjsgLy8gICdBJ1xuICBjb25zdCB1cHBlcmNhc2VCID0gNjY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VCXCJdID0gdXBwZXJjYXNlQl0gPSBcInVwcGVyY2FzZUJcIjsgLy8gICdCJ1xuICBjb25zdCB1cHBlcmNhc2VDID0gNjc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VDXCJdID0gdXBwZXJjYXNlQ10gPSBcInVwcGVyY2FzZUNcIjsgLy8gICdDJ1xuICBjb25zdCB1cHBlcmNhc2VEID0gNjg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VEXCJdID0gdXBwZXJjYXNlRF0gPSBcInVwcGVyY2FzZURcIjsgLy8gICdEJ1xuICBjb25zdCB1cHBlcmNhc2VFID0gNjk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VFXCJdID0gdXBwZXJjYXNlRV0gPSBcInVwcGVyY2FzZUVcIjsgLy8gICdFJ1xuICBjb25zdCB1cHBlcmNhc2VGID0gNzA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VGXCJdID0gdXBwZXJjYXNlRl0gPSBcInVwcGVyY2FzZUZcIjsgLy8gICdGJ1xuICBjb25zdCB1cHBlcmNhc2VHID0gNzE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VHXCJdID0gdXBwZXJjYXNlR10gPSBcInVwcGVyY2FzZUdcIjsgLy8gICdHJ1xuICBjb25zdCB1cHBlcmNhc2VIID0gNzI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VIXCJdID0gdXBwZXJjYXNlSF0gPSBcInVwcGVyY2FzZUhcIjsgLy8gICdIJ1xuICBjb25zdCB1cHBlcmNhc2VJID0gNzM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VJXCJdID0gdXBwZXJjYXNlSV0gPSBcInVwcGVyY2FzZUlcIjsgLy8gICdJJ1xuICBjb25zdCB1cHBlcmNhc2VKID0gNzQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VKXCJdID0gdXBwZXJjYXNlSl0gPSBcInVwcGVyY2FzZUpcIjsgLy8gICdKJ1xuICBjb25zdCB1cHBlcmNhc2VLID0gNzU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VLXCJdID0gdXBwZXJjYXNlS10gPSBcInVwcGVyY2FzZUtcIjsgLy8gICdLJ1xuICBjb25zdCB1cHBlcmNhc2VMID0gNzY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VMXCJdID0gdXBwZXJjYXNlTF0gPSBcInVwcGVyY2FzZUxcIjsgLy8gICdMJ1xuICBjb25zdCB1cHBlcmNhc2VNID0gNzc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VNXCJdID0gdXBwZXJjYXNlTV0gPSBcInVwcGVyY2FzZU1cIjsgLy8gICdNJ1xuICBjb25zdCB1cHBlcmNhc2VOID0gNzg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VOXCJdID0gdXBwZXJjYXNlTl0gPSBcInVwcGVyY2FzZU5cIjsgLy8gICdOJ1xuICBjb25zdCB1cHBlcmNhc2VPID0gNzk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VPXCJdID0gdXBwZXJjYXNlT10gPSBcInVwcGVyY2FzZU9cIjsgLy8gICdPJ1xuICBjb25zdCB1cHBlcmNhc2VQID0gODA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VQXCJdID0gdXBwZXJjYXNlUF0gPSBcInVwcGVyY2FzZVBcIjsgLy8gICdQJ1xuICBjb25zdCB1cHBlcmNhc2VRID0gODE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VRXCJdID0gdXBwZXJjYXNlUV0gPSBcInVwcGVyY2FzZVFcIjsgLy8gICdRJ1xuICBjb25zdCB1cHBlcmNhc2VSID0gODI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VSXCJdID0gdXBwZXJjYXNlUl0gPSBcInVwcGVyY2FzZVJcIjsgLy8gICdSJ1xuICBjb25zdCB1cHBlcmNhc2VTID0gODM7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VTXCJdID0gdXBwZXJjYXNlU10gPSBcInVwcGVyY2FzZVNcIjsgLy8gICdTJ1xuICBjb25zdCB1cHBlcmNhc2VUID0gODQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VUXCJdID0gdXBwZXJjYXNlVF0gPSBcInVwcGVyY2FzZVRcIjsgLy8gICdUJ1xuICBjb25zdCB1cHBlcmNhc2VVID0gODU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VVXCJdID0gdXBwZXJjYXNlVV0gPSBcInVwcGVyY2FzZVVcIjsgLy8gICdVJ1xuICBjb25zdCB1cHBlcmNhc2VWID0gODY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VWXCJdID0gdXBwZXJjYXNlVl0gPSBcInVwcGVyY2FzZVZcIjsgLy8gICdWJ1xuICBjb25zdCB1cHBlcmNhc2VXID0gODc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VXXCJdID0gdXBwZXJjYXNlV10gPSBcInVwcGVyY2FzZVdcIjsgLy8gICdXJ1xuICBjb25zdCB1cHBlcmNhc2VYID0gODg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VYXCJdID0gdXBwZXJjYXNlWF0gPSBcInVwcGVyY2FzZVhcIjsgLy8gICdYJ1xuICBjb25zdCB1cHBlcmNhc2VZID0gODk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VZXCJdID0gdXBwZXJjYXNlWV0gPSBcInVwcGVyY2FzZVlcIjsgLy8gICdZJ1xuICBjb25zdCB1cHBlcmNhc2VaID0gOTA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ1cHBlcmNhc2VaXCJdID0gdXBwZXJjYXNlWl0gPSBcInVwcGVyY2FzZVpcIjsgLy8gICdaJ1xuICBjb25zdCBsZWZ0U3F1YXJlQnJhY2tldCA9IDkxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibGVmdFNxdWFyZUJyYWNrZXRcIl0gPSBsZWZ0U3F1YXJlQnJhY2tldF0gPSBcImxlZnRTcXVhcmVCcmFja2V0XCI7IC8vICAnWydcbiAgY29uc3QgYmFja3NsYXNoID0gOTI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJiYWNrc2xhc2hcIl0gPSBiYWNrc2xhc2hdID0gXCJiYWNrc2xhc2hcIjsgLy8gICdcXCAgICAnXG4gIGNvbnN0IHJpZ2h0U3F1YXJlQnJhY2tldCA9IDkzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicmlnaHRTcXVhcmVCcmFja2V0XCJdID0gcmlnaHRTcXVhcmVCcmFja2V0XSA9IFwicmlnaHRTcXVhcmVCcmFja2V0XCI7IC8vICAnXSdcbiAgY29uc3QgY2FyZXQgPSA5NDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImNhcmV0XCJdID0gY2FyZXRdID0gXCJjYXJldFwiOyAvLyAgJ14nXG4gIGNvbnN0IHVuZGVyc2NvcmUgPSA5NTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInVuZGVyc2NvcmVcIl0gPSB1bmRlcnNjb3JlXSA9IFwidW5kZXJzY29yZVwiOyAvLyAgJ18nXG4gIGNvbnN0IGdyYXZlQWNjZW50ID0gOTY7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJncmF2ZUFjY2VudFwiXSA9IGdyYXZlQWNjZW50XSA9IFwiZ3JhdmVBY2NlbnRcIjsgLy8gICdgJ1xuICBjb25zdCBsb3dlcmNhc2VBID0gOTc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VBXCJdID0gbG93ZXJjYXNlQV0gPSBcImxvd2VyY2FzZUFcIjsgLy8gICdhJ1xuICBjb25zdCBsb3dlcmNhc2VCID0gOTg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VCXCJdID0gbG93ZXJjYXNlQl0gPSBcImxvd2VyY2FzZUJcIjsgLy8gICdiJ1xuICBjb25zdCBsb3dlcmNhc2VDID0gOTk7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VDXCJdID0gbG93ZXJjYXNlQ10gPSBcImxvd2VyY2FzZUNcIjsgLy8gICdjJ1xuICBjb25zdCBsb3dlcmNhc2VEID0gMTAwOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlRFwiXSA9IGxvd2VyY2FzZURdID0gXCJsb3dlcmNhc2VEXCI7IC8vICAnZCdcbiAgY29uc3QgbG93ZXJjYXNlRSA9IDEwMTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUVcIl0gPSBsb3dlcmNhc2VFXSA9IFwibG93ZXJjYXNlRVwiOyAvLyAgJ2UnXG4gIGNvbnN0IGxvd2VyY2FzZUYgPSAxMDI7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VGXCJdID0gbG93ZXJjYXNlRl0gPSBcImxvd2VyY2FzZUZcIjsgLy8gICdmJ1xuICBjb25zdCBsb3dlcmNhc2VHID0gMTAzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlR1wiXSA9IGxvd2VyY2FzZUddID0gXCJsb3dlcmNhc2VHXCI7IC8vICAnZydcbiAgY29uc3QgbG93ZXJjYXNlSCA9IDEwNDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUhcIl0gPSBsb3dlcmNhc2VIXSA9IFwibG93ZXJjYXNlSFwiOyAvLyAgJ2gnXG4gIGNvbnN0IGxvd2VyY2FzZUkgPSAxMDU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VJXCJdID0gbG93ZXJjYXNlSV0gPSBcImxvd2VyY2FzZUlcIjsgLy8gICdpJ1xuICBjb25zdCBsb3dlcmNhc2VKID0gMTA2OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlSlwiXSA9IGxvd2VyY2FzZUpdID0gXCJsb3dlcmNhc2VKXCI7IC8vICAnaidcbiAgY29uc3QgbG93ZXJjYXNlSyA9IDEwNzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZUtcIl0gPSBsb3dlcmNhc2VLXSA9IFwibG93ZXJjYXNlS1wiOyAvLyAgJ2snXG4gIGNvbnN0IGxvd2VyY2FzZUwgPSAxMDg7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VMXCJdID0gbG93ZXJjYXNlTF0gPSBcImxvd2VyY2FzZUxcIjsgLy8gICdsJ1xuICBjb25zdCBsb3dlcmNhc2VNID0gMTA5OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlTVwiXSA9IGxvd2VyY2FzZU1dID0gXCJsb3dlcmNhc2VNXCI7IC8vICAnbSdcbiAgY29uc3QgbG93ZXJjYXNlTiA9IDExMDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZU5cIl0gPSBsb3dlcmNhc2VOXSA9IFwibG93ZXJjYXNlTlwiOyAvLyAgJ24nXG4gIGNvbnN0IGxvd2VyY2FzZU8gPSAxMTE7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VPXCJdID0gbG93ZXJjYXNlT10gPSBcImxvd2VyY2FzZU9cIjsgLy8gICdvJ1xuICBjb25zdCBsb3dlcmNhc2VQID0gMTEyOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlUFwiXSA9IGxvd2VyY2FzZVBdID0gXCJsb3dlcmNhc2VQXCI7IC8vICAncCdcbiAgY29uc3QgbG93ZXJjYXNlUSA9IDExMzsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVFcIl0gPSBsb3dlcmNhc2VRXSA9IFwibG93ZXJjYXNlUVwiOyAvLyAgJ3EnXG4gIGNvbnN0IGxvd2VyY2FzZVIgPSAxMTQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VSXCJdID0gbG93ZXJjYXNlUl0gPSBcImxvd2VyY2FzZVJcIjsgLy8gICdyJ1xuICBjb25zdCBsb3dlcmNhc2VTID0gMTE1OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlU1wiXSA9IGxvd2VyY2FzZVNdID0gXCJsb3dlcmNhc2VTXCI7IC8vICAncydcbiAgY29uc3QgbG93ZXJjYXNlVCA9IDExNjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVRcIl0gPSBsb3dlcmNhc2VUXSA9IFwibG93ZXJjYXNlVFwiOyAvLyAgJ3QnXG4gIGNvbnN0IGxvd2VyY2FzZVUgPSAxMTc7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VVXCJdID0gbG93ZXJjYXNlVV0gPSBcImxvd2VyY2FzZVVcIjsgLy8gICd1J1xuICBjb25zdCBsb3dlcmNhc2VWID0gMTE4OyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlVlwiXSA9IGxvd2VyY2FzZVZdID0gXCJsb3dlcmNhc2VWXCI7IC8vICAndidcbiAgY29uc3QgbG93ZXJjYXNlVyA9IDExOTsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVdcIl0gPSBsb3dlcmNhc2VXXSA9IFwibG93ZXJjYXNlV1wiOyAvLyAgJ3cnXG4gIGNvbnN0IGxvd2VyY2FzZVggPSAxMjA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJsb3dlcmNhc2VYXCJdID0gbG93ZXJjYXNlWF0gPSBcImxvd2VyY2FzZVhcIjsgLy8gICd4J1xuICBjb25zdCBsb3dlcmNhc2VZID0gMTIxOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibG93ZXJjYXNlWVwiXSA9IGxvd2VyY2FzZVldID0gXCJsb3dlcmNhc2VZXCI7IC8vICAneSdcbiAgY29uc3QgbG93ZXJjYXNlWiA9IDEyMjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxvd2VyY2FzZVpcIl0gPSBsb3dlcmNhc2VaXSA9IFwibG93ZXJjYXNlWlwiOyAvLyAgJ3onXG4gIGNvbnN0IGxlZnRDdXJseUJyYWNlID0gMTIzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wibGVmdEN1cmx5QnJhY2VcIl0gPSBsZWZ0Q3VybHlCcmFjZV0gPSBcImxlZnRDdXJseUJyYWNlXCI7IC8vICAneydcbiAgY29uc3QgdmVydGljYWxCYXIgPSAxMjQ7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJ2ZXJ0aWNhbEJhclwiXSA9IHZlcnRpY2FsQmFyXSA9IFwidmVydGljYWxCYXJcIjsgLy8gICd8J1xuICBjb25zdCByaWdodEN1cmx5QnJhY2UgPSAxMjU7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJyaWdodEN1cmx5QnJhY2VcIl0gPSByaWdodEN1cmx5QnJhY2VdID0gXCJyaWdodEN1cmx5QnJhY2VcIjsgLy8gICd9J1xuICBjb25zdCB0aWxkZSA9IDEyNjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcInRpbGRlXCJdID0gdGlsZGVdID0gXCJ0aWxkZVwiOyAvLyAgJ34nXG4gIGNvbnN0IG5vbkJyZWFraW5nU3BhY2UgPSAxNjA7IGNoYXJDb2Rlc1tjaGFyQ29kZXNbXCJub25CcmVha2luZ1NwYWNlXCJdID0gbm9uQnJlYWtpbmdTcGFjZV0gPSBcIm5vbkJyZWFraW5nU3BhY2VcIjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWlycmVndWxhci13aGl0ZXNwYWNlXG4gIGNvbnN0IG9naGFtU3BhY2VNYXJrID0gNTc2MDsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcIm9naGFtU3BhY2VNYXJrXCJdID0gb2doYW1TcGFjZU1hcmtdID0gXCJvZ2hhbVNwYWNlTWFya1wiOyAvLyAnXHUxNjgwJ1xuICBjb25zdCBsaW5lU2VwYXJhdG9yID0gODIzMjsgY2hhckNvZGVzW2NoYXJDb2Rlc1tcImxpbmVTZXBhcmF0b3JcIl0gPSBsaW5lU2VwYXJhdG9yXSA9IFwibGluZVNlcGFyYXRvclwiO1xuICBjb25zdCBwYXJhZ3JhcGhTZXBhcmF0b3IgPSA4MjMzOyBjaGFyQ29kZXNbY2hhckNvZGVzW1wicGFyYWdyYXBoU2VwYXJhdG9yXCJdID0gcGFyYWdyYXBoU2VwYXJhdG9yXSA9IFwicGFyYWdyYXBoU2VwYXJhdG9yXCI7XG59KShjaGFyQ29kZXMgfHwgKGV4cG9ydHMuY2hhckNvZGVzID0gY2hhckNvZGVzID0ge30pKTtcblxuIGZ1bmN0aW9uIGlzRGlnaXQoY29kZSkge1xuICByZXR1cm4gKFxuICAgIChjb2RlID49IGNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBjaGFyQ29kZXMuZGlnaXQ5KSB8fFxuICAgIChjb2RlID49IGNoYXJDb2Rlcy5sb3dlcmNhc2VBICYmIGNvZGUgPD0gY2hhckNvZGVzLmxvd2VyY2FzZUYpIHx8XG4gICAgKGNvZGUgPj0gY2hhckNvZGVzLnVwcGVyY2FzZUEgJiYgY29kZSA8PSBjaGFyQ29kZXMudXBwZXJjYXNlRilcbiAgKTtcbn0gZXhwb3J0cy5pc0RpZ2l0ID0gaXNEaWdpdDtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfXZhciBfc3RhdGUgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvc3RhdGUnKTsgdmFyIF9zdGF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdGF0ZSk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uL3V0aWwvY2hhcmNvZGVzJyk7XG5cbiBleHBvcnRzLmlzSlNYRW5hYmxlZDtcbiBleHBvcnRzLmlzVHlwZVNjcmlwdEVuYWJsZWQ7XG4gZXhwb3J0cy5pc0Zsb3dFbmFibGVkO1xuIGV4cG9ydHMuc3RhdGU7XG4gZXhwb3J0cy5pbnB1dDtcbiBleHBvcnRzLm5leHRDb250ZXh0SWQ7XG5cbiBmdW5jdGlvbiBnZXROZXh0Q29udGV4dElkKCkge1xuICByZXR1cm4gZXhwb3J0cy5uZXh0Q29udGV4dElkKys7XG59IGV4cG9ydHMuZ2V0TmV4dENvbnRleHRJZCA9IGdldE5leHRDb250ZXh0SWQ7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gZnVuY3Rpb24gYXVnbWVudEVycm9yKGVycm9yKSB7XG4gIGlmIChcInBvc1wiIGluIGVycm9yKSB7XG4gICAgY29uc3QgbG9jID0gbG9jYXRpb25Gb3JJbmRleChlcnJvci5wb3MpO1xuICAgIGVycm9yLm1lc3NhZ2UgKz0gYCAoJHtsb2MubGluZX06JHtsb2MuY29sdW1ufSlgO1xuICAgIGVycm9yLmxvYyA9IGxvYztcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59IGV4cG9ydHMuYXVnbWVudEVycm9yID0gYXVnbWVudEVycm9yO1xuXG4gY2xhc3MgTG9jIHtcbiAgXG4gIFxuICBjb25zdHJ1Y3RvcihsaW5lLCBjb2x1bW4pIHtcbiAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICB9XG59IGV4cG9ydHMuTG9jID0gTG9jO1xuXG4gZnVuY3Rpb24gbG9jYXRpb25Gb3JJbmRleChwb3MpIHtcbiAgbGV0IGxpbmUgPSAxO1xuICBsZXQgY29sdW1uID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3M7IGkrKykge1xuICAgIGlmIChleHBvcnRzLmlucHV0LmNoYXJDb2RlQXQoaSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICBsaW5lKys7XG4gICAgICBjb2x1bW4gPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW4rKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2MobGluZSwgY29sdW1uKTtcbn0gZXhwb3J0cy5sb2NhdGlvbkZvckluZGV4ID0gbG9jYXRpb25Gb3JJbmRleDtcblxuIGZ1bmN0aW9uIGluaXRQYXJzZXIoXG4gIGlucHV0Q29kZSxcbiAgaXNKU1hFbmFibGVkQXJnLFxuICBpc1R5cGVTY3JpcHRFbmFibGVkQXJnLFxuICBpc0Zsb3dFbmFibGVkQXJnLFxuKSB7XG4gIGV4cG9ydHMuaW5wdXQgPSBpbnB1dENvZGU7XG4gIGV4cG9ydHMuc3RhdGUgPSBuZXcgKDAsIF9zdGF0ZTIuZGVmYXVsdCkoKTtcbiAgZXhwb3J0cy5uZXh0Q29udGV4dElkID0gMTtcbiAgZXhwb3J0cy5pc0pTWEVuYWJsZWQgPSBpc0pTWEVuYWJsZWRBcmc7XG4gIGV4cG9ydHMuaXNUeXBlU2NyaXB0RW5hYmxlZCA9IGlzVHlwZVNjcmlwdEVuYWJsZWRBcmc7XG4gIGV4cG9ydHMuaXNGbG93RW5hYmxlZCA9IGlzRmxvd0VuYWJsZWRBcmc7XG59IGV4cG9ydHMuaW5pdFBhcnNlciA9IGluaXRQYXJzZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX2luZGV4ID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL2luZGV4Jyk7XG5cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvdHlwZXMnKTtcbnZhciBfY2hhcmNvZGVzID0gcmVxdWlyZSgnLi4vdXRpbC9jaGFyY29kZXMnKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xuXG4vLyAjIyBQYXJzZXIgdXRpbGl0aWVzXG5cbi8vIFRlc3RzIHdoZXRoZXIgcGFyc2VkIHRva2VuIGlzIGEgY29udGV4dHVhbCBrZXl3b3JkLlxuIGZ1bmN0aW9uIGlzQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICByZXR1cm4gX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IGNvbnRleHR1YWxLZXl3b3JkO1xufSBleHBvcnRzLmlzQ29udGV4dHVhbCA9IGlzQ29udGV4dHVhbDtcblxuIGZ1bmN0aW9uIGlzTG9va2FoZWFkQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICBjb25zdCBsID0gX2luZGV4Lmxvb2thaGVhZFR5cGVBbmRLZXl3b3JkLmNhbGwodm9pZCAwLCApO1xuICByZXR1cm4gbC50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUgJiYgbC5jb250ZXh0dWFsS2V5d29yZCA9PT0gY29udGV4dHVhbEtleXdvcmQ7XG59IGV4cG9ydHMuaXNMb29rYWhlYWRDb250ZXh0dWFsID0gaXNMb29rYWhlYWRDb250ZXh0dWFsO1xuXG4vLyBDb25zdW1lcyBjb250ZXh0dWFsIGtleXdvcmQgaWYgcG9zc2libGUuXG4gZnVuY3Rpb24gZWF0Q29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICByZXR1cm4gX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IGNvbnRleHR1YWxLZXl3b3JkICYmIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSk7XG59IGV4cG9ydHMuZWF0Q29udGV4dHVhbCA9IGVhdENvbnRleHR1YWw7XG5cbi8vIEFzc2VydHMgdGhhdCBmb2xsb3dpbmcgdG9rZW4gaXMgZ2l2ZW4gY29udGV4dHVhbCBrZXl3b3JkLlxuIGZ1bmN0aW9uIGV4cGVjdENvbnRleHR1YWwoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgaWYgKCFlYXRDb250ZXh0dWFsKGNvbnRleHR1YWxLZXl3b3JkKSkge1xuICAgIHVuZXhwZWN0ZWQoKTtcbiAgfVxufSBleHBvcnRzLmV4cGVjdENvbnRleHR1YWwgPSBleHBlY3RDb250ZXh0dWFsO1xuXG4vLyBUZXN0IHdoZXRoZXIgYSBzZW1pY29sb24gY2FuIGJlIGluc2VydGVkIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuIGZ1bmN0aW9uIGNhbkluc2VydFNlbWljb2xvbigpIHtcbiAgcmV0dXJuIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lb2YpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpIHx8IGhhc1ByZWNlZGluZ0xpbmVCcmVhaygpO1xufSBleHBvcnRzLmNhbkluc2VydFNlbWljb2xvbiA9IGNhbkluc2VydFNlbWljb2xvbjtcblxuIGZ1bmN0aW9uIGhhc1ByZWNlZGluZ0xpbmVCcmVhaygpIHtcbiAgY29uc3QgcHJldlRva2VuID0gX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgY29uc3QgbGFzdFRva0VuZCA9IHByZXZUb2tlbiA/IHByZXZUb2tlbi5lbmQgOiAwO1xuICBmb3IgKGxldCBpID0gbGFzdFRva0VuZDsgaSA8IF9iYXNlLnN0YXRlLnN0YXJ0OyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5saW5lRmVlZCB8fFxuICAgICAgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuY2FycmlhZ2VSZXR1cm4gfHxcbiAgICAgIGNvZGUgPT09IDB4MjAyOCB8fFxuICAgICAgY29kZSA9PT0gMHgyMDI5XG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLmhhc1ByZWNlZGluZ0xpbmVCcmVhayA9IGhhc1ByZWNlZGluZ0xpbmVCcmVhaztcblxuIGZ1bmN0aW9uIGhhc0ZvbGxvd2luZ0xpbmVCcmVhaygpIHtcbiAgY29uc3QgbmV4dFN0YXJ0ID0gX2luZGV4Lm5leHRUb2tlblN0YXJ0LmNhbGwodm9pZCAwLCApO1xuICBmb3IgKGxldCBpID0gX2Jhc2Uuc3RhdGUuZW5kOyBpIDwgbmV4dFN0YXJ0OyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5saW5lRmVlZCB8fFxuICAgICAgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuY2FycmlhZ2VSZXR1cm4gfHxcbiAgICAgIGNvZGUgPT09IDB4MjAyOCB8fFxuICAgICAgY29kZSA9PT0gMHgyMDI5XG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLmhhc0ZvbGxvd2luZ0xpbmVCcmVhayA9IGhhc0ZvbGxvd2luZ0xpbmVCcmVhaztcblxuIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoKSB7XG4gIHJldHVybiBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNlbWkpIHx8IGNhbkluc2VydFNlbWljb2xvbigpO1xufSBleHBvcnRzLmlzTGluZVRlcm1pbmF0b3IgPSBpc0xpbmVUZXJtaW5hdG9yO1xuXG4vLyBDb25zdW1lIGEgc2VtaWNvbG9uLCBvciwgZmFpbGluZyB0aGF0LCBzZWUgaWYgd2UgYXJlIGFsbG93ZWQgdG9cbi8vIHByZXRlbmQgdGhhdCB0aGVyZSBpcyBhIHNlbWljb2xvbiBhdCB0aGlzIHBvc2l0aW9uLlxuIGZ1bmN0aW9uIHNlbWljb2xvbigpIHtcbiAgaWYgKCFpc0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICB1bmV4cGVjdGVkKCdVbmV4cGVjdGVkIHRva2VuLCBleHBlY3RlZCBcIjtcIicpO1xuICB9XG59IGV4cG9ydHMuc2VtaWNvbG9uID0gc2VtaWNvbG9uO1xuXG4vLyBFeHBlY3QgYSB0b2tlbiBvZiBhIGdpdmVuIHR5cGUuIElmIGZvdW5kLCBjb25zdW1lIGl0LCBvdGhlcndpc2UsXG4vLyByYWlzZSBhbiB1bmV4cGVjdGVkIHRva2VuIGVycm9yIGF0IGdpdmVuIHBvcy5cbiBmdW5jdGlvbiBleHBlY3QodHlwZSkge1xuICBjb25zdCBtYXRjaGVkID0gX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgdHlwZSk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHVuZXhwZWN0ZWQoYFVuZXhwZWN0ZWQgdG9rZW4sIGV4cGVjdGVkIFwiJHtfdHlwZXMuZm9ybWF0VG9rZW5UeXBlLmNhbGwodm9pZCAwLCB0eXBlKX1cImApO1xuICB9XG59IGV4cG9ydHMuZXhwZWN0ID0gZXhwZWN0O1xuXG4vKipcbiAqIFRyYW5zaXRpb24gdGhlIHBhcnNlciB0byBhbiBlcnJvciBzdGF0ZS4gQWxsIGNvZGUgbmVlZHMgdG8gYmUgd3JpdHRlbiB0byBuYXR1cmFsbHkgdW53aW5kIGluIHRoaXNcbiAqIHN0YXRlLCB3aGljaCBhbGxvd3MgdXMgdG8gYmFja3RyYWNrIHdpdGhvdXQgZXhjZXB0aW9ucyBhbmQgd2l0aG91dCBlcnJvciBwbHVtYmluZyBldmVyeXdoZXJlLlxuICovXG4gZnVuY3Rpb24gdW5leHBlY3RlZChtZXNzYWdlID0gXCJVbmV4cGVjdGVkIHRva2VuXCIsIHBvcyA9IF9iYXNlLnN0YXRlLnN0YXJ0KSB7XG4gIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBlcnIgPSBuZXcgU3ludGF4RXJyb3IobWVzc2FnZSk7XG4gIGVyci5wb3MgPSBwb3M7XG4gIF9iYXNlLnN0YXRlLmVycm9yID0gZXJyO1xuICBfYmFzZS5zdGF0ZS5wb3MgPSBfYmFzZS5pbnB1dC5sZW5ndGg7XG4gIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lb2YpO1xufSBleHBvcnRzLnVuZXhwZWN0ZWQgPSB1bmV4cGVjdGVkO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIF9jaGFyY29kZXMgPSByZXF1aXJlKCcuL2NoYXJjb2RlcycpO1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy13aGl0ZS1zcGFjZVxuIGNvbnN0IFdISVRFU1BBQ0VfQ0hBUlMgPSBbXG4gIDB4MDAwOSxcbiAgMHgwMDBiLFxuICAweDAwMGMsXG4gIF9jaGFyY29kZXMuY2hhckNvZGVzLnNwYWNlLFxuICBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5ub25CcmVha2luZ1NwYWNlLFxuICBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5vZ2hhbVNwYWNlTWFyayxcbiAgMHgyMDAwLCAvLyBFTiBRVUFEXG4gIDB4MjAwMSwgLy8gRU0gUVVBRFxuICAweDIwMDIsIC8vIEVOIFNQQUNFXG4gIDB4MjAwMywgLy8gRU0gU1BBQ0VcbiAgMHgyMDA0LCAvLyBUSFJFRS1QRVItRU0gU1BBQ0VcbiAgMHgyMDA1LCAvLyBGT1VSLVBFUi1FTSBTUEFDRVxuICAweDIwMDYsIC8vIFNJWC1QRVItRU0gU1BBQ0VcbiAgMHgyMDA3LCAvLyBGSUdVUkUgU1BBQ0VcbiAgMHgyMDA4LCAvLyBQVU5DVFVBVElPTiBTUEFDRVxuICAweDIwMDksIC8vIFRISU4gU1BBQ0VcbiAgMHgyMDBhLCAvLyBIQUlSIFNQQUNFXG4gIDB4MjAyZiwgLy8gTkFSUk9XIE5PLUJSRUFLIFNQQUNFXG4gIDB4MjA1ZiwgLy8gTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRVxuICAweDMwMDAsIC8vIElERU9HUkFQSElDIFNQQUNFXG4gIDB4ZmVmZiwgLy8gWkVSTyBXSURUSCBOTy1CUkVBSyBTUEFDRVxuXTsgZXhwb3J0cy5XSElURVNQQUNFX0NIQVJTID0gV0hJVEVTUEFDRV9DSEFSUztcblxuIGNvbnN0IHNraXBXaGl0ZVNwYWNlID0gLyg/Olxcc3xcXC9cXC8uKnxcXC9cXCpbXl0qP1xcKlxcLykqL2c7IGV4cG9ydHMuc2tpcFdoaXRlU3BhY2UgPSBza2lwV2hpdGVTcGFjZTtcblxuIGNvbnN0IElTX1dISVRFU1BBQ0UgPSBuZXcgVWludDhBcnJheSg2NTUzNik7IGV4cG9ydHMuSVNfV0hJVEVTUEFDRSA9IElTX1dISVRFU1BBQ0U7XG5mb3IgKGNvbnN0IGNoYXIgb2YgZXhwb3J0cy5XSElURVNQQUNFX0NIQVJTKSB7XG4gIGV4cG9ydHMuSVNfV0hJVEVTUEFDRVtjaGFyXSA9IDE7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4vY2hhcmNvZGVzJyk7XG52YXIgX3doaXRlc3BhY2UgPSByZXF1aXJlKCcuL3doaXRlc3BhY2UnKTtcblxuZnVuY3Rpb24gY29tcHV0ZUlzSWRlbnRpZmllckNoYXIoY29kZSkge1xuICBpZiAoY29kZSA8IDQ4KSByZXR1cm4gY29kZSA9PT0gMzY7XG4gIGlmIChjb2RlIDwgNTgpIHJldHVybiB0cnVlO1xuICBpZiAoY29kZSA8IDY1KSByZXR1cm4gZmFsc2U7XG4gIGlmIChjb2RlIDwgOTEpIHJldHVybiB0cnVlO1xuICBpZiAoY29kZSA8IDk3KSByZXR1cm4gY29kZSA9PT0gOTU7XG4gIGlmIChjb2RlIDwgMTIzKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGNvZGUgPCAxMjgpIHJldHVybiBmYWxzZTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBub24tQVNDSUkgY2hhciBjb2RlLlwiKTtcbn1cblxuIGNvbnN0IElTX0lERU5USUZJRVJfQ0hBUiA9IG5ldyBVaW50OEFycmF5KDY1NTM2KTsgZXhwb3J0cy5JU19JREVOVElGSUVSX0NIQVIgPSBJU19JREVOVElGSUVSX0NIQVI7XG5mb3IgKGxldCBpID0gMDsgaSA8IDEyODsgaSsrKSB7XG4gIGV4cG9ydHMuSVNfSURFTlRJRklFUl9DSEFSW2ldID0gY29tcHV0ZUlzSWRlbnRpZmllckNoYXIoaSkgPyAxIDogMDtcbn1cbmZvciAobGV0IGkgPSAxMjg7IGkgPCA2NTUzNjsgaSsrKSB7XG4gIGV4cG9ydHMuSVNfSURFTlRJRklFUl9DSEFSW2ldID0gMTtcbn1cbi8vIEFzaWRlIGZyb20gd2hpdGVzcGFjZSBhbmQgbmV3bGluZXMsIGFsbCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEFTQ0lJIHNwYWNlIGFyZSBlaXRoZXJcbi8vIGlkZW50aWZpZXIgY2hhcmFjdGVycyBvciBpbnZhbGlkLiBTaW5jZSB3ZSdyZSBub3QgcGVyZm9ybWluZyBjb2RlIHZhbGlkYXRpb24sIHdlIGNhbiBqdXN0XG4vLyB0cmVhdCBhbGwgaW52YWxpZCBjaGFyYWN0ZXJzIGFzIGlkZW50aWZpZXIgY2hhcmFjdGVycy5cbmZvciAoY29uc3Qgd2hpdGVzcGFjZUNoYXIgb2YgX3doaXRlc3BhY2UuV0hJVEVTUEFDRV9DSEFSUykge1xuICBleHBvcnRzLklTX0lERU5USUZJRVJfQ0hBUlt3aGl0ZXNwYWNlQ2hhcl0gPSAwO1xufVxuZXhwb3J0cy5JU19JREVOVElGSUVSX0NIQVJbMHgyMDI4XSA9IDA7XG5leHBvcnRzLklTX0lERU5USUZJRVJfQ0hBUlsweDIwMjldID0gMDtcblxuIGNvbnN0IElTX0lERU5USUZJRVJfU1RBUlQgPSBleHBvcnRzLklTX0lERU5USUZJRVJfQ0hBUi5zbGljZSgpOyBleHBvcnRzLklTX0lERU5USUZJRVJfU1RBUlQgPSBJU19JREVOVElGSUVSX1NUQVJUO1xuZm9yIChsZXQgbnVtQ2hhciA9IF9jaGFyY29kZXMuY2hhckNvZGVzLmRpZ2l0MDsgbnVtQ2hhciA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDk7IG51bUNoYXIrKykge1xuICBleHBvcnRzLklTX0lERU5USUZJRVJfU1RBUlRbbnVtQ2hhcl0gPSAwO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7Ly8gR2VuZXJhdGVkIGZpbGUsIGRvIG5vdCBlZGl0ISBSdW4gXCJ5YXJuIGdlbmVyYXRlXCIgdG8gcmUtZ2VuZXJhdGUgdGhpcyBmaWxlLlxudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4va2V5d29yZHMnKTtcbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5cbi8vIHByZXR0aWVyLWlnbm9yZVxuIGNvbnN0IFJFQURfV09SRF9UUkVFID0gbmV3IEludDMyQXJyYXkoW1xuICAvLyBcIlwiXG4gIC0xLCAyNywgNzgzLCA5MTgsIDE3NTUsIDIzNzYsIDI4NjIsIDM0ODMsIC0xLCAzNjk5LCAtMSwgNDYxNywgNDc1MiwgNDgzMywgNTEzMCwgNTUwOCwgNTk0MCwgLTEsIDY0ODAsIDY5MzksIDc3NDksIDgxODEsIDg0NTEsIDg2MTMsIC0xLCA4ODI5LCAtMSxcbiAgLy8gXCJhXCJcbiAgLTEsIC0xLCA1NCwgMjQzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MzIsIC0xLCAtMSwgLTEsIDY3NSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhYlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMDgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJzdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RyXCJcbiAgLTEsIDE2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJzdHJhXCJcbiAgLTEsIC0xLCAtMSwgMTg5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWJzdHJhY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjE2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFic3RyYWN0XCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNcIlxuICAtMSwgLTEsIC0xLCAyNzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2NcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDI5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2NlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNjZXNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzUxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2Nlc3NcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhY2Nlc3NvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYWNjZXNzb3JcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FjY2Vzc29yIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc1wiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXMgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDU5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU5NCwgLTEsXG4gIC8vIFwiYXNzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0ODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXNzZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUxMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImFzc2VyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1NDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXNzZXJ0XCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTY3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3NlcnRzXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnRzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3lcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYyMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhc3luXCJcbiAgLTEsIC0xLCAtMSwgNjQ4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiYXN5bmNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhd1wiXG4gIC0xLCA3MDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImF3YVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcyOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImF3YWlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJhd2FpdFwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXdhaXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJiclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJyZVwiXG4gIC0xLCA4NjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImJyZWFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg5MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJicmVha1wiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9icmVhayA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjXCJcbiAgLTEsIDk0NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTEwNywgLTEsIC0xLCAtMSwgMTI0MiwgLTEsIC0xLCAxMzUwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2FcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgOTcyLCAxMDI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNhc2VcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fY2FzZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXRcIlxuICAtMSwgLTEsIC0xLCAxMDUzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2F0Y1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTA4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjYXRjaFwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9jYXRjaCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTEzNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVcIlxuICAtMSwgLTEsIC0xLCAxMTYxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2hlY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTE4OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVja1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMjE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjaGVja3NcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2NoZWNrcyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2xcIlxuICAtMSwgMTI2OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2xhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEyOTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNsYXNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTMyMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY2xhc3NcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEzNzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE0MDQsIDE2MjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29uc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTQzMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdFwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9jb25zdCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTQ1OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNvbnN0clwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE0ODUsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1XCJcbiAgLTEsIC0xLCAtMSwgMTUxMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNvbnN0cnVjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNTM5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNvbnN0cnVjdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE1NjYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb25zdHJ1Y3RvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTU5MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImNvbnN0cnVjdG9yXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9jb25zdHJ1Y3RvciA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29udFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDE2NDcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTY3NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNzAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiY29udGludVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTcyOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJjb250aW51ZVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9jb250aW51ZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAxNzgyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMzQ5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVcIlxuICAtMSwgLTEsIDE4MDksIDE5NzEsIC0xLCAtMSwgMjEwNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMjQxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGViXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTgzNiwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTg2MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVidWdcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTg5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVidWdnXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAxOTE3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlYnVnZ2VcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxOTQ0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVidWdnZXJcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fZGVidWdnZXIgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTk5OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlY2xcIlxuICAtMSwgMjAyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjbGFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMDUyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVjbGFyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMDc5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlY2xhcmVcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2RlY2xhcmUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlZlwiXG4gIC0xLCAyMTMzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjE2MCwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlZmF1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjE4NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlZmF1bFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjIxNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkZWZhdWx0XCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAyMjY4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImRlbGVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIyOTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVsZXRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDIzMjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZGVsZXRlXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX2RlbGV0ZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJkb1wiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9kbyA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjQwMywgLTEsIDI0ODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI1NjUsIC0xLCAtMSxcbiAgLy8gXCJlbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNDMwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJlbHNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZWxzZVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9lbHNlIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImVuXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjUxMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImVudVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNTM4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJlbnVtXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9lbnVtIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNTkyLCAtMSwgLTEsIC0xLCAyNzI3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4cFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI2MTksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjY0NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4cG9yXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNjczLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImV4cG9ydFwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyNzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHBvcnRzXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9leHBvcnRzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDI3NTQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0ZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjc4MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHRlblwiXG4gIC0xLCAtMSwgLTEsIC0xLCAyODA4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJleHRlbmRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjgzNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZXh0ZW5kc1wiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZcIlxuICAtMSwgMjg4OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI5OTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzE1OSwgLTEsIC0xLCAzMjEzLCAtMSwgLTEsIDMyOTQsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI5MTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmYWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjk0MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZmFsc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjk3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmYWxzZVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9mYWxzZSA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzAyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5cIlxuICAtMSwgMzA1MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZmluYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMwNzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5hbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMxMDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmaW5hbGxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzEzMiwgLTEsXG4gIC8vIFwiZmluYWxseVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9maW5hbGx5IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzE4NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZvclwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9mb3IgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzMjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZnJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMyNjcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZyb21cIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20gPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzMzIxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1blwiXG4gIC0xLCAtMSwgLTEsIDMzNDgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzMzc1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1bmN0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzQwMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1bmN0aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM0MjksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJmdW5jdGlvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNDU2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImZ1bmN0aW9uXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDM1MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDM1NjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJnZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzUzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJnZXRcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2dldCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ2xcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNTkxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ2xvXCJcbiAgLTEsIC0xLCAzNjE4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImdsb2JcIlxuICAtMSwgMzY0NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ2xvYmFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNjcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiZ2xvYmFsXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzI2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzNzUzLCA0MDc3LCAtMSwgLTEsIC0xLCAtMSwgNDU5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaWZcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5faWYgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzc4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzgwNywgLTEsIC0xLCAzOTk2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzgzNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBsZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzODYxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBsZW1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDM4ODgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzkxNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBsZW1lblwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzk0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBsZW1lbnRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMzk2OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wbGVtZW50c1wiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW1wb1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQwMjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBvclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDA1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbXBvcnRcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX2luIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MTA0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MTg1LCA0NDAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluZlwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDEzMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbmZlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDE1OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluZmVyXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbmZlciA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MjEyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RcIlxuICAtMSwgNDIzOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zdGFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQyNjYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zdGFuXCJcbiAgLTEsIC0xLCAtMSwgNDI5MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhbmNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDQzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zdGFuY2VcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0MzQ3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW5zdGFuY2VvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDM3NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImluc3RhbmNlb2ZcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5faW5zdGFuY2VvZiA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ0MjgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW50ZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ0NTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ0ODIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlcmZcIlxuICAtMSwgNDUwOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaW50ZXJmYVwiXG4gIC0xLCAtMSwgLTEsIDQ1MzYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlcmZhY1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDU2MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJpbnRlcmZhY2VcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiaXNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2lzIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJrXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA0NjQ0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImtlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ2NzEsIC0xLFxuICAvLyBcImtleVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ2OTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJrZXlvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDcyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcImtleW9mXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9rZXlvZiA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDc3OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJsZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDgwNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJsZXRcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fbGV0IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm1cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0ODYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ5OTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDQ4ODcsIC0xLCAtMSxcbiAgLy8gXCJtaXhcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0OTE0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibWl4aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNDk0MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaXhpblwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA0OTY4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJtaXhpbnNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21peGlucyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9cIlxuICAtMSwgLTEsIC0xLCAtMSwgNTAyMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9kXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTA0OSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm1vZHVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MDc2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9kdWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDUxMDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwibW9kdWxlXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5cIlxuICAtMSwgNTE1NywgLTEsIC0xLCAtMSwgNTM3MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQyNywgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUxODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTIxMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUyMzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbWVzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDUyNjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbWVzcFwiXG4gIC0xLCA1MjkyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuYW1lc3BhXCJcbiAgLTEsIC0xLCAtMSwgNTMxOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbWVzcGFjXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA1MzQ2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm5hbWVzcGFjZVwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQwMCwgLTEsIC0xLCAtMSxcbiAgLy8gXCJuZXdcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fbmV3IDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm51XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTQ1NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm51bFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU0ODEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJudWxsXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX251bGwgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU1MzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDU1NjIsIC0xLCAtMSwgLTEsIC0xLCA1Njk3LCA1NzUxLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvZlwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb2YgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9wXCJcbiAgLTEsIDU1ODksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9wYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTYxNiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvcGFxXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTY0MywgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9wYXF1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA1NjcwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm9wYXF1ZVwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb3BhcXVlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTcyNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJvdXRcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX291dCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDU3NzgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm92ZXJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1ODMyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlcnJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1ODU5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlcnJpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDU4ODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIm92ZXJyaWRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDU5MTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwib3ZlcnJpZGVcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNTk2NywgLTEsIC0xLCA2MzQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1OTk0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYxMjksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcmlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjAyMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpdlwiXG4gIC0xLCA2MDQ4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcml2YVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjA3NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcml2YXRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDYxMDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJpdmF0ZVwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MTU2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInByb3RcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDYxODMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYzMTgsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZVwiXG4gIC0xLCAtMSwgLTEsIDYyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWNcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDYyMzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvdGVjdFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjI2NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWN0ZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCA2MjkxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwcm90ZWN0ZWRcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3Byb3RlY3RlZCA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHJvdG9cIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3Byb3RvIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwdVwiXG4gIC0xLCAtMSwgNjM3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwdWJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2Mzk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicHVibFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY0MjYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwdWJsaVwiXG4gIC0xLCAtMSwgLTEsIDY0NTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJwdWJsaWNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3B1YmxpYyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwiclwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjUwNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZVwiXG4gIC0xLCA2NTM0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2Njk2LCAtMSwgLTEsIDY4MzEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDY1NjEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlYWRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2NTg4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhZG9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY2MTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVhZG9uXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjY0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJlYWRvbmxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjY2OSwgLTEsXG4gIC8vIFwicmVhZG9ubHlcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5IDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2NzIzLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVxdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY3NTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXF1aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY3NzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJyZXF1aXJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDY4MDQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmVxdWlyZVwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVxdWlyZSA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmV0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjg1OCwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInJldHVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2ODg1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmV0dXJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDY5MTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwicmV0dXJuXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX3JldHVybiA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzXCJcbiAgLTEsIDY5NjYsIC0xLCAtMSwgLTEsIDcxODIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzIzNiwgNzM3MSwgLTEsIDc0NzksIC0xLCA3NjE0LCAtMSxcbiAgLy8gXCJzYVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNjk5MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MDIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic2F0aVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MDQ3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcwNzQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc2ZcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MTAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic2F0aXNmaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzEyOCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc2ZpZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3MTU1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzYXRpc2ZpZXNcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3NhdGlzZmllcyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic2VcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDcyMDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic2V0XCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9zZXQgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0XCJcbiAgLTEsIDcyNjMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdGF0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzMxNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YXRpXCJcbiAgLTEsIC0xLCAtMSwgNzM0NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN0YXRpY1wiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc3RhdGljIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3Mzk4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdXBcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDc0MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic3VwZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc0NTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzdXBlclwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl9zdXBlciA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1MDYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2lcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc1MzMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwic3dpdFwiXG4gIC0xLCAtMSwgLTEsIDc1NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2l0Y1wiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzU4NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzd2l0Y2hcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fc3dpdGNoIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN5XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc2NDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN5bVwiXG4gIC0xLCAtMSwgNzY2OCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJzeW1iXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzY5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN5bWJvXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzcyMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInN5bWJvbFwiXG4gIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc3ltYm9sIDw8IDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3Nzc2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3OTM4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MDQ2LCAtMSxcbiAgLy8gXCJ0aFwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc4MDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzg1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRoaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3ODMwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ0aGlzXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX3RoaXMgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidGhyXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgNzg4NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRocm9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDc5MTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidGhyb3dcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fdGhyb3cgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHJcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA3OTY1LCAtMSwgLTEsIC0xLCA4MDE5LCAtMSxcbiAgLy8gXCJ0cnVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDc5OTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHJ1ZVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl90cnVlIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInRyeVwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl90cnkgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODA3MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInR5cGVcIlxuICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTI3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwZW9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MTU0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidHlwZW9mXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX3R5cGVvZiA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ1XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MjA4LCAtMSwgLTEsIC0xLCAtMSwgODM0MywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidW5cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MjM1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidW5pXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4MjYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVuaXFcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4Mjg5LCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidW5pcXVcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDgzMTYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidW5pcXVlXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl91bmlxdWUgPDwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzaVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODM5NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ1c2luXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg0MjQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInVzaW5nXCJcbiAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl91c2luZyA8PCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidlwiXG4gIC0xLCA4NDc4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODUzMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInZhXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODUwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInZhclwiXG4gIChfdHlwZXMuVG9rZW5UeXBlLl92YXIgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidm9cIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NTU5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwidm9pXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDg1ODYsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInZvaWRcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fdm9pZCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ3XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NjQwLCA4NzQ4LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2hcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4NjY3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2hpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODY5NCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndoaWxcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIDg3MjEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2hpbGVcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fd2hpbGUgPDwgMSkgKyAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2lcIlxuICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg3NzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsXG4gIC8vIFwid2l0XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA4ODAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcIndpdGhcIlxuICAoX3R5cGVzLlRva2VuVHlwZS5fd2l0aCA8PCAxKSArIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ5XCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgODg1NiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpXCJcbiAgLTEsIC0xLCAtMSwgLTEsIC0xLCA4ODgzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpZVwiXG4gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDg5MTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSxcbiAgLy8gXCJ5aWVsXCJcbiAgLTEsIC0xLCAtMSwgLTEsIDg5MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuICAvLyBcInlpZWxkXCJcbiAgKF90eXBlcy5Ub2tlblR5cGUuX3lpZWxkIDw8IDEpICsgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLFxuXSk7IGV4cG9ydHMuUkVBRF9XT1JEX1RSRUUgPSBSRUFEX1dPUkRfVFJFRTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfYmFzZSA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9iYXNlJyk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uL3V0aWwvY2hhcmNvZGVzJyk7XG52YXIgX2lkZW50aWZpZXIgPSByZXF1aXJlKCcuLi91dGlsL2lkZW50aWZpZXInKTtcbnZhciBfaW5kZXggPSByZXF1aXJlKCcuL2luZGV4Jyk7XG52YXIgX3JlYWRXb3JkVHJlZSA9IHJlcXVpcmUoJy4vcmVhZFdvcmRUcmVlJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi90eXBlcycpO1xuXG4vKipcbiAqIFJlYWQgYW4gaWRlbnRpZmllciwgcHJvZHVjaW5nIGVpdGhlciBhIG5hbWUgdG9rZW4gb3IgbWF0Y2hpbmcgb24gb25lIG9mIHRoZSBleGlzdGluZyBrZXl3b3Jkcy5cbiAqIEZvciBwZXJmb3JtYW5jZSwgd2UgcHJlLWdlbmVyYXRlIGJpZyBkZWNpc2lvbiB0cmVlIHRoYXQgd2UgdHJhdmVyc2UuIEVhY2ggbm9kZSByZXByZXNlbnRzIGFcbiAqIHByZWZpeCBhbmQgaGFzIDI3IHZhbHVlcywgd2hlcmUgdGhlIGZpcnN0IHZhbHVlIGlzIHRoZSB0b2tlbiBvciBjb250ZXh0dWFsIHRva2VuLCBpZiBhbnkgKC0xIGlmXG4gKiBub3QpLCBhbmQgdGhlIG90aGVyIDI2IHZhbHVlcyBhcmUgdGhlIHRyYW5zaXRpb25zIHRvIG90aGVyIG5vZGVzLCBvciAtMSB0byBzdG9wLlxuICovXG4gZnVuY3Rpb24gcmVhZFdvcmQoKSB7XG4gIGxldCB0cmVlUG9zID0gMDtcbiAgbGV0IGNvZGUgPSAwO1xuICBsZXQgcG9zID0gX2Jhc2Uuc3RhdGUucG9zO1xuICB3aGlsZSAocG9zIDwgX2Jhc2UuaW5wdXQubGVuZ3RoKSB7XG4gICAgY29kZSA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQocG9zKTtcbiAgICBpZiAoY29kZSA8IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZUEgfHwgY29kZSA+IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZVopIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gX3JlYWRXb3JkVHJlZS5SRUFEX1dPUkRfVFJFRVt0cmVlUG9zICsgKGNvZGUgLSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VBKSArIDFdO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVQb3MgPSBuZXh0O1xuICAgICAgcG9zKys7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qga2V5d29yZFZhbHVlID0gX3JlYWRXb3JkVHJlZS5SRUFEX1dPUkRfVFJFRVt0cmVlUG9zXTtcbiAgaWYgKGtleXdvcmRWYWx1ZSA+IC0xICYmICFfaWRlbnRpZmllci5JU19JREVOVElGSUVSX0NIQVJbY29kZV0pIHtcbiAgICBfYmFzZS5zdGF0ZS5wb3MgPSBwb3M7XG4gICAgaWYgKGtleXdvcmRWYWx1ZSAmIDEpIHtcbiAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwga2V5d29yZFZhbHVlID4+PiAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIGtleXdvcmRWYWx1ZSA+Pj4gMSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHdoaWxlIChwb3MgPCBfYmFzZS5pbnB1dC5sZW5ndGgpIHtcbiAgICBjb25zdCBjaCA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQocG9zKTtcbiAgICBpZiAoX2lkZW50aWZpZXIuSVNfSURFTlRJRklFUl9DSEFSW2NoXSkge1xuICAgICAgcG9zKys7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYmFja3NsYXNoKSB7XG4gICAgICAvLyBcXHVcbiAgICAgIHBvcyArPSAyO1xuICAgICAgaWYgKF9iYXNlLmlucHV0LmNoYXJDb2RlQXQocG9zKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVmdEN1cmx5QnJhY2UpIHtcbiAgICAgICAgd2hpbGUgKHBvcyA8IF9iYXNlLmlucHV0Lmxlbmd0aCAmJiBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KHBvcykgIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnJpZ2h0Q3VybHlCcmFjZSkge1xuICAgICAgICAgIHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIHBvcysrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmF0U2lnbiAmJiBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KHBvcyArIDEpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hdFNpZ24pIHtcbiAgICAgIHBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgX2Jhc2Uuc3RhdGUucG9zID0gcG9zO1xuICBfaW5kZXguZmluaXNoVG9rZW4uY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IHJlYWRXb3JkO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9LyogZXNsaW50IG1heC1sZW46IDAgKi9cblxudmFyIF9iYXNlID0gcmVxdWlyZSgnLi4vdHJhdmVyc2VyL2Jhc2UnKTtcbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci91dGlsJyk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uL3V0aWwvY2hhcmNvZGVzJyk7XG52YXIgX2lkZW50aWZpZXIgPSByZXF1aXJlKCcuLi91dGlsL2lkZW50aWZpZXInKTtcbnZhciBfd2hpdGVzcGFjZSA9IHJlcXVpcmUoJy4uL3V0aWwvd2hpdGVzcGFjZScpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4va2V5d29yZHMnKTtcbnZhciBfcmVhZFdvcmQgPSByZXF1aXJlKCcuL3JlYWRXb3JkJyk7IHZhciBfcmVhZFdvcmQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhZFdvcmQpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcblxudmFyIElkZW50aWZpZXJSb2xlOyAoZnVuY3Rpb24gKElkZW50aWZpZXJSb2xlKSB7XG4gIGNvbnN0IEFjY2VzcyA9IDA7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiQWNjZXNzXCJdID0gQWNjZXNzXSA9IFwiQWNjZXNzXCI7XG4gIGNvbnN0IEV4cG9ydEFjY2VzcyA9IEFjY2VzcyArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiRXhwb3J0QWNjZXNzXCJdID0gRXhwb3J0QWNjZXNzXSA9IFwiRXhwb3J0QWNjZXNzXCI7XG4gIGNvbnN0IFRvcExldmVsRGVjbGFyYXRpb24gPSBFeHBvcnRBY2Nlc3MgKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIlRvcExldmVsRGVjbGFyYXRpb25cIl0gPSBUb3BMZXZlbERlY2xhcmF0aW9uXSA9IFwiVG9wTGV2ZWxEZWNsYXJhdGlvblwiO1xuICBjb25zdCBGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uID0gVG9wTGV2ZWxEZWNsYXJhdGlvbiArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvblwiXSA9IEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25dID0gXCJGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IEJsb2NrU2NvcGVkRGVjbGFyYXRpb24gPSBGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJCbG9ja1Njb3BlZERlY2xhcmF0aW9uXCJdID0gQmxvY2tTY29wZWREZWNsYXJhdGlvbl0gPSBcIkJsb2NrU2NvcGVkRGVjbGFyYXRpb25cIjtcbiAgY29uc3QgT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiA9IEJsb2NrU2NvcGVkRGVjbGFyYXRpb24gKyAxOyBJZGVudGlmaWVyUm9sZVtJZGVudGlmaWVyUm9sZVtcIk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb25cIl0gPSBPYmplY3RTaG9ydGhhbmRUb3BMZXZlbERlY2xhcmF0aW9uXSA9IFwiT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvblwiO1xuICBjb25zdCBPYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uID0gT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvblwiXSA9IE9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25dID0gXCJPYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IE9iamVjdFNob3J0aGFuZEJsb2NrU2NvcGVkRGVjbGFyYXRpb24gPSBPYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJPYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXCJdID0gT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbl0gPSBcIk9iamVjdFNob3J0aGFuZEJsb2NrU2NvcGVkRGVjbGFyYXRpb25cIjtcbiAgY29uc3QgT2JqZWN0U2hvcnRoYW5kID0gT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvbiArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiT2JqZWN0U2hvcnRoYW5kXCJdID0gT2JqZWN0U2hvcnRoYW5kXSA9IFwiT2JqZWN0U2hvcnRoYW5kXCI7XG4gIC8vIEFueSBpZGVudGlmaWVyIGJvdW5kIGluIGFuIGltcG9ydCBzdGF0ZW1lbnQsIGUuZy4gYm90aCBBIGFuZCBiIGZyb21cbiAgLy8gYGltcG9ydCBBLCAqIGFzIGIgZnJvbSAnQSc7YFxuICBjb25zdCBJbXBvcnREZWNsYXJhdGlvbiA9IE9iamVjdFNob3J0aGFuZCArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiSW1wb3J0RGVjbGFyYXRpb25cIl0gPSBJbXBvcnREZWNsYXJhdGlvbl0gPSBcIkltcG9ydERlY2xhcmF0aW9uXCI7XG4gIGNvbnN0IE9iamVjdEtleSA9IEltcG9ydERlY2xhcmF0aW9uICsgMTsgSWRlbnRpZmllclJvbGVbSWRlbnRpZmllclJvbGVbXCJPYmplY3RLZXlcIl0gPSBPYmplY3RLZXldID0gXCJPYmplY3RLZXlcIjtcbiAgLy8gVGhlIGBmb29gIGluIGBpbXBvcnQge2ZvbyBhcyBiYXJ9IGZyb20gXCIuL2FiY1wiO2AuXG4gIGNvbnN0IEltcG9ydEFjY2VzcyA9IE9iamVjdEtleSArIDE7IElkZW50aWZpZXJSb2xlW0lkZW50aWZpZXJSb2xlW1wiSW1wb3J0QWNjZXNzXCJdID0gSW1wb3J0QWNjZXNzXSA9IFwiSW1wb3J0QWNjZXNzXCI7XG59KShJZGVudGlmaWVyUm9sZSB8fCAoZXhwb3J0cy5JZGVudGlmaWVyUm9sZSA9IElkZW50aWZpZXJSb2xlID0ge30pKTtcblxuLyoqXG4gKiBFeHRyYSBpbmZvcm1hdGlvbiBvbiBqc3hUYWdTdGFydCB0b2tlbnMsIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSB0aHJlZVxuICoganN4IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIHRoZSBhdXRvbWF0aWMgdHJhbnNmb3JtLlxuICovXG52YXIgSlNYUm9sZTsgKGZ1bmN0aW9uIChKU1hSb2xlKSB7XG4gIC8vIFRoZSBlbGVtZW50IGlzIHNlbGYtY2xvc2luZyBvciBoYXMgYSBib2R5IHRoYXQgcmVzb2x2ZXMgdG8gZW1wdHkuIFdlXG4gIC8vIHNob3VsZG4ndCBlbWl0IGNoaWxkcmVuIGF0IGFsbCBpbiB0aGlzIGNhc2UuXG4gIGNvbnN0IE5vQ2hpbGRyZW4gPSAwOyBKU1hSb2xlW0pTWFJvbGVbXCJOb0NoaWxkcmVuXCJdID0gTm9DaGlsZHJlbl0gPSBcIk5vQ2hpbGRyZW5cIjtcbiAgLy8gVGhlIGVsZW1lbnQgaGFzIGEgc2luZ2xlIGV4cGxpY2l0IGNoaWxkLCB3aGljaCBtaWdodCBzdGlsbCBiZSBhbiBhcmJpdHJhcnlcbiAgLy8gZXhwcmVzc2lvbiBsaWtlIGFuIGFycmF5LiBXZSBzaG91bGQgZW1pdCB0aGF0IGV4cHJlc3Npb24gYXMgdGhlIGNoaWxkcmVuLlxuICBjb25zdCBPbmVDaGlsZCA9IE5vQ2hpbGRyZW4gKyAxOyBKU1hSb2xlW0pTWFJvbGVbXCJPbmVDaGlsZFwiXSA9IE9uZUNoaWxkXSA9IFwiT25lQ2hpbGRcIjtcbiAgLy8gVGhlIGVsZW1lbnQgaGFzIGF0IGxlYXN0IHR3byBleHBsaWNpdGx5LXNwZWNpZmllZCBjaGlsZHJlbiBvciBoYXMgc3ByZWFkXG4gIC8vIGNoaWxkcmVuLCBzbyBjaGlsZCBwb3NpdGlvbnMgYXJlIGFzc3VtZWQgdG8gYmUgXCJzdGF0aWNcIi4gV2Ugc2hvdWxkIHdyYXBcbiAgLy8gdGhlc2UgY2hpbGRyZW4gaW4gYW4gYXJyYXkuXG4gIGNvbnN0IFN0YXRpY0NoaWxkcmVuID0gT25lQ2hpbGQgKyAxOyBKU1hSb2xlW0pTWFJvbGVbXCJTdGF0aWNDaGlsZHJlblwiXSA9IFN0YXRpY0NoaWxkcmVuXSA9IFwiU3RhdGljQ2hpbGRyZW5cIjtcbiAgLy8gVGhlIGVsZW1lbnQgaGFzIGEgcHJvcCBuYW1lZCBcImtleVwiIGFmdGVyIGEgcHJvcCBzcHJlYWQsIHNvIHdlIHNob3VsZCBmYWxsXG4gIC8vIGJhY2sgdG8gdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24uXG4gIGNvbnN0IEtleUFmdGVyUHJvcFNwcmVhZCA9IFN0YXRpY0NoaWxkcmVuICsgMTsgSlNYUm9sZVtKU1hSb2xlW1wiS2V5QWZ0ZXJQcm9wU3ByZWFkXCJdID0gS2V5QWZ0ZXJQcm9wU3ByZWFkXSA9IFwiS2V5QWZ0ZXJQcm9wU3ByZWFkXCI7XG59KShKU1hSb2xlIHx8IChleHBvcnRzLkpTWFJvbGUgPSBKU1hSb2xlID0ge30pKTtcblxuIGZ1bmN0aW9uIGlzRGVjbGFyYXRpb24odG9rZW4pIHtcbiAgY29uc3Qgcm9sZSA9IHRva2VuLmlkZW50aWZpZXJSb2xlO1xuICByZXR1cm4gKFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLlRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5GdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kQmxvY2tTY29wZWREZWNsYXJhdGlvblxuICApO1xufSBleHBvcnRzLmlzRGVjbGFyYXRpb24gPSBpc0RlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gaXNOb25Ub3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5GdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXG4gICk7XG59IGV4cG9ydHMuaXNOb25Ub3BMZXZlbERlY2xhcmF0aW9uID0gaXNOb25Ub3BMZXZlbERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gaXNUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5Ub3BMZXZlbERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLkltcG9ydERlY2xhcmF0aW9uXG4gICk7XG59IGV4cG9ydHMuaXNUb3BMZXZlbERlY2xhcmF0aW9uID0gaXNUb3BMZXZlbERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gaXNCbG9ja1Njb3BlZERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgLy8gVHJlYXQgdG9wLWxldmVsIGRlY2xhcmF0aW9ucyBhcyBibG9jayBzY29wZSBzaW5jZSB0aGUgZGlzdGluY3Rpb24gZG9lc24ndCBtYXR0ZXIgaGVyZS5cbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5Ub3BMZXZlbERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuQmxvY2tTY29wZWREZWNsYXJhdGlvbiB8fFxuICAgIHJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb24gfHxcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uXG4gICk7XG59IGV4cG9ydHMuaXNCbG9ja1Njb3BlZERlY2xhcmF0aW9uID0gaXNCbG9ja1Njb3BlZERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gaXNGdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uKHRva2VuKSB7XG4gIGNvbnN0IHJvbGUgPSB0b2tlbi5pZGVudGlmaWVyUm9sZTtcbiAgcmV0dXJuIChcbiAgICByb2xlID09PSBJZGVudGlmaWVyUm9sZS5GdW5jdGlvblNjb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgcm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvblxuICApO1xufSBleHBvcnRzLmlzRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbiA9IGlzRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbjtcblxuIGZ1bmN0aW9uIGlzT2JqZWN0U2hvcnRoYW5kRGVjbGFyYXRpb24odG9rZW4pIHtcbiAgcmV0dXJuIChcbiAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kVG9wTGV2ZWxEZWNsYXJhdGlvbiB8fFxuICAgIHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBJZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uIHx8XG4gICAgdG9rZW4uaWRlbnRpZmllclJvbGUgPT09IElkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZEZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb25cbiAgKTtcbn0gZXhwb3J0cy5pc09iamVjdFNob3J0aGFuZERlY2xhcmF0aW9uID0gaXNPYmplY3RTaG9ydGhhbmREZWNsYXJhdGlvbjtcblxuLy8gT2JqZWN0IHR5cGUgdXNlZCB0byByZXByZXNlbnQgdG9rZW5zLiBOb3RlIHRoYXQgbm9ybWFsbHksIHRva2Vuc1xuLy8gc2ltcGx5IGV4aXN0IGFzIHByb3BlcnRpZXMgb24gdGhlIHBhcnNlciBvYmplY3QuIFRoaXMgaXMgb25seVxuLy8gdXNlZCBmb3IgdGhlIG9uVG9rZW4gY2FsbGJhY2sgYW5kIHRoZSBleHRlcm5hbCB0b2tlbml6ZXIuXG4gY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnR5cGUgPSBfYmFzZS5zdGF0ZS50eXBlO1xuICAgIHRoaXMuY29udGV4dHVhbEtleXdvcmQgPSBfYmFzZS5zdGF0ZS5jb250ZXh0dWFsS2V5d29yZDtcbiAgICB0aGlzLnN0YXJ0ID0gX2Jhc2Uuc3RhdGUuc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBfYmFzZS5zdGF0ZS5lbmQ7XG4gICAgdGhpcy5zY29wZURlcHRoID0gX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aDtcbiAgICB0aGlzLmlzVHlwZSA9IF9iYXNlLnN0YXRlLmlzVHlwZTtcbiAgICB0aGlzLmlkZW50aWZpZXJSb2xlID0gbnVsbDtcbiAgICB0aGlzLmpzeFJvbGUgPSBudWxsO1xuICAgIHRoaXMuc2hhZG93c0dsb2JhbCA9IGZhbHNlO1xuICAgIHRoaXMuaXNBc3luY09wZXJhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29udGV4dElkID0gbnVsbDtcbiAgICB0aGlzLnJoc0VuZEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmlzRXhwcmVzc2lvbiA9IGZhbHNlO1xuICAgIHRoaXMubnVtTnVsbGlzaENvYWxlc2NlU3RhcnRzID0gMDtcbiAgICB0aGlzLm51bU51bGxpc2hDb2FsZXNjZUVuZHMgPSAwO1xuICAgIHRoaXMuaXNPcHRpb25hbENoYWluU3RhcnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzT3B0aW9uYWxDaGFpbkVuZCA9IGZhbHNlO1xuICAgIHRoaXMuc3Vic2NyaXB0U3RhcnRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5udWxsaXNoU3RhcnRJbmRleCA9IG51bGw7XG4gIH1cblxuICBcbiAgXG4gIFxuICBcbiAgXG4gIFxuICBcbiAgXG4gIC8vIEluaXRpYWxseSBmYWxzZSBmb3IgYWxsIHRva2VucywgdGhlbiBtYXkgYmUgY29tcHV0ZWQgaW4gYSBmb2xsb3ctdXAgc3RlcCB0aGF0IGRvZXMgc2NvcGVcbiAgLy8gYW5hbHlzaXMuXG4gIFxuICAvLyBJbml0aWFsbHkgZmFsc2UgZm9yIGFsbCB0b2tlbnMsIGJ1dCBtYXkgYmUgc2V0IGR1cmluZyB0cmFuc2Zvcm0gdG8gbWFyayBpdCBhcyBjb250YWluaW5nIGFuXG4gIC8vIGF3YWl0IG9wZXJhdGlvbi5cbiAgXG4gIFxuICAvLyBGb3IgYXNzaWdubWVudHMsIHRoZSBpbmRleCBvZiB0aGUgUkhTLiBGb3IgZXhwb3J0IHRva2VucywgdGhlIGVuZCBvZiB0aGUgZXhwb3J0LlxuICBcbiAgLy8gRm9yIGNsYXNzIHRva2VucywgcmVjb3JkcyBpZiB0aGUgY2xhc3MgaXMgYSBjbGFzcyBleHByZXNzaW9uIG9yIGEgY2xhc3Mgc3RhdGVtZW50LlxuICBcbiAgLy8gTnVtYmVyIG9mIHRpbWVzIHRvIGluc2VydCBhIGBudWxsaXNoQ29hbGVzY2UoYCBzbmlwcGV0IGJlZm9yZSB0aGlzIHRva2VuLlxuICBcbiAgLy8gTnVtYmVyIG9mIHRpbWVzIHRvIGluc2VydCBhIGApYCBzbmlwcGV0IGFmdGVyIHRoaXMgdG9rZW4uXG4gIFxuICAvLyBJZiB0cnVlLCBpbnNlcnQgYW4gYG9wdGlvbmFsQ2hhaW4oW2Agc25pcHBldCBiZWZvcmUgdGhpcyB0b2tlbi5cbiAgXG4gIC8vIElmIHRydWUsIGluc2VydCBhIGBdKWAgc25pcHBldCBhZnRlciB0aGlzIHRva2VuLlxuICBcbiAgLy8gVGFnIGZvciBgLmAsIGA/LmAsIGBbYCwgYD8uW2AsIGAoYCwgYW5kIGA/LihgIHRvIGRlbm90ZSB0aGUgXCJyb290XCIgdG9rZW4gZm9yIHRoaXNcbiAgLy8gc3Vic2NyaXB0IGNoYWluLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYWluIGlzIGFuIG9wdGlvbmFsIGNoYWluLlxuICBcbiAgLy8gVGFnIGZvciBgPz9gIG9wZXJhdG9ycyB0byBkZW5vdGUgdGhlIHJvb3QgdG9rZW4gZm9yIHRoaXMgbnVsbGlzaCBjb2FsZXNjaW5nIGNhbGwuXG4gIFxufSBleHBvcnRzLlRva2VuID0gVG9rZW47XG5cbi8vICMjIFRva2VuaXplclxuXG4vLyBNb3ZlIHRvIHRoZSBuZXh0IHRva2VuXG4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zLnB1c2gobmV3IFRva2VuKCkpO1xuICBuZXh0VG9rZW4oKTtcbn0gZXhwb3J0cy5uZXh0ID0gbmV4dDtcblxuLy8gQ2FsbCBpbnN0ZWFkIG9mIG5leHQgd2hlbiBpbnNpZGUgYSB0ZW1wbGF0ZSwgc2luY2UgdGhhdCBuZWVkcyB0byBiZSBoYW5kbGVkIGRpZmZlcmVudGx5LlxuIGZ1bmN0aW9uIG5leHRUZW1wbGF0ZVRva2VuKCkge1xuICBfYmFzZS5zdGF0ZS50b2tlbnMucHVzaChuZXcgVG9rZW4oKSk7XG4gIF9iYXNlLnN0YXRlLnN0YXJ0ID0gX2Jhc2Uuc3RhdGUucG9zO1xuICByZWFkVG1wbFRva2VuKCk7XG59IGV4cG9ydHMubmV4dFRlbXBsYXRlVG9rZW4gPSBuZXh0VGVtcGxhdGVUb2tlbjtcblxuLy8gVGhlIHRva2VuaXplciBuZXZlciBwYXJzZXMgcmVnZXhlcyBieSBkZWZhdWx0LiBJbnN0ZWFkLCB0aGUgcGFyc2VyIGlzIHJlc3BvbnNpYmxlIGZvclxuLy8gaW5zdHJ1Y3RpbmcgaXQgdG8gcGFyc2UgYSByZWdleCB3aGVuIHdlIHNlZSBhIHNsYXNoIGF0IHRoZSBzdGFydCBvZiBhbiBleHByZXNzaW9uLlxuIGZ1bmN0aW9uIHJldG9rZW5pemVTbGFzaEFzUmVnZXgoKSB7XG4gIGlmIChfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbikge1xuICAgIC0tX2Jhc2Uuc3RhdGUucG9zO1xuICB9XG4gIHJlYWRSZWdleHAoKTtcbn0gZXhwb3J0cy5yZXRva2VuaXplU2xhc2hBc1JlZ2V4ID0gcmV0b2tlbml6ZVNsYXNoQXNSZWdleDtcblxuIGZ1bmN0aW9uIHB1c2hUeXBlQ29udGV4dChleGlzdGluZ1Rva2Vuc0luVHlwZSkge1xuICBmb3IgKGxldCBpID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIGV4aXN0aW5nVG9rZW5zSW5UeXBlOyBpIDwgX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLmlzVHlwZSA9IHRydWU7XG4gIH1cbiAgY29uc3Qgb2xkSXNUeXBlID0gX2Jhc2Uuc3RhdGUuaXNUeXBlO1xuICBfYmFzZS5zdGF0ZS5pc1R5cGUgPSB0cnVlO1xuICByZXR1cm4gb2xkSXNUeXBlO1xufSBleHBvcnRzLnB1c2hUeXBlQ29udGV4dCA9IHB1c2hUeXBlQ29udGV4dDtcblxuIGZ1bmN0aW9uIHBvcFR5cGVDb250ZXh0KG9sZElzVHlwZSkge1xuICBfYmFzZS5zdGF0ZS5pc1R5cGUgPSBvbGRJc1R5cGU7XG59IGV4cG9ydHMucG9wVHlwZUNvbnRleHQgPSBwb3BUeXBlQ29udGV4dDtcblxuIGZ1bmN0aW9uIGVhdCh0eXBlKSB7XG4gIGlmIChtYXRjaCh0eXBlKSkge1xuICAgIG5leHQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0gZXhwb3J0cy5lYXQgPSBlYXQ7XG5cbiBmdW5jdGlvbiBlYXRUeXBlVG9rZW4odG9rZW5UeXBlKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9iYXNlLnN0YXRlLmlzVHlwZTtcbiAgX2Jhc2Uuc3RhdGUuaXNUeXBlID0gdHJ1ZTtcbiAgZWF0KHRva2VuVHlwZSk7XG4gIF9iYXNlLnN0YXRlLmlzVHlwZSA9IG9sZElzVHlwZTtcbn0gZXhwb3J0cy5lYXRUeXBlVG9rZW4gPSBlYXRUeXBlVG9rZW47XG5cbiBmdW5jdGlvbiBtYXRjaCh0eXBlKSB7XG4gIHJldHVybiBfYmFzZS5zdGF0ZS50eXBlID09PSB0eXBlO1xufSBleHBvcnRzLm1hdGNoID0gbWF0Y2g7XG5cbiBmdW5jdGlvbiBsb29rYWhlYWRUeXBlKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gIG5leHQoKTtcbiAgY29uc3QgdHlwZSA9IF9iYXNlLnN0YXRlLnR5cGU7XG4gIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gdHlwZTtcbn0gZXhwb3J0cy5sb29rYWhlYWRUeXBlID0gbG9va2FoZWFkVHlwZTtcblxuIGNsYXNzIFR5cGVBbmRLZXl3b3JkIHtcbiAgXG4gIFxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZXh0dWFsS2V5d29yZCA9IGNvbnRleHR1YWxLZXl3b3JkO1xuICB9XG59IGV4cG9ydHMuVHlwZUFuZEtleXdvcmQgPSBUeXBlQW5kS2V5d29yZDtcblxuIGZ1bmN0aW9uIGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gIG5leHQoKTtcbiAgY29uc3QgdHlwZSA9IF9iYXNlLnN0YXRlLnR5cGU7XG4gIGNvbnN0IGNvbnRleHR1YWxLZXl3b3JkID0gX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQ7XG4gIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gbmV3IFR5cGVBbmRLZXl3b3JkKHR5cGUsIGNvbnRleHR1YWxLZXl3b3JkKTtcbn0gZXhwb3J0cy5sb29rYWhlYWRUeXBlQW5kS2V5d29yZCA9IGxvb2thaGVhZFR5cGVBbmRLZXl3b3JkO1xuXG4gZnVuY3Rpb24gbmV4dFRva2VuU3RhcnQoKSB7XG4gIHJldHVybiBuZXh0VG9rZW5TdGFydFNpbmNlKF9iYXNlLnN0YXRlLnBvcyk7XG59IGV4cG9ydHMubmV4dFRva2VuU3RhcnQgPSBuZXh0VG9rZW5TdGFydDtcblxuIGZ1bmN0aW9uIG5leHRUb2tlblN0YXJ0U2luY2UocG9zKSB7XG4gIF93aGl0ZXNwYWNlLnNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHBvcztcbiAgY29uc3Qgc2tpcCA9IF93aGl0ZXNwYWNlLnNraXBXaGl0ZVNwYWNlLmV4ZWMoX2Jhc2UuaW5wdXQpO1xuICByZXR1cm4gcG9zICsgc2tpcFswXS5sZW5ndGg7XG59IGV4cG9ydHMubmV4dFRva2VuU3RhcnRTaW5jZSA9IG5leHRUb2tlblN0YXJ0U2luY2U7XG5cbiBmdW5jdGlvbiBsb29rYWhlYWRDaGFyQ29kZSgpIHtcbiAgcmV0dXJuIF9iYXNlLmlucHV0LmNoYXJDb2RlQXQobmV4dFRva2VuU3RhcnQoKSk7XG59IGV4cG9ydHMubG9va2FoZWFkQ2hhckNvZGUgPSBsb29rYWhlYWRDaGFyQ29kZTtcblxuLy8gUmVhZCBhIHNpbmdsZSB0b2tlbiwgdXBkYXRpbmcgdGhlIHBhcnNlciBvYmplY3QncyB0b2tlbi1yZWxhdGVkXG4vLyBwcm9wZXJ0aWVzLlxuIGZ1bmN0aW9uIG5leHRUb2tlbigpIHtcbiAgc2tpcFNwYWNlKCk7XG4gIF9iYXNlLnN0YXRlLnN0YXJ0ID0gX2Jhc2Uuc3RhdGUucG9zO1xuICBpZiAoX2Jhc2Uuc3RhdGUucG9zID49IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgIGNvbnN0IHRva2VucyA9IF9iYXNlLnN0YXRlLnRva2VucztcbiAgICAvLyBXZSBub3JtYWxseSBydW4gcGFzdCB0aGUgZW5kIGEgYml0LCBidXQgaWYgd2UncmUgd2F5IHBhc3QgdGhlIGVuZCwgYXZvaWQgYW4gaW5maW5pdGUgbG9vcC5cbiAgICAvLyBBbHNvIGNoZWNrIHRoZSB0b2tlbiBwb3NpdGlvbnMgcmF0aGVyIHRoYW4gdGhlIHR5cGVzIHNpbmNlIHNvbWV0aW1lcyB3ZSByZXdyaXRlIHRoZSB0b2tlblxuICAgIC8vIHR5cGUgdG8gc29tZXRoaW5nIGVsc2UuXG4gICAgaWYgKFxuICAgICAgdG9rZW5zLmxlbmd0aCA+PSAyICYmXG4gICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnN0YXJ0ID49IF9iYXNlLmlucHV0Lmxlbmd0aCAmJlxuICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXS5zdGFydCA+PSBfYmFzZS5pbnB1dC5sZW5ndGhcbiAgICApIHtcbiAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIFwiVW5leHBlY3RlZGx5IHJlYWNoZWQgdGhlIGVuZCBvZiBpbnB1dC5cIik7XG4gICAgfVxuICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuZW9mKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVhZFRva2VuKF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKSk7XG59IGV4cG9ydHMubmV4dFRva2VuID0gbmV4dFRva2VuO1xuXG5mdW5jdGlvbiByZWFkVG9rZW4oY29kZSkge1xuICAvLyBJZGVudGlmaWVyIG9yIGtleXdvcmQuICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaW5cbiAgLy8gaWRlbnRpZmllcnMsIHNvICdcXCcgYWxzbyBkaXNwYXRjaGVzIHRvIHRoYXQuXG4gIGlmIChcbiAgICBfaWRlbnRpZmllci5JU19JREVOVElGSUVSX1NUQVJUW2NvZGVdIHx8XG4gICAgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYmFja3NsYXNoIHx8XG4gICAgKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmF0U2lnbiAmJiBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hdFNpZ24pXG4gICkge1xuICAgIF9yZWFkV29yZDIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBnZXRUb2tlbkZyb21Db2RlKGNvZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNraXBCbG9ja0NvbW1lbnQoKSB7XG4gIHdoaWxlIChcbiAgICBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcykgIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmFzdGVyaXNrIHx8XG4gICAgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKSAhPT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuc2xhc2hcbiAgKSB7XG4gICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA+IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbnRlcm1pbmF0ZWQgY29tbWVudFwiLCBfYmFzZS5zdGF0ZS5wb3MgLSAyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7XG59XG5cbiBmdW5jdGlvbiBza2lwTGluZUNvbW1lbnQoc3RhcnRTa2lwKSB7XG4gIGxldCBjaCA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoKF9iYXNlLnN0YXRlLnBvcyArPSBzdGFydFNraXApKTtcbiAgaWYgKF9iYXNlLnN0YXRlLnBvcyA8IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgIHdoaWxlIChcbiAgICAgIGNoICE9PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5saW5lRmVlZCAmJlxuICAgICAgY2ggIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmNhcnJpYWdlUmV0dXJuICYmXG4gICAgICBjaCAhPT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGluZVNlcGFyYXRvciAmJlxuICAgICAgY2ggIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnBhcmFncmFwaFNlcGFyYXRvciAmJlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3MgPCBfYmFzZS5pbnB1dC5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNoID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICAgIH1cbiAgfVxufSBleHBvcnRzLnNraXBMaW5lQ29tbWVudCA9IHNraXBMaW5lQ29tbWVudDtcblxuLy8gQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgcGFyc2UgYW5kIGFmdGVyIGV2ZXJ5IHRva2VuLiBTa2lwc1xuLy8gd2hpdGVzcGFjZSBhbmQgY29tbWVudHMuXG4gZnVuY3Rpb24gc2tpcFNwYWNlKCkge1xuICB3aGlsZSAoX2Jhc2Uuc3RhdGUucG9zIDwgX2Jhc2UuaW5wdXQubGVuZ3RoKSB7XG4gICAgY29uc3QgY2ggPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyk7XG4gICAgc3dpdGNoIChjaCkge1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5jYXJyaWFnZVJldHVybjpcbiAgICAgICAgaWYgKF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5saW5lRmVlZDpcbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGluZVNlcGFyYXRvcjpcbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMucGFyYWdyYXBoU2VwYXJhdG9yOlxuICAgICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuc2xhc2g6XG4gICAgICAgIHN3aXRjaCAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKSkge1xuICAgICAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYXN0ZXJpc2s6XG4gICAgICAgICAgICBfYmFzZS5zdGF0ZS5wb3MgKz0gMjtcbiAgICAgICAgICAgIHNraXBCbG9ja0NvbW1lbnQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5zbGFzaDpcbiAgICAgICAgICAgIHNraXBMaW5lQ29tbWVudCgyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKF93aGl0ZXNwYWNlLklTX1dISVRFU1BBQ0VbY2hdKSB7XG4gICAgICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICB9XG59IGV4cG9ydHMuc2tpcFNwYWNlID0gc2tpcFNwYWNlO1xuXG4vLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSB0b2tlbi4gU2V0cyB2YXJpb3VzIGZpZWxkcywgYW5kIHNraXBzIHRoZSBzcGFjZSBhZnRlciB0aGUgdG9rZW4sIHNvXG4vLyB0aGF0IHRoZSBuZXh0IG9uZSdzIGBzdGFydGAgd2lsbCBwb2ludCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXG4gZnVuY3Rpb24gZmluaXNoVG9rZW4oXG4gIHR5cGUsXG4gIGNvbnRleHR1YWxLZXl3b3JkID0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLk5PTkUsXG4pIHtcbiAgX2Jhc2Uuc3RhdGUuZW5kID0gX2Jhc2Uuc3RhdGUucG9zO1xuICBfYmFzZS5zdGF0ZS50eXBlID0gdHlwZTtcbiAgX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPSBjb250ZXh0dWFsS2V5d29yZDtcbn0gZXhwb3J0cy5maW5pc2hUb2tlbiA9IGZpbmlzaFRva2VuO1xuXG4vLyAjIyMgVG9rZW4gcmVhZGluZ1xuXG4vLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBmZXRjaCB0aGUgbmV4dCB0b2tlbi4gSXRcbi8vIGlzIHNvbWV3aGF0IG9ic2N1cmUsIGJlY2F1c2UgaXQgd29ya3MgaW4gY2hhcmFjdGVyIGNvZGVzIHJhdGhlclxuLy8gdGhhbiBjaGFyYWN0ZXJzLCBhbmQgYmVjYXVzZSBvcGVyYXRvciBwYXJzaW5nIGhhcyBiZWVuIGlubGluZWRcbi8vIGludG8gaXQuXG4vL1xuLy8gQWxsIGluIHRoZSBuYW1lIG9mIHNwZWVkLlxuZnVuY3Rpb24gcmVhZFRva2VuX2RvdCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQwICYmIG5leHRDaGFyIDw9IF9jaGFyY29kZXMuY2hhckNvZGVzLmRpZ2l0OSkge1xuICAgIHJlYWROdW1iZXIodHJ1ZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb3QgJiYgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZG90KSB7XG4gICAgX2Jhc2Uuc3RhdGUucG9zICs9IDM7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcyk7XG4gIH0gZWxzZSB7XG4gICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5kb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9zbGFzaCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5hc3NpZ24sIDIpO1xuICB9IGVsc2Uge1xuICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuc2xhc2gsIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9tdWx0X21vZHVsbyhjb2RlKSB7XG4gIC8vICclKidcbiAgbGV0IHRva2VuVHlwZSA9IGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmFzdGVyaXNrID8gX3R5cGVzLlRva2VuVHlwZS5zdGFyIDogX3R5cGVzLlRva2VuVHlwZS5tb2R1bG87XG4gIGxldCB3aWR0aCA9IDE7XG4gIGxldCBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSk7XG5cbiAgLy8gRXhwb25lbnRpYXRpb24gb3BlcmF0b3IgKipcbiAgaWYgKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmFzdGVyaXNrICYmIG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hc3Rlcmlzaykge1xuICAgIHdpZHRoKys7XG4gICAgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDIpO1xuICAgIHRva2VuVHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuZXhwb25lbnQ7XG4gIH1cblxuICAvLyBNYXRjaCAqPSBvciAlPSwgZGlzYWxsb3dpbmcgKj0+IHdoaWNoIGNhbiBiZSB2YWxpZCBpbiBmbG93LlxuICBpZiAoXG4gICAgbmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvICYmXG4gICAgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSAhPT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZ3JlYXRlclRoYW5cbiAgKSB7XG4gICAgd2lkdGgrKztcbiAgICB0b2tlblR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbjtcbiAgfVxuXG4gIGZpbmlzaE9wKHRva2VuVHlwZSwgd2lkdGgpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcGlwZV9hbXAoY29kZSkge1xuICAvLyAnfCYnXG4gIGNvbnN0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKTtcblxuICBpZiAobmV4dENoYXIgPT09IGNvZGUpIHtcbiAgICBpZiAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICAgIC8vIHx8PSBvciAmJj1cbiAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYXNzaWduLCAzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gfHwgb3IgJiZcbiAgICAgIGZpbmlzaE9wKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnZlcnRpY2FsQmFyID8gX3R5cGVzLlRva2VuVHlwZS5sb2dpY2FsT1IgOiBfdHlwZXMuVG9rZW5UeXBlLmxvZ2ljYWxBTkQsIDIpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudmVydGljYWxCYXIpIHtcbiAgICAvLyAnfD4nXG4gICAgaWYgKG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5ncmVhdGVyVGhhbikge1xuICAgICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5waXBlbGluZSwgMik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMucmlnaHRDdXJseUJyYWNlICYmIF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICAgIC8vICd8fSdcbiAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VCYXJSLCAyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5hc3NpZ24sIDIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpbmlzaE9wKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnZlcnRpY2FsQmFyID8gX3R5cGVzLlRva2VuVHlwZS5iaXR3aXNlT1IgOiBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VBTkQsIDEpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fY2FyZXQoKSB7XG4gIC8vICdeJ1xuICBjb25zdCBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSk7XG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbiwgMik7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5iaXR3aXNlWE9SLCAxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcGx1c19taW4oY29kZSkge1xuICAvLyAnKy0nXG4gIGNvbnN0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKTtcblxuICBpZiAobmV4dENoYXIgPT09IGNvZGUpIHtcbiAgICAvLyBUZW50YXRpdmVseSBjYWxsIHRoaXMgYSBwcmVmaXggb3BlcmF0b3IsIGJ1dCBpdCBtaWdodCBiZSBjaGFuZ2VkIHRvIHBvc3RmaXggbGF0ZXIuXG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5wcmVJbmNEZWMsIDIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbiwgMik7XG4gIH0gZWxzZSBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMucGx1c1NpZ24pIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLnBsdXMsIDEpO1xuICB9IGVsc2Uge1xuICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUubWludXMsIDEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbl9sdCgpIHtcbiAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVzc1RoYW4pIHtcbiAgICBpZiAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYXNzaWduLCAzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gV2Ugc2VlIDw8LCBidXQgbmVlZCB0byBiZSByZWFsbHkgY2FyZWZ1bCBhYm91dCB3aGV0aGVyIHRvIHRyZWF0IGl0IGFzIGFcbiAgICAvLyB0cnVlIGxlZnQtc2hpZnQgb3IgYXMgdHdvIDwgdG9rZW5zLlxuICAgIGlmIChfYmFzZS5zdGF0ZS5pc1R5cGUpIHtcbiAgICAgIC8vIFdpdGhpbiBhIHR5cGUsIDw8IG1pZ2h0IGNvbWUgdXAgaW4gYSBzbmlwcGV0IGxpa2UgYEFycmF5PDxUPigpID0+IHZvaWQ+YCxcbiAgICAgIC8vIHNvIHRyZWF0IGl0IGFzIHR3byA8IHRva2Vucy4gSW1wb3J0YW50bHksIHRoaXMgc2hvdWxkIG9ubHkgb3ZlcnJpZGUgPDxcbiAgICAgIC8vIHJhdGhlciB0aGFuIG90aGVyIHRva2VucyBsaWtlIDw9IC4gSWYgd2UgdHJlYXRlZCA8PSBhcyA8IGluIGEgdHlwZVxuICAgICAgLy8gY29udGV4dCwgdGhlbiB0aGUgc25pcHBldCBgYSBhcyBUIDw9IDFgIHdvdWxkIGluY29ycmVjdGx5IHN0YXJ0IHBhcnNpbmdcbiAgICAgIC8vIGEgdHlwZSBhcmd1bWVudCBvbiBULiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGBhIGFzIFQgPDwgMWBcbiAgICAgIC8vIGJlY2F1c2UgVHlwZVNjcmlwdCBkaXNhbGxvd3MgdGhhdCBzeW50YXguXG4gICAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3V0c2lkZSBhIHR5cGUsIHRoaXMgbWlnaHQgYmUgYSB0cnVlIGxlZnQtc2hpZnQgb3BlcmF0b3IsIG9yIGl0IG1pZ2h0XG4gICAgICAvLyBzdGlsbCBiZSB0d28gb3Blbi10eXBlLWFyZyB0b2tlbnMsIHN1Y2ggYXMgaW4gYGY8PFQ+KCkgPT4gdm9pZD4oKWAuIFdlXG4gICAgICAvLyBsb29rIGF0IHRoZSB0b2tlbiB3aGlsZSBjb25zaWRlcmluZyB0aGUgYGZgLCBzbyB3ZSBkb24ndCB5ZXQga25vdyB0aGF0XG4gICAgICAvLyB3ZSdyZSBpbiBhIHR5cGUgY29udGV4dC4gSW4gdGhpcyBjYXNlLCB3ZSBpbml0aWFsbHkgdG9rZW5pemUgYXMgYVxuICAgICAgLy8gbGVmdC1zaGlmdCBhbmQgY29ycmVjdCBhZnRlci10aGUtZmFjdCBhcyBuZWNlc3NhcnkgaW5cbiAgICAgIC8vIHRzUGFyc2VUeXBlQXJndW1lbnRzV2l0aFBvc3NpYmxlQml0c2hpZnQgLlxuICAgICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5iaXRTaGlmdEwsIDIpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgLy8gPD1cbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLnJlbGF0aW9uYWxPckVxdWFsLCAyKTtcbiAgfSBlbHNlIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuLCAxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fZ3QoKSB7XG4gIGlmIChfYmFzZS5zdGF0ZS5pc1R5cGUpIHtcbiAgICAvLyBBdm9pZCByaWdodC1zaGlmdCBmb3IgdGhpbmdzIGxpa2UgYEFycmF5PEFycmF5PHN0cmluZz4+YCBhbmRcbiAgICAvLyBncmVhdGVyLXRoYW4tb3ItZXF1YWwgZm9yIHRoaW5ncyBsaWtlIGBjb25zdCBhOiBBcnJheTxudW1iZXI+PVtdO2AuXG4gICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbiwgMSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZ3JlYXRlclRoYW4pIHtcbiAgICBjb25zdCBzaXplID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAyKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZ3JlYXRlclRoYW4gPyAzIDogMjtcbiAgICBpZiAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyBzaXplKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8pIHtcbiAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYXNzaWduLCBzaXplICsgMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuYml0U2hpZnRSLCBzaXplKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgLy8gPj1cbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLnJlbGF0aW9uYWxPckVxdWFsLCAyKTtcbiAgfSBlbHNlIHtcbiAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuLCAxKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlaW50ZXJwcmV0IGEgcG9zc2libGUgPiB0b2tlbiB3aGVuIHRyYW5zaXRpb25pbmcgZnJvbSBhIHR5cGUgdG8gYSBub24tdHlwZVxuICogY29udGV4dC5cbiAqXG4gKiBUaGlzIGNvbWVzIHVwIGluIHR3byBzaXR1YXRpb25zIHdoZXJlID49IG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXMgb25lIHRva2VuOlxuICogLSBBZnRlciBhbiBgYXNgIGV4cHJlc3Npb24sIGxpa2UgaW4gdGhlIGNvZGUgYGEgYXMgVCA+PSAxYC5cbiAqIC0gSW4gYSB0eXBlIGFyZ3VtZW50IGluIGFuIGV4cHJlc3Npb24gY29udGV4dCwgZS5nLiBgZihhIDwgYiwgYyA+PSBkKWAsIHdlXG4gKiAgIG5lZWQgdG8gc2VlIHRoZSB0b2tlbiBhcyA+PSBzbyB0aGF0IHdlIGdldCBhbiBlcnJvciBhbmQgYmFja3RyYWNrIHRvXG4gKiAgIG5vcm1hbCBleHByZXNzaW9uIHBhcnNpbmcuXG4gKlxuICogT3RoZXIgc2l0dWF0aW9ucyByZXF1aXJlID49IHRvIGJlIHNlZW4gYXMgdHdvIHRva2VucywgZS5nLlxuICogYGNvbnN0IHg6IEFycmF5PFQ+PVtdO2AsIHNvIGl0J3MgaW1wb3J0YW50IHRvIHRyZWF0ID4gYXMgaXRzIG93biB0b2tlbiBpblxuICogdHlwaWNhbCB0eXBlIHBhcnNpbmcgc2l0dWF0aW9ucy5cbiAqL1xuIGZ1bmN0aW9uIHJlc2Nhbl9ndCgpIHtcbiAgaWYgKF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pIHtcbiAgICBfYmFzZS5zdGF0ZS5wb3MgLT0gMTtcbiAgICByZWFkVG9rZW5fZ3QoKTtcbiAgfVxufSBleHBvcnRzLnJlc2Nhbl9ndCA9IHJlc2Nhbl9ndDtcblxuZnVuY3Rpb24gcmVhZFRva2VuX2VxX2V4Y2woY29kZSkge1xuICAvLyAnPSEnXG4gIGNvbnN0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKTtcbiAgaWYgKG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5lcXVhbHNUbykge1xuICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuZXF1YWxpdHksIF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMikgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvID8gMyA6IDIpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG8gJiYgbmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmdyZWF0ZXJUaGFuKSB7XG4gICAgLy8gJz0+J1xuICAgIF9iYXNlLnN0YXRlLnBvcyArPSAyO1xuICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpO1xuICAgIHJldHVybjtcbiAgfVxuICBmaW5pc2hPcChjb2RlID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5lcXVhbHNUbyA/IF90eXBlcy5Ub2tlblR5cGUuZXEgOiBfdHlwZXMuVG9rZW5UeXBlLmJhbmcsIDEpO1xufVxuXG5mdW5jdGlvbiByZWFkVG9rZW5fcXVlc3Rpb24oKSB7XG4gIC8vICc/J1xuICBjb25zdCBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSk7XG4gIGNvbnN0IG5leHRDaGFyMiA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMik7XG4gIGlmIChcbiAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMucXVlc3Rpb25NYXJrICYmXG4gICAgLy8gSW4gRmxvdyAoYnV0IG5vdCBUeXBlU2NyaXB0KSwgPz9zdHJpbmcgaXMgYSB2YWxpZCB0eXBlIHRoYXQgc2hvdWxkIGJlXG4gICAgLy8gdG9rZW5pemVkIGFzIHR3byBpbmRpdmlkdWFsID8gdG9rZW5zLlxuICAgICEoX2Jhc2UuaXNGbG93RW5hYmxlZCAmJiBfYmFzZS5zdGF0ZS5pc1R5cGUpXG4gICkge1xuICAgIGlmIChuZXh0Q2hhcjIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmVxdWFsc1RvKSB7XG4gICAgICAvLyAnPz89J1xuICAgICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5hc3NpZ24sIDMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAnPz8nXG4gICAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLm51bGxpc2hDb2FsZXNjaW5nLCAyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgbmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmRvdCAmJlxuICAgICEobmV4dENoYXIyID49IF9jaGFyY29kZXMuY2hhckNvZGVzLmRpZ2l0MCAmJiBuZXh0Q2hhcjIgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQ5KVxuICApIHtcbiAgICAvLyAnLicgbm90IGZvbGxvd2VkIGJ5IGEgbnVtYmVyXG4gICAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbkRvdCk7XG4gIH0gZWxzZSB7XG4gICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbik7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIGdldFRva2VuRnJvbUNvZGUoY29kZSkge1xuICBzd2l0Y2ggKGNvZGUpIHtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLm51bWJlclNpZ246XG4gICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuaGFzaCk7XG4gICAgICByZXR1cm47XG5cbiAgICAvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgYSBkb3QgZGVwZW5kcyBvbiB3aGV0aGVyIGl0IGlzIGZvbGxvd2VkXG4gICAgLy8gYnkgYSBkaWdpdCBvciBhbm90aGVyIHR3byBkb3RzLlxuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb3Q6XG4gICAgICByZWFkVG9rZW5fZG90KCk7XG4gICAgICByZXR1cm47XG5cbiAgICAvLyBQdW5jdHVhdGlvbiB0b2tlbnMuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZWZ0UGFyZW50aGVzaXM6XG4gICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnJpZ2h0UGFyZW50aGVzaXM6XG4gICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnNlbWljb2xvbjpcbiAgICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5zZW1pKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmNvbW1hOlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmxlZnRTcXVhcmVCcmFja2V0OlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnJpZ2h0U3F1YXJlQnJhY2tldDpcbiAgICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlOlxuICAgICAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQgJiYgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MgKyAxKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudmVydGljYWxCYXIpIHtcbiAgICAgICAgZmluaXNoT3AoX3R5cGVzLlRva2VuVHlwZS5icmFjZUJhckwsIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMucmlnaHRDdXJseUJyYWNlOlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmNvbG9uOlxuICAgICAgaWYgKF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmNvbG9uKSB7XG4gICAgICAgIGZpbmlzaE9wKF90eXBlcy5Ub2tlblR5cGUuZG91YmxlQ29sb24sIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuY29sb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5xdWVzdGlvbk1hcms6XG4gICAgICByZWFkVG9rZW5fcXVlc3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmF0U2lnbjpcbiAgICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5hdCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmdyYXZlQWNjZW50OlxuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJhY2tRdW90ZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmRpZ2l0MDoge1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyArIDEpO1xuICAgICAgLy8gJzB4JywgJzBYJywgJzBvJywgJzBPJywgJzBiJywgJzBCJ1xuICAgICAgaWYgKFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlWCB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlWCB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlTyB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlTyB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlQiB8fFxuICAgICAgICBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlQlxuICAgICAgKSB7XG4gICAgICAgIHJlYWRSYWRpeE51bWJlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFueXRoaW5nIGVsc2UgYmVnaW5uaW5nIHdpdGggYSBkaWdpdCBpcyBhbiBpbnRlZ2VyLCBvY3RhbFxuICAgIC8vIG51bWJlciwgb3IgZmxvYXQuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDE6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDI6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDM6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDQ6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDU6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDY6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDc6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDg6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDk6XG4gICAgICByZWFkTnVtYmVyKGZhbHNlKTtcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFF1b3RlcyBwcm9kdWNlIHN0cmluZ3MuXG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5xdW90YXRpb25NYXJrOlxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYXBvc3Ryb3BoZTpcbiAgICAgIHJlYWRTdHJpbmcoY29kZSk7XG4gICAgICByZXR1cm47XG5cbiAgICAvLyBPcGVyYXRvcnMgYXJlIHBhcnNlZCBpbmxpbmUgaW4gdGlueSBzdGF0ZSBtYWNoaW5lcy4gJz0nIChjaGFyQ29kZXMuZXF1YWxzVG8pIGlzXG4gICAgLy8gb2Z0ZW4gcmVmZXJyZWQgdG8uIGBmaW5pc2hPcGAgc2ltcGx5IHNraXBzIHRoZSBhbW91bnQgb2ZcbiAgICAvLyBjaGFyYWN0ZXJzIGl0IGlzIGdpdmVuIGFzIHNlY29uZCBhcmd1bWVudCwgYW5kIHJldHVybnMgYSB0b2tlblxuICAgIC8vIG9mIHRoZSB0eXBlIGdpdmVuIGJ5IGl0cyBmaXJzdCBhcmd1bWVudC5cblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuc2xhc2g6XG4gICAgICByZWFkVG9rZW5fc2xhc2goKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMucGVyY2VudFNpZ246XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hc3RlcmlzazpcbiAgICAgIHJlYWRUb2tlbl9tdWx0X21vZHVsbyhjb2RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMudmVydGljYWxCYXI6XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5hbXBlcnNhbmQ6XG4gICAgICByZWFkVG9rZW5fcGlwZV9hbXAoY29kZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLmNhcmV0OlxuICAgICAgcmVhZFRva2VuX2NhcmV0KCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnBsdXNTaWduOlxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGFzaDpcbiAgICAgIHJlYWRUb2tlbl9wbHVzX21pbihjb2RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVzc1RoYW46XG4gICAgICByZWFkVG9rZW5fbHQoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZ3JlYXRlclRoYW46XG4gICAgICByZWFkVG9rZW5fZ3QoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG86XG4gICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5leGNsYW1hdGlvbk1hcms6XG4gICAgICByZWFkVG9rZW5fZXFfZXhjbChjb2RlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMudGlsZGU6XG4gICAgICBmaW5pc2hPcChfdHlwZXMuVG9rZW5UeXBlLnRpbGRlLCAxKTtcbiAgICAgIHJldHVybjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIGBVbmV4cGVjdGVkIGNoYXJhY3RlciAnJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpfSdgLCBfYmFzZS5zdGF0ZS5wb3MpO1xufSBleHBvcnRzLmdldFRva2VuRnJvbUNvZGUgPSBnZXRUb2tlbkZyb21Db2RlO1xuXG5mdW5jdGlvbiBmaW5pc2hPcCh0eXBlLCBzaXplKSB7XG4gIF9iYXNlLnN0YXRlLnBvcyArPSBzaXplO1xuICBmaW5pc2hUb2tlbih0eXBlKTtcbn1cblxuZnVuY3Rpb24gcmVhZFJlZ2V4cCgpIHtcbiAgY29uc3Qgc3RhcnQgPSBfYmFzZS5zdGF0ZS5wb3M7XG4gIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gIGxldCBpbkNsYXNzID0gZmFsc2U7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoX2Jhc2Uuc3RhdGUucG9zID49IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbnRlcm1pbmF0ZWQgcmVndWxhciBleHByZXNzaW9uXCIsIHN0YXJ0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29kZSA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVmdFNxdWFyZUJyYWNrZXQpIHtcbiAgICAgICAgaW5DbGFzcyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnJpZ2h0U3F1YXJlQnJhY2tldCAmJiBpbkNsYXNzKSB7XG4gICAgICAgIGluQ2xhc3MgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuc2xhc2ggJiYgIWluQ2xhc3MpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlc2NhcGVkID0gY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYmFja3NsYXNoO1xuICAgIH1cbiAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgfVxuICArK19iYXNlLnN0YXRlLnBvcztcbiAgLy8gTmVlZCB0byB1c2UgYHNraXBXb3JkYCBiZWNhdXNlICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaGVyZSAoZG9uJ3QgYXNrKS5cbiAgc2tpcFdvcmQoKTtcblxuICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnJlZ2V4cCk7XG59XG5cbi8qKlxuICogUmVhZCBhIGRlY2ltYWwgaW50ZWdlci4gTm90ZSB0aGF0IHRoaXMgY2FuJ3QgYmUgdW5pZmllZCB3aXRoIHRoZSBzaW1pbGFyIGNvZGVcbiAqIGluIHJlYWRSYWRpeE51bWJlciAod2hpY2ggYWxzbyBoYW5kbGVzIGhleCBkaWdpdHMpIGJlY2F1c2UgXCJlXCIgbmVlZHMgdG8gYmVcbiAqIHRoZSBlbmQgb2YgdGhlIGludGVnZXIgc28gdGhhdCB3ZSBjYW4gcHJvcGVybHkgaGFuZGxlIHNjaWVudGlmaWMgbm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlYWRJbnQoKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgY29kZSA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgICBpZiAoKGNvZGUgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQwICYmIGNvZGUgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQ5KSB8fCBjb2RlID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy51bmRlcnNjb3JlKSB7XG4gICAgICBfYmFzZS5zdGF0ZS5wb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRSYWRpeE51bWJlcigpIHtcbiAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7IC8vIDB4XG5cbiAgLy8gV2FsayB0byB0aGUgZW5kIG9mIHRoZSBudW1iZXIsIGFsbG93aW5nIGhleCBkaWdpdHMuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgY29kZSA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDkpIHx8XG4gICAgICAoY29kZSA+PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VBICYmIGNvZGUgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlRikgfHxcbiAgICAgIChjb2RlID49IF9jaGFyY29kZXMuY2hhckNvZGVzLnVwcGVyY2FzZUEgJiYgY29kZSA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy51cHBlcmNhc2VGKSB8fFxuICAgICAgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudW5kZXJzY29yZVxuICAgICkge1xuICAgICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZU4pIHtcbiAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJpZ2ludCk7XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5udW0pO1xuICB9XG59XG5cbi8vIFJlYWQgYW4gaW50ZWdlciwgb2N0YWwgaW50ZWdlciwgb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVyLlxuZnVuY3Rpb24gcmVhZE51bWJlcihzdGFydHNXaXRoRG90KSB7XG4gIGxldCBpc0JpZ0ludCA9IGZhbHNlO1xuICBsZXQgaXNEZWNpbWFsID0gZmFsc2U7XG5cbiAgaWYgKCFzdGFydHNXaXRoRG90KSB7XG4gICAgcmVhZEludCgpO1xuICB9XG5cbiAgbGV0IG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICBpZiAobmV4dENoYXIgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmRvdCkge1xuICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgIHJlYWRJbnQoKTtcbiAgICBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlRSB8fCBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlRSkge1xuICAgIG5leHRDaGFyID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdCgrK19iYXNlLnN0YXRlLnBvcyk7XG4gICAgaWYgKG5leHRDaGFyID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5wbHVzU2lnbiB8fCBuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGFzaCkge1xuICAgICAgKytfYmFzZS5zdGF0ZS5wb3M7XG4gICAgfVxuICAgIHJlYWRJbnQoKTtcbiAgICBuZXh0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgfVxuXG4gIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlTikge1xuICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgIGlzQmlnSW50ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChuZXh0Q2hhciA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlTSkge1xuICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgIGlzRGVjaW1hbCA9IHRydWU7XG4gIH1cblxuICBpZiAoaXNCaWdJbnQpIHtcbiAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJpZ2ludCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzRGVjaW1hbCkge1xuICAgIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuZGVjaW1hbCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5udW0pO1xufVxuXG5mdW5jdGlvbiByZWFkU3RyaW5nKHF1b3RlKSB7XG4gIF9iYXNlLnN0YXRlLnBvcysrO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA+PSBfYmFzZS5pbnB1dC5sZW5ndGgpIHtcbiAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2ggPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyk7XG4gICAgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IHF1b3RlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gIH1cbiAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gIGZpbmlzaFRva2VuKF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKTtcbn1cblxuLy8gUmVhZHMgdGVtcGxhdGUgc3RyaW5nIHRva2Vucy5cbmZ1bmN0aW9uIHJlYWRUbXBsVG9rZW4oKSB7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoX2Jhc2Uuc3RhdGUucG9zID49IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGVcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNoID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICAgIGlmIChcbiAgICAgIGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5ncmF2ZUFjY2VudCB8fFxuICAgICAgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb2xsYXJTaWduICYmIF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zICsgMSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxlZnRDdXJseUJyYWNlKVxuICAgICkge1xuICAgICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA9PT0gX2Jhc2Uuc3RhdGUuc3RhcnQgJiYgbWF0Y2goX3R5cGVzLlRva2VuVHlwZS50ZW1wbGF0ZSkpIHtcbiAgICAgICAgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb2xsYXJTaWduKSB7XG4gICAgICAgICAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7XG4gICAgICAgICAgZmluaXNoVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5kb2xsYXJCcmFjZUwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICArK19iYXNlLnN0YXRlLnBvcztcbiAgICAgICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJhY2tRdW90ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5pc2hUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnRlbXBsYXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICAgIH1cbiAgICBfYmFzZS5zdGF0ZS5wb3MrKztcbiAgfVxufVxuXG4vLyBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgd29yZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHNuaXBwZXQgYXQgdGhlIGVuZCBvZlxuLy8gcmVhZFdvcmQsIGJ1dCBjYWxsaW5nIHNraXBXb3JkIGZyb20gcmVhZFdvcmQgc2VlbXMgdG8gc2xpZ2h0bHkgaHVydCBwZXJmb3JtYW5jZSBmcm9tIHNvbWUgcm91Z2hcbi8vIG1lYXN1cmVtZW50cy5cbiBmdW5jdGlvbiBza2lwV29yZCgpIHtcbiAgd2hpbGUgKF9iYXNlLnN0YXRlLnBvcyA8IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNoID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICAgIGlmIChfaWRlbnRpZmllci5JU19JREVOVElGSUVSX0NIQVJbY2hdKSB7XG4gICAgICBfYmFzZS5zdGF0ZS5wb3MrKztcbiAgICB9IGVsc2UgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5iYWNrc2xhc2gpIHtcbiAgICAgIC8vIFxcdVxuICAgICAgX2Jhc2Uuc3RhdGUucG9zICs9IDI7XG4gICAgICBpZiAoX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZWZ0Q3VybHlCcmFjZSkge1xuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgX2Jhc2Uuc3RhdGUucG9zIDwgX2Jhc2UuaW5wdXQubGVuZ3RoICYmXG4gICAgICAgICAgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpICE9PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5yaWdodEN1cmx5QnJhY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gICAgICAgIH1cbiAgICAgICAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufSBleHBvcnRzLnNraXBXb3JkID0gc2tpcFdvcmQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIERldGVybWluZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVkIGltcG9ydCBvciBuYW1lZCBleHBvcnQgc3BlY2lmaWVyLlxuICpcbiAqIFRoaXMgc3ludGF4IGlzIHRoZSBgYWAgZnJvbSBzdGF0ZW1lbnRzIGxpa2UgdGhlc2U6XG4gKiBpbXBvcnQge0F9IGZyb20gXCIuL2Zvb1wiO1xuICogZXhwb3J0IHtBfTtcbiAqIGV4cG9ydCB7QX0gZnJvbSBcIi4vZm9vXCI7XG4gKlxuICogQXMgaXQgdHVybnMgb3V0LCB3ZSBjYW4gZXhhY3RseSBjaGFyYWN0ZXJpemUgdGhlIHN5bnRheCBtZWFuaW5nIGJ5IHNpbXBseVxuICogY291bnRpbmcgdGhlIG51bWJlciBvZiB0b2tlbnMsIHdoaWNoIGNhbiBiZSBmcm9tIDEgdG8gNDpcbiAqIHtBfVxuICoge3R5cGUgQX1cbiAqIHtBIGFzIEJ9XG4gKiB7dHlwZSBBIGFzIEJ9XG4gKlxuICogSW4gdGhlIHR5cGUgY2FzZSwgd2UgbmV2ZXIgYWN0dWFsbHkgbmVlZCB0aGUgbmFtZXMgaW4gcHJhY3RpY2UsIHNvIGRvbid0IGdldFxuICogdGhlbS5cbiAqXG4gKiBUT0RPOiBUaGVyZSdzIHNvbWUgcmVkdW5kYW5jeSB3aXRoIHRoZSB0eXBlIGRldGVjdGlvbiBoZXJlIGFuZCB0aGUgaXNUeXBlXG4gKiBmbGFnIHRoYXQncyBhbHJlYWR5IHByZXNlbnQgb24gdG9rZW5zIGluIFRTIG1vZGUuIFRoaXMgZnVuY3Rpb24gY291bGRcbiAqIHBvdGVudGlhbGx5IGJlIHNpbXBsaWZpZWQgYW5kL29yIHB1c2hlZCB0byB0aGUgY2FsbCBzaXRlcyB0byBhdm9pZCB0aGUgb2JqZWN0XG4gKiBhbGxvY2F0aW9uLlxuICovXG4gZnVuY3Rpb24gZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyhcbiAgdG9rZW5zLFxuICBpbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKSxcbikge1xuICBsZXQgZW5kSW5kZXggPSBpbmRleCArIDE7XG4gIGlmIChpc1NwZWNpZmllckVuZCh0b2tlbnMsIGVuZEluZGV4KSkge1xuICAgIC8vIGltcG9ydCB7QX1cbiAgICBjb25zdCBuYW1lID0gdG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVHlwZTogZmFsc2UsXG4gICAgICBsZWZ0TmFtZTogbmFtZSxcbiAgICAgIHJpZ2h0TmFtZTogbmFtZSxcbiAgICAgIGVuZEluZGV4LFxuICAgIH07XG4gIH1cbiAgZW5kSW5kZXgrKztcbiAgaWYgKGlzU3BlY2lmaWVyRW5kKHRva2VucywgZW5kSW5kZXgpKSB7XG4gICAgLy8gaW1wb3J0IHt0eXBlIEF9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVHlwZTogdHJ1ZSxcbiAgICAgIGxlZnROYW1lOiBudWxsLFxuICAgICAgcmlnaHROYW1lOiBudWxsLFxuICAgICAgZW5kSW5kZXgsXG4gICAgfTtcbiAgfVxuICBlbmRJbmRleCsrO1xuICBpZiAoaXNTcGVjaWZpZXJFbmQodG9rZW5zLCBlbmRJbmRleCkpIHtcbiAgICAvLyBpbXBvcnQge0EgYXMgQn1cbiAgICByZXR1cm4ge1xuICAgICAgaXNUeXBlOiBmYWxzZSxcbiAgICAgIGxlZnROYW1lOiB0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSxcbiAgICAgIHJpZ2h0TmFtZTogdG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCArIDIpLFxuICAgICAgZW5kSW5kZXgsXG4gICAgfTtcbiAgfVxuICBlbmRJbmRleCsrO1xuICBpZiAoaXNTcGVjaWZpZXJFbmQodG9rZW5zLCBlbmRJbmRleCkpIHtcbiAgICAvLyBpbXBvcnQge3R5cGUgQSBhcyBCfVxuICAgIHJldHVybiB7XG4gICAgICBpc1R5cGU6IHRydWUsXG4gICAgICBsZWZ0TmFtZTogbnVsbCxcbiAgICAgIHJpZ2h0TmFtZTogbnVsbCxcbiAgICAgIGVuZEluZGV4LFxuICAgIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGltcG9ydC9leHBvcnQgc3BlY2lmaWVyIGF0ICR7aW5kZXh9YCk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGdldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm87XG5cbmZ1bmN0aW9uIGlzU3BlY2lmaWVyRW5kKHRva2VucywgaW5kZXgpIHtcbiAgY29uc3QgdG9rZW4gPSB0b2tlbnMudG9rZW5zW2luZGV4XTtcbiAgcmV0dXJuIHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSIHx8IHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuY29tbWE7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsvLyBVc2UgYSBNYXAgcmF0aGVyIHRoYW4gb2JqZWN0IHRvIGF2b2lkIHVuZXhwZWN0ZWQgX19wcm90b19fIGFjY2Vzcy5cbmV4cG9ydHMuIGRlZmF1bHQgPSBuZXcgTWFwKFtcbiAgW1wicXVvdFwiLCBcIlxcdTAwMjJcIl0sXG4gIFtcImFtcFwiLCBcIiZcIl0sXG4gIFtcImFwb3NcIiwgXCJcXHUwMDI3XCJdLFxuICBbXCJsdFwiLCBcIjxcIl0sXG4gIFtcImd0XCIsIFwiPlwiXSxcbiAgW1wibmJzcFwiLCBcIlxcdTAwQTBcIl0sXG4gIFtcImlleGNsXCIsIFwiXFx1MDBBMVwiXSxcbiAgW1wiY2VudFwiLCBcIlxcdTAwQTJcIl0sXG4gIFtcInBvdW5kXCIsIFwiXFx1MDBBM1wiXSxcbiAgW1wiY3VycmVuXCIsIFwiXFx1MDBBNFwiXSxcbiAgW1wieWVuXCIsIFwiXFx1MDBBNVwiXSxcbiAgW1wiYnJ2YmFyXCIsIFwiXFx1MDBBNlwiXSxcbiAgW1wic2VjdFwiLCBcIlxcdTAwQTdcIl0sXG4gIFtcInVtbFwiLCBcIlxcdTAwQThcIl0sXG4gIFtcImNvcHlcIiwgXCJcXHUwMEE5XCJdLFxuICBbXCJvcmRmXCIsIFwiXFx1MDBBQVwiXSxcbiAgW1wibGFxdW9cIiwgXCJcXHUwMEFCXCJdLFxuICBbXCJub3RcIiwgXCJcXHUwMEFDXCJdLFxuICBbXCJzaHlcIiwgXCJcXHUwMEFEXCJdLFxuICBbXCJyZWdcIiwgXCJcXHUwMEFFXCJdLFxuICBbXCJtYWNyXCIsIFwiXFx1MDBBRlwiXSxcbiAgW1wiZGVnXCIsIFwiXFx1MDBCMFwiXSxcbiAgW1wicGx1c21uXCIsIFwiXFx1MDBCMVwiXSxcbiAgW1wic3VwMlwiLCBcIlxcdTAwQjJcIl0sXG4gIFtcInN1cDNcIiwgXCJcXHUwMEIzXCJdLFxuICBbXCJhY3V0ZVwiLCBcIlxcdTAwQjRcIl0sXG4gIFtcIm1pY3JvXCIsIFwiXFx1MDBCNVwiXSxcbiAgW1wicGFyYVwiLCBcIlxcdTAwQjZcIl0sXG4gIFtcIm1pZGRvdFwiLCBcIlxcdTAwQjdcIl0sXG4gIFtcImNlZGlsXCIsIFwiXFx1MDBCOFwiXSxcbiAgW1wic3VwMVwiLCBcIlxcdTAwQjlcIl0sXG4gIFtcIm9yZG1cIiwgXCJcXHUwMEJBXCJdLFxuICBbXCJyYXF1b1wiLCBcIlxcdTAwQkJcIl0sXG4gIFtcImZyYWMxNFwiLCBcIlxcdTAwQkNcIl0sXG4gIFtcImZyYWMxMlwiLCBcIlxcdTAwQkRcIl0sXG4gIFtcImZyYWMzNFwiLCBcIlxcdTAwQkVcIl0sXG4gIFtcImlxdWVzdFwiLCBcIlxcdTAwQkZcIl0sXG4gIFtcIkFncmF2ZVwiLCBcIlxcdTAwQzBcIl0sXG4gIFtcIkFhY3V0ZVwiLCBcIlxcdTAwQzFcIl0sXG4gIFtcIkFjaXJjXCIsIFwiXFx1MDBDMlwiXSxcbiAgW1wiQXRpbGRlXCIsIFwiXFx1MDBDM1wiXSxcbiAgW1wiQXVtbFwiLCBcIlxcdTAwQzRcIl0sXG4gIFtcIkFyaW5nXCIsIFwiXFx1MDBDNVwiXSxcbiAgW1wiQUVsaWdcIiwgXCJcXHUwMEM2XCJdLFxuICBbXCJDY2VkaWxcIiwgXCJcXHUwMEM3XCJdLFxuICBbXCJFZ3JhdmVcIiwgXCJcXHUwMEM4XCJdLFxuICBbXCJFYWN1dGVcIiwgXCJcXHUwMEM5XCJdLFxuICBbXCJFY2lyY1wiLCBcIlxcdTAwQ0FcIl0sXG4gIFtcIkV1bWxcIiwgXCJcXHUwMENCXCJdLFxuICBbXCJJZ3JhdmVcIiwgXCJcXHUwMENDXCJdLFxuICBbXCJJYWN1dGVcIiwgXCJcXHUwMENEXCJdLFxuICBbXCJJY2lyY1wiLCBcIlxcdTAwQ0VcIl0sXG4gIFtcIkl1bWxcIiwgXCJcXHUwMENGXCJdLFxuICBbXCJFVEhcIiwgXCJcXHUwMEQwXCJdLFxuICBbXCJOdGlsZGVcIiwgXCJcXHUwMEQxXCJdLFxuICBbXCJPZ3JhdmVcIiwgXCJcXHUwMEQyXCJdLFxuICBbXCJPYWN1dGVcIiwgXCJcXHUwMEQzXCJdLFxuICBbXCJPY2lyY1wiLCBcIlxcdTAwRDRcIl0sXG4gIFtcIk90aWxkZVwiLCBcIlxcdTAwRDVcIl0sXG4gIFtcIk91bWxcIiwgXCJcXHUwMEQ2XCJdLFxuICBbXCJ0aW1lc1wiLCBcIlxcdTAwRDdcIl0sXG4gIFtcIk9zbGFzaFwiLCBcIlxcdTAwRDhcIl0sXG4gIFtcIlVncmF2ZVwiLCBcIlxcdTAwRDlcIl0sXG4gIFtcIlVhY3V0ZVwiLCBcIlxcdTAwREFcIl0sXG4gIFtcIlVjaXJjXCIsIFwiXFx1MDBEQlwiXSxcbiAgW1wiVXVtbFwiLCBcIlxcdTAwRENcIl0sXG4gIFtcIllhY3V0ZVwiLCBcIlxcdTAwRERcIl0sXG4gIFtcIlRIT1JOXCIsIFwiXFx1MDBERVwiXSxcbiAgW1wic3psaWdcIiwgXCJcXHUwMERGXCJdLFxuICBbXCJhZ3JhdmVcIiwgXCJcXHUwMEUwXCJdLFxuICBbXCJhYWN1dGVcIiwgXCJcXHUwMEUxXCJdLFxuICBbXCJhY2lyY1wiLCBcIlxcdTAwRTJcIl0sXG4gIFtcImF0aWxkZVwiLCBcIlxcdTAwRTNcIl0sXG4gIFtcImF1bWxcIiwgXCJcXHUwMEU0XCJdLFxuICBbXCJhcmluZ1wiLCBcIlxcdTAwRTVcIl0sXG4gIFtcImFlbGlnXCIsIFwiXFx1MDBFNlwiXSxcbiAgW1wiY2NlZGlsXCIsIFwiXFx1MDBFN1wiXSxcbiAgW1wiZWdyYXZlXCIsIFwiXFx1MDBFOFwiXSxcbiAgW1wiZWFjdXRlXCIsIFwiXFx1MDBFOVwiXSxcbiAgW1wiZWNpcmNcIiwgXCJcXHUwMEVBXCJdLFxuICBbXCJldW1sXCIsIFwiXFx1MDBFQlwiXSxcbiAgW1wiaWdyYXZlXCIsIFwiXFx1MDBFQ1wiXSxcbiAgW1wiaWFjdXRlXCIsIFwiXFx1MDBFRFwiXSxcbiAgW1wiaWNpcmNcIiwgXCJcXHUwMEVFXCJdLFxuICBbXCJpdW1sXCIsIFwiXFx1MDBFRlwiXSxcbiAgW1wiZXRoXCIsIFwiXFx1MDBGMFwiXSxcbiAgW1wibnRpbGRlXCIsIFwiXFx1MDBGMVwiXSxcbiAgW1wib2dyYXZlXCIsIFwiXFx1MDBGMlwiXSxcbiAgW1wib2FjdXRlXCIsIFwiXFx1MDBGM1wiXSxcbiAgW1wib2NpcmNcIiwgXCJcXHUwMEY0XCJdLFxuICBbXCJvdGlsZGVcIiwgXCJcXHUwMEY1XCJdLFxuICBbXCJvdW1sXCIsIFwiXFx1MDBGNlwiXSxcbiAgW1wiZGl2aWRlXCIsIFwiXFx1MDBGN1wiXSxcbiAgW1wib3NsYXNoXCIsIFwiXFx1MDBGOFwiXSxcbiAgW1widWdyYXZlXCIsIFwiXFx1MDBGOVwiXSxcbiAgW1widWFjdXRlXCIsIFwiXFx1MDBGQVwiXSxcbiAgW1widWNpcmNcIiwgXCJcXHUwMEZCXCJdLFxuICBbXCJ1dW1sXCIsIFwiXFx1MDBGQ1wiXSxcbiAgW1wieWFjdXRlXCIsIFwiXFx1MDBGRFwiXSxcbiAgW1widGhvcm5cIiwgXCJcXHUwMEZFXCJdLFxuICBbXCJ5dW1sXCIsIFwiXFx1MDBGRlwiXSxcbiAgW1wiT0VsaWdcIiwgXCJcXHUwMTUyXCJdLFxuICBbXCJvZWxpZ1wiLCBcIlxcdTAxNTNcIl0sXG4gIFtcIlNjYXJvblwiLCBcIlxcdTAxNjBcIl0sXG4gIFtcInNjYXJvblwiLCBcIlxcdTAxNjFcIl0sXG4gIFtcIll1bWxcIiwgXCJcXHUwMTc4XCJdLFxuICBbXCJmbm9mXCIsIFwiXFx1MDE5MlwiXSxcbiAgW1wiY2lyY1wiLCBcIlxcdTAyQzZcIl0sXG4gIFtcInRpbGRlXCIsIFwiXFx1MDJEQ1wiXSxcbiAgW1wiQWxwaGFcIiwgXCJcXHUwMzkxXCJdLFxuICBbXCJCZXRhXCIsIFwiXFx1MDM5MlwiXSxcbiAgW1wiR2FtbWFcIiwgXCJcXHUwMzkzXCJdLFxuICBbXCJEZWx0YVwiLCBcIlxcdTAzOTRcIl0sXG4gIFtcIkVwc2lsb25cIiwgXCJcXHUwMzk1XCJdLFxuICBbXCJaZXRhXCIsIFwiXFx1MDM5NlwiXSxcbiAgW1wiRXRhXCIsIFwiXFx1MDM5N1wiXSxcbiAgW1wiVGhldGFcIiwgXCJcXHUwMzk4XCJdLFxuICBbXCJJb3RhXCIsIFwiXFx1MDM5OVwiXSxcbiAgW1wiS2FwcGFcIiwgXCJcXHUwMzlBXCJdLFxuICBbXCJMYW1iZGFcIiwgXCJcXHUwMzlCXCJdLFxuICBbXCJNdVwiLCBcIlxcdTAzOUNcIl0sXG4gIFtcIk51XCIsIFwiXFx1MDM5RFwiXSxcbiAgW1wiWGlcIiwgXCJcXHUwMzlFXCJdLFxuICBbXCJPbWljcm9uXCIsIFwiXFx1MDM5RlwiXSxcbiAgW1wiUGlcIiwgXCJcXHUwM0EwXCJdLFxuICBbXCJSaG9cIiwgXCJcXHUwM0ExXCJdLFxuICBbXCJTaWdtYVwiLCBcIlxcdTAzQTNcIl0sXG4gIFtcIlRhdVwiLCBcIlxcdTAzQTRcIl0sXG4gIFtcIlVwc2lsb25cIiwgXCJcXHUwM0E1XCJdLFxuICBbXCJQaGlcIiwgXCJcXHUwM0E2XCJdLFxuICBbXCJDaGlcIiwgXCJcXHUwM0E3XCJdLFxuICBbXCJQc2lcIiwgXCJcXHUwM0E4XCJdLFxuICBbXCJPbWVnYVwiLCBcIlxcdTAzQTlcIl0sXG4gIFtcImFscGhhXCIsIFwiXFx1MDNCMVwiXSxcbiAgW1wiYmV0YVwiLCBcIlxcdTAzQjJcIl0sXG4gIFtcImdhbW1hXCIsIFwiXFx1MDNCM1wiXSxcbiAgW1wiZGVsdGFcIiwgXCJcXHUwM0I0XCJdLFxuICBbXCJlcHNpbG9uXCIsIFwiXFx1MDNCNVwiXSxcbiAgW1wiemV0YVwiLCBcIlxcdTAzQjZcIl0sXG4gIFtcImV0YVwiLCBcIlxcdTAzQjdcIl0sXG4gIFtcInRoZXRhXCIsIFwiXFx1MDNCOFwiXSxcbiAgW1wiaW90YVwiLCBcIlxcdTAzQjlcIl0sXG4gIFtcImthcHBhXCIsIFwiXFx1MDNCQVwiXSxcbiAgW1wibGFtYmRhXCIsIFwiXFx1MDNCQlwiXSxcbiAgW1wibXVcIiwgXCJcXHUwM0JDXCJdLFxuICBbXCJudVwiLCBcIlxcdTAzQkRcIl0sXG4gIFtcInhpXCIsIFwiXFx1MDNCRVwiXSxcbiAgW1wib21pY3JvblwiLCBcIlxcdTAzQkZcIl0sXG4gIFtcInBpXCIsIFwiXFx1MDNDMFwiXSxcbiAgW1wicmhvXCIsIFwiXFx1MDNDMVwiXSxcbiAgW1wic2lnbWFmXCIsIFwiXFx1MDNDMlwiXSxcbiAgW1wic2lnbWFcIiwgXCJcXHUwM0MzXCJdLFxuICBbXCJ0YXVcIiwgXCJcXHUwM0M0XCJdLFxuICBbXCJ1cHNpbG9uXCIsIFwiXFx1MDNDNVwiXSxcbiAgW1wicGhpXCIsIFwiXFx1MDNDNlwiXSxcbiAgW1wiY2hpXCIsIFwiXFx1MDNDN1wiXSxcbiAgW1wicHNpXCIsIFwiXFx1MDNDOFwiXSxcbiAgW1wib21lZ2FcIiwgXCJcXHUwM0M5XCJdLFxuICBbXCJ0aGV0YXN5bVwiLCBcIlxcdTAzRDFcIl0sXG4gIFtcInVwc2loXCIsIFwiXFx1MDNEMlwiXSxcbiAgW1wicGl2XCIsIFwiXFx1MDNENlwiXSxcbiAgW1wiZW5zcFwiLCBcIlxcdTIwMDJcIl0sXG4gIFtcImVtc3BcIiwgXCJcXHUyMDAzXCJdLFxuICBbXCJ0aGluc3BcIiwgXCJcXHUyMDA5XCJdLFxuICBbXCJ6d25qXCIsIFwiXFx1MjAwQ1wiXSxcbiAgW1wiendqXCIsIFwiXFx1MjAwRFwiXSxcbiAgW1wibHJtXCIsIFwiXFx1MjAwRVwiXSxcbiAgW1wicmxtXCIsIFwiXFx1MjAwRlwiXSxcbiAgW1wibmRhc2hcIiwgXCJcXHUyMDEzXCJdLFxuICBbXCJtZGFzaFwiLCBcIlxcdTIwMTRcIl0sXG4gIFtcImxzcXVvXCIsIFwiXFx1MjAxOFwiXSxcbiAgW1wicnNxdW9cIiwgXCJcXHUyMDE5XCJdLFxuICBbXCJzYnF1b1wiLCBcIlxcdTIwMUFcIl0sXG4gIFtcImxkcXVvXCIsIFwiXFx1MjAxQ1wiXSxcbiAgW1wicmRxdW9cIiwgXCJcXHUyMDFEXCJdLFxuICBbXCJiZHF1b1wiLCBcIlxcdTIwMUVcIl0sXG4gIFtcImRhZ2dlclwiLCBcIlxcdTIwMjBcIl0sXG4gIFtcIkRhZ2dlclwiLCBcIlxcdTIwMjFcIl0sXG4gIFtcImJ1bGxcIiwgXCJcXHUyMDIyXCJdLFxuICBbXCJoZWxsaXBcIiwgXCJcXHUyMDI2XCJdLFxuICBbXCJwZXJtaWxcIiwgXCJcXHUyMDMwXCJdLFxuICBbXCJwcmltZVwiLCBcIlxcdTIwMzJcIl0sXG4gIFtcIlByaW1lXCIsIFwiXFx1MjAzM1wiXSxcbiAgW1wibHNhcXVvXCIsIFwiXFx1MjAzOVwiXSxcbiAgW1wicnNhcXVvXCIsIFwiXFx1MjAzQVwiXSxcbiAgW1wib2xpbmVcIiwgXCJcXHUyMDNFXCJdLFxuICBbXCJmcmFzbFwiLCBcIlxcdTIwNDRcIl0sXG4gIFtcImV1cm9cIiwgXCJcXHUyMEFDXCJdLFxuICBbXCJpbWFnZVwiLCBcIlxcdTIxMTFcIl0sXG4gIFtcIndlaWVycFwiLCBcIlxcdTIxMThcIl0sXG4gIFtcInJlYWxcIiwgXCJcXHUyMTFDXCJdLFxuICBbXCJ0cmFkZVwiLCBcIlxcdTIxMjJcIl0sXG4gIFtcImFsZWZzeW1cIiwgXCJcXHUyMTM1XCJdLFxuICBbXCJsYXJyXCIsIFwiXFx1MjE5MFwiXSxcbiAgW1widWFyclwiLCBcIlxcdTIxOTFcIl0sXG4gIFtcInJhcnJcIiwgXCJcXHUyMTkyXCJdLFxuICBbXCJkYXJyXCIsIFwiXFx1MjE5M1wiXSxcbiAgW1wiaGFyclwiLCBcIlxcdTIxOTRcIl0sXG4gIFtcImNyYXJyXCIsIFwiXFx1MjFCNVwiXSxcbiAgW1wibEFyclwiLCBcIlxcdTIxRDBcIl0sXG4gIFtcInVBcnJcIiwgXCJcXHUyMUQxXCJdLFxuICBbXCJyQXJyXCIsIFwiXFx1MjFEMlwiXSxcbiAgW1wiZEFyclwiLCBcIlxcdTIxRDNcIl0sXG4gIFtcImhBcnJcIiwgXCJcXHUyMUQ0XCJdLFxuICBbXCJmb3JhbGxcIiwgXCJcXHUyMjAwXCJdLFxuICBbXCJwYXJ0XCIsIFwiXFx1MjIwMlwiXSxcbiAgW1wiZXhpc3RcIiwgXCJcXHUyMjAzXCJdLFxuICBbXCJlbXB0eVwiLCBcIlxcdTIyMDVcIl0sXG4gIFtcIm5hYmxhXCIsIFwiXFx1MjIwN1wiXSxcbiAgW1wiaXNpblwiLCBcIlxcdTIyMDhcIl0sXG4gIFtcIm5vdGluXCIsIFwiXFx1MjIwOVwiXSxcbiAgW1wibmlcIiwgXCJcXHUyMjBCXCJdLFxuICBbXCJwcm9kXCIsIFwiXFx1MjIwRlwiXSxcbiAgW1wic3VtXCIsIFwiXFx1MjIxMVwiXSxcbiAgW1wibWludXNcIiwgXCJcXHUyMjEyXCJdLFxuICBbXCJsb3dhc3RcIiwgXCJcXHUyMjE3XCJdLFxuICBbXCJyYWRpY1wiLCBcIlxcdTIyMUFcIl0sXG4gIFtcInByb3BcIiwgXCJcXHUyMjFEXCJdLFxuICBbXCJpbmZpblwiLCBcIlxcdTIyMUVcIl0sXG4gIFtcImFuZ1wiLCBcIlxcdTIyMjBcIl0sXG4gIFtcImFuZFwiLCBcIlxcdTIyMjdcIl0sXG4gIFtcIm9yXCIsIFwiXFx1MjIyOFwiXSxcbiAgW1wiY2FwXCIsIFwiXFx1MjIyOVwiXSxcbiAgW1wiY3VwXCIsIFwiXFx1MjIyQVwiXSxcbiAgW1wiaW50XCIsIFwiXFx1MjIyQlwiXSxcbiAgW1widGhlcmU0XCIsIFwiXFx1MjIzNFwiXSxcbiAgW1wic2ltXCIsIFwiXFx1MjIzQ1wiXSxcbiAgW1wiY29uZ1wiLCBcIlxcdTIyNDVcIl0sXG4gIFtcImFzeW1wXCIsIFwiXFx1MjI0OFwiXSxcbiAgW1wibmVcIiwgXCJcXHUyMjYwXCJdLFxuICBbXCJlcXVpdlwiLCBcIlxcdTIyNjFcIl0sXG4gIFtcImxlXCIsIFwiXFx1MjI2NFwiXSxcbiAgW1wiZ2VcIiwgXCJcXHUyMjY1XCJdLFxuICBbXCJzdWJcIiwgXCJcXHUyMjgyXCJdLFxuICBbXCJzdXBcIiwgXCJcXHUyMjgzXCJdLFxuICBbXCJuc3ViXCIsIFwiXFx1MjI4NFwiXSxcbiAgW1wic3ViZVwiLCBcIlxcdTIyODZcIl0sXG4gIFtcInN1cGVcIiwgXCJcXHUyMjg3XCJdLFxuICBbXCJvcGx1c1wiLCBcIlxcdTIyOTVcIl0sXG4gIFtcIm90aW1lc1wiLCBcIlxcdTIyOTdcIl0sXG4gIFtcInBlcnBcIiwgXCJcXHUyMkE1XCJdLFxuICBbXCJzZG90XCIsIFwiXFx1MjJDNVwiXSxcbiAgW1wibGNlaWxcIiwgXCJcXHUyMzA4XCJdLFxuICBbXCJyY2VpbFwiLCBcIlxcdTIzMDlcIl0sXG4gIFtcImxmbG9vclwiLCBcIlxcdTIzMEFcIl0sXG4gIFtcInJmbG9vclwiLCBcIlxcdTIzMEJcIl0sXG4gIFtcImxhbmdcIiwgXCJcXHUyMzI5XCJdLFxuICBbXCJyYW5nXCIsIFwiXFx1MjMyQVwiXSxcbiAgW1wibG96XCIsIFwiXFx1MjVDQVwiXSxcbiAgW1wic3BhZGVzXCIsIFwiXFx1MjY2MFwiXSxcbiAgW1wiY2x1YnNcIiwgXCJcXHUyNjYzXCJdLFxuICBbXCJoZWFydHNcIiwgXCJcXHUyNjY1XCJdLFxuICBbXCJkaWFtc1wiLCBcIlxcdTI2NjZcIl0sXG5dKTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO1xuXG5cblxuXG5cblxuXG5cbiBmdW5jdGlvbiBnZXRKU1hQcmFnbWFJbmZvKG9wdGlvbnMpIHtcbiAgY29uc3QgW2Jhc2UsIHN1ZmZpeF0gPSBzcGxpdFByYWdtYShvcHRpb25zLmpzeFByYWdtYSB8fCBcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIik7XG4gIGNvbnN0IFtmcmFnbWVudEJhc2UsIGZyYWdtZW50U3VmZml4XSA9IHNwbGl0UHJhZ21hKG9wdGlvbnMuanN4RnJhZ21lbnRQcmFnbWEgfHwgXCJSZWFjdC5GcmFnbWVudFwiKTtcbiAgcmV0dXJuIHtiYXNlLCBzdWZmaXgsIGZyYWdtZW50QmFzZSwgZnJhZ21lbnRTdWZmaXh9O1xufSBleHBvcnRzLmRlZmF1bHQgPSBnZXRKU1hQcmFnbWFJbmZvO1xuXG5mdW5jdGlvbiBzcGxpdFByYWdtYShwcmFnbWEpIHtcbiAgbGV0IGRvdEluZGV4ID0gcHJhZ21hLmluZGV4T2YoXCIuXCIpO1xuICBpZiAoZG90SW5kZXggPT09IC0xKSB7XG4gICAgZG90SW5kZXggPSBwcmFnbWEubGVuZ3RoO1xuICB9XG4gIHJldHVybiBbcHJhZ21hLnNsaWNlKDAsIGRvdEluZGV4KSwgcHJhZ21hLnNsaWNlKGRvdEluZGV4KV07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgY2xhc3MgVHJhbnNmb3JtZXIge1xuICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gIFxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRIb2lzdGVkQ29kZSgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldFN1ZmZpeENvZGUoKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNmb3JtZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXG52YXIgX3hodG1sID0gcmVxdWlyZSgnLi4vcGFyc2VyL3BsdWdpbnMvanN4L3hodG1sJyk7IHZhciBfeGh0bWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfeGh0bWwpO1xudmFyIF90b2tlbml6ZXIgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xudmFyIF9jaGFyY29kZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdXRpbC9jaGFyY29kZXMnKTtcblxudmFyIF9nZXRKU1hQcmFnbWFJbmZvID0gcmVxdWlyZSgnLi4vdXRpbC9nZXRKU1hQcmFnbWFJbmZvJyk7IHZhciBfZ2V0SlNYUHJhZ21hSW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRKU1hQcmFnbWFJbmZvKTtcblxudmFyIF9UcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vVHJhbnNmb3JtZXInKTsgdmFyIF9UcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9UcmFuc2Zvcm1lcik7XG5cbiBjbGFzcyBKU1hUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gIFxuICBcbiAgXG5cbiAgLy8gU3RhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSBsaW5lIG51bWJlciBvZiBlYWNoIEpTWCB0YWcgaW4gZGV2ZWxvcG1lbnQuXG4gIF9faW5pdCgpIHt0aGlzLmxhc3RMaW5lTnVtYmVyID0gMX1cbiAgX19pbml0MigpIHt0aGlzLmxhc3RJbmRleCA9IDB9XG5cbiAgLy8gSW4gZGV2ZWxvcG1lbnQsIHZhcmlhYmxlIG5hbWUgaG9sZGluZyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLlxuICBfX2luaXQzKCkge3RoaXMuZmlsZW5hbWVWYXJOYW1lID0gbnVsbH1cbiAgLy8gTWFwcGluZyBvZiBjbGFpbWVkIG5hbWVzIGZvciBpbXBvcnRzIGluIHRoZSBhdXRvbWF0aWMgdHJhbnNmb3JtLCBlLGcuXG4gIC8vIHtqc3g6IFwiX2pzeFwifS4gVGhpcyBkZXRlcm1pbmVzIHdoaWNoIGltcG9ydHMgdG8gZ2VuZXJhdGUgaW4gdGhlIHByZWZpeC5cbiAgX19pbml0NCgpIHt0aGlzLmVzbUF1dG9tYXRpY0ltcG9ydE5hbWVSZXNvbHV0aW9ucyA9IHt9fVxuICAvLyBXaGVuIGF1dG9tYXRpY2FsbHkgYWRkaW5nIGltcG9ydHMgaW4gQ0pTIG1vZGUsIHdlIHN0b3JlIHRoZSB2YXJpYWJsZSBuYW1lXG4gIC8vIGhvbGRpbmcgdGhlIGltcG9ydGVkIENKUyBtb2R1bGUgc28gd2UgY2FuIHJlcXVpcmUgaXQgaW4gdGhlIHByZWZpeC5cbiAgX19pbml0NSgpIHt0aGlzLmNqc0F1dG9tYXRpY01vZHVsZU5hbWVSZXNvbHV0aW9ucyA9IHt9fVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgb3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnJvb3RUcmFuc2Zvcm1lciA9IHJvb3RUcmFuc2Zvcm1lcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmltcG9ydFByb2Nlc3NvciA9IGltcG9ydFByb2Nlc3Nvcjt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5vcHRpb25zID0gb3B0aW9ucztKU1hUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7SlNYVHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdDIuY2FsbCh0aGlzKTtKU1hUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0My5jYWxsKHRoaXMpO0pTWFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7SlNYVHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdDUuY2FsbCh0aGlzKTs7XG4gICAgdGhpcy5qc3hQcmFnbWFJbmZvID0gX2dldEpTWFByYWdtYUluZm8yLmRlZmF1bHQuY2FsbCh2b2lkIDAsIG9wdGlvbnMpO1xuICAgIHRoaXMuaXNBdXRvbWF0aWNSdW50aW1lID0gb3B0aW9ucy5qc3hSdW50aW1lID09PSBcImF1dG9tYXRpY1wiO1xuICAgIHRoaXMuanN4SW1wb3J0U291cmNlID0gb3B0aW9ucy5qc3hJbXBvcnRTb3VyY2UgfHwgXCJyZWFjdFwiO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0pTWFRhZygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgbGV0IHByZWZpeCA9IFwiXCI7XG4gICAgaWYgKHRoaXMuZmlsZW5hbWVWYXJOYW1lKSB7XG4gICAgICBwcmVmaXggKz0gYGNvbnN0ICR7dGhpcy5maWxlbmFtZVZhck5hbWV9ID0gJHtKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMuZmlsZVBhdGggfHwgXCJcIil9O2A7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQXV0b21hdGljUnVudGltZSkge1xuICAgICAgaWYgKHRoaXMuaW1wb3J0UHJvY2Vzc29yKSB7XG4gICAgICAgIC8vIENKUyBtb2RlOiBlbWl0IHJlcXVpcmUgc3RhdGVtZW50cyBmb3IgYWxsIG1vZHVsZXMgdGhhdCB3ZXJlIHJlZmVyZW5jZWQuXG4gICAgICAgIGZvciAoY29uc3QgW3BhdGgsIHJlc29sdmVkTmFtZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5janNBdXRvbWF0aWNNb2R1bGVOYW1lUmVzb2x1dGlvbnMpKSB7XG4gICAgICAgICAgcHJlZml4ICs9IGB2YXIgJHtyZXNvbHZlZE5hbWV9ID0gcmVxdWlyZShcIiR7cGF0aH1cIik7YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRVNNIG1vZGU6IGNvbnNvbGlkYXRlIGFuZCBlbWl0IGltcG9ydCBzdGF0ZW1lbnRzIGZvciByZWZlcmVuY2VkIG5hbWVzLlxuICAgICAgICBjb25zdCB7Y3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudFJlc29sdXRpb24sIC4uLm90aGVyUmVzb2x1dGlvbnN9ID1cbiAgICAgICAgICB0aGlzLmVzbUF1dG9tYXRpY0ltcG9ydE5hbWVSZXNvbHV0aW9ucztcbiAgICAgICAgaWYgKGNyZWF0ZUVsZW1lbnRSZXNvbHV0aW9uKSB7XG4gICAgICAgICAgcHJlZml4ICs9IGBpbXBvcnQge2NyZWF0ZUVsZW1lbnQgYXMgJHtjcmVhdGVFbGVtZW50UmVzb2x1dGlvbn19IGZyb20gXCIke3RoaXMuanN4SW1wb3J0U291cmNlfVwiO2A7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1wb3J0U3BlY2lmaWVycyA9IE9iamVjdC5lbnRyaWVzKG90aGVyUmVzb2x1dGlvbnMpXG4gICAgICAgICAgLm1hcCgoW25hbWUsIHJlc29sdmVkTmFtZV0pID0+IGAke25hbWV9IGFzICR7cmVzb2x2ZWROYW1lfWApXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgaWYgKGltcG9ydFNwZWNpZmllcnMpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRQYXRoID1cbiAgICAgICAgICAgIHRoaXMuanN4SW1wb3J0U291cmNlICsgKHRoaXMub3B0aW9ucy5wcm9kdWN0aW9uID8gXCIvanN4LXJ1bnRpbWVcIiA6IFwiL2pzeC1kZXYtcnVudGltZVwiKTtcbiAgICAgICAgICBwcmVmaXggKz0gYGltcG9ydCB7JHtpbXBvcnRTcGVjaWZpZXJzfX0gZnJvbSBcIiR7aW1wb3J0UGF0aH1cIjtgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVmaXg7XG4gIH1cblxuICBwcm9jZXNzSlNYVGFnKCkge1xuICAgIGNvbnN0IHtqc3hSb2xlLCBzdGFydH0gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAvLyBDYWxjdWxhdGUgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gYXQgdGhlIHZlcnkgc3RhcnQgKGlmIGluIGRldmVsb3BtZW50XG4gICAgLy8gbW9kZSkgc28gdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgZ3VhcmFudGVlZCB0byBiZSBxdWVyaWVkIGluIHRva2VuIG9yZGVyLlxuICAgIGNvbnN0IGVsZW1lbnRMb2NhdGlvbkNvZGUgPSB0aGlzLm9wdGlvbnMucHJvZHVjdGlvbiA/IG51bGwgOiB0aGlzLmdldEVsZW1lbnRMb2NhdGlvbkNvZGUoc3RhcnQpO1xuICAgIGlmICh0aGlzLmlzQXV0b21hdGljUnVudGltZSAmJiBqc3hSb2xlICE9PSBfdG9rZW5pemVyLkpTWFJvbGUuS2V5QWZ0ZXJQcm9wU3ByZWFkKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybVRhZ1RvSlNYRnVuYyhlbGVtZW50TG9jYXRpb25Db2RlLCBqc3hSb2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2Zvcm1UYWdUb0NyZWF0ZUVsZW1lbnQoZWxlbWVudExvY2F0aW9uQ29kZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RWxlbWVudExvY2F0aW9uQ29kZShmaXJzdFRva2VuU3RhcnQpIHtcbiAgICBjb25zdCBsaW5lTnVtYmVyID0gdGhpcy5nZXRMaW5lTnVtYmVyRm9ySW5kZXgoZmlyc3RUb2tlblN0YXJ0KTtcbiAgICByZXR1cm4gYGxpbmVOdW1iZXI6ICR7bGluZU51bWJlcn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGluZSBudW1iZXIgZm9yIHRoaXMgc291cmNlIHBvc2l0aW9uLiBUaGlzIGlzIGNhbGN1bGF0ZWQgbGF6aWx5IGFuZFxuICAgKiBtdXN0IGJlIGNhbGxlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIGJ5IGluZGV4LlxuICAgKi9cbiAgZ2V0TGluZU51bWJlckZvckluZGV4KGluZGV4KSB7XG4gICAgY29uc3QgY29kZSA9IHRoaXMudG9rZW5zLmNvZGU7XG4gICAgd2hpbGUgKHRoaXMubGFzdEluZGV4IDwgaW5kZXggJiYgdGhpcy5sYXN0SW5kZXggPCBjb2RlLmxlbmd0aCkge1xuICAgICAgaWYgKGNvZGVbdGhpcy5sYXN0SW5kZXhdID09PSBcIlxcblwiKSB7XG4gICAgICAgIHRoaXMubGFzdExpbmVOdW1iZXIrKztcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdEluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxhc3RMaW5lTnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGN1cnJlbnQgSlNYIGVsZW1lbnQgdG8gYSBjYWxsIHRvIGpzeCwganN4cywgb3IganN4REVWLiBUaGlzIGlzXG4gICAqIHRoZSBwcmltYXJ5IHRyYW5zZm9ybWF0aW9uIGZvciB0aGUgYXV0b21hdGljIHRyYW5zZm9ybS5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogPGRpdiBhPXsxfSBrZXk9ezJ9PkhlbGxve3h9PC9kaXY+XG4gICAqIGJlY29tZXNcbiAgICoganN4cygnZGl2Jywge2E6IDEsIGNoaWxkcmVuOiBbXCJIZWxsb1wiLCB4XX0sIDIpXG4gICAqL1xuICB0cmFuc2Zvcm1UYWdUb0pTWEZ1bmMoZWxlbWVudExvY2F0aW9uQ29kZSwganN4Um9sZSkge1xuICAgIGNvbnN0IGlzU3RhdGljID0ganN4Um9sZSA9PT0gX3Rva2VuaXplci5KU1hSb2xlLlN0YXRpY0NoaWxkcmVuO1xuICAgIC8vIEZpcnN0IHRhZyBpcyBhbHdheXMganN4VGFnU3RhcnQuXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHRoaXMuZ2V0SlNYRnVuY0ludm9jYXRpb25Db2RlKGlzU3RhdGljKSk7XG5cbiAgICBsZXQga2V5Q29kZSA9IG51bGw7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgICAgLy8gRnJhZ21lbnQgc3ludGF4LlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke3RoaXMuZ2V0RnJhZ21lbnRDb2RlKCl9LCB7YCk7XG4gICAgICB0aGlzLnByb2Nlc3NBdXRvbWF0aWNDaGlsZHJlbkFuZEVuZFByb3BzKGpzeFJvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOb3JtYWwgb3BlbiB0YWcgb3Igc2VsZi1jbG9zaW5nIHRhZy5cbiAgICAgIHRoaXMucHJvY2Vzc1RhZ0ludHJvKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLCB7XCIpO1xuICAgICAga2V5Q29kZSA9IHRoaXMucHJvY2Vzc1Byb3BzKHRydWUpO1xuXG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5zbGFzaCwgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdFbmQpKSB7XG4gICAgICAgIC8vIFNlbGYtY2xvc2luZyB0YWcsIG5vIGNoaWxkcmVuIHRvIGFkZCwgc28gY2xvc2UgdGhlIHByb3BzLlxuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdFbmQpKSB7XG4gICAgICAgIC8vIFRhZyB3aXRoIGNoaWxkcmVuLlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnByb2Nlc3NBdXRvbWF0aWNDaGlsZHJlbkFuZEVuZFByb3BzKGpzeFJvbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZWl0aGVyIC8+IG9yID4gYXQgdGhlIGVuZCBvZiB0aGUgdGFnLlwiKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIGEga2V5IHdhcyBwcmVzZW50LCBtb3ZlIGl0IHRvIGl0cyBvd24gYXJnLiBOb3RlIHRoYXQgbW92aW5nIGNvZGVcbiAgICAgIC8vIGxpa2UgdGhpcyB3aWxsIGNhdXNlIGxpbmUgbnVtYmVycyB0byBnZXQgb3V0IG9mIHN5bmMgd2l0aGluIHRoZSBKU1hcbiAgICAgIC8vIGVsZW1lbnQgaWYgdGhlIGtleSBleHByZXNzaW9uIGhhcyBhIG5ld2xpbmUgaW4gaXQuIFRoaXMgaXMgdW5mb3J0dW5hdGUsXG4gICAgICAvLyBidXQgaG9wZWZ1bGx5IHNob3VsZCBiZSByYXJlLlxuICAgICAgaWYgKGtleUNvZGUpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCAke2tleUNvZGV9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5vcHRpb25zLnByb2R1Y3Rpb24pIHtcbiAgICAgIC8vIElmIHRoZSBrZXkgd2Fzbid0IGFscmVhZHkgYWRkZWQsIGFkZCBpdCBub3cgc28gd2UgY2FuIGNvcnJlY3RseSBzZXRcbiAgICAgIC8vIHBvc2l0aW9uYWwgYXJncyBmb3IganN4REVWLlxuICAgICAgaWYgKGtleUNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIiwgdm9pZCAwXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCAke2lzU3RhdGljfSwgJHt0aGlzLmdldERldlNvdXJjZShlbGVtZW50TG9jYXRpb25Db2RlKX0sIHRoaXNgKTtcbiAgICB9XG4gICAgLy8gV2UncmUgYXQgdGhlIGNsb3NlLXRhZyBvciB0aGUgZW5kIG9mIGEgc2VsZi1jbG9zaW5nIHRhZywgc28gcmVtb3ZlXG4gICAgLy8gZXZlcnl0aGluZyBlbHNlIGFuZCBjbG9zZSB0aGUgZnVuY3Rpb24gY2FsbC5cbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiKVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBjdXJyZW50IEpTWCBlbGVtZW50IHRvIGEgY3JlYXRlRWxlbWVudCBjYWxsLiBJbiB0aGUgY2xhc3NpY1xuICAgKiBydW50aW1lLCB0aGlzIGlzIHRoZSBvbmx5IGNhc2UuIEluIHRoZSBhdXRvbWF0aWMgcnVudGltZSwgdGhpcyBpcyBjYWxsZWRcbiAgICogYXMgYSBmYWxsYmFjayBpbiBzb21lIHNpdHVhdGlvbnMuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIDxkaXYgYT17MX0ga2V5PXsyfT5IZWxsb3t4fTwvZGl2PlxuICAgKiBiZWNvbWVzXG4gICAqIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIHthOiAxLCBrZXk6IDJ9LCBcIkhlbGxvXCIsIHgpXG4gICAqL1xuICB0cmFuc2Zvcm1UYWdUb0NyZWF0ZUVsZW1lbnQoZWxlbWVudExvY2F0aW9uQ29kZSkge1xuICAgIC8vIEZpcnN0IHRhZyBpcyBhbHdheXMganN4VGFnU3RhcnQuXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHRoaXMuZ2V0Q3JlYXRlRWxlbWVudEludm9jYXRpb25Db2RlKCkpO1xuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgICAgLy8gRnJhZ21lbnQgc3ludGF4LlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAke3RoaXMuZ2V0RnJhZ21lbnRDb2RlKCl9LCBudWxsYCk7XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIG9wZW4gdGFnIG9yIHNlbGYtY2xvc2luZyB0YWcuXG4gICAgICB0aGlzLnByb2Nlc3NUYWdJbnRybygpO1xuICAgICAgdGhpcy5wcm9jZXNzUHJvcHNPYmplY3RXaXRoRGV2SW5mbyhlbGVtZW50TG9jYXRpb25Db2RlKTtcblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuc2xhc2gsIF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgICAgICAvLyBTZWxmLWNsb3NpbmcgdGFnOyBubyBjaGlsZHJlbiB0byBwcm9jZXNzLlxuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCkpIHtcbiAgICAgICAgLy8gVGFnIHdpdGggY2hpbGRyZW4gYW5kIGEgY2xvc2UtdGFnOyBwcm9jZXNzIHRoZSBjaGlsZHJlbiBhcyBhcmdzLlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGVpdGhlciAvPiBvciA+IGF0IHRoZSBlbmQgb2YgdGhlIHRhZy5cIik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlJ3JlIGF0IHRoZSBjbG9zZS10YWcgb3IgdGhlIGVuZCBvZiBhIHNlbGYtY2xvc2luZyB0YWcsIHNvIHJlbW92ZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBhbmQgY2xvc2UgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIilcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb2RlIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gZm9yIHRoaXMgY29udGV4dDoganN4LCBqc3hzLFxuICAgKiBvciBqc3hERVYuIFRoZSBmb2xsb3dpbmcgb3Blbi1wYXJlbiBpcyBpbmNsdWRlZCBhcyB3ZWxsLlxuICAgKlxuICAgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgdXNlZCBmb3IgdGhlIGF1dG9tYXRpYyBydW50aW1lLCBzbyB0aGV5IGFyZSBhbHdheXNcbiAgICogYXV0by1pbXBvcnRlZCwgYnV0IHRoZSBhdXRvLWltcG9ydCB3aWxsIGJlIGVpdGhlciBDSlMgb3IgRVNNIGJhc2VkIG9uIHRoZVxuICAgKiB0YXJnZXQgbW9kdWxlIGZvcm1hdC5cbiAgICovXG4gIGdldEpTWEZ1bmNJbnZvY2F0aW9uQ29kZShpc1N0YXRpYykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJvZHVjdGlvbikge1xuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oXCJqc3hzXCIsIFwiL2pzeC1ydW50aW1lXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWRGdW5jSW52b2NhdGlvbihcImpzeFwiLCBcIi9qc3gtcnVudGltZVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWRGdW5jSW52b2NhdGlvbihcImpzeERFVlwiLCBcIi9qc3gtZGV2LXJ1bnRpbWVcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY29kZSB0byB1c2UgZm9yIHRoZSBjcmVhdGVFbGVtZW50IGZ1bmN0aW9uLCBlLmcuXG4gICAqIGBSZWFjdC5jcmVhdGVFbGVtZW50YCwgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmcgb3Blbi1wYXJlbi5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0byB1c2UgZm9yIHRoZSBjbGFzc2ljIHJ1bnRpbWUuIEZvciB0aGVcbiAgICogYXV0b21hdGljIHJ1bnRpbWUsIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhcyBhIGZhbGxiYWNrIGZ1bmN0aW9uIHRvXG4gICAqIHByZXNlcnZlIGJlaGF2aW9yIHdoZW4gdGhlcmUgaXMgYSBwcm9wIHNwcmVhZCBmb2xsb3dlZCBieSBhbiBleHBsaWNpdFxuICAgKiBrZXkuIEluIHRoYXQgYXV0b21hdGljIHJ1bnRpbWUgY2FzZSwgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5XG4gICAqIGltcG9ydGVkLlxuICAgKi9cbiAgZ2V0Q3JlYXRlRWxlbWVudEludm9jYXRpb25Db2RlKCkge1xuICAgIGlmICh0aGlzLmlzQXV0b21hdGljUnVudGltZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWRGdW5jSW52b2NhdGlvbihcImNyZWF0ZUVsZW1lbnRcIiwgXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtqc3hQcmFnbWFJbmZvfSA9IHRoaXM7XG4gICAgICBjb25zdCByZXNvbHZlZFByYWdtYUJhc2VOYW1lID0gdGhpcy5pbXBvcnRQcm9jZXNzb3JcbiAgICAgICAgPyB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRJZGVudGlmaWVyUmVwbGFjZW1lbnQoanN4UHJhZ21hSW5mby5iYXNlKSB8fCBqc3hQcmFnbWFJbmZvLmJhc2VcbiAgICAgICAgOiBqc3hQcmFnbWFJbmZvLmJhc2U7XG4gICAgICByZXR1cm4gYCR7cmVzb2x2ZWRQcmFnbWFCYXNlTmFtZX0ke2pzeFByYWdtYUluZm8uc3VmZml4fShgO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGNvZGUgdG8gdXNlIGFzIHRoZSBjb21wb25lbnQgd2hlbiBjb21waWxpbmcgYSBzaG9ydGhhbmRcbiAgICogZnJhZ21lbnQsIGUuZy4gYFJlYWN0LkZyYWdtZW50YC5cbiAgICpcbiAgICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gZWl0aGVyIHRoZSBjbGFzc2ljIG9yIGF1dG9tYXRpYyBydW50aW1lLCBhbmRcbiAgICogdGhlIHZhbHVlIHNob3VsZCBiZSBhdXRvLWltcG9ydGVkIGZvciB0aGUgYXV0b21hdGljIHJ1bnRpbWUuXG4gICAqL1xuICBnZXRGcmFnbWVudENvZGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBdXRvbWF0aWNSdW50aW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGFpbUF1dG9JbXBvcnRlZE5hbWUoXG4gICAgICAgIFwiRnJhZ21lbnRcIixcbiAgICAgICAgdGhpcy5vcHRpb25zLnByb2R1Y3Rpb24gPyBcIi9qc3gtcnVudGltZVwiIDogXCIvanN4LWRldi1ydW50aW1lXCIsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7anN4UHJhZ21hSW5mb30gPSB0aGlzO1xuICAgICAgY29uc3QgcmVzb2x2ZWRGcmFnbWVudFByYWdtYUJhc2VOYW1lID0gdGhpcy5pbXBvcnRQcm9jZXNzb3JcbiAgICAgICAgPyB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRJZGVudGlmaWVyUmVwbGFjZW1lbnQoanN4UHJhZ21hSW5mby5mcmFnbWVudEJhc2UpIHx8XG4gICAgICAgICAganN4UHJhZ21hSW5mby5mcmFnbWVudEJhc2VcbiAgICAgICAgOiBqc3hQcmFnbWFJbmZvLmZyYWdtZW50QmFzZTtcbiAgICAgIHJldHVybiByZXNvbHZlZEZyYWdtZW50UHJhZ21hQmFzZU5hbWUgKyBqc3hQcmFnbWFJbmZvLmZyYWdtZW50U3VmZml4O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY29kZSB0aGF0IGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBXaGVuIHRoZSBpbXBvcnRzIHRyYW5zZm9ybSBpcyBlbmFibGVkLCB1c2UgdGhlIENKU0ltcG9ydFRyYW5zZm9ybWVyXG4gICAqIHN0cmF0ZWd5IG9mIHVzaW5nIGAuY2FsbCh2b2lkIDAsIC4uLmAgdG8gYXZvaWQgcGFzc2luZyBhIGB0aGlzYCB2YWx1ZSBpbiBhXG4gICAqIHNpdHVhdGlvbiB0aGF0IHdvdWxkIG90aGVyd2lzZSBsb29rIGxpa2UgYSBtZXRob2QgY2FsbC5cbiAgICovXG4gIGNsYWltQXV0b0ltcG9ydGVkRnVuY0ludm9jYXRpb24oZnVuY05hbWUsIGltcG9ydFBhdGhTdWZmaXgpIHtcbiAgICBjb25zdCBmdW5jQ29kZSA9IHRoaXMuY2xhaW1BdXRvSW1wb3J0ZWROYW1lKGZ1bmNOYW1lLCBpbXBvcnRQYXRoU3VmZml4KTtcbiAgICBpZiAodGhpcy5pbXBvcnRQcm9jZXNzb3IpIHtcbiAgICAgIHJldHVybiBgJHtmdW5jQ29kZX0uY2FsbCh2b2lkIDAsIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtmdW5jQ29kZX0oYDtcbiAgICB9XG4gIH1cblxuICBjbGFpbUF1dG9JbXBvcnRlZE5hbWUoZnVuY05hbWUsIGltcG9ydFBhdGhTdWZmaXgpIHtcbiAgICBpZiAodGhpcy5pbXBvcnRQcm9jZXNzb3IpIHtcbiAgICAgIC8vIENKUyBtb2RlOiBjbGFpbSBhIG5hbWUgZm9yIHRoZSBtb2R1bGUgYW5kIG1hcmsgaXQgZm9yIGltcG9ydC5cbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmpzeEltcG9ydFNvdXJjZSArIGltcG9ydFBhdGhTdWZmaXg7XG4gICAgICBpZiAoIXRoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zW3BhdGhdKSB7XG4gICAgICAgIHRoaXMuY2pzQXV0b21hdGljTW9kdWxlTmFtZVJlc29sdXRpb25zW3BhdGhdID1cbiAgICAgICAgICB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRGcmVlSWRlbnRpZmllckZvclBhdGgocGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7dGhpcy5janNBdXRvbWF0aWNNb2R1bGVOYW1lUmVzb2x1dGlvbnNbcGF0aF19LiR7ZnVuY05hbWV9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRVNNIG1vZGU6IGNsYWltIGEgbmFtZSBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIGl0IHRvIHRoZSBuYW1lcyB0aGF0XG4gICAgICAvLyBzaG91bGQgYmUgYXV0by1pbXBvcnRlZCB3aGVuIHRoZSBwcmVmaXggaXMgZ2VuZXJhdGVkLlxuICAgICAgaWYgKCF0aGlzLmVzbUF1dG9tYXRpY0ltcG9ydE5hbWVSZXNvbHV0aW9uc1tmdW5jTmFtZV0pIHtcbiAgICAgICAgdGhpcy5lc21BdXRvbWF0aWNJbXBvcnROYW1lUmVzb2x1dGlvbnNbZnVuY05hbWVdID0gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFxuICAgICAgICAgIGBfJHtmdW5jTmFtZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZXNtQXV0b21hdGljSW1wb3J0TmFtZVJlc29sdXRpb25zW2Z1bmNOYW1lXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgZmlyc3QgcGFydCBvZiBhIHRhZywgYmVmb3JlIGFueSBwcm9wcy5cbiAgICovXG4gIHByb2Nlc3NUYWdJbnRybygpIHtcbiAgICAvLyBXYWxrIGZvcndhcmQgdW50aWwgd2Ugc2VlIG9uZSBvZiB0aGVzZSBwYXR0ZXJuczpcbiAgICAvLyBqc3hOYW1lIHRvIHN0YXJ0IHRoZSBmaXJzdCBwcm9wLCBwcmVjZWRlZCBieSBhbm90aGVyIGpzeE5hbWUgdG8gZW5kIHRoZSB0YWcgbmFtZS5cbiAgICAvLyBqc3hOYW1lIHRvIHN0YXJ0IHRoZSBmaXJzdCBwcm9wLCBwcmVjZWRlZCBieSBncmVhdGVyVGhhbiB0byBlbmQgdGhlIHR5cGUgYXJndW1lbnQuXG4gICAgLy8gW29wZW4gYnJhY2VdIHRvIHN0YXJ0IHRoZSBmaXJzdCBwcm9wLlxuICAgIC8vIFtqc3hUYWdFbmRdIHRvIGVuZCB0aGUgb3Blbi10YWcuXG4gICAgLy8gW3NsYXNoLCBqc3hUYWdFbmRdIHRvIGVuZCB0aGUgc2VsZi1jbG9zaW5nIHRhZy5cbiAgICBsZXQgaW50cm9FbmQgPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDE7XG4gICAgd2hpbGUgKFxuICAgICAgdGhpcy50b2tlbnMudG9rZW5zW2ludHJvRW5kXS5pc1R5cGUgfHxcbiAgICAgICghdGhpcy50b2tlbnMubWF0Y2hlczJBdEluZGV4KGludHJvRW5kIC0gMSwgX3R5cGVzLlRva2VuVHlwZS5qc3hOYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW50cm9FbmQgLSAxLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuLCBfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpICYmXG4gICAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW50cm9FbmQsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSAmJlxuICAgICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGludHJvRW5kLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCkgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbnRyb0VuZCwgX3R5cGVzLlRva2VuVHlwZS5zbGFzaCwgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdFbmQpKVxuICAgICkge1xuICAgICAgaW50cm9FbmQrKztcbiAgICB9XG4gICAgaWYgKGludHJvRW5kID09PSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgICAgaWYgKHN0YXJ0c1dpdGhMb3dlckNhc2UodGFnTmFtZSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAnJHt0YWdOYW1lfSdgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgaW50cm9FbmQpIHtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9wcywgYWRkIHRoZSBwcm9wcyBhcmd1bWVudCB0b1xuICAgKiBSZWFjdC5jcmVhdGVFbGVtZW50LCBpbmNsdWRpbmcgdGhlIGNvbW1hIGJlZm9yZSBpdC5cbiAgICovXG4gIHByb2Nlc3NQcm9wc09iamVjdFdpdGhEZXZJbmZvKGVsZW1lbnRMb2NhdGlvbkNvZGUpIHtcbiAgICBjb25zdCBkZXZQcm9wcyA9IHRoaXMub3B0aW9ucy5wcm9kdWN0aW9uXG4gICAgICA/IFwiXCJcbiAgICAgIDogYF9fc2VsZjogdGhpcywgX19zb3VyY2U6ICR7dGhpcy5nZXREZXZTb3VyY2UoZWxlbWVudExvY2F0aW9uQ29kZSl9YDtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4TmFtZSkgJiYgIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgaWYgKGRldlByb3BzKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCwgeyR7ZGV2UHJvcHN9fWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgLCBudWxsYCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCwge2ApO1xuICAgIHRoaXMucHJvY2Vzc1Byb3BzKGZhbHNlKTtcbiAgICBpZiAoZGV2UHJvcHMpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCAke2RldlByb3BzfX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIn1cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGUgY29yZSBwYXJ0IG9mIHRoZSBwcm9wcywgYXNzdW1pbmcgdGhhdCBhIHsgaGFzIGFscmVhZHkgYmVlblxuICAgKiBpbnNlcnRlZCBiZWZvcmUgdXMgYW5kIHRoYXQgYSB9IHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgdXMuXG4gICAqXG4gICAqIElmIGV4dHJhY3RLZXlDb2RlIGlzIHRydWUgKGkuZS4gd2hlbiB1c2luZyBhbnkganN4Li4uIGZ1bmN0aW9uKSwgYW55IHByb3BcbiAgICogbmFtZWQgXCJrZXlcIiBoYXMgaXRzIGNvZGUgY2FwdHVyZWQgYW5kIHJldHVybmVkIHJhdGhlciB0aGFuIGJlaW5nIGVtaXR0ZWQgdG9cbiAgICogdGhlIG91dHB1dCBjb2RlLiBUaGlzIHNoaWZ0cyBsaW5lIG51bWJlcnMsIGFuZCBlbWl0dGluZyB0aGUgY29kZSBsYXRlciB3aWxsXG4gICAqIGNvcnJlY3QgbGluZSBudW1iZXJzIGFnYWluLiBJZiBubyBrZXkgaXMgZm91bmQgb3IgaWYgZXh0cmFjdEtleUNvZGUgaXNcbiAgICogZmFsc2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBudWxsLlxuICAgKi9cbiAgcHJvY2Vzc1Byb3BzKGV4dHJhY3RLZXlDb2RlKSB7XG4gICAgbGV0IGtleUNvZGUgPSBudWxsO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5qc3hOYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBrZXk9e3ZhbHVlfSBvciBrZXk9XCJ2YWx1ZVwiIHByb3AuXG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICAgICAgaWYgKGV4dHJhY3RLZXlDb2RlICYmIHByb3BOYW1lID09PSBcImtleVwiKSB7XG4gICAgICAgICAgaWYgKGtleUNvZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBwcm9wcyBsaXN0IGhhcyBtdWx0aXBsZSBrZXlzLiBEaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIGFyZVxuICAgICAgICAgICAgLy8gaW5jb25zaXN0ZW50IGFib3V0IHdoYXQgdG8gZG8gaGVyZTogYXMgb2YgdGhpcyB3cml0aW5nLCBCYWJlbCBhbmRcbiAgICAgICAgICAgIC8vIHN3YyBrZWVwIHRoZSAqbGFzdCoga2V5IGFuZCBjb21wbGV0ZWx5IHJlbW92ZSB0aGUgcmVzdCwgd2hpbGVcbiAgICAgICAgICAgIC8vIFR5cGVTY3JpcHQgdXNlcyB0aGUgKmZpcnN0KiBrZXkgYW5kIGxlYXZlcyB0aGUgb3RoZXJzIGFzIHJlZ3VsYXJcbiAgICAgICAgICAgIC8vIHByb3BzLiBUaGUgUmVhY3QgdGVhbSBjb2xsYWJvcmF0ZWQgd2l0aCBCYWJlbCBvbiB0aGVcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgYmVoYXZpb3IsIHNvIHByZXN1bWFibHkgdGhlIEJhYmVsIGJlaGF2aW9yXG4gICAgICAgICAgICAvLyBpcyB0aGUgb25lIHRvIHVzZS5cbiAgICAgICAgICAgIC8vIFNpbmNlIHdlIHdvbid0IGV2ZXIgYmUgZW1pdHRpbmcgdGhlIHByZXZpb3VzIGtleSBjb2RlLCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBlbWl0IGl0cyBuZXdsaW5lcyBoZXJlIHNvIHRoYXQgdGhlIGxpbmUgbnVtYmVycyBtYXRjaCB1cFxuICAgICAgICAgICAgLy8gaW4gdGhlIGxvbmcgcnVuLlxuICAgICAgICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShrZXlDb2RlLnJlcGxhY2UoL1teXFxuXS9nLCBcIlwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGtleVxuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgLy8gPVxuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnRva2Vucy5zbmFwc2hvdCgpO1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1Byb3BWYWx1ZSgpO1xuICAgICAgICAgIGtleUNvZGUgPSB0aGlzLnRva2Vucy5kYW5nZXJvdXNseUdldEFuZFJlbW92ZUNvZGVTaW5jZVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgICAgICAvLyBEb24ndCBhZGQgYSBjb21tYVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1Byb3BOYW1lKHByb3BOYW1lKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCI6IFwiKTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NQcm9wVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydGhhbmQgcHJvcCBsaWtlIDxpbnB1dCBkaXNhYmxlZCAvPi5cbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgICAgICB0aGlzLnByb2Nlc3NQcm9wTmFtZShwcm9wTmFtZSk7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCI6IHRydWVcIik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgICAvLyBUaGlzIGlzIHByb3Agc3ByZWFkLCBsaWtlIDxkaXYgey4uLmdldFByb3BzKCl9Piwgd2hpY2ggd2UgY2FuIHBhc3NcbiAgICAgICAgLy8gdGhyb3VnaCBmYWlybHkgZGlyZWN0bHkgYXMgYW4gb2JqZWN0IHNwcmVhZC5cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIixcIik7XG4gICAgfVxuICAgIHJldHVybiBrZXlDb2RlO1xuICB9XG5cbiAgcHJvY2Vzc1Byb3BOYW1lKHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAnJHtwcm9wTmFtZX0nYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NQcm9wVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0pTWFRhZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2Nlc3NTdHJpbmdQcm9wVmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU3RyaW5nUHJvcFZhbHVlKCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCk7XG4gICAgY29uc3QgdmFsdWVDb2RlID0gdGhpcy50b2tlbnMuY29kZS5zbGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50Q29kZSA9IGZvcm1hdEpTWFRleHRSZXBsYWNlbWVudCh2YWx1ZUNvZGUpO1xuICAgIGNvbnN0IGxpdGVyYWxDb2RlID0gZm9ybWF0SlNYU3RyaW5nVmFsdWVMaXRlcmFsKHZhbHVlQ29kZSk7XG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGxpdGVyYWxDb2RlICsgcmVwbGFjZW1lbnRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydGluZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9wcyBvYmplY3QgbGl0ZXJhbCwgcHJvZHVjZSBhbiBhZGRpdGlvbmFsXG4gICAqIHByb3AgZm9yIHRoZSBjaGlsZHJlbiBhbmQgY2xvc2UgdGhlIG9iamVjdCBsaXRlcmFsLlxuICAgKi9cbiAgcHJvY2Vzc0F1dG9tYXRpY0NoaWxkcmVuQW5kRW5kUHJvcHMoanN4Um9sZSkge1xuICAgIGlmIChqc3hSb2xlID09PSBfdG9rZW5pemVyLkpTWFJvbGUuU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIgY2hpbGRyZW46IFtcIik7XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbihmYWxzZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiXX1cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJzZXIgaW5mb3JtYXRpb24gdGVsbHMgdXMgd2hldGhlciB3ZSB3aWxsIHNlZSBhIHJlYWwgY2hpbGQgb3IgaWZcbiAgICAgIC8vIGFsbCByZW1haW5pbmcgY2hpbGRyZW4gKGlmIGFueSkgd2lsbCByZXNvbHZlIHRvIGVtcHR5LiBJZiB0aGVyZSBhcmUgbm9cbiAgICAgIC8vIG5vbi1lbXB0eSBjaGlsZHJlbiwgZG9uJ3QgZW1pdCBhIGNoaWxkcmVuIHByb3AgYXQgYWxsLCBidXQgc3RpbGxcbiAgICAgIC8vIHByb2Nlc3MgY2hpbGRyZW4gc28gdGhhdCB3ZSBwcm9wZXJseSB0cmFuc2Zvcm0gdGhlIGNvZGUgaW50byBub3RoaW5nLlxuICAgICAgaWYgKGpzeFJvbGUgPT09IF90b2tlbml6ZXIuSlNYUm9sZS5PbmVDaGlsZCkge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiIGNoaWxkcmVuOiBcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NDaGlsZHJlbihmYWxzZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwifVwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGNoaWxkcmVuIGludG8gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgd2hpY2ggd2lsbCBiZSBlaXRoZXJcbiAgICogYXJndW1lbnRzIHRvIGNyZWF0ZUVsZW1lbnQgb3IgYXJyYXkgZWxlbWVudHMgb2YgYSBjaGlsZHJlbiBwcm9wLlxuICAgKi9cbiAgcHJvY2Vzc0NoaWxkcmVuKG5lZWRzSW5pdGlhbENvbW1hKSB7XG4gICAgbGV0IG5lZWRzQ29tbWEgPSBuZWVkc0luaXRpYWxDb21tYTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnU3RhcnQsIF90eXBlcy5Ub2tlblR5cGUuc2xhc2gpKSB7XG4gICAgICAgIC8vIENsb3NpbmcgdGFnLCBzbyBubyBtb3JlIGNoaWxkcmVuLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZGlkRW1pdEVsZW1lbnQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgICAvLyBFbXB0eSBpbnRlcnBvbGF0aW9ucyBhbmQgY29tbWVudC1vbmx5IGludGVycG9sYXRpb25zIGFyZSBhbGxvd2VkXG4gICAgICAgICAgLy8gYW5kIGRvbid0IGNyZWF0ZSBhbiBleHRyYSBjaGlsZCBhcmcuXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiXCIpO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJbnRlcnBvbGF0ZWQgZXhwcmVzc2lvbi5cbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4obmVlZHNDb21tYSA/IFwiLCBcIiA6IFwiXCIpO1xuICAgICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJcIik7XG4gICAgICAgICAgZGlkRW1pdEVsZW1lbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4VGFnU3RhcnQpKSB7XG4gICAgICAgIC8vIENoaWxkIEpTWCBlbGVtZW50XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUobmVlZHNDb21tYSA/IFwiLCBcIiA6IFwiXCIpO1xuICAgICAgICB0aGlzLnByb2Nlc3NKU1hUYWcoKTtcbiAgICAgICAgZGlkRW1pdEVsZW1lbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeFRleHQpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuanN4RW1wdHlUZXh0KSkge1xuICAgICAgICBkaWRFbWl0RWxlbWVudCA9IHRoaXMucHJvY2Vzc0NoaWxkVGV4dEVsZW1lbnQobmVlZHNDb21tYSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHRva2VuIHdoZW4gcHJvY2Vzc2luZyBKU1ggY2hpbGRyZW4uXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGRpZEVtaXRFbGVtZW50KSB7XG4gICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIGEgSlNYIHRleHQgZWxlbWVudCBpbnRvIGEgc3RyaW5nIGxpdGVyYWwsIG9yIG5vdGhpbmcgYXQgYWxsIGlmIHRoZSBKU1hcbiAgICogdGV4dCByZXNvbHZlcyB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBzdHJpbmcgbGl0ZXJhbCBpcyBlbWl0dGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm9jZXNzQ2hpbGRUZXh0RWxlbWVudChuZWVkc0NvbW1hKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBjb25zdCB2YWx1ZUNvZGUgPSB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50Q29kZSA9IGZvcm1hdEpTWFRleHRSZXBsYWNlbWVudCh2YWx1ZUNvZGUpO1xuICAgIGNvbnN0IGxpdGVyYWxDb2RlID0gZm9ybWF0SlNYVGV4dExpdGVyYWwodmFsdWVDb2RlKTtcbiAgICBpZiAobGl0ZXJhbENvZGUgPT09ICdcIlwiJykge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHJlcGxhY2VtZW50Q29kZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtuZWVkc0NvbW1hID8gXCIsIFwiIDogXCJcIn0ke2xpdGVyYWxDb2RlfSR7cmVwbGFjZW1lbnRDb2RlfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV2U291cmNlKGVsZW1lbnRMb2NhdGlvbkNvZGUpIHtcbiAgICByZXR1cm4gYHtmaWxlTmFtZTogJHt0aGlzLmdldEZpbGVuYW1lVmFyTmFtZSgpfSwgJHtlbGVtZW50TG9jYXRpb25Db2RlfX1gO1xuICB9XG5cbiAgZ2V0RmlsZW5hbWVWYXJOYW1lKCkge1xuICAgIGlmICghdGhpcy5maWxlbmFtZVZhck5hbWUpIHtcbiAgICAgIHRoaXMuZmlsZW5hbWVWYXJOYW1lID0gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX2pzeEZpbGVOYW1lXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWxlbmFtZVZhck5hbWU7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gSlNYVHJhbnNmb3JtZXI7XG5cbi8qKlxuICogU3BlYyBmb3IgaWRlbnRpZmllcnM6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jcHJvZC1JZGVudGlmaWVyU3RhcnQuXG4gKlxuICogUmVhbGx5IG9ubHkgdHJlYXQgYW55dGhpbmcgc3RhcnRpbmcgd2l0aCBhLXogYXMgdGFnIG5hbWVzLiAgYF9gLCBgJGAsIGBcdTAwRTlgXG4gKiBzaG91bGQgYmUgdHJlYXRlZCBhcyBjb21wb25lbnQgbmFtZXNcbiAqL1xuIGZ1bmN0aW9uIHN0YXJ0c1dpdGhMb3dlckNhc2Uocykge1xuICBjb25zdCBmaXJzdENoYXIgPSBzLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiBmaXJzdENoYXIgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlQSAmJiBmaXJzdENoYXIgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlWjtcbn0gZXhwb3J0cy5zdGFydHNXaXRoTG93ZXJDYXNlID0gc3RhcnRzV2l0aExvd2VyQ2FzZTtcblxuLyoqXG4gKiBUdXJuIHRoZSBnaXZlbiBqc3hUZXh0IHN0cmluZyBpbnRvIGEgSlMgc3RyaW5nIGxpdGVyYWwuIExlYWRpbmcgYW5kIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIG9uIGxpbmVzIGlzIHJlbW92ZWQsIGV4Y2VwdCBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3Blbi10YWcgYW5kXG4gKiBiZWZvcmUgdGhlIGNsb3NlLXRhZy4gRW1wdHkgbGluZXMgYXJlIGNvbXBsZXRlbHkgcmVtb3ZlZCwgYW5kIHNwYWNlcyBhcmVcbiAqIGFkZGVkIGJldHdlZW4gbGluZXMgYWZ0ZXIgdGhhdC5cbiAqXG4gKiBXZSB1c2UgSlNPTi5zdHJpbmdpZnkgdG8gaW50cm9kdWNlIGVzY2FwZSBjaGFyYWN0ZXJzIGFzIG5lY2Vzc2FyeSwgYW5kIHRyaW1cbiAqIHRoZSBzdGFydCBhbmQgZW5kIG9mIGVhY2ggbGluZSBhbmQgcmVtb3ZlIGJsYW5rIGxpbmVzLlxuICovXG5mdW5jdGlvbiBmb3JtYXRKU1hUZXh0TGl0ZXJhbCh0ZXh0KSB7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBsZXQgd2hpdGVzcGFjZSA9IFwiXCI7XG5cbiAgbGV0IGlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UgPSBmYWxzZTtcbiAgbGV0IHNlZW5Ob25XaGl0ZXNwYWNlID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGMgPSB0ZXh0W2ldO1xuICAgIGlmIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxyXCIpIHtcbiAgICAgIGlmICghaXNJbkluaXRpYWxMaW5lV2hpdGVzcGFjZSkge1xuICAgICAgICB3aGl0ZXNwYWNlICs9IGM7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjID09PSBcIlxcblwiKSB7XG4gICAgICB3aGl0ZXNwYWNlID0gXCJcIjtcbiAgICAgIGlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2Vlbk5vbldoaXRlc3BhY2UgJiYgaXNJbkluaXRpYWxMaW5lV2hpdGVzcGFjZSkge1xuICAgICAgICByZXN1bHQgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICByZXN1bHQgKz0gd2hpdGVzcGFjZTtcbiAgICAgIHdoaXRlc3BhY2UgPSBcIlwiO1xuICAgICAgaWYgKGMgPT09IFwiJlwiKSB7XG4gICAgICAgIGNvbnN0IHtlbnRpdHksIG5ld0l9ID0gcHJvY2Vzc0VudGl0eSh0ZXh0LCBpICsgMSk7XG4gICAgICAgIGkgPSBuZXdJIC0gMTtcbiAgICAgICAgcmVzdWx0ICs9IGVudGl0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBjO1xuICAgICAgfVxuICAgICAgc2Vlbk5vbldoaXRlc3BhY2UgPSB0cnVlO1xuICAgICAgaXNJbkluaXRpYWxMaW5lV2hpdGVzcGFjZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzSW5Jbml0aWFsTGluZVdoaXRlc3BhY2UpIHtcbiAgICByZXN1bHQgKz0gd2hpdGVzcGFjZTtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcbn1cblxuLyoqXG4gKiBQcm9kdWNlIHRoZSBjb2RlIHRoYXQgc2hvdWxkIGJlIHByaW50ZWQgYWZ0ZXIgdGhlIEpTWCB0ZXh0IHN0cmluZyBsaXRlcmFsLFxuICogd2l0aCBtb3N0IGNvbnRlbnQgcmVtb3ZlZCwgYnV0IGFsbCBuZXdsaW5lcyBwcmVzZXJ2ZWQgYW5kIGFsbCBzcGFjaW5nIGF0IHRoZVxuICogZW5kIHByZXNlcnZlZC5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SlNYVGV4dFJlcGxhY2VtZW50KHRleHQpIHtcbiAgbGV0IG51bU5ld2xpbmVzID0gMDtcbiAgbGV0IG51bVNwYWNlcyA9IDA7XG4gIGZvciAoY29uc3QgYyBvZiB0ZXh0KSB7XG4gICAgaWYgKGMgPT09IFwiXFxuXCIpIHtcbiAgICAgIG51bU5ld2xpbmVzKys7XG4gICAgICBudW1TcGFjZXMgPSAwO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gXCIgXCIpIHtcbiAgICAgIG51bVNwYWNlcysrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gXCJcXG5cIi5yZXBlYXQobnVtTmV3bGluZXMpICsgXCIgXCIucmVwZWF0KG51bVNwYWNlcyk7XG59XG5cbi8qKlxuICogRm9ybWF0IGEgc3RyaW5nIGluIHRoZSB2YWx1ZSBwb3NpdGlvbiBvZiBhIEpTWCBwcm9wLlxuICpcbiAqIFVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyBjb252ZXJ0QXR0cmlidXRlIGZyb21cbiAqIGJhYmVsLWhlbHBlci1idWlsZGVyLXJlYWN0LWpzeC5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SlNYU3RyaW5nVmFsdWVMaXRlcmFsKHRleHQpIHtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGMgPSB0ZXh0W2ldO1xuICAgIGlmIChjID09PSBcIlxcblwiKSB7XG4gICAgICBpZiAoL1xccy8udGVzdCh0ZXh0W2kgKyAxXSkpIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xuICAgICAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoICYmIC9cXHMvLnRlc3QodGV4dFtpICsgMV0pKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gXCJcXG5cIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGMgPT09IFwiJlwiKSB7XG4gICAgICBjb25zdCB7ZW50aXR5LCBuZXdJfSA9IHByb2Nlc3NFbnRpdHkodGV4dCwgaSArIDEpO1xuICAgICAgcmVzdWx0ICs9IGVudGl0eTtcbiAgICAgIGkgPSBuZXdJIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXN1bHQpO1xufVxuXG4vKipcbiAqIFN0YXJ0aW5nIGF0IGEgJiwgc2VlIGlmIHRoZXJlJ3MgYW4gSFRNTCBlbnRpdHkgKHNwZWNpZmllZCBieSBuYW1lLCBkZWNpbWFsXG4gKiBjaGFyIGNvZGUsIG9yIGhleCBjaGFyIGNvZGUpIGFuZCByZXR1cm4gaXQgaWYgc28uXG4gKlxuICogTW9kaWZpZWQgZnJvbSBqc3hSZWFkU3RyaW5nIGluIGJhYmVsLXBhcnNlci5cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0VudGl0eSh0ZXh0LCBpbmRleEFmdGVyQW1wZXJzYW5kKSB7XG4gIGxldCBzdHIgPSBcIlwiO1xuICBsZXQgY291bnQgPSAwO1xuICBsZXQgZW50aXR5O1xuICBsZXQgaSA9IGluZGV4QWZ0ZXJBbXBlcnNhbmQ7XG5cbiAgaWYgKHRleHRbaV0gPT09IFwiI1wiKSB7XG4gICAgbGV0IHJhZGl4ID0gMTA7XG4gICAgaSsrO1xuICAgIGxldCBudW1TdGFydDtcbiAgICBpZiAodGV4dFtpXSA9PT0gXCJ4XCIpIHtcbiAgICAgIHJhZGl4ID0gMTY7XG4gICAgICBpKys7XG4gICAgICBudW1TdGFydCA9IGk7XG4gICAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoICYmIGlzSGV4RGlnaXQodGV4dC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bVN0YXJ0ID0gaTtcbiAgICAgIHdoaWxlIChpIDwgdGV4dC5sZW5ndGggJiYgaXNEZWNpbWFsRGlnaXQodGV4dC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0ZXh0W2ldID09PSBcIjtcIikge1xuICAgICAgY29uc3QgbnVtU3RyID0gdGV4dC5zbGljZShudW1TdGFydCwgaSk7XG4gICAgICBpZiAobnVtU3RyKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgZW50aXR5ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQobnVtU3RyLCByYWRpeCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoICYmIGNvdW50KysgPCAxMCkge1xuICAgICAgY29uc3QgY2ggPSB0ZXh0W2ldO1xuICAgICAgaSsrO1xuICAgICAgaWYgKGNoID09PSBcIjtcIikge1xuICAgICAgICBlbnRpdHkgPSBfeGh0bWwyLmRlZmF1bHQuZ2V0KHN0cik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RyICs9IGNoO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZW50aXR5KSB7XG4gICAgcmV0dXJuIHtlbnRpdHk6IFwiJlwiLCBuZXdJOiBpbmRleEFmdGVyQW1wZXJzYW5kfTtcbiAgfVxuICByZXR1cm4ge2VudGl0eSwgbmV3STogaX07XG59XG5cbmZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0KGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQwICYmIGNvZGUgPD0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGlnaXQ5O1xufVxuXG5mdW5jdGlvbiBpc0hleERpZ2l0KGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAoY29kZSA+PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDAgJiYgY29kZSA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kaWdpdDkpIHx8XG4gICAgKGNvZGUgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlQSAmJiBjb2RlIDw9IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZUYpIHx8XG4gICAgKGNvZGUgPj0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMudXBwZXJjYXNlQSAmJiBjb2RlIDw9IF9jaGFyY29kZXMuY2hhckNvZGVzLnVwcGVyY2FzZUYpXG4gICk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplcicpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxudmFyIF9KU1hUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4uL3RyYW5zZm9ybWVycy9KU1hUcmFuc2Zvcm1lcicpO1xudmFyIF9nZXRKU1hQcmFnbWFJbmZvID0gcmVxdWlyZSgnLi9nZXRKU1hQcmFnbWFJbmZvJyk7IHZhciBfZ2V0SlNYUHJhZ21hSW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRKU1hQcmFnbWFJbmZvKTtcblxuIGZ1bmN0aW9uIGdldE5vblR5cGVJZGVudGlmaWVycyh0b2tlbnMsIG9wdGlvbnMpIHtcbiAgY29uc3QganN4UHJhZ21hSW5mbyA9IF9nZXRKU1hQcmFnbWFJbmZvMi5kZWZhdWx0LmNhbGwodm9pZCAwLCBvcHRpb25zKTtcbiAgY29uc3Qgbm9uVHlwZUlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKFxuICAgICAgdG9rZW4udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lICYmXG4gICAgICAhdG9rZW4uaXNUeXBlICYmXG4gICAgICAodG9rZW4uaWRlbnRpZmllclJvbGUgPT09IF90b2tlbml6ZXIuSWRlbnRpZmllclJvbGUuQWNjZXNzIHx8XG4gICAgICAgIHRva2VuLmlkZW50aWZpZXJSb2xlID09PSBfdG9rZW5pemVyLklkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZCB8fFxuICAgICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gX3Rva2VuaXplci5JZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3MpICYmXG4gICAgICAhdG9rZW4uc2hhZG93c0dsb2JhbFxuICAgICkge1xuICAgICAgbm9uVHlwZUlkZW50aWZpZXJzLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbikpO1xuICAgIH1cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydCkge1xuICAgICAgbm9uVHlwZUlkZW50aWZpZXJzLmFkZChqc3hQcmFnbWFJbmZvLmJhc2UpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ1N0YXJ0ICYmXG4gICAgICBpICsgMSA8IHRva2Vucy50b2tlbnMubGVuZ3RoICYmXG4gICAgICB0b2tlbnMudG9rZW5zW2kgKyAxXS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZFxuICAgICkge1xuICAgICAgbm9uVHlwZUlkZW50aWZpZXJzLmFkZChqc3hQcmFnbWFJbmZvLmJhc2UpO1xuICAgICAgbm9uVHlwZUlkZW50aWZpZXJzLmFkZChqc3hQcmFnbWFJbmZvLmZyYWdtZW50QmFzZSk7XG4gICAgfVxuICAgIGlmICh0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUgJiYgdG9rZW4uaWRlbnRpZmllclJvbGUgPT09IF90b2tlbml6ZXIuSWRlbnRpZmllclJvbGUuQWNjZXNzKSB7XG4gICAgICBjb25zdCBpZGVudGlmaWVyTmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKTtcbiAgICAgIC8vIExvd2VyLWNhc2Ugc2luZ2xlLWNvbXBvbmVudCB0YWcgbmFtZXMgbGlrZSBcImRpdlwiIGRvbid0IGNvdW50LlxuICAgICAgaWYgKCFfSlNYVHJhbnNmb3JtZXIuc3RhcnRzV2l0aExvd2VyQ2FzZS5jYWxsKHZvaWQgMCwgaWRlbnRpZmllck5hbWUpIHx8IHRva2Vucy50b2tlbnNbaSArIDFdLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuZG90KSB7XG4gICAgICAgIG5vblR5cGVJZGVudGlmaWVycy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vblR5cGVJZGVudGlmaWVycztcbn0gZXhwb3J0cy5nZXROb25UeXBlSWRlbnRpZmllcnMgPSBnZXROb25UeXBlSWRlbnRpZmllcnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXG52YXIgX3Rva2VuaXplciA9IHJlcXVpcmUoJy4vcGFyc2VyL3Rva2VuaXplcicpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4vcGFyc2VyL3Rva2VuaXplci9rZXl3b3JkcycpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG52YXIgX2dldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8gPSByZXF1aXJlKCcuL3V0aWwvZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbycpOyB2YXIgX2dldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyk7XG52YXIgX2dldE5vblR5cGVJZGVudGlmaWVycyA9IHJlcXVpcmUoJy4vdXRpbC9nZXROb25UeXBlSWRlbnRpZmllcnMnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBDbGFzcyByZXNwb25zaWJsZSBmb3IgcHJlcHJvY2Vzc2luZyBhbmQgYm9va2tlZXBpbmcgaW1wb3J0IGFuZCBleHBvcnQgZGVjbGFyYXRpb25zIHdpdGhpbiB0aGVcbiAqIGZpbGUuXG4gKlxuICogVHlwZVNjcmlwdCB1c2VzIGEgc2ltcGxlciBtZWNoYW5pc20gdGhhdCBkb2VzIG5vdCB1c2UgZnVuY3Rpb25zIGxpa2UgaW50ZXJvcFJlcXVpcmVEZWZhdWx0IGFuZFxuICogaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCwgc28gd2UgYWxzbyBhbGxvdyB0aGF0IG1vZGUgZm9yIGNvbXBhdGliaWxpdHkuXG4gKi9cbiBjbGFzcyBDSlNJbXBvcnRQcm9jZXNzb3Ige1xuICAgX19pbml0KCkge3RoaXMubm9uVHlwZUlkZW50aWZpZXJzID0gbmV3IFNldCgpfVxuICAgX19pbml0MigpIHt0aGlzLmltcG9ydEluZm9CeVBhdGggPSBuZXcgTWFwKCl9XG4gICBfX2luaXQzKCkge3RoaXMuaW1wb3J0c1RvUmVwbGFjZSA9IG5ldyBNYXAoKX1cbiAgIF9faW5pdDQoKSB7dGhpcy5pZGVudGlmaWVyUmVwbGFjZW1lbnRzID0gbmV3IE1hcCgpfVxuICAgX19pbml0NSgpIHt0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUgPSBuZXcgTWFwKCl9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgIG5hbWVNYW5hZ2VyLFxuICAgICB0b2tlbnMsXG4gICAgIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wLFxuICAgICBvcHRpb25zLFxuICAgICBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICAgICBrZWVwVW51c2VkSW1wb3J0cyxcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgKSB7O3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wID0gZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3A7dGhpcy5vcHRpb25zID0gb3B0aW9uczt0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgPSBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkO3RoaXMua2VlcFVudXNlZEltcG9ydHMgPSBrZWVwVW51c2VkSW1wb3J0czt0aGlzLmhlbHBlck1hbmFnZXIgPSBoZWxwZXJNYW5hZ2VyO0NKU0ltcG9ydFByb2Nlc3Nvci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQ0LmNhbGwodGhpcyk7Q0pTSW1wb3J0UHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQ1LmNhbGwodGhpcyk7fVxuXG4gIHByZXByb2Nlc3NUb2tlbnMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCkgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMzQXRJbmRleChpLCBfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5lcSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NJbXBvcnRBdEluZGV4KGkpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0KSAmJlxuICAgICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczJBdEluZGV4KGksIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5lcSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NFeHBvcnRBdEluZGV4KGkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmdlbmVyYXRlSW1wb3J0UmVwbGFjZW1lbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSW4gVHlwZVNjcmlwdCwgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBvbmx5IGltcG9ydCB0eXBlcyBzaG91bGQgYmUgcmVtb3ZlZC5cbiAgICogVGhpcyBpbmNsdWRlcyBgaW1wb3J0IHt9IGZyb20gJ2Zvbyc7YCwgYnV0IG5vdCBgaW1wb3J0ICdmb28nO2AuXG4gICAqL1xuICBwcnVuZVR5cGVPbmx5SW1wb3J0cygpIHtcbiAgICB0aGlzLm5vblR5cGVJZGVudGlmaWVycyA9IF9nZXROb25UeXBlSWRlbnRpZmllcnMuZ2V0Tm9uVHlwZUlkZW50aWZpZXJzLmNhbGwodm9pZCAwLCB0aGlzLnRva2VucywgdGhpcy5vcHRpb25zKTtcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBpbXBvcnRJbmZvXSBvZiB0aGlzLmltcG9ydEluZm9CeVBhdGguZW50cmllcygpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydEluZm8uaGFzQmFyZUltcG9ydCB8fFxuICAgICAgICBpbXBvcnRJbmZvLmhhc1N0YXJFeHBvcnQgfHxcbiAgICAgICAgaW1wb3J0SW5mby5leHBvcnRTdGFyTmFtZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICBpbXBvcnRJbmZvLm5hbWVkRXhwb3J0cy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lcyA9IFtcbiAgICAgICAgLi4uaW1wb3J0SW5mby5kZWZhdWx0TmFtZXMsXG4gICAgICAgIC4uLmltcG9ydEluZm8ud2lsZGNhcmROYW1lcyxcbiAgICAgICAgLi4uaW1wb3J0SW5mby5uYW1lZEltcG9ydHMubWFwKCh7bG9jYWxOYW1lfSkgPT4gbG9jYWxOYW1lKSxcbiAgICAgIF07XG4gICAgICBpZiAobmFtZXMuZXZlcnkoKG5hbWUpID0+IHRoaXMuc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKG5hbWUpKSkge1xuICAgICAgICB0aGlzLmltcG9ydHNUb1JlcGxhY2Uuc2V0KHBhdGgsIFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJlxuICAgICAgIXRoaXMua2VlcFVudXNlZEltcG9ydHMgJiZcbiAgICAgICF0aGlzLm5vblR5cGVJZGVudGlmaWVycy5oYXMobmFtZSlcbiAgICApO1xuICB9XG5cbiAgIGdlbmVyYXRlSW1wb3J0UmVwbGFjZW1lbnRzKCkge1xuICAgIGZvciAoY29uc3QgW3BhdGgsIGltcG9ydEluZm9dIG9mIHRoaXMuaW1wb3J0SW5mb0J5UGF0aC5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGVmYXVsdE5hbWVzLFxuICAgICAgICB3aWxkY2FyZE5hbWVzLFxuICAgICAgICBuYW1lZEltcG9ydHMsXG4gICAgICAgIG5hbWVkRXhwb3J0cyxcbiAgICAgICAgZXhwb3J0U3Rhck5hbWVzLFxuICAgICAgICBoYXNTdGFyRXhwb3J0LFxuICAgICAgfSA9IGltcG9ydEluZm87XG5cbiAgICAgIGlmIChcbiAgICAgICAgZGVmYXVsdE5hbWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICB3aWxkY2FyZE5hbWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICBuYW1lZEltcG9ydHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIG5hbWVkRXhwb3J0cy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgZXhwb3J0U3Rhck5hbWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAhaGFzU3RhckV4cG9ydFxuICAgICAgKSB7XG4gICAgICAgIC8vIEltcG9ydCBpcyBuZXZlciB1c2VkLCBzbyBkb24ndCBldmVuIGFzc2lnbiBhIG5hbWUuXG4gICAgICAgIHRoaXMuaW1wb3J0c1RvUmVwbGFjZS5zZXQocGF0aCwgYHJlcXVpcmUoJyR7cGF0aH0nKTtgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1hcnlJbXBvcnROYW1lID0gdGhpcy5nZXRGcmVlSWRlbnRpZmllckZvclBhdGgocGF0aCk7XG4gICAgICBsZXQgc2Vjb25kYXJ5SW1wb3J0TmFtZTtcbiAgICAgIGlmICh0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wKSB7XG4gICAgICAgIHNlY29uZGFyeUltcG9ydE5hbWUgPSBwcmltYXJ5SW1wb3J0TmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZGFyeUltcG9ydE5hbWUgPVxuICAgICAgICAgIHdpbGRjYXJkTmFtZXMubGVuZ3RoID4gMCA/IHdpbGRjYXJkTmFtZXNbMF0gOiB0aGlzLmdldEZyZWVJZGVudGlmaWVyRm9yUGF0aChwYXRoKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXF1aXJlQ29kZSA9IGB2YXIgJHtwcmltYXJ5SW1wb3J0TmFtZX0gPSByZXF1aXJlKCcke3BhdGh9Jyk7YDtcbiAgICAgIGlmICh3aWxkY2FyZE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCB3aWxkY2FyZE5hbWUgb2Ygd2lsZGNhcmROYW1lcykge1xuICAgICAgICAgIGNvbnN0IG1vZHVsZUV4cHIgPSB0aGlzLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wXG4gICAgICAgICAgICA/IHByaW1hcnlJbXBvcnROYW1lXG4gICAgICAgICAgICA6IGAke3RoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiaW50ZXJvcFJlcXVpcmVXaWxkY2FyZFwiKX0oJHtwcmltYXJ5SW1wb3J0TmFtZX0pYDtcbiAgICAgICAgICByZXF1aXJlQ29kZSArPSBgIHZhciAke3dpbGRjYXJkTmFtZX0gPSAke21vZHVsZUV4cHJ9O2A7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXhwb3J0U3Rhck5hbWVzLmxlbmd0aCA+IDAgJiYgc2Vjb25kYXJ5SW1wb3J0TmFtZSAhPT0gcHJpbWFyeUltcG9ydE5hbWUpIHtcbiAgICAgICAgcmVxdWlyZUNvZGUgKz0gYCB2YXIgJHtzZWNvbmRhcnlJbXBvcnROYW1lfSA9ICR7dGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXG4gICAgICAgICAgXCJpbnRlcm9wUmVxdWlyZVdpbGRjYXJkXCIsXG4gICAgICAgICl9KCR7cHJpbWFyeUltcG9ydE5hbWV9KTtgO1xuICAgICAgfSBlbHNlIGlmIChkZWZhdWx0TmFtZXMubGVuZ3RoID4gMCAmJiBzZWNvbmRhcnlJbXBvcnROYW1lICE9PSBwcmltYXJ5SW1wb3J0TmFtZSkge1xuICAgICAgICByZXF1aXJlQ29kZSArPSBgIHZhciAke3NlY29uZGFyeUltcG9ydE5hbWV9ID0gJHt0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcbiAgICAgICAgICBcImludGVyb3BSZXF1aXJlRGVmYXVsdFwiLFxuICAgICAgICApfSgke3ByaW1hcnlJbXBvcnROYW1lfSk7YDtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB7aW1wb3J0ZWROYW1lLCBsb2NhbE5hbWV9IG9mIG5hbWVkRXhwb3J0cykge1xuICAgICAgICByZXF1aXJlQ29kZSArPSBgICR7dGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXG4gICAgICAgICAgXCJjcmVhdGVOYW1lZEV4cG9ydEZyb21cIixcbiAgICAgICAgKX0oJHtwcmltYXJ5SW1wb3J0TmFtZX0sICcke2xvY2FsTmFtZX0nLCAnJHtpbXBvcnRlZE5hbWV9Jyk7YDtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZXhwb3J0U3Rhck5hbWUgb2YgZXhwb3J0U3Rhck5hbWVzKSB7XG4gICAgICAgIHJlcXVpcmVDb2RlICs9IGAgZXhwb3J0cy4ke2V4cG9ydFN0YXJOYW1lfSA9ICR7c2Vjb25kYXJ5SW1wb3J0TmFtZX07YDtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNTdGFyRXhwb3J0KSB7XG4gICAgICAgIHJlcXVpcmVDb2RlICs9IGAgJHt0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcbiAgICAgICAgICBcImNyZWF0ZVN0YXJFeHBvcnRcIixcbiAgICAgICAgKX0oJHtwcmltYXJ5SW1wb3J0TmFtZX0pO2A7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW1wb3J0c1RvUmVwbGFjZS5zZXQocGF0aCwgcmVxdWlyZUNvZGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRlZmF1bHROYW1lIG9mIGRlZmF1bHROYW1lcykge1xuICAgICAgICB0aGlzLmlkZW50aWZpZXJSZXBsYWNlbWVudHMuc2V0KGRlZmF1bHROYW1lLCBgJHtzZWNvbmRhcnlJbXBvcnROYW1lfS5kZWZhdWx0YCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHtpbXBvcnRlZE5hbWUsIGxvY2FsTmFtZX0gb2YgbmFtZWRJbXBvcnRzKSB7XG4gICAgICAgIHRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5zZXQobG9jYWxOYW1lLCBgJHtwcmltYXJ5SW1wb3J0TmFtZX0uJHtpbXBvcnRlZE5hbWV9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RnJlZUlkZW50aWZpZXJGb3JQYXRoKHBhdGgpIHtcbiAgICBjb25zdCBjb21wb25lbnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgbGFzdENvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGxhc3RDb21wb25lbnQucmVwbGFjZSgvXFxXL2csIFwiXCIpO1xuICAgIHJldHVybiB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoYF8ke2Jhc2VOYW1lfWApO1xuICB9XG5cbiAgIHByZXByb2Nlc3NJbXBvcnRBdEluZGV4KGluZGV4KSB7XG4gICAgY29uc3QgZGVmYXVsdE5hbWVzID0gW107XG4gICAgY29uc3Qgd2lsZGNhcmROYW1lcyA9IFtdO1xuICAgIGNvbnN0IG5hbWVkSW1wb3J0cyA9IFtdO1xuXG4gICAgaW5kZXgrKztcbiAgICBpZiAoXG4gICAgICAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGluZGV4LCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5fdHlwZW9mKSkgJiZcbiAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggKyAxLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleChpbmRleCArIDEsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSlcbiAgICApIHtcbiAgICAgIC8vIGltcG9ydCB0eXBlIGRlY2xhcmF0aW9uLCBzbyBubyBuZWVkIHRvIHByb2Nlc3MgYW55dGhpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICAvLyBEeW5hbWljIGltcG9ydCwgc28gbm90aGluZyB0byBkb1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAgIGRlZmF1bHROYW1lcy5wdXNoKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkpO1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKSkge1xuICAgICAgLy8gKiBhc1xuICAgICAgaW5kZXggKz0gMjtcbiAgICAgIHdpbGRjYXJkTmFtZXMucHVzaCh0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgoaW5kZXgpKTtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldE5hbWVkSW1wb3J0cyhpbmRleCArIDEpO1xuICAgICAgaW5kZXggPSByZXN1bHQubmV3SW5kZXg7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZWRJbXBvcnQgb2YgcmVzdWx0Lm5hbWVkSW1wb3J0cykge1xuICAgICAgICAvLyBUcmVhdCB7ZGVmYXVsdCBhcyBYfSBhcyBhIGRlZmF1bHQgaW1wb3J0IHRvIGVuc3VyZSB1c2FnZSBvZiByZXF1aXJlIGludGVyb3AgaGVscGVyXG4gICAgICAgIGlmIChuYW1lZEltcG9ydC5pbXBvcnRlZE5hbWUgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgZGVmYXVsdE5hbWVzLnB1c2gobmFtZWRJbXBvcnQubG9jYWxOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuYW1lZEltcG9ydHMucHVzaChuYW1lZEltcG9ydCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KGluZGV4LCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pKSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIGltcG9ydCBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWVBdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBpbXBvcnRJbmZvID0gdGhpcy5nZXRJbXBvcnRJbmZvKHBhdGgpO1xuICAgIGltcG9ydEluZm8uZGVmYXVsdE5hbWVzLnB1c2goLi4uZGVmYXVsdE5hbWVzKTtcbiAgICBpbXBvcnRJbmZvLndpbGRjYXJkTmFtZXMucHVzaCguLi53aWxkY2FyZE5hbWVzKTtcbiAgICBpbXBvcnRJbmZvLm5hbWVkSW1wb3J0cy5wdXNoKC4uLm5hbWVkSW1wb3J0cyk7XG4gICAgaWYgKGRlZmF1bHROYW1lcy5sZW5ndGggPT09IDAgJiYgd2lsZGNhcmROYW1lcy5sZW5ndGggPT09IDAgJiYgbmFtZWRJbXBvcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW1wb3J0SW5mby5oYXNCYXJlSW1wb3J0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAgcHJlcHJvY2Vzc0V4cG9ydEF0SW5kZXgoaW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fdmFyKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczJBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2xldCkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdClcbiAgICApIHtcbiAgICAgIHRoaXMucHJlcHJvY2Vzc1ZhckV4cG9ydEF0SW5kZXgoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MpXG4gICAgKSB7XG4gICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4ICsgMik7XG4gICAgICB0aGlzLmFkZEV4cG9ydEJpbmRpbmcoZXhwb3J0TmFtZSwgZXhwb3J0TmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzM0F0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbikpIHtcbiAgICAgIGNvbnN0IGV4cG9ydE5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgoaW5kZXggKyAzKTtcbiAgICAgIHRoaXMuYWRkRXhwb3J0QmluZGluZyhleHBvcnROYW1lLCBleHBvcnROYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgIHRoaXMucHJlcHJvY2Vzc05hbWVkRXhwb3J0QXRJbmRleChpbmRleCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKSkge1xuICAgICAgdGhpcy5wcmVwcm9jZXNzRXhwb3J0U3RhckF0SW5kZXgoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gICBwcmVwcm9jZXNzVmFyRXhwb3J0QXRJbmRleChpbmRleCkge1xuICAgIGxldCBkZXB0aCA9IDA7XG4gICAgLy8gSGFuZGxlIGNhc2VzIGxpa2UgYGV4cG9ydCBsZXQge3h9ID0geTtgLCBzdGFydGluZyBhdCB0aGUgb3Blbi1icmFjZSBpbiB0aGF0IGNhc2UuXG4gICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMjsgOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGksIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5kb2xsYXJCcmFjZUwpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKVxuICAgICAgKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKVxuICAgICAgKSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICB9IGVsc2UgaWYgKGRlcHRoID09PSAwICYmICF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KDEsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGVuZEluZGV4IC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2ldO1xuICAgICAgICBpZiAoX3Rva2VuaXplci5pc0RlY2xhcmF0aW9uLmNhbGwodm9pZCAwLCB0b2tlbikpIHtcbiAgICAgICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGkpO1xuICAgICAgICAgIHRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5zZXQoZXhwb3J0TmFtZSwgYGV4cG9ydHMuJHtleHBvcnROYW1lfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhbGsgdGhpcyBleHBvcnQgc3RhdGVtZW50IGp1c3QgaW4gY2FzZSBpdCdzIGFuIGV4cG9ydC4uLmZyb20gc3RhdGVtZW50LlxuICAgKiBJZiBpdCBpcywgY29tYmluZSBpdCBpbnRvIHRoZSBpbXBvcnQgaW5mbyBmb3IgdGhhdCBwYXRoLiBPdGhlcndpc2UsIGp1c3RcbiAgICogYmFpbCBvdXQ7IGl0J2xsIGJlIGhhbmRsZWQgbGF0ZXIuXG4gICAqL1xuICAgcHJlcHJvY2Vzc05hbWVkRXhwb3J0QXRJbmRleChpbmRleCkge1xuICAgIC8vIGV4cG9ydCB7XG4gICAgaW5kZXggKz0gMjtcbiAgICBjb25zdCB7bmV3SW5kZXgsIG5hbWVkSW1wb3J0c30gPSB0aGlzLmdldE5hbWVkSW1wb3J0cyhpbmRleCk7XG4gICAgaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoaW5kZXgsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlaW50ZXJwcmV0IFwiYSBhcyBiXCIgdG8gYmUgbG9jYWwvZXhwb3J0ZWQgcmF0aGVyIHRoYW4gaW1wb3J0ZWQvbG9jYWwuXG4gICAgICBmb3IgKGNvbnN0IHtpbXBvcnRlZE5hbWU6IGxvY2FsTmFtZSwgbG9jYWxOYW1lOiBleHBvcnRlZE5hbWV9IG9mIG5hbWVkSW1wb3J0cykge1xuICAgICAgICB0aGlzLmFkZEV4cG9ydEJpbmRpbmcobG9jYWxOYW1lLCBleHBvcnRlZE5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN0cmluZyB0b2tlbiBhdCB0aGUgZW5kIG9mIGltcG9ydCBzdGF0ZW1lbnQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWVBdEluZGV4KGluZGV4KTtcbiAgICBjb25zdCBpbXBvcnRJbmZvID0gdGhpcy5nZXRJbXBvcnRJbmZvKHBhdGgpO1xuICAgIGltcG9ydEluZm8ubmFtZWRFeHBvcnRzLnB1c2goLi4ubmFtZWRJbXBvcnRzKTtcbiAgfVxuXG4gICBwcmVwcm9jZXNzRXhwb3J0U3RhckF0SW5kZXgoaW5kZXgpIHtcbiAgICBsZXQgZXhwb3J0ZWROYW1lID0gbnVsbDtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczNBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuc3RhciwgX3R5cGVzLlRva2VuVHlwZS5fYXMpKSB7XG4gICAgICAvLyBleHBvcnQgKiBhc1xuICAgICAgaW5kZXggKz0gMztcbiAgICAgIGV4cG9ydGVkTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCk7XG4gICAgICAvLyBmb28gZnJvbVxuICAgICAgaW5kZXggKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhwb3J0ICogZnJvbVxuICAgICAgaW5kZXggKz0gMztcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc3RyaW5nIHRva2VuIGF0IHRoZSBlbmQgb2Ygc3RhciBleHBvcnQgc3RhdGVtZW50LlwiKTtcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlQXRJbmRleChpbmRleCk7XG4gICAgY29uc3QgaW1wb3J0SW5mbyA9IHRoaXMuZ2V0SW1wb3J0SW5mbyhwYXRoKTtcbiAgICBpZiAoZXhwb3J0ZWROYW1lICE9PSBudWxsKSB7XG4gICAgICBpbXBvcnRJbmZvLmV4cG9ydFN0YXJOYW1lcy5wdXNoKGV4cG9ydGVkTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGltcG9ydEluZm8uaGFzU3RhckV4cG9ydCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgIGdldE5hbWVkSW1wb3J0cyhpbmRleCkge1xuICAgIGNvbnN0IG5hbWVkSW1wb3J0cyA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMsIGluZGV4KTtcbiAgICAgIGluZGV4ID0gc3BlY2lmaWVySW5mby5lbmRJbmRleDtcbiAgICAgIGlmICghc3BlY2lmaWVySW5mby5pc1R5cGUpIHtcbiAgICAgICAgbmFtZWRJbXBvcnRzLnB1c2goe1xuICAgICAgICAgIGltcG9ydGVkTmFtZTogc3BlY2lmaWVySW5mby5sZWZ0TmFtZSxcbiAgICAgICAgICBsb2NhbE5hbWU6IHNwZWNpZmllckluZm8ucmlnaHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleF0pfWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge25ld0luZGV4OiBpbmRleCwgbmFtZWRJbXBvcnRzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBtdXRhYmxlIGltcG9ydCBpbmZvIG9iamVjdCBmb3IgdGhpcyBwYXRoLCBjcmVhdGluZyBvbmUgaWYgaXQgZG9lc24ndFxuICAgKiBleGlzdCB5ZXQuXG4gICAqL1xuICAgZ2V0SW1wb3J0SW5mbyhwYXRoKSB7XG4gICAgY29uc3QgZXhpc3RpbmdJbmZvID0gdGhpcy5pbXBvcnRJbmZvQnlQYXRoLmdldChwYXRoKTtcbiAgICBpZiAoZXhpc3RpbmdJbmZvKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdJbmZvO1xuICAgIH1cbiAgICBjb25zdCBuZXdJbmZvID0ge1xuICAgICAgZGVmYXVsdE5hbWVzOiBbXSxcbiAgICAgIHdpbGRjYXJkTmFtZXM6IFtdLFxuICAgICAgbmFtZWRJbXBvcnRzOiBbXSxcbiAgICAgIG5hbWVkRXhwb3J0czogW10sXG4gICAgICBoYXNCYXJlSW1wb3J0OiBmYWxzZSxcbiAgICAgIGV4cG9ydFN0YXJOYW1lczogW10sXG4gICAgICBoYXNTdGFyRXhwb3J0OiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMuaW1wb3J0SW5mb0J5UGF0aC5zZXQocGF0aCwgbmV3SW5mbyk7XG4gICAgcmV0dXJuIG5ld0luZm87XG4gIH1cblxuICAgYWRkRXhwb3J0QmluZGluZyhsb2NhbE5hbWUsIGV4cG9ydGVkTmFtZSkge1xuICAgIGlmICghdGhpcy5leHBvcnRCaW5kaW5nc0J5TG9jYWxOYW1lLmhhcyhsb2NhbE5hbWUpKSB7XG4gICAgICB0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUuc2V0KGxvY2FsTmFtZSwgW10pO1xuICAgIH1cbiAgICB0aGlzLmV4cG9ydEJpbmRpbmdzQnlMb2NhbE5hbWUuZ2V0KGxvY2FsTmFtZSkucHVzaChleHBvcnRlZE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY29kZSB0byB1c2UgZm9yIHRoZSBpbXBvcnQgZm9yIHRoaXMgcGF0aCwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZlxuICAgKiB0aGUgY29kZSBoYXMgYWxyZWFkeSBiZWVuIFwiY2xhaW1lZFwiIGJ5IGEgcHJldmlvdXMgaW1wb3J0LlxuICAgKi9cbiAgY2xhaW1JbXBvcnRDb2RlKGltcG9ydFBhdGgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmltcG9ydHNUb1JlcGxhY2UuZ2V0KGltcG9ydFBhdGgpO1xuICAgIHRoaXMuaW1wb3J0c1RvUmVwbGFjZS5zZXQoaW1wb3J0UGF0aCwgXCJcIik7XG4gICAgcmV0dXJuIHJlc3VsdCB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGlkZW50aWZpZXJOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllclJlcGxhY2VtZW50cy5nZXQoaWRlbnRpZmllck5hbWUpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3RyaW5nIGxpa2UgYGV4cG9ydHMuZm9vID0gZXhwb3J0cy5iYXJgLlxuICAgKi9cbiAgcmVzb2x2ZUV4cG9ydEJpbmRpbmcoYXNzaWduZWROYW1lKSB7XG4gICAgY29uc3QgZXhwb3J0ZWROYW1lcyA9IHRoaXMuZXhwb3J0QmluZGluZ3NCeUxvY2FsTmFtZS5nZXQoYXNzaWduZWROYW1lKTtcbiAgICBpZiAoIWV4cG9ydGVkTmFtZXMgfHwgZXhwb3J0ZWROYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZXhwb3J0ZWROYW1lcy5tYXAoKGV4cG9ydGVkTmFtZSkgPT4gYGV4cG9ydHMuJHtleHBvcnRlZE5hbWV9YCkuam9pbihcIiA9IFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIGltcG9ydGVkL2V4cG9ydGVkIG5hbWVzIHdoZXJlIHdlIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gd2hldGhlciB1c2FnZXMgb2YgdGhvc2VcbiAgICogbmFtZXMgYXJlIHNoYWRvd2VkLlxuICAgKi9cbiAgZ2V0R2xvYmFsTmFtZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoW1xuICAgICAgLi4udGhpcy5pZGVudGlmaWVyUmVwbGFjZW1lbnRzLmtleXMoKSxcbiAgICAgIC4uLnRoaXMuZXhwb3J0QmluZGluZ3NCeUxvY2FsTmFtZS5rZXlzKCksXG4gICAgXSk7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gQ0pTSW1wb3J0UHJvY2Vzc29yO1xuIiwgInR5cGUgS2V5ID0gc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sO1xuXG4vKipcbiAqIFNldEFycmF5IGFjdHMgbGlrZSBhIGBTZXRgIChhbGxvd2luZyBvbmx5IG9uZSBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIGBrZXlgKSwgYnV0IHByb3ZpZGVzIHRoZVxuICogaW5kZXggb2YgdGhlIGBrZXlgIGluIHRoZSBiYWNraW5nIGFycmF5LlxuICpcbiAqIFRoaXMgaXMgZGVzaWduZWQgdG8gYWxsb3cgc3luY2hyb25pemluZyBhIHNlY29uZCBhcnJheSB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgYmFja2luZyBhcnJheSxcbiAqIGxpa2UgaG93IGluIGEgc291cmNlbWFwIGBzb3VyY2VzQ29udGVudFtpXWAgaXMgdGhlIHNvdXJjZSBjb250ZW50IGFzc29jaWF0ZWQgd2l0aCBgc291cmNlW2ldYCxcbiAqIGFuZCB0aGVyZSBhcmUgbmV2ZXIgZHVwbGljYXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldEFycmF5PFQgZXh0ZW5kcyBLZXkgPSBLZXk+IHtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9pbmRleGVzOiBSZWNvcmQ8VCwgbnVtYmVyIHwgdW5kZWZpbmVkPjtcbiAgZGVjbGFyZSBhcnJheTogcmVhZG9ubHkgVFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2luZGV4ZXMgPSB7IF9fcHJvdG9fXzogbnVsbCB9IGFzIGFueTtcbiAgICB0aGlzLmFycmF5ID0gW107XG4gIH1cbn1cblxuaW50ZXJmYWNlIFB1YmxpY1NldDxUIGV4dGVuZHMgS2V5PiB7XG4gIGFycmF5OiBUW107XG4gIF9pbmRleGVzOiBTZXRBcnJheTxUPlsnX2luZGV4ZXMnXTtcbn1cblxuLyoqXG4gKiBUeXBlc2NyaXB0IGRvZXNuJ3QgYWxsb3cgZnJpZW5kIGFjY2VzcyB0byBwcml2YXRlIGZpZWxkcywgc28gdGhpcyBqdXN0IGNhc3RzIHRoZSBzZXQgaW50byBhIHR5cGVcbiAqIHdpdGggcHVibGljIGFjY2VzcyBtb2RpZmllcnMuXG4gKi9cbmZ1bmN0aW9uIGNhc3Q8VCBleHRlbmRzIEtleT4oc2V0OiBTZXRBcnJheTxUPik6IFB1YmxpY1NldDxUPiB7XG4gIHJldHVybiBzZXQgYXMgYW55O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGFzc29jaWF0ZWQgd2l0aCBga2V5YCBpbiB0aGUgYmFja2luZyBhcnJheSwgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0PFQgZXh0ZW5kcyBLZXk+KHNldGFycjogU2V0QXJyYXk8VD4sIGtleTogVCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjYXN0KHNldGFycikuX2luZGV4ZXNba2V5XTtcbn1cblxuLyoqXG4gKiBQdXRzIGBrZXlgIGludG8gdGhlIGJhY2tpbmcgYXJyYXksIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQuIFJldHVybnNcbiAqIHRoZSBpbmRleCBvZiB0aGUgYGtleWAgaW4gdGhlIGJhY2tpbmcgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXQ8VCBleHRlbmRzIEtleT4oc2V0YXJyOiBTZXRBcnJheTxUPiwga2V5OiBUKTogbnVtYmVyIHtcbiAgLy8gVGhlIGtleSBtYXkgb3IgbWF5IG5vdCBiZSBwcmVzZW50LiBJZiBpdCBpcyBwcmVzZW50LCBpdCdzIGEgbnVtYmVyLlxuICBjb25zdCBpbmRleCA9IGdldChzZXRhcnIsIGtleSk7XG4gIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaW5kZXg7XG5cbiAgY29uc3QgeyBhcnJheSwgX2luZGV4ZXM6IGluZGV4ZXMgfSA9IGNhc3Qoc2V0YXJyKTtcblxuICBjb25zdCBsZW5ndGggPSBhcnJheS5wdXNoKGtleSk7XG4gIHJldHVybiAoaW5kZXhlc1trZXldID0gbGVuZ3RoIC0gMSk7XG59XG5cbi8qKlxuICogUG9wcyB0aGUgbGFzdCBhZGRlZCBpdGVtIG91dCBvZiB0aGUgU2V0QXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3A8VCBleHRlbmRzIEtleT4oc2V0YXJyOiBTZXRBcnJheTxUPik6IHZvaWQge1xuICBjb25zdCB7IGFycmF5LCBfaW5kZXhlczogaW5kZXhlcyB9ID0gY2FzdChzZXRhcnIpO1xuICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgY29uc3QgbGFzdCA9IGFycmF5LnBvcCgpITtcbiAgaW5kZXhlc1tsYXN0XSA9IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBrZXksIGlmIGl0IGV4aXN0cyBpbiB0aGUgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlPFQgZXh0ZW5kcyBLZXk+KHNldGFycjogU2V0QXJyYXk8VD4sIGtleTogVCk6IHZvaWQge1xuICBjb25zdCBpbmRleCA9IGdldChzZXRhcnIsIGtleSk7XG4gIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgY29uc3QgeyBhcnJheSwgX2luZGV4ZXM6IGluZGV4ZXMgfSA9IGNhc3Qoc2V0YXJyKTtcbiAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgayA9IGFycmF5W2ldO1xuICAgIGFycmF5W2kgLSAxXSA9IGs7XG4gICAgaW5kZXhlc1trXSEtLTtcbiAgfVxuICBpbmRleGVzW2tleV0gPSB1bmRlZmluZWQ7XG4gIGFycmF5LnBvcCgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU3RyaW5nUmVhZGVyLCBTdHJpbmdXcml0ZXIgfSBmcm9tICcuL3N0cmluZ3MnO1xuXG5leHBvcnQgY29uc3QgY29tbWEgPSAnLCcuY2hhckNvZGVBdCgwKTtcbmV4cG9ydCBjb25zdCBzZW1pY29sb24gPSAnOycuY2hhckNvZGVBdCgwKTtcblxuY29uc3QgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5jb25zdCBpbnRUb0NoYXIgPSBuZXcgVWludDhBcnJheSg2NCk7IC8vIDY0IHBvc3NpYmxlIGNoYXJzLlxuY29uc3QgY2hhclRvSW50ID0gbmV3IFVpbnQ4QXJyYXkoMTI4KTsgLy8geiBpcyAxMjIgaW4gQVNDSUlcblxuZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuICBjb25zdCBjID0gY2hhcnMuY2hhckNvZGVBdChpKTtcbiAgaW50VG9DaGFyW2ldID0gYztcbiAgY2hhclRvSW50W2NdID0gaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUludGVnZXIocmVhZGVyOiBTdHJpbmdSZWFkZXIsIHJlbGF0aXZlOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgc2hpZnQgPSAwO1xuICBsZXQgaW50ZWdlciA9IDA7XG5cbiAgZG8ge1xuICAgIGNvbnN0IGMgPSByZWFkZXIubmV4dCgpO1xuICAgIGludGVnZXIgPSBjaGFyVG9JbnRbY107XG4gICAgdmFsdWUgfD0gKGludGVnZXIgJiAzMSkgPDwgc2hpZnQ7XG4gICAgc2hpZnQgKz0gNTtcbiAgfSB3aGlsZSAoaW50ZWdlciAmIDMyKTtcblxuICBjb25zdCBzaG91bGROZWdhdGUgPSB2YWx1ZSAmIDE7XG4gIHZhbHVlID4+Pj0gMTtcblxuICBpZiAoc2hvdWxkTmVnYXRlKSB7XG4gICAgdmFsdWUgPSAtMHg4MDAwMDAwMCB8IC12YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZWxhdGl2ZSArIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSW50ZWdlcihidWlsZGVyOiBTdHJpbmdXcml0ZXIsIG51bTogbnVtYmVyLCByZWxhdGl2ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGRlbHRhID0gbnVtIC0gcmVsYXRpdmU7XG5cbiAgZGVsdGEgPSBkZWx0YSA8IDAgPyAoLWRlbHRhIDw8IDEpIHwgMSA6IGRlbHRhIDw8IDE7XG4gIGRvIHtcbiAgICBsZXQgY2xhbXBlZCA9IGRlbHRhICYgMGIwMTExMTE7XG4gICAgZGVsdGEgPj4+PSA1O1xuICAgIGlmIChkZWx0YSA+IDApIGNsYW1wZWQgfD0gMGIxMDAwMDA7XG4gICAgYnVpbGRlci53cml0ZShpbnRUb0NoYXJbY2xhbXBlZF0pO1xuICB9IHdoaWxlIChkZWx0YSA+IDApO1xuXG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNb3JlVmxxKHJlYWRlcjogU3RyaW5nUmVhZGVyLCBtYXg6IG51bWJlcikge1xuICBpZiAocmVhZGVyLnBvcyA+PSBtYXgpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJlYWRlci5wZWVrKCkgIT09IGNvbW1hO1xufVxuIiwgImNvbnN0IGJ1Zkxlbmd0aCA9IDEwMjQgKiAxNjtcblxuLy8gUHJvdmlkZSBhIGZhbGxiYWNrIGZvciBvbGRlciBlbnZpcm9ubWVudHMuXG5jb25zdCB0ZCA9XG4gIHR5cGVvZiBUZXh0RGVjb2RlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IC8qICNfX1BVUkVfXyAqLyBuZXcgVGV4dERlY29kZXIoKVxuICAgIDogdHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IHtcbiAgICAgICAgZGVjb2RlKGJ1ZjogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgICAgICAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20oYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIGRlY29kZShidWY6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgICAgICAgIGxldCBvdXQgPSAnJztcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdXcml0ZXIge1xuICBwb3MgPSAwO1xuICBwcml2YXRlIG91dCA9ICcnO1xuICBwcml2YXRlIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGJ1Zkxlbmd0aCk7XG5cbiAgd3JpdGUodjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBidWZmZXIgfSA9IHRoaXM7XG4gICAgYnVmZmVyW3RoaXMucG9zKytdID0gdjtcbiAgICBpZiAodGhpcy5wb3MgPT09IGJ1Zkxlbmd0aCkge1xuICAgICAgdGhpcy5vdXQgKz0gdGQuZGVjb2RlKGJ1ZmZlcik7XG4gICAgICB0aGlzLnBvcyA9IDA7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGJ1ZmZlciwgb3V0LCBwb3MgfSA9IHRoaXM7XG4gICAgcmV0dXJuIHBvcyA+IDAgPyBvdXQgKyB0ZC5kZWNvZGUoYnVmZmVyLnN1YmFycmF5KDAsIHBvcykpIDogb3V0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdSZWFkZXIge1xuICBwb3MgPSAwO1xuICBwcml2YXRlIGRlY2xhcmUgYnVmZmVyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYnVmZmVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgfVxuXG4gIG5leHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcysrKTtcbiAgfVxuXG4gIHBlZWsoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gIH1cblxuICBpbmRleE9mKGNoYXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgeyBidWZmZXIsIHBvcyB9ID0gdGhpcztcbiAgICBjb25zdCBpZHggPSBidWZmZXIuaW5kZXhPZihjaGFyLCBwb3MpO1xuICAgIHJldHVybiBpZHggPT09IC0xID8gYnVmZmVyLmxlbmd0aCA6IGlkeDtcbiAgfVxufVxuIiwgImltcG9ydCB7IFN0cmluZ1JlYWRlciwgU3RyaW5nV3JpdGVyIH0gZnJvbSAnLi9zdHJpbmdzJztcbmltcG9ydCB7IGNvbW1hLCBkZWNvZGVJbnRlZ2VyLCBlbmNvZGVJbnRlZ2VyLCBoYXNNb3JlVmxxLCBzZW1pY29sb24gfSBmcm9tICcuL3ZscSc7XG5cbmNvbnN0IEVNUFRZOiBhbnlbXSA9IFtdO1xuXG50eXBlIExpbmUgPSBudW1iZXI7XG50eXBlIENvbHVtbiA9IG51bWJlcjtcbnR5cGUgS2luZCA9IG51bWJlcjtcbnR5cGUgTmFtZSA9IG51bWJlcjtcbnR5cGUgVmFyID0gbnVtYmVyO1xudHlwZSBTb3VyY2VzSW5kZXggPSBudW1iZXI7XG50eXBlIFNjb3Blc0luZGV4ID0gbnVtYmVyO1xuXG50eXBlIE1peDxBLCBCLCBPPiA9IChBICYgTykgfCAoQiAmIE8pO1xuXG5leHBvcnQgdHlwZSBPcmlnaW5hbFNjb3BlID0gTWl4PFxuICBbTGluZSwgQ29sdW1uLCBMaW5lLCBDb2x1bW4sIEtpbmRdLFxuICBbTGluZSwgQ29sdW1uLCBMaW5lLCBDb2x1bW4sIEtpbmQsIE5hbWVdLFxuICB7IHZhcnM6IFZhcltdIH1cbj47XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlZFJhbmdlID0gTWl4PFxuICBbTGluZSwgQ29sdW1uLCBMaW5lLCBDb2x1bW5dLFxuICBbTGluZSwgQ29sdW1uLCBMaW5lLCBDb2x1bW4sIFNvdXJjZXNJbmRleCwgU2NvcGVzSW5kZXhdLFxuICB7XG4gICAgY2FsbHNpdGU6IENhbGxTaXRlIHwgbnVsbDtcbiAgICBiaW5kaW5nczogQmluZGluZ1tdO1xuICAgIGlzU2NvcGU6IGJvb2xlYW47XG4gIH1cbj47XG5leHBvcnQgdHlwZSBDYWxsU2l0ZSA9IFtTb3VyY2VzSW5kZXgsIExpbmUsIENvbHVtbl07XG50eXBlIEJpbmRpbmcgPSBCaW5kaW5nRXhwcmVzc2lvblJhbmdlW107XG5leHBvcnQgdHlwZSBCaW5kaW5nRXhwcmVzc2lvblJhbmdlID0gW05hbWVdIHwgW05hbWUsIExpbmUsIENvbHVtbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVPcmlnaW5hbFNjb3BlcyhpbnB1dDogc3RyaW5nKTogT3JpZ2luYWxTY29wZVtdIHtcbiAgY29uc3QgeyBsZW5ndGggfSA9IGlucHV0O1xuICBjb25zdCByZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKGlucHV0KTtcbiAgY29uc3Qgc2NvcGVzOiBPcmlnaW5hbFNjb3BlW10gPSBbXTtcbiAgY29uc3Qgc3RhY2s6IE9yaWdpbmFsU2NvcGVbXSA9IFtdO1xuICBsZXQgbGluZSA9IDA7XG5cbiAgZm9yICg7IHJlYWRlci5wb3MgPCBsZW5ndGg7IHJlYWRlci5wb3MrKykge1xuICAgIGxpbmUgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgbGluZSk7XG4gICAgY29uc3QgY29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuXG4gICAgaWYgKCFoYXNNb3JlVmxxKHJlYWRlciwgbGVuZ3RoKSkge1xuICAgICAgY29uc3QgbGFzdCA9IHN0YWNrLnBvcCgpITtcbiAgICAgIGxhc3RbMl0gPSBsaW5lO1xuICAgICAgbGFzdFszXSA9IGNvbHVtbjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmQgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgY29uc3QgZmllbGRzID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgIGNvbnN0IGhhc05hbWUgPSBmaWVsZHMgJiAwYjAwMDE7XG5cbiAgICBjb25zdCBzY29wZTogT3JpZ2luYWxTY29wZSA9IChcbiAgICAgIGhhc05hbWUgPyBbbGluZSwgY29sdW1uLCAwLCAwLCBraW5kLCBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCldIDogW2xpbmUsIGNvbHVtbiwgMCwgMCwga2luZF1cbiAgICApIGFzIE9yaWdpbmFsU2NvcGU7XG5cbiAgICBsZXQgdmFyczogVmFyW10gPSBFTVBUWTtcbiAgICBpZiAoaGFzTW9yZVZscShyZWFkZXIsIGxlbmd0aCkpIHtcbiAgICAgIHZhcnMgPSBbXTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgdmFyc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgICAgICB2YXJzLnB1c2godmFyc0luZGV4KTtcbiAgICAgIH0gd2hpbGUgKGhhc01vcmVWbHEocmVhZGVyLCBsZW5ndGgpKTtcbiAgICB9XG4gICAgc2NvcGUudmFycyA9IHZhcnM7XG5cbiAgICBzY29wZXMucHVzaChzY29wZSk7XG4gICAgc3RhY2sucHVzaChzY29wZSk7XG4gIH1cblxuICByZXR1cm4gc2NvcGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlT3JpZ2luYWxTY29wZXMoc2NvcGVzOiBPcmlnaW5hbFNjb3BlW10pOiBzdHJpbmcge1xuICBjb25zdCB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY29wZXMubGVuZ3RoOyApIHtcbiAgICBpID0gX2VuY29kZU9yaWdpbmFsU2NvcGVzKHNjb3BlcywgaSwgd3JpdGVyLCBbMF0pO1xuICB9XG5cbiAgcmV0dXJuIHdyaXRlci5mbHVzaCgpO1xufVxuXG5mdW5jdGlvbiBfZW5jb2RlT3JpZ2luYWxTY29wZXMoXG4gIHNjb3BlczogT3JpZ2luYWxTY29wZVtdLFxuICBpbmRleDogbnVtYmVyLFxuICB3cml0ZXI6IFN0cmluZ1dyaXRlcixcbiAgc3RhdGU6IFtcbiAgICBudW1iZXIsIC8vIEdlbkNvbHVtblxuICBdLFxuKTogbnVtYmVyIHtcbiAgY29uc3Qgc2NvcGUgPSBzY29wZXNbaW5kZXhdO1xuICBjb25zdCB7IDA6IHN0YXJ0TGluZSwgMTogc3RhcnRDb2x1bW4sIDI6IGVuZExpbmUsIDM6IGVuZENvbHVtbiwgNDoga2luZCwgdmFycyB9ID0gc2NvcGU7XG5cbiAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLndyaXRlKGNvbW1hKTtcblxuICBzdGF0ZVswXSA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzdGFydExpbmUsIHN0YXRlWzBdKTtcbiAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIHN0YXJ0Q29sdW1uLCAwKTtcbiAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIGtpbmQsIDApO1xuXG4gIGNvbnN0IGZpZWxkcyA9IHNjb3BlLmxlbmd0aCA9PT0gNiA/IDBiMDAwMSA6IDA7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBmaWVsZHMsIDApO1xuICBpZiAoc2NvcGUubGVuZ3RoID09PSA2KSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2NvcGVbNV0sIDApO1xuXG4gIGZvciAoY29uc3QgdiBvZiB2YXJzKSB7XG4gICAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIHYsIDApO1xuICB9XG5cbiAgZm9yIChpbmRleCsrOyBpbmRleCA8IHNjb3Blcy5sZW5ndGg7ICkge1xuICAgIGNvbnN0IG5leHQgPSBzY29wZXNbaW5kZXhdO1xuICAgIGNvbnN0IHsgMDogbCwgMTogYyB9ID0gbmV4dDtcbiAgICBpZiAobCA+IGVuZExpbmUgfHwgKGwgPT09IGVuZExpbmUgJiYgYyA+PSBlbmRDb2x1bW4pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggPSBfZW5jb2RlT3JpZ2luYWxTY29wZXMoc2NvcGVzLCBpbmRleCwgd3JpdGVyLCBzdGF0ZSk7XG4gIH1cblxuICB3cml0ZXIud3JpdGUoY29tbWEpO1xuICBzdGF0ZVswXSA9IGVuY29kZUludGVnZXIod3JpdGVyLCBlbmRMaW5lLCBzdGF0ZVswXSk7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBlbmRDb2x1bW4sIDApO1xuXG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUdlbmVyYXRlZFJhbmdlcyhpbnB1dDogc3RyaW5nKTogR2VuZXJhdGVkUmFuZ2VbXSB7XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBpbnB1dDtcbiAgY29uc3QgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7XG4gIGNvbnN0IHJhbmdlczogR2VuZXJhdGVkUmFuZ2VbXSA9IFtdO1xuICBjb25zdCBzdGFjazogR2VuZXJhdGVkUmFuZ2VbXSA9IFtdO1xuXG4gIGxldCBnZW5MaW5lID0gMDtcbiAgbGV0IGRlZmluaXRpb25Tb3VyY2VzSW5kZXggPSAwO1xuICBsZXQgZGVmaW5pdGlvblNjb3BlSW5kZXggPSAwO1xuICBsZXQgY2FsbHNpdGVTb3VyY2VzSW5kZXggPSAwO1xuICBsZXQgY2FsbHNpdGVMaW5lID0gMDtcbiAgbGV0IGNhbGxzaXRlQ29sdW1uID0gMDtcbiAgbGV0IGJpbmRpbmdMaW5lID0gMDtcbiAgbGV0IGJpbmRpbmdDb2x1bW4gPSAwO1xuXG4gIGRvIHtcbiAgICBjb25zdCBzZW1pID0gcmVhZGVyLmluZGV4T2YoJzsnKTtcbiAgICBsZXQgZ2VuQ29sdW1uID0gMDtcblxuICAgIGZvciAoOyByZWFkZXIucG9zIDwgc2VtaTsgcmVhZGVyLnBvcysrKSB7XG4gICAgICBnZW5Db2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgZ2VuQ29sdW1uKTtcblxuICAgICAgaWYgKCFoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgbGFzdFsyXSA9IGdlbkxpbmU7XG4gICAgICAgIGxhc3RbM10gPSBnZW5Db2x1bW47XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWVsZHMgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgICBjb25zdCBoYXNEZWZpbml0aW9uID0gZmllbGRzICYgMGIwMDAxO1xuICAgICAgY29uc3QgaGFzQ2FsbHNpdGUgPSBmaWVsZHMgJiAwYjAwMTA7XG4gICAgICBjb25zdCBoYXNTY29wZSA9IGZpZWxkcyAmIDBiMDEwMDtcblxuICAgICAgbGV0IGNhbGxzaXRlOiBDYWxsU2l0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IGJpbmRpbmdzOiBCaW5kaW5nW10gPSBFTVBUWTtcbiAgICAgIGxldCByYW5nZTogR2VuZXJhdGVkUmFuZ2U7XG4gICAgICBpZiAoaGFzRGVmaW5pdGlvbikge1xuICAgICAgICBjb25zdCBkZWZTb3VyY2VzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgZGVmaW5pdGlvblNvdXJjZXNJbmRleCk7XG4gICAgICAgIGRlZmluaXRpb25TY29wZUluZGV4ID0gZGVjb2RlSW50ZWdlcihcbiAgICAgICAgICByZWFkZXIsXG4gICAgICAgICAgZGVmaW5pdGlvblNvdXJjZXNJbmRleCA9PT0gZGVmU291cmNlc0luZGV4ID8gZGVmaW5pdGlvblNjb3BlSW5kZXggOiAwLFxuICAgICAgICApO1xuXG4gICAgICAgIGRlZmluaXRpb25Tb3VyY2VzSW5kZXggPSBkZWZTb3VyY2VzSW5kZXg7XG4gICAgICAgIHJhbmdlID0gW2dlbkxpbmUsIGdlbkNvbHVtbiwgMCwgMCwgZGVmU291cmNlc0luZGV4LCBkZWZpbml0aW9uU2NvcGVJbmRleF0gYXMgR2VuZXJhdGVkUmFuZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZSA9IFtnZW5MaW5lLCBnZW5Db2x1bW4sIDAsIDBdIGFzIEdlbmVyYXRlZFJhbmdlO1xuICAgICAgfVxuXG4gICAgICByYW5nZS5pc1Njb3BlID0gISFoYXNTY29wZTtcblxuICAgICAgaWYgKGhhc0NhbGxzaXRlKSB7XG4gICAgICAgIGNvbnN0IHByZXZDc2kgPSBjYWxsc2l0ZVNvdXJjZXNJbmRleDtcbiAgICAgICAgY29uc3QgcHJldkxpbmUgPSBjYWxsc2l0ZUxpbmU7XG4gICAgICAgIGNhbGxzaXRlU291cmNlc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGNhbGxzaXRlU291cmNlc0luZGV4KTtcbiAgICAgICAgY29uc3Qgc2FtZVNvdXJjZSA9IHByZXZDc2kgPT09IGNhbGxzaXRlU291cmNlc0luZGV4O1xuICAgICAgICBjYWxsc2l0ZUxpbmUgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc2FtZVNvdXJjZSA/IGNhbGxzaXRlTGluZSA6IDApO1xuICAgICAgICBjYWxsc2l0ZUNvbHVtbiA9IGRlY29kZUludGVnZXIoXG4gICAgICAgICAgcmVhZGVyLFxuICAgICAgICAgIHNhbWVTb3VyY2UgJiYgcHJldkxpbmUgPT09IGNhbGxzaXRlTGluZSA/IGNhbGxzaXRlQ29sdW1uIDogMCxcbiAgICAgICAgKTtcblxuICAgICAgICBjYWxsc2l0ZSA9IFtjYWxsc2l0ZVNvdXJjZXNJbmRleCwgY2FsbHNpdGVMaW5lLCBjYWxsc2l0ZUNvbHVtbl07XG4gICAgICB9XG4gICAgICByYW5nZS5jYWxsc2l0ZSA9IGNhbGxzaXRlO1xuXG4gICAgICBpZiAoaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpKSB7XG4gICAgICAgIGJpbmRpbmdzID0gW107XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBiaW5kaW5nTGluZSA9IGdlbkxpbmU7XG4gICAgICAgICAgYmluZGluZ0NvbHVtbiA9IGdlbkNvbHVtbjtcbiAgICAgICAgICBjb25zdCBleHByZXNzaW9uc0NvdW50ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgICAgICAgIGxldCBleHByZXNzaW9uUmFuZ2VzOiBCaW5kaW5nRXhwcmVzc2lvblJhbmdlW107XG4gICAgICAgICAgaWYgKGV4cHJlc3Npb25zQ291bnQgPCAtMSkge1xuICAgICAgICAgICAgZXhwcmVzc2lvblJhbmdlcyA9IFtbZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApXV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gLTE7IGkgPiBleHByZXNzaW9uc0NvdW50OyBpLS0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJldkJsID0gYmluZGluZ0xpbmU7XG4gICAgICAgICAgICAgIGJpbmRpbmdMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGJpbmRpbmdMaW5lKTtcbiAgICAgICAgICAgICAgYmluZGluZ0NvbHVtbiA9IGRlY29kZUludGVnZXIocmVhZGVyLCBiaW5kaW5nTGluZSA9PT0gcHJldkJsID8gYmluZGluZ0NvbHVtbiA6IDApO1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VzLnB1c2goW2V4cHJlc3Npb24sIGJpbmRpbmdMaW5lLCBiaW5kaW5nQ29sdW1uXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25SYW5nZXMgPSBbW2V4cHJlc3Npb25zQ291bnRdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYmluZGluZ3MucHVzaChleHByZXNzaW9uUmFuZ2VzKTtcbiAgICAgICAgfSB3aGlsZSAoaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpKTtcbiAgICAgIH1cbiAgICAgIHJhbmdlLmJpbmRpbmdzID0gYmluZGluZ3M7XG5cbiAgICAgIHJhbmdlcy5wdXNoKHJhbmdlKTtcbiAgICAgIHN0YWNrLnB1c2gocmFuZ2UpO1xuICAgIH1cblxuICAgIGdlbkxpbmUrKztcbiAgICByZWFkZXIucG9zID0gc2VtaSArIDE7XG4gIH0gd2hpbGUgKHJlYWRlci5wb3MgPCBsZW5ndGgpO1xuXG4gIHJldHVybiByYW5nZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVHZW5lcmF0ZWRSYW5nZXMocmFuZ2VzOiBHZW5lcmF0ZWRSYW5nZVtdKTogc3RyaW5nIHtcbiAgaWYgKHJhbmdlcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyApIHtcbiAgICBpID0gX2VuY29kZUdlbmVyYXRlZFJhbmdlcyhyYW5nZXMsIGksIHdyaXRlciwgWzAsIDAsIDAsIDAsIDAsIDAsIDBdKTtcbiAgfVxuXG4gIHJldHVybiB3cml0ZXIuZmx1c2goKTtcbn1cblxuZnVuY3Rpb24gX2VuY29kZUdlbmVyYXRlZFJhbmdlcyhcbiAgcmFuZ2VzOiBHZW5lcmF0ZWRSYW5nZVtdLFxuICBpbmRleDogbnVtYmVyLFxuICB3cml0ZXI6IFN0cmluZ1dyaXRlcixcbiAgc3RhdGU6IFtcbiAgICBudW1iZXIsIC8vIEdlbkxpbmVcbiAgICBudW1iZXIsIC8vIEdlbkNvbHVtblxuICAgIG51bWJlciwgLy8gRGVmU291cmNlc0luZGV4XG4gICAgbnVtYmVyLCAvLyBEZWZTY29wZXNJbmRleFxuICAgIG51bWJlciwgLy8gQ2FsbFNvdXJjZXNJbmRleFxuICAgIG51bWJlciwgLy8gQ2FsbExpbmVcbiAgICBudW1iZXIsIC8vIENhbGxDb2x1bW5cbiAgXSxcbik6IG51bWJlciB7XG4gIGNvbnN0IHJhbmdlID0gcmFuZ2VzW2luZGV4XTtcbiAgY29uc3Qge1xuICAgIDA6IHN0YXJ0TGluZSxcbiAgICAxOiBzdGFydENvbHVtbixcbiAgICAyOiBlbmRMaW5lLFxuICAgIDM6IGVuZENvbHVtbixcbiAgICBpc1Njb3BlLFxuICAgIGNhbGxzaXRlLFxuICAgIGJpbmRpbmdzLFxuICB9ID0gcmFuZ2U7XG5cbiAgaWYgKHN0YXRlWzBdIDwgc3RhcnRMaW5lKSB7XG4gICAgY2F0Y2h1cExpbmUod3JpdGVyLCBzdGF0ZVswXSwgc3RhcnRMaW5lKTtcbiAgICBzdGF0ZVswXSA9IHN0YXJ0TGluZTtcbiAgICBzdGF0ZVsxXSA9IDA7XG4gIH0gZWxzZSBpZiAoaW5kZXggPiAwKSB7XG4gICAgd3JpdGVyLndyaXRlKGNvbW1hKTtcbiAgfVxuXG4gIHN0YXRlWzFdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHJhbmdlWzFdLCBzdGF0ZVsxXSk7XG5cbiAgY29uc3QgZmllbGRzID1cbiAgICAocmFuZ2UubGVuZ3RoID09PSA2ID8gMGIwMDAxIDogMCkgfCAoY2FsbHNpdGUgPyAwYjAwMTAgOiAwKSB8IChpc1Njb3BlID8gMGIwMTAwIDogMCk7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBmaWVsZHMsIDApO1xuXG4gIGlmIChyYW5nZS5sZW5ndGggPT09IDYpIHtcbiAgICBjb25zdCB7IDQ6IHNvdXJjZXNJbmRleCwgNTogc2NvcGVzSW5kZXggfSA9IHJhbmdlO1xuICAgIGlmIChzb3VyY2VzSW5kZXggIT09IHN0YXRlWzJdKSB7XG4gICAgICBzdGF0ZVszXSA9IDA7XG4gICAgfVxuICAgIHN0YXRlWzJdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHNvdXJjZXNJbmRleCwgc3RhdGVbMl0pO1xuICAgIHN0YXRlWzNdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHNjb3Blc0luZGV4LCBzdGF0ZVszXSk7XG4gIH1cblxuICBpZiAoY2FsbHNpdGUpIHtcbiAgICBjb25zdCB7IDA6IHNvdXJjZXNJbmRleCwgMTogY2FsbExpbmUsIDI6IGNhbGxDb2x1bW4gfSA9IHJhbmdlLmNhbGxzaXRlITtcbiAgICBpZiAoc291cmNlc0luZGV4ICE9PSBzdGF0ZVs0XSkge1xuICAgICAgc3RhdGVbNV0gPSAwO1xuICAgICAgc3RhdGVbNl0gPSAwO1xuICAgIH0gZWxzZSBpZiAoY2FsbExpbmUgIT09IHN0YXRlWzVdKSB7XG4gICAgICBzdGF0ZVs2XSA9IDA7XG4gICAgfVxuICAgIHN0YXRlWzRdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHNvdXJjZXNJbmRleCwgc3RhdGVbNF0pO1xuICAgIHN0YXRlWzVdID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIGNhbGxMaW5lLCBzdGF0ZVs1XSk7XG4gICAgc3RhdGVbNl0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgY2FsbENvbHVtbiwgc3RhdGVbNl0pO1xuICB9XG5cbiAgaWYgKGJpbmRpbmdzKSB7XG4gICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIGJpbmRpbmdzKSB7XG4gICAgICBpZiAoYmluZGluZy5sZW5ndGggPiAxKSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgLWJpbmRpbmcubGVuZ3RoLCAwKTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBiaW5kaW5nWzBdWzBdO1xuICAgICAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cHJlc3Npb24sIDApO1xuICAgICAgbGV0IGJpbmRpbmdTdGFydExpbmUgPSBzdGFydExpbmU7XG4gICAgICBsZXQgYmluZGluZ1N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJpbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXhwUmFuZ2UgPSBiaW5kaW5nW2ldO1xuICAgICAgICBiaW5kaW5nU3RhcnRMaW5lID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cFJhbmdlWzFdISwgYmluZGluZ1N0YXJ0TGluZSk7XG4gICAgICAgIGJpbmRpbmdTdGFydENvbHVtbiA9IGVuY29kZUludGVnZXIod3JpdGVyLCBleHBSYW5nZVsyXSEsIGJpbmRpbmdTdGFydENvbHVtbik7XG4gICAgICAgIGVuY29kZUludGVnZXIod3JpdGVyLCBleHBSYW5nZVswXSEsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoaW5kZXgrKzsgaW5kZXggPCByYW5nZXMubGVuZ3RoOyApIHtcbiAgICBjb25zdCBuZXh0ID0gcmFuZ2VzW2luZGV4XTtcbiAgICBjb25zdCB7IDA6IGwsIDE6IGMgfSA9IG5leHQ7XG4gICAgaWYgKGwgPiBlbmRMaW5lIHx8IChsID09PSBlbmRMaW5lICYmIGMgPj0gZW5kQ29sdW1uKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ID0gX2VuY29kZUdlbmVyYXRlZFJhbmdlcyhyYW5nZXMsIGluZGV4LCB3cml0ZXIsIHN0YXRlKTtcbiAgfVxuXG4gIGlmIChzdGF0ZVswXSA8IGVuZExpbmUpIHtcbiAgICBjYXRjaHVwTGluZSh3cml0ZXIsIHN0YXRlWzBdLCBlbmRMaW5lKTtcbiAgICBzdGF0ZVswXSA9IGVuZExpbmU7XG4gICAgc3RhdGVbMV0gPSAwO1xuICB9IGVsc2Uge1xuICAgIHdyaXRlci53cml0ZShjb21tYSk7XG4gIH1cbiAgc3RhdGVbMV0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZW5kQ29sdW1uLCBzdGF0ZVsxXSk7XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBjYXRjaHVwTGluZSh3cml0ZXI6IFN0cmluZ1dyaXRlciwgbGFzdExpbmU6IG51bWJlciwgbGluZTogbnVtYmVyKSB7XG4gIGRvIHtcbiAgICB3cml0ZXIud3JpdGUoc2VtaWNvbG9uKTtcbiAgfSB3aGlsZSAoKytsYXN0TGluZSA8IGxpbmUpO1xufVxuIiwgImltcG9ydCB7IGNvbW1hLCBkZWNvZGVJbnRlZ2VyLCBlbmNvZGVJbnRlZ2VyLCBoYXNNb3JlVmxxLCBzZW1pY29sb24gfSBmcm9tICcuL3ZscSc7XG5pbXBvcnQgeyBTdHJpbmdXcml0ZXIsIFN0cmluZ1JlYWRlciB9IGZyb20gJy4vc3RyaW5ncyc7XG5cbmV4cG9ydCB7XG4gIGRlY29kZU9yaWdpbmFsU2NvcGVzLFxuICBlbmNvZGVPcmlnaW5hbFNjb3BlcyxcbiAgZGVjb2RlR2VuZXJhdGVkUmFuZ2VzLFxuICBlbmNvZGVHZW5lcmF0ZWRSYW5nZXMsXG59IGZyb20gJy4vc2NvcGVzJztcbmV4cG9ydCB0eXBlIHsgT3JpZ2luYWxTY29wZSwgR2VuZXJhdGVkUmFuZ2UsIENhbGxTaXRlLCBCaW5kaW5nRXhwcmVzc2lvblJhbmdlIH0gZnJvbSAnLi9zY29wZXMnO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VNYXBTZWdtZW50ID1cbiAgfCBbbnVtYmVyXVxuICB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG4gIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFNvdXJjZU1hcExpbmUgPSBTb3VyY2VNYXBTZWdtZW50W107XG5leHBvcnQgdHlwZSBTb3VyY2VNYXBNYXBwaW5ncyA9IFNvdXJjZU1hcExpbmVbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZShtYXBwaW5nczogc3RyaW5nKTogU291cmNlTWFwTWFwcGluZ3Mge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gbWFwcGluZ3M7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIobWFwcGluZ3MpO1xuICBjb25zdCBkZWNvZGVkOiBTb3VyY2VNYXBNYXBwaW5ncyA9IFtdO1xuICBsZXQgZ2VuQ29sdW1uID0gMDtcbiAgbGV0IHNvdXJjZXNJbmRleCA9IDA7XG4gIGxldCBzb3VyY2VMaW5lID0gMDtcbiAgbGV0IHNvdXJjZUNvbHVtbiA9IDA7XG4gIGxldCBuYW1lc0luZGV4ID0gMDtcblxuICBkbyB7XG4gICAgY29uc3Qgc2VtaSA9IHJlYWRlci5pbmRleE9mKCc7Jyk7XG4gICAgY29uc3QgbGluZTogU291cmNlTWFwTGluZSA9IFtdO1xuICAgIGxldCBzb3J0ZWQgPSB0cnVlO1xuICAgIGxldCBsYXN0Q29sID0gMDtcbiAgICBnZW5Db2x1bW4gPSAwO1xuXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBzZW1pKSB7XG4gICAgICBsZXQgc2VnOiBTb3VyY2VNYXBTZWdtZW50O1xuXG4gICAgICBnZW5Db2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgZ2VuQ29sdW1uKTtcbiAgICAgIGlmIChnZW5Db2x1bW4gPCBsYXN0Q29sKSBzb3J0ZWQgPSBmYWxzZTtcbiAgICAgIGxhc3RDb2wgPSBnZW5Db2x1bW47XG5cbiAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgc291cmNlc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZXNJbmRleCk7XG4gICAgICAgIHNvdXJjZUxpbmUgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlTGluZSk7XG4gICAgICAgIHNvdXJjZUNvbHVtbiA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VDb2x1bW4pO1xuXG4gICAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgICBuYW1lc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIG5hbWVzSW5kZXgpO1xuICAgICAgICAgIHNlZyA9IFtnZW5Db2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWcgPSBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbl07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZyA9IFtnZW5Db2x1bW5dO1xuICAgICAgfVxuXG4gICAgICBsaW5lLnB1c2goc2VnKTtcbiAgICAgIHJlYWRlci5wb3MrKztcbiAgICB9XG5cbiAgICBpZiAoIXNvcnRlZCkgc29ydChsaW5lKTtcbiAgICBkZWNvZGVkLnB1c2gobGluZSk7XG4gICAgcmVhZGVyLnBvcyA9IHNlbWkgKyAxO1xuICB9IHdoaWxlIChyZWFkZXIucG9zIDw9IGxlbmd0aCk7XG5cbiAgcmV0dXJuIGRlY29kZWQ7XG59XG5cbmZ1bmN0aW9uIHNvcnQobGluZTogU291cmNlTWFwU2VnbWVudFtdKSB7XG4gIGxpbmUuc29ydChzb3J0Q29tcGFyYXRvcik7XG59XG5cbmZ1bmN0aW9uIHNvcnRDb21wYXJhdG9yKGE6IFNvdXJjZU1hcFNlZ21lbnQsIGI6IFNvdXJjZU1hcFNlZ21lbnQpOiBudW1iZXIge1xuICByZXR1cm4gYVswXSAtIGJbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoZGVjb2RlZDogU291cmNlTWFwTWFwcGluZ3MpOiBzdHJpbmc7XG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlKGRlY29kZWQ6IFJlYWRvbmx5PFNvdXJjZU1hcE1hcHBpbmdzPik6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoZGVjb2RlZDogUmVhZG9ubHk8U291cmNlTWFwTWFwcGluZ3M+KTogc3RyaW5nIHtcbiAgY29uc3Qgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpO1xuICBsZXQgc291cmNlc0luZGV4ID0gMDtcbiAgbGV0IHNvdXJjZUxpbmUgPSAwO1xuICBsZXQgc291cmNlQ29sdW1uID0gMDtcbiAgbGV0IG5hbWVzSW5kZXggPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBkZWNvZGVkW2ldO1xuICAgIGlmIChpID4gMCkgd3JpdGVyLndyaXRlKHNlbWljb2xvbik7XG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgIGxldCBnZW5Db2x1bW4gPSAwO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBzZWdtZW50ID0gbGluZVtqXTtcbiAgICAgIGlmIChqID4gMCkgd3JpdGVyLndyaXRlKGNvbW1hKTtcblxuICAgICAgZ2VuQ29sdW1uID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIHNlZ21lbnRbMF0sIGdlbkNvbHVtbik7XG5cbiAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMSkgY29udGludWU7XG4gICAgICBzb3VyY2VzSW5kZXggPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFsxXSwgc291cmNlc0luZGV4KTtcbiAgICAgIHNvdXJjZUxpbmUgPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFsyXSwgc291cmNlTGluZSk7XG4gICAgICBzb3VyY2VDb2x1bW4gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFszXSwgc291cmNlQ29sdW1uKTtcblxuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSA0KSBjb250aW51ZTtcbiAgICAgIG5hbWVzSW5kZXggPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFs0XSwgbmFtZXNJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdyaXRlci5mbHVzaCgpO1xufVxuIiwgIi8vIE1hdGNoZXMgdGhlIHNjaGVtZSBvZiBhIFVSTCwgZWcgXCJodHRwOi8vXCJcbmNvbnN0IHNjaGVtZVJlZ2V4ID0gL15bXFx3Ky4tXSs6XFwvXFwvLztcblxuLyoqXG4gKiBNYXRjaGVzIHRoZSBwYXJ0cyBvZiBhIFVSTDpcbiAqIDEuIFNjaGVtZSwgaW5jbHVkaW5nIFwiOlwiLCBndWFyYW50ZWVkLlxuICogMi4gVXNlci9wYXNzd29yZCwgaW5jbHVkaW5nIFwiQFwiLCBvcHRpb25hbC5cbiAqIDMuIEhvc3QsIGd1YXJhbnRlZWQuXG4gKiA0LiBQb3J0LCBpbmNsdWRpbmcgXCI6XCIsIG9wdGlvbmFsLlxuICogNS4gUGF0aCwgaW5jbHVkaW5nIFwiL1wiLCBvcHRpb25hbC5cbiAqIDYuIFF1ZXJ5LCBpbmNsdWRpbmcgXCI/XCIsIG9wdGlvbmFsLlxuICogNy4gSGFzaCwgaW5jbHVkaW5nIFwiI1wiLCBvcHRpb25hbC5cbiAqL1xuY29uc3QgdXJsUmVnZXggPSAvXihbXFx3Ky4tXSs6KVxcL1xcLyhbXkAvIz9dKkApPyhbXjovIz9dKikoOlxcZCspPyhcXC9bXiM/XSopPyhcXD9bXiNdKik/KCMuKik/LztcblxuLyoqXG4gKiBGaWxlIFVSTHMgYXJlIHdlaXJkLiBUaGV5IGRvbnQnIG5lZWQgdGhlIHJlZ3VsYXIgYC8vYCBpbiB0aGUgc2NoZW1lLCB0aGV5IG1heSBvciBtYXkgbm90IHN0YXJ0XG4gKiB3aXRoIGEgbGVhZGluZyBgL2AsIHRoZXkgY2FuIGhhdmUgYSBkb21haW4gKGJ1dCBvbmx5IGlmIHRoZXkgZG9uJ3Qgc3RhcnQgd2l0aCBhIFdpbmRvd3MgZHJpdmUpLlxuICpcbiAqIDEuIEhvc3QsIG9wdGlvbmFsLlxuICogMi4gUGF0aCwgd2hpY2ggbWF5IGluY2x1ZGUgXCIvXCIsIGd1YXJhbnRlZWQuXG4gKiAzLiBRdWVyeSwgaW5jbHVkaW5nIFwiP1wiLCBvcHRpb25hbC5cbiAqIDQuIEhhc2gsIGluY2x1ZGluZyBcIiNcIiwgb3B0aW9uYWwuXG4gKi9cbmNvbnN0IGZpbGVSZWdleCA9IC9eZmlsZTooPzpcXC9cXC8oKD8hW2Etel06KVteLyM/XSopPyk/KFxcLz9bXiM/XSopKFxcP1teI10qKT8oIy4qKT8vaTtcblxudHlwZSBVcmwgPSB7XG4gIHNjaGVtZTogc3RyaW5nO1xuICB1c2VyOiBzdHJpbmc7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbiAgdHlwZTogVXJsVHlwZTtcbn07XG5cbmNvbnN0IGVudW0gVXJsVHlwZSB7XG4gIEVtcHR5ID0gMSxcbiAgSGFzaCA9IDIsXG4gIFF1ZXJ5ID0gMyxcbiAgUmVsYXRpdmVQYXRoID0gNCxcbiAgQWJzb2x1dGVQYXRoID0gNSxcbiAgU2NoZW1lUmVsYXRpdmUgPSA2LFxuICBBYnNvbHV0ZSA9IDcsXG59XG5cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVcmwoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2NoZW1lUmVnZXgudGVzdChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGlzU2NoZW1lUmVsYXRpdmVVcmwoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQuc3RhcnRzV2l0aCgnLy8nKTtcbn1cblxuZnVuY3Rpb24gaXNBYnNvbHV0ZVBhdGgoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQuc3RhcnRzV2l0aCgnLycpO1xufVxuXG5mdW5jdGlvbiBpc0ZpbGVVcmwoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQuc3RhcnRzV2l0aCgnZmlsZTonKTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZShpbnB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXlsuPyNdLy50ZXN0KGlucHV0KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBYnNvbHV0ZVVybChpbnB1dDogc3RyaW5nKTogVXJsIHtcbiAgY29uc3QgbWF0Y2ggPSB1cmxSZWdleC5leGVjKGlucHV0KSE7XG4gIHJldHVybiBtYWtlVXJsKFxuICAgIG1hdGNoWzFdLFxuICAgIG1hdGNoWzJdIHx8ICcnLFxuICAgIG1hdGNoWzNdLFxuICAgIG1hdGNoWzRdIHx8ICcnLFxuICAgIG1hdGNoWzVdIHx8ICcvJyxcbiAgICBtYXRjaFs2XSB8fCAnJyxcbiAgICBtYXRjaFs3XSB8fCAnJyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWxlVXJsKGlucHV0OiBzdHJpbmcpOiBVcmwge1xuICBjb25zdCBtYXRjaCA9IGZpbGVSZWdleC5leGVjKGlucHV0KSE7XG4gIGNvbnN0IHBhdGggPSBtYXRjaFsyXTtcbiAgcmV0dXJuIG1ha2VVcmwoXG4gICAgJ2ZpbGU6JyxcbiAgICAnJyxcbiAgICBtYXRjaFsxXSB8fCAnJyxcbiAgICAnJyxcbiAgICBpc0Fic29sdXRlUGF0aChwYXRoKSA/IHBhdGggOiAnLycgKyBwYXRoLFxuICAgIG1hdGNoWzNdIHx8ICcnLFxuICAgIG1hdGNoWzRdIHx8ICcnLFxuICApO1xufVxuXG5mdW5jdGlvbiBtYWtlVXJsKFxuICBzY2hlbWU6IHN0cmluZyxcbiAgdXNlcjogc3RyaW5nLFxuICBob3N0OiBzdHJpbmcsXG4gIHBvcnQ6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBxdWVyeTogc3RyaW5nLFxuICBoYXNoOiBzdHJpbmcsXG4pOiBVcmwge1xuICByZXR1cm4ge1xuICAgIHNjaGVtZSxcbiAgICB1c2VyLFxuICAgIGhvc3QsXG4gICAgcG9ydCxcbiAgICBwYXRoLFxuICAgIHF1ZXJ5LFxuICAgIGhhc2gsXG4gICAgdHlwZTogVXJsVHlwZS5BYnNvbHV0ZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVcmwoaW5wdXQ6IHN0cmluZyk6IFVybCB7XG4gIGlmIChpc1NjaGVtZVJlbGF0aXZlVXJsKGlucHV0KSkge1xuICAgIGNvbnN0IHVybCA9IHBhcnNlQWJzb2x1dGVVcmwoJ2h0dHA6JyArIGlucHV0KTtcbiAgICB1cmwuc2NoZW1lID0gJyc7XG4gICAgdXJsLnR5cGUgPSBVcmxUeXBlLlNjaGVtZVJlbGF0aXZlO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBpZiAoaXNBYnNvbHV0ZVBhdGgoaW5wdXQpKSB7XG4gICAgY29uc3QgdXJsID0gcGFyc2VBYnNvbHV0ZVVybCgnaHR0cDovL2Zvby5jb20nICsgaW5wdXQpO1xuICAgIHVybC5zY2hlbWUgPSAnJztcbiAgICB1cmwuaG9zdCA9ICcnO1xuICAgIHVybC50eXBlID0gVXJsVHlwZS5BYnNvbHV0ZVBhdGg7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIGlmIChpc0ZpbGVVcmwoaW5wdXQpKSByZXR1cm4gcGFyc2VGaWxlVXJsKGlucHV0KTtcblxuICBpZiAoaXNBYnNvbHV0ZVVybChpbnB1dCkpIHJldHVybiBwYXJzZUFic29sdXRlVXJsKGlucHV0KTtcblxuICBjb25zdCB1cmwgPSBwYXJzZUFic29sdXRlVXJsKCdodHRwOi8vZm9vLmNvbS8nICsgaW5wdXQpO1xuICB1cmwuc2NoZW1lID0gJyc7XG4gIHVybC5ob3N0ID0gJyc7XG4gIHVybC50eXBlID0gaW5wdXRcbiAgICA/IGlucHV0LnN0YXJ0c1dpdGgoJz8nKVxuICAgICAgPyBVcmxUeXBlLlF1ZXJ5XG4gICAgICA6IGlucHV0LnN0YXJ0c1dpdGgoJyMnKVxuICAgICAgPyBVcmxUeXBlLkhhc2hcbiAgICAgIDogVXJsVHlwZS5SZWxhdGl2ZVBhdGhcbiAgICA6IFVybFR5cGUuRW1wdHk7XG4gIHJldHVybiB1cmw7XG59XG5cbmZ1bmN0aW9uIHN0cmlwUGF0aEZpbGVuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIElmIGEgcGF0aCBlbmRzIHdpdGggYSBwYXJlbnQgZGlyZWN0b3J5IFwiLi5cIiwgdGhlbiBpdCdzIGEgcmVsYXRpdmUgcGF0aCB3aXRoIGV4Y2VzcyBwYXJlbnRcbiAgLy8gcGF0aHMuIEl0J3Mgbm90IGEgZmlsZSwgc28gd2UgY2FuJ3Qgc3RyaXAgaXQuXG4gIGlmIChwYXRoLmVuZHNXaXRoKCcvLi4nKSkgcmV0dXJuIHBhdGg7XG4gIGNvbnN0IGluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZignLycpO1xuICByZXR1cm4gcGF0aC5zbGljZSgwLCBpbmRleCArIDEpO1xufVxuXG5mdW5jdGlvbiBtZXJnZVBhdGhzKHVybDogVXJsLCBiYXNlOiBVcmwpIHtcbiAgbm9ybWFsaXplUGF0aChiYXNlLCBiYXNlLnR5cGUpO1xuXG4gIC8vIElmIHRoZSBwYXRoIGlzIGp1c3QgYSBcIi9cIiwgdGhlbiBpdCB3YXMgYW4gZW1wdHkgcGF0aCB0byBiZWdpbiB3aXRoIChyZW1lbWJlciwgd2UncmUgYSByZWxhdGl2ZVxuICAvLyBwYXRoKS5cbiAgaWYgKHVybC5wYXRoID09PSAnLycpIHtcbiAgICB1cmwucGF0aCA9IGJhc2UucGF0aDtcbiAgfSBlbHNlIHtcbiAgICAvLyBSZXNvbHV0aW9uIGhhcHBlbnMgcmVsYXRpdmUgdG8gdGhlIGJhc2UgcGF0aCdzIGRpcmVjdG9yeSwgbm90IHRoZSBmaWxlLlxuICAgIHVybC5wYXRoID0gc3RyaXBQYXRoRmlsZW5hbWUoYmFzZS5wYXRoKSArIHVybC5wYXRoO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHBhdGggY2FuIGhhdmUgZW1wdHkgZGlyZWN0b3JpZXMgXCIvL1wiLCB1bm5lZWRlZCBwYXJlbnRzIFwiZm9vLy4uXCIsIG9yIGN1cnJlbnQgZGlyZWN0b3J5XG4gKiBcImZvby8uXCIuIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRvIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgodXJsOiBVcmwsIHR5cGU6IFVybFR5cGUpIHtcbiAgY29uc3QgcmVsID0gdHlwZSA8PSBVcmxUeXBlLlJlbGF0aXZlUGF0aDtcbiAgY29uc3QgcGllY2VzID0gdXJsLnBhdGguc3BsaXQoJy8nKTtcblxuICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBmaXJzdCBwaWVjZSBhbHdheXMsIHNvIHRoYXQgd2Ugb3V0cHV0IGEgbGVhZGluZyBzbGFzaC4gVGhlIGl0ZW0gYXRcbiAgLy8gcGllY2VzWzBdIGlzIGFuIGVtcHR5IHN0cmluZy5cbiAgbGV0IHBvaW50ZXIgPSAxO1xuXG4gIC8vIFBvc2l0aXZlIGlzIHRoZSBudW1iZXIgb2YgcmVhbCBkaXJlY3RvcmllcyB3ZSd2ZSBvdXRwdXQsIHVzZWQgZm9yIHBvcHBpbmcgYSBwYXJlbnQgZGlyZWN0b3J5LlxuICAvLyBFZywgXCJmb28vYmFyLy4uXCIgd2lsbCBoYXZlIGEgcG9zaXRpdmUgMiwgYW5kIHdlIGNhbiBkZWNyZW1lbnQgdG8gYmUgbGVmdCB3aXRoIGp1c3QgXCJmb29cIi5cbiAgbGV0IHBvc2l0aXZlID0gMDtcblxuICAvLyBXZSBuZWVkIHRvIGtlZXAgYSB0cmFpbGluZyBzbGFzaCBpZiB3ZSBlbmNvdW50ZXIgYW4gZW1wdHkgZGlyZWN0b3J5IChlZywgc3BsaXR0aW5nIFwiZm9vL1wiIHdpbGxcbiAgLy8gZ2VuZXJhdGUgYFtcImZvb1wiLCBcIlwiXWAgcGllY2VzKS4gQW5kLCBpZiB3ZSBwb3AgYSBwYXJlbnQgZGlyZWN0b3J5LiBCdXQgb25jZSB3ZSBlbmNvdW50ZXIgYVxuICAvLyByZWFsIGRpcmVjdG9yeSwgd2Ugd29uJ3QgbmVlZCB0byBhcHBlbmQsIHVubGVzcyB0aGUgb3RoZXIgY29uZGl0aW9ucyBoYXBwZW4gYWdhaW4uXG4gIGxldCBhZGRUcmFpbGluZ1NsYXNoID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwaWVjZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwaWVjZSA9IHBpZWNlc1tpXTtcblxuICAgIC8vIEFuIGVtcHR5IGRpcmVjdG9yeSwgY291bGQgYmUgYSB0cmFpbGluZyBzbGFzaCwgb3IganVzdCBhIGRvdWJsZSBcIi8vXCIgaW4gdGhlIHBhdGguXG4gICAgaWYgKCFwaWVjZSkge1xuICAgICAgYWRkVHJhaWxpbmdTbGFzaCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSByZWFsIGRpcmVjdG9yeSwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGFwcGVuZCBhbnltb3JlLlxuICAgIGFkZFRyYWlsaW5nU2xhc2ggPSBmYWxzZTtcblxuICAgIC8vIEEgY3VycmVudCBkaXJlY3RvcnksIHdoaWNoIHdlIGNhbiBhbHdheXMgZHJvcC5cbiAgICBpZiAocGllY2UgPT09ICcuJykgY29udGludWU7XG5cbiAgICAvLyBBIHBhcmVudCBkaXJlY3RvcnksIHdlIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVhbCBkaXJlY3RvcmllcyB3ZSBjYW4gcG9wLiBFbHNlLCB3ZVxuICAgIC8vIGhhdmUgYW4gZXhjZXNzIG9mIHBhcmVudHMsIGFuZCB3ZSdsbCBuZWVkIHRvIGtlZXAgdGhlIFwiLi5cIi5cbiAgICBpZiAocGllY2UgPT09ICcuLicpIHtcbiAgICAgIGlmIChwb3NpdGl2ZSkge1xuICAgICAgICBhZGRUcmFpbGluZ1NsYXNoID0gdHJ1ZTtcbiAgICAgICAgcG9zaXRpdmUtLTtcbiAgICAgICAgcG9pbnRlci0tO1xuICAgICAgfSBlbHNlIGlmIChyZWwpIHtcbiAgICAgICAgLy8gSWYgd2UncmUgaW4gYSByZWxhdGl2ZVBhdGgsIHRoZW4gd2UgbmVlZCB0byBrZWVwIHRoZSBleGNlc3MgcGFyZW50cy4gRWxzZSwgaW4gYW4gYWJzb2x1dGVcbiAgICAgICAgLy8gVVJMLCBwcm90b2NvbCByZWxhdGl2ZSBVUkwsIG9yIGFuIGFic29sdXRlIHBhdGgsIHdlIGRvbid0IG5lZWQgdG8ga2VlcCBleGNlc3MuXG4gICAgICAgIHBpZWNlc1twb2ludGVyKytdID0gcGllY2U7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBXZSd2ZSBlbmNvdW50ZXJlZCBhIHJlYWwgZGlyZWN0b3J5LiBNb3ZlIGl0IHRvIHRoZSBuZXh0IGluc2VydGlvbiBwb2ludGVyLCB3aGljaCBhY2NvdW50cyBmb3JcbiAgICAvLyBhbnkgcG9wcGVkIG9yIGRyb3BwZWQgZGlyZWN0b3JpZXMuXG4gICAgcGllY2VzW3BvaW50ZXIrK10gPSBwaWVjZTtcbiAgICBwb3NpdGl2ZSsrO1xuICB9XG5cbiAgbGV0IHBhdGggPSAnJztcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludGVyOyBpKyspIHtcbiAgICBwYXRoICs9ICcvJyArIHBpZWNlc1tpXTtcbiAgfVxuICBpZiAoIXBhdGggfHwgKGFkZFRyYWlsaW5nU2xhc2ggJiYgIXBhdGguZW5kc1dpdGgoJy8uLicpKSkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG4gIHVybC5wYXRoID0gcGF0aDtcbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byByZXNvbHZlIGBpbnB1dGAgVVJML3BhdGggcmVsYXRpdmUgdG8gYGJhc2VgLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlKGlucHV0OiBzdHJpbmcsIGJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmICghaW5wdXQgJiYgIWJhc2UpIHJldHVybiAnJztcblxuICBjb25zdCB1cmwgPSBwYXJzZVVybChpbnB1dCk7XG4gIGxldCBpbnB1dFR5cGUgPSB1cmwudHlwZTtcblxuICBpZiAoYmFzZSAmJiBpbnB1dFR5cGUgIT09IFVybFR5cGUuQWJzb2x1dGUpIHtcbiAgICBjb25zdCBiYXNlVXJsID0gcGFyc2VVcmwoYmFzZSk7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVXJsLnR5cGU7XG5cbiAgICBzd2l0Y2ggKGlucHV0VHlwZSkge1xuICAgICAgY2FzZSBVcmxUeXBlLkVtcHR5OlxuICAgICAgICB1cmwuaGFzaCA9IGJhc2VVcmwuaGFzaDtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIFVybFR5cGUuSGFzaDpcbiAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZVVybC5xdWVyeTtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIFVybFR5cGUuUXVlcnk6XG4gICAgICBjYXNlIFVybFR5cGUuUmVsYXRpdmVQYXRoOlxuICAgICAgICBtZXJnZVBhdGhzKHVybCwgYmFzZVVybCk7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBVcmxUeXBlLkFic29sdXRlUGF0aDpcbiAgICAgICAgLy8gVGhlIGhvc3QsIHVzZXIsIGFuZCBwb3J0IGFyZSBqb2luZWQsIHlvdSBjYW4ndCBjb3B5IG9uZSB3aXRob3V0IHRoZSBvdGhlcnMuXG4gICAgICAgIHVybC51c2VyID0gYmFzZVVybC51c2VyO1xuICAgICAgICB1cmwuaG9zdCA9IGJhc2VVcmwuaG9zdDtcbiAgICAgICAgdXJsLnBvcnQgPSBiYXNlVXJsLnBvcnQ7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBVcmxUeXBlLlNjaGVtZVJlbGF0aXZlOlxuICAgICAgICAvLyBUaGUgaW5wdXQgZG9lc24ndCBoYXZlIGEgc2NoZW1hIGF0IGxlYXN0LCBzbyB3ZSBuZWVkIHRvIGNvcHkgYXQgbGVhc3QgdGhhdCBvdmVyLlxuICAgICAgICB1cmwuc2NoZW1lID0gYmFzZVVybC5zY2hlbWU7XG4gICAgfVxuICAgIGlmIChiYXNlVHlwZSA+IGlucHV0VHlwZSkgaW5wdXRUeXBlID0gYmFzZVR5cGU7XG4gIH1cblxuICBub3JtYWxpemVQYXRoKHVybCwgaW5wdXRUeXBlKTtcblxuICBjb25zdCBxdWVyeUhhc2ggPSB1cmwucXVlcnkgKyB1cmwuaGFzaDtcbiAgc3dpdGNoIChpbnB1dFR5cGUpIHtcbiAgICAvLyBUaGlzIGlzIGltcG9zc2libGUsIGJlY2F1c2Ugb2YgdGhlIGVtcHR5IGNoZWNrcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgIC8vIGNhc2UgVXJsVHlwZS5FbXB0eTpcblxuICAgIGNhc2UgVXJsVHlwZS5IYXNoOlxuICAgIGNhc2UgVXJsVHlwZS5RdWVyeTpcbiAgICAgIHJldHVybiBxdWVyeUhhc2g7XG5cbiAgICBjYXNlIFVybFR5cGUuUmVsYXRpdmVQYXRoOiB7XG4gICAgICAvLyBUaGUgZmlyc3QgY2hhciBpcyBhbHdheXMgYSBcIi9cIiwgYW5kIHdlIG5lZWQgaXQgdG8gYmUgcmVsYXRpdmUuXG4gICAgICBjb25zdCBwYXRoID0gdXJsLnBhdGguc2xpY2UoMSk7XG5cbiAgICAgIGlmICghcGF0aCkgcmV0dXJuIHF1ZXJ5SGFzaCB8fCAnLic7XG5cbiAgICAgIGlmIChpc1JlbGF0aXZlKGJhc2UgfHwgaW5wdXQpICYmICFpc1JlbGF0aXZlKHBhdGgpKSB7XG4gICAgICAgIC8vIElmIGJhc2Ugc3RhcnRlZCB3aXRoIGEgbGVhZGluZyBcIi5cIiwgb3IgdGhlcmUgaXMgbm8gYmFzZSBhbmQgaW5wdXQgc3RhcnRlZCB3aXRoIGEgXCIuXCIsXG4gICAgICAgIC8vIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVsYXRpdmUgcGF0aCBzdGFydHMgd2l0aCBhIFwiLlwiLiBXZSBkb24ndCBrbm93IGlmXG4gICAgICAgIC8vIHJlbGF0aXZlIHN0YXJ0cyB3aXRoIGEgXCIuLlwiLCB0aG91Z2gsIHNvIGNoZWNrIGJlZm9yZSBwcmVwZW5kaW5nLlxuICAgICAgICByZXR1cm4gJy4vJyArIHBhdGggKyBxdWVyeUhhc2g7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXRoICsgcXVlcnlIYXNoO1xuICAgIH1cblxuICAgIGNhc2UgVXJsVHlwZS5BYnNvbHV0ZVBhdGg6XG4gICAgICByZXR1cm4gdXJsLnBhdGggKyBxdWVyeUhhc2g7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVybC5zY2hlbWUgKyAnLy8nICsgdXJsLnVzZXIgKyB1cmwuaG9zdCArIHVybC5wb3J0ICsgdXJsLnBhdGggKyBxdWVyeUhhc2g7XG4gIH1cbn1cbiIsICJpbXBvcnQgcmVzb2x2ZVVyaSBmcm9tICdAanJpZGdld2VsbC9yZXNvbHZlLXVyaSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc29sdmUoaW5wdXQ6IHN0cmluZywgYmFzZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgLy8gVGhlIGJhc2UgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgYSBkaXJlY3RvcnksIGlmIGl0J3Mgbm90IGVtcHR5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2Jsb2IvOGNiM2VlNTcvbGliL3V0aWwuanMjTDMyN1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi9kYTRhZGJiMy90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9kZXZ0b29scy9mcm9udF9lbmQvc2RrL1NvdXJjZU1hcC5qcyNMNDAwLUw0MDFcbiAgaWYgKGJhc2UgJiYgIWJhc2UuZW5kc1dpdGgoJy8nKSkgYmFzZSArPSAnLyc7XG5cbiAgcmV0dXJuIHJlc29sdmVVcmkoaW5wdXQsIGJhc2UpO1xufVxuIiwgIi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IFwiL1wiLCBidXQgbGVhdmVzIHRoZSBzbGFzaC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RyaXBGaWxlbmFtZShwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gJyc7XG4gIGNvbnN0IGluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZignLycpO1xuICByZXR1cm4gcGF0aC5zbGljZSgwLCBpbmRleCArIDEpO1xufVxuIiwgInR5cGUgR2VuZXJhdGVkQ29sdW1uID0gbnVtYmVyO1xudHlwZSBTb3VyY2VzSW5kZXggPSBudW1iZXI7XG50eXBlIFNvdXJjZUxpbmUgPSBudW1iZXI7XG50eXBlIFNvdXJjZUNvbHVtbiA9IG51bWJlcjtcbnR5cGUgTmFtZXNJbmRleCA9IG51bWJlcjtcblxudHlwZSBHZW5lcmF0ZWRMaW5lID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VNYXBTZWdtZW50ID1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uXVxuICB8IFtHZW5lcmF0ZWRDb2x1bW4sIFNvdXJjZXNJbmRleCwgU291cmNlTGluZSwgU291cmNlQ29sdW1uXVxuICB8IFtHZW5lcmF0ZWRDb2x1bW4sIFNvdXJjZXNJbmRleCwgU291cmNlTGluZSwgU291cmNlQ29sdW1uLCBOYW1lc0luZGV4XTtcblxuZXhwb3J0IHR5cGUgUmV2ZXJzZVNlZ21lbnQgPSBbU291cmNlQ29sdW1uLCBHZW5lcmF0ZWRMaW5lLCBHZW5lcmF0ZWRDb2x1bW5dO1xuXG5leHBvcnQgY29uc3QgQ09MVU1OID0gMDtcbmV4cG9ydCBjb25zdCBTT1VSQ0VTX0lOREVYID0gMTtcbmV4cG9ydCBjb25zdCBTT1VSQ0VfTElORSA9IDI7XG5leHBvcnQgY29uc3QgU09VUkNFX0NPTFVNTiA9IDM7XG5leHBvcnQgY29uc3QgTkFNRVNfSU5ERVggPSA0O1xuXG5leHBvcnQgY29uc3QgUkVWX0dFTkVSQVRFRF9MSU5FID0gMTtcbmV4cG9ydCBjb25zdCBSRVZfR0VORVJBVEVEX0NPTFVNTiA9IDI7XG4iLCAiaW1wb3J0IHsgQ09MVU1OIH0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5cbmltcG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXliZVNvcnQoXG4gIG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSxcbiAgb3duZWQ6IGJvb2xlYW4sXG4pOiBTb3VyY2VNYXBTZWdtZW50W11bXSB7XG4gIGNvbnN0IHVuc29ydGVkSW5kZXggPSBuZXh0VW5zb3J0ZWRTZWdtZW50TGluZShtYXBwaW5ncywgMCk7XG4gIGlmICh1bnNvcnRlZEluZGV4ID09PSBtYXBwaW5ncy5sZW5ndGgpIHJldHVybiBtYXBwaW5ncztcblxuICAvLyBJZiB3ZSBvd24gdGhlIGFycmF5IChtZWFuaW5nIHdlIHBhcnNlZCBpdCBmcm9tIEpTT04pLCB0aGVuIHdlJ3JlIGZyZWUgdG8gZGlyZWN0bHkgbXV0YXRlIGl0LiBJZlxuICAvLyBub3QsIHdlIGRvIG5vdCB3YW50IHRvIG1vZGlmeSB0aGUgY29uc3VtZXIncyBpbnB1dCBhcnJheS5cbiAgaWYgKCFvd25lZCkgbWFwcGluZ3MgPSBtYXBwaW5ncy5zbGljZSgpO1xuXG4gIGZvciAobGV0IGkgPSB1bnNvcnRlZEluZGV4OyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpID0gbmV4dFVuc29ydGVkU2VnbWVudExpbmUobWFwcGluZ3MsIGkgKyAxKSkge1xuICAgIG1hcHBpbmdzW2ldID0gc29ydFNlZ21lbnRzKG1hcHBpbmdzW2ldLCBvd25lZCk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmdzO1xufVxuXG5mdW5jdGlvbiBuZXh0VW5zb3J0ZWRTZWdtZW50TGluZShtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10sIHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBtYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaXNTb3J0ZWQobWFwcGluZ3NbaV0pKSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gbWFwcGluZ3MubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBpc1NvcnRlZChsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10pOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaiA9IDE7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgaWYgKGxpbmVbal1bQ09MVU1OXSA8IGxpbmVbaiAtIDFdW0NPTFVNTl0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNvcnRTZWdtZW50cyhsaW5lOiBTb3VyY2VNYXBTZWdtZW50W10sIG93bmVkOiBib29sZWFuKTogU291cmNlTWFwU2VnbWVudFtdIHtcbiAgaWYgKCFvd25lZCkgbGluZSA9IGxpbmUuc2xpY2UoKTtcbiAgcmV0dXJuIGxpbmUuc29ydChzb3J0Q29tcGFyYXRvcik7XG59XG5cbmZ1bmN0aW9uIHNvcnRDb21wYXJhdG9yKGE6IFNvdXJjZU1hcFNlZ21lbnQsIGI6IFNvdXJjZU1hcFNlZ21lbnQpOiBudW1iZXIge1xuICByZXR1cm4gYVtDT0xVTU5dIC0gYltDT0xVTU5dO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCwgUmV2ZXJzZVNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmltcG9ydCB7IENPTFVNTiB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG5leHBvcnQgdHlwZSBNZW1vU3RhdGUgPSB7XG4gIGxhc3RLZXk6IG51bWJlcjtcbiAgbGFzdE5lZWRsZTogbnVtYmVyO1xuICBsYXN0SW5kZXg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBsZXQgZm91bmQgPSBmYWxzZTtcblxuLyoqXG4gKiBBIGJpbmFyeSBzZWFyY2ggaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIHRoZSBpbmRleCBpZiBhIG1hdGNoIGlzIGZvdW5kLlxuICogSWYgbm8gbWF0Y2ggaXMgZm91bmQsIHRoZW4gdGhlIGxlZnQtaW5kZXggKHRoZSBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZW0gdGhhdCBjb21lcyBqdXN0XG4gKiBiZWZvcmUgdGhlIGRlc2lyZWQgaW5kZXgpIGlzIHJldHVybmVkLiBUbyBtYWludGFpbiBwcm9wZXIgc29ydCBvcmRlciwgYSBzcGxpY2Ugd291bGQgaGFwcGVuIGF0XG4gKiB0aGUgbmV4dCBpbmRleDpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYXJyYXkgPSBbMSwgM107XG4gKiBjb25zdCBuZWVkbGUgPSAyO1xuICogY29uc3QgaW5kZXggPSBiaW5hcnlTZWFyY2goYXJyYXksIG5lZWRsZSwgKGl0ZW0sIG5lZWRsZSkgPT4gaXRlbSAtIG5lZWRsZSk7XG4gKlxuICogYXNzZXJ0LmVxdWFsKGluZGV4LCAwKTtcbiAqIGFycmF5LnNwbGljZShpbmRleCArIDEsIDAsIG5lZWRsZSk7XG4gKiBhc3NlcnQuZGVlcEVxdWFsKGFycmF5LCBbMSwgMiwgM10pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5hcnlTZWFyY2goXG4gIGhheXN0YWNrOiBTb3VyY2VNYXBTZWdtZW50W10gfCBSZXZlcnNlU2VnbWVudFtdLFxuICBuZWVkbGU6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIGhpZ2g6IG51bWJlcixcbik6IG51bWJlciB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIGNvbnN0IG1pZCA9IGxvdyArICgoaGlnaCAtIGxvdykgPj4gMSk7XG4gICAgY29uc3QgY21wID0gaGF5c3RhY2tbbWlkXVtDT0xVTU5dIC0gbmVlZGxlO1xuXG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG5cbiAgICBpZiAoY21wIDwgMCkge1xuICAgICAgbG93ID0gbWlkICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaCA9IG1pZCAtIDE7XG4gICAgfVxuICB9XG5cbiAgZm91bmQgPSBmYWxzZTtcbiAgcmV0dXJuIGxvdyAtIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cHBlckJvdW5kKFxuICBoYXlzdGFjazogU291cmNlTWFwU2VnbWVudFtdIHwgUmV2ZXJzZVNlZ21lbnRbXSxcbiAgbmVlZGxlOiBudW1iZXIsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgaGF5c3RhY2subGVuZ3RoOyBpbmRleCA9IGkrKykge1xuICAgIGlmIChoYXlzdGFja1tpXVtDT0xVTU5dICE9PSBuZWVkbGUpIGJyZWFrO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvd2VyQm91bmQoXG4gIGhheXN0YWNrOiBTb3VyY2VNYXBTZWdtZW50W10gfCBSZXZlcnNlU2VnbWVudFtdLFxuICBuZWVkbGU6IG51bWJlcixcbiAgaW5kZXg6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaW5kZXggPSBpLS0pIHtcbiAgICBpZiAoaGF5c3RhY2tbaV1bQ09MVU1OXSAhPT0gbmVlZGxlKSBicmVhaztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZW1vaXplZFN0YXRlKCk6IE1lbW9TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbGFzdEtleTogLTEsXG4gICAgbGFzdE5lZWRsZTogLTEsXG4gICAgbGFzdEluZGV4OiAtMSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIG92ZXJseSBjb21wbGljYXRlZCBiZWFzdCBpcyBqdXN0IHRvIHJlY29yZCB0aGUgbGFzdCB0ZXN0ZWQgbGluZS9jb2x1bW4gYW5kIHRoZSByZXN1bHRpbmdcbiAqIGluZGV4LCBhbGxvd2luZyB1cyB0byBza2lwIGEgZmV3IHRlc3RzIGlmIG1hcHBpbmdzIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1vaXplZEJpbmFyeVNlYXJjaChcbiAgaGF5c3RhY2s6IFNvdXJjZU1hcFNlZ21lbnRbXSB8IFJldmVyc2VTZWdtZW50W10sXG4gIG5lZWRsZTogbnVtYmVyLFxuICBzdGF0ZTogTWVtb1N0YXRlLFxuICBrZXk6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGNvbnN0IHsgbGFzdEtleSwgbGFzdE5lZWRsZSwgbGFzdEluZGV4IH0gPSBzdGF0ZTtcblxuICBsZXQgbG93ID0gMDtcbiAgbGV0IGhpZ2ggPSBoYXlzdGFjay5sZW5ndGggLSAxO1xuICBpZiAoa2V5ID09PSBsYXN0S2V5KSB7XG4gICAgaWYgKG5lZWRsZSA9PT0gbGFzdE5lZWRsZSkge1xuICAgICAgZm91bmQgPSBsYXN0SW5kZXggIT09IC0xICYmIGhheXN0YWNrW2xhc3RJbmRleF1bQ09MVU1OXSA9PT0gbmVlZGxlO1xuICAgICAgcmV0dXJuIGxhc3RJbmRleDtcbiAgICB9XG5cbiAgICBpZiAobmVlZGxlID49IGxhc3ROZWVkbGUpIHtcbiAgICAgIC8vIGxhc3RJbmRleCBtYXkgYmUgLTEgaWYgdGhlIHByZXZpb3VzIG5lZWRsZSB3YXMgbm90IGZvdW5kLlxuICAgICAgbG93ID0gbGFzdEluZGV4ID09PSAtMSA/IDAgOiBsYXN0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2ggPSBsYXN0SW5kZXg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmxhc3RLZXkgPSBrZXk7XG4gIHN0YXRlLmxhc3ROZWVkbGUgPSBuZWVkbGU7XG5cbiAgcmV0dXJuIChzdGF0ZS5sYXN0SW5kZXggPSBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKSk7XG59XG4iLCAiaW1wb3J0IHsgQ09MVU1OLCBTT1VSQ0VTX0lOREVYLCBTT1VSQ0VfTElORSwgU09VUkNFX0NPTFVNTiB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuaW1wb3J0IHsgbWVtb2l6ZWRCaW5hcnlTZWFyY2gsIHVwcGVyQm91bmQgfSBmcm9tICcuL2JpbmFyeS1zZWFyY2gnO1xuXG5pbXBvcnQgdHlwZSB7IFJldmVyc2VTZWdtZW50LCBTb3VyY2VNYXBTZWdtZW50IH0gZnJvbSAnLi9zb3VyY2VtYXAtc2VnbWVudCc7XG5pbXBvcnQgdHlwZSB7IE1lbW9TdGF0ZSB9IGZyb20gJy4vYmluYXJ5LXNlYXJjaCc7XG5cbmV4cG9ydCB0eXBlIFNvdXJjZSA9IHtcbiAgX19wcm90b19fOiBudWxsO1xuICBbbGluZTogbnVtYmVyXTogRXhjbHVkZTxSZXZlcnNlU2VnbWVudCwgW251bWJlcl0+W107XG59O1xuXG4vLyBSZWJ1aWxkcyB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLCB3aXRoIG1hcHBpbmdzIHRoYXQgYXJlIG9yZGVyZWQgYnkgc291cmNlIGxpbmUvY29sdW1uIGluc3RlYWRcbi8vIG9mIGdlbmVyYXRlZCBsaW5lL2NvbHVtbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkQnlTb3VyY2VzKFxuICBkZWNvZGVkOiByZWFkb25seSBTb3VyY2VNYXBTZWdtZW50W11bXSxcbiAgbWVtb3M6IE1lbW9TdGF0ZVtdLFxuKTogU291cmNlW10ge1xuICBjb25zdCBzb3VyY2VzOiBTb3VyY2VbXSA9IG1lbW9zLm1hcChidWlsZE51bGxBcnJheSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbGluZSA9IGRlY29kZWRbaV07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBzZWcgPSBsaW5lW2pdO1xuICAgICAgaWYgKHNlZy5sZW5ndGggPT09IDEpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBzb3VyY2VJbmRleCA9IHNlZ1tTT1VSQ0VTX0lOREVYXTtcbiAgICAgIGNvbnN0IHNvdXJjZUxpbmUgPSBzZWdbU09VUkNFX0xJTkVdO1xuICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gc2VnW1NPVVJDRV9DT0xVTU5dO1xuICAgICAgY29uc3Qgb3JpZ2luYWxTb3VyY2UgPSBzb3VyY2VzW3NvdXJjZUluZGV4XTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTGluZSA9IChvcmlnaW5hbFNvdXJjZVtzb3VyY2VMaW5lXSB8fD0gW10pO1xuICAgICAgY29uc3QgbWVtbyA9IG1lbW9zW3NvdXJjZUluZGV4XTtcblxuICAgICAgLy8gVGhlIGJpbmFyeSBzZWFyY2ggZWl0aGVyIGZvdW5kIGEgbWF0Y2gsIG9yIGl0IGZvdW5kIHRoZSBsZWZ0LWluZGV4IGp1c3QgYmVmb3JlIHdoZXJlIHRoZVxuICAgICAgLy8gc2VnbWVudCBzaG91bGQgZ28uIEVpdGhlciB3YXksIHdlIHdhbnQgdG8gaW5zZXJ0IGFmdGVyIHRoYXQuIEFuZCB0aGVyZSBtYXkgYmUgbXVsdGlwbGVcbiAgICAgIC8vIGdlbmVyYXRlZCBzZWdtZW50cyBhc3NvY2lhdGVkIHdpdGggYW4gb3JpZ2luYWwgbG9jYXRpb24sIHNvIHRoZXJlIG1heSBuZWVkIHRvIG1vdmUgc2V2ZXJhbFxuICAgICAgLy8gaW5kZXhlcyBiZWZvcmUgd2UgZmluZCB3aGVyZSB3ZSBuZWVkIHRvIGluc2VydC5cbiAgICAgIGxldCBpbmRleCA9IHVwcGVyQm91bmQoXG4gICAgICAgIG9yaWdpbmFsTGluZSxcbiAgICAgICAgc291cmNlQ29sdW1uLFxuICAgICAgICBtZW1vaXplZEJpbmFyeVNlYXJjaChvcmlnaW5hbExpbmUsIHNvdXJjZUNvbHVtbiwgbWVtbywgc291cmNlTGluZSksXG4gICAgICApO1xuXG4gICAgICBtZW1vLmxhc3RJbmRleCA9ICsraW5kZXg7XG4gICAgICBpbnNlcnQob3JpZ2luYWxMaW5lLCBpbmRleCwgW3NvdXJjZUNvbHVtbiwgaSwgc2VnW0NPTFVNTl1dKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc291cmNlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0PFQ+KGFycmF5OiBUW10sIGluZGV4OiBudW1iZXIsIHZhbHVlOiBUKSB7XG4gIGZvciAobGV0IGkgPSBhcnJheS5sZW5ndGg7IGkgPiBpbmRleDsgaS0tKSB7XG4gICAgYXJyYXlbaV0gPSBhcnJheVtpIC0gMV07XG4gIH1cbiAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG59XG5cbi8vIE51bGwgYXJyYXlzIGFsbG93IHVzIHRvIHVzZSBvcmRlcmVkIGluZGV4IGtleXMgd2l0aG91dCBhY3R1YWxseSBhbGxvY2F0aW5nIGNvbnRpZ3VvdXMgbWVtb3J5IGxpa2Vcbi8vIGEgcmVhbCBhcnJheS4gV2UgdXNlIGEgbnVsbC1wcm90b3R5cGUgb2JqZWN0IHRvIGF2b2lkIHByb3RvdHlwZSBwb2xsdXRpb24gYW5kIGRlb3B0aW1pemF0aW9ucy5cbi8vIE51bWVyaWMgcHJvcGVydGllcyBvbiBvYmplY3RzIGFyZSBtYWdpY2FsbHkgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgZW5naW5lIHJlZ2FyZGxlc3Mgb2Zcbi8vIHRoZSBpbnNlcnRpb24gb3JkZXIuIFNvLCBieSBzZXR0aW5nIGFueSBudW1lcmljIGtleXMsIGV2ZW4gb3V0IG9mIG9yZGVyLCB3ZSdsbCBnZXQgYXNjZW5kaW5nXG4vLyBvcmRlciB3aGVuIGl0ZXJhdGluZyB3aXRoIGZvci1pbi5cbmZ1bmN0aW9uIGJ1aWxkTnVsbEFycmF5PFQgZXh0ZW5kcyB7IF9fcHJvdG9fXzogbnVsbCB9PigpOiBUIHtcbiAgcmV0dXJuIHsgX19wcm90b19fOiBudWxsIH0gYXMgVDtcbn1cbiIsICJpbXBvcnQgeyBUcmFjZU1hcCwgcHJlc29ydGVkRGVjb2RlZE1hcCwgZGVjb2RlZE1hcHBpbmdzIH0gZnJvbSAnLi90cmFjZS1tYXBwaW5nJztcbmltcG9ydCB7XG4gIENPTFVNTixcbiAgU09VUkNFU19JTkRFWCxcbiAgU09VUkNFX0xJTkUsXG4gIFNPVVJDRV9DT0xVTU4sXG4gIE5BTUVTX0lOREVYLFxufSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuaW1wb3J0IHR5cGUge1xuICBEZWNvZGVkU291cmNlTWFwLFxuICBEZWNvZGVkU291cmNlTWFwWElucHV0LFxuICBFbmNvZGVkU291cmNlTWFwWElucHV0LFxuICBTZWN0aW9uZWRTb3VyY2VNYXBYSW5wdXQsXG4gIFNlY3Rpb25lZFNvdXJjZU1hcElucHV0LFxuICBTZWN0aW9uWElucHV0LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG50eXBlIEFueU1hcCA9IHtcbiAgbmV3IChtYXA6IFNlY3Rpb25lZFNvdXJjZU1hcElucHV0LCBtYXBVcmw/OiBzdHJpbmcgfCBudWxsKTogVHJhY2VNYXA7XG4gIChtYXA6IFNlY3Rpb25lZFNvdXJjZU1hcElucHV0LCBtYXBVcmw/OiBzdHJpbmcgfCBudWxsKTogVHJhY2VNYXA7XG59O1xuXG5leHBvcnQgY29uc3QgQW55TWFwOiBBbnlNYXAgPSBmdW5jdGlvbiAobWFwLCBtYXBVcmwpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2UobWFwKTtcblxuICBpZiAoISgnc2VjdGlvbnMnIGluIHBhcnNlZCkpIHtcbiAgICByZXR1cm4gbmV3IFRyYWNlTWFwKHBhcnNlZCBhcyBEZWNvZGVkU291cmNlTWFwWElucHV0IHwgRW5jb2RlZFNvdXJjZU1hcFhJbnB1dCwgbWFwVXJsKTtcbiAgfVxuXG4gIGNvbnN0IG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSA9IFtdO1xuICBjb25zdCBzb3VyY2VzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzb3VyY2VzQ29udGVudDogKHN0cmluZyB8IG51bGwpW10gPSBbXTtcbiAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGlnbm9yZUxpc3Q6IG51bWJlcltdID0gW107XG5cbiAgcmVjdXJzZShcbiAgICBwYXJzZWQsXG4gICAgbWFwVXJsLFxuICAgIG1hcHBpbmdzLFxuICAgIHNvdXJjZXMsXG4gICAgc291cmNlc0NvbnRlbnQsXG4gICAgbmFtZXMsXG4gICAgaWdub3JlTGlzdCxcbiAgICAwLFxuICAgIDAsXG4gICAgSW5maW5pdHksXG4gICAgSW5maW5pdHksXG4gICk7XG5cbiAgY29uc3Qgam9pbmVkOiBEZWNvZGVkU291cmNlTWFwID0ge1xuICAgIHZlcnNpb246IDMsXG4gICAgZmlsZTogcGFyc2VkLmZpbGUsXG4gICAgbmFtZXMsXG4gICAgc291cmNlcyxcbiAgICBzb3VyY2VzQ29udGVudCxcbiAgICBtYXBwaW5ncyxcbiAgICBpZ25vcmVMaXN0LFxuICB9O1xuXG4gIHJldHVybiBwcmVzb3J0ZWREZWNvZGVkTWFwKGpvaW5lZCk7XG59IGFzIEFueU1hcDtcblxuZnVuY3Rpb24gcGFyc2U8VD4obWFwOiBUKTogRXhjbHVkZTxULCBzdHJpbmc+IHtcbiAgcmV0dXJuIHR5cGVvZiBtYXAgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShtYXApIDogbWFwO1xufVxuXG5mdW5jdGlvbiByZWN1cnNlKFxuICBpbnB1dDogU2VjdGlvbmVkU291cmNlTWFwWElucHV0LFxuICBtYXBVcmw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSxcbiAgc291cmNlczogc3RyaW5nW10sXG4gIHNvdXJjZXNDb250ZW50OiAoc3RyaW5nIHwgbnVsbClbXSxcbiAgbmFtZXM6IHN0cmluZ1tdLFxuICBpZ25vcmVMaXN0OiBudW1iZXJbXSxcbiAgbGluZU9mZnNldDogbnVtYmVyLFxuICBjb2x1bW5PZmZzZXQ6IG51bWJlcixcbiAgc3RvcExpbmU6IG51bWJlcixcbiAgc3RvcENvbHVtbjogbnVtYmVyLFxuKSB7XG4gIGNvbnN0IHsgc2VjdGlvbnMgfSA9IGlucHV0O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgeyBtYXAsIG9mZnNldCB9ID0gc2VjdGlvbnNbaV07XG5cbiAgICBsZXQgc2wgPSBzdG9wTGluZTtcbiAgICBsZXQgc2MgPSBzdG9wQ29sdW1uO1xuICAgIGlmIChpICsgMSA8IHNlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgbmV4dE9mZnNldCA9IHNlY3Rpb25zW2kgKyAxXS5vZmZzZXQ7XG4gICAgICBzbCA9IE1hdGgubWluKHN0b3BMaW5lLCBsaW5lT2Zmc2V0ICsgbmV4dE9mZnNldC5saW5lKTtcblxuICAgICAgaWYgKHNsID09PSBzdG9wTGluZSkge1xuICAgICAgICBzYyA9IE1hdGgubWluKHN0b3BDb2x1bW4sIGNvbHVtbk9mZnNldCArIG5leHRPZmZzZXQuY29sdW1uKTtcbiAgICAgIH0gZWxzZSBpZiAoc2wgPCBzdG9wTGluZSkge1xuICAgICAgICBzYyA9IGNvbHVtbk9mZnNldCArIG5leHRPZmZzZXQuY29sdW1uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFkZFNlY3Rpb24oXG4gICAgICBtYXAsXG4gICAgICBtYXBVcmwsXG4gICAgICBtYXBwaW5ncyxcbiAgICAgIHNvdXJjZXMsXG4gICAgICBzb3VyY2VzQ29udGVudCxcbiAgICAgIG5hbWVzLFxuICAgICAgaWdub3JlTGlzdCxcbiAgICAgIGxpbmVPZmZzZXQgKyBvZmZzZXQubGluZSxcbiAgICAgIGNvbHVtbk9mZnNldCArIG9mZnNldC5jb2x1bW4sXG4gICAgICBzbCxcbiAgICAgIHNjLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2VjdGlvbihcbiAgaW5wdXQ6IFNlY3Rpb25YSW5wdXRbJ21hcCddLFxuICBtYXBVcmw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSxcbiAgc291cmNlczogc3RyaW5nW10sXG4gIHNvdXJjZXNDb250ZW50OiAoc3RyaW5nIHwgbnVsbClbXSxcbiAgbmFtZXM6IHN0cmluZ1tdLFxuICBpZ25vcmVMaXN0OiBudW1iZXJbXSxcbiAgbGluZU9mZnNldDogbnVtYmVyLFxuICBjb2x1bW5PZmZzZXQ6IG51bWJlcixcbiAgc3RvcExpbmU6IG51bWJlcixcbiAgc3RvcENvbHVtbjogbnVtYmVyLFxuKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlKGlucHV0KTtcbiAgaWYgKCdzZWN0aW9ucycgaW4gcGFyc2VkKSByZXR1cm4gcmVjdXJzZSguLi4oYXJndW1lbnRzIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2YgcmVjdXJzZT4pKTtcblxuICBjb25zdCBtYXAgPSBuZXcgVHJhY2VNYXAocGFyc2VkLCBtYXBVcmwpO1xuICBjb25zdCBzb3VyY2VzT2Zmc2V0ID0gc291cmNlcy5sZW5ndGg7XG4gIGNvbnN0IG5hbWVzT2Zmc2V0ID0gbmFtZXMubGVuZ3RoO1xuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG4gIGNvbnN0IHsgcmVzb2x2ZWRTb3VyY2VzLCBzb3VyY2VzQ29udGVudDogY29udGVudHMsIGlnbm9yZUxpc3Q6IGlnbm9yZXMgfSA9IG1hcDtcblxuICBhcHBlbmQoc291cmNlcywgcmVzb2x2ZWRTb3VyY2VzKTtcbiAgYXBwZW5kKG5hbWVzLCBtYXAubmFtZXMpO1xuXG4gIGlmIChjb250ZW50cykgYXBwZW5kKHNvdXJjZXNDb250ZW50LCBjb250ZW50cyk7XG4gIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFNvdXJjZXMubGVuZ3RoOyBpKyspIHNvdXJjZXNDb250ZW50LnB1c2gobnVsbCk7XG5cbiAgaWYgKGlnbm9yZXMpIGZvciAobGV0IGkgPSAwOyBpIDwgaWdub3Jlcy5sZW5ndGg7IGkrKykgaWdub3JlTGlzdC5wdXNoKGlnbm9yZXNbaV0gKyBzb3VyY2VzT2Zmc2V0KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lSSA9IGxpbmVPZmZzZXQgKyBpO1xuXG4gICAgLy8gV2UgY2FuIG9ubHkgYWRkIHNvIG1hbnkgbGluZXMgYmVmb3JlIHdlIHN0ZXAgaW50byB0aGUgcmFuZ2UgdGhhdCB0aGUgbmV4dCBzZWN0aW9uJ3MgbWFwXG4gICAgLy8gY29udHJvbHMuIFdoZW4gd2UgZ2V0IHRvIHRoZSBsYXN0IGxpbmUsIHRoZW4gd2UnbGwgc3RhcnQgY2hlY2tpbmcgdGhlIHNlZ21lbnRzIHRvIHNlZSBpZlxuICAgIC8vIHRoZXkndmUgY3Jvc3NlZCBpbnRvIHRoZSBjb2x1bW4gcmFuZ2UuIEJ1dCBpdCBtYXkgbm90IGhhdmUgYW55IGNvbHVtbnMgdGhhdCBvdmVyc3RlcCwgc28gd2VcbiAgICAvLyBzdGlsbCBuZWVkIHRvIGNoZWNrIHRoYXQgd2UgZG9uJ3Qgb3ZlcnN0ZXAgbGluZXMsIHRvby5cbiAgICBpZiAobGluZUkgPiBzdG9wTGluZSkgcmV0dXJuO1xuXG4gICAgLy8gVGhlIG91dCBsaW5lIG1heSBhbHJlYWR5IGV4aXN0IGluIG1hcHBpbmdzIChpZiB3ZSdyZSBjb250aW51aW5nIHRoZSBsaW5lIHN0YXJ0ZWQgYnkgYVxuICAgIC8vIHByZXZpb3VzIHNlY3Rpb24pLiBPciwgd2UgbWF5IGhhdmUganVtcGVkIGFoZWFkIHNldmVyYWwgbGluZXMgdG8gc3RhcnQgdGhpcyBzZWN0aW9uLlxuICAgIGNvbnN0IG91dCA9IGdldExpbmUobWFwcGluZ3MsIGxpbmVJKTtcbiAgICAvLyBPbiB0aGUgMHRoIGxvb3AsIHRoZSBzZWN0aW9uJ3MgY29sdW1uIG9mZnNldCBzaGlmdHMgdXMgZm9yd2FyZC4gT24gYWxsIG90aGVyIGxpbmVzIChzaW5jZSB0aGVcbiAgICAvLyBtYXAgY2FuIGJlIG11bHRpcGxlIGxpbmVzKSwgaXQgZG9lc24ndC5cbiAgICBjb25zdCBjT2Zmc2V0ID0gaSA9PT0gMCA/IGNvbHVtbk9mZnNldCA6IDA7XG5cbiAgICBjb25zdCBsaW5lID0gZGVjb2RlZFtpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHNlZyA9IGxpbmVbal07XG4gICAgICBjb25zdCBjb2x1bW4gPSBjT2Zmc2V0ICsgc2VnW0NPTFVNTl07XG5cbiAgICAgIC8vIElmIHRoaXMgc2VnbWVudCBzdGVwcyBpbnRvIHRoZSBjb2x1bW4gcmFuZ2UgdGhhdCB0aGUgbmV4dCBzZWN0aW9uJ3MgbWFwIGNvbnRyb2xzLCB3ZSBuZWVkXG4gICAgICAvLyB0byBzdG9wIGVhcmx5LlxuICAgICAgaWYgKGxpbmVJID09PSBzdG9wTGluZSAmJiBjb2x1bW4gPj0gc3RvcENvbHVtbikgcmV0dXJuO1xuXG4gICAgICBpZiAoc2VnLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBvdXQucHVzaChbY29sdW1uXSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VzSW5kZXggPSBzb3VyY2VzT2Zmc2V0ICsgc2VnW1NPVVJDRVNfSU5ERVhdO1xuICAgICAgY29uc3Qgc291cmNlTGluZSA9IHNlZ1tTT1VSQ0VfTElORV07XG4gICAgICBjb25zdCBzb3VyY2VDb2x1bW4gPSBzZWdbU09VUkNFX0NPTFVNTl07XG4gICAgICBvdXQucHVzaChcbiAgICAgICAgc2VnLmxlbmd0aCA9PT0gNFxuICAgICAgICAgID8gW2NvbHVtbiwgc291cmNlc0luZGV4LCBzb3VyY2VMaW5lLCBzb3VyY2VDb2x1bW5dXG4gICAgICAgICAgOiBbY29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbiwgbmFtZXNPZmZzZXQgKyBzZWdbTkFNRVNfSU5ERVhdXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGVuZDxUPihhcnI6IFRbXSwgb3RoZXI6IFRbXSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG90aGVyLmxlbmd0aDsgaSsrKSBhcnIucHVzaChvdGhlcltpXSk7XG59XG5cbmZ1bmN0aW9uIGdldExpbmU8VD4oYXJyOiBUW11bXSwgaW5kZXg6IG51bWJlcik6IFRbXSB7XG4gIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoOyBpIDw9IGluZGV4OyBpKyspIGFycltpXSA9IFtdO1xuICByZXR1cm4gYXJyW2luZGV4XTtcbn1cbiIsICJpbXBvcnQgeyBlbmNvZGUsIGRlY29kZSB9IGZyb20gJ0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJy4vcmVzb2x2ZSc7XG5pbXBvcnQgc3RyaXBGaWxlbmFtZSBmcm9tICcuL3N0cmlwLWZpbGVuYW1lJztcbmltcG9ydCBtYXliZVNvcnQgZnJvbSAnLi9zb3J0JztcbmltcG9ydCBidWlsZEJ5U291cmNlcyBmcm9tICcuL2J5LXNvdXJjZSc7XG5pbXBvcnQge1xuICBtZW1vaXplZFN0YXRlLFxuICBtZW1vaXplZEJpbmFyeVNlYXJjaCxcbiAgdXBwZXJCb3VuZCxcbiAgbG93ZXJCb3VuZCxcbiAgZm91bmQgYXMgYnNGb3VuZCxcbn0gZnJvbSAnLi9iaW5hcnktc2VhcmNoJztcbmltcG9ydCB7XG4gIENPTFVNTixcbiAgU09VUkNFU19JTkRFWCxcbiAgU09VUkNFX0xJTkUsXG4gIFNPVVJDRV9DT0xVTU4sXG4gIE5BTUVTX0lOREVYLFxuICBSRVZfR0VORVJBVEVEX0xJTkUsXG4gIFJFVl9HRU5FUkFURURfQ09MVU1OLFxufSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcblxuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBTZWdtZW50LCBSZXZlcnNlU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuaW1wb3J0IHR5cGUge1xuICBTb3VyY2VNYXBWMyxcbiAgRGVjb2RlZFNvdXJjZU1hcCxcbiAgRW5jb2RlZFNvdXJjZU1hcCxcbiAgSW52YWxpZE9yaWdpbmFsTWFwcGluZyxcbiAgT3JpZ2luYWxNYXBwaW5nLFxuICBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyxcbiAgR2VuZXJhdGVkTWFwcGluZyxcbiAgU291cmNlTWFwSW5wdXQsXG4gIE5lZWRsZSxcbiAgU291cmNlTmVlZGxlLFxuICBTb3VyY2VNYXAsXG4gIEVhY2hNYXBwaW5nLFxuICBCaWFzLFxuICBYSW5wdXQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2UgfSBmcm9tICcuL2J5LXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IE1lbW9TdGF0ZSB9IGZyb20gJy4vYmluYXJ5LXNlYXJjaCc7XG5cbmV4cG9ydCB0eXBlIHsgU291cmNlTWFwU2VnbWVudCB9IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuZXhwb3J0IHR5cGUge1xuICBTb3VyY2VNYXAsXG4gIERlY29kZWRTb3VyY2VNYXAsXG4gIEVuY29kZWRTb3VyY2VNYXAsXG4gIFNlY3Rpb24sXG4gIFNlY3Rpb25lZFNvdXJjZU1hcCxcbiAgU291cmNlTWFwVjMsXG4gIEJpYXMsXG4gIEVhY2hNYXBwaW5nLFxuICBHZW5lcmF0ZWRNYXBwaW5nLFxuICBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyxcbiAgSW52YWxpZE9yaWdpbmFsTWFwcGluZyxcbiAgTmVlZGxlLFxuICBPcmlnaW5hbE1hcHBpbmcsXG4gIE9yaWdpbmFsTWFwcGluZyBhcyBNYXBwaW5nLFxuICBTZWN0aW9uZWRTb3VyY2VNYXBJbnB1dCxcbiAgU291cmNlTWFwSW5wdXQsXG4gIFNvdXJjZU5lZWRsZSxcbiAgWElucHV0LFxuICBFbmNvZGVkU291cmNlTWFwWElucHV0LFxuICBEZWNvZGVkU291cmNlTWFwWElucHV0LFxuICBTZWN0aW9uZWRTb3VyY2VNYXBYSW5wdXQsXG4gIFNlY3Rpb25YSW5wdXQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgUHVibGljTWFwIHtcbiAgX2VuY29kZWQ6IFRyYWNlTWFwWydfZW5jb2RlZCddO1xuICBfZGVjb2RlZDogVHJhY2VNYXBbJ19kZWNvZGVkJ107XG4gIF9kZWNvZGVkTWVtbzogVHJhY2VNYXBbJ19kZWNvZGVkTWVtbyddO1xuICBfYnlTb3VyY2VzOiBUcmFjZU1hcFsnX2J5U291cmNlcyddO1xuICBfYnlTb3VyY2VNZW1vczogVHJhY2VNYXBbJ19ieVNvdXJjZU1lbW9zJ107XG59XG5cbmNvbnN0IExJTkVfR1RSX1pFUk8gPSAnYGxpbmVgIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgKGxpbmVzIHN0YXJ0IGF0IGxpbmUgMSknO1xuY29uc3QgQ09MX0dUUl9FUV9aRVJPID0gJ2Bjb2x1bW5gIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAgKGNvbHVtbnMgc3RhcnQgYXQgY29sdW1uIDApJztcblxuZXhwb3J0IGNvbnN0IExFQVNUX1VQUEVSX0JPVU5EID0gLTE7XG5leHBvcnQgY29uc3QgR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuXG5leHBvcnQgeyBBbnlNYXAgfSBmcm9tICcuL2FueS1tYXAnO1xuXG5leHBvcnQgY2xhc3MgVHJhY2VNYXAgaW1wbGVtZW50cyBTb3VyY2VNYXAge1xuICBkZWNsYXJlIHZlcnNpb246IFNvdXJjZU1hcFYzWyd2ZXJzaW9uJ107XG4gIGRlY2xhcmUgZmlsZTogU291cmNlTWFwVjNbJ2ZpbGUnXTtcbiAgZGVjbGFyZSBuYW1lczogU291cmNlTWFwVjNbJ25hbWVzJ107XG4gIGRlY2xhcmUgc291cmNlUm9vdDogU291cmNlTWFwVjNbJ3NvdXJjZVJvb3QnXTtcbiAgZGVjbGFyZSBzb3VyY2VzOiBTb3VyY2VNYXBWM1snc291cmNlcyddO1xuICBkZWNsYXJlIHNvdXJjZXNDb250ZW50OiBTb3VyY2VNYXBWM1snc291cmNlc0NvbnRlbnQnXTtcbiAgZGVjbGFyZSBpZ25vcmVMaXN0OiBTb3VyY2VNYXBWM1snaWdub3JlTGlzdCddO1xuXG4gIGRlY2xhcmUgcmVzb2x2ZWRTb3VyY2VzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9lbmNvZGVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBkZWNsYXJlIF9kZWNvZGVkOiBTb3VyY2VNYXBTZWdtZW50W11bXSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9kZWNvZGVkTWVtbzogTWVtb1N0YXRlO1xuXG4gIHByaXZhdGUgZGVjbGFyZSBfYnlTb3VyY2VzOiBTb3VyY2VbXSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9ieVNvdXJjZU1lbW9zOiBNZW1vU3RhdGVbXSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihtYXA6IFNvdXJjZU1hcElucHV0LCBtYXBVcmw/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgbWFwID09PSAnc3RyaW5nJztcblxuICAgIGlmICghaXNTdHJpbmcgJiYgKG1hcCBhcyB1bmtub3duIGFzIHsgX2RlY29kZWRNZW1vOiBhbnkgfSkuX2RlY29kZWRNZW1vKSByZXR1cm4gbWFwIGFzIFRyYWNlTWFwO1xuXG4gICAgY29uc3QgcGFyc2VkID0gKGlzU3RyaW5nID8gSlNPTi5wYXJzZShtYXApIDogbWFwKSBhcyBEZWNvZGVkU291cmNlTWFwIHwgRW5jb2RlZFNvdXJjZU1hcDtcblxuICAgIGNvbnN0IHsgdmVyc2lvbiwgZmlsZSwgbmFtZXMsIHNvdXJjZVJvb3QsIHNvdXJjZXMsIHNvdXJjZXNDb250ZW50IH0gPSBwYXJzZWQ7XG4gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICB0aGlzLmZpbGUgPSBmaWxlO1xuICAgIHRoaXMubmFtZXMgPSBuYW1lcyB8fCBbXTtcbiAgICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICAgIHRoaXMuc291cmNlcyA9IHNvdXJjZXM7XG4gICAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICAgIHRoaXMuaWdub3JlTGlzdCA9IHBhcnNlZC5pZ25vcmVMaXN0IHx8IChwYXJzZWQgYXMgWElucHV0KS54X2dvb2dsZV9pZ25vcmVMaXN0IHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZyb20gPSByZXNvbHZlKHNvdXJjZVJvb3QgfHwgJycsIHN0cmlwRmlsZW5hbWUobWFwVXJsKSk7XG4gICAgdGhpcy5yZXNvbHZlZFNvdXJjZXMgPSBzb3VyY2VzLm1hcCgocykgPT4gcmVzb2x2ZShzIHx8ICcnLCBmcm9tKSk7XG5cbiAgICBjb25zdCB7IG1hcHBpbmdzIH0gPSBwYXJzZWQ7XG4gICAgaWYgKHR5cGVvZiBtYXBwaW5ncyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2VuY29kZWQgPSBtYXBwaW5ncztcbiAgICAgIHRoaXMuX2RlY29kZWQgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VuY29kZWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9kZWNvZGVkID0gbWF5YmVTb3J0KG1hcHBpbmdzLCBpc1N0cmluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVjb2RlZE1lbW8gPSBtZW1vaXplZFN0YXRlKCk7XG4gICAgdGhpcy5fYnlTb3VyY2VzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2J5U291cmNlTWVtb3MgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUeXBlc2NyaXB0IGRvZXNuJ3QgYWxsb3cgZnJpZW5kIGFjY2VzcyB0byBwcml2YXRlIGZpZWxkcywgc28gdGhpcyBqdXN0IGNhc3RzIHRoZSBtYXAgaW50byBhIHR5cGVcbiAqIHdpdGggcHVibGljIGFjY2VzcyBtb2RpZmllcnMuXG4gKi9cbmZ1bmN0aW9uIGNhc3QobWFwOiB1bmtub3duKTogUHVibGljTWFwIHtcbiAgcmV0dXJuIG1hcCBhcyBhbnk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZW5jb2RlZCAoVkxRIHN0cmluZykgZm9ybSBvZiB0aGUgU291cmNlTWFwJ3MgbWFwcGluZ3MgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVkTWFwcGluZ3MobWFwOiBUcmFjZU1hcCk6IEVuY29kZWRTb3VyY2VNYXBbJ21hcHBpbmdzJ10ge1xuICByZXR1cm4gKGNhc3QobWFwKS5fZW5jb2RlZCA/Pz0gZW5jb2RlKGNhc3QobWFwKS5fZGVjb2RlZCEpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWNvZGVkIChhcnJheSBvZiBsaW5lcyBvZiBzZWdtZW50cykgZm9ybSBvZiB0aGUgU291cmNlTWFwJ3MgbWFwcGluZ3MgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVkTWFwcGluZ3MobWFwOiBUcmFjZU1hcCk6IFJlYWRvbmx5PERlY29kZWRTb3VyY2VNYXBbJ21hcHBpbmdzJ10+IHtcbiAgcmV0dXJuIChjYXN0KG1hcCkuX2RlY29kZWQgfHw9IGRlY29kZShjYXN0KG1hcCkuX2VuY29kZWQhKSk7XG59XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgQVBJIHRvIGZpbmQgdGhlIHNlZ21lbnQgYXNzb2NpYXRlZCB3aXRoIGEgZ2VuZXJhdGVkIGxpbmUvY29sdW1uICh0aGluaywgZnJvbSBhXG4gKiBzdGFjayB0cmFjZSkuIExpbmUgYW5kIGNvbHVtbiBoZXJlIGFyZSAwLWJhc2VkLCB1bmxpa2UgYG9yaWdpbmFsUG9zaXRpb25Gb3JgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2VTZWdtZW50KFxuICBtYXA6IFRyYWNlTWFwLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuKTogUmVhZG9ubHk8U291cmNlTWFwU2VnbWVudD4gfCBudWxsIHtcbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZWRNYXBwaW5ncyhtYXApO1xuXG4gIC8vIEl0J3MgY29tbW9uIGZvciBwYXJlbnQgc291cmNlIG1hcHMgdG8gaGF2ZSBwb2ludGVycyB0byBsaW5lcyB0aGF0IGhhdmUgbm9cbiAgLy8gbWFwcGluZyAobGlrZSBhIFwiLy8jIHNvdXJjZU1hcHBpbmdVUkw9XCIpIGF0IHRoZSBlbmQgb2YgdGhlIGNoaWxkIGZpbGUuXG4gIGlmIChsaW5lID49IGRlY29kZWQubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV07XG4gIGNvbnN0IGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gICAgc2VnbWVudHMsXG4gICAgY2FzdChtYXApLl9kZWNvZGVkTWVtbyxcbiAgICBsaW5lLFxuICAgIGNvbHVtbixcbiAgICBHUkVBVEVTVF9MT1dFUl9CT1VORCxcbiAgKTtcblxuICByZXR1cm4gaW5kZXggPT09IC0xID8gbnVsbCA6IHNlZ21lbnRzW2luZGV4XTtcbn1cblxuLyoqXG4gKiBBIGhpZ2hlci1sZXZlbCBBUEkgdG8gZmluZCB0aGUgc291cmNlL2xpbmUvY29sdW1uIGFzc29jaWF0ZWQgd2l0aCBhIGdlbmVyYXRlZCBsaW5lL2NvbHVtblxuICogKHRoaW5rLCBmcm9tIGEgc3RhY2sgdHJhY2UpLiBMaW5lIGlzIDEtYmFzZWQsIGJ1dCBjb2x1bW4gaXMgMC1iYXNlZCwgZHVlIHRvIGxlZ2FjeSBiZWhhdmlvciBpblxuICogYHNvdXJjZS1tYXBgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmlnaW5hbFBvc2l0aW9uRm9yKFxuICBtYXA6IFRyYWNlTWFwLFxuICBuZWVkbGU6IE5lZWRsZSxcbik6IE9yaWdpbmFsTWFwcGluZyB8IEludmFsaWRPcmlnaW5hbE1hcHBpbmcge1xuICBsZXQgeyBsaW5lLCBjb2x1bW4sIGJpYXMgfSA9IG5lZWRsZTtcbiAgbGluZS0tO1xuICBpZiAobGluZSA8IDApIHRocm93IG5ldyBFcnJvcihMSU5FX0dUUl9aRVJPKTtcbiAgaWYgKGNvbHVtbiA8IDApIHRocm93IG5ldyBFcnJvcihDT0xfR1RSX0VRX1pFUk8pO1xuXG4gIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVkTWFwcGluZ3MobWFwKTtcblxuICAvLyBJdCdzIGNvbW1vbiBmb3IgcGFyZW50IHNvdXJjZSBtYXBzIHRvIGhhdmUgcG9pbnRlcnMgdG8gbGluZXMgdGhhdCBoYXZlIG5vXG4gIC8vIG1hcHBpbmcgKGxpa2UgYSBcIi8vIyBzb3VyY2VNYXBwaW5nVVJMPVwiKSBhdCB0aGUgZW5kIG9mIHRoZSBjaGlsZCBmaWxlLlxuICBpZiAobGluZSA+PSBkZWNvZGVkLmxlbmd0aCkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IHNlZ21lbnRzID0gZGVjb2RlZFtsaW5lXTtcbiAgY29uc3QgaW5kZXggPSB0cmFjZVNlZ21lbnRJbnRlcm5hbChcbiAgICBzZWdtZW50cyxcbiAgICBjYXN0KG1hcCkuX2RlY29kZWRNZW1vLFxuICAgIGxpbmUsXG4gICAgY29sdW1uLFxuICAgIGJpYXMgfHwgR1JFQVRFU1RfTE9XRVJfQk9VTkQsXG4gICk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpbmRleF07XG4gIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IHsgbmFtZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuICByZXR1cm4gT01hcHBpbmcoXG4gICAgcmVzb2x2ZWRTb3VyY2VzW3NlZ21lbnRbU09VUkNFU19JTkRFWF1dLFxuICAgIHNlZ21lbnRbU09VUkNFX0xJTkVdICsgMSxcbiAgICBzZWdtZW50W1NPVVJDRV9DT0xVTU5dLFxuICAgIHNlZ21lbnQubGVuZ3RoID09PSA1ID8gbmFtZXNbc2VnbWVudFtOQU1FU19JTkRFWF1dIDogbnVsbCxcbiAgKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZ2VuZXJhdGVkIGxpbmUvY29sdW1uIHBvc2l0aW9uIG9mIHRoZSBwcm92aWRlZCBzb3VyY2UvbGluZS9jb2x1bW4gc291cmNlIHBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb25Gb3IoXG4gIG1hcDogVHJhY2VNYXAsXG4gIG5lZWRsZTogU291cmNlTmVlZGxlLFxuKTogR2VuZXJhdGVkTWFwcGluZyB8IEludmFsaWRHZW5lcmF0ZWRNYXBwaW5nIHtcbiAgY29uc3QgeyBzb3VyY2UsIGxpbmUsIGNvbHVtbiwgYmlhcyB9ID0gbmVlZGxlO1xuICByZXR1cm4gZ2VuZXJhdGVkUG9zaXRpb24obWFwLCBzb3VyY2UsIGxpbmUsIGNvbHVtbiwgYmlhcyB8fCBHUkVBVEVTVF9MT1dFUl9CT1VORCwgZmFsc2UpO1xufVxuXG4vKipcbiAqIEZpbmRzIGFsbCBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gcG9zaXRpb25zIG9mIHRoZSBwcm92aWRlZCBzb3VyY2UvbGluZS9jb2x1bW4gc291cmNlIHBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKG1hcDogVHJhY2VNYXAsIG5lZWRsZTogU291cmNlTmVlZGxlKTogR2VuZXJhdGVkTWFwcGluZ1tdIHtcbiAgY29uc3QgeyBzb3VyY2UsIGxpbmUsIGNvbHVtbiwgYmlhcyB9ID0gbmVlZGxlO1xuICAvLyBTb3VyY2VNYXBDb25zdW1lciB1c2VzIExFQVNUX1VQUEVSX0JPVU5EIGZvciBzb21lIHJlYXNvbiwgc28gd2UgZm9sbG93IHN1aXQuXG4gIHJldHVybiBnZW5lcmF0ZWRQb3NpdGlvbihtYXAsIHNvdXJjZSwgbGluZSwgY29sdW1uLCBiaWFzIHx8IExFQVNUX1VQUEVSX0JPVU5ELCB0cnVlKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBlYWNoIG1hcHBpbmcgaW4gZ2VuZXJhdGVkIHBvc2l0aW9uIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWFjaE1hcHBpbmcobWFwOiBUcmFjZU1hcCwgY2I6IChtYXBwaW5nOiBFYWNoTWFwcGluZykgPT4gdm9pZCk6IHZvaWQge1xuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG4gIGNvbnN0IHsgbmFtZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBkZWNvZGVkW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc2VnID0gbGluZVtqXTtcblxuICAgICAgY29uc3QgZ2VuZXJhdGVkTGluZSA9IGkgKyAxO1xuICAgICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1uID0gc2VnWzBdO1xuICAgICAgbGV0IHNvdXJjZSA9IG51bGw7XG4gICAgICBsZXQgb3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgICAgIGxldCBvcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gICAgICBsZXQgbmFtZSA9IG51bGw7XG4gICAgICBpZiAoc2VnLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBzb3VyY2UgPSByZXNvbHZlZFNvdXJjZXNbc2VnWzFdXTtcbiAgICAgICAgb3JpZ2luYWxMaW5lID0gc2VnWzJdICsgMTtcbiAgICAgICAgb3JpZ2luYWxDb2x1bW4gPSBzZWdbM107XG4gICAgICB9XG4gICAgICBpZiAoc2VnLmxlbmd0aCA9PT0gNSkgbmFtZSA9IG5hbWVzW3NlZ1s0XV07XG5cbiAgICAgIGNiKHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIG9yaWdpbmFsTGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW4sXG4gICAgICAgIG5hbWUsXG4gICAgICB9IGFzIEVhY2hNYXBwaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc291cmNlSW5kZXgobWFwOiBUcmFjZU1hcCwgc291cmNlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCB7IHNvdXJjZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuICBsZXQgaW5kZXggPSBzb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcbiAgaWYgKGluZGV4ID09PSAtMSkgaW5kZXggPSByZXNvbHZlZFNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBwYXJ0aWN1bGFyIHNvdXJjZSwgaWYgaXRzIGZvdW5kLiBSZXR1cm5zIG51bGwgaWYgbm90LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc291cmNlQ29udGVudEZvcihtYXA6IFRyYWNlTWFwLCBzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IHNvdXJjZXNDb250ZW50IH0gPSBtYXA7XG4gIGlmIChzb3VyY2VzQ29udGVudCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaW5kZXggPSBzb3VyY2VJbmRleChtYXAsIHNvdXJjZSk7XG4gIHJldHVybiBpbmRleCA9PT0gLTEgPyBudWxsIDogc291cmNlc0NvbnRlbnRbaW5kZXhdO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHNvdXJjZSBpcyBtYXJrZWQgdG8gaWdub3JlIGJ5IHRoZSBzb3VyY2UgbWFwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZ25vcmVkKG1hcDogVHJhY2VNYXAsIHNvdXJjZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgaWdub3JlTGlzdCB9ID0gbWFwO1xuICBpZiAoaWdub3JlTGlzdCA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGluZGV4ID0gc291cmNlSW5kZXgobWFwLCBzb3VyY2UpO1xuICByZXR1cm4gaW5kZXggPT09IC0xID8gZmFsc2UgOiBpZ25vcmVMaXN0LmluY2x1ZGVzKGluZGV4KTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0aGF0IHNraXBzIHNvcnRpbmcgb2YgdGhlIGlucHV0IG1hcCdzIG1hcHBpbmdzIGFycmF5LCB3aGljaCBjYW4gYmUgZXhwZW5zaXZlIGZvciBsYXJnZXJcbiAqIG1hcHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzb3J0ZWREZWNvZGVkTWFwKG1hcDogRGVjb2RlZFNvdXJjZU1hcCwgbWFwVXJsPzogc3RyaW5nKTogVHJhY2VNYXAge1xuICBjb25zdCB0cmFjZXIgPSBuZXcgVHJhY2VNYXAoY2xvbmUobWFwLCBbXSksIG1hcFVybCk7XG4gIGNhc3QodHJhY2VyKS5fZGVjb2RlZCA9IG1hcC5tYXBwaW5ncztcbiAgcmV0dXJuIHRyYWNlcjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc291cmNlbWFwIG9iamVjdCAod2l0aCBkZWNvZGVkIG1hcHBpbmdzKSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBhIGxpYnJhcnkgdGhhdCBleHBlY3RzXG4gKiBhIHNvdXJjZW1hcCwgb3IgdG8gSlNPTi5zdHJpbmdpZnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVkTWFwKFxuICBtYXA6IFRyYWNlTWFwLFxuKTogT21pdDxEZWNvZGVkU291cmNlTWFwLCAnbWFwcGluZ3MnPiAmIHsgbWFwcGluZ3M6IHJlYWRvbmx5IFNvdXJjZU1hcFNlZ21lbnRbXVtdIH0ge1xuICByZXR1cm4gY2xvbmUobWFwLCBkZWNvZGVkTWFwcGluZ3MobWFwKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZW1hcCBvYmplY3QgKHdpdGggZW5jb2RlZCBtYXBwaW5ncykgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSBsaWJyYXJ5IHRoYXQgZXhwZWN0c1xuICogYSBzb3VyY2VtYXAsIG9yIHRvIEpTT04uc3RyaW5naWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlZE1hcChtYXA6IFRyYWNlTWFwKTogRW5jb2RlZFNvdXJjZU1hcCB7XG4gIHJldHVybiBjbG9uZShtYXAsIGVuY29kZWRNYXBwaW5ncyhtYXApKTtcbn1cblxuZnVuY3Rpb24gY2xvbmU8VCBleHRlbmRzIHN0cmluZyB8IHJlYWRvbmx5IFNvdXJjZU1hcFNlZ21lbnRbXVtdPihcbiAgbWFwOiBUcmFjZU1hcCB8IERlY29kZWRTb3VyY2VNYXAsXG4gIG1hcHBpbmdzOiBULFxuKTogVCBleHRlbmRzIHN0cmluZyA/IEVuY29kZWRTb3VyY2VNYXAgOiBEZWNvZGVkU291cmNlTWFwIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBtYXAudmVyc2lvbixcbiAgICBmaWxlOiBtYXAuZmlsZSxcbiAgICBuYW1lczogbWFwLm5hbWVzLFxuICAgIHNvdXJjZVJvb3Q6IG1hcC5zb3VyY2VSb290LFxuICAgIHNvdXJjZXM6IG1hcC5zb3VyY2VzLFxuICAgIHNvdXJjZXNDb250ZW50OiBtYXAuc291cmNlc0NvbnRlbnQsXG4gICAgbWFwcGluZ3MsXG4gICAgaWdub3JlTGlzdDogbWFwLmlnbm9yZUxpc3QgfHwgKG1hcCBhcyBYSW5wdXQpLnhfZ29vZ2xlX2lnbm9yZUxpc3QsXG4gIH0gYXMgYW55O1xufVxuXG5mdW5jdGlvbiBPTWFwcGluZyhzb3VyY2U6IG51bGwsIGxpbmU6IG51bGwsIGNvbHVtbjogbnVsbCwgbmFtZTogbnVsbCk6IEludmFsaWRPcmlnaW5hbE1hcHBpbmc7XG5mdW5jdGlvbiBPTWFwcGluZyhcbiAgc291cmNlOiBzdHJpbmcsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIG5hbWU6IHN0cmluZyB8IG51bGwsXG4pOiBPcmlnaW5hbE1hcHBpbmc7XG5mdW5jdGlvbiBPTWFwcGluZyhcbiAgc291cmNlOiBzdHJpbmcgfCBudWxsLFxuICBsaW5lOiBudW1iZXIgfCBudWxsLFxuICBjb2x1bW46IG51bWJlciB8IG51bGwsXG4gIG5hbWU6IHN0cmluZyB8IG51bGwsXG4pOiBPcmlnaW5hbE1hcHBpbmcgfCBJbnZhbGlkT3JpZ2luYWxNYXBwaW5nIHtcbiAgcmV0dXJuIHsgc291cmNlLCBsaW5lLCBjb2x1bW4sIG5hbWUgfSBhcyBhbnk7XG59XG5cbmZ1bmN0aW9uIEdNYXBwaW5nKGxpbmU6IG51bGwsIGNvbHVtbjogbnVsbCk6IEludmFsaWRHZW5lcmF0ZWRNYXBwaW5nO1xuZnVuY3Rpb24gR01hcHBpbmcobGluZTogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6IEdlbmVyYXRlZE1hcHBpbmc7XG5mdW5jdGlvbiBHTWFwcGluZyhcbiAgbGluZTogbnVtYmVyIHwgbnVsbCxcbiAgY29sdW1uOiBudW1iZXIgfCBudWxsLFxuKTogR2VuZXJhdGVkTWFwcGluZyB8IEludmFsaWRHZW5lcmF0ZWRNYXBwaW5nIHtcbiAgcmV0dXJuIHsgbGluZSwgY29sdW1uIH0gYXMgYW55O1xufVxuXG5mdW5jdGlvbiB0cmFjZVNlZ21lbnRJbnRlcm5hbChcbiAgc2VnbWVudHM6IFNvdXJjZU1hcFNlZ21lbnRbXSxcbiAgbWVtbzogTWVtb1N0YXRlLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuKTogbnVtYmVyO1xuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gIHNlZ21lbnRzOiBSZXZlcnNlU2VnbWVudFtdLFxuICBtZW1vOiBNZW1vU3RhdGUsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIGJpYXM6IEJpYXMsXG4pOiBudW1iZXI7XG5mdW5jdGlvbiB0cmFjZVNlZ21lbnRJbnRlcm5hbChcbiAgc2VnbWVudHM6IFNvdXJjZU1hcFNlZ21lbnRbXSB8IFJldmVyc2VTZWdtZW50W10sXG4gIG1lbW86IE1lbW9TdGF0ZSxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbik6IG51bWJlciB7XG4gIGxldCBpbmRleCA9IG1lbW9pemVkQmluYXJ5U2VhcmNoKHNlZ21lbnRzLCBjb2x1bW4sIG1lbW8sIGxpbmUpO1xuICBpZiAoYnNGb3VuZCkge1xuICAgIGluZGV4ID0gKGJpYXMgPT09IExFQVNUX1VQUEVSX0JPVU5EID8gdXBwZXJCb3VuZCA6IGxvd2VyQm91bmQpKHNlZ21lbnRzLCBjb2x1bW4sIGluZGV4KTtcbiAgfSBlbHNlIGlmIChiaWFzID09PSBMRUFTVF9VUFBFUl9CT1VORCkgaW5kZXgrKztcblxuICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGgpIHJldHVybiAtMTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBzbGljZUdlbmVyYXRlZFBvc2l0aW9ucyhcbiAgc2VnbWVudHM6IFJldmVyc2VTZWdtZW50W10sXG4gIG1lbW86IE1lbW9TdGF0ZSxcbiAgbGluZTogbnVtYmVyLFxuICBjb2x1bW46IG51bWJlcixcbiAgYmlhczogQmlhcyxcbik6IEdlbmVyYXRlZE1hcHBpbmdbXSB7XG4gIGxldCBtaW4gPSB0cmFjZVNlZ21lbnRJbnRlcm5hbChzZWdtZW50cywgbWVtbywgbGluZSwgY29sdW1uLCBHUkVBVEVTVF9MT1dFUl9CT1VORCk7XG5cbiAgLy8gV2UgaWdub3JlZCB0aGUgYmlhcyB3aGVuIHRyYWNpbmcgdGhlIHNlZ21lbnQgc28gdGhhdCB3ZSdyZSBndWFybmF0ZWVkIHRvIGZpbmQgdGhlIGZpcnN0IChpblxuICAvLyBpbnNlcnRpb24gb3JkZXIpIHNlZ21lbnQgdGhhdCBtYXRjaGVkLiBFdmVuIGlmIHdlIGRpZCByZXNwZWN0IHRoZSBiaWFzIHdoZW4gdHJhY2luZywgd2Ugd291bGRcbiAgLy8gc3RpbGwgbmVlZCB0byBjYWxsIGBsb3dlckJvdW5kKClgIHRvIGZpbmQgdGhlIGZpcnN0IHNlZ21lbnQsIHdoaWNoIGlzIHNsb3dlciB0aGFuIGp1c3QgbG9va2luZ1xuICAvLyBmb3IgdGhlIEdSRUFURVNUX0xPV0VSX0JPVU5EIHRvIGJlZ2luIHdpdGguIFRoZSBvbmx5IGRpZmZlcmVuY2UgdGhhdCBtYXR0ZXJzIGZvciB1cyBpcyB3aGVuIHRoZVxuICAvLyBiaW5hcnkgc2VhcmNoIGRpZG4ndCBtYXRjaCwgaW4gd2hpY2ggY2FzZSBHUkVBVEVTVF9MT1dFUl9CT1VORCBqdXN0IG5lZWRzIHRvIGluY3JlbWVudCB0b1xuICAvLyBtYXRjaCBMRUFTVF9VUFBFUl9CT1VORC5cbiAgaWYgKCFic0ZvdW5kICYmIGJpYXMgPT09IExFQVNUX1VQUEVSX0JPVU5EKSBtaW4rKztcblxuICBpZiAobWluID09PSAtMSB8fCBtaW4gPT09IHNlZ21lbnRzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gIC8vIFdlIG1heSBoYXZlIGZvdW5kIHRoZSBzZWdtZW50IHRoYXQgc3RhcnRlZCBhdCBhbiBlYXJsaWVyIGNvbHVtbi4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlbiB3ZVxuICAvLyBuZWVkIHRvIHNsaWNlIGFsbCBnZW5lcmF0ZWQgc2VnbWVudHMgdGhhdCBtYXRjaCBfdGhhdF8gY29sdW1uLCBiZWNhdXNlIGFsbCBzdWNoIHNlZ21lbnRzIHNwYW5cbiAgLy8gdG8gb3VyIGRlc2lyZWQgY29sdW1uLlxuICBjb25zdCBtYXRjaGVkQ29sdW1uID0gYnNGb3VuZCA/IGNvbHVtbiA6IHNlZ21lbnRzW21pbl1bQ09MVU1OXTtcblxuICAvLyBUaGUgYmluYXJ5IHNlYXJjaCBpcyBub3QgZ3VhcmFudGVlZCB0byBmaW5kIHRoZSBsb3dlciBib3VuZCB3aGVuIGEgbWF0Y2ggd2Fzbid0IGZvdW5kLlxuICBpZiAoIWJzRm91bmQpIG1pbiA9IGxvd2VyQm91bmQoc2VnbWVudHMsIG1hdGNoZWRDb2x1bW4sIG1pbik7XG4gIGNvbnN0IG1heCA9IHVwcGVyQm91bmQoc2VnbWVudHMsIG1hdGNoZWRDb2x1bW4sIG1pbik7XG5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAoOyBtaW4gPD0gbWF4OyBtaW4rKykge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1ttaW5dO1xuICAgIHJlc3VsdC5wdXNoKEdNYXBwaW5nKHNlZ21lbnRbUkVWX0dFTkVSQVRFRF9MSU5FXSArIDEsIHNlZ21lbnRbUkVWX0dFTkVSQVRFRF9DT0xVTU5dKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb24oXG4gIG1hcDogVHJhY2VNYXAsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuICBhbGw6IGZhbHNlLFxuKTogR2VuZXJhdGVkTWFwcGluZyB8IEludmFsaWRHZW5lcmF0ZWRNYXBwaW5nO1xuZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb24oXG4gIG1hcDogVHJhY2VNYXAsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBsaW5lOiBudW1iZXIsXG4gIGNvbHVtbjogbnVtYmVyLFxuICBiaWFzOiBCaWFzLFxuICBhbGw6IHRydWUsXG4pOiBHZW5lcmF0ZWRNYXBwaW5nW107XG5mdW5jdGlvbiBnZW5lcmF0ZWRQb3NpdGlvbihcbiAgbWFwOiBUcmFjZU1hcCxcbiAgc291cmNlOiBzdHJpbmcsXG4gIGxpbmU6IG51bWJlcixcbiAgY29sdW1uOiBudW1iZXIsXG4gIGJpYXM6IEJpYXMsXG4gIGFsbDogYm9vbGVhbixcbik6IEdlbmVyYXRlZE1hcHBpbmcgfCBJbnZhbGlkR2VuZXJhdGVkTWFwcGluZyB8IEdlbmVyYXRlZE1hcHBpbmdbXSB7XG4gIGxpbmUtLTtcbiAgaWYgKGxpbmUgPCAwKSB0aHJvdyBuZXcgRXJyb3IoTElORV9HVFJfWkVSTyk7XG4gIGlmIChjb2x1bW4gPCAwKSB0aHJvdyBuZXcgRXJyb3IoQ09MX0dUUl9FUV9aRVJPKTtcblxuICBjb25zdCB7IHNvdXJjZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuICBsZXQgc291cmNlSW5kZXggPSBzb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcbiAgaWYgKHNvdXJjZUluZGV4ID09PSAtMSkgc291cmNlSW5kZXggPSByZXNvbHZlZFNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuICBpZiAoc291cmNlSW5kZXggPT09IC0xKSByZXR1cm4gYWxsID8gW10gOiBHTWFwcGluZyhudWxsLCBudWxsKTtcblxuICBjb25zdCBnZW5lcmF0ZWQgPSAoY2FzdChtYXApLl9ieVNvdXJjZXMgfHw9IGJ1aWxkQnlTb3VyY2VzKFxuICAgIGRlY29kZWRNYXBwaW5ncyhtYXApLFxuICAgIChjYXN0KG1hcCkuX2J5U291cmNlTWVtb3MgPSBzb3VyY2VzLm1hcChtZW1vaXplZFN0YXRlKSksXG4gICkpO1xuXG4gIGNvbnN0IHNlZ21lbnRzID0gZ2VuZXJhdGVkW3NvdXJjZUluZGV4XVtsaW5lXTtcbiAgaWYgKHNlZ21lbnRzID09IG51bGwpIHJldHVybiBhbGwgPyBbXSA6IEdNYXBwaW5nKG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IG1lbW8gPSBjYXN0KG1hcCkuX2J5U291cmNlTWVtb3MhW3NvdXJjZUluZGV4XTtcblxuICBpZiAoYWxsKSByZXR1cm4gc2xpY2VHZW5lcmF0ZWRQb3NpdGlvbnMoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcyk7XG5cbiAgY29uc3QgaW5kZXggPSB0cmFjZVNlZ21lbnRJbnRlcm5hbChzZWdtZW50cywgbWVtbywgbGluZSwgY29sdW1uLCBiaWFzKTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIEdNYXBwaW5nKG51bGwsIG51bGwpO1xuXG4gIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpbmRleF07XG4gIHJldHVybiBHTWFwcGluZyhzZWdtZW50W1JFVl9HRU5FUkFURURfTElORV0gKyAxLCBzZWdtZW50W1JFVl9HRU5FUkFURURfQ09MVU1OXSk7XG59XG4iLCAidHlwZSBHZW5lcmF0ZWRDb2x1bW4gPSBudW1iZXI7XG50eXBlIFNvdXJjZXNJbmRleCA9IG51bWJlcjtcbnR5cGUgU291cmNlTGluZSA9IG51bWJlcjtcbnR5cGUgU291cmNlQ29sdW1uID0gbnVtYmVyO1xudHlwZSBOYW1lc0luZGV4ID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VNYXBTZWdtZW50ID1cbiAgfCBbR2VuZXJhdGVkQ29sdW1uXVxuICB8IFtHZW5lcmF0ZWRDb2x1bW4sIFNvdXJjZXNJbmRleCwgU291cmNlTGluZSwgU291cmNlQ29sdW1uXVxuICB8IFtHZW5lcmF0ZWRDb2x1bW4sIFNvdXJjZXNJbmRleCwgU291cmNlTGluZSwgU291cmNlQ29sdW1uLCBOYW1lc0luZGV4XTtcblxuZXhwb3J0IGNvbnN0IENPTFVNTiA9IDA7XG5leHBvcnQgY29uc3QgU09VUkNFU19JTkRFWCA9IDE7XG5leHBvcnQgY29uc3QgU09VUkNFX0xJTkUgPSAyO1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9DT0xVTU4gPSAzO1xuZXhwb3J0IGNvbnN0IE5BTUVTX0lOREVYID0gNDtcbiIsICJpbXBvcnQgeyBTZXRBcnJheSwgcHV0LCByZW1vdmUgfSBmcm9tICdAanJpZGdld2VsbC9zZXQtYXJyYXknO1xuaW1wb3J0IHsgZW5jb2RlIH0gZnJvbSAnQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjJztcbmltcG9ydCB7IFRyYWNlTWFwLCBkZWNvZGVkTWFwcGluZ3MgfSBmcm9tICdAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nJztcblxuaW1wb3J0IHtcbiAgQ09MVU1OLFxuICBTT1VSQ0VTX0lOREVYLFxuICBTT1VSQ0VfTElORSxcbiAgU09VUkNFX0NPTFVNTixcbiAgTkFNRVNfSU5ERVgsXG59IGZyb20gJy4vc291cmNlbWFwLXNlZ21lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZU1hcElucHV0IH0gZnJvbSAnQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZU1hcFNlZ21lbnQgfSBmcm9tICcuL3NvdXJjZW1hcC1zZWdtZW50JztcbmltcG9ydCB0eXBlIHsgRGVjb2RlZFNvdXJjZU1hcCwgRW5jb2RlZFNvdXJjZU1hcCwgUG9zLCBNYXBwaW5nIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIHsgRGVjb2RlZFNvdXJjZU1hcCwgRW5jb2RlZFNvdXJjZU1hcCwgTWFwcGluZyB9O1xuXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBmaWxlPzogc3RyaW5nIHwgbnVsbDtcbiAgc291cmNlUm9vdD86IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBOT19OQU1FID0gLTE7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHN0YXRlIHRvIGdlbmVyYXRlIGEgc291cmNlbWFwLlxuICovXG5leHBvcnQgY2xhc3MgR2VuTWFwcGluZyB7XG4gIHByaXZhdGUgZGVjbGFyZSBfbmFtZXM6IFNldEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgZGVjbGFyZSBfc291cmNlczogU2V0QXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBkZWNsYXJlIF9zb3VyY2VzQ29udGVudDogKHN0cmluZyB8IG51bGwpW107XG4gIHByaXZhdGUgZGVjbGFyZSBfbWFwcGluZ3M6IFNvdXJjZU1hcFNlZ21lbnRbXVtdO1xuICBwcml2YXRlIGRlY2xhcmUgX2lnbm9yZUxpc3Q6IFNldEFycmF5PG51bWJlcj47XG4gIGRlY2xhcmUgZmlsZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBzb3VyY2VSb290OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHsgZmlsZSwgc291cmNlUm9vdCB9OiBPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLl9uYW1lcyA9IG5ldyBTZXRBcnJheSgpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBuZXcgU2V0QXJyYXkoKTtcbiAgICB0aGlzLl9zb3VyY2VzQ29udGVudCA9IFtdO1xuICAgIHRoaXMuX21hcHBpbmdzID0gW107XG4gICAgdGhpcy5maWxlID0gZmlsZTtcbiAgICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICAgIHRoaXMuX2lnbm9yZUxpc3QgPSBuZXcgU2V0QXJyYXkoKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUHVibGljTWFwIHtcbiAgX25hbWVzOiBHZW5NYXBwaW5nWydfbmFtZXMnXTtcbiAgX3NvdXJjZXM6IEdlbk1hcHBpbmdbJ19zb3VyY2VzJ107XG4gIF9zb3VyY2VzQ29udGVudDogR2VuTWFwcGluZ1snX3NvdXJjZXNDb250ZW50J107XG4gIF9tYXBwaW5nczogR2VuTWFwcGluZ1snX21hcHBpbmdzJ107XG4gIF9pZ25vcmVMaXN0OiBHZW5NYXBwaW5nWydfaWdub3JlTGlzdCddO1xufVxuXG4vKipcbiAqIFR5cGVzY3JpcHQgZG9lc24ndCBhbGxvdyBmcmllbmQgYWNjZXNzIHRvIHByaXZhdGUgZmllbGRzLCBzbyB0aGlzIGp1c3QgY2FzdHMgdGhlIG1hcCBpbnRvIGEgdHlwZVxuICogd2l0aCBwdWJsaWMgYWNjZXNzIG1vZGlmaWVycy5cbiAqL1xuZnVuY3Rpb24gY2FzdChtYXA6IHVua25vd24pOiBQdWJsaWNNYXAge1xuICByZXR1cm4gbWFwIGFzIGFueTtcbn1cblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBBUEkgdG8gYXNzb2NpYXRlIGEgZ2VuZXJhdGVkIHBvc2l0aW9uIHdpdGggYW4gb3JpZ2luYWwgc291cmNlIHBvc2l0aW9uLiBMaW5lIGFuZFxuICogY29sdW1uIGhlcmUgYXJlIDAtYmFzZWQsIHVubGlrZSBgYWRkTWFwcGluZ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZWdtZW50KFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIGdlbkxpbmU6IG51bWJlcixcbiAgZ2VuQ29sdW1uOiBudW1iZXIsXG4gIHNvdXJjZT86IG51bGwsXG4gIHNvdXJjZUxpbmU/OiBudWxsLFxuICBzb3VyY2VDb2x1bW4/OiBudWxsLFxuICBuYW1lPzogbnVsbCxcbiAgY29udGVudD86IG51bGwsXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlZ21lbnQoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgZ2VuTGluZTogbnVtYmVyLFxuICBnZW5Db2x1bW46IG51bWJlcixcbiAgc291cmNlOiBzdHJpbmcsXG4gIHNvdXJjZUxpbmU6IG51bWJlcixcbiAgc291cmNlQ29sdW1uOiBudW1iZXIsXG4gIG5hbWU/OiBudWxsLFxuICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbCxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudChcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBnZW5MaW5lOiBudW1iZXIsXG4gIGdlbkNvbHVtbjogbnVtYmVyLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgc291cmNlTGluZTogbnVtYmVyLFxuICBzb3VyY2VDb2x1bW46IG51bWJlcixcbiAgbmFtZTogc3RyaW5nLFxuICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbCxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudChcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBnZW5MaW5lOiBudW1iZXIsXG4gIGdlbkNvbHVtbjogbnVtYmVyLFxuICBzb3VyY2U/OiBzdHJpbmcgfCBudWxsLFxuICBzb3VyY2VMaW5lPzogbnVtYmVyIHwgbnVsbCxcbiAgc291cmNlQ29sdW1uPzogbnVtYmVyIHwgbnVsbCxcbiAgbmFtZT86IHN0cmluZyB8IG51bGwsXG4gIGNvbnRlbnQ/OiBzdHJpbmcgfCBudWxsLFxuKTogdm9pZCB7XG4gIHJldHVybiBhZGRTZWdtZW50SW50ZXJuYWwoXG4gICAgZmFsc2UsXG4gICAgbWFwLFxuICAgIGdlbkxpbmUsXG4gICAgZ2VuQ29sdW1uLFxuICAgIHNvdXJjZSxcbiAgICBzb3VyY2VMaW5lLFxuICAgIHNvdXJjZUNvbHVtbixcbiAgICBuYW1lLFxuICAgIGNvbnRlbnQsXG4gICk7XG59XG5cbi8qKlxuICogQSBoaWdoLWxldmVsIEFQSSB0byBhc3NvY2lhdGUgYSBnZW5lcmF0ZWQgcG9zaXRpb24gd2l0aCBhbiBvcmlnaW5hbCBzb3VyY2UgcG9zaXRpb24uIExpbmUgaXNcbiAqIDEtYmFzZWQsIGJ1dCBjb2x1bW4gaXMgMC1iYXNlZCwgZHVlIHRvIGxlZ2FjeSBiZWhhdmlvciBpbiBgc291cmNlLW1hcGAgbGlicmFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE1hcHBpbmcoXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgbWFwcGluZzoge1xuICAgIGdlbmVyYXRlZDogUG9zO1xuICAgIHNvdXJjZT86IG51bGw7XG4gICAgb3JpZ2luYWw/OiBudWxsO1xuICAgIG5hbWU/OiBudWxsO1xuICAgIGNvbnRlbnQ/OiBudWxsO1xuICB9LFxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBhZGRNYXBwaW5nKFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIG1hcHBpbmc6IHtcbiAgICBnZW5lcmF0ZWQ6IFBvcztcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBvcmlnaW5hbDogUG9zO1xuICAgIG5hbWU/OiBudWxsO1xuICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCBudWxsO1xuICB9LFxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBhZGRNYXBwaW5nKFxuICBtYXA6IEdlbk1hcHBpbmcsXG4gIG1hcHBpbmc6IHtcbiAgICBnZW5lcmF0ZWQ6IFBvcztcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBvcmlnaW5hbDogUG9zO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb250ZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgfSxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWRkTWFwcGluZyhcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBtYXBwaW5nOiB7XG4gICAgZ2VuZXJhdGVkOiBQb3M7XG4gICAgc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbiAgICBvcmlnaW5hbD86IFBvcyB8IG51bGw7XG4gICAgbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgY29udGVudD86IHN0cmluZyB8IG51bGw7XG4gIH0sXG4pOiB2b2lkIHtcbiAgcmV0dXJuIGFkZE1hcHBpbmdJbnRlcm5hbChmYWxzZSwgbWFwLCBtYXBwaW5nIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGFkZE1hcHBpbmdJbnRlcm5hbD5bMl0pO1xufVxuXG4vKipcbiAqIFNhbWUgYXMgYGFkZFNlZ21lbnRgLCBidXQgd2lsbCBvbmx5IGFkZCB0aGUgc2VnbWVudCBpZiBpdCBnZW5lcmF0ZXMgdXNlZnVsIGluZm9ybWF0aW9uIGluIHRoZVxuICogcmVzdWx0aW5nIG1hcC4gVGhpcyBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiBzZWdtZW50cyBhcmUgYWRkZWQgKippbiBvcmRlcioqLCBtZWFuaW5nIHlvdSBzaG91bGRcbiAqIG5vdCBhZGQgYSBzZWdtZW50IHdpdGggYSBsb3dlciBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gdGhhbiBvbmUgdGhhdCBjYW1lIGJlZm9yZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQWRkU2VnbWVudDogdHlwZW9mIGFkZFNlZ21lbnQgPSAoXG4gIG1hcCxcbiAgZ2VuTGluZSxcbiAgZ2VuQ29sdW1uLFxuICBzb3VyY2UsXG4gIHNvdXJjZUxpbmUsXG4gIHNvdXJjZUNvbHVtbixcbiAgbmFtZSxcbiAgY29udGVudCxcbikgPT4ge1xuICByZXR1cm4gYWRkU2VnbWVudEludGVybmFsKFxuICAgIHRydWUsXG4gICAgbWFwLFxuICAgIGdlbkxpbmUsXG4gICAgZ2VuQ29sdW1uLFxuICAgIHNvdXJjZSxcbiAgICBzb3VyY2VMaW5lLFxuICAgIHNvdXJjZUNvbHVtbixcbiAgICBuYW1lLFxuICAgIGNvbnRlbnQsXG4gICk7XG59O1xuXG4vKipcbiAqIFNhbWUgYXMgYGFkZE1hcHBpbmdgLCBidXQgd2lsbCBvbmx5IGFkZCB0aGUgbWFwcGluZyBpZiBpdCBnZW5lcmF0ZXMgdXNlZnVsIGluZm9ybWF0aW9uIGluIHRoZVxuICogcmVzdWx0aW5nIG1hcC4gVGhpcyBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiBtYXBwaW5ncyBhcmUgYWRkZWQgKippbiBvcmRlcioqLCBtZWFuaW5nIHlvdSBzaG91bGRcbiAqIG5vdCBhZGQgYSBtYXBwaW5nIHdpdGggYSBsb3dlciBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gdGhhbiBvbmUgdGhhdCBjYW1lIGJlZm9yZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heWJlQWRkTWFwcGluZzogdHlwZW9mIGFkZE1hcHBpbmcgPSAobWFwLCBtYXBwaW5nKSA9PiB7XG4gIHJldHVybiBhZGRNYXBwaW5nSW50ZXJuYWwodHJ1ZSwgbWFwLCBtYXBwaW5nIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGFkZE1hcHBpbmdJbnRlcm5hbD5bMl0pO1xufTtcblxuLyoqXG4gKiBBZGRzL3JlbW92ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSBzb3VyY2UgbWFwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U291cmNlQ29udGVudChtYXA6IEdlbk1hcHBpbmcsIHNvdXJjZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gIGNvbnN0IHsgX3NvdXJjZXM6IHNvdXJjZXMsIF9zb3VyY2VzQ29udGVudDogc291cmNlc0NvbnRlbnQgfSA9IGNhc3QobWFwKTtcbiAgY29uc3QgaW5kZXggPSBwdXQoc291cmNlcywgc291cmNlKTtcbiAgc291cmNlc0NvbnRlbnRbaW5kZXhdID0gY29udGVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldElnbm9yZShtYXA6IEdlbk1hcHBpbmcsIHNvdXJjZTogc3RyaW5nLCBpZ25vcmUgPSB0cnVlKSB7XG4gIGNvbnN0IHsgX3NvdXJjZXM6IHNvdXJjZXMsIF9zb3VyY2VzQ29udGVudDogc291cmNlc0NvbnRlbnQsIF9pZ25vcmVMaXN0OiBpZ25vcmVMaXN0IH0gPSBjYXN0KG1hcCk7XG4gIGNvbnN0IGluZGV4ID0gcHV0KHNvdXJjZXMsIHNvdXJjZSk7XG4gIGlmIChpbmRleCA9PT0gc291cmNlc0NvbnRlbnQubGVuZ3RoKSBzb3VyY2VzQ29udGVudFtpbmRleF0gPSBudWxsO1xuICBpZiAoaWdub3JlKSBwdXQoaWdub3JlTGlzdCwgaW5kZXgpO1xuICBlbHNlIHJlbW92ZShpZ25vcmVMaXN0LCBpbmRleCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZW1hcCBvYmplY3QgKHdpdGggZGVjb2RlZCBtYXBwaW5ncykgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYSBsaWJyYXJ5IHRoYXQgZXhwZWN0c1xuICogYSBzb3VyY2VtYXAsIG9yIHRvIEpTT04uc3RyaW5naWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EZWNvZGVkTWFwKG1hcDogR2VuTWFwcGluZyk6IERlY29kZWRTb3VyY2VNYXAge1xuICBjb25zdCB7XG4gICAgX21hcHBpbmdzOiBtYXBwaW5ncyxcbiAgICBfc291cmNlczogc291cmNlcyxcbiAgICBfc291cmNlc0NvbnRlbnQ6IHNvdXJjZXNDb250ZW50LFxuICAgIF9uYW1lczogbmFtZXMsXG4gICAgX2lnbm9yZUxpc3Q6IGlnbm9yZUxpc3QsXG4gIH0gPSBjYXN0KG1hcCk7XG4gIHJlbW92ZUVtcHR5RmluYWxMaW5lcyhtYXBwaW5ncyk7XG5cbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiAzLFxuICAgIGZpbGU6IG1hcC5maWxlIHx8IHVuZGVmaW5lZCxcbiAgICBuYW1lczogbmFtZXMuYXJyYXksXG4gICAgc291cmNlUm9vdDogbWFwLnNvdXJjZVJvb3QgfHwgdW5kZWZpbmVkLFxuICAgIHNvdXJjZXM6IHNvdXJjZXMuYXJyYXksXG4gICAgc291cmNlc0NvbnRlbnQsXG4gICAgbWFwcGluZ3MsXG4gICAgaWdub3JlTGlzdDogaWdub3JlTGlzdC5hcnJheSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc291cmNlbWFwIG9iamVjdCAod2l0aCBlbmNvZGVkIG1hcHBpbmdzKSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBhIGxpYnJhcnkgdGhhdCBleHBlY3RzXG4gKiBhIHNvdXJjZW1hcCwgb3IgdG8gSlNPTi5zdHJpbmdpZnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0VuY29kZWRNYXAobWFwOiBHZW5NYXBwaW5nKTogRW5jb2RlZFNvdXJjZU1hcCB7XG4gIGNvbnN0IGRlY29kZWQgPSB0b0RlY29kZWRNYXAobWFwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5kZWNvZGVkLFxuICAgIG1hcHBpbmdzOiBlbmNvZGUoZGVjb2RlZC5tYXBwaW5ncyBhcyBTb3VyY2VNYXBTZWdtZW50W11bXSksXG4gIH07XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBHZW5NYXBwaW5nLCB1c2luZyB0aGUgYWxyZWFkeSBwcmVzZW50IG1hcHBpbmdzIG9mIHRoZSBpbnB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXAoaW5wdXQ6IFNvdXJjZU1hcElucHV0KTogR2VuTWFwcGluZyB7XG4gIGNvbnN0IG1hcCA9IG5ldyBUcmFjZU1hcChpbnB1dCk7XG4gIGNvbnN0IGdlbiA9IG5ldyBHZW5NYXBwaW5nKHsgZmlsZTogbWFwLmZpbGUsIHNvdXJjZVJvb3Q6IG1hcC5zb3VyY2VSb290IH0pO1xuXG4gIHB1dEFsbChjYXN0KGdlbikuX25hbWVzLCBtYXAubmFtZXMpO1xuICBwdXRBbGwoY2FzdChnZW4pLl9zb3VyY2VzLCBtYXAuc291cmNlcyBhcyBzdHJpbmdbXSk7XG4gIGNhc3QoZ2VuKS5fc291cmNlc0NvbnRlbnQgPSBtYXAuc291cmNlc0NvbnRlbnQgfHwgbWFwLnNvdXJjZXMubWFwKCgpID0+IG51bGwpO1xuICBjYXN0KGdlbikuX21hcHBpbmdzID0gZGVjb2RlZE1hcHBpbmdzKG1hcCkgYXMgR2VuTWFwcGluZ1snX21hcHBpbmdzJ107XG4gIGlmIChtYXAuaWdub3JlTGlzdCkgcHV0QWxsKGNhc3QoZ2VuKS5faWdub3JlTGlzdCwgbWFwLmlnbm9yZUxpc3QpO1xuXG4gIHJldHVybiBnZW47XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBoaWdoLWxldmVsIG1hcHBpbmcgb2JqZWN0cyBmb3IgZXZlcnkgcmVjb3JkZWQgc2VnbWVudCwgd2hpY2ggY291bGQgdGhlbiBiZVxuICogcGFzc2VkIHRvIHRoZSBgc291cmNlLW1hcGAgbGlicmFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbE1hcHBpbmdzKG1hcDogR2VuTWFwcGluZyk6IE1hcHBpbmdbXSB7XG4gIGNvbnN0IG91dDogTWFwcGluZ1tdID0gW107XG4gIGNvbnN0IHsgX21hcHBpbmdzOiBtYXBwaW5ncywgX3NvdXJjZXM6IHNvdXJjZXMsIF9uYW1lczogbmFtZXMgfSA9IGNhc3QobWFwKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbGluZSA9IG1hcHBpbmdzW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgc2VnID0gbGluZVtqXTtcblxuICAgICAgY29uc3QgZ2VuZXJhdGVkID0geyBsaW5lOiBpICsgMSwgY29sdW1uOiBzZWdbQ09MVU1OXSB9O1xuICAgICAgbGV0IHNvdXJjZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IG9yaWdpbmFsOiBQb3MgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoc2VnLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBzb3VyY2UgPSBzb3VyY2VzLmFycmF5W3NlZ1tTT1VSQ0VTX0lOREVYXV07XG4gICAgICAgIG9yaWdpbmFsID0geyBsaW5lOiBzZWdbU09VUkNFX0xJTkVdICsgMSwgY29sdW1uOiBzZWdbU09VUkNFX0NPTFVNTl0gfTtcblxuICAgICAgICBpZiAoc2VnLmxlbmd0aCA9PT0gNSkgbmFtZSA9IG5hbWVzLmFycmF5W3NlZ1tOQU1FU19JTkRFWF1dO1xuICAgICAgfVxuXG4gICAgICBvdXQucHVzaCh7IGdlbmVyYXRlZCwgc291cmNlLCBvcmlnaW5hbCwgbmFtZSB9IGFzIE1hcHBpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbi8vIFRoaXMgc3BsaXQgZGVjbGFyYXRpb24gaXMgb25seSBzbyB0aGF0IHRlcnNlciBjYW4gZWxtaW5pYXRlIHRoZSBzdGF0aWMgaW5pdGlhbGl6YXRpb24gYmxvY2suXG5mdW5jdGlvbiBhZGRTZWdtZW50SW50ZXJuYWw8UyBleHRlbmRzIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KFxuICBza2lwYWJsZTogYm9vbGVhbixcbiAgbWFwOiBHZW5NYXBwaW5nLFxuICBnZW5MaW5lOiBudW1iZXIsXG4gIGdlbkNvbHVtbjogbnVtYmVyLFxuICBzb3VyY2U6IFMsXG4gIHNvdXJjZUxpbmU6IFMgZXh0ZW5kcyBzdHJpbmcgPyBudW1iZXIgOiBudWxsIHwgdW5kZWZpbmVkLFxuICBzb3VyY2VDb2x1bW46IFMgZXh0ZW5kcyBzdHJpbmcgPyBudW1iZXIgOiBudWxsIHwgdW5kZWZpbmVkLFxuICBuYW1lOiBTIGV4dGVuZHMgc3RyaW5nID8gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA6IG51bGwgfCB1bmRlZmluZWQsXG4gIGNvbnRlbnQ6IFMgZXh0ZW5kcyBzdHJpbmcgPyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIDogbnVsbCB8IHVuZGVmaW5lZCxcbik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgX21hcHBpbmdzOiBtYXBwaW5ncyxcbiAgICBfc291cmNlczogc291cmNlcyxcbiAgICBfc291cmNlc0NvbnRlbnQ6IHNvdXJjZXNDb250ZW50LFxuICAgIF9uYW1lczogbmFtZXMsXG4gIH0gPSBjYXN0KG1hcCk7XG4gIGNvbnN0IGxpbmUgPSBnZXRMaW5lKG1hcHBpbmdzLCBnZW5MaW5lKTtcbiAgY29uc3QgaW5kZXggPSBnZXRDb2x1bW5JbmRleChsaW5lLCBnZW5Db2x1bW4pO1xuXG4gIGlmICghc291cmNlKSB7XG4gICAgaWYgKHNraXBhYmxlICYmIHNraXBTb3VyY2VsZXNzKGxpbmUsIGluZGV4KSkgcmV0dXJuO1xuICAgIHJldHVybiBpbnNlcnQobGluZSwgaW5kZXgsIFtnZW5Db2x1bW5dKTtcbiAgfVxuXG4gIC8vIFNpZ2gsIFR5cGVTY3JpcHQgY2FuJ3QgZmlndXJlIG91dCBzb3VyY2VMaW5lIGFuZCBzb3VyY2VDb2x1bW4gYXJlbid0IG51bGxpc2ggaWYgc291cmNlXG4gIC8vIGlzbid0IG51bGxpc2guXG4gIGFzc2VydDxudW1iZXI+KHNvdXJjZUxpbmUpO1xuICBhc3NlcnQ8bnVtYmVyPihzb3VyY2VDb2x1bW4pO1xuXG4gIGNvbnN0IHNvdXJjZXNJbmRleCA9IHB1dChzb3VyY2VzLCBzb3VyY2UpO1xuICBjb25zdCBuYW1lc0luZGV4ID0gbmFtZSA/IHB1dChuYW1lcywgbmFtZSkgOiBOT19OQU1FO1xuICBpZiAoc291cmNlc0luZGV4ID09PSBzb3VyY2VzQ29udGVudC5sZW5ndGgpIHNvdXJjZXNDb250ZW50W3NvdXJjZXNJbmRleF0gPSBjb250ZW50ID8/IG51bGw7XG5cbiAgaWYgKHNraXBhYmxlICYmIHNraXBTb3VyY2UobGluZSwgaW5kZXgsIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBpbnNlcnQoXG4gICAgbGluZSxcbiAgICBpbmRleCxcbiAgICBuYW1lXG4gICAgICA/IFtnZW5Db2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4XVxuICAgICAgOiBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbl0sXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydDxUPihfdmFsOiB1bmtub3duKTogYXNzZXJ0cyBfdmFsIGlzIFQge1xuICAvLyBub29wLlxufVxuXG5mdW5jdGlvbiBnZXRMaW5lKG1hcHBpbmdzOiBTb3VyY2VNYXBTZWdtZW50W11bXSwgaW5kZXg6IG51bWJlcik6IFNvdXJjZU1hcFNlZ21lbnRbXSB7XG4gIGZvciAobGV0IGkgPSBtYXBwaW5ncy5sZW5ndGg7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgIG1hcHBpbmdzW2ldID0gW107XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmdzW2luZGV4XTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sdW1uSW5kZXgobGluZTogU291cmNlTWFwU2VnbWVudFtdLCBnZW5Db2x1bW46IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBpbmRleCA9IGxpbmUubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGluZGV4ID0gaS0tKSB7XG4gICAgY29uc3QgY3VycmVudCA9IGxpbmVbaV07XG4gICAgaWYgKGdlbkNvbHVtbiA+PSBjdXJyZW50W0NPTFVNTl0pIGJyZWFrO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0PFQ+KGFycmF5OiBUW10sIGluZGV4OiBudW1iZXIsIHZhbHVlOiBUKSB7XG4gIGZvciAobGV0IGkgPSBhcnJheS5sZW5ndGg7IGkgPiBpbmRleDsgaS0tKSB7XG4gICAgYXJyYXlbaV0gPSBhcnJheVtpIC0gMV07XG4gIH1cbiAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVtcHR5RmluYWxMaW5lcyhtYXBwaW5nczogU291cmNlTWFwU2VnbWVudFtdW10pIHtcbiAgY29uc3QgeyBsZW5ndGggfSA9IG1hcHBpbmdzO1xuICBsZXQgbGVuID0gbGVuZ3RoO1xuICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBsZW4gPSBpLCBpLS0pIHtcbiAgICBpZiAobWFwcGluZ3NbaV0ubGVuZ3RoID4gMCkgYnJlYWs7XG4gIH1cbiAgaWYgKGxlbiA8IGxlbmd0aCkgbWFwcGluZ3MubGVuZ3RoID0gbGVuO1xufVxuXG5mdW5jdGlvbiBwdXRBbGw8VCBleHRlbmRzIHN0cmluZyB8IG51bWJlcj4oc2V0YXJyOiBTZXRBcnJheTxUPiwgYXJyYXk6IFRbXSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSBwdXQoc2V0YXJyLCBhcnJheVtpXSk7XG59XG5cbmZ1bmN0aW9uIHNraXBTb3VyY2VsZXNzKGxpbmU6IFNvdXJjZU1hcFNlZ21lbnRbXSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAvLyBUaGUgc3RhcnQgb2YgYSBsaW5lIGlzIGFscmVhZHkgc291cmNlbGVzcywgc28gYWRkaW5nIGEgc291cmNlbGVzcyBzZWdtZW50IHRvIHRoZSBiZWdpbm5pbmdcbiAgLy8gZG9lc24ndCBnZW5lcmF0ZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uLlxuICBpZiAoaW5kZXggPT09IDApIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IHByZXYgPSBsaW5lW2luZGV4IC0gMV07XG4gIC8vIElmIHRoZSBwcmV2aW91cyBzZWdtZW50IGlzIGFsc28gc291cmNlbGVzcywgdGhlbiBhZGRpbmcgYW5vdGhlciBzb3VyY2VsZXNzIHNlZ21lbnQgZG9lc24ndFxuICAvLyBnZW5yYXRlIGFueSBuZXcgaW5mb3JtYXRpb24uIEVsc2UsIHRoaXMgc2VnbWVudCB3aWxsIGVuZCB0aGUgc291cmNlL25hbWVkIHNlZ21lbnQgYW5kIHBvaW50IHRvXG4gIC8vIGEgc291cmNlbGVzcyBwb3NpdGlvbiwgd2hpY2ggaXMgdXNlZnVsLlxuICByZXR1cm4gcHJldi5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIHNraXBTb3VyY2UoXG4gIGxpbmU6IFNvdXJjZU1hcFNlZ21lbnRbXSxcbiAgaW5kZXg6IG51bWJlcixcbiAgc291cmNlc0luZGV4OiBudW1iZXIsXG4gIHNvdXJjZUxpbmU6IG51bWJlcixcbiAgc291cmNlQ29sdW1uOiBudW1iZXIsXG4gIG5hbWVzSW5kZXg6IG51bWJlcixcbik6IGJvb2xlYW4ge1xuICAvLyBBIHNvdXJjZS9uYW1lZCBzZWdtZW50IGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgZ2l2ZXMgcG9zaXRpb24gYXQgdGhhdCBnZW5Db2x1bW5cbiAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgcHJldiA9IGxpbmVbaW5kZXggLSAxXTtcblxuICAvLyBJZiB0aGUgcHJldmlvdXMgc2VnbWVudCBpcyBzb3VyY2VsZXNzLCB0aGVuIHdlJ3JlIHRyYW5zaXRpb25pbmcgdG8gYSBzb3VyY2UuXG4gIGlmIChwcmV2Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZSBwcmV2aW91cyBzZWdtZW50IG1hcHMgdG8gdGhlIGV4YWN0IHNhbWUgc291cmNlIHBvc2l0aW9uLCB0aGVuIHRoaXMgc2VnbWVudCBkb2Vzbid0XG4gIC8vIHByb3ZpZGUgYW55IG5ldyBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgcmV0dXJuIChcbiAgICBzb3VyY2VzSW5kZXggPT09IHByZXZbU09VUkNFU19JTkRFWF0gJiZcbiAgICBzb3VyY2VMaW5lID09PSBwcmV2W1NPVVJDRV9MSU5FXSAmJlxuICAgIHNvdXJjZUNvbHVtbiA9PT0gcHJldltTT1VSQ0VfQ09MVU1OXSAmJlxuICAgIG5hbWVzSW5kZXggPT09IChwcmV2Lmxlbmd0aCA9PT0gNSA/IHByZXZbTkFNRVNfSU5ERVhdIDogTk9fTkFNRSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRkTWFwcGluZ0ludGVybmFsPFMgZXh0ZW5kcyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPihcbiAgc2tpcGFibGU6IGJvb2xlYW4sXG4gIG1hcDogR2VuTWFwcGluZyxcbiAgbWFwcGluZzoge1xuICAgIGdlbmVyYXRlZDogUG9zO1xuICAgIHNvdXJjZTogUztcbiAgICBvcmlnaW5hbDogUyBleHRlbmRzIHN0cmluZyA/IFBvcyA6IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgbmFtZTogUyBleHRlbmRzIHN0cmluZyA/IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgOiBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGNvbnRlbnQ6IFMgZXh0ZW5kcyBzdHJpbmcgPyBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIDogbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSxcbikge1xuICBjb25zdCB7IGdlbmVyYXRlZCwgc291cmNlLCBvcmlnaW5hbCwgbmFtZSwgY29udGVudCB9ID0gbWFwcGluZztcbiAgaWYgKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gYWRkU2VnbWVudEludGVybmFsKFxuICAgICAgc2tpcGFibGUsXG4gICAgICBtYXAsXG4gICAgICBnZW5lcmF0ZWQubGluZSAtIDEsXG4gICAgICBnZW5lcmF0ZWQuY29sdW1uLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgKTtcbiAgfVxuICBhc3NlcnQ8UG9zPihvcmlnaW5hbCk7XG4gIHJldHVybiBhZGRTZWdtZW50SW50ZXJuYWwoXG4gICAgc2tpcGFibGUsXG4gICAgbWFwLFxuICAgIGdlbmVyYXRlZC5saW5lIC0gMSxcbiAgICBnZW5lcmF0ZWQuY29sdW1uLFxuICAgIHNvdXJjZSBhcyBzdHJpbmcsXG4gICAgb3JpZ2luYWwubGluZSAtIDEsXG4gICAgb3JpZ2luYWwuY29sdW1uLFxuICAgIG5hbWUsXG4gICAgY29udGVudCxcbiAgKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfZ2VubWFwcGluZyA9IHJlcXVpcmUoJ0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nJyk7XG5cblxuXG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4vcGFyc2VyL3V0aWwvY2hhcmNvZGVzJyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc291cmNlIG1hcCBpbmRpY2F0aW5nIHRoYXQgZWFjaCBsaW5lIG1hcHMgZGlyZWN0bHkgdG8gdGhlIG9yaWdpbmFsIGxpbmUsXG4gKiB3aXRoIHRoZSB0b2tlbnMgaW4gdGhlaXIgbmV3IHBvc2l0aW9ucy5cbiAqL1xuIGZ1bmN0aW9uIGNvbXB1dGVTb3VyY2VNYXAoXG4gIHtjb2RlOiBnZW5lcmF0ZWRDb2RlLCBtYXBwaW5nczogcmF3TWFwcGluZ3N9LFxuICBmaWxlUGF0aCxcbiAgb3B0aW9ucyxcbiAgc291cmNlLFxuICB0b2tlbnMsXG4pIHtcbiAgY29uc3Qgc291cmNlQ29sdW1ucyA9IGNvbXB1dGVTb3VyY2VDb2x1bW5zKHNvdXJjZSwgdG9rZW5zKTtcbiAgY29uc3QgbWFwID0gbmV3ICgwLCBfZ2VubWFwcGluZy5HZW5NYXBwaW5nKSh7ZmlsZTogb3B0aW9ucy5jb21waWxlZEZpbGVuYW1lfSk7XG4gIGxldCB0b2tlbkluZGV4ID0gMDtcbiAgLy8gY3VycmVudE1hcHBpbmcgaXMgdGhlIG91dHB1dCBzb3VyY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50IGlucHV0IHRva2VuIGJlaW5nXG4gIC8vIGNvbnNpZGVyZWQuXG4gIGxldCBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzWzBdO1xuICB3aGlsZSAoY3VycmVudE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiB0b2tlbkluZGV4IDwgcmF3TWFwcGluZ3MubGVuZ3RoIC0gMSkge1xuICAgIHRva2VuSW5kZXgrKztcbiAgICBjdXJyZW50TWFwcGluZyA9IHJhd01hcHBpbmdzW3Rva2VuSW5kZXhdO1xuICB9XG4gIGxldCBsaW5lID0gMDtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIGlmIChjdXJyZW50TWFwcGluZyAhPT0gbGluZVN0YXJ0KSB7XG4gICAgX2dlbm1hcHBpbmcubWF5YmVBZGRTZWdtZW50LmNhbGwodm9pZCAwLCBtYXAsIGxpbmUsIDAsIGZpbGVQYXRoLCBsaW5lLCAwKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGdlbmVyYXRlZENvZGUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA9PT0gY3VycmVudE1hcHBpbmcpIHtcbiAgICAgIGNvbnN0IGdlbkNvbHVtbiA9IGN1cnJlbnRNYXBwaW5nIC0gbGluZVN0YXJ0O1xuICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gc291cmNlQ29sdW1uc1t0b2tlbkluZGV4XTtcbiAgICAgIF9nZW5tYXBwaW5nLm1heWJlQWRkU2VnbWVudC5jYWxsKHZvaWQgMCwgbWFwLCBsaW5lLCBnZW5Db2x1bW4sIGZpbGVQYXRoLCBsaW5lLCBzb3VyY2VDb2x1bW4pO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAoY3VycmVudE1hcHBpbmcgPT09IGkgfHwgY3VycmVudE1hcHBpbmcgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgdG9rZW5JbmRleCA8IHJhd01hcHBpbmdzLmxlbmd0aCAtIDFcbiAgICAgICkge1xuICAgICAgICB0b2tlbkluZGV4Kys7XG4gICAgICAgIGN1cnJlbnRNYXBwaW5nID0gcmF3TWFwcGluZ3NbdG9rZW5JbmRleF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChnZW5lcmF0ZWRDb2RlLmNoYXJDb2RlQXQoaSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICBsaW5lKys7XG4gICAgICBsaW5lU3RhcnQgPSBpICsgMTtcbiAgICAgIGlmIChjdXJyZW50TWFwcGluZyAhPT0gbGluZVN0YXJ0KSB7XG4gICAgICAgIF9nZW5tYXBwaW5nLm1heWJlQWRkU2VnbWVudC5jYWxsKHZvaWQgMCwgbWFwLCBsaW5lLCAwLCBmaWxlUGF0aCwgbGluZSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHtzb3VyY2VSb290LCBzb3VyY2VzQ29udGVudCwgLi4uc291cmNlTWFwfSA9IF9nZW5tYXBwaW5nLnRvRW5jb2RlZE1hcC5jYWxsKHZvaWQgMCwgbWFwKTtcbiAgcmV0dXJuIHNvdXJjZU1hcCA7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGNvbXB1dGVTb3VyY2VNYXA7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFycmF5IG1hcHBpbmcgZWFjaCB0b2tlbiBpbmRleCB0byB0aGUgMC1iYXNlZCBjb2x1bW4gb2YgdGhlIHN0YXJ0XG4gKiBwb3NpdGlvbiBvZiB0aGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTb3VyY2VDb2x1bW5zKGNvZGUsIHRva2Vucykge1xuICBjb25zdCBzb3VyY2VDb2x1bW5zID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpO1xuICBsZXQgdG9rZW5JbmRleCA9IDA7XG4gIGxldCBjdXJyZW50TWFwcGluZyA9IHRva2Vuc1t0b2tlbkluZGV4XS5zdGFydDtcbiAgbGV0IGxpbmVTdGFydCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSBjdXJyZW50TWFwcGluZykge1xuICAgICAgc291cmNlQ29sdW1uc1t0b2tlbkluZGV4XSA9IGN1cnJlbnRNYXBwaW5nIC0gbGluZVN0YXJ0O1xuICAgICAgdG9rZW5JbmRleCsrO1xuICAgICAgY3VycmVudE1hcHBpbmcgPSB0b2tlbnNbdG9rZW5JbmRleF0uc3RhcnQ7XG4gICAgfVxuICAgIGlmIChjb2RlLmNoYXJDb2RlQXQoaSkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICBsaW5lU3RhcnQgPSBpICsgMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNvdXJjZUNvbHVtbnM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTtcblxuY29uc3QgSEVMUEVSUyA9IHtcbiAgcmVxdWlyZTogYFxuICAgIGltcG9ydCB7Y3JlYXRlUmVxdWlyZSBhcyBDUkVBVEVfUkVRVUlSRV9OQU1FfSBmcm9tIFwibW9kdWxlXCI7XG4gICAgY29uc3QgcmVxdWlyZSA9IENSRUFURV9SRVFVSVJFX05BTUUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgYCxcbiAgaW50ZXJvcFJlcXVpcmVXaWxkY2FyZDogYFxuICAgIGZ1bmN0aW9uIGludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7XG4gICAgICBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbmV3T2JqID0ge307XG4gICAgICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ld09iai5kZWZhdWx0ID0gb2JqO1xuICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgaW50ZXJvcFJlcXVpcmVEZWZhdWx0OiBgXG4gICAgZnVuY3Rpb24gaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG4gICAgfVxuICBgLFxuICBjcmVhdGVOYW1lZEV4cG9ydEZyb206IGBcbiAgICBmdW5jdGlvbiBjcmVhdGVOYW1lZEV4cG9ydEZyb20ob2JqLCBsb2NhbE5hbWUsIGltcG9ydGVkTmFtZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGxvY2FsTmFtZSwge2VudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZ2V0OiAoKSA9PiBvYmpbaW1wb3J0ZWROYW1lXX0pO1xuICAgIH1cbiAgYCxcbiAgLy8gTm90ZSB0aGF0IFR5cGVTY3JpcHQgYW5kIEJhYmVsIGRvIHRoaXMgZGlmZmVyZW50bHk7IFR5cGVTY3JpcHQgZG9lcyBhIHNpbXBsZSBleGlzdGVuY2VcbiAgLy8gY2hlY2sgaW4gdGhlIGV4cG9ydHMgb2JqZWN0IGFuZCBkb2VzIGEgcGxhaW4gYXNzaWdubWVudCwgd2hlcmVhcyBCYWJlbCB1c2VzXG4gIC8vIGRlZmluZVByb3BlcnR5IGFuZCBidWlsZHMgYW4gb2JqZWN0IG9mIGV4cGxpY2l0bHktZXhwb3J0ZWQgbmFtZXMgc28gdGhhdCBzdGFyIGV4cG9ydHMgY2FuXG4gIC8vIGFsd2F5cyB0YWtlIGxvd2VyIHByZWNlZGVuY2UuIEZvciBub3csIHdlIGRvIHRoZSBlYXNpZXIgVHlwZVNjcmlwdCB0aGluZy5cbiAgY3JlYXRlU3RhckV4cG9ydDogYFxuICAgIGZ1bmN0aW9uIGNyZWF0ZVN0YXJFeHBvcnQob2JqKSB7XG4gICAgICBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBcImRlZmF1bHRcIiAmJiBrZXkgIT09IFwiX19lc01vZHVsZVwiKVxuICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGV4cG9ydHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7ZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBnZXQ6ICgpID0+IG9ialtrZXldfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgYCxcbiAgbnVsbGlzaENvYWxlc2NlOiBgXG4gICAgZnVuY3Rpb24gbnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHtcbiAgICAgIGlmIChsaHMgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJoc0ZuKCk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICBhc3luY051bGxpc2hDb2FsZXNjZTogYFxuICAgIGFzeW5jIGZ1bmN0aW9uIGFzeW5jTnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHtcbiAgICAgIGlmIChsaHMgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJoc0ZuKCk7XG4gICAgICB9XG4gICAgfVxuICBgLFxuICBvcHRpb25hbENoYWluOiBgXG4gICAgZnVuY3Rpb24gb3B0aW9uYWxDaGFpbihvcHMpIHtcbiAgICAgIGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IHZhbHVlID0gb3BzWzBdO1xuICAgICAgbGV0IGkgPSAxO1xuICAgICAgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzW2ldO1xuICAgICAgICBjb25zdCBmbiA9IG9wc1tpICsgMV07XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHtcbiAgICAgICAgICBsYXN0QWNjZXNzTEhTID0gdmFsdWU7XG4gICAgICAgICAgdmFsdWUgPSBmbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHtcbiAgICAgICAgICB2YWx1ZSA9IGZuKCguLi5hcmdzKSA9PiB2YWx1ZS5jYWxsKGxhc3RBY2Nlc3NMSFMsIC4uLmFyZ3MpKTtcbiAgICAgICAgICBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICBgLFxuICBhc3luY09wdGlvbmFsQ2hhaW46IGBcbiAgICBhc3luYyBmdW5jdGlvbiBhc3luY09wdGlvbmFsQ2hhaW4ob3BzKSB7XG4gICAgICBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCB2YWx1ZSA9IG9wc1swXTtcbiAgICAgIGxldCBpID0gMTtcbiAgICAgIHdoaWxlIChpIDwgb3BzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBvcCA9IG9wc1tpXTtcbiAgICAgICAgY29uc3QgZm4gPSBvcHNbaSArIDFdO1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7XG4gICAgICAgICAgbGFzdEFjY2Vzc0xIUyA9IHZhbHVlO1xuICAgICAgICAgIHZhbHVlID0gYXdhaXQgZm4odmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7XG4gICAgICAgICAgdmFsdWUgPSBhd2FpdCBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7XG4gICAgICAgICAgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgYCxcbiAgb3B0aW9uYWxDaGFpbkRlbGV0ZTogYFxuICAgIGZ1bmN0aW9uIG9wdGlvbmFsQ2hhaW5EZWxldGUob3BzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBPUFRJT05BTF9DSEFJTl9OQU1FKG9wcyk7XG4gICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyB0cnVlIDogcmVzdWx0O1xuICAgIH1cbiAgYCxcbiAgYXN5bmNPcHRpb25hbENoYWluRGVsZXRlOiBgXG4gICAgYXN5bmMgZnVuY3Rpb24gYXN5bmNPcHRpb25hbENoYWluRGVsZXRlKG9wcykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgQVNZTkNfT1BUSU9OQUxfQ0hBSU5fTkFNRShvcHMpO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gdHJ1ZSA6IHJlc3VsdDtcbiAgICB9XG4gIGAsXG59O1xuXG4gY2xhc3MgSGVscGVyTWFuYWdlciB7XG4gIF9faW5pdCgpIHt0aGlzLmhlbHBlck5hbWVzID0ge319XG4gIF9faW5pdDIoKSB7dGhpcy5jcmVhdGVSZXF1aXJlTmFtZSA9IG51bGx9XG4gIGNvbnN0cnVjdG9yKCBuYW1lTWFuYWdlcikgezt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7SGVscGVyTWFuYWdlci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7SGVscGVyTWFuYWdlci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO31cblxuICBnZXRIZWxwZXJOYW1lKGJhc2VOYW1lKSB7XG4gICAgbGV0IGhlbHBlck5hbWUgPSB0aGlzLmhlbHBlck5hbWVzW2Jhc2VOYW1lXTtcbiAgICBpZiAoaGVscGVyTmFtZSkge1xuICAgICAgcmV0dXJuIGhlbHBlck5hbWU7XG4gICAgfVxuICAgIGhlbHBlck5hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoYF8ke2Jhc2VOYW1lfWApO1xuICAgIHRoaXMuaGVscGVyTmFtZXNbYmFzZU5hbWVdID0gaGVscGVyTmFtZTtcbiAgICByZXR1cm4gaGVscGVyTmFtZTtcbiAgfVxuXG4gIGVtaXRIZWxwZXJzKCkge1xuICAgIGxldCByZXN1bHRDb2RlID0gXCJcIjtcbiAgICBpZiAodGhpcy5oZWxwZXJOYW1lcy5vcHRpb25hbENoYWluRGVsZXRlKSB7XG4gICAgICB0aGlzLmdldEhlbHBlck5hbWUoXCJvcHRpb25hbENoYWluXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oZWxwZXJOYW1lcy5hc3luY09wdGlvbmFsQ2hhaW5EZWxldGUpIHtcbiAgICAgIHRoaXMuZ2V0SGVscGVyTmFtZShcImFzeW5jT3B0aW9uYWxDaGFpblwiKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbYmFzZU5hbWUsIGhlbHBlckNvZGVUZW1wbGF0ZV0gb2YgT2JqZWN0LmVudHJpZXMoSEVMUEVSUykpIHtcbiAgICAgIGNvbnN0IGhlbHBlck5hbWUgPSB0aGlzLmhlbHBlck5hbWVzW2Jhc2VOYW1lXTtcbiAgICAgIGxldCBoZWxwZXJDb2RlID0gaGVscGVyQ29kZVRlbXBsYXRlO1xuICAgICAgaWYgKGJhc2VOYW1lID09PSBcIm9wdGlvbmFsQ2hhaW5EZWxldGVcIikge1xuICAgICAgICBoZWxwZXJDb2RlID0gaGVscGVyQ29kZS5yZXBsYWNlKFwiT1BUSU9OQUxfQ0hBSU5fTkFNRVwiLCB0aGlzLmhlbHBlck5hbWVzLm9wdGlvbmFsQ2hhaW4pO1xuICAgICAgfSBlbHNlIGlmIChiYXNlTmFtZSA9PT0gXCJhc3luY09wdGlvbmFsQ2hhaW5EZWxldGVcIikge1xuICAgICAgICBoZWxwZXJDb2RlID0gaGVscGVyQ29kZS5yZXBsYWNlKFxuICAgICAgICAgIFwiQVNZTkNfT1BUSU9OQUxfQ0hBSU5fTkFNRVwiLFxuICAgICAgICAgIHRoaXMuaGVscGVyTmFtZXMuYXN5bmNPcHRpb25hbENoYWluLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChiYXNlTmFtZSA9PT0gXCJyZXF1aXJlXCIpIHtcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlUmVxdWlyZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVJlcXVpcmVOYW1lID0gdGhpcy5uYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX2NyZWF0ZVJlcXVpcmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaGVscGVyQ29kZSA9IGhlbHBlckNvZGUucmVwbGFjZSgvQ1JFQVRFX1JFUVVJUkVfTkFNRS9nLCB0aGlzLmNyZWF0ZVJlcXVpcmVOYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChoZWxwZXJOYW1lKSB7XG4gICAgICAgIHJlc3VsdENvZGUgKz0gXCIgXCI7XG4gICAgICAgIHJlc3VsdENvZGUgKz0gaGVscGVyQ29kZS5yZXBsYWNlKGJhc2VOYW1lLCBoZWxwZXJOYW1lKS5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKS50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRDb2RlO1xuICB9XG59IGV4cG9ydHMuSGVscGVyTWFuYWdlciA9IEhlbHBlck1hbmFnZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTtcblxuXG5cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi9wYXJzZXIvdG9rZW5pemVyJyk7XG5cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxuXG4vKipcbiAqIFRyYXZlcnNlIHRoZSBnaXZlbiB0b2tlbnMgYW5kIG1vZGlmeSB0aGVtIGlmIG5lY2Vzc2FyeSB0byBpbmRpY2F0ZSB0aGF0IHNvbWUgbmFtZXMgc2hhZG93IGdsb2JhbFxuICogdmFyaWFibGVzLlxuICovXG4gZnVuY3Rpb24gaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMoXG4gIHRva2VucyxcbiAgc2NvcGVzLFxuICBnbG9iYWxOYW1lcyxcbikge1xuICBpZiAoIWhhc1NoYWRvd2VkR2xvYmFscyh0b2tlbnMsIGdsb2JhbE5hbWVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBtYXJrU2hhZG93ZWRHbG9iYWxzKHRva2Vucywgc2NvcGVzLCBnbG9iYWxOYW1lcyk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGlkZW50aWZ5U2hhZG93ZWRHbG9iYWxzO1xuXG4vKipcbiAqIFdlIGNhbiBkbyBhIGZhc3QgdXAtZnJvbnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVjbGFyYXRpb25zIHRvIGdsb2JhbCBuYW1lcy4gSWYgbm90LFxuICogdGhlbiB0aGVyZSdzIG5vIHBvaW50IGluIGNvbXB1dGluZyBzY29wZSBhc3NpZ25tZW50cy5cbiAqL1xuLy8gRXhwb3J0ZWQgZm9yIHRlc3RpbmcuXG4gZnVuY3Rpb24gaGFzU2hhZG93ZWRHbG9iYWxzKHRva2VucywgZ2xvYmFsTmFtZXMpIHtcbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMudG9rZW5zKSB7XG4gICAgaWYgKFxuICAgICAgdG9rZW4udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lICYmXG4gICAgICAhdG9rZW4uaXNUeXBlICYmXG4gICAgICBfdG9rZW5pemVyLmlzTm9uVG9wTGV2ZWxEZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgdG9rZW4pICYmXG4gICAgICBnbG9iYWxOYW1lcy5oYXModG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn0gZXhwb3J0cy5oYXNTaGFkb3dlZEdsb2JhbHMgPSBoYXNTaGFkb3dlZEdsb2JhbHM7XG5cbmZ1bmN0aW9uIG1hcmtTaGFkb3dlZEdsb2JhbHMoXG4gIHRva2VucyxcbiAgc2NvcGVzLFxuICBnbG9iYWxOYW1lcyxcbikge1xuICBjb25zdCBzY29wZVN0YWNrID0gW107XG4gIGxldCBzY29wZUluZGV4ID0gc2NvcGVzLmxlbmd0aCAtIDE7XG4gIC8vIFNjb3BlcyB3ZXJlIGdlbmVyYXRlZCBhdCBjb21wbGV0aW9uIHRpbWUsIHNvIHRoZXkncmUgc29ydGVkIGJ5IGVuZCBpbmRleCwgc28gd2UgY2FuIG1haW50YWluIGFcbiAgLy8gZ29vZCBzdGFjayBieSBnb2luZyBiYWNrd2FyZHMgdGhyb3VnaCB0aGVtLlxuICBmb3IgKGxldCBpID0gdG9rZW5zLnRva2Vucy5sZW5ndGggLSAxOyA7IGktLSkge1xuICAgIHdoaWxlIChzY29wZVN0YWNrLmxlbmd0aCA+IDAgJiYgc2NvcGVTdGFja1tzY29wZVN0YWNrLmxlbmd0aCAtIDFdLnN0YXJ0VG9rZW5JbmRleCA9PT0gaSArIDEpIHtcbiAgICAgIHNjb3BlU3RhY2sucG9wKCk7XG4gICAgfVxuICAgIHdoaWxlIChzY29wZUluZGV4ID49IDAgJiYgc2NvcGVzW3Njb3BlSW5kZXhdLmVuZFRva2VuSW5kZXggPT09IGkgKyAxKSB7XG4gICAgICBzY29wZVN0YWNrLnB1c2goc2NvcGVzW3Njb3BlSW5kZXhdKTtcbiAgICAgIHNjb3BlSW5kZXgtLTtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBzY29wZXMgYWZ0ZXIgdGhlIGxhc3QgaXRlcmF0aW9uIHNvIHdlIGNhbiBtYWtlIHN1cmUgd2UgcG9wIGFsbCBvZiB0aGVtLlxuICAgIGlmIChpIDwgMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnMudG9rZW5zW2ldO1xuICAgIGNvbnN0IG5hbWUgPSB0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbik7XG4gICAgaWYgKHNjb3BlU3RhY2subGVuZ3RoID4gMSAmJiAhdG9rZW4uaXNUeXBlICYmIHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSAmJiBnbG9iYWxOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIGlmIChfdG9rZW5pemVyLmlzQmxvY2tTY29wZWREZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgdG9rZW4pKSB7XG4gICAgICAgIG1hcmtTaGFkb3dlZEZvclNjb3BlKHNjb3BlU3RhY2tbc2NvcGVTdGFjay5sZW5ndGggLSAxXSwgdG9rZW5zLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoX3Rva2VuaXplci5pc0Z1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsIHRva2VuKSkge1xuICAgICAgICBsZXQgc3RhY2tJbmRleCA9IHNjb3BlU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKHN0YWNrSW5kZXggPiAwICYmICFzY29wZVN0YWNrW3N0YWNrSW5kZXhdLmlzRnVuY3Rpb25TY29wZSkge1xuICAgICAgICAgIHN0YWNrSW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhY2tJbmRleCA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgcGFyZW50IGZ1bmN0aW9uIHNjb3BlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBtYXJrU2hhZG93ZWRGb3JTY29wZShzY29wZVN0YWNrW3N0YWNrSW5kZXhdLCB0b2tlbnMsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc2NvcGVTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZW1wdHkgc2NvcGUgc3RhY2sgYWZ0ZXIgcHJvY2Vzc2luZyBmaWxlLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU2hhZG93ZWRGb3JTY29wZShzY29wZSwgdG9rZW5zLCBuYW1lKSB7XG4gIGZvciAobGV0IGkgPSBzY29wZS5zdGFydFRva2VuSW5kZXg7IGkgPCBzY29wZS5lbmRUb2tlbkluZGV4OyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKFxuICAgICAgKHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSB8fCB0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpICYmXG4gICAgICB0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbikgPT09IG5hbWVcbiAgICApIHtcbiAgICAgIHRva2VuLnNoYWRvd3NHbG9iYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG4vKipcbiAqIEdldCBhbGwgaWRlbnRpZmllciBuYW1lcyBpbiB0aGUgY29kZSwgaW4gb3JkZXIsIGluY2x1ZGluZyBkdXBsaWNhdGVzLlxuICovXG4gZnVuY3Rpb24gZ2V0SWRlbnRpZmllck5hbWVzKGNvZGUsIHRva2Vucykge1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgIGlmICh0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2goY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn0gZXhwb3J0cy5kZWZhdWx0ID0gZ2V0SWRlbnRpZmllck5hbWVzO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG52YXIgX2dldElkZW50aWZpZXJOYW1lcyA9IHJlcXVpcmUoJy4vdXRpbC9nZXRJZGVudGlmaWVyTmFtZXMnKTsgdmFyIF9nZXRJZGVudGlmaWVyTmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SWRlbnRpZmllck5hbWVzKTtcblxuIGNsYXNzIE5hbWVNYW5hZ2VyIHtcbiAgICBfX2luaXQoKSB7dGhpcy51c2VkTmFtZXMgPSBuZXcgU2V0KCl9XG5cbiAgY29uc3RydWN0b3IoY29kZSwgdG9rZW5zKSB7O05hbWVNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnVzZWROYW1lcyA9IG5ldyBTZXQoX2dldElkZW50aWZpZXJOYW1lczIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgY29kZSwgdG9rZW5zKSk7XG4gIH1cblxuICBjbGFpbUZyZWVOYW1lKG5hbWUpIHtcbiAgICBjb25zdCBuZXdOYW1lID0gdGhpcy5maW5kRnJlZU5hbWUobmFtZSk7XG4gICAgdGhpcy51c2VkTmFtZXMuYWRkKG5ld05hbWUpO1xuICAgIHJldHVybiBuZXdOYW1lO1xuICB9XG5cbiAgZmluZEZyZWVOYW1lKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMudXNlZE5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGxldCBzdWZmaXhOdW0gPSAyO1xuICAgIHdoaWxlICh0aGlzLnVzZWROYW1lcy5oYXMobmFtZSArIFN0cmluZyhzdWZmaXhOdW0pKSkge1xuICAgICAgc3VmZml4TnVtKys7XG4gICAgfVxuICAgIHJldHVybiBuYW1lICsgU3RyaW5nKHN1ZmZpeE51bSk7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gTmFtZU1hbmFnZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGV0YWlsQ29udGV4dCA9IGV4cG9ydHMuTm9vcENvbnRleHQgPSBleHBvcnRzLlZFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogRXJyb3IgdGhyb3duIGJ5IHZhbGlkYXRpb24uIEJlc2lkZXMgYW4gaW5mb3JtYXRpdmUgbWVzc2FnZSwgaXQgaW5jbHVkZXMgdGhlIHBhdGggdG8gdGhlXG4gKiBwcm9wZXJ0eSB3aGljaCB0cmlnZ2VyZWQgdGhlIGZhaWx1cmUuXG4gKi9cbnZhciBWRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWRXJyb3IocGF0aCwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrIGZvciBpbmZvIGFib3V0IHRoaXMgd29ya2Fyb3VuZC5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBWRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gVkVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5WRXJyb3IgPSBWRXJyb3I7XG4vKipcbiAqIEZhc3QgaW1wbGVtZW50YXRpb24gb2YgSUNvbnRleHQgdXNlZCBmb3IgZmlyc3QtcGFzcyB2YWxpZGF0aW9uLiBJZiB0aGF0IGZhaWxzLCB3ZSBjYW4gdmFsaWRhdGVcbiAqIHVzaW5nIERldGFpbENvbnRleHQgdG8gY29sbGVjdCBlcnJvciBtZXNzYWdlcy4gVGhhdCdzIGZhc3RlciBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZW4gbWVzc2FnZXNcbiAqIG5vcm1hbGx5IHBhc3MgdmFsaWRhdGlvbi5cbiAqL1xudmFyIE5vb3BDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BDb250ZXh0KCkge1xuICAgIH1cbiAgICBOb29wQ29udGV4dC5wcm90b3R5cGUuZmFpbCA9IGZ1bmN0aW9uIChyZWxQYXRoLCBtZXNzYWdlLCBzY29yZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dC5wcm90b3R5cGUudW5pb25SZXNvbHZlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG4gICAgTm9vcENvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgIE5vb3BDb250ZXh0LnByb3RvdHlwZS5yZXNvbHZlVW5pb24gPSBmdW5jdGlvbiAodXIpIHsgfTtcbiAgICByZXR1cm4gTm9vcENvbnRleHQ7XG59KCkpO1xuZXhwb3J0cy5Ob29wQ29udGV4dCA9IE5vb3BDb250ZXh0O1xuLyoqXG4gKiBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJQ29udGV4dCB0aGF0IGNvbGxlY3RzIG1lYW5pbmdmdWxsIGVycm9ycy5cbiAqL1xudmFyIERldGFpbENvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGV0YWlsQ29udGV4dCgpIHtcbiAgICAgICAgLy8gU3RhY2sgb2YgcHJvcGVydHkgbmFtZXMgYW5kIGFzc29jaWF0ZWQgbWVzc2FnZXMgZm9yIHJlcG9ydGluZyBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzLlxuICAgICAgICB0aGlzLl9wcm9wTmFtZXMgPSBbXCJcIl07XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW251bGxdO1xuICAgICAgICAvLyBTY29yZSBpcyB1c2VkIHRvIGNob29zZSB0aGUgYmVzdCB1bmlvbiBtZW1iZXIgd2hvc2UgRGV0YWlsQ29udGV4dCB0byB1c2UgZm9yIHJlcG9ydGluZy5cbiAgICAgICAgLy8gSGlnaGVyIHNjb3JlIG1lYW5zIGJldHRlciBtYXRjaCAob3IgcmF0aGVyIGxlc3Mgc2V2ZXJlIG1pc21hdGNoKS5cbiAgICAgICAgdGhpcy5fc2NvcmUgPSAwO1xuICAgIH1cbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5mYWlsID0gZnVuY3Rpb24gKHJlbFBhdGgsIG1lc3NhZ2UsIHNjb3JlKSB7XG4gICAgICAgIHRoaXMuX3Byb3BOYW1lcy5wdXNoKHJlbFBhdGgpO1xuICAgICAgICB0aGlzLl9tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLl9zY29yZSArPSBzY29yZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgRGV0YWlsQ29udGV4dC5wcm90b3R5cGUudW5pb25SZXNvbHZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWxVbmlvblJlc29sdmVyKCk7XG4gICAgfTtcbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5yZXNvbHZlVW5pb24gPSBmdW5jdGlvbiAodW5pb25SZXNvbHZlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgdSA9IHVuaW9uUmVzb2x2ZXI7XG4gICAgICAgIHZhciBiZXN0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYyA9IHUuY29udGV4dHM7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgY3R4ID0gX2NbX2ldO1xuICAgICAgICAgICAgaWYgKCFiZXN0IHx8IGN0eC5fc2NvcmUgPj0gYmVzdC5fc2NvcmUpIHtcbiAgICAgICAgICAgICAgICBiZXN0ID0gY3R4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZXN0ICYmIGJlc3QuX3Njb3JlID4gMCkge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5fcHJvcE5hbWVzKS5wdXNoLmFwcGx5KF9hLCBiZXN0Ll9wcm9wTmFtZXMpO1xuICAgICAgICAgICAgKF9iID0gdGhpcy5fbWVzc2FnZXMpLnB1c2guYXBwbHkoX2IsIGJlc3QuX21lc3NhZ2VzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGV0YWlsQ29udGV4dC5wcm90b3R5cGUuZ2V0RXJyb3IgPSBmdW5jdGlvbiAocGF0aCkge1xuICAgICAgICB2YXIgbXNnUGFydHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3Byb3BOYW1lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wcm9wTmFtZXNbaV07XG4gICAgICAgICAgICBwYXRoICs9ICh0eXBlb2YgcCA9PT0gXCJudW1iZXJcIikgPyBcIltcIiArIHAgKyBcIl1cIiA6IChwID8gXCIuXCIgKyBwIDogXCJcIik7XG4gICAgICAgICAgICB2YXIgbSA9IHRoaXMuX21lc3NhZ2VzW2ldO1xuICAgICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgICAgICBtc2dQYXJ0cy5wdXNoKHBhdGggKyBcIiBcIiArIG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVkVycm9yKHBhdGgsIG1zZ1BhcnRzLmpvaW4oXCI7IFwiKSk7XG4gICAgfTtcbiAgICBEZXRhaWxDb250ZXh0LnByb3RvdHlwZS5nZXRFcnJvckRldGFpbCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHZhciBkZXRhaWxzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9wcm9wTmFtZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcHJvcE5hbWVzW2ldO1xuICAgICAgICAgICAgcGF0aCArPSAodHlwZW9mIHAgPT09IFwibnVtYmVyXCIpID8gXCJbXCIgKyBwICsgXCJdXCIgOiAocCA/IFwiLlwiICsgcCA6IFwiXCIpO1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZGV0YWlscy5wdXNoKHsgcGF0aDogcGF0aCwgbWVzc2FnZTogbWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZGV0YWlsID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IGRldGFpbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChkZXRhaWwpIHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzW2ldLm5lc3RlZCA9IFtkZXRhaWxdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGV0YWlsID0gZGV0YWlsc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGV0YWlsO1xuICAgIH07XG4gICAgcmV0dXJuIERldGFpbENvbnRleHQ7XG59KCkpO1xuZXhwb3J0cy5EZXRhaWxDb250ZXh0ID0gRGV0YWlsQ29udGV4dDtcbnZhciBEZXRhaWxVbmlvblJlc29sdmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERldGFpbFVuaW9uUmVzb2x2ZXIoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB9XG4gICAgRGV0YWlsVW5pb25SZXNvbHZlci5wcm90b3R5cGUuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN0eCA9IG5ldyBEZXRhaWxDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dHMucHVzaChjdHgpO1xuICAgICAgICByZXR1cm4gY3R4O1xuICAgIH07XG4gICAgcmV0dXJuIERldGFpbFVuaW9uUmVzb2x2ZXI7XG59KCkpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIG5vZGVzIHVzZWQgdG8gZGVmaW5lIHR5cGVzIGFuZCB2YWxpZGF0aW9ucyBmb3Igb2JqZWN0cyBhbmQgaW50ZXJmYWNlcy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGU6bm8tc2hhZG93ZWQtdmFyaWFibGUgcHJlZmVyLWZvci1vZlxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhc2ljVHlwZXMgPSBleHBvcnRzLkJhc2ljVHlwZSA9IGV4cG9ydHMuVFBhcmFtTGlzdCA9IGV4cG9ydHMuVFBhcmFtID0gZXhwb3J0cy5wYXJhbSA9IGV4cG9ydHMuVEZ1bmMgPSBleHBvcnRzLmZ1bmMgPSBleHBvcnRzLlRQcm9wID0gZXhwb3J0cy5UT3B0aW9uYWwgPSBleHBvcnRzLm9wdCA9IGV4cG9ydHMuVElmYWNlID0gZXhwb3J0cy5pZmFjZSA9IGV4cG9ydHMuVEVudW1MaXRlcmFsID0gZXhwb3J0cy5lbnVtbGl0ID0gZXhwb3J0cy5URW51bVR5cGUgPSBleHBvcnRzLmVudW10eXBlID0gZXhwb3J0cy5USW50ZXJzZWN0aW9uID0gZXhwb3J0cy5pbnRlcnNlY3Rpb24gPSBleHBvcnRzLlRVbmlvbiA9IGV4cG9ydHMudW5pb24gPSBleHBvcnRzLlRUdXBsZSA9IGV4cG9ydHMudHVwbGUgPSBleHBvcnRzLlRBcnJheSA9IGV4cG9ydHMuYXJyYXkgPSBleHBvcnRzLlRMaXRlcmFsID0gZXhwb3J0cy5saXQgPSBleHBvcnRzLlROYW1lID0gZXhwb3J0cy5uYW1lID0gZXhwb3J0cy5UVHlwZSA9IHZvaWQgMDtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuLyoqIE5vZGUgdGhhdCByZXByZXNlbnRzIGEgdHlwZS4gKi9cbnZhciBUVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUVHlwZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIFRUeXBlO1xufSgpKTtcbmV4cG9ydHMuVFR5cGUgPSBUVHlwZTtcbi8qKiBQYXJzZXMgYSB0eXBlIHNwZWMgaW50byBhIFRUeXBlIG5vZGUuICovXG5mdW5jdGlvbiBwYXJzZVNwZWModHlwZVNwZWMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHR5cGVTcGVjID09PSBcInN0cmluZ1wiID8gbmFtZSh0eXBlU3BlYykgOiB0eXBlU3BlYztcbn1cbmZ1bmN0aW9uIGdldE5hbWVkVHlwZShzdWl0ZSwgbmFtZSkge1xuICAgIHZhciB0dHlwZSA9IHN1aXRlW25hbWVdO1xuICAgIGlmICghdHR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biB0eXBlIFwiICsgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0dHlwZTtcbn1cbi8qKlxuICogRGVmaW5lcyBhIHR5cGUgbmFtZSwgZWl0aGVyIGJ1aWx0LWluLCBvciBkZWZpbmVkIGluIHRoaXMgc3VpdGUuIEl0IGNhbiB0eXBpY2FsbHkgYmUgaW5jbHVkZWQgaW5cbiAqIHRoZSBzcGVjcyBhcyBqdXN0IGEgcGxhaW4gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBuYW1lKHZhbHVlKSB7IHJldHVybiBuZXcgVE5hbWUodmFsdWUpOyB9XG5leHBvcnRzLm5hbWUgPSBuYW1lO1xudmFyIFROYW1lID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUTmFtZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUTmFtZShuYW1lKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm90IGEgXCIgKyBuYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFROYW1lLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QsIGFsbG93ZWRQcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgdHR5cGUgPSBnZXROYW1lZFR5cGUoc3VpdGUsIHRoaXMubmFtZSk7XG4gICAgICAgIHZhciBjaGVja2VyID0gdHR5cGUuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0LCBhbGxvd2VkUHJvcHMpO1xuICAgICAgICBpZiAodHR5cGUgaW5zdGFuY2VvZiBCYXNpY1R5cGUgfHwgdHR5cGUgaW5zdGFuY2VvZiBUTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrZXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIGNvbXBsZXggdHlwZXMsIGFkZCBhbiBhZGRpdGlvbmFsIFwiaXMgbm90IGEgPFR5cGU+XCIgbWVzc2FnZSBvbiBmYWlsdXJlLlxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHsgcmV0dXJuIGNoZWNrZXIodmFsdWUsIGN0eCkgPyB0cnVlIDogY3R4LmZhaWwobnVsbCwgX3RoaXMuX2ZhaWxNc2csIDApOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIFROYW1lO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UTmFtZSA9IFROYW1lO1xuLyoqXG4gKiBEZWZpbmVzIGEgbGl0ZXJhbCB2YWx1ZSwgZS5nLiBsaXQoJ2hlbGxvJykgb3IgbGl0KDEyMykuXG4gKi9cbmZ1bmN0aW9uIGxpdCh2YWx1ZSkgeyByZXR1cm4gbmV3IFRMaXRlcmFsKHZhbHVlKTsgfVxuZXhwb3J0cy5saXQgPSBsaXQ7XG52YXIgVExpdGVyYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRMaXRlcmFsLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIF90aGlzLm5hbWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIF90aGlzLl9mYWlsTXNnID0gXCJpcyBub3QgXCIgKyBfdGhpcy5uYW1lO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRMaXRlcmFsLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7IHJldHVybiAodmFsdWUgPT09IF90aGlzLnZhbHVlKSA/IHRydWUgOiBjdHguZmFpbChudWxsLCBfdGhpcy5fZmFpbE1zZywgLTEpOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRMaXRlcmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UTGl0ZXJhbCA9IFRMaXRlcmFsO1xuLyoqXG4gKiBEZWZpbmVzIGFuIGFycmF5IHR5cGUsIGUuZy4gYXJyYXkoJ251bWJlcicpLlxuICovXG5mdW5jdGlvbiBhcnJheSh0eXBlU3BlYykgeyByZXR1cm4gbmV3IFRBcnJheShwYXJzZVNwZWModHlwZVNwZWMpKTsgfVxuZXhwb3J0cy5hcnJheSA9IGFycmF5O1xudmFyIFRBcnJheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEFycmF5LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRBcnJheSh0dHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRBcnJheS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpdGVtQ2hlY2tlciA9IHRoaXMudHR5cGUuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIFwiaXMgbm90IGFuIGFycmF5XCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvayA9IGl0ZW1DaGVja2VyKHZhbHVlW2ldLCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKGksIG51bGwsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRBcnJheTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVEFycmF5ID0gVEFycmF5O1xuLyoqXG4gKiBEZWZpbmVzIGEgdHVwbGUgdHlwZSwgZS5nLiB0dXBsZSgnc3RyaW5nJywgJ251bWJlcicpLlxuICovXG5mdW5jdGlvbiB0dXBsZSgpIHtcbiAgICB2YXIgdHlwZVNwZWMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3BlY1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRUdXBsZSh0eXBlU3BlYy5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHBhcnNlU3BlYyh0KTsgfSkpO1xufVxuZXhwb3J0cy50dXBsZSA9IHR1cGxlO1xudmFyIFRUdXBsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVFR1cGxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRUdXBsZSh0dHlwZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGVzID0gdHR5cGVzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRUdXBsZS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpdGVtQ2hlY2tlcnMgPSB0aGlzLnR0eXBlcy5tYXAoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuZ2V0Q2hlY2tlcihzdWl0ZSwgc3RyaWN0KTsgfSk7XG4gICAgICAgIHZhciBjaGVja2VyID0gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmZhaWwobnVsbCwgXCJpcyBub3QgYW4gYXJyYXlcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1DaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvayA9IGl0ZW1DaGVja2Vyc1tpXSh2YWx1ZVtpXSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChpLCBudWxsLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKCFjaGVja2VyKHZhbHVlLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA8PSBpdGVtQ2hlY2tlcnMubGVuZ3RoID8gdHJ1ZSA6XG4gICAgICAgICAgICAgICAgY3R4LmZhaWwoaXRlbUNoZWNrZXJzLmxlbmd0aCwgXCJpcyBleHRyYW5lb3VzXCIsIDIpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRUdXBsZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVFR1cGxlID0gVFR1cGxlO1xuLyoqXG4gKiBEZWZpbmVzIGEgdW5pb24gdHlwZSwgZS5nLiB1bmlvbignbnVtYmVyJywgJ251bGwnKS5cbiAqL1xuZnVuY3Rpb24gdW5pb24oKSB7XG4gICAgdmFyIHR5cGVTcGVjID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdHlwZVNwZWNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUVW5pb24odHlwZVNwZWMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiBwYXJzZVNwZWModCk7IH0pKTtcbn1cbmV4cG9ydHMudW5pb24gPSB1bmlvbjtcbnZhciBUVW5pb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRVbmlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUVW5pb24odHR5cGVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnR0eXBlcyA9IHR0eXBlcztcbiAgICAgICAgdmFyIG5hbWVzID0gdHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdCBpbnN0YW5jZW9mIFROYW1lIHx8IHQgaW5zdGFuY2VvZiBUTGl0ZXJhbCA/IHQubmFtZSA6IG51bGw7IH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuOyB9KTtcbiAgICAgICAgdmFyIG90aGVyVHlwZXMgPSB0dHlwZXMubGVuZ3RoIC0gbmFtZXMubGVuZ3RoO1xuICAgICAgICBpZiAobmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3RoZXJUeXBlcyA+IDApIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKG90aGVyVHlwZXMgKyBcIiBtb3JlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuX2ZhaWxNc2cgPSBcImlzIG5vbmUgb2YgXCIgKyBuYW1lcy5qb2luKFwiLCBcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm9uZSBvZiBcIiArIG90aGVyVHlwZXMgKyBcIiB0eXBlc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVFVuaW9uLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGl0ZW1DaGVja2VycyA9IHRoaXMudHR5cGVzLm1hcChmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5nZXRDaGVja2VyKHN1aXRlLCBzdHJpY3QpOyB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICB2YXIgdXIgPSBjdHgudW5pb25SZXNvbHZlcigpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgb2sgPSBpdGVtQ2hlY2tlcnNbaV0odmFsdWUsIHVyLmNyZWF0ZUNvbnRleHQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5yZXNvbHZlVW5pb24odXIpO1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAwKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUVW5pb247XG59KFRUeXBlKSk7XG5leHBvcnRzLlRVbmlvbiA9IFRVbmlvbjtcbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcnNlY3Rpb24gdHlwZSwgZS5nLiBpbnRlcnNlY3Rpb24oJ251bWJlcicsICdudWxsJykuXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdGlvbigpIHtcbiAgICB2YXIgdHlwZVNwZWMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3BlY1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRJbnRlcnNlY3Rpb24odHlwZVNwZWMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiBwYXJzZVNwZWModCk7IH0pKTtcbn1cbmV4cG9ydHMuaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uO1xudmFyIFRJbnRlcnNlY3Rpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRJbnRlcnNlY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEludGVyc2VjdGlvbih0dHlwZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGVzID0gdHR5cGVzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRJbnRlcnNlY3Rpb24ucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgYWxsb3dlZFByb3BzID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXJzID0gdGhpcy50dHlwZXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCwgYWxsb3dlZFByb3BzKTsgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgdmFyIG9rID0gaXRlbUNoZWNrZXJzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVja2VyKSB7IHJldHVybiBjaGVja2VyKHZhbHVlLCBjdHgpOyB9KTtcbiAgICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG51bGwsIG51bGwsIDApO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRJbnRlcnNlY3Rpb247XG59KFRUeXBlKSk7XG5leHBvcnRzLlRJbnRlcnNlY3Rpb24gPSBUSW50ZXJzZWN0aW9uO1xuLyoqXG4gKiBEZWZpbmVzIGFuIGVudW0gdHlwZSwgZS5nLiBlbnVtKHsnQSc6IDEsICdCJzogMn0pLlxuICovXG5mdW5jdGlvbiBlbnVtdHlwZSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gbmV3IFRFbnVtVHlwZSh2YWx1ZXMpO1xufVxuZXhwb3J0cy5lbnVtdHlwZSA9IGVudW10eXBlO1xudmFyIFRFbnVtVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEVudW1UeXBlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRFbnVtVHlwZShtZW1iZXJzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm1lbWJlcnMgPSBtZW1iZXJzO1xuICAgICAgICBfdGhpcy52YWxpZFZhbHVlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgX3RoaXMuX2ZhaWxNc2cgPSBcImlzIG5vdCBhIHZhbGlkIGVudW0gdmFsdWVcIjtcbiAgICAgICAgX3RoaXMudmFsaWRWYWx1ZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG1lbWJlcnMpLm1hcChmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWVtYmVyc1tuYW1lXTsgfSkpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRFbnVtVHlwZS5wcm90b3R5cGUuZ2V0Q2hlY2tlciA9IGZ1bmN0aW9uIChzdWl0ZSwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIChfdGhpcy52YWxpZFZhbHVlcy5oYXModmFsdWUpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAwKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVEVudW1UeXBlO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URW51bVR5cGUgPSBURW51bVR5cGU7XG4vKipcbiAqIERlZmluZXMgYSBsaXRlcmFsIGVudW0gdmFsdWUsIHN1Y2ggYXMgRGlyZWN0aW9uLlVwLCBzcGVjaWZpZWQgYXMgZW51bWxpdChcIkRpcmVjdGlvblwiLCBcIlVwXCIpLlxuICovXG5mdW5jdGlvbiBlbnVtbGl0KG5hbWUsIHByb3ApIHtcbiAgICByZXR1cm4gbmV3IFRFbnVtTGl0ZXJhbChuYW1lLCBwcm9wKTtcbn1cbmV4cG9ydHMuZW51bWxpdCA9IGVudW1saXQ7XG52YXIgVEVudW1MaXRlcmFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhURW51bUxpdGVyYWwsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEVudW1MaXRlcmFsKGVudW1OYW1lLCBwcm9wKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmVudW1OYW1lID0gZW51bU5hbWU7XG4gICAgICAgIF90aGlzLnByb3AgPSBwcm9wO1xuICAgICAgICBfdGhpcy5fZmFpbE1zZyA9IFwiaXMgbm90IFwiICsgZW51bU5hbWUgKyBcIi5cIiArIHByb3A7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVEVudW1MaXRlcmFsLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHR0eXBlID0gZ2V0TmFtZWRUeXBlKHN1aXRlLCB0aGlzLmVudW1OYW1lKTtcbiAgICAgICAgaWYgKCEodHR5cGUgaW5zdGFuY2VvZiBURW51bVR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIFwiICsgdGhpcy5lbnVtTmFtZSArIFwiIHVzZWQgaW4gZW51bWxpdCBpcyBub3QgYW4gZW51bSB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWwgPSB0dHlwZS5tZW1iZXJzW3RoaXMucHJvcF07XG4gICAgICAgIGlmICghdHR5cGUubWVtYmVycy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb3ApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHZhbHVlIFwiICsgdGhpcy5lbnVtTmFtZSArIFwiLlwiICsgdGhpcy5wcm9wICsgXCIgdXNlZCBpbiBlbnVtbGl0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkgeyByZXR1cm4gKHZhbHVlID09PSB2YWwpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLl9mYWlsTXNnLCAtMSk7IH07XG4gICAgfTtcbiAgICByZXR1cm4gVEVudW1MaXRlcmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URW51bUxpdGVyYWwgPSBURW51bUxpdGVyYWw7XG5mdW5jdGlvbiBtYWtlSWZhY2VQcm9wcyhwcm9wcykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYWtlSWZhY2VQcm9wKG5hbWUsIHByb3BzW25hbWVdKTsgfSk7XG59XG5mdW5jdGlvbiBtYWtlSWZhY2VQcm9wKG5hbWUsIHByb3ApIHtcbiAgICByZXR1cm4gcHJvcCBpbnN0YW5jZW9mIFRPcHRpb25hbCA/XG4gICAgICAgIG5ldyBUUHJvcChuYW1lLCBwcm9wLnR0eXBlLCB0cnVlKSA6XG4gICAgICAgIG5ldyBUUHJvcChuYW1lLCBwYXJzZVNwZWMocHJvcCksIGZhbHNlKTtcbn1cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmZhY2UuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSBvZiBpbnRlcmZhY2VzIHRoYXQgaXQgZXh0ZW5kcywgYW5kIHRoZVxuICogc2Vjb25kIGlzIGFuIGFycmF5IG9mIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGlmYWNlKGJhc2VzLCBwcm9wcykge1xuICAgIHJldHVybiBuZXcgVElmYWNlKGJhc2VzLCBtYWtlSWZhY2VQcm9wcyhwcm9wcykpO1xufVxuZXhwb3J0cy5pZmFjZSA9IGlmYWNlO1xudmFyIFRJZmFjZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVElmYWNlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRJZmFjZShiYXNlcywgcHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYmFzZXMgPSBiYXNlcztcbiAgICAgICAgX3RoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgICAgX3RoaXMucHJvcFNldCA9IG5ldyBTZXQocHJvcHMubWFwKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLm5hbWU7IH0pKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUSWZhY2UucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCwgYWxsb3dlZFByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBiYXNlQ2hlY2tlcnMgPSB0aGlzLmJhc2VzLm1hcChmdW5jdGlvbiAoYikgeyByZXR1cm4gZ2V0TmFtZWRUeXBlKHN1aXRlLCBiKS5nZXRDaGVja2VyKHN1aXRlLCBzdHJpY3QpOyB9KTtcbiAgICAgICAgdmFyIHByb3BDaGVja2VycyA9IHRoaXMucHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7IHJldHVybiBwcm9wLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7IH0pO1xuICAgICAgICB2YXIgdGVzdEN0eCA9IG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKTtcbiAgICAgICAgLy8gQ29uc2lkZXIgYSBwcm9wIHJlcXVpcmVkIGlmIGl0J3Mgbm90IG9wdGlvbmFsIEFORCBkb2VzIG5vdCBhbGxvdyBmb3IgdW5kZWZpbmVkIGFzIGEgdmFsdWUuXG4gICAgICAgIHZhciBpc1Byb3BSZXF1aXJlZCA9IHRoaXMucHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gIXByb3AuaXNPcHQgJiYgIXByb3BDaGVja2Vyc1tpXSh1bmRlZmluZWQsIHRlc3RDdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhbiBvYmplY3RcIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhc2VDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZUNoZWNrZXJzW2ldKHZhbHVlLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBfdGhpcy5wcm9wc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdmFsdWVbbmFtZV8xXTtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb3BSZXF1aXJlZFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG5hbWVfMSwgXCJpcyBtaXNzaW5nXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBwcm9wQ2hlY2tlcnNbaV0odiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKG5hbWVfMSwgbnVsbCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVja2VyO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm9wU2V0ID0gdGhpcy5wcm9wU2V0O1xuICAgICAgICBpZiAoYWxsb3dlZFByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BTZXQuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkgeyByZXR1cm4gYWxsb3dlZFByb3BzLmFkZChwcm9wKTsgfSk7XG4gICAgICAgICAgICBwcm9wU2V0ID0gYWxsb3dlZFByb3BzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluIHN0cmljdCBtb2RlLCBjaGVjayBhbHNvIGZvciB1bmtub3duIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoIWNoZWNrZXIodmFsdWUsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wU2V0Lmhhcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmZhaWwocHJvcCwgXCJpcyBleHRyYW5lb3VzXCIsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRJZmFjZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuVElmYWNlID0gVElmYWNlO1xuLyoqXG4gKiBEZWZpbmVzIGFuIG9wdGlvbmFsIHByb3BlcnR5IG9uIGFuIGludGVyZmFjZS5cbiAqL1xuZnVuY3Rpb24gb3B0KHR5cGVTcGVjKSB7IHJldHVybiBuZXcgVE9wdGlvbmFsKHBhcnNlU3BlYyh0eXBlU3BlYykpOyB9XG5leHBvcnRzLm9wdCA9IG9wdDtcbnZhciBUT3B0aW9uYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRPcHRpb25hbCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUT3B0aW9uYWwodHR5cGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMudHR5cGUgPSB0dHlwZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUT3B0aW9uYWwucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXIgPSB0aGlzLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgaXRlbUNoZWNrZXIodmFsdWUsIGN0eCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gVE9wdGlvbmFsO1xufShUVHlwZSkpO1xuZXhwb3J0cy5UT3B0aW9uYWwgPSBUT3B0aW9uYWw7XG4vKipcbiAqIERlZmluZXMgYSBwcm9wZXJ0eSBpbiBhbiBpbnRlcmZhY2UuXG4gKi9cbnZhciBUUHJvcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUUHJvcChuYW1lLCB0dHlwZSwgaXNPcHQpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICB0aGlzLmlzT3B0ID0gaXNPcHQ7XG4gICAgfVxuICAgIHJldHVybiBUUHJvcDtcbn0oKSk7XG5leHBvcnRzLlRQcm9wID0gVFByb3A7XG4vKipcbiAqIERlZmluZXMgYSBmdW5jdGlvbi4gVGhlIGZpcnN0IGFyZ3VtZW50IGRlY2xhcmVzIHRoZSBmdW5jdGlvbidzIHJldHVybiB0eXBlLCB0aGUgcmVzdCBkZWNsYXJlXG4gKiBpdHMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gZnVuYyhyZXN1bHRTcGVjKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHBhcmFtc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBURnVuYyhuZXcgVFBhcmFtTGlzdChwYXJhbXMpLCBwYXJzZVNwZWMocmVzdWx0U3BlYykpO1xufVxuZXhwb3J0cy5mdW5jID0gZnVuYztcbnZhciBURnVuYyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVEZ1bmMsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVEZ1bmMocGFyYW1MaXN0LCByZXN1bHQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyYW1MaXN0ID0gcGFyYW1MaXN0O1xuICAgICAgICBfdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVEZ1bmMucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRydWUgOiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhIGZ1bmN0aW9uXCIsIDApO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRGdW5jO1xufShUVHlwZSkpO1xuZXhwb3J0cy5URnVuYyA9IFRGdW5jO1xuLyoqXG4gKiBEZWZpbmVzIGEgZnVuY3Rpb24gcGFyYW1ldGVyLlxuICovXG5mdW5jdGlvbiBwYXJhbShuYW1lLCB0eXBlU3BlYywgaXNPcHQpIHtcbiAgICByZXR1cm4gbmV3IFRQYXJhbShuYW1lLCBwYXJzZVNwZWModHlwZVNwZWMpLCBCb29sZWFuKGlzT3B0KSk7XG59XG5leHBvcnRzLnBhcmFtID0gcGFyYW07XG52YXIgVFBhcmFtID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRQYXJhbShuYW1lLCB0dHlwZSwgaXNPcHQpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50dHlwZSA9IHR0eXBlO1xuICAgICAgICB0aGlzLmlzT3B0ID0gaXNPcHQ7XG4gICAgfVxuICAgIHJldHVybiBUUGFyYW07XG59KCkpO1xuZXhwb3J0cy5UUGFyYW0gPSBUUGFyYW07XG4vKipcbiAqIERlZmluZXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgbGlzdC5cbiAqL1xudmFyIFRQYXJhbUxpc3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRQYXJhbUxpc3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVFBhcmFtTGlzdChwYXJhbXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFRQYXJhbUxpc3QucHJvdG90eXBlLmdldENoZWNrZXIgPSBmdW5jdGlvbiAoc3VpdGUsIHN0cmljdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgaXRlbUNoZWNrZXJzID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIHN0cmljdCk7IH0pO1xuICAgICAgICB2YXIgdGVzdEN0eCA9IG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKTtcbiAgICAgICAgdmFyIGlzUGFyYW1SZXF1aXJlZCA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0sIGkpIHtcbiAgICAgICAgICAgIHJldHVybiAhcGFyYW0uaXNPcHQgJiYgIWl0ZW1DaGVja2Vyc1tpXSh1bmRlZmluZWQsIHRlc3RDdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBmdW5jdGlvbiAodmFsdWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChudWxsLCBcImlzIG5vdCBhbiBhcnJheVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBfdGhpcy5wYXJhbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW1SZXF1aXJlZFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5mYWlsKHAubmFtZSwgXCJpcyBtaXNzaW5nXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBpdGVtQ2hlY2tlcnNbaV0odmFsdWVbaV0sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguZmFpbChwLm5hbWUsIG51bGwsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RyaWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2tlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tlcih2YWx1ZSwgY3R4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPD0gaXRlbUNoZWNrZXJzLmxlbmd0aCA/IHRydWUgOlxuICAgICAgICAgICAgICAgIGN0eC5mYWlsKGl0ZW1DaGVja2Vycy5sZW5ndGgsIFwiaXMgZXh0cmFuZW91c1wiLCAyKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUUGFyYW1MaXN0O1xufShUVHlwZSkpO1xuZXhwb3J0cy5UUGFyYW1MaXN0ID0gVFBhcmFtTGlzdDtcbi8qKlxuICogU2luZ2xlIFRUeXBlIGltcGxlbWVudGF0aW9uIGZvciBhbGwgYmFzaWMgYnVpbHQtaW4gdHlwZXMuXG4gKi9cbnZhciBCYXNpY1R5cGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJhc2ljVHlwZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCYXNpY1R5cGUodmFsaWRhdG9yLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjtcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQmFzaWNUeXBlLnByb3RvdHlwZS5nZXRDaGVja2VyID0gZnVuY3Rpb24gKHN1aXRlLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7IHJldHVybiBfdGhpcy52YWxpZGF0b3IodmFsdWUpID8gdHJ1ZSA6IGN0eC5mYWlsKG51bGwsIF90aGlzLm1lc3NhZ2UsIDApOyB9O1xuICAgIH07XG4gICAgcmV0dXJuIEJhc2ljVHlwZTtcbn0oVFR5cGUpKTtcbmV4cG9ydHMuQmFzaWNUeXBlID0gQmFzaWNUeXBlO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzdWl0ZSBvZiBiYXNpYyB0eXBlcy5cbiAqL1xuZXhwb3J0cy5iYXNpY1R5cGVzID0ge1xuICAgIGFueTogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gdHJ1ZTsgfSwgXCJpcyBpbnZhbGlkXCIpLFxuICAgIG51bWJlcjogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKTsgfSwgXCJpcyBub3QgYSBudW1iZXJcIiksXG4gICAgb2JqZWN0OiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdik7IH0sIFwiaXMgbm90IGFuIG9iamVjdFwiKSxcbiAgICBib29sZWFuOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKTsgfSwgXCJpcyBub3QgYSBib29sZWFuXCIpLFxuICAgIHN0cmluZzogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKTsgfSwgXCJpcyBub3QgYSBzdHJpbmdcIiksXG4gICAgc3ltYm9sOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodHlwZW9mIHYgPT09IFwic3ltYm9sXCIpOyB9LCBcImlzIG5vdCBhIHN5bWJvbFwiKSxcbiAgICB2b2lkOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiAodiA9PSBudWxsKTsgfSwgXCJpcyBub3Qgdm9pZFwiKSxcbiAgICB1bmRlZmluZWQ6IG5ldyBCYXNpY1R5cGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2ID09PSB1bmRlZmluZWQpOyB9LCBcImlzIG5vdCB1bmRlZmluZWRcIiksXG4gICAgbnVsbDogbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gKHYgPT09IG51bGwpOyB9LCBcImlzIG5vdCBudWxsXCIpLFxuICAgIG5ldmVyOiBuZXcgQmFzaWNUeXBlKGZ1bmN0aW9uICh2KSB7IHJldHVybiBmYWxzZTsgfSwgXCJpcyB1bmV4cGVjdGVkXCIpLFxuICAgIERhdGU6IG5ldyBCYXNpY1R5cGUoZ2V0SXNOYXRpdmVDaGVja2VyKFwiW29iamVjdCBEYXRlXVwiKSwgXCJpcyBub3QgYSBEYXRlXCIpLFxuICAgIFJlZ0V4cDogbmV3IEJhc2ljVHlwZShnZXRJc05hdGl2ZUNoZWNrZXIoXCJbb2JqZWN0IFJlZ0V4cF1cIiksIFwiaXMgbm90IGEgUmVnRXhwXCIpLFxufTtcbi8vIFRoaXMgYXBwcm9hY2ggZm9yIGNoZWNraW5nIG5hdGl2ZSBvYmplY3QgdHlwZXMgbWlycm9ycyB0aGF0IG9mIGxvZGFzaC4gSXRzIGFkdmFudGFnZSBvdmVyXG4vLyBgaXNpbnN0YW5jZWAgaXMgdGhhdCBpdCBjYW4gc3RpbGwgcmV0dXJuIHRydWUgZm9yIG5hdGl2ZSBvYmplY3RzIGNyZWF0ZWQgaW4gZGlmZmVyZW50IEpTXG4vLyBleGVjdXRpb24gZW52aXJvbm1lbnRzLlxudmFyIG5hdGl2ZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIGdldElzTmF0aXZlQ2hlY2tlcih0YWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgJiYgbmF0aXZlVG9TdHJpbmcuY2FsbCh2KSA9PT0gdGFnOyB9O1xufVxuaWYgKHR5cGVvZiBCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBleHBvcnRzLmJhc2ljVHlwZXMuQnVmZmVyID0gbmV3IEJhc2ljVHlwZShmdW5jdGlvbiAodikgeyByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHYpOyB9LCBcImlzIG5vdCBhIEJ1ZmZlclwiKTtcbn1cbnZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGFycmF5XzEpIHtcbiAgICBleHBvcnRzLmJhc2ljVHlwZXNbYXJyYXlfMS5uYW1lXSA9IG5ldyBCYXNpY1R5cGUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2IGluc3RhbmNlb2YgYXJyYXlfMSk7IH0sIFwiaXMgbm90IGEgXCIgKyBhcnJheV8xLm5hbWUpO1xufTtcbi8vIFN1cHBvcnQgdHlwZWQgYXJyYXlzIG9mIHZhcmlvdXMgZmxhdm9yc1xuZm9yICh2YXIgX2kgPSAwLCBfYSA9IFtJbnQ4QXJyYXksIFVpbnQ4QXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSxcbiAgICBJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXksIEFycmF5QnVmZmVyXTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgYXJyYXlfMSA9IF9hW19pXTtcbiAgICBfbG9vcF8xKGFycmF5XzEpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNoZWNrZXIgPSBleHBvcnRzLmNyZWF0ZUNoZWNrZXJzID0gdm9pZCAwO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuLyoqXG4gKiBFeHBvcnQgZnVuY3Rpb25zIHVzZWQgdG8gZGVmaW5lIGludGVyZmFjZXMuXG4gKi9cbnZhciB0eXBlc18yID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUQXJyYXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuVEFycmF5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVEVudW1UeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRFbnVtVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRFbnVtTGl0ZXJhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5URW51bUxpdGVyYWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJURnVuY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5URnVuYzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRJZmFjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5USWZhY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUTGl0ZXJhbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UTGl0ZXJhbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlROYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlROYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVE9wdGlvbmFsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRPcHRpb25hbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRQYXJhbVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UUGFyYW07IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUGFyYW1MaXN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRQYXJhbUxpc3Q7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUHJvcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UUHJvcDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRUdXBsZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVHVwbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRVbmlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5UVW5pb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUSW50ZXJzZWN0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLlRJbnRlcnNlY3Rpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcnJheVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5hcnJheTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudW1saXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuZW51bWxpdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVudW10eXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLmVudW10eXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZnVuY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5mdW5jOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaWZhY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuaWZhY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsaXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIubGl0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5uYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3B0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLm9wdDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcmFtXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18yLnBhcmFtOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHVwbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIudHVwbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi51bmlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMi5pbnRlcnNlY3Rpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNpY1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzIuQmFzaWNUeXBlOyB9IH0pO1xudmFyIHV0aWxfMiA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxfMi5WRXJyb3I7IH0gfSk7XG4vKipcbiAqIFRha2VzIG9uZSBvZiBtb3JlIHR5cGUgc3VpdGVzIChlLmcuIGEgbW9kdWxlIGdlbmVyYXRlZCBieSBgdHMtaW50ZXJmYWNlLWJ1aWxkZXJgKSwgYW5kIGNvbWJpbmVzXG4gKiB0aGVtIGludG8gYSBzdWl0ZSBvZiBpbnRlcmZhY2UgY2hlY2tlcnMuIElmIGEgdHlwZSBpcyB1c2VkIGJ5IG5hbWUsIHRoYXQgbmFtZSBzaG91bGQgYmUgcHJlc2VudFxuICogYW1vbmcgdGhlIHBhc3NlZC1pbiB0eXBlIHN1aXRlcy5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb2JqZWN0IG1hcHMgdHlwZSBuYW1lcyB0byBDaGVja2VyIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrZXJzKCkge1xuICAgIHZhciB0eXBlU3VpdGUgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0eXBlU3VpdGVbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGZ1bGxTdWl0ZSA9IE9iamVjdC5hc3NpZ24uYXBwbHkoT2JqZWN0LCBfX3NwcmVhZEFycmF5cyhbe30sIHR5cGVzXzEuYmFzaWNUeXBlc10sIHR5cGVTdWl0ZSkpO1xuICAgIHZhciBjaGVja2VycyA9IHt9O1xuICAgIGZvciAodmFyIF9hID0gMCwgdHlwZVN1aXRlXzEgPSB0eXBlU3VpdGU7IF9hIDwgdHlwZVN1aXRlXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgIHZhciBzdWl0ZV8xID0gdHlwZVN1aXRlXzFbX2FdO1xuICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gT2JqZWN0LmtleXMoc3VpdGVfMSk7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IF9jW19iXTtcbiAgICAgICAgICAgIGNoZWNrZXJzW25hbWVdID0gbmV3IENoZWNrZXIoZnVsbFN1aXRlLCBzdWl0ZV8xW25hbWVdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tlcnM7XG59XG5leHBvcnRzLmNyZWF0ZUNoZWNrZXJzID0gY3JlYXRlQ2hlY2tlcnM7XG4vKipcbiAqIENoZWNrZXIgaW1wbGVtZW50cyB2YWxpZGF0aW9uIG9mIG9iamVjdHMsIGFuZCBhbHNvIGluY2x1ZGVzIGFjY2Vzc29ycyB0byB2YWxpZGF0ZSBtZXRob2QgY2FsbHMuXG4gKiBDaGVja2VycyBzaG91bGQgYmUgY3JlYXRlZCB1c2luZyBgY3JlYXRlQ2hlY2tlcnMoKWAuXG4gKi9cbnZhciBDaGVja2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8vIENyZWF0ZSBjaGVja2VycyBieSB1c2luZyBgY3JlYXRlQ2hlY2tlcnMoKWAgZnVuY3Rpb24uXG4gICAgZnVuY3Rpb24gQ2hlY2tlcihzdWl0ZSwgdHR5cGUsIF9wYXRoKSB7XG4gICAgICAgIGlmIChfcGF0aCA9PT0gdm9pZCAwKSB7IF9wYXRoID0gJ3ZhbHVlJzsgfVxuICAgICAgICB0aGlzLnN1aXRlID0gc3VpdGU7XG4gICAgICAgIHRoaXMudHR5cGUgPSB0dHlwZTtcbiAgICAgICAgdGhpcy5fcGF0aCA9IF9wYXRoO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAodHR5cGUgaW5zdGFuY2VvZiB0eXBlc18xLlRJZmFjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHR0eXBlLnByb3BzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIHZhciBwID0gX2FbX2ldO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0KHAubmFtZSwgcC50dHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja2VyUGxhaW4gPSB0aGlzLnR0eXBlLmdldENoZWNrZXIoc3VpdGUsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jaGVja2VyU3RyaWN0ID0gdGhpcy50dHlwZS5nZXRDaGVja2VyKHN1aXRlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwYXRoIHRvIHJlcG9ydCBpbiBlcnJvcnMsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXCJ2YWx1ZVwiLiAoRS5nLiBpZiB0aGUgQ2hlY2tlciBpcyBmb3JcbiAgICAgKiBhIFwicGVyc29uXCIgaW50ZXJmYWNlLCBzZXQgcGF0aCB0byBcInBlcnNvblwiIHRvIHJlcG9ydCBlLmcuIFwicGVyc29uLm5hbWUgaXMgbm90IGEgc3RyaW5nXCIuKVxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnNldFJlcG9ydGVkUGF0aCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIHRoaXMuX3BhdGggPSBwYXRoO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgY2hlY2tlcidzIHR5cGUsIG9yIHRocm93IEVycm9yLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLmNoZWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9kb0NoZWNrKHRoaXMuY2hlY2tlclBsYWluLCB2YWx1ZSk7IH07XG4gICAgLyoqXG4gICAgICogQSBmYXN0IGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgQ2hlY2tlcidzIHR5cGUuIFRoaXMgcmV0dXJuc1xuICAgICAqIHRydWUgb3IgZmFsc2UsIGRvZXMgbm90IHByb2R1Y2UgYW4gZXJyb3IgbWVzc2FnZSwgYW5kIGlzIGZhc3QgYm90aCBvbiBzdWNjZXNzIGFuZCBvbiBmYWlsdXJlLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlclBsYWluKHZhbHVlLCBuZXcgdXRpbF8xLk5vb3BDb250ZXh0KCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBlcnJvciBvYmplY3QgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGlmIHRoZSBnaXZlbiB2YWx1ZSBkb2VzIG5vdCBzYXRpc2Z5IHRoaXNcbiAgICAgKiBDaGVja2VyJ3MgdHlwZSwgb3IgbnVsbCBpZiBpdCBkb2VzLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb1ZhbGlkYXRlKHRoaXMuY2hlY2tlclBsYWluLCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IHRoZSBnaXZlbiB2YWx1ZSBzYXRpc2ZpZXMgdGhpcyBjaGVja2VyJ3MgdHlwZSBzdHJpY3RseS4gVGhpcyBjaGVja3MgdGhhdCBvYmplY3RzXG4gICAgICogYW5kIHR1cGxlcyBoYXZlIG5vIGV4dHJhIG1lbWJlcnMuIE5vdGUgdGhhdCB0aGlzIHByZXZlbnRzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNvIHVzdWFsbHlcbiAgICAgKiBhIHBsYWluIGNoZWNrKCkgaXMgbW9yZSBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5zdHJpY3RDaGVjayA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdGhpcy5fZG9DaGVjayh0aGlzLmNoZWNrZXJTdHJpY3QsIHZhbHVlKTsgfTtcbiAgICAvKipcbiAgICAgKiBBIGZhc3Qgc3RyaWN0IGNoZWNrIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdmFsdWUgc2F0aXNmaWVzIHRoaXMgQ2hlY2tlcidzIHR5cGUuIFJldHVybnNcbiAgICAgKiB0cnVlIG9yIGZhbHNlLCBkb2VzIG5vdCBwcm9kdWNlIGFuIGVycm9yIG1lc3NhZ2UsIGFuZCBpcyBmYXN0IGJvdGggb24gc3VjY2VzcyBhbmQgb24gZmFpbHVyZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5zdHJpY3RUZXN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrZXJTdHJpY3QodmFsdWUsIG5ldyB1dGlsXzEuTm9vcENvbnRleHQoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGVycm9yIG9iamVjdCBkZXNjcmliaW5nIHRoZSBlcnJvcnMgaWYgdGhlIGdpdmVuIHZhbHVlIGRvZXMgbm90IHNhdGlzZnkgdGhpc1xuICAgICAqIENoZWNrZXIncyB0eXBlIHN0cmljdGx5LCBvciBudWxsIGlmIGl0IGRvZXMuXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUuc3RyaWN0VmFsaWRhdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvVmFsaWRhdGUodGhpcy5jaGVja2VyU3RyaWN0LCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGFuIGludGVyZmFjZSwgcmV0dXJucyBhIENoZWNrZXIgZm9yIHRoZSB0eXBlIHJlcXVpcmVkIGZvciB0aGUgZ2l2ZW5cbiAgICAgKiBwcm9wZXJ0eSBvZiB0aGlzIGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRQcm9wID0gZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5wcm9wcy5nZXQocHJvcCk7XG4gICAgICAgIGlmICghdHR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlR5cGUgaGFzIG5vIHByb3BlcnR5IFwiICsgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHR0eXBlLCB0aGlzLl9wYXRoICsgXCIuXCIgKyBwcm9wKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIElmIHRoaXMgY2hlY2tlciBpcyBmb3IgYW4gaW50ZXJmYWNlLCByZXR1cm5zIGEgQ2hlY2tlciBmb3IgdGhlIGFyZ3VtZW50LWxpc3QgcmVxdWlyZWQgdG8gY2FsbFxuICAgICAqIHRoZSBnaXZlbiBtZXRob2Qgb2YgdGhpcyBpbnRlcmZhY2UuIEUuZy4gaWYgdGhpcyBDaGVja2VyIGlzIGZvciB0aGUgaW50ZXJmYWNlOlxuICAgICAqICAgIGludGVyZmFjZSBGb28ge1xuICAgICAqICAgICAgZmluZChzOiBzdHJpbmcsIHBvcz86IG51bWJlcik6IG51bWJlcjtcbiAgICAgKiAgICB9XG4gICAgICogVGhlbiBtZXRob2RBcmdzKFwiZmluZFwiKS5jaGVjayguLi4pIHdpbGwgc3VjY2VlZCBmb3IgW1wiZm9vXCJdIGFuZCBbXCJmb29cIiwgM10sIGJ1dCBub3QgZm9yIFsxN10uXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUubWV0aG9kQXJncyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0ZnVuYyA9IHRoaXMuX2dldE1ldGhvZChtZXRob2ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRmdW5jLnBhcmFtTGlzdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGFuIGludGVyZmFjZSwgcmV0dXJucyBhIENoZWNrZXIgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGdpdmVuXG4gICAgICogbWV0aG9kIG9mIHRoaXMgaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIENoZWNrZXIucHJvdG90eXBlLm1ldGhvZFJlc3VsdCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0ZnVuYyA9IHRoaXMuX2dldE1ldGhvZChtZXRob2ROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRmdW5jLnJlc3VsdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNoZWNrZXIgaXMgZm9yIGEgZnVuY3Rpb24sIHJldHVybnMgYSBDaGVja2VyIGZvciBpdHMgYXJndW1lbnQtbGlzdC5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRBcmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoISh0aGlzLnR0eXBlIGluc3RhbmNlb2YgdHlwZXNfMS5URnVuYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImdldEFyZ3MoKSBhcHBsaWVkIHRvIG5vbi1mdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENoZWNrZXIodGhpcy5zdWl0ZSwgdGhpcy50dHlwZS5wYXJhbUxpc3QpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBjaGVja2VyIGlzIGZvciBhIGZ1bmN0aW9uLCByZXR1cm5zIGEgQ2hlY2tlciBmb3IgaXRzIHJlc3VsdC5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5nZXRSZXN1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghKHRoaXMudHR5cGUgaW5zdGFuY2VvZiB0eXBlc18xLlRGdW5jKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2V0UmVzdWx0KCkgYXBwbGllZCB0byBub24tZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja2VyKHRoaXMuc3VpdGUsIHRoaXMudHR5cGUucmVzdWx0KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgdHlwZSBmb3Igd2hpY2ggdGhpcyBpcyBhIGNoZWNrZXIuXG4gICAgICovXG4gICAgQ2hlY2tlci5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHR5cGU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgY2hlY2soKSBhbmQgc3RyaWN0Q2hlY2soKS5cbiAgICAgKi9cbiAgICBDaGVja2VyLnByb3RvdHlwZS5fZG9DaGVjayA9IGZ1bmN0aW9uIChjaGVja2VyRnVuYywgdmFsdWUpIHtcbiAgICAgICAgdmFyIG5vb3BDdHggPSBuZXcgdXRpbF8xLk5vb3BDb250ZXh0KCk7XG4gICAgICAgIGlmICghY2hlY2tlckZ1bmModmFsdWUsIG5vb3BDdHgpKSB7XG4gICAgICAgICAgICB2YXIgZGV0YWlsQ3R4ID0gbmV3IHV0aWxfMS5EZXRhaWxDb250ZXh0KCk7XG4gICAgICAgICAgICBjaGVja2VyRnVuYyh2YWx1ZSwgZGV0YWlsQ3R4KTtcbiAgICAgICAgICAgIHRocm93IGRldGFpbEN0eC5nZXRFcnJvcih0aGlzLl9wYXRoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ2hlY2tlci5wcm90b3R5cGUuX2RvVmFsaWRhdGUgPSBmdW5jdGlvbiAoY2hlY2tlckZ1bmMsIHZhbHVlKSB7XG4gICAgICAgIHZhciBub29wQ3R4ID0gbmV3IHV0aWxfMS5Ob29wQ29udGV4dCgpO1xuICAgICAgICBpZiAoY2hlY2tlckZ1bmModmFsdWUsIG5vb3BDdHgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGV0YWlsQ3R4ID0gbmV3IHV0aWxfMS5EZXRhaWxDb250ZXh0KCk7XG4gICAgICAgIGNoZWNrZXJGdW5jKHZhbHVlLCBkZXRhaWxDdHgpO1xuICAgICAgICByZXR1cm4gZGV0YWlsQ3R4LmdldEVycm9yRGV0YWlsKHRoaXMuX3BhdGgpO1xuICAgIH07XG4gICAgQ2hlY2tlci5wcm90b3R5cGUuX2dldE1ldGhvZCA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciB0dHlwZSA9IHRoaXMucHJvcHMuZ2V0KG1ldGhvZE5hbWUpO1xuICAgICAgICBpZiAoIXR0eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIGhhcyBubyBwcm9wZXJ0eSBcIiArIG1ldGhvZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHR0eXBlIGluc3RhbmNlb2YgdHlwZXNfMS5URnVuYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3BlcnR5IFwiICsgbWV0aG9kTmFtZSArIFwiIGlzIG5vdCBhIG1ldGhvZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHR5cGU7XG4gICAgfTtcbiAgICByZXR1cm4gQ2hlY2tlcjtcbn0oKSk7XG5leHBvcnRzLkNoZWNrZXIgPSBDaGVja2VyO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfS8qKlxuICogVGhpcyBtb2R1bGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGB0cy1pbnRlcmZhY2UtYnVpbGRlcmBcbiAqL1xudmFyIF90c2ludGVyZmFjZWNoZWNrZXIgPSByZXF1aXJlKCd0cy1pbnRlcmZhY2UtY2hlY2tlcicpOyB2YXIgdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF90c2ludGVyZmFjZWNoZWNrZXIpO1xuLy8gdHNsaW50OmRpc2FibGU6b2JqZWN0LWxpdGVyYWwta2V5LXF1b3Rlc1xuXG4gY29uc3QgVHJhbnNmb3JtID0gdC51bmlvbihcbiAgdC5saXQoXCJqc3hcIiksXG4gIHQubGl0KFwidHlwZXNjcmlwdFwiKSxcbiAgdC5saXQoXCJmbG93XCIpLFxuICB0LmxpdChcImltcG9ydHNcIiksXG4gIHQubGl0KFwicmVhY3QtaG90LWxvYWRlclwiKSxcbiAgdC5saXQoXCJqZXN0XCIpLFxuKTsgZXhwb3J0cy5UcmFuc2Zvcm0gPSBUcmFuc2Zvcm07XG5cbiBjb25zdCBTb3VyY2VNYXBPcHRpb25zID0gdC5pZmFjZShbXSwge1xuICBjb21waWxlZEZpbGVuYW1lOiBcInN0cmluZ1wiLFxufSk7IGV4cG9ydHMuU291cmNlTWFwT3B0aW9ucyA9IFNvdXJjZU1hcE9wdGlvbnM7XG5cbiBjb25zdCBPcHRpb25zID0gdC5pZmFjZShbXSwge1xuICB0cmFuc2Zvcm1zOiB0LmFycmF5KFwiVHJhbnNmb3JtXCIpLFxuICBkaXNhYmxlRVNUcmFuc2Zvcm1zOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGpzeFJ1bnRpbWU6IHQub3B0KHQudW5pb24odC5saXQoXCJjbGFzc2ljXCIpLCB0LmxpdChcImF1dG9tYXRpY1wiKSwgdC5saXQoXCJwcmVzZXJ2ZVwiKSkpLFxuICBwcm9kdWN0aW9uOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGpzeEltcG9ydFNvdXJjZTogdC5vcHQoXCJzdHJpbmdcIiksXG4gIGpzeFByYWdtYTogdC5vcHQoXCJzdHJpbmdcIiksXG4gIGpzeEZyYWdtZW50UHJhZ21hOiB0Lm9wdChcInN0cmluZ1wiKSxcbiAga2VlcFVudXNlZEltcG9ydHM6IHQub3B0KFwiYm9vbGVhblwiKSxcbiAgcHJlc2VydmVEeW5hbWljSW1wb3J0OiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGluamVjdENyZWF0ZVJlcXVpcmVGb3JJbXBvcnRSZXF1aXJlOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wOiB0Lm9wdChcImJvb2xlYW5cIiksXG4gIGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3A6IHQub3B0KFwiYm9vbGVhblwiKSxcbiAgc291cmNlTWFwT3B0aW9uczogdC5vcHQoXCJTb3VyY2VNYXBPcHRpb25zXCIpLFxuICBmaWxlUGF0aDogdC5vcHQoXCJzdHJpbmdcIiksXG59KTsgZXhwb3J0cy5PcHRpb25zID0gT3B0aW9ucztcblxuY29uc3QgZXhwb3J0ZWRUeXBlU3VpdGUgPSB7XG4gIFRyYW5zZm9ybTogZXhwb3J0cy5UcmFuc2Zvcm0sXG4gIFNvdXJjZU1hcE9wdGlvbnM6IGV4cG9ydHMuU291cmNlTWFwT3B0aW9ucyxcbiAgT3B0aW9uczogZXhwb3J0cy5PcHRpb25zLFxufTtcbmV4cG9ydHMuIGRlZmF1bHQgPSBleHBvcnRlZFR5cGVTdWl0ZTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfXZhciBfdHNpbnRlcmZhY2VjaGVja2VyID0gcmVxdWlyZSgndHMtaW50ZXJmYWNlLWNoZWNrZXInKTtcblxudmFyIF9PcHRpb25zZ2VudHlwZXMgPSByZXF1aXJlKCcuL09wdGlvbnMtZ2VuLXR5cGVzJyk7IHZhciBfT3B0aW9uc2dlbnR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX09wdGlvbnNnZW50eXBlcyk7XG5cbmNvbnN0IHtPcHRpb25zOiBPcHRpb25zQ2hlY2tlcn0gPSBfdHNpbnRlcmZhY2VjaGVja2VyLmNyZWF0ZUNoZWNrZXJzLmNhbGwodm9pZCAwLCBfT3B0aW9uc2dlbnR5cGVzMi5kZWZhdWx0KTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiBmdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucykge1xuICBPcHRpb25zQ2hlY2tlci5zdHJpY3RDaGVjayhvcHRpb25zKTtcbn0gZXhwb3J0cy52YWxpZGF0ZU9wdGlvbnMgPSB2YWxpZGF0ZU9wdGlvbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX2Zsb3cgPSByZXF1aXJlKCcuLi9wbHVnaW5zL2Zsb3cnKTtcbnZhciBfdHlwZXNjcmlwdCA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvdHlwZXNjcmlwdCcpO1xuXG5cblxuXG5cblxuXG52YXIgX2luZGV4ID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL2luZGV4Jyk7XG52YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL3R5cGVzJyk7XG52YXIgX2Jhc2UgPSByZXF1aXJlKCcuL2Jhc2UnKTtcbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4vZXhwcmVzc2lvbicpO1xudmFyIF91dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiBmdW5jdGlvbiBwYXJzZVNwcmVhZCgpIHtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIF9leHByZXNzaW9uLnBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIGZhbHNlKTtcbn0gZXhwb3J0cy5wYXJzZVNwcmVhZCA9IHBhcnNlU3ByZWFkO1xuXG4gZnVuY3Rpb24gcGFyc2VSZXN0KGlzQmxvY2tTY29wZSkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgcGFyc2VCaW5kaW5nQXRvbShpc0Jsb2NrU2NvcGUpO1xufSBleHBvcnRzLnBhcnNlUmVzdCA9IHBhcnNlUmVzdDtcblxuIGZ1bmN0aW9uIHBhcnNlQmluZGluZ0lkZW50aWZpZXIoaXNCbG9ja1Njb3BlKSB7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgbWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXIoaXNCbG9ja1Njb3BlKTtcbn0gZXhwb3J0cy5wYXJzZUJpbmRpbmdJZGVudGlmaWVyID0gcGFyc2VCaW5kaW5nSWRlbnRpZmllcjtcblxuIGZ1bmN0aW9uIHBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyKCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb247XG59IGV4cG9ydHMucGFyc2VJbXBvcnRlZElkZW50aWZpZXIgPSBwYXJzZUltcG9ydGVkSWRlbnRpZmllcjtcblxuIGZ1bmN0aW9uIG1hcmtQcmlvckJpbmRpbmdJZGVudGlmaWVyKGlzQmxvY2tTY29wZSkge1xuICBsZXQgaWRlbnRpZmllclJvbGU7XG4gIGlmIChfYmFzZS5zdGF0ZS5zY29wZURlcHRoID09PSAwKSB7XG4gICAgaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuVG9wTGV2ZWxEZWNsYXJhdGlvbjtcbiAgfSBlbHNlIGlmIChpc0Jsb2NrU2NvcGUpIHtcbiAgICBpZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5CbG9ja1Njb3BlZERlY2xhcmF0aW9uO1xuICB9IGVsc2Uge1xuICAgIGlkZW50aWZpZXJSb2xlID0gX2luZGV4LklkZW50aWZpZXJSb2xlLkZ1bmN0aW9uU2NvcGVkRGVjbGFyYXRpb247XG4gIH1cbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IGlkZW50aWZpZXJSb2xlO1xufSBleHBvcnRzLm1hcmtQcmlvckJpbmRpbmdJZGVudGlmaWVyID0gbWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXI7XG5cbi8vIFBhcnNlcyBsdmFsdWUgKGFzc2lnbmFibGUpIGF0b20uXG4gZnVuY3Rpb24gcGFyc2VCaW5kaW5nQXRvbShpc0Jsb2NrU2NvcGUpIHtcbiAgc3dpdGNoIChfYmFzZS5zdGF0ZS50eXBlKSB7XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90aGlzOiB7XG4gICAgICAvLyBJbiBUeXBlU2NyaXB0LCBcInRoaXNcIiBtYXkgYmUgdGhlIG5hbWUgb2YgYSBwYXJhbWV0ZXIsIHNvIGFsbG93IGl0LlxuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMCk7XG4gICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3lpZWxkOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5uYW1lOiB7XG4gICAgICBfYmFzZS5zdGF0ZS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5uYW1lO1xuICAgICAgcGFyc2VCaW5kaW5nSWRlbnRpZmllcihpc0Jsb2NrU2NvcGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TDoge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBwYXJzZUJpbmRpbmdMaXN0KF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIsIGlzQmxvY2tTY29wZSwgdHJ1ZSAvKiBhbGxvd0VtcHR5ICovKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMOlxuICAgICAgX2V4cHJlc3Npb24ucGFyc2VPYmouY2FsbCh2b2lkIDAsIHRydWUsIGlzQmxvY2tTY29wZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufSBleHBvcnRzLnBhcnNlQmluZGluZ0F0b20gPSBwYXJzZUJpbmRpbmdBdG9tO1xuXG4gZnVuY3Rpb24gcGFyc2VCaW5kaW5nTGlzdChcbiAgY2xvc2UsXG4gIGlzQmxvY2tTY29wZSxcbiAgYWxsb3dFbXB0eSA9IGZhbHNlLFxuICBhbGxvd01vZGlmaWVycyA9IGZhbHNlLFxuICBjb250ZXh0SWQgPSAwLFxuKSB7XG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgbGV0IGhhc1JlbW92ZWRDb21tYSA9IGZhbHNlO1xuICBjb25zdCBmaXJzdEl0ZW1Ub2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcblxuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIGNsb3NlKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNvbnRleHRJZDtcbiAgICAgIC8vIEFmdGVyIGEgXCJ0aGlzXCIgdHlwZSBpbiBUeXBlU2NyaXB0LCB3ZSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nIGNvbW1hIChpZiBhbnkpIHRvIGFsc28gYmVcbiAgICAgIC8vIGEgdHlwZSB0b2tlbiBzbyB0aGF0IGl0IHdpbGwgYmUgcmVtb3ZlZC5cbiAgICAgIGlmICghaGFzUmVtb3ZlZENvbW1hICYmIF9iYXNlLnN0YXRlLnRva2Vuc1tmaXJzdEl0ZW1Ub2tlbkluZGV4XS5pc1R5cGUpIHtcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICAgICAgICBoYXNSZW1vdmVkQ29tbWEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsb3dFbXB0eSAmJiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAvLyBFbXB0eSBpdGVtOyBub3RoaW5nIGZ1cnRoZXIgdG8gcGFyc2UgZm9yIHRoaXMgaXRlbS5cbiAgICB9IGVsc2UgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIGNsb3NlKSkge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgICBwYXJzZVJlc3QoaXNCbG9ja1Njb3BlKTtcbiAgICAgIHBhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKTtcbiAgICAgIC8vIFN1cHBvcnQgcmVzdCBlbGVtZW50IHRyYWlsaW5nIGNvbW1hcyBhbGxvd2VkIGJ5IFR5cGVTY3JpcHQgPDIuOS5cbiAgICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBjbG9zZSk7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW0oYWxsb3dNb2RpZmllcnMsIGlzQmxvY2tTY29wZSk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMucGFyc2VCaW5kaW5nTGlzdCA9IHBhcnNlQmluZGluZ0xpc3Q7XG5cbmZ1bmN0aW9uIHBhcnNlQXNzaWduYWJsZUxpc3RJdGVtKGFsbG93TW9kaWZpZXJzLCBpc0Jsb2NrU2NvcGUpIHtcbiAgaWYgKGFsbG93TW9kaWZpZXJzKSB7XG4gICAgX3R5cGVzY3JpcHQudHNQYXJzZU1vZGlmaWVycy5jYWxsKHZvaWQgMCwgW1xuICAgICAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWMsXG4gICAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3Byb3RlY3RlZCxcbiAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSxcbiAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHksXG4gICAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlLFxuICAgIF0pO1xuICB9XG5cbiAgcGFyc2VNYXliZURlZmF1bHQoaXNCbG9ja1Njb3BlKTtcbiAgcGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcygpO1xuICBwYXJzZU1heWJlRGVmYXVsdChpc0Jsb2NrU2NvcGUsIHRydWUgLyogbGVmdEFscmVhZHlQYXJzZWQgKi8pO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzKCkge1xuICBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF9mbG93LmZsb3dQYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuLy8gUGFyc2VzIGFzc2lnbm1lbnQgcGF0dGVybiBhcm91bmQgZ2l2ZW4gYXRvbSBpZiBwb3NzaWJsZS5cbiBmdW5jdGlvbiBwYXJzZU1heWJlRGVmYXVsdChpc0Jsb2NrU2NvcGUsIGxlZnRBbHJlYWR5UGFyc2VkID0gZmFsc2UpIHtcbiAgaWYgKCFsZWZ0QWxyZWFkeVBhcnNlZCkge1xuICAgIHBhcnNlQmluZGluZ0F0b20oaXNCbG9ja1Njb3BlKTtcbiAgfVxuICBpZiAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVxSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgX2V4cHJlc3Npb24ucGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW2VxSW5kZXhdLnJoc0VuZEluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbn0gZXhwb3J0cy5wYXJzZU1heWJlRGVmYXVsdCA9IHBhcnNlTWF5YmVEZWZhdWx0O1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7XG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIF9pbmRleCA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9pbmRleCcpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9rZXl3b3JkcycpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci90eXBlcycpO1xudmFyIF9iYXNlID0gcmVxdWlyZSgnLi4vdHJhdmVyc2VyL2Jhc2UnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9leHByZXNzaW9uJyk7XG52YXIgX2x2YWwgPSByZXF1aXJlKCcuLi90cmF2ZXJzZXIvbHZhbCcpO1xuXG5cblxuXG5cblxuXG5cbnZhciBfc3RhdGVtZW50ID0gcmVxdWlyZSgnLi4vdHJhdmVyc2VyL3N0YXRlbWVudCcpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci91dGlsJyk7XG52YXIgX2pzeCA9IHJlcXVpcmUoJy4vanN4Jyk7XG5cbmZ1bmN0aW9uIHRzSXNJZGVudGlmaWVyKCkge1xuICAvLyBUT0RPOiBhY3R1YWxseSBhIGJpdCBtb3JlIGNvbXBsZXggaW4gVHlwZVNjcmlwdCwgYnV0IHNob3VsZG4ndCBtYXR0ZXIuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE1MDA4XG4gIHJldHVybiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzTGl0ZXJhbFByb3BlcnR5TmFtZSgpIHtcbiAgcmV0dXJuIChcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgfHxcbiAgICBCb29sZWFuKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMuVG9rZW5UeXBlLklTX0tFWVdPUkQpIHx8XG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykgfHxcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubnVtKSB8fFxuICAgIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iaWdpbnQpIHx8XG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmRlY2ltYWwpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRzTmV4dFRva2VuQ2FuRm9sbG93TW9kaWZpZXIoKSB7XG4gIC8vIE5vdGU6IFR5cGVTY3JpcHQncyBpbXBsZW1lbnRhdGlvbiBpcyBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZVxuICAvLyBtb3JlIHRoaW5ncyBhcmUgY29uc2lkZXJlZCBtb2RpZmllcnMgdGhlcmUuXG4gIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBoYW5kbGVzIG1vZGlmaWVycyBub3QgaGFuZGxlZCBieSBiYWJ5bG9uIGl0c2VsZi4gQW5kIFwic3RhdGljXCIuXG4gIC8vIFRPRE86IFdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgbG9va2FoZWFkLiBXYW50IGEgaGFzTGluZUJyZWFrVXBOZXh0KCkgbWV0aG9kLi4uXG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcblxuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgY29uc3QgY2FuRm9sbG93TW9kaWZpZXIgPVxuICAgIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fFxuICAgICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuaGFzaCkgfHxcbiAgICAgIGlzTGl0ZXJhbFByb3BlcnR5TmFtZSgpKSAmJlxuICAgICFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICk7XG5cbiAgaWYgKGNhbkZvbGxvd01vZGlmaWVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbiBmdW5jdGlvbiB0c1BhcnNlTW9kaWZpZXJzKGFsbG93ZWRNb2RpZmllcnMpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBtb2RpZmllciA9IHRzUGFyc2VNb2RpZmllcihhbGxvd2VkTW9kaWZpZXJzKTtcbiAgICBpZiAobW9kaWZpZXIgPT09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufSBleHBvcnRzLnRzUGFyc2VNb2RpZmllcnMgPSB0c1BhcnNlTW9kaWZpZXJzO1xuXG4vKiogUGFyc2VzIGEgbW9kaWZpZXIgbWF0Y2hpbmcgb25lIHRoZSBnaXZlbiBtb2RpZmllciBuYW1lcy4gKi9cbiBmdW5jdGlvbiB0c1BhcnNlTW9kaWZpZXIoXG4gIGFsbG93ZWRNb2RpZmllcnMsXG4pIHtcbiAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVyID0gX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQ7XG4gIGlmIChhbGxvd2VkTW9kaWZpZXJzLmluZGV4T2YobW9kaWZpZXIpICE9PSAtMSAmJiB0c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyKCkpIHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHk6XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX3JlYWRvbmx5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3Q7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYzpcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fc3RhdGljO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWM6XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX3B1YmxpYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZTpcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fcHJpdmF0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJvdGVjdGVkOlxuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9wcm90ZWN0ZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlOlxuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9vdmVycmlkZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZTpcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fZGVjbGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVyO1xuICB9XG4gIHJldHVybiBudWxsO1xufSBleHBvcnRzLnRzUGFyc2VNb2RpZmllciA9IHRzUGFyc2VNb2RpZmllcjtcblxuZnVuY3Rpb24gdHNQYXJzZUVudGl0eU5hbWUoKSB7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgd2hpbGUgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVJlZmVyZW5jZSgpIHtcbiAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgaWYgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlQXJndW1lbnRzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZVRoaXNUeXBlUHJlZGljYXRlKCkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgdHNQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUaGlzVHlwZU5vZGUoKSB7XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVF1ZXJ5KCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX3R5cGVvZik7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCkpIHtcbiAgICB0c1BhcnNlSW1wb3J0VHlwZSgpO1xuICB9IGVsc2Uge1xuICAgIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIH1cbiAgaWYgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlQXJndW1lbnRzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUltcG9ydFR5cGUoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0KTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIH1cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUeXBlUGFyYW1ldGVyKCkge1xuICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdCk7XG4gIGNvbnN0IGhhZEluID0gX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5faW4pO1xuICBjb25zdCBoYWRPdXQgPSBfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX291dCk7XG4gIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0KTtcbiAgaWYgKChoYWRJbiB8fCBoYWRPdXQpICYmICFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAvLyBUaGUgXCJpblwiIG9yIFwib3V0XCIga2V5d29yZCBtdXN0IGhhdmUgYWN0dWFsbHkgYmVlbiB0aGUgdHlwZSBwYXJhbWV0ZXJcbiAgICAvLyBuYW1lLCBzbyBzZXQgaXQgYXMgdGhlIG5hbWUuXG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5uYW1lO1xuICB9IGVsc2Uge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuXG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzKSkge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgdHNQYXJzZVR5cGUoKTtcbiAgfVxufVxuXG4gZnVuY3Rpb24gdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHRzUGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICB9XG59IGV4cG9ydHMudHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzID0gdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzO1xuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVBhcmFtZXRlcnMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUudHlwZVBhcmFtZXRlclN0YXJ0KSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cblxuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIHRzUGFyc2VUeXBlUGFyYW1ldGVyKCk7XG4gICAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gIH1cbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufVxuXG4vLyBOb3RlOiBJbiBUeXBlU2NyaXB0IGltcGxlbWVudGF0aW9uIHdlIG11c3QgcHJvdmlkZSBgeWllbGRDb250ZXh0YCBhbmQgYGF3YWl0Q29udGV4dGAsXG4vLyBidXQgaGVyZSBpdCdzIGFsd2F5cyBmYWxzZSwgYmVjYXVzZSB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgdHlwZXMuXG5mdW5jdGlvbiB0c0ZpbGxTaWduYXR1cmUocmV0dXJuVG9rZW4pIHtcbiAgLy8gQXJyb3cgZm5zICptdXN0KiBoYXZlIHJldHVybiB0b2tlbiAoYD0+YCkuIE5vcm1hbCBmdW5jdGlvbnMgY2FuIG9taXQgaXQuXG4gIGNvbnN0IHJldHVyblRva2VuUmVxdWlyZWQgPSByZXR1cm5Ub2tlbiA9PT0gX3R5cGVzLlRva2VuVHlwZS5hcnJvdztcbiAgdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAvLyBDcmVhdGUgYSBzY29wZSBldmVuIHRob3VnaCB3ZSdyZSBkb2luZyB0eXBlIHBhcnNpbmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5XG4gIC8vIHRyZWF0IHBhcmFtcyBhcyB0b3AtbGV2ZWwgYmluZGluZ3MuXG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgdHNQYXJzZUJpbmRpbmdMaXN0Rm9yU2lnbmF0dXJlKGZhbHNlIC8qIGlzQmxvY2tTY29wZSAqLyk7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgtLTtcbiAgaWYgKHJldHVyblRva2VuUmVxdWlyZWQpIHtcbiAgICB0c1BhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24ocmV0dXJuVG9rZW4pO1xuICB9IGVsc2UgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgcmV0dXJuVG9rZW4pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKHJldHVyblRva2VuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlQmluZGluZ0xpc3RGb3JTaWduYXR1cmUoaXNCbG9ja1Njb3BlKSB7XG4gIF9sdmFsLnBhcnNlQmluZGluZ0xpc3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SLCBpc0Jsb2NrU2NvcGUpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpIHtcbiAgaWYgKCFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCkge1xuICB0c0ZpbGxTaWduYXR1cmUoX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gIHRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCk7XG59XG5cbmZ1bmN0aW9uIHRzSXNVbmFtYmlndW91c2x5SW5kZXhTaWduYXR1cmUoKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7IC8vIFNraXAgJ3snXG4gIGNvbnN0IGlzSW5kZXhTaWduYXR1cmUgPSBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gaXNJbmRleFNpZ25hdHVyZTtcbn1cblxuZnVuY3Rpb24gdHNUcnlQYXJzZUluZGV4U2lnbmF0dXJlKCkge1xuICBpZiAoIShfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpICYmIHRzSXNVbmFtYmlndW91c2x5SW5kZXhTaWduYXR1cmUoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcblxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpO1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIHRzUGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIpO1xuXG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpO1xuXG4gIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VQcm9wZXJ0eU9yTWV0aG9kU2lnbmF0dXJlKGlzUmVhZG9ubHkpIHtcbiAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbik7XG5cbiAgaWYgKCFpc1JlYWRvbmx5ICYmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSkge1xuICAgIHRzRmlsbFNpZ25hdHVyZShfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgICB0c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpO1xuICB9IGVsc2Uge1xuICAgIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICAgIHRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZVR5cGVNZW1iZXIoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgLy8gY2FsbCBzaWduYXR1cmVcbiAgICB0c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX25ldykpIHtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgICAgLy8gY29uc3RydWN0b3Igc2lnbmF0dXJlXG4gICAgICB0c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRzUGFyc2VQcm9wZXJ0eU9yTWV0aG9kU2lnbmF0dXJlKGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlYWRvbmx5ID0gISF0c1BhcnNlTW9kaWZpZXIoW19rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHldKTtcblxuICBjb25zdCBmb3VuZCA9IHRzVHJ5UGFyc2VJbmRleFNpZ25hdHVyZSgpO1xuICBpZiAoZm91bmQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKFxuICAgIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZ2V0KSB8fCBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc2V0KSkgJiZcbiAgICB0c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyKClcbiAgKSB7XG4gICAgLy8gVGhpcyBpcyBhIGdldHRlci9zZXR0ZXIgb24gYSB0eXBlLiBUaGUgdHNOZXh0VG9rZW5DYW5Gb2xsb3dNb2RpZmllclxuICAgIC8vIGZ1bmN0aW9uIGFscmVhZHkgY2FsbGVkIG5leHQoKSBmb3IgdXMsIHNvIGNvbnRpbnVlIHBhcnNpbmcgdGhlIG5hbWUuXG4gIH1cbiAgX2V4cHJlc3Npb24ucGFyc2VQcm9wZXJ0eU5hbWUuY2FsbCh2b2lkIDAsIC0xIC8qIFR5cGVzIGRvbid0IG5lZWQgY29udGV4dCBJRHMuICovKTtcbiAgdHNQYXJzZVByb3BlcnR5T3JNZXRob2RTaWduYXR1cmUocmVhZG9ubHkpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZUxpdGVyYWwoKSB7XG4gIHRzUGFyc2VPYmplY3RUeXBlTWVtYmVycygpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlT2JqZWN0VHlwZU1lbWJlcnMoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZU1lbWJlcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzTG9va2FoZWFkSXNTdGFydE9mTWFwcGVkVHlwZSgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICBjb25zdCBpc1N0YXJ0T2ZNYXBwZWRUeXBlID0gdHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCk7XG4gIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICByZXR1cm4gaXNTdGFydE9mTWFwcGVkVHlwZTtcbn1cblxuZnVuY3Rpb24gdHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGx1cykgfHwgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5taW51cykpIHtcbiAgICByZXR1cm4gX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5KTtcbiAgfVxuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5KSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG4gIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKCF0c0lzSWRlbnRpZmllcigpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICByZXR1cm4gX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9pbik7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNYXBwZWRUeXBlUGFyYW1ldGVyKCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5faW4pO1xuICB0c1BhcnNlVHlwZSgpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlTWFwcGVkVHlwZSgpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGx1cykgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm1pbnVzKSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHkpO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcmVhZG9ubHkpO1xuICB9XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCk7XG4gIHRzUGFyc2VNYXBwZWRUeXBlUGFyYW1ldGVyKCk7XG4gIGlmIChfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wbHVzKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubWludXMpKSB7XG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgfVxuICB0c1RyeVBhcnNlVHlwZSgpO1xuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHVwbGVUeXBlKCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpO1xuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIC8vIERvIG5vdCB2YWxpZGF0ZSBwcmVzZW5jZSBvZiBlaXRoZXIgbm9uZSBvciBvbmx5IGxhYmVsZWQgZWxlbWVudHNcbiAgICB0c1BhcnNlVHVwbGVFbGVtZW50VHlwZSgpO1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUdXBsZUVsZW1lbnRUeXBlKCkge1xuICAvLyBwYXJzZXMgYC4uLlRzVHlwZVtdYFxuICBpZiAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcykpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIHBhcnNlcyBgVHNUeXBlP2BcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pO1xuICB9XG5cbiAgLy8gVGhlIHR5cGUgd2UgcGFyc2VkIGFib3ZlIHdhcyBhY3R1YWxseSBhIGxhYmVsXG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgIC8vIExhYmVsZWQgdHVwbGUgdHlwZXMgbXVzdCBhZmZpeCB0aGUgbGFiZWwgd2l0aCBgLi4uYCBvciBgP2AsIHNvIG5vIG5lZWQgdG8gaGFuZGxlIHRob3NlIGhlcmVcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VQYXJlbnRoZXNpemVkVHlwZSgpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gIHRzUGFyc2VUeXBlKCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVGVtcGxhdGVMaXRlcmFsVHlwZSgpIHtcbiAgLy8gRmluaXNoIGAsIHJlYWQgcXVhc2lcbiAgX2luZGV4Lm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICAvLyBGaW5pc2ggcXVhc2ksIHJlYWQgJHtcbiAgX2luZGV4Lm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iYWNrUXVvdGUpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5kb2xsYXJCcmFjZUwpO1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gICAgLy8gRmluaXNoIH0sIHJlYWQgcXVhc2lcbiAgICBfaW5kZXgubmV4dFRlbXBsYXRlVG9rZW4uY2FsbCh2b2lkIDAsICk7XG4gICAgLy8gRmluaXNoIHF1YXNpLCByZWFkIGVpdGhlciAkeyBvciBgXG4gICAgX2luZGV4Lm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICB9XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xufVxuXG52YXIgRnVuY3Rpb25UeXBlOyAoZnVuY3Rpb24gKEZ1bmN0aW9uVHlwZSkge1xuICBjb25zdCBUU0Z1bmN0aW9uVHlwZSA9IDA7IEZ1bmN0aW9uVHlwZVtGdW5jdGlvblR5cGVbXCJUU0Z1bmN0aW9uVHlwZVwiXSA9IFRTRnVuY3Rpb25UeXBlXSA9IFwiVFNGdW5jdGlvblR5cGVcIjtcbiAgY29uc3QgVFNDb25zdHJ1Y3RvclR5cGUgPSBUU0Z1bmN0aW9uVHlwZSArIDE7IEZ1bmN0aW9uVHlwZVtGdW5jdGlvblR5cGVbXCJUU0NvbnN0cnVjdG9yVHlwZVwiXSA9IFRTQ29uc3RydWN0b3JUeXBlXSA9IFwiVFNDb25zdHJ1Y3RvclR5cGVcIjtcbiAgY29uc3QgVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZSA9IFRTQ29uc3RydWN0b3JUeXBlICsgMTsgRnVuY3Rpb25UeXBlW0Z1bmN0aW9uVHlwZVtcIlRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGVcIl0gPSBUU0Fic3RyYWN0Q29uc3RydWN0b3JUeXBlXSA9IFwiVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZVwiO1xufSkoRnVuY3Rpb25UeXBlIHx8IChGdW5jdGlvblR5cGUgPSB7fSkpO1xuXG5mdW5jdGlvbiB0c1BhcnNlRnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlID09PSBGdW5jdGlvblR5cGUuVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZSkge1xuICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3QpO1xuICB9XG4gIGlmICh0eXBlID09PSBGdW5jdGlvblR5cGUuVFNDb25zdHJ1Y3RvclR5cGUgfHwgdHlwZSA9PT0gRnVuY3Rpb25UeXBlLlRTQWJzdHJhY3RDb25zdHJ1Y3RvclR5cGUpIHtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX25ldyk7XG4gIH1cbiAgY29uc3Qgb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBmYWxzZTtcbiAgdHNGaWxsU2lnbmF0dXJlKF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpO1xuICBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VOb25BcnJheVR5cGUoKSB7XG4gIHN3aXRjaCAoX2Jhc2Uuc3RhdGUudHlwZSkge1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5uYW1lOlxuICAgICAgdHNQYXJzZVR5cGVSZWZlcmVuY2UoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3ZvaWQ6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9udWxsOlxuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZzpcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUubnVtOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5iaWdpbnQ6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmRlY2ltYWw6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90cnVlOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fZmFsc2U6XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZUxpdGVyYWwuY2FsbCh2b2lkIDAsICk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZUxpdGVyYWwuY2FsbCh2b2lkIDAsICk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90aGlzOiB7XG4gICAgICB0c1BhcnNlVGhpc1R5cGVOb2RlKCk7XG4gICAgICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2lzKSAmJiAhX3V0aWwuaGFzUHJlY2VkaW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApKSB7XG4gICAgICAgIHRzUGFyc2VUaGlzVHlwZVByZWRpY2F0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3R5cGVvZjpcbiAgICAgIHRzUGFyc2VUeXBlUXVlcnkoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydDpcbiAgICAgIHRzUGFyc2VJbXBvcnRUeXBlKCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTDpcbiAgICAgIGlmICh0c0xvb2thaGVhZElzU3RhcnRPZk1hcHBlZFR5cGUoKSkge1xuICAgICAgICB0c1BhcnNlTWFwcGVkVHlwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHNQYXJzZVR5cGVMaXRlcmFsKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMOlxuICAgICAgdHNQYXJzZVR1cGxlVHlwZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkw6XG4gICAgICB0c1BhcnNlUGFyZW50aGVzaXplZFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYmFja1F1b3RlOlxuICAgICAgdHNQYXJzZVRlbXBsYXRlTGl0ZXJhbFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMuVG9rZW5UeXBlLklTX0tFWVdPUkQpIHtcbiAgICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUubmFtZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cblxuICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlQXJyYXlUeXBlT3JIaWdoZXIoKSB7XG4gIHRzUGFyc2VOb25BcnJheVR5cGUoKTtcbiAgd2hpbGUgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCkpIHtcbiAgICBpZiAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIpKSB7XG4gICAgICAvLyBJZiB3ZSBoaXQgXSBpbW1lZGlhdGVseSwgdGhpcyBpcyBhbiBhcnJheSB0eXBlLCBvdGhlcndpc2UgaXQncyBhbiBpbmRleGVkIGFjY2VzcyB0eXBlLlxuICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbmZlclR5cGUoKSB7XG4gIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW5mZXIpO1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4dGVuZHMpKSB7XG4gICAgLy8gSW5mZXIgdHlwZSBjb25zdHJhaW50cyBpbnRyb2R1Y2UgYW4gYW1iaWd1aXR5IGFib3V0IHdoZXRoZXIgdGhlIFwiZXh0ZW5kc1wiXG4gICAgLy8gaXMgYSBjb25zdHJhaW50IGZvciB0aGlzIGluZmVyIHR5cGUgb3IgaXMgYW5vdGhlciBjb25kaXRpb25hbCB0eXBlLlxuICAgIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4dGVuZHMpO1xuICAgIGNvbnN0IG9sZEluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IF9iYXNlLnN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dDtcbiAgICBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSB0cnVlO1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gICAgX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvciB8fCAoIV9iYXNlLnN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCAmJiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pKSkge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpIHtcbiAgaWYgKFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9rZXlvZikgfHxcbiAgICBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdW5pcXVlKSB8fFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9yZWFkb25seSlcbiAgKSB7XG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgdHNQYXJzZVR5cGVPcGVyYXRvck9ySGlnaGVyKCk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2luZmVyKSkge1xuICAgIHRzUGFyc2VJbmZlclR5cGUoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBvbGRJbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQ7XG4gICAgX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gZmFsc2U7XG4gICAgdHNQYXJzZUFycmF5VHlwZU9ySGlnaGVyKCk7XG4gICAgX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbnRlcnNlY3Rpb25UeXBlT3JIaWdoZXIoKSB7XG4gIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYml0d2lzZUFORCk7XG4gIHRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VBTkQpKSB7XG4gICAgd2hpbGUgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYml0d2lzZUFORCkpIHtcbiAgICAgIHRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlVW5pb25UeXBlT3JIaWdoZXIoKSB7XG4gIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYml0d2lzZU9SKTtcbiAgdHNQYXJzZUludGVyc2VjdGlvblR5cGVPckhpZ2hlcigpO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VPUikpIHtcbiAgICB3aGlsZSAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iaXR3aXNlT1IpKSB7XG4gICAgICB0c1BhcnNlSW50ZXJzZWN0aW9uVHlwZU9ySGlnaGVyKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRzSXNTdGFydE9mRnVuY3Rpb25UeXBlKCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSAmJiB0c0xvb2thaGVhZElzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUoKTtcbn1cblxuZnVuY3Rpb24gdHNTa2lwUGFyYW1ldGVyU3RhcnQoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl90aGlzKSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElmIHRoaXMgaXMgYSBwb3NzaWJsZSBhcnJheS9vYmplY3QgZGVzdHJ1Y3R1cmUsIHdhbGsgdG8gdGhlIG1hdGNoaW5nIGJyYWNrZXQvYnJhY2UuXG4gIC8vIFRoZSBuZXh0IHRva2VuIGFmdGVyIHdpbGwgdGVsbCB1cyBkZWZpbml0aXZlbHkgd2hldGhlciB0aGlzIGlzIGEgZnVuY3Rpb24gcGFyYW0uXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpKSB7XG4gICAgbGV0IGRlcHRoID0gMTtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICB3aGlsZSAoZGVwdGggPiAwICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCkpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH0gZWxzZSBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKSkge1xuICAgICAgICBkZXB0aC0tO1xuICAgICAgfVxuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHNMb29rYWhlYWRJc1VuYW1iaWd1b3VzbHlTdGFydE9mRnVuY3Rpb25UeXBlKCkge1xuICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gIGNvbnN0IGlzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUgPSB0c0lzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUoKTtcbiAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gIHJldHVybiBpc1VuYW1iaWd1b3VzbHlTdGFydE9mRnVuY3Rpb25UeXBlO1xufVxuXG5mdW5jdGlvbiB0c0lzVW5hbWJpZ3VvdXNseVN0YXJ0T2ZGdW5jdGlvblR5cGUoKSB7XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUikgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKSkge1xuICAgIC8vICggKVxuICAgIC8vICggLi4uXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHRzU2tpcFBhcmFtZXRlclN0YXJ0KCkpIHtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbikgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgLy8gKCB4eHggOlxuICAgICAgLy8gKCB4eHggLFxuICAgICAgLy8gKCB4eHggP1xuICAgICAgLy8gKCB4eHggPVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmFycm93KSkge1xuICAgICAgICAvLyAoIHh4eCApID0+XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbihyZXR1cm5Ub2tlbikge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCByZXR1cm5Ub2tlbik7XG4gIGNvbnN0IGZpbmlzaGVkUmV0dXJuID0gdHNQYXJzZVR5cGVQcmVkaWNhdGVPckFzc2VydHNQcmVmaXgoKTtcbiAgaWYgKCFmaW5pc2hlZFJldHVybikge1xuICAgIHRzUGFyc2VUeXBlKCk7XG4gIH1cbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiB0c1RyeVBhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKF90eXBlcy5Ub2tlblR5cGUuY29sb24pO1xuICB9XG59XG5cbiBmdW5jdGlvbiB0c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgdHNQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIH1cbn0gZXhwb3J0cy50c1RyeVBhcnNlVHlwZUFubm90YXRpb24gPSB0c1RyeVBhcnNlVHlwZUFubm90YXRpb247XG5cbmZ1bmN0aW9uIHRzVHJ5UGFyc2VUeXBlKCkge1xuICBpZiAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IGEgZmV3IHNwZWNpYWwgcmV0dXJuIHN5bnRheCBjYXNlczogYHggaXMgVGAsIGBhc3NlcnRzIHhgLCBgYXNzZXJ0cyB4IGlzIFRgLFxuICogYGFzc2VydHMgdGhpcyBpcyBUYC5cbiAqXG4gKiBSZXR1cm5zIHRydWUgaWYgd2UgcGFyc2VkIHRoZSByZXR1cm4gdHlwZSwgZmFsc2UgaWYgdGhlcmUncyBzdGlsbCBhIHR5cGUgdG8gYmUgcGFyc2VkLlxuICovXG5mdW5jdGlvbiB0c1BhcnNlVHlwZVByZWRpY2F0ZU9yQXNzZXJ0c1ByZWZpeCgpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Fzc2VydHMpKSB7XG4gICAgLy8gTm9ybWFsbHkgdGhpcyBpcyBgYXNzZXJ0cyB4IGlzIFRgLCBidXQgYXQgdGhpcyBwb2ludCwgaXQgbWlnaHQgYmUgYGFzc2VydHMgaXMgVGAgKGEgdXNlci1cbiAgICAvLyBkZWZpbmVkIHR5cGUgZ3VhcmQgb24gdGhlIGBhc3NlcnRzYCB2YXJpYWJsZSkgb3IganVzdCBhIHR5cGUgY2FsbGVkIGBhc3NlcnRzYC5cbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pcykpIHtcbiAgICAgIC8vIElmIHdlIHNlZSBgYXNzZXJ0cyBpc2AsIHRoZW4gdGhpcyBtdXN0IGJlIG9mIHRoZSBmb3JtIGBhc3NlcnRzIGlzIFRgLCBzaW5jZVxuICAgICAgLy8gYGFzc2VydHMgaXMgaXMgVGAgaXNuJ3QgdmFsaWQuXG4gICAgICB0c1BhcnNlVHlwZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0c0lzSWRlbnRpZmllcigpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fdGhpcykpIHtcbiAgICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgaWYgKF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faXMpKSB7XG4gICAgICAgIC8vIElmIHdlIHNlZSBgaXNgLCB0aGVuIHRoaXMgaXMgYGFzc2VydHMgeCBpcyBUYC4gT3RoZXJ3aXNlLCBpdCdzIGBhc3NlcnRzIHhgLlxuICAgICAgICB0c1BhcnNlVHlwZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlZ3VsYXIgdHlwZSwgc28gYmFpbCBvdXQgYW5kIHN0YXJ0IHR5cGUgcGFyc2luZyBmcm9tIHNjcmF0Y2guXG4gICAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHNJc0lkZW50aWZpZXIoKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX3RoaXMpKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgaWRlbnRpZmllciwgd2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZSBcImlzXCIgYWZ0ZXIgaXQuXG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pcykgJiYgIV91dGlsLmhhc1ByZWNlZGluZ0xpbmVCcmVhay5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICB0c1BhcnNlVHlwZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlZ3VsYXIgdHlwZSwgc28gYmFpbCBvdXQgYW5kIHN0YXJ0IHR5cGUgcGFyc2luZyBmcm9tIHNjcmF0Y2guXG4gICAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4gZnVuY3Rpb24gdHNQYXJzZVR5cGVBbm5vdGF0aW9uKCkge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgdHNQYXJzZVR5cGUoKTtcbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufSBleHBvcnRzLnRzUGFyc2VUeXBlQW5ub3RhdGlvbiA9IHRzUGFyc2VUeXBlQW5ub3RhdGlvbjtcblxuIGZ1bmN0aW9uIHRzUGFyc2VUeXBlKCkge1xuICB0c1BhcnNlTm9uQ29uZGl0aW9uYWxUeXBlKCk7XG4gIGlmIChfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgfHwgX3V0aWwuaGFzUHJlY2VkaW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApIHx8ICFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBleHRlbmRzIHR5cGVcbiAgY29uc3Qgb2xkSW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0ID0gX2Jhc2Uuc3RhdGUuaW5EaXNhbGxvd0NvbmRpdGlvbmFsVHlwZXNDb250ZXh0O1xuICBfYmFzZS5zdGF0ZS5pbkRpc2FsbG93Q29uZGl0aW9uYWxUeXBlc0NvbnRleHQgPSB0cnVlO1xuICB0c1BhcnNlTm9uQ29uZGl0aW9uYWxUeXBlKCk7XG4gIF9iYXNlLnN0YXRlLmluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dCA9IG9sZEluRGlzYWxsb3dDb25kaXRpb25hbFR5cGVzQ29udGV4dDtcblxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pO1xuICAvLyB0cnVlIHR5cGVcbiAgdHNQYXJzZVR5cGUoKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgLy8gZmFsc2UgdHlwZVxuICB0c1BhcnNlVHlwZSgpO1xufSBleHBvcnRzLnRzUGFyc2VUeXBlID0gdHNQYXJzZVR5cGU7XG5cbmZ1bmN0aW9uIGlzQWJzdHJhY3RDb25zdHJ1Y3RvclNpZ25hdHVyZSgpIHtcbiAgcmV0dXJuIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCkgJiYgX2luZGV4Lmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUuX25ldztcbn1cblxuIGZ1bmN0aW9uIHRzUGFyc2VOb25Db25kaXRpb25hbFR5cGUoKSB7XG4gIGlmICh0c0lzU3RhcnRPZkZ1bmN0aW9uVHlwZSgpKSB7XG4gICAgdHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoRnVuY3Rpb25UeXBlLlRTRnVuY3Rpb25UeXBlKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fbmV3KSkge1xuICAgIC8vIEFzIGluIGBuZXcgKCkgPT4gRGF0ZWBcbiAgICB0c1BhcnNlRnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZShGdW5jdGlvblR5cGUuVFNDb25zdHJ1Y3RvclR5cGUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmIChpc0Fic3RyYWN0Q29uc3RydWN0b3JTaWduYXR1cmUoKSkge1xuICAgIC8vIEFzIGluIGBhYnN0cmFjdCBuZXcgKCkgPT4gRGF0ZWBcbiAgICB0c1BhcnNlRnVuY3Rpb25PckNvbnN0cnVjdG9yVHlwZShGdW5jdGlvblR5cGUuVFNBYnN0cmFjdENvbnN0cnVjdG9yVHlwZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRzUGFyc2VVbmlvblR5cGVPckhpZ2hlcigpO1xufSBleHBvcnRzLnRzUGFyc2VOb25Db25kaXRpb25hbFR5cGUgPSB0c1BhcnNlTm9uQ29uZGl0aW9uYWxUeXBlO1xuXG4gZnVuY3Rpb24gdHNQYXJzZVR5cGVBc3NlcnRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICB0c1BhcnNlVHlwZSgpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pO1xuICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIF9leHByZXNzaW9uLnBhcnNlTWF5YmVVbmFyeS5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy50c1BhcnNlVHlwZUFzc2VydGlvbiA9IHRzUGFyc2VUeXBlQXNzZXJ0aW9uO1xuXG4gZnVuY3Rpb24gdHNUcnlQYXJzZUpTWFR5cGVBcmd1bWVudCgpIHtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuanN4VGFnU3RhcnQpKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgd2hpbGUgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgdHNQYXJzZVR5cGUoKTtcbiAgICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICAgIH1cbiAgICAvLyBQcm9jZXNzID4sIGJ1dCB0aGUgb25lIGFmdGVyIG5lZWRzIHRvIGJlIHBhcnNlZCBKU1gtc3R5bGUuXG4gICAgX2pzeC5uZXh0SlNYVGFnVG9rZW4uY2FsbCh2b2lkIDAsICk7XG4gICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICB9XG59IGV4cG9ydHMudHNUcnlQYXJzZUpTWFR5cGVBcmd1bWVudCA9IHRzVHJ5UGFyc2VKU1hUeXBlQXJndW1lbnQ7XG5cbmZ1bmN0aW9uIHRzUGFyc2VIZXJpdGFnZUNsYXVzZSgpIHtcbiAgd2hpbGUgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlRXhwcmVzc2lvbldpdGhUeXBlQXJndW1lbnRzKCk7XG4gICAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUV4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cygpIHtcbiAgLy8gTm90ZTogVFMgdXNlcyBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25PckhpZ2hlcixcbiAgLy8gdGhlbiBoYXMgZ3JhbW1hciBlcnJvcnMgbGF0ZXIgaWYgaXQncyBub3QgYW4gRW50aXR5TmFtZS5cbiAgdHNQYXJzZUVudGl0eU5hbWUoKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbigpIHtcbiAgX2x2YWwucGFyc2VCaW5kaW5nSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgZmFsc2UpO1xuICB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4dGVuZHMpKSB7XG4gICAgdHNQYXJzZUhlcml0YWdlQ2xhdXNlKCk7XG4gIH1cbiAgdHNQYXJzZU9iamVjdFR5cGVNZW1iZXJzKCk7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VUeXBlQWxpYXNEZWNsYXJhdGlvbigpIHtcbiAgX2x2YWwucGFyc2VCaW5kaW5nSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgZmFsc2UpO1xuICB0c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVxKTtcbiAgdHNQYXJzZVR5cGUoKTtcbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlRW51bU1lbWJlcigpIHtcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydHkgbmFtZXMgYXJlIGdyYW1tYXIgZXJyb3JzIGluIGFuIGVudW0sIHNvIGFjY2VwdCBqdXN0IHN0cmluZyBsaXRlcmFsIG9yIGlkZW50aWZpZXIuXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlTGl0ZXJhbC5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgY29uc3QgZXFJbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICAgIF9leHByZXNzaW9uLnBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsICk7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2VxSW5kZXhdLnJoc0VuZEluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCkge1xuICBfbHZhbC5wYXJzZUJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCBmYWxzZSk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICB3aGlsZSAoIV9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlRW51bU1lbWJlcigpO1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVCbG9jaygpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gIF9zdGF0ZW1lbnQucGFyc2VCbG9ja0JvZHkuY2FsbCh2b2lkIDAsIC8qIGVuZCAqLyBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVPck5hbWVzcGFjZURlY2xhcmF0aW9uKCkge1xuICBfbHZhbC5wYXJzZUJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCBmYWxzZSk7XG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICB0c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbigpO1xuICB9IGVsc2Uge1xuICAgIHRzUGFyc2VNb2R1bGVCbG9jaygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VBbWJpZW50RXh0ZXJuYWxNb2R1bGVEZWNsYXJhdGlvbigpIHtcbiAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByQXRvbS5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgdHNQYXJzZU1vZHVsZUJsb2NrKCk7XG4gIH0gZWxzZSB7XG4gICAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbiBmdW5jdGlvbiB0c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24oKSB7XG4gIF9sdmFsLnBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpO1xuICB0c1BhcnNlTW9kdWxlUmVmZXJlbmNlKCk7XG4gIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy50c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24gPSB0c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb247XG5cbmZ1bmN0aW9uIHRzSXNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpIHtcbiAgcmV0dXJuIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9yZXF1aXJlKSAmJiBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzLlRva2VuVHlwZS5wYXJlbkw7XG59XG5cbmZ1bmN0aW9uIHRzUGFyc2VNb2R1bGVSZWZlcmVuY2UoKSB7XG4gIGlmICh0c0lzRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UoKSkge1xuICAgIHRzUGFyc2VFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpO1xuICB9IGVsc2Uge1xuICAgIHRzUGFyc2VFbnRpdHlOYW1lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHNQYXJzZUV4dGVybmFsTW9kdWxlUmVmZXJlbmNlKCkge1xuICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlcXVpcmUpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgX2V4cHJlc3Npb24ucGFyc2VMaXRlcmFsLmNhbGwodm9pZCAwLCApO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbn1cblxuLy8gVXRpbGl0aWVzXG5cbi8vIFJldHVybnMgdHJ1ZSBpZiBhIHN0YXRlbWVudCBtYXRjaGVkLlxuZnVuY3Rpb24gdHNUcnlQYXJzZURlY2xhcmUoKSB7XG4gIGlmIChfdXRpbC5pc0xpbmVUZXJtaW5hdG9yLmNhbGwodm9pZCAwLCApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN3aXRjaCAoX2Jhc2Uuc3RhdGUudHlwZSkge1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb246IHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHByZWNpc2VseSBnZXQgdGhlIGZ1bmN0aW9uIHN0YXJ0IGhlcmUsIHNpbmNlIGl0J3Mgb25seSB1c2VkIHRvIG1hcmtcbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBhcyBhIHR5cGUgaWYgaXQncyBib2RpbGVzcywgYW5kIGl0J3MgYWxyZWFkeSBhIHR5cGUgaGVyZS5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBfYmFzZS5zdGF0ZS5zdGFydDtcbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VGdW5jdGlvbi5jYWxsKHZvaWQgMCwgZnVuY3Rpb25TdGFydCwgLyogaXNTdGF0ZW1lbnQgKi8gdHJ1ZSk7XG4gICAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzczoge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICBfc3RhdGVtZW50LnBhcnNlQ2xhc3MuY2FsbCh2b2lkIDAsIC8qIGlzU3RhdGVtZW50ICovIHRydWUsIC8qIG9wdGlvbmFsSWQgKi8gZmFsc2UpO1xuICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fY29uc3Q6IHtcbiAgICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0KSAmJiBfdXRpbC5pc0xvb2thaGVhZENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSkpIHtcbiAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICAgIC8vIGBjb25zdCBlbnVtID0gMDtgIG5vdCBhbGxvd2VkIGJlY2F1c2UgXCJlbnVtXCIgaXMgYSBzdHJpY3QgbW9kZSByZXNlcnZlZCB3b3JkLlxuICAgICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0KTtcbiAgICAgICAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9lbnVtKTtcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fZW51bTtcbiAgICAgICAgdHNQYXJzZUVudW1EZWNsYXJhdGlvbigpO1xuICAgICAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl92YXI6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9sZXQ6IHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgICAgX3N0YXRlbWVudC5wYXJzZVZhclN0YXRlbWVudC5jYWxsKHZvaWQgMCwgX2Jhc2Uuc3RhdGUudHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5fdmFyKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUubmFtZToge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICBjb25zdCBjb250ZXh0dWFsS2V5d29yZCA9IF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkO1xuICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIGlmIChjb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9nbG9iYWwpIHtcbiAgICAgICAgdHNQYXJzZUFtYmllbnRFeHRlcm5hbE1vZHVsZURlY2xhcmF0aW9uKCk7XG4gICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF0Y2hlZCA9IHRzUGFyc2VEZWNsYXJhdGlvbihjb250ZXh0dWFsS2V5d29yZCwgLyogaXNCZWZvcmVUb2tlbiAqLyB0cnVlKTtcbiAgICAgIH1cbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIE5vdGU6IHRoaXMgd29uJ3QgYmUgY2FsbGVkIHVubGVzcyB0aGUga2V5d29yZCBpcyBhbGxvd2VkIGluIGBzaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uYC5cbi8vIFJldHVybnMgdHJ1ZSBpZiBpdCBtYXRjaGVkIGEgZGVjbGFyYXRpb24uXG5mdW5jdGlvbiB0c1RyeVBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gIHJldHVybiB0c1BhcnNlRGVjbGFyYXRpb24oX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQsIC8qIGlzQmVmb3JlVG9rZW4gKi8gdHJ1ZSk7XG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiBpdCBtYXRjaGVkIGEgc3RhdGVtZW50LlxuZnVuY3Rpb24gdHNQYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgc3dpdGNoIChjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlOiB7XG4gICAgICBjb25zdCBkZWNsYXJlVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxO1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IHRzVHJ5UGFyc2VEZWNsYXJlKCk7XG4gICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbZGVjbGFyZVRva2VuSW5kZXhdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9kZWNsYXJlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZ2xvYmFsOlxuICAgICAgLy8gYGdsb2JhbCB7IH1gICh3aXRoIG5vIGBkZWNsYXJlYCkgbWF5IGFwcGVhciBpbnNpZGUgYW4gYW1iaWVudCBtb2R1bGUgZGVjbGFyYXRpb24uXG4gICAgICAvLyBXb3VsZCBsaWtlIHRvIHVzZSB0c1BhcnNlQW1iaWVudEV4dGVybmFsTW9kdWxlRGVjbGFyYXRpb24gaGVyZSwgYnV0IGFscmVhZHkgcmFuIHBhc3QgXCJnbG9iYWxcIi5cbiAgICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgICB0c1BhcnNlTW9kdWxlQmxvY2soKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHNQYXJzZURlY2xhcmF0aW9uKGNvbnRleHR1YWxLZXl3b3JkLCAvKiBpc0JlZm9yZVRva2VuICovIGZhbHNlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29tbW9uIGNvZGUgZm9yIHBhcnNpbmcgYSBkZWNsYXJhdGlvbi5cbiAqXG4gKiBpc0JlZm9yZVRva2VuIGluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IHBhcnNlciBzdGF0ZSBpcyBhdCB0aGUgY29udGV4dHVhbFxuICoga2V5d29yZCAoYW5kIHRoYXQgaXQgaXMgbm90IHlldCBlbWl0dGVkKSByYXRoZXIgdGhhbiByZWFkaW5nIHRoZSB0b2tlbiBhZnRlclxuICogaXQuIFdoZW4gaXNCZWZvcmVUb2tlbiBpcyB0cnVlLCB3ZSBtYXkgYmUgcHJlY2VkZWQgYnkgYW4gYGV4cG9ydGAgdG9rZW4gYW5kXG4gKiBzaG91bGQgaW5jbHVkZSB0aGF0IHRva2VuIGluIGEgdHlwZSBjb250ZXh0IHdlIGNyZWF0ZSwgZS5nLiB0byBoYW5kbGVcbiAqIGBleHBvcnQgaW50ZXJmYWNlYCBvciBgZXhwb3J0IHR5cGVgLiAoVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgYW5kIHNob3VsZCBiZVxuICogY2xlYW5lZCB1cCBhdCBzb21lIHBvaW50LilcbiAqXG4gKiBSZXR1cm5zIHRydWUgaWYgaXQgbWF0Y2hlZCBhIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiB0c1BhcnNlRGVjbGFyYXRpb24oY29udGV4dHVhbEtleXdvcmQsIGlzQmVmb3JlVG9rZW4pIHtcbiAgc3dpdGNoIChjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcykpIHtcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3Q7XG4gICAgICAgIF9zdGF0ZW1lbnQucGFyc2VDbGFzcy5jYWxsKHZvaWQgMCwgLyogaXNTdGF0ZW1lbnQgKi8gdHJ1ZSwgLyogb3B0aW9uYWxJZCAqLyBmYWxzZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bTpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX2VudW07XG4gICAgICAgIHRzUGFyc2VFbnVtRGVjbGFyYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2U6XG4gICAgICBpZiAodHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgICAvLyBgbmV4dGAgaXMgdHJ1ZSBpbiBcImV4cG9ydFwiIGFuZCBcImRlY2xhcmVcIiBjb250ZXh0cywgc28gd2Ugd2FudCB0byByZW1vdmUgdGhhdCB0b2tlblxuICAgICAgICAvLyBhcyB3ZWxsLlxuICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBpc0JlZm9yZVRva2VuID8gMiA6IDEpO1xuICAgICAgICB0c1BhcnNlSW50ZXJmYWNlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZTpcbiAgICAgIGlmICh0c0NoZWNrTGluZVRlcm1pbmF0b3IoaXNCZWZvcmVUb2tlbikpIHtcbiAgICAgICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgICB0c1BhcnNlQW1iaWVudEV4dGVybmFsTW9kdWxlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgICB0c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbigpO1xuICAgICAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fbmFtZXNwYWNlOlxuICAgICAgaWYgKHRzQ2hlY2tMaW5lVGVybWluYXRvcihpc0JlZm9yZVRva2VuKSAmJiBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgaXNCZWZvcmVUb2tlbiA/IDIgOiAxKTtcbiAgICAgICAgdHNQYXJzZU1vZHVsZU9yTmFtZXNwYWNlRGVjbGFyYXRpb24oKTtcbiAgICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGU6XG4gICAgICBpZiAodHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBpc0JlZm9yZVRva2VuID8gMiA6IDEpO1xuICAgICAgICB0c1BhcnNlVHlwZUFsaWFzRGVjbGFyYXRpb24oKTtcbiAgICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHNDaGVja0xpbmVUZXJtaW5hdG9yKGlzQmVmb3JlVG9rZW4pIHtcbiAgaWYgKGlzQmVmb3JlVG9rZW4pIHtcbiAgICAvLyBCYWJlbCBjaGVja3MgaGFzRm9sbG93aW5nTGluZUJyZWFrIGhlcmUgYW5kIHJldHVybnMgZmFsc2UsIGJ1dCB0aGlzXG4gICAgLy8gZG9lc24ndCBhY3R1YWxseSBjb21lIHVwLCBlLmcuIGBleHBvcnQgaW50ZXJmYWNlYCBjYW4gbmV2ZXIgYmUgb24gaXRzIG93blxuICAgIC8vIGxpbmUgaW4gdmFsaWQgY29kZS5cbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gIV91dGlsLmlzTGluZVRlcm1pbmF0b3IuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhIGdlbmVyaWMgYXN5bmMgYXJyb3cgZnVuY3Rpb24uXG5mdW5jdGlvbiB0c1RyeVBhcnNlR2VuZXJpY0FzeW5jQXJyb3dGdW5jdGlvbigpIHtcbiAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuXG4gIHRzUGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICBfc3RhdGVtZW50LnBhcnNlRnVuY3Rpb25QYXJhbXMuY2FsbCh2b2lkIDAsICk7XG4gIHRzVHJ5UGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbigpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpO1xuXG4gIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIF9leHByZXNzaW9uLnBhcnNlRnVuY3Rpb25Cb2R5LmNhbGwodm9pZCAwLCB0cnVlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogSWYgbmVjZXNzYXJ5LCBoYWNrIHRoZSB0b2tlbml6ZXIgc3RhdGUgc28gdGhhdCB0aGlzIGJpdHNoaWZ0IHdhcyBhY3R1YWxseSBhXG4gKiBsZXNzLXRoYW4gdG9rZW4sIHRoZW4ga2VlcCBwYXJzaW5nLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gc2l0dWF0aW9uc1xuICogd2hlcmUgd2UgcmVzdG9yZSBmcm9tIHNuYXBzaG90IG9uIGVycm9yICh3aGljaCByZXZlcnRzIHRoaXMgY2hhbmdlKSBvclxuICogd2hlcmUgYml0c2hpZnQgd291bGQgYmUgaWxsZWdhbCBhbnl3YXkgKGUuZy4gaW4gYSBjbGFzcyBcImV4dGVuZHNcIiBjbGF1c2UpLlxuICpcbiAqIFRoaXMgaGFjayBpcyB1c2VmdWwgdG8gaGFuZGxlIHNpdHVhdGlvbnMgbGlrZSBmb288PFQ+KCkgPT4gdm9pZD4oKSB3aGVyZVxuICogdGhlcmUgY2FuIGxlZ2l0aW1hdGVseSBiZSB0d28gb3Blbi1hbmdsZS1icmFja2V0cyBpbiBhIHJvdyBpbiBUUy5cbiAqL1xuZnVuY3Rpb24gdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpIHtcbiAgaWYgKF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuYml0U2hpZnRMKSB7XG4gICAgX2Jhc2Uuc3RhdGUucG9zIC09IDE7XG4gICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKTtcbiAgfVxuICB0c1BhcnNlVHlwZUFyZ3VtZW50cygpO1xufVxuXG5mdW5jdGlvbiB0c1BhcnNlVHlwZUFyZ3VtZW50cygpIHtcbiAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbik7XG4gIHdoaWxlICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0c1BhcnNlVHlwZSgpO1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICB9XG4gIGlmICghb2xkSXNUeXBlKSB7XG4gICAgLy8gSWYgdGhlIHR5cGUgYXJndW1lbnRzIGFyZSBwcmVzZW50IGluIGFuIGV4cHJlc3Npb24gY29udGV4dCwgZS5nLlxuICAgIC8vIGY8bnVtYmVyPigpLCB0aGVuIHRoZSA+IHNpZ24gc2hvdWxkIGJlIHRva2VuaXplZCBhcyBhIG5vbi10eXBlIHRva2VuLlxuICAgIC8vIEluIHBhcnRpY3VsYXIsIGYoYSA8IGIsIGMgPj0gZCkgc2hvdWxkIHBhcnNlIHRoZSA+PSBhcyBhIHNpbmdsZSB0b2tlbixcbiAgICAvLyByZXN1bHRpbmcgaW4gYSBzeW50YXggZXJyb3IgYW5kIGZhbGxiYWNrIHRvIHRoZSBub24tdHlwZS1hcmdzXG4gICAgLy8gaW50ZXJwcmV0YXRpb24uIEluIHRoZSBzdWNjZXNzIGNhc2UsIGV2ZW4gdGhvdWdoIHRoZSA+IGlzIHRva2VuaXplZCBhcyBhXG4gICAgLy8gbm9uLXR5cGUgdG9rZW4sIGl0IHN0aWxsIG11c3QgYmUgbWFya2VkIGFzIGEgdHlwZSB0b2tlbiBzbyB0aGF0IGl0IGlzXG4gICAgLy8gZXJhc2VkLlxuICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICBfaW5kZXgucmVzY2FuX2d0LmNhbGwodm9pZCAwLCApO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbik7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbik7XG4gICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICB9XG59XG5cbiBmdW5jdGlvbiB0c0lzRGVjbGFyYXRpb25TdGFydCgpIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgIHN3aXRjaCAoX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQpIHtcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdDpcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlOlxuICAgICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2VudW06XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlOlxuICAgICAgY2FzZSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZTpcbiAgICAgIGNhc2UgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9uYW1lc3BhY2U6XG4gICAgICBjYXNlIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZTpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IGV4cG9ydHMudHNJc0RlY2xhcmF0aW9uU3RhcnQgPSB0c0lzRGVjbGFyYXRpb25TdGFydDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPVkVSUklERVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gZnVuY3Rpb24gdHNQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jdGlvblN0YXJ0LCBmdW5jQ29udGV4dElkKSB7XG4gIC8vIEZvciBhcnJvdyBmdW5jdGlvbnMsIGBwYXJzZUFycm93YCBoYW5kbGVzIHRoZSByZXR1cm4gdHlwZSBpdHNlbGYuXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKF90eXBlcy5Ub2tlblR5cGUuY29sb24pO1xuICB9XG5cbiAgLy8gVGhlIG9yaWdpbmFsIGNvZGUgY2hlY2tlZCB0aGUgbm9kZSB0eXBlIHRvIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHR5cGUgYWxsb3dzIGEgbWlzc2luZ1xuICAvLyBib2R5LCBidXQgd2Ugc2tpcCB0aGF0IHRvIGF2b2lkIHNlbmRpbmcgYXJvdW5kIHRoZSBub2RlIHR5cGUuIFdlIGluc3RlYWQganVzdCB1c2UgdGhlXG4gIC8vIGFsbG93RXhwcmVzc2lvbkJvZHkgYm9vbGVhbiB0byBtYWtlIHN1cmUgaXQncyBub3QgYW4gYXJyb3cgZnVuY3Rpb24uXG4gIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkgJiYgX3V0aWwuaXNMaW5lVGVybWluYXRvci5jYWxsKHZvaWQgMCwgKSkge1xuICAgIC8vIFJldHJvYWN0aXZlbHkgbWFyayB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYXMgYSB0eXBlLlxuICAgIGxldCBpID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKFxuICAgICAgaSA+PSAwICYmXG4gICAgICAoX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLnN0YXJ0ID49IGZ1bmN0aW9uU3RhcnQgfHxcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQgfHxcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydClcbiAgICApIHtcbiAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tpXS5pc1R5cGUgPSB0cnVlO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBfZXhwcmVzc2lvbi5wYXJzZUZ1bmN0aW9uQm9keS5jYWxsKHZvaWQgMCwgZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xufSBleHBvcnRzLnRzUGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2ggPSB0c1BhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoO1xuXG4gZnVuY3Rpb24gdHNQYXJzZVN1YnNjcmlwdChcbiAgc3RhcnRUb2tlbkluZGV4LFxuICBub0NhbGxzLFxuICBzdG9wU3RhdGUsXG4pIHtcbiAgaWYgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iYW5nKSkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUubm9uTnVsbEFzc2VydGlvbjtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYml0U2hpZnRMKSkge1xuICAgIC8vIFRoZXJlIGFyZSBudW1iZXIgb2YgdGhpbmdzIHdlIGFyZSBnb2luZyB0byBcIm1heWJlXCIgcGFyc2UsIGxpa2UgdHlwZSBhcmd1bWVudHMgb25cbiAgICAvLyB0YWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvbnMuIElmIGFueSBvZiB0aGVtIGZhaWwsIHdhbGsgaXQgYmFjayBhbmQgY29udGludWUuXG4gICAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuXG4gICAgaWYgKCFub0NhbGxzICYmIF9leHByZXNzaW9uLmF0UG9zc2libGVBc3luYy5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgLy8gQWxtb3N0IGNlcnRhaW5seSB0aGlzIGlzIGEgZ2VuZXJpYyBhc3luYyBmdW5jdGlvbiBgYXN5bmMgPFQ+KCkgPT4gLi4uXG4gICAgICAvLyBCdXQgaXQgbWlnaHQgYmUgYSBjYWxsIHdpdGggYSB0eXBlIGFyZ3VtZW50IGBhc3luYzxUPigpO2BcbiAgICAgIGNvbnN0IGFzeW5jQXJyb3dGbiA9IHRzVHJ5UGFyc2VHZW5lcmljQXN5bmNBcnJvd0Z1bmN0aW9uKCk7XG4gICAgICBpZiAoYXN5bmNBcnJvd0ZuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICAgIGlmICghbm9DYWxscyAmJiBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgIC8vIFdpdGggZjxUPigpLCB0aGUgc3Vic2NyaXB0U3RhcnRJbmRleCBtYXJrZXIgaXMgb24gdGhlICggdG9rZW4uXG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzLmNhbGwodm9pZCAwLCApO1xuICAgIH0gZWxzZSBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJhY2tRdW90ZSkpIHtcbiAgICAgIC8vIFRhZ2dlZCB0ZW1wbGF0ZSB3aXRoIGEgdHlwZSBhcmd1bWVudC5cbiAgICAgIF9leHByZXNzaW9uLnBhcnNlVGVtcGxhdGUuY2FsbCh2b2lkIDAsICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIFRoZSByZW1haW5pbmcgcG9zc2libGUgY2FzZSBpcyBhbiBpbnN0YW50aWF0aW9uIGV4cHJlc3Npb24sIGUuZy5cbiAgICAgIC8vIEFycmF5PG51bWJlcj4gLiBDaGVjayBmb3IgYSBmZXcgY2FzZXMgdGhhdCB3b3VsZCBkaXNxdWFsaWZ5IGl0IGFuZFxuICAgICAgLy8gY2F1c2UgdXMgdG8gYmFpbCBvdXQuXG4gICAgICAvLyBhPGI+PmMgaXMgbm90IChhPGI+KT5jLCBidXQgYTwoYj4+YylcbiAgICAgIF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4gfHxcbiAgICAgIC8vIGE8Yj5jIGlzIChhPGIpPmNcbiAgICAgIChfYmFzZS5zdGF0ZS50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCAmJlxuICAgICAgICBCb29sZWFuKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMuVG9rZW5UeXBlLklTX0VYUFJFU1NJT05fU1RBUlQpICYmXG4gICAgICAgICFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkpXG4gICAgKSB7XG4gICAgICAvLyBCYWlsIG91dC4gV2UgaGF2ZSBzb21ldGhpbmcgbGlrZSBhPGI+Yywgd2hpY2ggaXMgbm90IGFuIGV4cHJlc3Npb24gd2l0aFxuICAgICAgLy8gdHlwZSBhcmd1bWVudHMgYnV0IGFuIChhIDwgYikgPiBjIGNvbXBhcmlzb24uXG4gICAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgIH1cblxuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIW5vQ2FsbHMgJiYgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uRG90KSAmJiBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikge1xuICAgIC8vIElmIHdlIHNlZSBmPy48LCB0aGVuIHRoaXMgbXVzdCBiZSBhbiBvcHRpb25hbCBjYWxsIHdpdGggYSB0eXBlIGFyZ3VtZW50LlxuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tzdGFydFRva2VuSW5kZXhdLmlzT3B0aW9uYWxDaGFpblN0YXJ0ID0gdHJ1ZTtcbiAgICAvLyBXaXRoIGY/LjxUPigpLCB0aGUgc3Vic2NyaXB0U3RhcnRJbmRleCBtYXJrZXIgaXMgb24gdGhlID8uIHRva2VuLlxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uc3Vic2NyaXB0U3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcblxuICAgIHRzUGFyc2VUeXBlQXJndW1lbnRzKCk7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cy5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBfZXhwcmVzc2lvbi5iYXNlUGFyc2VTdWJzY3JpcHQuY2FsbCh2b2lkIDAsIHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbn0gZXhwb3J0cy50c1BhcnNlU3Vic2NyaXB0ID0gdHNQYXJzZVN1YnNjcmlwdDtcblxuIGZ1bmN0aW9uIHRzVHJ5UGFyc2VFeHBvcnQoKSB7XG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQpKSB7XG4gICAgLy8gT25lIG9mIHRoZXNlIGNhc2VzOlxuICAgIC8vIGV4cG9ydCBpbXBvcnQgQSA9IEI7XG4gICAgLy8gZXhwb3J0IGltcG9ydCB0eXBlIEEgPSByZXF1aXJlKFwiQVwiKTtcbiAgICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpICYmIF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApICE9PSBfdHlwZXMuVG9rZW5UeXBlLmVxKSB7XG4gICAgICAvLyBFYXQgYSBgdHlwZWAgdG9rZW4sIHVubGVzcyBpdCdzIGFjdHVhbGx5IGFuIGlkZW50aWZpZXIgbmFtZS5cbiAgICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gICAgfVxuICAgIHRzUGFyc2VJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgLy8gYGV4cG9ydCA9IHg7YFxuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hcykpIHtcbiAgICAvLyBgZXhwb3J0IGFzIG5hbWVzcGFjZSBBO2BcbiAgICAvLyBTZWUgYHBhcnNlTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb25gIGluIFR5cGVTY3JpcHQncyBvd24gcGFyc2VyXG4gICAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9uYW1lc3BhY2UpO1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgICAgY29uc3QgbmV4dFR5cGUgPSBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHtmb299IGZyb20gJ2EnO1xuICAgICAgLy8gZXhwb3J0IHR5cGUgKiBmcm9tICdhJzsnXG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGFzIG5zIGZyb20gJ2EnOydcbiAgICAgIGlmIChuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5icmFjZUwgfHwgbmV4dFR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuc3Rhcikge1xuICAgICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59IGV4cG9ydHMudHNUcnlQYXJzZUV4cG9ydCA9IHRzVHJ5UGFyc2VFeHBvcnQ7XG5cbi8qKlxuICogUGFyc2UgYSBUUyBpbXBvcnQgc3BlY2lmaWVyLCB3aGljaCBtYXkgYmUgcHJlZml4ZWQgd2l0aCBcInR5cGVcIiBhbmQgbWF5IGJlIG9mXG4gKiB0aGUgZm9ybSBgZm9vIGFzIGJhcmAuXG4gKlxuICogVGhlIG51bWJlciBvZiBpZGVudGlmaWVyLWxpa2UgdG9rZW5zIHdlIHNlZSBoYXBwZW5zIHRvIGJlIGVub3VnaCB0byB1bmlxdWVseVxuICogaWRlbnRpZnkgdGhlIGZvcm0sIHNvIHNpbXBseSBjb3VudCB0aGUgbnVtYmVyIG9mIGlkZW50aWZpZXJzIHJhdGhlciB0aGFuXG4gKiBtYXRjaGluZyB0aGUgd29yZHMgYHR5cGVgIG9yIGBhc2AuIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBiZWNhdXNlXG4gKiBgdHlwZWAgYW5kIGBhc2AgY291bGQgZWFjaCBhY3R1YWxseSBiZSBwbGFpbiBpZGVudGlmaWVycyByYXRoZXIgdGhhblxuICoga2V5d29yZHMuXG4gKi9cbiBmdW5jdGlvbiB0c1BhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgLy8gaW1wb3J0IHtmb299XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvbjtcbiAgICByZXR1cm47XG4gIH1cbiAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgIC8vIGltcG9ydCB7dHlwZSBmb299XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvbjtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDJdLmlzVHlwZSA9IHRydWU7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc1R5cGUgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgLy8gaW1wb3J0IHtmb28gYXMgYmFyfVxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuSW1wb3J0QWNjZXNzO1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuSW1wb3J0RGVjbGFyYXRpb247XG4gICAgcmV0dXJuO1xuICB9XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgLy8gaW1wb3J0IHt0eXBlIGZvbyBhcyBiYXJ9XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuSW1wb3J0QWNjZXNzO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gX2luZGV4LklkZW50aWZpZXJSb2xlLkltcG9ydERlY2xhcmF0aW9uO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDRdLmlzVHlwZSA9IHRydWU7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaXNUeXBlID0gdHJ1ZTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAyXS5pc1R5cGUgPSB0cnVlO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzVHlwZSA9IHRydWU7XG59IGV4cG9ydHMudHNQYXJzZUltcG9ydFNwZWNpZmllciA9IHRzUGFyc2VJbXBvcnRTcGVjaWZpZXI7XG5cbi8qKlxuICogSnVzdCBsaWtlIG5hbWVkIGltcG9ydCBzcGVjaWZpZXJzLCBleHBvcnQgc3BlY2lmaWVycyBjYW4gaGF2ZSBmcm9tIDEgdG8gNFxuICogdG9rZW5zLCBpbmNsdXNpdmUsIGFuZCB0aGUgbnVtYmVyIG9mIHRva2VucyBkZXRlcm1pbmVzIHRoZSByb2xlIG9mIGVhY2ggdG9rZW4uXG4gKi9cbiBmdW5jdGlvbiB0c1BhcnNlRXhwb3J0U3BlY2lmaWVyKCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgLy8gZXhwb3J0IHtmb299XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAvLyBleHBvcnQge3R5cGUgZm9vfVxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuRXhwb3J0QWNjZXNzO1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMl0uaXNUeXBlID0gdHJ1ZTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzVHlwZSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAvLyBleHBvcnQge2ZvbyBhcyBiYXJ9XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAzXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleC5JZGVudGlmaWVyUm9sZS5FeHBvcnRBY2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgLy8gZXhwb3J0IHt0eXBlIGZvbyBhcyBiYXJ9XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaWRlbnRpZmllclJvbGUgPSBfaW5kZXguSWRlbnRpZmllclJvbGUuRXhwb3J0QWNjZXNzO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDRdLmlzVHlwZSA9IHRydWU7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gM10uaXNUeXBlID0gdHJ1ZTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAyXS5pc1R5cGUgPSB0cnVlO1xuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzVHlwZSA9IHRydWU7XG59IGV4cG9ydHMudHNQYXJzZUV4cG9ydFNwZWNpZmllciA9IHRzUGFyc2VFeHBvcnRTcGVjaWZpZXI7XG5cbiBmdW5jdGlvbiB0c1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKSB7XG4gIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYWJzdHJhY3QpICYmIF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcykge1xuICAgIF9iYXNlLnN0YXRlLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9hYnN0cmFjdDtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTsgLy8gU2tpcCBcImFic3RyYWN0XCJcbiAgICBfc3RhdGVtZW50LnBhcnNlQ2xhc3MuY2FsbCh2b2lkIDAsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlKSkge1xuICAgIC8vIE1ha2Ugc3VyZSBcImV4cG9ydCBkZWZhdWx0XCIgYXJlIGNvbnNpZGVyZWQgdHlwZSB0b2tlbnMgc28gdGhlIHdob2xlIHRoaW5nIGlzIHJlbW92ZWQuXG4gICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMik7XG4gICAgdHNQYXJzZURlY2xhcmF0aW9uKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlLCB0cnVlKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLnRzVHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbiA9IHRzVHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbjtcblxuIGZ1bmN0aW9uIHRzVHJ5UGFyc2VTdGF0ZW1lbnRDb250ZW50KCkge1xuICBpZiAoX2Jhc2Uuc3RhdGUudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5fY29uc3QpIHtcbiAgICBjb25zdCBhaGVhZCA9IF9pbmRleC5sb29rYWhlYWRUeXBlQW5kS2V5d29yZC5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoYWhlYWQudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lICYmIGFoZWFkLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2VudW0pIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fY29uc3QpO1xuICAgICAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9lbnVtKTtcbiAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX2VudW07XG4gICAgICB0c1BhcnNlRW51bURlY2xhcmF0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLnRzVHJ5UGFyc2VTdGF0ZW1lbnRDb250ZW50ID0gdHNUcnlQYXJzZVN0YXRlbWVudENvbnRlbnQ7XG5cbiBmdW5jdGlvbiB0c1RyeVBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMoaXNTdGF0aWMpIHtcbiAgY29uc3QgbWVtYmVyU3RhcnRJbmRleEFmdGVyU3RhdGljID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgdHNQYXJzZU1vZGlmaWVycyhbXG4gICAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hYnN0cmFjdCxcbiAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3JlYWRvbmx5LFxuICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZSxcbiAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYyxcbiAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX292ZXJyaWRlLFxuICBdKTtcblxuICBjb25zdCBtb2RpZmllcnNFbmRJbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIGNvbnN0IGZvdW5kID0gdHNUcnlQYXJzZUluZGV4U2lnbmF0dXJlKCk7XG4gIGlmIChmb3VuZCkge1xuICAgIC8vIEluZGV4IHNpZ25hdHVyZXMgYXJlIHR5cGUgZGVjbGFyYXRpb25zLCBzbyBzZXQgdGhlIG1vZGlmaWVyIHRva2VucyBhc1xuICAgIC8vIHR5cGUgdG9rZW5zLiBNb3N0IHRva2VucyBjb3VsZCBiZSBhc3N1bWVkIHRvIGJlIHR5cGUgdG9rZW5zLCBidXQgYHN0YXRpY2BcbiAgICAvLyBpcyBhbWJpZ3VvdXMgdW5sZXNzIHdlIHNldCBpdCBleHBsaWNpdGx5IGhlcmUuXG4gICAgY29uc3QgbWVtYmVyU3RhcnRJbmRleCA9IGlzU3RhdGljXG4gICAgICA/IG1lbWJlclN0YXJ0SW5kZXhBZnRlclN0YXRpYyAtIDFcbiAgICAgIDogbWVtYmVyU3RhcnRJbmRleEFmdGVyU3RhdGljO1xuICAgIGZvciAobGV0IGkgPSBtZW1iZXJTdGFydEluZGV4OyBpIDwgbW9kaWZpZXJzRW5kSW5kZXg7IGkrKykge1xuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2ldLmlzVHlwZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0gZXhwb3J0cy50c1RyeVBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMgPSB0c1RyeVBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWM7XG5cbi8vIE5vdGU6IFRoZSByZWFzb24gd2UgZG8gdGhpcyBpbiBgcGFyc2VJZGVudGlmaWVyU3RhdGVtZW50YCBhbmQgbm90IGBwYXJzZVN0YXRlbWVudGBcbi8vIGlzIHRoYXQgZS5nLiBgdHlwZSgpYCBpcyB2YWxpZCBKUywgc28gd2UgbXVzdCB0cnkgcGFyc2luZyB0aGF0IGZpcnN0LlxuLy8gSWYgaXQncyByZWFsbHkgYSB0eXBlLCB3ZSB3aWxsIHBhcnNlIGB0eXBlYCBhcyB0aGUgc3RhdGVtZW50LCBhbmQgY2FuIGNvcnJlY3QgaXQgaGVyZVxuLy8gYnkgcGFyc2luZyB0aGUgcmVzdC5cbiBmdW5jdGlvbiB0c1BhcnNlSWRlbnRpZmllclN0YXRlbWVudChjb250ZXh0dWFsS2V5d29yZCkge1xuICBjb25zdCBtYXRjaGVkID0gdHNQYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpO1xuICBpZiAoIW1hdGNoZWQpIHtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbn0gZXhwb3J0cy50c1BhcnNlSWRlbnRpZmllclN0YXRlbWVudCA9IHRzUGFyc2VJZGVudGlmaWVyU3RhdGVtZW50O1xuXG4gZnVuY3Rpb24gdHNQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICAvLyBcImV4cG9ydCBkZWNsYXJlXCIgaXMgZXF1aXZhbGVudCB0byBqdXN0IFwiZXhwb3J0XCIuXG4gIGNvbnN0IGlzRGVjbGFyZSA9IF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZGVjbGFyZSk7XG4gIGlmIChpc0RlY2xhcmUpIHtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9kZWNsYXJlO1xuICB9XG5cbiAgbGV0IG1hdGNoZWREZWNsYXJhdGlvbiA9IGZhbHNlO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgaWYgKGlzRGVjbGFyZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMik7XG4gICAgICBtYXRjaGVkRGVjbGFyYXRpb24gPSB0c1RyeVBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2hlZERlY2xhcmF0aW9uID0gdHNUcnlQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gICAgfVxuICB9XG4gIGlmICghbWF0Y2hlZERlY2xhcmF0aW9uKSB7XG4gICAgaWYgKGlzRGVjbGFyZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMik7XG4gICAgICBfc3RhdGVtZW50LnBhcnNlU3RhdGVtZW50LmNhbGwodm9pZCAwLCB0cnVlKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3N0YXRlbWVudC5wYXJzZVN0YXRlbWVudC5jYWxsKHZvaWQgMCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMudHNQYXJzZUV4cG9ydERlY2xhcmF0aW9uID0gdHNQYXJzZUV4cG9ydERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gdHNBZnRlclBhcnNlQ2xhc3NTdXBlcihoYXNTdXBlcikge1xuICBpZiAoaGFzU3VwZXIgJiYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikgfHwgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdFNoaWZ0TCkpKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICB9XG4gIGlmIChfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ltcGxlbWVudHMpKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5faW1wbGVtZW50cztcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAxKTtcbiAgICB0c1BhcnNlSGVyaXRhZ2VDbGF1c2UoKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH1cbn0gZXhwb3J0cy50c0FmdGVyUGFyc2VDbGFzc1N1cGVyID0gdHNBZnRlclBhcnNlQ2xhc3NTdXBlcjtcblxuIGZ1bmN0aW9uIHRzU3RhcnRQYXJzZU9ialByb3BWYWx1ZSgpIHtcbiAgdHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG59IGV4cG9ydHMudHNTdGFydFBhcnNlT2JqUHJvcFZhbHVlID0gdHNTdGFydFBhcnNlT2JqUHJvcFZhbHVlO1xuXG4gZnVuY3Rpb24gdHNTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXMoKSB7XG4gIHRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO1xufSBleHBvcnRzLnRzU3RhcnRQYXJzZUZ1bmN0aW9uUGFyYW1zID0gdHNTdGFydFBhcnNlRnVuY3Rpb25QYXJhbXM7XG5cbi8vIGBsZXQgeDogbnVtYmVyO2BcbiBmdW5jdGlvbiB0c0FmdGVyUGFyc2VWYXJIZWFkKCkge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgaWYgKCFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkpIHtcbiAgICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJhbmcpO1xuICB9XG4gIHRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG59IGV4cG9ydHMudHNBZnRlclBhcnNlVmFySGVhZCA9IHRzQWZ0ZXJQYXJzZVZhckhlYWQ7XG5cbi8vIHBhcnNlIHRoZSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBhcnJvdyBmdW5jdGlvbiAtIGxldCBmb28gPSAoYXN5bmMgKCk6IG51bWJlciA9PiB7fSk7XG4gZnVuY3Rpb24gdHNTdGFydFBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbigpIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICB0c1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufSBleHBvcnRzLnRzU3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24gPSB0c1N0YXJ0UGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uO1xuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuIGZ1bmN0aW9uIHRzUGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucykge1xuICAvLyBOb3RlOiBXaGVuIHRoZSBKU1ggcGx1Z2luIGlzIG9uLCB0eXBlIGFzc2VydGlvbnMgKGA8VD4geGApIGFyZW4ndCB2YWxpZCBzeW50YXguXG4gIGlmIChfYmFzZS5pc0pTWEVuYWJsZWQpIHtcbiAgICByZXR1cm4gdHNQYXJzZU1heWJlQXNzaWduV2l0aEpTWChub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRzUGFyc2VNYXliZUFzc2lnbldpdGhvdXRKU1gobm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9XG59IGV4cG9ydHMudHNQYXJzZU1heWJlQXNzaWduID0gdHNQYXJzZU1heWJlQXNzaWduO1xuXG4gZnVuY3Rpb24gdHNQYXJzZU1heWJlQXNzaWduV2l0aEpTWChub0luLCBpc1dpdGhpblBhcmVucykge1xuICBpZiAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICByZXR1cm4gX2V4cHJlc3Npb24uYmFzZVBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgfVxuXG4gIC8vIFByZWZlciB0byBwYXJzZSBKU1ggaWYgcG9zc2libGUuIEJ1dCBtYXkgYmUgYW4gYXJyb3cgZm4uXG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgbGV0IHdhc0Fycm93ID0gX2V4cHJlc3Npb24uYmFzZVBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgaWYgKF9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHdhc0Fycm93O1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCB0cnkgYXMgdHlwZS1wYXJhbWV0ZXJpemVkIGFycm93IGZ1bmN0aW9uLlxuICBfYmFzZS5zdGF0ZS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gIC8vIFRoaXMgaXMgc2ltaWxhciB0byBUeXBlU2NyaXB0J3MgYHRyeVBhcnNlUGFyZW50aGVzaXplZEFycm93RnVuY3Rpb25FeHByZXNzaW9uYC5cbiAgdHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7XG4gIHdhc0Fycm93ID0gX2V4cHJlc3Npb24uYmFzZVBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgaWYgKCF3YXNBcnJvdykge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cblxuICByZXR1cm4gd2FzQXJyb3c7XG59IGV4cG9ydHMudHNQYXJzZU1heWJlQXNzaWduV2l0aEpTWCA9IHRzUGFyc2VNYXliZUFzc2lnbldpdGhKU1g7XG5cbiBmdW5jdGlvbiB0c1BhcnNlTWF5YmVBc3NpZ25XaXRob3V0SlNYKG5vSW4sIGlzV2l0aGluUGFyZW5zKSB7XG4gIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIHJldHVybiBfZXhwcmVzc2lvbi5iYXNlUGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgbm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9XG5cbiAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gVHlwZVNjcmlwdCdzIGB0cnlQYXJzZVBhcmVudGhlc2l6ZWRBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbmAuXG4gIHRzUGFyc2VUeXBlUGFyYW1ldGVycygpO1xuICBjb25zdCB3YXNBcnJvdyA9IF9leHByZXNzaW9uLmJhc2VQYXJzZU1heWJlQXNzaWduLmNhbGwodm9pZCAwLCBub0luLCBpc1dpdGhpblBhcmVucyk7XG4gIGlmICghd2FzQXJyb3cpIHtcbiAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICB9XG4gIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3YXNBcnJvdztcbiAgfVxuXG4gIC8vIFRyeSBwYXJzaW5nIGEgdHlwZSBjYXN0IGluc3RlYWQgb2YgYW4gYXJyb3cgZnVuY3Rpb24uXG4gIC8vIFRoaXMgd2lsbCBzdGFydCB3aXRoIGEgdHlwZSBhc3NlcnRpb24gKHZpYSBwYXJzZU1heWJlVW5hcnkpLlxuICAvLyBCdXQgZG9uJ3QgZGlyZWN0bHkgY2FsbCBgdHNQYXJzZVR5cGVBc3NlcnRpb25gIGJlY2F1c2Ugd2Ugd2FudCB0byBoYW5kbGUgYW55IGJpbmFyeSBhZnRlciBpdC5cbiAgcmV0dXJuIF9leHByZXNzaW9uLmJhc2VQYXJzZU1heWJlQXNzaWduLmNhbGwodm9pZCAwLCBub0luLCBpc1dpdGhpblBhcmVucyk7XG59IGV4cG9ydHMudHNQYXJzZU1heWJlQXNzaWduV2l0aG91dEpTWCA9IHRzUGFyc2VNYXliZUFzc2lnbldpdGhvdXRKU1g7XG5cbiBmdW5jdGlvbiB0c1BhcnNlQXJyb3coKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBob3cgdGhlIFRTIHBhcnNlciBkb2VzIGl0LlxuICAgIC8vIFRTIHVzZXMgbG9va2FoZWFkLiBCYWJ5bG9uIHBhcnNlcyBpdCBhcyBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiBhbmQgY29udmVydHMuXG4gICAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuXG4gICAgdHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKF90eXBlcy5Ub2tlblR5cGUuY29sb24pO1xuICAgIGlmIChfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsICkpIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gICAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpKSBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuXG4gICAgaWYgKF9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXJyb3cpO1xufSBleHBvcnRzLnRzUGFyc2VBcnJvdyA9IHRzUGFyc2VBcnJvdztcblxuLy8gQWxsb3cgdHlwZSBhbm5vdGF0aW9ucyBpbnNpZGUgb2YgYSBwYXJhbWV0ZXIgbGlzdC5cbiBmdW5jdGlvbiB0c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgdHNUcnlQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbn0gZXhwb3J0cy50c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMgPSB0c1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXM7XG5cbiBmdW5jdGlvbiB0c1BhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iaXRTaGlmdEwpKSB7XG4gICAgdHNQYXJzZVR5cGVBcmd1bWVudHNXaXRoUG9zc2libGVCaXRzaGlmdCgpO1xuICB9XG4gIF9zdGF0ZW1lbnQuYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMuY2FsbCh2b2lkIDAsICk7XG59IGV4cG9ydHMudHNQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzID0gdHNQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7XG5cblxuXG5cblxuXG5cblxuXG52YXIgX2luZGV4ID0gcmVxdWlyZSgnLi4vLi4vdG9rZW5pemVyL2luZGV4Jyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vLi4vdG9rZW5pemVyL3R5cGVzJyk7XG52YXIgX2Jhc2UgPSByZXF1aXJlKCcuLi8uLi90cmF2ZXJzZXIvYmFzZScpO1xudmFyIF9leHByZXNzaW9uID0gcmVxdWlyZSgnLi4vLi4vdHJhdmVyc2VyL2V4cHJlc3Npb24nKTtcbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uLy4uL3RyYXZlcnNlci91dGlsJyk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWwvY2hhcmNvZGVzJyk7XG52YXIgX2lkZW50aWZpZXIgPSByZXF1aXJlKCcuLi8uLi91dGlsL2lkZW50aWZpZXInKTtcbnZhciBfdHlwZXNjcmlwdCA9IHJlcXVpcmUoJy4uL3R5cGVzY3JpcHQnKTtcblxuLyoqXG4gKiBSZWFkIHRva2VuIHdpdGggSlNYIGNvbnRlbnRzLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGRldGVjdGluZyBqc3hUYWdTdGFydCBhbmQgYWxzbyByZWd1bGFyIHRva2VucyB0aGF0IG1pZ2h0IGJlXG4gKiBwYXJ0IG9mIGFuIGV4cHJlc3Npb24sIHRoaXMgY29kZSBkZXRlY3RzIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRleHQgcmFuZ2VzXG4gKiB3aXRoaW4gSlNYIGNoaWxkcmVuLiBJbiBvcmRlciB0byBwcm9wZXJseSBjb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLCB3ZVxuICogZGlzdGluZ3Vpc2gganN4VGV4dCBmcm9tIGpzeEVtcHR5VGV4dCwgd2hpY2ggaXMgYSB0ZXh0IHJhbmdlIHRoYXQgc2ltcGxpZmllc1xuICogdG8gdGhlIGVtcHR5IHN0cmluZyBhZnRlciBKU1ggd2hpdGVzcGFjZSB0cmltbWluZy5cbiAqXG4gKiBJdCB0dXJucyBvdXQgdGhhdCBhIEpTWCB0ZXh0IHJhbmdlIHdpbGwgc2ltcGxpZnkgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBhbmRcbiAqIG9ubHkgaWYgYm90aCBvZiB0aGVzZSBjb25kaXRpb25zIGhvbGQ6XG4gKiAtIFRoZSByYW5nZSBjb25zaXN0cyBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKG9ubHkgY291bnRpbmcgc3BhY2UsXG4gKiAgIHRhYiwgXFxyLCBhbmQgXFxuKS5cbiAqIC0gVGhlIHJhbmdlIGhhcyBhdCBsZWFzdCBvbmUgbmV3bGluZS5cbiAqIFRoaXMgY2FuIGJlIHByb3ZlbiBieSBhbmFseXppbmcgYW55IGltcGxlbWVudGF0aW9uIG9mIHdoaXRlc3BhY2UgdHJpbW1pbmcsXG4gKiBlLmcuIGZvcm1hdEpTWFRleHRMaXRlcmFsIGluIFN1Y3Jhc2Ugb3IgY2xlYW5KU1hFbGVtZW50TGl0ZXJhbENoaWxkIGluIEJhYmVsLlxuICovXG5mdW5jdGlvbiBqc3hSZWFkVG9rZW4oKSB7XG4gIGxldCBzYXdOZXdsaW5lID0gZmFsc2U7XG4gIGxldCBzYXdOb25XaGl0ZXNwYWNlID0gZmFsc2U7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA+PSBfYmFzZS5pbnB1dC5sZW5ndGgpIHtcbiAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIFwiVW50ZXJtaW5hdGVkIEpTWCBjb250ZW50c1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaCA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoX2Jhc2Uuc3RhdGUucG9zKTtcbiAgICBpZiAoY2ggPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxlc3NUaGFuIHx8IGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZWZ0Q3VybHlCcmFjZSkge1xuICAgICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA9PT0gX2Jhc2Uuc3RhdGUuc3RhcnQpIHtcbiAgICAgICAgaWYgKGNoID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZXNzVGhhbikge1xuICAgICAgICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICAgICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF9pbmRleC5nZXRUb2tlbkZyb21Db2RlLmNhbGwodm9pZCAwLCBjaCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzYXdOZXdsaW5lICYmICFzYXdOb25XaGl0ZXNwYWNlKSB7XG4gICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5qc3hFbXB0eVRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRleHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgcGFydCBvZiBKU1ggdGV4dC5cbiAgICBpZiAoY2ggPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxpbmVGZWVkKSB7XG4gICAgICBzYXdOZXdsaW5lID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGNoICE9PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5zcGFjZSAmJiBjaCAhPT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuY2FycmlhZ2VSZXR1cm4gJiYgY2ggIT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnRhYikge1xuICAgICAgc2F3Tm9uV2hpdGVzcGFjZSA9IHRydWU7XG4gICAgfVxuICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGpzeFJlYWRTdHJpbmcocXVvdGUpIHtcbiAgX2Jhc2Uuc3RhdGUucG9zKys7XG4gIGZvciAoOzspIHtcbiAgICBpZiAoX2Jhc2Uuc3RhdGUucG9zID49IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5wb3MpO1xuICAgIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIF9iYXNlLnN0YXRlLnBvcysrO1xuICB9XG4gIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpO1xufVxuXG4vLyBSZWFkIGEgSlNYIGlkZW50aWZpZXIgKHZhbGlkIHRhZyBvciBhdHRyaWJ1dGUgbmFtZSkuXG4vL1xuLy8gT3B0aW1pemVkIHZlcnNpb24gc2luY2UgSlNYIGlkZW50aWZpZXJzIGNhbid0IGNvbnRhaW5cbi8vIGVzY2FwZSBjaGFyYWN0ZXJzIGFuZCBzbyBjYW4gYmUgcmVhZCBhcyBzaW5nbGUgc2xpY2UuXG4vLyBBbHNvIGFzc3VtZXMgdGhhdCBmaXJzdCBjaGFyYWN0ZXIgd2FzIGFscmVhZHkgY2hlY2tlZFxuLy8gYnkgaXNJZGVudGlmaWVyU3RhcnQgaW4gcmVhZFRva2VuLlxuXG5mdW5jdGlvbiBqc3hSZWFkV29yZCgpIHtcbiAgbGV0IGNoO1xuICBkbyB7XG4gICAgaWYgKF9iYXNlLnN0YXRlLnBvcyA+IF9iYXNlLmlucHV0Lmxlbmd0aCkge1xuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJVbmV4cGVjdGVkbHkgcmVhY2hlZCB0aGUgZW5kIG9mIGlucHV0LlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2ggPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KCsrX2Jhc2Uuc3RhdGUucG9zKTtcbiAgfSB3aGlsZSAoX2lkZW50aWZpZXIuSVNfSURFTlRJRklFUl9DSEFSW2NoXSB8fCBjaCA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZGFzaCk7XG4gIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5qc3hOYW1lKTtcbn1cblxuLy8gUGFyc2UgbmV4dCB0b2tlbiBhcyBKU1ggaWRlbnRpZmllclxuZnVuY3Rpb24ganN4UGFyc2VJZGVudGlmaWVyKCkge1xuICBuZXh0SlNYVGFnVG9rZW4oKTtcbn1cblxuLy8gUGFyc2UgbmFtZXNwYWNlZCBpZGVudGlmaWVyLlxuZnVuY3Rpb24ganN4UGFyc2VOYW1lc3BhY2VkTmFtZShpZGVudGlmaWVyUm9sZSkge1xuICBqc3hQYXJzZUlkZW50aWZpZXIoKTtcbiAgaWYgKCFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgIC8vIFBsYWluIGlkZW50aWZpZXIsIHNvIHRoaXMgaXMgYW4gYWNjZXNzLlxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBpZGVudGlmaWVyUm9sZTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUHJvY2VzcyB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIG5hbWVzcGFjZWQgbmFtZS5cbiAganN4UGFyc2VJZGVudGlmaWVyKCk7XG59XG5cbi8vIFBhcnNlcyBlbGVtZW50IG5hbWUgaW4gYW55IGZvcm0gLSBuYW1lc3BhY2VkLCBtZW1iZXJcbi8vIG9yIHNpbmdsZSBpZGVudGlmaWVyLlxuZnVuY3Rpb24ganN4UGFyc2VFbGVtZW50TmFtZSgpIHtcbiAgY29uc3QgZmlyc3RUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAganN4UGFyc2VOYW1lc3BhY2VkTmFtZShfaW5kZXguSWRlbnRpZmllclJvbGUuQWNjZXNzKTtcbiAgbGV0IGhhZERvdCA9IGZhbHNlO1xuICB3aGlsZSAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICBoYWREb3QgPSB0cnVlO1xuICAgIG5leHRKU1hUYWdUb2tlbigpO1xuICAgIGpzeFBhcnNlSWRlbnRpZmllcigpO1xuICB9XG4gIC8vIEZvciB0YWdzIGxpa2UgPGRpdj4gd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIgYW5kIG5vIGRvdHMsIHRoZSBuYW1lIGlzXG4gIC8vIGFjdHVhbGx5ICpub3QqIGFuIGlkZW50aWZpZXIgYWNjZXNzLCBzaW5jZSBpdCdzIHJlZmVycmluZyB0byBhIGJ1aWx0LWluXG4gIC8vIHRhZyBuYW1lLiBSZW1vdmUgdGhlIGlkZW50aWZpZXIgcm9sZSBpbiB0aGlzIGNhc2Ugc28gdGhhdCBpdCdzIG5vdFxuICAvLyBhY2NpZGVudGFsbHkgdHJhbnNmb3JtZWQgYnkgdGhlIGltcG9ydHMgdHJhbnNmb3JtIHdoZW4gcHJlc2VydmluZyBKU1guXG4gIGlmICghaGFkRG90KSB7XG4gICAgY29uc3QgZmlyc3RUb2tlbiA9IF9iYXNlLnN0YXRlLnRva2Vuc1tmaXJzdFRva2VuSW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0Q2hhciA9IF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoZmlyc3RUb2tlbi5zdGFydCk7XG4gICAgaWYgKGZpcnN0Q2hhciA+PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VBICYmIGZpcnN0Q2hhciA8PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VaKSB7XG4gICAgICBmaXJzdFRva2VuLmlkZW50aWZpZXJSb2xlID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2VzIGFueSB0eXBlIG9mIEpTWCBhdHRyaWJ1dGUgdmFsdWUuXG5mdW5jdGlvbiBqc3hQYXJzZUF0dHJpYnV0ZVZhbHVlKCkge1xuICBzd2l0Y2ggKF9iYXNlLnN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMOlxuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gICAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydDpcbiAgICAgIGpzeFBhcnNlRWxlbWVudCgpO1xuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nOlxuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgXCJKU1ggdmFsdWUgc2hvdWxkIGJlIGVpdGhlciBhbiBleHByZXNzaW9uIG9yIGEgcXVvdGVkIEpTWCB0ZXh0XCIpO1xuICB9XG59XG5cbi8vIFBhcnNlIEpTWCBzcHJlYWQgY2hpbGQsIGFmdGVyIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUge1xuLy8gRG9lcyBub3QgcGFyc2UgdGhlIGNsb3NpbmcgfVxuZnVuY3Rpb24ganN4UGFyc2VTcHJlYWRDaGlsZCgpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKTtcbiAgX2V4cHJlc3Npb24ucGFyc2VFeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xufVxuXG4vLyBQYXJzZXMgSlNYIG9wZW5pbmcgdGFnIHN0YXJ0aW5nIGFmdGVyIFwiPFwiLlxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0YWcgd2FzIHNlbGYtY2xvc2luZy5cbi8vIERvZXMgbm90IHBhcnNlIHRoZSBsYXN0IHRva2VuLlxuZnVuY3Rpb24ganN4UGFyc2VPcGVuaW5nRWxlbWVudChpbml0aWFsVG9rZW5JbmRleCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZW4tZnJhZ21lbnQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGpzeFBhcnNlRWxlbWVudE5hbWUoKTtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1RyeVBhcnNlSlNYVHlwZUFyZ3VtZW50LmNhbGwodm9pZCAwLCApO1xuICB9XG4gIGxldCBoYXNTZWVuUHJvcFNwcmVhZCA9IGZhbHNlO1xuICB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zbGFzaCkgJiYgIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdFbmQpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgIGhhc1NlZW5Qcm9wU3ByZWFkID0gdHJ1ZTtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcyk7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZU1heWJlQXNzaWduLmNhbGwodm9pZCAwLCApO1xuICAgICAgLy8gfVxuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaGFzU2VlblByb3BTcHJlYWQgJiZcbiAgICAgIF9iYXNlLnN0YXRlLmVuZCAtIF9iYXNlLnN0YXRlLnN0YXJ0ID09PSAzICYmXG4gICAgICBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnN0YXJ0KSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubG93ZXJjYXNlSyAmJlxuICAgICAgX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfYmFzZS5zdGF0ZS5zdGFydCArIDEpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sb3dlcmNhc2VFICYmXG4gICAgICBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnN0YXJ0ICsgMikgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmxvd2VyY2FzZVlcbiAgICApIHtcbiAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tpbml0aWFsVG9rZW5JbmRleF0uanN4Um9sZSA9IF9pbmRleC5KU1hSb2xlLktleUFmdGVyUHJvcFNwcmVhZDtcbiAgICB9XG4gICAganN4UGFyc2VOYW1lc3BhY2VkTmFtZShfaW5kZXguSWRlbnRpZmllclJvbGUuT2JqZWN0S2V5KTtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICBqc3hQYXJzZUF0dHJpYnV0ZVZhbHVlKCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGlzU2VsZkNsb3NpbmcgPSBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc2xhc2gpO1xuICBpZiAoaXNTZWxmQ2xvc2luZykge1xuICAgIC8vIC9cbiAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgfVxuICByZXR1cm4gaXNTZWxmQ2xvc2luZztcbn1cblxuLy8gUGFyc2VzIEpTWCBjbG9zaW5nIHRhZyBzdGFydGluZyBhZnRlciBcIjwvXCIuXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbmZ1bmN0aW9uIGpzeFBhcnNlQ2xvc2luZ0VsZW1lbnQoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuanN4VGFnRW5kKSkge1xuICAgIC8vIEZyYWdtZW50IHN5bnRheCwgc28gd2UgaW1tZWRpYXRlbHkgaGF2ZSBhIHRhZyBlbmQuXG4gICAgcmV0dXJuO1xuICB9XG4gIGpzeFBhcnNlRWxlbWVudE5hbWUoKTtcbn1cblxuLy8gUGFyc2VzIGVudGlyZSBKU1ggZWxlbWVudCwgaW5jbHVkaW5nIGl0cyBvcGVuaW5nIHRhZ1xuLy8gKHN0YXJ0aW5nIGFmdGVyIFwiPFwiKSwgYXR0cmlidXRlcywgY29udGVudHMgYW5kIGNsb3NpbmcgdGFnLlxuLy8gRG9lcyBub3QgcGFyc2UgdGhlIGxhc3QgdG9rZW4uXG5mdW5jdGlvbiBqc3hQYXJzZUVsZW1lbnRBdCgpIHtcbiAgY29uc3QgaW5pdGlhbFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW2luaXRpYWxUb2tlbkluZGV4XS5qc3hSb2xlID0gX2luZGV4LkpTWFJvbGUuTm9DaGlsZHJlbjtcbiAgbGV0IG51bUV4cGxpY2l0Q2hpbGRyZW4gPSAwO1xuICBjb25zdCBpc1NlbGZDbG9zaW5nID0ganN4UGFyc2VPcGVuaW5nRWxlbWVudChpbml0aWFsVG9rZW5JbmRleCk7XG4gIGlmICghaXNTZWxmQ2xvc2luZykge1xuICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc3dpdGNoIChfYmFzZS5zdGF0ZS50eXBlKSB7XG4gICAgICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5qc3hUYWdTdGFydDpcbiAgICAgICAgICBuZXh0SlNYVGFnVG9rZW4oKTtcbiAgICAgICAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNsYXNoKSkge1xuICAgICAgICAgICAgbmV4dEpTWFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICBqc3hQYXJzZUNsb3NpbmdFbGVtZW50KCk7XG4gICAgICAgICAgICAvLyBLZXkgYWZ0ZXIgcHJvcCBzcHJlYWQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG51bWJlciBvZiBjaGlsZHJlbixcbiAgICAgICAgICAgIC8vIHNpbmNlIGl0IG1lYW5zIHdlIHN3aXRjaCB0byBjcmVhdGVFbGVtZW50LCB3aGljaCBkb2Vzbid0IGNhcmVcbiAgICAgICAgICAgIC8vIGFib3V0IG51bWJlciBvZiBjaGlsZHJlbi5cbiAgICAgICAgICAgIGlmIChfYmFzZS5zdGF0ZS50b2tlbnNbaW5pdGlhbFRva2VuSW5kZXhdLmpzeFJvbGUgIT09IF9pbmRleC5KU1hSb2xlLktleUFmdGVyUHJvcFNwcmVhZCkge1xuICAgICAgICAgICAgICBpZiAobnVtRXhwbGljaXRDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tpbml0aWFsVG9rZW5JbmRleF0uanN4Um9sZSA9IF9pbmRleC5KU1hSb2xlLk9uZUNoaWxkO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bUV4cGxpY2l0Q2hpbGRyZW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2luaXRpYWxUb2tlbkluZGV4XS5qc3hSb2xlID0gX2luZGV4LkpTWFJvbGUuU3RhdGljQ2hpbGRyZW47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbnVtRXhwbGljaXRDaGlsZHJlbisrO1xuICAgICAgICAgIGpzeFBhcnNlRWxlbWVudEF0KCk7XG4gICAgICAgICAgbmV4dEpTWEV4cHJUb2tlbigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5qc3hUZXh0OlxuICAgICAgICAgIG51bUV4cGxpY2l0Q2hpbGRyZW4rKztcbiAgICAgICAgICBuZXh0SlNYRXhwclRva2VuKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmpzeEVtcHR5VGV4dDpcbiAgICAgICAgICBuZXh0SlNYRXhwclRva2VuKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTDpcbiAgICAgICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKSkge1xuICAgICAgICAgICAganN4UGFyc2VTcHJlYWRDaGlsZCgpO1xuICAgICAgICAgICAgbmV4dEpTWEV4cHJUb2tlbigpO1xuICAgICAgICAgICAgLy8gU3ByZWFkIGNoaWxkcmVuIGFyZSBhIG1lY2hhbmlzbSB0byBleHBsaWNpdGx5IG1hcmsgY2hpbGRyZW4gYXNcbiAgICAgICAgICAgIC8vIHN0YXRpYywgc28gY291bnQgaXQgYXMgMiBjaGlsZHJlbiB0byBzYXRpc2Z5IHRoZSBcIm1vcmUgdGhhbiBvbmVcbiAgICAgICAgICAgIC8vIGNoaWxkXCIgY29uZGl0aW9uLlxuICAgICAgICAgICAgbnVtRXhwbGljaXRDaGlsZHJlbiArPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBzZWUge30sIHRoaXMgaXMgYW4gZW1wdHkgcHNldWRvLWV4cHJlc3Npb24gdGhhdCBkb2Vzbid0XG4gICAgICAgICAgICAvLyBjb3VudCBhcyBhIGNoaWxkLlxuICAgICAgICAgICAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICAgICAgICBudW1FeHBsaWNpdENoaWxkcmVuKys7XG4gICAgICAgICAgICAgIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRKU1hFeHByVG9rZW4oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2VzIGVudGlyZSBKU1ggZWxlbWVudCBmcm9tIGN1cnJlbnQgcG9zaXRpb24uXG4vLyBEb2VzIG5vdCBwYXJzZSB0aGUgbGFzdCB0b2tlbi5cbiBmdW5jdGlvbiBqc3hQYXJzZUVsZW1lbnQoKSB7XG4gIG5leHRKU1hUYWdUb2tlbigpO1xuICBqc3hQYXJzZUVsZW1lbnRBdCgpO1xufSBleHBvcnRzLmpzeFBhcnNlRWxlbWVudCA9IGpzeFBhcnNlRWxlbWVudDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT3ZlcnJpZGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiBmdW5jdGlvbiBuZXh0SlNYVGFnVG9rZW4oKSB7XG4gIF9iYXNlLnN0YXRlLnRva2Vucy5wdXNoKG5ldyAoMCwgX2luZGV4LlRva2VuKSgpKTtcbiAgX2luZGV4LnNraXBTcGFjZS5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUuc3RhcnQgPSBfYmFzZS5zdGF0ZS5wb3M7XG4gIGNvbnN0IGNvZGUgPSBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KF9iYXNlLnN0YXRlLnBvcyk7XG5cbiAgaWYgKF9pZGVudGlmaWVyLklTX0lERU5USUZJRVJfU1RBUlRbY29kZV0pIHtcbiAgICBqc3hSZWFkV29yZCgpO1xuICB9IGVsc2UgaWYgKGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLnF1b3RhdGlvbk1hcmsgfHwgY29kZSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMuYXBvc3Ryb3BoZSkge1xuICAgIGpzeFJlYWRTdHJpbmcoY29kZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlIGZvbGxvd2luZyB0b2tlbnMgYXJlIGp1c3Qgb25lIGNoYXJhY3RlciBlYWNoLlxuICAgICsrX2Jhc2Uuc3RhdGUucG9zO1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5ncmVhdGVyVGhhbjpcbiAgICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ0VuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZXNzVGhhbjpcbiAgICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmpzeFRhZ1N0YXJ0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIF9jaGFyY29kZXMuY2hhckNvZGVzLnNsYXNoOlxuICAgICAgICBfaW5kZXguZmluaXNoVG9rZW4uY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc2xhc2gpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuZXF1YWxzVG86XG4gICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lcSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5sZWZ0Q3VybHlCcmFjZTpcbiAgICAgICAgX2luZGV4LmZpbmlzaFRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5kb3Q6XG4gICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5kb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgX2NoYXJjb2Rlcy5jaGFyQ29kZXMuY29sb246XG4gICAgICAgIF9pbmRleC5maW5pc2hUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5uZXh0SlNYVGFnVG9rZW4gPSBuZXh0SlNYVGFnVG9rZW47XG5cbmZ1bmN0aW9uIG5leHRKU1hFeHByVG9rZW4oKSB7XG4gIF9iYXNlLnN0YXRlLnRva2Vucy5wdXNoKG5ldyAoMCwgX2luZGV4LlRva2VuKSgpKTtcbiAgX2Jhc2Uuc3RhdGUuc3RhcnQgPSBfYmFzZS5zdGF0ZS5wb3M7XG4gIGpzeFJlYWRUb2tlbigpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIF9pbmRleCA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9pbmRleCcpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci90eXBlcycpO1xudmFyIF9iYXNlID0gcmVxdWlyZSgnLi4vdHJhdmVyc2VyL2Jhc2UnKTtcbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9leHByZXNzaW9uJyk7XG52YXIgX2Zsb3cgPSByZXF1aXJlKCcuL2Zsb3cnKTtcbnZhciBfdHlwZXNjcmlwdCA9IHJlcXVpcmUoJy4vdHlwZXNjcmlwdCcpO1xuXG4vKipcbiAqIENvbW1vbiBwYXJzZXIgY29kZSBmb3IgVHlwZVNjcmlwdCBhbmQgRmxvdy5cbiAqL1xuXG4vLyBBbiBhcHBhcmVudCBjb25kaXRpb25hbCBleHByZXNzaW9uIGNvdWxkIGFjdHVhbGx5IGJlIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBpbiBhbiBhcnJvdyBmdW5jdGlvbi5cbiBmdW5jdGlvbiB0eXBlZFBhcnNlQ29uZGl0aW9uYWwobm9Jbikge1xuICAvLyBJZiB3ZSBzZWUgPzosIHRoaXMgY2FuJ3QgcG9zc2libHkgYmUgYSB2YWxpZCBjb25kaXRpb25hbC4gdHlwZWRQYXJzZVBhcmVuSXRlbSB3aWxsIGJlIGNhbGxlZFxuICAvLyBsYXRlciB0byBmaW5pc2ggb2ZmIHRoZSBhcnJvdyBwYXJhbWV0ZXIuIFdlIGFsc28gbmVlZCB0byBoYW5kbGUgYmFyZSA/IHRva2VucyBmb3Igb3B0aW9uYWxcbiAgLy8gcGFyYW1ldGVycyB3aXRob3V0IHR5cGUgYW5ub3RhdGlvbnMsIGkuZS4gPywgYW5kID8pIC5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbikpIHtcbiAgICBjb25zdCBuZXh0VHlwZSA9IF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApO1xuICAgIGlmIChuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5jb2xvbiB8fCBuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5jb21tYSB8fCBuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgX2V4cHJlc3Npb24uYmFzZVBhcnNlQ29uZGl0aW9uYWwuY2FsbCh2b2lkIDAsIG5vSW4pO1xufSBleHBvcnRzLnR5cGVkUGFyc2VDb25kaXRpb25hbCA9IHR5cGVkUGFyc2VDb25kaXRpb25hbDtcblxuLy8gTm90ZTogVGhlc2UgXCJ0eXBlIGNhc3RzXCIgYXJlICpub3QqIHZhbGlkIFRTIGV4cHJlc3Npb25zLlxuLy8gQnV0IHdlIHBhcnNlIHRoZW0gaGVyZSBhbmQgY2hhbmdlIHRoZW0gd2hlbiBjb21wbGV0aW5nIHRoZSBhcnJvdyBmdW5jdGlvbi5cbiBmdW5jdGlvbiB0eXBlZFBhcnNlUGFyZW5JdGVtKCkge1xuICBfaW5kZXguZWF0VHlwZVRva2VuLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgICAgX3R5cGVzY3JpcHQudHNQYXJzZVR5cGVBbm5vdGF0aW9uLmNhbGwodm9pZCAwLCApO1xuICAgIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgICAgX2Zsb3cuZmxvd1BhcnNlVHlwZUFubm90YXRpb24uY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMudHlwZWRQYXJzZVBhcmVuSXRlbSA9IHR5cGVkUGFyc2VQYXJlbkl0ZW07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsvKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuXG4vLyBBIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlciBvcGVyYXRlcyBieSBkZWZpbmluZyBmdW5jdGlvbnMgZm9yIGFsbFxuLy8gc3ludGFjdGljIGVsZW1lbnRzLCBhbmQgcmVjdXJzaXZlbHkgY2FsbGluZyB0aG9zZSwgZWFjaCBmdW5jdGlvblxuLy8gYWR2YW5jaW5nIHRoZSBpbnB1dCBzdHJlYW0gYW5kIHJldHVybmluZyBhbiBBU1Qgbm9kZS4gUHJlY2VkZW5jZVxuLy8gb2YgY29uc3RydWN0cyAoZm9yIGV4YW1wbGUsIHRoZSBmYWN0IHRoYXQgYCF4WzFdYCBtZWFucyBgISh4WzFdKWBcbi8vIGluc3RlYWQgb2YgYCgheClbMV1gIGlzIGhhbmRsZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2VyXG4vLyBmdW5jdGlvbiB0aGF0IHBhcnNlcyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzIGlzIGNhbGxlZCBmaXJzdCwgYW5kXG4vLyBpbiB0dXJuIGNhbGxzIHRoZSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBgW11gIHN1YnNjcmlwdHMgXHUyMDE0IHRoYXRcbi8vIHdheSwgaXQnbGwgcmVjZWl2ZSB0aGUgbm9kZSBmb3IgYHhbMV1gIGFscmVhZHkgcGFyc2VkLCBhbmQgd3JhcHNcbi8vICp0aGF0KiBpbiB0aGUgdW5hcnkgb3BlcmF0b3Igbm9kZS5cbi8vXG4vLyBBY29ybiB1c2VzIGFuIFtvcGVyYXRvciBwcmVjZWRlbmNlIHBhcnNlcl1bb3BwXSB0byBoYW5kbGUgYmluYXJ5XG4vLyBvcGVyYXRvciBwcmVjZWRlbmNlLCBiZWNhdXNlIGl0IGlzIG11Y2ggbW9yZSBjb21wYWN0IHRoYW4gdXNpbmdcbi8vIHRoZSB0ZWNobmlxdWUgb3V0bGluZWQgYWJvdmUsIHdoaWNoIHVzZXMgZGlmZmVyZW50LCBuZXN0aW5nXG4vLyBmdW5jdGlvbnMgdG8gc3BlY2lmeSBwcmVjZWRlbmNlLCBmb3IgYWxsIG9mIHRoZSB0ZW4gYmluYXJ5XG4vLyBwcmVjZWRlbmNlIGxldmVscyB0aGF0IEphdmFTY3JpcHQgZGVmaW5lcy5cbi8vXG4vLyBbb3BwXTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGVyYXRvci1wcmVjZWRlbmNlX3BhcnNlclxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZmxvdyA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvZmxvdycpO1xudmFyIF9pbmRleCA9IHJlcXVpcmUoJy4uL3BsdWdpbnMvanN4L2luZGV4Jyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGx1Z2lucy90eXBlcycpO1xuXG5cblxuXG5cblxuXG5cblxudmFyIF90eXBlc2NyaXB0ID0gcmVxdWlyZSgnLi4vcGx1Z2lucy90eXBlc2NyaXB0Jyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgX2luZGV4MyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9pbmRleCcpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9rZXl3b3JkcycpO1xudmFyIF9zdGF0ZSA9IHJlcXVpcmUoJy4uL3Rva2VuaXplci9zdGF0ZScpO1xudmFyIF90eXBlczMgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvdHlwZXMnKTtcbnZhciBfY2hhcmNvZGVzID0gcmVxdWlyZSgnLi4vdXRpbC9jaGFyY29kZXMnKTtcbnZhciBfaWRlbnRpZmllciA9IHJlcXVpcmUoJy4uL3V0aWwvaWRlbnRpZmllcicpO1xudmFyIF9iYXNlID0gcmVxdWlyZSgnLi9iYXNlJyk7XG5cblxuXG5cblxuXG52YXIgX2x2YWwgPSByZXF1aXJlKCcuL2x2YWwnKTtcblxuXG5cblxuXG5cblxudmFyIF9zdGF0ZW1lbnQgPSByZXF1aXJlKCcuL3N0YXRlbWVudCcpO1xuXG5cblxuXG5cblxuXG5cblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiBjbGFzcyBTdG9wU3RhdGUge1xuICBcbiAgY29uc3RydWN0b3Ioc3RvcCkge1xuICAgIHRoaXMuc3RvcCA9IHN0b3A7XG4gIH1cbn0gZXhwb3J0cy5TdG9wU3RhdGUgPSBTdG9wU3RhdGU7XG5cbi8vICMjIyBFeHByZXNzaW9uIHBhcnNpbmdcblxuLy8gVGhlc2UgbmVzdCwgZnJvbSB0aGUgbW9zdCBnZW5lcmFsIGV4cHJlc3Npb24gdHlwZSBhdCB0aGUgdG9wIHRvXG4vLyAnYXRvbWljJywgbm9uZGl2aXNpYmxlIGV4cHJlc3Npb24gdHlwZXMgYXQgdGhlIGJvdHRvbS4gTW9zdCBvZlxuLy8gdGhlIGZ1bmN0aW9ucyB3aWxsIHNpbXBseSBsZXQgdGhlIGZ1bmN0aW9uIChzKSBiZWxvdyB0aGVtIHBhcnNlLFxuLy8gYW5kLCAqaWYqIHRoZSBzeW50YWN0aWMgY29uc3RydWN0IHRoZXkgaGFuZGxlIGlzIHByZXNlbnQsIHdyYXBcbi8vIHRoZSBBU1Qgbm9kZSB0aGF0IHRoZSBpbm5lciBwYXJzZXIgZ2F2ZSB0aGVtIGluIGFub3RoZXIgbm9kZS5cbiBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24obm9JbiA9IGZhbHNlKSB7XG4gIHBhcnNlTWF5YmVBc3NpZ24obm9Jbik7XG4gIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICB3aGlsZSAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgcGFyc2VNYXliZUFzc2lnbihub0luKTtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5wYXJzZUV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb247XG5cbi8qKlxuICogbm9JbiBpcyB1c2VkIHdoZW4gcGFyc2luZyBhIGZvciBsb29wIHNvIHRoYXQgd2UgZG9uJ3QgaW50ZXJwcmV0IGEgZm9sbG93aW5nIFwiaW5cIiBhcyB0aGUgYmluYXJ5XG4gKiBvcGVyYXRpb3IuXG4gKiBpc1dpdGhpblBhcmVucyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgd2UncmUgcGFyc2luZyBzb21ldGhpbmcgdGhhdCBtaWdodCBiZSBhIGNvbW1hIGV4cHJlc3Npb25cbiAqIG9yIG1pZ2h0IGJlIGFuIGFycm93IGZ1bmN0aW9uIG9yIG1pZ2h0IGJlIGEgRmxvdyB0eXBlIGFzc2VydGlvbiAod2hpY2ggcmVxdWlyZXMgZXhwbGljaXQgcGFyZW5zKS5cbiAqIEluIHRoZXNlIGNhc2VzLCB3ZSBzaG91bGQgYWxsb3cgOiBhbmQgPzogYWZ0ZXIgdGhlIGluaXRpYWwgXCJsZWZ0XCIgcGFydC5cbiAqL1xuIGZ1bmN0aW9uIHBhcnNlTWF5YmVBc3NpZ24obm9JbiA9IGZhbHNlLCBpc1dpdGhpblBhcmVucyA9IGZhbHNlKSB7XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgcmV0dXJuIF90eXBlc2NyaXB0LnRzUGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgbm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICByZXR1cm4gX2Zsb3cuZmxvd1BhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZVBhcnNlTWF5YmVBc3NpZ24obm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICB9XG59IGV4cG9ydHMucGFyc2VNYXliZUFzc2lnbiA9IHBhcnNlTWF5YmVBc3NpZ247XG5cbi8vIFBhcnNlIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbi4gVGhpcyBpbmNsdWRlcyBhcHBsaWNhdGlvbnMgb2Zcbi8vIG9wZXJhdG9ycyBsaWtlIGArPWAuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gd2FzIGFuIGFycm93IGZ1bmN0aW9uLlxuIGZ1bmN0aW9uIGJhc2VQYXJzZU1heWJlQXNzaWduKG5vSW4sIGlzV2l0aGluUGFyZW5zKSB7XG4gIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5feWllbGQpKSB7XG4gICAgcGFyc2VZaWVsZCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpIHx8IF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLm5hbWUpIHx8IF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLl95aWVsZCkpIHtcbiAgICBfYmFzZS5zdGF0ZS5wb3RlbnRpYWxBcnJvd0F0ID0gX2Jhc2Uuc3RhdGUuc3RhcnQ7XG4gIH1cblxuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlTWF5YmVDb25kaXRpb25hbChub0luKTtcbiAgaWYgKGlzV2l0aGluUGFyZW5zKSB7XG4gICAgcGFyc2VQYXJlbkl0ZW0oKTtcbiAgfVxuICBpZiAoX2Jhc2Uuc3RhdGUudHlwZSAmIF90eXBlczMuVG9rZW5UeXBlLklTX0FTU0lHTikge1xuICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBwYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gd2FzQXJyb3c7XG59IGV4cG9ydHMuYmFzZVBhcnNlTWF5YmVBc3NpZ24gPSBiYXNlUGFyc2VNYXliZUFzc2lnbjtcblxuLy8gUGFyc2UgYSB0ZXJuYXJ5IGNvbmRpdGlvbmFsIChgPzpgKSBvcGVyYXRvci5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhwcmVzc2lvbiB3YXMgYW4gYXJyb3cgZnVuY3Rpb24uXG5mdW5jdGlvbiBwYXJzZU1heWJlQ29uZGl0aW9uYWwobm9Jbikge1xuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlRXhwck9wcyhub0luKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcGFyc2VDb25kaXRpb25hbChub0luKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsKG5vSW4pIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgfHwgX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF90eXBlcy50eXBlZFBhcnNlQ29uZGl0aW9uYWwuY2FsbCh2b2lkIDAsIG5vSW4pO1xuICB9IGVsc2Uge1xuICAgIGJhc2VQYXJzZUNvbmRpdGlvbmFsKG5vSW4pO1xuICB9XG59XG5cbiBmdW5jdGlvbiBiYXNlUGFyc2VDb25kaXRpb25hbChub0luKSB7XG4gIGlmIChfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucXVlc3Rpb24pKSB7XG4gICAgcGFyc2VNYXliZUFzc2lnbigpO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29sb24pO1xuICAgIHBhcnNlTWF5YmVBc3NpZ24obm9Jbik7XG4gIH1cbn0gZXhwb3J0cy5iYXNlUGFyc2VDb25kaXRpb25hbCA9IGJhc2VQYXJzZUNvbmRpdGlvbmFsO1xuXG4vLyBTdGFydCB0aGUgcHJlY2VkZW5jZSBwYXJzZXIuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB3YXMgYW4gYXJyb3cgZnVuY3Rpb25cbmZ1bmN0aW9uIHBhcnNlRXhwck9wcyhub0luKSB7XG4gIGNvbnN0IHN0YXJ0VG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIGNvbnN0IHdhc0Fycm93ID0gcGFyc2VNYXliZVVuYXJ5KCk7XG4gIGlmICh3YXNBcnJvdykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHBhcnNlRXhwck9wKHN0YXJ0VG9rZW5JbmRleCwgLTEsIG5vSW4pO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFBhcnNlIGJpbmFyeSBvcGVyYXRvcnMgd2l0aCB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZSBwYXJzaW5nXG4vLyBhbGdvcml0aG0uIGBsZWZ0YCBpcyB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIG9wZXJhdG9yLlxuLy8gYG1pblByZWNgIHByb3ZpZGVzIGNvbnRleHQgdGhhdCBhbGxvd3MgdGhlIGZ1bmN0aW9uIHRvIHN0b3AgYW5kXG4vLyBkZWZlciBmdXJ0aGVyIHBhcnNlciB0byBvbmUgb2YgaXRzIGNhbGxlcnMgd2hlbiBpdCBlbmNvdW50ZXJzIGFuXG4vLyBvcGVyYXRvciB0aGF0IGhhcyBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiB0aGUgc2V0IGl0IGlzIHBhcnNpbmcuXG5mdW5jdGlvbiBwYXJzZUV4cHJPcChzdGFydFRva2VuSW5kZXgsIG1pblByZWMsIG5vSW4pIHtcbiAgaWYgKFxuICAgIF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgJiZcbiAgICAoX3R5cGVzMy5Ub2tlblR5cGUuX2luICYgX3R5cGVzMy5Ub2tlblR5cGUuUFJFQ0VERU5DRV9NQVNLKSA+IG1pblByZWMgJiZcbiAgICAhX3V0aWwuaGFzUHJlY2VkaW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApICYmXG4gICAgKF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXMpIHx8IF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc2F0aXNmaWVzKSlcbiAgKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4My5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgIF90eXBlc2NyaXB0LnRzUGFyc2VUeXBlLmNhbGwodm9pZCAwLCApO1xuICAgIF9pbmRleDMucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgX2luZGV4My5yZXNjYW5fZ3QuY2FsbCh2b2lkIDAsICk7XG4gICAgcGFyc2VFeHByT3Aoc3RhcnRUb2tlbkluZGV4LCBtaW5QcmVjLCBub0luKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcmVjID0gX2Jhc2Uuc3RhdGUudHlwZSAmIF90eXBlczMuVG9rZW5UeXBlLlBSRUNFREVOQ0VfTUFTSztcbiAgaWYgKHByZWMgPiAwICYmICghbm9JbiB8fCAhX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuX2luKSkpIHtcbiAgICBpZiAocHJlYyA+IG1pblByZWMpIHtcbiAgICAgIGNvbnN0IG9wID0gX2Jhc2Uuc3RhdGUudHlwZTtcbiAgICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIGlmIChvcCA9PT0gX3R5cGVzMy5Ub2tlblR5cGUubnVsbGlzaENvYWxlc2NpbmcpIHtcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5udWxsaXNoU3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmhzU3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgICAgIHBhcnNlTWF5YmVVbmFyeSgpO1xuICAgICAgLy8gRXh0ZW5kIHRoZSByaWdodCBvcGVyYW5kIG9mIHRoaXMgb3BlcmF0b3IgaWYgcG9zc2libGUuXG4gICAgICBwYXJzZUV4cHJPcChyaHNTdGFydFRva2VuSW5kZXgsIG9wICYgX3R5cGVzMy5Ub2tlblR5cGUuSVNfUklHSFRfQVNTT0NJQVRJVkUgPyBwcmVjIC0gMSA6IHByZWMsIG5vSW4pO1xuICAgICAgaWYgKG9wID09PSBfdHlwZXMzLlRva2VuVHlwZS5udWxsaXNoQ29hbGVzY2luZykge1xuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbc3RhcnRUb2tlbkluZGV4XS5udW1OdWxsaXNoQ29hbGVzY2VTdGFydHMrKztcbiAgICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5udW1OdWxsaXNoQ29hbGVzY2VFbmRzKys7XG4gICAgICB9XG4gICAgICAvLyBDb250aW51ZSB3aXRoIGFueSBmdXR1cmUgb3BlcmF0b3IgaG9sZGluZyB0aGlzIGV4cHJlc3Npb24gYXMgdGhlIGxlZnQgb3BlcmFuZC5cbiAgICAgIHBhcnNlRXhwck9wKHN0YXJ0VG9rZW5JbmRleCwgbWluUHJlYywgbm9Jbik7XG4gICAgfVxuICB9XG59XG5cbi8vIFBhcnNlIHVuYXJ5IG9wZXJhdG9ycywgYm90aCBwcmVmaXggYW5kIHBvc3RmaXguXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB3YXMgYW4gYXJyb3cgZnVuY3Rpb24uXG4gZnVuY3Rpb24gcGFyc2VNYXliZVVuYXJ5KCkge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCAmJiAhX2Jhc2UuaXNKU1hFbmFibGVkICYmIF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlVHlwZUFzc2VydGlvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpICYmXG4gICAgX2luZGV4My5sb29rYWhlYWRDaGFyQ29kZS5jYWxsKHZvaWQgMCwgKSA9PT0gX2NoYXJjb2Rlcy5jaGFyQ29kZXMubGVmdEN1cmx5QnJhY2UgJiZcbiAgICAhX3V0aWwuaGFzRm9sbG93aW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApXG4gICkge1xuICAgIHBhcnNlTW9kdWxlRXhwcmVzc2lvbigpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoX2Jhc2Uuc3RhdGUudHlwZSAmIF90eXBlczMuVG9rZW5UeXBlLklTX1BSRUZJWCkge1xuICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBwYXJzZU1heWJlVW5hcnkoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlRXhwclN1YnNjcmlwdHMoKTtcbiAgaWYgKHdhc0Fycm93KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgd2hpbGUgKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMzLlRva2VuVHlwZS5JU19QT1NURklYICYmICFfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsICkpIHtcbiAgICAvLyBUaGUgdG9rZW5pemVyIGNhbGxzIGV2ZXJ5dGhpbmcgYSBwcmVpbmNyZW1lbnQsIHNvIG1ha2UgaXQgYSBwb3N0aW5jcmVtZW50IHdoZW5cbiAgICAvLyB3ZSBzZWUgaXQgaW4gdGhhdCBjb250ZXh0LlxuICAgIGlmIChfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMzLlRva2VuVHlwZS5wcmVJbmNEZWMpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnR5cGUgPSBfdHlwZXMzLlRva2VuVHlwZS5wb3N0SW5jRGVjO1xuICAgIH1cbiAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSBleHBvcnRzLnBhcnNlTWF5YmVVbmFyeSA9IHBhcnNlTWF5YmVVbmFyeTtcblxuLy8gUGFyc2UgY2FsbCwgZG90LCBhbmQgYFtdYC1zdWJzY3JpcHQgZXhwcmVzc2lvbnMuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB3YXMgYW4gYXJyb3cgZnVuY3Rpb24uXG4gZnVuY3Rpb24gcGFyc2VFeHByU3Vic2NyaXB0cygpIHtcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZUV4cHJBdG9tKCk7XG4gIGlmICh3YXNBcnJvdykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHBhcnNlU3Vic2NyaXB0cyhzdGFydFRva2VuSW5kZXgpO1xuICAvLyBJZiB0aGVyZSB3YXMgYW55IG9wdGlvbmFsIGNoYWluIG9wZXJhdGlvbiwgdGhlIHN0YXJ0IHRva2VuIHdvdWxkIGJlIG1hcmtlZFxuICAvLyBhcyBzdWNoLCBzbyBhbHNvIG1hcmsgdGhlIGVuZCBub3cuXG4gIGlmIChfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoID4gc3RhcnRUb2tlbkluZGV4ICYmIF9iYXNlLnN0YXRlLnRva2Vuc1tzdGFydFRva2VuSW5kZXhdLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pc09wdGlvbmFsQ2hhaW5FbmQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0gZXhwb3J0cy5wYXJzZUV4cHJTdWJzY3JpcHRzID0gcGFyc2VFeHByU3Vic2NyaXB0cztcblxuZnVuY3Rpb24gcGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyA9IGZhbHNlKSB7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1BhcnNlU3Vic2NyaXB0cy5jYWxsKHZvaWQgMCwgc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlUGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyk7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIGJhc2VQYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzID0gZmFsc2UpIHtcbiAgY29uc3Qgc3RvcFN0YXRlID0gbmV3IFN0b3BTdGF0ZShmYWxzZSk7XG4gIGRvIHtcbiAgICBwYXJzZVN1YnNjcmlwdChzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSk7XG4gIH0gd2hpbGUgKCFzdG9wU3RhdGUuc3RvcCAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpO1xufSBleHBvcnRzLmJhc2VQYXJzZVN1YnNjcmlwdHMgPSBiYXNlUGFyc2VTdWJzY3JpcHRzO1xuXG5mdW5jdGlvbiBwYXJzZVN1YnNjcmlwdChzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSkge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIF90eXBlc2NyaXB0LnRzUGFyc2VTdWJzY3JpcHQuY2FsbCh2b2lkIDAsIHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbiAgfSBlbHNlIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1BhcnNlU3Vic2NyaXB0LmNhbGwodm9pZCAwLCBzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlU3Vic2NyaXB0KHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscywgc3RvcFN0YXRlKTtcbiAgfVxufVxuXG4vKiogU2V0ICdzdGF0ZS5zdG9wID0gdHJ1ZScgdG8gaW5kaWNhdGUgdGhhdCB3ZSBzaG91bGQgc3RvcCBwYXJzaW5nIHN1YnNjcmlwdHMuICovXG4gZnVuY3Rpb24gYmFzZVBhcnNlU3Vic2NyaXB0KFxuICBzdGFydFRva2VuSW5kZXgsXG4gIG5vQ2FsbHMsXG4gIHN0b3BTdGF0ZSxcbikge1xuICBpZiAoIW5vQ2FsbHMgJiYgX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmRvdWJsZUNvbG9uKSkge1xuICAgIHBhcnNlTm9DYWxsRXhwcigpO1xuICAgIHN0b3BTdGF0ZS5zdG9wID0gdHJ1ZTtcbiAgICAvLyBQcm9wYWdhdGUgc3RhcnRUb2tlbkluZGV4IHNvIHRoYXQgYGE6OmI/LigpYCB3aWxsIGtlZXAgYGFgIGFzIHRoZSBmaXJzdCB0b2tlbi4gV2UgbWF5IHdhbnRcbiAgICAvLyB0byByZXZpc2l0IHRoaXMgaW4gdGhlIGZ1dHVyZSB3aGVuIGZ1bGx5IHN1cHBvcnRpbmcgYmluZCBzeW50YXguXG4gICAgcGFyc2VTdWJzY3JpcHRzKHN0YXJ0VG9rZW5JbmRleCwgbm9DYWxscyk7XG4gIH0gZWxzZSBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucXVlc3Rpb25Eb3QpKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW3N0YXJ0VG9rZW5JbmRleF0uaXNPcHRpb25hbENoYWluU3RhcnQgPSB0cnVlO1xuICAgIGlmIChub0NhbGxzICYmIF9pbmRleDMubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzMy5Ub2tlblR5cGUucGFyZW5MKSB7XG4gICAgICBzdG9wU3RhdGUuc3RvcCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnN1YnNjcmlwdFN0YXJ0SW5kZXggPSBzdGFydFRva2VuSW5kZXg7XG5cbiAgICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgICAgcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbiAgICB9IGVsc2UgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlTWF5YmVQcml2YXRlTmFtZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuZG90KSkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uc3Vic2NyaXB0U3RhcnRJbmRleCA9IHN0YXJ0VG9rZW5JbmRleDtcbiAgICBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKTtcbiAgfSBlbHNlIGlmIChfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2tldEwpKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2tldFIpO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICBpZiAoYXRQb3NzaWJsZUFzeW5jKCkpIHtcbiAgICAgIC8vIFdlIHNlZSBcImFzeW5jXCIsIGJ1dCBpdCdzIHBvc3NpYmxlIGl0J3MgYSB1c2FnZSBvZiB0aGUgbmFtZSBcImFzeW5jXCIuIFBhcnNlIGFzIGlmIGl0J3MgYVxuICAgICAgLy8gZnVuY3Rpb24gY2FsbCwgYW5kIGlmIHdlIHNlZSBhbiBhcnJvdyBsYXRlciwgYmFja3RyYWNrIGFuZCByZS1wYXJzZSBhcyBhIHBhcmFtZXRlciBsaXN0LlxuICAgICAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICAgICAgY29uc3QgYXN5bmNTdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuXG4gICAgICBjb25zdCBjYWxsQ29udGV4dElkID0gX2Jhc2UuZ2V0TmV4dENvbnRleHRJZC5jYWxsKHZvaWQgMCwgKTtcblxuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjYWxsQ29udGV4dElkO1xuICAgICAgcGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygpO1xuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjYWxsQ29udGV4dElkO1xuXG4gICAgICBpZiAoc2hvdWxkUGFyc2VBc3luY0Fycm93KCkpIHtcbiAgICAgICAgLy8gV2UgaGl0IGFuIGFycm93LCBzbyBiYWNrdHJhY2sgYW5kIHN0YXJ0IGFnYWluIHBhcnNpbmcgZnVuY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICAgIHN0b3BTdGF0ZS5zdG9wID0gdHJ1ZTtcbiAgICAgICAgX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aCsrO1xuXG4gICAgICAgIF9zdGF0ZW1lbnQucGFyc2VGdW5jdGlvblBhcmFtcy5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgcGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKGFzeW5jU3RhcnRUb2tlbkluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5zdWJzY3JpcHRTdGFydEluZGV4ID0gc3RhcnRUb2tlbkluZGV4O1xuICAgICAgY29uc3QgY2FsbENvbnRleHRJZCA9IF9iYXNlLmdldE5leHRDb250ZXh0SWQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNhbGxDb250ZXh0SWQ7XG4gICAgICBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCk7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNhbGxDb250ZXh0SWQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJhY2tRdW90ZSkpIHtcbiAgICAvLyBUYWdnZWQgdGVtcGxhdGUgZXhwcmVzc2lvbi5cbiAgICBwYXJzZVRlbXBsYXRlKCk7XG4gIH0gZWxzZSB7XG4gICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICB9XG59IGV4cG9ydHMuYmFzZVBhcnNlU3Vic2NyaXB0ID0gYmFzZVBhcnNlU3Vic2NyaXB0O1xuXG4gZnVuY3Rpb24gYXRQb3NzaWJsZUFzeW5jKCkge1xuICAvLyBUaGlzIHdhcyBtYWRlIGxlc3Mgc3RyaWN0IHRoYW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gdG8gYXZvaWQgcGFzc2luZyBhcm91bmQgbm9kZXMsIGJ1dCBpdFxuICAvLyBzaG91bGQgYmUgc2FmZSB0byBoYXZlIHJhcmUgZmFsc2UgcG9zaXRpdmVzIGhlcmUuXG4gIHJldHVybiAoXG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3luYyAmJlxuICAgICFfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsIClcbiAgKTtcbn0gZXhwb3J0cy5hdFBvc3NpYmxlQXN5bmMgPSBhdFBvc3NpYmxlQXN5bmM7XG5cbiBmdW5jdGlvbiBwYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKCkge1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuICB3aGlsZSAoIV9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlblIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnBhcmVuUikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VFeHByTGlzdEl0ZW0oZmFsc2UpO1xuICB9XG59IGV4cG9ydHMucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cyA9IHBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHM7XG5cbmZ1bmN0aW9uIHNob3VsZFBhcnNlQXN5bmNBcnJvdygpIHtcbiAgcmV0dXJuIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmNvbG9uKSB8fCBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5hcnJvdyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbihzdGFydFRva2VuSW5kZXgpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1N0YXJ0UGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5hcnJvdyk7XG4gIHBhcnNlQXJyb3dFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCk7XG59XG5cbi8vIFBhcnNlIGEgbm8tY2FsbCBleHByZXNzaW9uIChsaWtlIGFyZ3VtZW50IG9mIGBuZXdgIG9yIGA6OmAgb3BlcmF0b3JzKS5cblxuZnVuY3Rpb24gcGFyc2VOb0NhbGxFeHByKCkge1xuICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBwYXJzZUV4cHJBdG9tKCk7XG4gIHBhcnNlU3Vic2NyaXB0cyhzdGFydFRva2VuSW5kZXgsIHRydWUpO1xufVxuXG4vLyBQYXJzZSBhbiBhdG9taWMgZXhwcmVzc2lvbiBcdTIwMTQgZWl0aGVyIGEgc2luZ2xlIHRva2VuIHRoYXQgaXMgYW5cbi8vIGV4cHJlc3Npb24sIGFuIGV4cHJlc3Npb24gc3RhcnRlZCBieSBhIGtleXdvcmQgbGlrZSBgZnVuY3Rpb25gIG9yXG4vLyBgbmV3YCwgb3IgYW4gZXhwcmVzc2lvbiB3cmFwcGVkIGluIHB1bmN0dWF0aW9uIGxpa2UgYCgpYCwgYFtdYCxcbi8vIG9yIGB7fWAuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcnNlZCBleHByZXNzaW9uIHdhcyBhbiBhcnJvdyBmdW5jdGlvbi5cbiBmdW5jdGlvbiBwYXJzZUV4cHJBdG9tKCkge1xuICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLm1vZHVsbykpIHtcbiAgICAvLyBWOCBpbnRyaW5zaWMgZXhwcmVzc2lvbi4gSnVzdCBwYXJzZSB0aGUgaWRlbnRpZmllciwgYW5kIHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uIGlzIHBhcnNlZFxuICAgIC8vIG5hdHVyYWxseS5cbiAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuanN4VGV4dCkgfHwgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuanN4RW1wdHlUZXh0KSkge1xuICAgIHBhcnNlTGl0ZXJhbCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5sZXNzVGhhbikgJiYgX2Jhc2UuaXNKU1hFbmFibGVkKSB7XG4gICAgX2Jhc2Uuc3RhdGUudHlwZSA9IF90eXBlczMuVG9rZW5UeXBlLmpzeFRhZ1N0YXJ0O1xuICAgIF9pbmRleC5qc3hQYXJzZUVsZW1lbnQuY2FsbCh2b2lkIDAsICk7XG4gICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNhbkJlQXJyb3cgPSBfYmFzZS5zdGF0ZS5wb3RlbnRpYWxBcnJvd0F0ID09PSBfYmFzZS5zdGF0ZS5zdGFydDtcbiAgc3dpdGNoIChfYmFzZS5zdGF0ZS50eXBlKSB7XG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5zbGFzaDpcbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLmFzc2lnbjpcbiAgICAgIF9pbmRleDMucmV0b2tlbml6ZVNsYXNoQXNSZWdleC5jYWxsKHZvaWQgMCwgKTtcbiAgICAvLyBGYWxsIHRocm91Z2guXG5cbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl9zdXBlcjpcbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl90aGlzOlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUucmVnZXhwOlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUubnVtOlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYmlnaW50OlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuZGVjaW1hbDpcbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLnN0cmluZzpcbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl9udWxsOlxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuX3RydWU6XG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5fZmFsc2U6XG4gICAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl9pbXBvcnQ6XG4gICAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgICAvLyBpbXBvcnQubWV0YVxuICAgICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMzLlRva2VuVHlwZS5uYW1lO1xuICAgICAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5uYW1lOiB7XG4gICAgICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgY29uc3QgZnVuY3Rpb25TdGFydCA9IF9iYXNlLnN0YXRlLnN0YXJ0O1xuICAgICAgY29uc3QgY29udGV4dHVhbEtleXdvcmQgPSBfYmFzZS5zdGF0ZS5jb250ZXh0dWFsS2V5d29yZDtcbiAgICAgIHBhcnNlSWRlbnRpZmllcigpO1xuICAgICAgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0KSB7XG4gICAgICAgIHBhcnNlQXdhaXQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMgJiZcbiAgICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSAmJlxuICAgICAgICAhX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApXG4gICAgICApIHtcbiAgICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgICBfc3RhdGVtZW50LnBhcnNlRnVuY3Rpb24uY2FsbCh2b2lkIDAsIGZ1bmN0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY2FuQmVBcnJvdyAmJlxuICAgICAgICBjb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3luYyAmJlxuICAgICAgICAhX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApICYmXG4gICAgICAgIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLm5hbWUpXG4gICAgICApIHtcbiAgICAgICAgX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aCsrO1xuICAgICAgICBfbHZhbC5wYXJzZUJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCBmYWxzZSk7XG4gICAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYXJyb3cpO1xuICAgICAgICAvLyBsZXQgZm9vID0gYXN5bmMgYmFyID0+IHt9O1xuICAgICAgICBwYXJzZUFycm93RXhwcmVzc2lvbihzdGFydFRva2VuSW5kZXgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuX2RvKSAmJiAhX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApKSB7XG4gICAgICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgX3N0YXRlbWVudC5wYXJzZUJsb2NrLmNhbGwodm9pZCAwLCApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYW5CZUFycm93ICYmICFfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsICkgJiYgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYXJyb3cpKSB7XG4gICAgICAgIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgICAgX2x2YWwubWFya1ByaW9yQmluZGluZ0lkZW50aWZpZXIuY2FsbCh2b2lkIDAsIGZhbHNlKTtcbiAgICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5hcnJvdyk7XG4gICAgICAgIHBhcnNlQXJyb3dFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gX2luZGV4My5JZGVudGlmaWVyUm9sZS5BY2Nlc3M7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5fZG86IHtcbiAgICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VCbG9jay5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLnBhcmVuTDoge1xuICAgICAgY29uc3Qgd2FzQXJyb3cgPSBwYXJzZVBhcmVuQW5kRGlzdGluZ3Vpc2hFeHByZXNzaW9uKGNhbkJlQXJyb3cpO1xuICAgICAgcmV0dXJuIHdhc0Fycm93O1xuICAgIH1cblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2tldEw6XG4gICAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBwYXJzZUV4cHJMaXN0KF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRSLCB0cnVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VMOlxuICAgICAgcGFyc2VPYmooZmFsc2UsIGZhbHNlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuX2Z1bmN0aW9uOlxuICAgICAgcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYXQ6XG4gICAgICBfc3RhdGVtZW50LnBhcnNlRGVjb3JhdG9ycy5jYWxsKHZvaWQgMCwgKTtcbiAgICAvLyBGYWxsIHRocm91Z2guXG5cbiAgICBjYXNlIF90eXBlczMuVG9rZW5UeXBlLl9jbGFzczpcbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VDbGFzcy5jYWxsKHZvaWQgMCwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5fbmV3OlxuICAgICAgcGFyc2VOZXcoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgX3R5cGVzMy5Ub2tlblR5cGUuYmFja1F1b3RlOlxuICAgICAgcGFyc2VUZW1wbGF0ZSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5kb3VibGVDb2xvbjoge1xuICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgcGFyc2VOb0NhbGxFeHByKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY2FzZSBfdHlwZXMzLlRva2VuVHlwZS5oYXNoOiB7XG4gICAgICBjb25zdCBjb2RlID0gX2luZGV4My5sb29rYWhlYWRDaGFyQ29kZS5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIGlmIChfaWRlbnRpZmllci5JU19JREVOVElGSUVSX1NUQVJUW2NvZGVdIHx8IGNvZGUgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmJhY2tzbGFzaCkge1xuICAgICAgICBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIH1cbiAgICAgIC8vIFNtYXJ0IHBpcGVsaW5lIHRvcGljIHJlZmVyZW5jZS5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSBleHBvcnRzLnBhcnNlRXhwckF0b20gPSBwYXJzZUV4cHJBdG9tO1xuXG5mdW5jdGlvbiBwYXJzZU1heWJlUHJpdmF0ZU5hbWUoKSB7XG4gIF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5oYXNoKTtcbiAgcGFyc2VJZGVudGlmaWVyKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkge1xuICBjb25zdCBmdW5jdGlvblN0YXJ0ID0gX2Jhc2Uuc3RhdGUuc3RhcnQ7XG4gIHBhcnNlSWRlbnRpZmllcigpO1xuICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAvLyBmdW5jdGlvbi5zZW50XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gIH1cbiAgX3N0YXRlbWVudC5wYXJzZUZ1bmN0aW9uLmNhbGwodm9pZCAwLCBmdW5jdGlvblN0YXJ0LCBmYWxzZSk7XG59XG5cbiBmdW5jdGlvbiBwYXJzZUxpdGVyYWwoKSB7XG4gIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy5wYXJzZUxpdGVyYWwgPSBwYXJzZUxpdGVyYWw7XG5cbiBmdW5jdGlvbiBwYXJzZVBhcmVuRXhwcmVzc2lvbigpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpO1xuICBwYXJzZUV4cHJlc3Npb24oKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlblIpO1xufSBleHBvcnRzLnBhcnNlUGFyZW5FeHByZXNzaW9uID0gcGFyc2VQYXJlbkV4cHJlc3Npb247XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBhcnJvdyBleHByZXNzaW9uLlxuZnVuY3Rpb24gcGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihjYW5CZUFycm93KSB7XG4gIC8vIEFzc3VtZSB0aGlzIGlzIGEgbm9ybWFsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiwgYnV0IGlmIHdlIHNlZSBhbiBhcnJvdywgd2UnbGwgYmFpbCBhbmRcbiAgLy8gc3RhcnQgb3ZlciBhcyBhIHBhcmFtZXRlciBsaXN0LlxuICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG5cbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpO1xuXG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgd2hpbGUgKCFfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlblIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgICBfbHZhbC5wYXJzZVJlc3QuY2FsbCh2b2lkIDAsIGZhbHNlIC8qIGlzQmxvY2tTY29wZSAqLyk7XG4gICAgICBwYXJzZVBhcmVuSXRlbSgpO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucGFyZW5SKTtcblxuICBpZiAoY2FuQmVBcnJvdyAmJiBzaG91bGRQYXJzZUFycm93KCkpIHtcbiAgICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlQXJyb3coKTtcbiAgICBpZiAod2FzQXJyb3cpIHtcbiAgICAgIC8vIEl0IHdhcyBhbiBhcnJvdyBmdW5jdGlvbiB0aGlzIHdob2xlIHRpbWUsIHNvIHN0YXJ0IG92ZXIgYW5kIHBhcnNlIGl0IGFzIHBhcmFtcyBzbyB0aGF0IHdlXG4gICAgICAvLyBnZXQgcHJvcGVyIHRva2VuIGFubm90YXRpb25zLlxuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoKys7XG4gICAgICAvLyBEb24ndCBzcGVjaWZ5IGEgY29udGV4dCBJRCBiZWNhdXNlIGFycm93IGZ1bmN0aW9ucyBkb24ndCBuZWVkIGEgY29udGV4dCBJRC5cbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VGdW5jdGlvblBhcmFtcy5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIHBhcnNlQXJyb3coKTtcbiAgICAgIHBhcnNlQXJyb3dFeHByZXNzaW9uKHN0YXJ0VG9rZW5JbmRleCk7XG4gICAgICBpZiAoX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICAgICAgLy8gTmV2ZXJtaW5kISBUaGlzIG11c3QgaGF2ZSBiZWVuIHNvbWV0aGluZyB0aGF0IGxvb2tzIHZlcnkgbXVjaCBsaWtlIGFuXG4gICAgICAgIC8vIGFycm93IGZ1bmN0aW9uIGJ1dCB3aGVyZSBpdHMgXCJwYXJhbWV0ZXIgbGlzdFwiIGlzbid0IGFjdHVhbGx5IGEgdmFsaWRcbiAgICAgICAgLy8gcGFyYW1ldGVyIGxpc3QuIEZvcmNlIG5vbi1hcnJvdyBwYXJzaW5nLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FsYW5ncGllcmNlL3N1Y3Jhc2UvaXNzdWVzLzY2NiBmb3IgYW4gZXhhbXBsZS5cbiAgICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICAgIHBhcnNlUGFyZW5BbmREaXN0aW5ndWlzaEV4cHJlc3Npb24oZmFsc2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFBhcnNlQXJyb3coKSB7XG4gIHJldHVybiBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb2xvbikgfHwgIV91dGlsLmNhbkluc2VydFNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn1cblxuLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBhbiBhcnJvdyB0b2tlbi5cbiBmdW5jdGlvbiBwYXJzZUFycm93KCkge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIHJldHVybiBfdHlwZXNjcmlwdC50c1BhcnNlQXJyb3cuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIHJldHVybiBfZmxvdy5mbG93UGFyc2VBcnJvdy5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmFycm93KTtcbiAgfVxufSBleHBvcnRzLnBhcnNlQXJyb3cgPSBwYXJzZUFycm93O1xuXG5mdW5jdGlvbiBwYXJzZVBhcmVuSXRlbSgpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgfHwgX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF90eXBlcy50eXBlZFBhcnNlUGFyZW5JdGVtLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbi8vIE5ldydzIHByZWNlZGVuY2UgaXMgc2xpZ2h0bHkgdHJpY2t5LiBJdCBtdXN0IGFsbG93IGl0cyBhcmd1bWVudCB0b1xuLy8gYmUgYSBgW11gIG9yIGRvdCBzdWJzY3JpcHQgZXhwcmVzc2lvbiwgYnV0IG5vdCBhIGNhbGwgXHUyMDE0IGF0IGxlYXN0LFxuLy8gbm90IHdpdGhvdXQgd3JhcHBpbmcgaXQgaW4gcGFyZW50aGVzZXMuIFRodXMsIGl0IHVzZXMgdGhlIG5vQ2FsbHNcbi8vIGFyZ3VtZW50IHRvIHBhcnNlU3Vic2NyaXB0cyB0byBwcmV2ZW50IGl0IGZyb20gY29uc3VtaW5nIHRoZVxuLy8gYXJndW1lbnQgbGlzdC5cbmZ1bmN0aW9uIHBhcnNlTmV3KCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLl9uZXcpO1xuICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAvLyBuZXcudGFyZ2V0XG4gICAgcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhcnNlTmV3Q2FsbGVlKCk7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1N0YXJ0UGFyc2VOZXdBcmd1bWVudHMuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgcGFyc2VFeHByTGlzdChfdHlwZXMzLlRva2VuVHlwZS5wYXJlblIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV3Q2FsbGVlKCkge1xuICBwYXJzZU5vQ2FsbEV4cHIoKTtcbiAgX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnF1ZXN0aW9uRG90KTtcbn1cblxuIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGUoKSB7XG4gIC8vIEZpbmlzaCBgLCByZWFkIHF1YXNpXG4gIF9pbmRleDMubmV4dFRlbXBsYXRlVG9rZW4uY2FsbCh2b2lkIDAsICk7XG4gIC8vIEZpbmlzaCBxdWFzaSwgcmVhZCAke1xuICBfaW5kZXgzLm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICB3aGlsZSAoIV9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJhY2tRdW90ZSkgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5kb2xsYXJCcmFjZUwpO1xuICAgIHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIC8vIEZpbmlzaCB9LCByZWFkIHF1YXNpXG4gICAgX2luZGV4My5uZXh0VGVtcGxhdGVUb2tlbi5jYWxsKHZvaWQgMCwgKTtcbiAgICAvLyBGaW5pc2ggcXVhc2ksIHJlYWQgZWl0aGVyICR7IG9yIGBcbiAgICBfaW5kZXgzLm5leHRUZW1wbGF0ZVRva2VuLmNhbGwodm9pZCAwLCApO1xuICB9XG4gIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy5wYXJzZVRlbXBsYXRlID0gcGFyc2VUZW1wbGF0ZTtcblxuLy8gUGFyc2UgYW4gb2JqZWN0IGxpdGVyYWwgb3IgYmluZGluZyBwYXR0ZXJuLlxuIGZ1bmN0aW9uIHBhcnNlT2JqKGlzUGF0dGVybiwgaXNCbG9ja1Njb3BlKSB7XG4gIC8vIEF0dGFjaCBhIGNvbnRleHQgSUQgdG8gdGhlIG9iamVjdCBvcGVuIGFuZCBjbG9zZSBicmFjZSBhbmQgZWFjaCBvYmplY3Qga2V5LlxuICBjb25zdCBjb250ZXh0SWQgPSBfYmFzZS5nZXROZXh0Q29udGV4dElkLmNhbGwodm9pZCAwLCApO1xuICBsZXQgZmlyc3QgPSB0cnVlO1xuXG4gIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG5cbiAgd2hpbGUgKCFfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VSKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29tbWEpO1xuICAgICAgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpc0dlbmVyYXRvciA9IGZhbHNlO1xuICAgIGlmIChfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5lbGxpcHNpcykpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgICAgX2x2YWwucGFyc2VTcHJlYWQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICAgIC8vIE1hcmsgcm9sZSB3aGVuIHRoZSBvbmx5IHRoaW5nIGJlaW5nIHNwcmVhZCBvdmVyIGlzIGFuIGlkZW50aWZpZXIuXG4gICAgICAgIGlmIChfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoID09PSBwcmV2aW91c0luZGV4ICsgMikge1xuICAgICAgICAgIF9sdmFsLm1hcmtQcmlvckJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCBpc0Jsb2NrU2NvcGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzUGF0dGVybikge1xuICAgICAgaXNHZW5lcmF0b3IgPSBfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuc3Rhcik7XG4gICAgfVxuXG4gICAgaWYgKCFpc1BhdHRlcm4gJiYgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSkge1xuICAgICAgaWYgKGlzR2VuZXJhdG9yKSBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuXG4gICAgICBwYXJzZUlkZW50aWZpZXIoKTtcbiAgICAgIGlmIChcbiAgICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29sb24pIHx8XG4gICAgICAgIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnBhcmVuTCkgfHxcbiAgICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VSKSB8fFxuICAgICAgICBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5lcSkgfHxcbiAgICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29tbWEpXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIGtleSBjYWxsZWQgXCJhc3luY1wiIHJhdGhlciB0aGFuIGFuIGFzeW5jIGZ1bmN0aW9uLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnN0YXIpKSB7XG4gICAgICAgICAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgICAgIGlzR2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZVByb3BlcnR5TmFtZShjb250ZXh0SWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZVByb3BlcnR5TmFtZShjb250ZXh0SWQpO1xuICAgIH1cblxuICAgIHBhcnNlT2JqUHJvcFZhbHVlKGlzUGF0dGVybiwgaXNCbG9ja1Njb3BlLCBjb250ZXh0SWQpO1xuICB9XG5cbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG59IGV4cG9ydHMucGFyc2VPYmogPSBwYXJzZU9iajtcblxuZnVuY3Rpb24gaXNHZXR0ZXJPclNldHRlck1ldGhvZChpc1BhdHRlcm4pIHtcbiAgLy8gV2UgZ28gb2ZmIG9mIHRoZSBuZXh0IGFuZCBkb24ndCBib3RoZXIgY2hlY2tpbmcgaWYgdGhlIG5vZGUga2V5IGlzIGFjdHVhbGx5IFwiZ2V0XCIgb3IgXCJzZXRcIi5cbiAgLy8gVGhpcyBsZXRzIHVzIGF2b2lkIGdlbmVyYXRpbmcgYSBub2RlLCBhbmQgc2hvdWxkIG9ubHkgbWFrZSB0aGUgdmFsaWRhdGlvbiB3b3JzZS5cbiAgcmV0dXJuIChcbiAgICAhaXNQYXR0ZXJuICYmXG4gICAgKF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnN0cmluZykgfHwgLy8gZ2V0IFwic3RyaW5nXCIoKSB7fVxuICAgICAgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUubnVtKSB8fCAvLyBnZXQgMSgpIHt9XG4gICAgICBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5icmFja2V0TCkgfHwgLy8gZ2V0IFtcInN0cmluZ1wiXSgpIHt9XG4gICAgICBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5uYW1lKSB8fCAvLyBnZXQgZm9vKCkge31cbiAgICAgICEhKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMzLlRva2VuVHlwZS5JU19LRVlXT1JEKSkgLy8gZ2V0IGRlYnVnZ2VyKCkge31cbiAgKTtcbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgd2FzIGEgbWV0aG9kLlxuZnVuY3Rpb24gcGFyc2VPYmplY3RNZXRob2QoaXNQYXR0ZXJuLCBvYmplY3RDb250ZXh0SWQpIHtcbiAgLy8gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBtb2RpZmllcnMgYmVjYXVzZSBvYmplY3QgbWV0aG9kcyBjYW4ndCBoYXZlIG9wdGlvbmFsIGJvZGllcywgc29cbiAgLy8gdGhlIHN0YXJ0IHdpbGwgbmV2ZXIgYmUgdXNlZC5cbiAgY29uc3QgZnVuY3Rpb25TdGFydCA9IF9iYXNlLnN0YXRlLnN0YXJ0O1xuICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgIGlmIChpc1BhdHRlcm4pIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gICAgcGFyc2VNZXRob2QoZnVuY3Rpb25TdGFydCwgLyogaXNDb25zdHJ1Y3RvciAqLyBmYWxzZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNHZXR0ZXJPclNldHRlck1ldGhvZChpc1BhdHRlcm4pKSB7XG4gICAgcGFyc2VQcm9wZXJ0eU5hbWUob2JqZWN0Q29udGV4dElkKTtcbiAgICBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCAvKiBpc0NvbnN0cnVjdG9yICovIGZhbHNlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUpIHtcbiAgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICBfbHZhbC5wYXJzZU1heWJlRGVmYXVsdC5jYWxsKHZvaWQgMCwgaXNCbG9ja1Njb3BlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VNYXliZUFzc2lnbihmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gY29sb24sIHdlIGFzc3VtZSB0aGlzIGlzIGFuIG9iamVjdCBzaG9ydGhhbmQuXG5cbiAgLy8gSWYgd2UncmUgaW4gYSBkZXN0cnVjdHVyaW5nLCB3ZSd2ZSBub3cgZGlzY292ZXJlZCB0aGF0IHRoZSBrZXkgd2FzIGFjdHVhbGx5IGFuIGFzc2lnbmVlLCBzb1xuICAvLyB3ZSBuZWVkIHRvIHRhZyBpdCBhcyBhIGRlY2xhcmF0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNjb3BlLiBPdGhlcndpc2UsIHdlIG1pZ2h0IG5lZWQgdG9cbiAgLy8gdHJhbnNmb3JtIGl0IG9uIGFjY2Vzcywgc28gbWFyayBpdCBhcyBhIG5vcm1hbCBvYmplY3Qgc2hvcnRoYW5kLlxuICBsZXQgaWRlbnRpZmllclJvbGU7XG4gIGlmIChpc1BhdHRlcm4pIHtcbiAgICBpZiAoX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aCA9PT0gMCkge1xuICAgICAgaWRlbnRpZmllclJvbGUgPSBfaW5kZXgzLklkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZFRvcExldmVsRGVjbGFyYXRpb247XG4gICAgfSBlbHNlIGlmIChpc0Jsb2NrU2NvcGUpIHtcbiAgICAgIGlkZW50aWZpZXJSb2xlID0gX2luZGV4My5JZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmRCbG9ja1Njb3BlZERlY2xhcmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZGVudGlmaWVyUm9sZSA9IF9pbmRleDMuSWRlbnRpZmllclJvbGUuT2JqZWN0U2hvcnRoYW5kRnVuY3Rpb25TY29wZWREZWNsYXJhdGlvbjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWRlbnRpZmllclJvbGUgPSBfaW5kZXgzLklkZW50aWZpZXJSb2xlLk9iamVjdFNob3J0aGFuZDtcbiAgfVxuICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlkZW50aWZpZXJSb2xlID0gaWRlbnRpZmllclJvbGU7XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGtub3cgdGhpcyB0byBiZSBhIHBhdHRlcm4gb3IgaWYgd2UncmUgaW4gYW4gYW1iaWd1b3VzIGNvbnRleHQsIGFsbG93XG4gIC8vIHBhcnNpbmcgYXMgaWYgdGhlcmUncyBhIGRlZmF1bHQgdmFsdWUuXG4gIF9sdmFsLnBhcnNlTWF5YmVEZWZhdWx0LmNhbGwodm9pZCAwLCBpc0Jsb2NrU2NvcGUsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU9ialByb3BWYWx1ZShcbiAgaXNQYXR0ZXJuLFxuICBpc0Jsb2NrU2NvcGUsXG4gIG9iamVjdENvbnRleHRJZCxcbikge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIF90eXBlc2NyaXB0LnRzU3RhcnRQYXJzZU9ialByb3BWYWx1ZS5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1N0YXJ0UGFyc2VPYmpQcm9wVmFsdWUuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgY29uc3Qgd2FzTWV0aG9kID0gcGFyc2VPYmplY3RNZXRob2QoaXNQYXR0ZXJuLCBvYmplY3RDb250ZXh0SWQpO1xuICBpZiAoIXdhc01ldGhvZCkge1xuICAgIHBhcnNlT2JqZWN0UHJvcGVydHkoaXNQYXR0ZXJuLCBpc0Jsb2NrU2NvcGUpO1xuICB9XG59XG5cbiBmdW5jdGlvbiBwYXJzZVByb3BlcnR5TmFtZShvYmplY3RDb250ZXh0SWQpIHtcbiAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93UGFyc2VWYXJpYW5jZS5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBpZiAoX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gb2JqZWN0Q29udGV4dElkO1xuICAgIHBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IG9iamVjdENvbnRleHRJZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUubnVtKSB8fCBfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5zdHJpbmcpIHx8IF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJpZ2ludCkgfHwgX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuZGVjaW1hbCkpIHtcbiAgICAgIHBhcnNlRXhwckF0b20oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VNYXliZVByaXZhdGVOYW1lKCk7XG4gICAgfVxuXG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5pZGVudGlmaWVyUm9sZSA9IF9pbmRleDMuSWRlbnRpZmllclJvbGUuT2JqZWN0S2V5O1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gb2JqZWN0Q29udGV4dElkO1xuICB9XG59IGV4cG9ydHMucGFyc2VQcm9wZXJ0eU5hbWUgPSBwYXJzZVByb3BlcnR5TmFtZTtcblxuLy8gUGFyc2Ugb2JqZWN0IG9yIGNsYXNzIG1ldGhvZC5cbiBmdW5jdGlvbiBwYXJzZU1ldGhvZChmdW5jdGlvblN0YXJ0LCBpc0NvbnN0cnVjdG9yKSB7XG4gIGNvbnN0IGZ1bmNDb250ZXh0SWQgPSBfYmFzZS5nZXROZXh0Q29udGV4dElkLmNhbGwodm9pZCAwLCApO1xuXG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgY29uc3QgYWxsb3dNb2RpZmllcnMgPSBpc0NvbnN0cnVjdG9yOyAvLyBGb3IgVHlwZVNjcmlwdCBwYXJhbWV0ZXIgcHJvcGVydGllc1xuICBfc3RhdGVtZW50LnBhcnNlRnVuY3Rpb25QYXJhbXMuY2FsbCh2b2lkIDAsIGFsbG93TW9kaWZpZXJzLCBmdW5jQ29udGV4dElkKTtcbiAgcGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2goZnVuY3Rpb25TdGFydCwgZnVuY0NvbnRleHRJZCk7XG4gIGNvbnN0IGVuZFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBfYmFzZS5zdGF0ZS5zY29wZXMucHVzaChuZXcgKDAsIF9zdGF0ZS5TY29wZSkoc3RhcnRUb2tlbkluZGV4LCBlbmRUb2tlbkluZGV4LCB0cnVlKSk7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgtLTtcbn0gZXhwb3J0cy5wYXJzZU1ldGhvZCA9IHBhcnNlTWV0aG9kO1xuXG4vLyBQYXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uLlxuLy8gSWYgdGhlIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLCB0aGV5IHdpbGwgYmUgY29udmVydGVkIHRvIGFuXG4vLyBhc3NpZ25hYmxlIGxpc3QuXG4gZnVuY3Rpb24gcGFyc2VBcnJvd0V4cHJlc3Npb24oc3RhcnRUb2tlbkluZGV4KSB7XG4gIHBhcnNlRnVuY3Rpb25Cb2R5KHRydWUpO1xuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX2Jhc2Uuc3RhdGUuc2NvcGVzLnB1c2gobmV3ICgwLCBfc3RhdGUuU2NvcGUpKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgdHJ1ZSkpO1xuICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoLS07XG59IGV4cG9ydHMucGFyc2VBcnJvd0V4cHJlc3Npb24gPSBwYXJzZUFycm93RXhwcmVzc2lvbjtcblxuIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoKGZ1bmN0aW9uU3RhcnQsIGZ1bmNDb250ZXh0SWQgPSAwKSB7XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgX3R5cGVzY3JpcHQudHNQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaC5jYWxsKHZvaWQgMCwgZnVuY3Rpb25TdGFydCwgZnVuY0NvbnRleHRJZCk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF9mbG93LmZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaC5jYWxsKHZvaWQgMCwgZnVuY0NvbnRleHRJZCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VGdW5jdGlvbkJvZHkoZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xuICB9XG59IGV4cG9ydHMucGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2ggPSBwYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaDtcblxuIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Cb2R5KGFsbG93RXhwcmVzc2lvbiwgZnVuY0NvbnRleHRJZCA9IDApIHtcbiAgY29uc3QgaXNFeHByZXNzaW9uID0gYWxsb3dFeHByZXNzaW9uICYmICFfaW5kZXgzLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMzLlRva2VuVHlwZS5icmFjZUwpO1xuXG4gIGlmIChpc0V4cHJlc3Npb24pIHtcbiAgICBwYXJzZU1heWJlQXNzaWduKCk7XG4gIH0gZWxzZSB7XG4gICAgX3N0YXRlbWVudC5wYXJzZUJsb2NrLmNhbGwodm9pZCAwLCB0cnVlIC8qIGlzRnVuY3Rpb25TY29wZSAqLywgZnVuY0NvbnRleHRJZCk7XG4gIH1cbn0gZXhwb3J0cy5wYXJzZUZ1bmN0aW9uQm9keSA9IHBhcnNlRnVuY3Rpb25Cb2R5O1xuXG4vLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucywgYW5kIHJldHVybnMgdGhlbSBhc1xuLy8gYW4gYXJyYXkuIGBjbG9zZWAgaXMgdGhlIHRva2VuIHR5cGUgdGhhdCBlbmRzIHRoZSBsaXN0LCBhbmRcbi8vIGBhbGxvd0VtcHR5YCBjYW4gYmUgdHVybmVkIG9uIHRvIGFsbG93IHN1YnNlcXVlbnQgY29tbWFzIHdpdGhcbi8vIG5vdGhpbmcgaW4gYmV0d2VlbiB0aGVtIHRvIGJlIHBhcnNlZCBhcyBgbnVsbGAgKHdoaWNoIGlzIG5lZWRlZFxuLy8gZm9yIGFycmF5IGxpdGVyYWxzKS5cblxuZnVuY3Rpb24gcGFyc2VFeHByTGlzdChjbG9zZSwgYWxsb3dFbXB0eSA9IGZhbHNlKSB7XG4gIGxldCBmaXJzdCA9IHRydWU7XG4gIHdoaWxlICghX2luZGV4My5lYXQuY2FsbCh2b2lkIDAsIGNsb3NlKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuY29tbWEpO1xuICAgICAgaWYgKF9pbmRleDMuZWF0LmNhbGwodm9pZCAwLCBjbG9zZSkpIGJyZWFrO1xuICAgIH1cbiAgICBwYXJzZUV4cHJMaXN0SXRlbShhbGxvd0VtcHR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4cHJMaXN0SXRlbShhbGxvd0VtcHR5KSB7XG4gIGlmIChhbGxvd0VtcHR5ICYmIF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgIC8vIEVtcHR5IGl0ZW07IG5vdGhpbmcgbW9yZSB0byBwYXJzZSBmb3IgdGhpcyBpdGVtLlxuICB9IGVsc2UgaWYgKF9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmVsbGlwc2lzKSkge1xuICAgIF9sdmFsLnBhcnNlU3ByZWFkLmNhbGwodm9pZCAwLCApO1xuICAgIHBhcnNlUGFyZW5JdGVtKCk7XG4gIH0gZWxzZSBpZiAoX2luZGV4My5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUucXVlc3Rpb24pKSB7XG4gICAgLy8gUGFydGlhbCBmdW5jdGlvbiBhcHBsaWNhdGlvbiBwcm9wb3NhbC5cbiAgICBfaW5kZXgzLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VNYXliZUFzc2lnbihmYWxzZSwgdHJ1ZSk7XG4gIH1cbn1cblxuLy8gUGFyc2UgdGhlIG5leHQgdG9rZW4gYXMgYW4gaWRlbnRpZmllci5cbiBmdW5jdGlvbiBwYXJzZUlkZW50aWZpZXIoKSB7XG4gIF9pbmRleDMubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzMy5Ub2tlblR5cGUubmFtZTtcbn0gZXhwb3J0cy5wYXJzZUlkZW50aWZpZXIgPSBwYXJzZUlkZW50aWZpZXI7XG5cbi8vIFBhcnNlcyBhd2FpdCBleHByZXNzaW9uIGluc2lkZSBhc3luYyBmdW5jdGlvbi5cbmZ1bmN0aW9uIHBhcnNlQXdhaXQoKSB7XG4gIHBhcnNlTWF5YmVVbmFyeSgpO1xufVxuXG4vLyBQYXJzZXMgeWllbGQgZXhwcmVzc2lvbiBpbnNpZGUgZ2VuZXJhdG9yLlxuZnVuY3Rpb24gcGFyc2VZaWVsZCgpIHtcbiAgX2luZGV4My5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBpZiAoIV9pbmRleDMubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLnNlbWkpICYmICFfdXRpbC5jYW5JbnNlcnRTZW1pY29sb24uY2FsbCh2b2lkIDAsICkpIHtcbiAgICBfaW5kZXgzLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuc3Rhcik7XG4gICAgcGFyc2VNYXliZUFzc2lnbigpO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWpzLW1vZHVsZS1ibG9ja3NcbmZ1bmN0aW9uIHBhcnNlTW9kdWxlRXhwcmVzc2lvbigpIHtcbiAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlczMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gIC8vIEZvciBub3csIGp1c3QgY2FsbCBwYXJzZUJsb2NrQm9keSB0byBwYXJzZSB0aGUgYmxvY2suIEluIHRoZSBmdXR1cmUgd2hlbiB3ZVxuICAvLyBpbXBsZW1lbnQgZnVsbCBzdXBwb3J0LCB3ZSdsbCB3YW50IHRvIGVtaXQgc2NvcGVzIGFuZCBwb3NzaWJseSBvdGhlclxuICAvLyBpbmZvcm1hdGlvbi5cbiAgX3N0YXRlbWVudC5wYXJzZUJsb2NrQm9keS5jYWxsKHZvaWQgMCwgX3R5cGVzMy5Ub2tlblR5cGUuYnJhY2VSKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOy8qIGVzbGludCBtYXgtbGVuOiAwICovXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfaW5kZXggPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvaW5kZXgnKTtcbnZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIva2V5d29yZHMnKTtcbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvdHlwZXMnKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9iYXNlJyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlci9leHByZXNzaW9uJyk7XG5cblxuXG5cblxuXG5cblxudmFyIF9zdGF0ZW1lbnQgPSByZXF1aXJlKCcuLi90cmF2ZXJzZXIvc3RhdGVtZW50Jyk7XG5cblxuXG5cblxuXG5cblxuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi90cmF2ZXJzZXIvdXRpbCcpO1xuXG5mdW5jdGlvbiBpc01heWJlRGVmYXVsdEltcG9ydChsb29rYWhlYWQpIHtcbiAgcmV0dXJuIChcbiAgICAobG9va2FoZWFkLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSB8fCAhIShsb29rYWhlYWQudHlwZSAmIF90eXBlcy5Ub2tlblR5cGUuSVNfS0VZV09SRCkpICYmXG4gICAgbG9va2FoZWFkLmNvbnRleHR1YWxLZXl3b3JkICE9PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb21cbiAgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKHRvaykge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCB0b2sgfHwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gIGZsb3dQYXJzZVR5cGUoKTtcbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VQcmVkaWNhdGUoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5tb2R1bG8pO1xuICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2NoZWNrcyk7XG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUFuZFByZWRpY2F0ZUluaXRpYWxpc2VyKCkge1xuICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5tb2R1bG8pKSB7XG4gICAgZmxvd1BhcnNlUHJlZGljYXRlKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubW9kdWxvKSkge1xuICAgICAgZmxvd1BhcnNlUHJlZGljYXRlKCk7XG4gICAgfVxuICB9XG4gIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZUNsYXNzKCkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgZmxvd1BhcnNlSW50ZXJmYWNlaXNoKC8qIGlzQ2xhc3MgKi8gdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVGdW5jdGlvbigpIHtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcblxuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICB9XG5cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcblxuICBmbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKTtcblxuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmUoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzKSkge1xuICAgIGZsb3dQYXJzZURlY2xhcmVDbGFzcygpO1xuICB9IGVsc2UgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUZ1bmN0aW9uKCk7XG4gIH0gZWxzZSBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl92YXIpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZVZhcmlhYmxlKCk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpKSB7XG4gICAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZU1vZHVsZUV4cG9ydHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZU1vZHVsZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkpIHtcbiAgICBmbG93UGFyc2VEZWNsYXJlVHlwZUFsaWFzKCk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29wYXF1ZSkpIHtcbiAgICBmbG93UGFyc2VEZWNsYXJlT3BhcXVlVHlwZSgpO1xuICB9IGVsc2UgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgZmxvd1BhcnNlRGVjbGFyZUludGVyZmFjZSgpO1xuICB9IGVsc2UgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0KSkge1xuICAgIGZsb3dQYXJzZURlY2xhcmVFeHBvcnREZWNsYXJhdGlvbigpO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZVZhcmlhYmxlKCkge1xuICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgZmxvd1BhcnNlVHlwZUFubm90YXRhYmxlSWRlbnRpZmllcigpO1xuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVNb2R1bGUoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwckF0b20uY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gIHdoaWxlICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0KSkge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBfc3RhdGVtZW50LnBhcnNlSW1wb3J0LmNhbGwodm9pZCAwLCApO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgIH1cbiAgfVxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCk7XG5cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQpKSB7XG4gICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MpKSB7XG4gICAgICAvLyBkZWNsYXJlIGV4cG9ydCBkZWZhdWx0IGNsYXNzIC4uLlxuICAgICAgLy8gZGVjbGFyZSBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAuLi5cbiAgICAgIGZsb3dQYXJzZURlY2xhcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVjbGFyZSBleHBvcnQgZGVmYXVsdCBbdHlwZV07XG4gICAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fdmFyKSB8fCAvLyBkZWNsYXJlIGV4cG9ydCB2YXIgLi4uXG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbikgfHwgLy8gZGVjbGFyZSBleHBvcnQgZnVuY3Rpb24gLi4uXG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcykgfHwgLy8gZGVjbGFyZSBleHBvcnQgY2xhc3MgLi4uXG4gICAgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29wYXF1ZSkgLy8gZGVjbGFyZSBleHBvcnQgb3BhcXVlIC4uXG4gICkge1xuICAgIGZsb3dQYXJzZURlY2xhcmUoKTtcbiAgfSBlbHNlIGlmIChcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RhcikgfHwgLy8gZGVjbGFyZSBleHBvcnQgKiBmcm9tICcnXG4gICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkgfHwgLy8gZGVjbGFyZSBleHBvcnQge30gLi4uXG4gICAgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkgfHwgLy8gZGVjbGFyZSBleHBvcnQgaW50ZXJmYWNlIC4uLlxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSB8fCAvLyBkZWNsYXJlIGV4cG9ydCB0eXBlIC4uLlxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpIC8vIGRlY2xhcmUgZXhwb3J0IG9wYXF1ZSB0eXBlIC4uLlxuICApIHtcbiAgICBfc3RhdGVtZW50LnBhcnNlRXhwb3J0LmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2Uge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZU1vZHVsZUV4cG9ydHMoKSB7XG4gIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZXhwb3J0cyk7XG4gIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRGVjbGFyZVR5cGVBbGlhcygpIHtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIGZsb3dQYXJzZVR5cGVBbGlhcygpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VEZWNsYXJlT3BhcXVlVHlwZSgpIHtcbiAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIGZsb3dQYXJzZU9wYXF1ZVR5cGUodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZURlY2xhcmVJbnRlcmZhY2UoKSB7XG4gIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBmbG93UGFyc2VJbnRlcmZhY2Vpc2goKTtcbn1cblxuLy8gSW50ZXJmYWNlc1xuXG5mdW5jdGlvbiBmbG93UGFyc2VJbnRlcmZhY2Vpc2goaXNDbGFzcyA9IGZhbHNlKSB7XG4gIGZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKCk7XG5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgfVxuXG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzKSkge1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlICghaXNDbGFzcyAmJiBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSk7XG4gIH1cblxuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21peGlucykpIHtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBkbyB7XG4gICAgICBmbG93UGFyc2VJbnRlcmZhY2VFeHRlbmRzKCk7XG4gICAgfSB3aGlsZSAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpO1xuICB9XG5cbiAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbXBsZW1lbnRzKSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSk7XG4gIH1cblxuICBmbG93UGFyc2VPYmplY3RUeXBlKGlzQ2xhc3MsIGZhbHNlLCBpc0NsYXNzKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpIHtcbiAgZmxvd1BhcnNlUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIoZmFsc2UpO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlSW50ZXJmYWNlKCkge1xuICBmbG93UGFyc2VJbnRlcmZhY2Vpc2goKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoKSB7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUFsaWFzKCkge1xuICBmbG93UGFyc2VSZXN0cmljdGVkSWRlbnRpZmllcigpO1xuXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gIH1cblxuICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoX3R5cGVzLlRva2VuVHlwZS5lcSk7XG4gIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT3BhcXVlVHlwZShkZWNsYXJlKSB7XG4gIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gIGZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKCk7XG5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgfVxuXG4gIC8vIFBhcnNlIHRoZSBzdXBlcnR5cGVcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoX3R5cGVzLlRva2VuVHlwZS5jb2xvbik7XG4gIH1cblxuICBpZiAoIWRlY2xhcmUpIHtcbiAgICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoX3R5cGVzLlRva2VuVHlwZS5lcSk7XG4gIH1cbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VUeXBlUGFyYW1ldGVyKCkge1xuICBmbG93UGFyc2VWYXJpYW5jZSgpO1xuICBmbG93UGFyc2VUeXBlQW5ub3RhdGFibGVJZGVudGlmaWVyKCk7XG5cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG59XG5cbiBmdW5jdGlvbiBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogdGhpcyBjb25kaXRpb24gaXMgYWxyZWFkeSBjaGVja2VkIGF0IGFsbCBjYWxsIHNpdGVzXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQpKSB7XG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuXG4gIGRvIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyKCk7XG4gICAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZ3JlYXRlclRoYW4pKSB7XG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICAgIH1cbiAgfSB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuKTtcbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufSBleHBvcnRzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiA9IGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbjtcblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pO1xuICB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5ncmVhdGVyVGhhbikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuKSkge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICB9XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmdyZWF0ZXJUaGFuKTtcbiAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VJbnRlcmZhY2VUeXBlKCkge1xuICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSk7XG4gIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9leHRlbmRzKSkge1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZUV4dGVuZHMoKTtcbiAgICB9IHdoaWxlIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSk7XG4gIH1cbiAgZmxvd1BhcnNlT2JqZWN0VHlwZShmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubnVtKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwckF0b20uY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGVJbmRleGVyKCkge1xuICAvLyBOb3RlOiBicmFja2V0TCBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkXG4gIGlmIChfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzLlRva2VuVHlwZS5jb2xvbikge1xuICAgIGZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gICAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlVHlwZSgpO1xuICB9XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VPYmplY3RUeXBlSW50ZXJuYWxTbG90KCkge1xuICAvLyBOb3RlOiBib3RoIGJyYWNrZXRMIGhhdmUgYWxyZWFkeSBiZWVuIGNvbnN1bWVkXG4gIGZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0Uik7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgZmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhvZGlzaCgpO1xuICB9IGVsc2Uge1xuICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pO1xuICAgIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2goKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7XG4gIH1cblxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgd2hpbGUgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSAmJiAhX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBmbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbSgpO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUikpIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKTtcbiAgfVxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZU9iamVjdFR5cGVDYWxsUHJvcGVydHkoKSB7XG4gIGZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2goKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT2JqZWN0VHlwZShhbGxvd1N0YXRpYywgYWxsb3dFeGFjdCwgYWxsb3dQcm90bykge1xuICBsZXQgZW5kRGVsaW07XG4gIGlmIChhbGxvd0V4YWN0ICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUJhckwpKSB7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlQmFyTCk7XG4gICAgZW5kRGVsaW0gPSBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlQmFyUjtcbiAgfSBlbHNlIHtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKTtcbiAgICBlbmREZWxpbSA9IF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSO1xuICB9XG5cbiAgd2hpbGUgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIGVuZERlbGltKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBpZiAoYWxsb3dQcm90byAmJiBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJvdG8pKSB7XG4gICAgICBjb25zdCBsb29rYWhlYWQgPSBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIGlmIChsb29rYWhlYWQgIT09IF90eXBlcy5Ub2tlblR5cGUuY29sb24gJiYgbG9va2FoZWFkICE9PSBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKSB7XG4gICAgICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgICBhbGxvd1N0YXRpYyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsb3dTdGF0aWMgJiYgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYykpIHtcbiAgICAgIGNvbnN0IGxvb2thaGVhZCA9IF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApO1xuICAgICAgaWYgKGxvb2thaGVhZCAhPT0gX3R5cGVzLlRva2VuVHlwZS5jb2xvbiAmJiBsb29rYWhlYWQgIT09IF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pIHtcbiAgICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxvd1BhcnNlVmFyaWFuY2UoKTtcblxuICAgIGlmIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgICAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpKSB7XG4gICAgICAgIGZsb3dQYXJzZU9iamVjdFR5cGVJbnRlcm5hbFNsb3QoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsb3dQYXJzZU9iamVjdFR5cGVJbmRleGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlQ2FsbFByb3BlcnR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZ2V0KSB8fCBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc2V0KSkge1xuICAgICAgICBjb25zdCBsb29rYWhlYWQgPSBfaW5kZXgubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgaWYgKGxvb2thaGVhZCA9PT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lIHx8IGxvb2thaGVhZCA9PT0gX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcgfHwgbG9va2FoZWFkID09PSBfdHlwZXMuVG9rZW5UeXBlLm51bSkge1xuICAgICAgICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZsb3dQYXJzZU9iamVjdFR5cGVQcm9wZXJ0eSgpO1xuICAgIH1cblxuICAgIGZsb3dPYmplY3RUeXBlU2VtaWNvbG9uKCk7XG4gIH1cblxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIGVuZERlbGltKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlT2JqZWN0VHlwZVByb3BlcnR5KCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmVsbGlwc2lzKSkge1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcyk7XG4gICAgaWYgKCFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zZW1pKTtcbiAgICB9XG4gICAgLy8gRXhwbGljaXQgaW5leGFjdCBvYmplY3Qgc3ludGF4LlxuICAgIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmbG93UGFyc2VUeXBlKCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvd1BhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSB8fCBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCBwcm9wZXJ0eVxuICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhvZGlzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgICAgIGZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93T2JqZWN0VHlwZVNlbWljb2xvbigpIHtcbiAgaWYgKCFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNlbWkpICYmICFfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSAmJiAhX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUJhclIpKSB7XG4gICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcihpbml0aWFsSWRBbHJlYWR5UGFyc2VkKSB7XG4gIGlmICghaW5pdGlhbElkQWxyZWFkeVBhcnNlZCkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICB3aGlsZSAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5kb3QpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUdlbmVyaWNUeXBlKCkge1xuICBmbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcih0cnVlKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVR5cGVvZlR5cGUoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fdHlwZW9mKTtcbiAgZmxvd1BhcnNlUHJpbWFyeVR5cGUoKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHVwbGVUeXBlKCkge1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpO1xuICAvLyBXZSBhbGxvdyB0cmFpbGluZyBjb21tYXNcbiAgd2hpbGUgKF9iYXNlLnN0YXRlLnBvcyA8IF9iYXNlLmlucHV0Lmxlbmd0aCAmJiAhX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKSkge1xuICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKSB7XG4gIGNvbnN0IGxvb2thaGVhZCA9IF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApO1xuICBpZiAobG9va2FoZWFkID09PSBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uIHx8IGxvb2thaGVhZCA9PT0gX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbikge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgICBmbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoKTtcbiAgfSBlbHNlIHtcbiAgICBmbG93UGFyc2VUeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW1zKCkge1xuICB3aGlsZSAoIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpICYmICFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtKCk7XG4gICAgaWYgKCFfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICB9XG4gIH1cbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oKTtcbiAgfVxufVxuXG4vLyBUaGUgcGFyc2luZyBvZiB0eXBlcyByb3VnaGx5IHBhcmFsbGVscyB0aGUgcGFyc2luZyBvZiBleHByZXNzaW9ucywgYW5kXG4vLyBwcmltYXJ5IHR5cGVzIGFyZSBraW5kIG9mIGxpa2UgcHJpbWFyeSBleHByZXNzaW9ucy4uLnRoZXkncmUgdGhlXG4vLyBwcmltaXRpdmVzIHdpdGggd2hpY2ggb3RoZXIgdHlwZXMgYXJlIGNvbnN0cnVjdGVkLlxuZnVuY3Rpb24gZmxvd1BhcnNlUHJpbWFyeVR5cGUoKSB7XG4gIGxldCBpc0dyb3VwZWRUeXBlID0gZmFsc2U7XG4gIGNvbnN0IG9sZE5vQW5vbkZ1bmN0aW9uVHlwZSA9IF9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZTtcblxuICBzd2l0Y2ggKF9iYXNlLnN0YXRlLnR5cGUpIHtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUubmFtZToge1xuICAgICAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpKSB7XG4gICAgICAgIGZsb3dQYXJzZUludGVyZmFjZVR5cGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICAgICAgZmxvd1BhcnNlR2VuZXJpY1R5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMOlxuICAgICAgZmxvd1BhcnNlT2JqZWN0VHlwZShmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5icmFjZUJhckw6XG4gICAgICBmbG93UGFyc2VPYmplY3RUeXBlKGZhbHNlLCB0cnVlLCBmYWxzZSk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEw6XG4gICAgICBmbG93UGFyc2VUdXBsZVR5cGUoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbjpcbiAgICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG4gICAgICBmbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbXMoKTtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmFycm93KTtcbiAgICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkw6XG4gICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcblxuICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYWN0dWFsbHkgYSBncm91cGVkIHR5cGVcbiAgICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUikgJiYgIV9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcykpIHtcbiAgICAgICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gX2luZGV4Lmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICk7XG4gICAgICAgICAgaXNHcm91cGVkVHlwZSA9IHRva2VuICE9PSBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uICYmIHRva2VuICE9PSBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzR3JvdXBlZFR5cGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0dyb3VwZWRUeXBlKSB7XG4gICAgICAgIF9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IGZhbHNlO1xuICAgICAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgICAgIF9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IG9sZE5vQW5vbkZ1bmN0aW9uVHlwZTtcblxuICAgICAgICAvLyBBIGAsYCBvciBhIGApID0+YCBtZWFucyB0aGlzIGlzIGFuIGFub255bW91cyBmdW5jdGlvbiB0eXBlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBfYmFzZS5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgfHxcbiAgICAgICAgICAhKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgfHwgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpICYmIF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLmFycm93KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEVhdCBhIGNvbW1hIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgICAgIF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcygpO1xuXG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5hcnJvdyk7XG4gICAgICBmbG93UGFyc2VUeXBlKCk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUubWludXM6XG4gICAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIF9leHByZXNzaW9uLnBhcnNlTGl0ZXJhbC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmc6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLm51bTpcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3RydWU6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9mYWxzZTpcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX251bGw6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90aGlzOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fdm9pZDpcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuc3RhcjpcbiAgICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgICAgcmV0dXJuO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLl90eXBlb2YpIHtcbiAgICAgICAgZmxvd1BhcnNlVHlwZW9mVHlwZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKF9iYXNlLnN0YXRlLnR5cGUgJiBfdHlwZXMuVG9rZW5UeXBlLklTX0tFWVdPUkQpIHtcbiAgICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUubmFtZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUG9zdGZpeFR5cGUoKSB7XG4gIGZsb3dQYXJzZVByaW1hcnlUeXBlKCk7XG4gIHdoaWxlICghX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApICYmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbkRvdCkpKSB7XG4gICAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbkRvdCk7XG4gICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKTtcbiAgICBpZiAoX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFja2V0UikpIHtcbiAgICAgIC8vIEFycmF5IHR5cGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW5kZXhlZCBhY2Nlc3MgdHlwZVxuICAgICAgZmxvd1BhcnNlVHlwZSgpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlUHJlZml4VHlwZSgpIHtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pKSB7XG4gICAgZmxvd1BhcnNlUHJlZml4VHlwZSgpO1xuICB9IGVsc2Uge1xuICAgIGZsb3dQYXJzZVBvc3RmaXhUeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlQW5vbkZ1bmN0aW9uV2l0aG91dFBhcmVucygpIHtcbiAgZmxvd1BhcnNlUHJlZml4VHlwZSgpO1xuICBpZiAoIV9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSAmJiBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmFycm93KSkge1xuICAgIGZsb3dQYXJzZVR5cGUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCkge1xuICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VBTkQpO1xuICBmbG93UGFyc2VBbm9uRnVuY3Rpb25XaXRob3V0UGFyZW5zKCk7XG4gIHdoaWxlIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VBTkQpKSB7XG4gICAgZmxvd1BhcnNlQW5vbkZ1bmN0aW9uV2l0aG91dFBhcmVucygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZVVuaW9uVHlwZSgpIHtcbiAgX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iaXR3aXNlT1IpO1xuICBmbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCk7XG4gIHdoaWxlIChfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJpdHdpc2VPUikpIHtcbiAgICBmbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZSgpIHtcbiAgZmxvd1BhcnNlVW5pb25UeXBlKCk7XG59XG5cbiBmdW5jdGlvbiBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpIHtcbiAgZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7XG59IGV4cG9ydHMuZmxvd1BhcnNlVHlwZUFubm90YXRpb24gPSBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbjtcblxuZnVuY3Rpb24gZmxvd1BhcnNlVHlwZUFubm90YXRhYmxlSWRlbnRpZmllcigpIHtcbiAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgIGZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCk7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIGZsb3dQYXJzZVZhcmlhbmNlKCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBsdXMpIHx8IF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5taW51cykpIHtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmlzVHlwZSA9IHRydWU7XG4gIH1cbn0gZXhwb3J0cy5mbG93UGFyc2VWYXJpYW5jZSA9IGZsb3dQYXJzZVZhcmlhbmNlO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPdmVycmlkZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIGZ1bmN0aW9uIGZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChmdW5jQ29udGV4dElkKSB7XG4gIC8vIEZvciBhcnJvdyBmdW5jdGlvbnMsIGBwYXJzZUFycm93YCBoYW5kbGVzIHRoZSByZXR1cm4gdHlwZSBpdHNlbGYuXG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgZmxvd1BhcnNlVHlwZUFuZFByZWRpY2F0ZUluaXRpYWxpc2VyKCk7XG4gIH1cblxuICBfZXhwcmVzc2lvbi5wYXJzZUZ1bmN0aW9uQm9keS5jYWxsKHZvaWQgMCwgZmFsc2UsIGZ1bmNDb250ZXh0SWQpO1xufSBleHBvcnRzLmZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaCA9IGZsb3dQYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaDtcblxuIGZ1bmN0aW9uIGZsb3dQYXJzZVN1YnNjcmlwdChcbiAgc3RhcnRUb2tlbkluZGV4LFxuICBub0NhbGxzLFxuICBzdG9wU3RhdGUsXG4pIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5xdWVzdGlvbkRvdCkgJiYgX2luZGV4Lmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHtcbiAgICBpZiAobm9DYWxscykge1xuICAgICAgc3RvcFN0YXRlLnN0b3AgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgIF9leHByZXNzaW9uLnBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMuY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gICAgZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKTtcbiAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzLmNhbGwodm9pZCAwLCApO1xuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgX2V4cHJlc3Npb24uYmFzZVBhcnNlU3Vic2NyaXB0LmNhbGwodm9pZCAwLCBzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMsIHN0b3BTdGF0ZSk7XG59IGV4cG9ydHMuZmxvd1BhcnNlU3Vic2NyaXB0ID0gZmxvd1BhcnNlU3Vic2NyaXB0O1xuXG4gZnVuY3Rpb24gZmxvd1N0YXJ0UGFyc2VOZXdBcmd1bWVudHMoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pKSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBfYmFzZS5zdGF0ZS5zbmFwc2hvdCgpO1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7XG4gICAgaWYgKF9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5mbG93U3RhcnRQYXJzZU5ld0FyZ3VtZW50cyA9IGZsb3dTdGFydFBhcnNlTmV3QXJndW1lbnRzO1xuXG4vLyBpbnRlcmZhY2VzXG4gZnVuY3Rpb24gZmxvd1RyeVBhcnNlU3RhdGVtZW50KCkge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIGZsb3dQYXJzZUludGVyZmFjZSgpO1xuICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSkpIHtcbiAgICBmbG93UGFyc2VFbnVtRGVjbGFyYXRpb24oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59IGV4cG9ydHMuZmxvd1RyeVBhcnNlU3RhdGVtZW50ID0gZmxvd1RyeVBhcnNlU3RhdGVtZW50O1xuXG4gZnVuY3Rpb24gZmxvd1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKSB7XG4gIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSkpIHtcbiAgICBmbG93UGFyc2VFbnVtRGVjbGFyYXRpb24oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59IGV4cG9ydHMuZmxvd1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24gPSBmbG93VHJ5UGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbjtcblxuLy8gZGVjbGFyZXMsIGludGVyZmFjZXMgYW5kIHR5cGUgYWxpYXNlc1xuIGZ1bmN0aW9uIGZsb3dQYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2RlY2xhcmUpIHtcbiAgICBpZiAoXG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzKSB8fFxuICAgICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSB8fFxuICAgICAgX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl92YXIpIHx8XG4gICAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydClcbiAgICApIHtcbiAgICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgICAgZmxvd1BhcnNlRGVjbGFyZSgpO1xuICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlKSB7XG4gICAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAxKTtcbiAgICAgIGZsb3dQYXJzZUludGVyZmFjZSgpO1xuICAgICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICBmbG93UGFyc2VUeXBlQWxpYXMoKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29wYXF1ZSkge1xuICAgICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgICBmbG93UGFyc2VPcGFxdWVUeXBlKGZhbHNlKTtcbiAgICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgICB9XG4gIH1cbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufSBleHBvcnRzLmZsb3dQYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQgPSBmbG93UGFyc2VJZGVudGlmaWVyU3RhdGVtZW50O1xuXG4vLyBleHBvcnQgdHlwZVxuIGZ1bmN0aW9uIGZsb3dTaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkge1xuICByZXR1cm4gKFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSB8fFxuICAgIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9pbnRlcmZhY2UpIHx8XG4gICAgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29wYXF1ZSkgfHxcbiAgICBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSlcbiAgKTtcbn0gZXhwb3J0cy5mbG93U2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IGZsb3dTaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gZmxvd1Nob3VsZERpc2FsbG93RXhwb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgcmV0dXJuIChcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAoX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSB8fFxuICAgICAgX2Jhc2Uuc3RhdGUuY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW50ZXJmYWNlIHx8XG4gICAgICBfYmFzZS5zdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUgfHxcbiAgICAgIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2VudW0pXG4gICk7XG59IGV4cG9ydHMuZmxvd1Nob3VsZERpc2FsbG93RXhwb3J0RGVmYXVsdFNwZWNpZmllciA9IGZsb3dTaG91bGREaXNhbGxvd0V4cG9ydERlZmF1bHRTcGVjaWZpZXI7XG5cbiBmdW5jdGlvbiBmbG93UGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDEpO1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuXG4gICAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICAvLyBleHBvcnQgdHlwZSB7IGZvbywgYmFyIH07XG4gICAgICBfc3RhdGVtZW50LnBhcnNlRXhwb3J0U3BlY2lmaWVycy5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIF9zdGF0ZW1lbnQucGFyc2VFeHBvcnRGcm9tLmNhbGwodm9pZCAwLCApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleHBvcnQgdHlwZSBGb28gPSBCYXI7XG4gICAgICBmbG93UGFyc2VUeXBlQWxpYXMoKTtcbiAgICB9XG4gICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICB9IGVsc2UgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9vcGFxdWUpKSB7XG4gICAgY29uc3Qgb2xkSXNUeXBlID0gX2luZGV4LnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMSk7XG4gICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgLy8gZXhwb3J0IG9wYXF1ZSB0eXBlIEZvbyA9IEJhcjtcbiAgICBmbG93UGFyc2VPcGFxdWVUeXBlKGZhbHNlKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2ludGVyZmFjZSkpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAxKTtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBmbG93UGFyc2VJbnRlcmZhY2UoKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgX3N0YXRlbWVudC5wYXJzZVN0YXRlbWVudC5jYWxsKHZvaWQgMCwgdHJ1ZSk7XG4gIH1cbn0gZXhwb3J0cy5mbG93UGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IGZsb3dQYXJzZUV4cG9ydERlY2xhcmF0aW9uO1xuXG4gZnVuY3Rpb24gZmxvd1Nob3VsZFBhcnNlRXhwb3J0U3RhcigpIHtcbiAgcmV0dXJuIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKSB8fCAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpICYmIF9pbmRleC5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpO1xufSBleHBvcnRzLmZsb3dTaG91bGRQYXJzZUV4cG9ydFN0YXIgPSBmbG93U2hvdWxkUGFyc2VFeHBvcnRTdGFyO1xuXG4gZnVuY3Rpb24gZmxvd1BhcnNlRXhwb3J0U3RhcigpIHtcbiAgaWYgKF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAyKTtcbiAgICBfc3RhdGVtZW50LmJhc2VQYXJzZUV4cG9ydFN0YXIuY2FsbCh2b2lkIDAsICk7XG4gICAgX2luZGV4LnBvcFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCBvbGRJc1R5cGUpO1xuICB9IGVsc2Uge1xuICAgIF9zdGF0ZW1lbnQuYmFzZVBhcnNlRXhwb3J0U3Rhci5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufSBleHBvcnRzLmZsb3dQYXJzZUV4cG9ydFN0YXIgPSBmbG93UGFyc2VFeHBvcnRTdGFyO1xuXG4vLyBwYXJzZSBhIHRoZSBzdXBlciBjbGFzcyB0eXBlIHBhcmFtZXRlcnMgYW5kIGltcGxlbWVudHNcbiBmdW5jdGlvbiBmbG93QWZ0ZXJQYXJzZUNsYXNzU3VwZXIoaGFzU3VwZXIpIHtcbiAgaWYgKGhhc1N1cGVyICYmIF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICB9XG4gIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cykpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9pbXBsZW1lbnRzO1xuICAgIGRvIHtcbiAgICAgIGZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKCk7XG4gICAgICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgICAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH1cbn0gZXhwb3J0cy5mbG93QWZ0ZXJQYXJzZUNsYXNzU3VwZXIgPSBmbG93QWZ0ZXJQYXJzZUNsYXNzU3VwZXI7XG5cbi8vIHBhcnNlIHR5cGUgcGFyYW1ldGVycyBmb3Igb2JqZWN0IG1ldGhvZCBzaG9ydGhhbmRcbiBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZU9ialByb3BWYWx1ZSgpIHtcbiAgLy8gbWV0aG9kIHNob3J0aGFuZFxuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIGZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn0gZXhwb3J0cy5mbG93U3RhcnRQYXJzZU9ialByb3BWYWx1ZSA9IGZsb3dTdGFydFBhcnNlT2JqUHJvcFZhbHVlO1xuXG4gZnVuY3Rpb24gZmxvd1BhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoKSB7XG4gIGNvbnN0IG9sZElzVHlwZSA9IF9pbmRleC5wdXNoVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIDApO1xuICBfaW5kZXguZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uKTtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBmbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpO1xuICB9XG4gIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbn0gZXhwb3J0cy5mbG93UGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcyA9IGZsb3dQYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzO1xuXG4vLyBwYXJzZSB0eXBlb2YgYW5kIHR5cGUgaW1wb3J0c1xuIGZ1bmN0aW9uIGZsb3dTdGFydFBhcnNlSW1wb3J0U3BlY2lmaWVycygpIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fdHlwZW9mKSB8fCBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkpIHtcbiAgICBjb25zdCBsaCA9IF9pbmRleC5sb29rYWhlYWRUeXBlQW5kS2V5d29yZC5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoaXNNYXliZURlZmF1bHRJbXBvcnQobGgpIHx8IGxoLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMIHx8IGxoLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuc3Rhcikge1xuICAgICAgX2luZGV4Lm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMuZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzID0gZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzO1xuXG4vLyBwYXJzZSBpbXBvcnQtdHlwZS90eXBlb2Ygc2hvcnRoYW5kXG4gZnVuY3Rpb24gZmxvd1BhcnNlSW1wb3J0U3BlY2lmaWVyKCkge1xuICBjb25zdCBpc1R5cGVLZXl3b3JkID1cbiAgICBfYmFzZS5zdGF0ZS5jb250ZXh0dWFsS2V5d29yZCA9PT0gX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlIHx8IF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX3R5cGVvZjtcbiAgaWYgKGlzVHlwZUtleXdvcmQpIHtcbiAgICBfaW5kZXgubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIH1cblxuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSAmJiAhX3V0aWwuaXNMb29rYWhlYWRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoaXNUeXBlS2V5d29yZCAmJiAhX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmICEoX2Jhc2Uuc3RhdGUudHlwZSAmIF90eXBlcy5Ub2tlblR5cGUuSVNfS0VZV09SRCkpIHtcbiAgICAgIC8vIGBpbXBvcnQge3R5cGUgYXMgLGAgb3IgYGltcG9ydCB7dHlwZSBhcyB9YFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgaW1wb3J0IHt0eXBlIGFzIGZvb2BcbiAgICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzVHlwZUtleXdvcmQgJiYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB8fCAhIShfYmFzZS5zdGF0ZS50eXBlICYgX3R5cGVzLlRva2VuVHlwZS5JU19LRVlXT1JEKSkpIHtcbiAgICAgIC8vIGBpbXBvcnQge3R5cGUgZm9vYFxuICAgICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICAgIH1cbiAgICBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hcykpIHtcbiAgICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5mbG93UGFyc2VJbXBvcnRTcGVjaWZpZXIgPSBmbG93UGFyc2VJbXBvcnRTcGVjaWZpZXI7XG5cbi8vIHBhcnNlIGZ1bmN0aW9uIHR5cGUgcGFyYW1ldGVycyAtIGZ1bmN0aW9uIGZvbzxUPigpIHt9XG4gZnVuY3Rpb24gZmxvd1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcygpIHtcbiAgLy8gT3JpZ2luYWxseSB0aGlzIGNoZWNrZWQgaWYgdGhlIG1ldGhvZCBpcyBhIGdldHRlci9zZXR0ZXIsIGJ1dCBpZiBpdCB3YXMsIHdlJ2QgY3Jhc2ggc29vblxuICAvLyBhbnl3YXksIHNvIGRvbid0IHRyeSB0byBwcm9wYWdhdGUgdGhhdCBpbmZvcm1hdGlvbi5cbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH1cbn0gZXhwb3J0cy5mbG93U3RhcnRQYXJzZUZ1bmN0aW9uUGFyYW1zID0gZmxvd1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcztcblxuLy8gcGFyc2UgZmxvdyB0eXBlIGFubm90YXRpb25zIG9uIHZhcmlhYmxlIGRlY2xhcmF0b3IgaGVhZHMgLSBsZXQgZm9vOiBzdHJpbmcgPSBiYXJcbiBmdW5jdGlvbiBmbG93QWZ0ZXJQYXJzZVZhckhlYWQoKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgfVxufSBleHBvcnRzLmZsb3dBZnRlclBhcnNlVmFySGVhZCA9IGZsb3dBZnRlclBhcnNlVmFySGVhZDtcblxuLy8gcGFyc2UgdGhlIHJldHVybiB0eXBlIG9mIGFuIGFzeW5jIGFycm93IGZ1bmN0aW9uIC0gbGV0IGZvbyA9IChhc3luYyAoKTogbnVtYmVyID0+IHt9KTtcbiBmdW5jdGlvbiBmbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24oKSB7XG4gIGlmIChfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgY29uc3Qgb2xkTm9Bbm9uRnVuY3Rpb25UeXBlID0gX2Jhc2Uuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlO1xuICAgIF9iYXNlLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSA9IHRydWU7XG4gICAgZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtcbiAgICBfYmFzZS5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7XG4gIH1cbn0gZXhwb3J0cy5mbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb24gPSBmbG93U3RhcnRQYXJzZUFzeW5jQXJyb3dGcm9tQ2FsbEV4cHJlc3Npb247XG5cbi8vIFdlIG5lZWQgdG8gc3VwcG9ydCB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgZm9yIGFycm93IGZ1bmN0aW9ucy4gVGhpc1xuLy8gaXMgdHJpY2t5LiBUaGVyZSBhcmUgdGhyZWUgc2l0dWF0aW9ucyB3ZSBuZWVkIHRvIGhhbmRsZVxuLy9cbi8vIDEuIFRoaXMgaXMgZWl0aGVyIEpTWCBvciBhbiBhcnJvdyBmdW5jdGlvbi4gV2UnbGwgdHJ5IEpTWCBmaXJzdC4gSWYgdGhhdFxuLy8gICAgZmFpbHMsIHdlJ2xsIHRyeSBhbiBhcnJvdyBmdW5jdGlvbi4gSWYgdGhhdCBmYWlscywgd2UnbGwgdGhyb3cgdGhlIEpTWFxuLy8gICAgZXJyb3IuXG4vLyAyLiBUaGlzIGlzIGFuIGFycm93IGZ1bmN0aW9uLiBXZSdsbCBwYXJzZSB0aGUgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24sXG4vLyAgICBwYXJzZSB0aGUgcmVzdCwgbWFrZSBzdXJlIHRoZSByZXN0IGlzIGFuIGFycm93IGZ1bmN0aW9uLCBhbmQgZ28gZnJvbVxuLy8gICAgdGhlcmVcbi8vIDMuIFRoaXMgaXMgbmVpdGhlci4gSnVzdCBjYWxsIHRoZSBzdXBlciBtZXRob2RcbiBmdW5jdGlvbiBmbG93UGFyc2VNYXliZUFzc2lnbihub0luLCBpc1dpdGhpblBhcmVucykge1xuICBpZiAoX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgICBsZXQgd2FzQXJyb3cgPSBfZXhwcmVzc2lvbi5iYXNlUGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgbm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICBfYmFzZS5zdGF0ZS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS50eXBlUGFyYW1ldGVyU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB3YXNBcnJvdztcbiAgICB9XG5cbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgICBmbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKTtcbiAgICBfaW5kZXgucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gICAgd2FzQXJyb3cgPSBfZXhwcmVzc2lvbi5iYXNlUGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgbm9JbiwgaXNXaXRoaW5QYXJlbnMpO1xuICAgIGlmICh3YXNBcnJvdykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cblxuICByZXR1cm4gX2V4cHJlc3Npb24uYmFzZVBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsIG5vSW4sIGlzV2l0aGluUGFyZW5zKTtcbn0gZXhwb3J0cy5mbG93UGFyc2VNYXliZUFzc2lnbiA9IGZsb3dQYXJzZU1heWJlQXNzaWduO1xuXG4vLyBoYW5kbGUgcmV0dXJuIHR5cGVzIGZvciBhcnJvdyBmdW5jdGlvbnNcbiBmdW5jdGlvbiBmbG93UGFyc2VBcnJvdygpIHtcbiAgaWYgKF9pbmRleC5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb2xvbikpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfaW5kZXgucHVzaFR5cGVDb250ZXh0LmNhbGwodm9pZCAwLCAwKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG5cbiAgICBjb25zdCBvbGROb0Fub25GdW5jdGlvblR5cGUgPSBfYmFzZS5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU7XG4gICAgX2Jhc2Uuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICBmbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKTtcbiAgICBfYmFzZS5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGUgPSBvbGROb0Fub25GdW5jdGlvblR5cGU7XG5cbiAgICBpZiAoX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApKSBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmFycm93KSkgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcblxuICAgIGlmIChfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgfVxuICAgIF9pbmRleC5wb3BUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgb2xkSXNUeXBlKTtcbiAgfVxuICByZXR1cm4gX2luZGV4LmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5hcnJvdyk7XG59IGV4cG9ydHMuZmxvd1BhcnNlQXJyb3cgPSBmbG93UGFyc2VBcnJvdztcblxuIGZ1bmN0aW9uIGZsb3dQYXJzZVN1YnNjcmlwdHMoc3RhcnRUb2tlbkluZGV4LCBub0NhbGxzID0gZmFsc2UpIHtcbiAgaWYgKFxuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMgJiZcbiAgICBfaW5kZXgubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pXG4gICkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgICBjb25zdCB3YXNBcnJvdyA9IHBhcnNlQXN5bmNBcnJvd1dpdGhUeXBlUGFyYW1ldGVycygpO1xuICAgIGlmICh3YXNBcnJvdyAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gIH1cblxuICBfZXhwcmVzc2lvbi5iYXNlUGFyc2VTdWJzY3JpcHRzLmNhbGwodm9pZCAwLCBzdGFydFRva2VuSW5kZXgsIG5vQ2FsbHMpO1xufSBleHBvcnRzLmZsb3dQYXJzZVN1YnNjcmlwdHMgPSBmbG93UGFyc2VTdWJzY3JpcHRzO1xuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGFycm93IGZ1bmN0aW9uIGhlcmUuXG5mdW5jdGlvbiBwYXJzZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtZXRlcnMoKSB7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX3N0YXRlbWVudC5wYXJzZUZ1bmN0aW9uUGFyYW1zLmNhbGwodm9pZCAwLCApO1xuICBpZiAoIV9leHByZXNzaW9uLnBhcnNlQXJyb3cuY2FsbCh2b2lkIDAsICkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgX2V4cHJlc3Npb24ucGFyc2VBcnJvd0V4cHJlc3Npb24uY2FsbCh2b2lkIDAsIHN0YXJ0VG9rZW5JbmRleCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmbG93UGFyc2VFbnVtRGVjbGFyYXRpb24oKSB7XG4gIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZW51bSk7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX2VudW07XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgZmxvd1BhcnNlRW51bUJvZHkoKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRW51bUJvZHkoKSB7XG4gIGlmIChfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29mKSkge1xuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICBmbG93UGFyc2VFbnVtTWVtYmVycygpO1xuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKTtcbn1cblxuZnVuY3Rpb24gZmxvd1BhcnNlRW51bU1lbWJlcnMoKSB7XG4gIHdoaWxlICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZWxsaXBzaXMpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZmxvd1BhcnNlRW51bU1lbWJlcigpO1xuICAgIGlmICghX2luZGV4Lm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsb3dQYXJzZUVudW1NZW1iZXIoKSB7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKF9pbmRleC5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgLy8gRmxvdyBlbnVtIHZhbHVlcyBhcmUgYWx3YXlzIGp1c3Qgb25lIHRva2VuIChhIHN0cmluZywgbnVtYmVyLCBvciBib29sZWFuIGxpdGVyYWwpLlxuICAgIF9pbmRleC5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsvKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuXG52YXIgX2luZGV4ID0gcmVxdWlyZSgnLi4vaW5kZXgnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIF9mbG93ID0gcmVxdWlyZSgnLi4vcGx1Z2lucy9mbG93Jyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgX3R5cGVzY3JpcHQgPSByZXF1aXJlKCcuLi9wbHVnaW5zL3R5cGVzY3JpcHQnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyJyk7XG52YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3N0YXRlID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL3N0YXRlJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vdG9rZW5pemVyL3R5cGVzJyk7XG52YXIgX2NoYXJjb2RlcyA9IHJlcXVpcmUoJy4uL3V0aWwvY2hhcmNvZGVzJyk7XG52YXIgX2Jhc2UgPSByZXF1aXJlKCcuL2Jhc2UnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4vZXhwcmVzc2lvbicpO1xuXG5cblxuXG5cbnZhciBfbHZhbCA9IHJlcXVpcmUoJy4vbHZhbCcpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiBmdW5jdGlvbiBwYXJzZVRvcExldmVsKCkge1xuICBwYXJzZUJsb2NrQm9keShfdHlwZXMuVG9rZW5UeXBlLmVvZik7XG4gIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKSgwLCBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoLCB0cnVlKSk7XG4gIGlmIChfYmFzZS5zdGF0ZS5zY29wZURlcHRoICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNjb3BlIGRlcHRoIGF0IGVuZCBvZiBmaWxlOiAke19iYXNlLnN0YXRlLnNjb3BlRGVwdGh9YCk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoMCwgX2luZGV4LkZpbGUpKF9iYXNlLnN0YXRlLnRva2VucywgX2Jhc2Uuc3RhdGUuc2NvcGVzKTtcbn0gZXhwb3J0cy5wYXJzZVRvcExldmVsID0gcGFyc2VUb3BMZXZlbDtcblxuLy8gUGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LlxuLy9cbi8vIElmIGV4cGVjdGluZyBhIHN0YXRlbWVudCBhbmQgZmluZGluZyBhIHNsYXNoIG9wZXJhdG9yLCBwYXJzZSBhXG4vLyByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbC4gVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgbGlrZVxuLy8gYGlmIChmb28pIC9ibGFoLy5leGVjKGZvbylgLCB3aGVyZSBsb29raW5nIGF0IHRoZSBwcmV2aW91cyB0b2tlblxuLy8gZG9lcyBub3QgaGVscC5cblxuIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KGRlY2xhcmF0aW9uKSB7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgaWYgKF9mbG93LmZsb3dUcnlQYXJzZVN0YXRlbWVudC5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5hdCkpIHtcbiAgICBwYXJzZURlY29yYXRvcnMoKTtcbiAgfVxuICBwYXJzZVN0YXRlbWVudENvbnRlbnQoZGVjbGFyYXRpb24pO1xufSBleHBvcnRzLnBhcnNlU3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQ7XG5cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50Q29udGVudChkZWNsYXJhdGlvbikge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIGlmIChfdHlwZXNjcmlwdC50c1RyeVBhcnNlU3RhdGVtZW50Q29udGVudC5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0dHlwZSA9IF9iYXNlLnN0YXRlLnR5cGU7XG5cbiAgLy8gTW9zdCB0eXBlcyBvZiBzdGF0ZW1lbnRzIGFyZSByZWNvZ25pemVkIGJ5IHRoZSBrZXl3b3JkIHRoZXlcbiAgLy8gc3RhcnQgd2l0aC4gTWFueSBhcmUgdHJpdmlhbCB0byBwYXJzZSwgc29tZSByZXF1aXJlIGEgYml0IG9mXG4gIC8vIGNvbXBsZXhpdHkuXG5cbiAgc3dpdGNoIChzdGFydHR5cGUpIHtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX2JyZWFrOlxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fY29udGludWU6XG4gICAgICBwYXJzZUJyZWFrQ29udGludWVTdGF0ZW1lbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX2RlYnVnZ2VyOlxuICAgICAgcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fZG86XG4gICAgICBwYXJzZURvU3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9mb3I6XG4gICAgICBwYXJzZUZvclN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb246XG4gICAgICBpZiAoX3Rva2VuaXplci5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLmRvdCkgYnJlYWs7XG4gICAgICBpZiAoIWRlY2xhcmF0aW9uKSBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICAgICAgcGFyc2VGdW5jdGlvblN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzczpcbiAgICAgIGlmICghZGVjbGFyYXRpb24pIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBwYXJzZUNsYXNzKHRydWUpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9pZjpcbiAgICAgIHBhcnNlSWZTdGF0ZW1lbnQoKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3JldHVybjpcbiAgICAgIHBhcnNlUmV0dXJuU3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9zd2l0Y2g6XG4gICAgICBwYXJzZVN3aXRjaFN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5fdGhyb3c6XG4gICAgICBwYXJzZVRocm93U3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl90cnk6XG4gICAgICBwYXJzZVRyeVN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9sZXQ6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdDpcbiAgICAgIGlmICghZGVjbGFyYXRpb24pIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7IC8vIE5PVEU6IGZhbGxzIHRocm91Z2ggdG8gX3ZhclxuXG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl92YXI6XG4gICAgICBwYXJzZVZhclN0YXRlbWVudChzdGFydHR5cGUgIT09IF90eXBlcy5Ub2tlblR5cGUuX3Zhcik7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlIF90eXBlcy5Ub2tlblR5cGUuX3doaWxlOlxuICAgICAgcGFyc2VXaGlsZVN0YXRlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5icmFjZUw6XG4gICAgICBwYXJzZUJsb2NrKCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLnNlbWk6XG4gICAgICBwYXJzZUVtcHR5U3RhdGVtZW50KCk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQ6XG4gICAgY2FzZSBfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQ6IHtcbiAgICAgIGNvbnN0IG5leHRUeXBlID0gX3Rva2VuaXplci5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApO1xuICAgICAgaWYgKG5leHRUeXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCB8fCBuZXh0VHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5kb3QpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgICBpZiAoc3RhcnR0eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQpIHtcbiAgICAgICAgcGFyc2VJbXBvcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlRXhwb3J0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhc2UgX3R5cGVzLlRva2VuVHlwZS5uYW1lOlxuICAgICAgaWYgKF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uU3RhcnQgPSBfYmFzZS5zdGF0ZS5zdGFydDtcbiAgICAgICAgLy8gcGVlayBhaGVhZCBhbmQgc2VlIGlmIG5leHQgdG9rZW4gaXMgYSBmdW5jdGlvblxuICAgICAgICBjb25zdCBzbmFwc2hvdCA9IF9iYXNlLnN0YXRlLnNuYXBzaG90KCk7XG4gICAgICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgICAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSAmJiAhX3V0aWwuY2FuSW5zZXJ0U2VtaWNvbG9uLmNhbGwodm9pZCAwLCApKSB7XG4gICAgICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbik7XG4gICAgICAgICAgcGFyc2VGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCB0cnVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3VzaW5nICYmXG4gICAgICAgICFfdXRpbC5oYXNGb2xsb3dpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkgJiZcbiAgICAgICAgLy8gU3RhdGVtZW50cyBsaWtlIGB1c2luZ1swXWAgYW5kIGB1c2luZyBpbiBmb29gIGFyZW4ndCBhY3R1YWwgdXNpbmdcbiAgICAgICAgLy8gZGVjbGFyYXRpb25zLlxuICAgICAgICBfdG9rZW5pemVyLmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZVxuICAgICAgKSB7XG4gICAgICAgIHBhcnNlVmFyU3RhdGVtZW50KHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0c0F3YWl0VXNpbmcoKSkge1xuICAgICAgICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0KTtcbiAgICAgICAgcGFyc2VWYXJTdGF0ZW1lbnQodHJ1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gSWYgdGhlIHN0YXRlbWVudCBkb2VzIG5vdCBzdGFydCB3aXRoIGEgc3RhdGVtZW50IGtleXdvcmQgb3IgYVxuICAvLyBicmFjZSwgaXQncyBhbiBFeHByZXNzaW9uU3RhdGVtZW50IG9yIExhYmVsZWRTdGF0ZW1lbnQuIFdlXG4gIC8vIHNpbXBseSBzdGFydCBwYXJzaW5nIGFuIGV4cHJlc3Npb24sIGFuZCBhZnRlcndhcmRzLCBpZiB0aGVcbiAgLy8gbmV4dCB0b2tlbiBpcyBhIGNvbG9uIGFuZCB0aGUgZXhwcmVzc2lvbiB3YXMgYSBzaW1wbGVcbiAgLy8gSWRlbnRpZmllciBub2RlLCB3ZSBzd2l0Y2ggdG8gaW50ZXJwcmV0aW5nIGl0IGFzIGEgbGFiZWwuXG4gIGNvbnN0IGluaXRpYWxUb2tlbnNMZW5ndGggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIGxldCBzaW1wbGVOYW1lID0gbnVsbDtcbiAgaWYgKF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggPT09IGluaXRpYWxUb2tlbnNMZW5ndGggKyAxKSB7XG4gICAgY29uc3QgdG9rZW4gPSBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICh0b2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIHNpbXBsZU5hbWUgPSB0b2tlbi5jb250ZXh0dWFsS2V5d29yZDtcbiAgICB9XG4gIH1cbiAgaWYgKHNpbXBsZU5hbWUgPT0gbnVsbCkge1xuICAgIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKF90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgIHBhcnNlTGFiZWxlZFN0YXRlbWVudCgpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgd2FzIGFuIGlkZW50aWZpZXIsIHNvIHdlIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIGZsb3cvdHlwZXNjcmlwdC1zcGVjaWZpYyBjYXNlcy5cbiAgICBwYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoc2ltcGxlTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcG9zaXRpb25lZCBhdCBhbiBgYXdhaXQgdXNpbmdgIGRlY2xhcmF0aW9uLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGNhbiBoYXBwZW4gZWl0aGVyIGluIHBsYWNlIG9mIGEgcmVndWxhciB2YXJpYWJsZSBkZWNsYXJhdGlvblxuICogb3IgaW4gYSBsb29wIGJvZHksIGFuZCBpbiBib3RoIHBsYWNlcywgdGhlcmUgYXJlIHNpbWlsYXItbG9va2luZyBjYXNlcyB3aGVyZVxuICogd2UgbmVlZCB0byByZXR1cm4gZmFsc2UuXG4gKlxuICogRXhhbXBsZXMgcmV0dXJuaW5nIHRydWU6XG4gKiBhd2FpdCB1c2luZyBmb28gPSBiYXIoKTtcbiAqIGZvciAoYXdhaXQgdXNpbmcgYSBvZiBiKSB7fVxuICpcbiAqIEV4YW1wbGVzIHJldHVybmluZyBmYWxzZTpcbiAqIGF3YWl0IHVzaW5nXG4gKiBhd2FpdCB1c2luZyArIDFcbiAqIGF3YWl0IHVzaW5nIGluc3RhbmNlb2YgVFxuICogZm9yIChhd2FpdCB1c2luZzs7KSB7fVxuICpcbiAqIEZvciBub3csIHdlIGVhcmx5IHJldHVybiBpZiB3ZSBkb24ndCBzZWUgYGF3YWl0YCwgdGhlbiBkbyBhIHNpbXBsZVxuICogYmFja3RyYWNraW5nLWJhc2VkIGxvb2thaGVhZCBmb3IgdGhlIGB1c2luZ2AgYW5kIGlkZW50aWZpZXIgdG9rZW5zLiBJbiB0aGVcbiAqIGZ1dHVyZSwgdGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgd2l0aCBhIGNoYXJhY3Rlci1iYXNlZCBhcHByb2FjaC5cbiAqL1xuZnVuY3Rpb24gc3RhcnRzQXdhaXRVc2luZygpIHtcbiAgaWYgKCFfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXdhaXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgLy8gYXdhaXRcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBpZiAoIV91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl91c2luZykgfHwgX3V0aWwuaGFzUHJlY2VkaW5nTGluZUJyZWFrLmNhbGwodm9pZCAwLCApKSB7XG4gICAgX2Jhc2Uuc3RhdGUucmVzdG9yZUZyb21TbmFwc2hvdChzbmFwc2hvdCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIHVzaW5nXG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgaWYgKCFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8IF91dGlsLmhhc1ByZWNlZGluZ0xpbmVCcmVhay5jYWxsKHZvaWQgMCwgKSkge1xuICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbiBmdW5jdGlvbiBwYXJzZURlY29yYXRvcnMoKSB7XG4gIHdoaWxlIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmF0KSkge1xuICAgIHBhcnNlRGVjb3JhdG9yKCk7XG4gIH1cbn0gZXhwb3J0cy5wYXJzZURlY29yYXRvcnMgPSBwYXJzZURlY29yYXRvcnM7XG5cbmZ1bmN0aW9uIHBhcnNlRGVjb3JhdG9yKCkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xuICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpO1xuICB9IGVsc2Uge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICB3aGlsZSAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICAgIH1cbiAgICBwYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cygpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSB7XG4gICAgYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKTtcbiAgfVxufVxuXG4gZnVuY3Rpb24gYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHMoKSB7XG4gIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cy5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufSBleHBvcnRzLmJhc2VQYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzID0gYmFzZVBhcnNlTWF5YmVEZWNvcmF0b3JBcmd1bWVudHM7XG5cbmZ1bmN0aW9uIHBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBpZiAoIV91dGlsLmlzTGluZVRlcm1pbmF0b3IuY2FsbCh2b2lkIDAsICkpIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gICAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSB7XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiBwYXJzZURvU3RhdGVtZW50KCkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl93aGlsZSk7XG4gIF9leHByZXNzaW9uLnBhcnNlUGFyZW5FeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xuICBfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zZW1pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQoKSB7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgcGFyc2VBbWJpZ3VvdXNGb3JTdGF0ZW1lbnQoKTtcbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGZhbHNlKSk7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgtLTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhpcyB0b2tlbiBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb24gKGV4cGxpY2l0IHJlc291cmNlXG4gKiBtYW5hZ2VtZW50KSBhcyBwYXJ0IG9mIGEgbG9vcC5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbiAqL1xuZnVuY3Rpb24gaXNVc2luZ0luTG9vcCgpIHtcbiAgaWYgKCFfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdXNpbmcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoaXMgbXVzdCBiZSBgZm9yICh1c2luZyBvZmAsIHdoZXJlIGB1c2luZ2AgaXMgdGhlIG5hbWUgb2YgdGhlIGxvb3BcbiAgLy8gdmFyaWFibGUuXG4gIGlmIChfdXRpbC5pc0xvb2thaGVhZENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb2YpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBEaXNhbWJpZ3VhdGluZyBiZXR3ZWVuIGEgYGZvcmAgYW5kIGEgYGZvcmAvYGluYCBvciBgZm9yYC9gb2ZgXG4vLyBsb29wIGlzIG5vbi10cml2aWFsLiBCYXNpY2FsbHksIHdlIGhhdmUgdG8gcGFyc2UgdGhlIGluaXQgYHZhcmBcbi8vIHN0YXRlbWVudCBvciBleHByZXNzaW9uLCBkaXNhbGxvd2luZyB0aGUgYGluYCBvcGVyYXRvciAoc2VlXG4vLyB0aGUgc2Vjb25kIHBhcmFtZXRlciB0byBgcGFyc2VFeHByZXNzaW9uYCksIGFuZCB0aGVuIGNoZWNrXG4vLyB3aGV0aGVyIHRoZSBuZXh0IHRva2VuIGlzIGBpbmAgb3IgYG9mYC4gV2hlbiB0aGVyZSBpcyBubyBpbml0XG4vLyBwYXJ0IChzZW1pY29sb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMpLCBpdFxuLy8gaXMgYSByZWd1bGFyIGBmb3JgIGxvb3AuXG5mdW5jdGlvbiBwYXJzZUFtYmlndW91c0ZvclN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuXG4gIGxldCBmb3JBd2FpdCA9IGZhbHNlO1xuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0KSkge1xuICAgIGZvckF3YWl0ID0gdHJ1ZTtcbiAgICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCk7XG5cbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICBpZiAoZm9yQXdhaXQpIHtcbiAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICAgIHBhcnNlRm9yKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNBd2FpdFVzaW5nID0gc3RhcnRzQXdhaXRVc2luZygpO1xuICBpZiAoaXNBd2FpdFVzaW5nIHx8IF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX3ZhcikgfHwgX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fbGV0KSB8fCBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdCkgfHwgaXNVc2luZ0luTG9vcCgpKSB7XG4gICAgaWYgKGlzQXdhaXRVc2luZykge1xuICAgICAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hd2FpdCk7XG4gICAgfVxuICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBwYXJzZVZhcih0cnVlLCBfYmFzZS5zdGF0ZS50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLl92YXIpO1xuICAgIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9pbikgfHwgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX29mKSkge1xuICAgICAgcGFyc2VGb3JJbihmb3JBd2FpdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBhcnNlRm9yKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgX2V4cHJlc3Npb24ucGFyc2VFeHByZXNzaW9uLmNhbGwodm9pZCAwLCB0cnVlKTtcbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2luKSB8fCBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb2YpKSB7XG4gICAgcGFyc2VGb3JJbihmb3JBd2FpdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmb3JBd2FpdCkge1xuICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgcGFyc2VGb3IoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvblN0YXRlbWVudCgpIHtcbiAgY29uc3QgZnVuY3Rpb25TdGFydCA9IF9iYXNlLnN0YXRlLnN0YXJ0O1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1lbnQoKSB7XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2V4cHJlc3Npb24ucGFyc2VQYXJlbkV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgaWYgKF90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9lbHNlKSkge1xuICAgIHBhcnNlU3RhdGVtZW50KGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVJldHVyblN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuXG4gIC8vIEluIGByZXR1cm5gIChhbmQgYGJyZWFrYC9gY29udGludWVgKSwgdGhlIGtleXdvcmRzIHdpdGhcbiAgLy8gb3B0aW9uYWwgYXJndW1lbnRzLCB3ZSBlYWdlcmx5IGxvb2sgZm9yIGEgc2VtaWNvbG9uIG9yIHRoZVxuICAvLyBwb3NzaWJpbGl0eSB0byBpbnNlcnQgb25lLlxuXG4gIGlmICghX3V0aWwuaXNMaW5lVGVybWluYXRvci5jYWxsKHZvaWQgMCwgKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2V4cHJlc3Npb24ucGFyc2VQYXJlbkV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgY29uc3Qgc3RhcnRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG5cbiAgLy8gRG9uJ3QgYm90aGVyIHZhbGlkYXRpb247IGp1c3QgZ28gdGhyb3VnaCBhbnkgc2VxdWVuY2Ugb2YgY2FzZXMsIGRlZmF1bHRzLCBhbmQgc3RhdGVtZW50cy5cbiAgd2hpbGUgKCFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2Nhc2UpIHx8IF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQpKSB7XG4gICAgICBjb25zdCBpc0Nhc2UgPSBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9jYXNlKTtcbiAgICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICAgIGlmIChpc0Nhc2UpIHtcbiAgICAgICAgX2V4cHJlc3Npb24ucGFyc2VFeHByZXNzaW9uLmNhbGwodm9pZCAwLCApO1xuICAgICAgfVxuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VTdGF0ZW1lbnQodHJ1ZSk7XG4gICAgfVxuICB9XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTsgLy8gQ2xvc2luZyBicmFjZVxuICBjb25zdCBlbmRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgX2Jhc2Uuc3RhdGUuc2NvcGVzLnB1c2gobmV3ICgwLCBfc3RhdGUuU2NvcGUpKHN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgZmFsc2UpKTtcbiAgX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aC0tO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRocm93U3RhdGVtZW50KCkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNhdGNoQ2xhdXNlUGFyYW0oKSB7XG4gIF9sdmFsLnBhcnNlQmluZGluZ0F0b20uY2FsbCh2b2lkIDAsIHRydWUgLyogaXNCbG9ja1Njb3BlICovKTtcblxuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIF90eXBlc2NyaXB0LnRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbi5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVRyeVN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuXG4gIHBhcnNlQmxvY2soKTtcblxuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fY2F0Y2gpKSB7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIGxldCBjYXRjaEJpbmRpbmdTdGFydFRva2VuSW5kZXggPSBudWxsO1xuICAgIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgICAgIGNhdGNoQmluZGluZ1N0YXJ0VG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKTtcbiAgICAgIHBhcnNlQ2F0Y2hDbGF1c2VQYXJhbSgpO1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgfVxuICAgIHBhcnNlQmxvY2soKTtcbiAgICBpZiAoY2F0Y2hCaW5kaW5nU3RhcnRUb2tlbkluZGV4ICE9IG51bGwpIHtcbiAgICAgIC8vIFdlIG5lZWQgYSBzcGVjaWFsIHNjb3BlIGZvciB0aGUgY2F0Y2ggYmluZGluZyB3aGljaCBpbmNsdWRlcyB0aGUgYmluZGluZyBpdHNlbGYgYW5kIHRoZVxuICAgICAgLy8gY2F0Y2ggYmxvY2suXG4gICAgICBjb25zdCBlbmRUb2tlbkluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgICAgIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKShjYXRjaEJpbmRpbmdTdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGZhbHNlKSk7XG4gICAgICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoLS07XG4gICAgfVxuICB9XG4gIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZmluYWxseSkpIHtcbiAgICBwYXJzZUJsb2NrKCk7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIHBhcnNlVmFyU3RhdGVtZW50KGlzQmxvY2tTY29wZSkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gIHBhcnNlVmFyKGZhbHNlLCBpc0Jsb2NrU2NvcGUpO1xuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59IGV4cG9ydHMucGFyc2VWYXJTdGF0ZW1lbnQgPSBwYXJzZVZhclN0YXRlbWVudDtcblxuZnVuY3Rpb24gcGFyc2VXaGlsZVN0YXRlbWVudCgpIHtcbiAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICBfZXhwcmVzc2lvbi5wYXJzZVBhcmVuRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgcGFyc2VTdGF0ZW1lbnQoZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkge1xuICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGFiZWxlZFN0YXRlbWVudCgpIHtcbiAgcGFyc2VTdGF0ZW1lbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdGF0ZW1lbnQgc3RhcnRpbmcgd2l0aCBhbiBpZGVudGlmaWVyIG9mIHRoZSBnaXZlbiBuYW1lLiBTdWJjbGFzc2VzIG1hdGNoIG9uIHRoZSBuYW1lXG4gKiB0byBoYW5kbGUgc3RhdGVtZW50cyBsaWtlIFwiZGVjbGFyZVwiLlxuICovXG5mdW5jdGlvbiBwYXJzZUlkZW50aWZpZXJTdGF0ZW1lbnQoY29udGV4dHVhbEtleXdvcmQpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlSWRlbnRpZmllclN0YXRlbWVudC5jYWxsKHZvaWQgMCwgY29udGV4dHVhbEtleXdvcmQpO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93UGFyc2VJZGVudGlmaWVyU3RhdGVtZW50LmNhbGwodm9pZCAwLCBjb250ZXh0dWFsS2V5d29yZCk7XG4gIH0gZWxzZSB7XG4gICAgX3V0aWwuc2VtaWNvbG9uLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbi8vIFBhcnNlIGEgc2VtaWNvbG9uLWVuY2xvc2VkIGJsb2NrIG9mIHN0YXRlbWVudHMuXG4gZnVuY3Rpb24gcGFyc2VCbG9jayhpc0Z1bmN0aW9uU2NvcGUgPSBmYWxzZSwgY29udGV4dElkID0gMCkge1xuICBjb25zdCBzdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoKys7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICBpZiAoY29udGV4dElkKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIH1cbiAgcGFyc2VCbG9ja0JvZHkoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpO1xuICBpZiAoY29udGV4dElkKSB7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIH1cbiAgY29uc3QgZW5kVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIGlzRnVuY3Rpb25TY29wZSkpO1xuICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoLS07XG59IGV4cG9ydHMucGFyc2VCbG9jayA9IHBhcnNlQmxvY2s7XG5cbiBmdW5jdGlvbiBwYXJzZUJsb2NrQm9keShlbmQpIHtcbiAgd2hpbGUgKCFfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgZW5kKSAmJiAhX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICBwYXJzZVN0YXRlbWVudCh0cnVlKTtcbiAgfVxufSBleHBvcnRzLnBhcnNlQmxvY2tCb2R5ID0gcGFyc2VCbG9ja0JvZHk7XG5cbi8vIFBhcnNlIGEgcmVndWxhciBgZm9yYCBsb29wLiBUaGUgZGlzYW1iaWd1YXRpb24gY29kZSBpblxuLy8gYHBhcnNlU3RhdGVtZW50YCB3aWxsIGFscmVhZHkgaGF2ZSBwYXJzZWQgdGhlIGluaXQgc3RhdGVtZW50IG9yXG4vLyBleHByZXNzaW9uLlxuXG5mdW5jdGlvbiBwYXJzZUZvcigpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNlbWkpO1xuICBpZiAoIV90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnNlbWkpO1xuICBpZiAoIV90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgIF9leHByZXNzaW9uLnBhcnNlRXhwcmVzc2lvbi5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgcGFyc2VTdGF0ZW1lbnQoZmFsc2UpO1xufVxuXG4vLyBQYXJzZSBhIGBmb3JgL2BpbmAgYW5kIGBmb3JgL2BvZmAgbG9vcCwgd2hpY2ggYXJlIGFsbW9zdFxuLy8gc2FtZSBmcm9tIHBhcnNlcidzIHBlcnNwZWN0aXZlLlxuXG5mdW5jdGlvbiBwYXJzZUZvckluKGZvckF3YWl0KSB7XG4gIGlmIChmb3JBd2FpdCkge1xuICAgIF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb2YpO1xuICB9IGVsc2Uge1xuICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBfZXhwcmVzc2lvbi5wYXJzZUV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICk7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpO1xuICBwYXJzZVN0YXRlbWVudChmYWxzZSk7XG59XG5cbi8vIFBhcnNlIGEgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG5cbmZ1bmN0aW9uIHBhcnNlVmFyKGlzRm9yLCBpc0Jsb2NrU2NvcGUpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwYXJzZVZhckhlYWQoaXNCbG9ja1Njb3BlKTtcbiAgICBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgICBjb25zdCBlcUluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDE7XG4gICAgICBfZXhwcmVzc2lvbi5wYXJzZU1heWJlQXNzaWduLmNhbGwodm9pZCAwLCBpc0Zvcik7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbZXFJbmRleF0ucmhzRW5kSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoIV90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFySGVhZChpc0Jsb2NrU2NvcGUpIHtcbiAgX2x2YWwucGFyc2VCaW5kaW5nQXRvbS5jYWxsKHZvaWQgMCwgaXNCbG9ja1Njb3BlKTtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c0FmdGVyUGFyc2VWYXJIZWFkLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93QWZ0ZXJQYXJzZVZhckhlYWQuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuLy8gUGFyc2UgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBvciBsaXRlcmFsIChkZXBlbmRpbmcgb24gdGhlXG4vLyBgaXNTdGF0ZW1lbnRgIHBhcmFtZXRlcikuXG5cbiBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uKFxuICBmdW5jdGlvblN0YXJ0LFxuICBpc1N0YXRlbWVudCxcbiAgb3B0aW9uYWxJZCA9IGZhbHNlLFxuKSB7XG4gIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpKSB7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgaWYgKGlzU3RhdGVtZW50ICYmICFvcHRpb25hbElkICYmICFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmICFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl95aWVsZCkpIHtcbiAgICBfdXRpbC51bmV4cGVjdGVkLmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgbGV0IG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IG51bGw7XG5cbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAvLyBFeHByZXNzaW9uLXN0eWxlIGZ1bmN0aW9ucyBzaG91bGQgbGltaXQgdGhlaXIgbmFtZSdzIHNjb3BlIHRvIHRoZSBmdW5jdGlvbiBib2R5LCBzbyB3ZSBtYWtlXG4gICAgLy8gYSBuZXcgZnVuY3Rpb24gc2NvcGUgdG8gZW5mb3JjZSB0aGF0LlxuICAgIGlmICghaXNTdGF0ZW1lbnQpIHtcbiAgICAgIG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoKys7XG4gICAgfVxuICAgIF9sdmFsLnBhcnNlQmluZGluZ0lkZW50aWZpZXIuY2FsbCh2b2lkIDAsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0VG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgcGFyc2VGdW5jdGlvblBhcmFtcygpO1xuICBfZXhwcmVzc2lvbi5wYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaC5jYWxsKHZvaWQgMCwgZnVuY3Rpb25TdGFydCk7XG4gIGNvbnN0IGVuZFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgYmxvY2sgc2NvcGUgb2YgdGhlIGZ1bmN0aW9uIGJvZHksIHdlIG5lZWQgYSBzZXBhcmF0ZSBmdW5jdGlvbi1zdHlsZSBzY29wZVxuICAvLyB0aGF0IGluY2x1ZGVzIHRoZSBwYXJhbXMuXG4gIF9iYXNlLnN0YXRlLnNjb3Blcy5wdXNoKG5ldyAoMCwgX3N0YXRlLlNjb3BlKShzdGFydFRva2VuSW5kZXgsIGVuZFRva2VuSW5kZXgsIHRydWUpKTtcbiAgX2Jhc2Uuc3RhdGUuc2NvcGVEZXB0aC0tO1xuICBpZiAobmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4ICE9PSBudWxsKSB7XG4gICAgX2Jhc2Uuc3RhdGUuc2NvcGVzLnB1c2gobmV3ICgwLCBfc3RhdGUuU2NvcGUpKG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgdHJ1ZSkpO1xuICAgIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgtLTtcbiAgfVxufSBleHBvcnRzLnBhcnNlRnVuY3Rpb24gPSBwYXJzZUZ1bmN0aW9uO1xuXG4gZnVuY3Rpb24gcGFyc2VGdW5jdGlvblBhcmFtcyhcbiAgYWxsb3dNb2RpZmllcnMgPSBmYWxzZSxcbiAgZnVuY0NvbnRleHRJZCA9IDAsXG4pIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcy5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1N0YXJ0UGFyc2VGdW5jdGlvblBhcmFtcy5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuXG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICBpZiAoZnVuY0NvbnRleHRJZCkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gZnVuY0NvbnRleHRJZDtcbiAgfVxuICBfbHZhbC5wYXJzZUJpbmRpbmdMaXN0LmNhbGwodm9pZCAwLCBcbiAgICBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUixcbiAgICBmYWxzZSAvKiBpc0Jsb2NrU2NvcGUgKi8sXG4gICAgZmFsc2UgLyogYWxsb3dFbXB0eSAqLyxcbiAgICBhbGxvd01vZGlmaWVycyxcbiAgICBmdW5jQ29udGV4dElkLFxuICApO1xuICBpZiAoZnVuY0NvbnRleHRJZCkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gZnVuY0NvbnRleHRJZDtcbiAgfVxufSBleHBvcnRzLnBhcnNlRnVuY3Rpb25QYXJhbXMgPSBwYXJzZUZ1bmN0aW9uUGFyYW1zO1xuXG4vLyBQYXJzZSBhIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGVcbi8vIGBpc1N0YXRlbWVudGAgcGFyYW1ldGVyKS5cblxuIGZ1bmN0aW9uIHBhcnNlQ2xhc3MoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQgPSBmYWxzZSkge1xuICAvLyBQdXQgYSBjb250ZXh0IElEIG9uIHRoZSBjbGFzcyBrZXl3b3JkLCB0aGUgb3Blbi1icmFjZSwgYW5kIHRoZSBjbG9zZS1icmFjZSwgc28gdGhhdCBsYXRlclxuICAvLyBjb2RlIGNhbiBlYXNpbHkgbmF2aWdhdGUgdG8gbWVhbmluZ2Z1bCBwb2ludHMgb24gdGhlIGNsYXNzLlxuICBjb25zdCBjb250ZXh0SWQgPSBfYmFzZS5nZXROZXh0Q29udGV4dElkLmNhbGwodm9pZCAwLCApO1xuXG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaXNFeHByZXNzaW9uID0gIWlzU3RhdGVtZW50O1xuICAvLyBMaWtlIHdpdGggZnVuY3Rpb25zLCB3ZSBkZWNsYXJlIGEgc3BlY2lhbCBcIm5hbWUgc2NvcGVcIiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbmFtZSB0byB0aGUgZW5kXG4gIC8vIG9mIHRoZSBjbGFzcywgYnV0IG9ubHkgd2l0aCBleHByZXNzaW9uLXN0eWxlIGNsYXNzZXMsIHRvIHJlcHJlc2VudCB0aGUgZmFjdCB0aGF0IHRoZSBuYW1lIGlzXG4gIC8vIGF2YWlsYWJsZSB0byB0aGUgYm9keSBvZiB0aGUgY2xhc3MgYnV0IG5vdCBhbiBvdXRlciBkZWNsYXJhdGlvbi5cbiAgbGV0IG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCA9IG51bGw7XG4gIGlmICghaXNTdGF0ZW1lbnQpIHtcbiAgICBuYW1lU2NvcGVTdGFydFRva2VuSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICAgIF9iYXNlLnN0YXRlLnNjb3BlRGVwdGgrKztcbiAgfVxuICBwYXJzZUNsYXNzSWQoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQpO1xuICBwYXJzZUNsYXNzU3VwZXIoKTtcbiAgY29uc3Qgb3BlbkJyYWNlSW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoO1xuICBwYXJzZUNsYXNzQm9keShjb250ZXh0SWQpO1xuICBpZiAoX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW29wZW5CcmFjZUluZGV4XS5jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uY29udGV4dElkID0gY29udGV4dElkO1xuICBpZiAobmFtZVNjb3BlU3RhcnRUb2tlbkluZGV4ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW5kVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgX2Jhc2Uuc3RhdGUuc2NvcGVzLnB1c2gobmV3ICgwLCBfc3RhdGUuU2NvcGUpKG5hbWVTY29wZVN0YXJ0VG9rZW5JbmRleCwgZW5kVG9rZW5JbmRleCwgZmFsc2UpKTtcbiAgICBfYmFzZS5zdGF0ZS5zY29wZURlcHRoLS07XG4gIH1cbn0gZXhwb3J0cy5wYXJzZUNsYXNzID0gcGFyc2VDbGFzcztcblxuZnVuY3Rpb24gaXNDbGFzc1Byb3BlcnR5KCkge1xuICByZXR1cm4gX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5lcSkgfHwgX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zZW1pKSB8fCBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgfHwgX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iYW5nKSB8fCBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc01ldGhvZCgpIHtcbiAgcmV0dXJuIF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fCBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoY2xhc3NDb250ZXh0SWQpIHtcbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG5cbiAgd2hpbGUgKCFfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zZW1pKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXQpKSB7XG4gICAgICBwYXJzZURlY29yYXRvcigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1lbWJlclN0YXJ0ID0gX2Jhc2Uuc3RhdGUuc3RhcnQ7XG4gICAgcGFyc2VDbGFzc01lbWJlcihtZW1iZXJTdGFydCwgY2xhc3NDb250ZXh0SWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NNZW1iZXIobWVtYmVyU3RhcnQsIGNsYXNzQ29udGV4dElkKSB7XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgX3R5cGVzY3JpcHQudHNQYXJzZU1vZGlmaWVycy5jYWxsKHZvaWQgMCwgW1xuICAgICAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9kZWNsYXJlLFxuICAgICAgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9wdWJsaWMsXG4gICAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3Byb3RlY3RlZCxcbiAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fcHJpdmF0ZSxcbiAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fb3ZlcnJpZGUsXG4gICAgXSk7XG4gIH1cbiAgbGV0IGlzU3RhdGljID0gZmFsc2U7XG4gIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N0YXRpYykge1xuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTsgLy8gZWF0cyAnc3RhdGljJ1xuICAgIGlmIChpc0NsYXNzTWV0aG9kKCkpIHtcbiAgICAgIHBhcnNlQ2xhc3NNZXRob2QobWVtYmVyU3RhcnQsIC8qIGlzQ29uc3RydWN0b3IgKi8gZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoaXNDbGFzc1Byb3BlcnR5KCkpIHtcbiAgICAgIHBhcnNlQ2xhc3NQcm9wZXJ0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2Ugc29tZXRoaW5nIHN0YXRpY1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX3N0YXRpYztcbiAgICBpc1N0YXRpYyA9IHRydWU7XG5cbiAgICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3RhdGljIGJsb2NrLiBNYXJrIHRoZSB3b3JkIFwic3RhdGljXCIgd2l0aCB0aGUgY2xhc3MgY29udGV4dCBJRCBmb3IgY2xhc3MgZWxlbWVudFxuICAgICAgLy8gZGV0ZWN0aW9uIGFuZCBwYXJzZSBhcyBhIHJlZ3VsYXIgYmxvY2suXG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLmNvbnRleHRJZCA9IGNsYXNzQ29udGV4dElkO1xuICAgICAgcGFyc2VCbG9jaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMobWVtYmVyU3RhcnQsIGlzU3RhdGljLCBjbGFzc0NvbnRleHRJZCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMoXG4gIG1lbWJlclN0YXJ0LFxuICBpc1N0YXRpYyxcbiAgY2xhc3NDb250ZXh0SWQsXG4pIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBpZiAoX3R5cGVzY3JpcHQudHNUcnlQYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljLmNhbGwodm9pZCAwLCBpc1N0YXRpYykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKF90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpKSB7XG4gICAgLy8gYSBnZW5lcmF0b3JcbiAgICBwYXJzZUNsYXNzUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKTtcbiAgICBwYXJzZUNsYXNzTWV0aG9kKG1lbWJlclN0YXJ0LCAvKiBpc0NvbnN0cnVjdG9yICovIGZhbHNlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBHZXQgdGhlIGlkZW50aWZpZXIgbmFtZSBzbyB3ZSBjYW4gdGVsbCBpZiBpdCdzIGFjdHVhbGx5IGEga2V5d29yZCBsaWtlIFwiYXN5bmNcIiwgXCJnZXRcIiwgb3JcbiAgLy8gXCJzZXRcIi5cbiAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gIGxldCBpc0NvbnN0cnVjdG9yID0gZmFsc2U7XG4gIGNvbnN0IHRva2VuID0gX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXTtcbiAgLy8gV2UgYWxsb3cgXCJjb25zdHJ1Y3RvclwiIGFzIGVpdGhlciBhbiBpZGVudGlmaWVyIG9yIGEgc3RyaW5nLlxuICBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpIHtcbiAgICBpc0NvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgfVxuICBwYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKCk7XG5cbiAgaWYgKGlzQ2xhc3NNZXRob2QoKSkge1xuICAgIHBhcnNlQ2xhc3NNZXRob2QobWVtYmVyU3RhcnQsIGlzQ29uc3RydWN0b3IpO1xuICB9IGVsc2UgaWYgKGlzQ2xhc3NQcm9wZXJ0eSgpKSB7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMgJiYgIV91dGlsLmlzTGluZVRlcm1pbmF0b3IuY2FsbCh2b2lkIDAsICkpIHtcbiAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9hc3luYztcbiAgICAvLyBhbiBhc3luYyBtZXRob2RcbiAgICBjb25zdCBpc0dlbmVyYXRvciA9IF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3Rhcik7XG4gICAgaWYgKGlzR2VuZXJhdG9yKSB7XG4gICAgICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHNvLWNhbGxlZCBwYXJzZWQgbmFtZSB3b3VsZCBoYXZlIGJlZW4gXCJhc3luY1wiOiBnZXQgdGhlIHJlYWwgbmFtZS5cbiAgICBwYXJzZUNsYXNzUHJvcGVydHlOYW1lKGNsYXNzQ29udGV4dElkKTtcbiAgICBwYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKCk7XG4gICAgcGFyc2VDbGFzc01ldGhvZChtZW1iZXJTdGFydCwgZmFsc2UgLyogaXNDb25zdHJ1Y3RvciAqLyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2dldCB8fFxuICAgICAgdG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fc2V0KSAmJlxuICAgICEoX3V0aWwuaXNMaW5lVGVybWluYXRvci5jYWxsKHZvaWQgMCwgKSAmJiBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpKVxuICApIHtcbiAgICBpZiAodG9rZW4uY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZ2V0KSB7XG4gICAgICBfYmFzZS5zdGF0ZS50b2tlbnNbX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPSBfdHlwZXMuVG9rZW5UeXBlLl9nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9IF90eXBlcy5Ub2tlblR5cGUuX3NldDtcbiAgICB9XG4gICAgLy8gYGdldFxcbipgIGlzIGFuIHVuaW5pdGlhbGl6ZWQgcHJvcGVydHkgbmFtZWQgJ2dldCcgZm9sbG93ZWQgYnkgYSBnZW5lcmF0b3IuXG4gICAgLy8gYSBnZXR0ZXIgb3Igc2V0dGVyXG4gICAgLy8gVGhlIHNvLWNhbGxlZCBwYXJzZWQgbmFtZSB3b3VsZCBoYXZlIGJlZW4gXCJnZXQvc2V0XCI6IGdldCB0aGUgcmVhbCBuYW1lLlxuICAgIHBhcnNlQ2xhc3NQcm9wZXJ0eU5hbWUoY2xhc3NDb250ZXh0SWQpO1xuICAgIHBhcnNlQ2xhc3NNZXRob2QobWVtYmVyU3RhcnQsIC8qIGlzQ29uc3RydWN0b3IgKi8gZmFsc2UpO1xuICB9IGVsc2UgaWYgKHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FjY2Vzc29yICYmICFfdXRpbC5pc0xpbmVUZXJtaW5hdG9yLmNhbGwodm9pZCAwLCApKSB7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCk7XG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNMaW5lVGVybWluYXRvci5jYWxsKHZvaWQgMCwgKSkge1xuICAgIC8vIGFuIHVuaW5pdGlhbGl6ZWQgY2xhc3MgcHJvcGVydHkgKGR1ZSB0byBBU0ksIHNpbmNlIHdlIGRvbid0IG90aGVyd2lzZSByZWNvZ25pemUgdGhlIG5leHQgdG9rZW4pXG4gICAgcGFyc2VDbGFzc1Byb3BlcnR5KCk7XG4gIH0gZWxzZSB7XG4gICAgX3V0aWwudW5leHBlY3RlZC5jYWxsKHZvaWQgMCwgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUNsYXNzTWV0aG9kKGZ1bmN0aW9uU3RhcnQsIGlzQ29uc3RydWN0b3IpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMuY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKSkge1xuICAgICAgX2Zsb3cuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uLmNhbGwodm9pZCAwLCApO1xuICAgIH1cbiAgfVxuICBfZXhwcmVzc2lvbi5wYXJzZU1ldGhvZC5jYWxsKHZvaWQgMCwgZnVuY3Rpb25TdGFydCwgaXNDb25zdHJ1Y3Rvcik7XG59XG5cbi8vIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgcHJvcGVydHksIGlmIGl0IGlzIGEgc2ltcGxlIGlkZW50aWZpZXIuXG4gZnVuY3Rpb24gcGFyc2VDbGFzc1Byb3BlcnR5TmFtZShjbGFzc0NvbnRleHRJZCkge1xuICBfZXhwcmVzc2lvbi5wYXJzZVByb3BlcnR5TmFtZS5jYWxsKHZvaWQgMCwgY2xhc3NDb250ZXh0SWQpO1xufSBleHBvcnRzLnBhcnNlQ2xhc3NQcm9wZXJ0eU5hbWUgPSBwYXJzZUNsYXNzUHJvcGVydHlOYW1lO1xuXG4gZnVuY3Rpb24gcGFyc2VQb3N0TWVtYmVyTmFtZU1vZGlmaWVycygpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBjb25zdCBvbGRJc1R5cGUgPSBfdG9rZW5pemVyLnB1c2hUeXBlQ29udGV4dC5jYWxsKHZvaWQgMCwgMCk7XG4gICAgX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb24pO1xuICAgIF90b2tlbml6ZXIucG9wVHlwZUNvbnRleHQuY2FsbCh2b2lkIDAsIG9sZElzVHlwZSk7XG4gIH1cbn0gZXhwb3J0cy5wYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzID0gcGFyc2VQb3N0TWVtYmVyTmFtZU1vZGlmaWVycztcblxuIGZ1bmN0aW9uIHBhcnNlQ2xhc3NQcm9wZXJ0eSgpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdG9rZW5pemVyLmVhdFR5cGVUb2tlbi5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5iYW5nKTtcbiAgICBfdHlwZXNjcmlwdC50c1RyeVBhcnNlVHlwZUFubm90YXRpb24uY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSkge1xuICAgICAgX2Zsb3cuZmxvd1BhcnNlVHlwZUFubm90YXRpb24uY2FsbCh2b2lkIDAsICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgY29uc3QgZXF1YWxzVG9rZW5JbmRleCA9IF9iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGg7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIF9leHByZXNzaW9uLnBhcnNlTWF5YmVBc3NpZ24uY2FsbCh2b2lkIDAsICk7XG4gICAgX2Jhc2Uuc3RhdGUudG9rZW5zW2VxdWFsc1Rva2VuSW5kZXhdLnJoc0VuZEluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbiAgfVxuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59IGV4cG9ydHMucGFyc2VDbGFzc1Byb3BlcnR5ID0gcGFyc2VDbGFzc1Byb3BlcnR5O1xuXG5mdW5jdGlvbiBwYXJzZUNsYXNzSWQoaXNTdGF0ZW1lbnQsIG9wdGlvbmFsSWQgPSBmYWxzZSkge1xuICBpZiAoXG4gICAgX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCAmJlxuICAgICghaXNTdGF0ZW1lbnQgfHwgb3B0aW9uYWxJZCkgJiZcbiAgICBfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5faW1wbGVtZW50cylcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICBfbHZhbC5wYXJzZUJpbmRpbmdJZGVudGlmaWVyLmNhbGwodm9pZCAwLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgX3R5cGVzY3JpcHQudHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2UgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbikpIHtcbiAgICAgIF9mbG93LmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhIHN1cGVyY2xhc3MuXG5mdW5jdGlvbiBwYXJzZUNsYXNzU3VwZXIoKSB7XG4gIGxldCBoYXNTdXBlciA9IGZhbHNlO1xuICBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2V4dGVuZHMpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByU3Vic2NyaXB0cy5jYWxsKHZvaWQgMCwgKTtcbiAgICBoYXNTdXBlciA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaGFzU3VwZXIgPSBmYWxzZTtcbiAgfVxuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIF90eXBlc2NyaXB0LnRzQWZ0ZXJQYXJzZUNsYXNzU3VwZXIuY2FsbCh2b2lkIDAsIGhhc1N1cGVyKTtcbiAgfSBlbHNlIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd0FmdGVyUGFyc2VDbGFzc1N1cGVyLmNhbGwodm9pZCAwLCBoYXNTdXBlcik7XG4gIH1cbn1cblxuLy8gUGFyc2VzIG1vZHVsZSBleHBvcnQgZGVjbGFyYXRpb24uXG5cbiBmdW5jdGlvbiBwYXJzZUV4cG9ydCgpIHtcbiAgY29uc3QgZXhwb3J0SW5kZXggPSBfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMTtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBpZiAoX3R5cGVzY3JpcHQudHNUcnlQYXJzZUV4cG9ydC5jYWxsKHZvaWQgMCwgKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAvLyBleHBvcnQgKiBmcm9tICcuLi4nXG4gIGlmIChzaG91bGRQYXJzZUV4cG9ydFN0YXIoKSkge1xuICAgIHBhcnNlRXhwb3J0U3RhcigpO1xuICB9IGVsc2UgaWYgKGlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcigpKSB7XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgZnJvbVxuICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgJiYgX3Rva2VuaXplci5sb29rYWhlYWRUeXBlLmNhbGwodm9pZCAwLCApID09PSBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpIHtcbiAgICAgIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSk7XG4gICAgICBfdXRpbC5leHBlY3QuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuc3Rhcik7XG4gICAgICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKTtcbiAgICAgIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VFeHBvcnRTcGVjaWZpZXJzTWF5YmUoKTtcbiAgICB9XG4gICAgcGFyc2VFeHBvcnRGcm9tKCk7XG4gIH0gZWxzZSBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQpKSB7XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4uXG4gICAgcGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbigpO1xuICB9IGVsc2UgaWYgKHNob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSkge1xuICAgIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgICBwYXJzZUV4cG9ydFNwZWNpZmllcnMoKTtcbiAgICBwYXJzZUV4cG9ydEZyb20oKTtcbiAgfVxuICBfYmFzZS5zdGF0ZS50b2tlbnNbZXhwb3J0SW5kZXhdLnJoc0VuZEluZGV4ID0gX2Jhc2Uuc3RhdGUudG9rZW5zLmxlbmd0aDtcbn0gZXhwb3J0cy5wYXJzZUV4cG9ydCA9IHBhcnNlRXhwb3J0O1xuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydERlZmF1bHRFeHByZXNzaW9uKCkge1xuICBpZiAoX2Jhc2UuaXNUeXBlU2NyaXB0RW5hYmxlZCkge1xuICAgIGlmIChfdHlwZXNjcmlwdC50c1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBpZiAoX2Zsb3cuZmxvd1RyeVBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24uY2FsbCh2b2lkIDAsICkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgY29uc3QgZnVuY3Rpb25TdGFydCA9IF9iYXNlLnN0YXRlLnN0YXJ0O1xuICBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSkge1xuICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSAmJiBfdG9rZW5pemVyLmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uKSB7XG4gICAgLy8gYXN5bmMgZnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICBfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKTtcbiAgICBfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pO1xuICAgIHBhcnNlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MpKSB7XG4gICAgcGFyc2VDbGFzcyh0cnVlLCB0cnVlKTtcbiAgfSBlbHNlIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmF0KSkge1xuICAgIHBhcnNlRGVjb3JhdG9ycygpO1xuICAgIHBhcnNlQ2xhc3ModHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VNYXliZUFzc2lnbi5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlRXhwb3J0RGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsICk7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCkge1xuICAgIF9mbG93LmZsb3dQYXJzZUV4cG9ydERlY2xhcmF0aW9uLmNhbGwodm9pZCAwLCApO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlU3RhdGVtZW50KHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgJiYgX3R5cGVzY3JpcHQudHNJc0RlY2xhcmF0aW9uU3RhcnQuY2FsbCh2b2lkIDAsICkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoX2Jhc2UuaXNGbG93RW5hYmxlZCAmJiBfZmxvdy5mbG93U2hvdWxkRGlzYWxsb3dFeHBvcnREZWZhdWx0U3BlY2lmaWVyLmNhbGwodm9pZCAwLCApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgcmV0dXJuIF9iYXNlLnN0YXRlLmNvbnRleHR1YWxLZXl3b3JkICE9PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jO1xuICB9XG5cbiAgaWYgKCFfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLl9kZWZhdWx0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IF9uZXh0ID0gX3Rva2VuaXplci5uZXh0VG9rZW5TdGFydC5jYWxsKHZvaWQgMCwgKTtcbiAgY29uc3QgbG9va2FoZWFkID0gX3Rva2VuaXplci5sb29rYWhlYWRUeXBlQW5kS2V5d29yZC5jYWxsKHZvaWQgMCwgKTtcbiAgY29uc3QgaGFzRnJvbSA9XG4gICAgbG9va2FoZWFkLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSAmJiBsb29rYWhlYWQuY29udGV4dHVhbEtleXdvcmQgPT09IF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbTtcbiAgaWYgKGxvb2thaGVhZC50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gbG9va2FoZWFkIGFnYWluIHdoZW4gYGV4cG9ydCBkZWZhdWx0IGZyb21gIGlzIHNlZW5cbiAgaWYgKGhhc0Zyb20pIHtcbiAgICBjb25zdCBuZXh0QWZ0ZXJGcm9tID0gX2Jhc2UuaW5wdXQuY2hhckNvZGVBdChfdG9rZW5pemVyLm5leHRUb2tlblN0YXJ0U2luY2UuY2FsbCh2b2lkIDAsIF9uZXh0ICsgNCkpO1xuICAgIHJldHVybiBuZXh0QWZ0ZXJGcm9tID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5xdW90YXRpb25NYXJrIHx8IG5leHRBZnRlckZyb20gPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLmFwb3N0cm9waGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcnNNYXliZSgpIHtcbiAgaWYgKF90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgIHBhcnNlRXhwb3J0U3BlY2lmaWVycygpO1xuICB9XG59XG5cbiBmdW5jdGlvbiBwYXJzZUV4cG9ydEZyb20oKSB7XG4gIGlmIChfdXRpbC5lYXRDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByQXRvbS5jYWxsKHZvaWQgMCwgKTtcbiAgICBtYXliZVBhcnNlSW1wb3J0QXR0cmlidXRlcygpO1xuICB9XG4gIF91dGlsLnNlbWljb2xvbi5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy5wYXJzZUV4cG9ydEZyb20gPSBwYXJzZUV4cG9ydEZyb207XG5cbmZ1bmN0aW9uIHNob3VsZFBhcnNlRXhwb3J0U3RhcigpIHtcbiAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICByZXR1cm4gX2Zsb3cuZmxvd1Nob3VsZFBhcnNlRXhwb3J0U3Rhci5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydFN0YXIoKSB7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1BhcnNlRXhwb3J0U3Rhci5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlUGFyc2VFeHBvcnRTdGFyKCk7XG4gIH1cbn1cblxuIGZ1bmN0aW9uIGJhc2VQYXJzZUV4cG9ydFN0YXIoKSB7XG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKTtcblxuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIHBhcnNlRXhwb3J0TmFtZXNwYWNlKCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VFeHBvcnRGcm9tKCk7XG4gIH1cbn0gZXhwb3J0cy5iYXNlUGFyc2VFeHBvcnRTdGFyID0gYmFzZVBhcnNlRXhwb3J0U3RhcjtcblxuZnVuY3Rpb24gcGFyc2VFeHBvcnROYW1lc3BhY2UoKSB7XG4gIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgX2Jhc2Uuc3RhdGUudG9rZW5zW19iYXNlLnN0YXRlLnRva2Vucy5sZW5ndGggLSAxXS50eXBlID0gX3R5cGVzLlRva2VuVHlwZS5fYXM7XG4gIF9leHByZXNzaW9uLnBhcnNlSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgcGFyc2VFeHBvcnRTcGVjaWZpZXJzTWF5YmUoKTtcbiAgcGFyc2VFeHBvcnRGcm9tKCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gIHJldHVybiAoXG4gICAgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgJiYgX3R5cGVzY3JpcHQudHNJc0RlY2xhcmF0aW9uU3RhcnQuY2FsbCh2b2lkIDAsICkpIHx8XG4gICAgKF9iYXNlLmlzRmxvd0VuYWJsZWQgJiYgX2Zsb3cuZmxvd1Nob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsICkpIHx8XG4gICAgX2Jhc2Uuc3RhdGUudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5fdmFyIHx8XG4gICAgX2Jhc2Uuc3RhdGUudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5fY29uc3QgfHxcbiAgICBfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLl9sZXQgfHxcbiAgICBfYmFzZS5zdGF0ZS50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbiB8fFxuICAgIF9iYXNlLnN0YXRlLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzIHx8XG4gICAgX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jKSB8fFxuICAgIF90b2tlbml6ZXIubWF0Y2guY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuYXQpXG4gICk7XG59XG5cbi8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZSBleHBvcnRzLlxuIGZ1bmN0aW9uIHBhcnNlRXhwb3J0U3BlY2lmaWVycygpIHtcbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcblxuICAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG5cbiAgd2hpbGUgKCFfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpICYmICFfYmFzZS5zdGF0ZS5lcnJvcikge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUV4cG9ydFNwZWNpZmllcigpO1xuICB9XG59IGV4cG9ydHMucGFyc2VFeHBvcnRTcGVjaWZpZXJzID0gcGFyc2VFeHBvcnRTcGVjaWZpZXJzO1xuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydFNwZWNpZmllcigpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlRXhwb3J0U3BlY2lmaWVyLmNhbGwodm9pZCAwLCApO1xuICAgIHJldHVybjtcbiAgfVxuICBfZXhwcmVzc2lvbi5wYXJzZUlkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfdG9rZW5pemVyLklkZW50aWZpZXJSb2xlLkV4cG9ydEFjY2VzcztcbiAgaWYgKF91dGlsLmVhdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXMpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnRpbmcgYXQgdGhlIGBtb2R1bGVgIHRva2VuIGluIGFuIGltcG9ydCwgZGV0ZXJtaW5lIGlmIGl0IHdhcyB0cnVseSBhblxuICogaW1wb3J0IHJlZmxlY3Rpb24gdG9rZW4gb3IganVzdCBsb29rcyBsaWtlIG9uZS5cbiAqXG4gKiBSZXR1cm5zIHRydWUgZm9yOlxuICogaW1wb3J0IG1vZHVsZSBmb28gZnJvbSBcImZvb1wiO1xuICogaW1wb3J0IG1vZHVsZSBmcm9tIGZyb20gXCJmb29cIjtcbiAqXG4gKiBSZXR1cm5zIGZhbHNlIGZvcjpcbiAqIGltcG9ydCBtb2R1bGUgZnJvbSBcImZvb1wiO1xuICogaW1wb3J0IG1vZHVsZSwge2Jhcn0gZnJvbSBcImZvb1wiO1xuICovXG5mdW5jdGlvbiBpc0ltcG9ydFJlZmxlY3Rpb24oKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gX2Jhc2Uuc3RhdGUuc25hcHNob3QoKTtcbiAgX3V0aWwuZXhwZWN0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpO1xuICBpZiAoX3V0aWwuZWF0Q29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSkge1xuICAgIGlmIChfdXRpbC5pc0NvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgIF9iYXNlLnN0YXRlLnJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3QpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBfYmFzZS5zdGF0ZS5yZXN0b3JlRnJvbVNuYXBzaG90KHNuYXBzaG90KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEVhdCB0aGUgXCJtb2R1bGVcIiB0b2tlbiBmcm9tIHRoZSBpbXBvcnQgcmVmbGVjdGlvbiBwcm9wb3NhbC5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWltcG9ydC1yZWZsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWF5YmVJbXBvcnRSZWZsZWN0aW9uKCkge1xuICAvLyBpc0ltcG9ydFJlZmxlY3Rpb24gZG9lcyBzbmFwc2hvdC9yZXN0b3JlLCBzbyBvbmx5IHJ1biBpdCBpZiB3ZSBzZWUgdGhlIHdvcmRcbiAgLy8gXCJtb2R1bGVcIi5cbiAgaWYgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9tb2R1bGUpICYmIGlzSW1wb3J0UmVmbGVjdGlvbigpKSB7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICB9XG59XG5cbi8vIFBhcnNlcyBpbXBvcnQgZGVjbGFyYXRpb24uXG5cbiBmdW5jdGlvbiBwYXJzZUltcG9ydCgpIHtcbiAgaWYgKF9iYXNlLmlzVHlwZVNjcmlwdEVuYWJsZWQgJiYgX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSAmJiBfdG9rZW5pemVyLmxvb2thaGVhZFR5cGUuY2FsbCh2b2lkIDAsICkgPT09IF90eXBlcy5Ub2tlblR5cGUuZXEpIHtcbiAgICBfdHlwZXNjcmlwdC50c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkICYmIF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSkge1xuICAgIGNvbnN0IGxvb2thaGVhZCA9IF90b2tlbml6ZXIubG9va2FoZWFkVHlwZUFuZEtleXdvcmQuY2FsbCh2b2lkIDAsICk7XG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUgJiYgbG9va2FoZWFkLmNvbnRleHR1YWxLZXl3b3JkICE9PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pIHtcbiAgICAgIC8vIE9uZSBvZiB0aGVzZSBgaW1wb3J0IHR5cGVgIGNhc2VzOlxuICAgICAgLy8gaW1wb3J0IHR5cGUgVCA9IHJlcXVpcmUoJ1QnKTtcbiAgICAgIC8vIGltcG9ydCB0eXBlIEEgZnJvbSAnQSc7XG4gICAgICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpO1xuICAgICAgaWYgKF90b2tlbml6ZXIubG9va2FoZWFkVHlwZS5jYWxsKHZvaWQgMCwgKSA9PT0gX3R5cGVzLlRva2VuVHlwZS5lcSkge1xuICAgICAgICBfdHlwZXNjcmlwdC50c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoaXMgaXMgYW4gYGltcG9ydCB0eXBlLi4uZnJvbWAgc3RhdGVtZW50LCB0aGVuIHdlIGFscmVhZHkgYXRlIHRoZVxuICAgICAgLy8gdHlwZSB0b2tlbiwgc28gcHJvY2VlZCB0byB0aGUgcmVndWxhciBpbXBvcnQgcGFyc2VyLlxuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuc3RhciB8fCBsb29rYWhlYWQudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpIHtcbiAgICAgIC8vIE9uZSBvZiB0aGVzZSBgaW1wb3J0IHR5cGVgIGNhc2VzLCBpbiB3aGljaCBjYXNlIHdlIGNhbiBlYXQgdGhlIHR5cGUgdG9rZW5cbiAgICAgIC8vIGFuZCBwcm9jZWVkIGFzIG5vcm1hbDpcbiAgICAgIC8vIGltcG9ydCB0eXBlICogYXMgQSBmcm9tICdBJztcbiAgICAgIC8vIGltcG9ydCB0eXBlIHthfSBmcm9tICdBJztcbiAgICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgd2UgYXJlIGltcG9ydGluZyB0aGUgbmFtZSBcInR5cGVcIi5cbiAgfVxuXG4gIC8vIGltcG9ydCAnLi4uJ1xuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpKSB7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByQXRvbS5jYWxsKHZvaWQgMCwgKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZU1heWJlSW1wb3J0UmVmbGVjdGlvbigpO1xuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVycygpO1xuICAgIF91dGlsLmV4cGVjdENvbnRleHR1YWwuY2FsbCh2b2lkIDAsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSk7XG4gICAgX2V4cHJlc3Npb24ucGFyc2VFeHByQXRvbS5jYWxsKHZvaWQgMCwgKTtcbiAgfVxuICBtYXliZVBhcnNlSW1wb3J0QXR0cmlidXRlcygpO1xuICBfdXRpbC5zZW1pY29sb24uY2FsbCh2b2lkIDAsICk7XG59IGV4cG9ydHMucGFyc2VJbXBvcnQgPSBwYXJzZUltcG9ydDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBzaG91bGRQYXJzZURlZmF1bHRJbXBvcnQoKSB7XG4gIHJldHVybiBfdG9rZW5pemVyLm1hdGNoLmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllckxvY2FsKCkge1xuICBfbHZhbC5wYXJzZUltcG9ydGVkSWRlbnRpZmllci5jYWxsKHZvaWQgMCwgKTtcbn1cblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIGltcG9ydHMuXG5mdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllcnMoKSB7XG4gIGlmIChfYmFzZS5pc0Zsb3dFbmFibGVkKSB7XG4gICAgX2Zsb3cuZmxvd1N0YXJ0UGFyc2VJbXBvcnRTcGVjaWZpZXJzLmNhbGwodm9pZCAwLCApO1xuICB9XG5cbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcbiAgaWYgKHNob3VsZFBhcnNlRGVmYXVsdEltcG9ydCgpKSB7XG4gICAgLy8gaW1wb3J0IGRlZmF1bHRPYmosIHsgeCwgeSBhcyB6IH0gZnJvbSAnLi4uJ1xuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVyTG9jYWwoKTtcblxuICAgIGlmICghX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSByZXR1cm47XG4gIH1cblxuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5zdGFyKSkge1xuICAgIF90b2tlbml6ZXIubmV4dC5jYWxsKHZvaWQgMCwgKTtcbiAgICBfdXRpbC5leHBlY3RDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKTtcblxuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVyTG9jYWwoKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIF91dGlsLmV4cGVjdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICB3aGlsZSAoIV90b2tlbml6ZXIuZWF0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikgJiYgIV9iYXNlLnN0YXRlLmVycm9yKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXRlY3QgYW4gYXR0ZW1wdCB0byBkZWVwIGRlc3RydWN0dXJlXG4gICAgICBpZiAoX3Rva2VuaXplci5lYXQuY2FsbCh2b2lkIDAsIF90eXBlcy5Ub2tlblR5cGUuY29sb24pKSB7XG4gICAgICAgIF91dGlsLnVuZXhwZWN0ZWQuY2FsbCh2b2lkIDAsIFxuICAgICAgICAgIFwiRVMyMDE1IG5hbWVkIGltcG9ydHMgZG8gbm90IGRlc3RydWN0dXJlLiBVc2UgYW5vdGhlciBzdGF0ZW1lbnQgZm9yIGRlc3RydWN0dXJpbmcgYWZ0ZXIgdGhlIGltcG9ydC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgX3V0aWwuZXhwZWN0LmNhbGwodm9pZCAwLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgIGlmIChfdG9rZW5pemVyLmVhdC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlSW1wb3J0U3BlY2lmaWVyKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7XG4gIGlmIChfYmFzZS5pc1R5cGVTY3JpcHRFbmFibGVkKSB7XG4gICAgX3R5cGVzY3JpcHQudHNQYXJzZUltcG9ydFNwZWNpZmllci5jYWxsKHZvaWQgMCwgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKF9iYXNlLmlzRmxvd0VuYWJsZWQpIHtcbiAgICBfZmxvdy5mbG93UGFyc2VJbXBvcnRTcGVjaWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9sdmFsLnBhcnNlSW1wb3J0ZWRJZGVudGlmaWVyLmNhbGwodm9pZCAwLCApO1xuICBpZiAoX3V0aWwuaXNDb250ZXh0dWFsLmNhbGwodm9pZCAwLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzKSkge1xuICAgIF9iYXNlLnN0YXRlLnRva2Vuc1tfYmFzZS5zdGF0ZS50b2tlbnMubGVuZ3RoIC0gMV0uaWRlbnRpZmllclJvbGUgPSBfdG9rZW5pemVyLklkZW50aWZpZXJSb2xlLkltcG9ydEFjY2VzcztcbiAgICBfdG9rZW5pemVyLm5leHQuY2FsbCh2b2lkIDAsICk7XG4gICAgX2x2YWwucGFyc2VJbXBvcnRlZElkZW50aWZpZXIuY2FsbCh2b2lkIDAsICk7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBpbXBvcnQgYXR0cmlidXRlcyBsaWtlIGB3aXRoIHt0eXBlOiBcImpzb25cIn1gLCBvciB0aGUgbGVnYWN5IGZvcm1cbiAqIGBhc3NlcnQge3R5cGU6IFwianNvblwifWAuXG4gKlxuICogSW1wb3J0IGF0dHJpYnV0ZXMgdGVjaG5pY2FsbHkgaGF2ZSB0aGVpciBvd24gc3ludGF4LCBidXQgYXJlIGFsd2F5cyBwYXJzZWFibGVcbiAqIGFzIGEgcGxhaW4gSlMgb2JqZWN0LCBzbyBqdXN0IGRvIHRoYXQgZm9yIHNpbXBsaWNpdHkuXG4gKi9cbmZ1bmN0aW9uIG1heWJlUGFyc2VJbXBvcnRBdHRyaWJ1dGVzKCkge1xuICBpZiAoX3Rva2VuaXplci5tYXRjaC5jYWxsKHZvaWQgMCwgX3R5cGVzLlRva2VuVHlwZS5fd2l0aCkgfHwgKF91dGlsLmlzQ29udGV4dHVhbC5jYWxsKHZvaWQgMCwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3NlcnQpICYmICFfdXRpbC5oYXNQcmVjZWRpbmdMaW5lQnJlYWsuY2FsbCh2b2lkIDAsICkpKSB7XG4gICAgX3Rva2VuaXplci5uZXh0LmNhbGwodm9pZCAwLCApO1xuICAgIF9leHByZXNzaW9uLnBhcnNlT2JqLmNhbGwodm9pZCAwLCBmYWxzZSwgZmFsc2UpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTtcbnZhciBfaW5kZXggPSByZXF1aXJlKCcuLi90b2tlbml6ZXIvaW5kZXgnKTtcbnZhciBfY2hhcmNvZGVzID0gcmVxdWlyZSgnLi4vdXRpbC9jaGFyY29kZXMnKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xudmFyIF9zdGF0ZW1lbnQgPSByZXF1aXJlKCcuL3N0YXRlbWVudCcpO1xuXG4gZnVuY3Rpb24gcGFyc2VGaWxlKCkge1xuICAvLyBJZiBlbmFibGVkLCBza2lwIGxlYWRpbmcgaGFzaGJhbmcgbGluZS5cbiAgaWYgKFxuICAgIF9iYXNlLnN0YXRlLnBvcyA9PT0gMCAmJlxuICAgIF9iYXNlLmlucHV0LmNoYXJDb2RlQXQoMCkgPT09IF9jaGFyY29kZXMuY2hhckNvZGVzLm51bWJlclNpZ24gJiZcbiAgICBfYmFzZS5pbnB1dC5jaGFyQ29kZUF0KDEpID09PSBfY2hhcmNvZGVzLmNoYXJDb2Rlcy5leGNsYW1hdGlvbk1hcmtcbiAgKSB7XG4gICAgX2luZGV4LnNraXBMaW5lQ29tbWVudC5jYWxsKHZvaWQgMCwgMik7XG4gIH1cbiAgX2luZGV4Lm5leHRUb2tlbi5jYWxsKHZvaWQgMCwgKTtcbiAgcmV0dXJuIF9zdGF0ZW1lbnQucGFyc2VUb3BMZXZlbC5jYWxsKHZvaWQgMCwgKTtcbn0gZXhwb3J0cy5wYXJzZUZpbGUgPSBwYXJzZUZpbGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTtcblxudmFyIF9iYXNlID0gcmVxdWlyZSgnLi90cmF2ZXJzZXIvYmFzZScpO1xudmFyIF9pbmRleCA9IHJlcXVpcmUoJy4vdHJhdmVyc2VyL2luZGV4Jyk7XG5cbiBjbGFzcyBGaWxlIHtcbiAgXG4gIFxuXG4gIGNvbnN0cnVjdG9yKHRva2Vucywgc2NvcGVzKSB7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG4gICAgdGhpcy5zY29wZXMgPSBzY29wZXM7XG4gIH1cbn0gZXhwb3J0cy5GaWxlID0gRmlsZTtcblxuIGZ1bmN0aW9uIHBhcnNlKFxuICBpbnB1dCxcbiAgaXNKU1hFbmFibGVkLFxuICBpc1R5cGVTY3JpcHRFbmFibGVkLFxuICBpc0Zsb3dFbmFibGVkLFxuKSB7XG4gIGlmIChpc0Zsb3dFbmFibGVkICYmIGlzVHlwZVNjcmlwdEVuYWJsZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29tYmluZSBmbG93IGFuZCB0eXBlc2NyaXB0IHBsdWdpbnMuXCIpO1xuICB9XG4gIF9iYXNlLmluaXRQYXJzZXIuY2FsbCh2b2lkIDAsIGlucHV0LCBpc0pTWEVuYWJsZWQsIGlzVHlwZVNjcmlwdEVuYWJsZWQsIGlzRmxvd0VuYWJsZWQpO1xuICBjb25zdCByZXN1bHQgPSBfaW5kZXgucGFyc2VGaWxlLmNhbGwodm9pZCAwLCApO1xuICBpZiAoX2Jhc2Uuc3RhdGUuZXJyb3IpIHtcbiAgICB0aHJvdyBfYmFzZS5hdWdtZW50RXJyb3IuY2FsbCh2b2lkIDAsIF9iYXNlLnN0YXRlLmVycm9yKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSBleHBvcnRzLnBhcnNlID0gcGFyc2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci9rZXl3b3JkcycpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBvcHRpb25hbCBjaGFpbiBvciBudWxsaXNoIGNvYWxlc2Npbmcgb3BlcmF0aW9uIGhhcyBhbnkgYXdhaXQgc3RhdGVtZW50cyBpblxuICogaXQuIElmIHNvLCB3ZSdsbCBuZWVkIHRvIHRyYW5zcGlsZSB0byBhbiBhc3luYyBvcGVyYXRpb24uXG4gKlxuICogV2UgY29tcHV0ZSB0aGlzIGJ5IHdhbGtpbmcgdGhlIGxlbmd0aCBvZiB0aGUgb3BlcmF0aW9uIGFuZCByZXR1cm5pbmcgdHJ1ZSBpZiB3ZSBzZWUgYW4gYXdhaXRcbiAqIGtleXdvcmQgdXNlZCBhcyBhIHJlYWwgYXdhaXQgKHJhdGhlciB0aGFuIGFuIG9iamVjdCBrZXkgb3IgcHJvcGVydHkgYWNjZXNzKS4gTmVzdGVkIG9wdGlvbmFsXG4gKiBjaGFpbi9udWxsaXNoIG9wZXJhdGlvbnMgbmVlZCB0byBiZSB0cmFja2VkIGJ1dCBkb24ndCBzaWxlbmNlIGF3YWl0LCBidXQgYSBuZXN0ZWQgYXN5bmMgZnVuY3Rpb25cbiAqIChvciBhbnkgb3RoZXIgbmVzdGVkIHNjb3BlKSB3aWxsIG1ha2UgdGhlIGF3YWl0IG5vdCBjb3VudC5cbiAqL1xuIGZ1bmN0aW9uIGlzQXN5bmNPcGVyYXRpb24odG9rZW5zKSB7XG4gIGxldCBpbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgbGV0IGRlcHRoID0gMDtcbiAgY29uc3Qgc3RhcnRUb2tlbiA9IHRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgZG8ge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zLnRva2Vuc1tpbmRleF07XG4gICAgaWYgKHRva2VuLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICBkZXB0aCsrO1xuICAgIH1cbiAgICBpZiAodG9rZW4uaXNPcHRpb25hbENoYWluRW5kKSB7XG4gICAgICBkZXB0aC0tO1xuICAgIH1cbiAgICBkZXB0aCArPSB0b2tlbi5udW1OdWxsaXNoQ29hbGVzY2VTdGFydHM7XG4gICAgZGVwdGggLT0gdG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlRW5kcztcblxuICAgIGlmIChcbiAgICAgIHRva2VuLmNvbnRleHR1YWxLZXl3b3JkID09PSBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2F3YWl0ICYmXG4gICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSA9PSBudWxsICYmXG4gICAgICB0b2tlbi5zY29wZURlcHRoID09PSBzdGFydFRva2VuLnNjb3BlRGVwdGhcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpbmRleCArPSAxO1xuICB9IHdoaWxlIChkZXB0aCA+IDAgJiYgaW5kZXggPCB0b2tlbnMudG9rZW5zLmxlbmd0aCk7XG4gIHJldHVybiBmYWxzZTtcbn0gZXhwb3J0cy5kZWZhdWx0ID0gaXNBc3luY09wZXJhdGlvbjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcbnZhciBfaXNBc3luY09wZXJhdGlvbiA9IHJlcXVpcmUoJy4vdXRpbC9pc0FzeW5jT3BlcmF0aW9uJyk7IHZhciBfaXNBc3luY09wZXJhdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0FzeW5jT3BlcmF0aW9uKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG4gY2xhc3MgVG9rZW5Qcm9jZXNzb3Ige1xuICAgX19pbml0KCkge3RoaXMucmVzdWx0Q29kZSA9IFwiXCJ9XG4gIC8vIEFycmF5IG1hcHBpbmcgaW5wdXQgdG9rZW4gaW5kZXggdG8gb3B0aW9uYWwgc3RyaW5nIGluZGV4IHBvc2l0aW9uIGluIHRoZVxuICAvLyBvdXRwdXQgY29kZS5cbiAgIF9faW5pdDIoKSB7dGhpcy5yZXN1bHRNYXBwaW5ncyA9IG5ldyBBcnJheSh0aGlzLnRva2Vucy5sZW5ndGgpfVxuICAgX19pbml0MygpIHt0aGlzLnRva2VuSW5kZXggPSAwfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICBjb2RlLFxuICAgICB0b2tlbnMsXG4gICAgIGlzRmxvd0VuYWJsZWQsXG4gICAgIGRpc2FibGVFU1RyYW5zZm9ybXMsXG4gICAgIGhlbHBlck1hbmFnZXIsXG4gICkgezt0aGlzLmNvZGUgPSBjb2RlO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaXNGbG93RW5hYmxlZCA9IGlzRmxvd0VuYWJsZWQ7dGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zID0gZGlzYWJsZUVTVHJhbnNmb3Jtczt0aGlzLmhlbHBlck1hbmFnZXIgPSBoZWxwZXJNYW5hZ2VyO1Rva2VuUHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtUb2tlblByb2Nlc3Nvci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1Rva2VuUHJvY2Vzc29yLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7fVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCB0aGUgdG9rZW4gc3RhdGUgaW4gYSB3YXkgdGhhdCBjYW4gYmUgcmVzdG9yZWQgbGF0ZXIsIHVzZWZ1bCBmb3JcbiAgICogdGhpbmdzIGxpa2UgbG9va2FoZWFkLlxuICAgKlxuICAgKiByZXN1bHRNYXBwaW5ncyBkbyBub3QgbmVlZCB0byBiZSBjb3BpZWQgc2luY2UgaW4gYWxsIHVzZSBjYXNlcywgdGhleSB3aWxsXG4gICAqIGJlIG92ZXJ3cml0dGVuIGFueXdheSBhZnRlciByZXN0b3JlLlxuICAgKi9cbiAgc25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdENvZGU6IHRoaXMucmVzdWx0Q29kZSxcbiAgICAgIHRva2VuSW5kZXg6IHRoaXMudG9rZW5JbmRleCxcbiAgICB9O1xuICB9XG5cbiAgcmVzdG9yZVRvU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICB0aGlzLnJlc3VsdENvZGUgPSBzbmFwc2hvdC5yZXN1bHRDb2RlO1xuICAgIHRoaXMudG9rZW5JbmRleCA9IHNuYXBzaG90LnRva2VuSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGNvZGUgZ2VuZXJhdGVkIHNpbmNlIHRoZSBzbmFwc2hvdCwgbGVhdmluZyB0aGVcbiAgICogY3VycmVudCB0b2tlbiBwb3NpdGlvbiBpbi1wbGFjZS4gVW5saWtlIG1vc3QgVG9rZW5Qcm9jZXNzb3Igb3BlcmF0aW9ucyxcbiAgICogdGhpcyBvcGVyYXRpb24gY2FuIHJlc3VsdCBpbiBpbnB1dC9vdXRwdXQgbGluZSBudW1iZXIgbWlzbWF0Y2hlcyBiZWNhdXNlXG4gICAqIHRoZSByZW1vdmVkIGNvZGUgbWF5IGNvbnRhaW4gbmV3bGluZXMsIHNvIHRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSB1c2VkXG4gICAqIHNwYXJpbmdseS5cbiAgICovXG4gIGRhbmdlcm91c2x5R2V0QW5kUmVtb3ZlQ29kZVNpbmNlU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlc3VsdENvZGUuc2xpY2Uoc25hcHNob3QucmVzdWx0Q29kZS5sZW5ndGgpO1xuICAgIHRoaXMucmVzdWx0Q29kZSA9IHNuYXBzaG90LnJlc3VsdENvZGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucmVzdWx0Q29kZSA9IFwiXCI7XG4gICAgdGhpcy5yZXN1bHRNYXBwaW5ncyA9IG5ldyBBcnJheSh0aGlzLnRva2Vucy5sZW5ndGgpO1xuICAgIHRoaXMudG9rZW5JbmRleCA9IDA7XG4gIH1cblxuICBtYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoaW5kZXgsIGNvbnRleHR1YWxLZXl3b3JkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpICYmXG4gICAgICB0aGlzLnRva2Vuc1tpbmRleF0uY29udGV4dHVhbEtleXdvcmQgPT09IGNvbnRleHR1YWxLZXl3b3JkXG4gICAgKTtcbiAgfVxuXG4gIGlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkge1xuICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gcHJvY2VzcyBlc2NhcGVzIHNpbmNlIHRlY2huaWNhbGx5IHlvdSBjYW4gaGF2ZSB1bmljb2RlIGVzY2FwZXMgaW4gdmFyaWFibGVcbiAgICAvLyBuYW1lcy5cbiAgICByZXR1cm4gdGhpcy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRoaXMudG9rZW5zW2luZGV4XSk7XG4gIH1cblxuICBpZGVudGlmaWVyTmFtZUF0UmVsYXRpdmVJbmRleChyZWxhdGl2ZUluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0aGlzLnRva2VuQXRSZWxhdGl2ZUluZGV4KHJlbGF0aXZlSW5kZXgpKTtcbiAgfVxuXG4gIGlkZW50aWZpZXJOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odGhpcy5jdXJyZW50VG9rZW4oKSk7XG4gIH1cblxuICBpZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSB7XG4gICAgcmV0dXJuIHRoaXMuY29kZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTtcbiAgfVxuXG4gIHJhd0NvZGVGb3JUb2tlbih0b2tlbikge1xuICAgIHJldHVybiB0aGlzLmNvZGUuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7XG4gIH1cblxuICBzdHJpbmdWYWx1ZUF0SW5kZXgoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdWYWx1ZUZvclRva2VuKHRoaXMudG9rZW5zW2luZGV4XSk7XG4gIH1cblxuICBzdHJpbmdWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdWYWx1ZUZvclRva2VuKHRoaXMuY3VycmVudFRva2VuKCkpO1xuICB9XG5cbiAgc3RyaW5nVmFsdWVGb3JUb2tlbih0b2tlbikge1xuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB3aGVuIHR3byBpbXBvcnRzIGFyZSB0aGUgc2FtZSBhbmQgdG8gcmVzb2x2ZSBUeXBlU2NyaXB0IGVudW0ga2V5cy5cbiAgICAvLyBJZGVhbGx5IHdlJ2QgcHJvY2VzcyBlc2NhcGVzIHdpdGhpbiB0aGUgc3RyaW5ncywgYnV0IGZvciBub3cgd2UgcHJldHR5IG11Y2ggdGFrZSB0aGUgcmF3XG4gICAgLy8gY29kZS5cbiAgICByZXR1cm4gdGhpcy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7XG4gIH1cblxuICBtYXRjaGVzMUF0SW5kZXgoaW5kZXgsIHQxKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MTtcbiAgfVxuXG4gIG1hdGNoZXMyQXRJbmRleChpbmRleCwgdDEsIHQyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MSAmJiB0aGlzLnRva2Vuc1tpbmRleCArIDFdLnR5cGUgPT09IHQyO1xuICB9XG5cbiAgbWF0Y2hlczNBdEluZGV4KGluZGV4LCB0MSwgdDIsIHQzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9rZW5zW2luZGV4XS50eXBlID09PSB0MSAmJlxuICAgICAgdGhpcy50b2tlbnNbaW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbaW5kZXggKyAyXS50eXBlID09PSB0M1xuICAgICk7XG4gIH1cblxuICBtYXRjaGVzMSh0MSkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxO1xuICB9XG5cbiAgbWF0Y2hlczIodDEsIHQyKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0udHlwZSA9PT0gdDEgJiYgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMV0udHlwZSA9PT0gdDI7XG4gIH1cblxuICBtYXRjaGVzMyh0MSwgdDIsIHQzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0udHlwZSA9PT0gdDEgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDFdLnR5cGUgPT09IHQyICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAyXS50eXBlID09PSB0M1xuICAgICk7XG4gIH1cblxuICBtYXRjaGVzNCh0MSwgdDIsIHQzLCB0NCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMl0udHlwZSA9PT0gdDMgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDNdLnR5cGUgPT09IHQ0XG4gICAgKTtcbiAgfVxuXG4gIG1hdGNoZXM1KHQxLCB0MiwgdDMsIHQ0LCB0NSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLnR5cGUgPT09IHQxICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyAxXS50eXBlID09PSB0MiAmJlxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4ICsgMl0udHlwZSA9PT0gdDMgJiZcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleCArIDNdLnR5cGUgPT09IHQ0ICYmXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyA0XS50eXBlID09PSB0NVxuICAgICk7XG4gIH1cblxuICBtYXRjaGVzQ29udGV4dHVhbChjb250ZXh0dWFsS2V5d29yZCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2VuSW5kZXgsIGNvbnRleHR1YWxLZXl3b3JkKTtcbiAgfVxuXG4gIG1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbCh0eXBlLCBjb250ZXh0SWQpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzMSh0eXBlKSAmJiB0aGlzLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZCA9PT0gY29udGV4dElkO1xuICB9XG5cbiAgcHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKSB7XG4gICAgbGV0IHdoaXRlc3BhY2VBbmRDb21tZW50cyA9IHRoaXMuY29kZS5zbGljZShcbiAgICAgIHRoaXMudG9rZW5JbmRleCA+IDAgPyB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggLSAxXS5lbmQgOiAwLFxuICAgICAgdGhpcy50b2tlbkluZGV4IDwgdGhpcy50b2tlbnMubGVuZ3RoID8gdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5zdGFydCA6IHRoaXMuY29kZS5sZW5ndGgsXG4gICAgKTtcbiAgICBpZiAodGhpcy5pc0Zsb3dFbmFibGVkKSB7XG4gICAgICB3aGl0ZXNwYWNlQW5kQ29tbWVudHMgPSB3aGl0ZXNwYWNlQW5kQ29tbWVudHMucmVwbGFjZSgvQGZsb3cvZywgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiB3aGl0ZXNwYWNlQW5kQ29tbWVudHM7XG4gIH1cblxuICByZXBsYWNlVG9rZW4obmV3Q29kZSkge1xuICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLnByZXZpb3VzV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IG5ld0NvZGU7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgcmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShuZXdDb2RlKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMucHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKS5yZXBsYWNlKC9bXlxcclxcbl0vZywgXCJcIik7XG4gICAgdGhpcy5hcHBlbmRUb2tlblByZWZpeCgpO1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IG5ld0NvZGU7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgcmVtb3ZlSW5pdGlhbFRva2VuKCkge1xuICAgIHRoaXMucmVwbGFjZVRva2VuKFwiXCIpO1xuICB9XG5cbiAgcmVtb3ZlVG9rZW4oKSB7XG4gICAgdGhpcy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKFwiXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgY29kZSB1bnRpbCB0aGUgbmV4dCB9LCBhY2NvdW50aW5nIGZvciBiYWxhbmNlZCBicmFjZXMuXG4gICAqL1xuICByZW1vdmVCYWxhbmNlZENvZGUoKSB7XG4gICAgbGV0IGJyYWNlRGVwdGggPSAwO1xuICAgIHdoaWxlICghdGhpcy5pc0F0RW5kKCkpIHtcbiAgICAgIGlmICh0aGlzLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgICBicmFjZURlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIGlmIChicmFjZURlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGJyYWNlRGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICBjb3B5RXhwZWN0ZWRUb2tlbih0b2tlblR5cGUpIHtcbiAgICBpZiAodGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS50eXBlICE9PSB0b2tlblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdG9rZW4gJHt0b2tlblR5cGV9YCk7XG4gICAgfVxuICAgIHRoaXMuY29weVRva2VuKCk7XG4gIH1cblxuICBjb3B5VG9rZW4oKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMucHJldmlvdXNXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTtcbiAgICB0aGlzLmFwcGVuZFRva2VuUHJlZml4KCk7XG4gICAgdGhpcy5yZXN1bHRNYXBwaW5nc1t0aGlzLnRva2VuSW5kZXhdID0gdGhpcy5yZXN1bHRDb2RlLmxlbmd0aDtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5jb2RlLnNsaWNlKFxuICAgICAgdGhpcy50b2tlbnNbdGhpcy50b2tlbkluZGV4XS5zdGFydCxcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0uZW5kLFxuICAgICk7XG4gICAgdGhpcy5hcHBlbmRUb2tlblN1ZmZpeCgpO1xuICAgIHRoaXMudG9rZW5JbmRleCsrO1xuICB9XG5cbiAgY29weVRva2VuV2l0aFByZWZpeChwcmVmaXgpIHtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5wcmV2aW91c1doaXRlc3BhY2VBbmRDb21tZW50cygpO1xuICAgIHRoaXMuYXBwZW5kVG9rZW5QcmVmaXgoKTtcbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gcHJlZml4O1xuICAgIHRoaXMucmVzdWx0TWFwcGluZ3NbdGhpcy50b2tlbkluZGV4XSA9IHRoaXMucmVzdWx0Q29kZS5sZW5ndGg7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuY29kZS5zbGljZShcbiAgICAgIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF0uc3RhcnQsXG4gICAgICB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXhdLmVuZCxcbiAgICApO1xuICAgIHRoaXMuYXBwZW5kVG9rZW5TdWZmaXgoKTtcbiAgICB0aGlzLnRva2VuSW5kZXgrKztcbiAgfVxuXG4gICBhcHBlbmRUb2tlblByZWZpeCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKHRva2VuLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0cyB8fCB0b2tlbi5pc09wdGlvbmFsQ2hhaW5TdGFydCkge1xuICAgICAgdG9rZW4uaXNBc3luY09wZXJhdGlvbiA9IF9pc0FzeW5jT3BlcmF0aW9uMi5kZWZhdWx0LmNhbGwodm9pZCAwLCB0aGlzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUVTVHJhbnNmb3Jtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlU3RhcnRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLm51bU51bGxpc2hDb2FsZXNjZVN0YXJ0czsgaSsrKSB7XG4gICAgICAgIGlmICh0b2tlbi5pc0FzeW5jT3BlcmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IFwiYXdhaXQgXCI7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiYXN5bmNOdWxsaXNoQ29hbGVzY2VcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwibnVsbGlzaENvYWxlc2NlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIihcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRva2VuLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICBpZiAodG9rZW4uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gXCJhd2FpdCBcIjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2VuSW5kZXggPiAwICYmIHRoaXMudG9rZW5BdFJlbGF0aXZlSW5kZXgoLTEpLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuX2RlbGV0ZSkge1xuICAgICAgICBpZiAodG9rZW4uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSB0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcImFzeW5jT3B0aW9uYWxDaGFpbkRlbGV0ZVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXCJvcHRpb25hbENoYWluRGVsZXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLmlzQXN5bmNPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwiYXN5bmNPcHRpb25hbENoYWluXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXN1bHRDb2RlICs9IHRoaXMuaGVscGVyTWFuYWdlci5nZXRIZWxwZXJOYW1lKFwib3B0aW9uYWxDaGFpblwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIihbXCI7XG4gICAgfVxuICB9XG5cbiAgIGFwcGVuZFRva2VuU3VmZml4KCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAodG9rZW4uaXNPcHRpb25hbENoYWluRW5kICYmICF0aGlzLmRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIl0pXCI7XG4gICAgfVxuICAgIGlmICh0b2tlbi5udW1OdWxsaXNoQ29hbGVzY2VFbmRzICYmICF0aGlzLmRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW4ubnVtTnVsbGlzaENvYWxlc2NlRW5kczsgaSsrKSB7XG4gICAgICAgIHRoaXMucmVzdWx0Q29kZSArPSBcIikpXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwZW5kQ29kZShjb2RlKSB7XG4gICAgdGhpcy5yZXN1bHRDb2RlICs9IGNvZGU7XG4gIH1cblxuICBjdXJyZW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5JbmRleF07XG4gIH1cblxuICBjdXJyZW50VG9rZW5Db2RlKCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICByZXR1cm4gdGhpcy5jb2RlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICB9XG5cbiAgdG9rZW5BdFJlbGF0aXZlSW5kZXgocmVsYXRpdmVJbmRleCkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2VuSW5kZXggKyByZWxhdGl2ZUluZGV4XTtcbiAgfVxuXG4gIGN1cnJlbnRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdG8gdGhlIG5leHQgdG9rZW4uIE9ubHkgc3VpdGFibGUgaW4gcHJlcHJvY2Vzc2luZyBzdGVwcy4gV2hlblxuICAgKiBnZW5lcmF0aW5nIG5ldyBjb2RlLCB5b3Ugc2hvdWxkIHVzZSBjb3B5VG9rZW4gb3IgcmVtb3ZlVG9rZW4uXG4gICAqL1xuICBuZXh0VG9rZW4oKSB7XG4gICAgaWYgKHRoaXMudG9rZW5JbmRleCA9PT0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkbHkgcmVhY2hlZCBlbmQgb2YgaW5wdXQuXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2VuSW5kZXgrKztcbiAgfVxuXG4gIHByZXZpb3VzVG9rZW4oKSB7XG4gICAgdGhpcy50b2tlbkluZGV4LS07XG4gIH1cblxuICBmaW5pc2goKSB7XG4gICAgaWYgKHRoaXMudG9rZW5JbmRleCAhPT0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmllZCB0byBmaW5pc2ggcHJvY2Vzc2luZyB0b2tlbnMgYmVmb3JlIHJlYWNoaW5nIHRoZSBlbmQuXCIpO1xuICAgIH1cbiAgICB0aGlzLnJlc3VsdENvZGUgKz0gdGhpcy5wcmV2aW91c1doaXRlc3BhY2VBbmRDb21tZW50cygpO1xuICAgIHJldHVybiB7Y29kZTogdGhpcy5yZXN1bHRDb2RlLCBtYXBwaW5nczogdGhpcy5yZXN1bHRNYXBwaW5nc307XG4gIH1cblxuICBpc0F0RW5kKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuSW5kZXggPT09IHRoaXMudG9rZW5zLmxlbmd0aDtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBUb2tlblByb2Nlc3NvcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci9rZXl3b3JkcycpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qKlxuICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGFzcyBmaWVsZHMgZm9yIHRoaXMgY2xhc3MsIGdpdmVuIGEgdG9rZW4gcHJvY2Vzc29yIHBvaW50aW5nIHRvIHRoZVxuICogb3Blbi1icmFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGNsYXNzLlxuICovXG4gZnVuY3Rpb24gZ2V0Q2xhc3NJbmZvKFxuICByb290VHJhbnNmb3JtZXIsXG4gIHRva2VucyxcbiAgbmFtZU1hbmFnZXIsXG4gIGRpc2FibGVFU1RyYW5zZm9ybXMsXG4pIHtcbiAgY29uc3Qgc25hcHNob3QgPSB0b2tlbnMuc25hcHNob3QoKTtcblxuICBjb25zdCBoZWFkZXJJbmZvID0gcHJvY2Vzc0NsYXNzSGVhZGVyKHRva2Vucyk7XG5cbiAgbGV0IGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzID0gW107XG4gIGNvbnN0IGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyA9IFtdO1xuICBjb25zdCBzdGF0aWNJbml0aWFsaXplck5hbWVzID0gW107XG4gIGxldCBjb25zdHJ1Y3Rvckluc2VydFBvcyA9IG51bGw7XG4gIGNvbnN0IGZpZWxkcyA9IFtdO1xuICBjb25zdCByYW5nZXNUb1JlbW92ZSA9IFtdO1xuXG4gIGNvbnN0IGNsYXNzQ29udGV4dElkID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpLmNvbnRleHRJZDtcbiAgaWYgKGNsYXNzQ29udGV4dElkID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub24tbnVsbCBjbGFzcyBjb250ZXh0IElEIG9uIGNsYXNzIG9wZW4tYnJhY2UuXCIpO1xuICB9XG5cbiAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIsIGNsYXNzQ29udGV4dElkKSkge1xuICAgIGlmICh0b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9jb25zdHJ1Y3RvcikgJiYgIXRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgICh7Y29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsIGNvbnN0cnVjdG9ySW5zZXJ0UG9zfSA9IHByb2Nlc3NDb25zdHJ1Y3Rvcih0b2tlbnMpKTtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnNlbWkpKSB7XG4gICAgICBpZiAoIWRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgICAgcmFuZ2VzVG9SZW1vdmUucHVzaCh7c3RhcnQ6IHRva2Vucy5jdXJyZW50SW5kZXgoKSwgZW5kOiB0b2tlbnMuY3VycmVudEluZGV4KCkgKyAxfSk7XG4gICAgICB9XG4gICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgfSBlbHNlIGlmICh0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVpdGhlciBhIG1ldGhvZCBvciBhIGZpZWxkLiBTa2lwIHRvIHRoZSBpZGVudGlmaWVyIHBhcnQuXG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdGFydEluZGV4ID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgICAgbGV0IGlzU3RhdGljID0gZmFsc2U7XG4gICAgICBsZXQgaXNFU1ByaXZhdGUgPSBmYWxzZTtcbiAgICAgIGxldCBpc0RlY2xhcmVPckFic3RyYWN0ID0gZmFsc2U7XG4gICAgICB3aGlsZSAoaXNBY2Nlc3NNb2RpZmllcih0b2tlbnMuY3VycmVudFRva2VuKCkpKSB7XG4gICAgICAgIGlmICh0b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fc3RhdGljKSkge1xuICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuaGFzaCkpIHtcbiAgICAgICAgICBpc0VTUHJpdmF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9kZWNsYXJlKSB8fCB0b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QpKSB7XG4gICAgICAgICAgaXNEZWNsYXJlT3JBYnN0cmFjdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3RhdGljICYmIHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHN0YXRpYyBibG9jaywgc28gZG9uJ3QgcHJvY2VzcyBpdCBpbiBhbnkgc3BlY2lhbCB3YXkuXG4gICAgICAgIHNraXBUb05leHRDbGFzc0VsZW1lbnQodG9rZW5zLCBjbGFzc0NvbnRleHRJZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzRVNQcml2YXRlKSB7XG4gICAgICAgIC8vIFN1Y3Jhc2UgZG9lc24ndCBhdHRlbXB0IHRvIHRyYW5zcGlsZSBwcml2YXRlIGZpZWxkczsganVzdCBsZWF2ZSB0aGVtIGFzLWlzLlxuICAgICAgICBza2lwVG9OZXh0Q2xhc3NFbGVtZW50KHRva2VucywgY2xhc3NDb250ZXh0SWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fY29uc3RydWN0b3IpICYmXG4gICAgICAgICF0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlXG4gICAgICApIHtcbiAgICAgICAgKHtjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cywgY29uc3RydWN0b3JJbnNlcnRQb3N9ID0gcHJvY2Vzc0NvbnN0cnVjdG9yKHRva2VucykpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZVN0YXJ0SW5kZXggPSB0b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgICBza2lwRmllbGROYW1lKHRva2Vucyk7XG4gICAgICBpZiAodG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubGVzc1RoYW4pIHx8IHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCwgc28gbm90aGluZyB0byBwcm9jZXNzLlxuICAgICAgICBza2lwVG9OZXh0Q2xhc3NFbGVtZW50KHRva2VucywgY2xhc3NDb250ZXh0SWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGEgdHlwZSBhbm5vdGF0aW9uIHRoYXQgd2UgbmVlZCB0byBza2lwLlxuICAgICAgd2hpbGUgKHRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgfVxuICAgICAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgICBjb25zdCBlcXVhbHNJbmRleCA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhbiBpbml0aWFsaXplciwgc28gd2UgbmVlZCB0byB3cmFwIGluIGFuIGluaXRpYWxpemVyIG1ldGhvZC5cbiAgICAgICAgY29uc3QgdmFsdWVFbmQgPSB0b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmICh2YWx1ZUVuZCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcmhzRW5kSW5kZXggb24gY2xhc3MgZmllbGQgYXNzaWdubWVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgICAgICB3aGlsZSAodG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgdmFsdWVFbmQpIHtcbiAgICAgICAgICByb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluaXRpYWxpemVyTmFtZTtcbiAgICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgICAgaW5pdGlhbGl6ZXJOYW1lID0gbmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9faW5pdFN0YXRpY1wiKTtcbiAgICAgICAgICBzdGF0aWNJbml0aWFsaXplck5hbWVzLnB1c2goaW5pdGlhbGl6ZXJOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbml0aWFsaXplck5hbWUgPSBuYW1lTWFuYWdlci5jbGFpbUZyZWVOYW1lKFwiX19pbml0XCIpO1xuICAgICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcy5wdXNoKGluaXRpYWxpemVyTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmllbGRzIHN0YXJ0IGF0IHRoZSBuYW1lLCBzbyBgc3RhdGljIHggPSAxO2AgaGFzIGEgZmllbGQgcmFuZ2Ugb2YgYHggPSAxO2AuXG4gICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICBpbml0aWFsaXplck5hbWUsXG4gICAgICAgICAgZXF1YWxzSW5kZXgsXG4gICAgICAgICAgc3RhcnQ6IG5hbWVTdGFydEluZGV4LFxuICAgICAgICAgIGVuZDogdG9rZW5zLmN1cnJlbnRJbmRleCgpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIWRpc2FibGVFU1RyYW5zZm9ybXMgfHwgaXNEZWNsYXJlT3JBYnN0cmFjdCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBmaWVsZCBkZWNsYXJhdGlvbiwgbGlrZSBgeDtgLiBXaXRoIHRoZSBjbGFzcyB0cmFuc2Zvcm0gZW5hYmxlZCwgd2UganVzdFxuICAgICAgICAvLyByZW1vdmUgdGhlIGxpbmUgc28gdGhhdCBubyBvdXRwdXQgaXMgcHJvZHVjZWQuIFdpdGggdGhlIGNsYXNzIHRyYW5zZm9ybSBkaXNhYmxlZCwgd2VcbiAgICAgICAgLy8gdXN1YWxseSB3YW50IHRvIHByZXNlcnZlIHRoZSBkZWNsYXJhdGlvbiAoYnV0IHN0aWxsIHN0cmlwIHR5cGVzKSwgYnV0IGlmIHRoZSBgZGVjbGFyZWBcbiAgICAgICAgLy8gb3IgYGFic3RyYWN0YCBrZXl3b3JkIGlzIHNwZWNpZmllZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgbGluZSB0byBhdm9pZCBpbml0aWFsaXppbmcgdGhlXG4gICAgICAgIC8vIHZhbHVlIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgcmFuZ2VzVG9SZW1vdmUucHVzaCh7c3RhcnQ6IHN0YXRlbWVudFN0YXJ0SW5kZXgsIGVuZDogdG9rZW5zLmN1cnJlbnRJbmRleCgpfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9rZW5zLnJlc3RvcmVUb1NuYXBzaG90KHNuYXBzaG90KTtcbiAgaWYgKGRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAvLyBXaXRoIEVTIHRyYW5zZm9ybXMgZGlzYWJsZWQsIHdlIGRvbid0IHdhbnQgdG8gdHJhbnNmb3JtIHJlZ3VsYXIgY2xhc3NcbiAgICAvLyBmaWVsZCBkZWNsYXJhdGlvbnMsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBhZGRpdGlvbmFsIHRyaWNrcyB0b1xuICAgIC8vIHJlZmVyZW5jZSB0aGUgY29uc3RydWN0b3IgZm9yIHN0YXRpYyBpbml0LCBidXQgd2Ugc3RpbGwgbmVlZCB0byB0cmFuc2Zvcm1cbiAgICAvLyBUeXBlU2NyaXB0IGZpZWxkIGluaXRpYWxpemVycyBkZWZpbmVkIGFzIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgYW5kIHdlXG4gICAgLy8gc3RpbGwgbmVlZCB0byByZW1vdmUgYGRlY2xhcmVgIGZpZWxkcy4gRm9yIG5vdywgd2UgcnVuIHRoZSBzYW1lIGNvZGVcbiAgICAvLyBwYXRoIGJ1dCBvbWl0IGFueSBmaWVsZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlIGNsYXNzIGhhZCBubyBmaWVsZFxuICAgIC8vIGRlY2xhcmF0aW9ucy4gSW4gdGhlIGZ1dHVyZSwgd2hlbiB3ZSBmdWxseSBkcm9wIHRoZSBjbGFzcyBmaWVsZHNcbiAgICAvLyB0cmFuc2Zvcm0sIHdlIGNhbiBzaW1wbGlmeSB0aGlzIGNvZGUgc2lnbmlmaWNhbnRseS5cbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVySW5mbyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzOiBbXSxcbiAgICAgIHN0YXRpY0luaXRpYWxpemVyTmFtZXM6IFtdLFxuICAgICAgY29uc3RydWN0b3JJbnNlcnRQb3MsXG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVySW5mbyxcbiAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLFxuICAgICAgaW5zdGFuY2VJbml0aWFsaXplck5hbWVzLFxuICAgICAgc3RhdGljSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgIGNvbnN0cnVjdG9ySW5zZXJ0UG9zLFxuICAgICAgZmllbGRzLFxuICAgICAgcmFuZ2VzVG9SZW1vdmUsXG4gICAgfTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBnZXRDbGFzc0luZm87XG5cbi8qKlxuICogTW92ZSB0aGUgdG9rZW4gcHJvY2Vzc29yIHRvIHRoZSBuZXh0IG1ldGhvZC9maWVsZCBpbiB0aGUgY2xhc3MuXG4gKlxuICogVG8gZG8gdGhhdCwgd2Ugc2VlayBmb3J3YXJkIHRvIHRoZSBuZXh0IHN0YXJ0IG9mIGEgY2xhc3MgbmFtZSAoZWl0aGVyIGFuIG9wZW5cbiAqIGJyYWNrZXQgb3IgYW4gaWRlbnRpZmllciwgb3IgdGhlIGNsb3NpbmcgY3VybHkgYnJhY2UpLCB0aGVuIHNlZWsgYmFja3dhcmQgdG9cbiAqIGluY2x1ZGUgYW55IGFjY2VzcyBtb2RpZmllcnMuXG4gKi9cbmZ1bmN0aW9uIHNraXBUb05leHRDbGFzc0VsZW1lbnQodG9rZW5zLCBjbGFzc0NvbnRleHRJZCkge1xuICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIHdoaWxlICh0b2tlbnMuY3VycmVudFRva2VuKCkuY29udGV4dElkICE9PSBjbGFzc0NvbnRleHRJZCkge1xuICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgfVxuICB3aGlsZSAoaXNBY2Nlc3NNb2RpZmllcih0b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoLTEpKSkge1xuICAgIHRva2Vucy5wcmV2aW91c1Rva2VuKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0NsYXNzSGVhZGVyKHRva2Vucykge1xuICBjb25zdCBjbGFzc1Rva2VuID0gdG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICBjb25zdCBjb250ZXh0SWQgPSBjbGFzc1Rva2VuLmNvbnRleHRJZDtcbiAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY29udGV4dCBJRCBvbiBjbGFzcyB0b2tlbi5cIik7XG4gIH1cbiAgY29uc3QgaXNFeHByZXNzaW9uID0gY2xhc3NUb2tlbi5pc0V4cHJlc3Npb247XG4gIGlmIChpc0V4cHJlc3Npb24gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlzRXhwcmVzc2lvbiBvbiBjbGFzcyB0b2tlbi5cIik7XG4gIH1cbiAgbGV0IGNsYXNzTmFtZSA9IG51bGw7XG4gIGxldCBoYXNTdXBlcmNsYXNzID0gZmFsc2U7XG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgY2xhc3NOYW1lID0gdG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gIH1cbiAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMLCBjb250ZXh0SWQpKSB7XG4gICAgLy8gSWYgdGhpcyBoYXMgYSBzdXBlcmNsYXNzLCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhbiBgZXh0ZW5kc2AgdG9rZW4uIElmIGl0IGRvZXNuJ3QgaGF2ZSBhXG4gICAgLy8gc3VwZXJjbGFzcywgb25seSB0eXBlIHBhcmFtZXRlcnMgYW5kIGBpbXBsZW1lbnRzYCBjbGF1c2VzIGNhbiBzaG93IHVwIGhlcmUsIGFsbCBvZiB3aGljaFxuICAgIC8vIGNvbnNpc3Qgb25seSBvZiB0eXBlIHRva2Vucy4gQSBkZWNsYXJhdGlvbiBsaWtlIGBjbGFzcyBBPEIgZXh0ZW5kcyBDPiB7YCBzaG91bGQgKm5vdCogY291bnRcbiAgICAvLyBhcyBoYXZpbmcgYSBzdXBlcmNsYXNzLlxuICAgIGlmICh0b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fZXh0ZW5kcykgJiYgIXRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgIGhhc1N1cGVyY2xhc3MgPSB0cnVlO1xuICAgIH1cbiAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIH1cbiAgcmV0dXJuIHtpc0V4cHJlc3Npb24sIGNsYXNzTmFtZSwgaGFzU3VwZXJjbGFzc307XG59XG5cbi8qKlxuICogRXh0cmFjdCB1c2VmdWwgaW5mb3JtYXRpb24gb3V0IG9mIGEgY29uc3RydWN0b3IsIHN0YXJ0aW5nIGF0IHRoZSBcImNvbnN0cnVjdG9yXCIgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0NvbnN0cnVjdG9yKHRva2VucylcblxuXG4ge1xuICBjb25zdCBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyA9IFtdO1xuXG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgY29uc3QgY29uc3RydWN0b3JDb250ZXh0SWQgPSB0b2tlbnMuY3VycmVudFRva2VuKCkuY29udGV4dElkO1xuICBpZiAoY29uc3RydWN0b3JDb250ZXh0SWQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGNvbnRleHQgSUQgb24gb3Blbi1wYXJlbiBzdGFydGluZyBjb25zdHJ1Y3RvciBwYXJhbXMuXCIpO1xuICB9XG4gIC8vIEFkdmFuY2UgdGhyb3VnaCBwYXJhbWV0ZXJzIGxvb2tpbmcgZm9yIGFjY2VzcyBtb2RpZmllcnMuXG4gIHdoaWxlICghdG9rZW5zLm1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbChfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUiwgY29uc3RydWN0b3JDb250ZXh0SWQpKSB7XG4gICAgaWYgKHRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQgPT09IGNvbnN0cnVjdG9yQ29udGV4dElkKSB7XG4gICAgICAvLyBDdXJyZW50IHRva2VuIGlzIGFuIG9wZW4gcGFyZW4gb3IgY29tbWEganVzdCBiZWZvcmUgYSBwYXJhbSwgc28gY2hlY2tcbiAgICAgIC8vIHRoYXQgcGFyYW0gZm9yIGFjY2VzcyBtb2RpZmllcnMuXG4gICAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gICAgICBpZiAoaXNBY2Nlc3NNb2RpZmllcih0b2tlbnMuY3VycmVudFRva2VuKCkpKSB7XG4gICAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgICAgd2hpbGUgKGlzQWNjZXNzTW9kaWZpZXIodG9rZW5zLmN1cnJlbnRUb2tlbigpKSkge1xuICAgICAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2tlbiA9IHRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlkZW50aWZpZXIgYWZ0ZXIgYWNjZXNzIG1vZGlmaWVycyBpbiBjb25zdHJ1Y3RvciBhcmcuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbik7XG4gICAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLnB1c2goYHRoaXMuJHtuYW1lfSA9ICR7bmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICAgIH1cbiAgfVxuICAvLyApXG4gIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgLy8gQ29uc3RydWN0b3IgdHlwZSBhbm5vdGF0aW9ucyBhcmUgaW52YWxpZCwgYnV0IHNraXAgdGhlbSBhbnl3YXkgc2luY2VcbiAgLy8gdGhleSdyZSBlYXN5IHRvIHNraXAuXG4gIHdoaWxlICh0b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9XG4gIGxldCBjb25zdHJ1Y3Rvckluc2VydFBvcyA9IHRva2Vucy5jdXJyZW50SW5kZXgoKTtcblxuICAvLyBBZHZhbmNlIHRocm91Z2ggYm9keSBsb29raW5nIGZvciBhIHN1cGVyIGNhbGwuXG4gIGxldCBmb3VuZFN1cGVyQ2FsbCA9IGZhbHNlO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIsIGNvbnN0cnVjdG9yQ29udGV4dElkKSkge1xuICAgIGlmICghZm91bmRTdXBlckNhbGwgJiYgdG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX3N1cGVyLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIGNvbnN0IHN1cGVyQ2FsbENvbnRleHRJZCA9IHRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gICAgICBpZiAoc3VwZXJDYWxsQ29udGV4dElkID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYSBjb250ZXh0IElEIG9uIHRoZSBzdXBlciBjYWxsXCIpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCF0b2tlbnMubWF0Y2hlc0NvbnRleHRJZEFuZExhYmVsKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SLCBzdXBlckNhbGxDb250ZXh0SWQpKSB7XG4gICAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0cnVjdG9ySW5zZXJ0UG9zID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgICAgZm91bmRTdXBlckNhbGwgPSB0cnVlO1xuICAgIH1cbiAgICB0b2tlbnMubmV4dFRva2VuKCk7XG4gIH1cbiAgLy8gfVxuICB0b2tlbnMubmV4dFRva2VuKCk7XG5cbiAgcmV0dXJuIHtjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cywgY29uc3RydWN0b3JJbnNlcnRQb3N9O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGlzIGlzIGFueSB0b2tlbiB0aGF0IGNhbiBnbyBiZWZvcmUgdGhlIG5hbWUgaW4gYSBtZXRob2QvZmllbGQuXG4gKi9cbmZ1bmN0aW9uIGlzQWNjZXNzTW9kaWZpZXIodG9rZW4pIHtcbiAgcmV0dXJuIFtcbiAgICBfdHlwZXMuVG9rZW5UeXBlLl9hc3luYyxcbiAgICBfdHlwZXMuVG9rZW5UeXBlLl9nZXQsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5fc2V0LFxuICAgIF90eXBlcy5Ub2tlblR5cGUucGx1cyxcbiAgICBfdHlwZXMuVG9rZW5UeXBlLm1pbnVzLFxuICAgIF90eXBlcy5Ub2tlblR5cGUuX3JlYWRvbmx5LFxuICAgIF90eXBlcy5Ub2tlblR5cGUuX3N0YXRpYyxcbiAgICBfdHlwZXMuVG9rZW5UeXBlLl9wdWJsaWMsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5fcHJpdmF0ZSxcbiAgICBfdHlwZXMuVG9rZW5UeXBlLl9wcm90ZWN0ZWQsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5fb3ZlcnJpZGUsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5zdGFyLFxuICAgIF90eXBlcy5Ub2tlblR5cGUuX2RlY2xhcmUsXG4gICAgX3R5cGVzLlRva2VuVHlwZS5oYXNoLFxuICBdLmluY2x1ZGVzKHRva2VuLnR5cGUpO1xufVxuXG4vKipcbiAqIFRoZSBuZXh0IHRva2VuIG9yIHNldCBvZiB0b2tlbnMgaXMgZWl0aGVyIGFuIGlkZW50aWZpZXIgb3IgYW4gZXhwcmVzc2lvbiBpbiBzcXVhcmUgYnJhY2tldHMsIGZvclxuICogYSBtZXRob2Qgb3IgZmllbGQgbmFtZS5cbiAqL1xuZnVuY3Rpb24gc2tpcEZpZWxkTmFtZSh0b2tlbnMpIHtcbiAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgIGNvbnN0IHN0YXJ0VG9rZW4gPSB0b2tlbnMuY3VycmVudFRva2VuKCk7XG4gICAgY29uc3QgY2xhc3NDb250ZXh0SWQgPSBzdGFydFRva2VuLmNvbnRleHRJZDtcbiAgICBpZiAoY2xhc3NDb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY2xhc3MgY29udGV4dCBJRCBvbiBjb21wdXRlZCBuYW1lIG9wZW4gYnJhY2tldC5cIik7XG4gICAgfVxuICAgIHdoaWxlICghdG9rZW5zLm1hdGNoZXNDb250ZXh0SWRBbmRMYWJlbChfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRSLCBjbGFzc0NvbnRleHRJZCkpIHtcbiAgICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICB9XG4gICAgdG9rZW5zLm5leHRUb2tlbigpO1xuICB9IGVsc2Uge1xuICAgIHRva2Vucy5uZXh0VG9rZW4oKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxuXG4gZnVuY3Rpb24gZWxpZGVJbXBvcnRFcXVhbHModG9rZW5zKSB7XG4gIC8vIGltcG9ydFxuICB0b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gIC8vIG5hbWVcbiAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIC8vID1cbiAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIC8vIG5hbWUgb3IgcmVxdWlyZVxuICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgLy8gSGFuZGxlIGVpdGhlciBgaW1wb3J0IEEgPSByZXF1aXJlKCdBJylgIG9yIGBpbXBvcnQgQSA9IEIuQy5EYC5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAvLyAoXG4gICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgLy8gcGF0aCBzdHJpbmdcbiAgICB0b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAvLyApXG4gICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAgIC8vIC5cbiAgICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gbmFtZVxuICAgICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMuZGVmYXVsdCA9IGVsaWRlSW1wb3J0RXF1YWxzO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7dmFyIF90b2tlbml6ZXIgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cblxuXG5cblxuXG4gY29uc3QgRU1QVFlfREVDTEFSQVRJT05fSU5GTyA9IHtcbiAgdHlwZURlY2xhcmF0aW9uczogbmV3IFNldCgpLFxuICB2YWx1ZURlY2xhcmF0aW9uczogbmV3IFNldCgpLFxufTsgZXhwb3J0cy5FTVBUWV9ERUNMQVJBVElPTl9JTkZPID0gRU1QVFlfREVDTEFSQVRJT05fSU5GTztcblxuLyoqXG4gKiBHZXQgYWxsIHRvcC1sZXZlbCBpZGVudGlmaWVycyB0aGF0IHNob3VsZCBiZSBwcmVzZXJ2ZWQgd2hlbiBleHBvcnRlZCBpbiBUeXBlU2NyaXB0LlxuICpcbiAqIEV4YW1wbGVzOlxuICogLSBJZiBhbiBpZGVudGlmaWVyIGlzIGRlY2xhcmVkIGFzIGBjb25zdCB4YCwgdGhlbiBgZXhwb3J0IHt4fWAgc2hvdWxkIGJlIHByZXNlcnZlZC5cbiAqIC0gSWYgaXQncyBkZWNsYXJlZCBhcyBgdHlwZSB4YCwgdGhlbiBgZXhwb3J0IHt4fWAgc2hvdWxkIGJlIHJlbW92ZWQuXG4gKiAtIElmIGl0J3MgZGVjbGFyZWQgYXMgYm90aCBgY29uc3QgeGAgYW5kIGB0eXBlIHhgLCB0aGVuIHRoZSBleHBvcnQgc2hvdWxkIGJlIHByZXNlcnZlZC5cbiAqIC0gQ2xhc3NlcyBhbmQgZW51bXMgc2hvdWxkIGJlIHByZXNlcnZlZCAoZXZlbiB0aG91Z2ggdGhleSBhbHNvIGludHJvZHVjZSB0eXBlcykuXG4gKiAtIEltcG9ydGVkIGlkZW50aWZpZXJzIHNob3VsZCBiZSBwcmVzZXJ2ZWQgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG9cbiAqICAgcnVsZSB0aGVtIG91dC4gLS1pc29sYXRlZE1vZHVsZXMgZGlzYWxsb3dzIHJlLWV4cG9ydHMsIHdoaWNoIGNhdGNoZXMgZXJyb3JzIGhlcmUuXG4gKi9cbiBmdW5jdGlvbiBnZXREZWNsYXJhdGlvbkluZm8odG9rZW5zKSB7XG4gIGNvbnN0IHR5cGVEZWNsYXJhdGlvbnMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHZhbHVlRGVjbGFyYXRpb25zID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy50b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vucy50b2tlbnNbaV07XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUubmFtZSAmJiBfdG9rZW5pemVyLmlzVG9wTGV2ZWxEZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgdG9rZW4pKSB7XG4gICAgICBpZiAodG9rZW4uaXNUeXBlKSB7XG4gICAgICAgIHR5cGVEZWNsYXJhdGlvbnMuYWRkKHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKHRva2VuKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZURlY2xhcmF0aW9ucy5hZGQodG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHt0eXBlRGVjbGFyYXRpb25zLCB2YWx1ZURlY2xhcmF0aW9uc307XG59IGV4cG9ydHMuZGVmYXVsdCA9IGdldERlY2xhcmF0aW9uSW5mbztcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cbi8qKlxuICogU3RhcnRpbmcgYXQgYGV4cG9ydCB7YCwgbG9vayBhaGVhZCBhbmQgcmV0dXJuIGB0cnVlYCBpZiB0aGlzIGlzIGFuXG4gKiBgZXhwb3J0IHsuLi59IGZyb21gIHN0YXRlbWVudCBhbmQgYGZhbHNlYCBpZiB0aGlzIGlzIGEgcGxhaW4gbXVsdGktZXhwb3J0LlxuICovXG4gZnVuY3Rpb24gaXNFeHBvcnRGcm9tKHRva2Vucykge1xuICBsZXQgY2xvc2VCcmFjZUluZGV4ID0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICB3aGlsZSAoIXRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2xvc2VCcmFjZUluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICBjbG9zZUJyYWNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gKFxuICAgIHRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoY2xvc2VCcmFjZUluZGV4ICsgMSwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9mcm9tKSAmJlxuICAgIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2xvc2VCcmFjZUluZGV4ICsgMiwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpXG4gICk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGlzRXhwb3J0RnJvbTtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cbi8qKlxuICogU3RhcnRpbmcgYXQgYSBwb3RlbnRpYWwgYHdpdGhgIG9yIChsZWdhY3kpIGBhc3NlcnRgIHRva2VuLCByZW1vdmUgdGhlIGltcG9ydFxuICogYXR0cmlidXRlcyBpZiB0aGV5IGV4aXN0LlxuICovXG4gZnVuY3Rpb24gcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzKHRva2Vucykge1xuICBpZiAoXG4gICAgdG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX3dpdGgsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fFxuICAgICh0b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkgJiYgdG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXNzZXJ0KSlcbiAgKSB7XG4gICAgLy8gYXNzZXJ0XG4gICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgLy8ge1xuICAgIHRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIHRva2Vucy5yZW1vdmVCYWxhbmNlZENvZGUoKTtcbiAgICAvLyB9XG4gICAgdG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gIH1cbn0gZXhwb3J0cy5yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMgPSByZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTt2YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cblxuLyoqXG4gKiBDb21tb24gbWV0aG9kIHNoYXJpbmcgY29kZSBiZXR3ZWVuIENKUyBhbmQgRVNNIGNhc2VzLCBzaW5jZSB0aGV5J3JlIHRoZSBzYW1lIGhlcmUuXG4gKi9cbiBmdW5jdGlvbiBzaG91bGRFbGlkZURlZmF1bHRFeHBvcnQoXG4gIGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQsXG4gIGtlZXBVbnVzZWRJbXBvcnRzLFxuICB0b2tlbnMsXG4gIGRlY2xhcmF0aW9uSW5mbyxcbikge1xuICBpZiAoIWlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgfHwga2VlcFVudXNlZEltcG9ydHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZXhwb3J0VG9rZW4gPSB0b2tlbnMuY3VycmVudFRva2VuKCk7XG4gIGlmIChleHBvcnRUb2tlbi5yaHNFbmRJbmRleCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9uLW51bGwgcmhzRW5kSW5kZXggb24gZXhwb3J0IHRva2VuLlwiKTtcbiAgfVxuICAvLyBUaGUgZXhwb3J0IG11c3QgYmUgb2YgdGhlIGZvcm0gYGV4cG9ydCBkZWZhdWx0IGFgIG9yIGBleHBvcnQgZGVmYXVsdCBhO2AuXG4gIGNvbnN0IG51bVRva2VucyA9IGV4cG9ydFRva2VuLnJoc0VuZEluZGV4IC0gdG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICBpZiAoXG4gICAgbnVtVG9rZW5zICE9PSAzICYmXG4gICAgIShudW1Ub2tlbnMgPT09IDQgJiYgdG9rZW5zLm1hdGNoZXMxQXRJbmRleChleHBvcnRUb2tlbi5yaHNFbmRJbmRleCAtIDEsIF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBpZGVudGlmaWVyVG9rZW4gPSB0b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMik7XG4gIGlmIChpZGVudGlmaWVyVG9rZW4udHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGV4cG9ydGVkTmFtZSA9IHRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbik7XG4gIHJldHVybiAoXG4gICAgZGVjbGFyYXRpb25JbmZvLnR5cGVEZWNsYXJhdGlvbnMuaGFzKGV4cG9ydGVkTmFtZSkgJiZcbiAgICAhZGVjbGFyYXRpb25JbmZvLnZhbHVlRGVjbGFyYXRpb25zLmhhcyhleHBvcnRlZE5hbWUpXG4gICk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IHNob3VsZEVsaWRlRGVmYXVsdEV4cG9ydDtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplcicpO1xudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHMnKTtcbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzJyk7XG5cbnZhciBfZWxpZGVJbXBvcnRFcXVhbHMgPSByZXF1aXJlKCcuLi91dGlsL2VsaWRlSW1wb3J0RXF1YWxzJyk7IHZhciBfZWxpZGVJbXBvcnRFcXVhbHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWxpZGVJbXBvcnRFcXVhbHMpO1xuXG5cblxudmFyIF9nZXREZWNsYXJhdGlvbkluZm8gPSByZXF1aXJlKCcuLi91dGlsL2dldERlY2xhcmF0aW9uSW5mbycpOyB2YXIgX2dldERlY2xhcmF0aW9uSW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXREZWNsYXJhdGlvbkluZm8pO1xudmFyIF9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvID0gcmVxdWlyZSgnLi4vdXRpbC9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvJyk7IHZhciBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvKTtcbnZhciBfaXNFeHBvcnRGcm9tID0gcmVxdWlyZSgnLi4vdXRpbC9pc0V4cG9ydEZyb20nKTsgdmFyIF9pc0V4cG9ydEZyb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNFeHBvcnRGcm9tKTtcbnZhciBfcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi4vdXRpbC9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMnKTtcbnZhciBfc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0ID0gcmVxdWlyZSgnLi4vdXRpbC9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnQnKTsgdmFyIF9zaG91bGRFbGlkZURlZmF1bHRFeHBvcnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0KTtcblxuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuLyoqXG4gKiBDbGFzcyBmb3IgZWRpdGluZyBpbXBvcnQgc3RhdGVtZW50cyB3aGVuIHdlIGFyZSB0cmFuc2Zvcm1pbmcgdG8gY29tbW9uanMuXG4gKi9cbiBjbGFzcyBDSlNJbXBvcnRUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gICBfX2luaXQoKSB7dGhpcy5oYWRFeHBvcnQgPSBmYWxzZX1cbiAgIF9faW5pdDIoKSB7dGhpcy5oYWROYW1lZEV4cG9ydCA9IGZhbHNlfVxuICAgX19pbml0MygpIHt0aGlzLmhhZERlZmF1bHRFeHBvcnQgPSBmYWxzZX1cbiAgXG5cbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpbXBvcnRQcm9jZXNzb3IsXG4gICAgIG5hbWVNYW5hZ2VyLFxuICAgICBoZWxwZXJNYW5hZ2VyLFxuICAgICByZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyLFxuICAgICBlbmFibGVMZWdhY3lCYWJlbDVNb2R1bGVJbnRlcm9wLFxuICAgICBlbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCxcbiAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgaXNGbG93VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgcHJlc2VydmVEeW5hbWljSW1wb3J0LFxuICAgICBrZWVwVW51c2VkSW1wb3J0cyxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnJvb3RUcmFuc2Zvcm1lciA9IHJvb3RUcmFuc2Zvcm1lcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmltcG9ydFByb2Nlc3NvciA9IGltcG9ydFByb2Nlc3Nvcjt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5oZWxwZXJNYW5hZ2VyID0gaGVscGVyTWFuYWdlcjt0aGlzLnJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSByZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyO3RoaXMuZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCA9IGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3A7dGhpcy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcCA9IGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wO3RoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCA9IGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQ7dGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkID0gaXNGbG93VHJhbnNmb3JtRW5hYmxlZDt0aGlzLnByZXNlcnZlRHluYW1pY0ltcG9ydCA9IHByZXNlcnZlRHluYW1pY0ltcG9ydDt0aGlzLmtlZXBVbnVzZWRJbXBvcnRzID0ga2VlcFVudXNlZEltcG9ydHM7Q0pTSW1wb3J0VHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO0NKU0ltcG9ydFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7Q0pTSW1wb3J0VHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTs7XG4gICAgdGhpcy5kZWNsYXJhdGlvbkluZm8gPSBpc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkXG4gICAgICA/IF9nZXREZWNsYXJhdGlvbkluZm8yLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRva2VucylcbiAgICAgIDogX2dldERlY2xhcmF0aW9uSW5mby5FTVBUWV9ERUNMQVJBVElPTl9JTkZPO1xuICB9XG5cbiAgZ2V0UHJlZml4Q29kZSgpIHtcbiAgICBsZXQgcHJlZml4ID0gXCJcIjtcbiAgICBpZiAodGhpcy5oYWRFeHBvcnQpIHtcbiAgICAgIHByZWZpeCArPSAnT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsnO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgZ2V0U3VmZml4Q29kZSgpIHtcbiAgICBpZiAodGhpcy5lbmFibGVMZWdhY3lCYWJlbDVNb2R1bGVJbnRlcm9wICYmIHRoaXMuaGFkRGVmYXVsdEV4cG9ydCAmJiAhdGhpcy5oYWROYW1lZEV4cG9ydCkge1xuICAgICAgcmV0dXJuIFwiXFxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XFxuXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICAvLyBUeXBlU2NyaXB0IGBpbXBvcnQgZm9vID0gcmVxdWlyZSgnZm9vJyk7YCBzaG91bGQgYWx3YXlzIGp1c3QgYmUgdHJhbnNsYXRlZCB0byBwbGFpbiByZXF1aXJlLlxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnRFcXVhbHMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0ltcG9ydCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJtb2R1bGUuZXhwb3J0c1wiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0KSAmJiAhdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICB0aGlzLmhhZEV4cG9ydCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRXhwb3J0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUucG9zdEluY0RlYykpIHtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgaWRlbnRpZmllciBtYXRjaGluZyBpZiB0aGlzIGRvZXNuJ3QgYXBwbHkuXG4gICAgICBpZiAodGhpcy5wcm9jZXNzUG9zdEluY0RlYygpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB8fCB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmpzeE5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSWRlbnRpZmllcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBc3NpZ25tZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmFzc2lnbikpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDb21wbGV4QXNzaWdubWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5wcmVJbmNEZWMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUHJlSW5jRGVjKCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICBwcm9jZXNzSW1wb3J0RXF1YWxzKCkge1xuICAgIGNvbnN0IGltcG9ydE5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxKTtcbiAgICBpZiAodGhpcy5pbXBvcnRQcm9jZXNzb3Iuc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKGltcG9ydE5hbWUpKSB7XG4gICAgICAvLyBJZiB0aGlzIG5hbWUgaXMgb25seSB1c2VkIGFzIGEgdHlwZSwgZWxpZGUgdGhlIHdob2xlIGltcG9ydC5cbiAgICAgIF9lbGlkZUltcG9ydEVxdWFsczIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHN3aXRjaCBgaW1wb3J0YCB0byBgY29uc3RgLlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGlzOlxuICAgKiBpbXBvcnQgZm9vLCB7YmFyfSBmcm9tICdiYXonO1xuICAgKiBpbnRvXG4gICAqIHZhciBfYmF6ID0gcmVxdWlyZSgnYmF6Jyk7IHZhciBfYmF6MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jheik7XG4gICAqXG4gICAqIFRoZSBpbXBvcnQgY29kZSB3YXMgYWxyZWFkeSBnZW5lcmF0ZWQgaW4gdGhlIGltcG9ydCBwcmVwcm9jZXNzaW5nIHN0ZXAsIHNvXG4gICAqIHdlIGp1c3QgbmVlZCB0byBsb29rIGl0IHVwLlxuICAgKi9cbiAgIHByb2Nlc3NJbXBvcnQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICBpZiAodGhpcy5wcmVzZXJ2ZUR5bmFtaWNJbXBvcnQpIHtcbiAgICAgICAgLy8gQmFpbCBvdXQsIG9ubHkgbWFraW5nIHByb2dyZXNzIGZvciB0aGlzIG9uZSB0b2tlbi5cbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVpcmVXcmFwcGVyID0gdGhpcy5lbmFibGVMZWdhY3lUeXBlU2NyaXB0TW9kdWxlSW50ZXJvcFxuICAgICAgICA/IFwiXCJcbiAgICAgICAgOiBgJHt0aGlzLmhlbHBlck1hbmFnZXIuZ2V0SGVscGVyTmFtZShcImludGVyb3BSZXF1aXJlV2lsZGNhcmRcIil9KGA7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oYFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gJHtyZXF1aXJlV3JhcHBlcn1yZXF1aXJlYCk7XG4gICAgICBjb25zdCBjb250ZXh0SWQgPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5jb250ZXh0SWQ7XG4gICAgICBpZiAoY29udGV4dElkID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY29udGV4dCBJRCBvbiBkeW5hbWljIGltcG9ydCBpbnZvY2F0aW9uLlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5wYXJlblIsIGNvbnRleHRJZCkpIHtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Rva2VuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4ocmVxdWlyZVdyYXBwZXIgPyBcIikpKVwiIDogXCIpKVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFbGlkZUltcG9ydCA9IHRoaXMucmVtb3ZlSW1wb3J0QW5kRGV0ZWN0SWZTaG91bGRFbGlkZSgpO1xuICAgIGlmIChzaG91bGRFbGlkZUltcG9ydCkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgfVxuICAgIF9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMucmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzLmNhbGwodm9pZCAwLCB0aGlzLnRva2Vucyk7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVyYXNlIHRoaXMgaW1wb3J0IChzaW5jZSBhbnkgQ0pTIG91dHB1dCB3b3VsZCBiZSBjb21wbGV0ZWx5IGRpZmZlcmVudCksIGFuZFxuICAgKiByZXR1cm4gdHJ1ZSBpZiB0aGlzIGltcG9ydCBpcyBzaG91bGQgYmUgZWxpZGVkIGR1ZSB0byBiZWluZyBhIHR5cGUtb25seVxuICAgKiBpbXBvcnQuIFN1Y2ggaW1wb3J0cyB3aWxsIG5vdCBiZSBlbWl0dGVkIGF0IGFsbCB0byBhdm9pZCBzaWRlIGVmZmVjdHMuXG4gICAqXG4gICAqIEltcG9ydCBlbGlzaW9uIG9ubHkgaGFwcGVucyB3aXRoIHRoZSBUeXBlU2NyaXB0IG9yIEZsb3cgdHJhbnNmb3JtcyBlbmFibGVkLlxuICAgKlxuICAgKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGhhcyBzb21lIGF3a3dhcmQgb3ZlcmxhcCB3aXRoXG4gICAqICBDSlNJbXBvcnRQcm9jZXNzb3IucHJ1bmVUeXBlT25seUltcG9ydHMgLCBhbmQgdGhlIHR3byBzaG91bGQgYmUgdW5pZmllZC5cbiAgICogIFRoYXQgZnVuY3Rpb24gaGFuZGxlcyBUeXBlU2NyaXB0IGltcGxpY2l0IGltcG9ydCBuYW1lIGVsaXNpb24sIGFuZCByZW1vdmVzXG4gICAqICBhbiBpbXBvcnQgaWYgYWxsIHR5cGljYWwgaW1wb3J0ZWQgbmFtZXMgKHdpdGhvdXQgYHR5cGVgKSBhcmUgcmVtb3ZlZCBkdWVcbiAgICogIHRvIGJlaW5nIHR5cGUtb25seSBpbXBvcnRzLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgRmxvdyBpbXBvcnQgcmVtb3ZhbCBhbmRcbiAgICogIHByb3Blcmx5IGRpc3Rpbmd1aXNoZXMgYGltcG9ydCAnZm9vJ2AgZnJvbSBgaW1wb3J0IHt9IGZyb20gJ2ZvbydgIGZvciBUU1xuICAgKiAgcHVycG9zZXMuXG4gICAqXG4gICAqIFRoZSBwb3NpdGlvbiBzaG91bGQgZW5kIGF0IHRoZSBpbXBvcnQgc3RyaW5nLlxuICAgKi9cbiAgIHJlbW92ZUltcG9ydEFuZERldGVjdElmU2hvdWxkRWxpZGUoKSB7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9mcm9tKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyBhbiBcImltcG9ydCB0eXBlXCIgc3RhdGVtZW50LCBzbyBleGl0IGVhcmx5LlxuICAgICAgdGhpcy5yZW1vdmVSZW1haW5pbmdJbXBvcnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc3RhcikpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBkZWZhdWx0IGltcG9ydCBvciBuYW1lc3BhY2UgaW1wb3J0LCBzbyB0aGVyZSBtdXN0IGJlIHNvbWVcbiAgICAgIC8vIG5vbi10eXBlIGltcG9ydC5cbiAgICAgIHRoaXMucmVtb3ZlUmVtYWluaW5nSW1wb3J0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJhcmUgaW1wb3J0LCBzbyB3ZSBzaG91bGQgcHJvY2VlZCB3aXRoIHRoZSBpbXBvcnQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGZvdW5kTm9uVHlwZUltcG9ydCA9IGZhbHNlO1xuICAgIGxldCBmb3VuZEFueU5hbWVkSW1wb3J0ID0gZmFsc2U7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgIC8vIENoZWNrIGlmIGFueSBuYW1lZCBpbXBvcnRzIGFyZSBvZiB0aGUgZm9ybSBcImZvb1wiIG9yIFwiZm9vIGFzIGJhclwiLCB3aXRoXG4gICAgICAvLyBubyBsZWFkaW5nIFwidHlwZVwiLlxuICAgICAgaWYgKFxuICAgICAgICAoIWZvdW5kTm9uVHlwZUltcG9ydCAmJiB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuY29tbWEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgICBmb3VuZEFueU5hbWVkSW1wb3J0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSB8fFxuICAgICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpIHx8XG4gICAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkgfHxcbiAgICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNChfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUilcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm91bmROb25UeXBlSW1wb3J0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMua2VlcFVudXNlZEltcG9ydHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCkge1xuICAgICAgcmV0dXJuICFmb3VuZE5vblR5cGVJbXBvcnQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRmxvd1RyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIC8vIEluIEZsb3csIHVubGlrZSBUUywgYGltcG9ydCB7fSBmcm9tICdmb28nO2AgcHJlc2VydmVzIHRoZSBpbXBvcnQuXG4gICAgICByZXR1cm4gZm91bmRBbnlOYW1lZEltcG9ydCAmJiAhZm91bmROb25UeXBlSW1wb3J0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgIHJlbW92ZVJlbWFpbmluZ0ltcG9ydCgpIHtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICAgcHJvY2Vzc0lkZW50aWZpZXIoKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAodG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi5pZGVudGlmaWVyUm9sZSA9PT0gX3Rva2VuaXplci5JZGVudGlmaWVyUm9sZS5PYmplY3RTaG9ydGhhbmQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPYmplY3RTaG9ydGhhbmQoKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4uaWRlbnRpZmllclJvbGUgIT09IF90b2tlbml6ZXIuSWRlbnRpZmllclJvbGUuQWNjZXNzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KFxuICAgICAgdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVGb3JUb2tlbih0b2tlbiksXG4gICAgKTtcbiAgICBpZiAoIXJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFRvbGVyYXRlIGFueSBudW1iZXIgb2YgY2xvc2luZyBwYXJlbnMgd2hpbGUgbG9va2luZyBmb3IgYW4gb3BlbmluZyBwYXJlblxuICAgIC8vIHRoYXQgaW5kaWNhdGVzIGEgZnVuY3Rpb24gY2FsbC5cbiAgICBsZXQgcG9zc2libGVPcGVuUGFyZW5JbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMTtcbiAgICB3aGlsZSAoXG4gICAgICBwb3NzaWJsZU9wZW5QYXJlbkluZGV4IDwgdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aCAmJlxuICAgICAgdGhpcy50b2tlbnMudG9rZW5zW3Bvc3NpYmxlT3BlblBhcmVuSW5kZXhdLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUucGFyZW5SXG4gICAgKSB7XG4gICAgICBwb3NzaWJsZU9wZW5QYXJlbkluZGV4Kys7XG4gICAgfVxuICAgIC8vIEF2b2lkIHRyZWF0aW5nIGltcG9ydGVkIGZ1bmN0aW9ucyBhcyBtZXRob2RzIG9mIHRoZWlyIGBleHBvcnRzYCBvYmplY3RcbiAgICAvLyBieSB1c2luZyBgKDAsIGYpYCB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGluIGEgcGFyZW4gZXhwcmVzc2lvbi4gRWxzZVxuICAgIC8vIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGxgIHdoZW4gdGhlIGlkZW50aWZpZXIgaXMgYSBndWFyYW50ZWVkXG4gICAgLy8gZnVuY3Rpb24gY2FsbC4gV2hlbiB1c2luZyBgY2FsbGAsIHBhc3MgdW5kZWZpbmVkIGFzIHRoZSBjb250ZXh0LlxuICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbcG9zc2libGVPcGVuUGFyZW5JbmRleF0udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoMSkudHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwgJiZcbiAgICAgICAgdGhpcy50b2tlbnMudG9rZW5BdFJlbGF0aXZlSW5kZXgoLTEpLnR5cGUgIT09IF90eXBlcy5Ub2tlblR5cGUuX25ld1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtyZXBsYWNlbWVudH0uY2FsbCh2b2lkIDAsIGApO1xuICAgICAgICAvLyBSZW1vdmUgdGhlIG9sZCBwYXJlbi5cbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgLy8gQmFsYW5jZSBvdXQgdGhlIG5ldyBwYXJlbi5cbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTZWUgaGVyZTogaHR0cDovLzJhbGl0eS5jb20vMjAxNS8xMi9yZWZlcmVuY2VzLmh0bWxcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoMCwgJHtyZXBsYWNlbWVudH0pYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihyZXBsYWNlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvY2Vzc09iamVjdFNob3J0aGFuZCgpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChpZGVudGlmaWVyKTtcbiAgICBpZiAoIXJlcGxhY2VtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgJHtpZGVudGlmaWVyfTogJHtyZXBsYWNlbWVudH1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb2Nlc3NFeHBvcnQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczMoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdCwgX3R5cGVzLlRva2VuVHlwZS5fZW51bSlcbiAgICApIHtcbiAgICAgIHRoaXMuaGFkTmFtZWRFeHBvcnQgPSB0cnVlO1xuICAgICAgLy8gTGV0IHRoZSBUeXBlU2NyaXB0IHRyYW5zZm9ybSBoYW5kbGUgaXQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQpKSB7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczMoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9kZWZhdWx0LCBfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSkge1xuICAgICAgICB0aGlzLmhhZERlZmF1bHRFeHBvcnQgPSB0cnVlO1xuICAgICAgICAvLyBGbG93IGV4cG9ydCBkZWZhdWx0IGVudW1zIG5lZWQgc29tZSBzcGVjaWFsIGhhbmRsaW5nLCBzbyBoYW5kbGUgdGhlbVxuICAgICAgICAvLyBpbiB0aGF0IHRyYW5mb3JtIHJhdGhlciB0aGFuIHRoaXMgb25lLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRCaW5kaW5ncygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSAmJlxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl90eXBlKVxuICAgICkge1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2F9O1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2EgYXMgYn07XG4gICAgICAvLyBleHBvcnQgdHlwZSB7YX0gZnJvbSAnLi9iJztcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogZnJvbSAnLi9iJztcbiAgICAgIC8vIGV4cG9ydCB0eXBlICogYXMgbnMgZnJvbSAnLi9iJztcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAqXG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9hcykpIHtcbiAgICAgICAgICAvLyBhc1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgICAgLy8gbnNcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBSZW1vdmUgdHlwZSByZS1leHBvcnQgYC4uLiB9IGZyb20gJy4vVCdgXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSkgJiZcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSwgX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgX3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcy5yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmhhZE5hbWVkRXhwb3J0ID0gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX3ZhcikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fbGV0KSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9jb25zdClcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0V4cG9ydFZhcigpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24pIHx8XG4gICAgICAvLyBleHBvcnQgYXN5bmMgZnVuY3Rpb25cbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbilcbiAgICApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0V4cG9ydEZ1bmN0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcykgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLmF0KVxuICAgICkge1xuICAgICAgdGhpcy5wcm9jZXNzRXhwb3J0Q2xhc3MoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLnN0YXIpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFeHBvcnRTdGFyKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIGV4cG9ydCBzeW50YXguXCIpO1xuICAgIH1cbiAgfVxuXG4gICBwcm9jZXNzQXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDFdO1xuICAgIC8vIElmIHRoZSBMSFMgaXMgYSB0eXBlIGlkZW50aWZpZXIsIHRoaXMgbXVzdCBiZSBhIGRlY2xhcmF0aW9uIGxpa2UgYGxldCBhOiBiID0gYztgLFxuICAgIC8vIHdpdGggYGJgIGFzIHRoZSBpZGVudGlmaWVyLCBzbyBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhhdCBjYXNlLlxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uaXNUeXBlIHx8IGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAyICYmIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCAtIDIsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMiAmJiBbX3R5cGVzLlRva2VuVHlwZS5fdmFyLCBfdHlwZXMuVG9rZW5UeXBlLl9sZXQsIF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0XS5pbmNsdWRlcyh0aGlzLnRva2Vucy50b2tlbnNbaW5kZXggLSAyXS50eXBlKSkge1xuICAgICAgLy8gRGVjbGFyYXRpb25zIGRvbid0IG5lZWQgYW4gZXh0cmEgYXNzaWdubWVudC4gVGhpcyBkb2Vzbid0IGF2b2lkIHRoZVxuICAgICAgLy8gYXNzaWdubWVudCBmb3IgY29tbWEtc2VwYXJhdGVkIGRlY2xhcmF0aW9ucywgYnV0IGl0J3Mgc3RpbGwgY29ycmVjdFxuICAgICAgLy8gc2luY2UgdGhlIGFzc2lnbm1lbnQgaXMganVzdCByZWR1bmRhbnQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFzc2lnbm1lbnRTbmlwcGV0ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IucmVzb2x2ZUV4cG9ydEJpbmRpbmcoXG4gICAgICB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbiksXG4gICAgKTtcbiAgICBpZiAoIWFzc2lnbm1lbnRTbmlwcGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCAke2Fzc2lnbm1lbnRTbmlwcGV0fSA9YCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzb21ldGhpbmcgbGlrZSBgYSArPSAzYCwgd2hlcmUgYGFgIG1pZ2h0IGJlIGFuIGV4cG9ydGVkIHZhbHVlLlxuICAgKi9cbiAgIHByb2Nlc3NDb21wbGV4QXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCAtIDFdO1xuICAgIGlmIChpZGVudGlmaWVyVG9rZW4udHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMiAmJiB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXggLSAyLCBfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYXNzaWdubWVudFNuaXBwZXQgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5yZXNvbHZlRXhwb3J0QmluZGluZyhcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4oaWRlbnRpZmllclRva2VuKSxcbiAgICApO1xuICAgIGlmICghYXNzaWdubWVudFNuaXBwZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgID0gJHthc3NpZ25tZW50U25pcHBldH1gKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHNvbWV0aGluZyBsaWtlIGArK2FgLCB3aGVyZSBgYWAgbWlnaHQgYmUgYW4gZXhwb3J0ZWQgdmFsdWUuXG4gICAqL1xuICAgcHJvY2Vzc1ByZUluY0RlYygpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IGlkZW50aWZpZXJUb2tlbiA9IHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleCArIDFdO1xuICAgIGlmIChpZGVudGlmaWVyVG9rZW4udHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpZGVudGlmaWVyVG9rZW4uc2hhZG93c0dsb2JhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJZ25vcmUgdGhpbmdzIGxpa2UgKythLmIgYW5kICsrYVtiXSBhbmQgKythKCkuYi5cbiAgICBpZiAoXG4gICAgICBpbmRleCArIDIgPCB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoICYmXG4gICAgICAodGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4ICsgMiwgX3R5cGVzLlRva2VuVHlwZS5kb3QpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCArIDIsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldEwpIHx8XG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCArIDIsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaWRlbnRpZmllck5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKGlkZW50aWZpZXJUb2tlbik7XG4gICAgY29uc3QgYXNzaWdubWVudFNuaXBwZXQgPSB0aGlzLmltcG9ydFByb2Nlc3Nvci5yZXNvbHZlRXhwb3J0QmluZGluZyhpZGVudGlmaWVyTmFtZSk7XG4gICAgaWYgKCFhc3NpZ25tZW50U25pcHBldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAke2Fzc2lnbm1lbnRTbmlwcGV0fSA9IGApO1xuICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgc29tZXRoaW5nIGxpa2UgYGErK2AsIHdoZXJlIGBhYCBtaWdodCBiZSBhbiBleHBvcnRlZCB2YWx1ZS5cbiAgICogVGhpcyBzdGFydHMgYXQgdGhlIGBhYCwgbm90IGF0IHRoZSBgKytgLlxuICAgKi9cbiAgIHByb2Nlc3NQb3N0SW5jRGVjKCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgY29uc3QgaWRlbnRpZmllclRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2luZGV4XTtcbiAgICBjb25zdCBvcGVyYXRvclRva2VuID0gdGhpcy50b2tlbnMudG9rZW5zW2luZGV4ICsgMV07XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlkZW50aWZpZXJUb2tlbi5zaGFkb3dzR2xvYmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAxICYmIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCAtIDEsIF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4oaWRlbnRpZmllclRva2VuKTtcbiAgICBjb25zdCBhc3NpZ25tZW50U25pcHBldCA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLnJlc29sdmVFeHBvcnRCaW5kaW5nKGlkZW50aWZpZXJOYW1lKTtcbiAgICBpZiAoIWFzc2lnbm1lbnRTbmlwcGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdG9yQ29kZSA9IHRoaXMudG9rZW5zLnJhd0NvZGVGb3JUb2tlbihvcGVyYXRvclRva2VuKTtcbiAgICAvLyBXZSBtaWdodCBhbHNvIHJlcGxhY2UgdGhlIGlkZW50aWZpZXIgd2l0aCBzb21ldGhpbmcgbGlrZSBleHBvcnRzLngsIHNvXG4gICAgLy8gZG8gdGhhdCByZXBsYWNlbWVudCBoZXJlIGFzIHdlbGwuXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yLmdldElkZW50aWZpZXJSZXBsYWNlbWVudChpZGVudGlmaWVyTmFtZSkgfHwgaWRlbnRpZmllck5hbWU7XG4gICAgaWYgKG9wZXJhdG9yQ29kZSA9PT0gXCIrK1wiKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oYCgke2Jhc2V9ID0gJHthc3NpZ25tZW50U25pcHBldH0gPSAke2Jhc2V9ICsgMSwgJHtiYXNlfSAtIDEpYCk7XG4gICAgfSBlbHNlIGlmIChvcGVyYXRvckNvZGUgPT09IFwiLS1cIikge1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoJHtiYXNlfSA9ICR7YXNzaWdubWVudFNuaXBwZXR9ID0gJHtiYXNlfSAtIDEsICR7YmFzZX0gKyAxKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgb3BlcmF0b3I6ICR7b3BlcmF0b3JDb2RlfWApO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgIHByb2Nlc3NFeHBvcnREZWZhdWx0KCkge1xuICAgIGxldCBleHBvcnRlZFJ1bnRpbWVWYWx1ZSA9IHRydWU7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9kZWZhdWx0LCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbiwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSB8fFxuICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb25cbiAgICAgICh0aGlzLnRva2Vucy5tYXRjaGVzNShfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5fZnVuY3Rpb24sIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWxBdEluZGV4KFxuICAgICAgICAgIHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMixcbiAgICAgICAgICBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2FzeW5jLFxuICAgICAgICApKVxuICAgICkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgLy8gTmFtZWQgZnVuY3Rpb24gZXhwb3J0IGNhc2U6IGNoYW5nZSBpdCB0byBhIHRvcC1sZXZlbCBmdW5jdGlvblxuICAgICAgLy8gZGVjbGFyYXRpb24gZm9sbG93ZWQgYnkgZXhwb3J0cyBzdGF0ZW1lbnQuXG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5wcm9jZXNzTmFtZWRGdW5jdGlvbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuZGVmYXVsdCA9ICR7bmFtZX07YCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM0KF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCwgX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXM1KF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCwgX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUuYXQpXG4gICAgKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLmNvcHlEZWNvcmF0b3JzKCk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc05hbWVkQ2xhc3MoKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLmRlZmF1bHQgPSAke25hbWV9O2ApO1xuICAgICAgLy8gQWZ0ZXIgdGhpcyBwb2ludCwgdGhpcyBpcyBhIHBsYWluIFwiZXhwb3J0IGRlZmF1bHQgRVwiIHN0YXRlbWVudC5cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgX3Nob3VsZEVsaWRlRGVmYXVsdEV4cG9ydDIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgXG4gICAgICAgIHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgICAgdGhpcy5rZWVwVW51c2VkSW1wb3J0cyxcbiAgICAgICAgdGhpcy50b2tlbnMsXG4gICAgICAgIHRoaXMuZGVjbGFyYXRpb25JbmZvLFxuICAgICAgKVxuICAgICkge1xuICAgICAgLy8gSWYgdGhlIGV4cG9ydGVkIHZhbHVlIGlzIGp1c3QgYW4gaWRlbnRpZmllciBhbmQgc2hvdWxkIGJlIGVsaWRlZCBieSBUeXBlU2NyaXB0XG4gICAgICAvLyBydWxlcywgdGhlbiByZW1vdmUgaXQgZW50aXJlbHkuIEl0IHdpbGwgYWx3YXlzIGhhdmUgdGhlIGZvcm0gYGV4cG9ydCBkZWZhdWx0IGVgLFxuICAgICAgLy8gd2hlcmUgYGVgIGlzIGFuIGlkZW50aWZpZXIuXG4gICAgICBleHBvcnRlZFJ1bnRpbWVWYWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcikge1xuICAgICAgLy8gV2UgbmVlZCB0byBhc3NpZ24gRSB0byBhIHZhcmlhYmxlLiBDaGFuZ2UgXCJleHBvcnQgZGVmYXVsdCBFXCIgdG9cbiAgICAgIC8vIFwibGV0IF9kZWZhdWx0OyBleHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdCA9IEVcIlxuICAgICAgY29uc3QgZGVmYXVsdFZhck5hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfZGVmYXVsdFwiKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgbGV0ICR7ZGVmYXVsdFZhck5hbWV9OyBleHBvcnRzLmApO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgPSAke2RlZmF1bHRWYXJOYW1lfSA9YCk7XG4gICAgICB0aGlzLnJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIuc2V0RXh0cmFjdGVkRGVmYXVsdEV4cG9ydE5hbWUoZGVmYXVsdFZhck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDaGFuZ2UgXCJleHBvcnQgZGVmYXVsdCBFXCIgdG8gXCJleHBvcnRzLmRlZmF1bHQgPSBFXCJcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcImV4cG9ydHMuXCIpO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiID1cIik7XG4gICAgfVxuICAgIGlmIChleHBvcnRlZFJ1bnRpbWVWYWx1ZSkge1xuICAgICAgdGhpcy5oYWREZWZhdWx0RXhwb3J0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAgY29weURlY29yYXRvcnMoKSB7XG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYXQpKSB7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUubmFtZSk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmRvdCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmRvdCk7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgZGVjbGFyYXRpb24gbGlrZSBgZXhwb3J0IHZhcmAsIGBleHBvcnQgbGV0YCwgb3IgYGV4cG9ydCBjb25zdGAuXG4gICAqL1xuICAgcHJvY2Vzc0V4cG9ydFZhcigpIHtcbiAgICBpZiAodGhpcy5pc1NpbXBsZUV4cG9ydFZhcigpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NTaW1wbGVFeHBvcnRWYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9jZXNzQ29tcGxleEV4cG9ydFZhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGV4cG9ydCBpcyBvZiB0aGUgZm9ybTpcbiAgICogZXhwb3J0IHZhci9sZXQvY29uc3QgW3Zhck5hbWVdID0gW2V4cHJdO1xuICAgKiBJbiBvdGhlciB3b3JkcywgZGV0ZXJtaW5lIGlmIGZ1bmN0aW9uIG5hbWUgaW5mZXJlbmNlIG1pZ2h0IGFwcGx5LlxuICAgKi9cbiAgIGlzU2ltcGxlRXhwb3J0VmFyKCkge1xuICAgIGxldCB0b2tlbkluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCk7XG4gICAgLy8gZXhwb3J0XG4gICAgdG9rZW5JbmRleCsrO1xuICAgIC8vIHZhci9sZXQvY29uc3RcbiAgICB0b2tlbkluZGV4Kys7XG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgodG9rZW5JbmRleCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0b2tlbkluZGV4Kys7XG4gICAgd2hpbGUgKHRva2VuSW5kZXggPCB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoICYmIHRoaXMudG9rZW5zLnRva2Vuc1t0b2tlbkluZGV4XS5pc1R5cGUpIHtcbiAgICAgIHRva2VuSW5kZXgrKztcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgodG9rZW5JbmRleCwgX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGFuIGBleHBvcnQgdmFyYCBkZWNsYXJhdGlvbiBpbml0aWFsaXppbmcgYSBzaW5nbGUgdmFyaWFibGUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGlzOlxuICAgKiBleHBvcnQgY29uc3QgZiA9ICgpID0+IHt9O1xuICAgKiBiZWNvbWVzIHRoaXM6XG4gICAqIGNvbnN0IGYgPSAoKSA9PiB7fTsgZXhwb3J0cy5mID0gZjtcbiAgICpcbiAgICogVGhlIHZhcmlhYmxlIGlzIHVudXNlZCAoZS5nLiBleHBvcnRzLmYgaGFzIHRoZSB0cnVlIHZhbHVlIG9mIHRoZSBleHBvcnQpLlxuICAgKiBXZSBuZWVkIHRvIHByb2R1Y2UgYW4gYXNzaWdubWVudCBvZiB0aGlzIGZvcm0gc28gdGhhdCB0aGUgZnVuY3Rpb24gd2lsbFxuICAgKiBoYXZlIGFuIGluZmVycmVkIG5hbWUgb2YgXCJmXCIsIHdoaWNoIHdvdWxkbid0IGhhcHBlbiBpbiB0aGUgbW9yZSBnZW5lcmFsXG4gICAqIGNhc2UgYmVsb3cuXG4gICAqL1xuICAgcHJvY2Vzc1NpbXBsZUV4cG9ydFZhcigpIHtcbiAgICAvLyBleHBvcnRcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAvLyB2YXIvbGV0L2NvbnN0XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgY29uc3QgdmFyTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgLy8geDogbnVtYmVyICAtPiAgeFxuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLnJoc0VuZEluZGV4O1xuICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCA9IHRva2VuIHdpdGggYW4gZW5kIGluZGV4LlwiKTtcbiAgICB9XG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgZW5kSW5kZXgpIHtcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGA7IGV4cG9ydHMuJHt2YXJOYW1lfSA9ICR7dmFyTmFtZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gbm9ybWFsIGRlY2xhcmF0aW9uIGV4cG9ydHMsIGluY2x1ZGluZyBoYW5kbGluZyBkZXN0cnVjdHVyaW5nLlxuICAgKiBGb3IgZXhhbXBsZSwgdGhpczpcbiAgICogZXhwb3J0IGNvbnN0IHt4OiBbYSA9IDIsIGJdLCBjfSA9IGQ7XG4gICAqIGJlY29tZXMgdGhpczpcbiAgICogKHt4OiBbZXhwb3J0cy5hID0gMiwgZXhwb3J0cy5iXSwgYzogZXhwb3J0cy5jfSA9IGQ7KVxuICAgKi9cbiAgIHByb2Nlc3NDb21wbGV4RXhwb3J0VmFyKCkge1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgY29uc3QgbmVlZHNQYXJlbnMgPSB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gICAgaWYgKG5lZWRzUGFyZW5zKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiKFwiKTtcbiAgICB9XG5cbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmRvbGxhckJyYWNlTCkgfHxcbiAgICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TClcbiAgICAgICkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2tldFIpKSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZGVwdGggPT09IDAgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAgICAgIXRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZVxuICAgICAgKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgICAvLyBEZWZhdWx0IHZhbHVlcyBtaWdodCBoYXZlIGFzc2lnbm1lbnRzIGluIHRoZSBSSFMgdGhhdCB3ZSB3YW50IHRvIGlnbm9yZSwgc28gc2tpcCBwYXN0XG4gICAgICAgIC8vIHRoZW0uXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgICAgIGlmIChlbmRJbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgICAgaWYgKF90b2tlbml6ZXIuaXNEZWNsYXJhdGlvbi5jYWxsKHZvaWQgMCwgdG9rZW4pKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KG5hbWUpO1xuICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHJlcGxhY2VtZW50IGZvciAke25hbWV9IGluIFxcYGV4cG9ydCB2YXJcXGAgc3ludGF4LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoX3Rva2VuaXplci5pc09iamVjdFNob3J0aGFuZERlY2xhcmF0aW9uLmNhbGwodm9pZCAwLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gYCR7bmFtZX06ICR7cmVwbGFjZW1lbnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKHJlcGxhY2VtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1BhcmVucykge1xuICAgICAgLy8gU2VlayB0byB0aGUgZW5kIG9mIHRoZSBSSFMuXG4gICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLnJoc0VuZEluZGV4O1xuICAgICAgaWYgKGVuZEluZGV4ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgPSB0b2tlbiB3aXRoIGFuIGVuZCBpbmRleC5cIik7XG4gICAgICB9XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBlbmRJbmRleCkge1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IGZ1bmN0aW9uIGZvbygpIHt9XG4gICAqIGludG8gdGhpczpcbiAgICogZnVuY3Rpb24gZm9vKCkge30gZXhwb3J0cy5mb28gPSBmb287XG4gICAqL1xuICAgcHJvY2Vzc0V4cG9ydEZ1bmN0aW9uKCkge1xuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcIlwiKTtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wcm9jZXNzTmFtZWRGdW5jdGlvbigpO1xuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLiR7bmFtZX0gPSAke25hbWV9O2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgcGFzdCBhIGZ1bmN0aW9uIHdpdGggYSBuYW1lIGFuZCByZXR1cm4gdGhhdCBuYW1lLlxuICAgKi9cbiAgIHByb2Nlc3NOYW1lZEZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbikpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9hc3luYykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYXN5bmMga2V5d29yZCBpbiBmdW5jdGlvbiBleHBvcnQuXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc3RhcikpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGlkZW50aWZpZXIgZm9yIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWUuXCIpO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICBpZiAodGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKS5pc1R5cGUpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlVHlwZVJhbmdlKCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NCYWxhbmNlZENvZGUoKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoaXM6XG4gICAqIGV4cG9ydCBjbGFzcyBBIHt9XG4gICAqIGludG8gdGhpczpcbiAgICogY2xhc3MgQSB7fSBleHBvcnRzLkEgPSBBO1xuICAgKi9cbiAgIHByb2Nlc3NFeHBvcnRDbGFzcygpIHtcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB0aGlzLmNvcHlEZWNvcmF0b3JzKCk7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2Fic3RyYWN0KSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NOYW1lZENsYXNzKCk7XG4gICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgIGV4cG9ydHMuJHtuYW1lfSA9ICR7bmFtZX07YCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRoaXM6XG4gICAqIGV4cG9ydCB7YSwgYiBhcyBjfTtcbiAgICogaW50byB0aGlzOlxuICAgKiBleHBvcnRzLmEgPSBhOyBleHBvcnRzLmMgPSBiO1xuICAgKlxuICAgKiBPUlxuICAgKlxuICAgKiBUcmFuc2Zvcm0gdGhpczpcbiAgICogZXhwb3J0IHthLCBiIGFzIGN9IGZyb20gJy4vZm9vJztcbiAgICogaW50byB0aGUgcHJlLWdlbmVyYXRlZCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY29kZSBmcm9tIHRoZSBJbXBvcnRQcm9jZXNzb3IuXG4gICAqXG4gICAqIEZvciB0aGUgZmlyc3QgY2FzZSwgaWYgdGhlIFR5cGVTY3JpcHQgdHJhbnNmb3JtIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gc2tpcFxuICAgKiBleHBvcnRzIHRoYXQgYXJlIG9ubHkgZGVmaW5lZCBhcyB0eXBlcy5cbiAgICovXG4gICBwcm9jZXNzRXhwb3J0QmluZGluZ3MoKSB7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcblxuICAgIGNvbnN0IGlzUmVFeHBvcnQgPSBfaXNFeHBvcnRGcm9tMi5kZWZhdWx0LmNhbGwodm9pZCAwLCB0aGlzLnRva2Vucyk7XG5cbiAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnRzID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuXG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBzcGVjaWZpZXJJbmZvLmVuZEluZGV4KSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3VsZFJlbW92ZUV4cG9ydCA9XG4gICAgICAgIHNwZWNpZmllckluZm8uaXNUeXBlIHx8XG4gICAgICAgICghaXNSZUV4cG9ydCAmJiB0aGlzLnNob3VsZEVsaWRlRXhwb3J0ZWRJZGVudGlmaWVyKHNwZWNpZmllckluZm8ubGVmdE5hbWUpKTtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlRXhwb3J0KSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IHNwZWNpZmllckluZm8ucmlnaHROYW1lO1xuICAgICAgICBpZiAoZXhwb3J0ZWROYW1lID09PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgIHRoaXMuaGFkRGVmYXVsdEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oYWROYW1lZEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYWxOYW1lID0gc3BlY2lmaWVySW5mby5sZWZ0TmFtZTtcbiAgICAgICAgY29uc3QgbmV3TG9jYWxOYW1lID0gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KGxvY2FsTmFtZSk7XG4gICAgICAgIGV4cG9ydFN0YXRlbWVudHMucHVzaChgZXhwb3J0cy4ke2V4cG9ydGVkTmFtZX0gPSAke25ld0xvY2FsTmFtZSB8fCBsb2NhbE5hbWV9O2ApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuY29tbWEsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKSl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gZXhwb3J0Li4uZnJvbSwgc28gdGhyb3cgYXdheSB0aGUgbm9ybWFsIG5hbWVkIGV4cG9ydCBjb2RlXG4gICAgICAvLyBhbmQgdXNlIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgY29kZSBmcm9tIEltcG9ydFByb2Nlc3Nvci5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWUoKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UodGhpcy5pbXBvcnRQcm9jZXNzb3IuY2xhaW1JbXBvcnRDb2RlKHBhdGgpKTtcbiAgICAgIF9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMucmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzLmNhbGwodm9pZCAwLCB0aGlzLnRva2Vucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBub3JtYWwgbmFtZWQgZXhwb3J0LCBzbyB1c2UgdGhhdC5cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoZXhwb3J0U3RhdGVtZW50cy5qb2luKFwiIFwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgIHByb2Nlc3NFeHBvcnRTdGFyKCkge1xuICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5zdHJpbmcpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy50b2tlbnMuc3RyaW5nVmFsdWUoKTtcbiAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKHRoaXMuaW1wb3J0UHJvY2Vzc29yLmNsYWltSW1wb3J0Q29kZShwYXRoKSk7XG4gICAgX3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcy5yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5zZW1pKSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICAgc2hvdWxkRWxpZGVFeHBvcnRlZElkZW50aWZpZXIobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiZcbiAgICAgICF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmXG4gICAgICAhdGhpcy5kZWNsYXJhdGlvbkluZm8udmFsdWVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBDSlNJbXBvcnRUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cbnZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG52YXIgX2VsaWRlSW1wb3J0RXF1YWxzID0gcmVxdWlyZSgnLi4vdXRpbC9lbGlkZUltcG9ydEVxdWFscycpOyB2YXIgX2VsaWRlSW1wb3J0RXF1YWxzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VsaWRlSW1wb3J0RXF1YWxzKTtcblxuXG5cbnZhciBfZ2V0RGVjbGFyYXRpb25JbmZvID0gcmVxdWlyZSgnLi4vdXRpbC9nZXREZWNsYXJhdGlvbkluZm8nKTsgdmFyIF9nZXREZWNsYXJhdGlvbkluZm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0RGVjbGFyYXRpb25JbmZvKTtcbnZhciBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyA9IHJlcXVpcmUoJy4uL3V0aWwvZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbycpOyB2YXIgX2dldEltcG9ydEV4cG9ydFNwZWNpZmllckluZm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbyk7XG52YXIgX2dldE5vblR5cGVJZGVudGlmaWVycyA9IHJlcXVpcmUoJy4uL3V0aWwvZ2V0Tm9uVHlwZUlkZW50aWZpZXJzJyk7XG52YXIgX2lzRXhwb3J0RnJvbSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNFeHBvcnRGcm9tJyk7IHZhciBfaXNFeHBvcnRGcm9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzRXhwb3J0RnJvbSk7XG52YXIgX3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcyA9IHJlcXVpcmUoJy4uL3V0aWwvcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzJyk7XG52YXIgX3Nob3VsZEVsaWRlRGVmYXVsdEV4cG9ydCA9IHJlcXVpcmUoJy4uL3V0aWwvc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0Jyk7IHZhciBfc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Nob3VsZEVsaWRlRGVmYXVsdEV4cG9ydCk7XG5cbnZhciBfVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1RyYW5zZm9ybWVyJyk7IHZhciBfVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVHJhbnNmb3JtZXIpO1xuXG4vKipcbiAqIENsYXNzIGZvciBlZGl0aW5nIGltcG9ydCBzdGF0ZW1lbnRzIHdoZW4gd2UgYXJlIGtlZXBpbmcgdGhlIGNvZGUgYXMgRVNNLiBXZSBzdGlsbCBuZWVkIHRvIHJlbW92ZVxuICogdHlwZS1vbmx5IGltcG9ydHMgaW4gVHlwZVNjcmlwdCBhbmQgRmxvdy5cbiAqL1xuIGNsYXNzIEVTTUltcG9ydFRyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgdG9rZW5zLFxuICAgICBuYW1lTWFuYWdlcixcbiAgICAgaGVscGVyTWFuYWdlcixcbiAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAgaXNGbG93VHJhbnNmb3JtRW5hYmxlZCxcbiAgICAga2VlcFVudXNlZEltcG9ydHMsXG4gICAgb3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5oZWxwZXJNYW5hZ2VyID0gaGVscGVyTWFuYWdlcjt0aGlzLnJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSByZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyO3RoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCA9IGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQ7dGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkID0gaXNGbG93VHJhbnNmb3JtRW5hYmxlZDt0aGlzLmtlZXBVbnVzZWRJbXBvcnRzID0ga2VlcFVudXNlZEltcG9ydHM7O1xuICAgIHRoaXMubm9uVHlwZUlkZW50aWZpZXJzID1cbiAgICAgIGlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiYgIWtlZXBVbnVzZWRJbXBvcnRzXG4gICAgICAgID8gX2dldE5vblR5cGVJZGVudGlmaWVycy5nZXROb25UeXBlSWRlbnRpZmllcnMuY2FsbCh2b2lkIDAsIHRva2Vucywgb3B0aW9ucylcbiAgICAgICAgOiBuZXcgU2V0KCk7XG4gICAgdGhpcy5kZWNsYXJhdGlvbkluZm8gPVxuICAgICAgaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJiAha2VlcFVudXNlZEltcG9ydHNcbiAgICAgICAgPyBfZ2V0RGVjbGFyYXRpb25JbmZvMi5kZWZhdWx0LmNhbGwodm9pZCAwLCB0b2tlbnMpXG4gICAgICAgIDogX2dldERlY2xhcmF0aW9uSW5mby5FTVBUWV9ERUNMQVJBVElPTl9JTkZPO1xuICAgIHRoaXMuaW5qZWN0Q3JlYXRlUmVxdWlyZUZvckltcG9ydFJlcXVpcmUgPSBCb29sZWFuKG9wdGlvbnMuaW5qZWN0Q3JlYXRlUmVxdWlyZUZvckltcG9ydFJlcXVpcmUpO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICAvLyBUeXBlU2NyaXB0IGBpbXBvcnQgZm9vID0gcmVxdWlyZSgnZm9vJyk7YCBzaG91bGQgYWx3YXlzIGp1c3QgYmUgdHJhbnNsYXRlZCB0byBwbGFpbiByZXF1aXJlLlxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5lcSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnRFcXVhbHMoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQoX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0LCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5lcSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSlcbiAgICApIHtcbiAgICAgIC8vIGltcG9ydCB0eXBlIFQgPSByZXF1aXJlKCdUJylcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgLy8gVGhpcyBjb25zdHJ1Y3QgaXMgYWx3YXlzIGV4YWN0bHkgOCB0b2tlbnMgbG9uZywgc28gcmVtb3ZlIHRoZSA3IHJlbWFpbmluZyB0b2tlbnMuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuZXEpKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oXCJtb2R1bGUuZXhwb3J0c1wiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNShfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUuZXEpICYmXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAyLCBfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3R5cGUpXG4gICAgKSB7XG4gICAgICAvLyBleHBvcnQgaW1wb3J0IHR5cGUgVCA9IHJlcXVpcmUoJ1QnKVxuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdCBpcyBhbHdheXMgZXhhY3RseSA5IHRva2VucyBsb25nLCBzbyByZW1vdmUgdGhlIDggcmVtYWluaW5nIHRva2Vucy5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFeHBvcnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc05hbWVkRXhwb3J0cygpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSlcbiAgICApIHtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHthfTtcbiAgICAgIC8vIGV4cG9ydCB0eXBlIHthIGFzIGJ9O1xuICAgICAgLy8gZXhwb3J0IHR5cGUge2F9IGZyb20gJy4vYic7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGZyb20gJy4vYic7XG4gICAgICAvLyBleHBvcnQgdHlwZSAqIGFzIG5zIGZyb20gJy4vYic7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICAgIHdoaWxlICghdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gKlxuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYXMpKSB7XG4gICAgICAgICAgLy8gYXNcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIC8vIG5zXG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIHR5cGUgcmUtZXhwb3J0IGAuLi4gfSBmcm9tICcuL1QnYFxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX2Zyb20pICYmXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIF9yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMucmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzLmNhbGwodm9pZCAwLCB0aGlzLnRva2Vucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgIHByb2Nlc3NJbXBvcnRFcXVhbHMoKSB7XG4gICAgY29uc3QgaW1wb3J0TmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgIGlmICh0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZShpbXBvcnROYW1lKSkge1xuICAgICAgLy8gSWYgdGhpcyBuYW1lIGlzIG9ubHkgdXNlZCBhcyBhIHR5cGUsIGVsaWRlIHRoZSB3aG9sZSBpbXBvcnQuXG4gICAgICBfZWxpZGVJbXBvcnRFcXVhbHMyLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5qZWN0Q3JlYXRlUmVxdWlyZUZvckltcG9ydFJlcXVpcmUpIHtcbiAgICAgIC8vIFdlJ3JlIHVzaW5nIHJlcXVpcmUgaW4gYW4gZW52aXJvbm1lbnQgKE5vZGUgRVNNKSB0aGF0IGRvZXNuJ3QgcHJvdmlkZVxuICAgICAgLy8gaXQgYXMgYSBnbG9iYWwsIHNvIGdlbmVyYXRlIGEgaGVscGVyIHRvIGltcG9ydCBpdC5cbiAgICAgIC8vIGltcG9ydCAtPiBjb25zdFxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgICAvLyBGb29cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgLy8gPVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAvLyByZXF1aXJlXG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4odGhpcy5oZWxwZXJNYW5hZ2VyLmdldEhlbHBlck5hbWUoXCJyZXF1aXJlXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHN3aXRjaCBgaW1wb3J0YCB0byBgY29uc3RgLlxuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgIHByb2Nlc3NJbXBvcnQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2ltcG9ydCwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICAvLyBEeW5hbWljIGltcG9ydHMgZG9uJ3QgbmVlZCB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMudG9rZW5zLnNuYXBzaG90KCk7XG4gICAgY29uc3QgYWxsSW1wb3J0c1JlbW92ZWQgPSB0aGlzLnJlbW92ZUltcG9ydFR5cGVCaW5kaW5ncygpO1xuICAgIGlmIChhbGxJbXBvcnRzUmVtb3ZlZCkge1xuICAgICAgdGhpcy50b2tlbnMucmVzdG9yZVRvU25hcHNob3Qoc25hcHNob3QpO1xuICAgICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBfcmVtb3ZlTWF5YmVJbXBvcnRBdHRyaWJ1dGVzLnJlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcy5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuc2VtaSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHR5cGUgYmluZGluZ3MgZnJvbSB0aGlzIGltcG9ydCwgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgaW1wb3J0IGludGFjdC5cbiAgICpcbiAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBpbXBvcnQgd2FzIE9OTFkgdHlwZXMsIGFuZCB0aHVzIGlzIGVsaWdpYmxlIGZvciByZW1vdmFsLiBUaGlzIHdpbGwgYmFpbCBvdXRcbiAgICogb2YgdGhlIHJlcGxhY2VtZW50IG9wZXJhdGlvbiwgc28gd2UgY2FuIHJldHVybiBlYXJseSBoZXJlLlxuICAgKi9cbiAgIHJlbW92ZUltcG9ydFR5cGVCaW5kaW5ncygpIHtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLl9pbXBvcnQpO1xuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fdHlwZSkgJiZcbiAgICAgICF0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSAmJlxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSlcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gXCJpbXBvcnQgdHlwZVwiIHN0YXRlbWVudCwgc28gZXhpdCBlYXJseS5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBiYXJlIGltcG9ydCwgc28gd2Ugc2hvdWxkIHByb2NlZWQgd2l0aCB0aGUgaW1wb3J0LlxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2tpcCB0aGUgXCJtb2R1bGVcIiB0b2tlbiBpbiBpbXBvcnQgcmVmbGVjdGlvbi5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX21vZHVsZSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDIsIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fZnJvbSlcbiAgICApIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgIH1cblxuICAgIGxldCBmb3VuZE5vblR5cGVJbXBvcnQgPSBmYWxzZTtcbiAgICBsZXQgZm91bmRBbnlOYW1lZEltcG9ydCA9IGZhbHNlO1xuICAgIGxldCBuZWVkc0NvbW1hID0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUgZGVmYXVsdCBpbXBvcnQuXG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZSh0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3VuZE5vblR5cGVJbXBvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAgICAgLy8gV2UncmUgaW4gYSBzdGF0ZW1lbnQgbGlrZTpcbiAgICAgICAgICAvLyBpbXBvcnQgQSwgKiBhcyBCIGZyb20gJy4vQSc7XG4gICAgICAgICAgLy8gb3JcbiAgICAgICAgICAvLyBpbXBvcnQgQSwge2Zvb30gZnJvbSAnLi9BJztcbiAgICAgICAgICAvLyB3aGVyZSB0aGUgYEFgIGlzIGJlaW5nIGtlcHQuIFRoZSBjb21tYSBzaG91bGQgYmUgcmVtb3ZlZCBpZiBhbiBvbmx5XG4gICAgICAgICAgLy8gaWYgdGhlIG5leHQgcGFydCBvZiB0aGUgaW1wb3J0IHN0YXRlbWVudCBpcyBlbGlkZWQsIGJ1dCB0aGF0J3MgaGFyZFxuICAgICAgICAgIC8vIHRvIGRldGVybWluZSBhdCB0aGlzIHBvaW50IGluIHRoZSBjb2RlLiBJbnN0ZWFkLCBhbHdheXMgcmVtb3ZlIGl0XG4gICAgICAgICAgLy8gYW5kIHNldCBhIGZsYWcgdG8gYWRkIGl0IGJhY2sgaWYgbmVjZXNzYXJ5LlxuICAgICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5zdGFyKSkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkQXV0b21hdGljYWxseUVsaWRlSW1wb3J0ZWROYW1lKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRSZWxhdGl2ZUluZGV4KDIpKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5lZWRzQ29tbWEpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3VuZE5vblR5cGVJbXBvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnN0YXIpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLm5hbWUpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLm5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpKSB7XG4gICAgICBpZiAobmVlZHNDb21tYSkge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgZm91bmRBbnlOYW1lZEltcG9ydCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3BlY2lmaWVySW5mby5pc1R5cGUgfHxcbiAgICAgICAgICB0aGlzLnNob3VsZEF1dG9tYXRpY2FsbHlFbGlkZUltcG9ydGVkTmFtZShzcGVjaWZpZXJJbmZvLnJpZ2h0TmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgc3BlY2lmaWVySW5mby5lbmRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3VuZE5vblR5cGVJbXBvcnQgPSB0cnVlO1xuICAgICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHNwZWNpZmllckluZm8uZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmtlZXBVbnVzZWRJbXBvcnRzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiAhZm91bmROb25UeXBlSW1wb3J0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zsb3dUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICAvLyBJbiBGbG93LCB1bmxpa2UgVFMsIGBpbXBvcnQge30gZnJvbSAnZm9vJztgIHByZXNlcnZlcyB0aGUgaW1wb3J0LlxuICAgICAgcmV0dXJuIGZvdW5kQW55TmFtZWRJbXBvcnQgJiYgIWZvdW5kTm9uVHlwZUltcG9ydDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICBzaG91bGRBdXRvbWF0aWNhbGx5RWxpZGVJbXBvcnRlZE5hbWUobmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVHlwZVNjcmlwdFRyYW5zZm9ybUVuYWJsZWQgJiZcbiAgICAgICF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmXG4gICAgICAhdGhpcy5ub25UeXBlSWRlbnRpZmllcnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxuXG4gICBwcm9jZXNzRXhwb3J0RGVmYXVsdCgpIHtcbiAgICBpZiAoXG4gICAgICBfc2hvdWxkRWxpZGVEZWZhdWx0RXhwb3J0Mi5kZWZhdWx0LmNhbGwodm9pZCAwLCBcbiAgICAgICAgdGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkLFxuICAgICAgICB0aGlzLmtlZXBVbnVzZWRJbXBvcnRzLFxuICAgICAgICB0aGlzLnRva2VucyxcbiAgICAgICAgdGhpcy5kZWNsYXJhdGlvbkluZm8sXG4gICAgICApXG4gICAgKSB7XG4gICAgICAvLyBJZiB0aGUgZXhwb3J0ZWQgdmFsdWUgaXMganVzdCBhbiBpZGVudGlmaWVyIGFuZCBzaG91bGQgYmUgZWxpZGVkIGJ5IFR5cGVTY3JpcHRcbiAgICAgIC8vIHJ1bGVzLCB0aGVuIHJlbW92ZSBpdCBlbnRpcmVseS4gSXQgd2lsbCBhbHdheXMgaGF2ZSB0aGUgZm9ybSBgZXhwb3J0IGRlZmF1bHQgZWAsXG4gICAgICAvLyB3aGVyZSBgZWAgaXMgYW4gaWRlbnRpZmllci5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhbHJlYWR5SGFzTmFtZSA9XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNChfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUuX2Z1bmN0aW9uLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8XG4gICAgICAvLyBleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvblxuICAgICAgKHRoaXMudG9rZW5zLm1hdGNoZXM1KF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLl9mdW5jdGlvbiwgX3R5cGVzLlRva2VuVHlwZS5uYW1lKSAmJlxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbEF0SW5kZXgoXG4gICAgICAgICAgdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAyLFxuICAgICAgICAgIF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMsXG4gICAgICAgICkpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNChfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzNShfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2RlZmF1bHQsIF90eXBlcy5Ub2tlblR5cGUuX2Fic3RyYWN0LCBfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcywgX3R5cGVzLlRva2VuVHlwZS5uYW1lKTtcblxuICAgIGlmICghYWxyZWFkeUhhc05hbWUgJiYgdGhpcy5yZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgcGxhaW4gXCJleHBvcnQgZGVmYXVsdCBFXCIgc3RhdGVtZW50IGFuZCB3ZSBuZWVkIHRvIGFzc2lnbiBFIHRvIGEgdmFyaWFibGUuXG4gICAgICAvLyBDaGFuZ2UgXCJleHBvcnQgZGVmYXVsdCBFXCIgdG8gXCJsZXQgX2RlZmF1bHQ7IGV4cG9ydCBkZWZhdWx0IF9kZWZhdWx0ID0gRVwiXG4gICAgICBjb25zdCBkZWZhdWx0VmFyTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9kZWZhdWx0XCIpO1xuICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGBsZXQgJHtkZWZhdWx0VmFyTmFtZX07IGV4cG9ydGApO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgJHtkZWZhdWx0VmFyTmFtZX0gPWApO1xuICAgICAgdGhpcy5yZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyLnNldEV4dHJhY3RlZERlZmF1bHRFeHBvcnROYW1lKGRlZmF1bHRWYXJOYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGEgc3RhdGVtZW50IHdpdGggb25lIG9mIHRoZXNlIGZvcm1zOlxuICAgKiBleHBvcnQge2EsIHR5cGUgYn07XG4gICAqIGV4cG9ydCB7YywgdHlwZSBkfSBmcm9tICdmb28nO1xuICAgKlxuICAgKiBJbiBib3RoIGNhc2VzLCBhbnkgZXhwbGljaXQgdHlwZSBleHBvcnRzIHNob3VsZCBiZSByZW1vdmVkLiBJbiB0aGUgZmlyc3RcbiAgICogY2FzZSwgd2UgYWxzbyBuZWVkIHRvIGhhbmRsZSBpbXBsaWNpdCBleHBvcnQgZWxpc2lvbiBmb3IgbmFtZXMgZGVjbGFyZWQgYXNcbiAgICogdHlwZXMuIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UgbXVzdCBOT1QgZG8gaW1wbGljaXQgbmFtZWQgZXhwb3J0IGVsaXNpb24sXG4gICAqIGJ1dCB3ZSBtdXN0IHJlbW92ZSB0aGUgcnVudGltZSBpbXBvcnQgaWYgYWxsIGV4cG9ydHMgYXJlIHR5cGUgZXhwb3J0cy5cbiAgICovXG4gICBwcm9jZXNzTmFtZWRFeHBvcnRzKCkge1xuICAgIGlmICghdGhpcy5pc1R5cGVTY3JpcHRUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCk7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuXG4gICAgY29uc3QgaXNSZUV4cG9ydCA9IF9pc0V4cG9ydEZyb20yLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICBsZXQgZm91bmROb25UeXBlRXhwb3J0ID0gZmFsc2U7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcy50b2tlbnMpO1xuICAgICAgaWYgKFxuICAgICAgICBzcGVjaWZpZXJJbmZvLmlzVHlwZSB8fFxuICAgICAgICAoIWlzUmVFeHBvcnQgJiYgdGhpcy5zaG91bGRFbGlkZUV4cG9ydGVkTmFtZShzcGVjaWZpZXJJbmZvLmxlZnROYW1lKSlcbiAgICAgICkge1xuICAgICAgICAvLyBUeXBlIGV4cG9ydCwgc28gcmVtb3ZlIGFsbCB0b2tlbnMsIGluY2x1ZGluZyBhbnkgY29tbWEuXG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHNwZWNpZmllckluZm8uZW5kSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vbi10eXBlIGV4cG9ydCwgc28gY29weSBhbGwgdG9rZW5zLCBpbmNsdWRpbmcgYW55IGNvbW1hLlxuICAgICAgICBmb3VuZE5vblR5cGVFeHBvcnQgPSB0cnVlO1xuICAgICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCBzcGVjaWZpZXJJbmZvLmVuZEluZGV4KSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpO1xuXG4gICAgaWYgKCF0aGlzLmtlZXBVbnVzZWRJbXBvcnRzICYmIGlzUmVFeHBvcnQgJiYgIWZvdW5kTm9uVHlwZUV4cG9ydCkge1xuICAgICAgLy8gVGhpcyBpcyBhIHR5cGUtb25seSByZS1leHBvcnQsIHNvIHNraXAgZXZhbHVhdGluZyB0aGUgb3RoZXIgbW9kdWxlLiBUZWNobmljYWxseSB0aGlzXG4gICAgICAvLyBsZWF2ZXMgdGhlIHN0YXRlbWVudCBhcyBgZXhwb3J0IHt9YCwgYnV0IHRoYXQncyBvayBzaW5jZSB0aGF0J3MgYSBuby1vcC5cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgX3JlbW92ZU1heWJlSW1wb3J0QXR0cmlidXRlcy5yZW1vdmVNYXliZUltcG9ydEF0dHJpYnV0ZXMuY2FsbCh2b2lkIDAsIHRoaXMudG9rZW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFU00gZWxpZGVzIGFsbCBpbXBvcnRzIHdpdGggdGhlIHJ1bGUgdGhhdCB3ZSBvbmx5IGVsaWRlIGlmIHdlIHNlZSB0aGF0IGl0J3NcbiAgICogYSB0eXBlIGFuZCBuZXZlciBzZWUgaXQgYXMgYSB2YWx1ZS4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBDSlMsIHdoaWNoXG4gICAqIGVsaWRlcyBpbXBvcnRzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5rbm93bi5cbiAgICovXG4gICBzaG91bGRFbGlkZUV4cG9ydGVkTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNUeXBlU2NyaXB0VHJhbnNmb3JtRW5hYmxlZCAmJlxuICAgICAgIXRoaXMua2VlcFVudXNlZEltcG9ydHMgJiZcbiAgICAgIHRoaXMuZGVjbGFyYXRpb25JbmZvLnR5cGVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpICYmXG4gICAgICAhdGhpcy5kZWNsYXJhdGlvbkluZm8udmFsdWVEZWNsYXJhdGlvbnMuaGFzKG5hbWUpXG4gICAgKTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBFU01JbXBvcnRUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfXZhciBfa2V5d29yZHMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL2tleXdvcmRzJyk7XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cbnZhciBfVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1RyYW5zZm9ybWVyJyk7IHZhciBfVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVHJhbnNmb3JtZXIpO1xuXG4gY2xhc3MgRmxvd1RyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkLFxuICApIHtcbiAgICBzdXBlcigpO3RoaXMucm9vdFRyYW5zZm9ybWVyID0gcm9vdFRyYW5zZm9ybWVyO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZCA9IGlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQ7O1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVBcnJvd1BhcmFtRW5kKCkgfHxcbiAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NQb3NzaWJsZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtcygpIHx8XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVUeXBlUmFuZ2UoKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLl9leHBvcnQsIF90eXBlcy5Ub2tlblR5cGUuX2VudW0pKSB7XG4gICAgICB0aGlzLnByb2Nlc3NOYW1lZEV4cG9ydEVudW0oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczMoX3R5cGVzLlRva2VuVHlwZS5fZXhwb3J0LCBfdHlwZXMuVG9rZW5UeXBlLl9kZWZhdWx0LCBfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRGVmYXVsdEV4cG9ydEVudW0oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGEgZGVjbGFyYXRpb24gbGlrZTpcbiAgICogZXhwb3J0IGVudW0gRSAuLi5cbiAgICpcbiAgICogV2l0aCB0aGlzIGltcG9ydHMgdHJhbnNmb3JtLCB0aGlzIGJlY29tZXM6XG4gICAqIGNvbnN0IEUgPSBbW2VudW1dXTsgZXhwb3J0cy5FID0gRTtcbiAgICpcbiAgICogb3RoZXJ3aXNlLCBpdCBiZWNvbWVzOlxuICAgKiBleHBvcnQgY29uc3QgRSA9IFtbZW51bV1dO1xuICAgKi9cbiAgcHJvY2Vzc05hbWVkRXhwb3J0RW51bSgpIHtcbiAgICBpZiAodGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICAvLyBleHBvcnRcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuICAgICAgY29uc3QgZW51bU5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0UmVsYXRpdmVJbmRleCgxKTtcbiAgICAgIHRoaXMucHJvY2Vzc0VudW0oKTtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnRzLiR7ZW51bU5hbWV9ID0gJHtlbnVtTmFtZX07YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBkZWNsYXJhdGlvbiBsaWtlOlxuICAgKiBleHBvcnQgZGVmYXVsdCBlbnVtIEVcbiAgICpcbiAgICogV2l0aCB0aGUgaW1wb3J0cyB0cmFuc2Zvcm0sIHRoaXMgYmVjb21lczpcbiAgICogY29uc3QgRSA9IFtbZW51bV1dOyBleHBvcnRzLmRlZmF1bHQgPSBFO1xuICAgKlxuICAgKiBvdGhlcndpc2UsIGl0IGJlY29tZXM6XG4gICAqIGNvbnN0IEUgPSBbW2VudW1dXTsgZXhwb3J0IGRlZmF1bHQgRTtcbiAgICovXG4gIHByb2Nlc3NEZWZhdWx0RXhwb3J0RW51bSgpIHtcbiAgICAvLyBleHBvcnRcbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAvLyBkZWZhdWx0XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRSZWxhdGl2ZUluZGV4KDEpO1xuICAgIHRoaXMucHJvY2Vzc0VudW0oKTtcbiAgICBpZiAodGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgZXhwb3J0cy5kZWZhdWx0ID0gJHtlbnVtTmFtZX07YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCBleHBvcnQgZGVmYXVsdCAke2VudW1OYW1lfTtgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNwaWxlIGZsb3cgZW51bXMgdG8gaW52b2tlIHRoZSBcImZsb3ctZW51bXMtcnVudGltZVwiIGxpYnJhcnkuXG4gICAqXG4gICAqIEN1cnJlbnRseSwgdGhlIHRyYW5zcGlsZWQgY29kZSBhbHdheXMgdXNlcyBgcmVxdWlyZShcImZsb3ctZW51bXMtcnVudGltZVwiKWAsXG4gICAqIGJ1dCBpZiBmdXR1cmUgZmxleGliaWxpdHkgaXMgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgYSBjb25maWcgb3B0aW9uIGZvclxuICAgKiB0aGlzIHN0cmluZyAoc2ltaWxhciB0byBjb25maWd1cmFibGUgSlNYKS4gRXZlbiB3aGVuIHRhcmdldGluZyBFU00sIHRoZVxuICAgKiBkZWZhdWx0IGJlaGF2aW9yIG9mIGJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZmxvdy1lbnVtcyBpcyB0byB1c2UgcmVxdWlyZVxuICAgKiByYXRoZXIgdGhhbiBpbmplY3RpbmcgYW4gaW1wb3J0LlxuICAgKlxuICAgKiBGbG93IGVudW1zIGFyZSBxdWl0ZSBhIGJpdCBzaW1wbGVyIHRoYW4gVFMgZW51bXMgYW5kIGhhdmUgc29tZSBjb252ZW5pZW50XG4gICAqIGNvbnN0cmFpbnRzOlxuICAgKiAtIEVsZW1lbnQgaW5pdGlhbGl6ZXJzIG11c3QgYmUgZWl0aGVyIGFsd2F5cyBwcmVzZW50IG9yIGFsd2F5cyBhYnNlbnQuIFRoYXRcbiAgICogICBtZWFucyB0aGF0IHdlIGNhbiB1c2UgZml4ZWQgbG9va2FoZWFkIG9uIHRoZSBmaXJzdCBlbGVtZW50IChpZiBhbnkpIGFuZFxuICAgKiAgIGFzc3VtZSB0aGF0IGFsbCBlbGVtZW50cyBhcmUgbGlrZSB0aGF0LlxuICAgKiAtIFRoZSByaWdodC1oYW5kIHNpZGUgb2YgYW4gZWxlbWVudCBpbml0aWFsaXplciBtdXN0IGJlIGEgbGl0ZXJhbCB2YWx1ZSxcbiAgICogICBub3QgYSBjb21wbGV4IGV4cHJlc3Npb24gYW5kIG5vdCByZWZlcmVuY2luZyBvdGhlciBlbGVtZW50cy4gVGhhdCBtZWFuc1xuICAgKiAgIHdlIGNhbiBzaW1wbHkgY29weSBhIHNpbmdsZSB0b2tlbi5cbiAgICpcbiAgICogRW51bXMgY2FuIGJlIGJyb2tlbiB1cCBpbnRvIHRocmVlIGJhc2ljIGNhc2VzOlxuICAgKlxuICAgKiBNaXJyb3JlZCBlbnVtczpcbiAgICogZW51bSBFIHtBLCBCfVxuICAgKiAgIC0+XG4gICAqIGNvbnN0IEUgPSByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpLk1pcnJvcmVkKFtcIkFcIiwgXCJCXCJdKTtcbiAgICpcbiAgICogSW5pdGlhbGl6ZXIgZW51bXM6XG4gICAqIGVudW0gRSB7QSA9IDEsIEIgPSAyfVxuICAgKiAgIC0+XG4gICAqIGNvbnN0IEUgPSByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpKHtBOiAxLCBCOiAyfSk7XG4gICAqXG4gICAqIFN5bWJvbCBlbnVtczpcbiAgICogZW51bSBFIG9mIHN5bWJvbCB7QSwgQn1cbiAgICogICAtPlxuICAgKiBjb25zdCBFID0gcmVxdWlyZShcImZsb3ctZW51bXMtcnVudGltZVwiKSh7QTogU3ltYm9sKFwiQVwiKSwgQjogU3ltYm9sKFwiQlwiKX0pO1xuICAgKlxuICAgKiBXZSBjYW4gc3RhdGljYWxseSBkZXRlY3Qgd2hpY2ggb2YgdGhlIHRocmVlIGNhc2VzIHRoaXMgaXMgYnkgbG9va2luZyBhdCB0aGVcbiAgICogXCJvZlwiIGRlY2xhcmF0aW9uIChpZiBhbnkpIGFuZCBzZWVpbmcgaWYgdGhlIGZpcnN0IGVsZW1lbnQgaGFzIGFuIGluaXRpYWxpemVyLlxuICAgKiBTaW5jZSB0aGUgb3RoZXIgdHJhbnNmb3JtIGRldGFpbHMgYXJlIHNvIHNpbWlsYXIgYmV0d2VlbiB0aGUgdGhyZWUgY2FzZXMsIHdlXG4gICAqIHVzZSBhIHNpbmdsZSBpbXBsZW1lbnRhdGlvbiBhbmQgdmFyeSB0aGUgdHJhbnNmb3JtIHdpdGhpbiBwcm9jZXNzRW51bUVsZW1lbnRcbiAgICogYmFzZWQgb24gY2FzZS5cbiAgICovXG4gIHByb2Nlc3NFbnVtKCkge1xuICAgIC8vIGVudW0gRSAtPiBjb25zdCBFXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKFwiY29uc3RcIik7XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5uYW1lKTtcblxuICAgIGxldCBpc1N5bWJvbEVudW0gPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlc0NvbnRleHR1YWwoX2tleXdvcmRzLkNvbnRleHR1YWxLZXl3b3JkLl9vZikpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICBpc1N5bWJvbEVudW0gPSB0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dHVhbChfa2V5d29yZHMuQ29udGV4dHVhbEtleXdvcmQuX3N5bWJvbCk7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICBjb25zdCBoYXNJbml0aWFsaXplcnMgPSB0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmVxKTtcbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKCcgPSByZXF1aXJlKFwiZmxvdy1lbnVtcy1ydW50aW1lXCIpJyk7XG5cbiAgICBjb25zdCBpc01pcnJvcmVkID0gIWlzU3ltYm9sRW51bSAmJiAhaGFzSW5pdGlhbGl6ZXJzO1xuICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoaXNNaXJyb3JlZCA/IFwiLk1pcnJvcmVkKFtcIiA6IFwiKHtcIik7XG5cbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgLy8gLi4uIGlzIGFsbG93ZWQgYXQgdGhlIGVuZCBhbmQgaGFzIG5vIHJ1bnRpbWUgYmVoYXZpb3IuXG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5lbGxpcHNpcykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NFbnVtRWxlbWVudChpc1N5bWJvbEVudW0sIGhhc0luaXRpYWxpemVycyk7XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGlzTWlycm9yZWQgPyBcIl0pO1wiIDogXCJ9KTtcIik7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVudW0gZWxlbWVudCwgcHJvZHVjaW5nIGVpdGhlciBhbiBhcnJheSBlbGVtZW50IG9yIGFuXG4gICAqIG9iamVjdCBlbGVtZW50IGJhc2VkIG9uIHdoYXQgdHlwZSBvZiBlbnVtIHRoaXMgaXMuXG4gICAqL1xuICBwcm9jZXNzRW51bUVsZW1lbnQoaXNTeW1ib2xFbnVtLCBoYXNJbml0aWFsaXplcnMpIHtcbiAgICBpZiAoaXNTeW1ib2xFbnVtKSB7XG4gICAgICAvLyBTeW1ib2wgZW51bXMgbmV2ZXIgaGF2ZSBpbml0aWFsaXplcnMgYW5kIGFyZSBleHBhbmRlZCB0byBvYmplY3QgZWxlbWVudHMuXG4gICAgICAvLyBBLCAtPiBBOiBTeW1ib2woXCJBXCIpLFxuICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGA6IFN5bWJvbChcIiR7ZWxlbWVudE5hbWV9XCIpYCk7XG4gICAgfSBlbHNlIGlmIChoYXNJbml0aWFsaXplcnMpIHtcbiAgICAgIC8vIEluaXRpYWxpemVycyBhcmUgZXhwYW5kZWQgdG8gb2JqZWN0IGVsZW1lbnRzLlxuICAgICAgLy8gQSA9IDEsIC0+IEE6IDEsXG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoXCI6XCIpO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVudW0gZWxlbWVudHMgd2l0aG91dCBpbml0aWFsaXplcnMgYmVjb21lIHN0cmluZyBsaXRlcmFsIGFycmF5IGVsZW1lbnRzLlxuICAgICAgLy8gQSwgLT4gXCJBXCIsXG4gICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oYFwiJHt0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZSgpfVwiYCk7XG4gICAgfVxuICB9XG59IGV4cG9ydHMuZGVmYXVsdCA9IEZsb3dUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfSBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbihvcHMpIHsgbGV0IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IGxldCB2YWx1ZSA9IG9wc1swXTsgbGV0IGkgPSAxOyB3aGlsZSAoaSA8IG9wcy5sZW5ndGgpIHsgY29uc3Qgb3AgPSBvcHNbaV07IGNvbnN0IGZuID0gb3BzW2kgKyAxXTsgaSArPSAyOyBpZiAoKG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgJiYgdmFsdWUgPT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGlmIChvcCA9PT0gJ2FjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbEFjY2VzcycpIHsgbGFzdEFjY2Vzc0xIUyA9IHZhbHVlOyB2YWx1ZSA9IGZuKHZhbHVlKTsgfSBlbHNlIGlmIChvcCA9PT0gJ2NhbGwnIHx8IG9wID09PSAnb3B0aW9uYWxDYWxsJykgeyB2YWx1ZSA9IGZuKCguLi5hcmdzKSA9PiB2YWx1ZS5jYWxsKGxhc3RBY2Nlc3NMSFMsIC4uLmFyZ3MpKTsgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgfSB9IHJldHVybiB2YWx1ZTsgfVxuXG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG5cbnZhciBfVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1RyYW5zZm9ybWVyJyk7IHZhciBfVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVHJhbnNmb3JtZXIpO1xuXG5jb25zdCBKRVNUX0dMT0JBTF9OQU1FID0gXCJqZXN0XCI7XG5jb25zdCBIT0lTVEVEX01FVEhPRFMgPSBbXCJtb2NrXCIsIFwidW5tb2NrXCIsIFwiZW5hYmxlQXV0b21vY2tcIiwgXCJkaXNhYmxlQXV0b21vY2tcIl07XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QsIHdoaWNoIGhvaXN0cyB1cCBzb21lIGplc3QgbWV0aG9kXG4gKiBjYWxscyBhYm92ZSB0aGUgaW1wb3J0cyB0byBhbGxvdyB0aGVtIHRvIG92ZXJyaWRlIG90aGVyIGltcG9ydHMuXG4gKlxuICogVG8gcHJlc2VydmUgbGluZSBudW1iZXJzLCByYXRoZXIgdGhhbiBkaXJlY3RseSBtb3ZpbmcgdGhlIGplc3QubW9jayBjb2RlLCB3ZVxuICogd3JhcCBlYWNoIGludm9jYXRpb24gaW4gYSBmdW5jdGlvbiBzdGF0ZW1lbnQgYW5kIHRoZW4gY2FsbCB0aGUgZnVuY3Rpb24gZnJvbVxuICogdGhlIHRvcCBvZiB0aGUgZmlsZS5cbiAqL1xuIGNsYXNzIEplc3RIb2lzdFRyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgICBfX2luaXQoKSB7dGhpcy5ob2lzdGVkRnVuY3Rpb25OYW1lcyA9IFtdfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgbmFtZU1hbmFnZXIsXG4gICAgIGltcG9ydFByb2Nlc3NvcixcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnJvb3RUcmFuc2Zvcm1lciA9IHJvb3RUcmFuc2Zvcm1lcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLm5hbWVNYW5hZ2VyID0gbmFtZU1hbmFnZXI7dGhpcy5pbXBvcnRQcm9jZXNzb3IgPSBpbXBvcnRQcm9jZXNzb3I7SmVzdEhvaXN0VHJhbnNmb3JtZXIucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuc2NvcGVEZXB0aCA9PT0gMCAmJlxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczQoX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmRvdCwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkgJiZcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCkgPT09IEpFU1RfR0xPQkFMX05BTUVcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IFRoaXMgb25seSB3b3JrcyBpZiBpbXBvcnRzIHRyYW5zZm9ybSBpcyBhY3RpdmUsIHdoaWNoIGl0IHdpbGwgYmUgZm9yIGplc3QuXG4gICAgICAvLyAgICAgICBCdXQgaWYgamVzdCBhZGRzIG1vZHVsZSBzdXBwb3J0IGFuZCB3ZSBubyBsb25nZXIgbmVlZCB0aGUgaW1wb3J0IHRyYW5zZm9ybSwgdGhpcyBuZWVkcyBmaXhpbmcuXG4gICAgICBpZiAoX29wdGlvbmFsQ2hhaW4oW3RoaXMsICdhY2Nlc3MnLCBfID0+IF8uaW1wb3J0UHJvY2Vzc29yLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5nZXRHbG9iYWxOYW1lcywgJ2NhbGwnLCBfMyA9PiBfMygpLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNCA9PiBfNC5oYXMsICdjYWxsJywgXzUgPT4gXzUoSkVTVF9HTE9CQUxfTkFNRSldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5leHRyYWN0SG9pc3RlZENhbGxzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0SG9pc3RlZENvZGUoKSB7XG4gICAgaWYgKHRoaXMuaG9pc3RlZEZ1bmN0aW9uTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gVGhpcyB3aWxsIGJlIHBsYWNlZCBiZWZvcmUgbW9kdWxlIGludGVyb3AgY29kZSwgYnV0IHRoYXQncyBmaW5lIHNpbmNlXG4gICAgICAvLyBpbXBvcnRzIGFyZW4ndCBhbGxvd2VkIGluIG1vZHVsZSBtb2NrIGZhY3Rvcmllcy5cbiAgICAgIHJldHVybiB0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzLm1hcCgobmFtZSkgPT4gYCR7bmFtZX0oKTtgKS5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbnkgbWV0aG9kcyBjYWxscyBvbiB0aGUgamVzdC1vYmplY3QgdGhhdCBzaG91bGQgYmUgaG9pc3RlZC5cbiAgICpcbiAgICogQWNjb3JkaW5nIHRvIHRoZSBqZXN0IGRvY3MsIGh0dHBzOi8vamVzdGpzLmlvL2RvY3MvZW4vamVzdC1vYmplY3QjamVzdG1vY2ttb2R1bGVuYW1lLWZhY3Rvcnktb3B0aW9ucyxcbiAgICogbW9jaywgdW5tb2NrLCBlbmFibGVBdXRvbW9jaywgZGlzYWJsZUF1dG9tb2NrLCBhcmUgdGhlIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgaG9pc3RlZC5cbiAgICpcbiAgICogV2UgZG8gbm90IGFwcGx5IHRoZSBzYW1lIGNoZWNrcyBvZiB0aGUgYXJndW1lbnRzIGFzIGJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IGRvZXMuXG4gICAqL1xuICAgZXh0cmFjdEhvaXN0ZWRDYWxscygpIHtcbiAgICAvLyBXZSdyZSBoYW5kbGluZyBhIGNoYWluIG9mIGNhbGxzIHdoZXJlIGBqZXN0YCBtYXkgb3IgbWF5IG5vdCBuZWVkIHRvIGJlIGluc2VydGVkIGZvciBlYWNoIGNhbGxcbiAgICAvLyBpbiB0aGUgY2hhaW4sIHNvIHJlbW92ZSB0aGUgaW5pdGlhbCBgamVzdGAgdG8gbWFrZSB0aGUgbG9vcCBpbXBsZW1lbnRhdGlvbiBjbGVhbmVyLlxuICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgLy8gVHJhY2sgc29tZSBzdGF0ZSBzbyB0aGF0IG11bHRpcGxlIG5vbi1ob2lzdGVkIGNoYWluZWQgY2FsbHMgaW4gYSByb3cga2VlcCB0aGVpciBjaGFpbmluZ1xuICAgIC8vIHN5bnRheC5cbiAgICBsZXQgZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCA9IGZhbHNlO1xuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGFpbmVkIGNhbGxzIG9uIHRoZSBqZXN0IG9iamVjdC5cbiAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczMoX3R5cGVzLlRva2VuVHlwZS5kb3QsIF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMSk7XG4gICAgICBjb25zdCBzaG91bGRIb2lzdCA9IEhPSVNURURfTUVUSE9EUy5pbmNsdWRlcyhtZXRob2ROYW1lKTtcbiAgICAgIGlmIChzaG91bGRIb2lzdCkge1xuICAgICAgICAvLyBXZSd2ZSBtYXRjaGVkIGUuZy4gYC5tb2NrKC4uLilgIG9yIHNpbWlsYXIgY2FsbC5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgaW5pdGlhbCBgLmAgd2l0aCBgZnVuY3Rpb24gX19qZXN0SG9pc3QoKXtqZXN0LmBcbiAgICAgICAgY29uc3QgaG9pc3RlZEZ1bmN0aW9uTmFtZSA9IHRoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcIl9famVzdEhvaXN0XCIpO1xuICAgICAgICB0aGlzLmhvaXN0ZWRGdW5jdGlvbk5hbWVzLnB1c2goaG9pc3RlZEZ1bmN0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihgZnVuY3Rpb24gJHtob2lzdGVkRnVuY3Rpb25OYW1lfSgpeyR7SkVTVF9HTE9CQUxfTkFNRX0uYCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCI7fVwiKTtcbiAgICAgICAgZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5vbi1ob2lzdGVkIG1ldGhvZCwgc28ganVzdCB0cmFuc2Zvcm0gdGhlIGNvZGUgYXMgdXN1YWwuXG4gICAgICAgIGlmIChmb2xsb3dzTm9uSG9pc3RlZEplc3RDYWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGhvaXN0IHRoZSBwcmV2aW91cyBjYWxsLCB3ZSBjYW4gbGVhdmUgdGhlIGNvZGUgYXMtaXMgdG8gY2hhaW4gb2ZmIG9mIHRoZVxuICAgICAgICAgIC8vIHByZXZpb3VzIG1ldGhvZCBjYWxsLiBJdCdzIGltcG9ydGFudCB0byBwcmVzZXJ2ZSB0aGUgY29kZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vd1xuICAgICAgICAgIC8vIGZvciBzdXJlIHRoYXQgdGhlIG1ldGhvZCBhY3R1YWxseSByZXR1cm5lZCB0aGUgamVzdCBvYmplY3QgZm9yIGNoYWluaW5nLlxuICAgICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHdlIGhvaXN0ZWQgdGhlIHByZXZpb3VzIGNhbGwsIHdlIGtub3cgaXQgcmV0dXJucyB0aGUgamVzdCBvYmplY3QgYmFjaywgc28gd2UgaW5zZXJ0XG4gICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgYGplc3RgIHRvIGNvbnRpbnVlIHRoZSBjaGFpbi5cbiAgICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oYCR7SkVTVF9HTE9CQUxfTkFNRX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKTtcbiAgICAgICAgZm9sbG93c05vbkhvaXN0ZWRKZXN0Q2FsbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gSmVzdEhvaXN0VHJhbnNmb3JtZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH12YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuIGNsYXNzIE51bWVyaWNTZXBhcmF0b3JUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gIGNvbnN0cnVjdG9yKCB0b2tlbnMpIHtcbiAgICBzdXBlcigpO3RoaXMudG9rZW5zID0gdG9rZW5zOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUubnVtKSkge1xuICAgICAgY29uc3QgY29kZSA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbkNvZGUoKTtcbiAgICAgIGlmIChjb2RlLmluY2x1ZGVzKFwiX1wiKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW4oY29kZS5yZXBsYWNlKC9fL2csIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBOdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzJyk7XG5cbnZhciBfVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1RyYW5zZm9ybWVyJyk7IHZhciBfVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVHJhbnNmb3JtZXIpO1xuXG4gY2xhc3MgT3B0aW9uYWxDYXRjaEJpbmRpbmdUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gIGNvbnN0cnVjdG9yKCB0b2tlbnMsICBuYW1lTWFuYWdlcikge1xuICAgIHN1cGVyKCk7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5uYW1lTWFuYWdlciA9IG5hbWVNYW5hZ2VyOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2NhdGNoLCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICgke3RoaXMubmFtZU1hbmFnZXIuY2xhaW1GcmVlTmFtZShcImVcIil9KWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBPcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG52YXIgX3R5cGVzID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplci90eXBlcycpO1xuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1lciBzdXBwb3J0aW5nIHRoZSBvcHRpb25hbCBjaGFpbmluZyBhbmQgbnVsbGlzaCBjb2FsZXNjaW5nIG9wZXJhdG9ycy5cbiAqXG4gKiBUZWNoIHBsYW4gaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGFuZ3BpZXJjZS9zdWNyYXNlL3dpa2kvU3VjcmFzZS1PcHRpb25hbC1DaGFpbmluZy1hbmQtTnVsbGlzaC1Db2FsZXNjaW5nLVRlY2huaWNhbC1QbGFuXG4gKlxuICogVGhlIHByZWZpeCBhbmQgc3VmZml4IGNvZGUgc25pcHBldHMgYXJlIGhhbmRsZWQgYnkgVG9rZW5Qcm9jZXNzb3IsIGFuZCB0aGlzIHRyYW5zZm9ybWVyIGhhbmRsZXNcbiAqIHRoZSBvcGVyYXRvcnMgdGhlbXNlbHZlcy5cbiAqL1xuIGNsYXNzIE9wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIgZXh0ZW5kcyBfVHJhbnNmb3JtZXIyLmRlZmF1bHQge1xuICBjb25zdHJ1Y3RvciggdG9rZW5zLCAgbmFtZU1hbmFnZXIpIHtcbiAgICBzdXBlcigpO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMubmFtZU1hbmFnZXIgPSBuYW1lTWFuYWdlcjs7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLm51bGxpc2hDb2FsZXNjaW5nKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy5jdXJyZW50VG9rZW4oKTtcbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbdG9rZW4ubnVsbGlzaFN0YXJ0SW5kZXhdLmlzQXN5bmNPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShcIiwgYXN5bmMgKCkgPT4gKFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoXCIsICgpID0+IChcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2RlbGV0ZSkpIHtcbiAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMudG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KDEpO1xuICAgICAgaWYgKG5leHRUb2tlbi5pc09wdGlvbmFsQ2hhaW5TdGFydCkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCk7XG4gICAgY29uc3QgY2hhaW5TdGFydCA9IHRva2VuLnN1YnNjcmlwdFN0YXJ0SW5kZXg7XG4gICAgaWYgKFxuICAgICAgY2hhaW5TdGFydCAhPSBudWxsICYmXG4gICAgICB0aGlzLnRva2Vucy50b2tlbnNbY2hhaW5TdGFydF0uaXNPcHRpb25hbENoYWluU3RhcnQgJiZcbiAgICAgIC8vIFN1cGVyIHN1YnNjcmlwdHMgY2FuJ3QgYmUgb3B0aW9uYWwgKHNpbmNlIHN1cGVyIGlzIG5ldmVyIG51bGwvdW5kZWZpbmVkKSwgYW5kIHRoZSBzeW50YXhcbiAgICAgIC8vIHJlbGllcyBvbiB0aGUgc3Vic2NyaXB0IGJlaW5nIGludGFjdCwgc28gbGVhdmUgdGhpcyB0b2tlbiBhbG9uZS5cbiAgICAgIHRoaXMudG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KC0xKS50eXBlICE9PSBfdHlwZXMuVG9rZW5UeXBlLl9zdXBlclxuICAgICkge1xuICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfXCIpO1xuICAgICAgbGV0IGFycm93U3RhcnRTbmlwcGV0O1xuICAgICAgaWYgKFxuICAgICAgICBjaGFpblN0YXJ0ID4gMCAmJlxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgoY2hhaW5TdGFydCAtIDEsIF90eXBlcy5Ub2tlblR5cGUuX2RlbGV0ZSkgJiZcbiAgICAgICAgdGhpcy5pc0xhc3RTdWJzY3JpcHRJbkNoYWluKClcbiAgICAgICkge1xuICAgICAgICAvLyBEZWxldGUgb3BlcmF0aW9ucyBhcmUgc3BlY2lhbDogd2UgYWxyZWFkeSByZW1vdmVkIHRoZSBkZWxldGUga2V5d29yZCwgYW5kIHRvIHN0aWxsXG4gICAgICAgIC8vIHBlcmZvcm0gYSBkZWxldGUsIHdlIG5lZWQgdG8gaW5zZXJ0IGEgZGVsZXRlIGluIHRoZSB2ZXJ5IGxhc3QgcGFydCBvZiB0aGUgY2hhaW4sIHdoaWNoXG4gICAgICAgIC8vIGluIGNvcnJlY3QgY29kZSB3aWxsIGFsd2F5cyBiZSBhIHByb3BlcnR5IGFjY2Vzcy5cbiAgICAgICAgYXJyb3dTdGFydFNuaXBwZXQgPSBgJHtwYXJhbX0gPT4gZGVsZXRlICR7cGFyYW19YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycm93U3RhcnRTbmlwcGV0ID0gYCR7cGFyYW19ID0+ICR7cGFyYW19YDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy50b2tlbnNbY2hhaW5TdGFydF0uaXNBc3luY09wZXJhdGlvbikge1xuICAgICAgICBhcnJvd1N0YXJ0U25pcHBldCA9IGBhc3luYyAke2Fycm93U3RhcnRTbmlwcGV0fWA7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb25Eb3QsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uRG90LCBfdHlwZXMuVG9rZW5UeXBlLmxlc3NUaGFuKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmp1c3RTa2lwcGVkU3VwZXIoKSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCIuYmluZCh0aGlzKVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdvcHRpb25hbENhbGwnLCAke2Fycm93U3RhcnRTbmlwcGV0fWApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMihfdHlwZXMuVG9rZW5UeXBlLnF1ZXN0aW9uRG90LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNrZXRMKSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdvcHRpb25hbEFjY2VzcycsICR7YXJyb3dTdGFydFNuaXBwZXR9YCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUucXVlc3Rpb25Eb3QpKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoYCwgJ29wdGlvbmFsQWNjZXNzJywgJHthcnJvd1N0YXJ0U25pcHBldH0uYCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuZG90KSkge1xuICAgICAgICB0aGlzLnRva2Vucy5yZXBsYWNlVG9rZW5UcmltbWluZ0xlZnRXaGl0ZXNwYWNlKGAsICdhY2Nlc3MnLCAke2Fycm93U3RhcnRTbmlwcGV0fS5gKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShgLCAnYWNjZXNzJywgJHthcnJvd1N0YXJ0U25pcHBldH1bYCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgICAgICBpZiAodGhpcy5qdXN0U2tpcHBlZFN1cGVyKCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFwiLmJpbmQodGhpcylcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuVHJpbW1pbmdMZWZ0V2hpdGVzcGFjZShgLCAnY2FsbCcsICR7YXJyb3dTdGFydFNuaXBwZXR9KGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBzdWJzY3JpcHQgb3BlcmF0b3IgaW4gb3B0aW9uYWwgY2hhaW4uXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgdGhlIGxhc3Qgb2YgaXRzIGNoYWluLCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBpdCdzIGVsaWdpYmxlXG4gICAqIHRvIGhhdmUgYSBkZWxldGUgb3AgaW5zZXJ0ZWQuXG4gICAqXG4gICAqIFdlIGNhbiBkbyB0aGlzIGJ5IHdhbGtpbmcgZm9yd2FyZCB1bnRpbCB3ZSBkZXRlcm1pbmUgb25lIHdheSBvciBhbm90aGVyLiBFYWNoXG4gICAqIGlzT3B0aW9uYWxDaGFpblN0YXJ0IHRva2VuIG11c3QgYmUgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgaXNPcHRpb25hbENoYWluRW5kIHRva2VuIGFmdGVyIGl0IGluXG4gICAqIGEgbmVzdGluZyB3YXksIHNvIHdlIGNhbiB0cmFjayBkZXB0aCBhbmQgd2FsayB0byB0aGUgZW5kIG9mIHRoZSBjaGFpbiAodGhlIHBvaW50IHdoZXJlIHRoZVxuICAgKiBkZXB0aCBnb2VzIG5lZ2F0aXZlKSBhbmQgc2VlIGlmIGFueSBvdGhlciBzdWJzY3JpcHQgdG9rZW4gaXMgYWZ0ZXIgdXMgaW4gdGhlIGNoYWluLlxuICAgKi9cbiAgaXNMYXN0U3Vic2NyaXB0SW5DaGFpbigpIHtcbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDE7IDsgaSsrKSB7XG4gICAgICBpZiAoaSA+PSB0aGlzLnRva2Vucy50b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgY29kZSB3aGlsZSBmaW5kaW5nIHRoZSBlbmQgb2YgdGhlIGFjY2VzcyBjaGFpbi5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b2tlbnMudG9rZW5zW2ldLmlzT3B0aW9uYWxDaGFpblN0YXJ0KSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1tpXS5pc09wdGlvbmFsQ2hhaW5FbmQpIHtcbiAgICAgICAgZGVwdGgtLTtcbiAgICAgIH1cbiAgICAgIGlmIChkZXB0aCA8IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgc3Vic2NyaXB0IHRva2VuIGlzIGEgbGF0ZXIgb25lIGluIHRoZSBzYW1lIGNoYWluLlxuICAgICAgaWYgKGRlcHRoID09PSAwICYmIHRoaXMudG9rZW5zLnRva2Vuc1tpXS5zdWJzY3JpcHRTdGFydEluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgd2UgYXJlIHRoZSBvcGVuLXBhcmVuIGluIGFuIGV4cHJlc3Npb24gbGlrZSBzdXBlci5hKCk/LmIuXG4gICAqXG4gICAqIFdlIGNhbiBkbyB0aGlzIGJ5IHdhbGtpbmcgYmFja3dhcmQgdG8gZmluZCB0aGUgcHJldmlvdXMgc3Vic2NyaXB0LiBJZiB0aGF0IHN1YnNjcmlwdCB3YXNcbiAgICogcHJlY2VkZWQgYnkgYSBzdXBlciwgdGhlbiB3ZSBtdXN0IGJlIHRoZSBzdWJzY3JpcHQgYWZ0ZXIgaXQsIHNvIGlmIHRoaXMgaXMgYSBjYWxsIGV4cHJlc3Npb24sXG4gICAqIHdlJ2xsIG5lZWQgdG8gYXR0YWNoIHRoZSByaWdodCBjb250ZXh0LlxuICAgKi9cbiAganVzdFNraXBwZWRTdXBlcigpIHtcbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIGxldCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIC0gMTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJSZWFjaGVkIHRoZSBzdGFydCBvZiB0aGUgY29kZSB3aGlsZSBmaW5kaW5nIHRoZSBzdGFydCBvZiB0aGUgYWNjZXNzIGNoYWluLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLnRva2Vuc1tpbmRleF0uaXNPcHRpb25hbENoYWluU3RhcnQpIHtcbiAgICAgICAgZGVwdGgtLTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMudG9rZW5zW2luZGV4XS5pc09wdGlvbmFsQ2hhaW5FbmQpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICAgIGlmIChkZXB0aCA8IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHN1YnNjcmlwdCB0b2tlbiBpcyBhIGxhdGVyIG9uZSBpbiB0aGUgc2FtZSBjaGFpbi5cbiAgICAgIGlmIChkZXB0aCA9PT0gMCAmJiB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdLnN1YnNjcmlwdFN0YXJ0SW5kZXggIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMudG9rZW5zW2luZGV4IC0gMV0udHlwZSA9PT0gX3R5cGVzLlRva2VuVHlwZS5fc3VwZXI7XG4gICAgICB9XG4gICAgICBpbmRleC0tO1xuICAgIH1cbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBPcHRpb25hbENoYWluaW5nTnVsbGlzaFRyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBfdG9rZW5pemVyID0gcmVxdWlyZSgnLi4vcGFyc2VyL3Rva2VuaXplcicpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWRpc3BsYXktbmFtZSwgd2hpY2ggYWRkcyBhXG4gKiBkaXNwbGF5IG5hbWUgdG8gdXNhZ2VzIG9mIFJlYWN0LmNyZWF0ZUNsYXNzIGFuZCBjcmVhdGVSZWFjdENsYXNzLlxuICovXG4gY2xhc3MgUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgIHJvb3RUcmFuc2Zvcm1lcixcbiAgICAgdG9rZW5zLFxuICAgICBpbXBvcnRQcm9jZXNzb3IsXG4gICAgIG9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKCk7dGhpcy5yb290VHJhbnNmb3JtZXIgPSByb290VHJhbnNmb3JtZXI7dGhpcy50b2tlbnMgPSB0b2tlbnM7dGhpcy5pbXBvcnRQcm9jZXNzb3IgPSBpbXBvcnRQcm9jZXNzb3I7dGhpcy5vcHRpb25zID0gb3B0aW9uczs7XG4gIH1cblxuICBwcm9jZXNzKCkge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKTtcbiAgICBpZiAodGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWUoKSA9PT0gXCJjcmVhdGVSZWFjdENsYXNzXCIpIHtcbiAgICAgIGNvbnN0IG5ld05hbWUgPVxuICAgICAgICB0aGlzLmltcG9ydFByb2Nlc3NvciAmJiB0aGlzLmltcG9ydFByb2Nlc3Nvci5nZXRJZGVudGlmaWVyUmVwbGFjZW1lbnQoXCJjcmVhdGVSZWFjdENsYXNzXCIpO1xuICAgICAgaWYgKG5ld05hbWUpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKGAoMCwgJHtuZXdOYW1lfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy50cnlQcm9jZXNzQ3JlYXRlQ2xhc3NDYWxsKHN0YXJ0SW5kZXgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUubmFtZSwgX3R5cGVzLlRva2VuVHlwZS5kb3QsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkgJiZcbiAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCkgPT09IFwiUmVhY3RcIiAmJlxuICAgICAgdGhpcy50b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpICsgMikgPT09IFwiY3JlYXRlQ2xhc3NcIlxuICAgICkge1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHRoaXMuaW1wb3J0UHJvY2Vzc29yXG4gICAgICAgID8gdGhpcy5pbXBvcnRQcm9jZXNzb3IuZ2V0SWRlbnRpZmllclJlcGxhY2VtZW50KFwiUmVhY3RcIikgfHwgXCJSZWFjdFwiXG4gICAgICAgIDogXCJSZWFjdFwiO1xuICAgICAgaWYgKG5ld05hbWUpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVwbGFjZVRva2VuKG5ld05hbWUpO1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy50cnlQcm9jZXNzQ3JlYXRlQ2xhc3NDYWxsKHN0YXJ0SW5kZXgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSB0b2tlbiBwb3NpdGlvbiBhdCB0aGUgb3Blbi1wYXJlbi5cbiAgICovXG4gICB0cnlQcm9jZXNzQ3JlYXRlQ2xhc3NDYWxsKHN0YXJ0SW5kZXgpIHtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuZmluZERpc3BsYXlOYW1lKHN0YXJ0SW5kZXgpO1xuICAgIGlmICghZGlzcGxheU5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc05lZWRzRGlzcGxheU5hbWUoKSkge1xuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwpO1xuICAgICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgZGlzcGxheU5hbWU6ICcke2Rpc3BsYXlOYW1lfScsYCk7XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUik7XG4gICAgfVxuICB9XG5cbiAgIGZpbmREaXNwbGF5TmFtZShzdGFydEluZGV4KSB7XG4gICAgaWYgKHN0YXJ0SW5kZXggPCAyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChzdGFydEluZGV4IC0gMiwgX3R5cGVzLlRva2VuVHlwZS5uYW1lLCBfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgLy8gVGhpcyBpcyBhbiBhc3NpZ25tZW50IChvciBkZWNsYXJhdGlvbikgYW5kIHRoZSBMSFMgaXMgZWl0aGVyIGFuIGlkZW50aWZpZXIgb3IgYSBtZW1iZXJcbiAgICAgIC8vIGV4cHJlc3Npb24gZW5kaW5nIGluIGFuIGlkZW50aWZpZXIsIHNvIHVzZSB0aGF0IGlkZW50aWZpZXIgbmFtZS5cbiAgICAgIHJldHVybiB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUF0SW5kZXgoc3RhcnRJbmRleCAtIDIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBzdGFydEluZGV4ID49IDIgJiZcbiAgICAgIHRoaXMudG9rZW5zLnRva2Vuc1tzdGFydEluZGV4IC0gMl0uaWRlbnRpZmllclJvbGUgPT09IF90b2tlbml6ZXIuSWRlbnRpZmllclJvbGUuT2JqZWN0S2V5XG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIG9iamVjdCBsaXRlcmFsIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChzdGFydEluZGV4IC0gMik7XG4gICAgfVxuICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMkF0SW5kZXgoc3RhcnRJbmRleCAtIDIsIF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZGVmYXVsdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERpc3BsYXlOYW1lRnJvbUZpbGVuYW1lKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgIGdldERpc3BsYXlOYW1lRnJvbUZpbGVuYW1lKCkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5vcHRpb25zLmZpbGVQYXRoIHx8IFwidW5rbm93blwiO1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IGZpbGVQYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgZG90SW5kZXggPSBmaWxlbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgY29uc3QgYmFzZUZpbGVuYW1lID0gZG90SW5kZXggPT09IC0xID8gZmlsZW5hbWUgOiBmaWxlbmFtZS5zbGljZSgwLCBkb3RJbmRleCk7XG4gICAgaWYgKGJhc2VGaWxlbmFtZSA9PT0gXCJpbmRleFwiICYmIHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMl0pIHtcbiAgICAgIHJldHVybiBwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDJdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmFzZUZpbGVuYW1lO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBvbmx5IHdhbnQgdG8gYWRkIGEgZGlzcGxheSBuYW1lIHdoZW4gdGhpcyBpcyBhIGZ1bmN0aW9uIGNhbGwgY29udGFpbmluZ1xuICAgKiBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIGFuIG9iamVjdCBsaXRlcmFsIHdpdGhvdXQgYGRpc3BsYXlOYW1lYCBhcyBhblxuICAgKiBleGlzdGluZyBrZXkuXG4gICAqL1xuICAgY2xhc3NOZWVkc0Rpc3BsYXlOYW1lKCkge1xuICAgIGxldCBpbmRleCA9IHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpO1xuICAgIGlmICghdGhpcy50b2tlbnMubWF0Y2hlczIoX3R5cGVzLlRva2VuVHlwZS5wYXJlbkwsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUaGUgYmxvY2sgc3RhcnRzIG9uIHRoZSB7LCBhbmQgd2UgZXhwZWN0IGFueSBkaXNwbGF5TmFtZSBrZXkgdG8gYmUgaW5cbiAgICAvLyB0aGF0IGNvbnRleHQuIFdlIG5lZWQgdG8gaWdub3JlIG90aGVyIG90aGVyIGNvbnRleHRzIHRvIGF2b2lkIG1hdGNoaW5nXG4gICAgLy8gbmVzdGVkIGRpc3BsYXlOYW1lIGtleXMuXG4gICAgY29uc3Qgb2JqZWN0U3RhcnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBjb25zdCBvYmplY3RDb250ZXh0SWQgPSB0aGlzLnRva2Vucy50b2tlbnNbb2JqZWN0U3RhcnRJbmRleF0uY29udGV4dElkO1xuICAgIGlmIChvYmplY3RDb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9uLW51bGwgY29udGV4dCBJRCBvbiBvYmplY3Qgb3Blbi1icmFjZS5cIik7XG4gICAgfVxuXG4gICAgZm9yICg7IGluZGV4IDwgdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdO1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSICYmIHRva2VuLmNvbnRleHRJZCA9PT0gb2JqZWN0Q29udGV4dElkKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleChpbmRleCkgPT09IFwiZGlzcGxheU5hbWVcIiAmJlxuICAgICAgICB0aGlzLnRva2Vucy50b2tlbnNbaW5kZXhdLmlkZW50aWZpZXJSb2xlID09PSBfdG9rZW5pemVyLklkZW50aWZpZXJSb2xlLk9iamVjdEtleSAmJlxuICAgICAgICB0b2tlbi5jb250ZXh0SWQgPT09IG9iamVjdENvbnRleHRJZFxuICAgICAgKSB7XG4gICAgICAgIC8vIFdlIGZvdW5kIGEgZGlzcGxheU5hbWUga2V5LCBzbyBiYWlsIG91dC5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmRleCA9PT0gdGhpcy50b2tlbnMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgd2hlbiBwcm9jZXNzaW5nIFJlYWN0IGNsYXNzLlwiKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlIGtub3cgd2UgaGF2ZSBjcmVhdGVDbGFzcyB3aXRoIGFuIG9iamVjdCB3aXRoIG5vXG4gICAgLy8gZGlzcGxheSBuYW1lLCBzbyB3ZSB3YW50IHRvIHByb2NlZWQgYXMgbG9uZyBhcyB0aGF0IHdhcyB0aGUgb25seSBhcmd1bWVudC5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuUikgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSwgX3R5cGVzLlRva2VuVHlwZS5wYXJlblIpXG4gICAgKTtcbiAgfVxufSBleHBvcnRzLmRlZmF1bHQgPSBSZWFjdERpc3BsYXlOYW1lVHJhbnNmb3JtZXI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7dmFsdWU6IHRydWV9KTsgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH12YXIgX3Rva2VuaXplciA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXInKTtcblxudmFyIF9UcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vVHJhbnNmb3JtZXInKTsgdmFyIF9UcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9UcmFuc2Zvcm1lcik7XG5cbiBjbGFzcyBSZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyIGV4dGVuZHMgX1RyYW5zZm9ybWVyMi5kZWZhdWx0IHtcbiAgIF9faW5pdCgpIHt0aGlzLmV4dHJhY3RlZERlZmF1bHRFeHBvcnROYW1lID0gbnVsbH1cblxuICBjb25zdHJ1Y3RvciggdG9rZW5zLCAgZmlsZVBhdGgpIHtcbiAgICBzdXBlcigpO3RoaXMudG9rZW5zID0gdG9rZW5zO3RoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtSZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTs7XG4gIH1cblxuICBzZXRFeHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZShleHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZSkge1xuICAgIHRoaXMuZXh0cmFjdGVkRGVmYXVsdEV4cG9ydE5hbWUgPSBleHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZTtcbiAgfVxuXG4gIGdldFByZWZpeENvZGUoKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbnRlck1vZHVsZSA9IHJlcXVpcmUoJ3JlYWN0LWhvdC1sb2FkZXInKS5lbnRlck1vZHVsZTtcbiAgICAgICAgZW50ZXJNb2R1bGUgJiYgZW50ZXJNb2R1bGUobW9kdWxlKTtcbiAgICAgIH0pKCk7YFxuICAgICAgLnJlcGxhY2UoL1xccysvZywgXCIgXCIpXG4gICAgICAudHJpbSgpO1xuICB9XG5cbiAgZ2V0U3VmZml4Q29kZSgpIHtcbiAgICBjb25zdCB0b3BMZXZlbE5hbWVzID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMudG9rZW5zKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0b2tlbi5pc1R5cGUgJiZcbiAgICAgICAgX3Rva2VuaXplci5pc1RvcExldmVsRGVjbGFyYXRpb24uY2FsbCh2b2lkIDAsIHRva2VuKSAmJlxuICAgICAgICB0b2tlbi5pZGVudGlmaWVyUm9sZSAhPT0gX3Rva2VuaXplci5JZGVudGlmaWVyUm9sZS5JbXBvcnREZWNsYXJhdGlvblxuICAgICAgKSB7XG4gICAgICAgIHRvcExldmVsTmFtZXMuYWRkKHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lRm9yVG9rZW4odG9rZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmFtZXNUb1JlZ2lzdGVyID0gQXJyYXkuZnJvbSh0b3BMZXZlbE5hbWVzKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICB2YXJpYWJsZU5hbWU6IG5hbWUsXG4gICAgICB1bmlxdWVMb2NhbE5hbWU6IG5hbWUsXG4gICAgfSkpO1xuICAgIGlmICh0aGlzLmV4dHJhY3RlZERlZmF1bHRFeHBvcnROYW1lKSB7XG4gICAgICBuYW1lc1RvUmVnaXN0ZXIucHVzaCh7XG4gICAgICAgIHZhcmlhYmxlTmFtZTogdGhpcy5leHRyYWN0ZWREZWZhdWx0RXhwb3J0TmFtZSxcbiAgICAgICAgdW5pcXVlTG9jYWxOYW1lOiBcImRlZmF1bHRcIixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYFxuOyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZWFjdEhvdExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWhvdC1sb2FkZXInKS5kZWZhdWx0O1xuICB2YXIgbGVhdmVNb2R1bGUgPSByZXF1aXJlKCdyZWFjdC1ob3QtbG9hZGVyJykubGVhdmVNb2R1bGU7XG4gIGlmICghcmVhY3RIb3RMb2FkZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiR7bmFtZXNUb1JlZ2lzdGVyXG4gIC5tYXAoXG4gICAgKHt2YXJpYWJsZU5hbWUsIHVuaXF1ZUxvY2FsTmFtZX0pID0+XG4gICAgICBgICByZWFjdEhvdExvYWRlci5yZWdpc3Rlcigke3ZhcmlhYmxlTmFtZX0sIFwiJHt1bmlxdWVMb2NhbE5hbWV9XCIsICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMuZmlsZVBhdGggfHwgXCJcIixcbiAgICAgICl9KTtgLFxuICApXG4gIC5qb2luKFwiXFxuXCIpfVxuICBsZWF2ZU1vZHVsZShtb2R1bGUpO1xufSkoKTtgO1xuICB9XG5cbiAgcHJvY2VzcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pO3ZhciBfaWRlbnRpZmllciA9IHJlcXVpcmUoJy4uL3BhcnNlci91dGlsL2lkZW50aWZpZXInKTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvTGV4aWNhbF9ncmFtbWFyXG4vLyBIYXJkLWNvZGUgYSBsaXN0IG9mIHJlc2VydmVkIHdvcmRzIHJhdGhlciB0aGFuIHRyeWluZyB0byB1c2Uga2V5d29yZHMgb3IgY29udGV4dHVhbCBrZXl3b3Jkc1xuLy8gZnJvbSB0aGUgcGFyc2VyLCBzaW5jZSBjdXJyZW50bHkgdGhlcmUgYXJlIHZhcmlvdXMgZXhjZXB0aW9ucywgbGlrZSBgcGFja2FnZWAgYmVpbmcgcmVzZXJ2ZWRcbi8vIGJ1dCB1bnVzZWQgYW5kIHZhcmlvdXMgY29udGV4dHVhbCBrZXl3b3JkcyBiZWluZyByZXNlcnZlZC4gTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IGFsbCBjb2RlXG4vLyBjb21waWxlZCBieSBTdWNyYXNlIGlzIGluIGEgbW9kdWxlLCBzbyBzdHJpY3QgbW9kZSB3b3JkcyBhbmQgYXdhaXQgYXJlIGFsbCBjb25zaWRlcmVkIHJlc2VydmVkXG4vLyBoZXJlLlxuY29uc3QgUkVTRVJWRURfV09SRFMgPSBuZXcgU2V0KFtcbiAgLy8gUmVzZXJ2ZWQga2V5d29yZHMgYXMgb2YgRUNNQVNjcmlwdCAyMDE1XG4gIFwiYnJlYWtcIixcbiAgXCJjYXNlXCIsXG4gIFwiY2F0Y2hcIixcbiAgXCJjbGFzc1wiLFxuICBcImNvbnN0XCIsXG4gIFwiY29udGludWVcIixcbiAgXCJkZWJ1Z2dlclwiLFxuICBcImRlZmF1bHRcIixcbiAgXCJkZWxldGVcIixcbiAgXCJkb1wiLFxuICBcImVsc2VcIixcbiAgXCJleHBvcnRcIixcbiAgXCJleHRlbmRzXCIsXG4gIFwiZmluYWxseVwiLFxuICBcImZvclwiLFxuICBcImZ1bmN0aW9uXCIsXG4gIFwiaWZcIixcbiAgXCJpbXBvcnRcIixcbiAgXCJpblwiLFxuICBcImluc3RhbmNlb2ZcIixcbiAgXCJuZXdcIixcbiAgXCJyZXR1cm5cIixcbiAgXCJzdXBlclwiLFxuICBcInN3aXRjaFwiLFxuICBcInRoaXNcIixcbiAgXCJ0aHJvd1wiLFxuICBcInRyeVwiLFxuICBcInR5cGVvZlwiLFxuICBcInZhclwiLFxuICBcInZvaWRcIixcbiAgXCJ3aGlsZVwiLFxuICBcIndpdGhcIixcbiAgXCJ5aWVsZFwiLFxuICAvLyBGdXR1cmUgcmVzZXJ2ZWQga2V5d29yZHNcbiAgXCJlbnVtXCIsXG4gIFwiaW1wbGVtZW50c1wiLFxuICBcImludGVyZmFjZVwiLFxuICBcImxldFwiLFxuICBcInBhY2thZ2VcIixcbiAgXCJwcml2YXRlXCIsXG4gIFwicHJvdGVjdGVkXCIsXG4gIFwicHVibGljXCIsXG4gIFwic3RhdGljXCIsXG4gIFwiYXdhaXRcIixcbiAgLy8gTGl0ZXJhbHMgdGhhdCBjYW5ub3QgYmUgdXNlZCBhcyBpZGVudGlmaWVyc1xuICBcImZhbHNlXCIsXG4gIFwibnVsbFwiLFxuICBcInRydWVcIixcbl0pO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gbmFtZSBpcyBhIGxlZ2FsIHZhcmlhYmxlIG5hbWUuXG4gKlxuICogVGhpcyBpcyBuZWVkZWQgd2hlbiB0cmFuc2Zvcm1pbmcgVHlwZVNjcmlwdCBlbnVtczsgaWYgYW4gZW51bSBrZXkgaXMgYSB2YWxpZFxuICogdmFyaWFibGUgbmFtZSwgaXQgbWlnaHQgYmUgcmVmZXJlbmNlZCBsYXRlciBpbiB0aGUgZW51bSwgc28gd2UgbmVlZCB0b1xuICogZGVjbGFyZSBhIHZhcmlhYmxlLlxuICovXG4gZnVuY3Rpb24gaXNJZGVudGlmaWVyKG5hbWUpIHtcbiAgaWYgKG5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghX2lkZW50aWZpZXIuSVNfSURFTlRJRklFUl9TVEFSVFtuYW1lLmNoYXJDb2RlQXQoMCldKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghX2lkZW50aWZpZXIuSVNfSURFTlRJRklFUl9DSEFSW25hbWUuY2hhckNvZGVBdChpKV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICFSRVNFUlZFRF9XT1JEUy5oYXMobmFtZSk7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGlzSWRlbnRpZmllcjtcbiIsICJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHt2YWx1ZTogdHJ1ZX0pOyBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxudmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxudmFyIF9pc0lkZW50aWZpZXIgPSByZXF1aXJlKCcuLi91dGlsL2lzSWRlbnRpZmllcicpOyB2YXIgX2lzSWRlbnRpZmllcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0lkZW50aWZpZXIpO1xuXG52YXIgX1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9UcmFuc2Zvcm1lcicpOyB2YXIgX1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RyYW5zZm9ybWVyKTtcblxuIGNsYXNzIFR5cGVTY3JpcHRUcmFuc2Zvcm1lciBleHRlbmRzIF9UcmFuc2Zvcm1lcjIuZGVmYXVsdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICByb290VHJhbnNmb3JtZXIsXG4gICAgIHRva2VucyxcbiAgICAgaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZCxcbiAgKSB7XG4gICAgc3VwZXIoKTt0aGlzLnJvb3RUcmFuc2Zvcm1lciA9IHJvb3RUcmFuc2Zvcm1lcjt0aGlzLnRva2VucyA9IHRva2Vuczt0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQgPSBpc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkOztcbiAgfVxuXG4gIHByb2Nlc3MoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlQXJyb3dQYXJhbUVuZCgpIHx8XG4gICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzUG9zc2libGVBc3luY0Fycm93V2l0aFR5cGVQYXJhbXMoKSB8fFxuICAgICAgdGhpcy5yb290VHJhbnNmb3JtZXIucHJvY2Vzc1Bvc3NpYmxlVHlwZVJhbmdlKClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9wdWJsaWMpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9wcm90ZWN0ZWQpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9wcml2YXRlKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYWJzdHJhY3QpIHx8XG4gICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLl9yZWFkb25seSkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX292ZXJyaWRlKSB8fFxuICAgICAgdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5ub25OdWxsQXNzZXJ0aW9uKVxuICAgICkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2VudW0pIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2NvbnN0LCBfdHlwZXMuVG9rZW5UeXBlLl9lbnVtKSkge1xuICAgICAgdGhpcy5wcm9jZXNzRW51bSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fZW51bSkgfHxcbiAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUuX2V4cG9ydCwgX3R5cGVzLlRva2VuVHlwZS5fY29uc3QsIF90eXBlcy5Ub2tlblR5cGUuX2VudW0pXG4gICAgKSB7XG4gICAgICB0aGlzLnByb2Nlc3NFbnVtKHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb2Nlc3NFbnVtKGlzRXhwb3J0ID0gZmFsc2UpIHtcbiAgICAvLyBXZSBtaWdodCBoYXZlIFwiZXhwb3J0IGNvbnN0IGVudW1cIiwgc28ganVzdCByZW1vdmUgYWxsIHJlbGV2YW50IHRva2Vucy5cbiAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICB3aGlsZSAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fY29uc3QpIHx8IHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuX2VudW0pKSB7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgIH1cbiAgICBjb25zdCBlbnVtTmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lKCk7XG4gICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICBpZiAoaXNFeHBvcnQgJiYgIXRoaXMuaXNJbXBvcnRzVHJhbnNmb3JtRW5hYmxlZCkge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcImV4cG9ydCBcIik7XG4gICAgfVxuICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYHZhciAke2VudW1OYW1lfTsgKGZ1bmN0aW9uICgke2VudW1OYW1lfSlgKTtcbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCk7XG4gICAgdGhpcy5wcm9jZXNzRW51bUJvZHkoZW51bU5hbWUpO1xuICAgIHRoaXMudG9rZW5zLmNvcHlFeHBlY3RlZFRva2VuKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKTtcbiAgICBpZiAoaXNFeHBvcnQgJiYgdGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGApKCR7ZW51bU5hbWV9IHx8IChleHBvcnRzLiR7ZW51bU5hbWV9ID0gJHtlbnVtTmFtZX0gPSB7fSkpO2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGApKCR7ZW51bU5hbWV9IHx8ICgke2VudW1OYW1lfSA9IHt9KSk7YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhbiBlbnVtIGludG8gZXF1aXZhbGVudCBKUy4gVGhpcyBoYXMgY29tcGxleGl0eSBpbiBhIGZldyBwbGFjZXM6XG4gICAqIC0gVFMgYWxsb3dzIHN0cmluZyBlbnVtcywgbnVtZXJpYyBlbnVtcywgYW5kIGEgbWl4IG9mIHRoZSB0d28gc3R5bGVzIHdpdGhpbiBhbiBlbnVtLlxuICAgKiAtIEVudW0ga2V5cyBhcmUgYWxsb3dlZCB0byBiZSByZWZlcmVuY2VkIGluIGxhdGVyIGVudW0gdmFsdWVzLlxuICAgKiAtIEVudW0ga2V5cyBhcmUgYWxsb3dlZCB0byBiZSBzdHJpbmdzLlxuICAgKiAtIFdoZW4gZW51bSB2YWx1ZXMgYXJlIG9taXR0ZWQsIHRoZXkgc2hvdWxkIGZvbGxvdyBhbiBhdXRvLWluY3JlbWVudCBiZWhhdmlvci5cbiAgICovXG4gIHByb2Nlc3NFbnVtQm9keShlbnVtTmFtZSkge1xuICAgIC8vIENvZGUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlIHByZXZpb3VzIGVudW0gbWVtYmVyLCBvciBudWxsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgLy8gZW51bSBtZW1iZXIuXG4gICAgbGV0IHByZXZpb3VzVmFsdWVDb2RlID0gbnVsbDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtuYW1lU3RyaW5nQ29kZSwgdmFyaWFibGVOYW1lfSA9IHRoaXMuZXh0cmFjdEVudW1LZXlJbmZvKHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpKTtcbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZUluaXRpYWxUb2tlbigpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudG9rZW5zLm1hdGNoZXMzKF90eXBlcy5Ub2tlblR5cGUuZXEsIF90eXBlcy5Ub2tlblR5cGUuc3RyaW5nLCBfdHlwZXMuVG9rZW5UeXBlLmNvbW1hKSB8fFxuICAgICAgICB0aGlzLnRva2Vucy5tYXRjaGVzMyhfdHlwZXMuVG9rZW5UeXBlLmVxLCBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZywgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaW5nTGl0ZXJhbEVudW1NZW1iZXIoZW51bU5hbWUsIG5hbWVTdHJpbmdDb2RlLCB2YXJpYWJsZU5hbWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmVxKSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NFeHBsaWNpdFZhbHVlRW51bU1lbWJlcihlbnVtTmFtZSwgbmFtZVN0cmluZ0NvZGUsIHZhcmlhYmxlTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NJbXBsaWNpdFZhbHVlRW51bU1lbWJlcihcbiAgICAgICAgICBlbnVtTmFtZSxcbiAgICAgICAgICBuYW1lU3RyaW5nQ29kZSxcbiAgICAgICAgICB2YXJpYWJsZU5hbWUsXG4gICAgICAgICAgcHJldmlvdXNWYWx1ZUNvZGUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIHByZXZpb3VzVmFsdWVDb2RlID0gdmFyaWFibGVOYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNWYWx1ZUNvZGUgPSBgJHtlbnVtTmFtZX1bJHtuYW1lU3RyaW5nQ29kZX1dYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IG5hbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBlbnVtIGtleSwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGljaCBjb2RlIHRvIGVtaXRcbiAgICogYW5kIHdoZXRoZXIgd2Ugc2hvdWxkIGRlY2xhcmUgYSB2YXJpYWJsZSBhcyBwYXJ0IG9mIHRoaXMgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIFNvbWUgY2FzZXMgdG8ga2VlcCBpbiBtaW5kOlxuICAgKiAtIEVudW0ga2V5cyBjYW4gYmUgaW1wbGljaXRseSByZWZlcmVuY2VkIGxhdGVyLCBlLmcuIGBYID0gMSwgWSA9IFhgLiBJbiBTdWNyYXNlLCB3ZSBpbXBsZW1lbnRcbiAgICogICB0aGlzIGJ5IGRlY2xhcmluZyBhIHZhcmlhYmxlIGBYYCBzbyB0aGF0IGxhdGVyIGV4cHJlc3Npb25zIGNhbiB1c2UgaXQuXG4gICAqIC0gSW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGlkZW50aWZpZXIga2V5IHN5bnRheCwgZW51bSBrZXlzIGFyZSBhbGxvd2VkIHRvIGJlIHN0cmluZyBsaXRlcmFscyxcbiAgICogICBlLmcuIGBcImhlbGxvIHdvcmxkXCIgPSAzLGAuIFRlbXBsYXRlIGxpdGVyYWwgc3ludGF4IGlzIE5PVCBhbGxvd2VkLlxuICAgKiAtIEV2ZW4gaWYgdGhlIGVudW0ga2V5IGlzIGRlZmluZWQgYXMgYSBzdHJpbmcgbGl0ZXJhbCwgaXQgbWF5IHN0aWxsIGJlIHJlZmVyZW5jZWQgYnkgaWRlbnRpZmllclxuICAgKiAgIGxhdGVyLCBlLmcuIGBcIlhcIiA9IDEsIFkgPSBYYC4gVGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZGV0ZWN0IHdoZXRoZXIgb3Igbm90IGEgc3RyaW5nXG4gICAqICAgbGl0ZXJhbCBpcyBpZGVudGlmaWVyLWxpa2UgYW5kIGVtaXQgYSB2YXJpYWJsZSBpZiBzbywgZXZlbiBpZiB0aGUgZGVjbGFyYXRpb24gZGlkIG5vdCB1c2UgYW5cbiAgICogICBpZGVudGlmaWVyLlxuICAgKiAtIFJlc2VydmVkIGtleXdvcmRzIGxpa2UgYGJyZWFrYCBhcmUgdmFsaWQgZW51bSBrZXlzLCBidXQgYXJlIG5vdCB2YWxpZCB0byBiZSByZWZlcmVuY2VkIGxhdGVyXG4gICAqICAgYW5kIHdvdWxkIGJlIGEgc3ludGF4IGVycm9yIGlmIHdlIGVtaXR0ZWQgYSB2YXJpYWJsZSwgc28gd2UgbmVlZCB0byBza2lwIHRoZSB2YXJpYWJsZVxuICAgKiAgIGRlY2xhcmF0aW9uIGluIHRob3NlIGNhc2VzLlxuICAgKlxuICAgKiBUaGUgdmFyaWFibGVOYW1lIHJldHVybiB2YWx1ZSBjYXB0dXJlcyB0aGVzZSBudWFuY2VzOiBpZiBub24tbnVsbCwgd2UgY2FuIGFuZCBtdXN0IGVtaXQgYVxuICAgKiB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgYW5kIGlmIG51bGwsIHdlIGNhbid0IGFuZCBzaG91bGRuJ3QuXG4gICAqL1xuICBleHRyYWN0RW51bUtleUluZm8obmFtZVRva2VuKSB7XG4gICAgaWYgKG5hbWVUb2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRva2Vucy5pZGVudGlmaWVyTmFtZUZvclRva2VuKG5hbWVUb2tlbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lU3RyaW5nQ29kZTogYFwiJHtuYW1lfVwiYCxcbiAgICAgICAgdmFyaWFibGVOYW1lOiBfaXNJZGVudGlmaWVyMi5kZWZhdWx0LmNhbGwodm9pZCAwLCBuYW1lKSA/IG5hbWUgOiBudWxsLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG5hbWVUb2tlbi50eXBlID09PSBfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLnN0cmluZ1ZhbHVlRm9yVG9rZW4obmFtZVRva2VuKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWVTdHJpbmdDb2RlOiB0aGlzLnRva2Vucy5jb2RlLnNsaWNlKG5hbWVUb2tlbi5zdGFydCwgbmFtZVRva2VuLmVuZCksXG4gICAgICAgIHZhcmlhYmxlTmFtZTogX2lzSWRlbnRpZmllcjIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgbmFtZSkgPyBuYW1lIDogbnVsbCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5hbWUgb3Igc3RyaW5nIGF0IGJlZ2lubmluZyBvZiBlbnVtIGVsZW1lbnQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gZW51bSBtZW1iZXIgd2hlcmUgdGhlIFJIUyBpcyBqdXN0IGEgc3RyaW5nIGxpdGVyYWwgKG5vdCBvbWl0dGVkLCBub3QgYSBudW1iZXIsIGFuZFxuICAgKiBub3QgYSBjb21wbGV4IGV4cHJlc3Npb24pLiBUaGlzIGlzIHRoZSB0eXBpY2FsIGZvcm0gZm9yIFRTIHN0cmluZyBlbnVtcywgYW5kIGluIHRoaXMgY2FzZSwgd2VcbiAgICogZG8gKm5vdCogY3JlYXRlIGEgcmV2ZXJzZSBtYXBwaW5nLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBkZWxldGluZyB0aGUga2V5IHRva2VuLCB3aGVuIHRoZSB0b2tlbiBwcm9jZXNzb3IgaXMgYXQgdGhlIGVxdWFscyBzaWduLlxuICAgKlxuICAgKiBFeGFtcGxlIDE6XG4gICAqIHNvbWVLZXkgPSBcInNvbWUgdmFsdWVcIlxuICAgKiAtPlxuICAgKiBjb25zdCBzb21lS2V5ID0gXCJzb21lIHZhbHVlXCI7IE15RW51bVtcInNvbWVLZXlcIl0gPSBzb21lS2V5O1xuICAgKlxuICAgKiBFeGFtcGxlIDI6XG4gICAqIFwic29tZSBrZXlcIiA9IFwic29tZSB2YWx1ZVwiXG4gICAqIC0+XG4gICAqIE15RW51bVtcInNvbWUga2V5XCJdID0gXCJzb21lIHZhbHVlXCI7XG4gICAqL1xuICBwcm9jZXNzU3RyaW5nTGl0ZXJhbEVudW1NZW1iZXIoXG4gICAgZW51bU5hbWUsXG4gICAgbmFtZVN0cmluZ0NvZGUsXG4gICAgdmFyaWFibGVOYW1lLFxuICApIHtcbiAgICBpZiAodmFyaWFibGVOYW1lICE9IG51bGwpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYGNvbnN0ICR7dmFyaWFibGVOYW1lfWApO1xuICAgICAgLy8gPVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAvLyB2YWx1ZSBzdHJpbmdcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgOyAke2VudW1OYW1lfVske25hbWVTdHJpbmdDb2RlfV0gPSAke3ZhcmlhYmxlTmFtZX07YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYCR7ZW51bU5hbWV9WyR7bmFtZVN0cmluZ0NvZGV9XWApO1xuICAgICAgLy8gPVxuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAvLyB2YWx1ZSBzdHJpbmdcbiAgICAgIHRoaXMudG9rZW5zLmNvcHlUb2tlbigpO1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShcIjtcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiBlbnVtIG1lbWJlciBpbml0aWFsaXplZCB3aXRoIGFuIGV4cHJlc3Npb24gb24gdGhlIHJpZ2h0LWhhbmQgc2lkZSAob3RoZXIgdGhhbiBhXG4gICAqIHN0cmluZyBsaXRlcmFsKS4gSW4gdGhlc2UgY2FzZXMsIHdlIHNob3VsZCB0cmFuc2Zvcm0gdGhlIGV4cHJlc3Npb24gYW5kIGVtaXQgY29kZSB0aGF0IHNldHMgdXBcbiAgICogYSByZXZlcnNlIG1hcHBpbmcuXG4gICAqXG4gICAqIFRoZSBUeXBlU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgb3BlcmF0aW9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBleHByZXNzaW9ucyB0aGF0IGNhbiBiZVxuICAgKiBcImNvbnN0YW50IGZvbGRlZFwiIGF0IGNvbXBpbGUgdGltZSAoaS5lLiBjb25zaXN0IG9mIG51bWJlciBsaXRlcmFscyBhbmQgc2ltcGxlIG1hdGggb3BlcmF0aW9uc1xuICAgKiBvbiB0aG9zZSBudW1iZXJzKSBhbmQgb25lcyB0aGF0IGFyZSBkeW5hbWljLiBGb3IgY29uc3RhbnQgZXhwcmVzc2lvbnMsIGl0IGVtaXRzIHRoZSByZXNvbHZlZFxuICAgKiBudW1lcmljIHZhbHVlLCBhbmQgYXV0by1pbmNyZW1lbnRpbmcgaXMgb25seSBhbGxvd2VkIGluIHRoYXQgY2FzZS4gRXZhbHVhdGluZyBleHByZXNzaW9ucyBhdFxuICAgKiBjb21waWxlIHRpbWUgd291bGQgYWRkIHNpZ25pZmljYW50IGNvbXBsZXhpdHkgdG8gU3VjcmFzZSwgc28gU3VjcmFzZSBpbnN0ZWFkIGxlYXZlcyB0aGVcbiAgICogZXhwcmVzc2lvbiBhcy1pcywgYW5kIHdpbGwgbGF0ZXIgZW1pdCBzb21ldGhpbmcgbGlrZSBgTXlFbnVtW1wicHJldmlvdXNLZXlcIl0gKyAxYCB0byBpbXBsZW1lbnRcbiAgICogYXV0by1pbmNyZW1lbnRpbmcuXG4gICAqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGFmdGVyIGRlbGV0aW5nIHRoZSBrZXkgdG9rZW4sIHdoZW4gdGhlIHRva2VuIHByb2Nlc3NvciBpcyBhdCB0aGUgZXF1YWxzIHNpZ24uXG4gICAqXG4gICAqIEV4YW1wbGUgMTpcbiAgICogc29tZUtleSA9IDEgKyAxXG4gICAqIC0+XG4gICAqIGNvbnN0IHNvbWVLZXkgPSAxICsgMTsgTXlFbnVtW015RW51bVtcInNvbWVLZXlcIl0gPSBzb21lS2V5XSA9IFwic29tZUtleVwiO1xuICAgKlxuICAgKiBFeGFtcGxlIDI6XG4gICAqIFwic29tZSBrZXlcIiA9IDEgKyAxXG4gICAqIC0+XG4gICAqIE15RW51bVtNeUVudW1bXCJzb21lIGtleVwiXSA9IDEgKyAxXSA9IFwic29tZSBrZXlcIjtcbiAgICovXG4gIHByb2Nlc3NFeHBsaWNpdFZhbHVlRW51bU1lbWJlcihcbiAgICBlbnVtTmFtZSxcbiAgICBuYW1lU3RyaW5nQ29kZSxcbiAgICB2YXJpYWJsZU5hbWUsXG4gICkge1xuICAgIGNvbnN0IHJoc0VuZEluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkucmhzRW5kSW5kZXg7XG4gICAgaWYgKHJoc0VuZEluZGV4ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHJoc0VuZEluZGV4IG9uIGVudW0gYXNzaWduLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodmFyaWFibGVOYW1lICE9IG51bGwpIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoYGNvbnN0ICR7dmFyaWFibGVOYW1lfWApO1xuICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPCByaHNFbmRJbmRleCkge1xuICAgICAgICB0aGlzLnJvb3RUcmFuc2Zvcm1lci5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXG4gICAgICAgIGA7ICR7ZW51bU5hbWV9WyR7ZW51bU5hbWV9WyR7bmFtZVN0cmluZ0NvZGV9XSA9ICR7dmFyaWFibGVOYW1lfV0gPSAke25hbWVTdHJpbmdDb2RlfTtgLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgJHtlbnVtTmFtZX1bJHtlbnVtTmFtZX1bJHtuYW1lU3RyaW5nQ29kZX1dYCk7XG4gICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW4oKTtcbiAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHJoc0VuZEluZGV4KSB7XG4gICAgICAgIHRoaXMucm9vdFRyYW5zZm9ybWVyLnByb2Nlc3NUb2tlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgXSA9ICR7bmFtZVN0cmluZ0NvZGV9O2ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gZW51bSBtZW1iZXIgd2l0aCBubyByaWdodC1oYW5kIHNpZGUgZXhwcmVzc2lvbi4gSW4gdGhpcyBjYXNlLCB0aGUgdmFsdWUgaXMgdGhlXG4gICAqIHByZXZpb3VzIHZhbHVlIHBsdXMgMSwgb3IgMCBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgdmFsdWUuIFdlIHNob3VsZCBhbHNvIGFsd2F5cyBlbWl0IGFcbiAgICogcmV2ZXJzZSBtYXBwaW5nLlxuICAgKlxuICAgKiBFeGFtcGxlIDE6XG4gICAqIHNvbWVLZXkyXG4gICAqIC0+XG4gICAqIGNvbnN0IHNvbWVLZXkyID0gc29tZUtleTEgKyAxOyBNeUVudW1bTXlFbnVtW1wic29tZUtleTJcIl0gPSBzb21lS2V5Ml0gPSBcInNvbWVLZXkyXCI7XG4gICAqXG4gICAqIEV4YW1wbGUgMjpcbiAgICogXCJzb21lIGtleSAyXCJcbiAgICogLT5cbiAgICogTXlFbnVtW015RW51bVtcInNvbWUga2V5IDJcIl0gPSBzb21lS2V5MSArIDFdID0gXCJzb21lIGtleSAyXCI7XG4gICAqL1xuICBwcm9jZXNzSW1wbGljaXRWYWx1ZUVudW1NZW1iZXIoXG4gICAgZW51bU5hbWUsXG4gICAgbmFtZVN0cmluZ0NvZGUsXG4gICAgdmFyaWFibGVOYW1lLFxuICAgIHByZXZpb3VzVmFsdWVDb2RlLFxuICApIHtcbiAgICBsZXQgdmFsdWVDb2RlID0gcHJldmlvdXNWYWx1ZUNvZGUgIT0gbnVsbCA/IGAke3ByZXZpb3VzVmFsdWVDb2RlfSArIDFgIDogXCIwXCI7XG4gICAgaWYgKHZhcmlhYmxlTmFtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdCAke3ZhcmlhYmxlTmFtZX0gPSAke3ZhbHVlQ29kZX07IGApO1xuICAgICAgdmFsdWVDb2RlID0gdmFyaWFibGVOYW1lO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgYCR7ZW51bU5hbWV9WyR7ZW51bU5hbWV9WyR7bmFtZVN0cmluZ0NvZGV9XSA9ICR7dmFsdWVDb2RlfV0gPSAke25hbWVTdHJpbmdDb2RlfTtgLFxuICAgICk7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gVHlwZVNjcmlwdFRyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblxudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIva2V5d29yZHMnKTtcbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzJyk7XG5cbnZhciBfZ2V0Q2xhc3NJbmZvID0gcmVxdWlyZSgnLi4vdXRpbC9nZXRDbGFzc0luZm8nKTsgdmFyIF9nZXRDbGFzc0luZm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0Q2xhc3NJbmZvKTtcbnZhciBfQ0pTSW1wb3J0VHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL0NKU0ltcG9ydFRyYW5zZm9ybWVyJyk7IHZhciBfQ0pTSW1wb3J0VHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfQ0pTSW1wb3J0VHJhbnNmb3JtZXIpO1xudmFyIF9FU01JbXBvcnRUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vRVNNSW1wb3J0VHJhbnNmb3JtZXInKTsgdmFyIF9FU01JbXBvcnRUcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9FU01JbXBvcnRUcmFuc2Zvcm1lcik7XG52YXIgX0Zsb3dUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vRmxvd1RyYW5zZm9ybWVyJyk7IHZhciBfRmxvd1RyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0Zsb3dUcmFuc2Zvcm1lcik7XG52YXIgX0plc3RIb2lzdFRyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9KZXN0SG9pc3RUcmFuc2Zvcm1lcicpOyB2YXIgX0plc3RIb2lzdFRyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0plc3RIb2lzdFRyYW5zZm9ybWVyKTtcbnZhciBfSlNYVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL0pTWFRyYW5zZm9ybWVyJyk7IHZhciBfSlNYVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfSlNYVHJhbnNmb3JtZXIpO1xudmFyIF9OdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL051bWVyaWNTZXBhcmF0b3JUcmFuc2Zvcm1lcicpOyB2YXIgX051bWVyaWNTZXBhcmF0b3JUcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9OdW1lcmljU2VwYXJhdG9yVHJhbnNmb3JtZXIpO1xudmFyIF9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyJyk7IHZhciBfT3B0aW9uYWxDYXRjaEJpbmRpbmdUcmFuc2Zvcm1lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9PcHRpb25hbENhdGNoQmluZGluZ1RyYW5zZm9ybWVyKTtcbnZhciBfT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lcicpOyB2YXIgX09wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfT3B0aW9uYWxDaGFpbmluZ051bGxpc2hUcmFuc2Zvcm1lcik7XG52YXIgX1JlYWN0RGlzcGxheU5hbWVUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyJyk7IHZhciBfUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1JlYWN0RGlzcGxheU5hbWVUcmFuc2Zvcm1lcik7XG52YXIgX1JlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL1JlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXInKTsgdmFyIF9SZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1JlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIpO1xuXG52YXIgX1R5cGVTY3JpcHRUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vVHlwZVNjcmlwdFRyYW5zZm9ybWVyJyk7IHZhciBfVHlwZVNjcmlwdFRyYW5zZm9ybWVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1R5cGVTY3JpcHRUcmFuc2Zvcm1lcik7XG5cblxuXG5cblxuXG5cblxuIGNsYXNzIFJvb3RUcmFuc2Zvcm1lciB7XG4gICBfX2luaXQoKSB7dGhpcy50cmFuc2Zvcm1lcnMgPSBbXX1cbiAgXG4gIFxuICAgX19pbml0MigpIHt0aGlzLmdlbmVyYXRlZFZhcmlhYmxlcyA9IFtdfVxuICBcbiAgXG4gIFxuICBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdWNyYXNlQ29udGV4dCxcbiAgICB0cmFuc2Zvcm1zLFxuICAgIGVuYWJsZUxlZ2FjeUJhYmVsNU1vZHVsZUludGVyb3AsXG4gICAgb3B0aW9ucyxcbiAgKSB7O1Jvb3RUcmFuc2Zvcm1lci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7Um9vdFRyYW5zZm9ybWVyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5uYW1lTWFuYWdlciA9IHN1Y3Jhc2VDb250ZXh0Lm5hbWVNYW5hZ2VyO1xuICAgIHRoaXMuaGVscGVyTWFuYWdlciA9IHN1Y3Jhc2VDb250ZXh0LmhlbHBlck1hbmFnZXI7XG4gICAgY29uc3Qge3Rva2VuUHJvY2Vzc29yLCBpbXBvcnRQcm9jZXNzb3J9ID0gc3VjcmFzZUNvbnRleHQ7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlblByb2Nlc3NvcjtcbiAgICB0aGlzLmlzSW1wb3J0c1RyYW5zZm9ybUVuYWJsZWQgPSB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiaW1wb3J0c1wiKTtcbiAgICB0aGlzLmlzUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1FbmFibGVkID0gdHJhbnNmb3Jtcy5pbmNsdWRlcyhcInJlYWN0LWhvdC1sb2FkZXJcIik7XG4gICAgdGhpcy5kaXNhYmxlRVNUcmFuc2Zvcm1zID0gQm9vbGVhbihvcHRpb25zLmRpc2FibGVFU1RyYW5zZm9ybXMpO1xuXG4gICAgaWYgKCFvcHRpb25zLmRpc2FibGVFU1RyYW5zZm9ybXMpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIG5ldyAoMCwgX09wdGlvbmFsQ2hhaW5pbmdOdWxsaXNoVHJhbnNmb3JtZXIyLmRlZmF1bHQpKHRva2VuUHJvY2Vzc29yLCB0aGlzLm5hbWVNYW5hZ2VyKSxcbiAgICAgICk7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKG5ldyAoMCwgX051bWVyaWNTZXBhcmF0b3JUcmFuc2Zvcm1lcjIuZGVmYXVsdCkodG9rZW5Qcm9jZXNzb3IpKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2gobmV3ICgwLCBfT3B0aW9uYWxDYXRjaEJpbmRpbmdUcmFuc2Zvcm1lcjIuZGVmYXVsdCkodG9rZW5Qcm9jZXNzb3IsIHRoaXMubmFtZU1hbmFnZXIpKTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3Jtcy5pbmNsdWRlcyhcImpzeFwiKSkge1xuICAgICAgaWYgKG9wdGlvbnMuanN4UnVudGltZSAhPT0gXCJwcmVzZXJ2ZVwiKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgICAgbmV3ICgwLCBfSlNYVHJhbnNmb3JtZXIyLmRlZmF1bHQpKHRoaXMsIHRva2VuUHJvY2Vzc29yLCBpbXBvcnRQcm9jZXNzb3IsIHRoaXMubmFtZU1hbmFnZXIsIG9wdGlvbnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3ICgwLCBfUmVhY3REaXNwbGF5TmFtZVRyYW5zZm9ybWVyMi5kZWZhdWx0KSh0aGlzLCB0b2tlblByb2Nlc3NvciwgaW1wb3J0UHJvY2Vzc29yLCBvcHRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSBudWxsO1xuICAgIGlmICh0cmFuc2Zvcm1zLmluY2x1ZGVzKFwicmVhY3QtaG90LWxvYWRlclwiKSkge1xuICAgICAgaWYgKCFvcHRpb25zLmZpbGVQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZpbGVQYXRoIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIHJlYWN0LWhvdC1sb2FkZXIgdHJhbnNmb3JtLlwiKTtcbiAgICAgIH1cbiAgICAgIHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIgPSBuZXcgKDAsIF9SZWFjdEhvdExvYWRlclRyYW5zZm9ybWVyMi5kZWZhdWx0KSh0b2tlblByb2Nlc3Nvciwgb3B0aW9ucy5maWxlUGF0aCk7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIpO1xuICAgIH1cblxuICAgIC8vIE5vdGUgdGhhdCB3ZSBhbHdheXMgd2FudCB0byBlbmFibGUgdGhlIGltcG9ydHMgdHJhbnNmb3JtZXIsIGV2ZW4gd2hlbiB0aGUgaW1wb3J0IHRyYW5zZm9ybVxuICAgIC8vIGl0c2VsZiBpc24ndCBlbmFibGVkLCBzaW5jZSB3ZSBuZWVkIHRvIGRvIHR5cGUtb25seSBpbXBvcnQgcHJ1bmluZyBmb3IgYm90aCBGbG93IGFuZFxuICAgIC8vIFR5cGVTY3JpcHQuXG4gICAgaWYgKHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJpbXBvcnRzXCIpKSB7XG4gICAgICBpZiAoaW1wb3J0UHJvY2Vzc29yID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1udWxsIGltcG9ydFByb2Nlc3NvciB3aXRoIGltcG9ydHMgdHJhbnNmb3JtIGVuYWJsZWQuXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3ICgwLCBfQ0pTSW1wb3J0VHJhbnNmb3JtZXIyLmRlZmF1bHQpKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICAgICAgaW1wb3J0UHJvY2Vzc29yLFxuICAgICAgICAgIHRoaXMubmFtZU1hbmFnZXIsXG4gICAgICAgICAgdGhpcy5oZWxwZXJNYW5hZ2VyLFxuICAgICAgICAgIHJlYWN0SG90TG9hZGVyVHJhbnNmb3JtZXIsXG4gICAgICAgICAgZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCxcbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnMuZW5hYmxlTGVnYWN5VHlwZVNjcmlwdE1vZHVsZUludGVyb3ApLFxuICAgICAgICAgIHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpLFxuICAgICAgICAgIHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJmbG93XCIpLFxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9ucy5wcmVzZXJ2ZUR5bmFtaWNJbXBvcnQpLFxuICAgICAgICAgIEJvb2xlYW4ob3B0aW9ucy5rZWVwVW51c2VkSW1wb3J0cyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBuZXcgKDAsIF9FU01JbXBvcnRUcmFuc2Zvcm1lcjIuZGVmYXVsdCkoXG4gICAgICAgICAgdG9rZW5Qcm9jZXNzb3IsXG4gICAgICAgICAgdGhpcy5uYW1lTWFuYWdlcixcbiAgICAgICAgICB0aGlzLmhlbHBlck1hbmFnZXIsXG4gICAgICAgICAgcmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1lcixcbiAgICAgICAgICB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwidHlwZXNjcmlwdFwiKSxcbiAgICAgICAgICB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiZmxvd1wiKSxcbiAgICAgICAgICBCb29sZWFuKG9wdGlvbnMua2VlcFVudXNlZEltcG9ydHMpLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiZmxvd1wiKSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAgbmV3ICgwLCBfRmxvd1RyYW5zZm9ybWVyMi5kZWZhdWx0KSh0aGlzLCB0b2tlblByb2Nlc3NvciwgdHJhbnNmb3Jtcy5pbmNsdWRlcyhcImltcG9ydHNcIikpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zZm9ybXMuaW5jbHVkZXMoXCJ0eXBlc2NyaXB0XCIpKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBuZXcgKDAsIF9UeXBlU2NyaXB0VHJhbnNmb3JtZXIyLmRlZmF1bHQpKHRoaXMsIHRva2VuUHJvY2Vzc29yLCB0cmFuc2Zvcm1zLmluY2x1ZGVzKFwiaW1wb3J0c1wiKSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHJhbnNmb3Jtcy5pbmNsdWRlcyhcImplc3RcIikpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIG5ldyAoMCwgX0plc3RIb2lzdFRyYW5zZm9ybWVyMi5kZWZhdWx0KSh0aGlzLCB0b2tlblByb2Nlc3NvciwgdGhpcy5uYW1lTWFuYWdlciwgaW1wb3J0UHJvY2Vzc29yKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtKCkge1xuICAgIHRoaXMudG9rZW5zLnJlc2V0KCk7XG4gICAgdGhpcy5wcm9jZXNzQmFsYW5jZWRDb2RlKCk7XG4gICAgY29uc3Qgc2hvdWxkQWRkVXNlU3RyaWN0ID0gdGhpcy5pc0ltcG9ydHNUcmFuc2Zvcm1FbmFibGVkO1xuICAgIC8vIFwidXNlIHN0cmljdFwiIGFsd2F5cyBuZWVkcyB0byBiZSBmaXJzdCwgc28gb3ZlcnJpZGUgdGhlIG5vcm1hbCB0cmFuc2Zvcm1lciBvcmRlci5cbiAgICBsZXQgcHJlZml4ID0gc2hvdWxkQWRkVXNlU3RyaWN0ID8gJ1widXNlIHN0cmljdFwiOycgOiBcIlwiO1xuICAgIGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcbiAgICAgIHByZWZpeCArPSB0cmFuc2Zvcm1lci5nZXRQcmVmaXhDb2RlKCk7XG4gICAgfVxuICAgIHByZWZpeCArPSB0aGlzLmhlbHBlck1hbmFnZXIuZW1pdEhlbHBlcnMoKTtcbiAgICBwcmVmaXggKz0gdGhpcy5nZW5lcmF0ZWRWYXJpYWJsZXMubWFwKCh2KSA9PiBgIHZhciAke3Z9O2ApLmpvaW4oXCJcIik7XG4gICAgZm9yIChjb25zdCB0cmFuc2Zvcm1lciBvZiB0aGlzLnRyYW5zZm9ybWVycykge1xuICAgICAgcHJlZml4ICs9IHRyYW5zZm9ybWVyLmdldEhvaXN0ZWRDb2RlKCk7XG4gICAgfVxuICAgIGxldCBzdWZmaXggPSBcIlwiO1xuICAgIGZvciAoY29uc3QgdHJhbnNmb3JtZXIgb2YgdGhpcy50cmFuc2Zvcm1lcnMpIHtcbiAgICAgIHN1ZmZpeCArPSB0cmFuc2Zvcm1lci5nZXRTdWZmaXhDb2RlKCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9rZW5zLmZpbmlzaCgpO1xuICAgIGxldCB7Y29kZX0gPSByZXN1bHQ7XG4gICAgaWYgKGNvZGUuc3RhcnRzV2l0aChcIiMhXCIpKSB7XG4gICAgICBsZXQgbmV3bGluZUluZGV4ID0gY29kZS5pbmRleE9mKFwiXFxuXCIpO1xuICAgICAgaWYgKG5ld2xpbmVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3bGluZUluZGV4ID0gY29kZS5sZW5ndGg7XG4gICAgICAgIGNvZGUgKz0gXCJcXG5cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IGNvZGUuc2xpY2UoMCwgbmV3bGluZUluZGV4ICsgMSkgKyBwcmVmaXggKyBjb2RlLnNsaWNlKG5ld2xpbmVJbmRleCArIDEpICsgc3VmZml4LFxuICAgICAgICAvLyBUaGUgaGFzaGJhbmcgbGluZSBoYXMgbm8gdG9rZW5zLCBzbyBzaGlmdGluZyB0aGUgdG9rZW5zIHRvIGFjY291bnRcbiAgICAgICAgLy8gZm9yIHByZWZpeCBjYW4gaGFwcGVuIG5vcm1hbGx5LlxuICAgICAgICBtYXBwaW5nczogdGhpcy5zaGlmdE1hcHBpbmdzKHJlc3VsdC5tYXBwaW5ncywgcHJlZml4Lmxlbmd0aCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiBwcmVmaXggKyBjb2RlICsgc3VmZml4LFxuICAgICAgICBtYXBwaW5nczogdGhpcy5zaGlmdE1hcHBpbmdzKHJlc3VsdC5tYXBwaW5ncywgcHJlZml4Lmxlbmd0aCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NCYWxhbmNlZENvZGUoKSB7XG4gICAgbGV0IGJyYWNlRGVwdGggPSAwO1xuICAgIGxldCBwYXJlbkRlcHRoID0gMDtcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5zLmlzQXRFbmQoKSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUuYnJhY2VMKSB8fCB0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmRvbGxhckJyYWNlTCkpIHtcbiAgICAgICAgYnJhY2VEZXB0aCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgICAgaWYgKGJyYWNlRGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJhY2VEZXB0aC0tO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgICAgICBwYXJlbkRlcHRoKys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SKSkge1xuICAgICAgICBpZiAocGFyZW5EZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbkRlcHRoLS07XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NUb2tlbigpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fY2xhc3MpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NDbGFzcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHRyYW5zZm9ybWVyIG9mIHRoaXMudHJhbnNmb3JtZXJzKSB7XG4gICAgICBjb25zdCB3YXNQcm9jZXNzZWQgPSB0cmFuc2Zvcm1lci5wcm9jZXNzKCk7XG4gICAgICBpZiAod2FzUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogU2tpcCBwYXN0IGEgY2xhc3Mgd2l0aCBhIG5hbWUgYW5kIHJldHVybiB0aGF0IG5hbWUuXG4gICAqL1xuICBwcm9jZXNzTmFtZWRDbGFzcygpIHtcbiAgICBpZiAoIXRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUuX2NsYXNzLCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBpZGVudGlmaWVyIGZvciBleHBvcnRlZCBjbGFzcyBuYW1lLlwiKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMudG9rZW5zLmlkZW50aWZpZXJOYW1lQXRJbmRleCh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgIHRoaXMucHJvY2Vzc0NsYXNzKCk7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBwcm9jZXNzQ2xhc3MoKSB7XG4gICAgY29uc3QgY2xhc3NJbmZvID0gX2dldENsYXNzSW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdGhpcywgdGhpcy50b2tlbnMsIHRoaXMubmFtZU1hbmFnZXIsIHRoaXMuZGlzYWJsZUVTVHJhbnNmb3Jtcyk7XG5cbiAgICAvLyBCb3RoIHN0YXRpYyBhbmQgaW5zdGFuY2UgaW5pdGlhbGl6ZXJzIG5lZWQgYSBjbGFzcyBuYW1lIHRvIHVzZSB0byBpbnZva2UgdGhlIGluaXRpYWxpemVyLCBzb1xuICAgIC8vIGFzc2lnbiB0byBvbmUgaWYgbmVjZXNzYXJ5LlxuICAgIGNvbnN0IG5lZWRzQ29tbWFFeHByZXNzaW9uID1cbiAgICAgIChjbGFzc0luZm8uaGVhZGVySW5mby5pc0V4cHJlc3Npb24gfHwgIWNsYXNzSW5mby5oZWFkZXJJbmZvLmNsYXNzTmFtZSkgJiZcbiAgICAgIGNsYXNzSW5mby5zdGF0aWNJbml0aWFsaXplck5hbWVzLmxlbmd0aCArIGNsYXNzSW5mby5pbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMDtcblxuICAgIGxldCBjbGFzc05hbWUgPSBjbGFzc0luZm8uaGVhZGVySW5mby5jbGFzc05hbWU7XG4gICAgaWYgKG5lZWRzQ29tbWFFeHByZXNzaW9uKSB7XG4gICAgICBjbGFzc05hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJfY2xhc3NcIik7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZhcmlhYmxlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGAgKCR7Y2xhc3NOYW1lfSA9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NUb2tlbiA9IHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpO1xuICAgIGNvbnN0IGNvbnRleHRJZCA9IGNsYXNzVG9rZW4uY29udGV4dElkO1xuICAgIGlmIChjb250ZXh0SWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY2xhc3MgdG8gaGF2ZSBhIGNvbnRleHQgSUQuXCIpO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLl9jbGFzcyk7XG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5icmFjZUwsIGNvbnRleHRJZCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1Rva2VuKCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzQ2xhc3NCb2R5KGNsYXNzSW5mbywgY2xhc3NOYW1lKTtcblxuICAgIGNvbnN0IHN0YXRpY0luaXRpYWxpemVyU3RhdGVtZW50cyA9IGNsYXNzSW5mby5zdGF0aWNJbml0aWFsaXplck5hbWVzLm1hcChcbiAgICAgIChuYW1lKSA9PiBgJHtjbGFzc05hbWV9LiR7bmFtZX0oKWAsXG4gICAgKTtcbiAgICBpZiAobmVlZHNDb21tYUV4cHJlc3Npb24pIHtcbiAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXG4gICAgICAgIGAsICR7c3RhdGljSW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLm1hcCgocykgPT4gYCR7c30sIGApLmpvaW4oXCJcIil9JHtjbGFzc05hbWV9KWAsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NJbmZvLnN0YXRpY0luaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50b2tlbnMuYXBwZW5kQ29kZShgICR7c3RhdGljSW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLm1hcCgocykgPT4gYCR7c307YCkuam9pbihcIiBcIil9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIHdhbnQgdG8ganVzdCBoYW5kbGUgY2xhc3MgZmllbGRzIGluIGFsbCBjb250ZXh0cywgc2luY2UgVHlwZVNjcmlwdCBzdXBwb3J0cyB0aGVtLiBMYXRlcixcbiAgICogd2hlbiBzb21lIEpTIGltcGxlbWVudGF0aW9ucyBzdXBwb3J0IGNsYXNzIGZpZWxkcywgdGhpcyBzaG91bGQgYmUgbWFkZSBvcHRpb25hbC5cbiAgICovXG4gIHByb2Nlc3NDbGFzc0JvZHkoY2xhc3NJbmZvLCBjbGFzc05hbWUpIHtcbiAgICBjb25zdCB7XG4gICAgICBoZWFkZXJJbmZvLFxuICAgICAgY29uc3RydWN0b3JJbnNlcnRQb3MsXG4gICAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgIHJhbmdlc1RvUmVtb3ZlLFxuICAgIH0gPSBjbGFzc0luZm87XG4gICAgbGV0IGZpZWxkSW5kZXggPSAwO1xuICAgIGxldCByYW5nZVRvUmVtb3ZlSW5kZXggPSAwO1xuICAgIGNvbnN0IGNsYXNzQ29udGV4dElkID0gdGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuY29udGV4dElkO1xuICAgIGlmIChjbGFzc0NvbnRleHRJZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub24tbnVsbCBjb250ZXh0IElEIG9uIGNsYXNzLlwiKTtcbiAgICB9XG4gICAgdGhpcy50b2tlbnMuY29weUV4cGVjdGVkVG9rZW4oX3R5cGVzLlRva2VuVHlwZS5icmFjZUwpO1xuICAgIGlmICh0aGlzLmlzUmVhY3RIb3RMb2FkZXJUcmFuc2Zvcm1FbmFibGVkKSB7XG4gICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICBcIl9fcmVhY3RzdGFuZGluX19yZWdlbmVyYXRlQnlFdmFsKGtleSwgY29kZSkge3RoaXNba2V5XSA9IGV2YWwoY29kZSk7fVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZWVkc0NvbnN0cnVjdG9ySW5pdCA9XG4gICAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cy5sZW5ndGggKyBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubGVuZ3RoID4gMDtcblxuICAgIGlmIChjb25zdHJ1Y3Rvckluc2VydFBvcyA9PT0gbnVsbCAmJiBuZWVkc0NvbnN0cnVjdG9ySW5pdCkge1xuICAgICAgY29uc3QgY29uc3RydWN0b3JJbml0aWFsaXplcnNDb2RlID0gdGhpcy5tYWtlQ29uc3RydWN0b3JJbml0Q29kZShcbiAgICAgICAgY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsXG4gICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgKTtcbiAgICAgIGlmIChoZWFkZXJJbmZvLmhhc1N1cGVyY2xhc3MpIHtcbiAgICAgICAgY29uc3QgYXJnc05hbWUgPSB0aGlzLm5hbWVNYW5hZ2VyLmNsYWltRnJlZU5hbWUoXCJhcmdzXCIpO1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKFxuICAgICAgICAgIGBjb25zdHJ1Y3RvciguLi4ke2FyZ3NOYW1lfSkgeyBzdXBlciguLi4ke2FyZ3NOYW1lfSk7ICR7Y29uc3RydWN0b3JJbml0aWFsaXplcnNDb2RlfTsgfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy5hcHBlbmRDb2RlKGBjb25zdHJ1Y3RvcigpIHsgJHtjb25zdHJ1Y3RvckluaXRpYWxpemVyc0NvZGV9OyB9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKCF0aGlzLnRva2Vucy5tYXRjaGVzQ29udGV4dElkQW5kTGFiZWwoX3R5cGVzLlRva2VuVHlwZS5icmFjZVIsIGNsYXNzQ29udGV4dElkKSkge1xuICAgICAgaWYgKGZpZWxkSW5kZXggPCBmaWVsZHMubGVuZ3RoICYmIHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpID09PSBmaWVsZHNbZmllbGRJbmRleF0uc3RhcnQpIHtcbiAgICAgICAgbGV0IG5lZWRzQ2xvc2VCcmFjZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5icmFja2V0TCkpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5jb3B5VG9rZW5XaXRoUHJlZml4KGAke2ZpZWxkc1tmaWVsZEluZGV4XS5pbml0aWFsaXplck5hbWV9KCkge3RoaXNgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMShfdHlwZXMuVG9rZW5UeXBlLnN0cmluZykgfHwgdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5udW0pKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuV2l0aFByZWZpeChgJHtmaWVsZHNbZmllbGRJbmRleF0uaW5pdGlhbGl6ZXJOYW1lfSgpIHt0aGlzW2ApO1xuICAgICAgICAgIG5lZWRzQ2xvc2VCcmFjZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuV2l0aFByZWZpeChgJHtmaWVsZHNbZmllbGRJbmRleF0uaW5pdGlhbGl6ZXJOYW1lfSgpIHt0aGlzLmApO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IGZpZWxkc1tmaWVsZEluZGV4XS5lbmQpIHtcbiAgICAgICAgICBpZiAobmVlZHNDbG9zZUJyYWNlICYmIHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpID09PSBmaWVsZHNbZmllbGRJbmRleF0uZXF1YWxzSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCJdXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByb2Nlc3NUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXCJ9XCIpO1xuICAgICAgICBmaWVsZEluZGV4Kys7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICByYW5nZVRvUmVtb3ZlSW5kZXggPCByYW5nZXNUb1JlbW92ZS5sZW5ndGggJiZcbiAgICAgICAgdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgPj0gcmFuZ2VzVG9SZW1vdmVbcmFuZ2VUb1JlbW92ZUluZGV4XS5zdGFydFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IHJhbmdlc1RvUmVtb3ZlW3JhbmdlVG9SZW1vdmVJbmRleF0uZW5kKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5zLmN1cnJlbnRJbmRleCgpIDwgcmFuZ2VzVG9SZW1vdmVbcmFuZ2VUb1JlbW92ZUluZGV4XS5lbmQpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlVG9SZW1vdmVJbmRleCsrO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA9PT0gY29uc3RydWN0b3JJbnNlcnRQb3MpIHtcbiAgICAgICAgdGhpcy50b2tlbnMuY29weVRva2VuKCk7XG4gICAgICAgIGlmIChuZWVkc0NvbnN0cnVjdG9ySW5pdCkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmFwcGVuZENvZGUoXG4gICAgICAgICAgICBgOyR7dGhpcy5tYWtlQ29uc3RydWN0b3JJbml0Q29kZShcbiAgICAgICAgICAgICAgY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsXG4gICAgICAgICAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXJOYW1lcyxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgKX07YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1Rva2VuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NUb2tlbigpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRva2Vucy5jb3B5RXhwZWN0ZWRUb2tlbihfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUik7XG4gIH1cblxuICBtYWtlQ29uc3RydWN0b3JJbml0Q29kZShcbiAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVyU3RhdGVtZW50cyxcbiAgICBpbnN0YW5jZUluaXRpYWxpemVyTmFtZXMsXG4gICAgY2xhc3NOYW1lLFxuICApIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uY29uc3RydWN0b3JJbml0aWFsaXplclN0YXRlbWVudHMsXG4gICAgICAuLi5pbnN0YW5jZUluaXRpYWxpemVyTmFtZXMubWFwKChuYW1lKSA9PiBgJHtjbGFzc05hbWV9LnByb3RvdHlwZS4ke25hbWV9LmNhbGwodGhpcylgKSxcbiAgICBdLmpvaW4oXCI7XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGx5IGl0J3Mgb2sgdG8gc2ltcGx5IHJlbW92ZSB0eXBlIHRva2VucywgYnV0IHdlIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsIHdoZW4gZGVhbGluZyB3aXRoXG4gICAqIGFycm93IGZ1bmN0aW9uIHJldHVybiB0eXBlcyBzaW5jZSB0aGV5IGNhbiBjb25mdXNlIHRoZSBwYXJzZXIuIEluIHRoYXQgY2FzZSwgd2Ugd2FudCB0byBtb3ZlXG4gICAqIHRoZSBjbG9zZS1wYXJlbiB0byB0aGUgc2FtZSBsaW5lIGFzIHRoZSBhcnJvdy5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGFuZ3BpZXJjZS9zdWNyYXNlL2lzc3Vlcy8zOTEgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIHByb2Nlc3NQb3NzaWJsZUFycm93UGFyYW1FbmQoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMyKF90eXBlcy5Ub2tlblR5cGUucGFyZW5SLCBfdHlwZXMuVG9rZW5UeXBlLmNvbG9uKSAmJiB0aGlzLnRva2Vucy50b2tlbkF0UmVsYXRpdmVJbmRleCgxKS5pc1R5cGUpIHtcbiAgICAgIGxldCBuZXh0Tm9uVHlwZUluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxO1xuICAgICAgLy8gTG9vayBhaGVhZCB0byBzZWUgaWYgdGhpcyBpcyBhbiBhcnJvdyBmdW5jdGlvbiBvciBzb21ldGhpbmcgZWxzZS5cbiAgICAgIHdoaWxlICh0aGlzLnRva2Vucy50b2tlbnNbbmV4dE5vblR5cGVJbmRleF0uaXNUeXBlKSB7XG4gICAgICAgIG5leHROb25UeXBlSW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRva2Vucy5tYXRjaGVzMUF0SW5kZXgobmV4dE5vblR5cGVJbmRleCwgX3R5cGVzLlRva2VuVHlwZS5hcnJvdykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IG5leHROb25UeXBlSW5kZXgpIHtcbiAgICAgICAgICB0aGlzLnRva2Vucy5yZW1vdmVUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlblRyaW1taW5nTGVmdFdoaXRlc3BhY2UoXCIpID0+XCIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFzeW5jIGFycm93IGZ1bmN0aW9uIG1pZ2h0IGJlIG9mIHRoZSBmb3JtOlxuICAgKlxuICAgKiBhc3luYyA8XG4gICAqICAgVFxuICAgKiA+KCkgPT4ge31cbiAgICpcbiAgICogaW4gd2hpY2ggY2FzZSwgcmVtb3ZpbmcgdGhlIHR5cGUgcGFyYW1ldGVycyB3aWxsIGNhdXNlIGEgc3ludGF4IGVycm9yLiBEZXRlY3QgdGhpcyBjYXNlIGFuZFxuICAgKiBtb3ZlIHRoZSBvcGVuLXBhcmVuIGVhcmxpZXIuXG4gICAqL1xuICBwcm9jZXNzUG9zc2libGVBc3luY0Fycm93V2l0aFR5cGVQYXJhbXMoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMudG9rZW5zLm1hdGNoZXNDb250ZXh0dWFsKF9rZXl3b3Jkcy5Db250ZXh0dWFsS2V5d29yZC5fYXN5bmMpICYmXG4gICAgICAhdGhpcy50b2tlbnMubWF0Y2hlczEoX3R5cGVzLlRva2VuVHlwZS5fYXN5bmMpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMudG9rZW5zLnRva2VuQXRSZWxhdGl2ZUluZGV4KDEpO1xuICAgIGlmIChuZXh0VG9rZW4udHlwZSAhPT0gX3R5cGVzLlRva2VuVHlwZS5sZXNzVGhhbiB8fCAhbmV4dFRva2VuLmlzVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBuZXh0Tm9uVHlwZUluZGV4ID0gdGhpcy50b2tlbnMuY3VycmVudEluZGV4KCkgKyAxO1xuICAgIC8vIExvb2sgYWhlYWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJyb3cgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2UuXG4gICAgd2hpbGUgKHRoaXMudG9rZW5zLnRva2Vuc1tuZXh0Tm9uVHlwZUluZGV4XS5pc1R5cGUpIHtcbiAgICAgIG5leHROb25UeXBlSW5kZXgrKztcbiAgICB9XG4gICAgaWYgKHRoaXMudG9rZW5zLm1hdGNoZXMxQXRJbmRleChuZXh0Tm9uVHlwZUluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLnBhcmVuTCkpIHtcbiAgICAgIHRoaXMudG9rZW5zLnJlcGxhY2VUb2tlbihcImFzeW5jIChcIik7XG4gICAgICB0aGlzLnRva2Vucy5yZW1vdmVJbml0aWFsVG9rZW4oKTtcbiAgICAgIHdoaWxlICh0aGlzLnRva2Vucy5jdXJyZW50SW5kZXgoKSA8IG5leHROb25UeXBlSW5kZXgpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucmVtb3ZlVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICAvLyBXZSBhdGUgYSAoIHRva2VuLCBzbyB3ZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHRva2VucyBpbiBiZXR3ZWVuIGFuZCB0aGVuIHRoZSApIHRva2VuIHNvIHRoYXRcbiAgICAgIC8vIHdlIHJlbWFpbiBiYWxhbmNlZC5cbiAgICAgIHRoaXMucHJvY2Vzc0JhbGFuY2VkQ29kZSgpO1xuICAgICAgdGhpcy5wcm9jZXNzVG9rZW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm9jZXNzUG9zc2libGVUeXBlUmFuZ2UoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLmN1cnJlbnRUb2tlbigpLmlzVHlwZSkge1xuICAgICAgdGhpcy50b2tlbnMucmVtb3ZlSW5pdGlhbFRva2VuKCk7XG4gICAgICB3aGlsZSAodGhpcy50b2tlbnMuY3VycmVudFRva2VuKCkuaXNUeXBlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnJlbW92ZVRva2VuKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2hpZnRNYXBwaW5ncyhcbiAgICBtYXBwaW5ncyxcbiAgICBwcmVmaXhMZW5ndGgsXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1hcHBpbmcgPSBtYXBwaW5nc1tpXTtcbiAgICAgIGlmIChtYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFwcGluZ3NbaV0gPSBtYXBwaW5nICsgcHJlZml4TGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwcGluZ3M7XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gUm9vdFRyYW5zZm9ybWVyO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuTGluZXNBbmRDb2x1bW5zID0gdm9pZCAwO1xudmFyIExGID0gJ1xcbic7XG52YXIgQ1IgPSAnXFxyJztcbnZhciBMaW5lc0FuZENvbHVtbnMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTGluZXNBbmRDb2x1bW5zKHN0cmluZykge1xuICAgICAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICAgICAgdmFyIG9mZnNldHMgPSBbMF07XG4gICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IHN0cmluZy5sZW5ndGg7KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZ1tvZmZzZXRdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBMRjpcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IExGLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ1I6XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBDUi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdbb2Zmc2V0XSA9PT0gTEYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBMRi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldHMgPSBvZmZzZXRzO1xuICAgIH1cbiAgICBMaW5lc0FuZENvbHVtbnMucHJvdG90eXBlLmxvY2F0aW9uRm9ySW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpbmUgPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0cyA9IHRoaXMub2Zmc2V0cztcbiAgICAgICAgd2hpbGUgKG9mZnNldHNbbGluZSArIDFdIDw9IGluZGV4KSB7XG4gICAgICAgICAgICBsaW5lKys7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbHVtbiA9IGluZGV4IC0gb2Zmc2V0c1tsaW5lXTtcbiAgICAgICAgcmV0dXJuIHsgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICB9O1xuICAgIExpbmVzQW5kQ29sdW1ucy5wcm90b3R5cGUuaW5kZXhGb3JMb2NhdGlvbiA9IGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmUsIGNvbHVtbiA9IGxvY2F0aW9uLmNvbHVtbjtcbiAgICAgICAgaWYgKGxpbmUgPCAwIHx8IGxpbmUgPj0gdGhpcy5vZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbiA8IDAgfHwgY29sdW1uID4gdGhpcy5sZW5ndGhPZkxpbmUobGluZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldHNbbGluZV0gKyBjb2x1bW47XG4gICAgfTtcbiAgICBMaW5lc0FuZENvbHVtbnMucHJvdG90eXBlLmxlbmd0aE9mTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldHNbbGluZV07XG4gICAgICAgIHZhciBuZXh0T2Zmc2V0ID0gbGluZSA9PT0gdGhpcy5vZmZzZXRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gdGhpcy5zdHJpbmcubGVuZ3RoXG4gICAgICAgICAgICA6IHRoaXMub2Zmc2V0c1tsaW5lICsgMV07XG4gICAgICAgIHJldHVybiBuZXh0T2Zmc2V0IC0gb2Zmc2V0O1xuICAgIH07XG4gICAgcmV0dXJuIExpbmVzQW5kQ29sdW1ucztcbn0oKSk7XG5leHBvcnRzLkxpbmVzQW5kQ29sdW1ucyA9IExpbmVzQW5kQ29sdW1ucztcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gTGluZXNBbmRDb2x1bW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9dmFyIF9saW5lc2FuZGNvbHVtbnMgPSByZXF1aXJlKCdsaW5lcy1hbmQtY29sdW1ucycpOyB2YXIgX2xpbmVzYW5kY29sdW1uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9saW5lc2FuZGNvbHVtbnMpO1xuXG5cbnZhciBfdHlwZXMgPSByZXF1aXJlKCcuLi9wYXJzZXIvdG9rZW5pemVyL3R5cGVzJyk7XG5cbiBmdW5jdGlvbiBmb3JtYXRUb2tlbnMoY29kZSwgdG9rZW5zKSB7XG4gIGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCB0b2tlbktleXMgPSBPYmplY3Qua2V5cyh0b2tlbnNbMF0pLmZpbHRlcihcbiAgICAoaykgPT4gayAhPT0gXCJ0eXBlXCIgJiYgayAhPT0gXCJ2YWx1ZVwiICYmIGsgIT09IFwic3RhcnRcIiAmJiBrICE9PSBcImVuZFwiICYmIGsgIT09IFwibG9jXCIsXG4gICk7XG4gIGNvbnN0IHR5cGVLZXlzID0gT2JqZWN0LmtleXModG9rZW5zWzBdLnR5cGUpLmZpbHRlcigoaykgPT4gayAhPT0gXCJsYWJlbFwiICYmIGsgIT09IFwia2V5d29yZFwiKTtcblxuICBjb25zdCBoZWFkaW5ncyA9IFtcIkxvY2F0aW9uXCIsIFwiTGFiZWxcIiwgXCJSYXdcIiwgLi4udG9rZW5LZXlzLCAuLi50eXBlS2V5c107XG5cbiAgY29uc3QgbGluZXMgPSBuZXcgKDAsIF9saW5lc2FuZGNvbHVtbnMyLmRlZmF1bHQpKGNvZGUpO1xuICBjb25zdCByb3dzID0gW2hlYWRpbmdzLCAuLi50b2tlbnMubWFwKGdldFRva2VuQ29tcG9uZW50cyldO1xuICBjb25zdCBwYWRkaW5nID0gaGVhZGluZ3MubWFwKCgpID0+IDApO1xuICBmb3IgKGNvbnN0IGNvbXBvbmVudHMgb2Ygcm93cykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFkZGluZ1tpXSA9IE1hdGgubWF4KHBhZGRpbmdbaV0sIGNvbXBvbmVudHNbaV0ubGVuZ3RoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJvd3NcbiAgICAubWFwKChjb21wb25lbnRzKSA9PiBjb21wb25lbnRzLm1hcCgoY29tcG9uZW50LCBpKSA9PiBjb21wb25lbnQucGFkRW5kKHBhZGRpbmdbaV0pKS5qb2luKFwiIFwiKSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBmdW5jdGlvbiBnZXRUb2tlbkNvbXBvbmVudHModG9rZW4pIHtcbiAgICBjb25zdCByYXcgPSBjb2RlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpO1xuICAgIHJldHVybiBbXG4gICAgICBmb3JtYXRSYW5nZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKSxcbiAgICAgIF90eXBlcy5mb3JtYXRUb2tlblR5cGUuY2FsbCh2b2lkIDAsIHRva2VuLnR5cGUpLFxuICAgICAgdHJ1bmNhdGUoU3RyaW5nKHJhdyksIDE0KSxcbiAgICAgIC8vIEB0cy1pZ25vcmU6IEludGVudGlvbmFsIGR5bmFtaWMgYWNjZXNzIGJ5IGtleS5cbiAgICAgIC4uLnRva2VuS2V5cy5tYXAoKGtleSkgPT4gZm9ybWF0VmFsdWUodG9rZW5ba2V5XSwga2V5KSksXG4gICAgICAvLyBAdHMtaWdub3JlOiBJbnRlbnRpb25hbCBkeW5hbWljIGFjY2VzcyBieSBrZXkuXG4gICAgICAuLi50eXBlS2V5cy5tYXAoKGtleSkgPT4gZm9ybWF0VmFsdWUodG9rZW4udHlwZVtrZXldLCBrZXkpKSxcbiAgICBdO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZnVuY3Rpb24gZm9ybWF0VmFsdWUodmFsdWUsIGtleSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gYCR7Zm9ybWF0UG9zKHN0YXJ0KX0tJHtmb3JtYXRQb3MoZW5kKX1gO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UG9zKHBvcykge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gbGluZXMubG9jYXRpb25Gb3JJbmRleChwb3MpO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBcIlVua25vd25cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2xvY2F0aW9uLmxpbmUgKyAxfToke2xvY2F0aW9uLmNvbHVtbiArIDF9YDtcbiAgICB9XG4gIH1cbn0gZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0VG9rZW5zO1xuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBsZW5ndGgpIHtcbiAgaWYgKHMubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAke3Muc2xpY2UoMCwgbGVuZ3RoIC0gMyl9Li4uYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9dmFyIF90eXBlcyA9IHJlcXVpcmUoJy4uL3BhcnNlci90b2tlbml6ZXIvdHlwZXMnKTtcblxudmFyIF9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvID0gcmVxdWlyZSgnLi9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvJyk7IHZhciBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJbXBvcnRFeHBvcnRTcGVjaWZpZXJJbmZvKTtcblxuLyoqXG4gKiBTcGVjaWFsIGNhc2UgY29kZSB0byBzY2FuIGZvciBpbXBvcnRlZCBuYW1lcyBpbiBFU00gVHlwZVNjcmlwdC4gV2UgbmVlZCB0byBkbyB0aGlzIHNvIHdlIGNhblxuICogcHJvcGVybHkgZ2V0IGdsb2JhbHMgc28gd2UgY2FuIGNvbXB1dGUgc2hhZG93ZWQgZ2xvYmFscy5cbiAqXG4gKiBUaGlzIGlzIHNpbWlsYXIgdG8gbG9naWMgaW4gQ0pTSW1wb3J0UHJvY2Vzc29yLCBidXQgdHJpbW1lZCBkb3duIHRvIGF2b2lkIGxvZ2ljIHdpdGggQ0pTXG4gKiByZXBsYWNlbWVudCBhbmQgZmxvdyB0eXBlIGltcG9ydHMuXG4gKi9cbiBmdW5jdGlvbiBnZXRUU0ltcG9ydGVkTmFtZXModG9rZW5zKSB7XG4gIGNvbnN0IGltcG9ydGVkTmFtZXMgPSBuZXcgU2V0KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLnRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChcbiAgICAgIHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0KSAmJlxuICAgICAgIXRva2Vucy5tYXRjaGVzM0F0SW5kZXgoaSwgX3R5cGVzLlRva2VuVHlwZS5faW1wb3J0LCBfdHlwZXMuVG9rZW5UeXBlLm5hbWUsIF90eXBlcy5Ub2tlblR5cGUuZXEpXG4gICAgKSB7XG4gICAgICBjb2xsZWN0TmFtZXNGb3JJbXBvcnQodG9rZW5zLCBpLCBpbXBvcnRlZE5hbWVzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkTmFtZXM7XG59IGV4cG9ydHMuZGVmYXVsdCA9IGdldFRTSW1wb3J0ZWROYW1lcztcblxuZnVuY3Rpb24gY29sbGVjdE5hbWVzRm9ySW1wb3J0KFxuICB0b2tlbnMsXG4gIGluZGV4LFxuICBpbXBvcnRlZE5hbWVzLFxuKSB7XG4gIGluZGV4Kys7XG5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUucGFyZW5MKSkge1xuICAgIC8vIER5bmFtaWMgaW1wb3J0LCBzbyBub3RoaW5nIHRvIGRvXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUubmFtZSkpIHtcbiAgICBpbXBvcnRlZE5hbWVzLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSk7XG4gICAgaW5kZXgrKztcbiAgICBpZiAodG9rZW5zLm1hdGNoZXMxQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuc3RhcikpIHtcbiAgICAvLyAqIGFzXG4gICAgaW5kZXggKz0gMjtcbiAgICBpbXBvcnRlZE5hbWVzLmFkZCh0b2tlbnMuaWRlbnRpZmllck5hbWVBdEluZGV4KGluZGV4KSk7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmICh0b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlTCkpIHtcbiAgICBpbmRleCsrO1xuICAgIGNvbGxlY3ROYW1lc0Zvck5hbWVkSW1wb3J0KHRva2VucywgaW5kZXgsIGltcG9ydGVkTmFtZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3ROYW1lc0Zvck5hbWVkSW1wb3J0KFxuICB0b2tlbnMsXG4gIGluZGV4LFxuICBpbXBvcnRlZE5hbWVzLFxuKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuYnJhY2VSKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpZmllckluZm8gPSBfZ2V0SW1wb3J0RXhwb3J0U3BlY2lmaWVySW5mbzIuZGVmYXVsdC5jYWxsKHZvaWQgMCwgdG9rZW5zLCBpbmRleCk7XG4gICAgaW5kZXggPSBzcGVjaWZpZXJJbmZvLmVuZEluZGV4O1xuICAgIGlmICghc3BlY2lmaWVySW5mby5pc1R5cGUpIHtcbiAgICAgIGltcG9ydGVkTmFtZXMuYWRkKHNwZWNpZmllckluZm8ucmlnaHROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5zLm1hdGNoZXMyQXRJbmRleChpbmRleCwgX3R5cGVzLlRva2VuVHlwZS5jb21tYSwgX3R5cGVzLlRva2VuVHlwZS5icmFjZVIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0b2tlbnMubWF0Y2hlczFBdEluZGV4KGluZGV4LCBfdHlwZXMuVG9rZW5UeXBlLmJyYWNlUikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRva2Vucy5tYXRjaGVzMUF0SW5kZXgoaW5kZXgsIF90eXBlcy5Ub2tlblR5cGUuY29tbWEpKSB7XG4gICAgICBpbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5zLnRva2Vuc1tpbmRleF0pfWApO1xuICAgIH1cbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge3ZhbHVlOiB0cnVlfSk7IGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9dmFyIF9DSlNJbXBvcnRQcm9jZXNzb3IgPSByZXF1aXJlKCcuL0NKU0ltcG9ydFByb2Nlc3NvcicpOyB2YXIgX0NKU0ltcG9ydFByb2Nlc3NvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9DSlNJbXBvcnRQcm9jZXNzb3IpO1xudmFyIF9jb21wdXRlU291cmNlTWFwID0gcmVxdWlyZSgnLi9jb21wdXRlU291cmNlTWFwJyk7IHZhciBfY29tcHV0ZVNvdXJjZU1hcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wdXRlU291cmNlTWFwKTtcbnZhciBfSGVscGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vSGVscGVyTWFuYWdlcicpO1xudmFyIF9pZGVudGlmeVNoYWRvd2VkR2xvYmFscyA9IHJlcXVpcmUoJy4vaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMnKTsgdmFyIF9pZGVudGlmeVNoYWRvd2VkR2xvYmFsczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pZGVudGlmeVNoYWRvd2VkR2xvYmFscyk7XG52YXIgX05hbWVNYW5hZ2VyID0gcmVxdWlyZSgnLi9OYW1lTWFuYWdlcicpOyB2YXIgX05hbWVNYW5hZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX05hbWVNYW5hZ2VyKTtcbnZhciBfT3B0aW9ucyA9IHJlcXVpcmUoJy4vT3B0aW9ucycpO1xuXG52YXIgX3BhcnNlciA9IHJlcXVpcmUoJy4vcGFyc2VyJyk7XG5cbnZhciBfVG9rZW5Qcm9jZXNzb3IgPSByZXF1aXJlKCcuL1Rva2VuUHJvY2Vzc29yJyk7IHZhciBfVG9rZW5Qcm9jZXNzb3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9rZW5Qcm9jZXNzb3IpO1xudmFyIF9Sb290VHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL3RyYW5zZm9ybWVycy9Sb290VHJhbnNmb3JtZXInKTsgdmFyIF9Sb290VHJhbnNmb3JtZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfUm9vdFRyYW5zZm9ybWVyKTtcbnZhciBfZm9ybWF0VG9rZW5zID0gcmVxdWlyZSgnLi91dGlsL2Zvcm1hdFRva2VucycpOyB2YXIgX2Zvcm1hdFRva2VuczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mb3JtYXRUb2tlbnMpO1xudmFyIF9nZXRUU0ltcG9ydGVkTmFtZXMgPSByZXF1aXJlKCcuL3V0aWwvZ2V0VFNJbXBvcnRlZE5hbWVzJyk7IHZhciBfZ2V0VFNJbXBvcnRlZE5hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldFRTSW1wb3J0ZWROYW1lcyk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuO1xuXG4gZnVuY3Rpb24gZ2V0VmVyc2lvbigpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIFwiMy4zNS4wXCI7XG59IGV4cG9ydHMuZ2V0VmVyc2lvbiA9IGdldFZlcnNpb247XG5cbiBmdW5jdGlvbiB0cmFuc2Zvcm0oY29kZSwgb3B0aW9ucykge1xuICBfT3B0aW9ucy52YWxpZGF0ZU9wdGlvbnMuY2FsbCh2b2lkIDAsIG9wdGlvbnMpO1xuICB0cnkge1xuICAgIGNvbnN0IHN1Y3Jhc2VDb250ZXh0ID0gZ2V0U3VjcmFzZUNvbnRleHQoY29kZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgKDAsIF9Sb290VHJhbnNmb3JtZXIyLmRlZmF1bHQpKFxuICAgICAgc3VjcmFzZUNvbnRleHQsXG4gICAgICBvcHRpb25zLnRyYW5zZm9ybXMsXG4gICAgICBCb29sZWFuKG9wdGlvbnMuZW5hYmxlTGVnYWN5QmFiZWw1TW9kdWxlSW50ZXJvcCksXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gICAgY29uc3QgdHJhbnNmb3JtZXJSZXN1bHQgPSB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oKTtcbiAgICBsZXQgcmVzdWx0ID0ge2NvZGU6IHRyYW5zZm9ybWVyUmVzdWx0LmNvZGV9O1xuICAgIGlmIChvcHRpb25zLnNvdXJjZU1hcE9wdGlvbnMpIHtcbiAgICAgIGlmICghb3B0aW9ucy5maWxlUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaWxlUGF0aCBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGdlbmVyYXRpbmcgYSBzb3VyY2UgbWFwLlwiKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICBzb3VyY2VNYXA6IF9jb21wdXRlU291cmNlTWFwMi5kZWZhdWx0LmNhbGwodm9pZCAwLCBcbiAgICAgICAgICB0cmFuc2Zvcm1lclJlc3VsdCxcbiAgICAgICAgICBvcHRpb25zLmZpbGVQYXRoLFxuICAgICAgICAgIG9wdGlvbnMuc291cmNlTWFwT3B0aW9ucyxcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIHN1Y3Jhc2VDb250ZXh0LnRva2VuUHJvY2Vzc29yLnRva2VucyxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChvcHRpb25zLmZpbGVQYXRoKSB7XG4gICAgICBlLm1lc3NhZ2UgPSBgRXJyb3IgdHJhbnNmb3JtaW5nICR7b3B0aW9ucy5maWxlUGF0aH06ICR7ZS5tZXNzYWdlfWA7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn0gZXhwb3J0cy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG5cbi8qKlxuICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdWNyYXNlIHRva2VucywgbW9zdGx5IHVzZWZ1bCBmb3JcbiAqIGRpYWdub3N0aWMgcHVycG9zZXMuXG4gKi9cbiBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRUb2tlbnMoY29kZSwgb3B0aW9ucykge1xuICBjb25zdCB0b2tlbnMgPSBnZXRTdWNyYXNlQ29udGV4dChjb2RlLCBvcHRpb25zKS50b2tlblByb2Nlc3Nvci50b2tlbnM7XG4gIHJldHVybiBfZm9ybWF0VG9rZW5zMi5kZWZhdWx0LmNhbGwodm9pZCAwLCBjb2RlLCB0b2tlbnMpO1xufSBleHBvcnRzLmdldEZvcm1hdHRlZFRva2VucyA9IGdldEZvcm1hdHRlZFRva2VucztcblxuLyoqXG4gKiBDYWxsIGludG8gdGhlIHBhcnNlci90b2tlbml6ZXIgYW5kIGRvIHNvbWUgZnVydGhlciBwcmVwcm9jZXNzaW5nOlxuICogLSBDb21lIHVwIHdpdGggYSBzZXQgb2YgdXNlZCBuYW1lcyBzbyB0aGF0IHdlIGNhbiBhc3NpZ24gbmV3IG5hbWVzLlxuICogLSBQcmVwcm9jZXNzIGFsbCBpbXBvcnQvZXhwb3J0IHN0YXRlbWVudHMgc28gd2Uga25vdyB3aGljaCBnbG9iYWxzIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICogLSBDb21wdXRlIHNpdHVhdGlvbnMgd2hlcmUgYW55IG9mIHRob3NlIGdsb2JhbHMgYXJlIHNoYWRvd2VkLlxuICpcbiAqIEluIHRoZSBmdXR1cmUsIHNvbWUgb2YgdGhlc2UgcHJlcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgc2tpcHBlZCBiYXNlZCBvbiB3aGF0IGFjdHVhbCB3b3JrIGlzXG4gKiBiZWluZyBkb25lLlxuICovXG5mdW5jdGlvbiBnZXRTdWNyYXNlQ29udGV4dChjb2RlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGlzSlNYRW5hYmxlZCA9IG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcImpzeFwiKTtcbiAgY29uc3QgaXNUeXBlU2NyaXB0RW5hYmxlZCA9IG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcInR5cGVzY3JpcHRcIik7XG4gIGNvbnN0IGlzRmxvd0VuYWJsZWQgPSBvcHRpb25zLnRyYW5zZm9ybXMuaW5jbHVkZXMoXCJmbG93XCIpO1xuICBjb25zdCBkaXNhYmxlRVNUcmFuc2Zvcm1zID0gb3B0aW9ucy5kaXNhYmxlRVNUcmFuc2Zvcm1zID09PSB0cnVlO1xuICBjb25zdCBmaWxlID0gX3BhcnNlci5wYXJzZS5jYWxsKHZvaWQgMCwgY29kZSwgaXNKU1hFbmFibGVkLCBpc1R5cGVTY3JpcHRFbmFibGVkLCBpc0Zsb3dFbmFibGVkKTtcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnM7XG4gIGNvbnN0IHNjb3BlcyA9IGZpbGUuc2NvcGVzO1xuXG4gIGNvbnN0IG5hbWVNYW5hZ2VyID0gbmV3ICgwLCBfTmFtZU1hbmFnZXIyLmRlZmF1bHQpKGNvZGUsIHRva2Vucyk7XG4gIGNvbnN0IGhlbHBlck1hbmFnZXIgPSBuZXcgKDAsIF9IZWxwZXJNYW5hZ2VyLkhlbHBlck1hbmFnZXIpKG5hbWVNYW5hZ2VyKTtcbiAgY29uc3QgdG9rZW5Qcm9jZXNzb3IgPSBuZXcgKDAsIF9Ub2tlblByb2Nlc3NvcjIuZGVmYXVsdCkoXG4gICAgY29kZSxcbiAgICB0b2tlbnMsXG4gICAgaXNGbG93RW5hYmxlZCxcbiAgICBkaXNhYmxlRVNUcmFuc2Zvcm1zLFxuICAgIGhlbHBlck1hbmFnZXIsXG4gICk7XG4gIGNvbnN0IGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wID0gQm9vbGVhbihvcHRpb25zLmVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wKTtcblxuICBsZXQgaW1wb3J0UHJvY2Vzc29yID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcImltcG9ydHNcIikpIHtcbiAgICBpbXBvcnRQcm9jZXNzb3IgPSBuZXcgKDAsIF9DSlNJbXBvcnRQcm9jZXNzb3IyLmRlZmF1bHQpKFxuICAgICAgbmFtZU1hbmFnZXIsXG4gICAgICB0b2tlblByb2Nlc3NvcixcbiAgICAgIGVuYWJsZUxlZ2FjeVR5cGVTY3JpcHRNb2R1bGVJbnRlcm9wLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcInR5cGVzY3JpcHRcIiksXG4gICAgICBCb29sZWFuKG9wdGlvbnMua2VlcFVudXNlZEltcG9ydHMpLFxuICAgICAgaGVscGVyTWFuYWdlcixcbiAgICApO1xuICAgIGltcG9ydFByb2Nlc3Nvci5wcmVwcm9jZXNzVG9rZW5zKCk7XG4gICAgLy8gV2UgbmVlZCB0byBtYXJrIHNoYWRvd2VkIGdsb2JhbHMgYWZ0ZXIgcHJvY2Vzc2luZyBpbXBvcnRzIHNvIHdlIGtub3cgdGhhdCB0aGUgZ2xvYmFscyBhcmUsXG4gICAgLy8gYnV0IGJlZm9yZSB0eXBlLW9ubHkgaW1wb3J0IHBydW5pbmcsIHNpbmNlIHRoYXQgcmVsaWVzIG9uIHNoYWRvd2luZyBpbmZvcm1hdGlvbi5cbiAgICBfaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMyLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRva2VuUHJvY2Vzc29yLCBzY29wZXMsIGltcG9ydFByb2Nlc3Nvci5nZXRHbG9iYWxOYW1lcygpKTtcbiAgICBpZiAob3B0aW9ucy50cmFuc2Zvcm1zLmluY2x1ZGVzKFwidHlwZXNjcmlwdFwiKSAmJiAhb3B0aW9ucy5rZWVwVW51c2VkSW1wb3J0cykge1xuICAgICAgaW1wb3J0UHJvY2Vzc29yLnBydW5lVHlwZU9ubHlJbXBvcnRzKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMudHJhbnNmb3Jtcy5pbmNsdWRlcyhcInR5cGVzY3JpcHRcIikgJiYgIW9wdGlvbnMua2VlcFVudXNlZEltcG9ydHMpIHtcbiAgICAvLyBTaGFkb3dlZCBnbG9iYWwgZGV0ZWN0aW9uIGlzIG5lZWRlZCBmb3IgVFMgaW1wbGljaXQgZWxpc2lvbiBvZiBpbXBvcnRlZCBuYW1lcy5cbiAgICBfaWRlbnRpZnlTaGFkb3dlZEdsb2JhbHMyLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRva2VuUHJvY2Vzc29yLCBzY29wZXMsIF9nZXRUU0ltcG9ydGVkTmFtZXMyLmRlZmF1bHQuY2FsbCh2b2lkIDAsIHRva2VuUHJvY2Vzc29yKSk7XG4gIH1cbiAgcmV0dXJuIHt0b2tlblByb2Nlc3Nvciwgc2NvcGVzLCBuYW1lTWFuYWdlciwgaW1wb3J0UHJvY2Vzc29yLCBoZWxwZXJNYW5hZ2VyfTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO3ZhciBiPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsYz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLGQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGU9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsZj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxnPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LGg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksaz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLGw9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxtPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxuPWI/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLHA9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMscT1iP1xuU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik6NjAxMjAscj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LHQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNix2PWI/U3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpOjYwMTIxLHc9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnVuZGFtZW50YWxcIik6NjAxMTcseD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIik6NjAxMTgseT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTo2MDExOTtcbmZ1bmN0aW9uIHooYSl7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSl7dmFyIHU9YS4kJHR5cGVvZjtzd2l0Y2godSl7Y2FzZSBjOnN3aXRjaChhPWEudHlwZSxhKXtjYXNlIGw6Y2FzZSBtOmNhc2UgZTpjYXNlIGc6Y2FzZSBmOmNhc2UgcDpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgbjpjYXNlIHQ6Y2FzZSByOmNhc2UgaDpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiB1fX1jYXNlIGQ6cmV0dXJuIHV9fX1mdW5jdGlvbiBBKGEpe3JldHVybiB6KGEpPT09bX1leHBvcnRzLkFzeW5jTW9kZT1sO2V4cG9ydHMuQ29uY3VycmVudE1vZGU9bTtleHBvcnRzLkNvbnRleHRDb25zdW1lcj1rO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWg7ZXhwb3J0cy5FbGVtZW50PWM7ZXhwb3J0cy5Gb3J3YXJkUmVmPW47ZXhwb3J0cy5GcmFnbWVudD1lO2V4cG9ydHMuTGF6eT10O2V4cG9ydHMuTWVtbz1yO2V4cG9ydHMuUG9ydGFsPWQ7XG5leHBvcnRzLlByb2ZpbGVyPWc7ZXhwb3J0cy5TdHJpY3RNb2RlPWY7ZXhwb3J0cy5TdXNwZW5zZT1wO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIEEoYSl8fHooYSk9PT1sfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9QTtleHBvcnRzLmlzQ29udGV4dENvbnN1bWVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09a307ZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWh9O2V4cG9ydHMuaXNFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJmEuJCR0eXBlb2Y9PT1jfTtleHBvcnRzLmlzRm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PW59O2V4cG9ydHMuaXNGcmFnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWV9O2V4cG9ydHMuaXNMYXp5PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09dH07XG5leHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXJ9O2V4cG9ydHMuaXNQb3J0YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1kfTtleHBvcnRzLmlzUHJvZmlsZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1nfTtleHBvcnRzLmlzU3RyaWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWZ9O2V4cG9ydHMuaXNTdXNwZW5zZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXB9O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWV8fGE9PT1tfHxhPT09Z3x8YT09PWZ8fGE9PT1wfHxhPT09cXx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT10fHxhLiQkdHlwZW9mPT09cnx8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1rfHxhLiQkdHlwZW9mPT09bnx8YS4kJHR5cGVvZj09PXd8fGEuJCR0eXBlb2Y9PT14fHxhLiQkdHlwZW9mPT09eXx8YS4kJHR5cGVvZj09PXYpfTtleHBvcnRzLnR5cGVPZj16O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7XG4gICAgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHtcbiAgICAgIHZhciB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiLyoqIE5vcm1hbCBoeWRyYXRpb24gdGhhdCBhdHRhY2hlcyB0byBhIERPTSB0cmVlIGJ1dCBkb2VzIG5vdCBkaWZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1PREVfSFlEUkFURSA9IDEgPDwgNTtcbi8qKiBTaWduaWZpZXMgdGhpcyBWTm9kZSBzdXNwZW5kZWQgb24gdGhlIHByZXZpb3VzIHJlbmRlciAqL1xuZXhwb3J0IGNvbnN0IE1PREVfU1VTUEVOREVEID0gMSA8PCA3O1xuLyoqIEluZGljYXRlcyB0aGF0IHRoaXMgbm9kZSBuZWVkcyB0byBiZSBpbnNlcnRlZCB3aGlsZSBwYXRjaGluZyBjaGlsZHJlbiAqL1xuZXhwb3J0IGNvbnN0IElOU0VSVF9WTk9ERSA9IDEgPDwgMTY7XG4vKiogSW5kaWNhdGVzIGEgVk5vZGUgaGFzIGJlZW4gbWF0Y2hlZCB3aXRoIGFub3RoZXIgVk5vZGUgaW4gdGhlIGRpZmYgKi9cbmV4cG9ydCBjb25zdCBNQVRDSEVEID0gMSA8PCAxNztcblxuLyoqIFJlc2V0IGFsbCBtb2RlIGZsYWdzICovXG5leHBvcnQgY29uc3QgUkVTRVRfTU9ERSA9IH4oTU9ERV9IWURSQVRFIHwgTU9ERV9TVVNQRU5ERUQpO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfT0JKID0gLyoqIEB0eXBlIHthbnl9ICovICh7fSk7XG5leHBvcnQgY29uc3QgRU1QVFlfQVJSID0gW107XG5leHBvcnQgY29uc3QgSVNfTk9OX0RJTUVOU0lPTkFMID1cblx0L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaTtcbiIsICJpbXBvcnQgeyBFTVBUWV9BUlIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBBc3NpZ24gcHJvcGVydGllcyBmcm9tIGBwcm9wc2AgdG8gYG9iamBcbiAqIEB0ZW1wbGF0ZSBPLCBQIFRoZSBvYmogYW5kIHByb3BzIHR5cGVzXG4gKiBAcGFyYW0ge099IG9iaiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0b1xuICogQHBhcmFtIHtQfSBwcm9wcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJucyB7TyAmIFB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqLCBwcm9wcykge1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGNoYW5nZSB0aGUgdHlwZSBvZiBgb2JqYCB0byBiZSBgTyAmIFBgXG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIG9ialtpXSA9IHByb3BzW2ldO1xuXHRyZXR1cm4gLyoqIEB0eXBlIHtPICYgUH0gKi8gKG9iaik7XG59XG5cbi8qKlxuICogUmVtb3ZlIGEgY2hpbGQgbm9kZSBmcm9tIGl0cyBwYXJlbnQgaWYgYXR0YWNoZWQuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvclxuICogSUUxMSB3aGljaCBkb2Vzbid0IHN1cHBvcnQgYEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSgpYC4gVXNpbmcgdGhpcyBmdW5jdGlvblxuICogaXMgc21hbGxlciB0aGFuIGluY2x1ZGluZyBhIGRlZGljYXRlZCBwb2x5ZmlsbC5cbiAqIEBwYXJhbSB7cHJlYWN0LkNvbnRhaW5lck5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVtb3ZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcblx0aWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzbGljZSA9IEVNUFRZX0FSUi5zbGljZTtcbiIsICJpbXBvcnQgeyBfY2F0Y2hFcnJvciB9IGZyb20gJy4vZGlmZi9jYXRjaC1lcnJvcic7XG5cbi8qKlxuICogVGhlIGBvcHRpb25gIG9iamVjdCBjYW4gcG90ZW50aWFsbHkgY29udGFpbiBjYWxsYmFjayBmdW5jdGlvbnNcbiAqIHRoYXQgYXJlIGNhbGxlZCBkdXJpbmcgdmFyaW91cyBzdGFnZXMgb2Ygb3VyIHJlbmRlcmVyLiBUaGlzIGlzIHRoZVxuICogZm91bmRhdGlvbiBvbiB3aGljaCBhbGwgb3VyIGFkZG9ucyBsaWtlIGBwcmVhY3QvZGVidWdgLCBgcHJlYWN0L2NvbXBhdGAsXG4gKiBhbmQgYHByZWFjdC9ob29rc2AgYXJlIGJhc2VkIG9uLiBTZWUgdGhlIGBPcHRpb25zYCB0eXBlIGluIGBpbnRlcm5hbC5kLnRzYFxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb24gaG9va3MgKG1vc3QgZWRpdG9ycy9JREVzIGFsbG93IHlvdSB0b1xuICogY3RybCtjbGljayBvciBjbWQrY2xpY2sgb24gbWFjIHRoZSB0eXBlIGRlZmluaXRpb24gYmVsb3cpLlxuICogQHR5cGUge09wdGlvbnN9XG4gKi9cbmNvbnN0IG9wdGlvbnMgPSB7XG5cdF9jYXRjaEVycm9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBvcHRpb25zO1xuIiwgImltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5cbmxldCB2bm9kZUlkID0gMDtcblxuLyoqXG4gKiBDcmVhdGUgYW4gdmlydHVhbCBub2RlICh1c2VkIGZvciBKU1gpXG4gKiBAcGFyYW0ge1ZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudCBjb25zdHJ1Y3RvciBmb3IgdGhpc1xuICogdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGwgfCB1bmRlZmluZWR9IFtwcm9wc10gVGhlIHByb3BlcnRpZXMgb2YgdGhlIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4nKS5Db21wb25lbnRDaGlsZHJlbj59IFtjaGlsZHJlbl0gVGhlIGNoaWxkcmVuIG9mIHRoZVxuICogdmlydHVhbCBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuXHRsZXQgbm9ybWFsaXplZFByb3BzID0ge30sXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRpO1xuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0fVxuXG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jaGlsZHJlbiA9XG5cdFx0XHRhcmd1bWVudHMubGVuZ3RoID4gMyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGNoaWxkcmVuO1xuXHR9XG5cblx0Ly8gSWYgYSBDb21wb25lbnQgVk5vZGUsIGNoZWNrIGZvciBhbmQgYXBwbHkgZGVmYXVsdFByb3BzXG5cdC8vIE5vdGU6IHR5cGUgbWF5IGJlIHVuZGVmaW5lZCBpbiBkZXZlbG9wbWVudCwgbXVzdCBuZXZlciBlcnJvciBoZXJlLlxuXHRpZiAodHlwZW9mIHR5cGUgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlLmRlZmF1bHRQcm9wcyAhPSBudWxsKSB7XG5cdFx0Zm9yIChpIGluIHR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzW2ldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gdHlwZS5kZWZhdWx0UHJvcHNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIG5vcm1hbGl6ZWRQcm9wcywga2V5LCByZWYsIG51bGwpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIFZOb2RlICh1c2VkIGludGVybmFsbHkgYnkgUHJlYWN0KVxuICogQHBhcmFtIHtWTm9kZVtcInR5cGVcIl19IHR5cGUgVGhlIG5vZGUgbmFtZSBvciBDb21wb25lbnRcbiAqIENvbnN0cnVjdG9yIGZvciB0aGlzIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3QgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBwcm9wcyBUaGUgcHJvcGVydGllcyBvZiB0aGlzIHZpcnR1YWwgbm9kZS5cbiAqIElmIHRoaXMgdmlydHVhbCBub2RlIHJlcHJlc2VudHMgYSB0ZXh0IG5vZGUsIHRoaXMgaXMgdGhlIHRleHQgb2YgdGhlIG5vZGUgKHN0cmluZyBvciBudW1iZXIpLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBrZXkgVGhlIGtleSBmb3IgdGhpcyB2aXJ0dWFsIG5vZGUsIHVzZWQgd2hlblxuICogZGlmZmluZyBpdCBhZ2FpbnN0IGl0cyBjaGlsZHJlblxuICogQHBhcmFtIHtWTm9kZVtcInJlZlwiXX0gcmVmIFRoZSByZWYgcHJvcGVydHkgdGhhdCB3aWxsXG4gKiByZWNlaXZlIGEgcmVmZXJlbmNlIHRvIGl0cyBjcmVhdGVkIGNoaWxkXG4gKiBAcmV0dXJucyB7Vk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywga2V5LCByZWYsIG9yaWdpbmFsKSB7XG5cdC8vIFY4IHNlZW1zIHRvIGJlIGJldHRlciBhdCBkZXRlY3RpbmcgdHlwZSBzaGFwZXMgaWYgdGhlIG9iamVjdCBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBjYWxsIHNpdGVcblx0Ly8gRG8gbm90IGlubGluZSBpbnRvIGNyZWF0ZUVsZW1lbnQgYW5kIGNvZXJjZVRvVk5vZGUhXG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGNvbnN0IHZub2RlID0ge1xuXHRcdHR5cGUsXG5cdFx0cHJvcHMsXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRfY2hpbGRyZW46IG51bGwsXG5cdFx0X3BhcmVudDogbnVsbCxcblx0XHRfZGVwdGg6IDAsXG5cdFx0X2RvbTogbnVsbCxcblx0XHQvLyBfbmV4dERvbSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHVuZGVmaW5lZCBiL2MgaXQgd2lsbCBldmVudHVhbGx5XG5cdFx0Ly8gYmUgc2V0IHRvIGRvbS5uZXh0U2libGluZyB3aGljaCBjYW4gcmV0dXJuIGBudWxsYCBhbmQgaXQgaXMgaW1wb3J0YW50XG5cdFx0Ly8gdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIHVuaW5pdGlhbGl6ZWQgX25leHREb20gYW5kXG5cdFx0Ly8gYSBfbmV4dERvbSB0aGF0IGhhcyBiZWVuIHNldCB0byBgbnVsbGBcblx0XHRfbmV4dERvbTogdW5kZWZpbmVkLFxuXHRcdF9jb21wb25lbnQ6IG51bGwsXG5cdFx0Y29uc3RydWN0b3I6IHVuZGVmaW5lZCxcblx0XHRfb3JpZ2luYWw6IG9yaWdpbmFsID09IG51bGwgPyArK3Zub2RlSWQgOiBvcmlnaW5hbCxcblx0XHRfaW5kZXg6IC0xLFxuXHRcdF9mbGFnczogMFxuXHR9O1xuXG5cdC8vIE9ubHkgaW52b2tlIHRoZSB2bm9kZSBob29rIGlmIHRoaXMgd2FzICpub3QqIGEgZGlyZWN0IGNvcHk6XG5cdGlmIChvcmlnaW5hbCA9PSBudWxsICYmIG9wdGlvbnMudm5vZGUgIT0gbnVsbCkgb3B0aW9ucy52bm9kZSh2bm9kZSk7XG5cblx0cmV0dXJuIHZub2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuXHRyZXR1cm4geyBjdXJyZW50OiBudWxsIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGcmFnbWVudChwcm9wcykge1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCBQcmVhY3QgVk5vZGUuXG4gKiBAcGFyYW0geyp9IHZub2RlXG4gKiBAcmV0dXJucyB7dm5vZGUgaXMgVk5vZGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1ZhbGlkRWxlbWVudCA9IHZub2RlID0+XG5cdHZub2RlICE9IG51bGwgJiYgdm5vZGUuY29uc3RydWN0b3IgPT0gdW5kZWZpbmVkO1xuIiwgImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBkaWZmLCBjb21taXRSb290IH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgTU9ERV9IWURSQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEJhc2UgQ29tcG9uZW50IGNsYXNzLiBQcm92aWRlcyBgc2V0U3RhdGUoKWAgYW5kIGBmb3JjZVVwZGF0ZSgpYCwgd2hpY2hcbiAqIHRyaWdnZXIgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgVGhlIGluaXRpYWwgY29tcG9uZW50IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdH0gY29udGV4dCBUaGUgaW5pdGlhbCBjb250ZXh0IGZyb20gcGFyZW50IGNvbXBvbmVudHMnXG4gKiBnZXRDaGlsZENvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2VDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcblx0dGhpcy5wcm9wcyA9IHByb3BzO1xuXHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBjb21wb25lbnQgc3RhdGUgYW5kIHNjaGVkdWxlIGEgcmUtcmVuZGVyLlxuICogQHRoaXMge0NvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgKChzOiBvYmplY3QsIHA6IG9iamVjdCkgPT4gb2JqZWN0KX0gdXBkYXRlIEEgaGFzaCBvZiBzdGF0ZVxuICogcHJvcGVydGllcyB0byB1cGRhdGUgd2l0aCBuZXcgdmFsdWVzIG9yIGEgZnVuY3Rpb24gdGhhdCBnaXZlbiB0aGUgY3VycmVudFxuICogc3RhdGUgYW5kIHByb3BzIHJldHVybnMgYSBuZXcgcGFydGlhbCBzdGF0ZVxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uY2UgY29tcG9uZW50IHN0YXRlIGlzXG4gKiB1cGRhdGVkXG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHVwZGF0ZSwgY2FsbGJhY2spIHtcblx0Ly8gb25seSBjbG9uZSBzdGF0ZSB3aGVuIGNvcHlpbmcgdG8gbmV4dFN0YXRlIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgcztcblx0aWYgKHRoaXMuX25leHRTdGF0ZSAhPSBudWxsICYmIHRoaXMuX25leHRTdGF0ZSAhPT0gdGhpcy5zdGF0ZSkge1xuXHRcdHMgPSB0aGlzLl9uZXh0U3RhdGU7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IHRoaXMuX25leHRTdGF0ZSA9IGFzc2lnbih7fSwgdGhpcy5zdGF0ZSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHVwZGF0ZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gU29tZSBsaWJyYXJpZXMgbGlrZSBgaW1tZXJgIG1hcmsgdGhlIGN1cnJlbnQgc3RhdGUgYXMgcmVhZG9ubHksXG5cdFx0Ly8gcHJldmVudGluZyB1cyBmcm9tIG11dGF0aW5nIGl0LCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LiBTZWUgIzI3MTZcblx0XHR1cGRhdGUgPSB1cGRhdGUoYXNzaWduKHt9LCBzKSwgdGhpcy5wcm9wcyk7XG5cdH1cblxuXHRpZiAodXBkYXRlKSB7XG5cdFx0YXNzaWduKHMsIHVwZGF0ZSk7XG5cdH1cblxuXHQvLyBTa2lwIHVwZGF0ZSBpZiB1cGRhdGVyIGZ1bmN0aW9uIHJldHVybmVkIG51bGxcblx0aWYgKHVwZGF0ZSA9PSBudWxsKSByZXR1cm47XG5cblx0aWYgKHRoaXMuX3Zub2RlKSB7XG5cdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLl9zdGF0ZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHR9XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBJbW1lZGlhdGVseSBwZXJmb3JtIGEgc3luY2hyb25vdXMgcmUtcmVuZGVyIG9mIHRoZSBjb21wb25lbnRcbiAqIEB0aGlzIHtDb21wb25lbnR9XG4gKiBAcGFyYW0geygpID0+IHZvaWR9IFtjYWxsYmFja10gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzXG4gKiByZS1yZW5kZXJlZFxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRpZiAodGhpcy5fdm5vZGUpIHtcblx0XHQvLyBTZXQgcmVuZGVyIG1vZGUgc28gdGhhdCB3ZSBjYW4gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgcmVuZGVyIHJlcXVlc3Rcblx0XHQvLyBpcyBjb21pbmcgZnJvbS4gV2UgbmVlZCB0aGlzIGJlY2F1c2UgZm9yY2VVcGRhdGUgc2hvdWxkIG5ldmVyIGNhbGxcblx0XHQvLyBzaG91bGRDb21wb25lbnRVcGRhdGVcblx0XHR0aGlzLl9mb3JjZSA9IHRydWU7XG5cdFx0aWYgKGNhbGxiYWNrKSB0aGlzLl9yZW5kZXJDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBBY2NlcHRzIGBwcm9wc2AgYW5kIGBzdGF0ZWAsIGFuZCByZXR1cm5zIGEgbmV3IFZpcnR1YWwgRE9NIHRyZWUgdG8gYnVpbGQuXG4gKiBWaXJ0dWFsIERPTSBpcyBnZW5lcmFsbHkgY29uc3RydWN0ZWQgdmlhIFtKU1hdKGh0dHA6Ly9qYXNvbmZvcm1hdC5jb20vd3RmLWlzLWpzeCkuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgUHJvcHMgKGVnOiBKU1ggYXR0cmlidXRlcykgcmVjZWl2ZWQgZnJvbSBwYXJlbnRcbiAqIGVsZW1lbnQvY29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgVGhlIGNvbXBvbmVudCdzIGN1cnJlbnQgc3RhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IENvbnRleHQgb2JqZWN0LCBhcyByZXR1cm5lZCBieSB0aGUgbmVhcmVzdFxuICogYW5jZXN0b3IncyBgZ2V0Q2hpbGRDb250ZXh0KClgXG4gKiBAcmV0dXJucyB7Q29tcG9uZW50Q2hpbGRyZW4gfCB2b2lkfVxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBGcmFnbWVudDtcblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsfSBbY2hpbGRJbmRleF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERvbVNpYmxpbmcodm5vZGUsIGNoaWxkSW5kZXgpIHtcblx0aWYgKGNoaWxkSW5kZXggPT0gbnVsbCkge1xuXHRcdC8vIFVzZSBjaGlsZEluZGV4PT1udWxsIGFzIGEgc2lnbmFsIHRvIHJlc3VtZSB0aGUgc2VhcmNoIGZyb20gdGhlIHZub2RlJ3Mgc2libGluZ1xuXHRcdHJldHVybiB2bm9kZS5fcGFyZW50XG5cdFx0XHQ/IGdldERvbVNpYmxpbmcodm5vZGUuX3BhcmVudCwgdm5vZGUuX2luZGV4ICsgMSlcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdGxldCBzaWJsaW5nO1xuXHRmb3IgKDsgY2hpbGRJbmRleCA8IHZub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdHNpYmxpbmcgPSB2bm9kZS5fY2hpbGRyZW5bY2hpbGRJbmRleF07XG5cblx0XHRpZiAoc2libGluZyAhPSBudWxsICYmIHNpYmxpbmcuX2RvbSAhPSBudWxsKSB7XG5cdFx0XHQvLyBTaW5jZSB1cGRhdGVQYXJlbnREb21Qb2ludGVycyBrZWVwcyBfZG9tIHBvaW50ZXIgY29ycmVjdCxcblx0XHRcdC8vIHdlIGNhbiByZWx5IG9uIF9kb20gdG8gdGVsbCB1cyBpZiB0aGlzIHN1YnRyZWUgY29udGFpbnMgYVxuXHRcdFx0Ly8gcmVuZGVyZWQgRE9NIG5vZGUsIGFuZCB3aGF0IHRoZSBmaXJzdCByZW5kZXJlZCBET00gbm9kZSBpc1xuXHRcdFx0cmV0dXJuIHNpYmxpbmcuX2RvbTtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBub3QgZm91bmQgYSBET00gbm9kZSBpbiB0aGlzIHZub2RlJ3MgY2hpbGRyZW4uXG5cdC8vIFdlIG11c3QgcmVzdW1lIGZyb20gdGhpcyB2bm9kZSdzIHNpYmxpbmcgKGluIGl0J3MgcGFyZW50IF9jaGlsZHJlbiBhcnJheSlcblx0Ly8gT25seSBjbGltYiB1cCBhbmQgc2VhcmNoIHRoZSBwYXJlbnQgaWYgd2UgYXJlbid0IHNlYXJjaGluZyB0aHJvdWdoIGEgRE9NXG5cdC8vIFZOb2RlIChtZWFuaW5nIHdlIHJlYWNoZWQgdGhlIERPTSBwYXJlbnQgb2YgdGhlIG9yaWdpbmFsIHZub2RlIHRoYXQgYmVnYW5cblx0Ly8gdGhlIHNlYXJjaClcblx0cmV0dXJuIHR5cGVvZiB2bm9kZS50eXBlID09ICdmdW5jdGlvbicgPyBnZXREb21TaWJsaW5nKHZub2RlKSA6IG51bGw7XG59XG5cbi8qKlxuICogVHJpZ2dlciBpbi1wbGFjZSByZS1yZW5kZXJpbmcgb2YgYSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50IFRoZSBjb21wb25lbnQgdG8gcmVyZW5kZXJcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRsZXQgb2xkVk5vZGUgPSBjb21wb25lbnQuX3Zub2RlLFxuXHRcdG9sZERvbSA9IG9sZFZOb2RlLl9kb20sXG5cdFx0Y29tbWl0UXVldWUgPSBbXSxcblx0XHRyZWZRdWV1ZSA9IFtdO1xuXG5cdGlmIChjb21wb25lbnQuX3BhcmVudERvbSkge1xuXHRcdGNvbnN0IG5ld1ZOb2RlID0gYXNzaWduKHt9LCBvbGRWTm9kZSk7XG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsICsgMTtcblx0XHRpZiAob3B0aW9ucy52bm9kZSkgb3B0aW9ucy52bm9kZShuZXdWTm9kZSk7XG5cblx0XHRkaWZmKFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Y29tcG9uZW50Ll9nbG9iYWxDb250ZXh0LFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20ubmFtZXNwYWNlVVJJLFxuXHRcdFx0b2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFID8gW29sZERvbV0gOiBudWxsLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRvbGREb20gPT0gbnVsbCA/IGdldERvbVNpYmxpbmcob2xkVk5vZGUpIDogb2xkRG9tLFxuXHRcdFx0ISEob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKSxcblx0XHRcdHJlZlF1ZXVlXG5cdFx0KTtcblxuXHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9IG9sZFZOb2RlLl9vcmlnaW5hbDtcblx0XHRuZXdWTm9kZS5fcGFyZW50Ll9jaGlsZHJlbltuZXdWTm9kZS5faW5kZXhdID0gbmV3Vk5vZGU7XG5cdFx0Y29tbWl0Um9vdChjb21taXRRdWV1ZSwgbmV3Vk5vZGUsIHJlZlF1ZXVlKTtcblxuXHRcdGlmIChuZXdWTm9kZS5fZG9tICE9IG9sZERvbSkge1xuXHRcdFx0dXBkYXRlUGFyZW50RG9tUG9pbnRlcnMobmV3Vk5vZGUpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzKHZub2RlKSB7XG5cdGlmICgodm5vZGUgPSB2bm9kZS5fcGFyZW50KSAhPSBudWxsICYmIHZub2RlLl9jb21wb25lbnQgIT0gbnVsbCkge1xuXHRcdHZub2RlLl9kb20gPSB2bm9kZS5fY29tcG9uZW50LmJhc2UgPSBudWxsO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdm5vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgY2hpbGQgPSB2bm9kZS5fY2hpbGRyZW5baV07XG5cdFx0XHRpZiAoY2hpbGQgIT0gbnVsbCAmJiBjaGlsZC5fZG9tICE9IG51bGwpIHtcblx0XHRcdFx0dm5vZGUuX2RvbSA9IHZub2RlLl9jb21wb25lbnQuYmFzZSA9IGNoaWxkLl9kb207XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1cGRhdGVQYXJlbnREb21Qb2ludGVycyh2bm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyIHF1ZXVlXG4gKiBAdHlwZSB7QXJyYXk8Q29tcG9uZW50Pn1cbiAqL1xubGV0IHJlcmVuZGVyUXVldWUgPSBbXTtcblxuLypcbiAqIFRoZSB2YWx1ZSBvZiBgQ29tcG9uZW50LmRlYm91bmNlYCBtdXN0IGFzeW5jaHJvbm91c2x5IGludm9rZSB0aGUgcGFzc2VkIGluIGNhbGxiYWNrLiBJdCBpc1xuICogaW1wb3J0YW50IHRoYXQgY29udHJpYnV0b3JzIHRvIFByZWFjdCBjYW4gY29uc2lzdGVudGx5IHJlYXNvbiBhYm91dCB3aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAsIGV0Yy5cbiAqIGRvLCBhbmQgd2hlbiB0aGVpciBlZmZlY3RzIHdpbGwgYmUgYXBwbGllZC4gU2VlIHRoZSBsaW5rcyBiZWxvdyBmb3Igc29tZSBmdXJ0aGVyIHJlYWRpbmcgb24gZGVzaWduaW5nXG4gKiBhc3luY2hyb25vdXMgQVBJcy5cbiAqICogW0Rlc2lnbmluZyBBUElzIGZvciBBc3luY2hyb255XShodHRwczovL2Jsb2cuaXpzLm1lLzIwMTMvMDgvZGVzaWduaW5nLWFwaXMtZm9yLWFzeW5jaHJvbnkpXG4gKiAqIFtDYWxsYmFja3Mgc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91c10oaHR0cHM6Ly9ibG9nLm9tZXRlci5jb20vMjAxMS8wNy8yNC9jYWxsYmFja3Mtc3luY2hyb25vdXMtYW5kLWFzeW5jaHJvbm91cy8pXG4gKi9cblxubGV0IHByZXZEZWJvdW5jZTtcblxuY29uc3QgZGVmZXIgPVxuXHR0eXBlb2YgUHJvbWlzZSA9PSAnZnVuY3Rpb24nXG5cdFx0PyBQcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpXG5cdFx0OiBzZXRUaW1lb3V0O1xuXG4vKipcbiAqIEVucXVldWUgYSByZXJlbmRlciBvZiBhIGNvbXBvbmVudFxuICogQHBhcmFtIHtDb21wb25lbnR9IGMgVGhlIGNvbXBvbmVudCB0byByZXJlbmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlcihjKSB7XG5cdGlmIChcblx0XHQoIWMuX2RpcnR5ICYmXG5cdFx0XHQoYy5fZGlydHkgPSB0cnVlKSAmJlxuXHRcdFx0cmVyZW5kZXJRdWV1ZS5wdXNoKGMpICYmXG5cdFx0XHQhcHJvY2Vzcy5fcmVyZW5kZXJDb3VudCsrKSB8fFxuXHRcdHByZXZEZWJvdW5jZSAhPT0gb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZ1xuXHQpIHtcblx0XHRwcmV2RGVib3VuY2UgPSBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nO1xuXHRcdChwcmV2RGVib3VuY2UgfHwgZGVmZXIpKHByb2Nlc3MpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb21wb25lbnR9IGFcbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBiXG4gKi9cbmNvbnN0IGRlcHRoU29ydCA9IChhLCBiKSA9PiBhLl92bm9kZS5fZGVwdGggLSBiLl92bm9kZS5fZGVwdGg7XG5cbi8qKiBGbHVzaCB0aGUgcmVuZGVyIHF1ZXVlIGJ5IHJlcmVuZGVyaW5nIGFsbCBxdWV1ZWQgY29tcG9uZW50cyAqL1xuZnVuY3Rpb24gcHJvY2VzcygpIHtcblx0bGV0IGM7XG5cdHJlcmVuZGVyUXVldWUuc29ydChkZXB0aFNvcnQpO1xuXHQvLyBEb24ndCB1cGRhdGUgYHJlbmRlckNvdW50YCB5ZXQuIEtlZXAgaXRzIHZhbHVlIG5vbi16ZXJvIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnlcblx0Ly8gcHJvY2VzcygpIGNhbGxzIGZyb20gZ2V0dGluZyBzY2hlZHVsZWQgd2hpbGUgYHF1ZXVlYCBpcyBzdGlsbCBiZWluZyBjb25zdW1lZC5cblx0d2hpbGUgKChjID0gcmVyZW5kZXJRdWV1ZS5zaGlmdCgpKSkge1xuXHRcdGlmIChjLl9kaXJ0eSkge1xuXHRcdFx0bGV0IHJlbmRlclF1ZXVlTGVuZ3RoID0gcmVyZW5kZXJRdWV1ZS5sZW5ndGg7XG5cdFx0XHRyZW5kZXJDb21wb25lbnQoYyk7XG5cdFx0XHRpZiAocmVyZW5kZXJRdWV1ZS5sZW5ndGggPiByZW5kZXJRdWV1ZUxlbmd0aCkge1xuXHRcdFx0XHQvLyBXaGVuIGkuZS4gcmVyZW5kZXJpbmcgYSBwcm92aWRlciBhZGRpdGlvbmFsIG5ldyBpdGVtcyBjYW4gYmUgaW5qZWN0ZWQsIHdlIHdhbnQgdG9cblx0XHRcdFx0Ly8ga2VlcCB0aGUgb3JkZXIgZnJvbSB0b3AgdG8gYm90dG9tIHdpdGggdGhvc2UgbmV3IGl0ZW1zIHNvIHdlIGNhbiBoYW5kbGUgdGhlbSBpbiBhXG5cdFx0XHRcdC8vIHNpbmdsZSBwYXNzXG5cdFx0XHRcdHJlcmVuZGVyUXVldWUuc29ydChkZXB0aFNvcnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRwcm9jZXNzLl9yZXJlbmRlckNvdW50ID0gMDtcbn1cblxucHJvY2Vzcy5fcmVyZW5kZXJDb3VudCA9IDA7XG4iLCAiaW1wb3J0IHsgSVNfTk9OX0RJTUVOU0lPTkFMIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4uL29wdGlvbnMnO1xuXG5mdW5jdGlvbiBzZXRTdHlsZShzdHlsZSwga2V5LCB2YWx1ZSkge1xuXHRpZiAoa2V5WzBdID09PSAnLScpIHtcblx0XHRzdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKTtcblx0fSBlbHNlIGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0c3R5bGVba2V5XSA9ICcnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnbnVtYmVyJyB8fCBJU19OT05fRElNRU5TSU9OQUwudGVzdChrZXkpKSB7XG5cdFx0c3R5bGVba2V5XSA9IHZhbHVlO1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlW2tleV0gPSB2YWx1ZSArICdweCc7XG5cdH1cbn1cblxuLy8gQSBsb2dpY2FsIGNsb2NrIHRvIHNvbHZlIGlzc3VlcyBsaWtlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcmVhY3Rqcy9wcmVhY3QvaXNzdWVzLzM5MjcuXG4vLyBXaGVuIHRoZSBET00gcGVyZm9ybXMgYW4gZXZlbnQgaXQgbGVhdmVzIG1pY3JvLXRpY2tzIGluIGJldHdlZW4gYnViYmxpbmcgdXAgd2hpY2ggbWVhbnMgdGhhdFxuLy8gYW4gZXZlbnQgY2FuIHRyaWdnZXIgb24gYSBuZXdseSByZWF0ZWQgRE9NLW5vZGUgd2hpbGUgdGhlIGV2ZW50IGJ1YmJsZXMgdXAuXG4vL1xuLy8gT3JpZ2luYWxseSBpbnNwaXJlZCBieSBWdWVcbi8vIChodHRwczovL2dpdGh1Yi5jb20vdnVlanMvY29yZS9ibG9iL2NhZWI4YTY4ODExYTFiMGY3OS9wYWNrYWdlcy9ydW50aW1lLWRvbS9zcmMvbW9kdWxlcy9ldmVudHMudHMjTDkwLUwxMDEpLFxuLy8gYnV0IG1vZGlmaWVkIHRvIHVzZSBhIGxvZ2ljYWwgY2xvY2sgaW5zdGVhZCBvZiBEYXRlLm5vdygpIGluIGNhc2UgZXZlbnQgaGFuZGxlcnMgZ2V0IGF0dGFjaGVkXG4vLyBhbmQgZXZlbnRzIGdldCBkaXNwYXRjaGVkIGR1cmluZyB0aGUgc2FtZSBtaWxsaXNlY29uZC5cbi8vXG4vLyBUaGUgY2xvY2sgaXMgaW5jcmVtZW50ZWQgYWZ0ZXIgZWFjaCBuZXcgZXZlbnQgZGlzcGF0Y2guIFRoaXMgYWxsb3dzIDEgMDAwIDAwMCBuZXcgZXZlbnRzXG4vLyBwZXIgc2Vjb25kIGZvciBvdmVyIDI4MCB5ZWFycyBiZWZvcmUgdGhlIHZhbHVlIHJlYWNoZXMgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgKDIqKjUzIC0gMSkuXG5sZXQgZXZlbnRDbG9jayA9IDA7XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgdmFsdWUgb24gYSBET00gbm9kZVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBkb20gVGhlIERPTSBub2RlIHRvIG1vZGlmeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0b1xuICogQHBhcmFtIHsqfSBvbGRWYWx1ZSBUaGUgb2xkIHZhbHVlIHRoZSBwcm9wZXJ0eSBoYWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2UgV2hldGhlciBvciBub3QgdGhpcyBET00gbm9kZSBpcyBhbiBTVkcgbm9kZSBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGRvbSwgbmFtZSwgdmFsdWUsIG9sZFZhbHVlLCBuYW1lc3BhY2UpIHtcblx0bGV0IHVzZUNhcHR1cmU7XG5cblx0bzogaWYgKG5hbWUgPT09ICdzdHlsZScpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRkb20uc3R5bGUuY3NzVGV4dCA9IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodHlwZW9mIG9sZFZhbHVlID09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGRvbS5zdHlsZS5jc3NUZXh0ID0gb2xkVmFsdWUgPSAnJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9sZFZhbHVlKSB7XG5cdFx0XHRcdGZvciAobmFtZSBpbiBvbGRWYWx1ZSkge1xuXHRcdFx0XHRcdGlmICghKHZhbHVlICYmIG5hbWUgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRzZXRTdHlsZShkb20uc3R5bGUsIG5hbWUsICcnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdGZvciAobmFtZSBpbiB2YWx1ZSkge1xuXHRcdFx0XHRcdGlmICghb2xkVmFsdWUgfHwgdmFsdWVbbmFtZV0gIT09IG9sZFZhbHVlW25hbWVdKSB7XG5cdFx0XHRcdFx0XHRzZXRTdHlsZShkb20uc3R5bGUsIG5hbWUsIHZhbHVlW25hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gQmVuY2htYXJrIGZvciBjb21wYXJpc29uOiBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzU3NGM5NTRiZGI5NjViOWEwMDk2NWFjNlxuXHRlbHNlIGlmIChuYW1lWzBdID09PSAnbycgJiYgbmFtZVsxXSA9PT0gJ24nKSB7XG5cdFx0dXNlQ2FwdHVyZSA9XG5cdFx0XHRuYW1lICE9PSAobmFtZSA9IG5hbWUucmVwbGFjZSgvKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSwgJyQxJykpO1xuXG5cdFx0Ly8gSW5mZXIgY29ycmVjdCBjYXNpbmcgZm9yIERPTSBidWlsdC1pbiBldmVudHM6XG5cdFx0aWYgKFxuXHRcdFx0bmFtZS50b0xvd2VyQ2FzZSgpIGluIGRvbSB8fFxuXHRcdFx0bmFtZSA9PT0gJ29uRm9jdXNPdXQnIHx8XG5cdFx0XHRuYW1lID09PSAnb25Gb2N1c0luJ1xuXHRcdClcblx0XHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMik7XG5cdFx0ZWxzZSBuYW1lID0gbmFtZS5zbGljZSgyKTtcblxuXHRcdGlmICghZG9tLl9saXN0ZW5lcnMpIGRvbS5fbGlzdGVuZXJzID0ge307XG5cdFx0ZG9tLl9saXN0ZW5lcnNbbmFtZSArIHVzZUNhcHR1cmVdID0gdmFsdWU7XG5cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdGlmICghb2xkVmFsdWUpIHtcblx0XHRcdFx0dmFsdWUuX2F0dGFjaGVkID0gZXZlbnRDbG9jaztcblx0XHRcdFx0ZG9tLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHR1c2VDYXB0dXJlID8gZXZlbnRQcm94eUNhcHR1cmUgOiBldmVudFByb3h5LFxuXHRcdFx0XHRcdHVzZUNhcHR1cmVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbHVlLl9hdHRhY2hlZCA9IG9sZFZhbHVlLl9hdHRhY2hlZDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHVzZUNhcHR1cmUgPyBldmVudFByb3h5Q2FwdHVyZSA6IGV2ZW50UHJveHksXG5cdFx0XHRcdHVzZUNhcHR1cmVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChuYW1lc3BhY2UgPT0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJykge1xuXHRcdFx0Ly8gTm9ybWFsaXplIGluY29ycmVjdCBwcm9wIHVzYWdlIGZvciBTVkc6XG5cdFx0XHQvLyAtIHhsaW5rOmhyZWYgLyB4bGlua0hyZWYgLS0+IGhyZWYgKHhsaW5rOmhyZWYgd2FzIHJlbW92ZWQgZnJvbSBTVkcgYW5kIGlzbid0IG5lZWRlZClcblx0XHRcdC8vIC0gY2xhc3NOYW1lIC0tPiBjbGFzc1xuXHRcdFx0bmFtZSA9IG5hbWUucmVwbGFjZSgveGxpbmsoSHw6aCkvLCAnaCcpLnJlcGxhY2UoL3NOYW1lJC8sICdzJyk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG5hbWUgIT0gJ3dpZHRoJyAmJlxuXHRcdFx0bmFtZSAhPSAnaGVpZ2h0JyAmJlxuXHRcdFx0bmFtZSAhPSAnaHJlZicgJiZcblx0XHRcdG5hbWUgIT0gJ2xpc3QnICYmXG5cdFx0XHRuYW1lICE9ICdmb3JtJyAmJlxuXHRcdFx0Ly8gRGVmYXVsdCB2YWx1ZSBpbiBicm93c2VycyBpcyBgLTFgIGFuZCBhbiBlbXB0eSBzdHJpbmcgaXNcblx0XHRcdC8vIGNhc3QgdG8gYDBgIGluc3RlYWRcblx0XHRcdG5hbWUgIT0gJ3RhYkluZGV4JyAmJlxuXHRcdFx0bmFtZSAhPSAnZG93bmxvYWQnICYmXG5cdFx0XHRuYW1lICE9ICdyb3dTcGFuJyAmJlxuXHRcdFx0bmFtZSAhPSAnY29sU3BhbicgJiZcblx0XHRcdG5hbWUgIT0gJ3JvbGUnICYmXG5cdFx0XHRuYW1lICE9ICdwb3BvdmVyJyAmJlxuXHRcdFx0bmFtZSBpbiBkb21cblx0XHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRvbVtuYW1lXSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xuXHRcdFx0XHQvLyBsYWJlbGxlZCBicmVhayBpcyAxYiBzbWFsbGVyIGhlcmUgdGhhbiBhIHJldHVybiBzdGF0ZW1lbnQgKHNvcnJ5KVxuXHRcdFx0XHRicmVhayBvO1xuXHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHR9XG5cblx0XHQvLyBhcmlhLSBhbmQgZGF0YS0gYXR0cmlidXRlcyBoYXZlIG5vIGJvb2xlYW4gcmVwcmVzZW50YXRpb24uXG5cdFx0Ly8gQSBgZmFsc2VgIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBhdHRyaWJ1dGUgbm90IGJlaW5nXG5cdFx0Ly8gcHJlc2VudCwgc28gd2UgY2FuJ3QgcmVtb3ZlIGl0LiBGb3Igbm9uLWJvb2xlYW4gYXJpYVxuXHRcdC8vIGF0dHJpYnV0ZXMgd2UgY291bGQgdHJlYXQgZmFsc2UgYXMgYSByZW1vdmFsLCBidXQgdGhlXG5cdFx0Ly8gYW1vdW50IG9mIGV4Y2VwdGlvbnMgd291bGQgY29zdCB0b28gbWFueSBieXRlcy4gT24gdG9wIG9mXG5cdFx0Ly8gdGhhdCBvdGhlciBmcmFtZXdvcmtzIGdlbmVyYWxseSBzdHJpbmdpZnkgYGZhbHNlYC5cblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gbmV2ZXIgc2VyaWFsaXplIGZ1bmN0aW9ucyBhcyBhdHRyaWJ1dGUgdmFsdWVzXG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSAhPT0gZmFsc2UgfHwgbmFtZVs0XSA9PT0gJy0nKSkge1xuXHRcdFx0ZG9tLnNldEF0dHJpYnV0ZShuYW1lLCBuYW1lID09ICdwb3BvdmVyJyAmJiB2YWx1ZSA9PSB0cnVlID8gJycgOiB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGV2ZW50IHByb3h5IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSB1c2VDYXB0dXJlIElzIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgY2FwdHVyZSBwaGFzZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50UHJveHkodXNlQ2FwdHVyZSkge1xuXHQvKipcblx0ICogUHJveHkgYW4gZXZlbnQgdG8gaG9va2VkIGV2ZW50IGhhbmRsZXJzXG5cdCAqIEBwYXJhbSB7UHJlYWN0RXZlbnR9IGUgVGhlIGV2ZW50IG9iamVjdCBmcm9tIHRoZSBicm93c2VyXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRyZXR1cm4gZnVuY3Rpb24gKGUpIHtcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG5cdFx0XHRjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnNbZS50eXBlICsgdXNlQ2FwdHVyZV07XG5cdFx0XHRpZiAoZS5fZGlzcGF0Y2hlZCA9PSBudWxsKSB7XG5cdFx0XHRcdGUuX2Rpc3BhdGNoZWQgPSBldmVudENsb2NrKys7XG5cblx0XHRcdFx0Ly8gV2hlbiBgZS5fZGlzcGF0Y2hlZGAgaXMgc21hbGxlciB0aGFuIHRoZSB0aW1lIHdoZW4gdGhlIHRhcmdldGVkIGV2ZW50XG5cdFx0XHRcdC8vIGhhbmRsZXIgd2FzIGF0dGFjaGVkIHdlIGtub3cgd2UgaGF2ZSBidWJibGVkIHVwIHRvIGFuIGVsZW1lbnQgdGhhdCB3YXMgYWRkZWRcblx0XHRcdFx0Ly8gZHVyaW5nIHBhdGNoaW5nIHRoZSBET00uXG5cdFx0XHR9IGVsc2UgaWYgKGUuX2Rpc3BhdGNoZWQgPCBldmVudEhhbmRsZXIuX2F0dGFjaGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBldmVudEhhbmRsZXIob3B0aW9ucy5ldmVudCA/IG9wdGlvbnMuZXZlbnQoZSkgOiBlKTtcblx0XHR9XG5cdH07XG59XG5cbmNvbnN0IGV2ZW50UHJveHkgPSBjcmVhdGVFdmVudFByb3h5KGZhbHNlKTtcbmNvbnN0IGV2ZW50UHJveHlDYXB0dXJlID0gY3JlYXRlRXZlbnRQcm94eSh0cnVlKTtcbiIsICJpbXBvcnQgeyBlbnF1ZXVlUmVuZGVyIH0gZnJvbSAnLi9jb21wb25lbnQnO1xuXG5leHBvcnQgbGV0IGkgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udGV4dChkZWZhdWx0VmFsdWUsIGNvbnRleHRJZCkge1xuXHRjb250ZXh0SWQgPSAnX19jQycgKyBpKys7XG5cblx0Y29uc3QgY29udGV4dCA9IHtcblx0XHRfaWQ6IGNvbnRleHRJZCxcblx0XHRfZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRDb25zdW1lcihwcm9wcywgY29udGV4dFZhbHVlKSB7XG5cdFx0XHQvLyByZXR1cm4gcHJvcHMuY2hpbGRyZW4oXG5cdFx0XHQvLyBcdGNvbnRleHRbY29udGV4dElkXSA/IGNvbnRleHRbY29udGV4dElkXS5wcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZVxuXHRcdFx0Ly8gKTtcblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbihjb250ZXh0VmFsdWUpO1xuXHRcdH0sXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRQcm92aWRlcihwcm9wcykge1xuXHRcdFx0aWYgKCF0aGlzLmdldENoaWxkQ29udGV4dCkge1xuXHRcdFx0XHQvKiogQHR5cGUge1NldDxDb21wb25lbnQ+IHwgbnVsbH0gKi9cblx0XHRcdFx0bGV0IHN1YnMgPSBuZXcgU2V0KCk7XG5cdFx0XHRcdGxldCBjdHggPSB7fTtcblx0XHRcdFx0Y3R4W2NvbnRleHRJZF0gPSB0aGlzO1xuXG5cdFx0XHRcdHRoaXMuZ2V0Q2hpbGRDb250ZXh0ID0gKCkgPT4gY3R4O1xuXG5cdFx0XHRcdHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0c3VicyA9IG51bGw7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiAoX3Byb3BzKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucHJvcHMudmFsdWUgIT09IF9wcm9wcy52YWx1ZSkge1xuXHRcdFx0XHRcdFx0c3Vicy5mb3JFYWNoKGMgPT4ge1xuXHRcdFx0XHRcdFx0XHRjLl9mb3JjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGVucXVldWVSZW5kZXIoYyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5zdWIgPSBjID0+IHtcblx0XHRcdFx0XHRzdWJzLmFkZChjKTtcblx0XHRcdFx0XHRsZXQgb2xkID0gYy5jb21wb25lbnRXaWxsVW5tb3VudDtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHN1YnMpIHtcblx0XHRcdFx0XHRcdFx0c3Vicy5kZWxldGUoYyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAob2xkKSBvbGQuY2FsbChjKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG5cdFx0fVxuXHR9O1xuXG5cdC8vIERldnRvb2xzIG5lZWRzIGFjY2VzcyB0byB0aGUgY29udGV4dCBvYmplY3Qgd2hlbiBpdFxuXHQvLyBlbmNvdW50ZXJzIGEgUHJvdmlkZXIuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnRcblx0Ly8gc2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIHRoZSBjb250ZXh0IG9iamVjdCBpbnN0ZWFkXG5cdC8vIG9mIG9uIHRoZSBjb21wb25lbnQgaXRzZWxmLiBTZWU6XG5cdC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9jb250ZXh0Lmh0bWwjY29udGV4dGRpc3BsYXluYW1lXG5cblx0cmV0dXJuIChjb250ZXh0LlByb3ZpZGVyLl9jb250ZXh0UmVmID0gY29udGV4dC5Db25zdW1lci5jb250ZXh0VHlwZSA9XG5cdFx0Y29udGV4dCk7XG59XG4iLCAiaW1wb3J0IHsgZGlmZiwgdW5tb3VudCwgYXBwbHlSZWYgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IGNyZWF0ZVZOb2RlLCBGcmFnbWVudCB9IGZyb20gJy4uL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCB7IEVNUFRZX09CSiwgRU1QVFlfQVJSLCBJTlNFUlRfVk5PREUsIE1BVENIRUQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgZ2V0RG9tU2libGluZyB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5cbi8qKlxuICogRGlmZiB0aGUgY2hpbGRyZW4gb2YgYSB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBET00gZWxlbWVudCB3aG9zZSBjaGlsZHJlbiBhcmUgYmVpbmdcbiAqIGRpZmZlZFxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZHJlbltdfSByZW5kZXJSZXN1bHRcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1BhcmVudFZOb2RlIFRoZSBuZXcgdmlydHVhbCBub2RlIHdob3NlIGNoaWxkcmVuIHNob3VsZCBiZVxuICogZGlmZidlZCBhZ2FpbnN0IG9sZFBhcmVudFZOb2RlXG4gKiBAcGFyYW0ge1ZOb2RlfSBvbGRQYXJlbnRWTm9kZSBUaGUgb2xkIHZpcnR1YWwgbm9kZSB3aG9zZSBjaGlsZHJlbiBzaG91bGQgYmVcbiAqIGRpZmYnZWQgYWdhaW5zdCBuZXdQYXJlbnRWTm9kZVxuICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbENvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBvYmplY3QgLSBtb2RpZmllZCBieVxuICogZ2V0Q2hpbGRDb250ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIEN1cnJlbnQgbmFtZXNwYWNlIG9mIHRoZSBET00gbm9kZSAoSFRNTCwgU1ZHLCBvciBNYXRoTUwpXG4gKiBAcGFyYW0ge0FycmF5PFByZWFjdEVsZW1lbnQ+fSBleGNlc3NEb21DaGlsZHJlblxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBjYWxsYmFja3NcbiAqIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IG9sZERvbSBUaGUgY3VycmVudCBhdHRhY2hlZCBET00gZWxlbWVudCBhbnkgbmV3IGRvbVxuICogZWxlbWVudHMgc2hvdWxkIGJlIHBsYWNlZCBhcm91bmQuIExpa2VseSBgbnVsbGAgb24gZmlyc3QgcmVuZGVyIChleGNlcHQgd2hlblxuICogaHlkcmF0aW5nKS4gQ2FuIGJlIGEgc2libGluZyBET00gZWxlbWVudCB3aGVuIGRpZmZpbmcgRnJhZ21lbnRzIHRoYXQgaGF2ZVxuICogc2libGluZ3MuIEluIG1vc3QgY2FzZXMsIGl0IHN0YXJ0cyBvdXQgYXMgYG9sZENoaWxkcmVuWzBdLl9kb21gLlxuICogQHBhcmFtIHtib29sZWFufSBpc0h5ZHJhdGluZyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKiBAcGFyYW0ge2FueVtdfSByZWZRdWV1ZSBhbiBhcnJheSBvZiBlbGVtZW50cyBuZWVkZWQgdG8gaW52b2tlIHJlZnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZDaGlsZHJlbihcblx0cGFyZW50RG9tLFxuXHRyZW5kZXJSZXN1bHQsXG5cdG5ld1BhcmVudFZOb2RlLFxuXHRvbGRQYXJlbnRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0bmFtZXNwYWNlLFxuXHRleGNlc3NEb21DaGlsZHJlbixcblx0Y29tbWl0UXVldWUsXG5cdG9sZERvbSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IGksXG5cdFx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0XHRvbGRWTm9kZSxcblx0XHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRcdGNoaWxkVk5vZGUsXG5cdFx0LyoqIEB0eXBlIHtQcmVhY3RFbGVtZW50fSAqL1xuXHRcdG5ld0RvbSxcblx0XHQvKiogQHR5cGUge1ByZWFjdEVsZW1lbnR9ICovXG5cdFx0Zmlyc3RDaGlsZERvbTtcblxuXHQvLyBUaGlzIGlzIGEgY29tcHJlc3Npb24gb2Ygb2xkUGFyZW50Vk5vZGUhPW51bGwgJiYgb2xkUGFyZW50Vk5vZGUgIT0gRU1QVFlfT0JKICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbiB8fCBFTVBUWV9BUlJcblx0Ly8gYXMgRU1QVFlfT0JKLl9jaGlsZHJlbiBzaG91bGQgYmUgYHVuZGVmaW5lZGAuXG5cdC8qKiBAdHlwZSB7Vk5vZGVbXX0gKi9cblx0bGV0IG9sZENoaWxkcmVuID0gKG9sZFBhcmVudFZOb2RlICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbikgfHwgRU1QVFlfQVJSO1xuXG5cdGxldCBuZXdDaGlsZHJlbkxlbmd0aCA9IHJlbmRlclJlc3VsdC5sZW5ndGg7XG5cblx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBvbGREb207XG5cdGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkobmV3UGFyZW50Vk5vZGUsIHJlbmRlclJlc3VsdCwgb2xkQ2hpbGRyZW4pO1xuXHRvbGREb20gPSBuZXdQYXJlbnRWTm9kZS5fbmV4dERvbTtcblxuXHRmb3IgKGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW5MZW5ndGg7IGkrKykge1xuXHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV07XG5cdFx0aWYgKGNoaWxkVk5vZGUgPT0gbnVsbCkgY29udGludWU7XG5cblx0XHQvLyBBdCB0aGlzIHBvaW50LCBjb25zdHJ1Y3ROZXdDaGlsZHJlbkFycmF5IGhhcyBhc3NpZ25lZCBfaW5kZXggdG8gYmUgdGhlXG5cdFx0Ly8gbWF0Y2hpbmdJbmRleCBmb3IgdGhpcyBWTm9kZSdzIG9sZFZOb2RlIChvciAtMSBpZiB0aGVyZSBpcyBubyBvbGRWTm9kZSkuXG5cdFx0aWYgKGNoaWxkVk5vZGUuX2luZGV4ID09PSAtMSkge1xuXHRcdFx0b2xkVk5vZGUgPSBFTVBUWV9PQko7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bY2hpbGRWTm9kZS5faW5kZXhdIHx8IEVNUFRZX09CSjtcblx0XHR9XG5cblx0XHQvLyBVcGRhdGUgY2hpbGRWTm9kZS5faW5kZXggdG8gaXRzIGZpbmFsIGluZGV4XG5cdFx0Y2hpbGRWTm9kZS5faW5kZXggPSBpO1xuXG5cdFx0Ly8gTW9ycGggdGhlIG9sZCBlbGVtZW50IGludG8gdGhlIG5ldyBvbmUsIGJ1dCBkb24ndCBhcHBlbmQgaXQgdG8gdGhlIGRvbSB5ZXRcblx0XHRkaWZmKFxuXHRcdFx0cGFyZW50RG9tLFxuXHRcdFx0Y2hpbGRWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRvbGREb20sXG5cdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdHJlZlF1ZXVlXG5cdFx0KTtcblxuXHRcdC8vIEFkanVzdCBET00gbm9kZXNcblx0XHRuZXdEb20gPSBjaGlsZFZOb2RlLl9kb207XG5cdFx0aWYgKGNoaWxkVk5vZGUucmVmICYmIG9sZFZOb2RlLnJlZiAhPSBjaGlsZFZOb2RlLnJlZikge1xuXHRcdFx0aWYgKG9sZFZOb2RlLnJlZikge1xuXHRcdFx0XHRhcHBseVJlZihvbGRWTm9kZS5yZWYsIG51bGwsIGNoaWxkVk5vZGUpO1xuXHRcdFx0fVxuXHRcdFx0cmVmUXVldWUucHVzaChcblx0XHRcdFx0Y2hpbGRWTm9kZS5yZWYsXG5cdFx0XHRcdGNoaWxkVk5vZGUuX2NvbXBvbmVudCB8fCBuZXdEb20sXG5cdFx0XHRcdGNoaWxkVk5vZGVcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZpcnN0Q2hpbGREb20gPT0gbnVsbCAmJiBuZXdEb20gIT0gbnVsbCkge1xuXHRcdFx0Zmlyc3RDaGlsZERvbSA9IG5ld0RvbTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRjaGlsZFZOb2RlLl9mbGFncyAmIElOU0VSVF9WTk9ERSB8fFxuXHRcdFx0b2xkVk5vZGUuX2NoaWxkcmVuID09PSBjaGlsZFZOb2RlLl9jaGlsZHJlblxuXHRcdCkge1xuXHRcdFx0b2xkRG9tID0gaW5zZXJ0KGNoaWxkVk5vZGUsIG9sZERvbSwgcGFyZW50RG9tKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUudHlwZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0XHRjaGlsZFZOb2RlLl9uZXh0RG9tICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdC8vIFNpbmNlIEZyYWdtZW50cyBvciBjb21wb25lbnRzIHRoYXQgcmV0dXJuIEZyYWdtZW50IGxpa2UgVk5vZGVzIGNhblxuXHRcdFx0Ly8gY29udGFpbiBtdWx0aXBsZSBET00gbm9kZXMgYXMgdGhlIHNhbWUgbGV2ZWwsIGNvbnRpbnVlIHRoZSBkaWZmIGZyb21cblx0XHRcdC8vIHRoZSBzaWJsaW5nIG9mIGxhc3QgRE9NIGNoaWxkIG9mIHRoaXMgY2hpbGQgVk5vZGVcblx0XHRcdG9sZERvbSA9IGNoaWxkVk5vZGUuX25leHREb207XG5cdFx0fSBlbHNlIGlmIChuZXdEb20pIHtcblx0XHRcdG9sZERvbSA9IG5ld0RvbS5uZXh0U2libGluZztcblx0XHR9XG5cblx0XHQvLyBFYWdlcmx5IGNsZWFudXAgX25leHREb20uIFdlIGRvbid0IG5lZWQgdG8gcGVyc2lzdCB0aGUgdmFsdWUgYmVjYXVzZSBpdFxuXHRcdC8vIGlzIG9ubHkgdXNlZCBieSBgZGlmZkNoaWxkcmVuYCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcmVzdW1lIHRoZSBkaWZmXG5cdFx0Ly8gYWZ0ZXIgZGlmZmluZyBDb21wb25lbnRzIGFuZCBGcmFnbWVudHMuIE9uY2Ugd2Ugc3RvcmUgaXQgdGhlIG5leHRET01cblx0XHQvLyBsb2NhbCB2YXIsIHdlIGNhbiBjbGVhbiB1cCB0aGUgcHJvcGVydHkuIEFsc28gcHJldmVudHMgdXMgaGFuZ2luZyBvbiB0b1xuXHRcdC8vIERPTSBub2RlcyB0aGF0IG1heSBoYXZlIGJlZW4gdW5tb3VudGVkLlxuXHRcdGNoaWxkVk5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG5cblx0XHQvLyBVbnNldCBkaWZmaW5nIGZsYWdzXG5cdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgJj0gfihJTlNFUlRfVk5PREUgfCBNQVRDSEVEKTtcblx0fVxuXG5cdC8vIFRPRE86IFdpdGggbmV3IGNoaWxkIGRpZmZpbmcgYWxnbywgY29uc2lkZXIgYWx0IHdheXMgdG8gZGlmZiBGcmFnbWVudHMuXG5cdC8vIFN1Y2ggYXMgZHJvcHBpbmcgb2xkRG9tIGFuZCBtb3ZpbmcgZnJhZ21lbnRzIGluIHBsYWNlXG5cdC8vXG5cdC8vIEJlY2F1c2UgdGhlIG5ld1BhcmVudFZOb2RlIGlzIEZyYWdtZW50LWxpa2UsIHdlIG5lZWQgdG8gc2V0IGl0J3Ncblx0Ly8gX25leHREb20gcHJvcGVydHkgdG8gdGhlIG5leHRTaWJsaW5nIG9mIGl0cyBsYXN0IGNoaWxkIERPTSBub2RlLlxuXHQvL1xuXHQvLyBgb2xkRG9tYCBjb250YWlucyB0aGUgY29ycmVjdCB2YWx1ZSBoZXJlIGJlY2F1c2UgaWYgdGhlIGxhc3QgY2hpbGRcblx0Ly8gaXMgYSBGcmFnbWVudC1saWtlLCB0aGVuIG9sZERvbSBoYXMgYWxyZWFkeSBiZWVuIHNldCB0byB0aGF0IGNoaWxkJ3MgX25leHREb20uXG5cdC8vIElmIHRoZSBsYXN0IGNoaWxkIGlzIGEgRE9NIFZOb2RlLCB0aGVuIG9sZERvbSB3aWxsIGJlIHNldCB0byB0aGF0IERPTVxuXHQvLyBub2RlJ3MgbmV4dFNpYmxpbmcuXG5cdG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tID0gb2xkRG9tO1xuXHRuZXdQYXJlbnRWTm9kZS5fZG9tID0gZmlyc3RDaGlsZERvbTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdQYXJlbnRWTm9kZVxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZHJlbltdfSByZW5kZXJSZXN1bHRcbiAqIEBwYXJhbSB7Vk5vZGVbXX0gb2xkQ2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheShuZXdQYXJlbnRWTm9kZSwgcmVuZGVyUmVzdWx0LCBvbGRDaGlsZHJlbikge1xuXHQvKiogQHR5cGUge251bWJlcn0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGxldCBjaGlsZFZOb2RlO1xuXHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRsZXQgb2xkVk5vZGU7XG5cblx0Y29uc3QgbmV3Q2hpbGRyZW5MZW5ndGggPSByZW5kZXJSZXN1bHQubGVuZ3RoO1xuXHRsZXQgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGgsXG5cdFx0cmVtYWluaW5nT2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbkxlbmd0aDtcblxuXHRsZXQgc2tldyA9IDA7XG5cblx0bmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuID0gW107XG5cdGZvciAoaSA9IDA7IGkgPCBuZXdDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBXZSBhcmUgcmV1c2luZyB0aGUgY2hpbGRWTm9kZSB2YXJpYWJsZSB0byBob2xkIGJvdGggdGhlXG5cdFx0Ly8gcHJlIGFuZCBwb3N0IG5vcm1hbGl6ZWQgY2hpbGRWTm9kZVxuXHRcdGNoaWxkVk5vZGUgPSByZW5kZXJSZXN1bHRbaV07XG5cblx0XHRpZiAoXG5cdFx0XHRjaGlsZFZOb2RlID09IG51bGwgfHxcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdib29sZWFuJyB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2Z1bmN0aW9uJ1xuXHRcdCkge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IG51bGw7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Ly8gSWYgdGhpcyBuZXdWTm9kZSBpcyBiZWluZyByZXVzZWQgKGUuZy4gPGRpdj57cmV1c2V9e3JldXNlfTwvZGl2PikgaW4gdGhlIHNhbWUgZGlmZixcblx0XHQvLyBvciB3ZSBhcmUgcmVuZGVyaW5nIGEgY29tcG9uZW50IChlLmcuIHNldFN0YXRlKSBjb3B5IHRoZSBvbGRWTm9kZXMgc28gaXQgY2FuIGhhdmVcblx0XHQvLyBpdCdzIG93biBET00gJiBldGMuIHBvaW50ZXJzXG5cdFx0ZWxzZSBpZiAoXG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnc3RyaW5nJyB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ251bWJlcicgfHxcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2YWxpZC10eXBlb2Zcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdiaWdpbnQnIHx8XG5cdFx0XHRjaGlsZFZOb2RlLmNvbnN0cnVjdG9yID09IFN0cmluZ1xuXHRcdCkge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNyZWF0ZVZOb2RlKFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoaXNBcnJheShjaGlsZFZOb2RlKSkge1xuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNyZWF0ZVZOb2RlKFxuXHRcdFx0XHRGcmFnbWVudCxcblx0XHRcdFx0eyBjaGlsZHJlbjogY2hpbGRWTm9kZSB9LFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoY2hpbGRWTm9kZS5jb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkICYmIGNoaWxkVk5vZGUuX2RlcHRoID4gMCkge1xuXHRcdFx0Ly8gVk5vZGUgaXMgYWxyZWFkeSBpbiB1c2UsIGNsb25lIGl0LiBUaGlzIGNhbiBoYXBwZW4gaW4gdGhlIGZvbGxvd2luZ1xuXHRcdFx0Ly8gc2NlbmFyaW86XG5cdFx0XHQvLyAgIGNvbnN0IHJldXNlID0gPGRpdiAvPlxuXHRcdFx0Ly8gICA8ZGl2PntyZXVzZX08c3BhbiAvPntyZXVzZX08L2Rpdj5cblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0Y2hpbGRWTm9kZS50eXBlLFxuXHRcdFx0XHRjaGlsZFZOb2RlLnByb3BzLFxuXHRcdFx0XHRjaGlsZFZOb2RlLmtleSxcblx0XHRcdFx0Y2hpbGRWTm9kZS5yZWYgPyBjaGlsZFZOb2RlLnJlZiA6IG51bGwsXG5cdFx0XHRcdGNoaWxkVk5vZGUuX29yaWdpbmFsXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY2hpbGRWTm9kZTtcblx0XHR9XG5cblx0XHRjb25zdCBza2V3ZWRJbmRleCA9IGkgKyBza2V3O1xuXHRcdGNoaWxkVk5vZGUuX3BhcmVudCA9IG5ld1BhcmVudFZOb2RlO1xuXHRcdGNoaWxkVk5vZGUuX2RlcHRoID0gbmV3UGFyZW50Vk5vZGUuX2RlcHRoICsgMTtcblxuXHRcdC8vIFRlbXBvcmFyaWx5IHN0b3JlIHRoZSBtYXRjaGluZ0luZGV4IG9uIHRoZSBfaW5kZXggcHJvcGVydHkgc28gd2UgY2FuIHB1bGxcblx0XHQvLyBvdXQgdGhlIG9sZFZOb2RlIGluIGRpZmZDaGlsZHJlbi4gV2UnbGwgb3ZlcnJpZGUgdGhpcyB0byB0aGUgVk5vZGUnc1xuXHRcdC8vIGZpbmFsIGluZGV4IGFmdGVyIHVzaW5nIHRoaXMgcHJvcGVydHkgdG8gZ2V0IHRoZSBvbGRWTm9kZVxuXHRcdGNvbnN0IG1hdGNoaW5nSW5kZXggPSAoY2hpbGRWTm9kZS5faW5kZXggPSBmaW5kTWF0Y2hpbmdJbmRleChcblx0XHRcdGNoaWxkVk5vZGUsXG5cdFx0XHRvbGRDaGlsZHJlbixcblx0XHRcdHNrZXdlZEluZGV4LFxuXHRcdFx0cmVtYWluaW5nT2xkQ2hpbGRyZW5cblx0XHQpKTtcblxuXHRcdG9sZFZOb2RlID0gbnVsbDtcblx0XHRpZiAobWF0Y2hpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bbWF0Y2hpbmdJbmRleF07XG5cdFx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbi0tO1xuXHRcdFx0aWYgKG9sZFZOb2RlKSB7XG5cdFx0XHRcdG9sZFZOb2RlLl9mbGFncyB8PSBNQVRDSEVEO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEhlcmUsIHdlIGRlZmluZSBpc01vdW50aW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIHNrZXcgZGlmZmluZ1xuXHRcdC8vIGFsZ29yaXRobS4gTm9kZXMgdGhhdCBhcmUgdW5zdXNwZW5kaW5nIGFyZSBjb25zaWRlcmVkIG1vdW50aW5nIGFuZCB3ZSBkZXRlY3Rcblx0XHQvLyB0aGlzIGJ5IGNoZWNraW5nIGlmIG9sZFZOb2RlLl9vcmlnaW5hbCA9PT0gbnVsbFxuXHRcdGNvbnN0IGlzTW91bnRpbmcgPSBvbGRWTm9kZSA9PSBudWxsIHx8IG9sZFZOb2RlLl9vcmlnaW5hbCA9PT0gbnVsbDtcblxuXHRcdGlmIChpc01vdW50aW5nKSB7XG5cdFx0XHRpZiAobWF0Y2hpbmdJbmRleCA9PSAtMSkge1xuXHRcdFx0XHRza2V3LS07XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHdlIGFyZSBtb3VudGluZyBhIERPTSBWTm9kZSwgbWFyayBpdCBmb3IgaW5zZXJ0aW9uXG5cdFx0XHRpZiAodHlwZW9mIGNoaWxkVk5vZGUudHlwZSAhPSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzIHw9IElOU0VSVF9WTk9ERTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1hdGNoaW5nSW5kZXggIT09IHNrZXdlZEluZGV4KSB7XG5cdFx0XHQvLyBXaGVuIHdlIG1vdmUgZWxlbWVudHMgYXJvdW5kIGkuZS4gWzAsIDEsIDJdIC0tPiBbMSwgMCwgMl1cblx0XHRcdC8vIC0tPiB3ZSBkaWZmIDEsIHdlIGZpbmQgaXQgYXQgcG9zaXRpb24gMSB3aGlsZSBvdXIgc2tld2VkIGluZGV4IGlzIDAgYW5kIG91ciBza2V3IGlzIDBcblx0XHRcdC8vICAgICB3ZSBzZXQgdGhlIHNrZXcgdG8gMSBhcyB3ZSBmb3VuZCBhbiBvZmZzZXQuXG5cdFx0XHQvLyAtLT4gd2UgZGlmZiAwLCB3ZSBmaW5kIGl0IGF0IHBvc2l0aW9uIDAgd2hpbGUgb3VyIHNrZXdlZCBpbmRleCBpcyBhdCAyIGFuZCBvdXIgc2tldyBpcyAxXG5cdFx0XHQvLyAgICAgdGhpcyBtYWtlcyB1cyBpbmNyZWFzZSB0aGUgc2tldyBhZ2Fpbi5cblx0XHRcdC8vIC0tPiB3ZSBkaWZmIDIsIHdlIGZpbmQgaXQgYXQgcG9zaXRpb24gMiB3aGlsZSBvdXIgc2tld2VkIGluZGV4IGlzIGF0IDQgYW5kIG91ciBza2V3IGlzIDJcblx0XHRcdC8vXG5cdFx0XHQvLyB0aGlzIGJlY29tZXMgYW4gb3B0aW1pemF0aW9uIHF1ZXN0aW9uIHdoZXJlIGN1cnJlbnRseSB3ZSBzZWUgYSAxIGVsZW1lbnQgb2Zmc2V0IGFzIGFuIGluc2VydGlvblxuXHRcdFx0Ly8gb3IgZGVsZXRpb24gaS5lLiB3ZSBvcHRpbWl6ZSBmb3IgWzAsIDEsIDJdIC0tPiBbOSwgMCwgMSwgMl1cblx0XHRcdC8vIHdoaWxlIGEgbW9yZSB0aGFuIDEgb2Zmc2V0IHdlIHNlZSBhcyBhIHN3YXAuXG5cdFx0XHQvLyBXZSBjb3VsZCBwcm9iYWJseSBidWlsZCBoZXVyaXN0aWNzIGZvciBoYXZpbmcgYW4gb3B0aW1pemVkIGNvdXJzZSBvZiBhY3Rpb24gaGVyZSBhcyB3ZWxsLCBidXRcblx0XHRcdC8vIG1pZ2h0IGdvIGF0IHRoZSBjb3N0IG9mIHNvbWUgYnl0ZXMuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIGZvciBpLmUuIG9ubHkgc3dhcHMgd2UnZCBqdXN0IGRvIHRoZSBsYXN0IHR3byBjb2RlLWJyYW5jaGVzIGFuZCBoYXZlXG5cdFx0XHQvLyBvbmx5IHRoZSBmaXJzdCBpdGVtIGJlIGEgcmUtc2NvdXRpbmcgYW5kIGFsbCB0aGUgb3RoZXJzIGZhbGwgaW4gdGhlaXIgc2tld2VkIGNvdW50ZXItcGFydC5cblx0XHRcdC8vIFdlIGNvdWxkIGFsc28gZnVydGhlciBvcHRpbWl6ZSBmb3Igc3dhcHNcblx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID09IHNrZXdlZEluZGV4IC0gMSkge1xuXHRcdFx0XHRza2V3LS07XG5cdFx0XHR9IGVsc2UgaWYgKG1hdGNoaW5nSW5kZXggPT0gc2tld2VkSW5kZXggKyAxKSB7XG5cdFx0XHRcdHNrZXcrKztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID4gc2tld2VkSW5kZXgpIHtcblx0XHRcdFx0XHRza2V3LS07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2tldysrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSB0aGlzIFZOb2RlJ3MgRE9NIGlmIHRoZSBvcmlnaW5hbCBpbmRleCAobWF0Y2hpbmdJbmRleCkgZG9lc24ndFxuXHRcdFx0XHQvLyBtYXRjaCB0aGUgbmV3IHNrZXcgaW5kZXggKGkgKyBuZXcgc2tldylcblx0XHRcdFx0Ly8gSW4gdGhlIGZvcm1lciB0d28gYnJhbmNoZXMgd2Uga25vdyB0aGF0IGl0IG1hdGNoZXMgYWZ0ZXIgc2tld2luZ1xuXHRcdFx0XHRjaGlsZFZOb2RlLl9mbGFncyB8PSBJTlNFUlRfVk5PREU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHJlbWFpbmluZyBvbGRDaGlsZHJlbiBpZiB0aGVyZSBhcmUgYW55LiBMb29wIGZvcndhcmRzIHNvIHRoYXQgYXMgd2Vcblx0Ly8gdW5tb3VudCBET00gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvbGRDaGlsZHJlbiwgd2UgY2FuIGFkanVzdCBvbGREb20gdG9cblx0Ly8gcG9pbnQgdG8gdGhlIG5leHQgY2hpbGQsIHdoaWNoIG5lZWRzIHRvIGJlIHRoZSBmaXJzdCBET00gbm9kZSB0aGF0IHdvbid0IGJlXG5cdC8vIHVubW91bnRlZC5cblx0aWYgKHJlbWFpbmluZ09sZENoaWxkcmVuKSB7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG9sZENoaWxkcmVuTGVuZ3RoOyBpKyspIHtcblx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5baV07XG5cdFx0XHRpZiAob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApIHtcblx0XHRcdFx0aWYgKG9sZFZOb2RlLl9kb20gPT0gbmV3UGFyZW50Vk5vZGUuX25leHREb20pIHtcblx0XHRcdFx0XHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IGdldERvbVNpYmxpbmcob2xkVk5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dW5tb3VudChvbGRWTm9kZSwgb2xkVk5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHBhcmVudFZOb2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IG9sZERvbVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb21cbiAqIEByZXR1cm5zIHtQcmVhY3RFbGVtZW50fVxuICovXG5mdW5jdGlvbiBpbnNlcnQocGFyZW50Vk5vZGUsIG9sZERvbSwgcGFyZW50RG9tKSB7XG5cdC8vIE5vdGU6IFZOb2RlcyBpbiBuZXN0ZWQgc3VzcGVuZGVkIHRyZWVzIG1heSBiZSBtaXNzaW5nIF9jaGlsZHJlbi5cblxuXHRpZiAodHlwZW9mIHBhcmVudFZOb2RlLnR5cGUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdGxldCBjaGlsZHJlbiA9IHBhcmVudFZOb2RlLl9jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBpID0gMDsgY2hpbGRyZW4gJiYgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoY2hpbGRyZW5baV0pIHtcblx0XHRcdFx0Ly8gSWYgd2UgZW50ZXIgdGhpcyBjb2RlIHBhdGggb24gc0NVIGJhaWxvdXQsIHdoZXJlIHdlIGNvcHlcblx0XHRcdFx0Ly8gb2xkVk5vZGUuX2NoaWxkcmVuIHRvIG5ld1ZOb2RlLl9jaGlsZHJlbiwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIG9sZFxuXHRcdFx0XHQvLyBjaGlsZHJlbidzIF9wYXJlbnQgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbmV3Vk5vZGUgKHBhcmVudFZOb2RlXG5cdFx0XHRcdC8vIGhlcmUpLlxuXHRcdFx0XHRjaGlsZHJlbltpXS5fcGFyZW50ID0gcGFyZW50Vk5vZGU7XG5cdFx0XHRcdG9sZERvbSA9IGluc2VydChjaGlsZHJlbltpXSwgb2xkRG9tLCBwYXJlbnREb20pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvbGREb207XG5cdH0gZWxzZSBpZiAocGFyZW50Vk5vZGUuX2RvbSAhPSBvbGREb20pIHtcblx0XHRpZiAob2xkRG9tICYmIHBhcmVudFZOb2RlLnR5cGUgJiYgIXBhcmVudERvbS5jb250YWlucyhvbGREb20pKSB7XG5cdFx0XHRvbGREb20gPSBnZXREb21TaWJsaW5nKHBhcmVudFZOb2RlKTtcblx0XHR9XG5cdFx0cGFyZW50RG9tLmluc2VydEJlZm9yZShwYXJlbnRWTm9kZS5fZG9tLCBvbGREb20gfHwgbnVsbCk7XG5cdFx0b2xkRG9tID0gcGFyZW50Vk5vZGUuX2RvbTtcblx0fVxuXG5cdGRvIHtcblx0XHRvbGREb20gPSBvbGREb20gJiYgb2xkRG9tLm5leHRTaWJsaW5nO1xuXHR9IHdoaWxlIChvbGREb20gIT0gbnVsbCAmJiBvbGREb20ubm9kZVR5cGUgPT09IDgpO1xuXG5cdHJldHVybiBvbGREb207XG59XG5cbi8qKlxuICogRmxhdHRlbiBhbmQgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtDb21wb25lbnRDaGlsZHJlbn0gY2hpbGRyZW4gVGhlIHVuZmxhdHRlbmVkIGNoaWxkcmVuIG9mIGEgdmlydHVhbFxuICogbm9kZVxuICogQHJldHVybnMge1ZOb2RlW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NoaWxkQXJyYXkoY2hpbGRyZW4sIG91dCkge1xuXHRvdXQgPSBvdXQgfHwgW107XG5cdGlmIChjaGlsZHJlbiA9PSBudWxsIHx8IHR5cGVvZiBjaGlsZHJlbiA9PSAnYm9vbGVhbicpIHtcblx0fSBlbHNlIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuXHRcdGNoaWxkcmVuLnNvbWUoY2hpbGQgPT4ge1xuXHRcdFx0dG9DaGlsZEFycmF5KGNoaWxkLCBvdXQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG91dC5wdXNoKGNoaWxkcmVuKTtcblx0fVxuXHRyZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IGNoaWxkVk5vZGVcbiAqIEBwYXJhbSB7Vk5vZGVbXX0gb2xkQ2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3ZWRJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IHJlbWFpbmluZ09sZENoaWxkcmVuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdJbmRleChcblx0Y2hpbGRWTm9kZSxcblx0b2xkQ2hpbGRyZW4sXG5cdHNrZXdlZEluZGV4LFxuXHRyZW1haW5pbmdPbGRDaGlsZHJlblxuKSB7XG5cdGNvbnN0IGtleSA9IGNoaWxkVk5vZGUua2V5O1xuXHRjb25zdCB0eXBlID0gY2hpbGRWTm9kZS50eXBlO1xuXHRsZXQgeCA9IHNrZXdlZEluZGV4IC0gMTtcblx0bGV0IHkgPSBza2V3ZWRJbmRleCArIDE7XG5cdGxldCBvbGRWTm9kZSA9IG9sZENoaWxkcmVuW3NrZXdlZEluZGV4XTtcblxuXHQvLyBXZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNlYXJjaCBpZiB0aGVyZSBhcmUgbW9yZSBjaGlsZHJlblxuXHQvLyAocmVtYWluaW5nT2xkQ2hpbGRyZW4pIHRvIHNlYXJjaC4gSG93ZXZlciwgaWYgdGhlIG9sZFZOb2RlIHdlIGp1c3QgbG9va2VkXG5cdC8vIGF0IHNrZXdlZEluZGV4IHdhcyBub3QgYWxyZWFkeSB1c2VkIGluIHRoaXMgZGlmZiwgdGhlbiB0aGVyZSBtdXN0IGJlIGF0XG5cdC8vIGxlYXN0IDEgb3RoZXIgKHNvIGdyZWF0ZXIgdGhhbiAxKSByZW1haW5pbmdPbGRDaGlsZHJlbiB0byBhdHRlbXB0IHRvIG1hdGNoXG5cdC8vIGFnYWluc3QuIFNvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGNoZWNrcyB0aGF0IGVuc3VyaW5nXG5cdC8vIHJlbWFpbmluZ09sZENoaWxkcmVuID4gMSBpZiB0aGUgb2xkVk5vZGUgaXMgbm90IGFscmVhZHkgdXNlZC9tYXRjaGVkLiBFbHNlXG5cdC8vIGlmIHRoZSBvbGRWTm9kZSB3YXMgbnVsbCBvciBtYXRjaGVkLCB0aGVuIHRoZXJlIGNvdWxkIG5lZWRzIHRvIGJlIGF0IGxlYXN0XG5cdC8vIDEgKGFrYSBgcmVtYWluaW5nT2xkQ2hpbGRyZW4gPiAwYCkgY2hpbGRyZW4gdG8gZmluZCBhbmQgY29tcGFyZSBhZ2FpbnN0LlxuXHRsZXQgc2hvdWxkU2VhcmNoID1cblx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbiA+XG5cdFx0KG9sZFZOb2RlICE9IG51bGwgJiYgKG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwID8gMSA6IDApO1xuXG5cdGlmIChcblx0XHRvbGRWTm9kZSA9PT0gbnVsbCB8fFxuXHRcdChvbGRWTm9kZSAmJlxuXHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0dHlwZSA9PT0gb2xkVk5vZGUudHlwZSAmJlxuXHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwKVxuXHQpIHtcblx0XHRyZXR1cm4gc2tld2VkSW5kZXg7XG5cdH0gZWxzZSBpZiAoc2hvdWxkU2VhcmNoKSB7XG5cdFx0d2hpbGUgKHggPj0gMCB8fCB5IDwgb2xkQ2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0XHRpZiAoeCA+PSAwKSB7XG5cdFx0XHRcdG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5beF07XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvbGRWTm9kZSAmJlxuXHRcdFx0XHRcdChvbGRWTm9kZS5fZmxhZ3MgJiBNQVRDSEVEKSA9PT0gMCAmJlxuXHRcdFx0XHRcdGtleSA9PSBvbGRWTm9kZS5rZXkgJiZcblx0XHRcdFx0XHR0eXBlID09PSBvbGRWTm9kZS50eXBlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiB4O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHgtLTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHkgPCBvbGRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblt5XTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9sZFZOb2RlICYmXG5cdFx0XHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwICYmXG5cdFx0XHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0XHRcdHR5cGUgPT09IG9sZFZOb2RlLnR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0eSsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiAtMTtcbn1cbiIsICJpbXBvcnQge1xuXHRFTVBUWV9PQkosXG5cdE1PREVfSFlEUkFURSxcblx0TU9ERV9TVVNQRU5ERUQsXG5cdFJFU0VUX01PREVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIGdldERvbVNpYmxpbmcgfSBmcm9tICcuLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgeyBkaWZmQ2hpbGRyZW4gfSBmcm9tICcuL2NoaWxkcmVuJztcbmltcG9ydCB7IHNldFByb3BlcnR5IH0gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQgeyBhc3NpZ24sIGlzQXJyYXksIHJlbW92ZU5vZGUsIHNsaWNlIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuLi9vcHRpb25zJztcblxuLyoqXG4gKiBEaWZmIHR3byB2aXJ0dWFsIG5vZGVzIGFuZCBhcHBseSBwcm9wZXIgY2hhbmdlcyB0byB0aGUgRE9NXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgcGFyZW50IG9mIHRoZSBET00gZWxlbWVudFxuICogQHBhcmFtIHtWTm9kZX0gbmV3Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7Vk5vZGV9IG9sZFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdC4gTW9kaWZpZWQgYnlcbiAqIGdldENoaWxkQ29udGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzcGFjZSBDdXJyZW50IG5hbWVzcGFjZSBvZiB0aGUgRE9NIG5vZGUgKEhUTUwsIFNWRywgb3IgTWF0aE1MKVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBvbGREb20gVGhlIGN1cnJlbnQgYXR0YWNoZWQgRE9NIGVsZW1lbnQgYW55IG5ldyBkb21cbiAqIGVsZW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXJvdW5kLiBMaWtlbHkgYG51bGxgIG9uIGZpcnN0IHJlbmRlciAoZXhjZXB0IHdoZW5cbiAqIGh5ZHJhdGluZykuIENhbiBiZSBhIHNpYmxpbmcgRE9NIGVsZW1lbnQgd2hlbiBkaWZmaW5nIEZyYWdtZW50cyB0aGF0IGhhdmVcbiAqIHNpYmxpbmdzLiBJbiBtb3N0IGNhc2VzLCBpdCBzdGFydHMgb3V0IGFzIGBvbGRDaGlsZHJlblswXS5fZG9tYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmKFxuXHRwYXJlbnREb20sXG5cdG5ld1ZOb2RlLFxuXHRvbGRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0bmFtZXNwYWNlLFxuXHRleGNlc3NEb21DaGlsZHJlbixcblx0Y29tbWl0UXVldWUsXG5cdG9sZERvbSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0LyoqIEB0eXBlIHthbnl9ICovXG5cdGxldCB0bXAsXG5cdFx0bmV3VHlwZSA9IG5ld1ZOb2RlLnR5cGU7XG5cblx0Ly8gV2hlbiBwYXNzaW5nIHRocm91Z2ggY3JlYXRlRWxlbWVudCBpdCBhc3NpZ25zIHRoZSBvYmplY3Rcblx0Ly8gY29uc3RydWN0b3IgYXMgdW5kZWZpbmVkLiBUaGlzIHRvIHByZXZlbnQgSlNPTi1pbmplY3Rpb24uXG5cdGlmIChuZXdWTm9kZS5jb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcblxuXHQvLyBJZiB0aGUgcHJldmlvdXMgZGlmZiBiYWlsZWQgb3V0LCByZXN1bWUgY3JlYXRpbmcvaHlkcmF0aW5nLlxuXHRpZiAob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9TVVNQRU5ERUQpIHtcblx0XHRpc0h5ZHJhdGluZyA9ICEhKG9sZFZOb2RlLl9mbGFncyAmIE1PREVfSFlEUkFURSk7XG5cdFx0b2xkRG9tID0gbmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPSBbb2xkRG9tXTtcblx0fVxuXG5cdGlmICgodG1wID0gb3B0aW9ucy5fZGlmZikpIHRtcChuZXdWTm9kZSk7XG5cblx0b3V0ZXI6IGlmICh0eXBlb2YgbmV3VHlwZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGxldCBjLCBpc05ldywgb2xkUHJvcHMsIG9sZFN0YXRlLCBzbmFwc2hvdCwgY2xlYXJQcm9jZXNzaW5nRXhjZXB0aW9uO1xuXHRcdFx0bGV0IG5ld1Byb3BzID0gbmV3Vk5vZGUucHJvcHM7XG5cdFx0XHRjb25zdCBpc0NsYXNzQ29tcG9uZW50ID1cblx0XHRcdFx0J3Byb3RvdHlwZScgaW4gbmV3VHlwZSAmJiBuZXdUeXBlLnByb3RvdHlwZS5yZW5kZXI7XG5cblx0XHRcdC8vIE5lY2Vzc2FyeSBmb3IgY3JlYXRlQ29udGV4dCBhcGkuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIHBhc3Ncblx0XHRcdC8vIHRoZSBjb250ZXh0IHZhbHVlIGFzIGB0aGlzLmNvbnRleHRgIGp1c3QgZm9yIHRoaXMgY29tcG9uZW50LlxuXHRcdFx0dG1wID0gbmV3VHlwZS5jb250ZXh0VHlwZTtcblx0XHRcdGxldCBwcm92aWRlciA9IHRtcCAmJiBnbG9iYWxDb250ZXh0W3RtcC5faWRdO1xuXHRcdFx0bGV0IGNvbXBvbmVudENvbnRleHQgPSB0bXBcblx0XHRcdFx0PyBwcm92aWRlclxuXHRcdFx0XHRcdD8gcHJvdmlkZXIucHJvcHMudmFsdWVcblx0XHRcdFx0XHQ6IHRtcC5fZGVmYXVsdFZhbHVlXG5cdFx0XHRcdDogZ2xvYmFsQ29udGV4dDtcblxuXHRcdFx0Ly8gR2V0IGNvbXBvbmVudCBhbmQgc2V0IGl0IHRvIGBjYFxuXHRcdFx0aWYgKG9sZFZOb2RlLl9jb21wb25lbnQpIHtcblx0XHRcdFx0YyA9IG5ld1ZOb2RlLl9jb21wb25lbnQgPSBvbGRWTm9kZS5fY29tcG9uZW50O1xuXHRcdFx0XHRjbGVhclByb2Nlc3NpbmdFeGNlcHRpb24gPSBjLl9wcm9jZXNzaW5nRXhjZXB0aW9uID0gYy5fcGVuZGluZ0Vycm9yO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSW5zdGFudGlhdGUgdGhlIG5ldyBjb21wb25lbnRcblx0XHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQpIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBjaGVjayBhYm92ZSB2ZXJpZmllcyB0aGF0IG5ld1R5cGUgaXMgc3VwcG9zZSB0byBiZSBjb25zdHJ1Y3RlZFxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jb21wb25lbnQgPSBjID0gbmV3IG5ld1R5cGUobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRydXN0IG1lLCBDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIHdlIHdhbnRcblx0XHRcdFx0XHRuZXdWTm9kZS5fY29tcG9uZW50ID0gYyA9IG5ldyBCYXNlQ29tcG9uZW50KFxuXHRcdFx0XHRcdFx0bmV3UHJvcHMsXG5cdFx0XHRcdFx0XHRjb21wb25lbnRDb250ZXh0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjLmNvbnN0cnVjdG9yID0gbmV3VHlwZTtcblx0XHRcdFx0XHRjLnJlbmRlciA9IGRvUmVuZGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm92aWRlcikgcHJvdmlkZXIuc3ViKGMpO1xuXG5cdFx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdFx0aWYgKCFjLnN0YXRlKSBjLnN0YXRlID0ge307XG5cdFx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRcdGMuX2dsb2JhbENvbnRleHQgPSBnbG9iYWxDb250ZXh0O1xuXHRcdFx0XHRpc05ldyA9IGMuX2RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9XG5cblx0XHRcdC8vIEludm9rZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIGMuX25leHRTdGF0ZSA9PSBudWxsKSB7XG5cdFx0XHRcdGMuX25leHRTdGF0ZSA9IGMuc3RhdGU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKGMuX25leHRTdGF0ZSA9PSBjLnN0YXRlKSB7XG5cdFx0XHRcdFx0Yy5fbmV4dFN0YXRlID0gYXNzaWduKHt9LCBjLl9uZXh0U3RhdGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXNzaWduKFxuXHRcdFx0XHRcdGMuX25leHRTdGF0ZSxcblx0XHRcdFx0XHRuZXdUeXBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXdQcm9wcywgYy5fbmV4dFN0YXRlKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRvbGRQcm9wcyA9IGMucHJvcHM7XG5cdFx0XHRvbGRTdGF0ZSA9IGMuc3RhdGU7XG5cdFx0XHRjLl92bm9kZSA9IG5ld1ZOb2RlO1xuXG5cdFx0XHQvLyBJbnZva2UgcHJlLXJlbmRlciBsaWZlY3ljbGUgbWV0aG9kc1xuXHRcdFx0aWYgKGlzTmV3KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRpc0NsYXNzQ29tcG9uZW50ICYmXG5cdFx0XHRcdFx0bmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT0gbnVsbCAmJlxuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbE1vdW50ICE9IG51bGxcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsTW91bnQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIGMuY29tcG9uZW50RGlkTW91bnQgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGMuY29tcG9uZW50RGlkTW91bnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0aXNDbGFzc0NvbXBvbmVudCAmJlxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09IG51bGwgJiZcblx0XHRcdFx0XHRuZXdQcm9wcyAhPT0gb2xkUHJvcHMgJiZcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgIT0gbnVsbFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFjLl9mb3JjZSAmJlxuXHRcdFx0XHRcdCgoYy5zaG91bGRDb21wb25lbnRVcGRhdGUgIT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Yy5zaG91bGRDb21wb25lbnRVcGRhdGUoXG5cdFx0XHRcdFx0XHRcdG5ld1Byb3BzLFxuXHRcdFx0XHRcdFx0XHRjLl9uZXh0U3RhdGUsXG5cdFx0XHRcdFx0XHRcdGNvbXBvbmVudENvbnRleHRcblx0XHRcdFx0XHRcdCkgPT09IGZhbHNlKSB8fFxuXHRcdFx0XHRcdFx0bmV3Vk5vZGUuX29yaWdpbmFsID09PSBvbGRWTm9kZS5fb3JpZ2luYWwpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIE1vcmUgaW5mbyBhYm91dCB0aGlzIGhlcmU6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0pvdmlEZUNyb29jay9iZWM1ZjJjZTkzNTQ0ZDJlNjA3MGVmOGUwMDM2ZTRlOFxuXHRcdFx0XHRcdGlmIChuZXdWTm9kZS5fb3JpZ2luYWwgIT09IG9sZFZOb2RlLl9vcmlnaW5hbCkge1xuXHRcdFx0XHRcdFx0Ly8gV2hlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgYmFpbCBiZWNhdXNlIG9mIHNDVSB3ZSBoYXZlIHRvIHVwZGF0ZVxuXHRcdFx0XHRcdFx0Ly8gdGhlIHByb3BzLCBzdGF0ZSBhbmQgZGlydHktc3RhdGUuXG5cdFx0XHRcdFx0XHQvLyB3aGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggc3RyaWN0LWVxdWFsaXR5IHdlIGRvbid0IGFzIHRoZSBjaGlsZCBjb3VsZCBzdGlsbFxuXHRcdFx0XHRcdFx0Ly8gYmUgZGlydGllZCBzZWUgIzM4ODNcblx0XHRcdFx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdFx0XHRjLl9kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4uc29tZSh2bm9kZSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodm5vZGUpIHZub2RlLl9wYXJlbnQgPSBuZXdWTm9kZTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYy5fc3RhdGVDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGMuX3N0YXRlQ2FsbGJhY2tzW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Yy5fc3RhdGVDYWxsYmFja3MgPSBbXTtcblxuXHRcdFx0XHRcdGlmIChjLl9yZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb21taXRRdWV1ZS5wdXNoKGMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrIG91dGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGMuY29tcG9uZW50V2lsbFVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBjLl9uZXh0U3RhdGUsIGNvbXBvbmVudENvbnRleHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgYy5jb21wb25lbnREaWRVcGRhdGUgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdFx0XHRcdGMuY29tcG9uZW50RGlkVXBkYXRlKG9sZFByb3BzLCBvbGRTdGF0ZSwgc25hcHNob3QpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRjLnByb3BzID0gbmV3UHJvcHM7XG5cdFx0XHRjLl9wYXJlbnREb20gPSBwYXJlbnREb207XG5cdFx0XHRjLl9mb3JjZSA9IGZhbHNlO1xuXG5cdFx0XHRsZXQgcmVuZGVySG9vayA9IG9wdGlvbnMuX3JlbmRlcixcblx0XHRcdFx0Y291bnQgPSAwO1xuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQpIHtcblx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0dG1wID0gYy5yZW5kZXIoYy5wcm9wcywgYy5zdGF0ZSwgYy5jb250ZXh0KTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGMuX3N0YXRlQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5fc3RhdGVDYWxsYmFja3NbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0XHR0bXAgPSBjLnJlbmRlcihjLnByb3BzLCBjLnN0YXRlLCBjLmNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIHNldFN0YXRlIGNhbGxlZCBpbiByZW5kZXIsIHNlZSAjMjU1M1xuXHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdH0gd2hpbGUgKGMuX2RpcnR5ICYmICsrY291bnQgPCAyNSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBzZXRTdGF0ZSBjYWxsZWQgaW4gcmVuZGVyLCBzZWUgIzI1NTNcblx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cblx0XHRcdGlmIChjLmdldENoaWxkQ29udGV4dCAhPSBudWxsKSB7XG5cdFx0XHRcdGdsb2JhbENvbnRleHQgPSBhc3NpZ24oYXNzaWduKHt9LCBnbG9iYWxDb250ZXh0KSwgYy5nZXRDaGlsZENvbnRleHQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmICFpc05ldyAmJiBjLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9IG51bGwpIHtcblx0XHRcdFx0c25hcHNob3QgPSBjLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKG9sZFByb3BzLCBvbGRTdGF0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBpc1RvcExldmVsRnJhZ21lbnQgPVxuXHRcdFx0XHR0bXAgIT0gbnVsbCAmJiB0bXAudHlwZSA9PT0gRnJhZ21lbnQgJiYgdG1wLmtleSA9PSBudWxsO1xuXHRcdFx0bGV0IHJlbmRlclJlc3VsdCA9IGlzVG9wTGV2ZWxGcmFnbWVudCA/IHRtcC5wcm9wcy5jaGlsZHJlbiA6IHRtcDtcblxuXHRcdFx0ZGlmZkNoaWxkcmVuKFxuXHRcdFx0XHRwYXJlbnREb20sXG5cdFx0XHRcdGlzQXJyYXkocmVuZGVyUmVzdWx0KSA/IHJlbmRlclJlc3VsdCA6IFtyZW5kZXJSZXN1bHRdLFxuXHRcdFx0XHRuZXdWTm9kZSxcblx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdGdsb2JhbENvbnRleHQsXG5cdFx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0XHRvbGREb20sXG5cdFx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0XHRyZWZRdWV1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Yy5iYXNlID0gbmV3Vk5vZGUuX2RvbTtcblxuXHRcdFx0Ly8gV2Ugc3VjY2Vzc2Z1bGx5IHJlbmRlcmVkIHRoaXMgVk5vZGUsIHVuc2V0IGFueSBzdG9yZWQgaHlkcmF0aW9uL2JhaWxvdXQgc3RhdGU6XG5cdFx0XHRuZXdWTm9kZS5fZmxhZ3MgJj0gUkVTRVRfTU9ERTtcblxuXHRcdFx0aWYgKGMuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29tbWl0UXVldWUucHVzaChjKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0XHRjLl9wZW5kaW5nRXJyb3IgPSBjLl9wcm9jZXNzaW5nRXhjZXB0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdFx0Ly8gaWYgaHlkcmF0aW5nIG9yIGNyZWF0aW5nIGluaXRpYWwgdHJlZSwgYmFpbG91dCBwcmVzZXJ2ZXMgRE9NOlxuXHRcdFx0aWYgKGlzSHlkcmF0aW5nIHx8IGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2ZsYWdzIHw9IGlzSHlkcmF0aW5nXG5cdFx0XHRcdFx0PyBNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRFxuXHRcdFx0XHRcdDogTU9ERV9TVVNQRU5ERUQ7XG5cblx0XHRcdFx0d2hpbGUgKG9sZERvbSAmJiBvbGREb20ubm9kZVR5cGUgPT09IDggJiYgb2xkRG9tLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdFx0b2xkRG9tID0gb2xkRG9tLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuW2V4Y2Vzc0RvbUNoaWxkcmVuLmluZGV4T2Yob2xkRG9tKV0gPSBudWxsO1xuXHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkRG9tO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdH1cblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgbmV3Vk5vZGUsIG9sZFZOb2RlKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPT0gbnVsbCAmJlxuXHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9PT0gb2xkVk5vZGUuX29yaWdpbmFsXG5cdCkge1xuXHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0fSBlbHNlIHtcblx0XHRuZXdWTm9kZS5fZG9tID0gZGlmZkVsZW1lbnROb2Rlcyhcblx0XHRcdG9sZFZOb2RlLl9kb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdHJlZlF1ZXVlXG5cdFx0KTtcblx0fVxuXG5cdGlmICgodG1wID0gb3B0aW9ucy5kaWZmZWQpKSB0bXAobmV3Vk5vZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzXG4gKiB3aGljaCBoYXZlIGNhbGxiYWNrcyB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtWTm9kZX0gcm9vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0Um9vdChjb21taXRRdWV1ZSwgcm9vdCwgcmVmUXVldWUpIHtcblx0cm9vdC5fbmV4dERvbSA9IHVuZGVmaW5lZDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJlZlF1ZXVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0YXBwbHlSZWYocmVmUXVldWVbaV0sIHJlZlF1ZXVlWysraV0sIHJlZlF1ZXVlWysraV0pO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuX2NvbW1pdCkgb3B0aW9ucy5fY29tbWl0KHJvb3QsIGNvbW1pdFF1ZXVlKTtcblxuXHRjb21taXRRdWV1ZS5zb21lKGMgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFJldXNlIHRoZSBjb21taXRRdWV1ZSB2YXJpYWJsZSBoZXJlIHNvIHRoZSB0eXBlIGNoYW5nZXNcblx0XHRcdGNvbW1pdFF1ZXVlID0gYy5fcmVuZGVyQ2FsbGJhY2tzO1xuXHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRjb21taXRRdWV1ZS5zb21lKGNiID0+IHtcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBTZWUgYWJvdmUgY29tbWVudCBvbiBjb21taXRRdWV1ZVxuXHRcdFx0XHRjYi5jYWxsKGMpO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjLl92bm9kZSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBEaWZmIHR3byB2aXJ0dWFsIG5vZGVzIHJlcHJlc2VudGluZyBET00gZWxlbWVudFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBkb20gVGhlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgdmlydHVhbCBub2Rlc1xuICogYmVpbmcgZGlmZmVkXG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdWTm9kZSBUaGUgbmV3IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtWTm9kZX0gb2xkVk5vZGUgVGhlIG9sZCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxDb250ZXh0IFRoZSBjdXJyZW50IGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIEN1cnJlbnQgbmFtZXNwYWNlIG9mIHRoZSBET00gbm9kZSAoSFRNTCwgU1ZHLCBvciBNYXRoTUwpXG4gKiBAcGFyYW0ge0FycmF5PFByZWFjdEVsZW1lbnQ+fSBleGNlc3NEb21DaGlsZHJlblxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBjYWxsYmFja3NcbiAqIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHlkcmF0aW5nIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBpbiBoeWRyYXRpb25cbiAqIEBwYXJhbSB7YW55W119IHJlZlF1ZXVlIGFuIGFycmF5IG9mIGVsZW1lbnRzIG5lZWRlZCB0byBpbnZva2UgcmVmc1xuICogQHJldHVybnMge1ByZWFjdEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGRpZmZFbGVtZW50Tm9kZXMoXG5cdGRvbSxcblx0bmV3Vk5vZGUsXG5cdG9sZFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRuYW1lc3BhY2UsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IG9sZFByb3BzID0gb2xkVk5vZGUucHJvcHM7XG5cdGxldCBuZXdQcm9wcyA9IG5ld1ZOb2RlLnByb3BzO1xuXHRsZXQgbm9kZVR5cGUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5ld1ZOb2RlLnR5cGUpO1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG5ld0h0bWw7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG9sZEh0bWw7XG5cdC8qKiBAdHlwZSB7Q29tcG9uZW50Q2hpbGRyZW59ICovXG5cdGxldCBuZXdDaGlsZHJlbjtcblx0bGV0IHZhbHVlO1xuXHRsZXQgaW5wdXRWYWx1ZTtcblx0bGV0IGNoZWNrZWQ7XG5cblx0Ly8gVHJhY2tzIGVudGVyaW5nIGFuZCBleGl0aW5nIG5hbWVzcGFjZXMgd2hlbiBkZXNjZW5kaW5nIHRocm91Z2ggdGhlIHRyZWUuXG5cdGlmIChub2RlVHlwZSA9PT0gJ3N2ZycpIG5hbWVzcGFjZSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cdGVsc2UgaWYgKG5vZGVUeXBlID09PSAnbWF0aCcpXG5cdFx0bmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuXHRlbHNlIGlmICghbmFtZXNwYWNlKSBuYW1lc3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG5cblx0aWYgKGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgZXhjZXNzRG9tQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhbHVlID0gZXhjZXNzRG9tQ2hpbGRyZW5baV07XG5cblx0XHRcdC8vIGlmIG5ld1ZOb2RlIG1hdGNoZXMgYW4gZWxlbWVudCBpbiBleGNlc3NEb21DaGlsZHJlbiBvciB0aGUgYGRvbWBcblx0XHRcdC8vIGFyZ3VtZW50IG1hdGNoZXMgYW4gZWxlbWVudCBpbiBleGNlc3NEb21DaGlsZHJlbiwgcmVtb3ZlIGl0IGZyb21cblx0XHRcdC8vIGV4Y2Vzc0RvbUNoaWxkcmVuIHNvIGl0IGlzbid0IGxhdGVyIHJlbW92ZWQgaW4gZGlmZkNoaWxkcmVuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHZhbHVlICYmXG5cdFx0XHRcdCdzZXRBdHRyaWJ1dGUnIGluIHZhbHVlID09PSAhIW5vZGVUeXBlICYmXG5cdFx0XHRcdChub2RlVHlwZSA/IHZhbHVlLmxvY2FsTmFtZSA9PT0gbm9kZVR5cGUgOiB2YWx1ZS5ub2RlVHlwZSA9PT0gMylcblx0XHRcdCkge1xuXHRcdFx0XHRkb20gPSB2YWx1ZTtcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW5baV0gPSBudWxsO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoZG9tID09IG51bGwpIHtcblx0XHRpZiAobm9kZVR5cGUgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdQcm9wcyk7XG5cdFx0fVxuXG5cdFx0ZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0bm9kZVR5cGUsXG5cdFx0XHRuZXdQcm9wcy5pcyAmJiBuZXdQcm9wc1xuXHRcdCk7XG5cblx0XHQvLyB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgbm9kZSwgc28gd2UgY2FuIGFzc3VtZSB0aGlzIGlzIGEgbmV3IHN1YnRyZWUgKGluXG5cdFx0Ly8gY2FzZSB3ZSBhcmUgaHlkcmF0aW5nKSwgdGhpcyBkZW9wdHMgdGhlIGh5ZHJhdGVcblx0XHRpZiAoaXNIeWRyYXRpbmcpIHtcblx0XHRcdGlmIChvcHRpb25zLl9oeWRyYXRpb25NaXNtYXRjaClcblx0XHRcdFx0b3B0aW9ucy5faHlkcmF0aW9uTWlzbWF0Y2gobmV3Vk5vZGUsIGV4Y2Vzc0RvbUNoaWxkcmVuKTtcblx0XHRcdGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIHdlIGNyZWF0ZWQgYSBuZXcgcGFyZW50LCBzbyBub25lIG9mIHRoZSBwcmV2aW91c2x5IGF0dGFjaGVkIGNoaWxkcmVuIGNhbiBiZSByZXVzZWQ6XG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPSBudWxsO1xuXHR9XG5cblx0aWYgKG5vZGVUeXBlID09PSBudWxsKSB7XG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgd2Ugc3RpbGwgaGF2ZSB0byBzcGxpdCBtZXJnZWQgdGV4dCBmcm9tIFNTUidkIEhUTUwuXG5cdFx0aWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyAmJiAoIWlzSHlkcmF0aW5nIHx8IGRvbS5kYXRhICE9PSBuZXdQcm9wcykpIHtcblx0XHRcdGRvbS5kYXRhID0gbmV3UHJvcHM7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIElmIGV4Y2Vzc0RvbUNoaWxkcmVuIHdhcyBub3QgbnVsbCwgcmVwb3B1bGF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBjaGlsZHJlbjpcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IGV4Y2Vzc0RvbUNoaWxkcmVuICYmIHNsaWNlLmNhbGwoZG9tLmNoaWxkTm9kZXMpO1xuXG5cdFx0b2xkUHJvcHMgPSBvbGRWTm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7XG5cblx0XHQvLyBJZiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgYXJlIG5vdCBoeWRyYXRpbmcgYnV0IGFyZSB1c2luZ1xuXHRcdC8vIGV4aXN0aW5nIERPTSAoZS5nLiByZXBsYWNlTm9kZSkgd2Ugc2hvdWxkIHJlYWQgdGhlIGV4aXN0aW5nIERPTVxuXHRcdC8vIGF0dHJpYnV0ZXMgdG8gZGlmZiB0aGVtXG5cdFx0aWYgKCFpc0h5ZHJhdGluZyAmJiBleGNlc3NEb21DaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRvbGRQcm9wcyA9IHt9O1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRvbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhbHVlID0gZG9tLmF0dHJpYnV0ZXNbaV07XG5cdFx0XHRcdG9sZFByb3BzW3ZhbHVlLm5hbWVdID0gdmFsdWUudmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpIGluIG9sZFByb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG9sZFByb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0b2xkSHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmICghKGkgaW4gbmV3UHJvcHMpKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoaSA9PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIG5ld1Byb3BzKSB8fFxuXHRcdFx0XHRcdChpID09ICdjaGVja2VkJyAmJiAnZGVmYXVsdENoZWNrZWQnIGluIG5ld1Byb3BzKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIG51bGwsIHZhbHVlLCBuYW1lc3BhY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIER1cmluZyBoeWRyYXRpb24sIHByb3BzIGFyZSBub3QgZGlmZmVkIGF0IGFsbCAoaW5jbHVkaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKVxuXHRcdC8vIEBUT0RPIHdlIHNob3VsZCB3YXJuIGluIGRlYnVnIG1vZGUgd2hlbiBwcm9wcyBkb24ndCBtYXRjaCBoZXJlLlxuXHRcdGZvciAoaSBpbiBuZXdQcm9wcykge1xuXHRcdFx0dmFsdWUgPSBuZXdQcm9wc1tpXTtcblx0XHRcdGlmIChpID09ICdjaGlsZHJlbicpIHtcblx0XHRcdFx0bmV3Q2hpbGRyZW4gPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnKSB7XG5cdFx0XHRcdG5ld0h0bWwgPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAndmFsdWUnKSB7XG5cdFx0XHRcdGlucHV0VmFsdWUgPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAnY2hlY2tlZCcpIHtcblx0XHRcdFx0Y2hlY2tlZCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KCFpc0h5ZHJhdGluZyB8fCB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykgJiZcblx0XHRcdFx0b2xkUHJvcHNbaV0gIT09IHZhbHVlXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0UHJvcGVydHkoZG9tLCBpLCB2YWx1ZSwgb2xkUHJvcHNbaV0sIG5hbWVzcGFjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIG5ldyB2bm9kZSBkaWRuJ3QgaGF2ZSBkYW5nZXJvdXNseVNldElubmVySFRNTCwgZGlmZiBpdHMgY2hpbGRyZW5cblx0XHRpZiAobmV3SHRtbCkge1xuXHRcdFx0Ly8gQXZvaWQgcmUtYXBwbHlpbmcgdGhlIHNhbWUgJ19faHRtbCcgaWYgaXQgZGlkIG5vdCBjaGFuZ2VkIGJldHdlZW4gcmUtcmVuZGVyXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFpc0h5ZHJhdGluZyAmJlxuXHRcdFx0XHQoIW9sZEh0bWwgfHxcblx0XHRcdFx0XHQobmV3SHRtbC5fX2h0bWwgIT09IG9sZEh0bWwuX19odG1sICYmXG5cdFx0XHRcdFx0XHRuZXdIdG1sLl9faHRtbCAhPT0gZG9tLmlubmVySFRNTCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0ZG9tLmlubmVySFRNTCA9IG5ld0h0bWwuX19odG1sO1xuXHRcdFx0fVxuXG5cdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG9sZEh0bWwpIGRvbS5pbm5lckhUTUwgPSAnJztcblxuXHRcdFx0ZGlmZkNoaWxkcmVuKFxuXHRcdFx0XHRkb20sXG5cdFx0XHRcdGlzQXJyYXkobmV3Q2hpbGRyZW4pID8gbmV3Q2hpbGRyZW4gOiBbbmV3Q2hpbGRyZW5dLFxuXHRcdFx0XHRuZXdWTm9kZSxcblx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdGdsb2JhbENvbnRleHQsXG5cdFx0XHRcdG5vZGVUeXBlID09PSAnZm9yZWlnbk9iamVjdCdcblx0XHRcdFx0XHQ/ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJ1xuXHRcdFx0XHRcdDogbmFtZXNwYWNlLFxuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuXG5cdFx0XHRcdFx0PyBleGNlc3NEb21DaGlsZHJlblswXVxuXHRcdFx0XHRcdDogb2xkVk5vZGUuX2NoaWxkcmVuICYmIGdldERvbVNpYmxpbmcob2xkVk5vZGUsIDApLFxuXHRcdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdFx0cmVmUXVldWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBub3QgcGFydCBvZiBhbnkgdm5vZGUuXG5cdFx0XHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdFx0XHRmb3IgKGkgPSBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGktLTsgKSB7XG5cdFx0XHRcdFx0cmVtb3ZlTm9kZShleGNlc3NEb21DaGlsZHJlbltpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBcyBhYm92ZSwgZG9uJ3QgZGlmZiBwcm9wcyBkdXJpbmcgaHlkcmF0aW9uXG5cdFx0aWYgKCFpc0h5ZHJhdGluZykge1xuXHRcdFx0aSA9ICd2YWx1ZSc7XG5cdFx0XHRpZiAobm9kZVR5cGUgPT09ICdwcm9ncmVzcycgJiYgaW5wdXRWYWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0Ly8gIzI3NTYgRm9yIHRoZSA8cHJvZ3Jlc3M+LWVsZW1lbnQgdGhlIGluaXRpYWwgdmFsdWUgaXMgMCxcblx0XHRcdFx0Ly8gZGVzcGl0ZSB0aGUgYXR0cmlidXRlIG5vdCBiZWluZyBwcmVzZW50LiBXaGVuIHRoZSBhdHRyaWJ1dGVcblx0XHRcdFx0Ly8gaXMgbWlzc2luZyB0aGUgcHJvZ3Jlc3MgYmFyIGlzIHRyZWF0ZWQgYXMgaW5kZXRlcm1pbmF0ZS5cblx0XHRcdFx0Ly8gVG8gZml4IHRoYXQgd2UnbGwgYWx3YXlzIHVwZGF0ZSBpdCB3aGVuIGl0IGlzIDAgZm9yIHByb2dyZXNzIGVsZW1lbnRzXG5cdFx0XHRcdChpbnB1dFZhbHVlICE9PSBkb21baV0gfHxcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdwcm9ncmVzcycgJiYgIWlucHV0VmFsdWUpIHx8XG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBvbmx5IGZvciBJRSAxMSB0byBmaXggPHNlbGVjdD4gdmFsdWUgbm90IGJlaW5nIHVwZGF0ZWQuXG5cdFx0XHRcdFx0Ly8gVG8gYXZvaWQgYSBzdGFsZSBzZWxlY3QgdmFsdWUgd2UgbmVlZCB0byBzZXQgdGhlIG9wdGlvbi52YWx1ZVxuXHRcdFx0XHRcdC8vIGFnYWluLCB3aGljaCB0cmlnZ2VycyBJRTExIHRvIHJlLWV2YWx1YXRlIHRoZSBzZWxlY3QgdmFsdWVcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdvcHRpb24nICYmIGlucHV0VmFsdWUgIT09IG9sZFByb3BzW2ldKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGlucHV0VmFsdWUsIG9sZFByb3BzW2ldLCBuYW1lc3BhY2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0gJ2NoZWNrZWQnO1xuXHRcdFx0aWYgKGNoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiBjaGVja2VkICE9PSBkb21baV0pIHtcblx0XHRcdFx0c2V0UHJvcGVydHkoZG9tLCBpLCBjaGVja2VkLCBvbGRQcm9wc1tpXSwgbmFtZXNwYWNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZG9tO1xufVxuXG4vKipcbiAqIEludm9rZSBvciB1cGRhdGUgYSByZWYsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIGEgZnVuY3Rpb24gb3Igb2JqZWN0IHJlZi5cbiAqIEBwYXJhbSB7UmVmPGFueT4gJiB7IF91bm1vdW50PzogdW5rbm93biB9fSByZWZcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UmVmKHJlZiwgdmFsdWUsIHZub2RlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiByZWYgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IGhhc1JlZlVubW91bnQgPSB0eXBlb2YgcmVmLl91bm1vdW50ID09ICdmdW5jdGlvbic7XG5cdFx0XHRpZiAoaGFzUmVmVW5tb3VudCkge1xuXHRcdFx0XHQvLyBAdHMtaWdub3JlIFRTIGRvZXNuJ3QgbGlrZSBtb3ZpbmcgbmFycm93aW5nIGNoZWNrcyBpbnRvIHZhcmlhYmxlc1xuXHRcdFx0XHRyZWYuX3VubW91bnQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNSZWZVbm1vdW50IHx8IHZhbHVlICE9IG51bGwpIHtcblx0XHRcdFx0Ly8gU3RvcmUgdGhlIGNsZWFudXAgZnVuY3Rpb24gb24gdGhlIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGluc3RhbmNlIG9iamVjdCBpdHNlbGYgdG8gYXZvaWQgc2hhcGVcblx0XHRcdFx0Ly8gdHJhbnNpdGlvbmluZyB2bm9kZVxuXHRcdFx0XHRyZWYuX3VubW91bnQgPSByZWYodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSByZWYuY3VycmVudCA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCB2bm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBVbm1vdW50IGEgdmlydHVhbCBub2RlIGZyb20gdGhlIHRyZWUgYW5kIGFwcGx5IERPTSBjaGFuZ2VzXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHVubW91bnRcbiAqIEBwYXJhbSB7Vk5vZGV9IHBhcmVudFZOb2RlIFRoZSBwYXJlbnQgb2YgdGhlIFZOb2RlIHRoYXQgaW5pdGlhdGVkIHRoZSB1bm1vdW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwUmVtb3ZlXSBGbGFnIHRoYXQgaW5kaWNhdGVzIHRoYXQgYSBwYXJlbnQgbm9kZSBvZiB0aGVcbiAqIGN1cnJlbnQgZWxlbWVudCBpcyBhbHJlYWR5IGRldGFjaGVkIGZyb20gdGhlIERPTS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubW91bnQodm5vZGUsIHBhcmVudFZOb2RlLCBza2lwUmVtb3ZlKSB7XG5cdGxldCByO1xuXHRpZiAob3B0aW9ucy51bm1vdW50KSBvcHRpb25zLnVubW91bnQodm5vZGUpO1xuXG5cdGlmICgociA9IHZub2RlLnJlZikpIHtcblx0XHRpZiAoIXIuY3VycmVudCB8fCByLmN1cnJlbnQgPT09IHZub2RlLl9kb20pIHtcblx0XHRcdGFwcGx5UmVmKHIsIG51bGwsIHBhcmVudFZOb2RlKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoKHIgPSB2bm9kZS5fY29tcG9uZW50KSAhPSBudWxsKSB7XG5cdFx0aWYgKHIuY29tcG9uZW50V2lsbFVubW91bnQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBwYXJlbnRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ci5iYXNlID0gci5fcGFyZW50RG9tID0gbnVsbDtcblx0fVxuXG5cdGlmICgociA9IHZub2RlLl9jaGlsZHJlbikpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChyW2ldKSB7XG5cdFx0XHRcdHVubW91bnQoXG5cdFx0XHRcdFx0cltpXSxcblx0XHRcdFx0XHRwYXJlbnRWTm9kZSxcblx0XHRcdFx0XHRza2lwUmVtb3ZlIHx8IHR5cGVvZiB2bm9kZS50eXBlICE9ICdmdW5jdGlvbidcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIXNraXBSZW1vdmUpIHtcblx0XHRyZW1vdmVOb2RlKHZub2RlLl9kb20pO1xuXHR9XG5cblx0Ly8gTXVzdCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYF9uZXh0RG9tYFxuXHQvLyBmb3Igd2hpY2ggYG51bGxgIGlzIGEgdmFsaWQgdmFsdWUuIFNlZSBjb21tZW50IGluIGBjcmVhdGUtZWxlbWVudC5qc2Bcblx0dm5vZGUuX2NvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQgPSB2bm9kZS5fZG9tID0gdm5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgYC5yZW5kZXIoKWAgbWV0aG9kIGZvciBhIFBGQyBiYWNraW5nIGluc3RhbmNlLiAqL1xuZnVuY3Rpb24gZG9SZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KSB7XG5cdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBFTVBUWV9PQkogfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb21taXRSb290LCBkaWZmIH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAnLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFJlbmRlciBhIFByZWFjdCB2aXJ0dWFsIG5vZGUgaW50byBhIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHJlbmRlclxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnQgfCBvYmplY3R9IFtyZXBsYWNlTm9kZV0gT3B0aW9uYWw6IEF0dGVtcHQgdG8gcmUtdXNlIGFuXG4gKiBleGlzdGluZyBET00gdHJlZSByb290ZWQgYXQgYHJlcGxhY2VOb2RlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKHZub2RlLCBwYXJlbnREb20sIHJlcGxhY2VOb2RlKSB7XG5cdGlmIChvcHRpb25zLl9yb290KSBvcHRpb25zLl9yb290KHZub2RlLCBwYXJlbnREb20pO1xuXG5cdC8vIFdlIGFidXNlIHRoZSBgcmVwbGFjZU5vZGVgIHBhcmFtZXRlciBpbiBgaHlkcmF0ZSgpYCB0byBzaWduYWwgaWYgd2UgYXJlIGluXG5cdC8vIGh5ZHJhdGlvbiBtb2RlIG9yIG5vdCBieSBwYXNzaW5nIHRoZSBgaHlkcmF0ZWAgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIERPTVxuXHQvLyBlbGVtZW50Li5cblx0bGV0IGlzSHlkcmF0aW5nID0gdHlwZW9mIHJlcGxhY2VOb2RlID09ICdmdW5jdGlvbic7XG5cblx0Ly8gVG8gYmUgYWJsZSB0byBzdXBwb3J0IGNhbGxpbmcgYHJlbmRlcigpYCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZVxuXHQvLyBET00gbm9kZSwgd2UgbmVlZCB0byBvYnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIHRyZWUuIFdlIGRvXG5cdC8vIHRoaXMgYnkgYXNzaWduaW5nIGEgbmV3IGBfY2hpbGRyZW5gIHByb3BlcnR5IHRvIERPTSBub2RlcyB3aGljaCBwb2ludHNcblx0Ly8gdG8gdGhlIGxhc3QgcmVuZGVyZWQgdHJlZS4gQnkgZGVmYXVsdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50LCB3aGljaFxuXHQvLyBtZWFucyB0aGF0IHdlIGFyZSBtb3VudGluZyBhIG5ldyB0cmVlIGZvciB0aGUgZmlyc3QgdGltZS5cblx0bGV0IG9sZFZOb2RlID0gaXNIeWRyYXRpbmdcblx0XHQ/IG51bGxcblx0XHQ6IChyZXBsYWNlTm9kZSAmJiByZXBsYWNlTm9kZS5fY2hpbGRyZW4pIHx8IHBhcmVudERvbS5fY2hpbGRyZW47XG5cblx0dm5vZGUgPSAoKCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZSkgfHwgcGFyZW50RG9tKS5fY2hpbGRyZW4gPVxuXHRcdGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIFt2bm9kZV0pO1xuXG5cdC8vIExpc3Qgb2YgZWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZmZpbmcuXG5cdGxldCBjb21taXRRdWV1ZSA9IFtdLFxuXHRcdHJlZlF1ZXVlID0gW107XG5cdGRpZmYoXG5cdFx0cGFyZW50RG9tLFxuXHRcdC8vIERldGVybWluZSB0aGUgbmV3IHZub2RlIHRyZWUgYW5kIHN0b3JlIGl0IG9uIHRoZSBET00gZWxlbWVudCBvblxuXHRcdC8vIG91ciBjdXN0b20gYF9jaGlsZHJlbmAgcHJvcGVydHkuXG5cdFx0dm5vZGUsXG5cdFx0b2xkVk5vZGUgfHwgRU1QVFlfT0JKLFxuXHRcdEVNUFRZX09CSixcblx0XHRwYXJlbnREb20ubmFtZXNwYWNlVVJJLFxuXHRcdCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZVxuXHRcdFx0PyBbcmVwbGFjZU5vZGVdXG5cdFx0XHQ6IG9sZFZOb2RlXG5cdFx0XHRcdD8gbnVsbFxuXHRcdFx0XHQ6IHBhcmVudERvbS5maXJzdENoaWxkXG5cdFx0XHRcdFx0PyBzbGljZS5jYWxsKHBhcmVudERvbS5jaGlsZE5vZGVzKVxuXHRcdFx0XHRcdDogbnVsbCxcblx0XHRjb21taXRRdWV1ZSxcblx0XHQhaXNIeWRyYXRpbmcgJiYgcmVwbGFjZU5vZGVcblx0XHRcdD8gcmVwbGFjZU5vZGVcblx0XHRcdDogb2xkVk5vZGVcblx0XHRcdFx0PyBvbGRWTm9kZS5fZG9tXG5cdFx0XHRcdDogcGFyZW50RG9tLmZpcnN0Q2hpbGQsXG5cdFx0aXNIeWRyYXRpbmcsXG5cdFx0cmVmUXVldWVcblx0KTtcblxuXHQvLyBGbHVzaCBhbGwgcXVldWVkIGVmZmVjdHNcblx0Y29tbWl0Um9vdChjb21taXRRdWV1ZSwgdm5vZGUsIHJlZlF1ZXVlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgRE9NIGVsZW1lbnQgd2l0aCBkYXRhIGZyb20gYSBQcmVhY3QgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHJlbmRlclxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHRvIHVwZGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZSh2bm9kZSwgcGFyZW50RG9tKSB7XG5cdHJlbmRlcih2bm9kZSwgcGFyZW50RG9tLCBoeWRyYXRlKTtcbn1cbiIsICIvKipcbiAqIEZpbmQgdGhlIGNsb3Nlc3QgZXJyb3IgYm91bmRhcnkgdG8gYSB0aHJvd24gZXJyb3IgYW5kIGNhbGwgaXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBlcnJvciBUaGUgdGhyb3duIHZhbHVlXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZSBUaGUgdm5vZGUgdGhhdCB0aHJldyB0aGUgZXJyb3IgdGhhdCB3YXMgY2F1Z2h0IChleGNlcHRcbiAqIGZvciB1bm1vdW50aW5nIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdGhlIGhpZ2hlc3QgcGFyZW50IHRoYXQgd2FzIGJlaW5nXG4gKiB1bm1vdW50ZWQpXG4gKiBAcGFyYW0ge1ZOb2RlfSBbb2xkVk5vZGVdXG4gKiBAcGFyYW0ge0Vycm9ySW5mb30gW2Vycm9ySW5mb11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jYXRjaEVycm9yKGVycm9yLCB2bm9kZSwgb2xkVk5vZGUsIGVycm9ySW5mbykge1xuXHQvKiogQHR5cGUge0NvbXBvbmVudH0gKi9cblx0bGV0IGNvbXBvbmVudCxcblx0XHQvKiogQHR5cGUge0NvbXBvbmVudFR5cGV9ICovXG5cdFx0Y3Rvcixcblx0XHQvKiogQHR5cGUge2Jvb2xlYW59ICovXG5cdFx0aGFuZGxlZDtcblxuXHRmb3IgKDsgKHZub2RlID0gdm5vZGUuX3BhcmVudCk7ICkge1xuXHRcdGlmICgoY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudCkgJiYgIWNvbXBvbmVudC5fcHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y3RvciA9IGNvbXBvbmVudC5jb25zdHJ1Y3RvcjtcblxuXHRcdFx0XHRpZiAoY3RvciAmJiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50LnNldFN0YXRlKGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IGNvbXBvbmVudC5fZGlydHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoICE9IG51bGwpIHtcblx0XHRcdFx0XHRjb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbyB8fCB7fSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IGNvbXBvbmVudC5fZGlydHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaGlzIGlzIGFuIGVycm9yIGJvdW5kYXJ5LiBNYXJrIGl0IGFzIGhhdmluZyBiYWlsZWQgb3V0LCBhbmQgd2hldGhlciBpdCB3YXMgbWlkLWh5ZHJhdGlvbi5cblx0XHRcdFx0aWYgKGhhbmRsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGNvbXBvbmVudC5fcGVuZGluZ0Vycm9yID0gY29tcG9uZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlcnJvciA9IGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhyb3cgZXJyb3I7XG59XG4iLCAiaW1wb3J0IHsgYXNzaWduLCBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVWTm9kZSB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuXG4vKipcbiAqIENsb25lcyB0aGUgZ2l2ZW4gVk5vZGUsIG9wdGlvbmFsbHkgYWRkaW5nIGF0dHJpYnV0ZXMvcHJvcHMgYW5kIHJlcGxhY2luZyBpdHNcbiAqIGNoaWxkcmVuLlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGUgVGhlIHZpcnR1YWwgRE9NIGVsZW1lbnQgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBBdHRyaWJ1dGVzL3Byb3BzIHRvIGFkZCB3aGVuIGNsb25pbmdcbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Q2hpbGRyZW4+fSByZXN0IEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWRcbiAqIGFzIHJlcGxhY2VtZW50IGNoaWxkcmVuLlxuICogQHJldHVybnMge1ZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVFbGVtZW50KHZub2RlLCBwcm9wcywgY2hpbGRyZW4pIHtcblx0bGV0IG5vcm1hbGl6ZWRQcm9wcyA9IGFzc2lnbih7fSwgdm5vZGUucHJvcHMpLFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRsZXQgZGVmYXVsdFByb3BzO1xuXG5cdGlmICh2bm9kZS50eXBlICYmIHZub2RlLnR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0ZGVmYXVsdFByb3BzID0gdm5vZGUudHlwZS5kZWZhdWx0UHJvcHM7XG5cdH1cblxuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAocHJvcHNbaV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gZGVmYXVsdFByb3BzW2ldO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0XHR9XG5cdH1cblxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4gPVxuXHRcdFx0YXJndW1lbnRzLmxlbmd0aCA+IDMgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBjaGlsZHJlbjtcblx0fVxuXG5cdHJldHVybiBjcmVhdGVWTm9kZShcblx0XHR2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXkgfHwgdm5vZGUua2V5LFxuXHRcdHJlZiB8fCB2bm9kZS5yZWYsXG5cdFx0bnVsbFxuXHQpO1xufVxuIiwgImltcG9ydCB7IG9wdGlvbnMgYXMgX29wdGlvbnMgfSBmcm9tICdwcmVhY3QnO1xuXG4vKiogQHR5cGUge251bWJlcn0gKi9cbmxldCBjdXJyZW50SW5kZXg7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fSAqL1xubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fSAqL1xubGV0IHByZXZpb3VzQ29tcG9uZW50O1xuXG4vKiogQHR5cGUge251bWJlcn0gKi9cbmxldCBjdXJyZW50SG9vayA9IDA7XG5cbi8qKiBAdHlwZSB7QXJyYXk8aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50Pn0gKi9cbmxldCBhZnRlclBhaW50RWZmZWN0cyA9IFtdO1xuXG4vLyBDYXN0IHRvIHVzZSBpbnRlcm5hbCBPcHRpb25zIHR5cGVcbmNvbnN0IG9wdGlvbnMgPSAvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLk9wdGlvbnN9ICovIChfb3B0aW9ucyk7XG5cbmxldCBvbGRCZWZvcmVEaWZmID0gb3B0aW9ucy5fZGlmZjtcbmxldCBvbGRCZWZvcmVSZW5kZXIgPSBvcHRpb25zLl9yZW5kZXI7XG5sZXQgb2xkQWZ0ZXJEaWZmID0gb3B0aW9ucy5kaWZmZWQ7XG5sZXQgb2xkQ29tbWl0ID0gb3B0aW9ucy5fY29tbWl0O1xubGV0IG9sZEJlZm9yZVVubW91bnQgPSBvcHRpb25zLnVubW91bnQ7XG5sZXQgb2xkUm9vdCA9IG9wdGlvbnMuX3Jvb3Q7XG5cbmNvbnN0IFJBRl9USU1FT1VUID0gMTAwO1xubGV0IHByZXZSYWY7XG5cbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMuX2RpZmYgPSB2bm9kZSA9PiB7XG5cdGN1cnJlbnRDb21wb25lbnQgPSBudWxsO1xuXHRpZiAob2xkQmVmb3JlRGlmZikgb2xkQmVmb3JlRGlmZih2bm9kZSk7XG59O1xuXG5vcHRpb25zLl9yb290ID0gKHZub2RlLCBwYXJlbnREb20pID0+IHtcblx0aWYgKHZub2RlICYmIHBhcmVudERvbS5fY2hpbGRyZW4gJiYgcGFyZW50RG9tLl9jaGlsZHJlbi5fbWFzaykge1xuXHRcdHZub2RlLl9tYXNrID0gcGFyZW50RG9tLl9jaGlsZHJlbi5fbWFzaztcblx0fVxuXG5cdGlmIChvbGRSb290KSBvbGRSb290KHZub2RlLCBwYXJlbnREb20pO1xufTtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fcmVuZGVyID0gdm5vZGUgPT4ge1xuXHRpZiAob2xkQmVmb3JlUmVuZGVyKSBvbGRCZWZvcmVSZW5kZXIodm5vZGUpO1xuXG5cdGN1cnJlbnRDb21wb25lbnQgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRjdXJyZW50SW5kZXggPSAwO1xuXG5cdGNvbnN0IGhvb2tzID0gY3VycmVudENvbXBvbmVudC5fX2hvb2tzO1xuXHRpZiAoaG9va3MpIHtcblx0XHRpZiAocHJldmlvdXNDb21wb25lbnQgPT09IGN1cnJlbnRDb21wb25lbnQpIHtcblx0XHRcdGhvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdFx0Y3VycmVudENvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRob29rcy5fbGlzdC5mb3JFYWNoKGhvb2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGhvb2tJdGVtLl9uZXh0VmFsdWUpIHtcblx0XHRcdFx0XHRob29rSXRlbS5fdmFsdWUgPSBob29rSXRlbS5fbmV4dFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGhvb2tJdGVtLl9wZW5kaW5nQXJncyA9IGhvb2tJdGVtLl9uZXh0VmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzLmZvckVhY2goaW52b2tlQ2xlYW51cCk7XG5cdFx0XHRob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VFZmZlY3QpO1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzID0gW107XG5cdFx0XHRjdXJyZW50SW5kZXggPSAwO1xuXHRcdH1cblx0fVxuXHRwcmV2aW91c0NvbXBvbmVudCA9IGN1cnJlbnRDb21wb25lbnQ7XG59O1xuXG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUpID0+IHZvaWR9ICovXG5vcHRpb25zLmRpZmZlZCA9IHZub2RlID0+IHtcblx0aWYgKG9sZEFmdGVyRGlmZikgb2xkQWZ0ZXJEaWZmKHZub2RlKTtcblxuXHRjb25zdCBjID0gdm5vZGUuX2NvbXBvbmVudDtcblx0aWYgKGMgJiYgYy5fX2hvb2tzKSB7XG5cdFx0aWYgKGMuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMubGVuZ3RoKSBhZnRlclBhaW50KGFmdGVyUGFpbnRFZmZlY3RzLnB1c2goYykpO1xuXHRcdGMuX19ob29rcy5fbGlzdC5mb3JFYWNoKGhvb2tJdGVtID0+IHtcblx0XHRcdGlmIChob29rSXRlbS5fcGVuZGluZ0FyZ3MpIHtcblx0XHRcdFx0aG9va0l0ZW0uX2FyZ3MgPSBob29rSXRlbS5fcGVuZGluZ0FyZ3M7XG5cdFx0XHR9XG5cdFx0XHRob29rSXRlbS5fcGVuZGluZ0FyZ3MgPSB1bmRlZmluZWQ7XG5cdFx0fSk7XG5cdH1cblx0cHJldmlvdXNDb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcbn07XG5cbi8vIFRPRE86IEltcHJvdmUgdHlwaW5nIG9mIGNvbW1pdFF1ZXVlIHBhcmFtZXRlclxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlLCBjb21taXRRdWV1ZTogYW55KSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fY29tbWl0ID0gKHZub2RlLCBjb21taXRRdWV1ZSkgPT4ge1xuXHRjb21taXRRdWV1ZS5zb21lKGNvbXBvbmVudCA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmZvckVhY2goaW52b2tlQ2xlYW51cCk7XG5cdFx0XHRjb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcyA9IGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLmZpbHRlcihjYiA9PlxuXHRcdFx0XHRjYi5fdmFsdWUgPyBpbnZva2VFZmZlY3QoY2IpIDogdHJ1ZVxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb21taXRRdWV1ZS5zb21lKGMgPT4ge1xuXHRcdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzKSBjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdH0pO1xuXHRcdFx0Y29tbWl0UXVldWUgPSBbXTtcblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgY29tcG9uZW50Ll92bm9kZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRpZiAob2xkQ29tbWl0KSBvbGRDb21taXQodm5vZGUsIGNvbW1pdFF1ZXVlKTtcbn07XG5cbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMudW5tb3VudCA9IHZub2RlID0+IHtcblx0aWYgKG9sZEJlZm9yZVVubW91bnQpIG9sZEJlZm9yZVVubW91bnQodm5vZGUpO1xuXG5cdGNvbnN0IGMgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRpZiAoYyAmJiBjLl9faG9va3MpIHtcblx0XHRsZXQgaGFzRXJyb3JlZDtcblx0XHRjLl9faG9va3MuX2xpc3QuZm9yRWFjaChzID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGludm9rZUNsZWFudXAocyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGhhc0Vycm9yZWQgPSBlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGMuX19ob29rcyA9IHVuZGVmaW5lZDtcblx0XHRpZiAoaGFzRXJyb3JlZCkgb3B0aW9ucy5fY2F0Y2hFcnJvcihoYXNFcnJvcmVkLCBjLl92bm9kZSk7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0IGEgaG9vaydzIHN0YXRlIGZyb20gdGhlIGN1cnJlbnRDb21wb25lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGhvb2sgdG8gZ2V0XG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZSBUaGUgaW5kZXggb2YgdGhlIGhvb2sgdG8gZ2V0XG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBnZXRIb29rU3RhdGUoaW5kZXgsIHR5cGUpIHtcblx0aWYgKG9wdGlvbnMuX2hvb2spIHtcblx0XHRvcHRpb25zLl9ob29rKGN1cnJlbnRDb21wb25lbnQsIGluZGV4LCBjdXJyZW50SG9vayB8fCB0eXBlKTtcblx0fVxuXHRjdXJyZW50SG9vayA9IDA7XG5cblx0Ly8gTGFyZ2VseSBpbnNwaXJlZCBieTpcblx0Ly8gKiBodHRwczovL2dpdGh1Yi5jb20vbWljaGFlbC1rbGVpbi9mdW5jeS5qcy9ibG9iL2Y2YmU3MzQ2OGU2ZWM0NmIwZmY1YWEzY2M0YzliYWY3MmEyOTAyNWEvc3JjL2hvb2tzL2NvcmVfaG9va3MubWpzXG5cdC8vICogaHR0cHM6Ly9naXRodWIuY29tL21pY2hhZWwta2xlaW4vZnVuY3kuanMvYmxvYi82NTBiZWFhNThjNDNjMzNhNzQ4MjBhM2M5OGIzYzcwNzljZjJlMzMzL3NyYy9yZW5kZXJlci5tanNcblx0Ly8gT3RoZXIgaW1wbGVtZW50YXRpb25zIHRvIGxvb2sgYXQ6XG5cdC8vICogaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL21ub3gwNXFwOFxuXHRjb25zdCBob29rcyA9XG5cdFx0Y3VycmVudENvbXBvbmVudC5fX2hvb2tzIHx8XG5cdFx0KGN1cnJlbnRDb21wb25lbnQuX19ob29rcyA9IHtcblx0XHRcdF9saXN0OiBbXSxcblx0XHRcdF9wZW5kaW5nRWZmZWN0czogW11cblx0XHR9KTtcblxuXHRpZiAoaW5kZXggPj0gaG9va3MuX2xpc3QubGVuZ3RoKSB7XG5cdFx0aG9va3MuX2xpc3QucHVzaCh7fSk7XG5cdH1cblxuXHRyZXR1cm4gaG9va3MuX2xpc3RbaW5kZXhdO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gU1xuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5EaXNwYXRjaDxpbXBvcnQoJy4vaW5kZXgnKS5TdGF0ZVVwZGF0ZXI8Uz4+fSBbaW5pdGlhbFN0YXRlXVxuICogQHJldHVybnMge1tTLCAoc3RhdGU6IFMpID0+IHZvaWRdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG5cdGN1cnJlbnRIb29rID0gMTtcblx0cmV0dXJuIHVzZVJlZHVjZXIoaW52b2tlT3JSZXR1cm4sIGluaXRpYWxTdGF0ZSk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIHt1bmtub3dufSBTXG4gKiBAdGVtcGxhdGUge3Vua25vd259IEFcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuUmVkdWNlcjxTLCBBPn0gcmVkdWNlclxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5EaXNwYXRjaDxpbXBvcnQoJy4vaW5kZXgnKS5TdGF0ZVVwZGF0ZXI8Uz4+fSBpbml0aWFsU3RhdGVcbiAqIEBwYXJhbSB7KGluaXRpYWxTdGF0ZTogYW55KSA9PiB2b2lkfSBbaW5pdF1cbiAqIEByZXR1cm5zIHtbIFMsIChzdGF0ZTogUykgPT4gdm9pZCBdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsU3RhdGUsIGluaXQpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5SZWR1Y2VySG9va1N0YXRlfSAqL1xuXHRjb25zdCBob29rU3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDIpO1xuXHRob29rU3RhdGUuX3JlZHVjZXIgPSByZWR1Y2VyO1xuXHRpZiAoIWhvb2tTdGF0ZS5fY29tcG9uZW50KSB7XG5cdFx0aG9va1N0YXRlLl92YWx1ZSA9IFtcblx0XHRcdCFpbml0ID8gaW52b2tlT3JSZXR1cm4odW5kZWZpbmVkLCBpbml0aWFsU3RhdGUpIDogaW5pdChpbml0aWFsU3RhdGUpLFxuXG5cdFx0XHRhY3Rpb24gPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBob29rU3RhdGUuX25leHRWYWx1ZVxuXHRcdFx0XHRcdD8gaG9va1N0YXRlLl9uZXh0VmFsdWVbMF1cblx0XHRcdFx0XHQ6IGhvb2tTdGF0ZS5fdmFsdWVbMF07XG5cdFx0XHRcdGNvbnN0IG5leHRWYWx1ZSA9IGhvb2tTdGF0ZS5fcmVkdWNlcihjdXJyZW50VmFsdWUsIGFjdGlvbik7XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSAhPT0gbmV4dFZhbHVlKSB7XG5cdFx0XHRcdFx0aG9va1N0YXRlLl9uZXh0VmFsdWUgPSBbbmV4dFZhbHVlLCBob29rU3RhdGUuX3ZhbHVlWzFdXTtcblx0XHRcdFx0XHRob29rU3RhdGUuX2NvbXBvbmVudC5zZXRTdGF0ZSh7fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0aG9va1N0YXRlLl9jb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50O1xuXG5cdFx0aWYgKCFjdXJyZW50Q29tcG9uZW50Ll9oYXNTY3VGcm9tSG9va3MpIHtcblx0XHRcdGN1cnJlbnRDb21wb25lbnQuX2hhc1NjdUZyb21Ib29rcyA9IHRydWU7XG5cdFx0XHRsZXQgcHJldlNjdSA9IGN1cnJlbnRDb21wb25lbnQuc2hvdWxkQ29tcG9uZW50VXBkYXRlO1xuXHRcdFx0Y29uc3QgcHJldkNXVSA9IGN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50V2lsbFVwZGF0ZTtcblxuXHRcdFx0Ly8gSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgZm9yY2VkIHVwZGF0ZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCB3aWxsXG5cdFx0XHQvLyBub3QgYmUgY2FsbGVkLiBCdXQgd2UgdXNlIHRoYXQgdG8gdXBkYXRlIHRoZSBob29rIHZhbHVlcywgc28gd2Vcblx0XHRcdC8vIG5lZWQgdG8gY2FsbCBpdC5cblx0XHRcdGN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIChwLCBzLCBjKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9mb3JjZSkge1xuXHRcdFx0XHRcdGxldCB0bXAgPSBwcmV2U2N1O1xuXHRcdFx0XHRcdC8vIENsZWFyIHRvIGF2b2lkIG90aGVyIHNDVSBob29rcyBmcm9tIGJlaW5nIGNhbGxlZFxuXHRcdFx0XHRcdHByZXZTY3UgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0dXBkYXRlSG9va1N0YXRlKHAsIHMsIGMpO1xuXHRcdFx0XHRcdHByZXZTY3UgPSB0bXA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocHJldkNXVSkgcHJldkNXVS5jYWxsKHRoaXMsIHAsIHMsIGMpO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gVGhpcyBTQ1UgaGFzIHRoZSBwdXJwb3NlIG9mIGJhaWxpbmcgb3V0IGFmdGVyIHJlcGVhdGVkIHVwZGF0ZXNcblx0XHRcdC8vIHRvIHN0YXRlZnVsIGhvb2tzLlxuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIG5leHQgdmFsdWUgaW4gX25leHRWYWx1ZVswXSBhbmQga2VlcCBkb2luZyB0aGF0IGZvciBhbGxcblx0XHRcdC8vIHN0YXRlIHNldHRlcnMsIGlmIHdlIGhhdmUgbmV4dCBzdGF0ZXMgYW5kXG5cdFx0XHQvLyBhbGwgbmV4dCBzdGF0ZXMgd2l0aGluIGEgY29tcG9uZW50IGVuZCB1cCBiZWluZyBlcXVhbCB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZVxuXHRcdFx0Ly8gd2UgYXJlIHNhZmUgdG8gYmFpbCBvdXQgZm9yIHRoaXMgc3BlY2lmaWMgY29tcG9uZW50LlxuXHRcdFx0LyoqXG5cdFx0XHQgKlxuXHRcdFx0ICogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudFtcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiXX1cblx0XHRcdCAqL1xuXHRcdFx0Ly8gQHRzLWlnbm9yZSAtIFdlIGRvbid0IHVzZSBUUyB0byBkb3dudHJhbnNwaWxlXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW5uZXItZGVjbGFyYXRpb25zXG5cdFx0XHRmdW5jdGlvbiB1cGRhdGVIb29rU3RhdGUocCwgcywgYykge1xuXHRcdFx0XHRpZiAoIWhvb2tTdGF0ZS5fY29tcG9uZW50Ll9faG9va3MpIHJldHVybiB0cnVlO1xuXG5cdFx0XHRcdC8qKiBAdHlwZSB7KHg6IGltcG9ydCgnLi9pbnRlcm5hbCcpLkhvb2tTdGF0ZSkgPT4geCBpcyBpbXBvcnQoJy4vaW50ZXJuYWwnKS5SZWR1Y2VySG9va1N0YXRlfSAqL1xuXHRcdFx0XHRjb25zdCBpc1N0YXRlSG9vayA9IHggPT4gISF4Ll9jb21wb25lbnQ7XG5cdFx0XHRcdGNvbnN0IHN0YXRlSG9va3MgPVxuXHRcdFx0XHRcdGhvb2tTdGF0ZS5fY29tcG9uZW50Ll9faG9va3MuX2xpc3QuZmlsdGVyKGlzU3RhdGVIb29rKTtcblxuXHRcdFx0XHRjb25zdCBhbGxIb29rc0VtcHR5ID0gc3RhdGVIb29rcy5ldmVyeSh4ID0+ICF4Ll9uZXh0VmFsdWUpO1xuXHRcdFx0XHQvLyBXaGVuIHdlIGhhdmUgbm8gdXBkYXRlZCBob29rcyBpbiB0aGUgY29tcG9uZW50IHdlIGludm9rZSB0aGUgcHJldmlvdXMgU0NVIG9yXG5cdFx0XHRcdC8vIHRyYXZlcnNlIHRoZSBWRE9NIHRyZWUgZnVydGhlci5cblx0XHRcdFx0aWYgKGFsbEhvb2tzRW1wdHkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJldlNjdSA/IHByZXZTY3UuY2FsbCh0aGlzLCBwLCBzLCBjKSA6IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSBjaGVjayB3aGV0aGVyIHdlIGhhdmUgY29tcG9uZW50cyB3aXRoIGEgbmV4dFZhbHVlIHNldCB0aGF0XG5cdFx0XHRcdC8vIGhhdmUgdmFsdWVzIHRoYXQgYXJlbid0IGVxdWFsIHRvIG9uZSBhbm90aGVyIHRoaXMgcHVzaGVzXG5cdFx0XHRcdC8vIHVzIHRvIHVwZGF0ZSBmdXJ0aGVyIGRvd24gdGhlIHRyZWVcblx0XHRcdFx0bGV0IHNob3VsZFVwZGF0ZSA9IGZhbHNlO1xuXHRcdFx0XHRzdGF0ZUhvb2tzLmZvckVhY2goaG9va0l0ZW0gPT4ge1xuXHRcdFx0XHRcdGlmIChob29rSXRlbS5fbmV4dFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBob29rSXRlbS5fdmFsdWVbMF07XG5cdFx0XHRcdFx0XHRob29rSXRlbS5fdmFsdWUgPSBob29rSXRlbS5fbmV4dFZhbHVlO1xuXHRcdFx0XHRcdFx0aG9va0l0ZW0uX25leHRWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgIT09IGhvb2tJdGVtLl92YWx1ZVswXSkgc2hvdWxkVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBzaG91bGRVcGRhdGUgfHwgaG9va1N0YXRlLl9jb21wb25lbnQucHJvcHMgIT09IHBcblx0XHRcdFx0XHQ/IHByZXZTY3Vcblx0XHRcdFx0XHRcdD8gcHJldlNjdS5jYWxsKHRoaXMsIHAsIHMsIGMpXG5cdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50Q29tcG9uZW50LnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IHVwZGF0ZUhvb2tTdGF0ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gaG9va1N0YXRlLl9uZXh0VmFsdWUgfHwgaG9va1N0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdH0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBhcmdzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUVmZmVjdChjYWxsYmFjaywgYXJncykge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdEhvb2tTdGF0ZX0gKi9cblx0Y29uc3Qgc3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDMpO1xuXHRpZiAoIW9wdGlvbnMuX3NraXBFZmZlY3RzICYmIGFyZ3NDaGFuZ2VkKHN0YXRlLl9hcmdzLCBhcmdzKSkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IGNhbGxiYWNrO1xuXHRcdHN0YXRlLl9wZW5kaW5nQXJncyA9IGFyZ3M7XG5cblx0XHRjdXJyZW50Q29tcG9uZW50Ll9faG9va3MuX3BlbmRpbmdFZmZlY3RzLnB1c2goc3RhdGUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3R9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMYXlvdXRFZmZlY3QoY2FsbGJhY2ssIGFyZ3MpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA0KTtcblx0aWYgKCFvcHRpb25zLl9za2lwRWZmZWN0cyAmJiBhcmdzQ2hhbmdlZChzdGF0ZS5fYXJncywgYXJncykpIHtcblx0XHRzdGF0ZS5fdmFsdWUgPSBjYWxsYmFjaztcblx0XHRzdGF0ZS5fcGVuZGluZ0FyZ3MgPSBhcmdzO1xuXG5cdFx0Y3VycmVudENvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goc3RhdGUpO1xuXHR9XG59XG5cbi8qKiBAdHlwZSB7KGluaXRpYWxWYWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWYoaW5pdGlhbFZhbHVlKSB7XG5cdGN1cnJlbnRIb29rID0gNTtcblx0cmV0dXJuIHVzZU1lbW8oKCkgPT4gKHsgY3VycmVudDogaW5pdGlhbFZhbHVlIH0pLCBbXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlZlxuICogQHBhcmFtIHsoKSA9PiBvYmplY3R9IGNyZWF0ZUhhbmRsZVxuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZUhhbmRsZSwgYXJncykge1xuXHRjdXJyZW50SG9vayA9IDY7XG5cdHVzZUxheW91dEVmZmVjdChcblx0XHQoKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIHJlZiA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHJlZihjcmVhdGVIYW5kbGUoKSk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiByZWYobnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKHJlZikge1xuXHRcdFx0XHRyZWYuY3VycmVudCA9IGNyZWF0ZUhhbmRsZSgpO1xuXHRcdFx0XHRyZXR1cm4gKCkgPT4gKHJlZi5jdXJyZW50ID0gbnVsbCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRhcmdzID09IG51bGwgPyBhcmdzIDogYXJncy5jb25jYXQocmVmKVxuXHQpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gVFxuICogQHBhcmFtIHsoKSA9PiBUfSBmYWN0b3J5XG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMge1R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZW1vKGZhY3RvcnksIGFyZ3MpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5NZW1vSG9va1N0YXRlPFQ+fSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgNyk7XG5cdGlmIChhcmdzQ2hhbmdlZChzdGF0ZS5fYXJncywgYXJncykpIHtcblx0XHRzdGF0ZS5fdmFsdWUgPSBmYWN0b3J5KCk7XG5cdFx0c3RhdGUuX2FyZ3MgPSBhcmdzO1xuXHRcdHN0YXRlLl9mYWN0b3J5ID0gZmFjdG9yeTtcblx0fVxuXG5cdHJldHVybiBzdGF0ZS5fdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGFyZ3MpIHtcblx0Y3VycmVudEhvb2sgPSA4O1xuXHRyZXR1cm4gdXNlTWVtbygoKSA9PiBjYWxsYmFjaywgYXJncyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RDb250ZXh0fSBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb250ZXh0KGNvbnRleHQpIHtcblx0Y29uc3QgcHJvdmlkZXIgPSBjdXJyZW50Q29tcG9uZW50LmNvbnRleHRbY29udGV4dC5faWRdO1xuXHQvLyBXZSBjb3VsZCBza2lwIHRoaXMgY2FsbCBoZXJlLCBidXQgdGhhbiB3ZSdkIG5vdCBjYWxsXG5cdC8vIGBvcHRpb25zLl9ob29rYC4gV2UgbmVlZCB0byBkbyB0aGF0IGluIG9yZGVyIHRvIG1ha2Vcblx0Ly8gdGhlIGRldnRvb2xzIGF3YXJlIG9mIHRoaXMgaG9vay5cblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db250ZXh0SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgOSk7XG5cdC8vIFRoZSBkZXZ0b29scyBuZWVkcyBhY2Nlc3MgdG8gdGhlIGNvbnRleHQgb2JqZWN0IHRvXG5cdC8vIGJlIGFibGUgdG8gcHVsbCBvZiB0aGUgZGVmYXVsdCB2YWx1ZSB3aGVuIG5vIHByb3ZpZGVyXG5cdC8vIGlzIHByZXNlbnQgaW4gdGhlIHRyZWUuXG5cdHN0YXRlLl9jb250ZXh0ID0gY29udGV4dDtcblx0aWYgKCFwcm92aWRlcikgcmV0dXJuIGNvbnRleHQuX2RlZmF1bHRWYWx1ZTtcblx0Ly8gVGhpcyBpcyBwcm9iYWJseSBub3Qgc2FmZSB0byBjb252ZXJ0IHRvIFwiIVwiXG5cdGlmIChzdGF0ZS5fdmFsdWUgPT0gbnVsbCkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IHRydWU7XG5cdFx0cHJvdmlkZXIuc3ViKGN1cnJlbnRDb21wb25lbnQpO1xuXHR9XG5cdHJldHVybiBwcm92aWRlci5wcm9wcy52YWx1ZTtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGEgY3VzdG9tIGxhYmVsIGZvciBhIGN1c3RvbSBob29rIGZvciB0aGUgZGV2dG9vbHMgcGFuZWxcbiAqIEB0eXBlIHs8VD4odmFsdWU6IFQsIGNiPzogKHZhbHVlOiBUKSA9PiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXIpIHtcblx0aWYgKG9wdGlvbnMudXNlRGVidWdWYWx1ZSkge1xuXHRcdG9wdGlvbnMudXNlRGVidWdWYWx1ZShcblx0XHRcdGZvcm1hdHRlciA/IGZvcm1hdHRlcih2YWx1ZSkgOiAvKiogQHR5cGUge2FueX0qLyAodmFsdWUpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7KGVycm9yOiB1bmtub3duLCBlcnJvckluZm86IGltcG9ydCgncHJlYWN0JykuRXJyb3JJbmZvKSA9PiB2b2lkfSBjYlxuICogQHJldHVybnMge1t1bmtub3duLCAoKSA9PiB2b2lkXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUVycm9yQm91bmRhcnkoY2IpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FcnJvckJvdW5kYXJ5SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMTApO1xuXHRjb25zdCBlcnJTdGF0ZSA9IHVzZVN0YXRlKCk7XG5cdHN0YXRlLl92YWx1ZSA9IGNiO1xuXHRpZiAoIWN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2gpIHtcblx0XHRjdXJyZW50Q29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoID0gKGVyciwgZXJyb3JJbmZvKSA9PiB7XG5cdFx0XHRpZiAoc3RhdGUuX3ZhbHVlKSBzdGF0ZS5fdmFsdWUoZXJyLCBlcnJvckluZm8pO1xuXHRcdFx0ZXJyU3RhdGVbMV0oZXJyKTtcblx0XHR9O1xuXHR9XG5cdHJldHVybiBbXG5cdFx0ZXJyU3RhdGVbMF0sXG5cdFx0KCkgPT4ge1xuXHRcdFx0ZXJyU3RhdGVbMV0odW5kZWZpbmVkKTtcblx0XHR9XG5cdF07XG59XG5cbi8qKiBAdHlwZSB7KCkgPT4gc3RyaW5nfSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKCkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLklkSG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMTEpO1xuXHRpZiAoIXN0YXRlLl92YWx1ZSkge1xuXHRcdC8vIEdyYWIgZWl0aGVyIHRoZSByb290IG5vZGUgb3IgdGhlIG5lYXJlc3QgYXN5bmMgYm91bmRhcnkgbm9kZS5cblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbC5kJykuVk5vZGV9ICovXG5cdFx0bGV0IHJvb3QgPSBjdXJyZW50Q29tcG9uZW50Ll92bm9kZTtcblx0XHR3aGlsZSAocm9vdCAhPT0gbnVsbCAmJiAhcm9vdC5fbWFzayAmJiByb290Ll9wYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdHJvb3QgPSByb290Ll9wYXJlbnQ7XG5cdFx0fVxuXG5cdFx0bGV0IG1hc2sgPSByb290Ll9tYXNrIHx8IChyb290Ll9tYXNrID0gWzAsIDBdKTtcblx0XHRzdGF0ZS5fdmFsdWUgPSAnUCcgKyBtYXNrWzBdICsgJy0nICsgbWFza1sxXSsrO1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBBZnRlciBwYWludCBlZmZlY3RzIGNvbnN1bWVyLlxuICovXG5mdW5jdGlvbiBmbHVzaEFmdGVyUGFpbnRFZmZlY3RzKCkge1xuXHRsZXQgY29tcG9uZW50O1xuXHR3aGlsZSAoKGNvbXBvbmVudCA9IGFmdGVyUGFpbnRFZmZlY3RzLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKCFjb21wb25lbnQuX3BhcmVudERvbSB8fCAhY29tcG9uZW50Ll9faG9va3MpIGNvbnRpbnVlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUVmZmVjdCk7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRjb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgY29tcG9uZW50Ll92bm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmxldCBIQVNfUkFGID0gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PSAnZnVuY3Rpb24nO1xuXG4vKipcbiAqIFNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgYnJvd3NlciBoYXMgYSBjaGFuY2UgdG8gcGFpbnQgYSBuZXcgZnJhbWUuXG4gKiBEbyB0aGlzIGJ5IGNvbWJpbmluZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKHJBRikgKyBzZXRUaW1lb3V0IHRvIGludm9rZSBhIGNhbGxiYWNrIGFmdGVyXG4gKiB0aGUgbmV4dCBicm93c2VyIGZyYW1lLlxuICpcbiAqIEFsc28sIHNjaGVkdWxlIGEgdGltZW91dCBpbiBwYXJhbGxlbCB0byB0aGUgdGhlIHJBRiB0byBlbnN1cmUgdGhlIGNhbGxiYWNrIGlzIGludm9rZWRcbiAqIGV2ZW4gaWYgUkFGIGRvZXNuJ3QgZmlyZSAoZm9yIGV4YW1wbGUgaWYgdGhlIGJyb3dzZXIgdGFiIGlzIG5vdCB2aXNpYmxlKVxuICpcbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYWZ0ZXJOZXh0RnJhbWUoY2FsbGJhY2spIHtcblx0Y29uc3QgZG9uZSA9ICgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0aWYgKEhBU19SQUYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7XG5cdFx0c2V0VGltZW91dChjYWxsYmFjayk7XG5cdH07XG5cdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGRvbmUsIFJBRl9USU1FT1VUKTtcblxuXHRsZXQgcmFmO1xuXHRpZiAoSEFTX1JBRikge1xuXHRcdHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkb25lKTtcblx0fVxufVxuXG4vLyBOb3RlOiBpZiBzb21lb25lIHVzZWQgb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZyA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSxcbi8vIHRoZW4gZWZmZWN0cyB3aWxsIEFMV0FZUyBydW4gb24gdGhlIE5FWFQgZnJhbWUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBvbmUsIGluY3VycmluZyBhIH4xNm1zIGRlbGF5LlxuLy8gUGVyaGFwcyB0aGlzIGlzIG5vdCBzdWNoIGEgYmlnIGRlYWwuXG4vKipcbiAqIFNjaGVkdWxlIGFmdGVyUGFpbnRFZmZlY3RzIGZsdXNoIGFmdGVyIHRoZSBicm93c2VyIHBhaW50c1xuICogQHBhcmFtIHtudW1iZXJ9IG5ld1F1ZXVlTGVuZ3RoXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWZ0ZXJQYWludChuZXdRdWV1ZUxlbmd0aCkge1xuXHRpZiAobmV3UXVldWVMZW5ndGggPT09IDEgfHwgcHJldlJhZiAhPT0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcblx0XHRwcmV2UmFmID0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdFx0KHByZXZSYWYgfHwgYWZ0ZXJOZXh0RnJhbWUpKGZsdXNoQWZ0ZXJQYWludEVmZmVjdHMpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Ib29rU3RhdGV9IGhvb2tcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBpbnZva2VDbGVhbnVwKGhvb2spIHtcblx0Ly8gQSBob29rIGNsZWFudXAgY2FuIGludHJvZHVjZSBhIGNhbGwgdG8gcmVuZGVyIHdoaWNoIGNyZWF0ZXMgYSBuZXcgcm9vdCwgdGhpcyB3aWxsIGNhbGwgb3B0aW9ucy52bm9kZVxuXHQvLyBhbmQgbW92ZSB0aGUgY3VycmVudENvbXBvbmVudCBhd2F5LlxuXHRjb25zdCBjb21wID0gY3VycmVudENvbXBvbmVudDtcblx0bGV0IGNsZWFudXAgPSBob29rLl9jbGVhbnVwO1xuXHRpZiAodHlwZW9mIGNsZWFudXAgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdGhvb2suX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cdFx0Y2xlYW51cCgpO1xuXHR9XG5cblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogSW52b2tlIGEgSG9vaydzIGVmZmVjdFxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9IGhvb2tcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBpbnZva2VFZmZlY3QoaG9vaykge1xuXHQvLyBBIGhvb2sgY2FsbCBjYW4gaW50cm9kdWNlIGEgY2FsbCB0byByZW5kZXIgd2hpY2ggY3JlYXRlcyBhIG5ldyByb290LCB0aGlzIHdpbGwgY2FsbCBvcHRpb25zLnZub2RlXG5cdC8vIGFuZCBtb3ZlIHRoZSBjdXJyZW50Q29tcG9uZW50IGF3YXkuXG5cdGNvbnN0IGNvbXAgPSBjdXJyZW50Q29tcG9uZW50O1xuXHRob29rLl9jbGVhbnVwID0gaG9vay5fdmFsdWUoKTtcblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3duW119IG9sZEFyZ3NcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBuZXdBcmdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gYXJnc0NoYW5nZWQob2xkQXJncywgbmV3QXJncykge1xuXHRyZXR1cm4gKFxuXHRcdCFvbGRBcmdzIHx8XG5cdFx0b2xkQXJncy5sZW5ndGggIT09IG5ld0FyZ3MubGVuZ3RoIHx8XG5cdFx0bmV3QXJncy5zb21lKChhcmcsIGluZGV4KSA9PiBhcmcgIT09IG9sZEFyZ3NbaW5kZXhdKVxuXHQpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBBcmdcbiAqIEBwYXJhbSB7QXJnfSBhcmdcbiAqIEBwYXJhbSB7KGFyZzogQXJnKSA9PiBhbnl9IGZcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGludm9rZU9yUmV0dXJuKGFyZywgZikge1xuXHRyZXR1cm4gdHlwZW9mIGYgPT0gJ2Z1bmN0aW9uJyA/IGYoYXJnKSA6IGY7XG59XG4iLCAiLyoqXG4gKiBBc3NpZ24gcHJvcGVydGllcyBmcm9tIGBwcm9wc2AgdG8gYG9iamBcbiAqIEB0ZW1wbGF0ZSBPLCBQIFRoZSBvYmogYW5kIHByb3BzIHR5cGVzXG4gKiBAcGFyYW0ge099IG9iaiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0b1xuICogQHBhcmFtIHtQfSBwcm9wcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJucyB7TyAmIFB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqLCBwcm9wcykge1xuXHRmb3IgKGxldCBpIGluIHByb3BzKSBvYmpbaV0gPSBwcm9wc1tpXTtcblx0cmV0dXJuIC8qKiBAdHlwZSB7TyAmIFB9ICovIChvYmopO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byBvYmplY3RzIGhhdmUgYSBkaWZmZXJlbnQgc2hhcGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBhXG4gKiBAcGFyYW0ge29iamVjdH0gYlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhhLCBiKSB7XG5cdGZvciAobGV0IGkgaW4gYSkgaWYgKGkgIT09ICdfX3NvdXJjZScgJiYgIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChsZXQgaSBpbiBiKSBpZiAoaSAhPT0gJ19fc291cmNlJyAmJiBhW2ldICE9PSBiW2ldKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlXG4gKiBAcGFyYW0geyp9IHhcbiAqIEBwYXJhbSB7Kn0geVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4LCB5KSB7XG5cdHJldHVybiAoeCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpKSB8fCAoeCAhPT0geCAmJiB5ICE9PSB5KTtcbn1cbiIsICJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENvbXBvbmVudCBjbGFzcyB3aXRoIGEgcHJlZGVmaW5lZCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwLCBjKSB7XG5cdHRoaXMucHJvcHMgPSBwO1xuXHR0aGlzLmNvbnRleHQgPSBjO1xufVxuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG4vLyBTb21lIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBjaGVjayBpZiB0aGlzIHByb3BlcnR5IGlzIHByZXNlbnRcblB1cmVDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChwcm9wcywgc3RhdGUpIHtcblx0cmV0dXJuIHNoYWxsb3dEaWZmZXJzKHRoaXMucHJvcHMsIHByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBzdGF0ZSk7XG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIE1lbW9pemUgYSBjb21wb25lbnQsIHNvIHRoYXQgaXQgb25seSB1cGRhdGVzIHdoZW4gdGhlIHByb3BzIGFjdHVhbGx5IGhhdmVcbiAqIGNoYW5nZWQuIFRoaXMgd2FzIHByZXZpb3VzbHkga25vd24gYXMgYFJlYWN0LnB1cmVgLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH0gYyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICogQHBhcmFtIHsocHJldjogb2JqZWN0LCBuZXh0OiBvYmplY3QpID0+IGJvb2xlYW59IFtjb21wYXJlcl0gQ3VzdG9tIGVxdWFsaXR5IGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuRnVuY3Rpb25Db21wb25lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1vKGMsIGNvbXBhcmVyKSB7XG5cdGZ1bmN0aW9uIHNob3VsZFVwZGF0ZShuZXh0UHJvcHMpIHtcblx0XHRsZXQgcmVmID0gdGhpcy5wcm9wcy5yZWY7XG5cdFx0bGV0IHVwZGF0ZVJlZiA9IHJlZiA9PSBuZXh0UHJvcHMucmVmO1xuXHRcdGlmICghdXBkYXRlUmVmICYmIHJlZikge1xuXHRcdFx0cmVmLmNhbGwgPyByZWYobnVsbCkgOiAocmVmLmN1cnJlbnQgPSBudWxsKTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbXBhcmVyKSB7XG5cdFx0XHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgbmV4dFByb3BzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gIWNvbXBhcmVyKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgIXVwZGF0ZVJlZjtcblx0fVxuXG5cdGZ1bmN0aW9uIE1lbW9lZChwcm9wcykge1xuXHRcdHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gc2hvdWxkVXBkYXRlO1xuXHRcdHJldHVybiBjcmVhdGVFbGVtZW50KGMsIHByb3BzKTtcblx0fVxuXHRNZW1vZWQuZGlzcGxheU5hbWUgPSAnTWVtbygnICsgKGMuZGlzcGxheU5hbWUgfHwgYy5uYW1lKSArICcpJztcblx0TWVtb2VkLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblx0TWVtb2VkLl9mb3J3YXJkZWQgPSB0cnVlO1xuXHRyZXR1cm4gTWVtb2VkO1xufVxuIiwgImltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICdwcmVhY3QnO1xuXG5sZXQgb2xkRGlmZkhvb2sgPSBvcHRpb25zLl9kaWZmO1xub3B0aW9ucy5fZGlmZiA9IHZub2RlID0+IHtcblx0aWYgKHZub2RlLnR5cGUgJiYgdm5vZGUudHlwZS5fZm9yd2FyZGVkICYmIHZub2RlLnJlZikge1xuXHRcdHZub2RlLnByb3BzLnJlZiA9IHZub2RlLnJlZjtcblx0XHR2bm9kZS5yZWYgPSBudWxsO1xuXHR9XG5cdGlmIChvbGREaWZmSG9vaykgb2xkRGlmZkhvb2sodm5vZGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IFJFQUNUX0ZPUldBUkRfU1lNQk9MID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiZcblx0XHRTeW1ib2wuZm9yICYmXG5cdFx0U3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSkgfHxcblx0MHhmNDc7XG5cbi8qKlxuICogUGFzcyByZWYgZG93biB0byBhIGNoaWxkLiBUaGlzIGlzIG1haW5seSB1c2VkIGluIGxpYnJhcmllcyB3aXRoIEhPQ3MgdGhhdFxuICogd3JhcCBjb21wb25lbnRzLiBVc2luZyBgZm9yd2FyZFJlZmAgdGhlcmUgaXMgYW4gZWFzeSB3YXkgdG8gZ2V0IGEgcmVmZXJlbmNlXG4gKiBvZiB0aGUgd3JhcHBlZCBjb21wb25lbnQgaW5zdGVhZCBvZiBvbmUgb2YgdGhlIHdyYXBwZXIgaXRzZWxmLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Gb3J3YXJkRm59IGZuXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuRnVuY3Rpb25Db21wb25lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkUmVmKGZuKSB7XG5cdGZ1bmN0aW9uIEZvcndhcmRlZChwcm9wcykge1xuXHRcdGlmICghKCdyZWYnIGluIHByb3BzKSkgcmV0dXJuIGZuKHByb3BzLCBudWxsKTtcblxuXHRcdGxldCByZWYgPSBwcm9wcy5yZWY7XG5cdFx0ZGVsZXRlIHByb3BzLnJlZjtcblx0XHRjb25zdCByZXN1bHQgPSBmbihwcm9wcywgcmVmKTtcblx0XHRwcm9wcy5yZWYgPSByZWY7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8vIG1vYngtcmVhY3QgY2hlY2tzIGZvciB0aGlzIGJlaW5nIHByZXNlbnRcblx0Rm9yd2FyZGVkLiQkdHlwZW9mID0gUkVBQ1RfRk9SV0FSRF9TWU1CT0w7XG5cdC8vIG1vYngtcmVhY3QgaGVhdmlseSByZWxpZXMgb24gaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblx0Ly8gSXQgZXhwZWN0cyBhbiBvYmplY3QgaGVyZSB3aXRoIGEgYHJlbmRlcmAgcHJvcGVydHksXG5cdC8vIGFuZCBwcm90b3R5cGUucmVuZGVyIHdpbGwgZmFpbC4gV2l0aG91dCB0aGlzXG5cdC8vIG1vYngtcmVhY3QgdGhyb3dzLlxuXHRGb3J3YXJkZWQucmVuZGVyID0gRm9yd2FyZGVkO1xuXG5cdEZvcndhcmRlZC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IEZvcndhcmRlZC5fZm9yd2FyZGVkID0gdHJ1ZTtcblx0Rm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gJ0ZvcndhcmRSZWYoJyArIChmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lKSArICcpJztcblx0cmV0dXJuIEZvcndhcmRlZDtcbn1cbiIsICJpbXBvcnQgeyB0b0NoaWxkQXJyYXkgfSBmcm9tICdwcmVhY3QnO1xuXG5jb25zdCBtYXBGbiA9IChjaGlsZHJlbiwgZm4pID0+IHtcblx0aWYgKGNoaWxkcmVuID09IG51bGwpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gdG9DaGlsZEFycmF5KHRvQ2hpbGRBcnJheShjaGlsZHJlbikubWFwKGZuKSk7XG59O1xuXG4vLyBUaGlzIEFQSSBpcyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5IGZvciBQcmVhY3QsIHNvIGl0J3MgYmFzaWNhbGx5IHBhc3N0aHJvdWdoLlxuZXhwb3J0IGNvbnN0IENoaWxkcmVuID0ge1xuXHRtYXA6IG1hcEZuLFxuXHRmb3JFYWNoOiBtYXBGbixcblx0Y291bnQoY2hpbGRyZW4pIHtcblx0XHRyZXR1cm4gY2hpbGRyZW4gPyB0b0NoaWxkQXJyYXkoY2hpbGRyZW4pLmxlbmd0aCA6IDA7XG5cdH0sXG5cdG9ubHkoY2hpbGRyZW4pIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gdG9DaGlsZEFycmF5KGNoaWxkcmVuKTtcblx0XHRpZiAobm9ybWFsaXplZC5sZW5ndGggIT09IDEpIHRocm93ICdDaGlsZHJlbi5vbmx5Jztcblx0XHRyZXR1cm4gbm9ybWFsaXplZFswXTtcblx0fSxcblx0dG9BcnJheTogdG9DaGlsZEFycmF5XG59O1xuIiwgImltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCwgb3B0aW9ucywgRnJhZ21lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgTU9ERV9IWURSQVRFIH0gZnJvbSAnLi4vLi4vc3JjL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBvbGRDYXRjaEVycm9yID0gb3B0aW9ucy5fY2F0Y2hFcnJvcjtcbm9wdGlvbnMuX2NhdGNoRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IsIG5ld1ZOb2RlLCBvbGRWTm9kZSwgZXJyb3JJbmZvKSB7XG5cdGlmIChlcnJvci50aGVuKSB7XG5cdFx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5cdFx0bGV0IGNvbXBvbmVudDtcblx0XHRsZXQgdm5vZGUgPSBuZXdWTm9kZTtcblxuXHRcdGZvciAoOyAodm5vZGUgPSB2bm9kZS5fcGFyZW50KTsgKSB7XG5cdFx0XHRpZiAoKGNvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQpICYmIGNvbXBvbmVudC5fY2hpbGREaWRTdXNwZW5kKSB7XG5cdFx0XHRcdGlmIChuZXdWTm9kZS5fZG9tID09IG51bGwpIHtcblx0XHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRcdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBvbGRWTm9kZS5fY2hpbGRyZW47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gRG9uJ3QgY2FsbCBvbGRDYXRjaEVycm9yIGlmIHdlIGZvdW5kIGEgU3VzcGVuc2Vcblx0XHRcdFx0cmV0dXJuIGNvbXBvbmVudC5fY2hpbGREaWRTdXNwZW5kKGVycm9yLCBuZXdWTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdG9sZENhdGNoRXJyb3IoZXJyb3IsIG5ld1ZOb2RlLCBvbGRWTm9kZSwgZXJyb3JJbmZvKTtcbn07XG5cbmNvbnN0IG9sZFVubW91bnQgPSBvcHRpb25zLnVubW91bnQ7XG5vcHRpb25zLnVubW91bnQgPSBmdW5jdGlvbiAodm5vZGUpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5cdGNvbnN0IGNvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50Ll9vblJlc29sdmUpIHtcblx0XHRjb21wb25lbnQuX29uUmVzb2x2ZSgpO1xuXHR9XG5cblx0Ly8gaWYgdGhlIGNvbXBvbmVudCBpcyBzdGlsbCBoeWRyYXRpbmdcblx0Ly8gbW9zdCBsaWtlbHkgaXQgaXMgYmVjYXVzZSB0aGUgY29tcG9uZW50IGlzIHN1c3BlbmRlZFxuXHQvLyB3ZSBzZXQgdGhlIHZub2RlLnR5cGUgYXMgYG51bGxgIHNvIHRoYXQgaXQgaXMgbm90IGEgdHlwZW9mIGZ1bmN0aW9uXG5cdC8vIHNvIHRoZSB1bm1vdW50IHdpbGwgcmVtb3ZlIHRoZSB2bm9kZS5fZG9tXG5cdGlmIChjb21wb25lbnQgJiYgdm5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKSB7XG5cdFx0dm5vZGUudHlwZSA9IG51bGw7XG5cdH1cblxuXHRpZiAob2xkVW5tb3VudCkgb2xkVW5tb3VudCh2bm9kZSk7XG59O1xuXG5mdW5jdGlvbiBkZXRhY2hlZENsb25lKHZub2RlLCBkZXRhY2hlZFBhcmVudCwgcGFyZW50RG9tKSB7XG5cdGlmICh2bm9kZSkge1xuXHRcdGlmICh2bm9kZS5fY29tcG9uZW50ICYmIHZub2RlLl9jb21wb25lbnQuX19ob29rcykge1xuXHRcdFx0dm5vZGUuX2NvbXBvbmVudC5fX2hvb2tzLl9saXN0LmZvckVhY2goZWZmZWN0ID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBlZmZlY3QuX2NsZWFudXAgPT0gJ2Z1bmN0aW9uJykgZWZmZWN0Ll9jbGVhbnVwKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dm5vZGUuX2NvbXBvbmVudC5fX2hvb2tzID0gbnVsbDtcblx0XHR9XG5cblx0XHR2bm9kZSA9IGFzc2lnbih7fSwgdm5vZGUpO1xuXHRcdGlmICh2bm9kZS5fY29tcG9uZW50ICE9IG51bGwpIHtcblx0XHRcdGlmICh2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPT09IHBhcmVudERvbSkge1xuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPSBkZXRhY2hlZFBhcmVudDtcblx0XHRcdH1cblx0XHRcdHZub2RlLl9jb21wb25lbnQgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZub2RlLl9jaGlsZHJlbiA9XG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4gJiZcblx0XHRcdHZub2RlLl9jaGlsZHJlbi5tYXAoY2hpbGQgPT5cblx0XHRcdFx0ZGV0YWNoZWRDbG9uZShjaGlsZCwgZGV0YWNoZWRQYXJlbnQsIHBhcmVudERvbSlcblx0XHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdm5vZGU7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU9yaWdpbmFsKHZub2RlLCBkZXRhY2hlZFBhcmVudCwgb3JpZ2luYWxQYXJlbnQpIHtcblx0aWYgKHZub2RlICYmIG9yaWdpbmFsUGFyZW50KSB7XG5cdFx0dm5vZGUuX29yaWdpbmFsID0gbnVsbDtcblx0XHR2bm9kZS5fY2hpbGRyZW4gPVxuXHRcdFx0dm5vZGUuX2NoaWxkcmVuICYmXG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4ubWFwKGNoaWxkID0+XG5cdFx0XHRcdHJlbW92ZU9yaWdpbmFsKGNoaWxkLCBkZXRhY2hlZFBhcmVudCwgb3JpZ2luYWxQYXJlbnQpXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQpIHtcblx0XHRcdGlmICh2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPT09IGRldGFjaGVkUGFyZW50KSB7XG5cdFx0XHRcdGlmICh2bm9kZS5fZG9tKSB7XG5cdFx0XHRcdFx0b3JpZ2luYWxQYXJlbnQuYXBwZW5kQ2hpbGQodm5vZGUuX2RvbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dm5vZGUuX2NvbXBvbmVudC5fZm9yY2UgPSB0cnVlO1xuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPSBvcmlnaW5hbFBhcmVudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdm5vZGU7XG59XG5cbi8vIGhhdmluZyBjdXN0b20gaW5oZXJpdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzIGhlcmUgc2F2ZXMgYSBsb3Qgb2YgYnl0ZXNcbmV4cG9ydCBmdW5jdGlvbiBTdXNwZW5zZSgpIHtcblx0Ly8gd2UgZG8gbm90IGNhbGwgc3VwZXIgaGVyZSB0byBnb2xmIHNvbWUgYnl0ZXMuLi5cblx0dGhpcy5fcGVuZGluZ1N1c3BlbnNpb25Db3VudCA9IDA7XG5cdHRoaXMuX3N1c3BlbmRlcnMgPSBudWxsO1xuXHR0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBudWxsO1xufVxuXG4vLyBUaGluZ3Mgd2UgZG8gaGVyZSB0byBzYXZlIHNvbWUgYnl0ZXMgYnV0IGFyZSBub3QgcHJvcGVyIEpTIGluaGVyaXRhbmNlOlxuLy8gLSBjYWxsIGBuZXcgQ29tcG9uZW50KClgIGFzIHRoZSBwcm90b3R5cGVcbi8vIC0gZG8gbm90IHNldCBgU3VzcGVuc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yYCB0byBgU3VzcGVuc2VgXG5TdXNwZW5zZS5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG5cbi8qKlxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50fVxuICogQHBhcmFtIHtQcm9taXNlfSBwcm9taXNlIFRoZSB0aHJvd24gcHJvbWlzZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZTxhbnksIGFueT59IHN1c3BlbmRpbmdWTm9kZSBUaGUgc3VzcGVuZGluZyBjb21wb25lbnRcbiAqL1xuU3VzcGVuc2UucHJvdG90eXBlLl9jaGlsZERpZFN1c3BlbmQgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3VzcGVuZGluZ1ZOb2RlKSB7XG5cdGNvbnN0IHN1c3BlbmRpbmdDb21wb25lbnQgPSBzdXNwZW5kaW5nVk5vZGUuX2NvbXBvbmVudDtcblxuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50fSAqL1xuXHRjb25zdCBjID0gdGhpcztcblxuXHRpZiAoYy5fc3VzcGVuZGVycyA9PSBudWxsKSB7XG5cdFx0Yy5fc3VzcGVuZGVycyA9IFtdO1xuXHR9XG5cdGMuX3N1c3BlbmRlcnMucHVzaChzdXNwZW5kaW5nQ29tcG9uZW50KTtcblxuXHRjb25zdCByZXNvbHZlID0gc3VzcGVuZGVkKGMuX3Zub2RlKTtcblxuXHRsZXQgcmVzb2x2ZWQgPSBmYWxzZTtcblx0Y29uc3Qgb25SZXNvbHZlZCA9ICgpID0+IHtcblx0XHRpZiAocmVzb2x2ZWQpIHJldHVybjtcblxuXHRcdHJlc29sdmVkID0gdHJ1ZTtcblx0XHRzdXNwZW5kaW5nQ29tcG9uZW50Ll9vblJlc29sdmUgPSBudWxsO1xuXG5cdFx0aWYgKHJlc29sdmUpIHtcblx0XHRcdHJlc29sdmUob25TdXNwZW5zaW9uQ29tcGxldGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvblN1c3BlbnNpb25Db21wbGV0ZSgpO1xuXHRcdH1cblx0fTtcblxuXHRzdXNwZW5kaW5nQ29tcG9uZW50Ll9vblJlc29sdmUgPSBvblJlc29sdmVkO1xuXG5cdGNvbnN0IG9uU3VzcGVuc2lvbkNvbXBsZXRlID0gKCkgPT4ge1xuXHRcdGlmICghLS1jLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50KSB7XG5cdFx0XHQvLyBJZiB0aGUgc3VzcGVuc2lvbiB3YXMgZHVyaW5nIGh5ZHJhdGlvbiB3ZSBkb24ndCBuZWVkIHRvIHJlc3RvcmUgdGhlXG5cdFx0XHQvLyBzdXNwZW5kZWQgY2hpbGRyZW4gaW50byB0aGUgX2NoaWxkcmVuIGFycmF5XG5cdFx0XHRpZiAoYy5zdGF0ZS5fc3VzcGVuZGVkKSB7XG5cdFx0XHRcdGNvbnN0IHN1c3BlbmRlZFZOb2RlID0gYy5zdGF0ZS5fc3VzcGVuZGVkO1xuXHRcdFx0XHRjLl92bm9kZS5fY2hpbGRyZW5bMF0gPSByZW1vdmVPcmlnaW5hbChcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZSxcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20sXG5cdFx0XHRcdFx0c3VzcGVuZGVkVk5vZGUuX2NvbXBvbmVudC5fb3JpZ2luYWxQYXJlbnREb21cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Yy5zZXRTdGF0ZSh7IF9zdXNwZW5kZWQ6IChjLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBudWxsKSB9KTtcblxuXHRcdFx0bGV0IHN1c3BlbmRlZDtcblx0XHRcdHdoaWxlICgoc3VzcGVuZGVkID0gYy5fc3VzcGVuZGVycy5wb3AoKSkpIHtcblx0XHRcdFx0c3VzcGVuZGVkLmZvcmNlVXBkYXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBXZSBkbyBub3Qgc2V0IGBzdXNwZW5kZWQ6IHRydWVgIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB3ZSB3YW50IHRoZSBhY3R1YWwgbWFya3VwXG5cdCAqIHRvIHJlbWFpbiBvbiBzY3JlZW4gYW5kIGh5ZHJhdGUgaXQgd2hlbiB0aGUgc3VzcGVuc2UgYWN0dWFsbHkgZ2V0cyByZXNvbHZlZC5cblx0ICogV2hpbGUgaW4gbm9uLWh5ZHJhdGlvbiBjYXNlcyB0aGUgdXN1YWwgZmFsbGJhY2sgLT4gY29tcG9uZW50IGZsb3cgd291bGQgb2Njb3VyLlxuXHQgKi9cblx0aWYgKFxuXHRcdCFjLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50KysgJiZcblx0XHQhKHN1c3BlbmRpbmdWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpXG5cdCkge1xuXHRcdGMuc2V0U3RhdGUoeyBfc3VzcGVuZGVkOiAoYy5fZGV0YWNoT25OZXh0UmVuZGVyID0gYy5fdm5vZGUuX2NoaWxkcmVuWzBdKSB9KTtcblx0fVxuXHRwcm9taXNlLnRoZW4ob25SZXNvbHZlZCwgb25SZXNvbHZlZCk7XG59O1xuXG5TdXNwZW5zZS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdHRoaXMuX3N1c3BlbmRlcnMgPSBbXTtcbn07XG5cbi8qKlxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50fVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5TdXNwZW5zZUNvbXBvbmVudFtcInByb3BzXCJdfSBwcm9wc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5TdXNwZW5zZVN0YXRlfSBzdGF0ZVxuICovXG5TdXNwZW5zZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHByb3BzLCBzdGF0ZSkge1xuXHRpZiAodGhpcy5fZGV0YWNoT25OZXh0UmVuZGVyKSB7XG5cdFx0Ly8gV2hlbiB0aGUgU3VzcGVuc2UncyBfdm5vZGUgd2FzIGNyZWF0ZWQgYnkgYSBjYWxsIHRvIGNyZWF0ZVZOb2RlXG5cdFx0Ly8gKGkuZS4gZHVlIHRvIGEgc2V0U3RhdGUgZnVydGhlciB1cCBpbiB0aGUgdHJlZSlcblx0XHQvLyBpdCdzIF9jaGlsZHJlbiBwcm9wIGlzIG51bGwsIGluIHRoaXMgY2FzZSB3ZSBcImZvcmdldFwiIGFib3V0IHRoZSBwYXJrZWQgdm5vZGVzIHRvIGRldGFjaFxuXHRcdGlmICh0aGlzLl92bm9kZS5fY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGRldGFjaGVkUGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRjb25zdCBkZXRhY2hlZENvbXBvbmVudCA9IHRoaXMuX3Zub2RlLl9jaGlsZHJlblswXS5fY29tcG9uZW50O1xuXHRcdFx0dGhpcy5fdm5vZGUuX2NoaWxkcmVuWzBdID0gZGV0YWNoZWRDbG9uZShcblx0XHRcdFx0dGhpcy5fZGV0YWNoT25OZXh0UmVuZGVyLFxuXHRcdFx0XHRkZXRhY2hlZFBhcmVudCxcblx0XHRcdFx0KGRldGFjaGVkQ29tcG9uZW50Ll9vcmlnaW5hbFBhcmVudERvbSA9IGRldGFjaGVkQ29tcG9uZW50Ll9wYXJlbnREb20pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGw7XG5cdH1cblxuXHQvLyBXcmFwIGZhbGxiYWNrIHRyZWUgaW4gYSBWTm9kZSB0aGF0IHByZXZlbnRzIGl0c2VsZiBmcm9tIGJlaW5nIG1hcmtlZCBhcyBhYm9ydGluZyBtaWQtaHlkcmF0aW9uOlxuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSAqL1xuXHRjb25zdCBmYWxsYmFjayA9XG5cdFx0c3RhdGUuX3N1c3BlbmRlZCAmJiBjcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCBwcm9wcy5mYWxsYmFjayk7XG5cdGlmIChmYWxsYmFjaykgZmFsbGJhY2suX2ZsYWdzICY9IH5NT0RFX0hZRFJBVEU7XG5cblx0cmV0dXJuIFtcblx0XHRjcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCBzdGF0ZS5fc3VzcGVuZGVkID8gbnVsbCA6IHByb3BzLmNoaWxkcmVuKSxcblx0XHRmYWxsYmFja1xuXHRdO1xufTtcblxuLyoqXG4gKiBDaGVja3MgYW5kIGNhbGxzIHRoZSBwYXJlbnQgY29tcG9uZW50J3MgX3N1c3BlbmRlZCBtZXRob2QsIHBhc3NpbmcgaW4gdGhlXG4gKiBzdXNwZW5kZWQgdm5vZGUuIFRoaXMgaXMgYSB3YXkgZm9yIGEgcGFyZW50IChlLmcuIFN1c3BlbnNlTGlzdCkgdG8gZ2V0IG5vdGlmaWVkXG4gKiB0aGF0IG9uZSBvZiBpdHMgY2hpbGRyZW4vZGVzY2VuZGFudHMgc3VzcGVuZGVkLlxuICpcbiAqIFRoZSBwYXJlbnQgTUFZIHJldHVybiBhIGNhbGxiYWNrLiBUaGUgY2FsbGJhY2sgd2lsbCBnZXQgY2FsbGVkIHdoZW4gdGhlXG4gKiBzdXNwZW5zaW9uIHJlc29sdmVzLCBub3RpZnlpbmcgdGhlIHBhcmVudCBvZiB0aGUgZmFjdC5cbiAqIE1vcmVvdmVyLCB0aGUgY2FsbGJhY2sgZ2V0cyBmdW5jdGlvbiBgdW5zdXNwZW5kYCBhcyBhIHBhcmFtZXRlci4gVGhlIHJlc29sdmVkXG4gKiBjaGlsZCBkZXNjZW5kYW50IHdpbGwgbm90IGFjdHVhbGx5IGdldCB1bnN1c3BlbmRlZCB1bnRpbCBgdW5zdXNwZW5kYCBnZXRzIGNhbGxlZC5cbiAqIFRoaXMgaXMgYSB3YXkgZm9yIHRoZSBwYXJlbnQgdG8gZGVsYXkgdW5zdXNwZW5kaW5nLlxuICpcbiAqIElmIHRoZSBwYXJlbnQgZG9lcyBub3QgcmV0dXJuIGEgY2FsbGJhY2sgdGhlbiB0aGUgcmVzb2x2ZWQgdm5vZGVcbiAqIGdldHMgdW5zdXNwZW5kZWQgaW1tZWRpYXRlbHkgd2hlbiBpdCByZXNvbHZlcy5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZVxuICogQHJldHVybnMgeygodW5zdXNwZW5kOiAoKSA9PiB2b2lkKSA9PiB2b2lkKT99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXNwZW5kZWQodm5vZGUpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5cdGxldCBjb21wb25lbnQgPSB2bm9kZS5fcGFyZW50Ll9jb21wb25lbnQ7XG5cdHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50Ll9zdXNwZW5kZWQgJiYgY29tcG9uZW50Ll9zdXNwZW5kZWQodm5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF6eShsb2FkZXIpIHtcblx0bGV0IHByb207XG5cdGxldCBjb21wb25lbnQ7XG5cdGxldCBlcnJvcjtcblxuXHRmdW5jdGlvbiBMYXp5KHByb3BzKSB7XG5cdFx0aWYgKCFwcm9tKSB7XG5cdFx0XHRwcm9tID0gbG9hZGVyKCk7XG5cdFx0XHRwcm9tLnRoZW4oXG5cdFx0XHRcdGV4cG9ydHMgPT4ge1xuXHRcdFx0XHRcdGNvbXBvbmVudCA9IGV4cG9ydHMuZGVmYXVsdCB8fCBleHBvcnRzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlID0+IHtcblx0XHRcdFx0XHRlcnJvciA9IGU7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGVycm9yKSB7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cblx0XHRpZiAoIWNvbXBvbmVudCkge1xuXHRcdFx0dGhyb3cgcHJvbTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRWxlbWVudChjb21wb25lbnQsIHByb3BzKTtcblx0fVxuXG5cdExhenkuZGlzcGxheU5hbWUgPSAnTGF6eSc7XG5cdExhenkuX2ZvcndhcmRlZCA9IHRydWU7XG5cdHJldHVybiBMYXp5O1xufVxuIiwgImltcG9ydCB7IENvbXBvbmVudCwgdG9DaGlsZEFycmF5IH0gZnJvbSAncHJlYWN0JztcbmltcG9ydCB7IHN1c3BlbmRlZCB9IGZyb20gJy4vc3VzcGVuc2UuanMnO1xuXG4vLyBJbmRleGVzIHRvIGxpbmtlZCBsaXN0IG5vZGVzIChub2RlcyBhcmUgc3RvcmVkIGFzIGFycmF5cyB0byBzYXZlIGJ5dGVzKS5cbmNvbnN0IFNVU1BFTkRFRF9DT1VOVCA9IDA7XG5jb25zdCBSRVNPTFZFRF9DT1VOVCA9IDE7XG5jb25zdCBORVhUX05PREUgPSAyO1xuXG4vLyBIYXZpbmcgY3VzdG9tIGluaGVyaXRhbmNlIGluc3RlYWQgb2YgYSBjbGFzcyBoZXJlIHNhdmVzIGEgbG90IG9mIGJ5dGVzLlxuZXhwb3J0IGZ1bmN0aW9uIFN1c3BlbnNlTGlzdCgpIHtcblx0dGhpcy5fbmV4dCA9IG51bGw7XG5cdHRoaXMuX21hcCA9IG51bGw7XG59XG5cbi8vIE1hcmsgb25lIG9mIGNoaWxkJ3MgZWFybGllciBzdXNwZW5zaW9ucyBhcyByZXNvbHZlZC5cbi8vIFNvbWUgcGVuZGluZyBjYWxsYmFja3MgbWF5IGJlY29tZSBjYWxsYWJsZSBkdWUgdG8gdGhpc1xuLy8gKGUuZy4gdGhlIGxhc3Qgc3VzcGVuZGVkIGRlc2NlbmRhbnQgZ2V0cyByZXNvbHZlZCB3aGVuXG4vLyByZXZlYWxPcmRlciA9PT0gJ3RvZ2V0aGVyJykuIFByb2Nlc3MgdGhvc2UgY2FsbGJhY2tzIGFzIHdlbGwuXG5jb25zdCByZXNvbHZlID0gKGxpc3QsIGNoaWxkLCBub2RlKSA9PiB7XG5cdGlmICgrK25vZGVbUkVTT0xWRURfQ09VTlRdID09PSBub2RlW1NVU1BFTkRFRF9DT1VOVF0pIHtcblx0XHQvLyBUaGUgbnVtYmVyIGEgY2hpbGQgKG9yIGFueSBvZiBpdHMgZGVzY2VuZGFudHMpIGhhcyBiZWVuIHN1c3BlbmRlZFxuXHRcdC8vIG1hdGNoZXMgdGhlIG51bWJlciBvZiB0aW1lcyBpdCdzIGJlZW4gcmVzb2x2ZWQuIFRoZXJlZm9yZSB3ZVxuXHRcdC8vIG1hcmsgdGhlIGNoaWxkIGFzIGNvbXBsZXRlbHkgcmVzb2x2ZWQgYnkgZGVsZXRpbmcgaXQgZnJvbSAuX21hcC5cblx0XHQvLyBUaGlzIGlzIHVzZWQgdG8gZmlndXJlIG91dCB3aGVuICphbGwqIGNoaWxkcmVuIGhhdmUgYmVlbiBjb21wbGV0ZWx5XG5cdFx0Ly8gcmVzb2x2ZWQgd2hlbiByZXZlYWxPcmRlciBpcyAndG9nZXRoZXInLlxuXHRcdGxpc3QuX21hcC5kZWxldGUoY2hpbGQpO1xuXHR9XG5cblx0Ly8gSWYgcmV2ZWFsT3JkZXIgaXMgZmFsc3kgdGhlbiB3ZSBjYW4gZG8gYW4gZWFybHkgZXhpdCwgYXMgdGhlXG5cdC8vIGNhbGxiYWNrcyB3b24ndCBnZXQgcXVldWVkIGluIHRoZSBub2RlIGFueXdheS5cblx0Ly8gSWYgcmV2ZWFsT3JkZXIgaXMgJ3RvZ2V0aGVyJyB0aGVuIGFsc28gZG8gYW4gZWFybHkgZXhpdFxuXHQvLyBpZiBhbGwgc3VzcGVuZGVkIGRlc2NlbmRhbnRzIGhhdmUgbm90IHlldCBiZWVuIHJlc29sdmVkLlxuXHRpZiAoXG5cdFx0IWxpc3QucHJvcHMucmV2ZWFsT3JkZXIgfHxcblx0XHQobGlzdC5wcm9wcy5yZXZlYWxPcmRlclswXSA9PT0gJ3QnICYmIGxpc3QuX21hcC5zaXplKVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBXYWxrIHRoZSBjdXJyZW50bHkgc3VzcGVuZGVkIGNoaWxkcmVuIGluIG9yZGVyLCBjYWxsaW5nIHRoZWlyXG5cdC8vIHN0b3JlZCBjYWxsYmFja3Mgb24gdGhlIHdheS4gU3RvcCBpZiB3ZSBlbmNvdW50ZXIgYSBjaGlsZCB0aGF0XG5cdC8vIGhhcyBub3QgYmVlbiBjb21wbGV0ZWx5IHJlc29sdmVkIHlldC5cblx0bm9kZSA9IGxpc3QuX25leHQ7XG5cdHdoaWxlIChub2RlKSB7XG5cdFx0d2hpbGUgKG5vZGUubGVuZ3RoID4gMykge1xuXHRcdFx0bm9kZS5wb3AoKSgpO1xuXHRcdH1cblx0XHRpZiAobm9kZVtSRVNPTFZFRF9DT1VOVF0gPCBub2RlW1NVU1BFTkRFRF9DT1VOVF0pIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRsaXN0Ll9uZXh0ID0gbm9kZSA9IG5vZGVbTkVYVF9OT0RFXTtcblx0fVxufTtcblxuLy8gVGhpbmdzIHdlIGRvIGhlcmUgdG8gc2F2ZSBzb21lIGJ5dGVzIGJ1dCBhcmUgbm90IHByb3BlciBKUyBpbmhlcml0YW5jZTpcbi8vIC0gY2FsbCBgbmV3IENvbXBvbmVudCgpYCBhcyB0aGUgcHJvdG90eXBlXG4vLyAtIGRvIG5vdCBzZXQgYFN1c3BlbnNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcmAgdG8gYFN1c3BlbnNlYFxuU3VzcGVuc2VMaXN0LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnQoKTtcblxuU3VzcGVuc2VMaXN0LnByb3RvdHlwZS5fc3VzcGVuZGVkID0gZnVuY3Rpb24gKGNoaWxkKSB7XG5cdGNvbnN0IGxpc3QgPSB0aGlzO1xuXHRjb25zdCBkZWxlZ2F0ZWQgPSBzdXNwZW5kZWQobGlzdC5fdm5vZGUpO1xuXG5cdGxldCBub2RlID0gbGlzdC5fbWFwLmdldChjaGlsZCk7XG5cdG5vZGVbU1VTUEVOREVEX0NPVU5UXSsrO1xuXG5cdHJldHVybiB1bnN1c3BlbmQgPT4ge1xuXHRcdGNvbnN0IHdyYXBwZWRVbnN1c3BlbmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWxpc3QucHJvcHMucmV2ZWFsT3JkZXIpIHtcblx0XHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRoZSB1bmRlZmluZWQgKGZhbHN5KSByZXZlYWxPcmRlciwgYXMgdGhlcmVcblx0XHRcdFx0Ly8gaXMgbm8gbmVlZCB0byBjb29yZGluYXRlIGEgc3BlY2lmaWMgb3JkZXIgb3IgdW5zdXNwZW5kcy5cblx0XHRcdFx0dW5zdXNwZW5kKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub2RlLnB1c2godW5zdXNwZW5kKTtcblx0XHRcdFx0cmVzb2x2ZShsaXN0LCBjaGlsZCwgbm9kZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoZGVsZWdhdGVkKSB7XG5cdFx0XHRkZWxlZ2F0ZWQod3JhcHBlZFVuc3VzcGVuZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdyYXBwZWRVbnN1c3BlbmQoKTtcblx0XHR9XG5cdH07XG59O1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChwcm9wcykge1xuXHR0aGlzLl9uZXh0ID0gbnVsbDtcblx0dGhpcy5fbWFwID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IGNoaWxkcmVuID0gdG9DaGlsZEFycmF5KHByb3BzLmNoaWxkcmVuKTtcblx0aWYgKHByb3BzLnJldmVhbE9yZGVyICYmIHByb3BzLnJldmVhbE9yZGVyWzBdID09PSAnYicpIHtcblx0XHQvLyBJZiBvcmRlciA9PT0gJ2JhY2t3YXJkcycgKG9yLCB3ZWxsLCBhbnl0aGluZyBzdGFydGluZyB3aXRoIGEgJ2InKVxuXHRcdC8vIHRoZW4gZmxpcCB0aGUgY2hpbGQgbGlzdCBhcm91bmQgc28gdGhhdCB0aGUgbGFzdCBjaGlsZCB3aWxsIGJlXG5cdFx0Ly8gdGhlIGZpcnN0IGluIHRoZSBsaW5rZWQgbGlzdC5cblx0XHRjaGlsZHJlbi5yZXZlcnNlKCk7XG5cdH1cblx0Ly8gQnVpbGQgdGhlIGxpbmtlZCBsaXN0LiBJdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGluIHJldmVyc2Ugb3JkZXJcblx0Ly8gc28gdGhhdCBgX25leHRgIHBvaW50cyB0byB0aGUgZmlyc3QgbGlua2VkIGxpc3Qgbm9kZSB0byBiZSByZXNvbHZlZC5cblx0Zm9yIChsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aDsgaS0tOyApIHtcblx0XHQvLyBDcmVhdGUgYSBuZXcgbGlua2VkIGxpc3Qgbm9kZSBhcyBhbiBhcnJheSBvZiBmb3JtOlxuXHRcdC8vIFx0W3N1c3BlbmRlZF9jb3VudCwgcmVzb2x2ZWRfY291bnQsIG5leHRfbm9kZV1cblx0XHQvLyB3aGVyZSBzdXNwZW5kZWRfY291bnQgYW5kIHJlc29sdmVkX2NvdW50IGFyZSBudW1lcmljIGNvdW50ZXJzIGZvclxuXHRcdC8vIGtlZXBpbmcgdHJhY2sgaG93IG1hbnkgdGltZXMgYSBub2RlIGhhcyBiZWVuIHN1c3BlbmRlZCBhbmQgcmVzb2x2ZWQuXG5cdFx0Ly9cblx0XHQvLyBOb3RlIHRoYXQgc3VzcGVuZGVkX2NvdW50IHN0YXJ0cyBmcm9tIDEgaW5zdGVhZCBvZiAwLCBzbyB3ZSBjYW4gYmxvY2tcblx0XHQvLyBwcm9jZXNzaW5nIGNhbGxiYWNrcyB1bnRpbCBjb21wb25lbnREaWRNb3VudCBoYXMgYmVlbiBjYWxsZWQuIEluIGEgc2Vuc2Vcblx0XHQvLyBub2RlIGlzIHN1c3BlbmRlZCBhdCBsZWFzdCB1bnRpbCBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZCFcblx0XHQvL1xuXHRcdC8vIFBlbmRpbmcgY2FsbGJhY2tzIGFyZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBub2RlOlxuXHRcdC8vIFx0W3N1c3BlbmRlZF9jb3VudCwgcmVzb2x2ZWRfY291bnQsIG5leHRfbm9kZSwgY2FsbGJhY2tfMCwgY2FsbGJhY2tfMSwgLi4uXVxuXHRcdHRoaXMuX21hcC5zZXQoY2hpbGRyZW5baV0sICh0aGlzLl9uZXh0ID0gWzEsIDAsIHRoaXMuX25leHRdKSk7XG5cdH1cblx0cmV0dXJuIHByb3BzLmNoaWxkcmVuO1xufTtcblxuU3VzcGVuc2VMaXN0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPVxuXHRTdXNwZW5zZUxpc3QucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuXHRcdC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgY2hpbGRyZW4gYWZ0ZXIgbW91bnRpbmcgZm9yIHR3byByZWFzb25zOlxuXHRcdC8vIDEuIEFzIGVhY2ggbm9kZVtTVVNQRU5ERURfQ09VTlRdIHN0YXJ0cyBmcm9tIDEsIHRoaXMgaXRlcmF0aW9uIGluY3JlYXNlc1xuXHRcdC8vICAgIGVhY2ggbm9kZVtSRUxFQVNFRF9DT1VOVF0gYnkgMSwgdGhlcmVmb3JlIGJhbGFuY2luZyB0aGUgY291bnRlcnMuXG5cdFx0Ly8gICAgVGhlIG5vZGVzIGNhbiBub3cgYmUgY29tcGxldGVseSBjb25zdW1lZCBmcm9tIHRoZSBsaW5rZWQgbGlzdC5cblx0XHQvLyAyLiBIYW5kbGUgbm9kZXMgdGhhdCBtaWdodCBoYXZlIGdvdHRlbiByZXNvbHZlZCBiZXR3ZWVuIHJlbmRlciBhbmRcblx0XHQvLyAgICBjb21wb25lbnREaWRNb3VudC5cblx0XHR0aGlzLl9tYXAuZm9yRWFjaCgobm9kZSwgY2hpbGQpID0+IHtcblx0XHRcdHJlc29sdmUodGhpcywgY2hpbGQsIG5vZGUpO1xuXHRcdH0pO1xuXHR9O1xuIiwgIi8qKiBOb3JtYWwgaHlkcmF0aW9uIHRoYXQgYXR0YWNoZXMgdG8gYSBET00gdHJlZSBidXQgZG9lcyBub3QgZGlmZiBpdC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFX0hZRFJBVEUgPSAxIDw8IDU7XG4vKiogU2lnbmlmaWVzIHRoaXMgVk5vZGUgc3VzcGVuZGVkIG9uIHRoZSBwcmV2aW91cyByZW5kZXIgKi9cbmV4cG9ydCBjb25zdCBNT0RFX1NVU1BFTkRFRCA9IDEgPDwgNztcbi8qKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIG5vZGUgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgd2hpbGUgcGF0Y2hpbmcgY2hpbGRyZW4gKi9cbmV4cG9ydCBjb25zdCBJTlNFUlRfVk5PREUgPSAxIDw8IDE2O1xuLyoqIEluZGljYXRlcyBhIFZOb2RlIGhhcyBiZWVuIG1hdGNoZWQgd2l0aCBhbm90aGVyIFZOb2RlIGluIHRoZSBkaWZmICovXG5leHBvcnQgY29uc3QgTUFUQ0hFRCA9IDEgPDwgMTc7XG5cbi8qKiBSZXNldCBhbGwgbW9kZSBmbGFncyAqL1xuZXhwb3J0IGNvbnN0IFJFU0VUX01PREUgPSB+KE1PREVfSFlEUkFURSB8IE1PREVfU1VTUEVOREVEKTtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX09CSiA9IC8qKiBAdHlwZSB7YW55fSAqLyAoe30pO1xuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUiA9IFtdO1xuZXhwb3J0IGNvbnN0IElTX05PTl9ESU1FTlNJT05BTCA9XG5cdC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2k7XG4iLCAiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgcmVuZGVyIH0gZnJvbSAncHJlYWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vc3JjL2luZGV4JykuUmVuZGVyYWJsZVByb3BzPHsgY29udGV4dDogYW55IH0+fSBwcm9wc1xuICovXG5mdW5jdGlvbiBDb250ZXh0UHJvdmlkZXIocHJvcHMpIHtcblx0dGhpcy5nZXRDaGlsZENvbnRleHQgPSAoKSA9PiBwcm9wcy5jb250ZXh0O1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59XG5cbi8qKlxuICogUG9ydGFsIGNvbXBvbmVudFxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZH0gcHJvcHNcbiAqXG4gKiBUT0RPOiB1c2UgY3JlYXRlUm9vdCgpIGluc3RlYWQgb2YgZmFrZSByb290XG4gKi9cbmZ1bmN0aW9uIFBvcnRhbChwcm9wcykge1xuXHRjb25zdCBfdGhpcyA9IHRoaXM7XG5cdGxldCBjb250YWluZXIgPSBwcm9wcy5fY29udGFpbmVyO1xuXG5cdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xuXHRcdHJlbmRlcihudWxsLCBfdGhpcy5fdGVtcCk7XG5cdFx0X3RoaXMuX3RlbXAgPSBudWxsO1xuXHRcdF90aGlzLl9jb250YWluZXIgPSBudWxsO1xuXHR9O1xuXG5cdC8vIFdoZW4gd2UgY2hhbmdlIGNvbnRhaW5lciB3ZSBzaG91bGQgY2xlYXIgb3VyIG9sZCBjb250YWluZXIgYW5kXG5cdC8vIGluZGljYXRlIGEgbmV3IG1vdW50LlxuXHRpZiAoX3RoaXMuX2NvbnRhaW5lciAmJiBfdGhpcy5fY29udGFpbmVyICE9PSBjb250YWluZXIpIHtcblx0XHRfdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXHR9XG5cblx0aWYgKCFfdGhpcy5fdGVtcCkge1xuXHRcdF90aGlzLl9jb250YWluZXIgPSBjb250YWluZXI7XG5cblx0XHQvLyBDcmVhdGUgYSBmYWtlIERPTSBwYXJlbnQgbm9kZSB0aGF0IG1hbmFnZXMgYSBzdWJzZXQgb2YgYGNvbnRhaW5lcmAncyBjaGlsZHJlbjpcblx0XHRfdGhpcy5fdGVtcCA9IHtcblx0XHRcdG5vZGVUeXBlOiAxLFxuXHRcdFx0cGFyZW50Tm9kZTogY29udGFpbmVyLFxuXHRcdFx0Y2hpbGROb2RlczogW10sXG5cdFx0XHRjb250YWluczogKCkgPT4gdHJ1ZSxcblx0XHRcdGFwcGVuZENoaWxkKGNoaWxkKSB7XG5cdFx0XHRcdHRoaXMuY2hpbGROb2Rlcy5wdXNoKGNoaWxkKTtcblx0XHRcdFx0X3RoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChjaGlsZCk7XG5cdFx0XHR9LFxuXHRcdFx0aW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmUpIHtcblx0XHRcdFx0dGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO1xuXHRcdFx0XHRfdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdH0sXG5cdFx0XHRyZW1vdmVDaGlsZChjaGlsZCkge1xuXHRcdFx0XHR0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkKSA+Pj4gMSwgMSk7XG5cdFx0XHRcdF90aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBSZW5kZXIgb3VyIHdyYXBwaW5nIGVsZW1lbnQgaW50byB0ZW1wLlxuXHRyZW5kZXIoXG5cdFx0Y3JlYXRlRWxlbWVudChDb250ZXh0UHJvdmlkZXIsIHsgY29udGV4dDogX3RoaXMuY29udGV4dCB9LCBwcm9wcy5fdm5vZGUpLFxuXHRcdF90aGlzLl90ZW1wXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYFBvcnRhbGAgdG8gY29udGludWUgcmVuZGVyaW5nIHRoZSB2bm9kZSB0cmVlIGF0IGEgZGlmZmVyZW50IERPTSBub2RlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBUaGUgdm5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IGNvbnRhaW5lciBUaGUgRE9NIG5vZGUgdG8gY29udGludWUgcmVuZGVyaW5nIGluIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9ydGFsKHZub2RlLCBjb250YWluZXIpIHtcblx0Y29uc3QgZWwgPSBjcmVhdGVFbGVtZW50KFBvcnRhbCwgeyBfdm5vZGU6IHZub2RlLCBfY29udGFpbmVyOiBjb250YWluZXIgfSk7XG5cdGVsLmNvbnRhaW5lckluZm8gPSBjb250YWluZXI7XG5cdHJldHVybiBlbDtcbn1cbiIsICJpbXBvcnQge1xuXHRyZW5kZXIgYXMgcHJlYWN0UmVuZGVyLFxuXHRoeWRyYXRlIGFzIHByZWFjdEh5ZHJhdGUsXG5cdG9wdGlvbnMsXG5cdHRvQ2hpbGRBcnJheSxcblx0Q29tcG9uZW50XG59IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQge1xuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZSxcblx0dXNlRWZmZWN0LFxuXHR1c2VJZCxcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTGF5b3V0RWZmZWN0LFxuXHR1c2VNZW1vLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VSZWYsXG5cdHVzZVN0YXRlXG59IGZyb20gJ3ByZWFjdC9ob29rcyc7XG5pbXBvcnQge1xuXHR1c2VEZWZlcnJlZFZhbHVlLFxuXHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHR1c2VUcmFuc2l0aW9uXG59IGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfRUxFTUVOVF9UWVBFID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAmJiBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG5cdDB4ZWFjNztcblxuY29uc3QgQ0FNRUxfUFJPUFMgPVxuXHQvXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS87XG5jb25zdCBPTl9BTkkgPSAvXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvO1xuY29uc3QgQ0FNRUxfUkVQTEFDRSA9IC9bQS1aMC05XS9nO1xuY29uc3QgSVNfRE9NID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLy8gSW5wdXQgdHlwZXMgZm9yIHdoaWNoIG9uY2hhbmdlIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIG9uaW5wdXQuXG4vLyB0eXBlPVwiZmlsZXxjaGVja2JveHxyYWRpb1wiLCBwbHVzIFwicmFuZ2VcIiBpbiBJRTExLlxuLy8gKElFMTEgZG9lc24ndCBzdXBwb3J0IFN5bWJvbCwgd2hpY2ggd2UgdXNlIGhlcmUgdG8gdHVybiBgcmFkYCBpbnRvIGByYWAgd2hpY2ggbWF0Y2hlcyBcInJhbmdlXCIpXG5jb25zdCBvbkNoYW5nZUlucHV0VHlwZSA9IHR5cGUgPT5cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09ICdzeW1ib2wnXG5cdFx0PyAvZmlsfGNoZXxyYWQvXG5cdFx0OiAvZmlsfGNoZXxyYS9cblx0KS50ZXN0KHR5cGUpO1xuXG4vLyBTb21lIGxpYnJhcmllcyBsaWtlIGByZWFjdC12aXJ0dWFsaXplZGAgZXhwbGljaXRseSBjaGVjayBmb3IgdGhpcy5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuXG4vLyBgVU5TQUZFXypgIGxpZmVjeWNsZSBob29rc1xuLy8gUHJlYWN0IG9ubHkgZXZlciBpbnZva2VzIHRoZSB1bnByZWZpeGVkIG1ldGhvZHMuXG4vLyBIZXJlIHdlIHByb3ZpZGUgYSBiYXNlIFwiZmFsbGJhY2tcIiBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbGxzIGFueSBkZWZpbmVkIFVOU0FGRV8gcHJlZml4ZWQgbWV0aG9kLlxuLy8gLSBJZiBhIGNvbXBvbmVudCBkZWZpbmVzIGl0cyBvd24gYGNvbXBvbmVudERpZE1vdW50KClgIChpbmNsdWRpbmcgdmlhIGRlZmluZVByb3BlcnR5KSwgdXNlIHRoYXQuXG4vLyAtIElmIGEgY29tcG9uZW50IGRlZmluZXMgYFVOU0FGRV9jb21wb25lbnREaWRNb3VudCgpYCwgYGNvbXBvbmVudERpZE1vdW50YCBpcyB0aGUgYWxpYXMgZ2V0dGVyL3NldHRlci5cbi8vIC0gSWYgYW55dGhpbmcgYXNzaWducyB0byBhbiBgVU5TQUZFXypgIHByb3BlcnR5LCB0aGUgYXNzaWdubWVudCBpcyBmb3J3YXJkZWQgdG8gdGhlIHVucHJlZml4ZWQgcHJvcGVydHkuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9pc3N1ZXMvMTk0MVxuW1xuXHQnY29tcG9uZW50V2lsbE1vdW50Jyxcblx0J2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxuXHQnY29tcG9uZW50V2lsbFVwZGF0ZSdcbl0uZm9yRWFjaChrZXkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwga2V5LCB7XG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzWydVTlNBRkVfJyArIGtleV07XG5cdFx0fSxcblx0XHRzZXQodikge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogdlxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vKipcbiAqIFByb3h5IHJlbmRlcigpIHNpbmNlIFJlYWN0IHJldHVybnMgYSBDb21wb25lbnQgcmVmZXJlbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gdm5vZGUgVk5vZGUgdHJlZSB0byByZW5kZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudH0gcGFyZW50IERPTSBub2RlIHRvIHJlbmRlciB2bm9kZSB0cmVlIGludG9cbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gW2NhbGxiYWNrXSBPcHRpb25hbCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHJlbmRlcmluZ1xuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudCB8IG51bGx9IFRoZSByb290IGNvbXBvbmVudCByZWZlcmVuY2Ugb3IgbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKHZub2RlLCBwYXJlbnQsIGNhbGxiYWNrKSB7XG5cdC8vIFJlYWN0IGRlc3Ryb3lzIGFueSBleGlzdGluZyBET00gbm9kZXMsIHNlZSAjMTcyN1xuXHQvLyAuLi5idXQgb25seSBvbiB0aGUgZmlyc3QgcmVuZGVyLCBzZWUgIzE4Mjhcblx0aWYgKHBhcmVudC5fY2hpbGRyZW4gPT0gbnVsbCkge1xuXHRcdHBhcmVudC50ZXh0Q29udGVudCA9ICcnO1xuXHR9XG5cblx0cHJlYWN0UmVuZGVyKHZub2RlLCBwYXJlbnQpO1xuXHRpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG5cblx0cmV0dXJuIHZub2RlID8gdm5vZGUuX2NvbXBvbmVudCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlKHZub2RlLCBwYXJlbnQsIGNhbGxiYWNrKSB7XG5cdHByZWFjdEh5ZHJhdGUodm5vZGUsIHBhcmVudCk7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcblxuXHRyZXR1cm4gdm5vZGUgPyB2bm9kZS5fY29tcG9uZW50IDogbnVsbDtcbn1cblxubGV0IG9sZEV2ZW50SG9vayA9IG9wdGlvbnMuZXZlbnQ7XG5vcHRpb25zLmV2ZW50ID0gZSA9PiB7XG5cdGlmIChvbGRFdmVudEhvb2spIGUgPSBvbGRFdmVudEhvb2soZSk7XG5cblx0ZS5wZXJzaXN0ID0gZW1wdHk7XG5cdGUuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBpc1Byb3BhZ2F0aW9uU3RvcHBlZDtcblx0ZS5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBpc0RlZmF1bHRQcmV2ZW50ZWQ7XG5cdHJldHVybiAoZS5uYXRpdmVFdmVudCA9IGUpO1xufTtcblxuZnVuY3Rpb24gZW1wdHkoKSB7fVxuXG5mdW5jdGlvbiBpc1Byb3BhZ2F0aW9uU3RvcHBlZCgpIHtcblx0cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlO1xufVxuXG5mdW5jdGlvbiBpc0RlZmF1bHRQcmV2ZW50ZWQoKSB7XG5cdHJldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ7XG59XG5cbmNvbnN0IGNsYXNzTmFtZURlc2NyaXB0b3JOb25FbnVtYmVyYWJsZSA9IHtcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0Z2V0KCkge1xuXHRcdHJldHVybiB0aGlzLmNsYXNzO1xuXHR9XG59O1xuXG5mdW5jdGlvbiBoYW5kbGVEb21WTm9kZSh2bm9kZSkge1xuXHRsZXQgcHJvcHMgPSB2bm9kZS5wcm9wcyxcblx0XHR0eXBlID0gdm5vZGUudHlwZSxcblx0XHRub3JtYWxpemVkUHJvcHMgPSB7fTtcblxuXHRsZXQgaXNOb25EYXNoZWRUeXBlID0gdHlwZS5pbmRleE9mKCctJykgPT09IC0xO1xuXHRmb3IgKGxldCBpIGluIHByb3BzKSB7XG5cdFx0bGV0IHZhbHVlID0gcHJvcHNbaV07XG5cblx0XHRpZiAoXG5cdFx0XHQoaSA9PT0gJ3ZhbHVlJyAmJiAnZGVmYXVsdFZhbHVlJyBpbiBwcm9wcyAmJiB2YWx1ZSA9PSBudWxsKSB8fFxuXHRcdFx0Ly8gRW11bGF0ZSBSZWFjdCdzIGJlaGF2aW9yIG9mIG5vdCByZW5kZXJpbmcgdGhlIGNvbnRlbnRzIG9mIG5vc2NyaXB0IHRhZ3Mgb24gdGhlIGNsaWVudC5cblx0XHRcdChJU19ET00gJiYgaSA9PT0gJ2NoaWxkcmVuJyAmJiB0eXBlID09PSAnbm9zY3JpcHQnKSB8fFxuXHRcdFx0aSA9PT0gJ2NsYXNzJyB8fFxuXHRcdFx0aSA9PT0gJ2NsYXNzTmFtZSdcblx0XHQpIHtcblx0XHRcdC8vIFNraXAgYXBwbHlpbmcgdmFsdWUgaWYgaXQgaXMgbnVsbC91bmRlZmluZWQgYW5kIHdlIGFscmVhZHkgc2V0XG5cdFx0XHQvLyBhIGRlZmF1bHQgdmFsdWVcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGxldCBsb3dlckNhc2VkID0gaS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmIChpID09PSAnZGVmYXVsdFZhbHVlJyAmJiAndmFsdWUnIGluIHByb3BzICYmIHByb3BzLnZhbHVlID09IG51bGwpIHtcblx0XHRcdC8vIGBkZWZhdWx0VmFsdWVgIGlzIHRyZWF0ZWQgYXMgYSBmYWxsYmFjayBgdmFsdWVgIHdoZW4gYSB2YWx1ZSBwcm9wIGlzIHByZXNlbnQgYnV0IG51bGwvdW5kZWZpbmVkLlxuXHRcdFx0Ly8gYGRlZmF1bHRWYWx1ZWAgZm9yIEVsZW1lbnRzIHdpdGggbm8gdmFsdWUgcHJvcCBpcyB0aGUgc2FtZSBhcyB0aGUgRE9NIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eS5cblx0XHRcdGkgPSAndmFsdWUnO1xuXHRcdH0gZWxzZSBpZiAoaSA9PT0gJ2Rvd25sb2FkJyAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gQ2FsbGluZyBgc2V0QXR0cmlidXRlYCB3aXRoIGEgdHJ1dGh5IHZhbHVlIHdpbGwgbGVhZCB0byBpdCBiZWluZ1xuXHRcdFx0Ly8gcGFzc2VkIGFzIGEgc3RyaW5naWZpZWQgdmFsdWUsIGUuZy4gYGRvd25sb2FkPVwidHJ1ZVwiYC4gUmVhY3Rcblx0XHRcdC8vIGNvbnZlcnRzIGl0IHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFkLCBvdGhlcndpc2UgdGhlIGF0dHJpYnV0ZVxuXHRcdFx0Ly8gdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBmaWxlIG5hbWUgYW5kIHRoZSBmaWxlIHdpbGwgYmUgY2FsbGVkXG5cdFx0XHQvLyBcInRydWVcIiB1cG9uIGRvd25sb2FkaW5nIGl0LlxuXHRcdFx0dmFsdWUgPSAnJztcblx0XHR9IGVsc2UgaWYgKGxvd2VyQ2FzZWQgPT09ICd0cmFuc2xhdGUnICYmIHZhbHVlID09PSAnbm8nKSB7XG5cdFx0XHR2YWx1ZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZFswXSA9PT0gJ28nICYmIGxvd2VyQ2FzZWRbMV0gPT09ICduJykge1xuXHRcdFx0aWYgKGxvd2VyQ2FzZWQgPT09ICdvbmRvdWJsZWNsaWNrJykge1xuXHRcdFx0XHRpID0gJ29uZGJsY2xpY2snO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0bG93ZXJDYXNlZCA9PT0gJ29uY2hhbmdlJyAmJlxuXHRcdFx0XHQodHlwZSA9PT0gJ2lucHV0JyB8fCB0eXBlID09PSAndGV4dGFyZWEnKSAmJlxuXHRcdFx0XHQhb25DaGFuZ2VJbnB1dFR5cGUocHJvcHMudHlwZSlcblx0XHRcdCkge1xuXHRcdFx0XHRsb3dlckNhc2VkID0gaSA9ICdvbmlucHV0Jztcblx0XHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ29uZm9jdXMnKSB7XG5cdFx0XHRcdGkgPSAnb25mb2N1c2luJztcblx0XHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ29uYmx1cicpIHtcblx0XHRcdFx0aSA9ICdvbmZvY3Vzb3V0Jztcblx0XHRcdH0gZWxzZSBpZiAoT05fQU5JLnRlc3QoaSkpIHtcblx0XHRcdFx0aSA9IGxvd2VyQ2FzZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc05vbkRhc2hlZFR5cGUgJiYgQ0FNRUxfUFJPUFMudGVzdChpKSkge1xuXHRcdFx0aSA9IGkucmVwbGFjZShDQU1FTF9SRVBMQUNFLCAnLSQmJykudG9Mb3dlckNhc2UoKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHR2YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBBZGQgc3VwcG9ydCBmb3Igb25JbnB1dCBhbmQgb25DaGFuZ2UsIHNlZSAjMzU2MVxuXHRcdC8vIGlmIHdlIGhhdmUgYW4gb25pbnB1dCBwcm9wIGFscmVhZHkgY2hhbmdlIGl0IHRvIG9uaW5wdXRDYXB0dXJlXG5cdFx0aWYgKGxvd2VyQ2FzZWQgPT09ICdvbmlucHV0Jykge1xuXHRcdFx0aSA9IGxvd2VyQ2FzZWQ7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzW2ldKSB7XG5cdFx0XHRcdGkgPSAnb25pbnB1dENhcHR1cmUnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG5vcm1hbGl6ZWRQcm9wc1tpXSA9IHZhbHVlO1xuXHR9XG5cblx0Ly8gQWRkIHN1cHBvcnQgZm9yIGFycmF5IHNlbGVjdCB2YWx1ZXM6IDxzZWxlY3QgbXVsdGlwbGUgdmFsdWU9e1tdfSAvPlxuXHRpZiAoXG5cdFx0dHlwZSA9PSAnc2VsZWN0JyAmJlxuXHRcdG5vcm1hbGl6ZWRQcm9wcy5tdWx0aXBsZSAmJlxuXHRcdEFycmF5LmlzQXJyYXkobm9ybWFsaXplZFByb3BzLnZhbHVlKVxuXHQpIHtcblx0XHQvLyBmb3JFYWNoKCkgYWx3YXlzIHJldHVybnMgdW5kZWZpbmVkLCB3aGljaCB3ZSBhYnVzZSBoZXJlIHRvIHVuc2V0IHRoZSB2YWx1ZSBwcm9wLlxuXHRcdG5vcm1hbGl6ZWRQcm9wcy52YWx1ZSA9IHRvQ2hpbGRBcnJheShwcm9wcy5jaGlsZHJlbikuZm9yRWFjaChjaGlsZCA9PiB7XG5cdFx0XHRjaGlsZC5wcm9wcy5zZWxlY3RlZCA9XG5cdFx0XHRcdG5vcm1hbGl6ZWRQcm9wcy52YWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKSAhPSAtMTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIEFkZGluZyBzdXBwb3J0IGZvciBkZWZhdWx0VmFsdWUgaW4gc2VsZWN0IHRhZ1xuXHRpZiAodHlwZSA9PSAnc2VsZWN0JyAmJiBub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcblx0XHRub3JtYWxpemVkUHJvcHMudmFsdWUgPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pLmZvckVhY2goY2hpbGQgPT4ge1xuXHRcdFx0aWYgKG5vcm1hbGl6ZWRQcm9wcy5tdWx0aXBsZSkge1xuXHRcdFx0XHRjaGlsZC5wcm9wcy5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0bm9ybWFsaXplZFByb3BzLmRlZmF1bHRWYWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKSAhPSAtMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0XHRub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlID09IGNoaWxkLnByb3BzLnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHByb3BzLmNsYXNzICYmICFwcm9wcy5jbGFzc05hbWUpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2xhc3MgPSBwcm9wcy5jbGFzcztcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRub3JtYWxpemVkUHJvcHMsXG5cdFx0XHQnY2xhc3NOYW1lJyxcblx0XHRcdGNsYXNzTmFtZURlc2NyaXB0b3JOb25FbnVtYmVyYWJsZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICYmICFwcm9wcy5jbGFzcykge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jbGFzcyA9IG5vcm1hbGl6ZWRQcm9wcy5jbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWU7XG5cdH0gZWxzZSBpZiAocHJvcHMuY2xhc3MgJiYgcHJvcHMuY2xhc3NOYW1lKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNsYXNzID0gbm9ybWFsaXplZFByb3BzLmNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcblx0fVxuXG5cdHZub2RlLnByb3BzID0gbm9ybWFsaXplZFByb3BzO1xufVxuXG5sZXQgb2xkVk5vZGVIb29rID0gb3B0aW9ucy52bm9kZTtcbm9wdGlvbnMudm5vZGUgPSB2bm9kZSA9PiB7XG5cdC8vIG9ubHkgbm9ybWFsaXplIHByb3BzIG9uIEVsZW1lbnQgbm9kZXNcblx0aWYgKHR5cGVvZiB2bm9kZS50eXBlID09PSAnc3RyaW5nJykge1xuXHRcdGhhbmRsZURvbVZOb2RlKHZub2RlKTtcblx0fVxuXG5cdHZub2RlLiQkdHlwZW9mID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuXG5cdGlmIChvbGRWTm9kZUhvb2spIG9sZFZOb2RlSG9vayh2bm9kZSk7XG59O1xuXG4vLyBPbmx5IG5lZWRlZCBmb3IgcmVhY3QtcmVsYXlcbmxldCBjdXJyZW50Q29tcG9uZW50O1xuY29uc3Qgb2xkQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5fcmVuZGVyO1xub3B0aW9ucy5fcmVuZGVyID0gZnVuY3Rpb24gKHZub2RlKSB7XG5cdGlmIChvbGRCZWZvcmVSZW5kZXIpIHtcblx0XHRvbGRCZWZvcmVSZW5kZXIodm5vZGUpO1xuXHR9XG5cdGN1cnJlbnRDb21wb25lbnQgPSB2bm9kZS5fY29tcG9uZW50O1xufTtcblxuY29uc3Qgb2xkRGlmZmVkID0gb3B0aW9ucy5kaWZmZWQ7XG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUpID0+IHZvaWR9ICovXG5vcHRpb25zLmRpZmZlZCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuXHRpZiAob2xkRGlmZmVkKSB7XG5cdFx0b2xkRGlmZmVkKHZub2RlKTtcblx0fVxuXG5cdGNvbnN0IHByb3BzID0gdm5vZGUucHJvcHM7XG5cdGNvbnN0IGRvbSA9IHZub2RlLl9kb207XG5cblx0aWYgKFxuXHRcdGRvbSAhPSBudWxsICYmXG5cdFx0dm5vZGUudHlwZSA9PT0gJ3RleHRhcmVhJyAmJlxuXHRcdCd2YWx1ZScgaW4gcHJvcHMgJiZcblx0XHRwcm9wcy52YWx1ZSAhPT0gZG9tLnZhbHVlXG5cdCkge1xuXHRcdGRvbS52YWx1ZSA9IHByb3BzLnZhbHVlID09IG51bGwgPyAnJyA6IHByb3BzLnZhbHVlO1xuXHR9XG5cblx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG59O1xuXG4vLyBUaGlzIGlzIGEgdmVyeSB2ZXJ5IHByaXZhdGUgaW50ZXJuYWwgZnVuY3Rpb24gZm9yIFJlYWN0IGl0XG4vLyBpcyB1c2VkIHRvIHNvcnQtb2YgZG8gcnVudGltZSBkZXBlbmRlbmN5IGluamVjdGlvbi5cbmV4cG9ydCBjb25zdCBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IHtcblx0UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjoge1xuXHRcdGN1cnJlbnQ6IHtcblx0XHRcdHJlYWRDb250ZXh0KGNvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIGN1cnJlbnRDb21wb25lbnQuX2dsb2JhbENvbnRleHRbY29udGV4dC5faWRdLnByb3BzLnZhbHVlO1xuXHRcdFx0fSxcblx0XHRcdHVzZUNhbGxiYWNrLFxuXHRcdFx0dXNlQ29udGV4dCxcblx0XHRcdHVzZURlYnVnVmFsdWUsXG5cdFx0XHR1c2VEZWZlcnJlZFZhbHVlLFxuXHRcdFx0dXNlRWZmZWN0LFxuXHRcdFx0dXNlSWQsXG5cdFx0XHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHRcdFx0dXNlSW5zZXJ0aW9uRWZmZWN0LFxuXHRcdFx0dXNlTGF5b3V0RWZmZWN0LFxuXHRcdFx0dXNlTWVtbyxcblx0XHRcdC8vIHVzZU11dGFibGVTb3VyY2UsIC8vIGV4cGVyaW1lbnRhbC1vbmx5IGFuZCByZXBsYWNlZCBieSB1U0VTLCBsaWtlbHkgbm90IHdvcnRoIHN1cHBvcnRpbmdcblx0XHRcdHVzZVJlZHVjZXIsXG5cdFx0XHR1c2VSZWYsXG5cdFx0XHR1c2VTdGF0ZSxcblx0XHRcdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHRcdFx0dXNlVHJhbnNpdGlvblxuXHRcdH1cblx0fVxufTtcbiIsICJpbXBvcnQge1xuXHRjcmVhdGVFbGVtZW50LFxuXHRyZW5kZXIgYXMgcHJlYWN0UmVuZGVyLFxuXHRjbG9uZUVsZW1lbnQgYXMgcHJlYWN0Q2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdENvbXBvbmVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0RnJhZ21lbnRcbn0gZnJvbSAncHJlYWN0JztcbmltcG9ydCB7XG5cdHVzZVN0YXRlLFxuXHR1c2VJZCxcblx0dXNlUmVkdWNlcixcblx0dXNlRWZmZWN0LFxuXHR1c2VMYXlvdXRFZmZlY3QsXG5cdHVzZVJlZixcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTWVtbyxcblx0dXNlQ2FsbGJhY2ssXG5cdHVzZUNvbnRleHQsXG5cdHVzZURlYnVnVmFsdWVcbn0gZnJvbSAncHJlYWN0L2hvb2tzJztcbmltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICcuL1B1cmVDb21wb25lbnQnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4vbWVtbyc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAnLi9mb3J3YXJkUmVmJztcbmltcG9ydCB7IENoaWxkcmVuIH0gZnJvbSAnLi9DaGlsZHJlbic7XG5pbXBvcnQgeyBTdXNwZW5zZSwgbGF6eSB9IGZyb20gJy4vc3VzcGVuc2UnO1xuaW1wb3J0IHsgU3VzcGVuc2VMaXN0IH0gZnJvbSAnLi9zdXNwZW5zZS1saXN0JztcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJy4vcG9ydGFscyc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge1xuXHRoeWRyYXRlLFxuXHRyZW5kZXIsXG5cdFJFQUNUX0VMRU1FTlRfVFlQRSxcblx0X19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURcbn0gZnJvbSAnLi9yZW5kZXInO1xuXG5jb25zdCB2ZXJzaW9uID0gJzE4LjMuMSc7IC8vIHRyaWNrIGxpYnJhcmllcyB0byB0aGluayB3ZSBhcmUgcmVhY3RcblxuLyoqXG4gKiBMZWdhY3kgdmVyc2lvbiBvZiBjcmVhdGVFbGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZVtcInR5cGVcIl19IHR5cGUgVGhlIG5vZGUgbmFtZSBvciBDb21wb25lbnQgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0eXBlKSB7XG5cdHJldHVybiBjcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBlbGVtZW50IGlzIGEgdmFsaWQgKHApcmVhY3Qgbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KGVsZW1lbnQpIHtcblx0cmV0dXJuICEhZWxlbWVudCAmJiBlbGVtZW50LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBlbGVtZW50IGlzIGEgRnJhZ21lbnQgbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRnJhZ21lbnQoZWxlbWVudCkge1xuXHRyZXR1cm4gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC50eXBlID09PSBGcmFnbWVudDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSBNZW1vIG5vZGUuXG4gKiBAcGFyYW0geyp9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc01lbW8oZWxlbWVudCkge1xuXHRyZXR1cm4gKFxuXHRcdCEhZWxlbWVudCAmJlxuXHRcdCEhZWxlbWVudC5kaXNwbGF5TmFtZSAmJlxuXHRcdCh0eXBlb2YgZWxlbWVudC5kaXNwbGF5TmFtZSA9PT0gJ3N0cmluZycgfHxcblx0XHRcdGVsZW1lbnQuZGlzcGxheU5hbWUgaW5zdGFuY2VvZiBTdHJpbmcpICYmXG5cdFx0ZWxlbWVudC5kaXNwbGF5TmFtZS5zdGFydHNXaXRoKCdNZW1vKCcpXG5cdCk7XG59XG5cbi8qKlxuICogV3JhcCBgY2xvbmVFbGVtZW50YCB0byBhYm9ydCBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgbm90IGEgdmFsaWQgZWxlbWVudCBhbmQgYXBwbHlcbiAqIGFsbCB2bm9kZSBub3JtYWxpemF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IGVsZW1lbnQgVGhlIHZub2RlIHRvIGNsb25lXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgUHJvcHMgdG8gYWRkIHdoZW4gY2xvbmluZ1xuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnRDaGlsZHJlbj59IHJlc3QgT3B0aW9uYWwgY29tcG9uZW50IGNoaWxkcmVuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50KSB7XG5cdGlmICghaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuXHRyZXR1cm4gcHJlYWN0Q2xvbmVFbGVtZW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGEgY29tcG9uZW50IHRyZWUgZnJvbSB0aGUgRE9NLCBpbmNsdWRpbmcgc3RhdGUgYW5kIGV2ZW50IGhhbmRsZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBjb250YWluZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuXHRpZiAoY29udGFpbmVyLl9jaGlsZHJlbikge1xuXHRcdHByZWFjdFJlbmRlcihudWxsLCBjb250YWluZXIpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1hdGNoaW5nIERPTSBub2RlIGZvciBhIGNvbXBvbmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnQgfCBudWxsfVxuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnQpIHtcblx0cmV0dXJuIChcblx0XHQoY29tcG9uZW50ICYmXG5cdFx0XHQoY29tcG9uZW50LmJhc2UgfHwgKGNvbXBvbmVudC5ub2RlVHlwZSA9PT0gMSAmJiBjb21wb25lbnQpKSkgfHxcblx0XHRudWxsXG5cdCk7XG59XG5cbi8qKlxuICogRGVwcmVjYXRlZCB3YXkgdG8gY29udHJvbCBiYXRjaGVkIHJlbmRlcmluZyBpbnNpZGUgdGhlIHJlY29uY2lsZXIsIGJ1dCB3ZVxuICogYWxyZWFkeSBzY2hlZHVsZSBpbiBiYXRjaGVzIGluc2lkZSBvdXIgcmVuZGVyaW5nIGNvZGVcbiAqIEB0ZW1wbGF0ZSBBcmdcbiAqIEBwYXJhbSB7KGFyZzogQXJnKSA9PiB2b2lkfSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIHRoZSB1cGRhdGVkXG4gKiBAcGFyYW0ge0FyZ30gW2FyZ10gT3B0aW9uYWwgYXJndW1lbnQgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFja1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5jb25zdCB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IChjYWxsYmFjaywgYXJnKSA9PiBjYWxsYmFjayhhcmcpO1xuXG4vKipcbiAqIEluIFJlYWN0LCBgZmx1c2hTeW5jYCBmbHVzaGVzIHRoZSBlbnRpcmUgdHJlZSBhbmQgZm9yY2VzIGEgcmVyZW5kZXIuIEl0J3NcbiAqIGltcGxtZW50ZWQgaGVyZSBhcyBhIG5vLW9wLlxuICogQHRlbXBsYXRlIEFyZ1xuICogQHRlbXBsYXRlIFJlc3VsdFxuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IFJlc3VsdH0gY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBydW5zIGJlZm9yZSB0aGUgZmx1c2hcbiAqIEBwYXJhbSB7QXJnfSBbYXJnXSBPcHRpb25hbCBhcmd1bWVudCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBmbHVzaFN5bmMgPSAoY2FsbGJhY2ssIGFyZykgPT4gY2FsbGJhY2soYXJnKTtcblxuLyoqXG4gKiBTdHJpY3QgTW9kZSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gUHJlYWN0LCBzbyB3ZSBwcm92aWRlIGEgc3RhbmQtaW4gZm9yIGl0XG4gKiB0aGF0IGp1c3QgcmVuZGVycyBpdHMgY2hpbGRyZW4gd2l0aG91dCBpbXBvc2luZyBhbnkgcmVzdHJpY3Rpb25zLlxuICovXG5jb25zdCBTdHJpY3RNb2RlID0gRnJhZ21lbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oY2IpIHtcblx0Y2IoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZURlZmVycmVkVmFsdWUodmFsKSB7XG5cdHJldHVybiB2YWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUcmFuc2l0aW9uKCkge1xuXHRyZXR1cm4gW2ZhbHNlLCBzdGFydFRyYW5zaXRpb25dO1xufVxuXG4vLyBUT0RPOiBpbiB0aGVvcnkgdGhpcyBzaG91bGQgYmUgZG9uZSBhZnRlciBhIFZOb2RlIGlzIGRpZmZlZCBhcyB3ZSB3YW50IHRvIGluc2VydFxuLy8gc3R5bGVzLy4uLiBiZWZvcmUgaXQgYXR0YWNoZXNcbmV4cG9ydCBjb25zdCB1c2VJbnNlcnRpb25FZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5cbi8vIGNvbXBhdCB0byByZWFjdC1pc1xuZXhwb3J0IGNvbnN0IGlzRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuXG4vKipcbiAqIFRoaXMgaXMgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYWluL3BhY2thZ2VzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NyYy91c2VTeW5jRXh0ZXJuYWxTdG9yZVNoaW1DbGllbnQuanMjTDg0XG4gKiBvbiBhIGhpZ2ggbGV2ZWwgdGhpcyBjdXRzIG91dCB0aGUgd2FybmluZ3MsIC4uLiBhbmQgYXR0ZW1wdHMgYSBzbWFsbGVyIGltcGxlbWVudGF0aW9uXG4gKiBAdHlwZWRlZiB7eyBfdmFsdWU6IGFueTsgX2dldFNuYXBzaG90OiAoKSA9PiBhbnkgfX0gU3RvcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpIHtcblx0Y29uc3QgdmFsdWUgPSBnZXRTbmFwc2hvdCgpO1xuXG5cdC8qKlxuXHQgKiBAdHlwZWRlZiB7eyBfaW5zdGFuY2U6IFN0b3JlIH19IFN0b3JlUmVmXG5cdCAqIEB0eXBlIHtbU3RvcmVSZWYsIChzdG9yZTogU3RvcmVSZWYpID0+IHZvaWRdfVxuXHQgKi9cblx0Y29uc3QgW3sgX2luc3RhbmNlIH0sIGZvcmNlVXBkYXRlXSA9IHVzZVN0YXRlKHtcblx0XHRfaW5zdGFuY2U6IHsgX3ZhbHVlOiB2YWx1ZSwgX2dldFNuYXBzaG90OiBnZXRTbmFwc2hvdCB9XG5cdH0pO1xuXG5cdHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG5cdFx0X2luc3RhbmNlLl92YWx1ZSA9IHZhbHVlO1xuXHRcdF9pbnN0YW5jZS5fZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDtcblxuXHRcdGlmIChkaWRTbmFwc2hvdENoYW5nZShfaW5zdGFuY2UpKSB7XG5cdFx0XHRmb3JjZVVwZGF0ZSh7IF9pbnN0YW5jZSB9KTtcblx0XHR9XG5cdH0sIFtzdWJzY3JpYmUsIHZhbHVlLCBnZXRTbmFwc2hvdF0pO1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGRpZFNuYXBzaG90Q2hhbmdlKF9pbnN0YW5jZSkpIHtcblx0XHRcdGZvcmNlVXBkYXRlKHsgX2luc3RhbmNlIH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKGRpZFNuYXBzaG90Q2hhbmdlKF9pbnN0YW5jZSkpIHtcblx0XHRcdFx0Zm9yY2VVcGRhdGUoeyBfaW5zdGFuY2UgfSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sIFtzdWJzY3JpYmVdKTtcblxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKiBAdHlwZSB7KGluc3Q6IFN0b3JlKSA9PiBib29sZWFufSAqL1xuZnVuY3Rpb24gZGlkU25hcHNob3RDaGFuZ2UoaW5zdCkge1xuXHRjb25zdCBsYXRlc3RHZXRTbmFwc2hvdCA9IGluc3QuX2dldFNuYXBzaG90O1xuXHRjb25zdCBwcmV2VmFsdWUgPSBpbnN0Ll92YWx1ZTtcblx0dHJ5IHtcblx0XHRjb25zdCBuZXh0VmFsdWUgPSBsYXRlc3RHZXRTbmFwc2hvdCgpO1xuXHRcdHJldHVybiAhaXMocHJldlZhbHVlLCBuZXh0VmFsdWUpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmV4cG9ydCAqIGZyb20gJ3ByZWFjdC9ob29rcyc7XG5leHBvcnQge1xuXHR2ZXJzaW9uLFxuXHRDaGlsZHJlbixcblx0cmVuZGVyLFxuXHRoeWRyYXRlLFxuXHR1bm1vdW50Q29tcG9uZW50QXROb2RlLFxuXHRjcmVhdGVQb3J0YWwsXG5cdGNyZWF0ZUVsZW1lbnQsXG5cdGNyZWF0ZUNvbnRleHQsXG5cdGNyZWF0ZUZhY3RvcnksXG5cdGNsb25lRWxlbWVudCxcblx0Y3JlYXRlUmVmLFxuXHRGcmFnbWVudCxcblx0aXNWYWxpZEVsZW1lbnQsXG5cdGlzRnJhZ21lbnQsXG5cdGlzTWVtbyxcblx0ZmluZERPTU5vZGUsXG5cdENvbXBvbmVudCxcblx0UHVyZUNvbXBvbmVudCxcblx0bWVtbyxcblx0Zm9yd2FyZFJlZixcblx0Zmx1c2hTeW5jLFxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5cdHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLFxuXHRTdHJpY3RNb2RlLFxuXHRTdXNwZW5zZSxcblx0U3VzcGVuc2VMaXN0LFxuXHRsYXp5LFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufTtcblxuLy8gUmVhY3QgY29waWVzIHRoZSBuYW1lZCBleHBvcnRzIHRvIHRoZSBkZWZhdWx0IG9uZS5cbmV4cG9ydCBkZWZhdWx0IHtcblx0dXNlU3RhdGUsXG5cdHVzZUlkLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUxheW91dEVmZmVjdCxcblx0dXNlSW5zZXJ0aW9uRWZmZWN0LFxuXHR1c2VUcmFuc2l0aW9uLFxuXHR1c2VEZWZlcnJlZFZhbHVlLFxuXHR1c2VTeW5jRXh0ZXJuYWxTdG9yZSxcblx0c3RhcnRUcmFuc2l0aW9uLFxuXHR1c2VSZWYsXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUsXG5cdHVzZU1lbW8sXG5cdHVzZUNhbGxiYWNrLFxuXHR1c2VDb250ZXh0LFxuXHR1c2VEZWJ1Z1ZhbHVlLFxuXHR2ZXJzaW9uLFxuXHRDaGlsZHJlbixcblx0cmVuZGVyLFxuXHRoeWRyYXRlLFxuXHR1bm1vdW50Q29tcG9uZW50QXROb2RlLFxuXHRjcmVhdGVQb3J0YWwsXG5cdGNyZWF0ZUVsZW1lbnQsXG5cdGNyZWF0ZUNvbnRleHQsXG5cdGNyZWF0ZUZhY3RvcnksXG5cdGNsb25lRWxlbWVudCxcblx0Y3JlYXRlUmVmLFxuXHRGcmFnbWVudCxcblx0aXNWYWxpZEVsZW1lbnQsXG5cdGlzRWxlbWVudCxcblx0aXNGcmFnbWVudCxcblx0aXNNZW1vLFxuXHRmaW5kRE9NTm9kZSxcblx0Q29tcG9uZW50LFxuXHRQdXJlQ29tcG9uZW50LFxuXHRtZW1vLFxuXHRmb3J3YXJkUmVmLFxuXHRmbHVzaFN5bmMsXG5cdHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLFxuXHRTdHJpY3RNb2RlLFxuXHRTdXNwZW5zZSxcblx0U3VzcGVuc2VMaXN0LFxuXHRsYXp5LFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiAhMFxufSk7XG5cbnZhciByZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSwgaW5kZXggPSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBkb2N1bWVudCA/IHJlYWN0LnVzZUxheW91dEVmZmVjdCA6IHJlYWN0LnVzZUVmZmVjdDtcblxuZXhwb3J0cy5kZWZhdWx0ID0gaW5kZXg7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgaW5kZXggPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gcmVhY3QudXNlTGF5b3V0RWZmZWN0IDogcmVhY3QudXNlRWZmZWN0O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBpbmRleDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmNqcy5wcm9kLmpzXCIpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0LmNqcy5kZXYuanNcIik7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBjYWNoZSA9IG51bGw7XG4gICAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgICAgIHZhciBuZXdBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBuZXdBcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhY2hlICYmIGNhY2hlLmxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgY2FjaGUubGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUubGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWNoZSA9IHtcbiAgICAgICAgICAgIGxhc3RSZXN1bHQ6IGxhc3RSZXN1bHQsXG4gICAgICAgICAgICBsYXN0QXJnczogbmV3QXJncyxcbiAgICAgICAgICAgIGxhc3RUaGlzOiB0aGlzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG4gICAgbWVtb2l6ZWQuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgY2FjaGUgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVPbmU7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4vZGVmaW5lUHJvcGVydHkuanNcIik7XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHtcbiAgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pO1xuICB9XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkge1xuICBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykge1xuICAgIHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTtcbiAgICByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RTcHJlYWQyLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKGUuaW5jbHVkZXMobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSA9IHJlcXVpcmUoXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIik7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBzLmxlbmd0aDsgcisrKSBvID0gc1tyXSwgdC5pbmNsdWRlcyhvKSB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gclt0XTtcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7XG4gIGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogdCxcbiAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9XG4gIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZSAmJiBzZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX2dldFByb3RvdHlwZU9mKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gIH0gY2F0Y2ggKHQpIHt9XG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiKTtcbnZhciBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSByZXF1aXJlKFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIik7XG52YXIgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiA9IHJlcXVpcmUoXCIuL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanNcIik7XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIodCkge1xuICB2YXIgciA9IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlLFxuICAgICAgbyA9IGdldFByb3RvdHlwZU9mKHQpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgcyA9IGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgZSA9IFJlZmxlY3QuY29uc3RydWN0KG8sIGFyZ3VtZW50cywgcyk7XG4gICAgfSBlbHNlIGUgPSBvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgZSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVTdXBlciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkocik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHtcbiAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXkocikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgImZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoZSwgdCkge1xuICByZXR1cm4gdCB8fCAodCA9IGUuc2xpY2UoMCkpLCBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIHtcbiAgICByYXc6IHtcbiAgICAgIHZhbHVlOiBPYmplY3QuZnJlZXplKHQpXG4gICAgfVxuICB9KSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5sZXQgX1dJTkRPVyA9IHt9O1xubGV0IF9ET0NVTUVOVCA9IHt9O1xubGV0IF9NVVRBVElPTl9PQlNFUlZFUiA9IG51bGw7XG5sZXQgX1BFUkZPUk1BTkNFID0ge1xuICBtYXJrOiBub29wLFxuICBtZWFzdXJlOiBub29wXG59O1xuXG50cnkge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIF9XSU5ET1cgPSB3aW5kb3c7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSBfRE9DVU1FTlQgPSBkb2N1bWVudDtcbiAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykgX01VVEFUSU9OX09CU0VSVkVSID0gTXV0YXRpb25PYnNlcnZlcjtcbiAgaWYgKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCcpIF9QRVJGT1JNQU5DRSA9IHBlcmZvcm1hbmNlO1xufSBjYXRjaCAoZSkge31cblxuY29uc3Qge1xuICB1c2VyQWdlbnQgPSAnJ1xufSA9IF9XSU5ET1cubmF2aWdhdG9yIHx8IHt9O1xuY29uc3QgV0lORE9XID0gX1dJTkRPVztcbmNvbnN0IERPQ1VNRU5UID0gX0RPQ1VNRU5UO1xuY29uc3QgTVVUQVRJT05fT0JTRVJWRVIgPSBfTVVUQVRJT05fT0JTRVJWRVI7XG5jb25zdCBQRVJGT1JNQU5DRSA9IF9QRVJGT1JNQU5DRTtcbmNvbnN0IElTX0JST1dTRVIgPSAhIVdJTkRPVy5kb2N1bWVudDtcbmNvbnN0IElTX0RPTSA9ICEhRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50ICYmICEhRE9DVU1FTlQuaGVhZCAmJiB0eXBlb2YgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgRE9DVU1FTlQuY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IElTX0lFID0gfnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgfHwgfnVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG52YXIgYSA9IFwiY2xhc3NpY1wiLFxuICAgIHQgPSBcImR1b3RvbmVcIixcbiAgICByID0gXCJzaGFycFwiLFxuICAgIG8gPSBcInNoYXJwLWR1b3RvbmVcIixcbiAgICBjID0gW2EsIHQsIHIsIG9dO1xuXG52YXIgZXQkMSA9IHtcbiAgY2xhc3NpYzoge1xuICAgIDkwMDogXCJmYXNcIixcbiAgICA0MDA6IFwiZmFyXCIsXG4gICAgbm9ybWFsOiBcImZhclwiLFxuICAgIDMwMDogXCJmYWxcIixcbiAgICAxMDA6IFwiZmF0XCJcbiAgfSxcbiAgc2hhcnA6IHtcbiAgICA5MDA6IFwiZmFzc1wiLFxuICAgIDQwMDogXCJmYXNyXCIsXG4gICAgMzAwOiBcImZhc2xcIixcbiAgICAxMDA6IFwiZmFzdFwiXG4gIH0sXG4gIFwic2hhcnAtZHVvdG9uZVwiOiB7XG4gICAgOTAwOiBcImZhc2RzXCJcbiAgfVxufTtcbnZhciBidCA9IHtcbiAga2l0OiB7XG4gICAgZmFrOiBcImtpdFwiLFxuICAgIFwiZmEta2l0XCI6IFwia2l0XCJcbiAgfSxcbiAgXCJraXQtZHVvdG9uZVwiOiB7XG4gICAgZmFrZDogXCJraXQtZHVvdG9uZVwiLFxuICAgIFwiZmEta2l0LWR1b3RvbmVcIjogXCJraXQtZHVvdG9uZVwiXG4gIH1cbn0sXG4gICAgQ3QgPSBbXCJraXRcIl07XG52YXIgRHQgPSAvZmEoc3xyfGx8dHxkfGJ8a3xrZHxzc3xzcnxzbHxzdHxzZHMpP1tcXC1cXCBdLyxcbiAgICBLdCA9IC9Gb250ID9Bd2Vzb21lID8oWzU2IF0qKShTb2xpZHxSZWd1bGFyfExpZ2h0fFRoaW58RHVvdG9uZXxCcmFuZHN8RnJlZXxQcm98U2hhcnAgRHVvdG9uZXxTaGFycHxLaXQpPy4qL2k7XG52YXIgYW8gPSB7XG4gIFwiRm9udCBBd2Vzb21lIDUgRnJlZVwiOiB7XG4gICAgOTAwOiBcImZhc1wiLFxuICAgIDQwMDogXCJmYXJcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA1IFByb1wiOiB7XG4gICAgOTAwOiBcImZhc1wiLFxuICAgIDQwMDogXCJmYXJcIixcbiAgICBub3JtYWw6IFwiZmFyXCIsXG4gICAgMzAwOiBcImZhbFwiXG4gIH0sXG4gIFwiRm9udCBBd2Vzb21lIDUgQnJhbmRzXCI6IHtcbiAgICA0MDA6IFwiZmFiXCIsXG4gICAgbm9ybWFsOiBcImZhYlwiXG4gIH0sXG4gIFwiRm9udCBBd2Vzb21lIDUgRHVvdG9uZVwiOiB7XG4gICAgOTAwOiBcImZhZFwiXG4gIH1cbn07XG52YXIgZW8gPSB7XG4gIFwiRm9udCBBd2Vzb21lIDYgRnJlZVwiOiB7XG4gICAgOTAwOiBcImZhc1wiLFxuICAgIDQwMDogXCJmYXJcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA2IFByb1wiOiB7XG4gICAgOTAwOiBcImZhc1wiLFxuICAgIDQwMDogXCJmYXJcIixcbiAgICBub3JtYWw6IFwiZmFyXCIsXG4gICAgMzAwOiBcImZhbFwiLFxuICAgIDEwMDogXCJmYXRcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA2IEJyYW5kc1wiOiB7XG4gICAgNDAwOiBcImZhYlwiLFxuICAgIG5vcm1hbDogXCJmYWJcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA2IER1b3RvbmVcIjoge1xuICAgIDkwMDogXCJmYWRcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSA2IFNoYXJwXCI6IHtcbiAgICA5MDA6IFwiZmFzc1wiLFxuICAgIDQwMDogXCJmYXNyXCIsXG4gICAgbm9ybWFsOiBcImZhc3JcIixcbiAgICAzMDA6IFwiZmFzbFwiLFxuICAgIDEwMDogXCJmYXN0XCJcbiAgfSxcbiAgXCJGb250IEF3ZXNvbWUgNiBTaGFycCBEdW90b25lXCI6IHtcbiAgICA5MDA6IFwiZmFzZHNcIlxuICB9XG59LFxuICAgIGxvID0ge1xuICBjbGFzc2ljOiB7XG4gICAgXCJmYS1icmFuZHNcIjogXCJmYWJcIixcbiAgICBcImZhLWR1b3RvbmVcIjogXCJmYWRcIixcbiAgICBcImZhLWxpZ2h0XCI6IFwiZmFsXCIsXG4gICAgXCJmYS1yZWd1bGFyXCI6IFwiZmFyXCIsXG4gICAgXCJmYS1zb2xpZFwiOiBcImZhc1wiLFxuICAgIFwiZmEtdGhpblwiOiBcImZhdFwiXG4gIH0sXG4gIHNoYXJwOiB7XG4gICAgXCJmYS1zb2xpZFwiOiBcImZhc3NcIixcbiAgICBcImZhLXJlZ3VsYXJcIjogXCJmYXNyXCIsXG4gICAgXCJmYS1saWdodFwiOiBcImZhc2xcIixcbiAgICBcImZhLXRoaW5cIjogXCJmYXN0XCJcbiAgfSxcbiAgXCJzaGFycC1kdW90b25lXCI6IHtcbiAgICBcImZhLXNvbGlkXCI6IFwiZmFzZHNcIlxuICB9XG59LFxuICAgIHkgPSB7XG4gIGNsYXNzaWM6IFtcImZhc1wiLCBcImZhclwiLCBcImZhbFwiLCBcImZhdFwiXSxcbiAgc2hhcnA6IFtcImZhc3NcIiwgXCJmYXNyXCIsIFwiZmFzbFwiLCBcImZhc3RcIl0sXG4gIFwic2hhcnAtZHVvdG9uZVwiOiBbXCJmYXNkc1wiXVxufSxcbiAgICBubyA9IHtcbiAgY2xhc3NpYzoge1xuICAgIGZhYjogXCJmYS1icmFuZHNcIixcbiAgICBmYWQ6IFwiZmEtZHVvdG9uZVwiLFxuICAgIGZhbDogXCJmYS1saWdodFwiLFxuICAgIGZhcjogXCJmYS1yZWd1bGFyXCIsXG4gICAgZmFzOiBcImZhLXNvbGlkXCIsXG4gICAgZmF0OiBcImZhLXRoaW5cIlxuICB9LFxuICBzaGFycDoge1xuICAgIGZhc3M6IFwiZmEtc29saWRcIixcbiAgICBmYXNyOiBcImZhLXJlZ3VsYXJcIixcbiAgICBmYXNsOiBcImZhLWxpZ2h0XCIsXG4gICAgZmFzdDogXCJmYS10aGluXCJcbiAgfSxcbiAgXCJzaGFycC1kdW90b25lXCI6IHtcbiAgICBmYXNkczogXCJmYS1zb2xpZFwiXG4gIH1cbn0sXG4gICAgZm8gPSB7XG4gIGNsYXNzaWM6IHtcbiAgICBzb2xpZDogXCJmYXNcIixcbiAgICByZWd1bGFyOiBcImZhclwiLFxuICAgIGxpZ2h0OiBcImZhbFwiLFxuICAgIHRoaW46IFwiZmF0XCIsXG4gICAgZHVvdG9uZTogXCJmYWRcIixcbiAgICBicmFuZHM6IFwiZmFiXCJcbiAgfSxcbiAgc2hhcnA6IHtcbiAgICBzb2xpZDogXCJmYXNzXCIsXG4gICAgcmVndWxhcjogXCJmYXNyXCIsXG4gICAgbGlnaHQ6IFwiZmFzbFwiLFxuICAgIHRoaW46IFwiZmFzdFwiXG4gIH0sXG4gIFwic2hhcnAtZHVvdG9uZVwiOiB7XG4gICAgc29saWQ6IFwiZmFzZHNcIlxuICB9XG59LFxuICAgIGhvID0ge1xuICBjbGFzc2ljOiB7XG4gICAgZmE6IFwic29saWRcIixcbiAgICBmYXM6IFwic29saWRcIixcbiAgICBcImZhLXNvbGlkXCI6IFwic29saWRcIixcbiAgICBmYXI6IFwicmVndWxhclwiLFxuICAgIFwiZmEtcmVndWxhclwiOiBcInJlZ3VsYXJcIixcbiAgICBmYWw6IFwibGlnaHRcIixcbiAgICBcImZhLWxpZ2h0XCI6IFwibGlnaHRcIixcbiAgICBmYXQ6IFwidGhpblwiLFxuICAgIFwiZmEtdGhpblwiOiBcInRoaW5cIixcbiAgICBmYWQ6IFwiZHVvdG9uZVwiLFxuICAgIFwiZmEtZHVvdG9uZVwiOiBcImR1b3RvbmVcIixcbiAgICBmYWI6IFwiYnJhbmRzXCIsXG4gICAgXCJmYS1icmFuZHNcIjogXCJicmFuZHNcIlxuICB9LFxuICBzaGFycDoge1xuICAgIGZhOiBcInNvbGlkXCIsXG4gICAgZmFzczogXCJzb2xpZFwiLFxuICAgIFwiZmEtc29saWRcIjogXCJzb2xpZFwiLFxuICAgIGZhc3I6IFwicmVndWxhclwiLFxuICAgIFwiZmEtcmVndWxhclwiOiBcInJlZ3VsYXJcIixcbiAgICBmYXNsOiBcImxpZ2h0XCIsXG4gICAgXCJmYS1saWdodFwiOiBcImxpZ2h0XCIsXG4gICAgZmFzdDogXCJ0aGluXCIsXG4gICAgXCJmYS10aGluXCI6IFwidGhpblwiXG4gIH0sXG4gIFwic2hhcnAtZHVvdG9uZVwiOiB7XG4gICAgZmE6IFwic29saWRcIixcbiAgICBmYXNkczogXCJzb2xpZFwiLFxuICAgIFwiZmEtc29saWRcIjogXCJzb2xpZFwiXG4gIH1cbn0sXG4gICAgeCQxID0gW1wic29saWRcIiwgXCJyZWd1bGFyXCIsIFwibGlnaHRcIiwgXCJ0aGluXCIsIFwiZHVvdG9uZVwiLCBcImJyYW5kc1wiXSxcbiAgICB1JDEgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdLFxuICAgIG0kMSA9IHUkMS5jb25jYXQoWzExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSksXG4gICAgdCQxID0ge1xuICBHUk9VUDogXCJkdW90b25lLWdyb3VwXCIsXG4gIFNXQVBfT1BBQ0lUWTogXCJzd2FwLW9wYWNpdHlcIixcbiAgUFJJTUFSWTogXCJwcmltYXJ5XCIsXG4gIFNFQ09OREFSWTogXCJzZWNvbmRhcnlcIlxufSxcbiAgICB5byA9IFsuLi5PYmplY3Qua2V5cyh5KSwgLi4ueCQxLCBcIjJ4c1wiLCBcInhzXCIsIFwic21cIiwgXCJsZ1wiLCBcInhsXCIsIFwiMnhsXCIsIFwiYmVhdFwiLCBcImJvcmRlclwiLCBcImZhZGVcIiwgXCJiZWF0LWZhZGVcIiwgXCJib3VuY2VcIiwgXCJmbGlwLWJvdGhcIiwgXCJmbGlwLWhvcml6b250YWxcIiwgXCJmbGlwLXZlcnRpY2FsXCIsIFwiZmxpcFwiLCBcImZ3XCIsIFwiaW52ZXJzZVwiLCBcImxheWVycy1jb3VudGVyXCIsIFwibGF5ZXJzLXRleHRcIiwgXCJsYXllcnNcIiwgXCJsaVwiLCBcInB1bGwtbGVmdFwiLCBcInB1bGwtcmlnaHRcIiwgXCJwdWxzZVwiLCBcInJvdGF0ZS0xODBcIiwgXCJyb3RhdGUtMjcwXCIsIFwicm90YXRlLTkwXCIsIFwicm90YXRlLWJ5XCIsIFwic2hha2VcIiwgXCJzcGluLXB1bHNlXCIsIFwic3Bpbi1yZXZlcnNlXCIsIFwic3BpblwiLCBcInN0YWNrLTF4XCIsIFwic3RhY2stMnhcIiwgXCJzdGFja1wiLCBcInVsXCIsIHQkMS5HUk9VUCwgdCQxLlNXQVBfT1BBQ0lUWSwgdCQxLlBSSU1BUlksIHQkMS5TRUNPTkRBUlldLmNvbmNhdCh1JDEubWFwKG8gPT4gXCJcIi5jb25jYXQobywgXCJ4XCIpKSkuY29uY2F0KG0kMS5tYXAobyA9PiBcInctXCIuY29uY2F0KG8pKSk7XG52YXIgbW8gPSB7XG4gIFwiRm9udCBBd2Vzb21lIEtpdFwiOiB7XG4gICAgNDAwOiBcImZha1wiLFxuICAgIG5vcm1hbDogXCJmYWtcIlxuICB9LFxuICBcIkZvbnQgQXdlc29tZSBLaXQgRHVvdG9uZVwiOiB7XG4gICAgNDAwOiBcImZha2RcIixcbiAgICBub3JtYWw6IFwiZmFrZFwiXG4gIH1cbn0sXG4gICAgSW8gPSB7XG4gIGtpdDoge1xuICAgIFwiZmEta2l0XCI6IFwiZmFrXCJcbiAgfSxcbiAgXCJraXQtZHVvdG9uZVwiOiB7XG4gICAgXCJmYS1raXQtZHVvdG9uZVwiOiBcImZha2RcIlxuICB9XG59LFxuICAgIEZvID0ge1xuICBraXQ6IHtcbiAgICBmYWs6IFwiZmEta2l0XCJcbiAgfSxcbiAgXCJraXQtZHVvdG9uZVwiOiB7XG4gICAgZmFrZDogXCJmYS1raXQtZHVvdG9uZVwiXG4gIH1cbn0sXG4gICAgU28gPSB7XG4gIGtpdDoge1xuICAgIGtpdDogXCJmYWtcIlxuICB9LFxuICBcImtpdC1kdW90b25lXCI6IHtcbiAgICBcImtpdC1kdW90b25lXCI6IFwiZmFrZFwiXG4gIH1cbn07XG5cbmNvbnN0IE5BTUVTUEFDRV9JREVOVElGSUVSID0gJ19fX0ZPTlRfQVdFU09NRV9fXyc7XG5jb25zdCBVTklUU19JTl9HUklEID0gMTY7XG5jb25zdCBERUZBVUxUX0NTU19QUkVGSVggPSAnZmEnO1xuY29uc3QgREVGQVVMVF9SRVBMQUNFTUVOVF9DTEFTUyA9ICdzdmctaW5saW5lLS1mYSc7XG5jb25zdCBEQVRBX0ZBX0kyU1ZHID0gJ2RhdGEtZmEtaTJzdmcnO1xuY29uc3QgREFUQV9GQV9QU0VVRE9fRUxFTUVOVCA9ICdkYXRhLWZhLXBzZXVkby1lbGVtZW50JztcbmNvbnN0IERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORyA9ICdkYXRhLWZhLXBzZXVkby1lbGVtZW50LXBlbmRpbmcnO1xuY29uc3QgREFUQV9QUkVGSVggPSAnZGF0YS1wcmVmaXgnO1xuY29uc3QgREFUQV9JQ09OID0gJ2RhdGEtaWNvbic7XG5jb25zdCBIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MgPSAnZm9udGF3ZXNvbWUtaTJzdmcnO1xuY29uc3QgTVVUQVRJT05fQVBQUk9BQ0hfQVNZTkMgPSAnYXN5bmMnO1xuY29uc3QgVEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMgPSBbJ0hUTUwnLCAnSEVBRCcsICdTVFlMRScsICdTQ1JJUFQnXTtcbmNvbnN0IFBST0RVQ1RJT04gPSAoKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xuICB9IGNhdGNoIChlJCQxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KSgpO1xuY29uc3QgRkFNSUxJRVMgPSBbYSwgciwgb107XG5cbmZ1bmN0aW9uIGZhbWlseVByb3h5KG9iaikge1xuICAvLyBEZWZhdWx0cyB0byB0aGUgY2xhc3NpYyBmYW1pbHkgaWYgZmFtaWx5IGlzIG5vdCBhdmFpbGFibGVcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQgPyB0YXJnZXRbcHJvcF0gOiB0YXJnZXRbYV07XG4gICAgfVxuXG4gIH0pO1xufVxuXG5jb25zdCBfUFJFRklYX1RPX1NUWUxFID0geyAuLi5ob1xufTtcbl9QUkVGSVhfVE9fU1RZTEVbYV0gPSB7IC4uLmhvW2FdLFxuICAuLi5idFsna2l0J10sXG4gIC4uLmJ0WydraXQtZHVvdG9uZSddXG59O1xuY29uc3QgUFJFRklYX1RPX1NUWUxFID0gZmFtaWx5UHJveHkoX1BSRUZJWF9UT19TVFlMRSk7XG5jb25zdCBfU1RZTEVfVE9fUFJFRklYID0geyAuLi5mb1xufTtcbl9TVFlMRV9UT19QUkVGSVhbYV0gPSB7IC4uLl9TVFlMRV9UT19QUkVGSVhbYV0sXG4gIC4uLlNvWydraXQnXSxcbiAgLi4uU29bJ2tpdC1kdW90b25lJ11cbn07XG5jb25zdCBTVFlMRV9UT19QUkVGSVggPSBmYW1pbHlQcm94eShfU1RZTEVfVE9fUFJFRklYKTtcbmNvbnN0IF9QUkVGSVhfVE9fTE9OR19TVFlMRSA9IHsgLi4ubm9cbn07XG5fUFJFRklYX1RPX0xPTkdfU1RZTEVbYV0gPSB7IC4uLl9QUkVGSVhfVE9fTE9OR19TVFlMRVthXSxcbiAgLi4uRm9bJ2tpdCddXG59O1xuY29uc3QgUFJFRklYX1RPX0xPTkdfU1RZTEUgPSBmYW1pbHlQcm94eShfUFJFRklYX1RPX0xPTkdfU1RZTEUpO1xuY29uc3QgX0xPTkdfU1RZTEVfVE9fUFJFRklYID0geyAuLi5sb1xufTtcbl9MT05HX1NUWUxFX1RPX1BSRUZJWFthXSA9IHsgLi4uX0xPTkdfU1RZTEVfVE9fUFJFRklYW2FdLFxuICAuLi5Jb1sna2l0J11cbn07XG5jb25zdCBMT05HX1NUWUxFX1RPX1BSRUZJWCA9IGZhbWlseVByb3h5KF9MT05HX1NUWUxFX1RPX1BSRUZJWCk7XG5jb25zdCBJQ09OX1NFTEVDVElPTl9TWU5UQVhfUEFUVEVSTiA9IER0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5cbmNvbnN0IExBWUVSU19URVhUX0NMQVNTTkFNRSA9ICdmYS1sYXllcnMtdGV4dCc7XG5jb25zdCBGT05UX0ZBTUlMWV9QQVRURVJOID0gS3Q7XG5jb25zdCBfRk9OVF9XRUlHSFRfVE9fUFJFRklYID0geyAuLi5ldCQxXG59O1xuY29uc3QgRk9OVF9XRUlHSFRfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX0ZPTlRfV0VJR0hUX1RPX1BSRUZJWCk7XG5jb25zdCBBVFRSSUJVVEVTX1dBVENIRURfRk9SX01VVEFUSU9OID0gWydjbGFzcycsICdkYXRhLXByZWZpeCcsICdkYXRhLWljb24nLCAnZGF0YS1mYS10cmFuc2Zvcm0nLCAnZGF0YS1mYS1tYXNrJ107XG5jb25zdCBEVU9UT05FX0NMQVNTRVMgPSB0JDE7XG5jb25zdCBwcmVmaXhlcyA9IG5ldyBTZXQoKTtcbk9iamVjdC5rZXlzKFNUWUxFX1RPX1BSRUZJWFthXSkubWFwKHByZWZpeGVzLmFkZC5iaW5kKHByZWZpeGVzKSk7XG5PYmplY3Qua2V5cyhTVFlMRV9UT19QUkVGSVhbcl0pLm1hcChwcmVmaXhlcy5hZGQuYmluZChwcmVmaXhlcykpO1xuT2JqZWN0LmtleXMoU1RZTEVfVE9fUFJFRklYW29dKS5tYXAocHJlZml4ZXMuYWRkLmJpbmQocHJlZml4ZXMpKTtcbmNvbnN0IFJFU0VSVkVEX0NMQVNTRVMgPSBbLi4uQ3QsIC4uLnlvXTtcblxuY29uc3QgaW5pdGlhbCA9IFdJTkRPVy5Gb250QXdlc29tZUNvbmZpZyB8fCB7fTtcblxuZnVuY3Rpb24gZ2V0QXR0ckNvbmZpZyhhdHRyKSB7XG4gIHZhciBlbGVtZW50ID0gRE9DVU1FTlQucXVlcnlTZWxlY3Rvcignc2NyaXB0WycgKyBhdHRyICsgJ10nKTtcblxuICBpZiAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2VyY2UodmFsKSB7XG4gIC8vIEdldHRpbmcgYW4gZW1wdHkgc3RyaW5nIHdpbGwgb2NjdXIgaWYgdGhlIGF0dHJpYnV0ZSBpcyBzZXQgb24gdGhlIEhUTUwgdGFnIGJ1dCB3aXRob3V0IGEgdmFsdWVcbiAgLy8gV2UnbGwgYXNzdW1lIHRoYXQgdGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgaXQgc2hvdWxkIGJlIHRvZ2dsZWQgdG8gdHJ1ZVxuICBpZiAodmFsID09PSAnJykgcmV0dXJuIHRydWU7XG4gIGlmICh2YWwgPT09ICdmYWxzZScpIHJldHVybiBmYWxzZTtcbiAgaWYgKHZhbCA9PT0gJ3RydWUnKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHZhbDtcbn1cblxuaWYgKERPQ1VNRU5UICYmIHR5cGVvZiBET0NVTUVOVC5xdWVyeVNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnN0IGF0dHJzID0gW1snZGF0YS1mYW1pbHktcHJlZml4JywgJ2ZhbWlseVByZWZpeCddLCBbJ2RhdGEtY3NzLXByZWZpeCcsICdjc3NQcmVmaXgnXSwgWydkYXRhLWZhbWlseS1kZWZhdWx0JywgJ2ZhbWlseURlZmF1bHQnXSwgWydkYXRhLXN0eWxlLWRlZmF1bHQnLCAnc3R5bGVEZWZhdWx0J10sIFsnZGF0YS1yZXBsYWNlbWVudC1jbGFzcycsICdyZXBsYWNlbWVudENsYXNzJ10sIFsnZGF0YS1hdXRvLXJlcGxhY2Utc3ZnJywgJ2F1dG9SZXBsYWNlU3ZnJ10sIFsnZGF0YS1hdXRvLWFkZC1jc3MnLCAnYXV0b0FkZENzcyddLCBbJ2RhdGEtYXV0by1hMTF5JywgJ2F1dG9BMTF5J10sIFsnZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzJywgJ3NlYXJjaFBzZXVkb0VsZW1lbnRzJ10sIFsnZGF0YS1vYnNlcnZlLW11dGF0aW9ucycsICdvYnNlcnZlTXV0YXRpb25zJ10sIFsnZGF0YS1tdXRhdGUtYXBwcm9hY2gnLCAnbXV0YXRlQXBwcm9hY2gnXSwgWydkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlJywgJ2tlZXBPcmlnaW5hbFNvdXJjZSddLCBbJ2RhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZScsICdtZWFzdXJlUGVyZm9ybWFuY2UnXSwgWydkYXRhLXNob3ctbWlzc2luZy1pY29ucycsICdzaG93TWlzc2luZ0ljb25zJ11dO1xuICBhdHRycy5mb3JFYWNoKF9yZWYgPT4ge1xuICAgIGxldCBbYXR0ciwga2V5XSA9IF9yZWY7XG4gICAgY29uc3QgdmFsID0gY29lcmNlKGdldEF0dHJDb25maWcoYXR0cikpO1xuXG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaW5pdGlhbFtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IF9kZWZhdWx0ID0ge1xuICBzdHlsZURlZmF1bHQ6ICdzb2xpZCcsXG4gIGZhbWlseURlZmF1bHQ6ICdjbGFzc2ljJyxcbiAgY3NzUHJlZml4OiBERUZBVUxUX0NTU19QUkVGSVgsXG4gIHJlcGxhY2VtZW50Q2xhc3M6IERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MsXG4gIGF1dG9SZXBsYWNlU3ZnOiB0cnVlLFxuICBhdXRvQWRkQ3NzOiB0cnVlLFxuICBhdXRvQTExeTogdHJ1ZSxcbiAgc2VhcmNoUHNldWRvRWxlbWVudHM6IGZhbHNlLFxuICBvYnNlcnZlTXV0YXRpb25zOiB0cnVlLFxuICBtdXRhdGVBcHByb2FjaDogJ2FzeW5jJyxcbiAga2VlcE9yaWdpbmFsU291cmNlOiB0cnVlLFxuICBtZWFzdXJlUGVyZm9ybWFuY2U6IGZhbHNlLFxuICBzaG93TWlzc2luZ0ljb25zOiB0cnVlXG59OyAvLyBmYW1pbHlQcmVmaXggaXMgZGVwcmVjYXRlZCBidXQgd2UgbXVzdCBzdGlsbCBzdXBwb3J0IGl0IGlmIHByZXNlbnRcblxuaWYgKGluaXRpYWwuZmFtaWx5UHJlZml4KSB7XG4gIGluaXRpYWwuY3NzUHJlZml4ID0gaW5pdGlhbC5mYW1pbHlQcmVmaXg7XG59XG5cbmNvbnN0IF9jb25maWcgPSB7IC4uLl9kZWZhdWx0LFxuICAuLi5pbml0aWFsXG59O1xuaWYgKCFfY29uZmlnLmF1dG9SZXBsYWNlU3ZnKSBfY29uZmlnLm9ic2VydmVNdXRhdGlvbnMgPSBmYWxzZTtcbmNvbnN0IGNvbmZpZyA9IHt9O1xuT2JqZWN0LmtleXMoX2RlZmF1bHQpLmZvckVhY2goa2V5ID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbmZpZywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIF9jb25maWdba2V5XSA9IHZhbDtcblxuICAgICAgX29uQ2hhbmdlQ2IuZm9yRWFjaChjYiA9PiBjYihjb25maWcpKTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF9jb25maWdba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7IC8vIGZhbWlseVByZWZpeCBpcyBkZXByZWNhdGVkIGFzIG9mIDYuMi4wIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBpbiA3LjAuMFxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnLCAnZmFtaWx5UHJlZml4Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICBfY29uZmlnLmNzc1ByZWZpeCA9IHZhbDtcblxuICAgIF9vbkNoYW5nZUNiLmZvckVhY2goY2IgPT4gY2IoY29uZmlnKSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY29uZmlnLmNzc1ByZWZpeDtcbiAgfVxufSk7XG5XSU5ET1cuRm9udEF3ZXNvbWVDb25maWcgPSBjb25maWc7XG5jb25zdCBfb25DaGFuZ2VDYiA9IFtdO1xuZnVuY3Rpb24gb25DaGFuZ2UoY2IpIHtcbiAgX29uQ2hhbmdlQ2IucHVzaChjYik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBfb25DaGFuZ2VDYi5zcGxpY2UoX29uQ2hhbmdlQ2IuaW5kZXhPZihjYiksIDEpO1xuICB9O1xufVxuXG5jb25zdCBkJDIgPSBVTklUU19JTl9HUklEO1xuY29uc3QgbWVhbmluZ2xlc3NUcmFuc2Zvcm0gPSB7XG4gIHNpemU6IDE2LFxuICB4OiAwLFxuICB5OiAwLFxuICByb3RhdGU6IDAsXG4gIGZsaXBYOiBmYWxzZSxcbiAgZmxpcFk6IGZhbHNlXG59O1xuZnVuY3Rpb24gaW5zZXJ0Q3NzKGNzcykge1xuICBpZiAoIWNzcyB8fCAhSVNfRE9NKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3R5bGUgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgc3R5bGUuaW5uZXJIVE1MID0gY3NzO1xuICBjb25zdCBoZWFkQ2hpbGRyZW4gPSBET0NVTUVOVC5oZWFkLmNoaWxkTm9kZXM7XG4gIGxldCBiZWZvcmVDaGlsZCA9IG51bGw7XG5cbiAgZm9yIChsZXQgaSA9IGhlYWRDaGlsZHJlbi5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gaGVhZENoaWxkcmVuW2ldO1xuICAgIGNvbnN0IHRhZ05hbWUgPSAoY2hpbGQudGFnTmFtZSB8fCAnJykudG9VcHBlckNhc2UoKTtcblxuICAgIGlmIChbJ1NUWUxFJywgJ0xJTksnXS5pbmRleE9mKHRhZ05hbWUpID4gLTEpIHtcbiAgICAgIGJlZm9yZUNoaWxkID0gY2hpbGQ7XG4gICAgfVxuICB9XG5cbiAgRE9DVU1FTlQuaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGJlZm9yZUNoaWxkKTtcbiAgcmV0dXJuIGNzcztcbn1cbmNvbnN0IGlkUG9vbCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG5mdW5jdGlvbiBuZXh0VW5pcXVlSWQoKSB7XG4gIGxldCBzaXplID0gMTI7XG4gIGxldCBpZCA9ICcnO1xuXG4gIHdoaWxlIChzaXplLS0gPiAwKSB7XG4gICAgaWQgKz0gaWRQb29sW01hdGgucmFuZG9tKCkgKiA2MiB8IDBdO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufVxuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgY29uc3QgYXJyYXkgPSBbXTtcblxuICBmb3IgKGxldCBpID0gKG9iaiB8fCBbXSkubGVuZ3RoID4+PiAwOyBpLS07KSB7XG4gICAgYXJyYXlbaV0gPSBvYmpbaV07XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG5mdW5jdGlvbiBjbGFzc0FycmF5KG5vZGUpIHtcbiAgaWYgKG5vZGUuY2xhc3NMaXN0KSB7XG4gICAgcmV0dXJuIHRvQXJyYXkobm9kZS5jbGFzc0xpc3QpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpLnNwbGl0KCcgJykuZmlsdGVyKGkgPT4gaSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGh0bWxFc2NhcGUoc3RyKSB7XG4gIHJldHVybiBcIlwiLmNvbmNhdChzdHIpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpLnJlcGxhY2UoLycvZywgJyYjMzk7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbn1cbmZ1bmN0aW9uIGpvaW5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMgfHwge30pLnJlZHVjZSgoYWNjLCBhdHRyaWJ1dGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIGFjYyArIFwiXCIuY29uY2F0KGF0dHJpYnV0ZU5hbWUsIFwiPVxcXCJcIikuY29uY2F0KGh0bWxFc2NhcGUoYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSksIFwiXFxcIiBcIik7XG4gIH0sICcnKS50cmltKCk7XG59XG5mdW5jdGlvbiBqb2luU3R5bGVzKHN0eWxlcykge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGVzIHx8IHt9KS5yZWR1Y2UoKGFjYywgc3R5bGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIGFjYyArIFwiXCIuY29uY2F0KHN0eWxlTmFtZSwgXCI6IFwiKS5jb25jYXQoc3R5bGVzW3N0eWxlTmFtZV0udHJpbSgpLCBcIjtcIik7XG4gIH0sICcnKTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIHRyYW5zZm9ybS5zaXplICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5zaXplIHx8IHRyYW5zZm9ybS54ICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS54IHx8IHRyYW5zZm9ybS55ICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS55IHx8IHRyYW5zZm9ybS5yb3RhdGUgIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnJvdGF0ZSB8fCB0cmFuc2Zvcm0uZmxpcFggfHwgdHJhbnNmb3JtLmZsaXBZO1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtRm9yU3ZnKF9yZWYpIHtcbiAgbGV0IHtcbiAgICB0cmFuc2Zvcm0sXG4gICAgY29udGFpbmVyV2lkdGgsXG4gICAgaWNvbldpZHRoXG4gIH0gPSBfcmVmO1xuICBjb25zdCBvdXRlciA9IHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKFwiLmNvbmNhdChjb250YWluZXJXaWR0aCAvIDIsIFwiIDI1NilcIilcbiAgfTtcbiAgY29uc3QgaW5uZXJUcmFuc2xhdGUgPSBcInRyYW5zbGF0ZShcIi5jb25jYXQodHJhbnNmb3JtLnggKiAzMiwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnkgKiAzMiwgXCIpIFwiKTtcbiAgY29uc3QgaW5uZXJTY2FsZSA9IFwic2NhbGUoXCIuY29uY2F0KHRyYW5zZm9ybS5zaXplIC8gMTYgKiAodHJhbnNmb3JtLmZsaXBYID8gLTEgOiAxKSwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0uZmxpcFkgPyAtMSA6IDEpLCBcIikgXCIpO1xuICBjb25zdCBpbm5lclJvdGF0ZSA9IFwicm90YXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ucm90YXRlLCBcIiAwIDApXCIpO1xuICBjb25zdCBpbm5lciA9IHtcbiAgICB0cmFuc2Zvcm06IFwiXCIuY29uY2F0KGlubmVyVHJhbnNsYXRlLCBcIiBcIikuY29uY2F0KGlubmVyU2NhbGUsIFwiIFwiKS5jb25jYXQoaW5uZXJSb3RhdGUpXG4gIH07XG4gIGNvbnN0IHBhdGggPSB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShcIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCBcIiAtMjU2KVwiKVxuICB9O1xuICByZXR1cm4ge1xuICAgIG91dGVyLFxuICAgIGlubmVyLFxuICAgIHBhdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUZvckNzcyhfcmVmMikge1xuICBsZXQge1xuICAgIHRyYW5zZm9ybSxcbiAgICB3aWR0aCA9IFVOSVRTX0lOX0dSSUQsXG4gICAgaGVpZ2h0ID0gVU5JVFNfSU5fR1JJRCxcbiAgICBzdGFydENlbnRlcmVkID0gZmFsc2VcbiAgfSA9IF9yZWYyO1xuICBsZXQgdmFsID0gJyc7XG5cbiAgaWYgKHN0YXJ0Q2VudGVyZWQgJiYgSVNfSUUpIHtcbiAgICB2YWwgKz0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54IC8gZCQyIC0gd2lkdGggLyAyLCBcImVtLCBcIikuY29uY2F0KHRyYW5zZm9ybS55IC8gZCQyIC0gaGVpZ2h0IC8gMiwgXCJlbSkgXCIpO1xuICB9IGVsc2UgaWYgKHN0YXJ0Q2VudGVyZWQpIHtcbiAgICB2YWwgKz0gXCJ0cmFuc2xhdGUoY2FsYygtNTAlICsgXCIuY29uY2F0KHRyYW5zZm9ybS54IC8gZCQyLCBcImVtKSwgY2FsYygtNTAlICsgXCIpLmNvbmNhdCh0cmFuc2Zvcm0ueSAvIGQkMiwgXCJlbSkpIFwiKTtcbiAgfSBlbHNlIHtcbiAgICB2YWwgKz0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54IC8gZCQyLCBcImVtLCBcIikuY29uY2F0KHRyYW5zZm9ybS55IC8gZCQyLCBcImVtKSBcIik7XG4gIH1cblxuICB2YWwgKz0gXCJzY2FsZShcIi5jb25jYXQodHJhbnNmb3JtLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtLmZsaXBYID8gLTEgOiAxKSwgXCIsIFwiKS5jb25jYXQodHJhbnNmb3JtLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtLmZsaXBZID8gLTEgOiAxKSwgXCIpIFwiKTtcbiAgdmFsICs9IFwicm90YXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ucm90YXRlLCBcImRlZykgXCIpO1xuICByZXR1cm4gdmFsO1xufVxuXG52YXIgYmFzZVN0eWxlcyA9IFwiOnJvb3QsIDpob3N0IHtcXG4gIC0tZmEtZm9udC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgRnJlZVxcXCI7XFxuICAtLWZhLWZvbnQtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgRnJlZVxcXCI7XFxuICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFByb1xcXCI7XFxuICAtLWZhLWZvbnQtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgUHJvXFxcIjtcXG4gIC0tZmEtZm9udC1kdW90b25lOiBub3JtYWwgOTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBEdW90b25lXFxcIjtcXG4gIC0tZmEtZm9udC1icmFuZHM6IG5vcm1hbCA0MDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IEJyYW5kc1xcXCI7XFxuICAtLWZhLWZvbnQtc2hhcnAtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFNoYXJwXFxcIjtcXG4gIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBTaGFycFxcXCI7XFxuICAtLWZhLWZvbnQtc2hhcnAtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgXFxcIkZvbnQgQXdlc29tZSA2IFNoYXJwXFxcIjtcXG4gIC0tZmEtZm9udC1zaGFycC10aGluOiBub3JtYWwgMTAwIDFlbS8xIFxcXCJGb250IEF3ZXNvbWUgNiBTaGFycFxcXCI7XFxuICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSBcXFwiRm9udCBBd2Vzb21lIDYgU2hhcnAgRHVvdG9uZVxcXCI7XFxufVxcblxcbnN2Zzpub3QoOnJvb3QpLnN2Zy1pbmxpbmUtLWZhLCBzdmc6bm90KDpob3N0KS5zdmctaW5saW5lLS1mYSB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbn1cXG5cXG4uc3ZnLWlubGluZS0tZmEge1xcbiAgZGlzcGxheTogdmFyKC0tZmEtZGlzcGxheSwgaW5saW5lLWJsb2NrKTtcXG4gIGhlaWdodDogMWVtO1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS0yeHMge1xcbiAgdmVydGljYWwtYWxpZ246IDAuMWVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEteHMge1xcbiAgdmVydGljYWwtYWxpZ246IDBlbTtcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzA1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS1sZyB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEteGwge1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS0yeGwge1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTtcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHtcXG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcXG4gIHRvcDogMC4yNWVtO1xcbn1cXG4uc3ZnLWlubGluZS0tZmEuZmEtZncge1xcbiAgd2lkdGg6IHZhcigtLWZhLWZ3LXdpZHRoLCAxLjI1ZW0pO1xcbn1cXG5cXG4uZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYSB7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxufVxcblxcbi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmZhLWxheWVycyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBoZWlnaHQ6IDFlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcXG4gIHdpZHRoOiAxZW07XFxufVxcbi5mYS1sYXllcnMgc3ZnLnN2Zy1pbmxpbmUtLWZhIHtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5mYS1sYXllcnMtdGV4dCB7XFxuICBsZWZ0OiA1MCU7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcXG59XFxuXFxuLmZhLWxheWVycy1jb3VudGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZhLWNvdW50ZXItYmFja2dyb3VuZC1jb2xvciwgI2ZmMjUzYSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1jb3VudGVyLWJvcmRlci1yYWRpdXMsIDFlbSk7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZhLWNvdW50ZXItbGluZS1oZWlnaHQsIDEpO1xcbiAgbWF4LXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1heC13aWR0aCwgNWVtKTtcXG4gIG1pbi13aWR0aDogdmFyKC0tZmEtY291bnRlci1taW4td2lkdGgsIDEuNWVtKTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwYWRkaW5nOiB2YXIoLS1mYS1jb3VudGVyLXBhZGRpbmcsIDAuMjVlbSAwLjVlbSk7XFxuICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcXG59XFxuXFxuLmZhLWxheWVycy1ib3R0b20tcmlnaHQge1xcbiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApO1xcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcXG4gIHRvcDogYXV0bztcXG4gIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7XFxufVxcblxcbi5mYS1sYXllcnMtYm90dG9tLWxlZnQge1xcbiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApO1xcbiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7XFxuICByaWdodDogYXV0bztcXG4gIHRvcDogYXV0bztcXG4gIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDtcXG59XFxuXFxuLmZhLWxheWVycy10b3AtcmlnaHQge1xcbiAgdG9wOiB2YXIoLS1mYS10b3AsIDApO1xcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcXG4gIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7XFxufVxcblxcbi5mYS1sYXllcnMtdG9wLWxlZnQge1xcbiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7XFxuICByaWdodDogYXV0bztcXG4gIHRvcDogdmFyKC0tZmEtdG9wLCAwKTtcXG4gIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDtcXG59XFxuXFxuLmZhLTF4IHtcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbn1cXG5cXG4uZmEtMngge1xcbiAgZm9udC1zaXplOiAyZW07XFxufVxcblxcbi5mYS0zeCB7XFxuICBmb250LXNpemU6IDNlbTtcXG59XFxuXFxuLmZhLTR4IHtcXG4gIGZvbnQtc2l6ZTogNGVtO1xcbn1cXG5cXG4uZmEtNXgge1xcbiAgZm9udC1zaXplOiA1ZW07XFxufVxcblxcbi5mYS02eCB7XFxuICBmb250LXNpemU6IDZlbTtcXG59XFxuXFxuLmZhLTd4IHtcXG4gIGZvbnQtc2l6ZTogN2VtO1xcbn1cXG5cXG4uZmEtOHgge1xcbiAgZm9udC1zaXplOiA4ZW07XFxufVxcblxcbi5mYS05eCB7XFxuICBmb250LXNpemU6IDllbTtcXG59XFxuXFxuLmZhLTEweCB7XFxuICBmb250LXNpemU6IDEwZW07XFxufVxcblxcbi5mYS0yeHMge1xcbiAgZm9udC1zaXplOiAwLjYyNWVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuMWVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMjI1ZW07XFxufVxcblxcbi5mYS14cyB7XFxuICBmb250LXNpemU6IDAuNzVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjA4MzMzMzMzMzdlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAwLjEyNWVtO1xcbn1cXG5cXG4uZmEtc20ge1xcbiAgZm9udC1zaXplOiAwLjg3NWVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuMDcxNDI4NTcxOGVtO1xcbiAgdmVydGljYWwtYWxpZ246IDAuMDUzNTcxNDI5NWVtO1xcbn1cXG5cXG4uZmEtbGcge1xcbiAgZm9udC1zaXplOiAxLjI1ZW07XFxuICBsaW5lLWhlaWdodDogMC4wNWVtO1xcbiAgdmVydGljYWwtYWxpZ246IC0wLjA3NWVtO1xcbn1cXG5cXG4uZmEteGwge1xcbiAgZm9udC1zaXplOiAxLjVlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjA0MTY2NjY2ODJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcXG59XFxuXFxuLmZhLTJ4bCB7XFxuICBmb250LXNpemU6IDJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAwLjAzMTI1ZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTg3NWVtO1xcbn1cXG5cXG4uZmEtZncge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgd2lkdGg6IDEuMjVlbTtcXG59XFxuXFxuLmZhLXVsIHtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1mYS1saS1tYXJnaW4sIDIuNWVtKTtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuLmZhLXVsID4gbGkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uZmEtbGkge1xcbiAgbGVmdDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbn1cXG5cXG4uZmEtYm9yZGVyIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmEtYm9yZGVyLWNvbG9yLCAjZWVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTtcXG4gIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWZhLWJvcmRlci13aWR0aCwgMC4wOGVtKTtcXG4gIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjJlbSAwLjI1ZW0gMC4xNWVtKTtcXG59XFxuXFxuLmZhLXB1bGwtbGVmdCB7XFxuICBmbG9hdDogbGVmdDtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTtcXG59XFxuXFxuLmZhLXB1bGwtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XFxufVxcblxcbi5mYS1iZWF0IHtcXG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0O1xcbiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcXG4gIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XFxuICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpO1xcbn1cXG5cXG4uZmEtYm91bmNlIHtcXG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7XFxuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC4yOCwgMC44NCwgMC40MiwgMSkpO1xcbn1cXG5cXG4uZmEtZmFkZSB7XFxuICBhbmltYXRpb24tbmFtZTogZmEtZmFkZTtcXG4gIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XFxuICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpO1xcbn1cXG5cXG4uZmEtYmVhdC1mYWRlIHtcXG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0LWZhZGU7XFxuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTtcXG59XFxuXFxuLmZhLWZsaXAge1xcbiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7XFxuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7XFxufVxcblxcbi5mYS1zaGFrZSB7XFxuICBhbmltYXRpb24tbmFtZTogZmEtc2hha2U7XFxuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XFxuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpO1xcbn1cXG5cXG4uZmEtc3BpbiB7XFxuICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjtcXG4gIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XFxuICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDJzKTtcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XFxufVxcblxcbi5mYS1zcGluLXJldmVyc2Uge1xcbiAgLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlO1xcbn1cXG5cXG4uZmEtcHVsc2UsXFxuLmZhLXNwaW4tcHVsc2Uge1xcbiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47XFxuICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcXG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTtcXG59XFxuXFxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gIC5mYS1iZWF0LFxcbi5mYS1ib3VuY2UsXFxuLmZhLWZhZGUsXFxuLmZhLWJlYXQtZmFkZSxcXG4uZmEtZmxpcCxcXG4uZmEtcHVsc2UsXFxuLmZhLXNoYWtlLFxcbi5mYS1zcGluLFxcbi5mYS1zcGluLXB1bHNlIHtcXG4gICAgYW5pbWF0aW9uLWRlbGF5OiAtMW1zO1xcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDFtcztcXG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTtcXG4gICAgdHJhbnNpdGlvbi1kZWxheTogMHM7XFxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDBzO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhLWJlYXQge1xcbiAgMCUsIDkwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxuICA0NSUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1ib3VuY2Uge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XFxuICB9XFxuICAxMCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS14LCAxLjEpLCB2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteSwgMC45KSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG4gIDMwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xKSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAtMC41ZW0pKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgNTclIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpO1xcbiAgfVxcbiAgNjQlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1mYWRlIHtcXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1iZWF0LWZhZGUge1xcbiAgMCUsIDEwMCUge1xcbiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjEyNSkpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZhLWZsaXAge1xcbiAgNTAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgZmEtc2hha2Uge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xcbiAgfVxcbiAgNCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7XFxuICB9XFxuICA4JSwgMjQlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTtcXG4gIH1cXG4gIDEyJSwgMjglIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpO1xcbiAgfVxcbiAgMTYlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTtcXG4gIH1cXG4gIDIwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcXG4gIH1cXG4gIDMyJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XFxuICB9XFxuICAzNiUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7XFxuICB9XFxuICA0MCUsIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBmYS1zcGluIHtcXG4gIDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuLmZhLXJvdGF0ZS05MCB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxufVxcblxcbi5mYS1yb3RhdGUtMTgwIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5mYS1yb3RhdGUtMjcwIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XFxufVxcblxcbi5mYS1mbGlwLWhvcml6b250YWwge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XFxufVxcblxcbi5mYS1mbGlwLXZlcnRpY2FsIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xcbn1cXG5cXG4uZmEtZmxpcC1ib3RoLFxcbi5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7XFxufVxcblxcbi5mYS1yb3RhdGUtYnkge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCAwKSk7XFxufVxcblxcbi5mYS1zdGFjayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgaGVpZ2h0OiAyZW07XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMi41ZW07XFxufVxcblxcbi5mYS1zdGFjay0xeCxcXG4uZmEtc3RhY2stMngge1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIG1hcmdpbjogYXV0bztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7XFxuICBoZWlnaHQ6IDFlbTtcXG4gIHdpZHRoOiAxLjI1ZW07XFxufVxcbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7XFxuICBoZWlnaHQ6IDJlbTtcXG4gIHdpZHRoOiAyLjVlbTtcXG59XFxuXFxuLmZhLWludmVyc2Uge1xcbiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpO1xcbn1cXG5cXG4uc3Itb25seSxcXG4uZmEtc3Itb25seSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAtMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbn1cXG5cXG4uc3Itb25seS1mb2N1c2FibGU6bm90KDpmb2N1cyksXFxuLmZhLXNyLW9ubHktZm9jdXNhYmxlOm5vdCg6Zm9jdXMpIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IC0xcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBib3JkZXItd2lkdGg6IDA7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7XFxuICBmaWxsOiB2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpO1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTtcXG59XFxuXFxuLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkge1xcbiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpO1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXByaW1hcnkge1xcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XFxufVxcblxcbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7XFxuICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpO1xcbn1cXG5cXG4uc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSxcXG4uc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtc2Vjb25kYXJ5IHtcXG4gIGZpbGw6IGJsYWNrO1xcbn1cXG5cXG4uZmFkLmZhLWludmVyc2UsXFxuLmZhLWR1b3RvbmUuZmEtaW52ZXJzZSB7XFxuICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7XFxufVwiO1xuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGNvbnN0IGRjcCA9IERFRkFVTFRfQ1NTX1BSRUZJWDtcbiAgY29uc3QgZHJjID0gREVGQVVMVF9SRVBMQUNFTUVOVF9DTEFTUztcbiAgY29uc3QgZnAgPSBjb25maWcuY3NzUHJlZml4O1xuICBjb25zdCByYyA9IGNvbmZpZy5yZXBsYWNlbWVudENsYXNzO1xuICBsZXQgcyA9IGJhc2VTdHlsZXM7XG5cbiAgaWYgKGZwICE9PSBkY3AgfHwgcmMgIT09IGRyYykge1xuICAgIGNvbnN0IGRQYXR0ID0gbmV3IFJlZ0V4cChcIlxcXFwuXCIuY29uY2F0KGRjcCwgXCJcXFxcLVwiKSwgJ2cnKTtcbiAgICBjb25zdCBjdXN0b21Qcm9wUGF0dCA9IG5ldyBSZWdFeHAoXCJcXFxcLS1cIi5jb25jYXQoZGNwLCBcIlxcXFwtXCIpLCAnZycpO1xuICAgIGNvbnN0IHJQYXR0ID0gbmV3IFJlZ0V4cChcIlxcXFwuXCIuY29uY2F0KGRyYyksICdnJyk7XG4gICAgcyA9IHMucmVwbGFjZShkUGF0dCwgXCIuXCIuY29uY2F0KGZwLCBcIi1cIikpLnJlcGxhY2UoY3VzdG9tUHJvcFBhdHQsIFwiLS1cIi5jb25jYXQoZnAsIFwiLVwiKSkucmVwbGFjZShyUGF0dCwgXCIuXCIuY29uY2F0KHJjKSk7XG4gIH1cblxuICByZXR1cm4gcztcbn1cblxubGV0IF9jc3NJbnNlcnRlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBlbnN1cmVDc3MoKSB7XG4gIGlmIChjb25maWcuYXV0b0FkZENzcyAmJiAhX2Nzc0luc2VydGVkKSB7XG4gICAgaW5zZXJ0Q3NzKGNzcygpKTtcbiAgICBfY3NzSW5zZXJ0ZWQgPSB0cnVlO1xuICB9XG59XG5cbnZhciBJbmplY3RDU1MgPSB7XG4gIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tOiB7XG4gICAgICAgIGNzcyxcbiAgICAgICAgaW5zZXJ0Q3NzOiBlbnN1cmVDc3NcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiZWZvcmVET01FbGVtZW50Q3JlYXRpb24oKSB7XG4gICAgICAgIGVuc3VyZUNzcygpO1xuICAgICAgfSxcblxuICAgICAgYmVmb3JlSTJzdmcoKSB7XG4gICAgICAgIGVuc3VyZUNzcygpO1xuICAgICAgfVxuXG4gICAgfTtcbiAgfVxuXG59O1xuXG5jb25zdCB3JDEgPSBXSU5ET1cgfHwge307XG5pZiAoIXckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0pIHckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0gPSB7fTtcbmlmICghdyQxW05BTUVTUEFDRV9JREVOVElGSUVSXS5zdHlsZXMpIHckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0uc3R5bGVzID0ge307XG5pZiAoIXckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0uaG9va3MpIHckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl0uaG9va3MgPSB7fTtcbmlmICghdyQxW05BTUVTUEFDRV9JREVOVElGSUVSXS5zaGltcykgdyQxW05BTUVTUEFDRV9JREVOVElGSUVSXS5zaGltcyA9IFtdO1xudmFyIG5hbWVzcGFjZSA9IHckMVtOQU1FU1BBQ0VfSURFTlRJRklFUl07XG5cbmNvbnN0IGZ1bmN0aW9ucyA9IFtdO1xuXG5jb25zdCBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgRE9DVU1FTlQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGxpc3RlbmVyKTtcbiAgbG9hZGVkID0gMTtcbiAgZnVuY3Rpb25zLm1hcChmbiA9PiBmbigpKTtcbn07XG5cbmxldCBsb2FkZWQgPSBmYWxzZTtcblxuaWYgKElTX0RPTSkge1xuICBsb2FkZWQgPSAoRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsID8gL15sb2FkZWR8XmMvIDogL15sb2FkZWR8Xml8XmMvKS50ZXN0KERPQ1VNRU5ULnJlYWR5U3RhdGUpO1xuICBpZiAoIWxvYWRlZCkgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGxpc3RlbmVyKTtcbn1cblxuZnVuY3Rpb24gZG9tcmVhZHkgKGZuKSB7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZnVuY3Rpb25zLnB1c2goZm4pO1xufVxuXG5mdW5jdGlvbiB0b0h0bWwoYWJzdHJhY3ROb2Rlcykge1xuICBjb25zdCB7XG4gICAgdGFnLFxuICAgIGF0dHJpYnV0ZXMgPSB7fSxcbiAgICBjaGlsZHJlbiA9IFtdXG4gIH0gPSBhYnN0cmFjdE5vZGVzO1xuXG4gIGlmICh0eXBlb2YgYWJzdHJhY3ROb2RlcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaHRtbEVzY2FwZShhYnN0cmFjdE5vZGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCI8XCIuY29uY2F0KHRhZywgXCIgXCIpLmNvbmNhdChqb2luQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSwgXCI+XCIpLmNvbmNhdChjaGlsZHJlbi5tYXAodG9IdG1sKS5qb2luKCcnKSwgXCI8L1wiKS5jb25jYXQodGFnLCBcIj5cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gaWNvbkZyb21NYXBwaW5nKG1hcHBpbmcsIHByZWZpeCwgaWNvbk5hbWUpIHtcbiAgaWYgKG1hcHBpbmcgJiYgbWFwcGluZ1twcmVmaXhdICYmIG1hcHBpbmdbcHJlZml4XVtpY29uTmFtZV0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4LFxuICAgICAgaWNvbk5hbWUsXG4gICAgICBpY29uOiBtYXBwaW5nW3ByZWZpeF1baWNvbk5hbWVdXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlbHBlciB0byBiaW5kIGEgZnVuY3Rpb24ga25vd24gdG8gaGF2ZSA0IGFyZ3VtZW50c1xuICogdG8gYSBnaXZlbiBjb250ZXh0LlxuICovXG5cbnZhciBiaW5kSW50ZXJuYWw0ID0gZnVuY3Rpb24gYmluZEludGVybmFsNChmdW5jLCB0aGlzQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNDb250ZXh0LCBhLCBiLCBjLCBkKTtcbiAgfTtcbn07XG5cbi8qKlxuICogIyBSZWR1Y2VcbiAqXG4gKiBBIGZhc3Qgb2JqZWN0IGAucmVkdWNlKClgIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gICBzdWJqZWN0ICAgICAgVGhlIG9iamVjdCB0byByZWR1Y2Ugb3Zlci5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiAgICAgICAgICAgVGhlIHJlZHVjZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0gIHttaXhlZH0gICAgaW5pdGlhbFZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgcmVkdWNlciwgZGVmYXVsdHMgdG8gc3ViamVjdFswXS5cbiAqIEBwYXJhbSAge09iamVjdH0gICB0aGlzQ29udGV4dCAgVGhlIGNvbnRleHQgZm9yIHRoZSByZWR1Y2VyLlxuICogQHJldHVybiB7bWl4ZWR9ICAgICAgICAgICAgICAgICBUaGUgZmluYWwgcmVzdWx0LlxuICovXG5cblxudmFyIHJlZHVjZSA9IGZ1bmN0aW9uIGZhc3RSZWR1Y2VPYmplY3Qoc3ViamVjdCwgZm4sIGluaXRpYWxWYWx1ZSwgdGhpc0NvbnRleHQpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzdWJqZWN0KSxcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoLFxuICAgICAgaXRlcmF0b3IgPSB0aGlzQ29udGV4dCAhPT0gdW5kZWZpbmVkID8gYmluZEludGVybmFsNChmbiwgdGhpc0NvbnRleHQpIDogZm4sXG4gICAgICBpLFxuICAgICAga2V5LFxuICAgICAgcmVzdWx0O1xuXG4gIGlmIChpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAxO1xuICAgIHJlc3VsdCA9IHN1YmplY3Rba2V5c1swXV07XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gICAgcmVzdWx0ID0gaW5pdGlhbFZhbHVlO1xuICB9XG5cbiAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgcmVzdWx0ID0gaXRlcmF0b3IocmVzdWx0LCBzdWJqZWN0W2tleV0sIGtleSwgc3ViamVjdCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiB1Y3MyZGVjb2RlKCkgYW5kIGNvZGVQb2ludEF0KCkgYXJlIGJvdGggd29ya3Mgb2YgTWF0aGlhcyBCeW5lbnMgYW5kIGxpY2Vuc2VkIHVuZGVyIE1JVFxuICpcbiAqIENvcHlyaWdodCBNYXRoaWFzIEJ5bmVucyA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlLz5cblxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbiAqIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG4gKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRVxuICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTlxuICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4gKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcbiAgY29uc3Qgb3V0cHV0ID0gW107XG4gIGxldCBjb3VudGVyID0gMDtcbiAgY29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuICAgIGNvbnN0IHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblxuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblxuICAgICAgaWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgICAgIG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICAgIGNvdW50ZXItLTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIHRvSGV4KHVuaWNvZGUpIHtcbiAgY29uc3QgZGVjb2RlZCA9IHVjczJkZWNvZGUodW5pY29kZSk7XG4gIHJldHVybiBkZWNvZGVkLmxlbmd0aCA9PT0gMSA/IGRlY29kZWRbMF0udG9TdHJpbmcoMTYpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGNvZGVQb2ludEF0KHN0cmluZywgaW5kZXgpIHtcbiAgY29uc3Qgc2l6ZSA9IHN0cmluZy5sZW5ndGg7XG4gIGxldCBmaXJzdCA9IHN0cmluZy5jaGFyQ29kZUF0KGluZGV4KTtcbiAgbGV0IHNlY29uZDtcblxuICBpZiAoZmlyc3QgPj0gMHhEODAwICYmIGZpcnN0IDw9IDB4REJGRiAmJiBzaXplID4gaW5kZXggKyAxKSB7XG4gICAgc2Vjb25kID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblxuICAgIGlmIChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHtcbiAgICAgIHJldHVybiAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNvbmQgLSAweERDMDAgKyAweDEwMDAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaXJzdDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSWNvbnMoaWNvbnMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGljb25zKS5yZWR1Y2UoKGFjYywgaWNvbk5hbWUpID0+IHtcbiAgICBjb25zdCBpY29uID0gaWNvbnNbaWNvbk5hbWVdO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gISFpY29uLmljb247XG5cbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIGFjY1tpY29uLmljb25OYW1lXSA9IGljb24uaWNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2ljb25OYW1lXSA9IGljb247XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVJY29ucyhwcmVmaXgsIGljb25zKSB7XG4gIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICBjb25zdCB7XG4gICAgc2tpcEhvb2tzID0gZmFsc2VcbiAgfSA9IHBhcmFtcztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUljb25zKGljb25zKTtcblxuICBpZiAodHlwZW9mIG5hbWVzcGFjZS5ob29rcy5hZGRQYWNrID09PSAnZnVuY3Rpb24nICYmICFza2lwSG9va3MpIHtcbiAgICBuYW1lc3BhY2UuaG9va3MuYWRkUGFjayhwcmVmaXgsIG5vcm1hbGl6ZUljb25zKGljb25zKSk7XG4gIH0gZWxzZSB7XG4gICAgbmFtZXNwYWNlLnN0eWxlc1twcmVmaXhdID0geyAuLi4obmFtZXNwYWNlLnN0eWxlc1twcmVmaXhdIHx8IHt9KSxcbiAgICAgIC4uLm5vcm1hbGl6ZWRcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBGb250IEF3ZXNvbWUgNCB1c2VkIHRoZSBwcmVmaXggb2YgYGZhYCBmb3IgYWxsIGljb25zLiBXaXRoIHRoZSBpbnRyb2R1Y3Rpb25cbiAgICogb2YgbmV3IHN0eWxlcyB3ZSBuZWVkZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZW0uIFByZWZpeCBgZmFgIGlzIG5vdyBhbiBhbGlhc1xuICAgKiBmb3IgYGZhc2Agc28gd2UnbGwgZWFzZSB0aGUgdXBncmFkZSBwcm9jZXNzIGZvciBvdXIgdXNlcnMgYnkgYXV0b21hdGljYWxseSBkZWZpbmluZ1xuICAgKiB0aGlzIGFzIHdlbGwuXG4gICAqL1xuXG5cbiAgaWYgKHByZWZpeCA9PT0gJ2ZhcycpIHtcbiAgICBkZWZpbmVJY29ucygnZmEnLCBpY29ucyk7XG4gIH1cbn1cblxuY29uc3Qge1xuICBzdHlsZXMsXG4gIHNoaW1zXG59ID0gbmFtZXNwYWNlO1xuY29uc3QgTE9OR19TVFlMRSA9IHtcbiAgW2FdOiBPYmplY3QudmFsdWVzKFBSRUZJWF9UT19MT05HX1NUWUxFW2FdKSxcbiAgW3JdOiBPYmplY3QudmFsdWVzKFBSRUZJWF9UT19MT05HX1NUWUxFW3JdKSxcbiAgW29dOiBPYmplY3QudmFsdWVzKFBSRUZJWF9UT19MT05HX1NUWUxFW29dKVxufTtcbmxldCBfZGVmYXVsdFVzYWJsZVByZWZpeCA9IG51bGw7XG5sZXQgX2J5VW5pY29kZSA9IHt9O1xubGV0IF9ieUxpZ2F0dXJlID0ge307XG5sZXQgX2J5T2xkTmFtZSA9IHt9O1xubGV0IF9ieU9sZFVuaWNvZGUgPSB7fTtcbmxldCBfYnlBbGlhcyA9IHt9O1xuY29uc3QgUFJFRklYRVMgPSB7XG4gIFthXTogT2JqZWN0LmtleXMoUFJFRklYX1RPX1NUWUxFW2FdKSxcbiAgW3JdOiBPYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbcl0pLFxuICBbb106IE9iamVjdC5rZXlzKFBSRUZJWF9UT19TVFlMRVtvXSlcbn07XG5cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQobmFtZSkge1xuICByZXR1cm4gflJFU0VSVkVEX0NMQVNTRVMuaW5kZXhPZihuYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0SWNvbk5hbWUoY3NzUHJlZml4LCBjbHMpIHtcbiAgY29uc3QgcGFydHMgPSBjbHMuc3BsaXQoJy0nKTtcbiAgY29uc3QgcHJlZml4ID0gcGFydHNbMF07XG4gIGNvbnN0IGljb25OYW1lID0gcGFydHMuc2xpY2UoMSkuam9pbignLScpO1xuXG4gIGlmIChwcmVmaXggPT09IGNzc1ByZWZpeCAmJiBpY29uTmFtZSAhPT0gJycgJiYgIWlzUmVzZXJ2ZWQoaWNvbk5hbWUpKSB7XG4gICAgcmV0dXJuIGljb25OYW1lO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5jb25zdCBidWlsZCA9ICgpID0+IHtcbiAgY29uc3QgbG9va3VwID0gcmVkdWNlciA9PiB7XG4gICAgcmV0dXJuIHJlZHVjZShzdHlsZXMsIChvJCQxLCBzdHlsZSwgcHJlZml4KSA9PiB7XG4gICAgICBvJCQxW3ByZWZpeF0gPSByZWR1Y2Uoc3R5bGUsIHJlZHVjZXIsIHt9KTtcbiAgICAgIHJldHVybiBvJCQxO1xuICAgIH0sIHt9KTtcbiAgfTtcblxuICBfYnlVbmljb2RlID0gbG9va3VwKChhY2MsIGljb24sIGljb25OYW1lKSA9PiB7XG4gICAgaWYgKGljb25bM10pIHtcbiAgICAgIGFjY1tpY29uWzNdXSA9IGljb25OYW1lO1xuICAgIH1cblxuICAgIGlmIChpY29uWzJdKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gaWNvblsyXS5maWx0ZXIoYSQkMSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgYSQkMSA9PT0gJ251bWJlcic7XG4gICAgICB9KTtcbiAgICAgIGFsaWFzZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgIGFjY1thbGlhcy50b1N0cmluZygxNildID0gaWNvbk5hbWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9KTtcbiAgX2J5TGlnYXR1cmUgPSBsb29rdXAoKGFjYywgaWNvbiwgaWNvbk5hbWUpID0+IHtcbiAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7XG5cbiAgICBpZiAoaWNvblsyXSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IGljb25bMl0uZmlsdGVyKGEkJDEgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGEkJDEgPT09ICdzdHJpbmcnO1xuICAgICAgfSk7XG4gICAgICBhbGlhc2VzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICBhY2NbYWxpYXNdID0gaWNvbk5hbWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9KTtcbiAgX2J5QWxpYXMgPSBsb29rdXAoKGFjYywgaWNvbiwgaWNvbk5hbWUpID0+IHtcbiAgICBjb25zdCBhbGlhc2VzID0gaWNvblsyXTtcbiAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7XG4gICAgYWxpYXNlcy5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGFjY1thbGlhc10gPSBpY29uTmFtZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9KTsgLy8gSWYgd2UgaGF2ZSBhIEtpdCwgd2UgY2FuJ3QgZGV0ZXJtaW5lIGlmIHJlZ3VsYXIgaXMgYXZhaWxhYmxlIHNpbmNlIHdlXG4gIC8vIGNvdWxkIGJlIGF1dG8tZmV0Y2hpbmcgaXQuIFdlJ2xsIGhhdmUgdG8gYXNzdW1lIHRoYXQgaXQgaXMgYXZhaWxhYmxlLlxuXG4gIGNvbnN0IGhhc1JlZ3VsYXIgPSAnZmFyJyBpbiBzdHlsZXMgfHwgY29uZmlnLmF1dG9GZXRjaFN2ZztcbiAgY29uc3Qgc2hpbUxvb2t1cHMgPSByZWR1Y2Uoc2hpbXMsIChhY2MsIHNoaW0pID0+IHtcbiAgICBjb25zdCBtYXliZU5hbWVNYXliZVVuaWNvZGUgPSBzaGltWzBdO1xuICAgIGxldCBwcmVmaXggPSBzaGltWzFdO1xuICAgIGNvbnN0IGljb25OYW1lID0gc2hpbVsyXTtcblxuICAgIGlmIChwcmVmaXggPT09ICdmYXInICYmICFoYXNSZWd1bGFyKSB7XG4gICAgICBwcmVmaXggPSAnZmFzJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1heWJlTmFtZU1heWJlVW5pY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFjYy5uYW1lc1ttYXliZU5hbWVNYXliZVVuaWNvZGVdID0ge1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWF5YmVOYW1lTWF5YmVVbmljb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgYWNjLnVuaWNvZGVzW21heWJlTmFtZU1heWJlVW5pY29kZS50b1N0cmluZygxNildID0ge1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGljb25OYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHtcbiAgICBuYW1lczoge30sXG4gICAgdW5pY29kZXM6IHt9XG4gIH0pO1xuICBfYnlPbGROYW1lID0gc2hpbUxvb2t1cHMubmFtZXM7XG4gIF9ieU9sZFVuaWNvZGUgPSBzaGltTG9va3Vwcy51bmljb2RlcztcbiAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoY29uZmlnLnN0eWxlRGVmYXVsdCwge1xuICAgIGZhbWlseTogY29uZmlnLmZhbWlseURlZmF1bHRcbiAgfSk7XG59O1xub25DaGFuZ2UoYyQkMSA9PiB7XG4gIF9kZWZhdWx0VXNhYmxlUHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KGMkJDEuc3R5bGVEZWZhdWx0LCB7XG4gICAgZmFtaWx5OiBjb25maWcuZmFtaWx5RGVmYXVsdFxuICB9KTtcbn0pO1xuYnVpbGQoKTtcbmZ1bmN0aW9uIGJ5VW5pY29kZShwcmVmaXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIChfYnlVbmljb2RlW3ByZWZpeF0gfHwge30pW3VuaWNvZGVdO1xufVxuZnVuY3Rpb24gYnlMaWdhdHVyZShwcmVmaXgsIGxpZ2F0dXJlKSB7XG4gIHJldHVybiAoX2J5TGlnYXR1cmVbcHJlZml4XSB8fCB7fSlbbGlnYXR1cmVdO1xufVxuZnVuY3Rpb24gYnlBbGlhcyhwcmVmaXgsIGFsaWFzKSB7XG4gIHJldHVybiAoX2J5QWxpYXNbcHJlZml4XSB8fCB7fSlbYWxpYXNdO1xufVxuZnVuY3Rpb24gYnlPbGROYW1lKG5hbWUpIHtcbiAgcmV0dXJuIF9ieU9sZE5hbWVbbmFtZV0gfHwge1xuICAgIHByZWZpeDogbnVsbCxcbiAgICBpY29uTmFtZTogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gYnlPbGRVbmljb2RlKHVuaWNvZGUpIHtcbiAgY29uc3Qgb2xkVW5pY29kZSA9IF9ieU9sZFVuaWNvZGVbdW5pY29kZV07XG4gIGNvbnN0IG5ld1VuaWNvZGUgPSBieVVuaWNvZGUoJ2ZhcycsIHVuaWNvZGUpO1xuICByZXR1cm4gb2xkVW5pY29kZSB8fCAobmV3VW5pY29kZSA/IHtcbiAgICBwcmVmaXg6ICdmYXMnLFxuICAgIGljb25OYW1lOiBuZXdVbmljb2RlXG4gIH0gOiBudWxsKSB8fCB7XG4gICAgcHJlZml4OiBudWxsLFxuICAgIGljb25OYW1lOiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCkge1xuICByZXR1cm4gX2RlZmF1bHRVc2FibGVQcmVmaXg7XG59XG5jb25zdCBlbXB0eUNhbm9uaWNhbEljb24gPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgcHJlZml4OiBudWxsLFxuICAgIGljb25OYW1lOiBudWxsLFxuICAgIHJlc3Q6IFtdXG4gIH07XG59O1xuZnVuY3Rpb24gZ2V0Q2Fub25pY2FsUHJlZml4KHN0eWxlT3JQcmVmaXgpIHtcbiAgbGV0IHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIGNvbnN0IHtcbiAgICBmYW1pbHkgPSBhXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHN0eWxlID0gUFJFRklYX1RPX1NUWUxFW2ZhbWlseV1bc3R5bGVPclByZWZpeF07XG4gIGNvbnN0IHByZWZpeCA9IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlT3JQcmVmaXhdIHx8IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlXTtcbiAgY29uc3QgZGVmaW5lZCA9IHN0eWxlT3JQcmVmaXggaW4gbmFtZXNwYWNlLnN0eWxlcyA/IHN0eWxlT3JQcmVmaXggOiBudWxsO1xuICBjb25zdCByZXN1bHQgPSBwcmVmaXggfHwgZGVmaW5lZCB8fCBudWxsO1xuICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3QgUFJFRklYRVNfRk9SX0ZBTUlMWSA9IHtcbiAgW2FdOiBPYmplY3Qua2V5cyhQUkVGSVhfVE9fTE9OR19TVFlMRVthXSksXG4gIFtyXTogT2JqZWN0LmtleXMoUFJFRklYX1RPX0xPTkdfU1RZTEVbcl0pLFxuICBbb106IE9iamVjdC5rZXlzKFBSRUZJWF9UT19MT05HX1NUWUxFW29dKVxufTtcbmZ1bmN0aW9uIGdldENhbm9uaWNhbEljb24odmFsdWVzKSB7XG4gIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBjb25zdCB7XG4gICAgc2tpcExvb2t1cHMgPSBmYWxzZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBmYW1Qcm9wcyA9IHtcbiAgICBbYV06IFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLVwiKS5jb25jYXQoYSksXG4gICAgW3JdOiBcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1cIikuY29uY2F0KHIpLFxuICAgIFtvXTogXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChvKVxuICB9O1xuICBsZXQgZ2l2ZW5QcmVmaXggPSBudWxsO1xuICBsZXQgZmFtaWx5ID0gYTtcbiAgY29uc3Qgbm9uRHVvdG9uZUZhbWlseUlkcyA9IGMuZmlsdGVyKGZhbWlseUlkID0+IGZhbWlseUlkICE9PSB0KTtcbiAgbm9uRHVvdG9uZUZhbWlseUlkcy5mb3JFYWNoKGZhbWlseUlkID0+IHtcbiAgICBpZiAodmFsdWVzLmluY2x1ZGVzKGZhbVByb3BzW2ZhbWlseUlkXSkgfHwgdmFsdWVzLnNvbWUodiQkMSA9PiBQUkVGSVhFU19GT1JfRkFNSUxZW2ZhbWlseUlkXS5pbmNsdWRlcyh2JCQxKSkpIHtcbiAgICAgIGZhbWlseSA9IGZhbWlseUlkO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGNhbm9uaWNhbCA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgY2xzKSA9PiB7XG4gICAgY29uc3QgaWNvbk5hbWUgPSBnZXRJY29uTmFtZShjb25maWcuY3NzUHJlZml4LCBjbHMpO1xuXG4gICAgaWYgKHN0eWxlc1tjbHNdKSB7XG4gICAgICBjbHMgPSBMT05HX1NUWUxFW2ZhbWlseV0uaW5jbHVkZXMoY2xzKSA/IExPTkdfU1RZTEVfVE9fUFJFRklYW2ZhbWlseV1bY2xzXSA6IGNscztcbiAgICAgIGdpdmVuUHJlZml4ID0gY2xzO1xuICAgICAgYWNjLnByZWZpeCA9IGNscztcbiAgICB9IGVsc2UgaWYgKFBSRUZJWEVTW2ZhbWlseV0uaW5kZXhPZihjbHMpID4gLTEpIHtcbiAgICAgIGdpdmVuUHJlZml4ID0gY2xzO1xuICAgICAgYWNjLnByZWZpeCA9IGdldENhbm9uaWNhbFByZWZpeChjbHMsIHtcbiAgICAgICAgZmFtaWx5XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGljb25OYW1lKSB7XG4gICAgICBhY2MuaWNvbk5hbWUgPSBpY29uTmFtZTtcbiAgICB9IGVsc2UgaWYgKGNscyAhPT0gY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MgJiYgIW5vbkR1b3RvbmVGYW1pbHlJZHMuc29tZShmYW1pbHlOYW1lID0+IGNscyA9PT0gZmFtUHJvcHNbZmFtaWx5TmFtZV0pKSB7XG4gICAgICBhY2MucmVzdC5wdXNoKGNscyk7XG4gICAgfVxuXG4gICAgaWYgKCFza2lwTG9va3VwcyAmJiBhY2MucHJlZml4ICYmIGFjYy5pY29uTmFtZSkge1xuICAgICAgY29uc3Qgc2hpbSA9IGdpdmVuUHJlZml4ID09PSAnZmEnID8gYnlPbGROYW1lKGFjYy5pY29uTmFtZSkgOiB7fTtcbiAgICAgIGNvbnN0IGFsaWFzSWNvbk5hbWUgPSBieUFsaWFzKGFjYy5wcmVmaXgsIGFjYy5pY29uTmFtZSk7XG5cbiAgICAgIGlmIChzaGltLnByZWZpeCkge1xuICAgICAgICBnaXZlblByZWZpeCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFjYy5pY29uTmFtZSA9IHNoaW0uaWNvbk5hbWUgfHwgYWxpYXNJY29uTmFtZSB8fCBhY2MuaWNvbk5hbWU7XG4gICAgICBhY2MucHJlZml4ID0gc2hpbS5wcmVmaXggfHwgYWNjLnByZWZpeDtcblxuICAgICAgaWYgKGFjYy5wcmVmaXggPT09ICdmYXInICYmICFzdHlsZXNbJ2ZhciddICYmIHN0eWxlc1snZmFzJ10gJiYgIWNvbmZpZy5hdXRvRmV0Y2hTdmcpIHtcbiAgICAgICAgLy8gQWxsb3cgYSBmYWxsYmFjayBmcm9tIHRoZSByZWd1bGFyIHN0eWxlIHRvIHNvbGlkIGlmIHJlZ3VsYXIgaXMgbm90IGF2YWlsYWJsZVxuICAgICAgICAvLyBidXQgb25seSBpZiB3ZSBhcmVuJ3QgYXV0by1mZXRjaGluZyBTVkdzXG4gICAgICAgIGFjYy5wcmVmaXggPSAnZmFzJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBlbXB0eUNhbm9uaWNhbEljb24oKSk7XG5cbiAgaWYgKHZhbHVlcy5pbmNsdWRlcygnZmEtYnJhbmRzJykgfHwgdmFsdWVzLmluY2x1ZGVzKCdmYWInKSkge1xuICAgIGNhbm9uaWNhbC5wcmVmaXggPSAnZmFiJztcbiAgfVxuXG4gIGlmICh2YWx1ZXMuaW5jbHVkZXMoJ2ZhLWR1b3RvbmUnKSB8fCB2YWx1ZXMuaW5jbHVkZXMoJ2ZhZCcpKSB7XG4gICAgY2Fub25pY2FsLnByZWZpeCA9ICdmYWQnO1xuICB9XG5cbiAgaWYgKCFjYW5vbmljYWwucHJlZml4ICYmIGZhbWlseSA9PT0gciAmJiAoc3R5bGVzWydmYXNzJ10gfHwgY29uZmlnLmF1dG9GZXRjaFN2ZykpIHtcbiAgICBjYW5vbmljYWwucHJlZml4ID0gJ2Zhc3MnO1xuICAgIGNhbm9uaWNhbC5pY29uTmFtZSA9IGJ5QWxpYXMoY2Fub25pY2FsLnByZWZpeCwgY2Fub25pY2FsLmljb25OYW1lKSB8fCBjYW5vbmljYWwuaWNvbk5hbWU7XG4gIH1cblxuICBpZiAoIWNhbm9uaWNhbC5wcmVmaXggJiYgZmFtaWx5ID09PSBvICYmIChzdHlsZXNbJ2Zhc2RzJ10gfHwgY29uZmlnLmF1dG9GZXRjaFN2ZykpIHtcbiAgICBjYW5vbmljYWwucHJlZml4ID0gJ2Zhc2RzJztcbiAgICBjYW5vbmljYWwuaWNvbk5hbWUgPSBieUFsaWFzKGNhbm9uaWNhbC5wcmVmaXgsIGNhbm9uaWNhbC5pY29uTmFtZSkgfHwgY2Fub25pY2FsLmljb25OYW1lO1xuICB9XG5cbiAgaWYgKGNhbm9uaWNhbC5wcmVmaXggPT09ICdmYScgfHwgZ2l2ZW5QcmVmaXggPT09ICdmYScpIHtcbiAgICAvLyBUaGUgZmEgcHJlZml4IGlzIG5vdCBjYW5vbmljYWwuIFNvIGlmIGl0IGhhcyBtYWRlIGl0IHRocm91Z2ggdW50aWwgdGhpcyBwb2ludFxuICAgIC8vIHdlIHdpbGwgc2hpZnQgaXQgdG8gdGhlIGNvcnJlY3QgcHJlZml4LlxuICAgIGNhbm9uaWNhbC5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCkgfHwgJ2Zhcyc7XG4gIH1cblxuICByZXR1cm4gY2Fub25pY2FsO1xufVxuXG5jbGFzcyBMaWJyYXJ5IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9O1xuICB9XG5cbiAgYWRkKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBkZWZpbml0aW9ucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGRlZmluaXRpb25zW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZGl0aW9ucyA9IGRlZmluaXRpb25zLnJlZHVjZSh0aGlzLl9wdWxsRGVmaW5pdGlvbnMsIHt9KTtcbiAgICBPYmplY3Qua2V5cyhhZGRpdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbnNba2V5XSA9IHsgLi4uKHRoaXMuZGVmaW5pdGlvbnNba2V5XSB8fCB7fSksXG4gICAgICAgIC4uLmFkZGl0aW9uc1trZXldXG4gICAgICB9O1xuICAgICAgZGVmaW5lSWNvbnMoa2V5LCBhZGRpdGlvbnNba2V5XSk7IC8vIFRPRE8gY2FuIHdlIHN0b3AgZG9pbmcgdGhpcz8gV2UgY2FuJ3QgZ2V0IHRoZSBpY29ucyBieSAnZmEtc29saWQnIGFueSBsb25nZXIgc28gdGhpcyBwcm9iYWJseSBuZWVkcyB0byBjaGFuZ2VcblxuICAgICAgY29uc3QgbG9uZ1ByZWZpeCA9IFBSRUZJWF9UT19MT05HX1NUWUxFW2FdW2tleV07XG4gICAgICBpZiAobG9uZ1ByZWZpeCkgZGVmaW5lSWNvbnMobG9uZ1ByZWZpeCwgYWRkaXRpb25zW2tleV0pO1xuICAgICAgYnVpbGQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTtcbiAgfVxuXG4gIF9wdWxsRGVmaW5pdGlvbnMoYWRkaXRpb25zLCBkZWZpbml0aW9uKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGRlZmluaXRpb24ucHJlZml4ICYmIGRlZmluaXRpb24uaWNvbk5hbWUgJiYgZGVmaW5pdGlvbi5pY29uID8ge1xuICAgICAgMDogZGVmaW5pdGlvblxuICAgIH0gOiBkZWZpbml0aW9uO1xuICAgIE9iamVjdC5rZXlzKG5vcm1hbGl6ZWQpLm1hcChrZXkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGljb25OYW1lLFxuICAgICAgICBpY29uXG4gICAgICB9ID0gbm9ybWFsaXplZFtrZXldO1xuICAgICAgY29uc3QgYWxpYXNlcyA9IGljb25bMl07XG4gICAgICBpZiAoIWFkZGl0aW9uc1twcmVmaXhdKSBhZGRpdGlvbnNbcHJlZml4XSA9IHt9O1xuXG4gICAgICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFsaWFzZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uc1twcmVmaXhdW2FsaWFzXSA9IGljb247XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYWRkaXRpb25zW3ByZWZpeF1baWNvbk5hbWVdID0gaWNvbjtcbiAgICB9KTtcbiAgICByZXR1cm4gYWRkaXRpb25zO1xuICB9XG5cbn1cblxubGV0IF9wbHVnaW5zID0gW107XG5sZXQgX2hvb2tzID0ge307XG5jb25zdCBwcm92aWRlcnMgPSB7fTtcbmNvbnN0IGRlZmF1bHRQcm92aWRlcktleXMgPSBPYmplY3Qua2V5cyhwcm92aWRlcnMpO1xuZnVuY3Rpb24gcmVnaXN0ZXJQbHVnaW5zKG5leHRQbHVnaW5zLCBfcmVmKSB7XG4gIGxldCB7XG4gICAgbWl4b3V0c1RvOiBvYmpcbiAgfSA9IF9yZWY7XG4gIF9wbHVnaW5zID0gbmV4dFBsdWdpbnM7XG4gIF9ob29rcyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm92aWRlcnMpLmZvckVhY2goayA9PiB7XG4gICAgaWYgKGRlZmF1bHRQcm92aWRlcktleXMuaW5kZXhPZihrKSA9PT0gLTEpIHtcbiAgICAgIGRlbGV0ZSBwcm92aWRlcnNba107XG4gICAgfVxuICB9KTtcblxuICBfcGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgY29uc3QgbWl4b3V0ID0gcGx1Z2luLm1peG91dCA/IHBsdWdpbi5taXhvdXQoKSA6IHt9O1xuICAgIE9iamVjdC5rZXlzKG1peG91dCkuZm9yRWFjaCh0ayA9PiB7XG4gICAgICBpZiAodHlwZW9mIG1peG91dFt0a10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqW3RrXSA9IG1peG91dFt0a107XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbWl4b3V0W3RrXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobWl4b3V0W3RrXSkuZm9yRWFjaChzayA9PiB7XG4gICAgICAgICAgaWYgKCFvYmpbdGtdKSB7XG4gICAgICAgICAgICBvYmpbdGtdID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2JqW3RrXVtza10gPSBtaXhvdXRbdGtdW3NrXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGx1Z2luLmhvb2tzKSB7XG4gICAgICBjb25zdCBob29rcyA9IHBsdWdpbi5ob29rcygpO1xuICAgICAgT2JqZWN0LmtleXMoaG9va3MpLmZvckVhY2goaG9vayA9PiB7XG4gICAgICAgIGlmICghX2hvb2tzW2hvb2tdKSB7XG4gICAgICAgICAgX2hvb2tzW2hvb2tdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBfaG9va3NbaG9va10ucHVzaChob29rc1tob29rXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGx1Z2luLnByb3ZpZGVzKSB7XG4gICAgICBwbHVnaW4ucHJvdmlkZXMocHJvdmlkZXJzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBjaGFpbkhvb2tzKGhvb2ssIGFjY3VtdWxhdG9yKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSwgX2tleSA9IDI7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGNvbnN0IGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107XG4gIGhvb2tGbnMuZm9yRWFjaChob29rRm4gPT4ge1xuICAgIGFjY3VtdWxhdG9yID0gaG9va0ZuLmFwcGx5KG51bGwsIFthY2N1bXVsYXRvciwgLi4uYXJnc10pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICB9KTtcbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuZnVuY3Rpb24gY2FsbEhvb2tzKGhvb2spIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgY29uc3QgaG9va0ZucyA9IF9ob29rc1tob29rXSB8fCBbXTtcbiAgaG9va0Zucy5mb3JFYWNoKGhvb2tGbiA9PiB7XG4gICAgaG9va0ZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9KTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNhbGxQcm92aWRlZCgpIHtcbiAgY29uc3QgaG9vayA9IGFyZ3VtZW50c1swXTtcbiAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHJldHVybiBwcm92aWRlcnNbaG9va10gPyBwcm92aWRlcnNbaG9va10uYXBwbHkobnVsbCwgYXJncykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJY29uRGVmaW5pdGlvbihpY29uTG9va3VwKSB7XG4gIGlmIChpY29uTG9va3VwLnByZWZpeCA9PT0gJ2ZhJykge1xuICAgIGljb25Mb29rdXAucHJlZml4ID0gJ2Zhcyc7XG4gIH1cblxuICBsZXQge1xuICAgIGljb25OYW1lXG4gIH0gPSBpY29uTG9va3VwO1xuICBjb25zdCBwcmVmaXggPSBpY29uTG9va3VwLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybjtcbiAgaWNvbk5hbWUgPSBieUFsaWFzKHByZWZpeCwgaWNvbk5hbWUpIHx8IGljb25OYW1lO1xuICByZXR1cm4gaWNvbkZyb21NYXBwaW5nKGxpYnJhcnkuZGVmaW5pdGlvbnMsIHByZWZpeCwgaWNvbk5hbWUpIHx8IGljb25Gcm9tTWFwcGluZyhuYW1lc3BhY2Uuc3R5bGVzLCBwcmVmaXgsIGljb25OYW1lKTtcbn1cbmNvbnN0IGxpYnJhcnkgPSBuZXcgTGlicmFyeSgpO1xuY29uc3Qgbm9BdXRvID0gKCkgPT4ge1xuICBjb25maWcuYXV0b1JlcGxhY2VTdmcgPSBmYWxzZTtcbiAgY29uZmlnLm9ic2VydmVNdXRhdGlvbnMgPSBmYWxzZTtcbiAgY2FsbEhvb2tzKCdub0F1dG8nKTtcbn07XG5jb25zdCBkb20gPSB7XG4gIGkyc3ZnOiBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBpZiAoSVNfRE9NKSB7XG4gICAgICBjYWxsSG9va3MoJ2JlZm9yZUkyc3ZnJywgcGFyYW1zKTtcbiAgICAgIGNhbGxQcm92aWRlZCgncHNldWRvRWxlbWVudHMyc3ZnJywgcGFyYW1zKTtcbiAgICAgIHJldHVybiBjYWxsUHJvdmlkZWQoJ2kyc3ZnJywgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignT3BlcmF0aW9uIHJlcXVpcmVzIGEgRE9NIG9mIHNvbWUga2luZC4nKSk7XG4gICAgfVxuICB9LFxuICB3YXRjaDogZnVuY3Rpb24gKCkge1xuICAgIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIGF1dG9SZXBsYWNlU3ZnUm9vdFxuICAgIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoY29uZmlnLmF1dG9SZXBsYWNlU3ZnID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnLmF1dG9SZXBsYWNlU3ZnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IHRydWU7XG4gICAgZG9tcmVhZHkoKCkgPT4ge1xuICAgICAgYXV0b1JlcGxhY2Uoe1xuICAgICAgICBhdXRvUmVwbGFjZVN2Z1Jvb3RcbiAgICAgIH0pO1xuICAgICAgY2FsbEhvb2tzKCd3YXRjaCcsIHBhcmFtcyk7XG4gICAgfSk7XG4gIH1cbn07XG5jb25zdCBwYXJzZSA9IHtcbiAgaWNvbjogaWNvbiA9PiB7XG4gICAgaWYgKGljb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gJ29iamVjdCcgJiYgaWNvbi5wcmVmaXggJiYgaWNvbi5pY29uTmFtZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4OiBpY29uLnByZWZpeCxcbiAgICAgICAgaWNvbk5hbWU6IGJ5QWxpYXMoaWNvbi5wcmVmaXgsIGljb24uaWNvbk5hbWUpIHx8IGljb24uaWNvbk5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWNvbikgJiYgaWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IGljb25OYW1lID0gaWNvblsxXS5pbmRleE9mKCdmYS0nKSA9PT0gMCA/IGljb25bMV0uc2xpY2UoMykgOiBpY29uWzFdO1xuICAgICAgY29uc3QgcHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KGljb25bMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhwcmVmaXgsIGljb25OYW1lKSB8fCBpY29uTmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnICYmIChpY29uLmluZGV4T2YoXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpKSA+IC0xIHx8IGljb24ubWF0Y2goSUNPTl9TRUxFQ1RJT05fU1lOVEFYX1BBVFRFUk4pKSkge1xuICAgICAgY29uc3QgY2Fub25pY2FsSWNvbiA9IGdldENhbm9uaWNhbEljb24oaWNvbi5zcGxpdCgnICcpLCB7XG4gICAgICAgIHNraXBMb29rdXBzOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeDogY2Fub25pY2FsSWNvbi5wcmVmaXggfHwgZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpLFxuICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhjYW5vbmljYWxJY29uLnByZWZpeCwgY2Fub25pY2FsSWNvbi5pY29uTmFtZSkgfHwgY2Fub25pY2FsSWNvbi5pY29uTmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGljb25OYW1lOiBieUFsaWFzKHByZWZpeCwgaWNvbikgfHwgaWNvblxuICAgICAgfTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBhcGkgPSB7XG4gIG5vQXV0byxcbiAgY29uZmlnLFxuICBkb20sXG4gIHBhcnNlLFxuICBsaWJyYXJ5LFxuICBmaW5kSWNvbkRlZmluaXRpb24sXG4gIHRvSHRtbFxufTtcblxuY29uc3QgYXV0b1JlcGxhY2UgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICBjb25zdCB7XG4gICAgYXV0b1JlcGxhY2VTdmdSb290ID0gRE9DVU1FTlRcbiAgfSA9IHBhcmFtcztcbiAgaWYgKChPYmplY3Qua2V5cyhuYW1lc3BhY2Uuc3R5bGVzKS5sZW5ndGggPiAwIHx8IGNvbmZpZy5hdXRvRmV0Y2hTdmcpICYmIElTX0RPTSAmJiBjb25maWcuYXV0b1JlcGxhY2VTdmcpIGFwaS5kb20uaTJzdmcoe1xuICAgIG5vZGU6IGF1dG9SZXBsYWNlU3ZnUm9vdFxuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGRvbVZhcmlhbnRzKHZhbCwgYWJzdHJhY3RDcmVhdG9yKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWwsICdhYnN0cmFjdCcsIHtcbiAgICBnZXQ6IGFic3RyYWN0Q3JlYXRvclxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgJ2h0bWwnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdmFsLmFic3RyYWN0Lm1hcChhID0+IHRvSHRtbChhKSk7XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgJ25vZGUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIUlTX0RPTSkgcmV0dXJuO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdmFsLmh0bWw7XG4gICAgICByZXR1cm4gY29udGFpbmVyLmNoaWxkcmVuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIGFzSWNvbiAoX3JlZikge1xuICBsZXQge1xuICAgIGNoaWxkcmVuLFxuICAgIG1haW4sXG4gICAgbWFzayxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHN0eWxlcyxcbiAgICB0cmFuc2Zvcm1cbiAgfSA9IF9yZWY7XG5cbiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pICYmIG1haW4uZm91bmQgJiYgIW1hc2suZm91bmQpIHtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSBtYWluO1xuICAgIGNvbnN0IG9mZnNldCA9IHtcbiAgICAgIHg6IHdpZHRoIC8gaGVpZ2h0IC8gMixcbiAgICAgIHk6IDAuNVxuICAgIH07XG4gICAgYXR0cmlidXRlc1snc3R5bGUnXSA9IGpvaW5TdHlsZXMoeyAuLi5zdHlsZXMsXG4gICAgICAndHJhbnNmb3JtLW9yaWdpbic6IFwiXCIuY29uY2F0KG9mZnNldC54ICsgdHJhbnNmb3JtLnggLyAxNiwgXCJlbSBcIikuY29uY2F0KG9mZnNldC55ICsgdHJhbnNmb3JtLnkgLyAxNiwgXCJlbVwiKVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFt7XG4gICAgdGFnOiAnc3ZnJyxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGNoaWxkcmVuXG4gIH1dO1xufVxuXG5mdW5jdGlvbiBhc1N5bWJvbCAoX3JlZikge1xuICBsZXQge1xuICAgIHByZWZpeCxcbiAgICBpY29uTmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHN5bWJvbFxuICB9ID0gX3JlZjtcbiAgY29uc3QgaWQgPSBzeW1ib2wgPT09IHRydWUgPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiLVwiKS5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChpY29uTmFtZSkgOiBzeW1ib2w7XG4gIHJldHVybiBbe1xuICAgIHRhZzogJ3N2ZycsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgc3R5bGU6ICdkaXNwbGF5OiBub25lOydcbiAgICB9LFxuICAgIGNoaWxkcmVuOiBbe1xuICAgICAgdGFnOiAnc3ltYm9sJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgaWRcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlblxuICAgIH1dXG4gIH1dO1xufVxuXG5mdW5jdGlvbiBtYWtlSW5saW5lU3ZnQWJzdHJhY3QocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICBpY29uczoge1xuICAgICAgbWFpbixcbiAgICAgIG1hc2tcbiAgICB9LFxuICAgIHByZWZpeCxcbiAgICBpY29uTmFtZSxcbiAgICB0cmFuc2Zvcm0sXG4gICAgc3ltYm9sLFxuICAgIHRpdGxlLFxuICAgIG1hc2tJZCxcbiAgICB0aXRsZUlkLFxuICAgIGV4dHJhLFxuICAgIHdhdGNoYWJsZSA9IGZhbHNlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IG1hc2suZm91bmQgPyBtYXNrIDogbWFpbjtcbiAgY29uc3QgaXNVcGxvYWRlZEljb24gPSBwcmVmaXggPT09ICdmYWsnO1xuICBjb25zdCBhdHRyQ2xhc3MgPSBbY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIGljb25OYW1lID8gXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChpY29uTmFtZSkgOiAnJ10uZmlsdGVyKGMgPT4gZXh0cmEuY2xhc3Nlcy5pbmRleE9mKGMpID09PSAtMSkuZmlsdGVyKGMgPT4gYyAhPT0gJycgfHwgISFjKS5jb25jYXQoZXh0cmEuY2xhc3Nlcykuam9pbignICcpO1xuICBsZXQgY29udGVudCA9IHtcbiAgICBjaGlsZHJlbjogW10sXG4gICAgYXR0cmlidXRlczogeyAuLi5leHRyYS5hdHRyaWJ1dGVzLFxuICAgICAgJ2RhdGEtcHJlZml4JzogcHJlZml4LFxuICAgICAgJ2RhdGEtaWNvbic6IGljb25OYW1lLFxuICAgICAgJ2NsYXNzJzogYXR0ckNsYXNzLFxuICAgICAgJ3JvbGUnOiBleHRyYS5hdHRyaWJ1dGVzLnJvbGUgfHwgJ2ltZycsXG4gICAgICAneG1sbnMnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAgICAgJ3ZpZXdCb3gnOiBcIjAgMCBcIi5jb25jYXQod2lkdGgsIFwiIFwiKS5jb25jYXQoaGVpZ2h0KVxuICAgIH1cbiAgfTtcbiAgY29uc3QgdXBsb2FkZWRJY29uV2lkdGhTdHlsZSA9IGlzVXBsb2FkZWRJY29uICYmICF+ZXh0cmEuY2xhc3Nlcy5pbmRleE9mKCdmYS1mdycpID8ge1xuICAgIHdpZHRoOiBcIlwiLmNvbmNhdCh3aWR0aCAvIGhlaWdodCAqIDE2ICogMC4wNjI1LCBcImVtXCIpXG4gIH0gOiB7fTtcblxuICBpZiAod2F0Y2hhYmxlKSB7XG4gICAgY29udGVudC5hdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gJyc7XG4gIH1cblxuICBpZiAodGl0bGUpIHtcbiAgICBjb250ZW50LmNoaWxkcmVuLnB1c2goe1xuICAgICAgdGFnOiAndGl0bGUnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBpZDogY29udGVudC5hdHRyaWJ1dGVzWydhcmlhLWxhYmVsbGVkYnknXSB8fCBcInRpdGxlLVwiLmNvbmNhdCh0aXRsZUlkIHx8IG5leHRVbmlxdWVJZCgpKVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdGl0bGVdXG4gICAgfSk7XG4gICAgZGVsZXRlIGNvbnRlbnQuYXR0cmlidXRlcy50aXRsZTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSB7IC4uLmNvbnRlbnQsXG4gICAgcHJlZml4LFxuICAgIGljb25OYW1lLFxuICAgIG1haW4sXG4gICAgbWFzayxcbiAgICBtYXNrSWQsXG4gICAgdHJhbnNmb3JtLFxuICAgIHN5bWJvbCxcbiAgICBzdHlsZXM6IHsgLi4udXBsb2FkZWRJY29uV2lkdGhTdHlsZSxcbiAgICAgIC4uLmV4dHJhLnN0eWxlc1xuICAgIH1cbiAgfTtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGF0dHJpYnV0ZXNcbiAgfSA9IG1hc2suZm91bmQgJiYgbWFpbi5mb3VuZCA/IGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVBYnN0cmFjdE1hc2snLCBhcmdzKSB8fCB7XG4gICAgY2hpbGRyZW46IFtdLFxuICAgIGF0dHJpYnV0ZXM6IHt9XG4gIH0gOiBjYWxsUHJvdmlkZWQoJ2dlbmVyYXRlQWJzdHJhY3RJY29uJywgYXJncykgfHwge1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBhdHRyaWJ1dGVzOiB7fVxuICB9O1xuICBhcmdzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIGFyZ3MuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG5cbiAgaWYgKHN5bWJvbCkge1xuICAgIHJldHVybiBhc1N5bWJvbChhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXNJY29uKGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgY29udGVudCxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdHJhbnNmb3JtLFxuICAgIHRpdGxlLFxuICAgIGV4dHJhLFxuICAgIHdhdGNoYWJsZSA9IGZhbHNlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7IC4uLmV4dHJhLmF0dHJpYnV0ZXMsXG4gICAgLi4uKHRpdGxlID8ge1xuICAgICAgJ3RpdGxlJzogdGl0bGVcbiAgICB9IDoge30pLFxuICAgICdjbGFzcyc6IGV4dHJhLmNsYXNzZXMuam9pbignICcpXG4gIH07XG5cbiAgaWYgKHdhdGNoYWJsZSkge1xuICAgIGF0dHJpYnV0ZXNbREFUQV9GQV9JMlNWR10gPSAnJztcbiAgfVxuXG4gIGNvbnN0IHN0eWxlcyA9IHsgLi4uZXh0cmEuc3R5bGVzXG4gIH07XG5cbiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pKSB7XG4gICAgc3R5bGVzWyd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybUZvckNzcyh7XG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdGFydENlbnRlcmVkOiB0cnVlLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9KTtcbiAgICBzdHlsZXNbJy13ZWJraXQtdHJhbnNmb3JtJ10gPSBzdHlsZXNbJ3RyYW5zZm9ybSddO1xuICB9XG5cbiAgY29uc3Qgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlcyk7XG5cbiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICBhdHRyaWJ1dGVzWydzdHlsZSddID0gc3R5bGVTdHJpbmc7XG4gIH1cblxuICBjb25zdCB2YWwgPSBbXTtcbiAgdmFsLnB1c2goe1xuICAgIHRhZzogJ3NwYW4nLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IFtjb250ZW50XVxuICB9KTtcblxuICBpZiAodGl0bGUpIHtcbiAgICB2YWwucHVzaCh7XG4gICAgICB0YWc6ICdzcGFuJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdzci1vbmx5J1xuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdGl0bGVdXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gbWFrZUxheWVyc0NvdW50ZXJBYnN0cmFjdChwYXJhbXMpIHtcbiAgY29uc3Qge1xuICAgIGNvbnRlbnQsXG4gICAgdGl0bGUsXG4gICAgZXh0cmFcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgYXR0cmlidXRlcyA9IHsgLi4uZXh0cmEuYXR0cmlidXRlcyxcbiAgICAuLi4odGl0bGUgPyB7XG4gICAgICAndGl0bGUnOiB0aXRsZVxuICAgIH0gOiB7fSksXG4gICAgJ2NsYXNzJzogZXh0cmEuY2xhc3Nlcy5qb2luKCcgJylcbiAgfTtcbiAgY29uc3Qgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKGV4dHJhLnN0eWxlcyk7XG5cbiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICBhdHRyaWJ1dGVzWydzdHlsZSddID0gc3R5bGVTdHJpbmc7XG4gIH1cblxuICBjb25zdCB2YWwgPSBbXTtcbiAgdmFsLnB1c2goe1xuICAgIHRhZzogJ3NwYW4nLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IFtjb250ZW50XVxuICB9KTtcblxuICBpZiAodGl0bGUpIHtcbiAgICB2YWwucHVzaCh7XG4gICAgICB0YWc6ICdzcGFuJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6ICdzci1vbmx5J1xuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdGl0bGVdXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG5jb25zdCB7XG4gIHN0eWxlczogc3R5bGVzJDFcbn0gPSBuYW1lc3BhY2U7XG5mdW5jdGlvbiBhc0ZvdW5kSWNvbihpY29uKSB7XG4gIGNvbnN0IHdpZHRoID0gaWNvblswXTtcbiAgY29uc3QgaGVpZ2h0ID0gaWNvblsxXTtcbiAgY29uc3QgW3ZlY3RvckRhdGFdID0gaWNvbi5zbGljZSg0KTtcbiAgbGV0IGVsZW1lbnQgPSBudWxsO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHZlY3RvckRhdGEpKSB7XG4gICAgZWxlbWVudCA9IHtcbiAgICAgIHRhZzogJ2cnLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItXCIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuR1JPVVApXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6IFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLVwiKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLlNFQ09OREFSWSksXG4gICAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgICAgZDogdmVjdG9yRGF0YVswXVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6IFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLVwiKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLlBSSU1BUlkpLFxuICAgICAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgICAgIGQ6IHZlY3RvckRhdGFbMV1cbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQgPSB7XG4gICAgICB0YWc6ICdwYXRoJyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgIGQ6IHZlY3RvckRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3VuZDogdHJ1ZSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgaWNvbjogZWxlbWVudFxuICB9O1xufVxuY29uc3QgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4gPSB7XG4gIGZvdW5kOiBmYWxzZSxcbiAgd2lkdGg6IDUxMixcbiAgaGVpZ2h0OiA1MTJcbn07XG5cbmZ1bmN0aW9uIG1heWJlTm90aWZ5TWlzc2luZyhpY29uTmFtZSwgcHJlZml4KSB7XG4gIGlmICghUFJPRFVDVElPTiAmJiAhY29uZmlnLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSWNvbiB3aXRoIG5hbWUgXFxcIlwiLmNvbmNhdChpY29uTmFtZSwgXCJcXFwiIGFuZCBwcmVmaXggXFxcIlwiKS5jb25jYXQocHJlZml4LCBcIlxcXCIgaXMgbWlzc2luZy5cIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpIHtcbiAgbGV0IGdpdmVuUHJlZml4ID0gcHJlZml4O1xuXG4gIGlmIChwcmVmaXggPT09ICdmYScgJiYgY29uZmlnLnN0eWxlRGVmYXVsdCAhPT0gbnVsbCkge1xuICAgIHByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGdpdmVuUHJlZml4ID09PSAnZmEnKSB7XG4gICAgICBjb25zdCBzaGltID0gYnlPbGROYW1lKGljb25OYW1lKSB8fCB7fTtcbiAgICAgIGljb25OYW1lID0gc2hpbS5pY29uTmFtZSB8fCBpY29uTmFtZTtcbiAgICAgIHByZWZpeCA9IHNoaW0ucHJlZml4IHx8IHByZWZpeDtcbiAgICB9XG5cbiAgICBpZiAoaWNvbk5hbWUgJiYgcHJlZml4ICYmIHN0eWxlcyQxW3ByZWZpeF0gJiYgc3R5bGVzJDFbcHJlZml4XVtpY29uTmFtZV0pIHtcbiAgICAgIGNvbnN0IGljb24gPSBzdHlsZXMkMVtwcmVmaXhdW2ljb25OYW1lXTtcbiAgICAgIHJldHVybiByZXNvbHZlKGFzRm91bmRJY29uKGljb24pKTtcbiAgICB9XG5cbiAgICBtYXliZU5vdGlmeU1pc3NpbmcoaWNvbk5hbWUsIHByZWZpeCk7XG4gICAgcmVzb2x2ZSh7IC4uLm1pc3NpbmdJY29uUmVzb2x1dGlvbk1peGluLFxuICAgICAgaWNvbjogY29uZmlnLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUgPyBjYWxsUHJvdmlkZWQoJ21pc3NpbmdJY29uQWJzdHJhY3QnKSB8fCB7fSA6IHt9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBub29wJDEgPSAoKSA9PiB7fTtcblxuY29uc3QgcCQyID0gY29uZmlnLm1lYXN1cmVQZXJmb3JtYW5jZSAmJiBQRVJGT1JNQU5DRSAmJiBQRVJGT1JNQU5DRS5tYXJrICYmIFBFUkZPUk1BTkNFLm1lYXN1cmUgPyBQRVJGT1JNQU5DRSA6IHtcbiAgbWFyazogbm9vcCQxLFxuICBtZWFzdXJlOiBub29wJDFcbn07XG5jb25zdCBwcmVhbWJsZSA9IFwiRkEgXFxcIjYuNi4wXFxcIlwiO1xuXG5jb25zdCBiZWdpbiA9IG5hbWUgPT4ge1xuICBwJDIubWFyayhcIlwiLmNvbmNhdChwcmVhbWJsZSwgXCIgXCIpLmNvbmNhdChuYW1lLCBcIiBiZWdpbnNcIikpO1xuICByZXR1cm4gKCkgPT4gZW5kKG5hbWUpO1xufTtcblxuY29uc3QgZW5kID0gbmFtZSA9PiB7XG4gIHAkMi5tYXJrKFwiXCIuY29uY2F0KHByZWFtYmxlLCBcIiBcIikuY29uY2F0KG5hbWUsIFwiIGVuZHNcIikpO1xuICBwJDIubWVhc3VyZShcIlwiLmNvbmNhdChwcmVhbWJsZSwgXCIgXCIpLmNvbmNhdChuYW1lKSwgXCJcIi5jb25jYXQocHJlYW1ibGUsIFwiIFwiKS5jb25jYXQobmFtZSwgXCIgYmVnaW5zXCIpLCBcIlwiLmNvbmNhdChwcmVhbWJsZSwgXCIgXCIpLmNvbmNhdChuYW1lLCBcIiBlbmRzXCIpKTtcbn07XG5cbnZhciBwZXJmID0ge1xuICBiZWdpbixcbiAgZW5kXG59O1xuXG5jb25zdCBub29wJDIgPSAoKSA9PiB7fTtcblxuZnVuY3Rpb24gaXNXYXRjaGVkKG5vZGUpIHtcbiAgY29uc3QgaTJzdmcgPSBub2RlLmdldEF0dHJpYnV0ZSA/IG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpIDogbnVsbDtcbiAgcmV0dXJuIHR5cGVvZiBpMnN2ZyA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGhhc1ByZWZpeEFuZEljb24obm9kZSkge1xuICBjb25zdCBwcmVmaXggPSBub2RlLmdldEF0dHJpYnV0ZSA/IG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfUFJFRklYKSA6IG51bGw7XG4gIGNvbnN0IGljb24gPSBub2RlLmdldEF0dHJpYnV0ZSA/IG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgOiBudWxsO1xuICByZXR1cm4gcHJlZml4ICYmIGljb247XG59XG5cbmZ1bmN0aW9uIGhhc0JlZW5SZXBsYWNlZChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUuY2xhc3NMaXN0ICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNvbmZpZy5yZXBsYWNlbWVudENsYXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0TXV0YXRvcigpIHtcbiAgaWYgKGNvbmZpZy5hdXRvUmVwbGFjZVN2ZyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlO1xuICB9XG5cbiAgY29uc3QgbXV0YXRvciA9IG11dGF0b3JzW2NvbmZpZy5hdXRvUmVwbGFjZVN2Z107XG4gIHJldHVybiBtdXRhdG9yIHx8IG11dGF0b3JzLnJlcGxhY2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyh0YWcpIHtcbiAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCB0YWcpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZykge1xuICByZXR1cm4gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCh0YWcpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0U1ZHKGFic3RyYWN0T2JqKSB7XG4gIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBjb25zdCB7XG4gICAgY2VGbiA9IGFic3RyYWN0T2JqLnRhZyA9PT0gJ3N2ZycgPyBjcmVhdGVFbGVtZW50TlMgOiBjcmVhdGVFbGVtZW50XG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKHR5cGVvZiBhYnN0cmFjdE9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gRE9DVU1FTlQuY3JlYXRlVGV4dE5vZGUoYWJzdHJhY3RPYmopO1xuICB9XG5cbiAgY29uc3QgdGFnID0gY2VGbihhYnN0cmFjdE9iai50YWcpO1xuICBPYmplY3Qua2V5cyhhYnN0cmFjdE9iai5hdHRyaWJ1dGVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKGtleSwgYWJzdHJhY3RPYmouYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG4gIGNvbnN0IGNoaWxkcmVuID0gYWJzdHJhY3RPYmouY2hpbGRyZW4gfHwgW107XG4gIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgdGFnLmFwcGVuZENoaWxkKGNvbnZlcnRTVkcoY2hpbGQsIHtcbiAgICAgIGNlRm5cbiAgICB9KSk7XG4gIH0pO1xuICByZXR1cm4gdGFnO1xufVxuXG5mdW5jdGlvbiBub2RlQXNDb21tZW50KG5vZGUpIHtcbiAgbGV0IGNvbW1lbnQgPSBcIiBcIi5jb25jYXQobm9kZS5vdXRlckhUTUwsIFwiIFwiKTtcbiAgLyogQkVHSU4uQVRUUklCVVRJT04gKi9cblxuICBjb21tZW50ID0gXCJcIi5jb25jYXQoY29tbWVudCwgXCJGb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tIFwiKTtcbiAgLyogRU5ELkFUVFJJQlVUSU9OICovXG5cbiAgcmV0dXJuIGNvbW1lbnQ7XG59XG5cbmNvbnN0IG11dGF0b3JzID0ge1xuICByZXBsYWNlOiBmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICBjb25zdCBub2RlID0gbXV0YXRpb25bMF07XG5cbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBtdXRhdGlvblsxXS5mb3JFYWNoKGFic3RyYWN0ID0+IHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb252ZXJ0U1ZHKGFic3RyYWN0KSwgbm9kZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpID09PSBudWxsICYmIGNvbmZpZy5rZWVwT3JpZ2luYWxTb3VyY2UpIHtcbiAgICAgICAgbGV0IGNvbW1lbnQgPSBET0NVTUVOVC5jcmVhdGVDb21tZW50KG5vZGVBc0NvbW1lbnQobm9kZSkpO1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbW1lbnQsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG5lc3Q6IGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvblswXTtcbiAgICBjb25zdCBhYnN0cmFjdCA9IG11dGF0aW9uWzFdOyAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSByZXBsYWNlZCBub2RlIHdlIGRvIG5vdCB3YW50IHRvIGNvbnRpbnVlIG5lc3Rpbmcgd2l0aGluIGl0LlxuICAgIC8vIFNob3J0LWNpcmN1aXQgdG8gdGhlIHN0YW5kYXJkIHJlcGxhY2VtZW50XG5cbiAgICBpZiAofmNsYXNzQXJyYXkobm9kZSkuaW5kZXhPZihjb25maWcucmVwbGFjZW1lbnRDbGFzcykpIHtcbiAgICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlKG11dGF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JTdmcgPSBuZXcgUmVnRXhwKFwiXCIuY29uY2F0KGNvbmZpZy5jc3NQcmVmaXgsIFwiLS4qXCIpKTtcbiAgICBkZWxldGUgYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5pZDtcblxuICAgIGlmIChhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzKSB7XG4gICAgICBjb25zdCBzcGxpdENsYXNzZXMgPSBhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzLnNwbGl0KCcgJykucmVkdWNlKChhY2MsIGNscykgPT4ge1xuICAgICAgICBpZiAoY2xzID09PSBjb25maWcucmVwbGFjZW1lbnRDbGFzcyB8fCBjbHMubWF0Y2goZm9yU3ZnKSkge1xuICAgICAgICAgIGFjYy50b1N2Zy5wdXNoKGNscyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjLnRvTm9kZS5wdXNoKGNscyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge1xuICAgICAgICB0b05vZGU6IFtdLFxuICAgICAgICB0b1N2ZzogW11cbiAgICAgIH0pO1xuICAgICAgYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcyA9IHNwbGl0Q2xhc3Nlcy50b1N2Zy5qb2luKCcgJyk7XG5cbiAgICAgIGlmIChzcGxpdENsYXNzZXMudG9Ob2RlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHNwbGl0Q2xhc3Nlcy50b05vZGUuam9pbignICcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbm5lckhUTUwgPSBhYnN0cmFjdC5tYXAoYSA9PiB0b0h0bWwoYSkpLmpvaW4oJ1xcbicpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcsICcnKTtcbiAgICBub2RlLmlubmVySFRNTCA9IG5ld0lubmVySFRNTDtcbiAgfVxufTtcblxuZnVuY3Rpb24gcGVyZm9ybU9wZXJhdGlvblN5bmMob3ApIHtcbiAgb3AoKTtcbn1cblxuZnVuY3Rpb24gcGVyZm9ybShtdXRhdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGNhbGxiYWNrRnVuY3Rpb24gPSB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3AkMjtcblxuICBpZiAobXV0YXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIGNhbGxiYWNrRnVuY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgZnJhbWUgPSBwZXJmb3JtT3BlcmF0aW9uU3luYztcblxuICAgIGlmIChjb25maWcubXV0YXRlQXBwcm9hY2ggPT09IE1VVEFUSU9OX0FQUFJPQUNIX0FTWU5DKSB7XG4gICAgICBmcmFtZSA9IFdJTkRPVy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgcGVyZm9ybU9wZXJhdGlvblN5bmM7XG4gICAgfVxuXG4gICAgZnJhbWUoKCkgPT4ge1xuICAgICAgY29uc3QgbXV0YXRvciA9IGdldE11dGF0b3IoKTtcbiAgICAgIGNvbnN0IG1hcmsgPSBwZXJmLmJlZ2luKCdtdXRhdGUnKTtcbiAgICAgIG11dGF0aW9ucy5tYXAobXV0YXRvcik7XG4gICAgICBtYXJrKCk7XG4gICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gICAgfSk7XG4gIH1cbn1cbmxldCBkaXNhYmxlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZGlzYWJsZU9ic2VydmF0aW9uKCkge1xuICBkaXNhYmxlZCA9IHRydWU7XG59XG5mdW5jdGlvbiBlbmFibGVPYnNlcnZhdGlvbigpIHtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbn1cbmxldCBtbyQxID0gbnVsbDtcbmZ1bmN0aW9uIG9ic2VydmUob3B0aW9ucykge1xuICBpZiAoIU1VVEFUSU9OX09CU0VSVkVSKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFjb25maWcub2JzZXJ2ZU11dGF0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB0cmVlQ2FsbGJhY2sgPSBub29wJDIsXG4gICAgbm9kZUNhbGxiYWNrID0gbm9vcCQyLFxuICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBub29wJDIsXG4gICAgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBET0NVTUVOVFxuICB9ID0gb3B0aW9ucztcbiAgbW8kMSA9IG5ldyBNVVRBVElPTl9PQlNFUlZFUihvYmplY3RzID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBkZWZhdWx0UHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpO1xuICAgIHRvQXJyYXkob2JqZWN0cykuZm9yRWFjaChtdXRhdGlvblJlY29yZCA9PiB7XG4gICAgICBpZiAobXV0YXRpb25SZWNvcmQudHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb25SZWNvcmQuYWRkZWROb2Rlcy5sZW5ndGggPiAwICYmICFpc1dhdGNoZWQobXV0YXRpb25SZWNvcmQuYWRkZWROb2Rlc1swXSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5zZWFyY2hQc2V1ZG9FbGVtZW50cykge1xuICAgICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyZWVDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAobXV0YXRpb25SZWNvcmQudHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG11dGF0aW9uUmVjb3JkLnRhcmdldC5wYXJlbnROb2RlICYmIGNvbmZpZy5zZWFyY2hQc2V1ZG9FbGVtZW50cykge1xuICAgICAgICBwc2V1ZG9FbGVtZW50c0NhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldC5wYXJlbnROb2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJiBpc1dhdGNoZWQobXV0YXRpb25SZWNvcmQudGFyZ2V0KSAmJiB+QVRUUklCVVRFU19XQVRDSEVEX0ZPUl9NVVRBVElPTi5pbmRleE9mKG11dGF0aW9uUmVjb3JkLmF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGlmIChtdXRhdGlvblJlY29yZC5hdHRyaWJ1dGVOYW1lID09PSAnY2xhc3MnICYmIGhhc1ByZWZpeEFuZEljb24obXV0YXRpb25SZWNvcmQudGFyZ2V0KSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGljb25OYW1lXG4gICAgICAgICAgfSA9IGdldENhbm9uaWNhbEljb24oY2xhc3NBcnJheShtdXRhdGlvblJlY29yZC50YXJnZXQpKTtcbiAgICAgICAgICBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfUFJFRklYLCBwcmVmaXggfHwgZGVmYXVsdFByZWZpeCk7XG4gICAgICAgICAgaWYgKGljb25OYW1lKSBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfSUNPTiwgaWNvbk5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0JlZW5SZXBsYWNlZChtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7XG4gICAgICAgICAgbm9kZUNhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIG1vJDEub2JzZXJ2ZShvYnNlcnZlTXV0YXRpb25zUm9vdCwge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgc3VidHJlZTogdHJ1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIGRpc2Nvbm5lY3QoKSB7XG4gIGlmICghbW8kMSkgcmV0dXJuO1xuICBtbyQxLmRpc2Nvbm5lY3QoKTtcbn1cblxuZnVuY3Rpb24gc3R5bGVQYXJzZXIgKG5vZGUpIHtcbiAgY29uc3Qgc3R5bGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgbGV0IHZhbCA9IFtdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHZhbCA9IHN0eWxlLnNwbGl0KCc7JykucmVkdWNlKChhY2MsIHN0eWxlKSA9PiB7XG4gICAgICBjb25zdCBzdHlsZXMgPSBzdHlsZS5zcGxpdCgnOicpO1xuICAgICAgY29uc3QgcHJvcCA9IHN0eWxlc1swXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gc3R5bGVzLnNsaWNlKDEpO1xuXG4gICAgICBpZiAocHJvcCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFjY1twcm9wXSA9IHZhbHVlLmpvaW4oJzonKS50cmltKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gY2xhc3NQYXJzZXIgKG5vZGUpIHtcbiAgY29uc3QgZXhpc3RpbmdQcmVmaXggPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmVmaXgnKTtcbiAgY29uc3QgZXhpc3RpbmdJY29uTmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWljb24nKTtcbiAgY29uc3QgaW5uZXJUZXh0ID0gbm9kZS5pbm5lclRleHQgIT09IHVuZGVmaW5lZCA/IG5vZGUuaW5uZXJUZXh0LnRyaW0oKSA6ICcnO1xuICBsZXQgdmFsID0gZ2V0Q2Fub25pY2FsSWNvbihjbGFzc0FycmF5KG5vZGUpKTtcblxuICBpZiAoIXZhbC5wcmVmaXgpIHtcbiAgICB2YWwucHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nUHJlZml4ICYmIGV4aXN0aW5nSWNvbk5hbWUpIHtcbiAgICB2YWwucHJlZml4ID0gZXhpc3RpbmdQcmVmaXg7XG4gICAgdmFsLmljb25OYW1lID0gZXhpc3RpbmdJY29uTmFtZTtcbiAgfVxuXG4gIGlmICh2YWwuaWNvbk5hbWUgJiYgdmFsLnByZWZpeCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBpZiAodmFsLnByZWZpeCAmJiBpbm5lclRleHQubGVuZ3RoID4gMCkge1xuICAgIHZhbC5pY29uTmFtZSA9IGJ5TGlnYXR1cmUodmFsLnByZWZpeCwgbm9kZS5pbm5lclRleHQpIHx8IGJ5VW5pY29kZSh2YWwucHJlZml4LCB0b0hleChub2RlLmlubmVyVGV4dCkpO1xuICB9XG5cbiAgaWYgKCF2YWwuaWNvbk5hbWUgJiYgY29uZmlnLmF1dG9GZXRjaFN2ZyAmJiBub2RlLmZpcnN0Q2hpbGQgJiYgbm9kZS5maXJzdENoaWxkLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHZhbC5pY29uTmFtZSA9IG5vZGUuZmlyc3RDaGlsZC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gYXR0cmlidXRlc1BhcnNlciAobm9kZSkge1xuICBjb25zdCBleHRyYUF0dHJpYnV0ZXMgPSB0b0FycmF5KG5vZGUuYXR0cmlidXRlcykucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcbiAgICBpZiAoYWNjLm5hbWUgIT09ICdjbGFzcycgJiYgYWNjLm5hbWUgIT09ICdzdHlsZScpIHtcbiAgICAgIGFjY1thdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIGNvbnN0IHRpdGxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gIGNvbnN0IHRpdGxlSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS10aXRsZS1pZCcpO1xuXG4gIGlmIChjb25maWcuYXV0b0ExMXkpIHtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlc1snYXJpYS1sYWJlbGxlZGJ5J10gPSBcIlwiLmNvbmNhdChjb25maWcucmVwbGFjZW1lbnRDbGFzcywgXCItdGl0bGUtXCIpLmNvbmNhdCh0aXRsZUlkIHx8IG5leHRVbmlxdWVJZCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzWydmb2N1c2FibGUnXSA9ICdmYWxzZSc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4dHJhQXR0cmlidXRlcztcbn1cblxuZnVuY3Rpb24gYmxhbmtNZXRhKCkge1xuICByZXR1cm4ge1xuICAgIGljb25OYW1lOiBudWxsLFxuICAgIHRpdGxlOiBudWxsLFxuICAgIHRpdGxlSWQ6IG51bGwsXG4gICAgcHJlZml4OiBudWxsLFxuICAgIHRyYW5zZm9ybTogbWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgc3ltYm9sOiBmYWxzZSxcbiAgICBtYXNrOiB7XG4gICAgICBpY29uTmFtZTogbnVsbCxcbiAgICAgIHByZWZpeDogbnVsbCxcbiAgICAgIHJlc3Q6IFtdXG4gICAgfSxcbiAgICBtYXNrSWQ6IG51bGwsXG4gICAgZXh0cmE6IHtcbiAgICAgIGNsYXNzZXM6IFtdLFxuICAgICAgc3R5bGVzOiB7fSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gcGFyc2VNZXRhKG5vZGUpIHtcbiAgbGV0IHBhcnNlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIHN0eWxlUGFyc2VyOiB0cnVlXG4gIH07XG4gIGNvbnN0IHtcbiAgICBpY29uTmFtZSxcbiAgICBwcmVmaXgsXG4gICAgcmVzdDogZXh0cmFDbGFzc2VzXG4gIH0gPSBjbGFzc1BhcnNlcihub2RlKTtcbiAgY29uc3QgZXh0cmFBdHRyaWJ1dGVzID0gYXR0cmlidXRlc1BhcnNlcihub2RlKTtcbiAgY29uc3QgcGx1Z2luTWV0YSA9IGNoYWluSG9va3MoJ3BhcnNlTm9kZUF0dHJpYnV0ZXMnLCB7fSwgbm9kZSk7XG4gIGxldCBleHRyYVN0eWxlcyA9IHBhcnNlci5zdHlsZVBhcnNlciA/IHN0eWxlUGFyc2VyKG5vZGUpIDogW107XG4gIHJldHVybiB7XG4gICAgaWNvbk5hbWUsXG4gICAgdGl0bGU6IG5vZGUuZ2V0QXR0cmlidXRlKCd0aXRsZScpLFxuICAgIHRpdGxlSWQ6IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWZhLXRpdGxlLWlkJyksXG4gICAgcHJlZml4LFxuICAgIHRyYW5zZm9ybTogbWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgbWFzazoge1xuICAgICAgaWNvbk5hbWU6IG51bGwsXG4gICAgICBwcmVmaXg6IG51bGwsXG4gICAgICByZXN0OiBbXVxuICAgIH0sXG4gICAgbWFza0lkOiBudWxsLFxuICAgIHN5bWJvbDogZmFsc2UsXG4gICAgZXh0cmE6IHtcbiAgICAgIGNsYXNzZXM6IGV4dHJhQ2xhc3NlcyxcbiAgICAgIHN0eWxlczogZXh0cmFTdHlsZXMsXG4gICAgICBhdHRyaWJ1dGVzOiBleHRyYUF0dHJpYnV0ZXNcbiAgICB9LFxuICAgIC4uLnBsdWdpbk1ldGFcbiAgfTtcbn1cblxuY29uc3Qge1xuICBzdHlsZXM6IHN0eWxlcyQyXG59ID0gbmFtZXNwYWNlO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZU11dGF0aW9uKG5vZGUpIHtcbiAgY29uc3Qgbm9kZU1ldGEgPSBjb25maWcuYXV0b1JlcGxhY2VTdmcgPT09ICduZXN0JyA/IHBhcnNlTWV0YShub2RlLCB7XG4gICAgc3R5bGVQYXJzZXI6IGZhbHNlXG4gIH0pIDogcGFyc2VNZXRhKG5vZGUpO1xuXG4gIGlmICh+bm9kZU1ldGEuZXh0cmEuY2xhc3Nlcy5pbmRleE9mKExBWUVSU19URVhUX0NMQVNTTkFNRSkpIHtcbiAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCdnZW5lcmF0ZUxheWVyc1RleHQnLCBub2RlLCBub2RlTWV0YSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uJywgbm9kZSwgbm9kZU1ldGEpO1xuICB9XG59XG5cbmxldCBrbm93blByZWZpeGVzID0gbmV3IFNldCgpO1xuRkFNSUxJRVMubWFwKGZhbWlseSA9PiB7XG4gIGtub3duUHJlZml4ZXMuYWRkKFwiZmEtXCIuY29uY2F0KGZhbWlseSkpO1xufSk7XG5PYmplY3Qua2V5cyhQUkVGSVhfVE9fU1RZTEVbYV0pLm1hcChrbm93blByZWZpeGVzLmFkZC5iaW5kKGtub3duUHJlZml4ZXMpKTtcbk9iamVjdC5rZXlzKFBSRUZJWF9UT19TVFlMRVtyXSkubWFwKGtub3duUHJlZml4ZXMuYWRkLmJpbmQoa25vd25QcmVmaXhlcykpO1xuT2JqZWN0LmtleXMoUFJFRklYX1RPX1NUWUxFW29dKS5tYXAoa25vd25QcmVmaXhlcy5hZGQuYmluZChrbm93blByZWZpeGVzKSk7XG5rbm93blByZWZpeGVzID0gWy4uLmtub3duUHJlZml4ZXNdO1xuXG5mdW5jdGlvbiBvblRyZWUocm9vdCkge1xuICBsZXQgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gIGlmICghSVNfRE9NKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIGNvbnN0IGh0bWxDbGFzc0xpc3QgPSBET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0O1xuXG4gIGNvbnN0IGhjbEFkZCA9IHN1ZmZpeCA9PiBodG1sQ2xhc3NMaXN0LmFkZChcIlwiLmNvbmNhdChIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MsIFwiLVwiKS5jb25jYXQoc3VmZml4KSk7XG5cbiAgY29uc3QgaGNsUmVtb3ZlID0gc3VmZml4ID0+IGh0bWxDbGFzc0xpc3QucmVtb3ZlKFwiXCIuY29uY2F0KEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgXCItXCIpLmNvbmNhdChzdWZmaXgpKTtcblxuICBjb25zdCBwcmVmaXhlcyA9IGNvbmZpZy5hdXRvRmV0Y2hTdmcgPyBrbm93blByZWZpeGVzIDogRkFNSUxJRVMubWFwKGYkJDEgPT4gXCJmYS1cIi5jb25jYXQoZiQkMSkpLmNvbmNhdChPYmplY3Qua2V5cyhzdHlsZXMkMikpO1xuXG4gIGlmICghcHJlZml4ZXMuaW5jbHVkZXMoJ2ZhJykpIHtcbiAgICBwcmVmaXhlcy5wdXNoKCdmYScpO1xuICB9XG5cbiAgY29uc3QgcHJlZml4ZXNEb21RdWVyeSA9IFtcIi5cIi5jb25jYXQoTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCBcIjpub3QoW1wiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgXCJdKVwiKV0uY29uY2F0KHByZWZpeGVzLm1hcChwJCQxID0+IFwiLlwiLmNvbmNhdChwJCQxLCBcIjpub3QoW1wiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgXCJdKVwiKSkpLmpvaW4oJywgJyk7XG5cbiAgaWYgKHByZWZpeGVzRG9tUXVlcnkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZXMgPSBbXTtcblxuICB0cnkge1xuICAgIGNhbmRpZGF0ZXMgPSB0b0FycmF5KHJvb3QucXVlcnlTZWxlY3RvckFsbChwcmVmaXhlc0RvbVF1ZXJ5KSk7XG4gIH0gY2F0Y2ggKGUkJDEpIHsvLyBub29wXG4gIH1cblxuICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgaGNsQWRkKCdwZW5kaW5nJyk7XG4gICAgaGNsUmVtb3ZlKCdjb21wbGV0ZScpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGNvbnN0IG1hcmsgPSBwZXJmLmJlZ2luKCdvblRyZWUnKTtcbiAgY29uc3QgbXV0YXRpb25zID0gY2FuZGlkYXRlcy5yZWR1Y2UoKGFjYywgbm9kZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtdXRhdGlvbiA9IGdlbmVyYXRlTXV0YXRpb24obm9kZSk7XG5cbiAgICAgIGlmIChtdXRhdGlvbikge1xuICAgICAgICBhY2MucHVzaChtdXRhdGlvbik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSQkMSkge1xuICAgICAgaWYgKCFQUk9EVUNUSU9OKSB7XG4gICAgICAgIGlmIChlJCQxLm5hbWUgPT09ICdNaXNzaW5nSWNvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUkJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIFByb21pc2UuYWxsKG11dGF0aW9ucykudGhlbihyZXNvbHZlZE11dGF0aW9ucyA9PiB7XG4gICAgICBwZXJmb3JtKHJlc29sdmVkTXV0YXRpb25zLCAoKSA9PiB7XG4gICAgICAgIGhjbEFkZCgnYWN0aXZlJyk7XG4gICAgICAgIGhjbEFkZCgnY29tcGxldGUnKTtcbiAgICAgICAgaGNsUmVtb3ZlKCdwZW5kaW5nJyk7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgIG1hcmsoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZSQkMSA9PiB7XG4gICAgICBtYXJrKCk7XG4gICAgICByZWplY3QoZSQkMSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvbk5vZGUobm9kZSkge1xuICBsZXQgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gIGdlbmVyYXRlTXV0YXRpb24obm9kZSkudGhlbihtdXRhdGlvbiA9PiB7XG4gICAgaWYgKG11dGF0aW9uKSB7XG4gICAgICBwZXJmb3JtKFttdXRhdGlvbl0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlSWNvbnMobmV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKG1heWJlSWNvbkRlZmluaXRpb24pIHtcbiAgICBsZXQgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICBjb25zdCBpY29uRGVmaW5pdGlvbiA9IChtYXliZUljb25EZWZpbml0aW9uIHx8IHt9KS5pY29uID8gbWF5YmVJY29uRGVmaW5pdGlvbiA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXliZUljb25EZWZpbml0aW9uIHx8IHt9KTtcbiAgICBsZXQge1xuICAgICAgbWFza1xuICAgIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAobWFzaykge1xuICAgICAgbWFzayA9IChtYXNrIHx8IHt9KS5pY29uID8gbWFzayA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXNrIHx8IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChpY29uRGVmaW5pdGlvbiwgeyAuLi5wYXJhbXMsXG4gICAgICBtYXNrXG4gICAgfSk7XG4gIH07XG59XG5cbmNvbnN0IHJlbmRlciA9IGZ1bmN0aW9uIChpY29uRGVmaW5pdGlvbikge1xuICBsZXQgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgY29uc3Qge1xuICAgIHRyYW5zZm9ybSA9IG1lYW5pbmdsZXNzVHJhbnNmb3JtLFxuICAgIHN5bWJvbCA9IGZhbHNlLFxuICAgIG1hc2sgPSBudWxsLFxuICAgIG1hc2tJZCA9IG51bGwsXG4gICAgdGl0bGUgPSBudWxsLFxuICAgIHRpdGxlSWQgPSBudWxsLFxuICAgIGNsYXNzZXMgPSBbXSxcbiAgICBhdHRyaWJ1dGVzID0ge30sXG4gICAgc3R5bGVzID0ge31cbiAgfSA9IHBhcmFtcztcbiAgaWYgKCFpY29uRGVmaW5pdGlvbikgcmV0dXJuO1xuICBjb25zdCB7XG4gICAgcHJlZml4LFxuICAgIGljb25OYW1lLFxuICAgIGljb25cbiAgfSA9IGljb25EZWZpbml0aW9uO1xuICByZXR1cm4gZG9tVmFyaWFudHMoe1xuICAgIHR5cGU6ICdpY29uJyxcbiAgICAuLi5pY29uRGVmaW5pdGlvblxuICB9LCAoKSA9PiB7XG4gICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICBpY29uRGVmaW5pdGlvbixcbiAgICAgIHBhcmFtc1xuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5hdXRvQTExeSkge1xuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ2FyaWEtbGFiZWxsZWRieSddID0gXCJcIi5jb25jYXQoY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsIFwiLXRpdGxlLVwiKS5jb25jYXQodGl0bGVJZCB8fCBuZXh0VW5pcXVlSWQoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgICBhdHRyaWJ1dGVzWydmb2N1c2FibGUnXSA9ICdmYWxzZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJbmxpbmVTdmdBYnN0cmFjdCh7XG4gICAgICBpY29uczoge1xuICAgICAgICBtYWluOiBhc0ZvdW5kSWNvbihpY29uKSxcbiAgICAgICAgbWFzazogbWFzayA/IGFzRm91bmRJY29uKG1hc2suaWNvbikgOiB7XG4gICAgICAgICAgZm91bmQ6IGZhbHNlLFxuICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgICBpY29uOiB7fVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJlZml4LFxuICAgICAgaWNvbk5hbWUsXG4gICAgICB0cmFuc2Zvcm06IHsgLi4ubWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgICAgIC4uLnRyYW5zZm9ybVxuICAgICAgfSxcbiAgICAgIHN5bWJvbCxcbiAgICAgIHRpdGxlLFxuICAgICAgbWFza0lkLFxuICAgICAgdGl0bGVJZCxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIHN0eWxlcyxcbiAgICAgICAgY2xhc3Nlc1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG52YXIgUmVwbGFjZUVsZW1lbnRzID0ge1xuICBtaXhvdXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246IHJlc29sdmVJY29ucyhyZW5kZXIpXG4gICAgfTtcbiAgfSxcblxuICBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyhhY2N1bXVsYXRvcikge1xuICAgICAgICBhY2N1bXVsYXRvci50cmVlQ2FsbGJhY2sgPSBvblRyZWU7XG4gICAgICAgIGFjY3VtdWxhdG9yLm5vZGVDYWxsYmFjayA9IG9uTm9kZTtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuXG4gICAgfTtcbiAgfSxcblxuICBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHtcbiAgICBwcm92aWRlcnMkJDEuaTJzdmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG5vZGUgPSBET0NVTUVOVCxcbiAgICAgICAgY2FsbGJhY2sgPSAoKSA9PiB7fVxuICAgICAgfSA9IHBhcmFtcztcbiAgICAgIHJldHVybiBvblRyZWUobm9kZSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVNZXRhKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGljb25OYW1lLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgdGl0bGVJZCxcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIHN5bWJvbCxcbiAgICAgICAgbWFzayxcbiAgICAgICAgbWFza0lkLFxuICAgICAgICBleHRyYVxuICAgICAgfSA9IG5vZGVNZXRhO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgUHJvbWlzZS5hbGwoW2ZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpLCBtYXNrLmljb25OYW1lID8gZmluZEljb24obWFzay5pY29uTmFtZSwgbWFzay5wcmVmaXgpIDogUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICBmb3VuZDogZmFsc2UsXG4gICAgICAgICAgd2lkdGg6IDUxMixcbiAgICAgICAgICBoZWlnaHQ6IDUxMixcbiAgICAgICAgICBpY29uOiB7fVxuICAgICAgICB9KV0pLnRoZW4oX3JlZiA9PiB7XG4gICAgICAgICAgbGV0IFttYWluLCBtYXNrXSA9IF9yZWY7XG4gICAgICAgICAgcmVzb2x2ZShbbm9kZSwgbWFrZUlubGluZVN2Z0Fic3RyYWN0KHtcbiAgICAgICAgICAgIGljb25zOiB7XG4gICAgICAgICAgICAgIG1haW4sXG4gICAgICAgICAgICAgIG1hc2tcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBpY29uTmFtZSxcbiAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgIG1hc2tJZCxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgdGl0bGVJZCxcbiAgICAgICAgICAgIGV4dHJhLFxuICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlXG4gICAgICAgICAgfSldKTtcbiAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVBYnN0cmFjdEljb24gPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICBtYWluLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIHN0eWxlc1xuICAgICAgfSA9IF9yZWYyO1xuICAgICAgY29uc3Qgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlcyk7XG5cbiAgICAgIGlmIChzdHlsZVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ3N0eWxlJ10gPSBzdHlsZVN0cmluZztcbiAgICAgIH1cblxuICAgICAgbGV0IG5leHRDaGlsZDtcblxuICAgICAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0pKSB7XG4gICAgICAgIG5leHRDaGlsZCA9IGNhbGxQcm92aWRlZCgnZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nJywge1xuICAgICAgICAgIG1haW4sXG4gICAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYWluLndpZHRoLFxuICAgICAgICAgIGljb25XaWR0aDogbWFpbi53aWR0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaChuZXh0Q2hpbGQgfHwgbWFpbi5pY29uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxufTtcblxudmFyIExheWVycyA9IHtcbiAgbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXllcihhc3NlbWJsZXIpIHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjbGFzc2VzID0gW11cbiAgICAgICAgfSA9IHBhcmFtcztcbiAgICAgICAgcmV0dXJuIGRvbVZhcmlhbnRzKHtcbiAgICAgICAgICB0eXBlOiAnbGF5ZXInXG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICBjYWxsSG9va3MoJ2JlZm9yZURPTUVsZW1lbnRDcmVhdGlvbicsIHtcbiAgICAgICAgICAgIGFzc2VtYmxlcixcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICAgIGFzc2VtYmxlcihhcmdzID0+IHtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzLm1hcChhID0+IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoYS5hYnN0cmFjdCk7XG4gICAgICAgICAgICB9KSA6IGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGFyZ3MuYWJzdHJhY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIGNsYXNzOiBbXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItbGF5ZXJzXCIpLCAuLi5jbGFzc2VzXS5qb2luKCcgJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGlsZHJlblxuICAgICAgICAgIH1dO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH07XG4gIH1cblxufTtcblxudmFyIExheWVyc0NvdW50ZXIgPSB7XG4gIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY291bnRlcihjb250ZW50KSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdGl0bGUgPSBudWxsLFxuICAgICAgICAgIGNsYXNzZXMgPSBbXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzID0ge30sXG4gICAgICAgICAgc3R5bGVzID0ge31cbiAgICAgICAgfSA9IHBhcmFtcztcbiAgICAgICAgcmV0dXJuIGRvbVZhcmlhbnRzKHtcbiAgICAgICAgICB0eXBlOiAnY291bnRlcicsXG4gICAgICAgICAgY29udGVudFxuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgY2FsbEhvb2tzKCdiZWZvcmVET01FbGVtZW50Q3JlYXRpb24nLCB7XG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgcGFyYW1zXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG1ha2VMYXllcnNDb3VudGVyQWJzdHJhY3Qoe1xuICAgICAgICAgICAgY29udGVudDogY29udGVudC50b1N0cmluZygpLFxuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICBzdHlsZXMsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFtcIlwiLmNvbmNhdChjb25maWcuY3NzUHJlZml4LCBcIi1sYXllcnMtY291bnRlclwiKSwgLi4uY2xhc3Nlc11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbn07XG5cbnZhciBMYXllcnNUZXh0ID0ge1xuICBtaXhvdXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQoY29udGVudCkge1xuICAgICAgICBsZXQgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHRyYW5zZm9ybSA9IG1lYW5pbmdsZXNzVHJhbnNmb3JtLFxuICAgICAgICAgIHRpdGxlID0gbnVsbCxcbiAgICAgICAgICBjbGFzc2VzID0gW10sXG4gICAgICAgICAgYXR0cmlidXRlcyA9IHt9LFxuICAgICAgICAgIHN0eWxlcyA9IHt9XG4gICAgICAgIH0gPSBwYXJhbXM7XG4gICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgIGNhbGxIb29rcygnYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uJywge1xuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHtcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHsgLi4ubWVhbmluZ2xlc3NUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgIC4uLnRyYW5zZm9ybVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgc3R5bGVzLFxuICAgICAgICAgICAgICBjbGFzc2VzOiBbXCJcIi5jb25jYXQoY29uZmlnLmNzc1ByZWZpeCwgXCItbGF5ZXJzLXRleHRcIiksIC4uLmNsYXNzZXNdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfTtcbiAgfSxcblxuICBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHtcbiAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVMYXllcnNUZXh0ID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVNZXRhKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRpdGxlLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIGV4dHJhXG4gICAgICB9ID0gbm9kZU1ldGE7XG4gICAgICBsZXQgd2lkdGggPSBudWxsO1xuICAgICAgbGV0IGhlaWdodCA9IG51bGw7XG5cbiAgICAgIGlmIChJU19JRSkge1xuICAgICAgICBjb25zdCBjb21wdXRlZEZvbnRTaXplID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5mb250U2l6ZSwgMTApO1xuICAgICAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB3aWR0aCA9IGJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCAvIGNvbXB1dGVkRm9udFNpemU7XG4gICAgICAgIGhlaWdodCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLyBjb21wdXRlZEZvbnRTaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLmF1dG9BMTF5ICYmICF0aXRsZSkge1xuICAgICAgICBleHRyYS5hdHRyaWJ1dGVzWydhcmlhLWhpZGRlbiddID0gJ3RydWUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtub2RlLCBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHtcbiAgICAgICAgY29udGVudDogbm9kZS5pbm5lckhUTUwsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGV4dHJhLFxuICAgICAgICB3YXRjaGFibGU6IHRydWVcbiAgICAgIH0pXSk7XG4gICAgfTtcbiAgfVxuXG59O1xuXG5jb25zdCBDTEVBTl9DT05URU5UX1BBVFRFUk4gPSBuZXcgUmVnRXhwKCdcXHV7MjJ9JywgJ3VnJyk7XG5jb25zdCBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSA9IFsxMTA1OTIwLCAxMTEyMzE5XTtcbmNvbnN0IF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYID0geyAuLi57XG4gICAgRm9udEF3ZXNvbWU6IHtcbiAgICAgIG5vcm1hbDogJ2ZhcycsXG4gICAgICA0MDA6ICdmYXMnXG4gICAgfVxuICB9LFxuICAuLi5lbyxcbiAgLi4uYW8sXG4gIC4uLm1vXG59O1xuY29uc3QgRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCA9IE9iamVjdC5rZXlzKF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gIGFjY1trZXkudG9Mb3dlckNhc2UoKV0gPSBfRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWFtrZXldO1xuICByZXR1cm4gYWNjO1xufSwge30pO1xuY29uc3QgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLID0gT2JqZWN0LmtleXMoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCkucmVkdWNlKChhY2MsIGZvbnRGYW1pbHkpID0+IHtcbiAgY29uc3Qgd2VpZ2h0cyA9IEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVhbZm9udEZhbWlseV07XG4gIGFjY1tmb250RmFtaWx5XSA9IHdlaWdodHNbOTAwXSB8fCBbLi4uT2JqZWN0LmVudHJpZXMod2VpZ2h0cyldWzBdWzFdO1xuICByZXR1cm4gYWNjO1xufSwge30pO1xuZnVuY3Rpb24gaGV4VmFsdWVGcm9tQ29udGVudChjb250ZW50KSB7XG4gIGNvbnN0IGNsZWFuZWQgPSBjb250ZW50LnJlcGxhY2UoQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCAnJyk7XG4gIGNvbnN0IGNvZGVQb2ludCA9IGNvZGVQb2ludEF0KGNsZWFuZWQsIDApO1xuICBjb25zdCBpc1ByZXBlbmRUZW4gPSBjb2RlUG9pbnQgPj0gU0VDT05EQVJZX1VOSUNPREVfUkFOR0VbMF0gJiYgY29kZVBvaW50IDw9IFNFQ09OREFSWV9VTklDT0RFX1JBTkdFWzFdO1xuICBjb25zdCBpc0RvdWJsZWQgPSBjbGVhbmVkLmxlbmd0aCA9PT0gMiA/IGNsZWFuZWRbMF0gPT09IGNsZWFuZWRbMV0gOiBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogaXNEb3VibGVkID8gdG9IZXgoY2xlYW5lZFswXSkgOiB0b0hleChjbGVhbmVkKSxcbiAgICBpc1NlY29uZGFyeTogaXNQcmVwZW5kVGVuIHx8IGlzRG91YmxlZFxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UHJlZml4KGZvbnRGYW1pbHksIGZvbnRXZWlnaHQpIHtcbiAgY29uc3QgZm9udEZhbWlseVNhbml0aXplZCA9IGZvbnRGYW1pbHkucmVwbGFjZSgvXlsnXCJdfFsnXCJdJC9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgZm9udFdlaWdodEludGVnZXIgPSBwYXJzZUludChmb250V2VpZ2h0KTtcbiAgY29uc3QgZm9udFdlaWdodFNhbml0aXplZCA9IGlzTmFOKGZvbnRXZWlnaHRJbnRlZ2VyKSA/ICdub3JtYWwnIDogZm9udFdlaWdodEludGVnZXI7XG4gIHJldHVybiAoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWFtmb250RmFtaWx5U2FuaXRpemVkXSB8fCB7fSlbZm9udFdlaWdodFNhbml0aXplZF0gfHwgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLW2ZvbnRGYW1pbHlTYW5pdGl6ZWRdO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRm9yUG9zaXRpb24obm9kZSwgcG9zaXRpb24pIHtcbiAgY29uc3QgcGVuZGluZ0F0dHJpYnV0ZSA9IFwiXCIuY29uY2F0KERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORykuY29uY2F0KHBvc2l0aW9uLnJlcGxhY2UoJzonLCAnLScpKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUocGVuZGluZ0F0dHJpYnV0ZSkgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgbm9kZSBpcyBhbHJlYWR5IGJlaW5nIHByb2Nlc3NlZFxuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRvQXJyYXkobm9kZS5jaGlsZHJlbik7XG4gICAgY29uc3QgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgPSBjaGlsZHJlbi5maWx0ZXIoYyA9PiBjLmdldEF0dHJpYnV0ZShEQVRBX0ZBX1BTRVVET19FTEVNRU5UKSA9PT0gcG9zaXRpb24pWzBdO1xuICAgIGNvbnN0IHN0eWxlcyA9IFdJTkRPVy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIHBvc2l0aW9uKTtcbiAgICBjb25zdCBmb250RmFtaWx5ID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtZmFtaWx5Jyk7XG4gICAgY29uc3QgZm9udEZhbWlseU1hdGNoID0gZm9udEZhbWlseS5tYXRjaChGT05UX0ZBTUlMWV9QQVRURVJOKTtcbiAgICBjb25zdCBmb250V2VpZ2h0ID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtd2VpZ2h0Jyk7XG4gICAgY29uc3QgY29udGVudCA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG5cbiAgICBpZiAoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgJiYgIWZvbnRGYW1pbHlNYXRjaCkge1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgaXQgYnV0IHRoZSBjdXJyZW50IGNvbXB1dGVkIHN0eWxlIGRvZXMgbm90IHJlc3VsdCBpbiBhIGZvbnQtZmFtaWx5LFxuICAgICAgLy8gdGhhdCBwcm9iYWJseSBtZWFucyB0aGF0IGEgY2xhc3MgbmFtZSB0aGF0IHdhcyBwcmV2aW91c2x5IHByZXNlbnQgdG8gbWFrZSB0aGUgaWNvbiBoYXMgYmVlblxuICAgICAgLy8gcmVtb3ZlZC4gU28gd2Ugbm93IHNob3VsZCBkZWxldGUgdGhlIGljb24uXG4gICAgICBub2RlLnJlbW92ZUNoaWxkKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSBlbHNlIGlmIChmb250RmFtaWx5TWF0Y2ggJiYgY29udGVudCAhPT0gJ25vbmUnICYmIGNvbnRlbnQgIT09ICcnKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcbiAgICAgIGxldCBwcmVmaXggPSBnZXRQcmVmaXgoZm9udEZhbWlseSwgZm9udFdlaWdodCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlOiBoZXhWYWx1ZSxcbiAgICAgICAgaXNTZWNvbmRhcnlcbiAgICAgIH0gPSBoZXhWYWx1ZUZyb21Db250ZW50KGNvbnRlbnQpO1xuICAgICAgY29uc3QgaXNWNCA9IGZvbnRGYW1pbHlNYXRjaFswXS5zdGFydHNXaXRoKCdGb250QXdlc29tZScpO1xuICAgICAgbGV0IGljb25OYW1lID0gYnlVbmljb2RlKHByZWZpeCwgaGV4VmFsdWUpO1xuICAgICAgbGV0IGljb25JZGVudGlmaWVyID0gaWNvbk5hbWU7XG5cbiAgICAgIGlmIChpc1Y0KSB7XG4gICAgICAgIGNvbnN0IGljb25OYW1lNCA9IGJ5T2xkVW5pY29kZShoZXhWYWx1ZSk7XG5cbiAgICAgICAgaWYgKGljb25OYW1lNC5pY29uTmFtZSAmJiBpY29uTmFtZTQucHJlZml4KSB7XG4gICAgICAgICAgaWNvbk5hbWUgPSBpY29uTmFtZTQuaWNvbk5hbWU7XG4gICAgICAgICAgcHJlZml4ID0gaWNvbk5hbWU0LnByZWZpeDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBPbmx5IGNvbnZlcnQgdGhlIHBzZXVkbyBlbGVtZW50IGluIHRoaXMgOjpiZWZvcmUvOjphZnRlciBwb3NpdGlvbiBpbnRvIGFuIGljb24gaWYgd2UgaGF2ZW4ndFxuICAgICAgLy8gYWxyZWFkeSBkb25lIHNvIHdpdGggdGhlIHNhbWUgcHJlZml4IGFuZCBpY29uTmFtZVxuXG5cbiAgICAgIGlmIChpY29uTmFtZSAmJiAhaXNTZWNvbmRhcnkgJiYgKCFhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCB8fCBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudC5nZXRBdHRyaWJ1dGUoREFUQV9QUkVGSVgpICE9PSBwcmVmaXggfHwgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgIT09IGljb25JZGVudGlmaWVyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlLCBpY29uSWRlbnRpZmllcik7XG5cbiAgICAgICAgaWYgKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KSB7XG4gICAgICAgICAgLy8gRGVsZXRlIHRoZSBvbGQgb25lLCBzaW5jZSB3ZSdyZSByZXBsYWNpbmcgaXQgd2l0aCBhIG5ldyBvbmVcbiAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGEgPSBibGFua01ldGEoKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGV4dHJhXG4gICAgICAgIH0gPSBtZXRhO1xuICAgICAgICBleHRyYS5hdHRyaWJ1dGVzW0RBVEFfRkFfUFNFVURPX0VMRU1FTlRdID0gcG9zaXRpb247XG4gICAgICAgIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXgpLnRoZW4obWFpbiA9PiB7XG4gICAgICAgICAgY29uc3QgYWJzdHJhY3QgPSBtYWtlSW5saW5lU3ZnQWJzdHJhY3QoeyAuLi5tZXRhLFxuICAgICAgICAgICAgaWNvbnM6IHtcbiAgICAgICAgICAgICAgbWFpbixcbiAgICAgICAgICAgICAgbWFzazogZW1wdHlDYW5vbmljYWxJY29uKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBpY29uTmFtZTogaWNvbklkZW50aWZpZXIsXG4gICAgICAgICAgICBleHRyYSxcbiAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnOjpiZWZvcmUnKSB7XG4gICAgICAgICAgICBub2RlLmluc2VydEJlZm9yZShlbGVtZW50LCBub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnQub3V0ZXJIVE1MID0gYWJzdHJhY3QubWFwKGEgPT4gdG9IdG1sKGEpKS5qb2luKCdcXG4nKTtcbiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlKG5vZGUpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKFtyZXBsYWNlRm9yUG9zaXRpb24obm9kZSwgJzo6YmVmb3JlJyksIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlLCAnOjphZnRlcicpXSk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NhYmxlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSAhPT0gZG9jdW1lbnQuaGVhZCAmJiAhflRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTLmluZGV4T2Yobm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpICYmICFub2RlLmdldEF0dHJpYnV0ZShEQVRBX0ZBX1BTRVVET19FTEVNRU5UKSAmJiAoIW5vZGUucGFyZW50Tm9kZSB8fCBub2RlLnBhcmVudE5vZGUudGFnTmFtZSAhPT0gJ3N2ZycpO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hQc2V1ZG9FbGVtZW50cyhyb290KSB7XG4gIGlmICghSVNfRE9NKSByZXR1cm47XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IHRvQXJyYXkocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcqJykpLmZpbHRlcihwcm9jZXNzYWJsZSkubWFwKHJlcGxhY2UpO1xuICAgIGNvbnN0IGVuZCA9IHBlcmYuYmVnaW4oJ3NlYXJjaFBzZXVkb0VsZW1lbnRzJyk7XG4gICAgZGlzYWJsZU9ic2VydmF0aW9uKCk7XG4gICAgUHJvbWlzZS5hbGwob3BlcmF0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICBlbmQoKTtcbiAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZW5kKCk7XG4gICAgICBlbmFibGVPYnNlcnZhdGlvbigpO1xuICAgICAgcmVqZWN0KCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG52YXIgUHNldWRvRWxlbWVudHMgPSB7XG4gIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzKGFjY3VtdWxhdG9yKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBzZWFyY2hQc2V1ZG9FbGVtZW50cztcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfVxuXG4gICAgfTtcbiAgfSxcblxuICBwcm92aWRlcyhwcm92aWRlcnMpIHtcbiAgICBwcm92aWRlcnMucHNldWRvRWxlbWVudHMyc3ZnID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBub2RlID0gRE9DVU1FTlRcbiAgICAgIH0gPSBwYXJhbXM7XG5cbiAgICAgIGlmIChjb25maWcuc2VhcmNoUHNldWRvRWxlbWVudHMpIHtcbiAgICAgICAgc2VhcmNoUHNldWRvRWxlbWVudHMobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG59O1xuXG5sZXQgX3Vud2F0Y2hlZCA9IGZhbHNlO1xudmFyIE11dGF0aW9uT2JzZXJ2ZXIkMSA9IHtcbiAgbWl4b3V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb206IHtcbiAgICAgICAgdW53YXRjaCgpIHtcbiAgICAgICAgICBkaXNhYmxlT2JzZXJ2YXRpb24oKTtcbiAgICAgICAgICBfdW53YXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9vdHN0cmFwKCkge1xuICAgICAgICBvYnNlcnZlKGNoYWluSG9va3MoJ211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MnLCB7fSkpO1xuICAgICAgfSxcblxuICAgICAgbm9BdXRvKCkge1xuICAgICAgICBkaXNjb25uZWN0KCk7XG4gICAgICB9LFxuXG4gICAgICB3YXRjaChwYXJhbXMpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG9ic2VydmVNdXRhdGlvbnNSb290XG4gICAgICAgIH0gPSBwYXJhbXM7XG5cbiAgICAgICAgaWYgKF91bndhdGNoZWQpIHtcbiAgICAgICAgICBlbmFibGVPYnNlcnZhdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ic2VydmUoY2hhaW5Ib29rcygnbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcycsIHtcbiAgICAgICAgICAgIG9ic2VydmVNdXRhdGlvbnNSb290XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbn07XG5cbmNvbnN0IHBhcnNlVHJhbnNmb3JtU3RyaW5nID0gdHJhbnNmb3JtU3RyaW5nID0+IHtcbiAgbGV0IHRyYW5zZm9ybSA9IHtcbiAgICBzaXplOiAxNixcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgZmxpcFg6IGZhbHNlLFxuICAgIGZsaXBZOiBmYWxzZSxcbiAgICByb3RhdGU6IDBcbiAgfTtcbiAgcmV0dXJuIHRyYW5zZm9ybVN0cmluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykucmVkdWNlKChhY2MsIG4pID0+IHtcbiAgICBjb25zdCBwYXJ0cyA9IG4udG9Mb3dlckNhc2UoKS5zcGxpdCgnLScpO1xuICAgIGNvbnN0IGZpcnN0ID0gcGFydHNbMF07XG4gICAgbGV0IHJlc3QgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCctJyk7XG5cbiAgICBpZiAoZmlyc3QgJiYgcmVzdCA9PT0gJ2gnKSB7XG4gICAgICBhY2MuZmxpcFggPSB0cnVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBpZiAoZmlyc3QgJiYgcmVzdCA9PT0gJ3YnKSB7XG4gICAgICBhY2MuZmxpcFkgPSB0cnVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICByZXN0ID0gcGFyc2VGbG9hdChyZXN0KTtcblxuICAgIGlmIChpc05hTihyZXN0KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpcnN0KSB7XG4gICAgICBjYXNlICdncm93JzpcbiAgICAgICAgYWNjLnNpemUgPSBhY2Muc2l6ZSArIHJlc3Q7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzaHJpbmsnOlxuICAgICAgICBhY2Muc2l6ZSA9IGFjYy5zaXplIC0gcmVzdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBhY2MueCA9IGFjYy54IC0gcmVzdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgYWNjLnggPSBhY2MueCArIHJlc3Q7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgIGFjYy55ID0gYWNjLnkgLSByZXN0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIGFjYy55ID0gYWNjLnkgKyByZXN0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncm90YXRlJzpcbiAgICAgICAgYWNjLnJvdGF0ZSA9IGFjYy5yb3RhdGUgKyByZXN0O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB0cmFuc2Zvcm0pO1xufTtcbnZhciBQb3dlclRyYW5zZm9ybXMgPSB7XG4gIG1peG91dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2U6IHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1TdHJpbmcgPT4ge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVN0cmluZyh0cmFuc2Zvcm1TdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICBob29rcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VOb2RlQXR0cmlidXRlcyhhY2N1bXVsYXRvciwgbm9kZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1TdHJpbmcgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS10cmFuc2Zvcm0nKTtcblxuICAgICAgICBpZiAodHJhbnNmb3JtU3RyaW5nKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IudHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1TdHJpbmcodHJhbnNmb3JtU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH1cblxuICAgIH07XG4gIH0sXG5cbiAgcHJvdmlkZXMocHJvdmlkZXJzKSB7XG4gICAgcHJvdmlkZXJzLmdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZyA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICBsZXQge1xuICAgICAgICBtYWluLFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIGNvbnRhaW5lcldpZHRoLFxuICAgICAgICBpY29uV2lkdGhcbiAgICAgIH0gPSBfcmVmO1xuICAgICAgY29uc3Qgb3V0ZXIgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoXCIuY29uY2F0KGNvbnRhaW5lcldpZHRoIC8gMiwgXCIgMjU2KVwiKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlubmVyVHJhbnNsYXRlID0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHRyYW5zZm9ybS54ICogMzIsIFwiLCBcIikuY29uY2F0KHRyYW5zZm9ybS55ICogMzIsIFwiKSBcIik7XG4gICAgICBjb25zdCBpbm5lclNjYWxlID0gXCJzY2FsZShcIi5jb25jYXQodHJhbnNmb3JtLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0uZmxpcFggPyAtMSA6IDEpLCBcIiwgXCIpLmNvbmNhdCh0cmFuc2Zvcm0uc2l6ZSAvIDE2ICogKHRyYW5zZm9ybS5mbGlwWSA/IC0xIDogMSksIFwiKSBcIik7XG4gICAgICBjb25zdCBpbm5lclJvdGF0ZSA9IFwicm90YXRlKFwiLmNvbmNhdCh0cmFuc2Zvcm0ucm90YXRlLCBcIiAwIDApXCIpO1xuICAgICAgY29uc3QgaW5uZXIgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogXCJcIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsIFwiIFwiKS5jb25jYXQoaW5uZXJTY2FsZSwgXCIgXCIpLmNvbmNhdChpbm5lclJvdGF0ZSlcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXRoID0ge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKFwiLmNvbmNhdChpY29uV2lkdGggLyAyICogLTEsIFwiIC0yNTYpXCIpXG4gICAgICB9O1xuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IHtcbiAgICAgICAgb3V0ZXIsXG4gICAgICAgIGlubmVyLFxuICAgICAgICBwYXRoXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiAnZycsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4ub3BlcmF0aW9ucy5vdXRlclxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0YWc6ICdnJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLm9wZXJhdGlvbnMuaW5uZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgICAgdGFnOiBtYWluLmljb24udGFnLFxuICAgICAgICAgICAgY2hpbGRyZW46IG1haW4uaWNvbi5jaGlsZHJlbixcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4ubWFpbi5pY29uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIC4uLm9wZXJhdGlvbnMucGF0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxufTtcblxuY29uc3QgQUxMX1NQQUNFID0ge1xuICB4OiAwLFxuICB5OiAwLFxuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJ1xufTtcblxuZnVuY3Rpb24gZmlsbEJsYWNrKGFic3RyYWN0KSB7XG4gIGxldCBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuICBpZiAoYWJzdHJhY3QuYXR0cmlidXRlcyAmJiAoYWJzdHJhY3QuYXR0cmlidXRlcy5maWxsIHx8IGZvcmNlKSkge1xuICAgIGFic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCA9ICdibGFjayc7XG4gIH1cblxuICByZXR1cm4gYWJzdHJhY3Q7XG59XG5cbmZ1bmN0aW9uIGRlR3JvdXAoYWJzdHJhY3QpIHtcbiAgaWYgKGFic3RyYWN0LnRhZyA9PT0gJ2cnKSB7XG4gICAgcmV0dXJuIGFic3RyYWN0LmNoaWxkcmVuO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbYWJzdHJhY3RdO1xuICB9XG59XG5cbnZhciBNYXNrcyA9IHtcbiAgaG9va3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlTm9kZUF0dHJpYnV0ZXMoYWNjdW11bGF0b3IsIG5vZGUpIHtcbiAgICAgICAgY29uc3QgbWFza0RhdGEgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS1tYXNrJyk7XG4gICAgICAgIGNvbnN0IG1hc2sgPSAhbWFza0RhdGEgPyBlbXB0eUNhbm9uaWNhbEljb24oKSA6IGdldENhbm9uaWNhbEljb24obWFza0RhdGEuc3BsaXQoJyAnKS5tYXAoaSA9PiBpLnRyaW0oKSkpO1xuXG4gICAgICAgIGlmICghbWFzay5wcmVmaXgpIHtcbiAgICAgICAgICBtYXNrLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjY3VtdWxhdG9yLm1hc2sgPSBtYXNrO1xuICAgICAgICBhY2N1bXVsYXRvci5tYXNrSWQgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS1tYXNrLWlkJyk7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH1cblxuICAgIH07XG4gIH0sXG5cbiAgcHJvdmlkZXMocHJvdmlkZXJzKSB7XG4gICAgcHJvdmlkZXJzLmdlbmVyYXRlQWJzdHJhY3RNYXNrID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICBtYWluLFxuICAgICAgICBtYXNrLFxuICAgICAgICBtYXNrSWQ6IGV4cGxpY2l0TWFza0lkLFxuICAgICAgICB0cmFuc2Zvcm1cbiAgICAgIH0gPSBfcmVmO1xuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aDogbWFpbldpZHRoLFxuICAgICAgICBpY29uOiBtYWluUGF0aFxuICAgICAgfSA9IG1haW47XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoOiBtYXNrV2lkdGgsXG4gICAgICAgIGljb246IG1hc2tQYXRoXG4gICAgICB9ID0gbWFzaztcbiAgICAgIGNvbnN0IHRyYW5zID0gdHJhbnNmb3JtRm9yU3ZnKHtcbiAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICBjb250YWluZXJXaWR0aDogbWFza1dpZHRoLFxuICAgICAgICBpY29uV2lkdGg6IG1haW5XaWR0aFxuICAgICAgfSk7XG4gICAgICBjb25zdCBtYXNrUmVjdCA9IHtcbiAgICAgICAgdGFnOiAncmVjdCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uQUxMX1NQQUNFLFxuICAgICAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hc2tJbm5lckdyb3VwQ2hpbGRyZW5NaXhpbiA9IG1haW5QYXRoLmNoaWxkcmVuID8ge1xuICAgICAgICBjaGlsZHJlbjogbWFpblBhdGguY2hpbGRyZW4ubWFwKGZpbGxCbGFjaylcbiAgICAgIH0gOiB7fTtcbiAgICAgIGNvbnN0IG1hc2tJbm5lckdyb3VwID0ge1xuICAgICAgICB0YWc6ICdnJyxcbiAgICAgICAgYXR0cmlidXRlczogeyAuLi50cmFucy5pbm5lclxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW2ZpbGxCbGFjayh7XG4gICAgICAgICAgdGFnOiBtYWluUGF0aC50YWcsXG4gICAgICAgICAgYXR0cmlidXRlczogeyAuLi5tYWluUGF0aC5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgLi4udHJhbnMucGF0aFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4ubWFza0lubmVyR3JvdXBDaGlsZHJlbk1peGluXG4gICAgICAgIH0pXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hc2tPdXRlckdyb3VwID0ge1xuICAgICAgICB0YWc6ICdnJyxcbiAgICAgICAgYXR0cmlidXRlczogeyAuLi50cmFucy5vdXRlclxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW21hc2tJbm5lckdyb3VwXVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hc2tJZCA9IFwibWFzay1cIi5jb25jYXQoZXhwbGljaXRNYXNrSWQgfHwgbmV4dFVuaXF1ZUlkKCkpO1xuICAgICAgY29uc3QgY2xpcElkID0gXCJjbGlwLVwiLmNvbmNhdChleHBsaWNpdE1hc2tJZCB8fCBuZXh0VW5pcXVlSWQoKSk7XG4gICAgICBjb25zdCBtYXNrVGFnID0ge1xuICAgICAgICB0YWc6ICdtYXNrJyxcbiAgICAgICAgYXR0cmlidXRlczogeyAuLi5BTExfU1BBQ0UsXG4gICAgICAgICAgaWQ6IG1hc2tJZCxcbiAgICAgICAgICBtYXNrVW5pdHM6ICd1c2VyU3BhY2VPblVzZScsXG4gICAgICAgICAgbWFza0NvbnRlbnRVbml0czogJ3VzZXJTcGFjZU9uVXNlJ1xuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW21hc2tSZWN0LCBtYXNrT3V0ZXJHcm91cF1cbiAgICAgIH07XG4gICAgICBjb25zdCBkZWZzID0ge1xuICAgICAgICB0YWc6ICdkZWZzJyxcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdGFnOiAnY2xpcFBhdGgnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGlkOiBjbGlwSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBkZUdyb3VwKG1hc2tQYXRoKVxuICAgICAgICB9LCBtYXNrVGFnXVxuICAgICAgfTtcbiAgICAgIGNoaWxkcmVuLnB1c2goZGVmcywge1xuICAgICAgICB0YWc6ICdyZWN0JyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgICAgICdjbGlwLXBhdGgnOiBcInVybCgjXCIuY29uY2F0KGNsaXBJZCwgXCIpXCIpLFxuICAgICAgICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQobWFza0lkLCBcIilcIiksXG4gICAgICAgICAgLi4uQUxMX1NQQUNFXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG59O1xuXG52YXIgTWlzc2luZ0ljb25JbmRpY2F0b3IgPSB7XG4gIHByb3ZpZGVzKHByb3ZpZGVycykge1xuICAgIGxldCByZWR1Y2VNb3Rpb24gPSBmYWxzZTtcblxuICAgIGlmIChXSU5ET1cubWF0Y2hNZWRpYSkge1xuICAgICAgcmVkdWNlTW90aW9uID0gV0lORE9XLm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlcztcbiAgICB9XG5cbiAgICBwcm92aWRlcnMubWlzc2luZ0ljb25BYnN0cmFjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdDaGlsZHJlbiA9IFtdO1xuICAgICAgY29uc3QgRklMTCA9IHtcbiAgICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcidcbiAgICAgIH07XG4gICAgICBjb25zdCBBTklNQVRJT05fQkFTRSA9IHtcbiAgICAgICAgYXR0cmlidXRlVHlwZTogJ1hNTCcsXG4gICAgICAgIHJlcGVhdENvdW50OiAnaW5kZWZpbml0ZScsXG4gICAgICAgIGR1cjogJzJzJ1xuICAgICAgfTsgLy8gUmluZ1xuXG4gICAgICBnQ2hpbGRyZW4ucHVzaCh7XG4gICAgICAgIHRhZzogJ3BhdGgnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLkZJTEwsXG4gICAgICAgICAgZDogJ00xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHonXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgT1BBQ0lUWV9BTklNQVRFID0geyAuLi5BTklNQVRJT05fQkFTRSxcbiAgICAgICAgYXR0cmlidXRlTmFtZTogJ29wYWNpdHknXG4gICAgICB9O1xuICAgICAgY29uc3QgZG90ID0ge1xuICAgICAgICB0YWc6ICdjaXJjbGUnLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLkZJTEwsXG4gICAgICAgICAgY3g6ICcyNTYnLFxuICAgICAgICAgIGN5OiAnMzY0JyxcbiAgICAgICAgICByOiAnMjgnXG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfTtcblxuICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHtcbiAgICAgICAgZG90LmNoaWxkcmVuLnB1c2goe1xuICAgICAgICAgIHRhZzogJ2FuaW1hdGUnLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uQU5JTUFUSU9OX0JBU0UsXG4gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiAncicsXG4gICAgICAgICAgICB2YWx1ZXM6ICcyODsxNDsyODsyODsxNDsyODsnXG4gICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgdGFnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgYXR0cmlidXRlczogeyAuLi5PUEFDSVRZX0FOSU1BVEUsXG4gICAgICAgICAgICB2YWx1ZXM6ICcxOzA7MTsxOzA7MTsnXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ0NoaWxkcmVuLnB1c2goZG90KTtcbiAgICAgIGdDaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdGFnOiAncGF0aCcsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uRklMTCxcbiAgICAgICAgICBvcGFjaXR5OiAnMScsXG4gICAgICAgICAgZDogJ00yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnonXG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiByZWR1Y2VNb3Rpb24gPyBbXSA6IFt7XG4gICAgICAgICAgdGFnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgYXR0cmlidXRlczogeyAuLi5PUEFDSVRZX0FOSU1BVEUsXG4gICAgICAgICAgICB2YWx1ZXM6ICcxOzA7MDswOzA7MTsnXG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVkdWNlTW90aW9uKSB7XG4gICAgICAgIC8vIEV4Y2xhbWF0aW9uXG4gICAgICAgIGdDaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICB0YWc6ICdwYXRoJyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLkZJTEwsXG4gICAgICAgICAgICBvcGFjaXR5OiAnMCcsXG4gICAgICAgICAgICBkOiAnTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41eidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgICAgdGFnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLk9QQUNJVFlfQU5JTUFURSxcbiAgICAgICAgICAgICAgdmFsdWVzOiAnMDswOzE7MTswOzA7J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YWc6ICdnJyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICdjbGFzcyc6ICdtaXNzaW5nJ1xuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogZ0NoaWxkcmVuXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxufTtcblxudmFyIFN2Z1N5bWJvbHMgPSB7XG4gIGhvb2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbERhdGEgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1mYS1zeW1ib2wnKTtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gc3ltYm9sRGF0YSA9PT0gbnVsbCA/IGZhbHNlIDogc3ltYm9sRGF0YSA9PT0gJycgPyB0cnVlIDogc3ltYm9sRGF0YTtcbiAgICAgICAgYWNjdW11bGF0b3JbJ3N5bWJvbCddID0gc3ltYm9sO1xuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbn07XG5cbnZhciBwbHVnaW5zID0gW0luamVjdENTUywgUmVwbGFjZUVsZW1lbnRzLCBMYXllcnMsIExheWVyc0NvdW50ZXIsIExheWVyc1RleHQsIFBzZXVkb0VsZW1lbnRzLCBNdXRhdGlvbk9ic2VydmVyJDEsIFBvd2VyVHJhbnNmb3JtcywgTWFza3MsIE1pc3NpbmdJY29uSW5kaWNhdG9yLCBTdmdTeW1ib2xzXTtcblxucmVnaXN0ZXJQbHVnaW5zKHBsdWdpbnMsIHtcbiAgbWl4b3V0c1RvOiBhcGlcbn0pO1xuY29uc3Qgbm9BdXRvJDEgPSBhcGkubm9BdXRvO1xuY29uc3QgY29uZmlnJDEgPSBhcGkuY29uZmlnO1xuY29uc3QgbGlicmFyeSQxID0gYXBpLmxpYnJhcnk7XG5jb25zdCBkb20kMSA9IGFwaS5kb207XG5jb25zdCBwYXJzZSQxID0gYXBpLnBhcnNlO1xuY29uc3QgZmluZEljb25EZWZpbml0aW9uJDEgPSBhcGkuZmluZEljb25EZWZpbml0aW9uO1xuY29uc3QgdG9IdG1sJDEgPSBhcGkudG9IdG1sO1xuY29uc3QgaWNvbiA9IGFwaS5pY29uO1xuY29uc3QgbGF5ZXIgPSBhcGkubGF5ZXI7XG5jb25zdCB0ZXh0ID0gYXBpLnRleHQ7XG5jb25zdCBjb3VudGVyID0gYXBpLmNvdW50ZXI7XG5cbmV4cG9ydCB7IG5vQXV0byQxIGFzIG5vQXV0bywgY29uZmlnJDEgYXMgY29uZmlnLCBsaWJyYXJ5JDEgYXMgbGlicmFyeSwgZG9tJDEgYXMgZG9tLCBwYXJzZSQxIGFzIHBhcnNlLCBmaW5kSWNvbkRlZmluaXRpb24kMSBhcyBmaW5kSWNvbkRlZmluaXRpb24sIHRvSHRtbCQxIGFzIHRvSHRtbCwgaWNvbiwgbGF5ZXIsIHRleHQsIGNvdW50ZXIsIGFwaSB9O1xuIiwgIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCAiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnKSwgcmVxdWlyZSgncHJvcC10eXBlcycpLCByZXF1aXJlKCdyZWFjdCcpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJywgJ3Byb3AtdHlwZXMnLCAncmVhY3QnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbFtcInJlYWN0LWZvbnRhd2Vzb21lXCJdID0ge30sIGdsb2JhbC5Gb250QXdlc29tZSwgZ2xvYmFsLlByb3BUeXBlcywgZ2xvYmFsLlJlYWN0KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsIGZvbnRhd2Vzb21lU3ZnQ29yZSwgUHJvcFR5cGVzLCBSZWFjdCkgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9XG5cbiAgdmFyIFByb3BUeXBlc19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koUHJvcFR5cGVzKTtcbiAgdmFyIFJlYWN0X19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShSZWFjdCk7XG5cbiAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICAgIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfSwgX3R5cGVvZihvYmopO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgIHZhciB0YXJnZXQgPSB7fTtcbiAgICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gICAgdmFyIGtleSwgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgICB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7XG5cbiAgICB2YXIga2V5LCBpO1xuXG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9XG5cbiAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG5cbiAgLy8gR2V0IENTUyBjbGFzcyBsaXN0IGZyb20gYSBwcm9wcyBvYmplY3RcbiAgZnVuY3Rpb24gY2xhc3NMaXN0KHByb3BzKSB7XG4gICAgdmFyIF9jbGFzc2VzO1xuXG4gICAgdmFyIGJlYXQgPSBwcm9wcy5iZWF0LFxuICAgICAgICBmYWRlID0gcHJvcHMuZmFkZSxcbiAgICAgICAgYmVhdEZhZGUgPSBwcm9wcy5iZWF0RmFkZSxcbiAgICAgICAgYm91bmNlID0gcHJvcHMuYm91bmNlLFxuICAgICAgICBzaGFrZSA9IHByb3BzLnNoYWtlLFxuICAgICAgICBmbGFzaCA9IHByb3BzLmZsYXNoLFxuICAgICAgICBzcGluID0gcHJvcHMuc3BpbixcbiAgICAgICAgc3BpblB1bHNlID0gcHJvcHMuc3BpblB1bHNlLFxuICAgICAgICBzcGluUmV2ZXJzZSA9IHByb3BzLnNwaW5SZXZlcnNlLFxuICAgICAgICBwdWxzZSA9IHByb3BzLnB1bHNlLFxuICAgICAgICBmaXhlZFdpZHRoID0gcHJvcHMuZml4ZWRXaWR0aCxcbiAgICAgICAgaW52ZXJzZSA9IHByb3BzLmludmVyc2UsXG4gICAgICAgIGJvcmRlciA9IHByb3BzLmJvcmRlcixcbiAgICAgICAgbGlzdEl0ZW0gPSBwcm9wcy5saXN0SXRlbSxcbiAgICAgICAgZmxpcCA9IHByb3BzLmZsaXAsXG4gICAgICAgIHNpemUgPSBwcm9wcy5zaXplLFxuICAgICAgICByb3RhdGlvbiA9IHByb3BzLnJvdGF0aW9uLFxuICAgICAgICBwdWxsID0gcHJvcHMucHVsbDsgLy8gbWFwIG9mIENTUyBjbGFzcyBuYW1lcyB0byBwcm9wZXJ0aWVzXG5cbiAgICB2YXIgY2xhc3NlcyA9IChfY2xhc3NlcyA9IHtcbiAgICAgICdmYS1iZWF0JzogYmVhdCxcbiAgICAgICdmYS1mYWRlJzogZmFkZSxcbiAgICAgICdmYS1iZWF0LWZhZGUnOiBiZWF0RmFkZSxcbiAgICAgICdmYS1ib3VuY2UnOiBib3VuY2UsXG4gICAgICAnZmEtc2hha2UnOiBzaGFrZSxcbiAgICAgICdmYS1mbGFzaCc6IGZsYXNoLFxuICAgICAgJ2ZhLXNwaW4nOiBzcGluLFxuICAgICAgJ2ZhLXNwaW4tcmV2ZXJzZSc6IHNwaW5SZXZlcnNlLFxuICAgICAgJ2ZhLXNwaW4tcHVsc2UnOiBzcGluUHVsc2UsXG4gICAgICAnZmEtcHVsc2UnOiBwdWxzZSxcbiAgICAgICdmYS1mdyc6IGZpeGVkV2lkdGgsXG4gICAgICAnZmEtaW52ZXJzZSc6IGludmVyc2UsXG4gICAgICAnZmEtYm9yZGVyJzogYm9yZGVyLFxuICAgICAgJ2ZhLWxpJzogbGlzdEl0ZW0sXG4gICAgICAnZmEtZmxpcCc6IGZsaXAgPT09IHRydWUsXG4gICAgICAnZmEtZmxpcC1ob3Jpem9udGFsJzogZmxpcCA9PT0gJ2hvcml6b250YWwnIHx8IGZsaXAgPT09ICdib3RoJyxcbiAgICAgICdmYS1mbGlwLXZlcnRpY2FsJzogZmxpcCA9PT0gJ3ZlcnRpY2FsJyB8fCBmbGlwID09PSAnYm90aCdcbiAgICB9LCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzZXMsIFwiZmEtXCIuY29uY2F0KHNpemUpLCB0eXBlb2Ygc2l6ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2l6ZSAhPT0gbnVsbCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NlcywgXCJmYS1yb3RhdGUtXCIuY29uY2F0KHJvdGF0aW9uKSwgdHlwZW9mIHJvdGF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiByb3RhdGlvbiAhPT0gbnVsbCAmJiByb3RhdGlvbiAhPT0gMCksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NlcywgXCJmYS1wdWxsLVwiLmNvbmNhdChwdWxsKSwgdHlwZW9mIHB1bGwgIT09ICd1bmRlZmluZWQnICYmIHB1bGwgIT09IG51bGwpLCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzZXMsICdmYS1zd2FwLW9wYWNpdHknLCBwcm9wcy5zd2FwT3BhY2l0eSksIF9jbGFzc2VzKTsgLy8gbWFwIG92ZXIgYWxsIHRoZSBrZXlzIGluIHRoZSBjbGFzc2VzIG9iamVjdFxuICAgIC8vIHJldHVybiBhbiBhcnJheSBvZiB0aGUga2V5cyB3aGVyZSB0aGUgdmFsdWUgZm9yIHRoZSBrZXkgaXMgbm90IG51bGxcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjbGFzc2VzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGNsYXNzZXNba2V5XSA/IGtleSA6IG51bGw7XG4gICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBDYW1lbGl6ZSB0YWtlbiBmcm9tIGh1bXBzXG4gIC8vIGh1bXBzIGlzIGNvcHlyaWdodCBcdTAwQTkgMjAxMisgRG9tIENocmlzdGllXG4gIC8vIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAgLy8gUGVyZm9ybWFudCB3YXkgdG8gZGV0ZXJtaW5lIGlmIG9iamVjdCBjb2VyY2VzIHRvIGEgbnVtYmVyXG4gIGZ1bmN0aW9uIF9pc051bWVyaWNhbChvYmopIHtcbiAgICBvYmogPSBvYmogLSAwOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cbiAgICByZXR1cm4gb2JqID09PSBvYmo7XG4gIH1cblxuICBmdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgICBpZiAoX2lzTnVtZXJpY2FsKHN0cmluZykpIHtcbiAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcblxuXG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1tcXC1fXFxzXSsoLik/L2csIGZ1bmN0aW9uIChtYXRjaCwgY2hyKSB7XG4gICAgICByZXR1cm4gY2hyID8gY2hyLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICB9KTsgLy8gRW5zdXJlIDFzdCBjaGFyIGlzIGFsd2F5cyBsb3dlcmNhc2VcblxuICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc3Vic3RyKDEpO1xuICB9XG5cbiAgdmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCJdO1xuXG4gIGZ1bmN0aW9uIGNhcGl0YWxpemUodmFsKSB7XG4gICAgcmV0dXJuIHZhbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbC5zbGljZSgxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlVG9PYmplY3Qoc3R5bGUpIHtcbiAgICByZXR1cm4gc3R5bGUuc3BsaXQoJzsnKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwYWlyKSB7XG4gICAgICB2YXIgaSA9IHBhaXIuaW5kZXhPZignOicpO1xuICAgICAgdmFyIHByb3AgPSBjYW1lbGl6ZShwYWlyLnNsaWNlKDAsIGkpKTtcbiAgICAgIHZhciB2YWx1ZSA9IHBhaXIuc2xpY2UoaSArIDEpLnRyaW0oKTtcbiAgICAgIHByb3Auc3RhcnRzV2l0aCgnd2Via2l0JykgPyBhY2NbY2FwaXRhbGl6ZShwcm9wKV0gPSB2YWx1ZSA6IGFjY1twcm9wXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0KGNyZWF0ZUVsZW1lbnQsIGVsZW1lbnQpIHtcbiAgICB2YXIgZXh0cmFQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSAoZWxlbWVudC5jaGlsZHJlbiB8fCBbXSkubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNvbnZlcnQoY3JlYXRlRWxlbWVudCwgY2hpbGQpO1xuICAgIH0pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGRvdC1ub3RhdGlvbiAqL1xuXG4gICAgdmFyIG1peGlucyA9IE9iamVjdC5rZXlzKGVsZW1lbnQuYXR0cmlidXRlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgdmFyIHZhbCA9IGVsZW1lbnQuYXR0cmlidXRlc1trZXldO1xuXG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgYWNjLmF0dHJzWydjbGFzc05hbWUnXSA9IHZhbDtcbiAgICAgICAgICBkZWxldGUgZWxlbWVudC5hdHRyaWJ1dGVzWydjbGFzcyddO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0eWxlJzpcbiAgICAgICAgICBhY2MuYXR0cnNbJ3N0eWxlJ10gPSBzdHlsZVRvT2JqZWN0KHZhbCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ2FyaWEtJykgPT09IDAgfHwga2V5LmluZGV4T2YoJ2RhdGEtJykgPT09IDApIHtcbiAgICAgICAgICAgIGFjYy5hdHRyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5hdHRyc1tjYW1lbGl6ZShrZXkpXSA9IHZhbDtcbiAgICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7XG4gICAgICBhdHRyczoge31cbiAgICB9KTtcblxuICAgIHZhciBfZXh0cmFQcm9wcyRzdHlsZSA9IGV4dHJhUHJvcHMuc3R5bGUsXG4gICAgICAgIGV4aXN0aW5nU3R5bGUgPSBfZXh0cmFQcm9wcyRzdHlsZSA9PT0gdm9pZCAwID8ge30gOiBfZXh0cmFQcm9wcyRzdHlsZSxcbiAgICAgICAgcmVtYWluaW5nID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGV4dHJhUHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICBtaXhpbnMuYXR0cnNbJ3N0eWxlJ10gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWl4aW5zLmF0dHJzWydzdHlsZSddKSwgZXhpc3RpbmdTdHlsZSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYXBwbHkodm9pZCAwLCBbZWxlbWVudC50YWcsIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtaXhpbnMuYXR0cnMpLCByZW1haW5pbmcpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNoaWxkcmVuKSkpO1xuICB9XG5cbiAgdmFyIFBST0RVQ1RJT04gPSBmYWxzZTtcblxuICB0cnkge1xuICAgIFBST0RVQ1RJT04gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIGZ1bmN0aW9uIGxvZyAoKSB7XG4gICAgaWYgKCFQUk9EVUNUSU9OICYmIGNvbnNvbGUgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfY29uc29sZTtcblxuICAgICAgKF9jb25zb2xlID0gY29uc29sZSkuZXJyb3IuYXBwbHkoX2NvbnNvbGUsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplSWNvbkFyZ3MoaWNvbikge1xuICAgIC8vIHRoaXMgaGFzIGV2ZXJ5dGhpbmcgdGhhdCBpdCBuZWVkcyB0byBiZSByZW5kZXJlZCB3aGljaCBtZWFucyBpdCB3YXMgcHJvYmFibHkgaW1wb3J0ZWRcbiAgICAvLyBkaXJlY3RseSBmcm9tIGFuIGljb24gc3ZnIHBhY2thZ2VcbiAgICBpZiAoaWNvbiAmJiBfdHlwZW9mKGljb24pID09PSAnb2JqZWN0JyAmJiBpY29uLnByZWZpeCAmJiBpY29uLmljb25OYW1lICYmIGljb24uaWNvbikge1xuICAgICAgcmV0dXJuIGljb247XG4gICAgfVxuXG4gICAgaWYgKGZvbnRhd2Vzb21lU3ZnQ29yZS5wYXJzZS5pY29uKSB7XG4gICAgICByZXR1cm4gZm9udGF3ZXNvbWVTdmdDb3JlLnBhcnNlLmljb24oaWNvbik7XG4gICAgfSAvLyBpZiB0aGUgaWNvbiBpcyBudWxsLCB0aGVyZSdzIG5vdGhpbmcgdG8gZG9cblxuXG4gICAgaWYgKGljb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaWYgdGhlIGljb24gaXMgYW4gb2JqZWN0IGFuZCBoYXMgYSBwcmVmaXggYW5kIGFuIGljb24gbmFtZSwgcmV0dXJuIGl0XG5cblxuICAgIGlmIChpY29uICYmIF90eXBlb2YoaWNvbikgPT09ICdvYmplY3QnICYmIGljb24ucHJlZml4ICYmIGljb24uaWNvbk5hbWUpIHtcbiAgICAgIHJldHVybiBpY29uO1xuICAgIH0gLy8gaWYgaXQncyBhbiBhcnJheSB3aXRoIGxlbmd0aCBvZiB0d29cblxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWNvbikgJiYgaWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIHVzZSB0aGUgZmlyc3QgaXRlbSBhcyBwcmVmaXgsIHNlY29uZCBhcyBpY29uIG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeDogaWNvblswXSxcbiAgICAgICAgaWNvbk5hbWU6IGljb25bMV1cbiAgICAgIH07XG4gICAgfSAvLyBpZiBpdCdzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIGljb24gbmFtZVxuXG5cbiAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVmaXg6ICdmYXMnLFxuICAgICAgICBpY29uTmFtZTogaWNvblxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIGEga2V5IG9mIGtleVxuICAvLyBhbmQgYSB2YWx1ZSBvZiB2YWx1ZVxuICAvLyBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldFxuICBmdW5jdGlvbiBvYmplY3RXaXRoS2V5KGtleSwgdmFsdWUpIHtcbiAgICAvLyBpZiB0aGUgdmFsdWUgaXMgYSBub24tZW1wdHkgYXJyYXlcbiAgICAvLyBvciBpdCdzIG5vdCBhbiBhcnJheSBidXQgaXQgaXMgdHJ1dGh5XG4gICAgLy8gdGhlbiBjcmVhdGUgdGhlIG9iamVjdCB3aXRoIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZVxuICAgIC8vIGlmIG5vdCwgcmV0dXJuIGFuIGVtcHR5IGFycmF5XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlID8gX2RlZmluZVByb3BlcnR5KHt9LCBrZXksIHZhbHVlKSA6IHt9O1xuICB9XG5cbiAgdmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBib3JkZXI6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgbWFzazogbnVsbCxcbiAgICBtYXNrSWQ6IG51bGwsXG4gICAgZml4ZWRXaWR0aDogZmFsc2UsXG4gICAgaW52ZXJzZTogZmFsc2UsXG4gICAgZmxpcDogZmFsc2UsXG4gICAgaWNvbjogbnVsbCxcbiAgICBsaXN0SXRlbTogZmFsc2UsXG4gICAgcHVsbDogbnVsbCxcbiAgICBwdWxzZTogZmFsc2UsXG4gICAgcm90YXRpb246IG51bGwsXG4gICAgc2l6ZTogbnVsbCxcbiAgICBzcGluOiBmYWxzZSxcbiAgICBzcGluUHVsc2U6IGZhbHNlLFxuICAgIHNwaW5SZXZlcnNlOiBmYWxzZSxcbiAgICBiZWF0OiBmYWxzZSxcbiAgICBmYWRlOiBmYWxzZSxcbiAgICBiZWF0RmFkZTogZmFsc2UsXG4gICAgYm91bmNlOiBmYWxzZSxcbiAgICBzaGFrZTogZmFsc2UsXG4gICAgc3ltYm9sOiBmYWxzZSxcbiAgICB0aXRsZTogJycsXG4gICAgdGl0bGVJZDogbnVsbCxcbiAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgc3dhcE9wYWNpdHk6IGZhbHNlXG4gIH07XG4gIHZhciBGb250QXdlc29tZUljb24gPSAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgYWxsUHJvcHMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZGVmYXVsdFByb3BzKSwgcHJvcHMpO1xuXG4gICAgdmFyIGljb25BcmdzID0gYWxsUHJvcHMuaWNvbixcbiAgICAgICAgbWFza0FyZ3MgPSBhbGxQcm9wcy5tYXNrLFxuICAgICAgICBzeW1ib2wgPSBhbGxQcm9wcy5zeW1ib2wsXG4gICAgICAgIGNsYXNzTmFtZSA9IGFsbFByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgdGl0bGUgPSBhbGxQcm9wcy50aXRsZSxcbiAgICAgICAgdGl0bGVJZCA9IGFsbFByb3BzLnRpdGxlSWQsXG4gICAgICAgIG1hc2tJZCA9IGFsbFByb3BzLm1hc2tJZDtcbiAgICB2YXIgaWNvbkxvb2t1cCA9IG5vcm1hbGl6ZUljb25BcmdzKGljb25BcmdzKTtcbiAgICB2YXIgY2xhc3NlcyA9IG9iamVjdFdpdGhLZXkoJ2NsYXNzZXMnLCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzTGlzdChhbGxQcm9wcykpLCBfdG9Db25zdW1hYmxlQXJyYXkoKGNsYXNzTmFtZSB8fCAnJykuc3BsaXQoJyAnKSkpKTtcbiAgICB2YXIgdHJhbnNmb3JtID0gb2JqZWN0V2l0aEtleSgndHJhbnNmb3JtJywgdHlwZW9mIGFsbFByb3BzLnRyYW5zZm9ybSA9PT0gJ3N0cmluZycgPyBmb250YXdlc29tZVN2Z0NvcmUucGFyc2UudHJhbnNmb3JtKGFsbFByb3BzLnRyYW5zZm9ybSkgOiBhbGxQcm9wcy50cmFuc2Zvcm0pO1xuICAgIHZhciBtYXNrID0gb2JqZWN0V2l0aEtleSgnbWFzaycsIG5vcm1hbGl6ZUljb25BcmdzKG1hc2tBcmdzKSk7XG4gICAgdmFyIHJlbmRlcmVkSWNvbiA9IGZvbnRhd2Vzb21lU3ZnQ29yZS5pY29uKGljb25Mb29rdXAsIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjbGFzc2VzKSwgdHJhbnNmb3JtKSwgbWFzayksIHt9LCB7XG4gICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIHRpdGxlSWQ6IHRpdGxlSWQsXG4gICAgICBtYXNrSWQ6IG1hc2tJZFxuICAgIH0pKTtcblxuICAgIGlmICghcmVuZGVyZWRJY29uKSB7XG4gICAgICBsb2coJ0NvdWxkIG5vdCBmaW5kIGljb24nLCBpY29uTG9va3VwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBhYnN0cmFjdCA9IHJlbmRlcmVkSWNvbi5hYnN0cmFjdDtcbiAgICB2YXIgZXh0cmFQcm9wcyA9IHtcbiAgICAgIHJlZjogcmVmXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhhbGxQcm9wcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAoIWRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGV4dHJhUHJvcHNba2V5XSA9IGFsbFByb3BzW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbnZlcnRDdXJyeShhYnN0cmFjdFswXSwgZXh0cmFQcm9wcyk7XG4gIH0pO1xuICBGb250QXdlc29tZUljb24uZGlzcGxheU5hbWUgPSAnRm9udEF3ZXNvbWVJY29uJztcbiAgRm9udEF3ZXNvbWVJY29uLnByb3BUeXBlcyA9IHtcbiAgICBiZWF0OiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgYm9yZGVyOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgYmVhdEZhZGU6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBib3VuY2U6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uc3RyaW5nLFxuICAgIGZhZGU6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBmbGFzaDogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIG1hc2s6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0ub25lT2ZUeXBlKFtQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLm9iamVjdCwgUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5hcnJheSwgUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5zdHJpbmddKSxcbiAgICBtYXNrSWQ6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uc3RyaW5nLFxuICAgIGZpeGVkV2lkdGg6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBpbnZlcnNlOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgZmxpcDogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vbmVPZihbdHJ1ZSwgZmFsc2UsICdob3Jpem9udGFsJywgJ3ZlcnRpY2FsJywgJ2JvdGgnXSksXG4gICAgaWNvbjogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vbmVPZlR5cGUoW1Byb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0ub2JqZWN0LCBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmFycmF5LCBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZ10pLFxuICAgIGxpc3RJdGVtOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgcHVsbDogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vbmVPZihbJ3JpZ2h0JywgJ2xlZnQnXSksXG4gICAgcHVsc2U6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICByb3RhdGlvbjogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vbmVPZihbMCwgOTAsIDE4MCwgMjcwXSksXG4gICAgc2hha2U6IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0uYm9vbCxcbiAgICBzaXplOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLm9uZU9mKFsnMnhzJywgJ3hzJywgJ3NtJywgJ2xnJywgJ3hsJywgJzJ4bCcsICcxeCcsICcyeCcsICczeCcsICc0eCcsICc1eCcsICc2eCcsICc3eCcsICc4eCcsICc5eCcsICcxMHgnXSksXG4gICAgc3BpbjogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIHNwaW5QdWxzZTogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIHNwaW5SZXZlcnNlOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmJvb2wsXG4gICAgc3ltYm9sOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLm9uZU9mVHlwZShbUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sLCBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZ10pLFxuICAgIHRpdGxlOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZyxcbiAgICB0aXRsZUlkOiBQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZyxcbiAgICB0cmFuc2Zvcm06IFByb3BUeXBlc19fZGVmYXVsdFtcImRlZmF1bHRcIl0ub25lT2ZUeXBlKFtQcm9wVHlwZXNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnN0cmluZywgUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5vYmplY3RdKSxcbiAgICBzd2FwT3BhY2l0eTogUHJvcFR5cGVzX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5ib29sXG4gIH07XG4gIHZhciBjb252ZXJ0Q3VycnkgPSBjb252ZXJ0LmJpbmQobnVsbCwgUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQpO1xuXG4gIGV4cG9ydHMuRm9udEF3ZXNvbWVJY29uID0gRm9udEF3ZXNvbWVJY29uO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5FbXB0eUJUcmVlID0gZXhwb3J0cy5hc1NldCA9IGV4cG9ydHMuc2ltcGxlQ29tcGFyYXRvciA9IGV4cG9ydHMuZGVmYXVsdENvbXBhcmF0b3IgPSB2b2lkIDA7XHJcbi8qKlxyXG4gKiBDb21wYXJlcyBEZWZhdWx0Q29tcGFyYWJsZXMgdG8gZm9ybSBhIHN0cmljdCBwYXJ0aWFsIG9yZGVyaW5nLlxyXG4gKlxyXG4gKiBIYW5kbGVzICsvLTAgYW5kIE5hTiBsaWtlIE1hcDogTmFOIGlzIGVxdWFsIHRvIE5hTiwgYW5kIC0wIGlzIGVxdWFsIHRvICswLlxyXG4gKlxyXG4gKiBBcnJheXMgYXJlIGNvbXBhcmVkIHVzaW5nICc8JyBhbmQgJz4nLCB3aGljaCBtYXkgY2F1c2UgdW5leHBlY3RlZCBlcXVhbGl0eTpcclxuICogZm9yIGV4YW1wbGUgWzFdIHdpbGwgYmUgY29uc2lkZXJlZCBlcXVhbCB0byBbJzEnXS5cclxuICpcclxuICogVHdvIG9iamVjdHMgd2l0aCBlcXVhbCB2YWx1ZU9mIGNvbXBhcmUgdGhlIHNhbWUsIGJ1dCBjb21wYXJlIHVuZXF1YWwgdG9cclxuICogcHJpbWl0aXZlcyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcihhLCBiKSB7XHJcbiAgICAvLyBTcGVjaWFsIGNhc2UgZmluaXRlIG51bWJlcnMgZmlyc3QgZm9yIHBlcmZvcm1hbmNlLlxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB0cmljayBvZiB1c2luZyAnYSAtIGInIGFuZCBjaGVja2luZyBmb3IgTmFOIHRvIGRldGVjdCBub24tbnVtYmVyc1xyXG4gICAgLy8gZG9lcyBub3Qgd29yayBpZiB0aGUgc3RyaW5ncyBhcmUgbnVtZXJpYyAoZXg6IFwiNVwiKS4gVGhpcyB3b3VsZCBsZWFkaW5nIG1vc3QgXHJcbiAgICAvLyBjb21wYXJpc29uIGZ1bmN0aW9ucyB1c2luZyB0aGF0IGFwcHJvYWNoIHRvIGZhaWwgdG8gaGF2ZSB0cmFuc2l0aXZpdHkuXHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGEpICYmIE51bWJlci5pc0Zpbml0ZShiKSkge1xyXG4gICAgICAgIHJldHVybiBhIC0gYjtcclxuICAgIH1cclxuICAgIC8vIFRoZSBkZWZhdWx0IDwgYW5kID4gb3BlcmF0b3JzIGFyZSBub3QgdG90YWxseSBvcmRlcmVkLiBUbyBhbGxvdyB0eXBlcyB0byBiZSBtaXhlZFxyXG4gICAgLy8gaW4gYSBzaW5nbGUgY29sbGVjdGlvbiwgY29tcGFyZSB0eXBlcyBhbmQgb3JkZXIgdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBieSB0eXBlLlxyXG4gICAgdmFyIHRhID0gdHlwZW9mIGE7XHJcbiAgICB2YXIgdGIgPSB0eXBlb2YgYjtcclxuICAgIGlmICh0YSAhPT0gdGIpIHtcclxuICAgICAgICByZXR1cm4gdGEgPCB0YiA/IC0xIDogMTtcclxuICAgIH1cclxuICAgIGlmICh0YSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAvLyBzdGFuZGFyZGl6ZWQgSmF2YVNjcmlwdCBidWc6IG51bGwgaXMgbm90IGFuIG9iamVjdCwgYnV0IHR5cGVvZiBzYXlzIGl0IGlzXHJcbiAgICAgICAgaWYgKGEgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBiID09PSBudWxsID8gMCA6IC0xO1xyXG4gICAgICAgIGVsc2UgaWYgKGIgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGEgPSBhLnZhbHVlT2YoKTtcclxuICAgICAgICBiID0gYi52YWx1ZU9mKCk7XHJcbiAgICAgICAgdGEgPSB0eXBlb2YgYTtcclxuICAgICAgICB0YiA9IHR5cGVvZiBiO1xyXG4gICAgICAgIC8vIERlYWwgd2l0aCB0aGUgdHdvIHZhbHVlT2YoKXMgcHJvZHVjaW5nIGRpZmZlcmVudCB0eXBlc1xyXG4gICAgICAgIGlmICh0YSAhPT0gdGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRhIDwgdGIgPyAtMSA6IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gYSBhbmQgYiBhcmUgbm93IHRoZSBzYW1lIHR5cGUsIGFuZCB3aWxsIGJlIGEgbnVtYmVyLCBzdHJpbmcgb3IgYXJyYXkgXHJcbiAgICAvLyAod2hpY2ggd2UgYXNzdW1lIGhvbGRzIG51bWJlcnMgb3Igc3RyaW5ncyksIG9yIHNvbWV0aGluZyB1bnN1cHBvcnRlZC5cclxuICAgIGlmIChhIDwgYilcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICBpZiAoYSA+IGIpXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICBpZiAoYSA9PT0gYilcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIC8vIE9yZGVyIE5hTiBsZXNzIHRoYW4gb3RoZXIgbnVtYmVyc1xyXG4gICAgaWYgKE51bWJlci5pc05hTihhKSlcclxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGIpID8gMCA6IC0xO1xyXG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzTmFOKGIpKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgLy8gVGhpcyBjb3VsZCBiZSB0d28gb2JqZWN0cyAoZS5nLiBbN10gYW5kIFsnNyddKSB0aGF0IGFyZW4ndCBvcmRlcmVkXHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhKSA/IDAgOiBOdW1iZXIuTmFOO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdENvbXBhcmF0b3IgPSBkZWZhdWx0Q29tcGFyYXRvcjtcclxuO1xyXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJhdG9yKGEsIGIpIHtcclxuICAgIHJldHVybiBhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMDtcclxufVxyXG5leHBvcnRzLnNpbXBsZUNvbXBhcmF0b3IgPSBzaW1wbGVDb21wYXJhdG9yO1xyXG47XHJcbi8qKlxyXG4gKiBBIHJlYXNvbmFibHkgZmFzdCBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyB3aXRoIGEgcG93ZXJmdWwgQVBJLlxyXG4gKiBMYXJnZWx5IGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQgTWFwLiBCVHJlZSBpcyBhIEIrIHRyZWUgZGF0YSBzdHJ1Y3R1cmUsXHJcbiAqIHNvIHRoZSBjb2xsZWN0aW9uIGlzIHNvcnRlZCBieSBrZXkuXHJcbiAqXHJcbiAqIEIrIHRyZWVzIHRlbmQgdG8gdXNlIG1lbW9yeSBtb3JlIGVmZmljaWVudGx5IHRoYW4gaGFzaHRhYmxlcyBzdWNoIGFzIHRoZVxyXG4gKiBzdGFuZGFyZCBNYXAsIGVzcGVjaWFsbHkgd2hlbiB0aGUgY29sbGVjdGlvbiBjb250YWlucyBhIGxhcmdlIG51bWJlciBvZlxyXG4gKiBpdGVtcy4gSG93ZXZlciwgbWFpbnRhaW5pbmcgdGhlIHNvcnQgb3JkZXIgbWFrZXMgdGhlbSBtb2Rlc3RseSBzbG93ZXI6XHJcbiAqIE8obG9nIHNpemUpIHJhdGhlciB0aGFuIE8oMSkuIFRoaXMgQisgdHJlZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBPKDEpXHJcbiAqIGZhc3QgY2xvbmluZy4gSXQgYWxzbyBzdXBwb3J0cyBmcmVlemUoKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXRcclxuICogYSBCVHJlZSBpcyBub3QgY2hhbmdlZCBhY2NpZGVudGFsbHkuXHJcbiAqXHJcbiAqIENvbmZ1c2luZ2x5LCB0aGUgRVM2IE1hcC5mb3JFYWNoKGMpIG1ldGhvZCBjYWxscyBjKHZhbHVlLGtleSkgaW5zdGVhZCBvZlxyXG4gKiBjKGtleSx2YWx1ZSksIGluIGNvbnRyYXN0IHRvIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBzZXQoKSBhbmQgZW50cmllcygpXHJcbiAqIHdoaWNoIHB1dCB0aGUga2V5IGZpcnN0LiBJIGNhbiBvbmx5IGFzc3VtZSB0aGF0IHRoZSBvcmRlciB3YXMgcmV2ZXJzZWQgb25cclxuICogdGhlIHRoZW9yeSB0aGF0IHVzZXJzIHdvdWxkIHVzdWFsbHkgd2FudCB0byBleGFtaW5lIHZhbHVlcyBhbmQgaWdub3JlIGtleXMuXHJcbiAqIEJUcmVlJ3MgZm9yRWFjaCgpIHRoZXJlZm9yZSB3b3JrcyB0aGUgc2FtZSB3YXksIGJ1dCBhIHNlY29uZCBtZXRob2RcclxuICogYC5mb3JFYWNoUGFpcigoa2V5LHZhbHVlKT0+ey4uLn0pYCBpcyBwcm92aWRlZCB3aGljaCBzZW5kcyB5b3UgdGhlIGtleVxyXG4gKiBmaXJzdCBhbmQgdGhlIHZhbHVlIHNlY29uZDsgdGhpcyBtZXRob2QgaXMgc2xpZ2h0bHkgZmFzdGVyIGJlY2F1c2UgaXQgaXNcclxuICogdGhlIFwibmF0aXZlXCIgZm9yLWVhY2ggbWV0aG9kIGZvciB0aGlzIGNsYXNzLlxyXG4gKlxyXG4gKiBPdXQgb2YgdGhlIGJveCwgQlRyZWUgc3VwcG9ydHMga2V5cyB0aGF0IGFyZSBudW1iZXJzLCBzdHJpbmdzLCBhcnJheXMgb2ZcclxuICogbnVtYmVycy9zdHJpbmdzLCBEYXRlLCBhbmQgb2JqZWN0cyB0aGF0IGhhdmUgYSB2YWx1ZU9mKCkgbWV0aG9kIHJldHVybmluZyBhXHJcbiAqIG51bWJlciBvciBzdHJpbmcuIE90aGVyIGRhdGEgdHlwZXMsIHN1Y2ggYXMgYXJyYXlzIG9mIERhdGUgb3IgY3VzdG9tXHJcbiAqIG9iamVjdHMsIHJlcXVpcmUgYSBjdXN0b20gY29tcGFyYXRvciwgd2hpY2ggeW91IG11c3QgcGFzcyBhcyB0aGUgc2Vjb25kXHJcbiAqIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciAodGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2ZcclxuICogaW5pdGlhbCBpdGVtcykuIFN5bWJvbHMgY2Fubm90IGJlIHVzZWQgYXMga2V5cyBiZWNhdXNlIHRoZXkgYXJlIHVub3JkZXJlZFxyXG4gKiAob25lIFN5bWJvbCBpcyBuZXZlciBcImdyZWF0ZXJcIiBvciBcImxlc3NcIiB0aGFuIGFub3RoZXIpLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBHaXZlbiBhIHtuYW1lOiBzdHJpbmcsIGFnZTogbnVtYmVyfSBvYmplY3QsIHlvdSBjYW4gY3JlYXRlIGEgdHJlZSBzb3J0ZWQgYnlcclxuICogbmFtZSBhbmQgdGhlbiBieSBhZ2UgbGlrZSB0aGlzOlxyXG4gKlxyXG4gKiAgICAgdmFyIHRyZWUgPSBuZXcgQlRyZWUodW5kZWZpbmVkLCAoYSwgYikgPT4ge1xyXG4gKiAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKVxyXG4gKiAgICAgICAgIHJldHVybiAxOyAvLyBSZXR1cm4gYSBudW1iZXIgPjAgd2hlbiBhID4gYlxyXG4gKiAgICAgICBlbHNlIGlmIChhLm5hbWUgPCBiLm5hbWUpXHJcbiAqICAgICAgICAgcmV0dXJuIC0xOyAvLyBSZXR1cm4gYSBudW1iZXIgPDAgd2hlbiBhIDwgYlxyXG4gKiAgICAgICBlbHNlIC8vIG5hbWVzIGFyZSBlcXVhbCAob3IgaW5jb21wYXJhYmxlKVxyXG4gKiAgICAgICAgIHJldHVybiBhLmFnZSAtIGIuYWdlOyAvLyBSZXR1cm4gPjAgd2hlbiBhLmFnZSA+IGIuYWdlXHJcbiAqICAgICB9KTtcclxuICpcclxuICogICAgIHRyZWUuc2V0KHtuYW1lOlwiQmlsbFwiLCBhZ2U6MTd9LCBcImhhcHB5XCIpO1xyXG4gKiAgICAgdHJlZS5zZXQoe25hbWU6XCJGcmFuXCIsIGFnZTo0MH0sIFwiYnVzeSAmIHN0cmVzc2VkXCIpO1xyXG4gKiAgICAgdHJlZS5zZXQoe25hbWU6XCJCaWxsXCIsIGFnZTo1NX0sIFwicmVjZW50bHkgbGFpZCBvZmZcIik7XHJcbiAqICAgICB0cmVlLmZvckVhY2hQYWlyKChrLCB2KSA9PiB7XHJcbiAqICAgICAgIGNvbnNvbGUubG9nKGBOYW1lOiAke2submFtZX0gQWdlOiAke2suYWdlfSBTdGF0dXM6ICR7dn1gKTtcclxuICogICAgIH0pO1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIFwicmFuZ2VcIiBtZXRob2RzIChgZm9yRWFjaCwgZm9yUmFuZ2UsIGVkaXRSYW5nZWApIHdpbGwgcmV0dXJuIHRoZSBudW1iZXJcclxuICogb2YgZWxlbWVudHMgdGhhdCB3ZXJlIHNjYW5uZWQuIEluIGFkZGl0aW9uLCB0aGUgY2FsbGJhY2sgY2FuIHJldHVybiB7YnJlYWs6Un1cclxuICogdG8gc3RvcCBlYXJseSBhbmQgcmV0dXJuIFIgZnJvbSB0aGUgb3V0ZXIgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIC0gVE9ETzogVGVzdCBwZXJmb3JtYW5jZSBvZiBwcmVhbGxvY2F0aW5nIHZhbHVlcyBhcnJheSBhdCBtYXggc2l6ZVxyXG4gKiAtIFRPRE86IEFkZCBmYXN0IGluaXRpYWxpemF0aW9uIHdoZW4gYSBzb3J0ZWQgYXJyYXkgaXMgcHJvdmlkZWQgdG8gY29uc3RydWN0b3JcclxuICpcclxuICogRm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3F3ZXJ0aWUvYnRyZWUtdHlwZXNjcmlwdFxyXG4gKlxyXG4gKiBBcmUgeW91IGEgQyMgZGV2ZWxvcGVyPyBZb3UgbWlnaHQgbGlrZSB0aGUgc2ltaWxhciBkYXRhIHN0cnVjdHVyZXMgSSBtYWRlIGZvciBDIzpcclxuICogQkRpY3Rpb25hcnksIEJMaXN0LCBldGMuIFNlZSBodHRwOi8vY29yZS5sb3ljLm5ldC9jb2xsZWN0aW9ucy9cclxuICpcclxuICogQGF1dGhvciBEYXZpZCBQaWVwZ3Jhc3NcclxuICovXHJcbnZhciBCVHJlZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gZW1wdHkgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBjb21wYXJlIEN1c3RvbSBmdW5jdGlvbiB0byBjb21wYXJlIHBhaXJzIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlLlxyXG4gICAgICogICBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0Q29tcGFyYXRvciB3aWxsIGJlIHVzZWQgd2hpY2ggaXMgdmFsaWQgYXMgbG9uZyBhcyBLIGV4dGVuZHMgRGVmYXVsdENvbXBhcmFibGUuXHJcbiAgICAgKiBAcGFyYW0gZW50cmllcyBBIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZVxyXG4gICAgICogQHBhcmFtIG1heE5vZGVTaXplIEJyYW5jaGluZyBmYWN0b3IgKG1heGltdW0gaXRlbXMgb3IgY2hpbGRyZW4gcGVyIG5vZGUpXHJcbiAgICAgKiAgIE11c3QgYmUgaW4gcmFuZ2UgNC4uMjU2LiBJZiB1bmRlZmluZWQgb3IgPDQgdGhlbiBkZWZhdWx0IGlzIHVzZWQ7IGlmID4yNTYgdGhlbiAyNTYuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJUcmVlKGVudHJpZXMsIGNvbXBhcmUsIG1heE5vZGVTaXplKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IEVtcHR5TGVhZjtcclxuICAgICAgICB0aGlzLl9zaXplID0gMDtcclxuICAgICAgICB0aGlzLl9tYXhOb2RlU2l6ZSA9IG1heE5vZGVTaXplID49IDQgPyBNYXRoLm1pbihtYXhOb2RlU2l6ZSwgMjU2KSA6IDMyO1xyXG4gICAgICAgIHRoaXMuX2NvbXBhcmUgPSBjb21wYXJlIHx8IGRlZmF1bHRDb21wYXJhdG9yO1xyXG4gICAgICAgIGlmIChlbnRyaWVzKVxyXG4gICAgICAgICAgICB0aGlzLnNldFBhaXJzKGVudHJpZXMpO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8vIEVTNiBNYXA8SyxWPiBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIHRyZWUuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XHJcbiAgICAgICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIHRyZWUuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zaXplOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImlzRW1wdHlcIiwge1xyXG4gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWZmIHRoZSB0cmVlIGNvbnRhaW5zIG5vIGtleS12YWx1ZSBwYWlycy4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NpemUgPT09IDA7IH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIC8qKiBSZWxlYXNlcyB0aGUgdHJlZSBzbyB0aGF0IGl0cyBzaXplIGlzIDAuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdCA9IEVtcHR5TGVhZjtcclxuICAgICAgICB0aGlzLl9zaXplID0gMDtcclxuICAgIH07XHJcbiAgICAvKiogUnVucyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLCBpbiBvcmRlciBmcm9tIHNtYWxsZXN0IHRvXHJcbiAgICAgKiAgbGFyZ2VzdCBrZXkuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggRVM2IE1hcCwgdGhlIGFyZ3VtZW50IG9yZGVyIHRvXHJcbiAgICAgKiAgdGhlIGNhbGxiYWNrIGlzIGJhY2t3YXJkczogdmFsdWUgZmlyc3QsIHRoZW4ga2V5LiBDYWxsIGZvckVhY2hQYWlyXHJcbiAgICAgKiAgaW5zdGVhZCB0byByZWNlaXZlIHRoZSBrZXkgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAgICogQHBhcmFtIHRoaXNBcmcgSWYgcHJvdmlkZWQsIHRoaXMgcGFyYW1ldGVyIGlzIGFzc2lnbmVkIGFzIHRoZSBgdGhpc2BcclxuICAgICAqICAgICAgICB2YWx1ZSBmb3IgZWFjaCBjYWxsYmFjay5cclxuICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIHRoYXQgd2VyZSBzZW50IHRvIHRoZSBjYWxsYmFjayxcclxuICAgICAqICAgICAgICBvciB0aGUgUiB2YWx1ZSBpZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQge2JyZWFrOlJ9LiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzQXJnICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JFYWNoUGFpcihmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gY2FsbGJhY2sodiwgaywgX3RoaXMpOyB9KTtcclxuICAgIH07XHJcbiAgICAvKiogUnVucyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLCBpbiBvcmRlciBmcm9tIHNtYWxsZXN0IHRvXHJcbiAgICAgKiAgbGFyZ2VzdCBrZXkuIFRoZSBjYWxsYmFjayBjYW4gcmV0dXJuIHticmVhazpSfSAod2hlcmUgUiBpcyBhbnkgdmFsdWVcclxuICAgICAqICBleGNlcHQgdW5kZWZpbmVkKSB0byBzdG9wIGltbWVkaWF0ZWx5IGFuZCByZXR1cm4gUiBmcm9tIGZvckVhY2hQYWlyLlxyXG4gICAgICogQHBhcmFtIG9uRm91bmQgQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmb3IgZWFjaCBrZXktdmFsdWUgcGFpci4gVGhpc1xyXG4gICAgICogICAgICAgIGZ1bmN0aW9uIGNhbiByZXR1cm4ge2JyZWFrOlJ9IHRvIHN0b3AgZWFybHkgd2l0aCByZXN1bHQgUi5cclxuICAgICAqICAgICAgICBUaGUgcmVhc29uIHRoYXQgeW91IG11c3QgcmV0dXJuIHticmVhazpSfSBpbnN0ZWFkIG9mIHNpbXBseSBSXHJcbiAgICAgKiAgICAgICAgaXRzZWxmIGlzIGZvciBjb25zaXN0ZW5jeSB3aXRoIGVkaXRSYW5nZSgpLCB3aGljaCBhbGxvd3NcclxuICAgICAqICAgICAgICBtdWx0aXBsZSBhY3Rpb25zLCBub3QganVzdCBicmVha2luZy5cclxuICAgICAqIEBwYXJhbSBpbml0aWFsQ291bnRlciBUaGlzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdGhpcmQgYXJndW1lbnQgb2ZcclxuICAgICAqICAgICAgICBgb25Gb3VuZGAgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLiBUaGUgY291bnRlciBpbmNyZWFzZXNcclxuICAgICAqICAgICAgICBieSBvbmUgZWFjaCB0aW1lIGBvbkZvdW5kYCBpcyBjYWxsZWQuIERlZmF1bHQgdmFsdWU6IDBcclxuICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFpcnMgc2VudCB0byB0aGUgY2FsbGJhY2sgKHBsdXMgaW5pdGlhbENvdW50ZXIsXHJcbiAgICAgKiAgICAgICAgaWYgeW91IHByb3ZpZGVkIG9uZSkuIElmIHRoZSBjYWxsYmFjayByZXR1cm5lZCB7YnJlYWs6Un0gdGhlblxyXG4gICAgICogICAgICAgIHRoZSBSIHZhbHVlIGlzIHJldHVybmVkIGluc3RlYWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZm9yRWFjaFBhaXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxDb3VudGVyKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9IHRoaXMubWluS2V5KCksIGhpZ2ggPSB0aGlzLm1heEtleSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKGxvdywgaGlnaCwgdHJ1ZSwgY2FsbGJhY2ssIGluaXRpYWxDb3VudGVyKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgcGFpciBpbiB0aGUgdHJlZSBhbmQgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgYSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGtleSB3YXMgbm90IGZvdW5kLlxyXG4gICAgICogQHJldHVybnMgdGhlIHZhbHVlLCBvciBkZWZhdWx0VmFsdWUgaWYgdGhlIGtleSB3YXMgbm90IGZvdW5kLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmdldChrZXksIGRlZmF1bHRWYWx1ZSwgdGhpcyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIG9yIG92ZXJ3cml0ZXMgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgQisgdHJlZS5cclxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc29ydCBvcmRlciBvZlxyXG4gICAgICogICAgICAgIGRhdGEgaW4gdGhlIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUga2V5IChvcHRpb25hbClcclxuICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgV2hldGhlciB0byBvdmVyd3JpdGUgYW4gZXhpc3Rpbmcga2V5LXZhbHVlIHBhaXJcclxuICAgICAqICAgICAgICAoZGVmYXVsdDogdHJ1ZSkuIElmIHRoaXMgaXMgZmFsc2UgYW5kIHRoZXJlIGlzIGFuIGV4aXN0aW5nXHJcbiAgICAgKiAgICAgICAga2V5LXZhbHVlIHBhaXIgdGhlbiB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LlxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIG5ldyBrZXktdmFsdWUgcGFpciB3YXMgYWRkZWQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICogTm90ZTogd2hlbiBvdmVyd3JpdGluZyBhIHByZXZpb3VzIGVudHJ5LCB0aGUga2V5IGlzIHVwZGF0ZWRcclxuICAgICAqIGFzIHdlbGwgYXMgdGhlIHZhbHVlLiBUaGlzIGhhcyBubyBlZmZlY3QgdW5sZXNzIHRoZSBuZXcga2V5XHJcbiAgICAgKiBoYXMgZGF0YSB0aGF0IGRvZXMgbm90IGFmZmVjdCBpdHMgc29ydCBvcmRlci5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fcm9vdC5pc1NoYXJlZClcclxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHRoaXMuX3Jvb3QuY2xvbmUoKTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fcm9vdC5zZXQoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0aGlzKTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgLy8gUm9vdCBub2RlIGhhcyBzcGxpdCwgc28gY3JlYXRlIGEgbmV3IHJvb3Qgbm9kZS5cclxuICAgICAgICB0aGlzLl9yb290ID0gbmV3IEJOb2RlSW50ZXJuYWwoW3RoaXMuX3Jvb3QsIHJlc3VsdF0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgZXhpc3RzIGluIHRoZSBCKyB0cmVlLCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKiBVc2UgZ2V0KCkgZm9yIGJlc3QgcGVyZm9ybWFuY2U7IHVzZSBoYXMoKSBpZiB5b3UgbmVlZCB0b1xyXG4gICAgICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBcInVuZGVmaW5lZCB2YWx1ZVwiIGFuZCBcImtleSBub3QgcHJlc2VudFwiLlxyXG4gICAgICogQHBhcmFtIGtleSBLZXkgdG8gZGV0ZWN0XHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKGtleSwga2V5LCB0cnVlLCB1bmRlZmluZWQpICE9PSAwO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHNpbmdsZSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBCKyB0cmVlLlxyXG4gICAgICogQHBhcmFtIGtleSBLZXkgdG8gZmluZFxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHBhaXIgd2FzIGZvdW5kIGFuZCByZW1vdmVkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgRGVsZXRlUmFuZ2UpICE9PSAwO1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICByZXR1cm4gbnUuc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSkgfHwgb3ZlcndyaXRlID8gbnUgOiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LXZhbHVlIHBhaXJzIHNldC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRoUGFpcnMgPSBmdW5jdGlvbiAocGFpcnMsIG92ZXJ3cml0ZSkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKTtcclxuICAgICAgICByZXR1cm4gbnUuc2V0UGFpcnMocGFpcnMsIG92ZXJ3cml0ZSkgIT09IDAgfHwgb3ZlcndyaXRlID8gbnUgOiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgdHJlZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5cyBwcmVzZW50LlxyXG4gICAgICogIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGFkZC4gSWYgYSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB0cmVlLFxyXG4gICAgICogICAgICAgICBuZWl0aGVyIHRoZSBleGlzdGluZyBrZXkgbm9yIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBtb2RpZmllZC5cclxuICAgICAqICBAcGFyYW0gcmV0dXJuVGhpc0lmVW5jaGFuZ2VkIGlmIHRydWUsIHJldHVybnMgdGhpcyBpZiBhbGwga2V5cyBhbHJlYWR5XHJcbiAgICAgKiAgZXhpc3RlZC4gUGVyZm9ybWFuY2Ugbm90ZTogZHVlIHRvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjbGFzcywgYWxsXHJcbiAgICAgKiAgbm9kZShzKSBsZWFkaW5nIHRvIGV4aXN0aW5nIGtleXMgYXJlIGNsb25lZCBldmVuIGlmIHRoZSBjb2xsZWN0aW9uIGlzXHJcbiAgICAgKiAgdWx0aW1hdGVseSB1bmNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLndpdGhLZXlzID0gZnVuY3Rpb24gKGtleXMsIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHZhciBudSA9IHRoaXMuY2xvbmUoKSwgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgY2hhbmdlZCA9IG51LnNldChrZXlzW2ldLCB1bmRlZmluZWQsIGZhbHNlKSB8fCBjaGFuZ2VkO1xyXG4gICAgICAgIHJldHVybiByZXR1cm5UaGlzSWZVbmNoYW5nZWQgJiYgIWNoYW5nZWQgPyB0aGlzIDogbnU7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSByZXR1cm5UaGlzSWZVbmNoYW5nZWQgaWYgdHJ1ZSwgcmV0dXJucyB0aGlzIGlmIHRoZSBrZXkgZGlkbid0IGV4aXN0LlxyXG4gICAgICogIFBlcmZvcm1hbmNlIG5vdGU6IGR1ZSB0byB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY2xhc3MsIG5vZGUocykgbGVhZGluZ1xyXG4gICAgICogIHRvIHdoZXJlIHRoZSBrZXkgd291bGQgaGF2ZSBiZWVuIHN0b3JlZCBhcmUgY2xvbmVkIGV2ZW4gd2hlbiB0aGUga2V5XHJcbiAgICAgKiAgdHVybnMgb3V0IG5vdCB0byBleGlzdCBhbmQgdGhlIGNvbGxlY3Rpb24gaXMgdW5jaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUud2l0aG91dCA9IGZ1bmN0aW9uIChrZXksIHJldHVyblRoaXNJZlVuY2hhbmdlZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpdGhvdXRSYW5nZShrZXksIGtleSwgdHJ1ZSwgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleXMgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSByZXR1cm5UaGlzSWZVbmNoYW5nZWQgaWYgdHJ1ZSwgcmV0dXJucyB0aGlzIGlmIG5vbmUgb2YgdGhlIGtleXNcclxuICAgICAqICBleGlzdGVkLiBQZXJmb3JtYW5jZSBub3RlOiBkdWUgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGNsYXNzLFxyXG4gICAgICogIG5vZGUocykgbGVhZGluZyB0byB3aGVyZSB0aGUga2V5IHdvdWxkIGhhdmUgYmVlbiBzdG9yZWQgYXJlIGNsb25lZFxyXG4gICAgICogIGV2ZW4gd2hlbiB0aGUga2V5IHR1cm5zIG91dCBub3QgdG8gZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRob3V0S2V5cyA9IGZ1bmN0aW9uIChrZXlzLCByZXR1cm5UaGlzSWZVbmNoYW5nZWQpIHtcclxuICAgICAgICB2YXIgbnUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51LmRlbGV0ZUtleXMoa2V5cykgfHwgIXJldHVyblRoaXNJZlVuY2hhbmdlZCA/IG51IDogdGhpcztcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMgcmVtb3ZlZC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS53aXRob3V0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgICAgIGlmIChudS5kZWxldGVSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoKSA9PT0gMCAmJiByZXR1cm5UaGlzSWZVbmNoYW5nZWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCBwYWlycyByZW1vdmVkIHdoZW5ldmVyIHRoZSBjYWxsYmFja1xyXG4gICAgICogIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuIGB3aGVyZSgpYCBpcyBhIHN5bm9ueW0gZm9yIHRoaXMgbWV0aG9kLiAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgcmV0dXJuVGhpc0lmVW5jaGFuZ2VkKSB7XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5ncmVlZHlDbG9uZSgpO1xyXG4gICAgICAgIHZhciBkZWw7XHJcbiAgICAgICAgbnUuZWRpdEFsbChmdW5jdGlvbiAoaywgdiwgaSkge1xyXG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrKGssIHYsIGkpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbCA9IERlbGV0ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIWRlbCAmJiByZXR1cm5UaGlzSWZVbmNoYW5nZWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHJldHVybiBudTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHRyZWUgd2l0aCBhbGwgdmFsdWVzIGFsdGVyZWQgYnkgYSBjYWxsYmFjayBmdW5jdGlvbi4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5tYXBWYWx1ZXMgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgdG1wID0ge307XHJcbiAgICAgICAgdmFyIG51ID0gdGhpcy5ncmVlZHlDbG9uZSgpO1xyXG4gICAgICAgIG51LmVkaXRBbGwoZnVuY3Rpb24gKGssIHYsIGkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcC52YWx1ZSA9IGNhbGxiYWNrKHYsIGssIGkpLCB0bXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51O1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgIHZhciBpID0gMCwgcCA9IGluaXRpYWxWYWx1ZTtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXModGhpcy5taW5LZXkoKSwgUmV1c2VkQXJyYXkpLCBuZXh0O1xyXG4gICAgICAgIHdoaWxlICghKG5leHQgPSBpdC5uZXh0KCkpLmRvbmUpXHJcbiAgICAgICAgICAgIHAgPSBjYWxsYmFjayhwLCBuZXh0LnZhbHVlLCBpKyssIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBJdGVyYXRvciBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlcyBpdGVtcyBpbiBvcmRlciAoYXNjZW5kaW5nIG9yZGVyIGlmXHJcbiAgICAgKiAgdGhlIGNvbGxlY3Rpb24ncyBjb21wYXJhdG9yIHVzZXMgYXNjZW5kaW5nIG9yZGVyLCBhcyBpcyB0aGUgZGVmYXVsdC4pXHJcbiAgICAgKiAgQHBhcmFtIGxvd2VzdEtleSBGaXJzdCBrZXkgdG8gYmUgaXRlcmF0ZWQsIG9yIHVuZGVmaW5lZCB0byBzdGFydCBhdFxyXG4gICAgICogICAgICAgICBtaW5LZXkoKS4gSWYgdGhlIHNwZWNpZmllZCBrZXkgZG9lc24ndCBleGlzdCB0aGVuIGl0ZXJhdGlvblxyXG4gICAgICogICAgICAgICBzdGFydHMgYXQgdGhlIG5leHQgaGlnaGVyIGtleSAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYXJhdG9yKS5cclxuICAgICAqICBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZVxyXG4gICAgICogICAgICAgICBwYWlycywgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgb24gZXZlcnkgaXRlcmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uIChsb3dlc3RLZXksIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGluZm8gPSB0aGlzLmZpbmRQYXRoKGxvd2VzdEtleSk7XHJcbiAgICAgICAgaWYgKGluZm8gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7XHJcbiAgICAgICAgdmFyIG5vZGVxdWV1ZSA9IGluZm8ubm9kZXF1ZXVlLCBub2RlaW5kZXggPSBpbmZvLm5vZGVpbmRleCwgbGVhZiA9IGluZm8ubGVhZjtcclxuICAgICAgICB2YXIgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgdmFyIGkgPSAobG93ZXN0S2V5ID09PSB1bmRlZmluZWQgPyAtMSA6IGxlYWYuaW5kZXhPZihsb3dlc3RLZXksIDAsIHRoaXMuX2NvbXBhcmUpIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAganVtcDogZm9yICg7Oykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA8IGxlYWYua2V5cy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtsZWFmLmtleXNbaV0sIGxlYWYudmFsdWVzW2ldXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA8IGxlYWYua2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0gbGVhZi5rZXlzW2ldLCByZXVzZWRBcnJheVsxXSA9IGxlYWYudmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXVzZWRBcnJheSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMjtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgbGVhZiBub2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxldmVsID0gLTE7Oykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbGV2ZWwgPj0gbm9kZXF1ZXVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBqdW1wO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbm9kZWluZGV4W2xldmVsXSA8IG5vZGVxdWV1ZVtsZXZlbF0ubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsZXZlbCA+IDA7IGxldmVsLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVxdWV1ZVtsZXZlbCAtIDFdID0gbm9kZXF1ZXVlW2xldmVsXVtub2RlaW5kZXhbbGV2ZWxdXS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVpbmRleFtsZXZlbCAtIDFdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFmID0gbm9kZXF1ZXVlWzBdW25vZGVpbmRleFswXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlcyBpdGVtcyBpbiByZXZlcnNlZCBvcmRlci5cclxuICAgICAqICBAcGFyYW0gaGlnaGVzdEtleSBLZXkgYXQgd2hpY2ggdG8gc3RhcnQgaXRlcmF0aW5nLCBvciB1bmRlZmluZWQgdG9cclxuICAgICAqICAgICAgICAgc3RhcnQgYXQgbWF4S2V5KCkuIElmIHRoZSBzcGVjaWZpZWQga2V5IGRvZXNuJ3QgZXhpc3QgdGhlbiBpdGVyYXRpb25cclxuICAgICAqICAgICAgICAgc3RhcnRzIGF0IHRoZSBuZXh0IGxvd2VyIGtleSAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYXJhdG9yKS5cclxuICAgICAqICBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZVxyXG4gICAgICogICAgICAgICBwYWlycywgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgb24gZXZlcnkgaXRlcmF0aW9uLlxyXG4gICAgICogIEBwYXJhbSBza2lwSGlnaGVzdCBJZmYgdGhpcyBmbGFnIGlzIHRydWUgYW5kIHRoZSBoaWdoZXN0S2V5IGV4aXN0cyBpbiB0aGVcclxuICAgICAqICAgICAgICAgY29sbGVjdGlvbiwgdGhlIHBhaXIgbWF0Y2hpbmcgaGlnaGVzdEtleSBpcyBza2lwcGVkLCBub3QgaXRlcmF0ZWQuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5lbnRyaWVzUmV2ZXJzZWQgPSBmdW5jdGlvbiAoaGlnaGVzdEtleSwgcmV1c2VkQXJyYXksIHNraXBIaWdoZXN0KSB7XHJcbiAgICAgICAgaWYgKGhpZ2hlc3RLZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBoaWdoZXN0S2V5ID0gdGhpcy5tYXhLZXkoKTtcclxuICAgICAgICAgICAgc2tpcEhpZ2hlc3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmIChoaWdoZXN0S2V5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IoKTsgLy8gY29sbGVjdGlvbiBpcyBlbXB0eVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2EgPSB0aGlzLmZpbmRQYXRoKGhpZ2hlc3RLZXkpIHx8IHRoaXMuZmluZFBhdGgodGhpcy5tYXhLZXkoKSksIG5vZGVxdWV1ZSA9IF9hLm5vZGVxdWV1ZSwgbm9kZWluZGV4ID0gX2Eubm9kZWluZGV4LCBsZWFmID0gX2EubGVhZjtcclxuICAgICAgICBjaGVjayghbm9kZXF1ZXVlWzBdIHx8IGxlYWYgPT09IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dLCBcIndhdCFcIik7XHJcbiAgICAgICAgdmFyIGkgPSBsZWFmLmluZGV4T2YoaGlnaGVzdEtleSwgMCwgdGhpcy5fY29tcGFyZSk7XHJcbiAgICAgICAgaWYgKCFza2lwSGlnaGVzdCAmJiBpIDwgbGVhZi5rZXlzLmxlbmd0aCAmJiB0aGlzLl9jb21wYXJlKGxlYWYua2V5c1tpXSwgaGlnaGVzdEtleSkgPD0gMClcclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IHJldXNlZEFycmF5ICE9PSB1bmRlZmluZWQgPyAxIDogMDtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBqdW1wOiBmb3IgKDs7KSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1pID49IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtsZWFmLmtleXNbaV0sIGxlYWYudmFsdWVzW2ldXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0taSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZWRBcnJheVswXSA9IGxlYWYua2V5c1tpXSwgcmV1c2VkQXJyYXlbMV0gPSBsZWFmLnZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV1c2VkQXJyYXkgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IGxlYWYgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsZXZlbCA9IC0xOzspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2xldmVsID49IG5vZGVxdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUganVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLW5vZGVpbmRleFtsZXZlbF0gPj0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGV2ZWwgPiAwOyBsZXZlbC0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlcXVldWVbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbF1bbm9kZWluZGV4W2xldmVsXV0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlaW5kZXhbbGV2ZWwgLSAxXSA9IG5vZGVxdWV1ZVtsZXZlbCAtIDFdLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZiA9IG5vZGVxdWV1ZVswXVtub2RlaW5kZXhbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gbGVhZi5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSByZXVzZWRBcnJheSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyogVXNlZCBieSBlbnRyaWVzKCkgYW5kIGVudHJpZXNSZXZlcnNlZCgpIHRvIHByZXBhcmUgdG8gc3RhcnQgaXRlcmF0aW5nLlxyXG4gICAgICogSXQgZGV2ZWxvcHMgYSBcIm5vZGUgcXVldWVcIiBmb3IgZWFjaCBub24tbGVhZiBsZXZlbCBvZiB0aGUgdHJlZS5cclxuICAgICAqIExldmVscyBhcmUgbnVtYmVyZWQgXCJib3R0b20tdXBcIiBzbyB0aGF0IGxldmVsIDAgaXMgYSBsaXN0IG9mIGxlYWZcclxuICAgICAqIG5vZGVzIGZyb20gYSBsb3ctbGV2ZWwgbm9uLWxlYWYgbm9kZS4gVGhlIHF1ZXVlIGF0IGEgZ2l2ZW4gbGV2ZWwgTFxyXG4gICAgICogY29uc2lzdHMgb2Ygbm9kZXF1ZXVlW0xdIHdoaWNoIGlzIHRoZSBjaGlsZHJlbiBvZiBhIEJOb2RlSW50ZXJuYWwsXHJcbiAgICAgKiBhbmQgbm9kZWluZGV4W0xdLCB0aGUgY3VycmVudCBpbmRleCB3aXRoaW4gdGhhdCBjaGlsZCBsaXN0LCBzdWNoXHJcbiAgICAgKiBzdWNoIHRoYXQgbm9kZXF1ZXVlW0wtMV0gPT09IG5vZGVxdWV1ZVtMXVtub2RlaW5kZXhbTF1dLmNoaWxkcmVuLlxyXG4gICAgICogKEhvd2V2ZXIgaW5zaWRlIHRoaXMgZnVuY3Rpb24gdGhlIG9yZGVyIGlzIHJldmVyc2VkLilcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZpbmRQYXRoID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBuZXh0bm9kZSA9IHRoaXMuX3Jvb3Q7XHJcbiAgICAgICAgdmFyIG5vZGVxdWV1ZSwgbm9kZWluZGV4O1xyXG4gICAgICAgIGlmIChuZXh0bm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgbm9kZXF1ZXVlID0gRW1wdHlBcnJheSwgbm9kZWluZGV4ID0gRW1wdHlBcnJheTsgLy8gYXZvaWQgYWxsb2NhdGlvbnNcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGVxdWV1ZSA9IFtdLCBub2RlaW5kZXggPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7ICFuZXh0bm9kZS5pc0xlYWY7IGQrKykge1xyXG4gICAgICAgICAgICAgICAgbm9kZXF1ZXVlW2RdID0gbmV4dG5vZGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBub2RlaW5kZXhbZF0gPSBrZXkgPT09IHVuZGVmaW5lZCA/IDAgOiBuZXh0bm9kZS5pbmRleE9mKGtleSwgMCwgdGhpcy5fY29tcGFyZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZWluZGV4W2RdID49IG5vZGVxdWV1ZVtkXS5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBmaXJzdCBrZXkgPiBtYXhLZXkoKVxyXG4gICAgICAgICAgICAgICAgbmV4dG5vZGUgPSBub2RlcXVldWVbZF1bbm9kZWluZGV4W2RdXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlcXVldWUucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICBub2RlaW5kZXgucmV2ZXJzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBub2RlcXVldWU6IG5vZGVxdWV1ZSwgbm9kZWluZGV4OiBub2RlaW5kZXgsIGxlYWY6IG5leHRub2RlIH07XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgdGhpc2AgYW5kIGBvdGhlcmAuXHJcbiAgICAgKiBGb3IgZWZmaWNpZW5jeSwgdGhlIGRpZmYgaXMgcmV0dXJuZWQgdmlhIGludm9jYXRpb25zIG9mIHN1cHBsaWVkIGhhbmRsZXJzLlxyXG4gICAgICogVGhlIGNvbXB1dGF0aW9uIGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2UgaW4gd2hpY2ggdGhlIHR3byB0cmVlcyBoYXZlIGxhcmdlIGFtb3VudHNcclxuICAgICAqIG9mIHNoYXJlZCBkYXRhIChvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBgY2xvbmVgIG9yIGB3aXRoYCBBUElzKSBhbmQgd2lsbCBhdm9pZFxyXG4gICAgICogYW55IGl0ZXJhdGlvbiBvZiBzaGFyZWQgc3RhdGUuXHJcbiAgICAgKiBUaGUgaGFuZGxlcnMgY2FuIGNhdXNlIGNvbXB1dGF0aW9uIHRvIGVhcmx5IGV4aXQgYnkgcmV0dXJuaW5nIHticmVhazogUn0uXHJcbiAgICAgKiBOZWl0aGVyIG9mIHRoZSBjb2xsZWN0aW9ucyBzaG91bGQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGNvbXBhcmlzb24gcHJvY2VzcyAoaW4geW91ciBjYWxsYmFja3MpLCBhcyB0aGlzIG1ldGhvZCBhc3N1bWVzIHRoZXkgd2lsbCBub3QgYmUgbXV0YXRlZC5cclxuICAgICAqIEBwYXJhbSBvdGhlciBUaGUgdHJlZSB0byBjb21wdXRlIGEgZGlmZiBhZ2FpbnN0LlxyXG4gICAgICogQHBhcmFtIG9ubHlUaGlzIENhbGxiYWNrIGludm9rZWQgZm9yIGFsbCBrZXlzIG9ubHkgcHJlc2VudCBpbiBgdGhpc2AuXHJcbiAgICAgKiBAcGFyYW0gb25seU90aGVyIENhbGxiYWNrIGludm9rZWQgZm9yIGFsbCBrZXlzIG9ubHkgcHJlc2VudCBpbiBgb3RoZXJgLlxyXG4gICAgICogQHBhcmFtIGRpZmZlcmVudCBDYWxsYmFjayBpbnZva2VkIGZvciBhbGwga2V5cyB3aXRoIGRpZmZlcmluZyB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5kaWZmQWdhaW5zdCA9IGZ1bmN0aW9uIChvdGhlciwgb25seVRoaXMsIG9ubHlPdGhlciwgZGlmZmVyZW50KSB7XHJcbiAgICAgICAgaWYgKG90aGVyLl9jb21wYXJlICE9PSB0aGlzLl9jb21wYXJlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWUgY29tcGFyYXRvcnMgYXJlIG5vdCB0aGUgc2FtZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkgfHwgb3RoZXIuaXNFbXB0eSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5ICYmIG90aGVyLmlzRW1wdHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAvLyBJZiBvbmUgdHJlZSBpcyBlbXB0eSwgZXZlcnl0aGluZyB3aWxsIGJlIGFuIG9ubHlUaGlzL29ubHlPdGhlci5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBvbmx5T3RoZXIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEJUcmVlLnN0ZXBUb0VuZChCVHJlZS5tYWtlRGlmZkN1cnNvcihvdGhlciksIG9ubHlPdGhlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBvbmx5VGhpcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogQlRyZWUuc3RlcFRvRW5kKEJUcmVlLm1ha2VEaWZmQ3Vyc29yKHRoaXMpLCBvbmx5VGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEN1cnNvci1iYXNlZCBkaWZmIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxyXG4gICAgICAgIC8vIC0gVW50aWwgbmVpdGhlciBjdXJzb3IgaGFzIG5hdmlnYXRlZCB0byB0aGUgZW5kIG9mIHRoZSB0cmVlLCBkbyB0aGUgZm9sbG93aW5nOlxyXG4gICAgICAgIC8vICAtIElmIHRoZSBgdGhpc2AgY3Vyc29yIGlzIFwiYmVoaW5kXCIgdGhlIGBvdGhlcmAgY3Vyc29yIChzdHJpY3RseSA8LCB2aWEgY29tcGFyZSksIGFkdmFuY2UgaXQuXHJcbiAgICAgICAgLy8gIC0gT3RoZXJ3aXNlLCBhZHZhbmNlIHRoZSBgb3RoZXJgIGN1cnNvci5cclxuICAgICAgICAvLyAgLSBBbnkgdGltZSBhIGN1cnNvciBpcyBzdGVwcGVkLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmc6XHJcbiAgICAgICAgLy8gICAgLSBJZiBlaXRoZXIgY3Vyc29yIHBvaW50cyB0byBhIGtleS92YWx1ZSBwYWlyOlxyXG4gICAgICAgIC8vICAgICAgLSBJZiB0aGlzQ3Vyc29yID09PSBvdGhlckN1cnNvciBhbmQgdGhlIHZhbHVlcyBkaWZmZXIsIGl0IGlzIGEgRGlmZmVyZW50LlxyXG4gICAgICAgIC8vICAgICAgLSBJZiB0aGlzQ3Vyc29yID4gb3RoZXJDdXJzb3IgYW5kIG90aGVyQ3Vyc29yIGlzIGF0IGEga2V5L3ZhbHVlIHBhaXIsIGl0IGlzIGFuIE9ubHlPdGhlci5cclxuICAgICAgICAvLyAgICAgIC0gSWYgdGhpc0N1cnNvciA8IG90aGVyQ3Vyc29yIGFuZCB0aGlzQ3Vyc29yIGlzIGF0IGEga2V5L3ZhbHVlIHBhaXIsIGl0IGlzIGFuIE9ubHlUaGlzIGFzIGxvbmcgYXMgdGhlIG1vc3QgcmVjZW50IFxyXG4gICAgICAgIC8vICAgICAgICBjdXJzb3Igc3RlcCB3YXMgKm5vdCogb3RoZXJDdXJzb3IgYWR2YW5jaW5nIGZyb20gYSB0aWUuIFRoZSBleHRyYSBjb25kaXRpb24gYXZvaWRzIGVycm9uZW91cyBPbmx5T3RoZXIgY2FsbHMgXHJcbiAgICAgICAgLy8gICAgICAgIHRoYXQgd291bGQgb2NjdXIgZHVlIHRvIG90aGVyQ3Vyc29yIGJlaW5nIHRoZSBcImxlYWRlclwiLlxyXG4gICAgICAgIC8vICAgIC0gT3RoZXJ3aXNlLCBpZiBib3RoIGN1cnNvcnMgcG9pbnQgdG8gbm9kZXMsIGNvbXBhcmUgdGhlbS4gSWYgdGhleSBhcmUgZXF1YWwgYnkgcmVmZXJlbmNlIChzaGFyZWQpLCBza2lwXHJcbiAgICAgICAgLy8gICAgICBib3RoIGN1cnNvcnMgdG8gdGhlIG5leHQgbm9kZSBpbiB0aGUgd2Fsay5cclxuICAgICAgICAvLyAtIE9uY2Ugb25lIGN1cnNvciBoYXMgZmluaXNoZWQgc3RlcHBpbmcsIGFueSByZW1haW5pbmcgc3RlcHMgKGlmIGFueSkgYXJlIHRha2VuIGFuZCBrZXkvdmFsdWUgcGFpcnMgYXJlIGxvZ2dlZFxyXG4gICAgICAgIC8vICAgYXMgT25seU90aGVyIChpZiBvdGhlckN1cnNvciBpcyBzdGVwcGluZykgb3IgT25seVRoaXMgKGlmIHRoaXNDdXJzb3IgaXMgc3RlcHBpbmcpLlxyXG4gICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIGdpdmVzIHRoZSBjcml0aWNhbCBndWFyYW50ZWUgdGhhdCBhbGwgbG9jYXRpb25zIChib3RoIG5vZGVzIGFuZCBrZXkvdmFsdWUgcGFpcnMpIGluIGJvdGggdHJlZXMgdGhhdCBcclxuICAgICAgICAvLyBhcmUgaWRlbnRpY2FsIGJ5IHZhbHVlIChhbmQgcG9zc2libHkgYnkgcmVmZXJlbmNlKSB3aWxsIGJlIHZpc2l0ZWQgKmF0IHRoZSBzYW1lIHRpbWUqIGJ5IHRoZSBjdXJzb3JzLlxyXG4gICAgICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgcG9zc2liaWxpdHkgb2YgZW1pdHRpbmcgaW5jb3JyZWN0IGRpZmZzLCBhcyB3ZWxsIGFzIGFsbG93aW5nIGZvciBza2lwcGluZyBzaGFyZWQgbm9kZXMuXHJcbiAgICAgICAgdmFyIF9jb21wYXJlID0gdGhpcy5fY29tcGFyZTtcclxuICAgICAgICB2YXIgdGhpc0N1cnNvciA9IEJUcmVlLm1ha2VEaWZmQ3Vyc29yKHRoaXMpO1xyXG4gICAgICAgIHZhciBvdGhlckN1cnNvciA9IEJUcmVlLm1ha2VEaWZmQ3Vyc29yKG90aGVyKTtcclxuICAgICAgICAvLyBJdCBkb2Vzbid0IG1hdHRlciBob3cgdGhpc1N0ZXBwZWRMYXN0IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICAgIC8vIFN0ZXAgb3JkZXIgaXMgb25seSB1c2VkIHdoZW4gZWl0aGVyIGN1cnNvciBpcyBhdCBhIGxlYWYsIGFuZCBjdXJzb3JzIGFsd2F5cyBzdGFydCBhdCBhIG5vZGUuXHJcbiAgICAgICAgdmFyIHRoaXNTdWNjZXNzID0gdHJ1ZSwgb3RoZXJTdWNjZXNzID0gdHJ1ZSwgcHJldkN1cnNvck9yZGVyID0gQlRyZWUuY29tcGFyZSh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzU3VjY2VzcyAmJiBvdGhlclN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnNvck9yZGVyID0gQlRyZWUuY29tcGFyZSh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUpO1xyXG4gICAgICAgICAgICB2YXIgdGhpc0xlYWYgPSB0aGlzQ3Vyc29yLmxlYWYsIHRoaXNJbnRlcm5hbFNwaW5lID0gdGhpc0N1cnNvci5pbnRlcm5hbFNwaW5lLCB0aGlzTGV2ZWxJbmRpY2VzID0gdGhpc0N1cnNvci5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgICAgIHZhciBvdGhlckxlYWYgPSBvdGhlckN1cnNvci5sZWFmLCBvdGhlckludGVybmFsU3BpbmUgPSBvdGhlckN1cnNvci5pbnRlcm5hbFNwaW5lLCBvdGhlckxldmVsSW5kaWNlcyA9IG90aGVyQ3Vyc29yLmxldmVsSW5kaWNlcztcclxuICAgICAgICAgICAgaWYgKHRoaXNMZWFmIHx8IG90aGVyTGVhZikge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnNvcnMgd2VyZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBsYXN0IHN0ZXAsIHRoZW4gdGhlcmUgaXMgbm8gd29yayB0byBiZSBkb25lLlxyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZDdXJzb3JPcmRlciAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJzb3JPcmRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0xlYWYgJiYgb3RoZXJMZWFmICYmIGRpZmZlcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXF1YWwga2V5cywgY2hlY2sgZm9yIG1vZGlmaWNhdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gdGhpc0xlYWYudmFsdWVzW3RoaXNMZXZlbEluZGljZXNbdGhpc0xldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlckxlYWYudmFsdWVzW290aGVyTGV2ZWxJbmRpY2VzW290aGVyTGV2ZWxJbmRpY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmlzKHZhbFRoaXMsIHZhbE90aGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBkaWZmZXJlbnQodGhpc0N1cnNvci5jdXJyZW50S2V5LCB2YWxUaGlzLCB2YWxPdGhlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnJlYWspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vyc29yT3JkZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIGtub3cgdGhhdCBlaXRoZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEuIG90aGVyQ3Vyc29yIHN0ZXBwZWQgbGFzdCBmcm9tIGEgc3RhcnRpbmcgcG9zaXRpb24gdGhhdCB0cmFpbGVkIHRoaXNDdXJzb3IsIGFuZCBpcyBzdGlsbCBiZWhpbmQsIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIuIHRoaXNDdXJzb3Igc3RlcHBlZCBsYXN0IGFuZCBsZWFwZnJvZ2dlZCBvdGhlckN1cnNvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgb2YgdGhlc2UgY2FzZXMgaXMgYW4gXCJvbmx5IG90aGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyTGVhZiAmJiBvbmx5T3RoZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdGhlclZhbCA9IG90aGVyTGVhZi52YWx1ZXNbb3RoZXJMZXZlbEluZGljZXNbb3RoZXJMZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9ubHlPdGhlcihvdGhlckN1cnNvci5jdXJyZW50S2V5LCBvdGhlclZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5icmVhaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9ubHlUaGlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzTGVhZiAmJiBwcmV2Q3Vyc29yT3JkZXIgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxUaGlzID0gdGhpc0xlYWYudmFsdWVzW3RoaXNMZXZlbEluZGljZXNbdGhpc0xldmVsSW5kaWNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb25seVRoaXModGhpc0N1cnNvci5jdXJyZW50S2V5LCB2YWxUaGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXNMZWFmICYmICFvdGhlckxlYWYgJiYgY3Vyc29yT3JkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBsYXN0VGhpcyA9IHRoaXNJbnRlcm5hbFNwaW5lLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGFzdE90aGVyID0gb3RoZXJJbnRlcm5hbFNwaW5lLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZVRoaXMgPSB0aGlzSW50ZXJuYWxTcGluZVtsYXN0VGhpc11bdGhpc0xldmVsSW5kaWNlc1tsYXN0VGhpc11dO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVPdGhlciA9IG90aGVySW50ZXJuYWxTcGluZVtsYXN0T3RoZXJdW290aGVyTGV2ZWxJbmRpY2VzW2xhc3RPdGhlcl1dO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVPdGhlciA9PT0gbm9kZVRoaXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2Q3Vyc29yT3JkZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNTdWNjZXNzID0gQlRyZWUuc3RlcCh0aGlzQ3Vyc29yLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBvdGhlclN1Y2Nlc3MgPSBCVHJlZS5zdGVwKG90aGVyQ3Vyc29yLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2Q3Vyc29yT3JkZXIgPSBjdXJzb3JPcmRlcjtcclxuICAgICAgICAgICAgaWYgKGN1cnNvck9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1N1Y2Nlc3MgPSBCVHJlZS5zdGVwKHRoaXNDdXJzb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3RoZXJTdWNjZXNzID0gQlRyZWUuc3RlcChvdGhlckN1cnNvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXNTdWNjZXNzICYmIG9ubHlUaGlzKVxyXG4gICAgICAgICAgICByZXR1cm4gQlRyZWUuZmluaXNoQ3Vyc29yV2Fsayh0aGlzQ3Vyc29yLCBvdGhlckN1cnNvciwgX2NvbXBhcmUsIG9ubHlUaGlzKTtcclxuICAgICAgICBpZiAob3RoZXJTdWNjZXNzICYmIG9ubHlPdGhlcilcclxuICAgICAgICAgICAgcmV0dXJuIEJUcmVlLmZpbmlzaEN1cnNvcldhbGsob3RoZXJDdXJzb3IsIHRoaXNDdXJzb3IsIF9jb21wYXJlLCBvbmx5T3RoZXIpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGRpZmZBZ2FpbnN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCVHJlZS5maW5pc2hDdXJzb3JXYWxrID0gZnVuY3Rpb24gKGN1cnNvciwgY3Vyc29yRmluaXNoZWQsIGNvbXBhcmVLZXlzLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBjb21wYXJlZCA9IEJUcmVlLmNvbXBhcmUoY3Vyc29yLCBjdXJzb3JGaW5pc2hlZCwgY29tcGFyZUtleXMpO1xyXG4gICAgICAgIGlmIChjb21wYXJlZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIUJUcmVlLnN0ZXAoY3Vyc29yKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbXBhcmVkIDwgMCkge1xyXG4gICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJjdXJzb3Igd2FsayB0ZXJtaW5hdGVkIGVhcmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQlRyZWUuc3RlcFRvRW5kKGN1cnNvciwgY2FsbGJhY2spO1xyXG4gICAgfTtcclxuICAgIEJUcmVlLnN0ZXBUb0VuZCA9IGZ1bmN0aW9uIChjdXJzb3IsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIGNhblN0ZXAgPSB0cnVlO1xyXG4gICAgICAgIHdoaWxlIChjYW5TdGVwKSB7XHJcbiAgICAgICAgICAgIHZhciBsZWFmID0gY3Vyc29yLmxlYWYsIGxldmVsSW5kaWNlcyA9IGN1cnNvci5sZXZlbEluZGljZXMsIGN1cnJlbnRLZXkgPSBjdXJzb3IuY3VycmVudEtleTtcclxuICAgICAgICAgICAgaWYgKGxlYWYpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxlYWYudmFsdWVzW2xldmVsSW5kaWNlc1tsZXZlbEluZGljZXMubGVuZ3RoIC0gMV1dO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKGN1cnJlbnRLZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJyZWFrKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FuU3RlcCA9IEJUcmVlLnN0ZXAoY3Vyc29yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCVHJlZS5tYWtlRGlmZkN1cnNvciA9IGZ1bmN0aW9uICh0cmVlKSB7XHJcbiAgICAgICAgdmFyIF9yb290ID0gdHJlZS5fcm9vdCwgaGVpZ2h0ID0gdHJlZS5oZWlnaHQ7XHJcbiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0OiBoZWlnaHQsIGludGVybmFsU3BpbmU6IFtbX3Jvb3RdXSwgbGV2ZWxJbmRpY2VzOiBbMF0sIGxlYWY6IHVuZGVmaW5lZCwgY3VycmVudEtleTogX3Jvb3QubWF4S2V5KCkgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEFkdmFuY2VzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc3RlcCBpbiB0aGUgd2FsayBvZiBpdHMgdHJlZS5cclxuICAgICAqIEN1cnNvcnMgYXJlIHdhbGtlZCBiYWNrd2FyZHMgaW4gc29ydCBvcmRlciwgYXMgdGhpcyBhbGxvd3MgdGhlbSB0byBsZXZlcmFnZSBtYXhLZXkoKSBpbiBvcmRlciB0byBiZSBjb21wYXJlZCBpbiBPKDEpLlxyXG4gICAgICogQHBhcmFtIGN1cnNvciBUaGUgY3Vyc29yIHRvIHN0ZXBcclxuICAgICAqIEBwYXJhbSBzdGVwVG9Ob2RlIElmIHRydWUsIHRoZSBjdXJzb3Igd2lsbCBiZSBhZHZhbmNlZCB0byB0aGUgbmV4dCBub2RlIChza2lwcGluZyB2YWx1ZXMpXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBzdGVwIHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIHRoZSBzdGVwIHdvdWxkIGhhdmUgY2F1c2VkIHRoZSBjdXJzb3IgdG8gbW92ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgdHJlZS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUuc3RlcCA9IGZ1bmN0aW9uIChjdXJzb3IsIHN0ZXBUb05vZGUpIHtcclxuICAgICAgICB2YXIgaW50ZXJuYWxTcGluZSA9IGN1cnNvci5pbnRlcm5hbFNwaW5lLCBsZXZlbEluZGljZXMgPSBjdXJzb3IubGV2ZWxJbmRpY2VzLCBsZWFmID0gY3Vyc29yLmxlYWY7XHJcbiAgICAgICAgaWYgKHN0ZXBUb05vZGUgPT09IHRydWUgfHwgbGVhZikge1xyXG4gICAgICAgICAgICB2YXIgbGV2ZWxzTGVuZ3RoID0gbGV2ZWxJbmRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgLy8gU3RlcCB0byB0aGUgbmV4dCBub2RlIG9ubHkgaWY6XHJcbiAgICAgICAgICAgIC8vIC0gV2UgYXJlIGV4cGxpY2l0bHkgZGlyZWN0ZWQgdG8gdmlhIHN0ZXBUb05vZGUsIG9yXHJcbiAgICAgICAgICAgIC8vIC0gVGhlcmUgYXJlIG5vIGtleS92YWx1ZSBwYWlycyBsZWZ0IHRvIHN0ZXAgdG8gaW4gdGhpcyBsZWFmXHJcbiAgICAgICAgICAgIGlmIChzdGVwVG9Ob2RlID09PSB0cnVlIHx8IGxldmVsSW5kaWNlc1tsZXZlbHNMZW5ndGggLSAxXSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNwaW5lTGVuZ3RoID0gaW50ZXJuYWxTcGluZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAvLyBSb290IGlzIGxlYWZcclxuICAgICAgICAgICAgICAgIGlmIChzcGluZUxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBXYWxrIGJhY2sgdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIG5ldyBzdWJ0cmVlIHRvIGRlc2NlbmQgaW50b1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVMZXZlbEluZGV4ID0gc3BpbmVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxldmVsSW5kZXhXYWxrQmFjayA9IG5vZGVMZXZlbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGxldmVsSW5kZXhXYWxrQmFjayA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsSW5kaWNlc1tsZXZlbEluZGV4V2Fsa0JhY2tdID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZWxJbmRleFdhbGtCYWNrIDwgbGV2ZWxzTGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGxlYWYgc3RhdGUgZnJvbSBjdXJzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5sZWFmID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxJbmRpY2VzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdhbGtlZCB1cHdhcmRzIHBhc3QgYW55IGludGVybmFsIG5vZGUsIHNsaWNlIHRoZW0gb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbEluZGV4V2Fsa0JhY2sgPCBub2RlTGV2ZWxJbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5pbnRlcm5hbFNwaW5lID0gaW50ZXJuYWxTcGluZS5zbGljZSgwLCBsZXZlbEluZGV4V2Fsa0JhY2sgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0byBuZXcgaW50ZXJuYWwgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGludGVybmFsU3BpbmVbbGV2ZWxJbmRleFdhbGtCYWNrXVstLWxldmVsSW5kaWNlc1tsZXZlbEluZGV4V2Fsa0JhY2tdXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsSW5kZXhXYWxrQmFjay0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gQ3Vyc29yIGlzIGluIHRoZSBmYXIgbGVmdCBsZWFmIG9mIHRoZSB0cmVlLCBubyBtb3JlIG5vZGVzIHRvIGVudW1lcmF0ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTW92ZSB0byBuZXcgbGVhZiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlSW5kZXggPSAtLWxldmVsSW5kaWNlc1tsZXZlbHNMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIGN1cnNvci5jdXJyZW50S2V5ID0gbGVhZi5rZXlzW3ZhbHVlSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIEN1cnNvciBkb2VzIG5vdCBwb2ludCB0byBhIHZhbHVlIGluIGEgbGVhZiwgc28gbW92ZSBkb3dud2FyZHNcclxuICAgICAgICAgICAgdmFyIG5leHRMZXZlbCA9IGludGVybmFsU3BpbmUubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExldmVsID0gbmV4dExldmVsIC0gMTtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBpbnRlcm5hbFNwaW5lW2N1cnJlbnRMZXZlbF1bbGV2ZWxJbmRpY2VzW2N1cnJlbnRMZXZlbF1dO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgICAgIC8vIEVudGVyaW5nIGludG8gYSBsZWFmLiBTZXQgdGhlIGN1cnNvciB0byBwb2ludCBhdCB0aGUgbGFzdCBrZXkvdmFsdWUgcGFpci5cclxuICAgICAgICAgICAgICAgIGN1cnNvci5sZWFmID0gbm9kZTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUluZGV4ID0gbGV2ZWxJbmRpY2VzW25leHRMZXZlbF0gPSBub2RlLnZhbHVlcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yLmN1cnJlbnRLZXkgPSBub2RlLmtleXNbdmFsdWVJbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxTcGluZVtuZXh0TGV2ZWxdID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRJbmRleCA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBsZXZlbEluZGljZXNbbmV4dExldmVsXSA9IGNoaWxkSW5kZXg7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IuY3VycmVudEtleSA9IGNoaWxkcmVuW2NoaWxkSW5kZXhdLm1heEtleSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmVzIHRoZSB0d28gY3Vyc29ycy4gUmV0dXJucyBhIHZhbHVlIGluZGljYXRpbmcgd2hpY2ggY3Vyc29yIGlzIGFoZWFkIGluIGEgd2Fsay5cclxuICAgICAqIE5vdGUgdGhhdCBjdXJzb3JzIGFyZSBhZHZhbmNlZCBpbiByZXZlcnNlIHNvcnRpbmcgb3JkZXIuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3Vyc29yQSwgY3Vyc29yQiwgY29tcGFyZUtleXMpIHtcclxuICAgICAgICB2YXIgaGVpZ2h0QSA9IGN1cnNvckEuaGVpZ2h0LCBjdXJyZW50S2V5QSA9IGN1cnNvckEuY3VycmVudEtleSwgbGV2ZWxJbmRpY2VzQSA9IGN1cnNvckEubGV2ZWxJbmRpY2VzO1xyXG4gICAgICAgIHZhciBoZWlnaHRCID0gY3Vyc29yQi5oZWlnaHQsIGN1cnJlbnRLZXlCID0gY3Vyc29yQi5jdXJyZW50S2V5LCBsZXZlbEluZGljZXNCID0gY3Vyc29yQi5sZXZlbEluZGljZXM7XHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgY29tcGFyaXNvbiBvcmRlciwgYXMgY3Vyc29ycyBhcmUgYWR2YW5jZWQgaW4gcmV2ZXJzZSBzb3J0aW5nIG9yZGVyXHJcbiAgICAgICAgdmFyIGtleUNvbXBhcmlzb24gPSBjb21wYXJlS2V5cyhjdXJyZW50S2V5QiwgY3VycmVudEtleUEpO1xyXG4gICAgICAgIGlmIChrZXlDb21wYXJpc29uICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXlDb21wYXJpc29uO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBOb3JtYWxpemUgZGVwdGggdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSBzaG9ydGVzdCB0cmVlLlxyXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGNvbmN1cnJlbnQgY3Vyc29yIHdhbGtzIG9mIHRyZWVzIG9mIGRpZmZlcmluZyBoZWlnaHRzIGNhbiByZWxpYWJseSBsYW5kIG9uIHNoYXJlZCBub2RlcyBhdCB0aGUgc2FtZSB0aW1lLlxyXG4gICAgICAgIC8vIFRvIGFjY29tcGxpc2ggdGhpcywgYSBjdXJzb3IgdGhhdCBpcyBvbiBhbiBpbnRlcm5hbCBub2RlIGF0IGRlcHRoIEQxIHdpdGggbWF4S2V5IFggaXMgY29uc2lkZXJlZCBcImJlaGluZFwiIGEgY3Vyc29yIG9uIGFuXHJcbiAgICAgICAgLy8gaW50ZXJuYWwgbm9kZSBhdCBkZXB0aCBEMiB3aXRoIG1heEtleSBZLCB3aGVuIEQxIDwgRDIuIFRodXMsIGFsd2F5cyB3YWxraW5nIHRoZSBjdXJzb3IgdGhhdCBpcyBcImJlaGluZFwiIHdpbGwgYWxsb3cgdGhlIGN1cnNvclxyXG4gICAgICAgIC8vIGF0IHNoYWxsb3dlciBkZXB0aCAoYnV0IGVxdWFsIG1heEtleSkgdG8gXCJjYXRjaCB1cFwiIGFuZCBsYW5kIG9uIHNoYXJlZCBub2Rlcy5cclxuICAgICAgICB2YXIgaGVpZ2h0TWluID0gaGVpZ2h0QSA8IGhlaWdodEIgPyBoZWlnaHRBIDogaGVpZ2h0QjtcclxuICAgICAgICB2YXIgZGVwdGhBTm9ybWFsaXplZCA9IGxldmVsSW5kaWNlc0EubGVuZ3RoIC0gKGhlaWdodEEgLSBoZWlnaHRNaW4pO1xyXG4gICAgICAgIHZhciBkZXB0aEJOb3JtYWxpemVkID0gbGV2ZWxJbmRpY2VzQi5sZW5ndGggLSAoaGVpZ2h0QiAtIGhlaWdodE1pbik7XHJcbiAgICAgICAgcmV0dXJuIGRlcHRoQU5vcm1hbGl6ZWQgLSBkZXB0aEJOb3JtYWxpemVkO1xyXG4gICAgfTtcclxuICAgIC8vIEVuZCBvZiBoZWxwZXIgbWV0aG9kcyBmb3IgZGlmZkFnYWluc3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvKiogUmV0dXJucyBhIG5ldyBpdGVyYXRvciBmb3IgaXRlcmF0aW5nIHRoZSBrZXlzIG9mIGVhY2ggcGFpciBpbiBhc2NlbmRpbmcgb3JkZXIuXHJcbiAgICAgKiAgQHBhcmFtIGZpcnN0S2V5OiBNaW5pbXVtIGtleSB0byBpbmNsdWRlIGluIHRoZSBvdXRwdXQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uIChmaXJzdEtleSkge1xyXG4gICAgICAgIHZhciBpdCA9IHRoaXMuZW50cmllcyhmaXJzdEtleSwgUmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBpdGVyYXRvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBuID0gaXQubmV4dCgpO1xyXG4gICAgICAgICAgICBpZiAobi52YWx1ZSlcclxuICAgICAgICAgICAgICAgIG4udmFsdWUgPSBuLnZhbHVlWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gbjtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyBhIG5ldyBpdGVyYXRvciBmb3IgaXRlcmF0aW5nIHRoZSB2YWx1ZXMgb2YgZWFjaCBwYWlyIGluIG9yZGVyIGJ5IGtleS5cclxuICAgICAqICBAcGFyYW0gZmlyc3RLZXk6IE1pbmltdW0ga2V5IHdob3NlIGFzc29jaWF0ZWQgdmFsdWUgaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoZmlyc3RLZXkpIHtcclxuICAgICAgICB2YXIgaXQgPSB0aGlzLmVudHJpZXMoZmlyc3RLZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IGl0Lm5leHQoKTtcclxuICAgICAgICAgICAgaWYgKG4udmFsdWUpXHJcbiAgICAgICAgICAgICAgICBuLnZhbHVlID0gbi52YWx1ZVsxXTtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJUcmVlLnByb3RvdHlwZSwgXCJtYXhOb2RlU2l6ZVwiLCB7XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvLyBBZGRpdGlvbmFsIG1ldGhvZHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIC8qKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbi92YWx1ZXMgYmVmb3JlIG5vZGVzIHdpbGwgc3BsaXQuICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhOb2RlU2l6ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogR2V0cyB0aGUgbG93ZXN0IGtleSBpbiB0aGUgdHJlZS4gQ29tcGxleGl0eTogTyhsb2cgc2l6ZSkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9yb290Lm1pbktleSgpOyB9O1xyXG4gICAgLyoqIEdldHMgdGhlIGhpZ2hlc3Qga2V5IGluIHRoZSB0cmVlLiBDb21wbGV4aXR5OiBPKDEpICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUubWF4S2V5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcm9vdC5tYXhLZXkoKTsgfTtcclxuICAgIC8qKiBRdWlja2x5IGNsb25lcyB0aGUgdHJlZSBieSBtYXJraW5nIHRoZSByb290IG5vZGUgYXMgc2hhcmVkLlxyXG4gICAgICogIEJvdGggY29waWVzIHJlbWFpbiBlZGl0YWJsZS4gV2hlbiB5b3UgbW9kaWZ5IGVpdGhlciBjb3B5LCBhbnlcclxuICAgICAqICBub2RlcyB0aGF0IGFyZSBzaGFyZWQgKG9yIHBvdGVudGlhbGx5IHNoYXJlZCkgYmV0d2VlbiB0aGUgdHdvXHJcbiAgICAgKiAgY29waWVzIGFyZSBjbG9uZWQgc28gdGhhdCB0aGUgY2hhbmdlcyBkbyBub3QgYWZmZWN0IG90aGVyIGNvcGllcy5cclxuICAgICAqICBUaGlzIGlzIGtub3duIGFzIGNvcHktb24td3JpdGUgYmVoYXZpb3IsIG9yIFwibGF6eSBjb3B5aW5nXCIuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdC5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCVHJlZSh1bmRlZmluZWQsIHRoaXMuX2NvbXBhcmUsIHRoaXMuX21heE5vZGVTaXplKTtcclxuICAgICAgICByZXN1bHQuX3Jvb3QgPSB0aGlzLl9yb290O1xyXG4gICAgICAgIHJlc3VsdC5fc2l6ZSA9IHRoaXMuX3NpemU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICAvKiogUGVyZm9ybXMgYSBncmVlZHkgY2xvbmUsIGltbWVkaWF0ZWx5IGR1cGxpY2F0aW5nIGFueSBub2RlcyB0aGF0IGFyZVxyXG4gICAgICogIG5vdCBjdXJyZW50bHkgbWFya2VkIGFzIHNoYXJlZCwgaW4gb3JkZXIgdG8gYXZvaWQgbWFya2luZyBhbnlcclxuICAgICAqICBhZGRpdGlvbmFsIG5vZGVzIGFzIHNoYXJlZC5cclxuICAgICAqICBAcGFyYW0gZm9yY2UgQ2xvbmUgYWxsIG5vZGVzLCBldmVuIHNoYXJlZCBvbmVzLlxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEJUcmVlKHVuZGVmaW5lZCwgdGhpcy5fY29tcGFyZSwgdGhpcy5fbWF4Tm9kZVNpemUpO1xyXG4gICAgICAgIHJlc3VsdC5fcm9vdCA9IHRoaXMuX3Jvb3QuZ3JlZWR5Q2xvbmUoZm9yY2UpO1xyXG4gICAgICAgIHJlc3VsdC5fc2l6ZSA9IHRoaXMuX3NpemU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICAvKiogR2V0cyBhbiBhcnJheSBmaWxsZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHRyZWUsIHNvcnRlZCBieSBrZXkgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKG1heExlbmd0aCkge1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IHZvaWQgMCkgeyBtYXhMZW5ndGggPSAweDdGRkZGRkZGOyB9XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluS2V5KCksIG1heCA9IHRoaXMubWF4S2V5KCk7XHJcbiAgICAgICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZShtaW4sIG1heCwgdHJ1ZSwgbWF4TGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgb2YgYWxsIGtleXMsIHNvcnRlZCAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmtleXNBcnJheSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3Jvb3QuZm9yUmFuZ2UodGhpcy5taW5LZXkoKSwgdGhpcy5tYXhLZXkoKSwgdHJ1ZSwgZmFsc2UsIHRoaXMsIDAsIGZ1bmN0aW9uIChrLCB2KSB7IHJlc3VsdHMucHVzaChrKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9O1xyXG4gICAgLyoqIEdldHMgYW4gYXJyYXkgb2YgYWxsIHZhbHVlcywgc29ydGVkIGJ5IGtleSAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLnZhbHVlc0FycmF5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcm9vdC5mb3JSYW5nZSh0aGlzLm1pbktleSgpLCB0aGlzLm1heEtleSgpLCB0cnVlLCBmYWxzZSwgdGhpcywgMCwgZnVuY3Rpb24gKGssIHYpIHsgcmVzdWx0cy5wdXNoKHYpOyB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH07XHJcbiAgICAvKiogR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRyZWUncyBkYXRhIGJhc2VkIG9uIHRvQXJyYXkoKS4gKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KCkudG9TdHJpbmcoKTtcclxuICAgIH07XHJcbiAgICAvKiogU3RvcmVzIGEga2V5LXZhbHVlIHBhaXIgb25seSBpZiB0aGUga2V5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJlZS5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYSBuZXcga2V5IHdhcyBhZGRlZFxyXG4gICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXRJZk5vdFByZXNlbnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldChrZXksIHZhbHVlLCBmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQgcGFpciB3aG9zZSBrZXkgaXMgbGFyZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCBrZXkgKG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBub25lKS5cclxuICAgICAqIElmIGtleSA9PT0gdW5kZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxvd2VzdCBwYWlyLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IG9uIGV2ZXJ5IGl0ZXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRIaWdoZXJQYWlyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXVzZWRBcnJheSA9IHJldXNlZEFycmF5IHx8IFtdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5taW5QYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dEhpZ2hlcihrZXksIHRoaXMuX2NvbXBhcmUsIGZhbHNlLCByZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQga2V5IGxhcmdlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cclxuICAgICAqICBBbHNvLCBuZXh0SGlnaGVyS2V5KHVuZGVmaW5lZCkgcmV0dXJucyB0aGUgbG93ZXN0IGtleS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRIaWdoZXJLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLm5leHRIaWdoZXJQYWlyKGtleSwgUmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBwICYmIHBbMF07XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIG5leHQgcGFpciB3aG9zZSBrZXkgaXMgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5IChvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZSkuXHJcbiAgICAgKiAgSWYga2V5ID09PSB1bmRlZmluZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaGlnaGVzdCBwYWlyLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gcmV1c2VkQXJyYXkgT3B0aW9uYWwgYXJyYXkgdXNlZCByZXBlYXRlZGx5IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycywgdG9cclxuICAgICAqICAgICAgICBhdm9pZCBjcmVhdGluZyBhIG5ldyBhcnJheSBlYWNoIHRpbWUgeW91IGNhbGwgdGhpcyBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5uZXh0TG93ZXJQYWlyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXVzZWRBcnJheSA9IHJldXNlZEFycmF5IHx8IFtdO1xyXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5tYXhQYWlyKHJldXNlZEFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuZ2V0UGFpck9yTmV4dExvd2VyKGtleSwgdGhpcy5fY29tcGFyZSwgZmFsc2UsIHJldXNlZEFycmF5KTtcclxuICAgIH07XHJcbiAgICAvKiogUmV0dXJucyB0aGUgbmV4dCBrZXkgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQga2V5LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cclxuICAgICAqICBBbHNvLCBuZXh0TG93ZXJLZXkodW5kZWZpbmVkKSByZXR1cm5zIHRoZSBoaWdoZXN0IGtleS5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLm5leHRMb3dlcktleSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgcCA9IHRoaXMubmV4dExvd2VyUGFpcihrZXksIFJldXNlZEFycmF5KTtcclxuICAgICAgICByZXR1cm4gcCAmJiBwWzBdO1xyXG4gICAgfTtcclxuICAgIC8qKiBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cHBsaWVkIGtleSBpZiBpdCBleGlzdHNcclxuICAgICAqICBvciB0aGUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIG5leHQgbG93ZXIgcGFpciBvdGhlcndpc2UuIElmIHRoZXJlIGlzIG5vXHJcbiAgICAgKiAgbmV4dCBsb3dlciBwYWlyLCB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cclxuICAgICAqIEBwYXJhbSByZXVzZWRBcnJheSBPcHRpb25hbCBhcnJheSB1c2VkIHJlcGVhdGVkbHkgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLCB0b1xyXG4gICAgICogICAgICAgIGF2b2lkIGNyZWF0aW5nIGEgbmV3IGFycmF5IGVhY2ggdGltZSB5b3UgY2FsbCB0aGlzIG1ldGhvZC5cclxuICAgICAqICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dExvd2VyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0TG93ZXIoa2V5LCB0aGlzLl9jb21wYXJlLCB0cnVlLCByZXVzZWRBcnJheSB8fCBbXSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VwcGxpZWQga2V5IGlmIGl0IGV4aXN0c1xyXG4gICAgICogIG9yIHRoZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV4dCBsb3dlciBwYWlyIG90aGVyd2lzZS4gSWYgdGhlcmUgaXMgbm9cclxuICAgICAqICBuZXh0IGxvd2VyIHBhaXIsIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAgICogQHBhcmFtIHJldXNlZEFycmF5IE9wdGlvbmFsIGFycmF5IHVzZWQgcmVwZWF0ZWRseSB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMsIHRvXHJcbiAgICAgKiAgICAgICAgYXZvaWQgY3JlYXRpbmcgYSBuZXcgYXJyYXkgZWFjaCB0aW1lIHlvdSBjYWxsIHRoaXMgbWV0aG9kLlxyXG4gICAgICogKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgcmV1c2VkQXJyYXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0SGlnaGVyKGtleSwgdGhpcy5fY29tcGFyZSwgdHJ1ZSwgcmV1c2VkQXJyYXkgfHwgW10pO1xyXG4gICAgfTtcclxuICAgIC8qKiBFZGl0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEga2V5IGluIHRoZSB0cmVlLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGtleSBleGlzdGVkLCBmYWxzZSBpZiBub3QuXHJcbiAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmNoYW5nZUlmUHJlc2VudCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFJhbmdlKGtleSwga2V5LCB0cnVlLCBmdW5jdGlvbiAoaywgdikgeyByZXR1cm4gKHsgdmFsdWU6IHZhbHVlIH0pOyB9KSAhPT0gMDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBwYWlycyBmcm9tIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2Yga2V5cywgc29ydGVkIGJ5IGtleS5cclxuICAgICAqIEVhY2ggcmV0dXJuZWQgcGFpciBpcyBhbHNvIGFuIGFycmF5OiBwYWlyWzBdIGlzIHRoZSBrZXksIHBhaXJbMV0gaXMgdGhlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIGxvdyBUaGUgZmlyc3Qga2V5IGluIHRoZSBhcnJheSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFRoaXMgbWV0aG9kIHJldHVybnMgd2hlbiBhIGtleSBsYXJnZXIgdGhhbiB0aGlzIGlzIHJlYWNoZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUhpZ2ggSWYgdGhlIGBoaWdoYCBrZXkgaXMgcHJlc2VudCwgaXRzIHBhaXIgd2lsbCBiZSBpbmNsdWRlZFxyXG4gICAgICogICAgICAgIGluIHRoZSBvdXRwdXQgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZS4gTm90ZTogaWYgdGhlXHJcbiAgICAgKiAgICAgICAgYGxvd2Aga2V5IGlzIHByZXNlbnQsIGl0IGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LlxyXG4gICAgICogQHBhcmFtIG1heExlbmd0aCBMZW5ndGggbGltaXQuIGdldFJhbmdlIHdpbGwgc3RvcCBzY2FubmluZyB0aGUgdHJlZSB3aGVuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgIHRoZSBhcnJheSByZWFjaGVzIHRoaXMgc2l6ZS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8ocmVzdWx0Lmxlbmd0aCArIGxvZyBzaXplKVxyXG4gICAgICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZ2V0UmFuZ2UgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gdm9pZCAwKSB7IG1heExlbmd0aCA9IDB4M0ZGRkZGRjsgfVxyXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcm9vdC5mb3JSYW5nZShsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBmYWxzZSwgdGhpcywgMCwgZnVuY3Rpb24gKGssIHYpIHtcclxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKFtrLCB2XSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzLmxlbmd0aCA+IG1heExlbmd0aCA/IEJyZWFrIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfTtcclxuICAgIC8qKiBBZGRzIGFsbCBwYWlycyBmcm9tIGEgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnMuXHJcbiAgICAgKiBAcGFyYW0gcGFpcnMgUGFpcnMgdG8gYWRkIHRvIHRoaXMgdHJlZS4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBrZXlzLFxyXG4gICAgICogICAgICAgIGxhdGVyIHBhaXJzIGN1cnJlbnRseSBvdmVyd3JpdGUgZWFybGllciBvbmVzIChlLmcuIFtbMCwxXSxbMCw3XV1cclxuICAgICAqICAgICAgICBhc3NvY2lhdGVzIDAgd2l0aCA3LilcclxuICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgV2hldGhlciB0byBvdmVyd3JpdGUgcGFpcnMgdGhhdCBhbHJlYWR5IGV4aXN0IChpZiBmYWxzZSxcclxuICAgICAqICAgICAgICBwYWlyc1tpXSBpcyBpZ25vcmVkIHdoZW4gdGhlIGtleSBwYWlyc1tpXVswXSBhbHJlYWR5IGV4aXN0cy4pXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHBhaXJzIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhwYWlycy5sZW5ndGggKiBsb2coc2l6ZSArIHBhaXJzLmxlbmd0aCkpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5zZXRQYWlycyA9IGZ1bmN0aW9uIChwYWlycywgb3ZlcndyaXRlKSB7XHJcbiAgICAgICAgdmFyIGFkZGVkID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXQocGFpcnNbaV1bMF0sIHBhaXJzW2ldWzFdLCBvdmVyd3JpdGUpKVxyXG4gICAgICAgICAgICAgICAgYWRkZWQrKztcclxuICAgICAgICByZXR1cm4gYWRkZWQ7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGtleXMsIGluIGFzY2VuZGluZyBvcmRlciBieSBrZXkuXHJcbiAgICAgKiBOb3RlOiB0aGUgY2FsbGJhY2sgYG9uRm91bmRgIG11c3Qgbm90IGluc2VydCBvciByZW1vdmUgaXRlbXMgaW4gdGhlXHJcbiAgICAgKiBjb2xsZWN0aW9uLiBEb2luZyBzbyBtYXkgY2F1c2UgaW5jb3JyZWN0IGRhdGEgdG8gYmUgc2VudCB0byB0aGVcclxuICAgICAqIGNhbGxiYWNrIGFmdGVyd2FyZC5cclxuICAgICAqIEBwYXJhbSBsb3cgVGhlIGZpcnN0IGtleSBzY2FubmVkIHdpbGwgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBsb3dgLlxyXG4gICAgICogQHBhcmFtIGhpZ2ggU2Nhbm5pbmcgc3RvcHMgd2hlbiBhIGtleSBsYXJnZXIgdGhhbiB0aGlzIGlzIHJlYWNoZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUhpZ2ggSWYgdGhlIGBoaWdoYCBrZXkgaXMgcHJlc2VudCwgYG9uRm91bmRgIGlzIGNhbGxlZCBmb3JcclxuICAgICAqICAgICAgICB0aGF0IGZpbmFsIHBhaXIgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZS5cclxuICAgICAqIEBwYXJhbSBvbkZvdW5kIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIuIFRoaXNcclxuICAgICAqICAgICAgICBmdW5jdGlvbiBjYW4gcmV0dXJuIHticmVhazpSfSB0byBzdG9wIGVhcmx5IHdpdGggcmVzdWx0IFIuXHJcbiAgICAgKiBAcGFyYW0gaW5pdGlhbENvdW50ZXIgSW5pdGlhbCB0aGlyZCBhcmd1bWVudCBvZiBvbkZvdW5kLiBUaGlzIHZhbHVlXHJcbiAgICAgKiAgICAgICAgaW5jcmVhc2VzIGJ5IG9uZSBlYWNoIHRpbWUgYG9uRm91bmRgIGlzIGNhbGxlZC4gRGVmYXVsdDogMFxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB2YWx1ZXMgZm91bmQsIG9yIFIgaWYgdGhlIGNhbGxiYWNrIHJldHVybmVkXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgdG8gc3RvcCBlYXJseS5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRhdGlvbmFsIGNvbXBsZXhpdHk6IE8obnVtYmVyIG9mIGl0ZW1zIHNjYW5uZWQgKyBsb2cgc2l6ZSlcclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZvclJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIG9uRm91bmQsIGluaXRpYWxDb3VudGVyKSB7XHJcbiAgICAgICAgdmFyIHIgPSB0aGlzLl9yb290LmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGZhbHNlLCB0aGlzLCBpbml0aWFsQ291bnRlciB8fCAwLCBvbkZvdW5kKTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09IFwibnVtYmVyXCIgPyByIDogci5icmVhaztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllcyB2YWx1ZXMgZm9yIGEgc3Vic2VxdWVuY2Ugb2Yga2V5cy5cclxuICAgICAqIE5vdGU6IHRoZSBjYWxsYmFjayBgb25Gb3VuZGAgc2hvdWxkIGlkZWFsbHkgYmUgYSBwdXJlIGZ1bmN0aW9uLlxyXG4gICAgICogICBTcGVjZmljYWxseSwgaXQgbXVzdCBub3QgaW5zZXJ0IGl0ZW1zLCBjYWxsIGNsb25lKCksIG9yIGNoYW5nZVxyXG4gICAgICogICB0aGUgY29sbGVjdGlvbiBleGNlcHQgdmlhIHJldHVybiB2YWx1ZTsgb3V0LW9mLWJhbmQgZWRpdGluZyBtYXlcclxuICAgICAqICAgY2F1c2UgYW4gZXhjZXB0aW9uIG9yIG1heSBjYXVzZSBpbmNvcnJlY3QgZGF0YSB0byBiZSBzZW50IHRvXHJcbiAgICAgKiAgIHRoZSBjYWxsYmFjayAoZHVwbGljYXRlIG9yIG1pc3NlZCBpdGVtcykuIEl0IG11c3Qgbm90IGNhdXNlIGFcclxuICAgICAqICAgY2xvbmUoKSBvZiB0aGUgY29sbGVjdGlvbiwgb3RoZXJ3aXNlIHRoZSBjbG9uZSBjb3VsZCBiZSBtb2RpZmllZFxyXG4gICAgICogICBieSBjaGFuZ2VzIHJlcXVlc3RlZCBieSB0aGUgY2FsbGJhY2suXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIElmIHRoZSBgaGlnaGAga2V5IGlzIHByZXNlbnQsIGBvbkZvdW5kYCBpcyBjYWxsZWQgZm9yXHJcbiAgICAgKiAgICAgICAgdGhhdCBmaW5hbCBwYWlyIGlmIGFuZCBvbmx5IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHRydWUuXHJcbiAgICAgKiBAcGFyYW0gb25Gb3VuZCBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyLiBUaGlzXHJcbiAgICAgKiAgICAgICAgZnVuY3Rpb24gY2FuIHJldHVybiBge3ZhbHVlOnZ9YCB0byBjaGFuZ2UgdGhlIHZhbHVlIGFzc29jaWF0ZWRcclxuICAgICAqICAgICAgICB3aXRoIHRoZSBjdXJyZW50IGtleSwgYHtkZWxldGU6dHJ1ZX1gIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBwYWlyLFxyXG4gICAgICogICAgICAgIGB7YnJlYWs6Un1gIHRvIHN0b3AgZWFybHkgd2l0aCByZXN1bHQgUiwgb3IgaXQgY2FuIHJldHVybiBub3RoaW5nXHJcbiAgICAgKiAgICAgICAgKHVuZGVmaW5lZCBvciB7fSkgdG8gY2F1c2Ugbm8gZWZmZWN0IGFuZCBjb250aW51ZSBpdGVyYXRpbmcuXHJcbiAgICAgKiAgICAgICAgYHticmVhazpSfWAgY2FuIGJlIGNvbWJpbmVkIHdpdGggb25lIG9mIHRoZSBvdGhlciB0d28gY29tbWFuZHMuXHJcbiAgICAgKiAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50IGBjb3VudGVyYCBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGl0ZXJhdGVkXHJcbiAgICAgKiAgICAgICAgcHJldmlvdXNseTsgaXQgZXF1YWxzIDAgd2hlbiBgb25Gb3VuZGAgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lLlxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiB2YWx1ZXMgc2Nhbm5lZCwgb3IgUiBpZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWRcclxuICAgICAqICAgICAgICBge2JyZWFrOlJ9YCB0byBzdG9wIGVhcmx5LlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiAgIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhudW1iZXIgb2YgaXRlbXMgc2Nhbm5lZCArIGxvZyBzaXplKVxyXG4gICAgICogICBOb3RlOiBpZiB0aGUgdHJlZSBoYXMgYmVlbiBjbG9uZWQgd2l0aCBjbG9uZSgpLCBhbnkgc2hhcmVkXHJcbiAgICAgKiAgIG5vZGVzIGFyZSBjb3BpZWQgYmVmb3JlIGBvbkZvdW5kYCBpcyBjYWxsZWQuIFRoaXMgdGFrZXMgTyhuKSB0aW1lXHJcbiAgICAgKiAgIHdoZXJlIG4gaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBhbW91bnQgb2Ygc2hhcmVkIGRhdGEgc2Nhbm5lZC5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmVkaXRSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHZhciByb290ID0gdGhpcy5fcm9vdDtcclxuICAgICAgICBpZiAocm9vdC5pc1NoYXJlZClcclxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3QgPSByb290LmNsb25lKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHIgPSByb290LmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIHRydWUsIHRoaXMsIGluaXRpYWxDb3VudGVyIHx8IDAsIG9uRm91bmQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHIgPT09IFwibnVtYmVyXCIgPyByIDogci5icmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHZhciBpc1NoYXJlZCA9IHZvaWQgMDtcclxuICAgICAgICAgICAgd2hpbGUgKHJvb3Qua2V5cy5sZW5ndGggPD0gMSAmJiAhcm9vdC5pc0xlYWYpIHtcclxuICAgICAgICAgICAgICAgIGlzU2hhcmVkIHx8IChpc1NoYXJlZCA9IHJvb3QuaXNTaGFyZWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3QgPSByb290LmtleXMubGVuZ3RoID09PSAwID8gRW1wdHlMZWFmIDpcclxuICAgICAgICAgICAgICAgICAgICByb290LmNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElmIGFueSBhbmNlc3RvciBvZiB0aGUgbmV3IHJvb3Qgd2FzIHNoYXJlZCwgdGhlIG5ldyByb290IG11c3QgYWxzbyBiZSBzaGFyZWRcclxuICAgICAgICAgICAgaWYgKGlzU2hhcmVkKSB7XHJcbiAgICAgICAgICAgICAgICByb290LmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKiogU2FtZSBhcyBgZWRpdFJhbmdlYCBleGNlcHQgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBhbGwgcGFpcnMuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZWRpdEFsbCA9IGZ1bmN0aW9uIChvbkZvdW5kLCBpbml0aWFsQ291bnRlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRSYW5nZSh0aGlzLm1pbktleSgpLCB0aGlzLm1heEtleSgpLCB0cnVlLCBvbkZvdW5kLCBpbml0aWFsQ291bnRlcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgcmFuZ2Ugb2Yga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIEIrIHRyZWUuXHJcbiAgICAgKiBAcGFyYW0gbG93IFRoZSBmaXJzdCBrZXkgc2Nhbm5lZCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbG93YC5cclxuICAgICAqIEBwYXJhbSBoaWdoIFNjYW5uaW5nIHN0b3BzIHdoZW4gYSBrZXkgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZWFjaGVkLlxyXG4gICAgICogQHBhcmFtIGluY2x1ZGVIaWdoIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBgaGlnaGAga2V5LCBpZiBwcmVzZW50LCBpcyBkZWxldGVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgdGhhdCB3ZXJlIGRlbGV0ZWQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcHV0YXRpb25hbCBjb21wbGV4aXR5OiBPKGxvZyBzaXplICsgbnVtYmVyIG9mIGl0ZW1zIGRlbGV0ZWQpXHJcbiAgICAgKi9cclxuICAgIEJUcmVlLnByb3RvdHlwZS5kZWxldGVSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIERlbGV0ZVJhbmdlKTtcclxuICAgIH07XHJcbiAgICAvKiogRGVsZXRlcyBhIHNlcmllcyBvZiBrZXlzIGZyb20gdGhlIGNvbGxlY3Rpb24uICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuZGVsZXRlS2V5cyA9IGZ1bmN0aW9uIChrZXlzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlKGtleXNbaV0pKVxyXG4gICAgICAgICAgICAgICAgcisrO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCVHJlZS5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcclxuICAgICAgICAvKiogR2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSB0cmVlOiB0aGUgbnVtYmVyIG9mIGludGVybmFsIG5vZGVzIGJldHdlZW4gdGhlXHJcbiAgICAgICAgICogIEJUcmVlIG9iamVjdCBhbmQgaXRzIGxlYWYgbm9kZXMgKHplcm8gaWYgdGhlcmUgYXJlIG5vIGludGVybmFsIG5vZGVzKS4gKi9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9yb290O1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gLTE7XHJcbiAgICAgICAgICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQrKztcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmlzTGVhZiA/IHVuZGVmaW5lZCA6IG5vZGUuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKiogTWFrZXMgdGhlIG9iamVjdCByZWFkLW9ubHkgdG8gZW5zdXJlIGl0IGlzIG5vdCBhY2NpZGVudGFsbHkgbW9kaWZpZWQuXHJcbiAgICAgKiAgRnJlZXppbmcgZG9lcyBub3QgaGF2ZSB0byBiZSBwZXJtYW5lbnQ7IHVuZnJlZXplKCkgcmV2ZXJzZXMgdGhlIGVmZmVjdC5cclxuICAgICAqICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSByZXBsYWNpbmcgbXV0YXRvciBmdW5jdGlvbnMgd2l0aCBhIGZ1bmN0aW9uXHJcbiAgICAgKiAgdGhhdCB0aHJvd3MgYW4gRXJyb3IuIENvbXBhcmVkIHRvIHVzaW5nIGEgcHJvcGVydHkgKGUuZy4gdGhpcy5pc0Zyb3plbilcclxuICAgICAqICB0aGlzIGltcGxlbWVudGF0aW9uIGdpdmVzIGJldHRlciBwZXJmb3JtYW5jZSBpbiBub24tZnJvemVuIEJUcmVlcy5cclxuICAgICAqL1xyXG4gICAgQlRyZWUucHJvdG90eXBlLmZyZWV6ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdCA9IHRoaXM7XHJcbiAgICAgICAgLy8gTm90ZTogYWxsIG90aGVyIG11dGF0b3JzIHVsdGltYXRlbHkgY2FsbCBzZXQoKSBvciBlZGl0UmFuZ2UoKSBcclxuICAgICAgICAvLyAgICAgICBzbyB3ZSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIHRob3NlIG90aGVycy5cclxuICAgICAgICB0LmNsZWFyID0gdC5zZXQgPSB0LmVkaXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGVkIHRvIG1vZGlmeSBhIGZyb3plbiBCVHJlZVwiKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIC8qKiBFbnN1cmVzIG11dGF0aW9ucyBhcmUgYWxsb3dlZCwgcmV2ZXJzaW5nIHRoZSBlZmZlY3Qgb2YgZnJlZXplKCkuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUudW5mcmVlemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcIlRoZSBvcGVyYW5kIG9mIGEgJ2RlbGV0ZScgb3BlcmF0b3IgbXVzdCBiZSBvcHRpb25hbC5cIlxyXG4gICAgICAgIC8vICAgICAgICAgICAgKHdyb25nOiBkZWxldGUgZG9lcyBub3QgYWZmZWN0IHRoZSBwcm90b3R5cGUuKVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNsZWFyO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBkZWxldGUgdGhpcy5zZXQ7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSYW5nZTtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQlRyZWUucHJvdG90eXBlLCBcImlzRnJvemVuXCIsIHtcclxuICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0cmVlIGFwcGVhcnMgdG8gYmUgZnJvemVuLiAqL1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgnZWRpdFJhbmdlJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqIFNjYW5zIHRoZSB0cmVlIGZvciBzaWducyBvZiBzZXJpb3VzIGJ1Z3MgKGUuZy4gdGhpcy5zaXplIGRvZXNuJ3QgbWF0Y2hcclxuICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMsIGludGVybmFsIG5vZGVzIG5vdCBjYWNoaW5nIG1heCBlbGVtZW50IHByb3Blcmx5Li4uKVxyXG4gICAgICogIENvbXB1dGF0aW9uYWwgY29tcGxleGl0eTogTyhudW1iZXIgb2Ygbm9kZXMpLCBpLmUuIE8oc2l6ZSkuIFRoaXMgbWV0aG9kXHJcbiAgICAgKiAgc2tpcHMgdGhlIG1vc3QgZXhwZW5zaXZlIHRlc3QgLSB3aGV0aGVyIGFsbCBrZXlzIGFyZSBzb3J0ZWQgLSBidXQgaXRcclxuICAgICAqICBkb2VzIGNoZWNrIHRoYXQgbWF4S2V5KCkgb2YgdGhlIGNoaWxkcmVuIG9mIGludGVybmFsIG5vZGVzIGFyZSBzb3J0ZWQuICovXHJcbiAgICBCVHJlZS5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3Jvb3QuY2hlY2tWYWxpZCgwLCB0aGlzLCAwKTtcclxuICAgICAgICBjaGVjayhzaXplID09PSB0aGlzLnNpemUsIFwic2l6ZSBtaXNtYXRjaDogY291bnRlZCBcIiwgc2l6ZSwgXCJidXQgc3RvcmVkXCIsIHRoaXMuc2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJUcmVlO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBCVHJlZTtcclxuLyoqIEEgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBzaW1wbHkgcmV0dXJucyBpdHMgYXJndW1lbnQsIHR5cGVkIGFzXHJcbiAqICBgSVNvcnRlZFNldDxLPmAgaWYgdGhlIEJUcmVlIGltcGxlbWVudHMgaXQsIGFzIGl0IGRvZXMgaWYgYFYgZXh0ZW5kcyB1bmRlZmluZWRgLlxyXG4gKiAgSWYgYFZgIGNhbm5vdCBiZSBgdW5kZWZpbmVkYCwgaXQgcmV0dXJucyBgdW5rbm93bmAgaW5zdGVhZC4gT3IgYXQgbGVhc3QsIHRoYXRcclxuICogIHdhcyB0aGUgaW50ZW50aW9uLCBidXQgVHlwZVNjcmlwdCBpcyBhY3Rpbmcgd2VpcmQgYW5kIG1heSByZXR1cm4gYElTb3J0ZWRTZXQ8Sz5gXHJcbiAqICBldmVuIGlmIGBWYCBjYW4ndCBiZSBgdW5kZWZpbmVkYCAoZGlzY3Vzc2lvbjogYnRyZWUtdHlwZXNjcmlwdCBpc3N1ZSAjMTQpICovXHJcbmZ1bmN0aW9uIGFzU2V0KGJ0cmVlKSB7XHJcbiAgICByZXR1cm4gYnRyZWU7XHJcbn1cclxuZXhwb3J0cy5hc1NldCA9IGFzU2V0O1xyXG5pZiAoU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcikgLy8gaXRlcmF0b3IgaXMgZXF1aXZhbGVudCB0byBlbnRyaWVzKClcclxuICAgIEJUcmVlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gQlRyZWUucHJvdG90eXBlLmVudHJpZXM7XHJcbkJUcmVlLnByb3RvdHlwZS53aGVyZSA9IEJUcmVlLnByb3RvdHlwZS5maWx0ZXI7XHJcbkJUcmVlLnByb3RvdHlwZS5zZXRSYW5nZSA9IEJUcmVlLnByb3RvdHlwZS5zZXRQYWlycztcclxuQlRyZWUucHJvdG90eXBlLmFkZCA9IEJUcmVlLnByb3RvdHlwZS5zZXQ7IC8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSVNldFNpbms8Sz5cclxuZnVuY3Rpb24gaXRlcmF0b3IobmV4dCkge1xyXG4gICAgaWYgKG5leHQgPT09IHZvaWQgMCkgeyBuZXh0ID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7IH0pOyB9XHJcbiAgICB2YXIgcmVzdWx0ID0geyBuZXh0OiBuZXh0IH07XHJcbiAgICBpZiAoU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcilcclxuICAgICAgICByZXN1bHRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbi8qKiBMZWFmIG5vZGUgLyBiYXNlIGNsYXNzLiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxudmFyIEJOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQk5vZGUoa2V5cywgdmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGtleXMgPT09IHZvaWQgMCkgeyBrZXlzID0gW107IH1cclxuICAgICAgICB0aGlzLmtleXMgPSBrZXlzO1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzIHx8IHVuZGVmVmFscztcclxuICAgICAgICB0aGlzLmlzU2hhcmVkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJOb2RlLnByb3RvdHlwZSwgXCJpc0xlYWZcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIFNoYXJlZCBtZXRob2RzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLm1heEtleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXlzW3RoaXMua2V5cy5sZW5ndGggLSAxXTtcclxuICAgIH07XHJcbiAgICAvLyBJZiBrZXkgbm90IGZvdW5kLCByZXR1cm5zIGleZmFpbFhvciB3aGVyZSBpIGlzIHRoZSBpbnNlcnRpb24gaW5kZXguXHJcbiAgICAvLyBDYWxsZXJzIHRoYXQgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlIHdhcyBhIG1hdGNoIHdpbGwgc2V0IGZhaWxYb3I9MC5cclxuICAgIEJOb2RlLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKGtleSwgZmFpbFhvciwgY21wKSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcbiAgICAgICAgdmFyIGxvID0gMCwgaGkgPSBrZXlzLmxlbmd0aCwgbWlkID0gaGkgPj4gMTtcclxuICAgICAgICB3aGlsZSAobG8gPCBoaSkge1xyXG4gICAgICAgICAgICB2YXIgYyA9IGNtcChrZXlzW21pZF0sIGtleSk7XHJcbiAgICAgICAgICAgIGlmIChjIDwgMClcclxuICAgICAgICAgICAgICAgIGxvID0gbWlkICsgMTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoYyA+IDApIC8vIGtleSA8IGtleXNbbWlkXVxyXG4gICAgICAgICAgICAgICAgaGkgPSBtaWQ7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGMgaXMgTmFOIG9yIG90aGVyd2lzZSBpbnZhbGlkXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBrZXkpIC8vIGF0IGxlYXN0IHRoZSBzZWFyY2gga2V5IGlzIG5vdCBOYU5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQlRyZWU6IE5hTiB3YXMgdXNlZCBhcyBhIGtleVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgPj4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1pZCBeIGZhaWxYb3I7XHJcbiAgICAgICAgLy8gVW5yb2xsZWQgdmVyc2lvbjogYmVuY2htYXJrcyBzaG93IHNhbWUgc3BlZWQsIG5vdCB3b3J0aCB1c2luZ1xyXG4gICAgICAgIC8qdmFyIGkgPSAxLCBjOiBudW1iZXIgPSAwLCBzdW0gPSAwO1xyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICBpID0gMztcclxuICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+PSA4KSB7XHJcbiAgICAgICAgICAgIGkgPSA3O1xyXG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gMTYpIHtcclxuICAgICAgICAgICAgICBpID0gMTU7XHJcbiAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID49IDMyKSB7XHJcbiAgICAgICAgICAgICAgICBpID0gMzE7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPj0gNjQpIHtcclxuICAgICAgICAgICAgICAgICAgaSA9IDEyNztcclxuICAgICAgICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gNjQgOiAtNjQ7XHJcbiAgICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAzMiA6IC0zMjtcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAxNiA6IC0xNjtcclxuICAgICAgICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyA4IDogLTg7XHJcbiAgICAgICAgICAgICAgc3VtICs9IGM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSArPSAoYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMSkgPCAwID8gNCA6IC00O1xyXG4gICAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkgKz0gKGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDEpIDwgMCA/IDIgOiAtMjtcclxuICAgICAgICAgIHN1bSArPSBjO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpICs9IChjID0gaSA8IGtleXMubGVuZ3RoID8gY21wKGtleXNbaV0sIGtleSkgOiAxKSA8IDAgPyAxIDogLTE7XHJcbiAgICAgICAgYyA9IGkgPCBrZXlzLmxlbmd0aCA/IGNtcChrZXlzW2ldLCBrZXkpIDogMTtcclxuICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICBpZiAoYyA8IDApIHtcclxuICAgICAgICAgICsraTtcclxuICAgICAgICAgIGMgPSBpIDwga2V5cy5sZW5ndGggPyBjbXAoa2V5c1tpXSwga2V5KSA6IDE7XHJcbiAgICAgICAgICBzdW0gKz0gYztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN1bSAhPT0gc3VtKSB7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSBrZXkpIC8vIGF0IGxlYXN0IHRoZSBzZWFyY2gga2V5IGlzIG5vdCBOYU5cclxuICAgICAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoIF4gZmFpbFhvcjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQlRyZWU6IE5hTiB3YXMgdXNlZCBhcyBhIGtleVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGMgPT09IDAgPyBpIDogaSBeIGZhaWxYb3I7Ki9cclxuICAgIH07XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTGVhZiBOb2RlOiBtaXNjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5taW5LZXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5c1swXTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUubWluUGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIGlmICh0aGlzLmtleXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzWzBdO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgcmV0dXJuIHJldXNlZEFycmF5O1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5tYXhQYWlyID0gZnVuY3Rpb24gKHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IHRoaXMua2V5cy5sZW5ndGggLSAxO1xyXG4gICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzW2xhc3RJbmRleF07XHJcbiAgICAgICAgcmV1c2VkQXJyYXlbMV0gPSB0aGlzLnZhbHVlc1tsYXN0SW5kZXhdO1xyXG4gICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlKHRoaXMua2V5cy5zbGljZSgwKSwgdiA9PT0gdW5kZWZWYWxzID8gdiA6IHYuc2xpY2UoMCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5ncmVlZHlDbG9uZSA9IGZ1bmN0aW9uIChmb3JjZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzU2hhcmVkICYmICFmb3JjZSA/IHRoaXMgOiB0aGlzLmNsb25lKCk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlZSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIHRyZWUuX2NvbXBhcmUpO1xyXG4gICAgICAgIHJldHVybiBpIDwgMCA/IGRlZmF1bHRWYWx1ZSA6IHRoaXMudmFsdWVzW2ldO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAtMSwgY29tcGFyZSk7XHJcbiAgICAgICAgdmFyIGluZGV4T3JMb3dlciA9IGkgPCAwID8gfmkgLSAxIDogKGluY2x1c2l2ZSA/IGkgOiBpIC0gMSk7XHJcbiAgICAgICAgaWYgKGluZGV4T3JMb3dlciA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0gdGhpcy5rZXlzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzFdID0gdGhpcy52YWx1ZXNbaW5kZXhPckxvd2VyXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldXNlZEFycmF5O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0SGlnaGVyID0gZnVuY3Rpb24gKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHZhciBpID0gdGhpcy5pbmRleE9mKGtleSwgLTEsIGNvbXBhcmUpO1xyXG4gICAgICAgIHZhciBpbmRleE9yTG93ZXIgPSBpIDwgMCA/IH5pIDogKGluY2x1c2l2ZSA/IGkgOiBpICsgMSk7XHJcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XHJcbiAgICAgICAgaWYgKGluZGV4T3JMb3dlciA8IGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldXNlZEFycmF5WzBdID0ga2V5c1tpbmRleE9yTG93ZXJdO1xyXG4gICAgICAgICAgICByZXVzZWRBcnJheVsxXSA9IHRoaXMudmFsdWVzW2luZGV4T3JMb3dlcl07XHJcbiAgICAgICAgICAgIHJldHVybiByZXVzZWRBcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uIChkZXB0aCwgdHJlZSwgYmFzZUluZGV4KSB7XHJcbiAgICAgICAgdmFyIGtMID0gdGhpcy5rZXlzLmxlbmd0aCwgdkwgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcbiAgICAgICAgY2hlY2sodGhpcy52YWx1ZXMgPT09IHVuZGVmVmFscyA/IGtMIDw9IHZMIDoga0wgPT09IHZMLCBcImtleXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaDogZGVwdGhcIiwgZGVwdGgsIFwid2l0aCBsZW5ndGhzXCIsIGtMLCB2TCwgXCJhbmQgYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgY2hlY2sgZm9yIFwibm9kZSB0b28gc21hbGxcIiBiZWNhdXNlIHNvbWV0aW1lcyBhIG5vZGVcclxuICAgICAgICAvLyBjYW4gbGVnaXRpbWF0ZWx5IGhhdmUgc2l6ZSAxLiBUaGlzIG9jY3VycyBpZiB0aGVyZSBpcyBhIGJhdGNoIFxyXG4gICAgICAgIC8vIGRlbGV0aW9uLCBsZWF2aW5nIGEgbm9kZSBvZiBzaXplIDEsIGFuZCB0aGUgc2libGluZ3MgYXJlIGZ1bGwgc29cclxuICAgICAgICAvLyBpdCBjYW4ndCBiZSBtZXJnZWQgd2l0aCBhZGphY2VudCBub2Rlcy4gSG93ZXZlciwgdGhlIHBhcmVudCB3aWxsXHJcbiAgICAgICAgLy8gdmVyaWZ5IHRoYXQgdGhlIGF2ZXJhZ2Ugbm9kZSBzaXplIGlzIGF0IGxlYXN0IGhhbGYgb2YgdGhlIG1heGltdW0uXHJcbiAgICAgICAgY2hlY2soZGVwdGggPT0gMCB8fCBrTCA+IDAsIFwiZW1wdHkgbGVhZiBhdCBkZXB0aFwiLCBkZXB0aCwgXCJhbmQgYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIGtMO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBMZWFmIE5vZGU6IHNldCAmIG5vZGUgc3BsaXR0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvdmVyd3JpdGUsIHRyZWUpIHtcclxuICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXhPZihrZXksIC0xLCB0cmVlLl9jb21wYXJlKTtcclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgLy8ga2V5IGRvZXMgbm90IGV4aXN0IHlldFxyXG4gICAgICAgICAgICBpID0gfmk7XHJcbiAgICAgICAgICAgIHRyZWUuX3NpemUrKztcclxuICAgICAgICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPCB0cmVlLl9tYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0SW5MZWFmKGksIGtleSwgdmFsdWUsIHRyZWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBsZWFmIG5vZGUgaXMgZnVsbCBhbmQgbXVzdCBzcGxpdFxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1JpZ2h0U2libGluZyA9IHRoaXMuc3BsaXRPZmZSaWdodFNpZGUoKSwgdGFyZ2V0ID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmIChpID4gdGhpcy5rZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGkgLT0gdGhpcy5rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0SW5MZWFmKGksIGtleSwgdmFsdWUsIHRyZWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1JpZ2h0U2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gS2V5IGFscmVhZHkgZXhpc3RzXHJcbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB1c3VhbGx5IHRoaXMgaXMgYSBuby1vcCwgYnV0IHNvbWUgdXNlcnMgbWF5IHdpc2ggdG8gZWRpdCB0aGUga2V5XHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleXNbaV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLnJlaWZ5VmFsdWVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9O1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmluc2VydEluTGVhZiA9IGZ1bmN0aW9uIChpLCBrZXksIHZhbHVlLCB0cmVlKSB7XHJcbiAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpLCAwLCBrZXkpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIHdoaWxlICh1bmRlZlZhbHMubGVuZ3RoIDwgdHJlZS5fbWF4Tm9kZVNpemUpXHJcbiAgICAgICAgICAgICAgICB1bmRlZlZhbHMucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHVuZGVmVmFscy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKGksIDAsIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICBCTm9kZS5wcm90b3R5cGUudGFrZUZyb21SaWdodCA9IGZ1bmN0aW9uIChyaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB2YXIgdiA9IHRoaXMudmFsdWVzO1xyXG4gICAgICAgIGlmIChyaHMudmFsdWVzID09PSB1bmRlZlZhbHMpIHtcclxuICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgICAgIHYucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdiA9IHRoaXMucmVpZnlWYWx1ZXMoKTtcclxuICAgICAgICAgICAgdi5wdXNoKHJocy52YWx1ZXMuc2hpZnQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua2V5cy5wdXNoKHJocy5rZXlzLnNoaWZ0KCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS50YWtlRnJvbUxlZnQgPSBmdW5jdGlvbiAobGhzKSB7XHJcbiAgICAgICAgLy8gUmVtaW5kZXI6IHBhcmVudCBub2RlIG11c3QgdXBkYXRlIGl0cyBjb3B5IG9mIGtleSBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgLy8gYXNzZXJ0OiBuZWl0aGVyIG5vZGUgaXMgc2hhcmVkXHJcbiAgICAgICAgLy8gYXNzZXJ0IHJocy5rZXlzLmxlbmd0aCA+IChtYXhOb2RlU2l6ZS8yICYmIHRoaXMua2V5cy5sZW5ndGg8bWF4Tm9kZVNpemUpXHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcztcclxuICAgICAgICBpZiAobGhzLnZhbHVlcyA9PT0gdW5kZWZWYWxzKSB7XHJcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICB2LnVuc2hpZnQodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHYgPSB0aGlzLnJlaWZ5VmFsdWVzKCk7XHJcbiAgICAgICAgICAgIHYudW5zaGlmdChsaHMudmFsdWVzLnBvcCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5rZXlzLnVuc2hpZnQobGhzLmtleXMucG9wKCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICB2YXIgaGFsZiA9IHRoaXMua2V5cy5sZW5ndGggPj4gMSwga2V5cyA9IHRoaXMua2V5cy5zcGxpY2UoaGFsZik7XHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMgPyB1bmRlZlZhbHMgOiB0aGlzLnZhbHVlcy5zcGxpY2UoaGFsZik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCTm9kZShrZXlzLCB2YWx1ZXMpO1xyXG4gICAgfTtcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBMZWFmIE5vZGU6IHNjYW5uaW5nICYgZGVsZXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgQk5vZGUucHJvdG90eXBlLmZvclJhbmdlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCkge1xyXG4gICAgICAgIHZhciBjbXAgPSB0cmVlLl9jb21wYXJlO1xyXG4gICAgICAgIHZhciBpTG93LCBpSGlnaDtcclxuICAgICAgICBpZiAoaGlnaCA9PT0gbG93KSB7XHJcbiAgICAgICAgICAgIGlmICghaW5jbHVkZUhpZ2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICAgICAgICAgIGlIaWdoID0gKGlMb3cgPSB0aGlzLmluZGV4T2YobG93LCAtMSwgY21wKSkgKyAxO1xyXG4gICAgICAgICAgICBpZiAoaUxvdyA8IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgMCwgY21wKTtcclxuICAgICAgICAgICAgaUhpZ2ggPSB0aGlzLmluZGV4T2YoaGlnaCwgLTEsIGNtcCk7XHJcbiAgICAgICAgICAgIGlmIChpSGlnaCA8IDApXHJcbiAgICAgICAgICAgICAgICBpSGlnaCA9IH5pSGlnaDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5jbHVkZUhpZ2ggPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICBpSGlnaCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cywgdmFsdWVzID0gdGhpcy52YWx1ZXM7XHJcbiAgICAgICAgaWYgKG9uRm91bmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gaUxvdzsgaSA8IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9uRm91bmQoa2V5LCB2YWx1ZXNbaV0sIGNvdW50KyspO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGtleXNbaV0gfHwgdGhpcy5pc1NoYXJlZCA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJUcmVlIGlsbGVnYWxseSBjaGFuZ2VkIG9yIGNsb25lZCBpbiBlZGl0UmFuZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGVsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzICE9PSB1bmRlZlZhbHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZS5fc2l6ZS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaUhpZ2gtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpXSA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmJyZWFrICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjb3VudCArPSBpSGlnaCAtIGlMb3c7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gICAgfTtcclxuICAgIC8qKiBBZGRzIGVudGlyZSBjb250ZW50cyBvZiByaWdodC1oYW5kIHNpYmxpbmcgKHJocyBpcyBsZWZ0IHVuY2hhbmdlZCkgKi9cclxuICAgIEJOb2RlLnByb3RvdHlwZS5tZXJnZVNpYmxpbmcgPSBmdW5jdGlvbiAocmhzLCBfKSB7XHJcbiAgICAgICAgdGhpcy5rZXlzLnB1c2guYXBwbHkodGhpcy5rZXlzLCByaHMua2V5cyk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzID09PSB1bmRlZlZhbHMpIHtcclxuICAgICAgICAgICAgaWYgKHJocy52YWx1ZXMgPT09IHVuZGVmVmFscylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLnZhbHVlcy5zbGljZSgwLCB0aGlzLmtleXMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaC5hcHBseSh0aGlzLnZhbHVlcywgcmhzLnJlaWZ5VmFsdWVzKCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCTm9kZTtcclxufSgpKTtcclxuLyoqIEludGVybmFsIG5vZGUgKG5vbi1sZWFmIG5vZGUpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG52YXIgQk5vZGVJbnRlcm5hbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhCTm9kZUludGVybmFsLCBfc3VwZXIpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGRvZXMgbm90IG1hcmsgYGNoaWxkcmVuYCBhcyBzaGFyZWQsIHNvIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyXHJcbiAgICAgKiB0byBlbnN1cmUgY2hpbGRyZW4gYXJlIGVpdGhlciBtYXJrZWQgc2hhcmVkLCBvciBhcmVuJ3QgaW5jbHVkZWQgaW4gYW5vdGhlciB0cmVlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCTm9kZUludGVybmFsKGNoaWxkcmVuLCBrZXlzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAga2V5cyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAga2V5c1tpXSA9IGNoaWxkcmVuW2ldLm1heEtleSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGtleXMpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLnNsaWNlKDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLmlzU2hhcmVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV3IEJOb2RlSW50ZXJuYWwoY2hpbGRyZW4sIHRoaXMua2V5cy5zbGljZSgwKSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ3JlZWR5Q2xvbmUgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1NoYXJlZCAmJiAhZm9yY2UpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIHZhciBudSA9IG5ldyBCTm9kZUludGVybmFsKHRoaXMuY2hpbGRyZW4uc2xpY2UoMCksIHRoaXMua2V5cy5zbGljZSgwKSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudS5jaGlsZHJlbi5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgbnUuY2hpbGRyZW5baV0gPSBudS5jaGlsZHJlbltpXS5ncmVlZHlDbG9uZShmb3JjZSk7XHJcbiAgICAgICAgcmV0dXJuIG51O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLm1pbktleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXS5taW5LZXkoKTtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5taW5QYWlyID0gZnVuY3Rpb24gKHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUubWF4UGFpciA9IGZ1bmN0aW9uIChyZXVzZWRBcnJheSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV0ubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSwgZGVmYXVsdFZhbHVlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCB0cmVlLl9jb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBpIDwgY2hpbGRyZW4ubGVuZ3RoID8gY2hpbGRyZW5baV0uZ2V0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVlKSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCBjb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIGlmIChpID49IGNoaWxkcmVuLmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF4UGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmdldFBhaXJPck5leHRMb3dlcihrZXksIGNvbXBhcmUsIGluY2x1c2l2ZSwgcmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baSAtIDFdLm1heFBhaXIocmV1c2VkQXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmdldFBhaXJPck5leHRIaWdoZXIgPSBmdW5jdGlvbiAoa2V5LCBjb21wYXJlLCBpbmNsdXNpdmUsIHJldXNlZEFycmF5KSB7XHJcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4T2Yoa2V5LCAwLCBjb21wYXJlKSwgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLCBsZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBjaGlsZHJlbltpXS5nZXRQYWlyT3JOZXh0SGlnaGVyKGtleSwgY29tcGFyZSwgaW5jbHVzaXZlLCByZXVzZWRBcnJheSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkICYmIGkgPCBsZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpICsgMV0ubWluUGFpcihyZXVzZWRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUuY2hlY2tWYWxpZCA9IGZ1bmN0aW9uIChkZXB0aCwgdHJlZSwgYmFzZUluZGV4KSB7XHJcbiAgICAgICAgdmFyIGtMID0gdGhpcy5rZXlzLmxlbmd0aCwgY0wgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBjaGVjayhrTCA9PT0gY0wsIFwia2V5cy9jaGlsZHJlbiBsZW5ndGggbWlzbWF0Y2g6IGRlcHRoXCIsIGRlcHRoLCBcImxlbmd0aHNcIiwga0wsIGNMLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIGNoZWNrKGtMID4gMSB8fCBkZXB0aCA+IDAsIFwiaW50ZXJuYWwgbm9kZSBoYXMgbGVuZ3RoXCIsIGtMLCBcImF0IGRlcHRoXCIsIGRlcHRoLCBcImJhc2VJbmRleFwiLCBiYXNlSW5kZXgpO1xyXG4gICAgICAgIHZhciBzaXplID0gMCwgYyA9IHRoaXMuY2hpbGRyZW4sIGsgPSB0aGlzLmtleXMsIGNoaWxkU2l6ZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjTDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNpemUgKz0gY1tpXS5jaGVja1ZhbGlkKGRlcHRoICsgMSwgdHJlZSwgYmFzZUluZGV4ICsgc2l6ZSk7XHJcbiAgICAgICAgICAgIGNoaWxkU2l6ZSArPSBjW2ldLmtleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjaGVjayhzaXplID49IGNoaWxkU2l6ZSwgXCJ3dGZcIiwgYmFzZUluZGV4KTsgLy8gbm8gd2F5IHRoaXMgd2lsbCBldmVyIGZhaWxcclxuICAgICAgICAgICAgY2hlY2soaSA9PT0gMCB8fCBjW2kgLSAxXS5jb25zdHJ1Y3RvciA9PT0gY1tpXS5jb25zdHJ1Y3RvciwgXCJ0eXBlIG1pc21hdGNoLCBiYXNlSW5kZXg6XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChjW2ldLm1heEtleSgpICE9IGtbaV0pXHJcbiAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJrZXlzW1wiLCBpLCBcIl0gPVwiLCBrW2ldLCBcImlzIHdyb25nLCBzaG91bGQgYmUgXCIsIGNbaV0ubWF4S2V5KCksIFwiYXQgZGVwdGhcIiwgZGVwdGgsIFwiYmFzZUluZGV4XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgICAgIGlmICghKGkgPT09IDAgfHwgdHJlZS5fY29tcGFyZShrW2kgLSAxXSwga1tpXSkgPCAwKSlcclxuICAgICAgICAgICAgICAgIGNoZWNrKGZhbHNlLCBcInNvcnQgdmlvbGF0aW9uIGF0IGRlcHRoXCIsIGRlcHRoLCBcImluZGV4XCIsIGksIFwia2V5c1wiLCBrW2kgLSAxXSwga1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDIwMjAvMDg6IEJUcmVlIGRvZXNuJ3QgYWx3YXlzIGF2b2lkIGdyb3NzbHkgdW5kZXJzaXplZCBub2RlcyxcclxuICAgICAgICAvLyBidXQgQUZBSUsgc3VjaCBub2RlcyBhcmUgcHJldHR5IGhhcm1sZXNzLCBzbyBhY2NlcHQgdGhlbS5cclxuICAgICAgICB2YXIgdG9vZmV3ID0gY2hpbGRTaXplID09PSAwOyAvLyBjaGlsZFNpemUgPCAodHJlZS5tYXhOb2RlU2l6ZSA+PiAxKSpjTDtcclxuICAgICAgICBpZiAodG9vZmV3IHx8IGNoaWxkU2l6ZSA+IHRyZWUubWF4Tm9kZVNpemUgKiBjTClcclxuICAgICAgICAgICAgY2hlY2soZmFsc2UsIHRvb2ZldyA/IFwidG9vIGZld1wiIDogXCJ0b28gbWFueVwiLCBcImNoaWxkcmVuIChcIiwgY2hpbGRTaXplLCBzaXplLCBcIikgYXQgZGVwdGhcIiwgZGVwdGgsIFwibWF4Tm9kZVNpemU6XCIsIHRyZWUubWF4Tm9kZVNpemUsIFwiY2hpbGRyZW4ubGVuZ3RoOlwiLCBjTCwgXCJiYXNlSW5kZXg6XCIsIGJhc2VJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHNpemU7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEludGVybmFsIE5vZGU6IHNldCAmIG5vZGUgc3BsaXR0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3ZlcndyaXRlLCB0cmVlKSB7XHJcbiAgICAgICAgdmFyIGMgPSB0aGlzLmNoaWxkcmVuLCBtYXggPSB0cmVlLl9tYXhOb2RlU2l6ZSwgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIgaSA9IE1hdGgubWluKHRoaXMuaW5kZXhPZihrZXksIDAsIGNtcCksIGMubGVuZ3RoIC0gMSksIGNoaWxkID0gY1tpXTtcclxuICAgICAgICBpZiAoY2hpbGQuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgIGNbaV0gPSBjaGlsZCA9IGNoaWxkLmNsb25lKCk7XHJcbiAgICAgICAgaWYgKGNoaWxkLmtleXMubGVuZ3RoID49IG1heCkge1xyXG4gICAgICAgICAgICAvLyBjaGlsZCBpcyBmdWxsOyBpbnNlcnRpbmcgYW55dGhpbmcgZWxzZSB3aWxsIGNhdXNlIGEgc3BsaXQuXHJcbiAgICAgICAgICAgIC8vIFNoaWZ0aW5nIGFuIGl0ZW0gdG8gdGhlIGxlZnQgb3IgcmlnaHQgc2libGluZyBtYXkgYXZvaWQgYSBzcGxpdC5cclxuICAgICAgICAgICAgLy8gV2UgY2FuIGRvIGEgc2hpZnQgaWYgdGhlIGFkamFjZW50IG5vZGUgaXMgbm90IGZ1bGwgYW5kIGlmIHRoZVxyXG4gICAgICAgICAgICAvLyBjdXJyZW50IGtleSBjYW4gc3RpbGwgYmUgcGxhY2VkIGluIHRoZSBzYW1lIG5vZGUgYWZ0ZXIgdGhlIHNoaWZ0LlxyXG4gICAgICAgICAgICB2YXIgb3RoZXI7XHJcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiAob3RoZXIgPSBjW2kgLSAxXSkua2V5cy5sZW5ndGggPCBtYXggJiYgY21wKGNoaWxkLmtleXNbMF0sIGtleSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXIuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY1tpIC0gMV0gPSBvdGhlciA9IG90aGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBvdGhlci50YWtlRnJvbVJpZ2h0KGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5c1tpIC0gMV0gPSBvdGhlci5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgob3RoZXIgPSBjW2kgKyAxXSkgIT09IHVuZGVmaW5lZCAmJiBvdGhlci5rZXlzLmxlbmd0aCA8IG1heCAmJiBjbXAoY2hpbGQubWF4S2V5KCksIGtleSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXIuaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY1tpICsgMV0gPSBvdGhlciA9IG90aGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBvdGhlci50YWtlRnJvbUxlZnQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0gY1tpXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGQuc2V0KGtleSwgdmFsdWUsIG92ZXJ3cml0ZSwgdHJlZSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmtleXNbaV0gPSBjaGlsZC5tYXhLZXkoKTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAvLyBUaGUgY2hpbGQgaGFzIHNwbGl0IGFuZCBgcmVzdWx0YCBpcyBhIG5ldyByaWdodCBjaGlsZC4uLiBkb2VzIGl0IGZpdD9cclxuICAgICAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA8IG1heCkgeyAvLyB5ZXNcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnQoaSArIDEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHsgLy8gbm8sIHdlIG11c3Qgc3BsaXQgYWxzb1xyXG4gICAgICAgICAgICB2YXIgbmV3UmlnaHRTaWJsaW5nID0gdGhpcy5zcGxpdE9mZlJpZ2h0U2lkZSgpLCB0YXJnZXQgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAoY21wKHJlc3VsdC5tYXhLZXkoKSwgdGhpcy5tYXhLZXkoKSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXdSaWdodFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBpIC09IHRoaXMua2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0Lmluc2VydChpICsgMSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld1JpZ2h0U2libGluZztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnRzIGBjaGlsZGAgYXQgaW5kZXggYGlgLlxyXG4gICAgICogVGhpcyBkb2VzIG5vdCBtYXJrIGBjaGlsZGAgYXMgc2hhcmVkLCBzbyBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlclxyXG4gICAgICogdG8gZW5zdXJlIHRoYXQgZWl0aGVyIGNoaWxkIGlzIG1hcmtlZCBzaGFyZWQsIG9yIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiBhbm90aGVyIHRyZWUuXHJcbiAgICAgKi9cclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChpLCBjaGlsZCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDAsIGNoaWxkKTtcclxuICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGksIDAsIGNoaWxkLm1heEtleSgpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFNwbGl0IHRoaXMgbm9kZS5cclxuICAgICAqIE1vZGlmaWVzIHRoaXMgdG8gcmVtb3ZlIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgaXRlbXMsIHJldHVybmluZyBhIHNlcGFyYXRlIG5vZGUgY29udGFpbmluZyB0aGVtLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5zcGxpdE9mZlJpZ2h0U2lkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBhc3NlcnQgIXRoaXMuaXNTaGFyZWQ7XHJcbiAgICAgICAgdmFyIGhhbGYgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+PiAxO1xyXG4gICAgICAgIHJldHVybiBuZXcgQk5vZGVJbnRlcm5hbCh0aGlzLmNoaWxkcmVuLnNwbGljZShoYWxmKSwgdGhpcy5rZXlzLnNwbGljZShoYWxmKSk7XHJcbiAgICB9O1xyXG4gICAgQk5vZGVJbnRlcm5hbC5wcm90b3R5cGUudGFrZUZyb21SaWdodCA9IGZ1bmN0aW9uIChyaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB0aGlzLmtleXMucHVzaChyaHMua2V5cy5zaGlmdCgpKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2gocmhzLmNoaWxkcmVuLnNoaWZ0KCkpO1xyXG4gICAgfTtcclxuICAgIEJOb2RlSW50ZXJuYWwucHJvdG90eXBlLnRha2VGcm9tTGVmdCA9IGZ1bmN0aW9uIChsaHMpIHtcclxuICAgICAgICAvLyBSZW1pbmRlcjogcGFyZW50IG5vZGUgbXVzdCB1cGRhdGUgaXRzIGNvcHkgb2Yga2V5IGZvciB0aGlzIG5vZGVcclxuICAgICAgICAvLyBhc3NlcnQ6IG5laXRoZXIgbm9kZSBpcyBzaGFyZWRcclxuICAgICAgICAvLyBhc3NlcnQgcmhzLmtleXMubGVuZ3RoID4gKG1heE5vZGVTaXplLzIgJiYgdGhpcy5rZXlzLmxlbmd0aDxtYXhOb2RlU2l6ZSlcclxuICAgICAgICB0aGlzLmtleXMudW5zaGlmdChsaHMua2V5cy5wb3AoKSk7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGxocy5jaGlsZHJlbi5wb3AoKSk7XHJcbiAgICB9O1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vIEludGVybmFsIE5vZGU6IHNjYW5uaW5nICYgZGVsZXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBOb3RlOiBgY291bnRgIGlzIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSB0aGlyZCBhcmd1bWVudCB0byBgb25Gb3VuZGAuIFxyXG4gICAgLy8gICAgICAgQSBsZWFmIG5vZGUncyBgZm9yUmFuZ2VgIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgdmFsdWUgZm9yIHRoaXMgY291bnRlcixcclxuICAgIC8vICAgICAgIHVubGVzcyB0aGUgb3BlcmF0aW9uIGlzIHRvIHN0b3AgZWFybHkuXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5mb3JSYW5nZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGluY2x1ZGVIaWdoLCBlZGl0TW9kZSwgdHJlZSwgY291bnQsIG9uRm91bmQpIHtcclxuICAgICAgICB2YXIgY21wID0gdHJlZS5fY29tcGFyZTtcclxuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cywgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpTG93ID0gdGhpcy5pbmRleE9mKGxvdywgMCwgY21wKSwgaSA9IGlMb3c7XHJcbiAgICAgICAgdmFyIGlIaWdoID0gTWF0aC5taW4oaGlnaCA9PT0gbG93ID8gaUxvdyA6IHRoaXMuaW5kZXhPZihoaWdoLCAwLCBjbXApLCBrZXlzLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgIGlmICghZWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgLy8gU2ltcGxlIGNhc2VcclxuICAgICAgICAgICAgZm9yICg7IGkgPD0gaUhpZ2g7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuW2ldLmZvclJhbmdlKGxvdywgaGlnaCwgaW5jbHVkZUhpZ2gsIGVkaXRNb2RlLCB0cmVlLCBjb3VudCwgb25Gb3VuZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGkgPD0gaUhpZ2gpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGZvciAoOyBpIDw9IGlIaWdoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uaXNTaGFyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0uY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2hpbGRyZW5baV0uZm9yUmFuZ2UobG93LCBoaWdoLCBpbmNsdWRlSGlnaCwgZWRpdE1vZGUsIHRyZWUsIGNvdW50LCBvbkZvdW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBpZiBjaGlsZHJlbltpXSBpcyBlbXB0eSB0aGVuIGtleXNbaV09dW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgIFRoaXMgaXMgYW4gaW52YWxpZCBzdGF0ZSwgYnV0IGl0IGlzIGZpeGVkIGJlbG93LlxyXG4gICAgICAgICAgICAgICAgICAgIGtleXNbaV0gPSBjaGlsZHJlbltpXS5tYXhLZXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEZWxldGlvbnMgbWF5IGhhdmUgb2NjdXJyZWQsIHNvIGxvb2sgZm9yIG9wcG9ydHVuaXRpZXMgdG8gbWVyZ2Ugbm9kZXMuXHJcbiAgICAgICAgICAgICAgICB2YXIgaGFsZiA9IHRyZWUuX21heE5vZGVTaXplID4+IDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoaUxvdyA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaUxvdy0tO1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gaUhpZ2g7IGkgPj0gaUxvdzsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmtleXMubGVuZ3RoIDw9IGhhbGYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLmtleXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeU1lcmdlKGksIHRyZWUuX21heE5vZGVTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gY2hpbGQgaXMgZW1wdHkhIGRlbGV0ZSBpdCFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPT0gMCAmJiBjaGlsZHJlblswXS5rZXlzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICBjaGVjayhmYWxzZSwgXCJlbXB0aW5lc3MgYnVnXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb3VudDtcclxuICAgIH07XHJcbiAgICAvKiogTWVyZ2VzIGNoaWxkIGkgd2l0aCBjaGlsZCBpKzEgaWYgdGhlaXIgY29tYmluZWQgc2l6ZSBpcyBub3QgdG9vIGxhcmdlICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS50cnlNZXJnZSA9IGZ1bmN0aW9uIChpLCBtYXhTaXplKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoaSA+PSAwICYmIGkgKyAxIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5rZXlzLmxlbmd0aCArIGNoaWxkcmVuW2kgKyAxXS5rZXlzLmxlbmd0aCA8PSBtYXhTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0uaXNTaGFyZWQpIC8vIGNsb25lZCBhbHJlYWR5IFVOTEVTUyBpIGlzIG91dHNpZGUgc2NhbiByYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGRyZW5baV0uY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLm1lcmdlU2libGluZyhjaGlsZHJlbltpICsgMV0sIG1heFNpemUpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGkgKyAxLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5cy5zcGxpY2UoaSArIDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzW2ldID0gY2hpbGRyZW5baV0ubWF4S2V5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlIGNoaWxkcmVuIGZyb20gYHJoc2AgaW50byB0aGlzLlxyXG4gICAgICogYHJoc2AgbXVzdCBiZSBwYXJ0IG9mIHRoaXMgdHJlZSwgYW5kIGJlIHJlbW92ZWQgZnJvbSBpdCBhZnRlciB0aGlzIGNhbGxcclxuICAgICAqIChvdGhlcndpc2UgaXNTaGFyZWQgZm9yIGl0cyBjaGlsZHJlbiBjb3VsZCBiZSBpbmNvcnJlY3QpLlxyXG4gICAgICovXHJcbiAgICBCTm9kZUludGVybmFsLnByb3RvdHlwZS5tZXJnZVNpYmxpbmcgPSBmdW5jdGlvbiAocmhzLCBtYXhOb2RlU2l6ZSkge1xyXG4gICAgICAgIC8vIGFzc2VydCAhdGhpcy5pc1NoYXJlZDtcclxuICAgICAgICB2YXIgb2xkTGVuZ3RoID0gdGhpcy5rZXlzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmtleXMucHVzaC5hcHBseSh0aGlzLmtleXMsIHJocy5rZXlzKTtcclxuICAgICAgICB2YXIgcmhzQ2hpbGRyZW4gPSByaHMuY2hpbGRyZW47XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoLmFwcGx5KHRoaXMuY2hpbGRyZW4sIHJoc0NoaWxkcmVuKTtcclxuICAgICAgICBpZiAocmhzLmlzU2hhcmVkICYmICF0aGlzLmlzU2hhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEFsbCBjaGlsZHJlbiBvZiBhIHNoYXJlZCBub2RlIGFyZSBpbXBsaWNpdGx5IHNoYXJlZCwgYW5kIHNpbmNlIHRoZWlyIG5ld1xyXG4gICAgICAgICAgICAvLyBwYXJlbnQgaXMgbm90IHNoYXJlZCwgdGhleSBtdXN0IG5vdyBiZSBleHBsaWNpdGx5IG1hcmtlZCBhcyBzaGFyZWQuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmhzQ2hpbGRyZW4ubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICByaHNDaGlsZHJlbltpXS5pc1NoYXJlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIG91ciBjaGlsZHJlbiBhcmUgdGhlbXNlbHZlcyBhbG1vc3QgZW1wdHkgZHVlIHRvIGEgbWFzcy1kZWxldGUsXHJcbiAgICAgICAgLy8gdGhleSBtYXkgbmVlZCB0byBiZSBtZXJnZWQgdG9vIChidXQgb25seSB0aGUgb2xkTGVuZ3RoLTEgYW5kIGl0c1xyXG4gICAgICAgIC8vIHJpZ2h0IHNpYmxpbmcgc2hvdWxkIG5lZWQgdGhpcykuXHJcbiAgICAgICAgdGhpcy50cnlNZXJnZShvbGRMZW5ndGggLSAxLCBtYXhOb2RlU2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJOb2RlSW50ZXJuYWw7XHJcbn0oQk5vZGUpKTtcclxuLy8gT3B0aW1pemF0aW9uOiB0aGlzIGFycmF5IG9mIGB1bmRlZmluZWRgcyBpcyB1c2VkIGluc3RlYWQgb2YgYSBub3JtYWxcclxuLy8gYXJyYXkgb2YgdmFsdWVzIGluIG5vZGVzIHdoZXJlIGB1bmRlZmluZWRgIGlzIHRoZSBvbmx5IHZhbHVlLlxyXG4vLyBJdHMgbGVuZ3RoIGlzIGV4dGVuZGVkIHRvIG1heCBub2RlIHNpemUgb24gZmlyc3QgdXNlOyBzaW5jZSBpdCBjYW5cclxuLy8gYmUgc2hhcmVkIGJldHdlZW4gdHJlZXMgd2l0aCBkaWZmZXJlbnQgbWF4aW11bXMsIGl0cyBsZW5ndGggY2FuIG9ubHlcclxuLy8gaW5jcmVhc2UsIG5ldmVyIGRlY3JlYXNlLiBJdHMgdHlwZSBzaG91bGQgYmUgdW5kZWZpbmVkW10gYnV0IHN0cmFuZ2VseVxyXG4vLyBUeXBlU2NyaXB0IHdvbid0IGFsbG93IHRoZSBjb21wYXJpc29uIFZbXSA9PT0gdW5kZWZpbmVkW10uIFRvIHByZXZlbnRcclxuLy8gdXNlcnMgZnJvbSBtYWtpbmcgdGhpcyBhcnJheSB0b28gbGFyZ2UsIEJUcmVlIGhhcyBhIG1heGltdW0gbm9kZSBzaXplLlxyXG4vL1xyXG4vLyBGQVE6IHVuZGVmVmFsc1tpXSBpcyBhbHJlYWR5IHVuZGVmaW5lZCwgc28gd2h5IGluY3JlYXNlIHRoZSBhcnJheSBzaXplP1xyXG4vLyBSZWFkaW5nIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBhbiBhcnJheSBpcyByZWxhdGl2ZWx5IHNsb3cgYmVjYXVzZSBpdFxyXG4vLyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNjYW5uaW5nIHRoZSBwcm90b3R5cGUgY2hhaW4uXHJcbnZhciB1bmRlZlZhbHMgPSBbXTtcclxudmFyIERlbGV0ZSA9IHsgZGVsZXRlOiB0cnVlIH0sIERlbGV0ZVJhbmdlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gRGVsZXRlOyB9O1xyXG52YXIgQnJlYWsgPSB7IGJyZWFrOiB0cnVlIH07XHJcbnZhciBFbXB0eUxlYWYgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG4gPSBuZXcgQk5vZGUoKTtcclxuICAgIG4uaXNTaGFyZWQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG47XHJcbn0pKCk7XHJcbnZhciBFbXB0eUFycmF5ID0gW107XHJcbnZhciBSZXVzZWRBcnJheSA9IFtdOyAvLyBhc3N1bWVkIHRocmVhZC1sb2NhbFxyXG5mdW5jdGlvbiBjaGVjayhmYWN0KSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmYWN0KSB7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KCdCKyB0cmVlJyk7IC8vIGF0IGJlZ2lubmluZyBvZiBtZXNzYWdlXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFyZ3Muam9pbignICcpKTtcclxuICAgIH1cclxufVxyXG4vKiogQSBCVHJlZSBmcm96ZW4gaW4gdGhlIGVtcHR5IHN0YXRlLiAqL1xyXG5leHBvcnRzLkVtcHR5QlRyZWUgPSAoZnVuY3Rpb24gKCkgeyB2YXIgdCA9IG5ldyBCVHJlZSgpOyB0LmZyZWV6ZSgpOyByZXR1cm4gdDsgfSkoKTtcclxuIiwgIi8qIVxuICAgIGxvY2FsRm9yYWdlIC0tIE9mZmxpbmUgU3RvcmFnZSwgSW1wcm92ZWRcbiAgICBWZXJzaW9uIDEuMTAuMFxuICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlXG4gICAgKGMpIDIwMTMtMjAxNyBNb3ppbGxhLCBBcGFjaGUgTGljZW5zZSAyLjBcbiovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5sb2NhbGZvcmFnZSA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyAoZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLCBmKX12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcbnZhciBNdXRhdGlvbiA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXG52YXIgc2NoZWR1bGVEcmFpbjtcblxue1xuICBpZiAoTXV0YXRpb24pIHtcbiAgICB2YXIgY2FsbGVkID0gMDtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb24obmV4dFRpY2spO1xuICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICB9KTtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgZWxlbWVudC5kYXRhID0gKGNhbGxlZCA9ICsrY2FsbGVkICUgMik7XG4gICAgfTtcbiAgfSBlbHNlIGlmICghZ2xvYmFsLnNldEltbWVkaWF0ZSAmJiB0eXBlb2YgZ2xvYmFsLk1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBjaGFubmVsID0gbmV3IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCgpO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbmV4dFRpY2s7XG4gICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgnZG9jdW1lbnQnIGluIGdsb2JhbCAmJiAnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICB2YXIgc2NyaXB0RWwgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5leHRUaWNrKCk7XG5cbiAgICAgICAgc2NyaXB0RWwub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgc2NyaXB0RWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHRFbCk7XG4gICAgICAgIHNjcmlwdEVsID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBnbG9iYWwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdEVsKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRUaW1lb3V0KG5leHRUaWNrLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBkcmFpbmluZztcbnZhciBxdWV1ZSA9IFtdO1xuLy9uYW1lZCBuZXh0VGljayBmb3IgbGVzcyBjb25mdXNpbmcgc3RhY2sgdHJhY2VzXG5mdW5jdGlvbiBuZXh0VGljaygpIHtcbiAgZHJhaW5pbmcgPSB0cnVlO1xuICB2YXIgaSwgb2xkUXVldWU7XG4gIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChsZW4pIHtcbiAgICBvbGRRdWV1ZSA9IHF1ZXVlO1xuICAgIHF1ZXVlID0gW107XG4gICAgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgIG9sZFF1ZXVlW2ldKCk7XG4gICAgfVxuICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgfVxuICBkcmFpbmluZyA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGltbWVkaWF0ZTtcbmZ1bmN0aW9uIGltbWVkaWF0ZSh0YXNrKSB7XG4gIGlmIChxdWV1ZS5wdXNoKHRhc2spID09PSAxICYmICFkcmFpbmluZykge1xuICAgIHNjaGVkdWxlRHJhaW4oKTtcbiAgfVxufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbn0se31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIGltbWVkaWF0ZSA9IF9kZXJlcV8oMSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBJTlRFUk5BTCgpIHt9XG5cbnZhciBoYW5kbGVycyA9IHt9O1xuXG52YXIgUkVKRUNURUQgPSBbJ1JFSkVDVEVEJ107XG52YXIgRlVMRklMTEVEID0gWydGVUxGSUxMRUQnXTtcbnZhciBQRU5ESU5HID0gWydQRU5ESU5HJ107XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikge1xuICBpZiAodHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdGhpcy5zdGF0ZSA9IFBFTkRJTkc7XG4gIHRoaXMucXVldWUgPSBbXTtcbiAgdGhpcy5vdXRjb21lID0gdm9pZCAwO1xuICBpZiAocmVzb2x2ZXIgIT09IElOVEVSTkFMKSB7XG4gICAgc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHRoaXMsIHJlc29sdmVyKTtcbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVtcImNhdGNoXCJdID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gIGlmICh0eXBlb2Ygb25GdWxmaWxsZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gRlVMRklMTEVEIHx8XG4gICAgdHlwZW9mIG9uUmVqZWN0ZWQgIT09ICdmdW5jdGlvbicgJiYgdGhpcy5zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKElOVEVSTkFMKTtcbiAgaWYgKHRoaXMuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgPyBvbkZ1bGZpbGxlZCA6IG9uUmVqZWN0ZWQ7XG4gICAgdW53cmFwKHByb21pc2UsIHJlc29sdmVyLCB0aGlzLm91dGNvbWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucXVldWUucHVzaChuZXcgUXVldWVJdGVtKHByb21pc2UsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5mdW5jdGlvbiBRdWV1ZUl0ZW0ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSBvbkZ1bGZpbGxlZDtcbiAgICB0aGlzLmNhbGxGdWxmaWxsZWQgPSB0aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZDtcbiAgfVxuICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSBvblJlamVjdGVkO1xuICAgIHRoaXMuY2FsbFJlamVjdGVkID0gdGhpcy5vdGhlckNhbGxSZWplY3RlZDtcbiAgfVxufVxuUXVldWVJdGVtLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlc29sdmUodGhpcy5wcm9taXNlLCB2YWx1ZSk7XG59O1xuUXVldWVJdGVtLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdW53cmFwKHRoaXMucHJvbWlzZSwgdGhpcy5vbkZ1bGZpbGxlZCwgdmFsdWUpO1xufTtcblF1ZXVlSXRlbS5wcm90b3R5cGUuY2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGhhbmRsZXJzLnJlamVjdCh0aGlzLnByb21pc2UsIHZhbHVlKTtcbn07XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHVud3JhcCh0aGlzLnByb21pc2UsIHRoaXMub25SZWplY3RlZCwgdmFsdWUpO1xufTtcblxuZnVuY3Rpb24gdW53cmFwKHByb21pc2UsIGZ1bmMsIHZhbHVlKSB7XG4gIGltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgZSk7XG4gICAgfVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmhhbmRsZXJzLnJlc29sdmUgPSBmdW5jdGlvbiAoc2VsZiwgdmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKGdldFRoZW4sIHZhbHVlKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4gaGFuZGxlcnMucmVqZWN0KHNlbGYsIHJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgdmFyIHRoZW5hYmxlID0gcmVzdWx0LnZhbHVlO1xuXG4gIGlmICh0aGVuYWJsZSkge1xuICAgIHNhZmVseVJlc29sdmVUaGVuYWJsZShzZWxmLCB0aGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICBzZWxmLm91dGNvbWUgPSB2YWx1ZTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHZhciBsZW4gPSBzZWxmLnF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICBzZWxmLnF1ZXVlW2ldLmNhbGxGdWxmaWxsZWQodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VsZjtcbn07XG5oYW5kbGVycy5yZWplY3QgPSBmdW5jdGlvbiAoc2VsZiwgZXJyb3IpIHtcbiAgc2VsZi5zdGF0ZSA9IFJFSkVDVEVEO1xuICBzZWxmLm91dGNvbWUgPSBlcnJvcjtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgc2VsZi5xdWV1ZVtpXS5jYWxsUmVqZWN0ZWQoZXJyb3IpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufTtcblxuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBhY2Nlc3NvciBvbmNlIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjXG4gIHZhciB0aGVuID0gb2JqICYmIG9iai50aGVuO1xuICBpZiAob2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiBhcHB5VGhlbigpIHtcbiAgICAgIHRoZW4uYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHNlbGYsIHRoZW5hYmxlKSB7XG4gIC8vIEVpdGhlciBmdWxmaWxsLCByZWplY3Qgb3IgcmVqZWN0IHdpdGggZXJyb3JcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbkVycm9yKHZhbHVlKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGhhbmRsZXJzLnJlamVjdChzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblN1Y2Nlc3ModmFsdWUpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgaGFuZGxlcnMucmVzb2x2ZShzZWxmLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlUb1Vud3JhcCgpIHtcbiAgICB0aGVuYWJsZShvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHRyeVRvVW53cmFwKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICBvbkVycm9yKHJlc3VsdC52YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5Q2F0Y2goZnVuYywgdmFsdWUpIHtcbiAgdmFyIG91dCA9IHt9O1xuICB0cnkge1xuICAgIG91dC52YWx1ZSA9IGZ1bmModmFsdWUpO1xuICAgIG91dC5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvdXQuc3RhdHVzID0gJ2Vycm9yJztcbiAgICBvdXQudmFsdWUgPSBlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cblByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHRoaXMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzLnJlc29sdmUobmV3IHRoaXMoSU5URVJOQUwpLCB2YWx1ZSk7XG59XG5cblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKElOVEVSTkFMKTtcbiAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCByZWFzb24pO1xufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcbmZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7XG4gIH1cblxuICB2YXIgbGVuID0gaXRlcmFibGUubGVuZ3RoO1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGlmICghbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7XG4gIH1cblxuICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gIHZhciByZXNvbHZlZCA9IDA7XG4gIHZhciBpID0gLTE7XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMoSU5URVJOQUwpO1xuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhbGxSZXNvbHZlcihpdGVyYWJsZVtpXSwgaSk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2U7XG4gIGZ1bmN0aW9uIGFsbFJlc29sdmVyKHZhbHVlLCBpKSB7XG4gICAgc2VsZi5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmVGcm9tQWxsLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZyb21BbGwob3V0VmFsdWUpIHtcbiAgICAgIHZhbHVlc1tpXSA9IG91dFZhbHVlO1xuICAgICAgaWYgKCsrcmVzb2x2ZWQgPT09IGxlbiAmJiAhY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgdmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5yYWNlID0gcmFjZTtcbmZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXJhYmxlKSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgIHJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCdtdXN0IGJlIGFuIGFycmF5JykpO1xuICB9XG5cbiAgdmFyIGxlbiA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICBpZiAoIWxlbikge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmUoW10pO1xuICB9XG5cbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7XG5cbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHJlc29sdmVyKGl0ZXJhYmxlW2ldKTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbiAgZnVuY3Rpb24gcmVzb2x2ZXIodmFsdWUpIHtcbiAgICBzZWxmLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBoYW5kbGVycy5yZXNvbHZlKHByb21pc2UsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxufSx7XCIxXCI6MX1dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuaWYgKHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ2Z1bmN0aW9uJykge1xuICBnbG9iYWwuUHJvbWlzZSA9IF9kZXJlcV8oMik7XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7XCIyXCI6Mn1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIGdldElEQigpIHtcbiAgICAvKiBnbG9iYWwgaW5kZXhlZERCLHdlYmtpdEluZGV4ZWREQixtb3pJbmRleGVkREIsT0luZGV4ZWREQixtc0luZGV4ZWREQiAqL1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZWREQjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdlYmtpdEluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWJraXRJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtb3pJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbW96SW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgT0luZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPSW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNJbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbXNJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbnZhciBpZGIgPSBnZXRJREIoKTtcblxuZnVuY3Rpb24gaXNJbmRleGVkREJWYWxpZCgpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbml0aWFsaXplIEluZGV4ZWREQjsgZmFsbCBiYWNrIHRvIHZlbmRvci1wcmVmaXhlZCB2ZXJzaW9uc1xuICAgICAgICAvLyBpZiBuZWVkZWQuXG4gICAgICAgIGlmICghaWRiIHx8ICFpZGIub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pbWljIFBvdWNoREIgaGVyZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgdGVzdCBmb3Igb3BlbkRhdGFiYXNlIGJlY2F1c2UgSUUgTW9iaWxlIGlkZW50aWZpZXMgaXRzZWxmXG4gICAgICAgIC8vIGFzIFNhZmFyaS4gT2ggdGhlIGx1bHouLi5cbiAgICAgICAgdmFyIGlzU2FmYXJpID0gdHlwZW9mIG9wZW5EYXRhYmFzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgLyhTYWZhcml8aVBob25lfGlQYWR8aVBvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9CbGFja0JlcnJ5Ly50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbiAgICAgICAgdmFyIGhhc0ZldGNoID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIGZldGNoLnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgIT09IC0xO1xuXG4gICAgICAgIC8vIFNhZmFyaSA8MTAuMSBkb2VzIG5vdCBtZWV0IG91ciByZXF1aXJlbWVudHMgZm9yIElEQiBzdXBwb3J0XG4gICAgICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvaXNzdWVzLzU1NzIpLlxuICAgICAgICAvLyBTYWZhcmkgMTAuMSBzaGlwcGVkIHdpdGggZmV0Y2gsIHdlIGNhbiB1c2UgdGhhdCB0byBkZXRlY3QgaXQuXG4gICAgICAgIC8vIE5vdGU6IHRoaXMgY3JlYXRlcyBpc3N1ZXMgd2l0aCBgd2luZG93LmZldGNoYCBwb2x5ZmlsbHMgYW5kXG4gICAgICAgIC8vIG92ZXJyaWRlczsgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9jYWxGb3JhZ2UvbG9jYWxGb3JhZ2UvaXNzdWVzLzg1NlxuICAgICAgICByZXR1cm4gKCFpc1NhZmFyaSB8fCBoYXNGZXRjaCkgJiYgdHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgLy8gc29tZSBvdXRkYXRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIHRoYXQgYXBwZWFyIG9uIFNhbXN1bmdcbiAgICAgICAgLy8gYW5kIEhUQyBBbmRyb2lkIGRldmljZXMgPDQuNCBhcmUgbWlzc2luZyBJREJLZXlSYW5nZVxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL2lzc3Vlcy8xMjhcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMjcyXG4gICAgICAgIHR5cGVvZiBJREJLZXlSYW5nZSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBBYnN0cmFjdHMgY29uc3RydWN0aW5nIGEgQmxvYiBvYmplY3QsIHNvIGl0IGFsc28gd29ya3MgaW4gb2xkZXJcbi8vIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgbmF0aXZlIEJsb2IgY29uc3RydWN0b3IuIChpLmUuXG4vLyBvbGQgUXRXZWJLaXQgdmVyc2lvbnMsIGF0IGxlYXN0KS5cbi8vIEFic3RyYWN0cyBjb25zdHJ1Y3RpbmcgYSBCbG9iIG9iamVjdCwgc28gaXQgYWxzbyB3b3JrcyBpbiBvbGRlclxuLy8gYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBuYXRpdmUgQmxvYiBjb25zdHJ1Y3Rvci4gKGkuZS5cbi8vIG9sZCBRdFdlYktpdCB2ZXJzaW9ucywgYXQgbGVhc3QpLlxuZnVuY3Rpb24gY3JlYXRlQmxvYihwYXJ0cywgcHJvcGVydGllcykge1xuICAgIC8qIGdsb2JhbCBCbG9iQnVpbGRlcixNU0Jsb2JCdWlsZGVyLE1vekJsb2JCdWlsZGVyLFdlYktpdEJsb2JCdWlsZGVyICovXG4gICAgcGFydHMgPSBwYXJ0cyB8fCBbXTtcbiAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2IocGFydHMsIHByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTVNCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBNU0Jsb2JCdWlsZGVyIDogdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1vekJsb2JCdWlsZGVyIDogV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IocHJvcGVydGllcy50eXBlKTtcbiAgICB9XG59XG5cbi8vIFRoaXMgaXMgQ29tbW9uSlMgYmVjYXVzZSBsaWUgaXMgYW4gZXh0ZXJuYWwgZGVwZW5kZW5jeSwgc28gUm9sbHVwXG4vLyBjYW4ganVzdCBpZ25vcmUgaXQuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gdGhlIFwibm9wcm9taXNlc1wiIGJ1aWxkIHRoaXMgd2lsbCBqdXN0IHRocm93IGlmIHlvdSBkb24ndCBoYXZlXG4gICAgLy8gYSBnbG9iYWwgcHJvbWlzZSBvYmplY3QsIGJ1dCBpdCB3b3VsZCB0aHJvdyBhbnl3YXkgbGF0ZXIuXG4gICAgX2RlcmVxXygzKTtcbn1cbnZhciBQcm9taXNlJDEgPSBQcm9taXNlO1xuXG5mdW5jdGlvbiBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2UudGhlbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2VbXCJjYXRjaFwiXShlcnJvckNhbGxiYWNrKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAgICAvLyBDYXN0IHRoZSBrZXkgdG8gYSBzdHJpbmcsIGFzIHRoYXQncyBhbGwgd2UgY2FuIHNldCBhcyBhIGtleS5cbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGtleSArICcgdXNlZCBhcyBhIGtleSwgYnV0IGl0IGlzIG5vdCBhIHN0cmluZy4nKTtcbiAgICAgICAga2V5ID0gU3RyaW5nKGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2soKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggJiYgdHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgfVxufVxuXG4vLyBTb21lIGNvZGUgb3JpZ2luYWxseSBmcm9tIGFzeW5jX3N0b3JhZ2UuanMgaW5cbi8vIFtHYWlhXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS1iMmcvZ2FpYSkuXG5cbnZhciBERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFID0gJ2xvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0JztcbnZhciBzdXBwb3J0c0Jsb2JzID0gdm9pZCAwO1xudmFyIGRiQ29udGV4dHMgPSB7fTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFRyYW5zYWN0aW9uIE1vZGVzXG52YXIgUkVBRF9PTkxZID0gJ3JlYWRvbmx5JztcbnZhciBSRUFEX1dSSVRFID0gJ3JlYWR3cml0ZSc7XG5cbi8vIFRyYW5zZm9ybSBhIGJpbmFyeSBzdHJpbmcgdG8gYW4gYXJyYXkgYnVmZmVyLCBiZWNhdXNlIG90aGVyd2lzZVxuLy8gd2VpcmQgc3R1ZmYgaGFwcGVucyB3aGVuIHlvdSB0cnkgdG8gd29yayB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nIGRpcmVjdGx5LlxuLy8gSXQgaXMga25vd24uXG4vLyBGcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQ5Njc2NDcvIChjb250aW51ZXMgb24gbmV4dCBsaW5lKVxuLy8gZW5jb2RlLWRlY29kZS1pbWFnZS13aXRoLWJhc2U2NC1icmVha3MtaW1hZ2UgKDIwMTMtMDQtMjEpXG5mdW5jdGlvbiBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihiaW4pIHtcbiAgICB2YXIgbGVuZ3RoID0gYmluLmxlbmd0aDtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuLy9cbi8vIEJsb2JzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGFsbCB2ZXJzaW9ucyBvZiBJbmRleGVkREIsIG5vdGFibHlcbi8vIENocm9tZSA8MzcgYW5kIEFuZHJvaWQgPDUuIEluIHRob3NlIHZlcnNpb25zLCBzdG9yaW5nIGEgYmxvYiB3aWxsIHRocm93LlxuLy9cbi8vIFZhcmlvdXMgb3RoZXIgYmxvYiBidWdzIGV4aXN0IGluIENocm9tZSB2MzctNDIgKGluY2x1c2l2ZSkuXG4vLyBEZXRlY3RpbmcgdGhlbSBpcyBleHBlbnNpdmUgYW5kIGNvbmZ1c2luZyB0byB1c2VycywgYW5kIENocm9tZSAzNy00MlxuLy8gaXMgYXQgdmVyeSBsb3cgdXNhZ2Ugd29ybGR3aWRlLCBzbyB3ZSBkbyBhIGhhY2t5IHVzZXJBZ2VudCBjaGVjayBpbnN0ZWFkLlxuLy9cbi8vIGNvbnRlbnQtdHlwZSBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00MDgxMjBcbi8vIDQwNCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDc5MTZcbi8vIEZpbGVSZWFkZXIgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3ODM2XG4vL1xuLy8gQ29kZSBib3Jyb3dlZCBmcm9tIFBvdWNoREIuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3VjaGRiL3BvdWNoZGIvYmxvYi9tYXN0ZXIvcGFja2FnZXMvbm9kZV9tb2R1bGVzL3BvdWNoZGItYWRhcHRlci1pZGIvc3JjL2Jsb2JTdXBwb3J0LmpzXG4vL1xuZnVuY3Rpb24gX2NoZWNrQmxvYlN1cHBvcnRXaXRob3V0Q2FjaGluZyhpZGIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICB2YXIgdHhuID0gaWRiLnRyYW5zYWN0aW9uKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUsIFJFQURfV1JJVEUpO1xuICAgICAgICB2YXIgYmxvYiA9IGNyZWF0ZUJsb2IoWycnXSk7XG4gICAgICAgIHR4bi5vYmplY3RTdG9yZShERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFKS5wdXQoYmxvYiwgJ2tleScpO1xuXG4gICAgICAgIHR4bi5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBhYm9ydHMgbm93IGl0cyBkdWUgdG8gbm90IGJlaW5nIGFibGUgdG9cbiAgICAgICAgICAgIC8vIHdyaXRlIHRvIHRoZSBkYXRhYmFzZSwgbGlrZWx5IGR1ZSB0byB0aGUgZGlzayBiZWluZyBmdWxsXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdHhuLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlZENocm9tZSA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgdmFyIG1hdGNoZWRFZGdlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLy8pO1xuICAgICAgICAgICAgLy8gTVMgRWRnZSBwcmV0ZW5kcyB0byBiZSBDaHJvbWUgNDI6XG4gICAgICAgICAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hoODY5MzAxJTI4dj12cy44NSUyOS5hc3B4XG4gICAgICAgICAgICByZXNvbHZlKG1hdGNoZWRFZGdlIHx8ICFtYXRjaGVkQ2hyb21lIHx8IHBhcnNlSW50KG1hdGNoZWRDaHJvbWVbMV0sIDEwKSA+PSA0Myk7XG4gICAgICAgIH07XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXJyb3IsIHNvIGFzc3VtZSB1bnN1cHBvcnRlZFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfY2hlY2tCbG9iU3VwcG9ydChpZGIpIHtcbiAgICBpZiAodHlwZW9mIHN1cHBvcnRzQmxvYnMgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoc3VwcG9ydHNCbG9icyk7XG4gICAgfVxuICAgIHJldHVybiBfY2hlY2tCbG9iU3VwcG9ydFdpdGhvdXRDYWNoaW5nKGlkYikudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3VwcG9ydHNCbG9icyA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNCbG9icztcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2RlZmVyUmVhZGluZXNzKGRiSW5mbykge1xuICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXTtcblxuICAgIC8vIENyZWF0ZSBhIGRlZmVycmVkIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IHt9O1xuXG4gICAgZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5xdWV1ZSB0aGUgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChkZWZlcnJlZE9wZXJhdGlvbik7XG5cbiAgICAvLyBDaGFpbiBpdHMgcHJvbWlzZSB0byB0aGUgZGF0YWJhc2UgcmVhZGluZXNzLlxuICAgIGlmICghZGJDb250ZXh0LmRiUmVhZHkpIHtcbiAgICAgICAgZGJDb250ZXh0LmRiUmVhZHkgPSBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGJDb250ZXh0LmRiUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pIHtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyBEZXF1ZXVlIGEgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7XG5cbiAgICAvLyBSZXNvbHZlIGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0UmVhZGluZXNzKGRiSW5mbywgZXJyKSB7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gRGVxdWV1ZSBhIGRlZmVycmVkIG9wZXJhdGlvbi5cbiAgICB2YXIgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gICAgLy8gUmVqZWN0IGl0cyBwcm9taXNlICh3aGljaCBpcyBwYXJ0IG9mIHRoZSBkYXRhYmFzZSByZWFkaW5lc3NcbiAgICAvLyBjaGFpbiBvZiBwcm9taXNlcykuXG4gICAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRDb25uZWN0aW9uKGRiSW5mbywgdXBncmFkZU5lZWRlZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSB8fCBjcmVhdGVEYkNvbnRleHQoKTtcblxuICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICAgICAgICAgIGRiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkYkluZm8uZGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRiQXJncyA9IFtkYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgICAgICAgIGRiQXJncy5wdXNoKGRiSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVucmVxID0gaWRiLm9wZW4uYXBwbHkoaWRiLCBkYkFyZ3MpO1xuXG4gICAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgICAgICBvcGVucmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRiID0gb3BlbnJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLm9sZFZlcnNpb24gPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkZWQgd2hlbiBzdXBwb3J0IGZvciBibG9iIHNoaW1zIHdhcyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ0NvbnN0cmFpbnRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArICcgaGFzIGJlZW4gdXBncmFkZWQgZnJvbSB2ZXJzaW9uICcgKyBlLm9sZFZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGUubmV3VmVyc2lvbiArICcsIGJ1dCB0aGUgc3RvcmFnZSBcIicgKyBkYkluZm8uc3RvcmVOYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlbnJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJlamVjdChvcGVucmVxLmVycm9yKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvcGVucmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYiA9IG9wZW5yZXEucmVzdWx0O1xuICAgICAgICAgICAgZGIub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgd2hlbiB0aGUgZGF0YWJhc2UgaXMgbW9kaWZpZWQgKGUuZy4gYWRkaW5nIGFuIG9iamVjdFN0b3JlKSBvclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWQgKGV2ZW4gd2hlbiBpbml0aWF0ZWQgYnkgb3RoZXIgc2Vzc2lvbnMgaW4gZGlmZmVyZW50IHRhYnMpLlxuICAgICAgICAgICAgICAgIC8vIENsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGVyZSBwcmV2ZW50cyB0aG9zZSBvcGVyYXRpb25zIGZyb20gYmVpbmcgYmxvY2tlZC5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2UgaXMgYWNjZXNzZWQgYWdhaW4gbGF0ZXIgYnkgdGhpcyBpbnN0YW5jZSwgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHJlb3BlbmVkIG9yIHRoZSBkYXRhYmFzZSByZWNyZWF0ZWQgYXMgbmVlZGVkLlxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICBfYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0T3JpZ2luYWxDb25uZWN0aW9uKGRiSW5mbykge1xuICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pIHtcbiAgICByZXR1cm4gX2dldENvbm5lY3Rpb24oZGJJbmZvLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gX2lzVXBncmFkZU5lZWRlZChkYkluZm8sIGRlZmF1bHRWZXJzaW9uKSB7XG4gICAgaWYgKCFkYkluZm8uZGIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGlzTmV3U3RvcmUgPSAhZGJJbmZvLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgdmFyIGlzRG93bmdyYWRlID0gZGJJbmZvLnZlcnNpb24gPCBkYkluZm8uZGIudmVyc2lvbjtcbiAgICB2YXIgaXNVcGdyYWRlID0gZGJJbmZvLnZlcnNpb24gPiBkYkluZm8uZGIudmVyc2lvbjtcblxuICAgIGlmIChpc0Rvd25ncmFkZSkge1xuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyBub3QgdGhlIGRlZmF1bHQgb25lXG4gICAgICAgIC8vIHRoZW4gd2FybiBmb3IgaW1wb3NzaWJsZSBkb3duZ3JhZGUuXG4gICAgICAgIGlmIChkYkluZm8udmVyc2lvbiAhPT0gZGVmYXVsdFZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRhdGFiYXNlIFwiJyArIGRiSW5mby5uYW1lICsgJ1wiJyArIFwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uIFwiICsgZGJJbmZvLmRiLnZlcnNpb24gKyAnIHRvIHZlcnNpb24gJyArIGRiSW5mby52ZXJzaW9uICsgJy4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbGlnbiB0aGUgdmVyc2lvbnMgdG8gcHJldmVudCBlcnJvcnMuXG4gICAgICAgIGRiSW5mby52ZXJzaW9uID0gZGJJbmZvLmRiLnZlcnNpb247XG4gICAgfVxuXG4gICAgaWYgKGlzVXBncmFkZSB8fCBpc05ld1N0b3JlKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdG9yZSBpcyBuZXcgdGhlbiBpbmNyZW1lbnQgdGhlIHZlcnNpb24gKGlmIG5lZWRlZCkuXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGFuIFwidXBncmFkZW5lZWRlZFwiIGV2ZW50IHdoaWNoIGlzIHJlcXVpcmVkXG4gICAgICAgIC8vIGZvciBjcmVhdGluZyBhIHN0b3JlLlxuICAgICAgICBpZiAoaXNOZXdTdG9yZSkge1xuICAgICAgICAgICAgdmFyIGluY1ZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICBpZiAoaW5jVmVyc2lvbiA+IGRiSW5mby52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBpbmNWZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBlbmNvZGUgYSBibG9iIGZvciBpbmRleGVkZGIgZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnQgYmxvYnNcbmZ1bmN0aW9uIF9lbmNvZGVCbG9iKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgYmFzZTY0ID0gYnRvYShlLnRhcmdldC5yZXN1bHQgfHwgJycpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGE6IGJhc2U2NCxcbiAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpO1xuICAgIH0pO1xufVxuXG4vLyBkZWNvZGUgYW4gZW5jb2RlZCBibG9iXG5mdW5jdGlvbiBfZGVjb2RlQmxvYihlbmNvZGVkQmxvYikge1xuICAgIHZhciBhcnJheUJ1ZmYgPSBfYmluU3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGVuY29kZWRCbG9iLmRhdGEpKTtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYXJyYXlCdWZmXSwgeyB0eXBlOiBlbmNvZGVkQmxvYi50eXBlIH0pO1xufVxuXG4vLyBpcyB0aGlzIG9uZSBvZiBvdXIgZmFuY3kgZW5jb2RlZCBibG9icz9cbmZ1bmN0aW9uIF9pc0VuY29kZWRCbG9iKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjtcbn1cblxuLy8gU3BlY2lhbGl6ZSB0aGUgZGVmYXVsdCBgcmVhZHkoKWAgZnVuY3Rpb24gYnkgbWFraW5nIGl0IGRlcGVuZGVudFxuLy8gb24gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugb3BlcmF0aW9ucy4gVGh1cywgdGhlIGRyaXZlciB3aWxsIGJlIGFjdHVhbGx5XG4vLyByZWFkeSB3aGVuIGl0J3MgYmVlbiBpbml0aWFsaXplZCAoZGVmYXVsdCkgKmFuZCogdGhlcmUgYXJlIG5vIHBlbmRpbmdcbi8vIG9wZXJhdGlvbnMgb24gdGhlIGRhdGFiYXNlIChpbml0aWF0ZWQgYnkgc29tZSBvdGhlciBpbnN0YW5jZXMpLlxuZnVuY3Rpb24gX2Z1bGx5UmVhZHkoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2luaXRSZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tzZWxmLl9kYkluZm8ubmFtZV07XG5cbiAgICAgICAgaWYgKGRiQ29udGV4dCAmJiBkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIGRiQ29udGV4dC5kYlJlYWR5O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHByb21pc2UsIGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFRyeSB0byBlc3RhYmxpc2ggYSBuZXcgZGIgY29ubmVjdGlvbiB0byByZXBsYWNlIHRoZVxuLy8gY3VycmVudCBvbmUgd2hpY2ggaXMgYnJva2VuIChpLmUuIGV4cGVyaWVuY2luZ1xuLy8gSW52YWxpZFN0YXRlRXJyb3Igd2hpbGUgY3JlYXRpbmcgYSB0cmFuc2FjdGlvbikuXG5mdW5jdGlvbiBfdHJ5UmVjb25uZWN0KGRiSW5mbykge1xuICAgIF9kZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuXG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuICAgIHZhciBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgIGlmIChmb3JhZ2UuX2RiSW5mby5kYikge1xuICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYkluZm8uZGIgPSBudWxsO1xuXG4gICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvKSkge1xuICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgcmV0dXJuIF9nZXRVcGdyYWRlZENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGI7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgLy8gc3RvcmUgdGhlIGxhdGVzdCBkYiByZWZlcmVuY2VcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgZGIgd2FzIHVwZ3JhZGVkXG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvcmFnZXNbaV0uX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICB9XG4gICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIF9yZWplY3RSZWFkaW5lc3MoZGJJbmZvLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG5cbi8vIEZGIGRvZXNuJ3QgbGlrZSBQcm9taXNlcyAobWljcm8tdGFza3MpIGFuZCBJRERCIHN0b3JlIG9wZXJhdGlvbnMsXG4vLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IHdpdGggY2FsbGJhY2tzXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvbihkYkluZm8sIG1vZGUsIGNhbGxiYWNrLCByZXRyaWVzKSB7XG4gICAgaWYgKHJldHJpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRyaWVzID0gMTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICB2YXIgdHggPSBkYkluZm8uZGIudHJhbnNhY3Rpb24oZGJJbmZvLnN0b3JlTmFtZSwgbW9kZSk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHR4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJldHJpZXMgPiAwICYmICghZGJJbmZvLmRiIHx8IGVyci5uYW1lID09PSAnSW52YWxpZFN0YXRlRXJyb3InIHx8IGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiSW5mby5kYiB8fCBlcnIubmFtZSA9PT0gJ05vdEZvdW5kRXJyb3InICYmICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lKSAmJiBkYkluZm8udmVyc2lvbiA8PSBkYkluZm8uZGIudmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgZGIgdmVyc2lvbiwgdG8gY3JlYXRlIHRoZSBuZXcgT2JqZWN0U3RvcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRiSW5mby5kYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVvcGVuIHRoZSBkYXRhYmFzZSBmb3IgdXBncmFkaW5nLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdHJ5UmVjb25uZWN0KGRiSW5mbykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURiQ29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBSdW5uaW5nIGxvY2FsRm9yYWdlcyBzaGFyaW5nIGEgZGF0YWJhc2UuXG4gICAgICAgIGZvcmFnZXM6IFtdLFxuICAgICAgICAvLyBTaGFyZWQgZGF0YWJhc2UuXG4gICAgICAgIGRiOiBudWxsLFxuICAgICAgICAvLyBEYXRhYmFzZSByZWFkaW5lc3MgKHByb21pc2UpLlxuICAgICAgICBkYlJlYWR5OiBudWxsLFxuICAgICAgICAvLyBEZWZlcnJlZCBvcGVyYXRpb25zIG9uIHRoZSBkYXRhYmFzZS5cbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb25zOiBbXVxuICAgIH07XG59XG5cbi8vIE9wZW4gdGhlIEluZGV4ZWREQiBkYXRhYmFzZSAoYXV0b21hdGljYWxseSBjcmVhdGVzIG9uZSBpZiBvbmUgZGlkbid0XG4vLyBwcmV2aW91c2x5IGV4aXN0KSwgdXNpbmcgYW55IG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2Uob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgZGF0YWJhc2U7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gLi4ub3IgY3JlYXRlIGEgbmV3IGNvbnRleHQuXG4gICAgaWYgKCFkYkNvbnRleHQpIHtcbiAgICAgICAgZGJDb250ZXh0ID0gY3JlYXRlRGJDb250ZXh0KCk7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgZGJDb250ZXh0c1tkYkluZm8ubmFtZV0gPSBkYkNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgcnVubmluZyBsb2NhbEZvcmFnZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgIGRiQ29udGV4dC5mb3JhZ2VzLnB1c2goc2VsZik7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBkZWZhdWx0IGByZWFkeSgpYCBmdW5jdGlvbiB3aXRoIHRoZSBzcGVjaWFsaXplZCBvbmUuXG4gICAgaWYgKCFzZWxmLl9pbml0UmVhZHkpIHtcbiAgICAgICAgc2VsZi5faW5pdFJlYWR5ID0gc2VsZi5yZWFkeTtcbiAgICAgICAgc2VsZi5yZWFkeSA9IF9mdWxseVJlYWR5O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsaXphdGlvbiBzdGF0ZXMgb2YgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgIHZhciBpbml0UHJvbWlzZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUVycm9ycygpIHtcbiAgICAgICAgLy8gRG9uJ3QgaGFuZGxlIGVycm9ycyBoZXJlLFxuICAgICAgICAvLyBqdXN0IG1ha2VzIHN1cmUgcmVsYXRlZCBsb2NhbEZvcmFnZXMgYXJlbid0IHBlbmRpbmcuXG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGJDb250ZXh0LmZvcmFnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZvcmFnZSA9IGRiQ29udGV4dC5mb3JhZ2VzW2pdO1xuICAgICAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICAgICAgICAvLyBEb24ndCB3YWl0IGZvciBpdHNlbGYuLi5cbiAgICAgICAgICAgIGluaXRQcm9taXNlcy5wdXNoKGZvcmFnZS5faW5pdFJlYWR5KClbXCJjYXRjaFwiXShpZ25vcmVFcnJvcnMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRha2UgYSBzbmFwc2hvdCBvZiB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcy5zbGljZSgwKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBvbmx5IHdoZW5cbiAgICAvLyBhbGwgdGhlIHJlbGF0ZWQgbG9jYWxGb3JhZ2VzIGFyZW4ndCBwZW5kaW5nLlxuICAgIHJldHVybiBQcm9taXNlJDEuYWxsKGluaXRQcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYjtcbiAgICAgICAgLy8gR2V0IHRoZSBjb25uZWN0aW9uIG9yIG9wZW4gYSBuZXcgb25lIHdpdGhvdXQgdXBncmFkZS5cbiAgICAgICAgcmV0dXJuIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgICAgaWYgKF9pc1VwZ3JhZGVOZWVkZWQoZGJJbmZvLCBzZWxmLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYjtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAvLyBTaGFyZSB0aGUgZmluYWwgY29ubmVjdGlvbiBhbW9uZ3N0IHJlbGF0ZWQgbG9jYWxGb3JhZ2VzLlxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGZvcmFnZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2tdO1xuICAgICAgICAgICAgaWYgKGZvcmFnZSAhPT0gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIFNlbGYgaXMgYWxyZWFkeSB1cC10by1kYXRlLlxuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gZGJJbmZvLmRiO1xuICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBkYkluZm8udmVyc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9kZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIEl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuZnVuY3Rpb24gaXRlcmF0ZShpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5DdXJzb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbk51bWJlciA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3Vyc29yLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfZGVjb2RlQmxvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvcih2YWx1ZSwgY3Vyc29yLmtleSwgaXRlcmF0aW9uTnVtYmVyKyspO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3IgY2FsbGJhY2sgcmV0dXJucyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobm9uLWB1bmRlZmluZWRgKSB2YWx1ZSwgdGhlbiB3ZSBzdG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGl0ZXJhdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yW1wiY29udGludWVcIl0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHNldEl0ZW0oa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBkYkluZm87XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGlmICh0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jaGVja0Jsb2JTdXBwb3J0KGRiSW5mby5kYikudGhlbihmdW5jdGlvbiAoYmxvYlN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2JTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbmNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IF9zYXZlXyBudWxsIGlzIGJlY2F1c2UgSUUgMTAgZG9lc1xuICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3VwcG9ydCBzYXZpbmcgdGhlIGBudWxsYCB0eXBlIGluIEluZGV4ZWREQi4gSG93XG4gICAgICAgICAgICAgICAgICAgIC8vIGlyb25pYywgZ2l2ZW4gdGhlIGJ1ZyBiZWxvdyFcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9pc3N1ZXMvMTYxXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0IHRvIHVuZGVmaW5lZCBzbyB0aGUgdmFsdWUgcGFzc2VkIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsYmFjay9wcm9taXNlIGlzIHRoZSBzYW1lIGFzIHdoYXQgb25lIHdvdWxkIGdldCBvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGBnZXRJdGVtKClgIGxhdGVyLiBUaGlzIGxlYWRzIHRvIHNvbWUgd2VpcmRuZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAoc2V0SXRlbSgnZm9vJywgdW5kZWZpbmVkKSB3aWxsIHJldHVybiBgbnVsbGApLCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IG15IGZhdWx0IGxvY2FsU3RvcmFnZSBpcyBvdXIgYmFzZWxpbmUgYW5kIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgd2VpcmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB0cmFuc2FjdGlvbi5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlcS5lcnJvciA/IHJlcS5lcnJvciA6IHJlcS50cmFuc2FjdGlvbi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJdGVtKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgR3J1bnQgdGFzayB0byBtYWtlIHRoaXMgc2FmZSBmb3IgSUUgYW5kIHNvbWVcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgQW5kcm9pZCAoaW5jbHVkaW5nIHRob3NlIHVzZWQgYnkgQ29yZG92YSkuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGx5IElFIHdvbid0IGxpa2UgYC5kZWxldGUoKWAgYW5kIHdpbGwgaW5zaXN0IG9uXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIGBbJ2RlbGV0ZSddKClgLCBidXQgd2UgaGF2ZSBhIGJ1aWxkIHN0ZXAgdGhhdFxuICAgICAgICAgICAgICAgICAgICAvLyBmaXhlcyB0aGlzIGZvciB1cyBub3cuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZVtcImRlbGV0ZVwiXShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdCB3aWxsIGJlIGFsc28gYmUgYWJvcnRlZCBpZiB3ZSd2ZSBleGNlZWRlZCBvdXIgc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAvLyBzcGFjZS5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXEuZXJyb3IgPyByZXEuZXJyb3IgOiByZXEudHJhbnNhY3Rpb24uZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gY2xlYXIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfV1JJVEUsIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gcmVxLmVycm9yID8gcmVxLmVycm9yIDogcmVxLnRyYW5zYWN0aW9uLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aChjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUuY291bnQoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXkobiwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5LZXlDdXJzb3IoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZW4ndCBlbm91Z2gga2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0aGUgZmlyc3Qga2V5LCByZXR1cm4gaXQgaWYgdGhhdCdzIHdoYXQgdGhleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhbnRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXNrIHRoZSBjdXJzb3IgdG8gc2tpcCBhaGVhZCBuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY29yZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmFkdmFuY2Uobik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgaGVyZSwgd2UndmUgZ290IHRoZSBudGgga2V5LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5vcGVuS2V5Q3Vyc29yKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSByZXEucmVzdWx0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3Vyc29yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JbXCJjb250aW51ZVwiXSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZShvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHZhciBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNDdXJyZW50RGIgPSBvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSAmJiBzZWxmLl9kYkluZm8uZGI7XG5cbiAgICAgICAgdmFyIGRiUHJvbWlzZSA9IGlzQ3VycmVudERiID8gUHJvbWlzZSQxLnJlc29sdmUoc2VsZi5fZGJJbmZvLmRiKSA6IF9nZXRPcmlnaW5hbENvbm5lY3Rpb24ob3B0aW9ucykudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3JhZ2VzW2ldLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgcHJvbWlzZSA9IGRiUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BEQlByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IGlkYi5kZWxldGVEYXRhYmFzZShvcHRpb25zLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2luZyBhbGwgb3BlbiBjb25uZWN0aW9ucyBpbiBvbnZlcnNpb25jaGFuZ2UgaGFuZGxlciBzaG91bGQgcHJldmVudCB0aGlzIHNpdHVhdGlvbiwgYnV0IGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkbyBnZXQgaGVyZSwgaXQganVzdCBtZWFucyB0aGUgcmVxdWVzdCByZW1haW5zIHBlbmRpbmcgLSBldmVudHVhbGx5IGl0IHdpbGwgc3VjY2VlZCBvciBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdkcm9wSW5zdGFuY2UgYmxvY2tlZCBmb3IgZGF0YWJhc2UgXCInICsgb3B0aW9ucy5uYW1lICsgJ1wiIHVudGlsIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wREJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UuX2RiSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9yZWplY3RSZWFkaW5lc3Mob3B0aW9ucywgZXJyKSB8fCBQcm9taXNlJDEucmVzb2x2ZSgpKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlID0gZGJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG9wdGlvbnMuc3RvcmVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSBkYi52ZXJzaW9uICsgMTtcblxuICAgICAgICAgICAgICAgIF9kZWZlclJlYWRpbmVzcyhvcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW29wdGlvbnMubmFtZV07XG4gICAgICAgICAgICAgICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkcm9wT2JqZWN0UHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gaWRiLm9wZW4ob3B0aW9ucy5uYW1lLCBuZXdWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5kZWxldGVPYmplY3RTdG9yZShvcHRpb25zLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJvcE9iamVjdFByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9yYWdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mb3JhZ2UyID0gZm9yYWdlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mb3JhZ2UyLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKF9mb3JhZ2UyLl9kYkluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIChfcmVqZWN0UmVhZGluZXNzKG9wdGlvbnMsIGVycikgfHwgUHJvbWlzZSQxLnJlc29sdmUoKSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGFzeW5jU3RvcmFnZSA9IHtcbiAgICBfZHJpdmVyOiAnYXN5bmNTdG9yYWdlJyxcbiAgICBfaW5pdFN0b3JhZ2U6IF9pbml0U3RvcmFnZSxcbiAgICBfc3VwcG9ydDogaXNJbmRleGVkREJWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSxcbiAgICBzZXRJdGVtOiBzZXRJdGVtLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0sXG4gICAgY2xlYXI6IGNsZWFyLFxuICAgIGxlbmd0aDogbGVuZ3RoLFxuICAgIGtleToga2V5LFxuICAgIGtleXM6IGtleXMsXG4gICAgZHJvcEluc3RhbmNlOiBkcm9wSW5zdGFuY2Vcbn07XG5cbmZ1bmN0aW9uIGlzV2ViU1FMVmFsaWQoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvcGVuRGF0YWJhc2UgPT09ICdmdW5jdGlvbic7XG59XG5cbi8vIFNhZGx5LCB0aGUgYmVzdCB3YXkgdG8gc2F2ZSBiaW5hcnkgZGF0YSBpbiBXZWJTUUwvbG9jYWxTdG9yYWdlIGlzIHNlcmlhbGl6aW5nXG4vLyBpdCB0byBCYXNlNjQsIHNvIHRoaXMgaXMgaG93IHdlIHN0b3JlIGl0IHRvIHByZXZlbnQgdmVyeSBzdHJhbmdlIGVycm9ycyB3aXRoIGxlc3Ncbi8vIHZlcmJvc2Ugd2F5cyBvZiBiaW5hcnkgPC0+IHN0cmluZyBkYXRhIHN0b3JhZ2UuXG52YXIgQkFTRV9DSEFSUyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxudmFyIEJMT0JfVFlQRV9QUkVGSVggPSAnfn5sb2NhbF9mb3JhZ2VfdHlwZX4nO1xudmFyIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVggPSAvXn5+bG9jYWxfZm9yYWdlX3R5cGV+KFtefl0rKX4vO1xuXG52YXIgU0VSSUFMSVpFRF9NQVJLRVIgPSAnX19sZnNjX186JztcbnZhciBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUi5sZW5ndGg7XG5cbi8vIE9NRyB0aGUgc2VyaWFsaXphdGlvbnMhXG52YXIgVFlQRV9BUlJBWUJVRkZFUiA9ICdhcmJmJztcbnZhciBUWVBFX0JMT0IgPSAnYmxvYic7XG52YXIgVFlQRV9JTlQ4QVJSQVkgPSAnc2kwOCc7XG52YXIgVFlQRV9VSU5UOEFSUkFZID0gJ3VpMDgnO1xudmFyIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVkgPSAndWljOCc7XG52YXIgVFlQRV9JTlQxNkFSUkFZID0gJ3NpMTYnO1xudmFyIFRZUEVfSU5UMzJBUlJBWSA9ICdzaTMyJztcbnZhciBUWVBFX1VJTlQxNkFSUkFZID0gJ3VyMTYnO1xudmFyIFRZUEVfVUlOVDMyQVJSQVkgPSAndWkzMic7XG52YXIgVFlQRV9GTE9BVDMyQVJSQVkgPSAnZmwzMic7XG52YXIgVFlQRV9GTE9BVDY0QVJSQVkgPSAnZmw2NCc7XG52YXIgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEggPSBTRVJJQUxJWkVEX01BUktFUl9MRU5HVEggKyBUWVBFX0FSUkFZQlVGRkVSLmxlbmd0aDtcblxudmFyIHRvU3RyaW5nJDEgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlcihzZXJpYWxpemVkU3RyaW5nKSB7XG4gICAgLy8gRmlsbCB0aGUgc3RyaW5nIGludG8gYSBBcnJheUJ1ZmZlci5cbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gc2VyaWFsaXplZFN0cmluZy5sZW5ndGggKiAwLjc1O1xuICAgIHZhciBsZW4gPSBzZXJpYWxpemVkU3RyaW5nLmxlbmd0aDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGVuY29kZWQxLCBlbmNvZGVkMiwgZW5jb2RlZDMsIGVuY29kZWQ0O1xuXG4gICAgaWYgKHNlcmlhbGl6ZWRTdHJpbmdbc2VyaWFsaXplZFN0cmluZy5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICBpZiAoc2VyaWFsaXplZFN0cmluZ1tzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpO1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICAgICAgZW5jb2RlZDEgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpXSk7XG4gICAgICAgIGVuY29kZWQyID0gQkFTRV9DSEFSUy5pbmRleE9mKHNlcmlhbGl6ZWRTdHJpbmdbaSArIDFdKTtcbiAgICAgICAgZW5jb2RlZDMgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpICsgMl0pO1xuICAgICAgICBlbmNvZGVkNCA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2kgKyAzXSk7XG5cbiAgICAgICAgLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuICAgICAgICBieXRlc1twKytdID0gZW5jb2RlZDEgPDwgMiB8IGVuY29kZWQyID4+IDQ7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDIgJiAxNSkgPDwgNCB8IGVuY29kZWQzID4+IDI7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDMgJiAzKSA8PCA2IHwgZW5jb2RlZDQgJiA2MztcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLy8gQ29udmVydHMgYSBidWZmZXIgdG8gYSBzdHJpbmcgdG8gc3RvcmUsIHNlcmlhbGl6ZWQsIGluIHRoZSBiYWNrZW5kXG4vLyBzdG9yYWdlIGxpYnJhcnkuXG5mdW5jdGlvbiBidWZmZXJUb1N0cmluZyhidWZmZXIpIHtcbiAgICAvLyBiYXNlNjQtYXJyYXlidWZmZXJcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIHZhciBiYXNlNjRTdHJpbmcgPSAnJztcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAvKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2ldID4+IDJdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaV0gJiAzKSA8PCA0IHwgYnl0ZXNbaSArIDFdID4+IDRdO1xuICAgICAgICBiYXNlNjRTdHJpbmcgKz0gQkFTRV9DSEFSU1soYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIgfCBieXRlc1tpICsgMl0gPj4gNl07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZXMubGVuZ3RoICUgMyA9PT0gMikge1xuICAgICAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcuc3Vic3RyaW5nKDAsIGJhc2U2NFN0cmluZy5sZW5ndGggLSAxKSArICc9JztcbiAgICB9IGVsc2UgaWYgKGJ5dGVzLmxlbmd0aCAlIDMgPT09IDEpIHtcbiAgICAgICAgYmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnN1YnN0cmluZygwLCBiYXNlNjRTdHJpbmcubGVuZ3RoIC0gMikgKyAnPT0nO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG59XG5cbi8vIFNlcmlhbGl6ZSBhIHZhbHVlLCBhZnRlcndhcmRzIGV4ZWN1dGluZyBhIGNhbGxiYWNrICh3aGljaCB1c3VhbGx5XG4vLyBpbnN0cnVjdHMgdGhlIGBzZXRJdGVtKClgIGNhbGxiYWNrL3Byb21pc2UgdG8gYmUgZXhlY3V0ZWQpLiBUaGlzIGlzIGhvd1xuLy8gd2Ugc3RvcmUgYmluYXJ5IGRhdGEgd2l0aCBsb2NhbFN0b3JhZ2UuXG5mdW5jdGlvbiBzZXJpYWxpemUodmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHZhbHVlVHlwZSA9ICcnO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZVR5cGUgPSB0b1N0cmluZyQxLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENhbm5vdCB1c2UgYHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJgIG9yIHN1Y2ggaGVyZSwgYXMgdGhlc2VcbiAgICAvLyBjaGVja3MgZmFpbCB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIHVzaW5nIGNhc3Blci5qcy4uLlxuICAgIC8vXG4gICAgLy8gVE9ETzogU2VlIHdoeSB0aG9zZSB0ZXN0cyBmYWlsIGFuZCB1c2UgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgaWYgKHZhbHVlICYmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScgfHwgdmFsdWUuYnVmZmVyICYmIHRvU3RyaW5nJDEuY2FsbCh2YWx1ZS5idWZmZXIpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSkge1xuICAgICAgICAvLyBDb252ZXJ0IGJpbmFyeSBhcnJheXMgdG8gYSBzdHJpbmcgYW5kIHByZWZpeCB0aGUgc3RyaW5nIHdpdGhcbiAgICAgICAgLy8gYSBzcGVjaWFsIG1hcmtlci5cbiAgICAgICAgdmFyIGJ1ZmZlcjtcbiAgICAgICAgdmFyIG1hcmtlciA9IFNFUklBTElaRURfTUFSS0VSO1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0FSUkFZQlVGRkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyID0gdmFsdWUuYnVmZmVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQ4QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDhBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBVaW50OEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UOENMQU1QRURBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQxNkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQxNkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMTZBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBJbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9JTlQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXIgKz0gVFlQRV9VSU5UMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUMzJBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09PSAnW29iamVjdCBGbG9hdDY0QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0ZMT0FUNjRBUlJBWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IHR5cGUgZm9yIEJpbmFyeUFycmF5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sobWFya2VyICsgYnVmZmVyVG9TdHJpbmcoYnVmZmVyKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAvLyBDb252ZXIgdGhlIGJsb2IgdG8gYSBiaW5hcnlBcnJheSBhbmQgdGhlbiB0byBhIHN0cmluZy5cbiAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgcHJlZml4IGZvciB0aGUgYmxvYiB0eXBlLlxuICAgICAgICAgICAgdmFyIHN0ciA9IEJMT0JfVFlQRV9QUkVGSVggKyB2YWx1ZS50eXBlICsgJ34nICsgYnVmZmVyVG9TdHJpbmcodGhpcy5yZXN1bHQpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhTRVJJQUxJWkVEX01BUktFUiArIFRZUEVfQkxPQiArIHN0cik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZG4ndCBjb252ZXJ0IHZhbHVlIGludG8gYSBKU09OIHN0cmluZzogXCIsIHZhbHVlKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIERlc2VyaWFsaXplIGRhdGEgd2UndmUgaW5zZXJ0ZWQgaW50byBhIHZhbHVlIGNvbHVtbi9maWVsZC4gV2UgcGxhY2Vcbi8vIHNwZWNpYWwgbWFya2VycyBpbnRvIG91ciBzdHJpbmdzIHRvIG1hcmsgdGhlbSBhcyBlbmNvZGVkOyB0aGlzIGlzbid0XG4vLyBhcyBuaWNlIGFzIGEgbWV0YSBmaWVsZCwgYnV0IGl0J3MgdGhlIG9ubHkgc2FuZSB0aGluZyB3ZSBjYW4gZG8gd2hpbHN0XG4vLyBrZWVwaW5nIGxvY2FsU3RvcmFnZSBzdXBwb3J0IGludGFjdC5cbi8vXG4vLyBPZnRlbnRpbWVzIHRoaXMgd2lsbCBqdXN0IGRlc2VyaWFsaXplIEpTT04gY29udGVudCwgYnV0IGlmIHdlIGhhdmUgYVxuLy8gc3BlY2lhbCBtYXJrZXIgKFNFUklBTElaRURfTUFSS0VSLCBkZWZpbmVkIGFib3ZlKSwgd2Ugd2lsbCBleHRyYWN0XG4vLyBzb21lIGtpbmQgb2YgYXJyYXlidWZmZXIvYmluYXJ5IGRhdGEvdHlwZWQgYXJyYXkgb3V0IG9mIHRoZSBzdHJpbmcuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgbWFya2VkIHRoaXMgc3RyaW5nIGFzIGJlaW5nIHNwZWNpYWxseSBzZXJpYWxpemVkIChpLmUuXG4gICAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gc2VyaWFsaXplZCBKU09OKSwgd2UgY2FuIGp1c3QgcmV0dXJuIGl0IGFuZCBiZVxuICAgIC8vIGRvbmUgd2l0aCBpdC5cbiAgICBpZiAodmFsdWUuc3Vic3RyaW5nKDAsIFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCkgIT09IFNFUklBTElaRURfTUFSS0VSKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgZGVhbHMgd2l0aCBkZXNlcmlhbGl6aW5nIHNvbWUga2luZCBvZiBCbG9iIG9yXG4gICAgLy8gVHlwZWRBcnJheS4gRmlyc3Qgd2Ugc2VwYXJhdGUgb3V0IHRoZSB0eXBlIG9mIGRhdGEgd2UncmUgZGVhbGluZ1xuICAgIC8vIHdpdGggZnJvbSB0aGUgZGF0YSBpdHNlbGYuXG4gICAgdmFyIHNlcmlhbGl6ZWRTdHJpbmcgPSB2YWx1ZS5zdWJzdHJpbmcoVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuICAgIHZhciB0eXBlID0gdmFsdWUuc3Vic3RyaW5nKFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCwgVFlQRV9TRVJJQUxJWkVEX01BUktFUl9MRU5HVEgpO1xuXG4gICAgdmFyIGJsb2JUeXBlO1xuICAgIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGJsb2IgdHlwZSBzZXJpYWxpemF0aW9uIHN0cmF0ZWd5LlxuICAgIC8vIERCcyBjcmVhdGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgbG9jYWxGb3JhZ2Ugd2lsbCBzaW1wbHkgbm90IGhhdmUgdGhlIGJsb2IgdHlwZS5cbiAgICBpZiAodHlwZSA9PT0gVFlQRV9CTE9CICYmIEJMT0JfVFlQRV9QUkVGSVhfUkVHRVgudGVzdChzZXJpYWxpemVkU3RyaW5nKSkge1xuICAgICAgICB2YXIgbWF0Y2hlciA9IHNlcmlhbGl6ZWRTdHJpbmcubWF0Y2goQkxPQl9UWVBFX1BSRUZJWF9SRUdFWCk7XG4gICAgICAgIGJsb2JUeXBlID0gbWF0Y2hlclsxXTtcbiAgICAgICAgc2VyaWFsaXplZFN0cmluZyA9IHNlcmlhbGl6ZWRTdHJpbmcuc3Vic3RyaW5nKG1hdGNoZXJbMF0ubGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyKHNlcmlhbGl6ZWRTdHJpbmcpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSByaWdodCB0eXBlIGJhc2VkIG9uIHRoZSBjb2RlL3R5cGUgc2V0IGR1cmluZ1xuICAgIC8vIHNlcmlhbGl6YXRpb24uXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVFlQRV9BUlJBWUJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIGNhc2UgVFlQRV9CTE9COlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogYmxvYlR5cGUgfSk7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQ4QVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDhDTEFNUEVEQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9JTlQxNkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQxNkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UMTZBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX1VJTlQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfRkxPQVQzMkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0ZMT0FUNjRBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biB0eXBlOiAnICsgdHlwZSk7XG4gICAgfVxufVxuXG52YXIgbG9jYWxmb3JhZ2VTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgIGRlc2VyaWFsaXplOiBkZXNlcmlhbGl6ZSxcbiAgICBzdHJpbmdUb0J1ZmZlcjogc3RyaW5nVG9CdWZmZXIsXG4gICAgYnVmZmVyVG9TdHJpbmc6IGJ1ZmZlclRvU3RyaW5nXG59O1xuXG4vKlxuICogSW5jbHVkZXMgY29kZSBmcm9tOlxuICpcbiAqIGJhc2U2NC1hcnJheWJ1ZmZlclxuICogaHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlclxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiBOaWtsYXMgdm9uIEhlcnR6ZW5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYlRhYmxlKHQsIGRiSW5mbywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICB0LmV4ZWN1dGVTcWwoJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyAnICsgJyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBrZXkgdW5pcXVlLCB2YWx1ZSknLCBbXSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xufVxuXG4vLyBPcGVuIHRoZSBXZWJTUUwgZGF0YWJhc2UgKGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBvbmUgaWYgb25lIGRpZG4ndFxuLy8gcHJldmlvdXNseSBleGlzdCksIHVzaW5nIGFueSBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDEob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge1xuICAgICAgICBkYjogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IHR5cGVvZiBvcHRpb25zW2ldICE9PSAnc3RyaW5nJyA/IG9wdGlvbnNbaV0udG9TdHJpbmcoKSA6IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGJJbmZvUHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBPcGVuIHRoZSBkYXRhYmFzZTsgdGhlIG9wZW5EYXRhYmFzZSBBUEkgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIC8vIGNyZWF0ZSBpdCBmb3IgdXMgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRiSW5mby5kYiA9IG9wZW5EYXRhYmFzZShkYkluZm8ubmFtZSwgU3RyaW5nKGRiSW5mby52ZXJzaW9uKSwgZGJJbmZvLmRlc2NyaXB0aW9uLCBkYkluZm8uc2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgb3VyIGtleS92YWx1ZSB0YWJsZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNyZWF0ZURiVGFibGUodCwgZGJJbmZvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuICAgIHJldHVybiBkYkluZm9Qcm9taXNlO1xufVxuXG5mdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgc3FsU3RhdGVtZW50LCBhcmdzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IGVycm9yLlNZTlRBWF9FUlIpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA9ID9cIiwgW2RiSW5mby5zdG9yZU5hbWVdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy5yb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGFibGUgaXMgbWlzc2luZyAod2FzIGRlbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlLWNyZWF0ZSBpdCB0YWJsZSBhbmQgcmV0cnlcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGJUYWJsZSh0LCBkYkluZm8sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbChzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayh0LCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrKHQsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0sIGVycm9yQ2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtJDEoa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUICogRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPyBMSU1JVCAxJywgW2tleV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLnJvd3MubGVuZ3RoID8gcmVzdWx0cy5yb3dzLml0ZW0oMCkudmFsdWUgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQgY29udGVudCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHVucGFjay5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRlJDEoaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcblxuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgKiBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSByZXN1bHRzLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSByb3dzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHJvd3MuaXRlbShpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBzZXJpYWxpemVkIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdW5wYWNrLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgaXRlbS5rZXksIGkgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdm9pZCgwKSBwcmV2ZW50cyBwcm9ibGVtcyB3aXRoIHJlZGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYHVuZGVmaW5lZGAuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIF9zZXRJdGVtKGtleSwgdmFsdWUsIGNhbGxiYWNrLCByZXRyaWVzTGVmdCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVGhlIGxvY2FsU3RvcmFnZSBBUEkgZG9lc24ndCByZXR1cm4gdW5kZWZpbmVkIHZhbHVlcyBpbiBhblxuICAgICAgICAgICAgLy8gXCJleHBlY3RlZFwiIHdheSwgc28gdW5kZWZpbmVkIGlzIGFsd2F5cyBjYXN0IHRvIG51bGwgaW4gYWxsXG4gICAgICAgICAgICAvLyBkcml2ZXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3B1bGwvNDJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgJyArICcoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KScsIFtrZXksIHZhbHVlXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChzcWxFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIGZhaWxlZDsgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgcXVvdGEgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3FsRXJyb3IuY29kZSA9PT0gc3FsRXJyb3IuUVVPVEFfRVJSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVqZWN0IHRoZSBjYWxsYmFjayBvdXRyaWdodCBmb3Igbm93LCBidXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHdvcnRoIHRyeWluZyB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIHVzZXIgYWNjZXB0cyB0aGUgcHJvbXB0IHRvIHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgc3RvcmFnZSBvbiBTYWZhcmksIHRoaXMgZXJyb3Igd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIGNhbGxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byByZS1ydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyaWVzTGVmdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfc2V0SXRlbS5hcHBseShzZWxmLCBba2V5LCBvcmlnaW5hbFZhbHVlLCBjYWxsYmFjaywgcmV0cmllc0xlZnQgLSAxXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBzZXRJdGVtJDEoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gX3NldEl0ZW0uYXBwbHkodGhpcywgW2tleSwgdmFsdWUsIGNhbGxiYWNrLCAxXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUga2V5ID0gPycsIFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBEZWxldGVzIGV2ZXJ5IGl0ZW0gaW4gdGhlIHRhYmxlLlxuLy8gVE9ETzogRmluZCBvdXQgaWYgdGhpcyByZXNldHMgdGhlIEFVVE9fSU5DUkVNRU5UIG51bWJlci5cbmZ1bmN0aW9uIGNsZWFyJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdERUxFVEUgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIERvZXMgYSBzaW1wbGUgYENPVU5UKGtleSlgIHRvIGdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpblxuLy8gbG9jYWxGb3JhZ2UuXG5mdW5jdGlvbiBsZW5ndGgkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAvLyBBaGhoLCBTUUwgbWFrZXMgdGhpcyBvbmUgc29vb29vbyBlYXN5LlxuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUIENPVU5UKGtleSkgYXMgYyBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMucm93cy5pdGVtKDApLmM7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXR1cm4gdGhlIGtleSBsb2NhdGVkIGF0IGtleSBpbmRleCBYOyBlc3NlbnRpYWxseSBnZXRzIHRoZSBrZXkgZnJvbSBhXG4vLyBgV0hFUkUgaWQgPSA/YC4gVGhpcyBpcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IEkgY2FuIHRoaW5rIHRvIGltcGxlbWVudFxuLy8gdGhpcyByYXJlbHktdXNlZCAoaW4gbXkgZXhwZXJpZW5jZSkgcGFydCBvZiB0aGUgQVBJLCBidXQgaXQgY2FuIHNlZW1cbi8vIGluY29uc2lzdGVudCwgYmVjYXVzZSB3ZSBkbyBgSU5TRVJUIE9SIFJFUExBQ0UgSU5UT2Agb24gYHNldEl0ZW0oKWAsIHNvXG4vLyB0aGUgSUQgb2YgZWFjaCBrZXkgd2lsbCBjaGFuZ2UgZXZlcnkgdGltZSBpdCdzIHVwZGF0ZWQuIFBlcmhhcHMgYSBzdG9yZWRcbi8vIHByb2NlZHVyZSBmb3IgdGhlIGBzZXRJdGVtKClgIFNRTCB3b3VsZCBzb2x2ZSB0aGlzIHByb2JsZW0/XG4vLyBUT0RPOiBEb24ndCBjaGFuZ2UgSUQgb24gYHNldEl0ZW0oKWAuXG5mdW5jdGlvbiBrZXkkMShuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCBrZXkgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSArICcgV0hFUkUgaWQgPSA/IExJTUlUIDEnLCBbbiArIDFdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVzdWx0cy5yb3dzLmxlbmd0aCA/IHJlc3VsdHMucm93cy5pdGVtKDApLmtleSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzJDEoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1Qga2V5IEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gocmVzdWx0cy5yb3dzLml0ZW0oaSkua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRhdGFiYXNlLyNkYXRhYmFzZXNcbi8vID4gVGhlcmUgaXMgbm8gd2F5IHRvIGVudW1lcmF0ZSBvciBkZWxldGUgdGhlIGRhdGFiYXNlcyBhdmFpbGFibGUgZm9yIGFuIG9yaWdpbiBmcm9tIHRoaXMgQVBJLlxuZnVuY3Rpb24gZ2V0QWxsU3RvcmVOYW1lcyhkYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyICcgKyBcIldIRVJFIHR5cGU9J3RhYmxlJyBBTkQgbmFtZSA8PiAnX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fJ1wiLCBbXSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RvcmVOYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVOYW1lcy5wdXNoKHJlc3VsdHMucm93cy5pdGVtKGkpLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBkYjogZGIsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlTmFtZXM6IHN0b3JlTmFtZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICByZWplY3Qoc3FsRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlJDEob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IGN1cnJlbnRDb25maWcubmFtZTtcbiAgICAgICAgb3B0aW9ucy5zdG9yZU5hbWUgPSBvcHRpb25zLnN0b3JlTmFtZSB8fCBjdXJyZW50Q29uZmlnLnN0b3JlTmFtZTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoJ0ludmFsaWQgYXJndW1lbnRzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHZhciBkYjtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZGIgcmVmZXJlbmNlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgZGIgPSBzZWxmLl9kYkluZm8uZGI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKG9wdGlvbnMubmFtZSwgJycsICcnLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIGRyb3AgYWxsIGRhdGFiYXNlIHRhYmxlc1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZ2V0QWxsU3RvcmVOYW1lcyhkYikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZGI6IGRiLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZU5hbWVzOiBbb3B0aW9ucy5zdG9yZU5hbWVdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25JbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyb3BUYWJsZShzdG9yZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmV4ZWN1dGVTcWwoJ0RST1AgVEFCTEUgSUYgRVhJU1RTICcgKyBzdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9wZXJhdGlvbkluZm8uc3RvcmVOYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGRyb3BUYWJsZShvcGVyYXRpb25JbmZvLnN0b3JlTmFtZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UkMS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIHdlYlNRTFN0b3JhZ2UgPSB7XG4gICAgX2RyaXZlcjogJ3dlYlNRTFN0b3JhZ2UnLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDEsXG4gICAgX3N1cHBvcnQ6IGlzV2ViU1FMVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDEsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQxLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMSxcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDEsXG4gICAgY2xlYXI6IGNsZWFyJDEsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMSxcbiAgICBrZXk6IGtleSQxLFxuICAgIGtleXM6IGtleXMkMSxcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQxXG59O1xuXG5mdW5jdGlvbiBpc0xvY2FsU3RvcmFnZVZhbGlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiAnc2V0SXRlbScgaW4gbG9jYWxTdG9yYWdlICYmXG4gICAgICAgIC8vIGluIElFOCB0eXBlb2YgbG9jYWxTdG9yYWdlLnNldEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICEhbG9jYWxTdG9yYWdlLnNldEl0ZW07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIGRlZmF1bHRDb25maWcpIHtcbiAgICB2YXIga2V5UHJlZml4ID0gb3B0aW9ucy5uYW1lICsgJy8nO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RvcmVOYW1lICE9PSBkZWZhdWx0Q29uZmlnLnN0b3JlTmFtZSkge1xuICAgICAgICBrZXlQcmVmaXggKz0gb3B0aW9ucy5zdG9yZU5hbWUgKyAnLyc7XG4gICAgfVxuICAgIHJldHVybiBrZXlQcmVmaXg7XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSB0aHJvd3Mgd2hlbiBzYXZpbmcgYW4gaXRlbVxuZnVuY3Rpb24gY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHtcbiAgICB2YXIgbG9jYWxTdG9yYWdlVGVzdEtleSA9ICdfbG9jYWxmb3JhZ2Vfc3VwcG9ydF90ZXN0JztcblxuICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU3RvcmFnZVRlc3RLZXksIHRydWUpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsb2NhbFN0b3JhZ2VUZXN0S2V5KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8vIENoZWNrIGlmIGxvY2FsU3RvcmFnZSBpcyB1c2FibGUgYW5kIGFsbG93cyB0byBzYXZlIGFuIGl0ZW1cbi8vIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBsb2NhbFN0b3JhZ2UgaXMgdXNhYmxlIGluIFNhZmFyaSBQcml2YXRlIEJyb3dzaW5nXG4vLyBtb2RlLCBvciBpbiBhbnkgb3RoZXIgY2FzZSB3aGVyZSB0aGUgYXZhaWxhYmxlIHF1b3RhIGZvciBsb2NhbFN0b3JhZ2Vcbi8vIGlzIDAgYW5kIHRoZXJlIHdhc24ndCBhbnkgc2F2ZWQgaXRlbXMgeWV0LlxuZnVuY3Rpb24gX2lzTG9jYWxTdG9yYWdlVXNhYmxlKCkge1xuICAgIHJldHVybiAhY2hlY2tJZkxvY2FsU3RvcmFnZVRocm93cygpIHx8IGxvY2FsU3RvcmFnZS5sZW5ndGggPiAwO1xufVxuXG4vLyBDb25maWcgdGhlIGxvY2FsU3RvcmFnZSBiYWNrZW5kLCB1c2luZyBvcHRpb25zIHNldCBpbiB0aGUgY29uZmlnLlxuZnVuY3Rpb24gX2luaXRTdG9yYWdlJDIob3B0aW9ucykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZGJJbmZvID0ge307XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYkluZm9baV0gPSBvcHRpb25zW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGJJbmZvLmtleVByZWZpeCA9IF9nZXRLZXlQcmVmaXgob3B0aW9ucywgc2VsZi5fZGVmYXVsdENvbmZpZyk7XG5cbiAgICBpZiAoIV9pc0xvY2FsU3RvcmFnZVVzYWJsZSgpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCk7XG4gICAgfVxuXG4gICAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuICAgIGRiSW5mby5zZXJpYWxpemVyID0gbG9jYWxmb3JhZ2VTZXJpYWxpemVyO1xuXG4gICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG59XG5cbi8vIFJlbW92ZSBhbGwga2V5cyBmcm9tIHRoZSBkYXRhc3RvcmUsIGVmZmVjdGl2ZWx5IGRlc3Ryb3lpbmcgYWxsIGRhdGEgaW5cbi8vIHRoZSBhcHAncyBrZXkvdmFsdWUgc3RvcmUhXG5mdW5jdGlvbiBjbGVhciQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gc2VsZi5fZGJJbmZvLmtleVByZWZpeDtcblxuICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcblxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGtleVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZXRyaWV2ZSBhbiBpdGVtIGZyb20gdGhlIHN0b3JlLiBVbmxpa2UgdGhlIG9yaWdpbmFsIGFzeW5jX3N0b3JhZ2Vcbi8vIGxpYnJhcnkgaW4gR2FpYSwgd2UgZG9uJ3QgbW9kaWZ5IHJldHVybiB2YWx1ZXMgYXQgYWxsLiBJZiBhIGtleSdzIHZhbHVlXG4vLyBpcyBgdW5kZWZpbmVkYCwgd2UgcGFzcyB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGRiSW5mby5rZXlQcmVmaXggKyBrZXkpO1xuXG4gICAgICAgIC8vIElmIGEgcmVzdWx0IHdhcyBmb3VuZCwgcGFyc2UgaXQgZnJvbSB0aGUgc2VyaWFsaXplZFxuICAgICAgICAvLyBzdHJpbmcgaW50byBhIEpTIG9iamVjdC4gSWYgcmVzdWx0IGlzbid0IHRydXRoeSwgdGhlIGtleVxuICAgICAgICAvLyBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0IHRvIHRoZVxuICAgICAgICAvLyBjYWxsYmFjay5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBJdGVyYXRlIG92ZXIgYWxsIGl0ZW1zIGluIHRoZSBzdG9yZS5cbmZ1bmN0aW9uIGl0ZXJhdGUkMihpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGRiSW5mby5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlQcmVmaXhMZW5ndGggPSBrZXlQcmVmaXgubGVuZ3RoO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcblxuICAgICAgICAvLyBXZSB1c2UgYSBkZWRpY2F0ZWQgaXRlcmF0b3IgaW5zdGVhZCBvZiB0aGUgYGlgIHZhcmlhYmxlIGJlbG93XG4gICAgICAgIC8vIHNvIG90aGVyIGtleXMgd2UgZmV0Y2ggaW4gbG9jYWxTdG9yYWdlIGFyZW4ndCBjb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBgaXRlcmF0aW9uTnVtYmVyYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGBpdGVyYXRlKClgXG4gICAgICAgIC8vIGNhbGxiYWNrLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGdpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9wdWxsLzQzNSNkaXNjdXNzaW9uX3IzODA2MTUzMFxuICAgICAgICB2YXIgaXRlcmF0aW9uTnVtYmVyID0gMTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihrZXlQcmVmaXgpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXG4gICAgICAgICAgICAvLyBJZiBhIHJlc3VsdCB3YXMgZm91bmQsIHBhcnNlIGl0IGZyb20gdGhlIHNlcmlhbGl6ZWRcbiAgICAgICAgICAgIC8vIHN0cmluZyBpbnRvIGEgSlMgb2JqZWN0LiBJZiByZXN1bHQgaXNuJ3QgdHJ1dGh5LCB0aGVcbiAgICAgICAgICAgIC8vIGtleSBpcyBsaWtlbHkgdW5kZWZpbmVkIGFuZCB3ZSdsbCBwYXNzIGl0IHN0cmFpZ2h0XG4gICAgICAgICAgICAvLyB0byB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRiSW5mby5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwga2V5LnN1YnN0cmluZyhrZXlQcmVmaXhMZW5ndGgpLCBpdGVyYXRpb25OdW1iZXIrKyk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTYW1lIGFzIGxvY2FsU3RvcmFnZSdzIGtleSgpIG1ldGhvZCwgZXhjZXB0IHRha2VzIGEgY2FsbGJhY2suXG5mdW5jdGlvbiBrZXkkMihuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGxvY2FsU3RvcmFnZS5rZXkobik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXggZnJvbSB0aGUga2V5LCBpZiBhIGtleSBpcyBmb3VuZC5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZyhkYkluZm8ua2V5UHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5cyQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbG9jYWxTdG9yYWdlLmxlbmd0aDtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbUtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG4gICAgICAgICAgICBpZiAoaXRlbUtleS5pbmRleE9mKGRiSW5mby5rZXlQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGl0ZW1LZXkuc3Vic3RyaW5nKGRiSW5mby5rZXlQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFN1cHBseSB0aGUgbnVtYmVyIG9mIGtleXMgaW4gdGhlIGRhdGFzdG9yZSB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5mdW5jdGlvbiBsZW5ndGgkMihjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYua2V5cygpLnRoZW4oZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgc3RvcmUsIG5pY2UgYW5kIHNpbXBsZS5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0kMihrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZGJJbmZvLmtleVByZWZpeCArIGtleSk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBTZXQgYSBrZXkncyB2YWx1ZSBhbmQgcnVuIGFuIG9wdGlvbmFsIGNhbGxiYWNrIG9uY2UgdGhlIHZhbHVlIGlzIHNldC5cbi8vIFVubGlrZSBHYWlhJ3MgaW1wbGVtZW50YXRpb24sIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHZhbHVlLFxuLy8gaW4gY2FzZSB5b3Ugd2FudCB0byBvcGVyYXRlIG9uIHRoYXQgdmFsdWUgb25seSBhZnRlciB5b3UncmUgc3VyZSBpdFxuLy8gc2F2ZWQsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuXG5mdW5jdGlvbiBzZXRJdGVtJDIoa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDb252ZXJ0IHVuZGVmaW5lZCB2YWx1ZXMgdG8gbnVsbC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvcHVsbC80MlxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5zZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlLCBlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShkYkluZm8ua2V5UHJlZml4ICsga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UgY2FwYWNpdHkgZXhjZWVkZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYSBzcGVjaWZpYyBlcnJvci9ldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdRdW90YUV4Y2VlZGVkRXJyb3InIHx8IGUubmFtZSA9PT0gJ05TX0VSUk9SX0RPTV9RVU9UQV9SRUFDSEVEJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZSQyKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUob3B0aW9ucy5uYW1lICsgJy8nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShfZ2V0S2V5UHJlZml4KG9wdGlvbnMsIHNlbGYuX2RlZmF1bHRDb25maWcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2V5UHJlZml4KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbG9jYWxTdG9yYWdlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2Yoa2V5UHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIGxvY2FsU3RvcmFnZVdyYXBwZXIgPSB7XG4gICAgX2RyaXZlcjogJ2xvY2FsU3RvcmFnZVdyYXBwZXInLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlJDIsXG4gICAgX3N1cHBvcnQ6IGlzTG9jYWxTdG9yYWdlVmFsaWQoKSxcbiAgICBpdGVyYXRlOiBpdGVyYXRlJDIsXG4gICAgZ2V0SXRlbTogZ2V0SXRlbSQyLFxuICAgIHNldEl0ZW06IHNldEl0ZW0kMixcbiAgICByZW1vdmVJdGVtOiByZW1vdmVJdGVtJDIsXG4gICAgY2xlYXI6IGNsZWFyJDIsXG4gICAgbGVuZ3RoOiBsZW5ndGgkMixcbiAgICBrZXk6IGtleSQyLFxuICAgIGtleXM6IGtleXMkMixcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZSQyXG59O1xuXG52YXIgc2FtZVZhbHVlID0gZnVuY3Rpb24gc2FtZVZhbHVlKHgsIHkpIHtcbiAgICByZXR1cm4geCA9PT0geSB8fCB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT09ICdudW1iZXInICYmIGlzTmFOKHgpICYmIGlzTmFOKHkpO1xufTtcblxudmFyIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHNlYXJjaEVsZW1lbnQpIHtcbiAgICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBpZiAoc2FtZVZhbHVlKGFycmF5W2ldLCBzZWFyY2hFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLy8gRHJpdmVycyBhcmUgc3RvcmVkIGhlcmUgd2hlbiBgZGVmaW5lRHJpdmVyKClgIGlzIGNhbGxlZC5cbi8vIFRoZXkgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZiBsb2NhbEZvcmFnZS5cbnZhciBEZWZpbmVkRHJpdmVycyA9IHt9O1xuXG52YXIgRHJpdmVyU3VwcG9ydCA9IHt9O1xuXG52YXIgRGVmYXVsdERyaXZlcnMgPSB7XG4gICAgSU5ERVhFRERCOiBhc3luY1N0b3JhZ2UsXG4gICAgV0VCU1FMOiB3ZWJTUUxTdG9yYWdlLFxuICAgIExPQ0FMU1RPUkFHRTogbG9jYWxTdG9yYWdlV3JhcHBlclxufTtcblxudmFyIERlZmF1bHREcml2ZXJPcmRlciA9IFtEZWZhdWx0RHJpdmVycy5JTkRFWEVEREIuX2RyaXZlciwgRGVmYXVsdERyaXZlcnMuV0VCU1FMLl9kcml2ZXIsIERlZmF1bHREcml2ZXJzLkxPQ0FMU1RPUkFHRS5fZHJpdmVyXTtcblxudmFyIE9wdGlvbmFsRHJpdmVyTWV0aG9kcyA9IFsnZHJvcEluc3RhbmNlJ107XG5cbnZhciBMaWJyYXJ5TWV0aG9kcyA9IFsnY2xlYXInLCAnZ2V0SXRlbScsICdpdGVyYXRlJywgJ2tleScsICdrZXlzJywgJ2xlbmd0aCcsICdyZW1vdmVJdGVtJywgJ3NldEl0ZW0nXS5jb25jYXQoT3B0aW9uYWxEcml2ZXJNZXRob2RzKTtcblxudmFyIERlZmF1bHRDb25maWcgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGRyaXZlcjogRGVmYXVsdERyaXZlck9yZGVyLnNsaWNlKCksXG4gICAgbmFtZTogJ2xvY2FsZm9yYWdlJyxcbiAgICAvLyBEZWZhdWx0IERCIHNpemUgaXMgX0pVU1QgVU5ERVJfIDVNQiwgYXMgaXQncyB0aGUgaGlnaGVzdCBzaXplXG4gICAgLy8gd2UgY2FuIHVzZSB3aXRob3V0IGEgcHJvbXB0LlxuICAgIHNpemU6IDQ5ODA3MzYsXG4gICAgc3RvcmVOYW1lOiAna2V5dmFsdWVwYWlycycsXG4gICAgdmVyc2lvbjogMS4wXG59O1xuXG5mdW5jdGlvbiBjYWxsV2hlblJlYWR5KGxvY2FsRm9yYWdlSW5zdGFuY2UsIGxpYnJhcnlNZXRob2QpIHtcbiAgICBsb2NhbEZvcmFnZUluc3RhbmNlW2xpYnJhcnlNZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2FyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBsb2NhbEZvcmFnZUluc3RhbmNlLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxGb3JhZ2VJbnN0YW5jZVtsaWJyYXJ5TWV0aG9kXS5hcHBseShsb2NhbEZvcmFnZUluc3RhbmNlLCBfYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gYXJnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShhcmdbX2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF1bX2tleV0gPSBhcmdbX2tleV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXVtfa2V5XSA9IGFyZ1tfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcmd1bWVudHNbMF07XG59XG5cbnZhciBMb2NhbEZvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBMb2NhbEZvcmFnZShvcHRpb25zKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb2NhbEZvcmFnZSk7XG5cbiAgICAgICAgZm9yICh2YXIgZHJpdmVyVHlwZUtleSBpbiBEZWZhdWx0RHJpdmVycykge1xuICAgICAgICAgICAgaWYgKERlZmF1bHREcml2ZXJzLmhhc093blByb3BlcnR5KGRyaXZlclR5cGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlciA9IERlZmF1bHREcml2ZXJzW2RyaXZlclR5cGVLZXldO1xuICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyLl9kcml2ZXI7XG4gICAgICAgICAgICAgICAgdGhpc1tkcml2ZXJUeXBlS2V5XSA9IGRyaXZlck5hbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoIURlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IGRyaXZlcnMgY2FuIGJlIGRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBibG9ja2luZyBtYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEcml2ZXIoZHJpdmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29uZmlnID0gZXh0ZW5kKHt9LCBEZWZhdWx0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gZXh0ZW5kKHt9LCB0aGlzLl9kZWZhdWx0Q29uZmlnLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW5pdERyaXZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RiSW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCk7XG4gICAgICAgIHRoaXMuc2V0RHJpdmVyKHRoaXMuX2NvbmZpZy5kcml2ZXIpW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge30pO1xuICAgIH1cblxuICAgIC8vIFNldCBhbnkgY29uZmlnIHZhbHVlcyBmb3IgbG9jYWxGb3JhZ2U7IGNhbiBiZSBjYWxsZWQgYW55dGltZSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgQVBJIGNhbGwgKGUuZy4gYGdldEl0ZW1gLCBgc2V0SXRlbWApLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBvcHRpb25zIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWdcbiAgICAvLyB2YWx1ZXMuXG5cblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jb25maWcgPSBmdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICAgICAgICAvLyBJZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBpcyBhbiBvYmplY3QsIHdlIHVzZSBpdCB0byBzZXQgdmFsdWVzLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHJldHVybiBlaXRoZXIgYSBzcGVjaWZpZWQgY29uZmlnIHZhbHVlIG9yIGFsbFxuICAgICAgICAvLyBjb25maWcgdmFsdWVzLlxuICAgICAgICBpZiAoKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvcHRpb25zKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGZvcmFnZSBpcyByZWFkeSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQsIHdlIGNhbid0IHNldFxuICAgICAgICAgICAgLy8gYW55IG5ldyBjb25maWd1cmF0aW9uIHZhbHVlcy4gSW5zdGVhZCwgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkNhbid0IGNhbGwgY29uZmlnKCkgYWZ0ZXIgbG9jYWxmb3JhZ2UgXCIgKyAnaGFzIGJlZW4gdXNlZC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09ICdzdG9yZU5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBvcHRpb25zW2ldLnJlcGxhY2UoL1xcVy9nLCAnXycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpID09PSAndmVyc2lvbicgJiYgdHlwZW9mIG9wdGlvbnNbaV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0RhdGFiYXNlIHZlcnNpb24gbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25maWdbaV0gPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZnRlciBhbGwgY29uZmlnIG9wdGlvbnMgYXJlIHNldCBhbmRcbiAgICAgICAgICAgIC8vIHRoZSBkcml2ZXIgb3B0aW9uIGlzIHVzZWQsIHRyeSBzZXR0aW5nIGl0XG4gICAgICAgICAgICBpZiAoJ2RyaXZlcicgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmRyaXZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldERyaXZlcih0aGlzLl9jb25maWcuZHJpdmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnW29wdGlvbnNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBVc2VkIHRvIGRlZmluZSBhIGN1c3RvbSBkcml2ZXIsIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZlxuICAgIC8vIGxvY2FsRm9yYWdlLlxuXG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZGVmaW5lRHJpdmVyID0gZnVuY3Rpb24gZGVmaW5lRHJpdmVyKGRyaXZlck9iamVjdCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXJPYmplY3QuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxpYW5jZUVycm9yID0gbmV3IEVycm9yKCdDdXN0b20gZHJpdmVyIG5vdCBjb21wbGlhbnQ7IHNlZSAnICsgJ2h0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vbG9jYWxGb3JhZ2UvI2RlZmluZWRyaXZlcicpO1xuXG4gICAgICAgICAgICAgICAgLy8gQSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgZGVmaW5lZCBhbmQgbm90IG92ZXJsYXAgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBsaWJyYXJ5LWRlZmluZWQsIGRlZmF1bHQgZHJpdmVycy5cbiAgICAgICAgICAgICAgICBpZiAoIWRyaXZlck9iamVjdC5fZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjb21wbGlhbmNlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck1ldGhvZHMgPSBMaWJyYXJ5TWV0aG9kcy5jb25jYXQoJ19pbml0U3RvcmFnZScpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBkcml2ZXJNZXRob2RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJNZXRob2ROYW1lID0gZHJpdmVyTWV0aG9kc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGEgbWV0aG9kIGV2ZW4gd2hlbiBvcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZXF1aXJlZCA9ICFpbmNsdWRlcyhPcHRpb25hbERyaXZlck1ldGhvZHMsIGRyaXZlck1ldGhvZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzUmVxdWlyZWQgfHwgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdKSAmJiB0eXBlb2YgZHJpdmVyT2JqZWN0W2RyaXZlck1ldGhvZE5hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoY29tcGxpYW5jZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmVNaXNzaW5nTWV0aG9kcyA9IGZ1bmN0aW9uIGNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5ID0gZnVuY3Rpb24gbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5KG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdNZXRob2QgJyArIG1ldGhvZE5hbWUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY3VycmVudCBkcml2ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UkMS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuID0gT3B0aW9uYWxEcml2ZXJNZXRob2RzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxEcml2ZXJNZXRob2QgPSBPcHRpb25hbERyaXZlck1ldGhvZHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkcml2ZXJPYmplY3Rbb3B0aW9uYWxEcml2ZXJNZXRob2RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0W29wdGlvbmFsRHJpdmVyTWV0aG9kXSA9IG1ldGhvZE5vdEltcGxlbWVudGVkRmFjdG9yeShvcHRpb25hbERyaXZlck1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZmlndXJlTWlzc2luZ01ldGhvZHMoKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXREcml2ZXJTdXBwb3J0ID0gZnVuY3Rpb24gc2V0RHJpdmVyU3VwcG9ydChzdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdSZWRlZmluaW5nIExvY2FsRm9yYWdlIGRyaXZlcjogJyArIGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdID0gZHJpdmVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBEcml2ZXJTdXBwb3J0W2RyaXZlck5hbWVdID0gc3VwcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIGEgdGhlbiwgc28gdGhhdCB3ZSBjYW4gZGVmaW5lXG4gICAgICAgICAgICAgICAgICAgIC8vIGRyaXZlcnMgdGhhdCBoYXZlIHNpbXBsZSBfc3VwcG9ydCBtZXRob2RzXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGEgYmxvY2tpbmcgbWFubmVyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCdfc3VwcG9ydCcgaW4gZHJpdmVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXJPYmplY3QuX3N1cHBvcnQgJiYgdHlwZW9mIGRyaXZlck9iamVjdC5fc3VwcG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyT2JqZWN0Ll9zdXBwb3J0KCkudGhlbihzZXREcml2ZXJTdXBwb3J0LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RHJpdmVyU3VwcG9ydCghIWRyaXZlck9iamVjdC5fc3VwcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXREcml2ZXJTdXBwb3J0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmRyaXZlciA9IGZ1bmN0aW9uIGRyaXZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyaXZlciB8fCBudWxsO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0RHJpdmVyID0gZnVuY3Rpb24gZ2V0RHJpdmVyKGRyaXZlck5hbWUsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBnZXREcml2ZXJQcm9taXNlID0gRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0gPyBQcm9taXNlJDEucmVzb2x2ZShEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSkgOiBQcm9taXNlJDEucmVqZWN0KG5ldyBFcnJvcignRHJpdmVyIG5vdCBmb3VuZC4nKSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhnZXREcml2ZXJQcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBnZXREcml2ZXJQcm9taXNlO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZ2V0U2VyaWFsaXplciA9IGZ1bmN0aW9uIGdldFNlcmlhbGl6ZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlcmlhbGl6ZXJQcm9taXNlID0gUHJvbWlzZSQxLnJlc29sdmUobG9jYWxmb3JhZ2VTZXJpYWxpemVyKTtcbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhzZXJpYWxpemVyUHJvbWlzZSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplclByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uIHJlYWR5KGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHNlbGYuX2RyaXZlclNldC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9yZWFkeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdERyaXZlcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZHk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5zZXREcml2ZXIgPSBmdW5jdGlvbiBzZXREcml2ZXIoZHJpdmVycywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghaXNBcnJheShkcml2ZXJzKSkge1xuICAgICAgICAgICAgZHJpdmVycyA9IFtkcml2ZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ZWREcml2ZXJzID0gdGhpcy5fZ2V0U3VwcG9ydGVkRHJpdmVycyhkcml2ZXJzKTtcblxuICAgICAgICBmdW5jdGlvbiBzZXREcml2ZXJUb0NvbmZpZygpIHtcbiAgICAgICAgICAgIHNlbGYuX2NvbmZpZy5kcml2ZXIgPSBzZWxmLmRyaXZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kU2VsZldpdGhEcml2ZXIoZHJpdmVyKSB7XG4gICAgICAgICAgICBzZWxmLl9leHRlbmQoZHJpdmVyKTtcbiAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gc2VsZi5faW5pdFN0b3JhZ2Uoc2VsZi5fY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluaXREcml2ZXIoc3VwcG9ydGVkRHJpdmVycykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudERyaXZlckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyaXZlclByb21pc2VMb29wKCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudERyaXZlckluZGV4IDwgc3VwcG9ydGVkRHJpdmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1tjdXJyZW50RHJpdmVySW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERyaXZlckluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGV4dGVuZFNlbGZXaXRoRHJpdmVyKVtcImNhdGNoXCJdKGRyaXZlclByb21pc2VMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXJTZXQgPSBQcm9taXNlJDEucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RyaXZlclNldDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHJpdmVyUHJvbWlzZUxvb3AoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBhIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiBwcm9ncmVzc1xuICAgICAgICAvLyBzbyB3YWl0IGZvciBpdCB0byBmaW5pc2ggaW4gb3JkZXIgdG8gYXZvaWQgYSBwb3NzaWJsZVxuICAgICAgICAvLyByYWNlIGNvbmRpdGlvbiB0byBzZXQgX2RiSW5mb1xuICAgICAgICB2YXIgb2xkRHJpdmVyU2V0RG9uZSA9IHRoaXMuX2RyaXZlclNldCAhPT0gbnVsbCA/IHRoaXMuX2RyaXZlclNldFtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgICAgICB9KSA6IFByb21pc2UkMS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5fZHJpdmVyU2V0ID0gb2xkRHJpdmVyU2V0RG9uZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gc3VwcG9ydGVkRHJpdmVyc1swXTtcbiAgICAgICAgICAgIHNlbGYuX2RiSW5mbyA9IG51bGw7XG4gICAgICAgICAgICBzZWxmLl9yZWFkeSA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxmLmdldERyaXZlcihkcml2ZXJOYW1lKS50aGVuKGZ1bmN0aW9uIChkcml2ZXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICBzZXREcml2ZXJUb0NvbmZpZygpO1xuICAgICAgICAgICAgICAgIHNlbGYuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2luaXREcml2ZXIgPSBpbml0RHJpdmVyKHN1cHBvcnRlZERyaXZlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHN0b3JhZ2UgbWV0aG9kIGZvdW5kLicpO1xuICAgICAgICAgICAgc2VsZi5fZHJpdmVyU2V0ID0gUHJvbWlzZSQxLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyU2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHRoaXMuX2RyaXZlclNldCwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJpdmVyU2V0O1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuc3VwcG9ydHMgPSBmdW5jdGlvbiBzdXBwb3J0cyhkcml2ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiAhIURyaXZlclN1cHBvcnRbZHJpdmVyTmFtZV07XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZXh0ZW5kID0gZnVuY3Rpb24gX2V4dGVuZChsaWJyYXJ5TWV0aG9kc0FuZFByb3BlcnRpZXMpIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGxpYnJhcnlNZXRob2RzQW5kUHJvcGVydGllcyk7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fZ2V0U3VwcG9ydGVkRHJpdmVycyA9IGZ1bmN0aW9uIF9nZXRTdXBwb3J0ZWREcml2ZXJzKGRyaXZlcnMpIHtcbiAgICAgICAgdmFyIHN1cHBvcnRlZERyaXZlcnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRyaXZlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRzKGRyaXZlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkRHJpdmVycy5wdXNoKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWREcml2ZXJzO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSA9IGZ1bmN0aW9uIF93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKSB7XG4gICAgICAgIC8vIEFkZCBhIHN0dWIgZm9yIGVhY2ggZHJpdmVyIEFQSSBtZXRob2QgdGhhdCBkZWxheXMgdGhlIGNhbGwgdG8gdGhlXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ldGhvZCB1bnRpbCBsb2NhbEZvcmFnZSBpcyByZWFkeS4gVGhlc2Ugc3R1YnNcbiAgICAgICAgLy8gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZHJpdmVyIG1ldGhvZHMgYXMgc29vbiBhcyB0aGUgZHJpdmVyIGlzXG4gICAgICAgIC8vIGxvYWRlZCwgc28gdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgaW1wYWN0LlxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gTGlicmFyeU1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGxXaGVuUmVhZHkodGhpcywgTGlicmFyeU1ldGhvZHNbaV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5jcmVhdGVJbnN0YW5jZSA9IGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbEZvcmFnZShvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExvY2FsRm9yYWdlO1xufSgpO1xuXG4vLyBUaGUgYWN0dWFsIGxvY2FsRm9yYWdlIG9iamVjdCB0aGF0IHdlIGV4cG9zZSBhcyBhIG1vZHVsZSBvciB2aWEgYVxuLy8gZ2xvYmFsLiBJdCdzIGV4dGVuZGVkIGJ5IHB1bGxpbmcgaW4gb25lIG9mIG91ciBvdGhlciBsaWJyYXJpZXMuXG5cblxudmFyIGxvY2FsZm9yYWdlX2pzID0gbmV3IExvY2FsRm9yYWdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9jYWxmb3JhZ2VfanM7XG5cbn0se1wiM1wiOjN9XX0se30sWzRdKSg0KVxufSk7XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBNSVRcbiAqIEBjb3B5cmlnaHQgMjAyMCBFeWFzIFJhbmpvdXMgPGV5YXMucmFuam91c0BnbWFpbC5jb20+XG4gKlxuICogQGNsYXNzXG4gKi9cbmNsYXNzIFF1ZXVlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBxdWV1ZS5cbiAgICogQHBhcmFtIHthcnJheX0gW2VsZW1lbnRzXVxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudHMpIHtcbiAgICB0aGlzLl9lbGVtZW50cyA9IEFycmF5LmlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbXTtcbiAgICB0aGlzLl9vZmZzZXQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZWxlbWVudCB0byB0aGUgYmFjayBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfG9iamVjdH0gZWxlbWVudFxuICAgKi9cbiAgZW5xdWV1ZShlbGVtZW50KSB7XG4gICAgdGhpcy5fZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ3xvYmplY3R9IGVsZW1lbnRcbiAgICovXG4gIHB1c2goZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVucXVldWUoZWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZXMgdGhlIGZyb250IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIGRlcXVldWUoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSgpID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5mcm9udCgpO1xuICAgIHRoaXMuX29mZnNldCArPSAxO1xuXG4gICAgaWYgKHRoaXMuX29mZnNldCAqIDIgPCB0aGlzLl9lbGVtZW50cy5sZW5ndGgpIHJldHVybiBmaXJzdDtcblxuICAgIC8vIG9ubHkgcmVtb3ZlIGRlcXVldWVkIGVsZW1lbnRzIHdoZW4gcmVhY2hpbmcgaGFsZiBzaXplXG4gICAgLy8gdG8gZGVjcmVhc2UgbGF0ZW5jeSBvZiBzaGlmdGluZyBlbGVtZW50cy5cbiAgICB0aGlzLl9lbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRzLnNsaWNlKHRoaXMuX29mZnNldCk7XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgICByZXR1cm4gZmlyc3Q7XG4gIH1cblxuICAvKipcbiAgICogRGVxdWV1ZXMgdGhlIGZyb250IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIHBvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXF1ZXVlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZnJvbnQgZWxlbWVudCBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcnxzdHJpbmd8b2JqZWN0fVxuICAgKi9cbiAgZnJvbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSgpID4gMCA/IHRoaXMuX2VsZW1lbnRzW3RoaXMuX29mZnNldF0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJhY2sgZWxlbWVudCBvZiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcnxzdHJpbmd8b2JqZWN0fVxuICAgKi9cbiAgYmFjaygpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplKCkgPiAwID8gdGhpcy5fZWxlbWVudHNbdGhpcy5fZWxlbWVudHMubGVuZ3RoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzLmxlbmd0aCAtIHRoaXMuX29mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplKCkgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZSBxdWV1ZSBhcyBhbiBhcnJheS5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAqL1xuICB0b0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50cy5zbGljZSh0aGlzLl9vZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgcXVldWUuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX2VsZW1lbnRzID0gW107XG4gICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBxdWV1ZS5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgUXVldWUodGhpcy5fZWxlbWVudHMuc2xpY2UodGhpcy5fb2Zmc2V0KSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHF1ZXVlIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gICAqIEBwdWJsaWNcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge2FycmF5fSBlbGVtZW50c1xuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tQXJyYXkoZWxlbWVudHMpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXVlKGVsZW1lbnRzKTtcbiAgfVxufVxuXG5leHBvcnRzLlF1ZXVlID0gUXVldWU7XG4iLCAiY29uc3QgeyBRdWV1ZSB9ID0gcmVxdWlyZSgnLi9zcmMvcXVldWUnKTtcblxuZXhwb3J0cy5RdWV1ZSA9IFF1ZXVlO1xuIiwgImltcG9ydCB7IERhdGFjb3JlQXBpIH0gZnJvbSBcImFwaS9hcGlcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgQXBwLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHJlbmRlciB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IERFRkFVTFRfU0VUVElOR1MsIFNldHRpbmdzIH0gZnJvbSBcInNldHRpbmdzXCI7XG5pbXBvcnQgeyBEYXRhY29yZVF1ZXJ5VmlldyBhcyBEYXRhY29yZUpTVmlldywgVklFV19UWVBFX0RBVEFDT1JFSlMgfSBmcm9tIFwidWkvdmlldy1wYWdlXCI7XG5pbXBvcnQgeyBJbmRleFN0YXR1c0JhciB9IGZyb20gXCJ1aS9pbmRleC1zdGF0dXNcIjtcblxuLyoqIFJlYWN0aXZlIGRhdGEgZW5naW5lIGZvciB5b3VyIE9ic2lkaWFuLm1kIHZhdWx0LiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWNvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICAgIC8qKiBQbHVnaW4td2lkZSBkZWZhdWx0IHNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBzZXR0aW5nczogU2V0dGluZ3M7XG5cbiAgICAvKiogQ2VudHJhbCBpbnRlcm5hbCBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgY29yZTogRGF0YWNvcmU7XG4gICAgLyoqIEV4dGVybmFsbHkgdmlzaWJsZSBBUEkgZm9yIHF1ZXJ5aW5nLiAqL1xuICAgIHB1YmxpYyBhcGk6IERhdGFjb3JlQXBpO1xuXG4gICAgYXN5bmMgb25sb2FkKCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgKGF3YWl0IHRoaXMubG9hZERhdGEoKSkgPz8ge30pO1xuICAgICAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IEdlbmVyYWxTZXR0aW5nc1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNvcmUgQVBJIGZvciB1c2FnZSBpbiBhbGwgdmlld3MgYW5kIGRvd25zdHJlYW0gYXBwcy5cbiAgICAgICAgdGhpcy5hZGRDaGlsZCgodGhpcy5jb3JlID0gbmV3IERhdGFjb3JlKHRoaXMuYXBwLCB0aGlzLm1hbmlmZXN0LnZlcnNpb24sIHRoaXMuc2V0dGluZ3MpKSk7XG4gICAgICAgIHRoaXMuYXBpID0gbmV3IERhdGFjb3JlQXBpKHRoaXMuY29yZSk7XG5cbiAgICAgICAgLy8gQWRkIGEgdmlzdWFsIGFpZCBmb3Igd2hhdCBkYXRhY29yZSBpcyBjdXJyZW50bHkgZG9pbmcuXG4gICAgICAgIHRoaXMubW91bnRJbmRleFN0YXRlKHRoaXMuYWRkU3RhdHVzQmFySXRlbSgpLCB0aGlzLmNvcmUpO1xuXG4gICAgICAgIC8vIFByaW1hcnkgdmlzdWFsIGVsZW1lbnRzIChEYXRhY29yZUpTIGFuZCBEYXRhY29yZSBibG9ja3MpLlxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXG4gICAgICAgICAgICBcImRhdGFjb3JlanNcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZUpzKHNvdXJjZSwgZWwsIGN0eCwgY3R4LnNvdXJjZVBhdGgpLFxuICAgICAgICAgICAgLTEwMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwiZGF0YWNvcmVqc3hcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZUpzeChzb3VyY2UsIGVsLCBjdHgsIGN0eC5zb3VyY2VQYXRoKSxcbiAgICAgICAgICAgIC0xMDBcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXG4gICAgICAgICAgICBcImRhdGFjb3JldHNcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZVRzKHNvdXJjZSwgZWwsIGN0eCwgY3R4LnNvdXJjZVBhdGgpLFxuICAgICAgICAgICAgLTEwMFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwiZGF0YWNvcmV0c3hcIixcbiAgICAgICAgICAgIGFzeW5jIChzb3VyY2U6IHN0cmluZywgZWwsIGN0eCkgPT4gdGhpcy5hcGkuZXhlY3V0ZVRzeChzb3VyY2UsIGVsLCBjdHgsIGN0eC5zb3VyY2VQYXRoKSxcbiAgICAgICAgICAgIC0xMDBcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBWaWV3czogRGF0YWNvcmVKUyB2aWV3LlxuICAgICAgICAvLyBAdHMtaWdub3JlIGJlIHF1aWV0XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaWV3KFZJRVdfVFlQRV9EQVRBQ09SRUpTLCAobGVhZikgPT4gbmV3IERhdGFjb3JlSlNWaWV3KGxlYWYsIHRoaXMuYXBpKSk7XG5cbiAgICAgICAgLy8gQWRkIGEgY29tbWFuZCBmb3IgY3JlYXRpbmcgYSBuZXcgdmlldyBwYWdlLlxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwiZGF0YWNvcmUtYWRkLXZpZXctcGFnZVwiLFxuICAgICAgICAgICAgbmFtZTogXCJDcmVhdGUgVmlldyBQYWdlXCIsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihcInRhYlwiKTtcbiAgICAgICAgICAgICAgICBuZXdMZWFmLnNldFZpZXdTdGF0ZSh7IHR5cGU6IFZJRVdfVFlQRV9EQVRBQ09SRUpTLCBhY3RpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLnNldEFjdGl2ZUxlYWYobmV3TGVhZiwgeyBmb2N1czogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIEpTIGhpZ2hsaWdodGluZyBmb3IgY29kZWJsb2Nrcy5cbiAgICAgICAgdGhpcy5yZWdpc3Rlcih0aGlzLnJlZ2lzdGVyQ29kZWJsb2NrSGlnaGxpZ2h0aW5nKCkpO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgYXMgc29vbiBhcyB0aGUgd29ya3NwYWNlIGlzIHJlYWR5LlxuICAgICAgICBpZiAoIXRoaXMuYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoYXN5bmMgKCkgPT4gdGhpcy5jb3JlLmluaXRpYWxpemUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvcmUuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSB0aGUgQVBJIGdsb2JhbGx5IGFjY2Vzc2libGUgZnJvbSBhbnkgY29udGV4dC5cbiAgICAgICAgd2luZG93LmRhdGFjb3JlID0gdGhpcy5hcGk7XG5cbiAgICAgICAgLy8gYm9uIGFwcGV0aXRcbiAgICAgICAgY29uc29sZS5sb2coYERhdGFjb3JlOiB2ZXJzaW9uICR7dGhpcy5tYW5pZmVzdC52ZXJzaW9ufSAocmVxdWlyZXMgb2JzaWRpYW4gJHt0aGlzLm1hbmlmZXN0Lm1pbkFwcFZlcnNpb259KWApO1xuICAgIH1cblxuICAgIG9udW5sb2FkKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgRGF0YWNvcmU6IHZlcnNpb24gJHt0aGlzLm1hbmlmZXN0LnZlcnNpb259IHVubG9hZGVkLmApO1xuICAgIH1cblxuICAgIC8qKiBSZWdpc3RlciBjb2RlYmxvY2sgaGlnaGxpZ2h0aW5nIGFuZCByZXR1cm4gYSBjbG9zdXJlIHdoaWNoIHVucmVnaXN0ZXJzLiAqL1xuICAgIHJlZ2lzdGVyQ29kZWJsb2NrSGlnaGxpZ2h0aW5nKCk6ICgpID0+IHZvaWQge1xuICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmVqc1wiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJqYXZhc2NyaXB0XCIpKTtcbiAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JlanN4XCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcImpzeFwiKSk7XG4gICAgICAgIHdpbmRvdy5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkYXRhY29yZXRzXCIsIChjb25maWcpID0+IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBcImphdmFzY3JpcHRcIikpO1xuICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmV0c3hcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwianN4XCIpKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgd2luZG93LkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcImRhdGFjb3JlanNcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwibnVsbFwiKSk7XG4gICAgICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmVqc3hcIiwgKGNvbmZpZykgPT4gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIFwibnVsbFwiKSk7XG4gICAgICAgICAgICB3aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZGF0YWNvcmV0c1wiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJudWxsXCIpKTtcbiAgICAgICAgICAgIHdpbmRvdy5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJkYXRhY29yZXRzeFwiLCAoY29uZmlnKSA9PiB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgXCJudWxsXCIpKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogVXBkYXRlIHRoZSBnaXZlbiBzZXR0aW5ncyB0byBuZXcgdmFsdWVzLiAqL1xuICAgIGFzeW5jIHVwZGF0ZVNldHRpbmdzKHNldHRpbmdzOiBQYXJ0aWFsPFNldHRpbmdzPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuc2V0dGluZ3MsIHNldHRpbmdzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogUmVuZGVyIGRhdGFjb3JlIGluZGV4aW5nIHN0YXR1cyB1c2luZyB0aGUgaW5kZXguICovXG4gICAgcHJpdmF0ZSBtb3VudEluZGV4U3RhdGUocm9vdDogSFRNTEVsZW1lbnQsIGNvcmU6IERhdGFjb3JlKTogdm9pZCB7XG4gICAgICAgIHJlbmRlcihjcmVhdGVFbGVtZW50KEluZGV4U3RhdHVzQmFyLCB7IGRhdGFjb3JlOiBjb3JlIH0pLCByb290KTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHJlbmRlcihudWxsLCByb290KSk7XG4gICAgfVxufVxuXG4vKiogRGF0YWNvcmUgU2V0dGluZ3MgVGFiLiAqL1xuY2xhc3MgR2VuZXJhbFNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHByaXZhdGUgcGx1Z2luOiBEYXRhY29yZVBsdWdpbikge1xuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIlZpZXdzXCIgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiUGFnaW5hdGlvblwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJJZiBlbmFibGVkLCBzcGxpdHMgdXAgdmlld3MgaW50byBwYWdlcyBvZiByZXN1bHRzIHdoaWNoIGNhbiBiZSB0cmF2ZXJzZWQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInZpYSBidXR0b25zIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgdmlldy4gVGhpcyBzdWJzdGFudGlhbGx5IGltcHJvdmVzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ0aGUgcGVyZm9ybWFuY2Ugb2YgbGFyZ2Ugdmlld3MsIGFuZCBjYW4gaGVscCB3aXRoIHZpc3VhbCBjbHV0dGVyLiBOb3RlIHRoYXQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInRoaXMgc2V0dGluZyBjYW4gYWxzbyBiZSBzZXQgb24gYSBwZXItdmlldyBiYXNpcy5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHRQYWdpbmdFbmFibGVkKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBkZWZhdWx0UGFnaW5nRW5hYmxlZDogdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJEZWZhdWx0IFBhZ2UgU2l6ZVwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgbnVtYmVyIG9mIGVudHJpZXMgdG8gc2hvdyBwZXIgcGFnZSwgYnkgZGVmYXVsdC4gVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIG9uIGEgcGVyLXZpZXcgYmFzaXMuXCIpXG4gICAgICAgICAgICAuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgT1BUSU9OUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgICAgICAgICAgXCIyNVwiOiBcIjI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiNTBcIjogXCI1MFwiLFxuICAgICAgICAgICAgICAgICAgICBcIjEwMFwiOiBcIjEwMFwiLFxuICAgICAgICAgICAgICAgICAgICBcIjIwMFwiOiBcIjIwMFwiLFxuICAgICAgICAgICAgICAgICAgICBcIjUwMFwiOiBcIjUwMFwiLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IFwiXCIgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0UGFnZVNpemU7XG4gICAgICAgICAgICAgICAgaWYgKCEoY3VycmVudCBpbiBPUFRJT05TKSkgT1BUSU9OU1tjdXJyZW50XSA9IGN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICBkcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAuYWRkT3B0aW9ucyhPUFRJT05TKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoY3VycmVudClcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IGRlZmF1bHRQYWdlU2l6ZTogcGFyc2VkIHwgMCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJTY3JvbGwgb24gUGFnZSBDaGFuZ2VcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiSWYgZW5hYmxlZCwgdGFibGUgdGhhdCBhcmUgcGFnZWQgd2lsbCBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgdGFibGUgd2hlbiB0aGUgcGFnZSBjaGFuZ2VzLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIG9uIGEgcGVyLXZpZXcgYmFzaXMuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zY3JvbGxPblBhZ2VDaGFuZ2UpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IHNjcm9sbE9uUGFnZUNoYW5nZTogdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRW5hYmxlIEphdmFzY3JpcHRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBKYXZhc2NyaXB0IGNvZGVibG9ja3Mgd2lsbCBiZSBldmFsdWF0ZWQuXCIpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSnMpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IGVuYWJsZUpzOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiRm9ybWF0dGluZ1wiIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkVtcHR5IFZhbHVlc1wiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJXaGF0IHRvIHNob3cgZm9yIHVuc2V0L2VtcHR5IHByb3BlcnRpZXMuXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucmVuZGVyTnVsbEFzKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyByZW5kZXJOdWxsQXM6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBEYXRlIEZvcm1hdFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJUaGUgZGVmYXVsdCBmb3JtYXQgdGhhdCBkYXRlcyBhcmUgcmVuZGVyZWQgaW4uIFVzZXMgbHV4b24gZGF0ZSBmb3JtYXR0aW5nIChodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L2x1eG9uL2Jsb2IvbWFzdGVyL2RvY3MvZm9ybWF0dGluZy5tZCNmb3JtYXR0aW5nLXdpdGgtdG9rZW5zLXN0cmluZ3MtZm9yLWN0aHVsaHUpLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVmYXVsdERhdGVGb3JtYXQpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBkYXRlIGZvcm1hdCBpcyB2YWxpZFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUuZnJvbU1pbGxpcyhEYXRlLm5vdygpKS50b0Zvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgZGVmYXVsdERhdGVGb3JtYXQ6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBEYXRlLVRpbWUgZm9ybWF0XCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIlRoZSBkZWZhdWx0IGZvcm1hdCB0aGF0IGRhdGUtdGltZXMgYXJlIHJlbmRlcmVkIGluLiBVc2VzIGx1eG9uIGRhdGUgZm9ybWF0dGluZyAoaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9sdXhvbi9ibG9iL21hc3Rlci9kb2NzL2Zvcm1hdHRpbmcubWQjZm9ybWF0dGluZy13aXRoLXRva2Vucy1zdHJpbmdzLWZvci1jdGh1bGh1KS5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHREYXRlVGltZUZvcm1hdCkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZS5mcm9tTWlsbGlzKERhdGUubm93KCkpLnRvRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBkZWZhdWx0RGF0ZVRpbWVGb3JtYXQ6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJQZXJmb3JtYW5jZSBUdW5pbmdcIiB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJJbmxpbmUgRmllbGRzXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIklmIGVuYWJsZWQsIGlubGluZSBmaWVsZHMgd2lsbCBiZSBwYXJzZWQgaW4gYWxsIGRvY3VtZW50cy4gRmluZGluZyBpbmxpbmUgZmllbGRzIHJlcXVpcmVzIGEgZnVsbCB0ZXh0IHNjYW4gdGhyb3VnaCBlYWNoIGRvY3VtZW50LCBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwid2hpY2ggbm90aWNhYmx5IHNsb3dzIGRvd24gaW5kZXhpbmcgZm9yIGxhcmdlIHZhdWx0cy4gRGlzYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3aWxsIG1lYW4gbWV0YWRhdGEgd2lsbCBvbmx5IGNvbWUgZnJvbSB0YWdzLCBsaW5rcywgYW5kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJQcm9wZXJ0aWVzIC8gZnJvbnRtYXR0ZXJcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmluZGV4SW5saW5lRmllbGRzKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBpbmRleElubGluZUZpZWxkczogdmFsdWUgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogUmVxdWVzdCBhIGZ1bGwgaW5kZXggZHJvcCArIHJlaW5kZXggZm9yIGNvcnJlY3RuZXNzLlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiSW1wb3J0ZXIgVGhyZWFkc1wiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgbnVtYmVyIG9mIGltcG9ydGVyIHRocmVhZHMgdG8gdXNlIGZvciBwYXJzaW5nIG1ldGFkYXRhLlwiKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKFwiXCIgKyB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbXBvcnRlck51bVRocmVhZHMpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBpbXBvcnRlck51bVRocmVhZHM6IHBhcnNlZCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkltcG9ydGVyIFV0aWxpemF0aW9uXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIkhvdyBtdWNoIENQVSB0aW1lIGVhY2ggaW1wb3J0ZXIgdGhyZWFkIHNob3VsZCB1c2UsIGFzIGEgZnJhY3Rpb24gKDAuMSAtIDEuMCkuXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1wb3J0ZXJVdGlsaXphdGlvbi50b0ZpeGVkKDIpKS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRlZCA9IE1hdGgubWF4KDAuMSwgTWF0aC5taW4oMS4wLCBwYXJzZWQpKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBpbXBvcnRlclV0aWxpemF0aW9uOiBsaW1pdGVkIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiTWF4aW11bSBSZWN1cnNpdmUgUmVuZGVyIERlcHRoXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIk1heGltdW0gZGVwdGggdGhhdCBvYmplY3RzIHdpbGwgYmUgcmVuZGVyZWQgdG8gKGkuZS4sIGhvdyBtYW55IGxldmVscyBvZiBzdWJwcm9wZXJ0aWVzXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIndpbGwgYmUgcmVuZGVyZWQgYnkgZGVmYXVsdCkuIFRoaXMgYXZvaWRzIGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8gc2VsZi1yZWZlcmVudGlhbCBvYmplY3RzXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImFuZCBlbnN1cmVzIHRoYXQgcmVuZGVyaW5nIG9iamVjdHMgaXMgYWNjZXB0YWJseSBwZXJmb3JtYW50LlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubWF4UmVjdXJzaXZlUmVuZGVyRGVwdGgudG9TdHJpbmcoKSkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyBtYXhSZWN1cnNpdmVSZW5kZXJEZXB0aDogcGFyc2VkIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlJlY3Vyc2l2ZSBzdWJ0YXNrIGNvbXBsZXRpb25cIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBvciBub3Qgc3VidGFza3Mgc2hvdWxkIGJlIGNvbXBsZXRlZCBhbG9uZyB3aXRoIHRoZWlyIHBhcmVudCBpbiBkYXRhY29yZSB0YXNrIHZpZXdzXCIpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0YikgPT4ge1xuICAgICAgICAgICAgICAgIHRiLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnJlY3Vyc2l2ZVRhc2tDb21wbGV0aW9uKS5vbkNoYW5nZShhc3luYyAodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnVwZGF0ZVNldHRpbmdzKHsgcmVjdXJzaXZlVGFza0NvbXBsZXRpb246IHZhbCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiVGFza3NcIiB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJUYXNrIENvbXBsZXRpb24gVGV4dFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJOYW1lIG9mIGlubGluZSBmaWVsZCBpbiB3aGljaCB0byBzdG9yZSB0YXNrIGNvbXBsZXRpb24gZGF0ZS90aW1lXCIpXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFza0NvbXBsZXRpb25UZXh0KS5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4udXBkYXRlU2V0dGluZ3MoeyB0YXNrQ29tcGxldGlvblRleHQ6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiVXNlIEVtb2ppIFNob3J0aGFuZCBmb3IgVGFzayBDb21wbGV0aW9uXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIklmIGVuYWJsZWQsIGF1dG9tYXRpYyBjb21wbGV0aW9uIHdpbGwgdXNlIGFuIGVtb2ppIHNob3J0aGFuZCBcdTI3MDUgWVlZWS1NTS1ERFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJpbnN0ZWFkIG9mIFtjb21wbGV0aW9uOjogZGF0ZV0uXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRiKSA9PiB7XG4gICAgICAgICAgICAgICAgdGIuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFza0NvbXBsZXRpb25Vc2VFbW9qaVNob3J0aGFuZCkub25DaGFuZ2UoYXN5bmMgKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi51cGRhdGVTZXR0aW5ncyh7IHRhc2tDb21wbGV0aW9uVXNlRW1vamlTaG9ydGhhbmQ6IHZhbCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgRGF0ZVRpbWUgZnJvbSBcIi4vZGF0ZXRpbWUuanNcIjtcbmltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IEludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQgSW5mbyBmcm9tIFwiLi9pbmZvLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi96b25lLmpzXCI7XG5pbXBvcnQgRml4ZWRPZmZzZXRab25lIGZyb20gXCIuL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuL3pvbmVzL0lBTkFab25lLmpzXCI7XG5pbXBvcnQgSW52YWxpZFpvbmUgZnJvbSBcIi4vem9uZXMvaW52YWxpZFpvbmUuanNcIjtcbmltcG9ydCBTeXN0ZW1ab25lIGZyb20gXCIuL3pvbmVzL3N5c3RlbVpvbmUuanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuXG5jb25zdCBWRVJTSU9OID0gXCIyLjUuMlwiO1xuXG5leHBvcnQge1xuICBWRVJTSU9OLFxuICBEYXRlVGltZSxcbiAgRHVyYXRpb24sXG4gIEludGVydmFsLFxuICBJbmZvLFxuICBab25lLFxuICBGaXhlZE9mZnNldFpvbmUsXG4gIElBTkFab25lLFxuICBJbnZhbGlkWm9uZSxcbiAgU3lzdGVtWm9uZSxcbiAgU2V0dGluZ3MsXG59O1xuIiwgIi8vIHRoZXNlIGFyZW4ndCByZWFsbHkgcHJpdmF0ZSwgYnV0IG5vciBhcmUgdGhleSByZWFsbHkgdXNlZnVsIHRvIGRvY3VtZW50XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTHV4b25FcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWREYXRlVGltZUVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIERhdGVUaW1lOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkSW50ZXJ2YWxFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBJbnRlcnZhbDogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZER1cmF0aW9uRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgRHVyYXRpb246ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkVW5pdEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHVuaXQpIHtcbiAgICBzdXBlcihgSW52YWxpZCB1bml0ICR7dW5pdH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgWm9uZUlzQWJzdHJhY3RFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlpvbmUgaXMgYW4gYWJzdHJhY3QgY2xhc3NcIik7XG4gIH1cbn1cbiIsICIvKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY29uc3QgbiA9IFwibnVtZXJpY1wiLFxuICBzID0gXCJzaG9ydFwiLFxuICBsID0gXCJsb25nXCI7XG5cbmV4cG9ydCBjb25zdCBEQVRFX1NIT1JUID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfTUVEID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVfTUVEX1dJVEhfV0VFS0RBWSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgd2Vla2RheTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFX0ZVTEwgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgREFURV9IVUdFID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfU0lNUExFID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV9XSVRIX1NFQ09ORFMgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV9XSVRIX0xPTkdfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBsLFxufTtcblxuZXhwb3J0IGNvbnN0IFRJTUVfMjRfU0lNUExFID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1dJVEhfU0VDT05EUyA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbn07XG5cbmV4cG9ydCBjb25zdCBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICB0aW1lWm9uZU5hbWU6IHMsXG59O1xuXG5leHBvcnQgY29uc3QgVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICB0aW1lWm9uZU5hbWU6IGwsXG59O1xuXG5leHBvcnQgY29uc3QgREFURVRJTUVfU0hPUlQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBuLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBuLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX01FRCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuLFxufTtcblxuZXhwb3J0IGNvbnN0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IHMsXG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9GVUxMID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHRpbWVab25lTmFtZTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogcyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9IVUdFID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBsLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG5cbmV4cG9ydCBjb25zdCBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogbCxcbn07XG4iLCAiLypcbiAgVGhpcyBpcyBqdXN0IGEganVuayBkcmF3ZXIsIGNvbnRhaW5pbmcgYW55dGhpbmcgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgY2xhc3Nlcy5cbiAgQmVjYXVzZSBMdXhvbiBpcyBzbWFsbChpc2gpLCB0aGlzIHNob3VsZCBzdGF5IHNtYWxsIGFuZCB3ZSB3b24ndCB3b3JyeSBhYm91dCBzcGxpdHRpbmdcbiAgaXQgdXAgaW50bywgc2F5LCBwYXJzaW5nVXRpbC5qcyBhbmQgYmFzaWNVdGlsLmpzIGFuZCBzbyBvbi4gQnV0IHRoZXkgYXJlIGRpdmlkZWQgdXAgYnkgZmVhdHVyZSBhcmVhLlxuKi9cblxuaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzLmpzXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG4vLyBUWVBFU1xuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIiAmJiBvICUgMSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInN0cmluZ1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG59XG5cbi8vIENBUEFCSUxJVElFU1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVsYXRpdmUoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBJbnRsICE9PSBcInVuZGVmaW5lZFwiICYmICEhSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gT0JKRUNUUyBBTkQgQVJSQVlTXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZUFycmF5KHRoaW5nKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHRoaW5nKSA/IHRoaW5nIDogW3RoaW5nXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJlc3RCeShhcnIsIGJ5LCBjb21wYXJlKSB7XG4gIGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gYXJyLnJlZHVjZSgoYmVzdCwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHBhaXIgPSBbYnkobmV4dCksIG5leHRdO1xuICAgIGlmICghYmVzdCkge1xuICAgICAgcmV0dXJuIHBhaXI7XG4gICAgfSBlbHNlIGlmIChjb21wYXJlKGJlc3RbMF0sIHBhaXJbMF0pID09PSBiZXN0WzBdKSB7XG4gICAgICByZXR1cm4gYmVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhaXI7XG4gICAgfVxuICB9LCBudWxsKVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpY2sob2JqLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYSwgaykgPT4ge1xuICAgIGFba10gPSBvYmpba107XG4gICAgcmV0dXJuIGE7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbi8vIE5VTUJFUlMgQU5EIFNUUklOR1NcblxuZXhwb3J0IGZ1bmN0aW9uIGludGVnZXJCZXR3ZWVuKHRoaW5nLCBib3R0b20sIHRvcCkge1xuICByZXR1cm4gaXNJbnRlZ2VyKHRoaW5nKSAmJiB0aGluZyA+PSBib3R0b20gJiYgdGhpbmcgPD0gdG9wO1xufVxuXG4vLyB4ICUgbiBidXQgdGFrZXMgdGhlIHNpZ24gb2YgbiBpbnN0ZWFkIG9mIHhcbmV4cG9ydCBmdW5jdGlvbiBmbG9vck1vZCh4LCBuKSB7XG4gIHJldHVybiB4IC0gbiAqIE1hdGguZmxvb3IoeCAvIG4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFkU3RhcnQoaW5wdXQsIG4gPSAyKSB7XG4gIGNvbnN0IGlzTmVnID0gaW5wdXQgPCAwO1xuICBsZXQgcGFkZGVkO1xuICBpZiAoaXNOZWcpIHtcbiAgICBwYWRkZWQgPSBcIi1cIiArIChcIlwiICsgLWlucHV0KS5wYWRTdGFydChuLCBcIjBcIik7XG4gIH0gZWxzZSB7XG4gICAgcGFkZGVkID0gKFwiXCIgKyBpbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9XG4gIHJldHVybiBwYWRkZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUludGVnZXIoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUludChzdHJpbmcsIDEwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGbG9hdGluZyhzdHJpbmcpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHN0cmluZykgfHwgc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNaWxsaXMoZnJhY3Rpb24pIHtcbiAgLy8gUmV0dXJuIHVuZGVmaW5lZCAoaW5zdGVhZCBvZiAwKSBpbiB0aGVzZSBjYXNlcywgd2hlcmUgZnJhY3Rpb24gaXMgbm90IHNldFxuICBpZiAoaXNVbmRlZmluZWQoZnJhY3Rpb24pIHx8IGZyYWN0aW9uID09PSBudWxsIHx8IGZyYWN0aW9uID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmID0gcGFyc2VGbG9hdChcIjAuXCIgKyBmcmFjdGlvbikgKiAxMDAwO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGYpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFRvKG51bWJlciwgZGlnaXRzLCB0b3dhcmRaZXJvID0gZmFsc2UpIHtcbiAgY29uc3QgZmFjdG9yID0gMTAgKiogZGlnaXRzLFxuICAgIHJvdW5kZXIgPSB0b3dhcmRaZXJvID8gTWF0aC50cnVuYyA6IE1hdGgucm91bmQ7XG4gIHJldHVybiByb3VuZGVyKG51bWJlciAqIGZhY3RvcikgLyBmYWN0b3I7XG59XG5cbi8vIERBVEUgQkFTSUNTXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgY29uc3QgbW9kTW9udGggPSBmbG9vck1vZChtb250aCAtIDEsIDEyKSArIDEsXG4gICAgbW9kWWVhciA9IHllYXIgKyAobW9udGggLSBtb2RNb250aCkgLyAxMjtcblxuICBpZiAobW9kTW9udGggPT09IDIpIHtcbiAgICByZXR1cm4gaXNMZWFwWWVhcihtb2RZZWFyKSA/IDI5IDogMjg7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFszMSwgbnVsbCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vZE1vbnRoIC0gMV07XG4gIH1cbn1cblxuLy8gY292ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgbG9jYWwgdGltZXN0YW1wIChlcG9jaCwgYnV0IHdpdGggdGhlIG9mZnNldCBiYWtlZCBpbilcbmV4cG9ydCBmdW5jdGlvbiBvYmpUb0xvY2FsVFMob2JqKSB7XG4gIGxldCBkID0gRGF0ZS5VVEMoXG4gICAgb2JqLnllYXIsXG4gICAgb2JqLm1vbnRoIC0gMSxcbiAgICBvYmouZGF5LFxuICAgIG9iai5ob3VyLFxuICAgIG9iai5taW51dGUsXG4gICAgb2JqLnNlY29uZCxcbiAgICBvYmoubWlsbGlzZWNvbmRcbiAgKTtcblxuICAvLyBmb3IgbGVnYWN5IHJlYXNvbnMsIHllYXJzIGJldHdlZW4gMCBhbmQgOTkgYXJlIGludGVycHJldGVkIGFzIDE5WFg7IHJldmVydCB0aGF0XG4gIGlmIChvYmoueWVhciA8IDEwMCAmJiBvYmoueWVhciA+PSAwKSB7XG4gICAgZCA9IG5ldyBEYXRlKGQpO1xuICAgIGQuc2V0VVRDRnVsbFllYXIoZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCk7XG4gIH1cbiAgcmV0dXJuICtkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vla3NJbldlZWtZZWFyKHdlZWtZZWFyKSB7XG4gIGNvbnN0IHAxID1cbiAgICAgICh3ZWVrWWVhciArXG4gICAgICAgIE1hdGguZmxvb3Iod2Vla1llYXIgLyA0KSAtXG4gICAgICAgIE1hdGguZmxvb3Iod2Vla1llYXIgLyAxMDApICtcbiAgICAgICAgTWF0aC5mbG9vcih3ZWVrWWVhciAvIDQwMCkpICVcbiAgICAgIDcsXG4gICAgbGFzdCA9IHdlZWtZZWFyIC0gMSxcbiAgICBwMiA9IChsYXN0ICsgTWF0aC5mbG9vcihsYXN0IC8gNCkgLSBNYXRoLmZsb29yKGxhc3QgLyAxMDApICsgTWF0aC5mbG9vcihsYXN0IC8gNDAwKSkgJSA3O1xuICByZXR1cm4gcDEgPT09IDQgfHwgcDIgPT09IDMgPyA1MyA6IDUyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhcikge1xuICBpZiAoeWVhciA+IDk5KSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSByZXR1cm4geWVhciA+IDYwID8gMTkwMCArIHllYXIgOiAyMDAwICsgeWVhcjtcbn1cblxuLy8gUEFSU0lOR1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2Vab25lSW5mbyh0cywgb2Zmc2V0Rm9ybWF0LCBsb2NhbGUsIHRpbWVab25lID0gbnVsbCkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodHMpLFxuICAgIGludGxPcHRzID0ge1xuICAgICAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgIH07XG5cbiAgaWYgKHRpbWVab25lKSB7XG4gICAgaW50bE9wdHMudGltZVpvbmUgPSB0aW1lWm9uZTtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVkID0geyB0aW1lWm9uZU5hbWU6IG9mZnNldEZvcm1hdCwgLi4uaW50bE9wdHMgfTtcblxuICBjb25zdCBwYXJzZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIG1vZGlmaWVkKVxuICAgIC5mb3JtYXRUb1BhcnRzKGRhdGUpXG4gICAgLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRpbWV6b25lbmFtZVwiKTtcbiAgcmV0dXJuIHBhcnNlZCA/IHBhcnNlZC52YWx1ZSA6IG51bGw7XG59XG5cbi8vIHNpZ25lZE9mZnNldCgnLTUnLCAnMzAnKSAtPiAtMzMwXG5leHBvcnQgZnVuY3Rpb24gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cikge1xuICBsZXQgb2ZmSG91ciA9IHBhcnNlSW50KG9mZkhvdXJTdHIsIDEwKTtcblxuICAvLyBkb24ndCB8fCB0aGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSAtMFxuICBpZiAoTnVtYmVyLmlzTmFOKG9mZkhvdXIpKSB7XG4gICAgb2ZmSG91ciA9IDA7XG4gIH1cblxuICBjb25zdCBvZmZNaW4gPSBwYXJzZUludChvZmZNaW51dGVTdHIsIDEwKSB8fCAwLFxuICAgIG9mZk1pblNpZ25lZCA9IG9mZkhvdXIgPCAwIHx8IE9iamVjdC5pcyhvZmZIb3VyLCAtMCkgPyAtb2ZmTWluIDogb2ZmTWluO1xuICByZXR1cm4gb2ZmSG91ciAqIDYwICsgb2ZmTWluU2lnbmVkO1xufVxuXG4vLyBDT0VSQ0lPTlxuXG5leHBvcnQgZnVuY3Rpb24gYXNOdW1iZXIodmFsdWUpIHtcbiAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIgfHwgdmFsdWUgPT09IFwiXCIgfHwgTnVtYmVyLmlzTmFOKG51bWVyaWNWYWx1ZSkpXG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBJbnZhbGlkIHVuaXQgdmFsdWUgJHt2YWx1ZX1gKTtcbiAgcmV0dXJuIG51bWVyaWNWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdChvYmosIG5vcm1hbGl6ZXIpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9O1xuICBmb3IgKGNvbnN0IHUgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwgdSkpIHtcbiAgICAgIGNvbnN0IHYgPSBvYmpbdV07XG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVyKHUpXSA9IGFzTnVtYmVyKHYpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE9mZnNldChvZmZzZXQsIGZvcm1hdCkge1xuICBjb25zdCBob3VycyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSxcbiAgICBtaW51dGVzID0gTWF0aC50cnVuYyhNYXRoLmFicyhvZmZzZXQgJSA2MCkpLFxuICAgIHNpZ24gPSBvZmZzZXQgPj0gMCA/IFwiK1wiIDogXCItXCI7XG5cbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7cGFkU3RhcnQoaG91cnMsIDIpfToke3BhZFN0YXJ0KG1pbnV0ZXMsIDIpfWA7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtob3Vyc30ke21pbnV0ZXMgPiAwID8gYDoke21pbnV0ZXN9YCA6IFwiXCJ9YDtcbiAgICBjYXNlIFwidGVjaGllXCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke3BhZFN0YXJ0KGhvdXJzLCAyKX0ke3BhZFN0YXJ0KG1pbnV0ZXMsIDIpfWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBWYWx1ZSBmb3JtYXQgJHtmb3JtYXR9IGlzIG91dCBvZiByYW5nZSBmb3IgcHJvcGVydHkgZm9ybWF0YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVPYmplY3Qob2JqKSB7XG4gIHJldHVybiBwaWNrKG9iaiwgW1wiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlhbmFSZWdleCA9XG4gIC9bQS1aYS16XystXXsxLDI1Nn0oPzo6P1xcL1tBLVphLXowLTlfKy1dezEsMjU2fSg/OlxcL1tBLVphLXowLTlfKy1dezEsMjU2fSk/KT8vO1xuIiwgImltcG9ydCAqIGFzIEZvcm1hdHMgZnJvbSBcIi4vZm9ybWF0cy5qc1wiO1xuaW1wb3J0IHsgcGljayB9IGZyb20gXCIuL3V0aWwuanNcIjtcblxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBPYmplY3Qua2V5cyhvYmopLnNvcnQoKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgY29uc3QgbW9udGhzTG9uZyA9IFtcbiAgXCJKYW51YXJ5XCIsXG4gIFwiRmVicnVhcnlcIixcbiAgXCJNYXJjaFwiLFxuICBcIkFwcmlsXCIsXG4gIFwiTWF5XCIsXG4gIFwiSnVuZVwiLFxuICBcIkp1bHlcIixcbiAgXCJBdWd1c3RcIixcbiAgXCJTZXB0ZW1iZXJcIixcbiAgXCJPY3RvYmVyXCIsXG4gIFwiTm92ZW1iZXJcIixcbiAgXCJEZWNlbWJlclwiLFxuXTtcblxuZXhwb3J0IGNvbnN0IG1vbnRoc1Nob3J0ID0gW1xuICBcIkphblwiLFxuICBcIkZlYlwiLFxuICBcIk1hclwiLFxuICBcIkFwclwiLFxuICBcIk1heVwiLFxuICBcIkp1blwiLFxuICBcIkp1bFwiLFxuICBcIkF1Z1wiLFxuICBcIlNlcFwiLFxuICBcIk9jdFwiLFxuICBcIk5vdlwiLFxuICBcIkRlY1wiLFxuXTtcblxuZXhwb3J0IGNvbnN0IG1vbnRoc05hcnJvdyA9IFtcIkpcIiwgXCJGXCIsIFwiTVwiLCBcIkFcIiwgXCJNXCIsIFwiSlwiLCBcIkpcIiwgXCJBXCIsIFwiU1wiLCBcIk9cIiwgXCJOXCIsIFwiRFwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vbnRocyhsZW5ndGgpIHtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIFwibmFycm93XCI6XG4gICAgICByZXR1cm4gWy4uLm1vbnRoc05hcnJvd107XG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLm1vbnRoc1Nob3J0XTtcbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNMb25nXTtcbiAgICBjYXNlIFwibnVtZXJpY1wiOlxuICAgICAgcmV0dXJuIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiLCBcIjEwXCIsIFwiMTFcIiwgXCIxMlwiXTtcbiAgICBjYXNlIFwiMi1kaWdpdFwiOlxuICAgICAgcmV0dXJuIFtcIjAxXCIsIFwiMDJcIiwgXCIwM1wiLCBcIjA0XCIsIFwiMDVcIiwgXCIwNlwiLCBcIjA3XCIsIFwiMDhcIiwgXCIwOVwiLCBcIjEwXCIsIFwiMTFcIiwgXCIxMlwiXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHdlZWtkYXlzTG9uZyA9IFtcbiAgXCJNb25kYXlcIixcbiAgXCJUdWVzZGF5XCIsXG4gIFwiV2VkbmVzZGF5XCIsXG4gIFwiVGh1cnNkYXlcIixcbiAgXCJGcmlkYXlcIixcbiAgXCJTYXR1cmRheVwiLFxuICBcIlN1bmRheVwiLFxuXTtcblxuZXhwb3J0IGNvbnN0IHdlZWtkYXlzU2hvcnQgPSBbXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIiwgXCJTdW5cIl07XG5cbmV4cG9ydCBjb25zdCB3ZWVrZGF5c05hcnJvdyA9IFtcIk1cIiwgXCJUXCIsIFwiV1wiLCBcIlRcIiwgXCJGXCIsIFwiU1wiLCBcIlNcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrZGF5cyhsZW5ndGgpIHtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIFwibmFycm93XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzTmFycm93XTtcbiAgICBjYXNlIFwic2hvcnRcIjpcbiAgICAgIHJldHVybiBbLi4ud2Vla2RheXNTaG9ydF07XG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ud2Vla2RheXNMb25nXTtcbiAgICBjYXNlIFwibnVtZXJpY1wiOlxuICAgICAgcmV0dXJuIFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIl07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtZXJpZGllbXMgPSBbXCJBTVwiLCBcIlBNXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc0xvbmcgPSBbXCJCZWZvcmUgQ2hyaXN0XCIsIFwiQW5ubyBEb21pbmlcIl07XG5cbmV4cG9ydCBjb25zdCBlcmFzU2hvcnQgPSBbXCJCQ1wiLCBcIkFEXCJdO1xuXG5leHBvcnQgY29uc3QgZXJhc05hcnJvdyA9IFtcIkJcIiwgXCJBXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gZXJhcyhsZW5ndGgpIHtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIFwibmFycm93XCI6XG4gICAgICByZXR1cm4gWy4uLmVyYXNOYXJyb3ddO1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzU2hvcnRdO1xuICAgIGNhc2UgXCJsb25nXCI6XG4gICAgICByZXR1cm4gWy4uLmVyYXNMb25nXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpIHtcbiAgcmV0dXJuIG1lcmlkaWVtc1tkdC5ob3VyIDwgMTIgPyAwIDogMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gd2Vla2RheXMobGVuZ3RoKVtkdC53ZWVrZGF5IC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb250aEZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG1vbnRocyhsZW5ndGgpW2R0Lm1vbnRoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcmFGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBlcmFzKGxlbmd0aClbZHQueWVhciA8IDAgPyAwIDogMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZVRpbWUodW5pdCwgY291bnQsIG51bWVyaWMgPSBcImFsd2F5c1wiLCBuYXJyb3cgPSBmYWxzZSkge1xuICBjb25zdCB1bml0cyA9IHtcbiAgICB5ZWFyczogW1wieWVhclwiLCBcInlyLlwiXSxcbiAgICBxdWFydGVyczogW1wicXVhcnRlclwiLCBcInF0ci5cIl0sXG4gICAgbW9udGhzOiBbXCJtb250aFwiLCBcIm1vLlwiXSxcbiAgICB3ZWVrczogW1wid2Vla1wiLCBcIndrLlwiXSxcbiAgICBkYXlzOiBbXCJkYXlcIiwgXCJkYXlcIiwgXCJkYXlzXCJdLFxuICAgIGhvdXJzOiBbXCJob3VyXCIsIFwiaHIuXCJdLFxuICAgIG1pbnV0ZXM6IFtcIm1pbnV0ZVwiLCBcIm1pbi5cIl0sXG4gICAgc2Vjb25kczogW1wic2Vjb25kXCIsIFwic2VjLlwiXSxcbiAgfTtcblxuICBjb25zdCBsYXN0YWJsZSA9IFtcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIl0uaW5kZXhPZih1bml0KSA9PT0gLTE7XG5cbiAgaWYgKG51bWVyaWMgPT09IFwiYXV0b1wiICYmIGxhc3RhYmxlKSB7XG4gICAgY29uc3QgaXNEYXkgPSB1bml0ID09PSBcImRheXNcIjtcbiAgICBzd2l0Y2ggKGNvdW50KSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBpc0RheSA/IFwidG9tb3Jyb3dcIiA6IGBuZXh0ICR7dW5pdHNbdW5pdF1bMF19YDtcbiAgICAgIGNhc2UgLTE6XG4gICAgICAgIHJldHVybiBpc0RheSA/IFwieWVzdGVyZGF5XCIgOiBgbGFzdCAke3VuaXRzW3VuaXRdWzBdfWA7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBpc0RheSA/IFwidG9kYXlcIiA6IGB0aGlzICR7dW5pdHNbdW5pdF1bMF19YDtcbiAgICAgIGRlZmF1bHQ6IC8vIGZhbGwgdGhyb3VnaFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzSW5QYXN0ID0gT2JqZWN0LmlzKGNvdW50LCAtMCkgfHwgY291bnQgPCAwLFxuICAgIGZtdFZhbHVlID0gTWF0aC5hYnMoY291bnQpLFxuICAgIHNpbmd1bGFyID0gZm10VmFsdWUgPT09IDEsXG4gICAgbGlsVW5pdHMgPSB1bml0c1t1bml0XSxcbiAgICBmbXRVbml0ID0gbmFycm93XG4gICAgICA/IHNpbmd1bGFyXG4gICAgICAgID8gbGlsVW5pdHNbMV1cbiAgICAgICAgOiBsaWxVbml0c1syXSB8fCBsaWxVbml0c1sxXVxuICAgICAgOiBzaW5ndWxhclxuICAgICAgPyB1bml0c1t1bml0XVswXVxuICAgICAgOiB1bml0O1xuICByZXR1cm4gaXNJblBhc3QgPyBgJHtmbXRWYWx1ZX0gJHtmbXRVbml0fSBhZ29gIDogYGluICR7Zm10VmFsdWV9ICR7Zm10VW5pdH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U3RyaW5nKGtub3duRm9ybWF0KSB7XG4gIC8vIHRoZXNlIGFsbCBoYXZlIHRoZSBvZmZzZXRzIHJlbW92ZWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGVtXG4gIC8vIHdpdGhvdXQgYWxsIHRoZSBpbnRsIHN0dWZmIHRoaXMgaXMgYmFja2ZpbGxpbmdcbiAgY29uc3QgZmlsdGVyZWQgPSBwaWNrKGtub3duRm9ybWF0LCBbXG4gICAgICBcIndlZWtkYXlcIixcbiAgICAgIFwiZXJhXCIsXG4gICAgICBcInllYXJcIixcbiAgICAgIFwibW9udGhcIixcbiAgICAgIFwiZGF5XCIsXG4gICAgICBcImhvdXJcIixcbiAgICAgIFwibWludXRlXCIsXG4gICAgICBcInNlY29uZFwiLFxuICAgICAgXCJ0aW1lWm9uZU5hbWVcIixcbiAgICAgIFwiaG91ckN5Y2xlXCIsXG4gICAgXSksXG4gICAga2V5ID0gc3RyaW5naWZ5KGZpbHRlcmVkKSxcbiAgICBkYXRlVGltZUh1Z2UgPSBcIkVFRUUsIExMTEwgZCwgeXl5eSwgaDptbSBhXCI7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX1NIT1JUKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5XCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFX01FRCk6XG4gICAgICByZXR1cm4gXCJMTEwgZCwgeXl5eVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURV9NRURfV0lUSF9XRUVLREFZKTpcbiAgICAgIHJldHVybiBcIkVFRSwgTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfRlVMTCk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVfSFVHRSk6XG4gICAgICByZXR1cm4gXCJFRUVFLCBMTExMIGQsIHl5eXlcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfU0lNUExFKTpcbiAgICAgIHJldHVybiBcImg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiaDptbTpzcyBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcImg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcImg6bW0gYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuVElNRV8yNF9TSU1QTEUpOlxuICAgICAgcmV0dXJuIFwiSEg6bW1cIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLlRJTUVfMjRfV0lUSF9TRUNPTkRTKTpcbiAgICAgIHJldHVybiBcIkhIOm1tOnNzXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUKTpcbiAgICAgIHJldHVybiBcIkhIOm1tXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5USU1FXzI0X1dJVEhfTE9OR19PRkZTRVQpOlxuICAgICAgcmV0dXJuIFwiSEg6bW1cIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX1NIT1JUKTpcbiAgICAgIHJldHVybiBcIk0vZC95eXl5LCBoOm1tIGFcIjtcbiAgICBjYXNlIHN0cmluZ2lmeShGb3JtYXRzLkRBVEVUSU1FX01FRCk6XG4gICAgICByZXR1cm4gXCJMTEwgZCwgeXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9GVUxMKTpcbiAgICAgIHJldHVybiBcIkxMTEwgZCwgeXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9IVUdFKTpcbiAgICAgIHJldHVybiBkYXRlVGltZUh1Z2U7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiTS9kL3l5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJMTEwgZCwgeXl5eSwgaDptbTpzcyBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9NRURfV0lUSF9XRUVLREFZKTpcbiAgICAgIHJldHVybiBcIkVFRSwgZCBMTEwgeXl5eSwgaDptbSBhXCI7XG4gICAgY2FzZSBzdHJpbmdpZnkoRm9ybWF0cy5EQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyk6XG4gICAgICByZXR1cm4gXCJMTExMIGQsIHl5eXksIGg6bW06c3MgYVwiO1xuICAgIGNhc2Ugc3RyaW5naWZ5KEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMpOlxuICAgICAgcmV0dXJuIFwiRUVFRSwgTExMTCBkLCB5eXl5LCBoOm1tOnNzIGFcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRhdGVUaW1lSHVnZTtcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0ICogYXMgRm9ybWF0cyBmcm9tIFwiLi9mb3JtYXRzLmpzXCI7XG5pbXBvcnQgeyBwYWRTdGFydCB9IGZyb20gXCIuL3V0aWwuanNcIjtcblxuZnVuY3Rpb24gc3RyaW5naWZ5VG9rZW5zKHNwbGl0cywgdG9rZW5Ub1N0cmluZykge1xuICBsZXQgcyA9IFwiXCI7XG4gIGZvciAoY29uc3QgdG9rZW4gb2Ygc3BsaXRzKSB7XG4gICAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICAgIHMgKz0gdG9rZW4udmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzICs9IHRva2VuVG9TdHJpbmcodG9rZW4udmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbmNvbnN0IG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMgPSB7XG4gIEQ6IEZvcm1hdHMuREFURV9TSE9SVCxcbiAgREQ6IEZvcm1hdHMuREFURV9NRUQsXG4gIERERDogRm9ybWF0cy5EQVRFX0ZVTEwsXG4gIEREREQ6IEZvcm1hdHMuREFURV9IVUdFLFxuICB0OiBGb3JtYXRzLlRJTUVfU0lNUExFLFxuICB0dDogRm9ybWF0cy5USU1FX1dJVEhfU0VDT05EUyxcbiAgdHR0OiBGb3JtYXRzLlRJTUVfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIHR0dHQ6IEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VULFxuICBUOiBGb3JtYXRzLlRJTUVfMjRfU0lNUExFLFxuICBUVDogRm9ybWF0cy5USU1FXzI0X1dJVEhfU0VDT05EUyxcbiAgVFRUOiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIFRUVFQ6IEZvcm1hdHMuVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VULFxuICBmOiBGb3JtYXRzLkRBVEVUSU1FX1NIT1JULFxuICBmZjogRm9ybWF0cy5EQVRFVElNRV9NRUQsXG4gIGZmZjogRm9ybWF0cy5EQVRFVElNRV9GVUxMLFxuICBmZmZmOiBGb3JtYXRzLkRBVEVUSU1FX0hVR0UsXG4gIEY6IEZvcm1hdHMuREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTLFxuICBGRjogRm9ybWF0cy5EQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTLFxuICBGRkY6IEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMsXG4gIEZGRkY6IEZvcm1hdHMuREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0dGVyIHtcbiAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgRm9ybWF0dGVyKGxvY2FsZSwgb3B0cyk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VGb3JtYXQoZm10KSB7XG4gICAgbGV0IGN1cnJlbnQgPSBudWxsLFxuICAgICAgY3VycmVudEZ1bGwgPSBcIlwiLFxuICAgICAgYnJhY2tldGVkID0gZmFsc2U7XG4gICAgY29uc3Qgc3BsaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSBmbXQuY2hhckF0KGkpO1xuICAgICAgaWYgKGMgPT09IFwiJ1wiKSB7XG4gICAgICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3BsaXRzLnB1c2goeyBsaXRlcmFsOiBicmFja2V0ZWQsIHZhbDogY3VycmVudEZ1bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICAgIGN1cnJlbnRGdWxsID0gXCJcIjtcbiAgICAgICAgYnJhY2tldGVkID0gIWJyYWNrZXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoYnJhY2tldGVkKSB7XG4gICAgICAgIGN1cnJlbnRGdWxsICs9IGM7XG4gICAgICB9IGVsc2UgaWYgKGMgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgY3VycmVudEZ1bGwgKz0gYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3BsaXRzLnB1c2goeyBsaXRlcmFsOiBmYWxzZSwgdmFsOiBjdXJyZW50RnVsbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50RnVsbCA9IGM7XG4gICAgICAgIGN1cnJlbnQgPSBjO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7XG4gICAgICBzcGxpdHMucHVzaCh7IGxpdGVyYWw6IGJyYWNrZXRlZCwgdmFsOiBjdXJyZW50RnVsbCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3BsaXRzO1xuICB9XG5cbiAgc3RhdGljIG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pIHtcbiAgICByZXR1cm4gbWFjcm9Ub2tlblRvRm9ybWF0T3B0c1t0b2tlbl07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihsb2NhbGUsIGZvcm1hdE9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSBmb3JtYXRPcHRzO1xuICAgIHRoaXMubG9jID0gbG9jYWxlO1xuICAgIHRoaXMuc3lzdGVtTG9jID0gbnVsbDtcbiAgfVxuXG4gIGZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBvcHRzKSB7XG4gICAgaWYgKHRoaXMuc3lzdGVtTG9jID09PSBudWxsKSB7XG4gICAgICB0aGlzLnN5c3RlbUxvYyA9IHRoaXMubG9jLnJlZGVmYXVsdFRvU3lzdGVtKCk7XG4gICAgfVxuICAgIGNvbnN0IGRmID0gdGhpcy5zeXN0ZW1Mb2MuZHRGb3JtYXR0ZXIoZHQsIHsgLi4udGhpcy5vcHRzLCAuLi5vcHRzIH0pO1xuICAgIHJldHVybiBkZi5mb3JtYXQoKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lKGR0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYuZm9ybWF0KCk7XG4gIH1cblxuICBmb3JtYXREYXRlVGltZVBhcnRzKGR0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYuZm9ybWF0VG9QYXJ0cygpO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKGR0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCB7IC4uLnRoaXMub3B0cywgLi4ub3B0cyB9KTtcbiAgICByZXR1cm4gZGYucmVzb2x2ZWRPcHRpb25zKCk7XG4gIH1cblxuICBudW0obiwgcCA9IDApIHtcbiAgICAvLyB3ZSBnZXQgc29tZSBwZXJmIG91dCBvZiBkb2luZyB0aGlzIGhlcmUsIGFubm95aW5nbHlcbiAgICBpZiAodGhpcy5vcHRzLmZvcmNlU2ltcGxlKSB7XG4gICAgICByZXR1cm4gcGFkU3RhcnQobiwgcCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0cyA9IHsgLi4udGhpcy5vcHRzIH07XG5cbiAgICBpZiAocCA+IDApIHtcbiAgICAgIG9wdHMucGFkVG8gPSBwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxvYy5udW1iZXJGb3JtYXR0ZXIob3B0cykuZm9ybWF0KG4pO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKGR0LCBmbXQpIHtcbiAgICBjb25zdCBrbm93bkVuZ2xpc2ggPSB0aGlzLmxvYy5saXN0aW5nTW9kZSgpID09PSBcImVuXCIsXG4gICAgICB1c2VEYXRlVGltZUZvcm1hdHRlciA9IHRoaXMubG9jLm91dHB1dENhbGVuZGFyICYmIHRoaXMubG9jLm91dHB1dENhbGVuZGFyICE9PSBcImdyZWdvcnlcIixcbiAgICAgIHN0cmluZyA9IChvcHRzLCBleHRyYWN0KSA9PiB0aGlzLmxvYy5leHRyYWN0KGR0LCBvcHRzLCBleHRyYWN0KSxcbiAgICAgIGZvcm1hdE9mZnNldCA9IChvcHRzKSA9PiB7XG4gICAgICAgIGlmIChkdC5pc09mZnNldEZpeGVkICYmIGR0Lm9mZnNldCA9PT0gMCAmJiBvcHRzLmFsbG93Wikge1xuICAgICAgICAgIHJldHVybiBcIlpcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkdC5pc1ZhbGlkID8gZHQuem9uZS5mb3JtYXRPZmZzZXQoZHQudHMsIG9wdHMuZm9ybWF0KSA6IFwiXCI7XG4gICAgICB9LFxuICAgICAgbWVyaWRpZW0gPSAoKSA9PlxuICAgICAgICBrbm93bkVuZ2xpc2hcbiAgICAgICAgICA/IEVuZ2xpc2gubWVyaWRpZW1Gb3JEYXRlVGltZShkdClcbiAgICAgICAgICA6IHN0cmluZyh7IGhvdXI6IFwibnVtZXJpY1wiLCBob3VyQ3ljbGU6IFwiaDEyXCIgfSwgXCJkYXlwZXJpb2RcIiksXG4gICAgICBtb250aCA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+XG4gICAgICAgIGtub3duRW5nbGlzaFxuICAgICAgICAgID8gRW5nbGlzaC5tb250aEZvckRhdGVUaW1lKGR0LCBsZW5ndGgpXG4gICAgICAgICAgOiBzdHJpbmcoc3RhbmRhbG9uZSA/IHsgbW9udGg6IGxlbmd0aCB9IDogeyBtb250aDogbGVuZ3RoLCBkYXk6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIiksXG4gICAgICB3ZWVrZGF5ID0gKGxlbmd0aCwgc3RhbmRhbG9uZSkgPT5cbiAgICAgICAga25vd25FbmdsaXNoXG4gICAgICAgICAgPyBFbmdsaXNoLndlZWtkYXlGb3JEYXRlVGltZShkdCwgbGVuZ3RoKVxuICAgICAgICAgIDogc3RyaW5nKFxuICAgICAgICAgICAgICBzdGFuZGFsb25lID8geyB3ZWVrZGF5OiBsZW5ndGggfSA6IHsgd2Vla2RheTogbGVuZ3RoLCBtb250aDogXCJsb25nXCIsIGRheTogXCJudW1lcmljXCIgfSxcbiAgICAgICAgICAgICAgXCJ3ZWVrZGF5XCJcbiAgICAgICAgICAgICksXG4gICAgICBtYXliZU1hY3JvID0gKHRva2VuKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdE9wdHMgPSBGb3JtYXR0ZXIubWFjcm9Ub2tlblRvRm9ybWF0T3B0cyh0b2tlbik7XG4gICAgICAgIGlmIChmb3JtYXRPcHRzKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZHQsIGZvcm1hdE9wdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVyYSA9IChsZW5ndGgpID0+XG4gICAgICAgIGtub3duRW5nbGlzaCA/IEVuZ2xpc2guZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgOiBzdHJpbmcoeyBlcmE6IGxlbmd0aCB9LCBcImVyYVwiKSxcbiAgICAgIHRva2VuVG9TdHJpbmcgPSAodG9rZW4pID0+IHtcbiAgICAgICAgLy8gV2hlcmUgcG9zc2libGU6IGh0dHA6Ly9jbGRyLnVuaWNvZGUub3JnL3RyYW5zbGF0aW9uL2RhdGUtdGltZS0xL2RhdGUtdGltZSNUT0MtU3RhbmRhbG9uZS12cy4tRm9ybWF0LVN0eWxlc1xuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgLy8gbXNcbiAgICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbGxpc2Vjb25kKTtcbiAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgICAgICBjYXNlIFwiU1NTXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWlsbGlzZWNvbmQsIDMpO1xuICAgICAgICAgIC8vIHNlY29uZHNcbiAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnNlY29uZCk7XG4gICAgICAgICAgY2FzZSBcInNzXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuc2Vjb25kLCAyKTtcbiAgICAgICAgICAvLyBmcmFjdGlvbmFsIHNlY29uZHNcbiAgICAgICAgICBjYXNlIFwidXVcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGR0Lm1pbGxpc2Vjb25kIC8gMTApLCAyKTtcbiAgICAgICAgICBjYXNlIFwidXV1XCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwMCkpO1xuICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSk7XG4gICAgICAgICAgY2FzZSBcIm1tXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWludXRlLCAyKTtcbiAgICAgICAgICAvLyBob3Vyc1xuICAgICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciAlIDEyID09PSAwID8gMTIgOiBkdC5ob3VyICUgMTIpO1xuICAgICAgICAgIGNhc2UgXCJoaFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIgJSAxMiA9PT0gMCA/IDEyIDogZHQuaG91ciAlIDEyLCAyKTtcbiAgICAgICAgICBjYXNlIFwiSFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIpO1xuICAgICAgICAgIGNhc2UgXCJISFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIsIDIpO1xuICAgICAgICAgIC8vIG9mZnNldFxuICAgICAgICAgIGNhc2UgXCJaXCI6XG4gICAgICAgICAgICAvLyBsaWtlICs2XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHsgZm9ybWF0OiBcIm5hcnJvd1wiLCBhbGxvd1o6IHRoaXMub3B0cy5hbGxvd1ogfSk7XG4gICAgICAgICAgY2FzZSBcIlpaXCI6XG4gICAgICAgICAgICAvLyBsaWtlICswNjowMFxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogXCJzaG9ydFwiLCBhbGxvd1o6IHRoaXMub3B0cy5hbGxvd1ogfSk7XG4gICAgICAgICAgY2FzZSBcIlpaWlwiOlxuICAgICAgICAgICAgLy8gbGlrZSArMDYwMFxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogXCJ0ZWNoaWVcIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pO1xuICAgICAgICAgIGNhc2UgXCJaWlpaXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEVTVFxuICAgICAgICAgICAgcmV0dXJuIGR0LnpvbmUub2Zmc2V0TmFtZShkdC50cywgeyBmb3JtYXQ6IFwic2hvcnRcIiwgbG9jYWxlOiB0aGlzLmxvYy5sb2NhbGUgfSk7XG4gICAgICAgICAgY2FzZSBcIlpaWlpaXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEVhc3Rlcm4gU3RhbmRhcmQgVGltZVxuICAgICAgICAgICAgcmV0dXJuIGR0LnpvbmUub2Zmc2V0TmFtZShkdC50cywgeyBmb3JtYXQ6IFwibG9uZ1wiLCBsb2NhbGU6IHRoaXMubG9jLmxvY2FsZSB9KTtcbiAgICAgICAgICAvLyB6b25lXG4gICAgICAgICAgY2FzZSBcInpcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgQW1lcmljYS9OZXdfWW9ya1xuICAgICAgICAgICAgcmV0dXJuIGR0LnpvbmVOYW1lO1xuICAgICAgICAgIC8vIG1lcmlkaWVtc1xuICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICByZXR1cm4gbWVyaWRpZW0oKTtcbiAgICAgICAgICAvLyBkYXRlc1xuICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyBkYXk6IFwibnVtZXJpY1wiIH0sIFwiZGF5XCIpIDogdGhpcy5udW0oZHQuZGF5KTtcbiAgICAgICAgICBjYXNlIFwiZGRcIjpcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7IGRheTogXCIyLWRpZ2l0XCIgfSwgXCJkYXlcIikgOiB0aGlzLm51bShkdC5kYXksIDIpO1xuICAgICAgICAgIC8vIHdlZWtkYXlzIC0gc3RhbmRhbG9uZVxuICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrZGF5KTtcbiAgICAgICAgICBjYXNlIFwiY2NjXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJzaG9ydFwiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiY2NjY1wiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVHVlc2RheSdcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibG9uZ1wiLCB0cnVlKTtcbiAgICAgICAgICBjYXNlIFwiY2NjY2NcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1QnXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcIm5hcnJvd1wiLCB0cnVlKTtcbiAgICAgICAgICAvLyB3ZWVrZGF5cyAtIGZvcm1hdFxuICAgICAgICAgIGNhc2UgXCJFXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDFcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrZGF5KTtcbiAgICAgICAgICBjYXNlIFwiRUVFXCI6XG4gICAgICAgICAgICAvLyBsaWtlICdUdWVzJ1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJzaG9ydFwiLCBmYWxzZSk7XG4gICAgICAgICAgY2FzZSBcIkVFRUVcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknXG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheShcImxvbmdcIiwgZmFsc2UpO1xuICAgICAgICAgIGNhc2UgXCJFRUVFRVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAnVCdcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibmFycm93XCIsIGZhbHNlKTtcbiAgICAgICAgICAvLyBtb250aHMgLSBzdGFuZGFsb25lXG4gICAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwibnVtZXJpY1wiLCBkYXk6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCk7XG4gICAgICAgICAgY2FzZSBcIkxMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAxLCBkb2Vzbid0IHNlZW0gdG8gd29ya1xuICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyXG4gICAgICAgICAgICAgID8gc3RyaW5nKHsgbW9udGg6IFwiMi1kaWdpdFwiLCBkYXk6IFwibnVtZXJpY1wiIH0sIFwibW9udGhcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC5tb250aCwgMik7XG4gICAgICAgICAgY2FzZSBcIkxMTFwiOlxuICAgICAgICAgICAgLy8gbGlrZSBKYW5cbiAgICAgICAgICAgIHJldHVybiBtb250aChcInNob3J0XCIsIHRydWUpO1xuICAgICAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEphbnVhcnlcbiAgICAgICAgICAgIHJldHVybiBtb250aChcImxvbmdcIiwgdHJ1ZSk7XG4gICAgICAgICAgY2FzZSBcIkxMTExMXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEpcbiAgICAgICAgICAgIHJldHVybiBtb250aChcIm5hcnJvd1wiLCB0cnVlKTtcbiAgICAgICAgICAvLyBtb250aHMgLSBmb3JtYXRcbiAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogXCJudW1lcmljXCIgfSwgXCJtb250aFwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoKTtcbiAgICAgICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMDFcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiBcIjItZGlnaXRcIiB9LCBcIm1vbnRoXCIpXG4gICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgsIDIpO1xuICAgICAgICAgIGNhc2UgXCJNTU1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFuXG4gICAgICAgICAgICByZXR1cm4gbW9udGgoXCJzaG9ydFwiLCBmYWxzZSk7XG4gICAgICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgICAgICAgIC8vIGxpa2UgSmFudWFyeVxuICAgICAgICAgICAgcmV0dXJuIG1vbnRoKFwibG9uZ1wiLCBmYWxzZSk7XG4gICAgICAgICAgY2FzZSBcIk1NTU1NXCI6XG4gICAgICAgICAgICAvLyBsaWtlIEpcbiAgICAgICAgICAgIHJldHVybiBtb250aChcIm5hcnJvd1wiLCBmYWxzZSk7XG4gICAgICAgICAgLy8geWVhcnNcbiAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAyMDE0XG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyB5ZWFyOiBcIm51bWVyaWNcIiB9LCBcInllYXJcIikgOiB0aGlzLm51bShkdC55ZWFyKTtcbiAgICAgICAgICBjYXNlIFwieXlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMTRcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IHllYXI6IFwiMi1kaWdpdFwiIH0sIFwieWVhclwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0LnllYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuICAgICAgICAgIGNhc2UgXCJ5eXl5XCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAwMTJcbiAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlclxuICAgICAgICAgICAgICA/IHN0cmluZyh7IHllYXI6IFwibnVtZXJpY1wiIH0sIFwieWVhclwiKVxuICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0LnllYXIsIDQpO1xuICAgICAgICAgIGNhc2UgXCJ5eXl5eXlcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgMDAwMDEyXG4gICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiBcIm51bWVyaWNcIiB9LCBcInllYXJcIilcbiAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLCA2KTtcbiAgICAgICAgICAvLyBlcmFzXG4gICAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgQURcbiAgICAgICAgICAgIHJldHVybiBlcmEoXCJzaG9ydFwiKTtcbiAgICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICAgIC8vIGxpa2UgQW5ubyBEb21pbmlcbiAgICAgICAgICAgIHJldHVybiBlcmEoXCJsb25nXCIpO1xuICAgICAgICAgIGNhc2UgXCJHR0dHR1wiOlxuICAgICAgICAgICAgcmV0dXJuIGVyYShcIm5hcnJvd1wiKTtcbiAgICAgICAgICBjYXNlIFwia2tcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrWWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwgMik7XG4gICAgICAgICAgY2FzZSBcImtra2tcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrWWVhciwgNCk7XG4gICAgICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrTnVtYmVyKTtcbiAgICAgICAgICBjYXNlIFwiV1dcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrTnVtYmVyLCAyKTtcbiAgICAgICAgICBjYXNlIFwib1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm9yZGluYWwpO1xuICAgICAgICAgIGNhc2UgXCJvb29cIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsLCAzKTtcbiAgICAgICAgICBjYXNlIFwicVwiOlxuICAgICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQucXVhcnRlcik7XG4gICAgICAgICAgY2FzZSBcInFxXCI6XG4gICAgICAgICAgICAvLyBsaWtlIDAxXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQucXVhcnRlciwgMik7XG4gICAgICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGR0LnRzIC8gMTAwMCkpO1xuICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQudHMpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVNYWNybyh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLCB0b2tlblRvU3RyaW5nKTtcbiAgfVxuXG4gIGZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyhkdXIsIGZtdCkge1xuICAgIGNvbnN0IHRva2VuVG9GaWVsZCA9ICh0b2tlbikgPT4ge1xuICAgICAgICBzd2l0Y2ggKHRva2VuWzBdKSB7XG4gICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIHJldHVybiBcIm1pbGxpc2Vjb25kXCI7XG4gICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgIHJldHVybiBcInNlY29uZFwiO1xuICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtaW51dGVcIjtcbiAgICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiaG91clwiO1xuICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJkYXlcIjtcbiAgICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwid2Vla1wiO1xuICAgICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJtb250aFwiO1xuICAgICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgICByZXR1cm4gXCJ5ZWFyXCI7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9rZW5Ub1N0cmluZyA9IChsaWxkdXIpID0+ICh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBtYXBwZWQgPSB0b2tlblRvRmllbGQodG9rZW4pO1xuICAgICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGxpbGR1ci5nZXQobWFwcGVkKSwgdG9rZW4ubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b2tlbnMgPSBGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSxcbiAgICAgIHJlYWxUb2tlbnMgPSB0b2tlbnMucmVkdWNlKFxuICAgICAgICAoZm91bmQsIHsgbGl0ZXJhbCwgdmFsIH0pID0+IChsaXRlcmFsID8gZm91bmQgOiBmb3VuZC5jb25jYXQodmFsKSksXG4gICAgICAgIFtdXG4gICAgICApLFxuICAgICAgY29sbGFwc2VkID0gZHVyLnNoaWZ0VG8oLi4ucmVhbFRva2Vucy5tYXAodG9rZW5Ub0ZpZWxkKS5maWx0ZXIoKHQpID0+IHQpKTtcbiAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKHRva2VucywgdG9rZW5Ub1N0cmluZyhjb2xsYXBzZWQpKTtcbiAgfVxufVxuIiwgImV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmFsaWQge1xuICBjb25zdHJ1Y3RvcihyZWFzb24sIGV4cGxhbmF0aW9uKSB7XG4gICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgdGhpcy5leHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uO1xuICB9XG5cbiAgdG9NZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmV4cGxhbmF0aW9uKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5yZWFzb259OiAke3RoaXMuZXhwbGFuYXRpb259YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IFpvbmVJc0Fic3RyYWN0RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpvbmUge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygem9uZVxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB0eXBlKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyB6b25lLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICBnZXQgaWFuYU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXIuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIChzdWNoIGFzIEVTVCkgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXBcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyB0byBhZmZlY3QgdGhlIGZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5mb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uIEFjY2VwdHMgJ2xvbmcnIG9yICdzaG9ydCcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIG9mZnNldE5hbWUodHMsIG9wdHMpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBvZmZzZXQgaW4gbWludXRlcyBmb3IgdGhpcyB6b25lIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBjb21wdXRlIHRoZSBvZmZzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgZXF1YWwgdG8gYW5vdGhlciB6b25lXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1pvbmV9IG90aGVyWm9uZSAtIHRoZSB6b25lIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZC5cbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdE9mZnNldCwgcGFyc2Vab25lSW5mbyB9IGZyb20gXCIuLi9pbXBsL3V0aWwuanNcIjtcbmltcG9ydCBab25lIGZyb20gXCIuLi96b25lLmpzXCI7XG5cbmxldCBzaW5nbGV0b24gPSBudWxsO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGxvY2FsIHpvbmUgZm9yIHRoaXMgSmF2YVNjcmlwdCBlbnZpcm9ubWVudC5cbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeXN0ZW1ab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGxvY2FsIHpvbmVcbiAgICogQHJldHVybiB7U3lzdGVtWm9uZX1cbiAgICovXG4gIHN0YXRpYyBnZXQgaW5zdGFuY2UoKSB7XG4gICAgaWYgKHNpbmdsZXRvbiA9PT0gbnVsbCkge1xuICAgICAgc2luZ2xldG9uID0gbmV3IFN5c3RlbVpvbmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpbmdsZXRvbjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcInN5c3RlbVwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0TmFtZSh0cywgeyBmb3JtYXQsIGxvY2FsZSB9KSB7XG4gICAgcmV0dXJuIHBhcnNlWm9uZUluZm8odHMsIGZvcm1hdCwgbG9jYWxlKTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGZvcm1hdE9mZnNldCh0cywgZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLm9mZnNldCh0cyksIGZvcm1hdCk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXQodHMpIHtcbiAgICByZXR1cm4gLW5ldyBEYXRlKHRzKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJzeXN0ZW1cIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0T2Zmc2V0LCBwYXJzZVpvbmVJbmZvLCBpc1VuZGVmaW5lZCwgb2JqVG9Mb2NhbFRTIH0gZnJvbSBcIi4uL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxubGV0IGR0ZkNhY2hlID0ge307XG5mdW5jdGlvbiBtYWtlRFRGKHpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt6b25lXSkge1xuICAgIGR0ZkNhY2hlW3pvbmVdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLCB7XG4gICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgdGltZVpvbmU6IHpvbmUsXG4gICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcbiAgICAgIGRheTogXCIyLWRpZ2l0XCIsXG4gICAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICBzZWNvbmQ6IFwiMi1kaWdpdFwiLFxuICAgICAgZXJhOiBcInNob3J0XCIsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3pvbmVdO1xufVxuXG5jb25zdCB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGVyYTogMyxcbiAgaG91cjogNCxcbiAgbWludXRlOiA1LFxuICBzZWNvbmQ6IDYsXG59O1xuXG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csIFwiXCIpLFxuICAgIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKykgKEFEfEJDKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZCksXG4gICAgWywgZk1vbnRoLCBmRGF5LCBmWWVhciwgZmFkT3JCYywgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gcGFyc2VkO1xuICByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXTtcbn1cblxuZnVuY3Rpb24gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpO1xuICBjb25zdCBmaWxsZWQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBmb3JtYXR0ZWRbaV07XG4gICAgY29uc3QgcG9zID0gdHlwZVRvUG9zW3R5cGVdO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZXJhXCIpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQocG9zKSkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkO1xufVxuXG5sZXQgaWFuYVpvbmVDYWNoZSA9IHt9O1xuLyoqXG4gKiBBIHpvbmUgaWRlbnRpZmllZCBieSBhbiBJQU5BIGlkZW50aWZpZXIsIGxpa2UgQW1lcmljYS9OZXdfWW9ya1xuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElBTkFab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFpvbmUgbmFtZVxuICAgKiBAcmV0dXJuIHtJQU5BWm9uZX1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUobmFtZSkge1xuICAgIGlmICghaWFuYVpvbmVDYWNoZVtuYW1lXSkge1xuICAgICAgaWFuYVpvbmVDYWNoZVtuYW1lXSA9IG5ldyBJQU5BWm9uZShuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGlhbmFab25lQ2FjaGVbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgbG9jYWwgY2FjaGVzLiBTaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaW4gdGVzdGluZyBzY2VuYXJpb3MuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICBpYW5hWm9uZUNhY2hlID0ge307XG4gICAgZHRmQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHN0cmluZyBpcyBhIHZhbGlkIHNwZWNpZmllci4gVGhpcyBvbmx5IGNoZWNrcyB0aGUgc3RyaW5nJ3MgZm9ybWF0LCBub3QgdGhhdCB0aGUgc3BlY2lmaWVyIGlkZW50aWZpZXMgYSBrbm93biB6b25lOyBzZWUgaXNWYWxpZFpvbmUgZm9yIHRoYXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIHN0cmluZyB0byBjaGVjayB2YWxpZGl0eSBvblxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkU3BlY2lmaWVyKFwiQW1lcmljYS9OZXdfWW9ya1wiKSAvLz0+IHRydWVcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIlNwb3J0fn5ibG9ycFwiKSAvLz0+IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UgZm9yIHNvbWUgdmFsaWQgSUFOQSBuYW1lcy4gVXNlIGlzVmFsaWRab25lIGluc3RlYWQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZFNwZWNpZmllcihzKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFpvbmUocyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaWRlbnRpZmllcyBhIHJlYWwgem9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2tcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJBbWVyaWNhL05ld19Zb3JrXCIpIC8vPT4gdHJ1ZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIkZhbnRhc2lhL0Nhc3RsZVwiKSAvLz0+IGZhbHNlXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiU3BvcnR+fmJsb3JwXCIpIC8vPT4gZmFsc2VcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc1ZhbGlkWm9uZSh6b25lKSB7XG4gICAgaWYgKCF6b25lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuLVVTXCIsIHsgdGltZVpvbmU6IHpvbmUgfSkuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEBwcml2YXRlICoqL1xuICAgIHRoaXMuem9uZU5hbWUgPSBuYW1lO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLnZhbGlkID0gSUFOQVpvbmUuaXNWYWxpZFpvbmUobmFtZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJpYW5hXCI7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy56b25lTmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBvZmZzZXROYW1lKHRzLCB7IGZvcm1hdCwgbG9jYWxlIH0pIHtcbiAgICByZXR1cm4gcGFyc2Vab25lSW5mbyh0cywgZm9ybWF0LCBsb2NhbGUsIHRoaXMubmFtZSk7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KHRzKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKTtcblxuICAgIGlmIChpc05hTihkYXRlKSkgcmV0dXJuIE5hTjtcblxuICAgIGNvbnN0IGR0ZiA9IG1ha2VEVEYodGhpcy5uYW1lKTtcbiAgICBsZXQgW3llYXIsIG1vbnRoLCBkYXksIGFkT3JCYywgaG91ciwgbWludXRlLCBzZWNvbmRdID0gZHRmLmZvcm1hdFRvUGFydHNcbiAgICAgID8gcGFydHNPZmZzZXQoZHRmLCBkYXRlKVxuICAgICAgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpO1xuXG4gICAgaWYgKGFkT3JCYyA9PT0gXCJCQ1wiKSB7XG4gICAgICB5ZWFyID0gLU1hdGguYWJzKHllYXIpICsgMTtcbiAgICB9XG5cbiAgICAvLyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGhvdXIxMiBhbmQgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTAyNTU2NCZjYW49MiZxPSUyMjI0JTNBMDAlMjIlMjBkYXRldGltZWZvcm1hdFxuICAgIGNvbnN0IGFkanVzdGVkSG91ciA9IGhvdXIgPT09IDI0ID8gMCA6IGhvdXI7XG5cbiAgICBjb25zdCBhc1VUQyA9IG9ialRvTG9jYWxUUyh7XG4gICAgICB5ZWFyLFxuICAgICAgbW9udGgsXG4gICAgICBkYXksXG4gICAgICBob3VyOiBhZGp1c3RlZEhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgICBzZWNvbmQsXG4gICAgICBtaWxsaXNlY29uZDogMCxcbiAgICB9KTtcblxuICAgIGxldCBhc1RTID0gK2RhdGU7XG4gICAgY29uc3Qgb3ZlciA9IGFzVFMgJSAxMDAwO1xuICAgIGFzVFMgLT0gb3ZlciA+PSAwID8gb3ZlciA6IDEwMDAgKyBvdmVyO1xuICAgIHJldHVybiAoYXNVVEMgLSBhc1RTKSAvICg2MCAqIDEwMDApO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJpYW5hXCIgJiYgb3RoZXJab25lLm5hbWUgPT09IHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0T2Zmc2V0LCBzaWduZWRPZmZzZXQgfSBmcm9tIFwiLi4vaW1wbC91dGlsLmpzXCI7XG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcblxuLyoqXG4gKiBBIHpvbmUgd2l0aCBhIGZpeGVkIG9mZnNldCAobWVhbmluZyBubyBEU1QpXG4gKiBAaW1wbGVtZW50cyB7Wm9uZX1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRml4ZWRPZmZzZXRab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgVVRDXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBnZXQgdXRjSW5zdGFuY2UoKSB7XG4gICAgaWYgKHNpbmdsZXRvbiA9PT0gbnVsbCkge1xuICAgICAgc2luZ2xldG9uID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZSgwKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpbmdsZXRvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gaW5zdGFuY2Ugd2l0aCBhIHNwZWNpZmllZCBvZmZzZXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIFRoZSBvZmZzZXQgaW4gbWludXRlc1xuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuICBzdGF0aWMgaW5zdGFuY2Uob2Zmc2V0KSB7XG4gICAgcmV0dXJuIG9mZnNldCA9PT0gMCA/IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZSA6IG5ldyBGaXhlZE9mZnNldFpvbmUob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gaW5zdGFuY2Ugb2YgRml4ZWRPZmZzZXRab25lIGZyb20gYSBVVEMgb2Zmc2V0IHN0cmluZywgbGlrZSBcIlVUQys2XCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHMgLSBUaGUgb2Zmc2V0IHN0cmluZyB0byBwYXJzZVxuICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoXCJVVEMrNlwiKVxuICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoXCJVVEMrMDZcIilcbiAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKFwiVVRDLTY6MDBcIilcbiAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfVxuICAgKi9cbiAgc3RhdGljIHBhcnNlU3BlY2lmaWVyKHMpIHtcbiAgICBpZiAocykge1xuICAgICAgY29uc3QgciA9IHMubWF0Y2goL151dGMoPzooWystXVxcZHsxLDJ9KSg/OjooXFxkezJ9KSk/KT8kL2kpO1xuICAgICAgaWYgKHIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaXhlZE9mZnNldFpvbmUoc2lnbmVkT2Zmc2V0KHJbMV0sIHJbMl0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihvZmZzZXQpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cbiAgICB0aGlzLmZpeGVkID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiZml4ZWRcIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZpeGVkID09PSAwID8gXCJVVENcIiA6IGBVVEMke2Zvcm1hdE9mZnNldCh0aGlzLmZpeGVkLCBcIm5hcnJvd1wiKX1gO1xuICB9XG5cbiAgZ2V0IGlhbmFOYW1lKCkge1xuICAgIGlmICh0aGlzLmZpeGVkID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJFdGMvVVRDXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgRXRjL0dNVCR7Zm9ybWF0T2Zmc2V0KC10aGlzLmZpeGVkLCBcIm5hcnJvd1wiKX1gO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGZvcm1hdE9mZnNldCh0cywgZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLmZpeGVkLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmZpeGVkO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJmaXhlZFwiICYmIG90aGVyWm9uZS5maXhlZCA9PT0gdGhpcy5maXhlZDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCAiaW1wb3J0IFpvbmUgZnJvbSBcIi4uL3pvbmUuanNcIjtcblxuLyoqXG4gKiBBIHpvbmUgdGhhdCBmYWlsZWQgdG8gcGFyc2UuIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzLlxuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludmFsaWRab25lIGV4dGVuZHMgWm9uZSB7XG4gIGNvbnN0cnVjdG9yKHpvbmVOYW1lKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogIEBwcml2YXRlICovXG4gICAgdGhpcy56b25lTmFtZSA9IHpvbmVOYW1lO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaW52YWxpZFwiO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7XG4gIH1cblxuICAvKiogQG92ZXJyaWRlICoqL1xuICBnZXQgaXNVbml2ZXJzYWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgb2Zmc2V0TmFtZSgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGZvcm1hdE9mZnNldCgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIG9mZnNldCgpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgLyoqIEBvdmVycmlkZSAqKi9cbiAgZXF1YWxzKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAb3ZlcnJpZGUgKiovXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgIi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5pbXBvcnQgWm9uZSBmcm9tIFwiLi4vem9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgSW52YWxpZFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ludmFsaWRab25lLmpzXCI7XG5cbmltcG9ydCB7IGlzVW5kZWZpbmVkLCBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVab25lKGlucHV0LCBkZWZhdWx0Wm9uZSkge1xuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRab25lO1xuICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgWm9uZSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICBjb25zdCBsb3dlcmVkID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXJlZCA9PT0gXCJsb2NhbFwiIHx8IGxvd2VyZWQgPT09IFwic3lzdGVtXCIpIHJldHVybiBkZWZhdWx0Wm9uZTtcbiAgICBlbHNlIGlmIChsb3dlcmVkID09PSBcInV0Y1wiIHx8IGxvd2VyZWQgPT09IFwiZ210XCIpIHJldHVybiBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2U7XG4gICAgZWxzZSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKGxvd2VyZWQpIHx8IElBTkFab25lLmNyZWF0ZShpbnB1dCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShpbnB1dCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIGlucHV0Lm9mZnNldCAmJiB0eXBlb2YgaW5wdXQub2Zmc2V0ID09PSBcIm51bWJlclwiKSB7XG4gICAgLy8gVGhpcyBpcyBkdW1iLCBidXQgdGhlIGluc3RhbmNlb2YgY2hlY2sgYWJvdmUgZG9lc24ndCBzZWVtIHRvIHJlYWxseSB3b3JrXG4gICAgLy8gc28gd2UncmUgZHVjayBjaGVja2luZyBpdFxuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEludmFsaWRab25lKGlucHV0KTtcbiAgfVxufVxuIiwgImltcG9ydCBTeXN0ZW1ab25lIGZyb20gXCIuL3pvbmVzL3N5c3RlbVpvbmUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuXG5pbXBvcnQgeyBub3JtYWxpemVab25lIH0gZnJvbSBcIi4vaW1wbC96b25lVXRpbC5qc1wiO1xuXG5sZXQgbm93ID0gKCkgPT4gRGF0ZS5ub3coKSxcbiAgZGVmYXVsdFpvbmUgPSBcInN5c3RlbVwiLFxuICBkZWZhdWx0TG9jYWxlID0gbnVsbCxcbiAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bGwsXG4gIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG51bGwsXG4gIHRocm93T25JbnZhbGlkO1xuXG4vKipcbiAqIFNldHRpbmdzIGNvbnRhaW5zIHN0YXRpYyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoYXQgY29udHJvbCBMdXhvbidzIG92ZXJhbGwgYmVoYXZpb3IuIEx1eG9uIGlzIGEgc2ltcGxlIGxpYnJhcnkgd2l0aCBmZXcgb3B0aW9ucywgYnV0IHRoZSBvbmVzIGl0IGRvZXMgaGF2ZSBsaXZlIGhlcmUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICovXG4gIHN0YXRpYyBnZXQgbm93KCkge1xuICAgIHJldHVybiBub3c7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC5cbiAgICogVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSBudW1iZXIsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gRXBvY2ggbWlsbGlzZWNvbmQgY291bnRcbiAgICogQHR5cGUge2Z1bmN0aW9ufVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiBEYXRlLm5vdygpICsgMzAwMCAvLyBwcmV0ZW5kIGl0IGlzIDMgc2Vjb25kcyBpbiB0aGUgZnV0dXJlXG4gICAqIEBleGFtcGxlIFNldHRpbmdzLm5vdyA9ICgpID0+IDAgLy8gYWx3YXlzIHByZXRlbmQgaXQncyBKYW4gMSwgMTk3MCBhdCBtaWRuaWdodCBpbiBVVEMgdGltZVxuICAgKi9cbiAgc3RhdGljIHNldCBub3cobikge1xuICAgIG5vdyA9IG47XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSB0byBjcmVhdGUgRGF0ZVRpbWVzIGluLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBVc2UgdGhlIHZhbHVlIFwic3lzdGVtXCIgdG8gcmVzZXQgdGhpcyB2YWx1ZSB0byB0aGUgc3lzdGVtJ3MgdGltZSB6b25lLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0Wm9uZSh6b25lKSB7XG4gICAgZGVmYXVsdFpvbmUgPSB6b25lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgb2JqZWN0IGN1cnJlbnRseSB1c2VkIHRvIGNyZWF0ZSBEYXRlVGltZXMuIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUgKHRoZSBvbmUgc2V0IG9uIHRoZSBtYWNoaW5lIHRoYXQgcnVucyB0aGlzIGNvZGUpLlxuICAgKiBAdHlwZSB7Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFpvbmUoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVpvbmUoZGVmYXVsdFpvbmUsIFN5c3RlbVpvbmUuaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGdldCBkZWZhdWx0TG9jYWxlKCkge1xuICAgIHJldHVybiBkZWZhdWx0TG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIHNldCBkZWZhdWx0TG9jYWxlKGxvY2FsZSkge1xuICAgIGRlZmF1bHRMb2NhbGUgPSBsb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IG51bWJlcmluZyBzeXN0ZW0gdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGdldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbShudW1iZXJpbmdTeXN0ZW0pIHtcbiAgICBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nU3lzdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGdldCBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRPdXRwdXRDYWxlbmRhcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgb3V0cHV0IGNhbGVuZGFyIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBzZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKG91dHB1dENhbGVuZGFyKSB7XG4gICAgZGVmYXVsdE91dHB1dENhbGVuZGFyID0gb3V0cHV0Q2FsZW5kYXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdoZXRoZXIgTHV4b24gd2lsbCB0aHJvdyB3aGVuIGl0IGVuY291bnRlcnMgaW52YWxpZCBEYXRlVGltZXMsIER1cmF0aW9ucywgb3IgSW50ZXJ2YWxzXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGdldCB0aHJvd09uSW52YWxpZCgpIHtcbiAgICByZXR1cm4gdGhyb3dPbkludmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHdoZXRoZXIgTHV4b24gd2lsbCB0aHJvdyB3aGVuIGl0IGVuY291bnRlcnMgaW52YWxpZCBEYXRlVGltZXMsIER1cmF0aW9ucywgb3IgSW50ZXJ2YWxzXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIHNldCB0aHJvd09uSW52YWxpZCh0KSB7XG4gICAgdGhyb3dPbkludmFsaWQgPSB0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IEx1eG9uJ3MgZ2xvYmFsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLlxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlc2V0Q2FjaGVzKCkge1xuICAgIExvY2FsZS5yZXNldENhY2hlKCk7XG4gICAgSUFOQVpvbmUucmVzZXRDYWNoZSgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcGFkU3RhcnQsIHJvdW5kVG8sIGhhc1JlbGF0aXZlIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0ICogYXMgRW5nbGlzaCBmcm9tIFwiLi9lbmdsaXNoLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgRGF0ZVRpbWUgZnJvbSBcIi4uL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4uL3pvbmVzL0lBTkFab25lLmpzXCI7XG5cbi8vIHRvZG8gLSByZW1hcCBjYWNoaW5nXG5cbmxldCBpbnRsTEZDYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkTEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgZHRmID0gaW50bExGQ2FjaGVba2V5XTtcbiAgaWYgKCFkdGYpIHtcbiAgICBkdGYgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bExGQ2FjaGVba2V5XSA9IGR0ZjtcbiAgfVxuICByZXR1cm4gZHRmO1xufVxuXG5sZXQgaW50bERUQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGdldENhY2hlZERURihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBvcHRzXSk7XG4gIGxldCBkdGYgPSBpbnRsRFRDYWNoZVtrZXldO1xuICBpZiAoIWR0Zikge1xuICAgIGR0ZiA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bERUQ2FjaGVba2V5XSA9IGR0ZjtcbiAgfVxuICByZXR1cm4gZHRmO1xufVxuXG5sZXQgaW50bE51bUNhY2hlID0ge307XG5mdW5jdGlvbiBnZXRDYWNoZWRJTkYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgaW5mID0gaW50bE51bUNhY2hlW2tleV07XG4gIGlmICghaW5mKSB7XG4gICAgaW5mID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bE51bUNhY2hlW2tleV0gPSBpbmY7XG4gIH1cbiAgcmV0dXJuIGluZjtcbn1cblxubGV0IGludGxSZWxDYWNoZSA9IHt9O1xuZnVuY3Rpb24gZ2V0Q2FjaGVkUlRGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYmFzZSwgLi4uY2FjaGVLZXlPcHRzIH0gPSBvcHRzOyAvLyBleGNsdWRlIGBiYXNlYCBmcm9tIHRoZSBvcHRpb25zXG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIGNhY2hlS2V5T3B0c10pO1xuICBsZXQgaW5mID0gaW50bFJlbENhY2hlW2tleV07XG4gIGlmICghaW5mKSB7XG4gICAgaW5mID0gbmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bFJlbENhY2hlW2tleV0gPSBpbmY7XG4gIH1cbiAgcmV0dXJuIGluZjtcbn1cblxubGV0IHN5c0xvY2FsZUNhY2hlID0gbnVsbDtcbmZ1bmN0aW9uIHN5c3RlbUxvY2FsZSgpIHtcbiAgaWYgKHN5c0xvY2FsZUNhY2hlKSB7XG4gICAgcmV0dXJuIHN5c0xvY2FsZUNhY2hlO1xuICB9IGVsc2Uge1xuICAgIHN5c0xvY2FsZUNhY2hlID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7XG4gICAgcmV0dXJuIHN5c0xvY2FsZUNhY2hlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYWxlU3RyaW5nKGxvY2FsZVN0cikge1xuICAvLyBJIHJlYWxseSB3YW50IHRvIGF2b2lkIHdyaXRpbmcgYSBCQ1AgNDcgcGFyc2VyXG4gIC8vIHNlZSwgZS5nLiBodHRwczovL2dpdGh1Yi5jb20vd29vb3JtL2JjcC00N1xuICAvLyBJbnN0ZWFkLCB3ZSdsbCBkbyB0aGlzOlxuXG4gIC8vIGEpIGlmIHRoZSBzdHJpbmcgaGFzIG5vIC11IGV4dGVuc2lvbnMsIGp1c3QgbGVhdmUgaXQgYWxvbmVcbiAgLy8gYikgaWYgaXQgZG9lcywgdXNlIEludGwgdG8gcmVzb2x2ZSBldmVyeXRoaW5nXG4gIC8vIGMpIGlmIEludGwgZmFpbHMsIHRyeSBhZ2FpbiB3aXRob3V0IHRoZSAtdVxuXG4gIGNvbnN0IHVJbmRleCA9IGxvY2FsZVN0ci5pbmRleE9mKFwiLXUtXCIpO1xuICBpZiAodUluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBbbG9jYWxlU3RyXTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBjb25zdCBzbWFsbGVyID0gbG9jYWxlU3RyLnN1YnN0cmluZygwLCB1SW5kZXgpO1xuICAgIHRyeSB7XG4gICAgICBvcHRpb25zID0gZ2V0Q2FjaGVkRFRGKGxvY2FsZVN0cikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihzbWFsbGVyKS5yZXNvbHZlZE9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG51bWJlcmluZ1N5c3RlbSwgY2FsZW5kYXIgfSA9IG9wdGlvbnM7XG4gICAgLy8gcmV0dXJuIHRoZSBzbWFsbGVyIG9uZSBzbyB0aGF0IHdlIGNhbiBhcHBlbmQgdGhlIGNhbGVuZGFyIGFuZCBudW1iZXJpbmcgb3ZlcnJpZGVzIHRvIGl0XG4gICAgcmV0dXJuIFtzbWFsbGVyLCBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRsQ29uZmlnU3RyaW5nKGxvY2FsZVN0ciwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikge1xuICBpZiAob3V0cHV0Q2FsZW5kYXIgfHwgbnVtYmVyaW5nU3lzdGVtKSB7XG4gICAgbG9jYWxlU3RyICs9IFwiLXVcIjtcblxuICAgIGlmIChvdXRwdXRDYWxlbmRhcikge1xuICAgICAgbG9jYWxlU3RyICs9IGAtY2EtJHtvdXRwdXRDYWxlbmRhcn1gO1xuICAgIH1cblxuICAgIGlmIChudW1iZXJpbmdTeXN0ZW0pIHtcbiAgICAgIGxvY2FsZVN0ciArPSBgLW51LSR7bnVtYmVyaW5nU3lzdGVtfWA7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxvY2FsZVN0cjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBNb250aHMoZikge1xuICBjb25zdCBtcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgY29uc3QgZHQgPSBEYXRlVGltZS51dGMoMjAxNiwgaSwgMSk7XG4gICAgbXMucHVzaChmKGR0KSk7XG4gIH1cbiAgcmV0dXJuIG1zO1xufVxuXG5mdW5jdGlvbiBtYXBXZWVrZGF5cyhmKSB7XG4gIGNvbnN0IG1zID0gW107XG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IDc7IGkrKykge1xuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMTYsIDExLCAxMyArIGkpO1xuICAgIG1zLnB1c2goZihkdCkpO1xuICB9XG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbGlzdFN0dWZmKGxvYywgbGVuZ3RoLCBkZWZhdWx0T0ssIGVuZ2xpc2hGbiwgaW50bEZuKSB7XG4gIGNvbnN0IG1vZGUgPSBsb2MubGlzdGluZ01vZGUoZGVmYXVsdE9LKTtcblxuICBpZiAobW9kZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAobW9kZSA9PT0gXCJlblwiKSB7XG4gICAgcmV0dXJuIGVuZ2xpc2hGbihsZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpbnRsRm4obGVuZ3RoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0Zhc3ROdW1iZXJzKGxvYykge1xuICBpZiAobG9jLm51bWJlcmluZ1N5c3RlbSAmJiBsb2MubnVtYmVyaW5nU3lzdGVtICE9PSBcImxhdG5cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgbG9jLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCIgfHxcbiAgICAgICFsb2MubG9jYWxlIHx8XG4gICAgICBsb2MubG9jYWxlLnN0YXJ0c1dpdGgoXCJlblwiKSB8fFxuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jLmludGwpLnJlc29sdmVkT3B0aW9ucygpLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCJcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jbGFzcyBQb2x5TnVtYmVyRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoaW50bCwgZm9yY2VTaW1wbGUsIG9wdHMpIHtcbiAgICB0aGlzLnBhZFRvID0gb3B0cy5wYWRUbyB8fCAwO1xuICAgIHRoaXMuZmxvb3IgPSBvcHRzLmZsb29yIHx8IGZhbHNlO1xuXG4gICAgY29uc3QgeyBwYWRUbywgZmxvb3IsIC4uLm90aGVyT3B0cyB9ID0gb3B0cztcblxuICAgIGlmICghZm9yY2VTaW1wbGUgfHwgT2JqZWN0LmtleXMob3RoZXJPcHRzKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpbnRsT3B0cyA9IHsgdXNlR3JvdXBpbmc6IGZhbHNlLCAuLi5vcHRzIH07XG4gICAgICBpZiAob3B0cy5wYWRUbyA+IDApIGludGxPcHRzLm1pbmltdW1JbnRlZ2VyRGlnaXRzID0gb3B0cy5wYWRUbztcbiAgICAgIHRoaXMuaW5mID0gZ2V0Q2FjaGVkSU5GKGludGwsIGludGxPcHRzKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQoaSkge1xuICAgIGlmICh0aGlzLmluZikge1xuICAgICAgY29uc3QgZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IGk7XG4gICAgICByZXR1cm4gdGhpcy5pbmYuZm9ybWF0KGZpeGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdG8gbWF0Y2ggdGhlIGJyb3dzZXIncyBudW1iZXJmb3JtYXR0ZXIgZGVmYXVsdHNcbiAgICAgIGNvbnN0IGZpeGVkID0gdGhpcy5mbG9vciA/IE1hdGguZmxvb3IoaSkgOiByb3VuZFRvKGksIDMpO1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KGZpeGVkLCB0aGlzLnBhZFRvKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNsYXNzIFBvbHlEYXRlRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoZHQsIGludGwsIG9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuXG4gICAgbGV0IHo7XG4gICAgaWYgKGR0LnpvbmUuaXNVbml2ZXJzYWwpIHtcbiAgICAgIC8vIFVUQy04IG9yIEV0Yy9VVEMtOCBhcmUgbm90IHBhcnQgb2YgdHpkYXRhLCBvbmx5IEV0Yy9HTVQrOCBhbmQgdGhlIGxpa2UuXG4gICAgICAvLyBUaGF0IGlzIHdoeSBmaXhlZC1vZmZzZXQgVFogaXMgc2V0IHRvIHRoYXQgdW5sZXNzIGl0IGlzOlxuICAgICAgLy8gMS4gUmVwcmVzZW50aW5nIG9mZnNldCAwIHdoZW4gVVRDIGlzIHVzZWQgdG8gbWFpbnRhaW4gcHJldmlvdXMgYmVoYXZpb3IgYW5kIGRvZXMgbm90IGJlY29tZSBHTVQuXG4gICAgICAvLyAyLiBVbnN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcjpcbiAgICAgIC8vICAgIC0gc29tZSBkbyBub3Qgc3VwcG9ydCBFdGMvXG4gICAgICAvLyAgICAtIDwgRXRjL0dNVC0xNCwgPiBFdGMvR01UKzEyLCBhbmQgMzAtbWludXRlIG9yIDQ1LW1pbnV0ZSBvZmZzZXRzIGFyZSBub3QgcGFydCBvZiB0emRhdGFcbiAgICAgIGNvbnN0IGdtdE9mZnNldCA9IC0xICogKGR0Lm9mZnNldCAvIDYwKTtcbiAgICAgIGNvbnN0IG9mZnNldFogPSBnbXRPZmZzZXQgPj0gMCA/IGBFdGMvR01UKyR7Z210T2Zmc2V0fWAgOiBgRXRjL0dNVCR7Z210T2Zmc2V0fWA7XG4gICAgICBpZiAoZHQub2Zmc2V0ICE9PSAwICYmIElBTkFab25lLmNyZWF0ZShvZmZzZXRaKS52YWxpZCkge1xuICAgICAgICB6ID0gb2Zmc2V0WjtcbiAgICAgICAgdGhpcy5kdCA9IGR0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm90IGFsbCBmaXhlZC1vZmZzZXQgem9uZXMgbGlrZSBFdGMvKzQ6MzAgYXJlIHByZXNlbnQgaW4gdHpkYXRhLlxuICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIG1ha2UgZG8uIFR3byBjYXNlczpcbiAgICAgICAgLy8gMS4gVGhlIGZvcm1hdCBvcHRpb25zIHRlbGwgdXMgdG8gc2hvdyB0aGUgem9uZS4gV2UgY2FuJ3QgZG8gdGhhdCwgc28gdGhlIGJlc3RcbiAgICAgICAgLy8gd2UgY2FuIGRvIGlzIGZvcm1hdCB0aGUgZGF0ZSBpbiBVVEMuXG4gICAgICAgIC8vIDIuIFRoZSBmb3JtYXQgb3B0aW9ucyBkb24ndCB0ZWxsIHVzIHRvIHNob3cgdGhlIHpvbmUuIFRoZW4gd2UgY2FuIGFkanVzdCB0aGVtXG4gICAgICAgIC8vIHRoZSB0aW1lIGFuZCB0ZWxsIHRoZSBmb3JtYXR0ZXIgdG8gc2hvdyBpdCB0byB1cyBpbiBVVEMsIHNvIHRoYXQgdGhlIHRpbWUgaXMgcmlnaHRcbiAgICAgICAgLy8gYW5kIHRoZSBiYWQgem9uZSBkb2Vzbid0IHNob3cgdXAuXG4gICAgICAgIHogPSBcIlVUQ1wiO1xuICAgICAgICBpZiAob3B0cy50aW1lWm9uZU5hbWUpIHtcbiAgICAgICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kdCA9IGR0Lm9mZnNldCA9PT0gMCA/IGR0IDogRGF0ZVRpbWUuZnJvbU1pbGxpcyhkdC50cyArIGR0Lm9mZnNldCAqIDYwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGR0LnpvbmUudHlwZSA9PT0gXCJzeXN0ZW1cIikge1xuICAgICAgdGhpcy5kdCA9IGR0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICB6ID0gZHQuem9uZS5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGludGxPcHRzID0geyAuLi50aGlzLm9wdHMgfTtcbiAgICBpZiAoeikge1xuICAgICAgaW50bE9wdHMudGltZVpvbmUgPSB6O1xuICAgIH1cbiAgICB0aGlzLmR0ZiA9IGdldENhY2hlZERURihpbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICBmb3JtYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdCh0aGlzLmR0LnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgZm9ybWF0VG9QYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5kdGYuZm9ybWF0VG9QYXJ0cyh0aGlzLmR0LnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5yZXNvbHZlZE9wdGlvbnMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBvbHlSZWxGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihpbnRsLCBpc0VuZ2xpc2gsIG9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSB7IHN0eWxlOiBcImxvbmdcIiwgLi4ub3B0cyB9O1xuICAgIGlmICghaXNFbmdsaXNoICYmIGhhc1JlbGF0aXZlKCkpIHtcbiAgICAgIHRoaXMucnRmID0gZ2V0Q2FjaGVkUlRGKGludGwsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdChjb3VudCwgdW5pdCkge1xuICAgIGlmICh0aGlzLnJ0Zikge1xuICAgICAgcmV0dXJuIHRoaXMucnRmLmZvcm1hdChjb3VudCwgdW5pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFbmdsaXNoLmZvcm1hdFJlbGF0aXZlVGltZSh1bml0LCBjb3VudCwgdGhpcy5vcHRzLm51bWVyaWMsIHRoaXMub3B0cy5zdHlsZSAhPT0gXCJsb25nXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxlIHtcbiAgc3RhdGljIGZyb21PcHRzKG9wdHMpIHtcbiAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShvcHRzLmxvY2FsZSwgb3B0cy5udW1iZXJpbmdTeXN0ZW0sIG9wdHMub3V0cHV0Q2FsZW5kYXIsIG9wdHMuZGVmYXVsdFRvRU4pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIsIGRlZmF1bHRUb0VOID0gZmFsc2UpIHtcbiAgICBjb25zdCBzcGVjaWZpZWRMb2NhbGUgPSBsb2NhbGUgfHwgU2V0dGluZ3MuZGVmYXVsdExvY2FsZTtcbiAgICAvLyB0aGUgc3lzdGVtIGxvY2FsZSBpcyB1c2VmdWwgZm9yIGh1bWFuIHJlYWRhYmxlIHN0cmluZ3MgYnV0IGFubm95aW5nIGZvciBwYXJzaW5nL2Zvcm1hdHRpbmcga25vd24gZm9ybWF0c1xuICAgIGNvbnN0IGxvY2FsZVIgPSBzcGVjaWZpZWRMb2NhbGUgfHwgKGRlZmF1bHRUb0VOID8gXCJlbi1VU1wiIDogc3lzdGVtTG9jYWxlKCkpO1xuICAgIGNvbnN0IG51bWJlcmluZ1N5c3RlbVIgPSBudW1iZXJpbmdTeXN0ZW0gfHwgU2V0dGluZ3MuZGVmYXVsdE51bWJlcmluZ1N5c3RlbTtcbiAgICBjb25zdCBvdXRwdXRDYWxlbmRhclIgPSBvdXRwdXRDYWxlbmRhciB8fCBTZXR0aW5ncy5kZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gICAgcmV0dXJuIG5ldyBMb2NhbGUobG9jYWxlUiwgbnVtYmVyaW5nU3lzdGVtUiwgb3V0cHV0Q2FsZW5kYXJSLCBzcGVjaWZpZWRMb2NhbGUpO1xuICB9XG5cbiAgc3RhdGljIHJlc2V0Q2FjaGUoKSB7XG4gICAgc3lzTG9jYWxlQ2FjaGUgPSBudWxsO1xuICAgIGludGxEVENhY2hlID0ge307XG4gICAgaW50bE51bUNhY2hlID0ge307XG4gICAgaW50bFJlbENhY2hlID0ge307XG4gIH1cblxuICBzdGF0aWMgZnJvbU9iamVjdCh7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhciB9ID0ge30pIHtcbiAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobG9jYWxlLCBudW1iZXJpbmcsIG91dHB1dENhbGVuZGFyLCBzcGVjaWZpZWRMb2NhbGUpIHtcbiAgICBjb25zdCBbcGFyc2VkTG9jYWxlLCBwYXJzZWROdW1iZXJpbmdTeXN0ZW0sIHBhcnNlZE91dHB1dENhbGVuZGFyXSA9IHBhcnNlTG9jYWxlU3RyaW5nKGxvY2FsZSk7XG5cbiAgICB0aGlzLmxvY2FsZSA9IHBhcnNlZExvY2FsZTtcbiAgICB0aGlzLm51bWJlcmluZ1N5c3RlbSA9IG51bWJlcmluZyB8fCBwYXJzZWROdW1iZXJpbmdTeXN0ZW0gfHwgbnVsbDtcbiAgICB0aGlzLm91dHB1dENhbGVuZGFyID0gb3V0cHV0Q2FsZW5kYXIgfHwgcGFyc2VkT3V0cHV0Q2FsZW5kYXIgfHwgbnVsbDtcbiAgICB0aGlzLmludGwgPSBpbnRsQ29uZmlnU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLm51bWJlcmluZ1N5c3RlbSwgdGhpcy5vdXRwdXRDYWxlbmRhcik7XG5cbiAgICB0aGlzLndlZWtkYXlzQ2FjaGUgPSB7IGZvcm1hdDoge30sIHN0YW5kYWxvbmU6IHt9IH07XG4gICAgdGhpcy5tb250aHNDYWNoZSA9IHsgZm9ybWF0OiB7fSwgc3RhbmRhbG9uZToge30gfTtcbiAgICB0aGlzLm1lcmlkaWVtQ2FjaGUgPSBudWxsO1xuICAgIHRoaXMuZXJhQ2FjaGUgPSB7fTtcblxuICAgIHRoaXMuc3BlY2lmaWVkTG9jYWxlID0gc3BlY2lmaWVkTG9jYWxlO1xuICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGZhc3ROdW1iZXJzKCkge1xuICAgIGlmICh0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID09IG51bGwpIHtcbiAgICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBzdXBwb3J0c0Zhc3ROdW1iZXJzKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkO1xuICB9XG5cbiAgbGlzdGluZ01vZGUoKSB7XG4gICAgY29uc3QgaXNBY3R1YWxseUVuID0gdGhpcy5pc0VuZ2xpc2goKTtcbiAgICBjb25zdCBoYXNOb1dlaXJkbmVzcyA9XG4gICAgICAodGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IG51bGwgfHwgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IFwibGF0blwiKSAmJlxuICAgICAgKHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IG51bGwgfHwgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gXCJncmVnb3J5XCIpO1xuICAgIHJldHVybiBpc0FjdHVhbGx5RW4gJiYgaGFzTm9XZWlyZG5lc3MgPyBcImVuXCIgOiBcImludGxcIjtcbiAgfVxuXG4gIGNsb25lKGFsdHMpIHtcbiAgICBpZiAoIWFsdHMgfHwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYWx0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUoXG4gICAgICAgIGFsdHMubG9jYWxlIHx8IHRoaXMuc3BlY2lmaWVkTG9jYWxlLFxuICAgICAgICBhbHRzLm51bWJlcmluZ1N5c3RlbSB8fCB0aGlzLm51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgYWx0cy5vdXRwdXRDYWxlbmRhciB8fCB0aGlzLm91dHB1dENhbGVuZGFyLFxuICAgICAgICBhbHRzLmRlZmF1bHRUb0VOIHx8IGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlZGVmYXVsdFRvRU4oYWx0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi5hbHRzLCBkZWZhdWx0VG9FTjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlZGVmYXVsdFRvU3lzdGVtKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cywgZGVmYXVsdFRvRU46IGZhbHNlIH0pO1xuICB9XG5cbiAgbW9udGhzKGxlbmd0aCwgZm9ybWF0ID0gZmFsc2UsIGRlZmF1bHRPSyA9IHRydWUpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCBFbmdsaXNoLm1vbnRocywgKCkgPT4ge1xuICAgICAgY29uc3QgaW50bCA9IGZvcm1hdCA/IHsgbW9udGg6IGxlbmd0aCwgZGF5OiBcIm51bWVyaWNcIiB9IDogeyBtb250aDogbGVuZ3RoIH0sXG4gICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/IFwiZm9ybWF0XCIgOiBcInN0YW5kYWxvbmVcIjtcbiAgICAgIGlmICghdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0gPSBtYXBNb250aHMoKGR0KSA9PiB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwibW9udGhcIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdO1xuICAgIH0pO1xuICB9XG5cbiAgd2Vla2RheXMobGVuZ3RoLCBmb3JtYXQgPSBmYWxzZSwgZGVmYXVsdE9LID0gdHJ1ZSkge1xuICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIEVuZ2xpc2gud2Vla2RheXMsICgpID0+IHtcbiAgICAgIGNvbnN0IGludGwgPSBmb3JtYXRcbiAgICAgICAgICA/IHsgd2Vla2RheTogbGVuZ3RoLCB5ZWFyOiBcIm51bWVyaWNcIiwgbW9udGg6IFwibG9uZ1wiLCBkYXk6IFwibnVtZXJpY1wiIH1cbiAgICAgICAgICA6IHsgd2Vla2RheTogbGVuZ3RoIH0sXG4gICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/IFwiZm9ybWF0XCIgOiBcInN0YW5kYWxvbmVcIjtcbiAgICAgIGlmICghdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLndlZWtkYXlzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwV2Vla2RheXMoKGR0KSA9PlxuICAgICAgICAgIHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJ3ZWVrZGF5XCIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIG1lcmlkaWVtcyhkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZihcbiAgICAgIHRoaXMsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBkZWZhdWx0T0ssXG4gICAgICAoKSA9PiBFbmdsaXNoLm1lcmlkaWVtcyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gSW4gdGhlb3J5IHRoZXJlIGNvdWxkIGJlIGFyaWJpdHJhcnkgZGF5IHBlcmlvZHMuIFdlJ3JlIGdvbm5hIGFzc3VtZSB0aGVyZSBhcmUgZXhhY3RseSB0d29cbiAgICAgICAgLy8gZm9yIEFNIGFuZCBQTS4gVGhpcyBpcyBwcm9iYWJseSB3cm9uZywgYnV0IGl0J3MgbWFrZXMgcGFyc2luZyB3YXkgZWFzaWVyLlxuICAgICAgICBpZiAoIXRoaXMubWVyaWRpZW1DYWNoZSkge1xuICAgICAgICAgIGNvbnN0IGludGwgPSB7IGhvdXI6IFwibnVtZXJpY1wiLCBob3VyQ3ljbGU6IFwiaDEyXCIgfTtcbiAgICAgICAgICB0aGlzLm1lcmlkaWVtQ2FjaGUgPSBbRGF0ZVRpbWUudXRjKDIwMTYsIDExLCAxMywgOSksIERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDE5KV0ubWFwKFxuICAgICAgICAgICAgKGR0KSA9PiB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwiZGF5cGVyaW9kXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm1lcmlkaWVtQ2FjaGU7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGVyYXMobGVuZ3RoLCBkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgRW5nbGlzaC5lcmFzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0geyBlcmE6IGxlbmd0aCB9O1xuXG4gICAgICAvLyBUaGlzIGlzIHByb2JsZW1hdGljLiBEaWZmZXJlbnQgY2FsZW5kYXJzIGFyZSBnb2luZyB0byBkZWZpbmUgZXJhcyB0b3RhbGx5IGRpZmZlcmVudGx5LiBXaGF0IEkgbmVlZCBpcyB0aGUgbWluaW11bSBzZXQgb2YgZGF0ZXNcbiAgICAgIC8vIHRvIGRlZmluaXRlbHkgZW51bWVyYXRlIHRoZW0uXG4gICAgICBpZiAoIXRoaXMuZXJhQ2FjaGVbbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLmVyYUNhY2hlW2xlbmd0aF0gPSBbRGF0ZVRpbWUudXRjKC00MCwgMSwgMSksIERhdGVUaW1lLnV0YygyMDE3LCAxLCAxKV0ubWFwKChkdCkgPT5cbiAgICAgICAgICB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwiZXJhXCIpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmVyYUNhY2hlW2xlbmd0aF07XG4gICAgfSk7XG4gIH1cblxuICBleHRyYWN0KGR0LCBpbnRsT3B0cywgZmllbGQpIHtcbiAgICBjb25zdCBkZiA9IHRoaXMuZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzKSxcbiAgICAgIHJlc3VsdHMgPSBkZi5mb3JtYXRUb1BhcnRzKCksXG4gICAgICBtYXRjaGluZyA9IHJlc3VsdHMuZmluZCgobSkgPT4gbS50eXBlLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkKTtcbiAgICByZXR1cm4gbWF0Y2hpbmcgPyBtYXRjaGluZy52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBudW1iZXJGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgLy8gdGhpcyBmb3JjZXNpbXBsZSBvcHRpb24gaXMgbmV2ZXIgdXNlZCAodGhlIG9ubHkgY2FsbGVyIHNob3J0LWNpcmN1aXRzIG9uIGl0LCBidXQgaXQgc2VlbXMgc2FmZXIgdG8gbGVhdmUpXG4gICAgLy8gKGluIGNvbnRyYXN0LCB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9uIGlzIHVzZWQgaGVhdmlseSlcbiAgICByZXR1cm4gbmV3IFBvbHlOdW1iZXJGb3JtYXR0ZXIodGhpcy5pbnRsLCBvcHRzLmZvcmNlU2ltcGxlIHx8IHRoaXMuZmFzdE51bWJlcnMsIG9wdHMpO1xuICB9XG5cbiAgZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBvbHlEYXRlRm9ybWF0dGVyKGR0LCB0aGlzLmludGwsIGludGxPcHRzKTtcbiAgfVxuXG4gIHJlbEZvcm1hdHRlcihvcHRzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBvbHlSZWxGb3JtYXR0ZXIodGhpcy5pbnRsLCB0aGlzLmlzRW5nbGlzaCgpLCBvcHRzKTtcbiAgfVxuXG4gIGxpc3RGb3JtYXR0ZXIob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIGdldENhY2hlZExGKHRoaXMuaW50bCwgb3B0cyk7XG4gIH1cblxuICBpc0VuZ2xpc2goKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9jYWxlID09PSBcImVuXCIgfHxcbiAgICAgIHRoaXMubG9jYWxlLnRvTG93ZXJDYXNlKCkgPT09IFwiZW4tdXNcIiB8fFxuICAgICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGUuc3RhcnRzV2l0aChcImVuLXVzXCIpXG4gICAgKTtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxvY2FsZSA9PT0gb3RoZXIubG9jYWxlICYmXG4gICAgICB0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gb3RoZXIubnVtYmVyaW5nU3lzdGVtICYmXG4gICAgICB0aGlzLm91dHB1dENhbGVuZGFyID09PSBvdGhlci5vdXRwdXRDYWxlbmRhclxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICB1bnRydW5jYXRlWWVhcixcbiAgc2lnbmVkT2Zmc2V0LFxuICBwYXJzZUludGVnZXIsXG4gIHBhcnNlTWlsbGlzLFxuICBpYW5hUmVnZXgsXG4gIGlzVW5kZWZpbmVkLFxuICBwYXJzZUZsb2F0aW5nXG59IGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCAqIGFzIEVuZ2xpc2ggZnJvbSBcIi4vZW5nbGlzaC5qc1wiO1xuaW1wb3J0IEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIFwiLi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgSUFOQVpvbmUgZnJvbSBcIi4uL3pvbmVzL0lBTkFab25lLmpzXCI7XG5cbi8qXG4gKiBUaGlzIGZpbGUgaGFuZGxlcyBwYXJzaW5nIGZvciB3ZWxsLXNwZWNpZmllZCBmb3JtYXRzLiBIZXJlJ3MgaG93IGl0IHdvcmtzOlxuICogVHdvIHRoaW5ncyBnbyBpbnRvIHBhcnNpbmc6IGEgcmVnZXggdG8gbWF0Y2ggd2l0aCBhbmQgYW4gZXh0cmFjdG9yIHRvIHRha2UgYXBhcnQgdGhlIGdyb3VwcyBpbiB0aGUgbWF0Y2guXG4gKiBBbiBleHRyYWN0b3IgaXMganVzdCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSByZWdleCBtYXRjaCBhcnJheSBhbmQgcmV0dXJucyBhIHsgeWVhcjogLi4uLCBtb250aDogLi4uIH0gb2JqZWN0XG4gKiBwYXJzZSgpIGRvZXMgdGhlIHdvcmsgb2YgZXhlY3V0aW5nIHRoZSByZWdleCBhbmQgYXBwbHlpbmcgdGhlIGV4dHJhY3Rvci4gSXQgdGFrZXMgbXVsdGlwbGUgcmVnZXgvZXh0cmFjdG9yIHBhaXJzIHRvIHRyeSBpbiBzZXF1ZW5jZS5cbiAqIEV4dHJhY3RvcnMgY2FuIHRha2UgYSBcImN1cnNvclwiIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0IGluIHRoZSBtYXRjaCB0byBsb29rIGF0LiBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gY29tYmluZSBleHRyYWN0b3JzLlxuICogY29tYmluZUV4dHJhY3RvcnMoKSBkb2VzIHRoZSB3b3JrIG9mIGNvbWJpbmluZyB0aGVtLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBjdXJzb3IgdGhyb3VnaCBtdWx0aXBsZSBleHRyYWN0aW9ucy5cbiAqIFNvbWUgZXh0cmFjdGlvbnMgYXJlIHN1cGVyIGR1bWIgYW5kIHNpbXBsZVBhcnNlIGFuZCBmcm9tU3RyaW5ncyBoZWxwIERSWSB0aGVtLlxuICovXG5cbmZ1bmN0aW9uIGNvbWJpbmVSZWdleGVzKC4uLnJlZ2V4ZXMpIHtcbiAgY29uc3QgZnVsbCA9IHJlZ2V4ZXMucmVkdWNlKChmLCByKSA9PiBmICsgci5zb3VyY2UsIFwiXCIpO1xuICByZXR1cm4gUmVnRXhwKGBeJHtmdWxsfSRgKTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUV4dHJhY3RvcnMoLi4uZXh0cmFjdG9ycykge1xuICByZXR1cm4gbSA9PlxuICAgIGV4dHJhY3RvcnNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChbbWVyZ2VkVmFscywgbWVyZ2VkWm9uZSwgY3Vyc29yXSwgZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBbdmFsLCB6b25lLCBuZXh0XSA9IGV4KG0sIGN1cnNvcik7XG4gICAgICAgICAgcmV0dXJuIFt7IC4uLm1lcmdlZFZhbHMsIC4uLnZhbCB9LCB6b25lIHx8IG1lcmdlZFpvbmUsIG5leHRdO1xuICAgICAgICB9LFxuICAgICAgICBbe30sIG51bGwsIDFdXG4gICAgICApXG4gICAgICAuc2xpY2UoMCwgMik7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHMsIC4uLnBhdHRlcm5zKSB7XG4gIGlmIChzID09IG51bGwpIHtcbiAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICB9XG5cbiAgZm9yIChjb25zdCBbcmVnZXgsIGV4dHJhY3Rvcl0gb2YgcGF0dGVybnMpIHtcbiAgICBjb25zdCBtID0gcmVnZXguZXhlYyhzKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIGV4dHJhY3RvcihtKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtudWxsLCBudWxsXTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlUGFyc2UoLi4ua2V5cykge1xuICByZXR1cm4gKG1hdGNoLCBjdXJzb3IpID0+IHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXRba2V5c1tpXV0gPSBwYXJzZUludGVnZXIobWF0Y2hbY3Vyc29yICsgaV0pO1xuICAgIH1cbiAgICByZXR1cm4gW3JldCwgbnVsbCwgY3Vyc29yICsgaV07XG4gIH07XG59XG5cbi8vIElTTyBhbmQgU1FMIHBhcnNpbmdcbmNvbnN0IG9mZnNldFJlZ2V4ID0gLyg/OihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8pLztcbmNvbnN0IGlzb0V4dGVuZGVkWm9uZSA9IGAoPzoke29mZnNldFJlZ2V4LnNvdXJjZX0/KD86XFxcXFsoJHtpYW5hUmVnZXguc291cmNlfSlcXFxcXSk/KT9gO1xuY29uc3QgaXNvVGltZUJhc2VSZWdleCA9IC8oXFxkXFxkKSg/Ojo/KFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Wy4sXShcXGR7MSwzMH0pKT8pPyk/LztcbmNvbnN0IGlzb1RpbWVSZWdleCA9IFJlZ0V4cChgJHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0ke2lzb0V4dGVuZGVkWm9uZX1gKTtcbmNvbnN0IGlzb1RpbWVFeHRlbnNpb25SZWdleCA9IFJlZ0V4cChgKD86VCR7aXNvVGltZVJlZ2V4LnNvdXJjZX0pP2ApO1xuY29uc3QgaXNvWW1kUmVnZXggPSAvKFsrLV1cXGR7Nn18XFxkezR9KSg/Oi0/KFxcZFxcZCkoPzotPyhcXGRcXGQpKT8pPy87XG5jb25zdCBpc29XZWVrUmVnZXggPSAvKFxcZHs0fSktP1coXFxkXFxkKSg/Oi0/KFxcZCkpPy87XG5jb25zdCBpc29PcmRpbmFsUmVnZXggPSAvKFxcZHs0fSktPyhcXGR7M30pLztcbmNvbnN0IGV4dHJhY3RJU09XZWVrRGF0YSA9IHNpbXBsZVBhcnNlKFwid2Vla1llYXJcIiwgXCJ3ZWVrTnVtYmVyXCIsIFwid2Vla0RheVwiKTtcbmNvbnN0IGV4dHJhY3RJU09PcmRpbmFsRGF0YSA9IHNpbXBsZVBhcnNlKFwieWVhclwiLCBcIm9yZGluYWxcIik7XG5jb25zdCBzcWxZbWRSZWdleCA9IC8oXFxkezR9KS0oXFxkXFxkKS0oXFxkXFxkKS87IC8vIGR1bWJlZC1kb3duIHZlcnNpb24gb2YgdGhlIElTTyBvbmVcbmNvbnN0IHNxbFRpbWVSZWdleCA9IFJlZ0V4cChcbiAgYCR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9ID8oPzoke29mZnNldFJlZ2V4LnNvdXJjZX18KCR7aWFuYVJlZ2V4LnNvdXJjZX0pKT9gXG4pO1xuY29uc3Qgc3FsVGltZUV4dGVuc2lvblJlZ2V4ID0gUmVnRXhwKGAoPzogJHtzcWxUaW1lUmVnZXguc291cmNlfSk/YCk7XG5cbmZ1bmN0aW9uIGludChtYXRjaCwgcG9zLCBmYWxsYmFjaykge1xuICBjb25zdCBtID0gbWF0Y2hbcG9zXTtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKG0pID8gZmFsbGJhY2sgOiBwYXJzZUludGVnZXIobSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJU09ZbWQobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHllYXI6IGludChtYXRjaCwgY3Vyc29yKSxcbiAgICBtb250aDogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAxKSxcbiAgICBkYXk6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMSlcbiAgfTtcblxuICByZXR1cm4gW2l0ZW0sIG51bGwsIGN1cnNvciArIDNdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPVGltZShtYXRjaCwgY3Vyc29yKSB7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgaG91cnM6IGludChtYXRjaCwgY3Vyc29yLCAwKSxcbiAgICBtaW51dGVzOiBpbnQobWF0Y2gsIGN1cnNvciArIDEsIDApLFxuICAgIHNlY29uZHM6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMCksXG4gICAgbWlsbGlzZWNvbmRzOiBwYXJzZU1pbGxpcyhtYXRjaFtjdXJzb3IgKyAzXSlcbiAgfTtcblxuICByZXR1cm4gW2l0ZW0sIG51bGwsIGN1cnNvciArIDRdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SVNPT2Zmc2V0KG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3QgbG9jYWwgPSAhbWF0Y2hbY3Vyc29yXSAmJiAhbWF0Y2hbY3Vyc29yICsgMV0sXG4gICAgZnVsbE9mZnNldCA9IHNpZ25lZE9mZnNldChtYXRjaFtjdXJzb3IgKyAxXSwgbWF0Y2hbY3Vyc29yICsgMl0pLFxuICAgIHpvbmUgPSBsb2NhbCA/IG51bGwgOiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoZnVsbE9mZnNldCk7XG4gIHJldHVybiBbe30sIHpvbmUsIGN1cnNvciArIDNdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SUFOQVpvbmUobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCB6b25lID0gbWF0Y2hbY3Vyc29yXSA/IElBTkFab25lLmNyZWF0ZShtYXRjaFtjdXJzb3JdKSA6IG51bGw7XG4gIHJldHVybiBbe30sIHpvbmUsIGN1cnNvciArIDFdO1xufVxuXG4vLyBJU08gdGltZSBwYXJzaW5nXG5cbmNvbnN0IGlzb1RpbWVPbmx5ID0gUmVnRXhwKGBeVD8ke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSRgKTtcblxuLy8gSVNPIGR1cmF0aW9uIHBhcnNpbmdcblxuY29uc3QgaXNvRHVyYXRpb24gPSAvXi0/UCg/Oig/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KVkpPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KU0pPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KVcpPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KUQpPyg/OlQoPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylIKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0pKD86Wy4sXSgtP1xcZHsxLDIwfSkpP1MpPyk/KSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0SVNPRHVyYXRpb24obWF0Y2gpIHtcbiAgY29uc3QgW1xuICAgIHMsXG4gICAgeWVhclN0cixcbiAgICBtb250aFN0cixcbiAgICB3ZWVrU3RyLFxuICAgIGRheVN0cixcbiAgICBob3VyU3RyLFxuICAgIG1pbnV0ZVN0cixcbiAgICBzZWNvbmRTdHIsXG4gICAgbWlsbGlzZWNvbmRzU3RyXG4gIF0gPSBtYXRjaDtcblxuICBjb25zdCBoYXNOZWdhdGl2ZVByZWZpeCA9IHNbMF0gPT09IFwiLVwiO1xuICBjb25zdCBuZWdhdGl2ZVNlY29uZHMgPSBzZWNvbmRTdHIgJiYgc2Vjb25kU3RyWzBdID09PSBcIi1cIjtcblxuICBjb25zdCBtYXliZU5lZ2F0ZSA9IChudW0sIGZvcmNlID0gZmFsc2UpID0+XG4gICAgbnVtICE9PSB1bmRlZmluZWQgJiYgKGZvcmNlIHx8IChudW0gJiYgaGFzTmVnYXRpdmVQcmVmaXgpKSA/IC1udW0gOiBudW07XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB5ZWFyczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh5ZWFyU3RyKSksXG4gICAgICBtb250aHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcobW9udGhTdHIpKSxcbiAgICAgIHdlZWtzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKHdlZWtTdHIpKSxcbiAgICAgIGRheXM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoZGF5U3RyKSksXG4gICAgICBob3VyczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhob3VyU3RyKSksXG4gICAgICBtaW51dGVzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1pbnV0ZVN0cikpLFxuICAgICAgc2Vjb25kczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhzZWNvbmRTdHIpLCBzZWNvbmRTdHIgPT09IFwiLTBcIiksXG4gICAgICBtaWxsaXNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlTWlsbGlzKG1pbGxpc2Vjb25kc1N0ciksIG5lZ2F0aXZlU2Vjb25kcylcbiAgICB9XG4gIF07XG59XG5cbi8vIFRoZXNlIGFyZSBhIGxpdHRsZSBicmFpbmRlYWQuIEVEVCAqc2hvdWxkKiB0ZWxsIHVzIHRoYXQgd2UncmUgaW4sIHNheSwgQW1lcmljYS9OZXdfWW9ya1xuLy8gYW5kIG5vdCBqdXN0IHRoYXQgd2UncmUgaW4gLTI0MCAqcmlnaHQgbm93Ki4gQnV0IHNpbmNlIEkgZG9uJ3QgdGhpbmsgdGhlc2UgYXJlIHVzZWQgdGhhdCBvZnRlblxuLy8gSSdtIGp1c3QgZ29pbmcgdG8gaWdub3JlIHRoYXRcbmNvbnN0IG9ic09mZnNldHMgPSB7XG4gIEdNVDogMCxcbiAgRURUOiAtNCAqIDYwLFxuICBFU1Q6IC01ICogNjAsXG4gIENEVDogLTUgKiA2MCxcbiAgQ1NUOiAtNiAqIDYwLFxuICBNRFQ6IC02ICogNjAsXG4gIE1TVDogLTcgKiA2MCxcbiAgUERUOiAtNyAqIDYwLFxuICBQU1Q6IC04ICogNjBcbn07XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB5ZWFyOiB5ZWFyU3RyLmxlbmd0aCA9PT0gMiA/IHVudHJ1bmNhdGVZZWFyKHBhcnNlSW50ZWdlcih5ZWFyU3RyKSkgOiBwYXJzZUludGVnZXIoeWVhclN0ciksXG4gICAgbW9udGg6IEVuZ2xpc2gubW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0cikgKyAxLFxuICAgIGRheTogcGFyc2VJbnRlZ2VyKGRheVN0ciksXG4gICAgaG91cjogcGFyc2VJbnRlZ2VyKGhvdXJTdHIpLFxuICAgIG1pbnV0ZTogcGFyc2VJbnRlZ2VyKG1pbnV0ZVN0cilcbiAgfTtcblxuICBpZiAoc2Vjb25kU3RyKSByZXN1bHQuc2Vjb25kID0gcGFyc2VJbnRlZ2VyKHNlY29uZFN0cik7XG4gIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgcmVzdWx0LndlZWtkYXkgPVxuICAgICAgd2Vla2RheVN0ci5sZW5ndGggPiAzXG4gICAgICAgID8gRW5nbGlzaC53ZWVrZGF5c0xvbmcuaW5kZXhPZih3ZWVrZGF5U3RyKSArIDFcbiAgICAgICAgOiBFbmdsaXNoLndlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSArIDE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBSRkMgMjgyMi81MzIyXG5jb25zdCByZmMyODIyID0gL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSxcXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KD86KFsrLV1cXGRcXGQpKFxcZFxcZCkpKSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0UkZDMjgyMihtYXRjaCkge1xuICBjb25zdCBbXG4gICAgICAsXG4gICAgICB3ZWVrZGF5U3RyLFxuICAgICAgZGF5U3RyLFxuICAgICAgbW9udGhTdHIsXG4gICAgICB5ZWFyU3RyLFxuICAgICAgaG91clN0cixcbiAgICAgIG1pbnV0ZVN0cixcbiAgICAgIHNlY29uZFN0cixcbiAgICAgIG9ic09mZnNldCxcbiAgICAgIG1pbE9mZnNldCxcbiAgICAgIG9mZkhvdXJTdHIsXG4gICAgICBvZmZNaW51dGVTdHJcbiAgICBdID0gbWF0Y2gsXG4gICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChvYnNPZmZzZXQpIHtcbiAgICBvZmZzZXQgPSBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gIH0gZWxzZSBpZiAobWlsT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXQgPSBzaWduZWRPZmZzZXQob2ZmSG91clN0ciwgb2ZmTWludXRlU3RyKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzdWx0LCBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCldO1xufVxuXG5mdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gIHJldHVybiBzXG4gICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvKFxcc1xccyspL2csIFwiIFwiKVxuICAgIC50cmltKCk7XG59XG5cbi8vIGh0dHAgZGF0ZVxuXG5jb25zdCByZmMxMTIzID0gL14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSwgKFxcZFxcZCkgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoXFxkezR9KSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgcmZjODUwID0gL14oTW9uZGF5fFR1ZXNkYXl8V2VkbmVzZGF5fFRodXJzZGF5fEZyaWRheXxTYXR1cmRheXxTdW5kYXkpLCAoXFxkXFxkKS0oSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpLShcXGRcXGQpIChcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpIEdNVCQvLFxuICBhc2NpaSA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoIFxcZHxcXGRcXGQpIChcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpIChcXGR7NH0pJC87XG5cbmZ1bmN0aW9uIGV4dHJhY3RSRkMxMTIzT3I4NTAobWF0Y2gpIHtcbiAgY29uc3QgWywgd2Vla2RheVN0ciwgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHJdID0gbWF0Y2gsXG4gICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuICByZXR1cm4gW3Jlc3VsdCwgRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFTQ0lJKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyLCB5ZWFyU3RyXSA9IG1hdGNoLFxuICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07XG59XG5cbmNvbnN0IGlzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29ZbWRSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvV2Vla1JlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29PcmRpbmFsUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29UaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1RpbWVSZWdleCk7XG5cbmNvbnN0IGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoXG4gIGV4dHJhY3RJU09ZbWQsXG4gIGV4dHJhY3RJU09UaW1lLFxuICBleHRyYWN0SVNPT2Zmc2V0LFxuICBleHRyYWN0SUFOQVpvbmVcbik7XG5jb25zdCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhcbiAgZXh0cmFjdElTT1dlZWtEYXRhLFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuY29uc3QgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZSA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPT3JkaW5hbERhdGEsXG4gIGV4dHJhY3RJU09UaW1lLFxuICBleHRyYWN0SVNPT2Zmc2V0LFxuICBleHRyYWN0SUFOQVpvbmVcbik7XG5jb25zdCBleHRyYWN0SVNPVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuXG4vKlxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW2lzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSxcbiAgICBbaXNvV2Vla1dpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldF0sXG4gICAgW2lzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lXSxcbiAgICBbaXNvVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0XVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShzKSB7XG4gIHJldHVybiBwYXJzZShwcmVwcm9jZXNzUkZDMjgyMihzKSwgW3JmYzI4MjIsIGV4dHJhY3RSRkMyODIyXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhUVFBEYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKFxuICAgIHMsXG4gICAgW3JmYzExMjMsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLFxuICAgIFtyZmM4NTAsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLFxuICAgIFthc2NpaSwgZXh0cmFjdEFTQ0lJXVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EdXJhdGlvbihzKSB7XG4gIHJldHVybiBwYXJzZShzLCBbaXNvRHVyYXRpb24sIGV4dHJhY3RJU09EdXJhdGlvbl0pO1xufVxuXG5jb25zdCBleHRyYWN0SVNPVGltZU9ubHkgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPVGltZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlTT1RpbWVPbmx5KHMpIHtcbiAgcmV0dXJuIHBhcnNlKHMsIFtpc29UaW1lT25seSwgZXh0cmFjdElTT1RpbWVPbmx5XSk7XG59XG5cbmNvbnN0IHNxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhzcWxZbWRSZWdleCwgc3FsVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IHNxbFRpbWVDb21iaW5lZFJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsVGltZVJlZ2V4KTtcblxuY29uc3QgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZSA9IGNvbWJpbmVFeHRyYWN0b3JzKFxuICBleHRyYWN0SVNPVGltZSxcbiAgZXh0cmFjdElTT09mZnNldCxcbiAgZXh0cmFjdElBTkFab25lXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTUUwocykge1xuICByZXR1cm4gcGFyc2UoXG4gICAgcyxcbiAgICBbc3FsWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1ltZFRpbWVBbmRPZmZzZXRdLFxuICAgIFtzcWxUaW1lQ29tYmluZWRSZWdleCwgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZV1cbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgSW52YWxpZER1cmF0aW9uRXJyb3IsIEludmFsaWRVbml0RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vaW1wbC9mb3JtYXR0ZXIuanNcIjtcbmltcG9ydCBJbnZhbGlkIGZyb20gXCIuL2ltcGwvaW52YWxpZC5qc1wiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwiLi9pbXBsL2xvY2FsZS5qc1wiO1xuaW1wb3J0IHsgcGFyc2VJU09EdXJhdGlvbiwgcGFyc2VJU09UaW1lT25seSB9IGZyb20gXCIuL2ltcGwvcmVnZXhQYXJzZXIuanNcIjtcbmltcG9ydCB7XG4gIGFzTnVtYmVyLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaXNOdW1iZXIsXG4gIGlzVW5kZWZpbmVkLFxuICBub3JtYWxpemVPYmplY3QsXG4gIHJvdW5kVG8sXG59IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5cbmNvbnN0IElOVkFMSUQgPSBcIkludmFsaWQgRHVyYXRpb25cIjtcblxuLy8gdW5pdCBjb252ZXJzaW9uIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IGxvd09yZGVyTWF0cml4ID0ge1xuICAgIHdlZWtzOiB7XG4gICAgICBkYXlzOiA3LFxuICAgICAgaG91cnM6IDcgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IDcgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICBkYXlzOiB7XG4gICAgICBob3VyczogMjQsXG4gICAgICBtaW51dGVzOiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgaG91cnM6IHsgbWludXRlczogNjAsIHNlY29uZHM6IDYwICogNjAsIG1pbGxpc2Vjb25kczogNjAgKiA2MCAqIDEwMDAgfSxcbiAgICBtaW51dGVzOiB7IHNlY29uZHM6IDYwLCBtaWxsaXNlY29uZHM6IDYwICogMTAwMCB9LFxuICAgIHNlY29uZHM6IHsgbWlsbGlzZWNvbmRzOiAxMDAwIH0sXG4gIH0sXG4gIGNhc3VhbE1hdHJpeCA9IHtcbiAgICB5ZWFyczoge1xuICAgICAgcXVhcnRlcnM6IDQsXG4gICAgICBtb250aHM6IDEyLFxuICAgICAgd2Vla3M6IDUyLFxuICAgICAgZGF5czogMzY1LFxuICAgICAgaG91cnM6IDM2NSAqIDI0LFxuICAgICAgbWludXRlczogMzY1ICogMjQgKiA2MCxcbiAgICAgIHNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogMzY1ICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIHF1YXJ0ZXJzOiB7XG4gICAgICBtb250aHM6IDMsXG4gICAgICB3ZWVrczogMTMsXG4gICAgICBkYXlzOiA5MSxcbiAgICAgIGhvdXJzOiA5MSAqIDI0LFxuICAgICAgbWludXRlczogOTEgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogOTEgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgd2Vla3M6IDQsXG4gICAgICBkYXlzOiAzMCxcbiAgICAgIGhvdXJzOiAzMCAqIDI0LFxuICAgICAgbWludXRlczogMzAgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAsXG4gICAgICBtaWxsaXNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICB9LFxuXG4gICAgLi4ubG93T3JkZXJNYXRyaXgsXG4gIH0sXG4gIGRheXNJblllYXJBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDAwLFxuICBkYXlzSW5Nb250aEFjY3VyYXRlID0gMTQ2MDk3LjAgLyA0ODAwLFxuICBhY2N1cmF0ZU1hdHJpeCA9IHtcbiAgICB5ZWFyczoge1xuICAgICAgcXVhcnRlcnM6IDQsXG4gICAgICBtb250aHM6IDEyLFxuICAgICAgd2Vla3M6IGRheXNJblllYXJBY2N1cmF0ZSAvIDcsXG4gICAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUsXG4gICAgICBob3VyczogZGF5c0luWWVhckFjY3VyYXRlICogMjQsXG4gICAgICBtaW51dGVzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwLFxuICAgICAgbWlsbGlzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgIH0sXG4gICAgcXVhcnRlcnM6IHtcbiAgICAgIG1vbnRoczogMyxcbiAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyAyOCxcbiAgICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSAvIDQsXG4gICAgICBob3VyczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0KSAvIDQsXG4gICAgICBtaW51dGVzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCkgLyA0LFxuICAgICAgc2Vjb25kczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCkgLyA0LFxuICAgICAgbWlsbGlzZWNvbmRzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCkgLyA0LFxuICAgIH0sXG4gICAgbW9udGhzOiB7XG4gICAgICB3ZWVrczogZGF5c0luTW9udGhBY2N1cmF0ZSAvIDcsXG4gICAgICBkYXlzOiBkYXlzSW5Nb250aEFjY3VyYXRlLFxuICAgICAgaG91cnM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCxcbiAgICAgIG1pbnV0ZXM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwLFxuICAgICAgc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgfSxcbiAgICAuLi5sb3dPcmRlck1hdHJpeCxcbiAgfTtcblxuLy8gdW5pdHMgb3JkZXJlZCBieSBzaXplXG5jb25zdCBvcmRlcmVkVW5pdHMgPSBbXG4gIFwieWVhcnNcIixcbiAgXCJxdWFydGVyc1wiLFxuICBcIm1vbnRoc1wiLFxuICBcIndlZWtzXCIsXG4gIFwiZGF5c1wiLFxuICBcImhvdXJzXCIsXG4gIFwibWludXRlc1wiLFxuICBcInNlY29uZHNcIixcbiAgXCJtaWxsaXNlY29uZHNcIixcbl07XG5cbmNvbnN0IHJldmVyc2VVbml0cyA9IG9yZGVyZWRVbml0cy5zbGljZSgwKS5yZXZlcnNlKCk7XG5cbi8vIGNsb25lIHJlYWxseSBtZWFucyBcImNyZWF0ZSBhbm90aGVyIGluc3RhbmNlIGp1c3QgbGlrZSB0aGlzIG9uZSwgYnV0IHdpdGggdGhlc2UgY2hhbmdlc1wiXG5mdW5jdGlvbiBjbG9uZShkdXIsIGFsdHMsIGNsZWFyID0gZmFsc2UpIHtcbiAgLy8gZGVlcCBtZXJnZSBmb3IgdmFsc1xuICBjb25zdCBjb25mID0ge1xuICAgIHZhbHVlczogY2xlYXIgPyBhbHRzLnZhbHVlcyA6IHsgLi4uZHVyLnZhbHVlcywgLi4uKGFsdHMudmFsdWVzIHx8IHt9KSB9LFxuICAgIGxvYzogZHVyLmxvYy5jbG9uZShhbHRzLmxvYyksXG4gICAgY29udmVyc2lvbkFjY3VyYWN5OiBhbHRzLmNvbnZlcnNpb25BY2N1cmFjeSB8fCBkdXIuY29udmVyc2lvbkFjY3VyYWN5LFxuICB9O1xuICByZXR1cm4gbmV3IER1cmF0aW9uKGNvbmYpO1xufVxuXG5mdW5jdGlvbiBhbnRpVHJ1bmMobikge1xuICByZXR1cm4gbiA8IDAgPyBNYXRoLmZsb29yKG4pIDogTWF0aC5jZWlsKG4pO1xufVxuXG4vLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzXG5mdW5jdGlvbiBjb252ZXJ0KG1hdHJpeCwgZnJvbU1hcCwgZnJvbVVuaXQsIHRvTWFwLCB0b1VuaXQpIHtcbiAgY29uc3QgY29udiA9IG1hdHJpeFt0b1VuaXRdW2Zyb21Vbml0XSxcbiAgICByYXcgPSBmcm9tTWFwW2Zyb21Vbml0XSAvIGNvbnYsXG4gICAgc2FtZVNpZ24gPSBNYXRoLnNpZ24ocmF3KSA9PT0gTWF0aC5zaWduKHRvTWFwW3RvVW5pdF0pLFxuICAgIC8vIG9rLCBzbyB0aGlzIGlzIHdpbGQsIGJ1dCBzZWUgdGhlIG1hdHJpeCBpbiB0aGUgdGVzdHNcbiAgICBhZGRlZCA9XG4gICAgICAhc2FtZVNpZ24gJiYgdG9NYXBbdG9Vbml0XSAhPT0gMCAmJiBNYXRoLmFicyhyYXcpIDw9IDEgPyBhbnRpVHJ1bmMocmF3KSA6IE1hdGgudHJ1bmMocmF3KTtcbiAgdG9NYXBbdG9Vbml0XSArPSBhZGRlZDtcbiAgZnJvbU1hcFtmcm9tVW5pdF0gLT0gYWRkZWQgKiBjb252O1xufVxuXG4vLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZXMobWF0cml4LCB2YWxzKSB7XG4gIHJldmVyc2VVbml0cy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh2YWxzW2N1cnJlbnRdKSkge1xuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIGNvbnZlcnQobWF0cml4LCB2YWxzLCBwcmV2aW91cywgdmFscywgY3VycmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cbiAgfSwgbnVsbCk7XG59XG5cbi8qKlxuICogQSBEdXJhdGlvbiBvYmplY3QgcmVwcmVzZW50cyBhIHBlcmlvZCBvZiB0aW1lLCBsaWtlIFwiMiBtb250aHNcIiBvciBcIjEgZGF5LCAxIGhvdXJcIi4gQ29uY2VwdHVhbGx5LCBpdCdzIGp1c3QgYSBtYXAgb2YgdW5pdHMgdG8gdGhlaXIgcXVhbnRpdGllcywgYWNjb21wYW5pZWQgYnkgc29tZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gYW5kIG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uIFRoZXkgY2FuIGJlIHVzZWQgb24gdGhlaXIgb3duIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgTHV4b24gdHlwZXM7IGZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c30gdG8gYWRkIGEgRHVyYXRpb24gb2JqZWN0IHRvIGEgRGF0ZVRpbWUsIHByb2R1Y2luZyBhbm90aGVyIERhdGVUaW1lLlxuICpcbiAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiBjb21tb25seSB1c2VkIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gRHVyYXRpb246XG4gKlxuICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGEgRHVyYXRpb24sIHVzZSB7QGxpbmsgRHVyYXRpb24jZnJvbU1pbGxpc30sIHtAbGluayBEdXJhdGlvbiNmcm9tT2JqZWN0fSwgb3Ige0BsaW5rIER1cmF0aW9uI2Zyb21JU099LlxuICogKiAqKlVuaXQgdmFsdWVzKiogU2VlIHRoZSB7QGxpbmsgRHVyYXRpb24jeWVhcnN9LCB7QGxpbmsgRHVyYXRpb24jbW9udGhzfSwge0BsaW5rIER1cmF0aW9uI3dlZWtzfSwge0BsaW5rIER1cmF0aW9uI2RheXN9LCB7QGxpbmsgRHVyYXRpb24jaG91cnN9LCB7QGxpbmsgRHVyYXRpb24jbWludXRlc30sIHtAbGluayBEdXJhdGlvbiNzZWNvbmRzfSwge0BsaW5rIER1cmF0aW9uI21pbGxpc2Vjb25kc30gYWNjZXNzb3JzLlxuICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgIHtAbGluayBEdXJhdGlvbiNsb2NhbGV9IGFuZCB7QGxpbmsgRHVyYXRpb24jbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgbmV3IER1cmF0aW9ucyBvdXQgb2Ygb2xkIG9uZXMgdXNlIHtAbGluayBEdXJhdGlvbiNwbHVzfSwge0BsaW5rIER1cmF0aW9uI21pbnVzfSwge0BsaW5rIER1cmF0aW9uI25vcm1hbGl6ZX0sIHtAbGluayBEdXJhdGlvbiNzZXR9LCB7QGxpbmsgRHVyYXRpb24jcmVjb25maWd1cmV9LCB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30sIGFuZCB7QGxpbmsgRHVyYXRpb24jbmVnYXRlfS5cbiAqICogKipPdXRwdXQqKiBUbyBjb252ZXJ0IHRoZSBEdXJhdGlvbiBpbnRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgc2VlIHtAbGluayBEdXJhdGlvbiNhc30sIHtAbGluayBEdXJhdGlvbiN0b0lTT30sIHtAbGluayBEdXJhdGlvbiN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgRHVyYXRpb24jdG9KU09OfVxuICpcbiAqIFRoZXJlJ3MgYXJlIG1vcmUgbWV0aG9kcyBkb2N1bWVudGVkIGJlbG93LiBJbiBhZGRpdGlvbiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VidGxlciB0b3BpY3MgbGlrZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgdmFsaWRpdHksIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb24ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIGNvbnN0IGFjY3VyYXRlID0gY29uZmlnLmNvbnZlcnNpb25BY2N1cmFjeSA9PT0gXCJsb25ndGVybVwiIHx8IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmFsdWVzID0gY29uZmlnLnZhbHVlcztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY29udmVyc2lvbkFjY3VyYWN5ID0gYWNjdXJhdGUgPyBcImxvbmd0ZXJtXCIgOiBcImNhc3VhbFwiO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5tYXRyaXggPSBhY2N1cmF0ZSA/IGFjY3VyYXRlTWF0cml4IDogY2FzdWFsTWF0cml4O1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNMdXhvbkR1cmF0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgRHVyYXRpb24gZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCBvZiBtaWxsaXNlY29uZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21NaWxsaXMoY291bnQsIG9wdHMpIHtcbiAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbGxpc2Vjb25kczogY291bnQgfSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuXG4gICAqIElmIHRoaXMgb2JqZWN0IGlzIGVtcHR5IHRoZW4gYSB6ZXJvIG1pbGxpc2Vjb25kcyBkdXJhdGlvbiBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5xdWFydGVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1vbnRoc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5c1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmhvdXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWludXRlc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnNlY29uZHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taWxsaXNlY29uZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzPVtdXSAtIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoaXMgRHVyYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbU9iamVjdChvYmosIG9wdHMgPSB7fSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBEdXJhdGlvbi5mcm9tT2JqZWN0OiBhcmd1bWVudCBleHBlY3RlZCB0byBiZSBhbiBvYmplY3QsIGdvdCAke1xuICAgICAgICAgIG9iaiA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIG9ialxuICAgICAgICB9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHtcbiAgICAgIHZhbHVlczogbm9ybWFsaXplT2JqZWN0KG9iaiwgRHVyYXRpb24ubm9ybWFsaXplVW5pdCksXG4gICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpLFxuICAgICAgY29udmVyc2lvbkFjY3VyYWN5OiBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIER1cmF0aW9uTGlrZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudW1iZXIgfCBEdXJhdGlvbn0gZHVyYXRpb25MaWtlXG4gICAqIE9uZSBvZjpcbiAgICogLSBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy5cbiAgICogLSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kc1xuICAgKiAtIER1cmF0aW9uIGluc3RhbmNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb25MaWtlKSB7XG4gICAgaWYgKGlzTnVtYmVyKGR1cmF0aW9uTGlrZSkpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tTWlsbGlzKGR1cmF0aW9uTGlrZSk7XG4gICAgfSBlbHNlIGlmIChEdXJhdGlvbi5pc0R1cmF0aW9uKGR1cmF0aW9uTGlrZSkpIHtcbiAgICAgIHJldHVybiBkdXJhdGlvbkxpa2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZHVyYXRpb25MaWtlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBVbmtub3duIGR1cmF0aW9uIGFyZ3VtZW50ICR7ZHVyYXRpb25MaWtlfSBvZiB0eXBlICR7dHlwZW9mIGR1cmF0aW9uTGlrZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGFuIElTTyA4NjAxIGR1cmF0aW9uIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0ZXh0IHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9uc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQM1k2TTFXNERUMTJIMzBNNVMnKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMywgbW9udGhzOiA2LCB3ZWVrczogMSwgZGF5czogNCwgaG91cnM6IDEyLCBtaW51dGVzOiAzMCwgc2Vjb25kczogNSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1BUMjNIJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDIzIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDVZM00nKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogNSwgbW9udGhzOiAzIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzKSB7XG4gICAgY29uc3QgW3BhcnNlZF0gPSBwYXJzZUlTT0R1cmF0aW9uKHRleHQpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwidW5wYXJzYWJsZVwiLCBgdGhlIGlucHV0IFwiJHt0ZXh0fVwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGFuIElTTyA4NjAxIHRpbWUgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRleHQgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZXNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExOjIyOjMzLjQ0NCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMjIsIHNlY29uZHM6IDMzLCBtaWxsaXNlY29uZHM6IDQ0NCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMTowMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCdUMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCdUMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21JU09UaW1lKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcGFyc2VkXSA9IHBhcnNlSVNPVGltZU9ubHkodGV4dCk7XG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QocGFyc2VkLCBvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnZhbGlkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBkYXRldGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBzdGF0aWMgaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uID0gbnVsbCkge1xuICAgIGlmICghcmVhc29uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIER1cmF0aW9uIGlzIGludmFsaWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTtcblxuICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWREdXJhdGlvbkVycm9yKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IER1cmF0aW9uKHsgaW52YWxpZCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVVbml0KHVuaXQpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgICAgeWVhcjogXCJ5ZWFyc1wiLFxuICAgICAgeWVhcnM6IFwieWVhcnNcIixcbiAgICAgIHF1YXJ0ZXI6IFwicXVhcnRlcnNcIixcbiAgICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJzXCIsXG4gICAgICBtb250aDogXCJtb250aHNcIixcbiAgICAgIG1vbnRoczogXCJtb250aHNcIixcbiAgICAgIHdlZWs6IFwid2Vla3NcIixcbiAgICAgIHdlZWtzOiBcIndlZWtzXCIsXG4gICAgICBkYXk6IFwiZGF5c1wiLFxuICAgICAgZGF5czogXCJkYXlzXCIsXG4gICAgICBob3VyOiBcImhvdXJzXCIsXG4gICAgICBob3VyczogXCJob3Vyc1wiLFxuICAgICAgbWludXRlOiBcIm1pbnV0ZXNcIixcbiAgICAgIG1pbnV0ZXM6IFwibWludXRlc1wiLFxuICAgICAgc2Vjb25kOiBcInNlY29uZHNcIixcbiAgICAgIHNlY29uZHM6IFwic2Vjb25kc1wiLFxuICAgICAgbWlsbGlzZWNvbmQ6IFwibWlsbGlzZWNvbmRzXCIsXG4gICAgICBtaWxsaXNlY29uZHM6IFwibWlsbGlzZWNvbmRzXCIsXG4gICAgfVt1bml0ID8gdW5pdC50b0xvd2VyQ2FzZSgpIDogdW5pdF07XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgRHVyYXRpb24uIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0R1cmF0aW9uKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRHVyYXRpb24pIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCAgdGhlIGxvY2FsZSBvZiBhIER1cmF0aW9uLCBzdWNoICdlbi1HQidcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLmxvY2FsZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRHVyYXRpb24sIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRHVyYXRpb25cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBudW1iZXJpbmdTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLiBZb3UgbWF5IHVzZSB0aGVzZSB0b2tlbnM6XG4gICAqICogYFNgIGZvciBtaWxsaXNlY29uZHNcbiAgICogKiBgc2AgZm9yIHNlY29uZHNcbiAgICogKiBgbWAgZm9yIG1pbnV0ZXNcbiAgICogKiBgaGAgZm9yIGhvdXJzXG4gICAqICogYGRgIGZvciBkYXlzXG4gICAqICogYHdgIGZvciB3ZWVrc1xuICAgKiAqIGBNYCBmb3IgbW9udGhzXG4gICAqICogYHlgIGZvciB5ZWFyc1xuICAgKiBOb3RlczpcbiAgICogKiBBZGQgcGFkZGluZyBieSByZXBlYXRpbmcgdGhlIHRva2VuLCBlLmcuIFwieXlcIiBwYWRzIHRoZSB5ZWFycyB0byB0d28gZGlnaXRzLCBcImhoaGhcIiBwYWRzIHRoZSBob3VycyBvdXQgdG8gZm91ciBkaWdpdHNcbiAgICogKiBUb2tlbnMgY2FuIGJlIGVzY2FwZWQgYnkgd3JhcHBpbmcgd2l0aCBzaW5nbGUgcXVvdGVzLlxuICAgKiAqIFRoZSBkdXJhdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgc2V0IG9mIHVuaXRzIGluIHRoZSBmb3JtYXQgc3RyaW5nIHVzaW5nIHtAbGluayBEdXJhdGlvbiNzaGlmdFRvfSBhbmQgdGhlIER1cmF0aW9ucydzIGNvbnZlcnNpb24gYWNjdXJhY3kgc2V0dGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgc3RyaW5nXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsb29yPXRydWVdIC0gZmxvb3IgbnVtZXJpY2FsIHZhbHVlc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJ5IGQgc1wiKSAvLz0+IFwiMSA2IDJcIlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJ5eSBkZCBzc3NcIikgLy89PiBcIjAxIDA2IDAwMlwiXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdChcIk0gU1wiKSAvLz0+IFwiMTIgNTE4NDAyMDAwXCJcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXQoZm10LCBvcHRzID0ge30pIHtcbiAgICAvLyByZXZlcnNlLWNvbXBhdCBzaW5jZSAxLjI7IHdlIGFsd2F5cyByb3VuZCBkb3duIG5vdywgbmV2ZXIgdXAsIGFuZCB3ZSBkbyBpdCBieSBkZWZhdWx0XG4gICAgY29uc3QgZm10T3B0cyA9IHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBmbG9vcjogb3B0cy5yb3VuZCAhPT0gZmFsc2UgJiYgb3B0cy5mbG9vciAhPT0gZmFsc2UsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MsIGZtdE9wdHMpLmZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyh0aGlzLCBmbXQpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIER1cmF0aW9uIHdpdGggYWxsIHVuaXRzIGluY2x1ZGVkLlxuICAgKiBUbyBtb2RpZnkgaXRzIGJlaGF2aW9yIHVzZSB0aGUgYGxpc3RTdHlsZWAgYW5kIGFueSBJbnRsLk51bWJlckZvcm1hdCBvcHRpb24sIHRob3VnaCBgdW5pdERpc3BsYXlgIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9OdW1iZXJGb3JtYXRcbiAgICogQHBhcmFtIG9wdHMgLSBPbiBvcHRpb24gb2JqZWN0IHRvIG92ZXJyaWRlIHRoZSBmb3JtYXR0aW5nLiBBY2NlcHRzIHRoZSBzYW1lIGtleXMgYXMgdGhlIG9wdGlvbnMgcGFyYW1ldGVyIG9mIHRoZSBuYXRpdmUgYEludC5OdW1iZXJGb3JtYXRgIGNvbnN0cnVjdG9yLCBhcyB3ZWxsIGFzIGBsaXN0U3R5bGVgLlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiB2YXIgZHVyID0gRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEsIGhvdXJzOiA1LCBtaW51dGVzOiA2IH0pXG4gICAqIGR1ci50b0h1bWFuKCkgLy89PiAnMSBkYXksIDUgaG91cnMsIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyBsaXN0U3R5bGU6IFwibG9uZ1wiIH0pIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCBhbmQgNiBtaW51dGVzJ1xuICAgKiBkdXIudG9IdW1hbih7IHVuaXREaXNwbGF5OiBcInNob3J0XCIgfSkgLy89PiAnMSBkYXksIDUgaHIsIDYgbWluJ1xuICAgKiBgYGBcbiAgICovXG4gIHRvSHVtYW4ob3B0cyA9IHt9KSB7XG4gICAgY29uc3QgbCA9IG9yZGVyZWRVbml0c1xuICAgICAgLm1hcCgodW5pdCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlc1t1bml0XTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NcbiAgICAgICAgICAubnVtYmVyRm9ybWF0dGVyKHsgc3R5bGU6IFwidW5pdFwiLCB1bml0RGlzcGxheTogXCJsb25nXCIsIC4uLm9wdHMsIHVuaXQ6IHVuaXQuc2xpY2UoMCwgLTEpIH0pXG4gICAgICAgICAgLmZvcm1hdCh2YWwpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG4pID0+IG4pO1xuXG4gICAgcmV0dXJuIHRoaXMubG9jXG4gICAgICAubGlzdEZvcm1hdHRlcih7IHR5cGU6IFwiY29uanVuY3Rpb25cIiwgc3R5bGU6IG9wdHMubGlzdFN0eWxlIHx8IFwibmFycm93XCIsIC4uLm9wdHMgfSlcbiAgICAgIC5mb3JtYXQobCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEdXJhdGlvbidzIHZhbHVlcy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdG9PYmplY3QoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcbiAgICByZXR1cm4geyAuLi50aGlzLnZhbHVlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9uc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDMsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDNZVDQ1UydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNCwgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQNE1UNDVTJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiA1IH0pLnRvSVNPKCkgLy89PiAnUDVNJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogNSB9KS50b0lTTygpIC8vPT4gJ1BUNU0nXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDYgfSkudG9JU08oKSAvLz0+ICdQVDAuMDA2UydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08oKSB7XG4gICAgLy8gd2UgY291bGQgdXNlIHRoZSBmb3JtYXR0ZXIsIGJ1dCB0aGlzIGlzIGFuIGVhc2llciB3YXkgdG8gZ2V0IHRoZSBtaW5pbXVtIHN0cmluZ1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBzID0gXCJQXCI7XG4gICAgaWYgKHRoaXMueWVhcnMgIT09IDApIHMgKz0gdGhpcy55ZWFycyArIFwiWVwiO1xuICAgIGlmICh0aGlzLm1vbnRocyAhPT0gMCB8fCB0aGlzLnF1YXJ0ZXJzICE9PSAwKSBzICs9IHRoaXMubW9udGhzICsgdGhpcy5xdWFydGVycyAqIDMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy53ZWVrcyAhPT0gMCkgcyArPSB0aGlzLndlZWtzICsgXCJXXCI7XG4gICAgaWYgKHRoaXMuZGF5cyAhPT0gMCkgcyArPSB0aGlzLmRheXMgKyBcIkRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCB8fCB0aGlzLm1pbnV0ZXMgIT09IDAgfHwgdGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKVxuICAgICAgcyArPSBcIlRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCkgcyArPSB0aGlzLmhvdXJzICsgXCJIXCI7XG4gICAgaWYgKHRoaXMubWludXRlcyAhPT0gMCkgcyArPSB0aGlzLm1pbnV0ZXMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKVxuICAgICAgLy8gdGhpcyB3aWxsIGhhbmRsZSBcImZsb2F0aW5nIHBvaW50IG1hZG5lc3NcIiBieSByZW1vdmluZyBleHRyYSBkZWNpbWFsIHBsYWNlc1xuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTg4MDA0L2lzLWZsb2F0aW5nLXBvaW50LW1hdGgtYnJva2VuXG4gICAgICBzICs9IHJvdW5kVG8odGhpcy5zZWNvbmRzICsgdGhpcy5taWxsaXNlY29uZHMgLyAxMDAwLCAzKSArIFwiU1wiO1xuICAgIGlmIChzID09PSBcIlBcIikgcyArPSBcIlQwU1wiO1xuICAgIHJldHVybiBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLCBmb3JtYXR0ZWQgYXMgYSB0aW1lIG9mIGRheS5cbiAgICogTm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgZHVyYXRpb24gaXMgaW52YWxpZCwgbmVnYXRpdmUsIG9yIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAyNCBob3Vycy5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSgpIC8vPT4gJzExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc01pbGxpc2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMDowMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgaW5jbHVkZVByZWZpeDogdHJ1ZSB9KSAvLz0+ICdUMTE6MDA6MDAuMDAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxMTAwMDAuMDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT1RpbWUob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWlsbGlzID0gdGhpcy50b01pbGxpcygpO1xuICAgIGlmIChtaWxsaXMgPCAwIHx8IG1pbGxpcyA+PSA4NjQwMDAwMCkgcmV0dXJuIG51bGw7XG5cbiAgICBvcHRzID0ge1xuICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHM6IGZhbHNlLFxuICAgICAgc3VwcHJlc3NTZWNvbmRzOiBmYWxzZSxcbiAgICAgIGluY2x1ZGVQcmVmaXg6IGZhbHNlLFxuICAgICAgZm9ybWF0OiBcImV4dGVuZGVkXCIsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2hpZnRUbyhcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIiwgXCJtaWxsaXNlY29uZHNcIik7XG5cbiAgICBsZXQgZm10ID0gb3B0cy5mb3JtYXQgPT09IFwiYmFzaWNcIiA/IFwiaGhtbVwiIDogXCJoaDptbVwiO1xuXG4gICAgaWYgKCFvcHRzLnN1cHByZXNzU2Vjb25kcyB8fCB2YWx1ZS5zZWNvbmRzICE9PSAwIHx8IHZhbHVlLm1pbGxpc2Vjb25kcyAhPT0gMCkge1xuICAgICAgZm10ICs9IG9wdHMuZm9ybWF0ID09PSBcImJhc2ljXCIgPyBcInNzXCIgOiBcIjpzc1wiO1xuICAgICAgaWYgKCFvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzIHx8IHZhbHVlLm1pbGxpc2Vjb25kcyAhPT0gMCkge1xuICAgICAgICBmbXQgKz0gXCIuU1NTXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IHZhbHVlLnRvRm9ybWF0KGZtdCk7XG5cbiAgICBpZiAob3B0cy5pbmNsdWRlUHJlZml4KSB7XG4gICAgICBzdHIgPSBcIlRcIiArIHN0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEpTT04uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0lTTygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9JU08oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG1pbGxpc2Vjb25kcyB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b01pbGxpcygpIHtcbiAgICByZXR1cm4gdGhpcy5hcyhcIm1pbGxpc2Vjb25kc1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG1pbGxpc2Vjb25kcyB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uLiBBbGlhcyBvZiB7QGxpbmsgdG9NaWxsaXN9XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoaXMgRHVyYXRpb24gbG9uZ2VyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gYWRkLiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHBsdXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKSxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBrIG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5KGR1ci52YWx1ZXMsIGspIHx8IGhhc093blByb3BlcnR5KHRoaXMudmFsdWVzLCBrKSkge1xuICAgICAgICByZXN1bHRba10gPSBkdXIuZ2V0KGspICsgdGhpcy5nZXQoayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiByZXN1bHQgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGlzIER1cmF0aW9uIHNob3J0ZXIgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBzdWJ0cmFjdC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuICBtaW51cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pO1xuICAgIHJldHVybiB0aGlzLnBsdXMoZHVyLm5lZ2F0ZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY2FsZSB0aGlzIER1cmF0aW9uIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCB1bml0LiBBcml0eSBpcyAxIG9yIDI6IHRoZSB2YWx1ZSBvZiB0aGUgdW5pdCBhbmQsIG9wdGlvbmFsbHksIHRoZSB1bml0IG5hbWUuIE11c3QgcmV0dXJuIGEgbnVtYmVyLlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKHggPT4geCAqIDIpIC8vPT4geyBob3VyczogMiwgbWludXRlczogNjAgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKCh4LCB1KSA9PiB1ID09PSBcImhvdXJcIiA/IHggKiAyIDogeCkgLy89PiB7IGhvdXJzOiAyLCBtaW51dGVzOiAzMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbWFwVW5pdHMoZm4pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSkge1xuICAgICAgcmVzdWx0W2tdID0gYXNOdW1iZXIoZm4odGhpcy52YWx1ZXNba10sIGspKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiByZXN1bHQgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCd5ZWFycycpIC8vPT4gMlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnbW9udGhzJykgLy89PiAwXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCdkYXlzJykgLy89PiAzXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXNbRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1bml0KV07XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVyc1xuICAgKiBAZXhhbXBsZSBkdXIuc2V0KHsgeWVhcnM6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IGhvdXJzOiA4LCBtaW51dGVzOiAzMCB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHNldCh2YWx1ZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBtaXhlZCA9IHsgLi4udGhpcy52YWx1ZXMsIC4uLm5vcm1hbGl6ZU9iamVjdCh2YWx1ZXMsIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpIH07XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBtaXhlZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUgYW5kL29yIG51bWJlcmluZ1N5c3RlbS4gIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQGV4YW1wbGUgZHVyLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgcmVjb25maWd1cmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgY29udmVyc2lvbkFjY3VyYWN5IH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0gfSksXG4gICAgICBvcHRzID0geyBsb2MgfTtcblxuICAgIGlmIChjb252ZXJzaW9uQWNjdXJhY3kpIHtcbiAgICAgIG9wdHMuY29udmVyc2lvbkFjY3VyYWN5ID0gY29udmVyc2lvbkFjY3VyYWN5O1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSh0aGlzLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgZHVyYXRpb24gaW4gdGhlIHNwZWNpZmllZCB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGVzJyBvciAnZGF5cydcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnZGF5cycpIC8vPT4gMzY1XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAxfSkuYXMoJ21vbnRocycpIC8vPT4gMTJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7aG91cnM6IDYwfSkuYXMoJ2RheXMnKSAvLz0+IDIuNVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBhcyh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuc2hpZnRUbyh1bml0KS5nZXQodW5pdCkgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmVkdWNlIHRoaXMgRHVyYXRpb24gdG8gaXRzIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBpbiBpdHMgY3VycmVudCB1bml0cy5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAyLCBkYXlzOiA1MDAwIH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxNSwgZGF5czogMjU1IH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMiwgbWludXRlczogLTQ1IH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMTUgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIG5vcm1hbGl6ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgdmFscyA9IHRoaXMudG9PYmplY3QoKTtcbiAgICBub3JtYWxpemVWYWx1ZXModGhpcy5tYXRyaXgsIHZhbHMpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHZhbHVlczogdmFscyB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoaXMgRHVyYXRpb24gaW50byBpdHMgcmVwcmVzZW50YXRpb24gaW4gYSBkaWZmZXJlbnQgc2V0IG9mIHVuaXRzLlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIHNlY29uZHM6IDMwIH0pLnNoaWZ0VG8oJ21pbnV0ZXMnLCAnbWlsbGlzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgbWludXRlczogNjAsIG1pbGxpc2Vjb25kczogMzAwMDAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHNoaWZ0VG8oLi4udW5pdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAodW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB1bml0cyA9IHVuaXRzLm1hcCgodSkgPT4gRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1KSk7XG5cbiAgICBjb25zdCBidWlsdCA9IHt9LFxuICAgICAgYWNjdW11bGF0ZWQgPSB7fSxcbiAgICAgIHZhbHMgPSB0aGlzLnRvT2JqZWN0KCk7XG4gICAgbGV0IGxhc3RVbml0O1xuXG4gICAgZm9yIChjb25zdCBrIG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKHVuaXRzLmluZGV4T2YoaykgPj0gMCkge1xuICAgICAgICBsYXN0VW5pdCA9IGs7XG5cbiAgICAgICAgbGV0IG93biA9IDA7XG5cbiAgICAgICAgLy8gYW55dGhpbmcgd2UgaGF2ZW4ndCBib2lsZWQgZG93biB5ZXQgc2hvdWxkIGdldCBib2lsZWQgdG8gdGhpcyB1bml0XG4gICAgICAgIGZvciAoY29uc3QgYWsgaW4gYWNjdW11bGF0ZWQpIHtcbiAgICAgICAgICBvd24gKz0gdGhpcy5tYXRyaXhbYWtdW2tdICogYWNjdW11bGF0ZWRbYWtdO1xuICAgICAgICAgIGFjY3VtdWxhdGVkW2FrXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwbHVzIGFueXRoaW5nIHRoYXQncyBhbHJlYWR5IGluIHRoaXMgdW5pdFxuICAgICAgICBpZiAoaXNOdW1iZXIodmFsc1trXSkpIHtcbiAgICAgICAgICBvd24gKz0gdmFsc1trXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGkgPSBNYXRoLnRydW5jKG93bik7XG4gICAgICAgIGJ1aWx0W2tdID0gaTtcbiAgICAgICAgYWNjdW11bGF0ZWRba10gPSAob3duICogMTAwMCAtIGkgKiAxMDAwKSAvIDEwMDA7XG5cbiAgICAgICAgLy8gcGx1cyBhbnl0aGluZyBmdXJ0aGVyIGRvd24gdGhlIGNoYWluIHRoYXQgc2hvdWxkIGJlIHJvbGxlZCB1cCBpbiB0byB0aGlzXG4gICAgICAgIGZvciAoY29uc3QgZG93biBpbiB2YWxzKSB7XG4gICAgICAgICAgaWYgKG9yZGVyZWRVbml0cy5pbmRleE9mKGRvd24pID4gb3JkZXJlZFVuaXRzLmluZGV4T2YoaykpIHtcbiAgICAgICAgICAgIGNvbnZlcnQodGhpcy5tYXRyaXgsIHZhbHMsIGRvd24sIGJ1aWx0LCBrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBrZWVwIGl0IGluIHRoZSB3aW5ncyB0byBib2lsIGl0IGxhdGVyXG4gICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gdmFsc1trXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbnl0aGluZyBsZWZ0b3ZlciBiZWNvbWVzIHRoZSBkZWNpbWFsIGZvciB0aGUgbGFzdCB1bml0XG4gICAgLy8gbGFzdFVuaXQgbXVzdCBiZSBkZWZpbmVkIHNpbmNlIHVuaXRzIGlzIG5vdCBlbXB0eVxuICAgIGZvciAoY29uc3Qga2V5IGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICBpZiAoYWNjdW11bGF0ZWRba2V5XSAhPT0gMCkge1xuICAgICAgICBidWlsdFtsYXN0VW5pdF0gKz1cbiAgICAgICAgICBrZXkgPT09IGxhc3RVbml0ID8gYWNjdW11bGF0ZWRba2V5XSA6IGFjY3VtdWxhdGVkW2tleV0gLyB0aGlzLm1hdHJpeFtsYXN0VW5pdF1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUodGhpcywgeyB2YWx1ZXM6IGJ1aWx0IH0sIHRydWUpLm5vcm1hbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmVnYXRpdmUgb2YgdGhpcyBEdXJhdGlvbi5cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5uZWdhdGUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogLTEsIHNlY29uZHM6IC0zMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgbmVnYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBuZWdhdGVkID0ge307XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSkge1xuICAgICAgbmVnYXRlZFtrXSA9IHRoaXMudmFsdWVzW2tdID09PSAwID8gMCA6IC10aGlzLnZhbHVlc1trXTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdmFsdWVzOiBuZWdhdGVkIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgeWVhcnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgeWVhcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnllYXJzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBxdWFydGVycy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBxdWFydGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMucXVhcnRlcnMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1vbnRocy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtb250aHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1vbnRocyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgd2Vla3NcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMud2Vla3MgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRheXMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5cygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuZGF5cyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaG91cnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaG91cnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmhvdXJzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaW51dGVzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG1pbnV0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1pbnV0ZXMgfHwgMCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlY29uZHMuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCBzZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5zZWNvbmRzIHx8IDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtaWxsaXNlY29uZHMuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCBtaWxsaXNlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1pbGxpc2Vjb25kcyB8fCAwIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgRHVyYXRpb24gaXMgaW52YWxpZC4gSW52YWxpZCBkdXJhdGlvbnMgYXJlIHJldHVybmVkIGJ5IGRpZmYgb3BlcmF0aW9uc1xuICAgKiBvbiBpbnZhbGlkIERhdGVUaW1lcyBvciBJbnRlcnZhbHMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBpZiB0aGlzIER1cmF0aW9uIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEdXJhdGlvbiBpcyB2YWxpZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZFJlYXNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkRXhwbGFuYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRXF1YWxpdHkgY2hlY2tcbiAgICogVHdvIER1cmF0aW9ucyBhcmUgZXF1YWwgaWZmIHRoZXkgaGF2ZSB0aGUgc2FtZSB1bml0cyBhbmQgdGhlIHNhbWUgdmFsdWVzIGZvciBlYWNoIHVuaXQuXG4gICAqIEBwYXJhbSB7RHVyYXRpb259IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlcXVhbHMob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXIuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5sb2MuZXF1YWxzKG90aGVyLmxvYykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcSh2MSwgdjIpIHtcbiAgICAgIC8vIENvbnNpZGVyIDAgYW5kIHVuZGVmaW5lZCBhcyBlcXVhbFxuICAgICAgaWYgKHYxID09PSB1bmRlZmluZWQgfHwgdjEgPT09IDApIHJldHVybiB2MiA9PT0gdW5kZWZpbmVkIHx8IHYyID09PSAwO1xuICAgICAgcmV0dXJuIHYxID09PSB2MjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHUgb2Ygb3JkZXJlZFVuaXRzKSB7XG4gICAgICBpZiAoIWVxKHRoaXMudmFsdWVzW3VdLCBvdGhlci52YWx1ZXNbdV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiIsICJpbXBvcnQgRGF0ZVRpbWUsIHsgZnJpZW5kbHlEYXRlVGltZSB9IGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgRHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWRJbnRlcnZhbEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcblxuY29uc3QgSU5WQUxJRCA9IFwiSW52YWxpZCBJbnRlcnZhbFwiO1xuXG4vLyBjaGVja3MgaWYgdGhlIHN0YXJ0IGlzIGVxdWFsIHRvIG9yIGJlZm9yZSB0aGUgZW5kXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXJ0RW5kKHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCB8fCAhc3RhcnQuaXNWYWxpZCkge1xuICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKFwibWlzc2luZyBvciBpbnZhbGlkIHN0YXJ0XCIpO1xuICB9IGVsc2UgaWYgKCFlbmQgfHwgIWVuZC5pc1ZhbGlkKSB7XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJtaXNzaW5nIG9yIGludmFsaWQgZW5kXCIpO1xuICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXG4gICAgICBcImVuZCBiZWZvcmUgc3RhcnRcIixcbiAgICAgIGBUaGUgZW5kIG9mIGFuIGludGVydmFsIG11c3QgYmUgYWZ0ZXIgaXRzIHN0YXJ0LCBidXQgeW91IGhhZCBzdGFydD0ke3N0YXJ0LnRvSVNPKCl9IGFuZCBlbmQ9JHtlbmQudG9JU08oKX1gXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEFuIEludGVydmFsIG9iamVjdCByZXByZXNlbnRzIGEgaGFsZi1vcGVuIGludGVydmFsIG9mIHRpbWUsIHdoZXJlIGVhY2ggZW5kcG9pbnQgaXMgYSB7QGxpbmsgRGF0ZVRpbWV9LiBDb25jZXB0dWFsbHksIGl0J3MgYSBjb250YWluZXIgZm9yIHRob3NlIHR3byBlbmRwb2ludHMsIGFjY29tcGFuaWVkIGJ5IG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCBjb21wYXJpbmcsIHRyYW5zZm9ybWluZywgYW5kIGZvcm1hdHRpbmcgdGhlbS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIEludGVydmFsOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhbiBJbnRlcnZhbCwgdXNlIHtAbGluayBJbnRlcnZhbCNmcm9tRGF0ZVRpbWVzfSwge0BsaW5rIEludGVydmFsI2FmdGVyfSwge0BsaW5rIEludGVydmFsI2JlZm9yZX0sIG9yIHtAbGluayBJbnRlcnZhbCNmcm9tSVNPfS5cbiAqICogKipBY2Nlc3NvcnMqKiBVc2Uge0BsaW5rIEludGVydmFsI3N0YXJ0fSBhbmQge0BsaW5rIEludGVydmFsI2VuZH0gdG8gZ2V0IHRoZSBzdGFydCBhbmQgZW5kLlxuICogKiAqKkludGVycm9nYXRpb24qKiBUbyBhbmFseXplIHRoZSBJbnRlcnZhbCwgdXNlIHtAbGluayBJbnRlcnZhbCNjb3VudH0sIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9LCB7QGxpbmsgSW50ZXJ2YWwjaGFzU2FtZX0sIHtAbGluayBJbnRlcnZhbCNjb250YWluc30sIHtAbGluayBJbnRlcnZhbCNpc0FmdGVyfSwgb3Ige0BsaW5rIEludGVydmFsI2lzQmVmb3JlfS5cbiAqICogKipUcmFuc2Zvcm1hdGlvbioqIFRvIGNyZWF0ZSBvdGhlciBJbnRlcnZhbHMgb3V0IG9mIHRoaXMgb25lLCB1c2Uge0BsaW5rIEludGVydmFsI3NldH0sIHtAbGluayBJbnRlcnZhbCNzcGxpdEF0fSwge0BsaW5rIEludGVydmFsI3NwbGl0Qnl9LCB7QGxpbmsgSW50ZXJ2YWwjZGl2aWRlRXF1YWxseX0sIHtAbGluayBJbnRlcnZhbCNtZXJnZX0sIHtAbGluayBJbnRlcnZhbCN4b3J9LCB7QGxpbmsgSW50ZXJ2YWwjdW5pb259LCB7QGxpbmsgSW50ZXJ2YWwjaW50ZXJzZWN0aW9ufSwgb3Ige0BsaW5rIEludGVydmFsI2RpZmZlcmVuY2V9LlxuICogKiAqKkNvbXBhcmlzb24qKiBUbyBjb21wYXJlIHRoaXMgSW50ZXJ2YWwgdG8gYW5vdGhlciBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjZXF1YWxzfSwge0BsaW5rIEludGVydmFsI292ZXJsYXBzfSwge0BsaW5rIEludGVydmFsI2FidXRzU3RhcnR9LCB7QGxpbmsgSW50ZXJ2YWwjYWJ1dHNFbmR9LCB7QGxpbmsgSW50ZXJ2YWwjZW5ndWxmc31cbiAqICogKipPdXRwdXQqKiBUbyBjb252ZXJ0IHRoZSBJbnRlcnZhbCBpbnRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgc2VlIHtAbGluayBJbnRlcnZhbCN0b1N0cmluZ30sIHtAbGluayBJbnRlcnZhbCN0b0lTT30sIHtAbGluayBJbnRlcnZhbCN0b0lTT0RhdGV9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09UaW1lfSwge0BsaW5rIEludGVydmFsI3RvRm9ybWF0fSwgYW5kIHtAbGluayBJbnRlcnZhbCN0b0R1cmF0aW9ufS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJ2YWwge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMucyA9IGNvbmZpZy5zdGFydDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmUgPSBjb25maWcuZW5kO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pc0x1eG9uSW50ZXJ2YWwgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnZhbGlkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzdGF0aWMgaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uID0gbnVsbCkge1xuICAgIGlmICghcmVhc29uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIEludGVydmFsIGlzIGludmFsaWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTtcblxuICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRJbnRlcnZhbEVycm9yKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IEludGVydmFsKHsgaW52YWxpZCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYSBzdGFydCBEYXRlVGltZSBhbmQgYW4gZW5kIERhdGVUaW1lLiBJbmNsdXNpdmUgb2YgdGhlIHN0YXJ0IGJ1dCBub3QgdGhlIGVuZC5cbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gc3RhcnRcbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gZW5kXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGJ1aWx0U3RhcnQgPSBmcmllbmRseURhdGVUaW1lKHN0YXJ0KSxcbiAgICAgIGJ1aWx0RW5kID0gZnJpZW5kbHlEYXRlVGltZShlbmQpO1xuXG4gICAgY29uc3QgdmFsaWRhdGVFcnJvciA9IHZhbGlkYXRlU3RhcnRFbmQoYnVpbHRTdGFydCwgYnVpbHRFbmQpO1xuXG4gICAgaWYgKHZhbGlkYXRlRXJyb3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7XG4gICAgICAgIHN0YXJ0OiBidWlsdFN0YXJ0LFxuICAgICAgICBlbmQ6IGJ1aWx0RW5kLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWxpZGF0ZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhIHN0YXJ0IERhdGVUaW1lIGFuZCBhIER1cmF0aW9uIHRvIGV4dGVuZCB0by5cbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gc3RhcnRcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsLlxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBhZnRlcihzdGFydCwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKSxcbiAgICAgIGR0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCk7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQsIGR0LnBsdXMoZHVyKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYW4gZW5kIERhdGVUaW1lIGFuZCBhIER1cmF0aW9uIHRvIGV4dGVuZCBiYWNrd2FyZHMgdG8uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZFxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwuXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgc3RhdGljIGJlZm9yZShlbmQsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdC5taW51cyhkdXIpLCBkdCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYW4gSVNPIDg2MDEgc3RyaW5nLlxuICAgKiBBY2NlcHRzIGA8c3RhcnQ+LzxlbmQ+YCwgYDxzdGFydD4vPGR1cmF0aW9uPmAsIGFuZCBgPGR1cmF0aW9uPi88ZW5kPmAgZm9ybWF0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gb3B0aW9ucyB0byBwYXNzIHtAbGluayBEYXRlVGltZSNmcm9tSVNPfSBhbmQgb3B0aW9uYWxseSB7QGxpbmsgRHVyYXRpb24jZnJvbUlTT31cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFsc1xuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcywgZV0gPSAodGV4dCB8fCBcIlwiKS5zcGxpdChcIi9cIiwgMik7XG4gICAgaWYgKHMgJiYgZSkge1xuICAgICAgbGV0IHN0YXJ0LCBzdGFydElzVmFsaWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzdGFydCA9IERhdGVUaW1lLmZyb21JU08ocywgb3B0cyk7XG4gICAgICAgIHN0YXJ0SXNWYWxpZCA9IHN0YXJ0LmlzVmFsaWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN0YXJ0SXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZW5kLCBlbmRJc1ZhbGlkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW5kID0gRGF0ZVRpbWUuZnJvbUlTTyhlLCBvcHRzKTtcbiAgICAgICAgZW5kSXNWYWxpZCA9IGVuZC5pc1ZhbGlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlbmRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydElzVmFsaWQgJiYgZW5kSXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzdGFydCwgZW5kKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0SXNWYWxpZCkge1xuICAgICAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tSVNPKGUsIG9wdHMpO1xuICAgICAgICBpZiAoZHVyLmlzVmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwuYWZ0ZXIoc3RhcnQsIGR1cik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW5kSXNWYWxpZCkge1xuICAgICAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tSVNPKHMsIG9wdHMpO1xuICAgICAgICBpZiAoZHVyLmlzVmFsaWQpIHtcbiAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwuYmVmb3JlKGVuZCwgZHVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gSW50ZXJ2YWwuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0ludGVydmFsKG8pIHtcbiAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uSW50ZXJ2YWwpIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXJ0IG9mIHRoZSBJbnRlcnZhbFxuICAgKiBAdHlwZSB7RGF0ZVRpbWV9XG4gICAqL1xuICBnZXQgc3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMucyA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZW5kIG9mIHRoZSBJbnRlcnZhbFxuICAgKiBAdHlwZSB7RGF0ZVRpbWV9XG4gICAqL1xuICBnZXQgZW5kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGlzIEludGVydmFsJ3MgZW5kIGlzIGF0IGxlYXN0IGl0cyBzdGFydCwgbWVhbmluZyB0aGF0IHRoZSBJbnRlcnZhbCBpc24ndCAnYmFja3dhcmRzJy5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkUmVhc29uID09PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBpZiB0aGlzIEludGVydmFsIGlzIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZFJlYXNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBJbnRlcnZhbCBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgSW50ZXJ2YWwgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBpbnZhbGlkRXhwbGFuYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbCBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIHJldHVybiB0aGUgbGVuZ3RoIGluLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBsZW5ndGgodW5pdCA9IFwibWlsbGlzZWNvbmRzXCIpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50b0R1cmF0aW9uKC4uLlt1bml0XSkuZ2V0KHVuaXQpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvdW50IG9mIG1pbnV0ZXMsIGhvdXJzLCBkYXlzLCBtb250aHMsIG9yIHllYXJzIGluY2x1ZGVkIGluIHRoZSBJbnRlcnZhbCwgZXZlbiBpbiBwYXJ0LlxuICAgKiBVbmxpa2Uge0BsaW5rIEludGVydmFsI2xlbmd0aH0gdGhpcyBjb3VudHMgc2VjdGlvbnMgb2YgdGhlIGNhbGVuZGFyLCBub3QgcGVyaW9kcyBvZiB0aW1lLCBlLmcuIHNwZWNpZnlpbmcgJ2RheSdcbiAgICogYXNrcyAnd2hhdCBkYXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhpcyBpbnRlcnZhbD8nLCBub3QgJ2hvdyBtYW55IGRheXMgbG9uZyBpcyB0aGlzIGludGVydmFsPydcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt1bml0PSdtaWxsaXNlY29uZHMnXSAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY291bnQuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGNvdW50KHVuaXQgPSBcIm1pbGxpc2Vjb25kc1wiKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBOYU47XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0LnN0YXJ0T2YodW5pdCksXG4gICAgICBlbmQgPSB0aGlzLmVuZC5zdGFydE9mKHVuaXQpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCkpICsgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGFuZCBlbmQgYXJlIGJvdGggaW4gdGhlIHNhbWUgdW5pdCBvZiB0aW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgb2YgdGltZSB0byBjaGVjayBzYW1lbmVzcyBvblxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaGFzU2FtZSh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuaXNFbXB0eSgpIHx8IHRoaXMuZS5taW51cygxKS5oYXNTYW1lKHRoaXMucywgdW5pdCkgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGhhcyB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIERhdGVUaW1lcy5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucy52YWx1ZU9mKCkgPT09IHRoaXMuZS52YWx1ZU9mKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFmdGVyIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBpc0FmdGVyKGRhdGVUaW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zID4gZGF0ZVRpbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQmVmb3JlKGRhdGVUaW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5lIDw9IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgY29udGFpbnMgdGhlIHNwZWNpZmllZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnRhaW5zKGRhdGVUaW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zIDw9IGRhdGVUaW1lICYmIHRoaXMuZSA+IGRhdGVUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0c1wiIHRoZSBzdGFydCBhbmQvb3IgZW5kIGRhdGVzLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSB0aGUgdmFsdWVzIHRvIHNldFxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSB2YWx1ZXMuc3RhcnQgLSB0aGUgc3RhcnRpbmcgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLmVuZCAtIHRoZSBlbmRpbmcgRGF0ZVRpbWVcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICBzZXQoeyBzdGFydCwgZW5kIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzdGFydCB8fCB0aGlzLnMsIGVuZCB8fCB0aGlzLmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgYXQgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIERhdGVUaW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHNwbGl0QXQoLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTtcbiAgICBjb25zdCBzb3J0ZWQgPSBkYXRlVGltZXNcbiAgICAgICAgLm1hcChmcmllbmRseURhdGVUaW1lKVxuICAgICAgICAuZmlsdGVyKChkKSA9PiB0aGlzLmNvbnRhaW5zKGQpKVxuICAgICAgICAuc29ydCgpLFxuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgIGxldCB7IHMgfSA9IHRoaXMsXG4gICAgICBpID0gMDtcblxuICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7XG4gICAgICBjb25zdCBhZGRlZCA9IHNvcnRlZFtpXSB8fCB0aGlzLmUsXG4gICAgICAgIG5leHQgPSArYWRkZWQgPiArdGhpcy5lID8gdGhpcy5lIDogYWRkZWQ7XG4gICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7XG4gICAgICBzID0gbmV4dDtcbiAgICAgIGkgKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gc21hbGxlciBJbnRlcnZhbHMsIGVhY2ggb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguXG4gICAqIExlZnQgb3ZlciB0aW1lIGlzIGdyb3VwZWQgaW50byBhIHNtYWxsZXIgaW50ZXJ2YWxcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBsZW5ndGggb2YgZWFjaCByZXN1bHRpbmcgaW50ZXJ2YWwuXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3BsaXRCeShkdXJhdGlvbikge1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIWR1ci5pc1ZhbGlkIHx8IGR1ci5hcyhcIm1pbGxpc2Vjb25kc1wiKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCB7IHMgfSA9IHRoaXMsXG4gICAgICBpZHggPSAxLFxuICAgICAgbmV4dDtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICB3aGlsZSAocyA8IHRoaXMuZSkge1xuICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLnN0YXJ0LnBsdXMoZHVyLm1hcFVuaXRzKCh4KSA9PiB4ICogaWR4KSk7XG4gICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkO1xuICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpO1xuICAgICAgcyA9IG5leHQ7XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc21hbGxlciBpbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXJPZlBhcnRzIC0gVGhlIG51bWJlciBvZiBJbnRlcnZhbHMgdG8gZGl2aWRlIHRoZSBJbnRlcnZhbCBpbnRvLlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIGRpdmlkZUVxdWFsbHkobnVtYmVyT2ZQYXJ0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHRoaXMuc3BsaXRCeSh0aGlzLmxlbmd0aCgpIC8gbnVtYmVyT2ZQYXJ0cykuc2xpY2UoMCwgbnVtYmVyT2ZQYXJ0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBvdmVybGFwcyB3aXRoIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxcbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIG92ZXJsYXBzKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZSA+IG90aGVyLnMgJiYgdGhpcy5zIDwgb3RoZXIuZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3MgZW5kIGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBzdGFydC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGFidXRzU3RhcnQob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiArdGhpcy5lID09PSArb3RoZXIucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgaXMgYWRqYWNlbnQgdG8gdGhlIHNwZWNpZmllZCBJbnRlcnZhbCdzIGVuZC5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGFidXRzRW5kKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gK290aGVyLmUgPT09ICt0aGlzLnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBlbmd1bGZzIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBlbmd1bGZzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zIDw9IG90aGVyLnMgJiYgdGhpcy5lID49IG90aGVyLmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBhcyB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zLmVxdWFscyhvdGhlci5zKSAmJiB0aGlzLmUuZXF1YWxzKG90aGVyLmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIEludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIEludGVydmFsLlxuICAgKiBTcGVjaWZpY2FsbHksIHRoZSByZXN1bHRpbmcgSW50ZXJ2YWwgaGFzIHRoZSBtYXhpbXVtIHN0YXJ0IHRpbWUgYW5kIHRoZSBtaW5pbXVtIGVuZCB0aW1lIG9mIHRoZSB0d28gSW50ZXJ2YWxzLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGludGVyc2VjdGlvbiBpcyBlbXB0eSwgbWVhbmluZywgdGhlIGludGVydmFscyBkb24ndCBpbnRlcnNlY3QuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cbiAgaW50ZXJzZWN0aW9uKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHMgPSB0aGlzLnMgPiBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucyxcbiAgICAgIGUgPSB0aGlzLmUgPCBvdGhlci5lID8gdGhpcy5lIDogb3RoZXIuZTtcblxuICAgIGlmIChzID49IGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgdW5pb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0aW5nIEludGVydmFsIGhhcyB0aGUgbWluaW11bSBzdGFydCB0aW1lIGFuZCB0aGUgbWF4aW11bSBlbmQgdGltZSBvZiB0aGUgdHdvIEludGVydmFscy5cbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICB1bmlvbihvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBzID0gdGhpcy5zIDwgb3RoZXIucyA/IHRoaXMucyA6IG90aGVyLnMsXG4gICAgICBlID0gdGhpcy5lID4gb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIGludG8gYSBlcXVpdmFsZW50IG1pbmltYWwgc2V0IG9mIEludGVydmFscy5cbiAgICogQ29tYmluZXMgb3ZlcmxhcHBpbmcgYW5kIGFkamFjZW50IEludGVydmFscy5cbiAgICogQHBhcmFtIHtBcnJheX0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1lcmdlKGludGVydmFscykge1xuICAgIGNvbnN0IFtmb3VuZCwgZmluYWxdID0gaW50ZXJ2YWxzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5zIC0gYi5zKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFtzb2ZhciwgY3VycmVudF0sIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbc29mYXIsIGl0ZW1dO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5vdmVybGFwcyhpdGVtKSB8fCBjdXJyZW50LmFidXRzU3RhcnQoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbc29mYXIsIGN1cnJlbnQudW5pb24oaXRlbSldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3NvZmFyLmNvbmNhdChbY3VycmVudF0pLCBpdGVtXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgbnVsbF1cbiAgICAgICk7XG4gICAgaWYgKGZpbmFsKSB7XG4gICAgICBmb3VuZC5wdXNoKGZpbmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBJbnRlcnZhbHMgcmVwcmVzZW50aW5nIHRoZSBzcGFucyBvZiB0aW1lIHRoYXQgb25seSBhcHBlYXIgaW4gb25lIG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHNcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgeG9yKGludGVydmFscykge1xuICAgIGxldCBzdGFydCA9IG51bGwsXG4gICAgICBjdXJyZW50Q291bnQgPSAwO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXSxcbiAgICAgIGVuZHMgPSBpbnRlcnZhbHMubWFwKChpKSA9PiBbXG4gICAgICAgIHsgdGltZTogaS5zLCB0eXBlOiBcInNcIiB9LFxuICAgICAgICB7IHRpbWU6IGkuZSwgdHlwZTogXCJlXCIgfSxcbiAgICAgIF0pLFxuICAgICAgZmxhdHRlbmVkID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5lbmRzKSxcbiAgICAgIGFyciA9IGZsYXR0ZW5lZC5zb3J0KChhLCBiKSA9PiBhLnRpbWUgLSBiLnRpbWUpO1xuXG4gICAgZm9yIChjb25zdCBpIG9mIGFycikge1xuICAgICAgY3VycmVudENvdW50ICs9IGkudHlwZSA9PT0gXCJzXCIgPyAxIDogLTE7XG5cbiAgICAgIGlmIChjdXJyZW50Q291bnQgPT09IDEpIHtcbiAgICAgICAgc3RhcnQgPSBpLnRpbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhcnQgJiYgK3N0YXJ0ICE9PSAraS50aW1lKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGkudGltZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBJbnRlcnZhbC5tZXJnZShyZXN1bHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBzcGFuIG9mIHRpbWUgaW4gdGhpcyBJbnRlcnZhbCB0aGF0IGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy5cbiAgICogQHBhcmFtIHsuLi5JbnRlcnZhbH0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgZGlmZmVyZW5jZSguLi5pbnRlcnZhbHMpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwueG9yKFt0aGlzXS5jb25jYXQoaW50ZXJ2YWxzKSlcbiAgICAgIC5tYXAoKGkpID0+IHRoaXMuaW50ZXJzZWN0aW9uKGkpKVxuICAgICAgLmZpbHRlcigoaSkgPT4gaSAmJiAhaS5pc0VtcHR5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBJbnRlcnZhbCBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1N0cmluZygpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGBbJHt0aGlzLnMudG9JU08oKX0gXHUyMDEzICR7dGhpcy5lLnRvSVNPKCl9KWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgc2FtZSBvcHRpb25zIGFzIHtAbGluayBEYXRlVGltZSN0b0lTT31cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08ob3B0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRDtcbiAgICByZXR1cm4gYCR7dGhpcy5zLnRvSVNPKG9wdHMpfS8ke3RoaXMuZS50b0lTTyhvcHRzKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBkYXRlIG9mIHRoaXMgSW50ZXJ2YWwuXG4gICAqIFRoZSB0aW1lIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09EYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRDtcbiAgICByZXR1cm4gYCR7dGhpcy5zLnRvSVNPRGF0ZSgpfS8ke3RoaXMuZS50b0lTT0RhdGUoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aW1lIG9mIHRoaXMgSW50ZXJ2YWwuXG4gICAqIFRoZSBkYXRlIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgc2FtZSBvcHRpb25zIGFzIHtAbGluayBEYXRlVGltZSN0b0lTT31cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU09UaW1lKG9wdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0lTT1RpbWUob3B0cyl9LyR7dGhpcy5lLnRvSVNPVGltZShvcHRzKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBJbnRlcnZhbCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGVGb3JtYXQgLSB0aGUgZm9ybWF0IHN0cmluZy4gVGhpcyBzdHJpbmcgZm9ybWF0cyB0aGUgc3RhcnQgYW5kIGVuZCB0aW1lLiBTZWUge0BsaW5rIERhdGVUaW1lI3RvRm9ybWF0fSBmb3IgZGV0YWlscy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5zZXBhcmF0b3IgPSAgJyBcdTIwMTMgJ10gLSBhIHNlcGFyYXRvciB0byBwbGFjZSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHJlcHJlc2VudGF0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0Zvcm1hdChkYXRlRm9ybWF0LCB7IHNlcGFyYXRvciA9IFwiIFx1MjAxMyBcIiB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQ7XG4gICAgcmV0dXJuIGAke3RoaXMucy50b0Zvcm1hdChkYXRlRm9ybWF0KX0ke3NlcGFyYXRvcn0ke3RoaXMuZS50b0Zvcm1hdChkYXRlRm9ybWF0KX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgdGltZSBzcGFubmVkIGJ5IHRoaXMgaW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdW5pdD1bJ21pbGxpc2Vjb25kcyddXSAtIHRoZSB1bml0IG9yIHVuaXRzIChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byBpbmNsdWRlIGluIHRoZSBkdXJhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oKS50b09iamVjdCgpIC8vPT4geyBtaWxsaXNlY29uZHM6IDg4NDg5MjU3IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbignZGF5cycpLnRvT2JqZWN0KCkgLy89PiB7IGRheXM6IDEuMDI0MTgxMjE1Mjc3Nzc3OCB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oWydob3VycycsICdtaW51dGVzJ10pLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyNCwgbWludXRlczogMzQuODIwOTUgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJ10pLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyNCwgbWludXRlczogMzQsIHNlY29uZHM6IDQ5LjI1NyB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ3NlY29uZHMnKS50b09iamVjdCgpIC8vPT4geyBzZWNvbmRzOiA4ODQ4OS4yNTcgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG4gIHRvRHVyYXRpb24odW5pdCwgb3B0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZCh0aGlzLmludmFsaWRSZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lLmRpZmYodGhpcy5zLCB1bml0LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gbWFwRm4gb24gdGhlIGludGVydmFsIHN0YXJ0IGFuZCBlbmQsIHJldHVybmluZyBhIG5ldyBJbnRlcnZhbCBmcm9tIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWVzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1hcEZuXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS5tYXBFbmRwb2ludHMoZW5kcG9pbnQgPT4gZW5kcG9pbnQudG9VVEMoKSlcbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnBsdXMoeyBob3VyczogMiB9KSlcbiAgICovXG4gIG1hcEVuZHBvaW50cyhtYXBGbikge1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKG1hcEZuKHRoaXMucyksIG1hcEZuKHRoaXMuZSkpO1xuICB9XG59XG4iLCAiaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuL2RhdGV0aW1lLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCBMb2NhbGUgZnJvbSBcIi4vaW1wbC9sb2NhbGUuanNcIjtcbmltcG9ydCBJQU5BWm9uZSBmcm9tIFwiLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcblxuaW1wb3J0IHsgaGFzUmVsYXRpdmUgfSBmcm9tIFwiLi9pbXBsL3V0aWwuanNcIjtcblxuLyoqXG4gKiBUaGUgSW5mbyBjbGFzcyBjb250YWlucyBzdGF0aWMgbWV0aG9kcyBmb3IgcmV0cmlldmluZyBnZW5lcmFsIHRpbWUgYW5kIGRhdGUgcmVsYXRlZCBkYXRhLiBGb3IgZXhhbXBsZSwgaXQgaGFzIG1ldGhvZHMgZm9yIGZpbmRpbmcgb3V0IGlmIGEgdGltZSB6b25lIGhhcyBhIERTVCwgZm9yIGxpc3RpbmcgdGhlIG1vbnRocyBpbiBhbnkgc3VwcG9ydGVkIGxvY2FsZSwgYW5kIGZvciBkaXNjb3ZlcmluZyB3aGljaCBvZiBMdXhvbiBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmZvIHtcbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBjb250YWlucyBhIERTVC5cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW3pvbmU9J2xvY2FsJ10gLSBab25lIHRvIGNoZWNrLiBEZWZhdWx0cyB0byB0aGUgZW52aXJvbm1lbnQncyBsb2NhbCB6b25lLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGhhc0RTVCh6b25lID0gU2V0dGluZ3MuZGVmYXVsdFpvbmUpIHtcbiAgICBjb25zdCBwcm90byA9IERhdGVUaW1lLm5vdygpLnNldFpvbmUoem9uZSkuc2V0KHsgbW9udGg6IDEyIH0pO1xuXG4gICAgcmV0dXJuICF6b25lLmlzVW5pdmVyc2FsICYmIHByb3RvLm9mZnNldCAhPT0gcHJvdG8uc2V0KHsgbW9udGg6IDYgfSkub2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBpcyBhIHZhbGlkIElBTkEgc3BlY2lmaWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFpvbmUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc1ZhbGlkSUFOQVpvbmUoem9uZSkge1xuICAgIHJldHVybiBJQU5BWm9uZS5pc1ZhbGlkWm9uZSh6b25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgaW5wdXQgaW50byBhIHtAbGluayBab25lfSBpbnN0YW5jZS5cbiAgICpcbiAgICogKiBJZiBgaW5wdXRgIGlzIGFscmVhZHkgYSBab25lIGluc3RhbmNlLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gICAqICogSWYgYGlucHV0YCBpcyBhIHN0cmluZyBjb250YWluaW5nIGEgdmFsaWQgdGltZSB6b25lIG5hbWUsIGEgWm9uZSBpbnN0YW5jZVxuICAgKiAgIHdpdGggdGhhdCBuYW1lIGlzIHJldHVybmVkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgdGhhdCBkb2Vzbid0IHJlZmVyIHRvIGEga25vd24gdGltZSB6b25lLCBhIFpvbmVcbiAgICogICBpbnN0YW5jZSB3aXRoIHtAbGluayBab25lI2lzVmFsaWR9ID09IGZhbHNlIGlzIHJldHVybmVkLlxuICAgKiAqIElmIGBpbnB1dCBpcyBhIG51bWJlciwgYSBab25lIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBmaXhlZCBvZmZzZXRcbiAgICogICBpbiBtaW51dGVzIGlzIHJldHVybmVkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLCB0aGUgZGVmYXVsdCB6b25lIGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfG51bWJlcn0gW2lucHV0XSAtIHRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWRcbiAgICogQHJldHVybiB7Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVab25lKGlucHV0KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVpvbmUoaW5wdXQsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygc3RhbmRhbG9uZSBtb250aCBuYW1lcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJudW1lcmljXCIsIFwiMi1kaWdpdFwiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKClbMF0gLy89PiAnSmFudWFyeSdcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ3Nob3J0JylbMF0gLy89PiAnSmFuJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycpWzBdIC8vPT4gJzEnXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcsIHsgbG9jYWxlOiAnZnItQ0EnIH0gKVswXSAvLz0+ICdqYW52LidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICdcdTA2NjEnXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdsb25nJywgeyBvdXRwdXRDYWxlbmRhcjogJ2lzbGFtaWMnIH0pWzBdIC8vPT4gJ1JhYmlcdTAyQkIgSSdcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgbW9udGhzKFxuICAgIGxlbmd0aCA9IFwibG9uZ1wiLFxuICAgIHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCwgbG9jT2JqID0gbnVsbCwgb3V0cHV0Q2FsZW5kYXIgPSBcImdyZWdvcnlcIiB9ID0ge31cbiAgKSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpKS5tb250aHMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IG1vbnRoIG5hbWVzLlxuICAgKiBGb3JtYXQgbW9udGhzIGRpZmZlciBmcm9tIHN0YW5kYWxvbmUgbW9udGhzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byB0aGUgZGF5IG9mIHRoZSBtb250aC4gSW4gc29tZSBsYW5ndWFnZXMsIHRoYXRcbiAgICogY2hhbmdlcyB0aGUgc3RyaW5nLlxuICAgKiBTZWUge0BsaW5rIEluZm8jbW9udGhzfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJudW1lcmljXCIsIFwiMi1kaWdpdFwiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1vbnRoc0Zvcm1hdChcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCIgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgd2VlayBuYW1lcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgd2Vla2RheSByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKClbMF0gLy89PiAnTW9uZGF5J1xuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcpWzBdIC8vPT4gJ01vbidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9KVswXSAvLz0+ICdsdW4uJ1xuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcsIHsgbG9jYWxlOiAnYXInIH0pWzBdIC8vPT4gJ1x1MDYyN1x1MDY0NFx1MDYyN1x1MDYyQlx1MDY0Nlx1MDY0QVx1MDY0NidcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBzdGF0aWMgd2Vla2RheXMobGVuZ3RoID0gXCJsb25nXCIsIHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCwgbG9jT2JqID0gbnVsbCB9ID0ge30pIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IHdlZWsgbmFtZXMuXG4gICAqIEZvcm1hdCB3ZWVrZGF5cyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIHdlZWtkYXlzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byBtb3JlIGRhdGUgaW5mb3JtYXRpb24uIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0XG4gICAqIGNoYW5nZXMgdGhlIHN0cmluZy5cbiAgICogU2VlIHtAbGluayBJbmZvI3dlZWtkYXlzfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9bnVsbF0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIHN0YXRpYyB3ZWVrZGF5c0Zvcm1hdChcbiAgICBsZW5ndGggPSBcImxvbmdcIixcbiAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwgfSA9IHt9XG4gICkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG51bGwpKS53ZWVrZGF5cyhsZW5ndGgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBtZXJpZGllbXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAZXhhbXBsZSBJbmZvLm1lcmlkaWVtcygpIC8vPT4gWyAnQU0nLCAnUE0nIF1cbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoeyBsb2NhbGU6ICdteScgfSkgLy89PiBbICdcdTEwMTRcdTEwMzZcdTEwMTRcdTEwMDBcdTEwM0EnLCAnXHUxMDBBXHUxMDE0XHUxMDMxJyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIG1lcmlkaWVtcyh7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlKS5tZXJpZGllbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZXJhcywgc3VjaCBhcyBbJ0JDJywgJ0FEJ10uIFRoZSBsb2NhbGUgY2FuIGJlIHNwZWNpZmllZCwgYnV0IHRoZSBjYWxlbmRhciBzeXN0ZW0gaXMgYWx3YXlzIEdyZWdvcmlhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J3Nob3J0J10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBlcmEgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJzaG9ydFwiIG9yIFwibG9uZ1wiLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCkgLy89PiBbICdCQycsICdBRCcgXVxuICAgKiBAZXhhbXBsZSBJbmZvLmVyYXMoJ2xvbmcnKSAvLz0+IFsgJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJywgeyBsb2NhbGU6ICdmcicgfSkgLy89PiBbICdhdmFudCBKXHUwMEU5c3VzLUNocmlzdCcsICdhcHJcdTAwRThzIEpcdTAwRTlzdXMtQ2hyaXN0JyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIGVyYXMobGVuZ3RoID0gXCJzaG9ydFwiLCB7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudWxsLCBcImdyZWdvcnlcIikuZXJhcyhsZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIGF2YWlsYWJsZSBmZWF0dXJlcyBpbiB0aGlzIGVudmlyb25tZW50LlxuICAgKiBTb21lIGZlYXR1cmVzIG9mIEx1eG9uIGFyZSBub3QgYXZhaWxhYmxlIGluIGFsbCBlbnZpcm9ubWVudHMuIEZvciBleGFtcGxlLCBvbiBvbGRlciBicm93c2VycywgcmVsYXRpdmUgdGltZSBmb3JtYXR0aW5nIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgdGhlIGNhc2UuXG4gICAqIEtleXM6XG4gICAqICogYHJlbGF0aXZlYDogd2hldGhlciB0aGlzIGVudmlyb25tZW50IHN1cHBvcnRzIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZ1xuICAgKiBAZXhhbXBsZSBJbmZvLmZlYXR1cmVzKCkgLy89PiB7IHJlbGF0aXZlOiBmYWxzZSB9XG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBmZWF0dXJlcygpIHtcbiAgICByZXR1cm4geyByZWxhdGl2ZTogaGFzUmVsYXRpdmUoKSB9O1xuICB9XG59XG4iLCAiaW1wb3J0IER1cmF0aW9uIGZyb20gXCIuLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiBkYXlEaWZmKGVhcmxpZXIsIGxhdGVyKSB7XG4gIGNvbnN0IHV0Y0RheVN0YXJ0ID0gKGR0KSA9PiBkdC50b1VUQygwLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkuc3RhcnRPZihcImRheVwiKS52YWx1ZU9mKCksXG4gICAgbXMgPSB1dGNEYXlTdGFydChsYXRlcikgLSB1dGNEYXlTdGFydChlYXJsaWVyKTtcbiAgcmV0dXJuIE1hdGguZmxvb3IoRHVyYXRpb24uZnJvbU1pbGxpcyhtcykuYXMoXCJkYXlzXCIpKTtcbn1cblxuZnVuY3Rpb24gaGlnaE9yZGVyRGlmZnMoY3Vyc29yLCBsYXRlciwgdW5pdHMpIHtcbiAgY29uc3QgZGlmZmVycyA9IFtcbiAgICBbXCJ5ZWFyc1wiLCAoYSwgYikgPT4gYi55ZWFyIC0gYS55ZWFyXSxcbiAgICBbXCJxdWFydGVyc1wiLCAoYSwgYikgPT4gYi5xdWFydGVyIC0gYS5xdWFydGVyXSxcbiAgICBbXCJtb250aHNcIiwgKGEsIGIpID0+IGIubW9udGggLSBhLm1vbnRoICsgKGIueWVhciAtIGEueWVhcikgKiAxMl0sXG4gICAgW1xuICAgICAgXCJ3ZWVrc1wiLFxuICAgICAgKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgZGF5cyA9IGRheURpZmYoYSwgYik7XG4gICAgICAgIHJldHVybiAoZGF5cyAtIChkYXlzICUgNykpIC8gNztcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXCJkYXlzXCIsIGRheURpZmZdLFxuICBdO1xuXG4gIGNvbnN0IHJlc3VsdHMgPSB7fTtcbiAgbGV0IGxvd2VzdE9yZGVyLCBoaWdoV2F0ZXI7XG5cbiAgZm9yIChjb25zdCBbdW5pdCwgZGlmZmVyXSBvZiBkaWZmZXJzKSB7XG4gICAgaWYgKHVuaXRzLmluZGV4T2YodW5pdCkgPj0gMCkge1xuICAgICAgbG93ZXN0T3JkZXIgPSB1bml0O1xuXG4gICAgICBsZXQgZGVsdGEgPSBkaWZmZXIoY3Vyc29yLCBsYXRlcik7XG4gICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cyh7IFt1bml0XTogZGVsdGEgfSk7XG5cbiAgICAgIGlmIChoaWdoV2F0ZXIgPiBsYXRlcikge1xuICAgICAgICBjdXJzb3IgPSBjdXJzb3IucGx1cyh7IFt1bml0XTogZGVsdGEgLSAxIH0pO1xuICAgICAgICBkZWx0YSAtPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3Vyc29yID0gaGlnaFdhdGVyO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRzW3VuaXRdID0gZGVsdGE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtjdXJzb3IsIHJlc3VsdHMsIGhpZ2hXYXRlciwgbG93ZXN0T3JkZXJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZWFybGllciwgbGF0ZXIsIHVuaXRzLCBvcHRzKSB7XG4gIGxldCBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXSA9IGhpZ2hPcmRlckRpZmZzKGVhcmxpZXIsIGxhdGVyLCB1bml0cyk7XG5cbiAgY29uc3QgcmVtYWluaW5nTWlsbGlzID0gbGF0ZXIgLSBjdXJzb3I7XG5cbiAgY29uc3QgbG93ZXJPcmRlclVuaXRzID0gdW5pdHMuZmlsdGVyKFxuICAgICh1KSA9PiBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCJdLmluZGV4T2YodSkgPj0gMFxuICApO1xuXG4gIGlmIChsb3dlck9yZGVyVW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGhpZ2hXYXRlciA8IGxhdGVyKSB7XG4gICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cyh7IFtsb3dlc3RPcmRlcl06IDEgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhpZ2hXYXRlciAhPT0gY3Vyc29yKSB7XG4gICAgICByZXN1bHRzW2xvd2VzdE9yZGVyXSA9IChyZXN1bHRzW2xvd2VzdE9yZGVyXSB8fCAwKSArIHJlbWFpbmluZ01pbGxpcyAvIChoaWdoV2F0ZXIgLSBjdXJzb3IpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gRHVyYXRpb24uZnJvbU9iamVjdChyZXN1bHRzLCBvcHRzKTtcblxuICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhyZW1haW5pbmdNaWxsaXMsIG9wdHMpXG4gICAgICAuc2hpZnRUbyguLi5sb3dlck9yZGVyVW5pdHMpXG4gICAgICAucGx1cyhkdXJhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xuICB9XG59XG4iLCAiY29uc3QgbnVtYmVyaW5nU3lzdGVtcyA9IHtcbiAgYXJhYjogXCJbXFx1MDY2MC1cXHUwNjY5XVwiLFxuICBhcmFiZXh0OiBcIltcXHUwNkYwLVxcdTA2RjldXCIsXG4gIGJhbGk6IFwiW1xcdTFCNTAtXFx1MUI1OV1cIixcbiAgYmVuZzogXCJbXFx1MDlFNi1cXHUwOUVGXVwiLFxuICBkZXZhOiBcIltcXHUwOTY2LVxcdTA5NkZdXCIsXG4gIGZ1bGx3aWRlOiBcIltcXHVGRjEwLVxcdUZGMTldXCIsXG4gIGd1anI6IFwiW1xcdTBBRTYtXFx1MEFFRl1cIixcbiAgaGFuaWRlYzogXCJbXHUzMDA3fFx1NEUwMHxcdTRFOEN8XHU0RTA5fFx1NTZEQnxcdTRFOTR8XHU1MTZEfFx1NEUwM3xcdTUxNkJ8XHU0RTVEXVwiLFxuICBraG1yOiBcIltcXHUxN0UwLVxcdTE3RTldXCIsXG4gIGtuZGE6IFwiW1xcdTBDRTYtXFx1MENFRl1cIixcbiAgbGFvbzogXCJbXFx1MEVEMC1cXHUwRUQ5XVwiLFxuICBsaW1iOiBcIltcXHUxOTQ2LVxcdTE5NEZdXCIsXG4gIG1seW06IFwiW1xcdTBENjYtXFx1MEQ2Rl1cIixcbiAgbW9uZzogXCJbXFx1MTgxMC1cXHUxODE5XVwiLFxuICBteW1yOiBcIltcXHUxMDQwLVxcdTEwNDldXCIsXG4gIG9yeWE6IFwiW1xcdTBCNjYtXFx1MEI2Rl1cIixcbiAgdGFtbGRlYzogXCJbXFx1MEJFNi1cXHUwQkVGXVwiLFxuICB0ZWx1OiBcIltcXHUwQzY2LVxcdTBDNkZdXCIsXG4gIHRoYWk6IFwiW1xcdTBFNTAtXFx1MEU1OV1cIixcbiAgdGlidDogXCJbXFx1MEYyMC1cXHUwRjI5XVwiLFxuICBsYXRuOiBcIlxcXFxkXCIsXG59O1xuXG5jb25zdCBudW1iZXJpbmdTeXN0ZW1zVVRGMTYgPSB7XG4gIGFyYWI6IFsxNjMyLCAxNjQxXSxcbiAgYXJhYmV4dDogWzE3NzYsIDE3ODVdLFxuICBiYWxpOiBbNjk5MiwgNzAwMV0sXG4gIGJlbmc6IFsyNTM0LCAyNTQzXSxcbiAgZGV2YTogWzI0MDYsIDI0MTVdLFxuICBmdWxsd2lkZTogWzY1Mjk2LCA2NTMwM10sXG4gIGd1anI6IFsyNzkwLCAyNzk5XSxcbiAga2htcjogWzYxMTIsIDYxMjFdLFxuICBrbmRhOiBbMzMwMiwgMzMxMV0sXG4gIGxhb286IFszNzkyLCAzODAxXSxcbiAgbGltYjogWzY0NzAsIDY0NzldLFxuICBtbHltOiBbMzQzMCwgMzQzOV0sXG4gIG1vbmc6IFs2MTYwLCA2MTY5XSxcbiAgbXltcjogWzQxNjAsIDQxNjldLFxuICBvcnlhOiBbMjkxOCwgMjkyN10sXG4gIHRhbWxkZWM6IFszMDQ2LCAzMDU1XSxcbiAgdGVsdTogWzMxNzQsIDMxODNdLFxuICB0aGFpOiBbMzY2NCwgMzY3M10sXG4gIHRpYnQ6IFszODcyLCAzODgxXSxcbn07XG5cbmNvbnN0IGhhbmlkZWNDaGFycyA9IG51bWJlcmluZ1N5c3RlbXMuaGFuaWRlYy5yZXBsYWNlKC9bXFxbfFxcXV0vZywgXCJcIikuc3BsaXQoXCJcIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURpZ2l0cyhzdHIpIHtcbiAgbGV0IHZhbHVlID0gcGFyc2VJbnQoc3RyLCAxMCk7XG4gIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcblxuICAgICAgaWYgKHN0cltpXS5zZWFyY2gobnVtYmVyaW5nU3lzdGVtcy5oYW5pZGVjKSAhPT0gLTEpIHtcbiAgICAgICAgdmFsdWUgKz0gaGFuaWRlY0NoYXJzLmluZGV4T2Yoc3RyW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG51bWJlcmluZ1N5c3RlbXNVVEYxNikge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBudW1iZXJpbmdTeXN0ZW1zVVRGMTZba2V5XTtcbiAgICAgICAgICBpZiAoY29kZSA+PSBtaW4gJiYgY29kZSA8PSBtYXgpIHtcbiAgICAgICAgICAgIHZhbHVlICs9IGNvZGUgLSBtaW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlnaXRSZWdleCh7IG51bWJlcmluZ1N5c3RlbSB9LCBhcHBlbmQgPSBcIlwiKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKGAke251bWJlcmluZ1N5c3RlbXNbbnVtYmVyaW5nU3lzdGVtIHx8IFwibGF0blwiXX0ke2FwcGVuZH1gKTtcbn1cbiIsICJpbXBvcnQgeyBwYXJzZU1pbGxpcywgaXNVbmRlZmluZWQsIHVudHJ1bmNhdGVZZWFyLCBzaWduZWRPZmZzZXQsIGhhc093blByb3BlcnR5IH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0IEZvcm1hdHRlciBmcm9tIFwiLi9mb3JtYXR0ZXIuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4uL3pvbmVzL2ZpeGVkT2Zmc2V0Wm9uZS5qc1wiO1xuaW1wb3J0IElBTkFab25lIGZyb20gXCIuLi96b25lcy9JQU5BWm9uZS5qc1wiO1xuaW1wb3J0IERhdGVUaW1lIGZyb20gXCIuLi9kYXRldGltZS5qc1wiO1xuaW1wb3J0IHsgZGlnaXRSZWdleCwgcGFyc2VEaWdpdHMgfSBmcm9tIFwiLi9kaWdpdHMuanNcIjtcbmltcG9ydCB7IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy5qc1wiO1xuXG5jb25zdCBNSVNTSU5HX0ZUUCA9IFwibWlzc2luZyBJbnRsLkRhdGVUaW1lRm9ybWF0LmZvcm1hdFRvUGFydHMgc3VwcG9ydFwiO1xuXG5mdW5jdGlvbiBpbnRVbml0KHJlZ2V4LCBwb3N0ID0gKGkpID0+IGkpIHtcbiAgcmV0dXJuIHsgcmVnZXgsIGRlc2VyOiAoW3NdKSA9PiBwb3N0KHBhcnNlRGlnaXRzKHMpKSB9O1xufVxuXG5jb25zdCBOQlNQID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApO1xuY29uc3Qgc3BhY2VPck5CU1AgPSBgWyAke05CU1B9XWA7XG5jb25zdCBzcGFjZU9yTkJTUFJlZ0V4cCA9IG5ldyBSZWdFeHAoc3BhY2VPck5CU1AsIFwiZ1wiKTtcblxuZnVuY3Rpb24gZml4TGlzdFJlZ2V4KHMpIHtcbiAgLy8gbWFrZSBkb3RzIG9wdGlvbmFsIGFuZCBhbHNvIG1ha2UgdGhlbSBsaXRlcmFsXG4gIC8vIG1ha2Ugc3BhY2UgYW5kIG5vbiBicmVha2FibGUgc3BhY2UgY2hhcmFjdGVycyBpbnRlcmNoYW5nZWFibGVcbiAgcmV0dXJuIHMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC4/XCIpLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIHNwYWNlT3JOQlNQKTtcbn1cblxuZnVuY3Rpb24gc3RyaXBJbnNlbnNpdGl2aXRpZXMocykge1xuICByZXR1cm4gc1xuICAgIC5yZXBsYWNlKC9cXC4vZywgXCJcIikgLy8gaWdub3JlIGRvdHMgdGhhdCB3ZXJlIG1hZGUgb3B0aW9uYWxcbiAgICAucmVwbGFjZShzcGFjZU9yTkJTUFJlZ0V4cCwgXCIgXCIpIC8vIGludGVyY2hhbmdlIHNwYWNlIGFuZCBuYnNwXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG9uZU9mKHN0cmluZ3MsIHN0YXJ0SW5kZXgpIHtcbiAgaWYgKHN0cmluZ3MgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVnZXg6IFJlZ0V4cChzdHJpbmdzLm1hcChmaXhMaXN0UmVnZXgpLmpvaW4oXCJ8XCIpKSxcbiAgICAgIGRlc2VyOiAoW3NdKSA9PlxuICAgICAgICBzdHJpbmdzLmZpbmRJbmRleCgoaSkgPT4gc3RyaXBJbnNlbnNpdGl2aXRpZXMocykgPT09IHN0cmlwSW5zZW5zaXRpdml0aWVzKGkpKSArIHN0YXJ0SW5kZXgsXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvZmZzZXQocmVnZXgsIGdyb3Vwcykge1xuICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbLCBoLCBtXSkgPT4gc2lnbmVkT2Zmc2V0KGgsIG0pLCBncm91cHMgfTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlKHJlZ2V4KSB7XG4gIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFtzXSkgPT4gcyB9O1xufVxuXG5mdW5jdGlvbiBlc2NhcGVUb2tlbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiB1bml0Rm9yVG9rZW4odG9rZW4sIGxvYykge1xuICBjb25zdCBvbmUgPSBkaWdpdFJlZ2V4KGxvYyksXG4gICAgdHdvID0gZGlnaXRSZWdleChsb2MsIFwiezJ9XCIpLFxuICAgIHRocmVlID0gZGlnaXRSZWdleChsb2MsIFwiezN9XCIpLFxuICAgIGZvdXIgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7NH1cIiksXG4gICAgc2l4ID0gZGlnaXRSZWdleChsb2MsIFwiezZ9XCIpLFxuICAgIG9uZU9yVHdvID0gZGlnaXRSZWdleChsb2MsIFwiezEsMn1cIiksXG4gICAgb25lVG9UaHJlZSA9IGRpZ2l0UmVnZXgobG9jLCBcInsxLDN9XCIpLFxuICAgIG9uZVRvU2l4ID0gZGlnaXRSZWdleChsb2MsIFwiezEsNn1cIiksXG4gICAgb25lVG9OaW5lID0gZGlnaXRSZWdleChsb2MsIFwiezEsOX1cIiksXG4gICAgdHdvVG9Gb3VyID0gZGlnaXRSZWdleChsb2MsIFwiezIsNH1cIiksXG4gICAgZm91clRvU2l4ID0gZGlnaXRSZWdleChsb2MsIFwiezQsNn1cIiksXG4gICAgbGl0ZXJhbCA9ICh0KSA9PiAoeyByZWdleDogUmVnRXhwKGVzY2FwZVRva2VuKHQudmFsKSksIGRlc2VyOiAoW3NdKSA9PiBzLCBsaXRlcmFsOiB0cnVlIH0pLFxuICAgIHVuaXRhdGUgPSAodCkgPT4ge1xuICAgICAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICAgICAgcmV0dXJuIGxpdGVyYWwodCk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHQudmFsKSB7XG4gICAgICAgIC8vIGVyYVxuICAgICAgICBjYXNlIFwiR1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MuZXJhcyhcInNob3J0XCIsIGZhbHNlKSwgMCk7XG4gICAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MuZXJhcyhcImxvbmdcIiwgZmFsc2UpLCAwKTtcbiAgICAgICAgLy8geWVhcnNcbiAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1NpeCk7XG4gICAgICAgIGNhc2UgXCJ5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpO1xuICAgICAgICBjYXNlIFwieXl5eVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpO1xuICAgICAgICBjYXNlIFwieXl5eXlcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyVG9TaXgpO1xuICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQoc2l4KTtcbiAgICAgICAgLy8gbW9udGhzXG4gICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJzaG9ydFwiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiTU1NTVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwibG9uZ1wiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiTFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcIkxMXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcIkxMTFwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwic2hvcnRcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG4gICAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoXCJsb25nXCIsIGZhbHNlLCBmYWxzZSksIDEpO1xuICAgICAgICAvLyBkYXRlc1xuICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcImRkXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgLy8gb3JkaW5hbHNcbiAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1RocmVlKTtcbiAgICAgICAgY2FzZSBcIm9vb1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHRocmVlKTtcbiAgICAgICAgLy8gdGltZVxuICAgICAgICBjYXNlIFwiSEhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgICBjYXNlIFwiSFwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcImhoXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJtbVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuICAgICAgICBjYXNlIFwicVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInFxXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcbiAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJzc1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9UaHJlZSk7XG4gICAgICAgIGNhc2UgXCJTU1NcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7XG4gICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVUb05pbmUpO1xuICAgICAgICBjYXNlIFwidXVcIjpcbiAgICAgICAgICByZXR1cm4gc2ltcGxlKG9uZU9yVHdvKTtcbiAgICAgICAgY2FzZSBcInV1dVwiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7XG4gICAgICAgIC8vIG1lcmlkaWVtXG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tZXJpZGllbXMoKSwgMCk7XG4gICAgICAgIC8vIHdlZWtZZWFyIChrKVxuICAgICAgICBjYXNlIFwia2tra1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpO1xuICAgICAgICBjYXNlIFwia2tcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d29Ub0ZvdXIsIHVudHJ1bmNhdGVZZWFyKTtcbiAgICAgICAgLy8gd2Vla051bWJlciAoVylcbiAgICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG4gICAgICAgIGNhc2UgXCJXV1wiOlxuICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAgIC8vIHdlZWtkYXlzXG4gICAgICAgIGNhc2UgXCJFXCI6XG4gICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgcmV0dXJuIGludFVuaXQob25lKTtcbiAgICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoXCJzaG9ydFwiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcIkVFRUVcIjpcbiAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwibG9uZ1wiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoXCJzaG9ydFwiLCB0cnVlLCBmYWxzZSksIDEpO1xuICAgICAgICBjYXNlIFwiY2NjY1wiOlxuICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoXCJsb25nXCIsIHRydWUsIGZhbHNlKSwgMSk7XG4gICAgICAgIC8vIG9mZnNldC96b25lXG4gICAgICAgIGNhc2UgXCJaXCI6XG4gICAgICAgIGNhc2UgXCJaWlwiOlxuICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKD86Oigke3R3by5zb3VyY2V9KSk/YCksIDIpO1xuICAgICAgICBjYXNlIFwiWlpaXCI6XG4gICAgICAgICAgcmV0dXJuIG9mZnNldChuZXcgUmVnRXhwKGAoWystXSR7b25lT3JUd28uc291cmNlfSkoJHt0d28uc291cmNlfSk/YCksIDIpO1xuICAgICAgICAvLyB3ZSBkb24ndCBzdXBwb3J0IFpaWlogKFBTVCkgb3IgWlpaWlogKFBhY2lmaWMgU3RhbmRhcmQgVGltZSkgaW4gcGFyc2luZ1xuICAgICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW55IHdheSB0byBmaWd1cmUgb3V0IHdoYXQgdGhleSBhcmVcbiAgICAgICAgY2FzZSBcInpcIjpcbiAgICAgICAgICByZXR1cm4gc2ltcGxlKC9bYS16XystL117MSwyNTZ9Py9pKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbGl0ZXJhbCh0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGNvbnN0IHVuaXQgPSB1bml0YXRlKHRva2VuKSB8fCB7XG4gICAgaW52YWxpZFJlYXNvbjogTUlTU0lOR19GVFAsXG4gIH07XG5cbiAgdW5pdC50b2tlbiA9IHRva2VuO1xuXG4gIHJldHVybiB1bml0O1xufVxuXG5jb25zdCBwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbCA9IHtcbiAgeWVhcjoge1xuICAgIFwiMi1kaWdpdFwiOiBcInl5XCIsXG4gICAgbnVtZXJpYzogXCJ5eXl5eVwiLFxuICB9LFxuICBtb250aDoge1xuICAgIG51bWVyaWM6IFwiTVwiLFxuICAgIFwiMi1kaWdpdFwiOiBcIk1NXCIsXG4gICAgc2hvcnQ6IFwiTU1NXCIsXG4gICAgbG9uZzogXCJNTU1NXCIsXG4gIH0sXG4gIGRheToge1xuICAgIG51bWVyaWM6IFwiZFwiLFxuICAgIFwiMi1kaWdpdFwiOiBcImRkXCIsXG4gIH0sXG4gIHdlZWtkYXk6IHtcbiAgICBzaG9ydDogXCJFRUVcIixcbiAgICBsb25nOiBcIkVFRUVcIixcbiAgfSxcbiAgZGF5cGVyaW9kOiBcImFcIixcbiAgZGF5UGVyaW9kOiBcImFcIixcbiAgaG91cjoge1xuICAgIG51bWVyaWM6IFwiaFwiLFxuICAgIFwiMi1kaWdpdFwiOiBcImhoXCIsXG4gIH0sXG4gIG1pbnV0ZToge1xuICAgIG51bWVyaWM6IFwibVwiLFxuICAgIFwiMi1kaWdpdFwiOiBcIm1tXCIsXG4gIH0sXG4gIHNlY29uZDoge1xuICAgIG51bWVyaWM6IFwic1wiLFxuICAgIFwiMi1kaWdpdFwiOiBcInNzXCIsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiB0b2tlbkZvclBhcnQocGFydCwgbG9jYWxlLCBmb3JtYXRPcHRzKSB7XG4gIGNvbnN0IHsgdHlwZSwgdmFsdWUgfSA9IHBhcnQ7XG5cbiAgaWYgKHR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpdGVyYWw6IHRydWUsXG4gICAgICB2YWw6IHZhbHVlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBzdHlsZSA9IGZvcm1hdE9wdHNbdHlwZV07XG5cbiAgbGV0IHZhbCA9IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsW3R5cGVdO1xuICBpZiAodHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIikge1xuICAgIHZhbCA9IHZhbFtzdHlsZV07XG4gIH1cblxuICBpZiAodmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpdGVyYWw6IGZhbHNlLFxuICAgICAgdmFsLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBidWlsZFJlZ2V4KHVuaXRzKSB7XG4gIGNvbnN0IHJlID0gdW5pdHMubWFwKCh1KSA9PiB1LnJlZ2V4KS5yZWR1Y2UoKGYsIHIpID0+IGAke2Z9KCR7ci5zb3VyY2V9KWAsIFwiXCIpO1xuICByZXR1cm4gW2BeJHtyZX0kYCwgdW5pdHNdO1xufVxuXG5mdW5jdGlvbiBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChyZWdleCk7XG5cbiAgaWYgKG1hdGNoZXMpIHtcbiAgICBjb25zdCBhbGwgPSB7fTtcbiAgICBsZXQgbWF0Y2hJbmRleCA9IDE7XG4gICAgZm9yIChjb25zdCBpIGluIGhhbmRsZXJzKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkoaGFuZGxlcnMsIGkpKSB7XG4gICAgICAgIGNvbnN0IGggPSBoYW5kbGVyc1tpXSxcbiAgICAgICAgICBncm91cHMgPSBoLmdyb3VwcyA/IGguZ3JvdXBzICsgMSA6IDE7XG4gICAgICAgIGlmICghaC5saXRlcmFsICYmIGgudG9rZW4pIHtcbiAgICAgICAgICBhbGxbaC50b2tlbi52YWxbMF1dID0gaC5kZXNlcihtYXRjaGVzLnNsaWNlKG1hdGNoSW5kZXgsIG1hdGNoSW5kZXggKyBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaEluZGV4ICs9IGdyb3VwcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFttYXRjaGVzLCBhbGxdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbbWF0Y2hlcywge31dO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcykge1xuICBjb25zdCB0b0ZpZWxkID0gKHRva2VuKSA9PiB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgcmV0dXJuIFwibWlsbGlzZWNvbmRcIjtcbiAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgIHJldHVybiBcInNlY29uZFwiO1xuICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgcmV0dXJuIFwibWludXRlXCI7XG4gICAgICBjYXNlIFwiaFwiOlxuICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgcmV0dXJuIFwiaG91clwiO1xuICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF5XCI7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICByZXR1cm4gXCJvcmRpbmFsXCI7XG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcbiAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgIHJldHVybiBcInllYXJcIjtcbiAgICAgIGNhc2UgXCJFXCI6XG4gICAgICBjYXNlIFwiY1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrZGF5XCI7XG4gICAgICBjYXNlIFwiV1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrTnVtYmVyXCI7XG4gICAgICBjYXNlIFwia1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrWWVhclwiO1xuICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgcmV0dXJuIFwicXVhcnRlclwiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGxldCB6b25lID0gbnVsbDtcbiAgbGV0IHNwZWNpZmljT2Zmc2V0O1xuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMueikpIHtcbiAgICB6b25lID0gSUFOQVpvbmUuY3JlYXRlKG1hdGNoZXMueik7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuWikpIHtcbiAgICBpZiAoIXpvbmUpIHtcbiAgICAgIHpvbmUgPSBuZXcgRml4ZWRPZmZzZXRab25lKG1hdGNoZXMuWik7XG4gICAgfVxuICAgIHNwZWNpZmljT2Zmc2V0ID0gbWF0Y2hlcy5aO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnEpKSB7XG4gICAgbWF0Y2hlcy5NID0gKG1hdGNoZXMucSAtIDEpICogMyArIDE7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuaCkpIHtcbiAgICBpZiAobWF0Y2hlcy5oIDwgMTIgJiYgbWF0Y2hlcy5hID09PSAxKSB7XG4gICAgICBtYXRjaGVzLmggKz0gMTI7XG4gICAgfSBlbHNlIGlmIChtYXRjaGVzLmggPT09IDEyICYmIG1hdGNoZXMuYSA9PT0gMCkge1xuICAgICAgbWF0Y2hlcy5oID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAobWF0Y2hlcy5HID09PSAwICYmIG1hdGNoZXMueSkge1xuICAgIG1hdGNoZXMueSA9IC1tYXRjaGVzLnk7XG4gIH1cblxuICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMudSkpIHtcbiAgICBtYXRjaGVzLlMgPSBwYXJzZU1pbGxpcyhtYXRjaGVzLnUpO1xuICB9XG5cbiAgY29uc3QgdmFscyA9IE9iamVjdC5rZXlzKG1hdGNoZXMpLnJlZHVjZSgociwgaykgPT4ge1xuICAgIGNvbnN0IGYgPSB0b0ZpZWxkKGspO1xuICAgIGlmIChmKSB7XG4gICAgICByW2ZdID0gbWF0Y2hlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfSwge30pO1xuXG4gIHJldHVybiBbdmFscywgem9uZSwgc3BlY2lmaWNPZmZzZXRdO1xufVxuXG5sZXQgZHVtbXlEYXRlVGltZUNhY2hlID0gbnVsbDtcblxuZnVuY3Rpb24gZ2V0RHVtbXlEYXRlVGltZSgpIHtcbiAgaWYgKCFkdW1teURhdGVUaW1lQ2FjaGUpIHtcbiAgICBkdW1teURhdGVUaW1lQ2FjaGUgPSBEYXRlVGltZS5mcm9tTWlsbGlzKDE1NTU1NTU1NTU1NTUpO1xuICB9XG5cbiAgcmV0dXJuIGR1bW15RGF0ZVRpbWVDYWNoZTtcbn1cblxuZnVuY3Rpb24gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHRva2VuLCBsb2NhbGUpIHtcbiAgaWYgKHRva2VuLmxpdGVyYWwpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4udmFsKTtcblxuICBpZiAoIWZvcm1hdE9wdHMpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBjb25zdCBmb3JtYXR0ZXIgPSBGb3JtYXR0ZXIuY3JlYXRlKGxvY2FsZSwgZm9ybWF0T3B0cyk7XG4gIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdERhdGVUaW1lUGFydHMoZ2V0RHVtbXlEYXRlVGltZSgpKTtcblxuICBjb25zdCB0b2tlbnMgPSBwYXJ0cy5tYXAoKHApID0+IHRva2VuRm9yUGFydChwLCBsb2NhbGUsIGZvcm1hdE9wdHMpKTtcblxuICBpZiAodG9rZW5zLmluY2x1ZGVzKHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5mdW5jdGlvbiBleHBhbmRNYWNyb1Rva2Vucyh0b2tlbnMsIGxvY2FsZSkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi50b2tlbnMubWFwKCh0KSA9PiBtYXliZUV4cGFuZE1hY3JvVG9rZW4odCwgbG9jYWxlKSkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkge1xuICBjb25zdCB0b2tlbnMgPSBleHBhbmRNYWNyb1Rva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm9ybWF0KSwgbG9jYWxlKSxcbiAgICB1bml0cyA9IHRva2Vucy5tYXAoKHQpID0+IHVuaXRGb3JUb2tlbih0LCBsb2NhbGUpKSxcbiAgICBkaXNxdWFsaWZ5aW5nVW5pdCA9IHVuaXRzLmZpbmQoKHQpID0+IHQuaW52YWxpZFJlYXNvbik7XG5cbiAgaWYgKGRpc3F1YWxpZnlpbmdVbml0KSB7XG4gICAgcmV0dXJuIHsgaW5wdXQsIHRva2VucywgaW52YWxpZFJlYXNvbjogZGlzcXVhbGlmeWluZ1VuaXQuaW52YWxpZFJlYXNvbiB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFtyZWdleFN0cmluZywgaGFuZGxlcnNdID0gYnVpbGRSZWdleCh1bml0cyksXG4gICAgICByZWdleCA9IFJlZ0V4cChyZWdleFN0cmluZywgXCJpXCIpLFxuICAgICAgW3Jhd01hdGNoZXMsIG1hdGNoZXNdID0gbWF0Y2goaW5wdXQsIHJlZ2V4LCBoYW5kbGVycyksXG4gICAgICBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldF0gPSBtYXRjaGVzXG4gICAgICAgID8gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKVxuICAgICAgICA6IFtudWxsLCBudWxsLCB1bmRlZmluZWRdO1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRjaGVzLCBcImFcIikgJiYgaGFzT3duUHJvcGVydHkobWF0Y2hlcywgXCJIXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoXG4gICAgICAgIFwiQ2FuJ3QgaW5jbHVkZSBtZXJpZGllbSB3aGVuIHNwZWNpZnlpbmcgMjQtaG91ciBmb3JtYXRcIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW5wdXQsIHRva2VucywgcmVnZXgsIHJhd01hdGNoZXMsIG1hdGNoZXMsIHJlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkge1xuICBjb25zdCB7IHJlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb24gfSA9IGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCk7XG4gIHJldHVybiBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZFJlYXNvbl07XG59XG4iLCAiaW1wb3J0IHtcbiAgaW50ZWdlckJldHdlZW4sXG4gIGlzTGVhcFllYXIsXG4gIHRpbWVPYmplY3QsXG4gIGRheXNJblllYXIsXG4gIGRheXNJbk1vbnRoLFxuICB3ZWVrc0luV2Vla1llYXIsXG4gIGlzSW50ZWdlcixcbn0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0IEludmFsaWQgZnJvbSBcIi4vaW52YWxpZC5qc1wiO1xuXG5jb25zdCBub25MZWFwTGFkZGVyID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XSxcbiAgbGVhcExhZGRlciA9IFswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNV07XG5cbmZ1bmN0aW9uIHVuaXRPdXRPZlJhbmdlKHVuaXQsIHZhbHVlKSB7XG4gIHJldHVybiBuZXcgSW52YWxpZChcbiAgICBcInVuaXQgb3V0IG9mIHJhbmdlXCIsXG4gICAgYHlvdSBzcGVjaWZpZWQgJHt2YWx1ZX0gKG9mIHR5cGUgJHt0eXBlb2YgdmFsdWV9KSBhcyBhICR7dW5pdH0sIHdoaWNoIGlzIGludmFsaWRgXG4gICk7XG59XG5cbmZ1bmN0aW9uIGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCAtIDEsIGRheSkpO1xuXG4gIGlmICh5ZWFyIDwgMTAwICYmIHllYXIgPj0gMCkge1xuICAgIGQuc2V0VVRDRnVsbFllYXIoZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCk7XG4gIH1cblxuICBjb25zdCBqcyA9IGQuZ2V0VVRDRGF5KCk7XG5cbiAgcmV0dXJuIGpzID09PSAwID8gNyA6IGpzO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KSB7XG4gIHJldHVybiBkYXkgKyAoaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyKVttb250aCAtIDFdO1xufVxuXG5mdW5jdGlvbiB1bmNvbXB1dGVPcmRpbmFsKHllYXIsIG9yZGluYWwpIHtcbiAgY29uc3QgdGFibGUgPSBpc0xlYXBZZWFyKHllYXIpID8gbGVhcExhZGRlciA6IG5vbkxlYXBMYWRkZXIsXG4gICAgbW9udGgwID0gdGFibGUuZmluZEluZGV4KChpKSA9PiBpIDwgb3JkaW5hbCksXG4gICAgZGF5ID0gb3JkaW5hbCAtIHRhYmxlW21vbnRoMF07XG4gIHJldHVybiB7IG1vbnRoOiBtb250aDAgKyAxLCBkYXkgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBncmVnb3JpYW5Ub1dlZWsoZ3JlZ09iaikge1xuICBjb25zdCB7IHllYXIsIG1vbnRoLCBkYXkgfSA9IGdyZWdPYmosXG4gICAgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpLFxuICAgIHdlZWtkYXkgPSBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSk7XG5cbiAgbGV0IHdlZWtOdW1iZXIgPSBNYXRoLmZsb29yKChvcmRpbmFsIC0gd2Vla2RheSArIDEwKSAvIDcpLFxuICAgIHdlZWtZZWFyO1xuXG4gIGlmICh3ZWVrTnVtYmVyIDwgMSkge1xuICAgIHdlZWtZZWFyID0geWVhciAtIDE7XG4gICAgd2Vla051bWJlciA9IHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcik7XG4gIH0gZWxzZSBpZiAod2Vla051bWJlciA+IHdlZWtzSW5XZWVrWWVhcih5ZWFyKSkge1xuICAgIHdlZWtZZWFyID0geWVhciArIDE7XG4gICAgd2Vla051bWJlciA9IDE7XG4gIH0gZWxzZSB7XG4gICAgd2Vla1llYXIgPSB5ZWFyO1xuICB9XG5cbiAgcmV0dXJuIHsgd2Vla1llYXIsIHdlZWtOdW1iZXIsIHdlZWtkYXksIC4uLnRpbWVPYmplY3QoZ3JlZ09iaikgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlZWtUb0dyZWdvcmlhbih3ZWVrRGF0YSkge1xuICBjb25zdCB7IHdlZWtZZWFyLCB3ZWVrTnVtYmVyLCB3ZWVrZGF5IH0gPSB3ZWVrRGF0YSxcbiAgICB3ZWVrZGF5T2ZKYW40ID0gZGF5T2ZXZWVrKHdlZWtZZWFyLCAxLCA0KSxcbiAgICB5ZWFySW5EYXlzID0gZGF5c0luWWVhcih3ZWVrWWVhcik7XG5cbiAgbGV0IG9yZGluYWwgPSB3ZWVrTnVtYmVyICogNyArIHdlZWtkYXkgLSB3ZWVrZGF5T2ZKYW40IC0gMyxcbiAgICB5ZWFyO1xuXG4gIGlmIChvcmRpbmFsIDwgMSkge1xuICAgIHllYXIgPSB3ZWVrWWVhciAtIDE7XG4gICAgb3JkaW5hbCArPSBkYXlzSW5ZZWFyKHllYXIpO1xuICB9IGVsc2UgaWYgKG9yZGluYWwgPiB5ZWFySW5EYXlzKSB7XG4gICAgeWVhciA9IHdlZWtZZWFyICsgMTtcbiAgICBvcmRpbmFsIC09IGRheXNJblllYXIod2Vla1llYXIpO1xuICB9IGVsc2Uge1xuICAgIHllYXIgPSB3ZWVrWWVhcjtcbiAgfVxuXG4gIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdCh3ZWVrRGF0YSkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyZWdvcmlhblRvT3JkaW5hbChncmVnRGF0YSkge1xuICBjb25zdCB7IHllYXIsIG1vbnRoLCBkYXkgfSA9IGdyZWdEYXRhO1xuICBjb25zdCBvcmRpbmFsID0gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSk7XG4gIHJldHVybiB7IHllYXIsIG9yZGluYWwsIC4uLnRpbWVPYmplY3QoZ3JlZ0RhdGEpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmRpbmFsVG9HcmVnb3JpYW4ob3JkaW5hbERhdGEpIHtcbiAgY29uc3QgeyB5ZWFyLCBvcmRpbmFsIH0gPSBvcmRpbmFsRGF0YTtcbiAgY29uc3QgeyBtb250aCwgZGF5IH0gPSB1bmNvbXB1dGVPcmRpbmFsKHllYXIsIG9yZGluYWwpO1xuICByZXR1cm4geyB5ZWFyLCBtb250aCwgZGF5LCAuLi50aW1lT2JqZWN0KG9yZGluYWxEYXRhKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW52YWxpZFdlZWtEYXRhKG9iaikge1xuICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLndlZWtZZWFyKSxcbiAgICB2YWxpZFdlZWsgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla051bWJlciwgMSwgd2Vla3NJbldlZWtZZWFyKG9iai53ZWVrWWVhcikpLFxuICAgIHZhbGlkV2Vla2RheSA9IGludGVnZXJCZXR3ZWVuKG9iai53ZWVrZGF5LCAxLCA3KTtcblxuICBpZiAoIXZhbGlkWWVhcikge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtZZWFyXCIsIG9iai53ZWVrWWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkV2Vlaykge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtcIiwgb2JqLndlZWspO1xuICB9IGVsc2UgaWYgKCF2YWxpZFdlZWtkYXkpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ3ZWVrZGF5XCIsIG9iai53ZWVrZGF5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRPcmRpbmFsRGF0YShvYmopIHtcbiAgY29uc3QgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai55ZWFyKSxcbiAgICB2YWxpZE9yZGluYWwgPSBpbnRlZ2VyQmV0d2VlbihvYmoub3JkaW5hbCwgMSwgZGF5c0luWWVhcihvYmoueWVhcikpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkT3JkaW5hbCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm9yZGluYWxcIiwgb2JqLm9yZGluYWwpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgdmFsaWRNb250aCA9IGludGVnZXJCZXR3ZWVuKG9iai5tb250aCwgMSwgMTIpLFxuICAgIHZhbGlkRGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLmRheSwgMSwgZGF5c0luTW9udGgob2JqLnllYXIsIG9iai5tb250aCkpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkTW9udGgpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJtb250aFwiLCBvYmoubW9udGgpO1xuICB9IGVsc2UgaWYgKCF2YWxpZERheSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcImRheVwiLCBvYmouZGF5KTtcbiAgfSBlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludmFsaWRUaW1lRGF0YShvYmopIHtcbiAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSA9IG9iajtcbiAgY29uc3QgdmFsaWRIb3VyID1cbiAgICAgIGludGVnZXJCZXR3ZWVuKGhvdXIsIDAsIDIzKSB8fFxuICAgICAgKGhvdXIgPT09IDI0ICYmIG1pbnV0ZSA9PT0gMCAmJiBzZWNvbmQgPT09IDAgJiYgbWlsbGlzZWNvbmQgPT09IDApLFxuICAgIHZhbGlkTWludXRlID0gaW50ZWdlckJldHdlZW4obWludXRlLCAwLCA1OSksXG4gICAgdmFsaWRTZWNvbmQgPSBpbnRlZ2VyQmV0d2VlbihzZWNvbmQsIDAsIDU5KSxcbiAgICB2YWxpZE1pbGxpc2Vjb25kID0gaW50ZWdlckJldHdlZW4obWlsbGlzZWNvbmQsIDAsIDk5OSk7XG5cbiAgaWYgKCF2YWxpZEhvdXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJob3VyXCIsIGhvdXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbnV0ZSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInNlY29uZFwiLCBzZWNvbmQpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbGxpc2Vjb25kKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibWlsbGlzZWNvbmRcIiwgbWlsbGlzZWNvbmQpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuIiwgImltcG9ydCBEdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IEludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MuanNcIjtcbmltcG9ydCBJbmZvIGZyb20gXCIuL2luZm8uanNcIjtcbmltcG9ydCBGb3JtYXR0ZXIgZnJvbSBcIi4vaW1wbC9mb3JtYXR0ZXIuanNcIjtcbmltcG9ydCBGaXhlZE9mZnNldFpvbmUgZnJvbSBcIi4vem9uZXMvZml4ZWRPZmZzZXRab25lLmpzXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCIuL2ltcGwvbG9jYWxlLmpzXCI7XG5pbXBvcnQge1xuICBpc1VuZGVmaW5lZCxcbiAgbWF5YmVBcnJheSxcbiAgaXNEYXRlLFxuICBpc051bWJlcixcbiAgYmVzdEJ5LFxuICBkYXlzSW5Nb250aCxcbiAgZGF5c0luWWVhcixcbiAgaXNMZWFwWWVhcixcbiAgd2Vla3NJbldlZWtZZWFyLFxuICBub3JtYWxpemVPYmplY3QsXG4gIHJvdW5kVG8sXG4gIG9ialRvTG9jYWxUUyxcbiAgcGFkU3RhcnQsXG59IGZyb20gXCIuL2ltcGwvdXRpbC5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplWm9uZSB9IGZyb20gXCIuL2ltcGwvem9uZVV0aWwuanNcIjtcbmltcG9ydCBkaWZmIGZyb20gXCIuL2ltcGwvZGlmZi5qc1wiO1xuaW1wb3J0IHsgcGFyc2VSRkMyODIyRGF0ZSwgcGFyc2VJU09EYXRlLCBwYXJzZUhUVFBEYXRlLCBwYXJzZVNRTCB9IGZyb20gXCIuL2ltcGwvcmVnZXhQYXJzZXIuanNcIjtcbmltcG9ydCB7IHBhcnNlRnJvbVRva2VucywgZXhwbGFpbkZyb21Ub2tlbnMgfSBmcm9tIFwiLi9pbXBsL3Rva2VuUGFyc2VyLmpzXCI7XG5pbXBvcnQge1xuICBncmVnb3JpYW5Ub1dlZWssXG4gIHdlZWtUb0dyZWdvcmlhbixcbiAgZ3JlZ29yaWFuVG9PcmRpbmFsLFxuICBvcmRpbmFsVG9HcmVnb3JpYW4sXG4gIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhLFxuICBoYXNJbnZhbGlkV2Vla0RhdGEsXG4gIGhhc0ludmFsaWRPcmRpbmFsRGF0YSxcbiAgaGFzSW52YWxpZFRpbWVEYXRhLFxufSBmcm9tIFwiLi9pbXBsL2NvbnZlcnNpb25zLmpzXCI7XG5pbXBvcnQgKiBhcyBGb3JtYXRzIGZyb20gXCIuL2ltcGwvZm9ybWF0cy5qc1wiO1xuaW1wb3J0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yLFxuICBJbnZhbGlkVW5pdEVycm9yLFxuICBJbnZhbGlkRGF0ZVRpbWVFcnJvcixcbn0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgSW52YWxpZCBmcm9tIFwiLi9pbXBsL2ludmFsaWQuanNcIjtcblxuY29uc3QgSU5WQUxJRCA9IFwiSW52YWxpZCBEYXRlVGltZVwiO1xuY29uc3QgTUFYX0RBVEUgPSA4LjY0ZTE1O1xuXG5mdW5jdGlvbiB1bnN1cHBvcnRlZFpvbmUoem9uZSkge1xuICByZXR1cm4gbmV3IEludmFsaWQoXCJ1bnN1cHBvcnRlZCB6b25lXCIsIGB0aGUgem9uZSBcIiR7em9uZS5uYW1lfVwiIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbn1cblxuLy8gd2UgY2FjaGUgd2VlayBkYXRhIG9uIHRoZSBEVCBvYmplY3QgYW5kIHRoaXMgaW50ZXJtZWRpYXRlcyB0aGUgY2FjaGVcbmZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEoZHQpIHtcbiAgaWYgKGR0LndlZWtEYXRhID09PSBudWxsKSB7XG4gICAgZHQud2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoZHQuYyk7XG4gIH1cbiAgcmV0dXJuIGR0LndlZWtEYXRhO1xufVxuXG4vLyBjbG9uZSByZWFsbHkgbWVhbnMsIFwibWFrZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGVzZSBtb2RpZmljYXRpb25zXCIuIGFsbCBcInNldHRlcnNcIiByZWFsbHkgdXNlIHRoaXNcbi8vIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2hpbGUgb25seSBjaGFuZ2luZyBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiBjbG9uZShpbnN0LCBhbHRzKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSB7XG4gICAgdHM6IGluc3QudHMsXG4gICAgem9uZTogaW5zdC56b25lLFxuICAgIGM6IGluc3QuYyxcbiAgICBvOiBpbnN0Lm8sXG4gICAgbG9jOiBpbnN0LmxvYyxcbiAgICBpbnZhbGlkOiBpbnN0LmludmFsaWQsXG4gIH07XG4gIHJldHVybiBuZXcgRGF0ZVRpbWUoeyAuLi5jdXJyZW50LCAuLi5hbHRzLCBvbGQ6IGN1cnJlbnQgfSk7XG59XG5cbi8vIGZpbmQgdGhlIHJpZ2h0IG9mZnNldCBhIGdpdmVuIGxvY2FsIHRpbWUuIFRoZSBvIGlucHV0IGlzIG91ciBndWVzcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaFxuLy8gb2Zmc2V0IHdlJ2xsIHBpY2sgaW4gYW1iaWd1b3VzIGNhc2VzIChlLmcuIHRoZXJlIGFyZSB0d28gMyBBTXMgYi9jIEZhbGxiYWNrIERTVClcbmZ1bmN0aW9uIGZpeE9mZnNldChsb2NhbFRTLCBvLCB0eikge1xuICAvLyBPdXIgVVRDIHRpbWUgaXMganVzdCBhIGd1ZXNzIGJlY2F1c2Ugb3VyIG9mZnNldCBpcyBqdXN0IGEgZ3Vlc3NcbiAgbGV0IHV0Y0d1ZXNzID0gbG9jYWxUUyAtIG8gKiA2MCAqIDEwMDA7XG5cbiAgLy8gVGVzdCB3aGV0aGVyIHRoZSB6b25lIG1hdGNoZXMgdGhlIG9mZnNldCBmb3IgdGhpcyB0c1xuICBjb25zdCBvMiA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7XG5cbiAgLy8gSWYgc28sIG9mZnNldCBkaWRuJ3QgY2hhbmdlIGFuZCB3ZSdyZSBkb25lXG4gIGlmIChvID09PSBvMikge1xuICAgIHJldHVybiBbdXRjR3Vlc3MsIG9dO1xuICB9XG5cbiAgLy8gSWYgbm90LCBjaGFuZ2UgdGhlIHRzIGJ5IHRoZSBkaWZmZXJlbmNlIGluIHRoZSBvZmZzZXRcbiAgdXRjR3Vlc3MgLT0gKG8yIC0gbykgKiA2MCAqIDEwMDA7XG5cbiAgLy8gSWYgdGhhdCBnaXZlcyB1cyB0aGUgbG9jYWwgdGltZSB3ZSB3YW50LCB3ZSdyZSBkb25lXG4gIGNvbnN0IG8zID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTtcbiAgaWYgKG8yID09PSBvMykge1xuICAgIHJldHVybiBbdXRjR3Vlc3MsIG8yXTtcbiAgfVxuXG4gIC8vIElmIGl0J3MgZGlmZmVyZW50LCB3ZSdyZSBpbiBhIGhvbGUgdGltZS4gVGhlIG9mZnNldCBoYXMgY2hhbmdlZCwgYnV0IHRoZSB3ZSBkb24ndCBhZGp1c3QgdGhlIHRpbWVcbiAgcmV0dXJuIFtsb2NhbFRTIC0gTWF0aC5taW4obzIsIG8zKSAqIDYwICogMTAwMCwgTWF0aC5tYXgobzIsIG8zKV07XG59XG5cbi8vIGNvbnZlcnQgYW4gZXBvY2ggdGltZXN0YW1wIGludG8gYSBjYWxlbmRhciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0XG5mdW5jdGlvbiB0c1RvT2JqKHRzLCBvZmZzZXQpIHtcbiAgdHMgKz0gb2Zmc2V0ICogNjAgKiAxMDAwO1xuXG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSh0cyk7XG5cbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBkLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgbW9udGg6IGQuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgZGF5OiBkLmdldFVUQ0RhdGUoKSxcbiAgICBob3VyOiBkLmdldFVUQ0hvdXJzKCksXG4gICAgbWludXRlOiBkLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBzZWNvbmQ6IGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIG1pbGxpc2Vjb25kOiBkLmdldFVUQ01pbGxpc2Vjb25kcygpLFxuICB9O1xufVxuXG4vLyBjb252ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgZXBvY2ggdGltZXN0YW1wXG5mdW5jdGlvbiBvYmpUb1RTKG9iaiwgb2Zmc2V0LCB6b25lKSB7XG4gIHJldHVybiBmaXhPZmZzZXQob2JqVG9Mb2NhbFRTKG9iaiksIG9mZnNldCwgem9uZSk7XG59XG5cbi8vIGNyZWF0ZSBhIG5ldyBEVCBpbnN0YW5jZSBieSBhZGRpbmcgYSBkdXJhdGlvbiwgYWRqdXN0aW5nIGZvciBEU1RzXG5mdW5jdGlvbiBhZGp1c3RUaW1lKGluc3QsIGR1cikge1xuICBjb25zdCBvUHJlID0gaW5zdC5vLFxuICAgIHllYXIgPSBpbnN0LmMueWVhciArIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICBtb250aCA9IGluc3QuYy5tb250aCArIE1hdGgudHJ1bmMoZHVyLm1vbnRocykgKyBNYXRoLnRydW5jKGR1ci5xdWFydGVycykgKiAzLFxuICAgIGMgPSB7XG4gICAgICAuLi5pbnN0LmMsXG4gICAgICB5ZWFyLFxuICAgICAgbW9udGgsXG4gICAgICBkYXk6XG4gICAgICAgIE1hdGgubWluKGluc3QuYy5kYXksIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkgK1xuICAgICAgICBNYXRoLnRydW5jKGR1ci5kYXlzKSArXG4gICAgICAgIE1hdGgudHJ1bmMoZHVyLndlZWtzKSAqIDcsXG4gICAgfSxcbiAgICBtaWxsaXNUb0FkZCA9IER1cmF0aW9uLmZyb21PYmplY3Qoe1xuICAgICAgeWVhcnM6IGR1ci55ZWFycyAtIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICAgIHF1YXJ0ZXJzOiBkdXIucXVhcnRlcnMgLSBNYXRoLnRydW5jKGR1ci5xdWFydGVycyksXG4gICAgICBtb250aHM6IGR1ci5tb250aHMgLSBNYXRoLnRydW5jKGR1ci5tb250aHMpLFxuICAgICAgd2Vla3M6IGR1ci53ZWVrcyAtIE1hdGgudHJ1bmMoZHVyLndlZWtzKSxcbiAgICAgIGRheXM6IGR1ci5kYXlzIC0gTWF0aC50cnVuYyhkdXIuZGF5cyksXG4gICAgICBob3VyczogZHVyLmhvdXJzLFxuICAgICAgbWludXRlczogZHVyLm1pbnV0ZXMsXG4gICAgICBzZWNvbmRzOiBkdXIuc2Vjb25kcyxcbiAgICAgIG1pbGxpc2Vjb25kczogZHVyLm1pbGxpc2Vjb25kcyxcbiAgICB9KS5hcyhcIm1pbGxpc2Vjb25kc1wiKSxcbiAgICBsb2NhbFRTID0gb2JqVG9Mb2NhbFRTKGMpO1xuXG4gIGxldCBbdHMsIG9dID0gZml4T2Zmc2V0KGxvY2FsVFMsIG9QcmUsIGluc3Quem9uZSk7XG5cbiAgaWYgKG1pbGxpc1RvQWRkICE9PSAwKSB7XG4gICAgdHMgKz0gbWlsbGlzVG9BZGQ7XG4gICAgLy8gdGhhdCBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCBieSBnb2luZyBvdmVyIGEgRFNULCBidXQgd2Ugd2FudCB0byBrZWVwIHRoZSB0cyB0aGUgc2FtZVxuICAgIG8gPSBpbnN0LnpvbmUub2Zmc2V0KHRzKTtcbiAgfVxuXG4gIHJldHVybiB7IHRzLCBvIH07XG59XG5cbi8vIGhlbHBlciB1c2VmdWwgaW4gdHVybmluZyB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIGludG8gcmVhbCBkYXRlc1xuLy8gYnkgaGFuZGxpbmcgdGhlIHpvbmUgb3B0aW9uc1xuZnVuY3Rpb24gcGFyc2VEYXRhVG9EYXRlVGltZShwYXJzZWQsIHBhcnNlZFpvbmUsIG9wdHMsIGZvcm1hdCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpIHtcbiAgY29uc3QgeyBzZXRab25lLCB6b25lIH0gPSBvcHRzO1xuICBpZiAocGFyc2VkICYmIE9iamVjdC5rZXlzKHBhcnNlZCkubGVuZ3RoICE9PSAwKSB7XG4gICAgY29uc3QgaW50ZXJwcmV0YXRpb25ab25lID0gcGFyc2VkWm9uZSB8fCB6b25lLFxuICAgICAgaW5zdCA9IERhdGVUaW1lLmZyb21PYmplY3QocGFyc2VkLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHpvbmU6IGludGVycHJldGF0aW9uWm9uZSxcbiAgICAgICAgc3BlY2lmaWNPZmZzZXQsXG4gICAgICB9KTtcbiAgICByZXR1cm4gc2V0Wm9uZSA/IGluc3QgOiBpbnN0LnNldFpvbmUoem9uZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoXG4gICAgICBuZXcgSW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgJHtmb3JtYXR9YClcbiAgICApO1xuICB9XG59XG5cbi8vIGlmIHlvdSB3YW50IHRvIG91dHB1dCBhIHRlY2huaWNhbCBmb3JtYXQgKGUuZy4gUkZDIDI4MjIpLCB0aGlzIGhlbHBlclxuLy8gaGVscHMgaGFuZGxlIHRoZSBkZXRhaWxzXG5mdW5jdGlvbiB0b1RlY2hGb3JtYXQoZHQsIGZvcm1hdCwgYWxsb3daID0gdHJ1ZSkge1xuICByZXR1cm4gZHQuaXNWYWxpZFxuICAgID8gRm9ybWF0dGVyLmNyZWF0ZShMb2NhbGUuY3JlYXRlKFwiZW4tVVNcIiksIHtcbiAgICAgICAgYWxsb3daLFxuICAgICAgICBmb3JjZVNpbXBsZTogdHJ1ZSxcbiAgICAgIH0pLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm9ybWF0KVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdG9JU09EYXRlKG8sIGV4dGVuZGVkKSB7XG4gIGNvbnN0IGxvbmdGb3JtYXQgPSBvLmMueWVhciA+IDk5OTkgfHwgby5jLnllYXIgPCAwO1xuICBsZXQgYyA9IFwiXCI7XG4gIGlmIChsb25nRm9ybWF0ICYmIG8uYy55ZWFyID49IDApIGMgKz0gXCIrXCI7XG4gIGMgKz0gcGFkU3RhcnQoby5jLnllYXIsIGxvbmdGb3JtYXQgPyA2IDogNCk7XG5cbiAgaWYgKGV4dGVuZGVkKSB7XG4gICAgYyArPSBcIi1cIjtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBcIi1cIjtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpO1xuICB9IGVsc2Uge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLm1vbnRoKTtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpO1xuICB9XG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiB0b0lTT1RpbWUoXG4gIG8sXG4gIGV4dGVuZGVkLFxuICBzdXBwcmVzc1NlY29uZHMsXG4gIHN1cHByZXNzTWlsbGlzZWNvbmRzLFxuICBpbmNsdWRlT2Zmc2V0LFxuICBleHRlbmRlZFpvbmVcbikge1xuICBsZXQgYyA9IHBhZFN0YXJ0KG8uYy5ob3VyKTtcbiAgaWYgKGV4dGVuZGVkKSB7XG4gICAgYyArPSBcIjpcIjtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpO1xuICAgIGlmIChvLmMuc2Vjb25kICE9PSAwIHx8ICFzdXBwcmVzc1NlY29uZHMpIHtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbnV0ZSk7XG4gIH1cblxuICBpZiAoby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgYyArPSBwYWRTdGFydChvLmMuc2Vjb25kKTtcblxuICAgIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzTWlsbGlzZWNvbmRzKSB7XG4gICAgICBjICs9IFwiLlwiO1xuICAgICAgYyArPSBwYWRTdGFydChvLmMubWlsbGlzZWNvbmQsIDMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgaWYgKG8uaXNPZmZzZXRGaXhlZCAmJiBvLm9mZnNldCA9PT0gMCAmJiAhZXh0ZW5kZWRab25lKSB7XG4gICAgICBjICs9IFwiWlwiO1xuICAgIH0gZWxzZSBpZiAoby5vIDwgMCkge1xuICAgICAgYyArPSBcIi1cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoTWF0aC50cnVuYygtby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAlIDYwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGMgKz0gXCIrXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vICUgNjApKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXh0ZW5kZWRab25lKSB7XG4gICAgYyArPSBcIltcIiArIG8uem9uZS5pYW5hTmFtZSArIFwiXVwiO1xuICB9XG4gIHJldHVybiBjO1xufVxuXG4vLyBkZWZhdWx0cyBmb3IgdW5zcGVjaWZpZWQgdW5pdHMgaW4gdGhlIHN1cHBvcnRlZCBjYWxlbmRhcnNcbmNvbnN0IGRlZmF1bHRVbml0VmFsdWVzID0ge1xuICAgIG1vbnRoOiAxLFxuICAgIGRheTogMSxcbiAgICBob3VyOiAwLFxuICAgIG1pbnV0ZTogMCxcbiAgICBzZWNvbmQ6IDAsXG4gICAgbWlsbGlzZWNvbmQ6IDAsXG4gIH0sXG4gIGRlZmF1bHRXZWVrVW5pdFZhbHVlcyA9IHtcbiAgICB3ZWVrTnVtYmVyOiAxLFxuICAgIHdlZWtkYXk6IDEsXG4gICAgaG91cjogMCxcbiAgICBtaW51dGU6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxuICB9LFxuICBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXMgPSB7XG4gICAgb3JkaW5hbDogMSxcbiAgICBob3VyOiAwLFxuICAgIG1pbnV0ZTogMCxcbiAgICBzZWNvbmQ6IDAsXG4gICAgbWlsbGlzZWNvbmQ6IDAsXG4gIH07XG5cbi8vIFVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzLCBzb3J0ZWQgYnkgYmlnbmVzc1xuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1wieWVhclwiLCBcIm1vbnRoXCIsIFwiZGF5XCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdLFxuICBvcmRlcmVkV2Vla1VuaXRzID0gW1xuICAgIFwid2Vla1llYXJcIixcbiAgICBcIndlZWtOdW1iZXJcIixcbiAgICBcIndlZWtkYXlcIixcbiAgICBcImhvdXJcIixcbiAgICBcIm1pbnV0ZVwiLFxuICAgIFwic2Vjb25kXCIsXG4gICAgXCJtaWxsaXNlY29uZFwiLFxuICBdLFxuICBvcmRlcmVkT3JkaW5hbFVuaXRzID0gW1wieWVhclwiLCBcIm9yZGluYWxcIiwgXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl07XG5cbi8vIHN0YW5kYXJkaXplIGNhc2UgYW5kIHBsdXJhbGl0eSBpbiB1bml0c1xuZnVuY3Rpb24gbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIG1vbnRoOiBcIm1vbnRoXCIsXG4gICAgbW9udGhzOiBcIm1vbnRoXCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVzOiBcIm1pbnV0ZVwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kczogXCJzZWNvbmRcIixcbiAgICBtaWxsaXNlY29uZDogXCJtaWxsaXNlY29uZFwiLFxuICAgIG1pbGxpc2Vjb25kczogXCJtaWxsaXNlY29uZFwiLFxuICAgIHdlZWtkYXk6IFwid2Vla2RheVwiLFxuICAgIHdlZWtkYXlzOiBcIndlZWtkYXlcIixcbiAgICB3ZWVrbnVtYmVyOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVrc251bWJlcjogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla251bWJlcnM6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWt5ZWFyOiBcIndlZWtZZWFyXCIsXG4gICAgd2Vla3llYXJzOiBcIndlZWtZZWFyXCIsXG4gICAgb3JkaW5hbDogXCJvcmRpbmFsXCIsXG4gIH1bdW5pdC50b0xvd2VyQ2FzZSgpXTtcblxuICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpO1xuXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vLyB0aGlzIGlzIGEgZHVtYmVkIGRvd24gdmVyc2lvbiBvZiBmcm9tT2JqZWN0KCkgdGhhdCBydW5zIGFib3V0IDYwJSBmYXN0ZXJcbi8vIGJ1dCBkb2Vzbid0IGRvIGFueSB2YWxpZGF0aW9uLCBtYWtlcyBhIGJ1bmNoIG9mIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgdW5pdHNcbi8vIGFyZSBwcmVzZW50LCBhbmQgc28gb24uXG5mdW5jdGlvbiBxdWlja0RUKG9iaiwgb3B0cykge1xuICBjb25zdCB6b25lID0gbm9ybWFsaXplWm9uZShvcHRzLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSxcbiAgICBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKSxcbiAgICB0c05vdyA9IFNldHRpbmdzLm5vdygpO1xuXG4gIGxldCB0cywgbztcblxuICAvLyBhc3N1bWUgd2UgaGF2ZSB0aGUgaGlnaGVyLW9yZGVyIHVuaXRzXG4gIGlmICghaXNVbmRlZmluZWQob2JqLnllYXIpKSB7XG4gICAgZm9yIChjb25zdCB1IG9mIG9yZGVyZWRVbml0cykge1xuICAgICAgaWYgKGlzVW5kZWZpbmVkKG9ialt1XSkpIHtcbiAgICAgICAgb2JqW3VdID0gZGVmYXVsdFVuaXRWYWx1ZXNbdV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZCA9IGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG9iaikgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG9iaik7XG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG9mZnNldFByb3ZpcyA9IHpvbmUub2Zmc2V0KHRzTm93KTtcbiAgICBbdHMsIG9dID0gb2JqVG9UUyhvYmosIG9mZnNldFByb3Zpcywgem9uZSk7XG4gIH0gZWxzZSB7XG4gICAgdHMgPSB0c05vdztcbiAgfVxuXG4gIHJldHVybiBuZXcgRGF0ZVRpbWUoeyB0cywgem9uZSwgbG9jLCBvIH0pO1xufVxuXG5mdW5jdGlvbiBkaWZmUmVsYXRpdmUoc3RhcnQsIGVuZCwgb3B0cykge1xuICBjb25zdCByb3VuZCA9IGlzVW5kZWZpbmVkKG9wdHMucm91bmQpID8gdHJ1ZSA6IG9wdHMucm91bmQsXG4gICAgZm9ybWF0ID0gKGMsIHVuaXQpID0+IHtcbiAgICAgIGMgPSByb3VuZFRvKGMsIHJvdW5kIHx8IG9wdHMuY2FsZW5kYXJ5ID8gMCA6IDIsIHRydWUpO1xuICAgICAgY29uc3QgZm9ybWF0dGVyID0gZW5kLmxvYy5jbG9uZShvcHRzKS5yZWxGb3JtYXR0ZXIob3B0cyk7XG4gICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdChjLCB1bml0KTtcbiAgICB9LFxuICAgIGRpZmZlciA9ICh1bml0KSA9PiB7XG4gICAgICBpZiAob3B0cy5jYWxlbmRhcnkpIHtcbiAgICAgICAgaWYgKCFlbmQuaGFzU2FtZShzdGFydCwgdW5pdCkpIHtcbiAgICAgICAgICByZXR1cm4gZW5kLnN0YXJ0T2YodW5pdCkuZGlmZihzdGFydC5zdGFydE9mKHVuaXQpLCB1bml0KS5nZXQodW5pdCk7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgaWYgKG9wdHMudW5pdCkge1xuICAgIHJldHVybiBmb3JtYXQoZGlmZmVyKG9wdHMudW5pdCksIG9wdHMudW5pdCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHVuaXQgb2Ygb3B0cy51bml0cykge1xuICAgIGNvbnN0IGNvdW50ID0gZGlmZmVyKHVuaXQpO1xuICAgIGlmIChNYXRoLmFicyhjb3VudCkgPj0gMSkge1xuICAgICAgcmV0dXJuIGZvcm1hdChjb3VudCwgdW5pdCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3RhcnQgPiBlbmQgPyAtMCA6IDAsIG9wdHMudW5pdHNbb3B0cy51bml0cy5sZW5ndGggLSAxXSk7XG59XG5cbmZ1bmN0aW9uIGxhc3RPcHRzKGFyZ0xpc3QpIHtcbiAgbGV0IG9wdHMgPSB7fSxcbiAgICBhcmdzO1xuICBpZiAoYXJnTGlzdC5sZW5ndGggPiAwICYmIHR5cGVvZiBhcmdMaXN0W2FyZ0xpc3QubGVuZ3RoIC0gMV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICBvcHRzID0gYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdO1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpLnNsaWNlKDAsIGFyZ0xpc3QubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgYXJncyA9IEFycmF5LmZyb20oYXJnTGlzdCk7XG4gIH1cbiAgcmV0dXJuIFtvcHRzLCBhcmdzXTtcbn1cblxuLyoqXG4gKiBBIERhdGVUaW1lIGlzIGFuIGltbXV0YWJsZSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyBkYXRlIGFuZCB0aW1lIGFuZCBhY2NvbXBhbnlpbmcgbWV0aG9kcy4gSXQgY29udGFpbnMgY2xhc3MgYW5kIGluc3RhbmNlIG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uXG4gKlxuICogQSBEYXRlVGltZSBjb21wcmlzZXMgb2Y6XG4gKiAqIEEgdGltZXN0YW1wLiBFYWNoIERhdGVUaW1lIGluc3RhbmNlIHJlZmVycyB0byBhIHNwZWNpZmljIG1pbGxpc2Vjb25kIG9mIHRoZSBVbml4IGVwb2NoLlxuICogKiBBIHRpbWUgem9uZS4gRWFjaCBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIGluIHRoZSBjb250ZXh0IG9mIGEgc3BlY2lmaWMgem9uZSAoYnkgZGVmYXVsdCB0aGUgbG9jYWwgc3lzdGVtJ3Mgem9uZSkuXG4gKiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyB0aGF0IGVmZmVjdCBob3cgb3V0cHV0IHN0cmluZ3MgYXJlIGZvcm1hdHRlZCwgc3VjaCBhcyBgbG9jYWxlYCwgYG51bWJlcmluZ1N5c3RlbWAsIGFuZCBgb3V0cHV0Q2FsZW5kYXJgLlxuICpcbiAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIGZ1bmN0aW9uYWxpdHkgaXQgcHJvdmlkZXM6XG4gKlxuICogKiAqKkNyZWF0aW9uKio6IFRvIGNyZWF0ZSBhIERhdGVUaW1lIGZyb20gaXRzIGNvbXBvbmVudHMsIHVzZSBvbmUgb2YgaXRzIGZhY3RvcnkgY2xhc3MgbWV0aG9kczoge0BsaW5rIERhdGVUaW1lI2xvY2FsfSwge0BsaW5rIERhdGVUaW1lI3V0Y30sIGFuZCAobW9zdCBmbGV4aWJseSkge0BsaW5rIERhdGVUaW1lI2Zyb21PYmplY3R9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21JU099LCB7QGxpbmsgRGF0ZVRpbWUjZnJvbUhUVFB9LCBhbmQge0BsaW5rIERhdGVUaW1lI2Zyb21SRkMyODIyfS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgY3VzdG9tIHN0cmluZyBmb3JtYXQsIHVzZSB7QGxpbmsgRGF0ZVRpbWUjZnJvbUZvcm1hdH0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIG5hdGl2ZSBKUyBkYXRlLCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21KU0RhdGV9LlxuICogKiAqKkdyZWdvcmlhbiBjYWxlbmRhciBhbmQgdGltZSoqOiBUbyBleGFtaW5lIHRoZSBHcmVnb3JpYW4gcHJvcGVydGllcyBvZiBhIERhdGVUaW1lIGluZGl2aWR1YWxseSAoaS5lIGFzIG9wcG9zZWQgdG8gY29sbGVjdGl2ZWx5IHRocm91Z2gge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSksIHVzZSB0aGUge0BsaW5rIERhdGVUaW1lI3llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjbW9udGh9LFxuICoge0BsaW5rIERhdGVUaW1lI2RheX0sIHtAbGluayBEYXRlVGltZSNob3VyfSwge0BsaW5rIERhdGVUaW1lI21pbnV0ZX0sIHtAbGluayBEYXRlVGltZSNzZWNvbmR9LCB7QGxpbmsgRGF0ZVRpbWUjbWlsbGlzZWNvbmR9IGFjY2Vzc29ycy5cbiAqICogKipXZWVrIGNhbGVuZGFyKio6IEZvciBJU08gd2VlayBjYWxlbmRhciBhdHRyaWJ1dGVzLCBzZWUgdGhlIHtAbGluayBEYXRlVGltZSN3ZWVrWWVhcn0sIHtAbGluayBEYXRlVGltZSN3ZWVrTnVtYmVyfSwgYW5kIHtAbGluayBEYXRlVGltZSN3ZWVrZGF5fSBhY2Nlc3NvcnMuXG4gKiAqICoqQ29uZmlndXJhdGlvbioqIFNlZSB0aGUge0BsaW5rIERhdGVUaW1lI2xvY2FsZX0gYW5kIHtAbGluayBEYXRlVGltZSNudW1iZXJpbmdTeXN0ZW19IGFjY2Vzc29ycy5cbiAqICogKipUcmFuc2Zvcm1hdGlvbioqOiBUbyB0cmFuc2Zvcm0gdGhlIERhdGVUaW1lIGludG8gb3RoZXIgRGF0ZVRpbWVzLCB1c2Uge0BsaW5rIERhdGVUaW1lI3NldH0sIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0sIHtAbGluayBEYXRlVGltZSNzZXRab25lfSwge0BsaW5rIERhdGVUaW1lI3NldExvY2FsZX0sIHtAbGluayBEYXRlVGltZS5wbHVzfSwge0BsaW5rIERhdGVUaW1lI21pbnVzfSwge0BsaW5rIERhdGVUaW1lI2VuZE9mfSwge0BsaW5rIERhdGVUaW1lI3N0YXJ0T2Z9LCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9LCBhbmQge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9LlxuICogKiAqKk91dHB1dCoqOiBUbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHVzZSB0aGUge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmV9LCB7QGxpbmsgRGF0ZVRpbWUjdG9SZWxhdGl2ZUNhbGVuZGFyfSwge0BsaW5rIERhdGVUaW1lI3RvSlNPTn0sIHtAbGluayBEYXRlVGltZSN0b0lTT30sIHtAbGluayBEYXRlVGltZSN0b0hUVFB9LCB7QGxpbmsgRGF0ZVRpbWUjdG9PYmplY3R9LCB7QGxpbmsgRGF0ZVRpbWUjdG9SRkMyODIyfSwge0BsaW5rIERhdGVUaW1lI3RvU3RyaW5nfSwge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSwge0BsaW5rIERhdGVUaW1lI3RvRm9ybWF0fSwge0BsaW5rIERhdGVUaW1lI3RvTWlsbGlzfSBhbmQge0BsaW5rIERhdGVUaW1lI3RvSlNEYXRlfS5cbiAqXG4gKiBUaGVyZSdzIHBsZW50eSBvdGhlcnMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24sIHRpbWUgem9uZXMsIGFsdGVybmF0aXZlIGNhbGVuZGFycywgdmFsaWRpdHksIGFuZCBzbyBvbiwgc2VlIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlVGltZSB7XG4gIC8qKlxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIGNvbnN0IHpvbmUgPSBjb25maWcuem9uZSB8fCBTZXR0aW5ncy5kZWZhdWx0Wm9uZTtcblxuICAgIGxldCBpbnZhbGlkID1cbiAgICAgIGNvbmZpZy5pbnZhbGlkIHx8XG4gICAgICAoTnVtYmVyLmlzTmFOKGNvbmZpZy50cykgPyBuZXcgSW52YWxpZChcImludmFsaWQgaW5wdXRcIikgOiBudWxsKSB8fFxuICAgICAgKCF6b25lLmlzVmFsaWQgPyB1bnN1cHBvcnRlZFpvbmUoem9uZSkgOiBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRzID0gaXNVbmRlZmluZWQoY29uZmlnLnRzKSA/IFNldHRpbmdzLm5vdygpIDogY29uZmlnLnRzO1xuXG4gICAgbGV0IGMgPSBudWxsLFxuICAgICAgbyA9IG51bGw7XG4gICAgaWYgKCFpbnZhbGlkKSB7XG4gICAgICBjb25zdCB1bmNoYW5nZWQgPSBjb25maWcub2xkICYmIGNvbmZpZy5vbGQudHMgPT09IHRoaXMudHMgJiYgY29uZmlnLm9sZC56b25lLmVxdWFscyh6b25lKTtcblxuICAgICAgaWYgKHVuY2hhbmdlZCkge1xuICAgICAgICBbYywgb10gPSBbY29uZmlnLm9sZC5jLCBjb25maWcub2xkLm9dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3QgPSB6b25lLm9mZnNldCh0aGlzLnRzKTtcbiAgICAgICAgYyA9IHRzVG9PYmoodGhpcy50cywgb3QpO1xuICAgICAgICBpbnZhbGlkID0gTnVtYmVyLmlzTmFOKGMueWVhcikgPyBuZXcgSW52YWxpZChcImludmFsaWQgaW5wdXRcIikgOiBudWxsO1xuICAgICAgICBjID0gaW52YWxpZCA/IG51bGwgOiBjO1xuICAgICAgICBvID0gaW52YWxpZCA/IG51bGwgOiBvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl96b25lID0gem9uZTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW52YWxpZCA9IGludmFsaWQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy53ZWVrRGF0YSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jID0gYztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLm8gPSBvO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNMdXhvbkRhdGVUaW1lID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIENPTlNUUlVDVFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmb3IgdGhlIGN1cnJlbnQgaW5zdGFudCwgaW4gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS5cbiAgICpcbiAgICogVXNlIFNldHRpbmdzIHRvIG92ZXJyaWRlIHRoZXNlIGRlZmF1bHQgdmFsdWVzIGlmIG5lZWRlZC5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9JU08oKSAvL34+IG5vdyBpbiB0aGUgSVNPIGZvcm1hdFxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBub3coKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7fSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbG9jYWwgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5ZWFyXSAtIFRoZSBjYWxlbmRhciB5ZWFyLiBJZiBvbWl0dGVkIChhcyBpbiwgY2FsbCBgbG9jYWwoKWAgd2l0aCBubyBhcmd1bWVudHMpLCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21vbnRoPTFdIC0gVGhlIG1vbnRoLCAxLWluZGV4ZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkYXk9MV0gLSBUaGUgZGF5IG9mIHRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKHsgem9uZTogXCJBbWVyaWNhL05ld19Zb3JrXCIgfSkgICAgICAvL34+IG5vdywgaW4gVVMgZWFzdCBjb2FzdCB0aW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAxLTAxVDAwOjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCB7IGxvY2FsZTogXCJmclwiIH0pICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDAsIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1KSAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1LCB7IHpvbmU6IFwidXRjXCIgfSkgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDAsIGluIFVUQ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUsIDEwLCA3NjUpICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgbG9jYWwoKSB7XG4gICAgY29uc3QgW29wdHMsIGFyZ3NdID0gbGFzdE9wdHMoYXJndW1lbnRzKSxcbiAgICAgIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdID0gYXJncztcbiAgICByZXR1cm4gcXVpY2tEVCh7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCB9LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBpbiBVVENcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5ZWFyXSAtIFRoZSBjYWxlbmRhciB5ZWFyLiBJZiBvbWl0dGVkIChhcyBpbiwgY2FsbCBgdXRjKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtob3VyPTBdIC0gVGhlIGhvdXIgb2YgdGhlIGRheSwgaW4gMjQtaG91ciB0aW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWludXRlPTBdIC0gVGhlIG1pbnV0ZSBvZiB0aGUgaG91ciwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kPTBdIC0gVGhlIHNlY29uZCBvZiB0aGUgbWludXRlLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaWxsaXNlY29uZD0wXSAtIFRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOTk5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCB7IGxvY2FsZTogXCJmclwiIH0pICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFogd2l0aCBhIEZyZW5jaCBsb2NhbGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTApICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1LCB7IGxvY2FsZTogXCJmclwiIH0pIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIHV0YygpIHtcbiAgICBjb25zdCBbb3B0cywgYXJnc10gPSBsYXN0T3B0cyhhcmd1bWVudHMpLFxuICAgICAgW3llYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF0gPSBhcmdzO1xuXG4gICAgb3B0cy56b25lID0gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIHJldHVybiBxdWlja0RUKHsgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0LiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAtIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSlNEYXRlKGRhdGUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRzID0gaXNEYXRlKGRhdGUpID8gZGF0ZS52YWx1ZU9mKCkgOiBOYU47XG4gICAgaWYgKE51bWJlci5pc05hTih0cykpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFwiaW52YWxpZCBpbnB1dFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB6b25lVG9Vc2UgPSBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lVG9Vc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGVUaW1lKHtcbiAgICAgIHRzOiB0cyxcbiAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbGxpc2Vjb25kcyAtIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwIFVUQ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFpc051bWJlcihtaWxsaXNlY29uZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBmcm9tTWlsbGlzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0LCBidXQgcmVjZWl2ZWQgYSAke3R5cGVvZiBtaWxsaXNlY29uZHN9IHdpdGggdmFsdWUgJHttaWxsaXNlY29uZHN9YFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1pbGxpc2Vjb25kcyA8IC1NQVhfREFURSB8fCBtaWxsaXNlY29uZHMgPiBNQVhfREFURSkge1xuICAgICAgLy8gdGhpcyBpc24ndCBwZXJmZWN0IGJlY2F1c2UgYmVjYXVzZSB3ZSBjYW4gc3RpbGwgZW5kIHVwIG91dCBvZiByYW5nZSBiZWNhdXNlIG9mIGFkZGl0aW9uYWwgc2hpZnRpbmcsIGJ1dCBpdCdzIGEgc3RhcnRcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFwiVGltZXN0YW1wIG91dCBvZiByYW5nZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICAgIHRzOiBtaWxsaXNlY29uZHMsXG4gICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAobWVhbmluZyBzaW5jZSAxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRzIC0gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSAxOTcwIFVUQ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tU2Vjb25kcyhzZWNvbmRzLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIWlzTnVtYmVyKHNlY29uZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJmcm9tU2Vjb25kcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICAgIHRzOiBzZWNvbmRzICogMTAwMCxcbiAgICAgICAgem9uZTogbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSxcbiAgICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRpb25zKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXInIGFuZCAnaG91cicgd2l0aCByZWFzb25hYmxlIGRlZmF1bHRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb21cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFyIC0gYSB5ZWFyLCBzdWNoIGFzIDE5ODdcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aCAtIGEgbW9udGgsIDEtMTJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXkgLSBhIGRheSBvZiB0aGUgbW9udGgsIDEtMzEsIGRlcGVuZGluZyBvbiB0aGUgbW9udGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5vcmRpbmFsIC0gZGF5IG9mIHRoZSB5ZWFyLCAxLTM2NSBvciAzNjZcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrWWVhciAtIGFuIElTTyB3ZWVrIHllYXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrTnVtYmVyIC0gYW4gSVNPIHdlZWsgbnVtYmVyLCBiZXR3ZWVuIDEgYW5kIDUyIG9yIDUzLCBkZXBlbmRpbmcgb24gdGhlIHllYXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrZGF5IC0gYW4gSVNPIHdlZWtkYXksIDEtNywgd2hlcmUgMSBpcyBNb25kYXkgYW5kIDcgaXMgU3VuZGF5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouaG91ciAtIGhvdXIgb2YgdGhlIGRheSwgMC0yM1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZSAtIG1pbnV0ZSBvZiB0aGUgaG91ciwgMC01OVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnNlY29uZCAtIHNlY29uZCBvZiB0aGUgbWludXRlLCAwLTU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmQgLSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kLCAwLTk5OVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoaXMgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGludGVycHJldCB0aGUgbnVtYmVycyBpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgem9uZS4gQ2FuIHRha2UgYW55IHZhbHVlIHRha2VuIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBzZXRab25lKClcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXI6IDE5ODIsIG1vbnRoOiA1LCBkYXk6IDI1fSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wNS0yNSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXI6IDE5ODIgfSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wMS0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSkgLy9+PiB0b2RheSBhdCAxMDoyNjowNlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICd1dGMnIH0pLFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICdsb2NhbCcgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnQW1lcmljYS9OZXdfWW9yaycgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHdlZWtZZWFyOiAyMDE2LCB3ZWVrTnVtYmVyOiAyLCB3ZWVrZGF5OiAzIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzIwMTYtMDEtMTMnXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Qob2JqLCBvcHRzID0ge30pIHtcbiAgICBvYmogPSBvYmogfHwge307XG4gICAgY29uc3Qgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRzLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcbiAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHNOb3cgPSBTZXR0aW5ncy5ub3coKSxcbiAgICAgIG9mZnNldFByb3ZpcyA9ICFpc1VuZGVmaW5lZChvcHRzLnNwZWNpZmljT2Zmc2V0KVxuICAgICAgICA/IG9wdHMuc3BlY2lmaWNPZmZzZXRcbiAgICAgICAgOiB6b25lVG9Vc2Uub2Zmc2V0KHRzTm93KSxcbiAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVVbml0KSxcbiAgICAgIGNvbnRhaW5zT3JkaW5hbCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpLFxuICAgICAgY29udGFpbnNHcmVnb3JZZWFyID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQueWVhciksXG4gICAgICBjb250YWluc0dyZWdvck1EID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQubW9udGgpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSksXG4gICAgICBjb250YWluc0dyZWdvciA9IGNvbnRhaW5zR3JlZ29yWWVhciB8fCBjb250YWluc0dyZWdvck1ELFxuICAgICAgZGVmaW5pdGVXZWVrRGVmID0gbm9ybWFsaXplZC53ZWVrWWVhciB8fCBub3JtYWxpemVkLndlZWtOdW1iZXIsXG4gICAgICBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKTtcblxuICAgIC8vIGNhc2VzOlxuICAgIC8vIGp1c3QgYSB3ZWVrZGF5IC0+IHRoaXMgd2VlaydzIGluc3RhbmNlIG9mIHRoYXQgd2Vla2RheSwgbm8gd29ycmllc1xuICAgIC8vIChncmVnb3JpYW4gZGF0YSBvciBvcmRpbmFsKSArICh3ZWVrWWVhciBvciB3ZWVrTnVtYmVyKSAtPiBlcnJvclxuICAgIC8vIChncmVnb3JpYW4gbW9udGggb3IgZGF5KSArIG9yZGluYWwgLT4gZXJyb3JcbiAgICAvLyBvdGhlcndpc2UganVzdCB1c2Ugd2Vla3Mgb3Igb3JkaW5hbHMgb3IgZ3JlZ29yaWFuLCBkZXBlbmRpbmcgb24gd2hhdCdzIHNwZWNpZmllZFxuXG4gICAgaWYgKChjb250YWluc0dyZWdvciB8fCBjb250YWluc09yZGluYWwpICYmIGRlZmluaXRlV2Vla0RlZikge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbid0IG1peCB3ZWVrWWVhci93ZWVrTnVtYmVyIHVuaXRzIHdpdGggeWVhci9tb250aC9kYXkgb3Igb3JkaW5hbHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbnNHcmVnb3JNRCAmJiBjb250YWluc09yZGluYWwpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVdlZWtEYXRhID0gZGVmaW5pdGVXZWVrRGVmIHx8IChub3JtYWxpemVkLndlZWtkYXkgJiYgIWNvbnRhaW5zR3JlZ29yKTtcblxuICAgIC8vIGNvbmZpZ3VyZSBvdXJzZWx2ZXMgdG8gZGVhbCB3aXRoIGdyZWdvcmlhbiBkYXRlcyBvciB3ZWVrIHN0dWZmXG4gICAgbGV0IHVuaXRzLFxuICAgICAgZGVmYXVsdFZhbHVlcyxcbiAgICAgIG9iak5vdyA9IHRzVG9PYmoodHNOb3csIG9mZnNldFByb3Zpcyk7XG4gICAgaWYgKHVzZVdlZWtEYXRhKSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRXZWVrVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdFdlZWtVbml0VmFsdWVzO1xuICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9XZWVrKG9iak5vdyk7XG4gICAgfSBlbHNlIGlmIChjb250YWluc09yZGluYWwpIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZE9yZGluYWxVbml0cztcbiAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXM7XG4gICAgICBvYmpOb3cgPSBncmVnb3JpYW5Ub09yZGluYWwob2JqTm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkVW5pdHM7XG4gICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdFVuaXRWYWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBtaXNzaW5nIHN0dWZmXG4gICAgbGV0IGZvdW5kRmlyc3QgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHUgb2YgdW5pdHMpIHtcbiAgICAgIGNvbnN0IHYgPSBub3JtYWxpemVkW3VdO1xuICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2KSkge1xuICAgICAgICBmb3VuZEZpcnN0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZm91bmRGaXJzdCkge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gZGVmYXVsdFZhbHVlc1t1XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1hbGl6ZWRbdV0gPSBvYmpOb3dbdV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB2YWx1ZXMgd2UgaGF2ZSBhcmUgaW4gcmFuZ2VcbiAgICBjb25zdCBoaWdoZXJPcmRlckludmFsaWQgPSB1c2VXZWVrRGF0YVxuICAgICAgICA/IGhhc0ludmFsaWRXZWVrRGF0YShub3JtYWxpemVkKVxuICAgICAgICA6IGNvbnRhaW5zT3JkaW5hbFxuICAgICAgICA/IGhhc0ludmFsaWRPcmRpbmFsRGF0YShub3JtYWxpemVkKVxuICAgICAgICA6IGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG5vcm1hbGl6ZWQpLFxuICAgICAgaW52YWxpZCA9IGhpZ2hlck9yZGVySW52YWxpZCB8fCBoYXNJbnZhbGlkVGltZURhdGEobm9ybWFsaXplZCk7XG5cbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7XG4gICAgfVxuXG4gICAgLy8gY29tcHV0ZSB0aGUgYWN0dWFsIHRpbWVcbiAgICBjb25zdCBncmVnb3JpYW4gPSB1c2VXZWVrRGF0YVxuICAgICAgICA/IHdlZWtUb0dyZWdvcmlhbihub3JtYWxpemVkKVxuICAgICAgICA6IGNvbnRhaW5zT3JkaW5hbFxuICAgICAgICA/IG9yZGluYWxUb0dyZWdvcmlhbihub3JtYWxpemVkKVxuICAgICAgICA6IG5vcm1hbGl6ZWQsXG4gICAgICBbdHNGaW5hbCwgb2Zmc2V0RmluYWxdID0gb2JqVG9UUyhncmVnb3JpYW4sIG9mZnNldFByb3Zpcywgem9uZVRvVXNlKSxcbiAgICAgIGluc3QgPSBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogdHNGaW5hbCxcbiAgICAgICAgem9uZTogem9uZVRvVXNlLFxuICAgICAgICBvOiBvZmZzZXRGaW5hbCxcbiAgICAgICAgbG9jLFxuICAgICAgfSk7XG5cbiAgICAvLyBncmVnb3JpYW4gZGF0YSArIHdlZWtkYXkgc2VydmVzIG9ubHkgdG8gdmFsaWRhdGVcbiAgICBpZiAobm9ybWFsaXplZC53ZWVrZGF5ICYmIGNvbnRhaW5zR3JlZ29yICYmIG9iai53ZWVrZGF5ICE9PSBpbnN0LndlZWtkYXkpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKFxuICAgICAgICBcIm1pc21hdGNoZWQgd2Vla2RheVwiLFxuICAgICAgICBgeW91IGNhbid0IHNwZWNpZnkgYm90aCBhIHdlZWtkYXkgb2YgJHtub3JtYWxpemVkLndlZWtkYXl9IGFuZCBhIGRhdGUgb2YgJHtpbnN0LnRvSVNPKCl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIElTTyA4NjAxIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBJU08gc3RyaW5nXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW0ncyBsb2NhbGUnXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcl0gLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW1dIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzKzA2OjAwJywge3NldFpvbmU6IHRydWV9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMycsIHt6b25lOiAndXRjJ30pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtVzA1LTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IFt2YWxzLCBwYXJzZWRab25lXSA9IHBhcnNlSVNPRGF0ZSh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIklTTyA4NjAxXCIsIHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gUkZDIDI4MjIgc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIFJGQyAyODIyIHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmUuIFNpbmNlIHRoZSBvZmZzZXQgaXMgYWx3YXlzIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzOjEyIEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCdGcmksIDI1IE5vdiAyMDE2IDEzOjIzOjEyICswNjAwJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzIFonKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUkZDMjgyMih0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVJGQzI4MjJEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiUkZDIDI4MjJcIiwgdGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMy5odG1sI3NlYzMuMy4xXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIEhUVFAgaGVhZGVyIGRhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSBIVFRQIGRhdGVzIGFyZSBhbHdheXMgaW4gVVRDLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCB0aGUgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcuIEZvciBIVFRQIGRhdGVzLCB0aGlzIGlzIGFsd2F5cyBVVEMsIHNvIHRoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYHpvbmVgIG9wdGlvbiB0byAndXRjJywgYnV0IHRoaXMgb3B0aW9uIGlzIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHNpbWlsYXIgbWV0aG9kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1bmRheSwgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tSFRUUCh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUhUVFBEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiSFRUUFwiLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZy5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLiBGb3IgYSB0YWJsZSBvZiB0b2tlbnMgYW5kIHRoZWlyIGludGVycHJldGF0aW9ucywgc2VlIFtoZXJlXShodHRwczovL21vbWVudC5naXRodWIuaW8vbHV4b24vIy9wYXJzaW5nP2lkPXRhYmxlLW9mLXRva2VucykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgdGhlIGxpbmsgYmVsb3cgZm9yIHRoZSBmb3JtYXRzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKGlzVW5kZWZpbmVkKHRleHQpIHx8IGlzVW5kZWZpbmVkKGZtdCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcImZyb21Gb3JtYXQgcmVxdWlyZXMgYW4gaW5wdXQgc3RyaW5nIGFuZCBhIGZvcm1hdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwgfSA9IG9wdHMsXG4gICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgbnVtYmVyaW5nU3lzdGVtLFxuICAgICAgICBkZWZhdWx0VG9FTjogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgW3ZhbHMsIHBhcnNlZFpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkXSA9IHBhcnNlRnJvbVRva2Vucyhsb2NhbGVUb1VzZSwgdGV4dCwgZm10KTtcbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIGBmb3JtYXQgJHtmbXR9YCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUZvcm1hdCBpbnN0ZWFkXG4gICAqL1xuICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIFNRTCBkYXRlLCB0aW1lLCBvciBkYXRldGltZVxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gYSBsb2NhbGUgc3RyaW5nIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIERhdGVUaW1lIHRvIHRoaXMgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIHJlc3VsdGluZyBEYXRlVGltZSB0byB0aGlzIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDInKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyIEFtZXJpY2EvTG9zX0FuZ2VsZXMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJywgeyBzZXRab25lOiB0cnVlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJywgeyB6b25lOiAnQW1lcmljYS9Mb3NfQW5nZWxlcycgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMDk6MTI6MzQuMzQyJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzdGF0aWMgZnJvbVNRTCh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVNRTCh0ZXh0KTtcbiAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCBcIlNRTFwiLCB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEYXRlVGltZSBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRGF0ZVRpbWVFcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7IGludmFsaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlVGltZS4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllc1xuICAgKiBAcGFyYW0ge29iamVjdH0gb1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzRGF0ZVRpbWUobykge1xuICAgIHJldHVybiAobyAmJiBvLmlzTHV4b25EYXRlVGltZSkgfHwgZmFsc2U7XG4gIH1cblxuICAvLyBJTkZPXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA3LCA0KS5nZXQoJ21vbnRoJyk7IC8vPT4gN1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA3LCA0KS5nZXQoJ2RheScpOyAvLz0+IDRcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0KHVuaXQpIHtcbiAgICByZXR1cm4gdGhpc1t1bml0XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIERhdGVUaW1lIGlzIHZhbGlkLiBJbnZhbGlkIERhdGVUaW1lcyBvY2N1ciB3aGVuOlxuICAgKiAqIFRoZSBEYXRlVGltZSB3YXMgY3JlYXRlZCBmcm9tIGludmFsaWQgY2FsZW5kYXIgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIDEzdGggbW9udGggb3IgRmVicnVhcnkgMzBcbiAgICogKiBUaGUgRGF0ZVRpbWUgd2FzIGNyZWF0ZWQgYnkgYW4gb3BlcmF0aW9uIG9uIGFub3RoZXIgaW52YWxpZCBkYXRlXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGludmFsaWRSZWFzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRGF0ZVRpbWUgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIERhdGVUaW1lIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9jYWxlIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2VuLUdCJy4gVGhlIGxvY2FsZSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLmxvY2FsZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBudW1iZXJpbmdTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvdXRwdXQgY2FsZW5kYXIgb2YgYSBEYXRlVGltZSwgc3VjaCAnaXNsYW1pYycuIFRoZSBvdXRwdXQgY2FsZW5kYXIgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgb3V0cHV0Q2FsZW5kYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm91dHB1dENhbGVuZGFyIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRpbWUgem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBEYXRlVGltZS5cbiAgICogQHR5cGUge1pvbmV9XG4gICAqL1xuICBnZXQgem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fem9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHRpbWUgem9uZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCB6b25lTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy56b25lLm5hbWUgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgeWVhclxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkueWVhciAvLz0+IDIwMTdcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB5ZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMueWVhciA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHF1YXJ0ZXJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnF1YXJ0ZXIgLy89PiAyXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgcXVhcnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gTWF0aC5jZWlsKHRoaXMuYy5tb250aCAvIDMpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbW9udGggKDEtMTIpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkubW9udGggLy89PiA1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbW9udGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5tb250aCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRheSBvZiB0aGUgbW9udGggKDEtMzBpc2gpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkuZGF5IC8vPT4gMjVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5kYXkgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBob3VyIG9mIHRoZSBkYXkgKDAtMjMpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSkuaG91ciAvLz0+IDlcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBob3VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuaG91ciA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbnV0ZSBvZiB0aGUgaG91ciAoMC01OSkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCkubWludXRlIC8vPT4gMzBcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBtaW51dGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5taW51dGUgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSAoMC01OSkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCwgNTIpLnNlY29uZCAvLz0+IDUyXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgc2Vjb25kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuc2Vjb25kIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCAoMC05OTkpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzAsIDUyLCA2NTQpLm1pbGxpc2Vjb25kIC8vPT4gNjU0XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbWlsbGlzZWNvbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5taWxsaXNlY29uZCA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWsgeWVhclxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTIsIDMxKS53ZWVrWWVhciAvLz0+IDIwMTVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrWWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrWWVhciA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWsgbnVtYmVyIG9mIHRoZSB3ZWVrIHllYXIgKDEtNTJpc2gpLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLndlZWtOdW1iZXIgLy89PiAyMVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlZWtOdW1iZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla051bWJlciA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRheSBvZiB0aGUgd2Vlay5cbiAgICogMSBpcyBNb25kYXkgYW5kIDcgaXMgU3VuZGF5XG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAxMSwgMzEpLndlZWtkYXkgLy89PiA0XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgd2Vla2RheSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrZGF5IDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3JkaW5hbCAobWVhbmluZyB0aGUgZGF5IG9mIHRoZSB5ZWFyKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkub3JkaW5hbCAvLz0+IDE0NVxuICAgKiBAdHlwZSB7bnVtYmVyfERhdGVUaW1lfVxuICAgKi9cbiAgZ2V0IG9yZGluYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGdyZWdvcmlhblRvT3JkaW5hbCh0aGlzLmMpLm9yZGluYWwgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBzaG9ydCBtb250aCBuYW1lLCBzdWNoIGFzICdPY3QnLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aFNob3J0IC8vPT4gT2N0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbW9udGhTaG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoXCJzaG9ydFwiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy5tb250aCAtIDFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgbW9udGggbmFtZSwgc3VjaCBhcyAnT2N0b2JlcicuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLm1vbnRoTG9uZyAvLz0+IE9jdG9iZXJcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBtb250aExvbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ubW9udGhzKFwibG9uZ1wiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy5tb250aCAtIDFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IHdlZWtkYXksIHN1Y2ggYXMgJ01vbicuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLndlZWtkYXlTaG9ydCAvLz0+IE1vblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHdlZWtkYXlTaG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby53ZWVrZGF5cyhcInNob3J0XCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLndlZWtkYXkgLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIHdlZWtkYXksIHN1Y2ggYXMgJ01vbmRheScuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLndlZWtkYXlMb25nIC8vPT4gTW9uZGF5XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgd2Vla2RheUxvbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoXCJsb25nXCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLndlZWtkYXkgLSAxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBVVEMgb2Zmc2V0IG9mIHRoaXMgRGF0ZVRpbWUgaW4gbWludXRlc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5vZmZzZXQgLy89PiAtMjQwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLm9mZnNldCAvLz0+IDBcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBvZmZzZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/ICt0aGlzLm8gOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzaG9ydCBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSBcIkVTVFwiIG9yIFwiRURUXCIuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IG9mZnNldE5hbWVTaG9ydCgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywge1xuICAgICAgICBmb3JtYXQ6IFwic2hvcnRcIixcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nIGh1bWFuIG5hbWUgZm9yIHRoZSB6b25lJ3MgY3VycmVudCBvZmZzZXQsIGZvciBleGFtcGxlIFwiRWFzdGVybiBTdGFuZGFyZCBUaW1lXCIgb3IgXCJFYXN0ZXJuIERheWxpZ2h0IFRpbWVcIi5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgb2Zmc2V0TmFtZUxvbmcoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHtcbiAgICAgICAgZm9ybWF0OiBcImxvbmdcIixcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdoZXRoZXIgdGhpcyB6b25lJ3Mgb2Zmc2V0IGV2ZXIgY2hhbmdlcywgYXMgaW4gYSBEU1QuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IGlzT2Zmc2V0Rml4ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5pc1VuaXZlcnNhbCA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdoZXRoZXIgdGhlIERhdGVUaW1lIGlzIGluIGEgRFNULlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc0luRFNUKCkge1xuICAgIGlmICh0aGlzLmlzT2Zmc2V0Rml4ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5vZmZzZXQgPiB0aGlzLnNldCh7IG1vbnRoOiAxLCBkYXk6IDEgfSkub2Zmc2V0IHx8XG4gICAgICAgIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoeyBtb250aDogNSB9KS5vZmZzZXRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIERhdGVUaW1lIGlzIGluIGEgbGVhcCB5ZWFyLCBmYWxzZSBvdGhlcndpc2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNikuaXNJbkxlYXBZZWFyIC8vPT4gdHJ1ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS5pc0luTGVhcFllYXIgLy89PiBmYWxzZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc0luTGVhcFllYXIoKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIERhdGVUaW1lJ3MgbW9udGhcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMikuZGF5c0luTW9udGggLy89PiAyOVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2LCAzKS5kYXlzSW5Nb250aCAvLz0+IDMxXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5c0luTW9udGgoKSB7XG4gICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhciwgdGhpcy5tb250aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBEYXRlVGltZSdzIHllYXJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNikuZGF5c0luWWVhciAvLz0+IDM2NlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS5kYXlzSW5ZZWFyIC8vPT4gMzY1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZGF5c0luWWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gZGF5c0luWWVhcih0aGlzLnllYXIpIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiB0aGlzIERhdGVUaW1lJ3MgeWVhclxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAwNCkud2Vla3NJbldlZWtZZWFyIC8vPT4gNTNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykud2Vla3NJbldlZWtZZWFyIC8vPT4gNTJcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWVrc0luV2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHdlZWtzSW5XZWVrWWVhcih0aGlzLndlZWtZZWFyKSA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBJbnRsIG9wdGlvbnMgZm9yIHRoaXMgRGF0ZVRpbWUuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGluIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIG9mIGZvcm1hdHRpbmcgbWV0aG9kc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIHRoZSBzYW1lIG9wdGlvbnMgYXMgdG9Mb2NhbGVTdHJpbmdcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgcmVzb2x2ZWRMb2NhbGVPcHRpb25zKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBGb3JtYXR0ZXIuY3JlYXRlKFxuICAgICAgdGhpcy5sb2MuY2xvbmUob3B0cyksXG4gICAgICBvcHRzXG4gICAgKS5yZXNvbHZlZE9wdGlvbnModGhpcyk7XG4gICAgcmV0dXJuIHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyOiBjYWxlbmRhciB9O1xuICB9XG5cbiAgLy8gVFJBTlNGT1JNXG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBVVEMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0oJ3V0YycpXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdIC0gb3B0aW9uYWxseSwgYW4gb2Zmc2V0IGZyb20gVVRDIGluIG1pbnV0ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzPXt9XSAtIG9wdGlvbnMgdG8gcGFzcyB0byBgc2V0Wm9uZSgpYFxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHRvVVRDKG9mZnNldCA9IDAsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnNldFpvbmUoRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKG9mZnNldCksIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byB0aGUgaG9zdCdzIGxvY2FsIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byBgc2V0Wm9uZSgnbG9jYWwnKWBcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICB0b0xvY2FsKCkge1xuICAgIHJldHVybiB0aGlzLnNldFpvbmUoU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBzcGVjaWZpZWQgem9uZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgc2V0dGVyIGtlZXBzIHRoZSB1bmRlcmx5aW5nIHRpbWUgdGhlIHNhbWUgKGFzIGluLCB0aGUgc2FtZSB0aW1lc3RhbXApLCBidXQgdGhlIG5ldyBpbnN0YW5jZSB3aWxsIHJlcG9ydCBkaWZmZXJlbnQgbG9jYWwgdGltZXMgYW5kIGNvbnNpZGVyIERTVHMgd2hlbiBtYWtpbmcgY29tcHV0YXRpb25zLCBhcyB3aXRoIHtAbGluayBEYXRlVGltZSNwbHVzfS4gWW91IG1heSB3aXNoIHRvIHVzZSB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbH0gYW5kIHtAbGluayBEYXRlVGltZSN0b1VUQ30gd2hpY2ggcHJvdmlkZSBzaW1wbGUgY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIGNvbW1vbmx5IHVzZWQgem9uZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gYSB6b25lIGlkZW50aWZpZXIuIEFzIGEgc3RyaW5nLCB0aGF0IGNhbiBiZSBhbnkgSUFOQSB6b25lIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBlbnZpcm9ubWVudCwgb3IgYSBmaXhlZC1vZmZzZXQgbmFtZSBvZiB0aGUgZm9ybSAnVVRDKzMnLCBvciB0aGUgc3RyaW5ncyAnbG9jYWwnIG9yICd1dGMnLiBZb3UgbWF5IGFsc28gc3VwcGx5IGFuIGluc3RhbmNlIG9mIGEge0BsaW5rIERhdGVUaW1lI1pvbmV9IGNsYXNzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5rZWVwTG9jYWxUaW1lPWZhbHNlXSAtIElmIHRydWUsIGFkanVzdCB0aGUgdW5kZXJseWluZyB0aW1lIHNvIHRoYXQgdGhlIGxvY2FsIHRpbWUgc3RheXMgdGhlIHNhbWUsIGJ1dCBpbiB0aGUgdGFyZ2V0IHpvbmUuIFlvdSBzaG91bGQgcmFyZWx5IG5lZWQgdGhpcy5cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBzZXRab25lKHpvbmUsIHsga2VlcExvY2FsVGltZSA9IGZhbHNlLCBrZWVwQ2FsZW5kYXJUaW1lID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgem9uZSA9IG5vcm1hbGl6ZVpvbmUoem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICAgIGlmICh6b25lLmVxdWFscyh0aGlzLnpvbmUpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2UgaWYgKCF6b25lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBuZXdUUyA9IHRoaXMudHM7XG4gICAgICBpZiAoa2VlcExvY2FsVGltZSB8fCBrZWVwQ2FsZW5kYXJUaW1lKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldEd1ZXNzID0gem9uZS5vZmZzZXQodGhpcy50cyk7XG4gICAgICAgIGNvbnN0IGFzT2JqID0gdGhpcy50b09iamVjdCgpO1xuICAgICAgICBbbmV3VFNdID0gb2JqVG9UUyhhc09iaiwgb2Zmc2V0R3Vlc3MsIHpvbmUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdHM6IG5ld1RTLCB6b25lIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3Igb3V0cHV0Q2FsZW5kYXIuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSB0aGUgcHJvcGVydGllcyB0byBzZXRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgcmVjb25maWd1cmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSA9IHt9KSB7XG4gICAgY29uc3QgbG9jID0gdGhpcy5sb2MuY2xvbmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSk7XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgbG9jIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIGxvY2FsZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBKdXN0IGEgY29udmVuaWVudCBhbGlhcyBmb3IgcmVjb25maWd1cmUoeyBsb2NhbGUgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnNldExvY2FsZSgnZW4tR0InKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHNldExvY2FsZShsb2NhbGUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvbmZpZ3VyZSh7IGxvY2FsZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSB2YWx1ZXMgb2Ygc3BlY2lmaWVkIHVuaXRzLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIFlvdSBjYW4gb25seSBzZXQgdW5pdHMgd2l0aCB0aGlzIG1ldGhvZDsgZm9yIFwic2V0dGluZ1wiIG1ldGFkYXRhLCBzZWUge0BsaW5rIERhdGVUaW1lI3JlY29uZmlndXJlfSBhbmQge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9LlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnNcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAxNyB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyBob3VyOiA4LCBtaW51dGU6IDMwIH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHdlZWtkYXk6IDUgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAwNSwgb3JkaW5hbDogMjM0IH0pXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgc2V0KHZhbHVlcykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3QodmFsdWVzLCBub3JtYWxpemVVbml0KSxcbiAgICAgIHNldHRpbmdXZWVrU3R1ZmYgPVxuICAgICAgICAhaXNVbmRlZmluZWQobm9ybWFsaXplZC53ZWVrWWVhcikgfHxcbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla051bWJlcikgfHxcbiAgICAgICAgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla2RheSksXG4gICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSxcbiAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLFxuICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLFxuICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCxcbiAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyO1xuXG4gICAgaWYgKChjb250YWluc0dyZWdvciB8fCBjb250YWluc09yZGluYWwpICYmIGRlZmluaXRlV2Vla0RlZikge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbid0IG1peCB3ZWVrWWVhci93ZWVrTnVtYmVyIHVuaXRzIHdpdGggeWVhci9tb250aC9kYXkgb3Igb3JkaW5hbHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbnNHcmVnb3JNRCAmJiBjb250YWluc09yZGluYWwpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XCIpO1xuICAgIH1cblxuICAgIGxldCBtaXhlZDtcbiAgICBpZiAoc2V0dGluZ1dlZWtTdHVmZikge1xuICAgICAgbWl4ZWQgPSB3ZWVrVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub1dlZWsodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTtcbiAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpKSB7XG4gICAgICBtaXhlZCA9IG9yZGluYWxUb0dyZWdvcmlhbih7IC4uLmdyZWdvcmlhblRvT3JkaW5hbCh0aGlzLmMpLCAuLi5ub3JtYWxpemVkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaXhlZCA9IHsgLi4udGhpcy50b09iamVjdCgpLCAuLi5ub3JtYWxpemVkIH07XG5cbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBzZXQgdGhlIGRheSBidXQgd2UgZW5kZWQgdXAgb24gYW4gb3ZlcmZsb3cgZGF0ZSxcbiAgICAgIC8vIHVzZSB0aGUgbGFzdCBkYXkgb2YgdGhlIHJpZ2h0IG1vbnRoXG4gICAgICBpZiAoaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpKSB7XG4gICAgICAgIG1peGVkLmRheSA9IE1hdGgubWluKGRheXNJbk1vbnRoKG1peGVkLnllYXIsIG1peGVkLm1vbnRoKSwgbWl4ZWQuZGF5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBbdHMsIG9dID0gb2JqVG9UUyhtaXhlZCwgdGhpcy5vLCB0aGlzLnpvbmUpO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzLCBvIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqXG4gICAqIEFkZGluZyBob3VycywgbWludXRlcywgc2Vjb25kcywgb3IgbWlsbGlzZWNvbmRzIGluY3JlYXNlcyB0aGUgdGltZXN0YW1wIGJ5IHRoZSByaWdodCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBBZGRpbmcgZGF5cywgbW9udGhzLCBvciB5ZWFycyBzaGlmdHMgdGhlIGNhbGVuZGFyLCBhY2NvdW50aW5nIGZvciBEU1RzIGFuZCBsZWFwIHllYXJzIGFsb25nIHRoZSB3YXkuIFRodXMsIGBkdC5wbHVzKHsgaG91cnM6IDI0IH0pYCBtYXkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHRpbWUgdGhhbiBgZHQucGx1cyh7IGRheXM6IDEgfSlgIGlmIHRoZXJlJ3MgYSBEU1Qgc2hpZnQgaW4gYmV0d2Vlbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gYWRkLiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKDEyMykgLy9+PiBpbiAxMjMgbWlsbGlzZWNvbmRzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBtaW51dGVzOiAxNSB9KSAvL34+IGluIDE1IG1pbnV0ZXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkgLy9+PiB0aGlzIHRpbWUgdG9tb3Jyb3dcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IC0xIH0pIC8vfj4gdGhpcyB0aW1lIHllc3RlcmRheVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgaG91cnM6IDMsIG1pbnV0ZXM6IDEzIH0pIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSkgLy9+PiBpbiAzIGhyLCAxMyBtaW5cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuICBwbHVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnRyYWN0IGEgcGVyaW9kIG9mIHRpbWUgdG8gdGhpcyBEYXRlVGltZSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWVcbiAgICogU2VlIHtAbGluayBEYXRlVGltZSNwbHVzfVxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBzdWJ0cmFjdC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KClcbiAgIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cbiAgbWludXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbikubmVnYXRlKCk7XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIGFkanVzdFRpbWUodGhpcywgZHVyKSk7XG4gIH1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGlzIERhdGVUaW1lIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSB1bml0IG9mIHRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gVGhlIHVuaXQgdG8gZ28gdG8gdGhlIGJlZ2lubmluZyBvZi4gQ2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgb3IgJ21pbGxpc2Vjb25kJy5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignbW9udGgnKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMy0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZigneWVhcicpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAxLTAxJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCd3ZWVrJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDMnLCB3ZWVrcyBhbHdheXMgc3RhcnQgb24gTW9uZGF5c1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuc3RhcnRPZignZGF5JykudG9JU09UaW1lKCk7IC8vPT4gJzAwOjAwLjAwMC0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2hvdXInKS50b0lTT1RpbWUoKTsgLy89PiAnMDU6MDA6MDAuMDAwLTA1OjAwJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIHN0YXJ0T2YodW5pdCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBvID0ge30sXG4gICAgICBub3JtYWxpemVkVW5pdCA9IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCk7XG4gICAgc3dpdGNoIChub3JtYWxpemVkVW5pdCkge1xuICAgICAgY2FzZSBcInllYXJzXCI6XG4gICAgICAgIG8ubW9udGggPSAxO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSBcInF1YXJ0ZXJzXCI6XG4gICAgICBjYXNlIFwibW9udGhzXCI6XG4gICAgICAgIG8uZGF5ID0gMTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJ3ZWVrc1wiOlxuICAgICAgY2FzZSBcImRheXNcIjpcbiAgICAgICAgby5ob3VyID0gMDtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGNhc2UgXCJob3Vyc1wiOlxuICAgICAgICBvLm1pbnV0ZSA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwibWludXRlc1wiOlxuICAgICAgICBvLnNlY29uZCA9IDA7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlIFwic2Vjb25kc1wiOlxuICAgICAgICBvLm1pbGxpc2Vjb25kID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWlsbGlzZWNvbmRzXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gbm8gZGVmYXVsdCwgaW52YWxpZCB1bml0cyB0aHJvdyBpbiBub3JtYWxpemVVbml0KClcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXplZFVuaXQgPT09IFwid2Vla3NcIikge1xuICAgICAgby53ZWVrZGF5ID0gMTtcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXplZFVuaXQgPT09IFwicXVhcnRlcnNcIikge1xuICAgICAgY29uc3QgcSA9IE1hdGguY2VpbCh0aGlzLm1vbnRoIC8gMyk7XG4gICAgICBvLm1vbnRoID0gKHEgLSAxKSAqIDMgKyAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNldChvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlNldFwiIHRoaXMgRGF0ZVRpbWUgdG8gdGhlIGVuZCAobWVhbmluZyB0aGUgbGFzdCBtaWxsaXNlY29uZCkgb2YgYSB1bml0IG9mIHRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBUaGUgdW5pdCB0byBnbyB0byB0aGUgZW5kIG9mLiBDYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLCBvciAnbWlsbGlzZWNvbmQnLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignbW9udGgnKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3llYXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTEyLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3dlZWsnKS50b0lTTygpOyAvLyA9PiAnMjAxNC0wMy0wOVQyMzo1OTo1OS45OTktMDU6MDAnLCB3ZWVrcyBzdGFydCBvbiBNb25kYXlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignZGF5JykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0wM1QyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignaG91cicpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMDU6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG4gIGVuZE9mKHVuaXQpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkXG4gICAgICA/IHRoaXMucGx1cyh7IFt1bml0XTogMSB9KVxuICAgICAgICAgIC5zdGFydE9mKHVuaXQpXG4gICAgICAgICAgLm1pbnVzKDEpXG4gICAgICA6IHRoaXM7XG4gIH1cblxuICAvLyBPVVRQVVRcblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLlxuICAgKiAqKllvdSBtYXkgbm90IHdhbnQgdGhpcy4qKiBTZWUge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3IgYSBtb3JlIGZsZXhpYmxlIGZvcm1hdHRpbmcgdG9vbC4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvZm9ybWF0dGluZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgQXByIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2ZyJykudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJykgLy89PiAnMjAxNyBhdnIuIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnLCB7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoXCJISCAnaG91cnMgYW5kJyBtbSAnbWludXRlcydcIikgLy89PiAnMjAgaG91cnMgYW5kIDU1IG1pbnV0ZXMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLnJlZGVmYXVsdFRvRU4ob3B0cykpLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyh0aGlzLCBmbXQpXG4gICAgICA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMgZGF0ZS4gQWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIGFuZCBhbnkgcHJlc2V0cyBkZWZpbmVkIGJ5IEx1eG9uLCBzdWNoIGFzIGBEYXRlVGltZS5EQVRFX0ZVTExgIG9yIGBEYXRlVGltZS5USU1FX1NJTVBMRWAuXG4gICAqIFRoZSBleGFjdCBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBicm93c2VyLXNwZWNpZmljLCBidXQgaW4gZ2VuZXJhbCBpdCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgRGF0ZVRpbWUgaW4gdGhlIGFzc2lnbmVkIGxvY2FsZS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIGZvcm1hdE9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKCk7IC8vPT4gNC8yMC8yMDE3XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgnZW4tZ2InKS50b0xvY2FsZVN0cmluZygpOyAvLz0+ICcyMC8wNC8yMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGxvY2FsZTogJ2VuLWdiJyB9KTsgLy89PiAnMjAvMDQvMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMKTsgLy89PiAnQXByaWwgMjAsIDIwMTcnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLlRJTUVfU0lNUExFKTsgLy89PiAnMTE6MzIgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVUSU1FX1NIT1JUKTsgLy89PiAnNC8yMC8yMDE3LCAxMTozMiBBTSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyB3ZWVrZGF5OiAnbG9uZycsIG1vbnRoOiAnbG9uZycsIGRheTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHVyc2RheSwgQXByaWwgMjAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ3Nob3J0JywgbW9udGg6ICdzaG9ydCcsIGRheTogJzItZGlnaXQnLCBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHUsIEFwciAyMCwgMTE6MjcgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91ckN5Y2xlOiAnaDIzJyB9KTsgLy89PiAnMTE6MzInXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvTG9jYWxlU3RyaW5nKGZvcm1hdE9wdHMgPSBGb3JtYXRzLkRBVEVfU0hPUlQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRcbiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgZm9ybWF0T3B0cykuZm9ybWF0RGF0ZVRpbWUodGhpcylcbiAgICAgIDogSU5WQUxJRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZvcm1hdCBcInBhcnRzXCIsIG1lYW5pbmcgaW5kaXZpZHVhbCB0b2tlbnMgYWxvbmcgd2l0aCBtZXRhZGF0YS4gVGhpcyBpcyBhbGxvd3MgY2FsbGVycyB0byBwb3N0LXByb2Nlc3MgaW5kaXZpZHVhbCBzZWN0aW9ucyBvZiB0aGUgZm9ybWF0dGVkIG91dHB1dC5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXQvZm9ybWF0VG9QYXJ0c1xuICAgKiBAcGFyYW0gb3B0cyB7T2JqZWN0fSAtIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3Igb3B0aW9ucywgc2FtZSBhcyBgdG9Mb2NhbGVTdHJpbmdgLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVBhcnRzKCk7IC8vPT4gW1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2RheScsIHZhbHVlOiAnMjUnIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbGl0ZXJhbCcsIHZhbHVlOiAnLycgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdtb250aCcsIHZhbHVlOiAnMDUnIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbGl0ZXJhbCcsIHZhbHVlOiAnLycgfSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICd5ZWFyJywgdmFsdWU6ICcxOTgyJyB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+IF1cbiAgICovXG4gIHRvTG9jYWxlUGFydHMob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFxuICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLmNsb25lKG9wdHMpLCBvcHRzKS5mb3JtYXREYXRlVGltZVBhcnRzKHRoaXMpXG4gICAgICA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT10cnVlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgzLCA1LCAyNSkudG9JU08oKSAvLz0+ICcxOTgyLTA1LTI1VDAwOjAwOjAwLjAwMFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzIwMTcwNDIyVDIwNDcwNS4zMzUtMDQwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9JU08oe1xuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIixcbiAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSxcbiAgICBzdXBwcmVzc01pbGxpc2Vjb25kcyA9IGZhbHNlLFxuICAgIGluY2x1ZGVPZmZzZXQgPSB0cnVlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ID0gZm9ybWF0ID09PSBcImV4dGVuZGVkXCI7XG5cbiAgICBsZXQgYyA9IHRvSVNPRGF0ZSh0aGlzLCBleHQpO1xuICAgIGMgKz0gXCJUXCI7XG4gICAgYyArPSB0b0lTT1RpbWUodGhpcywgZXh0LCBzdXBwcmVzc1NlY29uZHMsIHN1cHByZXNzTWlsbGlzZWNvbmRzLCBpbmNsdWRlT2Zmc2V0LCBleHRlbmRlZFpvbmUpO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3MgZGF0ZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzE5ODIwNTI1J1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b0lTT0RhdGUoeyBmb3JtYXQgPSBcImV4dGVuZGVkXCIgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0b0lTT0RhdGUodGhpcywgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3Mgd2VlayBkYXRlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09XZWVrRGF0ZSgpIC8vPT4gJzE5ODItVzIxLTInXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPV2Vla0RhdGUoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBcImtra2stJ1cnV1ctY1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHRpbWUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT10cnVlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKCkgLy89PiAnMDc6MzQ6MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcwNzozNFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzA3MzQxOS4zNjFaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDA3OjM0OjE5LjM2MVonXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSVNPVGltZSh7XG4gICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSxcbiAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSxcbiAgICBpbmNsdWRlT2Zmc2V0ID0gdHJ1ZSxcbiAgICBpbmNsdWRlUHJlZml4ID0gZmFsc2UsXG4gICAgZXh0ZW5kZWRab25lID0gZmFsc2UsXG4gICAgZm9ybWF0ID0gXCJleHRlbmRlZFwiLFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGMgPSBpbmNsdWRlUHJlZml4ID8gXCJUXCIgOiBcIlwiO1xuICAgIHJldHVybiAoXG4gICAgICBjICtcbiAgICAgIHRvSVNPVGltZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIsXG4gICAgICAgIHN1cHByZXNzU2Vjb25kcyxcbiAgICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHMsXG4gICAgICAgIGluY2x1ZGVPZmZzZXQsXG4gICAgICAgIGV4dGVuZGVkWm9uZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBSRkMgMjgyMi1jb21wYXRpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9SRkMyODIyKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCArMDAwMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgLTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvUkZDMjgyMigpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsIFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyBaWlpcIiwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEhUVFAgaGVhZGVycy4gVGhlIG91dHB1dCBpcyBhbHdheXMgZXhwcmVzc2VkIGluIEdNVC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgc3RyaW5nIGNvbmZvcm1zIHRvIFJGQyAxMTIzLlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvSFRUUCgpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgR01UJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMsIDE5KS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDE5OjAwOjAwIEdNVCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9IVFRQKCkge1xuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcy50b1VUQygpLCBcIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgJ0dNVCdcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTERhdGUoKSAvLz0+ICcyMDE0LTA3LTEzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1NRTERhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBUaW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVab25lPWZhbHNlXSAtIGluY2x1ZGUgdGhlIHpvbmUsIHN1Y2ggYXMgJ0FtZXJpY2EvTmV3X1lvcmsnLiBPdmVycmlkZXMgaW5jbHVkZU9mZnNldC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXRTcGFjZT10cnVlXSAtIGluY2x1ZGUgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHRpbWUgYW5kIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnRvU1FMKCkgLy89PiAnMDU6MTU6MTYuMzQ1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVab25lOiBmYWxzZSB9KSAvLz0+ICcwNToxNToxNi4zNDUgQW1lcmljYS9OZXdfWW9yaydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUxUaW1lKHsgaW5jbHVkZU9mZnNldCA9IHRydWUsIGluY2x1ZGVab25lID0gZmFsc2UsIGluY2x1ZGVPZmZzZXRTcGFjZSA9IHRydWUgfSA9IHt9KSB7XG4gICAgbGV0IGZtdCA9IFwiSEg6bW06c3MuU1NTXCI7XG5cbiAgICBpZiAoaW5jbHVkZVpvbmUgfHwgaW5jbHVkZU9mZnNldCkge1xuICAgICAgaWYgKGluY2x1ZGVPZmZzZXRTcGFjZSkge1xuICAgICAgICBmbXQgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBpZiAoaW5jbHVkZVpvbmUpIHtcbiAgICAgICAgZm10ICs9IFwielwiO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgICAgIGZtdCArPSBcIlpaXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBmbXQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZVpvbmU6IHRydWUgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgQW1lcmljYS9OZXdfWW9yaydcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TUUwob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBgJHt0aGlzLnRvU1FMRGF0ZSgpfSAke3RoaXMudG9TUUxUaW1lKG9wdHMpfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9JU08oKSA6IElOVkFMSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggbWlsbGlzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuIEFsaWFzIG9mIHtAbGluayBEYXRlVGltZSN0b01pbGxpc31cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdmFsdWVPZigpIHtcbiAgICByZXR1cm4gdGhpcy50b01pbGxpcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICB0b01pbGxpcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50cyA6IE5hTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHRvU2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50cyAvIDEwMDAgOiBOYU47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyAoYXMgYSB3aG9sZSBudW1iZXIpIG9mIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHRvVW5peEludGVnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguZmxvb3IodGhpcy50cyAvIDEwMDApIDogTmFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEpTT04uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0lTTygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBCU09OIHNlcmlhbGl6YWJsZSBlcXVpdmFsZW50IHRvIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEByZXR1cm4ge0RhdGV9XG4gICAqL1xuICB0b0JTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9KU0RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCB0aGlzIERhdGVUaW1lJ3MgeWVhciwgbW9udGgsIGRheSwgYW5kIHNvIG9uLlxuICAgKiBAcGFyYW0gb3B0cyAtIG9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVDb25maWc9ZmFsc2VdIC0gaW5jbHVkZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgaW4gdGhlIG91dHB1dFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b09iamVjdCgpIC8vPT4geyB5ZWFyOiAyMDE3LCBtb250aDogNCwgZGF5OiAyMiwgaG91cjogMjAsIG1pbnV0ZTogNDksIHNlY29uZDogNDIsIG1pbGxpc2Vjb25kOiAyNjggfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICB0b09iamVjdChvcHRzID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHt9O1xuXG4gICAgY29uc3QgYmFzZSA9IHsgLi4udGhpcy5jIH07XG5cbiAgICBpZiAob3B0cy5pbmNsdWRlQ29uZmlnKSB7XG4gICAgICBiYXNlLm91dHB1dENhbGVuZGFyID0gdGhpcy5vdXRwdXRDYWxlbmRhcjtcbiAgICAgIGJhc2UubnVtYmVyaW5nU3lzdGVtID0gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtO1xuICAgICAgYmFzZS5sb2NhbGUgPSB0aGlzLmxvYy5sb2NhbGU7XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IERhdGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cbiAgdG9KU0RhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU4pO1xuICB9XG5cbiAgLy8gQ09NUEFSRVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gRGF0ZVRpbWVzIGFzIGEgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgRGF0ZVRpbWUgdG8gY29tcGFyZSB0aGlzIG9uZSB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciBhcnJheSBvZiB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZVxuICAgKiB2YXIgaTEgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgyLTA1LTI1VDA5OjQ1JyksXG4gICAqICAgICBpMiA9IERhdGVUaW1lLmZyb21JU08oJzE5ODMtMTAtMTRUMTA6MzAnKTtcbiAgICogaTIuZGlmZihpMSkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA0MzgwNzUwMDAwMCB9XG4gICAqIGkyLmRpZmYoaTEsICdob3VycycpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMjE2OC43NSB9XG4gICAqIGkyLmRpZmYoaTEsIFsnbW9udGhzJywgJ2RheXMnXSkudG9PYmplY3QoKSAvLz0+IHsgbW9udGhzOiAxNiwgZGF5czogMTkuMDMxMjUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJywgJ2hvdXJzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LCBob3VyczogMC43NSB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgZGlmZihvdGhlckRhdGVUaW1lLCB1bml0ID0gXCJtaWxsaXNlY29uZHNcIiwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyRGF0ZVRpbWUuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoXCJjcmVhdGVkIGJ5IGRpZmZpbmcgYW4gaW52YWxpZCBEYXRlVGltZVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJPcHRzID0geyBsb2NhbGU6IHRoaXMubG9jYWxlLCBudW1iZXJpbmdTeXN0ZW06IHRoaXMubnVtYmVyaW5nU3lzdGVtLCAuLi5vcHRzIH07XG5cbiAgICBjb25zdCB1bml0cyA9IG1heWJlQXJyYXkodW5pdCkubWFwKER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLFxuICAgICAgb3RoZXJJc0xhdGVyID0gb3RoZXJEYXRlVGltZS52YWx1ZU9mKCkgPiB0aGlzLnZhbHVlT2YoKSxcbiAgICAgIGVhcmxpZXIgPSBvdGhlcklzTGF0ZXIgPyB0aGlzIDogb3RoZXJEYXRlVGltZSxcbiAgICAgIGxhdGVyID0gb3RoZXJJc0xhdGVyID8gb3RoZXJEYXRlVGltZSA6IHRoaXMsXG4gICAgICBkaWZmZWQgPSBkaWZmKGVhcmxpZXIsIGxhdGVyLCB1bml0cywgZHVyT3B0cyk7XG5cbiAgICByZXR1cm4gb3RoZXJJc0xhdGVyID8gZGlmZmVkLm5lZ2F0ZSgpIDogZGlmZmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIHJpZ2h0IG5vdy5cbiAgICogU2VlIHtAbGluayBEYXRlVGltZSNkaWZmfVxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciB1bml0cyB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cbiAgZGlmZk5vdyh1bml0ID0gXCJtaWxsaXNlY29uZHNcIiwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGlmZihEYXRlVGltZS5ub3coKSwgdW5pdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHNwYW5uaW5nIGJldHdlZW4gdGhpcyBEYXRlVGltZSBhbmQgYW5vdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIGVuZCBwb2ludCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuICB1bnRpbChvdGhlckRhdGVUaW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEludGVydmFsLmZyb21EYXRlVGltZXModGhpcywgb3RoZXJEYXRlVGltZSkgOiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgRGF0ZVRpbWUgaXMgaW4gdGhlIHNhbWUgdW5pdCBvZiB0aW1lIGFzIGFub3RoZXIgRGF0ZVRpbWUuXG4gICAqIEhpZ2hlci1vcmRlciB1bml0cyBtdXN0IGFsc28gYmUgaWRlbnRpY2FsIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiBgdHJ1ZWAuXG4gICAqIE5vdGUgdGhhdCB0aW1lIHpvbmVzIGFyZSAqKmlnbm9yZWQqKiBpbiB0aGlzIGNvbXBhcmlzb24sIHdoaWNoIGNvbXBhcmVzIHRoZSAqKmxvY2FsKiogY2FsZW5kYXIgdGltZS4gVXNlIHtAbGluayBEYXRlVGltZSNzZXRab25lfSB0byBjb252ZXJ0IG9uZSBvZiB0aGUgZGF0ZXMgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgb2YgdGltZSB0byBjaGVjayBzYW1lbmVzcyBvblxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5oYXNTYW1lKG90aGVyRFQsICdkYXknKTsgLy9+PiB0cnVlIGlmIG90aGVyRFQgaXMgaW4gdGhlIHNhbWUgY3VycmVudCBjYWxlbmRhciBkYXlcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NhbWUob3RoZXJEYXRlVGltZSwgdW5pdCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBpbnB1dE1zID0gb3RoZXJEYXRlVGltZS52YWx1ZU9mKCk7XG4gICAgY29uc3QgYWRqdXN0ZWRUb1pvbmUgPSB0aGlzLnNldFpvbmUob3RoZXJEYXRlVGltZS56b25lLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSk7XG4gICAgcmV0dXJuIGFkanVzdGVkVG9ab25lLnN0YXJ0T2YodW5pdCkgPD0gaW5wdXRNcyAmJiBpbnB1dE1zIDw9IGFkanVzdGVkVG9ab25lLmVuZE9mKHVuaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWFsaXR5IGNoZWNrXG4gICAqIFR3byBEYXRlVGltZXMgYXJlIGVxdWFsIGlmZiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSBtaWxsaXNlY29uZCwgaGF2ZSB0aGUgc2FtZSB6b25lIGFuZCBsb2NhdGlvbiwgYW5kIGFyZSBib3RoIHZhbGlkLlxuICAgKiBUbyBjb21wYXJlIGp1c3QgdGhlIG1pbGxpc2Vjb25kIHZhbHVlcywgdXNlIGArZHQxID09PSArZHQyYC5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXIgLSB0aGUgb3RoZXIgRGF0ZVRpbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVmFsaWQgJiZcbiAgICAgIG90aGVyLmlzVmFsaWQgJiZcbiAgICAgIHRoaXMudmFsdWVPZigpID09PSBvdGhlci52YWx1ZU9mKCkgJiZcbiAgICAgIHRoaXMuem9uZS5lcXVhbHMob3RoZXIuem9uZSkgJiZcbiAgICAgIHRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyB0aW1lIHJlbGF0aXZlIHRvIG5vdywgc3VjaCBhcyBcImluIHR3byBkYXlzXCIuIENhbiBvbmx5IGludGVybmF0aW9uYWxpemUgaWYgeW91clxuICAgKiBwbGF0Zm9ybSBzdXBwb3J0cyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC4gUm91bmRzIGRvd24gYnkgZGVmYXVsdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBvdXRwdXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gW29wdGlvbnMuYmFzZT1EYXRlVGltZS5ub3coKV0gLSB0aGUgRGF0ZVRpbWUgdG8gdXNlIGFzIHRoZSBiYXNpcyB0byB3aGljaCB0aGlzIHRpbWUgaXMgY29tcGFyZWQuIERlZmF1bHRzIHRvIG5vdy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPVwibG9uZ1wiXSAtIHRoZSBzdHlsZSBvZiB1bml0cywgbXVzdCBiZSBcImxvbmdcIiwgXCJzaG9ydFwiLCBvciBcIm5hcnJvd1wiXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBvcHRpb25zLnVuaXQgLSB1c2UgYSBzcGVjaWZpYyB1bml0IG9yIGFycmF5IG9mIHVuaXRzOyBpZiBvbWl0dGVkLCBvciBhbiBhcnJheSwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIGJlc3QgdW5pdC4gVXNlIGFuIGFycmF5IG9yIG9uZSBvZiBcInllYXJzXCIsIFwicXVhcnRlcnNcIiwgXCJtb250aHNcIiwgXCJ3ZWVrc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgb3IgXCJzZWNvbmRzXCJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yb3VuZD10cnVlXSAtIHdoZXRoZXIgdG8gcm91bmQgdGhlIG51bWJlcnMgaW4gdGhlIG91dHB1dC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBhZGRpbmc9MF0gLSBwYWRkaW5nIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBhbGxvd3MgeW91IHRvIHJvdW5kIHVwIHRoZSByZXN1bHQgaWYgaXQgZml0cyBpbnNpZGUgdGhlIHRocmVzaG9sZC4gRG9uJ3QgdXNlIGluIGNvbWJpbmF0aW9uIHdpdGgge3JvdW5kOiBmYWxzZX0gYmVjYXVzZSB0aGUgZGVjaW1hbCBvdXRwdXQgd2lsbCBpbmNsdWRlIHRoZSBwYWRkaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5sb2NhbGUgLSBvdmVycmlkZSB0aGUgbG9jYWxlIG9mIHRoaXMgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcImluIDEgZGF5XCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKFwiZXNcIikudG9SZWxhdGl2ZSh7IGRheXM6IDEgfSkgLy89PiBcImRlbnRybyBkZSAxIGRcdTAwRURhXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSh7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gXCJkYW5zIDIzIGhldXJlc1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgZGF5czogMiB9KS50b1JlbGF0aXZlKCkgLy89PiBcIjIgZGF5cyBhZ29cIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSh7IHVuaXQ6IFwiaG91cnNcIiB9KSAvLz0+IFwiNDggaG91cnMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBob3VyczogMzYgfSkudG9SZWxhdGl2ZSh7IHJvdW5kOiBmYWxzZSB9KSAvLz0+IFwiMS41IGRheXMgYWdvXCJcbiAgICovXG4gIHRvUmVsYXRpdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGJhc2UgPSBvcHRpb25zLmJhc2UgfHwgRGF0ZVRpbWUuZnJvbU9iamVjdCh7fSwgeyB6b25lOiB0aGlzLnpvbmUgfSksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nID8gKHRoaXMgPCBiYXNlID8gLW9wdGlvbnMucGFkZGluZyA6IG9wdGlvbnMucGFkZGluZykgOiAwO1xuICAgIGxldCB1bml0cyA9IFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiLCBcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIl07XG4gICAgbGV0IHVuaXQgPSBvcHRpb25zLnVuaXQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy51bml0KSkge1xuICAgICAgdW5pdHMgPSBvcHRpb25zLnVuaXQ7XG4gICAgICB1bml0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gZGlmZlJlbGF0aXZlKGJhc2UsIHRoaXMucGx1cyhwYWRkaW5nKSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG51bWVyaWM6IFwiYWx3YXlzXCIsXG4gICAgICB1bml0cyxcbiAgICAgIHVuaXQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGRhdGUgcmVsYXRpdmUgdG8gdG9kYXksIHN1Y2ggYXMgXCJ5ZXN0ZXJkYXlcIiBvciBcIm5leHQgbW9udGhcIi5cbiAgICogT25seSBpbnRlcm5hdGlvbmFsaXplcyBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0cyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBvdXRwdXRcbiAgICogQHBhcmFtIHtEYXRlVGltZX0gW29wdGlvbnMuYmFzZT1EYXRlVGltZS5ub3coKV0gLSB0aGUgRGF0ZVRpbWUgdG8gdXNlIGFzIHRoZSBiYXNpcyB0byB3aGljaCB0aGlzIHRpbWUgaXMgY29tcGFyZWQuIERlZmF1bHRzIHRvIG5vdy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubG9jYWxlIC0gb3ZlcnJpZGUgdGhlIGxvY2FsZSBvZiB0aGlzIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnVuaXQgLSB1c2UgYSBzcGVjaWZpYyB1bml0OyBpZiBvbWl0dGVkLCB0aGUgbWV0aG9kIHdpbGwgcGljayB0aGUgdW5pdC4gVXNlIG9uZSBvZiBcInllYXJzXCIsIFwicXVhcnRlcnNcIiwgXCJtb250aHNcIiwgXCJ3ZWVrc1wiLCBvciBcImRheXNcIlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSBvdmVycmlkZSB0aGUgbnVtYmVyaW5nU3lzdGVtIG9mIHRoaXMgRGF0ZVRpbWUuIFRoZSBJbnRsIHN5c3RlbSBtYXkgY2hvb3NlIG5vdCB0byBob25vciB0aGlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gXCJ0b21vcnJvd1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZShcImVzXCIpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoKSAvLz0+IFwiXCJtYVx1MDBGMWFuYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmVDYWxlbmRhcih7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gXCJkZW1haW5cIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZUNhbGVuZGFyKCkgLy89PiBcIjIgZGF5cyBhZ29cIlxuICAgKi9cbiAgdG9SZWxhdGl2ZUNhbGVuZGFyKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBkaWZmUmVsYXRpdmUob3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLCB0aGlzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbnVtZXJpYzogXCJhdXRvXCIsXG4gICAgICB1bml0czogW1wieWVhcnNcIiwgXCJtb250aHNcIiwgXCJkYXlzXCJdLFxuICAgICAgY2FsZW5kYXJ5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWluIG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtaW5pbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWluIERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG4gIHN0YXRpYyBtaW4oLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5taW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWF4IG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtYXhpbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWF4IERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG4gIHN0YXRpYyBtYXgoLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIm1heCByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5tYXgpO1xuICB9XG5cbiAgLy8gTUlTQ1xuXG4gIC8qKlxuICAgKiBFeHBsYWluIGhvdyBhIHN0cmluZyB3b3VsZCBiZSBwYXJzZWQgYnkgZnJvbUZvcm1hdCgpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgZGVzY3JpcHRpb24pXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0YWtlbiBieSBmcm9tRm9ybWF0KClcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGZyb21Gb3JtYXRFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRpb25zLFxuICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoe1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgICAgZGVmYXVsdFRvRU46IHRydWUsXG4gICAgICB9KTtcbiAgICByZXR1cm4gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXRFeHBsYWluIGluc3RlYWRcbiAgICovXG4gIHN0YXRpYyBmcm9tU3RyaW5nRXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gRk9STUFUIFBSRVNFVFNcblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAxMC8xNC8xOTgzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9TSE9SVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfTUVEKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfTUVEO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaSwgT2N0IDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURV9NRURfV0lUSF9XRUVLREFZO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVfRlVMTCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFX0ZVTEw7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnVHVlc2RheSwgT2N0b2JlciAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURV9IVUdFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVfSFVHRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1NJTVBMRSgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1NJTVBMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FX1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuVElNRV9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfU0lNUExFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfU0lNUExFO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVEVCcsIGFsd2F5cyAyNC1ob3VyLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUKCkge1xuICAgIHJldHVybiBGb3JtYXRzLlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgRWFzdGVybiBEYXlsaWdodCBUaW1lJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5USU1FXzI0X1dJVEhfTE9OR19PRkZTRVQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9TSE9SVDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRCgpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9NRUQ7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUztcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIDE0IE9jdCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9GVUxMKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0ZVTEw7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIEZvcm1hdHMuREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFM7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCkge1xuICAgIHJldHVybiBGb3JtYXRzLkRBVEVUSU1FX0hVR0U7XG4gIH1cblxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwOjMzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gRm9ybWF0cy5EQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUztcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseURhdGVUaW1lKGRhdGVUaW1laXNoKSB7XG4gIGlmIChEYXRlVGltZS5pc0RhdGVUaW1lKGRhdGVUaW1laXNoKSkge1xuICAgIHJldHVybiBkYXRlVGltZWlzaDtcbiAgfSBlbHNlIGlmIChkYXRlVGltZWlzaCAmJiBkYXRlVGltZWlzaC52YWx1ZU9mICYmIGlzTnVtYmVyKGRhdGVUaW1laXNoLnZhbHVlT2YoKSkpIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUpTRGF0ZShkYXRlVGltZWlzaCk7XG4gIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgdHlwZW9mIGRhdGVUaW1laXNoID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoZGF0ZVRpbWVpc2gpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGBVbmtub3duIGRhdGV0aW1lIGFyZ3VtZW50OiAke2RhdGVUaW1laXNofSwgb2YgdHlwZSAke3R5cGVvZiBkYXRlVGltZWlzaH1gXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0ICogYXMgUCBmcm9tIFwicGFyc2ltbW9uXCI7XG5pbXBvcnQgZW1vamlSZWdleCBmcm9tIFwiZW1vamktcmVnZXhcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5cbi8qKiBUZXN0LWVudmlyb25tZW50LWZyaWVuZGx5IGZ1bmN0aW9uIHdoaWNoIGZldGNoZXMgdGhlIGN1cnJlbnQgc3lzdGVtIGxvY2FsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcImVuLVVTXCI7XG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2U7XG59XG5cbi8vIERhdGUvVGltZSBSZW5kZXJpbmdcblxuLyoqIE5vcm1hbGl6ZSBhIGR1cmF0aW9uIHRvIGFsbCBvZiB0aGUgcHJvcGVyIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUR1cmF0aW9uKGR1cjogRHVyYXRpb24pIHtcbiAgICBpZiAoZHVyID09PSB1bmRlZmluZWQgfHwgZHVyID09PSBudWxsKSByZXR1cm4gZHVyO1xuXG4gICAgcmV0dXJuIGR1ci5zaGlmdFRvKFwieWVhcnNcIiwgXCJtb250aHNcIiwgXCJ3ZWVrc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCIsIFwibWlsbGlzZWNvbmRzXCIpLm5vcm1hbGl6ZSgpO1xufVxuXG4vKiogU3RyaXAgdGhlIHRpbWUgY29tcG9uZW50cyBvZiBhIGRhdGUgdGltZSBvYmplY3QuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBUaW1lKGR0OiBEYXRlVGltZSk6IERhdGVUaW1lIHtcbiAgICBpZiAoZHQgPT09IG51bGwgfHwgZHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGR0O1xuXG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3Qoe1xuICAgICAgICB5ZWFyOiBkdC55ZWFyLFxuICAgICAgICBtb250aDogZHQubW9udGgsXG4gICAgICAgIGRheTogZHQuZGF5LFxuICAgIH0pO1xufVxuXG4vKiogVHJ5IHRvIGV4dHJhY3QgYSBZWVlZTU1ERCBkYXRlIGZyb20gYSBzdHJpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGUoc3RyOiBzdHJpbmcpOiBEYXRlVGltZSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGRhdGVNYXRjaCA9IC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KS8uZXhlYyhzdHIpO1xuICAgIGlmICghZGF0ZU1hdGNoKSBkYXRlTWF0Y2ggPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pLy5leGVjKHN0cik7XG4gICAgaWYgKGRhdGVNYXRjaCkge1xuICAgICAgICBsZXQgeWVhciA9IE51bWJlci5wYXJzZUludChkYXRlTWF0Y2hbMV0pO1xuICAgICAgICBsZXQgbW9udGggPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzJdKTtcbiAgICAgICAgbGV0IGRheSA9IE51bWJlci5wYXJzZUludChkYXRlTWF0Y2hbM10pO1xuICAgICAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXIsIG1vbnRoLCBkYXkgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlbmRlciBhIERhdGVUaW1lIGluIGEgbWluaW1hbCBmb3JtYXQgdG8gc2F2ZSBzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNaW5pbWFsRGF0ZSh0aW1lOiBEYXRlVGltZSwgZGF0ZUZvcm1hdDogc3RyaW5nLCBkYXRlVGltZUZvcm1hdDogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlbGV2YW50IHRpbWUgc3BlY2lmaWVkLCBmYWxsIGJhY2sgdG8ganVzdCByZW5kZXJpbmcgdGhlIGRhdGUuXG4gICAgaWYgKHRpbWUuc2Vjb25kID09IDAgJiYgdGltZS5taW51dGUgPT0gMCAmJiB0aW1lLmhvdXIgPT0gMCkge1xuICAgICAgICByZXR1cm4gdGltZS50b0xvY2FsKCkudG9Gb3JtYXQoZGF0ZUZvcm1hdCwgeyBsb2NhbGUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRpbWUudG9Mb2NhbCgpLnRvRm9ybWF0KGRhdGVUaW1lRm9ybWF0LCB7IGxvY2FsZSB9KTtcbn1cblxuLyoqIFJlbmRlciBhIGR1cmF0aW9uIGluIGEgbWluaW1hbCBmb3JtYXQgdG8gc2F2ZSBzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNaW5pbWFsRHVyYXRpb24oZHVyOiBEdXJhdGlvbik6IHN0cmluZyB7XG4gICAgZHVyID0gbm9ybWFsaXplRHVyYXRpb24oZHVyKTtcblxuICAgIC8vIFRPRE86IEx1eG9uIGRvZXMgbm90IGhhdmUgbXVsdGktbGluZ3VhbC9sb2NhbGUtYXdhcmUgZHVyYXRpb24gcmVuZGVyaW5nLlxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGlmIChkdXIueWVhcnMpIHJlc3VsdCArPSBgJHtkdXIueWVhcnN9IHllYXJzLCBgO1xuICAgIGlmIChkdXIubW9udGhzKSByZXN1bHQgKz0gYCR7ZHVyLm1vbnRoc30gbW9udGhzLCBgO1xuICAgIGlmIChkdXIud2Vla3MpIHJlc3VsdCArPSBgJHtkdXIud2Vla3N9IHdlZWtzLCBgO1xuICAgIGlmIChkdXIuZGF5cykgcmVzdWx0ICs9IGAke2R1ci5kYXlzfSBkYXlzLCBgO1xuICAgIGlmIChkdXIuaG91cnMpIHJlc3VsdCArPSBgJHtkdXIuaG91cnN9IGhvdXJzLCBgO1xuICAgIGlmIChkdXIubWludXRlcykgcmVzdWx0ICs9IGAke2R1ci5taW51dGVzfSBtaW51dGVzLCBgO1xuICAgIGlmIChkdXIuc2Vjb25kcykgcmVzdWx0ICs9IGAke01hdGgucm91bmQoZHVyLnNlY29uZHMpfSBzZWNvbmRzLCBgO1xuICAgIGlmIChkdXIubWlsbGlzZWNvbmRzKSByZXN1bHQgKz0gYCR7TWF0aC5yb3VuZChkdXIubWlsbGlzZWNvbmRzKX0gbXMsIGA7XG5cbiAgICBpZiAocmVzdWx0LmVuZHNXaXRoKFwiLCBcIikpIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgcmVzdWx0Lmxlbmd0aCAtIDIpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFBhdGggdXRpbGl0aWVzLlxuXG4vKiogR2V0IHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgZ2l2ZW4gcGF0aCAoaS5lLiwgbGlrZSBjb21wdXRpbmcgJ3BhdGgvLi4nKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRGb2xkZXIocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpO1xufVxuXG4vKiogR2V0IHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBmaWxlIHJlZmVyZW5jZWQgaW4gdGhlIGdpdmVuIHBhdGgsIGJ5IHN0cmlwcGluZyB0aGUgcGFyZW50IGZvbGRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5pbmNsdWRlcyhcIi9cIikgPyBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogcGF0aDtcbn1cblxuLyoqIEdldCB0aGUgXCJ0aXRsZVwiIGZvciBhIGZpbGUsIGJ5IHN0cmlwcGluZyBvdGhlciBwYXJ0cyBvZiB0aGUgcGF0aCBhcyB3ZWxsIGFzIHRoZSBleHRlbnNpb24uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVRpdGxlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHBhdGguaW5jbHVkZXMoXCIvXCIpKSBwYXRoID0gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICBpZiAocGF0aC5lbmRzV2l0aChcIi5tZFwiKSkgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMyk7XG4gICAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKiBHZXQgdGhlIGV4dGVuc2lvbiBvZiBhIGZpbGUgZnJvbSB0aGUgZmlsZSBwYXRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbihwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghcGF0aC5pbmNsdWRlcyhcIi5cIikpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xufVxuXG4vLyBUYWcgZXh0cmFjdGlvbi5cblxuLyoqIFBhcnNlIGFsbCBzdWJ0YWdzIG91dCBvZiB0aGUgZ2l2ZW4gdGFnLiBJLmUuLCAjaGVsbG8vaS9hbSB3b3VsZCB5aWVsZCBbI2hlbGxvL2kvYW0sICNoZWxsby9pLCAjaGVsbG9dLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTdWJ0YWdzKHRhZ3M6IHN0cmluZyB8IEl0ZXJhYmxlPHN0cmluZz4pOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IHRhZyBvZiB0eXBlb2YgdGFncyA9PT0gXCJzdHJpbmdcIiA/IFt0YWdzXSA6IHRhZ3MpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGFnKTtcbiAgICAgICAgd2hpbGUgKHRhZy5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICAgICAgICAgIHRhZyA9IHRhZy5zdWJzdHJpbmcoMCwgdGFnLmxhc3RJbmRleE9mKFwiL1wiKSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0YWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFNwbGl0IGVhY2ggYmxvY2sgYW5kIHNlY3Rpb24gbGluayBpbnRvIHRoZSBvcmlnaW5hbCBsaW5rIGFuZCBhIGNvcnJlc3BvbmRpbmcgZmlsZSBsaW5rLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGaWxlTGlua3MoZWxpbmtzOiBMaW5rW10pOiBMaW5rW10ge1xuICAgIGNvbnN0IHJlc3VsdDogTGlua1tdID0gW107XG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGVsaW5rcykge1xuICAgICAgICByZXN1bHQucHVzaChsaW5rKTtcblxuICAgICAgICBjb25zdCBmaWxlTGluayA9IGxpbmsudG9GaWxlKCk7XG4gICAgICAgIGlmIChsaW5rLnR5cGUgIT0gXCJmaWxlXCIgJiYgIXJlc3VsdC5maW5kKChleGlzdGluZykgPT4gZXhpc3RpbmcuZXF1YWxzKGZpbGVMaW5rKSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZpbGVMaW5rKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFN0cmluZyBlc2NhcGluZyBhbmQgY2Fub25pY2FsaXphdGlvbi5cblxuLyoqXG4gKiBFc2NhcGUgcmVnZXggY2hhcmFjdGVycyBpbiBhIHN0cmluZy5cbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdleChzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xufVxuXG5jb25zdCBIRUFERVJfQ0FOT05JQ0FMSVpFUjogUC5QYXJzZXI8c3RyaW5nPiA9IFAuYWx0KFxuICAgIFAucmVnZXgobmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksIFwiXCIpKSxcbiAgICBQLnJlZ2V4KC9bMC05XFxwe0xldHRlcn1fLV0rL3UpLFxuICAgIFAud2hpdGVzcGFjZS5tYXAoKF8pID0+IFwiIFwiKSxcbiAgICBQLmFueS5tYXAoKF8pID0+IFwiIFwiKVxuKVxuICAgIC5tYW55KClcbiAgICAubWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKFwiXCIpLnNwbGl0KC9cXHMrLykuam9pbihcIiBcIikudHJpbSgpO1xuICAgIH0pO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIHRleHQgaW4gYSBoZWFkZXIgdG8gYmUgc29tZXRoaW5nIHRoYXQgaXMgYWN0dWFsbHkgbGlua2FibGUgdG8uIFRoaXMgbWltaWNzXG4gKiBob3cgT2JzaWRpYW4gZG9lcyBpdCdzIG5vcm1hbGl6YXRpb24sIGNvbGxhcHNpbmcgcmVwZWF0ZWQgc3BhY2VzIGFuZCBzdHJpcHBpbmcgb3V0IGNvbnRyb2wgY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsoaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBIRUFERVJfQ0FOT05JQ0FMSVpFUi50cnlQYXJzZShoZWFkZXIpO1xufVxuXG4vLyBGYXN0IGV4dHJhY3Rpb24gb2YgbGluZSByYW5nZXMgZnJvbSBsYXJnZSBwaWVjZXMgb2YgdGV4dC5cblxuLyoqIFVwZGF0ZSB0aGUgbGluZSByYW5nZSBmcm9tIFtzdGFydCwgZW5kKSB3aXRoIHRoZSBnaXZlbiBmdW5jdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lUmVwbGFjZSh0ZXh0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBmdW5jOiAobGluZTogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXRhLCBvZmZzZXRdID0gbGluZVNwYW4odGV4dCwgc3RhcnQsIGVuZCk7XG4gICAgaWYgKCFvZmZzZXQpIHJldHVybiB0ZXh0O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgZGF0YS5zdWJzdHJpbmcoMCwgb2Zmc2V0LnN0YXJ0KSArIGZ1bmMoZGF0YS5zdWJzdHJpbmcob2Zmc2V0LnN0YXJ0LCBvZmZzZXQuZW5kKSkgKyBkYXRhLnN1YnN0cmluZyhvZmZzZXQuZW5kKVxuICAgICk7XG59XG5cbi8qKiBFeHRyYWN0IHRoZSBsaW5lcyBpbiB0aGUgcmFuZ2UgW3N0YXJ0LCBlbmQpLCBhcyB3ZWxsIGFzIHRoZSBhY3R1YWwgb2Zmc2V0cyBvZiB0aGUgc3RhcnQgYW5kIGVuZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5lU3BhbihcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlclxuKTogW3N0cmluZywgeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IHwgdW5kZWZpbmVkXSB7XG4gICAgc3RhcnQgPSBNYXRoLm1heChzdGFydCwgMCk7XG4gICAgZW5kID0gTWF0aC5tYXgoZW5kLCAwKTtcblxuICAgIGlmIChzdGFydCA+PSBlbmQpIHJldHVybiBbXCJcIiwgdW5kZWZpbmVkXTtcblxuICAgIC8vIFN0YXJ0IGJ5IGZpbmRpbmcgdGhlIHN0YXJ0aW5nIGxpbmUgb2Zmc2V0LlxuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gc2tpcE5ld2xpbmVzKHRleHQsIDAsIHN0YXJ0KTtcbiAgICBpZiAoc3RhcnRPZmZzZXQgPT0gLTEpIHJldHVybiBbXCJcIiwgdW5kZWZpbmVkXTtcblxuICAgIGNvbnN0IGVuZE9mZnNldCA9IHNraXBOZXdsaW5lcyh0ZXh0LCBzdGFydE9mZnNldCwgZW5kIC0gc3RhcnQpO1xuICAgIGlmIChlbmRPZmZzZXQgPT0gLTEpIHJldHVybiBbdGV4dC5zdWJzdHJpbmcoc3RhcnRPZmZzZXQpLCB7IHN0YXJ0OiBzdGFydE9mZnNldCwgZW5kOiB0ZXh0Lmxlbmd0aCB9XTtcbiAgICBlbHNlIHJldHVybiBbdGV4dC5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIDEpLCB7IHN0YXJ0OiBzdGFydE9mZnNldCwgZW5kOiBlbmRPZmZzZXQgLSAxIH1dO1xufVxuXG4vKiogRXh0cmFjdCB0aGUgbGluZXMgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kKS4gU3RhcnQgaXMgaW5jbHVzaXZlLCBlbmQgaXMgZXhjbHVzaXZlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpbmVSYW5nZSh0ZXh0OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbGluZVNwYW4odGV4dCwgc3RhcnQsIGVuZClbMF07XG59XG5cbi8qKiBTa2lwIHtjb3VudH0gdG90YWwgbmV3bGluZXMsIHJldHVybmluZyB0aGUgc3RhcnQgb2YgdGhlIGxpbmUge2NvdW50fSBsaW5lcyBhZnRlciB0aGUgY3VycmVudCBsaW5lLiBJZiBjb3VudCBpcyAwLCB0aGUgaW5pdGlhbCBvZmZzZXQgaXMgcmV0dXJuZWQuICovXG5leHBvcnQgZnVuY3Rpb24gc2tpcE5ld2xpbmVzKHRleHQ6IHN0cmluZywgc3RhcnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGNvdW50ID09IDApIHJldHVybiBzdGFydDtcblxuICAgIGxldCBwb3NpdGlvbiA9IHN0YXJ0O1xuICAgIHdoaWxlIChjb3VudCA+IDApIHtcbiAgICAgICAgcG9zaXRpb24gPSB0ZXh0LmluZGV4T2YoXCJcXG5cIiwgcG9zaXRpb24pO1xuICAgICAgICBpZiAocG9zaXRpb24gPT0gLTEpIHJldHVybiAtMTtcblxuICAgICAgICBjb3VudC0tO1xuICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NpdGlvbjtcbn1cbiIsICJpbXBvcnQgeyBnZXRGaWxlVGl0bGUsIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLyoqIFRoZSBPYnNpZGlhbiAnbGluaycsIHVzZWQgZm9yIHVuaXF1ZWx5IGRlc2NyaWJpbmcgYSBmaWxlLCBoZWFkZXIsIG9yIGJsb2NrLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgY2xhc3MgTGluayB7XG4gICAgLyoqIFRoZSBmaWxlIHBhdGggdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBwdWJsaWMgZGlzcGxheT86IHN0cmluZztcbiAgICAvKiogVGhlIGJsb2NrIElEIG9yIGhlYWRlciB0aGlzIGxpbmsgcG9pbnRzIHRvIHdpdGhpbiBhIGZpbGUsIGlmIHJlbGV2YW50LiAqL1xuICAgIHB1YmxpYyBzdWJwYXRoPzogc3RyaW5nO1xuICAgIC8qKiBJcyB0aGlzIGxpbmsgYW4gZW1iZWRkZWQgbGluayAob2YgZm9ybSAnIVtbaGVsbG9dXScpPyAqL1xuICAgIHB1YmxpYyBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgcHVibGljIHR5cGU6IFwiZmlsZVwiIHwgXCJoZWFkZXJcIiB8IFwiYmxvY2tcIjtcblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGZpbGUocGF0aDogc3RyaW5nLCBlbWJlZDogYm9vbGVhbiA9IGZhbHNlLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayh7XG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgZW1iZWQsXG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgc3VicGF0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBJbmZlciB0aGUgdHlwZSBvZiB0aGUgbGluayBmcm9tIHRoZSBmdWxsIGludGVybmFsIGxpbmsgcGF0aC4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGluZmVyKGxpbmtwYXRoOiBzdHJpbmcsIGVtYmVkOiBib29sZWFuID0gZmFsc2UsIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgaWYgKGxpbmtwYXRoLmluY2x1ZGVzKFwiI15cIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI15cIik7XG4gICAgICAgICAgICByZXR1cm4gTGluay5ibG9jayhzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIGlmIChsaW5rcGF0aC5pbmNsdWRlcyhcIiNcIikpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgIHJldHVybiBMaW5rLmhlYWRlcihzcGxpdFswXSwgc3BsaXRbMV0sIGVtYmVkLCBkaXNwbGF5KTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBMaW5rLmZpbGUobGlua3BhdGgsIGVtYmVkLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGhlYWRlciBpbiB0aGF0IGZpbGUuICovXG4gICAgcHVibGljIHN0YXRpYyBoZWFkZXIocGF0aDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZywgZW1iZWQ/OiBib29sZWFuLCBkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIC8vIEhlYWRlcnMgbmVlZCB0byBiZSBub3JtYWxpemVkIHRvIGFscGhhLW51bWVyaWMgJiB3aXRoIGV4dHJhIHNwYWNpbmcgcmVtb3ZlZC5cbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlciksXG4gICAgICAgICAgICB0eXBlOiBcImhlYWRlclwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGJsb2NrIGluIHRoYXQgZmlsZS4gKi9cbiAgICBwdWJsaWMgc3RhdGljIGJsb2NrKHBhdGg6IHN0cmluZywgYmxvY2tJZDogc3RyaW5nLCBlbWJlZD86IGJvb2xlYW4sIGRpc3BsYXk/OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBlbWJlZCxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBzdWJwYXRoOiBibG9ja0lkLFxuICAgICAgICAgICAgdHlwZTogXCJibG9ja1wiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBhIGxpbmsgZnJvbSBpdCdzIHJhdyBKU09OIHJlcHJlc2VudGF0aW9uLiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChvYmplY3Q6IEpzb25MaW5rKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIGJ5IHBhcnNpbmcgaXQncyBpbnRlcmlvciBwYXJ0IChpbnNpZGUgb2YgdGhlICdbW11dJykuICovXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUlubmVyKHJhd2xpbms6IHN0cmluZyk6IExpbmsge1xuICAgICAgICBsZXQgW2xpbmssIGRpc3BsYXldID0gc3BsaXRPblVuZXNjYXBlZFBpcGUocmF3bGluayk7XG4gICAgICAgIHJldHVybiBMaW5rLmluZmVyKGxpbmssIGZhbHNlLCBkaXNwbGF5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGZpZWxkczogUGFydGlhbDxMaW5rPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGlzIGxpbmsgd2l0aCBhIG5ldyBwYXRoLiAqL1xuICAgIHB1YmxpYyB3aXRoUGF0aChwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rKE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHsgcGF0aCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIG5ldyBsaW5rIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBsb2NhdGlvbiBidXQgd2l0aCBhIG5ldyBkaXNwbGF5IHZhbHVlLiAqL1xuICAgIHB1YmxpYyB3aXRoRGlzcGxheShkaXNwbGF5Pzogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBuZXcgbGluayB3aGljaCBoYXMgdGhlIGdpdmVuIGVtYmVkZGVkIHN0YXR1cy4gKi9cbiAgICBwdWJsaWMgd2l0aEVtYmVkKGVtYmVkOiBib29sZWFuKTogTGluayB7XG4gICAgICAgIGlmICh0aGlzLmVtYmVkID09IGVtYmVkKSByZXR1cm4gdGhpcztcblxuICAgICAgICByZXR1cm4gbmV3IExpbmsoT2JqZWN0LmFzc2lnbih7fSwgdGhpcywgeyBlbWJlZCB9KSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgYSBmaWxlIGxpbmsgaW50byBhIGxpbmsgdG8gYSBzcGVjaWZpYyBoZWFkZXIuICovXG4gICAgcHVibGljIHdpdGhIZWFkZXIoaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWNiIGxvY2suICovXG4gICAgcHVibGljIHdpdGhCbG9jayhibG9jazogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHRoaXMucGF0aCwgYmxvY2ssIHRoaXMuZW1iZWQsIHRoaXMuZGlzcGxheSk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrcyBmb3IgbGluayBlcXVhbGl0eSAoaS5lLiwgdGhhdCB0aGUgbGlua3MgYXJlIHBvaW50aW5nIHRvIHRoZSBzYW1lIGV4YWN0IGxvY2F0aW9uKS4gKi9cbiAgICBwdWJsaWMgZXF1YWxzKG90aGVyOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChvdGhlciA9PSB1bmRlZmluZWQgfHwgb3RoZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnBhdGggPT0gb3RoZXIucGF0aCAmJiB0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiB0aGlzLnN1YnBhdGggPT0gb3RoZXIuc3VicGF0aDtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gaXQncyBtYXJrZG93biByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2Rvd24oKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gYSByYXcgb2JqZWN0IHdoaWNoIGlzIHNlcmlhbGl6YXRpb24tZnJpZW5kbHkuICovXG4gICAgcHVibGljIHRvT2JqZWN0KCk6IEpzb25MaW5rIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHN1YnBhdGg6IHRoaXMuc3VicGF0aCxcbiAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgICAgICAgIGVtYmVkOiB0aGlzLmVtYmVkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqL1xuICAgIHB1YmxpYyB0b0ZpbGUoKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmZpbGUodGhpcy5wYXRoLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpO1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0IHRoaXMgbGluayBpbnRvIGFuIGVtYmVkZGVkIGxpbmsuICovXG4gICAgcHVibGljIHRvRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhIG5vbi1lbWJlZGRlZCBsaW5rLiAqL1xuICAgIHB1YmxpYyBmcm9tRW1iZWQoKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhFbWJlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIG1hcmtkb3duIHNvIGl0IGNhbiBiZSByZW5kZXJlZC4gKi9cbiAgICBwdWJsaWMgbWFya2Rvd24oKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICh0aGlzLmVtYmVkID8gXCIhXCIgOiBcIlwiKSArIFwiW1tcIiArIHRoaXMub2JzaWRpYW5MaW5rKCk7XG4gICAgICAgIHJlc3VsdCArPSBcInxcIjtcbiAgICAgICAgcmVzdWx0ICs9IHRoaXMuZGlzcGxheU9yRGVmYXVsdCgpO1xuICAgICAgICByZXN1bHQgKz0gXCJdXVwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGRpc3BsYXkgZm9yIHRoaXMgbGluayBpZiBwcmVzZW50LCBvciByZXR1cm4gYSBzaW1wbGUgZGVmYXVsdCBkaXNwbGF5LiAqL1xuICAgIHB1YmxpYyBkaXNwbGF5T3JEZWZhdWx0KCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBcImhlYWRlclwiIHx8IHRoaXMudHlwZSA9PSBcImJsb2NrXCIpIHJlc3VsdCArPSBcIiA+IFwiICsgdGhpcy5zdWJwYXRoO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbnZlcnQgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGxpbmsgdG8gc29tZXRoaW5nIHRoYXQgT2JzaWRpYW4gY2FuIG9wZW4gLyB1bmRlcnN0YW5kLiAqL1xuICAgIHB1YmxpYyBvYnNpZGlhbkxpbmsoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMucGF0aC5yZXBsYWNlKFwifFwiLCBcIlxcXFx8XCIpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09IFwiaGVhZGVyXCIpIHJldHVybiBlc2NhcGVkICsgXCIjXCIgKyB0aGlzLnN1YnBhdGg/LnJlcGxhY2UoXCJ8XCIsIFwiXFxcXHxcIik7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJibG9ja1wiKSByZXR1cm4gZXNjYXBlZCArIFwiI15cIiArIHRoaXMuc3VicGF0aD8ucmVwbGFjZShcInxcIiwgXCJcXFxcfFwiKTtcbiAgICAgICAgZWxzZSByZXR1cm4gZXNjYXBlZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIHN0cmlwcGVkIG5hbWUgb2YgdGhlIGZpbGUgdGhpcyBsaW5rIHBvaW50cyB0by4gKi9cbiAgICBwdWJsaWMgZmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpO1xuICAgIH1cbn1cblxuLyoqIFNlcmlhbGl6ZWQgZm9ybSBvZiBhIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbmsge1xuICAgIC8qKiBUaGUgZmlsZSBwYXRoIHRoaXMgbGluayBwb2ludHMgdG8uICovXG4gICAgcGF0aDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGlzcGxheSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4gKi9cbiAgICBkaXNwbGF5Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgYmxvY2sgSUQgb3IgaGVhZGVyIHRoaXMgbGluayBwb2ludHMgdG8gd2l0aGluIGEgZmlsZSwgaWYgcmVsZXZhbnQuICovXG4gICAgc3VicGF0aD86IHN0cmluZztcbiAgICAvKiogSXMgdGhpcyBsaW5rIGFuIGVtYmVkZGVkIGxpbmsgKG9mIGZvcm0gJyFbW2hlbGxvXV0nKT8gKi9cbiAgICBlbWJlZDogYm9vbGVhbjtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhpcyBsaW5rLCB3aGljaCBkZXRlcm1pbmVzIHdoYXQgJ3N1YnBhdGgnIHJlZmVycyB0bywgaWYgYW55dGhpbmcuICovXG4gICAgdHlwZTogXCJmaWxlXCIgfCBcImhlYWRlclwiIHwgXCJibG9ja1wiO1xufVxuXG4vKiogU3BsaXQgb24gdW5lc2NhcGVkIHBpcGVzIGluIGFuIGlubmVyIGxpbmsuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE9uVW5lc2NhcGVkUGlwZShsaW5rOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdIHtcbiAgICBsZXQgcGlwZSA9IC0xO1xuICAgIHdoaWxlICgocGlwZSA9IGxpbmsuaW5kZXhPZihcInxcIiwgcGlwZSArIDEpKSA+PSAwKSB7XG4gICAgICAgIGlmIChwaXBlID4gMCAmJiBsaW5rW3BpcGUgLSAxXSA9PSBcIlxcXFxcIikgY29udGludWU7XG4gICAgICAgIHJldHVybiBbbGluay5zdWJzdHJpbmcoMCwgcGlwZSkucmVwbGFjZSgvXFxcXFxcfC9nLCBcInxcIiksIGxpbmsuc3Vic3RyaW5nKHBpcGUgKyAxKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsaW5rLnJlcGxhY2UoL1xcXFxcXHwvZywgXCJ8XCIpLCB1bmRlZmluZWRdO1xufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IHtcbiAgICBCaW5hcnlPcCxcbiAgICBFeHByZXNzaW9uLFxuICAgIEV4cHJlc3Npb25zLFxuICAgIExhbWJkYUV4cHJlc3Npb24sXG4gICAgTGlzdEV4cHJlc3Npb24sXG4gICAgTGl0ZXJhbEV4cHJlc3Npb24sXG4gICAgT2JqZWN0RXhwcmVzc2lvbixcbiAgICBWYXJpYWJsZUV4cHJlc3Npb24sXG59IGZyb20gXCIuL2V4cHJlc3Npb25cIjtcbmltcG9ydCBlbW9qaVJlZ2V4IGZyb20gXCJlbW9qaS1yZWdleFwiO1xuaW1wb3J0IHtcbiAgICBJbmRleENoaWxkT2YsXG4gICAgSW5kZXhQYXRoLFxuICAgIEluZGV4SWQsXG4gICAgSW5kZXhOb3QsXG4gICAgSW5kZXhQYXJlbnRPZixcbiAgICBJbmRleFF1ZXJ5LFxuICAgIEluZGV4VGFnZ2VkLFxuICAgIEluZGV4VHlwZWQsXG4gICAgSW5kZXhMaW5rZWQsXG4gICAgSW5kZXhGaWVsZCxcbiAgICBJbmRleEV4cHJlc3Npb24sXG59IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgbm9ybWFsaXplRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUGFyc2luZyBQcmltaXRpdmVzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFByaW1pdGl2ZSBwYXJzaW5nIGZvciBjb21tb25seSBzZWVuIHR5cGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmltaXRpdmVzTGFuZ3VhZ2Uge1xuICAgIG51bWJlcjogbnVtYmVyO1xuICAgIHN0cmluZzogc3RyaW5nO1xuICAgIGVzY2FwZUNoYXJhY3Rlcjogc3RyaW5nO1xuICAgIGJvb2w6IGJvb2xlYW47XG4gICAgdGFnOiBzdHJpbmc7XG4gICAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAgIGxpbms6IExpbms7XG4gICAgZW1iZWRMaW5rOiBMaW5rO1xuICAgIHJvb3REYXRlOiBEYXRlVGltZTtcbiAgICBkYXRlU2hvcnRoYW5kOiBrZXlvZiB0eXBlb2YgREFURV9TSE9SVEhBTkRTO1xuICAgIGRhdGU6IERhdGVUaW1lO1xuICAgIGRhdGVQbHVzOiBEYXRlVGltZTtcbiAgICBkdXJhdGlvblR5cGU6IGtleW9mIHR5cGVvZiBEVVJBVElPTl9UWVBFUztcbiAgICBkdXJhdGlvbjogRHVyYXRpb247XG4gICAgcmF3TnVsbDogc3RyaW5nO1xuXG4gICAgYmluYXJ5UGx1c01pbnVzOiBCaW5hcnlPcDtcbiAgICBiaW5hcnlNdWxEaXY6IEJpbmFyeU9wO1xuICAgIGJpbmFyeUNvbXBhcmVPcDogQmluYXJ5T3A7XG4gICAgYmluYXJ5QW5kT3A6IEJpbmFyeU9wO1xuICAgIGJpbmFyeU9yT3A6IEJpbmFyeU9wO1xuXG4gICAgLy8gTGl0ZXJhbCBmaWVsZCBwYXJzaW5nIGZvciBpbmdlc3RpbmcgaW5saW5lIGZpZWxkcyBhbmQgZnJvbnRtYXR0ZXIuXG4gICAgYXRvbUlubGluZUZpZWxkOiBMaXRlcmFsO1xuICAgIGlubGluZUZpZWxkTGlzdDogTGl0ZXJhbFtdO1xuICAgIGlubGluZUZpZWxkOiBMaXRlcmFsO1xufVxuXG4vKiogSW1wbGVtZW50YXRpb25zIGZvciBtYW55IHByaW1pdGl2ZXMuICovXG5leHBvcnQgY29uc3QgUFJJTUlUSVZFUyA9IFAuY3JlYXRlTGFuZ3VhZ2U8UHJpbWl0aXZlc0xhbmd1YWdlPih7XG4gICAgbnVtYmVyOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoLy0/WzAtOV0rKFxcLlswLTldKyk/LylcbiAgICAgICAgICAgIC5tYXAoKHN0cikgPT4gTnVtYmVyLnBhcnNlRmxvYXQoc3RyKSlcbiAgICAgICAgICAgIC5kZXNjKFwibnVtYmVyXCIpLFxuXG4gICAgLy8gQSBxdW90ZS1zdXJyb3VuZGVkIHN0cmluZyB3aGljaCBzdXBwb3J0cyBlc2NhcGUgY2hhcmFjdGVycyAoJ1xcJykuXG4gICAgc3RyaW5nOiAocSkgPT5cbiAgICAgICAgUC5zdHJpbmcoJ1wiJylcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgIFAuYWx0KHEuZXNjYXBlQ2hhcmFjdGVyLCBQLm5vbmVPZignXCJcXFxcJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdExlYXN0KDApXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoYXJzKSA9PiBjaGFycy5qb2luKFwiXCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnNraXAoUC5zdHJpbmcoJ1wiJykpXG4gICAgICAgICAgICAuZGVzYyhcInN0cmluZ1wiKSxcblxuICAgIGVzY2FwZUNoYXJhY3RlcjogKF8pID0+XG4gICAgICAgIFAuc3RyaW5nKFwiXFxcXFwiKVxuICAgICAgICAgICAgLnRoZW4oUC5hbnkpXG4gICAgICAgICAgICAubWFwKChlc2NhcGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGVzY2FwaW5nIGEgYmFja3NsYXNoIG9yIGEgcXVvdGUsIHBhc3MgaW4gb24gaW4gZXNjYXBlZCBmb3JtXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09ICdcIicpIHJldHVybiAnXCInO1xuICAgICAgICAgICAgICAgIGlmIChlc2NhcGVkID09PSBcIlxcXFxcIikgcmV0dXJuIFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFwiXFxcXFwiICsgZXNjYXBlZDtcbiAgICAgICAgICAgIH0pLFxuXG4gICAgLy8gQSBib29sZWFuIHRydWUvZmFsc2UgdmFsdWUuXG4gICAgYm9vbDogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC90cnVlfGZhbHNlfFRydWV8RmFsc2UvKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIudG9Mb3dlckNhc2UoKSA9PSBcInRydWVcIilcbiAgICAgICAgICAgIC5kZXNjKFwiYm9vbGVhblwiKSxcblxuICAgIC8vIEEgdGFnIG9mIHRoZSBmb3JtICcjc3R1ZmYvaGVsbG8tdGhlcmUnLlxuICAgIHRhZzogKF8pID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCIjXCIpLFxuICAgICAgICAgICAgUC5hbHQoUC5yZWdleHAoL1teXFx1MjAwMC1cXHUyMDZGXFx1MkUwMC1cXHUyRTdGJyFcIiMkJSYoKSorLC46Ozw9Pj9AXmB7fH1+XFxbXFxdXFxcXFxcc10vKS5kZXNjKFwidGV4dFwiKSkubWFueSgpLFxuICAgICAgICAgICAgKHN0YXJ0LCByZXN0KSA9PiBzdGFydCArIHJlc3Quam9pbihcIlwiKVxuICAgICAgICApLmRlc2MoXCJ0YWdcIiksXG5cbiAgICAvLyBBIHZhcmlhYmxlIGlkZW50aWZpZXIsIHdoaWNoIGlzIGFscGhhbnVtZXJpYyBhbmQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIG9yLi4uIGVtb2ppLlxuICAgIGlkZW50aWZpZXI6IChfKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFAuYWx0KFAucmVnZXhwKC9bXFxwe0xldHRlcn0kXS91KSwgUC5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoXCJ0ZXh0XCIpKSxcbiAgICAgICAgICAgIFAuYWx0KFAucmVnZXhwKC9bMC05XFxwe0xldHRlcn0kXy1dL3UpLCBQLnJlZ2V4cChFTU9KSV9SRUdFWCkuZGVzYyhcInRleHRcIikpLm1hbnkoKSxcbiAgICAgICAgICAgIChmaXJzdCwgcmVzdCkgPT4gZmlyc3QgKyByZXN0LmpvaW4oXCJcIilcbiAgICAgICAgKS5kZXNjKFwidmFyaWFibGVcIiksXG5cbiAgICAvLyBBbiBPYnNpZGlhbiBsaW5rIG9mIHRoZSBmb3JtIFtbPGxpbms+XV0uXG4gICAgbGluazogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXFtcXFsoW15cXFtcXF1dKj8pXFxdXFxdL3UsIDEpXG4gICAgICAgICAgICAubWFwKChsaW5rSW5uZXIpID0+IExpbmsucGFyc2VJbm5lcihsaW5rSW5uZXIpKVxuICAgICAgICAgICAgLmRlc2MoXCJmaWxlIGxpbmtcIiksXG5cbiAgICAvLyBBbiBlbWJlZGRhYmxlIGxpbmsgd2hpY2ggY2FuIHN0YXJ0IHdpdGggJyEnLiBUaGlzIG92ZXJsYXBzIHdpdGggdGhlIG5vcm1hbCBuZWdhdGlvbiBvcGVyYXRvciwgc28gaXQgaXMgb25seVxuICAgIC8vIHByb3ZpZGVkIGZvciBtZXRhZGF0YSBwYXJzaW5nLlxuICAgIGVtYmVkTGluazogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiIVwiKS5hdE1vc3QoMSksIHEubGluaywgKHAsIGwpID0+IHtcbiAgICAgICAgICAgIGlmIChwLmxlbmd0aCA+IDApIGwuZW1iZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgIH0pLmRlc2MoXCJmaWxlIGxpbmtcIiksXG5cbiAgICAvLyBCaW5hcnkgcGx1cyBvciBtaW51cyBvcGVyYXRvci5cbiAgICBiaW5hcnlQbHVzTWludXM6IChfKSA9PlxuICAgICAgICBQLnJlZ2V4cCgvXFwrfC0vKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIicrJyBvciAnLSdcIiksXG5cbiAgICAvLyBCaW5hcnkgdGltZXMgb3IgZGl2aWRlIG9wZXJhdG9yLlxuICAgIGJpbmFyeU11bERpdjogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9cXCp8XFwvfCUvKVxuICAgICAgICAgICAgLm1hcCgoc3RyKSA9PiBzdHIgYXMgQmluYXJ5T3ApXG4gICAgICAgICAgICAuZGVzYyhcIicqJyBvciAnLycgb3IgJyUnXCIpLFxuXG4gICAgLy8gQmluYXJ5IGNvbXBhcmlzb24gb3BlcmF0b3IuXG4gICAgYmluYXJ5Q29tcGFyZU9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoLz49fDw9fCE9fD58PHw9LylcbiAgICAgICAgICAgIC5tYXAoKHN0cikgPT4gc3RyIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInPj0nIG9yICc8PScgb3IgJyE9JyBvciAnPScgb3IgJz4nIG9yICc8J1wiKSxcblxuICAgIC8vIEJpbmFyeSBib29sZWFuIGNvbWJpbmF0aW9uIG9wZXJhdG9yLlxuICAgIGJpbmFyeUFuZE9wOiAoXykgPT5cbiAgICAgICAgUC5yZWdleHAoL2FuZHwmL2kpXG4gICAgICAgICAgICAubWFwKChfc3RyKSA9PiBcIiZcIiBhcyBCaW5hcnlPcClcbiAgICAgICAgICAgIC5kZXNjKFwiJ2FuZCdcIiksXG4gICAgYmluYXJ5T3JPcDogKF8pID0+XG4gICAgICAgIFAucmVnZXhwKC9vcnxcXHwvaSlcbiAgICAgICAgICAgIC5tYXAoKF9zdHIpID0+IFwifFwiIGFzIEJpbmFyeU9wKVxuICAgICAgICAgICAgLmRlc2MoXCInb3InXCIpLFxuXG4gICAgLy8gQSBkYXRlIHdoaWNoIGNhbiBiZSBZWVlZLU1NWy1ERFRISDptbTpzc10uXG4gICAgcm9vdERhdGU6IChfKSA9PlxuICAgICAgICBQLnNlcU1hcChQLnJlZ2V4cCgvXFxkezR9LyksIFAuc3RyaW5nKFwiLVwiKSwgUC5yZWdleHAoL1xcZHsyfS8pLCAoeWVhciwgXywgbW9udGgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogTnVtYmVyLnBhcnNlSW50KHllYXIpLCBtb250aDogTnVtYmVyLnBhcnNlSW50KG1vbnRoKSB9KTtcbiAgICAgICAgfSkuZGVzYyhcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXVwiKSxcbiAgICBkYXRlU2hvcnRoYW5kOiAoXykgPT5cbiAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhEQVRFX1NIT1JUSEFORFMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLm1hcChQLnN0cmluZylcbiAgICAgICAgKSBhcyBQLlBhcnNlcjxrZXlvZiB0eXBlb2YgREFURV9TSE9SVEhBTkRTPixcbiAgICBkYXRlOiAocSkgPT5cbiAgICAgICAgY2hhaW5PcHQ8RGF0ZVRpbWU+KFxuICAgICAgICAgICAgcS5yb290RGF0ZSxcbiAgICAgICAgICAgICh5bTogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCItXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBkYXkpID0+IHltLnNldCh7IGRheTogTnVtYmVyLnBhcnNlSW50KGRheSkgfSkpLFxuICAgICAgICAgICAgKHltZDogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCJUXCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBob3VyKSA9PiB5bWQuc2V0KHsgaG91cjogTnVtYmVyLnBhcnNlSW50KGhvdXIpIH0pKSxcbiAgICAgICAgICAgICh5bWRoOiBEYXRlVGltZSkgPT5cbiAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIjpcIiksIFAucmVnZXhwKC9cXGR7Mn0vKSwgKF8sIG1pbnV0ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgeW1kaC5zZXQoeyBtaW51dGU6IE51bWJlci5wYXJzZUludChtaW51dGUpIH0pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh5bWRobTogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5zZXFNYXAoUC5zdHJpbmcoXCI6XCIpLCBQLnJlZ2V4cCgvXFxkezJ9LyksIChfLCBzZWNvbmQpID0+XG4gICAgICAgICAgICAgICAgICAgIHltZGhtLnNldCh7IHNlY29uZDogTnVtYmVyLnBhcnNlSW50KHNlY29uZCkgfSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHltZGhtczogRGF0ZVRpbWUpID0+XG4gICAgICAgICAgICAgICAgUC5hbHQoXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiLlwiKSwgUC5yZWdleHAoL1xcZHszfS8pLCAoXywgbWlsbGlzZWNvbmQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB5bWRobXMuc2V0KHsgbWlsbGlzZWNvbmQ6IE51bWJlci5wYXJzZUludChtaWxsaXNlY29uZCkgfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgUC5zdWNjZWVkKHltZGhtcykgLy8gcGFzc1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZHQ6IERhdGVUaW1lKSA9PlxuICAgICAgICAgICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIitcIikub3IoUC5zdHJpbmcoXCItXCIpKSwgUC5yZWdleHAoL1xcZHsxLDJ9KDpcXGR7Mn0pPy8pLCAocG0sIGhyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZHQuc2V0Wm9uZShcIlVUQ1wiICsgcG0gKyBociwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIFAuc2VxTWFwKFAuc3RyaW5nKFwiWlwiKSwgKCkgPT4gZHQuc2V0Wm9uZShcInV0Y1wiLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkpLFxuICAgICAgICAgICAgICAgICAgICBQLnNlcU1hcChQLnN0cmluZyhcIltcIiksIFAucmVnZXhwKC9bMC05QS1aYS16Ky1cXC9dKy91KSwgUC5zdHJpbmcoXCJdXCIpLCAoX2EsIHpvbmUsIF9iKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZHQuc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgICAgLmFzc2VydCgoZHQ6IERhdGVUaW1lKSA9PiBkdC5pc1ZhbGlkLCBcInZhbGlkIGRhdGVcIilcbiAgICAgICAgICAgIC5kZXNjKFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXCIpLFxuXG4gICAgLy8gQSBkYXRlLCBwbHVzIHZhcmlvdXMgc2hvcnRoYW5kIHRpbWVzIG9mIGRheSBpdCBjb3VsZCBiZS5cbiAgICBkYXRlUGx1czogKHEpID0+XG4gICAgICAgIFAuYWx0PERhdGVUaW1lPihcbiAgICAgICAgICAgIHEuZGF0ZVNob3J0aGFuZC5tYXAoKGQpID0+IERBVEVfU0hPUlRIQU5EU1tkXSgpKSxcbiAgICAgICAgICAgIHEuZGF0ZVxuICAgICAgICApLmRlc2MoXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10gb3IgaW4gc2hvcnRoYW5kXCIpLFxuXG4gICAgLy8gQSBkdXJhdGlvbiBvZiB0aW1lLlxuICAgIGR1cmF0aW9uVHlwZTogKF8pID0+XG4gICAgICAgIFAuYWx0KFxuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoRFVSQVRJT05fVFlQRVMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLm1hcChQLnN0cmluZylcbiAgICAgICAgKSBhcyBQLlBhcnNlcjxrZXlvZiB0eXBlb2YgRFVSQVRJT05fVFlQRVM+LFxuICAgIGR1cmF0aW9uOiAocSkgPT5cbiAgICAgICAgUC5zZXFNYXAocS5udW1iZXIsIFAub3B0V2hpdGVzcGFjZSwgcS5kdXJhdGlvblR5cGUsIChjb3VudCwgXywgdCkgPT5cbiAgICAgICAgICAgIERVUkFUSU9OX1RZUEVTW3RdLm1hcFVuaXRzKCh4KSA9PiB4ICogY291bnQpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5zZXBCeTEoUC5zdHJpbmcoXCIsXCIpLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS5vcihQLm9wdFdoaXRlc3BhY2UpKVxuICAgICAgICAgICAgLm1hcCgoZHVyYXRpb25zKSA9PiBkdXJhdGlvbnMucmVkdWNlKChwLCBjKSA9PiBwLnBsdXMoYykpKVxuICAgICAgICAgICAgLmRlc2MoXCJkdXJhdGlvbiBsaWtlIDRocjJtaW5cIiksXG5cbiAgICAvLyBBIHJhdyBudWxsIHZhbHVlLlxuICAgIHJhd051bGw6IChfKSA9PiBQLnN0cmluZyhcIm51bGxcIiksXG5cbiAgICAvLyBJbmxpbmUgZmllbGQgdmFsdWUgcGFyc2luZy5cbiAgICBhdG9tSW5saW5lRmllbGQ6IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIHEuZGF0ZSxcbiAgICAgICAgICAgIHEuZHVyYXRpb24ubWFwKChkKSA9PiBub3JtYWxpemVEdXJhdGlvbihkKSksXG4gICAgICAgICAgICBxLnN0cmluZyxcbiAgICAgICAgICAgIHEudGFnLFxuICAgICAgICAgICAgcS5lbWJlZExpbmssXG4gICAgICAgICAgICBxLmJvb2wsXG4gICAgICAgICAgICBxLm51bWJlcixcbiAgICAgICAgICAgIHEucmF3TnVsbFxuICAgICAgICApLFxuICAgIGlubGluZUZpZWxkTGlzdDogKHEpID0+IHEuYXRvbUlubGluZUZpZWxkLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkubG9va2FoZWFkKHEuYXRvbUlubGluZUZpZWxkKSksXG4gICAgaW5saW5lRmllbGQ6IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIFAuc2VxTWFwKHEuYXRvbUlubGluZUZpZWxkLCBQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLCBxLmlubGluZUZpZWxkTGlzdCwgKGYsIF9zLCBsKSA9PlxuICAgICAgICAgICAgICAgIFtmXS5jb25jYXQobClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBxLmF0b21JbmxpbmVGaWVsZFxuICAgICAgICApLFxufSk7XG5cbi8qKiBFbW9qaSByZWdleCwgc3RycHBpbmcgYW55IHJlZ2V4IGZsYWdzIGl0IGhhcy4gKi9cbmNvbnN0IEVNT0pJX1JFR0VYID0gbmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksIFwiXCIpO1xuXG4vKiogUHJvdmlkZXMgYSBsb29rdXAgdGFibGUgZm9yIHVuaXQgZHVyYXRpb25zIG9mIHRoZSBnaXZlbiB0eXBlLiAqL1xuZXhwb3J0IGNvbnN0IERVUkFUSU9OX1RZUEVTID0ge1xuICAgIHllYXI6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSxcbiAgICB5ZWFyczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLFxuICAgIHlyOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG4gICAgeXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksXG5cbiAgICBtb250aDogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSxcbiAgICBtb250aHM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG4gICAgbW86IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksXG4gICAgbW9zOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLFxuXG4gICAgd2VlazogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLFxuICAgIHdlZWtzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG4gICAgd2s6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3a3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSxcbiAgICB3OiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksXG5cbiAgICBkYXk6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuICAgIGRheXM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuICAgIGQ6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLFxuXG4gICAgaG91cjogRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLFxuICAgIGhvdXJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG4gICAgaHI6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBocnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSxcbiAgICBoOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksXG5cbiAgICBtaW51dGU6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLFxuICAgIG1pbnV0ZXM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLFxuICAgIG1pbjogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbWluczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG4gICAgbTogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksXG5cbiAgICBzZWNvbmQ6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLFxuICAgIHNlY29uZHM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLFxuICAgIHNlYzogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgc2VjczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG4gICAgczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksXG59O1xuXG4vKiogU2hvcnRoYW5kIGZvciBjb21tb24gZGF0ZXMgKHJlbGF0aXZlIHRvIHJpZ2h0IG5vdykuICovXG5leHBvcnQgY29uc3QgREFURV9TSE9SVEhBTkRTID0ge1xuICAgIG5vdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKSxcbiAgICB0b2RheTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwiZGF5XCIpLFxuICAgIHllc3RlcmRheTogKCkgPT5cbiAgICAgICAgRGF0ZVRpbWUubG9jYWwoKVxuICAgICAgICAgICAgLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgICAgICAgIC5taW51cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksXG4gICAgdG9tb3Jyb3c6ICgpID0+XG4gICAgICAgIERhdGVUaW1lLmxvY2FsKClcbiAgICAgICAgICAgIC5zdGFydE9mKFwiZGF5XCIpXG4gICAgICAgICAgICAucGx1cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksXG4gICAgc293OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJ3ZWVrXCIpLFxuICAgIFwic3RhcnQtb2Ytd2Vla1wiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJ3ZWVrXCIpLFxuICAgIGVvdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZihcIndlZWtcIiksXG4gICAgXCJlbmQtb2Ytd2Vla1wiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwid2Vla1wiKSxcbiAgICBzb3k6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcInllYXJcIiksXG4gICAgXCJzdGFydC1vZi15ZWFyXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZihcInllYXJcIiksXG4gICAgZW95OiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwieWVhclwiKSxcbiAgICBcImVuZC1vZi15ZWFyXCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJ5ZWFyXCIpLFxuICAgIHNvbTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKFwibW9udGhcIiksXG4gICAgXCJzdGFydC1vZi1tb250aFwiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoXCJtb250aFwiKSxcbiAgICBlb206ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoXCJtb250aFwiKSxcbiAgICBcImVuZC1vZi1tb250aFwiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKFwibW9udGhcIiksXG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBFeHByZXNzaW9uIExhbmd1YWdlIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIFBvc3RmaXhGcmFnbWVudCA9XG4gICAgfCB7IHR5cGU6IFwiZG90XCI7IGV4cHI6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6IFwiaW5kZXhcIjsgZXhwcjogRXhwcmVzc2lvbiB9XG4gICAgfCB7IHR5cGU6IFwiZnVuY3Rpb25cIjsgZXhwcnM6IEV4cHJlc3Npb25bXSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cHJlc3Npb25MYW5ndWFnZSB7XG4gICAgdmFyaWFibGU6IFZhcmlhYmxlRXhwcmVzc2lvbjtcbiAgICBudW1iZXI6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIGJvb2w6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIHN0cmluZzogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgZGF0ZTogTGl0ZXJhbEV4cHJlc3Npb247XG4gICAgZHVyYXRpb246IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIGxpbms6IExpdGVyYWxFeHByZXNzaW9uO1xuICAgIG51bGw6IExpdGVyYWxFeHByZXNzaW9uO1xuXG4gICAgbGlzdDogTGlzdEV4cHJlc3Npb247XG4gICAgb2JqZWN0OiBPYmplY3RFeHByZXNzaW9uO1xuXG4gICAgbmVnYXRlZDogRXhwcmVzc2lvbjtcbiAgICBhdG9tOiBFeHByZXNzaW9uO1xuICAgIGluZGV4OiBFeHByZXNzaW9uO1xuICAgIGxhbWJkYTogTGFtYmRhRXhwcmVzc2lvbjtcblxuICAgIC8vIFBvc3RmaXggcGFyc2VycyBmb3IgZnVuY3Rpb24gY2FsbHMgJiB0aGUgbGlrZS5cbiAgICBkb3RQb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG4gICAgaW5kZXhQb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG4gICAgZnVuY3Rpb25Qb3N0Zml4OiBQb3N0Zml4RnJhZ21lbnQ7XG5cbiAgICAvLyBCaW5hcnkgb3AgcGFyc2Vycy5cbiAgICBiaW5hcnlNdWxEaXY6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5UGx1c01pbnVzOiBFeHByZXNzaW9uO1xuICAgIGJpbmFyeUNvbXBhcmU6IEV4cHJlc3Npb247XG4gICAgYmluYXJ5Qm9vbGVhbjogRXhwcmVzc2lvbjtcbiAgICBiaW5hcnlPcDogRXhwcmVzc2lvbjtcbiAgICBwYXJlbnM6IEV4cHJlc3Npb247XG4gICAgZXhwcmVzc2lvbjogRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBQYXJzZSBmb3IgdGhlIGRhdGFjb3JlIGV4cHJlc3Npb24gbGFuZ3VhZ2UsIHdoaWNoIHByb3ZpZGVzIHNpbXBsZSBhbmQgdmFndWVseSBKUy1sb29raW5nIGNvbXB1dGF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgRVhQUkVTU0lPTiA9IFAuY3JlYXRlTGFuZ3VhZ2U8RXhwcmVzc2lvbkxhbmd1YWdlPih7XG4gICAgLy8gRmllbGQgcGFyc2luZy5cbiAgICB2YXJpYWJsZTogKF8pID0+IFBSSU1JVElWRVMuaWRlbnRpZmllci5tYXAoRXhwcmVzc2lvbnMudmFyaWFibGUpLmRlc2MoXCJ2YXJpYWJsZVwiKSxcbiAgICBudW1iZXI6IChfKSA9PiBQUklNSVRJVkVTLm51bWJlci5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCkuZGVzYyhcIm51bWJlclwiKSxcbiAgICBzdHJpbmc6IChfKSA9PiBQUklNSVRJVkVTLnN0cmluZy5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCkuZGVzYyhcInN0cmluZ1wiKSxcbiAgICBib29sOiAoXykgPT4gUFJJTUlUSVZFUy5ib29sLm1hcChFeHByZXNzaW9ucy5saXRlcmFsKS5kZXNjKFwiYm9vbGVhblwiKSxcbiAgICBkYXRlOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oXCJkYXRlXCIsIFBSSU1JVElWRVMuZGF0ZVBsdXMpXG4gICAgICAgICAgICAubWFwKChbX2Z1bmMsIGRhdGVdKSA9PiBFeHByZXNzaW9ucy5saXRlcmFsKGRhdGUpKVxuICAgICAgICAgICAgLmRlc2MoXCJkYXRlXCIpLFxuICAgIGR1cmF0aW9uOiAoXykgPT5cbiAgICAgICAgY3JlYXRlRnVuY3Rpb24oXCJkdXJcIiwgUFJJTUlUSVZFUy5kdXJhdGlvbilcbiAgICAgICAgICAgIC5tYXAoKFtfZnVuYywgZHVyXSkgPT4gRXhwcmVzc2lvbnMubGl0ZXJhbChkdXIpKVxuICAgICAgICAgICAgLmRlc2MoXCJkdXJhdGlvblwiKSxcbiAgICBudWxsOiAoXykgPT4gUFJJTUlUSVZFUy5yYXdOdWxsLm1hcCgoXykgPT4gRXhwcmVzc2lvbnMuTlVMTCksXG4gICAgbGluazogKF8pID0+IFBSSU1JVElWRVMubGluay5tYXAoRXhwcmVzc2lvbnMubGl0ZXJhbCksXG4gICAgbGlzdDogKHEpID0+XG4gICAgICAgIHEuZXhwcmVzc2lvblxuICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAud3JhcChQLnN0cmluZyhcIltcIikuc2tpcChQLm9wdFdoaXRlc3BhY2UpLCBQLm9wdFdoaXRlc3BhY2UudGhlbihQLnN0cmluZyhcIl1cIikpKVxuICAgICAgICAgICAgLm1hcCgobCkgPT4gRXhwcmVzc2lvbnMubGlzdChsKSlcbiAgICAgICAgICAgIC5kZXNjKFwibGlzdFwiKSxcbiAgICBvYmplY3Q6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFBSSU1JVElWRVMuaWRlbnRpZmllci5vcihQUklNSVRJVkVTLnN0cmluZyksXG4gICAgICAgICAgICBQLnN0cmluZyhcIjpcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLFxuICAgICAgICAgICAgKG5hbWUsIF9zZXAsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAgICAgLnNlcEJ5KFAuc3RyaW5nKFwiLFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpXG4gICAgICAgICAgICAud3JhcChQLnN0cmluZyhcIntcIikuc2tpcChQLm9wdFdoaXRlc3BhY2UpLCBQLm9wdFdoaXRlc3BhY2UudGhlbihQLnN0cmluZyhcIn1cIikpKVxuICAgICAgICAgICAgLm1hcCgodmFscykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgdmFscykgcmVzW2VudHJ5Lm5hbWVdID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEV4cHJlc3Npb25zLm9iamVjdChyZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kZXNjKFwib2JqZWN0ICgneyBhOiAxLCBiOiAyIH0nKVwiKSxcblxuICAgIGF0b206IChxKSA9PlxuICAgICAgICBQLmFsdChcbiAgICAgICAgICAgIC8vIFBsYWNlIGVtYmVkIGxpbmtzIGFib3ZlIG5lZ2F0ZWQgZmllbGRzIGFzIHRoZXkgYXJlIHRoZSBzcGVjaWFsIHBhcnNlciBjYXNlICchW1t0aGluZ11dJyBhbmQgYXJlIGdlbmVyYWxseSB1bmFtYmlnaW91cy5cbiAgICAgICAgICAgIFBSSU1JVElWRVMuZW1iZWRMaW5rLm1hcCgobCkgPT4gRXhwcmVzc2lvbnMubGl0ZXJhbChsKSksXG4gICAgICAgICAgICBxLm5lZ2F0ZWQsXG4gICAgICAgICAgICBxLmxpbmssXG4gICAgICAgICAgICBxLmxpc3QsXG4gICAgICAgICAgICBxLm9iamVjdCxcbiAgICAgICAgICAgIHEubGFtYmRhLFxuICAgICAgICAgICAgcS5wYXJlbnMsXG4gICAgICAgICAgICBxLmJvb2wsXG4gICAgICAgICAgICBxLm51bWJlcixcbiAgICAgICAgICAgIHEuc3RyaW5nLFxuICAgICAgICAgICAgcS5kYXRlLFxuICAgICAgICAgICAgcS5kdXJhdGlvbixcbiAgICAgICAgICAgIHEubnVsbCxcbiAgICAgICAgICAgIHEudmFyaWFibGVcbiAgICAgICAgKSxcbiAgICBpbmRleDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKHEuYXRvbSwgUC5hbHQocS5kb3RQb3N0Zml4LCBxLmluZGV4UG9zdGZpeCwgcS5mdW5jdGlvblBvc3RmaXgpLm1hbnkoKSwgKG9iaiwgcG9zdGZpeGVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JqO1xuICAgICAgICAgICAgZm9yIChsZXQgcG9zdCBvZiBwb3N0Zml4ZXMpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvc3QudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZG90XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIEV4cHJlc3Npb25zLmxpdGVyYWwocG9zdC5leHByKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluZGV4XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5pbmRleChyZXN1bHQsIHBvc3QuZXhwcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeHByZXNzaW9ucy5mdW5jKHJlc3VsdCwgcG9zdC5leHBycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pLFxuICAgIG5lZ2F0ZWQ6IChxKSA9PiBQLnNlcU1hcChQLnN0cmluZyhcIiFcIiksIHEuaW5kZXgsIChfLCBmaWVsZCkgPT4gRXhwcmVzc2lvbnMubmVnYXRlKGZpZWxkKSkuZGVzYyhcIm5lZ2F0ZWQgZmllbGRcIiksXG4gICAgcGFyZW5zOiAocSkgPT4gcS5leHByZXNzaW9uLnRyaW0oUC5vcHRXaGl0ZXNwYWNlKS53cmFwKFAuc3RyaW5nKFwiKFwiKSwgUC5zdHJpbmcoXCIpXCIpKSxcbiAgICBsYW1iZGE6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFBSSU1JVElWRVMuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIC5zZXBCeShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpKVxuICAgICAgICAgICAgICAgIC53cmFwKFAuc3RyaW5nKFwiKFwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksIFAuc3RyaW5nKFwiKVwiKS50cmltKFAub3B0V2hpdGVzcGFjZSkpLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCI9PlwiKS50cmltKFAub3B0V2hpdGVzcGFjZSksXG4gICAgICAgICAgICBxLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAoaWRlbnQsIF9pZ25vcmUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsYW1iZGFcIiwgYXJndW1lbnRzOiBpZGVudCwgdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcblxuICAgIGRvdFBvc3RmaXg6IChxKSA9PiBQLnNlcU1hcChQLnN0cmluZyhcIi5cIiksIFBSSU1JVElWRVMuaWRlbnRpZmllciwgKF8sIGV4cHIpID0+ICh7IHR5cGU6IFwiZG90XCIsIGV4cHIgfSkpLFxuICAgIGluZGV4UG9zdGZpeDogKHEpID0+XG4gICAgICAgIFAuc2VxTWFwKFxuICAgICAgICAgICAgUC5zdHJpbmcoXCJbXCIpLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgcS5leHByZXNzaW9uLFxuICAgICAgICAgICAgUC5vcHRXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgUC5zdHJpbmcoXCJdXCIpLFxuICAgICAgICAgICAgKF8sIF8yLCBleHByLCBfMywgXzQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImluZGV4XCIsIGV4cHIgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICBmdW5jdGlvblBvc3RmaXg6IChxKSA9PlxuICAgICAgICBQLnNlcU1hcChcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiKFwiKSxcbiAgICAgICAgICAgIFAub3B0V2hpdGVzcGFjZSxcbiAgICAgICAgICAgIHEuZXhwcmVzc2lvbi5zZXBCeShQLnN0cmluZyhcIixcIikudHJpbShQLm9wdFdoaXRlc3BhY2UpKSxcbiAgICAgICAgICAgIFAub3B0V2hpdGVzcGFjZSxcbiAgICAgICAgICAgIFAuc3RyaW5nKFwiKVwiKSxcbiAgICAgICAgICAgIChfLCBfMSwgZXhwcnMsIF8yLCBfMykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiZnVuY3Rpb25cIiwgZXhwcnMgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcblxuICAgIC8vIFRoZSBwcmVjZWRlbmNlIGhpZXJhcmNoeSBvZiBvcGVyYXRvcnMgLSBtdWx0aXBseS9kaXZpZGUsIGFkZC9zdWJ0cmFjdCwgY29tcGFyZSwgYW5kIHRoZW4gYm9vbGVhbiBvcGVyYXRpb25zLlxuICAgIGJpbmFyeU11bERpdjogKHEpID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmluZGV4LCBQUklNSVRJVkVTLmJpbmFyeU11bERpdiwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeVBsdXNNaW51czogKHEpID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeU11bERpdiwgUFJJTUlUSVZFUy5iaW5hcnlQbHVzTWludXMsIEV4cHJlc3Npb25zLmJpbmFyeU9wKSxcbiAgICBiaW5hcnlDb21wYXJlOiAocSkgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5UGx1c01pbnVzLCBQUklNSVRJVkVTLmJpbmFyeUNvbXBhcmVPcCwgRXhwcmVzc2lvbnMuYmluYXJ5T3ApLFxuICAgIGJpbmFyeUJvb2xlYW46IChxKSA9PlxuICAgICAgICBjcmVhdGVCaW5hcnlQYXJzZXIocS5iaW5hcnlDb21wYXJlLCBQUklNSVRJVkVTLmJpbmFyeUFuZE9wLm9yKFBSSU1JVElWRVMuYmluYXJ5T3JPcCksIEV4cHJlc3Npb25zLmJpbmFyeU9wKSxcbiAgICBiaW5hcnlPcDogKHEpID0+IHEuYmluYXJ5Qm9vbGVhbixcblxuICAgIGV4cHJlc3Npb246IChxKSA9PiBxLmJpbmFyeU9wLFxufSk7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBRdWVyeSBMYW5ndWFnZSAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFN1cHBvcnRlZCB0eXBlcyBpbiB0aGUgZ3JhbW1hciBmb3IgaW5kZXggcXVlcmllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlMYW5ndWFnZSB7XG4gICAgcXVlcnlUYWc6IEluZGV4VGFnZ2VkO1xuICAgIHF1ZXJ5SWQ6IEluZGV4SWQ7XG4gICAgcXVlcnlUeXBlOiBJbmRleFR5cGVkO1xuICAgIHF1ZXJ5UGF0aDogSW5kZXhQYXRoO1xuICAgIHF1ZXJ5UGFyZW50T2Y6IEluZGV4UGFyZW50T2Y7XG4gICAgcXVlcnlDaGlsZE9mOiBJbmRleENoaWxkT2Y7XG4gICAgcXVlcnlTaW1wbGVMaW5rZWQ6IEluZGV4TGlua2VkO1xuICAgIHF1ZXJ5TGlua2VkOiBJbmRleExpbmtlZDtcbiAgICBxdWVyeUV4aXN0czogSW5kZXhGaWVsZDtcbiAgICBxdWVyeVF1b3RlZEV4cHJlc3Npb246IEluZGV4RXhwcmVzc2lvbjtcbiAgICBxdWVyeVJhd0V4cHJlc3Npb246IEluZGV4RXhwcmVzc2lvbjtcbiAgICBxdWVyeU5lZ2F0ZTogSW5kZXhOb3Q7XG4gICAgcXVlcnlQYXJlbnM6IEluZGV4UXVlcnk7XG4gICAgcXVlcnlBdG9tOiBJbmRleFF1ZXJ5O1xuICAgIHF1ZXJ5QW5kczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeU9yczogSW5kZXhRdWVyeTtcbiAgICBxdWVyeTogSW5kZXhRdWVyeTtcbn1cblxuLyoqXG4gKiBQYXJzZXIgZm9yIHRoZSBxdWVyeSBsYW5ndWFnZS4gRGlkIEkgcmVhbGx5IG5lZWQgYSBxdWVyeSBsYW5ndWFnZSBpbnN0ZWFkIG9mIGp1c3QgYSBiZXR0ZXIgVUk/IFByb2JhYmx5IG5vdC5cbiAqIEJ1dCBxdWVyeSBsYW5ndWFnZXMgYXJlIGZ1biBmb3IgdGhlIHdob2xlIGZhbWlseSBhbmQgYXQgc29tZSBwb2ludCB5b3UgZ2V0IHNvIHVzZWQgdG8gd3JpdGluZyB0aGVtIHRoYXRcbiAqIHlvdSBkb24ndCBzdG9wIHRvIHRoaW5rIGlmIHlvdSAqbmVlZCogdG8gd3JpdGUgdGhlbSBhbnltb3JlLiBJdCdzIGdvb2QgdHlwaW5nIHByYWN0aWNlIGZvciBldmVyeW9uZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVRVJZID0gUC5jcmVhdGVMYW5ndWFnZTxRdWVyeUxhbmd1YWdlPih7XG4gICAgcXVlcnlUYWc6IChfKSA9PiBQUklNSVRJVkVTLnRhZy5tYXAoKHZhbHVlKSA9PiAoeyB0eXBlOiBcInRhZ2dlZFwiLCB2YWx1ZSB9KSksXG4gICAgcXVlcnlJZDogKF8pID0+IGNyZWF0ZUZ1bmN0aW9uKFwiaWRcIiwgUFJJTUlUSVZFUy5zdHJpbmcpLm1hcCgoW18sIGlkXSkgPT4gKHsgdHlwZTogXCJpZFwiLCB2YWx1ZTogaWQgfSkpLFxuICAgIHF1ZXJ5VHlwZTogKF8pID0+XG4gICAgICAgIFAuc3RyaW5nKFwiQFwiKVxuICAgICAgICAgICAgLnRoZW4oUFJJTUlUSVZFUy5pZGVudGlmaWVyKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7IHR5cGU6IFwidHlwZWRcIiwgdmFsdWU6IHZhbHVlIH0pKSxcblxuICAgIHF1ZXJ5UGF0aDogKF8pID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9lP3BhdGgvaSkuZGVzYyhcIltlXXBhdGhcIiksIFBSSU1JVElWRVMuc3RyaW5nKS5tYXAoKFtmdW5jLCBwYXRoXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwicGF0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHBhdGgsXG4gICAgICAgICAgICBleGFjdDogZnVuYy50b0xvd2VyQ2FzZSgpID09PSBcImVwYXRoXCIsXG4gICAgICAgIH0pKSxcblxuICAgIHF1ZXJ5UGFyZW50T2Y6IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvcGFyZW50b2Z8c3VwZXJ0cmVlL2kpLmRlc2MoXCJwYXJlbnRvZlwiKSwgcS5xdWVyeSkubWFwKChbZnVuYywgY2hpbGRyZW5dKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJwYXJlbnQtb2ZcIixcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmdW5jLnRvTG93ZXJDYXNlKCkgPT09IFwic3VwZXJ0cmVlXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUNoaWxkT2Y6IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvY2hpbGRvZnxzdWJ0cmVlL2kpLmRlc2MoXCJjaGlsZG9mXCIpLCBxLnF1ZXJ5KS5tYXAoKFtmdW5jLCBwYXJlbnRzXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY2hpbGQtb2ZcIixcbiAgICAgICAgICAgIHBhcmVudHMsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PT0gXCJzdWJ0cmVlXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeVNpbXBsZUxpbmtlZDogKF8pID0+XG4gICAgICAgIFBSSU1JVElWRVMubGluay5tYXAoKGxpbmspID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcImxpbmtlZFwiLFxuICAgICAgICAgICAgc291cmNlOiB7IHR5cGU6IFwibGlua1wiLCB2YWx1ZTogbGluayB9LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBcImluY29taW5nXCIsXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeUxpbmtlZDogKHEpID0+XG4gICAgICAgIGNyZWF0ZUZ1bmN0aW9uKFAucmVnZXhwKC9saW5rc3RvfGxpbmtlZGZyb218Y29ubmVjdGVkL2kpLmRlc2MoXCJjb25uZWN0ZWRcIiksIHEucXVlcnkpLm1hcCgoW2Z1bmMsIHNvdXJjZV0pID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBcImxpbmtlZFwiLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgZGlyZWN0aW9uOlxuICAgICAgICAgICAgICAgIGZ1bmMudG9Mb3dlckNhc2UoKSA9PSBcImxpbmtzdG9cIiA/IFwiaW5jb21pbmdcIiA6IGZ1bmMudG9Mb3dlckNhc2UoKSA9PSBcImxpbmtlZGZyb21cIiA/IFwib3V0Z29pbmdcIiA6IFwiYm90aFwiLFxuICAgICAgICB9KSksXG4gICAgcXVlcnlFeGlzdHM6IChfKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvZXhpc3RzL2kpLmRlc2MoXCJleGlzdHNcIiksIFBSSU1JVElWRVMuaWRlbnRpZmllci5vcihQUklNSVRJVkVTLnN0cmluZykpLm1hcChcbiAgICAgICAgICAgIChbX2Z1bmMsIGlkZW50XSkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZpZWxkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGlkZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICBxdWVyeVF1b3RlZEV4cHJlc3Npb246IChxKSA9PlxuICAgICAgICBjcmVhdGVGdW5jdGlvbihQLnJlZ2V4cCgvZXhwci9pKS5kZXNjKFwiZXhwclwiKSwgRVhQUkVTU0lPTi5leHByZXNzaW9uKS5tYXAoKFtfLCBleHByXSkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcixcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5UmF3RXhwcmVzc2lvbjogKHEpID0+IEVYUFJFU1NJT04uYmluYXJ5Q29tcGFyZS5tYXAoKGV4cHIpID0+ICh7IHR5cGU6IFwiZXhwcmVzc2lvblwiLCBleHByZXNzaW9uOiBleHByIH0pKSxcblxuICAgIHF1ZXJ5UGFyZW5zOiAocSkgPT4gcS5xdWVyeS50cmltKFAub3B0V2hpdGVzcGFjZSkud3JhcChQLnN0cmluZyhcIihcIiksIFAuc3RyaW5nKFwiKVwiKSksXG4gICAgcXVlcnlOZWdhdGU6IChxKSA9PlxuICAgICAgICBQLnN0cmluZyhcIiFcIilcbiAgICAgICAgICAgIC5za2lwKFAub3B0V2hpdGVzcGFjZSlcbiAgICAgICAgICAgIC50aGVuKHEucXVlcnlBdG9tKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJub3RcIixcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB2YWx1ZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICBxdWVyeUF0b206IChxKSA9PlxuICAgICAgICBQLmFsdDxJbmRleFF1ZXJ5PihcbiAgICAgICAgICAgIHEucXVlcnlQYXJlbnMsXG4gICAgICAgICAgICBxLnF1ZXJ5TmVnYXRlLFxuICAgICAgICAgICAgcS5xdWVyeVNpbXBsZUxpbmtlZCxcbiAgICAgICAgICAgIHEucXVlcnlUYWcsXG4gICAgICAgICAgICBxLnF1ZXJ5VHlwZSxcbiAgICAgICAgICAgIHEucXVlcnlJZCxcbiAgICAgICAgICAgIHEucXVlcnlFeGlzdHMsXG4gICAgICAgICAgICBxLnF1ZXJ5Q2hpbGRPZixcbiAgICAgICAgICAgIHEucXVlcnlQYXJlbnRPZixcbiAgICAgICAgICAgIHEucXVlcnlMaW5rZWQsXG4gICAgICAgICAgICBxLnF1ZXJ5UGF0aCxcbiAgICAgICAgICAgIHEucXVlcnlRdW90ZWRFeHByZXNzaW9uLFxuICAgICAgICAgICAgLy8gRXhwcmVzc2lvbnMgYXJlIGVzc2VudGlhbGx5IHRoZSBcImNhdGNoLWFsbFwiIG9mIG90aGVyd2lzZSB1bnBhcnNlYWJsZSB0ZXJtcywgc28gdGhleSBzaG91bGQgZ28gYWJzb2x1dGUgbGFzdC5cbiAgICAgICAgICAgIHEucXVlcnlSYXdFeHByZXNzaW9uXG4gICAgICAgICksXG4gICAgcXVlcnlBbmRzOiAocSkgPT5cbiAgICAgICAgY3JlYXRlQmluYXJ5UGFyc2VyKHEucXVlcnlBdG9tLCBQUklNSVRJVkVTLmJpbmFyeUFuZE9wLCAobGVmdCwgX29wLCByaWdodCkgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6IFwiYW5kXCIsXG4gICAgICAgICAgICBlbGVtZW50czogW2xlZnQsIHJpZ2h0XSxcbiAgICAgICAgfSkpLFxuICAgIHF1ZXJ5T3JzOiAocSkgPT5cbiAgICAgICAgY3JlYXRlQmluYXJ5UGFyc2VyKHEucXVlcnlBbmRzLCBQUklNSVRJVkVTLmJpbmFyeU9yT3AsIChsZWZ0LCBfb3AsIHJpZ2h0KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJvclwiLFxuICAgICAgICAgICAgZWxlbWVudHM6IFtsZWZ0LCByaWdodF0sXG4gICAgICAgIH0pKSxcbiAgICBxdWVyeTogKHEpID0+IHEucXVlcnlPcnMudHJpbShQLm9wdFdoaXRlc3BhY2UpLFxufSk7XG5cbi8qKiBSZXR1cm4gYSBuZXcgcGFyc2VyIHdoaWNoIGV4ZWN1dGVzIHRoZSB1bmRlcmx5aW5nIHBhcnNlciBhbmQgcmV0dXJucyBpdCdzIHJhdyBzdHJpbmcgcmVwcmVzZW50YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZVJhdzxUPihiYXNlOiBQLlBhcnNlcjxUPik6IFAuUGFyc2VyPFtULCBzdHJpbmddPiB7XG4gICAgcmV0dXJuIFAuY3VzdG9tKChfc3VjY2VzcywgX2ZhaWx1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IChiYXNlIGFzIGFueSkuXyhpbnB1dCwgaSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGF0dXMpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZXN1bHQsIHsgdmFsdWU6IFtyZXN1bHQudmFsdWUsIGlucHV0LnN1YnN0cmluZyhpLCByZXN1bHQuaW5kZXgpXSB9KTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuLyoqIENyZWF0ZSBhIGxlZnQtYXNzb2NpYXRpdmUgYmluYXJ5IHBhcnNlciB3aGljaCBwYXJzZXMgdGhlIGdpdmVuIHN1Yi1lbGVtZW50IGFuZCBzZXBhcmF0b3IuIEhhbmRsZXMgd2hpdGVzcGFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCaW5hcnlQYXJzZXI8VCwgVT4oXG4gICAgY2hpbGQ6IFAuUGFyc2VyPFQ+LFxuICAgIHNlcDogUC5QYXJzZXI8VT4sXG4gICAgY29tYmluZTogKGE6IFQsIGI6IFUsIGM6IFQpID0+IFRcbik6IFAuUGFyc2VyPFQ+IHtcbiAgICByZXR1cm4gUC5zZXFNYXAoY2hpbGQsIFAuc2VxKFAub3B0V2hpdGVzcGFjZSwgc2VwLCBQLm9wdFdoaXRlc3BhY2UsIGNoaWxkKS5tYW55KCksIChmaXJzdCwgcmVzdCkgPT4ge1xuICAgICAgICBpZiAocmVzdC5sZW5ndGggPT0gMCkgcmV0dXJuIGZpcnN0O1xuXG4gICAgICAgIGxldCBub2RlID0gY29tYmluZShmaXJzdCwgcmVzdFswXVsxXSwgcmVzdFswXVszXSk7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgbm9kZSA9IGNvbWJpbmUobm9kZSwgcmVzdFtpbmRleF1bMV0sIHJlc3RbaW5kZXhdWzNdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXJzZXIgd2hpY2ggcGFyc2VzIFxcPGZ1bmN0aW9uXFw+KFxcPGFyZ3NcXD4pLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbjxUPihmdW5jOiBzdHJpbmcgfCBQLlBhcnNlcjxzdHJpbmc+LCBhcmdzOiBQLlBhcnNlcjxUPik6IFAuUGFyc2VyPFtzdHJpbmcsIFRdPiB7XG4gICAgY29uc3QgcmVhbEZ1bmMgPSB0eXBlb2YgZnVuYyA9PT0gXCJzdHJpbmdcIiA/IFAuc3RyaW5nKGZ1bmMpIDogZnVuYztcbiAgICByZXR1cm4gUC5zZXFNYXAoXG4gICAgICAgIHJlYWxGdW5jLnNraXAoUC5vcHRXaGl0ZXNwYWNlKSxcbiAgICAgICAgYXJncy50cmltKFAub3B0V2hpdGVzcGFjZSkud3JhcChQLnN0cmluZyhcIihcIiksIFAuc3RyaW5nKFwiKVwiKSksXG4gICAgICAgIChmLCBhKSA9PiBbZiwgYV1cbiAgICApO1xufVxuXG4vKiogQ2hhaW5zIGEgbGlzdCBvZiBwYXJzZXJzOyB0aGUgZmlyc3Qgb25lIG11c3Qgc3VjY2VlZCwgYnV0IGZvbGxvd2luZyBvbmVzIG1heSBmYWlsIHdpdGhvdXQgZmFpbGluZyB0aGUgb3ZlcmFsbCBwYXJzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbk9wdDxUPihiYXNlOiBQLlBhcnNlcjxUPiwgLi4uZnVuY3M6ICgocjogVCkgPT4gUC5QYXJzZXI8VD4pW10pOiBQLlBhcnNlcjxUPiB7XG4gICAgcmV0dXJuIFAuY3VzdG9tKChfc3VjY2VzcywgX2ZhaWx1cmUpID0+IHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IChiYXNlIGFzIGFueSkuXyhpbnB1dCwgaSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGF0dXMpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IChmdW5jKHJlc3VsdC52YWx1ZSBhcyBUKSBhcyBhbnkpLl8oaW5wdXQsIHJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0LnN0YXR1cykgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGV4cHJlc3Npb25zXG4gKi9cbmltcG9ydCB7IERhdGVUaW1lLCBEdXJhdGlvbiB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IHJlbmRlck1pbmltYWxEYXRlLCByZW5kZXJNaW5pbWFsRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcblxuLy8gUmUtZXhwb3J0cyBvZiB1c2VmdWwgZ2VuZXJpYyB0eXBlcy5cbmV4cG9ydCB7IExpbmsgfTtcblxuLyoqIFNob3J0aGFuZCBmb3IgYSBtYXBwaW5nIGZyb20ga2V5cyB0byB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBEYXRhT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgYW55Pjtcbi8qKiBUaGUgbGl0ZXJhbCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIHF1ZXJ5IGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIExpdGVyYWxUeXBlID1cbiAgICB8IFwiYm9vbGVhblwiXG4gICAgfCBcIm51bWJlclwiXG4gICAgfCBcInN0cmluZ1wiXG4gICAgfCBcImRhdGVcIlxuICAgIHwgXCJkdXJhdGlvblwiXG4gICAgfCBcImxpbmtcIlxuICAgIHwgXCJhcnJheVwiXG4gICAgfCBcIm9iamVjdFwiXG4gICAgfCBcImZ1bmN0aW9uXCJcbiAgICB8IFwibnVsbFwiO1xuLyoqIFRoZSByYXcgdmFsdWVzIHRoYXQgYSBsaXRlcmFsIGNhbiB0YWtlIG9uLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbCA9XG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgRGF0ZVRpbWVcbiAgICB8IER1cmF0aW9uXG4gICAgfCBMaW5rXG4gICAgfCBBcnJheTxMaXRlcmFsPlxuICAgIHwgRGF0YU9iamVjdFxuICAgIHwgRnVuY3Rpb25cbiAgICB8IG51bGw7XG5cbi8qKiBNYXBzIHRoZSBzdHJpbmcgdHlwZSB0byBpdCdzIGV4dGVybmFsLCBBUEktZmFjaW5nIHJlcHJlc2VudGF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbFJlcHI8VCBleHRlbmRzIExpdGVyYWxUeXBlPiA9IFQgZXh0ZW5kcyBcImJvb2xlYW5cIlxuICAgID8gYm9vbGVhblxuICAgIDogVCBleHRlbmRzIFwibnVtYmVyXCJcbiAgICA/IG51bWJlclxuICAgIDogVCBleHRlbmRzIFwic3RyaW5nXCJcbiAgICA/IHN0cmluZ1xuICAgIDogVCBleHRlbmRzIFwiZHVyYXRpb25cIlxuICAgID8gRHVyYXRpb25cbiAgICA6IFQgZXh0ZW5kcyBcImRhdGVcIlxuICAgID8gRGF0ZVRpbWVcbiAgICA6IFQgZXh0ZW5kcyBcIm51bGxcIlxuICAgID8gbnVsbFxuICAgIDogVCBleHRlbmRzIFwibGlua1wiXG4gICAgPyBMaW5rXG4gICAgOiBUIGV4dGVuZHMgXCJhcnJheVwiXG4gICAgPyBBcnJheTxMaXRlcmFsPlxuICAgIDogVCBleHRlbmRzIFwib2JqZWN0XCJcbiAgICA/IERhdGFPYmplY3RcbiAgICA6IFQgZXh0ZW5kcyBcImZ1bmN0aW9uXCJcbiAgICA/IEZ1bmN0aW9uXG4gICAgOiBhbnk7XG5cbi8qKiBBIHdyYXBwZWQgbGl0ZXJhbCB2YWx1ZSB3aGljaCBjYW4gYmUgc3dpdGNoZWQgb24uICovXG5leHBvcnQgdHlwZSBXcmFwcGVkTGl0ZXJhbCA9XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcInN0cmluZ1wiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJudW1iZXJcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiYm9vbGVhblwiPlxuICAgIHwgTGl0ZXJhbFdyYXBwZXI8XCJkYXRlXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImR1cmF0aW9uXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImxpbmtcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwiYXJyYXlcIj5cbiAgICB8IExpdGVyYWxXcmFwcGVyPFwib2JqZWN0XCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcImZ1bmN0aW9uXCI+XG4gICAgfCBMaXRlcmFsV3JhcHBlcjxcIm51bGxcIj47XG5cbi8qKiBDb21iaW5lcyBhIHRleHR1YWwgdHlwZSBhbmQgdmFsdWU7IHByaW1hcmlseSB1c2VmdWwgZm9yIHN3aXRjaGluZyBvbi5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXRlcmFsV3JhcHBlcjxUIGV4dGVuZHMgTGl0ZXJhbFR5cGU+IHtcbiAgICB0eXBlOiBUO1xuICAgIHZhbHVlOiBMaXRlcmFsUmVwcjxUPjtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgVXRpbGl0eSBsaWJyYXJ5IGZvciBoYW5kbGluZyBsaXRlcmFsIHZhbHVlcy4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgTGl0ZXJhbHMge1xuICAgIC8qKiBTZXR0aW5ncyB1c2VkIHdoZW4gZm9ybWF0dGluZyBsaXRlcmFsIHZhbHVlcyB0byB0ZXh0LiAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgVG9TdHJpbmdTZXR0aW5ncyB7XG4gICAgICAgIC8qKiBXaGF0IGEgbnVsbCB3aWxsIHJlbmRlciBhcy4gKi9cbiAgICAgICAgbnVsbFJlcHJlc2VudGF0aW9uOiBzdHJpbmc7XG5cbiAgICAgICAgLyoqIERhdGUgZm9ybWF0LiAqL1xuICAgICAgICBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgICAgICAgLyoqIERhdGUtdGltZSBmb3JtYXQuICovXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqIFNhbmUsIEVuZ2xpc2gtYmFzZWQgZGVmYXVsdHMgZm9yIGRhdGUgZm9ybWF0cy4gKi9cbiAgICBleHBvcnQgY29uc3QgREVGQVVMVF9UT19TVFJJTkc6IFRvU3RyaW5nU2V0dGluZ3MgPSB7XG4gICAgICAgIG51bGxSZXByZXNlbnRhdGlvbjogXCItXCIsXG5cbiAgICAgICAgZGF0ZUZvcm1hdDogXCJNTU1NIGRkLCB5eXl5XCIsXG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcIixcbiAgICB9O1xuXG4gICAgLyoqIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlIGludG8gYSByZWFzb25hYmxlLCBNYXJrZG93bi1mcmllbmRseSBzdHJpbmcgaWYgcG9zc2libGUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKFxuICAgICAgICBmaWVsZDogYW55LFxuICAgICAgICBzZXR0aW5nOiBUb1N0cmluZ1NldHRpbmdzID0gREVGQVVMVF9UT19TVFJJTkcsXG4gICAgICAgIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwVmFsdWUoZmllbGQpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBzZXR0aW5nLm51bGxSZXByZXNlbnRhdGlvbjtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZy5udWxsUmVwcmVzZW50YXRpb247XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIjxmdW5jdGlvbj5cIjtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpIHJlc3VsdCArPSBcIltcIjtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd3JhcHBlZC52YWx1ZS5tYXAoKGYpID0+IHRvU3RyaW5nKGYsIHNldHRpbmcsIHRydWUpKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgcmVzdWx0ICs9IFwiXVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgXCJ7IFwiICtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMod3JhcHBlZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGUpID0+IGVbMF0gKyBcIjogXCIgKyB0b1N0cmluZyhlWzFdLCBzZXR0aW5nLCB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIiB9XCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyTWluaW1hbERhdGUod3JhcHBlZC52YWx1ZSwgc2V0dGluZy5kYXRlRm9ybWF0LCBzZXR0aW5nLmRhdGVUaW1lRm9ybWF0KTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNaW5pbWFsRHVyYXRpb24od3JhcHBlZC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogV3JhcCBhIGxpdGVyYWwgdmFsdWUgc28geW91IGNhbiBzd2l0Y2ggb24gaXQgZWFzaWx5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB3cmFwVmFsdWUodmFsOiBMaXRlcmFsKTogV3JhcHBlZExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNOdWxsKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibnVsbFwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbCkpIHJldHVybiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJzdHJpbmdcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW4odmFsKSkgcmV0dXJuIHsgdHlwZTogXCJib29sZWFuXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNEdXJhdGlvbih2YWwpKSByZXR1cm4geyB0eXBlOiBcImR1cmF0aW9uXCIsIHZhbHVlOiB2YWwgfTtcbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZGF0ZVwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsKSkgcmV0dXJuIHsgdHlwZTogXCJhcnJheVwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgaWYgKGlzTGluayh2YWwpKSByZXR1cm4geyB0eXBlOiBcImxpbmtcIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpIHJldHVybiB7IHR5cGU6IFwiZnVuY3Rpb25cIiwgdmFsdWU6IHZhbCB9O1xuICAgICAgICBlbHNlIGlmIChpc09iamVjdCh2YWwpKSByZXR1cm4geyB0eXBlOiBcIm9iamVjdFwiLCB2YWx1ZTogdmFsIH07XG4gICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogUmVjdXJzaXZlbHkgbWFwIGNvbXBsZXggb2JqZWN0cyBhdCB0aGUgbGVhdmVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtYXBMZWF2ZXModmFsOiBMaXRlcmFsLCBmdW5jOiAodDogTGl0ZXJhbCkgPT4gTGl0ZXJhbCk6IExpdGVyYWwge1xuICAgICAgICBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDogRGF0YU9iamVjdCA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbCkpIHJlc3VsdFtrZXldID0gbWFwTGVhdmVzKHZhbHVlLCBmdW5jKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBMaXRlcmFsW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbCkgcmVzdWx0LnB1c2gobWFwTGVhdmVzKHZhbHVlLCBmdW5jKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiB0d28gYXJiaXRyYXJ5IGxpdGVyYWxzIGFyZSBlcXVhbC4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZXF1YWxzKGZpcnN0OiBMaXRlcmFsIHwgdW5kZWZpbmVkLCBzZWNvbmQ6IExpdGVyYWwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmUoZmlyc3QsIHNlY29uZCkgPT0gMDtcbiAgICB9XG5cbiAgICAvKiogQ29tcGFyZSB0d28gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdmFsdWVzLiBQcm9kdWNlcyBhIHRvdGFsIG9yZGVyaW5nIG92ZXIgQU5ZIHBvc3NpYmxlIGRhdGFjb3JlIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKFxuICAgICAgICB2YWwxOiBMaXRlcmFsIHwgdW5kZWZpbmVkLFxuICAgICAgICB2YWwyOiBMaXRlcmFsIHwgdW5kZWZpbmVkLFxuICAgICAgICBsaW5rTm9ybWFsaXplcj86IChsaW5rOiBzdHJpbmcpID0+IHN0cmluZ1xuICAgICk6IG51bWJlciB7XG4gICAgICAgIC8vIFJlZmVyZW5jZSBlcXVhbGl0eSAtIHNob3J0IGNpcmN1aXQuXG4gICAgICAgIGlmICh2YWwxID09PSB2YWwyKSByZXR1cm4gMDtcblxuICAgICAgICAvLyBIYW5kbGUgdW5kZWZpbmVkL251bGxzIGZpcnN0LlxuICAgICAgICBpZiAodmFsMSA9PT0gdW5kZWZpbmVkKSB2YWwxID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbDIgPT09IHVuZGVmaW5lZCkgdmFsMiA9IG51bGw7XG4gICAgICAgIGlmICh2YWwxID09PSBudWxsICYmIHZhbDIgPT09IG51bGwpIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmICh2YWwxID09PSBudWxsKSByZXR1cm4gLTE7XG4gICAgICAgIGVsc2UgaWYgKHZhbDIgPT09IG51bGwpIHJldHVybiAxO1xuXG4gICAgICAgIC8vIEEgbm9uLW51bGwgdmFsdWUgbm93IHdoaWNoIHdlIGNhbiB3cmFwICYgY29tcGFyZSBvbi5cbiAgICAgICAgbGV0IHdyYXAxID0gd3JhcFZhbHVlKHZhbDEpO1xuICAgICAgICBsZXQgd3JhcDIgPSB3cmFwVmFsdWUodmFsMik7XG5cbiAgICAgICAgaWYgKHdyYXAxID09PSB1bmRlZmluZWQgJiYgd3JhcDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgaWYgKHdyYXAxID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICAgICAgZWxzZSBpZiAod3JhcDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG5cbiAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCBvbiBkaWZmZXJlbnQgdHlwZXMgb3Igb24gcmVmZXJlbmNlIGVxdWFsaXR5LlxuICAgICAgICBpZiAod3JhcDEudHlwZSAhPSB3cmFwMi50eXBlKSByZXR1cm4gd3JhcDEudHlwZS5sb2NhbGVDb21wYXJlKHdyYXAyLnR5cGUpO1xuICAgICAgICBpZiAod3JhcDEudmFsdWUgPT09IHdyYXAyLnZhbHVlKSByZXR1cm4gMDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXAxLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUubG9jYWxlQ29tcGFyZSh3cmFwMi52YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGlmICh3cmFwMS52YWx1ZSA8ICh3cmFwMi52YWx1ZSBhcyBudW1iZXIpKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAod3JhcDEudmFsdWUgPT0gKHdyYXAyLnZhbHVlIGFzIG51bWJlcikpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgaWYgKHdyYXAxLnZhbHVlID09IHdyYXAyLnZhbHVlKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB3cmFwMS52YWx1ZSA/IDEgOiAtMTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgbGV0IGxpbmsxID0gd3JhcDEudmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmsyID0gd3JhcDIudmFsdWUgYXMgTGluaztcbiAgICAgICAgICAgICAgICBsZXQgbm9ybWFsaXplID0gbGlua05vcm1hbGl6ZXIgPz8gKCh4OiBzdHJpbmcpID0+IHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgY29tcGFyZSBieSBmaWxlIG5hbWUgb3IgZGlzcGxheSwgc2luY2UgdGhhdCB3b3VsZCBicmVhayBsaW5rIGVxdWFsaXR5LiBDb21wYXJlIGJ5IHBhdGguXG4gICAgICAgICAgICAgICAgbGV0IHBhdGhDb21wYXJlID0gbm9ybWFsaXplKGxpbmsxLnBhdGgpLmxvY2FsZUNvbXBhcmUobm9ybWFsaXplKGxpbmsyLnBhdGgpKTtcbiAgICAgICAgICAgICAgICBpZiAocGF0aENvbXBhcmUgIT0gMCkgcmV0dXJuIHBhdGhDb21wYXJlO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlbiBjb21wYXJlIGJ5IHR5cGUuXG4gICAgICAgICAgICAgICAgbGV0IHR5cGVDb21wYXJlID0gbGluazEudHlwZS5sb2NhbGVDb21wYXJlKGxpbmsyLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZSAhPSAwKSByZXR1cm4gdHlwZUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbXBhcmUgYnkgc3VicGF0aCBleGlzdGVuY2UuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmsxLnN1YnBhdGggJiYgIWxpbmsyLnN1YnBhdGgpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIGlmICghbGluazEuc3VicGF0aCAmJiBsaW5rMi5zdWJwYXRoKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5rMS5zdWJwYXRoICYmICFsaW5rMi5zdWJwYXRoKSByZXR1cm4gMDtcblxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIGJvdGggaGF2ZSBhIHN1YnBhdGgsIGNvbXBhcmUgYnkgc3VicGF0aC5cbiAgICAgICAgICAgICAgICByZXR1cm4gKGxpbmsxLnN1YnBhdGggPz8gXCJcIikubG9jYWxlQ29tcGFyZShsaW5rMi5zdWJwYXRoID8/IFwiXCIpO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCAod3JhcDIudmFsdWUgYXMgRGF0ZVRpbWUpXG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUgYXMgRGF0ZVRpbWUpXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCAod3JhcDIudmFsdWUgYXMgRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUgYXMgRHVyYXRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICBsZXQgZjEgPSB3cmFwMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgZjIgPSB3cmFwMi52YWx1ZSBhcyBhbnlbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5taW4oZjEubGVuZ3RoLCBmMi5sZW5ndGgpOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wID0gY29tcGFyZShmMVtpbmRleF0sIGYyW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wICE9IDApIHJldHVybiBjb21wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZjEubGVuZ3RoIC0gZjIubGVuZ3RoO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIGxldCBvMSA9IHdyYXAxLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBvMiA9IHdyYXAyLnZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICAgICAgICAgICAgbGV0IGsxID0gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvMSkpO1xuICAgICAgICAgICAgICAgIGxldCBrMiA9IEFycmF5LmZyb20oT2JqZWN0LmtleXMobzIpKTtcbiAgICAgICAgICAgICAgICBrMS5zb3J0KCk7XG4gICAgICAgICAgICAgICAgazIuc29ydCgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGtleUNvbXBhcmUgPSBjb21wYXJlKGsxLCBrMik7XG4gICAgICAgICAgICAgICAgaWYgKGtleUNvbXBhcmUgIT0gMCkgcmV0dXJuIGtleUNvbXBhcmU7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgazEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlKG8xW2tleV0sIG8yW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAhPSAwKSByZXR1cm4gY29tcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YWNvcmUgdHlwZSBmb3IgYW4gYXJiaXRyYXJ5IHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB0eXBlT2YodmFsOiBhbnkpOiBMaXRlcmFsVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB3cmFwVmFsdWUodmFsKT8udHlwZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBcInRydXRoeVwiIChpLmUuLCBpcyBub24tbnVsbCBhbmQgaGFzIGRhdGEgaW4gaXQpLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShmaWVsZDogTGl0ZXJhbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhd3JhcHBlZC52YWx1ZS5wYXRoO1xuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b01pbGxpcygpICE9IDA7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5hcyhcInNlY29uZHNcIikgIT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod3JhcHBlZC52YWx1ZSkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERlZXAgY29weSBhIGZpZWxkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUIGV4dGVuZHMgTGl0ZXJhbD4oZmllbGQ6IFQpOiBUIHtcbiAgICAgICAgaWYgKGZpZWxkID09PSBudWxsIHx8IGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBmaWVsZDtcblxuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNBcnJheShmaWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAoW10gYXMgTGl0ZXJhbFtdKS5jb25jYXQoZmllbGQubWFwKCh2KSA9PiBkZWVwQ29weSh2KSkpIGFzIFQ7XG4gICAgICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNPYmplY3QoZmllbGQpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkKSkgcmVzdWx0W2tleV0gPSBkZWVwQ29weSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsOiBhbnkpOiB2YWwgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlci4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsOiBhbnkpOiB2YWwgaXMgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIjtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGRhdGUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWw6IGFueSk6IHZhbCBpcyBEYXRlVGltZSB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEYXRlVGltZTtcbiAgICB9XG5cbiAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpcyBhIGR1cmF0aW9uLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0R1cmF0aW9uKHZhbDogYW55KTogdmFsIGlzIER1cmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc051bGwodmFsOiBhbnkpOiB2YWwgaXMgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYW4gYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodmFsOiBhbnkpOiB2YWwgaXMgYW55W10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbDogYW55KTogdmFsIGlzIGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJib29sZWFuXCI7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGUgdmFsdWUgaXMgYSBsaW5rLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0xpbmsodmFsOiBhbnkpOiB2YWwgaXMgTGluayB7XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBMaW5rO1xuICAgIH1cblxuICAgIC8qKiBDaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIG9iamVjdCAoYW5kIG5vdCBhbnkgb3RoZXIgZGF0YWNvcmUtcmVjb2duaXplZCBvYmplY3QtbGlrZSB0eXBlKS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsOiBhbnkpOiB2YWwgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbCA9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhaXNBcnJheSh2YWwpICYmXG4gICAgICAgICAgICAhaXNEdXJhdGlvbih2YWwpICYmXG4gICAgICAgICAgICAhaXNEYXRlKHZhbCkgJiZcbiAgICAgICAgICAgICFpc0xpbmsodmFsKSAmJlxuICAgICAgICAgICAgIWlzTnVsbCh2YWwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgamF2YXNjcmlwdCBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWw6IGFueSk6IHZhbCBpcyBGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09IFwiZnVuY3Rpb25cIjtcbiAgICB9XG59XG5cbi8qKiBBIGdyb3VwaW5nIG9uIGEgdHlwZSB3aGljaCBzdXBwb3J0cyByZWN1cnNpdmVseS1uZXN0ZWQgZ3JvdXBzLlxuICogQGdyb3VwIENvbW1vbiBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBHcm91cEVsZW1lbnQ8VD4gPSB7IGtleTogTGl0ZXJhbDsgcm93czogR3JvdXBpbmc8VD4gfTtcbi8qKlxuICogQSBncm91cGluZywgd2hpY2ggY2FuIGJlIGVpdGhlcjpcbiAqIC0gYW4gYXJyYXkgb2YgZWxlbWVudHMgb2YgdHlwZSBgVGAsIG9yXG4gKiAtIGFuIGFycmF5IG9mIHtAbGluayBHcm91cGVsZW1lbnR9c1xuICpcbiAqIEBncm91cCBDb21tb24gVHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgR3JvdXBpbmc8VD4gPSBUW10gfCBHcm91cEVsZW1lbnQ8VD5bXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgbmFtZXNwYWNlIEdyb3VwaW5ncyB7XG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGdyb3VwIGVudHJ5IGlzIGEgc3RhbmRhbG9uZSB2YWx1ZSwgb3IgYSBncm91cGluZyBvZiBzdWItZW50cmllcy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50R3JvdXA8VD4oZW50cnk6IGFueSk6IGVudHJ5IGlzIEdyb3VwRWxlbWVudDxUPiB7XG4gICAgICAgIHJldHVybiBMaXRlcmFscy5pc09iamVjdChlbnRyeSkgJiYgT2JqZWN0LmtleXMoZW50cnkpLmxlbmd0aCA9PSAyICYmIFwia2V5XCIgaW4gZW50cnkgJiYgXCJyb3dzXCIgaW4gZW50cnk7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgZ3JvdXBpbmcgYXJyYXkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzR3JvdXBpbmc8VD4oZW50cnk6IEdyb3VwaW5nPFQ+KTogZW50cnkgaXMgR3JvdXBFbGVtZW50PFQ+W10ge1xuICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVudHJ5KSBpZiAoIWlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgbGVhZiBhbmQgaGFzIG5vIHN1Ymdyb3VwaW5ncy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNMZWFmPFQ+KGVudHJ5OiBHcm91cGluZzxUPik6IGVudHJ5IGlzIFRbXSB7XG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZW50cnkpIGlmIChpc0VsZW1lbnRHcm91cChlbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBDb3VudCB0aGUgdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgcmVjdXJzaXZlIGdyb3VwaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihlbGVtZW50czogR3JvdXBpbmc8VD4gfCBHcm91cEVsZW1lbnQ8VD4pOiBudW1iZXIge1xuICAgICAgICBpZiAoaXNFbGVtZW50R3JvdXAoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291bnQoZWxlbWVudHMucm93cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNHcm91cGluZyhlbGVtZW50cykpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgc3ViZ3JvdXAgb2YgZWxlbWVudHMpIHJlc3VsdCArPSBjb3VudChzdWJncm91cC5yb3dzKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlY3Vyc2l2ZWx5IHNsaWNlIGEgZ3JvdXBpbmcsIHByZXNlcnZpbmcgdGhlIGdyb3VwIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGVsZW1lbnRzIFtzdGFydC4uLmVuZCkuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNsaWNlPFQ+KGVsZW1lbnRzOiBHcm91cGluZzxUPiwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBHcm91cGluZzxUPiB7XG4gICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKGlzTGVhZihlbGVtZW50cykpIHJldHVybiBlbGVtZW50cy5zbGljZShzdGFydCwgZW5kKTtcblxuICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBncm91cCB0aGF0IGNvbnRhaW5zIGluZGV4IGBzdGFydGAuXG4gICAgICAgIGxldCBpbmRleCA9IDAsXG4gICAgICAgICAgICBzZWVuID0gMDtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgZWxlbWVudHMubGVuZ3RoICYmIHNlZW4gKyBjb3VudChlbGVtZW50c1tpbmRleF0pIDw9IHN0YXJ0KSB7XG4gICAgICAgICAgICBzZWVuICs9IGNvdW50KGVsZW1lbnRzW2luZGV4XSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RhcnQgd2FzIGdyZWF0ZXIgdGhhbiB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUgZ3JvdXBpbmdzLlxuICAgICAgICBpZiAoaW5kZXggPj0gZWxlbWVudHMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IGtleTogTGl0ZXJhbDsgcm93czogR3JvdXBpbmc8VD4gfVtdID0gW107XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGVsZW1lbnRzLmxlbmd0aCAmJiBzZWVuIDwgZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU2l6ZSA9IGNvdW50KGdyb3VwKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhcnQgPSBNYXRoLm1heChzZWVuLCBzdGFydCk7XG4gICAgICAgICAgICBjb25zdCBncm91cEVuZCA9IE1hdGgubWluKGdyb3VwU2l6ZSArIHNlZW4sIGVuZCk7XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IGdyb3VwLmtleSxcbiAgICAgICAgICAgICAgICByb3dzOiBzbGljZShncm91cC5yb3dzLCBncm91cFN0YXJ0IC0gc2VlbiwgZ3JvdXBFbmQgLSBzZWVuKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWVuICs9IGdyb3VwU2l6ZTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgYXBpXG4gKi9cbi8qKlxuICogIEZ1bmN0aW9uYWwgcmV0dXJuIHR5cGUgZm9yIGVycm9yIGhhbmRsaW5nLlxuICogQGhpZGRlblxuICogKi9cbmV4cG9ydCBjbGFzcyBTdWNjZXNzPFQsIEU+IHtcbiAgICBwdWJsaWMgc3VjY2Vzc2Z1bDogdHJ1ZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwPFU+KGY6IChhOiBUKSA9PiBVKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKGYodGhpcy52YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0TWFwPFU+KGY6IChhOiBUKSA9PiBSZXN1bHQ8VSwgRT4pOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwRXJyPFU+KGY6IChlOiBFKSA9PiBVKTogUmVzdWx0PFQsIFU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55IGFzIFJlc3VsdDxULCBVPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmltYXA8VDIsIEUyPihzdWNjOiAoYTogVCkgPT4gVDIsIF9mYWlsOiAoYjogRSkgPT4gRTIpOiBSZXN1bHQ8VDIsIEUyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcChzdWNjKSBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZShfdmFsdWU6IFQpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNhc3Q8VT4oKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICAgIH1cblxuICAgIHB1YmxpYyBvckVsc2VUaHJvdyhfbWVzc2FnZT86IChlOiBFKSA9PiBzdHJpbmcpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuXG4vKiogRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWlsdXJlPFQsIEU+IHtcbiAgICBwdWJsaWMgc3VjY2Vzc2Z1bDogZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGVycm9yOiBFKSB7XG4gICAgICAgIHRoaXMuc3VjY2Vzc2Z1bCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXA8VT4oX2Y6IChhOiBUKSA9PiBVKTogUmVzdWx0PFUsIEU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgYXMgYW55IGFzIEZhaWx1cmU8VSwgRT47XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXRNYXA8VT4oX2Y6IChhOiBUKSA9PiBSZXN1bHQ8VSwgRT4pOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnkgYXMgRmFpbHVyZTxVLCBFPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwRXJyPFU+KGY6IChlOiBFKSA9PiBVKTogUmVzdWx0PFQsIFU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGYodGhpcy5lcnJvcikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBiaW1hcDxUMiwgRTI+KF9zdWNjOiAoYTogVCkgPT4gVDIsIGZhaWw6IChiOiBFKSA9PiBFMik6IFJlc3VsdDxUMiwgRTI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRXJyKGZhaWwpIGFzIGFueTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3JFbHNlKHZhbHVlOiBUKTogVCB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FzdDxVPigpOiBSZXN1bHQ8VSwgRT4ge1xuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yRWxzZVRocm93KG1lc3NhZ2U/OiAoZTogRSkgPT4gc3RyaW5nKTogVCB7XG4gICAgICAgIGlmIChtZXNzYWdlKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSh0aGlzLmVycm9yKSk7XG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiXCIgKyB0aGlzLmVycm9yKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBtb25hZGljIHJlc3VsdCB0eXBlIHdoaWNoIHN0b3JlcyBlaXRoZXIgXCJzdWNjZXNzXCIgb3IgXCJmYWlsdXJlXCIuIEFuIGFsdGVybmF0aXZlIGhhbmRsaW5nIGV4Y2VwdGlvbmFsIGJlaGF2aW9yXG4gKiBieSB1c2luZyB0aGUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgYW4gZXhjZXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRT4gPSBTdWNjZXNzPFQsIEU+IHwgRmFpbHVyZTxULCBFPjtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBNb25hZGljICdSZXN1bHQnIHR5cGUgd2hpY2ggZW5jYXBzdWxhdGVzIHdoZXRoZXIgYSBwcm9jZWR1cmUgc3VjY2VlZGVkIG9yIGZhaWxlZCwgYXMgd2VsbCBhcyBpdCdzIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBSZXN1bHQge1xuICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgc3VjY2VzcyByZXN1bHQgd3JhcHBpbmcgdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzPFQsIEU+KHZhbHVlOiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGZhaWx1cmUgdmFsdWUgd3JhcHBpbmcgdGhlIGdpdmVuIGVycm9yLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBmYWlsdXJlPFQsIEU+KGVycm9yOiBFKTogUmVzdWx0PFQsIEU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGVycm9yKTtcbiAgICB9XG5cbiAgICAvKiogSm9pbiB0d28gcmVzdWx0cyB3aXRoIGEgYmktZnVuY3Rpb24gYW5kIHJldHVybiBhIG5ldyByZXN1bHQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZsYXRNYXAyPFQxLCBUMiwgTywgRT4oXG4gICAgICAgIGZpcnN0OiBSZXN1bHQ8VDEsIEU+LFxuICAgICAgICBzZWNvbmQ6IFJlc3VsdDxUMiwgRT4sXG4gICAgICAgIGY6IChhOiBUMSwgYjogVDIpID0+IFJlc3VsdDxPLCBFPlxuICAgICk6IFJlc3VsdDxPLCBFPiB7XG4gICAgICAgIGlmIChmaXJzdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBpZiAoc2Vjb25kLnN1Y2Nlc3NmdWwpIHJldHVybiBmKGZpcnN0LnZhbHVlLCBzZWNvbmQudmFsdWUpO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFpbHVyZShzZWNvbmQuZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoZmlyc3QuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEpvaW4gdHdvIHJlc3VsdHMgd2l0aCBhIGJpLWZ1bmN0aW9uIGFuZCByZXR1cm4gYSBuZXcgcmVzdWx0LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBtYXAyPFQxLCBUMiwgTywgRT4oXG4gICAgICAgIGZpcnN0OiBSZXN1bHQ8VDEsIEU+LFxuICAgICAgICBzZWNvbmQ6IFJlc3VsdDxUMiwgRT4sXG4gICAgICAgIGY6IChhOiBUMSwgYjogVDIpID0+IE9cbiAgICApOiBSZXN1bHQ8TywgRT4ge1xuICAgICAgICByZXR1cm4gZmxhdE1hcDIoZmlyc3QsIHNlY29uZCwgKGEsIGIpID0+IHN1Y2Nlc3MoZihhLCBiKSkpO1xuICAgIH1cblxuICAgIC8qKiBNYXAgYSBmYWlsYWJsZSBmdW5jdGlvbiBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCwgcmV0dXJuaW5nIGVhcmx5IG9uIGZhaWx1cmUuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1hcEFsbDxULCBPLCBFPihpbnB1dDogSXRlcmFibGU8VD4sIGZ1bmM6IChpbnB1dDogVCkgPT4gUmVzdWx0PE8sIEU+KTogUmVzdWx0PE9bXSwgRT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IE9bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGZ1bmMoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIW91dHB1dC5zdWNjZXNzZnVsKSByZXR1cm4gb3V0cHV0LmNhc3QoKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2gob3V0cHV0LnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKiBDYXRjaCBhbnkgZXJyb3JzIGluIGEgY2FsbCwgcmV0dXJuaW5nIGEgcmVzdWx0IGluc3RlYWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHRyeWluZzxUPihjYWxsOiAoKSA9PiBUKTogUmVzdWx0PFQsIEVycm9yPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoY2FsbCgpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29udmVydCBhIHByb21pc2Ugd2hpY2ggbWF5IHRocm93IGludG8gYSBwcm9taXNlIHdoaWNoIHJldHVybnMgYSByZXN1bHQgb2YgdGhlIHN1Y2Nlc3NmdWwgdmFsdWUgb3IgYW4gZXJyb3IuICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jPFQ+KHByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFJlc3VsdDxULCBFcnJvcj4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2Vzcyhhd2FpdCBwcm9taXNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcblxuLyoqIFN0YXRpYyBzZXQgZWxlbWVudCB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovXG5leHBvcnQgdHlwZSBFdmVyeXRoaW5nID0geyB0eXBlOiBcImV2ZXJ5dGhpbmdcIiB9O1xuLyoqIFN0YXRpYyBzZXQgZWxlbWVudCB3aGljaCBtYXRjaGVzIG5vdGhpbmcuICovXG5leHBvcnQgdHlwZSBOb3RoaW5nID0geyB0eXBlOiBcIm5vdGhpbmdcIiB9O1xuLyoqIFNldCB3aGljaCBtYXRjaGVzIHRoZSBuZWdhdGlvbiBvZiBhIHNldC4gKi9cbmV4cG9ydCB0eXBlIE5lZ2F0ZWQ8VD4gPSB7IHR5cGU6IFwibmVnYXRlZFwiOyB2YWx1ZTogU2V0PFQ+IH07XG4vKiogU2V0IHdoaWNoIG1hdGNoZXMgYW4gYWN0dWFsIHNldCBvZiB2YWx1ZXMuICAqL1xuZXhwb3J0IHR5cGUgQXRvbTxUPiA9IHsgdHlwZTogXCJhdG9tXCI7IHZhbHVlOiBTZXQ8VD4gfTtcblxuLyoqIEFic3RyYWN0IGZpbHRlciB0eXBlIHdoaWNoIHJlcHJlc2VudHMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgZmlsdGVyIG9wZXJhdGlvbnMgdG8gdGhlIGRhdGEgc3RvcmUuICovXG5leHBvcnQgdHlwZSBGaWx0ZXI8VD4gPSBFdmVyeXRoaW5nIHwgTm90aGluZyB8IEF0b208VD4gfCBOZWdhdGVkPFQ+O1xuXG4vKiogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVmZmljaWVudGx5IG9wZXJhdGluZyBvbiBmaWx0ZXJzLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBGaWx0ZXJzIHtcbiAgICAvKiogU3RhdGljIGZpbHRlciB3aGljaCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovXG4gICAgZXhwb3J0IGNvbnN0IEVWRVJZVEhJTkc6IEV2ZXJ5dGhpbmcgPSB7IHR5cGU6IFwiZXZlcnl0aGluZ1wiIH07XG4gICAgLyoqIFN0YXRpYyBmaWx0ZXIgd2hpY2ggbWF0Y2hlcyBub3RoaW5nLiAqL1xuICAgIGV4cG9ydCBjb25zdCBOT1RISU5HOiBOb3RoaW5nID0geyB0eXBlOiBcIm5vdGhpbmdcIiB9O1xuICAgIC8qKiBFbXB0eSBzZXQgY29uc3RhbnQuICovXG4gICAgZXhwb3J0IGNvbnN0IEVNUFRZX1NFVDogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG5cbiAgICAvKiogQ29uc3RydWN0IGEgbmV3IGF0b20gZmlsdGVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBhdG9tPFQ+KHNldDogU2V0PFQ+KTogRmlsdGVyPFQ+IHtcbiAgICAgICAgaWYgKHNldC5zaXplID09IDApIHJldHVybiBOT1RISU5HO1xuXG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiYXRvbVwiLCB2YWx1ZTogc2V0IH07XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIGZpbHRlciB0aGF0IG1hdGNoZXMgZXZlcnl0aGluZyBvciBub3RoaW5nLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBjb25zdGFudDxUPih2YWx1ZTogYm9vbGVhbik6IEZpbHRlcjxUPiB7XG4gICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuIEVWRVJZVEhJTkc7XG4gICAgICAgIGVsc2UgcmV0dXJuIE5PVEhJTkc7XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIG5ldyBhdG9tIGZpbHRlciB3aGljaCBpcyBOT1RISU5HIGlmIHNldCBpcyB1bmRlZmluZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG51bGxhYmxlQXRvbTxUPihzZXQ6IFNldDxUPiB8IHVuZGVmaW5lZCk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBzZXQgIT09IHVuZGVmaW5lZCA/IGF0b20oc2V0KSA6IE5PVEhJTkc7XG4gICAgfVxuXG4gICAgLyoqIENvbnN0cnVjdCBhIG5lZ2F0ZWQgYXRvbSBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWQ8VD4oc2V0OiBTZXQ8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBpZiAoc2V0LnNpemUgPT0gMCkgcmV0dXJuIEVWRVJZVEhJTkc7XG5cbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJuZWdhdGVkXCIsIHZhbHVlOiBzZXQgfTtcbiAgICB9XG5cbiAgICAvKiogUHJvZHVjZXMgdGhlIG5lZ2F0aW9uIG9mIGEgZmlsdGVyLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBuZWdhdGU8VD4oZmlsdGVyOiBGaWx0ZXI8VD4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBOT1RISU5HO1xuICAgICAgICAgICAgY2FzZSBcIm5vdGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRVZFUllUSElORztcbiAgICAgICAgICAgIGNhc2UgXCJhdG9tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lZ2F0ZWQoZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0b20oZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIGZpbHRlciBpcyBkZWZpbml0aXZlbHkgY3VycmVudGx5IGVtcHR5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBlbXB0eTxUPihmaWx0ZXI6IEZpbHRlcjxUPik6IGJvb2xlYW4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXZlcnl0aGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSBcImF0b21cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlLnNpemUgPT0gMDtcbiAgICAgICAgICAgIGNhc2UgXCJub3RoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVzb2x2ZSBhIHRvcC1sZXZlbCBmaWx0ZXIgd2l0aCB0aGUgc2V0IG9mIGFsbCBhdmFpbGFibGUgb2JqZWN0cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZTxUPihmaWx0ZXI6IEZpbHRlcjxUPiwgZXZlcnl0aGluZzogU2V0PFQ+KTogU2V0PFQ+IHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImV2ZXJ5dGhpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlcnl0aGluZztcbiAgICAgICAgICAgIGNhc2UgXCJub3RoaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NFVDtcbiAgICAgICAgICAgIGNhc2UgXCJhdG9tXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldEludGVyc2VjdE5lZ2F0aW9uKGV2ZXJ5dGhpbmcsIGZpbHRlci52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGFuIGl0ZXJhYmxlIG9mIGZpbHRlcnMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdDxUPihlbGVtZW50czogSXRlcmFibGU8RmlsdGVyPFQ+Pik6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5SW50ZXJzZWN0KGVsZW1lbnRzLCAoeCkgPT4geCk7XG4gICAgfVxuXG4gICAgLyoqIEludGVyc2VjdCBmaWx0ZXJzIGxhemlseSwgc2hvcnQtY2lyY3VpdGluZyBpZiB0aGUgaW50ZXJzZWN0aW9uIHdvdWxkIHByb2R1Y2UgTk9USElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eUludGVyc2VjdDxJLCBUPihcbiAgICAgICAgZWxlbWVudHM6IEl0ZXJhYmxlPEk+LFxuICAgICAgICBwcm9kdWNlOiAoaW5wdXQ6IEkpID0+IEZpbHRlcjxUPiB8IHVuZGVmaW5lZFxuICAgICk6IEZpbHRlcjxUPiB7XG4gICAgICAgIHJldHVybiBsYXp5RmFpbGFibGVJbnRlcnNlY3Rpb24oZWxlbWVudHMsICh4KSA9PiBSZXN1bHQuc3VjY2Vzcyhwcm9kdWNlKHgpKSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJzZWN0IGZpbHRlcnMgbGF6aWx5LCBzaG9ydC1jaXJjdWl0aW5nIGlmIHRoZSBpbnRlcnNlY3Rpb24gd291bGQgcHJvZHVjZSBOT1RISU5HLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBsYXp5RmFpbGFibGVJbnRlcnNlY3Rpb248SSwgVCwgRT4oXG4gICAgICAgIGVsZW1lbnRzOiBJdGVyYWJsZTxJPixcbiAgICAgICAgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBSZXN1bHQ8RmlsdGVyPFQ+IHwgdW5kZWZpbmVkLCBFPlxuICAgICk6IFJlc3VsdDxGaWx0ZXI8VD4sIEU+IHtcbiAgICAgICAgY29uc3QgYXRvbXM6IFNldDxUPltdID0gW107XG4gICAgICAgIGNvbnN0IG5lZ2F0aW9uczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVGaWx0ZXIgPSBwcm9kdWNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXliZUZpbHRlci5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVGaWx0ZXIuY2FzdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBtYXliZUZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEVtcHR5IGZpbHRlcnMgd2lsbCBwcm9kdWNlIGFuIGVtcHR5IGludGVyc2VjdGlvbi5cbiAgICAgICAgICAgIGlmIChlbXB0eShmaWx0ZXIpKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoTk9USElORyk7XG4gICAgICAgICAgICAvLyBFVkVSWVRISU5HIGZpbHRlcnMgYXJlIHJlZHVuZGFudCBpbiBBTkRzLCBza2lwIHRoZW0uXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gV2lsbCBvbmx5IGJlIGxlZnQgd2l0aCBhdG9tcyBvciBuZWdhdGlvbnMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT0gXCJhdG9tXCIpIGF0b21zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbHRlci50eXBlID09IFwibmVnYXRlZFwiKSBuZWdhdGlvbnMucHVzaChmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2Ugc3RhcnQgd2l0aCBzb21ldGhpbmcgb2YgdGhlIGZvcm0gYSAmJiBiICYmICFjICYmICFkLlxuICAgICAgICAvLyBJZiBubyB0ZXJtcywgdGhlbiBldmVyeXRoaW5nIHdhcyBFVkVSWVRISU5HIHNvIHJldHVybiB0aGF0LlxuICAgICAgICAvLyBJZiBvbmx5IGF0b21zLCBqdXN0IGludGVyc2VjdCB0aGVtIChhICYmIGIpLlxuICAgICAgICAvLyBJZiBvbmx5IG5lZ2F0aW9ucywgdGhlbiByZXdyaXRlICFjICYmICFkID0+ICEoYyB8fCBkKSBhbmQgcmV0dXJuIG5lZ2F0ZWQoYyB8fCBkKS5cbiAgICAgICAgLy8gSWYgYm90aCwgY29tcHV0ZSB4ID0gKGEgJiYgYikgYW5kIHkgPSAoYyB8fCBkKSwgYW5kIHRoZW4gY29tcHV0ZSB4ICYmICF5LlxuXG4gICAgICAgIGlmIChhdG9tcy5sZW5ndGggPT0gMCAmJiBuZWdhdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhFVkVSWVRISU5HKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdG9tcy5sZW5ndGggPiAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGF0b20oc2V0SW50ZXJzZWN0KGF0b21zKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobmVnYXRlZChzZXRVbmlvbihuZWdhdGlvbnMpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHNldEludGVyc2VjdE5lZ2F0aW9uKHNldEludGVyc2VjdChhdG9tcyksIHNldFVuaW9uKG5lZ2F0aW9ucykpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycywgcHJvZHVjaW5nIGEgc2luZ2xlIHJlc3VsdCBmaWx0ZXIuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVuaW9uPFQ+KGZpbHRlcnM6IEl0ZXJhYmxlPEZpbHRlcjxUPj4pOiBGaWx0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbGF6eVVuaW9uKGZpbHRlcnMsICh4KSA9PiB4KTtcbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIHVuaW9uIHdvdWxkIHByb2R1Y2UgRVZFUllUSElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eVVuaW9uPEksIFQ+KGVsZW1lbnRzOiBJdGVyYWJsZTxJPiwgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBGaWx0ZXI8VD4gfCB1bmRlZmluZWQpOiBGaWx0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbGF6eUZhaWxhYmxlVW5pb24oZWxlbWVudHMsICh4KSA9PiBSZXN1bHQuc3VjY2Vzcyhwcm9kdWNlKHgpKSkub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogVW5pb24gZmlsdGVycyBsYXppbHksIHNob3J0LWNpcmN1aXRpbmcgaWYgdGhlIHVuaW9uIHdvdWxkIHByb2R1Y2UgRVZFUllUSElORy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGF6eUZhaWxhYmxlVW5pb248SSwgVCwgRT4oXG4gICAgICAgIGVsZW1lbnRzOiBJdGVyYWJsZTxJPixcbiAgICAgICAgcHJvZHVjZTogKGlucHV0OiBJKSA9PiBSZXN1bHQ8RmlsdGVyPFQ+IHwgdW5kZWZpbmVkLCBFPlxuICAgICk6IFJlc3VsdDxGaWx0ZXI8VD4sIEU+IHtcbiAgICAgICAgY29uc3QgYXRvbXM6IFNldDxUPltdID0gW107XG4gICAgICAgIGNvbnN0IG5lZ2F0aW9uczogU2V0PFQ+W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVGaWx0ZXIgPSBwcm9kdWNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXliZUZpbHRlci5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVGaWx0ZXIuY2FzdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBtYXliZUZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEVWRVJZVEhJTkcgZmlsdGVycyB3aWxsIHByb2R1Y2UgZXZlcnl0aGluZyBhbHdheXMuXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRVZFUllUSElORyk7XG4gICAgICAgICAgICAvLyBFbXB0eSBmaWx0ZXJzIGFyZSByZWR1bmRhbnQuXG4gICAgICAgICAgICBpZiAoZW1wdHkoZmlsdGVyKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFdpbGwgb25seSBiZSBsZWZ0IHdpdGggYXRvbXMgb3IgbmVnYXRpb25zLlxuICAgICAgICAgICAgaWYgKGZpbHRlci50eXBlID09IFwiYXRvbVwiKSBhdG9tcy5wdXNoKGZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgICBlbHNlIGlmIChmaWx0ZXIudHlwZSA9PSBcIm5lZ2F0ZWRcIikgbmVnYXRpb25zLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9yIGlzIGEgYml0IGhhcmRlciB0aGFuIEFORCBzaW5jZSB5b3UgY2FuIGVuZCB1cCB3aXRoIHNjZW5hcmlvcyBsaWtlIGEgfHwgIWIsIHdoaWNoIGFyZVxuICAgICAgICAvLyBub3QgY29tcHV0YWJsZSBkaXJlY3RseS4gSG93ZXZlciwgd2UgY2FuIGRvIGJvb2xlYW4gbG9naWMgdG8gYWx3YXlzIHByb2R1Y2UgYSBzaW5nbGVcbiAgICAgICAgLy8gc2V0LlxuICAgICAgICAvLyBJZiBub3RoaW5nID0+IG5vdGhpbmcsIG5vIG5vbi1lbXB0eSBmaWx0ZXJzLlxuICAgICAgICAvLyBJZiBhdG9tcyBidXQgbm8gbmVnYXRpb25zIChhIHx8IGIgfHwgYykgPT4gY29tcHV0ZSB1bmlvbi5cbiAgICAgICAgLy8gSWYgbmVnYXRpb25zIGJ1dCBubyBhdG9tcyAoIWEgfHwgIWIgfHwgIWMpID0+IHJld3JpdGUgYXMgIShhICYmIGIgJiYgYykuXG4gICAgICAgIC8vIElmIGJvdGg6IChhIHx8IGIgfHwgIWMgfHwgIWQpID0+IGNvbWJpbmUgZWFjaCBwYXJ0IGludG8gKGEgfHwgYikgfHwgKCFjIHx8ICFkKSA9PiAoYSB8fCBiKSB8fCAhKGMgJiYgZCkgPT4gZSB8fCAhZiA9PiAhKCFlICYmIGYpIHdoaWNoXG4gICAgICAgIC8vIGNhbiBiZSBjb21wdXRlZCB1c2luZyBpbnRlcnNlY3Rpb24gbG9naWMuXG5cbiAgICAgICAgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKE5PVEhJTkcpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA+IDAgJiYgbmVnYXRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5hdG9tKHNldFVuaW9uKGF0b21zKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0b21zLmxlbmd0aCA9PSAwICYmIG5lZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5uZWdhdGVkKHNldEludGVyc2VjdChuZWdhdGlvbnMpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobmVnYXRlZChzZXRJbnRlcnNlY3ROZWdhdGlvbihzZXRJbnRlcnNlY3QobmVnYXRpb25zKSwgc2V0VW5pb24oYXRvbXMpKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVmZmljaWVudGx5IGNvbXB1dGUgdGhlIGludGVyc2VjdGlvbiBvZiBzZXRzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcnNlY3Q8VD4oc2V0czogU2V0PFQ+W10pOiBTZXQ8VD4ge1xuICAgICAgICBpZiAoc2V0cy5sZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgZWxzZSBpZiAoc2V0cy5sZW5ndGggPT0gMSkgcmV0dXJuIHNldHNbMF07XG5cbiAgICAgICAgLy8gU29ydCBieSBzaXplIGFuZCBjb21iaW5lIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHNldCByZXBlYXRlZGx5LlxuICAgICAgICBsZXQgc29ydGVkID0gKFtdIGFzIFNldDxUPltdKS5jb25jYXQoc2V0cykuc29ydCgoYSwgYikgPT4gYS5zaXplIC0gYi5zaXplKTtcblxuICAgICAgICB3aGlsZSAoc29ydGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTtcbiAgICAgICAgICAgIGNvbnN0IGxhcmdlc3QgPSBzb3J0ZWQucG9wKCkhO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNvcnRlZFswXSkge1xuICAgICAgICAgICAgICAgIGlmIChsYXJnZXN0LmhhcyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc29ydGVkWzBdID0gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNvcnRlZFswXTtcbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSB0aGUgdW5pb24gb2Ygc2V0cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gc2V0VW5pb248VD4oc2V0czogU2V0PFQ+W10pOiBTZXQ8VD4ge1xuICAgICAgICBpZiAoc2V0cy5sZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgZWxzZSBpZiAoc2V0cy5sZW5ndGggPT0gMSkgcmV0dXJuIHNldHNbMF07XG5cbiAgICAgICAgLy8gSSdtIG5vdCBzdXJlIGlmIHRoZXJlIGlzIGFueSB1c2VmdWwgb3B0aW1pemF0aW9uIGZvciBzZXQgdW5pb25zLCBzbyBqdXN0IGFkZCB0aGVtIGFsbCBJIGd1ZXNzLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PFQ+KCk7XG4gICAgICAgIGZvciAoY29uc3Qgc2V0IG9mIHNldHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZXQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKiogRWZmaWNpZW50bHkgY29tcHV0ZSBhdG9tICYmICFuZWdhdGVkLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcnNlY3ROZWdhdGlvbjxUPihhdG9tOiBTZXQ8VD4sIG5lZ2F0ZWQ6IFNldDxUPik6IFNldDxUPiB7XG4gICAgICAgIGlmIChhdG9tLnNpemUgPiBuZWdhdGVkLnNpemUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIGNvcHksIHNpbmNlIEknbSBub3Qgc3VyZSBpdCdzIGFueSBmYXN0ZXIgd2l0aCB0aGUgY29weS5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoYXRvbSk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIG5lZ2F0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IC8qIGF0b20uc2l6ZSA8IG5lZ2F0aW9uLnNpemUgKi8gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PFQ+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGF0b20pIHtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRlZC5oYXMoZWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBGaWx0ZXJzIH0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuXG4vKiogQ29tcGFyaXNvbiBvcGVyYXRvcnMgd2hpY2ggeWllbGQgdHJ1ZS9mYWxzZS4gKi9cbmV4cG9ydCB0eXBlIENvbXBhcmVPcCA9IFwiPlwiIHwgXCI+PVwiIHwgXCI8PVwiIHwgXCI8XCIgfCBcIj1cIiB8IFwiIT1cIjtcbi8qKiBBcml0aG1ldGljIG9wZXJhdG9ycyB3aGljaCB5aWVsZCBudW1iZXJzIGFuZCBvdGhlciB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBBcml0aG1ldGljT3AgPSBcIitcIiB8IFwiLVwiIHwgXCIqXCIgfCBcIi9cIiB8IFwiJVwiIHwgXCImXCIgfCBcInxcIjtcbi8qKiBJbmRleCBhIHZhbHVlIGludG8gYW5vdGhlciB2YWx1ZS4gKi9cbmV4cG9ydCB0eXBlIExvZ2ljYWxPcCA9IFwiaW5kZXhcIjtcbi8qKiBBbGwgdmFsaWQgYmluYXJ5IG9wZXJhdG9ycy4gKi9cbmV4cG9ydCB0eXBlIEJpbmFyeU9wID0gQ29tcGFyZU9wIHwgQXJpdGhtZXRpY09wIHwgTG9naWNhbE9wO1xuXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uID1cbiAgICB8IExpdGVyYWxFeHByZXNzaW9uXG4gICAgfCBWYXJpYWJsZUV4cHJlc3Npb25cbiAgICB8IExpc3RFeHByZXNzaW9uXG4gICAgfCBPYmplY3RFeHByZXNzaW9uXG4gICAgfCBCaW5hcnlPcEV4cHJlc3Npb25cbiAgICB8IEZ1bmN0aW9uRXhwcmVzc2lvblxuICAgIHwgTGFtYmRhRXhwcmVzc2lvblxuICAgIHwgTmVnYXRlZEV4cHJlc3Npb247XG5cbi8qKiBMaXRlcmFsIHJlcHJlc2VudGF0aW9uIG9mIHNvbWUgZmllbGQgdHlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl0ZXJhbEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBMaXRlcmFsO1xufVxuXG4vKiogQSB2YXJpYWJsZSBmaWVsZCBmb3IgYSB2YXJpYWJsZSB3aXRoIGEgZ2l2ZW4gbmFtZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcInZhcmlhYmxlXCI7XG4gICAgbmFtZTogc3RyaW5nO1xufVxuXG4vKiogQSBsaXN0IGxpdGVyYWwsIHdoaWNoIGlzIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBmaWVsZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcImxpc3RcIjtcbiAgICB2YWx1ZXM6IEV4cHJlc3Npb25bXTtcbn1cblxuLyoqIEFuIG9iamVjdCBsaXRlcmFsLCB3aGljaCBpcyBhIG1hcHBpbmcgb2YgbmFtZSB0byBmaWVsZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0RXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJvYmplY3RcIjtcbiAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+O1xufVxuXG4vKiogQSBiaW5hcnkgb3BlcmF0b3IgZXhwcmVzc2lvbiB3aGljaCBjb21iaW5lcyB0d28gc3Vibm9kZXMgc29tZWhvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluYXJ5T3BFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBcImJpbmFyeW9wXCI7XG4gICAgbGVmdDogRXhwcmVzc2lvbjtcbiAgICByaWdodDogRXhwcmVzc2lvbjtcbiAgICBvcDogQmluYXJ5T3A7XG59XG5cbi8qKiBBIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2hpY2ggY2FsbHMgYSBmdW5jdGlvbiBvbiAwIG9yIG1vcmUgYXJndW1lbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwiZnVuY3Rpb25cIjtcbiAgICAvKiogRWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgb3IgYSBGdW5jdGlvbiBvYmplY3QuICovXG4gICAgZnVuYzogRXhwcmVzc2lvbjtcbiAgICAvKiogVGhlIGxpc3Qgb2YgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICovXG4gICAgYXJndW1lbnRzOiBFeHByZXNzaW9uW107XG59XG5cbi8qKiBBbiBpbmxpbmUgZnVuY3Rpb24gYWNjZXB0aW5nIG9uZSBvciBtb3JlIGFyZ3VtZW50cyBhbmQgcHJvZHVjaW5nIGEgdmFsdWUuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFwibGFtYmRhXCI7XG4gICAgLyoqIEFuIG9yZGVyZWQgbGlzdCBvZiBuYW1lZCBhcmd1bWVudHMuICovXG4gICAgYXJndW1lbnRzOiBzdHJpbmdbXTtcbiAgICAvKiogVGhlIGZpZWxkIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHVzaW5nIHRoZSBhcmd1bWVudHMgaW4gY29udGV4dC4gKi9cbiAgICB2YWx1ZTogRXhwcmVzc2lvbjtcbn1cblxuLyoqIEFuIGV4cHJlc3Npb24gd2hpY2ggbmVnYXRlcyB0aGUgdmFsdWUgb2YgdGhlIG9yaWdpbmFsIGZpZWxkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZWdhdGVkRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogXCJuZWdhdGVkXCI7XG5cbiAgICAvKiogVGhlIGNoaWxkIGZpZWxkIHRvIG5lZ2F0ZS4gKi9cbiAgICBjaGlsZDogRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBFeHByZXNzaW9ucyB7XG4gICAgLyoqIFRoZSBpbXBsaWNpdCBmaWVsZCByZWZlcmVuY2luZyB0aGUgY3VycmVudCBmaWVsZC4gKi9cbiAgICBleHBvcnQgY29uc3QgUk9XOiBzdHJpbmcgPSBcIiRyb3dcIjtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZShuYW1lOiBzdHJpbmcpOiBWYXJpYWJsZUV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcInZhcmlhYmxlXCIsIG5hbWUgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZTogTGl0ZXJhbCk6IExpdGVyYWxFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJpbmFyeU9wKGxlZnQ6IEV4cHJlc3Npb24sIG9wOiBCaW5hcnlPcCwgcmlnaHQ6IEV4cHJlc3Npb24pOiBFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiaW5hcnlvcFwiLCBsZWZ0LCBvcCwgcmlnaHQgfSBhcyBCaW5hcnlPcEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluZGV4KG9iajogRXhwcmVzc2lvbiwgaW5kZXg6IEV4cHJlc3Npb24pOiBFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJiaW5hcnlvcFwiLCBsZWZ0OiBvYmosIHJpZ2h0OiBpbmRleCwgb3A6IFwiaW5kZXhcIiB9O1xuICAgIH1cblxuICAgIC8qKiBDb252ZXJ0cyBhIHN0cmluZyBpbiBkb3Qtbm90YXRpb24tZm9ybWF0IGludG8gYSB2YXJpYWJsZSB3aGljaCBpbmRleGVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpbmRleFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IEV4cHJlc3Npb24ge1xuICAgICAgICBsZXQgcGFydHMgPSBuYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbiA9IEV4cHJlc3Npb25zLnZhcmlhYmxlKHBhcnRzWzBdKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhcnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgcmVzdWx0ID0gRXhwcmVzc2lvbnMuaW5kZXgocmVzdWx0LCBFeHByZXNzaW9ucy5saXRlcmFsKHBhcnRzW2luZGV4XSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGFtYmRhKGFyZ3M6IHN0cmluZ1tdLCB2YWx1ZTogRXhwcmVzc2lvbik6IExhbWJkYUV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImxhbWJkYVwiLCBhcmd1bWVudHM6IGFyZ3MsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZ1bmMoZnVuYzogRXhwcmVzc2lvbiwgYXJnczogRXhwcmVzc2lvbltdKTogRnVuY3Rpb25FeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCBmdW5jLCBhcmd1bWVudHM6IGFyZ3MgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGlzdCh2YWx1ZXM6IEV4cHJlc3Npb25bXSk6IExpc3RFeHByZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJsaXN0XCIsIHZhbHVlcyB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBvYmplY3QodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBFeHByZXNzaW9uPik6IE9iamVjdEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm9iamVjdFwiLCB2YWx1ZXMgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbmVnYXRlKGNoaWxkOiBFeHByZXNzaW9uKTogTmVnYXRlZEV4cHJlc3Npb24ge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5lZ2F0ZWRcIiwgY2hpbGQgfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNDb21wYXJlT3Aob3A6IEJpbmFyeU9wKTogb3AgaXMgQ29tcGFyZU9wIHtcbiAgICAgICAgcmV0dXJuIG9wID09IFwiPD1cIiB8fCBvcCA9PSBcIjxcIiB8fCBvcCA9PSBcIj5cIiB8fCBvcCA9PSBcIj49XCIgfHwgb3AgPT0gXCIhPVwiIHx8IG9wID09IFwiPVwiO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGEgc2V0IG9mIGFsbCB1bmJvdW5kIHZhcmlhYmxlcyAoaS5lLiwgdmFyaWFibGVzIG5vdCBwcm92aWRlZCBieSBgcm93YCwgbGFtYmRhcywgb3Igc2ltaWxhci4pICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHVuYm91bmRWYXJpYWJsZXMoZXhwcjogRXhwcmVzc2lvbiwgYm91bmQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbUk9XXSkpOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgYHJvd1tcIi4uLi5cIl1gLlxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZXhwci5vcCA9PT0gXCJpbmRleFwiICYmXG4gICAgICAgICAgICAgICAgICAgIGV4cHIubGVmdC50eXBlID09IFwidmFyaWFibGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICBleHByLmxlZnQubmFtZSA9PSBST1cgJiZcbiAgICAgICAgICAgICAgICAgICAgZXhwci5yaWdodC50eXBlID09IFwibGl0ZXJhbFwiICYmXG4gICAgICAgICAgICAgICAgICAgIExpdGVyYWxzLmlzU3RyaW5nKGV4cHIucmlnaHQudmFsdWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib3VuZC5oYXMoZXhwci5yaWdodC52YWx1ZSkpIHJldHVybiBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIG5ldyBTZXQoW2V4cHIucmlnaHQudmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBjaGVjayBsZWZ0IGFuZCByaWdodC5cbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5zZXRVbmlvbihbdW5ib3VuZFZhcmlhYmxlcyhleHByLmxlZnQsIGJvdW5kKSwgdW5ib3VuZFZhcmlhYmxlcyhleHByLnJpZ2h0LCBib3VuZCldKTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKGV4cHIuYXJndW1lbnRzLm1hcCgoYSkgPT4gdW5ib3VuZFZhcmlhYmxlcyhhLCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJsYW1iZGFcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZCA9IGJvdW5kID8/IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBleHByLmFyZ3VtZW50cykgbmV3Qm91bmQuYWRkKGFyZyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5ib3VuZFZhcmlhYmxlcyhleHByLnZhbHVlLCBuZXdCb3VuZCk7XG4gICAgICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKGV4cHIudmFsdWVzLm1hcCgodikgPT4gdW5ib3VuZFZhcmlhYmxlcyh2LCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZWdhdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuYm91bmRWYXJpYWJsZXMoZXhwci5jaGlsZCwgYm91bmQpO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLnNldFVuaW9uKE9iamVjdC52YWx1ZXMoZXhwci52YWx1ZXMpLm1hcCgodikgPT4gdW5ib3VuZFZhcmlhYmxlcyh2LCBib3VuZCkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YXJpYWJsZVwiOlxuICAgICAgICAgICAgICAgIGlmIChib3VuZCAmJiBib3VuZC5oYXMoZXhwci5uYW1lKSkgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBuZXcgU2V0KFtleHByLm5hbWVdKTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW5kZXIgYW4gZXhwcmVzc2lvbiBhcyBhIHN0cmluZy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcoZXhwcjogRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5b3BcIjpcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5vcCA9PT0gXCJpbmRleFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmxlZnQpfVske3RvU3RyaW5nKGV4cHIucmlnaHQpfV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmxlZnQpfSAke2V4cHIub3B9ICR7dG9TdHJpbmcoZXhwci5yaWdodCl9YDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0b1N0cmluZyhleHByLmZ1bmMpfSgke2V4cHIuYXJndW1lbnRzLm1hcCh0b1N0cmluZykuam9pbihcIiwgXCIpfSlgO1xuICAgICAgICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgKCR7ZXhwci5hcmd1bWVudHMuam9pbihcIiwgXCIpfSkgPT4gJHt0b1N0cmluZyhleHByLnZhbHVlKX1gO1xuICAgICAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFske2V4cHIudmFsdWVzLm1hcCh0b1N0cmluZykuam9pbihcIiwgXCIpfV1gO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCEke3RvU3RyaW5nKGV4cHIuY2hpbGQpfWA7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGB7JHtPYmplY3QuZW50cmllcyhleHByLnZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfTogJHt0b1N0cmluZyh2KX1gKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfX1gO1xuICAgICAgICAgICAgY2FzZSBcInZhcmlhYmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubmFtZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShleHByLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFwiJHt3cmFwcGVkLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaXRlcmFscy50b1N0cmluZyh3cmFwcGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY29uc3QgTlVMTCA9IEV4cHJlc3Npb25zLmxpdGVyYWwobnVsbCk7XG59XG4iLCAiLyoqIFByb3ZpZGVzIGNvcmUgcHJlYWN0IC8gcmVuZGVyaW5nIHV0aWxpdGllcyBmb3IgYWxsIHZpZXcgdHlwZXMuXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IEFwcCwgTWFya2Rvd25SZW5kZXJlciB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3VycmVudExvY2FsZSwgcmVuZGVyTWluaW1hbERhdGUsIHJlbmRlck1pbmltYWxEdXJhdGlvbiB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEltYWdlRGltZW5zaW9ucywgaXNJbWFnZUVtYmVkIH0gZnJvbSBcInV0aWxzL21lZGlhXCI7XG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIEZyYWdtZW50LCByZW5kZXIgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUVycm9yQm91bmRhcnkgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzLCBQcm9wc1dpdGhDaGlsZHJlbiwgbWVtbyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBFbWJlZCB9IGZyb20gXCJhcGkvdWkvZW1iZWRcIjtcblxuaW1wb3J0IFwiLi9lcnJvcnMuY3NzXCI7XG5cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8Q29tcG9uZW50Pih1bmRlZmluZWQhKTtcbmV4cG9ydCBjb25zdCBBUFBfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8QXBwPih1bmRlZmluZWQhKTtcbmV4cG9ydCBjb25zdCBEQVRBQ09SRV9DT05URVhUID0gY3JlYXRlQ29udGV4dDxEYXRhY29yZT4odW5kZWZpbmVkISk7XG5leHBvcnQgY29uc3QgU0VUVElOR1NfQ09OVEVYVCA9IGNyZWF0ZUNvbnRleHQ8U2V0dGluZ3M+KHVuZGVmaW5lZCEpO1xuZXhwb3J0IGNvbnN0IENVUlJFTlRfRklMRV9DT05URVhUID0gY3JlYXRlQ29udGV4dDxzdHJpbmc+KFwiXCIpO1xuXG4vKiogTW9yZSBjb21wYWN0IHByb3ZpZGVyIGZvciBhbGwgb2YgdGhlIGRhdGFjb3JlIHJlYWN0IGNvbnRleHRzLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERhdGFjb3JlQ29udGV4dFByb3ZpZGVyKHtcbiAgICBjaGlsZHJlbixcbiAgICBhcHAsXG4gICAgY29tcG9uZW50LFxuICAgIGRhdGFjb3JlLFxuICAgIHNldHRpbmdzLFxufTogUHJvcHNXaXRoQ2hpbGRyZW48e1xuICAgIGFwcDogQXBwO1xuICAgIGNvbXBvbmVudDogQ29tcG9uZW50O1xuICAgIGRhdGFjb3JlOiBEYXRhY29yZTtcbiAgICBzZXR0aW5nczogU2V0dGluZ3M7XG59Pikge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDT01QT05FTlRfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17Y29tcG9uZW50fT5cbiAgICAgICAgICAgIDxBUFBfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17YXBwfT5cbiAgICAgICAgICAgICAgICA8REFUQUNPUkVfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17ZGF0YWNvcmV9PlxuICAgICAgICAgICAgICAgICAgICA8U0VUVElOR1NfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17c2V0dGluZ3N9PntjaGlsZHJlbn08L1NFVFRJTkdTX0NPTlRFWFQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9EQVRBQ09SRV9DT05URVhULlByb3ZpZGVyPlxuICAgICAgICAgICAgPC9BUFBfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgPC9DT01QT05FTlRfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICApO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpbmsoeyBsaW5rLCBzb3VyY2VQYXRoOiBtYXliZVNvdXJjZVBhdGggfTogeyBsaW5rOiBMaW5rIHwgc3RyaW5nOyBzb3VyY2VQYXRoPzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCB3b3Jrc3BhY2UgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKT8ud29ya3NwYWNlO1xuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyBjdXJyZW50UGF0aCA/PyBcIlwiO1xuICAgIGNvbnN0IHBhcnNlZCA9IHVzZU1lbW8oKCkgPT4gKExpdGVyYWxzLmlzTGluayhsaW5rKSA/IGxpbmsgOiBMaW5rLmluZmVyKGxpbmspKSwgW2xpbmtdKTtcblxuICAgIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXd0YWIgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgICAgIHdvcmtzcGFjZT8ub3BlbkxpbmtUZXh0KHBhcnNlZC5vYnNpZGlhbkxpbmsoKSwgc291cmNlUGF0aCwgbmV3dGFiKTtcbiAgICAgICAgfSxcbiAgICAgICAgW3BhcnNlZCwgc291cmNlUGF0aF1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGFcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3BhcnNlZC5kaXNwbGF5T3JEZWZhdWx0KCl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW50ZXJuYWwtbGlua1wiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgcmVsPVwibm9vcGVuZXJcIlxuICAgICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgIGRhdGEtaHJlZj17cGFyc2VkLm9ic2lkaWFuTGluaygpfVxuICAgICAgICA+XG4gICAgICAgICAgICB7cGFyc2VkLmRpc3BsYXlPckRlZmF1bHQoKX1cbiAgICAgICAgPC9hPlxuICAgICk7XG59XG5cbi8qKlxuICogQ29waWVzIGhvdyBhbiBPYnNpZGlhbiBsaW5rIGlzIHJlbmRlcmVkIGJ1dCBpcyBhYm91dCBhbiBvcmRlciBvZiBtYWduaXR1ZGUgZmFzdGVyIHRvIHJlbmRlciB0aGFuIHZpYSBtYXJrZG93biByZW5kZXJpbmcuICovXG5leHBvcnQgY29uc3QgT2JzaWRpYW5MaW5rID0gbWVtbyhSYXdMaW5rKTtcblxuLyoqQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd01hcmtkb3duKHtcbiAgICBjb250ZW50LFxuICAgIHNvdXJjZVBhdGg6IG1heWJlU291cmNlUGF0aCxcbiAgICBpbmxpbmUgPSB0cnVlLFxuICAgIHN0eWxlLFxuICAgIGNscyxcbiAgICBvbkNsaWNrLFxufToge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzO1xuICAgIGNscz86IHN0cmluZztcbiAgICBvbkNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBhbnk7XG59KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdXNlUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdXNlQ29udGV4dChDT01QT05FTlRfQ09OVEVYVCk7XG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcblxuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBtYXliZVNvdXJjZVBhdGggPz8gZGVmYXVsdFBhdGg7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRhaW5lci5jdXJyZW50KSByZXR1cm47XG5cbiAgICAgICAgY29udGFpbmVyLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgTWFya2Rvd25SZW5kZXJlci5yZW5kZXIoYXBwLCBjb250ZW50LCBjb250YWluZXIuY3VycmVudCwgc291cmNlUGF0aCwgY29tcG9uZW50KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLmN1cnJlbnQgfHwgIWlubGluZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBVbndyYXAgYW55IGNyZWF0ZWQgcGFyYWdyYXBoIGVsZW1lbnRzIGlmIHdlIGFyZSBpbmxpbmUuXG4gICAgICAgICAgICBsZXQgcGFyYWdyYXBoID0gY29udGFpbmVyLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInBcIik7XG4gICAgICAgICAgICB3aGlsZSAocGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gcGFyYWdyYXBoLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoLnJlcGxhY2VXaXRoKC4uLkFycmF5LmZyb20oY2hpbGRyZW4pKTtcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGggPSBjb250YWluZXIuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwicFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGF2ZSBlbWJlZHMgYWN0dWFsbHkgbG9hZCBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgYXMgcGxhaW4gdGV4dC5cbiAgICAgICAgICAgIGxldCBlbWJlZCA9IGNvbnRhaW5lci5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJzcGFuLmludGVybmFsLWVtYmVkOm5vdCguaXMtbG9hZGVkKVwiKTtcbiAgICAgICAgICAgIHdoaWxlIChlbWJlZCkge1xuICAgICAgICAgICAgICAgIGVtYmVkLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgICAgICA8QVBQX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e2FwcH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RW1iZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rPXtMaW5rLnBhcnNlSW5uZXIoZW1iZWQuZ2V0QXR0cmlidXRlKFwic3JjXCIpID8/IFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9BUFBfQ09OVEVYVC5Qcm92aWRlcj4sXG4gICAgICAgICAgICAgICAgICAgIGVtYmVkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbWJlZC5hZGRDbGFzcyhcImlzLWxvYWRlZFwiKTtcbiAgICAgICAgICAgICAgICBlbWJlZCA9IGNvbnRhaW5lci5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJzcGFuLmludGVybmFsLWVtYmVkOm5vdCguaXMtbG9hZGVkKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgW2NvbnRlbnQsIHNvdXJjZVBhdGgsIGlubGluZSwgY29udGFpbmVyLmN1cnJlbnRdKTtcblxuICAgIHJldHVybiA8c3BhbiByZWY9e2NvbnRhaW5lcn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2Nsc30gb25DbGljaz17b25DbGlja30+PC9zcGFuPjtcbn1cblxuLyoqXG4gKiBIYWNreSBwcmVhY3QgY29tcG9uZW50IHdoaWNoIHdyYXBzIE9ic2lkaWFuJ3MgbWFya2Rvd24gcmVuZGVyZXIgaW50byBhIG5lYXQgY29tcG9uZW50LiAqL1xuZXhwb3J0IGNvbnN0IE1hcmtkb3duID0gbWVtbyhSYXdNYXJrZG93bik7XG5cbi8qKlxuICogQGhpZGRlblxuICogIEludGVsbGlnZW50bHkgcmVuZGVyIGFuIGFyYml0cmFyeSBsaXRlcmFsIHZhbHVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpdCh7XG4gICAgdmFsdWUsXG4gICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxuICAgIGlubGluZSA9IGZhbHNlLFxuICAgIGRlcHRoID0gMCxcbn06IFByb3BzV2l0aENoaWxkcmVuPHtcbiAgICB2YWx1ZTogTGl0ZXJhbCB8IHVuZGVmaW5lZDtcbiAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgZGVwdGg/OiBudW1iZXI7XG59Pikge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdXNlQ29udGV4dChTRVRUSU5HU19DT05URVhUKTtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuXG4gICAgY29uc3Qgc291cmNlUGF0aCA9IG1heWJlU291cmNlUGF0aCA/PyBkZWZhdWx0UGF0aDtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYmV5b25kIHRoZSBtYXhpbXVtIHJlbmRlciBkZXB0aC5cbiAgICBpZiAoZGVwdGggPj0gc2V0dGluZ3MubWF4UmVjdXJzaXZlUmVuZGVyRGVwdGgpIHJldHVybiA8RnJhZ21lbnQ+Li4uPC9GcmFnbWVudD47XG5cbiAgICBpZiAoTGl0ZXJhbHMuaXNOdWxsKHZhbHVlKSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiA8TWFya2Rvd24gaW5saW5lPXtpbmxpbmV9IGNvbnRlbnQ9e3NldHRpbmdzLnJlbmRlck51bGxBc30gc291cmNlUGF0aD17c291cmNlUGF0aH0gLz47XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxNYXJrZG93biBpbmxpbmU9e2lubGluZX0gY29udGVudD17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiA8RnJhZ21lbnQ+e1wiXCIgKyB2YWx1ZX08L0ZyYWdtZW50PjtcbiAgICB9IGVsc2UgaWYgKExpdGVyYWxzLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57XCJcIiArIHZhbHVlfTwvRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHtyZW5kZXJNaW5pbWFsRGF0ZSh2YWx1ZSwgc2V0dGluZ3MuZGVmYXVsdERhdGVGb3JtYXQsIHNldHRpbmdzLmRlZmF1bHREYXRlVGltZUZvcm1hdCwgY3VycmVudExvY2FsZSgpKX1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc0R1cmF0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gPEZyYWdtZW50PntyZW5kZXJNaW5pbWFsRHVyYXRpb24odmFsdWUpfTwvRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNMaW5rKHZhbHVlKSkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxpbmcgb2YgaW1hZ2UvdmlkZW8vZXRjIGVtYmVkZGluZ3MgdG8gYnlwYXNzIHRoZSBPYnNpZGlhbiBBUEkgbm90IHdvcmtpbmcuXG4gICAgICAgIGlmIChpc0ltYWdlRW1iZWQodmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgcmVhbEZpbGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdCh2YWx1ZS5wYXRoLCBzb3VyY2VQYXRoKTtcbiAgICAgICAgICAgIGlmICghcmVhbEZpbGUpIHJldHVybiA8TWFya2Rvd24gY29udGVudD17dmFsdWUubWFya2Rvd24oKX0gc291cmNlUGF0aD17c291cmNlUGF0aH0gLz47XG5cbiAgICAgICAgICAgIGxldCBkaW1lbnNpb25zID0gZXh0cmFjdEltYWdlRGltZW5zaW9ucyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgcmVzb3VyY2VQYXRoID0gYXBwLnZhdWx0LmdldFJlc291cmNlUGF0aChyZWFsRmlsZSk7XG5cbiAgICAgICAgICAgIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMubGVuZ3RoID09IDIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpbWcgYWx0PXt2YWx1ZS5wYXRofSBzcmM9e3Jlc291cmNlUGF0aH0gd2lkdGg9e2RpbWVuc2lvbnNbMF19IGhlaWdodD17ZGltZW5zaW9uc1sxXX0gLz47XG4gICAgICAgICAgICBlbHNlIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMubGVuZ3RoID09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpbWcgYWx0PXt2YWx1ZS5wYXRofSBzcmM9e3Jlc291cmNlUGF0aH0gd2lkdGg9e2RpbWVuc2lvbnNbMF19IC8+O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gPGltZyBhbHQ9e3ZhbHVlLnBhdGh9IHNyYz17cmVzb3VyY2VQYXRofSAvPjtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lbWJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIDxFbWJlZCBsaW5rPXt2YWx1ZX0gc291cmNlUGF0aD17c291cmNlUGF0aH0gaW5saW5lPXtpbmxpbmV9IC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxPYnNpZGlhbkxpbmsgbGluaz17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD4mbHQ7ZnVuY3Rpb24mZ3Q7PC9GcmFnbWVudD47XG4gICAgfSBlbHNlIGlmIChMaXRlcmFscy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIWlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXtcImRhdGF2aWV3IGRhdGF2aWV3LXVsIGRhdGF2aWV3LXJlc3VsdC1saXN0LXVsXCJ9PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKChzdWJ2YWx1ZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cImRhdGF2aWV3LXJlc3VsdC1saXN0LWxpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpdCB2YWx1ZT17c3VidmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDApIHJldHVybiA8RnJhZ21lbnQ+Jmx0O0VtcHR5IExpc3QmZ3Q7PC9GcmFnbWVudD47XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZGF0YXZpZXcgZGF0YXZpZXctcmVzdWx0LWxpc3Qtc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKChzdWJ2YWx1ZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW5kZXggPT0gMCA/IFwiXCIgOiBcIiwgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpdCB2YWx1ZT17c3VidmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoTGl0ZXJhbHMuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIC8vIERvbid0IHJlbmRlciBjbGFzc2VzIGluIGNhc2UgdGhleSBoYXZlIHJlY3Vyc2l2ZSByZWZlcmVuY2VzOyBzcG9vcHkuXG4gICAgICAgIGlmICh2YWx1ZT8uY29uc3RydWN0b3I/Lm5hbWUgJiYgdmFsdWU/LmNvbnN0cnVjdG9yPy5uYW1lICE9IFwiT2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiA8RnJhZ21lbnQ+Jmx0O3t2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfSZndDs8L0ZyYWdtZW50PjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJkYXRhdmlldyBkYXRhdmlldy11bCBkYXRhdmlldy1yZXN1bHQtb2JqZWN0LXVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHtPYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChba2V5LCB2YWx1ZV0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJkYXRhdmlldyBkYXRhdmlldy1saSBkYXRhdmlldy1yZXN1bHQtb2JqZWN0LWxpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2tleX06IDxMaXQgdmFsdWU9e3ZhbHVlfSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSBpbmxpbmU9e2lubGluZX0gZGVwdGg9e2RlcHRoICsgMX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT0gMCkgcmV0dXJuIDxGcmFnbWVudD4mbHQ7RW1wdHkgT2JqZWN0Jmd0OzwvRnJhZ21lbnQ+O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRhdGF2aWV3IGRhdGF2aWV3LXJlc3VsdC1vYmplY3Qtc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICB7T2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2tleSwgdmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbmRleCA9PSAwID8gXCJcIiA6IFwiLCBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7a2V5fTogPExpdCB2YWx1ZT17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17aW5saW5lfSBkZXB0aD17ZGVwdGggKyAxfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiA8RnJhZ21lbnQ+Jmx0O1VucmVjb2duaXplZDoge0pTT04uc3RyaW5naWZ5KHZhbHVlKX0mZ3Q7PC9GcmFnbWVudD47XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogSW50ZWxsaWdlbnRseSByZW5kZXIgYW4gYXJiaXRyYXJ5IGxpdGVyYWwgdmFsdWUuICovXG5leHBvcnQgY29uc3QgTGl0ID0gbWVtbyhSYXdMaXQpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFJlbmRlciBhIHByZXR0eSBjZW50ZXJlZCBlcnJvciBtZXNzYWdlIGluIGEgYm94LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVycm9yTWVzc2FnZSh7XG4gICAgdGl0bGUsXG4gICAgbWVzc2FnZSxcbiAgICBlcnJvcixcbiAgICByZXNldCxcbn06IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHJlc2V0PzogKCkgPT4gdm9pZDtcbn0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLWVycm9yLWJveFwiPlxuICAgICAgICAgICAge3RpdGxlICYmIDxoNCBjbGFzc05hbWU9XCJkYXRhY29yZS1lcnJvci10aXRsZVwiPnt0aXRsZX08L2g0Pn1cbiAgICAgICAgICAgIHttZXNzYWdlICYmIDxwIGNsYXNzTmFtZT1cImRhdGFjb3JlLWVycm9yLW1lc3NhZ2VcIj57bWVzc2FnZX08L3A+fVxuICAgICAgICAgICAge2Vycm9yICYmIDxwcmUgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZXJyb3ItcHJlXCI+e2Vycm9yfTwvcHJlPn1cbiAgICAgICAgICAgIHtyZXNldCAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJkYXRhY29yZS1lcnJvci1yZXRyeVwiIG9uQ2xpY2s9e3Jlc2V0fT5cbiAgICAgICAgICAgICAgICAgICAgUmVydW5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG5cbi8qKiBBIHNpbXBsZSBlcnJvciBib3VuZGFyeSB3aGljaCByZW5kZXJzIGEgbWVzc2FnZSBvbiBmYWlsdXJlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpbXBsZUVycm9yQm91bmRhcnkoe1xuICAgIHRpdGxlLFxuICAgIG1lc3NhZ2UsXG4gICAgY2hpbGRyZW4sXG59OiBQcm9wc1dpdGhDaGlsZHJlbjx7IHRpdGxlPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0+KSB7XG4gICAgY29uc3QgW2Vycm9yLCByZXNldF0gPSB1c2VFcnJvckJvdW5kYXJ5KCk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgdGl0bGU9e3RpdGxlfSBtZXNzYWdlPXttZXNzYWdlfSBlcnJvcj17ZXJyb3Iuc3RhY2t9IHJlc2V0PXtyZXNldH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57Y2hpbGRyZW59PC9GcmFnbWVudD47XG4gICAgfVxufVxuIiwgImltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5cbmV4cG9ydCBjb25zdCBJTUFHRV9FWFRFTlNJT05TID0gT2JqZWN0LmZyZWV6ZShcbiAgICBuZXcgU2V0KFtcbiAgICAgICAgXCIudGlmXCIsXG4gICAgICAgIFwiLnRpZmZcIixcbiAgICAgICAgXCIuZ2lmXCIsXG4gICAgICAgIFwiLnBuZ1wiLFxuICAgICAgICBcIi5hcG5nXCIsXG4gICAgICAgIFwiLmF2aWZcIixcbiAgICAgICAgXCIuanBnXCIsXG4gICAgICAgIFwiLmpwZWdcIixcbiAgICAgICAgXCIuamZpZlwiLFxuICAgICAgICBcIi5wamVwZ1wiLFxuICAgICAgICBcIi5wanBcIixcbiAgICAgICAgXCIuc3ZnXCIsXG4gICAgICAgIFwiLndlYnBcIixcbiAgICAgICAgXCIuYm1wXCIsXG4gICAgICAgIFwiLmljb1wiLFxuICAgICAgICBcIi5jdXJcIixcbiAgICBdKVxuKTtcblxuLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGxpbmsgcG9pbnRzIHRvIGFuIGVtYmVkZGVkIGltYWdlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW1hZ2VFbWJlZChsaW5rOiBMaW5rKTogYm9vbGVhbiB7XG4gICAgaWYgKCFsaW5rLnBhdGguY29udGFpbnMoXCIuXCIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgZXh0ZW5zaW9uID0gbGluay5wYXRoLnN1YnN0cmluZyhsaW5rLnBhdGgubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICByZXR1cm4gbGluay50eXBlID09IFwiZmlsZVwiICYmIGxpbmsuZW1iZWQgJiYgSU1BR0VfRVhURU5TSU9OUy5oYXMoZXh0ZW5zaW9uKTtcbn1cblxuLyoqIEV4dHJhY3QgdGV4dCBvZiB0aGUgZm9ybSAnV3hIJyBvciAnVycgZnJvbSB0aGUgZGlzcGxheSBvZiBhIGxpbmsuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEltYWdlRGltZW5zaW9ucyhsaW5rOiBMaW5rKTogW251bWJlciwgbnVtYmVyXSB8IFtudW1iZXJdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWxpbmsuZGlzcGxheSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBtYXRjaCA9IC9eKFxcZCspeChcXGQrKSQvaXUuZXhlYyhsaW5rLmRpc3BsYXkpO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIFtwYXJzZUludChtYXRjaFsxXSksIHBhcnNlSW50KG1hdGNoWzJdKV07XG5cbiAgICBsZXQgbWF0Y2gyID0gL14oXFxkKykvLmV4ZWMobGluay5kaXNwbGF5KTtcbiAgICBpZiAobWF0Y2gyKSByZXR1cm4gW3BhcnNlSW50KG1hdGNoMlsxXSldO1xuXG4gICAgLy8gTm8gbWF0Y2guXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKiogTm9ybWFsIGh5ZHJhdGlvbiB0aGF0IGF0dGFjaGVzIHRvIGEgRE9NIHRyZWUgYnV0IGRvZXMgbm90IGRpZmYgaXQuICovXG5leHBvcnQgY29uc3QgTU9ERV9IWURSQVRFID0gMSA8PCA1O1xuLyoqIFNpZ25pZmllcyB0aGlzIFZOb2RlIHN1c3BlbmRlZCBvbiB0aGUgcHJldmlvdXMgcmVuZGVyICovXG5leHBvcnQgY29uc3QgTU9ERV9TVVNQRU5ERUQgPSAxIDw8IDc7XG4vKiogSW5kaWNhdGVzIHRoYXQgdGhpcyBub2RlIG5lZWRzIHRvIGJlIGluc2VydGVkIHdoaWxlIHBhdGNoaW5nIGNoaWxkcmVuICovXG5leHBvcnQgY29uc3QgSU5TRVJUX1ZOT0RFID0gMSA8PCAxNjtcbi8qKiBJbmRpY2F0ZXMgYSBWTm9kZSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYW5vdGhlciBWTm9kZSBpbiB0aGUgZGlmZiAqL1xuZXhwb3J0IGNvbnN0IE1BVENIRUQgPSAxIDw8IDE3O1xuXG4vKiogUmVzZXQgYWxsIG1vZGUgZmxhZ3MgKi9cbmV4cG9ydCBjb25zdCBSRVNFVF9NT0RFID0gfihNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRCk7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9PQkogPSAvKiogQHR5cGUge2FueX0gKi8gKHt9KTtcbmV4cG9ydCBjb25zdCBFTVBUWV9BUlIgPSBbXTtcbmV4cG9ydCBjb25zdCBJU19OT05fRElNRU5TSU9OQUwgPVxuXHQvYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pO1xuIiwgImltcG9ydCB7IEVNUFRZX0FSUiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIEFzc2lnbiBwcm9wZXJ0aWVzIGZyb20gYHByb3BzYCB0byBgb2JqYFxuICogQHRlbXBsYXRlIE8sIFAgVGhlIG9iaiBhbmQgcHJvcHMgdHlwZXNcbiAqIEBwYXJhbSB7T30gb2JqIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvXG4gKiBAcGFyYW0ge1B9IHByb3BzIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm5zIHtPICYgUH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihvYmosIHByb3BzKSB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgY2hhbmdlIHRoZSB0eXBlIG9mIGBvYmpgIHRvIGJlIGBPICYgUGBcblx0Zm9yIChsZXQgaSBpbiBwcm9wcykgb2JqW2ldID0gcHJvcHNbaV07XG5cdHJldHVybiAvKiogQHR5cGUge08gJiBQfSAqLyAob2JqKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjaGlsZCBub2RlIGZyb20gaXRzIHBhcmVudCBpZiBhdHRhY2hlZC4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yXG4gKiBJRTExIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlKClgLiBVc2luZyB0aGlzIGZ1bmN0aW9uXG4gKiBpcyBzbWFsbGVyIHRoYW4gaW5jbHVkaW5nIGEgZGVkaWNhdGVkIHBvbHlmaWxsLlxuICogQHBhcmFtIHtwcmVhY3QuQ29udGFpbmVyTm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5vZGUobm9kZSkge1xuXHRpZiAobm9kZSAmJiBub2RlLnBhcmVudE5vZGUpIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNsaWNlID0gRU1QVFlfQVJSLnNsaWNlO1xuIiwgImltcG9ydCB7IF9jYXRjaEVycm9yIH0gZnJvbSAnLi9kaWZmL2NhdGNoLWVycm9yJztcblxuLyoqXG4gKiBUaGUgYG9wdGlvbmAgb2JqZWN0IGNhbiBwb3RlbnRpYWxseSBjb250YWluIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICogdGhhdCBhcmUgY2FsbGVkIGR1cmluZyB2YXJpb3VzIHN0YWdlcyBvZiBvdXIgcmVuZGVyZXIuIFRoaXMgaXMgdGhlXG4gKiBmb3VuZGF0aW9uIG9uIHdoaWNoIGFsbCBvdXIgYWRkb25zIGxpa2UgYHByZWFjdC9kZWJ1Z2AsIGBwcmVhY3QvY29tcGF0YCxcbiAqIGFuZCBgcHJlYWN0L2hvb2tzYCBhcmUgYmFzZWQgb24uIFNlZSB0aGUgYE9wdGlvbnNgIHR5cGUgaW4gYGludGVybmFsLmQudHNgXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbiBob29rcyAobW9zdCBlZGl0b3JzL0lERXMgYWxsb3cgeW91IHRvXG4gKiBjdHJsK2NsaWNrIG9yIGNtZCtjbGljayBvbiBtYWMgdGhlIHR5cGUgZGVmaW5pdGlvbiBiZWxvdykuXG4gKiBAdHlwZSB7T3B0aW9uc31cbiAqL1xuY29uc3Qgb3B0aW9ucyA9IHtcblx0X2NhdGNoRXJyb3Jcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wdGlvbnM7XG4iLCAiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi9vcHRpb25zJztcblxubGV0IHZub2RlSWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZSBhbiB2aXJ0dWFsIG5vZGUgKHVzZWQgZm9yIEpTWClcbiAqIEBwYXJhbSB7Vk5vZGVbXCJ0eXBlXCJdfSB0eXBlIFRoZSBub2RlIG5hbWUgb3IgQ29tcG9uZW50IGNvbnN0cnVjdG9yIGZvciB0aGlzXG4gKiB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3Byb3BzXSBUaGUgcHJvcGVydGllcyBvZiB0aGUgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLicpLkNvbXBvbmVudENoaWxkcmVuPn0gW2NoaWxkcmVuXSBUaGUgY2hpbGRyZW4gb2YgdGhlXG4gKiB2aXJ0dWFsIG5vZGVcbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG5cdGxldCBub3JtYWxpemVkUHJvcHMgPSB7fSxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdGk7XG5cdGZvciAoaSBpbiBwcm9wcykge1xuXHRcdGlmIChpID09ICdrZXknKSBrZXkgPSBwcm9wc1tpXTtcblx0XHRlbHNlIGlmIChpID09ICdyZWYnKSByZWYgPSBwcm9wc1tpXTtcblx0XHRlbHNlIG5vcm1hbGl6ZWRQcm9wc1tpXSA9IHByb3BzW2ldO1xuXHR9XG5cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNoaWxkcmVuID1cblx0XHRcdGFyZ3VtZW50cy5sZW5ndGggPiAzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogY2hpbGRyZW47XG5cdH1cblxuXHQvLyBJZiBhIENvbXBvbmVudCBWTm9kZSwgY2hlY2sgZm9yIGFuZCBhcHBseSBkZWZhdWx0UHJvcHNcblx0Ly8gTm90ZTogdHlwZSBtYXkgYmUgdW5kZWZpbmVkIGluIGRldmVsb3BtZW50LCBtdXN0IG5ldmVyIGVycm9yIGhlcmUuXG5cdGlmICh0eXBlb2YgdHlwZSA9PSAnZnVuY3Rpb24nICYmIHR5cGUuZGVmYXVsdFByb3BzICE9IG51bGwpIHtcblx0XHRmb3IgKGkgaW4gdHlwZS5kZWZhdWx0UHJvcHMpIHtcblx0XHRcdGlmIChub3JtYWxpemVkUHJvcHNbaV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRub3JtYWxpemVkUHJvcHNbaV0gPSB0eXBlLmRlZmF1bHRQcm9wc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3JlYXRlVk5vZGUodHlwZSwgbm9ybWFsaXplZFByb3BzLCBrZXksIHJlZiwgbnVsbCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgVk5vZGUgKHVzZWQgaW50ZXJuYWxseSBieSBQcmVhY3QpXG4gKiBAcGFyYW0ge1ZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudFxuICogQ29uc3RydWN0b3IgZm9yIHRoaXMgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdCB8IHN0cmluZyB8IG51bWJlciB8IG51bGx9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgdmlydHVhbCBub2RlLlxuICogSWYgdGhpcyB2aXJ0dWFsIG5vZGUgcmVwcmVzZW50cyBhIHRleHQgbm9kZSwgdGhpcyBpcyB0aGUgdGV4dCBvZiB0aGUgbm9kZSAoc3RyaW5nIG9yIG51bWJlcikuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG51bGx9IGtleSBUaGUga2V5IGZvciB0aGlzIHZpcnR1YWwgbm9kZSwgdXNlZCB3aGVuXG4gKiBkaWZmaW5nIGl0IGFnYWluc3QgaXRzIGNoaWxkcmVuXG4gKiBAcGFyYW0ge1ZOb2RlW1wicmVmXCJdfSByZWYgVGhlIHJlZiBwcm9wZXJ0eSB0aGF0IHdpbGxcbiAqIHJlY2VpdmUgYSByZWZlcmVuY2UgdG8gaXRzIGNyZWF0ZWQgY2hpbGRcbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZOb2RlKHR5cGUsIHByb3BzLCBrZXksIHJlZiwgb3JpZ2luYWwpIHtcblx0Ly8gVjggc2VlbXMgdG8gYmUgYmV0dGVyIGF0IGRldGVjdGluZyB0eXBlIHNoYXBlcyBpZiB0aGUgb2JqZWN0IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIGNhbGwgc2l0ZVxuXHQvLyBEbyBub3QgaW5saW5lIGludG8gY3JlYXRlRWxlbWVudCBhbmQgY29lcmNlVG9WTm9kZSFcblx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0Y29uc3Qgdm5vZGUgPSB7XG5cdFx0dHlwZSxcblx0XHRwcm9wcyxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdF9jaGlsZHJlbjogbnVsbCxcblx0XHRfcGFyZW50OiBudWxsLFxuXHRcdF9kZXB0aDogMCxcblx0XHRfZG9tOiBudWxsLFxuXHRcdC8vIF9uZXh0RG9tIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gdW5kZWZpbmVkIGIvYyBpdCB3aWxsIGV2ZW50dWFsbHlcblx0XHQvLyBiZSBzZXQgdG8gZG9tLm5leHRTaWJsaW5nIHdoaWNoIGNhbiByZXR1cm4gYG51bGxgIGFuZCBpdCBpcyBpbXBvcnRhbnRcblx0XHQvLyB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gdW5pbml0aWFsaXplZCBfbmV4dERvbSBhbmRcblx0XHQvLyBhIF9uZXh0RG9tIHRoYXQgaGFzIGJlZW4gc2V0IHRvIGBudWxsYFxuXHRcdF9uZXh0RG9tOiB1bmRlZmluZWQsXG5cdFx0X2NvbXBvbmVudDogbnVsbCxcblx0XHRjb25zdHJ1Y3RvcjogdW5kZWZpbmVkLFxuXHRcdF9vcmlnaW5hbDogb3JpZ2luYWwgPT0gbnVsbCA/ICsrdm5vZGVJZCA6IG9yaWdpbmFsLFxuXHRcdF9pbmRleDogLTEsXG5cdFx0X2ZsYWdzOiAwXG5cdH07XG5cblx0Ly8gT25seSBpbnZva2UgdGhlIHZub2RlIGhvb2sgaWYgdGhpcyB3YXMgKm5vdCogYSBkaXJlY3QgY29weTpcblx0aWYgKG9yaWdpbmFsID09IG51bGwgJiYgb3B0aW9ucy52bm9kZSAhPSBudWxsKSBvcHRpb25zLnZub2RlKHZub2RlKTtcblxuXHRyZXR1cm4gdm5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG5cdHJldHVybiB7IGN1cnJlbnQ6IG51bGwgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZyYWdtZW50KHByb3BzKSB7XG5cdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRoZSBhcmd1bWVudCBpcyBhIHZhbGlkIFByZWFjdCBWTm9kZS5cbiAqIEBwYXJhbSB7Kn0gdm5vZGVcbiAqIEByZXR1cm5zIHt2bm9kZSBpcyBWTm9kZX1cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFsaWRFbGVtZW50ID0gdm5vZGUgPT5cblx0dm5vZGUgIT0gbnVsbCAmJiB2bm9kZS5jb25zdHJ1Y3RvciA9PSB1bmRlZmluZWQ7XG4iLCAiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGRpZmYsIGNvbW1pdFJvb3QgfSBmcm9tICcuL2RpZmYvaW5kZXgnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgeyBNT0RFX0hZRFJBVEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQmFzZSBDb21wb25lbnQgY2xhc3MuIFByb3ZpZGVzIGBzZXRTdGF0ZSgpYCBhbmQgYGZvcmNlVXBkYXRlKClgLCB3aGljaFxuICogdHJpZ2dlciByZW5kZXJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBUaGUgaW5pdGlhbCBjb21wb25lbnQgcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IFRoZSBpbml0aWFsIGNvbnRleHQgZnJvbSBwYXJlbnQgY29tcG9uZW50cydcbiAqIGdldENoaWxkQ29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gQmFzZUNvbXBvbmVudChwcm9wcywgY29udGV4dCkge1xuXHR0aGlzLnByb3BzID0gcHJvcHM7XG5cdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbi8qKlxuICogVXBkYXRlIGNvbXBvbmVudCBzdGF0ZSBhbmQgc2NoZWR1bGUgYSByZS1yZW5kZXIuXG4gKiBAdGhpcyB7Q29tcG9uZW50fVxuICogQHBhcmFtIHtvYmplY3QgfCAoKHM6IG9iamVjdCwgcDogb2JqZWN0KSA9PiBvYmplY3QpfSB1cGRhdGUgQSBoYXNoIG9mIHN0YXRlXG4gKiBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSB3aXRoIG5ldyB2YWx1ZXMgb3IgYSBmdW5jdGlvbiB0aGF0IGdpdmVuIHRoZSBjdXJyZW50XG4gKiBzdGF0ZSBhbmQgcHJvcHMgcmV0dXJucyBhIG5ldyBwYXJ0aWFsIHN0YXRlXG4gKiBAcGFyYW0geygpID0+IHZvaWR9IFtjYWxsYmFja10gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb25jZSBjb21wb25lbnQgc3RhdGUgaXNcbiAqIHVwZGF0ZWRcbiAqL1xuQmFzZUNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAodXBkYXRlLCBjYWxsYmFjaykge1xuXHQvLyBvbmx5IGNsb25lIHN0YXRlIHdoZW4gY29weWluZyB0byBuZXh0U3RhdGUgdGhlIGZpcnN0IHRpbWUuXG5cdGxldCBzO1xuXHRpZiAodGhpcy5fbmV4dFN0YXRlICE9IG51bGwgJiYgdGhpcy5fbmV4dFN0YXRlICE9PSB0aGlzLnN0YXRlKSB7XG5cdFx0cyA9IHRoaXMuX25leHRTdGF0ZTtcblx0fSBlbHNlIHtcblx0XHRzID0gdGhpcy5fbmV4dFN0YXRlID0gYXNzaWduKHt9LCB0aGlzLnN0YXRlKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgdXBkYXRlID09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBTb21lIGxpYnJhcmllcyBsaWtlIGBpbW1lcmAgbWFyayB0aGUgY3VycmVudCBzdGF0ZSBhcyByZWFkb25seSxcblx0XHQvLyBwcmV2ZW50aW5nIHVzIGZyb20gbXV0YXRpbmcgaXQsIHNvIHdlIG5lZWQgdG8gY2xvbmUgaXQuIFNlZSAjMjcxNlxuXHRcdHVwZGF0ZSA9IHVwZGF0ZShhc3NpZ24oe30sIHMpLCB0aGlzLnByb3BzKTtcblx0fVxuXG5cdGlmICh1cGRhdGUpIHtcblx0XHRhc3NpZ24ocywgdXBkYXRlKTtcblx0fVxuXG5cdC8vIFNraXAgdXBkYXRlIGlmIHVwZGF0ZXIgZnVuY3Rpb24gcmV0dXJuZWQgbnVsbFxuXHRpZiAodXBkYXRlID09IG51bGwpIHJldHVybjtcblxuXHRpZiAodGhpcy5fdm5vZGUpIHtcblx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdHRoaXMuX3N0YXRlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuXHRcdH1cblx0XHRlbnF1ZXVlUmVuZGVyKHRoaXMpO1xuXHR9XG59O1xuXG4vKipcbiAqIEltbWVkaWF0ZWx5IHBlcmZvcm0gYSBzeW5jaHJvbm91cyByZS1yZW5kZXIgb2YgdGhlIGNvbXBvbmVudFxuICogQHRoaXMge0NvbXBvbmVudH1cbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gW2NhbGxiYWNrXSBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciBjb21wb25lbnQgaXNcbiAqIHJlLXJlbmRlcmVkXG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdGlmICh0aGlzLl92bm9kZSkge1xuXHRcdC8vIFNldCByZW5kZXIgbW9kZSBzbyB0aGF0IHdlIGNhbiBkaWZmZXJlbnRpYXRlIHdoZXJlIHRoZSByZW5kZXIgcmVxdWVzdFxuXHRcdC8vIGlzIGNvbWluZyBmcm9tLiBXZSBuZWVkIHRoaXMgYmVjYXVzZSBmb3JjZVVwZGF0ZSBzaG91bGQgbmV2ZXIgY2FsbFxuXHRcdC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuXHRcdHRoaXMuX2ZvcmNlID0gdHJ1ZTtcblx0XHRpZiAoY2FsbGJhY2spIHRoaXMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHRlbnF1ZXVlUmVuZGVyKHRoaXMpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFjY2VwdHMgYHByb3BzYCBhbmQgYHN0YXRlYCwgYW5kIHJldHVybnMgYSBuZXcgVmlydHVhbCBET00gdHJlZSB0byBidWlsZC5cbiAqIFZpcnR1YWwgRE9NIGlzIGdlbmVyYWxseSBjb25zdHJ1Y3RlZCB2aWEgW0pTWF0oaHR0cDovL2phc29uZm9ybWF0LmNvbS93dGYtaXMtanN4KS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBQcm9wcyAoZWc6IEpTWCBhdHRyaWJ1dGVzKSByZWNlaXZlZCBmcm9tIHBhcmVudFxuICogZWxlbWVudC9jb21wb25lbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSBUaGUgY29tcG9uZW50J3MgY3VycmVudCBzdGF0ZVxuICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgQ29udGV4dCBvYmplY3QsIGFzIHJldHVybmVkIGJ5IHRoZSBuZWFyZXN0XG4gKiBhbmNlc3RvcidzIGBnZXRDaGlsZENvbnRleHQoKWBcbiAqIEByZXR1cm5zIHtDb21wb25lbnRDaGlsZHJlbiB8IHZvaWR9XG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9IEZyYWdtZW50O1xuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGx9IFtjaGlsZEluZGV4XVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9tU2libGluZyh2bm9kZSwgY2hpbGRJbmRleCkge1xuXHRpZiAoY2hpbGRJbmRleCA9PSBudWxsKSB7XG5cdFx0Ly8gVXNlIGNoaWxkSW5kZXg9PW51bGwgYXMgYSBzaWduYWwgdG8gcmVzdW1lIHRoZSBzZWFyY2ggZnJvbSB0aGUgdm5vZGUncyBzaWJsaW5nXG5cdFx0cmV0dXJuIHZub2RlLl9wYXJlbnRcblx0XHRcdD8gZ2V0RG9tU2libGluZyh2bm9kZS5fcGFyZW50LCB2bm9kZS5faW5kZXggKyAxKVxuXHRcdFx0OiBudWxsO1xuXHR9XG5cblx0bGV0IHNpYmxpbmc7XG5cdGZvciAoOyBjaGlsZEluZGV4IDwgdm5vZGUuX2NoaWxkcmVuLmxlbmd0aDsgY2hpbGRJbmRleCsrKSB7XG5cdFx0c2libGluZyA9IHZub2RlLl9jaGlsZHJlbltjaGlsZEluZGV4XTtcblxuXHRcdGlmIChzaWJsaW5nICE9IG51bGwgJiYgc2libGluZy5fZG9tICE9IG51bGwpIHtcblx0XHRcdC8vIFNpbmNlIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzIGtlZXBzIF9kb20gcG9pbnRlciBjb3JyZWN0LFxuXHRcdFx0Ly8gd2UgY2FuIHJlbHkgb24gX2RvbSB0byB0ZWxsIHVzIGlmIHRoaXMgc3VidHJlZSBjb250YWlucyBhXG5cdFx0XHQvLyByZW5kZXJlZCBET00gbm9kZSwgYW5kIHdoYXQgdGhlIGZpcnN0IHJlbmRlcmVkIERPTSBub2RlIGlzXG5cdFx0XHRyZXR1cm4gc2libGluZy5fZG9tO1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIG5vdCBmb3VuZCBhIERPTSBub2RlIGluIHRoaXMgdm5vZGUncyBjaGlsZHJlbi5cblx0Ly8gV2UgbXVzdCByZXN1bWUgZnJvbSB0aGlzIHZub2RlJ3Mgc2libGluZyAoaW4gaXQncyBwYXJlbnQgX2NoaWxkcmVuIGFycmF5KVxuXHQvLyBPbmx5IGNsaW1iIHVwIGFuZCBzZWFyY2ggdGhlIHBhcmVudCBpZiB3ZSBhcmVuJ3Qgc2VhcmNoaW5nIHRocm91Z2ggYSBET01cblx0Ly8gVk5vZGUgKG1lYW5pbmcgd2UgcmVhY2hlZCB0aGUgRE9NIHBhcmVudCBvZiB0aGUgb3JpZ2luYWwgdm5vZGUgdGhhdCBiZWdhblxuXHQvLyB0aGUgc2VhcmNoKVxuXHRyZXR1cm4gdHlwZW9mIHZub2RlLnR5cGUgPT0gJ2Z1bmN0aW9uJyA/IGdldERvbVNpYmxpbmcodm5vZGUpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGluLXBsYWNlIHJlLXJlbmRlcmluZyBvZiBhIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBjb21wb25lbnQgVGhlIGNvbXBvbmVudCB0byByZXJlbmRlclxuICovXG5mdW5jdGlvbiByZW5kZXJDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdGxldCBvbGRWTm9kZSA9IGNvbXBvbmVudC5fdm5vZGUsXG5cdFx0b2xkRG9tID0gb2xkVk5vZGUuX2RvbSxcblx0XHRjb21taXRRdWV1ZSA9IFtdLFxuXHRcdHJlZlF1ZXVlID0gW107XG5cblx0aWYgKGNvbXBvbmVudC5fcGFyZW50RG9tKSB7XG5cdFx0Y29uc3QgbmV3Vk5vZGUgPSBhc3NpZ24oe30sIG9sZFZOb2RlKTtcblx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPSBvbGRWTm9kZS5fb3JpZ2luYWwgKyAxO1xuXHRcdGlmIChvcHRpb25zLnZub2RlKSBvcHRpb25zLnZub2RlKG5ld1ZOb2RlKTtcblxuXHRcdGRpZmYoXG5cdFx0XHRjb21wb25lbnQuX3BhcmVudERvbSxcblx0XHRcdG5ld1ZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRjb21wb25lbnQuX2dsb2JhbENvbnRleHQsXG5cdFx0XHRjb21wb25lbnQuX3BhcmVudERvbS5uYW1lc3BhY2VVUkksXG5cdFx0XHRvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUgPyBbb2xkRG9tXSA6IG51bGwsXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdG9sZERvbSA9PSBudWxsID8gZ2V0RG9tU2libGluZyhvbGRWTm9kZSkgOiBvbGREb20sXG5cdFx0XHQhIShvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsO1xuXHRcdG5ld1ZOb2RlLl9wYXJlbnQuX2NoaWxkcmVuW25ld1ZOb2RlLl9pbmRleF0gPSBuZXdWTm9kZTtcblx0XHRjb21taXRSb290KGNvbW1pdFF1ZXVlLCBuZXdWTm9kZSwgcmVmUXVldWUpO1xuXG5cdFx0aWYgKG5ld1ZOb2RlLl9kb20gIT0gb2xkRG9tKSB7XG5cdFx0XHR1cGRhdGVQYXJlbnREb21Qb2ludGVycyhuZXdWTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUGFyZW50RG9tUG9pbnRlcnModm5vZGUpIHtcblx0aWYgKCh2bm9kZSA9IHZub2RlLl9wYXJlbnQpICE9IG51bGwgJiYgdm5vZGUuX2NvbXBvbmVudCAhPSBudWxsKSB7XG5cdFx0dm5vZGUuX2RvbSA9IHZub2RlLl9jb21wb25lbnQuYmFzZSA9IG51bGw7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCBjaGlsZCA9IHZub2RlLl9jaGlsZHJlbltpXTtcblx0XHRcdGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLl9kb20gIT0gbnVsbCkge1xuXHRcdFx0XHR2bm9kZS5fZG9tID0gdm5vZGUuX2NvbXBvbmVudC5iYXNlID0gY2hpbGQuX2RvbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzKHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSByZW5kZXIgcXVldWVcbiAqIEB0eXBlIHtBcnJheTxDb21wb25lbnQ+fVxuICovXG5sZXQgcmVyZW5kZXJRdWV1ZSA9IFtdO1xuXG4vKlxuICogVGhlIHZhbHVlIG9mIGBDb21wb25lbnQuZGVib3VuY2VgIG11c3QgYXN5bmNocm9ub3VzbHkgaW52b2tlIHRoZSBwYXNzZWQgaW4gY2FsbGJhY2suIEl0IGlzXG4gKiBpbXBvcnRhbnQgdGhhdCBjb250cmlidXRvcnMgdG8gUHJlYWN0IGNhbiBjb25zaXN0ZW50bHkgcmVhc29uIGFib3V0IHdoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCwgZXRjLlxuICogZG8sIGFuZCB3aGVuIHRoZWlyIGVmZmVjdHMgd2lsbCBiZSBhcHBsaWVkLiBTZWUgdGhlIGxpbmtzIGJlbG93IGZvciBzb21lIGZ1cnRoZXIgcmVhZGluZyBvbiBkZXNpZ25pbmdcbiAqIGFzeW5jaHJvbm91cyBBUElzLlxuICogKiBbRGVzaWduaW5nIEFQSXMgZm9yIEFzeW5jaHJvbnldKGh0dHBzOi8vYmxvZy5penMubWUvMjAxMy8wOC9kZXNpZ25pbmctYXBpcy1mb3ItYXN5bmNocm9ueSlcbiAqICogW0NhbGxiYWNrcyBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzXShodHRwczovL2Jsb2cub21ldGVyLmNvbS8yMDExLzA3LzI0L2NhbGxiYWNrcy1zeW5jaHJvbm91cy1hbmQtYXN5bmNocm9ub3VzLylcbiAqL1xuXG5sZXQgcHJldkRlYm91bmNlO1xuXG5jb25zdCBkZWZlciA9XG5cdHR5cGVvZiBQcm9taXNlID09ICdmdW5jdGlvbidcblx0XHQ/IFByb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSlcblx0XHQ6IHNldFRpbWVvdXQ7XG5cbi8qKlxuICogRW5xdWV1ZSBhIHJlcmVuZGVyIG9mIGEgY29tcG9uZW50XG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gYyBUaGUgY29tcG9uZW50IHRvIHJlcmVuZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnF1ZXVlUmVuZGVyKGMpIHtcblx0aWYgKFxuXHRcdCghYy5fZGlydHkgJiZcblx0XHRcdChjLl9kaXJ0eSA9IHRydWUpICYmXG5cdFx0XHRyZXJlbmRlclF1ZXVlLnB1c2goYykgJiZcblx0XHRcdCFwcm9jZXNzLl9yZXJlbmRlckNvdW50KyspIHx8XG5cdFx0cHJldkRlYm91bmNlICE9PSBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nXG5cdCkge1xuXHRcdHByZXZEZWJvdW5jZSA9IG9wdGlvbnMuZGVib3VuY2VSZW5kZXJpbmc7XG5cdFx0KHByZXZEZWJvdW5jZSB8fCBkZWZlcikocHJvY2Vzcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gYVxuICogQHBhcmFtIHtDb21wb25lbnR9IGJcbiAqL1xuY29uc3QgZGVwdGhTb3J0ID0gKGEsIGIpID0+IGEuX3Zub2RlLl9kZXB0aCAtIGIuX3Zub2RlLl9kZXB0aDtcblxuLyoqIEZsdXNoIHRoZSByZW5kZXIgcXVldWUgYnkgcmVyZW5kZXJpbmcgYWxsIHF1ZXVlZCBjb21wb25lbnRzICovXG5mdW5jdGlvbiBwcm9jZXNzKCkge1xuXHRsZXQgYztcblx0cmVyZW5kZXJRdWV1ZS5zb3J0KGRlcHRoU29ydCk7XG5cdC8vIERvbid0IHVwZGF0ZSBgcmVuZGVyQ291bnRgIHlldC4gS2VlcCBpdHMgdmFsdWUgbm9uLXplcm8gdG8gcHJldmVudCB1bm5lY2Vzc2FyeVxuXHQvLyBwcm9jZXNzKCkgY2FsbHMgZnJvbSBnZXR0aW5nIHNjaGVkdWxlZCB3aGlsZSBgcXVldWVgIGlzIHN0aWxsIGJlaW5nIGNvbnN1bWVkLlxuXHR3aGlsZSAoKGMgPSByZXJlbmRlclF1ZXVlLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKGMuX2RpcnR5KSB7XG5cdFx0XHRsZXQgcmVuZGVyUXVldWVMZW5ndGggPSByZXJlbmRlclF1ZXVlLmxlbmd0aDtcblx0XHRcdHJlbmRlckNvbXBvbmVudChjKTtcblx0XHRcdGlmIChyZXJlbmRlclF1ZXVlLmxlbmd0aCA+IHJlbmRlclF1ZXVlTGVuZ3RoKSB7XG5cdFx0XHRcdC8vIFdoZW4gaS5lLiByZXJlbmRlcmluZyBhIHByb3ZpZGVyIGFkZGl0aW9uYWwgbmV3IGl0ZW1zIGNhbiBiZSBpbmplY3RlZCwgd2Ugd2FudCB0b1xuXHRcdFx0XHQvLyBrZWVwIHRoZSBvcmRlciBmcm9tIHRvcCB0byBib3R0b20gd2l0aCB0aG9zZSBuZXcgaXRlbXMgc28gd2UgY2FuIGhhbmRsZSB0aGVtIGluIGFcblx0XHRcdFx0Ly8gc2luZ2xlIHBhc3Ncblx0XHRcdFx0cmVyZW5kZXJRdWV1ZS5zb3J0KGRlcHRoU29ydCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHByb2Nlc3MuX3JlcmVuZGVyQ291bnQgPSAwO1xufVxuXG5wcm9jZXNzLl9yZXJlbmRlckNvdW50ID0gMDtcbiIsICJpbXBvcnQgeyBJU19OT05fRElNRU5TSU9OQUwgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi4vb3B0aW9ucyc7XG5cbmZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlLCBrZXksIHZhbHVlKSB7XG5cdGlmIChrZXlbMF0gPT09ICctJykge1xuXHRcdHN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuXHR9IGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcblx0XHRzdHlsZVtrZXldID0gJyc7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9ICdudW1iZXInIHx8IElTX05PTl9ESU1FTlNJT05BTC50ZXN0KGtleSkpIHtcblx0XHRzdHlsZVtrZXldID0gdmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGVba2V5XSA9IHZhbHVlICsgJ3B4Jztcblx0fVxufVxuXG4vLyBBIGxvZ2ljYWwgY2xvY2sgdG8gc29sdmUgaXNzdWVzIGxpa2UgaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9pc3N1ZXMvMzkyNy5cbi8vIFdoZW4gdGhlIERPTSBwZXJmb3JtcyBhbiBldmVudCBpdCBsZWF2ZXMgbWljcm8tdGlja3MgaW4gYmV0d2VlbiBidWJibGluZyB1cCB3aGljaCBtZWFucyB0aGF0XG4vLyBhbiBldmVudCBjYW4gdHJpZ2dlciBvbiBhIG5ld2x5IHJlYXRlZCBET00tbm9kZSB3aGlsZSB0aGUgZXZlbnQgYnViYmxlcyB1cC5cbi8vXG4vLyBPcmlnaW5hbGx5IGluc3BpcmVkIGJ5IFZ1ZVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb3JlL2Jsb2IvY2FlYjhhNjg4MTFhMWIwZjc5L3BhY2thZ2VzL3J1bnRpbWUtZG9tL3NyYy9tb2R1bGVzL2V2ZW50cy50cyNMOTAtTDEwMSksXG4vLyBidXQgbW9kaWZpZWQgdG8gdXNlIGEgbG9naWNhbCBjbG9jayBpbnN0ZWFkIG9mIERhdGUubm93KCkgaW4gY2FzZSBldmVudCBoYW5kbGVycyBnZXQgYXR0YWNoZWRcbi8vIGFuZCBldmVudHMgZ2V0IGRpc3BhdGNoZWQgZHVyaW5nIHRoZSBzYW1lIG1pbGxpc2Vjb25kLlxuLy9cbi8vIFRoZSBjbG9jayBpcyBpbmNyZW1lbnRlZCBhZnRlciBlYWNoIG5ldyBldmVudCBkaXNwYXRjaC4gVGhpcyBhbGxvd3MgMSAwMDAgMDAwIG5ldyBldmVudHNcbi8vIHBlciBzZWNvbmQgZm9yIG92ZXIgMjgwIHllYXJzIGJlZm9yZSB0aGUgdmFsdWUgcmVhY2hlcyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAoMioqNTMgLSAxKS5cbmxldCBldmVudENsb2NrID0gMDtcblxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvbiBhIERPTSBub2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIG5vZGUgdG8gbW9kaWZ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0XG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvXG4gKiBAcGFyYW0geyp9IG9sZFZhbHVlIFRoZSBvbGQgdmFsdWUgdGhlIHByb3BlcnR5IGhhZFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzcGFjZSBXaGV0aGVyIG9yIG5vdCB0aGlzIERPTSBub2RlIGlzIGFuIFNWRyBub2RlIG9yIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoZG9tLCBuYW1lLCB2YWx1ZSwgb2xkVmFsdWUsIG5hbWVzcGFjZSkge1xuXHRsZXQgdXNlQ2FwdHVyZTtcblxuXHRvOiBpZiAobmFtZSA9PT0gJ3N0eWxlJykge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdGRvbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2Ygb2xkVmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZG9tLnN0eWxlLmNzc1RleHQgPSBvbGRWYWx1ZSA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob2xkVmFsdWUpIHtcblx0XHRcdFx0Zm9yIChuYW1lIGluIG9sZFZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKCEodmFsdWUgJiYgbmFtZSBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHNldFN0eWxlKGRvbS5zdHlsZSwgbmFtZSwgJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0Zm9yIChuYW1lIGluIHZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKCFvbGRWYWx1ZSB8fCB2YWx1ZVtuYW1lXSAhPT0gb2xkVmFsdWVbbmFtZV0pIHtcblx0XHRcdFx0XHRcdHNldFN0eWxlKGRvbS5zdHlsZSwgbmFtZSwgdmFsdWVbbmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBCZW5jaG1hcmsgZm9yIGNvbXBhcmlzb246IGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNTc0Yzk1NGJkYjk2NWI5YTAwOTY1YWM2XG5cdGVsc2UgaWYgKG5hbWVbMF0gPT09ICdvJyAmJiBuYW1lWzFdID09PSAnbicpIHtcblx0XHR1c2VDYXB0dXJlID1cblx0XHRcdG5hbWUgIT09IChuYW1lID0gbmFtZS5yZXBsYWNlKC8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLCAnJDEnKSk7XG5cblx0XHQvLyBJbmZlciBjb3JyZWN0IGNhc2luZyBmb3IgRE9NIGJ1aWx0LWluIGV2ZW50czpcblx0XHRpZiAoXG5cdFx0XHRuYW1lLnRvTG93ZXJDYXNlKCkgaW4gZG9tIHx8XG5cdFx0XHRuYW1lID09PSAnb25Gb2N1c091dCcgfHxcblx0XHRcdG5hbWUgPT09ICdvbkZvY3VzSW4nXG5cdFx0KVxuXHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgyKTtcblx0XHRlbHNlIG5hbWUgPSBuYW1lLnNsaWNlKDIpO1xuXG5cdFx0aWYgKCFkb20uX2xpc3RlbmVycykgZG9tLl9saXN0ZW5lcnMgPSB7fTtcblx0XHRkb20uX2xpc3RlbmVyc1tuYW1lICsgdXNlQ2FwdHVyZV0gPSB2YWx1ZTtcblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0aWYgKCFvbGRWYWx1ZSkge1xuXHRcdFx0XHR2YWx1ZS5fYXR0YWNoZWQgPSBldmVudENsb2NrO1xuXHRcdFx0XHRkb20uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdHVzZUNhcHR1cmUgPyBldmVudFByb3h5Q2FwdHVyZSA6IGV2ZW50UHJveHksXG5cdFx0XHRcdFx0dXNlQ2FwdHVyZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsdWUuX2F0dGFjaGVkID0gb2xkVmFsdWUuX2F0dGFjaGVkO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dXNlQ2FwdHVyZSA/IGV2ZW50UHJveHlDYXB0dXJlIDogZXZlbnRQcm94eSxcblx0XHRcdFx0dXNlQ2FwdHVyZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKG5hbWVzcGFjZSA9PSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKSB7XG5cdFx0XHQvLyBOb3JtYWxpemUgaW5jb3JyZWN0IHByb3AgdXNhZ2UgZm9yIFNWRzpcblx0XHRcdC8vIC0geGxpbms6aHJlZiAvIHhsaW5rSHJlZiAtLT4gaHJlZiAoeGxpbms6aHJlZiB3YXMgcmVtb3ZlZCBmcm9tIFNWRyBhbmQgaXNuJ3QgbmVlZGVkKVxuXHRcdFx0Ly8gLSBjbGFzc05hbWUgLS0+IGNsYXNzXG5cdFx0XHRuYW1lID0gbmFtZS5yZXBsYWNlKC94bGluayhIfDpoKS8sICdoJykucmVwbGFjZSgvc05hbWUkLywgJ3MnKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bmFtZSAhPSAnd2lkdGgnICYmXG5cdFx0XHRuYW1lICE9ICdoZWlnaHQnICYmXG5cdFx0XHRuYW1lICE9ICdocmVmJyAmJlxuXHRcdFx0bmFtZSAhPSAnbGlzdCcgJiZcblx0XHRcdG5hbWUgIT0gJ2Zvcm0nICYmXG5cdFx0XHQvLyBEZWZhdWx0IHZhbHVlIGluIGJyb3dzZXJzIGlzIGAtMWAgYW5kIGFuIGVtcHR5IHN0cmluZyBpc1xuXHRcdFx0Ly8gY2FzdCB0byBgMGAgaW5zdGVhZFxuXHRcdFx0bmFtZSAhPSAndGFiSW5kZXgnICYmXG5cdFx0XHRuYW1lICE9ICdkb3dubG9hZCcgJiZcblx0XHRcdG5hbWUgIT0gJ3Jvd1NwYW4nICYmXG5cdFx0XHRuYW1lICE9ICdjb2xTcGFuJyAmJlxuXHRcdFx0bmFtZSAhPSAncm9sZScgJiZcblx0XHRcdG5hbWUgIT0gJ3BvcG92ZXInICYmXG5cdFx0XHRuYW1lIGluIGRvbVxuXHRcdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZG9tW25hbWVdID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XG5cdFx0XHRcdC8vIGxhYmVsbGVkIGJyZWFrIGlzIDFiIHNtYWxsZXIgaGVyZSB0aGFuIGEgcmV0dXJuIHN0YXRlbWVudCAoc29ycnkpXG5cdFx0XHRcdGJyZWFrIG87XG5cdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdH1cblxuXHRcdC8vIGFyaWEtIGFuZCBkYXRhLSBhdHRyaWJ1dGVzIGhhdmUgbm8gYm9vbGVhbiByZXByZXNlbnRhdGlvbi5cblx0XHQvLyBBIGBmYWxzZWAgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGF0dHJpYnV0ZSBub3QgYmVpbmdcblx0XHQvLyBwcmVzZW50LCBzbyB3ZSBjYW4ndCByZW1vdmUgaXQuIEZvciBub24tYm9vbGVhbiBhcmlhXG5cdFx0Ly8gYXR0cmlidXRlcyB3ZSBjb3VsZCB0cmVhdCBmYWxzZSBhcyBhIHJlbW92YWwsIGJ1dCB0aGVcblx0XHQvLyBhbW91bnQgb2YgZXhjZXB0aW9ucyB3b3VsZCBjb3N0IHRvbyBtYW55IGJ5dGVzLiBPbiB0b3Agb2Zcblx0XHQvLyB0aGF0IG90aGVyIGZyYW1ld29ya3MgZ2VuZXJhbGx5IHN0cmluZ2lmeSBgZmFsc2VgLlxuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBuZXZlciBzZXJpYWxpemUgZnVuY3Rpb25zIGFzIGF0dHJpYnV0ZSB2YWx1ZXNcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlICE9PSBmYWxzZSB8fCBuYW1lWzRdID09PSAnLScpKSB7XG5cdFx0XHRkb20uc2V0QXR0cmlidXRlKG5hbWUsIG5hbWUgPT0gJ3BvcG92ZXInICYmIHZhbHVlID09IHRydWUgPyAnJyA6IHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXZlbnQgcHJveHkgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZUNhcHR1cmUgSXMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBjYXB0dXJlIHBoYXNlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXZlbnRQcm94eSh1c2VDYXB0dXJlKSB7XG5cdC8qKlxuXHQgKiBQcm94eSBhbiBldmVudCB0byBob29rZWQgZXZlbnQgaGFuZGxlcnNcblx0ICogQHBhcmFtIHtQcmVhY3RFdmVudH0gZSBUaGUgZXZlbnQgb2JqZWN0IGZyb20gdGhlIGJyb3dzZXJcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJldHVybiBmdW5jdGlvbiAoZSkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcblx0XHRcdGNvbnN0IGV2ZW50SGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tlLnR5cGUgKyB1c2VDYXB0dXJlXTtcblx0XHRcdGlmIChlLl9kaXNwYXRjaGVkID09IG51bGwpIHtcblx0XHRcdFx0ZS5fZGlzcGF0Y2hlZCA9IGV2ZW50Q2xvY2srKztcblxuXHRcdFx0XHQvLyBXaGVuIGBlLl9kaXNwYXRjaGVkYCBpcyBzbWFsbGVyIHRoYW4gdGhlIHRpbWUgd2hlbiB0aGUgdGFyZ2V0ZWQgZXZlbnRcblx0XHRcdFx0Ly8gaGFuZGxlciB3YXMgYXR0YWNoZWQgd2Uga25vdyB3ZSBoYXZlIGJ1YmJsZWQgdXAgdG8gYW4gZWxlbWVudCB0aGF0IHdhcyBhZGRlZFxuXHRcdFx0XHQvLyBkdXJpbmcgcGF0Y2hpbmcgdGhlIERPTS5cblx0XHRcdH0gZWxzZSBpZiAoZS5fZGlzcGF0Y2hlZCA8IGV2ZW50SGFuZGxlci5fYXR0YWNoZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGV2ZW50SGFuZGxlcihvcHRpb25zLmV2ZW50ID8gb3B0aW9ucy5ldmVudChlKSA6IGUpO1xuXHRcdH1cblx0fTtcbn1cblxuY29uc3QgZXZlbnRQcm94eSA9IGNyZWF0ZUV2ZW50UHJveHkoZmFsc2UpO1xuY29uc3QgZXZlbnRQcm94eUNhcHR1cmUgPSBjcmVhdGVFdmVudFByb3h5KHRydWUpO1xuIiwgImltcG9ydCB7IGVucXVldWVSZW5kZXIgfSBmcm9tICcuL2NvbXBvbmVudCc7XG5cbmV4cG9ydCBsZXQgaSA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY29udGV4dElkKSB7XG5cdGNvbnRleHRJZCA9ICdfX2NDJyArIGkrKztcblxuXHRjb25zdCBjb250ZXh0ID0ge1xuXHRcdF9pZDogY29udGV4dElkLFxuXHRcdF9kZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcblx0XHQvKiogQHR5cGUge0Z1bmN0aW9uQ29tcG9uZW50fSAqL1xuXHRcdENvbnN1bWVyKHByb3BzLCBjb250ZXh0VmFsdWUpIHtcblx0XHRcdC8vIHJldHVybiBwcm9wcy5jaGlsZHJlbihcblx0XHRcdC8vIFx0Y29udGV4dFtjb250ZXh0SWRdID8gY29udGV4dFtjb250ZXh0SWRdLnByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlXG5cdFx0XHQvLyApO1xuXHRcdFx0cmV0dXJuIHByb3BzLmNoaWxkcmVuKGNvbnRleHRWYWx1ZSk7XG5cdFx0fSxcblx0XHQvKiogQHR5cGUge0Z1bmN0aW9uQ29tcG9uZW50fSAqL1xuXHRcdFByb3ZpZGVyKHByb3BzKSB7XG5cdFx0XHRpZiAoIXRoaXMuZ2V0Q2hpbGRDb250ZXh0KSB7XG5cdFx0XHRcdC8qKiBAdHlwZSB7U2V0PENvbXBvbmVudD4gfCBudWxsfSAqL1xuXHRcdFx0XHRsZXQgc3VicyA9IG5ldyBTZXQoKTtcblx0XHRcdFx0bGV0IGN0eCA9IHt9O1xuXHRcdFx0XHRjdHhbY29udGV4dElkXSA9IHRoaXM7XG5cblx0XHRcdFx0dGhpcy5nZXRDaGlsZENvbnRleHQgPSAoKSA9PiBjdHg7XG5cblx0XHRcdFx0dGhpcy5jb21wb25lbnRXaWxsVW5tb3VudCA9ICgpID0+IHtcblx0XHRcdFx0XHRzdWJzID0gbnVsbDtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChfcHJvcHMpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gX3Byb3BzLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHRzdWJzLmZvckVhY2goYyA9PiB7XG5cdFx0XHRcdFx0XHRcdGMuX2ZvcmNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZW5xdWV1ZVJlbmRlcihjKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLnN1YiA9IGMgPT4ge1xuXHRcdFx0XHRcdHN1YnMuYWRkKGMpO1xuXHRcdFx0XHRcdGxldCBvbGQgPSBjLmNvbXBvbmVudFdpbGxVbm1vdW50O1xuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbFVubW91bnQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoc3Vicykge1xuXHRcdFx0XHRcdFx0XHRzdWJzLmRlbGV0ZShjKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChvbGQpIG9sZC5jYWxsKGMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcblx0XHR9XG5cdH07XG5cblx0Ly8gRGV2dG9vbHMgbmVlZHMgYWNjZXNzIHRvIHRoZSBjb250ZXh0IG9iamVjdCB3aGVuIGl0XG5cdC8vIGVuY291bnRlcnMgYSBQcm92aWRlci4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydFxuXHQvLyBzZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gdGhlIGNvbnRleHQgb2JqZWN0IGluc3RlYWRcblx0Ly8gb2Ygb24gdGhlIGNvbXBvbmVudCBpdHNlbGYuIFNlZTpcblx0Ly8gaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2NvbnRleHQuaHRtbCNjb250ZXh0ZGlzcGxheW5hbWVcblxuXHRyZXR1cm4gKGNvbnRleHQuUHJvdmlkZXIuX2NvbnRleHRSZWYgPSBjb250ZXh0LkNvbnN1bWVyLmNvbnRleHRUeXBlID1cblx0XHRjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBkaWZmLCB1bm1vdW50LCBhcHBseVJlZiB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUsIEZyYWdtZW50IH0gZnJvbSAnLi4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgRU1QVFlfT0JKLCBFTVBUWV9BUlIsIElOU0VSVF9WTk9ERSwgTUFUQ0hFRCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBnZXREb21TaWJsaW5nIH0gZnJvbSAnLi4vY29tcG9uZW50JztcblxuLyoqXG4gKiBEaWZmIHRoZSBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHdob3NlIGNoaWxkcmVuIGFyZSBiZWluZ1xuICogZGlmZmVkXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVuW119IHJlbmRlclJlc3VsdFxuICogQHBhcmFtIHtWTm9kZX0gbmV3UGFyZW50Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGUgd2hvc2UgY2hpbGRyZW4gc2hvdWxkIGJlXG4gKiBkaWZmJ2VkIGFnYWluc3Qgb2xkUGFyZW50Vk5vZGVcbiAqIEBwYXJhbSB7Vk5vZGV9IG9sZFBhcmVudFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlIHdob3NlIGNoaWxkcmVuIHNob3VsZCBiZVxuICogZGlmZidlZCBhZ2FpbnN0IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdCAtIG1vZGlmaWVkIGJ5XG4gKiBnZXRDaGlsZENvbnRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2UgQ3VycmVudCBuYW1lc3BhY2Ugb2YgdGhlIERPTSBub2RlIChIVE1MLCBTVkcsIG9yIE1hdGhNTClcbiAqIEBwYXJhbSB7QXJyYXk8UHJlYWN0RWxlbWVudD59IGV4Y2Vzc0RvbUNoaWxkcmVuXG4gKiBAcGFyYW0ge0FycmF5PENvbXBvbmVudD59IGNvbW1pdFF1ZXVlIExpc3Qgb2YgY29tcG9uZW50cyB3aGljaCBoYXZlIGNhbGxiYWNrc1xuICogdG8gaW52b2tlIGluIGNvbW1pdFJvb3RcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gb2xkRG9tIFRoZSBjdXJyZW50IGF0dGFjaGVkIERPTSBlbGVtZW50IGFueSBuZXcgZG9tXG4gKiBlbGVtZW50cyBzaG91bGQgYmUgcGxhY2VkIGFyb3VuZC4gTGlrZWx5IGBudWxsYCBvbiBmaXJzdCByZW5kZXIgKGV4Y2VwdCB3aGVuXG4gKiBoeWRyYXRpbmcpLiBDYW4gYmUgYSBzaWJsaW5nIERPTSBlbGVtZW50IHdoZW4gZGlmZmluZyBGcmFnbWVudHMgdGhhdCBoYXZlXG4gKiBzaWJsaW5ncy4gSW4gbW9zdCBjYXNlcywgaXQgc3RhcnRzIG91dCBhcyBgb2xkQ2hpbGRyZW5bMF0uX2RvbWAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHlkcmF0aW5nIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBpbiBoeWRyYXRpb25cbiAqIEBwYXJhbSB7YW55W119IHJlZlF1ZXVlIGFuIGFycmF5IG9mIGVsZW1lbnRzIG5lZWRlZCB0byBpbnZva2UgcmVmc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkNoaWxkcmVuKFxuXHRwYXJlbnREb20sXG5cdHJlbmRlclJlc3VsdCxcblx0bmV3UGFyZW50Vk5vZGUsXG5cdG9sZFBhcmVudFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRuYW1lc3BhY2UsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0b2xkRG9tLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHRsZXQgaSxcblx0XHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRcdG9sZFZOb2RlLFxuXHRcdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdFx0Y2hpbGRWTm9kZSxcblx0XHQvKiogQHR5cGUge1ByZWFjdEVsZW1lbnR9ICovXG5cdFx0bmV3RG9tLFxuXHRcdC8qKiBAdHlwZSB7UHJlYWN0RWxlbWVudH0gKi9cblx0XHRmaXJzdENoaWxkRG9tO1xuXG5cdC8vIFRoaXMgaXMgYSBjb21wcmVzc2lvbiBvZiBvbGRQYXJlbnRWTm9kZSE9bnVsbCAmJiBvbGRQYXJlbnRWTm9kZSAhPSBFTVBUWV9PQkogJiYgb2xkUGFyZW50Vk5vZGUuX2NoaWxkcmVuIHx8IEVNUFRZX0FSUlxuXHQvLyBhcyBFTVBUWV9PQkouX2NoaWxkcmVuIHNob3VsZCBiZSBgdW5kZWZpbmVkYC5cblx0LyoqIEB0eXBlIHtWTm9kZVtdfSAqL1xuXHRsZXQgb2xkQ2hpbGRyZW4gPSAob2xkUGFyZW50Vk5vZGUgJiYgb2xkUGFyZW50Vk5vZGUuX2NoaWxkcmVuKSB8fCBFTVBUWV9BUlI7XG5cblx0bGV0IG5ld0NoaWxkcmVuTGVuZ3RoID0gcmVuZGVyUmVzdWx0Lmxlbmd0aDtcblxuXHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IG9sZERvbTtcblx0Y29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheShuZXdQYXJlbnRWTm9kZSwgcmVuZGVyUmVzdWx0LCBvbGRDaGlsZHJlbik7XG5cdG9sZERvbSA9IG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tO1xuXG5cdGZvciAoaSA9IDA7IGkgPCBuZXdDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG5cdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXTtcblx0XHRpZiAoY2hpbGRWTm9kZSA9PSBudWxsKSBjb250aW51ZTtcblxuXHRcdC8vIEF0IHRoaXMgcG9pbnQsIGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkgaGFzIGFzc2lnbmVkIF9pbmRleCB0byBiZSB0aGVcblx0XHQvLyBtYXRjaGluZ0luZGV4IGZvciB0aGlzIFZOb2RlJ3Mgb2xkVk5vZGUgKG9yIC0xIGlmIHRoZXJlIGlzIG5vIG9sZFZOb2RlKS5cblx0XHRpZiAoY2hpbGRWTm9kZS5faW5kZXggPT09IC0xKSB7XG5cdFx0XHRvbGRWTm9kZSA9IEVNUFRZX09CSjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlbltjaGlsZFZOb2RlLl9pbmRleF0gfHwgRU1QVFlfT0JKO1xuXHRcdH1cblxuXHRcdC8vIFVwZGF0ZSBjaGlsZFZOb2RlLl9pbmRleCB0byBpdHMgZmluYWwgaW5kZXhcblx0XHRjaGlsZFZOb2RlLl9pbmRleCA9IGk7XG5cblx0XHQvLyBNb3JwaCB0aGUgb2xkIGVsZW1lbnQgaW50byB0aGUgbmV3IG9uZSwgYnV0IGRvbid0IGFwcGVuZCBpdCB0byB0aGUgZG9tIHlldFxuXHRcdGRpZmYoXG5cdFx0XHRwYXJlbnREb20sXG5cdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdG9sZERvbSxcblx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXG5cdFx0Ly8gQWRqdXN0IERPTSBub2Rlc1xuXHRcdG5ld0RvbSA9IGNoaWxkVk5vZGUuX2RvbTtcblx0XHRpZiAoY2hpbGRWTm9kZS5yZWYgJiYgb2xkVk5vZGUucmVmICE9IGNoaWxkVk5vZGUucmVmKSB7XG5cdFx0XHRpZiAob2xkVk5vZGUucmVmKSB7XG5cdFx0XHRcdGFwcGx5UmVmKG9sZFZOb2RlLnJlZiwgbnVsbCwgY2hpbGRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0XHRyZWZRdWV1ZS5wdXNoKFxuXHRcdFx0XHRjaGlsZFZOb2RlLnJlZixcblx0XHRcdFx0Y2hpbGRWTm9kZS5fY29tcG9uZW50IHx8IG5ld0RvbSxcblx0XHRcdFx0Y2hpbGRWTm9kZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoZmlyc3RDaGlsZERvbSA9PSBudWxsICYmIG5ld0RvbSAhPSBudWxsKSB7XG5cdFx0XHRmaXJzdENoaWxkRG9tID0gbmV3RG9tO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzICYgSU5TRVJUX1ZOT0RFIHx8XG5cdFx0XHRvbGRWTm9kZS5fY2hpbGRyZW4gPT09IGNoaWxkVk5vZGUuX2NoaWxkcmVuXG5cdFx0KSB7XG5cdFx0XHRvbGREb20gPSBpbnNlcnQoY2hpbGRWTm9kZSwgb2xkRG9tLCBwYXJlbnREb20pO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZS50eXBlID09ICdmdW5jdGlvbicgJiZcblx0XHRcdGNoaWxkVk5vZGUuX25leHREb20gIT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Ly8gU2luY2UgRnJhZ21lbnRzIG9yIGNvbXBvbmVudHMgdGhhdCByZXR1cm4gRnJhZ21lbnQgbGlrZSBWTm9kZXMgY2FuXG5cdFx0XHQvLyBjb250YWluIG11bHRpcGxlIERPTSBub2RlcyBhcyB0aGUgc2FtZSBsZXZlbCwgY29udGludWUgdGhlIGRpZmYgZnJvbVxuXHRcdFx0Ly8gdGhlIHNpYmxpbmcgb2YgbGFzdCBET00gY2hpbGQgb2YgdGhpcyBjaGlsZCBWTm9kZVxuXHRcdFx0b2xkRG9tID0gY2hpbGRWTm9kZS5fbmV4dERvbTtcblx0XHR9IGVsc2UgaWYgKG5ld0RvbSkge1xuXHRcdFx0b2xkRG9tID0gbmV3RG9tLm5leHRTaWJsaW5nO1xuXHRcdH1cblxuXHRcdC8vIEVhZ2VybHkgY2xlYW51cCBfbmV4dERvbS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJzaXN0IHRoZSB2YWx1ZSBiZWNhdXNlIGl0XG5cdFx0Ly8gaXMgb25seSB1c2VkIGJ5IGBkaWZmQ2hpbGRyZW5gIHRvIGRldGVybWluZSB3aGVyZSB0byByZXN1bWUgdGhlIGRpZmZcblx0XHQvLyBhZnRlciBkaWZmaW5nIENvbXBvbmVudHMgYW5kIEZyYWdtZW50cy4gT25jZSB3ZSBzdG9yZSBpdCB0aGUgbmV4dERPTVxuXHRcdC8vIGxvY2FsIHZhciwgd2UgY2FuIGNsZWFuIHVwIHRoZSBwcm9wZXJ0eS4gQWxzbyBwcmV2ZW50cyB1cyBoYW5naW5nIG9uIHRvXG5cdFx0Ly8gRE9NIG5vZGVzIHRoYXQgbWF5IGhhdmUgYmVlbiB1bm1vdW50ZWQuXG5cdFx0Y2hpbGRWTm9kZS5fbmV4dERvbSA9IHVuZGVmaW5lZDtcblxuXHRcdC8vIFVuc2V0IGRpZmZpbmcgZmxhZ3Ncblx0XHRjaGlsZFZOb2RlLl9mbGFncyAmPSB+KElOU0VSVF9WTk9ERSB8IE1BVENIRUQpO1xuXHR9XG5cblx0Ly8gVE9ETzogV2l0aCBuZXcgY2hpbGQgZGlmZmluZyBhbGdvLCBjb25zaWRlciBhbHQgd2F5cyB0byBkaWZmIEZyYWdtZW50cy5cblx0Ly8gU3VjaCBhcyBkcm9wcGluZyBvbGREb20gYW5kIG1vdmluZyBmcmFnbWVudHMgaW4gcGxhY2Vcblx0Ly9cblx0Ly8gQmVjYXVzZSB0aGUgbmV3UGFyZW50Vk5vZGUgaXMgRnJhZ21lbnQtbGlrZSwgd2UgbmVlZCB0byBzZXQgaXQnc1xuXHQvLyBfbmV4dERvbSBwcm9wZXJ0eSB0byB0aGUgbmV4dFNpYmxpbmcgb2YgaXRzIGxhc3QgY2hpbGQgRE9NIG5vZGUuXG5cdC8vXG5cdC8vIGBvbGREb21gIGNvbnRhaW5zIHRoZSBjb3JyZWN0IHZhbHVlIGhlcmUgYmVjYXVzZSBpZiB0aGUgbGFzdCBjaGlsZFxuXHQvLyBpcyBhIEZyYWdtZW50LWxpa2UsIHRoZW4gb2xkRG9tIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHRvIHRoYXQgY2hpbGQncyBfbmV4dERvbS5cblx0Ly8gSWYgdGhlIGxhc3QgY2hpbGQgaXMgYSBET00gVk5vZGUsIHRoZW4gb2xkRG9tIHdpbGwgYmUgc2V0IHRvIHRoYXQgRE9NXG5cdC8vIG5vZGUncyBuZXh0U2libGluZy5cblx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBvbGREb207XG5cdG5ld1BhcmVudFZOb2RlLl9kb20gPSBmaXJzdENoaWxkRG9tO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVuW119IHJlbmRlclJlc3VsdFxuICogQHBhcmFtIHtWTm9kZVtdfSBvbGRDaGlsZHJlblxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3ROZXdDaGlsZHJlbkFycmF5KG5ld1BhcmVudFZOb2RlLCByZW5kZXJSZXN1bHQsIG9sZENoaWxkcmVuKSB7XG5cdC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuXHRsZXQgaTtcblx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0bGV0IGNoaWxkVk5vZGU7XG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGxldCBvbGRWTm9kZTtcblxuXHRjb25zdCBuZXdDaGlsZHJlbkxlbmd0aCA9IHJlbmRlclJlc3VsdC5sZW5ndGg7XG5cdGxldCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZENoaWxkcmVuLmxlbmd0aCxcblx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbiA9IG9sZENoaWxkcmVuTGVuZ3RoO1xuXG5cdGxldCBza2V3ID0gMDtcblxuXHRuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW4gPSBbXTtcblx0Zm9yIChpID0gMDsgaSA8IG5ld0NoaWxkcmVuTGVuZ3RoOyBpKyspIHtcblx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGFyZSByZXVzaW5nIHRoZSBjaGlsZFZOb2RlIHZhcmlhYmxlIHRvIGhvbGQgYm90aCB0aGVcblx0XHQvLyBwcmUgYW5kIHBvc3Qgbm9ybWFsaXplZCBjaGlsZFZOb2RlXG5cdFx0Y2hpbGRWTm9kZSA9IHJlbmRlclJlc3VsdFtpXTtcblxuXHRcdGlmIChcblx0XHRcdGNoaWxkVk5vZGUgPT0gbnVsbCB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2Jvb2xlYW4nIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnZnVuY3Rpb24nXG5cdFx0KSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gbnVsbDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHQvLyBJZiB0aGlzIG5ld1ZOb2RlIGlzIGJlaW5nIHJldXNlZCAoZS5nLiA8ZGl2PntyZXVzZX17cmV1c2V9PC9kaXY+KSBpbiB0aGUgc2FtZSBkaWZmLFxuXHRcdC8vIG9yIHdlIGFyZSByZW5kZXJpbmcgYSBjb21wb25lbnQgKGUuZy4gc2V0U3RhdGUpIGNvcHkgdGhlIG9sZFZOb2RlcyBzbyBpdCBjYW4gaGF2ZVxuXHRcdC8vIGl0J3Mgb3duIERPTSAmIGV0Yy4gcG9pbnRlcnNcblx0XHRlbHNlIGlmIChcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdzdHJpbmcnIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnbnVtYmVyJyB8fFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhbGlkLXR5cGVvZlxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2JpZ2ludCcgfHxcblx0XHRcdGNoaWxkVk5vZGUuY29uc3RydWN0b3IgPT0gU3RyaW5nXG5cdFx0KSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY3JlYXRlVk5vZGUoXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdGNoaWxkVk5vZGUsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChpc0FycmF5KGNoaWxkVk5vZGUpKSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY3JlYXRlVk5vZGUoXG5cdFx0XHRcdEZyYWdtZW50LFxuXHRcdFx0XHR7IGNoaWxkcmVuOiBjaGlsZFZOb2RlIH0sXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjaGlsZFZOb2RlLmNvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgJiYgY2hpbGRWTm9kZS5fZGVwdGggPiAwKSB7XG5cdFx0XHQvLyBWTm9kZSBpcyBhbHJlYWR5IGluIHVzZSwgY2xvbmUgaXQuIFRoaXMgY2FuIGhhcHBlbiBpbiB0aGUgZm9sbG93aW5nXG5cdFx0XHQvLyBzY2VuYXJpbzpcblx0XHRcdC8vICAgY29uc3QgcmV1c2UgPSA8ZGl2IC8+XG5cdFx0XHQvLyAgIDxkaXY+e3JldXNlfTxzcGFuIC8+e3JldXNlfTwvZGl2PlxuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNyZWF0ZVZOb2RlKFxuXHRcdFx0XHRjaGlsZFZOb2RlLnR5cGUsXG5cdFx0XHRcdGNoaWxkVk5vZGUucHJvcHMsXG5cdFx0XHRcdGNoaWxkVk5vZGUua2V5LFxuXHRcdFx0XHRjaGlsZFZOb2RlLnJlZiA/IGNoaWxkVk5vZGUucmVmIDogbnVsbCxcblx0XHRcdFx0Y2hpbGRWTm9kZS5fb3JpZ2luYWxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjaGlsZFZOb2RlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNrZXdlZEluZGV4ID0gaSArIHNrZXc7XG5cdFx0Y2hpbGRWTm9kZS5fcGFyZW50ID0gbmV3UGFyZW50Vk5vZGU7XG5cdFx0Y2hpbGRWTm9kZS5fZGVwdGggPSBuZXdQYXJlbnRWTm9kZS5fZGVwdGggKyAxO1xuXG5cdFx0Ly8gVGVtcG9yYXJpbHkgc3RvcmUgdGhlIG1hdGNoaW5nSW5kZXggb24gdGhlIF9pbmRleCBwcm9wZXJ0eSBzbyB3ZSBjYW4gcHVsbFxuXHRcdC8vIG91dCB0aGUgb2xkVk5vZGUgaW4gZGlmZkNoaWxkcmVuLiBXZSdsbCBvdmVycmlkZSB0aGlzIHRvIHRoZSBWTm9kZSdzXG5cdFx0Ly8gZmluYWwgaW5kZXggYWZ0ZXIgdXNpbmcgdGhpcyBwcm9wZXJ0eSB0byBnZXQgdGhlIG9sZFZOb2RlXG5cdFx0Y29uc3QgbWF0Y2hpbmdJbmRleCA9IChjaGlsZFZOb2RlLl9pbmRleCA9IGZpbmRNYXRjaGluZ0luZGV4KFxuXHRcdFx0Y2hpbGRWTm9kZSxcblx0XHRcdG9sZENoaWxkcmVuLFxuXHRcdFx0c2tld2VkSW5kZXgsXG5cdFx0XHRyZW1haW5pbmdPbGRDaGlsZHJlblxuXHRcdCkpO1xuXG5cdFx0b2xkVk5vZGUgPSBudWxsO1xuXHRcdGlmIChtYXRjaGluZ0luZGV4ICE9PSAtMSkge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblttYXRjaGluZ0luZGV4XTtcblx0XHRcdHJlbWFpbmluZ09sZENoaWxkcmVuLS07XG5cdFx0XHRpZiAob2xkVk5vZGUpIHtcblx0XHRcdFx0b2xkVk5vZGUuX2ZsYWdzIHw9IE1BVENIRUQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSGVyZSwgd2UgZGVmaW5lIGlzTW91bnRpbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgc2tldyBkaWZmaW5nXG5cdFx0Ly8gYWxnb3JpdGhtLiBOb2RlcyB0aGF0IGFyZSB1bnN1c3BlbmRpbmcgYXJlIGNvbnNpZGVyZWQgbW91bnRpbmcgYW5kIHdlIGRldGVjdFxuXHRcdC8vIHRoaXMgYnkgY2hlY2tpbmcgaWYgb2xkVk5vZGUuX29yaWdpbmFsID09PSBudWxsXG5cdFx0Y29uc3QgaXNNb3VudGluZyA9IG9sZFZOb2RlID09IG51bGwgfHwgb2xkVk5vZGUuX29yaWdpbmFsID09PSBudWxsO1xuXG5cdFx0aWYgKGlzTW91bnRpbmcpIHtcblx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID09IC0xKSB7XG5cdFx0XHRcdHNrZXctLTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UgYXJlIG1vdW50aW5nIGEgRE9NIFZOb2RlLCBtYXJrIGl0IGZvciBpbnNlcnRpb25cblx0XHRcdGlmICh0eXBlb2YgY2hpbGRWTm9kZS50eXBlICE9ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgfD0gSU5TRVJUX1ZOT0RFO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCAhPT0gc2tld2VkSW5kZXgpIHtcblx0XHRcdC8vIFdoZW4gd2UgbW92ZSBlbGVtZW50cyBhcm91bmQgaS5lLiBbMCwgMSwgMl0gLS0+IFsxLCAwLCAyXVxuXHRcdFx0Ly8gLS0+IHdlIGRpZmYgMSwgd2UgZmluZCBpdCBhdCBwb3NpdGlvbiAxIHdoaWxlIG91ciBza2V3ZWQgaW5kZXggaXMgMCBhbmQgb3VyIHNrZXcgaXMgMFxuXHRcdFx0Ly8gICAgIHdlIHNldCB0aGUgc2tldyB0byAxIGFzIHdlIGZvdW5kIGFuIG9mZnNldC5cblx0XHRcdC8vIC0tPiB3ZSBkaWZmIDAsIHdlIGZpbmQgaXQgYXQgcG9zaXRpb24gMCB3aGlsZSBvdXIgc2tld2VkIGluZGV4IGlzIGF0IDIgYW5kIG91ciBza2V3IGlzIDFcblx0XHRcdC8vICAgICB0aGlzIG1ha2VzIHVzIGluY3JlYXNlIHRoZSBza2V3IGFnYWluLlxuXHRcdFx0Ly8gLS0+IHdlIGRpZmYgMiwgd2UgZmluZCBpdCBhdCBwb3NpdGlvbiAyIHdoaWxlIG91ciBza2V3ZWQgaW5kZXggaXMgYXQgNCBhbmQgb3VyIHNrZXcgaXMgMlxuXHRcdFx0Ly9cblx0XHRcdC8vIHRoaXMgYmVjb21lcyBhbiBvcHRpbWl6YXRpb24gcXVlc3Rpb24gd2hlcmUgY3VycmVudGx5IHdlIHNlZSBhIDEgZWxlbWVudCBvZmZzZXQgYXMgYW4gaW5zZXJ0aW9uXG5cdFx0XHQvLyBvciBkZWxldGlvbiBpLmUuIHdlIG9wdGltaXplIGZvciBbMCwgMSwgMl0gLS0+IFs5LCAwLCAxLCAyXVxuXHRcdFx0Ly8gd2hpbGUgYSBtb3JlIHRoYW4gMSBvZmZzZXQgd2Ugc2VlIGFzIGEgc3dhcC5cblx0XHRcdC8vIFdlIGNvdWxkIHByb2JhYmx5IGJ1aWxkIGhldXJpc3RpY3MgZm9yIGhhdmluZyBhbiBvcHRpbWl6ZWQgY291cnNlIG9mIGFjdGlvbiBoZXJlIGFzIHdlbGwsIGJ1dFxuXHRcdFx0Ly8gbWlnaHQgZ28gYXQgdGhlIGNvc3Qgb2Ygc29tZSBieXRlcy5cblx0XHRcdC8vXG5cdFx0XHQvLyBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgZm9yIGkuZS4gb25seSBzd2FwcyB3ZSdkIGp1c3QgZG8gdGhlIGxhc3QgdHdvIGNvZGUtYnJhbmNoZXMgYW5kIGhhdmVcblx0XHRcdC8vIG9ubHkgdGhlIGZpcnN0IGl0ZW0gYmUgYSByZS1zY291dGluZyBhbmQgYWxsIHRoZSBvdGhlcnMgZmFsbCBpbiB0aGVpciBza2V3ZWQgY291bnRlci1wYXJ0LlxuXHRcdFx0Ly8gV2UgY291bGQgYWxzbyBmdXJ0aGVyIG9wdGltaXplIGZvciBzd2Fwc1xuXHRcdFx0aWYgKG1hdGNoaW5nSW5kZXggPT0gc2tld2VkSW5kZXggLSAxKSB7XG5cdFx0XHRcdHNrZXctLTtcblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCA9PSBza2V3ZWRJbmRleCArIDEpIHtcblx0XHRcdFx0c2tldysrO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG1hdGNoaW5nSW5kZXggPiBza2V3ZWRJbmRleCkge1xuXHRcdFx0XHRcdHNrZXctLTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRza2V3Kys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIHRoaXMgVk5vZGUncyBET00gaWYgdGhlIG9yaWdpbmFsIGluZGV4IChtYXRjaGluZ0luZGV4KSBkb2Vzbid0XG5cdFx0XHRcdC8vIG1hdGNoIHRoZSBuZXcgc2tldyBpbmRleCAoaSArIG5ldyBza2V3KVxuXHRcdFx0XHQvLyBJbiB0aGUgZm9ybWVyIHR3byBicmFuY2hlcyB3ZSBrbm93IHRoYXQgaXQgbWF0Y2hlcyBhZnRlciBza2V3aW5nXG5cdFx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzIHw9IElOU0VSVF9WTk9ERTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgcmVtYWluaW5nIG9sZENoaWxkcmVuIGlmIHRoZXJlIGFyZSBhbnkuIExvb3AgZm9yd2FyZHMgc28gdGhhdCBhcyB3ZVxuXHQvLyB1bm1vdW50IERPTSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG9sZENoaWxkcmVuLCB3ZSBjYW4gYWRqdXN0IG9sZERvbSB0b1xuXHQvLyBwb2ludCB0byB0aGUgbmV4dCBjaGlsZCwgd2hpY2ggbmVlZHMgdG8gYmUgdGhlIGZpcnN0IERPTSBub2RlIHRoYXQgd29uJ3QgYmVcblx0Ly8gdW5tb3VudGVkLlxuXHRpZiAocmVtYWluaW5nT2xkQ2hpbGRyZW4pIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGkrKykge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlbltpXTtcblx0XHRcdGlmIChvbGRWTm9kZSAhPSBudWxsICYmIChvbGRWTm9kZS5fZmxhZ3MgJiBNQVRDSEVEKSA9PT0gMCkge1xuXHRcdFx0XHRpZiAob2xkVk5vZGUuX2RvbSA9PSBuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSkge1xuXHRcdFx0XHRcdG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tID0gZ2V0RG9tU2libGluZyhvbGRWTm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR1bm1vdW50KG9sZFZOb2RlLCBvbGRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gcGFyZW50Vk5vZGVcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gb2xkRG9tXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbVxuICogQHJldHVybnMge1ByZWFjdEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGluc2VydChwYXJlbnRWTm9kZSwgb2xkRG9tLCBwYXJlbnREb20pIHtcblx0Ly8gTm90ZTogVk5vZGVzIGluIG5lc3RlZCBzdXNwZW5kZWQgdHJlZXMgbWF5IGJlIG1pc3NpbmcgX2NoaWxkcmVuLlxuXG5cdGlmICh0eXBlb2YgcGFyZW50Vk5vZGUudHlwZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0bGV0IGNoaWxkcmVuID0gcGFyZW50Vk5vZGUuX2NoaWxkcmVuO1xuXHRcdGZvciAobGV0IGkgPSAwOyBjaGlsZHJlbiAmJiBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChjaGlsZHJlbltpXSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbnRlciB0aGlzIGNvZGUgcGF0aCBvbiBzQ1UgYmFpbG91dCwgd2hlcmUgd2UgY29weVxuXHRcdFx0XHQvLyBvbGRWTm9kZS5fY2hpbGRyZW4gdG8gbmV3Vk5vZGUuX2NoaWxkcmVuLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb2xkXG5cdFx0XHRcdC8vIGNoaWxkcmVuJ3MgX3BhcmVudCBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBuZXdWTm9kZSAocGFyZW50Vk5vZGVcblx0XHRcdFx0Ly8gaGVyZSkuXG5cdFx0XHRcdGNoaWxkcmVuW2ldLl9wYXJlbnQgPSBwYXJlbnRWTm9kZTtcblx0XHRcdFx0b2xkRG9tID0gaW5zZXJ0KGNoaWxkcmVuW2ldLCBvbGREb20sIHBhcmVudERvbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9sZERvbTtcblx0fSBlbHNlIGlmIChwYXJlbnRWTm9kZS5fZG9tICE9IG9sZERvbSkge1xuXHRcdGlmIChvbGREb20gJiYgcGFyZW50Vk5vZGUudHlwZSAmJiAhcGFyZW50RG9tLmNvbnRhaW5zKG9sZERvbSkpIHtcblx0XHRcdG9sZERvbSA9IGdldERvbVNpYmxpbmcocGFyZW50Vk5vZGUpO1xuXHRcdH1cblx0XHRwYXJlbnREb20uaW5zZXJ0QmVmb3JlKHBhcmVudFZOb2RlLl9kb20sIG9sZERvbSB8fCBudWxsKTtcblx0XHRvbGREb20gPSBwYXJlbnRWTm9kZS5fZG9tO1xuXHR9XG5cblx0ZG8ge1xuXHRcdG9sZERvbSA9IG9sZERvbSAmJiBvbGREb20ubmV4dFNpYmxpbmc7XG5cdH0gd2hpbGUgKG9sZERvbSAhPSBudWxsICYmIG9sZERvbS5ub2RlVHlwZSA9PT0gOCk7XG5cblx0cmV0dXJuIG9sZERvbTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGFuZCBsb29wIHRocm91Z2ggdGhlIGNoaWxkcmVuIG9mIGEgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVufSBjaGlsZHJlbiBUaGUgdW5mbGF0dGVuZWQgY2hpbGRyZW4gb2YgYSB2aXJ0dWFsXG4gKiBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGVbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2hpbGRBcnJheShjaGlsZHJlbiwgb3V0KSB7XG5cdG91dCA9IG91dCB8fCBbXTtcblx0aWYgKGNoaWxkcmVuID09IG51bGwgfHwgdHlwZW9mIGNoaWxkcmVuID09ICdib29sZWFuJykge1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG5cdFx0Y2hpbGRyZW4uc29tZShjaGlsZCA9PiB7XG5cdFx0XHR0b0NoaWxkQXJyYXkoY2hpbGQsIG91dCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0LnB1c2goY2hpbGRyZW4pO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gY2hpbGRWTm9kZVxuICogQHBhcmFtIHtWTm9kZVtdfSBvbGRDaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdlZEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gcmVtYWluaW5nT2xkQ2hpbGRyZW5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGZpbmRNYXRjaGluZ0luZGV4KFxuXHRjaGlsZFZOb2RlLFxuXHRvbGRDaGlsZHJlbixcblx0c2tld2VkSW5kZXgsXG5cdHJlbWFpbmluZ09sZENoaWxkcmVuXG4pIHtcblx0Y29uc3Qga2V5ID0gY2hpbGRWTm9kZS5rZXk7XG5cdGNvbnN0IHR5cGUgPSBjaGlsZFZOb2RlLnR5cGU7XG5cdGxldCB4ID0gc2tld2VkSW5kZXggLSAxO1xuXHRsZXQgeSA9IHNrZXdlZEluZGV4ICsgMTtcblx0bGV0IG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bc2tld2VkSW5kZXhdO1xuXG5cdC8vIFdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGlmIHRoZXJlIGFyZSBtb3JlIGNoaWxkcmVuXG5cdC8vIChyZW1haW5pbmdPbGRDaGlsZHJlbikgdG8gc2VhcmNoLiBIb3dldmVyLCBpZiB0aGUgb2xkVk5vZGUgd2UganVzdCBsb29rZWRcblx0Ly8gYXQgc2tld2VkSW5kZXggd2FzIG5vdCBhbHJlYWR5IHVzZWQgaW4gdGhpcyBkaWZmLCB0aGVuIHRoZXJlIG11c3QgYmUgYXRcblx0Ly8gbGVhc3QgMSBvdGhlciAoc28gZ3JlYXRlciB0aGFuIDEpIHJlbWFpbmluZ09sZENoaWxkcmVuIHRvIGF0dGVtcHQgdG8gbWF0Y2hcblx0Ly8gYWdhaW5zdC4gU28gdGhlIGZvbGxvd2luZyBjb25kaXRpb24gY2hlY2tzIHRoYXQgZW5zdXJpbmdcblx0Ly8gcmVtYWluaW5nT2xkQ2hpbGRyZW4gPiAxIGlmIHRoZSBvbGRWTm9kZSBpcyBub3QgYWxyZWFkeSB1c2VkL21hdGNoZWQuIEVsc2Vcblx0Ly8gaWYgdGhlIG9sZFZOb2RlIHdhcyBudWxsIG9yIG1hdGNoZWQsIHRoZW4gdGhlcmUgY291bGQgbmVlZHMgdG8gYmUgYXQgbGVhc3Rcblx0Ly8gMSAoYWthIGByZW1haW5pbmdPbGRDaGlsZHJlbiA+IDBgKSBjaGlsZHJlbiB0byBmaW5kIGFuZCBjb21wYXJlIGFnYWluc3QuXG5cdGxldCBzaG91bGRTZWFyY2ggPVxuXHRcdHJlbWFpbmluZ09sZENoaWxkcmVuID5cblx0XHQob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgPyAxIDogMCk7XG5cblx0aWYgKFxuXHRcdG9sZFZOb2RlID09PSBudWxsIHx8XG5cdFx0KG9sZFZOb2RlICYmXG5cdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHR0eXBlID09PSBvbGRWTm9kZS50eXBlICYmXG5cdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApXG5cdCkge1xuXHRcdHJldHVybiBza2V3ZWRJbmRleDtcblx0fSBlbHNlIGlmIChzaG91bGRTZWFyY2gpIHtcblx0XHR3aGlsZSAoeCA+PSAwIHx8IHkgPCBvbGRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdGlmICh4ID49IDApIHtcblx0XHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblt4XTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9sZFZOb2RlICYmXG5cdFx0XHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwICYmXG5cdFx0XHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0XHRcdHR5cGUgPT09IG9sZFZOb2RlLnR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHg7XG5cdFx0XHRcdH1cblx0XHRcdFx0eC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoeSA8IG9sZENoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRvbGRWTm9kZSA9IG9sZENoaWxkcmVuW3ldO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b2xkVk5vZGUgJiZcblx0XHRcdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgJiZcblx0XHRcdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHRcdFx0dHlwZSA9PT0gb2xkVk5vZGUudHlwZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4geTtcblx0XHRcdFx0fVxuXHRcdFx0XHR5Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIC0xO1xufVxuIiwgImltcG9ydCB7XG5cdEVNUFRZX09CSixcblx0TU9ERV9IWURSQVRFLFxuXHRNT0RFX1NVU1BFTkRFRCxcblx0UkVTRVRfTU9ERVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgZ2V0RG9tU2libGluZyB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCB7IGRpZmZDaGlsZHJlbiB9IGZyb20gJy4vY2hpbGRyZW4nO1xuaW1wb3J0IHsgc2V0UHJvcGVydHkgfSBmcm9tICcuL3Byb3BzJztcbmltcG9ydCB7IGFzc2lnbiwgaXNBcnJheSwgcmVtb3ZlTm9kZSwgc2xpY2UgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4uL29wdGlvbnMnO1xuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgYW5kIGFwcGx5IHByb3BlciBjaGFuZ2VzIHRvIHRoZSBET01cbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBwYXJlbnQgb2YgdGhlIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdWTm9kZSBUaGUgbmV3IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtWTm9kZX0gb2xkVk5vZGUgVGhlIG9sZCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxDb250ZXh0IFRoZSBjdXJyZW50IGNvbnRleHQgb2JqZWN0LiBNb2RpZmllZCBieVxuICogZ2V0Q2hpbGRDb250ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIEN1cnJlbnQgbmFtZXNwYWNlIG9mIHRoZSBET00gbm9kZSAoSFRNTCwgU1ZHLCBvciBNYXRoTUwpXG4gKiBAcGFyYW0ge0FycmF5PFByZWFjdEVsZW1lbnQ+fSBleGNlc3NEb21DaGlsZHJlblxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBjYWxsYmFja3NcbiAqIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IG9sZERvbSBUaGUgY3VycmVudCBhdHRhY2hlZCBET00gZWxlbWVudCBhbnkgbmV3IGRvbVxuICogZWxlbWVudHMgc2hvdWxkIGJlIHBsYWNlZCBhcm91bmQuIExpa2VseSBgbnVsbGAgb24gZmlyc3QgcmVuZGVyIChleGNlcHQgd2hlblxuICogaHlkcmF0aW5nKS4gQ2FuIGJlIGEgc2libGluZyBET00gZWxlbWVudCB3aGVuIGRpZmZpbmcgRnJhZ21lbnRzIHRoYXQgaGF2ZVxuICogc2libGluZ3MuIEluIG1vc3QgY2FzZXMsIGl0IHN0YXJ0cyBvdXQgYXMgYG9sZENoaWxkcmVuWzBdLl9kb21gLlxuICogQHBhcmFtIHtib29sZWFufSBpc0h5ZHJhdGluZyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKiBAcGFyYW0ge2FueVtdfSByZWZRdWV1ZSBhbiBhcnJheSBvZiBlbGVtZW50cyBuZWVkZWQgdG8gaW52b2tlIHJlZnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmYoXG5cdHBhcmVudERvbSxcblx0bmV3Vk5vZGUsXG5cdG9sZFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRuYW1lc3BhY2UsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0b2xkRG9tLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IHRtcCxcblx0XHRuZXdUeXBlID0gbmV3Vk5vZGUudHlwZTtcblxuXHQvLyBXaGVuIHBhc3NpbmcgdGhyb3VnaCBjcmVhdGVFbGVtZW50IGl0IGFzc2lnbnMgdGhlIG9iamVjdFxuXHQvLyBjb25zdHJ1Y3RvciBhcyB1bmRlZmluZWQuIFRoaXMgdG8gcHJldmVudCBKU09OLWluamVjdGlvbi5cblx0aWYgKG5ld1ZOb2RlLmNvbnN0cnVjdG9yICE9PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuXG5cdC8vIElmIHRoZSBwcmV2aW91cyBkaWZmIGJhaWxlZCBvdXQsIHJlc3VtZSBjcmVhdGluZy9oeWRyYXRpbmcuXG5cdGlmIChvbGRWTm9kZS5fZmxhZ3MgJiBNT0RFX1NVU1BFTkRFRCkge1xuXHRcdGlzSHlkcmF0aW5nID0gISEob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKTtcblx0XHRvbGREb20gPSBuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IFtvbGREb21dO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLl9kaWZmKSkgdG1wKG5ld1ZOb2RlKTtcblxuXHRvdXRlcjogaWYgKHR5cGVvZiBuZXdUeXBlID09ICdmdW5jdGlvbicpIHtcblx0XHR0cnkge1xuXHRcdFx0bGV0IGMsIGlzTmV3LCBvbGRQcm9wcywgb2xkU3RhdGUsIHNuYXBzaG90LCBjbGVhclByb2Nlc3NpbmdFeGNlcHRpb247XG5cdFx0XHRsZXQgbmV3UHJvcHMgPSBuZXdWTm9kZS5wcm9wcztcblx0XHRcdGNvbnN0IGlzQ2xhc3NDb21wb25lbnQgPVxuXHRcdFx0XHQncHJvdG90eXBlJyBpbiBuZXdUeXBlICYmIG5ld1R5cGUucHJvdG90eXBlLnJlbmRlcjtcblxuXHRcdFx0Ly8gTmVjZXNzYXJ5IGZvciBjcmVhdGVDb250ZXh0IGFwaS4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgcGFzc1xuXHRcdFx0Ly8gdGhlIGNvbnRleHQgdmFsdWUgYXMgYHRoaXMuY29udGV4dGAganVzdCBmb3IgdGhpcyBjb21wb25lbnQuXG5cdFx0XHR0bXAgPSBuZXdUeXBlLmNvbnRleHRUeXBlO1xuXHRcdFx0bGV0IHByb3ZpZGVyID0gdG1wICYmIGdsb2JhbENvbnRleHRbdG1wLl9pZF07XG5cdFx0XHRsZXQgY29tcG9uZW50Q29udGV4dCA9IHRtcFxuXHRcdFx0XHQ/IHByb3ZpZGVyXG5cdFx0XHRcdFx0PyBwcm92aWRlci5wcm9wcy52YWx1ZVxuXHRcdFx0XHRcdDogdG1wLl9kZWZhdWx0VmFsdWVcblx0XHRcdFx0OiBnbG9iYWxDb250ZXh0O1xuXG5cdFx0XHQvLyBHZXQgY29tcG9uZW50IGFuZCBzZXQgaXQgdG8gYGNgXG5cdFx0XHRpZiAob2xkVk5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0XHRjID0gbmV3Vk5vZGUuX2NvbXBvbmVudCA9IG9sZFZOb2RlLl9jb21wb25lbnQ7XG5cdFx0XHRcdGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbiA9IGMuX3Byb2Nlc3NpbmdFeGNlcHRpb24gPSBjLl9wZW5kaW5nRXJyb3I7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnN0YW50aWF0ZSB0aGUgbmV3IGNvbXBvbmVudFxuXHRcdFx0XHRpZiAoaXNDbGFzc0NvbXBvbmVudCkge1xuXHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVGhlIGNoZWNrIGFib3ZlIHZlcmlmaWVzIHRoYXQgbmV3VHlwZSBpcyBzdXBwb3NlIHRvIGJlIGNvbnN0cnVjdGVkXG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2NvbXBvbmVudCA9IGMgPSBuZXcgbmV3VHlwZShuZXdQcm9wcywgY29tcG9uZW50Q29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVHJ1c3QgbWUsIENvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2Ugd2Ugd2FudFxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jb21wb25lbnQgPSBjID0gbmV3IEJhc2VDb21wb25lbnQoXG5cdFx0XHRcdFx0XHRuZXdQcm9wcyxcblx0XHRcdFx0XHRcdGNvbXBvbmVudENvbnRleHRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGMuY29uc3RydWN0b3IgPSBuZXdUeXBlO1xuXHRcdFx0XHRcdGMucmVuZGVyID0gZG9SZW5kZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3ZpZGVyKSBwcm92aWRlci5zdWIoYyk7XG5cblx0XHRcdFx0Yy5wcm9wcyA9IG5ld1Byb3BzO1xuXHRcdFx0XHRpZiAoIWMuc3RhdGUpIGMuc3RhdGUgPSB7fTtcblx0XHRcdFx0Yy5jb250ZXh0ID0gY29tcG9uZW50Q29udGV4dDtcblx0XHRcdFx0Yy5fZ2xvYmFsQ29udGV4dCA9IGdsb2JhbENvbnRleHQ7XG5cdFx0XHRcdGlzTmV3ID0gYy5fZGlydHkgPSB0cnVlO1xuXHRcdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdFx0Yy5fc3RhdGVDYWxsYmFja3MgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSW52b2tlIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgYy5fbmV4dFN0YXRlID09IG51bGwpIHtcblx0XHRcdFx0Yy5fbmV4dFN0YXRlID0gYy5zdGF0ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgbmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAoYy5fbmV4dFN0YXRlID09IGMuc3RhdGUpIHtcblx0XHRcdFx0XHRjLl9uZXh0U3RhdGUgPSBhc3NpZ24oe30sIGMuX25leHRTdGF0ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhc3NpZ24oXG5cdFx0XHRcdFx0Yy5fbmV4dFN0YXRlLFxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5ld1Byb3BzLCBjLl9uZXh0U3RhdGUpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdG9sZFByb3BzID0gYy5wcm9wcztcblx0XHRcdG9sZFN0YXRlID0gYy5zdGF0ZTtcblx0XHRcdGMuX3Zub2RlID0gbmV3Vk5vZGU7XG5cblx0XHRcdC8vIEludm9rZSBwcmUtcmVuZGVyIGxpZmVjeWNsZSBtZXRob2RzXG5cdFx0XHRpZiAoaXNOZXcpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzQ2xhc3NDb21wb25lbnQgJiZcblx0XHRcdFx0XHRuZXdUeXBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PSBudWxsICYmXG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsTW91bnQgIT0gbnVsbFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgYy5jb21wb25lbnREaWRNb3VudCAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5jb21wb25lbnREaWRNb3VudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRpc0NsYXNzQ29tcG9uZW50ICYmXG5cdFx0XHRcdFx0bmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT0gbnVsbCAmJlxuXHRcdFx0XHRcdG5ld1Byb3BzICE9PSBvbGRQcm9wcyAmJlxuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAhPSBudWxsXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgY29tcG9uZW50Q29udGV4dCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWMuX2ZvcmNlICYmXG5cdFx0XHRcdFx0KChjLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPSBudWxsICYmXG5cdFx0XHRcdFx0XHRjLnNob3VsZENvbXBvbmVudFVwZGF0ZShcblx0XHRcdFx0XHRcdFx0bmV3UHJvcHMsXG5cdFx0XHRcdFx0XHRcdGMuX25leHRTdGF0ZSxcblx0XHRcdFx0XHRcdFx0Y29tcG9uZW50Q29udGV4dFxuXHRcdFx0XHRcdFx0KSA9PT0gZmFsc2UpIHx8XG5cdFx0XHRcdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPT09IG9sZFZOb2RlLl9vcmlnaW5hbClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gTW9yZSBpbmZvIGFib3V0IHRoaXMgaGVyZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vSm92aURlQ3Jvb2NrL2JlYzVmMmNlOTM1NDRkMmU2MDcwZWY4ZTAwMzZlNGU4XG5cdFx0XHRcdFx0aWYgKG5ld1ZOb2RlLl9vcmlnaW5hbCAhPT0gb2xkVk5vZGUuX29yaWdpbmFsKSB7XG5cdFx0XHRcdFx0XHQvLyBXaGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBiYWlsIGJlY2F1c2Ugb2Ygc0NVIHdlIGhhdmUgdG8gdXBkYXRlXG5cdFx0XHRcdFx0XHQvLyB0aGUgcHJvcHMsIHN0YXRlIGFuZCBkaXJ0eS1zdGF0ZS5cblx0XHRcdFx0XHRcdC8vIHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBzdHJpY3QtZXF1YWxpdHkgd2UgZG9uJ3QgYXMgdGhlIGNoaWxkIGNvdWxkIHN0aWxsXG5cdFx0XHRcdFx0XHQvLyBiZSBkaXJ0aWVkIHNlZSAjMzg4M1xuXHRcdFx0XHRcdFx0Yy5wcm9wcyA9IG5ld1Byb3BzO1xuXHRcdFx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0XHRcdGMuX2RpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gb2xkVk5vZGUuX2NoaWxkcmVuO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbi5zb21lKHZub2RlID0+IHtcblx0XHRcdFx0XHRcdGlmICh2bm9kZSkgdm5vZGUuX3BhcmVudCA9IG5ld1ZOb2RlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjLl9zdGF0ZUNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5fc3RhdGVDYWxsYmFja3NbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjLl9zdGF0ZUNhbGxiYWNrcyA9IFtdO1xuXG5cdFx0XHRcdFx0aWYgKGMuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvbW1pdFF1ZXVlLnB1c2goYyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWsgb3V0ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYy5jb21wb25lbnRXaWxsVXBkYXRlICE9IG51bGwpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIGMuX25leHRTdGF0ZSwgY29tcG9uZW50Q29udGV4dCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNDbGFzc0NvbXBvbmVudCAmJiBjLmNvbXBvbmVudERpZFVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdFx0XHRcdFx0Yy5jb21wb25lbnREaWRVcGRhdGUob2xkUHJvcHMsIG9sZFN0YXRlLCBzbmFwc2hvdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Yy5jb250ZXh0ID0gY29tcG9uZW50Q29udGV4dDtcblx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdGMuX3BhcmVudERvbSA9IHBhcmVudERvbTtcblx0XHRcdGMuX2ZvcmNlID0gZmFsc2U7XG5cblx0XHRcdGxldCByZW5kZXJIb29rID0gb3B0aW9ucy5fcmVuZGVyLFxuXHRcdFx0XHRjb3VudCA9IDA7XG5cdFx0XHRpZiAoaXNDbGFzc0NvbXBvbmVudCkge1xuXHRcdFx0XHRjLnN0YXRlID0gYy5fbmV4dFN0YXRlO1xuXHRcdFx0XHRjLl9kaXJ0eSA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmIChyZW5kZXJIb29rKSByZW5kZXJIb29rKG5ld1ZOb2RlKTtcblxuXHRcdFx0XHR0bXAgPSBjLnJlbmRlcihjLnByb3BzLCBjLnN0YXRlLCBjLmNvbnRleHQpO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYy5fc3RhdGVDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MucHVzaChjLl9zdGF0ZUNhbGxiYWNrc1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Yy5fc3RhdGVDYWxsYmFja3MgPSBbXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRjLl9kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChyZW5kZXJIb29rKSByZW5kZXJIb29rKG5ld1ZOb2RlKTtcblxuXHRcdFx0XHRcdHRtcCA9IGMucmVuZGVyKGMucHJvcHMsIGMuc3RhdGUsIGMuY29udGV4dCk7XG5cblx0XHRcdFx0XHQvLyBIYW5kbGUgc2V0U3RhdGUgY2FsbGVkIGluIHJlbmRlciwgc2VlICMyNTUzXG5cdFx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0fSB3aGlsZSAoYy5fZGlydHkgJiYgKytjb3VudCA8IDI1KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSGFuZGxlIHNldFN0YXRlIGNhbGxlZCBpbiByZW5kZXIsIHNlZSAjMjU1M1xuXHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblxuXHRcdFx0aWYgKGMuZ2V0Q2hpbGRDb250ZXh0ICE9IG51bGwpIHtcblx0XHRcdFx0Z2xvYmFsQ29udGV4dCA9IGFzc2lnbihhc3NpZ24oe30sIGdsb2JhbENvbnRleHQpLCBjLmdldENoaWxkQ29udGV4dCgpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgIWlzTmV3ICYmIGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT0gbnVsbCkge1xuXHRcdFx0XHRzbmFwc2hvdCA9IGMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUob2xkUHJvcHMsIG9sZFN0YXRlKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGlzVG9wTGV2ZWxGcmFnbWVudCA9XG5cdFx0XHRcdHRtcCAhPSBudWxsICYmIHRtcC50eXBlID09PSBGcmFnbWVudCAmJiB0bXAua2V5ID09IG51bGw7XG5cdFx0XHRsZXQgcmVuZGVyUmVzdWx0ID0gaXNUb3BMZXZlbEZyYWdtZW50ID8gdG1wLnByb3BzLmNoaWxkcmVuIDogdG1wO1xuXG5cdFx0XHRkaWZmQ2hpbGRyZW4oXG5cdFx0XHRcdHBhcmVudERvbSxcblx0XHRcdFx0aXNBcnJheShyZW5kZXJSZXN1bHQpID8gcmVuZGVyUmVzdWx0IDogW3JlbmRlclJlc3VsdF0sXG5cdFx0XHRcdG5ld1ZOb2RlLFxuXHRcdFx0XHRvbGRWTm9kZSxcblx0XHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRcdG9sZERvbSxcblx0XHRcdFx0aXNIeWRyYXRpbmcsXG5cdFx0XHRcdHJlZlF1ZXVlXG5cdFx0XHQpO1xuXG5cdFx0XHRjLmJhc2UgPSBuZXdWTm9kZS5fZG9tO1xuXG5cdFx0XHQvLyBXZSBzdWNjZXNzZnVsbHkgcmVuZGVyZWQgdGhpcyBWTm9kZSwgdW5zZXQgYW55IHN0b3JlZCBoeWRyYXRpb24vYmFpbG91dCBzdGF0ZTpcblx0XHRcdG5ld1ZOb2RlLl9mbGFncyAmPSBSRVNFVF9NT0RFO1xuXG5cdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdFx0XHRjb21taXRRdWV1ZS5wdXNoKGMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2xlYXJQcm9jZXNzaW5nRXhjZXB0aW9uKSB7XG5cdFx0XHRcdGMuX3BlbmRpbmdFcnJvciA9IGMuX3Byb2Nlc3NpbmdFeGNlcHRpb24gPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9IG51bGw7XG5cdFx0XHQvLyBpZiBoeWRyYXRpbmcgb3IgY3JlYXRpbmcgaW5pdGlhbCB0cmVlLCBiYWlsb3V0IHByZXNlcnZlcyBET006XG5cdFx0XHRpZiAoaXNIeWRyYXRpbmcgfHwgZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdFx0XHRuZXdWTm9kZS5fZmxhZ3MgfD0gaXNIeWRyYXRpbmdcblx0XHRcdFx0XHQ/IE1PREVfSFlEUkFURSB8IE1PREVfU1VTUEVOREVEXG5cdFx0XHRcdFx0OiBNT0RFX1NVU1BFTkRFRDtcblxuXHRcdFx0XHR3aGlsZSAob2xkRG9tICYmIG9sZERvbS5ub2RlVHlwZSA9PT0gOCAmJiBvbGREb20ubmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0XHRvbGREb20gPSBvbGREb20ubmV4dFNpYmxpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW5bZXhjZXNzRG9tQ2hpbGRyZW4uaW5kZXhPZihvbGREb20pXSA9IG51bGw7XG5cdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGREb207XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gb2xkVk5vZGUuX2NoaWxkcmVuO1xuXHRcdFx0fVxuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBuZXdWTm9kZSwgb2xkVk5vZGUpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9PSBudWxsICYmXG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID09PSBvbGRWTm9kZS5fb3JpZ2luYWxcblx0KSB7XG5cdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gb2xkVk5vZGUuX2NoaWxkcmVuO1xuXHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZOb2RlLl9kb20gPSBkaWZmRWxlbWVudE5vZGVzKFxuXHRcdFx0b2xkVk5vZGUuX2RvbSxcblx0XHRcdG5ld1ZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLmRpZmZlZCkpIHRtcChuZXdWTm9kZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHNcbiAqIHdoaWNoIGhhdmUgY2FsbGJhY2tzIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge1ZOb2RlfSByb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXRSb290KGNvbW1pdFF1ZXVlLCByb290LCByZWZRdWV1ZSkge1xuXHRyb290Ll9uZXh0RG9tID0gdW5kZWZpbmVkO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmVmUXVldWUubGVuZ3RoOyBpKyspIHtcblx0XHRhcHBseVJlZihyZWZRdWV1ZVtpXSwgcmVmUXVldWVbKytpXSwgcmVmUXVldWVbKytpXSk7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5fY29tbWl0KSBvcHRpb25zLl9jb21taXQocm9vdCwgY29tbWl0UXVldWUpO1xuXG5cdGNvbW1pdFF1ZXVlLnNvbWUoYyA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgUmV1c2UgdGhlIGNvbW1pdFF1ZXVlIHZhcmlhYmxlIGhlcmUgc28gdGhlIHR5cGUgY2hhbmdlc1xuXHRcdFx0Y29tbWl0UXVldWUgPSBjLl9yZW5kZXJDYWxsYmFja3M7XG5cdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdGNvbW1pdFF1ZXVlLnNvbWUoY2IgPT4ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFNlZSBhYm92ZSBjb21tZW50IG9uIGNvbW1pdFF1ZXVlXG5cdFx0XHRcdGNiLmNhbGwoYyk7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIGMuX3Zub2RlKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgcmVwcmVzZW50aW5nIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSB2aXJ0dWFsIG5vZGVzXG4gKiBiZWluZyBkaWZmZWRcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1ZOb2RlIFRoZSBuZXcgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge1ZOb2RlfSBvbGRWTm9kZSBUaGUgb2xkIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbENvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2UgQ3VycmVudCBuYW1lc3BhY2Ugb2YgdGhlIERPTSBub2RlIChIVE1MLCBTVkcsIG9yIE1hdGhNTClcbiAqIEBwYXJhbSB7QXJyYXk8UHJlYWN0RWxlbWVudD59IGV4Y2Vzc0RvbUNoaWxkcmVuXG4gKiBAcGFyYW0ge0FycmF5PENvbXBvbmVudD59IGNvbW1pdFF1ZXVlIExpc3Qgb2YgY29tcG9uZW50cyB3aGljaCBoYXZlIGNhbGxiYWNrc1xuICogdG8gaW52b2tlIGluIGNvbW1pdFJvb3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKiBAcmV0dXJucyB7UHJlYWN0RWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZGlmZkVsZW1lbnROb2Rlcyhcblx0ZG9tLFxuXHRuZXdWTm9kZSxcblx0b2xkVk5vZGUsXG5cdGdsb2JhbENvbnRleHQsXG5cdG5hbWVzcGFjZSxcblx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdGNvbW1pdFF1ZXVlLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHRsZXQgb2xkUHJvcHMgPSBvbGRWTm9kZS5wcm9wcztcblx0bGV0IG5ld1Byb3BzID0gbmV3Vk5vZGUucHJvcHM7XG5cdGxldCBub2RlVHlwZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobmV3Vk5vZGUudHlwZSk7XG5cdC8qKiBAdHlwZSB7YW55fSAqL1xuXHRsZXQgaTtcblx0LyoqIEB0eXBlIHt7IF9faHRtbD86IHN0cmluZyB9fSAqL1xuXHRsZXQgbmV3SHRtbDtcblx0LyoqIEB0eXBlIHt7IF9faHRtbD86IHN0cmluZyB9fSAqL1xuXHRsZXQgb2xkSHRtbDtcblx0LyoqIEB0eXBlIHtDb21wb25lbnRDaGlsZHJlbn0gKi9cblx0bGV0IG5ld0NoaWxkcmVuO1xuXHRsZXQgdmFsdWU7XG5cdGxldCBpbnB1dFZhbHVlO1xuXHRsZXQgY2hlY2tlZDtcblxuXHQvLyBUcmFja3MgZW50ZXJpbmcgYW5kIGV4aXRpbmcgbmFtZXNwYWNlcyB3aGVuIGRlc2NlbmRpbmcgdGhyb3VnaCB0aGUgdHJlZS5cblx0aWYgKG5vZGVUeXBlID09PSAnc3ZnJykgbmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcblx0ZWxzZSBpZiAobm9kZVR5cGUgPT09ICdtYXRoJylcblx0XHRuYW1lc3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG5cdGVsc2UgaWYgKCFuYW1lc3BhY2UpIG5hbWVzcGFjZSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcblxuXHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdGZvciAoaSA9IDA7IGkgPCBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFsdWUgPSBleGNlc3NEb21DaGlsZHJlbltpXTtcblxuXHRcdFx0Ly8gaWYgbmV3Vk5vZGUgbWF0Y2hlcyBhbiBlbGVtZW50IGluIGV4Y2Vzc0RvbUNoaWxkcmVuIG9yIHRoZSBgZG9tYFxuXHRcdFx0Ly8gYXJndW1lbnQgbWF0Y2hlcyBhbiBlbGVtZW50IGluIGV4Y2Vzc0RvbUNoaWxkcmVuLCByZW1vdmUgaXQgZnJvbVxuXHRcdFx0Ly8gZXhjZXNzRG9tQ2hpbGRyZW4gc28gaXQgaXNuJ3QgbGF0ZXIgcmVtb3ZlZCBpbiBkaWZmQ2hpbGRyZW5cblx0XHRcdGlmIChcblx0XHRcdFx0dmFsdWUgJiZcblx0XHRcdFx0J3NldEF0dHJpYnV0ZScgaW4gdmFsdWUgPT09ICEhbm9kZVR5cGUgJiZcblx0XHRcdFx0KG5vZGVUeXBlID8gdmFsdWUubG9jYWxOYW1lID09PSBub2RlVHlwZSA6IHZhbHVlLm5vZGVUeXBlID09PSAzKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRvbSA9IHZhbHVlO1xuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbltpXSA9IG51bGw7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChkb20gPT0gbnVsbCkge1xuXHRcdGlmIChub2RlVHlwZSA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld1Byb3BzKTtcblx0XHR9XG5cblx0XHRkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG5cdFx0XHRuYW1lc3BhY2UsXG5cdFx0XHRub2RlVHlwZSxcblx0XHRcdG5ld1Byb3BzLmlzICYmIG5ld1Byb3BzXG5cdFx0KTtcblxuXHRcdC8vIHdlIGFyZSBjcmVhdGluZyBhIG5ldyBub2RlLCBzbyB3ZSBjYW4gYXNzdW1lIHRoaXMgaXMgYSBuZXcgc3VidHJlZSAoaW5cblx0XHQvLyBjYXNlIHdlIGFyZSBoeWRyYXRpbmcpLCB0aGlzIGRlb3B0cyB0aGUgaHlkcmF0ZVxuXHRcdGlmIChpc0h5ZHJhdGluZykge1xuXHRcdFx0aWYgKG9wdGlvbnMuX2h5ZHJhdGlvbk1pc21hdGNoKVxuXHRcdFx0XHRvcHRpb25zLl9oeWRyYXRpb25NaXNtYXRjaChuZXdWTm9kZSwgZXhjZXNzRG9tQ2hpbGRyZW4pO1xuXHRcdFx0aXNIeWRyYXRpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gd2UgY3JlYXRlZCBhIG5ldyBwYXJlbnQsIHNvIG5vbmUgb2YgdGhlIHByZXZpb3VzbHkgYXR0YWNoZWQgY2hpbGRyZW4gY2FuIGJlIHJldXNlZDpcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IG51bGw7XG5cdH1cblxuXHRpZiAobm9kZVR5cGUgPT09IG51bGwpIHtcblx0XHQvLyBEdXJpbmcgaHlkcmF0aW9uLCB3ZSBzdGlsbCBoYXZlIHRvIHNwbGl0IG1lcmdlZCB0ZXh0IGZyb20gU1NSJ2QgSFRNTC5cblx0XHRpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzICYmICghaXNIeWRyYXRpbmcgfHwgZG9tLmRhdGEgIT09IG5ld1Byb3BzKSkge1xuXHRcdFx0ZG9tLmRhdGEgPSBuZXdQcm9wcztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgZXhjZXNzRG9tQ2hpbGRyZW4gd2FzIG5vdCBudWxsLCByZXBvcHVsYXRlIGl0IHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudCdzIGNoaWxkcmVuOlxuXHRcdGV4Y2Vzc0RvbUNoaWxkcmVuID0gZXhjZXNzRG9tQ2hpbGRyZW4gJiYgc2xpY2UuY2FsbChkb20uY2hpbGROb2Rlcyk7XG5cblx0XHRvbGRQcm9wcyA9IG9sZFZOb2RlLnByb3BzIHx8IEVNUFRZX09CSjtcblxuXHRcdC8vIElmIHdlIGFyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBhcmUgbm90IGh5ZHJhdGluZyBidXQgYXJlIHVzaW5nXG5cdFx0Ly8gZXhpc3RpbmcgRE9NIChlLmcuIHJlcGxhY2VOb2RlKSB3ZSBzaG91bGQgcmVhZCB0aGUgZXhpc3RpbmcgRE9NXG5cdFx0Ly8gYXR0cmlidXRlcyB0byBkaWZmIHRoZW1cblx0XHRpZiAoIWlzSHlkcmF0aW5nICYmIGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdG9sZFByb3BzID0ge307XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZG9tLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFsdWUgPSBkb20uYXR0cmlidXRlc1tpXTtcblx0XHRcdFx0b2xkUHJvcHNbdmFsdWUubmFtZV0gPSB2YWx1ZS52YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgaW4gb2xkUHJvcHMpIHtcblx0XHRcdHZhbHVlID0gb2xkUHJvcHNbaV07XG5cdFx0XHRpZiAoaSA9PSAnY2hpbGRyZW4nKSB7XG5cdFx0XHR9IGVsc2UgaWYgKGkgPT0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJykge1xuXHRcdFx0XHRvbGRIdG1sID0gdmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKCEoaSBpbiBuZXdQcm9wcykpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChpID09ICd2YWx1ZScgJiYgJ2RlZmF1bHRWYWx1ZScgaW4gbmV3UHJvcHMpIHx8XG5cdFx0XHRcdFx0KGkgPT0gJ2NoZWNrZWQnICYmICdkZWZhdWx0Q2hlY2tlZCcgaW4gbmV3UHJvcHMpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNldFByb3BlcnR5KGRvbSwgaSwgbnVsbCwgdmFsdWUsIG5hbWVzcGFjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgcHJvcHMgYXJlIG5vdCBkaWZmZWQgYXQgYWxsIChpbmNsdWRpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpXG5cdFx0Ly8gQFRPRE8gd2Ugc2hvdWxkIHdhcm4gaW4gZGVidWcgbW9kZSB3aGVuIHByb3BzIGRvbid0IG1hdGNoIGhlcmUuXG5cdFx0Zm9yIChpIGluIG5ld1Byb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG5ld1Byb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0XHRuZXdDaGlsZHJlbiA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0bmV3SHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICd2YWx1ZScpIHtcblx0XHRcdFx0aW5wdXRWYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdjaGVja2VkJykge1xuXHRcdFx0XHRjaGVja2VkID0gdmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoIWlzSHlkcmF0aW5nIHx8IHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0XHRvbGRQcm9wc1tpXSAhPT0gdmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIHZhbHVlLCBvbGRQcm9wc1tpXSwgbmFtZXNwYWNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbmV3IHZub2RlIGRpZG4ndCBoYXZlIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLCBkaWZmIGl0cyBjaGlsZHJlblxuXHRcdGlmIChuZXdIdG1sKSB7XG5cdFx0XHQvLyBBdm9pZCByZS1hcHBseWluZyB0aGUgc2FtZSAnX19odG1sJyBpZiBpdCBkaWQgbm90IGNoYW5nZWQgYmV0d2VlbiByZS1yZW5kZXJcblx0XHRcdGlmIChcblx0XHRcdFx0IWlzSHlkcmF0aW5nICYmXG5cdFx0XHRcdCghb2xkSHRtbCB8fFxuXHRcdFx0XHRcdChuZXdIdG1sLl9faHRtbCAhPT0gb2xkSHRtbC5fX2h0bWwgJiZcblx0XHRcdFx0XHRcdG5ld0h0bWwuX19odG1sICE9PSBkb20uaW5uZXJIVE1MKSlcblx0XHRcdCkge1xuXHRcdFx0XHRkb20uaW5uZXJIVE1MID0gbmV3SHRtbC5fX2h0bWw7XG5cdFx0XHR9XG5cblx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAob2xkSHRtbCkgZG9tLmlubmVySFRNTCA9ICcnO1xuXG5cdFx0XHRkaWZmQ2hpbGRyZW4oXG5cdFx0XHRcdGRvbSxcblx0XHRcdFx0aXNBcnJheShuZXdDaGlsZHJlbikgPyBuZXdDaGlsZHJlbiA6IFtuZXdDaGlsZHJlbl0sXG5cdFx0XHRcdG5ld1ZOb2RlLFxuXHRcdFx0XHRvbGRWTm9kZSxcblx0XHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdFx0bm9kZVR5cGUgPT09ICdmb3JlaWduT2JqZWN0J1xuXHRcdFx0XHRcdD8gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnXG5cdFx0XHRcdFx0OiBuYW1lc3BhY2UsXG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRcdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW5cblx0XHRcdFx0XHQ/IGV4Y2Vzc0RvbUNoaWxkcmVuWzBdXG5cdFx0XHRcdFx0OiBvbGRWTm9kZS5fY2hpbGRyZW4gJiYgZ2V0RG9tU2libGluZyhvbGRWTm9kZSwgMCksXG5cdFx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0XHRyZWZRdWV1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gUmVtb3ZlIGNoaWxkcmVuIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIGFueSB2bm9kZS5cblx0XHRcdGlmIChleGNlc3NEb21DaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRcdGZvciAoaSA9IGV4Y2Vzc0RvbUNoaWxkcmVuLmxlbmd0aDsgaS0tOyApIHtcblx0XHRcdFx0XHRyZW1vdmVOb2RlKGV4Y2Vzc0RvbUNoaWxkcmVuW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFzIGFib3ZlLCBkb24ndCBkaWZmIHByb3BzIGR1cmluZyBoeWRyYXRpb25cblx0XHRpZiAoIWlzSHlkcmF0aW5nKSB7XG5cdFx0XHRpID0gJ3ZhbHVlJztcblx0XHRcdGlmIChub2RlVHlwZSA9PT0gJ3Byb2dyZXNzJyAmJiBpbnB1dFZhbHVlID09IG51bGwpIHtcblx0XHRcdFx0ZG9tLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQvLyAjMjc1NiBGb3IgdGhlIDxwcm9ncmVzcz4tZWxlbWVudCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyAwLFxuXHRcdFx0XHQvLyBkZXNwaXRlIHRoZSBhdHRyaWJ1dGUgbm90IGJlaW5nIHByZXNlbnQuIFdoZW4gdGhlIGF0dHJpYnV0ZVxuXHRcdFx0XHQvLyBpcyBtaXNzaW5nIHRoZSBwcm9ncmVzcyBiYXIgaXMgdHJlYXRlZCBhcyBpbmRldGVybWluYXRlLlxuXHRcdFx0XHQvLyBUbyBmaXggdGhhdCB3ZSdsbCBhbHdheXMgdXBkYXRlIGl0IHdoZW4gaXQgaXMgMCBmb3IgcHJvZ3Jlc3MgZWxlbWVudHNcblx0XHRcdFx0KGlucHV0VmFsdWUgIT09IGRvbVtpXSB8fFxuXHRcdFx0XHRcdChub2RlVHlwZSA9PT0gJ3Byb2dyZXNzJyAmJiAhaW5wdXRWYWx1ZSkgfHxcblx0XHRcdFx0XHQvLyBUaGlzIGlzIG9ubHkgZm9yIElFIDExIHRvIGZpeCA8c2VsZWN0PiB2YWx1ZSBub3QgYmVpbmcgdXBkYXRlZC5cblx0XHRcdFx0XHQvLyBUbyBhdm9pZCBhIHN0YWxlIHNlbGVjdCB2YWx1ZSB3ZSBuZWVkIHRvIHNldCB0aGUgb3B0aW9uLnZhbHVlXG5cdFx0XHRcdFx0Ly8gYWdhaW4sIHdoaWNoIHRyaWdnZXJzIElFMTEgdG8gcmUtZXZhbHVhdGUgdGhlIHNlbGVjdCB2YWx1ZVxuXHRcdFx0XHRcdChub2RlVHlwZSA9PT0gJ29wdGlvbicgJiYgaW5wdXRWYWx1ZSAhPT0gb2xkUHJvcHNbaV0pKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNldFByb3BlcnR5KGRvbSwgaSwgaW5wdXRWYWx1ZSwgb2xkUHJvcHNbaV0sIG5hbWVzcGFjZSk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSAnY2hlY2tlZCc7XG5cdFx0XHRpZiAoY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIGNoZWNrZWQgIT09IGRvbVtpXSkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGNoZWNrZWQsIG9sZFByb3BzW2ldLCBuYW1lc3BhY2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkb207XG59XG5cbi8qKlxuICogSW52b2tlIG9yIHVwZGF0ZSBhIHJlZiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaXMgYSBmdW5jdGlvbiBvciBvYmplY3QgcmVmLlxuICogQHBhcmFtIHtSZWY8YW55PiAmIHsgX3VubW91bnQ/OiB1bmtub3duIH19IHJlZlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlSZWYocmVmLCB2YWx1ZSwgdm5vZGUpIHtcblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIHJlZiA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRsZXQgaGFzUmVmVW5tb3VudCA9IHR5cGVvZiByZWYuX3VubW91bnQgPT0gJ2Z1bmN0aW9uJztcblx0XHRcdGlmIChoYXNSZWZVbm1vdW50KSB7XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmUgVFMgZG9lc24ndCBsaWtlIG1vdmluZyBuYXJyb3dpbmcgY2hlY2tzIGludG8gdmFyaWFibGVzXG5cdFx0XHRcdHJlZi5fdW5tb3VudCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWhhc1JlZlVubW91bnQgfHwgdmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0XHQvLyBTdG9yZSB0aGUgY2xlYW51cCBmdW5jdGlvbiBvbiB0aGUgZnVuY3Rpb25cblx0XHRcdFx0Ly8gaW5zdGFuY2Ugb2JqZWN0IGl0c2VsZiB0byBhdm9pZCBzaGFwZVxuXHRcdFx0XHQvLyB0cmFuc2l0aW9uaW5nIHZub2RlXG5cdFx0XHRcdHJlZi5fdW5tb3VudCA9IHJlZih2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHJlZi5jdXJyZW50ID0gdmFsdWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFVubW91bnQgYSB2aXJ0dWFsIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgYXBwbHkgRE9NIGNoYW5nZXNcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gdW5tb3VudFxuICogQHBhcmFtIHtWTm9kZX0gcGFyZW50Vk5vZGUgVGhlIHBhcmVudCBvZiB0aGUgVk5vZGUgdGhhdCBpbml0aWF0ZWQgdGhlIHVubW91bnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBSZW1vdmVdIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBhIHBhcmVudCBub2RlIG9mIHRoZVxuICogY3VycmVudCBlbGVtZW50IGlzIGFscmVhZHkgZGV0YWNoZWQgZnJvbSB0aGUgRE9NLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudCh2bm9kZSwgcGFyZW50Vk5vZGUsIHNraXBSZW1vdmUpIHtcblx0bGV0IHI7XG5cdGlmIChvcHRpb25zLnVubW91bnQpIG9wdGlvbnMudW5tb3VudCh2bm9kZSk7XG5cblx0aWYgKChyID0gdm5vZGUucmVmKSkge1xuXHRcdGlmICghci5jdXJyZW50IHx8IHIuY3VycmVudCA9PT0gdm5vZGUuX2RvbSkge1xuXHRcdFx0YXBwbHlSZWYociwgbnVsbCwgcGFyZW50Vk5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdGlmICgociA9IHZub2RlLl9jb21wb25lbnQpICE9IG51bGwpIHtcblx0XHRpZiAoci5jb21wb25lbnRXaWxsVW5tb3VudCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHBhcmVudFZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyLmJhc2UgPSByLl9wYXJlbnREb20gPSBudWxsO1xuXHR9XG5cblx0aWYgKChyID0gdm5vZGUuX2NoaWxkcmVuKSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHJbaV0pIHtcblx0XHRcdFx0dW5tb3VudChcblx0XHRcdFx0XHRyW2ldLFxuXHRcdFx0XHRcdHBhcmVudFZOb2RlLFxuXHRcdFx0XHRcdHNraXBSZW1vdmUgfHwgdHlwZW9mIHZub2RlLnR5cGUgIT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICghc2tpcFJlbW92ZSkge1xuXHRcdHJlbW92ZU5vZGUodm5vZGUuX2RvbSk7XG5cdH1cblxuXHQvLyBNdXN0IGJlIHNldCB0byBgdW5kZWZpbmVkYCB0byBwcm9wZXJseSBjbGVhbiB1cCBgX25leHREb21gXG5cdC8vIGZvciB3aGljaCBgbnVsbGAgaXMgYSB2YWxpZCB2YWx1ZS4gU2VlIGNvbW1lbnQgaW4gYGNyZWF0ZS1lbGVtZW50LmpzYFxuXHR2bm9kZS5fY29tcG9uZW50ID0gdm5vZGUuX3BhcmVudCA9IHZub2RlLl9kb20gPSB2bm9kZS5fbmV4dERvbSA9IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRoZSBgLnJlbmRlcigpYCBtZXRob2QgZm9yIGEgUEZDIGJhY2tpbmcgaW5zdGFuY2UuICovXG5mdW5jdGlvbiBkb1JlbmRlcihwcm9wcywgc3RhdGUsIGNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpO1xufVxuIiwgImltcG9ydCB7IEVNUFRZX09CSiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNvbW1pdFJvb3QsIGRpZmYgfSBmcm9tICcuL2RpZmYvaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgRnJhZ21lbnQgfSBmcm9tICcuL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogUmVuZGVyIGEgUHJlYWN0IHZpcnR1YWwgbm9kZSBpbnRvIGEgRE9NIGVsZW1lbnRcbiAqIEBwYXJhbSB7Q29tcG9uZW50Q2hpbGR9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG9cbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudCB8IG9iamVjdH0gW3JlcGxhY2VOb2RlXSBPcHRpb25hbDogQXR0ZW1wdCB0byByZS11c2UgYW5cbiAqIGV4aXN0aW5nIERPTSB0cmVlIHJvb3RlZCBhdCBgcmVwbGFjZU5vZGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudERvbSwgcmVwbGFjZU5vZGUpIHtcblx0aWYgKG9wdGlvbnMuX3Jvb3QpIG9wdGlvbnMuX3Jvb3Qodm5vZGUsIHBhcmVudERvbSk7XG5cblx0Ly8gV2UgYWJ1c2UgdGhlIGByZXBsYWNlTm9kZWAgcGFyYW1ldGVyIGluIGBoeWRyYXRlKClgIHRvIHNpZ25hbCBpZiB3ZSBhcmUgaW5cblx0Ly8gaHlkcmF0aW9uIG1vZGUgb3Igbm90IGJ5IHBhc3NpbmcgdGhlIGBoeWRyYXRlYCBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgRE9NXG5cdC8vIGVsZW1lbnQuLlxuXHRsZXQgaXNIeWRyYXRpbmcgPSB0eXBlb2YgcmVwbGFjZU5vZGUgPT0gJ2Z1bmN0aW9uJztcblxuXHQvLyBUbyBiZSBhYmxlIHRvIHN1cHBvcnQgY2FsbGluZyBgcmVuZGVyKClgIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lXG5cdC8vIERPTSBub2RlLCB3ZSBuZWVkIHRvIG9idGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXMgdHJlZS4gV2UgZG9cblx0Ly8gdGhpcyBieSBhc3NpZ25pbmcgYSBuZXcgYF9jaGlsZHJlbmAgcHJvcGVydHkgdG8gRE9NIG5vZGVzIHdoaWNoIHBvaW50c1xuXHQvLyB0byB0aGUgbGFzdCByZW5kZXJlZCB0cmVlLiBCeSBkZWZhdWx0IHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIHdoaWNoXG5cdC8vIG1lYW5zIHRoYXQgd2UgYXJlIG1vdW50aW5nIGEgbmV3IHRyZWUgZm9yIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgb2xkVk5vZGUgPSBpc0h5ZHJhdGluZ1xuXHRcdD8gbnVsbFxuXHRcdDogKHJlcGxhY2VOb2RlICYmIHJlcGxhY2VOb2RlLl9jaGlsZHJlbikgfHwgcGFyZW50RG9tLl9jaGlsZHJlbjtcblxuXHR2bm9kZSA9ICgoIWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlKSB8fCBwYXJlbnREb20pLl9jaGlsZHJlbiA9XG5cdFx0Y3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgW3Zub2RlXSk7XG5cblx0Ly8gTGlzdCBvZiBlZmZlY3RzIHRoYXQgbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgZGlmZmluZy5cblx0bGV0IGNvbW1pdFF1ZXVlID0gW10sXG5cdFx0cmVmUXVldWUgPSBbXTtcblx0ZGlmZihcblx0XHRwYXJlbnREb20sXG5cdFx0Ly8gRGV0ZXJtaW5lIHRoZSBuZXcgdm5vZGUgdHJlZSBhbmQgc3RvcmUgaXQgb24gdGhlIERPTSBlbGVtZW50IG9uXG5cdFx0Ly8gb3VyIGN1c3RvbSBgX2NoaWxkcmVuYCBwcm9wZXJ0eS5cblx0XHR2bm9kZSxcblx0XHRvbGRWTm9kZSB8fCBFTVBUWV9PQkosXG5cdFx0RU1QVFlfT0JKLFxuXHRcdHBhcmVudERvbS5uYW1lc3BhY2VVUkksXG5cdFx0IWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlXG5cdFx0XHQ/IFtyZXBsYWNlTm9kZV1cblx0XHRcdDogb2xkVk5vZGVcblx0XHRcdFx0PyBudWxsXG5cdFx0XHRcdDogcGFyZW50RG9tLmZpcnN0Q2hpbGRcblx0XHRcdFx0XHQ/IHNsaWNlLmNhbGwocGFyZW50RG9tLmNoaWxkTm9kZXMpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdGNvbW1pdFF1ZXVlLFxuXHRcdCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZVxuXHRcdFx0PyByZXBsYWNlTm9kZVxuXHRcdFx0OiBvbGRWTm9kZVxuXHRcdFx0XHQ/IG9sZFZOb2RlLl9kb21cblx0XHRcdFx0OiBwYXJlbnREb20uZmlyc3RDaGlsZCxcblx0XHRpc0h5ZHJhdGluZyxcblx0XHRyZWZRdWV1ZVxuXHQpO1xuXG5cdC8vIEZsdXNoIGFsbCBxdWV1ZWQgZWZmZWN0c1xuXHRjb21taXRSb290KGNvbW1pdFF1ZXVlLCB2bm9kZSwgcmVmUXVldWUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBET00gZWxlbWVudCB3aXRoIGRhdGEgZnJvbSBhIFByZWFjdCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7Q29tcG9uZW50Q2hpbGR9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgRE9NIGVsZW1lbnQgdG8gdXBkYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlKHZub2RlLCBwYXJlbnREb20pIHtcblx0cmVuZGVyKHZub2RlLCBwYXJlbnREb20sIGh5ZHJhdGUpO1xufVxuIiwgImltcG9ydCB7IGFzc2lnbiwgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUgfSBmcm9tICcuL2NyZWF0ZS1lbGVtZW50JztcblxuLyoqXG4gKiBDbG9uZXMgdGhlIGdpdmVuIFZOb2RlLCBvcHRpb25hbGx5IGFkZGluZyBhdHRyaWJ1dGVzL3Byb3BzIGFuZCByZXBsYWNpbmcgaXRzXG4gKiBjaGlsZHJlbi5cbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlIFRoZSB2aXJ0dWFsIERPTSBlbGVtZW50IHRvIGNsb25lXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgQXR0cmlidXRlcy9wcm9wcyB0byBhZGQgd2hlbiBjbG9uaW5nXG4gKiBAcGFyYW0ge0FycmF5PENvbXBvbmVudENoaWxkcmVuPn0gcmVzdCBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgd2lsbCBiZSB1c2VkXG4gKiBhcyByZXBsYWNlbWVudCBjaGlsZHJlbi5cbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lRWxlbWVudCh2bm9kZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG5cdGxldCBub3JtYWxpemVkUHJvcHMgPSBhc3NpZ24oe30sIHZub2RlLnByb3BzKSxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdGk7XG5cblx0bGV0IGRlZmF1bHRQcm9wcztcblxuXHRpZiAodm5vZGUudHlwZSAmJiB2bm9kZS50eXBlLmRlZmF1bHRQcm9wcykge1xuXHRcdGRlZmF1bHRQcm9wcyA9IHZub2RlLnR5cGUuZGVmYXVsdFByb3BzO1xuXHR9XG5cblx0Zm9yIChpIGluIHByb3BzKSB7XG5cdFx0aWYgKGkgPT0gJ2tleScpIGtleSA9IHByb3BzW2ldO1xuXHRcdGVsc2UgaWYgKGkgPT0gJ3JlZicpIHJlZiA9IHByb3BzW2ldO1xuXHRcdGVsc2UgaWYgKHByb3BzW2ldID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdG5vcm1hbGl6ZWRQcm9wc1tpXSA9IGRlZmF1bHRQcm9wc1tpXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gcHJvcHNbaV07XG5cdFx0fVxuXHR9XG5cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNoaWxkcmVuID1cblx0XHRcdGFyZ3VtZW50cy5sZW5ndGggPiAzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogY2hpbGRyZW47XG5cdH1cblxuXHRyZXR1cm4gY3JlYXRlVk5vZGUoXG5cdFx0dm5vZGUudHlwZSxcblx0XHRub3JtYWxpemVkUHJvcHMsXG5cdFx0a2V5IHx8IHZub2RlLmtleSxcblx0XHRyZWYgfHwgdm5vZGUucmVmLFxuXHRcdG51bGxcblx0KTtcbn1cbiIsICIvKipcbiAqIEZpbmQgdGhlIGNsb3Nlc3QgZXJyb3IgYm91bmRhcnkgdG8gYSB0aHJvd24gZXJyb3IgYW5kIGNhbGwgaXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBlcnJvciBUaGUgdGhyb3duIHZhbHVlXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZSBUaGUgdm5vZGUgdGhhdCB0aHJldyB0aGUgZXJyb3IgdGhhdCB3YXMgY2F1Z2h0IChleGNlcHRcbiAqIGZvciB1bm1vdW50aW5nIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdGhlIGhpZ2hlc3QgcGFyZW50IHRoYXQgd2FzIGJlaW5nXG4gKiB1bm1vdW50ZWQpXG4gKiBAcGFyYW0ge1ZOb2RlfSBbb2xkVk5vZGVdXG4gKiBAcGFyYW0ge0Vycm9ySW5mb30gW2Vycm9ySW5mb11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jYXRjaEVycm9yKGVycm9yLCB2bm9kZSwgb2xkVk5vZGUsIGVycm9ySW5mbykge1xuXHQvKiogQHR5cGUge0NvbXBvbmVudH0gKi9cblx0bGV0IGNvbXBvbmVudCxcblx0XHQvKiogQHR5cGUge0NvbXBvbmVudFR5cGV9ICovXG5cdFx0Y3Rvcixcblx0XHQvKiogQHR5cGUge2Jvb2xlYW59ICovXG5cdFx0aGFuZGxlZDtcblxuXHRmb3IgKDsgKHZub2RlID0gdm5vZGUuX3BhcmVudCk7ICkge1xuXHRcdGlmICgoY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudCkgJiYgIWNvbXBvbmVudC5fcHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y3RvciA9IGNvbXBvbmVudC5jb25zdHJ1Y3RvcjtcblxuXHRcdFx0XHRpZiAoY3RvciAmJiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50LnNldFN0YXRlKGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IGNvbXBvbmVudC5fZGlydHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoICE9IG51bGwpIHtcblx0XHRcdFx0XHRjb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbyB8fCB7fSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IGNvbXBvbmVudC5fZGlydHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaGlzIGlzIGFuIGVycm9yIGJvdW5kYXJ5LiBNYXJrIGl0IGFzIGhhdmluZyBiYWlsZWQgb3V0LCBhbmQgd2hldGhlciBpdCB3YXMgbWlkLWh5ZHJhdGlvbi5cblx0XHRcdFx0aWYgKGhhbmRsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGNvbXBvbmVudC5fcGVuZGluZ0Vycm9yID0gY29tcG9uZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlcnJvciA9IGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhyb3cgZXJyb3I7XG59XG4iLCAiaW1wb3J0IHsgb3B0aW9ucyBhcyBfb3B0aW9ucyB9IGZyb20gJ3ByZWFjdCc7XG5cbi8qKiBAdHlwZSB7bnVtYmVyfSAqL1xubGV0IGN1cnJlbnRJbmRleDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5sZXQgY3VycmVudENvbXBvbmVudDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5sZXQgcHJldmlvdXNDb21wb25lbnQ7XG5cbi8qKiBAdHlwZSB7bnVtYmVyfSAqL1xubGV0IGN1cnJlbnRIb29rID0gMDtcblxuLyoqIEB0eXBlIHtBcnJheTxpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnQ+fSAqL1xubGV0IGFmdGVyUGFpbnRFZmZlY3RzID0gW107XG5cbi8vIENhc3QgdG8gdXNlIGludGVybmFsIE9wdGlvbnMgdHlwZVxuY29uc3Qgb3B0aW9ucyA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuT3B0aW9uc30gKi8gKF9vcHRpb25zKTtcblxubGV0IG9sZEJlZm9yZURpZmYgPSBvcHRpb25zLl9kaWZmO1xubGV0IG9sZEJlZm9yZVJlbmRlciA9IG9wdGlvbnMuX3JlbmRlcjtcbmxldCBvbGRBZnRlckRpZmYgPSBvcHRpb25zLmRpZmZlZDtcbmxldCBvbGRDb21taXQgPSBvcHRpb25zLl9jb21taXQ7XG5sZXQgb2xkQmVmb3JlVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcbmxldCBvbGRSb290ID0gb3B0aW9ucy5fcm9vdDtcblxuY29uc3QgUkFGX1RJTUVPVVQgPSAxMDA7XG5sZXQgcHJldlJhZjtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy5fZGlmZiA9IHZub2RlID0+IHtcblx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG5cdGlmIChvbGRCZWZvcmVEaWZmKSBvbGRCZWZvcmVEaWZmKHZub2RlKTtcbn07XG5cbm9wdGlvbnMuX3Jvb3QgPSAodm5vZGUsIHBhcmVudERvbSkgPT4ge1xuXHRpZiAodm5vZGUgJiYgcGFyZW50RG9tLl9jaGlsZHJlbiAmJiBwYXJlbnREb20uX2NoaWxkcmVuLl9tYXNrKSB7XG5cdFx0dm5vZGUuX21hc2sgPSBwYXJlbnREb20uX2NoaWxkcmVuLl9tYXNrO1xuXHR9XG5cblx0aWYgKG9sZFJvb3QpIG9sZFJvb3Qodm5vZGUsIHBhcmVudERvbSk7XG59O1xuXG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUpID0+IHZvaWR9ICovXG5vcHRpb25zLl9yZW5kZXIgPSB2bm9kZSA9PiB7XG5cdGlmIChvbGRCZWZvcmVSZW5kZXIpIG9sZEJlZm9yZVJlbmRlcih2bm9kZSk7XG5cblx0Y3VycmVudENvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGN1cnJlbnRJbmRleCA9IDA7XG5cblx0Y29uc3QgaG9va3MgPSBjdXJyZW50Q29tcG9uZW50Ll9faG9va3M7XG5cdGlmIChob29rcykge1xuXHRcdGlmIChwcmV2aW91c0NvbXBvbmVudCA9PT0gY3VycmVudENvbXBvbmVudCkge1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzID0gW107XG5cdFx0XHRjdXJyZW50Q29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdGhvb2tzLl9saXN0LmZvckVhY2goaG9va0l0ZW0gPT4ge1xuXHRcdFx0XHRpZiAoaG9va0l0ZW0uX25leHRWYWx1ZSkge1xuXHRcdFx0XHRcdGhvb2tJdGVtLl92YWx1ZSA9IGhvb2tJdGVtLl9uZXh0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aG9va0l0ZW0uX3BlbmRpbmdBcmdzID0gaG9va0l0ZW0uX25leHRWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGhvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUVmZmVjdCk7XG5cdFx0XHRob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHRcdGN1cnJlbnRJbmRleCA9IDA7XG5cdFx0fVxuXHR9XG5cdHByZXZpb3VzQ29tcG9uZW50ID0gY3VycmVudENvbXBvbmVudDtcbn07XG5cbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMuZGlmZmVkID0gdm5vZGUgPT4ge1xuXHRpZiAob2xkQWZ0ZXJEaWZmKSBvbGRBZnRlckRpZmYodm5vZGUpO1xuXG5cdGNvbnN0IGMgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRpZiAoYyAmJiBjLl9faG9va3MpIHtcblx0XHRpZiAoYy5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5sZW5ndGgpIGFmdGVyUGFpbnQoYWZ0ZXJQYWludEVmZmVjdHMucHVzaChjKSk7XG5cdFx0Yy5fX2hvb2tzLl9saXN0LmZvckVhY2goaG9va0l0ZW0gPT4ge1xuXHRcdFx0aWYgKGhvb2tJdGVtLl9wZW5kaW5nQXJncykge1xuXHRcdFx0XHRob29rSXRlbS5fYXJncyA9IGhvb2tJdGVtLl9wZW5kaW5nQXJncztcblx0XHRcdH1cblx0XHRcdGhvb2tJdGVtLl9wZW5kaW5nQXJncyA9IHVuZGVmaW5lZDtcblx0XHR9KTtcblx0fVxuXHRwcmV2aW91c0NvbXBvbmVudCA9IGN1cnJlbnRDb21wb25lbnQgPSBudWxsO1xufTtcblxuLy8gVE9ETzogSW1wcm92ZSB0eXBpbmcgb2YgY29tbWl0UXVldWUgcGFyYW1ldGVyXG4vKiogQHR5cGUgeyh2bm9kZTogaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGUsIGNvbW1pdFF1ZXVlOiBhbnkpID0+IHZvaWR9ICovXG5vcHRpb25zLl9jb21taXQgPSAodm5vZGUsIGNvbW1pdFF1ZXVlKSA9PiB7XG5cdGNvbW1pdFF1ZXVlLnNvbWUoY29tcG9uZW50ID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzID0gY29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MuZmlsdGVyKGNiID0+XG5cdFx0XHRcdGNiLl92YWx1ZSA/IGludm9rZUVmZmVjdChjYikgOiB0cnVlXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbW1pdFF1ZXVlLnNvbWUoYyA9PiB7XG5cdFx0XHRcdGlmIChjLl9yZW5kZXJDYWxsYmFja3MpIGMuX3JlbmRlckNhbGxiYWNrcyA9IFtdO1xuXHRcdFx0fSk7XG5cdFx0XHRjb21taXRRdWV1ZSA9IFtdO1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjb21wb25lbnQuX3Zub2RlKTtcblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvbGRDb21taXQpIG9sZENvbW1pdCh2bm9kZSwgY29tbWl0UXVldWUpO1xufTtcblxuLyoqIEB0eXBlIHsodm5vZGU6IGltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlKSA9PiB2b2lkfSAqL1xub3B0aW9ucy51bm1vdW50ID0gdm5vZGUgPT4ge1xuXHRpZiAob2xkQmVmb3JlVW5tb3VudCkgb2xkQmVmb3JlVW5tb3VudCh2bm9kZSk7XG5cblx0Y29uc3QgYyA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjICYmIGMuX19ob29rcykge1xuXHRcdGxldCBoYXNFcnJvcmVkO1xuXHRcdGMuX19ob29rcy5fbGlzdC5mb3JFYWNoKHMgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW52b2tlQ2xlYW51cChzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aGFzRXJyb3JlZCA9IGU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Yy5fX2hvb2tzID0gdW5kZWZpbmVkO1xuXHRcdGlmIChoYXNFcnJvcmVkKSBvcHRpb25zLl9jYXRjaEVycm9yKGhhc0Vycm9yZWQsIGMuX3Zub2RlKTtcblx0fVxufTtcblxuLyoqXG4gKiBHZXQgYSBob29rJ3Mgc3RhdGUgZnJvbSB0aGUgY3VycmVudENvbXBvbmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaG9vayB0byBnZXRcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIFRoZSBpbmRleCBvZiB0aGUgaG9vayB0byBnZXRcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGdldEhvb2tTdGF0ZShpbmRleCwgdHlwZSkge1xuXHRpZiAob3B0aW9ucy5faG9vaykge1xuXHRcdG9wdGlvbnMuX2hvb2soY3VycmVudENvbXBvbmVudCwgaW5kZXgsIGN1cnJlbnRIb29rIHx8IHR5cGUpO1xuXHR9XG5cdGN1cnJlbnRIb29rID0gMDtcblxuXHQvLyBMYXJnZWx5IGluc3BpcmVkIGJ5OlxuXHQvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNoYWVsLWtsZWluL2Z1bmN5LmpzL2Jsb2IvZjZiZTczNDY4ZTZlYzQ2YjBmZjVhYTNjYzRjOWJhZjcyYTI5MDI1YS9zcmMvaG9va3MvY29yZV9ob29rcy5tanNcblx0Ly8gKiBodHRwczovL2dpdGh1Yi5jb20vbWljaGFlbC1rbGVpbi9mdW5jeS5qcy9ibG9iLzY1MGJlYWE1OGM0M2MzM2E3NDgyMGEzYzk4YjNjNzA3OWNmMmUzMzMvc3JjL3JlbmRlcmVyLm1qc1xuXHQvLyBPdGhlciBpbXBsZW1lbnRhdGlvbnMgdG8gbG9vayBhdDpcblx0Ly8gKiBodHRwczovL2NvZGVzYW5kYm94LmlvL3MvbW5veDA1cXA4XG5cdGNvbnN0IGhvb2tzID1cblx0XHRjdXJyZW50Q29tcG9uZW50Ll9faG9va3MgfHxcblx0XHQoY3VycmVudENvbXBvbmVudC5fX2hvb2tzID0ge1xuXHRcdFx0X2xpc3Q6IFtdLFxuXHRcdFx0X3BlbmRpbmdFZmZlY3RzOiBbXVxuXHRcdH0pO1xuXG5cdGlmIChpbmRleCA+PSBob29rcy5fbGlzdC5sZW5ndGgpIHtcblx0XHRob29rcy5fbGlzdC5wdXNoKHt9KTtcblx0fVxuXG5cdHJldHVybiBob29rcy5fbGlzdFtpbmRleF07XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIHt1bmtub3dufSBTXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkRpc3BhdGNoPGltcG9ydCgnLi9pbmRleCcpLlN0YXRlVXBkYXRlcjxTPj59IFtpbml0aWFsU3RhdGVdXG4gKiBAcmV0dXJucyB7W1MsIChzdGF0ZTogUykgPT4gdm9pZF19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcblx0Y3VycmVudEhvb2sgPSAxO1xuXHRyZXR1cm4gdXNlUmVkdWNlcihpbnZva2VPclJldHVybiwgaW5pdGlhbFN0YXRlKTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFNcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gQVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5SZWR1Y2VyPFMsIEE+fSByZWR1Y2VyXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkRpc3BhdGNoPGltcG9ydCgnLi9pbmRleCcpLlN0YXRlVXBkYXRlcjxTPj59IGluaXRpYWxTdGF0ZVxuICogQHBhcmFtIHsoaW5pdGlhbFN0YXRlOiBhbnkpID0+IHZvaWR9IFtpbml0XVxuICogQHJldHVybnMge1sgUywgKHN0YXRlOiBTKSA9PiB2b2lkIF19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSwgaW5pdCkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlJlZHVjZXJIb29rU3RhdGV9ICovXG5cdGNvbnN0IGhvb2tTdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMik7XG5cdGhvb2tTdGF0ZS5fcmVkdWNlciA9IHJlZHVjZXI7XG5cdGlmICghaG9va1N0YXRlLl9jb21wb25lbnQpIHtcblx0XHRob29rU3RhdGUuX3ZhbHVlID0gW1xuXHRcdFx0IWluaXQgPyBpbnZva2VPclJldHVybih1bmRlZmluZWQsIGluaXRpYWxTdGF0ZSkgOiBpbml0KGluaXRpYWxTdGF0ZSksXG5cblx0XHRcdGFjdGlvbiA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGhvb2tTdGF0ZS5fbmV4dFZhbHVlXG5cdFx0XHRcdFx0PyBob29rU3RhdGUuX25leHRWYWx1ZVswXVxuXHRcdFx0XHRcdDogaG9va1N0YXRlLl92YWx1ZVswXTtcblx0XHRcdFx0Y29uc3QgbmV4dFZhbHVlID0gaG9va1N0YXRlLl9yZWR1Y2VyKGN1cnJlbnRWYWx1ZSwgYWN0aW9uKTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlICE9PSBuZXh0VmFsdWUpIHtcblx0XHRcdFx0XHRob29rU3RhdGUuX25leHRWYWx1ZSA9IFtuZXh0VmFsdWUsIGhvb2tTdGF0ZS5fdmFsdWVbMV1dO1xuXHRcdFx0XHRcdGhvb2tTdGF0ZS5fY29tcG9uZW50LnNldFN0YXRlKHt9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF07XG5cblx0XHRob29rU3RhdGUuX2NvbXBvbmVudCA9IGN1cnJlbnRDb21wb25lbnQ7XG5cblx0XHRpZiAoIWN1cnJlbnRDb21wb25lbnQuX2hhc1NjdUZyb21Ib29rcykge1xuXHRcdFx0Y3VycmVudENvbXBvbmVudC5faGFzU2N1RnJvbUhvb2tzID0gdHJ1ZTtcblx0XHRcdGxldCBwcmV2U2N1ID0gY3VycmVudENvbXBvbmVudC5zaG91bGRDb21wb25lbnRVcGRhdGU7XG5cdFx0XHRjb25zdCBwcmV2Q1dVID0gY3VycmVudENvbXBvbmVudC5jb21wb25lbnRXaWxsVXBkYXRlO1xuXG5cdFx0XHQvLyBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmb3JjZWQgdXBkYXRlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgIHdpbGxcblx0XHRcdC8vIG5vdCBiZSBjYWxsZWQuIEJ1dCB3ZSB1c2UgdGhhdCB0byB1cGRhdGUgdGhlIGhvb2sgdmFsdWVzLCBzbyB3ZVxuXHRcdFx0Ly8gbmVlZCB0byBjYWxsIGl0LlxuXHRcdFx0Y3VycmVudENvbXBvbmVudC5jb21wb25lbnRXaWxsVXBkYXRlID0gZnVuY3Rpb24gKHAsIHMsIGMpIHtcblx0XHRcdFx0aWYgKHRoaXMuX2ZvcmNlKSB7XG5cdFx0XHRcdFx0bGV0IHRtcCA9IHByZXZTY3U7XG5cdFx0XHRcdFx0Ly8gQ2xlYXIgdG8gYXZvaWQgb3RoZXIgc0NVIGhvb2tzIGZyb20gYmVpbmcgY2FsbGVkXG5cdFx0XHRcdFx0cHJldlNjdSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR1cGRhdGVIb29rU3RhdGUocCwgcywgYyk7XG5cdFx0XHRcdFx0cHJldlNjdSA9IHRtcDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwcmV2Q1dVKSBwcmV2Q1dVLmNhbGwodGhpcywgcCwgcywgYyk7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBUaGlzIFNDVSBoYXMgdGhlIHB1cnBvc2Ugb2YgYmFpbGluZyBvdXQgYWZ0ZXIgcmVwZWF0ZWQgdXBkYXRlc1xuXHRcdFx0Ly8gdG8gc3RhdGVmdWwgaG9va3MuXG5cdFx0XHQvLyB3ZSBzdG9yZSB0aGUgbmV4dCB2YWx1ZSBpbiBfbmV4dFZhbHVlWzBdIGFuZCBrZWVwIGRvaW5nIHRoYXQgZm9yIGFsbFxuXHRcdFx0Ly8gc3RhdGUgc2V0dGVycywgaWYgd2UgaGF2ZSBuZXh0IHN0YXRlcyBhbmRcblx0XHRcdC8vIGFsbCBuZXh0IHN0YXRlcyB3aXRoaW4gYSBjb21wb25lbnQgZW5kIHVwIGJlaW5nIGVxdWFsIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlXG5cdFx0XHQvLyB3ZSBhcmUgc2FmZSB0byBiYWlsIG91dCBmb3IgdGhpcyBzcGVjaWZpYyBjb21wb25lbnQuXG5cdFx0XHQvKipcblx0XHRcdCAqXG5cdFx0XHQgKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50W1wic2hvdWxkQ29tcG9uZW50VXBkYXRlXCJdfVxuXHRcdFx0ICovXG5cdFx0XHQvLyBAdHMtaWdub3JlIC0gV2UgZG9uJ3QgdXNlIFRTIHRvIGRvd250cmFuc3BpbGVcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbm5lci1kZWNsYXJhdGlvbnNcblx0XHRcdGZ1bmN0aW9uIHVwZGF0ZUhvb2tTdGF0ZShwLCBzLCBjKSB7XG5cdFx0XHRcdGlmICghaG9va1N0YXRlLl9jb21wb25lbnQuX19ob29rcykgcmV0dXJuIHRydWU7XG5cblx0XHRcdFx0LyoqIEB0eXBlIHsoeDogaW1wb3J0KCcuL2ludGVybmFsJykuSG9va1N0YXRlKSA9PiB4IGlzIGltcG9ydCgnLi9pbnRlcm5hbCcpLlJlZHVjZXJIb29rU3RhdGV9ICovXG5cdFx0XHRcdGNvbnN0IGlzU3RhdGVIb29rID0geCA9PiAhIXguX2NvbXBvbmVudDtcblx0XHRcdFx0Y29uc3Qgc3RhdGVIb29rcyA9XG5cdFx0XHRcdFx0aG9va1N0YXRlLl9jb21wb25lbnQuX19ob29rcy5fbGlzdC5maWx0ZXIoaXNTdGF0ZUhvb2spO1xuXG5cdFx0XHRcdGNvbnN0IGFsbEhvb2tzRW1wdHkgPSBzdGF0ZUhvb2tzLmV2ZXJ5KHggPT4gIXguX25leHRWYWx1ZSk7XG5cdFx0XHRcdC8vIFdoZW4gd2UgaGF2ZSBubyB1cGRhdGVkIGhvb2tzIGluIHRoZSBjb21wb25lbnQgd2UgaW52b2tlIHRoZSBwcmV2aW91cyBTQ1Ugb3Jcblx0XHRcdFx0Ly8gdHJhdmVyc2UgdGhlIFZET00gdHJlZSBmdXJ0aGVyLlxuXHRcdFx0XHRpZiAoYWxsSG9va3NFbXB0eSkge1xuXHRcdFx0XHRcdHJldHVybiBwcmV2U2N1ID8gcHJldlNjdS5jYWxsKHRoaXMsIHAsIHMsIGMpIDogdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBjb21wb25lbnRzIHdpdGggYSBuZXh0VmFsdWUgc2V0IHRoYXRcblx0XHRcdFx0Ly8gaGF2ZSB2YWx1ZXMgdGhhdCBhcmVuJ3QgZXF1YWwgdG8gb25lIGFub3RoZXIgdGhpcyBwdXNoZXNcblx0XHRcdFx0Ly8gdXMgdG8gdXBkYXRlIGZ1cnRoZXIgZG93biB0aGUgdHJlZVxuXHRcdFx0XHRsZXQgc2hvdWxkVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRcdHN0YXRlSG9va3MuZm9yRWFjaChob29rSXRlbSA9PiB7XG5cdFx0XHRcdFx0aWYgKGhvb2tJdGVtLl9uZXh0VmFsdWUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGhvb2tJdGVtLl92YWx1ZVswXTtcblx0XHRcdFx0XHRcdGhvb2tJdGVtLl92YWx1ZSA9IGhvb2tJdGVtLl9uZXh0VmFsdWU7XG5cdFx0XHRcdFx0XHRob29rSXRlbS5fbmV4dFZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSAhPT0gaG9va0l0ZW0uX3ZhbHVlWzBdKSBzaG91bGRVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIHNob3VsZFVwZGF0ZSB8fCBob29rU3RhdGUuX2NvbXBvbmVudC5wcm9wcyAhPT0gcFxuXHRcdFx0XHRcdD8gcHJldlNjdVxuXHRcdFx0XHRcdFx0PyBwcmV2U2N1LmNhbGwodGhpcywgcCwgcywgYylcblx0XHRcdFx0XHRcdDogdHJ1ZVxuXHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRDb21wb25lbnQuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdXBkYXRlSG9va1N0YXRlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBob29rU3RhdGUuX25leHRWYWx1ZSB8fCBob29rU3RhdGUuX3ZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuRWZmZWN0fSBjYWxsYmFja1xuICogQHBhcmFtIHt1bmtub3duW119IGFyZ3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRWZmZWN0KGNhbGxiYWNrLCBhcmdzKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuRWZmZWN0SG9va1N0YXRlfSAqL1xuXHRjb25zdCBzdGF0ZSA9IGdldEhvb2tTdGF0ZShjdXJyZW50SW5kZXgrKywgMyk7XG5cdGlmICghb3B0aW9ucy5fc2tpcEVmZmVjdHMgJiYgYXJnc0NoYW5nZWQoc3RhdGUuX2FyZ3MsIGFyZ3MpKSB7XG5cdFx0c3RhdGUuX3ZhbHVlID0gY2FsbGJhY2s7XG5cdFx0c3RhdGUuX3BlbmRpbmdBcmdzID0gYXJncztcblxuXHRcdGN1cnJlbnRDb21wb25lbnQuX19ob29rcy5fcGVuZGluZ0VmZmVjdHMucHVzaChzdGF0ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdH0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBhcmdzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjYWxsYmFjaywgYXJncykge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdEhvb2tTdGF0ZX0gKi9cblx0Y29uc3Qgc3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDQpO1xuXHRpZiAoIW9wdGlvbnMuX3NraXBFZmZlY3RzICYmIGFyZ3NDaGFuZ2VkKHN0YXRlLl9hcmdzLCBhcmdzKSkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IGNhbGxiYWNrO1xuXHRcdHN0YXRlLl9wZW5kaW5nQXJncyA9IGFyZ3M7XG5cblx0XHRjdXJyZW50Q29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MucHVzaChzdGF0ZSk7XG5cdH1cbn1cblxuLyoqIEB0eXBlIHsoaW5pdGlhbFZhbHVlOiB1bmtub3duKSA9PiB1bmtub3dufSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcblx0Y3VycmVudEhvb2sgPSA1O1xuXHRyZXR1cm4gdXNlTWVtbygoKSA9PiAoeyBjdXJyZW50OiBpbml0aWFsVmFsdWUgfSksIFtdKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVmXG4gKiBAcGFyYW0geygpID0+IG9iamVjdH0gY3JlYXRlSGFuZGxlXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlSGFuZGxlLCBhcmdzKSB7XG5cdGN1cnJlbnRIb29rID0gNjtcblx0dXNlTGF5b3V0RWZmZWN0KFxuXHRcdCgpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgcmVmID09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVmKGNyZWF0ZUhhbmRsZSgpKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHJlZihudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAocmVmKSB7XG5cdFx0XHRcdHJlZi5jdXJyZW50ID0gY3JlYXRlSGFuZGxlKCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiAocmVmLmN1cnJlbnQgPSBudWxsKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFyZ3MgPT0gbnVsbCA/IGFyZ3MgOiBhcmdzLmNvbmNhdChyZWYpXG5cdCk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIHt1bmtub3dufSBUXG4gKiBAcGFyYW0geygpID0+IFR9IGZhY3RvcnlcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBhcmdzXG4gKiBAcmV0dXJucyB7VH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbW8oZmFjdG9yeSwgYXJncykge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLk1lbW9Ib29rU3RhdGU8VD59ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA3KTtcblx0aWYgKGFyZ3NDaGFuZ2VkKHN0YXRlLl9hcmdzLCBhcmdzKSkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IGZhY3RvcnkoKTtcblx0XHRzdGF0ZS5fYXJncyA9IGFyZ3M7XG5cdFx0c3RhdGUuX2ZhY3RvcnkgPSBmYWN0b3J5O1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gYXJnc1xuICogQHJldHVybnMgeygpID0+IHZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFjayhjYWxsYmFjaywgYXJncykge1xuXHRjdXJyZW50SG9vayA9IDg7XG5cdHJldHVybiB1c2VNZW1vKCgpID0+IGNhbGxiYWNrLCBhcmdzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdENvbnRleHR9IGNvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNvbnRleHQoY29udGV4dCkge1xuXHRjb25zdCBwcm92aWRlciA9IGN1cnJlbnRDb21wb25lbnQuY29udGV4dFtjb250ZXh0Ll9pZF07XG5cdC8vIFdlIGNvdWxkIHNraXAgdGhpcyBjYWxsIGhlcmUsIGJ1dCB0aGFuIHdlJ2Qgbm90IGNhbGxcblx0Ly8gYG9wdGlvbnMuX2hvb2tgLiBXZSBuZWVkIHRvIGRvIHRoYXQgaW4gb3JkZXIgdG8gbWFrZVxuXHQvLyB0aGUgZGV2dG9vbHMgYXdhcmUgb2YgdGhpcyBob29rLlxuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbnRleHRIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA5KTtcblx0Ly8gVGhlIGRldnRvb2xzIG5lZWRzIGFjY2VzcyB0byB0aGUgY29udGV4dCBvYmplY3QgdG9cblx0Ly8gYmUgYWJsZSB0byBwdWxsIG9mIHRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gbm8gcHJvdmlkZXJcblx0Ly8gaXMgcHJlc2VudCBpbiB0aGUgdHJlZS5cblx0c3RhdGUuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRpZiAoIXByb3ZpZGVyKSByZXR1cm4gY29udGV4dC5fZGVmYXVsdFZhbHVlO1xuXHQvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBzYWZlIHRvIGNvbnZlcnQgdG8gXCIhXCJcblx0aWYgKHN0YXRlLl92YWx1ZSA9PSBudWxsKSB7XG5cdFx0c3RhdGUuX3ZhbHVlID0gdHJ1ZTtcblx0XHRwcm92aWRlci5zdWIoY3VycmVudENvbXBvbmVudCk7XG5cdH1cblx0cmV0dXJuIHByb3ZpZGVyLnByb3BzLnZhbHVlO1xufVxuXG4vKipcbiAqIERpc3BsYXkgYSBjdXN0b20gbGFiZWwgZm9yIGEgY3VzdG9tIGhvb2sgZm9yIHRoZSBkZXZ0b29scyBwYW5lbFxuICogQHR5cGUgezxUPih2YWx1ZTogVCwgY2I/OiAodmFsdWU6IFQpID0+IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlcikge1xuXHRpZiAob3B0aW9ucy51c2VEZWJ1Z1ZhbHVlKSB7XG5cdFx0b3B0aW9ucy51c2VEZWJ1Z1ZhbHVlKFxuXHRcdFx0Zm9ybWF0dGVyID8gZm9ybWF0dGVyKHZhbHVlKSA6IC8qKiBAdHlwZSB7YW55fSovICh2YWx1ZSlcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHsoZXJyb3I6IHVua25vd24sIGVycm9ySW5mbzogaW1wb3J0KCdwcmVhY3QnKS5FcnJvckluZm8pID0+IHZvaWR9IGNiXG4gKiBAcmV0dXJucyB7W3Vua25vd24sICgpID0+IHZvaWRdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRXJyb3JCb3VuZGFyeShjYikge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVycm9yQm91bmRhcnlIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAxMCk7XG5cdGNvbnN0IGVyclN0YXRlID0gdXNlU3RhdGUoKTtcblx0c3RhdGUuX3ZhbHVlID0gY2I7XG5cdGlmICghY3VycmVudENvbXBvbmVudC5jb21wb25lbnREaWRDYXRjaCkge1xuXHRcdGN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2ggPSAoZXJyLCBlcnJvckluZm8pID0+IHtcblx0XHRcdGlmIChzdGF0ZS5fdmFsdWUpIHN0YXRlLl92YWx1ZShlcnIsIGVycm9ySW5mbyk7XG5cdFx0XHRlcnJTdGF0ZVsxXShlcnIpO1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIFtcblx0XHRlcnJTdGF0ZVswXSxcblx0XHQoKSA9PiB7XG5cdFx0XHRlcnJTdGF0ZVsxXSh1bmRlZmluZWQpO1xuXHRcdH1cblx0XTtcbn1cblxuLyoqIEB0eXBlIHsoKSA9PiBzdHJpbmd9ICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuSWRIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAxMSk7XG5cdGlmICghc3RhdGUuX3ZhbHVlKSB7XG5cdFx0Ly8gR3JhYiBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0aGUgbmVhcmVzdCBhc3luYyBib3VuZGFyeSBub2RlLlxuXHRcdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsLmQnKS5WTm9kZX0gKi9cblx0XHRsZXQgcm9vdCA9IGN1cnJlbnRDb21wb25lbnQuX3Zub2RlO1xuXHRcdHdoaWxlIChyb290ICE9PSBudWxsICYmICFyb290Ll9tYXNrICYmIHJvb3QuX3BhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0cm9vdCA9IHJvb3QuX3BhcmVudDtcblx0XHR9XG5cblx0XHRsZXQgbWFzayA9IHJvb3QuX21hc2sgfHwgKHJvb3QuX21hc2sgPSBbMCwgMF0pO1xuXHRcdHN0YXRlLl92YWx1ZSA9ICdQJyArIG1hc2tbMF0gKyAnLScgKyBtYXNrWzFdKys7XG5cdH1cblxuXHRyZXR1cm4gc3RhdGUuX3ZhbHVlO1xufVxuXG4vKipcbiAqIEFmdGVyIHBhaW50IGVmZmVjdHMgY29uc3VtZXIuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoQWZ0ZXJQYWludEVmZmVjdHMoKSB7XG5cdGxldCBjb21wb25lbnQ7XG5cdHdoaWxlICgoY29tcG9uZW50ID0gYWZ0ZXJQYWludEVmZmVjdHMuc2hpZnQoKSkpIHtcblx0XHRpZiAoIWNvbXBvbmVudC5fcGFyZW50RG9tIHx8ICFjb21wb25lbnQuX19ob29rcykgY29udGludWU7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUNsZWFudXApO1xuXHRcdFx0Y29tcG9uZW50Ll9faG9va3MuX3BlbmRpbmdFZmZlY3RzLmZvckVhY2goaW52b2tlRWZmZWN0KTtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjb21wb25lbnQuX3Zub2RlKTtcblx0XHR9XG5cdH1cbn1cblxubGV0IEhBU19SQUYgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09ICdmdW5jdGlvbic7XG5cbi8qKlxuICogU2NoZWR1bGUgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBicm93c2VyIGhhcyBhIGNoYW5jZSB0byBwYWludCBhIG5ldyBmcmFtZS5cbiAqIERvIHRoaXMgYnkgY29tYmluaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSAockFGKSArIHNldFRpbWVvdXQgdG8gaW52b2tlIGEgY2FsbGJhY2sgYWZ0ZXJcbiAqIHRoZSBuZXh0IGJyb3dzZXIgZnJhbWUuXG4gKlxuICogQWxzbywgc2NoZWR1bGUgYSB0aW1lb3V0IGluIHBhcmFsbGVsIHRvIHRoZSB0aGUgckFGIHRvIGVuc3VyZSB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZFxuICogZXZlbiBpZiBSQUYgZG9lc24ndCBmaXJlIChmb3IgZXhhbXBsZSBpZiB0aGUgYnJvd3NlciB0YWIgaXMgbm90IHZpc2libGUpXG4gKlxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhZnRlck5leHRGcmFtZShjYWxsYmFjaykge1xuXHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRpZiAoSEFTX1JBRikgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTtcblx0XHRzZXRUaW1lb3V0KGNhbGxiYWNrKTtcblx0fTtcblx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoZG9uZSwgUkFGX1RJTUVPVVQpO1xuXG5cdGxldCByYWY7XG5cdGlmIChIQVNfUkFGKSB7XG5cdFx0cmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvbmUpO1xuXHR9XG59XG5cbi8vIE5vdGU6IGlmIHNvbWVvbmUgdXNlZCBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLFxuLy8gdGhlbiBlZmZlY3RzIHdpbGwgQUxXQVlTIHJ1biBvbiB0aGUgTkVYVCBmcmFtZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IG9uZSwgaW5jdXJyaW5nIGEgfjE2bXMgZGVsYXkuXG4vLyBQZXJoYXBzIHRoaXMgaXMgbm90IHN1Y2ggYSBiaWcgZGVhbC5cbi8qKlxuICogU2NoZWR1bGUgYWZ0ZXJQYWludEVmZmVjdHMgZmx1c2ggYWZ0ZXIgdGhlIGJyb3dzZXIgcGFpbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gbmV3UXVldWVMZW5ndGhcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhZnRlclBhaW50KG5ld1F1ZXVlTGVuZ3RoKSB7XG5cdGlmIChuZXdRdWV1ZUxlbmd0aCA9PT0gMSB8fCBwcmV2UmFmICE9PSBvcHRpb25zLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuXHRcdHByZXZSYWYgPSBvcHRpb25zLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcblx0XHQocHJldlJhZiB8fCBhZnRlck5leHRGcmFtZSkoZmx1c2hBZnRlclBhaW50RWZmZWN0cyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkhvb2tTdGF0ZX0gaG9va1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGludm9rZUNsZWFudXAoaG9vaykge1xuXHQvLyBBIGhvb2sgY2xlYW51cCBjYW4gaW50cm9kdWNlIGEgY2FsbCB0byByZW5kZXIgd2hpY2ggY3JlYXRlcyBhIG5ldyByb290LCB0aGlzIHdpbGwgY2FsbCBvcHRpb25zLnZub2RlXG5cdC8vIGFuZCBtb3ZlIHRoZSBjdXJyZW50Q29tcG9uZW50IGF3YXkuXG5cdGNvbnN0IGNvbXAgPSBjdXJyZW50Q29tcG9uZW50O1xuXHRsZXQgY2xlYW51cCA9IGhvb2suX2NsZWFudXA7XG5cdGlmICh0eXBlb2YgY2xlYW51cCA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0aG9vay5fY2xlYW51cCA9IHVuZGVmaW5lZDtcblx0XHRjbGVhbnVwKCk7XG5cdH1cblxuXHRjdXJyZW50Q29tcG9uZW50ID0gY29tcDtcbn1cblxuLyoqXG4gKiBJbnZva2UgYSBIb29rJ3MgZWZmZWN0XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdEhvb2tTdGF0ZX0gaG9va1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGludm9rZUVmZmVjdChob29rKSB7XG5cdC8vIEEgaG9vayBjYWxsIGNhbiBpbnRyb2R1Y2UgYSBjYWxsIHRvIHJlbmRlciB3aGljaCBjcmVhdGVzIGEgbmV3IHJvb3QsIHRoaXMgd2lsbCBjYWxsIG9wdGlvbnMudm5vZGVcblx0Ly8gYW5kIG1vdmUgdGhlIGN1cnJlbnRDb21wb25lbnQgYXdheS5cblx0Y29uc3QgY29tcCA9IGN1cnJlbnRDb21wb25lbnQ7XG5cdGhvb2suX2NsZWFudXAgPSBob29rLl92YWx1ZSgpO1xuXHRjdXJyZW50Q29tcG9uZW50ID0gY29tcDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gb2xkQXJnc1xuICogQHBhcmFtIHt1bmtub3duW119IG5ld0FyZ3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBhcmdzQ2hhbmdlZChvbGRBcmdzLCBuZXdBcmdzKSB7XG5cdHJldHVybiAoXG5cdFx0IW9sZEFyZ3MgfHxcblx0XHRvbGRBcmdzLmxlbmd0aCAhPT0gbmV3QXJncy5sZW5ndGggfHxcblx0XHRuZXdBcmdzLnNvbWUoKGFyZywgaW5kZXgpID0+IGFyZyAhPT0gb2xkQXJnc1tpbmRleF0pXG5cdCk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIEFyZ1xuICogQHBhcmFtIHtBcmd9IGFyZ1xuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IGFueX0gZlxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gaW52b2tlT3JSZXR1cm4oYXJnLCBmKSB7XG5cdHJldHVybiB0eXBlb2YgZiA9PSAnZnVuY3Rpb24nID8gZihhcmcpIDogZjtcbn1cbiIsICIvKipcbiAqIEFzc2lnbiBwcm9wZXJ0aWVzIGZyb20gYHByb3BzYCB0byBgb2JqYFxuICogQHRlbXBsYXRlIE8sIFAgVGhlIG9iaiBhbmQgcHJvcHMgdHlwZXNcbiAqIEBwYXJhbSB7T30gb2JqIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvXG4gKiBAcGFyYW0ge1B9IHByb3BzIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm5zIHtPICYgUH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihvYmosIHByb3BzKSB7XG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIG9ialtpXSA9IHByb3BzW2ldO1xuXHRyZXR1cm4gLyoqIEB0eXBlIHtPICYgUH0gKi8gKG9iaik7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdHdvIG9iamVjdHMgaGF2ZSBhIGRpZmZlcmVudCBzaGFwZVxuICogQHBhcmFtIHtvYmplY3R9IGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKGEsIGIpIHtcblx0Zm9yIChsZXQgaSBpbiBhKSBpZiAoaSAhPT0gJ19fc291cmNlJyAmJiAhKGkgaW4gYikpIHJldHVybiB0cnVlO1xuXHRmb3IgKGxldCBpIGluIGIpIGlmIChpICE9PSAnX19zb3VyY2UnICYmIGFbaV0gIT09IGJbaV0pIHJldHVybiB0cnVlO1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdHdvIHZhbHVlcyBhcmUgdGhlIHNhbWUgdmFsdWVcbiAqIEBwYXJhbSB7Kn0geFxuICogQHBhcmFtIHsqfSB5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzKHgsIHkpIHtcblx0cmV0dXJuICh4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkpIHx8ICh4ICE9PSB4ICYmIHkgIT09IHkpO1xufVxuIiwgImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBzaGFsbG93RGlmZmVycyB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQ29tcG9uZW50IGNsYXNzIHdpdGggYSBwcmVkZWZpbmVkIGBzaG91bGRDb21wb25lbnRVcGRhdGVgIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQdXJlQ29tcG9uZW50KHAsIGMpIHtcblx0dGhpcy5wcm9wcyA9IHA7XG5cdHRoaXMuY29udGV4dCA9IGM7XG59XG5QdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnQoKTtcbi8vIFNvbWUgdGhpcmQtcGFydHkgbGlicmFyaWVzIGNoZWNrIGlmIHRoaXMgcHJvcGVydHkgaXMgcHJlc2VudFxuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gZnVuY3Rpb24gKHByb3BzLCBzdGF0ZSkge1xuXHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgcHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIHN0YXRlKTtcbn07XG4iLCAiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBzaGFsbG93RGlmZmVycyB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogTWVtb2l6ZSBhIGNvbXBvbmVudCwgc28gdGhhdCBpdCBvbmx5IHVwZGF0ZXMgd2hlbiB0aGUgcHJvcHMgYWN0dWFsbHkgaGF2ZVxuICogY2hhbmdlZC4gVGhpcyB3YXMgcHJldmlvdXNseSBrbm93biBhcyBgUmVhY3QucHVyZWAuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkZ1bmN0aW9uQ29tcG9uZW50fSBjIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gKiBAcGFyYW0geyhwcmV2OiBvYmplY3QsIG5leHQ6IG9iamVjdCkgPT4gYm9vbGVhbn0gW2NvbXBhcmVyXSBDdXN0b20gZXF1YWxpdHkgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW8oYywgY29tcGFyZXIpIHtcblx0ZnVuY3Rpb24gc2hvdWxkVXBkYXRlKG5leHRQcm9wcykge1xuXHRcdGxldCByZWYgPSB0aGlzLnByb3BzLnJlZjtcblx0XHRsZXQgdXBkYXRlUmVmID0gcmVmID09IG5leHRQcm9wcy5yZWY7XG5cdFx0aWYgKCF1cGRhdGVSZWYgJiYgcmVmKSB7XG5cdFx0XHRyZWYuY2FsbCA/IHJlZihudWxsKSA6IChyZWYuY3VycmVudCA9IG51bGwpO1xuXHRcdH1cblxuXHRcdGlmICghY29tcGFyZXIpIHtcblx0XHRcdHJldHVybiBzaGFsbG93RGlmZmVycyh0aGlzLnByb3BzLCBuZXh0UHJvcHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiAhY29tcGFyZXIodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCAhdXBkYXRlUmVmO1xuXHR9XG5cblx0ZnVuY3Rpb24gTWVtb2VkKHByb3BzKSB7XG5cdFx0dGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBzaG91bGRVcGRhdGU7XG5cdFx0cmV0dXJuIGNyZWF0ZUVsZW1lbnQoYywgcHJvcHMpO1xuXHR9XG5cdE1lbW9lZC5kaXNwbGF5TmFtZSA9ICdNZW1vKCcgKyAoYy5kaXNwbGF5TmFtZSB8fCBjLm5hbWUpICsgJyknO1xuXHRNZW1vZWQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXHRNZW1vZWQuX2ZvcndhcmRlZCA9IHRydWU7XG5cdHJldHVybiBNZW1vZWQ7XG59XG4iLCAiaW1wb3J0IHsgb3B0aW9ucyB9IGZyb20gJ3ByZWFjdCc7XG5cbmxldCBvbGREaWZmSG9vayA9IG9wdGlvbnMuX2RpZmY7XG5vcHRpb25zLl9kaWZmID0gdm5vZGUgPT4ge1xuXHRpZiAodm5vZGUudHlwZSAmJiB2bm9kZS50eXBlLl9mb3J3YXJkZWQgJiYgdm5vZGUucmVmKSB7XG5cdFx0dm5vZGUucHJvcHMucmVmID0gdm5vZGUucmVmO1xuXHRcdHZub2RlLnJlZiA9IG51bGw7XG5cdH1cblx0aWYgKG9sZERpZmZIb29rKSBvbGREaWZmSG9vayh2bm9kZSk7XG59O1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfRk9SV0FSRF9TWU1CT0wgPVxuXHQodHlwZW9mIFN5bWJvbCAhPSAndW5kZWZpbmVkJyAmJlxuXHRcdFN5bWJvbC5mb3IgJiZcblx0XHRTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpKSB8fFxuXHQweGY0NztcblxuLyoqXG4gKiBQYXNzIHJlZiBkb3duIHRvIGEgY2hpbGQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW4gbGlicmFyaWVzIHdpdGggSE9DcyB0aGF0XG4gKiB3cmFwIGNvbXBvbmVudHMuIFVzaW5nIGBmb3J3YXJkUmVmYCB0aGVyZSBpcyBhbiBlYXN5IHdheSB0byBnZXQgYSByZWZlcmVuY2VcbiAqIG9mIHRoZSB3cmFwcGVkIGNvbXBvbmVudCBpbnN0ZWFkIG9mIG9uZSBvZiB0aGUgd3JhcHBlciBpdHNlbGYuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkZvcndhcmRGbn0gZm5cbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRSZWYoZm4pIHtcblx0ZnVuY3Rpb24gRm9yd2FyZGVkKHByb3BzKSB7XG5cdFx0aWYgKCEoJ3JlZicgaW4gcHJvcHMpKSByZXR1cm4gZm4ocHJvcHMsIG51bGwpO1xuXG5cdFx0bGV0IHJlZiA9IHByb3BzLnJlZjtcblx0XHRkZWxldGUgcHJvcHMucmVmO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGZuKHByb3BzLCByZWYpO1xuXHRcdHByb3BzLnJlZiA9IHJlZjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gbW9ieC1yZWFjdCBjaGVja3MgZm9yIHRoaXMgYmVpbmcgcHJlc2VudFxuXHRGb3J3YXJkZWQuJCR0eXBlb2YgPSBSRUFDVF9GT1JXQVJEX1NZTUJPTDtcblx0Ly8gbW9ieC1yZWFjdCBoZWF2aWx5IHJlbGllcyBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXHQvLyBJdCBleHBlY3RzIGFuIG9iamVjdCBoZXJlIHdpdGggYSBgcmVuZGVyYCBwcm9wZXJ0eSxcblx0Ly8gYW5kIHByb3RvdHlwZS5yZW5kZXIgd2lsbCBmYWlsLiBXaXRob3V0IHRoaXNcblx0Ly8gbW9ieC1yZWFjdCB0aHJvd3MuXG5cdEZvcndhcmRlZC5yZW5kZXIgPSBGb3J3YXJkZWQ7XG5cblx0Rm9yd2FyZGVkLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0gRm9yd2FyZGVkLl9mb3J3YXJkZWQgPSB0cnVlO1xuXHRGb3J3YXJkZWQuZGlzcGxheU5hbWUgPSAnRm9yd2FyZFJlZignICsgKGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUpICsgJyknO1xuXHRyZXR1cm4gRm9yd2FyZGVkO1xufVxuIiwgImltcG9ydCB7IHRvQ2hpbGRBcnJheSB9IGZyb20gJ3ByZWFjdCc7XG5cbmNvbnN0IG1hcEZuID0gKGNoaWxkcmVuLCBmbikgPT4ge1xuXHRpZiAoY2hpbGRyZW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cdHJldHVybiB0b0NoaWxkQXJyYXkodG9DaGlsZEFycmF5KGNoaWxkcmVuKS5tYXAoZm4pKTtcbn07XG5cbi8vIFRoaXMgQVBJIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgZm9yIFByZWFjdCwgc28gaXQncyBiYXNpY2FsbHkgcGFzc3Rocm91Z2guXG5leHBvcnQgY29uc3QgQ2hpbGRyZW4gPSB7XG5cdG1hcDogbWFwRm4sXG5cdGZvckVhY2g6IG1hcEZuLFxuXHRjb3VudChjaGlsZHJlbikge1xuXHRcdHJldHVybiBjaGlsZHJlbiA/IHRvQ2hpbGRBcnJheShjaGlsZHJlbikubGVuZ3RoIDogMDtcblx0fSxcblx0b25seShjaGlsZHJlbikge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSB0b0NoaWxkQXJyYXkoY2hpbGRyZW4pO1xuXHRcdGlmIChub3JtYWxpemVkLmxlbmd0aCAhPT0gMSkgdGhyb3cgJ0NoaWxkcmVuLm9ubHknO1xuXHRcdHJldHVybiBub3JtYWxpemVkWzBdO1xuXHR9LFxuXHR0b0FycmF5OiB0b0NoaWxkQXJyYXlcbn07XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50LCBvcHRpb25zLCBGcmFnbWVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBNT0RFX0hZRFJBVEUgfSBmcm9tICcuLi8uLi9zcmMvY29uc3RhbnRzJztcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG9sZENhdGNoRXJyb3IgPSBvcHRpb25zLl9jYXRjaEVycm9yO1xub3B0aW9ucy5fY2F0Y2hFcnJvciA9IGZ1bmN0aW9uIChlcnJvciwgbmV3Vk5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pIHtcblx0aWYgKGVycm9yLnRoZW4pIHtcblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0XHRsZXQgY29tcG9uZW50O1xuXHRcdGxldCB2bm9kZSA9IG5ld1ZOb2RlO1xuXG5cdFx0Zm9yICg7ICh2bm9kZSA9IHZub2RlLl9wYXJlbnQpOyApIHtcblx0XHRcdGlmICgoY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudCkgJiYgY29tcG9uZW50Ll9jaGlsZERpZFN1c3BlbmQpIHtcblx0XHRcdFx0aWYgKG5ld1ZOb2RlLl9kb20gPT0gbnVsbCkge1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBEb24ndCBjYWxsIG9sZENhdGNoRXJyb3IgaWYgd2UgZm91bmQgYSBTdXNwZW5zZVxuXHRcdFx0XHRyZXR1cm4gY29tcG9uZW50Ll9jaGlsZERpZFN1c3BlbmQoZXJyb3IsIG5ld1ZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0b2xkQ2F0Y2hFcnJvcihlcnJvciwgbmV3Vk5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pO1xufTtcblxuY29uc3Qgb2xkVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcbm9wdGlvbnMudW5tb3VudCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0Y29uc3QgY29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudDtcblx0aWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQuX29uUmVzb2x2ZSkge1xuXHRcdGNvbXBvbmVudC5fb25SZXNvbHZlKCk7XG5cdH1cblxuXHQvLyBpZiB0aGUgY29tcG9uZW50IGlzIHN0aWxsIGh5ZHJhdGluZ1xuXHQvLyBtb3N0IGxpa2VseSBpdCBpcyBiZWNhdXNlIHRoZSBjb21wb25lbnQgaXMgc3VzcGVuZGVkXG5cdC8vIHdlIHNldCB0aGUgdm5vZGUudHlwZSBhcyBgbnVsbGAgc28gdGhhdCBpdCBpcyBub3QgYSB0eXBlb2YgZnVuY3Rpb25cblx0Ly8gc28gdGhlIHVubW91bnQgd2lsbCByZW1vdmUgdGhlIHZub2RlLl9kb21cblx0aWYgKGNvbXBvbmVudCAmJiB2bm9kZS5fZmxhZ3MgJiBNT0RFX0hZRFJBVEUpIHtcblx0XHR2bm9kZS50eXBlID0gbnVsbDtcblx0fVxuXG5cdGlmIChvbGRVbm1vdW50KSBvbGRVbm1vdW50KHZub2RlKTtcbn07XG5cbmZ1bmN0aW9uIGRldGFjaGVkQ2xvbmUodm5vZGUsIGRldGFjaGVkUGFyZW50LCBwYXJlbnREb20pIHtcblx0aWYgKHZub2RlKSB7XG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQgJiYgdm5vZGUuX2NvbXBvbmVudC5fX2hvb2tzKSB7XG5cdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9faG9va3MuX2xpc3QuZm9yRWFjaChlZmZlY3QgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIGVmZmVjdC5fY2xlYW51cCA9PSAnZnVuY3Rpb24nKSBlZmZlY3QuX2NsZWFudXAoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9faG9va3MgPSBudWxsO1xuXHRcdH1cblxuXHRcdHZub2RlID0gYXNzaWduKHt9LCB2bm9kZSk7XG5cdFx0aWYgKHZub2RlLl9jb21wb25lbnQgIT0gbnVsbCkge1xuXHRcdFx0aWYgKHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9PT0gcGFyZW50RG9tKSB7XG5cdFx0XHRcdHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9IGRldGFjaGVkUGFyZW50O1xuXHRcdFx0fVxuXHRcdFx0dm5vZGUuX2NvbXBvbmVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dm5vZGUuX2NoaWxkcmVuID1cblx0XHRcdHZub2RlLl9jaGlsZHJlbiAmJlxuXHRcdFx0dm5vZGUuX2NoaWxkcmVuLm1hcChjaGlsZCA9PlxuXHRcdFx0XHRkZXRhY2hlZENsb25lKGNoaWxkLCBkZXRhY2hlZFBhcmVudCwgcGFyZW50RG9tKVxuXHRcdFx0KTtcblx0fVxuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlT3JpZ2luYWwodm5vZGUsIGRldGFjaGVkUGFyZW50LCBvcmlnaW5hbFBhcmVudCkge1xuXHRpZiAodm5vZGUgJiYgb3JpZ2luYWxQYXJlbnQpIHtcblx0XHR2bm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdHZub2RlLl9jaGlsZHJlbiA9XG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4gJiZcblx0XHRcdHZub2RlLl9jaGlsZHJlbi5tYXAoY2hpbGQgPT5cblx0XHRcdFx0cmVtb3ZlT3JpZ2luYWwoY2hpbGQsIGRldGFjaGVkUGFyZW50LCBvcmlnaW5hbFBhcmVudClcblx0XHRcdCk7XG5cblx0XHRpZiAodm5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0aWYgKHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9PT0gZGV0YWNoZWRQYXJlbnQpIHtcblx0XHRcdFx0aWYgKHZub2RlLl9kb20pIHtcblx0XHRcdFx0XHRvcmlnaW5hbFBhcmVudC5hcHBlbmRDaGlsZCh2bm9kZS5fZG9tKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9mb3JjZSA9IHRydWU7XG5cdFx0XHRcdHZub2RlLl9jb21wb25lbnQuX3BhcmVudERvbSA9IG9yaWdpbmFsUGFyZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuLy8gaGF2aW5nIGN1c3RvbSBpbmhlcml0YW5jZSBpbnN0ZWFkIG9mIGEgY2xhc3MgaGVyZSBzYXZlcyBhIGxvdCBvZiBieXRlc1xuZXhwb3J0IGZ1bmN0aW9uIFN1c3BlbnNlKCkge1xuXHQvLyB3ZSBkbyBub3QgY2FsbCBzdXBlciBoZXJlIHRvIGdvbGYgc29tZSBieXRlcy4uLlxuXHR0aGlzLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50ID0gMDtcblx0dGhpcy5fc3VzcGVuZGVycyA9IG51bGw7XG5cdHRoaXMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGw7XG59XG5cbi8vIFRoaW5ncyB3ZSBkbyBoZXJlIHRvIHNhdmUgc29tZSBieXRlcyBidXQgYXJlIG5vdCBwcm9wZXIgSlMgaW5oZXJpdGFuY2U6XG4vLyAtIGNhbGwgYG5ldyBDb21wb25lbnQoKWAgYXMgdGhlIHByb3RvdHlwZVxuLy8gLSBkbyBub3Qgc2V0IGBTdXNwZW5zZS5wcm90b3R5cGUuY29uc3RydWN0b3JgIHRvIGBTdXNwZW5zZWBcblN1c3BlbnNlLnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnQoKTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge1Byb21pc2V9IHByb21pc2UgVGhlIHRocm93biBwcm9taXNlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlPGFueSwgYW55Pn0gc3VzcGVuZGluZ1ZOb2RlIFRoZSBzdXNwZW5kaW5nIGNvbXBvbmVudFxuICovXG5TdXNwZW5zZS5wcm90b3R5cGUuX2NoaWxkRGlkU3VzcGVuZCA9IGZ1bmN0aW9uIChwcm9taXNlLCBzdXNwZW5kaW5nVk5vZGUpIHtcblx0Y29uc3Qgc3VzcGVuZGluZ0NvbXBvbmVudCA9IHN1c3BlbmRpbmdWTm9kZS5fY29tcG9uZW50O1xuXG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9ICovXG5cdGNvbnN0IGMgPSB0aGlzO1xuXG5cdGlmIChjLl9zdXNwZW5kZXJzID09IG51bGwpIHtcblx0XHRjLl9zdXNwZW5kZXJzID0gW107XG5cdH1cblx0Yy5fc3VzcGVuZGVycy5wdXNoKHN1c3BlbmRpbmdDb21wb25lbnQpO1xuXG5cdGNvbnN0IHJlc29sdmUgPSBzdXNwZW5kZWQoYy5fdm5vZGUpO1xuXG5cdGxldCByZXNvbHZlZCA9IGZhbHNlO1xuXHRjb25zdCBvblJlc29sdmVkID0gKCkgPT4ge1xuXHRcdGlmIChyZXNvbHZlZCkgcmV0dXJuO1xuXG5cdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG51bGw7XG5cblx0XHRpZiAocmVzb2x2ZSkge1xuXHRcdFx0cmVzb2x2ZShvblN1c3BlbnNpb25Db21wbGV0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uU3VzcGVuc2lvbkNvbXBsZXRlKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG9uUmVzb2x2ZWQ7XG5cblx0Y29uc3Qgb25TdXNwZW5zaW9uQ29tcGxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKCEtLWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQpIHtcblx0XHRcdC8vIElmIHRoZSBzdXNwZW5zaW9uIHdhcyBkdXJpbmcgaHlkcmF0aW9uIHdlIGRvbid0IG5lZWQgdG8gcmVzdG9yZSB0aGVcblx0XHRcdC8vIHN1c3BlbmRlZCBjaGlsZHJlbiBpbnRvIHRoZSBfY2hpbGRyZW4gYXJyYXlcblx0XHRcdGlmIChjLnN0YXRlLl9zdXNwZW5kZWQpIHtcblx0XHRcdFx0Y29uc3Qgc3VzcGVuZGVkVk5vZGUgPSBjLnN0YXRlLl9zdXNwZW5kZWQ7XG5cdFx0XHRcdGMuX3Zub2RlLl9jaGlsZHJlblswXSA9IHJlbW92ZU9yaWdpbmFsKFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLl9jb21wb25lbnQuX3BhcmVudERvbSxcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZS5fY29tcG9uZW50Ll9vcmlnaW5hbFBhcmVudERvbVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjLnNldFN0YXRlKHsgX3N1c3BlbmRlZDogKGMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGwpIH0pO1xuXG5cdFx0XHRsZXQgc3VzcGVuZGVkO1xuXHRcdFx0d2hpbGUgKChzdXNwZW5kZWQgPSBjLl9zdXNwZW5kZXJzLnBvcCgpKSkge1xuXHRcdFx0XHRzdXNwZW5kZWQuZm9yY2VVcGRhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIFdlIGRvIG5vdCBzZXQgYHN1c3BlbmRlZDogdHJ1ZWAgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHdlIHdhbnQgdGhlIGFjdHVhbCBtYXJrdXBcblx0ICogdG8gcmVtYWluIG9uIHNjcmVlbiBhbmQgaHlkcmF0ZSBpdCB3aGVuIHRoZSBzdXNwZW5zZSBhY3R1YWxseSBnZXRzIHJlc29sdmVkLlxuXHQgKiBXaGlsZSBpbiBub24taHlkcmF0aW9uIGNhc2VzIHRoZSB1c3VhbCBmYWxsYmFjayAtPiBjb21wb25lbnQgZmxvdyB3b3VsZCBvY2NvdXIuXG5cdCAqL1xuXHRpZiAoXG5cdFx0IWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQrKyAmJlxuXHRcdCEoc3VzcGVuZGluZ1ZOb2RlLl9mbGFncyAmIE1PREVfSFlEUkFURSlcblx0KSB7XG5cdFx0Yy5zZXRTdGF0ZSh7IF9zdXNwZW5kZWQ6IChjLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBjLl92bm9kZS5fY2hpbGRyZW5bMF0pIH0pO1xuXHR9XG5cdHByb21pc2UudGhlbihvblJlc29sdmVkLCBvblJlc29sdmVkKTtcbn07XG5cblN1c3BlbnNlLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcblx0dGhpcy5fc3VzcGVuZGVycyA9IFtdO1xufTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50W1wicHJvcHNcIl19IHByb3BzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlU3RhdGV9IHN0YXRlXG4gKi9cblN1c3BlbnNlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAocHJvcHMsIHN0YXRlKSB7XG5cdGlmICh0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIpIHtcblx0XHQvLyBXaGVuIHRoZSBTdXNwZW5zZSdzIF92bm9kZSB3YXMgY3JlYXRlZCBieSBhIGNhbGwgdG8gY3JlYXRlVk5vZGVcblx0XHQvLyAoaS5lLiBkdWUgdG8gYSBzZXRTdGF0ZSBmdXJ0aGVyIHVwIGluIHRoZSB0cmVlKVxuXHRcdC8vIGl0J3MgX2NoaWxkcmVuIHByb3AgaXMgbnVsbCwgaW4gdGhpcyBjYXNlIHdlIFwiZm9yZ2V0XCIgYWJvdXQgdGhlIHBhcmtlZCB2bm9kZXMgdG8gZGV0YWNoXG5cdFx0aWYgKHRoaXMuX3Zub2RlLl9jaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgZGV0YWNoZWRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdGNvbnN0IGRldGFjaGVkQ29tcG9uZW50ID0gdGhpcy5fdm5vZGUuX2NoaWxkcmVuWzBdLl9jb21wb25lbnQ7XG5cdFx0XHR0aGlzLl92bm9kZS5fY2hpbGRyZW5bMF0gPSBkZXRhY2hlZENsb25lKFxuXHRcdFx0XHR0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIsXG5cdFx0XHRcdGRldGFjaGVkUGFyZW50LFxuXHRcdFx0XHQoZGV0YWNoZWRDb21wb25lbnQuX29yaWdpbmFsUGFyZW50RG9tID0gZGV0YWNoZWRDb21wb25lbnQuX3BhcmVudERvbSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZGV0YWNoT25OZXh0UmVuZGVyID0gbnVsbDtcblx0fVxuXG5cdC8vIFdyYXAgZmFsbGJhY2sgdHJlZSBpbiBhIFZOb2RlIHRoYXQgcHJldmVudHMgaXRzZWxmIGZyb20gYmVpbmcgbWFya2VkIGFzIGFib3J0aW5nIG1pZC1oeWRyYXRpb246XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9ICovXG5cdGNvbnN0IGZhbGxiYWNrID1cblx0XHRzdGF0ZS5fc3VzcGVuZGVkICYmIGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIHByb3BzLmZhbGxiYWNrKTtcblx0aWYgKGZhbGxiYWNrKSBmYWxsYmFjay5fZmxhZ3MgJj0gfk1PREVfSFlEUkFURTtcblxuXHRyZXR1cm4gW1xuXHRcdGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIHN0YXRlLl9zdXNwZW5kZWQgPyBudWxsIDogcHJvcHMuY2hpbGRyZW4pLFxuXHRcdGZhbGxiYWNrXG5cdF07XG59O1xuXG4vKipcbiAqIENoZWNrcyBhbmQgY2FsbHMgdGhlIHBhcmVudCBjb21wb25lbnQncyBfc3VzcGVuZGVkIG1ldGhvZCwgcGFzc2luZyBpbiB0aGVcbiAqIHN1c3BlbmRlZCB2bm9kZS4gVGhpcyBpcyBhIHdheSBmb3IgYSBwYXJlbnQgKGUuZy4gU3VzcGVuc2VMaXN0KSB0byBnZXQgbm90aWZpZWRcbiAqIHRoYXQgb25lIG9mIGl0cyBjaGlsZHJlbi9kZXNjZW5kYW50cyBzdXNwZW5kZWQuXG4gKlxuICogVGhlIHBhcmVudCBNQVkgcmV0dXJuIGEgY2FsbGJhY2suIFRoZSBjYWxsYmFjayB3aWxsIGdldCBjYWxsZWQgd2hlbiB0aGVcbiAqIHN1c3BlbnNpb24gcmVzb2x2ZXMsIG5vdGlmeWluZyB0aGUgcGFyZW50IG9mIHRoZSBmYWN0LlxuICogTW9yZW92ZXIsIHRoZSBjYWxsYmFjayBnZXRzIGZ1bmN0aW9uIGB1bnN1c3BlbmRgIGFzIGEgcGFyYW1ldGVyLiBUaGUgcmVzb2x2ZWRcbiAqIGNoaWxkIGRlc2NlbmRhbnQgd2lsbCBub3QgYWN0dWFsbHkgZ2V0IHVuc3VzcGVuZGVkIHVudGlsIGB1bnN1c3BlbmRgIGdldHMgY2FsbGVkLlxuICogVGhpcyBpcyBhIHdheSBmb3IgdGhlIHBhcmVudCB0byBkZWxheSB1bnN1c3BlbmRpbmcuXG4gKlxuICogSWYgdGhlIHBhcmVudCBkb2VzIG5vdCByZXR1cm4gYSBjYWxsYmFjayB0aGVuIHRoZSByZXNvbHZlZCB2bm9kZVxuICogZ2V0cyB1bnN1c3BlbmRlZCBpbW1lZGlhdGVseSB3aGVuIGl0IHJlc29sdmVzLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IHZub2RlXG4gKiBAcmV0dXJucyB7KCh1bnN1c3BlbmQ6ICgpID0+IHZvaWQpID0+IHZvaWQpP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1c3BlbmRlZCh2bm9kZSkge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cblx0bGV0IGNvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQuX2NvbXBvbmVudDtcblx0cmV0dXJuIGNvbXBvbmVudCAmJiBjb21wb25lbnQuX3N1c3BlbmRlZCAmJiBjb21wb25lbnQuX3N1c3BlbmRlZCh2bm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXp5KGxvYWRlcikge1xuXHRsZXQgcHJvbTtcblx0bGV0IGNvbXBvbmVudDtcblx0bGV0IGVycm9yO1xuXG5cdGZ1bmN0aW9uIExhenkocHJvcHMpIHtcblx0XHRpZiAoIXByb20pIHtcblx0XHRcdHByb20gPSBsb2FkZXIoKTtcblx0XHRcdHByb20udGhlbihcblx0XHRcdFx0ZXhwb3J0cyA9PiB7XG5cdFx0XHRcdFx0Y29tcG9uZW50ID0gZXhwb3J0cy5kZWZhdWx0IHx8IGV4cG9ydHM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGUgPT4ge1xuXHRcdFx0XHRcdGVycm9yID0gZTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblxuXHRcdGlmICghY29tcG9uZW50KSB7XG5cdFx0XHR0aHJvdyBwcm9tO1xuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgcHJvcHMpO1xuXHR9XG5cblx0TGF6eS5kaXNwbGF5TmFtZSA9ICdMYXp5Jztcblx0TGF6eS5fZm9yd2FyZGVkID0gdHJ1ZTtcblx0cmV0dXJuIExhenk7XG59XG4iLCAiaW1wb3J0IHsgQ29tcG9uZW50LCB0b0NoaWxkQXJyYXkgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc3VzcGVuZGVkIH0gZnJvbSAnLi9zdXNwZW5zZS5qcyc7XG5cbi8vIEluZGV4ZXMgdG8gbGlua2VkIGxpc3Qgbm9kZXMgKG5vZGVzIGFyZSBzdG9yZWQgYXMgYXJyYXlzIHRvIHNhdmUgYnl0ZXMpLlxuY29uc3QgU1VTUEVOREVEX0NPVU5UID0gMDtcbmNvbnN0IFJFU09MVkVEX0NPVU5UID0gMTtcbmNvbnN0IE5FWFRfTk9ERSA9IDI7XG5cbi8vIEhhdmluZyBjdXN0b20gaW5oZXJpdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzIGhlcmUgc2F2ZXMgYSBsb3Qgb2YgYnl0ZXMuXG5leHBvcnQgZnVuY3Rpb24gU3VzcGVuc2VMaXN0KCkge1xuXHR0aGlzLl9uZXh0ID0gbnVsbDtcblx0dGhpcy5fbWFwID0gbnVsbDtcbn1cblxuLy8gTWFyayBvbmUgb2YgY2hpbGQncyBlYXJsaWVyIHN1c3BlbnNpb25zIGFzIHJlc29sdmVkLlxuLy8gU29tZSBwZW5kaW5nIGNhbGxiYWNrcyBtYXkgYmVjb21lIGNhbGxhYmxlIGR1ZSB0byB0aGlzXG4vLyAoZS5nLiB0aGUgbGFzdCBzdXNwZW5kZWQgZGVzY2VuZGFudCBnZXRzIHJlc29sdmVkIHdoZW5cbi8vIHJldmVhbE9yZGVyID09PSAndG9nZXRoZXInKS4gUHJvY2VzcyB0aG9zZSBjYWxsYmFja3MgYXMgd2VsbC5cbmNvbnN0IHJlc29sdmUgPSAobGlzdCwgY2hpbGQsIG5vZGUpID0+IHtcblx0aWYgKCsrbm9kZVtSRVNPTFZFRF9DT1VOVF0gPT09IG5vZGVbU1VTUEVOREVEX0NPVU5UXSkge1xuXHRcdC8vIFRoZSBudW1iZXIgYSBjaGlsZCAob3IgYW55IG9mIGl0cyBkZXNjZW5kYW50cykgaGFzIGJlZW4gc3VzcGVuZGVkXG5cdFx0Ly8gbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIGl0J3MgYmVlbiByZXNvbHZlZC4gVGhlcmVmb3JlIHdlXG5cdFx0Ly8gbWFyayB0aGUgY2hpbGQgYXMgY29tcGxldGVseSByZXNvbHZlZCBieSBkZWxldGluZyBpdCBmcm9tIC5fbWFwLlxuXHRcdC8vIFRoaXMgaXMgdXNlZCB0byBmaWd1cmUgb3V0IHdoZW4gKmFsbCogY2hpbGRyZW4gaGF2ZSBiZWVuIGNvbXBsZXRlbHlcblx0XHQvLyByZXNvbHZlZCB3aGVuIHJldmVhbE9yZGVyIGlzICd0b2dldGhlcicuXG5cdFx0bGlzdC5fbWFwLmRlbGV0ZShjaGlsZCk7XG5cdH1cblxuXHQvLyBJZiByZXZlYWxPcmRlciBpcyBmYWxzeSB0aGVuIHdlIGNhbiBkbyBhbiBlYXJseSBleGl0LCBhcyB0aGVcblx0Ly8gY2FsbGJhY2tzIHdvbid0IGdldCBxdWV1ZWQgaW4gdGhlIG5vZGUgYW55d2F5LlxuXHQvLyBJZiByZXZlYWxPcmRlciBpcyAndG9nZXRoZXInIHRoZW4gYWxzbyBkbyBhbiBlYXJseSBleGl0XG5cdC8vIGlmIGFsbCBzdXNwZW5kZWQgZGVzY2VuZGFudHMgaGF2ZSBub3QgeWV0IGJlZW4gcmVzb2x2ZWQuXG5cdGlmIChcblx0XHQhbGlzdC5wcm9wcy5yZXZlYWxPcmRlciB8fFxuXHRcdChsaXN0LnByb3BzLnJldmVhbE9yZGVyWzBdID09PSAndCcgJiYgbGlzdC5fbWFwLnNpemUpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFdhbGsgdGhlIGN1cnJlbnRseSBzdXNwZW5kZWQgY2hpbGRyZW4gaW4gb3JkZXIsIGNhbGxpbmcgdGhlaXJcblx0Ly8gc3RvcmVkIGNhbGxiYWNrcyBvbiB0aGUgd2F5LiBTdG9wIGlmIHdlIGVuY291bnRlciBhIGNoaWxkIHRoYXRcblx0Ly8gaGFzIG5vdCBiZWVuIGNvbXBsZXRlbHkgcmVzb2x2ZWQgeWV0LlxuXHRub2RlID0gbGlzdC5fbmV4dDtcblx0d2hpbGUgKG5vZGUpIHtcblx0XHR3aGlsZSAobm9kZS5sZW5ndGggPiAzKSB7XG5cdFx0XHRub2RlLnBvcCgpKCk7XG5cdFx0fVxuXHRcdGlmIChub2RlW1JFU09MVkVEX0NPVU5UXSA8IG5vZGVbU1VTUEVOREVEX0NPVU5UXSkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGxpc3QuX25leHQgPSBub2RlID0gbm9kZVtORVhUX05PREVdO1xuXHR9XG59O1xuXG4vLyBUaGluZ3Mgd2UgZG8gaGVyZSB0byBzYXZlIHNvbWUgYnl0ZXMgYnV0IGFyZSBub3QgcHJvcGVyIEpTIGluaGVyaXRhbmNlOlxuLy8gLSBjYWxsIGBuZXcgQ29tcG9uZW50KClgIGFzIHRoZSBwcm90b3R5cGVcbi8vIC0gZG8gbm90IHNldCBgU3VzcGVuc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yYCB0byBgU3VzcGVuc2VgXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlID0gbmV3IENvbXBvbmVudCgpO1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLl9zdXNwZW5kZWQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcblx0Y29uc3QgbGlzdCA9IHRoaXM7XG5cdGNvbnN0IGRlbGVnYXRlZCA9IHN1c3BlbmRlZChsaXN0Ll92bm9kZSk7XG5cblx0bGV0IG5vZGUgPSBsaXN0Ll9tYXAuZ2V0KGNoaWxkKTtcblx0bm9kZVtTVVNQRU5ERURfQ09VTlRdKys7XG5cblx0cmV0dXJuIHVuc3VzcGVuZCA9PiB7XG5cdFx0Y29uc3Qgd3JhcHBlZFVuc3VzcGVuZCA9ICgpID0+IHtcblx0XHRcdGlmICghbGlzdC5wcm9wcy5yZXZlYWxPcmRlcikge1xuXHRcdFx0XHQvLyBTcGVjaWFsIGNhc2UgdGhlIHVuZGVmaW5lZCAoZmFsc3kpIHJldmVhbE9yZGVyLCBhcyB0aGVyZVxuXHRcdFx0XHQvLyBpcyBubyBuZWVkIHRvIGNvb3JkaW5hdGUgYSBzcGVjaWZpYyBvcmRlciBvciB1bnN1c3BlbmRzLlxuXHRcdFx0XHR1bnN1c3BlbmQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5vZGUucHVzaCh1bnN1c3BlbmQpO1xuXHRcdFx0XHRyZXNvbHZlKGxpc3QsIGNoaWxkLCBub2RlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChkZWxlZ2F0ZWQpIHtcblx0XHRcdGRlbGVnYXRlZCh3cmFwcGVkVW5zdXNwZW5kKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcHBlZFVuc3VzcGVuZCgpO1xuXHRcdH1cblx0fTtcbn07XG5cblN1c3BlbnNlTGlzdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHByb3BzKSB7XG5cdHRoaXMuX25leHQgPSBudWxsO1xuXHR0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgY2hpbGRyZW4gPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pO1xuXHRpZiAocHJvcHMucmV2ZWFsT3JkZXIgJiYgcHJvcHMucmV2ZWFsT3JkZXJbMF0gPT09ICdiJykge1xuXHRcdC8vIElmIG9yZGVyID09PSAnYmFja3dhcmRzJyAob3IsIHdlbGwsIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggYSAnYicpXG5cdFx0Ly8gdGhlbiBmbGlwIHRoZSBjaGlsZCBsaXN0IGFyb3VuZCBzbyB0aGF0IHRoZSBsYXN0IGNoaWxkIHdpbGwgYmVcblx0XHQvLyB0aGUgZmlyc3QgaW4gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdGNoaWxkcmVuLnJldmVyc2UoKTtcblx0fVxuXHQvLyBCdWlsZCB0aGUgbGlua2VkIGxpc3QuIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gaW4gcmV2ZXJzZSBvcmRlclxuXHQvLyBzbyB0aGF0IGBfbmV4dGAgcG9pbnRzIHRvIHRoZSBmaXJzdCBsaW5rZWQgbGlzdCBub2RlIHRvIGJlIHJlc29sdmVkLlxuXHRmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoOyBpLS07ICkge1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBsaW5rZWQgbGlzdCBub2RlIGFzIGFuIGFycmF5IG9mIGZvcm06XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlXVxuXHRcdC8vIHdoZXJlIHN1c3BlbmRlZF9jb3VudCBhbmQgcmVzb2x2ZWRfY291bnQgYXJlIG51bWVyaWMgY291bnRlcnMgZm9yXG5cdFx0Ly8ga2VlcGluZyB0cmFjayBob3cgbWFueSB0aW1lcyBhIG5vZGUgaGFzIGJlZW4gc3VzcGVuZGVkIGFuZCByZXNvbHZlZC5cblx0XHQvL1xuXHRcdC8vIE5vdGUgdGhhdCBzdXNwZW5kZWRfY291bnQgc3RhcnRzIGZyb20gMSBpbnN0ZWFkIG9mIDAsIHNvIHdlIGNhbiBibG9ja1xuXHRcdC8vIHByb2Nlc3NpbmcgY2FsbGJhY2tzIHVudGlsIGNvbXBvbmVudERpZE1vdW50IGhhcyBiZWVuIGNhbGxlZC4gSW4gYSBzZW5zZVxuXHRcdC8vIG5vZGUgaXMgc3VzcGVuZGVkIGF0IGxlYXN0IHVudGlsIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkIVxuXHRcdC8vXG5cdFx0Ly8gUGVuZGluZyBjYWxsYmFja3MgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG5vZGU6XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlLCBjYWxsYmFja18wLCBjYWxsYmFja18xLCAuLi5dXG5cdFx0dGhpcy5fbWFwLnNldChjaGlsZHJlbltpXSwgKHRoaXMuX25leHQgPSBbMSwgMCwgdGhpcy5fbmV4dF0pKTtcblx0fVxuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59O1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9XG5cdFN1c3BlbnNlTGlzdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGlsZHJlbiBhZnRlciBtb3VudGluZyBmb3IgdHdvIHJlYXNvbnM6XG5cdFx0Ly8gMS4gQXMgZWFjaCBub2RlW1NVU1BFTkRFRF9DT1VOVF0gc3RhcnRzIGZyb20gMSwgdGhpcyBpdGVyYXRpb24gaW5jcmVhc2VzXG5cdFx0Ly8gICAgZWFjaCBub2RlW1JFTEVBU0VEX0NPVU5UXSBieSAxLCB0aGVyZWZvcmUgYmFsYW5jaW5nIHRoZSBjb3VudGVycy5cblx0XHQvLyAgICBUaGUgbm9kZXMgY2FuIG5vdyBiZSBjb21wbGV0ZWx5IGNvbnN1bWVkIGZyb20gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdC8vIDIuIEhhbmRsZSBub2RlcyB0aGF0IG1pZ2h0IGhhdmUgZ290dGVuIHJlc29sdmVkIGJldHdlZW4gcmVuZGVyIGFuZFxuXHRcdC8vICAgIGNvbXBvbmVudERpZE1vdW50LlxuXHRcdHRoaXMuX21hcC5mb3JFYWNoKChub2RlLCBjaGlsZCkgPT4ge1xuXHRcdFx0cmVzb2x2ZSh0aGlzLCBjaGlsZCwgbm9kZSk7XG5cdFx0fSk7XG5cdH07XG4iLCAiLyoqIE5vcm1hbCBoeWRyYXRpb24gdGhhdCBhdHRhY2hlcyB0byBhIERPTSB0cmVlIGJ1dCBkb2VzIG5vdCBkaWZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1PREVfSFlEUkFURSA9IDEgPDwgNTtcbi8qKiBTaWduaWZpZXMgdGhpcyBWTm9kZSBzdXNwZW5kZWQgb24gdGhlIHByZXZpb3VzIHJlbmRlciAqL1xuZXhwb3J0IGNvbnN0IE1PREVfU1VTUEVOREVEID0gMSA8PCA3O1xuLyoqIEluZGljYXRlcyB0aGF0IHRoaXMgbm9kZSBuZWVkcyB0byBiZSBpbnNlcnRlZCB3aGlsZSBwYXRjaGluZyBjaGlsZHJlbiAqL1xuZXhwb3J0IGNvbnN0IElOU0VSVF9WTk9ERSA9IDEgPDwgMTY7XG4vKiogSW5kaWNhdGVzIGEgVk5vZGUgaGFzIGJlZW4gbWF0Y2hlZCB3aXRoIGFub3RoZXIgVk5vZGUgaW4gdGhlIGRpZmYgKi9cbmV4cG9ydCBjb25zdCBNQVRDSEVEID0gMSA8PCAxNztcblxuLyoqIFJlc2V0IGFsbCBtb2RlIGZsYWdzICovXG5leHBvcnQgY29uc3QgUkVTRVRfTU9ERSA9IH4oTU9ERV9IWURSQVRFIHwgTU9ERV9TVVNQRU5ERUQpO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfT0JKID0gLyoqIEB0eXBlIHthbnl9ICovICh7fSk7XG5leHBvcnQgY29uc3QgRU1QVFlfQVJSID0gW107XG5leHBvcnQgY29uc3QgSVNfTk9OX0RJTUVOU0lPTkFMID1cblx0L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaTtcbiIsICJpbXBvcnQgeyBjcmVhdGVFbGVtZW50LCByZW5kZXIgfSBmcm9tICdwcmVhY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9zcmMvaW5kZXgnKS5SZW5kZXJhYmxlUHJvcHM8eyBjb250ZXh0OiBhbnkgfT59IHByb3BzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHRQcm92aWRlcihwcm9wcykge1xuXHR0aGlzLmdldENoaWxkQ29udGV4dCA9ICgpID0+IHByb3BzLmNvbnRleHQ7XG5cdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbn1cblxuLyoqXG4gKiBQb3J0YWwgY29tcG9uZW50XG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkfSBwcm9wc1xuICpcbiAqIFRPRE86IHVzZSBjcmVhdGVSb290KCkgaW5zdGVhZCBvZiBmYWtlIHJvb3RcbiAqL1xuZnVuY3Rpb24gUG9ydGFsKHByb3BzKSB7XG5cdGNvbnN0IF90aGlzID0gdGhpcztcblx0bGV0IGNvbnRhaW5lciA9IHByb3BzLl9jb250YWluZXI7XG5cblx0X3RoaXMuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmVuZGVyKG51bGwsIF90aGlzLl90ZW1wKTtcblx0XHRfdGhpcy5fdGVtcCA9IG51bGw7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IG51bGw7XG5cdH07XG5cblx0Ly8gV2hlbiB3ZSBjaGFuZ2UgY29udGFpbmVyIHdlIHNob3VsZCBjbGVhciBvdXIgb2xkIGNvbnRhaW5lciBhbmRcblx0Ly8gaW5kaWNhdGUgYSBuZXcgbW91bnQuXG5cdGlmIChfdGhpcy5fY29udGFpbmVyICYmIF90aGlzLl9jb250YWluZXIgIT09IGNvbnRhaW5lcikge1xuXHRcdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG5cdH1cblxuXHRpZiAoIV90aGlzLl90ZW1wKSB7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcblxuXHRcdC8vIENyZWF0ZSBhIGZha2UgRE9NIHBhcmVudCBub2RlIHRoYXQgbWFuYWdlcyBhIHN1YnNldCBvZiBgY29udGFpbmVyYCdzIGNoaWxkcmVuOlxuXHRcdF90aGlzLl90ZW1wID0ge1xuXHRcdFx0bm9kZVR5cGU6IDEsXG5cdFx0XHRwYXJlbnROb2RlOiBjb250YWluZXIsXG5cdFx0XHRjaGlsZE5vZGVzOiBbXSxcblx0XHRcdGNvbnRhaW5zOiAoKSA9PiB0cnVlLFxuXHRcdFx0YXBwZW5kQ2hpbGQoY2hpbGQpIHtcblx0XHRcdFx0dGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO1xuXHRcdFx0XHRfdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdH0sXG5cdFx0XHRpbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZSkge1xuXHRcdFx0XHR0aGlzLmNoaWxkTm9kZXMucHVzaChjaGlsZCk7XG5cdFx0XHRcdF90aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuXHRcdFx0fSxcblx0XHRcdHJlbW92ZUNoaWxkKGNoaWxkKSB7XG5cdFx0XHRcdHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoY2hpbGQpID4+PiAxLCAxKTtcblx0XHRcdFx0X3RoaXMuX2NvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFJlbmRlciBvdXIgd3JhcHBpbmcgZWxlbWVudCBpbnRvIHRlbXAuXG5cdHJlbmRlcihcblx0XHRjcmVhdGVFbGVtZW50KENvbnRleHRQcm92aWRlciwgeyBjb250ZXh0OiBfdGhpcy5jb250ZXh0IH0sIHByb3BzLl92bm9kZSksXG5cdFx0X3RoaXMuX3RlbXBcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBgUG9ydGFsYCB0byBjb250aW51ZSByZW5kZXJpbmcgdGhlIHZub2RlIHRyZWUgYXQgYSBkaWZmZXJlbnQgRE9NIG5vZGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IHZub2RlIFRoZSB2bm9kZSB0byByZW5kZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudH0gY29udGFpbmVyIFRoZSBET00gbm9kZSB0byBjb250aW51ZSByZW5kZXJpbmcgaW4gdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb3J0YWwodm5vZGUsIGNvbnRhaW5lcikge1xuXHRjb25zdCBlbCA9IGNyZWF0ZUVsZW1lbnQoUG9ydGFsLCB7IF92bm9kZTogdm5vZGUsIF9jb250YWluZXI6IGNvbnRhaW5lciB9KTtcblx0ZWwuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lcjtcblx0cmV0dXJuIGVsO1xufVxuIiwgImltcG9ydCB7XG5cdHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsXG5cdGh5ZHJhdGUgYXMgcHJlYWN0SHlkcmF0ZSxcblx0b3B0aW9ucyxcblx0dG9DaGlsZEFycmF5LFxuXHRDb21wb25lbnRcbn0gZnJvbSAncHJlYWN0JztcbmltcG9ydCB7XG5cdHVzZUNhbGxiYWNrLFxuXHR1c2VDb250ZXh0LFxuXHR1c2VEZWJ1Z1ZhbHVlLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUlkLFxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHR1c2VMYXlvdXRFZmZlY3QsXG5cdHVzZU1lbW8sXG5cdHVzZVJlZHVjZXIsXG5cdHVzZVJlZixcblx0dXNlU3RhdGVcbn0gZnJvbSAncHJlYWN0L2hvb2tzJztcbmltcG9ydCB7XG5cdHVzZURlZmVycmVkVmFsdWUsXG5cdHVzZUluc2VydGlvbkVmZmVjdCxcblx0dXNlU3luY0V4dGVybmFsU3RvcmUsXG5cdHVzZVRyYW5zaXRpb25cbn0gZnJvbSAnLi9pbmRleCc7XG5cbmV4cG9ydCBjb25zdCBSRUFDVF9FTEVNRU5UX1RZUEUgPVxuXHQodHlwZW9mIFN5bWJvbCAhPSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuZm9yICYmIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHxcblx0MHhlYWM3O1xuXG5jb25zdCBDQU1FTF9QUk9QUyA9XG5cdC9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLztcbmNvbnN0IE9OX0FOSSA9IC9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS87XG5jb25zdCBDQU1FTF9SRVBMQUNFID0gL1tBLVowLTldL2c7XG5jb25zdCBJU19ET00gPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBJbnB1dCB0eXBlcyBmb3Igd2hpY2ggb25jaGFuZ2Ugc2hvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG8gb25pbnB1dC5cbi8vIHR5cGU9XCJmaWxlfGNoZWNrYm94fHJhZGlvXCIsIHBsdXMgXCJyYW5nZVwiIGluIElFMTEuXG4vLyAoSUUxMSBkb2Vzbid0IHN1cHBvcnQgU3ltYm9sLCB3aGljaCB3ZSB1c2UgaGVyZSB0byB0dXJuIGByYWRgIGludG8gYHJhYCB3aGljaCBtYXRjaGVzIFwicmFuZ2VcIilcbmNvbnN0IG9uQ2hhbmdlSW5wdXRUeXBlID0gdHlwZSA9PlxuXHQodHlwZW9mIFN5bWJvbCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgU3ltYm9sKCkgPT0gJ3N5bWJvbCdcblx0XHQ/IC9maWx8Y2hlfHJhZC9cblx0XHQ6IC9maWx8Y2hlfHJhL1xuXHQpLnRlc3QodHlwZSk7XG5cbi8vIFNvbWUgbGlicmFyaWVzIGxpa2UgYHJlYWN0LXZpcnR1YWxpemVkYCBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGlzLlxuQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5cbi8vIGBVTlNBRkVfKmAgbGlmZWN5Y2xlIGhvb2tzXG4vLyBQcmVhY3Qgb25seSBldmVyIGludm9rZXMgdGhlIHVucHJlZml4ZWQgbWV0aG9kcy5cbi8vIEhlcmUgd2UgcHJvdmlkZSBhIGJhc2UgXCJmYWxsYmFja1wiIGltcGxlbWVudGF0aW9uIHRoYXQgY2FsbHMgYW55IGRlZmluZWQgVU5TQUZFXyBwcmVmaXhlZCBtZXRob2QuXG4vLyAtIElmIGEgY29tcG9uZW50IGRlZmluZXMgaXRzIG93biBgY29tcG9uZW50RGlkTW91bnQoKWAgKGluY2x1ZGluZyB2aWEgZGVmaW5lUHJvcGVydHkpLCB1c2UgdGhhdC5cbi8vIC0gSWYgYSBjb21wb25lbnQgZGVmaW5lcyBgVU5TQUZFX2NvbXBvbmVudERpZE1vdW50KClgLCBgY29tcG9uZW50RGlkTW91bnRgIGlzIHRoZSBhbGlhcyBnZXR0ZXIvc2V0dGVyLlxuLy8gLSBJZiBhbnl0aGluZyBhc3NpZ25zIHRvIGFuIGBVTlNBRkVfKmAgcHJvcGVydHksIHRoZSBhc3NpZ25tZW50IGlzIGZvcndhcmRlZCB0byB0aGUgdW5wcmVmaXhlZCBwcm9wZXJ0eS5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJlYWN0anMvcHJlYWN0L2lzc3Vlcy8xOTQxXG5bXG5cdCdjb21wb25lbnRXaWxsTW91bnQnLFxuXHQnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG5cdCdjb21wb25lbnRXaWxsVXBkYXRlJ1xuXS5mb3JFYWNoKGtleSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBrZXksIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbJ1VOU0FGRV8nICsga2V5XTtcblx0XHR9LFxuXHRcdHNldCh2KSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiB2XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8qKlxuICogUHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBWTm9kZSB0cmVlIHRvIHJlbmRlclxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBwYXJlbnQgRE9NIG5vZGUgdG8gcmVuZGVyIHZub2RlIHRyZWUgaW50b1xuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgcmVuZGVyaW5nXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50IHwgbnVsbH0gVGhlIHJvb3QgY29tcG9uZW50IHJlZmVyZW5jZSBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0Ly8gUmVhY3QgZGVzdHJveXMgYW55IGV4aXN0aW5nIERPTSBub2Rlcywgc2VlICMxNzI3XG5cdC8vIC4uLmJ1dCBvbmx5IG9uIHRoZSBmaXJzdCByZW5kZXIsIHNlZSAjMTgyOFxuXHRpZiAocGFyZW50Ll9jaGlsZHJlbiA9PSBudWxsKSB7XG5cdFx0cGFyZW50LnRleHRDb250ZW50ID0gJyc7XG5cdH1cblxuXHRwcmVhY3RSZW5kZXIodm5vZGUsIHBhcmVudCk7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcblxuXHRyZXR1cm4gdm5vZGUgPyB2bm9kZS5fY29tcG9uZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGUodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0cHJlYWN0SHlkcmF0ZSh2bm9kZSwgcGFyZW50KTtcblx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuXG5cdHJldHVybiB2bm9kZSA/IHZub2RlLl9jb21wb25lbnQgOiBudWxsO1xufVxuXG5sZXQgb2xkRXZlbnRIb29rID0gb3B0aW9ucy5ldmVudDtcbm9wdGlvbnMuZXZlbnQgPSBlID0+IHtcblx0aWYgKG9sZEV2ZW50SG9vaykgZSA9IG9sZEV2ZW50SG9vayhlKTtcblxuXHRlLnBlcnNpc3QgPSBlbXB0eTtcblx0ZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGlzUHJvcGFnYXRpb25TdG9wcGVkO1xuXHRlLmlzRGVmYXVsdFByZXZlbnRlZCA9IGlzRGVmYXVsdFByZXZlbnRlZDtcblx0cmV0dXJuIChlLm5hdGl2ZUV2ZW50ID0gZSk7XG59O1xuXG5mdW5jdGlvbiBlbXB0eSgpIHt9XG5cbmZ1bmN0aW9uIGlzUHJvcGFnYXRpb25TdG9wcGVkKCkge1xuXHRyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGU7XG59XG5cbmZ1bmN0aW9uIGlzRGVmYXVsdFByZXZlbnRlZCgpIHtcblx0cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZDtcbn1cblxuY29uc3QgY2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlID0ge1xuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2xhc3M7XG5cdH1cbn07XG5cbmZ1bmN0aW9uIGhhbmRsZURvbVZOb2RlKHZub2RlKSB7XG5cdGxldCBwcm9wcyA9IHZub2RlLnByb3BzLFxuXHRcdHR5cGUgPSB2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyA9IHt9O1xuXG5cdGxldCBpc05vbkRhc2hlZFR5cGUgPSB0eXBlLmluZGV4T2YoJy0nKSA9PT0gLTE7XG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIHtcblx0XHRsZXQgdmFsdWUgPSBwcm9wc1tpXTtcblxuXHRcdGlmIChcblx0XHRcdChpID09PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIHByb3BzICYmIHZhbHVlID09IG51bGwpIHx8XG5cdFx0XHQvLyBFbXVsYXRlIFJlYWN0J3MgYmVoYXZpb3Igb2Ygbm90IHJlbmRlcmluZyB0aGUgY29udGVudHMgb2Ygbm9zY3JpcHQgdGFncyBvbiB0aGUgY2xpZW50LlxuXHRcdFx0KElTX0RPTSAmJiBpID09PSAnY2hpbGRyZW4nICYmIHR5cGUgPT09ICdub3NjcmlwdCcpIHx8XG5cdFx0XHRpID09PSAnY2xhc3MnIHx8XG5cdFx0XHRpID09PSAnY2xhc3NOYW1lJ1xuXHRcdCkge1xuXHRcdFx0Ly8gU2tpcCBhcHBseWluZyB2YWx1ZSBpZiBpdCBpcyBudWxsL3VuZGVmaW5lZCBhbmQgd2UgYWxyZWFkeSBzZXRcblx0XHRcdC8vIGEgZGVmYXVsdCB2YWx1ZVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0bGV0IGxvd2VyQ2FzZWQgPSBpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKGkgPT09ICdkZWZhdWx0VmFsdWUnICYmICd2YWx1ZScgaW4gcHJvcHMgJiYgcHJvcHMudmFsdWUgPT0gbnVsbCkge1xuXHRcdFx0Ly8gYGRlZmF1bHRWYWx1ZWAgaXMgdHJlYXRlZCBhcyBhIGZhbGxiYWNrIGB2YWx1ZWAgd2hlbiBhIHZhbHVlIHByb3AgaXMgcHJlc2VudCBidXQgbnVsbC91bmRlZmluZWQuXG5cdFx0XHQvLyBgZGVmYXVsdFZhbHVlYCBmb3IgRWxlbWVudHMgd2l0aCBubyB2YWx1ZSBwcm9wIGlzIHRoZSBzYW1lIGFzIHRoZSBET00gZGVmYXVsdFZhbHVlIHByb3BlcnR5LlxuXHRcdFx0aSA9ICd2YWx1ZSc7XG5cdFx0fSBlbHNlIGlmIChpID09PSAnZG93bmxvYWQnICYmIHZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHQvLyBDYWxsaW5nIGBzZXRBdHRyaWJ1dGVgIHdpdGggYSB0cnV0aHkgdmFsdWUgd2lsbCBsZWFkIHRvIGl0IGJlaW5nXG5cdFx0XHQvLyBwYXNzZWQgYXMgYSBzdHJpbmdpZmllZCB2YWx1ZSwgZS5nLiBgZG93bmxvYWQ9XCJ0cnVlXCJgLiBSZWFjdFxuXHRcdFx0Ly8gY29udmVydHMgaXQgdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQsIG90aGVyd2lzZSB0aGUgYXR0cmlidXRlXG5cdFx0XHQvLyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBhbmQgdGhlIGZpbGUgd2lsbCBiZSBjYWxsZWRcblx0XHRcdC8vIFwidHJ1ZVwiIHVwb24gZG93bmxvYWRpbmcgaXQuXG5cdFx0XHR2YWx1ZSA9ICcnO1xuXHRcdH0gZWxzZSBpZiAobG93ZXJDYXNlZCA9PT0gJ3RyYW5zbGF0ZScgJiYgdmFsdWUgPT09ICdubycpIHtcblx0XHRcdHZhbHVlID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkWzBdID09PSAnbycgJiYgbG93ZXJDYXNlZFsxXSA9PT0gJ24nKSB7XG5cdFx0XHRpZiAobG93ZXJDYXNlZCA9PT0gJ29uZG91YmxlY2xpY2snKSB7XG5cdFx0XHRcdGkgPSAnb25kYmxjbGljayc7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRsb3dlckNhc2VkID09PSAnb25jaGFuZ2UnICYmXG5cdFx0XHRcdCh0eXBlID09PSAnaW5wdXQnIHx8IHR5cGUgPT09ICd0ZXh0YXJlYScpICYmXG5cdFx0XHRcdCFvbkNoYW5nZUlucHV0VHlwZShwcm9wcy50eXBlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGxvd2VyQ2FzZWQgPSBpID0gJ29uaW5wdXQnO1xuXHRcdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkID09PSAnb25mb2N1cycpIHtcblx0XHRcdFx0aSA9ICdvbmZvY3VzaW4nO1xuXHRcdFx0fSBlbHNlIGlmIChsb3dlckNhc2VkID09PSAnb25ibHVyJykge1xuXHRcdFx0XHRpID0gJ29uZm9jdXNvdXQnO1xuXHRcdFx0fSBlbHNlIGlmIChPTl9BTkkudGVzdChpKSkge1xuXHRcdFx0XHRpID0gbG93ZXJDYXNlZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzTm9uRGFzaGVkVHlwZSAmJiBDQU1FTF9QUk9QUy50ZXN0KGkpKSB7XG5cdFx0XHRpID0gaS5yZXBsYWNlKENBTUVMX1JFUExBQ0UsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBzdXBwb3J0IGZvciBvbklucHV0IGFuZCBvbkNoYW5nZSwgc2VlICMzNTYxXG5cdFx0Ly8gaWYgd2UgaGF2ZSBhbiBvbmlucHV0IHByb3AgYWxyZWFkeSBjaGFuZ2UgaXQgdG8gb25pbnB1dENhcHR1cmVcblx0XHRpZiAobG93ZXJDYXNlZCA9PT0gJ29uaW5wdXQnKSB7XG5cdFx0XHRpID0gbG93ZXJDYXNlZDtcblx0XHRcdGlmIChub3JtYWxpemVkUHJvcHNbaV0pIHtcblx0XHRcdFx0aSA9ICdvbmlucHV0Q2FwdHVyZSc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bm9ybWFsaXplZFByb3BzW2ldID0gdmFsdWU7XG5cdH1cblxuXHQvLyBBZGQgc3VwcG9ydCBmb3IgYXJyYXkgc2VsZWN0IHZhbHVlczogPHNlbGVjdCBtdWx0aXBsZSB2YWx1ZT17W119IC8+XG5cdGlmIChcblx0XHR0eXBlID09ICdzZWxlY3QnICYmXG5cdFx0bm9ybWFsaXplZFByb3BzLm11bHRpcGxlICYmXG5cdFx0QXJyYXkuaXNBcnJheShub3JtYWxpemVkUHJvcHMudmFsdWUpXG5cdCkge1xuXHRcdC8vIGZvckVhY2goKSBhbHdheXMgcmV0dXJucyB1bmRlZmluZWQsIHdoaWNoIHdlIGFidXNlIGhlcmUgdG8gdW5zZXQgdGhlIHZhbHVlIHByb3AuXG5cdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlID0gdG9DaGlsZEFycmF5KHByb3BzLmNoaWxkcmVuKS5mb3JFYWNoKGNoaWxkID0+IHtcblx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gQWRkaW5nIHN1cHBvcnQgZm9yIGRlZmF1bHRWYWx1ZSBpbiBzZWxlY3QgdGFnXG5cdGlmICh0eXBlID09ICdzZWxlY3QnICYmIG5vcm1hbGl6ZWRQcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy52YWx1ZSA9IHRvQ2hpbGRBcnJheShwcm9wcy5jaGlsZHJlbikuZm9yRWFjaChjaGlsZCA9PiB7XG5cdFx0XHRpZiAobm9ybWFsaXplZFByb3BzLm11bHRpcGxlKSB7XG5cdFx0XHRcdGNoaWxkLnByb3BzLnNlbGVjdGVkID1cblx0XHRcdFx0XHRub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGQucHJvcHMuc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdG5vcm1hbGl6ZWRQcm9wcy5kZWZhdWx0VmFsdWUgPT0gY2hpbGQucHJvcHMudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJvcHMuY2xhc3MgJiYgIXByb3BzLmNsYXNzTmFtZSkge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jbGFzcyA9IHByb3BzLmNsYXNzO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcblx0XHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRcdCdjbGFzc05hbWUnLFxuXHRcdFx0Y2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgJiYgIXByb3BzLmNsYXNzKSB7XG5cdFx0bm9ybWFsaXplZFByb3BzLmNsYXNzID0gbm9ybWFsaXplZFByb3BzLmNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcblx0fSBlbHNlIGlmIChwcm9wcy5jbGFzcyAmJiBwcm9wcy5jbGFzc05hbWUpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2xhc3MgPSBub3JtYWxpemVkUHJvcHMuY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuXHR9XG5cblx0dm5vZGUucHJvcHMgPSBub3JtYWxpemVkUHJvcHM7XG59XG5cbmxldCBvbGRWTm9kZUhvb2sgPSBvcHRpb25zLnZub2RlO1xub3B0aW9ucy52bm9kZSA9IHZub2RlID0+IHtcblx0Ly8gb25seSBub3JtYWxpemUgcHJvcHMgb24gRWxlbWVudCBub2Rlc1xuXHRpZiAodHlwZW9mIHZub2RlLnR5cGUgPT09ICdzdHJpbmcnKSB7XG5cdFx0aGFuZGxlRG9tVk5vZGUodm5vZGUpO1xuXHR9XG5cblx0dm5vZGUuJCR0eXBlb2YgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG5cblx0aWYgKG9sZFZOb2RlSG9vaykgb2xkVk5vZGVIb29rKHZub2RlKTtcbn07XG5cbi8vIE9ubHkgbmVlZGVkIGZvciByZWFjdC1yZWxheVxubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5jb25zdCBvbGRCZWZvcmVSZW5kZXIgPSBvcHRpb25zLl9yZW5kZXI7XG5vcHRpb25zLl9yZW5kZXIgPSBmdW5jdGlvbiAodm5vZGUpIHtcblx0aWYgKG9sZEJlZm9yZVJlbmRlcikge1xuXHRcdG9sZEJlZm9yZVJlbmRlcih2bm9kZSk7XG5cdH1cblx0Y3VycmVudENvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG59O1xuXG5jb25zdCBvbGREaWZmZWQgPSBvcHRpb25zLmRpZmZlZDtcbi8qKiBAdHlwZSB7KHZub2RlOiBpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZSkgPT4gdm9pZH0gKi9cbm9wdGlvbnMuZGlmZmVkID0gZnVuY3Rpb24gKHZub2RlKSB7XG5cdGlmIChvbGREaWZmZWQpIHtcblx0XHRvbGREaWZmZWQodm5vZGUpO1xuXHR9XG5cblx0Y29uc3QgcHJvcHMgPSB2bm9kZS5wcm9wcztcblx0Y29uc3QgZG9tID0gdm5vZGUuX2RvbTtcblxuXHRpZiAoXG5cdFx0ZG9tICE9IG51bGwgJiZcblx0XHR2bm9kZS50eXBlID09PSAndGV4dGFyZWEnICYmXG5cdFx0J3ZhbHVlJyBpbiBwcm9wcyAmJlxuXHRcdHByb3BzLnZhbHVlICE9PSBkb20udmFsdWVcblx0KSB7XG5cdFx0ZG9tLnZhbHVlID0gcHJvcHMudmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMudmFsdWU7XG5cdH1cblxuXHRjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcbn07XG5cbi8vIFRoaXMgaXMgYSB2ZXJ5IHZlcnkgcHJpdmF0ZSBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgUmVhY3QgaXRcbi8vIGlzIHVzZWQgdG8gc29ydC1vZiBkbyBydW50aW1lIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuZXhwb3J0IGNvbnN0IF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0ge1xuXHRSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiB7XG5cdFx0Y3VycmVudDoge1xuXHRcdFx0cmVhZENvbnRleHQoY29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudENvbXBvbmVudC5fZ2xvYmFsQ29udGV4dFtjb250ZXh0Ll9pZF0ucHJvcHMudmFsdWU7XG5cdFx0XHR9LFxuXHRcdFx0dXNlQ2FsbGJhY2ssXG5cdFx0XHR1c2VDb250ZXh0LFxuXHRcdFx0dXNlRGVidWdWYWx1ZSxcblx0XHRcdHVzZURlZmVycmVkVmFsdWUsXG5cdFx0XHR1c2VFZmZlY3QsXG5cdFx0XHR1c2VJZCxcblx0XHRcdHVzZUltcGVyYXRpdmVIYW5kbGUsXG5cdFx0XHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdFx0XHR1c2VMYXlvdXRFZmZlY3QsXG5cdFx0XHR1c2VNZW1vLFxuXHRcdFx0Ly8gdXNlTXV0YWJsZVNvdXJjZSwgLy8gZXhwZXJpbWVudGFsLW9ubHkgYW5kIHJlcGxhY2VkIGJ5IHVTRVMsIGxpa2VseSBub3Qgd29ydGggc3VwcG9ydGluZ1xuXHRcdFx0dXNlUmVkdWNlcixcblx0XHRcdHVzZVJlZixcblx0XHRcdHVzZVN0YXRlLFxuXHRcdFx0dXNlU3luY0V4dGVybmFsU3RvcmUsXG5cdFx0XHR1c2VUcmFuc2l0aW9uXG5cdFx0fVxuXHR9XG59O1xuIiwgImltcG9ydCB7XG5cdGNyZWF0ZUVsZW1lbnQsXG5cdHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsXG5cdGNsb25lRWxlbWVudCBhcyBwcmVhY3RDbG9uZUVsZW1lbnQsXG5cdGNyZWF0ZVJlZixcblx0Q29tcG9uZW50LFxuXHRjcmVhdGVDb250ZXh0LFxuXHRGcmFnbWVudFxufSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHtcblx0dXNlU3RhdGUsXG5cdHVzZUlkLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUxheW91dEVmZmVjdCxcblx0dXNlUmVmLFxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHR1c2VNZW1vLFxuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZVxufSBmcm9tICdwcmVhY3QvaG9va3MnO1xuaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJy4vUHVyZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi9tZW1vJztcbmltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tICcuL2ZvcndhcmRSZWYnO1xuaW1wb3J0IHsgQ2hpbGRyZW4gfSBmcm9tICcuL0NoaWxkcmVuJztcbmltcG9ydCB7IFN1c3BlbnNlLCBsYXp5IH0gZnJvbSAnLi9zdXNwZW5zZSc7XG5pbXBvcnQgeyBTdXNwZW5zZUxpc3QgfSBmcm9tICcuL3N1c3BlbnNlLWxpc3QnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAnLi9wb3J0YWxzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7XG5cdGh5ZHJhdGUsXG5cdHJlbmRlcixcblx0UkVBQ1RfRUxFTUVOVF9UWVBFLFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufSBmcm9tICcuL3JlbmRlcic7XG5cbmNvbnN0IHZlcnNpb24gPSAnMTguMy4xJzsgLy8gdHJpY2sgbGlicmFyaWVzIHRvIHRoaW5rIHdlIGFyZSByZWFjdFxuXG4vKipcbiAqIExlZ2FjeSB2ZXJzaW9uIG9mIGNyZWF0ZUVsZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlW1widHlwZVwiXX0gdHlwZSBUaGUgbm9kZSBuYW1lIG9yIENvbXBvbmVudCBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5KHR5cGUpIHtcblx0cmV0dXJuIGNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSB2YWxpZCAocClyZWFjdCBub2RlLlxuICogQHBhcmFtIHsqfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuXHRyZXR1cm4gISFlbGVtZW50ICYmIGVsZW1lbnQuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgYSBGcmFnbWVudCBub2RlLlxuICogQHBhcmFtIHsqfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGcmFnbWVudChlbGVtZW50KSB7XG5cdHJldHVybiBpc1ZhbGlkRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50LnR5cGUgPT09IEZyYWdtZW50O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXNzZWQgZWxlbWVudCBpcyBhIE1lbW8gbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTWVtbyhlbGVtZW50KSB7XG5cdHJldHVybiAoXG5cdFx0ISFlbGVtZW50ICYmXG5cdFx0ISFlbGVtZW50LmRpc3BsYXlOYW1lICYmXG5cdFx0KHR5cGVvZiBlbGVtZW50LmRpc3BsYXlOYW1lID09PSAnc3RyaW5nJyB8fFxuXHRcdFx0ZWxlbWVudC5kaXNwbGF5TmFtZSBpbnN0YW5jZW9mIFN0cmluZykgJiZcblx0XHRlbGVtZW50LmRpc3BsYXlOYW1lLnN0YXJ0c1dpdGgoJ01lbW8oJylcblx0KTtcbn1cblxuLyoqXG4gKiBXcmFwIGBjbG9uZUVsZW1lbnRgIHRvIGFib3J0IGlmIHRoZSBwYXNzZWQgZWxlbWVudCBpcyBub3QgYSB2YWxpZCBlbGVtZW50IGFuZCBhcHBseVxuICogYWxsIHZub2RlIG5vcm1hbGl6YXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gZWxlbWVudCBUaGUgdm5vZGUgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBQcm9wcyB0byBhZGQgd2hlbiBjbG9uaW5nXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudENoaWxkcmVuPn0gcmVzdCBPcHRpb25hbCBjb21wb25lbnQgY2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gY2xvbmVFbGVtZW50KGVsZW1lbnQpIHtcblx0aWYgKCFpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG5cdHJldHVybiBwcmVhY3RDbG9uZUVsZW1lbnQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjb21wb25lbnQgdHJlZSBmcm9tIHRoZSBET00sIGluY2x1ZGluZyBzdGF0ZSBhbmQgZXZlbnQgaGFuZGxlcnMuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG5cdGlmIChjb250YWluZXIuX2NoaWxkcmVuKSB7XG5cdFx0cHJlYWN0UmVuZGVyKG51bGwsIGNvbnRhaW5lcik7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbWF0Y2hpbmcgRE9NIG5vZGUgZm9yIGEgY29tcG9uZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudCB8IG51bGx9XG4gKi9cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudCkge1xuXHRyZXR1cm4gKFxuXHRcdChjb21wb25lbnQgJiZcblx0XHRcdChjb21wb25lbnQuYmFzZSB8fCAoY29tcG9uZW50Lm5vZGVUeXBlID09PSAxICYmIGNvbXBvbmVudCkpKSB8fFxuXHRcdG51bGxcblx0KTtcbn1cblxuLyoqXG4gKiBEZXByZWNhdGVkIHdheSB0byBjb250cm9sIGJhdGNoZWQgcmVuZGVyaW5nIGluc2lkZSB0aGUgcmVjb25jaWxlciwgYnV0IHdlXG4gKiBhbHJlYWR5IHNjaGVkdWxlIGluIGJhdGNoZXMgaW5zaWRlIG91ciByZW5kZXJpbmcgY29kZVxuICogQHRlbXBsYXRlIEFyZ1xuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IHZvaWR9IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgdGhlIHVwZGF0ZWRcbiAqIEBwYXJhbSB7QXJnfSBbYXJnXSBPcHRpb25hbCBhcmd1bWVudCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbmNvbnN0IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gKGNhbGxiYWNrLCBhcmcpID0+IGNhbGxiYWNrKGFyZyk7XG5cbi8qKlxuICogSW4gUmVhY3QsIGBmbHVzaFN5bmNgIGZsdXNoZXMgdGhlIGVudGlyZSB0cmVlIGFuZCBmb3JjZXMgYSByZXJlbmRlci4gSXQnc1xuICogaW1wbG1lbnRlZCBoZXJlIGFzIGEgbm8tb3AuXG4gKiBAdGVtcGxhdGUgQXJnXG4gKiBAdGVtcGxhdGUgUmVzdWx0XG4gKiBAcGFyYW0geyhhcmc6IEFyZykgPT4gUmVzdWx0fSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJ1bnMgYmVmb3JlIHRoZSBmbHVzaFxuICogQHBhcmFtIHtBcmd9IFthcmddIE9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2tcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGZsdXNoU3luYyA9IChjYWxsYmFjaywgYXJnKSA9PiBjYWxsYmFjayhhcmcpO1xuXG4vKipcbiAqIFN0cmljdCBNb2RlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBQcmVhY3QsIHNvIHdlIHByb3ZpZGUgYSBzdGFuZC1pbiBmb3IgaXRcbiAqIHRoYXQganVzdCByZW5kZXJzIGl0cyBjaGlsZHJlbiB3aXRob3V0IGltcG9zaW5nIGFueSByZXN0cmljdGlvbnMuXG4gKi9cbmNvbnN0IFN0cmljdE1vZGUgPSBGcmFnbWVudDtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihjYikge1xuXHRjYigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVmZXJyZWRWYWx1ZSh2YWwpIHtcblx0cmV0dXJuIHZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRyYW5zaXRpb24oKSB7XG5cdHJldHVybiBbZmFsc2UsIHN0YXJ0VHJhbnNpdGlvbl07XG59XG5cbi8vIFRPRE86IGluIHRoZW9yeSB0aGlzIHNob3VsZCBiZSBkb25lIGFmdGVyIGEgVk5vZGUgaXMgZGlmZmVkIGFzIHdlIHdhbnQgdG8gaW5zZXJ0XG4vLyBzdHlsZXMvLi4uIGJlZm9yZSBpdCBhdHRhY2hlc1xuZXhwb3J0IGNvbnN0IHVzZUluc2VydGlvbkVmZmVjdCA9IHVzZUxheW91dEVmZmVjdDtcblxuLy8gY29tcGF0IHRvIHJlYWN0LWlzXG5leHBvcnQgY29uc3QgaXNFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5cbi8qKlxuICogVGhpcyBpcyB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21haW4vcGFja2FnZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc3JjL3VzZVN5bmNFeHRlcm5hbFN0b3JlU2hpbUNsaWVudC5qcyNMODRcbiAqIG9uIGEgaGlnaCBsZXZlbCB0aGlzIGN1dHMgb3V0IHRoZSB3YXJuaW5ncywgLi4uIGFuZCBhdHRlbXB0cyBhIHNtYWxsZXIgaW1wbGVtZW50YXRpb25cbiAqIEB0eXBlZGVmIHt7IF92YWx1ZTogYW55OyBfZ2V0U25hcHNob3Q6ICgpID0+IGFueSB9fSBTdG9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCkge1xuXHRjb25zdCB2YWx1ZSA9IGdldFNuYXBzaG90KCk7XG5cblx0LyoqXG5cdCAqIEB0eXBlZGVmIHt7IF9pbnN0YW5jZTogU3RvcmUgfX0gU3RvcmVSZWZcblx0ICogQHR5cGUge1tTdG9yZVJlZiwgKHN0b3JlOiBTdG9yZVJlZikgPT4gdm9pZF19XG5cdCAqL1xuXHRjb25zdCBbeyBfaW5zdGFuY2UgfSwgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUoe1xuXHRcdF9pbnN0YW5jZTogeyBfdmFsdWU6IHZhbHVlLCBfZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH1cblx0fSk7XG5cblx0dXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcblx0XHRfaW5zdGFuY2UuX3ZhbHVlID0gdmFsdWU7XG5cdFx0X2luc3RhbmNlLl9nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuXG5cdFx0aWYgKGRpZFNuYXBzaG90Q2hhbmdlKF9pbnN0YW5jZSkpIHtcblx0XHRcdGZvcmNlVXBkYXRlKHsgX2luc3RhbmNlIH0pO1xuXHRcdH1cblx0fSwgW3N1YnNjcmliZSwgdmFsdWUsIGdldFNuYXBzaG90XSk7XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZGlkU25hcHNob3RDaGFuZ2UoX2luc3RhbmNlKSkge1xuXHRcdFx0Zm9yY2VVcGRhdGUoeyBfaW5zdGFuY2UgfSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAoZGlkU25hcHNob3RDaGFuZ2UoX2luc3RhbmNlKSkge1xuXHRcdFx0XHRmb3JjZVVwZGF0ZSh7IF9pbnN0YW5jZSB9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSwgW3N1YnNjcmliZV0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIEB0eXBlIHsoaW5zdDogU3RvcmUpID0+IGJvb2xlYW59ICovXG5mdW5jdGlvbiBkaWRTbmFwc2hvdENoYW5nZShpbnN0KSB7XG5cdGNvbnN0IGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5fZ2V0U25hcHNob3Q7XG5cdGNvbnN0IHByZXZWYWx1ZSA9IGluc3QuX3ZhbHVlO1xuXHR0cnkge1xuXHRcdGNvbnN0IG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG5cdFx0cmV0dXJuICFpcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZXhwb3J0ICogZnJvbSAncHJlYWN0L2hvb2tzJztcbmV4cG9ydCB7XG5cdHZlcnNpb24sXG5cdENoaWxkcmVuLFxuXHRyZW5kZXIsXG5cdGh5ZHJhdGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdGNyZWF0ZVBvcnRhbCxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdEZyYWdtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0aXNGcmFnbWVudCxcblx0aXNNZW1vLFxuXHRmaW5kRE9NTm9kZSxcblx0Q29tcG9uZW50LFxuXHRQdXJlQ29tcG9uZW50LFxuXHRtZW1vLFxuXHRmb3J3YXJkUmVmLFxuXHRmbHVzaFN5bmMsXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2Vcblx0dW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsXG5cdFN0cmljdE1vZGUsXG5cdFN1c3BlbnNlLFxuXHRTdXNwZW5zZUxpc3QsXG5cdGxhenksXG5cdF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEXG59O1xuXG4vLyBSZWFjdCBjb3BpZXMgdGhlIG5hbWVkIGV4cG9ydHMgdG8gdGhlIGRlZmF1bHQgb25lLlxuZXhwb3J0IGRlZmF1bHQge1xuXHR1c2VTdGF0ZSxcblx0dXNlSWQsXG5cdHVzZVJlZHVjZXIsXG5cdHVzZUVmZmVjdCxcblx0dXNlTGF5b3V0RWZmZWN0LFxuXHR1c2VJbnNlcnRpb25FZmZlY3QsXG5cdHVzZVRyYW5zaXRpb24sXG5cdHVzZURlZmVycmVkVmFsdWUsXG5cdHVzZVN5bmNFeHRlcm5hbFN0b3JlLFxuXHRzdGFydFRyYW5zaXRpb24sXG5cdHVzZVJlZixcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTWVtbyxcblx0dXNlQ2FsbGJhY2ssXG5cdHVzZUNvbnRleHQsXG5cdHVzZURlYnVnVmFsdWUsXG5cdHZlcnNpb24sXG5cdENoaWxkcmVuLFxuXHRyZW5kZXIsXG5cdGh5ZHJhdGUsXG5cdHVubW91bnRDb21wb25lbnRBdE5vZGUsXG5cdGNyZWF0ZVBvcnRhbCxcblx0Y3JlYXRlRWxlbWVudCxcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRmFjdG9yeSxcblx0Y2xvbmVFbGVtZW50LFxuXHRjcmVhdGVSZWYsXG5cdEZyYWdtZW50LFxuXHRpc1ZhbGlkRWxlbWVudCxcblx0aXNFbGVtZW50LFxuXHRpc0ZyYWdtZW50LFxuXHRpc01lbW8sXG5cdGZpbmRET01Ob2RlLFxuXHRDb21wb25lbnQsXG5cdFB1cmVDb21wb25lbnQsXG5cdG1lbW8sXG5cdGZvcndhcmRSZWYsXG5cdGZsdXNoU3luYyxcblx0dW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsXG5cdFN0cmljdE1vZGUsXG5cdFN1c3BlbnNlLFxuXHRTdXNwZW5zZUxpc3QsXG5cdGxhenksXG5cdF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEXG59O1xuIiwgImNvbnN0IEVOQ09ERURfRU5USVRJRVMgPSAvW1wiJjxdLztcblxuLyoqIEBwYXJhbSB7c3RyaW5nfSBzdHIgKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFbnRpdGllcyhzdHIpIHtcblx0Ly8gU2tpcCBhbGwgd29yayBmb3Igc3RyaW5ncyB3aXRoIG5vIGVudGl0aWVzIG5lZWRpbmcgZW5jb2Rpbmc6XG5cdGlmIChzdHIubGVuZ3RoID09PSAwIHx8IEVOQ09ERURfRU5USVRJRVMudGVzdChzdHIpID09PSBmYWxzZSkgcmV0dXJuIHN0cjtcblxuXHRsZXQgbGFzdCA9IDAsXG5cdFx0aSA9IDAsXG5cdFx0b3V0ID0gJycsXG5cdFx0Y2ggPSAnJztcblxuXHQvLyBTZWVrIGZvcndhcmQgaW4gc3RyIHVudGlsIHRoZSBuZXh0IGVudGl0eSBjaGFyOlxuXHRmb3IgKDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaSkpIHtcblx0XHRcdGNhc2UgMzQ6XG5cdFx0XHRcdGNoID0gJyZxdW90Oyc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0Y2ggPSAnJmFtcDsnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgNjA6XG5cdFx0XHRcdGNoID0gJyZsdDsnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHQvLyBBcHBlbmQgc2tpcHBlZC9idWZmZXJlZCBjaGFyYWN0ZXJzIGFuZCB0aGUgZW5jb2RlZCBlbnRpdHk6XG5cdFx0aWYgKGkgIT09IGxhc3QpIG91dCArPSBzdHIuc2xpY2UobGFzdCwgaSk7XG5cdFx0b3V0ICs9IGNoO1xuXHRcdC8vIFN0YXJ0IHRoZSBuZXh0IHNlZWsvYnVmZmVyIGFmdGVyIHRoZSBlbnRpdHkncyBvZmZzZXQ6XG5cdFx0bGFzdCA9IGkgKyAxO1xuXHR9XG5cdGlmIChpICE9PSBsYXN0KSBvdXQgKz0gc3RyLnNsaWNlKGxhc3QsIGkpO1xuXHRyZXR1cm4gb3V0O1xufVxuIiwgIi8qKiBOb3JtYWwgaHlkcmF0aW9uIHRoYXQgYXR0YWNoZXMgdG8gYSBET00gdHJlZSBidXQgZG9lcyBub3QgZGlmZiBpdC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFX0hZRFJBVEUgPSAxIDw8IDU7XG4vKiogU2lnbmlmaWVzIHRoaXMgVk5vZGUgc3VzcGVuZGVkIG9uIHRoZSBwcmV2aW91cyByZW5kZXIgKi9cbmV4cG9ydCBjb25zdCBNT0RFX1NVU1BFTkRFRCA9IDEgPDwgNztcbi8qKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIG5vZGUgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgd2hpbGUgcGF0Y2hpbmcgY2hpbGRyZW4gKi9cbmV4cG9ydCBjb25zdCBJTlNFUlRfVk5PREUgPSAxIDw8IDE2O1xuLyoqIEluZGljYXRlcyBhIFZOb2RlIGhhcyBiZWVuIG1hdGNoZWQgd2l0aCBhbm90aGVyIFZOb2RlIGluIHRoZSBkaWZmICovXG5leHBvcnQgY29uc3QgTUFUQ0hFRCA9IDEgPDwgMTc7XG5cbi8qKiBSZXNldCBhbGwgbW9kZSBmbGFncyAqL1xuZXhwb3J0IGNvbnN0IFJFU0VUX01PREUgPSB+KE1PREVfSFlEUkFURSB8IE1PREVfU1VTUEVOREVEKTtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX09CSiA9IC8qKiBAdHlwZSB7YW55fSAqLyAoe30pO1xuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUiA9IFtdO1xuZXhwb3J0IGNvbnN0IElTX05PTl9ESU1FTlNJT05BTCA9XG5cdC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2k7XG4iLCAiaW1wb3J0IHsgb3B0aW9ucywgRnJhZ21lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgZW5jb2RlRW50aXRpZXMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IElTX05PTl9ESU1FTlNJT05BTCB9IGZyb20gJy4uLy4uL3NyYy9jb25zdGFudHMnO1xuXG5sZXQgdm5vZGVJZCA9IDA7XG5cbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXdcbiAqIFRoaXMgZmlsZSBleHBvcnRzIHZhcmlvdXMgbWV0aG9kcyB0aGF0IGltcGxlbWVudCBCYWJlbCdzIFwiYXV0b21hdGljXCIgSlNYIHJ1bnRpbWUgQVBJOlxuICogLSBqc3godHlwZSwgcHJvcHMsIGtleSlcbiAqIC0ganN4cyh0eXBlLCBwcm9wcywga2V5KVxuICogLSBqc3hERVYodHlwZSwgcHJvcHMsIGtleSwgX19zb3VyY2UsIF9fc2VsZilcbiAqXG4gKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgY3JlYXRlVk5vZGUgaGVyZSBpcyBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLlxuICogQmVuY2htYXJrczogaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81ZjZiNTRhMGI0NjMyMTAwYTdkY2QyYjNcbiAqL1xuXG4vKipcbiAqIEpTWC5FbGVtZW50IGZhY3RvcnkgdXNlZCBieSBCYWJlbCdzIHtydW50aW1lOlwiYXV0b21hdGljXCJ9IEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7Vk5vZGVbJ3R5cGUnXX0gdHlwZVxuICogQHBhcmFtIHtWTm9kZVsncHJvcHMnXX0gcHJvcHNcbiAqIEBwYXJhbSB7Vk5vZGVbJ2tleSddfSBba2V5XVxuICogQHBhcmFtIHt1bmtub3dufSBbaXNTdGF0aWNDaGlsZHJlbl1cbiAqIEBwYXJhbSB7dW5rbm93bn0gW19fc291cmNlXVxuICogQHBhcmFtIHt1bmtub3dufSBbX19zZWxmXVxuICovXG5mdW5jdGlvbiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBfX3NvdXJjZSwgX19zZWxmKSB7XG5cdGlmICghcHJvcHMpIHByb3BzID0ge307XG5cdC8vIFdlJ2xsIHdhbnQgdG8gcHJlc2VydmUgYHJlZmAgaW4gcHJvcHMgdG8gZ2V0IHJpZCBvZiB0aGUgbmVlZCBmb3Jcblx0Ly8gZm9yd2FyZFJlZiBjb21wb25lbnRzIGluIHRoZSBmdXR1cmUsIGJ1dCB0aGF0IHNob3VsZCBoYXBwZW4gdmlhXG5cdC8vIGEgc2VwYXJhdGUgUFIuXG5cdGxldCBub3JtYWxpemVkUHJvcHMgPSBwcm9wcyxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRpZiAoJ3JlZicgaW4gcHJvcHMpIHtcblx0XHRyZWYgPSBwcm9wcy5yZWY7XG5cdFx0ZGVsZXRlIHByb3BzLnJlZjtcblx0fVxuXG5cdC8qKiBAdHlwZSB7Vk5vZGUgJiB7IF9fc291cmNlOiBhbnk7IF9fc2VsZjogYW55IH19ICovXG5cdGNvbnN0IHZub2RlID0ge1xuXHRcdHR5cGUsXG5cdFx0cHJvcHM6IG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXksXG5cdFx0cmVmLFxuXHRcdF9jaGlsZHJlbjogbnVsbCxcblx0XHRfcGFyZW50OiBudWxsLFxuXHRcdF9kZXB0aDogMCxcblx0XHRfZG9tOiBudWxsLFxuXHRcdF9uZXh0RG9tOiB1bmRlZmluZWQsXG5cdFx0X2NvbXBvbmVudDogbnVsbCxcblx0XHRjb25zdHJ1Y3RvcjogdW5kZWZpbmVkLFxuXHRcdF9vcmlnaW5hbDogLS12bm9kZUlkLFxuXHRcdF9pbmRleDogLTEsXG5cdFx0X2ZsYWdzOiAwLFxuXHRcdF9fc291cmNlLFxuXHRcdF9fc2VsZlxuXHR9O1xuXG5cdC8vIElmIGEgQ29tcG9uZW50IFZOb2RlLCBjaGVjayBmb3IgYW5kIGFwcGx5IGRlZmF1bHRQcm9wcy5cblx0Ly8gTm90ZTogYHR5cGVgIGlzIG9mdGVuIGEgU3RyaW5nLCBhbmQgY2FuIGJlIGB1bmRlZmluZWRgIGluIGRldmVsb3BtZW50LlxuXHRpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgKHJlZiA9IHR5cGUuZGVmYXVsdFByb3BzKSkge1xuXHRcdGZvciAoaSBpbiByZWYpXG5cdFx0XHRpZiAodHlwZW9mIG5vcm1hbGl6ZWRQcm9wc1tpXSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gcmVmW2ldO1xuXHRcdFx0fVxuXHR9XG5cblx0aWYgKG9wdGlvbnMudm5vZGUpIG9wdGlvbnMudm5vZGUodm5vZGUpO1xuXHRyZXR1cm4gdm5vZGU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcGxhdGUgdm5vZGUuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGV4cGVjdGVkIHRvIGJlXG4gKiB1c2VkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHRocm91Z2ggYSBwcmVjb21waWxlIEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7c3RyaW5nW119IHRlbXBsYXRlc1xuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nIHwgbnVsbCB8IFZOb2RlPn0gZXhwcnNcbiAqIEByZXR1cm5zIHtWTm9kZX1cbiAqL1xuZnVuY3Rpb24ganN4VGVtcGxhdGUodGVtcGxhdGVzLCAuLi5leHBycykge1xuXHRjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKEZyYWdtZW50LCB7IHRwbDogdGVtcGxhdGVzLCBleHBycyB9KTtcblx0Ly8gQnlwYXNzIHJlbmRlciB0byBzdHJpbmcgdG9wIGxldmVsIEZyYWdtZW50IG9wdGltaXphdGlvblxuXHR2bm9kZS5rZXkgPSB2bm9kZS5fdm5vZGU7XG5cdHJldHVybiB2bm9kZTtcbn1cblxuY29uc3QgSlNfVE9fQ1NTID0ge307XG5jb25zdCBDU1NfUkVHRVggPSAvW0EtWl0vZztcblxuLyoqXG4gKiBTZXJpYWxpemUgYW4gSFRNTCBhdHRyaWJ1dGUgdG8gYSBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gaXMgbm90XG4gKiBleHBlY3RlZCB0byBiZSB1c2VkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHRocm91Z2ggYSBwcmVjb21waWxlXG4gKiBKU1ggdHJhbnNmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24ganN4QXR0cihuYW1lLCB2YWx1ZSkge1xuXHRpZiAob3B0aW9ucy5hdHRyKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gb3B0aW9ucy5hdHRyKG5hbWUsIHZhbHVlKTtcblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRpZiAobmFtZSA9PT0gJ3JlZicgfHwgbmFtZSA9PT0gJ2tleScpIHJldHVybiAnJztcblx0aWYgKG5hbWUgPT09ICdzdHlsZScgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdGxldCBzdHIgPSAnJztcblx0XHRmb3IgKGxldCBwcm9wIGluIHZhbHVlKSB7XG5cdFx0XHRsZXQgdmFsID0gdmFsdWVbcHJvcF07XG5cdFx0XHRpZiAodmFsICE9IG51bGwgJiYgdmFsICE9PSAnJykge1xuXHRcdFx0XHRjb25zdCBuYW1lID1cblx0XHRcdFx0XHRwcm9wWzBdID09ICctJ1xuXHRcdFx0XHRcdFx0PyBwcm9wXG5cdFx0XHRcdFx0XHQ6IEpTX1RPX0NTU1twcm9wXSB8fFxuXHRcdFx0XHRcdFx0XHQoSlNfVE9fQ1NTW3Byb3BdID0gcHJvcC5yZXBsYWNlKENTU19SRUdFWCwgJy0kJicpLnRvTG93ZXJDYXNlKCkpO1xuXG5cdFx0XHRcdGxldCBzdWZmaXggPSAnOyc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0XHRcdC8vIEV4Y2x1ZGUgY3VzdG9tLWF0dHJpYnV0ZXNcblx0XHRcdFx0XHQhbmFtZS5zdGFydHNXaXRoKCctLScpICYmXG5cdFx0XHRcdFx0IUlTX05PTl9ESU1FTlNJT05BTC50ZXN0KG5hbWUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN1ZmZpeCA9ICdweDsnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0ciA9IHN0ciArIG5hbWUgKyAnOicgKyB2YWwgKyBzdWZmaXg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lICsgJz1cIicgKyBzdHIgKyAnXCInO1xuXHR9XG5cblx0aWYgKFxuXHRcdHZhbHVlID09IG51bGwgfHxcblx0XHR2YWx1ZSA9PT0gZmFsc2UgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG5cdCkge1xuXHRcdHJldHVybiAnJztcblx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIG5hbWU7XG5cblx0cmV0dXJuIG5hbWUgKyAnPVwiJyArIGVuY29kZUVudGl0aWVzKHZhbHVlKSArICdcIic7XG59XG5cbi8qKlxuICogRXNjYXBlIGEgZHluYW1pYyBjaGlsZCBwYXNzZWQgdG8gYGpzeFRlbXBsYXRlYC4gVGhpcyBmdW5jdGlvblxuICogaXMgbm90IGV4cGVjdGVkIHRvIGJlIHVzZWQgZGlyZWN0bHksIGJ1dCByYXRoZXIgdGhyb3VnaCBhXG4gKiBwcmVjb21waWxlIEpTWCB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsIHwgVk5vZGUgfCBBcnJheTxzdHJpbmcgfCBudWxsIHwgVk5vZGU+fVxuICovXG5mdW5jdGlvbiBqc3hFc2NhcGUodmFsdWUpIHtcblx0aWYgKFxuXHRcdHZhbHVlID09IG51bGwgfHxcblx0XHR0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fFxuXHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuXHQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0Ly8gQ2hlY2sgZm9yIFZOb2RlXG5cdFx0aWYgKHZhbHVlLmNvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcblxuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YWx1ZVtpXSA9IGpzeEVzY2FwZSh2YWx1ZVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVuY29kZUVudGl0aWVzKCcnICsgdmFsdWUpO1xufVxuXG5leHBvcnQge1xuXHRjcmVhdGVWTm9kZSBhcyBqc3gsXG5cdGNyZWF0ZVZOb2RlIGFzIGpzeHMsXG5cdGNyZWF0ZVZOb2RlIGFzIGpzeERFVixcblx0RnJhZ21lbnQsXG5cdC8vIHByZWNvbXBpbGVkIEpTWCB0cmFuc2Zvcm1cblx0anN4VGVtcGxhdGUsXG5cdGpzeEF0dHIsXG5cdGpzeEVzY2FwZVxufTtcbiIsICIvKipcbiAqIEBtb2R1bGUgdWlcbiAqL1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWR1Y2VyLCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQge1xuICAgIEFQUF9DT05URVhULFxuICAgIENPTVBPTkVOVF9DT05URVhULFxuICAgIENVUlJFTlRfRklMRV9DT05URVhULFxuICAgIERBVEFDT1JFX0NPTlRFWFQsXG4gICAgRXJyb3JNZXNzYWdlLFxuICAgIE1hcmtkb3duLFxufSBmcm9tIFwiLi4vLi4vdWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBnZXRGaWxlVGl0bGUsIGxpbmVSYW5nZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG5pbXBvcnQgXCIuL2VtYmVkLmNzc1wiO1xuXG4vKiogUmVuZGVycyBhbiBlbWJlZCBpbiB0aGUgY2Fub25pY2FsIE9ic2lkaWFuIHN0eWxlLlxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbWJlZCh7XG4gICAgbGluayxcbiAgICBpbmxpbmUsXG4gICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxufToge1xuICAgIC8qKiBUaGUgbGluayB0aGF0IGlzIGJlaW5nIGVtYmVkZGVkLiAqL1xuICAgIGxpbms6IExpbms7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGVtYmVkIHNob3VsZCBiZSBzaG93biBpbmxpbmUgd2l0aCBsZXNzIHBhZGRpbmcuICovXG4gICAgaW5saW5lOiBib29sZWFuO1xuICAgIC8qKiBUaGUgcGF0aCB3aGljaCB0aGUgbGluayB3aWxsIGJlIHJlc29sdmVkIHJlbGF0aXZlIHRvLiAqL1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgYXBwID0gdXNlQ29udGV4dChBUFBfQ09OVEVYVCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdXNlQ29udGV4dChDT01QT05FTlRfQ09OVEVYVCk7XG4gICAgY29uc3QgY3VycmVudEZpbGUgPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gbWF5YmVTb3VyY2VQYXRoID8/IGN1cnJlbnRGaWxlID8/IFwiXCI7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICBjb25zdCBsaW5rZWRGaWxlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGluay5wYXRoLCBzb3VyY2VQYXRoKSxcbiAgICAgICAgW2xpbmsucGF0aCwgc291cmNlUGF0aF1cbiAgICApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjb250YWluZXIuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWxpbmtlZEZpbGUpIHJldHVybjtcblxuICAgICAgICBjb250YWluZXIuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0b3IgPSBhcHAuZW1iZWRSZWdpc3RyeS5nZXRFbWJlZENyZWF0b3IobGlua2VkRmlsZSk7XG4gICAgICAgIGxldCBlbWJlZENvbXBvbmVudCA9IG5ldyBjcmVhdG9yKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmt0ZXh0OiBsaW5rLnBhdGgsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICAgICAgICBzaG93SW5saW5lOiBpbmxpbmUsXG4gICAgICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsOiBjb250YWluZXIuY3VycmVudCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5rZWRGaWxlLFxuICAgICAgICAgICAgbGluay5zdWJwYXRoXG4gICAgICAgICk7XG5cbiAgICAgICAgY29tcG9uZW50LmFkZENoaWxkKGVtYmVkQ29tcG9uZW50KTtcbiAgICAgICAgZW1iZWRDb21wb25lbnQubG9hZEZpbGUobGlua2VkRmlsZSk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IGNvbXBvbmVudC5yZW1vdmVDaGlsZChlbWJlZENvbXBvbmVudCk7XG4gICAgfSwgW2NvbnRhaW5lci5jdXJyZW50LCBsaW5rZWRGaWxlLCBsaW5rLnN1YnBhdGhdKTtcblxuICAgIGlmICghbGlua2VkRmlsZSkge1xuICAgICAgICByZXR1cm4gPEVycm9yTWVzc2FnZSBtZXNzYWdlPXtgQ291bGQgbm90IGZpbmQgYSBwYWdlIGF0IGxpbmtlZCBsb2NhdGlvbjogJHtsaW5rLnBhdGh9YH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGMtZW1iZWRcIiByZWY9e2NvbnRhaW5lcn0+PC9kaXY+O1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBlbWJlZCBvZiBhbiBhcmJpdHJhcnkgc3BhbiBvZiBsaW5lcyBpbiBhIE1hcmtkb3duIGZpbGUuIE9wZXJhdGVzIGJ5IGFzeW5jaHJvbm91c2x5IGxvYWRpbmcgdGhlIGZpbGUgYW5kIHB1bGxpbmdcbiAqIG91dCB0aGUgZ2l2ZW4gW3N0YXJ0LCBlbmQpIGxpbmUgc3Bhbi5cbiAqXG4gKiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGZpbGUgb24gZGlzayB0byBiZSBkaWZmZXJlbnQgdGhhbiBpdCB3YXMgd2hlbiB5b3UgZmlyc3QgbG9hZGVkIHRoZSBbc3RhcnQsIGVuZCkgbGluZSBzcGFuXG4gKiAtIGdlbmVyYWxseSwgZGF0YWNvcmUgd2lsbCBhc3luY2hyb25vdXNseSByZWxvYWQgdGhlc2UgZmlsZXMgaW4gdGhlIGJhY2tncm91bmQgYW5kIGZpeCBpdCdzIGluZGV4LCBidXQgeW91IG1heSBoYXZlIHNvbWVcbiAqIHN0cmFuZ2UgYXJ0aWZhY3RzIG90aGVyd2lzZS5cbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gTGluZVNwYW5FbWJlZCh7XG4gICAgcGF0aCxcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgZXhwbGFpbixcbiAgICBzaG93RXhwbGFpbiA9IHRydWUsXG59OiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgZW5kOiBudW1iZXI7XG4gICAgZXhwbGFpbj86IHN0cmluZztcbiAgICBzaG93RXhwbGFpbj86IGJvb2xlYW47XG59KSB7XG4gICAgY29uc3QgY29udGVudCA9IHVzZUxpbmVTcGFuKHBhdGgsIHN0YXJ0LCBlbmQpO1xuICAgIGNvbnN0IGV4cGxhaW5lciA9IGV4cGxhaW4gPz8gYCR7Z2V0RmlsZVRpdGxlKHBhdGgpfSAoJHtzdGFydH0gLSAke2VuZH0pYDtcblxuICAgIC8vIFRvIGFsbG93IGZvciB0aGUgZXhwbGFpbmVyIHRvIGJlIGNsaWNrZWQgb24gdG8gbmF2aWdhdGUgdG8gdGhlIGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbnN0IHdvcmtzcGFjZSA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpPy53b3Jrc3BhY2U7XG4gICAgY29uc3Qgb25FeHBsYWluQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB3b3Jrc3BhY2U/Lm9wZW5MaW5rVGV4dChwYXRoLCBwYXRoLCBldmVudC5zaGlmdEtleSksXG4gICAgICAgIFtwYXRoXVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGNvbnRlbnQudHlwZSkge1xuICAgICAgICBjYXNlIFwibG9hZGluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT17YFJlYWRpbmcgJHtwYXRofSAoJHtzdGFydH0gLSAke2VuZH0pYH0gLz47XG4gICAgICAgIGNhc2UgXCJmaWxlLW5vdC1mb3VuZFwiOlxuICAgICAgICAgICAgcmV0dXJuIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT17YENvdWxkIG5vdCBmaW5kIGEgZmlsZSBhdCBwYXRoOiAke2NvbnRlbnQucGF0aH1gfSAvPjtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgICByZXR1cm4gPEVycm9yTWVzc2FnZSBtZXNzYWdlPXtjb250ZW50Lm1lc3NhZ2V9IC8+O1xuICAgICAgICBjYXNlIFwibG9hZGVkXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtc3Bhbi1lbWJlZFwiPlxuICAgICAgICAgICAgICAgICAgICB7c2hvd0V4cGxhaW4gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZW1iZWQtc291cmNlXCIgb25DbGljaz17b25FeHBsYWluQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBsYWluZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxNYXJrZG93biBjb250ZW50PXtjb250ZW50LmNvbnRlbnR9IGlubGluZT17ZmFsc2V9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIFN0YXRlIHRyYWNraW5nIGZvciBsb2FkaW5nIGEgbGluZSBzcGFuIGFzeW5jaHJvbm91c2x5LiAqL1xuZXhwb3J0IHR5cGUgTGluZVNwYW5Db250ZW50ID1cbiAgICB8IHsgdHlwZTogXCJsb2FkaW5nXCIgfVxuICAgIHwgeyB0eXBlOiBcImZpbGUtbm90LWZvdW5kXCI7IHBhdGg6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6IFwiZXJyb3JcIjsgbWVzc2FnZTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogXCJsb2FkZWRcIjsgY29udGVudDogc3RyaW5nIH07XG5cbi8qKiBVdGlsaXR5IGhvb2sgd2hpY2ggbG9hZHMgcGF0aFtzdGFydC4uZW5kKSBhcyBsb25nIGFzIHRoZSB0YXJnZXQgZmlsZSBleGlzdHMuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5lU3BhbihwYXRoOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogTGluZVNwYW5Db250ZW50IHtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBkYXRhY29yZSA9IHVzZUNvbnRleHQoREFUQUNPUkVfQ09OVEVYVCk7XG5cbiAgICBjb25zdCBbc3RhdGUsIHVwZGF0ZV0gPSB1c2VSZWR1Y2VyPExpbmVTcGFuQ29udGVudCwgTGluZVNwYW5Db250ZW50PihcbiAgICAgICAgKHN0YXRlLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gSWdub3JlIGFuIGVycm9yIHVwZGF0ZSB0aGF0IHdvdWxkIG92ZXJyaWRlIGEgdmFsaWQgY3VycmVudCBzdGF0ZTsgb3RoZXJ3aXNlLCB1cGRhdGUgdG8gdGhlIG5ldyBzdGF0ZS5cbiAgICAgICAgICAgIGlmIChzdGF0ZS50eXBlID09IFwibG9hZGVkXCIgJiYgZXZlbnQudHlwZSAhPT0gXCJsb2FkZWRcIikgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogXCJsb2FkaW5nXCIgfVxuICAgICk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBjdXJyZW50IHBhdGggdG8gc2VlIGlmIGl0IHBvaW50cyB0byBhIHZhbGlkIGZpbGUuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKTtcbiAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdXBkYXRlKHsgdHlwZTogXCJmaWxlLW5vdC1mb3VuZFwiLCBwYXRoOiBwYXRoIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IHRvIGxvYWQgdGhlIGZpbGUgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgIGRhdGFjb3JlXG4gICAgICAgICAgICAucmVhZChmaWxlKVxuICAgICAgICAgICAgLnRoZW4oKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoeyB0eXBlOiBcImxvYWRlZFwiLCBjb250ZW50OiBsaW5lUmFuZ2UoY29udGVudCwgc3RhcnQsIGVuZCkgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh7IHR5cGU6IFwiZXJyb3JcIiwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH0sIFtwYXRoLCBzdGFydCwgZW5kXSk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG59XG4iLCAiaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBTaW1wbGVFcnJvckJvdW5kYXJ5LCBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgRGF0YWNvcmVDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IEFwcCwgTWFya2Rvd25SZW5kZXJDaGlsZCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgRGF0YWNvcmVMb2NhbEFwaSB9IGZyb20gXCJhcGkvbG9jYWwtYXBpXCI7XG5pbXBvcnQgeyBoLCByZW5kZXIsIEZyYWdtZW50LCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVubW91bnRDb21wb25lbnRBdE5vZGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UsIGFzeW5jRXZhbEluQ29udGV4dCwgdHJhbnNwaWxlIH0gZnJvbSBcInV0aWxzL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IExvYWRpbmdCb3VuZGFyeSwgU2NyaXB0Q29udGFpbmVyIH0gZnJvbSBcIi4vbG9hZGluZy1ib3VuZGFyeVwiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcblxuLyoqXG4gKiBSZW5kZXJzIGEgc2NyaXB0IGJ5IGV4ZWN1dGluZyBpdCBhbmQgaGFuZGluZyBpdCB0aGUgYXBwcm9wcmlhdGUgUmVhY3QgY29udGV4dCB0byBleGVjdXRlXG4gKiBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWNvcmVKU1JlbmRlcmVyIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgcHJpdmF0ZSBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGFwaTogRGF0YWNvcmVMb2NhbEFwaSxcbiAgICAgICAgcHVibGljIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgIHB1YmxpYyBwYXRoOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBzY3JpcHQ6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhbmd1YWdlOiBTY3JpcHRMYW5ndWFnZVxuICAgICkge1xuICAgICAgICBzdXBlcihjb250YWluZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgc2NyaXB0IHRvIHByb2R1Y2UgZWl0aGVyIGEgcmVuZGVyYWJsZSBKU1ggb2JqZWN0IG9yIGEgZnVuY3Rpb24uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcmltaXRpdmVTY3JpcHQgPSB0cmFuc3BpbGUodGhpcy5zY3JpcHQsIHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGFzeW5jRXZhbEluQ29udGV4dChwcmltaXRpdmVTY3JpcHQsIHtcbiAgICAgICAgICAgICAgICAgICAgZGM6IHRoaXMuYXBpLFxuICAgICAgICAgICAgICAgICAgICBoOiBoLFxuICAgICAgICAgICAgICAgICAgICBGcmFnbWVudDogRnJhZ21lbnQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgPERhdGFjb3JlQ29udGV4dFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgIGFwcD17dGhpcy5hcGkuYXBwfVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e3RoaXN9XG4gICAgICAgICAgICAgICAgICAgIGRhdGFjb3JlPXt0aGlzLmFwaS5jb3JlfVxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncz17dGhpcy5hcGkuY29yZS5zZXR0aW5nc31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDVVJSRU5UX0ZJTEVfQ09OVEVYVC5Qcm92aWRlciB2YWx1ZT17dGhpcy5wYXRofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTaW1wbGVFcnJvckJvdW5kYXJ5IG1lc3NhZ2U9XCJUaGUgZGF0YWNvcmUgc2NyaXB0IGZhaWxlZCB0byBleGVjdXRlLlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nQm91bmRhcnkgZGF0YWNvcmU9e3RoaXMuYXBpLmNvcmV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2NyaXB0Q29udGFpbmVyIGV4ZWN1dG9yPXtyZW5kZXJlcn0gc291cmNlUGF0aD17dGhpcy5wYXRofSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTG9hZGluZ0JvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TaW1wbGVFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICA8L0NVUlJFTlRfRklMRV9DT05URVhULlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvRGF0YWNvcmVDb250ZXh0UHJvdmlkZXI+LFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIkRhdGFjb3JlIGZhaWxlZCB0byByZW5kZXIgdGhlIGNvZGUgYmxvY2suXCIgZXJyb3I9e1wiXCIgKyBleH0gLz4sXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZCkgdW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKiogQSB0cml2aWFsIHdyYXBwZXIgd2hpY2ggYWxsb3dzIGEgcmVhY3QgY29tcG9uZW50IHRvIGxpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIGBNYXJrZG93blJlbmRlckNoaWxkYC4gKi9cbmV4cG9ydCBjbGFzcyBSZWFjdFJlbmRlcmVyIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgYXBwOiBBcHAsXG4gICAgICAgIHB1YmxpYyBkYXRhY29yZTogRGF0YWNvcmUsXG4gICAgICAgIHB1YmxpYyBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBwdWJsaWMgc291cmNlUGF0aDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogVk5vZGVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25sb2FkKCk6IHZvaWQge1xuICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICA8RGF0YWNvcmVDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgICAgICAgICBhcHA9e3RoaXMuYXBwfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudD17dGhpc31cbiAgICAgICAgICAgICAgICBkYXRhY29yZT17dGhpcy5kYXRhY29yZX1cbiAgICAgICAgICAgICAgICBzZXR0aW5ncz17dGhpcy5kYXRhY29yZS5zZXR0aW5nc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q1VSUkVOVF9GSUxFX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e3RoaXMuc291cmNlUGF0aH0+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nQm91bmRhcnkgZGF0YWNvcmU9e3RoaXMuZGF0YWNvcmV9Pnt0aGlzLmVsZW1lbnR9PC9Mb2FkaW5nQm91bmRhcnk+XG4gICAgICAgICAgICAgICAgPC9DVVJSRU5UX0ZJTEVfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgICAgIDwvRGF0YWNvcmVDb250ZXh0UHJvdmlkZXI+LFxuICAgICAgICAgICAgdGhpcy5jb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIHVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5jb250YWluZXIpO1xuICAgIH1cbn1cbiIsICIvLyEgVXRpbGl0aWVzIGZvciBydW5uaW5nIGphdmFzY3JpcHQuXG5cbmltcG9ydCB7IHRyYW5zZm9ybSB9IGZyb20gXCJzdWNyYXNlXCI7XG5cbmV4cG9ydCB0eXBlIFNjcmlwdExhbmd1YWdlID0gXCJqc1wiIHwgXCJ0c1wiIHwgXCJqc3hcIiB8IFwidHN4XCI7XG5cbi8qKiBDb252ZXJ0cyBhIHJhdyBzY3JpcHQgaW4gdGhlIGdpdmVuIGxhbmd1YWdlIHRvIHBsYWluIGphdmFzY3JpcHQuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcGlsZShzY3JpcHQ6IHN0cmluZywgbGFuZ3VhZ2U6IFNjcmlwdExhbmd1YWdlKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGxhbmd1YWdlKSB7XG4gICAgICAgIGNhc2UgXCJqc1wiOlxuICAgICAgICAgICAgcmV0dXJuIHNjcmlwdDtcbiAgICAgICAgY2FzZSBcImpzeFwiOlxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybShzY3JpcHQsIHsgdHJhbnNmb3JtczogW1wianN4XCJdLCBqc3hQcmFnbWE6IFwiaFwiLCBqc3hGcmFnbWVudFByYWdtYTogXCJGcmFnbWVudFwiIH0pLmNvZGU7XG4gICAgICAgIGNhc2UgXCJ0c1wiOlxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybShzY3JpcHQsIHsgdHJhbnNmb3JtczogW1widHlwZXNjcmlwdFwiXSB9KS5jb2RlO1xuICAgICAgICBjYXNlIFwidHN4XCI6XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtKHNjcmlwdCwge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybXM6IFtcInR5cGVzY3JpcHRcIiwgXCJqc3hcIl0sXG4gICAgICAgICAgICAgICAganN4UHJhZ21hOiBcImhcIixcbiAgICAgICAgICAgICAgICBqc3hGcmFnbWVudFByYWdtYTogXCJGcmFnbWVudFwiLFxuICAgICAgICAgICAgfSkuY29kZTtcbiAgICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBzY3JpcHQgd2hlcmUgJ3RoaXMnIGZvciB0aGUgc2NyaXB0IGlzIHNldCB0byB0aGUgZ2l2ZW4gY29udGV4dC4gQWxsb3dzIHlvdSB0byBkZWZpbmUgZ2xvYmFsIHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbkNvbnRleHQoc2NyaXB0OiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pik6IGFueSB7XG4gICAgY29uc3QgcGFpcnMgPSBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpO1xuICAgIGNvbnN0IGtleXMgPSBwYWlycy5tYXAoKFtrZXksIF9dKSA9PiBrZXkpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHBhaXJzLm1hcCgoW18sIHZhbHVlXSkgPT4gdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbiguLi5rZXlzLCBzY3JpcHQpKC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBzY3JpcHQgcG9zc2libHkgYXN5bmNocm9ub3VzbHksIGlmIHRoZSBzY3JpcHQgY29udGFpbnMgYGFzeW5jL2F3YWl0YCBibG9ja3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0V2YWxJbkNvbnRleHQoc2NyaXB0OiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHNjcmlwdC5pbmNsdWRlcyhcImF3YWl0XCIpKSB7XG4gICAgICAgIHJldHVybiBldmFsSW5Db250ZXh0KFwicmV0dXJuIChhc3luYyAoKSA9PiB7IFwiICsgc2NyaXB0ICsgXCIgfSkoKVwiLCB2YXJpYWJsZXMpIGFzIFByb21pc2U8YW55PjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGV2YWxJbkNvbnRleHQoc2NyaXB0LCB2YXJpYWJsZXMpKTtcbiAgICB9XG59XG4iLCAiLyoqIEBtb2R1bGUgdWkgKi9cbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgSW5kZXhRdWVyeSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdCB9IGZyb20gXCJpbmRleC9kYXRhc3RvcmVcIjtcbmltcG9ydCB7IExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcblxuLyoqIEhvb2sgdGhhdCB1cGRhdGVzIHRoZSB2aWV3IHdoZW5ldmVyIHRoZSByZXZpc2lvbiB1cGRhdGVzLCByZXR1cm5pbmcgdGhlIG5ld2VzdCByZXZpc2lvbi5cbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSW5kZXhVcGRhdGVzKGRhdGFjb3JlOiBEYXRhY29yZSwgc2V0dGluZ3M/OiB7IGRlYm91bmNlPzogbnVtYmVyIH0pOiBudW1iZXIge1xuICAgIGNvbnN0IFtyZXZpc2lvbiwgc2V0UmV2aXNpb25dID0gdXNlU3RhdGUoZGF0YWNvcmUuZGF0YXN0b3JlLnJldmlzaW9uKTtcbiAgICBjb25zdCBkZWJvdW5jZWRSZXZpc2lvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGluZ3M/LmRlYm91bmNlICYmIHNldHRpbmdzLmRlYm91bmNlID09IDApIHJldHVybiBzZXRSZXZpc2lvbjtcbiAgICAgICAgZWxzZSByZXR1cm4gZGVib3VuY2Uoc2V0UmV2aXNpb24sIHNldHRpbmdzPy5kZWJvdW5jZSA/PyA1MDApO1xuICAgIH0sIFtzZXRSZXZpc2lvbiwgc2V0dGluZ3M/LmRlYm91bmNlXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCByZWYgPSBkYXRhY29yZS5vbihcInVwZGF0ZVwiLCBkZWJvdW5jZWRSZXZpc2lvbik7XG4gICAgICAgIHJldHVybiAoKSA9PiBkYXRhY29yZS5vZmZyZWYocmVmKTtcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gcmV2aXNpb247XG59XG5cbi8qKiBBIGhvb2sgd2hpY2ggdXBkYXRlcyB3aGVuZXZlciBmaWxlIG1ldGFkYXRhIGZvciBhIHNwZWNpZmljIGZpbGUgdXBkYXRlcy5cbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRmlsZU1ldGFkYXRhKFxuICAgIGRhdGFjb3JlOiBEYXRhY29yZSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgc2V0dGluZ3M/OiB7IGRlYm91bmNlPzogbnVtYmVyIH1cbik6IEluZGV4YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaW5kZXhSZXZpc2lvbiA9IHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZSwgc2V0dGluZ3MpO1xuXG4gICAgLy8gVE9ETzogSSB0aGluayBsb2FkIHJldHVybnMgY29uc2lzdGVudCBvYmplY3RzIHNvIGl0IHNob3VsZCBiZSBva2F5LlxuICAgIHJldHVybiB1c2VNZW1vKCgpID0+IGRhdGFjb3JlLmRhdGFzdG9yZS5sb2FkKHBhdGgpLCBbaW5kZXhSZXZpc2lvbiwgcGF0aF0pO1xufVxuXG4vKiogU2V0dGluZ3Mgd2hpY2ggY29udHJvbCBob3cgYXV0b21hdGljIHF1ZXJ5IHJlbG9hZGluZyBzaG91bGQgd29yay5cbiAqIEBncm91cCBDb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VRdWVyeVNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBJZiBwcmVzZW50LCBkZWJvdW5jZSByZXBlYXRlZCBxdWVyeSB1cGRhdGVzIHNvIHRoYXQgYW4gdXBkYXRlIG9ubHkgb2NjdXJzIGV2ZXJ5IFxcPGRlYm91bmNlXFw+IG1pbGxpc2Vjb25kcy4gVGhpc1xuICAgICAqIGRlZmF1bHRzIHRvIHRoZSBvdmVyYWxsIGRlZmF1bHQgZGVib3VuY2Ugc2V0dGluZ3MuXG4gICAgICovXG4gICAgZGVib3VuY2U/OiBudW1iZXI7XG59XG5cbi8qKiBQZXJmb3JtIGEgbGl2ZSwgc3luY2hyb25vdXMgcXVlcnkgd2hpY2ggdXBkYXRlcyBpdHMgcmVzdWx0cyB3aGVuZXZlciB0aGUgYmFja2luZyBxdWVyeSB3b3VsZCBjaGFuZ2UuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlVc2VGdWxsUXVlcnkoXG4gICAgZGF0YWNvcmU6IERhdGFjb3JlLFxuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5LFxuICAgIHNldHRpbmdzPzogVXNlUXVlcnlTZXR0aW5nc1xuKTogUmVzdWx0PFNlYXJjaFJlc3VsdDxJbmRleGFibGU+LCBzdHJpbmc+IHtcbiAgICAvLyBUcmFjayBpbmRleCB1cGRhdGVzIHdpdGggY3VzdG9taXphYmxlIGRlYm91bmNpbmcuXG4gICAgY29uc3QgaW5kZXhSZXZpc2lvbiA9IHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZSwgc2V0dGluZ3MpO1xuXG4gICAgLy8gV2UgXCJpbnRlcm5cIiB0aGUgcXVlcnksIG1lYW5pbmcgd2UgcmV1c2UgdGhlIG9sZGVzdCB2ZXJzaW9uIGlmIGl0IGlzIHNlbWFudGljYWxseSBlcXVhbCBidXQganVzdCBhIGRpZmZlcmVudCBvYmplY3QuXG4gICAgY29uc3QgaW50ZXJuZWRRdWVyeSA9IHVzZUludGVybmluZyhxdWVyeSwgTGl0ZXJhbHMuZXF1YWxzKTtcbiAgICAvLyBJbnRlcm4gdGhlIG91dHB1dCBhcyB3ZWxsIHNvIHJlYWN0IGRpZmZpbmcgXCJqdXN0IHdvcmtzXCIgd2l0aCB0aGUgcmVzdWx0IG9mIHVzZVF1ZXJ5LlxuICAgIGNvbnN0IGludGVybmVkUmVzdWx0ID0gdXNlUmVmPFJlc3VsdDxTZWFyY2hSZXN1bHQ8SW5kZXhhYmxlPiwgc3RyaW5nPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIC8vIE9uIGV2ZXJ5IGluZGV4IHJldmlzaW9uIHVwZGF0ZSwgcmUtcnVuIHRoZSBxdWVyeSBhbmQgY2hlY2sgaWYgaXQgcHJvZHVjZWQgbWVhbmluZ2Z1bGx5IG5ldyB2YWx1ZXMuXG4gICAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBkYXRhY29yZS5kYXRhc3RvcmUuc2VhcmNoKHF1ZXJ5KTtcblxuICAgICAgICAvLyBTZXQgZmFpbHVyZSBpZiB0aGUgbmV3IHJlcXVlc3QgaXMgYSBmYWlsdXJlLlxuICAgICAgICBpZiAoIW5ld1Jlc3VsdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID0gUmVzdWx0LmZhaWx1cmUobmV3UmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY3VycmVudCBpbnRlcm5lZCBzdGF0ZSwgdXBkYXRlIGl0IGFuZCByZXR1cm4uXG4gICAgICAgIGlmIChpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGludGVybmVkUmVzdWx0LmN1cnJlbnQgPSBSZXN1bHQuc3VjY2VzcyhuZXdSZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmVkUmVzdWx0LmN1cnJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgbmV3IHJlcXVlc3QgaXMgaXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIG9sZCByZXN1bHQgaXMgZGVmaW5lZC4gSWYgdGhlIG9sZCByZXN1bHQgd2FzIGFuIGVycm9yLCB1cGRhdGUgaXQuXG4gICAgICAgIGNvbnN0IG9sZFJlc3VsdCA9IGludGVybmVkUmVzdWx0LmN1cnJlbnQ7XG4gICAgICAgIGlmICghb2xkUmVzdWx0LnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIGludGVybmVkUmVzdWx0LmN1cnJlbnQgPSBSZXN1bHQuc3VjY2VzcyhuZXdSZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmVkUmVzdWx0LmN1cnJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCb3RoIGFyZSBzdWNjZXNzZnVsLCBjaGVjayBpZiB0aGV5IGFyZSBkaWZmZXJlbnQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG9sZFJlc3VsdC52YWx1ZS5yZXZpc2lvbiAhPSBuZXdSZXN1bHQudmFsdWUucmV2aXNpb24gfHxcbiAgICAgICAgICAgICFzYW1lT2JqZWN0cyhvbGRSZXN1bHQudmFsdWUucmVzdWx0cywgbmV3UmVzdWx0LnZhbHVlLnJlc3VsdHMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5lZFJlc3VsdC5jdXJyZW50ID0gUmVzdWx0LnN1Y2Nlc3MobmV3UmVzdWx0LnZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYW1lIHJldmlzaW9uIGFuZCBzYW1lIG9iamVjdHMsIHRoaXMgaXMgdGhlIHNhbWUgcXVlcnkgcmVzdWx0LCBzbyByZXR1cm4gdGhlIG9sZCBvYmplY3QuXG4gICAgICAgIHJldHVybiBpbnRlcm5lZFJlc3VsdC5jdXJyZW50O1xuICAgIH0sIFtpbnRlcm5lZFF1ZXJ5LCBpbmRleFJldmlzaW9uXSk7XG59XG5cbi8qKiBQZXJmb3JtIGEgbGl2ZSwgc3luY2hyb25vdXMgcXVlcnkgd2hpY2ggdXBkYXRlcyBpdHMgcmVzdWx0cyB3aGVuZXZlciB0aGUgYmFja2luZyBxdWVyeSB3b3VsZCBjaGFuZ2UuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGdWxsUXVlcnkoXG4gICAgZGF0YWNvcmU6IERhdGFjb3JlLFxuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5LFxuICAgIHNldHRpbmdzPzogVXNlUXVlcnlTZXR0aW5nc1xuKTogU2VhcmNoUmVzdWx0PEluZGV4YWJsZT4ge1xuICAgIHJldHVybiB0cnlVc2VGdWxsUXVlcnkoZGF0YWNvcmUsIHF1ZXJ5LCBzZXR0aW5ncykub3JFbHNlVGhyb3coKGUpID0+IFwiRmFpbGVkIHRvIHNlYXJjaDogXCIgKyBlKTtcbn1cblxuLyoqIFNpbXBsaWVyIHZlcnNpb24gb2YgdXNlRnVsbFF1ZXJ5IHdoaWNoIGp1c3QgZGlyZWN0bHkgcmV0dXJucyByZXN1bHRzLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5VXNlUXVlcnkoXG4gICAgZGF0YWNvcmU6IERhdGFjb3JlLFxuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5LFxuICAgIHNldHRpbmdzPzogVXNlUXVlcnlTZXR0aW5nc1xuKTogUmVzdWx0PEluZGV4YWJsZVtdLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdHJ5VXNlRnVsbFF1ZXJ5KGRhdGFjb3JlLCBxdWVyeSwgc2V0dGluZ3MpLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucmVzdWx0cyk7XG59XG5cbi8qKiBTaW1wbGllciB2ZXJzaW9uIG9mIHVzZUZ1bGxRdWVyeSB3aGljaCBqdXN0IGRpcmVjdGx5IHJldHVybnMgcmVzdWx0cy5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5KGRhdGFjb3JlOiBEYXRhY29yZSwgcXVlcnk6IEluZGV4UXVlcnksIHNldHRpbmdzPzogVXNlUXVlcnlTZXR0aW5ncyk6IEluZGV4YWJsZVtdIHtcbiAgICByZXR1cm4gdXNlRnVsbFF1ZXJ5KGRhdGFjb3JlLCBxdWVyeSwgc2V0dGluZ3MpLnJlc3VsdHM7XG59XG5cbi8qKiBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc2V0cyBvZiBvYmplY3RzIGFyZSB0aGUgc2FtZS4gT25seSB1c2VzIHJldmlzaW9uIGNvbXBhcmlzb24gZm9yIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gc2FtZU9iamVjdHMob2xkOiBJbmRleGFibGVbXSwgaW5jb21pbmc6IEluZGV4YWJsZVtdKSB7XG4gICAgaWYgKG9sZC5sZW5ndGggIT0gaW5jb21pbmcubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBvbGRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBpbmRleGFibGUgb2Ygb2xkKSB7XG4gICAgICAgIG9sZHNbaW5kZXhhYmxlLiRpZF0gPSBpbmRleGFibGUuJHJldmlzaW9uITtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGluZGV4YWJsZSBvZiBpbmNvbWluZykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9sZHNbaW5kZXhhYmxlLiRpZF07XG4gICAgICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHZhbHVlICE9IGluZGV4YWJsZS4kcmV2aXNpb24pIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBcIkludGVybnNcIiB0aGUgaW5jb21pbmcgdmFsdWUsIHJldHVybmluZyB0aGUgb2xkZXN0IGVxdWFsIGluc3RhbmNlLiBUaGlzIGlzIGEgdHJpY2sgdG8gaW1wcm92ZSBSZWFjdCBkaWZmaW5nXG4gKiAgYmVoYXZpb3IsIGFzIHR3byBvYmplY3RzIHdoaWNoIGFyZSBlcXVhbHMgdmlhIGVxdWFsaXR5KGEsIGIpIHdpbGwgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UgYWZ0ZXIgYmVpbmdcbiAqICBpbnRlcm5lZC5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVybmluZzxUPih2YWx1ZTogVCwgZXF1YWxpdHk6IChhOiBULCBiOiBUKSA9PiBib29sZWFuKTogVCB7XG4gICAgY29uc3QgcmVmID0gdXNlUmVmPFQ+KCk7XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCAhZXF1YWxpdHkocmVmLmN1cnJlbnQsIHZhbHVlKSkge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiByZWYuY3VycmVudDtcbn1cblxuLyoqIFVzZSBhIHN0YWJsZSBjYWxsYmFjayB3aGljaCBoaWRlcyBtdXRhYmxlIHN0YXRlIGJlaGluZCBhIHN0YWJsZSByZWZlcmVuY2UuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGFibGVDYWxsYmFjazxUPihjYWxsYmFjazogVCwgZGVwczogYW55W10pOiBUIHtcbiAgICBjb25zdCByZWYgPSB1c2VSZWY8VD4oKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gY2FsbGJhY2s7XG4gICAgfSwgW2NhbGxiYWNrLCAuLi5kZXBzXSk7XG5cbiAgICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgICAgICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgKHJlZi5jdXJyZW50IGFzIGFueSkoLi4uYXJncyk7XG4gICAgICAgIH0sXG4gICAgICAgIFtyZWZdXG4gICAgKSBhcyBUO1xufVxuXG5jb25zdCBOT19PUF9VUERBVEUgPSAoeDogYW55KSA9PiB7fTtcblxuLyoqIFVzZSBzdGF0ZSB0aGF0IHdpbGwgZGVmYXVsdCB0byBhbiBleHRlcm5hbCBjb250cm9sbGVkIHZhbHVlIGlmIHNldDsgb3RoZXJ3aXNlLCB3aWxsIHRyYWNrIGFuIGludGVybmFsIHZhbHVlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29udHJvbGxlZFN0YXRlPFQ+KFxuICAgIGluaXRpYWxTdGF0ZTogVCxcbiAgICBvdmVycmlkZT86IFQsXG4gICAgdXBkYXRlPzogKHZhbHVlOiBUKSA9PiB2b2lkXG4pOiBbVCwgKHZhbHVlOiBUKSA9PiB2b2lkXSB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZShvdmVycmlkZSA/PyBpbml0aWFsU3RhdGUpO1xuICAgIGlmIChvdmVycmlkZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGF0ZSAhPSBvdmVycmlkZSkgc2V0U3RhdGUob3ZlcnJpZGUpO1xuXG4gICAgICAgIHJldHVybiBbb3ZlcnJpZGUsIHVwZGF0ZSA/PyBOT19PUF9VUERBVEVdO1xuICAgIH1cblxuICAgIGNvbnN0IHNldFN0YXRlV2l0aFVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAodmFsdWU6IFQpID0+IHtcbiAgICAgICAgICAgIHNldFN0YXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh1cGRhdGUpIHVwZGF0ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFtzZXRTdGF0ZSwgdXBkYXRlXVxuICAgICk7XG5cbiAgICByZXR1cm4gW3N0YXRlLCBzZXRTdGF0ZVdpdGhVcGRhdGVdO1xufVxuIiwgImltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBQcm9wc1dpdGhDaGlsZHJlbiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VJbmRleFVwZGF0ZXMgfSBmcm9tIFwiLi9ob29rc1wiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IFZOb2RlLCBjcmVhdGVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgTGl0IH0gZnJvbSBcIi4vbWFya2Rvd25cIjtcblxuaW1wb3J0IFwiLi9lcnJvcnMuY3NzXCI7XG5cbmZ1bmN0aW9uIExvYWRpbmdQcm9ncmVzcyh7IGRhdGFjb3JlIH06IHsgZGF0YWNvcmU6IERhdGFjb3JlIH0pIHtcbiAgICB1c2VJbmRleFVwZGF0ZXMoZGF0YWNvcmUsIHsgZGVib3VuY2U6IDI1MCB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxwPlxuICAgICAgICAgICAge2RhdGFjb3JlLmluaXRpYWxpemVyPy5pbml0aWFsaXplZCA/PyAwfSAvIHtkYXRhY29yZS5pbml0aWFsaXplcj8udGFyZ2V0VG90YWwgPz8gMH1cbiAgICAgICAgPC9wPlxuICAgICk7XG59XG5cbi8qKiBMb2FkaW5nIGJvdW5kYXJ5IHdoaWNoIHNob3dzIGEgbG9hZGluZyBzY3JlZW4gd2hpbGUgRGF0YWNvcmUgaXMgaW5pdGlhbGl6aW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvYWRpbmdCb3VuZGFyeSh7IGNoaWxkcmVuLCBkYXRhY29yZSB9OiBQcm9wc1dpdGhDaGlsZHJlbjx7IGRhdGFjb3JlOiBEYXRhY29yZSB9Pikge1xuICAgIGNvbnN0IFtpbml0aWFsaXplZCwgc2V0SW5pdGlhbGl6ZWRdID0gdXNlU3RhdGUoZGF0YWNvcmUuaW5pdGlhbGl6ZWQpO1xuXG4gICAgLy8gU3luY3MgdGhlIGJvdW5kYXJ5IHdpdGggZGF0YWNvcmUncyBpbml0aWFsaXphdGlvbiBzdGF0ZS5cbiAgICAvLyBUT0RPOiBBZGQgYW4gZXZlbnQgdG8gZGF0YWNvcmUgd2hpY2ggaW5kaWNhdGVzIHdoZW4gYSByZWluZGV4IGhhcHBlbnMgKGkuZS4sIGluaXRpYWxpemVkXG4gICAgLy8gcmV0dXJucyBiYWNrIHRvICdmYWxzZScpLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpbml0aWFsaXplZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHJlZiA9IGRhdGFjb3JlLm9uKFwiaW5pdGlhbGl6ZWRcIiwgKCkgPT4gc2V0SW5pdGlhbGl6ZWQodHJ1ZSkpO1xuICAgICAgICByZXR1cm4gKCkgPT4gZGF0YWNvcmUub2ZmcmVmKHJlZik7XG4gICAgfSwgW2luaXRpYWxpemVkLCBkYXRhY29yZV0pO1xuXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICAgIHJldHVybiA8PntjaGlsZHJlbn08Lz47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbG9hZGluZy1ib3VuZGFyeVwiPlxuICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJkYXRhY29yZS1sb2FkaW5nLXRpdGxlXCI+RGF0YWNvcmUgaXMgZ2V0dGluZyByZWFkeS4uLjwvaDQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1sb2FkaW5nLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPExvYWRpbmdQcm9ncmVzcyBkYXRhY29yZT17ZGF0YWNvcmV9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSB2YW5pbGxhIGphdmFzcmlwdCBmdW5jdGlvbiBsYXppbHkgb25lIHRpbWUuIE1haW5seSB1c2VmdWwgdG8gb25seSBydW4gYSBzY3JpcHRcbiAqIG9uY2UgdGhlIHBhcmVudCBsb2FkaW5nIGJvdW5kYXJ5IGlzIGFjdHVhbGx5IHJlYWR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gU2NyaXB0Q29udGFpbmVyKHtcbiAgICBleGVjdXRvcixcbiAgICBzb3VyY2VQYXRoLFxufToge1xuICAgIGV4ZWN1dG9yOiAoKSA9PiBQcm9taXNlPExpdGVyYWwgfCBWTm9kZSB8IEZ1bmN0aW9uPjtcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgW2VsZW1lbnQsIHNldEVsZW1lbnRdID0gdXNlU3RhdGU8SlNYLkVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldEVsZW1lbnQodW5kZWZpbmVkKTtcbiAgICAgICAgc2V0RXJyb3IodW5kZWZpbmVkKTtcblxuICAgICAgICBleGVjdXRvcigpXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiBzZXRFbGVtZW50KG1ha2VSZW5kZXJhYmxlRWxlbWVudChyZXN1bHQsIHNvdXJjZVBhdGgpKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHNldEVycm9yKGVycm9yKSk7XG4gICAgfSwgW2V4ZWN1dG9yXSk7XG5cbiAgICAvLyBQcm9wb2dhdGUgZXJyb3IgdXB3YXJkcy5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIDw+e2VsZW1lbnQgPz8gPEVycm9yTWVzc2FnZSBtZXNzYWdlPVwiPCBWaWV3IGlzIHJlbmRlcmluZyA+XCIgLz59PC8+O1xufVxuXG4vKiogTWFrZSBhIHJlbmRlcmFibGUgZWxlbWVudCBmcm9tIHRoZSByZXR1cm5lZCBvYmplY3Q7IGlmIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgbm90IHBvc3NpYmxlLCB0aHJvdyBhbiBleGNlcHRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVJlbmRlcmFibGVFbGVtZW50KG9iamVjdDogYW55LCBzb3VyY2VQYXRoOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvYmplY3QsIHt9KTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIChvYmplY3QgYXMgYW55W10pLm1hcCgoeCkgPT4gbWFrZVJlbmRlcmFibGVFbGVtZW50KHgsIHNvdXJjZVBhdGgpKVxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA8TGl0IHZhbHVlPXtvYmplY3R9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IC8+O1xuICAgIH1cbn1cbiIsICIvKipcbiAqIENvbGxlY3Rpb24gb2YgZGlyZWN0IEFQSS1mYWNpbmcgZWxlbWVudHMuIFRoaXMgZXNzZW50aWFsbHkgc2VydmVzIGFzIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdG8gaW50ZXJuYWwgdHlwZXMsIHNvIHRoYXQgdGhlIGludGVybmFsIHR5cGVzIGNhbiBiZVxuICogY2hhbmdlZCB3aXRob3V0IGJyZWFraW5nIHRoZSBBUEkuXG4gKlxuICogQG1vZHVsZSB1aVxuICovXG5cbmltcG9ydCB7IEhUTUxBdHRyaWJ1dGVzLCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW1wb3J0IFwiYXBpL3VpL2xheW91dC5jc3NcIjtcblxuLyoqIENyZWF0ZXMgYSB2ZXJ0aWNhbCBmbGV4Ym94IFwic3RhY2tcIiBvZiBlbGVtZW50cy5cbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gU3RhY2soXG4gICAgcHJvcHM6IEhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PiAmIHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBqdXN0aWZ5Pzogc3RyaW5nO1xuICAgICAgICBhbGlnbj86IHN0cmluZztcbiAgICAgICAgc3R5bGU/OiBzdHJpbmc7XG4gICAgfVxuKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGp1c3RpZnksIGFsaWduLCBzdHlsZSwgY2hpbGRyZW4sIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IGV4dHJhU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgbGV0IHN0eWxlID0gXCJcIjtcbiAgICAgICAgaWYgKGp1c3RpZnkpIHN0eWxlICs9IGBqdXN0aWZ5LWNvbnRlbnQ6ICR7anVzdGlmeX07YDtcbiAgICAgICAgaWYgKGFsaWduKSBzdHlsZSArPSBgYWxpZ24taXRlbXM6ICR7YWxpZ259O2A7XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlLmxlbmd0aCA9PSAwID8gdW5kZWZpbmVkIDogc3R5bGU7XG4gICAgfSwgW2p1c3RpZnksIGFsaWduXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSA/IGNsYXNzTmFtZSArIFwiIGRjLXN0YWNrXCIgOiBcImRjLXN0YWNrXCJ9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGUgPyBleHRyYVN0eWxlICsgc3R5bGUgOiBleHRyYVN0eWxlfVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBob3Jpem9udGFsIGZsZXhib3ggXCJncm91cGluZ1wiIG9mIGVsZW1lbnRzLlxuICpcbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHcm91cChcbiAgICBwcm9wczogSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+ICYge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGp1c3RpZnk/OiBzdHJpbmc7XG4gICAgICAgIGFsaWduPzogc3RyaW5nO1xuICAgICAgICBzdHlsZT86IHN0cmluZztcbiAgICB9XG4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwganVzdGlmeSwgYWxpZ24sIHN0eWxlLCBjaGlsZHJlbiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gICAgY29uc3QgZXh0cmFTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBsZXQgc3R5bGUgPSBcIlwiO1xuICAgICAgICBpZiAoanVzdGlmeSkgc3R5bGUgKz0gYGp1c3RpZnktY29udGVudDogJHtqdXN0aWZ5fTtgO1xuICAgICAgICBpZiAoYWxpZ24pIHN0eWxlICs9IGBhbGlnbi1pdGVtczogJHthbGlnbn07YDtcblxuICAgICAgICByZXR1cm4gc3R5bGUubGVuZ3RoID09IDAgPyB1bmRlZmluZWQgOiBzdHlsZTtcbiAgICB9LCBbanVzdGlmeSwgYWxpZ25dKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lID8gY2xhc3NOYW1lICsgXCIgZGMtZ3JvdXBcIiA6IFwiZGMtZ3JvdXBcIn1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZSA/IGV4dHJhU3R5bGUgKyBzdHlsZSA6IGV4dHJhU3R5bGV9XG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuIiwgIi8qKiBCYXNpYyBVSSBjb21wb25lbnRzIHRoYXQgaGF2ZSBzaW1wbGUgT2JzaWRpYW4gdGhlbWluZy5cbiAqIEBtb2R1bGUgdWlcbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW1wb3J0IHsgQ29tcG9uZW50Q2hpbGRyZW4gfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBzZXRJY29uIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVkU3RhdGUgfSBmcm9tIFwidWkvaG9va3NcIjtcblxuaW1wb3J0IFwiLi9iYXNpY3MuY3NzXCI7XG5cbi8qKiBWYXJpb3VzIGludGVudHMgZm9yIGJ1dHRvbnMgYW5kIG90aGVyIGludGVyYWN0aXZlIGVsZW1lbnRzLiAqL1xuZXhwb3J0IHR5cGUgSW50ZW50ID0gXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiO1xuZXhwb3J0IHR5cGUgT21pdHRhYmxlID0gXCJ2YWx1ZVwiIHwgXCJkZWZhdWx0VmFsdWVcIjtcbmV4cG9ydCBjb25zdCBJTlRFTlRfQ0xBU1NFUzogUmVjb3JkPEludGVudCwgc3RyaW5nPiA9IHtcbiAgICBlcnJvcjogXCJkYy1pbnRlbnQtZXJyb3JcIixcbiAgICB3YXJuOiBcImRjLWludGVudC13YXJuXCIsXG4gICAgaW5mbzogXCJkYy1pbnRlbnQtaW5mb1wiLFxuICAgIHN1Y2Nlc3M6IFwiZGMtaW50ZW50LXN1Y2Nlc3NcIixcbn07XG5cbi8qKiBXcmFwcGVyIGZvciBhIHJlZ3VsYXIgSFRNTCBidXR0b24gd2l0aCBzb21lIGRlZmF1bHQgY2xhc3Nlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBCdXR0b24oXG4gICAgcHJvcHM6IHsgY2xhc3NOYW1lPzogc3RyaW5nOyBpbnRlbnQ/OiBJbnRlbnQ7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9ICYgUmVhY3QuSFRNTFByb3BzPEhUTUxCdXR0b25FbGVtZW50PlxuKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGludGVudCwgY2hpbGRyZW4sIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRjLWJ1dHRvblwiLCBpbnRlbnQgPyBJTlRFTlRfQ0xBU1NFU1tpbnRlbnRdIDogdW5kZWZpbmVkLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgey4uLmZvcndhcmRpbmdQcm9wc31cbiAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2J1dHRvbj5cbiAgICApO1xufVxuXG4vKiogQSBzaW1wbGUgdGV4dGJveCB3aGljaCBhY2NlcHRzIHRleHQuXG4gKlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRleHRib3gocHJvcHM6IHsgY2xhc3NOYW1lPzogc3RyaW5nIH0gJiBSZWFjdC5IVE1MUHJvcHM8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGlucHV0IHR5cGU9e3Byb3BzLnR5cGUgPz8gXCJ0ZXh0XCJ9IGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJkYy10ZXh0Ym94XCIsIGNsYXNzTmFtZSl9IHsuLi5mb3J3YXJkaW5nUHJvcHN9IC8+XG4gICAgKTtcbn1cblxuLyoqIEEgY2hlY2tib3ggdGhhdCBjYW4gYmUgY2hlY2tlZCBhbmQgdW5jaGVja2VkLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94KFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgICBjaGVja2VkPzogYm9vbGVhbjtcbiAgICAgICAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuO1xuICAgICAgICBvbkNoZWNrQ2hhbmdlPzogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICAgIGNoaWxkcmVuPzogQ29tcG9uZW50Q2hpbGRyZW47XG4gICAgfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PlxuKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgY2hlY2tlZDogaXNDaGVja2VkLFxuICAgICAgICBvbkNoZWNrQ2hhbmdlLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgLi4uZm9yd2FyZGluZ1Byb3BzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtjaGVja2VkLCBzZXRDaGVja2VkXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShkZWZhdWx0Q2hlY2tlZCA/PyBmYWxzZSwgaXNDaGVja2VkLCBvbkNoZWNrQ2hhbmdlKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBhbnkpID0+IHNldENoZWNrZWQoZXZlbnQuY3VycmVudFRhcmdldC5jaGVja2VkKSwgW3NldENoZWNrZWRdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtY2hlY2tib3hcIiwgZGlzYWJsZWQgPyBcImRjLWNoZWNrYm94LWRpc2FibGVkXCIgOiB1bmRlZmluZWQsIGNsYXNzTmFtZSl9PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi5mb3J3YXJkaW5nUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2xhYmVsPlxuICAgICk7XG59XG5cbi8qKiBXcmFwcGVyIGZvciBhIHNsaWRlciAocmFuZ2UgaW5wdXQpIHdpdGggc29tZSBkZWZhdWx0IGNsYXNzZXMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gU2xpZGVyKFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgbWluPzogbnVtYmVyO1xuICAgICAgICBtYXg/OiBudW1iZXI7XG4gICAgICAgIHN0ZXA/OiBudW1iZXI7XG4gICAgICAgIHZhbHVlPzogbnVtYmVyO1xuICAgICAgICBkZWZhdWx0VmFsdWU/OiBudW1iZXI7XG4gICAgICAgIG9uVmFsdWVDaGFuZ2U/OiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcbiAgICB9ICYgT21pdDxSZWFjdC5IVE1MUHJvcHM8SFRNTElucHV0RWxlbWVudD4sIE9taXR0YWJsZT5cbikge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBtaW4gPSAwLCBtYXggPSAxMCwgc3RlcCA9IDEsIHZhbHVlLCBkZWZhdWx0VmFsdWUsIG9uVmFsdWVDaGFuZ2UsIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3NsaWRlciwgc2V0U2xpZGVyXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShkZWZhdWx0VmFsdWUgPz8gMCwgdmFsdWUsIG9uVmFsdWVDaGFuZ2UpO1xuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IGFueSkgPT4gc2V0U2xpZGVyKHBhcnNlRmxvYXQoZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSkpLCBbc2V0U2xpZGVyXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtzbGlkZXIudG9TdHJpbmcoKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJkYy1zbGlkZXJcIiwgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgIG1pbj17bWlufVxuICAgICAgICAgICAgbWF4PXttYXh9XG4gICAgICAgICAgICBzdGVwPXtzdGVwfVxuICAgICAgICAgICAgdmFsdWU9e3NsaWRlcn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgIHsuLi5mb3J3YXJkaW5nUHJvcHN9XG4gICAgICAgIC8+XG4gICAgKTtcbn1cblxuLyoqIFdyYXBwZXIgZm9yIGEgc3dpdGNoICh0b2dnbGUpIGNvbXBvbmVudCB3aXRoIHNvbWUgZGVmYXVsdCBjbGFzc2VzLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFN3aXRjaChcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW47XG4gICAgICAgIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgICAgICAgb25Ub2dnbGVDaGFuZ2U/OiAoY2hlY2tlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICB9ICYgUmVhY3QuSFRNTFByb3BzPEhUTUxJbnB1dEVsZW1lbnQ+XG4pIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSwgZGlzYWJsZWQsIGRlZmF1bHRDaGVja2VkLCBjaGVja2VkLCBvblRvZ2dsZUNoYW5nZSwgLi4uZm9yd2FyZGluZ1Byb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBbdG9nZ2xlZCwgc2V0VG9nZ2xlZF0gPSB1c2VDb250cm9sbGVkU3RhdGUoZGVmYXVsdENoZWNrZWQgPz8gZmFsc2UsIGNoZWNrZWQsIG9uVG9nZ2xlQ2hhbmdlKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBhbnkpID0+IHNldFRvZ2dsZWQoZXZlbnQuY3VycmVudFRhcmdldC5jaGVja2VkKSwgW3NldFRvZ2dsZWRdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcbiAgICAgICAgICAgICAgICBcImRjLXN3aXRjaCBjaGVja2JveC1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICB0b2dnbGVkID8gXCJpcy1lbmFibGVkXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQgPyBcImRjLXN3aXRjaC1kaXNhYmxlZFwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYy1zd2l0Y2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkPXtkZWZhdWx0Q2hlY2tlZH1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXt0b2dnbGVkfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLmZvcndhcmRpbmdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgKTtcbn1cblxuLyoqIFdyYXBwZXIgZm9yIGEgc2VsZWN0IGNvbXBvbmVudCB3aXRoIHNvbWUgZGVmYXVsdCBjbGFzc2VzLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFZhbmlsbGFTZWxlY3QoXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICBvcHRpb25zOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdO1xuICAgICAgICB2YWx1ZT86IHN0cmluZztcbiAgICAgICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICAgICAgICBvblZhbHVlQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgfSAmIFJlYWN0LkhUTUxQcm9wczxIVE1MU2VsZWN0RWxlbWVudD5cbikge1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBvcHRpb25zID0gW10sIHZhbHVlLCBkZWZhdWx0VmFsdWUsIG9uVmFsdWVDaGFuZ2UsIC4uLmZvcndhcmRpbmdQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3NlbGVjdGVkVmFsdWUsIHNldFNlbGVjdGVkVmFsdWVdID0gUmVhY3QudXNlU3RhdGUodmFsdWUgPz8gZGVmYXVsdFZhbHVlID8/IFwiXCIpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgc2V0U2VsZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSwgW3ZhbHVlXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtc2VsZWN0IGRyb3Bkb3duXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWRWYWx1ZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkVmFsdWUoZS5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlICYmIG9uVmFsdWVDaGFuZ2UoZS5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4uZm9yd2FyZGluZ1Byb3BzfVxuICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHRpb24udmFsdWV9IHZhbHVlPXtvcHRpb24udmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICk7XG59XG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhbiBpY29uXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gSWNvbihwcm9wczogeyBjbGFzc05hbWU/OiBzdHJpbmc7IGljb246IHN0cmluZyB9KSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGljb24gfSA9IHByb3BzO1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KCk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHNldEljb24ocmVmLmN1cnJlbnQsIGljb24pO1xuICAgICAgICB9XG4gICAgfSwgW3JlZl0pO1xuXG4gICAgcmV0dXJuIDxzcGFuIHJlZj17cmVmfSBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGMtaWNvblwiLCBjbGFzc05hbWUpfSBkYXRhLWljb249e2ljb259IC8+O1xufVxuXG4vKipcbiAqICBBcHBlbmRzIGFkZGl0aW9uYWwgY2xhc3NlcyB0byBhIGJhc2ljIGZpeGVkIGNsYXNzLlxuICpcbiAqIEBncm91cCBVdGlsaXRpZXNcbiAqICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUNsYXNzZXMoZml4ZWQ6IHN0cmluZywgLi4ucmVzdDogKHN0cmluZyB8IHVuZGVmaW5lZClbXSkge1xuICAgIGNvbnN0IG5vbmVtcHR5ID0gcmVzdC5maWx0ZXIoKGMpID0+IGMgIT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKG5vbmVtcHR5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZpeGVkO1xuXG4gICAgcmV0dXJuIFtmaXhlZCwgLi4ubm9uZW1wdHldLmpvaW4oXCIgXCIpO1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSBpbmRleGFibGVzXG4gKi9cbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuXG4vKiogQW55IGluZGV4YWJsZSBmaWVsZCwgd2hpY2ggbXVzdCBoYXZlIGEgZmV3IGluZGV4LXJlbGV2YW50IHByb3BlcnRpZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4YWJsZSB7XG4gICAgLyoqIFRoZSBvYmplY3QgdHlwZXMgdGhhdCB0aGlzIGluZGV4YWJsZSBpcy4gKi9cbiAgICAkdHlwZXM6IHN0cmluZ1tdO1xuICAgIC8qKiBUZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBvYmplY3QsIHN1Y2ggYXMgYFBhZ2VgIG9yIGBTZWN0aW9uYC4gVXNlZCBpbiB2aXN1YWxpemF0aW9ucy4gKi9cbiAgICAkdHlwZW5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIHVuaXF1ZSBpbmRleCBJRCBmb3IgdGhpcyBvYmplY3QuICovXG4gICAgJGlkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4YWJsZSBvYmplY3QgdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMgb2JqZWN0LiBPbmx5IHNldCBhZnRlciB0aGUgb2JqZWN0IGlzIGFjdHVhbGx5IGluZGV4ZWQuXG4gICAgICovXG4gICAgJHBhcmVudD86IEluZGV4YWJsZTtcbiAgICAvKiogSWYgcHJlc2VudCwgdGhlIHJldmlzaW9uIGluIHRoZSBpbmRleCBvZiB0aGlzIG9iamVjdC4gKi9cbiAgICAkcmV2aXNpb24/OiBudW1iZXI7XG4gICAgLyoqIFRoZSBmaWxlIHRoYXQgdGhpcyBpbmRleGFibGUgd2FzIGRlcml2ZWQgZnJvbSwgaWYgZmlsZS1iYWNrZWQuICovXG4gICAgJGZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKiBNZXRhZGF0YSBmb3Igb2JqZWN0cyB3aGljaCBzdXBwb3J0IGxpbmtpbmcuICovXG5leHBvcnQgY29uc3QgTElOS0FCTEVfVFlQRSA9IFwibGlua2FibGVcIjtcbi8qKlxuICoge0Bpbmhlcml0RG9jIExJTktBQkxFX1RZUEV9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2FibGUge1xuICAgIC8qKiBBIGxpbmsgdG8gdGhpcyBsaW5rYWJsZSBvYmplY3QuICovXG4gICAgJGxpbms6IExpbms7XG59XG5cbi8qKiBHZW5lcmFsIG1ldGFkYXRhIGZvciBhbnkgZmlsZS4gKi9cbmV4cG9ydCBjb25zdCBGSUxFX1RZUEUgPSBcImZpbGVcIjtcbi8qKlxuICoge0Bpbmhlcml0RG9jIEZJTEVfVFlQRX1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlIGV4dGVuZHMgTGlua2FibGUge1xuICAgIC8qKiBUaGUgcGF0aCB0aGlzIGZpbGUgZXhpc3RzIGF0LiAqL1xuICAgICRwYXRoOiBzdHJpbmc7XG4gICAgLyoqIE9ic2lkaWFuLXByb3ZpZGVkIGRhdGUgdGhpcyBwYWdlIHdhcyBjcmVhdGVkLiAqL1xuICAgICRjdGltZTogRGF0ZVRpbWU7XG4gICAgLyoqIE9ic2lkaWFuLXByb3ZpZGVkIGRhdGUgdGhpcyBwYWdlIHdhcyBtb2RpZmllZC4gKi9cbiAgICAkbXRpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBzaXplIG9mIHRoaXMgcGFnZSBpbiBieXRlcy4gKi9cbiAgICAkc2l6ZTogbnVtYmVyO1xuICAgIC8qKiBUaGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgICRleHRlbnNpb246IHN0cmluZztcbn1cblxuLyoqIE1ldGFkYXRhIGZvciB0YWdnYWJsZSBvYmplY3RzLiAqL1xuZXhwb3J0IGNvbnN0IFRBR0dBQkxFX1RZUEUgPSBcInRhZ2dhYmxlXCI7XG4vKipcbiAqIHtAaW5oZXJpdERvYyBUQUdHQUJMRV9UWVBFfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ2dhYmxlIHtcbiAgICAvKiogVGhlIGV4YWN0IHRhZ3Mgb24gdGhpcyBvYmplY3QuICgjYS9iL2Mgb3IgI2Zvby9iYXIpLiAqL1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbn1cblxuLyoqIE1ldGFkYXRhIGZvciBvYmplY3RzIHdoaWNoIGNhbiBsaW5rIHRvIG90aGVyIHRoaW5ncy4gKi9cbmV4cG9ydCBjb25zdCBMSU5LQkVBUklOR19UWVBFID0gXCJsaW5rc1wiO1xuLyoqXG4gKiB7QGluaGVyaXREb2MgTElOS0JFQVJJTkdfVFlQRX1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rYmVhcmluZyB7XG4gICAgLyoqIFRoZSBsaW5rcyBpbiB0aGlzIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG59XG5cbi8qKlxuICogQWxsIHN1cHBvcnRlZCBleHRlbnNpb25zLiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZWNvbWUgYSBkeW5hbWljIGxvb2t1cCB0YWJsZSBhbmQgbm90IGp1c3RcbiAqIGEgZml4ZWQgbGlzdCBhdCBzb21lIHBvaW50LCBlc3BlY2lhbGx5IGlmIHdlIGFkZCB0aGUgYWJpbGl0eSB0byB0dXJuIGluZGV4aW5nIG9uL29mZi5cbiAqL1xuZXhwb3J0IGNvbnN0IElOREVYQUJMRV9FWFRFTlNJT05TID0gbmV3IFNldChbXCJtZFwiLCBcIm1hcmtkb3duXCIsIFwiY2FudmFzXCJdKTtcbiIsICIvKipcbiAqIEBtb2R1bGUgYXBpXG4gKi9cbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSBcIi4uL2luZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgSW5saW5lRmllbGQgfSBmcm9tIFwiaW5kZXgvaW1wb3J0L2lubGluZS1maWVsZFwiO1xuaW1wb3J0IHsgRnJvbnRtYXR0ZXJFbnRyeSB9IGZyb20gXCJpbmRleC90eXBlcy9tYXJrZG93blwiO1xuaW1wb3J0IHsgTGluZVNwYW4gfSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9tYXJrZG93blwiO1xuXG4vKiogVGhlIHNvdXJjZSBvZiBhIGZpZWxkLCB1c2VkIHdoZW4gZGV0ZXJtaW5pbmcgd2hhdCBmaWxlcyB0byBvdmVyd3JpdGUgYW5kIGhvdy4gKi9cbmV4cG9ydCB0eXBlIFByb3ZlbmFuY2UgPVxuICAgIHwgeyB0eXBlOiBcImZyb250bWF0dGVyXCI7IGZpbGU6IHN0cmluZzsga2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiBcImlubGluZS1maWVsZFwiOyBmaWxlOiBzdHJpbmc7IGxpbmU6IG51bWJlcjsga2V5OiBzdHJpbmcgfTtcblxuLyoqXG4gKiBHZW5lcmFsIGRlZmluaXRpb24gZm9yIGEgZmllbGQuIFByb3ZpZGVzIHRoZSBmaWVsZCBrZXksIHZhbHVlLCBhcyB3ZWxsIGFzIGluZm9ybWF0aW9uIG9uIGl0J3Mgc291cmNlIGFuZCBob3cgaXQgY2FuIGJlIGVkaXRlZC5cbiAqIEBncm91cCBDb21tb24gVHlwZXNcbiAqICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkIHtcbiAgICAvKiogVGhlIGNhbm9uaWNhbCBrZXkgbmFtZSBmb3IgdGhlIGZpZWxkIChpLmUuLCBhcyBpdCBhY3R1YWxseSBzaG93cyB1cCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUpLiAqL1xuICAgIGtleTogc3RyaW5nO1xuICAgIC8qKiBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkLiAqL1xuICAgIHZhbHVlOiBMaXRlcmFsO1xuICAgIC8qKiBUaGUgcmF3IHZhbHVlIG9mIHRoZSBmaWVsZCBiZWZvcmUgcGFyc2luZywgaWYgcmVsZXZhbnQuICovXG4gICAgcmF3Pzogc3RyaW5nO1xuICAgIC8qKiBJZiBwcmVzZW50LCBkZXNjcmliZXMgd2hlcmUgdGhlIGZpZWxkIGNhbWUgZnJvbSBpbiBwcmVjaXNlIGRldGFpbCwgYWxsb3dpbmcgdGhlIGZpZWxkIHRvIGJlIGVkaXRlZC4gKi9cbiAgICBwcm92ZW5hbmNlPzogUHJvdmVuYW5jZTtcbn1cblxuLyoqIE1ldGFkYXRhIGZvciBvYmplY3RzIHdoaWNoIGFyZSBhbm5vdGF0ZWQgd2l0aCBmaWVsZHMuICovXG5leHBvcnQgY29uc3QgRklFTERCRUFSSU5HX1RZUEUgPSBcImZpZWxkc1wiO1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZGJlYXJpbmcge1xuICAgIC8qKiBSZXR1cm4gYSBsaXN0IG9mIGFsbCBmaWVsZHMuIFRoaXMgbWF5IGJlIGNvbXB1dGVkIGVhZ2VybHksIHNvIGNhY2hlIHRoaXMgdmFsdWUgZm9yIHJlcGVhdGVkIG9wZXJhdGlvbnMuICovXG4gICAgZmllbGRzOiBGaWVsZFtdO1xuXG4gICAgLyoqIEZldGNoIGEgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpZiBpdCBpcyBwcmVzZW50IG9uIHRoaXMgb2JqZWN0LiAqL1xuICAgIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRmllbGRiZWFyaW5ncyB7XG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzRmllbGRiZWFyaW5nKG9iamVjdDogYW55KTogb2JqZWN0IGlzIEZpZWxkYmVhcmluZyB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBvYmplY3QgIT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmIFwiZmllbGRcIiBpbiBvYmplY3QgJiYgdHlwZW9mIG9iamVjdFtcImZpZWxkXCJdID09IFwiZnVuY3Rpb25cIlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBrZXkgZnJvbSBhIGdlbmVyaWMgbWFwIG9yIGZpZWxkYmVhcmluZyBvYmplY3QuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGdldChvYmplY3Q6IEZpZWxkYmVhcmluZyB8IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+LCBrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNGaWVsZGJlYXJpbmcob2JqZWN0KSkgcmV0dXJuIG9iamVjdC5maWVsZChrZXkpPy52YWx1ZTtcbiAgICAgICAgZWxzZSByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGdldFdpdGhEZWZhdWx0PFQgZXh0ZW5kcyB7ICRwb3NpdGlvbjogTGluZVNwYW4gfSAmIEluZGV4YWJsZT4oXG4gICAgICAgIG9iamVjdDogVCxcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIGRlZmF1bHRWYWx1ZT86IExpdGVyYWxcbiAgICApOiBGaWVsZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiBkZWZhdWx0VmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImlubGluZS1maWVsZFwiLFxuICAgICAgICAgICAgICAgIGZpbGU6IG9iamVjdC4kZmlsZSEsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGxpbmU6IG9iamVjdC4kcG9zaXRpb24uZW5kLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8qKlxuICogR2VuZXJpYyBmdW5jdGlvbiB3aGljaCBleHRyYWN0IGZpZWxkcy4gSWYgbm8gYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCByZXR1cm4gYWxsIGZpZWxkczsgb3RoZXJ3aXNlLFxuICogaXQgc2hvdWxkIHJldHVybiB0aGUgZmllbGQgbWF0Y2hpbmcgdGhlIGdpdmVuIGtleS5cbiAqXG4gKiBLZXlzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIHRvIG1hdGNoIE9ic2lkaWFuIHN0YW5kYXJkIGJlaGF2aW9yLlxuICovXG5leHBvcnQgdHlwZSBGaWVsZEV4dHJhY3RvcjxUPiA9IChvYmplY3Q6IFQsIGtleT86IHN0cmluZykgPT4gRmllbGRbXTtcblxuLyoqIFF1aWNrIHV0aWxpdGllcyBmb3IgZ2VuZXJhdGluZyBmaWVsZHMgYW5kIGRvaW5nIHNlYXJjaGVzIG92ZXIgdGhlbS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBFeHRyYWN0b3JzIHtcbiAgICAvKiogQ2hlY2sgaWYgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBvYmplY3QgaXMgbm90IGV4Y2x1ZGVkIGFuZCBpcyBhIHBsYWluIHByb3BlcnR5IChub3QgYSBmdW5jdGlvbiBvciBvdGhlciBzcGVjaWFsIG9iamVjdCkuICovXG4gICAgZnVuY3Rpb24gaXNWYWxpZEludHJpbnNpYyhvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4sIGtleTogc3RyaW5nLCBleGNsdWRlPzogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICAgICAgLy8gRG9uJ3QgYWxsb3cgcmVjdXJzaW9uIG9uICdmaWVsZHMnIG9yIGNhY2hlZCB2YWx1ZXMsIGFuZCBza2lwIGFueSBpZ25vcmVkIGFuZCBub24taW50cmluc2ljcy5cbiAgICAgICAgaWYgKGV4Y2x1ZGU/LmhhcyhrZXkpIHx8ICFrZXkuc3RhcnRzV2l0aChcIiRcIikpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBObyBmdW5jdGlvbnMsIG9ubHkgdXNlIGFjdHVhbCB2YWx1ZXMuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKG9iamVjdCBhcyBhbnkpW2tleV07XG4gICAgICAgIGlmIChMaXRlcmFscy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYWxsIGtleXMgb2YgdGhlIG9iamVjdCwgaW5jbHVkaW5nIGRlcml2ZWQgZmllbGRzIGZyb20gcHJvdG90eXBlcy4gKi9cbiAgICBmdW5jdGlvbiogcHJvdG90eXBlS2V5cyhvYmplY3Q6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB5aWVsZCBrZXk7XG5cbiAgICAgICAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIHdoaWxlIChwcm90bykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pKSB5aWVsZCBrZXk7XG5cbiAgICAgICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgZmllbGRzIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LCByZXR1cm5pbmcgdGhlbSBhcyBhIGxpc3QuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGludHJpbnNpY3M8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KGV4Y2VwdD86IFNldDxzdHJpbmc+KTogRmllbGRFeHRyYWN0b3I8VD4ge1xuICAgICAgICByZXR1cm4gKG9iamVjdDogVCwga2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHM6IEZpZWxkW10gPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHByb3RvdHlwZUtleXMob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRJbnRyaW5zaWMob2JqZWN0LCBrZXksIGV4Y2VwdCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAob2JqZWN0IGFzIGFueSlba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYga2V5IGlzIGRpcmVjdGx5IHByZXNlbnQgaW4gb2JqZWN0LCBqdXN0IHJldHVybiBpdC5cbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG9iamVjdCAmJiBpc1ZhbGlkSW50cmluc2ljKG9iamVjdCwga2V5LCBleGNlcHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAob2JqZWN0IGFzIGFueSlba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0gYXMgRmllbGRbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEZpZWxkIGV4dHJhY3RvciB3aGljaCBleHRyYWN0cyBmcm9udG1hdHRlciBmaWVsZHMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZyb250bWF0dGVyPFQgZXh0ZW5kcyBJbmRleGFibGU+KFxuICAgICAgICBmcm9udDogKG9iamVjdDogVCkgPT4gUmVjb3JkPHN0cmluZywgRnJvbnRtYXR0ZXJFbnRyeT4gfCB1bmRlZmluZWRcbiAgICApOiBGaWVsZEV4dHJhY3RvcjxUPiB7XG4gICAgICAgIHJldHVybiAob2JqZWN0OiBULCBrZXk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gZnJvbnQob2JqZWN0KTtcbiAgICAgICAgICAgIGlmICghZnJvbnRtYXR0ZXIpIHJldHVybiBbXTtcblxuICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzOiBGaWVsZFtdID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmcm9udG1hdHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBmcm9udG1hdHRlcltrZXldO1xuXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZW50cnkua2V5LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IGVudHJ5LnJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZlbmFuY2U6IHsgdHlwZTogXCJmcm9udG1hdHRlclwiLCBmaWxlOiBvYmplY3QuJGZpbGUhLCBrZXk6IGVudHJ5LmtleSB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gZnJvbnRtYXR0ZXIpKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IGZyb250bWF0dGVyW2tleV07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogZW50cnkucmF3LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmVuYW5jZTogeyB0eXBlOiBcImZyb250bWF0dGVyXCIsIGZpbGU6IG9iamVjdC4kZmlsZSEsIGtleSB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEZpZWxkIGV4dHJhY3RvciB3aGljaCBzaG93cyBhbGwgaW5saW5lIGZpZWxkcy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaW5saW5lRmllbGRzPFQgZXh0ZW5kcyBJbmRleGFibGU+KFxuICAgICAgICBpbmxpbmVNYXA6IChvYmplY3Q6IFQpID0+IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPiB8IHVuZGVmaW5lZFxuICAgICk6IEZpZWxkRXh0cmFjdG9yPFQ+IHtcbiAgICAgICAgcmV0dXJuIChvYmplY3Q6IFQsIGtleT86IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFwID0gaW5saW5lTWFwKG9iamVjdCk7XG4gICAgICAgICAgICBpZiAoIW1hcCkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgT2JqZWN0LnZhbHVlcyhtYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IGZpZWxkLnJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImlubGluZS1maWVsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IG9iamVjdC4kZmlsZSEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogZmllbGQucG9zaXRpb24ubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgUHJvdmVuYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIG1hcCkpIHJldHVybiBbXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gbWFwW2tleV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IGZpZWxkLnJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImlubGluZS1maWVsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IG9iamVjdC4kZmlsZSEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogZmllbGQucG9zaXRpb24ubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgUHJvdmVuYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBNZXJnZSBtdWx0aXBsZSBmaWVsZCBleHRyYWN0b3JzIGludG8gb25lOyBpZiBtdWx0aXBsZSBleHRyYWN0b3JzIHByb2R1Y2UgaWRlbnRpY2FsIGtleXMsIGtleXMgZnJvbSB0aGUgZWFybGllciBleHRyYWN0b3Igd2lsbCBiZSBwcmVmZXJyZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG1lcmdlPFQgZXh0ZW5kcyBGaWVsZGJlYXJpbmc+KC4uLmV4dHJhY3RvcnM6IEZpZWxkRXh0cmFjdG9yPFQ+W10pOiBGaWVsZEV4dHJhY3RvcjxUPiB7XG4gICAgICAgIHJldHVybiAob2JqZWN0OiBULCBrZXk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkczogRmllbGRbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFjdG9yIG9mIGV4dHJhY3RvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBleHRyYWN0b3Iob2JqZWN0LCB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlZC5oYXMoZmllbGQua2V5LnRvTG93ZXJDYXNlKCkpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlZC5hZGQoZmllbGQua2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFjdG9yIG9mIGV4dHJhY3RvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBleHRyYWN0b3Iob2JqZWN0LCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQubGVuZ3RoID4gMCkgcmV0dXJuIGZpZWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCAiLyoqIFBhcnNlIGlubGluZSBmaWVsZHMgYW5kIG90aGVyIGVtYmVkZGVkIG1ldGFkYXRhIGluIGEgbGluZS4gKi9cblxuaW1wb3J0IHsgUFJJTUlUSVZFUyB9IGZyb20gXCJleHByZXNzaW9uL3BhcnNlclwiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCAqIGFzIFAgZnJvbSBcInBhcnNpbW1vblwiO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSBcImVtb2ppLXJlZ2V4XCI7XG5pbXBvcnQgeyBKc29uQ29udmVyc2lvbiwgSnNvbkxpdGVyYWwgfSBmcm9tIFwiaW5kZXgvdHlwZXMvanNvbi9jb21tb25cIjtcblxuLyoqIEEgcGFyc2VkIGlubGluZSBmaWVsZCBmcm9tIGEgc3BlY2lmaWMgbGluZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxJbmxpbmVGaWVsZCB7XG4gICAgLyoqIFRoZSByYXcgcGFyc2VkIGtleS4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICAvKiogVGhlIHJhdyB2YWx1ZSBvZiB0aGUgZmllbGQuICovXG4gICAgdmFsdWU6IHN0cmluZztcbiAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgKnZhbHVlKiBmb3IgdGhlIGZpZWxkLiAqL1xuICAgIHN0YXJ0VmFsdWU6IG51bWJlcjtcbiAgICAvKiogVGhlIGVuZCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgIGVuZDogbnVtYmVyO1xuICAgIC8qKiBJZiB0aGlzIGlubGluZSBmaWVsZCB3YXMgZGVmaW5lZCB2aWEgYSB3cmFwcGluZyAoJ1snIG9yICcoJyBvciAnbGluaycpLCB0aGVuIHRoZSB3cmFwcGluZyB0aGF0IHdhcyB1c2VkLiAqL1xuICAgIHdyYXBwaW5nPzogc3RyaW5nO1xufVxuXG4vKiogRnVsbCBpbmxpbmUgZmllbGQgbWV0YWRhdGEgZm9yIGFuIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lRmllbGQge1xuICAgIC8qKiBUaGUgYWN0dWFsIGtleSBkZXNjcmliaW5nIHRoZSBpbmxpbmUgZmllbGQuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIFRoZSByYXcgdmFsdWUgb2YgdGhlIGlubGluZSBmaWVsZC4gKi9cbiAgICByYXc6IHN0cmluZztcbiAgICAvKiogVGhlIHBhcnNlZCB2YWx1ZS4gKi9cbiAgICB2YWx1ZTogTGl0ZXJhbDtcbiAgICAvKiogRnVsbCBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3Igd2hlcmUgdGhlIGlubGluZSBmaWVsZCBpcyBsb2NhdGVkIGluIHRoZSBkb2N1bWVudC4gKi9cbiAgICBwb3NpdGlvbjoge1xuICAgICAgICAvKiogVGhlIGxpbmUgbnVtYmVyIHRoZSBpbmxpbmUgZmllbGQgYXBwZWFycyBvbi4gKi9cbiAgICAgICAgbGluZTogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgY29sdW1uIG9mIHRoZSAqdmFsdWUqIGZvciB0aGUgZmllbGQuIEltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnOjonLiAqL1xuICAgICAgICBzdGFydFZhbHVlOiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgZW5kIGNvbHVtbiBvZiB0aGUgZmllbGQuICovXG4gICAgICAgIGVuZDogbnVtYmVyO1xuICAgIH07XG4gICAgLyoqIElmIHRoaXMgaW5saW5lIGZpZWxkIHdhcyBkZWZpbmVkIHZpYSBhIHdyYXBwaW5nICgnWycgb3IgJygnIG9yICdsaW5rJyksIHRoZW4gdGhlIHdyYXBwaW5nIHRoYXQgd2FzIHVzZWQuICovXG4gICAgd3JhcHBpbmc/OiBzdHJpbmc7XG59XG5cbi8qKiBKU09OLCBzZXJpYWxpemFibGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaW5saW5lIGZpZWxkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uSW5saW5lRmllbGQge1xuICAgIC8qKiBUaGUgYWN0dWFsIGtleSBkZXNjcmliaW5nIHRoZSBpbmxpbmUgZmllbGQuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIFRoZSByYXcgdmFsdWUgb2YgdGhlIGlubGluZSBmaWVsZC4gKi9cbiAgICByYXc6IHN0cmluZztcbiAgICAvKiogVGhlIHBhcnNlZCB2YWx1ZS4gKi9cbiAgICB2YWx1ZTogSnNvbkxpdGVyYWw7XG4gICAgLyoqIEZ1bGwgcG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHdoZXJlIHRoZSBpbmxpbmUgZmllbGQgaXMgbG9jYXRlZCBpbiB0aGUgZG9jdW1lbnQuICovXG4gICAgcG9zaXRpb246IHtcbiAgICAgICAgLyoqIFRoZSBsaW5lIG51bWJlciB0aGUgaW5saW5lIGZpZWxkIGFwcGVhcnMgb24uICovXG4gICAgICAgIGxpbmU6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBzdGFydCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIHN0YXJ0IGNvbHVtbiBvZiB0aGUgKnZhbHVlKiBmb3IgdGhlIGZpZWxkLiBJbW1lZGlhdGVseSBhZnRlciB0aGUgJzo6Jy4gKi9cbiAgICAgICAgc3RhcnRWYWx1ZTogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIGVuZCBjb2x1bW4gb2YgdGhlIGZpZWxkLiAqL1xuICAgICAgICBlbmQ6IG51bWJlcjtcbiAgICB9O1xuICAgIC8qKiBJZiB0aGlzIGlubGluZSBmaWVsZCB3YXMgZGVmaW5lZCB2aWEgYSB3cmFwcGluZyAoJ1snIG9yICcoJyBvciAnbGluaycpLCB0aGVuIHRoZSB3cmFwcGluZyB0aGF0IHdhcyB1c2VkLiAqL1xuICAgIHdyYXBwaW5nPzogc3RyaW5nO1xufVxuXG4vKiogQ29udmVydCBhbiBpbmxpbmUgZmllbGQgdG8gYSBKU09OIGZvcm1hdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uSW5saW5lRmllbGQoZmllbGQ6IElubGluZUZpZWxkKTogSnNvbklubGluZUZpZWxkIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZmllbGQsIHsgdmFsdWU6IEpzb25Db252ZXJzaW9uLmpzb24oZmllbGQudmFsdWUpIH0pO1xufVxuXG4vKiogQ29udmVydCBhIEpTT04gaW5saW5lIGZpZWxkIGJhY2sgdG8gYSByZWd1bGFyIGZpZWxkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlSW5saW5lRmllbGQoZmllbGQ6IEpzb25JbmxpbmVGaWVsZCk6IElubGluZUZpZWxkIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZmllbGQsIHsgdmFsdWU6IEpzb25Db252ZXJzaW9uLnZhbHVlKGZpZWxkLnZhbHVlKSB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzSW5saW5lRmllbGQobG9jYWw6IExvY2FsSW5saW5lRmllbGQsIGxpbmVubzogbnVtYmVyKTogSW5saW5lRmllbGQ7XG5leHBvcnQgZnVuY3Rpb24gYXNJbmxpbmVGaWVsZChsb2NhbDogTG9jYWxJbmxpbmVGaWVsZFtdLCBsaW5lbm86IG51bWJlcik6IElubGluZUZpZWxkW107XG4vKiogQ29udmVydCBhIGxvY2FsIGlubGluZSBmaWVsZCBpbnRvIGEgZnVsbCBpbmxpbmUgZmllbGQgYnkgcGVyZm9ybWluZyBwYXJzaW5nIGFuZCBhZGRpbmcgdGhlIGNvcnJlY3QgbGluZSBudW1iZXIuICovXG5leHBvcnQgZnVuY3Rpb24gYXNJbmxpbmVGaWVsZChcbiAgICBsb2NhbDogTG9jYWxJbmxpbmVGaWVsZCB8IExvY2FsSW5saW5lRmllbGRbXSxcbiAgICBsaW5lbm86IG51bWJlclxuKTogSW5saW5lRmllbGQgfCBJbmxpbmVGaWVsZFtdIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsb2NhbCkpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsLm1hcCgoZikgPT4gYXNJbmxpbmVGaWVsZChmLCBsaW5lbm8pKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGxvY2FsLmtleSxcbiAgICAgICAgcmF3OiBsb2NhbC52YWx1ZSxcbiAgICAgICAgdmFsdWU6IHBhcnNlSW5saW5lVmFsdWUobG9jYWwudmFsdWUpLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbGluZTogbGluZW5vLFxuICAgICAgICAgICAgc3RhcnQ6IGxvY2FsLnN0YXJ0LFxuICAgICAgICAgICAgc3RhcnRWYWx1ZTogbG9jYWwuc3RhcnRWYWx1ZSxcbiAgICAgICAgICAgIGVuZDogbG9jYWwuZW5kLFxuICAgICAgICB9LFxuICAgICAgICB3cmFwcGluZzogbG9jYWwud3JhcHBpbmcsXG4gICAgfTtcbn1cblxuLyoqIFRoZSB3cmFwcGVyIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gaW5saW5lIGZpZWxkLiAqL1xuZXhwb3J0IGNvbnN0IElOTElORV9GSUVMRF9XUkFQUEVSUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSBPYmplY3QuZnJlZXplKHtcbiAgICBcIltcIjogXCJdXCIsXG4gICAgXCIoXCI6IFwiKVwiLFxufSk7XG5cbi8qKlxuICogRmluZCBhIG1hdGNoaW5nIGNsb3NpbmcgYnJhY2tldCB0aGF0IG9jY3VycyBhdCBvciBhZnRlciBgc3RhcnRgLCByZXNwZWN0aW5nIG5lc3RpbmcgYW5kIGVzY2FwZXMuIElmIGZvdW5kLFxuICogcmV0dXJucyB0aGUgdmFsdWUgY29udGFpbmVkIHdpdGhpbiBhbmQgdGhlIHN0cmluZyBpbmRleCBhZnRlciB0aGUgZW5kIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZmluZENsb3NpbmcoXG4gICAgbGluZTogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgb3Blbjogc3RyaW5nLFxuICAgIGNsb3NlOiBzdHJpbmdcbik6IHsgdmFsdWU6IHN0cmluZzsgZW5kSW5kZXg6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbmVzdGluZyA9IDA7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IGxpbmUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGxldCBjaGFyID0gbGluZS5jaGFyQXQoaW5kZXgpO1xuXG4gICAgICAgIC8vIEFsbG93cyBmb3IgZG91YmxlIGVzY2FwZXMgbGlrZSAnXFxcXCcgdG8gYmUgcmVuZGVyZWQgbm9ybWFsbHkuXG4gICAgICAgIGlmIChjaGFyID09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGVzY2FwZWQsIGlnbm9yZSB0aGUgbmV4dCBjaGFyYWN0ZXIgZm9yIGNvbXB1dGluZyBuZXN0aW5nLCByZWdhcmRsZXNzIG9mIHdoYXQgaXQgaXMuXG4gICAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFyID09IG9wZW4pIG5lc3RpbmcrKztcbiAgICAgICAgZWxzZSBpZiAoY2hhciA9PSBjbG9zZSkgbmVzdGluZy0tO1xuXG4gICAgICAgIC8vIE9ubHkgb2NjdXJzIGlmIHdlIGFyZSBvbiBhIGNsb3NlIGNoYXJhY3RlciBhbmQgdHJoZXJlIGlzIG5vIG1vcmUgbmVzdGluZy5cbiAgICAgICAgaWYgKG5lc3RpbmcgPCAwKSByZXR1cm4geyB2YWx1ZTogbGluZS5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50cmltKCksIGVuZEluZGV4OiBpbmRleCArIDEgfTtcblxuICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIEZpbmQgdGhlICc6Oicgc2VwYXJhdG9yIGluIGFuIGlubGluZSBmaWVsZC4gKi9cbmZ1bmN0aW9uIGZpbmRTZXBhcmF0b3IobGluZTogc3RyaW5nLCBzdGFydDogbnVtYmVyKTogeyBrZXk6IHN0cmluZzsgdmFsdWVJbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIGxldCBzZXAgPSBsaW5lLmluZGV4T2YoXCI6OlwiLCBzdGFydCk7XG4gICAgaWYgKHNlcCA8IDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4geyBrZXk6IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBzZXApLnRyaW0oKSwgdmFsdWVJbmRleDogc2VwICsgMiB9O1xufVxuXG4vKiogVHJ5IHRvIGNvbXBsZXRlbHkgcGFyc2UgYW4gaW5saW5lIGZpZWxkIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4gQXNzdW1lcyBgc3RhcnRgIGlzIG9uIGEgd3JhcHBpbmcgY2hhcmFjdGVyLiAqL1xuZnVuY3Rpb24gZmluZFNwZWNpZmljSW5saW5lRmllbGQobGluZTogc3RyaW5nLCBzdGFydDogbnVtYmVyKTogTG9jYWxJbmxpbmVGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IG9wZW4gPSBsaW5lLmNoYXJBdChzdGFydCk7XG5cbiAgICBsZXQga2V5ID0gZmluZFNlcGFyYXRvcihsaW5lLCBzdGFydCArIDEpO1xuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIEZhaWwgdGhlIG1hdGNoIGlmIHdlIGZpbmQgYW55IHNlcGFyYXRvciBjaGFyYWN0ZXJzIChub3QgYWxsb3dlZCBpbiBrZXlzKS5cbiAgICBmb3IgKGxldCBzZXAgb2YgT2JqZWN0LmtleXMoSU5MSU5FX0ZJRUxEX1dSQVBQRVJTKS5jb25jYXQoT2JqZWN0LnZhbHVlcyhJTkxJTkVfRklFTERfV1JBUFBFUlMpKSkge1xuICAgICAgICBpZiAoa2V5LmtleS5pbmNsdWRlcyhzZXApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IGZpbmRDbG9zaW5nKGxpbmUsIGtleS52YWx1ZUluZGV4LCBvcGVuLCBJTkxJTkVfRklFTERfV1JBUFBFUlNbb3Blbl0pO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBrZXkua2V5LFxuICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgc3RhcnRWYWx1ZToga2V5LnZhbHVlSW5kZXgsXG4gICAgICAgIGVuZDogdmFsdWUuZW5kSW5kZXgsXG4gICAgICAgIHdyYXBwaW5nOiBvcGVuLFxuICAgIH07XG59XG5cbi8qKiBQYXJzZSBhIHRleHR1YWwgaW5saW5lIGZpZWxkIHZhbHVlIGludG8gc29tZXRoaW5nIHdlIGNhbiB3b3JrIHdpdGguICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbmxpbmVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogTGl0ZXJhbCB7XG4gICAgLy8gRW1wdHkgaW5saW5lIHZhbHVlcyAoaS5lLiwgbm8gdGV4dCkgc2hvdWxkIG1hcCB0byBudWxsIHRvIG1hdGNoIGxvbmctdGVybSBEYXRhdmlldyBzZW1hbnRpY3MuXG4gICAgLy8gTnVsbCBpcyBhbHNvIGEgbW9yZSB1bml2ZXJzYWwgdHlwZSB0byBkZWFsIHdpdGggdGhhbiBzdHJpbmdzLCBzaW5jZSBhbGwgZnVuY3Rpb25zIGFjY2VwdCBudWxscy5cbiAgICBpZiAodmFsdWUudHJpbSgpID09IFwiXCIpIHJldHVybiBudWxsO1xuXG4gICAgLy8gVGhlIHN0cmlwcGVkIGxpdGVyYWwgZmllbGQgcGFyc2VyIHVuZGVyc3RhbmRzIGFsbCBvZiB0aGUgbm9uLWFycmF5L25vbi1vYmplY3QgZmllbGRzIGFuZCBjYW4gcGFyc2UgdGhlbSBmb3IgdXMuXG4gICAgLy8gSW5saW5lIGZpZWxkIG9iamVjdHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkOyBpbmxpbmUgYXJyYXkgb2JqZWN0cyBoYXZlIHRvIGJlIGhhbmRsZWQgYnkgdGhlIHBhcnNlclxuICAgIC8vIHNlcGFyYXRlbHkuXG4gICAgbGV0IGlubGluZSA9IFBSSU1JVElWRVMuaW5saW5lRmllbGQucGFyc2UodmFsdWUpO1xuICAgIGlmIChpbmxpbmUuc3RhdHVzKSByZXR1cm4gaW5saW5lLnZhbHVlO1xuICAgIGVsc2UgcmV0dXJuIHZhbHVlO1xufVxuXG4vKiogRXh0cmFjdHMgaW5saW5lIGZpZWxkcyBvZiB0aGUgZm9ybSAnW2tleTo6IHZhbHVlXScgZnJvbSBhIGxpbmUgb2YgdGV4dC4gVGhpcyBpcyBkb25lIGluIGEgcmVsYXRpdmVseVxuICogXCJyb2J1c3RcIiB3YXkgdG8gYXZvaWQgZmFpbGluZyBkdWUgdG8gYmFkIG5lc3Rpbmcgb3Igb3RoZXIgaW50ZXJmZXJpbmcgTWFya2Rvd24gc3ltYm9sczpcbiAqXG4gKiAtIExvb2sgZm9yIGFueSB3cmFwcGVycyAoJ1snIGFuZCAnKCcpIGluIHRoZSBsaW5lLCB0cnlpbmcgdG8gcGFyc2Ugd2hhdGV2ZXIgY29tZXMgYWZ0ZXIgaXQgYXMgYW4gaW5saW5lIGtleTo6LlxuICogLSBJZiBzdWNjZXNzZnVsLCBzY2FuIHVudGlsIHlvdSBmaW5kIGEgbWF0Y2hpbmcgZW5kIGJyYWNrZXQsIGFuZCBwYXJzZSB3aGF0ZXZlciByZW1haW5zIGFzIGFuIGlubGluZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbmxpbmVGaWVsZHMobGluZTogc3RyaW5nLCBpbmNsdWRlVGFza0ZpZWxkczogYm9vbGVhbiA9IGZhbHNlKTogTG9jYWxJbmxpbmVGaWVsZFtdIHtcbiAgICBsZXQgZmllbGRzOiBMb2NhbElubGluZUZpZWxkW10gPSBbXTtcbiAgICBmb3IgKGxldCB3cmFwcGVyIG9mIE9iamVjdC5rZXlzKElOTElORV9GSUVMRF9XUkFQUEVSUykpIHtcbiAgICAgICAgbGV0IGZvdW5kSW5kZXggPSBsaW5lLmluZGV4T2Yod3JhcHBlcik7XG4gICAgICAgIHdoaWxlIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRGaWVsZCA9IGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmUsIGZvdW5kSW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFwYXJzZWRGaWVsZCkge1xuICAgICAgICAgICAgICAgIGZvdW5kSW5kZXggPSBsaW5lLmluZGV4T2Yod3JhcHBlciwgZm91bmRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWVsZHMucHVzaChwYXJzZWRGaWVsZCk7XG4gICAgICAgICAgICBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIsIHBhcnNlZEZpZWxkLmVuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZVRhc2tGaWVsZHMpIGZpZWxkcyA9IGZpZWxkcy5jb25jYXQoZXh0cmFjdFNwZWNpYWxUYXNrRmllbGRzKGxpbmUpKTtcblxuICAgIGZpZWxkcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydCk7XG5cbiAgICBsZXQgZmlsdGVyZWRGaWVsZHM6IExvY2FsSW5saW5lRmllbGRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpID09IDAgfHwgZmlsdGVyZWRGaWVsZHNbZmlsdGVyZWRGaWVsZHMubGVuZ3RoIC0gMV0uZW5kIDwgZmllbGRzW2ldLnN0YXJ0KSB7XG4gICAgICAgICAgICBmaWx0ZXJlZEZpZWxkcy5wdXNoKGZpZWxkc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkRmllbGRzO1xufVxuXG4vKiogVmFsaWRhdGVzIHRoYXQgYSByYXcgZmllbGQgbmFtZSBoYXMgYSB2YWxpZCBmb3JtLiAqL1xuY29uc3QgRlVMTF9MSU5FX0tFWV9QQVJUOiBQLlBhcnNlcjxzdHJpbmc+ID0gUC5hbHQoXG4gICAgUC5yZWdleHAobmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksIFwidVwiKSksXG4gICAgUC5yZWdleHAoL1swLTlcXHB7TGV0dGVyfVxcd1xcc18vLV0rL3UpXG4pXG4gICAgLm1hbnkoKVxuICAgIC5tYXAoKHBhcnRzKSA9PiBwYXJ0cy5qb2luKFwiXCIpKTtcblxuY29uc3QgRlVMTF9MSU5FX0tFWV9QQVJTRVI6IFAuUGFyc2VyPHN0cmluZz4gPSBQLnJlZ2V4cCgvW14wLTlcXHdcXHB7TGV0dGVyfV0qL3UpXG4gICAgLnRoZW4oRlVMTF9MSU5FX0tFWV9QQVJUKVxuICAgIC5za2lwKFAucmVnZXhwKC9bX1xcKn5gXSovdSkpO1xuXG4vKiogQXR0ZW1wdCB0byBleHRyYWN0IGEgZnVsbC1saW5lIGZpZWxkIChLZXk6OiBWYWx1ZSBjb25zdW1pbmcgdGhlIGVudGlyZSBjb250ZW50IGxpbmUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGdWxsTGluZUZpZWxkKHRleHQ6IHN0cmluZyk6IExvY2FsSW5saW5lRmllbGQgfCB1bmRlZmluZWQge1xuICAgIGxldCBzZXAgPSBmaW5kU2VwYXJhdG9yKHRleHQsIDApO1xuICAgIGlmICghc2VwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gV2UgbmVlZCB0byBwb3N0LXByb2Nlc3MgdGhlIGtleSB0byBkcm9wIHVubmVjZXNzYXJ5IG9wZW5pbmcgYW5ub3RhdGlvbnMgYXMgd2VsbCBhc1xuICAgIC8vIGRyb3Agc3Vycm91bmRpbmcgTWFya2Rvd24uXG4gICAgbGV0IHJlYWxLZXkgPSBGVUxMX0xJTkVfS0VZX1BBUlNFUi5wYXJzZShzZXAua2V5KTtcbiAgICBpZiAoIXJlYWxLZXkuc3RhdHVzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiByZWFsS2V5LnZhbHVlLFxuICAgICAgICB2YWx1ZTogdGV4dC5zdWJzdHJpbmcoc2VwLnZhbHVlSW5kZXgpLnRyaW0oKSxcbiAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgIHN0YXJ0VmFsdWU6IHNlcC52YWx1ZUluZGV4LFxuICAgICAgICBlbmQ6IHRleHQubGVuZ3RoLFxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBDUkVBVEVEX0RBVEVfUkVHRVggPSAvXFx1ezI3OTV9XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcbmV4cG9ydCBjb25zdCBEVUVfREFURV9SRUdFWCA9IC8oPzpcXHV7MUY0QzV9fFxcdXsxRjRDNn18XFx1ezFGNUQzfVxcdXtGRTBGfT8pXFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcbmV4cG9ydCBjb25zdCBET05FX0RBVEVfUkVHRVggPSAvXFx1ezI3MDV9XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcbmV4cG9ydCBjb25zdCBTQ0hFRFVMRURfREFURV9SRUdFWCA9IC9bXFx1ezIzRjN9XFx1ezIzMUJ9XVxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn0pL3U7XG5leHBvcnQgY29uc3QgU1RBUlRfREFURV9SRUdFWCA9IC9cXHV7MUY2RUJ9XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfSkvdTtcblxuZXhwb3J0IGNvbnN0IEVNT0pJX1JFR0VYRVMgPSBbXG4gICAgeyByZWdleDogQ1JFQVRFRF9EQVRFX1JFR0VYLCBrZXk6IFwiY3JlYXRlZFwiIH0sXG4gICAgeyByZWdleDogU1RBUlRfREFURV9SRUdFWCwga2V5OiBcInN0YXJ0XCIgfSxcbiAgICB7IHJlZ2V4OiBTQ0hFRFVMRURfREFURV9SRUdFWCwga2V5OiBcInNjaGVkdWxlZFwiIH0sXG4gICAgeyByZWdleDogRFVFX0RBVEVfUkVHRVgsIGtleTogXCJkdWVcIiB9LFxuICAgIHsgcmVnZXg6IERPTkVfREFURV9SRUdFWCwga2V5OiBcImNvbXBsZXRpb25cIiB9LFxuXTtcblxuLyoqIFBhcnNlIHNwZWNpYWwgY29tcGxldGVkL2R1ZS9kb25lIHRhc2sgZmllbGRzIHdoaWNoIGFyZSBtYXJrZWQgdmlhIGVtb2ppLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNwZWNpYWxUYXNrRmllbGRzKGxpbmU6IHN0cmluZyk6IExvY2FsSW5saW5lRmllbGRbXSB7XG4gICAgbGV0IHJlc3VsdHM6IExvY2FsSW5saW5lRmllbGRbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgeyByZWdleCwga2V5IH0gb2YgRU1PSklfUkVHRVhFUykge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMobGluZSk7XG4gICAgICAgIGlmICghbWF0Y2gpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgICAgICBzdGFydFZhbHVlOiBtYXRjaC5pbmRleCArIDEsXG4gICAgICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgd3JhcHBpbmc6IFwiZW1vamktc2hvcnRoYW5kXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xufVxuXG4vKiogU2V0cyBvciByZXBsYWNlcyB0aGUgdmFsdWUgb2YgYW4gaW5saW5lIGZpZWxkOyBpZiB0aGUgdmFsdWUgaXMgJ3VuZGVmaW5lZCcsIGRlbGV0ZXMgdGhlIGtleS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbmxpbmVGaWVsZChzb3VyY2U6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgZXhpc3RpbmcgPSBleHRyYWN0SW5saW5lRmllbGRzKHNvdXJjZSk7XG4gICAgbGV0IGV4aXN0aW5nS2V5cyA9IGV4aXN0aW5nLmZpbHRlcigoZikgPT4gZi5rZXkgPT0ga2V5KTtcblxuICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGUga2V5cyBPUiB0aGUga2V5IGFscmVhZHkgZG9lc24ndCBleGlzdC5cbiAgICBpZiAoZXhpc3RpbmdLZXlzLmxlbmd0aCA+IDIgfHwgKGV4aXN0aW5nS2V5cy5sZW5ndGggPT0gMCAmJiAhdmFsdWUpKSByZXR1cm4gc291cmNlO1xuICAgIGxldCBleGlzdGluZ0tleSA9IGV4aXN0aW5nS2V5c1swXTtcblxuICAgIGxldCBhbm5vdGF0aW9uID0gdmFsdWUgPyBgWyR7a2V5fTo6ICR7dmFsdWV9XWAgOiBcIlwiO1xuICAgIGlmIChleGlzdGluZ0tleSkge1xuICAgICAgICBsZXQgcHJlZml4ID0gc291cmNlLnN1YnN0cmluZygwLCBleGlzdGluZ0tleS5zdGFydCk7XG4gICAgICAgIGxldCBzdWZmaXggPSBzb3VyY2Uuc3Vic3RyaW5nKGV4aXN0aW5nS2V5LmVuZCk7XG5cbiAgICAgICAgaWYgKGFubm90YXRpb24pIHJldHVybiBgJHtwcmVmaXh9JHthbm5vdGF0aW9ufSR7c3VmZml4fWA7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke3ByZWZpeH0ke3N1ZmZpeC50cmltU3RhcnQoKX1gO1xuICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7c291cmNlLnRyaW1FbmQoKX0gJHthbm5vdGF0aW9ufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVtb2ppU2hvcnRoYW5kQ29tcGxldGlvbkZpZWxkKHNvdXJjZTogc3RyaW5nLCB2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBleHRyYWN0SW5saW5lRmllbGRzKHNvdXJjZSwgdHJ1ZSk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gZXhpc3RpbmcuZmlsdGVyKChmKSA9PiBmLmtleSA9PT0gXCJjb21wbGV0aW9uXCIgJiYgZi53cmFwcGluZyA9PT0gXCJlbW9qaS1zaG9ydGhhbmRcIik7XG5cbiAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBhcmUgZHVwbGljYXRlIGtleXMgT1IgdGhlIGtleSBhbHJlYWR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgaWYgKGV4aXN0aW5nS2V5cy5sZW5ndGggPiAyIHx8IChleGlzdGluZ0tleXMubGVuZ3RoID09IDAgJiYgIXZhbHVlKSkgcmV0dXJuIHNvdXJjZTtcblxuICAgIC8qIE5vIHdyYXBwZXIsIGFkZCBvd24gc3BhY2luZyBhdCBzdGFydCAqL1xuICAgIGNvbnN0IGFubm90YXRpb24gPSB2YWx1ZSA/IGAgXHUyNzA1ICR7dmFsdWV9YCA6IFwiXCI7XG4gICAgbGV0IGV4aXN0aW5nS2V5ID0gZXhpc3RpbmdLZXlzWzBdO1xuICAgIGlmIChleGlzdGluZ0tleSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBzb3VyY2Uuc3Vic3RyaW5nKDAsIGV4aXN0aW5nS2V5LnN0YXJ0KTtcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gc291cmNlLnN1YnN0cmluZyhleGlzdGluZ0tleS5lbmQpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4LnRyaW1FbmQoKX0ke2Fubm90YXRpb259JHtzdWZmaXh9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCR7c291cmNlLnRyaW1FbmQoKX0ke2Fubm90YXRpb259YDtcbiAgICB9XG59XG4iLCAiLyoqIE1hcCB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCwgcmV0dXJuaW5nIGEgbmV3IG9iamVjdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBPYmplY3RWYWx1ZXM8ViwgVT4ob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBWPiwgZnVuYzogKHg6IFYpID0+IFUpOiBSZWNvcmQ8c3RyaW5nLCBVPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBVPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iamVjdCkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBmdW5jKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImltcG9ydCB7IExpbmssIEpzb25MaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5cbi8qKiBKU09OLXNlcmlhbGl6ZWQgZXF1aXZhbGVudHMgZm9yIGxpdGVyYWxzLiAqL1xuZXhwb3J0IHR5cGUgSnNvbkxpdGVyYWwgPVxuICAgIHwgYm9vbGVhblxuICAgIHwgbnVtYmVyXG4gICAgfCBzdHJpbmdcbiAgICB8IHsgJF90eXBlOiBcImRhdGVcIjsgdmFsdWU6IHN0cmluZyB9XG4gICAgfCB7ICRfdHlwZTogXCJkdXJhdGlvblwiOyB2YWx1ZTogc3RyaW5nIH1cbiAgICB8IHsgJF90eXBlOiBcImxpbmtcIjsgdmFsdWU6IEpzb25MaW5rIH1cbiAgICB8IEFycmF5PEpzb25MaXRlcmFsPlxuICAgIHwgUmVjb3JkPHN0cmluZywgYW55PlxuICAgIHwgbnVsbDtcblxuZXhwb3J0IG5hbWVzcGFjZSBKc29uQ29udmVyc2lvbiB7XG4gICAgZXhwb3J0IGNvbnN0IE5PT1BfTk9STUFMSVpFUjogKGlucHV0OiBMaXRlcmFsKSA9PiBMaXRlcmFsID0gKGlucHV0KSA9PiBpbnB1dDtcblxuICAgIC8qKiBDb252ZXJ0IGEgbGl0ZXJhbCB2YWx1ZSB0byBhIHNhZmUsIHBlcnNpc3RlbnQgSlNPTiBlcXVpdmFsZW50LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBqc29uKGxpdGVyYWw6IExpdGVyYWwpOiBKc29uTGl0ZXJhbCB7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQgPSBMaXRlcmFscy53cmFwVmFsdWUobGl0ZXJhbCk7XG4gICAgICAgIGlmICghd3JhcHBlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgc3dpdGNoICh3cmFwcGVkPy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXAoSnNvbkNvbnZlcnNpb24uanNvbik7XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcE9iamVjdFZhbHVlcyh3cmFwcGVkLnZhbHVlLCBKc29uQ29udmVyc2lvbi5qc29uKTtcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJF90eXBlOiBcImRhdGVcIiwgdmFsdWU6IHdyYXBwZWQudmFsdWUudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiB0cnVlIH0pIH07XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJsaW5rXCIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KCkgfTtcbiAgICAgICAgICAgIGNhc2UgXCJkdXJhdGlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7ICRfdHlwZTogXCJkdXJhdGlvblwiLCB2YWx1ZTogd3JhcHBlZC52YWx1ZS50b0lTTygpIH07XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEpTT04gbGl0ZXJhbCB0byBpdCdzIGNvcnJlc3BvbmRpbmcgaHlkcmF0ZWQgdmFsdWUsIG9wdGlvbmFsbHkgYXBwbHlpbmdcbiAgICAgKiBhIG5vcm1hbGl6YXRpb24gc3RlcCB0byB0aGUgcmVzdWx0aW5nIHZhbHVlIGFuZCBhbnkgbGl0ZXJhbHMgY29udGFpbmVkIHdpdGhpbiBpdFxuICAgICAqIChzdWNoIGFzIGlmIHRoZSBsaXRlcmFsIGlzIGEgbGlzdCBvciBvYmplY3QpLlxuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB2YWx1ZShqc29uOiBKc29uTGl0ZXJhbCwgbm9ybWFsaXplcjogKGlucHV0OiBMaXRlcmFsKSA9PiBMaXRlcmFsID0gTk9PUF9OT1JNQUxJWkVSKTogTGl0ZXJhbCB7XG4gICAgICAgIGlmIChqc29uID09PSBudWxsIHx8IGpzb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVyKGpzb24ubWFwKChpbnB1dCkgPT4gSnNvbkNvbnZlcnNpb24udmFsdWUoaW5wdXQsIG5vcm1hbGl6ZXIpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmICghKFwiJF90eXBlXCIgaW4ganNvbikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcE9iamVjdFZhbHVlcyhqc29uLCAodikgPT4gSnNvbkNvbnZlcnNpb24udmFsdWUodiBhcyBKc29uTGl0ZXJhbCwgbm9ybWFsaXplcikpO1xuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0ganNvbltcIiRfdHlwZVwiXTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVyKERhdGVUaW1lLmZyb21JU08oanNvbi52YWx1ZSwgeyBzZXRab25lOiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoRHVyYXRpb24uZnJvbUlTTyhqc29uLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGpzb24udmFsdWUpKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBzZXJpYWxpemVkIHR5cGUgJyR7dHlwZX0nIWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbWl0aXZlIHR5cGUsIHJldHVybiBhcyBpcy5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZXIoanNvbiBhcyBMaXRlcmFsKTtcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGluZGV4YWJsZXNcbiAqL1xuaW1wb3J0IHsgTGluaywgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBnZXRGaWxlVGl0bGUgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcbmltcG9ydCB7XG4gICAgRklMRV9UWVBFLFxuICAgIEZpbGUsXG4gICAgSW5kZXhhYmxlLFxuICAgIExJTktBQkxFX1RZUEUsXG4gICAgTElOS0JFQVJJTkdfVFlQRSxcbiAgICBMaW5rYWJsZSxcbiAgICBMaW5rYmVhcmluZyxcbiAgICBUQUdHQUJMRV9UWVBFLFxuICAgIFRhZ2dhYmxlLFxufSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHtcbiAgICBFeHRyYWN0b3JzLFxuICAgIEZJRUxEQkVBUklOR19UWVBFLFxuICAgIEZpZWxkLFxuICAgIEZpZWxkRXh0cmFjdG9yLFxuICAgIEZpZWxkYmVhcmluZyxcbiAgICBGaWVsZGJlYXJpbmdzLFxufSBmcm9tIFwiLi4vLi4vZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgSW5saW5lRmllbGQsIGpzb25JbmxpbmVGaWVsZCwgdmFsdWVJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQge1xuICAgIExpbmVTcGFuLFxuICAgIEpzb25NYXJrZG93blBhZ2UsXG4gICAgSnNvbk1hcmtkb3duU2VjdGlvbixcbiAgICBKc29uTWFya2Rvd25CbG9jayxcbiAgICBKc29uTWFya2Rvd25MaXN0QmxvY2ssXG4gICAgSnNvbk1hcmtkb3duTGlzdEl0ZW0sXG4gICAgSnNvbk1hcmtkb3duVGFza0l0ZW0sXG4gICAgSnNvbk1hcmtkb3duRGF0YWJsb2NrIGFzIEpzb25NYXJrZG93bkRhdGFibG9jayxcbiAgICBKc29uTWFya2Rvd25Db2RlYmxvY2ssXG4gICAgSnNvbkZyb250bWF0dGVyRW50cnksXG59IGZyb20gXCIuL2pzb24vbWFya2Rvd25cIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5pbXBvcnQgeyBKc29uQ29udmVyc2lvbiB9IGZyb20gXCIuL2pzb24vY29tbW9uXCI7XG5cbi8qKiBBIG1hcmtkb3duIGZpbGUgaW4gdGhlIHZhdWx0OyB0aGUgc291cmNlIG9mIG1vc3QgbWV0YWRhdGEuICovXG5leHBvcnQgY2xhc3MgTWFya2Rvd25QYWdlIGltcGxlbWVudHMgRmlsZSwgTGlua2JlYXJpbmcsIFRhZ2dhYmxlLCBJbmRleGFibGUsIEZpZWxkYmVhcmluZyB7XG4gICAgLyoqIEFsbCBvZiB0aGUgdHlwZXMgdGhhdCBhIG1hcmtkb3duIGZpbGUgaXMuICovXG4gICAgc3RhdGljIFRZUEVTID0gW0ZJTEVfVFlQRSwgXCJtYXJrZG93blwiLCBcInBhZ2VcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgTElOS0JFQVJJTkdfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgLy8gVXNlIHN0YXRpYyB0eXBlcyBmb3IgYWxsIG1hcmtkb3duIGZpbGVzLlxuICAgICR0eXBlczogc3RyaW5nW10gPSBNYXJrZG93blBhZ2UuVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIlBhZ2VcIjtcblxuICAgIC8vIE1hcmtkb3duIGZpbGUgSURzIGFyZSBhbHdheXMganVzdCB0aGUgZnVsbCBwYXRoLlxuICAgIGdldCAkaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cbiAgICAvLyBUaGUgZmlsZSBvZiBhIGZpbGUgaXMuLi4gaXQncyBmaWxlLlxuICAgIGdldCAkZmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBhdGg7XG4gICAgfVxuXG4gICAgLyoqIEZyb250bWF0dGVyIHZhbHVlcyBpbiB0aGUgZmlsZSwgaWYgcHJlc2VudC4gTWFwcyBsb3dlciBjYXNlIGZyb250bWF0dGVyIGtleSAtPiBlbnRyeS4gKi9cbiAgICAkZnJvbnRtYXR0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBGcm9udG1hdHRlckVudHJ5PjtcbiAgICAvKiogTWFwIG9mIGFsbCBkaXN0aW5jdCBpbmxpbmUgZmllbGRzIGluIHRoZSBkb2N1bWVudC4gTWFwcyBsb3dlciBjYXNlIGtleSBuYW1lIC0+IGZ1bGwgbWV0YWRhdGEuICovXG4gICAgJGluZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBJbmxpbmVGaWVsZD47XG5cbiAgICAvKiogVGhlIHBhdGggdGhpcyBmaWxlIGV4aXN0cyBhdC4gKi9cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgY3JlYXRlZC4gKi9cbiAgICAkY3RpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgbW9kaWZpZWQuICovXG4gICAgJG10aW1lOiBEYXRlVGltZTtcbiAgICAvKiogVGhlIGV4dGVuc2lvbjsgZm9yIG1hcmtkb3duIGZpbGVzLCBhbG1vc3QgYWx3YXlzICcubWQnLiAqL1xuICAgICRleHRlbnNpb246IHN0cmluZztcbiAgICAvKiogT2JzaWRpYW4tcHJvdmlkZWQgc2l6ZSBvZiB0aGlzIHBhZ2UgaW4gYnl0ZXMuICovXG4gICAgJHNpemU6IG51bWJlciA9IDA7XG4gICAgLyoqIFRoZSBmdWxsIGV4dGVudCBvZiB0aGUgZmlsZSAoc3RhcnQgMCwgZW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUuKSAqL1xuICAgICRwb3NpdGlvbjogTGluZVNwYW47XG4gICAgLyoqIFRoZSBleGFjdCB0YWdzIGluIHRoZSBmaWxlLiAqL1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiogQWxsIGxpbmtzIGluIHRoZSBmaWxlLiAqL1xuICAgICRsaW5rczogTGlua1tdO1xuICAgIC8qKlxuICAgICAqIEFsbCBjaGlsZCBtYXJrZG93biBzZWN0aW9ucyBvZiB0aGlzIG1hcmtkb3duIGZpbGUuIFRoZSBpbml0aWFsIHNlY3Rpb24gYmVmb3JlIGFueSBjb250ZW50IGlzIHNwZWNpYWwgYW5kIGlzXG4gICAgICogbmFtZWQgd2l0aCB0aGUgdGl0bGUgb2YgdGhlIGZpbGUuXG4gICAgICovXG4gICAgJHNlY3Rpb25zOiBNYXJrZG93blNlY3Rpb25bXSA9IFtdO1xuXG4gICAgLyoqIENyZWF0ZSBhIG1hcmtkb3duIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gcmF3IHZhbHVlcy4gKi9cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25NYXJrZG93blBhZ2UsIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyID0gTk9PUF9OT1JNQUxJWkVSKTogTWFya2Rvd25QYWdlIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSByYXcuJHNlY3Rpb25zLm1hcCgoc2VjdCkgPT4gTWFya2Rvd25TZWN0aW9uLmZyb20oc2VjdCwgcmF3LiRwYXRoLCBub3JtYWxpemVyKSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93blBhZ2Uoe1xuICAgICAgICAgICAgJHBhdGg6IHJhdy4kcGF0aCxcbiAgICAgICAgICAgICRmcm9udG1hdHRlcjogcmF3LiRmcm9udG1hdHRlclxuICAgICAgICAgICAgICAgID8gbWFwT2JqZWN0VmFsdWVzKHJhdy4kZnJvbnRtYXR0ZXIsIChmbSkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVGcm9udG1hdHRlckVudHJ5KGZtKSwgbm9ybWFsaXplcikpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhyYXcuJGluZmllbGRzLCAoZmllbGQpID0+IG5vcm1hbGl6ZUxpbmtzKHZhbHVlSW5saW5lRmllbGQoZmllbGQpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkY3RpbWU6IERhdGVUaW1lLmZyb21NaWxsaXMocmF3LiRjdGltZSksXG4gICAgICAgICAgICAkbXRpbWU6IERhdGVUaW1lLmZyb21NaWxsaXMocmF3LiRtdGltZSksXG4gICAgICAgICAgICAkZXh0ZW5zaW9uOiByYXcuJGV4dGVuc2lvbixcbiAgICAgICAgICAgICRzaXplOiByYXcuJHNpemUsXG4gICAgICAgICAgICAkcG9zaXRpb246IHJhdy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogcmF3LiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiByYXcuJGxpbmtzLm1hcCgobGluaykgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobGluaykpKSxcbiAgICAgICAgICAgICRzZWN0aW9uczogc2VjdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxNYXJrZG93blBhZ2U+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBkb2N1bWVudC4gKi9cbiAgICBnZXQgJGxpbmVDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvc2l0aW9uLmVuZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGZpbGUuICovXG4gICAgZ2V0ICRuYW1lKCkge1xuICAgICAgICByZXR1cm4gZ2V0RmlsZVRpdGxlKHRoaXMuJHBhdGgpO1xuICAgIH1cblxuICAgIC8qKiBBIGxpbmsgdG8gdGhpcyBmaWxlLiAqL1xuICAgIGdldCAkbGluaygpIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZSh0aGlzLiRwYXRoKTtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCk6IEZpZWxkW10ge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25QYWdlLkZJRUxEX0RFRih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBmdWxsIGZpZWxkIGRlZmluaXRpb24gZm9yIHRoZSBnaXZlbiBmaWVsZC4gKi9cbiAgICBwdWJsaWMgZmllbGQoa2V5OiBzdHJpbmcpOiBGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBNYXJrZG93blBhZ2UuRklFTERfREVGKHRoaXMsIGtleSk/LlswXTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkLiAqL1xuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQ29udmVydCB0aGlzIHBhZ2UgaW50byBpdCdzIHBhcnRpYWwgcmVwcmVzZW50YXRpb24gZm9yIHNhdmluZy4gKi9cbiAgICBwdWJsaWMganNvbigpOiBKc29uTWFya2Rvd25QYWdlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRwYXRoOiB0aGlzLiRwYXRoLFxuICAgICAgICAgICAgJGZyb250bWF0dGVyOiB0aGlzLiRmcm9udG1hdHRlciA/IG1hcE9iamVjdFZhbHVlcyh0aGlzLiRmcm9udG1hdHRlciwganNvbkZyb250bWF0dGVyRW50cnkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJGluZmllbGRzOiBtYXBPYmplY3RWYWx1ZXModGhpcy4kaW5maWVsZHMsIGpzb25JbmxpbmVGaWVsZCksXG4gICAgICAgICAgICAkY3RpbWU6IHRoaXMuJGN0aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkbXRpbWU6IHRoaXMuJG10aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkZXh0ZW5zaW9uOiB0aGlzLiRleHRlbnNpb24sXG4gICAgICAgICAgICAkc2l6ZTogdGhpcy4kc2l6ZSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogdGhpcy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy4kbGlua3MubWFwKChsaW5rKSA9PiBsaW5rLnRvT2JqZWN0KCkpLFxuICAgICAgICAgICAgJHNlY3Rpb25zOiB0aGlzLiRzZWN0aW9ucy5tYXAoKHNlY3QpID0+IHNlY3QuanNvbigpKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duUGFnZT4gPSBFeHRyYWN0b3JzLm1lcmdlKFxuICAgICAgICBFeHRyYWN0b3JzLmludHJpbnNpY3MoKSxcbiAgICAgICAgRXh0cmFjdG9ycy5mcm9udG1hdHRlcigoZikgPT4gZi4kZnJvbnRtYXR0ZXIpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpXG4gICAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hcmtkb3duU2VjdGlvbiBpbXBsZW1lbnRzIEluZGV4YWJsZSwgVGFnZ2FibGUsIExpbmthYmxlLCBMaW5rYmVhcmluZywgRmllbGRiZWFyaW5nIHtcbiAgICAvKiogQWxsIG9mIHRoZSB0eXBlcyB0aGF0IGEgbWFya2Rvd24gc2VjdGlvbiBpcy4gKi9cbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcInNlY3Rpb25cIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgTElOS0JFQVJJTkdfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgLyoqIFBhdGggb2YgdGhlIGZpbGUgdGhhdCB0aGlzIHNlY3Rpb24gaXMgaW4uICovXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duU2VjdGlvbi5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiU2VjdGlvblwiO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRmaWxlOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIGluZGV4IG9mIHRoaXMgc2VjdGlvbiBpbiB0aGUgZmlsZS4gKi9cbiAgICAkb3JkaW5hbDogbnVtYmVyO1xuICAgIC8qKiBUaGUgdGl0bGUgb2YgdGhlIHNlY3Rpb247IHRoZSByb290IChpbXBsaWNpdCkgc2VjdGlvbiB3aWxsIGhhdmUgdGhlIHRpdGxlIG9mIHRoZSBwYWdlLiAqL1xuICAgICR0aXRsZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgaW5kZW50YXRpb24gbGV2ZWwgb2YgdGhlIHNlY3Rpb24gKDEgLSA2KS4gKi9cbiAgICAkbGV2ZWw6IG51bWJlcjtcbiAgICAvKiogVGhlIHNwYW4gb2YgbGluZXMgaW5kaWNhdGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNlY3Rpb24uICovXG4gICAgJHBvc2l0aW9uOiBMaW5lU3BhbjtcbiAgICAvKiogQWxsIHRhZ3Mgb24gdGhlIGZpbGUuICovXG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qKiBBbGwgbGlua3MgaW4gdGhlIGZpbGUuICovXG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgLyoqIEFsbCBvZiB0aGUgbWFya2Rvd24gYmxvY2tzIGluIHRoaXMgc2VjdGlvbi4gKi9cbiAgICAkYmxvY2tzOiBNYXJrZG93bkJsb2NrW107XG4gICAgLyoqIE1hcCBvZiBhbGwgZGlzdGluY3QgaW5saW5lIGZpZWxkcyBpbiB0aGUgZG9jdW1lbnQsIGZyb20ga2V5IG5hbWUgLT4gbWV0YWRhdGEuICovXG4gICAgJGluZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBJbmxpbmVGaWVsZD47XG5cbiAgICAvKiogQ29udmVydCByYXcgbWFya2Rvd24gc2VjdGlvbiBkYXRhIHRvIHRoZSBhcHByb3ByaWF0ZSBjbGFzcy4gKi9cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25NYXJrZG93blNlY3Rpb24sIGZpbGU6IHN0cmluZywgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVIpOiBNYXJrZG93blNlY3Rpb24ge1xuICAgICAgICBjb25zdCBibG9ja3MgPSByYXcuJGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiBNYXJrZG93bkJsb2NrLmZyb20oYmxvY2ssIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93blNlY3Rpb24oe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duU2VjdGlvbi5yZWFkYWJsZUlkKGZpbGUsIHJhdy4kdGl0bGUsIHJhdy4kb3JkaW5hbCksXG4gICAgICAgICAgICAkb3JkaW5hbDogcmF3LiRvcmRpbmFsLFxuICAgICAgICAgICAgJHRpdGxlOiByYXcuJHRpdGxlLFxuICAgICAgICAgICAgJGxldmVsOiByYXcuJGxldmVsLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiByYXcuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJHRhZ3M6IHJhdy4kdGFncyxcbiAgICAgICAgICAgICRsaW5rczogcmF3LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkYmxvY2tzOiBibG9ja3MsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhyYXcuJGluZmllbGRzLCAoaSkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVJbmxpbmVGaWVsZChpKSwgbm9ybWFsaXplcikpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25TZWN0aW9uPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgc2VjdGlvbi4gKi9cbiAgICBnZXQgJGxpbmVDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcG9zaXRpb24uZW5kIC0gdGhpcy4kcG9zaXRpb24uc3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqIEFsaWFzIGZvciB0aXRsZSB3aGljaCBhbGxvd3Mgc2VhcmNoaW5nIG92ZXIgcGFnZXMgYW5kIHNlY3Rpb25zIGJ5ICduYW1lJy4gKi9cbiAgICBnZXQgJG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHRpdGxlO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBsaW5rIHRvIHRoaXMgc2VjdGlvbi4gKi9cbiAgICBnZXQgJGxpbmsoKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmhlYWRlcih0aGlzLiRmaWxlLCB0aGlzLiR0aXRsZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbCBvZiB0aGUgaW5kZXhlZCBmaWVsZHMgaW4gdGhpcyBvYmplY3QuICovXG4gICAgZ2V0IGZpZWxkcygpOiBGaWVsZFtdIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duU2VjdGlvbi5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGEgc3BlY2lmaWMgZmllbGQgYnkga2V5LiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZyk6IEZpZWxkIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duU2VjdGlvbi5GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duU2VjdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkb3JkaW5hbDogdGhpcy4kb3JkaW5hbCxcbiAgICAgICAgICAgICR0aXRsZTogdGhpcy4kdGl0bGUsXG4gICAgICAgICAgICAkbGV2ZWw6IHRoaXMuJGxldmVsLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiB0aGlzLiRwb3NpdGlvbixcbiAgICAgICAgICAgICR0YWdzOiB0aGlzLiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLiRsaW5rcy5tYXAoKGxpbmspID0+IGxpbmsudG9PYmplY3QoKSksXG4gICAgICAgICAgICAkYmxvY2tzOiB0aGlzLiRibG9ja3MubWFwKChibG9jaykgPT4gYmxvY2suanNvbigpKSxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGluZmllbGRzLCBqc29uSW5saW5lRmllbGQpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8TWFya2Rvd25TZWN0aW9uPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpXG4gICAgKTtcblxuICAgIC8qKiBHZW5lcmF0ZSBhIHJlYWRhYmxlIElEIGZvciB0aGlzIHNlY3Rpb24gdXNpbmcgdGhlIGZpcnN0IDggY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGFuZCB0aGUgb3JkaW5hbC4gKi9cbiAgICBzdGF0aWMgcmVhZGFibGVJZChmaWxlOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIG9yZGluYWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpcnN0OCA9IHRpdGxlLnN1YnN0cmluZygwLCBNYXRoLm1pbih0aXRsZS5sZW5ndGgsIDgpKS5yZXBsYWNlKC9bXkEtWmEtejAtOS1fXSsvZ2ksIFwiLVwiKTtcblxuICAgICAgICByZXR1cm4gYCR7ZmlsZX0vc2VjdGlvbiR7b3JkaW5hbH0vJHtmaXJzdDh9YDtcbiAgICB9XG59XG5cbi8qKiBCYXNlIGNsYXNzIGZvciBhbGwgbWFya2Rvd24gYmxvY2tzLiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duQmxvY2sgaW1wbGVtZW50cyBJbmRleGFibGUsIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbXCJtYXJrZG93blwiLCBcImJsb2NrXCIsIExJTktCRUFSSU5HX1RZUEUsIFRBR0dBQkxFX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBNYXJrZG93bkJsb2NrLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJCbG9ja1wiO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRmaWxlOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIGluZGV4IG9mIHRoaXMgYmxvY2sgaW4gdGhlIGZpbGUuICovXG4gICAgJG9yZGluYWw6IG51bWJlcjtcbiAgICAvKiogVGhlIHBvc2l0aW9uL2V4dGVudCBvZiB0aGUgYmxvY2suICovXG4gICAgJHBvc2l0aW9uOiBMaW5lU3BhbjtcbiAgICAvKiogQWxsIHRhZ3Mgb24gdGhlIGJsb2NrLiAqL1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiogQWxsIGxpbmtzIGluIHRoZSBmaWxlLiAqL1xuICAgICRsaW5rczogTGlua1tdO1xuICAgIC8qKiBNYXAgb2YgYWxsIGRpc3RpbmN0IGlubGluZSBmaWVsZHMgaW4gdGhlIGRvY3VtZW50LCBmcm9tIGtleSBuYW1lIC0+IG1ldGFkYXRhLiAqL1xuICAgICRpbmZpZWxkczogUmVjb3JkPHN0cmluZywgSW5saW5lRmllbGQ+O1xuICAgIC8qKiBJZiBwcmVzZW50LCB0aGUgZGlzdGluY3QgYmxvY2sgSUQgZm9yIHRoaXMgYmxvY2suICovXG4gICAgJGJsb2NrSWQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSB0eXBlIG9mIGJsb2NrIC0gcGFyYWdyYXBoLCBsaXN0LCBhbmQgc28gb24uICovXG4gICAgJHR5cGU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tKG9iamVjdDogSnNvbk1hcmtkb3duQmxvY2ssIGZpbGU6IHN0cmluZywgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVIpOiBNYXJrZG93bkJsb2NrIHtcbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXJrZG93bkxpc3RCbG9jay5mcm9tKG9iamVjdCBhcyBKc29uTWFya2Rvd25MaXN0QmxvY2ssIGZpbGUsIG5vcm1hbGl6ZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC4kdHlwZSA9PT0gXCJkYXRhYmxvY2tcIikge1xuICAgICAgICAgICAgcmV0dXJuIE1hcmtkb3duRGF0YWJsb2NrLmZyb20ob2JqZWN0IGFzIEpzb25NYXJrZG93bkRhdGFibG9jaywgZmlsZSwgbm9ybWFsaXplcik7XG4gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LiR0eXBlID09PSBcImNvZGVibG9ja1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gTWFya2Rvd25Db2RlYmxvY2suZnJvbShvYmplY3QgYXMgSnNvbk1hcmtkb3duQ29kZWJsb2NrLCBmaWxlLCBub3JtYWxpemVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25CbG9jayh7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogTWFya2Rvd25CbG9jay5yZWFkYWJsZUlkKGZpbGUsIG9iamVjdC4kb3JkaW5hbCksXG4gICAgICAgICAgICAkb3JkaW5hbDogb2JqZWN0LiRvcmRpbmFsLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiBvYmplY3QuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJHRhZ3M6IG9iamVjdC4kdGFncyxcbiAgICAgICAgICAgICRsaW5rczogb2JqZWN0LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhvYmplY3QuJGluZmllbGRzLCAoaSkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVJbmxpbmVGaWVsZChpKSwgbm9ybWFsaXplcikpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgICAgICR0eXBlOiBvYmplY3QuJHR5cGUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duQmxvY2s+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgLyoqIElmIHRoaXMgYmxvY2sgaGFzIGEgYmxvY2sgSUQsIHRoZSBsaW5rIHRvIHRoaXMgYmxvY2suICovXG4gICAgZ2V0ICRsaW5rKCk6IExpbmsgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy4kYmxvY2tJZCkgcmV0dXJuIExpbmsuYmxvY2sodGhpcy4kZmlsZSwgdGhpcy4kYmxvY2tJZCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25CbG9jay5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGEgc3BlY2lmaWMgZmllbGQgYnkga2V5LiAqL1xuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25CbG9jay5GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duQmxvY2sge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJG9yZGluYWw6IHRoaXMuJG9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IHRoaXMuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMuJHRhZ3MsXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLm1hcCgobCkgPT4gbC50b09iamVjdCgpKSxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGluZmllbGRzLCBqc29uSW5saW5lRmllbGQpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IHRoaXMuJGJsb2NrSWQsXG4gICAgICAgICAgICAkdHlwZTogdGhpcy4kdHlwZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxNYXJrZG93bkJsb2NrPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpXG4gICAgKTtcblxuICAgIC8qKiBHZW5lcmF0ZSBhIHJlYWRhYmxlIElEIGZvciB0aGlzIGJsb2NrIHVzaW5nIHRoZSBvcmRpbmFsIG9mIHRoZSBibG9jay4gKi9cbiAgICBzdGF0aWMgcmVhZGFibGVJZChmaWxlOiBzdHJpbmcsIG9yZGluYWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtmaWxlfS9ibG9jayR7b3JkaW5hbH1gO1xuICAgIH1cbn1cblxuLyoqIFNwZWNpYWwgYmxvY2sgZm9yIG1hcmtkb3duIGxpc3RzIChvZiBlaXRoZXIgcGxhaW4gbGlzdCBlbnRyaWVzIG9yIHRhc2tzKS4gKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93bkxpc3RCbG9jayBleHRlbmRzIE1hcmtkb3duQmxvY2sgaW1wbGVtZW50cyBUYWdnYWJsZSwgTGlua2JlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcIm1hcmtkb3duXCIsIFwiYmxvY2tcIiwgXCJibG9jay1saXN0XCIsIFRBR0dBQkxFX1RZUEUsIExJTktCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duTGlzdEJsb2NrLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJMaXN0IEJsb2NrXCI7XG5cbiAgICAvKiogVGhlIGxpc3QgaXRlbXMgaW5zaWRlIG9mIHRoaXMgYmxvY2suICovXG4gICAgJGVsZW1lbnRzOiBNYXJrZG93bkxpc3RJdGVtW107XG5cbiAgICAvKiogQ3JlYXRlIGEgbGlzdCBibG9jayBmcm9tIGEgc2VyaWFsaXplZCB2YWx1ZS4gKi9cbiAgICBzdGF0aWMgZnJvbShcbiAgICAgICAgb2JqZWN0OiBKc29uTWFya2Rvd25MaXN0QmxvY2ssXG4gICAgICAgIGZpbGU6IHN0cmluZyxcbiAgICAgICAgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVJcbiAgICApOiBNYXJrZG93bkxpc3RCbG9jayB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gb2JqZWN0LiRlbGVtZW50cy5tYXAoKGVsZW0pID0+IE1hcmtkb3duTGlzdEl0ZW0uZnJvbShlbGVtLCBmaWxlLCBub3JtYWxpemVyKSk7XG4gICAgICAgIHJldHVybiBuZXcgTWFya2Rvd25MaXN0QmxvY2soe1xuICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBzaGFyZWQgd2l0aCBvdGhlciBibG9ja3MsIHNob3VsZCBwcm9iYWJseSBiZSBmaXhlZC5cbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkJsb2NrLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRvcmRpbmFsKSxcbiAgICAgICAgICAgICRvcmRpbmFsOiBvYmplY3QuJG9yZGluYWwsXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkdGFnczogb2JqZWN0LiR0YWdzLFxuICAgICAgICAgICAgJGxpbmtzOiBvYmplY3QuJGxpbmtzLm1hcCgobCkgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobCkpKSxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkYmxvY2tJZDogb2JqZWN0LiRibG9ja0lkLFxuICAgICAgICAgICAgJGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgICAgICAgICR0eXBlOiBcImxpc3RcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duTGlzdEJsb2NrIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3VwZXIuanNvbigpLCB7XG4gICAgICAgICAgICAkZWxlbWVudHM6IHRoaXMuJGVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gZWxlbS5qc29uKCkpLFxuICAgICAgICB9KSBhcyBKc29uTWFya2Rvd25MaXN0QmxvY2s7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8TWFya2Rvd25MaXN0QmxvY2s+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cbn1cblxuLyoqIEEgYmxvY2sgY29udGFpbmluZyBtYXJrZG93biBjb2RlLiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duQ29kZWJsb2NrIGV4dGVuZHMgTWFya2Rvd25CbG9jayBpbXBsZW1lbnRzIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nLCBMaW5rYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJibG9ja1wiLCBcImNvZGVibG9ja1wiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQkVBUklOR19UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gTWFya2Rvd25Db2RlYmxvY2suVFlQRVM7XG4gICAgJGxhbmd1YWdlczogc3RyaW5nW107XG4gICAgJGNvbnRlbnRQb3NpdGlvbjogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9O1xuICAgICRzdHlsZTogXCJmZW5jZWRcIiB8IFwiaW5kZW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxNYXJrZG93bkNvZGVibG9jaz4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb20oXG4gICAgICAgIG9iamVjdDogSnNvbk1hcmtkb3duQ29kZWJsb2NrLFxuICAgICAgICBmaWxlOiBzdHJpbmcsXG4gICAgICAgIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyID0gTk9PUF9OT1JNQUxJWkVSXG4gICAgKTogTWFya2Rvd25Db2RlYmxvY2sge1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duQ29kZWJsb2NrKHtcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkNvZGVibG9jay5yZWFkYWJsZUlkKGZpbGUsIG9iamVjdC4kcG9zaXRpb24uc3RhcnQpLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiBvYmplY3QuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJG9yZGluYWw6IG9iamVjdC4kb3JkaW5hbCxcbiAgICAgICAgICAgICR0eXBlbmFtZTogXCJDb2RlYmxvY2tcIixcbiAgICAgICAgICAgICR0eXBlOiBcImNvZGVibG9ja1wiLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgICAgICRsYW5ndWFnZXM6IG9iamVjdC4kbGFuZ3VhZ2VzLFxuICAgICAgICAgICAgJGxpbmtzOiBvYmplY3QuJGxpbmtzLm1hcCgobGluaykgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobGluaykpKSxcbiAgICAgICAgICAgICR0YWdzOiBvYmplY3QuJHRhZ3MsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhvYmplY3QuJGluZmllbGRzLCB2YWx1ZUlubGluZUZpZWxkKSxcbiAgICAgICAgICAgICRjb250ZW50UG9zaXRpb246IG9iamVjdC4kY29udGVudFBvc2l0aW9uLFxuICAgICAgICAgICAgJHN0eWxlOiBvYmplY3QuJHN0eWxlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQWxsIG9mIHRoZSBpbmRleGVkIGZpZWxkcyBpbiB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gTWFya2Rvd25Db2RlYmxvY2suU1VCX0ZJRUxEX0RFRih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBmaWVsZCBieSBrZXkuICovXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkNvZGVibG9jay5TVUJfRklFTERfREVGKHRoaXMsIGtleSk/LlswXSA/PyBGaWVsZGJlYXJpbmdzLmdldFdpdGhEZWZhdWx0KHRoaXMsIGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlKGtleTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKGtleSk/LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25NYXJrZG93bkNvZGVibG9jayB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN1cGVyLmpzb24oKSwge1xuICAgICAgICAgICAgJGxhbmd1YWdlczogdGhpcy4kbGFuZ3VhZ2VzLFxuICAgICAgICAgICAgJGNvbnRlbnRQb3NpdGlvbjogdGhpcy4kY29udGVudFBvc2l0aW9uLFxuICAgICAgICAgICAgJHN0eWxlOiB0aGlzLiRzdHlsZSxcbiAgICAgICAgfSkgYXMgSnNvbk1hcmtkb3duQ29kZWJsb2NrO1xuICAgIH1cblxuICAgIHN0YXRpYyByZWFkYWJsZUlkKGZpbGU6IHN0cmluZywgbGluZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2ZpbGV9L2NvZGVibG9jayR7bGluZX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyBTVUJfRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxNYXJrZG93bkNvZGVibG9jaz4gPSBFeHRyYWN0b3JzLm1lcmdlPE1hcmtkb3duQ29kZWJsb2NrPihcbiAgICAgICAgTWFya2Rvd25CbG9jay5GSUVMRF9ERUZcbiAgICApO1xufVxuXG4vKiogQSBkYXRhLWFubm90YXRlZCBZQU1MIGNvZGVibG9jay4gKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93bkRhdGFibG9jayBleHRlbmRzIE1hcmtkb3duQmxvY2sgaW1wbGVtZW50cyBJbmRleGFibGUsIEZpZWxkYmVhcmluZywgTGlua2JlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcIm1hcmtkb3duXCIsIFwiYmxvY2tcIiwgXCJkYXRhYmxvY2tcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0JFQVJJTkdfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duRGF0YWJsb2NrLlRZUEVTO1xuICAgICRkYXRhOiBSZWNvcmQ8c3RyaW5nLCBGcm9udG1hdHRlckVudHJ5PjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duRGF0YWJsb2NrPikge1xuICAgICAgICBzdXBlcihpbml0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShcbiAgICAgICAgb2JqZWN0OiBKc29uTWFya2Rvd25EYXRhYmxvY2ssXG4gICAgICAgIGZpbGU6IHN0cmluZyxcbiAgICAgICAgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVJcbiAgICApOiBNYXJrZG93bkRhdGFibG9jayB7XG4gICAgICAgIC8vIERhdGFibG9ja3MgYXJlIGJhc2VkIG9uIHdoYXQgaXMgZXNzZW50aWFsbHkganVzdCBmcm9udG1hdHRlcjsgd2UgY2FuIGFwcGx5XG4gICAgICAgIC8vIHRoZSBzYW1lIG5vcm1hbGl6YXRpb24gbG9naWMgdG8gdGhlbS5cbiAgICAgICAgY29uc3Qgbm9ybWRhdGEgPSBub3JtYWxpemVMaW5rcyhtYXBPYmplY3RWYWx1ZXMob2JqZWN0LiRkYXRhLCB2YWx1ZUZyb250bWF0dGVyRW50cnkpLCBub3JtYWxpemVyKTtcbiAgICAgICAgY29uc3QgbGlua3MgPSBnYXRoZXJMaW5rcyhub3JtZGF0YSk7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBnYXRoZXJUYWdzKG5vcm1kYXRhKTtcblxuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duRGF0YWJsb2NrKHtcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkRhdGFibG9jay5yZWFkYWJsZUlkKGZpbGUsIG9iamVjdC4kcG9zaXRpb24uc3RhcnQpLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiBvYmplY3QuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJGluZmllbGRzOiB7fSxcbiAgICAgICAgICAgICRvcmRpbmFsOiBvYmplY3QuJG9yZGluYWwsXG4gICAgICAgICAgICAkZGF0YTogbm9ybWRhdGEsXG4gICAgICAgICAgICAkbGlua3M6IGxpbmtzLFxuICAgICAgICAgICAgJHR5cGVuYW1lOiBcIkRhdGFibG9ja1wiLFxuICAgICAgICAgICAgJHRhZ3M6IHRhZ3MsXG4gICAgICAgICAgICAkdHlwZTogXCJkYXRhYmxvY2tcIixcbiAgICAgICAgICAgICRibG9ja0lkOiBvYmplY3QuJGJsb2NrSWQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBBbGwgb2YgdGhlIGluZGV4ZWQgZmllbGRzIGluIHRoaXMgb2JqZWN0LiAqL1xuICAgIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBNYXJrZG93bkRhdGFibG9jay5TVUJfRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBGZXRjaCBhIHNwZWNpZmljIGZpZWxkIGJ5IGtleS4gKi9cbiAgICBwdWJsaWMgZmllbGQoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duRGF0YWJsb2NrLlNVQl9GSUVMRF9ERUYodGhpcywga2V5KT8uWzBdID8/IEZpZWxkYmVhcmluZ3MuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWUoa2V5OiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoa2V5KT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbk1hcmtkb3duRGF0YWJsb2NrIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3VwZXIuanNvbigpLCB7XG4gICAgICAgICAgICAkZGF0YTogbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGRhdGEsIGpzb25Gcm9udG1hdHRlckVudHJ5KSxcbiAgICAgICAgfSkgYXMgSnNvbk1hcmtkb3duRGF0YWJsb2NrO1xuICAgIH1cblxuICAgIHN0YXRpYyByZWFkYWJsZUlkKGZpbGU6IHN0cmluZywgbGluZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2ZpbGV9L2RhdGFibG9jayR7bGluZX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyBTVUJfRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxNYXJrZG93bkRhdGFibG9jaz4gPSBFeHRyYWN0b3JzLm1lcmdlPE1hcmtkb3duRGF0YWJsb2NrPihcbiAgICAgICAgTWFya2Rvd25CbG9jay5GSUVMRF9ERUYsXG4gICAgICAgIEV4dHJhY3RvcnMuZnJvbnRtYXR0ZXIoKGYpID0+IGYuJGRhdGEpXG4gICAgKTtcbn1cblxuLyoqIEEgc3BlY2lmaWMgbGlzdCBpdGVtIGluIGEgbGlzdC4gKi9cbmV4cG9ydCBjbGFzcyBNYXJrZG93bkxpc3RJdGVtIGltcGxlbWVudHMgSW5kZXhhYmxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEZpZWxkYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJsaXN0LWl0ZW1cIiwgTElOS0JFQVJJTkdfVFlQRSwgVEFHR0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IE1hcmtkb3duTGlzdEl0ZW0uVFlQRVM7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIkxpc3QgSXRlbVwiO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRmaWxlOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIHBvc2l0aW9uIG9mIHRoZSBsaXN0IGl0ZW0gaW4gdGhlIGZpbGUuICovXG4gICAgJHBvc2l0aW9uOiBMaW5lU3BhbjtcbiAgICAvKiogQ2hpbGQgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGl0ZW0uICovXG4gICAgJGVsZW1lbnRzOiBNYXJrZG93bkxpc3RJdGVtW107XG4gICAgLyoqIFRoZSB0eXBlIG9mIGxpc3QgaXRlbSB0aGF0IHRoaXMgZWxlbWVudCBpcy4gKi9cbiAgICAkdHlwZTogc3RyaW5nO1xuICAgIC8qKiBFeGFjdCB0YWdzIG9uIHRoaXMgbGlzdCBpdGVtLiAqL1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiogTWFwIG9mIGFsbCBkaXN0aW5jdCBpbmxpbmUgZmllbGRzIGluIHRoZSBkb2N1bWVudCwgZnJvbSBrZXkgbmFtZSAtPiBtZXRhZGF0YS4gKi9cbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcbiAgICAvKiogQWxsIGxpbmtzIGluIHRoZSBmaWxlLiAqL1xuICAgICRsaW5rczogTGlua1tdO1xuICAgIC8qKiBUaGUgYmxvY2sgSUQgb2YgdGhpcyBsaXN0IGl0ZW0gaWYgcHJlc2VudC4gKi9cbiAgICAkYmxvY2tJZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbGluZSBudW1iZXIgb2YgdGhlIHBhcmVudCBvZiB0aGlzIGxpc3QgaXRlbS5cbiAgICAgKiBJZiBhIHBvc2l0aXZlIG51bWJlciwgdGhlbiB0aGlzIGxpc3QgZWxlbWVudCBpcyBhIGNoaWxkXG4gICAgICogb2YgdGhlIGxpc3QgZWxlbWVudCBhdCB0aGF0IGxpbmUuXG4gICAgICpcbiAgICAgKiBJZiBhIG5lZ2F0aXZlIG51bWJlciwgdGhlbiB0aGlzIGxpc3QgZWxlbWVudCBpcyBhIHJvb3QgZWxlbWVudFxuICAgICAqIG9mIGEgbGlzdCBzdGFydGluZyBhdCB0aGF0IGxpbmUgKG5lZ2F0ZWQpLiBJLmUuLCAtNyBtZWFuc1xuICAgICAqIHRoaXMgaXMgYSByb290IGVsZW1lbnQgb2YgdGhlIGxpc3Qgc3RhcnRpbmcgYXQgbGluZSA3LlxuICAgICAqL1xuICAgICRwYXJlbnRMaW5lOiBudW1iZXI7XG4gICAgLyoqIFRoZSBtYXJrZXIgdXNlZCB0byBzdGFydCB0aGUgbGlzdCBpdGVtIChzdWNoIGFzIC0gb3IgKyBvciAqKS4gT24gYSBtYWxmb3JtZWQgdGFzaywgbWF5IGJlIHVuZGVmaW5lZC4gKi9cbiAgICAkc3ltYm9sPzogc3RyaW5nO1xuICAgIC8qKiBUaGUgdGV4dCBjb250ZW50cyBvZiB0aGUgbGlzdCBpdGVtLiAqL1xuICAgICR0ZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqIENyZWF0ZSBhIGxpc3QgaXRlbSBmcm9tIGEgc2VyaWFsaXplZCBvYmplY3QuICovXG4gICAgc3RhdGljIGZyb20oXG4gICAgICAgIG9iamVjdDogSnNvbk1hcmtkb3duTGlzdEl0ZW0sXG4gICAgICAgIGZpbGU6IHN0cmluZyxcbiAgICAgICAgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIgPSBOT09QX05PUk1BTElaRVJcbiAgICApOiBNYXJrZG93bkxpc3RJdGVtIHtcbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZSA9PT0gXCJ0YXNrXCIpIHJldHVybiBNYXJrZG93blRhc2tJdGVtLmZyb20ob2JqZWN0IGFzIEpzb25NYXJrZG93blRhc2tJdGVtLCBmaWxlLCBub3JtYWxpemVyKTtcblxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IG9iamVjdC4kZWxlbWVudHMubWFwKChlbGVtKSA9PiBNYXJrZG93bkxpc3RJdGVtLmZyb20oZWxlbSwgZmlsZSwgbm9ybWFsaXplcikpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtkb3duTGlzdEl0ZW0oe1xuICAgICAgICAgICAgJGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAkaWQ6IE1hcmtkb3duTGlzdEl0ZW0ucmVhZGFibGVJZChmaWxlLCBvYmplY3QuJHBvc2l0aW9uLnN0YXJ0KSxcbiAgICAgICAgICAgICRwb3NpdGlvbjogb2JqZWN0LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRlbGVtZW50czogZWxlbWVudHMsXG4gICAgICAgICAgICAkdHlwZTogb2JqZWN0LiR0eXBlLFxuICAgICAgICAgICAgJHRhZ3M6IG9iamVjdC4kdGFncyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKG9iamVjdC4kaW5maWVsZHMsIChpKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUlubGluZUZpZWxkKGkpLCBub3JtYWxpemVyKSksXG4gICAgICAgICAgICAkbGlua3M6IG9iamVjdC4kbGlua3MubWFwKChsKSA9PiBub3JtYWxpemVyKExpbmsuZnJvbU9iamVjdChsKSkpLFxuICAgICAgICAgICAgJGJsb2NrSWQ6IG9iamVjdC4kYmxvY2tJZCxcbiAgICAgICAgICAgICRwYXJlbnRMaW5lOiBvYmplY3QuJHBhcmVudExpbmUsXG4gICAgICAgICAgICAkdGV4dDogb2JqZWN0LiR0ZXh0LFxuICAgICAgICAgICAgJHN5bWJvbDogb2JqZWN0LiRzeW1ib2wsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duTGlzdEl0ZW0+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgbGluZSB0aGF0IHRoaXMgbGlzdCBpdGVtIHN0YXJ0cyBvbi4gKi9cbiAgICBnZXQgJGxpbmUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBvc2l0aW9uLnN0YXJ0O1xuICAgIH1cblxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoaXMgbGlzdCBpdGVtLiAqL1xuICAgIGdldCAkbGluZUNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwb3NpdGlvbi5lbmQgLSB0aGlzLiRwb3NpdGlvbi5zdGFydCArIDE7XG4gICAgfVxuXG4gICAgLyoqIENsZWFuZWQgdGV4dCB0aGF0IGlzIGdhcmF1bnRlZWQgdG8gYmUgbm9uLW51bGwgYW5kIGhhcyBpbmRlbmF0aW9uIGFuZCBpbmxpbmUgZmllbGRzIHJlbW92ZWQuICovXG4gICAgZ2V0ICRjbGVhbnRleHQoKSB7XG4gICAgICAgIGlmICghdGhpcy4kdGV4dCkgcmV0dXJuIFwiXCI7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuJHRleHRcbiAgICAgICAgICAgICAgICAvLyBFbGltaW5hdGUgW2tleTo6IHZhbHVlXSBhbm5vdGF0aW9ucy5cbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKC4qPykoW1xcW1xcKF1bXjooXFxbXSs6OlxccyouKj9bXFxdXFwpXVxccyopJC9nbSwgXCIkMVwiKVxuICAgICAgICAgICAgICAgIC8vIFRyaW0gd2hpdGVzcGFjZS5cbiAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEFsbCBvZiB0aGUgaW5kZXhlZCBmaWVsZHMgaW4gdGhpcyBvYmplY3QuICovXG4gICAgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duTGlzdEl0ZW0uRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBGZXRjaCBhIHNwZWNpZmljIGZpZWxkIGJ5IGtleS4gKi9cbiAgICBwdWJsaWMgZmllbGQoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIE1hcmtkb3duTGlzdEl0ZW0uRklFTERfREVGKHRoaXMsIGtleSk/LlswXSA/PyBGaWVsZGJlYXJpbmdzLmdldFdpdGhEZWZhdWx0KHRoaXMsIGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlKGtleTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKGtleSk/LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25NYXJrZG93bkxpc3RJdGVtIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRwb3NpdGlvbjogdGhpcy4kcG9zaXRpb24sXG4gICAgICAgICAgICAkZWxlbWVudHM6IHRoaXMuJGVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gZWxlbS5qc29uKCkpLFxuICAgICAgICAgICAgJHR5cGU6IHRoaXMuJHR5cGUsXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgICAgICRpbmZpZWxkczogbWFwT2JqZWN0VmFsdWVzKHRoaXMuJGluZmllbGRzLCBqc29uSW5saW5lRmllbGQpLFxuICAgICAgICAgICAgJGxpbmtzOiB0aGlzLiRsaW5rcyxcbiAgICAgICAgICAgICRibG9ja0lkOiB0aGlzLiRibG9ja0lkLFxuICAgICAgICAgICAgJHBhcmVudExpbmU6IHRoaXMuJHBhcmVudExpbmUsXG4gICAgICAgICAgICAkc3ltYm9sOiB0aGlzLiRzeW1ib2wsXG4gICAgICAgICAgICAkdGV4dDogdGhpcy4kdGV4dCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPE1hcmtkb3duTGlzdEl0ZW0+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCksXG4gICAgICAgIEV4dHJhY3RvcnMuaW5saW5lRmllbGRzKChmKSA9PiBmLiRpbmZpZWxkcylcbiAgICApO1xuXG4gICAgLyoqIEdlbmVyYXRlIGEgcmVhZGFibGUgSUQgZm9yIHRoaXMgaXRlbSB1c2luZyB0aGUgbGluZSBudW1iZXIuICovXG4gICAgc3RhdGljIHJlYWRhYmxlSWQoZmlsZTogc3RyaW5nLCBsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZmlsZX0vbGlzdCR7bGluZX1gO1xuICAgIH1cbn1cblxuLyoqIEEgc3BlY2lmaWMgdGFzayBpbnNpZGUgb2YgYSBtYXJrZG93biBsaXN0LiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtkb3duVGFza0l0ZW0gZXh0ZW5kcyBNYXJrZG93bkxpc3RJdGVtIGltcGxlbWVudHMgSW5kZXhhYmxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEZpZWxkYmVhcmluZyB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wibWFya2Rvd25cIiwgXCJsaXN0LWl0ZW1cIiwgXCJ0YXNrXCIsIExJTktCRUFSSU5HX1RZUEUsIFRBR0dBQkxFX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBNYXJrZG93blRhc2tJdGVtLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJUYXNrXCI7XG5cbiAgICAvKiogVGhlIHRleHQgaW5zaWRlIG9mIHRoZSB0YXNrIGl0ZW0uICovXG4gICAgJHN0YXR1czogc3RyaW5nO1xuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tKG9iamVjdDogSnNvbk1hcmtkb3duVGFza0l0ZW0sIGZpbGU6IHN0cmluZywgbm9ybWFsaXplcjogTGlua05vcm1hbGl6ZXIpOiBNYXJrZG93blRhc2tJdGVtIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBvYmplY3QuJGVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gTWFya2Rvd25MaXN0SXRlbS5mcm9tKGVsZW0sIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZG93blRhc2tJdGVtKHtcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiBNYXJrZG93bkxpc3RJdGVtLnJlYWRhYmxlSWQoZmlsZSwgb2JqZWN0LiRwb3NpdGlvbi5zdGFydCksXG4gICAgICAgICAgICAkcG9zaXRpb246IG9iamVjdC4kcG9zaXRpb24sXG4gICAgICAgICAgICAkZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgICAgICAgJHR5cGU6IG9iamVjdC4kdHlwZSxcbiAgICAgICAgICAgICR0YWdzOiBvYmplY3QuJHRhZ3MsXG4gICAgICAgICAgICAkaW5maWVsZHM6IG1hcE9iamVjdFZhbHVlcyhvYmplY3QuJGluZmllbGRzLCAoaSkgPT4gbm9ybWFsaXplTGlua3ModmFsdWVJbmxpbmVGaWVsZChpKSwgbm9ybWFsaXplcikpLFxuICAgICAgICAgICAgJGxpbmtzOiBvYmplY3QuJGxpbmtzLm1hcCgobCkgPT4gbm9ybWFsaXplcihMaW5rLmZyb21PYmplY3QobCkpKSxcbiAgICAgICAgICAgICRibG9ja0lkOiBvYmplY3QuJGJsb2NrSWQsXG4gICAgICAgICAgICAkcGFyZW50TGluZTogb2JqZWN0LiRwYXJlbnRMaW5lLFxuICAgICAgICAgICAgJHN0YXR1czogb2JqZWN0LiRzdGF0dXMsXG4gICAgICAgICAgICAkc3ltYm9sOiBvYmplY3QuJHN5bWJvbCxcbiAgICAgICAgICAgICR0ZXh0OiBvYmplY3QuJHRleHQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPE1hcmtkb3duVGFza0l0ZW0+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25NYXJrZG93bkxpc3RJdGVtIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3VwZXIuanNvbigpLCB7XG4gICAgICAgICAgICAkc3RhdHVzOiB0aGlzLiRzdGF0dXMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHRhc2sgaXMgY29tcGxldGVkLiAqL1xuICAgIHB1YmxpYyBnZXQgJGNvbXBsZXRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0YXR1cyA9PT0gXCJ4XCIgfHwgdGhpcy4kc3RhdHVzID09PSBcIlhcIjtcbiAgICB9XG59XG5cbi8qKiBBbiBlbnRyeSBpbiB0aGUgZnJvbnRtYXR0ZXI7IGluY2x1ZGVzIHRoZSByYXcgdmFsdWUsIHBhcnNlZCB2YWx1ZSwgYW5kIHJhdyBrZXkgKGJlZm9yZSBsb3dlci1jYXNpbmcpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9udG1hdHRlckVudHJ5IHtcbiAgICAvKiogVGhlIGFjdHVhbCBzdHJpbmcgaW4gZnJvbnRtYXR0ZXIgd2l0aCBleGFjdCBjYXNpbmcuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYXJzZWQgdmFsdWUgb2YgdGhlIGZyb250bWF0dGVyIGVudHJ5IChkYXRlLCBkdXJhdGlvbiwgZXRjLikuICovXG4gICAgdmFsdWU6IExpdGVyYWw7XG4gICAgLyoqIFRoZSByYXcgdmFsdWUgb2YgdGhlIGZyb250bWF0dGVyIGVudHJ5IGJlZm9yZSBwYXJzaW5nOyBnZW5lcmFsbHkgYSBzdHJpbmcgb3IgbnVtYmVyLiAqL1xuICAgIHJhdzogc3RyaW5nO1xufVxuXG4vKiogQ29udmVydCBhIHJlZ3VsYXIgZnJvbnRtYXR0ZXIgZW50cnkgaW50byBhIEpTT04gZnJvbnRtYXR0ZXIgZW50cnkuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uRnJvbnRtYXR0ZXJFbnRyeShyYXc6IEZyb250bWF0dGVyRW50cnkpOiBKc29uRnJvbnRtYXR0ZXJFbnRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiByYXcua2V5LFxuICAgICAgICB2YWx1ZTogSnNvbkNvbnZlcnNpb24uanNvbihyYXcudmFsdWUpLFxuICAgICAgICByYXc6IHJhdy5yYXcsXG4gICAgfTtcbn1cblxuLyoqIENvbnZlcnQgYSBqc29uIGZyb250bWF0dGVyIGVudHJ5IHRvIGEgcmVndWxhciBmcm9udG1hdHRlciBlbnRyeS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbnRtYXR0ZXJFbnRyeShyYXc6IEpzb25Gcm9udG1hdHRlckVudHJ5KTogRnJvbnRtYXR0ZXJFbnRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiByYXcua2V5LFxuICAgICAgICB2YWx1ZTogSnNvbkNvbnZlcnNpb24udmFsdWUocmF3LnZhbHVlKSxcbiAgICAgICAgcmF3OiByYXcucmF3LFxuICAgIH07XG59XG5cbi8qKiBOb3JtYWxpemUgbGlua3MgZGVlcGx5IGluIHRoZSBvYmplY3QuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMaW5rczxUIGV4dGVuZHMgTGl0ZXJhbD4oaW5wdXQ6IFQsIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyKTogVCB7XG4gICAgcmV0dXJuIExpdGVyYWxzLm1hcExlYXZlcyhpbnB1dCwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChMaXRlcmFscy5pc0xpbmsodmFsdWUpKSByZXR1cm4gbm9ybWFsaXplcih2YWx1ZSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHZhbHVlO1xuICAgIH0pIGFzIFQ7XG59XG5cbi8qKiBSZWN1cnNpdmVseSBnYXRoZXIgbGlua3MgZnJvbSBhIGxpdGVyYWwgb2JqZWN0LlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2F0aGVyTGlua3MoaW5wdXQ6IExpdGVyYWwpOiBMaW5rW10ge1xuICAgIGNvbnN0IHJlc3VsdDogTGlua1tdID0gW107XG5cbiAgICBMaXRlcmFscy5tYXBMZWF2ZXMoaW5wdXQsICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNMaW5rKHZhbHVlKSkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBHYXRoZXIgdGFncyBmcm9tIGEgZGF0YWJsb2NrLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2F0aGVyVGFncyhkYXRhOiBSZWNvcmQ8c3RyaW5nLCBGcm9udG1hdHRlckVudHJ5Pik6IHN0cmluZ1tdIHtcbiAgICBmdW5jdGlvbiByZWN1cnNlKGlucHV0OiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmIChMaXRlcmFscy5pc1N0cmluZyhpbnB1dCkpIHJldHVybiBbaW5wdXQuc3RhcnRzV2l0aChcIiNcIikgPyBpbnB1dCA6IFwiI1wiICsgaW5wdXRdO1xuICAgICAgICBlbHNlIGlmIChMaXRlcmFscy5pc0FycmF5KGlucHV0KSkgcmV0dXJuIGlucHV0LmZsYXRNYXAocmVjdXJzZSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCB0YWdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChcInRhZ1wiIGluIGRhdGEpIHRhZ3MgPSB0YWdzLmNvbmNhdChyZWN1cnNlKGRhdGFbXCJ0YWdzXCJdKSk7XG4gICAgaWYgKFwidGFnc1wiIGluIGRhdGEpIHRhZ3MgPSB0YWdzLmNvbmNhdChyZWN1cnNlKGRhdGFbXCJ0YWdzXCJdKSk7XG5cbiAgICByZXR1cm4gdGFncztcbn1cblxuLyoqIEEgbGluayBub3JtYWxpemVyIHdoaWNoIHRha2VzIGluIGEgcmF3IGxpbmsgYW5kIHByb2R1Y2VzIGEgbm9ybWFsaXplZCBsaW5rLiAqL1xuZXhwb3J0IHR5cGUgTGlua05vcm1hbGl6ZXIgPSAobGluazogTGluaykgPT4gTGluaztcbmV4cG9ydCBjb25zdCBOT09QX05PUk1BTElaRVI6IExpbmtOb3JtYWxpemVyID0gKHgpID0+IHg7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gXCIuL2RlZmluZVByb3BlcnR5LmpzXCI7XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHtcbiAgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pO1xuICB9XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkge1xuICBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykge1xuICAgIHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTtcbiAgICByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfb2JqZWN0U3ByZWFkMiBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn1cbmV4cG9ydCB7IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5leHBvcnQgeyBfYXJyYXlMaWtlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxuZXhwb3J0IHsgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCAiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5leHBvcnQgeyBfc2xpY2VkVG9BcnJheSBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKGUuaW5jbHVkZXMobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXCI7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBzLmxlbmd0aDsgcisrKSBvID0gc1tyXSwgdC5pbmNsdWRlcyhvKSB8fCB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdElucHV0VmFsdWVcIiwgXCJkZWZhdWx0TWVudUlzT3BlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImlucHV0VmFsdWVcIiwgXCJtZW51SXNPcGVuXCIsIFwib25DaGFuZ2VcIiwgXCJvbklucHV0Q2hhbmdlXCIsIFwib25NZW51Q2xvc2VcIiwgXCJvbk1lbnVPcGVuXCIsIFwidmFsdWVcIl07XG5mdW5jdGlvbiB1c2VTdGF0ZU1hbmFnZXIoX3JlZikge1xuICB2YXIgX3JlZiRkZWZhdWx0SW5wdXRWYWx1ID0gX3JlZi5kZWZhdWx0SW5wdXRWYWx1ZSxcbiAgICBkZWZhdWx0SW5wdXRWYWx1ZSA9IF9yZWYkZGVmYXVsdElucHV0VmFsdSA9PT0gdm9pZCAwID8gJycgOiBfcmVmJGRlZmF1bHRJbnB1dFZhbHUsXG4gICAgX3JlZiRkZWZhdWx0TWVudUlzT3BlID0gX3JlZi5kZWZhdWx0TWVudUlzT3BlbixcbiAgICBkZWZhdWx0TWVudUlzT3BlbiA9IF9yZWYkZGVmYXVsdE1lbnVJc09wZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGRlZmF1bHRNZW51SXNPcGUsXG4gICAgX3JlZiRkZWZhdWx0VmFsdWUgPSBfcmVmLmRlZmF1bHRWYWx1ZSxcbiAgICBkZWZhdWx0VmFsdWUgPSBfcmVmJGRlZmF1bHRWYWx1ZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkZGVmYXVsdFZhbHVlLFxuICAgIHByb3BzSW5wdXRWYWx1ZSA9IF9yZWYuaW5wdXRWYWx1ZSxcbiAgICBwcm9wc01lbnVJc09wZW4gPSBfcmVmLm1lbnVJc09wZW4sXG4gICAgcHJvcHNPbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgcHJvcHNPbklucHV0Q2hhbmdlID0gX3JlZi5vbklucHV0Q2hhbmdlLFxuICAgIHByb3BzT25NZW51Q2xvc2UgPSBfcmVmLm9uTWVudUNsb3NlLFxuICAgIHByb3BzT25NZW51T3BlbiA9IF9yZWYub25NZW51T3BlbixcbiAgICBwcm9wc1ZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICByZXN0U2VsZWN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHByb3BzSW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvcHNJbnB1dFZhbHVlIDogZGVmYXVsdElucHV0VmFsdWUpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHN0YXRlSW5wdXRWYWx1ZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3RhdGVJbnB1dFZhbHVlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShwcm9wc01lbnVJc09wZW4gIT09IHVuZGVmaW5lZCA/IHByb3BzTWVudUlzT3BlbiA6IGRlZmF1bHRNZW51SXNPcGVuKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgc3RhdGVNZW51SXNPcGVuID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRTdGF0ZU1lbnVJc09wZW4gPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKHByb3BzVmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3BzVmFsdWUgOiBkZWZhdWx0VmFsdWUpLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICBzdGF0ZVZhbHVlID0gX3VzZVN0YXRlNlswXSxcbiAgICBzZXRTdGF0ZVZhbHVlID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wc09uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wc09uQ2hhbmdlKHZhbHVlLCBhY3Rpb25NZXRhKTtcbiAgICB9XG4gICAgc2V0U3RhdGVWYWx1ZSh2YWx1ZSk7XG4gIH0sIFtwcm9wc09uQ2hhbmdlXSk7XG4gIHZhciBvbklucHV0Q2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgdmFyIG5ld1ZhbHVlO1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbklucHV0Q2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBuZXdWYWx1ZSA9IHByb3BzT25JbnB1dENoYW5nZSh2YWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfVxuICAgIHNldFN0YXRlSW5wdXRWYWx1ZShuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkID8gbmV3VmFsdWUgOiB2YWx1ZSk7XG4gIH0sIFtwcm9wc09uSW5wdXRDaGFuZ2VdKTtcbiAgdmFyIG9uTWVudU9wZW4gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wc09uTWVudU9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BzT25NZW51T3BlbigpO1xuICAgIH1cbiAgICBzZXRTdGF0ZU1lbnVJc09wZW4odHJ1ZSk7XG4gIH0sIFtwcm9wc09uTWVudU9wZW5dKTtcbiAgdmFyIG9uTWVudUNsb3NlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbk1lbnVDbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcHNPbk1lbnVDbG9zZSgpO1xuICAgIH1cbiAgICBzZXRTdGF0ZU1lbnVJc09wZW4oZmFsc2UpO1xuICB9LCBbcHJvcHNPbk1lbnVDbG9zZV0pO1xuICB2YXIgaW5wdXRWYWx1ZSA9IHByb3BzSW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvcHNJbnB1dFZhbHVlIDogc3RhdGVJbnB1dFZhbHVlO1xuICB2YXIgbWVudUlzT3BlbiA9IHByb3BzTWVudUlzT3BlbiAhPT0gdW5kZWZpbmVkID8gcHJvcHNNZW51SXNPcGVuIDogc3RhdGVNZW51SXNPcGVuO1xuICB2YXIgdmFsdWUgPSBwcm9wc1ZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm9wc1ZhbHVlIDogc3RhdGVWYWx1ZTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFNlbGVjdFByb3BzKSwge30sIHtcbiAgICBpbnB1dFZhbHVlOiBpbnB1dFZhbHVlLFxuICAgIG1lbnVJc09wZW46IG1lbnVJc09wZW4sXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIG9uSW5wdXRDaGFuZ2U6IG9uSW5wdXRDaGFuZ2UsXG4gICAgb25NZW51Q2xvc2U6IG9uTWVudUNsb3NlLFxuICAgIG9uTWVudU9wZW46IG9uTWVudU9wZW4sXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5leHBvcnQgeyB1c2VTdGF0ZU1hbmFnZXIgYXMgdSB9O1xuIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyIsICJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG59XG5leHBvcnQgeyBfY2xhc3NDYWxsQ2hlY2sgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gclt0XTtcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlO1xufVxuZXhwb3J0IHsgX2NyZWF0ZUNsYXNzIGFzIGRlZmF1bHQgfTsiLCAiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiB0LFxuICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH1cbiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlICYmIHNldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIGRlZmF1bHQgfTsiLCAiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7XG4gIH0sIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbmV4cG9ydCB7IF9nZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICB9IGNhdGNoICh0KSB7fVxuICByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIHJldHVybiAhIXQ7XG4gIH0pKCk7XG59XG5leHBvcnQgeyBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IGFzIGRlZmF1bHQgfTsiLCAiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkge1xuICBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlO1xuICBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7XG59XG5leHBvcnQgeyBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmltcG9ydCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gXCIuL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanNcIjtcbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcih0KSB7XG4gIHZhciByID0gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGUsXG4gICAgICBvID0gZ2V0UHJvdG90eXBlT2YodCk7XG4gICAgaWYgKHIpIHtcbiAgICAgIHZhciBzID0gZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICBlID0gUmVmbGVjdC5jb25zdHJ1Y3QobywgYXJndW1lbnRzLCBzKTtcbiAgICB9IGVsc2UgZSA9IG8uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBlKTtcbiAgfTtcbn1cbmV4cG9ydCB7IF9jcmVhdGVTdXBlciBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyKTtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhvdXRIb2xlcyBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5leHBvcnQgeyBfbm9uSXRlcmFibGVTcHJlYWQgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheShyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuZXhwb3J0IHsgX3RvQ29uc3VtYWJsZUFycmF5IGFzIGRlZmF1bHQgfTsiLCAidmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxuLypcblxuQmFzZWQgb2ZmIGdsYW1vcidzIFN0eWxlU2hlZXQsIHRoYW5rcyBTdW5pbCBcdTI3NjRcdUZFMEZcblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG5cbi8vIHVzYWdlXG5cbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCdcblxubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7IGtleTogJycsIGNvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCB9KVxuXG5zdHlsZVNoZWV0Lmluc2VydCgnI2JveCB7IGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgfScpXG4tIGFwcGVuZHMgYSBjc3MgcnVsZSBpbnRvIHRoZSBzdHlsZXNoZWV0XG5cbnN0eWxlU2hlZXQuZmx1c2goKVxuLSBlbXB0aWVzIHRoZSBzdHlsZXNoZWV0IG9mIGFsbCBpdHMgY29udGVudHNcblxuKi9cblxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfSAvLyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgcmV0dXJuIHdpdGggYSB2YWx1ZVxuICAvLyBUUyBjYW4ndCB1bmRlcnN0YW5kIGl0IHRob3VnaCBzbyB3ZSBtYWtlIGl0IHN0b3AgY29tcGxhaW5pbmcgaGVyZVxuXG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gIWlzRGV2ZWxvcG1lbnQgOiBvcHRpb25zLnNwZWVkeTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gICAgdGhpcy5ub25jZSA9IG9wdGlvbnMubm9uY2U7IC8vIGtleSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUsIGl0J3MgdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgc2hlZXRzXG5cbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgdGhpcy5wcmVwZW5kID0gb3B0aW9ucy5wcmVwZW5kO1xuICAgIHRoaXMuaW5zZXJ0aW9uUG9pbnQgPSBvcHRpb25zLmluc2VydGlvblBvaW50O1xuICAgIHRoaXMuYmVmb3JlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdHlsZVNoZWV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaHlkcmF0ZSA9IGZ1bmN0aW9uIGh5ZHJhdGUobm9kZXMpIHtcbiAgICBub2Rlcy5mb3JFYWNoKHRoaXMuX2luc2VydFRhZyk7XG4gIH07XG5cbiAgX3Byb3RvLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgLy8gdGhlIG1heCBsZW5ndGggaXMgaG93IG1hbnkgcnVsZXMgd2UgaGF2ZSBwZXIgc3R5bGUgdGFnLCBpdCdzIDY1MDAwIGluIHNwZWVkeSBtb2RlXG4gICAgLy8gaXQncyAxIGluIGRldiBiZWNhdXNlIHdlIGluc2VydCBzb3VyY2UgbWFwcyB0aGF0IG1hcCBhIHNpbmdsZSBydWxlIHRvIGEgbG9jYXRpb25cbiAgICAvLyBhbmQgeW91IGNhbiBvbmx5IGhhdmUgb25lIHNvdXJjZSBtYXAgcGVyIHN0eWxlIHRhZ1xuICAgIGlmICh0aGlzLmN0ciAlICh0aGlzLmlzU3BlZWR5ID8gNjUwMDAgOiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5faW5zZXJ0VGFnKGNyZWF0ZVN0eWxlRWxlbWVudCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgICAgdmFyIHNoZWV0ID0gc2hlZXRGb3JUYWcodGFnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICAgICAgICAvLyB0aGUgYmlnIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNzcyB3b24ndCBiZSBlZGl0YWJsZSBpbiBkZXZ0b29sc1xuICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHIrKztcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgX3RhZyRwYXJlbnROb2RlO1xuXG4gICAgICByZXR1cm4gKF90YWckcGFyZW50Tm9kZSA9IHRhZy5wYXJlbnROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX3RhZyRwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnQgeyBTdHlsZVNoZWV0IH07XG4iLCAiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuZXhwb3J0IHZhciBMQVlFUiA9ICdAbGF5ZXInXG4iLCAiLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFic1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCAodmFsdWUsIGxlbmd0aCkge1xuXHRyZXR1cm4gY2hhcmF0KHZhbHVlLCAwKSBeIDQ1ID8gKCgoKCgoKGxlbmd0aCA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMCkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAxKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDIpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMykgOiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICogQHJldHVybiB7c3RyaW5nP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoICh2YWx1ZSwgcGF0dGVybikge1xuXHRyZXR1cm4gKHZhbHVlID0gcGF0dGVybi5leGVjKHZhbHVlKSkgPyB2YWx1ZVswXSA6IHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcGF0dGVyblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlICh2YWx1ZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoKSB7XG5cdHJldHVybiB2YWx1ZS5pbmRleE9mKHNlYXJjaClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhcmF0ICh2YWx1ZSwgaW5kZXgpIHtcblx0cmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpIHwgMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHIgKHZhbHVlLCBiZWdpbiwgZW5kKSB7XG5cdHJldHVybiB2YWx1ZS5zbGljZShiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpemVvZiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHthbnlbXX0gYXJyYXlcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCAodmFsdWUsIGFycmF5KSB7XG5cdHJldHVybiBhcnJheS5wdXNoKHZhbHVlKSwgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUgKGFycmF5LCBjYWxsYmFjaykge1xuXHRyZXR1cm4gYXJyYXkubWFwKGNhbGxiYWNrKS5qb2luKCcnKVxufVxuIiwgImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsICJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBMQVlFUjogaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSBicmVha1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCAidmFyIHdlYWtNZW1vaXplID0gZnVuY3Rpb24gd2Vha01lbW9pemUoZnVuYykge1xuICB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZS5oYXMoYXJnKSkge1xuICAgICAgLy8gVXNlIG5vbi1udWxsIGFzc2VydGlvbiBiZWNhdXNlIHdlIGp1c3QgY2hlY2tlZCB0aGF0IHRoZSBjYWNoZSBgaGFzYCBpdFxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGB1bmRlZmluZWRgIGZyb20gdGhlIHJldHVybiB2YWx1ZVxuICAgICAgcmV0dXJuIGNhY2hlLmdldChhcmcpO1xuICAgIH1cblxuICAgIHZhciByZXQgPSBmdW5jKGFyZyk7XG4gICAgY2FjaGUuc2V0KGFyZywgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xufTtcblxuZXhwb3J0IHsgd2Vha01lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgd2Vha01lbW9pemUgZnJvbSAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWUsXG4gICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG4vKiBpbXBvcnQgdHlwZSB7IFN0eWxpc1BsdWdpbiB9IGZyb20gJy4vdHlwZXMnICovXG5cbi8qXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBub25jZT86IHN0cmluZyxcbiAgc3R5bGlzUGx1Z2lucz86IFN0eWxpc1BsdWdpbltdLFxuICBrZXk6IHN0cmluZyxcbiAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQsXG4gIHNwZWVkeT86IGJvb2xlYW4sXG4gIHByZXBlbmQ/OiBib29sZWFuLFxuICBpbnNlcnRpb25Qb2ludD86IEhUTUxFbGVtZW50XG59XG4qL1xuXG52YXIgZ2V0U2VydmVyU3R5bGlzQ2FjaGUgPSBpc0Jyb3dzZXIgPyB1bmRlZmluZWQgOiB3ZWFrTWVtb2l6ZShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBtZW1vaXplKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiBjYWNoZVtuYW1lXTtcbiAgICB9O1xuICB9KTtcbn0pO1xudmFyIGRlZmF1bHRTdHlsaXNQbHVnaW5zID0gW3ByZWZpeGVyXTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb25cbiAgLyo6IEVtb3Rpb25DYWNoZSAqL1xuY3JlYXRlQ2FjaGUob3B0aW9uc1xuLyo6IE9wdGlvbnMgKi9cbikge1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgaWYgKGlzQnJvd3NlciAmJiBrZXkgPT09ICdjc3MnKSB7XG4gICAgdmFyIHNzclN0eWxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25dOm5vdChbZGF0YS1zXSlcIik7IC8vIGdldCBTU1JlZCBzdHlsZXMgb3V0IG9mIHRoZSB3YXkgb2YgUmVhY3QncyBoeWRyYXRpb25cbiAgICAvLyBkb2N1bWVudC5oZWFkIGlzIGEgc2FmZSBwbGFjZSB0byBtb3ZlIHRoZW0gdG8odGhvdWdoIG5vdGUgZG9jdW1lbnQuaGVhZCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxhc3QgcGxhY2UgdGhleSB3aWxsIGJlKVxuICAgIC8vIG5vdGUgdGhpcyB2ZXJ5IHZlcnkgaW50ZW50aW9uYWxseSB0YXJnZXRzIGFsbCBzdHlsZSBlbGVtZW50cyByZWdhcmRsZXNzIG9mIHRoZSBrZXkgdG8gZW5zdXJlXG4gICAgLy8gdGhhdCBjcmVhdGluZyBhIGNhY2hlIHdvcmtzIGluc2lkZSBvZiByZW5kZXIgb2YgYSBSZWFjdCBjb21wb25lbnRcblxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc3NyU3R5bGVzLCBmdW5jdGlvbiAobm9kZVxuICAgIC8qOiBIVE1MU3R5bGVFbGVtZW50ICovXG4gICAgKSB7XG4gICAgICAvLyB3ZSB3YW50IHRvIG9ubHkgbW92ZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgc3BhY2UgaW4gdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbiBFbW90aW9uIDExIHNlcnZlci1zaWRlIHJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgICAvLyB3aGlsZSB3ZSB3aWxsIGFscmVhZHkgaWdub3JlIEVtb3Rpb24gMTEgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGJlY2F1c2Ugb2YgdGhlIDpub3QoW2RhdGEtc10pIHBhcnQgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAvLyBFbW90aW9uIDEwIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBkaWQgbm90IGhhdmUgZGF0YS1zIChidXQgaW1wb3J0YW50bHkgZGlkIG5vdCBoYXZlIGEgc3BhY2UgaW4gdGhlaXIgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZXMpXG4gICAgICAvLyBzbyBjaGVja2luZyBmb3IgdGhlIHNwYWNlIGVuc3VyZXMgdGhhdCBsb2FkaW5nIEVtb3Rpb24gMTEgYWZ0ZXIgRW1vdGlvbiAxMCBoYXMgaW5zZXJ0ZWQgc29tZSBzdHlsZXNcbiAgICAgIC8vIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgRW1vdGlvbiAxMCBzdHlsZXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICB2YXIgZGF0YUVtb3Rpb25BdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJyk7XG5cbiAgICAgIGlmIChkYXRhRW1vdGlvbkF0dHJpYnV0ZS5pbmRleE9mKCcgJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICB2YXIgaW5zZXJ0ZWQgPSB7fTtcbiAgdmFyIGNvbnRhaW5lcjtcbiAgLyogOiBOb2RlICovXG5cbiAgdmFyIG5vZGVzVG9IeWRyYXRlID0gW107XG5cbiAgaWYgKGlzQnJvd3Nlcikge1xuICAgIGNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmhlYWQ7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggLy8gdGhpcyBtZWFucyB3ZSB3aWxsIGlnbm9yZSBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGEgc3BhY2UgaW4gdGhlbSB3aGljaFxuICAgIC8vIG1lYW5zIHRoYXQgdGhlIHN0eWxlIGVsZW1lbnRzIHdlJ3JlIGxvb2tpbmcgYXQgYXJlIG9ubHkgRW1vdGlvbiAxMSBzZXJ2ZXItcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXj1cXFwiXCIgKyBrZXkgKyBcIiBcXFwiXVwiKSwgZnVuY3Rpb24gKG5vZGVcbiAgICAvKjogSFRNTFN0eWxlRWxlbWVudCAqL1xuICAgICkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXR0cmliLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluc2VydGVkW2F0dHJpYltpXV0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2Rlc1RvSHlkcmF0ZS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG4gIC8qOiAoXG4gIHNlbGVjdG9yOiBzdHJpbmcsXG4gIHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWRTdHlsZXMsXG4gIHNoZWV0OiBTdHlsZVNoZWV0LFxuICBzaG91bGRDYWNoZTogYm9vbGVhblxuICApID0+IHN0cmluZyB8IHZvaWQgKi9cblxuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKGlzQnJvd3Nlcikge1xuICAgIHZhciBjdXJyZW50U2hlZXQ7XG4gICAgdmFyIGZpbmFsaXppbmdQbHVnaW5zID0gW3N0cmluZ2lmeSwgcnVsZXNoZWV0KGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KHJ1bGUpO1xuICAgIH0pXTtcbiAgICB2YXIgc2VyaWFsaXplciA9IG1pZGRsZXdhcmUob21uaXByZXNlbnRQbHVnaW5zLmNvbmNhdChzdHlsaXNQbHVnaW5zLCBmaW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIHN0eWxpcyA9IGZ1bmN0aW9uIHN0eWxpcyhzdHlsZXMpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShzdHlsZXMpLCBzZXJpYWxpemVyKTtcbiAgICB9O1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uXG4gICAgICAvKjogdm9pZCAqL1xuICAgIGluc2VydChzZWxlY3RvclxuICAgIC8qOiBzdHJpbmcgKi9cbiAgICAsIHNlcmlhbGl6ZWRcbiAgICAvKjogU2VyaWFsaXplZFN0eWxlcyAqL1xuICAgICwgc2hlZXRcbiAgICAvKjogU3R5bGVTaGVldCAqL1xuICAgICwgc2hvdWxkQ2FjaGVcbiAgICAvKjogYm9vbGVhbiAqL1xuICAgICkge1xuICAgICAgY3VycmVudFNoZWV0ID0gc2hlZXQ7XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2ZpbmFsaXppbmdQbHVnaW5zID0gW3N0cmluZ2lmeV07XG5cbiAgICB2YXIgX3NlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgX2ZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgX3N0eWxpcyA9IGZ1bmN0aW9uIF9zdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgX3NlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICB2YXIgc2VydmVyU3R5bGlzQ2FjaGUgPSBnZXRTZXJ2ZXJTdHlsaXNDYWNoZShzdHlsaXNQbHVnaW5zKShrZXkpO1xuXG4gICAgdmFyIGdldFJ1bGVzID0gZnVuY3Rpb25cbiAgICAgIC8qOiBzdHJpbmcgKi9cbiAgICBnZXRSdWxlcyhzZWxlY3RvclxuICAgIC8qOiBzdHJpbmcgKi9cbiAgICAsIHNlcmlhbGl6ZWRcbiAgICAvKjogU2VyaWFsaXplZFN0eWxlcyAqL1xuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBzZXJpYWxpemVkLm5hbWU7XG5cbiAgICAgIGlmIChzZXJ2ZXJTdHlsaXNDYWNoZVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNlcnZlclN0eWxpc0NhY2hlW25hbWVdID0gX3N0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VydmVyU3R5bGlzQ2FjaGVbbmFtZV07XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvblxuICAgICAgLyo6IHN0cmluZyB8IHZvaWQgKi9cbiAgICBfaW5zZXJ0KHNlbGVjdG9yXG4gICAgLyo6IHN0cmluZyAqL1xuICAgICwgc2VyaWFsaXplZFxuICAgIC8qOiBTZXJpYWxpemVkU3R5bGVzICovXG4gICAgLCBzaGVldFxuICAgIC8qOiBTdHlsZVNoZWV0ICovXG4gICAgLCBzaG91bGRDYWNoZVxuICAgIC8qOiBib29sZWFuICovXG4gICAgKSB7XG4gICAgICB2YXIgbmFtZSA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICAgIHZhciBydWxlcyA9IGdldFJ1bGVzKHNlbGVjdG9yLCBzZXJpYWxpemVkKTtcblxuICAgICAgaWYgKGNhY2hlLmNvbXBhdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGluIHJlZ3VsYXIgbW9kZSwgd2UgZG9uJ3Qgc2V0IHRoZSBzdHlsZXMgb24gdGhlIGluc2VydGVkIGNhY2hlXG4gICAgICAgIC8vIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gYW5kIHRoYXQgd291bGQgYmUgd2FzdGluZyBtZW1vcnlcbiAgICAgICAgLy8gd2UgcmV0dXJuIHRoZW0gc28gdGhhdCB0aGV5IGFyZSByZW5kZXJlZCBpbiBhIHN0eWxlIHRhZ1xuICAgICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgICBjYWNoZS5pbnNlcnRlZFtuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpbiBjb21wYXQgbW9kZSwgd2UgcHV0IHRoZSBzdHlsZXMgb24gdGhlIGluc2VydGVkIGNhY2hlIHNvXG4gICAgICAgIC8vIHRoYXQgZW1vdGlvbi1zZXJ2ZXIgY2FuIHB1bGwgb3V0IHRoZSBzdHlsZXNcbiAgICAgICAgLy8gZXhjZXB0IHdoZW4gd2UgZG9uJ3Qgd2FudCB0byBjYWNoZSBpdCB3aGljaCB3YXMgaW4gR2xvYmFsIGJ1dCBub3dcbiAgICAgICAgLy8gaXMgbm93aGVyZSBidXQgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIG1ham9yIHJpZ2h0IG5vd1xuICAgICAgICAvLyBhbmQganVzdCBpbiBjYXNlIHdlJ3JlIGdvaW5nIHRvIGxlYXZlIHRoZSBjYXNlIGhlcmVcbiAgICAgICAgLy8gaXQncyBhbHNvIG5vdCBhZmZlY3RpbmcgY2xpZW50IHNpZGUgYnVuZGxlIHNpemVcbiAgICAgICAgLy8gc28gaXQncyByZWFsbHkgbm90IGEgYmlnIGRlYWxcbiAgICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbbmFtZV0gPSBydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlXG4gIC8qOiBFbW90aW9uQ2FjaGUgKi9cbiAgPSB7XG4gICAga2V5OiBrZXksXG4gICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KHtcbiAgICAgIGtleToga2V5LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgIHNwZWVkeTogb3B0aW9ucy5zcGVlZHksXG4gICAgICBwcmVwZW5kOiBvcHRpb25zLnByZXBlbmQsXG4gICAgICBpbnNlcnRpb25Qb2ludDogb3B0aW9ucy5pbnNlcnRpb25Qb2ludFxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgY2FjaGUuc2hlZXQuaHlkcmF0ZShub2Rlc1RvSHlkcmF0ZSk7XG4gIHJldHVybiBjYWNoZTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUNhY2hlIGFzIGRlZmF1bHQgfTtcbiIsICJ2YXIgaXNCcm93c2VyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSAmJiBjYWNoZS5jb21wYXQgIT09IHVuZGVmaW5lZCkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHN0eWxlc0ZvclNTUiA9ICcnO1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBtYXliZVN0eWxlcyA9IGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBpZiAoIWlzQnJvd3NlciAmJiBtYXliZVN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN0eWxlc0ZvclNTUiArPSBtYXliZVN0eWxlcztcbiAgICAgIH1cblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgaWYgKCFpc0Jyb3dzZXIgJiYgc3R5bGVzRm9yU1NSLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmV0dXJuIHN0eWxlc0ZvclNTUjtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCAidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGFzcGVjdFJhdGlvOiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICBzY2FsZTogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBjb21wb25lbnRTZWxlY3RvciA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKGNvbXBvbmVudFNlbGVjdG9yLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFNlbGVjdG9yO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICB2YXIga2V5ZnJhbWVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoa2V5ZnJhbWVzLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBrZXlmcmFtZXMubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczoga2V5ZnJhbWVzLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGtleWZyYW1lcy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBzZXJpYWxpemVkU3R5bGVzLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO3tdKylcXHMqKDt8JCkvZztcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9XG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSAhaXNCcm93c2VyID8gc3luY0ZhbGxiYWNrIDogdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgUmVhY3QudXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanMnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLyogaW1wb3J0IHsgdHlwZSBFbW90aW9uQ2FjaGUgfSBmcm9tICdAZW1vdGlvbi91dGlscycgKi9cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0XG4vKjogUmVhY3QuQ29udGV4dDxFbW90aW9uQ2FjaGUgfCBudWxsPiAqL1xuPSAvKiAjX19QVVJFX18gKi9SZWFjdC5jcmVhdGVDb250ZXh0KCAvLyB3ZSdyZSBkb2luZyB0aGlzIHRvIGF2b2lkIHByZWNvbnN0cnVjdCdzIGRlYWQgY29kZSBlbGltaW5hdGlvbiBpbiB0aGlzIG9uZSBjYXNlXG4vLyBiZWNhdXNlIHRoaXMgbW9kdWxlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGhlIGJyb3dzZXIgYW5kIG5vZGVcbi8vIGJ1dCBpdCdzIGFsc28gcmVxdWlyZWQgaW4gcmVhY3QgbmF0aXZlIGFuZCBzaW1pbGFyIGVudmlyb25tZW50cyBzb21ldGltZXNcbi8vIGFuZCB3ZSBjb3VsZCBoYXZlIGEgc3BlY2lhbCBidWlsZCBqdXN0IGZvciB0aGF0XG4vLyBidXQgdGhpcyBpcyBtdWNoIGVhc2llciBhbmQgdGhlIG5hdGl2ZSBwYWNrYWdlc1xuLy8gbWlnaHQgdXNlIGEgZGlmZmVyZW50IHRoZW1lIGNvbnRleHQgaW4gdGhlIGZ1dHVyZSBhbnl3YXlcbnR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyAvKiAjX19QVVJFX18gKi9jcmVhdGVDYWNoZSh7XG4gIGtleTogJ2Nzcydcbn0pIDogbnVsbCk7XG5cbnZhciBDYWNoZVByb3ZpZGVyID0gRW1vdGlvbkNhY2hlQ29udGV4dC5Qcm92aWRlcjtcbnZhciBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB1c2VFbW90aW9uQ2FjaGUoKVxuLyo6IEVtb3Rpb25DYWNoZSB8IG51bGwqL1xue1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZVxuLyogPFByb3BzLCBSZWY6IFJlYWN0LlJlZjwqPj4gKi9cbihmdW5jXG4vKjogKHByb3BzOiBQcm9wcywgY2FjaGU6IEVtb3Rpb25DYWNoZSwgcmVmOiBSZWYpID0+IFJlYWN0Lk5vZGUgKi9cbilcbi8qOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxQcm9wcz4gKi9cbntcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wc1xuICAvKjogUHJvcHMgKi9cbiAgLCByZWZcbiAgLyo6IFJlZiAqL1xuICApIHtcbiAgICAvLyB0aGUgY2FjaGUgd2lsbCBuZXZlciBiZSBudWxsIGluIHRoZSBicm93c2VyXG4gICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbiAgICByZXR1cm4gZnVuYyhwcm9wcywgY2FjaGUsIHJlZik7XG4gIH0pO1xufTtcblxuaWYgKCFpc0Jyb3dzZXIpIHtcbiAgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGVcbiAgLyogPFByb3BzPiAqL1xuICAoZnVuY1xuICAvKjogKHByb3BzOiBQcm9wcywgY2FjaGU6IEVtb3Rpb25DYWNoZSkgPT4gUmVhY3QuTm9kZSAqL1xuICApXG4gIC8qOiBSZWFjdC5TdGF0ZWxlc3NGdW5jdGlvbmFsQ29tcG9uZW50PFByb3BzPiAqL1xuICB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wc1xuICAgIC8qOiBQcm9wcyAqL1xuICAgICkge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG52YXIgdXNlVGhlbWUgPSBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbn07XG5cbnZhciBnZXRUaGVtZSA9IGZ1bmN0aW9uIGdldFRoZW1lKG91dGVyVGhlbWVcbi8qOiBPYmplY3QgKi9cbiwgdGhlbWVcbi8qOiBPYmplY3QgfCAoT2JqZWN0ID0+IE9iamVjdCkgKi9cbikge1xuICBpZiAodHlwZW9mIHRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG1lcmdlZFRoZW1lID0gdGhlbWUob3V0ZXJUaGVtZSk7XG5cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIHRoZW1lKTtcbn07XG5cbnZhciBjcmVhdGVDYWNoZVdpdGhUaGVtZSA9IC8qICNfX1BVUkVfXyAqL3dlYWtNZW1vaXplKGZ1bmN0aW9uIChvdXRlclRoZW1lKSB7XG4gIHJldHVybiB3ZWFrTWVtb2l6ZShmdW5jdGlvbiAodGhlbWUpIHtcbiAgICByZXR1cm4gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpO1xuICB9KTtcbn0pO1xuLypcbnR5cGUgVGhlbWVQcm92aWRlclByb3BzID0ge1xuICB0aGVtZTogT2JqZWN0IHwgKE9iamVjdCA9PiBPYmplY3QpLFxuICBjaGlsZHJlbjogUmVhY3QuTm9kZVxufVxuKi9cblxudmFyIFRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzXG4vKjogVGhlbWVQcm92aWRlclByb3BzICovXG4pIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWVcbi8qIDxDb25maWc6IHt9PiAqL1xuKENvbXBvbmVudFxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PENvbmZpZz4gKi9cbilcbi8qOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDwkRGlmZjxDb25maWcsIHsgdGhlbWU6IE9iamVjdCB9Pj4gKi9cbntcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG5cbiAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpKTtcbiAgfTtcblxuICB2YXIgV2l0aFRoZW1lID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYocmVuZGVyKTtcbiAgV2l0aFRoZW1lLmRpc3BsYXlOYW1lID0gXCJXaXRoVGhlbWUoXCIgKyBjb21wb25lbnROYW1lICsgXCIpXCI7XG4gIHJldHVybiBob2lzdE5vblJlYWN0U3RhdGljcyhXaXRoVGhlbWUsIENvbXBvbmVudCk7XG59XG5cbnZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIHR5cGVQcm9wTmFtZSA9ICdfX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBjcmVhdGVFbW90aW9uUHJvcHMgPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uUHJvcHModHlwZVxuLyo6IFJlYWN0LkVsZW1lbnRUeXBlICovXG4sIHByb3BzXG4vKjogT2JqZWN0ICovXG4pIHtcblxuICB2YXIgbmV3UHJvcHNcbiAgLyo6IGFueSAqL1xuICA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIFJ1bnRpbWUgbGFiZWxpbmcgaXMgYW4gb3B0LWluIGZlYXR1cmUgYmVjYXVzZTpcblxuICByZXR1cm4gbmV3UHJvcHM7XG59O1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBydWxlcyA9IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIgJiYgcnVsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBfcmVmMjtcblxuICAgIHZhciBzZXJpYWxpemVkTmFtZXMgPSBzZXJpYWxpemVkLm5hbWU7XG4gICAgdmFyIG5leHQgPSBzZXJpYWxpemVkLm5leHQ7XG5cbiAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXJpYWxpemVkTmFtZXMgKz0gJyAnICsgbmV4dC5uYW1lO1xuICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCAoX3JlZjIgPSB7fSwgX3JlZjJbXCJkYXRhLWVtb3Rpb25cIl0gPSBjYWNoZS5rZXkgKyBcIiBcIiArIHNlcmlhbGl6ZWROYW1lcywgX3JlZjIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB7XG4gICAgICBfX2h0bWw6IHJ1bGVzXG4gICAgfSwgX3JlZjIubm9uY2UgPSBjYWNoZS5zaGVldC5ub25jZSwgX3JlZjIpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKFxuLyogPGFueSwgYW55PiAqL1xuZnVuY3Rpb24gKHByb3BzLCBjYWNoZSwgcmVmKSB7XG4gIHZhciBjc3NQcm9wID0gcHJvcHMuY3NzOyAvLyBzbyB0aGF0IHVzaW5nIGBjc3NgIGZyb20gYGVtb3Rpb25gIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGNzcyBwcm9wIHdvcmtzXG4gIC8vIG5vdCBwYXNzaW5nIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIHNlcmlhbGl6ZVN0eWxlcyBiZWNhdXNlIGl0IHdvdWxkXG4gIC8vIG1ha2UgY2VydGFpbiBiYWJlbCBvcHRpbWlzYXRpb25zIG5vdCBwb3NzaWJsZVxuXG4gIGlmICh0eXBlb2YgY3NzUHJvcCA9PT0gJ3N0cmluZycgJiYgY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3NzUHJvcCA9IGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF07XG4gIH1cblxuICB2YXIgV3JhcHBlZENvbXBvbmVudCA9IHByb3BzW3R5cGVQcm9wTmFtZV07XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW2Nzc1Byb3BdO1xuICB2YXIgY2xhc3NOYW1lID0gJyc7XG5cbiAgaWYgKHR5cGVvZiBwcm9wcy5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBwcm9wcy5jbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHByb3BzLmNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lICsgXCIgXCI7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAoIWlzRGV2ZWxvcG1lbnQgKSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuXG4gIGlmIChyZWYpIHtcbiAgICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkOiBzZXJpYWxpemVkLFxuICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PT0gJ3N0cmluZydcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIG5ld1Byb3BzKSk7XG59KTtcblxudmFyIEVtb3Rpb24kMSA9IEVtb3Rpb247XG5cbmV4cG9ydCB7IENhY2hlUHJvdmlkZXIgYXMgQywgRW1vdGlvbiQxIGFzIEUsIFRoZW1lQ29udGV4dCBhcyBULCBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgYXMgXywgaXNEZXZlbG9wbWVudCBhcyBhLCBUaGVtZVByb3ZpZGVyIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCB3aXRoVGhlbWUgYXMgZCwgaGFzT3duIGFzIGgsIGlzQnJvd3NlciBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsICJpbXBvcnQgeyBoIGFzIGhhc093biwgRSBhcyBFbW90aW9uLCBjIGFzIGNyZWF0ZUVtb3Rpb25Qcm9wcywgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBUIGFzIFRoZW1lQ29udGV4dCwgaSBhcyBpc0Jyb3dzZXIsIGEgYXMgaXNEZXZlbG9wbWVudCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LWI0YzhiMjY1LmVzbS5qcyc7XG5leHBvcnQgeyBDIGFzIENhY2hlUHJvdmlkZXIsIFQgYXMgVGhlbWVDb250ZXh0LCBiIGFzIFRoZW1lUHJvdmlkZXIsIF8gYXMgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlLCB1IGFzIHVzZVRoZW1lLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIGQgYXMgd2l0aFRoZW1lIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtYjRjOGIyNjUuZXNtLmpzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuPSBmdW5jdGlvbiBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuKHR5cGVcbi8qOiBSZWFjdC5FbGVtZW50VHlwZSAqL1xuLCBwcm9wc1xuLyo6IE9iamVjdCAqL1xuKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgY3JlYXRlRWxlbWVudEFyZ0FycmF5KTtcbn07XG5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG5HbG9iYWxQcm9wc1xuPiAqL1xuPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wc1xuLyo6IEdsb2JhbFByb3BzICovXG4sIGNhY2hlKSB7XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlc10sIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAoIWlzQnJvd3Nlcikge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIHNlcmlhbGl6ZWROYW1lcyA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZC5uZXh0O1xuXG4gICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VyaWFsaXplZE5hbWVzICs9ICcgJyArIG5leHQubmFtZTtcbiAgICAgIHNlcmlhbGl6ZWRTdHlsZXMgKz0gbmV4dC5zdHlsZXM7XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgIH1cblxuICAgIHZhciBzaG91bGRDYWNoZSA9IGNhY2hlLmNvbXBhdCA9PT0gdHJ1ZTtcbiAgICB2YXIgcnVsZXMgPSBjYWNoZS5pbnNlcnQoXCJcIiwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZE5hbWVzLFxuICAgICAgc3R5bGVzOiBzZXJpYWxpemVkU3R5bGVzXG4gICAgfSwgY2FjaGUuc2hlZXQsIHNob3VsZENhY2hlKTtcblxuICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYgPSB7fSwgX3JlZltcImRhdGEtZW1vdGlvblwiXSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbCBcIiArIHNlcmlhbGl6ZWROYW1lcywgX3JlZi5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgIF9faHRtbDogcnVsZXNcbiAgICB9LCBfcmVmLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYpKTtcbiAgfSAvLyB5ZXMsIGkga25vdyB0aGVzZSBob29rcyBhcmUgdXNlZCBjb25kaXRpb25hbGx5XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTtcbiAgICB2YXIgbm9kZVxuICAgIC8qOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCovXG4gICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuLyogaW1wb3J0IHR5cGUgeyBJbnRlcnBvbGF0aW9uLCBTZXJpYWxpemVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnICovXG5cbmZ1bmN0aW9uIGNzcygpXG4vKjogU2VyaWFsaXplZFN0eWxlcyAqL1xue1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxuLypcbnR5cGUgS2V5ZnJhbWVzID0ge3xcbiAgbmFtZTogc3RyaW5nLFxuICBzdHlsZXM6IHN0cmluZyxcbiAgYW5pbTogMSxcbiAgdG9TdHJpbmc6ICgpID0+IHN0cmluZ1xufH0gJiBzdHJpbmdcbiovXG5cbnZhciBrZXlmcmFtZXMgPSBmdW5jdGlvblxuICAvKjogS2V5ZnJhbWVzICovXG5rZXlmcmFtZXMoKSB7XG4gIHZhciBpbnNlcnRhYmxlID0gY3NzLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgdmFyIG5hbWUgPSBcImFuaW1hdGlvbi1cIiArIGluc2VydGFibGUubmFtZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn07XG5cbi8qXG50eXBlIENsYXNzTmFtZUFyZyA9XG4gIHwgc3RyaW5nXG4gIHwgYm9vbGVhblxuICB8IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9XG4gIHwgQXJyYXk8Q2xhc3NOYW1lQXJnPlxuICB8IG51bGxcbiAgfCB2b2lkXG4qL1xuXG52YXIgY2xhc3NuYW1lcyA9IGZ1bmN0aW9uXG4gIC8qOiBzdHJpbmcgKi9cbmNsYXNzbmFtZXMoYXJnc1xuLyo6IEFycmF5PENsYXNzTmFtZUFyZz4gKi9cbikge1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIGNscyA9ICcnO1xuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHZhciB0b0FkZCA9IHZvaWQgMDtcblxuICAgIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZFxuLyo6IE9iamVjdCAqL1xuLCBjc3Ncbi8qOiAoLi4uYXJnczogQXJyYXk8YW55PikgPT4gc3RyaW5nICovXG4sIGNsYXNzTmFtZVxuLyo6IHN0cmluZyAqL1xuKSB7XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciByYXdDbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMpO1xufVxuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWRBcnIgPSBfcmVmLnNlcmlhbGl6ZWRBcnI7XG4gIHZhciBydWxlcyA9IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBydWxlcyA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmVzID0gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG5cbiAgICAgIGlmICghaXNCcm93c2VyICYmIHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJ1bGVzICs9IHJlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzQnJvd3Nlcikge1xuICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIgJiYgcnVsZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgdmFyIF9yZWYyO1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYyID0ge30sIF9yZWYyW1wiZGF0YS1lbW90aW9uXCJdID0gY2FjaGUua2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkQXJyLm1hcChmdW5jdGlvbiAoc2VyaWFsaXplZCkge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQubmFtZTtcbiAgICB9KS5qb2luKCcgJyksIF9yZWYyLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0ge1xuICAgICAgX19odG1sOiBydWxlc1xuICAgIH0sIF9yZWYyLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYyKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG4vKlxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46ICh7XG4gICAgY3NzOiAoLi4uYXJnczogYW55KSA9PiBzdHJpbmcsXG4gICAgY3g6ICguLi5hcmdzOiBBcnJheTxDbGFzc05hbWVBcmc+KSA9PiBzdHJpbmcsXG4gICAgdGhlbWU6IE9iamVjdFxuICB9KSA9PiBSZWFjdC5Ob2RlXG59ICovXG5cblxudmFyIENsYXNzTmFtZXNcbi8qOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxQcm9wcz4qL1xuPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgdmFyIGhhc1JlbmRlcmVkID0gZmFsc2U7XG4gIHZhciBzZXJpYWxpemVkQXJyID0gW107XG5cbiAgdmFyIGNzcyA9IGZ1bmN0aW9uIGNzcygpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHNlcmlhbGl6ZWRBcnIucHVzaChzZXJpYWxpemVkKTsgLy8gcmVnaXN0cmF0aW9uIGhhcyB0byBoYXBwZW4gaGVyZSBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWlnaHQgZ2V0IGNvbnN1bWVkIGJ5IGBjeGBcblxuICAgIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N4IGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHZhciBjb250ZW50ID0ge1xuICAgIGNzczogY3NzLFxuICAgIGN4OiBjeCxcbiAgICB0aGVtZTogUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpXG4gIH07XG4gIHZhciBlbGUgPSBwcm9wcy5jaGlsZHJlbihjb250ZW50KTtcbiAgaGFzUmVuZGVyZWQgPSB0cnVlO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkQXJyOiBzZXJpYWxpemVkQXJyXG4gIH0pLCBlbGUpO1xufSk7XG5cbmV4cG9ydCB7IENsYXNzTmFtZXMsIEdsb2JhbCwganN4IGFzIGNyZWF0ZUVsZW1lbnQsIGNzcywganN4LCBrZXlmcmFtZXMgfTtcbiIsICJmdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHtcbiAgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7XG4gICAgcmF3OiB7XG4gICAgICB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KVxuICAgIH1cbiAgfSkpO1xufVxuZXhwb3J0IHsgX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCBhcyBkZWZhdWx0IH07IiwgIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmZ1bmN0aW9uIGdldFNpZGVBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKSA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBnZXRPcHBvc2l0ZUF4aXMoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSk7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGxldCBtYWluQWxpZ25tZW50U2lkZSA9IGFsaWdubWVudEF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiBbbWFpbkFsaWdubWVudFNpZGUsIGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKV07XG59XG5mdW5jdGlvbiBnZXRFeHBhbmRlZFBsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBhbGlnbm1lbnQgPT4gb3Bwb3NpdGVBbGlnbm1lbnRNYXBbYWxpZ25tZW50XSk7XG59XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgY29uc3QgbHIgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmwgPSBbJ3JpZ2h0JywgJ2xlZnQnXTtcbiAgY29uc3QgdGIgPSBbJ3RvcCcsICdib3R0b20nXTtcbiAgY29uc3QgYnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybCA6IGxyO1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsciA6IHJsO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGIgOiBidDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsICJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIVsnaW5saW5lJywgJ2NvbnRlbnRzJ10uaW5jbHVkZXMoZGlzcGxheSk7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiBbJzpwb3BvdmVyLW9wZW4nLCAnOm1vZGFsJ10uc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHJldHVybiBjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnLCAnZmlsdGVyJ10uc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgWydwYWludCcsICdsYXlvdXQnLCAnc3RyaWN0JywgJ2NvbnRlbnQnXS5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxYLFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgaWYgKGdldE5vZGVOYW1lKG5vZGUpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBjb25zdCByZXN1bHQgPVxuICAvLyBTdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZS5cbiAgbm9kZS5hc3NpZ25lZFNsb3QgfHxcbiAgLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWQuXG4gIG5vZGUucGFyZW50Tm9kZSB8fFxuICAvLyBTaGFkb3dSb290IGRldGVjdGVkLlxuICBpc1NoYWRvd1Jvb3Qobm9kZSkgJiYgbm9kZS5ob3N0IHx8XG4gIC8vIEZhbGxiYWNrLlxuICBnZXREb2N1bWVudEVsZW1lbnQobm9kZSk7XG4gIHJldHVybiBpc1NoYWRvd1Jvb3QocmVzdWx0KSA/IHJlc3VsdC5ob3N0IDogcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgaWYgKGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgPyBub2RlLm93bmVyRG9jdW1lbnQuYm9keSA6IG5vZGUuYm9keTtcbiAgfVxuICBpZiAoaXNIVE1MRWxlbWVudChwYXJlbnROb2RlKSAmJiBpc092ZXJmbG93RWxlbWVudChwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBwYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvcihwYXJlbnROb2RlKTtcbn1cbmZ1bmN0aW9uIGdldE92ZXJmbG93QW5jZXN0b3JzKG5vZGUsIGxpc3QsIHRyYXZlcnNlSWZyYW1lcykge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDI7XG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cbiAgaWYgKHRyYXZlcnNlSWZyYW1lcyA9PT0gdm9pZCAwKSB7XG4gICAgdHJhdmVyc2VJZnJhbWVzID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3IgPSBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKTtcbiAgY29uc3QgaXNCb2R5ID0gc2Nyb2xsYWJsZUFuY2VzdG9yID09PSAoKF9ub2RlJG93bmVyRG9jdW1lbnQyID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudDIuYm9keSk7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhzY3JvbGxhYmxlQW5jZXN0b3IpO1xuICBpZiAoaXNCb2R5KSB7XG4gICAgY29uc3QgZnJhbWVFbGVtZW50ID0gZ2V0RnJhbWVFbGVtZW50KHdpbik7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KHdpbiwgd2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc092ZXJmbG93RWxlbWVudChzY3JvbGxhYmxlQW5jZXN0b3IpID8gc2Nyb2xsYWJsZUFuY2VzdG9yIDogW10sIGZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhmcmFtZUVsZW1lbnQpIDogW10pO1xuICB9XG4gIHJldHVybiBsaXN0LmNvbmNhdChzY3JvbGxhYmxlQW5jZXN0b3IsIGdldE92ZXJmbG93QW5jZXN0b3JzKHNjcm9sbGFibGVBbmNlc3RvciwgW10sIHRyYXZlcnNlSWZyYW1lcykpO1xufVxuZnVuY3Rpb24gZ2V0RnJhbWVFbGVtZW50KHdpbikge1xuICByZXR1cm4gd2luLnBhcmVudCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yod2luLnBhcmVudCkgPyB3aW4uZnJhbWVFbGVtZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldEZyYW1lRWxlbWVudCwgZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IsIGdldE5vZGVOYW1lLCBnZXROb2RlU2Nyb2xsLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgZ2V0V2luZG93LCBpc0NvbnRhaW5pbmdCbG9jaywgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzTm9kZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGlzU2hhZG93Um9vdCwgaXNUYWJsZUVsZW1lbnQsIGlzVG9wTGF5ZXIsIGlzV2ViS2l0IH07XG4iLCAiaW1wb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCwgZGV0ZWN0T3ZlcmZsb3cgYXMgZGV0ZWN0T3ZlcmZsb3ckMSwgb2Zmc2V0IGFzIG9mZnNldCQxLCBhdXRvUGxhY2VtZW50IGFzIGF1dG9QbGFjZW1lbnQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgZmxpcCBhcyBmbGlwJDEsIHNpemUgYXMgc2l6ZSQxLCBoaWRlIGFzIGhpZGUkMSwgYXJyb3cgYXMgYXJyb3ckMSwgaW5saW5lIGFzIGlubGluZSQxLCBsaW1pdFNoaWZ0IGFzIGxpbWl0U2hpZnQkMSwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RnJhbWVFbGVtZW50LCBnZXREb2N1bWVudEVsZW1lbnQsIGlzVG9wTGF5ZXIsIGdldE5vZGVOYW1lLCBpc092ZXJmbG93RWxlbWVudCwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNDb250YWluaW5nQmxvY2ssIGlzVGFibGVFbGVtZW50LCBnZXRDb250YWluaW5nQmxvY2sgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmV4cG9ydCB7IGdldE92ZXJmbG93QW5jZXN0b3JzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5cbmZ1bmN0aW9uIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAvLyBJbiB0ZXN0aW5nIGVudmlyb25tZW50cywgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgYXJlIGVtcHR5XG4gIC8vIHN0cmluZ3MgZm9yIFNWRyBlbGVtZW50cywgcmV0dXJuaW5nIE5hTi4gRmFsbGJhY2sgdG8gYDBgIGluIHRoaXMgY2FzZS5cbiAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjc3Mud2lkdGgpIHx8IDA7XG4gIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGNzcy5oZWlnaHQpIHx8IDA7XG4gIGNvbnN0IGhhc09mZnNldCA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IG9mZnNldFdpZHRoID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRXaWR0aCA6IHdpZHRoO1xuICBjb25zdCBvZmZzZXRIZWlnaHQgPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldEhlaWdodCA6IGhlaWdodDtcbiAgY29uc3Qgc2hvdWxkRmFsbGJhY2sgPSByb3VuZCh3aWR0aCkgIT09IG9mZnNldFdpZHRoIHx8IHJvdW5kKGhlaWdodCkgIT09IG9mZnNldEhlaWdodDtcbiAgaWYgKHNob3VsZEZhbGxiYWNrKSB7XG4gICAgd2lkdGggPSBvZmZzZXRXaWR0aDtcbiAgICBoZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJDogc2hvdWxkRmFsbGJhY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5jb250ZXh0RWxlbWVudCA6IGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFNjYWxlKGVsZW1lbnQpIHtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChkb21FbGVtZW50KSkge1xuICAgIHJldHVybiBjcmVhdGVDb29yZHMoMSk7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhkb21FbGVtZW50KTtcbiAgbGV0IHggPSAoJCA/IHJvdW5kKHJlY3Qud2lkdGgpIDogcmVjdC53aWR0aCkgLyB3aWR0aDtcbiAgbGV0IHkgPSAoJCA/IHJvdW5kKHJlY3QuaGVpZ2h0KSA6IHJlY3QuaGVpZ2h0KSAvIGhlaWdodDtcblxuICAvLyAwLCBOYU4sIG9yIEluZmluaXR5IHNob3VsZCBhbHdheXMgZmFsbGJhY2sgdG8gMS5cblxuICBpZiAoIXggfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgIHggPSAxO1xuICB9XG4gIGlmICgheSB8fCAhTnVtYmVyLmlzRmluaXRlKHkpKSB7XG4gICAgeSA9IDE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3Qgbm9PZmZzZXRzID0gLyojX19QVVJFX18qL2NyZWF0ZUNvb3JkcygwKTtcbmZ1bmN0aW9uIGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNXZWJLaXQoKSB8fCAhd2luLnZpc3VhbFZpZXdwb3J0KSB7XG4gICAgcmV0dXJuIG5vT2Zmc2V0cztcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LFxuICAgIHk6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3BcbiAgfTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZWxlbWVudCwgaXNGaXhlZCwgZmxvYXRpbmdPZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoIWZsb2F0aW5nT2Zmc2V0UGFyZW50IHx8IGlzRml4ZWQgJiYgZmxvYXRpbmdPZmZzZXRQYXJlbnQgIT09IGdldFdpbmRvdyhlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGlmIChpbmNsdWRlU2NhbGUpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50KSB7XG4gICAgICBpZiAoaXNFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCB2aXN1YWxPZmZzZXRzID0gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50LCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkgPyBnZXRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDApO1xuICBsZXQgeCA9IChjbGllbnRSZWN0LmxlZnQgKyB2aXN1YWxPZmZzZXRzLngpIC8gc2NhbGUueDtcbiAgbGV0IHkgPSAoY2xpZW50UmVjdC50b3AgKyB2aXN1YWxPZmZzZXRzLnkpIC8gc2NhbGUueTtcbiAgbGV0IHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlLng7XG4gIGxldCBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlLnk7XG4gIGlmIChkb21FbGVtZW50KSB7XG4gICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGRvbUVsZW1lbnQpO1xuICAgIGNvbnN0IG9mZnNldFdpbiA9IG9mZnNldFBhcmVudCAmJiBpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSA/IGdldFdpbmRvdyhvZmZzZXRQYXJlbnQpIDogb2Zmc2V0UGFyZW50O1xuICAgIGxldCBjdXJyZW50V2luID0gd2luO1xuICAgIGxldCBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50cyxcbiAgICByZWN0LFxuICAgIG9mZnNldFBhcmVudCxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgdG9wTGF5ZXIgPSBlbGVtZW50cyA/IGlzVG9wTGF5ZXIoZWxlbWVudHMuZmxvYXRpbmcpIDogZmFsc2U7XG4gIGlmIChvZmZzZXRQYXJlbnQgPT09IGRvY3VtZW50RWxlbWVudCB8fCB0b3BMYXllciAmJiBpc0ZpeGVkKSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCAqIHNjYWxlLngsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCAqIHNjYWxlLnksXG4gICAgeDogcmVjdC54ICogc2NhbGUueCAtIHNjcm9sbC5zY3JvbGxMZWZ0ICogc2NhbGUueCArIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnkgKiBzY2FsZS55IC0gc2Nyb2xsLnNjcm9sbFRvcCAqIHNjYWxlLnkgKyBvZmZzZXRzLnlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHMoZWxlbWVudCkge1xuICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmdldENsaWVudFJlY3RzKCkpO1xufVxuXG4vLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4vLyBpbmNvcnJlY3QgZm9yIFJUTC5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCwgcmVjdCkge1xuICBjb25zdCBsZWZ0U2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xuICBpZiAoIXJlY3QpIHtcbiAgICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGxlZnRTY3JvbGw7XG4gIH1cbiAgcmV0dXJuIHJlY3QubGVmdCArIGxlZnRTY3JvbGw7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIC4uLmNsaXBwaW5nQW5jZXN0b3IsXG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnlcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmNsdWRlcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgICAgIC8vIEZpcmVmb3ggd2l0aCBsYXlvdXQuc2Nyb2xsYmFyLnNpZGUgPSAzIGluIGFib3V0OmNvbmZpZyB0byB0ZXN0IHRoaXMuXG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGxldCBodG1sWCA9IDA7XG4gIGxldCBodG1sWSA9IDA7XG4gIGlmIChkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgY29uc3QgaHRtbFJlY3QgPSBkb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaHRtbFkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICAgIGh0bWxYID0gaHRtbFJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC1cbiAgICAvLyBSVEwgPGJvZHk+IHNjcm9sbGJhci5cbiAgICBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCwgaHRtbFJlY3QpO1xuICB9XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCAtIGh0bWxYO1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbFk7XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNTdGF0aWNQb3NpdGlvbmVkKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHBvbHlmaWxsKSB7XG4gICAgcmV0dXJuIHBvbHlmaWxsKGVsZW1lbnQpO1xuICB9XG4gIGxldCByYXdPZmZzZXRQYXJlbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcblxuICAvLyBGaXJlZm94IHJldHVybnMgdGhlIDxodG1sPiBlbGVtZW50IGFzIHRoZSBvZmZzZXRQYXJlbnQgaWYgaXQncyBub24tc3RhdGljLFxuICAvLyB3aGlsZSBDaHJvbWUgYW5kIFNhZmFyaSByZXR1cm4gdGhlIDxib2R5PiBlbGVtZW50LiBUaGUgPGJvZHk+IGVsZW1lbnQgbXVzdFxuICAvLyBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvcnJlY3QgY2FsY3VsYXRpb25zIGV2ZW4gaWYgdGhlIDxodG1sPiBlbGVtZW50IGlzXG4gIC8vIG5vbi1zdGF0aWMuXG4gIGlmIChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgPT09IHJhd09mZnNldFBhcmVudCkge1xuICAgIHJhd09mZnNldFBhcmVudCA9IHJhd09mZnNldFBhcmVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cbiAgcmV0dXJuIHJhd09mZnNldFBhcmVudDtcbn1cblxuLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cbmZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmIChpc1RvcExheWVyKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBsZXQgc3ZnT2Zmc2V0UGFyZW50ID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgICB3aGlsZSAoc3ZnT2Zmc2V0UGFyZW50ICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoc3ZnT2Zmc2V0UGFyZW50KSkge1xuICAgICAgaWYgKGlzRWxlbWVudChzdmdPZmZzZXRQYXJlbnQpICYmICFpc1N0YXRpY1Bvc2l0aW9uZWQoc3ZnT2Zmc2V0UGFyZW50KSkge1xuICAgICAgICByZXR1cm4gc3ZnT2Zmc2V0UGFyZW50O1xuICAgICAgfVxuICAgICAgc3ZnT2Zmc2V0UGFyZW50ID0gZ2V0UGFyZW50Tm9kZShzdmdPZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGxldCBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKTtcbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnQpKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQsIHBvbHlmaWxsKTtcbiAgfVxuICBpZiAob2Zmc2V0UGFyZW50ICYmIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShvZmZzZXRQYXJlbnQpICYmIGlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnQpICYmICFpc0NvbnRhaW5pbmdCbG9jayhvZmZzZXRQYXJlbnQpKSB7XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW47XG59XG5cbmNvbnN0IGdldEVsZW1lbnRSZWN0cyA9IGFzeW5jIGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGdldE9mZnNldFBhcmVudEZuID0gdGhpcy5nZXRPZmZzZXRQYXJlbnQgfHwgZ2V0T2Zmc2V0UGFyZW50O1xuICBjb25zdCBnZXREaW1lbnNpb25zRm4gPSB0aGlzLmdldERpbWVuc2lvbnM7XG4gIGNvbnN0IGZsb2F0aW5nRGltZW5zaW9ucyA9IGF3YWl0IGdldERpbWVuc2lvbnNGbihkYXRhLmZsb2F0aW5nKTtcbiAgcmV0dXJuIHtcbiAgICByZWZlcmVuY2U6IGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGRhdGEucmVmZXJlbmNlLCBhd2FpdCBnZXRPZmZzZXRQYXJlbnRGbihkYXRhLmZsb2F0aW5nKSwgZGF0YS5zdHJhdGVneSksXG4gICAgZmxvYXRpbmc6IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IGZsb2F0aW5nRGltZW5zaW9ucy53aWR0aCxcbiAgICAgIGhlaWdodDogZmxvYXRpbmdEaW1lbnNpb25zLmhlaWdodFxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzUlRMKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlyZWN0aW9uID09PSAncnRsJztcbn1cblxuY29uc3QgcGxhdGZvcm0gPSB7XG4gIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0LFxuICBnZXREb2N1bWVudEVsZW1lbnQsXG4gIGdldENsaXBwaW5nUmVjdCxcbiAgZ2V0T2Zmc2V0UGFyZW50LFxuICBnZXRFbGVtZW50UmVjdHMsXG4gIGdldENsaWVudFJlY3RzLFxuICBnZXREaW1lbnNpb25zLFxuICBnZXRTY2FsZSxcbiAgaXNFbGVtZW50LFxuICBpc1JUTFxufTtcblxuLy8gaHR0cHM6Ly9zYW10aG9yLmF1LzIwMjEvb2JzZXJ2aW5nLWRvbS9cbmZ1bmN0aW9uIG9ic2VydmVNb3ZlKGVsZW1lbnQsIG9uTW92ZSkge1xuICBsZXQgaW8gPSBudWxsO1xuICBsZXQgdGltZW91dElkO1xuICBjb25zdCByb290ID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHZhciBfaW87XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgKF9pbyA9IGlvKSA9PSBudWxsIHx8IF9pby5kaXNjb25uZWN0KCk7XG4gICAgaW8gPSBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIHJlZnJlc2goc2tpcCwgdGhyZXNob2xkKSB7XG4gICAgaWYgKHNraXAgPT09IHZvaWQgMCkge1xuICAgICAgc2tpcCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhyZXNob2xkID09PSB2b2lkIDApIHtcbiAgICAgIHRocmVzaG9sZCA9IDE7XG4gICAgfVxuICAgIGNsZWFudXAoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIGNsaXBwZWQsIHRoZSByYXRpbyBpcyAwLiBUaHJvdHRsZSB0aGUgcmVmcmVzaFxuICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiB1cGRhdGVzLlxuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAobmV4dFJlZlJlY3QueCAhPT0gcHJldlJlZlJlY3QueCB8fCBuZXh0UmVmUmVjdC55ICE9PSBwcmV2UmVmUmVjdC55IHx8IG5leHRSZWZSZWN0LndpZHRoICE9PSBwcmV2UmVmUmVjdC53aWR0aCB8fCBuZXh0UmVmUmVjdC5oZWlnaHQgIT09IHByZXZSZWZSZWN0LmhlaWdodCkpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcmV2UmVmUmVjdCA9IG5leHRSZWZSZWN0O1xuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWVMb29wKTtcbiAgfVxuICB1cGRhdGUoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB2YXIgX3Jlc2l6ZU9ic2VydmVyMjtcbiAgICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUpO1xuICAgICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgICB9KTtcbiAgICBjbGVhbnVwSW8gPT0gbnVsbCB8fCBjbGVhbnVwSW8oKTtcbiAgICAoX3Jlc2l6ZU9ic2VydmVyMiA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlcjIuZGlzY29ubmVjdCgpO1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmNvbnN0IGRldGVjdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3ckMTtcblxuLyoqXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxuICogc3BlY2lmaWVkIGF4ZXMuXG4gKiBBIG51bWJlciAoc2hvcnRoYW5kIGZvciBgbWFpbkF4aXNgIG9yIGRpc3RhbmNlKSwgb3IgYW4gYXhlcyBjb25maWd1cmF0aW9uXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAqL1xuY29uc3Qgb2Zmc2V0ID0gb2Zmc2V0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gYXV0b1BsYWNlbWVudCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBzaGlmdGluZyBpdCBpbiBvcmRlciB0b1xuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2hpZnRcbiAqL1xuY29uc3Qgc2hpZnQgPSBzaGlmdCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZsaXAkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgXHUyMDE0XG4gKiBmb3IgaW5zdGFuY2UsIHByZXZlbnQgaXQgZnJvbSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgYm91bmRhcnkgb3IgbWF0Y2ggdGhlXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2l6ZVxuICovXG5jb25zdCBzaXplID0gc2l6ZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAqIHdoZW4gaXQgaXMgbm90IGluIHRoZSBzYW1lIGNsaXBwaW5nIGNvbnRleHQgYXMgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2hpZGVcbiAqL1xuY29uc3QgaGlkZSA9IGhpZGUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBhcnJvdyQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBpbmxpbmUkMTtcblxuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGxpbWl0U2hpZnQkMTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IChyZWZlcmVuY2UsIGZsb2F0aW5nLCBvcHRpb25zKSA9PiB7XG4gIC8vIFRoaXMgY2FjaGVzIHRoZSBleHBlbnNpdmUgYGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9yc2AgZnVuY3Rpb24gc28gdGhhdFxuICAvLyBtdWx0aXBsZSBsaWZlY3ljbGUgcmVzZXRzIHJlLXVzZSB0aGUgc2FtZSByZXN1bHQuIEl0IG9ubHkgbGl2ZXMgZm9yIGFcbiAgLy8gc2luZ2xlIGNhbGwuIElmIG90aGVyIGZ1bmN0aW9ucyBiZWNvbWUgZXhwZW5zaXZlLCB3ZSBjYW4gYWRkIHRoZW0gYXMgd2VsbC5cbiAgY29uc3QgY2FjaGUgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7XG4gICAgcGxhdGZvcm0sXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICBjb25zdCBwbGF0Zm9ybVdpdGhDYWNoZSA9IHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLnBsYXRmb3JtLFxuICAgIF9jOiBjYWNoZVxuICB9O1xuICByZXR1cm4gY29tcHV0ZVBvc2l0aW9uJDEocmVmZXJlbmNlLCBmbG9hdGluZywge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMsXG4gICAgcGxhdGZvcm06IHBsYXRmb3JtV2l0aENhY2hlXG4gIH0pO1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBwbGF0Zm9ybSwgc2hpZnQsIHNpemUgfTtcbiIsICJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB7IGpzeCwga2V5ZnJhbWVzLCBjc3MgYXMgY3NzJDIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCBfdHlwZW9mIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZic7XG5pbXBvcnQgX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBhdXRvVXBkYXRlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgdXNlTGF5b3V0RWZmZWN0IGZyb20gJ3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QnO1xuXG52YXIgX2V4Y2x1ZGVkJDQgPSBbXCJjbGFzc05hbWVcIiwgXCJjbGVhclZhbHVlXCIsIFwiY3hcIiwgXCJnZXRTdHlsZXNcIiwgXCJnZXRDbGFzc05hbWVzXCIsIFwiZ2V0VmFsdWVcIiwgXCJoYXNWYWx1ZVwiLCBcImlzTXVsdGlcIiwgXCJpc1J0bFwiLCBcIm9wdGlvbnNcIiwgXCJzZWxlY3RPcHRpb25cIiwgXCJzZWxlY3RQcm9wc1wiLCBcInNldFZhbHVlXCIsIFwidGhlbWVcIl07XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE5PIE9QXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xhc3MgTmFtZSBQcmVmaXhlclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb21wb25lbnQgc3RhdGUgZm9yIHN0eWxpbmcgd2l0aCBjbGFzcyBuYW1lcy5cblxuIEV4cGVjdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBPUiBhIHN0cmluZy9vYmplY3QgcGFpcjpcbiAtIGNsYXNzTmFtZShbJ2NvbXAnLCAnY29tcC1hcmcnLCAnY29tcC1hcmctMiddKVxuICAgQHJldHVybnMgJ3JlYWN0LXNlbGVjdF9fY29tcCByZWFjdC1zZWxlY3RfX2NvbXAtYXJnIHJlYWN0LXNlbGVjdF9fY29tcC1hcmctMidcbiAtIGNsYXNzTmFtZSgnY29tcCcsIHsgc29tZTogdHJ1ZSwgc3RhdGU6IGZhbHNlIH0pXG4gICBAcmV0dXJucyAncmVhY3Qtc2VsZWN0X19jb21wIHJlYWN0LXNlbGVjdF9fY29tcC0tc29tZSdcbiovXG5mdW5jdGlvbiBhcHBseVByZWZpeFRvTmFtZShwcmVmaXgsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfSBlbHNlIGlmIChuYW1lWzBdID09PSAnLScpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgbmFtZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ19fJyArIG5hbWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNsYXNzTmFtZXMocHJlZml4LCBzdGF0ZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NOYW1lTGlzdCA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgY2xhc3NOYW1lTGlzdFtfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgdmFyIGFyciA9IFtdLmNvbmNhdChjbGFzc05hbWVMaXN0KTtcbiAgaWYgKHN0YXRlICYmIHByZWZpeCkge1xuICAgIGZvciAodmFyIGtleSBpbiBzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLmhhc093blByb3BlcnR5KGtleSkgJiYgc3RhdGVba2V5XSkge1xuICAgICAgICBhcnIucHVzaChcIlwiLmNvbmNhdChhcHBseVByZWZpeFRvTmFtZShwcmVmaXgsIGtleSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaTtcbiAgfSkubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIFN0cmluZyhpKS50cmltKCk7XG4gIH0pLmpvaW4oJyAnKTtcbn1cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xlYW4gVmFsdWVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgY2xlYW5WYWx1ZSA9IGZ1bmN0aW9uIGNsZWFuVmFsdWUodmFsdWUpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSByZXR1cm4gW3ZhbHVlXTtcbiAgcmV0dXJuIFtdO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDbGVhbiBDb21tb24gUHJvcHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgY2xlYW5Db21tb25Qcm9wcyA9IGZ1bmN0aW9uIGNsZWFuQ29tbW9uUHJvcHMocHJvcHMpIHtcbiAgLy9jbGFzc05hbWVcbiAgcHJvcHMuY2xhc3NOYW1lO1xuICAgIHByb3BzLmNsZWFyVmFsdWU7XG4gICAgcHJvcHMuY3g7XG4gICAgcHJvcHMuZ2V0U3R5bGVzO1xuICAgIHByb3BzLmdldENsYXNzTmFtZXM7XG4gICAgcHJvcHMuZ2V0VmFsdWU7XG4gICAgcHJvcHMuaGFzVmFsdWU7XG4gICAgcHJvcHMuaXNNdWx0aTtcbiAgICBwcm9wcy5pc1J0bDtcbiAgICBwcm9wcy5vcHRpb25zO1xuICAgIHByb3BzLnNlbGVjdE9wdGlvbjtcbiAgICBwcm9wcy5zZWxlY3RQcm9wcztcbiAgICBwcm9wcy5zZXRWYWx1ZTtcbiAgICBwcm9wcy50aGVtZTtcbiAgICB2YXIgaW5uZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkJDQpO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7fSwgaW5uZXJQcm9wcyk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdldCBTdHlsZSBQcm9wc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBnZXRTdHlsZVByb3BzID0gZnVuY3Rpb24gZ2V0U3R5bGVQcm9wcyhwcm9wcywgbmFtZSwgY2xhc3NOYW1lc1N0YXRlKSB7XG4gIHZhciBjeCA9IHByb3BzLmN4LFxuICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICBnZXRDbGFzc05hbWVzID0gcHJvcHMuZ2V0Q2xhc3NOYW1lcyxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWU7XG4gIHJldHVybiB7XG4gICAgY3NzOiBnZXRTdHlsZXMobmFtZSwgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goY2xhc3NOYW1lc1N0YXRlICE9PSBudWxsICYmIGNsYXNzTmFtZXNTdGF0ZSAhPT0gdm9pZCAwID8gY2xhc3NOYW1lc1N0YXRlIDoge30sIGdldENsYXNzTmFtZXMobmFtZSwgcHJvcHMpLCBjbGFzc05hbWUpXG4gIH07XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhhbmRsZSBJbnB1dCBDaGFuZ2Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFZhbHVlLCBhY3Rpb25NZXRhLCBvbklucHV0Q2hhbmdlKSB7XG4gIGlmIChvbklucHV0Q2hhbmdlKSB7XG4gICAgdmFyIF9uZXdWYWx1ZSA9IG9uSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgaWYgKHR5cGVvZiBfbmV3VmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gX25ld1ZhbHVlO1xuICB9XG4gIHJldHVybiBpbnB1dFZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjcm9sbCBIZWxwZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaXNEb2N1bWVudEVsZW1lbnQoZWwpIHtcbiAgcmV0dXJuIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHksIHdpbmRvd10uaW5kZXhPZihlbCkgPiAtMTtcbn1cblxuLy8gTm9ybWFsaXplZCBTY3JvbGwgVG9wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gbm9ybWFsaXplZEhlaWdodChlbCkge1xuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodDtcbiAgfVxuICByZXR1cm4gZWwuY2xpZW50SGVpZ2h0O1xufVxuXG4vLyBOb3JtYWxpemVkIHNjcm9sbFRvICYgc2Nyb2xsVG9wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsVG9wKGVsKSB7XG4gIGlmIChpc0RvY3VtZW50RWxlbWVudChlbCkpIHtcbiAgICByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICB9XG4gIHJldHVybiBlbC5zY3JvbGxUb3A7XG59XG5mdW5jdGlvbiBzY3JvbGxUbyhlbCwgdG9wKSB7XG4gIC8vIHdpdGggYSBzY3JvbGwgZGlzdGFuY2UsIHdlIHBlcmZvcm0gc2Nyb2xsIG9uIHRoZSBlbGVtZW50XG4gIGlmIChpc0RvY3VtZW50RWxlbWVudChlbCkpIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdG9wKTtcbiAgICByZXR1cm47XG4gIH1cbiAgZWwuc2Nyb2xsVG9wID0gdG9wO1xufVxuXG4vLyBHZXQgU2Nyb2xsIFBhcmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHZhciBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSc7XG4gIHZhciBvdmVyZmxvd1J4ID0gLyhhdXRvfHNjcm9sbCkvO1xuICBpZiAoc3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGZvciAodmFyIHBhcmVudCA9IGVsZW1lbnQ7IHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50Oykge1xuICAgIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpO1xuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChvdmVyZmxvd1J4LnRlc3Qoc3R5bGUub3ZlcmZsb3cgKyBzdHlsZS5vdmVyZmxvd1kgKyBzdHlsZS5vdmVyZmxvd1gpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xufVxuXG4vLyBBbmltYXRlZCBTY3JvbGwgVG9cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAgQHBhcmFtIHQ6IHRpbWUgKGVsYXBzZWQpXG4gIEBwYXJhbSBiOiBpbml0aWFsIHZhbHVlXG4gIEBwYXJhbSBjOiBhbW91bnQgb2YgY2hhbmdlXG4gIEBwYXJhbSBkOiBkdXJhdGlvblxuKi9cbmZ1bmN0aW9uIGVhc2VPdXRDdWJpYyh0LCBiLCBjLCBkKSB7XG4gIHJldHVybiBjICogKCh0ID0gdCAvIGQgLSAxKSAqIHQgKiB0ICsgMSkgKyBiO1xufVxuZnVuY3Rpb24gYW5pbWF0ZWRTY3JvbGxUbyhlbGVtZW50LCB0bykge1xuICB2YXIgZHVyYXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDIwMDtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBub29wO1xuICB2YXIgc3RhcnQgPSBnZXRTY3JvbGxUb3AoZWxlbWVudCk7XG4gIHZhciBjaGFuZ2UgPSB0byAtIHN0YXJ0O1xuICB2YXIgaW5jcmVtZW50ID0gMTA7XG4gIHZhciBjdXJyZW50VGltZSA9IDA7XG4gIGZ1bmN0aW9uIGFuaW1hdGVTY3JvbGwoKSB7XG4gICAgY3VycmVudFRpbWUgKz0gaW5jcmVtZW50O1xuICAgIHZhciB2YWwgPSBlYXNlT3V0Q3ViaWMoY3VycmVudFRpbWUsIHN0YXJ0LCBjaGFuZ2UsIGR1cmF0aW9uKTtcbiAgICBzY3JvbGxUbyhlbGVtZW50LCB2YWwpO1xuICAgIGlmIChjdXJyZW50VGltZSA8IGR1cmF0aW9uKSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGVTY3JvbGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgYW5pbWF0ZVNjcm9sbCgpO1xufVxuXG4vLyBTY3JvbGwgSW50byBWaWV3XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcobWVudUVsLCBmb2N1c2VkRWwpIHtcbiAgdmFyIG1lbnVSZWN0ID0gbWVudUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgZm9jdXNlZFJlY3QgPSBmb2N1c2VkRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBvdmVyU2Nyb2xsID0gZm9jdXNlZEVsLm9mZnNldEhlaWdodCAvIDM7XG4gIGlmIChmb2N1c2VkUmVjdC5ib3R0b20gKyBvdmVyU2Nyb2xsID4gbWVudVJlY3QuYm90dG9tKSB7XG4gICAgc2Nyb2xsVG8obWVudUVsLCBNYXRoLm1pbihmb2N1c2VkRWwub2Zmc2V0VG9wICsgZm9jdXNlZEVsLmNsaWVudEhlaWdodCAtIG1lbnVFbC5vZmZzZXRIZWlnaHQgKyBvdmVyU2Nyb2xsLCBtZW51RWwuc2Nyb2xsSGVpZ2h0KSk7XG4gIH0gZWxzZSBpZiAoZm9jdXNlZFJlY3QudG9wIC0gb3ZlclNjcm9sbCA8IG1lbnVSZWN0LnRvcCkge1xuICAgIHNjcm9sbFRvKG1lbnVFbCwgTWF0aC5tYXgoZm9jdXNlZEVsLm9mZnNldFRvcCAtIG92ZXJTY3JvbGwsIDApKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdldCBib3VuZGluZyBjbGllbnQgb2JqZWN0XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gY2Fubm90IGdldCBrZXlzIHVzaW5nIGFycmF5IG5vdGF0aW9uIHdpdGggRE9NUmVjdFxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRPYmooZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHdpZHRoOiByZWN0LndpZHRoXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG91Y2ggQ2FwYWJpbGl0eSBEZXRlY3RvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzVG91Y2hDYXBhYmxlKCkge1xuICB0cnkge1xuICAgIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdUb3VjaEV2ZW50Jyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNb2JpbGUgRGV2aWNlIERldGVjdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaXNNb2JpbGVEZXZpY2UoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBhc3NpdmUgRXZlbnQgRGV0ZWN0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmFmZ3JhcGgvZGV0ZWN0LWl0L2Jsb2IvbWFpbi9zcmMvaW5kZXgudHMjTDE5LUwzNlxudmFyIHBhc3NpdmVPcHRpb25BY2Nlc3NlZCA9IGZhbHNlO1xudmFyIG9wdGlvbnMgPSB7XG4gIGdldCBwYXNzaXZlKCkge1xuICAgIHJldHVybiBwYXNzaXZlT3B0aW9uQWNjZXNzZWQgPSB0cnVlO1xuICB9XG59O1xuLy8gY2hlY2sgZm9yIFNTUlxudmFyIHcgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9O1xuaWYgKHcuYWRkRXZlbnRMaXN0ZW5lciAmJiB3LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgdy5hZGRFdmVudExpc3RlbmVyKCdwJywgbm9vcCwgb3B0aW9ucyk7XG4gIHcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncCcsIG5vb3AsIGZhbHNlKTtcbn1cbnZhciBzdXBwb3J0c1Bhc3NpdmVFdmVudHMgPSBwYXNzaXZlT3B0aW9uQWNjZXNzZWQ7XG5mdW5jdGlvbiBub3ROdWxsaXNoKGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0gIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG59XG5mdW5jdGlvbiB2YWx1ZVRlcm5hcnkoaXNNdWx0aSwgbXVsdGlWYWx1ZSwgc2luZ2xlVmFsdWUpIHtcbiAgcmV0dXJuIGlzTXVsdGkgPyBtdWx0aVZhbHVlIDogc2luZ2xlVmFsdWU7XG59XG5mdW5jdGlvbiBzaW5nbGVWYWx1ZUFzVmFsdWUoc2luZ2xlVmFsdWUpIHtcbiAgcmV0dXJuIHNpbmdsZVZhbHVlO1xufVxuZnVuY3Rpb24gbXVsdGlWYWx1ZUFzVmFsdWUobXVsdGlWYWx1ZSkge1xuICByZXR1cm4gbXVsdGlWYWx1ZTtcbn1cbnZhciByZW1vdmVQcm9wcyA9IGZ1bmN0aW9uIHJlbW92ZVByb3BzKHByb3BzT2JqKSB7XG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcHJvcGVydGllcyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgcHJvcGVydGllc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuICB2YXIgcHJvcHNNYXAgPSBPYmplY3QuZW50cmllcyhwcm9wc09iaikuZmlsdGVyKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICBrZXkgPSBfcmVmMlswXTtcbiAgICByZXR1cm4gIXByb3BlcnRpZXMuaW5jbHVkZXMoa2V5KTtcbiAgfSk7XG4gIHJldHVybiBwcm9wc01hcC5yZWR1Y2UoZnVuY3Rpb24gKG5ld1Byb3BzLCBfcmVmMykge1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICAgIGtleSA9IF9yZWY0WzBdLFxuICAgICAgdmFsID0gX3JlZjRbMV07XG4gICAgbmV3UHJvcHNba2V5XSA9IHZhbDtcbiAgICByZXR1cm4gbmV3UHJvcHM7XG4gIH0sIHt9KTtcbn07XG5cbnZhciBfZXhjbHVkZWQkMyA9IFtcImNoaWxkcmVuXCIsIFwiaW5uZXJQcm9wc1wiXSxcbiAgX2V4Y2x1ZGVkMiQxID0gW1wiY2hpbGRyZW5cIiwgXCJpbm5lclByb3BzXCJdO1xuZnVuY3Rpb24gZ2V0TWVudVBsYWNlbWVudChfcmVmKSB7XG4gIHZhciBwcmVmZXJyZWRNYXhIZWlnaHQgPSBfcmVmLm1heEhlaWdodCxcbiAgICBtZW51RWwgPSBfcmVmLm1lbnVFbCxcbiAgICBtaW5IZWlnaHQgPSBfcmVmLm1pbkhlaWdodCxcbiAgICBwcmVmZXJyZWRQbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudCxcbiAgICBzaG91bGRTY3JvbGwgPSBfcmVmLnNob3VsZFNjcm9sbCxcbiAgICBpc0ZpeGVkUG9zaXRpb24gPSBfcmVmLmlzRml4ZWRQb3NpdGlvbixcbiAgICBjb250cm9sSGVpZ2h0ID0gX3JlZi5jb250cm9sSGVpZ2h0O1xuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KG1lbnVFbCk7XG4gIHZhciBkZWZhdWx0U3RhdGUgPSB7XG4gICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICB9O1xuXG4gIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nLCByZXR1cm4gZGVmYXVsdCBzdGF0ZVxuICBpZiAoIW1lbnVFbCB8fCAhbWVudUVsLm9mZnNldFBhcmVudCkgcmV0dXJuIGRlZmF1bHRTdGF0ZTtcblxuICAvLyB3ZSBjYW4ndCB0cnVzdCBgc2Nyb2xsUGFyZW50LnNjcm9sbEhlaWdodGAgLS0+IGl0IG1heSBpbmNyZWFzZSB3aGVuXG4gIC8vIHRoZSBtZW51IGlzIHJlbmRlcmVkXG4gIHZhciBfc2Nyb2xsUGFyZW50JGdldEJvdW4gPSBzY3JvbGxQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgc2Nyb2xsSGVpZ2h0ID0gX3Njcm9sbFBhcmVudCRnZXRCb3VuLmhlaWdodDtcbiAgdmFyIF9tZW51RWwkZ2V0Qm91bmRpbmdDbCA9IG1lbnVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICBtZW51Qm90dG9tID0gX21lbnVFbCRnZXRCb3VuZGluZ0NsLmJvdHRvbSxcbiAgICBtZW51SGVpZ2h0ID0gX21lbnVFbCRnZXRCb3VuZGluZ0NsLmhlaWdodCxcbiAgICBtZW51VG9wID0gX21lbnVFbCRnZXRCb3VuZGluZ0NsLnRvcDtcbiAgdmFyIF9tZW51RWwkb2Zmc2V0UGFyZW50JCA9IG1lbnVFbC5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgY29udGFpbmVyVG9wID0gX21lbnVFbCRvZmZzZXRQYXJlbnQkLnRvcDtcbiAgdmFyIHZpZXdIZWlnaHQgPSBpc0ZpeGVkUG9zaXRpb24gPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiBub3JtYWxpemVkSGVpZ2h0KHNjcm9sbFBhcmVudCk7XG4gIHZhciBzY3JvbGxUb3AgPSBnZXRTY3JvbGxUb3Aoc2Nyb2xsUGFyZW50KTtcbiAgdmFyIG1hcmdpbkJvdHRvbSA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobWVudUVsKS5tYXJnaW5Cb3R0b20sIDEwKTtcbiAgdmFyIG1hcmdpblRvcCA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobWVudUVsKS5tYXJnaW5Ub3AsIDEwKTtcbiAgdmFyIHZpZXdTcGFjZUFib3ZlID0gY29udGFpbmVyVG9wIC0gbWFyZ2luVG9wO1xuICB2YXIgdmlld1NwYWNlQmVsb3cgPSB2aWV3SGVpZ2h0IC0gbWVudVRvcDtcbiAgdmFyIHNjcm9sbFNwYWNlQWJvdmUgPSB2aWV3U3BhY2VBYm92ZSArIHNjcm9sbFRvcDtcbiAgdmFyIHNjcm9sbFNwYWNlQmVsb3cgPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBtZW51VG9wO1xuICB2YXIgc2Nyb2xsRG93biA9IG1lbnVCb3R0b20gLSB2aWV3SGVpZ2h0ICsgc2Nyb2xsVG9wICsgbWFyZ2luQm90dG9tO1xuICB2YXIgc2Nyb2xsVXAgPSBzY3JvbGxUb3AgKyBtZW51VG9wIC0gbWFyZ2luVG9wO1xuICB2YXIgc2Nyb2xsRHVyYXRpb24gPSAxNjA7XG4gIHN3aXRjaCAocHJlZmVycmVkUGxhY2VtZW50KSB7XG4gICAgY2FzZSAnYXV0byc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIC8vIDE6IHRoZSBtZW51IHdpbGwgZml0LCBkbyBub3RoaW5nXG4gICAgICBpZiAodmlld1NwYWNlQmVsb3cgPj0gbWVudUhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gMjogdGhlIG1lbnUgd2lsbCBmaXQsIGlmIHNjcm9sbGVkXG4gICAgICBpZiAoc2Nyb2xsU3BhY2VCZWxvdyA+PSBtZW51SGVpZ2h0ICYmICFpc0ZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxEb3duLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDM6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBjb25zdHJhaW5lZFxuICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VCZWxvdyA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUJlbG93ID49IG1pbkhlaWdodCkge1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgYW5pbWF0ZWRTY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbERvd24sIHNjcm9sbER1cmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gcHJvdmlkZSBhcyBtdWNoIG9mIHRoZSBtZW51IGFzIHBvc3NpYmxlIHRvIHRoZSB1c2VyLFxuICAgICAgICAvLyBzbyBnaXZlIHRoZW0gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGJlbG93IHJhdGhlciB0aGFuIHRoZSBtaW5IZWlnaHQuXG4gICAgICAgIHZhciBjb25zdHJhaW5lZEhlaWdodCA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUJlbG93IC0gbWFyZ2luQm90dG9tIDogc2Nyb2xsU3BhY2VCZWxvdyAtIG1hcmdpbkJvdHRvbTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogY29uc3RyYWluZWRIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gRm9ya2VkIGJldmlvdXIgd2hlbiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgYmVsb3dcblxuICAgICAgLy8gQVVUTzogZmxpcCB0aGUgbWVudSwgcmVuZGVyIGFib3ZlXG4gICAgICBpZiAocHJlZmVycmVkUGxhY2VtZW50ID09PSAnYXV0bycgfHwgaXNGaXhlZFBvc2l0aW9uKSB7XG4gICAgICAgIC8vIG1heSBuZWVkIHRvIGJlIGNvbnN0cmFpbmVkIGFmdGVyIGZsaXBwaW5nXG4gICAgICAgIHZhciBfY29uc3RyYWluZWRIZWlnaHQgPSBwcmVmZXJyZWRNYXhIZWlnaHQ7XG4gICAgICAgIHZhciBzcGFjZUFib3ZlID0gaXNGaXhlZFBvc2l0aW9uID8gdmlld1NwYWNlQWJvdmUgOiBzY3JvbGxTcGFjZUFib3ZlO1xuICAgICAgICBpZiAoc3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgICBfY29uc3RyYWluZWRIZWlnaHQgPSBNYXRoLm1pbihzcGFjZUFib3ZlIC0gbWFyZ2luQm90dG9tIC0gY29udHJvbEhlaWdodCwgcHJlZmVycmVkTWF4SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBfY29uc3RyYWluZWRIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQk9UVE9NOiBhbGxvdyBicm93c2VyIHRvIGluY3JlYXNlIHNjcm9sbGFibGUgYXJlYSBhbmQgaW1tZWRpYXRlbHkgc2V0IHNjcm9sbFxuICAgICAgaWYgKHByZWZlcnJlZFBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIHNjcm9sbFRvKHNjcm9sbFBhcmVudCwgc2Nyb2xsRG93bik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b3AnOlxuICAgICAgLy8gMTogdGhlIG1lbnUgd2lsbCBmaXQsIGRvIG5vdGhpbmdcbiAgICAgIGlmICh2aWV3U3BhY2VBYm92ZSA+PSBtZW51SGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAyOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgc2Nyb2xsZWRcbiAgICAgIGlmIChzY3JvbGxTcGFjZUFib3ZlID49IG1lbnVIZWlnaHQgJiYgIWlzRml4ZWRQb3NpdGlvbikge1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgYW5pbWF0ZWRTY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbFVwLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDM6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBjb25zdHJhaW5lZFxuICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUFib3ZlID49IG1pbkhlaWdodCkge1xuICAgICAgICB2YXIgX2NvbnN0cmFpbmVkSGVpZ2h0MiA9IHByZWZlcnJlZE1heEhlaWdodDtcblxuICAgICAgICAvLyB3ZSB3YW50IHRvIHByb3ZpZGUgYXMgbXVjaCBvZiB0aGUgbWVudSBhcyBwb3NzaWJsZSB0byB0aGUgdXNlcixcbiAgICAgICAgLy8gc28gZ2l2ZSB0aGVtIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBiZWxvdyByYXRoZXIgdGhhbiB0aGUgbWluSGVpZ2h0LlxuICAgICAgICBpZiAoIWlzRml4ZWRQb3NpdGlvbiAmJiBzY3JvbGxTcGFjZUFib3ZlID49IG1pbkhlaWdodCB8fCBpc0ZpeGVkUG9zaXRpb24gJiYgdmlld1NwYWNlQWJvdmUgPj0gbWluSGVpZ2h0KSB7XG4gICAgICAgICAgX2NvbnN0cmFpbmVkSGVpZ2h0MiA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUFib3ZlIC0gbWFyZ2luVG9wIDogc2Nyb2xsU3BhY2VBYm92ZSAtIG1hcmdpblRvcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgYW5pbWF0ZWRTY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbFVwLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogX2NvbnN0cmFpbmVkSGVpZ2h0MlxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBub3QgZW5vdWdoIHNwYWNlLCB0aGUgYnJvd3NlciBXSUxMIE5PVCBpbmNyZWFzZSBzY3JvbGxhYmxlIGFyZWEgd2hlblxuICAgICAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVsZW1lbnQgcmVuZGVyZWQgYWJvdmUgdGhlIHZpZXdwb3J0IChvbmx5IGJlbG93KS5cbiAgICAgIC8vIEZsaXAgdGhlIG1lbnUsIHJlbmRlciBiZWxvd1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcGxhY2VtZW50IHByb3ZpZGVkIFxcXCJcIi5jb25jYXQocHJlZmVycmVkUGxhY2VtZW50LCBcIlxcXCIuXCIpKTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFN0YXRlO1xufVxuXG4vLyBNZW51IENvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGFsaWduVG9Db250cm9sKHBsYWNlbWVudCkge1xuICB2YXIgcGxhY2VtZW50VG9DU1NQcm9wID0ge1xuICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgdG9wOiAnYm90dG9tJ1xuICB9O1xuICByZXR1cm4gcGxhY2VtZW50ID8gcGxhY2VtZW50VG9DU1NQcm9wW3BsYWNlbWVudF0gOiAnYm90dG9tJztcbn1cbnZhciBjb2VyY2VQbGFjZW1lbnQgPSBmdW5jdGlvbiBjb2VyY2VQbGFjZW1lbnQocCkge1xuICByZXR1cm4gcCA9PT0gJ2F1dG8nID8gJ2JvdHRvbScgOiBwO1xufTtcbnZhciBtZW51Q1NTID0gZnVuY3Rpb24gbWVudUNTUyhfcmVmMiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9vYmplY3RTcHJlYWQyO1xuICB2YXIgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgIF9yZWYyJHRoZW1lID0gX3JlZjIudGhlbWUsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZjIkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIHNwYWNpbmcgPSBfcmVmMiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYyJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoKF9vYmplY3RTcHJlYWQyID0ge1xuICAgIGxhYmVsOiAnbWVudSdcbiAgfSwgX2RlZmluZVByb3BlcnR5KF9vYmplY3RTcHJlYWQyLCBhbGlnblRvQ29udHJvbChwbGFjZW1lbnQpLCAnMTAwJScpLCBfZGVmaW5lUHJvcGVydHkoX29iamVjdFNwcmVhZDIsIFwicG9zaXRpb25cIiwgJ2Fic29sdXRlJyksIF9kZWZpbmVQcm9wZXJ0eShfb2JqZWN0U3ByZWFkMiwgXCJ3aWR0aFwiLCAnMTAwJScpLCBfZGVmaW5lUHJvcGVydHkoX29iamVjdFNwcmVhZDIsIFwiekluZGV4XCIsIDEpLCBfb2JqZWN0U3ByZWFkMiksIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMubmV1dHJhbDAsXG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMsXG4gICAgYm94U2hhZG93OiAnMCAwIDAgMXB4IGhzbGEoMCwgMCUsIDAlLCAwLjEpLCAwIDRweCAxMXB4IGhzbGEoMCwgMCUsIDAlLCAwLjEpJyxcbiAgICBtYXJnaW5Cb3R0b206IHNwYWNpbmcubWVudUd1dHRlcixcbiAgICBtYXJnaW5Ub3A6IHNwYWNpbmcubWVudUd1dHRlclxuICB9KTtcbn07XG52YXIgUG9ydGFsUGxhY2VtZW50Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KG51bGwpO1xuXG4vLyBOT1RFOiBpbnRlcm5hbCBvbmx5XG52YXIgTWVudVBsYWNlciA9IGZ1bmN0aW9uIE1lbnVQbGFjZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgbWluTWVudUhlaWdodCA9IHByb3BzLm1pbk1lbnVIZWlnaHQsXG4gICAgbWF4TWVudUhlaWdodCA9IHByb3BzLm1heE1lbnVIZWlnaHQsXG4gICAgbWVudVBsYWNlbWVudCA9IHByb3BzLm1lbnVQbGFjZW1lbnQsXG4gICAgbWVudVBvc2l0aW9uID0gcHJvcHMubWVudVBvc2l0aW9uLFxuICAgIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyA9IHByb3BzLm1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyxcbiAgICB0aGVtZSA9IHByb3BzLnRoZW1lO1xuICB2YXIgX3JlZjMgPSB1c2VDb250ZXh0KFBvcnRhbFBsYWNlbWVudENvbnRleHQpIHx8IHt9LFxuICAgIHNldFBvcnRhbFBsYWNlbWVudCA9IF9yZWYzLnNldFBvcnRhbFBsYWNlbWVudDtcbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG1heE1lbnVIZWlnaHQpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIG1heEhlaWdodCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0TWF4SGVpZ2h0ID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgcGxhY2VtZW50ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRQbGFjZW1lbnQgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgY29udHJvbEhlaWdodCA9IHRoZW1lLnNwYWNpbmcuY29udHJvbEhlaWdodDtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWVudUVsID0gcmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFtZW51RWwpIHJldHVybjtcblxuICAgIC8vIERPIE5PVCBzY3JvbGwgaWYgcG9zaXRpb24gaXMgZml4ZWRcbiAgICB2YXIgaXNGaXhlZFBvc2l0aW9uID0gbWVudVBvc2l0aW9uID09PSAnZml4ZWQnO1xuICAgIHZhciBzaG91bGRTY3JvbGwgPSBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgJiYgIWlzRml4ZWRQb3NpdGlvbjtcbiAgICB2YXIgc3RhdGUgPSBnZXRNZW51UGxhY2VtZW50KHtcbiAgICAgIG1heEhlaWdodDogbWF4TWVudUhlaWdodCxcbiAgICAgIG1lbnVFbDogbWVudUVsLFxuICAgICAgbWluSGVpZ2h0OiBtaW5NZW51SGVpZ2h0LFxuICAgICAgcGxhY2VtZW50OiBtZW51UGxhY2VtZW50LFxuICAgICAgc2hvdWxkU2Nyb2xsOiBzaG91bGRTY3JvbGwsXG4gICAgICBpc0ZpeGVkUG9zaXRpb246IGlzRml4ZWRQb3NpdGlvbixcbiAgICAgIGNvbnRyb2xIZWlnaHQ6IGNvbnRyb2xIZWlnaHRcbiAgICB9KTtcbiAgICBzZXRNYXhIZWlnaHQoc3RhdGUubWF4SGVpZ2h0KTtcbiAgICBzZXRQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgICBzZXRQb3J0YWxQbGFjZW1lbnQgPT09IG51bGwgfHwgc2V0UG9ydGFsUGxhY2VtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXRQb3J0YWxQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgfSwgW21heE1lbnVIZWlnaHQsIG1lbnVQbGFjZW1lbnQsIG1lbnVQb3NpdGlvbiwgbWVudVNob3VsZFNjcm9sbEludG9WaWV3LCBtaW5NZW51SGVpZ2h0LCBzZXRQb3J0YWxQbGFjZW1lbnQsIGNvbnRyb2xIZWlnaHRdKTtcbiAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICByZWY6IHJlZixcbiAgICBwbGFjZXJQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCB8fCBjb2VyY2VQbGFjZW1lbnQobWVudVBsYWNlbWVudCksXG4gICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgIH0pXG4gIH0pO1xufTtcbnZhciBNZW51ID0gZnVuY3Rpb24gTWVudShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnbWVudScsIHtcbiAgICBtZW51OiB0cnVlXG4gIH0pLCB7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcbnZhciBNZW51JDEgPSBNZW51O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1lbnUgTGlzdFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBtZW51TGlzdENTUyA9IGZ1bmN0aW9uIG1lbnVMaXN0Q1NTKF9yZWY0LCB1bnN0eWxlZCkge1xuICB2YXIgbWF4SGVpZ2h0ID0gX3JlZjQubWF4SGVpZ2h0LFxuICAgIGJhc2VVbml0ID0gX3JlZjQudGhlbWUuc3BhY2luZy5iYXNlVW5pdDtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIG1heEhlaWdodDogbWF4SGVpZ2h0LFxuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIC8vIHJlcXVpcmVkIGZvciBvZmZzZXRbSGVpZ2h0LCBUb3BdID4ga2V5Ym9hcmQgc2Nyb2xsXG4gICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBwYWRkaW5nQm90dG9tOiBiYXNlVW5pdCxcbiAgICBwYWRkaW5nVG9wOiBiYXNlVW5pdFxuICB9KTtcbn07XG52YXIgTWVudUxpc3QgPSBmdW5jdGlvbiBNZW51TGlzdChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnbWVudUxpc3QnLCB7XG4gICAgJ21lbnUtbGlzdCc6IHRydWUsXG4gICAgJ21lbnUtbGlzdC0taXMtbXVsdGknOiBpc011bHRpXG4gIH0pLCB7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW51IE5vdGljZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbm90aWNlQ1NTID0gZnVuY3Rpb24gbm90aWNlQ1NTKF9yZWY1LCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZjUkdGhlbWUgPSBfcmVmNS50aGVtZSxcbiAgICBiYXNlVW5pdCA9IF9yZWY1JHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQsXG4gICAgY29sb3JzID0gX3JlZjUkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgIHBhZGRpbmc6IFwiXCIuY29uY2F0KGJhc2VVbml0ICogMiwgXCJweCBcIikuY29uY2F0KGJhc2VVbml0ICogMywgXCJweFwiKVxuICB9KTtcbn07XG52YXIgbm9PcHRpb25zTWVzc2FnZUNTUyA9IG5vdGljZUNTUztcbnZhciBsb2FkaW5nTWVzc2FnZUNTUyA9IG5vdGljZUNTUztcbnZhciBOb09wdGlvbnNNZXNzYWdlID0gZnVuY3Rpb24gTm9PcHRpb25zTWVzc2FnZShfcmVmNikge1xuICB2YXIgX3JlZjYkY2hpbGRyZW4gPSBfcmVmNi5jaGlsZHJlbixcbiAgICBjaGlsZHJlbiA9IF9yZWY2JGNoaWxkcmVuID09PSB2b2lkIDAgPyAnTm8gb3B0aW9ucycgOiBfcmVmNiRjaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gX3JlZjYuaW5uZXJQcm9wcyxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjYsIF9leGNsdWRlZCQzKTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RQcm9wcyksIHt9LCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHNcbiAgfSksICdub09wdGlvbnNNZXNzYWdlJywge1xuICAgICdtZW51LW5vdGljZSc6IHRydWUsXG4gICAgJ21lbnUtbm90aWNlLS1uby1vcHRpb25zJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgTG9hZGluZ01lc3NhZ2UgPSBmdW5jdGlvbiBMb2FkaW5nTWVzc2FnZShfcmVmNykge1xuICB2YXIgX3JlZjckY2hpbGRyZW4gPSBfcmVmNy5jaGlsZHJlbixcbiAgICBjaGlsZHJlbiA9IF9yZWY3JGNoaWxkcmVuID09PSB2b2lkIDAgPyAnTG9hZGluZy4uLicgOiBfcmVmNyRjaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gX3JlZjcuaW5uZXJQcm9wcyxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjcsIF9leGNsdWRlZDIkMSk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0UHJvcHMpLCB7fSwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpbm5lclByb3BzOiBpbm5lclByb3BzXG4gIH0pLCAnbG9hZGluZ01lc3NhZ2UnLCB7XG4gICAgJ21lbnUtbm90aWNlJzogdHJ1ZSxcbiAgICAnbWVudS1ub3RpY2UtLWxvYWRpbmcnOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW51IFBvcnRhbFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBtZW51UG9ydGFsQ1NTID0gZnVuY3Rpb24gbWVudVBvcnRhbENTUyhfcmVmOCkge1xuICB2YXIgcmVjdCA9IF9yZWY4LnJlY3QsXG4gICAgb2Zmc2V0ID0gX3JlZjgub2Zmc2V0LFxuICAgIHBvc2l0aW9uID0gX3JlZjgucG9zaXRpb247XG4gIHJldHVybiB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICB0b3A6IG9mZnNldCxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICB6SW5kZXg6IDFcbiAgfTtcbn07XG52YXIgTWVudVBvcnRhbCA9IGZ1bmN0aW9uIE1lbnVQb3J0YWwocHJvcHMpIHtcbiAgdmFyIGFwcGVuZFRvID0gcHJvcHMuYXBwZW5kVG8sXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBjb250cm9sRWxlbWVudCA9IHByb3BzLmNvbnRyb2xFbGVtZW50LFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgIG1lbnVQbGFjZW1lbnQgPSBwcm9wcy5tZW51UGxhY2VtZW50LFxuICAgIG1lbnVQb3NpdGlvbiA9IHByb3BzLm1lbnVQb3NpdGlvbjtcbiAgdmFyIG1lbnVQb3J0YWxSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjbGVhbnVwUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKGNvZXJjZVBsYWNlbWVudChtZW51UGxhY2VtZW50KSksXG4gICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgIHBsYWNlbWVudCA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0UG9ydGFsUGxhY2VtZW50ID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIHBvcnRhbFBsYWNlbWVudENvbnRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0UG9ydGFsUGxhY2VtZW50OiBzZXRQb3J0YWxQbGFjZW1lbnRcbiAgICB9O1xuICB9LCBbXSk7XG4gIHZhciBfdXNlU3RhdGU3ID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlOCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTcsIDIpLFxuICAgIGNvbXB1dGVkUG9zaXRpb24gPSBfdXNlU3RhdGU4WzBdLFxuICAgIHNldENvbXB1dGVkUG9zaXRpb24gPSBfdXNlU3RhdGU4WzFdO1xuICB2YXIgdXBkYXRlQ29tcHV0ZWRQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNvbnRyb2xFbGVtZW50KSByZXR1cm47XG4gICAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudE9iaihjb250cm9sRWxlbWVudCk7XG4gICAgdmFyIHNjcm9sbERpc3RhbmNlID0gbWVudVBvc2l0aW9uID09PSAnZml4ZWQnID8gMCA6IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICB2YXIgb2Zmc2V0ID0gcmVjdFtwbGFjZW1lbnRdICsgc2Nyb2xsRGlzdGFuY2U7XG4gICAgaWYgKG9mZnNldCAhPT0gKGNvbXB1dGVkUG9zaXRpb24gPT09IG51bGwgfHwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcHV0ZWRQb3NpdGlvbi5vZmZzZXQpIHx8IHJlY3QubGVmdCAhPT0gKGNvbXB1dGVkUG9zaXRpb24gPT09IG51bGwgfHwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcHV0ZWRQb3NpdGlvbi5yZWN0LmxlZnQpIHx8IHJlY3Qud2lkdGggIT09IChjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC53aWR0aCkpIHtcbiAgICAgIHNldENvbXB1dGVkUG9zaXRpb24oe1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgcmVjdDogcmVjdFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udHJvbEVsZW1lbnQsIG1lbnVQb3NpdGlvbiwgcGxhY2VtZW50LCBjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ub2Zmc2V0LCBjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC5sZWZ0LCBjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC53aWR0aF0pO1xuICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHVwZGF0ZUNvbXB1dGVkUG9zaXRpb24oKTtcbiAgfSwgW3VwZGF0ZUNvbXB1dGVkUG9zaXRpb25dKTtcbiAgdmFyIHJ1bkF1dG9VcGRhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBjbGVhbnVwUmVmLmN1cnJlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNsZWFudXBSZWYuY3VycmVudCgpO1xuICAgICAgY2xlYW51cFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2xFbGVtZW50ICYmIG1lbnVQb3J0YWxSZWYuY3VycmVudCkge1xuICAgICAgY2xlYW51cFJlZi5jdXJyZW50ID0gYXV0b1VwZGF0ZShjb250cm9sRWxlbWVudCwgbWVudVBvcnRhbFJlZi5jdXJyZW50LCB1cGRhdGVDb21wdXRlZFBvc2l0aW9uLCB7XG4gICAgICAgIGVsZW1lbnRSZXNpemU6ICdSZXNpemVPYnNlcnZlcicgaW4gd2luZG93XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjb250cm9sRWxlbWVudCwgdXBkYXRlQ29tcHV0ZWRQb3NpdGlvbl0pO1xuICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJ1bkF1dG9VcGRhdGUoKTtcbiAgfSwgW3J1bkF1dG9VcGRhdGVdKTtcbiAgdmFyIHNldE1lbnVQb3J0YWxFbGVtZW50ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG1lbnVQb3J0YWxFbGVtZW50KSB7XG4gICAgbWVudVBvcnRhbFJlZi5jdXJyZW50ID0gbWVudVBvcnRhbEVsZW1lbnQ7XG4gICAgcnVuQXV0b1VwZGF0ZSgpO1xuICB9LCBbcnVuQXV0b1VwZGF0ZV0pO1xuXG4gIC8vIGJhaWwgZWFybHkgaWYgcmVxdWlyZWQgZWxlbWVudHMgYXJlbid0IHByZXNlbnRcbiAgaWYgKCFhcHBlbmRUbyAmJiBtZW51UG9zaXRpb24gIT09ICdmaXhlZCcgfHwgIWNvbXB1dGVkUG9zaXRpb24pIHJldHVybiBudWxsO1xuXG4gIC8vIHNhbWUgd3JhcHBlciBlbGVtZW50IHdoZXRoZXIgZml4ZWQgb3IgcG9ydGFsbGVkXG4gIHZhciBtZW51V3JhcHBlciA9IGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBzZXRNZW51UG9ydGFsRWxlbWVudFxuICB9LCBnZXRTdHlsZVByb3BzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgIG9mZnNldDogY29tcHV0ZWRQb3NpdGlvbi5vZmZzZXQsXG4gICAgcG9zaXRpb246IG1lbnVQb3NpdGlvbixcbiAgICByZWN0OiBjb21wdXRlZFBvc2l0aW9uLnJlY3RcbiAgfSksICdtZW51UG9ydGFsJywge1xuICAgICdtZW51LXBvcnRhbCc6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG4gIHJldHVybiBqc3goUG9ydGFsUGxhY2VtZW50Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwb3J0YWxQbGFjZW1lbnRDb250ZXh0XG4gIH0sIGFwcGVuZFRvID8gLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbChtZW51V3JhcHBlciwgYXBwZW5kVG8pIDogbWVudVdyYXBwZXIpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSb290IENvbnRhaW5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBjb250YWluZXJDU1MgPSBmdW5jdGlvbiBjb250YWluZXJDU1MoX3JlZikge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBpc1J0bCA9IF9yZWYuaXNSdGw7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdjb250YWluZXInLFxuICAgIGRpcmVjdGlvbjogaXNSdGwgPyAncnRsJyA6IHVuZGVmaW5lZCxcbiAgICBwb2ludGVyRXZlbnRzOiBpc0Rpc2FibGVkID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgIC8vIGNhbmNlbCBtb3VzZSBldmVudHMgd2hlbiBkaXNhYmxlZFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gIH07XG59O1xudmFyIFNlbGVjdENvbnRhaW5lciA9IGZ1bmN0aW9uIFNlbGVjdENvbnRhaW5lcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc1J0bCA9IHByb3BzLmlzUnRsO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnY29udGFpbmVyJywge1xuICAgICctLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAnLS1pcy1ydGwnOiBpc1J0bFxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVmFsdWUgQ29udGFpbmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIHZhbHVlQ29udGFpbmVyQ1NTID0gZnVuY3Rpb24gdmFsdWVDb250YWluZXJDU1MoX3JlZjIsIHVuc3R5bGVkKSB7XG4gIHZhciBzcGFjaW5nID0gX3JlZjIudGhlbWUuc3BhY2luZyxcbiAgICBpc011bHRpID0gX3JlZjIuaXNNdWx0aSxcbiAgICBoYXNWYWx1ZSA9IF9yZWYyLmhhc1ZhbHVlLFxuICAgIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZSA9IF9yZWYyLnNlbGVjdFByb3BzLmNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGRpc3BsYXk6IGlzTXVsdGkgJiYgaGFzVmFsdWUgJiYgY29udHJvbFNob3VsZFJlbmRlclZhbHVlID8gJ2ZsZXgnIDogJ2dyaWQnLFxuICAgIGZsZXg6IDEsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0IC8gMiwgXCJweCBcIikuY29uY2F0KHNwYWNpbmcuYmFzZVVuaXQgKiAyLCBcInB4XCIpXG4gIH0pO1xufTtcbnZhciBWYWx1ZUNvbnRhaW5lciA9IGZ1bmN0aW9uIFZhbHVlQ29udGFpbmVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpLFxuICAgIGhhc1ZhbHVlID0gcHJvcHMuaGFzVmFsdWU7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICd2YWx1ZUNvbnRhaW5lcicsIHtcbiAgICAndmFsdWUtY29udGFpbmVyJzogdHJ1ZSxcbiAgICAndmFsdWUtY29udGFpbmVyLS1pcy1tdWx0aSc6IGlzTXVsdGksXG4gICAgJ3ZhbHVlLWNvbnRhaW5lci0taGFzLXZhbHVlJzogaGFzVmFsdWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEluZGljYXRvciBDb250YWluZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgaW5kaWNhdG9yc0NvbnRhaW5lckNTUyA9IGZ1bmN0aW9uIGluZGljYXRvcnNDb250YWluZXJDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhTaHJpbms6IDBcbiAgfTtcbn07XG52YXIgSW5kaWNhdG9yc0NvbnRhaW5lciA9IGZ1bmN0aW9uIEluZGljYXRvcnNDb250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdpbmRpY2F0b3JzQ29udGFpbmVyJywge1xuICAgIGluZGljYXRvcnM6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG52YXIgX3RlbXBsYXRlT2JqZWN0O1xudmFyIF9leGNsdWRlZCQyID0gW1wic2l6ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImlubmVyUHJvcHNcIiwgXCJpc1J0bFwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBJY29uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiOG1ta2NnXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtsaW5lLWhlaWdodDoxO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjBcIlxufSA6IHtcbiAgbmFtZTogXCJ0ajViZGUtU3ZnXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtsaW5lLWhlaWdodDoxO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjA7bGFiZWw6U3ZnO1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW1sdVpHbGpZWFJ2Y25NdWRITjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRWGxDU1NJc0ltWnBiR1VpT2lKcGJtUnBZMkYwYjNKekxuUnplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtpQkFhbk40SUdwemVDQXFMMXh1YVcxd2IzSjBJSHNnVW1WaFkzUk9iMlJsSUgwZ1puSnZiU0FuY21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnYW5ONExDQnJaWGxtY21GdFpYTWdmU0JtY205dElDZEFaVzF2ZEdsdmJpOXlaV0ZqZENjN1hHNWNibWx0Y0c5eWRDQjdYRzRnSUVOdmJXMXZibEJ5YjNCelFXNWtRMnhoYzNOT1lXMWxMRnh1SUNCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3c1hHNGdJRWR5YjNWd1FtRnpaU3hjYm4wZ1puSnZiU0FuTGk0dmRIbHdaWE1uTzF4dWFXMXdiM0owSUhzZ1oyVjBVM1I1YkdWUWNtOXdjeUI5SUdaeWIyMGdKeTR1TDNWMGFXeHpKenRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5QkVjbTl3Wkc5M2JpQW1JRU5zWldGeUlFbGpiMjV6WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnVTNabklEMGdLSHRjYmlBZ2MybDZaU3hjYmlBZ0xpNHVjSEp2Y0hOY2JuMDZJRXBUV0M1SmJuUnlhVzV6YVdORmJHVnRaVzUwYzFzbmMzWm5KMTBnSmlCN0lITnBlbVU2SUc1MWJXSmxjaUI5S1NBOVBpQW9YRzRnSUR4emRtZGNiaUFnSUNCb1pXbG5hSFE5ZTNOcGVtVjlYRzRnSUNBZ2QybGtkR2c5ZTNOcGVtVjlYRzRnSUNBZ2RtbGxkMEp2ZUQxY0lqQWdNQ0F5TUNBeU1Gd2lYRzRnSUNBZ1lYSnBZUzFvYVdSa1pXNDlYQ0owY25WbFhDSmNiaUFnSUNCbWIyTjFjMkZpYkdVOVhDSm1ZV3h6WlZ3aVhHNGdJQ0FnWTNOelBYdDdYRzRnSUNBZ0lDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXSnNiMk5ySnl4Y2JpQWdJQ0FnSUdacGJHdzZJQ2RqZFhKeVpXNTBRMjlzYjNJbkxGeHVJQ0FnSUNBZ2JHbHVaVWhsYVdkb2REb2dNU3hjYmlBZ0lDQWdJSE4wY205clpUb2dKMk4xY25KbGJuUkRiMnh2Y2ljc1hHNGdJQ0FnSUNCemRISnZhMlZYYVdSMGFEb2dNQ3hjYmlBZ0lDQjlmVnh1SUNBZ0lIc3VMaTV3Y205d2MzMWNiaUFnTHo1Y2JpazdYRzVjYm1WNGNHOXlkQ0IwZVhCbElFTnliM056U1dOdmJsQnliM0J6SUQwZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWR6ZG1jblhTQW1JSHNnYzJsNlpUODZJRzUxYldKbGNpQjlPMXh1Wlhod2IzSjBJR052Ym5OMElFTnliM056U1dOdmJpQTlJQ2h3Y205d2N6b2dRM0p2YzNOSlkyOXVVSEp2Y0hNcElEMCtJQ2hjYmlBZ1BGTjJaeUJ6YVhwbFBYc3lNSDBnZXk0dUxuQnliM0J6ZlQ1Y2JpQWdJQ0E4Y0dGMGFDQmtQVndpVFRFMExqTTBPQ0F4TkM0NE5EbGpMVEF1TkRZNUlEQXVORFk1TFRFdU1qSTVJREF1TkRZNUxURXVOamszSURCc0xUSXVOalV4TFRNdU1ETXdMVEl1TmpVeElETXVNREk1WXkwd0xqUTJPU0F3TGpRMk9TMHhMakl5T1NBd0xqUTJPUzB4TGpZNU55QXdMVEF1TkRZNUxUQXVORFk1TFRBdU5EWTVMVEV1TWpJNUlEQXRNUzQyT1Rkc01pNDNOVGd0TXk0eE5TMHlMamMxT1MwekxqRTFNbU10TUM0ME5qa3RNQzQwTmprdE1DNDBOamt0TVM0eU1qZ2dNQzB4TGpZNU4zTXhMakl5T0Mwd0xqUTJPU0F4TGpZNU55QXdiREl1TmpVeUlETXVNRE14SURJdU5qVXhMVE11TURNeFl6QXVORFk1TFRBdU5EWTVJREV1TWpJNExUQXVORFk1SURFdU5qazNJREJ6TUM0ME5qa2dNUzR5TWprZ01DQXhMalk1TjJ3dE1pNDNOVGdnTXk0eE5USWdNaTQzTlRnZ015NHhOV013TGpRMk9TQXdMalEyT1NBd0xqUTJPU0F4TGpJeU9TQXdJREV1TmprNGVsd2lJQzgrWEc0Z0lEd3ZVM1puUGx4dUtUdGNibVY0Y0c5eWRDQjBlWEJsSUVSdmQyNURhR1YyY205dVVISnZjSE1nUFNCS1UxZ3VTVzUwY21sdWMybGpSV3hsYldWdWRITmJKM04yWnlkZElDWWdleUJ6YVhwbFB6b2diblZ0WW1WeUlIMDdYRzVsZUhCdmNuUWdZMjl1YzNRZ1JHOTNia05vWlhaeWIyNGdQU0FvY0hKdmNITTZJRVJ2ZDI1RGFHVjJjbTl1VUhKdmNITXBJRDArSUNoY2JpQWdQRk4yWnlCemFYcGxQWHN5TUgwZ2V5NHVMbkJ5YjNCemZUNWNiaUFnSUNBOGNHRjBhQ0JrUFZ3aVRUUXVOVEUySURjdU5UUTRZekF1TkRNMkxUQXVORFEySURFdU1EUXpMVEF1TkRneElERXVOVGMySURCc015NDVNRGdnTXk0M05EY2dNeTQ1TURndE15NDNORGRqTUM0MU16TXRNQzQwT0RFZ01TNHhOREV0TUM0ME5EWWdNUzQxTnpRZ01DQXdMalF6TmlBd0xqUTBOU0F3TGpRd09DQXhMakU1TnlBd0lERXVOakUxTFRBdU5EQTJJREF1TkRFNExUUXVOamsxSURRdU5UQXlMVFF1TmprMUlEUXVOVEF5TFRBdU1qRTNJREF1TWpJekxUQXVOVEF5SURBdU16TTFMVEF1TnpnM0lEQXVNek0xY3kwd0xqVTNMVEF1TVRFeUxUQXVOemc1TFRBdU16TTFZekFnTUMwMExqSTROeTAwTGpBNE5DMDBMalk1TlMwMExqVXdNbk10TUM0ME16WXRNUzR4TnlBd0xURXVOakUxZWx3aUlDOCtYRzRnSUR3dlUzWm5QbHh1S1R0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJFY205d1pHOTNiaUFtSUVOc1pXRnlJRUoxZEhSdmJuTmNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlVSEp2Y0hNOFhHNGdJRTl3ZEdsdmJpQTlJSFZ1YTI1dmQyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVJRDBnWW05dmJHVmhiaXhjYmlBZ1IzSnZkWEFnWlhoMFpXNWtjeUJIY205MWNFSmhjMlU4VDNCMGFXOXVQaUE5SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0lHVjRkR1Z1WkhNZ1EyOXRiVzl1VUhKdmNITkJibVJEYkdGemMwNWhiV1U4VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENGdlMXh1SUNBdktpb2dWR2hsSUdOb2FXeGtjbVZ1SUhSdklHSmxJSEpsYm1SbGNtVmtJR2x1YzJsa1pTQjBhR1VnYVc1a2FXTmhkRzl5TGlBcUwxeHVJQ0JqYUdsc1pISmxiajg2SUZKbFlXTjBUbTlrWlR0Y2JpQWdMeW9xSUZCeWIzQnpJSFJvWVhRZ2QybHNiQ0JpWlNCd1lYTnpaV1FnYjI0Z2RHOGdkR2hsSUdOb2FXeGtjbVZ1TGlBcUwxeHVJQ0JwYm01bGNsQnliM0J6T2lCS1UxZ3VTVzUwY21sdWMybGpSV3hsYldWdWRITmJKMlJwZGlkZE8xeHVJQ0F2S2lvZ1ZHaGxJR1p2WTNWelpXUWdjM1JoZEdVZ2IyWWdkR2hsSUhObGJHVmpkQzRnS2k5Y2JpQWdhWE5HYjJOMWMyVmtPaUJpYjI5c1pXRnVPMXh1SUNCcGMwUnBjMkZpYkdWa09pQmliMjlzWldGdU8xeHVmVnh1WEc1amIyNXpkQ0JpWVhObFExTlRJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCN1hHNGdJQ0FnYVhOR2IyTjFjMlZrTEZ4dUlDQWdJSFJvWlcxbE9pQjdYRzRnSUNBZ0lDQnpjR0ZqYVc1bk9pQjdJR0poYzJWVmJtbDBJSDBzWEc0Z0lDQWdJQ0JqYjJ4dmNuTXNYRzRnSUNBZ2ZTeGNiaUFnZlRwY2JpQWdJQ0I4SUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2JpQWdJQ0I4SUVOc1pXRnlTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRzWEc0Z0lIVnVjM1I1YkdWa09pQmliMjlzWldGdVhHNHBPaUJEVTFOUFltcGxZM1JYYVhSb1RHRmlaV3dnUFQ0Z0tIdGNiaUFnYkdGaVpXdzZJQ2RwYm1ScFkyRjBiM0pEYjI1MFlXbHVaWEluTEZ4dUlDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJSFJ5WVc1emFYUnBiMjQ2SUNkamIyeHZjaUF4TlRCdGN5Y3NYRzRnSUM0dUxpaDFibk4wZVd4bFpGeHVJQ0FnSUQ4Z2UzMWNiaUFnSUNBNklIdGNiaUFnSUNBZ0lDQWdZMjlzYjNJNklHbHpSbTlqZFhObFpDQS9JR052Ykc5eWN5NXVaWFYwY21Gc05qQWdPaUJqYjJ4dmNuTXVibVYxZEhKaGJESXdMRnh1SUNBZ0lDQWdJQ0J3WVdSa2FXNW5PaUJpWVhObFZXNXBkQ0FxSURJc1hHNGdJQ0FnSUNBZ0lDYzZhRzkyWlhJbk9pQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5c2IzSTZJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNPREFnT2lCamIyeHZjbk11Ym1WMWRISmhiRFF3TEZ4dUlDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ2ZTa3NYRzU5S1R0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdSeWIzQmtiM2R1U1c1a2FXTmhkRzl5UTFOVElEMGdZbUZ6WlVOVFV6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRWNtOXdaRzkzYmtsdVpHbGpZWFJ2Y2lBOUlEeGNiaUFnVDNCMGFXOXVMRnh1SUNCSmMwMTFiSFJwSUdWNGRHVnVaSE1nWW05dmJHVmhiaXhjYmlBZ1IzSnZkWEFnWlhoMFpXNWtjeUJIY205MWNFSmhjMlU4VDNCMGFXOXVQbHh1UGloY2JpQWdjSEp2Y0hNNklFUnliM0JrYjNkdVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR05vYVd4a2NtVnVMQ0JwYm01bGNsQnliM0J6SUgwZ1BTQndjbTl3Y3p0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOFpHbDJYRzRnSUNBZ0lDQjdMaTR1WjJWMFUzUjViR1ZRY205d2N5aHdjbTl3Y3l3Z0oyUnliM0JrYjNkdVNXNWthV05oZEc5eUp5d2dlMXh1SUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ2RrY205d1pHOTNiaTFwYm1ScFkyRjBiM0luT2lCMGNuVmxMRnh1SUNBZ0lDQWdmU2w5WEc0Z0lDQWdJQ0I3TGk0dWFXNXVaWEpRY205d2MzMWNiaUFnSUNBK1hHNGdJQ0FnSUNCN1kyaHBiR1J5Wlc0Z2ZId2dQRVJ2ZDI1RGFHVjJjbTl1SUM4K2ZWeHVJQ0FnSUR3dlpHbDJQbHh1SUNBcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCRGJHVmhja2x1WkdsallYUnZjbEJ5YjNCelBGeHVJQ0JQY0hScGIyNGdQU0IxYm10dWIzZHVMRnh1SUNCSmMwMTFiSFJwSUdWNGRHVnVaSE1nWW05dmJHVmhiaUE5SUdKdmIyeGxZVzRzWEc0Z0lFZHliM1Z3SUdWNGRHVnVaSE1nUjNKdmRYQkNZWE5sUEU5d2RHbHZiajRnUFNCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpQmxlSFJsYm1SeklFTnZiVzF2YmxCeWIzQnpRVzVrUTJ4aGMzTk9ZVzFsUEU5d2RHbHZiaXdnU1hOTmRXeDBhU3dnUjNKdmRYQStJSHRjYmlBZ0x5b3FJRlJvWlNCamFHbHNaSEpsYmlCMGJ5QmlaU0J5Wlc1a1pYSmxaQ0JwYm5OcFpHVWdkR2hsSUdsdVpHbGpZWFJ2Y2k0Z0tpOWNiaUFnWTJocGJHUnlaVzQvT2lCU1pXRmpkRTV2WkdVN1hHNGdJQzhxS2lCUWNtOXdjeUIwYUdGMElIZHBiR3dnWW1VZ2NHRnpjMlZrSUc5dUlIUnZJSFJvWlNCamFHbHNaSEpsYmk0Z0tpOWNiaUFnYVc1dVpYSlFjbTl3Y3pvZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWRrYVhZblhUdGNiaUFnTHlvcUlGUm9aU0JtYjJOMWMyVmtJSE4wWVhSbElHOW1JSFJvWlNCelpXeGxZM1F1SUNvdlhHNGdJR2x6Um05amRYTmxaRG9nWW05dmJHVmhianRjYm4xY2JseHVaWGh3YjNKMElHTnZibk4wSUdOc1pXRnlTVzVrYVdOaGRHOXlRMU5USUQwZ1ltRnpaVU5UVXp0Y2JtVjRjRzl5ZENCamIyNXpkQ0JEYkdWaGNrbHVaR2xqWVhSdmNpQTlJRHhjYmlBZ1QzQjBhVzl1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpaGNiaUFnY0hKdmNITTZJRU5zWldGeVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR05vYVd4a2NtVnVMQ0JwYm01bGNsQnliM0J6SUgwZ1BTQndjbTl3Y3p0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOFpHbDJYRzRnSUNBZ0lDQjdMaTR1WjJWMFUzUjViR1ZRY205d2N5aHdjbTl3Y3l3Z0oyTnNaV0Z5U1c1a2FXTmhkRzl5Snl3Z2UxeHVJQ0FnSUNBZ0lDQnBibVJwWTJGMGIzSTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lDZGpiR1ZoY2kxcGJtUnBZMkYwYjNJbk9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNsOVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdZMmhwYkdSeVpXNGdmSHdnUEVOeWIzTnpTV052YmlBdlBuMWNiaUFnSUNBOEwyUnBkajVjYmlBZ0tUdGNibjA3WEc1Y2JpOHZJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUx5OGdVMlZ3WVhKaGRHOXlYRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JKYm1ScFkyRjBiM0pUWlhCaGNtRjBiM0pRY205d2N6eGNiaUFnVDNCMGFXOXVJRDBnZFc1cmJtOTNiaXhjYmlBZ1NYTk5kV3gwYVNCbGVIUmxibVJ6SUdKdmIyeGxZVzRnUFNCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrSUQwZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNGdaWGgwWlc1a2N5QkRiMjF0YjI1UWNtOXdjMEZ1WkVOc1lYTnpUbUZ0WlR4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaUI3WEc0Z0lHbHpSR2x6WVdKc1pXUTZJR0p2YjJ4bFlXNDdYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdhVzV1WlhKUWNtOXdjejg2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25jM0JoYmlkZE8xeHVmVnh1WEc1bGVIQnZjblFnWTI5dWMzUWdhVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlRMU5USUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQjdYRzRnSUNBZ2FYTkVhWE5oWW14bFpDeGNiaUFnSUNCMGFHVnRaVG9nZTF4dUlDQWdJQ0FnYzNCaFkybHVaem9nZXlCaVlYTmxWVzVwZENCOUxGeHVJQ0FnSUNBZ1kyOXNiM0p6TEZ4dUlDQWdJSDBzWEc0Z0lIMDZJRWx1WkdsallYUnZjbE5sY0dGeVlYUnZjbEJ5YjNCelBFOXdkR2x2Yml3Z1NYTk5kV3gwYVN3Z1IzSnZkWEErTEZ4dUlDQjFibk4wZVd4bFpEb2dZbTl2YkdWaGJseHVLVG9nUTFOVFQySnFaV04wVjJsMGFFeGhZbVZzSUQwK0lDaDdYRzRnSUd4aFltVnNPaUFuYVc1a2FXTmhkRzl5VTJWd1lYSmhkRzl5Snl4Y2JpQWdZV3hwWjI1VFpXeG1PaUFuYzNSeVpYUmphQ2NzWEc0Z0lIZHBaSFJvT2lBeExGeHVJQ0F1TGk0b2RXNXpkSGxzWldSY2JpQWdJQ0EvSUh0OVhHNGdJQ0FnT2lCN1hHNGdJQ0FnSUNBZ0lHSmhZMnRuY205MWJtUkRiMnh2Y2pvZ2FYTkVhWE5oWW14bFpDQS9JR052Ykc5eWN5NXVaWFYwY21Gc01UQWdPaUJqYjJ4dmNuTXVibVYxZEhKaGJESXdMRnh1SUNBZ0lDQWdJQ0J0WVhKbmFXNUNiM1IwYjIwNklHSmhjMlZWYm1sMElDb2dNaXhjYmlBZ0lDQWdJQ0FnYldGeVoybHVWRzl3T2lCaVlYTmxWVzVwZENBcUlESXNYRzRnSUNBZ0lDQjlLU3hjYm4wcE8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1NXNWthV05oZEc5eVUyVndZWEpoZEc5eUlEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0J3Y205d2N6b2dTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdsdWJtVnlVSEp2Y0hNZ2ZTQTlJSEJ5YjNCek8xeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeHpjR0Z1WEc0Z0lDQWdJQ0I3TGk0dWFXNXVaWEpRY205d2MzMWNiaUFnSUNBZ0lIc3VMaTVuWlhSVGRIbHNaVkJ5YjNCektIQnliM0J6TENBbmFXNWthV05oZEc5eVUyVndZWEpoZEc5eUp5d2dlMXh1SUNBZ0lDQWdJQ0FuYVc1a2FXTmhkRzl5TFhObGNHRnlZWFJ2Y2ljNklIUnlkV1VzWEc0Z0lDQWdJQ0I5S1gxY2JpQWdJQ0F2UGx4dUlDQXBPMXh1ZlR0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJNYjJGa2FXNW5YRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1WTI5dWMzUWdiRzloWkdsdVowUnZkRUZ1YVcxaGRHbHZibk1nUFNCclpYbG1jbUZ0WlhOZ1hHNGdJREFsTENBNE1DVXNJREV3TUNVZ2V5QnZjR0ZqYVhSNU9pQXdPeUI5WEc0Z0lEUXdKU0I3SUc5d1lXTnBkSGs2SURFN0lIMWNibUE3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JzYjJGa2FXNW5TVzVrYVdOaGRHOXlRMU5USUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQjdYRzRnSUNBZ2FYTkdiMk4xYzJWa0xGeHVJQ0FnSUhOcGVtVXNYRzRnSUNBZ2RHaGxiV1U2SUh0Y2JpQWdJQ0FnSUdOdmJHOXljeXhjYmlBZ0lDQWdJSE53WVdOcGJtYzZJSHNnWW1GelpWVnVhWFFnZlN4Y2JpQWdJQ0I5TEZ4dUlDQjlPaUJNYjJGa2FXNW5TVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRzWEc0Z0lIVnVjM1I1YkdWa09pQmliMjlzWldGdVhHNHBPaUJEVTFOUFltcGxZM1JYYVhSb1RHRmlaV3dnUFQ0Z0tIdGNiaUFnYkdGaVpXdzZJQ2RzYjJGa2FXNW5TVzVrYVdOaGRHOXlKeXhjYmlBZ1pHbHpjR3hoZVRvZ0oyWnNaWGduTEZ4dUlDQjBjbUZ1YzJsMGFXOXVPaUFuWTI5c2IzSWdNVFV3YlhNbkxGeHVJQ0JoYkdsbmJsTmxiR1k2SUNkalpXNTBaWEluTEZ4dUlDQm1iMjUwVTJsNlpUb2djMmw2WlN4Y2JpQWdiR2x1WlVobGFXZG9kRG9nTVN4Y2JpQWdiV0Z5WjJsdVVtbG5hSFE2SUhOcGVtVXNYRzRnSUhSbGVIUkJiR2xuYmpvZ0oyTmxiblJsY2ljc1hHNGdJSFpsY25ScFkyRnNRV3hwWjI0NklDZHRhV1JrYkdVbkxGeHVJQ0F1TGk0b2RXNXpkSGxzWldSY2JpQWdJQ0EvSUh0OVhHNGdJQ0FnT2lCN1hHNGdJQ0FnSUNBZ0lHTnZiRzl5T2lCcGMwWnZZM1Z6WldRZ1B5QmpiMnh2Y25NdWJtVjFkSEpoYkRZd0lEb2dZMjlzYjNKekxtNWxkWFJ5WVd3eU1DeGNiaUFnSUNBZ0lDQWdjR0ZrWkdsdVp6b2dZbUZ6WlZWdWFYUWdLaUF5TEZ4dUlDQWdJQ0FnZlNrc1hHNTlLVHRjYmx4dWFXNTBaWEptWVdObElFeHZZV1JwYm1kRWIzUlFjbTl3Y3lCN1hHNGdJR1JsYkdGNU9pQnVkVzFpWlhJN1hHNGdJRzltWm5ObGREb2dZbTl2YkdWaGJqdGNibjFjYm1OdmJuTjBJRXh2WVdScGJtZEViM1FnUFNBb2V5QmtaV3hoZVN3Z2IyWm1jMlYwSUgwNklFeHZZV1JwYm1kRWIzUlFjbTl3Y3lrZ1BUNGdLRnh1SUNBOGMzQmhibHh1SUNBZ0lHTnpjejE3ZTF4dUlDQWdJQ0FnWVc1cGJXRjBhVzl1T2lCZ0pIdHNiMkZrYVc1blJHOTBRVzVwYldGMGFXOXVjMzBnTVhNZ1pXRnpaUzFwYmkxdmRYUWdKSHRrWld4aGVYMXRjeUJwYm1acGJtbDBaVHRnTEZ4dUlDQWdJQ0FnWW1GamEyZHliM1Z1WkVOdmJHOXlPaUFuWTNWeWNtVnVkRU52Ykc5eUp5eGNiaUFnSUNBZ0lHSnZjbVJsY2xKaFpHbDFjem9nSnpGbGJTY3NYRzRnSUNBZ0lDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXSnNiMk5ySnl4Y2JpQWdJQ0FnSUcxaGNtZHBia3hsWm5RNklHOW1abk5sZENBL0lDY3haVzBuSURvZ2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUNBZ2FHVnBaMmgwT2lBbk1XVnRKeXhjYmlBZ0lDQWdJSFpsY25ScFkyRnNRV3hwWjI0NklDZDBiM0FuTEZ4dUlDQWdJQ0FnZDJsa2RHZzZJQ2N4WlcwbkxGeHVJQ0FnSUgxOVhHNGdJQzgrWEc0cE8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRXh2WVdScGJtZEpibVJwWTJGMGIzSlFjbTl3Y3p4Y2JpQWdUM0IwYVc5dUlEMGdkVzVyYm05M2JpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNGdQU0JpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtJRDBnUjNKdmRYQkNZWE5sUEU5d2RHbHZiajVjYmo0Z1pYaDBaVzVrY3lCRGIyMXRiMjVRY205d2MwRnVaRU5zWVhOelRtRnRaVHhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BpQjdYRzRnSUM4cUtpQlFjbTl3Y3lCMGFHRjBJSGRwYkd3Z1ltVWdjR0Z6YzJWa0lHOXVJSFJ2SUhSb1pTQmphR2xzWkhKbGJpNGdLaTljYmlBZ2FXNXVaWEpRY205d2N6b2dTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lka2FYWW5YVHRjYmlBZ0x5b3FJRlJvWlNCbWIyTjFjMlZrSUhOMFlYUmxJRzltSUhSb1pTQnpaV3hsWTNRdUlDb3ZYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdhWE5FYVhOaFlteGxaRG9nWW05dmJHVmhianRjYmlBZ0x5b3FJRk5sZENCemFYcGxJRzltSUhSb1pTQmpiMjUwWVdsdVpYSXVJQ292WEc0Z0lITnBlbVU2SUc1MWJXSmxjanRjYm4xY2JtVjRjRzl5ZENCamIyNXpkQ0JNYjJGa2FXNW5TVzVrYVdOaGRHOXlJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLSHRjYmlBZ2FXNXVaWEpRY205d2N5eGNiaUFnYVhOU2RHd3NYRzRnSUhOcGVtVWdQU0EwTEZ4dUlDQXVMaTV5WlhOMFVISnZjSE5jYm4wNklFeHZZV1JwYm1kSmJtUnBZMkYwYjNKUWNtOXdjenhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1Bpa2dQVDRnZTF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lIc3VMaTVuWlhSVGRIbHNaVkJ5YjNCektGeHVJQ0FnSUNBZ0lDQjdJQzR1TG5KbGMzUlFjbTl3Y3l3Z2FXNXVaWEpRY205d2N5d2dhWE5TZEd3c0lITnBlbVVnZlN4Y2JpQWdJQ0FnSUNBZ0oyeHZZV1JwYm1kSmJtUnBZMkYwYjNJbkxGeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnYVc1a2FXTmhkRzl5T2lCMGNuVmxMRnh1SUNBZ0lDQWdJQ0FnSUNkc2IyRmthVzVuTFdsdVpHbGpZWFJ2Y2ljNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNsOVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQStYRzRnSUNBZ0lDQThURzloWkdsdVowUnZkQ0JrWld4aGVUMTdNSDBnYjJabWMyVjBQWHRwYzFKMGJIMGdMejVjYmlBZ0lDQWdJRHhNYjJGa2FXNW5SRzkwSUdSbGJHRjVQWHN4TmpCOUlHOW1abk5sZENBdlBseHVJQ0FnSUNBZ1BFeHZZV1JwYm1kRWIzUWdaR1ZzWVhrOWV6TXlNSDBnYjJabWMyVjBQWHNoYVhOU2RHeDlJQzgrWEc0Z0lDQWdQQzlrYVhZK1hHNGdJQ2s3WEc1OU8xeHVJbDE5ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBTdmcgPSBmdW5jdGlvbiBTdmcoX3JlZikge1xuICB2YXIgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQkMik7XG4gIHJldHVybiBqc3goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIGhlaWdodDogc2l6ZSxcbiAgICB3aWR0aDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyMCAyMFwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY3NzOiBfcmVmMlxuICB9LCBwcm9wcykpO1xufTtcbnZhciBDcm9zc0ljb24gPSBmdW5jdGlvbiBDcm9zc0ljb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChTdmcsIF9leHRlbmRzKHtcbiAgICBzaXplOiAyMFxuICB9LCBwcm9wcyksIGpzeChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiXG4gIH0pKTtcbn07XG52YXIgRG93bkNoZXZyb24gPSBmdW5jdGlvbiBEb3duQ2hldnJvbihwcm9wcykge1xuICByZXR1cm4ganN4KFN2ZywgX2V4dGVuZHMoe1xuICAgIHNpemU6IDIwXG4gIH0sIHByb3BzKSwganN4KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCJcbiAgfSkpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgYmFzZUNTUyA9IGZ1bmN0aW9uIGJhc2VDU1MoX3JlZjMsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0ZvY3VzZWQgPSBfcmVmMy5pc0ZvY3VzZWQsXG4gICAgX3JlZjMkdGhlbWUgPSBfcmVmMy50aGVtZSxcbiAgICBiYXNlVW5pdCA9IF9yZWYzJHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQsXG4gICAgY29sb3JzID0gX3JlZjMkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgICAnOmhvdmVyJzoge1xuICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwXG4gICAgfVxuICB9KTtcbn07XG52YXIgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xudmFyIERyb3Bkb3duSW5kaWNhdG9yID0gZnVuY3Rpb24gRHJvcGRvd25JbmRpY2F0b3IocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdkcm9wZG93bkluZGljYXRvcicsIHtcbiAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgJ2Ryb3Bkb3duLWluZGljYXRvcic6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbiB8fCBqc3goRG93bkNoZXZyb24sIG51bGwpKTtcbn07XG52YXIgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xudmFyIENsZWFySW5kaWNhdG9yID0gZnVuY3Rpb24gQ2xlYXJJbmRpY2F0b3IocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdjbGVhckluZGljYXRvcicsIHtcbiAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbiB8fCBqc3goQ3Jvc3NJY29uLCBudWxsKSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlcGFyYXRvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSBmdW5jdGlvbiBpbmRpY2F0b3JTZXBhcmF0b3JDU1MoX3JlZjQsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZjQuaXNEaXNhYmxlZCxcbiAgICBfcmVmNCR0aGVtZSA9IF9yZWY0LnRoZW1lLFxuICAgIGJhc2VVbml0ID0gX3JlZjQkdGhlbWUuc3BhY2luZy5iYXNlVW5pdCxcbiAgICBjb2xvcnMgPSBfcmVmNCR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gICAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gICAgd2lkdGg6IDFcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICBtYXJnaW5Ub3A6IGJhc2VVbml0ICogMlxuICB9KTtcbn07XG52YXIgSW5kaWNhdG9yU2VwYXJhdG9yID0gZnVuY3Rpb24gSW5kaWNhdG9yU2VwYXJhdG9yKHByb3BzKSB7XG4gIHZhciBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGlubmVyUHJvcHMsIGdldFN0eWxlUHJvcHMocHJvcHMsICdpbmRpY2F0b3JTZXBhcmF0b3InLCB7XG4gICAgJ2luZGljYXRvci1zZXBhcmF0b3InOiB0cnVlXG4gIH0pKSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExvYWRpbmdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cXG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cXG5cIl0pKSk7XG52YXIgbG9hZGluZ0luZGljYXRvckNTUyA9IGZ1bmN0aW9uIGxvYWRpbmdJbmRpY2F0b3JDU1MoX3JlZjUsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0ZvY3VzZWQgPSBfcmVmNS5pc0ZvY3VzZWQsXG4gICAgc2l6ZSA9IF9yZWY1LnNpemUsXG4gICAgX3JlZjUkdGhlbWUgPSBfcmVmNS50aGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmNSR0aGVtZS5jb2xvcnMsXG4gICAgYmFzZVVuaXQgPSBfcmVmNSR0aGVtZS5zcGFjaW5nLmJhc2VVbml0O1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICAgIGZvbnRTaXplOiBzaXplLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDJcbiAgfSk7XG59O1xudmFyIExvYWRpbmdEb3QgPSBmdW5jdGlvbiBMb2FkaW5nRG90KF9yZWY2KSB7XG4gIHZhciBkZWxheSA9IF9yZWY2LmRlbGF5LFxuICAgIG9mZnNldCA9IF9yZWY2Lm9mZnNldDtcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwge1xuICAgIGNzczogLyojX19QVVJFX18qL2NzcyQyKHtcbiAgICAgIGFuaW1hdGlvbjogXCJcIi5jb25jYXQobG9hZGluZ0RvdEFuaW1hdGlvbnMsIFwiIDFzIGVhc2UtaW4tb3V0IFwiKS5jb25jYXQoZGVsYXksIFwibXMgaW5maW5pdGU7XCIpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nXG4gICAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkxvYWRpbmdEb3Q7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltbHVaR2xqWVhSdmNuTXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVcxUlNTSXNJbVpwYkdVaU9pSnBibVJwWTJGMGIzSnpMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1VtVmhZM1JPYjJSbElIMGdabkp2YlNBbmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ2FuTjRMQ0JyWlhsbWNtRnRaWE1nZlNCbWNtOXRJQ2RBWlcxdmRHbHZiaTl5WldGamRDYzdYRzVjYm1sdGNHOXlkQ0I3WEc0Z0lFTnZiVzF2YmxCeWIzQnpRVzVrUTJ4aGMzTk9ZVzFsTEZ4dUlDQkRVMU5QWW1wbFkzUlhhWFJvVEdGaVpXd3NYRzRnSUVkeWIzVndRbUZ6WlN4Y2JuMGdabkp2YlNBbkxpNHZkSGx3WlhNbk8xeHVhVzF3YjNKMElIc2daMlYwVTNSNWJHVlFjbTl3Y3lCOUlHWnliMjBnSnk0dUwzVjBhV3h6Snp0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJFY205d1pHOTNiaUFtSUVOc1pXRnlJRWxqYjI1elhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVZMjl1YzNRZ1UzWm5JRDBnS0h0Y2JpQWdjMmw2WlN4Y2JpQWdMaTR1Y0hKdmNITmNibjA2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25jM1puSjEwZ0ppQjdJSE5wZW1VNklHNTFiV0psY2lCOUtTQTlQaUFvWEc0Z0lEeHpkbWRjYmlBZ0lDQm9aV2xuYUhROWUzTnBlbVY5WEc0Z0lDQWdkMmxrZEdnOWUzTnBlbVY5WEc0Z0lDQWdkbWxsZDBKdmVEMWNJakFnTUNBeU1DQXlNRndpWEc0Z0lDQWdZWEpwWVMxb2FXUmtaVzQ5WENKMGNuVmxYQ0pjYmlBZ0lDQm1iMk4xYzJGaWJHVTlYQ0ptWVd4elpWd2lYRzRnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNBZ0lHWnBiR3c2SUNkamRYSnlaVzUwUTI5c2IzSW5MRnh1SUNBZ0lDQWdiR2x1WlVobGFXZG9kRG9nTVN4Y2JpQWdJQ0FnSUhOMGNtOXJaVG9nSjJOMWNuSmxiblJEYjJ4dmNpY3NYRzRnSUNBZ0lDQnpkSEp2YTJWWGFXUjBhRG9nTUN4Y2JpQWdJQ0I5ZlZ4dUlDQWdJSHN1TGk1d2NtOXdjMzFjYmlBZ0x6NWNiaWs3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRU55YjNOelNXTnZibEJ5YjNCeklEMGdTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lkemRtY25YU0FtSUhzZ2MybDZaVDg2SUc1MWJXSmxjaUI5TzF4dVpYaHdiM0owSUdOdmJuTjBJRU55YjNOelNXTnZiaUE5SUNod2NtOXdjem9nUTNKdmMzTkpZMjl1VUhKdmNITXBJRDArSUNoY2JpQWdQRk4yWnlCemFYcGxQWHN5TUgwZ2V5NHVMbkJ5YjNCemZUNWNiaUFnSUNBOGNHRjBhQ0JrUFZ3aVRURTBMak0wT0NBeE5DNDRORGxqTFRBdU5EWTVJREF1TkRZNUxURXVNakk1SURBdU5EWTVMVEV1TmprM0lEQnNMVEl1TmpVeExUTXVNRE13TFRJdU5qVXhJRE11TURJNVl5MHdMalEyT1NBd0xqUTJPUzB4TGpJeU9TQXdMalEyT1MweExqWTVOeUF3TFRBdU5EWTVMVEF1TkRZNUxUQXVORFk1TFRFdU1qSTVJREF0TVM0Mk9UZHNNaTQzTlRndE15NHhOUzB5TGpjMU9TMHpMakUxTW1NdE1DNDBOamt0TUM0ME5qa3RNQzQwTmprdE1TNHlNamdnTUMweExqWTVOM014TGpJeU9DMHdMalEyT1NBeExqWTVOeUF3YkRJdU5qVXlJRE11TURNeElESXVOalV4TFRNdU1ETXhZekF1TkRZNUxUQXVORFk1SURFdU1qSTRMVEF1TkRZNUlERXVOamszSURCek1DNDBOamtnTVM0eU1qa2dNQ0F4TGpZNU4yd3RNaTQzTlRnZ015NHhOVElnTWk0M05UZ2dNeTR4TldNd0xqUTJPU0F3TGpRMk9TQXdMalEyT1NBeExqSXlPU0F3SURFdU5qazRlbHdpSUM4K1hHNGdJRHd2VTNablBseHVLVHRjYm1WNGNHOXlkQ0IwZVhCbElFUnZkMjVEYUdWMmNtOXVVSEp2Y0hNZ1BTQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjNOMlp5ZGRJQ1lnZXlCemFYcGxQem9nYm5WdFltVnlJSDA3WEc1bGVIQnZjblFnWTI5dWMzUWdSRzkzYmtOb1pYWnliMjRnUFNBb2NISnZjSE02SUVSdmQyNURhR1YyY205dVVISnZjSE1wSUQwK0lDaGNiaUFnUEZOMlp5QnphWHBsUFhzeU1IMGdleTR1TG5CeWIzQnpmVDVjYmlBZ0lDQThjR0YwYUNCa1BWd2lUVFF1TlRFMklEY3VOVFE0WXpBdU5ETTJMVEF1TkRRMklERXVNRFF6TFRBdU5EZ3hJREV1TlRjMklEQnNNeTQ1TURnZ015NDNORGNnTXk0NU1EZ3RNeTQzTkRkak1DNDFNek10TUM0ME9ERWdNUzR4TkRFdE1DNDBORFlnTVM0MU56UWdNQ0F3TGpRek5pQXdMalEwTlNBd0xqUXdPQ0F4TGpFNU55QXdJREV1TmpFMUxUQXVOREEySURBdU5ERTRMVFF1TmprMUlEUXVOVEF5TFRRdU5qazFJRFF1TlRBeUxUQXVNakUzSURBdU1qSXpMVEF1TlRBeUlEQXVNek0xTFRBdU56ZzNJREF1TXpNMWN5MHdMalUzTFRBdU1URXlMVEF1TnpnNUxUQXVNek0xWXpBZ01DMDBMakk0TnkwMExqQTROQzAwTGpZNU5TMDBMalV3TW5NdE1DNDBNell0TVM0eE55QXdMVEV1TmpFMWVsd2lJQzgrWEc0Z0lEd3ZVM1puUGx4dUtUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCRWNtOXdaRzkzYmlBbUlFTnNaV0Z5SUVKMWRIUnZibk5jYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5VUhKdmNITThYRzRnSUU5d2RHbHZiaUE5SUhWdWEyNXZkMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1SUQwZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGlBOUlFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtJR1Y0ZEdWdVpITWdRMjl0Ylc5dVVISnZjSE5CYm1SRGJHRnpjMDVoYldVOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRnZTF4dUlDQXZLaW9nVkdobElHTm9hV3hrY21WdUlIUnZJR0psSUhKbGJtUmxjbVZrSUdsdWMybGtaU0IwYUdVZ2FXNWthV05oZEc5eUxpQXFMMXh1SUNCamFHbHNaSEpsYmo4NklGSmxZV04wVG05a1pUdGNiaUFnTHlvcUlGQnliM0J6SUhSb1lYUWdkMmxzYkNCaVpTQndZWE56WldRZ2IyNGdkRzhnZEdobElHTm9hV3hrY21WdUxpQXFMMXh1SUNCcGJtNWxjbEJ5YjNCek9pQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjJScGRpZGRPMXh1SUNBdktpb2dWR2hsSUdadlkzVnpaV1FnYzNSaGRHVWdiMllnZEdobElITmxiR1ZqZEM0Z0tpOWNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TzF4dUlDQnBjMFJwYzJGaWJHVmtPaUJpYjI5c1pXRnVPMXh1ZlZ4dVhHNWpiMjV6ZENCaVlYTmxRMU5USUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQjdYRzRnSUNBZ2FYTkdiMk4xYzJWa0xGeHVJQ0FnSUhSb1pXMWxPaUI3WEc0Z0lDQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJQ0FnSUNCamIyeHZjbk1zWEc0Z0lDQWdmU3hjYmlBZ2ZUcGNiaUFnSUNCOElFUnliM0JrYjNkdVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaUFnSUNCOElFTnNaV0Z5U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0c1hHNGdJSFZ1YzNSNWJHVmtPaUJpYjI5c1pXRnVYRzRwT2lCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3Z1BUNGdLSHRjYmlBZ2JHRmlaV3c2SUNkcGJtUnBZMkYwYjNKRGIyNTBZV2x1WlhJbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUhSeVlXNXphWFJwYjI0NklDZGpiMnh2Y2lBeE5UQnRjeWNzWEc0Z0lDNHVMaWgxYm5OMGVXeGxaRnh1SUNBZ0lEOGdlMzFjYmlBZ0lDQTZJSHRjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNOakFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQWdJQ0FnSUNCd1lXUmthVzVuT2lCaVlYTmxWVzVwZENBcUlESXNYRzRnSUNBZ0lDQWdJQ2M2YUc5MlpYSW5PaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzT0RBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRRd0xGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdmU2tzWEc1OUtUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHUnliM0JrYjNkdVNXNWthV05oZEc5eVExTlRJRDBnWW1GelpVTlRVenRjYm1WNGNHOXlkQ0JqYjI1emRDQkVjbTl3Wkc5M2JrbHVaR2xqWVhSdmNpQTlJRHhjYmlBZ1QzQjBhVzl1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpaGNiaUFnY0hKdmNITTZJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCcGJtNWxjbEJ5YjNCeklIMGdQU0J3Y205d2N6dGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0I3TGk0dVoyVjBVM1I1YkdWUWNtOXdjeWh3Y205d2N5d2dKMlJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNCcGJtUnBZMkYwYjNJNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNka2NtOXdaRzkzYmkxcGJtUnBZMkYwYjNJbk9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNsOVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdZMmhwYkdSeVpXNGdmSHdnUEVSdmQyNURhR1YyY205dUlDOCtmVnh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBPMXh1ZlR0Y2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkRiR1ZoY2tsdVpHbGpZWFJ2Y2xCeWIzQnpQRnh1SUNCUGNIUnBiMjRnUFNCMWJtdHViM2R1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYmlBOUlHSnZiMnhsWVc0c1hHNGdJRWR5YjNWd0lHVjRkR1Z1WkhNZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo0Z1BTQkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaUJsZUhSbGJtUnpJRU52YlcxdmJsQnliM0J6UVc1a1EyeGhjM05PWVcxbFBFOXdkR2x2Yml3Z1NYTk5kV3gwYVN3Z1IzSnZkWEErSUh0Y2JpQWdMeW9xSUZSb1pTQmphR2xzWkhKbGJpQjBieUJpWlNCeVpXNWtaWEpsWkNCcGJuTnBaR1VnZEdobElHbHVaR2xqWVhSdmNpNGdLaTljYmlBZ1kyaHBiR1J5Wlc0L09pQlNaV0ZqZEU1dlpHVTdYRzRnSUM4cUtpQlFjbTl3Y3lCMGFHRjBJSGRwYkd3Z1ltVWdjR0Z6YzJWa0lHOXVJSFJ2SUhSb1pTQmphR2xzWkhKbGJpNGdLaTljYmlBZ2FXNXVaWEpRY205d2N6b2dTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lka2FYWW5YVHRjYmlBZ0x5b3FJRlJvWlNCbWIyTjFjMlZrSUhOMFlYUmxJRzltSUhSb1pTQnpaV3hsWTNRdUlDb3ZYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYmp0Y2JuMWNibHh1Wlhod2IzSjBJR052Ym5OMElHTnNaV0Z5U1c1a2FXTmhkRzl5UTFOVElEMGdZbUZ6WlVOVFV6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRGJHVmhja2x1WkdsallYUnZjaUE5SUR4Y2JpQWdUM0IwYVc5dUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpeGNiaUFnUjNKdmRYQWdaWGgwWlc1a2N5QkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaWhjYmlBZ2NISnZjSE02SUVOc1pXRnlTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCcGJtNWxjbEJ5YjNCeklIMGdQU0J3Y205d2N6dGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0I3TGk0dVoyVjBVM1I1YkdWUWNtOXdjeWh3Y205d2N5d2dKMk5zWldGeVNXNWthV05oZEc5eUp5d2dlMXh1SUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ2RqYkdWaGNpMXBibVJwWTJGMGIzSW5PaUIwY25WbExGeHVJQ0FnSUNBZ2ZTbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0I3WTJocGJHUnlaVzRnZkh3Z1BFTnliM056U1dOdmJpQXZQbjFjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVHRjYm4wN1hHNWNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVMeThnVTJWd1lYSmhkRzl5WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSmJtUnBZMkYwYjNKVFpYQmhjbUYwYjNKUWNtOXdjenhjYmlBZ1QzQjBhVzl1SUQwZ2RXNXJibTkzYml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0Z1BTQmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K0lEMGdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRnWlhoMFpXNWtjeUJEYjIxdGIyNVFjbTl3YzBGdVpFTnNZWE56VG1GdFpUeFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGlCN1hHNGdJR2x6UkdsellXSnNaV1E2SUdKdmIyeGxZVzQ3WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNiaUFnYVc1dVpYSlFjbTl3Y3o4NklFcFRXQzVKYm5SeWFXNXphV05GYkdWdFpXNTBjMXNuYzNCaGJpZGRPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVc1a2FXTmhkRzl5VTJWd1lYSmhkRzl5UTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5FYVhOaFlteGxaQ3hjYmlBZ0lDQjBhR1Z0WlRvZ2UxeHVJQ0FnSUNBZ2MzQmhZMmx1WnpvZ2V5QmlZWE5sVlc1cGRDQjlMRnh1SUNBZ0lDQWdZMjlzYjNKekxGeHVJQ0FnSUgwc1hHNGdJSDA2SUVsdVpHbGpZWFJ2Y2xObGNHRnlZWFJ2Y2xCeWIzQnpQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0xGeHVJQ0IxYm5OMGVXeGxaRG9nWW05dmJHVmhibHh1S1RvZ1ExTlRUMkpxWldOMFYybDBhRXhoWW1Wc0lEMCtJQ2g3WEc0Z0lHeGhZbVZzT2lBbmFXNWthV05oZEc5eVUyVndZWEpoZEc5eUp5eGNiaUFnWVd4cFoyNVRaV3htT2lBbmMzUnlaWFJqYUNjc1hHNGdJSGRwWkhSb09pQXhMRnh1SUNBdUxpNG9kVzV6ZEhsc1pXUmNiaUFnSUNBL0lIdDlYRzRnSUNBZ09pQjdYRzRnSUNBZ0lDQWdJR0poWTJ0bmNtOTFibVJEYjJ4dmNqb2dhWE5FYVhOaFlteGxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNNVEFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQWdJQ0FnSUNCdFlYSm5hVzVDYjNSMGIyMDZJR0poYzJWVmJtbDBJQ29nTWl4Y2JpQWdJQ0FnSUNBZ2JXRnlaMmx1Vkc5d09pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lDQWdJQ0I5S1N4Y2JuMHBPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCd2NtOXdjem9nU1c1a2FXTmhkRzl5VTJWd1lYSmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2Jpa2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHbHVibVZ5VUhKdmNITWdmU0E5SUhCeWIzQnpPMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHh6Y0dGdVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQWdJSHN1TGk1blpYUlRkSGxzWlZCeWIzQnpLSEJ5YjNCekxDQW5hVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNBbmFXNWthV05oZEc5eUxYTmxjR0Z5WVhSdmNpYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNCOUtYMWNiaUFnSUNBdlBseHVJQ0FwTzF4dWZUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCTWIyRmthVzVuWEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnYkc5aFpHbHVaMFJ2ZEVGdWFXMWhkR2x2Ym5NZ1BTQnJaWGxtY21GdFpYTmdYRzRnSURBbExDQTRNQ1VzSURFd01DVWdleUJ2Y0dGamFYUjVPaUF3T3lCOVhHNGdJRFF3SlNCN0lHOXdZV05wZEhrNklERTdJSDFjYm1BN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCc2IyRmthVzVuU1c1a2FXTmhkRzl5UTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5HYjJOMWMyVmtMRnh1SUNBZ0lITnBlbVVzWEc0Z0lDQWdkR2hsYldVNklIdGNiaUFnSUNBZ0lHTnZiRzl5Y3l4Y2JpQWdJQ0FnSUhOd1lXTnBibWM2SUhzZ1ltRnpaVlZ1YVhRZ2ZTeGNiaUFnSUNCOUxGeHVJQ0I5T2lCTWIyRmthVzVuU1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0c1hHNGdJSFZ1YzNSNWJHVmtPaUJpYjI5c1pXRnVYRzRwT2lCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3Z1BUNGdLSHRjYmlBZ2JHRmlaV3c2SUNkc2IyRmthVzVuU1c1a2FXTmhkRzl5Snl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0IwY21GdWMybDBhVzl1T2lBblkyOXNiM0lnTVRVd2JYTW5MRnh1SUNCaGJHbG5ibE5sYkdZNklDZGpaVzUwWlhJbkxGeHVJQ0JtYjI1MFUybDZaVG9nYzJsNlpTeGNiaUFnYkdsdVpVaGxhV2RvZERvZ01TeGNiaUFnYldGeVoybHVVbWxuYUhRNklITnBlbVVzWEc0Z0lIUmxlSFJCYkdsbmJqb2dKMk5sYm5SbGNpY3NYRzRnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2R0YVdSa2JHVW5MRnh1SUNBdUxpNG9kVzV6ZEhsc1pXUmNiaUFnSUNBL0lIdDlYRzRnSUNBZ09pQjdYRzRnSUNBZ0lDQWdJR052Ykc5eU9pQnBjMFp2WTNWelpXUWdQeUJqYjJ4dmNuTXVibVYxZEhKaGJEWXdJRG9nWTI5c2IzSnpMbTVsZFhSeVlXd3lNQ3hjYmlBZ0lDQWdJQ0FnY0dGa1pHbHVaem9nWW1GelpWVnVhWFFnS2lBeUxGeHVJQ0FnSUNBZ2ZTa3NYRzU5S1R0Y2JseHVhVzUwWlhKbVlXTmxJRXh2WVdScGJtZEViM1JRY205d2N5QjdYRzRnSUdSbGJHRjVPaUJ1ZFcxaVpYSTdYRzRnSUc5bVpuTmxkRG9nWW05dmJHVmhianRjYm4xY2JtTnZibk4wSUV4dllXUnBibWRFYjNRZ1BTQW9leUJrWld4aGVTd2diMlptYzJWMElIMDZJRXh2WVdScGJtZEViM1JRY205d2N5a2dQVDRnS0Z4dUlDQThjM0JoYmx4dUlDQWdJR056Y3oxN2UxeHVJQ0FnSUNBZ1lXNXBiV0YwYVc5dU9pQmdKSHRzYjJGa2FXNW5SRzkwUVc1cGJXRjBhVzl1YzMwZ01YTWdaV0Z6WlMxcGJpMXZkWFFnSkh0a1pXeGhlWDF0Y3lCcGJtWnBibWwwWlR0Z0xGeHVJQ0FnSUNBZ1ltRmphMmR5YjNWdVpFTnZiRzl5T2lBblkzVnljbVZ1ZEVOdmJHOXlKeXhjYmlBZ0lDQWdJR0p2Y21SbGNsSmhaR2wxY3pvZ0p6RmxiU2NzWEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNBZ0lHMWhjbWRwYmt4bFpuUTZJRzltWm5ObGRDQS9JQ2N4WlcwbklEb2dkVzVrWldacGJtVmtMRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NV1Z0Snl4Y2JpQWdJQ0FnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2QwYjNBbkxGeHVJQ0FnSUNBZ2QybGtkR2c2SUNjeFpXMG5MRnh1SUNBZ0lIMTlYRzRnSUM4K1hHNHBPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUV4dllXUnBibWRKYm1ScFkyRjBiM0pRY205d2N6eGNiaUFnVDNCMGFXOXVJRDBnZFc1cmJtOTNiaXhjYmlBZ1NYTk5kV3gwYVNCbGVIUmxibVJ6SUdKdmIyeGxZVzRnUFNCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrSUQwZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNGdaWGgwWlc1a2N5QkRiMjF0YjI1UWNtOXdjMEZ1WkVOc1lYTnpUbUZ0WlR4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaUI3WEc0Z0lDOHFLaUJRY205d2N5QjBhR0YwSUhkcGJHd2dZbVVnY0dGemMyVmtJRzl1SUhSdklIUm9aU0JqYUdsc1pISmxiaTRnS2k5Y2JpQWdhVzV1WlhKUWNtOXdjem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZGthWFluWFR0Y2JpQWdMeW9xSUZSb1pTQm1iMk4xYzJWa0lITjBZWFJsSUc5bUlIUm9aU0J6Wld4bFkzUXVJQ292WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNiaUFnYVhORWFYTmhZbXhsWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdMeW9xSUZObGRDQnphWHBsSUc5bUlIUm9aU0JqYjI1MFlXbHVaWEl1SUNvdlhHNGdJSE5wZW1VNklHNTFiV0psY2p0Y2JuMWNibVY0Y0c5eWRDQmpiMjV6ZENCTWIyRmthVzVuU1c1a2FXTmhkRzl5SUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0h0Y2JpQWdhVzV1WlhKUWNtOXdjeXhjYmlBZ2FYTlNkR3dzWEc0Z0lITnBlbVVnUFNBMExGeHVJQ0F1TGk1eVpYTjBVSEp2Y0hOY2JuMDZJRXh2WVdScGJtZEpibVJwWTJGMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaWtnUFQ0Z2UxeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJSHN1TGk1blpYUlRkSGxzWlZCeWIzQnpLRnh1SUNBZ0lDQWdJQ0I3SUM0dUxuSmxjM1JRY205d2N5d2dhVzV1WlhKUWNtOXdjeXdnYVhOU2RHd3NJSE5wZW1VZ2ZTeGNiaUFnSUNBZ0lDQWdKMnh2WVdScGJtZEpibVJwWTJGMGIzSW5MRnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXNWthV05oZEc5eU9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNBZ0lDZHNiMkZrYVc1bkxXbHVaR2xqWVhSdmNpYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0E4VEc5aFpHbHVaMFJ2ZENCa1pXeGhlVDE3TUgwZ2IyWm1jMlYwUFh0cGMxSjBiSDBnTHo1Y2JpQWdJQ0FnSUR4TWIyRmthVzVuUkc5MElHUmxiR0Y1UFhzeE5qQjlJRzltWm5ObGRDQXZQbHh1SUNBZ0lDQWdQRXh2WVdScGJtZEViM1FnWkdWc1lYazllek15TUgwZ2IyWm1jMlYwUFhzaGFYTlNkR3g5SUM4K1hHNGdJQ0FnUEM5a2FYWStYRzRnSUNrN1hHNTlPMXh1SWwxOSAqL1wiKVxuICB9KTtcbn07XG52YXIgTG9hZGluZ0luZGljYXRvciA9IGZ1bmN0aW9uIExvYWRpbmdJbmRpY2F0b3IoX3JlZjcpIHtcbiAgdmFyIGlubmVyUHJvcHMgPSBfcmVmNy5pbm5lclByb3BzLFxuICAgIGlzUnRsID0gX3JlZjcuaXNSdGwsXG4gICAgX3JlZjckc2l6ZSA9IF9yZWY3LnNpemUsXG4gICAgc2l6ZSA9IF9yZWY3JHNpemUgPT09IHZvaWQgMCA/IDQgOiBfcmVmNyRzaXplLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNywgX2V4Y2x1ZGVkMik7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0UHJvcHMpLCB7fSwge1xuICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgaXNSdGw6IGlzUnRsLFxuICAgIHNpemU6IHNpemVcbiAgfSksICdsb2FkaW5nSW5kaWNhdG9yJywge1xuICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAnbG9hZGluZy1pbmRpY2F0b3InOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwganN4KExvYWRpbmdEb3QsIHtcbiAgICBkZWxheTogMCxcbiAgICBvZmZzZXQ6IGlzUnRsXG4gIH0pLCBqc3goTG9hZGluZ0RvdCwge1xuICAgIGRlbGF5OiAxNjAsXG4gICAgb2Zmc2V0OiB0cnVlXG4gIH0pLCBqc3goTG9hZGluZ0RvdCwge1xuICAgIGRlbGF5OiAzMjAsXG4gICAgb2Zmc2V0OiAhaXNSdGxcbiAgfSkpO1xufTtcblxudmFyIGNzcyQxID0gZnVuY3Rpb24gY3NzKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmc7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ2NvbnRyb2wnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgbWluSGVpZ2h0OiBzcGFjaW5nLmNvbnRyb2xIZWlnaHQsXG4gICAgb3V0bGluZTogJzAgIWltcG9ydGFudCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgdHJhbnNpdGlvbjogJ2FsbCAxMDBtcydcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDUgOiBjb2xvcnMubmV1dHJhbDAsXG4gICAgYm9yZGVyQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogaXNGb2N1c2VkID8gY29sb3JzLnByaW1hcnkgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJveFNoYWRvdzogaXNGb2N1c2VkID8gXCIwIDAgMCAxcHggXCIuY29uY2F0KGNvbG9ycy5wcmltYXJ5KSA6IHVuZGVmaW5lZCxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGJvcmRlckNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMucHJpbWFyeSA6IGNvbG9ycy5uZXV0cmFsMzBcbiAgICB9XG4gIH0pO1xufTtcbnZhciBDb250cm9sID0gZnVuY3Rpb24gQ29udHJvbChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQgPSBwcm9wcy5pc0ZvY3VzZWQsXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBtZW51SXNPcGVuID0gcHJvcHMubWVudUlzT3BlbjtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnY29udHJvbCcsIHtcbiAgICBjb250cm9sOiB0cnVlLFxuICAgICdjb250cm9sLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgJ2NvbnRyb2wtLWlzLWZvY3VzZWQnOiBpc0ZvY3VzZWQsXG4gICAgJ2NvbnRyb2wtLW1lbnUtaXMtb3Blbic6IG1lbnVJc09wZW5cbiAgfSksIGlubmVyUHJvcHMsIHtcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogaXNEaXNhYmxlZCB8fCB1bmRlZmluZWRcbiAgfSksIGNoaWxkcmVuKTtcbn07XG52YXIgQ29udHJvbCQxID0gQ29udHJvbDtcblxudmFyIF9leGNsdWRlZCQxID0gW1wiZGF0YVwiXTtcbnZhciBncm91cENTUyA9IGZ1bmN0aW9uIGdyb3VwQ1NTKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBzcGFjaW5nID0gX3JlZi50aGVtZS5zcGFjaW5nO1xuICByZXR1cm4gdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBwYWRkaW5nQm90dG9tOiBzcGFjaW5nLmJhc2VVbml0ICogMixcbiAgICBwYWRkaW5nVG9wOiBzcGFjaW5nLmJhc2VVbml0ICogMlxuICB9O1xufTtcbnZhciBHcm91cCA9IGZ1bmN0aW9uIEdyb3VwKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgIGdldENsYXNzTmFtZXMgPSBwcm9wcy5nZXRDbGFzc05hbWVzLFxuICAgIEhlYWRpbmcgPSBwcm9wcy5IZWFkaW5nLFxuICAgIGhlYWRpbmdQcm9wcyA9IHByb3BzLmhlYWRpbmdQcm9wcyxcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBsYWJlbCA9IHByb3BzLmxhYmVsLFxuICAgIHRoZW1lID0gcHJvcHMudGhlbWUsXG4gICAgc2VsZWN0UHJvcHMgPSBwcm9wcy5zZWxlY3RQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2dyb3VwJywge1xuICAgIGdyb3VwOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwganN4KEhlYWRpbmcsIF9leHRlbmRzKHt9LCBoZWFkaW5nUHJvcHMsIHtcbiAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHMsXG4gICAgdGhlbWU6IHRoZW1lLFxuICAgIGdldFN0eWxlczogZ2V0U3R5bGVzLFxuICAgIGdldENsYXNzTmFtZXM6IGdldENsYXNzTmFtZXMsXG4gICAgY3g6IGN4XG4gIH0pLCBsYWJlbCksIGpzeChcImRpdlwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcbnZhciBncm91cEhlYWRpbmdDU1MgPSBmdW5jdGlvbiBncm91cEhlYWRpbmdDU1MoX3JlZjIsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmMiR0aGVtZSA9IF9yZWYyLnRoZW1lLFxuICAgIGNvbG9ycyA9IF9yZWYyJHRoZW1lLmNvbG9ycyxcbiAgICBzcGFjaW5nID0gX3JlZjIkdGhlbWUuc3BhY2luZztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnZ3JvdXAnLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdibG9jaydcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw0MCxcbiAgICBmb250U2l6ZTogJzc1JScsXG4gICAgZm9udFdlaWdodDogNTAwLFxuICAgIG1hcmdpbkJvdHRvbTogJzAuMjVlbScsXG4gICAgcGFkZGluZ0xlZnQ6IHNwYWNpbmcuYmFzZVVuaXQgKiAzLFxuICAgIHBhZGRpbmdSaWdodDogc3BhY2luZy5iYXNlVW5pdCAqIDMsXG4gICAgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSdcbiAgfSk7XG59O1xudmFyIEdyb3VwSGVhZGluZyA9IGZ1bmN0aW9uIEdyb3VwSGVhZGluZyhwcm9wcykge1xuICB2YXIgX2NsZWFuQ29tbW9uUHJvcHMgPSBjbGVhbkNvbW1vblByb3BzKHByb3BzKTtcbiAgICBfY2xlYW5Db21tb25Qcm9wcy5kYXRhO1xuICAgIHZhciBpbm5lclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9jbGVhbkNvbW1vblByb3BzLCBfZXhjbHVkZWQkMSk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdncm91cEhlYWRpbmcnLCB7XG4gICAgJ2dyb3VwLWhlYWRpbmcnOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSk7XG59O1xudmFyIEdyb3VwJDEgPSBHcm91cDtcblxudmFyIF9leGNsdWRlZCA9IFtcImlubmVyUmVmXCIsIFwiaXNEaXNhYmxlZFwiLCBcImlzSGlkZGVuXCIsIFwiaW5wdXRDbGFzc05hbWVcIl07XG52YXIgaW5wdXRDU1MgPSBmdW5jdGlvbiBpbnB1dENTUyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgdmlzaWJpbGl0eTogaXNEaXNhYmxlZCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnLFxuICAgIC8vIGZvcmNlIGNzcyB0byByZWNvbXB1dGUgd2hlbiB2YWx1ZSBjaGFuZ2UgZHVlIHRvIEBlbW90aW9uIGJ1Zy5cbiAgICAvLyBXZSBjYW4gcmVtb3ZlIGl0IHdoZW5ldmVyIHRoZSBidWcgaXMgZml4ZWQuXG4gICAgdHJhbnNmb3JtOiB2YWx1ZSA/ICd0cmFuc2xhdGVaKDApJyA6ICcnXG4gIH0sIGNvbnRhaW5lclN0eWxlKSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBtYXJnaW46IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIHBhZGRpbmdCb3R0b206IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIHBhZGRpbmdUb3A6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDgwXG4gIH0pO1xufTtcbnZhciBzcGFjaW5nU3R5bGUgPSB7XG4gIGdyaWRBcmVhOiAnMSAvIDInLFxuICBmb250OiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAnMnB4JyxcbiAgYm9yZGVyOiAwLFxuICBtYXJnaW46IDAsXG4gIG91dGxpbmU6IDAsXG4gIHBhZGRpbmc6IDBcbn07XG52YXIgY29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXg6ICcxIDEgYXV0bycsXG4gIGRpc3BsYXk6ICdpbmxpbmUtZ3JpZCcsXG4gIGdyaWRBcmVhOiAnMSAvIDEgLyAyIC8gMycsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6ICcwIG1pbi1jb250ZW50JyxcbiAgJyY6YWZ0ZXInOiBfb2JqZWN0U3ByZWFkKHtcbiAgICBjb250ZW50OiAnYXR0cihkYXRhLXZhbHVlKSBcIiBcIicsXG4gICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgd2hpdGVTcGFjZTogJ3ByZSdcbiAgfSwgc3BhY2luZ1N0eWxlKVxufTtcbnZhciBpbnB1dFN0eWxlID0gZnVuY3Rpb24gaW5wdXRTdHlsZShpc0hpZGRlbikge1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdpbnB1dCcsXG4gICAgY29sb3I6ICdpbmhlcml0JyxcbiAgICBiYWNrZ3JvdW5kOiAwLFxuICAgIG9wYWNpdHk6IGlzSGlkZGVuID8gMCA6IDEsXG4gICAgd2lkdGg6ICcxMDAlJ1xuICB9LCBzcGFjaW5nU3R5bGUpO1xufTtcbnZhciBJbnB1dCA9IGZ1bmN0aW9uIElucHV0KHByb3BzKSB7XG4gIHZhciBjeCA9IHByb3BzLmN4LFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWU7XG4gIHZhciBfY2xlYW5Db21tb25Qcm9wcyA9IGNsZWFuQ29tbW9uUHJvcHMocHJvcHMpLFxuICAgIGlubmVyUmVmID0gX2NsZWFuQ29tbW9uUHJvcHMuaW5uZXJSZWYsXG4gICAgaXNEaXNhYmxlZCA9IF9jbGVhbkNvbW1vblByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNIaWRkZW4gPSBfY2xlYW5Db21tb25Qcm9wcy5pc0hpZGRlbixcbiAgICBpbnB1dENsYXNzTmFtZSA9IF9jbGVhbkNvbW1vblByb3BzLmlucHV0Q2xhc3NOYW1lLFxuICAgIGlubmVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2NsZWFuQ29tbW9uUHJvcHMsIF9leGNsdWRlZCk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdpbnB1dCcsIHtcbiAgICAnaW5wdXQtY29udGFpbmVyJzogdHJ1ZVxuICB9KSwge1xuICAgIFwiZGF0YS12YWx1ZVwiOiB2YWx1ZSB8fCAnJ1xuICB9KSwganN4KFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgaW5wdXQ6IHRydWVcbiAgICB9LCBpbnB1dENsYXNzTmFtZSksXG4gICAgcmVmOiBpbm5lclJlZixcbiAgICBzdHlsZTogaW5wdXRTdHlsZShpc0hpZGRlbiksXG4gICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgfSwgaW5uZXJQcm9wcykpKTtcbn07XG52YXIgSW5wdXQkMSA9IElucHV0O1xuXG52YXIgbXVsdGlWYWx1ZUNTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVDU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ211bHRpVmFsdWUnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBtaW5XaWR0aDogMFxuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLm5ldXRyYWwxMCxcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyAvIDIsXG4gICAgbWFyZ2luOiBzcGFjaW5nLmJhc2VVbml0IC8gMlxuICB9KTtcbn07XG52YXIgbXVsdGlWYWx1ZUxhYmVsQ1NTID0gZnVuY3Rpb24gbXVsdGlWYWx1ZUxhYmVsQ1NTKF9yZWYyLCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZjIkdGhlbWUgPSBfcmVmMi50aGVtZSxcbiAgICBib3JkZXJSYWRpdXMgPSBfcmVmMiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgY29sb3JzID0gX3JlZjIkdGhlbWUuY29sb3JzLFxuICAgIGNyb3BXaXRoRWxsaXBzaXMgPSBfcmVmMi5jcm9wV2l0aEVsbGlwc2lzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogY3JvcFdpdGhFbGxpcHNpcyB8fCBjcm9wV2l0aEVsbGlwc2lzID09PSB1bmRlZmluZWQgPyAnZWxsaXBzaXMnIDogdW5kZWZpbmVkLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMgLyAyLFxuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDgwLFxuICAgIGZvbnRTaXplOiAnODUlJyxcbiAgICBwYWRkaW5nOiAzLFxuICAgIHBhZGRpbmdMZWZ0OiA2XG4gIH0pO1xufTtcbnZhciBtdWx0aVZhbHVlUmVtb3ZlQ1NTID0gZnVuY3Rpb24gbXVsdGlWYWx1ZVJlbW92ZUNTUyhfcmVmMywgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYzJHRoZW1lID0gX3JlZjMudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYzJHRoZW1lLnNwYWNpbmcsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZjMkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIGNvbG9ycyA9IF9yZWYzJHRoZW1lLmNvbG9ycyxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmMy5pc0ZvY3VzZWQ7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyAvIDIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMuZGFuZ2VyTGlnaHQgOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ0xlZnQ6IHNwYWNpbmcuYmFzZVVuaXQsXG4gICAgcGFkZGluZ1JpZ2h0OiBzcGFjaW5nLmJhc2VVbml0LFxuICAgICc6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5kYW5nZXJMaWdodCxcbiAgICAgIGNvbG9yOiBjb2xvcnMuZGFuZ2VyXG4gICAgfVxuICB9KTtcbn07XG52YXIgTXVsdGlWYWx1ZUdlbmVyaWMgPSBmdW5jdGlvbiBNdWx0aVZhbHVlR2VuZXJpYyhfcmVmNCkge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNC5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gX3JlZjQuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBpbm5lclByb3BzLCBjaGlsZHJlbik7XG59O1xudmFyIE11bHRpVmFsdWVDb250YWluZXIgPSBNdWx0aVZhbHVlR2VuZXJpYztcbnZhciBNdWx0aVZhbHVlTGFiZWwgPSBNdWx0aVZhbHVlR2VuZXJpYztcbmZ1bmN0aW9uIE11bHRpVmFsdWVSZW1vdmUoX3JlZjUpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY1LmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwiYnV0dG9uXCJcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuIHx8IGpzeChDcm9zc0ljb24sIHtcbiAgICBzaXplOiAxNFxuICB9KSk7XG59XG52YXIgTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIE11bHRpVmFsdWUocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMsXG4gICAgZGF0YSA9IHByb3BzLmRhdGEsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgcmVtb3ZlUHJvcHMgPSBwcm9wcy5yZW1vdmVQcm9wcyxcbiAgICBzZWxlY3RQcm9wcyA9IHByb3BzLnNlbGVjdFByb3BzO1xuICB2YXIgQ29udGFpbmVyID0gY29tcG9uZW50cy5Db250YWluZXIsXG4gICAgTGFiZWwgPSBjb21wb25lbnRzLkxhYmVsLFxuICAgIFJlbW92ZSA9IGNvbXBvbmVudHMuUmVtb3ZlO1xuICByZXR1cm4ganN4KENvbnRhaW5lciwge1xuICAgIGRhdGE6IGRhdGEsXG4gICAgaW5uZXJQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnbXVsdGlWYWx1ZScsIHtcbiAgICAgICdtdWx0aS12YWx1ZSc6IHRydWUsXG4gICAgICAnbXVsdGktdmFsdWUtLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZFxuICAgIH0pKSwgaW5uZXJQcm9wcyksXG4gICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzXG4gIH0sIGpzeChMYWJlbCwge1xuICAgIGRhdGE6IGRhdGEsXG4gICAgaW5uZXJQcm9wczogX29iamVjdFNwcmVhZCh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ211bHRpVmFsdWVMYWJlbCcsIHtcbiAgICAgICdtdWx0aS12YWx1ZV9fbGFiZWwnOiB0cnVlXG4gICAgfSkpLFxuICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wc1xuICB9LCBjaGlsZHJlbiksIGpzeChSZW1vdmUsIHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIGlubmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ211bHRpVmFsdWVSZW1vdmUnLCB7XG4gICAgICAnbXVsdGktdmFsdWVfX3JlbW92ZSc6IHRydWVcbiAgICB9KSksIHt9LCB7XG4gICAgICAnYXJpYS1sYWJlbCc6IFwiUmVtb3ZlIFwiLmNvbmNhdChjaGlsZHJlbiB8fCAnb3B0aW9uJylcbiAgICB9LCByZW1vdmVQcm9wcyksXG4gICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzXG4gIH0pKTtcbn07XG52YXIgTXVsdGlWYWx1ZSQxID0gTXVsdGlWYWx1ZTtcblxudmFyIG9wdGlvbkNTUyA9IGZ1bmN0aW9uIG9wdGlvbkNTUyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ29wdGlvbicsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCcsXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAncmdiYSgwLCAwLCAwLCAwKSdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzU2VsZWN0ZWQgPyBjb2xvcnMucHJpbWFyeSA6IGlzRm9jdXNlZCA/IGNvbG9ycy5wcmltYXJ5MjUgOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwyMCA6IGlzU2VsZWN0ZWQgPyBjb2xvcnMubmV1dHJhbDAgOiAnaW5oZXJpdCcsXG4gICAgcGFkZGluZzogXCJcIi5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAqIDIsIFwicHggXCIpLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMywgXCJweFwiKSxcbiAgICAvLyBwcm92aWRlIHNvbWUgYWZmb3JkYW5jZSBvbiB0b3VjaCBkZXZpY2VzXG4gICAgJzphY3RpdmUnOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICFpc0Rpc2FibGVkID8gaXNTZWxlY3RlZCA/IGNvbG9ycy5wcmltYXJ5IDogY29sb3JzLnByaW1hcnk1MCA6IHVuZGVmaW5lZFxuICAgIH1cbiAgfSk7XG59O1xudmFyIE9wdGlvbiA9IGZ1bmN0aW9uIE9wdGlvbihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQgPSBwcm9wcy5pc0ZvY3VzZWQsXG4gICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ29wdGlvbicsIHtcbiAgICBvcHRpb246IHRydWUsXG4gICAgJ29wdGlvbi0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdvcHRpb24tLWlzLWZvY3VzZWQnOiBpc0ZvY3VzZWQsXG4gICAgJ29wdGlvbi0taXMtc2VsZWN0ZWQnOiBpc1NlbGVjdGVkXG4gIH0pLCB7XG4gICAgcmVmOiBpbm5lclJlZixcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogaXNEaXNhYmxlZFxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcbnZhciBPcHRpb24kMSA9IE9wdGlvbjtcblxudmFyIHBsYWNlaG9sZGVyQ1NTID0gZnVuY3Rpb24gcGxhY2Vob2xkZXJDU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ3BsYWNlaG9sZGVyJyxcbiAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGNvbG9ycy5uZXV0cmFsNTAsXG4gICAgbWFyZ2luTGVmdDogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgbWFyZ2luUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyXG4gIH0pO1xufTtcbnZhciBQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIFBsYWNlaG9sZGVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAncGxhY2Vob2xkZXInLCB7XG4gICAgcGxhY2Vob2xkZXI6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xudmFyIFBsYWNlaG9sZGVyJDEgPSBQbGFjZWhvbGRlcjtcblxudmFyIGNzcyA9IGZ1bmN0aW9uIGNzcyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdzaW5nbGVWYWx1ZScsXG4gICAgZ3JpZEFyZWE6ICcxIC8gMSAvIDIgLyAzJyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsNDAgOiBjb2xvcnMubmV1dHJhbDgwLFxuICAgIG1hcmdpbkxlZnQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIG1hcmdpblJpZ2h0OiBzcGFjaW5nLmJhc2VVbml0IC8gMlxuICB9KTtcbn07XG52YXIgU2luZ2xlVmFsdWUgPSBmdW5jdGlvbiBTaW5nbGVWYWx1ZShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ3NpbmdsZVZhbHVlJywge1xuICAgICdzaW5nbGUtdmFsdWUnOiB0cnVlLFxuICAgICdzaW5nbGUtdmFsdWUtLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgU2luZ2xlVmFsdWUkMSA9IFNpbmdsZVZhbHVlO1xuXG52YXIgY29tcG9uZW50cyA9IHtcbiAgQ2xlYXJJbmRpY2F0b3I6IENsZWFySW5kaWNhdG9yLFxuICBDb250cm9sOiBDb250cm9sJDEsXG4gIERyb3Bkb3duSW5kaWNhdG9yOiBEcm9wZG93bkluZGljYXRvcixcbiAgRG93bkNoZXZyb246IERvd25DaGV2cm9uLFxuICBDcm9zc0ljb246IENyb3NzSWNvbixcbiAgR3JvdXA6IEdyb3VwJDEsXG4gIEdyb3VwSGVhZGluZzogR3JvdXBIZWFkaW5nLFxuICBJbmRpY2F0b3JzQ29udGFpbmVyOiBJbmRpY2F0b3JzQ29udGFpbmVyLFxuICBJbmRpY2F0b3JTZXBhcmF0b3I6IEluZGljYXRvclNlcGFyYXRvcixcbiAgSW5wdXQ6IElucHV0JDEsXG4gIExvYWRpbmdJbmRpY2F0b3I6IExvYWRpbmdJbmRpY2F0b3IsXG4gIE1lbnU6IE1lbnUkMSxcbiAgTWVudUxpc3Q6IE1lbnVMaXN0LFxuICBNZW51UG9ydGFsOiBNZW51UG9ydGFsLFxuICBMb2FkaW5nTWVzc2FnZTogTG9hZGluZ01lc3NhZ2UsXG4gIE5vT3B0aW9uc01lc3NhZ2U6IE5vT3B0aW9uc01lc3NhZ2UsXG4gIE11bHRpVmFsdWU6IE11bHRpVmFsdWUkMSxcbiAgTXVsdGlWYWx1ZUNvbnRhaW5lcjogTXVsdGlWYWx1ZUNvbnRhaW5lcixcbiAgTXVsdGlWYWx1ZUxhYmVsOiBNdWx0aVZhbHVlTGFiZWwsXG4gIE11bHRpVmFsdWVSZW1vdmU6IE11bHRpVmFsdWVSZW1vdmUsXG4gIE9wdGlvbjogT3B0aW9uJDEsXG4gIFBsYWNlaG9sZGVyOiBQbGFjZWhvbGRlciQxLFxuICBTZWxlY3RDb250YWluZXI6IFNlbGVjdENvbnRhaW5lcixcbiAgU2luZ2xlVmFsdWU6IFNpbmdsZVZhbHVlJDEsXG4gIFZhbHVlQ29udGFpbmVyOiBWYWx1ZUNvbnRhaW5lclxufTtcbnZhciBkZWZhdWx0Q29tcG9uZW50cyA9IGZ1bmN0aW9uIGRlZmF1bHRDb21wb25lbnRzKHByb3BzKSB7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbXBvbmVudHMpLCBwcm9wcy5jb21wb25lbnRzKTtcbn07XG5cbmV4cG9ydCB7IGlzTW9iaWxlRGV2aWNlIGFzIEEsIG11bHRpVmFsdWVBc1ZhbHVlIGFzIEIsIHNpbmdsZVZhbHVlQXNWYWx1ZSBhcyBDLCB2YWx1ZVRlcm5hcnkgYXMgRCwgY2xhc3NOYW1lcyBhcyBFLCBkZWZhdWx0Q29tcG9uZW50cyBhcyBGLCBpc0RvY3VtZW50RWxlbWVudCBhcyBHLCBjbGVhblZhbHVlIGFzIEgsIHNjcm9sbEludG9WaWV3IGFzIEksIG5vb3AgYXMgSiwgbm90TnVsbGlzaCBhcyBLLCBoYW5kbGVJbnB1dENoYW5nZSBhcyBMLCBNZW51UGxhY2VyIGFzIE0sIGNsZWFySW5kaWNhdG9yQ1NTIGFzIGEsIGNvbnRhaW5lckNTUyBhcyBiLCBjb21wb25lbnRzIGFzIGMsIGNzcyQxIGFzIGQsIGRyb3Bkb3duSW5kaWNhdG9yQ1NTIGFzIGUsIGdyb3VwSGVhZGluZ0NTUyBhcyBmLCBncm91cENTUyBhcyBnLCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgYXMgaCwgaW5kaWNhdG9yc0NvbnRhaW5lckNTUyBhcyBpLCBpbnB1dENTUyBhcyBqLCBsb2FkaW5nTWVzc2FnZUNTUyBhcyBrLCBsb2FkaW5nSW5kaWNhdG9yQ1NTIGFzIGwsIG1lbnVDU1MgYXMgbSwgbWVudUxpc3RDU1MgYXMgbiwgbWVudVBvcnRhbENTUyBhcyBvLCBtdWx0aVZhbHVlQ1NTIGFzIHAsIG11bHRpVmFsdWVMYWJlbENTUyBhcyBxLCByZW1vdmVQcm9wcyBhcyByLCBzdXBwb3J0c1Bhc3NpdmVFdmVudHMgYXMgcywgbXVsdGlWYWx1ZVJlbW92ZUNTUyBhcyB0LCBub09wdGlvbnNNZXNzYWdlQ1NTIGFzIHUsIG9wdGlvbkNTUyBhcyB2LCBwbGFjZWhvbGRlckNTUyBhcyB3LCBjc3MgYXMgeCwgdmFsdWVDb250YWluZXJDU1MgYXMgeSwgaXNUb3VjaENhcGFibGUgYXMgeiB9O1xuIiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDInO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzJztcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMnO1xuaW1wb3J0IF9jcmVhdGVTdXBlciBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVTdXBlcic7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lbW8sIEZyYWdtZW50LCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHIgYXMgcmVtb3ZlUHJvcHMsIHMgYXMgc3VwcG9ydHNQYXNzaXZlRXZlbnRzLCBhIGFzIGNsZWFySW5kaWNhdG9yQ1NTLCBiIGFzIGNvbnRhaW5lckNTUywgZCBhcyBjc3MkMSwgZSBhcyBkcm9wZG93bkluZGljYXRvckNTUywgZyBhcyBncm91cENTUywgZiBhcyBncm91cEhlYWRpbmdDU1MsIGkgYXMgaW5kaWNhdG9yc0NvbnRhaW5lckNTUywgaCBhcyBpbmRpY2F0b3JTZXBhcmF0b3JDU1MsIGogYXMgaW5wdXRDU1MsIGwgYXMgbG9hZGluZ0luZGljYXRvckNTUywgayBhcyBsb2FkaW5nTWVzc2FnZUNTUywgbSBhcyBtZW51Q1NTLCBuIGFzIG1lbnVMaXN0Q1NTLCBvIGFzIG1lbnVQb3J0YWxDU1MsIHAgYXMgbXVsdGlWYWx1ZUNTUywgcSBhcyBtdWx0aVZhbHVlTGFiZWxDU1MsIHQgYXMgbXVsdGlWYWx1ZVJlbW92ZUNTUywgdSBhcyBub09wdGlvbnNNZXNzYWdlQ1NTLCB2IGFzIG9wdGlvbkNTUywgdyBhcyBwbGFjZWhvbGRlckNTUywgeCBhcyBjc3MkMiwgeSBhcyB2YWx1ZUNvbnRhaW5lckNTUywgeiBhcyBpc1RvdWNoQ2FwYWJsZSwgQSBhcyBpc01vYmlsZURldmljZSwgQiBhcyBtdWx0aVZhbHVlQXNWYWx1ZSwgQyBhcyBzaW5nbGVWYWx1ZUFzVmFsdWUsIEQgYXMgdmFsdWVUZXJuYXJ5LCBFIGFzIGNsYXNzTmFtZXMsIEYgYXMgZGVmYXVsdENvbXBvbmVudHMsIEcgYXMgaXNEb2N1bWVudEVsZW1lbnQsIEggYXMgY2xlYW5WYWx1ZSwgSSBhcyBzY3JvbGxJbnRvVmlldywgSiBhcyBub29wLCBNIGFzIE1lbnVQbGFjZXIsIEsgYXMgbm90TnVsbGlzaCB9IGZyb20gJy4vaW5kZXgtYTMwMWY1MjYuZXNtLmpzJztcbmltcG9ydCB7IGpzeCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDIoKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vLyBBc3Npc3RpdmUgdGV4dCB0byBkZXNjcmliZSB2aXN1YWwgZWxlbWVudHMuIEhpZGRlbiBmb3Igc2lnaHRlZCB1c2Vycy5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjdwZzBjai1hMTF5VGV4dFwiLFxuICBzdHlsZXM6IFwibGFiZWw6YTExeVRleHQ7ei1pbmRleDo5OTk5O2JvcmRlcjowO2NsaXA6cmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO2hlaWdodDoxcHg7d2lkdGg6MXB4O3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm93cmFwXCJcbn0gOiB7XG4gIG5hbWU6IFwiMWY0M2F2ei1hMTF5VGV4dC1BMTF5VGV4dFwiLFxuICBzdHlsZXM6IFwibGFiZWw6YTExeVRleHQ7ei1pbmRleDo5OTk5O2JvcmRlcjowO2NsaXA6cmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO2hlaWdodDoxcHg7d2lkdGg6MXB4O3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm93cmFwO2xhYmVsOkExMXlUZXh0O1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtFeE1YbFVaWGgwTG5SemVDSmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRk5TU0lzSW1acGJHVWlPaUpCTVRGNVZHVjRkQzUwYzNnaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaW9nUUdwemVDQnFjM2dnS2k5Y2JtbHRjRzl5ZENCN0lHcHplQ0I5SUdaeWIyMGdKMEJsYlc5MGFXOXVMM0psWVdOMEp6dGNibHh1THk4Z1FYTnphWE4wYVhabElIUmxlSFFnZEc4Z1pHVnpZM0pwWW1VZ2RtbHpkV0ZzSUdWc1pXMWxiblJ6TGlCSWFXUmtaVzRnWm05eUlITnBaMmgwWldRZ2RYTmxjbk11WEc1amIyNXpkQ0JCTVRGNVZHVjRkQ0E5SUNod2NtOXdjem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZHpjR0Z1SjEwcElEMCtJQ2hjYmlBZ1BITndZVzVjYmlBZ0lDQmpjM005ZTN0Y2JpQWdJQ0FnSUd4aFltVnNPaUFuWVRFeGVWUmxlSFFuTEZ4dUlDQWdJQ0FnZWtsdVpHVjRPaUE1T1RrNUxGeHVJQ0FnSUNBZ1ltOXlaR1Z5T2lBd0xGeHVJQ0FnSUNBZ1kyeHBjRG9nSjNKbFkzUW9NWEI0TENBeGNIZ3NJREZ3ZUN3Z01YQjRLU2NzWEc0Z0lDQWdJQ0JvWldsbmFIUTZJREVzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dNU3hjYmlBZ0lDQWdJSEJ2YzJsMGFXOXVPaUFuWVdKemIyeDFkR1VuTEZ4dUlDQWdJQ0FnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQWdJQ0FnY0dGa1pHbHVaem9nTUN4Y2JpQWdJQ0FnSUhkb2FYUmxVM0JoWTJVNklDZHViM2R5WVhBbkxGeHVJQ0FnSUgxOVhHNGdJQ0FnZXk0dUxuQnliM0J6ZlZ4dUlDQXZQbHh1S1R0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1FURXhlVlJsZUhRN1hHNGlYWDA9ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQyXG59O1xudmFyIEExMXlUZXh0ID0gZnVuY3Rpb24gQTExeVRleHQocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNzczogX3JlZlxuICB9LCBwcm9wcykpO1xufTtcbnZhciBBMTF5VGV4dCQxID0gQTExeVRleHQ7XG5cbnZhciBkZWZhdWx0QXJpYUxpdmVNZXNzYWdlcyA9IHtcbiAgZ3VpZGFuY2U6IGZ1bmN0aW9uIGd1aWRhbmNlKHByb3BzKSB7XG4gICAgdmFyIGlzU2VhcmNoYWJsZSA9IHByb3BzLmlzU2VhcmNoYWJsZSxcbiAgICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpLFxuICAgICAgdGFiU2VsZWN0c1ZhbHVlID0gcHJvcHMudGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgY29udGV4dCA9IHByb3BzLmNvbnRleHQsXG4gICAgICBpc0luaXRpYWxGb2N1cyA9IHByb3BzLmlzSW5pdGlhbEZvY3VzO1xuICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgY2FzZSAnbWVudSc6XG4gICAgICAgIHJldHVybiBcIlVzZSBVcCBhbmQgRG93biB0byBjaG9vc2Ugb3B0aW9ucywgcHJlc3MgRW50ZXIgdG8gc2VsZWN0IHRoZSBjdXJyZW50bHkgZm9jdXNlZCBvcHRpb24sIHByZXNzIEVzY2FwZSB0byBleGl0IHRoZSBtZW51XCIuY29uY2F0KHRhYlNlbGVjdHNWYWx1ZSA/ICcsIHByZXNzIFRhYiB0byBzZWxlY3QgdGhlIG9wdGlvbiBhbmQgZXhpdCB0aGUgbWVudScgOiAnJywgXCIuXCIpO1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICByZXR1cm4gaXNJbml0aWFsRm9jdXMgPyBcIlwiLmNvbmNhdChwcm9wc1snYXJpYS1sYWJlbCddIHx8ICdTZWxlY3QnLCBcIiBpcyBmb2N1c2VkIFwiKS5jb25jYXQoaXNTZWFyY2hhYmxlID8gJyx0eXBlIHRvIHJlZmluZSBsaXN0JyA6ICcnLCBcIiwgcHJlc3MgRG93biB0byBvcGVuIHRoZSBtZW51LCBcIikuY29uY2F0KGlzTXVsdGkgPyAnIHByZXNzIGxlZnQgdG8gZm9jdXMgc2VsZWN0ZWQgdmFsdWVzJyA6ICcnKSA6ICcnO1xuICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICByZXR1cm4gJ1VzZSBsZWZ0IGFuZCByaWdodCB0byB0b2dnbGUgYmV0d2VlbiBmb2N1c2VkIHZhbHVlcywgcHJlc3MgQmFja3NwYWNlIHRvIHJlbW92ZSB0aGUgY3VycmVudGx5IGZvY3VzZWQgdmFsdWUnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSxcbiAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByb3BzKSB7XG4gICAgdmFyIGFjdGlvbiA9IHByb3BzLmFjdGlvbixcbiAgICAgIF9wcm9wcyRsYWJlbCA9IHByb3BzLmxhYmVsLFxuICAgICAgbGFiZWwgPSBfcHJvcHMkbGFiZWwgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGxhYmVsLFxuICAgICAgbGFiZWxzID0gcHJvcHMubGFiZWxzLFxuICAgICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQ7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2Rlc2VsZWN0LW9wdGlvbic6XG4gICAgICBjYXNlICdwb3AtdmFsdWUnOlxuICAgICAgY2FzZSAncmVtb3ZlLXZhbHVlJzpcbiAgICAgICAgcmV0dXJuIFwib3B0aW9uIFwiLmNvbmNhdChsYWJlbCwgXCIsIGRlc2VsZWN0ZWQuXCIpO1xuICAgICAgY2FzZSAnY2xlYXInOlxuICAgICAgICByZXR1cm4gJ0FsbCBzZWxlY3RlZCBvcHRpb25zIGhhdmUgYmVlbiBjbGVhcmVkLic7XG4gICAgICBjYXNlICdpbml0aWFsLWlucHV0LWZvY3VzJzpcbiAgICAgICAgcmV0dXJuIFwib3B0aW9uXCIuY29uY2F0KGxhYmVscy5sZW5ndGggPiAxID8gJ3MnIDogJycsIFwiIFwiKS5jb25jYXQobGFiZWxzLmpvaW4oJywnKSwgXCIsIHNlbGVjdGVkLlwiKTtcbiAgICAgIGNhc2UgJ3NlbGVjdC1vcHRpb24nOlxuICAgICAgICByZXR1cm4gaXNEaXNhYmxlZCA/IFwib3B0aW9uIFwiLmNvbmNhdChsYWJlbCwgXCIgaXMgZGlzYWJsZWQuIFNlbGVjdCBhbm90aGVyIG9wdGlvbi5cIikgOiBcIm9wdGlvbiBcIi5jb25jYXQobGFiZWwsIFwiLCBzZWxlY3RlZC5cIik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9LFxuICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKHByb3BzKSB7XG4gICAgdmFyIGNvbnRleHQgPSBwcm9wcy5jb250ZXh0LFxuICAgICAgZm9jdXNlZCA9IHByb3BzLmZvY3VzZWQsXG4gICAgICBvcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgIF9wcm9wcyRsYWJlbDIgPSBwcm9wcy5sYWJlbCxcbiAgICAgIGxhYmVsID0gX3Byb3BzJGxhYmVsMiA9PT0gdm9pZCAwID8gJycgOiBfcHJvcHMkbGFiZWwyLFxuICAgICAgc2VsZWN0VmFsdWUgPSBwcm9wcy5zZWxlY3RWYWx1ZSxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgICBpc0FwcGxlRGV2aWNlID0gcHJvcHMuaXNBcHBsZURldmljZTtcbiAgICB2YXIgZ2V0QXJyYXlJbmRleCA9IGZ1bmN0aW9uIGdldEFycmF5SW5kZXgoYXJyLCBpdGVtKSB7XG4gICAgICByZXR1cm4gYXJyICYmIGFyci5sZW5ndGggPyBcIlwiLmNvbmNhdChhcnIuaW5kZXhPZihpdGVtKSArIDEsIFwiIG9mIFwiKS5jb25jYXQoYXJyLmxlbmd0aCkgOiAnJztcbiAgICB9O1xuICAgIGlmIChjb250ZXh0ID09PSAndmFsdWUnICYmIHNlbGVjdFZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJ2YWx1ZSBcIi5jb25jYXQobGFiZWwsIFwiIGZvY3VzZWQsIFwiKS5jb25jYXQoZ2V0QXJyYXlJbmRleChzZWxlY3RWYWx1ZSwgZm9jdXNlZCksIFwiLlwiKTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQgPT09ICdtZW51JyAmJiBpc0FwcGxlRGV2aWNlKSB7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBpc0Rpc2FibGVkID8gJyBkaXNhYmxlZCcgOiAnJztcbiAgICAgIHZhciBzdGF0dXMgPSBcIlwiLmNvbmNhdChpc1NlbGVjdGVkID8gJyBzZWxlY3RlZCcgOiAnJykuY29uY2F0KGRpc2FibGVkKTtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChsYWJlbCkuY29uY2F0KHN0YXR1cywgXCIsIFwiKS5jb25jYXQoZ2V0QXJyYXlJbmRleChvcHRpb25zLCBmb2N1c2VkKSwgXCIuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0sXG4gIG9uRmlsdGVyOiBmdW5jdGlvbiBvbkZpbHRlcihwcm9wcykge1xuICAgIHZhciBpbnB1dFZhbHVlID0gcHJvcHMuaW5wdXRWYWx1ZSxcbiAgICAgIHJlc3VsdHNNZXNzYWdlID0gcHJvcHMucmVzdWx0c01lc3NhZ2U7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdHNNZXNzYWdlKS5jb25jYXQoaW5wdXRWYWx1ZSA/ICcgZm9yIHNlYXJjaCB0ZXJtICcgKyBpbnB1dFZhbHVlIDogJycsIFwiLlwiKTtcbiAgfVxufTtcblxudmFyIExpdmVSZWdpb24gPSBmdW5jdGlvbiBMaXZlUmVnaW9uKHByb3BzKSB7XG4gIHZhciBhcmlhU2VsZWN0aW9uID0gcHJvcHMuYXJpYVNlbGVjdGlvbixcbiAgICBmb2N1c2VkT3B0aW9uID0gcHJvcHMuZm9jdXNlZE9wdGlvbixcbiAgICBmb2N1c2VkVmFsdWUgPSBwcm9wcy5mb2N1c2VkVmFsdWUsXG4gICAgZm9jdXNhYmxlT3B0aW9ucyA9IHByb3BzLmZvY3VzYWJsZU9wdGlvbnMsXG4gICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgIHNlbGVjdFZhbHVlID0gcHJvcHMuc2VsZWN0VmFsdWUsXG4gICAgc2VsZWN0UHJvcHMgPSBwcm9wcy5zZWxlY3RQcm9wcyxcbiAgICBpZCA9IHByb3BzLmlkLFxuICAgIGlzQXBwbGVEZXZpY2UgPSBwcm9wcy5pc0FwcGxlRGV2aWNlO1xuICB2YXIgYXJpYUxpdmVNZXNzYWdlcyA9IHNlbGVjdFByb3BzLmFyaWFMaXZlTWVzc2FnZXMsXG4gICAgZ2V0T3B0aW9uTGFiZWwgPSBzZWxlY3RQcm9wcy5nZXRPcHRpb25MYWJlbCxcbiAgICBpbnB1dFZhbHVlID0gc2VsZWN0UHJvcHMuaW5wdXRWYWx1ZSxcbiAgICBpc011bHRpID0gc2VsZWN0UHJvcHMuaXNNdWx0aSxcbiAgICBpc09wdGlvbkRpc2FibGVkID0gc2VsZWN0UHJvcHMuaXNPcHRpb25EaXNhYmxlZCxcbiAgICBpc1NlYXJjaGFibGUgPSBzZWxlY3RQcm9wcy5pc1NlYXJjaGFibGUsXG4gICAgbWVudUlzT3BlbiA9IHNlbGVjdFByb3BzLm1lbnVJc09wZW4sXG4gICAgb3B0aW9ucyA9IHNlbGVjdFByb3BzLm9wdGlvbnMsXG4gICAgc2NyZWVuUmVhZGVyU3RhdHVzID0gc2VsZWN0UHJvcHMuc2NyZWVuUmVhZGVyU3RhdHVzLFxuICAgIHRhYlNlbGVjdHNWYWx1ZSA9IHNlbGVjdFByb3BzLnRhYlNlbGVjdHNWYWx1ZSxcbiAgICBpc0xvYWRpbmcgPSBzZWxlY3RQcm9wcy5pc0xvYWRpbmc7XG4gIHZhciBhcmlhTGFiZWwgPSBzZWxlY3RQcm9wc1snYXJpYS1sYWJlbCddO1xuICB2YXIgYXJpYUxpdmUgPSBzZWxlY3RQcm9wc1snYXJpYS1saXZlJ107XG5cbiAgLy8gVXBkYXRlIGFyaWEgbGl2ZSBtZXNzYWdlIGNvbmZpZ3VyYXRpb24gd2hlbiBwcm9wIGNoYW5nZXNcbiAgdmFyIG1lc3NhZ2VzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGVmYXVsdEFyaWFMaXZlTWVzc2FnZXMpLCBhcmlhTGl2ZU1lc3NhZ2VzIHx8IHt9KTtcbiAgfSwgW2FyaWFMaXZlTWVzc2FnZXNdKTtcblxuICAvLyBVcGRhdGUgYXJpYSBsaXZlIHNlbGVjdGVkIG9wdGlvbiB3aGVuIHByb3AgY2hhbmdlc1xuICB2YXIgYXJpYVNlbGVjdGVkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnJztcbiAgICBpZiAoYXJpYVNlbGVjdGlvbiAmJiBtZXNzYWdlcy5vbkNoYW5nZSkge1xuICAgICAgdmFyIG9wdGlvbiA9IGFyaWFTZWxlY3Rpb24ub3B0aW9uLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBhcmlhU2VsZWN0aW9uLm9wdGlvbnMsXG4gICAgICAgIHJlbW92ZWRWYWx1ZSA9IGFyaWFTZWxlY3Rpb24ucmVtb3ZlZFZhbHVlLFxuICAgICAgICByZW1vdmVkVmFsdWVzID0gYXJpYVNlbGVjdGlvbi5yZW1vdmVkVmFsdWVzLFxuICAgICAgICB2YWx1ZSA9IGFyaWFTZWxlY3Rpb24udmFsdWU7XG4gICAgICAvLyBzZWxlY3Qtb3B0aW9uIHdoZW4gIWlzTXVsdGkgZG9lcyBub3QgcmV0dXJuIG9wdGlvbiBzbyB3ZSBhc3N1bWUgc2VsZWN0ZWQgb3B0aW9uIGlzIHZhbHVlXG4gICAgICB2YXIgYXNPcHRpb24gPSBmdW5jdGlvbiBhc09wdGlvbih2YWwpIHtcbiAgICAgICAgcmV0dXJuICFBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBvbmUgaXRlbSBmcm9tIHRoZSBhY3Rpb24gdGhlbiBnZXQgaXRzIGxhYmVsXG4gICAgICB2YXIgc2VsZWN0ZWQgPSByZW1vdmVkVmFsdWUgfHwgb3B0aW9uIHx8IGFzT3B0aW9uKHZhbHVlKTtcbiAgICAgIHZhciBsYWJlbCA9IHNlbGVjdGVkID8gZ2V0T3B0aW9uTGFiZWwoc2VsZWN0ZWQpIDogJyc7XG5cbiAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBpdGVtcyBmcm9tIHRoZSBhY3Rpb24gdGhlbiByZXR1cm4gYW4gYXJyYXkgb2YgbGFiZWxzXG4gICAgICB2YXIgbXVsdGlTZWxlY3RlZCA9IHNlbGVjdGVkT3B0aW9ucyB8fCByZW1vdmVkVmFsdWVzIHx8IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYWJlbHMgPSBtdWx0aVNlbGVjdGVkID8gbXVsdGlTZWxlY3RlZC5tYXAoZ2V0T3B0aW9uTGFiZWwpIDogW107XG4gICAgICB2YXIgb25DaGFuZ2VQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAvLyBtdWx0aVNlbGVjdGVkIGl0ZW1zIGFyZSB1c3VhbGx5IGl0ZW1zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gc2VsZWN0ZWRcbiAgICAgICAgLy8gb3Igc2V0IGJ5IHRoZSB1c2VyIGFzIGEgZGVmYXVsdCB2YWx1ZSBzbyB3ZSBhc3N1bWUgdGhleSBhcmUgbm90IGRpc2FibGVkXG4gICAgICAgIGlzRGlzYWJsZWQ6IHNlbGVjdGVkICYmIGlzT3B0aW9uRGlzYWJsZWQoc2VsZWN0ZWQsIHNlbGVjdFZhbHVlKSxcbiAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICBsYWJlbHM6IGxhYmVsc1xuICAgICAgfSwgYXJpYVNlbGVjdGlvbik7XG4gICAgICBtZXNzYWdlID0gbWVzc2FnZXMub25DaGFuZ2Uob25DaGFuZ2VQcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LCBbYXJpYVNlbGVjdGlvbiwgbWVzc2FnZXMsIGlzT3B0aW9uRGlzYWJsZWQsIHNlbGVjdFZhbHVlLCBnZXRPcHRpb25MYWJlbF0pO1xuICB2YXIgYXJpYUZvY3VzZWQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZm9jdXNNc2cgPSAnJztcbiAgICB2YXIgZm9jdXNlZCA9IGZvY3VzZWRPcHRpb24gfHwgZm9jdXNlZFZhbHVlO1xuICAgIHZhciBpc1NlbGVjdGVkID0gISEoZm9jdXNlZE9wdGlvbiAmJiBzZWxlY3RWYWx1ZSAmJiBzZWxlY3RWYWx1ZS5pbmNsdWRlcyhmb2N1c2VkT3B0aW9uKSk7XG4gICAgaWYgKGZvY3VzZWQgJiYgbWVzc2FnZXMub25Gb2N1cykge1xuICAgICAgdmFyIG9uRm9jdXNQcm9wcyA9IHtcbiAgICAgICAgZm9jdXNlZDogZm9jdXNlZCxcbiAgICAgICAgbGFiZWw6IGdldE9wdGlvbkxhYmVsKGZvY3VzZWQpLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc09wdGlvbkRpc2FibGVkKGZvY3VzZWQsIHNlbGVjdFZhbHVlKSxcbiAgICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICAgICAgb3B0aW9uczogZm9jdXNhYmxlT3B0aW9ucyxcbiAgICAgICAgY29udGV4dDogZm9jdXNlZCA9PT0gZm9jdXNlZE9wdGlvbiA/ICdtZW51JyA6ICd2YWx1ZScsXG4gICAgICAgIHNlbGVjdFZhbHVlOiBzZWxlY3RWYWx1ZSxcbiAgICAgICAgaXNBcHBsZURldmljZTogaXNBcHBsZURldmljZVxuICAgICAgfTtcbiAgICAgIGZvY3VzTXNnID0gbWVzc2FnZXMub25Gb2N1cyhvbkZvY3VzUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gZm9jdXNNc2c7XG4gIH0sIFtmb2N1c2VkT3B0aW9uLCBmb2N1c2VkVmFsdWUsIGdldE9wdGlvbkxhYmVsLCBpc09wdGlvbkRpc2FibGVkLCBtZXNzYWdlcywgZm9jdXNhYmxlT3B0aW9ucywgc2VsZWN0VmFsdWUsIGlzQXBwbGVEZXZpY2VdKTtcbiAgdmFyIGFyaWFSZXN1bHRzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdHNNc2cgPSAnJztcbiAgICBpZiAobWVudUlzT3BlbiAmJiBvcHRpb25zLmxlbmd0aCAmJiAhaXNMb2FkaW5nICYmIG1lc3NhZ2VzLm9uRmlsdGVyKSB7XG4gICAgICB2YXIgcmVzdWx0c01lc3NhZ2UgPSBzY3JlZW5SZWFkZXJTdGF0dXMoe1xuICAgICAgICBjb3VudDogZm9jdXNhYmxlT3B0aW9ucy5sZW5ndGhcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0c01zZyA9IG1lc3NhZ2VzLm9uRmlsdGVyKHtcbiAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgcmVzdWx0c01lc3NhZ2U6IHJlc3VsdHNNZXNzYWdlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNNc2c7XG4gIH0sIFtmb2N1c2FibGVPcHRpb25zLCBpbnB1dFZhbHVlLCBtZW51SXNPcGVuLCBtZXNzYWdlcywgb3B0aW9ucywgc2NyZWVuUmVhZGVyU3RhdHVzLCBpc0xvYWRpbmddKTtcbiAgdmFyIGlzSW5pdGlhbEZvY3VzID0gKGFyaWFTZWxlY3Rpb24gPT09IG51bGwgfHwgYXJpYVNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJpYVNlbGVjdGlvbi5hY3Rpb24pID09PSAnaW5pdGlhbC1pbnB1dC1mb2N1cyc7XG4gIHZhciBhcmlhR3VpZGFuY2UgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ3VpZGFuY2VNc2cgPSAnJztcbiAgICBpZiAobWVzc2FnZXMuZ3VpZGFuY2UpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gZm9jdXNlZFZhbHVlID8gJ3ZhbHVlJyA6IG1lbnVJc09wZW4gPyAnbWVudScgOiAnaW5wdXQnO1xuICAgICAgZ3VpZGFuY2VNc2cgPSBtZXNzYWdlcy5ndWlkYW5jZSh7XG4gICAgICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICBpc0Rpc2FibGVkOiBmb2N1c2VkT3B0aW9uICYmIGlzT3B0aW9uRGlzYWJsZWQoZm9jdXNlZE9wdGlvbiwgc2VsZWN0VmFsdWUpLFxuICAgICAgICBpc011bHRpOiBpc011bHRpLFxuICAgICAgICBpc1NlYXJjaGFibGU6IGlzU2VhcmNoYWJsZSxcbiAgICAgICAgdGFiU2VsZWN0c1ZhbHVlOiB0YWJTZWxlY3RzVmFsdWUsXG4gICAgICAgIGlzSW5pdGlhbEZvY3VzOiBpc0luaXRpYWxGb2N1c1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBndWlkYW5jZU1zZztcbiAgfSwgW2FyaWFMYWJlbCwgZm9jdXNlZE9wdGlvbiwgZm9jdXNlZFZhbHVlLCBpc011bHRpLCBpc09wdGlvbkRpc2FibGVkLCBpc1NlYXJjaGFibGUsIG1lbnVJc09wZW4sIG1lc3NhZ2VzLCBzZWxlY3RWYWx1ZSwgdGFiU2VsZWN0c1ZhbHVlLCBpc0luaXRpYWxGb2N1c10pO1xuICB2YXIgU2NyZWVuUmVhZGVyVGV4dCA9IGpzeChGcmFnbWVudCwgbnVsbCwganN4KFwic3BhblwiLCB7XG4gICAgaWQ6IFwiYXJpYS1zZWxlY3Rpb25cIlxuICB9LCBhcmlhU2VsZWN0ZWQpLCBqc3goXCJzcGFuXCIsIHtcbiAgICBpZDogXCJhcmlhLWZvY3VzZWRcIlxuICB9LCBhcmlhRm9jdXNlZCksIGpzeChcInNwYW5cIiwge1xuICAgIGlkOiBcImFyaWEtcmVzdWx0c1wiXG4gIH0sIGFyaWFSZXN1bHRzKSwganN4KFwic3BhblwiLCB7XG4gICAgaWQ6IFwiYXJpYS1ndWlkYW5jZVwiXG4gIH0sIGFyaWFHdWlkYW5jZSkpO1xuICByZXR1cm4ganN4KEZyYWdtZW50LCBudWxsLCBqc3goQTExeVRleHQkMSwge1xuICAgIGlkOiBpZFxuICB9LCBpc0luaXRpYWxGb2N1cyAmJiBTY3JlZW5SZWFkZXJUZXh0KSwganN4KEExMXlUZXh0JDEsIHtcbiAgICBcImFyaWEtbGl2ZVwiOiBhcmlhTGl2ZSxcbiAgICBcImFyaWEtYXRvbWljXCI6IFwiZmFsc2VcIixcbiAgICBcImFyaWEtcmVsZXZhbnRcIjogXCJhZGRpdGlvbnMgdGV4dFwiLFxuICAgIHJvbGU6IFwibG9nXCJcbiAgfSwgaXNGb2N1c2VkICYmICFpc0luaXRpYWxGb2N1cyAmJiBTY3JlZW5SZWFkZXJUZXh0KSk7XG59O1xudmFyIExpdmVSZWdpb24kMSA9IExpdmVSZWdpb247XG5cbnZhciBkaWFjcml0aWNzID0gW3tcbiAgYmFzZTogJ0EnLFxuICBsZXR0ZXJzOiBcIkFcXHUyNEI2XFx1RkYyMVxceEMwXFx4QzFcXHhDMlxcdTFFQTZcXHUxRUE0XFx1MUVBQVxcdTFFQThcXHhDM1xcdTAxMDBcXHUwMTAyXFx1MUVCMFxcdTFFQUVcXHUxRUI0XFx1MUVCMlxcdTAyMjZcXHUwMUUwXFx4QzRcXHUwMURFXFx1MUVBMlxceEM1XFx1MDFGQVxcdTAxQ0RcXHUwMjAwXFx1MDIwMlxcdTFFQTBcXHUxRUFDXFx1MUVCNlxcdTFFMDBcXHUwMTA0XFx1MDIzQVxcdTJDNkZcIlxufSwge1xuICBiYXNlOiAnQUEnLFxuICBsZXR0ZXJzOiBcIlxcdUE3MzJcIlxufSwge1xuICBiYXNlOiAnQUUnLFxuICBsZXR0ZXJzOiBcIlxceEM2XFx1MDFGQ1xcdTAxRTJcIlxufSwge1xuICBiYXNlOiAnQU8nLFxuICBsZXR0ZXJzOiBcIlxcdUE3MzRcIlxufSwge1xuICBiYXNlOiAnQVUnLFxuICBsZXR0ZXJzOiBcIlxcdUE3MzZcIlxufSwge1xuICBiYXNlOiAnQVYnLFxuICBsZXR0ZXJzOiBcIlxcdUE3MzhcXHVBNzNBXCJcbn0sIHtcbiAgYmFzZTogJ0FZJyxcbiAgbGV0dGVyczogXCJcXHVBNzNDXCJcbn0sIHtcbiAgYmFzZTogJ0InLFxuICBsZXR0ZXJzOiBcIkJcXHUyNEI3XFx1RkYyMlxcdTFFMDJcXHUxRTA0XFx1MUUwNlxcdTAyNDNcXHUwMTgyXFx1MDE4MVwiXG59LCB7XG4gIGJhc2U6ICdDJyxcbiAgbGV0dGVyczogXCJDXFx1MjRCOFxcdUZGMjNcXHUwMTA2XFx1MDEwOFxcdTAxMEFcXHUwMTBDXFx4QzdcXHUxRTA4XFx1MDE4N1xcdTAyM0JcXHVBNzNFXCJcbn0sIHtcbiAgYmFzZTogJ0QnLFxuICBsZXR0ZXJzOiBcIkRcXHUyNEI5XFx1RkYyNFxcdTFFMEFcXHUwMTBFXFx1MUUwQ1xcdTFFMTBcXHUxRTEyXFx1MUUwRVxcdTAxMTBcXHUwMThCXFx1MDE4QVxcdTAxODlcXHVBNzc5XCJcbn0sIHtcbiAgYmFzZTogJ0RaJyxcbiAgbGV0dGVyczogXCJcXHUwMUYxXFx1MDFDNFwiXG59LCB7XG4gIGJhc2U6ICdEeicsXG4gIGxldHRlcnM6IFwiXFx1MDFGMlxcdTAxQzVcIlxufSwge1xuICBiYXNlOiAnRScsXG4gIGxldHRlcnM6IFwiRVxcdTI0QkFcXHVGRjI1XFx4QzhcXHhDOVxceENBXFx1MUVDMFxcdTFFQkVcXHUxRUM0XFx1MUVDMlxcdTFFQkNcXHUwMTEyXFx1MUUxNFxcdTFFMTZcXHUwMTE0XFx1MDExNlxceENCXFx1MUVCQVxcdTAxMUFcXHUwMjA0XFx1MDIwNlxcdTFFQjhcXHUxRUM2XFx1MDIyOFxcdTFFMUNcXHUwMTE4XFx1MUUxOFxcdTFFMUFcXHUwMTkwXFx1MDE4RVwiXG59LCB7XG4gIGJhc2U6ICdGJyxcbiAgbGV0dGVyczogXCJGXFx1MjRCQlxcdUZGMjZcXHUxRTFFXFx1MDE5MVxcdUE3N0JcIlxufSwge1xuICBiYXNlOiAnRycsXG4gIGxldHRlcnM6IFwiR1xcdTI0QkNcXHVGRjI3XFx1MDFGNFxcdTAxMUNcXHUxRTIwXFx1MDExRVxcdTAxMjBcXHUwMUU2XFx1MDEyMlxcdTAxRTRcXHUwMTkzXFx1QTdBMFxcdUE3N0RcXHVBNzdFXCJcbn0sIHtcbiAgYmFzZTogJ0gnLFxuICBsZXR0ZXJzOiBcIkhcXHUyNEJEXFx1RkYyOFxcdTAxMjRcXHUxRTIyXFx1MUUyNlxcdTAyMUVcXHUxRTI0XFx1MUUyOFxcdTFFMkFcXHUwMTI2XFx1MkM2N1xcdTJDNzVcXHVBNzhEXCJcbn0sIHtcbiAgYmFzZTogJ0knLFxuICBsZXR0ZXJzOiBcIklcXHUyNEJFXFx1RkYyOVxceENDXFx4Q0RcXHhDRVxcdTAxMjhcXHUwMTJBXFx1MDEyQ1xcdTAxMzBcXHhDRlxcdTFFMkVcXHUxRUM4XFx1MDFDRlxcdTAyMDhcXHUwMjBBXFx1MUVDQVxcdTAxMkVcXHUxRTJDXFx1MDE5N1wiXG59LCB7XG4gIGJhc2U6ICdKJyxcbiAgbGV0dGVyczogXCJKXFx1MjRCRlxcdUZGMkFcXHUwMTM0XFx1MDI0OFwiXG59LCB7XG4gIGJhc2U6ICdLJyxcbiAgbGV0dGVyczogXCJLXFx1MjRDMFxcdUZGMkJcXHUxRTMwXFx1MDFFOFxcdTFFMzJcXHUwMTM2XFx1MUUzNFxcdTAxOThcXHUyQzY5XFx1QTc0MFxcdUE3NDJcXHVBNzQ0XFx1QTdBMlwiXG59LCB7XG4gIGJhc2U6ICdMJyxcbiAgbGV0dGVyczogXCJMXFx1MjRDMVxcdUZGMkNcXHUwMTNGXFx1MDEzOVxcdTAxM0RcXHUxRTM2XFx1MUUzOFxcdTAxM0JcXHUxRTNDXFx1MUUzQVxcdTAxNDFcXHUwMjNEXFx1MkM2MlxcdTJDNjBcXHVBNzQ4XFx1QTc0NlxcdUE3ODBcIlxufSwge1xuICBiYXNlOiAnTEonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQzdcIlxufSwge1xuICBiYXNlOiAnTGonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQzhcIlxufSwge1xuICBiYXNlOiAnTScsXG4gIGxldHRlcnM6IFwiTVxcdTI0QzJcXHVGRjJEXFx1MUUzRVxcdTFFNDBcXHUxRTQyXFx1MkM2RVxcdTAxOUNcIlxufSwge1xuICBiYXNlOiAnTicsXG4gIGxldHRlcnM6IFwiTlxcdTI0QzNcXHVGRjJFXFx1MDFGOFxcdTAxNDNcXHhEMVxcdTFFNDRcXHUwMTQ3XFx1MUU0NlxcdTAxNDVcXHUxRTRBXFx1MUU0OFxcdTAyMjBcXHUwMTlEXFx1QTc5MFxcdUE3QTRcIlxufSwge1xuICBiYXNlOiAnTkonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQ0FcIlxufSwge1xuICBiYXNlOiAnTmonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQ0JcIlxufSwge1xuICBiYXNlOiAnTycsXG4gIGxldHRlcnM6IFwiT1xcdTI0QzRcXHVGRjJGXFx4RDJcXHhEM1xceEQ0XFx1MUVEMlxcdTFFRDBcXHUxRUQ2XFx1MUVENFxceEQ1XFx1MUU0Q1xcdTAyMkNcXHUxRTRFXFx1MDE0Q1xcdTFFNTBcXHUxRTUyXFx1MDE0RVxcdTAyMkVcXHUwMjMwXFx4RDZcXHUwMjJBXFx1MUVDRVxcdTAxNTBcXHUwMUQxXFx1MDIwQ1xcdTAyMEVcXHUwMUEwXFx1MUVEQ1xcdTFFREFcXHUxRUUwXFx1MUVERVxcdTFFRTJcXHUxRUNDXFx1MUVEOFxcdTAxRUFcXHUwMUVDXFx4RDhcXHUwMUZFXFx1MDE4NlxcdTAxOUZcXHVBNzRBXFx1QTc0Q1wiXG59LCB7XG4gIGJhc2U6ICdPSScsXG4gIGxldHRlcnM6IFwiXFx1MDFBMlwiXG59LCB7XG4gIGJhc2U6ICdPTycsXG4gIGxldHRlcnM6IFwiXFx1QTc0RVwiXG59LCB7XG4gIGJhc2U6ICdPVScsXG4gIGxldHRlcnM6IFwiXFx1MDIyMlwiXG59LCB7XG4gIGJhc2U6ICdQJyxcbiAgbGV0dGVyczogXCJQXFx1MjRDNVxcdUZGMzBcXHUxRTU0XFx1MUU1NlxcdTAxQTRcXHUyQzYzXFx1QTc1MFxcdUE3NTJcXHVBNzU0XCJcbn0sIHtcbiAgYmFzZTogJ1EnLFxuICBsZXR0ZXJzOiBcIlFcXHUyNEM2XFx1RkYzMVxcdUE3NTZcXHVBNzU4XFx1MDI0QVwiXG59LCB7XG4gIGJhc2U6ICdSJyxcbiAgbGV0dGVyczogXCJSXFx1MjRDN1xcdUZGMzJcXHUwMTU0XFx1MUU1OFxcdTAxNThcXHUwMjEwXFx1MDIxMlxcdTFFNUFcXHUxRTVDXFx1MDE1NlxcdTFFNUVcXHUwMjRDXFx1MkM2NFxcdUE3NUFcXHVBN0E2XFx1QTc4MlwiXG59LCB7XG4gIGJhc2U6ICdTJyxcbiAgbGV0dGVyczogXCJTXFx1MjRDOFxcdUZGMzNcXHUxRTlFXFx1MDE1QVxcdTFFNjRcXHUwMTVDXFx1MUU2MFxcdTAxNjBcXHUxRTY2XFx1MUU2MlxcdTFFNjhcXHUwMjE4XFx1MDE1RVxcdTJDN0VcXHVBN0E4XFx1QTc4NFwiXG59LCB7XG4gIGJhc2U6ICdUJyxcbiAgbGV0dGVyczogXCJUXFx1MjRDOVxcdUZGMzRcXHUxRTZBXFx1MDE2NFxcdTFFNkNcXHUwMjFBXFx1MDE2MlxcdTFFNzBcXHUxRTZFXFx1MDE2NlxcdTAxQUNcXHUwMUFFXFx1MDIzRVxcdUE3ODZcIlxufSwge1xuICBiYXNlOiAnVFonLFxuICBsZXR0ZXJzOiBcIlxcdUE3MjhcIlxufSwge1xuICBiYXNlOiAnVScsXG4gIGxldHRlcnM6IFwiVVxcdTI0Q0FcXHVGRjM1XFx4RDlcXHhEQVxceERCXFx1MDE2OFxcdTFFNzhcXHUwMTZBXFx1MUU3QVxcdTAxNkNcXHhEQ1xcdTAxREJcXHUwMUQ3XFx1MDFENVxcdTAxRDlcXHUxRUU2XFx1MDE2RVxcdTAxNzBcXHUwMUQzXFx1MDIxNFxcdTAyMTZcXHUwMUFGXFx1MUVFQVxcdTFFRThcXHUxRUVFXFx1MUVFQ1xcdTFFRjBcXHUxRUU0XFx1MUU3MlxcdTAxNzJcXHUxRTc2XFx1MUU3NFxcdTAyNDRcIlxufSwge1xuICBiYXNlOiAnVicsXG4gIGxldHRlcnM6IFwiVlxcdTI0Q0JcXHVGRjM2XFx1MUU3Q1xcdTFFN0VcXHUwMUIyXFx1QTc1RVxcdTAyNDVcIlxufSwge1xuICBiYXNlOiAnVlknLFxuICBsZXR0ZXJzOiBcIlxcdUE3NjBcIlxufSwge1xuICBiYXNlOiAnVycsXG4gIGxldHRlcnM6IFwiV1xcdTI0Q0NcXHVGRjM3XFx1MUU4MFxcdTFFODJcXHUwMTc0XFx1MUU4NlxcdTFFODRcXHUxRTg4XFx1MkM3MlwiXG59LCB7XG4gIGJhc2U6ICdYJyxcbiAgbGV0dGVyczogXCJYXFx1MjRDRFxcdUZGMzhcXHUxRThBXFx1MUU4Q1wiXG59LCB7XG4gIGJhc2U6ICdZJyxcbiAgbGV0dGVyczogXCJZXFx1MjRDRVxcdUZGMzlcXHUxRUYyXFx4RERcXHUwMTc2XFx1MUVGOFxcdTAyMzJcXHUxRThFXFx1MDE3OFxcdTFFRjZcXHUxRUY0XFx1MDFCM1xcdTAyNEVcXHUxRUZFXCJcbn0sIHtcbiAgYmFzZTogJ1onLFxuICBsZXR0ZXJzOiBcIlpcXHUyNENGXFx1RkYzQVxcdTAxNzlcXHUxRTkwXFx1MDE3QlxcdTAxN0RcXHUxRTkyXFx1MUU5NFxcdTAxQjVcXHUwMjI0XFx1MkM3RlxcdTJDNkJcXHVBNzYyXCJcbn0sIHtcbiAgYmFzZTogJ2EnLFxuICBsZXR0ZXJzOiBcImFcXHUyNEQwXFx1RkY0MVxcdTFFOUFcXHhFMFxceEUxXFx4RTJcXHUxRUE3XFx1MUVBNVxcdTFFQUJcXHUxRUE5XFx4RTNcXHUwMTAxXFx1MDEwM1xcdTFFQjFcXHUxRUFGXFx1MUVCNVxcdTFFQjNcXHUwMjI3XFx1MDFFMVxceEU0XFx1MDFERlxcdTFFQTNcXHhFNVxcdTAxRkJcXHUwMUNFXFx1MDIwMVxcdTAyMDNcXHUxRUExXFx1MUVBRFxcdTFFQjdcXHUxRTAxXFx1MDEwNVxcdTJDNjVcXHUwMjUwXCJcbn0sIHtcbiAgYmFzZTogJ2FhJyxcbiAgbGV0dGVyczogXCJcXHVBNzMzXCJcbn0sIHtcbiAgYmFzZTogJ2FlJyxcbiAgbGV0dGVyczogXCJcXHhFNlxcdTAxRkRcXHUwMUUzXCJcbn0sIHtcbiAgYmFzZTogJ2FvJyxcbiAgbGV0dGVyczogXCJcXHVBNzM1XCJcbn0sIHtcbiAgYmFzZTogJ2F1JyxcbiAgbGV0dGVyczogXCJcXHVBNzM3XCJcbn0sIHtcbiAgYmFzZTogJ2F2JyxcbiAgbGV0dGVyczogXCJcXHVBNzM5XFx1QTczQlwiXG59LCB7XG4gIGJhc2U6ICdheScsXG4gIGxldHRlcnM6IFwiXFx1QTczRFwiXG59LCB7XG4gIGJhc2U6ICdiJyxcbiAgbGV0dGVyczogXCJiXFx1MjREMVxcdUZGNDJcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUwMTgwXFx1MDE4M1xcdTAyNTNcIlxufSwge1xuICBiYXNlOiAnYycsXG4gIGxldHRlcnM6IFwiY1xcdTI0RDJcXHVGRjQzXFx1MDEwN1xcdTAxMDlcXHUwMTBCXFx1MDEwRFxceEU3XFx1MUUwOVxcdTAxODhcXHUwMjNDXFx1QTczRlxcdTIxODRcIlxufSwge1xuICBiYXNlOiAnZCcsXG4gIGxldHRlcnM6IFwiZFxcdTI0RDNcXHVGRjQ0XFx1MUUwQlxcdTAxMEZcXHUxRTBEXFx1MUUxMVxcdTFFMTNcXHUxRTBGXFx1MDExMVxcdTAxOENcXHUwMjU2XFx1MDI1N1xcdUE3N0FcIlxufSwge1xuICBiYXNlOiAnZHonLFxuICBsZXR0ZXJzOiBcIlxcdTAxRjNcXHUwMUM2XCJcbn0sIHtcbiAgYmFzZTogJ2UnLFxuICBsZXR0ZXJzOiBcImVcXHUyNEQ0XFx1RkY0NVxceEU4XFx4RTlcXHhFQVxcdTFFQzFcXHUxRUJGXFx1MUVDNVxcdTFFQzNcXHUxRUJEXFx1MDExM1xcdTFFMTVcXHUxRTE3XFx1MDExNVxcdTAxMTdcXHhFQlxcdTFFQkJcXHUwMTFCXFx1MDIwNVxcdTAyMDdcXHUxRUI5XFx1MUVDN1xcdTAyMjlcXHUxRTFEXFx1MDExOVxcdTFFMTlcXHUxRTFCXFx1MDI0N1xcdTAyNUJcXHUwMUREXCJcbn0sIHtcbiAgYmFzZTogJ2YnLFxuICBsZXR0ZXJzOiBcImZcXHUyNEQ1XFx1RkY0NlxcdTFFMUZcXHUwMTkyXFx1QTc3Q1wiXG59LCB7XG4gIGJhc2U6ICdnJyxcbiAgbGV0dGVyczogXCJnXFx1MjRENlxcdUZGNDdcXHUwMUY1XFx1MDExRFxcdTFFMjFcXHUwMTFGXFx1MDEyMVxcdTAxRTdcXHUwMTIzXFx1MDFFNVxcdTAyNjBcXHVBN0ExXFx1MUQ3OVxcdUE3N0ZcIlxufSwge1xuICBiYXNlOiAnaCcsXG4gIGxldHRlcnM6IFwiaFxcdTI0RDdcXHVGRjQ4XFx1MDEyNVxcdTFFMjNcXHUxRTI3XFx1MDIxRlxcdTFFMjVcXHUxRTI5XFx1MUUyQlxcdTFFOTZcXHUwMTI3XFx1MkM2OFxcdTJDNzZcXHUwMjY1XCJcbn0sIHtcbiAgYmFzZTogJ2h2JyxcbiAgbGV0dGVyczogXCJcXHUwMTk1XCJcbn0sIHtcbiAgYmFzZTogJ2knLFxuICBsZXR0ZXJzOiBcImlcXHUyNEQ4XFx1RkY0OVxceEVDXFx4RURcXHhFRVxcdTAxMjlcXHUwMTJCXFx1MDEyRFxceEVGXFx1MUUyRlxcdTFFQzlcXHUwMUQwXFx1MDIwOVxcdTAyMEJcXHUxRUNCXFx1MDEyRlxcdTFFMkRcXHUwMjY4XFx1MDEzMVwiXG59LCB7XG4gIGJhc2U6ICdqJyxcbiAgbGV0dGVyczogXCJqXFx1MjREOVxcdUZGNEFcXHUwMTM1XFx1MDFGMFxcdTAyNDlcIlxufSwge1xuICBiYXNlOiAnaycsXG4gIGxldHRlcnM6IFwia1xcdTI0REFcXHVGRjRCXFx1MUUzMVxcdTAxRTlcXHUxRTMzXFx1MDEzN1xcdTFFMzVcXHUwMTk5XFx1MkM2QVxcdUE3NDFcXHVBNzQzXFx1QTc0NVxcdUE3QTNcIlxufSwge1xuICBiYXNlOiAnbCcsXG4gIGxldHRlcnM6IFwibFxcdTI0REJcXHVGRjRDXFx1MDE0MFxcdTAxM0FcXHUwMTNFXFx1MUUzN1xcdTFFMzlcXHUwMTNDXFx1MUUzRFxcdTFFM0JcXHUwMTdGXFx1MDE0MlxcdTAxOUFcXHUwMjZCXFx1MkM2MVxcdUE3NDlcXHVBNzgxXFx1QTc0N1wiXG59LCB7XG4gIGJhc2U6ICdsaicsXG4gIGxldHRlcnM6IFwiXFx1MDFDOVwiXG59LCB7XG4gIGJhc2U6ICdtJyxcbiAgbGV0dGVyczogXCJtXFx1MjREQ1xcdUZGNERcXHUxRTNGXFx1MUU0MVxcdTFFNDNcXHUwMjcxXFx1MDI2RlwiXG59LCB7XG4gIGJhc2U6ICduJyxcbiAgbGV0dGVyczogXCJuXFx1MjRERFxcdUZGNEVcXHUwMUY5XFx1MDE0NFxceEYxXFx1MUU0NVxcdTAxNDhcXHUxRTQ3XFx1MDE0NlxcdTFFNEJcXHUxRTQ5XFx1MDE5RVxcdTAyNzJcXHUwMTQ5XFx1QTc5MVxcdUE3QTVcIlxufSwge1xuICBiYXNlOiAnbmonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQ0NcIlxufSwge1xuICBiYXNlOiAnbycsXG4gIGxldHRlcnM6IFwib1xcdTI0REVcXHVGRjRGXFx4RjJcXHhGM1xceEY0XFx1MUVEM1xcdTFFRDFcXHUxRUQ3XFx1MUVENVxceEY1XFx1MUU0RFxcdTAyMkRcXHUxRTRGXFx1MDE0RFxcdTFFNTFcXHUxRTUzXFx1MDE0RlxcdTAyMkZcXHUwMjMxXFx4RjZcXHUwMjJCXFx1MUVDRlxcdTAxNTFcXHUwMUQyXFx1MDIwRFxcdTAyMEZcXHUwMUExXFx1MUVERFxcdTFFREJcXHUxRUUxXFx1MUVERlxcdTFFRTNcXHUxRUNEXFx1MUVEOVxcdTAxRUJcXHUwMUVEXFx4RjhcXHUwMUZGXFx1MDI1NFxcdUE3NEJcXHVBNzREXFx1MDI3NVwiXG59LCB7XG4gIGJhc2U6ICdvaScsXG4gIGxldHRlcnM6IFwiXFx1MDFBM1wiXG59LCB7XG4gIGJhc2U6ICdvdScsXG4gIGxldHRlcnM6IFwiXFx1MDIyM1wiXG59LCB7XG4gIGJhc2U6ICdvbycsXG4gIGxldHRlcnM6IFwiXFx1QTc0RlwiXG59LCB7XG4gIGJhc2U6ICdwJyxcbiAgbGV0dGVyczogXCJwXFx1MjRERlxcdUZGNTBcXHUxRTU1XFx1MUU1N1xcdTAxQTVcXHUxRDdEXFx1QTc1MVxcdUE3NTNcXHVBNzU1XCJcbn0sIHtcbiAgYmFzZTogJ3EnLFxuICBsZXR0ZXJzOiBcInFcXHUyNEUwXFx1RkY1MVxcdTAyNEJcXHVBNzU3XFx1QTc1OVwiXG59LCB7XG4gIGJhc2U6ICdyJyxcbiAgbGV0dGVyczogXCJyXFx1MjRFMVxcdUZGNTJcXHUwMTU1XFx1MUU1OVxcdTAxNTlcXHUwMjExXFx1MDIxM1xcdTFFNUJcXHUxRTVEXFx1MDE1N1xcdTFFNUZcXHUwMjREXFx1MDI3RFxcdUE3NUJcXHVBN0E3XFx1QTc4M1wiXG59LCB7XG4gIGJhc2U6ICdzJyxcbiAgbGV0dGVyczogXCJzXFx1MjRFMlxcdUZGNTNcXHhERlxcdTAxNUJcXHUxRTY1XFx1MDE1RFxcdTFFNjFcXHUwMTYxXFx1MUU2N1xcdTFFNjNcXHUxRTY5XFx1MDIxOVxcdTAxNUZcXHUwMjNGXFx1QTdBOVxcdUE3ODVcXHUxRTlCXCJcbn0sIHtcbiAgYmFzZTogJ3QnLFxuICBsZXR0ZXJzOiBcInRcXHUyNEUzXFx1RkY1NFxcdTFFNkJcXHUxRTk3XFx1MDE2NVxcdTFFNkRcXHUwMjFCXFx1MDE2M1xcdTFFNzFcXHUxRTZGXFx1MDE2N1xcdTAxQURcXHUwMjg4XFx1MkM2NlxcdUE3ODdcIlxufSwge1xuICBiYXNlOiAndHonLFxuICBsZXR0ZXJzOiBcIlxcdUE3MjlcIlxufSwge1xuICBiYXNlOiAndScsXG4gIGxldHRlcnM6IFwidVxcdTI0RTRcXHVGRjU1XFx4RjlcXHhGQVxceEZCXFx1MDE2OVxcdTFFNzlcXHUwMTZCXFx1MUU3QlxcdTAxNkRcXHhGQ1xcdTAxRENcXHUwMUQ4XFx1MDFENlxcdTAxREFcXHUxRUU3XFx1MDE2RlxcdTAxNzFcXHUwMUQ0XFx1MDIxNVxcdTAyMTdcXHUwMUIwXFx1MUVFQlxcdTFFRTlcXHUxRUVGXFx1MUVFRFxcdTFFRjFcXHUxRUU1XFx1MUU3M1xcdTAxNzNcXHUxRTc3XFx1MUU3NVxcdTAyODlcIlxufSwge1xuICBiYXNlOiAndicsXG4gIGxldHRlcnM6IFwidlxcdTI0RTVcXHVGRjU2XFx1MUU3RFxcdTFFN0ZcXHUwMjhCXFx1QTc1RlxcdTAyOENcIlxufSwge1xuICBiYXNlOiAndnknLFxuICBsZXR0ZXJzOiBcIlxcdUE3NjFcIlxufSwge1xuICBiYXNlOiAndycsXG4gIGxldHRlcnM6IFwid1xcdTI0RTZcXHVGRjU3XFx1MUU4MVxcdTFFODNcXHUwMTc1XFx1MUU4N1xcdTFFODVcXHUxRTk4XFx1MUU4OVxcdTJDNzNcIlxufSwge1xuICBiYXNlOiAneCcsXG4gIGxldHRlcnM6IFwieFxcdTI0RTdcXHVGRjU4XFx1MUU4QlxcdTFFOERcIlxufSwge1xuICBiYXNlOiAneScsXG4gIGxldHRlcnM6IFwieVxcdTI0RThcXHVGRjU5XFx1MUVGM1xceEZEXFx1MDE3N1xcdTFFRjlcXHUwMjMzXFx1MUU4RlxceEZGXFx1MUVGN1xcdTFFOTlcXHUxRUY1XFx1MDFCNFxcdTAyNEZcXHUxRUZGXCJcbn0sIHtcbiAgYmFzZTogJ3onLFxuICBsZXR0ZXJzOiBcInpcXHUyNEU5XFx1RkY1QVxcdTAxN0FcXHUxRTkxXFx1MDE3Q1xcdTAxN0VcXHUxRTkzXFx1MUU5NVxcdTAxQjZcXHUwMjI1XFx1MDI0MFxcdTJDNkNcXHVBNzYzXCJcbn1dO1xudmFyIGFueURpYWNyaXRpYyA9IG5ldyBSZWdFeHAoJ1snICsgZGlhY3JpdGljcy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgcmV0dXJuIGQubGV0dGVycztcbn0pLmpvaW4oJycpICsgJ10nLCAnZycpO1xudmFyIGRpYWNyaXRpY1RvQmFzZSA9IHt9O1xuZm9yICh2YXIgaSA9IDA7IGkgPCBkaWFjcml0aWNzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBkaWFjcml0aWMgPSBkaWFjcml0aWNzW2ldO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGRpYWNyaXRpYy5sZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgZGlhY3JpdGljVG9CYXNlW2RpYWNyaXRpYy5sZXR0ZXJzW2pdXSA9IGRpYWNyaXRpYy5iYXNlO1xuICB9XG59XG52YXIgc3RyaXBEaWFjcml0aWNzID0gZnVuY3Rpb24gc3RyaXBEaWFjcml0aWNzKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoYW55RGlhY3JpdGljLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZGlhY3JpdGljVG9CYXNlW21hdGNoXTtcbiAgfSk7XG59O1xuXG52YXIgbWVtb2l6ZWRTdHJpcERpYWNyaXRpY3NGb3JJbnB1dCA9IG1lbW9pemVPbmUoc3RyaXBEaWFjcml0aWNzKTtcbnZhciB0cmltU3RyaW5nID0gZnVuY3Rpb24gdHJpbVN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59O1xudmFyIGRlZmF1bHRTdHJpbmdpZnkgPSBmdW5jdGlvbiBkZWZhdWx0U3RyaW5naWZ5KG9wdGlvbikge1xuICByZXR1cm4gXCJcIi5jb25jYXQob3B0aW9uLmxhYmVsLCBcIiBcIikuY29uY2F0KG9wdGlvbi52YWx1ZSk7XG59O1xudmFyIGNyZWF0ZUZpbHRlciA9IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcihjb25maWcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvcHRpb24sIHJhd0lucHV0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgaWYgKG9wdGlvbi5kYXRhLl9faXNOZXdfXykgcmV0dXJuIHRydWU7XG4gICAgdmFyIF9pZ25vcmVDYXNlJGlnbm9yZUFjYyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBpZ25vcmVDYXNlOiB0cnVlLFxuICAgICAgICBpZ25vcmVBY2NlbnRzOiB0cnVlLFxuICAgICAgICBzdHJpbmdpZnk6IGRlZmF1bHRTdHJpbmdpZnksXG4gICAgICAgIHRyaW06IHRydWUsXG4gICAgICAgIG1hdGNoRnJvbTogJ2FueSdcbiAgICAgIH0sIGNvbmZpZyksXG4gICAgICBpZ25vcmVDYXNlID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLmlnbm9yZUNhc2UsXG4gICAgICBpZ25vcmVBY2NlbnRzID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLmlnbm9yZUFjY2VudHMsXG4gICAgICBzdHJpbmdpZnkgPSBfaWdub3JlQ2FzZSRpZ25vcmVBY2Muc3RyaW5naWZ5LFxuICAgICAgdHJpbSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy50cmltLFxuICAgICAgbWF0Y2hGcm9tID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLm1hdGNoRnJvbTtcbiAgICB2YXIgaW5wdXQgPSB0cmltID8gdHJpbVN0cmluZyhyYXdJbnB1dCkgOiByYXdJbnB1dDtcbiAgICB2YXIgY2FuZGlkYXRlID0gdHJpbSA/IHRyaW1TdHJpbmcoc3RyaW5naWZ5KG9wdGlvbikpIDogc3RyaW5naWZ5KG9wdGlvbik7XG4gICAgaWYgKGlnbm9yZUNhc2UpIHtcbiAgICAgIGlucHV0ID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoaWdub3JlQWNjZW50cykge1xuICAgICAgaW5wdXQgPSBtZW1vaXplZFN0cmlwRGlhY3JpdGljc0ZvcklucHV0KGlucHV0KTtcbiAgICAgIGNhbmRpZGF0ZSA9IHN0cmlwRGlhY3JpdGljcyhjYW5kaWRhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hGcm9tID09PSAnc3RhcnQnID8gY2FuZGlkYXRlLnN1YnN0cigwLCBpbnB1dC5sZW5ndGgpID09PSBpbnB1dCA6IGNhbmRpZGF0ZS5pbmRleE9mKGlucHV0KSA+IC0xO1xuICB9O1xufTtcblxudmFyIF9leGNsdWRlZCA9IFtcImlubmVyUmVmXCJdO1xuZnVuY3Rpb24gRHVtbXlJbnB1dChfcmVmKSB7XG4gIHZhciBpbm5lclJlZiA9IF9yZWYuaW5uZXJSZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgLy8gUmVtb3ZlIGFuaW1hdGlvbiBwcm9wcyBub3QgbWVhbnQgZm9yIEhUTUwgZWxlbWVudHNcbiAgdmFyIGZpbHRlcmVkUHJvcHMgPSByZW1vdmVQcm9wcyhwcm9wcywgJ29uRXhpdGVkJywgJ2luJywgJ2VudGVyJywgJ2V4aXQnLCAnYXBwZWFyJyk7XG4gIHJldHVybiBqc3goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBmaWx0ZXJlZFByb3BzLCB7XG4gICAgY3NzOiAvKiNfX1BVUkVfXyovY3NzKHtcbiAgICAgIGxhYmVsOiAnZHVtbXlJbnB1dCcsXG4gICAgICAvLyBnZXQgcmlkIG9mIGFueSBkZWZhdWx0IHN0eWxlc1xuICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgIGJvcmRlcjogMCxcbiAgICAgIC8vIGltcG9ydGFudCEgdGhpcyBoaWRlcyB0aGUgZmxhc2hpbmcgY3Vyc29yXG4gICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGdyaWRBcmVhOiAnMSAvIDEgLyAyIC8gMycsXG4gICAgICBvdXRsaW5lOiAwLFxuICAgICAgcGFkZGluZzogMCxcbiAgICAgIC8vIGltcG9ydGFudCEgd2l0aG91dCBgd2lkdGhgIGJyb3dzZXJzIHdvbid0IGFsbG93IGZvY3VzXG4gICAgICB3aWR0aDogMSxcbiAgICAgIC8vIHJlbW92ZSBjdXJzb3Igb24gZGVza3RvcFxuICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIG1vYmlsZSB3aGlsc3QgbWFpbnRhaW5pbmcgXCJzY3JvbGwgaW50byB2aWV3XCIgYmVoYXZpb3VyXG4gICAgICBsZWZ0OiAtMTAwLFxuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoLjAxKSdcbiAgICB9LCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6RHVtbXlJbnB1dDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtSMWJXMTVTVzV3ZFhRdWRITjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRWGxDVFNJc0ltWnBiR1VpT2lKRWRXMXRlVWx1Y0hWMExuUnplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtpQkFhbk40SUdwemVDQXFMMXh1YVcxd2IzSjBJSHNnVW1WbUlIMGdabkp2YlNBbmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ2FuTjRJSDBnWm5KdmJTQW5RR1Z0YjNScGIyNHZjbVZoWTNRbk8xeHVhVzF3YjNKMElIc2djbVZ0YjNabFVISnZjSE1nZlNCbWNtOXRJQ2N1TGk5MWRHbHNjeWM3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdaMWJtTjBhVzl1SUVSMWJXMTVTVzV3ZFhRb2UxeHVJQ0JwYm01bGNsSmxaaXhjYmlBZ0xpNHVjSEp2Y0hOY2JuMDZJRXBUV0M1SmJuUnlhVzV6YVdORmJHVnRaVzUwYzFzbmFXNXdkWFFuWFNBbUlIdGNiaUFnY21WaFpHOXViSGtnYVc1dVpYSlNaV1k2SUZKbFpqeElWRTFNU1c1d2RYUkZiR1Z0Wlc1MFBqdGNibjBwSUh0Y2JpQWdMeThnVW1WdGIzWmxJR0Z1YVcxaGRHbHZiaUJ3Y205d2N5QnViM1FnYldWaGJuUWdabTl5SUVoVVRVd2daV3hsYldWdWRITmNiaUFnWTI5dWMzUWdabWxzZEdWeVpXUlFjbTl3Y3lBOUlISmxiVzkyWlZCeWIzQnpLRnh1SUNBZ0lIQnliM0J6TEZ4dUlDQWdJQ2R2YmtWNGFYUmxaQ2NzWEc0Z0lDQWdKMmx1Snl4Y2JpQWdJQ0FuWlc1MFpYSW5MRnh1SUNBZ0lDZGxlR2wwSnl4Y2JpQWdJQ0FuWVhCd1pXRnlKMXh1SUNBcE8xeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQR2x1Y0hWMFhHNGdJQ0FnSUNCeVpXWTllMmx1Ym1WeVVtVm1mVnh1SUNBZ0lDQWdleTR1TG1acGJIUmxjbVZrVUhKdmNITjlYRzRnSUNBZ0lDQmpjM005ZTN0Y2JpQWdJQ0FnSUNBZ2JHRmlaV3c2SUNka2RXMXRlVWx1Y0hWMEp5eGNiaUFnSUNBZ0lDQWdMeThnWjJWMElISnBaQ0J2WmlCaGJua2daR1ZtWVhWc2RDQnpkSGxzWlhOY2JpQWdJQ0FnSUNBZ1ltRmphMmR5YjNWdVpEb2dNQ3hjYmlBZ0lDQWdJQ0FnWW05eVpHVnlPaUF3TEZ4dUlDQWdJQ0FnSUNBdkx5QnBiWEJ2Y25SaGJuUWhJSFJvYVhNZ2FHbGtaWE1nZEdobElHWnNZWE5vYVc1bklHTjFjbk52Y2x4dUlDQWdJQ0FnSUNCallYSmxkRU52Ykc5eU9pQW5kSEpoYm5Od1lYSmxiblFuTEZ4dUlDQWdJQ0FnSUNCbWIyNTBVMmw2WlRvZ0oybHVhR1Z5YVhRbkxGeHVJQ0FnSUNBZ0lDQm5jbWxrUVhKbFlUb2dKekVnTHlBeElDOGdNaUF2SURNbkxGeHVJQ0FnSUNBZ0lDQnZkWFJzYVc1bE9pQXdMRnh1SUNBZ0lDQWdJQ0J3WVdSa2FXNW5PaUF3TEZ4dUlDQWdJQ0FnSUNBdkx5QnBiWEJ2Y25SaGJuUWhJSGRwZEdodmRYUWdZSGRwWkhSb1lDQmljbTkzYzJWeWN5QjNiMjRuZENCaGJHeHZkeUJtYjJOMWMxeHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ01TeGNibHh1SUNBZ0lDQWdJQ0F2THlCeVpXMXZkbVVnWTNWeWMyOXlJRzl1SUdSbGMydDBiM0JjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJQ2QwY21GdWMzQmhjbVZ1ZENjc1hHNWNiaUFnSUNBZ0lDQWdMeThnY21WdGIzWmxJR04xY25OdmNpQnZiaUJ0YjJKcGJHVWdkMmhwYkhOMElHMWhhVzUwWVdsdWFXNW5JRndpYzJOeWIyeHNJR2x1ZEc4Z2RtbGxkMXdpSUdKbGFHRjJhVzkxY2x4dUlDQWdJQ0FnSUNCc1pXWjBPaUF0TVRBd0xGeHVJQ0FnSUNBZ0lDQnZjR0ZqYVhSNU9pQXdMRnh1SUNBZ0lDQWdJQ0J3YjNOcGRHbHZiam9nSjNKbGJHRjBhWFpsSnl4Y2JpQWdJQ0FnSUNBZ2RISmhibk5tYjNKdE9pQW5jMk5oYkdVb0xqQXhLU2NzWEc0Z0lDQWdJQ0I5ZlZ4dUlDQWdJQzgrWEc0Z0lDazdYRzU5WEc0aVhYMD0gKi9cIilcbiAgfSkpO1xufVxuXG52YXIgY2FuY2VsU2Nyb2xsID0gZnVuY3Rpb24gY2FuY2VsU2Nyb2xsKGV2ZW50KSB7XG4gIGlmIChldmVudC5jYW5jZWxhYmxlKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn07XG5mdW5jdGlvbiB1c2VTY3JvbGxDYXB0dXJlKF9yZWYpIHtcbiAgdmFyIGlzRW5hYmxlZCA9IF9yZWYuaXNFbmFibGVkLFxuICAgIG9uQm90dG9tQXJyaXZlID0gX3JlZi5vbkJvdHRvbUFycml2ZSxcbiAgICBvbkJvdHRvbUxlYXZlID0gX3JlZi5vbkJvdHRvbUxlYXZlLFxuICAgIG9uVG9wQXJyaXZlID0gX3JlZi5vblRvcEFycml2ZSxcbiAgICBvblRvcExlYXZlID0gX3JlZi5vblRvcExlYXZlO1xuICB2YXIgaXNCb3R0b20gPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIgaXNUb3AgPSB1c2VSZWYoZmFsc2UpO1xuICB2YXIgdG91Y2hTdGFydCA9IHVzZVJlZigwKTtcbiAgdmFyIHNjcm9sbFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGhhbmRsZUV2ZW50RGVsdGEgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQsIGRlbHRhKSB7XG4gICAgaWYgKHNjcm9sbFRhcmdldC5jdXJyZW50ID09PSBudWxsKSByZXR1cm47XG4gICAgdmFyIF9zY3JvbGxUYXJnZXQkY3VycmVudCA9IHNjcm9sbFRhcmdldC5jdXJyZW50LFxuICAgICAgc2Nyb2xsVG9wID0gX3Njcm9sbFRhcmdldCRjdXJyZW50LnNjcm9sbFRvcCxcbiAgICAgIHNjcm9sbEhlaWdodCA9IF9zY3JvbGxUYXJnZXQkY3VycmVudC5zY3JvbGxIZWlnaHQsXG4gICAgICBjbGllbnRIZWlnaHQgPSBfc2Nyb2xsVGFyZ2V0JGN1cnJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIHZhciB0YXJnZXQgPSBzY3JvbGxUYXJnZXQuY3VycmVudDtcbiAgICB2YXIgaXNEZWx0YVBvc2l0aXZlID0gZGVsdGEgPiAwO1xuICAgIHZhciBhdmFpbGFibGVTY3JvbGwgPSBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQgLSBzY3JvbGxUb3A7XG4gICAgdmFyIHNob3VsZENhbmNlbFNjcm9sbCA9IGZhbHNlO1xuXG4gICAgLy8gcmVzZXQgYm90dG9tL3RvcCBmbGFnc1xuICAgIGlmIChhdmFpbGFibGVTY3JvbGwgPiBkZWx0YSAmJiBpc0JvdHRvbS5jdXJyZW50KSB7XG4gICAgICBpZiAob25Cb3R0b21MZWF2ZSkgb25Cb3R0b21MZWF2ZShldmVudCk7XG4gICAgICBpc0JvdHRvbS5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpc0RlbHRhUG9zaXRpdmUgJiYgaXNUb3AuY3VycmVudCkge1xuICAgICAgaWYgKG9uVG9wTGVhdmUpIG9uVG9wTGVhdmUoZXZlbnQpO1xuICAgICAgaXNUb3AuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGJvdHRvbSBsaW1pdFxuICAgIGlmIChpc0RlbHRhUG9zaXRpdmUgJiYgZGVsdGEgPiBhdmFpbGFibGVTY3JvbGwpIHtcbiAgICAgIGlmIChvbkJvdHRvbUFycml2ZSAmJiAhaXNCb3R0b20uY3VycmVudCkge1xuICAgICAgICBvbkJvdHRvbUFycml2ZShldmVudCk7XG4gICAgICB9XG4gICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gc2Nyb2xsSGVpZ2h0O1xuICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgIGlzQm90dG9tLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICAvLyB0b3AgbGltaXRcbiAgICB9IGVsc2UgaWYgKCFpc0RlbHRhUG9zaXRpdmUgJiYgLWRlbHRhID4gc2Nyb2xsVG9wKSB7XG4gICAgICBpZiAob25Ub3BBcnJpdmUgJiYgIWlzVG9wLmN1cnJlbnQpIHtcbiAgICAgICAgb25Ub3BBcnJpdmUoZXZlbnQpO1xuICAgICAgfVxuICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IDA7XG4gICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgICAgaXNUb3AuY3VycmVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gY2FuY2VsIHNjcm9sbFxuICAgIGlmIChzaG91bGRDYW5jZWxTY3JvbGwpIHtcbiAgICAgIGNhbmNlbFNjcm9sbChldmVudCk7XG4gICAgfVxuICB9LCBbb25Cb3R0b21BcnJpdmUsIG9uQm90dG9tTGVhdmUsIG9uVG9wQXJyaXZlLCBvblRvcExlYXZlXSk7XG4gIHZhciBvbldoZWVsID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaGFuZGxlRXZlbnREZWx0YShldmVudCwgZXZlbnQuZGVsdGFZKTtcbiAgfSwgW2hhbmRsZUV2ZW50RGVsdGFdKTtcbiAgdmFyIG9uVG91Y2hTdGFydCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIHNldCB0b3VjaCBzdGFydCBzbyB3ZSBjYW4gY2FsY3VsYXRlIHRvdWNobW92ZSBkZWx0YVxuICAgIHRvdWNoU3RhcnQuY3VycmVudCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIH0sIFtdKTtcbiAgdmFyIG9uVG91Y2hNb3ZlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGRlbHRhWSA9IHRvdWNoU3RhcnQuY3VycmVudCAtIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gICAgaGFuZGxlRXZlbnREZWx0YShldmVudCwgZGVsdGFZKTtcbiAgfSwgW2hhbmRsZUV2ZW50RGVsdGFdKTtcbiAgdmFyIHN0YXJ0TGlzdGVuaW5nID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGVsKSB7XG4gICAgLy8gYmFpbCBlYXJseSBpZiBubyBlbGVtZW50IGlzIGF2YWlsYWJsZSB0byBhdHRhY2ggdG9cbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgdmFyIG5vdFBhc3NpdmUgPSBzdXBwb3J0c1Bhc3NpdmVFdmVudHMgPyB7XG4gICAgICBwYXNzaXZlOiBmYWxzZVxuICAgIH0gOiBmYWxzZTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwsIG5vdFBhc3NpdmUpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQsIG5vdFBhc3NpdmUpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlLCBub3RQYXNzaXZlKTtcbiAgfSwgW29uVG91Y2hNb3ZlLCBvblRvdWNoU3RhcnQsIG9uV2hlZWxdKTtcbiAgdmFyIHN0b3BMaXN0ZW5pbmcgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZWwpIHtcbiAgICAvLyBiYWlsIGVhcmx5IGlmIG5vIGVsZW1lbnQgaXMgYXZhaWxhYmxlIHRvIGRldGFjaCBmcm9tXG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgZmFsc2UpO1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSwgZmFsc2UpO1xuICB9LCBbb25Ub3VjaE1vdmUsIG9uVG91Y2hTdGFydCwgb25XaGVlbF0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNFbmFibGVkKSByZXR1cm47XG4gICAgdmFyIGVsZW1lbnQgPSBzY3JvbGxUYXJnZXQuY3VycmVudDtcbiAgICBzdGFydExpc3RlbmluZyhlbGVtZW50KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc3RvcExpc3RlbmluZyhlbGVtZW50KTtcbiAgICB9O1xuICB9LCBbaXNFbmFibGVkLCBzdGFydExpc3RlbmluZywgc3RvcExpc3RlbmluZ10pO1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBzY3JvbGxUYXJnZXQuY3VycmVudCA9IGVsZW1lbnQ7XG4gIH07XG59XG5cbnZhciBTVFlMRV9LRVlTID0gWydib3hTaXppbmcnLCAnaGVpZ2h0JywgJ292ZXJmbG93JywgJ3BhZGRpbmdSaWdodCcsICdwb3NpdGlvbiddO1xudmFyIExPQ0tfU1RZTEVTID0ge1xuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gYWNjb3VudCBmb3IgcG9zc2libGUgZGVjbGFyYXRpb24gYHdpZHRoOiAxMDAlO2Agb24gYm9keVxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBoZWlnaHQ6ICcxMDAlJ1xufTtcbmZ1bmN0aW9uIHByZXZlbnRUb3VjaE1vdmUoZSkge1xuICBpZiAoZS5jYW5jZWxhYmxlKSBlLnByZXZlbnREZWZhdWx0KCk7XG59XG5mdW5jdGlvbiBhbGxvd1RvdWNoTW92ZShlKSB7XG4gIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5mdW5jdGlvbiBwcmV2ZW50SW5lcnRpYVNjcm9sbCgpIHtcbiAgdmFyIHRvcCA9IHRoaXMuc2Nyb2xsVG9wO1xuICB2YXIgdG90YWxTY3JvbGwgPSB0aGlzLnNjcm9sbEhlaWdodDtcbiAgdmFyIGN1cnJlbnRTY3JvbGwgPSB0b3AgKyB0aGlzLm9mZnNldEhlaWdodDtcbiAgaWYgKHRvcCA9PT0gMCkge1xuICAgIHRoaXMuc2Nyb2xsVG9wID0gMTtcbiAgfSBlbHNlIGlmIChjdXJyZW50U2Nyb2xsID09PSB0b3RhbFNjcm9sbCkge1xuICAgIHRoaXMuc2Nyb2xsVG9wID0gdG9wIC0gMTtcbiAgfVxufVxuXG4vLyBgb250b3VjaHN0YXJ0YCBjaGVjayB3b3JrcyBvbiBtb3N0IGJyb3dzZXJzXG4vLyBgbWF4VG91Y2hQb2ludHNgIHdvcmtzIG9uIElFMTAvMTEgYW5kIFN1cmZhY2VcbmZ1bmN0aW9uIGlzVG91Y2hEZXZpY2UoKSB7XG4gIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzO1xufVxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG52YXIgYWN0aXZlU2Nyb2xsTG9ja3MgPSAwO1xudmFyIGxpc3RlbmVyT3B0aW9ucyA9IHtcbiAgY2FwdHVyZTogZmFsc2UsXG4gIHBhc3NpdmU6IGZhbHNlXG59O1xuZnVuY3Rpb24gdXNlU2Nyb2xsTG9jayhfcmVmKSB7XG4gIHZhciBpc0VuYWJsZWQgPSBfcmVmLmlzRW5hYmxlZCxcbiAgICBfcmVmJGFjY291bnRGb3JTY3JvbGwgPSBfcmVmLmFjY291bnRGb3JTY3JvbGxiYXJzLFxuICAgIGFjY291bnRGb3JTY3JvbGxiYXJzID0gX3JlZiRhY2NvdW50Rm9yU2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRhY2NvdW50Rm9yU2Nyb2xsO1xuICB2YXIgb3JpZ2luYWxTdHlsZXMgPSB1c2VSZWYoe30pO1xuICB2YXIgc2Nyb2xsVGFyZ2V0ID0gdXNlUmVmKG51bGwpO1xuICB2YXIgYWRkU2Nyb2xsTG9jayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0b3VjaFNjcm9sbFRhcmdldCkge1xuICAgIGlmICghY2FuVXNlRE9NKSByZXR1cm47XG4gICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIHRhcmdldFN0eWxlID0gdGFyZ2V0ICYmIHRhcmdldC5zdHlsZTtcbiAgICBpZiAoYWNjb3VudEZvclNjcm9sbGJhcnMpIHtcbiAgICAgIC8vIHN0b3JlIGFueSBzdHlsZXMgYWxyZWFkeSBhcHBsaWVkIHRvIHRoZSBib2R5XG4gICAgICBTVFlMRV9LRVlTLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsID0gdGFyZ2V0U3R5bGUgJiYgdGFyZ2V0U3R5bGVba2V5XTtcbiAgICAgICAgb3JpZ2luYWxTdHlsZXMuY3VycmVudFtrZXldID0gdmFsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgdGhlIGxvY2sgc3R5bGVzIGFuZCBwYWRkaW5nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHNjcm9sbCBsb2NrXG4gICAgaWYgKGFjY291bnRGb3JTY3JvbGxiYXJzICYmIGFjdGl2ZVNjcm9sbExvY2tzIDwgMSkge1xuICAgICAgdmFyIGN1cnJlbnRQYWRkaW5nID0gcGFyc2VJbnQob3JpZ2luYWxTdHlsZXMuY3VycmVudC5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xuICAgICAgdmFyIGNsaWVudFdpZHRoID0gZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggOiAwO1xuICAgICAgdmFyIGFkanVzdGVkUGFkZGluZyA9IHdpbmRvdy5pbm5lcldpZHRoIC0gY2xpZW50V2lkdGggKyBjdXJyZW50UGFkZGluZyB8fCAwO1xuICAgICAgT2JqZWN0LmtleXMoTE9DS19TVFlMRVMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsID0gTE9DS19TVFlMRVNba2V5XTtcbiAgICAgICAgaWYgKHRhcmdldFN0eWxlKSB7XG4gICAgICAgICAgdGFyZ2V0U3R5bGVba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGFyZ2V0U3R5bGUpIHtcbiAgICAgICAgdGFyZ2V0U3R5bGUucGFkZGluZ1JpZ2h0ID0gXCJcIi5jb25jYXQoYWRqdXN0ZWRQYWRkaW5nLCBcInB4XCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFjY291bnQgZm9yIHRvdWNoIGRldmljZXNcbiAgICBpZiAodGFyZ2V0ICYmIGlzVG91Y2hEZXZpY2UoKSkge1xuICAgICAgLy8gTW9iaWxlIFNhZmFyaSBpZ25vcmVzIHsgb3ZlcmZsb3c6IGhpZGRlbiB9IGRlY2xhcmF0aW9uIG9uIHRoZSBib2R5LlxuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHByZXZlbnRUb3VjaE1vdmUsIGxpc3RlbmVyT3B0aW9ucyk7XG5cbiAgICAgIC8vIEFsbG93IHNjcm9sbCBvbiBwcm92aWRlZCB0YXJnZXRcbiAgICAgIGlmICh0b3VjaFNjcm9sbFRhcmdldCkge1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgcHJldmVudEluZXJ0aWFTY3JvbGwsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICAgIHRvdWNoU2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGFsbG93VG91Y2hNb3ZlLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBhY3RpdmUgc2Nyb2xsIGxvY2tzXG4gICAgYWN0aXZlU2Nyb2xsTG9ja3MgKz0gMTtcbiAgfSwgW2FjY291bnRGb3JTY3JvbGxiYXJzXSk7XG4gIHZhciByZW1vdmVTY3JvbGxMb2NrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHRvdWNoU2Nyb2xsVGFyZ2V0KSB7XG4gICAgaWYgKCFjYW5Vc2VET00pIHJldHVybjtcbiAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgdGFyZ2V0U3R5bGUgPSB0YXJnZXQgJiYgdGFyZ2V0LnN0eWxlO1xuXG4gICAgLy8gc2FmZWx5IGRlY3JlbWVudCBhY3RpdmUgc2Nyb2xsIGxvY2tzXG4gICAgYWN0aXZlU2Nyb2xsTG9ja3MgPSBNYXRoLm1heChhY3RpdmVTY3JvbGxMb2NrcyAtIDEsIDApO1xuXG4gICAgLy8gcmVhcHBseSBvcmlnaW5hbCBib2R5IHN0eWxlcywgaWYgYW55XG4gICAgaWYgKGFjY291bnRGb3JTY3JvbGxiYXJzICYmIGFjdGl2ZVNjcm9sbExvY2tzIDwgMSkge1xuICAgICAgU1RZTEVfS0VZUy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IG9yaWdpbmFsU3R5bGVzLmN1cnJlbnRba2V5XTtcbiAgICAgICAgaWYgKHRhcmdldFN0eWxlKSB7XG4gICAgICAgICAgdGFyZ2V0U3R5bGVba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHRvdWNoIGxpc3RlbmVyc1xuICAgIGlmICh0YXJnZXQgJiYgaXNUb3VjaERldmljZSgpKSB7XG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgcHJldmVudFRvdWNoTW92ZSwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgIGlmICh0b3VjaFNjcm9sbFRhcmdldCkge1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgcHJldmVudEluZXJ0aWFTY3JvbGwsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICAgIHRvdWNoU2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGFsbG93VG91Y2hNb3ZlLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2FjY291bnRGb3JTY3JvbGxiYXJzXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFpc0VuYWJsZWQpIHJldHVybjtcbiAgICB2YXIgZWxlbWVudCA9IHNjcm9sbFRhcmdldC5jdXJyZW50O1xuICAgIGFkZFNjcm9sbExvY2soZWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVNjcm9sbExvY2soZWxlbWVudCk7XG4gICAgfTtcbiAgfSwgW2lzRW5hYmxlZCwgYWRkU2Nyb2xsTG9jaywgcmVtb3ZlU2Nyb2xsTG9ja10pO1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBzY3JvbGxUYXJnZXQuY3VycmVudCA9IGVsZW1lbnQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDEoKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxudmFyIGJsdXJTZWxlY3RJbnB1dCA9IGZ1bmN0aW9uIGJsdXJTZWxlY3RJbnB1dChldmVudCkge1xuICB2YXIgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgcmV0dXJuIGVsZW1lbnQub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGVsZW1lbnQub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbn07XG52YXIgX3JlZjIkMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxa2ZkYjBlXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt0b3A6MFwiXG59IDoge1xuICBuYW1lOiBcImJwOGN1YS1TY3JvbGxNYW5hZ2VyXCIsXG4gIHN0eWxlczogXCJwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt0b3A6MDtsYWJlbDpTY3JvbGxNYW5hZ2VyO1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxOamNtOXNiRTFoYm1GblpYSXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVc5RVZTSXNJbVpwYkdVaU9pSlRZM0p2Ykd4TllXNWhaMlZ5TG5SemVDSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2lCQWFuTjRJR3B6ZUNBcUwxeHVhVzF3YjNKMElIc2dhbk40SUgwZ1puSnZiU0FuUUdWdGIzUnBiMjR2Y21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnUm5KaFoyMWxiblFzSUZKbFlXTjBSV3hsYldWdWRDd2dVbVZtUTJGc2JHSmhZMnNzSUUxdmRYTmxSWFpsYm5RZ2ZTQm1jbTl0SUNkeVpXRmpkQ2M3WEc1cGJYQnZjblFnZFhObFUyTnliMnhzUTJGd2RIVnlaU0JtY205dElDY3VMM1Z6WlZOamNtOXNiRU5oY0hSMWNtVW5PMXh1YVcxd2IzSjBJSFZ6WlZOamNtOXNiRXh2WTJzZ1puSnZiU0FuTGk5MWMyVlRZM0p2Ykd4TWIyTnJKenRjYmx4dWFXNTBaWEptWVdObElGQnliM0J6SUh0Y2JpQWdjbVZoWkc5dWJIa2dZMmhwYkdSeVpXNDZJQ2h5WldZNklGSmxaa05oYkd4aVlXTnJQRWhVVFV4RmJHVnRaVzUwUGlrZ1BUNGdVbVZoWTNSRmJHVnRaVzUwTzF4dUlDQnlaV0ZrYjI1c2VTQnNiMk5yUlc1aFlteGxaRG9nWW05dmJHVmhianRjYmlBZ2NtVmhaRzl1YkhrZ1kyRndkSFZ5WlVWdVlXSnNaV1E2SUdKdmIyeGxZVzQ3WEc0Z0lISmxZV1J2Ym14NUlHOXVRbTkwZEc5dFFYSnlhWFpsUHpvZ0tHVjJaVzUwT2lCWGFHVmxiRVYyWlc1MElId2dWRzkxWTJoRmRtVnVkQ2tnUFQ0Z2RtOXBaRHRjYmlBZ2NtVmhaRzl1YkhrZ2IyNUNiM1IwYjIxTVpXRjJaVDg2SUNobGRtVnVkRG9nVjJobFpXeEZkbVZ1ZENCOElGUnZkV05vUlhabGJuUXBJRDArSUhadmFXUTdYRzRnSUhKbFlXUnZibXg1SUc5dVZHOXdRWEp5YVhabFB6b2dLR1YyWlc1ME9pQlhhR1ZsYkVWMlpXNTBJSHdnVkc5MVkyaEZkbVZ1ZENrZ1BUNGdkbTlwWkR0Y2JpQWdjbVZoWkc5dWJIa2diMjVVYjNCTVpXRjJaVDg2SUNobGRtVnVkRG9nVjJobFpXeEZkbVZ1ZENCOElGUnZkV05vUlhabGJuUXBJRDArSUhadmFXUTdYRzU5WEc1Y2JtTnZibk4wSUdKc2RYSlRaV3hsWTNSSmJuQjFkQ0E5SUNobGRtVnVkRG9nVFc5MWMyVkZkbVZ1ZER4SVZFMU1SR2wyUld4bGJXVnVkRDRwSUQwK0lIdGNiaUFnWTI5dWMzUWdaV3hsYldWdWRDQTlJR1YyWlc1MExuUmhjbWRsZENCaGN5QklWRTFNUkdsMlJXeGxiV1Z1ZER0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNCbGJHVnRaVzUwTG05M2JtVnlSRzlqZFcxbGJuUXVZV04wYVhabFJXeGxiV1Z1ZENBbUpseHVJQ0FnSUNobGJHVnRaVzUwTG05M2JtVnlSRzlqZFcxbGJuUXVZV04wYVhabFJXeGxiV1Z1ZENCaGN5QklWRTFNUld4bGJXVnVkQ2t1WW14MWNpZ3BYRzRnSUNrN1hHNTlPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JtZFc1amRHbHZiaUJUWTNKdmJHeE5ZVzVoWjJWeUtIdGNiaUFnWTJocGJHUnlaVzRzWEc0Z0lHeHZZMnRGYm1GaWJHVmtMRnh1SUNCallYQjBkWEpsUlc1aFlteGxaQ0E5SUhSeWRXVXNYRzRnSUc5dVFtOTBkRzl0UVhKeWFYWmxMRnh1SUNCdmJrSnZkSFJ2YlV4bFlYWmxMRnh1SUNCdmJsUnZjRUZ5Y21sMlpTeGNiaUFnYjI1VWIzQk1aV0YyWlN4Y2JuMDZJRkJ5YjNCektTQjdYRzRnSUdOdmJuTjBJSE5sZEZOamNtOXNiRU5oY0hSMWNtVlVZWEpuWlhRZ1BTQjFjMlZUWTNKdmJHeERZWEIwZFhKbEtIdGNiaUFnSUNCcGMwVnVZV0pzWldRNklHTmhjSFIxY21WRmJtRmliR1ZrTEZ4dUlDQWdJRzl1UW05MGRHOXRRWEp5YVhabExGeHVJQ0FnSUc5dVFtOTBkRzl0VEdWaGRtVXNYRzRnSUNBZ2IyNVViM0JCY25KcGRtVXNYRzRnSUNBZ2IyNVViM0JNWldGMlpTeGNiaUFnZlNrN1hHNGdJR052Ym5OMElITmxkRk5qY205c2JFeHZZMnRVWVhKblpYUWdQU0IxYzJWVFkzSnZiR3hNYjJOcktIc2dhWE5GYm1GaWJHVmtPaUJzYjJOclJXNWhZbXhsWkNCOUtUdGNibHh1SUNCamIyNXpkQ0IwWVhKblpYUlNaV1k2SUZKbFprTmhiR3hpWVdOclBFaFVUVXhGYkdWdFpXNTBQaUE5SUNobGJHVnRaVzUwS1NBOVBpQjdYRzRnSUNBZ2MyVjBVMk55YjJ4c1EyRndkSFZ5WlZSaGNtZGxkQ2hsYkdWdFpXNTBLVHRjYmlBZ0lDQnpaWFJUWTNKdmJHeE1iMk5yVkdGeVoyVjBLR1ZzWlcxbGJuUXBPMXh1SUNCOU8xeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQRVp5WVdkdFpXNTBQbHh1SUNBZ0lDQWdlMnh2WTJ0RmJtRmliR1ZrSUNZbUlDaGNiaUFnSUNBZ0lDQWdQR1JwZGx4dUlDQWdJQ0FnSUNBZ0lHOXVRMnhwWTJzOWUySnNkWEpUWld4bFkzUkpibkIxZEgxY2JpQWdJQ0FnSUNBZ0lDQmpjM005ZTNzZ2NHOXphWFJwYjI0NklDZG1hWGhsWkNjc0lHeGxablE2SURBc0lHSnZkSFJ2YlRvZ01Dd2djbWxuYUhRNklEQXNJSFJ2Y0RvZ01DQjlmVnh1SUNBZ0lDQWdJQ0F2UGx4dUlDQWdJQ0FnS1gxY2JpQWdJQ0FnSUh0amFHbHNaSEpsYmloMFlYSm5aWFJTWldZcGZWeHVJQ0FnSUR3dlJuSmhaMjFsYm5RK1hHNGdJQ2s3WEc1OVhHNGlYWDA9ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQxXG59O1xuZnVuY3Rpb24gU2Nyb2xsTWFuYWdlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgbG9ja0VuYWJsZWQgPSBfcmVmLmxvY2tFbmFibGVkLFxuICAgIF9yZWYkY2FwdHVyZUVuYWJsZWQgPSBfcmVmLmNhcHR1cmVFbmFibGVkLFxuICAgIGNhcHR1cmVFbmFibGVkID0gX3JlZiRjYXB0dXJlRW5hYmxlZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkY2FwdHVyZUVuYWJsZWQsXG4gICAgb25Cb3R0b21BcnJpdmUgPSBfcmVmLm9uQm90dG9tQXJyaXZlLFxuICAgIG9uQm90dG9tTGVhdmUgPSBfcmVmLm9uQm90dG9tTGVhdmUsXG4gICAgb25Ub3BBcnJpdmUgPSBfcmVmLm9uVG9wQXJyaXZlLFxuICAgIG9uVG9wTGVhdmUgPSBfcmVmLm9uVG9wTGVhdmU7XG4gIHZhciBzZXRTY3JvbGxDYXB0dXJlVGFyZ2V0ID0gdXNlU2Nyb2xsQ2FwdHVyZSh7XG4gICAgaXNFbmFibGVkOiBjYXB0dXJlRW5hYmxlZCxcbiAgICBvbkJvdHRvbUFycml2ZTogb25Cb3R0b21BcnJpdmUsXG4gICAgb25Cb3R0b21MZWF2ZTogb25Cb3R0b21MZWF2ZSxcbiAgICBvblRvcEFycml2ZTogb25Ub3BBcnJpdmUsXG4gICAgb25Ub3BMZWF2ZTogb25Ub3BMZWF2ZVxuICB9KTtcbiAgdmFyIHNldFNjcm9sbExvY2tUYXJnZXQgPSB1c2VTY3JvbGxMb2NrKHtcbiAgICBpc0VuYWJsZWQ6IGxvY2tFbmFibGVkXG4gIH0pO1xuICB2YXIgdGFyZ2V0UmVmID0gZnVuY3Rpb24gdGFyZ2V0UmVmKGVsZW1lbnQpIHtcbiAgICBzZXRTY3JvbGxDYXB0dXJlVGFyZ2V0KGVsZW1lbnQpO1xuICAgIHNldFNjcm9sbExvY2tUYXJnZXQoZWxlbWVudCk7XG4gIH07XG4gIHJldHVybiBqc3goRnJhZ21lbnQsIG51bGwsIGxvY2tFbmFibGVkICYmIGpzeChcImRpdlwiLCB7XG4gICAgb25DbGljazogYmx1clNlbGVjdElucHV0LFxuICAgIGNzczogX3JlZjIkMVxuICB9KSwgY2hpbGRyZW4odGFyZ2V0UmVmKSk7XG59XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxYTBybzRuLXJlcXVpcmVkSW5wdXRcIixcbiAgc3R5bGVzOiBcImxhYmVsOnJlcXVpcmVkSW5wdXQ7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7d2lkdGg6MTAwJVwiXG59IDoge1xuICBuYW1lOiBcIjVra3hiMi1yZXF1aXJlZElucHV0LVJlcXVpcmVkSW5wdXRcIixcbiAgc3R5bGVzOiBcImxhYmVsOnJlcXVpcmVkSW5wdXQ7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7d2lkdGg6MTAwJTtsYWJlbDpSZXF1aXJlZElucHV0O1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWxKbGNYVnBjbVZrU1c1d2RYUXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVdOSklpd2labWxzWlNJNklsSmxjWFZwY21Wa1NXNXdkWFF1ZEhONElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xSUVCcWMzZ2dhbk40SUNvdlhHNXBiWEJ2Y25RZ2V5QkdiMk4xYzBWMlpXNTBTR0Z1Wkd4bGNpd2dSblZ1WTNScGIyNURiMjF3YjI1bGJuUWdmU0JtY205dElDZHlaV0ZqZENjN1hHNXBiWEJ2Y25RZ2V5QnFjM2dnZlNCbWNtOXRJQ2RBWlcxdmRHbHZiaTl5WldGamRDYzdYRzVjYm1OdmJuTjBJRkpsY1hWcGNtVmtTVzV3ZFhRNklFWjFibU4wYVc5dVEyOXRjRzl1Wlc1MFBIdGNiaUFnY21WaFpHOXViSGtnYm1GdFpUODZJSE4wY21sdVp6dGNiaUFnY21WaFpHOXViSGtnYjI1R2IyTjFjem9nUm05amRYTkZkbVZ1ZEVoaGJtUnNaWEk4U0ZSTlRFbHVjSFYwUld4bGJXVnVkRDQ3WEc1OVBpQTlJQ2g3SUc1aGJXVXNJRzl1Um05amRYTWdmU2tnUFQ0Z0tGeHVJQ0E4YVc1d2RYUmNiaUFnSUNCeVpYRjFhWEpsWkZ4dUlDQWdJRzVoYldVOWUyNWhiV1Y5WEc0Z0lDQWdkR0ZpU1c1a1pYZzlleTB4ZlZ4dUlDQWdJR0Z5YVdFdGFHbGtaR1Z1UFZ3aWRISjFaVndpWEc0Z0lDQWdiMjVHYjJOMWN6MTdiMjVHYjJOMWMzMWNiaUFnSUNCamMzTTllM3RjYmlBZ0lDQWdJR3hoWW1Wc09pQW5jbVZ4ZFdseVpXUkpibkIxZENjc1hHNGdJQ0FnSUNCdmNHRmphWFI1T2lBd0xGeHVJQ0FnSUNBZ2NHOXBiblJsY2tWMlpXNTBjem9nSjI1dmJtVW5MRnh1SUNBZ0lDQWdjRzl6YVhScGIyNDZJQ2RoWW5OdmJIVjBaU2NzWEc0Z0lDQWdJQ0JpYjNSMGIyMDZJREFzWEc0Z0lDQWdJQ0JzWldaME9pQXdMRnh1SUNBZ0lDQWdjbWxuYUhRNklEQXNYRzRnSUNBZ0lDQjNhV1IwYURvZ0p6RXdNQ1VuTEZ4dUlDQWdJSDE5WEc0Z0lDQWdMeThnVUhKbGRtVnVkQ0JnVTNkcGRHTm9hVzVuSUdaeWIyMGdkVzVqYjI1MGNtOXNiR1ZrSUhSdklHTnZiblJ5YjJ4c1pXUmdJR1Z5Y205eVhHNGdJQ0FnZG1Gc2RXVTlYQ0pjSWx4dUlDQWdJRzl1UTJoaGJtZGxQWHNvS1NBOVBpQjdmWDFjYmlBZ0x6NWNiaWs3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUZKbGNYVnBjbVZrU1c1d2RYUTdYRzRpWFgwPSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG52YXIgUmVxdWlyZWRJbnB1dCA9IGZ1bmN0aW9uIFJlcXVpcmVkSW5wdXQoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICBvbkZvY3VzID0gX3JlZi5vbkZvY3VzO1xuICByZXR1cm4ganN4KFwiaW5wdXRcIiwge1xuICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICBjc3M6IF9yZWYyXG4gICAgLy8gUHJldmVudCBgU3dpdGNoaW5nIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWRgIGVycm9yXG4gICAgLFxuICAgIHZhbHVlOiBcIlwiLFxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSgpIHt9XG4gIH0pO1xufTtcbnZhciBSZXF1aXJlZElucHV0JDEgPSBSZXF1aXJlZElucHV0O1xuXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cInVzZXItYWdlbnQtZGF0YS10eXBlc1wiIC8+XG5cbmZ1bmN0aW9uIHRlc3RQbGF0Zm9ybShyZSkge1xuICB2YXIgX3dpbmRvdyRuYXZpZ2F0b3IkdXNlO1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAhPSBudWxsID8gcmUudGVzdCgoKF93aW5kb3ckbmF2aWdhdG9yJHVzZSA9IHdpbmRvdy5uYXZpZ2F0b3JbJ3VzZXJBZ2VudERhdGEnXSkgPT09IG51bGwgfHwgX3dpbmRvdyRuYXZpZ2F0b3IkdXNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfd2luZG93JG5hdmlnYXRvciR1c2UucGxhdGZvcm0pIHx8IHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pIDogZmFsc2U7XG59XG5mdW5jdGlvbiBpc0lQaG9uZSgpIHtcbiAgcmV0dXJuIHRlc3RQbGF0Zm9ybSgvXmlQaG9uZS9pKTtcbn1cbmZ1bmN0aW9uIGlzTWFjKCkge1xuICByZXR1cm4gdGVzdFBsYXRmb3JtKC9eTWFjL2kpO1xufVxuZnVuY3Rpb24gaXNJUGFkKCkge1xuICByZXR1cm4gdGVzdFBsYXRmb3JtKC9eaVBhZC9pKSB8fFxuICAvLyBpUGFkT1MgMTMgbGllcyBhbmQgc2F5cyBpdCdzIGEgTWFjLCBidXQgd2UgY2FuIGRpc3Rpbmd1aXNoIGJ5IGRldGVjdGluZyB0b3VjaCBzdXBwb3J0LlxuICBpc01hYygpICYmIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDE7XG59XG5mdW5jdGlvbiBpc0lPUygpIHtcbiAgcmV0dXJuIGlzSVBob25lKCkgfHwgaXNJUGFkKCk7XG59XG5mdW5jdGlvbiBpc0FwcGxlRGV2aWNlKCkge1xuICByZXR1cm4gaXNNYWMoKSB8fCBpc0lPUygpO1xufVxuXG52YXIgZm9ybWF0R3JvdXBMYWJlbCA9IGZ1bmN0aW9uIGZvcm1hdEdyb3VwTGFiZWwoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLmxhYmVsO1xufTtcbnZhciBnZXRPcHRpb25MYWJlbCQxID0gZnVuY3Rpb24gZ2V0T3B0aW9uTGFiZWwob3B0aW9uKSB7XG4gIHJldHVybiBvcHRpb24ubGFiZWw7XG59O1xudmFyIGdldE9wdGlvblZhbHVlJDEgPSBmdW5jdGlvbiBnZXRPcHRpb25WYWx1ZShvcHRpb24pIHtcbiAgcmV0dXJuIG9wdGlvbi52YWx1ZTtcbn07XG52YXIgaXNPcHRpb25EaXNhYmxlZCA9IGZ1bmN0aW9uIGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKSB7XG4gIHJldHVybiAhIW9wdGlvbi5pc0Rpc2FibGVkO1xufTtcblxudmFyIGRlZmF1bHRTdHlsZXMgPSB7XG4gIGNsZWFySW5kaWNhdG9yOiBjbGVhckluZGljYXRvckNTUyxcbiAgY29udGFpbmVyOiBjb250YWluZXJDU1MsXG4gIGNvbnRyb2w6IGNzcyQxLFxuICBkcm9wZG93bkluZGljYXRvcjogZHJvcGRvd25JbmRpY2F0b3JDU1MsXG4gIGdyb3VwOiBncm91cENTUyxcbiAgZ3JvdXBIZWFkaW5nOiBncm91cEhlYWRpbmdDU1MsXG4gIGluZGljYXRvcnNDb250YWluZXI6IGluZGljYXRvcnNDb250YWluZXJDU1MsXG4gIGluZGljYXRvclNlcGFyYXRvcjogaW5kaWNhdG9yU2VwYXJhdG9yQ1NTLFxuICBpbnB1dDogaW5wdXRDU1MsXG4gIGxvYWRpbmdJbmRpY2F0b3I6IGxvYWRpbmdJbmRpY2F0b3JDU1MsXG4gIGxvYWRpbmdNZXNzYWdlOiBsb2FkaW5nTWVzc2FnZUNTUyxcbiAgbWVudTogbWVudUNTUyxcbiAgbWVudUxpc3Q6IG1lbnVMaXN0Q1NTLFxuICBtZW51UG9ydGFsOiBtZW51UG9ydGFsQ1NTLFxuICBtdWx0aVZhbHVlOiBtdWx0aVZhbHVlQ1NTLFxuICBtdWx0aVZhbHVlTGFiZWw6IG11bHRpVmFsdWVMYWJlbENTUyxcbiAgbXVsdGlWYWx1ZVJlbW92ZTogbXVsdGlWYWx1ZVJlbW92ZUNTUyxcbiAgbm9PcHRpb25zTWVzc2FnZTogbm9PcHRpb25zTWVzc2FnZUNTUyxcbiAgb3B0aW9uOiBvcHRpb25DU1MsXG4gIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlckNTUyxcbiAgc2luZ2xlVmFsdWU6IGNzcyQyLFxuICB2YWx1ZUNvbnRhaW5lcjogdmFsdWVDb250YWluZXJDU1Ncbn07XG4vLyBNZXJnZSBVdGlsaXR5XG4vLyBBbGxvd3MgY29uc3VtZXJzIHRvIGV4dGVuZCBhIGJhc2UgU2VsZWN0IHdpdGggYWRkaXRpb25hbCBzdHlsZXNcblxuZnVuY3Rpb24gbWVyZ2VTdHlsZXMoc291cmNlKSB7XG4gIHZhciB0YXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAvLyBpbml0aWFsaXplIHdpdGggc291cmNlIHN0eWxlc1xuICB2YXIgc3R5bGVzID0gX29iamVjdFNwcmVhZCh7fSwgc291cmNlKTtcblxuICAvLyBtYXNzYWdlIGluIHRhcmdldCBzdHlsZXNcbiAgT2JqZWN0LmtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlBc1N0cmluZykge1xuICAgIHZhciBrZXkgPSBrZXlBc1N0cmluZztcbiAgICBpZiAoc291cmNlW2tleV0pIHtcbiAgICAgIHN0eWxlc1trZXldID0gZnVuY3Rpb24gKHJzQ3NzLCBwcm9wcykge1xuICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV0oc291cmNlW2tleV0ocnNDc3MsIHByb3BzKSwgcHJvcHMpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzW2tleV0gPSB0YXJnZXRba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3R5bGVzO1xufVxuXG52YXIgY29sb3JzID0ge1xuICBwcmltYXJ5OiAnIzI2ODRGRicsXG4gIHByaW1hcnk3NTogJyM0QzlBRkYnLFxuICBwcmltYXJ5NTA6ICcjQjJENEZGJyxcbiAgcHJpbWFyeTI1OiAnI0RFRUJGRicsXG4gIGRhbmdlcjogJyNERTM1MEInLFxuICBkYW5nZXJMaWdodDogJyNGRkJEQUQnLFxuICBuZXV0cmFsMDogJ2hzbCgwLCAwJSwgMTAwJSknLFxuICBuZXV0cmFsNTogJ2hzbCgwLCAwJSwgOTUlKScsXG4gIG5ldXRyYWwxMDogJ2hzbCgwLCAwJSwgOTAlKScsXG4gIG5ldXRyYWwyMDogJ2hzbCgwLCAwJSwgODAlKScsXG4gIG5ldXRyYWwzMDogJ2hzbCgwLCAwJSwgNzAlKScsXG4gIG5ldXRyYWw0MDogJ2hzbCgwLCAwJSwgNjAlKScsXG4gIG5ldXRyYWw1MDogJ2hzbCgwLCAwJSwgNTAlKScsXG4gIG5ldXRyYWw2MDogJ2hzbCgwLCAwJSwgNDAlKScsXG4gIG5ldXRyYWw3MDogJ2hzbCgwLCAwJSwgMzAlKScsXG4gIG5ldXRyYWw4MDogJ2hzbCgwLCAwJSwgMjAlKScsXG4gIG5ldXRyYWw5MDogJ2hzbCgwLCAwJSwgMTAlKSdcbn07XG52YXIgYm9yZGVyUmFkaXVzID0gNDtcbi8vIFVzZWQgdG8gY2FsY3VsYXRlIGNvbnNpc3RlbnQgbWFyZ2luL3BhZGRpbmcgb24gZWxlbWVudHNcbnZhciBiYXNlVW5pdCA9IDQ7XG4vLyBUaGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIGNvbnRyb2xcbnZhciBjb250cm9sSGVpZ2h0ID0gMzg7XG4vLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIGNvbnRyb2wgYW5kIG1lbnUgKi9cbnZhciBtZW51R3V0dGVyID0gYmFzZVVuaXQgKiAyO1xudmFyIHNwYWNpbmcgPSB7XG4gIGJhc2VVbml0OiBiYXNlVW5pdCxcbiAgY29udHJvbEhlaWdodDogY29udHJvbEhlaWdodCxcbiAgbWVudUd1dHRlcjogbWVudUd1dHRlclxufTtcbnZhciBkZWZhdWx0VGhlbWUgPSB7XG4gIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzLFxuICBjb2xvcnM6IGNvbG9ycyxcbiAgc3BhY2luZzogc3BhY2luZ1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgJ2FyaWEtbGl2ZSc6ICdwb2xpdGUnLFxuICBiYWNrc3BhY2VSZW1vdmVzVmFsdWU6IHRydWUsXG4gIGJsdXJJbnB1dE9uU2VsZWN0OiBpc1RvdWNoQ2FwYWJsZSgpLFxuICBjYXB0dXJlTWVudVNjcm9sbDogIWlzVG91Y2hDYXBhYmxlKCksXG4gIGNsYXNzTmFtZXM6IHt9LFxuICBjbG9zZU1lbnVPblNlbGVjdDogdHJ1ZSxcbiAgY2xvc2VNZW51T25TY3JvbGw6IGZhbHNlLFxuICBjb21wb25lbnRzOiB7fSxcbiAgY29udHJvbFNob3VsZFJlbmRlclZhbHVlOiB0cnVlLFxuICBlc2NhcGVDbGVhcnNWYWx1ZTogZmFsc2UsXG4gIGZpbHRlck9wdGlvbjogY3JlYXRlRmlsdGVyKCksXG4gIGZvcm1hdEdyb3VwTGFiZWw6IGZvcm1hdEdyb3VwTGFiZWwsXG4gIGdldE9wdGlvbkxhYmVsOiBnZXRPcHRpb25MYWJlbCQxLFxuICBnZXRPcHRpb25WYWx1ZTogZ2V0T3B0aW9uVmFsdWUkMSxcbiAgaXNEaXNhYmxlZDogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGlzTXVsdGk6IGZhbHNlLFxuICBpc1J0bDogZmFsc2UsXG4gIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgaXNPcHRpb25EaXNhYmxlZDogaXNPcHRpb25EaXNhYmxlZCxcbiAgbG9hZGluZ01lc3NhZ2U6IGZ1bmN0aW9uIGxvYWRpbmdNZXNzYWdlKCkge1xuICAgIHJldHVybiAnTG9hZGluZy4uLic7XG4gIH0sXG4gIG1heE1lbnVIZWlnaHQ6IDMwMCxcbiAgbWluTWVudUhlaWdodDogMTQwLFxuICBtZW51SXNPcGVuOiBmYWxzZSxcbiAgbWVudVBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1lbnVQb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsOiBmYWxzZSxcbiAgbWVudVNob3VsZFNjcm9sbEludG9WaWV3OiAhaXNNb2JpbGVEZXZpY2UoKSxcbiAgbm9PcHRpb25zTWVzc2FnZTogZnVuY3Rpb24gbm9PcHRpb25zTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gJ05vIG9wdGlvbnMnO1xuICB9LFxuICBvcGVuTWVudU9uRm9jdXM6IGZhbHNlLFxuICBvcGVuTWVudU9uQ2xpY2s6IHRydWUsXG4gIG9wdGlvbnM6IFtdLFxuICBwYWdlU2l6ZTogNSxcbiAgcGxhY2Vob2xkZXI6ICdTZWxlY3QuLi4nLFxuICBzY3JlZW5SZWFkZXJTdGF0dXM6IGZ1bmN0aW9uIHNjcmVlblJlYWRlclN0YXR1cyhfcmVmKSB7XG4gICAgdmFyIGNvdW50ID0gX3JlZi5jb3VudDtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoY291bnQsIFwiIHJlc3VsdFwiKS5jb25jYXQoY291bnQgIT09IDEgPyAncycgOiAnJywgXCIgYXZhaWxhYmxlXCIpO1xuICB9LFxuICBzdHlsZXM6IHt9LFxuICB0YWJJbmRleDogMCxcbiAgdGFiU2VsZWN0c1ZhbHVlOiB0cnVlLFxuICB1bnN0eWxlZDogZmFsc2Vcbn07XG5mdW5jdGlvbiB0b0NhdGVnb3JpemVkT3B0aW9uKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlLCBpbmRleCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc09wdGlvbkRpc2FibGVkKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlKTtcbiAgdmFyIGlzU2VsZWN0ZWQgPSBfaXNPcHRpb25TZWxlY3RlZChwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG4gIHZhciBsYWJlbCA9IGdldE9wdGlvbkxhYmVsKHByb3BzLCBvcHRpb24pO1xuICB2YXIgdmFsdWUgPSBnZXRPcHRpb25WYWx1ZShwcm9wcywgb3B0aW9uKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnb3B0aW9uJyxcbiAgICBkYXRhOiBvcHRpb24sXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgIGxhYmVsOiBsYWJlbCxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgaW5kZXg6IGluZGV4XG4gIH07XG59XG5mdW5jdGlvbiBidWlsZENhdGVnb3JpemVkT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpIHtcbiAgcmV0dXJuIHByb3BzLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChncm91cE9yT3B0aW9uLCBncm91cE9yT3B0aW9uSW5kZXgpIHtcbiAgICBpZiAoJ29wdGlvbnMnIGluIGdyb3VwT3JPcHRpb24pIHtcbiAgICAgIHZhciBjYXRlZ29yaXplZE9wdGlvbnMgPSBncm91cE9yT3B0aW9uLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24sIG9wdGlvbkluZGV4KSB7XG4gICAgICAgIHJldHVybiB0b0NhdGVnb3JpemVkT3B0aW9uKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlLCBvcHRpb25JbmRleCk7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGNhdGVnb3JpemVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBpc0ZvY3VzYWJsZShwcm9wcywgY2F0ZWdvcml6ZWRPcHRpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2F0ZWdvcml6ZWRPcHRpb25zLmxlbmd0aCA+IDAgPyB7XG4gICAgICAgIHR5cGU6ICdncm91cCcsXG4gICAgICAgIGRhdGE6IGdyb3VwT3JPcHRpb24sXG4gICAgICAgIG9wdGlvbnM6IGNhdGVnb3JpemVkT3B0aW9ucyxcbiAgICAgICAgaW5kZXg6IGdyb3VwT3JPcHRpb25JbmRleFxuICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGNhdGVnb3JpemVkT3B0aW9uID0gdG9DYXRlZ29yaXplZE9wdGlvbihwcm9wcywgZ3JvdXBPck9wdGlvbiwgc2VsZWN0VmFsdWUsIGdyb3VwT3JPcHRpb25JbmRleCk7XG4gICAgcmV0dXJuIGlzRm9jdXNhYmxlKHByb3BzLCBjYXRlZ29yaXplZE9wdGlvbikgPyBjYXRlZ29yaXplZE9wdGlvbiA6IHVuZGVmaW5lZDtcbiAgfSkuZmlsdGVyKG5vdE51bGxpc2gpO1xufVxuZnVuY3Rpb24gYnVpbGRGb2N1c2FibGVPcHRpb25zRnJvbUNhdGVnb3JpemVkT3B0aW9ucyhjYXRlZ29yaXplZE9wdGlvbnMpIHtcbiAgcmV0dXJuIGNhdGVnb3JpemVkT3B0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKG9wdGlvbnNBY2N1bXVsYXRvciwgY2F0ZWdvcml6ZWRPcHRpb24pIHtcbiAgICBpZiAoY2F0ZWdvcml6ZWRPcHRpb24udHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgb3B0aW9uc0FjY3VtdWxhdG9yLnB1c2guYXBwbHkob3B0aW9uc0FjY3VtdWxhdG9yLCBfdG9Db25zdW1hYmxlQXJyYXkoY2F0ZWdvcml6ZWRPcHRpb24ub3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmRhdGE7XG4gICAgICB9KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zQWNjdW11bGF0b3IucHVzaChjYXRlZ29yaXplZE9wdGlvbi5kYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnNBY2N1bXVsYXRvcjtcbiAgfSwgW10pO1xufVxuZnVuY3Rpb24gYnVpbGRGb2N1c2FibGVPcHRpb25zV2l0aElkcyhjYXRlZ29yaXplZE9wdGlvbnMsIG9wdGlvbklkKSB7XG4gIHJldHVybiBjYXRlZ29yaXplZE9wdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zQWNjdW11bGF0b3IsIGNhdGVnb3JpemVkT3B0aW9uKSB7XG4gICAgaWYgKGNhdGVnb3JpemVkT3B0aW9uLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgIG9wdGlvbnNBY2N1bXVsYXRvci5wdXNoLmFwcGx5KG9wdGlvbnNBY2N1bXVsYXRvciwgX3RvQ29uc3VtYWJsZUFycmF5KGNhdGVnb3JpemVkT3B0aW9uLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBvcHRpb24uZGF0YSxcbiAgICAgICAgICBpZDogXCJcIi5jb25jYXQob3B0aW9uSWQsIFwiLVwiKS5jb25jYXQoY2F0ZWdvcml6ZWRPcHRpb24uaW5kZXgsIFwiLVwiKS5jb25jYXQob3B0aW9uLmluZGV4KVxuICAgICAgICB9O1xuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uc0FjY3VtdWxhdG9yLnB1c2goe1xuICAgICAgICBkYXRhOiBjYXRlZ29yaXplZE9wdGlvbi5kYXRhLFxuICAgICAgICBpZDogXCJcIi5jb25jYXQob3B0aW9uSWQsIFwiLVwiKS5jb25jYXQoY2F0ZWdvcml6ZWRPcHRpb24uaW5kZXgpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnNBY2N1bXVsYXRvcjtcbiAgfSwgW10pO1xufVxuZnVuY3Rpb24gYnVpbGRGb2N1c2FibGVPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSkge1xuICByZXR1cm4gYnVpbGRGb2N1c2FibGVPcHRpb25zRnJvbUNhdGVnb3JpemVkT3B0aW9ucyhidWlsZENhdGVnb3JpemVkT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNhYmxlKHByb3BzLCBjYXRlZ29yaXplZE9wdGlvbikge1xuICB2YXIgX3Byb3BzJGlucHV0VmFsdWUgPSBwcm9wcy5pbnB1dFZhbHVlLFxuICAgIGlucHV0VmFsdWUgPSBfcHJvcHMkaW5wdXRWYWx1ZSA9PT0gdm9pZCAwID8gJycgOiBfcHJvcHMkaW5wdXRWYWx1ZTtcbiAgdmFyIGRhdGEgPSBjYXRlZ29yaXplZE9wdGlvbi5kYXRhLFxuICAgIGlzU2VsZWN0ZWQgPSBjYXRlZ29yaXplZE9wdGlvbi5pc1NlbGVjdGVkLFxuICAgIGxhYmVsID0gY2F0ZWdvcml6ZWRPcHRpb24ubGFiZWwsXG4gICAgdmFsdWUgPSBjYXRlZ29yaXplZE9wdGlvbi52YWx1ZTtcbiAgcmV0dXJuICghc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyhwcm9wcykgfHwgIWlzU2VsZWN0ZWQpICYmIF9maWx0ZXJPcHRpb24ocHJvcHMsIHtcbiAgICBsYWJlbDogbGFiZWwsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGRhdGE6IGRhdGFcbiAgfSwgaW5wdXRWYWx1ZSk7XG59XG5mdW5jdGlvbiBnZXROZXh0Rm9jdXNlZFZhbHVlKHN0YXRlLCBuZXh0U2VsZWN0VmFsdWUpIHtcbiAgdmFyIGZvY3VzZWRWYWx1ZSA9IHN0YXRlLmZvY3VzZWRWYWx1ZSxcbiAgICBsYXN0U2VsZWN0VmFsdWUgPSBzdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgdmFyIGxhc3RGb2N1c2VkSW5kZXggPSBsYXN0U2VsZWN0VmFsdWUuaW5kZXhPZihmb2N1c2VkVmFsdWUpO1xuICBpZiAobGFzdEZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgdmFyIG5leHRGb2N1c2VkSW5kZXggPSBuZXh0U2VsZWN0VmFsdWUuaW5kZXhPZihmb2N1c2VkVmFsdWUpO1xuICAgIGlmIChuZXh0Rm9jdXNlZEluZGV4ID4gLTEpIHtcbiAgICAgIC8vIHRoZSBmb2N1c2VkIHZhbHVlIGlzIHN0aWxsIGluIHRoZSBzZWxlY3RWYWx1ZSwgcmV0dXJuIGl0XG4gICAgICByZXR1cm4gZm9jdXNlZFZhbHVlO1xuICAgIH0gZWxzZSBpZiAobGFzdEZvY3VzZWRJbmRleCA8IG5leHRTZWxlY3RWYWx1ZS5sZW5ndGgpIHtcbiAgICAgIC8vIHRoZSBmb2N1c2VkVmFsdWUgaXMgbm90IHByZXNlbnQgaW4gdGhlIG5leHQgc2VsZWN0VmFsdWUgYXJyYXkgYnlcbiAgICAgIC8vIHJlZmVyZW5jZSwgc28gcmV0dXJuIHRoZSBuZXcgdmFsdWUgYXQgdGhlIHNhbWUgaW5kZXhcbiAgICAgIHJldHVybiBuZXh0U2VsZWN0VmFsdWVbbGFzdEZvY3VzZWRJbmRleF07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEZvY3VzZWRPcHRpb24oc3RhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RGb2N1c2VkT3B0aW9uID0gc3RhdGUuZm9jdXNlZE9wdGlvbjtcbiAgcmV0dXJuIGxhc3RGb2N1c2VkT3B0aW9uICYmIG9wdGlvbnMuaW5kZXhPZihsYXN0Rm9jdXNlZE9wdGlvbikgPiAtMSA/IGxhc3RGb2N1c2VkT3B0aW9uIDogb3B0aW9uc1swXTtcbn1cbnZhciBnZXRGb2N1c2VkT3B0aW9uSWQgPSBmdW5jdGlvbiBnZXRGb2N1c2VkT3B0aW9uSWQoZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMsIGZvY3VzZWRPcHRpb24pIHtcbiAgdmFyIF9mb2N1c2FibGVPcHRpb25zV2l0aDtcbiAgdmFyIGZvY3VzZWRPcHRpb25JZCA9IChfZm9jdXNhYmxlT3B0aW9uc1dpdGggPSBmb2N1c2FibGVPcHRpb25zV2l0aElkcy5maW5kKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLmRhdGEgPT09IGZvY3VzZWRPcHRpb247XG4gIH0pKSA9PT0gbnVsbCB8fCBfZm9jdXNhYmxlT3B0aW9uc1dpdGggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mb2N1c2FibGVPcHRpb25zV2l0aC5pZDtcbiAgcmV0dXJuIGZvY3VzZWRPcHRpb25JZCB8fCBudWxsO1xufTtcbnZhciBnZXRPcHRpb25MYWJlbCA9IGZ1bmN0aW9uIGdldE9wdGlvbkxhYmVsKHByb3BzLCBkYXRhKSB7XG4gIHJldHVybiBwcm9wcy5nZXRPcHRpb25MYWJlbChkYXRhKTtcbn07XG52YXIgZ2V0T3B0aW9uVmFsdWUgPSBmdW5jdGlvbiBnZXRPcHRpb25WYWx1ZShwcm9wcywgZGF0YSkge1xuICByZXR1cm4gcHJvcHMuZ2V0T3B0aW9uVmFsdWUoZGF0YSk7XG59O1xuZnVuY3Rpb24gX2lzT3B0aW9uRGlzYWJsZWQocHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBwcm9wcy5pc09wdGlvbkRpc2FibGVkID09PSAnZnVuY3Rpb24nID8gcHJvcHMuaXNPcHRpb25EaXNhYmxlZChvcHRpb24sIHNlbGVjdFZhbHVlKSA6IGZhbHNlO1xufVxuZnVuY3Rpb24gX2lzT3B0aW9uU2VsZWN0ZWQocHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpIHtcbiAgaWYgKHNlbGVjdFZhbHVlLmluZGV4T2Yob3B0aW9uKSA+IC0xKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHR5cGVvZiBwcm9wcy5pc09wdGlvblNlbGVjdGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHByb3BzLmlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG4gIH1cbiAgdmFyIGNhbmRpZGF0ZSA9IGdldE9wdGlvblZhbHVlKHByb3BzLCBvcHRpb24pO1xuICByZXR1cm4gc2VsZWN0VmFsdWUuc29tZShmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBnZXRPcHRpb25WYWx1ZShwcm9wcywgaSkgPT09IGNhbmRpZGF0ZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBfZmlsdGVyT3B0aW9uKHByb3BzLCBvcHRpb24sIGlucHV0VmFsdWUpIHtcbiAgcmV0dXJuIHByb3BzLmZpbHRlck9wdGlvbiA/IHByb3BzLmZpbHRlck9wdGlvbihvcHRpb24sIGlucHV0VmFsdWUpIDogdHJ1ZTtcbn1cbnZhciBzaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zID0gZnVuY3Rpb24gc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyhwcm9wcykge1xuICB2YXIgaGlkZVNlbGVjdGVkT3B0aW9ucyA9IHByb3BzLmhpZGVTZWxlY3RlZE9wdGlvbnMsXG4gICAgaXNNdWx0aSA9IHByb3BzLmlzTXVsdGk7XG4gIGlmIChoaWRlU2VsZWN0ZWRPcHRpb25zID09PSB1bmRlZmluZWQpIHJldHVybiBpc011bHRpO1xuICByZXR1cm4gaGlkZVNlbGVjdGVkT3B0aW9ucztcbn07XG52YXIgaW5zdGFuY2VJZCA9IDE7XG52YXIgU2VsZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTZWxlY3QsIF9Db21wb25lbnQpO1xuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFNlbGVjdCk7XG4gIC8vIE1pc2MuIEluc3RhbmNlIFByb3BlcnRpZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVE9ET1xuXG4gIC8vIFJlZnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gTGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGZ1bmN0aW9uIFNlbGVjdChfcHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlbGVjdCk7XG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBfcHJvcHMpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYXJpYVNlbGVjdGlvbjogbnVsbCxcbiAgICAgIGZvY3VzZWRPcHRpb246IG51bGwsXG4gICAgICBmb2N1c2VkT3B0aW9uSWQ6IG51bGwsXG4gICAgICBmb2N1c2FibGVPcHRpb25zV2l0aElkczogW10sXG4gICAgICBmb2N1c2VkVmFsdWU6IG51bGwsXG4gICAgICBpbnB1dElzSGlkZGVuOiBmYWxzZSxcbiAgICAgIGlzRm9jdXNlZDogZmFsc2UsXG4gICAgICBzZWxlY3RWYWx1ZTogW10sXG4gICAgICBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZTogZmFsc2UsXG4gICAgICBwcmV2V2FzRm9jdXNlZDogZmFsc2UsXG4gICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IHVuZGVmaW5lZCxcbiAgICAgIHByZXZQcm9wczogdW5kZWZpbmVkLFxuICAgICAgaW5zdGFuY2VQcmVmaXg6ICcnXG4gICAgfTtcbiAgICBfdGhpcy5ibG9ja09wdGlvbkhvdmVyID0gZmFsc2U7XG4gICAgX3RoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICBfdGhpcy5jb21tb25Qcm9wcyA9IHZvaWQgMDtcbiAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gMDtcbiAgICBfdGhpcy5pbml0aWFsVG91Y2hZID0gMDtcbiAgICBfdGhpcy5vcGVuQWZ0ZXJGb2N1cyA9IGZhbHNlO1xuICAgIF90aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gZmFsc2U7XG4gICAgX3RoaXMudXNlcklzRHJhZ2dpbmcgPSB2b2lkIDA7XG4gICAgX3RoaXMuaXNBcHBsZURldmljZSA9IGlzQXBwbGVEZXZpY2UoKTtcbiAgICBfdGhpcy5jb250cm9sUmVmID0gbnVsbDtcbiAgICBfdGhpcy5nZXRDb250cm9sUmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuY29udHJvbFJlZiA9IHJlZjtcbiAgICB9O1xuICAgIF90aGlzLmZvY3VzZWRPcHRpb25SZWYgPSBudWxsO1xuICAgIF90aGlzLmdldEZvY3VzZWRPcHRpb25SZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5mb2N1c2VkT3B0aW9uUmVmID0gcmVmO1xuICAgIH07XG4gICAgX3RoaXMubWVudUxpc3RSZWYgPSBudWxsO1xuICAgIF90aGlzLmdldE1lbnVMaXN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubWVudUxpc3RSZWYgPSByZWY7XG4gICAgfTtcbiAgICBfdGhpcy5pbnB1dFJlZiA9IG51bGw7XG4gICAgX3RoaXMuZ2V0SW5wdXRSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5pbnB1dFJlZiA9IHJlZjtcbiAgICB9O1xuICAgIF90aGlzLmZvY3VzID0gX3RoaXMuZm9jdXNJbnB1dDtcbiAgICBfdGhpcy5ibHVyID0gX3RoaXMuYmx1cklucHV0O1xuICAgIF90aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZSxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzLm5hbWU7XG4gICAgICBhY3Rpb25NZXRhLm5hbWUgPSBuYW1lO1xuICAgICAgX3RoaXMuYXJpYU9uQ2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKTtcbiAgICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKTtcbiAgICB9O1xuICAgIF90aGlzLnNldFZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlLCBhY3Rpb24sIG9wdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICBjbG9zZU1lbnVPblNlbGVjdCA9IF90aGlzJHByb3BzMi5jbG9zZU1lbnVPblNlbGVjdCxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMi5pc011bHRpLFxuICAgICAgICBpbnB1dFZhbHVlID0gX3RoaXMkcHJvcHMyLmlucHV0VmFsdWU7XG4gICAgICBfdGhpcy5vbklucHV0Q2hhbmdlKCcnLCB7XG4gICAgICAgIGFjdGlvbjogJ3NldC12YWx1ZScsXG4gICAgICAgIHByZXZJbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICB9KTtcbiAgICAgIGlmIChjbG9zZU1lbnVPblNlbGVjdCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiAhaXNNdWx0aVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIC8vIHdoZW4gdGhlIHNlbGVjdCB2YWx1ZSBzaG91bGQgY2hhbmdlLCB3ZSBzaG91bGQgcmVzZXQgZm9jdXNlZFZhbHVlXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLCB7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBvcHRpb246IG9wdGlvblxuICAgICAgfSk7XG4gICAgfTtcbiAgICBfdGhpcy5zZWxlY3RPcHRpb24gPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgYmx1cklucHV0T25TZWxlY3QgPSBfdGhpcyRwcm9wczMuYmx1cklucHV0T25TZWxlY3QsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczMuaXNNdWx0aSxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMy5uYW1lO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgZGVzZWxlY3RlZCA9IGlzTXVsdGkgJiYgX3RoaXMuaXNPcHRpb25TZWxlY3RlZChuZXdWYWx1ZSwgc2VsZWN0VmFsdWUpO1xuICAgICAgdmFyIGlzRGlzYWJsZWQgPSBfdGhpcy5pc09wdGlvbkRpc2FibGVkKG5ld1ZhbHVlLCBzZWxlY3RWYWx1ZSk7XG4gICAgICBpZiAoZGVzZWxlY3RlZCkge1xuICAgICAgICB2YXIgY2FuZGlkYXRlID0gX3RoaXMuZ2V0T3B0aW9uVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICBfdGhpcy5zZXRWYWx1ZShtdWx0aVZhbHVlQXNWYWx1ZShzZWxlY3RWYWx1ZS5maWx0ZXIoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZ2V0T3B0aW9uVmFsdWUoaSkgIT09IGNhbmRpZGF0ZTtcbiAgICAgICAgfSkpLCAnZGVzZWxlY3Qtb3B0aW9uJywgbmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghaXNEaXNhYmxlZCkge1xuICAgICAgICAvLyBTZWxlY3Qgb3B0aW9uIGlmIG9wdGlvbiBpcyBub3QgZGlzYWJsZWRcbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICBfdGhpcy5zZXRWYWx1ZShtdWx0aVZhbHVlQXNWYWx1ZShbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHNlbGVjdFZhbHVlKSwgW25ld1ZhbHVlXSkpLCAnc2VsZWN0LW9wdGlvbicsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5zZXRWYWx1ZShzaW5nbGVWYWx1ZUFzVmFsdWUobmV3VmFsdWUpLCAnc2VsZWN0LW9wdGlvbicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5hcmlhT25DaGFuZ2Uoc2luZ2xlVmFsdWVBc1ZhbHVlKG5ld1ZhbHVlKSwge1xuICAgICAgICAgIGFjdGlvbjogJ3NlbGVjdC1vcHRpb24nLFxuICAgICAgICAgIG9wdGlvbjogbmV3VmFsdWUsXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGJsdXJJbnB1dE9uU2VsZWN0KSB7XG4gICAgICAgIF90aGlzLmJsdXJJbnB1dCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMucmVtb3ZlVmFsdWUgPSBmdW5jdGlvbiAocmVtb3ZlZFZhbHVlKSB7XG4gICAgICB2YXIgaXNNdWx0aSA9IF90aGlzLnByb3BzLmlzTXVsdGk7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIHZhciBjYW5kaWRhdGUgPSBfdGhpcy5nZXRPcHRpb25WYWx1ZShyZW1vdmVkVmFsdWUpO1xuICAgICAgdmFyIG5ld1ZhbHVlQXJyYXkgPSBzZWxlY3RWYWx1ZS5maWx0ZXIoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmdldE9wdGlvblZhbHVlKGkpICE9PSBjYW5kaWRhdGU7XG4gICAgICB9KTtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHZhbHVlVGVybmFyeShpc011bHRpLCBuZXdWYWx1ZUFycmF5LCBuZXdWYWx1ZUFycmF5WzBdIHx8IG51bGwpO1xuICAgICAgX3RoaXMub25DaGFuZ2UobmV3VmFsdWUsIHtcbiAgICAgICAgYWN0aW9uOiAncmVtb3ZlLXZhbHVlJyxcbiAgICAgICAgcmVtb3ZlZFZhbHVlOiByZW1vdmVkVmFsdWVcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH07XG4gICAgX3RoaXMuY2xlYXJWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgX3RoaXMub25DaGFuZ2UodmFsdWVUZXJuYXJ5KF90aGlzLnByb3BzLmlzTXVsdGksIFtdLCBudWxsKSwge1xuICAgICAgICBhY3Rpb246ICdjbGVhcicsXG4gICAgICAgIHJlbW92ZWRWYWx1ZXM6IHNlbGVjdFZhbHVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIF90aGlzLnBvcFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGlzTXVsdGkgPSBfdGhpcy5wcm9wcy5pc011bHRpO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgbGFzdFNlbGVjdGVkVmFsdWUgPSBzZWxlY3RWYWx1ZVtzZWxlY3RWYWx1ZS5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBuZXdWYWx1ZUFycmF5ID0gc2VsZWN0VmFsdWUuc2xpY2UoMCwgc2VsZWN0VmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICB2YXIgbmV3VmFsdWUgPSB2YWx1ZVRlcm5hcnkoaXNNdWx0aSwgbmV3VmFsdWVBcnJheSwgbmV3VmFsdWVBcnJheVswXSB8fCBudWxsKTtcbiAgICAgIGlmIChsYXN0U2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSwge1xuICAgICAgICAgIGFjdGlvbjogJ3BvcC12YWx1ZScsXG4gICAgICAgICAgcmVtb3ZlZFZhbHVlOiBsYXN0U2VsZWN0ZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLmdldEZvY3VzZWRPcHRpb25JZCA9IGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9jdXNlZE9wdGlvbklkKF90aGlzLnN0YXRlLmZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKTtcbiAgICB9O1xuICAgIF90aGlzLmdldEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMoYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMoX3RoaXMucHJvcHMsIF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlKSwgX3RoaXMuZ2V0RWxlbWVudElkKCdvcHRpb24nKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICB9O1xuICAgIF90aGlzLmN4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3NOYW1lcy5hcHBseSh2b2lkIDAsIFtfdGhpcy5wcm9wcy5jbGFzc05hbWVQcmVmaXhdLmNvbmNhdChhcmdzKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRPcHRpb25MYWJlbCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gZ2V0T3B0aW9uTGFiZWwoX3RoaXMucHJvcHMsIGRhdGEpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0T3B0aW9uVmFsdWUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIGdldE9wdGlvblZhbHVlKF90aGlzLnByb3BzLCBkYXRhKTtcbiAgICB9O1xuICAgIF90aGlzLmdldFN0eWxlcyA9IGZ1bmN0aW9uIChrZXksIHByb3BzKSB7XG4gICAgICB2YXIgdW5zdHlsZWQgPSBfdGhpcy5wcm9wcy51bnN0eWxlZDtcbiAgICAgIHZhciBiYXNlID0gZGVmYXVsdFN0eWxlc1trZXldKHByb3BzLCB1bnN0eWxlZCk7XG4gICAgICBiYXNlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICAgIHZhciBjdXN0b20gPSBfdGhpcy5wcm9wcy5zdHlsZXNba2V5XTtcbiAgICAgIHJldHVybiBjdXN0b20gPyBjdXN0b20oYmFzZSwgcHJvcHMpIDogYmFzZTtcbiAgICB9O1xuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAoa2V5LCBwcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGNsYXNzTmFtZSwgX3RoaXMkcHJvcHMkY2xhc3NOYW1lMjtcbiAgICAgIHJldHVybiAoX3RoaXMkcHJvcHMkY2xhc3NOYW1lID0gKF90aGlzJHByb3BzJGNsYXNzTmFtZTIgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzKVtrZXldKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRjbGFzc05hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJGNsYXNzTmFtZS5jYWxsKF90aGlzJHByb3BzJGNsYXNzTmFtZTIsIHByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoX3RoaXMuc3RhdGUuaW5zdGFuY2VQcmVmaXgsIFwiLVwiKS5jb25jYXQoZWxlbWVudCk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRDb21wb25lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb21wb25lbnRzKF90aGlzLnByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKF90aGlzLnByb3BzLCBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRDYXRlZ29yaXplZE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubWVudUlzT3BlbiA/IF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKCkgOiBbXTtcbiAgICB9O1xuICAgIF90aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBidWlsZEZvY3VzYWJsZU9wdGlvbnNGcm9tQ2F0ZWdvcml6ZWRPcHRpb25zKF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKCkpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5tZW51SXNPcGVuID8gX3RoaXMuYnVpbGRGb2N1c2FibGVPcHRpb25zKCkgOiBbXTtcbiAgICB9O1xuICAgIF90aGlzLmFyaWFPbkNoYW5nZSA9IGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhcmlhU2VsZWN0aW9uOiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSwgYWN0aW9uTWV0YSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMub25NZW51TW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9O1xuICAgIF90aGlzLm9uTWVudU1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IGZhbHNlO1xuICAgIH07XG4gICAgX3RoaXMub25Db250cm9sTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBFdmVudCBjYXB0dXJlZCBieSBkcm9wZG93biBpbmRpY2F0b3JcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvcGVuTWVudU9uQ2xpY2sgPSBfdGhpcy5wcm9wcy5vcGVuTWVudU9uQ2xpY2s7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICBpZiAob3Blbk1lbnVPbkNsaWNrKSB7XG4gICAgICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLnByb3BzLm1lbnVJc09wZW4pIHtcbiAgICAgICAgaWYgKG9wZW5NZW51T25DbGljaykge1xuICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSB0aGUgcHJpbWFyeSBidXR0b25cbiAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnByb3BzLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNC5pc011bHRpLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM0Lm1lbnVJc09wZW47XG4gICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiAhaXNNdWx0aVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSB0aGUgcHJpbWFyeSBidXR0b25cbiAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF90aGlzLm9wZW5BZnRlckZvY3VzID0gZmFsc2U7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uU2Nyb2xsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGlzRG9jdW1lbnRFbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5jbG9zZU1lbnVPblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuY2xvc2VNZW51T25TY3JvbGwoZXZlbnQpKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMub25Db21wb3NpdGlvblN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgIH07XG4gICAgX3RoaXMub25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgfTtcbiAgICBfdGhpcy5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB0b3VjaGVzID0gX3JlZjIudG91Y2hlcztcbiAgICAgIHZhciB0b3VjaCA9IHRvdWNoZXMgJiYgdG91Y2hlcy5pdGVtKDApO1xuICAgICAgaWYgKCF0b3VjaCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gdG91Y2guY2xpZW50WDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSB0b3VjaC5jbGllbnRZO1xuICAgICAgX3RoaXMudXNlcklzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgdG91Y2hlcyA9IF9yZWYzLnRvdWNoZXM7XG4gICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzICYmIHRvdWNoZXMuaXRlbSgwKTtcbiAgICAgIGlmICghdG91Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGRlbHRhWCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSBfdGhpcy5pbml0aWFsVG91Y2hYKTtcbiAgICAgIHZhciBkZWx0YVkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gX3RoaXMuaW5pdGlhbFRvdWNoWSk7XG4gICAgICB2YXIgbW92ZVRocmVzaG9sZCA9IDU7XG4gICAgICBfdGhpcy51c2VySXNEcmFnZ2luZyA9IGRlbHRhWCA+IG1vdmVUaHJlc2hvbGQgfHwgZGVsdGFZID4gbW92ZVRocmVzaG9sZDtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgICAvLyBjbG9zZSB0aGUgbWVudSBpZiB0aGUgdXNlciB0YXBzIG91dHNpZGVcbiAgICAgIC8vIHdlJ3JlIGNoZWNraW5nIG9uIGV2ZW50LnRhcmdldCBoZXJlIGluc3RlYWQgb2YgZXZlbnQuY3VycmVudFRhcmdldCwgYmVjYXVzZSB3ZSB3YW50IHRvIGFzc2VydCBpbmZvcm1hdGlvblxuICAgICAgLy8gb24gZXZlbnRzIG9uIGNoaWxkIGVsZW1lbnRzLCBub3QgdGhlIGRvY3VtZW50ICh3aGljaCB3ZSd2ZSBhdHRhY2hlZCB0aGlzIGhhbmRsZXIgdG8pLlxuICAgICAgaWYgKF90aGlzLmNvbnRyb2xSZWYgJiYgIV90aGlzLmNvbnRyb2xSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiBfdGhpcy5tZW51TGlzdFJlZiAmJiAhX3RoaXMubWVudUxpc3RSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVzZXQgbW92ZSB2YXJzXG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gMDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSAwO1xuICAgIH07XG4gICAgX3RoaXMub25Db250cm9sVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuICAgICAgX3RoaXMub25Db250cm9sTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkNsZWFySW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLmhhbmRsZUlucHV0Q2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldklucHV0VmFsdWUgPSBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgdmFyIGlucHV0VmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwge1xuICAgICAgICBhY3Rpb246ICdpbnB1dC1jaGFuZ2UnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogcHJldklucHV0VmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5tZW51SXNPcGVuKSB7XG4gICAgICAgIF90aGlzLm9uTWVudU9wZW4oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2UsXG4gICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoX3RoaXMub3BlbkFmdGVyRm9jdXMgfHwgX3RoaXMucHJvcHMub3Blbk1lbnVPbkZvY3VzKSB7XG4gICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgfVxuICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uSW5wdXRCbHVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldklucHV0VmFsdWUgPSBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgaWYgKF90aGlzLm1lbnVMaXN0UmVmICYmIF90aGlzLm1lbnVMaXN0UmVmLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIF90aGlzLmlucHV0UmVmLmZvY3VzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgYWN0aW9uOiAnaW5wdXQtYmx1cicsXG4gICAgICAgIHByZXZJbnB1dFZhbHVlOiBwcmV2SW5wdXRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkVmFsdWU6IG51bGwsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMub25PcHRpb25Ib3ZlciA9IGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICBpZiAoX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciB8fCBfdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uID09PSBmb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25zID0gX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb25JbmRleCA9IG9wdGlvbnMuaW5kZXhPZihmb2N1c2VkT3B0aW9uKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiBmb2N1c2VkT3B0aW9uSW5kZXggPiAtMSA/IF90aGlzLmdldEZvY3VzZWRPcHRpb25JZChmb2N1c2VkT3B0aW9uKSA6IG51bGxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMuc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zKF90aGlzLnByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLm9uVmFsdWVJbnB1dEZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBfdGhpcy5mb2N1cygpO1xuICAgIH07XG4gICAgX3RoaXMub25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczUuaXNNdWx0aSxcbiAgICAgICAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlID0gX3RoaXMkcHJvcHM1LmJhY2tzcGFjZVJlbW92ZXNWYWx1ZSxcbiAgICAgICAgZXNjYXBlQ2xlYXJzVmFsdWUgPSBfdGhpcyRwcm9wczUuZXNjYXBlQ2xlYXJzVmFsdWUsXG4gICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRwcm9wczUuaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczUuaXNDbGVhcmFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczUuaXNEaXNhYmxlZCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNS5tZW51SXNPcGVuLFxuICAgICAgICBvbktleURvd24gPSBfdGhpcyRwcm9wczUub25LZXlEb3duLFxuICAgICAgICB0YWJTZWxlY3RzVmFsdWUgPSBfdGhpcyRwcm9wczUudGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgICBvcGVuTWVudU9uRm9jdXMgPSBfdGhpcyRwcm9wczUub3Blbk1lbnVPbkZvY3VzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZS5mb2N1c2VkT3B0aW9uLFxuICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKHR5cGVvZiBvbktleURvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmxvY2sgb3B0aW9uIGhvdmVyIGV2ZW50cyB3aGVuIHRoZSB1c2VyIGhhcyBqdXN0IHByZXNzZWQgYSBrZXlcbiAgICAgIF90aGlzLmJsb2NrT3B0aW9uSG92ZXIgPSB0cnVlO1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICBpZiAoIWlzTXVsdGkgfHwgaW5wdXRWYWx1ZSkgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzVmFsdWUoJ3ByZXZpb3VzJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgIGlmICghaXNNdWx0aSB8fCBpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgX3RoaXMuZm9jdXNWYWx1ZSgnbmV4dCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgaWYgKGZvY3VzZWRWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMucmVtb3ZlVmFsdWUoZm9jdXNlZFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFiYWNrc3BhY2VSZW1vdmVzVmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICAgIF90aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2xlYXJhYmxlKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgaWYgKF90aGlzLmlzQ29tcG9zaW5nKSByZXR1cm47XG4gICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8ICFtZW51SXNPcGVuIHx8ICF0YWJTZWxlY3RzVmFsdWUgfHwgIWZvY3VzZWRPcHRpb24gfHxcbiAgICAgICAgICAvLyBkb24ndCBjYXB0dXJlIHRoZSBldmVudCBpZiB0aGUgbWVudSBvcGVucyBvbiBmb2N1cyBhbmQgdGhlIGZvY3VzZWRcbiAgICAgICAgICAvLyBvcHRpb24gaXMgYWxyZWFkeSBzZWxlY3RlZDsgaXQgYnJlYWtzIHRoZSBmbG93IG9mIG5hdmlnYXRpb25cbiAgICAgICAgICBvcGVuTWVudU9uRm9jdXMgJiYgX3RoaXMuaXNPcHRpb25TZWxlY3RlZChmb2N1c2VkT3B0aW9uLCBzZWxlY3RWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDIyOSkge1xuICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBrZXlkb3duIGV2ZW50IGZyb20gYW4gSW5wdXQgTWV0aG9kIEVkaXRvcihJTUUpXG4gICAgICAgICAgICAvLyByZWYuIGh0dHBzOi8vd3d3LnczLm9yZy9UUi91aWV2ZW50cy8jZGV0ZXJtaW5lLWtleWRvd24ta2V5dXAta2V5Q29kZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtZW51SXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHJldHVybjtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0NvbXBvc2luZykgcmV0dXJuO1xuICAgICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgICAgICAgYWN0aW9uOiAnbWVudS1jbG9zZScsXG4gICAgICAgICAgICAgIHByZXZJbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0NsZWFyYWJsZSAmJiBlc2NhcGVDbGVhcnNWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZm9jdXNlZE9wdGlvbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLnNlbGVjdE9wdGlvbihmb2N1c2VkT3B0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCd1cCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTWVudSgnbGFzdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ2Rvd24nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdldXAnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdlZG93bicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignZmlyc3QnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignbGFzdCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcbiAgICBfdGhpcy5zdGF0ZS5pbnN0YW5jZVByZWZpeCA9ICdyZWFjdC1zZWxlY3QtJyArIChfdGhpcy5wcm9wcy5pbnN0YW5jZUlkIHx8ICsraW5zdGFuY2VJZCk7XG4gICAgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUgPSBjbGVhblZhbHVlKF9wcm9wcy52YWx1ZSk7XG4gICAgLy8gU2V0IGZvY3VzZWRPcHRpb24gaWYgbWVudUlzT3BlbiBpcyBzZXQgb24gaW5pdCAoZS5nLiBkZWZhdWx0TWVudUlzT3BlbilcbiAgICBpZiAoX3Byb3BzLm1lbnVJc09wZW4gJiYgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMgPSBfdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zV2l0aElkcygpO1xuICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSBfdGhpcy5idWlsZEZvY3VzYWJsZU9wdGlvbnMoKTtcbiAgICAgIHZhciBvcHRpb25JbmRleCA9IGZvY3VzYWJsZU9wdGlvbnMuaW5kZXhPZihfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZVswXSk7XG4gICAgICBfdGhpcy5zdGF0ZS5mb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzO1xuICAgICAgX3RoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiA9IGZvY3VzYWJsZU9wdGlvbnNbb3B0aW9uSW5kZXhdO1xuICAgICAgX3RoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbklkID0gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2FibGVPcHRpb25zW29wdGlvbkluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfY3JlYXRlQ2xhc3MoU2VsZWN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc3RhcnRMaXN0ZW5pbmdDb21wb3NpdGlvbigpO1xuICAgICAgdGhpcy5zdGFydExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgLy8gTGlzdGVuIHRvIGFsbCBzY3JvbGwgZXZlbnRzLCBhbmQgZmlsdGVyIHRoZW0gb3V0IGluc2lkZSBvZiAnb25TY3JvbGwnXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTY3JvbGwgZm9jdXNlZE9wdGlvbiBpbnRvIHZpZXcgaWYgbWVudUlzT3BlbiBpcyBzZXQgb24gbW91bnQgKGUuZy4gZGVmYXVsdE1lbnVJc09wZW4pXG4gICAgICBpZiAodGhpcy5wcm9wcy5tZW51SXNPcGVuICYmIHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiAmJiB0aGlzLm1lbnVMaXN0UmVmICYmIHRoaXMuZm9jdXNlZE9wdGlvblJlZikge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczYuaXNEaXNhYmxlZCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNi5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKFxuICAgICAgLy8gZW5zdXJlIGZvY3VzIGlzIHJlc3RvcmVkIGNvcnJlY3RseSB3aGVuIHRoZSBjb250cm9sIGJlY29tZXMgZW5hYmxlZFxuICAgICAgaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkIHx8XG4gICAgICAvLyBlbnN1cmUgZm9jdXMgaXMgb24gdGhlIElucHV0IHdoZW4gdGhlIG1lbnUgb3BlbnNcbiAgICAgIGlzRm9jdXNlZCAmJiBtZW51SXNPcGVuICYmICFwcmV2UHJvcHMubWVudUlzT3Blbikge1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0ZvY3VzZWQgJiYgaXNEaXNhYmxlZCAmJiAhcHJldlByb3BzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHNlbGVjdCBzdGF0ZSBnZXRzIGJsdXJyZWQgaW4gY2FzZSBTZWxlY3QgaXMgcHJvZ3JhbW1hdGljYWxseSBkaXNhYmxlZCB3aGlsZSBmb2N1c2VkXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICAgIH0sIHRoaXMub25NZW51Q2xvc2UpO1xuICAgICAgfSBlbHNlIGlmICghaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkICYmIHRoaXMuaW5wdXRSZWYgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHNlbGVjdCBzdGF0ZSBnZXRzIGZvY3VzZWQgaW4gY2FzZSBTZWxlY3QgaXMgcHJvZ3JhbWF0aWNhbGx5IHJlLWVuYWJsZWQgd2hpbGUgZm9jdXNlZCAoRmlyZWZveClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2Nyb2xsIHRoZSBmb2N1c2VkIG9wdGlvbiBpbnRvIHZpZXcgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAodGhpcy5tZW51TGlzdFJlZiAmJiB0aGlzLmZvY3VzZWRPcHRpb25SZWYgJiYgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSkge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nQ29tcG9zaXRpb24oKTtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbnN1bWVyIEhhbmRsZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIH0sIHtcbiAgICBrZXk6IFwib25NZW51T3BlblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1lbnVPcGVuKCkge1xuICAgICAgdGhpcy5wcm9wcy5vbk1lbnVPcGVuKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uTWVudUNsb3NlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKCcnLCB7XG4gICAgICAgIGFjdGlvbjogJ21lbnUtY2xvc2UnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogdGhpcy5wcm9wcy5pbnB1dFZhbHVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25JbnB1dENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbklucHV0Q2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICB0aGlzLnByb3BzLm9uSW5wdXRDaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE1ldGhvZHNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c0lucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzSW5wdXQoKSB7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRSZWYpIHJldHVybjtcbiAgICAgIHRoaXMuaW5wdXRSZWYuZm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmx1cklucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJsdXJJbnB1dCgpIHtcbiAgICAgIGlmICghdGhpcy5pbnB1dFJlZikgcmV0dXJuO1xuICAgICAgdGhpcy5pbnB1dFJlZi5ibHVyKCk7XG4gICAgfVxuXG4gICAgLy8gYWxpYXNlZCBmb3IgY29uc3VtZXJzXG4gIH0sIHtcbiAgICBrZXk6IFwib3Blbk1lbnVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3Blbk1lbnUoZm9jdXNPcHRpb24pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUyLnNlbGVjdFZhbHVlLFxuICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRzdGF0ZTIuaXNGb2N1c2VkO1xuICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIG9wZW5BdEluZGV4ID0gZm9jdXNPcHRpb24gPT09ICdmaXJzdCcgPyAwIDogZm9jdXNhYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmlzTXVsdGkpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBmb2N1c2FibGVPcHRpb25zLmluZGV4T2Yoc2VsZWN0VmFsdWVbMF0pO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgb3BlbkF0SW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgc2Nyb2xsIGlmIHRoZSBtZW51IGlzbid0IGFscmVhZHkgb3BlblxuICAgICAgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9ICEoaXNGb2N1c2VkICYmIHRoaXMubWVudUxpc3RSZWYpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2UsXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNhYmxlT3B0aW9uc1tvcGVuQXRJbmRleF0sXG4gICAgICAgIGZvY3VzZWRPcHRpb25JZDogdGhpcy5nZXRGb2N1c2VkT3B0aW9uSWQoZm9jdXNhYmxlT3B0aW9uc1tvcGVuQXRJbmRleF0pXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub25NZW51T3BlbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNWYWx1ZShkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlMy5zZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGUzLmZvY3VzZWRWYWx1ZTtcblxuICAgICAgLy8gT25seSBtdWx0aXNlbGVjdHMgc3VwcG9ydCB2YWx1ZSBmb2N1c2luZ1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmlzTXVsdGkpIHJldHVybjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBzZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSk7XG4gICAgICBpZiAoIWZvY3VzZWRWYWx1ZSkge1xuICAgICAgICBmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBzZWxlY3RWYWx1ZS5sZW5ndGggLSAxO1xuICAgICAgdmFyIG5leHRGb2N1cyA9IC0xO1xuICAgICAgaWYgKCFzZWxlY3RWYWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkb24ndCBjeWNsZSBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kXG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gaWYgbm90aGluZyBpcyBmb2N1c2VkLCBmb2N1cyB0aGUgbGFzdCB2YWx1ZSBmaXJzdFxuICAgICAgICAgICAgbmV4dEZvY3VzID0gbGFzdEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA+IC0xICYmIGZvY3VzZWRJbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaW5wdXRJc0hpZGRlbjogbmV4dEZvY3VzICE9PSAtMSxcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBzZWxlY3RWYWx1ZVtuZXh0Rm9jdXNdXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNPcHRpb24oKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnZmlyc3QnO1xuICAgICAgdmFyIHBhZ2VTaXplID0gdGhpcy5wcm9wcy5wYWdlU2l6ZTtcbiAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldEZvY3VzYWJsZU9wdGlvbnMoKTtcbiAgICAgIGlmICghb3B0aW9ucy5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBuZXh0Rm9jdXMgPSAwOyAvLyBoYW5kbGVzICdmaXJzdCdcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBvcHRpb25zLmluZGV4T2YoZm9jdXNlZE9wdGlvbik7XG4gICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgZm9jdXNlZEluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCA+IDAgPyBmb2N1c2VkSW5kZXggLSAxIDogb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSAoZm9jdXNlZEluZGV4ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncGFnZXVwJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSBwYWdlU2l6ZTtcbiAgICAgICAgaWYgKG5leHRGb2N1cyA8IDApIG5leHRGb2N1cyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgICAgaWYgKG5leHRGb2N1cyA+IG9wdGlvbnMubGVuZ3RoIC0gMSkgbmV4dEZvY3VzID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsYXN0Jykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBvcHRpb25zW25leHRGb2N1c10sXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiB0aGlzLmdldEZvY3VzZWRPcHRpb25JZChvcHRpb25zW25leHRGb2N1c10pXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VGhlbWVcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBHZXR0ZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICBmdW5jdGlvbiBnZXRUaGVtZSgpIHtcbiAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCB0aGVtZSBpZiB0aGVyZSBhcmUgbm8gY3VzdG9taXNhdGlvbnMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMudGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRUaGVtZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSB0aGVtZSBwcm9wIGlzIGEgZnVuY3Rpb24sIGFzc3VtZSB0aGUgZnVuY3Rpb25cbiAgICAgIC8vIGtub3dzIGhvdyB0byBtZXJnZSB0aGUgcGFzc2VkLWluIGRlZmF1bHQgdGhlbWUgd2l0aFxuICAgICAgLy8gaXRzIG93biBtb2RpZmljYXRpb25zLlxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIGlmIGEgcGxhaW4gdGhlbWUgb2JqZWN0IHdhcyBwYXNzZWQgaW4sXG4gICAgICAvLyBvdmVybGF5IGl0IHdpdGggdGhlIGRlZmF1bHQgdGhlbWUuXG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkZWZhdWx0VGhlbWUpLCB0aGlzLnByb3BzLnRoZW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tbW9uUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tbW9uUHJvcHMoKSB7XG4gICAgICB2YXIgY2xlYXJWYWx1ZSA9IHRoaXMuY2xlYXJWYWx1ZSxcbiAgICAgICAgY3ggPSB0aGlzLmN4LFxuICAgICAgICBnZXRTdHlsZXMgPSB0aGlzLmdldFN0eWxlcyxcbiAgICAgICAgZ2V0Q2xhc3NOYW1lcyA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyxcbiAgICAgICAgZ2V0VmFsdWUgPSB0aGlzLmdldFZhbHVlLFxuICAgICAgICBzZWxlY3RPcHRpb24gPSB0aGlzLnNlbGVjdE9wdGlvbixcbiAgICAgICAgc2V0VmFsdWUgPSB0aGlzLnNldFZhbHVlLFxuICAgICAgICBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICB2YXIgaXNNdWx0aSA9IHByb3BzLmlzTXVsdGksXG4gICAgICAgIGlzUnRsID0gcHJvcHMuaXNSdGwsXG4gICAgICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICAgICAgdmFyIGhhc1ZhbHVlID0gdGhpcy5oYXNWYWx1ZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXJWYWx1ZTogY2xlYXJWYWx1ZSxcbiAgICAgICAgY3g6IGN4LFxuICAgICAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICAgICAgZ2V0Q2xhc3NOYW1lczogZ2V0Q2xhc3NOYW1lcyxcbiAgICAgICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgICAgICBoYXNWYWx1ZTogaGFzVmFsdWUsXG4gICAgICAgIGlzTXVsdGk6IGlzTXVsdGksXG4gICAgICAgIGlzUnRsOiBpc1J0bCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VsZWN0T3B0aW9uOiBzZWxlY3RPcHRpb24sXG4gICAgICAgIHNlbGVjdFByb3BzOiBwcm9wcyxcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgICAgICB0aGVtZTogdGhpcy5nZXRUaGVtZSgpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNWYWx1ZSgpIHtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICByZXR1cm4gc2VsZWN0VmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zKCkubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0NsZWFyYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0NsZWFyYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzNy5pc0NsZWFyYWJsZSxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNy5pc011bHRpO1xuXG4gICAgICAvLyBzaW5nbGUgc2VsZWN0LCBieSBkZWZhdWx0LCBJUyBOT1QgY2xlYXJhYmxlXG4gICAgICAvLyBtdWx0aSBzZWxlY3QsIGJ5IGRlZmF1bHQsIElTIGNsZWFyYWJsZVxuICAgICAgaWYgKGlzQ2xlYXJhYmxlID09PSB1bmRlZmluZWQpIHJldHVybiBpc011bHRpO1xuICAgICAgcmV0dXJuIGlzQ2xlYXJhYmxlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvbkRpc2FibGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9pc09wdGlvbkRpc2FibGVkKHRoaXMucHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvblNlbGVjdGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9pc09wdGlvblNlbGVjdGVkKHRoaXMucHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaWx0ZXJPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlsdGVyT3B0aW9uKG9wdGlvbiwgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9maWx0ZXJPcHRpb24odGhpcy5wcm9wcywgb3B0aW9uLCBpbnB1dFZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0T3B0aW9uTGFiZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0T3B0aW9uTGFiZWwoZGF0YSwgY29udGV4dCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfaW5wdXRWYWx1ZSA9IHRoaXMucHJvcHMuaW5wdXRWYWx1ZTtcbiAgICAgICAgdmFyIF9zZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsKGRhdGEsIHtcbiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgIGlucHV0VmFsdWU6IF9pbnB1dFZhbHVlLFxuICAgICAgICAgIHNlbGVjdFZhbHVlOiBfc2VsZWN0VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25MYWJlbChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0R3JvdXBMYWJlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdEdyb3VwTGFiZWwoZGF0YSk7XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTW91c2UgSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJzdGFydExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ29tcG9zaXRpb24gSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nQ29tcG9zaXRpb24oKSB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JywgdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCB0aGlzLm9uQ29tcG9zaXRpb25FbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RvcExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdDb21wb3NpdGlvbigpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgdGhpcy5vbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVG91Y2ggSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nVG9Ub3VjaCgpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0b3BMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdUb1RvdWNoKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5wdXRcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBSZW5kZXJlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBmdW5jdGlvbiByZW5kZXJJbnB1dCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM4LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzU2VhcmNoYWJsZSA9IF90aGlzJHByb3BzOC5pc1NlYXJjaGFibGUsXG4gICAgICAgIGlucHV0SWQgPSBfdGhpcyRwcm9wczguaW5wdXRJZCxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOC5pbnB1dFZhbHVlLFxuICAgICAgICB0YWJJbmRleCA9IF90aGlzJHByb3BzOC50YWJJbmRleCxcbiAgICAgICAgZm9ybSA9IF90aGlzJHByb3BzOC5mb3JtLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM4Lm1lbnVJc09wZW4sXG4gICAgICAgIHJlcXVpcmVkID0gX3RoaXMkcHJvcHM4LnJlcXVpcmVkO1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgSW5wdXQgPSBfdGhpcyRnZXRDb21wb25lbnRzLklucHV0O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW4gPSBfdGhpcyRzdGF0ZTQuaW5wdXRJc0hpZGRlbixcbiAgICAgICAgYXJpYVNlbGVjdGlvbiA9IF90aGlzJHN0YXRlNC5hcmlhU2VsZWN0aW9uO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpZCA9IGlucHV0SWQgfHwgdGhpcy5nZXRFbGVtZW50SWQoJ2lucHV0Jyk7XG5cbiAgICAgIC8vIGFyaWEgYXR0cmlidXRlcyBtYWtlcyB0aGUgSlNYIFwibm9pc3lcIiwgc2VwYXJhdGVkIGZvciBjbGFyaXR5XG4gICAgICB2YXIgYXJpYUF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBtZW51SXNPcGVuLFxuICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAgICdhcmlhLWVycm9ybWVzc2FnZSc6IHRoaXMucHJvcHNbJ2FyaWEtZXJyb3JtZXNzYWdlJ10sXG4gICAgICAgICdhcmlhLWludmFsaWQnOiB0aGlzLnByb3BzWydhcmlhLWludmFsaWQnXSxcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgJ2FyaWEtcmVxdWlyZWQnOiByZXF1aXJlZCxcbiAgICAgICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IHRoaXMuaXNBcHBsZURldmljZSA/IHVuZGVmaW5lZCA6IHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbklkIHx8ICcnXG4gICAgICB9LCBtZW51SXNPcGVuICYmIHtcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiB0aGlzLmdldEVsZW1lbnRJZCgnbGlzdGJveCcpXG4gICAgICB9KSwgIWlzU2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICdhcmlhLXJlYWRvbmx5JzogdHJ1ZVxuICAgICAgfSksIHRoaXMuaGFzVmFsdWUoKSA/IChhcmlhU2VsZWN0aW9uID09PSBudWxsIHx8IGFyaWFTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyaWFTZWxlY3Rpb24uYWN0aW9uKSA9PT0gJ2luaXRpYWwtaW5wdXQtZm9jdXMnICYmIHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmdldEVsZW1lbnRJZCgnbGl2ZS1yZWdpb24nKVxuICAgICAgfSA6IHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmdldEVsZW1lbnRJZCgncGxhY2Vob2xkZXInKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzU2VhcmNoYWJsZSkge1xuICAgICAgICAvLyB1c2UgYSBkdW1teSBpbnB1dCB0byBtYWludGFpbiBmb2N1cy9ibHVyIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KER1bW15SW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgaW5uZXJSZWY6IHRoaXMuZ2V0SW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiB0aGlzLm9uSW5wdXRCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBub29wLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICBpbnB1dE1vZGU6IFwibm9uZVwiLFxuICAgICAgICAgIGZvcm06IGZvcm0sXG4gICAgICAgICAgdmFsdWU6IFwiXCJcbiAgICAgICAgfSwgYXJpYUF0dHJpYnV0ZXMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGF1dG9DYXBpdGFsaXplOiBcIm5vbmVcIixcbiAgICAgICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiLFxuICAgICAgICBhdXRvQ29ycmVjdDogXCJvZmZcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRJbnB1dFJlZixcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNIaWRkZW46IGlucHV0SXNIaWRkZW4sXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbklucHV0Qmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgZm9ybTogZm9ybSxcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICB9LCBhcmlhQXR0cmlidXRlcykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQbGFjZWhvbGRlck9yVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyUGxhY2Vob2xkZXJPclZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czIgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgTXVsdGlWYWx1ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLk11bHRpVmFsdWUsXG4gICAgICAgIE11bHRpVmFsdWVDb250YWluZXIgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICBNdWx0aVZhbHVlTGFiZWwgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlTGFiZWwsXG4gICAgICAgIE11bHRpVmFsdWVSZW1vdmUgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlUmVtb3ZlLFxuICAgICAgICBTaW5nbGVWYWx1ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLlNpbmdsZVZhbHVlLFxuICAgICAgICBQbGFjZWhvbGRlciA9IF90aGlzJGdldENvbXBvbmVudHMyLlBsYWNlaG9sZGVyO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUgPSBfdGhpcyRwcm9wczkuY29udHJvbFNob3VsZFJlbmRlclZhbHVlLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM5LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczkuaXNNdWx0aSxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOS5pbnB1dFZhbHVlLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzOS5wbGFjZWhvbGRlcjtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlNS5zZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU1LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkc3RhdGU1LmlzRm9jdXNlZDtcbiAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSgpIHx8ICFjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUgPyBudWxsIDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGxhY2Vob2xkZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGtleTogXCJwbGFjZWhvbGRlclwiLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZ2V0RWxlbWVudElkKCdwbGFjZWhvbGRlcicpXG4gICAgICAgICAgfVxuICAgICAgICB9KSwgcGxhY2Vob2xkZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0LCBpbmRleCkge1xuICAgICAgICAgIHZhciBpc09wdGlvbkZvY3VzZWQgPSBvcHQgPT09IGZvY3VzZWRWYWx1ZTtcbiAgICAgICAgICB2YXIga2V5ID0gXCJcIi5jb25jYXQoX3RoaXMzLmdldE9wdGlvbkxhYmVsKG9wdCksIFwiLVwiKS5jb25jYXQoX3RoaXMzLmdldE9wdGlvblZhbHVlKG9wdCkpO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNdWx0aVZhbHVlLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgQ29udGFpbmVyOiBNdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICAgICAgICBMYWJlbDogTXVsdGlWYWx1ZUxhYmVsLFxuICAgICAgICAgICAgICBSZW1vdmU6IE11bHRpVmFsdWVSZW1vdmVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IGlzT3B0aW9uRm9jdXNlZCxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIHJlbW92ZVByb3BzOiB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5yZW1vdmVWYWx1ZShvcHQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblRvdWNoRW5kOiBmdW5jdGlvbiBvblRvdWNoRW5kKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczMucmVtb3ZlVmFsdWUob3B0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiBvcHRcbiAgICAgICAgICB9KSwgX3RoaXMzLmZvcm1hdE9wdGlvbkxhYmVsKG9wdCwgJ3ZhbHVlJykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIHNpbmdsZVZhbHVlID0gc2VsZWN0VmFsdWVbMF07XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2luZ2xlVmFsdWUsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBkYXRhOiBzaW5nbGVWYWx1ZSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMuZm9ybWF0T3B0aW9uTGFiZWwoc2luZ2xlVmFsdWUsICd2YWx1ZScpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ2xlYXJJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czMgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgQ2xlYXJJbmRpY2F0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzMy5DbGVhckluZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczEwLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTAuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCF0aGlzLmlzQ2xlYXJhYmxlKCkgfHwgIUNsZWFySW5kaWNhdG9yIHx8IGlzRGlzYWJsZWQgfHwgIXRoaXMuaGFzVmFsdWUoKSB8fCBpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25DbGVhckluZGljYXRvck1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkNsZWFySW5kaWNhdG9yVG91Y2hFbmQsXG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDbGVhckluZGljYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckxvYWRpbmdJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ0luZGljYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNCA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBMb2FkaW5nSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czQuTG9hZGluZ0luZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczExLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTEuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCFMb2FkaW5nSW5kaWNhdG9yIHx8ICFpc0xvYWRpbmcpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGlubmVyUHJvcHMgPSB7XG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckluZGljYXRvclNlcGFyYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNSA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBEcm9wZG93bkluZGljYXRvciA9IF90aGlzJGdldENvbXBvbmVudHM1LkRyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICBJbmRpY2F0b3JTZXBhcmF0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzNS5JbmRpY2F0b3JTZXBhcmF0b3I7XG5cbiAgICAgIC8vIHNlcGFyYXRvciBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCB0aGUgZHJvcGRvd24gaW5kaWNhdG9yXG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yIHx8ICFJbmRpY2F0b3JTZXBhcmF0b3IpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gdGhpcy5wcm9wcy5pc0Rpc2FibGVkO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluZGljYXRvclNlcGFyYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSW5kaWNhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckRyb3Bkb3duSW5kaWNhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM2ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIERyb3Bkb3duSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czYuRHJvcGRvd25JbmRpY2F0b3I7XG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMucHJvcHMuaXNEaXNhYmxlZDtcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcbiAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3Bkb3duSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTWVudVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJNZW51KCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czcgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgR3JvdXAgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Hcm91cCxcbiAgICAgICAgR3JvdXBIZWFkaW5nID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuR3JvdXBIZWFkaW5nLFxuICAgICAgICBNZW51ID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTWVudSxcbiAgICAgICAgTWVudUxpc3QgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5NZW51TGlzdCxcbiAgICAgICAgTWVudVBvcnRhbCA9IF90aGlzJGdldENvbXBvbmVudHM3Lk1lbnVQb3J0YWwsXG4gICAgICAgIExvYWRpbmdNZXNzYWdlID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTG9hZGluZ01lc3NhZ2UsXG4gICAgICAgIE5vT3B0aW9uc01lc3NhZ2UgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Ob09wdGlvbnNNZXNzYWdlLFxuICAgICAgICBPcHRpb24gPSBfdGhpcyRnZXRDb21wb25lbnRzNy5PcHRpb247XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb24gPSB0aGlzLnN0YXRlLmZvY3VzZWRPcHRpb247XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNhcHR1cmVNZW51U2Nyb2xsID0gX3RoaXMkcHJvcHMxMi5jYXB0dXJlTWVudVNjcm9sbCxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMTIuaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMxMi5pc0xvYWRpbmcsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlID0gX3RoaXMkcHJvcHMxMi5sb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgbWluTWVudUhlaWdodCA9IF90aGlzJHByb3BzMTIubWluTWVudUhlaWdodCxcbiAgICAgICAgbWF4TWVudUhlaWdodCA9IF90aGlzJHByb3BzMTIubWF4TWVudUhlaWdodCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzMTIubWVudUlzT3BlbixcbiAgICAgICAgbWVudVBsYWNlbWVudCA9IF90aGlzJHByb3BzMTIubWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uID0gX3RoaXMkcHJvcHMxMi5tZW51UG9zaXRpb24sXG4gICAgICAgIG1lbnVQb3J0YWxUYXJnZXQgPSBfdGhpcyRwcm9wczEyLm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbCA9IF90aGlzJHByb3BzMTIubWVudVNob3VsZEJsb2NrU2Nyb2xsLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSBfdGhpcyRwcm9wczEyLm1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyxcbiAgICAgICAgbm9PcHRpb25zTWVzc2FnZSA9IF90aGlzJHByb3BzMTIubm9PcHRpb25zTWVzc2FnZSxcbiAgICAgICAgb25NZW51U2Nyb2xsVG9Ub3AgPSBfdGhpcyRwcm9wczEyLm9uTWVudVNjcm9sbFRvVG9wLFxuICAgICAgICBvbk1lbnVTY3JvbGxUb0JvdHRvbSA9IF90aGlzJHByb3BzMTIub25NZW51U2Nyb2xsVG9Cb3R0b207XG4gICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBUT0RPOiBJbnRlcm5hbCBPcHRpb24gVHlwZSBoZXJlXG4gICAgICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCBpZCkge1xuICAgICAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGUsXG4gICAgICAgICAgZGF0YSA9IHByb3BzLmRhdGEsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgICAgICB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICAgICAgICB2YXIgaXNGb2N1c2VkID0gZm9jdXNlZE9wdGlvbiA9PT0gZGF0YTtcbiAgICAgICAgdmFyIG9uSG92ZXIgPSBpc0Rpc2FibGVkID8gdW5kZWZpbmVkIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQub25PcHRpb25Ib3ZlcihkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uU2VsZWN0ID0gaXNEaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LnNlbGVjdE9wdGlvbihkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9wdGlvbklkID0gXCJcIi5jb25jYXQoX3RoaXM0LmdldEVsZW1lbnRJZCgnb3B0aW9uJyksIFwiLVwiKS5jb25jYXQoaWQpO1xuICAgICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgICBpZDogb3B0aW9uSWQsXG4gICAgICAgICAgb25DbGljazogb25TZWxlY3QsXG4gICAgICAgICAgb25Nb3VzZU1vdmU6IG9uSG92ZXIsXG4gICAgICAgICAgb25Nb3VzZU92ZXI6IG9uSG92ZXIsXG4gICAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogX3RoaXM0LmlzQXBwbGVEZXZpY2UgPyB1bmRlZmluZWQgOiBpc1NlbGVjdGVkIC8vIGlzIG5vdCBzdXBwb3J0ZWQgb24gQXBwbGUgZGV2aWNlc1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPcHRpb24sIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAga2V5OiBvcHRpb25JZCxcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgICAgaW5uZXJSZWY6IGlzRm9jdXNlZCA/IF90aGlzNC5nZXRGb2N1c2VkT3B0aW9uUmVmIDogdW5kZWZpbmVkXG4gICAgICAgIH0pLCBfdGhpczQuZm9ybWF0T3B0aW9uTGFiZWwocHJvcHMuZGF0YSwgJ21lbnUnKSk7XG4gICAgICB9O1xuICAgICAgdmFyIG1lbnVVSTtcbiAgICAgIGlmICh0aGlzLmhhc09wdGlvbnMoKSkge1xuICAgICAgICBtZW51VUkgPSB0aGlzLmdldENhdGVnb3JpemVkT3B0aW9ucygpLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHZhciBfZGF0YSA9IGl0ZW0uZGF0YSxcbiAgICAgICAgICAgICAgb3B0aW9ucyA9IGl0ZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgZ3JvdXBJbmRleCA9IGl0ZW0uaW5kZXg7XG4gICAgICAgICAgICB2YXIgZ3JvdXBJZCA9IFwiXCIuY29uY2F0KF90aGlzNC5nZXRFbGVtZW50SWQoJ2dyb3VwJyksIFwiLVwiKS5jb25jYXQoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICB2YXIgaGVhZGluZ0lkID0gXCJcIi5jb25jYXQoZ3JvdXBJZCwgXCItaGVhZGluZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAgICAgIGtleTogZ3JvdXBJZCxcbiAgICAgICAgICAgICAgZGF0YTogX2RhdGEsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICAgIEhlYWRpbmc6IEdyb3VwSGVhZGluZyxcbiAgICAgICAgICAgICAgaGVhZGluZ1Byb3BzOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGhlYWRpbmdJZCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLmRhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IF90aGlzNC5mb3JtYXRHcm91cExhYmVsKGl0ZW0uZGF0YSlcbiAgICAgICAgICAgIH0pLCBpdGVtLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihvcHRpb24sIFwiXCIuY29uY2F0KGdyb3VwSW5kZXgsIFwiLVwiKS5jb25jYXQob3B0aW9uLmluZGV4KSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdvcHRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGl0ZW0sIFwiXCIuY29uY2F0KGl0ZW0uaW5kZXgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBsb2FkaW5nTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBtZW51VUkgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nTWVzc2FnZSwgY29tbW9uUHJvcHMsIG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9tZXNzYWdlID0gbm9PcHRpb25zTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKF9tZXNzYWdlID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgbWVudVVJID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm9PcHRpb25zTWVzc2FnZSwgY29tbW9uUHJvcHMsIF9tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHZhciBtZW51UGxhY2VtZW50UHJvcHMgPSB7XG4gICAgICAgIG1pbk1lbnVIZWlnaHQ6IG1pbk1lbnVIZWlnaHQsXG4gICAgICAgIG1heE1lbnVIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICAgIG1lbnVQbGFjZW1lbnQ6IG1lbnVQbGFjZW1lbnQsXG4gICAgICAgIG1lbnVQb3NpdGlvbjogbWVudVBvc2l0aW9uLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXc6IG1lbnVTaG91bGRTY3JvbGxJbnRvVmlld1xuICAgICAgfTtcbiAgICAgIHZhciBtZW51RWxlbWVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQbGFjZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywgbWVudVBsYWNlbWVudFByb3BzKSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICAgIHZhciByZWYgPSBfcmVmNC5yZWYsXG4gICAgICAgICAgX3JlZjQkcGxhY2VyUHJvcHMgPSBfcmVmNC5wbGFjZXJQcm9wcyxcbiAgICAgICAgICBwbGFjZW1lbnQgPSBfcmVmNCRwbGFjZXJQcm9wcy5wbGFjZW1lbnQsXG4gICAgICAgICAgbWF4SGVpZ2h0ID0gX3JlZjQkcGxhY2VyUHJvcHMubWF4SGVpZ2h0O1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBtZW51UGxhY2VtZW50UHJvcHMsIHtcbiAgICAgICAgICBpbm5lclJlZjogcmVmLFxuICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiBfdGhpczQub25NZW51TW91c2VEb3duLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmU6IF90aGlzNC5vbk1lbnVNb3VzZU1vdmVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gICAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxNYW5hZ2VyLCB7XG4gICAgICAgICAgY2FwdHVyZUVuYWJsZWQ6IGNhcHR1cmVNZW51U2Nyb2xsLFxuICAgICAgICAgIG9uVG9wQXJyaXZlOiBvbk1lbnVTY3JvbGxUb1RvcCxcbiAgICAgICAgICBvbkJvdHRvbUFycml2ZTogb25NZW51U2Nyb2xsVG9Cb3R0b20sXG4gICAgICAgICAgbG9ja0VuYWJsZWQ6IG1lbnVTaG91bGRCbG9ja1Njcm9sbFxuICAgICAgICB9LCBmdW5jdGlvbiAoc2Nyb2xsVGFyZ2V0UmVmKSB7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVMaXN0LCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgIGlubmVyUmVmOiBmdW5jdGlvbiBpbm5lclJlZihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICBfdGhpczQuZ2V0TWVudUxpc3RSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICBzY3JvbGxUYXJnZXRSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBjb21tb25Qcm9wcy5pc011bHRpLFxuICAgICAgICAgICAgICBpZDogX3RoaXM0LmdldEVsZW1lbnRJZCgnbGlzdGJveCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCxcbiAgICAgICAgICAgIGZvY3VzZWRPcHRpb246IGZvY3VzZWRPcHRpb25cbiAgICAgICAgICB9KSwgbWVudVVJKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHBvc2l0aW9uaW5nIGJlaGF2aW91ciBpcyBhbG1vc3QgaWRlbnRpY2FsIGZvciBwb3J0YWxsZWQgYW5kIGZpeGVkLFxuICAgICAgLy8gc28gd2UgdXNlIHRoZSBzYW1lIGNvbXBvbmVudC4gdGhlIGFjdHVhbCBwb3J0YWxsaW5nIGxvZ2ljIGlzIGZvcmtlZFxuICAgICAgLy8gd2l0aGluIHRoZSBjb21wb25lbnQgYmFzZWQgb24gYG1lbnVQb3NpdGlvbmBcbiAgICAgIHJldHVybiBtZW51UG9ydGFsVGFyZ2V0IHx8IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQb3J0YWwsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBhcHBlbmRUbzogbWVudVBvcnRhbFRhcmdldCxcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6IHRoaXMuY29udHJvbFJlZixcbiAgICAgICAgbWVudVBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uOiBtZW51UG9zaXRpb25cbiAgICAgIH0pLCBtZW51RWxlbWVudCkgOiBtZW51RWxlbWVudDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRm9ybUZpZWxkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckZvcm1GaWVsZCgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTMgPSB0aGlzLnByb3BzLFxuICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczEzLmRlbGltaXRlcixcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTMuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMTMuaXNNdWx0aSxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMTMubmFtZSxcbiAgICAgICAgcmVxdWlyZWQgPSBfdGhpcyRwcm9wczEzLnJlcXVpcmVkO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIGlmIChyZXF1aXJlZCAmJiAhdGhpcy5oYXNWYWx1ZSgpICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZXF1aXJlZElucHV0JDEsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25WYWx1ZUlucHV0Rm9jdXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIW5hbWUgfHwgaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgaWYgKGRlbGltaXRlcikge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM1LmdldE9wdGlvblZhbHVlKG9wdCk7XG4gICAgICAgICAgfSkuam9pbihkZWxpbWl0ZXIpO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGlucHV0ID0gc2VsZWN0VmFsdWUubGVuZ3RoID4gMCA/IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGtleTogXCJpLVwiLmNvbmNhdChpKSxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzNS5nZXRPcHRpb25WYWx1ZShvcHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSA6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfdmFsdWUgPSBzZWxlY3RWYWx1ZVswXSA/IHRoaXMuZ2V0T3B0aW9uVmFsdWUoc2VsZWN0VmFsdWVbMF0pIDogJyc7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTGl2ZVJlZ2lvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMaXZlUmVnaW9uKCkge1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTYgPSB0aGlzLnN0YXRlLFxuICAgICAgICBhcmlhU2VsZWN0aW9uID0gX3RoaXMkc3RhdGU2LmFyaWFTZWxlY3Rpb24sXG4gICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZTYuZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU2LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkc3RhdGU2LmlzRm9jdXNlZCxcbiAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZTYuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9ucyA9IHRoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExpdmVSZWdpb24kMSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlkOiB0aGlzLmdldEVsZW1lbnRJZCgnbGl2ZS1yZWdpb24nKSxcbiAgICAgICAgYXJpYVNlbGVjdGlvbjogYXJpYVNlbGVjdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkLFxuICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgIGZvY3VzYWJsZU9wdGlvbnM6IGZvY3VzYWJsZU9wdGlvbnMsXG4gICAgICAgIGlzQXBwbGVEZXZpY2U6IHRoaXMuaXNBcHBsZURldmljZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM4ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIENvbnRyb2wgPSBfdGhpcyRnZXRDb21wb25lbnRzOC5Db250cm9sLFxuICAgICAgICBJbmRpY2F0b3JzQ29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguSW5kaWNhdG9yc0NvbnRhaW5lcixcbiAgICAgICAgU2VsZWN0Q29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguU2VsZWN0Q29udGFpbmVyLFxuICAgICAgICBWYWx1ZUNvbnRhaW5lciA9IF90aGlzJGdldENvbXBvbmVudHM4LlZhbHVlQ29udGFpbmVyO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTQgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczE0LmNsYXNzTmFtZSxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczE0LmlkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxNC5pc0Rpc2FibGVkLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHMxNC5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcyA9IHRoaXMuZ2V0Q29tbW9uUHJvcHMoKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3RDb250YWluZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duXG4gICAgICAgIH0sXG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSwgdGhpcy5yZW5kZXJMaXZlUmVnaW9uKCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRyb2wsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRDb250cm9sUmVmLFxuICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Db250cm9sTW91c2VEb3duLFxuICAgICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25Db250cm9sVG91Y2hFbmRcbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgIG1lbnVJc09wZW46IG1lbnVJc09wZW5cbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChWYWx1ZUNvbnRhaW5lciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgIH0pLCB0aGlzLnJlbmRlclBsYWNlaG9sZGVyT3JWYWx1ZSgpLCB0aGlzLnJlbmRlcklucHV0KCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbmRpY2F0b3JzQ29udGFpbmVyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMucmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSwgdGhpcy5yZW5kZXJMb2FkaW5nSW5kaWNhdG9yKCksIHRoaXMucmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yKCksIHRoaXMucmVuZGVyRHJvcGRvd25JbmRpY2F0b3IoKSkpLCB0aGlzLnJlbmRlck1lbnUoKSwgdGhpcy5yZW5kZXJGb3JtRmllbGQoKSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAgIHZhciBwcmV2UHJvcHMgPSBzdGF0ZS5wcmV2UHJvcHMsXG4gICAgICAgIGNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlID0gc3RhdGUuY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSA9IHN0YXRlLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSxcbiAgICAgICAgYXJpYVNlbGVjdGlvbiA9IHN0YXRlLmFyaWFTZWxlY3Rpb24sXG4gICAgICAgIGlzRm9jdXNlZCA9IHN0YXRlLmlzRm9jdXNlZCxcbiAgICAgICAgcHJldldhc0ZvY3VzZWQgPSBzdGF0ZS5wcmV2V2FzRm9jdXNlZCxcbiAgICAgICAgaW5zdGFuY2VQcmVmaXggPSBzdGF0ZS5pbnN0YW5jZVByZWZpeDtcbiAgICAgIHZhciBvcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICAgICAgbWVudUlzT3BlbiA9IHByb3BzLm1lbnVJc09wZW4sXG4gICAgICAgIGlucHV0VmFsdWUgPSBwcm9wcy5pbnB1dFZhbHVlLFxuICAgICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IGNsZWFuVmFsdWUodmFsdWUpO1xuICAgICAgdmFyIG5ld01lbnVPcHRpb25zU3RhdGUgPSB7fTtcbiAgICAgIGlmIChwcmV2UHJvcHMgJiYgKHZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUgfHwgb3B0aW9ucyAhPT0gcHJldlByb3BzLm9wdGlvbnMgfHwgbWVudUlzT3BlbiAhPT0gcHJldlByb3BzLm1lbnVJc09wZW4gfHwgaW5wdXRWYWx1ZSAhPT0gcHJldlByb3BzLmlucHV0VmFsdWUpKSB7XG4gICAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zID0gbWVudUlzT3BlbiA/IGJ1aWxkRm9jdXNhYmxlT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpIDogW107XG4gICAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IG1lbnVJc09wZW4gPyBidWlsZEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzKGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSksIFwiXCIuY29uY2F0KGluc3RhbmNlUHJlZml4LCBcIi1vcHRpb25cIikpIDogW107XG4gICAgICAgIHZhciBmb2N1c2VkVmFsdWUgPSBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZSA/IGdldE5leHRGb2N1c2VkVmFsdWUoc3RhdGUsIHNlbGVjdFZhbHVlKSA6IG51bGw7XG4gICAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gZ2V0TmV4dEZvY3VzZWRPcHRpb24oc3RhdGUsIGZvY3VzYWJsZU9wdGlvbnMpO1xuICAgICAgICB2YXIgZm9jdXNlZE9wdGlvbklkID0gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKTtcbiAgICAgICAgbmV3TWVudU9wdGlvbnNTdGF0ZSA9IHtcbiAgICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IGZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgICBmb2N1c2FibGVPcHRpb25zV2l0aElkczogZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMsXG4gICAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBzb21lIHVwZGF0ZXMgc2hvdWxkIHRvZ2dsZSB0aGUgc3RhdGUgb2YgdGhlIGlucHV0IHZpc2liaWxpdHlcbiAgICAgIHZhciBuZXdJbnB1dElzSGlkZGVuU3RhdGUgPSBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgIT0gbnVsbCAmJiBwcm9wcyAhPT0gcHJldlByb3BzID8ge1xuICAgICAgICBpbnB1dElzSGlkZGVuOiBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogdW5kZWZpbmVkXG4gICAgICB9IDoge307XG4gICAgICB2YXIgbmV3QXJpYVNlbGVjdGlvbiA9IGFyaWFTZWxlY3Rpb247XG4gICAgICB2YXIgaGFzS2VwdEZvY3VzID0gaXNGb2N1c2VkICYmIHByZXZXYXNGb2N1c2VkO1xuICAgICAgaWYgKGlzRm9jdXNlZCAmJiAhaGFzS2VwdEZvY3VzKSB7XG4gICAgICAgIC8vIElmIGB2YWx1ZWAgb3IgYGRlZmF1bHRWYWx1ZWAgcHJvcHMgYXJlIG5vdCBlbXB0eSB0aGVuIGFubm91bmNlIHRoZW1cbiAgICAgICAgLy8gd2hlbiB0aGUgU2VsZWN0IGlzIGluaXRpYWxseSBmb2N1c2VkXG4gICAgICAgIG5ld0FyaWFTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlVGVybmFyeShpc011bHRpLCBzZWxlY3RWYWx1ZSwgc2VsZWN0VmFsdWVbMF0gfHwgbnVsbCksXG4gICAgICAgICAgb3B0aW9uczogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgYWN0aW9uOiAnaW5pdGlhbC1pbnB1dC1mb2N1cydcbiAgICAgICAgfTtcbiAgICAgICAgaGFzS2VwdEZvY3VzID0gIXByZXZXYXNGb2N1c2VkO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgJ2luaXRpYWwtaW5wdXQtZm9jdXMnIGFjdGlvbiBoYXMgYmVlbiBzZXQgYWxyZWFkeVxuICAgICAgLy8gdGhlbiByZXNldCB0aGUgYXJpYVNlbGVjdGlvbiB0byBudWxsXG4gICAgICBpZiAoKGFyaWFTZWxlY3Rpb24gPT09IG51bGwgfHwgYXJpYVNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJpYVNlbGVjdGlvbi5hY3Rpb24pID09PSAnaW5pdGlhbC1pbnB1dC1mb2N1cycpIHtcbiAgICAgICAgbmV3QXJpYVNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG5ld01lbnVPcHRpb25zU3RhdGUpLCBuZXdJbnB1dElzSGlkZGVuU3RhdGUpLCB7fSwge1xuICAgICAgICBwcmV2UHJvcHM6IHByb3BzLFxuICAgICAgICBhcmlhU2VsZWN0aW9uOiBuZXdBcmlhU2VsZWN0aW9uLFxuICAgICAgICBwcmV2V2FzRm9jdXNlZDogaGFzS2VwdEZvY3VzXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFNlbGVjdDtcbn0oQ29tcG9uZW50KTtcblNlbGVjdC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbmV4cG9ydCB7IFNlbGVjdCBhcyBTLCBkZWZhdWx0UHJvcHMgYXMgYSwgZ2V0T3B0aW9uTGFiZWwkMSBhcyBiLCBjcmVhdGVGaWx0ZXIgYXMgYywgZGVmYXVsdFRoZW1lIGFzIGQsIGdldE9wdGlvblZhbHVlJDEgYXMgZywgbWVyZ2VTdHlsZXMgYXMgbSB9O1xuIiwgImltcG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmV4cG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcndhcmRSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTIGFzIFNlbGVjdCB9IGZyb20gJy4vU2VsZWN0LTFmZDU4OGM5LmVzbS5qcyc7XG5leHBvcnQgeyBjIGFzIGNyZWF0ZUZpbHRlciwgZCBhcyBkZWZhdWx0VGhlbWUsIG0gYXMgbWVyZ2VTdHlsZXMgfSBmcm9tICcuL1NlbGVjdC0xZmQ1ODhjOS5lc20uanMnO1xuaW1wb3J0IHsgQ2FjaGVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5leHBvcnQgeyBjIGFzIGNvbXBvbmVudHMgfSBmcm9tICcuL2luZGV4LWEzMDFmNTI2LmVzbS5qcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZVN1cGVyJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgJ21lbW9pemUtb25lJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0ICdyZWFjdC1kb20nO1xuaW1wb3J0ICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCAndXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdCc7XG5cbnZhciBTdGF0ZU1hbmFnZWRTZWxlY3QgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgYmFzZVNlbGVjdFByb3BzID0gdXNlU3RhdGVNYW5hZ2VyKHByb3BzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmXG4gIH0sIGJhc2VTZWxlY3RQcm9wcykpO1xufSk7XG52YXIgU3RhdGVNYW5hZ2VkU2VsZWN0JDEgPSBTdGF0ZU1hbmFnZWRTZWxlY3Q7XG5cbnZhciBOb25jZVByb3ZpZGVyID0gKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBub25jZSA9IF9yZWYubm9uY2UsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNhY2hlS2V5ID0gX3JlZi5jYWNoZUtleTtcbiAgdmFyIGVtb3Rpb25DYWNoZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjcmVhdGVDYWNoZSh7XG4gICAgICBrZXk6IGNhY2hlS2V5LFxuICAgICAgbm9uY2U6IG5vbmNlXG4gICAgfSk7XG4gIH0sIFtjYWNoZUtleSwgbm9uY2VdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZW1vdGlvbkNhY2hlXG4gIH0sIGNoaWxkcmVuKTtcbn0pO1xuXG5leHBvcnQgeyBOb25jZVByb3ZpZGVyLCBTdGF0ZU1hbmFnZWRTZWxlY3QkMSBhcyBkZWZhdWx0IH07XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IHVzZUVkaXRhYmxlRGlzcGF0Y2ggfSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlXCI7XG5pbXBvcnQgeyBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgVGFyZ2V0ZWRFdmVudCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCJ1aS9ob29rc1wiO1xuXG4vKiogRWRpdGFibGUgZmllbGQgZm9yIGEgYm9vbGVhbiAodHJ1ZS9mYWxzZSkgdmFsdWUuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gQm9vbGVhbkVkaXRhYmxlKHByb3BzOiBGaWVsZENvbnRyb2xQcm9wczxib29sZWFuPikge1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlRWRpdGFibGVEaXNwYXRjaDxib29sZWFuPih7XG4gICAgICAgIGNvbnRlbnQ6IHByb3BzLnZhbHVlID8/IHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdXBkYXRlcjogcHJvcHMudXBkYXRlciEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAoZXZ0OiBUYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+ICYgTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gIWV2dC5jdXJyZW50VGFyZ2V0Lmhhc0NsYXNzKFwiaXMtZW5hYmxlZFwiKTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWUgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29tbWl0XCIsIG5ld1ZhbHVlIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbc3RhdGUuY29udGVudCwgc3RhdGUsIHByb3BzLnZhbHVlXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IG9uQ2xpY2s9e29uQ2hhbmdlfSBjbGFzc05hbWU9e2BjaGVja2JveC1jb250YWluZXIke3N0YXRlLmNvbnRlbnQgPyBcIiBpcy1lbmFibGVkXCIgOiBcIlwifWB9PlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IEVkaXRhYmxlLCBFZGl0YWJsZUFjdGlvbiwgRWRpdGFibGVTdGF0ZSB9IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5cbmltcG9ydCBcIi4vZmllbGRzLmNzc1wiO1xuXG4vKiogRWRpdGFibGUgZmllbGQgZm9yIG11bHRpLXN0ZXAgcHJvZ3Jlc3MuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gUHJvZ3Jlc3NFZGl0YWJsZShcbiAgICBwcm9wczogRWRpdGFibGVTdGF0ZTxudW1iZXI+ICYge1xuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gICAgICAgIG1pbjogbnVtYmVyO1xuICAgICAgICBtYXg6IG51bWJlcjtcbiAgICAgICAgc3RlcDogbnVtYmVyO1xuICAgICAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248bnVtYmVyPj47XG4gICAgfVxuKSB7XG4gICAgY29uc3QgdmFsID0gdXNlUmVmKHByb3BzLmNvbnRlbnQpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWU6IHZhbC5jdXJyZW50IH0pO1xuICAgIH0sIFt2YWwuY3VycmVudF0pO1xuICAgIGNvbnN0IGZpbmFsaXplID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBwcm9wcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1pdFwiLFxuICAgICAgICAgICAgbmV3VmFsdWU6IHZhbC5jdXJyZW50LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZUNCID0gdXNlU3RhYmxlQ2FsbGJhY2soXG4gICAgICAgIChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgZmluYWxpemUoKTtcbiAgICAgICAgICAgIHZhbC5jdXJyZW50ID0gcGFyc2VGbG9hdChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbdmFsLmN1cnJlbnQsIHByb3BzLnNvdXJjZVBhdGhdXG4gICAgKTtcbiAgICBjb25zdCByZWFkT25seSA9IDxwcm9ncmVzcyB2YWx1ZT17dmFsLmN1cnJlbnR9IG1pbj17cHJvcHMubWlufSBtYXg9e3Byb3BzLm1heH0gc3RlcD17cHJvcHMuc3RlcH0gLz47XG5cbiAgICBjb25zdCBlZGl0b3IgPSAoXG4gICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBjbGFzc05hbWU9XCJkYXRhY29yZS1wcm9ncmVzcy1lZGl0YWJsZVwiIHZhbHVlPXt2YWwuY3VycmVudH0gb25DaGFuZ2U9e2NoYW5nZUNCfSAvPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCI+XG4gICAgICAgICAgICA8RWRpdGFibGU8bnVtYmVyPlxuICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtwcm9wcy5kaXNwYXRjaH1cbiAgICAgICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgICAgICBzdGF0ZT17eyAuLi5wcm9wcywgY29udGVudDogdmFsLmN1cnJlbnQsIGlzRWRpdGluZzogcHJvcHMuaXNFZGl0aW5nIH19XG4gICAgICAgICAgICAgICAgZGVmYXVsdFJlbmRlcj17cmVhZE9ubHl9XG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgdWlcbiAqL1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5pbXBvcnQgeyBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgdXNlRWRpdGFibGVEaXNwYXRjaCB9IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcblxuaW1wb3J0IFwiLi9maWVsZHMuY3NzXCI7XG5cbi8qKiBFZGl0YWJsZSBmaWVsZCBmb3IgYSBzdGFyLWJhc2VkIHJhdGluZyBmaWVsZC5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYXRpbmdFZGl0YWJsZSh7IHZhbHVlLCB1cGRhdGVyLCBjb25maWc6IGNvbmZpZywgZGVmYXVsdFZhbHVlIH06IEZpZWxkQ29udHJvbFByb3BzPG51bWJlciB8IHN0cmluZz4pIHtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8bnVtYmVyIHwgc3RyaW5nPih7XG4gICAgICAgIGNvbnRlbnQ6IHZhbHVlID8/IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlciEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlLmNvbnRlbnQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmNvbnRlbnQuY29udGFpbnMoXCIvXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0ID0gc3RhdGUuY29udGVudC5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHNwbGl0WzBdKSAvIHBhcnNlSW50KHNwbGl0WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oc3RhdGUuY29udGVudCwgNSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSwgW3N0YXRlLmNvbnRlbnRdKTtcblxuICAgIGNvbnN0IHN0YXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCByOiBSZWFjdC5SZWFjdE5vZGVbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChjb25maWc/Lm1heCA/PyA1KTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2xpY2tDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jb250ZW50LmNvbnRhaW5zKFwiL1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBgJHtpICsgMX0vNWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGF0ZS5jb250ZW50ID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBNYXRoLm1pbihpICsgMSwgY29uZmlnPy5tYXggPz8gNSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRlbnQtY2hhbmdlZFwiLCBuZXdWYWx1ZTogbmV3VmFsdWUgfHwgaSArIDEgfSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbW1pdFwiLCBuZXdWYWx1ZTogbmV3VmFsdWUgfHwgaSArIDEgfSk7XG4gICAgICAgICAgICB9LCBbc3RhdGUsIHBhcnNlZFZhbHVlLCBpXSk7XG4gICAgICAgICAgICBsZXQgY2xhc3NlcyA9IFtcImRhdGFjb3JlLXJhdGluZy1zdGFyXCJdO1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGkgPCBwYXJzZWRWYWx1ZSA/IFwiZmlsbGVkXCIgOiBcImVtcHR5XCIpO1xuICAgICAgICAgICAgci5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIG9uQ2xpY2s9e2NsaWNrQ2J9IGNsYXNzTmFtZT17Y2xhc3Nlcy5qb2luKFwiIFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICYjOTczMztcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgIH0sIFtwYXJzZWRWYWx1ZSwgc3RhdGVdKTtcblxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJkYXRhY29yZS1yYXRpbmdcIj57c3RhcnN9PC9zcGFuPjtcbn1cbiIsICJpbXBvcnQgeyBEYXRhY29yZSB9IGZyb20gXCJpbmRleC9kYXRhY29yZVwiO1xuaW1wb3J0IHsgU3Vic3RvcmVyIH0gZnJvbSBcImluZGV4L2RhdGFzdG9yZVwiO1xuaW1wb3J0IHsgc2V0RW1vamlTaG9ydGhhbmRDb21wbGV0aW9uRmllbGQsIHNldElubGluZUZpZWxkIH0gZnJvbSBcImluZGV4L2ltcG9ydC9pbmxpbmUtZmllbGRcIjtcbmltcG9ydCB7IEluZGV4YWJsZSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleGFibGVcIjtcbmltcG9ydCB7IE1hcmtkb3duUGFnZSwgTWFya2Rvd25TZWN0aW9uLCBNYXJrZG93bkJsb2NrLCBNYXJrZG93bkxpc3RJdGVtLCBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRG90RmllbGQocmF3OiBzdHJpbmcsIG9iajogYW55KSB7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICBpZiAocmF3LmNvbnRhaW5zKFwiLlwiKSlcbiAgICAgICAgcmV0dXJuIHJhdy5zcGxpdChcIi5cIikucmVkdWNlKCh0aWYsIGMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGlmID09IFwib2JqZWN0XCIpIHJldHVybiB0aWZbY107XG4gICAgICAgICAgICBlbHNlIHJldHVybiB0aWY7XG4gICAgICAgIH0sIG9iaiB8fCB7fSk7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqW3Jhd107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZChpbnB1dDogSW5kZXhhYmxlLCBmaWVsZDogc3RyaW5nKSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgTWFya2Rvd25QYWdlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5maWVsZChmaWVsZCk/LnZhbHVlID8/IG51bGw7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIE1hcmtkb3duU2VjdGlvbikge1xuICAgICAgICByZXR1cm4gaW5wdXQuZmllbGQoZmllbGQpPy52YWx1ZSA/PyBudWxsO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBNYXJrZG93bkJsb2NrKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5maWVsZChmaWVsZCk/LnZhbHVlID8/IG51bGw7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmZpZWxkKGZpZWxkKT8udmFsdWUgPz8gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufSAvKiogVHJpbSBlbXB0eSBlbmRpbmcgbGluZXMuICovXG5mdW5jdGlvbiB0cmltRW5kaW5nTGluZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcGFydHMgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuL3UpO1xuICAgIGxldCB0cmltID0gcGFydHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAodHJpbSA+IDAgJiYgcGFydHNbdHJpbV0udHJpbSgpID09IFwiXCIpIHRyaW0tLTtcblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXCIpO1xufVxuLyoqIFNldCB0aGUgdGFzayBjb21wbGV0aW9uIGtleSBvbiBjaGVjay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYXNrQ29tcGxldGlvbihcbiAgICB0YXNrOiBNYXJrZG93blRhc2tJdGVtLFxuICAgIG9yaWdpbmFsVGV4dDogc3RyaW5nLFxuICAgIHVzZUVtb2ppU2hvcnRoYW5kOiBib29sZWFuLFxuICAgIGNvbXBsZXRpb25LZXk6IHN0cmluZyxcbiAgICBjb21wbGV0aW9uRGF0ZUZvcm1hdDogc3RyaW5nLFxuICAgIGNvbXBsZXRlOiBib29sZWFuXG4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGJsb2NrSWRSZWdleCA9IC9cXF5bYS16MC05XFwtXSsvaTtcblxuICAgIGlmICghY29tcGxldGUgJiYgIXVzZUVtb2ppU2hvcnRoYW5kKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrLiRpbmZpZWxkc1tjb21wbGV0aW9uS2V5XTtcbiAgICAgICAgcmV0dXJuIHRyaW1FbmRpbmdMaW5lcyhzZXRJbmxpbmVGaWVsZChvcmlnaW5hbFRleHQudHJpbUVuZCgpLCBjb21wbGV0aW9uS2V5KSkudHJpbUVuZCgpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IG9yaWdpbmFsVGV4dC5zcGxpdCgvXFxyP1xcbi91KTtcbiAgICBjb25zdCBtYXRjaGVzID0gYmxvY2tJZFJlZ2V4LmV4ZWMocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgbGV0IHByb2Nlc3NlZFBhcnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5zcGxpdChibG9ja0lkUmVnZXgpLmpvaW4oXCJcIik7IC8vIGxhc3QgcGFydCB3aXRob3V0IGJsb2NrIGlkXG4gICAgaWYgKHVzZUVtb2ppU2hvcnRoYW5kKSB7XG4gICAgICAgIHByb2Nlc3NlZFBhcnQgPSBzZXRFbW9qaVNob3J0aGFuZENvbXBsZXRpb25GaWVsZChcbiAgICAgICAgICAgIHByb2Nlc3NlZFBhcnQsXG4gICAgICAgICAgICBjb21wbGV0ZSA/IERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KFwieXl5eS1NTS1kZFwiKSA6IFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzZWRQYXJ0ID0gc2V0SW5saW5lRmllbGQocHJvY2Vzc2VkUGFydCwgY29tcGxldGlvbktleSwgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoY29tcGxldGlvbkRhdGVGb3JtYXQpKTtcbiAgICAgICAgdGFzay4kaW5maWVsZHNbY29tcGxldGlvbktleV0gPSB7XG4gICAgICAgICAgICByYXc6IERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KGNvbXBsZXRpb25EYXRlRm9ybWF0KSxcbiAgICAgICAgICAgIHZhbHVlOiBEYXRlVGltZS5ub3coKSxcbiAgICAgICAgICAgIGtleTogY29tcGxldGlvbktleSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgbGluZTogdGFzay4kbGluZSxcbiAgICAgICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgICAgICBzdGFydFZhbHVlOiAwLFxuICAgICAgICAgICAgICAgIGVuZDogRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoY29tcGxldGlvbkRhdGVGb3JtYXQpLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm9jZXNzZWRQYXJ0ID0gYCR7cHJvY2Vzc2VkUGFydC50cmltRW5kKCl9JHttYXRjaGVzPy5sZW5ndGggPyBcIiBcIiArIG1hdGNoZXNbMF0udHJpbSgpIDogXCJcIn1gLnRyaW1FbmQoKTsgLy8gYWRkIGJhY2sgYmxvY2sgaWRcbiAgICBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9IHByb2Nlc3NlZFBhcnQudHJpbVN0YXJ0KCk7XG5cbiAgICByZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IExJU1RfSVRFTV9SRUdFWCA9IC9eW1xccz5dKihcXGQrXFwufFxcZCtcXCl8XFwqfC18XFwrKVxccyooXFxbLnswLDF9XFxdKT9cXHMqKC4qKSQvbXU7XG5cbi8qKiBSZXdyaXRlIGEgdGFzayB3aXRoIHRoZSBnaXZlbiBjb21wbGV0aW9uIHN0YXR1cyBhbmQgbmV3IHRleHQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV3cml0ZVRhc2soXG4gICAgdmF1bHQ6IFZhdWx0LFxuICAgIGNvcmU6IERhdGFjb3JlLFxuICAgIHRhc2s6IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtLFxuICAgIGRlc2lyZWRTdGF0dXM6IHN0cmluZyxcbiAgICBkZXNpcmVkVGV4dD86IHN0cmluZ1xuKSB7XG4gICAgaWYgKFxuICAgICAgICB0YXNrIGluc3RhbmNlb2YgTWFya2Rvd25UYXNrSXRlbSAmJlxuICAgICAgICBkZXNpcmVkU3RhdHVzID09IHRhc2suJHN0YXR1cyAmJlxuICAgICAgICAoZGVzaXJlZFRleHQgPT0gdW5kZWZpbmVkIHx8IGRlc2lyZWRUZXh0ID09IHRhc2suJHRleHQpXG4gICAgKVxuICAgICAgICByZXR1cm47XG4gICAgZGVzaXJlZFN0YXR1cyA9IGRlc2lyZWRTdGF0dXMgPT0gXCJcIiA/IFwiIFwiIDogZGVzaXJlZFN0YXR1cztcblxuICAgIGxldCByYXdGaWxldGV4dCA9IGF3YWl0IHZhdWx0LmFkYXB0ZXIucmVhZCh0YXNrLiRmaWxlKTtcbiAgICBsZXQgaGFzUk4gPSByYXdGaWxldGV4dC5jb250YWlucyhcIlxcclwiKTtcbiAgICBsZXQgZmlsZXRleHQgPSByYXdGaWxldGV4dC5zcGxpdCgvXFxyXFxufFxccnxcXG4vdSk7XG5cbiAgICBpZiAoZmlsZXRleHQubGVuZ3RoIDwgdGFzay4kbGluZSkgcmV0dXJuO1xuICAgIGxldCBtYXRjaCA9IExJU1RfSVRFTV9SRUdFWC5leGVjKGZpbGV0ZXh0W3Rhc2suJGxpbmVdKTtcbiAgICBpZiAoIW1hdGNoIHx8IG1hdGNoWzJdPy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IHRhc2tUZXh0UGFydHMgPSB0YXNrLiR0ZXh0IS5zcGxpdChcIlxcblwiKTtcbiAgICAvLyBpZiAodGFza1RleHRQYXJ0c1swXS50cmltKCkgIT0gbWF0Y2hbM10udHJpbSgpKSByZXR1cm47XG5cbiAgICAvLyBXZSBoYXZlIGEgcG9zaXRpdmUgbWF0Y2ggaGVyZSBhdCB0aGlzIHBvaW50LCBzbyBnbyBhaGVhZCBhbmQgZG8gdGhlIHJld3JpdGUgb2YgdGhlIHN0YXR1cy5cbiAgICBjb25zdCBzdGF0dXNQYXJ0ID0gdGFzayBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0gPyBgWyR7ZGVzaXJlZFN0YXR1c31dYCA6IFwiXCI7XG4gICAgbGV0IGluaXRpYWxTcGFjaW5nID0gL15bXFxzPl0qL3UuZXhlYyhmaWxldGV4dFt0YXNrLiRsaW5lXSkhIVswXTtcbiAgICBpZiAoZGVzaXJlZFRleHQpIHtcbiAgICAgICAgbGV0IGRlc2lyZWRQYXJ0cyA9IGRlc2lyZWRUZXh0LnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICAgIGxldCBuZXdUZXh0TGluZXM6IHN0cmluZ1tdID0gW2Ake2luaXRpYWxTcGFjaW5nfSR7dGFzay4kc3ltYm9sfSAke3N0YXR1c1BhcnR9ICR7ZGVzaXJlZFBhcnRzWzBdfWBdLmNvbmNhdChcbiAgICAgICAgICAgIGRlc2lyZWRQYXJ0cy5zbGljZSgxKS5tYXAoKGwpID0+IGluaXRpYWxTcGFjaW5nICsgXCJcXHRcIiArIGwudHJpbVN0YXJ0KCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgZmlsZXRleHQuc3BsaWNlKHRhc2suJGxpbmUsIHRhc2suJHRleHQhLnNwbGl0KFwiXFxuXCIpLmxlbmd0aCwgLi4ubmV3VGV4dExpbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmaWxldGV4dFt0YXNrLiRsaW5lXSA9IGAke2luaXRpYWxTcGFjaW5nfSR7dGFzay4kc3ltYm9sfSAke3N0YXR1c1BhcnR9ICR7dGFza1RleHRQYXJ0c1swXS50cmltKCl9YDtcbiAgICB9XG5cbiAgICBsZXQgbmV3VGV4dCA9IGZpbGV0ZXh0LmpvaW4oaGFzUk4gPyBcIlxcclxcblwiIDogXCJcXG5cIik7XG4gICAgYXdhaXQgdmF1bHQuYWRhcHRlci53cml0ZSh0YXNrLiRmaWxlLCBuZXdUZXh0KTtcbiAgICBjb25zdCB0ZmlsZSA9IHZhdWx0LmdldEZpbGVCeVBhdGgodGFzay4kZmlsZSk7XG4gICAgaWYgKHRmaWxlKSBjb3JlLnJlbG9hZCh0ZmlsZSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcGxldGVUYXNrKGNvbXBsZXRlZDogYm9vbGVhbiwgdGFzazogTWFya2Rvd25UYXNrSXRlbSwgdmF1bHQ6IFZhdWx0LCBjb3JlOiBEYXRhY29yZSkge1xuICAgIGNvbnN0IHRhc2tzVG9Db21wbGV0ZSA9IFt0YXNrXTtcbiAgICBpZiAoY29yZS5zZXR0aW5ncy5yZWN1cnNpdmVUYXNrQ29tcGxldGlvbikge1xuICAgICAgICBjb25zdCBmb3JFYWNoID0gKHg6IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0pIHRhc2tzVG9Db21wbGV0ZS5wdXNoKHgpO1xuICAgICAgICAgICAgeC4kZWxlbWVudHMuZm9yRWFjaChmb3JFYWNoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGFzay4kZWxlbWVudHMuZm9yRWFjaChmb3JFYWNoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0IG9mIHRhc2tzVG9Db21wbGV0ZSkge1xuICAgICAgICBsZXQgbmV3VGV4dCA9IHNldFRhc2tDb21wbGV0aW9uKFxuICAgICAgICAgICAgdCxcbiAgICAgICAgICAgIHQuJHRleHQhLFxuICAgICAgICAgICAgY29yZS5zZXR0aW5ncy50YXNrQ29tcGxldGlvblVzZUVtb2ppU2hvcnRoYW5kLFxuICAgICAgICAgICAgY29yZS5zZXR0aW5ncy50YXNrQ29tcGxldGlvblRleHQsXG4gICAgICAgICAgICBjb3JlLnNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0LFxuICAgICAgICAgICAgY29tcGxldGVkXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHJld3JpdGVUYXNrKHZhdWx0LCBjb3JlLCB0LCBjb21wbGV0ZWQgPyBcInhcIiA6IFwiIFwiLCBuZXdUZXh0KTtcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIGluZGV4YWJsZXNcbiAqL1xuLyoqIFV0aWxpdGllcyBmb3IgY29udmVydGluZyBsaXRlcmFsIHR5cGVzIHRvIGFuZCBmcm9tIHRoZWlyIFlBTUwgZnJvbnRtYXR0ZXIgcmVwcmVzZW50YXRpb24uICovXG5cbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgUFJJTUlUSVZFUyB9IGZyb20gXCJleHByZXNzaW9uL3BhcnNlclwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IG1hcE9iamVjdFZhbHVlcyB9IGZyb20gXCJ1dGlscy9kYXRhXCI7XG5cbi8qKiBZQU1MLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9uIGZvciBhIGxpdGVyYWwuICovXG5leHBvcnQgdHlwZSBZYW1sTGl0ZXJhbCA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IEFycmF5PFlhbWxMaXRlcmFsPjtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgWWFtbENvbnZlcnNpb24ge1xuICAgIC8qKiBDb252ZXJ0IGEgbGl0ZXJhbCBpbnRvIGEgeWFtbCBmcmllbmRseSByZXByZXNlbnRhdGlvbi4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24geWFtbCh2YWx1ZTogTGl0ZXJhbCk6IFlhbWxMaXRlcmFsIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IExpdGVyYWxzLndyYXBWYWx1ZShsaXRlcmFsKTtcbiAgICAgICAgaWYgKCF3cmFwcGVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXAoeWFtbCk7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvSVNPKCk7XG4gICAgICAgICAgICBjYXNlIFwiZHVyYXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b0h1bWFuKCk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwT2JqZWN0VmFsdWVzKHdyYXBwZWQudmFsdWUsIHlhbWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgYSBZQU1MIGxpdGVyYWwgaW50byBhIHJlZ3VsYXIgbGl0ZXJhbCB2YWx1ZS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZTogWWFtbExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIHZhbHVlIGFzIEFycmF5PGFueT4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobGl0ZXJhbChjaGlsZCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRlUGFyc2UgPSBEYXRlVGltZS5mcm9tSlNEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZVBhcnNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBsaXRlcmFsKG9iamVjdFtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBkYXRlUGFyc2UgPSBQUklNSVRJVkVTLmRhdGUucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGRhdGVQYXJzZS5zdGF0dXMpIHJldHVybiBkYXRlUGFyc2UudmFsdWU7XG5cbiAgICAgICAgICAgIGxldCBkdXJhdGlvblBhcnNlID0gUFJJTUlUSVZFUy5kdXJhdGlvbi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZHVyYXRpb25QYXJzZS5zdGF0dXMpIHJldHVybiBkdXJhdGlvblBhcnNlLnZhbHVlO1xuXG4gICAgICAgICAgICBsZXQgbGlua1BhcnNlID0gUFJJTUlUSVZFUy5saW5rLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChsaW5rUGFyc2Uuc3RhdHVzKSByZXR1cm4gbGlua1BhcnNlLnZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWNrdXAgaWYgd2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgdHlwZS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgIi8qKiBDZW50cmFsIHV0aWxpdGllcyBmb3IgZWRpdGluZyBmaWVsZHMgYnkgc2V0dGluZyBuZXcgdmFsdWVzIGluIGZpbGVzLCBhbmQgdHJhY2tpbmcgb3V0c3RhbmRpbmcgZWRpdHMuICovXG5cbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCJhcGkvcmVzdWx0XCI7XG5pbXBvcnQgeyBQcm92ZW5hbmNlIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBZYW1sQ29udmVyc2lvbiB9IGZyb20gXCJpbmRleC90eXBlcy95YW1sXCI7XG5pbXBvcnQgeyBBcHAsIFRGaWxlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBsaW5lUmVwbGFjZSB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuXG4vKiogRWRpdCBhIGZpZWxkIGJ5IGl0J3MgcHJvdmVuYW5jZSAoaS5lLiwgc291cmNlKTsgcmV0dXJucyBhIHByb21pc2Ugd2hpY2ggY2FuIGJlIGF3YWl0ZWQgdG8gd2FpdCBmb3IgdGhlIGZpbGUgd3JpdGUgdG8gY29tcGxldGUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdFByb3ZlbmFuY2UoYXBwOiBBcHAsIHByb3ZlbmFuY2U6IFByb3ZlbmFuY2UsIHZhbHVlOiBMaXRlcmFsKTogUHJvbWlzZTxSZXN1bHQ8bnVsbCwgc3RyaW5nPj4ge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwcm92ZW5hbmNlLmZpbGUpO1xuICAgIGlmICghZmlsZSkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBGaWxlIHdpdGggcGF0aCAke3Byb3ZlbmFuY2UuZmlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAvLyBUT0RPOiBJZiB3ZSBldmVyIHN1cHBvcnQgY3VzdG9tIHR5cGVzLCB3ZSdsbCB3YW50IHRvIGNoYW5nZSB0aGlzIHN3aXRjaCBpbnRvIHNvbWUga2luZCBvZiBkeW5hbWljIGxvb2t1cC5cbiAgICBzd2l0Y2ggKHByb3ZlbmFuY2UudHlwZSkge1xuICAgICAgICBjYXNlIFwiZnJvbnRtYXR0ZXJcIjpcbiAgICAgICAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIoZmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwgJiYgcHJvdmVuYW5jZS5rZXkgaW4gZnJvbnRtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZyb250bWF0dGVyW3Byb3ZlbmFuY2Uua2V5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmcm9udG1hdHRlcltwcm92ZW5hbmNlLmtleV0gPSBZYW1sQ29udmVyc2lvbi55YW1sKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MobnVsbCk7XG4gICAgICAgIGNhc2UgXCJpbmxpbmUtZmllbGRcIjpcbiAgICAgICAgICAgIHJldHVybiBlZGl0SW5saW5lRmllbGQoYXBwLCBmaWxlLCBwcm92ZW5hbmNlLmxpbmUsIHByb3ZlbmFuY2Uua2V5LCB2YWx1ZSk7XG4gICAgfVxufVxuXG4vKiogQ29tcGxldGUgd29ya2Zsb3cgZm9yIGVkaXRpbmcgYW4gaW5saW5lIGZpZWxkLiAgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0SW5saW5lRmllbGQoXG4gICAgYXBwOiBBcHAsXG4gICAgZmlsZTogVEZpbGUsXG4gICAgbGluZTogbnVtYmVyLFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBMaXRlcmFsXG4pOiBQcm9taXNlPFJlc3VsdDxudWxsLCBzdHJpbmc+PiB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xuICAgIGlmICghY29udGVudCkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBGaWxlIHdpdGggcGF0aCAke2ZpbGUucGF0aH0gZG9lcyBub3QgZXhpc3QuYCk7XG5cbiAgICAvLyBGaW5kIHRoZSBleHRlbnQgb2YgdGhlIGdpdmVuIGxpbmUgKDAtaW5kZXhlZCksIGV4dHJhY3QgaXQgYW5kIHVwZGF0ZS5cbiAgICBjb25zdCB1cGRhdGVkID0gbGluZVJlcGxhY2UoY29udGVudCwgbGluZSwgbGluZSArIDEsIChsaW5lKSA9PiB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgc3RyaW5naWYtaWNhdGlvbiBvZiB0aGUgdmFsdWUgaXMgbm90IGNvcnJlY3QgYW5kIHdpbGwgbm90IHdvcmtcbiAgICAgICAgLy8gZm9yIGFycmF5cyBvciBvYmplY3RzLCBidXQgd2lsbCBzZXJ2ZSBwdXJwb3NlIGZvciBub3cuLi5cbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBzZXRJbmxpbmVGaWVsZChsaW5lLCBrZXksIHVuZGVmaW5lZCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHNldElubGluZUZpZWxkKGxpbmUsIGtleSwgXCJcIiArIFlhbWxDb252ZXJzaW9uLnlhbWwodmFsdWUpKTtcbiAgICB9KTtcblxuICAgIGlmICh1cGRhdGVkID09IGNvbnRlbnQpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsKTtcblxuICAgIGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgdXBkYXRlZCk7XG4gICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKG51bGwpO1xufVxuIiwgImltcG9ydCB7IEZpZWxkIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IEFQUF9DT05URVhUIH0gZnJvbSBcInVpL21hcmtkb3duXCI7XG5pbXBvcnQgeyByZXdyaXRlVGFzayB9IGZyb20gXCIuL3Rhc2tcIjtcbmltcG9ydCB7IEVkaXRhYmxlQWN0aW9uIH0gZnJvbSBcInVpL2ZpZWxkcy9lZGl0YWJsZVwiO1xuaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcbmltcG9ydCB7IGVkaXRQcm92ZW5hbmNlIH0gZnJvbSBcImluZGV4L2VkaXQvZmllbGRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNldEZpZWxkPFQgZXh0ZW5kcyBMaXRlcmFsPihmaWVsZDogRmllbGQsIG9uQ2hhbmdlPzogKG5ld1ZhbHVlOiBUKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgYXBwID0gdXNlQ29udGV4dChBUFBfQ09OVEVYVCk7XG4gICAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgICAgICAobmV3VmFsdWU6IFQpID0+IHtcbiAgICAgICAgICAgIGVkaXRQcm92ZW5hbmNlKGFwcCwgZmllbGQucHJvdmVuYW5jZSEsIG5ld1ZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob25DaGFuZ2UpIG9uQ2hhbmdlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbZmllbGQsIG9uQ2hhbmdlXVxuICAgICk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0VGFza1RleHQoYXBwOiBBcHAsIGNvcmU6IERhdGFjb3JlLCB0ZXh0OiBzdHJpbmcsIGl0ZW06IE1hcmtkb3duVGFza0l0ZW0pIHtcbiAgICBsZXQgd2l0aEZpZWxkcyA9IGAke3RleHR9JHtPYmplY3Qua2V5cyhpdGVtLiRpbmZpZWxkcykubGVuZ3RoID8gXCIgXCIgOiBcIlwifWA7XG4gICAgZm9yIChsZXQgZmllbGQgaW4gaXRlbS4kaW5maWVsZHMpIHtcbiAgICAgICAgd2l0aEZpZWxkcyA9IHNldElubGluZUZpZWxkKHdpdGhGaWVsZHMsIGZpZWxkLCBpdGVtLiRpbmZpZWxkc1tmaWVsZF0ucmF3KTtcbiAgICB9XG4gICAgYXdhaXQgcmV3cml0ZVRhc2soYXBwLnZhdWx0LCBjb3JlLCBpdGVtLCBpdGVtLiRzdGF0dXMsIHdpdGhGaWVsZHMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZpbmFsaXplcjxUPihuZXdWYWx1ZTogVCwgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPFQ+Pikge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLFxuICAgICAgICAgICAgbmV3VmFsdWU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9O1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSB1aVxuICovXG5pbXBvcnQgeyBGcmFnbWVudCwgRnVuY3Rpb25Db21wb25lbnQsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgRGlzcGF0Y2gsIFJlZHVjZXIsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IENoYW5nZUV2ZW50LCB1c2VSZWR1Y2VyIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCBTZWxlY3QsIHsgQWN0aW9uTWV0YSB9IGZyb20gXCJyZWFjdC1zZWxlY3RcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcIi4uL2hvb2tzXCI7XG5pbXBvcnQgeyBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgTGl0LCBNYXJrZG93biwgU0VUVElOR1NfQ09OVEVYVCB9IGZyb20gXCIuLi9tYXJrZG93blwiO1xuaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbFR5cGUsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IEJhc2VGaWVsZFByb3BzLCBGaWVsZENvbnRyb2xQcm9wcyB9IGZyb20gXCIuL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHsgTWFya2Rvd25MaXN0SXRlbSwgTWFya2Rvd25UYXNrSXRlbSB9IGZyb20gXCJpbmRleC90eXBlcy9tYXJrZG93blwiO1xuaW1wb3J0IHsgQm9vbGVhbkVkaXRhYmxlIH0gZnJvbSBcIi4vYm9vbGVhbi1maWVsZFwiO1xuaW1wb3J0IHsgUHJvZ3Jlc3NFZGl0YWJsZSB9IGZyb20gXCIuL3Byb2dyZXNzLWZpZWxkXCI7XG5pbXBvcnQgeyBSYXRpbmdFZGl0YWJsZSB9IGZyb20gXCIuL3JhdGluZ1wiO1xuaW1wb3J0IHsgdXNlRmluYWxpemVyIH0gZnJvbSBcInV0aWxzL2ZpZWxkc1wiO1xuXG5pbXBvcnQgXCIuL2ZpZWxkcy5jc3NcIjtcblxuLyoqIENvcmUgc3RhdGUgZm9yIHRyYWNraW5nIGFuIGVkaXRhYmxlIG9iamVjdC5cbiAqIEBncm91cCBTdGF0ZXNcbiAqIEB0eXBlUGFyYW0gVCAtIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBiZWluZyBlZGl0ZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0YWJsZVN0YXRlPFQ+IHtcbiAgICAvKiogV2hldGhlciB0aGUgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZC4gKi9cbiAgICBpc0VkaXRpbmc/OiBib29sZWFuO1xuICAgIC8qKiBUaGUgY3VycmVudCAoYXJiaXRyYXJ5KSBjb250ZW50IG9mIHRoZSBlZGl0YWJsZS4gKi9cbiAgICBjb250ZW50OiBUO1xuICAgIC8qKiBDYWxsYmFjayB3aGVuZXZlciB0aGUgZWRpdGFibGUgdmFsdWUgaXMgY2hhbmdlZC4gKi9cbiAgICB1cGRhdGVyOiAodmFsOiBUKSA9PiB1bmtub3duO1xuICAgIC8qKiBXaGV0aGVyIHRoZSBlZGl0b3IgaXMgYmVpbmcgcmVuZGVyZWQgaW5saW5lIGluIGEgcGFyYWdyYXBoIG9yIG5vdC4gKi9cbiAgICBpbmxpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBncm91cCBQcm9wc1xuICogQHR5cGVQYXJhbSBUIC0gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGJlaW5nIGVkaXRlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRhYmxlUHJvcHM8VD4ge1xuICAgIC8qKiBTb3VyY2UgZmlsZSBmcm9tIHdoaWNoIHRoZSBlZGl0YWJsZSB2YWx1ZSBvcmlnaW5hdGVzLiAqL1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gICAgLyoqIEJhY2t1cCBkZWZhdWx0IHJlbmRlcmVyIGZvciB0aGlzIG9iamVjdC4gKi9cbiAgICBkZWZhdWx0UmVuZGVyPzogVk5vZGU7XG4gICAgLyoqIE5vZGUgd2hpY2ggcG9pbnRzIHRvIHRoZSBhY3R1YWwgZWRpdG9yLiAqL1xuICAgIGVkaXRvcjogUmVhY3QuUmVhY3ROb2RlO1xuICAgIC8qKiBEaXNwYXRjaGVyIGZvciBjb250cm9sbGluZyB0aGUgZWRpdCBzdGF0ZSwgdHJhY2tpbmcgdXBkYXRlcywgY29tbWl0cywgYW5kIHNvIG9uLiAqL1xuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxUPj47XG4gICAgLyoqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBlZGl0b3IuICovXG4gICAgc3RhdGU6IEVkaXRhYmxlU3RhdGU8VD47XG59XG5cbnR5cGUgRWRpdGFibGVFbGVtZW50UHJvcHM8VCwgUD4gPSBFZGl0YWJsZVN0YXRlPFQ+ICYgUDtcbmV4cG9ydCB0eXBlIEVkaXRhYmxlRWxlbWVudDxULCBQID0gYW55PiA9IEZ1bmN0aW9uQ29tcG9uZW50PEVkaXRhYmxlRWxlbWVudFByb3BzPFQsIFA+ICYgUD47XG5cbi8qKlxuICogIEFjdGlvbnMgd2hpY2ggdXBkYXRlL2NoYW5nZSB0aGUgc3RhdGUgb2YgYW4gZWRpdGFibGUuXG4gKlxuICogQGludGVybmFsXG4gKiAqL1xuZXhwb3J0IHR5cGUgRWRpdGFibGVBY3Rpb248VD4gPVxuICAgIHwge1xuICAgICAgICAgIHR5cGU6IFwiY29tbWl0XCI7XG4gICAgICAgICAgLy8gb2xkVmFsdWU6IGFueSxcbiAgICAgICAgICBuZXdWYWx1ZTogVDtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiO1xuICAgICAgICAgIG5ld1ZhbHVlOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCI7XG4gICAgICAgICAgbmV3VmFsdWU6IFQ7XG4gICAgICB9O1xuXG4vKiogRGVmYXVsdCByZWR1Y2VyIGZvciBhcHBseWluZyBhY3Rpb25zIHRvIHRoZSBlZGl0YWJsZSBzdGF0ZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVkaXRhYmxlUmVkdWNlcjxUPihcbiAgICB7IGNvbnRlbnQsIHVwZGF0ZXIsIC4uLnJlc3QgfTogRWRpdGFibGVTdGF0ZTxUPixcbiAgICBhY3Rpb246IEVkaXRhYmxlQWN0aW9uPFQ+XG4pOiBFZGl0YWJsZVN0YXRlPFQ+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJjb21taXRcIjpcbiAgICAgICAgICAgIHVwZGF0ZXIoYWN0aW9uLm5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIHVwZGF0ZXIsIGNvbnRlbnQ6IGFjdGlvbi5uZXdWYWx1ZSB9O1xuICAgICAgICBjYXNlIFwiZWRpdGluZy10b2dnbGVkXCI6XG4gICAgICAgICAgICAhYWN0aW9uLm5ld1ZhbHVlICYmIHVwZGF0ZXIoY29udGVudCk7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCB1cGRhdGVyLCBjb250ZW50LCBpc0VkaXRpbmc6IGFjdGlvbi5uZXdWYWx1ZSB9O1xuICAgICAgICBjYXNlIFwiY29udGVudC1jaGFuZ2VkXCI6XG4gICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCB1cGRhdGVyLCBjb250ZW50OiBhY3Rpb24ubmV3VmFsdWUgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQsIHVwZGF0ZXIsIC4uLnJlc3QgfTtcbiAgICB9XG59XG5cbi8qKiBQcm92aWRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBhbiBlZGl0YWJsZSBmaWVsZC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRWRpdGFibGVEaXNwYXRjaDxUPihcbiAgICBpbml0aWFsOiBFZGl0YWJsZVN0YXRlPFQ+IHwgKCgpID0+IEVkaXRhYmxlU3RhdGU8VD4pXG4pOiBbRWRpdGFibGVTdGF0ZTxUPiwgRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248VD4+XSB7XG4gICAgY29uc3QgaW5pdCA9IHVzZU1lbW8oKCkgPT4gKHR5cGVvZiBpbml0aWFsID09IFwiZnVuY3Rpb25cIiA/IGluaXRpYWwoKSA6IGluaXRpYWwpLCBbaW5pdGlhbF0pO1xuICAgIHJldHVybiB1c2VSZWR1Y2VyKGVkaXRhYmxlUmVkdWNlciBhcyBSZWR1Y2VyPEVkaXRhYmxlU3RhdGU8VD4sIEVkaXRhYmxlQWN0aW9uPFQ+PiwgaW5pdCwgKHMpID0+IGluaXQpO1xufVxuLyoqXG4gKiBhIGhpZ2hlci1vcmRlci1jb21wb25lbnQgZm9yIGVkaXRpbmcgZmllbGRzLlxuICogQHBhcmFtIHByb3BzXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gRWRpdGFibGU8VD4oeyBzb3VyY2VQYXRoLCBkZWZhdWx0UmVuZGVyLCBlZGl0b3IsIGRpc3BhdGNoLCBzdGF0ZSB9OiBFZGl0YWJsZVByb3BzPFQ+KSB7XG4gICAgY29uc3QgY3VycmVudFJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLmlzRWRpdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0UmVuZGVyKSByZXR1cm4gZGVmYXVsdFJlbmRlcjtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIDxMaXQgdmFsdWU9e3N0YXRlLmNvbnRlbnQgYXMgTGl0ZXJhbH0gaW5saW5lPXt0cnVlfSBzb3VyY2VQYXRoPVwiXCIgLz47XG4gICAgICAgIH1cbiAgICB9LCBbc3RhdGUuaXNFZGl0aW5nLCBzdGF0ZS5jb250ZW50LCBzb3VyY2VQYXRoLCBkZWZhdWx0UmVuZGVyXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaCAmJiBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiBzdGF0ZS5jb250ZW50IH0pO1xuICAgIH0sIFtzdGF0ZS5jb250ZW50LCBzdGF0ZS5pc0VkaXRpbmddKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRhdGFjb3JlLWVkaXRhYmxlLW91dGVyXCIgcmVmPXtjdXJyZW50UmVmfT5cbiAgICAgICAgICAgIHtlbGVtZW50fVxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZWRFZGl0YWJsZTxULCBQID0gdW5rbm93bj4oe1xuICAgIGRlZmF1bHRSZW5kZXIsXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgb25VcGRhdGUsXG4gICAgY29udGVudCxcbiAgICBwcm9wcyxcbiAgICBzb3VyY2VQYXRoLFxufTogT21pdDxFZGl0YWJsZVByb3BzPFQ+LCBcImRpc3BhdGNoXCIgfCBcInN0YXRlXCIgfCBcImVkaXRvclwiPiAmIHtcbiAgICBvblVwZGF0ZTogKHY6IFQpID0+IHVua25vd247XG4gICAgY29udGVudDogVDtcbiAgICBlZGl0b3I6IEVkaXRhYmxlRWxlbWVudDxULCBQPjtcbiAgICBwcm9wczogUDtcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VFZGl0YWJsZURpc3BhdGNoPFQ+KCgpID0+ICh7XG4gICAgICAgIHVwZGF0ZXI6IG9uVXBkYXRlLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgIH0pKTtcbiAgICByZXR1cm4gPEVkaXRvciBkaXNwYXRjaD17ZGlzcGF0Y2h9IHsuLi5wcm9wc30gey4uLnN0YXRlfSAvPjtcbn1cblxuLyoqIEEgc2luZ2xlIHNlbGVjdGFibGUgdmFsdWUuXG4gKi9cbnR5cGUgU2VsZWN0YWJsZUJhc2UgPSBzdHJpbmcgfCBudW1iZXI7XG4vKiogQSB0eXBlIGZvciBlaXRoZXIgbXVsdGktIG9yIHNpbmdsZS1zZWxlY3QgdmFsdWVzLiAqL1xudHlwZSBTZWxlY3RhYmxlVHlwZSA9IFNlbGVjdGFibGVCYXNlIHwgU2VsZWN0YWJsZUJhc2VbXTtcblxuLyoqIEVkaXRhYmxlIHdoaWNoIGFsbG93cyBmb3Igc2VsZWN0aW9uIGZyb20gYSBsaXN0IG9mIG9wdGlvbnMuXG4gKiBAZ3JvdXAgRWRpdGFibGUgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0YWJsZUVkaXRhYmxlKHtcbiAgICBpc0VkaXRpbmcsXG4gICAgY29udGVudCxcbiAgICB1cGRhdGVyLFxuICAgIGNvbmZpZyxcbiAgICBkaXNwYXRjaCxcbn06IEVkaXRhYmxlU3RhdGU8U2VsZWN0YWJsZVR5cGU+ICZcbiAgICBCYXNlRmllbGRQcm9wczxTZWxlY3RhYmxlVHlwZT4gJiB7XG4gICAgICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxTZWxlY3RhYmxlVHlwZT4+O1xuICAgIH0pIHtcbiAgICBjb25zdCBvbkNoYW5nZSA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAobmV3VmFsdWU6IGFueSwgYWN0aW9uTWV0YTogQWN0aW9uTWV0YTxTZWxlY3RhYmxlVHlwZT4pID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIixcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLm1hcCgoeCkgPT4geC52YWx1ZSkgYXMgU2VsZWN0YWJsZVR5cGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIixcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLnZhbHVlIGFzIFNlbGVjdGFibGVUeXBlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbY29uZmlnLCBjb250ZW50LCB1cGRhdGVyLCBpc0VkaXRpbmddXG4gICAgKTtcblxuICAgIGNvbnN0IGVkaXRvciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZVByZWZpeD1cImRhdGFjb3JlLXNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICB1bnN0eWxlZFxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2NvbmZpZz8ubXVsdGkgPz8gZmFsc2V9XG4gICAgICAgICAgICAgICAgb3B0aW9ucz17Y29uZmlnPy5vcHRpb25zID8/IFtdfVxuICAgICAgICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQ9e2RvY3VtZW50LmJvZHl9XG4gICAgICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICBjb25maWc/Lm9wdGlvbnMuZmlsdGVyKCh4OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoKEFycmF5LmlzQXJyYXkoY29udGVudCkgPyBjb250ZW50IDogW2NvbnRlbnRdKSBhcyBhbnlbXSkuY29udGFpbnMoeC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSB8fCBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAocHJvcHM6IGFueSkgPT4gXCJwcm9tcHQtaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVDb250YWluZXI6IChwcm9wczogYW55KSA9PiBcInN1Z2dlc3Rpb24taXRlbSB2YWx1ZS1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiAocHJvcHM6IGFueSkgPT4gXCJzdWdnZXN0aW9uLWNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgICAgICBtZW51OiAocHJvcHM6IGFueSkgPT4gXCJzdWdnZXN0aW9uLWNvbnRlbnQgc3VnZ2VzdGlvbi1jb250YWluZXJcIixcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiAocHJvcHM6IGFueSkgPT4gYHN1Z2dlc3Rpb24taXRlbSR7cHJvcHMuaXNTZWxlY3RlZCA/IFwiIGlzLXNlbGVjdGVkXCIgOiBcIlwifWAsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSwgW2NvbnRlbnQsIHVwZGF0ZXIsIGlzRWRpdGluZywgY29uZmlnXSk7XG5cbiAgICByZXR1cm4gPEVkaXRhYmxlIGVkaXRvcj17ZWRpdG9yfSBkaXNwYXRjaD17ZGlzcGF0Y2h9IHN0YXRlPXt7IGlzRWRpdGluZywgY29udGVudCwgdXBkYXRlciB9fSAvPjtcbn1cblxuLyoqIEVkaXRhYmxlIHdoaWNoIGFsbG93cyBmb3Igc2VsZWN0aW5nIGEgZGF0ZS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEYXRlRWRpdGFibGUoe1xuICAgIGRpc3BhdGNoLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgLi4ucmVzdFxufTogRWRpdGFibGVTdGF0ZTxEYXRlVGltZSB8IHN0cmluZyB8IG51bGw+ICYge1xuICAgIHNvdXJjZVBhdGg6IHN0cmluZztcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248RGF0ZVRpbWUgfCBzdHJpbmcgfCBudWxsPj47XG59KSB7XG4gICAgLyoqIHRoZSBleHRyYSBkaXNwYXRjaCBpcyBfanVzdF8gaW4gY2FzZS4uLiAqL1xuICAgIGNvbnN0IFtzdGF0ZSwgb10gPSB1c2VFZGl0YWJsZURpc3BhdGNoPERhdGVUaW1lIHwgc3RyaW5nIHwgbnVsbD4oKCkgPT4gKHtcbiAgICAgICAgaXNFZGl0aW5nOiByZXN0LmlzRWRpdGluZyxcbiAgICAgICAgY29udGVudDogcmVzdC5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiByZXN0LnVwZGF0ZXIsXG4gICAgICAgIGlubGluZTogcmVzdC5pbmxpbmUgPz8gZmFsc2UsXG4gICAgfSkpO1xuICAgIGNvbnN0IHNldHRpbmdzID0gdXNlQ29udGV4dChTRVRUSU5HU19DT05URVhUKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKGV2dDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgbGV0IHYgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGV2dC5jdXJyZW50VGFyZ2V0LnZhbHVlKSk7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogISF2ID8gRGF0ZVRpbWUuZnJvbUpTRGF0ZSh2KS50b0Zvcm1hdChzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogXCJjb21taXRcIixcbiAgICAgICAgICAgIG5ld1ZhbHVlOiAhIXYgPyBEYXRlVGltZS5mcm9tSlNEYXRlKHYpLnRvRm9ybWF0KHNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0KSA6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICBvKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWl0XCIsXG4gICAgICAgICAgICBuZXdWYWx1ZTogISF2ID8gRGF0ZVRpbWUuZnJvbUpTRGF0ZSh2KS50b0Zvcm1hdChzZXR0aW5ncy5kZWZhdWx0RGF0ZUZvcm1hdCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QganNEYXRlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5jb250ZW50IGluc3RhbmNlb2YgRGF0ZVRpbWVcbiAgICAgICAgICAgID8gc3RhdGUuY29udGVudFxuICAgICAgICAgICAgOiB0eXBlb2Ygc3RhdGUuY29udGVudCA9PSBcInN0cmluZ1wiICYmICEhc3RhdGUuY29udGVudFxuICAgICAgICAgICAgPyBEYXRlVGltZS5mcm9tSlNEYXRlKG5ldyBEYXRlKERhdGUucGFyc2Uoc3RhdGUuY29udGVudCkpKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH0sIFtzdGF0ZS5jb250ZW50XSk7XG5cbiAgICBjb25zdCBlZGl0b3JOb2RlID0gPGlucHV0IHR5cGU9XCJkYXRlXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSB2YWx1ZT17anNEYXRlPy50b0Zvcm1hdChcInl5eXktTU0tZGRcIil9IC8+O1xuICAgIHJldHVybiA8RWRpdGFibGU8RGF0ZVRpbWUgfCBzdHJpbmcgfCBudWxsPiBkaXNwYXRjaD17ZGlzcGF0Y2h9IHN0YXRlPXtyZXN0fSBlZGl0b3I9e2VkaXRvck5vZGV9IC8+O1xufVxuXG4vKiogQW4gZWRpdG9yIHdoaWNoIGFsbG93cyBzZWxlY3RpbmcgYSBudW1uZXJpYyB2YWx1ZS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBOdW1iZXJFZGl0YWJsZShwcm9wczogRWRpdGFibGVTdGF0ZTxudW1iZXI+KSB7XG4gICAgY29uc3QgY2ZjID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG5cbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8bnVtYmVyPigoKSA9PiAoe1xuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICBjb250ZW50OiBwcm9wcy5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiBwcm9wcy51cGRhdGVyLFxuICAgICAgICBpbmxpbmU6IHRydWUsXG4gICAgfSkpO1xuICAgIGNvbnN0IHZhbHVlID0gdXNlUmVmKHByb3BzLmNvbnRlbnQpO1xuXG4gICAgY29uc3Qgb25DaGFuZ2VDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZXZ0OiBDaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgdmFsdWUuY3VycmVudCA9IHBhcnNlRmxvYXQoKGV2dC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQpLnZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgW3ZhbHVlLmN1cnJlbnQsIHN0YXRlLmNvbnRlbnQsIHN0YXRlLnVwZGF0ZXIsIHN0YXRlLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgY29uc3QgZmluYWxpemUgPSB1c2VGaW5hbGl6ZXIodmFsdWUuY3VycmVudCwgZGlzcGF0Y2gpO1xuICAgIGNvbnN0IG9uSW5wdXQgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgYXN5bmMgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmluYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3ZhbHVlLmN1cnJlbnQsIHN0YXRlLnVwZGF0ZXIsIHN0YXRlLmNvbnRlbnQsIHN0YXRlLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgY29uc3QgZGJsQ2xpY2sgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFt2YWx1ZS5jdXJyZW50LCBzdGF0ZS51cGRhdGVyLCBzdGF0ZS5pc0VkaXRpbmcsIHN0YXRlLmNvbnRlbnRdXG4gICAgKTtcblxuICAgIGNvbnN0IHJlYWRvbmx5RWwgPSA8TGl0IGlubGluZT17ZmFsc2V9IHNvdXJjZVBhdGg9e2NmY30gdmFsdWU9e3ZhbHVlLmN1cnJlbnQgYXMgTGl0ZXJhbH0gLz47XG4gICAgY29uc3QgZWRpdG9yID0gPGlucHV0IGNsYXNzTmFtZT1cImRhdGFjb3JlLWVkaXRhYmxlXCIgdHlwZT1cIm51bWJlclwiIG9uQ2hhbmdlPXtvbkNoYW5nZUNifSBvbktleVVwPXtvbklucHV0fSAvPjtcbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCIgb25EYmxDbGljaz17ZGJsQ2xpY2t9PlxuICAgICAgICAgICAgPEVkaXRhYmxlPG51bWJlcj4gZGlzcGF0Y2g9e2Rpc3BhdGNofSBlZGl0b3I9e2VkaXRvcn0gZGVmYXVsdFJlbmRlcj17cmVhZG9ubHlFbH0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuLyoqIEVkaXRvciB3aGljaCBzdXBwb3J0cyBtdWx0aS1saW5lIHRleHQgZWRpdGluZzsgbm90ZSB0aGlzIGlzIGEgdmVyeSBzaW1wbGUgaW5wdXQgYW5kIGRvZXMgbm90IHN1cHBvcnQgbW9zdCBtYXJrZG93biBtZXRhZGF0YS5cbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUZXh0RWRpdGFibGUocHJvcHM6IEVkaXRhYmxlU3RhdGU8c3RyaW5nPiAmIHsgbWFya2Rvd24/OiBib29sZWFuOyBzb3VyY2VQYXRoOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IGNmYyA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlRWRpdGFibGVEaXNwYXRjaDxzdHJpbmc+KCgpID0+ICh7XG4gICAgICAgIGlzRWRpdGluZzogcHJvcHMuaXNFZGl0aW5nLFxuICAgICAgICBjb250ZW50OiBwcm9wcy5jb250ZW50LFxuICAgICAgICB1cGRhdGVyOiBwcm9wcy51cGRhdGVyLFxuICAgICAgICBpbmxpbmU6IHByb3BzLmlubGluZSA/PyBmYWxzZSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB0ZXh0ID0gdXNlUmVmKFwiLVwiKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB0ZXh0LmN1cnJlbnQgPSBzdGF0ZS5jb250ZW50O1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiBzdGF0ZS5jb250ZW50IH0pO1xuICAgIH0sIFtwcm9wcy5jb250ZW50LCBzdGF0ZS5jb250ZW50XSk7XG5cbiAgICBjb25zdCBmaW5hbGl6ZSA9IHVzZUZpbmFsaXplcihzdGF0ZS5jb250ZW50LCBkaXNwYXRjaCk7XG4gICAgY29uc3Qgb25JbnB1dCA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3BzLmlubGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZpbmFsaXplKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiAmJiBlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmaW5hbGl6ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3RleHQuY3VycmVudCwgcHJvcHMuc291cmNlUGF0aCwgc3RhdGUudXBkYXRlciwgc3RhdGUuY29udGVudCwgc3RhdGUuaXNFZGl0aW5nXVxuICAgICk7XG5cbiAgICBjb25zdCBkYmxDbGljayA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZWRpdGluZy10b2dnbGVkXCIsXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW3RleHQuY3VycmVudCwgcHJvcHMuc291cmNlUGF0aCwgc3RhdGUudXBkYXRlciwgc3RhdGUuaXNFZGl0aW5nLCBzdGF0ZS5jb250ZW50XVxuICAgICk7XG4gICAgY29uc3QgcmVhZG9ubHlFbCA9IChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAge3Byb3BzLm1hcmtkb3duID8gKFxuICAgICAgICAgICAgICAgIDxNYXJrZG93biBjb250ZW50PXt0ZXh0LmN1cnJlbnQgYXMgc3RyaW5nfSBzb3VyY2VQYXRoPXtwcm9wcy5zb3VyY2VQYXRoIHx8IGNmY30gaW5saW5lPXtmYWxzZX0gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExpdCBpbmxpbmU9e2ZhbHNlfSBzb3VyY2VQYXRoPXtwcm9wcy5zb3VyY2VQYXRoIHx8IGNmY30gdmFsdWU9e3RleHQuY3VycmVudCBhcyBMaXRlcmFsfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICAgIGNvbnN0IGVkaXRvciA9IChcbiAgICAgICAgPFVuY29udHJvbGxlZFRleHRFZGl0YWJsZSBvbklucHV0PXtvbklucHV0fSBpbmxpbmU9e3Byb3BzLmlubGluZX0gZGlzcGF0Y2g9e2Rpc3BhdGNofSB0ZXh0PXt0ZXh0LmN1cnJlbnR9IC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoYXMtdGV4dGVkaXRhYmxlXCIgb25EYmxDbGljaz17ZGJsQ2xpY2t9PlxuICAgICAgICAgICAgPEVkaXRhYmxlPHN0cmluZz4gZGlzcGF0Y2g9e2Rpc3BhdGNofSBlZGl0b3I9e2VkaXRvcn0gZGVmYXVsdFJlbmRlcj17cmVhZG9ubHlFbH0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFVuY29udHJvbGxlZFRleHRFZGl0YWJsZSh7XG4gICAgaW5saW5lLFxuICAgIHRleHQsXG4gICAgZGlzcGF0Y2gsXG4gICAgb25JbnB1dCxcbn06IHtcbiAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBkaXNwYXRjaD86IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPHN0cmluZz4+O1xuICAgIG9uSW5wdXQ/OiAoZTogS2V5Ym9hcmRFdmVudCkgPT4gdW5rbm93bjtcbn0pIHtcbiAgICBjb25zdCBbdHh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlKHRleHQpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoICYmIGRpc3BhdGNoKHsgbmV3VmFsdWU6IHR4dCwgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiB9KTtcbiAgICB9LCBbdHh0XSk7XG4gICAgY29uc3Qgb25DaGFuZ2VDYiA9IHVzZVN0YWJsZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoZXZ0OiBDaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgc2V0VGV4dCgoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbdGV4dCwgZGlzcGF0Y2hdXG4gICAgKTtcblxuICAgIHJldHVybiAhaW5saW5lID8gKFxuICAgICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPVwiZGF0YWNvcmUtZWRpdGFibGVcIiBvbkNoYW5nZT17b25DaGFuZ2VDYn0gb25LZXlVcD17b25JbnB1dH0+XG4gICAgICAgICAgICB7dHh0fVxuICAgICAgICA8L3RleHRhcmVhPlxuICAgICkgOiAoXG4gICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJkYXRhY29yZS1lZGl0YWJsZVwiIHR5cGU9XCJ0ZXh0XCIgb25DaGFuZ2U9e29uQ2hhbmdlQ2J9IG9uS2V5VXA9e29uSW5wdXR9IC8+XG4gICAgKTtcbn1cbi8qKiBBbiBlZGl0YWJsZSBsaXN0IG9mIGl0ZW1zLlxuICpcbiAqIEBncm91cCBFZGl0YWJsZSBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFZGl0YWJsZUxpc3RGaWVsZCh7XG4gICAgcHJvcHMsXG4gICAgZmllbGQsXG4gICAgcGFyZW50LFxuICAgIHR5cGUsXG4gICAgZGlzcGF0Y2gsXG4gICAgcmVuZGVyQXMsXG4gICAgY29uZmlnLFxufTogeyBwcm9wczogRWRpdGFibGVTdGF0ZTxMaXRlcmFsPiB9ICYgRmllbGRDb250cm9sUHJvcHM8TGl0ZXJhbD4gJiB7XG4gICAgICAgIHBhcmVudDogTWFya2Rvd25UYXNrSXRlbSB8IE1hcmtkb3duTGlzdEl0ZW07XG4gICAgICAgIHR5cGU6IExpdGVyYWxUeXBlO1xuICAgICAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248TGl0ZXJhbD4+O1xuICAgIH0pIHtcbiAgICBjb25zdCBzdWJFZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZW5kZXJBcykge1xuICAgICAgICAgICAgY2FzZSBcInByb2dyZXNzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gXCJudW1iZXJcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFByb2dyZXNzRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD17cHJvcHMuY29udGVudCBhcyBudW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVyPXtwcm9wcy51cGRhdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4PXtjb25maWc/Lm1heCB8fCAxMDB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoPXtwYXJlbnQuJGZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwPXtjb25maWc/LnN0ZXAgfHwgMC4xfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWluPXtjb25maWc/Lm1pbiB8fCAwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsO1xuICAgICAgICAgICAgY2FzZSBcInJhdGluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxSYXRpbmdFZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17Y29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmNvbnRlbnQgYXMgc3RyaW5nIHwgbnVtYmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtjb25maWd9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVyPXtwcm9wcy51cGRhdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e3Byb3BzLmNvbnRlbnQgYXMgU2VsZWN0YWJsZVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LCBbcGFyZW50LCBmaWVsZCwgcHJvcHMuY29udGVudCwgcHJvcHMuY29udGVudCwgcHJvcHMsIGNvbmZpZywgcmVuZGVyQXNdKTtcbiAgICBjb25zdCBlZGl0b3IgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRlRWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPXtkaXNwYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3BhcmVudC4kZmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZz17cHJvcHMuaXNFZGl0aW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD17cHJvcHMuY29udGVudCBhcyBEYXRlVGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXIgYXMgKHZhbDogc3RyaW5nIHwgRGF0ZVRpbWUgfCBudWxsKSA9PiBhbnl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJvb2xlYW5FZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuY29udGVudCBhcyBib29sZWFufVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzdWJFZGl0b3IgPz8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0RWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aD17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRpbmc9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PXtwcm9wcy5jb250ZW50IGFzIHN0cmluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17cHJvcHMudXBkYXRlciBhcyAodmFsOiBzdHJpbmcpID0+IHVua25vd259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDw+e3N1YkVkaXRvciA/PyA8TnVtYmVyRWRpdGFibGUgY29udGVudD17cHJvcHMuY29udGVudCBhcyBudW1iZXJ9IHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXJ9IC8+fTwvPjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHRFZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aD17cGFyZW50LiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0aW5nPXtwcm9wcy5pc0VkaXRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PXtMaXRlcmFscy50b1N0cmluZyhwcm9wcy5jb250ZW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXI9e3Byb3BzLnVwZGF0ZXIgYXMgKHZhbDogc3RyaW5nKSA9PiB1bmtub3dufVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9LCBbcGFyZW50LCBmaWVsZCwgcHJvcHMuY29udGVudCwgcHJvcHMuY29udGVudCwgcHJvcHMsIGNvbmZpZywgcmVuZGVyQXMsIHN1YkVkaXRvcl0pO1xuXG4gICAgY29uc3QgZGJsY2xpY2sgPSB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgKGV2dDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLCBuZXdWYWx1ZTogIXByb3BzLmlzRWRpdGluZyB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW3Byb3BzLmlzRWRpdGluZ11cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS1maWVsZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmllbGQtdGl0bGVcIiBvbkRibENsaWNrPXtkYmxjbGlja30+XG4gICAgICAgICAgICAgICAge2ZpZWxkLmtleX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZpZWxkLXZhbHVlXCIgdGFiSW5kZXg9ezB9PlxuICAgICAgICAgICAgICAgIHtlZGl0b3J9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBBUFBfQ09OVEVYVCwgQ1VSUkVOVF9GSUxFX0NPTlRFWFQsIERBVEFDT1JFX0NPTlRFWFQsIExpdCB9IGZyb20gXCJ1aS9tYXJrZG93blwiO1xuXG5pbXBvcnQgeyBWTm9kZSwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgQmFzZUZpZWxkUHJvcHMgfSBmcm9tIFwidWkvZmllbGRzL2NvbW1vbi1wcm9wc1wiO1xuaW1wb3J0IHtcbiAgICBDb250cm9sbGVkRWRpdGFibGUsXG4gICAgRWRpdGFibGUsXG4gICAgRWRpdGFibGVFbGVtZW50LFxuICAgIEVkaXRhYmxlU3RhdGUsXG4gICAgVGV4dEVkaXRhYmxlLFxuICAgIHVzZUVkaXRhYmxlRGlzcGF0Y2gsXG59IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5pbXBvcnQgeyBNYXJrZG93bkxpc3RJdGVtLCBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyByZXdyaXRlVGFzayB9IGZyb20gXCJ1dGlscy90YXNrXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5cbi8qKlxuICogU3RhdGUgZm9yIGEge0BsaW5rIExpc3RWaWV3fVxuICogQHR5cGVQYXJhbSBUIC0gdGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgbGlzdFxuICogQGdyb3VwIFN0YXRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RTdGF0ZTxUPiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgbGlzdCBzaG91bGQgYmUgb3JkZXJlZCAob2wpLCB1bm9yZGVyZWQgKHVsKSwgb3IgaGF2ZSBubyBzcGVjaWFsIG1hcmt1cCAobm9uZSkuXG4gICAgICpcbiAgICAgKiBMaXN0cyB3aXRoIG5vIHNwZWNpYWwgbWFya3VwIGp1c3QgaGF2ZSBlYWNoIGVsZW1lbnQgcmVuZGVyZWQgZGlyZWN0bHkgYXMtaXMgd2l0aG91dCBhbnkgd3JhcHBpbmdcbiAgICAgKiBpbnNpZGUgb2YgYSBzaW5nbGUgZGl2LlxuICAgICAqXG4gICAgICovXG4gICAgdHlwZT86IFwib3JkZXJlZFwiIHwgXCJ1bm9yZGVyZWRcIiB8IFwibm9uZVwiO1xuXG4gICAgLyoqIFRoZSBmdWxsIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QuICovXG4gICAgcm93cz86IFRbXTtcblxuICAgIC8qKiBDb250cm9scyB3aGV0aGVyIHBhZ2luZyBpcyBlbmFibGVkIGZvciB0aGlzIGVsZW1lbnQuIElmIHRydWUsIHVzZXMgZGVmYXVsdCBwYWdlIHNpemUuIElmIGEgbnVtYmVyLCBwYWdpbmcgaXMgZW5hYmxlZCB3aXRoIHRoZSBnaXZlbiBwYWdlIHNpemUuICovXG4gICAgcGFnaW5nPzogYm9vbGVhbiB8IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gdG8gdXNlIGZvciByZW5kZXJpbmcgZWFjaCBlbGVtZW50LiBDYW4gcHJvZHVjZSBlaXRoZXIgSlNYIG9yIGEgcGxhaW4gdmFsdWUgd2hpY2ggd2lsbCBiZVxuICAgICAqIHJlbmRlcmVkIGFzIGEgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICByZW5kZXJlcj86IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdE5vZGUgfCBMaXRlcmFsO1xuXG4gICAgLyoqIGZpZWxkcyB0byBkaXNwbGF5IHVuZGVyIGVhY2ggaXRlbSBpbiB0aGlzIHRhc2sgbGlzdCAqL1xuICAgIGRpc3BsYXllZEZpZWxkcz86IChCYXNlRmllbGRQcm9wczxMaXRlcmFsPiAmIHsga2V5OiBzdHJpbmcgfSlbXTtcbn1cblxuLyoqXG4gKlxuICogQSBzaW1wbGUgYW5kIHJlc3BvbnNpdmUgbGlzdCB2aWV3LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExpc3RWaWV3PFQ+KHN0YXRlOiBMaXN0U3RhdGU8VD4pIHtcbiAgICAvLyBjb25zdCBzZXR0aW5ncyA9IHVzZUNvbnRleHQoU0VUVElOR1NfQ09OVEVYVCk7XG5cbiAgICBjb25zdCB0eXBlID0gc3RhdGUudHlwZSA/PyBcInVub3JkZXJlZFwiO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gc3RhdGUucm93cyA/PyBbXTtcbiAgICBjb25zdCByZW5kZXJlciA9IHN0YXRlLnJlbmRlcmVyID8/IGlkZW50aXR5O1xuXG4gICAgaWYgKHR5cGUgPT0gXCJub25lXCIpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdCBkYXRhY29yZS1saXN0LW5vbmVcIj5cbiAgICAgICAgICAgICAgICB7ZWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLXVud3JhcHBlZC1saXN0LWl0ZW1cIiBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwib3JkZXJlZFwiKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8b2wgY2xhc3NOYW1lPXtcImRhdGFjb3JlLWxpc3QgZGF0YWNvcmUtbGlzdC1vcmRlcmVkXCJ9PlxuICAgICAgICAgICAgICAgIHtlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJkYXRhY29yZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L29sPlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdCBkYXRhY29yZS1saXN0LXVub3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgIHtlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJkYXRhY29yZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnN1cmVFbGVtZW50KHJlbmRlcmVyKGVsZW1lbnQsIGluZGV4KSl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIE5vLW9wIGVsZW1lbnQgcmVuZGVyZXIuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5PFQ+KGVsZW1lbnQ6IFQpOiBUIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgRW5zdXJlcyB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIHJlbmRlcmFibGUgcmVhY3Qgbm9kZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVFbGVtZW50PFQ+KGVsZW1lbnQ6IFQpOiBWTm9kZSB7XG4gICAgaWYgKGlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA8RGVmYXVsdExpc3RFbGVtZW50IGVsZW1lbnQ9e2VsZW1lbnR9IC8+O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiAgRGVmYXVsdCBsaXN0IGVsZW1lbnQgd2hpY2gganVzdCB0cmllcyB0byByZW5kZXIgdGhlIHZhbHVlIGFzIGEgbGl0ZXJhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0TGlzdEVsZW1lbnQ8VD4oeyBlbGVtZW50IH06IHsgZWxlbWVudDogVCB9KSB7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IHVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuXG4gICAgcmV0dXJuIDxMaXQgaW5saW5lPXt0cnVlfSB2YWx1ZT17ZWxlbWVudCBhcyBMaXRlcmFsfSBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSAvPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVkaXRhYmxlTGlzdEVsZW1lbnQ8VD4oe1xuICAgIGVsZW1lbnQ6IGl0ZW0sXG4gICAgZWRpdG9yLFxuICAgIG9uVXBkYXRlLFxuICAgIGZpbGUsXG4gICAgZWRpdG9yUHJvcHMsXG59OiB7XG4gICAgZWRpdG9yOiAodmFsdWU6IFQpID0+IEVkaXRhYmxlRWxlbWVudDxUPjtcbiAgICBlbGVtZW50OiBUO1xuICAgIGZpbGU6IHN0cmluZztcbiAgICBvblVwZGF0ZTogKHZhbHVlOiBUKSA9PiB1bmtub3duO1xuICAgIGVkaXRvclByb3BzOiB1bmtub3duO1xufSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDb250cm9sbGVkRWRpdGFibGU8VD5cbiAgICAgICAgICAgIHByb3BzPXtlZGl0b3JQcm9wc31cbiAgICAgICAgICAgIHNvdXJjZVBhdGg9e2ZpbGV9XG4gICAgICAgICAgICBjb250ZW50PXtpdGVtfVxuICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3IoaXRlbSl9XG4gICAgICAgICAgICBvblVwZGF0ZT17b25VcGRhdGV9XG4gICAgICAgICAgICBkZWZhdWx0UmVuZGVyPXs8RGVmYXVsdExpc3RFbGVtZW50IGVsZW1lbnQ9e2l0ZW19IC8+fVxuICAgICAgICAvPlxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cblxuaW1wb3J0IHsgTWFya2Rvd25MaXN0SXRlbSwgTWFya2Rvd25UYXNrSXRlbSB9IGZyb20gXCJpbmRleC90eXBlcy9tYXJrZG93blwiO1xuaW1wb3J0IHsgRWRpdGFibGVMaXN0RWxlbWVudCwgTGlzdFN0YXRlIH0gZnJvbSBcImFwaS91aS92aWV3cy9saXN0XCI7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCJ1aS9ob29rc1wiO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBBUFBfQ09OVEVYVCwgREFUQUNPUkVfQ09OVEVYVCB9IGZyb20gXCJ1aS9tYXJrZG93blwiO1xuaW1wb3J0IHsgSlNYSW50ZXJuYWwgfSBmcm9tIFwicHJlYWN0L3NyYy9qc3hcIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBjb21wbGV0ZVRhc2ssIHJld3JpdGVUYXNrIH0gZnJvbSBcInV0aWxzL3Rhc2tcIjtcbmltcG9ydCB7IExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHtcbiAgICBFZGl0YWJsZUFjdGlvbixcbiAgICBFZGl0YWJsZUxpc3RGaWVsZCxcbiAgICBFZGl0YWJsZVN0YXRlLFxuICAgIFRleHRFZGl0YWJsZSxcbiAgICB1c2VFZGl0YWJsZURpc3BhdGNoLFxufSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlXCI7XG5pbXBvcnQgeyBzZXRJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gXCJleHByZXNzaW9uL2ZpZWxkXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IFwiLi9saXN0cy5jc3NcIjtcblxuLyoqXG4gKiBQcm9wcyBwYXNzZWQgdG8gdGhlIHRhc2sgbGlzdCBjb21wb25lbnQuXG4gKiBAZ3JvdXAgUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXNrUHJvcHMgZXh0ZW5kcyBMaXN0U3RhdGU8TWFya2Rvd25UYXNrSXRlbSB8IE1hcmtkb3duTGlzdEl0ZW0+IHtcbiAgICAvKiogdGFzayBzdGF0ZXMgdG8gY3ljbGUgdGhyb3VnaCwgaWYgc3BlY2lmaWVkICovXG4gICAgYWRkaXRpb25hbFN0YXRlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBsaXN0IG9mIHRhc2tzLlxuICogQHBhcmFtIHByb3BzXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gVGFza0xpc3Qoe1xuICAgIHJvd3M6IGl0ZW1zLFxuICAgIGFkZGl0aW9uYWxTdGF0ZXM6IHN0YXRlcyxcbiAgICByZW5kZXJlcjogbGlzdFJlbmRlcmVyID0gKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgIDxFZGl0YWJsZUxpc3RFbGVtZW50PHN0cmluZz5cbiAgICAgICAgICAgIG9uVXBkYXRlPXt1c2VMaXN0SXRlbUVkaXRpbmcoaXRlbSl9XG4gICAgICAgICAgICBlbGVtZW50PXtpdGVtLiRjbGVhbnRleHQhfVxuICAgICAgICAgICAgZmlsZT17aXRlbS4kZmlsZX1cbiAgICAgICAgICAgIGVkaXRvclByb3BzPXt7IG1hcmtkb3duOiB0cnVlLCBzb3VyY2VQYXRoOiBpdGVtLiRmaWxlIH19XG4gICAgICAgICAgICBlZGl0b3I9eyhpdCkgPT4gVGV4dEVkaXRhYmxlfVxuICAgICAgICAvPlxuICAgICksXG4gICAgLi4ucmVzdFxufTogVGFza1Byb3BzKSB7XG4gICAgY29uc3QgY29udGVudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImRhdGFjb3JlIGNvbnRhaW5zLXRhc2stbGlzdFwiPlxuICAgICAgICAgICAgICAgIHtpdGVtcz8ubWFwKChpdGVtLCBpbmQpID0+XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gaW5zdGFuY2VvZiBNYXJrZG93blRhc2tJdGVtID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhc2sga2V5PXtpdGVtLiRpZH0gc3RhdGU9e3sgLi4ucmVzdCwgYWRkaXRpb25hbFN0YXRlczogc3RhdGVzIH19IGl0ZW09e2l0ZW19IC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpc3RSZW5kZXJlcihpdGVtLCBpbmQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdC1pdGVtLWZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW1GaWVsZHMgZGlzcGxheWVkRmllbGRzPXtyZXN0LmRpc3BsYXllZEZpZWxkc30gaXRlbT17aXRlbX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgKTtcbiAgICB9LCBbaXRlbXMsIHN0YXRlc10pO1xuICAgIHJldHVybiA8RnJhZ21lbnQ+eyEhaXRlbXMgJiYgY29udGVudH08L0ZyYWdtZW50Pjtcbn1cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBpdGVtIGluIGEgdGFzayBsaXN0aW5nLlxuICogQHBhcmFtIHByb3BzIC0gdGhlIGNvbXBvbmVudCdzIHByb3BzXG4gKiBAcGFyYW0gcHJvcHMuaXRlbSAtIHRoZSBjdXJyZW50IHRhc2sgYmVpbmcgcmVuZGVyZWRcbiAqIEBwYXJhbSBwcm9wcy5zdGF0ZSAtIHRoZSB7QGxpbmsgVGFza1Byb3BzfSBvZiB0aGUge0BsaW5rIFRhc2tMaXN0fSBpbiB3aGljaCB0aGlzIFRhc2sgYXBwZWFyc1xuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRhc2soeyBpdGVtLCBzdGF0ZTogcHJvcHMgfTogeyBpdGVtOiBNYXJrZG93blRhc2tJdGVtOyBzdGF0ZTogVGFza1Byb3BzIH0pIHtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBjb3JlID0gdXNlQ29udGV4dChEQVRBQ09SRV9DT05URVhUKTtcbiAgICBjb25zdCB7IHNldHRpbmdzIH0gPSBjb3JlO1xuICAgIGNvbnN0IHN0YXRlcyA9IFtcIiBcIiwgLi4uKHByb3BzLmFkZGl0aW9uYWxTdGF0ZXMgfHwgW10pLCBcInhcIl07XG4gICAgY29uc3QgbmV4dFN0YXRlID0gKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuYWRkaXRpb25hbFN0YXRlcyAmJiBwcm9wcy5hZGRpdGlvbmFsU3RhdGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgY3VySW5kZXggPSBzdGF0ZXMuZmluZEluZGV4KChhKSA9PiBhID09PSBpdGVtLiRzdGF0dXMpO1xuICAgICAgICAgICAgY3VySW5kZXgrKztcbiAgICAgICAgICAgIGlmIChjdXJJbmRleCA+PSBzdGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY3VySW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlc1tjdXJJbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS4kY29tcGxldGVkID8gXCIgXCIgOiBcInhcIjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IHVzZVN0YXRlPHN0cmluZz4oaXRlbS4kc3RhdHVzKTtcbiAgICBjb25zdCBjb21wbGV0ZWRSZWYgPSB1c2VSZWY8RGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248TGl0ZXJhbD4+PihudWxsKTtcbiAgICBjb25zdCBvbkNoZWNrZWQgPSB1c2VTdGFibGVDYWxsYmFjayhhc3luYyAoZXZ0OiBKU1hJbnRlcm5hbC5UYXJnZXRlZE1vdXNlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgY29uc3QgY29tcGxldGVkID0gZXZ0LmN1cnJlbnRUYXJnZXQuY2hlY2tlZDtcbiAgICAgICAgbGV0IG5ld1N0YXR1czogc3RyaW5nO1xuICAgICAgICBpZiAoZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBuZXdTdGF0dXMgPSBuZXh0U3RhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1N0YXR1cyA9IGNvbXBsZXRlZCA/IFwieFwiIDogXCIgXCI7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3RhdHVzKG5ld1N0YXR1cyk7XG4gICAgICAgIGF3YWl0IGNvbXBsZXRlVGFzayhjb21wbGV0ZWQsIGl0ZW0sIGFwcC52YXVsdCwgY29yZSk7XG4gICAgICAgIGNvbnN0IG52ID0gY29tcGxldGVkID8gRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoc2V0dGluZ3MuZGVmYXVsdERhdGVGb3JtYXQpIDogbnVsbDtcbiAgICAgICAgY29tcGxldGVkUmVmLmN1cnJlbnQgJiYgY29tcGxldGVkUmVmLmN1cnJlbnQoeyB0eXBlOiBcImNvbW1pdFwiLCBuZXdWYWx1ZTogbnYgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgY2hlY2tlZCA9IHVzZU1lbW8oKCkgPT4gc3RhdHVzICE9PSBcIiBcIiwgW2l0ZW0uJHN0YXR1cywgaXRlbSwgc3RhdHVzXSk7XG4gICAgY29uc3QgZVN0YXRlOiBFZGl0YWJsZVN0YXRlPHN0cmluZz4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVwZGF0ZXI6IHVzZUxpc3RJdGVtRWRpdGluZyhpdGVtKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0uJGNsZWFudGV4dCxcbiAgICAgICAgICAgIGlubGluZTogZmFsc2UsXG4gICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9IGFzIEVkaXRhYmxlU3RhdGU8c3RyaW5nPjtcbiAgICB9LCBbaXRlbS4kY2xlYW50ZXh0LCBpdGVtLiR0ZXh0XSk7XG4gICAgY29uc3QgdGhlRWxlbWVudCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IDxUZXh0RWRpdGFibGUgc291cmNlUGF0aD17aXRlbS4kZmlsZX0gey4uLmVTdGF0ZX0gLz4sXG4gICAgICAgIFtlU3RhdGUuY29udGVudCwgaXRlbSwgcHJvcHMucm93c11cbiAgICApO1xuXG4gICAgY29uc3QgW2NvbGxhcHNlZCwgc2V0Q29sbGFwc2VkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IGl0ZW0uJGVsZW1lbnRzLmxlbmd0aCA+IDA7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0Q29sbGFwc2VkKCFjb2xsYXBzZWQpO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBrZXk9e2l0ZW0uJGlkfSBkYXRhLXRlc3RpZD1cImRhdGFjb3JlLXRhc2staXRlbVwiIGNsYXNzTmFtZT17XCJkYXRhY29yZSB0YXNrLWxpc3QtaXRlbVwiICsgKGNoZWNrZWQgPyBcIiBpcy1jaGVja2VkXCIgOiBcIlwiKX0gZGF0YS10YXNrPXtzdGF0dXN9PlxuICAgICAgICAgICAgPENvbGxhcHNlSW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Q29sbGFwc2VkKChjKSA9PiAhYyl9XG4gICAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgICAgaGFzQ2hpbGRyZW49e2hhc0NoaWxkcmVufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJkYXRhY29yZSB0YXNrLWxpc3QtaXRlbS1jaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiIGNoZWNrZWQ9e2NoZWNrZWR9IG9uQ2xpY2s9e29uQ2hlY2tlZH0gb25DaGFuZ2U9eyhlKSA9PiBjb25zb2xlLmxvZyhlLmN1cnJlbnRUYXJnZXQudmFsdWUpfS8+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdC1pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAge3RoZUVsZW1lbnR9XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtbGlzdC1pdGVtLWZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RJdGVtRmllbGRzIGRpc3BsYXllZEZpZWxkcz17cHJvcHMuZGlzcGxheWVkRmllbGRzfSBpdGVtPXtpdGVtfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge2hhc0NoaWxkcmVuICYmICFjb2xsYXBzZWQgJiYgPFRhc2tMaXN0IHsuLi5wcm9wc30gcm93cz17aXRlbS4kZWxlbWVudHN9IC8+fVxuICAgICAgICA8L2xpPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIENvbGxhcHNlSW5kaWNhdG9yKHtcbiAgICBjb2xsYXBzZWQsXG4gICAgb25DbGljayxcbiAgICBoYXNDaGlsZHJlbixcbn06IHtcbiAgICBjb2xsYXBzZWQ6IGJvb2xlYW47XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBoYXNDaGlsZHJlbjogYm9vbGVhbjtcbn0pIHtcbiAgICBjb25zdCB0b2dnbGVDbmFtZXMgPSBbXCJkYXRhY29yZS1jb2xsYXBzZXJcIl07XG4gICAgaWYgKGNvbGxhcHNlZCkgdG9nZ2xlQ25hbWVzLnB1c2goXCJpcy1jb2xsYXBzZWRcIik7XG4gICAgaWYgKCFoYXNDaGlsZHJlbikgdG9nZ2xlQ25hbWVzLnB1c2goXCJuby1jaGlsZHJlblwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IG9uQ2xpY2s9e29uQ2xpY2t9IGNsYXNzTmFtZT17dG9nZ2xlQ25hbWVzLmpvaW4oXCIgXCIpfSBkaXI9XCJhdXRvXCI+XG4gICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmctaWNvbiByaWdodC10cmlhbmdsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDhMMTIgMTdMMjEgOFwiPjwvcGF0aD5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGFuIGVkaXRhYmxlIHNldCBvZiBmaWVsZHMgYmVsb3cgYSB0YXNrIG9yIGxpc3QgaXRlbS5cbiAqIEBoaWRkZW5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMaXN0SXRlbUZpZWxkcyh7XG4gICAgZGlzcGxheWVkRmllbGRzOiBkaXNwbGF5ZWRGaWVsZHNQcm9wLFxuICAgIGl0ZW0sXG59OiB7XG4gICAgZGlzcGxheWVkRmllbGRzPzogVGFza1Byb3BzW1wiZGlzcGxheWVkRmllbGRzXCJdO1xuICAgIGl0ZW06IE1hcmtkb3duVGFza0l0ZW0gfCBNYXJrZG93bkxpc3RJdGVtO1xufSkge1xuICAgIGNvbnN0IGFwcCA9IHVzZUNvbnRleHQoQVBQX0NPTlRFWFQpO1xuICAgIGNvbnN0IGNvcmUgPSB1c2VDb250ZXh0KERBVEFDT1JFX0NPTlRFWFQpO1xuICAgIGNvbnN0IHsgc2V0dGluZ3MgfSA9IGNvcmU7XG4gICAgY29uc3QgZGlzcGxheWVkRmllbGRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChkaXNwbGF5ZWRGaWVsZHNQcm9wICE9IHVuZGVmaW5lZCkgcmV0dXJuIGRpc3BsYXllZEZpZWxkc1Byb3A7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaXRlbS4kaW5maWVsZHMpLm1hcCgoZikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogZi5rZXksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IExpdGVyYWxzLnR5cGVPZihmLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckFzOiBcInJhd1wiLFxuICAgICAgICAgICAgICAgIH0gYXMgTm9uTnVsbGFibGU8VGFza1Byb3BzW1wiZGlzcGxheWVkRmllbGRzXCJdPlswXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW2Rpc3BsYXllZEZpZWxkc1Byb3AsIGl0ZW0uJGluZmllbGRzLCBpdGVtXSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtkaXNwbGF5ZWRGaWVsZHMubWFwKChpZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZmllbGQua2V5ID0gaWZpZWxkLmtleS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGxldCBkZWZWYWwgPSB0eXBlb2YgaWZpZWxkLmRlZmF1bHRWYWx1ZSA9PSBcImZ1bmN0aW9uXCIgPyBpZmllbGQuZGVmYXVsdFZhbHVlKCkgOiBpZmllbGQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBkZWZGaWVsZDogRmllbGQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaWZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRlZlZhbCxcbiAgICAgICAgICAgICAgICAgICAgcmF3OiBMaXRlcmFscy50b1N0cmluZyhkZWZWYWwpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZpZWxkVmFsdWVdID0gdXNlU3RhdGU8TGl0ZXJhbD4oaXRlbS4kaW5maWVsZHNbaWZpZWxkPy5rZXldPy52YWx1ZSB8fCBkZWZGaWVsZC52YWx1ZSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzdGF0ZTIsIGRpc3BhdGNoXSA9IHVzZUVkaXRhYmxlRGlzcGF0Y2g8TGl0ZXJhbD4oe1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBmaWVsZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVyOiB1c2VTdGFibGVDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWw6IExpdGVyYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gKHY6IExpdGVyYWwpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgaW5zdGFuY2VvZiBEYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2LnRvRm9ybWF0KHNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2ICE9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTGl0ZXJhbHMudG9TdHJpbmcodilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHdpdGhGaWVsZHMgPSBpdGVtLiR0ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoRmllbGRzICYmIGl0ZW0uJHRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uJGluZmllbGRzW2lmaWVsZC5rZXldKSBpdGVtLiRpbmZpZWxkc1tpZmllbGQua2V5XS52YWx1ZSA9IGRhdGVTdHJpbmcodmFsKSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIGluIGl0ZW0uJGluZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoRmllbGRzID0gc2V0SW5saW5lRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlU3RyaW5nKGl0ZW0uJGluZmllbGRzW2ZpZWxkXT8udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGaWVsZHMgPSBzZXRJbmxpbmVGaWVsZChpdGVtLiR0ZXh0LCBpZmllbGQua2V5LCBkYXRlU3RyaW5nKHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlVGFzayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcC52YXVsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE1hcmtkb3duVGFza0l0ZW0gPyBpdGVtLiRzdGF0dXMgOiBcIiBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW0uJGluZmllbGRzXVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpZmllbGQua2V5ID09IHNldHRpbmdzLnRhc2tDb21wbGV0aW9uVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgaHVoP1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRSZWYuY3VycmVudCA9IGRpc3BhdGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVMaXN0RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzPXtzdGF0ZTJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXtpZmllbGQudHlwZSB8fCBMaXRlcmFscy53cmFwVmFsdWUoZmllbGRWYWx1ZSkhLnR5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXtpdGVtLiRmaWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ9e2l0ZW0uJGluZmllbGRzW2lmaWVsZC5rZXldIHx8IGRlZkZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtpZmllbGQuY29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXtpdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcj17c3RhdGUyLnVwZGF0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZmllbGRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckFzPXtpZmllbGQucmVuZGVyQXN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiB1c2VMaXN0SXRlbUVkaXRpbmcoaXRlbTogTWFya2Rvd25UYXNrSXRlbSB8IE1hcmtkb3duTGlzdEl0ZW0pIHtcbiAgICBjb25zdCBhcHAgPSB1c2VDb250ZXh0KEFQUF9DT05URVhUKTtcbiAgICBjb25zdCBjb3JlID0gdXNlQ29udGV4dChEQVRBQ09SRV9DT05URVhUKTtcbiAgICBjb25zdCBzdGF0dXMgPSB1c2VNZW1vKCgpID0+IChpdGVtIGluc3RhbmNlb2YgTWFya2Rvd25UYXNrSXRlbSA/IGl0ZW0uJHN0YXR1cyA6IFwiIFwiKSwgW2l0ZW1dKTtcbiAgICByZXR1cm4gdXNlU3RhYmxlQ2FsbGJhY2soXG4gICAgICAgIGFzeW5jICh2YWw6IExpdGVyYWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdpdGhGaWVsZHMgPSBgJHt2YWx9JHtPYmplY3Qua2V5cyhpdGVtLiRpbmZpZWxkcykubGVuZ3RoID8gXCIgXCIgOiBcIlwifWA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgaW4gaXRlbS4kaW5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aEZpZWxkcyA9IHNldElubGluZUZpZWxkKHdpdGhGaWVsZHMsIGZpZWxkLCBpdGVtLiRpbmZpZWxkc1tmaWVsZF0ucmF3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgcmV3cml0ZVRhc2soYXBwLnZhdWx0LCBjb3JlLCBpdGVtLCBzdGF0dXMsIHdpdGhGaWVsZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbc3RhdHVzLCBpdGVtXVxuICAgICk7XG59XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHVpXG4gKi9cbmltcG9ydCBcIi4vcGFnaW5nLmNzc1wiO1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBGcmFnbWVudCwgUmVmT2JqZWN0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTRVRUSU5HU19DT05URVhUIH0gZnJvbSBcInVpL21hcmtkb3duXCI7XG5cbi8qKiAwLWluZGV4ZWQgcGFnZSBjb250cm9sLiBgcGFnZWAgc2hvdWxkIGJlIHRoZSBjdXJyZW50IDAtaW5kZXhlZCBwYWdlLCB3aGlsZSBgdG90YWxQYWdlc2AgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKiBAcGFyYW0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gUmF3Q29udHJvbGxlZFBhZ2VyKHtcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgdG90YWxQYWdlcyxcbn06IHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgc2V0UGFnZTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG59KSB7XG4gICAgLy8gQ2xhbXAgcGFnZSB0byBiZSB3aXRoaW4gdGhlIGFjdHVhbCBib3VuZHMgb2YgcGFnZXMuXG4gICAgdG90YWxQYWdlcyA9IE1hdGgubWF4KDEsIHRvdGFsUGFnZXMpO1xuXG4gICAgY29uc3QgcmVhbFBhZ2UgPSBjbGFtcChwYWdlLCAwLCB0b3RhbFBhZ2VzIC0gMSk7XG4gICAgY29uc3QgdmlzaWJsZVBhZ2VzID0gdXNlTWVtbygoKSA9PiBzcGxpdFBhZ2VzKHJlYWxQYWdlLCB0b3RhbFBhZ2VzKSwgW3JlYWxQYWdlLCB0b3RhbFBhZ2VzXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sXCI+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYy1wYWdpbmctY29udHJvbC1wYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcGFnZSAhPSAwICYmIHNldFBhZ2UocGFnZSAtIDEpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cGFnZSA9PSAwfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUuNSAxOWwtNy03IDctN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge3Zpc2libGVQYWdlcy5tYXAoKHBhZ2VzLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7aSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sLXBhZ2UgZGMtcGFnaW5nLWNvbnRyb2wtc2VwYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlKHJlYWxQYWdlICsgKGlzTGVmdFNlcGVyYXRvcihyZWFsUGFnZSwgdmlzaWJsZVBhZ2VzLmxlbmd0aCwgaSkgPyAtNSA6IDUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUtcmVuZGVyaW5nPVwiZ2VvbWV0cmljUHJlY2lzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYy1wYWdpbmctY29udHJvbC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHI9XCIxXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxOVwiIGN5PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgcj1cIjFcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjVcIiBjeT1cIjEyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHI9XCIxXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMWVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlLXJlbmRlcmluZz1cImdlb21ldHJpY1ByZWNpc2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPXtgZGMtcGFnaW5nLWNvbnRyb2wtbGVhcC0ke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMZWZ0U2VwZXJhdG9yKHJlYWxQYWdlLCB2aXNpYmxlUGFnZXMubGVuZ3RoLCBpKSA/IFwibGVmdFwiIDogXCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxN2w1LTUtNS01XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTdsNS01LTUtNVwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7cGFnZXMubWFwKChwKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZGMtcGFnaW5nLWNvbnRyb2wtcGFnZSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID09PSByZWFsUGFnZSA/IFwiIGRjLXBhZ2luZy1jb250cm9sLXBhZ2UtYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHNldFBhZ2UocCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3AgKyAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRjLXBhZ2luZy1jb250cm9sLXBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwYWdlICE9PSB0b3RhbFBhZ2VzIC0gMSAmJiBzZXRQYWdlKHBhZ2UgKyAxKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhZ2UgPT09IHRvdGFsUGFnZXMgLSAxfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC41IDVsNyA3LTcgN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuXG4vKiogMC1pbmRleGVkIHBhZ2UgY29udHJvbC4gYHBhZ2VgIHNob3VsZCBiZSB0aGUgY3VycmVudCAwLWluZGV4ZWQgcGFlZywgd2hpbGUgYG1heFBhZ2VgIGlzIHRoZSBtYXhpbXVtIHBhZ2UgKGluY2x1c2l2ZSkuICovXG5leHBvcnQgY29uc3QgQ29udHJvbGxlZFBhZ2VyID0gUmVhY3QubWVtbyhSYXdDb250cm9sbGVkUGFnZXIpO1xuXG4vKiogSG9vayB3aGljaCBwcm92aWRlcyBhdXRvbWF0aWMgcGFnZSByZWZsb3cgYW5kIHBhZ2Ugc3RhdGUgbWFuYWdlbWVudC5cbiAqIEBncm91cCBIb29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUGFnaW5nKHtcbiAgICBpbml0aWFsUGFnZSA9IDAsXG4gICAgcGFnZVNpemUsXG4gICAgZWxlbWVudHMsXG59OiB7XG4gICAgaW5pdGlhbFBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGVsZW1lbnRzOiBudW1iZXI7XG59KTogW251bWJlciwgbnVtYmVyLCAocGFnZTogbnVtYmVyKSA9PiB2b2lkXSB7XG4gICAgLy8gV2UgdHJhY2sgdGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2hlbiBwYWdlIHNpemUgY2hhbmdlcyB3ZSBjYW4ganVzdCBhdXRvbWF0aWNhbGx5IHJlY29tcHV0ZSB0aGUgcGFnZSB3ZSBhcmUgb24gd2l0aG91dCBhbnkgc3RhdGUuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChlbGVtZW50cyAvIHBhZ2VTaXplKSk7XG4gICAgY29uc3QgW3BhZ2VTdGFydCwgc2V0UGFnZVN0YXJ0XSA9IHVzZVN0YXRlKCgpID0+IGNsYW1wKGluaXRpYWxQYWdlLCAwLCB0b3RhbFBhZ2VzIC0gMSkpO1xuXG4gICAgY29uc3Qgc2V0Qm91bmRlZFBhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHBhZ2U6IG51bWJlcikgPT4gc2V0UGFnZVN0YXJ0KGNsYW1wKHBhZ2UsIDAsIHRvdGFsUGFnZXMgLSAxKSAqIHBhZ2VTaXplKSxcbiAgICAgICAgW3BhZ2VTaXplLCB0b3RhbFBhZ2VzXVxuICAgICk7XG5cbiAgICBjb25zdCBwYWdlID0gY2xhbXAoTWF0aC5mbG9vcihwYWdlU3RhcnQgLyBwYWdlU2l6ZSksIDAsIHRvdGFsUGFnZXMgLSAxKTtcbiAgICByZXR1cm4gW3BhZ2UsIHRvdGFsUGFnZXMsIHNldEJvdW5kZWRQYWdlXTtcbn1cblxuLyoqIFByb3ZpZGVzIHVzZWZ1bCBtZXRhZGF0YSBhYm91dCBwYWdpbmcuXG4gKiBAZ3JvdXAgUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmcge1xuICAgIC8qKiBXaGV0aGVyIHBhZ2luZyBpcyBlbmFibGVkLiAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqIFdoZXRoZXIgdGhlIHZpZXcgc2hvdWxkIHNjcm9sbCB3aGVuIHRoZSBwYWdlIGNoYW5nZXMuICovXG4gICAgc2Nyb2xsOiBib29sZWFuO1xuICAgIC8qKiBUaGUgY3VycmVudCBwYWdlLiAqL1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICAvKiogVGhlIHNpemUgb2YgZWFjaCBwYWdlLiAqL1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgLyoqIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgZm9yIHRoaXMgZGF0YS4gKi9cbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gICAgLyoqIFVwZGF0ZSB0aGUgY3VycmVudCBwYWdlLiAqL1xuICAgIHNldFBhZ2U6IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQ2VudHJhbCBwYWdpbmcgaG9vayB3aGljaCBleHRyYWN0cyBwYWdlIG1ldGFkYXRhIG91dCBvZiBEYXRhY29yZSBzZXR0aW5ncywgaGFuZGxlcyBwYWdlIG92ZXJmbG93LCBjdXJyZW50IHBhZ2Ugc3RhdGUsIGFuZCB1cGRhdGluZyB0aGUgcGFnZVxuICogaWYgdGhlIGVsZW1lbnRzIGNoYW5nZS4gSWYgYSBjb250YWluZXIgaXMgc3BlY2lmaWVkLCBhbHNvIHN1cHBvcnRzIHNjcm9sbGluZyB0aGUgY29udGFpbmVyIHZpZXcgb24gcGFnZSBjaGFuZ2VzLlxuICogQGdyb3VwIEhvb2tzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEYXRhY29yZVBhZ2luZyh7XG4gICAgaW5pdGlhbFBhZ2UgPSAwLFxuICAgIHBhZ2luZyxcbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2UsXG4gICAgZWxlbWVudHMsXG4gICAgY29udGFpbmVyLFxufToge1xuICAgIGluaXRpYWxQYWdlOiBudW1iZXI7XG4gICAgcGFnaW5nOiBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHNjcm9sbE9uUGFnZUNoYW5nZT86IGJvb2xlYW4gfCBudW1iZXI7XG4gICAgZWxlbWVudHM6IG51bWJlcjtcbiAgICBjb250YWluZXI/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xufSk6IFBhZ2luZyB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB1c2VDb250ZXh0KFNFVFRJTkdTX0NPTlRFWFQpO1xuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0eXBlb2YgcGFnaW5nID09PSBcIm51bWJlclwiID8gcGFnaW5nIDogc2V0dGluZ3MuZGVmYXVsdFBhZ2VTaXplO1xuICAgIGNvbnN0IHBhZ2luZ0VuYWJsZWQgPSB0eXBlb2YgcGFnaW5nID09PSBcIm51bWJlclwiIHx8IHBhZ2luZyA9PT0gdHJ1ZTtcbiAgICBjb25zdCBzaG91bGRTY3JvbGwgPVxuICAgICAgICAodHlwZW9mIHNjcm9sbE9uUGFnZUNoYW5nZSA9PT0gXCJudW1iZXJcIiAmJiBzY3JvbGxPblBhZ2VDaGFuZ2UgPj0gcGFnZVNpemUpIHx8XG4gICAgICAgICEhKHNjcm9sbE9uUGFnZUNoYW5nZSA/PyBzZXR0aW5ncy5zY3JvbGxPblBhZ2VDaGFuZ2UpO1xuXG4gICAgY29uc3QgW3BhZ2UsIHRvdGFsUGFnZXMsIHJhd1NldFBhZ2VdID0gdXNlUGFnaW5nKHsgaW5pdGlhbFBhZ2UsIHBhZ2VTaXplLCBlbGVtZW50cyB9KTtcblxuICAgIC8vIEhhbmRsZSBhdXRvLXNjcm9sbCBpZiBhIGNvbnRhaW5lciBpcyBwcm92aWRlZC5cbiAgICBjb25zdCBzZXRQYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChuZXdQYWdlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChwYWdlICE9IG5ld1BhZ2UgJiYgY29udGFpbmVyICYmIHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxuICAgICAgICAgICAgICAgICAgICBibG9jazogXCJzdGFydFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmxpbmU6IFwibmVhcmVzdFwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByYXdTZXRQYWdlKG5ld1BhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBbcGFnZSwgY29udGFpbmVyLCBzaG91bGRTY3JvbGwsIHJhd1NldFBhZ2VdXG4gICAgKTtcblxuICAgIHJldHVybiB7IGVuYWJsZWQ6IHBhZ2luZ0VuYWJsZWQsIHNjcm9sbDogc2hvdWxkU2Nyb2xsLCBwYWdlLCBwYWdlU2l6ZSwgdG90YWxQYWdlcywgc2V0UGFnZSB9O1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY2xhbXAoaW5wdXQ6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoaW5wdXQgPCBtaW4pIHJldHVybiBtaW47XG4gICAgaWYgKGlucHV0ID4gbWF4KSByZXR1cm4gbWF4O1xuICAgIHJldHVybiBpbnB1dDtcbn1cblxuLyoqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIGZpbmRpbmcgdGhlIHNwZWNpZmljIHBhZ2UgbnVtYmVycyB0byByZW5kZXIuIEFsd2F5cyBhaW1zIHRvIHJlbmRlciA5IG9yIDEwIHBhZ2UgbnVtYmVycyB3aXRoIGEgc2VwYXJhdG9yLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBzcGxpdFBhZ2VzKHBhZ2U6IG51bWJlciwgdG90YWxQYWdlczogbnVtYmVyKTogbnVtYmVyW11bXSB7XG4gICAgLy8gSWYgbGVzcyB0aGFuIDEyIHBhZ2VzLCBzaG93IGFsbCBvZiB0aGVtLlxuICAgIGlmICh0b3RhbFBhZ2VzIDwgMTIpIHJldHVybiBbQXJyYXkuZnJvbSh7IGxlbmd0aDogdG90YWxQYWdlcyB9LCAoXywgaSkgPT4gaSldO1xuXG4gICAgLy8gV2UgaGF2ZSBhdCBsZWFzdCAxMiBwYWdlcyAoMCAuLiAxMCBpbmNsdXNpdmUpLiBPdXIgZ29hbCBpcyB0byBoYXZlIDkgdG90YWwgdmlzaWJsZSBlbGVtZW50cywgc28gc3BsaXQgYmFzZWQgb24gdGhhdC5cbiAgICAvLyA1IHN1cnJvdW5kaW5nIHtwYWdlfSwgMCwgMSwgbWF4UGFnZSAtIDEsIG1heFBhZ2UuXG4gICAgaWYgKHBhZ2UgPCA1KVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDddLFxuICAgICAgICAgICAgW3RvdGFsUGFnZXMgLSAyLCB0b3RhbFBhZ2VzIC0gMV0sXG4gICAgICAgIF07XG4gICAgZWxzZSBpZiAocGFnZSA+IHRvdGFsUGFnZXMgLSA2KVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgWzAsIDFdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA4LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA3LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA2LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA1LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSA0LFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAzLFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAyLFxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXMgLSAxLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgXTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbMCwgMV0sXG4gICAgICAgICAgICBbcGFnZSAtIDIsIHBhZ2UgLSAxLCBwYWdlLCBwYWdlICsgMSwgcGFnZSArIDJdLFxuICAgICAgICAgICAgW3RvdGFsUGFnZXMgLSAyLCB0b3RhbFBhZ2VzIC0gMV0sXG4gICAgICAgIF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gaXNMZWZ0U2VwZXJhdG9yKHJlYWxQYWdlOiBudW1iZXIsIHZpc2libGVQYWdlc0xlbmd0aDogbnVtYmVyLCBzZXBlcmF0b3JJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgd2UgaGF2ZSAyIHZpc2libGUgcGFnZXMsIHdlIGNhbiBkZXRlcm1pbmUgc2VwZXJhdG9yIGlzIGNsaWNrZWQgYnkgcmVhbFBhZ2UuXG4gICAgLy8gSWYgd2UgaGF2ZSAzIHZpc2libGUgcGFnZXMsIHdlIGNhbiBkZXRlcm1pbmUgc2VwZXJhdG9yIGlzIGNsaWNrZWQgYnkgaW5kZXguXG4gICAgaWYgKHZpc2libGVQYWdlc0xlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAocmVhbFBhZ2UgPCA1KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzZXBlcmF0b3JJbmRleCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiY29uc3QgcHJlZml4ID0gXCJmYXNcIjtcbmNvbnN0IGZhMCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICcwJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCIzMFwiLCBcIk0wIDE5MkMwIDEwMy42IDcxLjYgMzIgMTYwIDMyczE2MCA3MS42IDE2MCAxNjBsMCAxMjhjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0MDguNCAwIDMyMEwwIDE5MnpNMTYwIDk2Yy01MyAwLTk2IDQzLTk2IDk2bDAgMTI4YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xMjhjMC01My00My05Ni05Ni05NnpcIl1cbn07XG5jb25zdCBmYTEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnMScsXG4gIGljb246IFsyNTYsIDUxMiwgW10sIFwiMzFcIiwgXCJNMTYwIDY0YzAtMTEuOC02LjUtMjIuNi0xNi45LTI4LjJzLTIzLTUtMzIuOCAxLjZsLTk2IDY0Qy0uNSAxMTEuMi00LjQgMTMxIDUuNCAxNDUuOHMyOS43IDE4LjcgNDQuNCA4LjlMOTYgMTIzLjggOTYgNDE2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTM1MnpcIl1cbn07XG5jb25zdCBmYTIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnMicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzJcIiwgXCJNMTQyLjkgOTZjLTIxLjUgMC00Mi4yIDguNS01Ny40IDIzLjhMNTQuNiAxNTAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNDAuMiA3NC41QzY3LjUgNDcuMyAxMDQuNCAzMiAxNDIuOSAzMkMyMjMgMzIgMjg4IDk3IDI4OCAxNzcuMWMwIDM4LjUtMTUuMyA3NS40LTQyLjUgMTAyLjZMMTA5LjMgNDE2IDI4OCA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOUwyMDAuMiAyMzQuNWMxNS4yLTE1LjIgMjMuOC0zNS45IDIzLjgtNTcuNGMwLTQ0LjgtMzYuMy04MS4xLTgxLjEtODEuMXpcIl1cbn07XG5jb25zdCBmYTMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnMycsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzNcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwyNDAgMGMxMy4yIDAgMjUgOC4xIDI5LjggMjAuNHMxLjUgMjYuMy04LjIgMzUuMkwxNjIuMyAyMDhsMjEuNyAwYzc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2cy02MC45IDEzNi0xMzYgMTM2bC03OC42IDBDNjMgNDgwIDI0LjIgNDU2IDUuMyA0MTguMWwtMS45LTMuOGMtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDEuOSAzLjhjOC4xIDE2LjMgMjQuOCAyNi41IDQyLjkgMjYuNWw3OC42IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJzLTMyLjItNzItNzItNzJMODAgMjcyYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuNHMtMS41LTI2LjMgOC4yLTM1LjJMMTg5LjcgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpcIl1cbn07XG5jb25zdCBmYTQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnNCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiMzRcIiwgXCJNMTg5IDc3LjZjNy41LTE2IC43LTM1LjEtMTUuMy00Mi42cy0zNS4xLS43LTQyLjYgMTUuM0wzIDMyMi40Yy00LjcgOS45LTMuOSAyMS41IDEuOSAzMC44UzIxIDM2OCAzMiAzNjhsMjI0IDAgMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0NEw4Mi40IDMwNCAxODkgNzcuNnpcIl1cbn07XG5jb25zdCBmYTUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnNScsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzVcIiwgXCJNMzIuNSA1OC4zQzM1LjMgNDMuMSA0OC41IDMyIDY0IDMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDkwLjcgOTYgNzAuMyAyMDggMTg0IDIwOGM3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNnMtNjAuOSAxMzYtMTM2IDEzNmwtODMuNSAwYy0zOS40IDAtNzUuNC0yMi4zLTkzLTU3LjVsLTQuMS04LjJjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlzMzUtMS41IDQyLjkgMTQuM2w0LjEgOC4yYzYuOCAxMy42IDIwLjYgMjIuMSAzNS44IDIyLjFsODMuNSAwYzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcyTDMyIDI3MmMtOS41IDAtMTguNS00LjItMjQuNi0xMS41cy04LjYtMTYuOS02LjktMjYuMmwzMi0xNzZ6XCJdXG59O1xuY29uc3QgZmE2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzYnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcIjM2XCIsIFwiTTIzMi40IDg0LjdjMTEuNC0xMy41IDkuNy0zMy43LTMuOC00NS4xcy0zMy43LTkuNy00NS4xIDMuOEwzOC42IDIxNC43QzE0LjcgMjQyLjkgMS4xIDI3OC40IC4xIDMxNS4yYzAgMS40LS4xIDIuOS0uMSA0LjNsMCAuNWMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MHMxNjAtNzEuNiAxNjAtMTYwYzAtODUuNS02Ny4xLTE1NS40LTE1MS41LTE1OS44bDYzLjktNzUuNnpNMjU2IDMyMEE5NiA5NiAwIDEgMSA2NCAzMjBhOTYgOTYgMCAxIDEgMTkyIDB6XCJdXG59O1xuY29uc3QgZmE3ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJzcnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcIjM3XCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMjU2IDBjMTEuNSAwIDIyIDYuMSAyNy43IDE2LjFzNS43IDIyLjItLjEgMzIuMWwtMjI0IDM4NGMtOC45IDE1LjMtMjguNSAyMC40LTQzLjggMTEuNXMtMjAuNC0yOC41LTExLjUtNDMuOEwyMzIuMyA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbmNvbnN0IGZhOCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICc4JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCIzOFwiLCBcIk0zMDQgMTYwYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4bC0zMiAwQzczLjMgMzIgMTYgODkuMyAxNiAxNjBjMCAzNC42IDEzLjcgNjYgMzYgODlDMjAuNSAyNzIuMyAwIDMwOS44IDAgMzUyYzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDY0IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC00Mi4yLTIwLjUtNzkuNy01Mi0xMDNjMjIuMy0yMyAzNi01NC40IDM2LTg5ek0xNzYuMSAyODhsMTUuOSAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0bDE1LjkgMGMwIDAgLjEgMCAuMSAwbDMyIDBjMCAwIC4xIDAgLjEgMHptMC02NGMwIDAgMCAwIDAgMGwtMzIgMGMwIDAgMCAwIDAgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGMwIDM1LjMtMjguNiA2NC02NCA2NHpcIl1cbn07XG5jb25zdCBmYTkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnOScsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiMzlcIiwgXCJNNjQgMTkyYTk2IDk2IDAgMSAwIDE5MiAwQTk2IDk2IDAgMSAwIDY0IDE5MnptODcuNSAxNTkuOEM2Ny4xIDM0Ny40IDAgMjc3LjUgMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMnMxNjAgNzEuNiAxNjAgMTYwYzAgMi42LS4xIDUuMy0uMiA3LjljLTEuNyAzNS43LTE1LjIgNzAtMzguNCA5Ny40bC0xNDUgMTcxLjRjLTExLjQgMTMuNS0zMS42IDE1LjItNDUuMSAzLjhzLTE1LjItMzEuNi0zLjgtNDUuMWw2My45LTc1LjZ6XCJdXG59O1xuY29uc3QgZmFGaWxsRHJpcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxsLWRyaXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1NzZcIiwgXCJNNDEuNCA5LjRDNTMuOS0zLjEgNzQuMS0zLjEgODYuNiA5LjRMMTY4IDkwLjdsNTMuMS01My4xYzI4LjEtMjguMSA3My43LTI4LjEgMTAxLjggMEw0NzQuMyAxODkuMWMyOC4xIDI4LjEgMjguMSA3My43IDAgMTAxLjhMMjgzLjkgNDgxLjRjLTM3LjUgMzcuNS05OC4zIDM3LjUtMTM1LjggMEwzMC42IDM2My45Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjhMMTIyLjcgMTM2IDQxLjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6bTE3NiAyMjEuM0wxNjggMTgxLjMgNzUuOSAyNzMuNGMtNC4yIDQuMi03IDkuMy04LjQgMTQuNmwzMTkuMiAwIDQyLjMtNDIuM2MzLjEtMy4xIDMuMS04LjIgMC0xMS4zTDI3Ny43IDgyLjljLTMuMS0zLjEtOC4yLTMuMS0xMS4zIDBMMjEzLjMgMTM2bDQ5LjQgNDkuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMHpNNTEyIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yNS4yIDMyLjYtNzkuNiA1MS4yLTEwOC43YzYtOS40IDE5LjUtOS40IDI1LjUgMEM1NDMuNCAzNjguNCA1NzYgNDIyLjggNTc2IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NHpcIl1cbn07XG5jb25zdCBmYUFycm93c1RvQ2lyY2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10by1jaXJjbGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YmRcIiwgXCJNOS40IDkuNEMyMS45LTMuMSA0Mi4xLTMuMSA1NC42IDkuNEwxNjAgMTE0LjcgMTYwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NmMwIDQuMy0uOSA4LjUtMi40IDEyLjJjLTEuNiAzLjctMy44IDcuMy02LjkgMTAuM2wtLjEgLjFjLTMuMSAzLTYuNiA1LjMtMTAuMyA2LjljLTMuOCAxLjYtNy45IDIuNC0xMi4yIDIuNGwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxOC43IDBMOS40IDU0LjZDLTMuMSA0Mi4xLTMuMSAyMS45IDkuNCA5LjR6TTI1NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0xMTQuNyAzNTJMOTYgMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBzMCAwIDAgMGwuMSAwYzguOCAwIDE2LjcgMy42IDIyLjUgOS4zbC4xIC4xYzMgMy4xIDUuMyA2LjYgNi45IDEwLjNjMS42IDMuOCAyLjQgNy45IDIuNCAxMi4ybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC43TDU0LjYgNTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDExNC43IDM1MnpNNDE2IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxOC43TDU4NS40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zTDUyNS4zIDE2MGwxOC43IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTguOCAwLTE2LjgtMy42LTIyLjYtOS4zbC0uMS0uMWMtMy0zLjEtNS4zLTYuNi02LjktMTAuM3MtMi40LTcuOC0yLjQtMTIuMmwwLS4xczAgMCAwIDBsMC05NnpNNTI1LjMgMzUyTDYzMC42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDQ4MCAzOTcuM2wwIDE4LjdjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NnMwIDAgMCAwbDAtLjFjMC00LjMgLjktOC40IDIuNC0xMi4yYzEuNi0zLjggMy45LTcuMyA2LjktMTAuNGM1LjgtNS44IDEzLjctOS4zIDIyLjUtOS40bC4xIDBzMCAwIDAgMGw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC43IDB6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVDaGV2cm9uUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZXZyb24tcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNoZXZyb24tY2lyY2xlLXJpZ2h0XCJdLCBcImYxMzhcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMEEyNTYgMjU2IDAgMSAwIDAgMjU2ek0yNDEgMzc3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg3LTg3LTg3LTg3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMMzQ1IDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDEgMzc3elwiXVxufTtcbmNvbnN0IGZhQ2hldnJvbkNpcmNsZVJpZ2h0ID0gZmFDaXJjbGVDaGV2cm9uUmlnaHQ7XG5jb25zdCBmYUF0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2F0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE5NDZdLCBcIjQwXCIsIFwiTTI1NiA2NEMxNTAgNjQgNjQgMTUwIDY0IDI1NnM4NiAxOTIgMTkyIDE5MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkMxMTQuNiA1MTIgMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2bDAgMzJjMCA1My00MyA5Ni05NiA5NmMtMjkuMyAwLTU1LjYtMTMuMi03My4yLTMzLjlDMzIwIDM3MS4xIDI4OS41IDM4NCAyNTYgMzg0Yy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4YzI3LjkgMCA1My43IDguOSA3NC43IDI0LjFjNS43LTUgMTMuMS04LjEgMjEuMy04LjFjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMmMwLTEwNi04Ni0xOTItMTkyLTE5MnptNjQgMTkyYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpcIl1cbn07XG5jb25zdCBmYVRyYXNoQ2FuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYXNoLWNhbicsXG4gIGljb246IFs0NDgsIDUxMiwgWzYxNDYwLCBcInRyYXNoLWFsdFwiXSwgXCJmMmVkXCIsIFwiTTEzNS4yIDE3LjdDMTQwLjYgNi44IDE1MS43IDAgMTYzLjggMEwyODQuMiAwYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdMMzIwIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDk2IDAgNy4yLTE0LjN6TTMyIDEyOGwzODQgMCAwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzIwem05NiA2NGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjI0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yMjRjMC04LjgtNy4yLTE2LTE2LTE2em05NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyMjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTIyNGMwLTguOC03LjItMTYtMTYtMTZ6bTk2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDIyNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjI0YzAtOC44LTcuMi0xNi0xNi0xNnpcIl1cbn07XG5jb25zdCBmYVRyYXNoQWx0ID0gZmFUcmFzaENhbjtcbmNvbnN0IGZhVGV4dEhlaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZXh0LWhlaWdodCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjAzNFwiLCBcIk02NCAxMjhsMC0zMiA2NCAwIDAgMzIwLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMjAgNjQgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00OGMwLTI2LjUtMjEuNS00OC00OC00OEwxNjAgMzIgNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MGwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTUwMi42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlzMTYuNiAxOS44IDI5LjYgMTkuOGwzMiAwIDAgMTkyLTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45cy0xNi42LTE5LjgtMjkuNi0xOS44bC0zMiAwIDAtMTkyIDMyIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjR6XCJdXG59O1xuY29uc3QgZmFVc2VyWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci14bWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgW1widXNlci10aW1lc1wiXSwgXCJmMjM1XCIsIFwiTTk2IDEyOGExMjggMTI4IDAgMSAxIDI1NiAwQTEyOCAxMjggMCAxIDEgOTYgMTI4ek0wIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0bDkxLjQgMEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0wyOS43IDUxMkMxMy4zIDUxMiAwIDQ5OC43IDAgNDgyLjN6TTQ3MSAxNDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNDcgNDcgNDctNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC00NyA0NyA0NyA0N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00Ny00NyA0N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Ny00Ny00Ny00N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6XCJdXG59O1xuY29uc3QgZmFVc2VyVGltZXMgPSBmYVVzZXJYbWFyaztcbmNvbnN0IGZhU3RldGhvc2NvcGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RldGhvc2NvcGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjk2NThdLCBcImYwZjFcIiwgXCJNMTQyLjQgMjEuOWM1LjYgMTYuOC0zLjUgMzQuOS0yMC4yIDQwLjVMOTYgNzEuMSA5NiAxOTJjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyMC45LTI2LjEtOC43Yy0xNi44LTUuNi0yNS44LTIzLjctMjAuMi00MC41czIzLjctMjUuOCA0MC41LTIwLjJsMjYuMSA4LjdDMzM0LjQgMTkuMSAzNTIgNDMuNSAzNTIgNzEuMUwzNTIgMTkyYzAgNzcuMi01NC42IDE0MS42LTEyNy4zIDE1Ni43QzIzMSA0MDQuNiAyNzguNCA0NDggMzM2IDQ0OGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMmwwLTcwLjdjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjNjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgNzAuN2MwIDk3LjItNzguOCAxNzYtMTc2IDE3NmMtOTIuOSAwLTE2OC45LTcxLjktMTc1LjUtMTYzLjFDODcuMiAzMzQuMiAzMiAyNjkuNiAzMiAxOTJMMzIgNzEuMWMwLTI3LjUgMTcuNi01MiA0My44LTYwLjdsMjYuMS04LjdjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4yek00ODAgMjI0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYU1lc3NhZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWVzc2FnZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY29tbWVudC1hbHRcIl0sIFwiZjI3YVwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGw5NiAwIDAgODBjMCA2LjEgMy40IDExLjYgOC44IDE0LjNzMTEuOSAyLjEgMTYuOC0xLjVMMzA5LjMgNDE2IDQ0OCA0MTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpcIl1cbn07XG5jb25zdCBmYUNvbW1lbnRBbHQgPSBmYU1lc3NhZ2U7XG5jb25zdCBmYUluZm8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5mbycsXG4gIGljb246IFsxOTIsIDUxMiwgW10sIFwiZjEyOVwiLCBcIk00OCA4MGE0OCA0OCAwIDEgMSA5NiAwQTQ4IDQ4IDAgMSAxIDQ4IDgwek0wIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0xOTItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdXG59O1xuY29uc3QgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb3duLWxlZnQtYW5kLXVwLXJpZ2h0LXRvLWNlbnRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY29tcHJlc3MtYWx0XCJdLCBcImY0MjJcIiwgXCJNNDM5IDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJzLTEyLjUgMTQuOC0yMi4yIDE0LjhsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsMzkgMzlMNDM5IDd6TTcyIDI3MmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC0zOS0zOUw3MyA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDcgNDczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4Ny04N0w1NSAzMTNjLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJzMTIuNS0xNC44IDIyLjItMTQuOHpcIl1cbn07XG5jb25zdCBmYUNvbXByZXNzQWx0ID0gZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlcjtcbmNvbnN0IGZhRXhwbG9zaW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V4cGxvc2lvbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRlOVwiLCBcIk00OTkuNiAxMS4zYzYuNy0xMC43IDIwLjUtMTQuNSAzMS43LTguNXMxNS44IDE5LjUgMTAuNiAzMUw0MDQuOCAzMzguNmMyLjIgMi4zIDQuMyA0LjcgNi4zIDcuMWw5Ny4yLTU0LjdjMTAuNS01LjkgMjMuNi0zLjEgMzAuOSA2LjRzNi4zIDIzLTIuMiAzMS41bC04NyA4Ny03MS40IDBjLTEzLjItMzcuMy00OC43LTY0LTkwLjUtNjRzLTc3LjQgMjYuNy05MC41IDY0bC03OS42IDBMNDIuMyAzNjMuN2MtOS43LTYuNy0xMy4xLTE5LjYtNy45LTMwLjNzMTcuNC0xNS45IDI4LjctMTIuNGw5Ny4yIDMwLjRjMy0zLjkgNi4xLTcuNyA5LjQtMTEuM0wxMDcuNCAyMzYuM2MtNi4xLTEwLjEtMy45LTIzLjEgNS4xLTMwLjdzMjIuMi03LjUgMzEuMSAuMUwyNDYgMjkzLjZjMS41LS40IDMtLjggNC41LTEuMWwxMy42LTE0Mi43YzEuMi0xMi4zIDExLjUtMjEuNyAyMy45LTIxLjdzMjIuNyA5LjQgMjMuOSAyMS43bDEzLjUgMTQxLjlMNDk5LjYgMTEuM3pNNjQgNDQ4czAgMCAwIDBsNDQ4IDBzMCAwIDAgMGwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwek0yODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6XCJdXG59O1xuY29uc3QgZmFGaWxlTGluZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1saW5lcycsXG4gIGljb246IFszODQsIDUxMiwgWzEyODQ0MSwgMTI4NDYyLCA2MTY4NiwgXCJmaWxlLWFsdFwiLCBcImZpbGUtdGV4dFwiXSwgXCJmMTVjXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwyMjQgMCA2NCAwek0yNTYgMGwwIDEyOCAxMjggMEwyNTYgMHpNMTEyIDI1NmwxNjAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRsMTYwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2MCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0bDE2MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNjAgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYUZpbGVBbHQgPSBmYUZpbGVMaW5lcztcbmNvbnN0IGZhRmlsZVRleHQgPSBmYUZpbGVMaW5lcztcbmNvbnN0IGZhV2F2ZVNxdWFyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YXZlLXNxdWFyZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjgzZVwiLCBcIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzNTIgOTYgMCAwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzUyLTk2IDAgMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDAgMC0xNjB6XCJdXG59O1xuY29uc3QgZmFSaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3MGJcIiwgXCJNNjQgMjA4YzAgNy44IDQuNCAxOC43IDE3LjEgMzAuM0MxMjYuNSAyMTQuMSAxODguOSAyMDAgMjU2IDIwMHMxMjkuNSAxNC4xIDE3NC45IDM4LjNDNDQzLjYgMjI2LjcgNDQ4IDIxNS44IDQ0OCAyMDhjMC0xMi4zLTEwLjgtMzItNDcuOS01MC42QzM2NC45IDEzOS44IDMxNCAxMjggMjU2IDEyOHMtMTA4LjkgMTEuOC0xNDQuMSAyOS40Qzc0LjggMTc2IDY0IDE5NS43IDY0IDIwOHptMTkyIDQwYy00NyAwLTg5LjMgNy42LTEyMi45IDE5LjdDMTY2LjMgMjgwLjIgMjA4LjggMjg4IDI1NiAyODhzODkuNy03LjggMTIyLjktMjAuM0MzNDUuMyAyNTUuNiAzMDMgMjQ4IDI1NiAyNDh6TTAgMjA4YzAtNDkuNiAzOS40LTg1LjggODMuMy0xMDcuOEMxMjkuMSA3Ny4zIDE5MC4zIDY0IDI1NiA2NHMxMjYuOSAxMy4zIDE3Mi43IDM2LjJjNDMuOSAyMiA4My4zIDU4LjIgODMuMyAxMDcuOGwwIDk2YzAgNDkuNi0zOS40IDg1LjgtODMuMyAxMDcuOEMzODIuOSA0MzQuNyAzMjEuNyA0NDggMjU2IDQ0OHMtMTI2LjktMTMuMy0xNzIuNy0zNi4yQzM5LjQgMzg5LjggMCAzNTMuNiAwIDMwNGwwLTk2elwiXVxufTtcbmNvbnN0IGZhQnVpbGRpbmdVbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy11bicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRkOVwiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC00MTZjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTExMi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yMzcuMyA3MS4xbDM0LjcgNTJMMjcyIDgwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyIDAgNDMuMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTk2YzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTEyIDgwbDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdXG59O1xuY29uc3QgZmFEaWNlVGhyZWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS10aHJlZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4NThdLCBcImY1MjdcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTI4IDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYUNhbGVuZGFyRGF5cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWxlbmRhci1kYXlzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJjYWxlbmRhci1hbHRcIl0sIFwiZjA3M1wiLCBcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OEwwIDE2MGwwLTQ4QzAgODUuNSAyMS41IDY0IDQ4IDY0bDQ4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJsNDQ4IDAgMCAyNzJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE5MnptNjQgODBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTI4IDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTQ0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTY0IDQwMGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xuY29uc3QgZmFDYWxlbmRhckFsdCA9IGZhQ2FsZW5kYXJEYXlzO1xuY29uc3QgZmFBbmNob3JDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmNob3ItY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGFhXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBMMjI0IDE3NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMjA4LTQ4IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC02LjEgNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw5NyAyNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDcgMzE5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNy03IDAgNi4xYzAgODguNCA3MS42IDE2MCAxNjAgMTYwbDgwIDAgODAgMGM4LjIgMCAxNi4zLS42IDI0LjItMS44Yy0yMi4yLTE2LjItNDAuNC0zNy41LTUzLTYyLjJMMzIwIDQ0OGwwLTgwIDAtMTI4IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwLjkgMHpNNjQwIDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl1cbn07XG5jb25zdCBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy1jaXJjbGUtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZDFcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxODQuMmMtMzkuMSAzMi4zLTY0IDgxLjEtNjQgMTM1LjhjMCA0OS41IDIwLjQgOTQuMiA1My4zIDEyNi4yQzM2NC41IDUwNS4xIDM1MS4xIDUxMiAzMzYgNTEybC05NiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhsMCA4MC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4ek04MCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptODAgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTEyLTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTY0IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw4MCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNzYgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptODAgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptOTYgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0MC43LTY3LjNjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42TDUyMS40IDM1MiA0MzIgMzUyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDg5LjQgMC0yOC43IDI4LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni01NmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtNTYtNTZjLTYuMi02LjItMTYuNC02LjItMjIuNiAwelwiXVxufTtcbmNvbnN0IGZhVm9sbGV5YmFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2b2xsZXliYWxsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTUyLCBcInZvbGxleWJhbGwtYmFsbFwiXSwgXCJmNDVmXCIsIFwiTTUxMS44IDI2Ny40Yy0yNi4xIDguNy01My40IDEzLjgtODEgMTUuMWM5LjItMTA1LjMtMzEuNS0yMDQuMi0xMDMuMi0yNzIuNEM0MzQuMSA0MS4xIDUxMiAxMzkuNSA1MTIgMjU2YzAgMy44LS4xIDcuNi0uMiAxMS40em0tMy45IDM0LjdjLTUuOCAzMi0xNy42IDYyLTM0LjIgODguN2MtOTcuNSA0OC41LTIxNy43IDQyLjYtMzExLjktMjQuNWMyMy43LTM2LjIgNTUuNC02Ny43IDk0LjUtOTEuOGM3OS45IDQzLjIgMTcwLjEgNTAuOCAyNTEuNiAyNy42em0tMjM2LTU1LjVjLTIuNS05MC45LTQxLjEtMTcyLjctMTAxLjktMjMxLjdDMTk2LjggNS4yIDIyNS44IDAgMjU2IDBjMi43IDAgNS4zIDAgNy45IC4xYzkwLjggNjAuMiAxNDUuNyAxNjcuMiAxMzQuNyAyODIuM2MtNDMuMS0yLjQtODYuNC0xNC4xLTEyNi44LTM1Ljl6TTEzOCAyOC44YzIwLjYgMTguMyAzOC43IDM5LjQgNTMuNyA2Mi42Qzk1LjkgMTM2LjEgMzAuNiAyMjAuOCA3LjMgMzE2LjlDMi41IDI5Ny40IDAgMjc3IDAgMjU2QzAgMTU3LjIgNTYgNzEuNSAxMzggMjguOHptNjkuNiA5MC41YzE5LjUgMzguNiAzMSA4MS45IDMyLjMgMTI3LjdDMTYyLjUgMjk0LjYgMTEwLjkgMzY4LjkgOTAuMiA0NTFDNjYgNDMwLjQgNDUuNiA0MDUuNCAzMC40IDM3Ny4yYzYuNy0xMDguNyA3MS45LTIwOS45IDE3Ny4xLTI1Ny45ek0yNTYgNTEyYy01MC43IDAtOTgtMTQuNy0xMzcuOC00MC4yYzUuNi0yNyAxNC44LTUzLjEgMjcuNC03Ny43QzIzMi4yIDQ1NC42IDMzOC4xIDQ2OC44IDQzMyA0NDFjLTQ2IDQ0LTEwOC4zIDcxLTE3NyA3MXpcIl1cbn07XG5jb25zdCBmYVZvbGxleWJhbGxCYWxsID0gZmFWb2xsZXliYWxsO1xuY29uc3QgZmFBcnJvd3NVcFRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtdXAtdG8tbGluZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRjMlwiLCBcIk0zMiA5Nmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZ6TTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAyMzcuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIxMC43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2em0zMjAgNDUuM2MxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMEw0MTYgMjM3LjMgNDE2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjEwLjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zelwiXVxufTtcbmNvbnN0IGZhU29ydERvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc29ydC1kb3duJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJzb3J0LWRlc2NcIl0sIFwiZjBkZFwiLCBcIk0xODIuNiA0NzAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45czE2LjYtMTkuOCAyOS42LTE5LjhsMjU2IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOWwtMTI4IDEyOHpcIl1cbn07XG5jb25zdCBmYVNvcnREZXNjID0gZmFTb3J0RG93bjtcbmNvbnN0IGZhQ2lyY2xlTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLW1pbnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJtaW51cy1jaXJjbGVcIl0sIFwiZjA1NlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTg0IDIzMmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdXG59O1xuY29uc3QgZmFNaW51c0NpcmNsZSA9IGZhQ2lyY2xlTWludXM7XG5jb25zdCBmYURvb3JPcGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Rvb3Itb3BlbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjUyYlwiLCBcIk0zMjAgMzJjMC05LjktNC41LTE5LjItMTIuMy0yNS4yUzI4OS44LTEuNCAyODAuMiAxbC0xNzkuOSA0NUM3OSA1MS4zIDY0IDcwLjUgNjQgOTIuNUw2NCA0NDhsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMCAxOTIgMCAzMiAwIDAtMzIgMC00NDh6TTI1NiAyNTZjMCAxNy43LTEwLjcgMzItMjQgMzJzLTI0LTE0LjMtMjQtMzJzMTAuNy0zMiAyNC0zMnMyNCAxNC4zIDI0IDMyem05Ni0xMjhsOTYgMCAwIDM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0bC05NiAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFSaWdodEZyb21CcmFja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JpZ2h0LWZyb20tYnJhY2tldCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2lnbi1vdXQtYWx0XCJdLCBcImYyZjVcIiwgXCJNMzc3LjkgMTA1LjlMNTAwLjcgMjI4LjdjNy4yIDcuMiAxMS4zIDE3LjEgMTEuMyAyNy4zcy00LjEgMjAuMS0xMS4zIDI3LjNMMzc3LjkgNDA2LjFjLTYuNCA2LjQtMTUgOS45LTI0IDkuOWMtMTguNyAwLTMzLjktMTUuMi0zMy45LTMzLjlsMC02Mi4xLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwIDAtNjIuMWMwLTE4LjcgMTUuMi0zMy45IDMzLjktMzMuOWM5IDAgMTcuNiAzLjYgMjQgOS45ek0xNjAgOTZMOTYgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXVxufTtcbmNvbnN0IGZhU2lnbk91dEFsdCA9IGZhUmlnaHRGcm9tQnJhY2tldDtcbmNvbnN0IGZhQXRvbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhdG9tJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTg4M10sIFwiZjVkMlwiLCBcIk0yNTYgMzk4LjhjLTExLjggNS4xLTIzLjQgOS43LTM0LjkgMTMuNWMxNi43IDMzLjggMzEgMzUuNyAzNC45IDM1LjdzMTguMS0xLjkgMzQuOS0zNS43Yy0xMS40LTMuOS0yMy4xLTguNC0zNC45LTEzLjV6TTQ0NiAyNTZjMzMgNDUuMiA0NC4zIDkwLjkgMjMuNiAxMjhjLTIwLjIgMzYuMy02Mi41IDQ5LjMtMTE1LjIgNDMuMmMtMjIgNTIuMS01NS42IDg0LjgtOTguNCA4NC44cy03Ni40LTMyLjctOTguNC04NC44Yy01Mi43IDYuMS05NS02LjgtMTE1LjItNDMuMkMyMS43IDM0Ni45IDMzIDMwMS4yIDY2IDI1NmMtMzMtNDUuMi00NC4zLTkwLjktMjMuNi0xMjhjMjAuMi0zNi4zIDYyLjUtNDkuMyAxMTUuMi00My4yQzE3OS42IDMyLjcgMjEzLjIgMCAyNTYgMHM3Ni40IDMyLjcgOTguNCA4NC44YzUyLjctNi4xIDk1IDYuOCAxMTUuMiA0My4yYzIwLjcgMzcuMSA5LjQgODIuOC0yMy42IDEyOHptLTY1LjggNjcuNGMtMS43IDE0LjItMy45IDI4LTYuNyA0MS4yYzMxLjggMS40IDM4LjYtOC43IDQwLjItMTEuN2MyLjMtNC4yIDctMTcuOS0xMS45LTQ4LjFjLTYuOCA2LjMtMTQgMTIuNS0yMS42IDE4LjZ6bS02LjctMTc1LjljMi44IDEzLjEgNSAyNi45IDYuNyA0MS4yYzcuNiA2LjEgMTQuOCAxMi4zIDIxLjYgMTguNmMxOC45LTMwLjIgMTQuMi00NCAxMS45LTQ4LjFjLTEuNi0yLjktOC40LTEzLTQwLjItMTEuN3pNMjkwLjkgOTkuN0MyNzQuMSA2NS45IDI1OS45IDY0IDI1NiA2NHMtMTguMSAxLjktMzQuOSAzNS43YzExLjQgMy45IDIzLjEgOC40IDM0LjkgMTMuNWMxMS44LTUuMSAyMy40LTkuNyAzNC45LTEzLjV6bS0xNTkgODguOWMxLjctMTQuMyAzLjktMjggNi43LTQxLjJjLTMxLjgtMS40LTM4LjYgOC43LTQwLjIgMTEuN2MtMi4zIDQuMi03IDE3LjkgMTEuOSA0OC4xYzYuOC02LjMgMTQtMTIuNSAyMS42LTE4LjZ6TTExMC4yIDMwNC44QzkxLjQgMzM1IDk2IDM0OC43IDk4LjMgMzUyLjljMS42IDIuOSA4LjQgMTMgNDAuMiAxMS43Yy0yLjgtMTMuMS01LTI2LjktNi43LTQxLjJjLTcuNi02LjEtMTQuOC0xMi4zLTIxLjYtMTguNnpNMzM2IDI1NmE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6bS04MC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFTb2FwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NvYXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MzJdLCBcImUwNmVcIiwgXCJNMjA4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzIwIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNNDE2IDMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAgMTYwYzAgMjcuNi0xMS43IDUyLjUtMzAuNCA3MC4xQzQyMi4xIDI3NS43IDQ0OCAzMTAuOCA0NDggMzUyYzAgNTMtNDMgOTYtOTYgOTZsLTE5MiAwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2bDg4LjQgMGMtMTUuMi0xNy0yNC40LTM5LjQtMjQuNC02NEw5NiAxOTJjLTUzIDAtOTYgNDMtOTYgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NmwzMjAgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZ6TTE2MCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRsLTMyIDAtMTYwIDB6XCJdXG59O1xuY29uc3QgZmFJY29ucyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpY29ucycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaGVhcnQtbXVzaWMtY2FtZXJhLWJvbHRcIl0sIFwiZjg2ZFwiLCBcIk01MDAuMyA3LjNDNTA3LjcgMTMuMyA1MTIgMjIuNCA1MTIgMzJsMCAxNDRjMCAyNi41LTI4LjcgNDgtNjQgNDhzLTY0LTIxLjUtNjQtNDhzMjguNy00OCA2NC00OGwwLTU3TDM1MiA5MC4yIDM1MiAyMDhjMCAyNi41LTI4LjcgNDgtNjQgNDhzLTY0LTIxLjUtNjQtNDhzMjguNy00OCA2NC00OGwwLTk2YzAtMTUuMyAxMC44LTI4LjQgMjUuNy0zMS40bDE2MC0zMmM5LjQtMS45IDE5LjEgLjYgMjYuNiA2LjZ6TTc0LjcgMzA0bDExLjgtMTcuOGM1LjktOC45IDE1LjktMTQuMiAyNi42LTE0LjJsNjEuNyAwYzEwLjcgMCAyMC43IDUuMyAyNi42IDE0LjJMMjEzLjMgMzA0bDI2LjcgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzUyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDI2LjcgMHpNMTkyIDQwOGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00NzguNyAyNzguM0w0NDAuMyAzNjhsNTUuNyAwYzYuNyAwIDEyLjYgNC4xIDE1IDEwLjRzLjYgMTMuMy00LjQgMTcuN2wtMTI4IDExMmMtNS42IDQuOS0xMy45IDUuMy0xOS45IC45cy04LjItMTIuNC01LjMtMTkuMkwzOTEuNyA0MDAgMzM2IDQwMGMtNi43IDAtMTIuNi00LjEtMTUtMTAuNHMtLjYtMTMuMyA0LjQtMTcuN2wxMjgtMTEyYzUuNi00LjkgMTMuOS01LjMgMTkuOS0uOXM4LjIgMTIuNCA1LjMgMTkuMnptLTMzOS01OS4yYy02LjUgNi41LTE3IDYuNS0yMyAwTDE5LjkgMTE5LjJjLTI4LTI5LTI2LjUtNzYuOSA1LTEwMy45YzI3LTIzLjUgNjguNC0xOSA5My40IDYuNWwxMCAxMC41IDkuNS0xMC41YzI1LTI1LjUgNjUuOS0zMCA5My45LTYuNWMzMSAyNyAzMi41IDc0LjkgNC41IDEwMy45bC05Ni40IDk5Ljl6XCJdXG59O1xuY29uc3QgZmFIZWFydE11c2ljQ2FtZXJhQm9sdCA9IGZhSWNvbnM7XG5jb25zdCBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21pY3JvcGhvbmUtbGluZXMtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcIm1pY3JvcGhvbmUtYWx0LXNsYXNoXCJdLCBcImY1MzlcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w0NzIuMSAzNDQuN2MxNS4yLTI2IDIzLjktNTYuMyAyMy45LTg4LjdsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI0IDAgMTZjMCAyMS4yLTUuMSA0MS4xLTE0LjIgNTguN0w0MTYgMzAwLjhsMC00NC44LTU3LjEgMC0zNC41LTI3YzIuOS0zLjEgNy01IDExLjYtNWw4MCAwIDAtMzItODAgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4MCAwIDAtMzItODAgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4MCAwYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgNTQuM0wzOC44IDUuMXptMzYyLjUgNDA3bC00My4xLTMzLjlDMzQ2LjEgMzgyIDMzMy4zIDM4NCAzMjAgMzg0Yy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOGwwLTguN0wxNDQuNyAyMTBjLS41IDEuOS0uNyAzLjktLjcgNmwwIDQwYzAgODkuMSA2Ni4yIDE2Mi43IDE1MiAxNzQuNGwwIDMzLjYtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC0zMy42YzIwLjQtMi44IDM5LjctOS4xIDU3LjMtMTguMnpcIl1cbn07XG5jb25zdCBmYU1pY3JvcGhvbmVBbHRTbGFzaCA9IGZhTWljcm9waG9uZUxpbmVzU2xhc2g7XG5jb25zdCBmYUJyaWRnZUNpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZS1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YzlcIiwgXCJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0czE0LjMgMzIgMzIgMzJsNDAgMCAwIDY0LTcyIDAgMCAxMjhjNTMgMCA5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMmwwLTcyLjItNzIgMCAwLTY0IDQwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMzJ6TTQ4OCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0zNjAgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjMyIDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTY0MCAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ4MCAzODUuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdXG59O1xuY29uc3QgZmFQdW1wTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwdW1wLW1lZGljYWwnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwNmFcIiwgXCJNMTI4IDMybDAgOTYgMTI4IDAgMC0zMiA2MC4xIDBjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2wzMy45IDMzLjljMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzNzIuNyA1NS40Yy0xNS0xNS0zNS40LTIzLjQtNTYuNi0yMy40TDI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTExNy40IDE2MGMtMzMuMyAwLTYxIDI1LjUtNjMuOCA1OC43TDM1IDQ0Mi43QzMxLjkgNDgwIDYxLjMgNTEyIDk4LjggNTEybDE4Ni40IDBjMzcuNCAwIDY2LjktMzIgNjMuOC02OS4zbC0xOC43LTIyNGMtMi44LTMzLjItMzAuNS01OC43LTYzLjgtNTguN2wtMTQ5LjEgMHpNMjE2IDI4MGwwIDMyIDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDAgMCAzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTMyLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMzIgMCAwLTMyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdXG59O1xuY29uc3QgZmFGaW5nZXJwcmludCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaW5nZXJwcmludCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjU3N1wiLCBcIk00OCAyNTZDNDggMTQxLjEgMTQxLjEgNDggMjU2IDQ4YzYzLjEgMCAxMTkuNiAyOC4xIDE1Ny44IDcyLjVjOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOEM0MDMuMyAzNC42IDMzMy43IDAgMjU2IDBDMTE0LjYgMCAwIDExNC42IDAgMjU2bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwem00NTguNS01Mi45Yy0yLjctMTMtMTUuNS0yMS4zLTI4LjQtMTguNXMtMjEuMyAxNS41LTE4LjUgMjguNGMyLjkgMTMuOSA0LjUgMjguMyA0LjUgNDMuMWwwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMwLTE4LjEtMS45LTM1LjgtNS41LTUyLjl6TTI1NiA4MGMtMTkgMC0zNy40IDMtNTQuNSA4LjZjLTE1LjIgNS0xOC43IDIzLjctOC4zIDM1LjljNy4xIDguMyAxOC44IDEwLjggMjkuNCA3LjljMTAuNi0yLjkgMjEuOC00LjQgMzMuNC00LjRjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAyNC45YzAgMjUuMi0xLjUgNTAuMy00LjQgNzUuM2MtMS43IDE0LjYgOS40IDI3LjggMjQuMiAyNy44YzExLjggMCAyMS45LTguNiAyMy4zLTIwLjNjMy4zLTI3LjQgNS01NSA1LTgyLjdsMC0yNC45YzAtOTcuMi03OC44LTE3Ni0xNzYtMTc2ek0xNTAuNyAxNDguN2MtOS4xLTEwLjYtMjUuMy0xMS40LTMzLjktLjRDOTMuNyAxNzggODAgMjE1LjQgODAgMjU2bDAgMjQuOWMwIDI0LjItMi42IDQ4LjQtNy44IDcxLjlDNjguOCAzNjguNCA4MC4xIDM4NCA5Ni4xIDM4NGMxMC41IDAgMTkuOS03IDIyLjItMTcuM2M2LjQtMjguMSA5LjctNTYuOCA5LjctODUuOGwwLTI0LjljMC0yNy4yIDguNS01Mi40IDIyLjktNzMuMWM3LjItMTAuNCA4LTI0LjYtLjItMzQuMnpNMjU2IDE2MGMtNTMgMC05NiA0My05NiA5NmwwIDI0LjljMCAzNS45LTQuNiA3MS41LTEzLjggMTA2LjFjLTMuOCAxNC4zIDYuNyAyOSAyMS41IDI5YzkuNSAwIDE3LjktNi4yIDIwLjQtMTUuNGMxMC41LTM5IDE1LjktNzkuMiAxNS45LTExOS43bDAtMjQuOWMwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUybDAgMjQuOWMwIDM2LjMtMy41IDcyLjQtMTAuNCAxMDcuOWMtMi43IDEzLjkgNy43IDI3LjIgMjEuOCAyNy4yYzEwLjIgMCAxOS03IDIxLTE3YzcuNy0zOC44IDExLjYtNzguMyAxMS42LTExOC4xbDAtMjQuOWMwLTUzLTQzLTk2LTk2LTk2em0yNCA5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI0LjljMCA1OS45LTExIDExOS4zLTMyLjUgMTc1LjJsLTUuOSAxNS4zYy00LjggMTIuNCAxLjQgMjYuMyAxMy44IDMxczI2LjMtMS40IDMxLTEzLjhsNS45LTE1LjNDMjY3LjkgNDExLjkgMjgwIDM0Ni43IDI4MCAyODAuOWwwLTI0Ljl6XCJdXG59O1xuY29uc3QgZmFIYW5kUG9pbnRSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLXBvaW50LXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMGE0XCIsIFwiTTQ4MCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjA4IDAgMC02NCAyMDggMHpNMzIwIDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwem02NC02NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0yODggMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bS04OC05NmwuNiAwYy01LjQgOS40LTguNiAyMC4zLTguNiAzMmMwIDEzLjIgNCAyNS40IDEwLjggMzUuNkMxNzcuOSAzNjQuMyAxNjAgMzg4LjEgMTYwIDQxNmMwIDExLjcgMy4xIDIyLjYgOC42IDMybC04LjYgMEM3MS42IDQ0OCAwIDM3Ni40IDAgMjg4bDAtNjEuN2MwLTQyLjQgMTYuOS04My4xIDQ2LjktMTEzLjFsMTEuNi0xMS42QzgyLjUgNzcuNSAxMTUuMSA2NCAxNDkgNjRsMjcgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDg4YzAgMjIuMS0xNy45IDQwLTQwIDQwcy00MC0xNy45LTQwLTQwbDAtNTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA1NmMwIDM5LjggMzIuMiA3MiA3MiA3MnpcIl1cbn07XG5jb25zdCBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtbG9jYXRpb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNlYXJjaC1sb2NhdGlvblwiXSwgXCJmNjg5XCIsIFwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZjLTM0LjQgMjUuMi03Ni44IDQwLTEyMi43IDQwQzkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwUzQxNiA5My4xIDQxNiAyMDh6TTI4OCAxNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCA0OC44IDQ2LjUgMTExLjYgNjguNiAxMzguNmM2IDcuMyAxNi44IDcuMyAyMi43IDBjMjIuMS0yNyA2OC42LTg5LjggNjguNi0xMzguNnptLTExMiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xuY29uc3QgZmFTZWFyY2hMb2NhdGlvbiA9IGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb247XG5jb25zdCBmYUZvcndhcmRTdGVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZvcndhcmQtc3RlcCcsXG4gIGljb246IFszMjAsIDUxMiwgW1wic3RlcC1mb3J3YXJkXCJdLCBcImYwNTFcIiwgXCJNNTIuNSA0NDAuNmMtOS41IDcuOS0yMi44IDkuNy0zNC4xIDQuNFMwIDQyOC40IDAgNDE2TDAgOTZDMCA4My42IDcuMiA3Mi4zIDE4LjQgNjdzMjQuNS0zLjYgMzQuMSA0LjRsMTkyIDE2MEwyNTYgMjQxbDAtMTQ1YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDUtMTEuNSA5LjYtMTkyIDE2MHpcIl1cbn07XG5jb25zdCBmYVN0ZXBGb3J3YXJkID0gZmFGb3J3YXJkU3RlcDtcbmNvbnN0IGZhRmFjZVNtaWxlQmVhbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLXNtaWxlLWJlYW0nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjIsIFwic21pbGUtYmVhbVwiXSwgXCJmNWI4XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjQuMSAzMjUuNUMxODIgMzQ2LjIgMjEyLjYgMzY4IDI1NiAzNjhzNzQtMjEuOCA5MS45LTQyLjVjNS44LTYuNyAxNS45LTcuNCAyMi42LTEuNnM3LjQgMTUuOSAxLjYgMjIuNkMzNDkuOCAzNzIuMSAzMTEuMSA0MDAgMjU2IDQwMHMtOTMuOC0yNy45LTExNi4xLTUzLjVjLTUuOC02LjctNS4xLTE2LjggMS42LTIyLjZzMTYuOC01LjEgMjIuNiAxLjZ6bTUzLjUtOTYuN3MwIDAgMCAwYzAgMCAwIDAgMCAwbC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMmMwIDAgMCAwIDAgMGMwIDAgMCAwIDAgMHMwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGMwIDAgMCAwIDAgMHMwIDAgMCAwem0xNjAgMGMwIDAgMCAwIDAgMGwtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjJjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhjMCAwIDAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwelwiXVxufTtcbmNvbnN0IGZhU21pbGVCZWFtID0gZmFGYWNlU21pbGVCZWFtO1xuY29uc3QgZmFGbGFnQ2hlY2tlcmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZsYWctY2hlY2tlcmVkJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTM3XSwgXCJmMTFlXCIsIFwiTTMyIDBDNDkuNyAwIDY0IDE0LjMgNjQgMzJsMCAxNiA2OS0xNy4yYzM4LjEtOS41IDc4LjMtNS4xIDExMy41IDEyLjVjNDYuMyAyMy4yIDEwMC44IDIzLjIgMTQ3LjEgMGw5LjYtNC44QzQyMy44IDI4LjEgNDQ4IDQzLjEgNDQ4IDY2LjFsMCAyNzkuN2MwIDEzLjMtOC4zIDI1LjMtMjAuOCAzMGwtMzQuNyAxM2MtNDYuMiAxNy4zLTk3LjYgMTQuNi0xNDEuNy03LjRjLTM3LjktMTktODEuMy0yMy43LTEyMi41LTEzLjRMNjQgMzg0bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MCAwLTY2TDAgNjQgMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDB6TTY0IDE4Ny4xbDY0LTEzLjkgMCA2NS41TDY0IDI1Mi42IDY0IDMxOGw0OC44LTEyLjJjNS4xLTEuMyAxMC4xLTIuNCAxNS4yLTMuM2wwLTYzLjkgMzguOS04LjRjOC4zLTEuOCAxNi43LTIuNSAyNS4xLTIuMWwwLTY0YzEzLjYgLjQgMjcuMiAyLjYgNDAuNCA2LjRsMjMuNiA2LjkgMCA2Ni43LTQxLjctMTIuM2MtNy4zLTIuMS0xNC44LTMuNC0yMi4zLTMuOGwwIDcxLjRjMjEuOCAxLjkgNDMuMyA2LjcgNjQgMTQuNGwwLTY5LjggMjIuNyA2LjdjMTMuNSA0IDI3LjMgNi40IDQxLjMgNy40bDAtNjQuMmMtNy44LS44LTE1LjYtMi4zLTIzLjItNC41bC00MC44LTEyIDAtNjJjLTEzLTMuOC0yNS44LTguOC0zOC4yLTE1Yy04LjItNC4xLTE2LjktNy0yNS44LTguOGwwIDcyLjRjLTEzLS40LTI2IC44LTM4LjcgMy42TDEyOCAxNzMuMiAxMjggOTggNjQgMTE0bDAgNzMuMXpNMzIwIDMzNS43YzE2LjggMS41IDMzLjktLjcgNTAtNi44bDE0LTUuMiAwLTcxLjctNy45IDEuOGMtMTguNCA0LjMtMzcuMyA1LjctNTYuMSA0LjVsMCA3Ny40em02NC0xNDkuNGwwLTcwLjhjLTIwLjkgNi4xLTQyLjQgOS4xLTY0IDkuMWwwIDY5LjRjMTMuOSAxLjQgMjggLjUgNDEuNy0yLjZsMjIuMy01LjJ6XCJdXG59O1xuY29uc3QgZmFGb290YmFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb290YmFsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzk0NCwgXCJmb290YmFsbC1iYWxsXCJdLCBcImY0NGVcIiwgXCJNMjQ3LjUgMjUuNGMtMTMuNSAzLjMtMjYuNCA3LjItMzguNiAxMS43QzE0Mi45IDYxLjYgOTYuNyAxMDMuNiA2NiAxNTMuNkM0Ny44IDE4My40IDM1LjEgMjE1LjkgMjYuOSAyNDlMMjY0LjUgNDg2LjZjMTMuNS0zLjMgMjYuNC03LjIgMzguNi0xMS43YzY2LTI0LjUgMTEyLjItNjYuNSAxNDIuOS0xMTYuNWMxOC4zLTI5LjggMzAuOS02Mi4zIDM5LjEtOTUuM0wyNDcuNSAyNS40ek00OTUuMiAyMDUuM2M2LjEtNTYuOCAxLjQtMTEyLjItNy43LTE1Ni40Yy0yLjctMTIuOS0xMy0yMi45LTI2LjEtMjUuMWMtNTguMi05LjctMTA5LjktMTItMTU1LjYtNy45TDQ5NS4yIDIwNS4zek0yMDYuMSA0OTZMMTYuOCAzMDYuN2MtNi4xIDU2LjgtMS40IDExMi4yIDcuNyAxNTYuNGMyLjcgMTIuOSAxMyAyMi45IDI2LjEgMjUuMWM1OC4yIDkuNyAxMDkuOSAxMiAxNTUuNiA3Ljl6bTU0LjYtMzMxLjNjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsNjQgNjRjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtNjQtNjRjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42em0tNDggNDhjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsNjQgNjRjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtNjQtNjRjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42em0tNDggNDhjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsNjQgNjRjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtNjQtNjRjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42elwiXVxufTtcbmNvbnN0IGZhRm9vdGJhbGxCYWxsID0gZmFGb290YmFsbDtcbmNvbnN0IGZhU2Nob29sQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sLWNpcmNsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2Y1wiLCBcIk0zMzcuOCA1LjRDMzI3LTEuOCAzMTMtMS44IDMwMi4yIDUuNEwxNjYuMyA5NiA0OCA5NkMyMS41IDk2IDAgMTE3LjUgMCAxNDRMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMjcyIDBzMCAwIDAgMGwtNjQgMCAwLTk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bC4zIDAgLjUgMGMzLjQtMzcuNyAxOC43LTcyLjEgNDIuMi05OS4xQzM1MC4yIDI2MCAzMzUuNiAyNjQgMzIwIDI2NGMtNDguNiAwLTg4LTM5LjQtODgtODhzMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgMTguMy01LjYgMzUuMy0xNS4xIDQ5LjRjMjktMjEgNjQuNi0zMy40IDEwMy4xLTMzLjRjNTkuNSAwIDExMi4xIDI5LjYgMTQ0IDc0LjhMNjQwIDE0NGMwLTI2LjUtMjEuNS00OC00OC00OEw0NzMuNyA5NiAzMzcuOCA1LjR6TTk2IDE5MmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDY0YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2em0wIDEyOGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDY0YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2ek0zMjAgMTI4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMCAwLTE2YzAtOC44LTcuMi0xNi0xNi0xNnpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wLTE0NGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYUNyb3AgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3JvcCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjEyNVwiLCBcIk00NDggMTA5LjNsNTQuNi01NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQwMi43IDY0IDE2MCA2NGwwIDY0IDE3OC43IDBMMTI4IDMzOC43IDEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMybDAgMzJMMzIgNjRDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMybDMyIDAgMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDAgMC02NC0xNzguNyAwTDM4NCAxNzMuMyAzODQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjc0Ljd6XCJdXG59O1xuY29uc3QgZmFBbmdsZXNEb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FuZ2xlcy1kb3duJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJhbmdsZS1kb3VibGUtZG93blwiXSwgXCJmMTAzXCIsIFwiTTI0Ni42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwyMjQgNDAyLjcgMzYxLjQgMjY1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MHptMTYwLTM1MmwtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMjI0IDIxMC43IDM2MS40IDczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pcIl1cbn07XG5jb25zdCBmYUFuZ2xlRG91YmxlRG93biA9IGZhQW5nbGVzRG93bjtcbmNvbnN0IGZhVXNlcnNSZWN0YW5nbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMtcmVjdGFuZ2xlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTk0XCIsIFwiTTk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5Nmw0NDggMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzIwYzAtNTMtNDMtOTYtOTYtOTZMOTYgMHpNNjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMkw2NCA5NnptMTU5LjggODBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNOTYgMzA5LjNjMCAxNC43IDExLjkgMjYuNyAyNi43IDI2LjdsNTYuMSAwYzgtMzQuMSAzMi44LTYxLjcgNjUuMi03My42Yy03LjUtNC4xLTE2LjItNi40LTI1LjMtNi40bC02OS4zIDBDMTE5LjkgMjU2IDk2IDI3OS45IDk2IDMwOS4zek00NjEuMiAzMzZsNTYuMSAwYzE0LjcgMCAyNi43LTExLjkgMjYuNy0yNi43YzAtMjkuNS0yMy45LTUzLjMtNTMuMy01My4zbC02OS4zIDBjLTkuMiAwLTE3LjggMi4zLTI1LjMgNi40YzMyLjQgMTEuOSA1Ny4yIDM5LjUgNjUuMiA3My42ek0zNzIgMjg5Yy0zLjktLjctNy45LTEtMTItMWwtODAgMGMtNC4xIDAtOC4xIC4zLTEyIDFjLTI2IDQuNC00Ny4zIDIyLjctNTUuOSA0N2MtMi43IDcuNS00LjEgMTUuNi00LjEgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRjMC04LjQtMS40LTE2LjUtNC4xLTI0Yy04LjYtMjQuMy0yOS45LTQyLjYtNTUuOS00N3pNNTEyIDE3NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0zMjAgMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4elwiXVxufTtcbmNvbnN0IGZhUGVvcGxlUm9vZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW9wbGUtcm9vZicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUzN1wiLCBcIk0zMzUuNSA0bDI4OCAxNjBjMTUuNCA4LjYgMjEgMjguMSAxMi40IDQzLjVzLTI4LjEgMjEtNDMuNSAxMi40TDMyMCA2OC42IDQ3LjUgMjIwYy0xNS40IDguNi0zNC45IDMtNDMuNS0xMi40cy0zLTM0LjkgMTIuNC00My41TDMwNC41IDRjOS43LTUuNCAyMS40LTUuNCAzMS4xIDB6TTMyMCAxNjBhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwek0xNDQgMjU2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMzEyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTIyNi45IDQ5MS40TDIwMCA0NDEuNWwwIDM4LjVjMCAxNy43LTE0LjMgMzItMzIgMzJsLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzguNUw2MS4xIDQ5MS40Yy02LjMgMTEuNy0yMC44IDE2LTMyLjUgOS44cy0xNi0yMC44LTkuOC0zMi41bDM3LjktNzAuM2MxNS4zLTI4LjUgNDUuMS00Ni4zIDc3LjUtNDYuM2wxOS41IDBjMTYuMyAwIDMxLjkgNC41IDQ1LjQgMTIuNmwzMy42LTYyLjNjMTUuMy0yOC41IDQ1LjEtNDYuMyA3Ny41LTQ2LjNsMTkuNSAwYzMyLjQgMCA2Mi4xIDE3LjggNzcuNSA0Ni4zbDMzLjYgNjIuM2MxMy41LTguMSAyOS4xLTEyLjYgNDUuNC0xMi42bDE5LjUgMGMzMi40IDAgNjIuMSAxNy44IDc3LjUgNDYuM2wzNy45IDcwLjNjNi4zIDExLjcgMS45IDI2LjItOS44IDMyLjVzLTI2LjIgMS45LTMyLjUtOS44TDU1MiA0NDEuNWwwIDM4LjVjMCAxNy43LTE0LjMgMzItMzIgMzJsLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzguNS0yNi45IDQ5LjljLTYuMyAxMS43LTIwLjggMTYtMzIuNSA5LjhzLTE2LTIwLjgtOS44LTMyLjVsMzYuMy02Ny41Yy0xLjctMS43LTMuMi0zLjYtNC4zLTUuOEwzNzYgMzQ1LjVsMCA1NC41YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTU0LjUtMjYuOSA0OS45Yy0xLjIgMi4yLTIuNiA0LjEtNC4zIDUuOGwzNi4zIDY3LjVjNi4zIDExLjcgMS45IDI2LjItOS44IDMyLjVzLTI2LjIgMS45LTMyLjUtOS44elwiXVxufTtcbmNvbnN0IGZhUGVvcGxlTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW9wbGUtbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUzNFwiLCBcIk0zNjAgNzJhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHpNMTQ0IDIwOGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6TTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6TTQ5NiAyMDhhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek0yMDAgMzEzLjVsMjYuOSA0OS45YzYuMyAxMS43IDIwLjggMTYgMzIuNSA5LjhzMTYtMjAuOCA5LjgtMzIuNWwtMzYuMy02Ny41YzEuNy0xLjcgMy4yLTMuNiA0LjMtNS44TDI2NCAyMTcuNWwwIDU0LjVjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTU0LjUgMjYuOSA0OS45YzEuMiAyLjIgMi42IDQuMSA0LjMgNS44bC0zNi4zIDY3LjVjLTYuMyAxMS43LTEuOSAyNi4yIDkuOCAzMi41czI2LjIgMS45IDMyLjUtOS44TDQ0MCAzMTMuNWwwIDM4LjVjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTM4LjUgMjYuOSA0OS45YzYuMyAxMS43IDIwLjggMTYgMzIuNSA5LjhzMTYtMjAuOCA5LjgtMzIuNWwtMzcuOS03MC4zYy0xNS4zLTI4LjUtNDUuMS00Ni4zLTc3LjUtNDYuM2wtMTkuNSAwYy0xNi4zIDAtMzEuOSA0LjUtNDUuNCAxMi42bC0zMy42LTYyLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zbC0xOS41IDBjLTMyLjQgMC02Mi4xIDE3LjgtNzcuNSA0Ni4zbC0zMy42IDYyLjNjLTEzLjUtOC4xLTI5LjEtMTIuNi00NS40LTEyLjZsLTE5LjUgMGMtMzIuNCAwLTYyLjEgMTcuOC03Ny41IDQ2LjNMMTguOSAzNDAuNmMtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMODggMzEzLjUgODggMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zOC41elwiXVxufTtcbmNvbnN0IGZhQmVlck11Z0VtcHR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JlZXItbXVnLWVtcHR5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJiZWVyXCJdLCBcImYwZmNcIiwgXCJNMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiA1MS4yIDBjNDIuNCAwIDc2LjggMzQuNCA3Ni44IDc2LjhsMCAxMDIuMWMwIDMwLjQtMTcuOSA1Ny45LTQ1LjYgNzAuMkwzODQgMzgxLjdsMCAzNC4zYzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgNjR6TTM4NCAzMTEuNmw1Ni40LTI1LjFjNC42LTIuMSA3LjYtNi42IDcuNi0xMS43bDAtMTAyLjFjMC03LjEtNS43LTEyLjgtMTIuOC0xMi44TDM4NCAxNjBsMCAxNTEuNnpNMTYwIDE0NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDIyNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjI0em02NCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMjI0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yMjR6bTY0IDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAyMjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTIyNHpcIl1cbn07XG5jb25zdCBmYUJlZXIgPSBmYUJlZXJNdWdFbXB0eTtcbmNvbnN0IGZhRGlhZ3JhbVByZWRlY2Vzc29yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYWdyYW0tcHJlZGVjZXNzb3InLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0NzdcIiwgXCJNNDQ4IDQxNmwwLTY0TDY0IDM1MmwwIDY0IDM4NCAwem0wIDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek0yODggMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDIyNGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxNDQgMCAxNiAwIDE0NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTYgMzguMSAwYzIxLjQgMCAzMi4xIDI1LjkgMTcgNDFMNDMzIDIzOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMzI5IDE2OWMtMTUuMS0xNS4xLTQuNC00MSAxNy00MWwzOC4xIDAgMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTgwIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUFycm93VXBMb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLWxvbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImxvbmctYXJyb3ctdXBcIl0sIFwiZjE3NlwiLCBcIk0yMTQuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMDkuMyAxNjAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNzAuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOHpcIl1cbn07XG5jb25zdCBmYUxvbmdBcnJvd1VwID0gZmFBcnJvd1VwTG9uZztcbmNvbnN0IGZhRmlyZUZsYW1lU2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpcmUtZmxhbWUtc2ltcGxlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJidXJuXCJdLCBcImY0NmFcIiwgXCJNMzcyLjUgMjU2LjVsLS43LTEuOUMzMzcuOCAxNjAuOCAyODIgNzYuNSAyMDkuMSA4LjVsLTMuMy0zQzIwMi4xIDIgMTk3LjEgMCAxOTIgMHMtMTAuMSAyLTEzLjggNS41bC0zLjMgM0MxMDIgNzYuNSA0Ni4yIDE2MC44IDEyLjIgMjU0LjZsLS43IDEuOUMzLjkgMjc3LjMgMCAyOTkuNCAwIDMyMS42QzAgNDI2LjcgODYuOCA1MTIgMTkyIDUxMnMxOTItODUuMyAxOTItMTkwLjRjMC0yMi4yLTMuOS00NC4yLTExLjUtNjUuMXptLTkwLjggNDkuNWM0LjEgOS4zIDYuMiAxOS40IDYuMiAyOS41YzAgNTMtNDMgOTYuNS05NiA5Ni41cy05Ni00My41LTk2LTk2LjVjMC0xMC4xIDIuMS0yMC4zIDYuMi0yOS41bDEuOS00LjNjMTUuOC0zNS40IDM3LjktNjcuNyA2NS4zLTk1LjFsOC45LTguOWMzLjYtMy42IDguNS01LjYgMTMuNi01LjZzMTAgMiAxMy42IDUuNmw4LjkgOC45YzI3LjQgMjcuNCA0OS42IDU5LjcgNjUuMyA5NS4xbDEuOSA0LjN6XCJdXG59O1xuY29uc3QgZmFCdXJuID0gZmFGaXJlRmxhbWVTaW1wbGU7XG5jb25zdCBmYVBlcnNvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjk0ODUsIFwibWFsZVwiXSwgXCJmMTgzXCIsIFwiTTExMiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjMuMUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmwyOS43IDBjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNTguMyA5N2M5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOUwyMzIgMjU2LjkgMjMyIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0xNiAwelwiXVxufTtcbmNvbnN0IGZhTWFsZSA9IGZhUGVyc29uO1xuY29uc3QgZmFMYXB0b3AgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFwdG9wJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MTg3XSwgXCJmMTA5XCIsIFwiTTEyOCAzMkM5Mi43IDMyIDY0IDYwLjcgNjQgOTZsMCAyNTYgNjQgMCAwLTI1NiAzODQgMCAwIDI1NiA2NCAwIDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOCAzMnpNMTkuMiAzODRDOC42IDM4NCAwIDM5Mi42IDAgNDAzLjJDMCA0NDUuNiAzNC40IDQ4MCA3Ni44IDQ4MGw0ODYuNCAwYzQyLjQgMCA3Ni44LTM0LjQgNzYuOC03Ni44YzAtMTAuNi04LjYtMTkuMi0xOS4yLTE5LjJMMTkuMiAzODR6XCJdXG59O1xuY29uc3QgZmFGaWxlQ3N2ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY3N2JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNmRkXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMTQ0LTIwOCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDE0NC00OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0zODQgNjRsLTEyOCAwTDI1NiAwIDM4NCAxMjh6TTIwMCAzNTJsMTYgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04YzAtNC40LTMuNi04LTgtOGwtMTYgMGMtNC40IDAtOCAzLjYtOCA4bDAgODBjMCA0LjQgMy42IDggOCA4bDE2IDBjNC40IDAgOC0zLjYgOC04bDAtOGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgOGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMTYgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC04MGMwLTIyLjEgMTcuOS00MCA0MC00MHptMTMzLjEgMGwzNC45IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTM0LjkgMGMtNy4yIDAtMTMuMSA1LjktMTMuMSAxMy4xYzAgNS4yIDMgOS45IDcuOCAxMmwzNy40IDE2LjZjMTYuMyA3LjIgMjYuOCAyMy40IDI2LjggNDEuMmMwIDI0LjktMjAuMiA0NS4xLTQ1LjEgNDUuMUwzMDQgNTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDQyLjkgMGM3LjIgMCAxMy4xLTUuOSAxMy4xLTEzLjFjMC01LjItMy05LjktNy44LTEybC0zNy40LTE2LjZjLTE2LjMtNy4yLTI2LjgtMjMuNC0yNi44LTQxLjJjMC0yNC45IDIwLjItNDUuMSA0NS4xLTQ1LjF6bTk4LjkgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMS42YzAgMjMgNS41IDQ1LjYgMTYgNjZjMTAuNS0yMC4zIDE2LTQyLjkgMTYtNjZsMC0zMS42YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAzMS42YzAgMzQuNy0xMC4zIDY4LjctMjkuNiA5Ny42bC01LjEgNy43Yy0zIDQuNS04IDcuMS0xMy4zIDcuMXMtMTAuMy0yLjctMTMuMy03LjFsLTUuMS03LjdjLTE5LjMtMjguOS0yOS42LTYyLjktMjkuNi05Ny42bDAtMzEuNmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFNZW5vcmFoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21lbm9yYWgnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2NzZcIiwgXCJNMjAuOCA3LjRDMjIuOCAyLjkgMjcuMSAwIDMyIDBzOS4yIDIuOSAxMS4yIDcuNEw2MS4zIDQ5LjdjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xTDY0IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgODEuNyAwIDY0bDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwyMC44IDcuNHptOTYgMEMxMTguOCAyLjkgMTIzLjEgMCAxMjggMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDExNi44IDcuNHptNzcuOCA0Mi40TDIxMi44IDcuNEMyMTQuOCAyLjkgMjE5LjEgMCAyMjQgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMDguOCA3LjRDMzEwLjggMi45IDMxNS4xIDAgMzIwIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwzMDguOCA3LjR6bTc3LjggNDIuNEw0MDQuOCA3LjRDNDA2LjggMi45IDQxMS4xIDAgNDE2IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMXpNNTAwLjggNy40QzUwMi44IDIuOSA1MDcuMSAwIDUxMiAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMNTAwLjggNy40em03Ny44IDQyLjRMNTk2LjggNy40QzU5OC44IDIuOSA2MDMuMSAwIDYwOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTMyIDEyOGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMCAwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTYwIDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxMjhjMCA1My00MyA5Ni05NiA5NmwtMTkyIDAgMCA2NCAxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYwIDAtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTI4IDAgMC02NEw5NiAzODRjLTUzIDAtOTYtNDMtOTYtOTZMMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAwIDMyLTY0IDAgMC0zMiAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMCAzMi02NCAwIDAtMzIgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAwIDMyLTY0IDAgMC0zMiAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMCAzMi02NCAwIDAtMzIgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYVRydWNrUGxhbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stcGxhbmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OGZcIiwgXCJNMjAwIDBjLTMwLjYgMC01NiA1NC43LTU2IDg2LjFsMCAxMDYuNUw3LjggMjc0LjNDMi45IDI3Ny4yIDAgMjgyLjQgMCAyODhsMCA2NGMwIDUuMSAyLjQgOS44IDYuNCAxMi44czkuMyAzLjkgMTQuMSAyLjVsMTIzLjQtMzcgMCA4MS4yLTUwIDQwYy0zLjggMy02IDcuNi02IDEyLjVsMCAzMmMwIDUuMSAyLjUgMTAgNi42IDEzczkuNSAzLjggMTQuNCAyLjJMMjAwIDQ4MC45IDI5MC40IDUxMWMtMS42LTQuNy0yLjQtOS44LTIuNC0xNWwwLTMyLjZjLTE4LjItMTAuNS0zMC43LTI5LjctMzEuOS01MS44bC0uMS0uMSAwLTMuNSAwLTgyLjVMMjU2IDE4NGwwLTEuMXMwIDAgMCAwbDAtOTYuOUMyNTYgNTQuNyAyMzEuNSAwIDIwMCAwem04OCAxNzZsMCAyMjRjMCAyMC45IDEzLjQgMzguNyAzMiA0NS4zbDAgNDIuN2MwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgMTYwIDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDIuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTI1NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OHptNzkuOCA3OC43YzMuMy04LjcgMTEuMi0xNC43IDIwLjUtMTQuN2wxNTEuNCAwYzkuMiAwIDE3LjIgNiAyMC41IDE0LjdMNTc2IDMwNGwtMjI0IDAgMTUuOC00OS4zek01NjggMzUyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMzM2IDM3NmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwelwiXVxufTtcbmNvbnN0IGZhUmVjb3JkVmlueWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVjb3JkLXZpbnlsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmOGQ5XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnptMjU2LTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem0wIDIyNGExMjggMTI4IDAgMSAwIDAtMjU2IDEyOCAxMjggMCAxIDAgMCAyNTZ6bTAtOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbmNvbnN0IGZhRmFjZUdyaW5TdGFycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tc3RhcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMjEsIFwiZ3Jpbi1zdGFyc1wiXSwgXCJmNTg3XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnptNDA3LjQgNzUuNWM1LTExLjgtNy0yMi41LTE5LjMtMTguN2MtMzkuNyAxMi4yLTg0LjUgMTktMTMxLjggMTlzLTkyLjEtNi44LTEzMS44LTE5Yy0xMi4zLTMuOC0yNC4zIDYuOS0xOS4zIDE4LjdjMjUgNTkuMSA4My4yIDEwMC41IDE1MS4xIDEwMC41czEyNi4yLTQxLjQgMTUxLjEtMTAwLjV6TTE2MCAxMjBjLTMuMSAwLTUuOSAxLjgtNy4yIDQuNmwtMTYuNiAzNC43LTM4LjEgNWMtMy4xIC40LTUuNiAyLjUtNi42IDUuNXMtLjEgNi4yIDIuMSA4LjNsMjcuOSAyNi41LTcgMzcuOGMtLjYgMyAuNyA2LjEgMy4yIDcuOXM1LjggMiA4LjUgLjZMMTYwIDIzMi41bDMzLjggMTguM2MyLjcgMS41IDYgMS4zIDguNS0uNnMzLjctNC45IDMuMi03LjlsLTctMzcuOEwyMjYuNCAxNzhjMi4yLTIuMSAzLjEtNS4zIDIuMS04LjNzLTMuNS01LjEtNi42LTUuNWwtMzguMS01LTE2LjYtMzQuN2MtMS4zLTIuOC00LjEtNC42LTcuMi00LjZ6bTE5MiAwYy0zLjEgMC01LjkgMS44LTcuMiA0LjZsLTE2LjYgMzQuNy0zOC4xIDVjLTMuMSAuNC01LjYgMi41LTYuNiA1LjVzLS4xIDYuMiAyLjEgOC4zbDI3LjkgMjYuNS03IDM3LjhjLS42IDMgLjcgNi4xIDMuMiA3LjlzNS44IDIgOC41IC42TDM1MiAyMzIuNWwzMy44IDE4LjNjMi43IDEuNSA2IDEuMyA4LjUtLjZzMy43LTQuOSAzLjItNy45bC03LTM3LjhMNDE4LjQgMTc4YzIuMi0yLjEgMy4xLTUuMyAyLjEtOC4zcy0zLjUtNS4xLTYuNi01LjVsLTM4LjEtNS0xNi42LTM0LjdjLTEuMy0yLjgtNC4xLTQuNi03LjItNC42elwiXVxufTtcbmNvbnN0IGZhR3JpblN0YXJzID0gZmFGYWNlR3JpblN0YXJzO1xuY29uc3QgZmFCb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1NWNcIiwgXCJNMTYwIDIwOC41YzAgMjkuMS0xNS42IDUzLjktMzcuMiA2Ny44Yy0xNy4yIDExLjEtMzEuNSAyNi4xLTQxLjcgNDMuN2wyMjEuOCAwYy0xMC4yLTE3LjYtMjQuNS0zMi42LTQxLjctNDMuN2MtMjEuNi0xMy45LTM3LjItMzguNy0zNy4yLTY3LjhMMjI0IDY0bC02NCAwIDAgMTQ0LjV6TTI4OCA2NGwwIDE0NC41YzAgNS43IDMuMSAxMC45IDcuOSAxNGMxMS4yIDcuMiAyMS41IDE1LjUgMzAuOSAyNC44TDM2Ni4xIDIwOGwtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjQgMjQgMjQgMjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNy03LTQzLjMgNDMuM0MzNzQgMzE0LjEgMzg0IDM0Ny45IDM4NCAzODRjMCAzOS40LTExLjkgNzYuMS0zMi4yIDEwNi41Yy05LjYgMTQuNC0yNi41IDIxLjUtNDMuOCAyMS41TDc2LjEgNTEyYy0xNy4zIDAtMzQuMi03LjEtNDMuOC0yMS41QzExLjkgNDYwLjEgMCA0MjMuNCAwIDM4NGMwLTY3LjggMzUuMS0xMjcuMyA4OC4xLTE2MS41YzQuOC0zLjEgNy45LTguMyA3LjktMTRMOTYgNjRDNzguMyA2NCA2NCA0OS43IDY0IDMyUzc4LjMgMCA5NiAwbDE2IDBMMjcyIDBsMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl1cbn07XG5jb25zdCBmYVNwYWdoZXR0aU1vbnN0ZXJGbHlpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3BhZ2hldHRpLW1vbnN0ZXItZmx5aW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwYXN0YWZhcmlhbmlzbVwiXSwgXCJmNjdiXCIsIFwiTTIwOCA2NGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem00OCAwYzAgMTYuMi02IDMxLjEtMTYgNDIuM2wxNS42IDMxLjJjMTguNy02IDM5LjktOS41IDY0LjQtOS41czQ1LjggMy41IDY0LjQgOS41TDQwMCAxMDYuM0MzOTAgOTUuMSAzODQgODAuMiAzODQgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGMtMS43IDAtMy40LS4xLTUuMS0uMkw0MjcuOCAxNThjMjEuMSAxMy42IDM3LjcgMzAuMiA1MS40IDQ2LjRjNy4xIDguMyAxMy41IDE2LjYgMTkuMyAyNGwxLjQgMS44YzYuMyA4LjEgMTEuNiAxNC44IDE2LjcgMjAuNEM1MjcuMyAyNjIuMyA1MzIuNyAyNjQgNTM2IDI2NGMyLjUgMCA0LjMtLjYgNy4xLTMuM2MzLjctMy41IDcuMS04LjggMTIuNS0xNy40bC42LS45YzQuNi03LjQgMTEtMTcuNiAxOS40LTI1LjdjOS43LTkuMyAyMi45LTE2LjcgNDAuNC0xNi43YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yLjUgMC00LjMgLjYtNy4xIDMuM2MtMy43IDMuNS03LjEgOC44LTEyLjUgMTcuNGwtLjYgLjljLTQuNiA3LjQtMTEgMTcuNi0xOS40IDI1LjdjLTkuNyA5LjMtMjIuOSAxNi43LTQwLjQgMTYuN2MtMTguNSAwLTMyLjktOC41LTQ0LjMtMTguNmMtMy4xIDQtNi42IDguMy0xMC41IDEyLjdjMS40IDQuMyAyLjggOC41IDQgMTIuNWMuOSAzIDEuOCA1LjggMi42IDguNmMzIDkuOCA1LjUgMTguMiA4LjYgMjUuOWMzLjkgOS44IDcuNCAxNS40IDEwLjggMTguNWMyLjYgMi40IDUuOSA0LjMgMTIuOCA0LjNjOC43IDAgMTYuOS00LjIgMzMuNy0xMy4yYzE1LTggMzUuNy0xOC44IDYyLjMtMTguOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTMuNCAwLTI0LjcgNS4yLTM5LjcgMTMuMmMtMSAuNi0yLjEgMS4xLTMuMiAxLjdDNTU5LjkgNDE0IDU0MS40IDQyNCA1MjAgNDI0Yy0xOC40IDAtMzMuNi02LjEtNDUuNS0xNy4yYy0xMS4xLTEwLjMtMTcuOS0yMy43LTIyLjctMzZjLTMuNi05LTYuNy0xOS4xLTkuNS0yOC41Yy0xNi40IDEyLjMtMzYuMSAyMy42LTU4LjkgMzEuM2MzLjYgMTAuOCA4LjQgMjMuNSAxNC40IDM2LjJjNy41IDE1LjkgMTYuMiAzMC40IDI1LjggNDAuNUM0MzMgNDYwLjUgNDQxLjIgNDY0IDQ0OCA0NjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTI1LjIgMC00NS0xMy41LTU5LjUtMjguOGMtMTQuNS0xNS40LTI1LjctMzQuOS0zNC4yLTUzYy04LTE3LTE0LjEtMzMuOC0xOC4zLTQ2LjljLTUuMiAuNC0xMC42IC42LTE2IC42cy0xMC44LS4yLTE2LS42Yy00LjIgMTMtMTAuMyAyOS45LTE4LjMgNDYuOWMtOC41IDE4LjEtMTkuOCAzNy42LTM0LjIgNTNDMjM3IDQ5OC41IDIxNy4yIDUxMiAxOTIgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzYuOCAwIDE1LTMuNSAyNC41LTEzLjdjOS41LTEwLjEgMTguMy0yNC42IDI1LjgtNDAuNWM1LjktMTIuNiAxMC43LTI1LjQgMTQuNC0zNi4yYy0yMi44LTcuNy00Mi41LTE5LTU4LjktMzEuM2MtMi45IDkuNC02IDE5LjUtOS41IDI4LjVjLTQuOCAxMi4yLTExLjYgMjUuNi0yMi43IDM2QzE1My42IDQxNy45IDEzOC40IDQyNCAxMjAgNDI0Yy0yMS40IDAtMzkuOS0xMC01My4xLTE3LjFjMCAwIDAgMCAwIDBjLTEuMS0uNi0yLjItMS4yLTMuMi0xLjdjLTE1LTgtMjYuMy0xMy4yLTM5LjctMTMuMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyNi42IDAgNDcuMyAxMC44IDYyLjMgMTguOGMxNi44IDkgMjUgMTMuMiAzMy43IDEzLjJjNi44IDAgMTAuMi0xLjkgMTIuOC00LjNjMy40LTMuMiA3LTguOCAxMC44LTE4LjVjMy03LjcgNS42LTE2LjEgOC42LTI1LjljLjgtMi43IDEuNy01LjYgMi42LTguNmMxLjItNCAyLjYtOC4yIDQtMTIuNWMtMy45LTQuNS03LjQtOC44LTEwLjUtMTIuN0MxMzYuOSAzMDMuNSAxMjIuNSAzMTIgMTA0IDMxMmMtMTcuNSAwLTMwLjctNy40LTQwLjQtMTYuN2MtOC40LTguMS0xNC44LTE4LjMtMTkuNC0yNS43bC0uNi0uOWMtNS40LTguNi04LjgtMTMuOS0xMi41LTE3LjRjLTIuOC0yLjctNC42LTMuMy03LjEtMy4zYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzE3LjUgMCAzMC43IDcuNCA0MC40IDE2LjdjOC40IDguMSAxNC44IDE4LjMgMTkuNCAyNS43bC42IC45YzUuNCA4LjYgOC44IDEzLjkgMTIuNSAxNy40YzIuOCAyLjcgNC42IDMuMyA3LjEgMy4zYzMuMyAwIDguNy0xLjcgMTkuNC0xMy40YzUuMS01LjYgMTAuNC0xMi4zIDE2LjctMjAuNGwxLjQtMS44YzUuOC03LjQgMTIuMi0xNS43IDE5LjMtMjRjMTMuOC0xNi4yIDMwLjMtMzIuOCA1MS40LTQ2LjRsLTE1LjEtMzAuMmMtMS43IC4xLTMuNCAuMi01LjEgLjJjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHptMjA4IDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpcIl1cbn07XG5jb25zdCBmYVBhc3RhZmFyaWFuaXNtID0gZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nO1xuY29uc3QgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi11cC1hY3Jvc3MtbGluZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRhZlwiLCBcIk0xMzcuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDAyLjcgMTkyIDI4OGwzNTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMCAwLTExNC43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM4NCAxMDkuMyAzODQgMjI0bC0xOTIgMC02NCAwLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMCAwIDExNC43TDg2LjYgMzYxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2ek0xMjggMTkybDY0IDAgMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMjh6TTQ0OCAzMjBsLTY0IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOHpcIl1cbn07XG5jb25zdCBmYVNwb29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Nwb29uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzQ4LCA2MTg3MywgXCJ1dGVuc2lsLXNwb29uXCJdLCBcImYyZTVcIiwgXCJNMjQ1LjggMjIwLjljLTE0LjUtMTcuNi0yMS44LTM5LjItMjEuOC02MC44QzIyNCA4MCAzMjAgMCA0MTYgMGM1MyAwIDk2IDQzIDk2IDk2YzAgOTYtODAgMTkyLTE2MC4yIDE5MmMtMjEuNiAwLTQzLjItNy4zLTYwLjgtMjEuOEw1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDUuOCAyMjAuOXpcIl1cbn07XG5jb25zdCBmYVV0ZW5zaWxTcG9vbiA9IGZhU3Bvb247XG5jb25zdCBmYUphcldoZWF0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2phci13aGVhdCcsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTUxN1wiLCBcIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwTDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnpNMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE2MHptMTEyIDBsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44QzY0IDE5OCA5MCAyMjQgMTIyLjIgMjI0bDIxLjggMCAzMiAwIDIxLjggMGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjJjMC0zLjItMi42LTUuOC01LjgtNS44TDIwOCAxNjBjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43Yy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6bTQ4IDExNy43Yy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjdsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44QzY0IDI5NCA5MCAzMjAgMTIyLjIgMzIwbDIxLjggMCAzMiAwIDIxLjggMGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjJjMC0zLjItMi42LTUuOC01LjgtNS44TDIwOCAyNTZjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43ek0xMTIgMzUybC00Mi4yIDBjLTMuMiAwLTUuOCAyLjYtNS44IDUuOEM2NCAzOTAgOTAgNDE2IDEyMi4yIDQxNmwyMS44IDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMzIgMjEuOCAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMmMwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDM1MmMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjdjLTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN3pcIl1cbn07XG5jb25zdCBmYUVudmVsb3Blc0J1bGsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZW52ZWxvcGVzLWJ1bGsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcIm1haWwtYnVsa1wiXSwgXCJmNjc0XCIsIFwiTTEyOCAwQzExMC4zIDAgOTYgMTQuMyA5NiAzMmwwIDE5MiA5NiAwIDAtMzJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjI0IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxMjggMHpNMjU2IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMiA5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4IDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMjAgMHptMjQwIDY0bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxM0wxODcuMSA0MTUuOWMxLjQgMSAzLjEgMS42IDQuOSAxLjZzMy41LS42IDQuOS0xLjZMMzUyIDMwMWwwLTEzYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDY0IDI1NnptMjg4IDg0LjhMMjE2IDQ0MS42Yy02LjkgNS4xLTE1LjMgNy45LTI0IDcuOXMtMTctMi44LTI0LTcuOUwzMiAzNDAuOCAzMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMzkuMnpcIl1cbn07XG5jb25zdCBmYU1haWxCdWxrID0gZmFFbnZlbG9wZXNCdWxrO1xuY29uc3QgZmFGaWxlQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZWJcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjI0IDBsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDAgMCAzOC42QzMxMC4xIDIxOS41IDI1NiAyODcuNCAyNTYgMzY4YzAgNTkuMSAyOS4xIDExMS4zIDczLjcgMTQzLjNjLTMuMiAuNS02LjQgLjctOS43IC43TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMzg0IDY0bC0xMjggMEwyNTYgMCAzODQgMTI4em00OCA5NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMC0xOTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVIID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1oJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTQwNSwgXCJob3NwaXRhbC1zeW1ib2xcIl0sIFwiZjQ3ZVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzY4IDE1MmwwIDEwNCAwIDEwNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTgwLTEyOCAwIDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yMDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDgwIDEyOCAwIDAtODBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl1cbn07XG5jb25zdCBmYUhvc3BpdGFsU3ltYm9sID0gZmFDaXJjbGVIO1xuY29uc3QgZmFQYWdlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWdlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODIyM10sIFwiZjgxNVwiLCBcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em02NCAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODAgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU2IDB6bTEzNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6XCJdXG59O1xuY29uc3QgZmFBZGRyZXNzQm9vayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhZGRyZXNzLWJvb2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzOCwgXCJjb250YWN0LWJvb2tcIl0sIFwiZjJiOVwiLCBcIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6TTIwOCAyODhsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZsLTE5MiAwYy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODB6bS0zMi05NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTUxMiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNNDk2IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnptMTYgMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0elwiXVxufTtcbmNvbnN0IGZhQ29udGFjdEJvb2sgPSBmYUFkZHJlc3NCb29rO1xuY29uc3QgZmFTdHJpa2V0aHJvdWdoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0cmlrZXRocm91Z2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwY2NcIiwgXCJNMTYxLjMgMTQ0YzMuMi0xNy4yIDE0LTMwLjEgMzMuNy0zOC42YzIxLjEtOSA1MS44LTEyLjMgODguNi02LjVjMTEuOSAxLjkgNDguOCA5LjEgNjAuMSAxMmMxNy4xIDQuNSAzNC42LTUuNiAzOS4yLTIyLjdzLTUuNi0zNC42LTIyLjctMzkuMmMtMTQuMy0zLjgtNTMuNi0xMS40LTY2LjYtMTMuNGMtNDQuNy03LTg4LjMtNC4yLTEyMy43IDEwLjljLTM2LjUgMTUuNi02NC40IDQ0LjgtNzEuOCA4Ny4zYy0uMSAuNi0uMiAxLjEtLjIgMS43Yy0yLjggMjMuOSAuNSA0NS42IDEwLjEgNjQuNmM0LjUgOSAxMC4yIDE2LjkgMTYuNyAyMy45TDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjA5LjkgMC0uNC0uMS0xLjEtLjNjLTM2LTEwLjgtNjUuMi0xOS42LTg1LjItMzMuMWMtOS4zLTYuMy0xNS0xMi42LTE4LjItMTkuMWMtMy4xLTYuMS01LjItMTQuNi0zLjgtMjcuNHpNMzQ4LjkgMzM3LjJjMi43IDYuNSA0LjQgMTUuOCAxLjkgMzAuMWMtMyAxNy42LTEzLjggMzAuOC0zMy45IDM5LjRjLTIxLjEgOS01MS43IDEyLjMtODguNSA2LjVjLTE4LTIuOS00OS4xLTEzLjUtNzQuNC0yMi4xYy01LjYtMS45LTExLTMuNy0xNS45LTUuNGMtMTYuOC01LjYtMzQuOSAzLjUtNDAuNSAyMC4zczMuNSAzNC45IDIwLjMgNDAuNWMzLjYgMS4yIDcuOSAyLjcgMTIuNyA0LjNjMCAwIDAgMCAwIDBzMCAwIDAgMGMyNC45IDguNSA2My42IDIxLjcgODcuNiAyNS42YzAgMCAwIDAgMCAwbC4yIDBjNDQuNyA3IDg4LjMgNC4yIDEyMy43LTEwLjljMzYuNS0xNS42IDY0LjQtNDQuOCA3MS44LTg3LjNjMy42LTIxIDIuNy00MC40LTMuMS01OC4xbC03NS43IDBjNyA1LjYgMTEuNCAxMS4yIDEzLjkgMTcuMnpcIl1cbn07XG5jb25zdCBmYUsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaycsXG4gIGljb246IFszMjAsIDUxMiwgWzEwN10sIFwiNGJcIiwgXCJNMzExIDg2LjNjMTIuMy0xMi43IDEyLTMyLjktLjctNDUuMnMtMzIuOS0xMi00NS4yIC43bC0xNTUuMiAxNjBMNjQgMjQ5IDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgMzI4IDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMDcgNjQuNy02Ni43IDEzMyAxOTJjMTAuMSAxNC41IDMwIDE4LjEgNDQuNSA4LjFzMTguMS0zMCA4LjEtNDQuNUwxNzQuMSAyMjcuNCAzMTEgODYuM3pcIl1cbn07XG5jb25zdCBmYUxhbmRtYXJrRmxhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYW5kbWFyay1mbGFnJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTFjXCIsIFwiTTI3MiAwbDgwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2bC04MCAwIDAgMzIgMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNDggMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE5MiAwIDAtMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwek02NCAyMjRsNjQgMCAwIDE5MiA0MCAwIDAtMTkyIDY0IDAgMCAxOTIgNDggMCAwLTE5MiA2NCAwIDAgMTkyIDQwIDAgMC0xOTIgNjQgMCAwIDE5Ni4zYy42IC4zIDEuMiAuNyAxLjggMS4xbDQ4IDMyYzExLjcgNy44IDE3IDIyLjQgMTIuOSAzNS45UzQ5NC4xIDUxMiA0ODAgNTEyTDMyIDUxMmMtMTQuMSAwLTI2LjUtOS4yLTMwLjYtMjIuN3MxLjEtMjguMSAxMi45LTM1LjlsNDgtMzJjLjYtLjQgMS4yLS43IDEuOC0xLjFMNjQgMjI0elwiXVxufTtcbmNvbnN0IGZhUGVuY2lsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlbmNpbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk5OTksIDYxNTA0LCBcInBlbmNpbC1hbHRcIl0sIFwiZjMwM1wiLCBcIk00MTAuMyAyMzFsMTEuMy0xMS4zLTMzLjktMzMuOS02Mi4xLTYyLjFMMjkxLjcgODkuOGwtMTEuMyAxMS4zLTIyLjYgMjIuNkw1OC42IDMyMi45Yy0xMC40IDEwLjQtMTggMjMuMy0yMi4yIDM3LjRMMSA0ODAuN2MtMi41IDguNC0uMiAxNy41IDYuMSAyMy43czE1LjMgOC41IDIzLjcgNi4xbDEyMC4zLTM1LjRjMTQuMS00LjIgMjctMTEuOCAzNy40LTIyLjJMMzg3LjcgMjUzLjcgNDEwLjMgMjMxek0xNjAgMzk5LjRsLTkuMSAyMi43Yy00IDMuMS04LjUgNS40LTEzLjMgNi45TDU5LjQgNDUybDIzLTc4LjFjMS40LTQuOSAzLjgtOS40IDYuOS0xMy4zbDIyLjctOS4xIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6TTM2Mi43IDE4LjdMMzQ4LjMgMzMuMiAzMjUuNyA1NS44IDMxNC4zIDY3LjFsMzMuOSAzMy45IDYyLjEgNjIuMSAzMy45IDMzLjkgMTEuMy0xMS4zIDIyLjYtMjIuNiAxNC41LTE0LjVjMjUtMjUgMjUtNjUuNSAwLTkwLjVMNDUzLjMgMTguN2MtMjUtMjUtNjUuNS0yNS05MC41IDB6bS00Ny40IDE2OGwtMTQ0IDE0NGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwxNDQtMTQ0YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG5jb25zdCBmYVBlbmNpbEFsdCA9IGZhUGVuY2lsO1xuY29uc3QgZmFCYWNrd2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWNrd2FyZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzkxOTRdLCBcImYwNGFcIiwgXCJNNDU5LjUgNDQwLjZjOS41IDcuOSAyMi44IDkuNyAzNC4xIDQuNHMxOC40LTE2LjYgMTguNC0yOWwwLTMyMGMwLTEyLjQtNy4yLTIzLjctMTguNC0yOXMtMjQuNS0zLjYtMzQuMSA0LjRMMjg4IDIxNC4zbDAgNDEuNyAwIDQxLjdMNDU5LjUgNDQwLjZ6TTI1NiAzNTJsMC05NiAwLTEyOCAwLTMyYzAtMTIuNC03LjItMjMuNy0xOC40LTI5cy0yNC41LTMuNi0zNC4xIDQuNGwtMTkyIDE2MEM0LjIgMjM3LjUgMCAyNDYuNSAwIDI1NnM0LjIgMTguNSAxMS41IDI0LjZsMTkyIDE2MGM5LjUgNy45IDIyLjggOS43IDM0LjEgNC40czE4LjQtMTYuNiAxOC40LTI5bDAtNjR6XCJdXG59O1xuY29uc3QgZmFDYXJldFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcmV0LXJpZ2h0JyxcbiAgaWNvbjogWzI1NiwgNTEyLCBbXSwgXCJmMGRhXCIsIFwiTTI0Ni42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXMtMTkuOCAxNi42LTE5LjggMjkuNmwwIDI1NmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDEyOC0xMjh6XCJdXG59O1xuY29uc3QgZmFDb21tZW50cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21tZW50cycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODQ5MCwgNjE2NzBdLCBcImYwODZcIiwgXCJNMjA4IDM1MmMxMTQuOSAwIDIwOC03OC44IDIwOC0xNzZTMzIyLjkgMCAyMDggMFMwIDc4LjggMCAxNzZjMCAzOC42IDE0LjcgNzQuMyAzOS42IDEwMy40Yy0zLjUgOS40LTguNyAxNy43LTE0LjIgMjQuN2MtNC44IDYuMi05LjcgMTEtMTMuMyAxNC4zYy0xLjggMS42LTMuMyAyLjktNC4zIDMuN2MtLjUgLjQtLjkgLjctMS4xIC44bC0uMiAuMnMwIDAgMCAwczAgMCAwIDBDMSAzMjcuMi0xLjQgMzM0LjQgLjggMzQwLjlTOS4xIDM1MiAxNiAzNTJjMjEuOCAwIDQzLjgtNS42IDYyLjEtMTIuNWM5LjItMy41IDE3LjgtNy40IDI1LjItMTEuNEMxMzQuMSAzNDMuMyAxNjkuOCAzNTIgMjA4IDM1MnpNNDQ4IDE3NmMwIDExMi4zLTk5LjEgMTk2LjktMjE2LjUgMjA3QzI1NS44IDQ1Ny40IDMzNi40IDUxMiA0MzIgNTEyYzM4LjIgMCA3My45LTguNyAxMDQuNy0yMy45YzcuNSA0IDE2IDcuOSAyNS4yIDExLjRjMTguMyA2LjkgNDAuMyAxMi41IDYyLjEgMTIuNWM2LjkgMCAxMy4xLTQuNSAxNS4yLTExLjFjMi4xLTYuNi0uMi0xMy44LTUuOC0xNy45YzAgMCAwIDAgMCAwczAgMCAwIDBsLS4yLS4yYy0uMi0uMi0uNi0uNC0xLjEtLjhjLTEtLjgtMi41LTItNC4zLTMuN2MtMy42LTMuMy04LjUtOC4xLTEzLjMtMTQuM2MtNS41LTctMTAuNy0xNS40LTE0LjItMjQuN2MyNC45LTI5IDM5LjYtNjQuNyAzOS42LTEwMy40YzAtOTIuOC04NC45LTE2OC45LTE5Mi42LTE3NS41Yy40IDUuMSAuNiAxMC4zIC42IDE1LjV6XCJdXG59O1xuY29uc3QgZmFQYXN0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYXN0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZmlsZS1jbGlwYm9hcmRcIl0sIFwiZjBlYVwiLCBcIk0xNjAgMGMtMjMuNyAwLTQ0LjQgMTIuOS01NS40IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MDBjMCAyNi41IDIxLjUgNDggNDggNDhsMTQ0IDAgMC0yNzJjMC00NC4yIDM1LjgtODAgODAtODBsNDggMCAwLTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC01Ni42IDBDMjA0LjQgMTIuOSAxODMuNyAwIDE2MCAwek0yNzIgMTI4Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDI3MiAwIDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE5MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjIwLjFjMC0xMi43LTUuMS0yNC45LTE0LjEtMzMuOWwtNjcuOS02Ny45Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUwzMjAgMTI4bC00OCAwek0xNjAgNDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbmNvbnN0IGZhRmlsZUNsaXBib2FyZCA9IGZhUGFzdGU7XG5jb25zdCBmYUNvZGVQdWxsUmVxdWVzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb2RlLXB1bGwtcmVxdWVzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTEzY1wiLCBcIk0zMDUuOCAyLjFDMzE0LjQgNS45IDMyMCAxNC41IDMyMCAyNGwwIDQwIDE2IDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAxNjYuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNMNDAwIDE5MmMwLTM1LjMtMjguNy02NC02NC02NGwtMTYgMCAwIDQwYzAgOS41LTUuNiAxOC4xLTE0LjIgMjEuOXMtMTguOCAyLjMtMjUuOC00LjFsLTgwLTcyYy01LjEtNC42LTcuOS0xMS03LjktMTcuOHMyLjktMTMuMyA3LjktMTcuOGw4MC03MmM3LTYuMyAxNy4yLTcuOSAyNS44LTQuMXpNMTA0IDgwQTI0IDI0IDAgMSAwIDU2IDgwYTI0IDI0IDAgMSAwIDQ4IDB6bTggNzMuM2wwIDIwNS4zYzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjNjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM2wwLTIwNS4zQzE5LjcgMTQxIDAgMTEyLjggMCA4MEMwIDM1LjggMzUuOCAwIDgwIDBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zek0xMDQgNDMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTMyOCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xuY29uc3QgZmFDbGlwYm9hcmRMaXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC1saXN0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNDZkXCIsIFwiTTE5MiAwYy00MS44IDAtNzcuNCAyNi43LTkwLjUgNjRMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTM3LjUgMEMyNjkuNCAyNi43IDIzMy44IDAgMTkyIDB6bTAgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek03MiAyNzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTA0LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNNzIgMzY4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTg4IDBjMC04LjggNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbmNvbnN0IGZhVHJ1Y2tSYW1wQm94ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLXJhbXAtYm94JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ0cnVjay1sb2FkaW5nXCJdLCBcImY0ZGVcIiwgXCJNNjQwIDBsMCA0MDBjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJjLTYxIDAtMTEwLjUtNDguNy0xMTItMTA5LjNMNDguNCA1MDIuOWMtMTcuMSA0LjYtMzQuNi01LjQtMzkuMy0yMi41czUuNC0zNC42IDIyLjUtMzkuM0wzNTIgMzUzLjggMzUyIDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDY0MCAwek01NzYgNDAwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTIzLjEgMjA3LjdjLTQuNi0xNy4xIDUuNi0zNC42IDIyLjYtMzkuMmw0Ni40LTEyLjQgMjAuNyA3Ny4zYzIuMyA4LjUgMTEuMSAxMy42IDE5LjYgMTEuM2wzMC45LTguM2M4LjUtMi4zIDEzLjYtMTEuMSAxMS4zLTE5LjZsLTIwLjctNzcuMyA0Ni40LTEyLjRjMTcuMS00LjYgMzQuNiA1LjYgMzkuMiAyMi42bDQxLjQgMTU0LjVjNC42IDE3LjEtNS42IDM0LjYtMjIuNiAzOS4yTDEwMy43IDM4NC45Yy0xNy4xIDQuNi0zNC42LTUuNi0zOS4yLTIyLjZMMjMuMSAyMDcuN3pcIl1cbn07XG5jb25zdCBmYVRydWNrTG9hZGluZyA9IGZhVHJ1Y2tSYW1wQm94O1xuY29uc3QgZmFVc2VyQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1jaGVjaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjRmY1wiLCBcIk05NiAxMjhhMTI4IDEyOCAwIDEgMSAyNTYgMEExMjggMTI4IDAgMSAxIDk2IDEyOHpNMCA0ODIuM0MwIDM4My44IDc5LjggMzA0IDE3OC4zIDMwNGw5MS40IDBDMzY4LjIgMzA0IDQ0OCAzODMuOCA0NDggNDgyLjNjMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMMjkuNyA1MTJDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zek02MjUgMTc3TDQ5NyAzMDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQ3IDQ3TDU5MSAxNDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45elwiXVxufTtcbmNvbnN0IGZhVmlhbFZpcnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpYWwtdmlydXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1OTdcIiwgXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDAgMjg4YzAgNTMgNDMgOTYgOTYgOTZjMjguNiAwIDU0LjItMTIuNSA3MS44LTMyLjNjLjEtMTQuMiA1LjYtMjguMyAxNi40LTM5LjFjLjItLjIgLjEtLjYtLjItLjZjLTMwLjkgMC01Ni0yNS4xLTU2LTU2czI1LjEtNTYgNTYtNTZjLjMgMCAuNC0uNCAuMi0uNmMtMjEuOS0yMS45LTIxLjktNTcuMyAwLTc5LjJjMi40LTIuNCA1LTQuNiA3LjgtNi41TDIyNCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMEw5NiAzMiAzMiAzMnpNOTYgMTkybDAtOTYgNjQgMCAwIDk2LTY0IDB6TTIxNiAzNzZjMjguOCAwIDQzLjIgMzQuOCAyMi45IDU1LjJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGMyMC40LTIwLjQgNTUuMi01LjkgNTUuMiAyMi45YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0yOC44IDM0LjgtNDMuMiA1NS4yLTIyLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45QzQ0NC44IDQxMC44IDQ1OS4yIDM3NiA0ODggMzc2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy0yOC44IDAtNDMuMi0zNC44LTIyLjktNTUuMmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwQzQxMC44IDI1OS4yIDM3NiAyNDQuOCAzNzYgMjE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgMjguOC0zNC44IDQzLjItNTUuMiAyMi45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45YzIwLjQgMjAuNCA1LjkgNTUuMi0yMi45IDU1LjJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6bTEwNC04OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTQwIDk2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6XCJdXG59O1xuY29uc3QgZmFTaGVldFBsYXN0aWMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hlZXQtcGxhc3RpYycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTU3MVwiLCBcIk0wIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNjAgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMCAwLTI4OGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OHpNMTcxLjMgNzUuM2wtOTYgOTZjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsOTYtOTZjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42em05NiAzMmwtMTYwIDE2MGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwxNjAtMTYwYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpNMzg0IDM4NGwtMTI4IDAgMCAxMjhMMzg0IDM4NHpcIl1cbn07XG5jb25zdCBmYUJsb2cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmxvZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjc4MVwiLCBcIk0xOTIgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyQzUxMiAxMjguOSAzODMuMSAwIDIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtMTA2LTg2LTE5Mi0xOTItMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNOTYgMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4UzAgMTE3LjUgMCAxNDRMMCAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NGwtMTYgMCAwIDk2IDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0yMjR6XCJdXG59O1xuY29uc3QgZmFVc2VyTmluamEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1uaW5qYScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTM5OV0sIFwiZjUwNFwiLCBcIk0yMjQgMjU2Yy01Ny4yIDAtMTA1LjYtMzcuNS0xMjItODkuM2MtMS4xIDEuMy0yLjIgMi42LTMuNSAzLjhjLTE1LjggMTUuOC0zOC44IDIwLjctNTMuNiAyMi4xYy04LjEgLjgtMTQuNi01LjctMTMuOC0xMy44YzEuNC0xNC43IDYuMy0zNy44IDIyLjEtNTMuNmM1LjgtNS44IDEyLjYtMTAuMSAxOS42LTEzLjRjLTctMy4yLTEzLjgtNy42LTE5LjYtMTMuNEMzNy40IDgyLjcgMzIuNiA1OS43IDMxLjEgNDQuOWMtLjgtOC4xIDUuNy0xNC42IDEzLjgtMTMuOGMxNC43IDEuNCAzNy44IDYuMyA1My42IDIyLjFjNC44IDQuOCA4LjcgMTAuNCAxMS43IDE2LjFDMTMxLjQgMjguMiAxNzQuNCAwIDIyNCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4ek0wIDQ4Mi4zQzAgMzk5LjUgNTYuNCAzMzAgMTMyLjggMzA5LjljNi0xLjYgMTIuMiAuOSAxNS45IDUuOGw2Mi41IDgzLjNjNi40IDguNSAxOS4yIDguNSAyNS42IDBsNjIuNS04My4zYzMuNy00LjkgOS45LTcuNCAxNS45LTUuOEMzOTEuNiAzMzAgNDQ4IDM5OS41IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0wyOS43IDUxMkMxMy4zIDUxMiAwIDQ5OC43IDAgNDgyLjN6TTE2MCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkwxNjAgOTZ6XCJdXG59O1xuY29uc3QgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWFycm93LXVwLWZyb20tbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUzOVwiLCBcIk0xOTIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tOCAzNTJsMC05NiAxNiAwIDAgOTYtMTYgMHptLTY0IDBsLTg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTIwIDAgODAgMCAzNzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzQ0IDAgMC0xOTEuMSAyOC42IDQ3LjVjOS4xIDE1LjEgMjguOCAyMCA0My45IDEwLjlzMjAtMjguOCAxMC45LTQzLjlsLTU4LjMtOTdjLTE3LjQtMjguOS00OC42LTQ2LjYtODIuMy00Ni42bC0yOS43IDBjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45TDEyMCAyNTYuOSAxMjAgNDQ4ek01OTguNiAxMjEuNGwtODAtODBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw0NjQgMTQxLjMgNDY0IDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQyLjcgMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xuY29uc3QgZmFTY3JvbGxUb3JhaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzY3JvbGwtdG9yYWgnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInRvcmFoXCJdLCBcImY2YTBcIiwgXCJNOTYgNDgwTDk2IDMyQzk2IDE0LjMgNzQuNSAwIDQ4IDBTMCAxNC4zIDAgMzJMMCA0ODBjMCAxNy43IDIxLjUgMzIgNDggMzJzNDgtMTQuMyA0OC0zMnpNNTEyIDMyTDEyOCAzMmwwIDQ0OCAzODQgMCAwLTQ0OHpNNTkyIDBjLTI2LjUgMC00OCAxNC4zLTQ4IDMybDAgNDQ4YzAgMTcuNyAyMS41IDMyIDQ4IDMyczQ4LTE0LjMgNDgtMzJsMC00NDhjMC0xNy43LTIxLjUtMzItNDgtMzJ6TTE5NiAzMTMuN2MwLTMuMiAuOS02LjQgMi41LTkuMkwyMjYuNyAyNTZsLTI4LjMtNDguNWMtMS42LTIuOC0yLjUtNi0yLjUtOS4yYzAtMTAuMSA4LjItMTguMyAxOC4zLTE4LjNsNTYuNyAwIDMxLjQtNTMuOWMzLjYtNi4zIDEwLjMtMTAuMSAxNy42LTEwLjFzMTMuOSAzLjggMTcuNiAxMC4xTDM2OSAxODBsNTYuNyAwYzEwLjEgMCAxOC4zIDguMiAxOC4zIDE4LjNjMCAzLjItLjkgNi40LTIuNSA5LjJMNDEzLjMgMjU2bDI4LjMgNDguNWMxLjYgMi44IDIuNSA2IDIuNSA5LjJjMCAxMC4xLTguMiAxOC4zLTE4LjMgMTguM0wzNjkgMzMybC0zMS40IDUzLjljLTMuNiA2LjMtMTAuMyAxMC4xLTE3LjYgMTAuMXMtMTMuOS0zLjgtMTcuNi0xMC4xTDI3MSAzMzJsLTU2LjcgMGMtMTAuMSAwLTE4LjMtOC4yLTE4LjMtMTguM3ptMTI0IDU0LjdMMzQxLjIgMzMybC00Mi40IDBMMzIwIDM2OC40ek0yNTQuNSAyNTZsMzAuMyA1MiA3MC40IDAgMzAuMy01Mi0zMC4zLTUyLTcwLjQgMC0zMC4zIDUyem0xNDQuOSAyMy44TDM4MyAzMDhsMzIuOCAwLTE2LjQtMjguMnpNNDE1LjggMjA0TDM4MyAyMDRsMTYuNCAyOC4yTDQxNS44IDIwNHpNMzIwIDE0My42TDI5OC44IDE4MGw0Mi40IDBMMzIwIDE0My42ek0yMjQuMiAyMDRsMTYuNCAyOC4yTDI1NyAyMDRsLTMyLjggMHpNMjU3IDMwOGwtMTYuNC0yOC4yTDIyNC4yIDMwOGwzMi44IDB6XCJdXG59O1xuY29uc3QgZmFUb3JhaCA9IGZhU2Nyb2xsVG9yYWg7XG5jb25zdCBmYUJyb29tQmFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicm9vbS1iYWxsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJxdWlkZGl0Y2hcIiwgXCJxdWlkZGl0Y2gtYnJvb20tYmFsbFwiXSwgXCJmNDU4XCIsIFwiTTU2Ni42IDkuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTkyIDE5MiAzNC43IDM0LjdjNC4yIDQuMiA2LjYgMTAgNi42IDE2YzAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42bC0yOS4xIDBMMjU2IDIxMS43bDAtMjkuMWMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmM2IDAgMTEuOCAyLjQgMTYgNi42bDM0LjcgMzQuNyAxOTItMTkyYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwem0tMzQ0IDIyNS41TDM0MS4xIDM1My40YzMuNyA0Mi43LTExLjcgODUuMi00Mi4zIDExNS44QzI3MS40IDQ5Ni42IDIzNC4yIDUxMiAxOTUuNSA1MTJMMjIuMSA1MTJDOS45IDUxMiAwIDUwMi4xIDAgNDg5LjljMC02LjMgMi43LTEyLjMgNy4zLTE2LjVMMTMzLjcgMzU5LjdjNC4yLTMuNy0uNC0xMC40LTUuNC03LjlMNzcuMiAzNzcuNGMtNi4xIDMtMTMuMi0xLjQtMTMuMi04LjJjMC0zMS41IDEyLjUtNjEuNyAzNC44LTg0bDgtOGMzMC42LTMwLjYgNzMuMS00NS45IDExNS44LTQyLjN6TTQ2NCAzNTJhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6XCJdXG59O1xuY29uc3QgZmFRdWlkZGl0Y2ggPSBmYUJyb29tQmFsbDtcbmNvbnN0IGZhUXVpZGRpdGNoQnJvb21CYWxsID0gZmFCcm9vbUJhbGw7XG5jb25zdCBmYVRvZ2dsZU9mZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b2dnbGUtb2ZmJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjA0XCIsIFwiTTM4NCAxMjhjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhzLTU3LjMgMTI4LTEyOCAxMjhsLTE5MiAwYy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4bDE5MiAwek01NzYgMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyTDE5MiA2NEM4NiA2NCAwIDE1MCAwIDI1NlM4NiA0NDggMTkyIDQ0OGwxOTIgMGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMTkyIDM1MmE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDEgMCAwIDE5MnpcIl1cbn07XG5jb25zdCBmYUJveEFyY2hpdmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94LWFyY2hpdmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFyY2hpdmVcIl0sIFwiZjE4N1wiLCBcIk0zMiAzMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptMCAxMjhsNDQ4IDAgMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTI1NnptMTI4IDgwYzAgOC44IDcuMiAxNiAxNiAxNmwxNjAgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG5jb25zdCBmYUFyY2hpdmUgPSBmYUJveEFyY2hpdmU7XG5jb25zdCBmYVBlcnNvbkRyb3duaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1kcm93bmluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0NVwiLCBcIk0xOTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMi4yYzAgNTQuMSAyMy41IDEwNCA2Mi4yIDEzOC4zbC0yMSAxNDYuN2M3LjggMi4xIDE1LjUgMy4zIDIyLjggMy4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzEyLjQgOC41IDI2LjEgMTQuOCAzOS43IDE4bDE3LjctOTcuNmMxMC43LTEuMiAyMS4zLTMuMSAzMS45LTUuNWwxMDUtMjMuOWMxNy4yLTMuOSAyOC0yMS4xIDI0LjEtMzguM3MtMjEuMS0yOC0zOC4zLTI0LjFMNDAwIDIxNi42Yy00MSA5LjMtODMuNyA3LjUtMTIzLjctNS4yYy01MC4yLTE2LTg0LjMtNjIuNi04NC4zLTExNS4zTDE5MiA2NHpNMzIwIDE5MmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNMzA2LjUgMzg5LjljLTExLjEtNy45LTI1LjktNy45LTM3IDBDMjQ3IDQwNS40IDIxOS41IDQxNiAxOTIgNDE2Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWMwIDAgMCAwIDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSA0NjkuNyAxNTkgNDgwIDE5MiA0ODBjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNSAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNC0yNy4zLTEwLjEtMzkuMi0xLjdjMCAwIDAgMCAwIDBDNDM5LjQgNDA1LjIgNDEwLjkgNDE2IDM4NCA0MTZjLTI3LjUgMC01NS0xMC42LTc3LjUtMjYuMXpcIl1cbn07XG5jb25zdCBmYUFycm93RG93bjkxID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24tOS0xJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LW51bWVyaWMtZGVzY1wiLCBcInNvcnQtbnVtZXJpYy1kb3duLWFsdFwiXSwgXCJmODg2XCIsIFwiTTE2MCA0ODBjOSAwIDE3LjUtMy44IDIzLjYtMTAuNGw4OC05NmMxMS45LTEzIDExLjEtMzMuMy0yLTQ1LjJzLTMzLjMtMTEuMS00NS4yIDJMMTkyIDM2NS43IDE5MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMwMS43TDk1LjYgMzMwLjRjLTExLjktMTMtMzIuMi0xMy45LTQ1LjItMnMtMTMuOSAzMi4yLTIgNDUuMmw4OCA5NkMxNDIuNSA0NzYuMiAxNTEgNDgwIDE2MCA0ODB6TTQ1MC43IDI5NGMtOC4zLTYtMTkuMS03LjctMjguOC00LjRsLTQ4IDE2Yy0xNi44IDUuNi0yNS44IDIzLjctMjAuMiA0MC41czIzLjcgMjUuOCA0MC41IDIwLjJsNS45LTIgMCA1MS42LTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNDggMCA0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtOTZjMC0xMC4zLTQuOS0xOS45LTEzLjMtMjZ6TTQxOC4zIDkxYTMyIDMyIDAgMSAxIDI3LjQgNTcuOUEzMiAzMiAwIDEgMSA0MTguMyA5MXpNNDA1LjEgMjAzLjhsLTYuOCA5LjJjLTEwLjUgMTQuMi03LjUgMzQuMiA2LjcgNDQuOHMzNC4yIDcuNSA0NC44LTYuN2w0OC44LTY1LjhjMTQtMTguOSAyMS41LTQxLjcgMjEuNS02NS4yYzAtNDguNi0zOS40LTg4LTg4LTg4cy04OCAzOS40LTg4IDg4YzAgMzkuMiAyNS42IDcyLjQgNjEuMSA4My44elwiXVxufTtcbmNvbnN0IGZhU29ydE51bWVyaWNEZXNjID0gZmFBcnJvd0Rvd245MTtcbmNvbnN0IGZhU29ydE51bWVyaWNEb3duQWx0ID0gZmFBcnJvd0Rvd245MTtcbmNvbnN0IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXRvbmd1ZS1zcXVpbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDEsIFwiZ3Jpbi10b25ndWUtc3F1aW50XCJdLCBcImY1OGFcIiwgXCJNMCAyNTZDMCAzNjguOSA3My4xIDQ2NC43IDE3NC41IDQ5OC44QzE2NS4zIDQ4NCAxNjAgNDY2LjYgMTYwIDQ0OGwwLTQ3LjNjLTI0LTE3LjUtNDMuMS00MS40LTU0LjgtNjkuMmMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTljMTIuMy0zLjggMjQuMyA2LjkgMTkuMyAxOC43Yy0xMS44IDI4LTMxLjEgNTItNTUuNCA2OS42bDAgNDYuOWMwIDE4LjYtNS4zIDM2LTE0LjUgNTAuOEM0MzguOSA0NjQuNyA1MTIgMzY4LjkgNTEyIDI1NkM1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2ek0xMTYgMTQxLjFjMC05IDkuNi0xNC43IDE3LjUtMTAuNWw4OS45IDQ3LjljMTAuNyA1LjcgMTAuNyAyMS4xIDAgMjYuOGwtODkuOSA0Ny45Yy03LjkgNC4yLTE3LjUtMS41LTE3LjUtMTAuNWMwLTIuOCAxLTUuNSAyLjgtNy42bDM2LTQzLjItMzYtNDMuMmMtMS44LTIuMS0yLjgtNC44LTIuOC03LjZ6bTI2Mi41LTEwLjVjNy45LTQuMiAxNy41IDEuNSAxNy41IDEwLjVjMCAyLjgtMSA1LjUtMi44IDcuNmwtMzYgNDMuMiAzNiA0My4yYzEuOCAyLjEgMi44IDQuOCAyLjggNy42YzAgOS05LjYgMTQuNy0xNy41IDEwLjVsLTg5LjktNDcuOWMtMTAuNy01LjctMTAuNy0yMS4xIDAtMjYuOGw4OS45LTQ3Ljl6TTMyMCA0NDhsMC00NS40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjljLTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDBjLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCA0NS40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6XCJdXG59O1xuY29uc3QgZmFHcmluVG9uZ3VlU3F1aW50ID0gZmFGYWNlR3JpblRvbmd1ZVNxdWludDtcbmNvbnN0IGZhU3ByYXlDYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3ByYXktY2FuJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNWJkXCIsIFwiTTEyOCAwbDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5Nkw5NiAxMjhsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAyNTZjMC01MyA0My05NiA5Ni05NmwxMjggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjA4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAyNTZ6bTI0MCA4MEE4MCA4MCAwIDEgMCA4MCAzMzZhODAgODAgMCAxIDAgMTYwIDB6TTI1NiA2NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zODQgMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTQ0OCAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMzg0IDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFUcnVja01vbnN0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stbW9uc3RlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjYzYlwiLCBcIk0yODggNjRsMCA2NCAxMjggMEwzNjggNjRsLTgwIDB6TTQxOS4yIDI1LjZMNDk2IDEyOGw4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTI5LjItMzguOS03NS43LTY0LTEyOC02NHMtOTguOCAyNS4xLTEyOCA2NGwtNjQgMGMtMjkuMi0zOC45LTc1LjctNjQtMTI4LTY0cy05OC44IDI1LjEtMTI4IDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTYwIDAgMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzIwLjEgMCAzOS4xIDkuNSA1MS4yIDI1LjZ6TTE1MiAyNTZsMTYgMGMxMi4xIDAgMjIuMSA4LjkgMjMuOCAyMC42YzcuNiAyLjIgMTQuOSA1LjMgMjEuNyA5YzkuNC03IDIyLjgtNi4zIDMxLjMgMi4zbDExLjMgMTEuM2M4LjYgOC42IDkuMyAyMS45IDIuMyAzMS4zYzMuNyA2LjggNi44IDE0LjEgOSAyMS43YzExLjYgMS43IDIwLjYgMTEuNyAyMC42IDIzLjhsMCAxNmMwIDEyLjEtOC45IDIyLjEtMjAuNiAyMy44Yy0yLjIgNy42LTUuMyAxNC45LTkgMjEuN2M3IDkuNCA2LjMgMjIuOC0yLjMgMzEuM2wtMTEuMyAxMS4zYy04LjYgOC42LTIxLjkgOS4zLTMxLjMgMi4yYy02LjggMy43LTE0LjEgNi44LTIxLjcgOUMxOTAuMSA1MDMuMSAxODAuMSA1MTIgMTY4IDUxMmwtMTYgMGMtMTIuMSAwLTIyLjEtOC45LTIzLjgtMjAuNmMtNy42LTIuMi0xNC45LTUuMy0yMS43LTljLTkuNCA3LjEtMjIuOCA2LjMtMzEuMy0yLjJMNjMuOCA0NjguOWMtOC42LTguNi05LjMtMjEuOS0yLjMtMzEuM2MtMy43LTYuOS02LjgtMTQuMS05LTIxLjhDNDAuOSA0MTQuMSAzMiA0MDQuMSAzMiAzOTJsMC0xNmMwLTEyLjEgOC45LTIyLjEgMjAuNi0yMy44YzIuMi03LjYgNS4zLTE0LjkgOS0yMS44Yy03LTkuNC02LjMtMjIuOCAyLjMtMzEuM2wxMS4zLTExLjNjOC42LTguNiAyMS45LTkuMyAzMS4zLTIuM2M2LjgtMy43IDE0LjEtNi44IDIxLjctOWMxLjctMTEuNiAxMS43LTIwLjYgMjMuOC0yMC42em04IDE3NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTQ0OC4yIDI3Ni42YzEuNy0xMS42IDExLjctMjAuNiAyMy44LTIwLjZsMTYgMGMxMi4xIDAgMjIuMSA4LjkgMjMuOCAyMC42YzcuNiAyLjIgMTQuOSA1LjMgMjEuOCA5YzkuNC03IDIyLjgtNi4zIDMxLjMgMi4zbDExLjMgMTEuM2M4LjYgOC42IDkuMyAyMS45IDIuMiAzMS4zYzMuNyA2LjggNi44IDE0LjEgOSAyMS43YzExLjYgMS43IDIwLjYgMTEuNyAyMC42IDIzLjhsMCAxNmMwIDEyLjEtOC45IDIyLjEtMjAuNiAyMy44Yy0yLjIgNy42LTUuMyAxNC45LTkgMjEuN2M3IDkuNCA2LjMgMjIuOC0yLjIgMzEuM2wtMTEuMyAxMS4zYy04LjYgOC42LTIxLjkgOS4zLTMxLjMgMi4yYy02LjkgMy43LTE0LjEgNi44LTIxLjggOUM1MTAuMSA1MDMuMSA1MDAuMSA1MTIgNDg4IDUxMmwtMTYgMGMtMTIuMSAwLTIyLjEtOC45LTIzLjgtMjAuNmMtNy42LTIuMi0xNC45LTUuMy0yMS43LTljLTkuNCA3LjEtMjIuOCA2LjMtMzEuMy0yLjJsLTExLjMtMTEuM2MtOC42LTguNi05LjMtMjEuOS0yLjItMzEuM2MtMy43LTYuOS02LjgtMTQuMS05LTIxLjhDMzYwLjkgNDE0LjEgMzUyIDQwNC4xIDM1MiAzOTJsMC0xNmMwLTEyLjEgOC45LTIyLjEgMjAuNi0yMy44YzIuMi03LjYgNS4zLTE0LjkgOS0yMS44Yy03LTkuNC02LjMtMjIuOCAyLjItMzEuM2wxMS4zLTExLjNjOC42LTguNiAyMS45LTkuMyAzMS4zLTIuM2M2LjgtMy43IDE0LjEtNi44IDIxLjctOXpNNTI4IDM4NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwelwiXVxufTtcbmNvbnN0IGZhVyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTE5XSwgXCI1N1wiLCBcIk0yMC44IDM0YzE2LjUtNi4yIDM1IDIuMiA0MS4yIDE4LjdsMTEwLjIgMjk0TDI1Ny4zIDU1YzQtMTMuNyAxNi41LTIzIDMwLjctMjNzMjYuNyA5LjQgMzAuNyAyM2w4NS4xIDI5MS43TDUxNCA1Mi44YzYuMi0xNi41IDI0LjYtMjQuOSA0MS4yLTE4LjdzMjQuOSAyNC43IDE4LjcgNDEuMmwtMTQ0IDM4NGMtNC44IDEyLjktMTcuNCAyMS4zLTMxLjIgMjAuN3MtMjUuNy05LjgtMjkuNS0yM0wyODggMTc4LjMgMjA2LjcgNDU3Yy0zLjkgMTMuMi0xNS44IDIyLjUtMjkuNSAyM3MtMjYuMy03LjgtMzEuMi0yMC43TDIgNzUuMkMtNC4yIDU4LjcgNC4yIDQwLjIgMjAuOCAzNHpcIl1cbn07XG5jb25zdCBmYUVhcnRoQWZyaWNhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VhcnRoLWFmcmljYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1NywgXCJnbG9iZS1hZnJpY2FcIl0sIFwiZjU3Y1wiLCBcIk0xNzcuOCA2My4ybDEwIDE3LjRjMi44IDQuOCA0LjIgMTAuMyA0LjIgMTUuOWwwIDQxLjRjMCAzLjkgMS42IDcuNyA0LjMgMTAuNGM2LjIgNi4yIDE2LjUgNS43IDIyLTEuMmwxMy42LTE3YzQuNy01LjkgMTIuOS03LjcgMTkuNi00LjNsMTUuMiA3LjZjMy40IDEuNyA3LjIgMi42IDExIDIuNmM2LjUgMCAxMi44LTIuNiAxNy40LTcuMmwzLjktMy45YzIuOS0yLjkgNy4zLTMuNiAxMS0xLjhsMjkuMiAxNC42YzcuOCAzLjkgMTIuNiAxMS44IDEyLjYgMjAuNWMwIDEwLjUtNy4xIDE5LjYtMTcuMyAyMi4ybC0zNS40IDguOGMtNy40IDEuOC0xNS4xIDEuNS0yMi40LS45bC0zMi0xMC43Yy0zLjMtMS4xLTYuNy0xLjctMTAuMi0xLjdjLTcgMC0xMy44IDIuMy0xOS40IDYuNUwxNzYgMjEyYy0xMC4xIDcuNi0xNiAxOS40LTE2IDMybDAgMjhjMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmMxMC4xIDAgMTkuNi00LjcgMjUuNi0xMi44bDI1LjYtMzQuMWM4LjMtMTEuMSAxMi44LTI0LjYgMTIuOC0zOC40bDAtMTIuMWMwLTMuOSAyLjYtNy4zIDYuNC04LjJsNS4zLTEuM2MxMS45LTMgMjAuMy0xMy43IDIwLjMtMjZjMC03LjEtMi44LTEzLjktNy44LTE4LjlsLTMzLjUtMzMuNWMtMy43LTMuNy0zLjctOS43IDAtMTMuNGM1LjctNS43IDE0LjEtNy43IDIxLjgtNS4xbDE0LjEgNC43YzEyLjMgNC4xIDI1LjctMS41IDMxLjUtMTNjMy41LTcgMTEuMi0xMC44IDE4LjktOS4ybDI3LjQgNS41QzQzMiAxMTIuNCAzNTEuNSA0OCAyNTYgNDhjLTI3LjcgMC01NCA1LjQtNzguMiAxNS4yek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6XCJdXG59O1xuY29uc3QgZmFHbG9iZUFmcmljYSA9IGZhRWFydGhBZnJpY2E7XG5jb25zdCBmYVJhaW5ib3cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmFpbmJvdycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyNzc1Ml0sIFwiZjc1YlwiLCBcIk0zMjAgOTZDMTc4LjYgOTYgNjQgMjEwLjYgNjQgMzUybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NkMwIDE3NS4zIDE0My4zIDMyIDMyMCAzMnMzMjAgMTQzLjMgMzIwIDMyMGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZDNTc2IDIxMC42IDQ2MS40IDk2IDMyMCA5NnptMCAxOTJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTM1LjMtMjguNy02NC02NC02NHpNMTYwIDM1MmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZjMC0xMjMuNyAxMDAuMy0yMjQgMjI0LTIyNHMyMjQgMTAwLjMgMjI0IDIyNGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZjMC04OC40LTcxLjYtMTYwLTE2MC0xNjBzLTE2MCA3MS42LTE2MCAxNjB6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVOb3RjaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtbm90Y2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxY2VcIiwgXCJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44QzEyMS44IDk1LjYgNjQgMTY5LjEgNjQgMjU2YzAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xYy0xNi45LTUtMjYuNi0yMi45LTIxLjUtMzkuOHMyMi45LTI2LjYgMzkuOC0yMS41QzQzNC45IDQyLjEgNTEyIDE0MCA1MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NkMwIDE0MCA3Ny4xIDQyLjEgMTgyLjkgMTAuNmMxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41elwiXVxufTtcbmNvbnN0IGZhVGFibGV0U2NyZWVuQnV0dG9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxldC1zY3JlZW4tYnV0dG9uJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ0YWJsZXQtYWx0XCJdLCBcImYzZmFcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0yNTYgNDQ4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM4NCA2NEw2NCA2NGwwIDMyMCAzMjAgMCAwLTMyMHpcIl1cbn07XG5jb25zdCBmYVRhYmxldEFsdCA9IGZhVGFibGV0U2NyZWVuQnV0dG9uO1xuY29uc3QgZmFQYXcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGF3JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMWIwXCIsIFwiTTIyNi41IDkyLjljMTQuMyA0Mi45LS4zIDg2LjItMzIuNiA5Ni44cy03MC4xLTE1LjYtODQuNC01OC41cy4zLTg2LjIgMzIuNi05Ni44czcwLjEgMTUuNiA4NC40IDU4LjV6TTEwMC40IDE5OC42YzE4LjkgMzIuNCAxNC4zIDcwLjEtMTAuMiA4NC4xcy01OS43LS45LTc4LjUtMzMuM1MtMi43IDE3OS4zIDIxLjggMTY1LjNzNTkuNyAuOSA3OC41IDMzLjN6TTY5LjIgNDAxLjJDMTIxLjYgMjU5LjkgMjE0LjcgMjI0IDI1NiAyMjRzMTM0LjQgMzUuOSAxODYuOCAxNzcuMmMzLjYgOS43IDUuMiAyMC4xIDUuMiAzMC41bDAgMS42YzAgMjUuOC0yMC45IDQ2LjctNDYuNyA0Ni43Yy0xMS41IDAtMjIuOS0xLjQtMzQtNC4ybC04OC0yMmMtMTUuMy0zLjgtMzEuMy0zLjgtNDYuNiAwbC04OCAyMmMtMTEuMSAyLjgtMjIuNSA0LjItMzQgNC4yQzg0LjkgNDgwIDY0IDQ1OS4xIDY0IDQzMy4zbDAtMS42YzAtMTAuNCAxLjYtMjAuOCA1LjItMzAuNXpNNDIxLjggMjgyLjdjLTI0LjUtMTQtMjkuMS01MS43LTEwLjItODQuMXM1NC00Ny4zIDc4LjUtMzMuM3MyOS4xIDUxLjcgMTAuMiA4NC4xcy01NCA0Ny4zLTc4LjUgMzMuM3pNMzEwLjEgMTg5LjdjLTMyLjMtMTAuNi00Ni45LTUzLjktMzIuNi05Ni44czUyLjEtNjkuMSA4NC40LTU4LjVzNDYuOSA1My45IDMyLjYgOTYuOHMtNTIuMSA2OS4xLTg0LjQgNTguNXpcIl1cbn07XG5jb25zdCBmYUNsb3VkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb3VkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTcyOV0sIFwiZjBjMlwiLCBcIk0wIDMzNmMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NGwzNjggMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGMwLTYxLjktNDQtMTEzLjYtMTAyLjQtMTI1LjRjNC4xLTEwLjcgNi40LTIyLjQgNi40LTM0LjZjMC01My00My05Ni05Ni05NmMtMTkuNyAwLTM4LjEgNi01My4zIDE2LjJDMzY3IDY0LjIgMzE1LjMgMzIgMjU2IDMyQzE2Ny42IDMyIDk2IDEwMy42IDk2IDE5MmMwIDIuNyAuMSA1LjQgLjIgOC4xQzQwLjIgMjE5LjggMCAyNzMuMiAwIDMzNnpcIl1cbn07XG5jb25zdCBmYVRyb3dlbEJyaWNrcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cm93ZWwtYnJpY2tzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNThhXCIsIFwiTTI0MC44IDQuOEMyNTAuMyAxMC42IDI1NiAyMC45IDI1NiAzMmwwIDcyIDg5IDBjMy42LTEzLjggMTYuMS0yNCAzMS0yNGw4OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC04OCAwYy0xNC45IDAtMjcuNC0xMC4yLTMxLTI0bC04OSAwIDAgNzJjMCAxMS4xLTUuNyAyMS40LTE1LjIgMjcuMnMtMjEuMiA2LjQtMzEuMSAxLjRsLTE5Mi05NkM2LjggMTUxLjIgMCAxNDAuMSAwIDEyOHM2LjgtMjMuMiAxNy43LTI4LjZsMTkyLTk2YzkuOS01IDIxLjctNC40IDMxLjEgMS40ek0yODggMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0zMiAzODRsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYUZhY2VGbHVzaGVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZmx1c2hlZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU2MywgXCJmbHVzaGVkXCJdLCBcImY1NzlcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0xNzYgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTI4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptLTE2LTg4YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0em0yNjQtNzJhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwem0tMjg4IDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTkyIDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG5jb25zdCBmYUZsdXNoZWQgPSBmYUZhY2VGbHVzaGVkO1xuY29uc3QgZmFIb3NwaXRhbFVzZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG9zcGl0YWwtdXNlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjgwZFwiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDI1NmwxNDQgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkwwIDI4OGwwIDY0IDE0NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDAgMzg0bDAgODBjMCAyNi41IDIxLjUgNDggNDggNDhsMjE3LjkgMGMtNi4zLTEwLjItOS45LTIyLjItOS45LTM1LjFjMC00Ni45IDI1LjgtODcuOCA2NC0xMDkuMmwwLTk1LjlMMzIwIDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDB6TTE1MiA2NGwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI0IDI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0yNCAwIDAgMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNC0yNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsMjQgMCAwLTI0YzAtOC44IDcuMi0xNiAxNi0xNnpNNTEyIDI3MmE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6TTI4OCA0NzcuMWMwIDE5LjMgMTUuNiAzNC45IDM0LjkgMzQuOWwyMTguMiAwYzE5LjMgMCAzNC45LTE1LjYgMzQuOS0zNC45YzAtNTEuNC00MS43LTkzLjEtOTMuMS05My4xbC0xMDEuOCAwYy01MS40IDAtOTMuMSA0MS43LTkzLjEgOTMuMXpcIl1cbn07XG5jb25zdCBmYVRlbnRBcnJvd0xlZnRSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW50LWFycm93LWxlZnQtcmlnaHQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1N2ZcIiwgXCJNNDg4LjEgNi4yYy05LjktOC45LTI1LTguMS0zMy45IDEuOHMtOC4xIDI1IDEuOCAzMy45TDQ4OS41IDcyIDg2LjUgNzJsMzMuNS0zMC4yYzkuOS04LjkgMTAuNy0yNCAxLjgtMzMuOVM5Ny44LTIuNyA4Ny45IDYuMmwtODAgNzJDMi45IDgyLjcgMCA4OS4yIDAgOTZzMi45IDEzLjMgNy45IDE3LjhsODAgNzJjOS45IDguOSAyNSA4LjEgMzMuOS0xLjhzOC4xLTI1LTEuOC0zMy45TDg2LjUgMTIwbDQwMi45IDAtMzMuNSAzMC4yYy05LjkgOC45LTEwLjcgMjQtMS44IDMzLjlzMjQgMTAuNyAzMy45IDEuOGw4MC03MmM1LjEtNC42IDcuOS0xMSA3LjktMTcuOHMtMi45LTEzLjMtNy45LTE3LjhsLTgwLTcyek0zMDcuNCAxNjYuNWMtMTEuNS04LjctMjcuMy04LjctMzguOCAwbC0xNjggMTI4Yy02LjYgNS0xMSAxMi41LTEyLjMgMjAuN2wtMjQgMTYwYy0xLjQgOS4yIDEuMyAxOC42IDcuNCAyNS42Uzg2LjcgNTEyIDk2IDUxMmwxNDQgMCAxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTE4LjFjMC01LjUgNC40LTkuOSA5LjktOS45YzMuNyAwIDcuMiAyLjEgOC44IDUuNWw2OC40IDEzNi44YzUuNCAxMC44IDE2LjUgMTcuNyAyOC42IDE3LjdsNjAuMiAwIDE2IDBjOS4zIDAgMTguMi00LjEgMjQuMi0xMS4xczguOC0xNi40IDcuNC0yNS42bC0yNC0xNjBjLTEuMi04LjItNS42LTE1LjctMTIuMy0yMC43bC0xNjgtMTI4elwiXVxufTtcbmNvbnN0IGZhR2F2ZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2F2ZWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxlZ2FsXCJdLCBcImYwZTNcIiwgXCJNMzE4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTIwIDEyMGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYgMTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNC00TDMyNS40IDI5My40bC00IDRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2IDE2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyMC0xMjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2LTE2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNCA0TDMzMC42IDc0LjZsNC00YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNi0xNnptLTE1MiAyODhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMTIgMTEyYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w0OCA0OGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMTItMTEyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xLjQtMS40TDI3MiAyODUuMyAyMjYuNyAyNDAgMTY4IDI5OC43bC0xLjQtMS40elwiXVxufTtcbmNvbnN0IGZhTGVnYWwgPSBmYUdhdmVsO1xuY29uc3QgZmFCaW5vY3VsYXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jpbm9jdWxhcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxZTVcIiwgXCJNMTI4IDMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMkw5NiA5NmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA5NmwwIDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNTkuMWMwLTM0LjYgOS40LTY4LjYgMjcuMi05OC4zQzQwLjkgMjY3LjggNDkuNyAyNDIuNCA1MyAyMTZMNjAuNSAxNTZjMi0xNiAxNS42LTI4IDMxLjgtMjhsOTkuOCAwem0yMjcuOCAwYzE2LjEgMCAyOS44IDEyIDMxLjggMjhMNDU5IDIxNmMzLjMgMjYuNCAxMi4xIDUxLjggMjUuOCA3NC42YzE3LjggMjkuNyAyNy4yIDYzLjcgMjcuMiA5OC4zbDAgNTkuMWMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzIwIDk5LjggMHpNMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMi05NiAwIDAtMzJ6bS0zMiA2NGwwIDE2MC02NCAwIDAtMTYwIDY0IDB6XCJdXG59O1xuY29uc3QgZmFNaWNyb3Bob25lU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWljcm9waG9uZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjEzMVwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ3Mi4xIDM0NC43YzE1LjItMjYgMjMuOS01Ni4zIDIzLjktODguN2wwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCAyMS4yLTUuMSA0MS4xLTE0LjIgNTguN0w0MTYgMzAwLjggNDE2IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgNTQuM0wzOC44IDUuMXpNMzQ0IDQzMC40YzIwLjQtMi44IDM5LjctOS4xIDU3LjMtMTguMmwtNDMuMS0zMy45QzM0Ni4xIDM4MiAzMzMuMyAzODQgMzIwIDM4NGMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhsMC04LjdMMTQ0LjcgMjEwYy0uNSAxLjktLjcgMy45LS43IDZsMCA0MGMwIDg5LjEgNjYuMiAxNjIuNyAxNTIgMTc0LjRsMCAzMy42LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwIDAtMzMuNnpcIl1cbn07XG5jb25zdCBmYUJveFRpc3N1ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3gtdGlzc3VlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMDViXCIsIFwiTTkyLjUgMEwyMDggMGM0MCAwIDUyIDI0IDY0IDQ4czI0IDQ4IDY0IDQ4bDg1LjIgMEM0MzYgOTYgNDQ4IDEwOCA0NDggMTIyLjhjMCAzLjQtLjcgNi44LTEuOSAxMEw0MDkuNiAyMjQgMzg0IDI4OGwtMjU2IDAtMTYtNjRMNjQuOSAzNS40Yy0uNi0yLjMtLjktNC42LS45LTYuOUM2NCAxMi44IDc2LjggMCA5Mi41IDB6TTc5IDIyNGwxNiA2NC0xNSAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDQ4IDAgMjU2IDAgNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTMuNSAwIDI1LjYtNjQgMTkuOSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTEyTDAgMzg0IDAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMxIDB6TTAgNDE2bDUxMiAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQ4elwiXVxufTtcbmNvbnN0IGZhTW90b3JjeWNsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb3RvcmN5Y2xlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTQ5XSwgXCJmMjFjXCIsIFwiTTI4MCAzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1Ny43IDAgMTYuNCAzMC4zTDI1NiAxOTJsLTQ1LjMtNDUuM2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0w2NCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzIgOTYgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MGMwIDExLTEuMSAyMS43LTMuMiAzMmw3MC40IDBjLTIuMS0xMC4zLTMuMi0yMS0zLjItMzJjMC01Mi4yIDI1LTk4LjYgNjMuNy0xMjcuOGwxNS40IDI4LjZDNDAyLjQgMjc2LjMgMzg0IDMxMiAzODQgMzUyYzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhzLTU3LjMtMTI4LTEyOC0xMjhjLTEzLjUgMC0yNi41IDIuMS0zOC43IDZMNDE4LjIgMTI4bDYxLjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yMC40IDBjLTcuNSAwLTE0LjcgMi42LTIwLjUgNy40TDM5MS43IDc4LjlsLTE0LTI2Yy03LTEyLjktMjAuNS0yMS0zNS4yLTIxTDI4MCAzMnpNNDYyLjcgMzExLjJsMjguMiA1Mi4yYzYuMyAxMS43IDIwLjkgMTYgMzIuNSA5LjdzMTYtMjAuOSA5LjctMzIuNWwtMjguMi01Mi4yYzIuMy0uMyA0LjctLjQgNy4xLS40YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMTUuNSA1LjUtMjkuNyAxNC43LTQwLjh6TTE4Ny4zIDM3NmMtOS41IDIzLjUtMzIuNSA0MC01OS4zIDQwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzI2LjkgMCA0OS45IDE2LjUgNTkuMyA0MGw2Ni40IDBDMjQyLjUgMjY4LjggMTkwLjUgMjI0IDEyOCAyMjRDNTcuMyAyMjQgMCAyODEuMyAwIDM1MnM1Ny4zIDEyOCAxMjggMTI4YzYyLjUgMCAxMTQuNS00NC44IDEyNS44LTEwNGwtNjYuNCAwek0xMjggMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUJlbGxDb25jaWVyZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmVsbC1jb25jaWVyZ2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MTgsIFwiY29uY2llcmdlLWJlbGxcIl0sIFwiZjU2MlwiLCBcIk0yMTYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYgMCAwIDMzLjNDMTE5LjYgMTU3LjIgMzIgMjUyLjQgMzIgMzY4bDQ0OCAwYzAtMTE1LjYtODcuNi0yMTAuOC0yMDAtMjIyLjdsMC0zMy4zIDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAtNDAgMHpNMjQgNDAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDQwMHpcIl1cbn07XG5jb25zdCBmYUNvbmNpZXJnZUJlbGwgPSBmYUJlbGxDb25jaWVyZ2U7XG5jb25zdCBmYVBlblJ1bGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blbi1ydWxlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wicGVuY2lsLXJ1bGVyXCJdLCBcImY1YWVcIiwgXCJNNDY5LjMgMTkuM2wyMy40IDIzLjRjMjUgMjUgMjUgNjUuNSAwIDkwLjVsLTU2LjQgNTYuNEwzMjIuMyA3NS43bDU2LjQtNTYuNGMyNS0yNSA2NS41LTI1IDkwLjUgMHpNNDQuOSAzNTMuMkwyOTkuNyA5OC4zIDQxMy43IDIxMi4zIDE1OC44IDQ2Ny4xYy02LjcgNi43LTE1LjEgMTEuNi0yNC4yIDE0LjJsLTEwNCAyOS43Yy04LjQgMi40LTE3LjQgLjEtMjMuNi02LjFzLTguNS0xNS4yLTYuMS0yMy42bDI5LjctMTA0YzIuNi05LjIgNy41LTE3LjUgMTQuMi0yNC4yek0yNDkuNCAxMDMuNEwxMDMuNCAyNDkuNCAxNiAxNjEuOWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlMOTQuMSAxNmMxOC43LTE4LjcgNDkuMS0xOC43IDY3LjkgMGwxOS44IDE5LjhjLS4zIC4zLS43IC42LTEgLjlsLTY0IDY0Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsNjQtNjRjLjMtLjMgLjYtLjcgLjktMWw0NS4xIDQ1LjF6TTQwOC42IDI2Mi42bDQ1LjEgNDUuMWMtLjMgLjMtLjcgLjYtMSAuOWwtNjQgNjRjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw2NC02NGMuMy0uMyAuNi0uNyAuOS0xTDQ5NiAzNTAuMWMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOUw0MTcuOSA0OTZjLTE4LjcgMTguNy00OS4xIDE4LjctNjcuOSAwbC04Ny40LTg3LjRMNDA4LjYgMjYyLjZ6XCJdXG59O1xuY29uc3QgZmFQZW5jaWxSdWxlciA9IGZhUGVuUnVsZXI7XG5jb25zdCBmYVBlb3BsZUFycm93cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW9wbGUtYXJyb3dzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwZW9wbGUtYXJyb3dzLWxlZnQtcmlnaHRcIl0sIFwiZTA2OFwiLCBcIk02NCA2NGE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSA2NCA2NHpNMjUuOSAyMzMuNEMyOS4zIDE5MS45IDY0IDE2MCAxMDUuNiAxNjBsNDQuOCAwYzI3IDAgNTEgMTMuNCA2NS41IDM0LjFjLTIuNyAxLjktNS4yIDQtNy41IDYuM2wtNjQgNjRjLTIxLjkgMjEuOS0yMS45IDU3LjMgMCA3OS4yTDE5MiAzOTEuMmwwIDcyLjhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTE1LjdjLTI2LjUtOS41LTQ0LjctMzUuOC00Mi4yLTY1LjZsNC4xLTQ5LjN6TTQ0OCA2NGE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSA0NDggNjR6TTQzMS42IDIwMC40Yy0yLjMtMi4zLTQuOS00LjQtNy41LTYuM2MxNC41LTIwLjcgMzguNi0zNC4xIDY1LjUtMzQuMWw0NC44IDBjNDEuNiAwIDc2LjMgMzEuOSA3OS43IDczLjRsNC4xIDQ5LjNjMi41IDI5LjgtMTUuNyA1Ni4xLTQyLjIgNjUuNkw1NzYgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTcyLjggNDcuNi00Ny42YzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4ybC02NC02NHpNMjcyIDI0MGwwIDMyIDk2IDAgMC0zMmMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsNjQgNjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTY0IDY0Yy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4ycy0xNC44LTEyLjUtMTQuOC0yMi4ybDAtMzItOTYgMCAwIDMyYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw2NC02NGM2LjktNi45IDE3LjItOC45IDI2LjItNS4yczE0LjggMTIuNSAxNC44IDIyLjJ6XCJdXG59O1xuY29uc3QgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQgPSBmYVBlb3BsZUFycm93cztcbmNvbnN0IGZhTWFyc0FuZFZlbnVzQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycy1hbmQtdmVudXMtYnVyc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjNcIiwgXCJNNTA0IDBjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzkgMzktMjIuMiAyMi4yQzQ3NS45IDc4LjQgNDM5LjYgNjQgNDAwIDY0Yy04OC40IDAtMTYwIDcxLjYtMTYwIDE2MGMwIDgwLjIgNTkuMSAxNDYuNyAxMzYuMSAxNTguMmMwIC42LS4xIDEuMi0uMSAxLjhsMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuNCAwIC40IDAgLjQgMCAuMyAwIC40IDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMgMCAuMyAwIC4zIDAgLjMtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4yIDAgLjIgMCAuMiAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xIDAgLjEgMCAuMSAwIC4xYzAgMCAwIC4xIDAgLjFzMCAuMSAwIC4xbDAgLjFjMCAwIDAgLjEgMCAuMXMwIC4xIDAgLjFzMCAuMSAwIC4xczAgLjEgMCAuMXMwIC4xIDAgLjFzMCAuMSAwIC4xczAgLjEgMCAuMXMwIC4xIDAgLjFzMCAuMSAwIC4xczAgLjEgMCAuMXMwIC4xIDAgLjFzMCAuMSAwIC4xczAgLjEgMCAuMXMwIC4xIDAgLjFzMCAuMSAwIC4xczAgLjEgMCAuMXMwIC4xIDAgLjFzMCAuMSAwIC4xczAgLjEgMCAuMXMwIC4xIDAgLjFzMCAuMSAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIC4xczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGwyNCAwLTI0IDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwtMjQgMCAyNCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwIDAgMC0uMXMwLS4xIDAtLjFzMC0uMSAwLS4xczAtLjEgMC0uMXMwLS4xIDAtLjFzMC0uMSAwLS4xczAtLjEgMC0uMXMwLS4xIDAtLjFzMC0uMSAwLS4xczAtLjEgMC0uMXMwLS4xIDAtLjFzMC0uMSAwLS4xczAtLjEgMC0uMXMwLS4xIDAtLjFzMC0uMSAwLS4xczAtLjEgMC0uMXMwLS4xIDAtLjFzMC0uMSAwLS4xczAtLjEgMC0uMXMwLS4xIDAtLjFzMC0uMSAwLS4xczAtLjEgMC0uMWwwLS4xYzAgMCAwLS4xIDAtLjFzMC0uMSAwLS4xbDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMSAwLS4xIDAtLjEgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDAtLjIgMC0uMiAwLS4yIDI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0IDAgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS4zIDAtLjMgMC0uMyAwLS40IDAtLjMgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjQgMC0uNCAwLS40IDAtLjRjMC0uNiAwLTEuMi0uMS0xLjhjNzctMTEuNiAxMzYuMS03OCAxMzYuMS0xNTguMmMwLTMxLjQtOS02MC43LTI0LjctODUuNEw1NjAgMTEzLjlsMzkgMzljNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMnMxNC44LTEyLjUgMTQuOC0yMi4ybDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0TDUwNCAwek00MDAgMTI4YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyek0xOTAuOSAxOC4xQzE4OC40IDEyIDE4Mi42IDggMTc2IDhzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzRMNTUuNiA2OC45Yy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNzLTQuNiAxMi4yLTEuNCAxNy45bDM5LjUgNjkuMUwxMC45IDIwNi40Yy01LjQgMy43LTggMTAuMy02LjUgMTYuN3M2LjcgMTEuMiAxMy4xIDEyLjJsNzguNyAxMi4yTDkwLjYgMzI3Yy0uNSA2LjUgMy4xIDEyLjcgOSAxNS41czEyLjkgMS44IDE3LjgtMi42TDE3NiAyODYuMWw1OC42IDUzLjljNC4xIDMuOCA5LjkgNS4xIDE1LjIgMy42QzIyMy42IDMxMC44IDIwOCAyNjkuMiAyMDggMjI0YzAtNjAuOCAyOC4zLTExNSA3Mi40LTE1MC4yTDIyMC4zIDkyLjFsLTI5LjQtNzR6XCJdXG59O1xuY29uc3QgZmFTcXVhcmVDYXJldFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1jYXJldC1yaWdodCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiY2FyZXQtc3F1YXJlLXJpZ2h0XCJdLCBcImYxNTJcIiwgXCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMyMCAyNTZjMCA2LjctMi44IDEzLTcuNyAxNy42bC0xMTIgMTA0Yy03IDYuNS0xNy4yIDguMi0yNS45IDQuNHMtMTQuNC0xMi41LTE0LjQtMjJsMC0yMDhjMC05LjUgNS43LTE4LjIgMTQuNC0yMnMxOC45LTIuMSAyNS45IDQuNGwxMTIgMTA0YzQuOSA0LjUgNy43IDEwLjkgNy43IDE3LjZ6XCJdXG59O1xuY29uc3QgZmFDYXJldFNxdWFyZVJpZ2h0ID0gZmFTcXVhcmVDYXJldFJpZ2h0O1xuY29uc3QgZmFTY2lzc29ycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzY2lzc29ycycsXG4gIGljb246IFs1MTIsIDUxMiwgWzk5ODQsIDk5ODYsIDk5ODgsIFwiY3V0XCJdLCBcImYwYzRcIiwgXCJNMjU2IDE5MmwtMzkuNS0zOS41YzQuOS0xMi42IDcuNS0yNi4yIDcuNS00MC41QzIyNCA1MC4xIDE3My45IDAgMTEyIDBTMCA1MC4xIDAgMTEyczUwLjEgMTEyIDExMiAxMTJjMTQuMyAwIDI3LjktMi43IDQwLjUtNy41TDE5MiAyNTZsLTM5LjUgMzkuNWMtMTIuNi00LjktMjYuMi03LjUtNDAuNS03LjVDNTAuMSAyODggMCAzMzguMSAwIDQwMHM1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJjMC0xNC4zLTIuNy0yNy45LTcuNS00MC41TDQ5OS4yIDc2LjhjNy4xLTcuMSA3LjEtMTguNSAwLTI1LjZjLTI4LjMtMjguMy03NC4xLTI4LjMtMTAyLjQgMEwyNTYgMTkyem0yMi42IDE1MC42TDM5Ni44IDQ2MC44YzI4LjMgMjguMyA3NC4xIDI4LjMgMTAyLjQgMGM3LjEtNy4xIDcuMS0xOC41IDAtMjUuNkwzNDIuNiAyNzguNmwtNjQgNjR6TTY0IDExMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00OCAyNDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbmNvbnN0IGZhQ3V0ID0gZmFTY2lzc29ycztcbmNvbnN0IGZhU3VuUGxhbnRXaWx0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1bi1wbGFudC13aWx0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTdhXCIsIFwiTTE2MCAwYy02LjMgMC0xMiAzLjctMTQuNiA5LjVMMTIwLjYgNjQuOSA2My45IDQzLjJjLTUuOS0yLjMtMTIuNi0uOC0xNyAzLjZzLTUuOSAxMS4xLTMuNiAxN2wyMS43IDU2LjdMOS41IDE0NS40QzMuNyAxNDggMCAxNTMuNyAwIDE2MHMzLjcgMTIgOS41IDE0LjZsNTUuNCAyNC44TDQzLjIgMjU2LjFjLTIuMyA1LjktLjggMTIuNiAzLjYgMTdzMTEuMSA1LjkgMTcgMy42bDU2LjctMjEuNyAyNC44IDU1LjRjMi42IDUuOCA4LjMgOS41IDE0LjYgOS41czEyLTMuNyAxNC42LTkuNWwyNC44LTU1LjQgNTYuNyAyMS43YzUuOSAyLjMgMTIuNiAuOCAxNy0zLjZzNS45LTExLjEgMy42LTE3bC0yMS43LTU2LjcgNTUuNC0yNC44YzUuOC0yLjYgOS41LTguMyA5LjUtMTQuNnMtMy43LTEyLTkuNS0xNC42bC01NS40LTI0LjggMjEuNy01Ni43YzIuMy01LjkgLjgtMTIuNi0zLjYtMTdzLTExLjEtNS45LTE3LTMuNkwxOTkuNCA2NC45IDE3NC42IDkuNUMxNzIgMy43IDE2Ni4zIDAgMTYwIDB6bTAgOTZhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMxMiAxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNTMuNGMtMTQuOCA3LjctMjQgMjMuMS0yNCA0NC42YzAgMTYuOCAxNiA0NCAzNy40IDY3LjJjNS44IDYuMiAxNS41IDYuMiAyMS4yIDBDNjI0IDMxOCA2NDAgMjkwLjcgNjQwIDI3NGMwLTIxLjUtOS4yLTM3LTI0LTQ0LjZsMC01My40YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgMjIuN2MtOS44LTQuMy0yMC42LTYuNy0zMi02LjdjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjEuNGMtMTQuOCA3LjctMjQgMjMuMS0yNCA0NC42YzAgMTYuOCAxNiA0NCAzNy40IDY3LjJjNS44IDYuMiAxNS41IDYuMiAyMS4yIDBDNDAwIDM4MiA0MTYgMzU0LjcgNDE2IDMzOGMwLTIxLjUtOS4yLTM3LTI0LTQ0LjZsMC0yMS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA4IDAgMTY4TDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTA0IDAgMC0xNjggMC04IDAtOTZ6XCJdXG59O1xuY29uc3QgZmFUb2lsZXRzUG9ydGFibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9pbGV0cy1wb3J0YWJsZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU4NFwiLCBcIk0zMiAwTDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJMMCA2NCAwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMHpNMCA5NmwyNCAwIDIwOCAwIDI0IDAgMCAyNCAwIDM2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLThMNDggNDgwbDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNEwwIDEyMCAwIDk2ek0xOTIgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2ek0zNTIgMEw1NDQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyTDMyMCA2NGwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMjAgOTZsMjQgMCAyMDggMCAyNCAwIDAgMjQgMCAzNjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTE2MCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTM2OCAwLTI0ek01MTIgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbmNvbnN0IGZhSG9ja2V5UHVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob2NrZXktcHVjaycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjQ1M1wiLCBcIk0yNTYgMjU2QzExNC42IDI1NiAwIDIxMyAwIDE2MHMxMTQuNi05NiAyNTYtOTZzMjU2IDQzIDI1NiA5NnMtMTE0LjYgOTYtMjU2IDk2em0xOTIuMyAxLjhjMjQuNy05LjMgNDYuOS0yMSA2My43LTM1LjZMNTEyIDM1MmMwIDUzLTExNC42IDk2LTI1NiA5NlMwIDQwNSAwIDM1MkwwIDIyMi4zYzE2LjggMTQuNiAzOSAyNi4zIDYzLjcgMzUuNkMxMTQuNSAyNzYuOSAxODIuNSAyODggMjU2IDI4OHMxNDEuNS0xMS4xIDE5Mi4zLTMwLjJ6XCJdXG59O1xuY29uc3QgZmFUYWJsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjBjZVwiLCBcIk02NCAyNTZsMC05NiAxNjAgMCAwIDk2TDY0IDI1NnptMCA2NGwxNjAgMCAwIDk2TDY0IDQxNmwwLTk2em0yMjQgOTZsMC05NiAxNjAgMCAwIDk2LTE2MCAwek00NDggMjU2bC0xNjAgMCAwLTk2IDE2MCAwIDAgOTZ6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6XCJdXG59O1xuY29uc3QgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MjFcIiwgXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHpNMjQxIDExOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMUwxMjAgMTg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExOC4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNzItNzJ6XCJdXG59O1xuY29uc3QgZmFUYWNob2dyYXBoRGlnaXRhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWNob2dyYXBoLWRpZ2l0YWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImRpZ2l0YWwtdGFjaG9ncmFwaFwiXSwgXCJmNTY2XCIsIFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDUxMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em0zMiA2NGwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgMzY4YzAtOC44IDcuMi0xNiAxNi0xNmwyNTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkw4MCAzODRjLTguOCAwLTE2LTcuMi0xNi0xNnptMzIwIDBjMC04LjggNy4yLTE2IDE2LTE2bDE2MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNjAgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek04MCAyODhhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem00OCAxNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwem04MC0xNmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6bTQ4IDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bTgwLTE2YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG5jb25zdCBmYURpZ2l0YWxUYWNob2dyYXBoID0gZmFUYWNob2dyYXBoRGlnaXRhbDtcbmNvbnN0IGZhVXNlcnNTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2Vycy1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA3M1wiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ0MC42IDMyMGwxNzguMSAwYzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNDNjQwIDIzOS44IDU5Mi4yIDE5MiA1MzMuMyAxOTJsLTQyLjcgMGMtMTUuOSAwLTMxIDMuNS00NC42IDkuN2MxLjMgNy4yIDEuOSAxNC43IDEuOSAyMi4zYzAgMzAuMi0xMC41IDU4LTI4IDc5LjlsLTI1LjItMTkuN0M0MDguMSAyNjcuNyA0MTYgMjQ2LjggNDE2IDIyNGMwLTUzLTQzLTk2LTk2LTk2Yy0zMS4xIDAtNTguNyAxNC44LTc2LjMgMzcuN2wtNDAuNi0zMS44YzEzLTE0LjIgMjAuOS0zMy4xIDIwLjktNTMuOWMwLTQ0LjItMzUuOC04MC04MC04MEMxMTYuMyAwIDkxLjkgMTQuMSA3Ny41IDM1LjVMMzguOCA1LjF6TTEwNi43IDE5MkM0Ny44IDE5MiAwIDIzOS44IDAgMjk4LjdDMCAzMTAuNCA5LjYgMzIwIDIxLjMgMzIwbDIxMy4zIDBjLjIgMCAuNCAwIC43IDBjLTIwLjYtMTguMi0zNS4yLTQyLjgtNDAuOC03MC44TDEyMS44IDE5MmwtMTUuMiAwek0yNjEuMyAzNTJDMTg3LjcgMzUyIDEyOCA0MTEuNyAxMjggNDg1LjNjMCAxNC43IDExLjkgMjYuNyAyNi43IDI2LjdsMzMwLjcgMGMxMC41IDAgMTkuNS02IDIzLjktMTQuOEwzMjQuOSAzNTJsLTYzLjYgMHpNNTEyIDE2MEE4MCA4MCAwIDEgMCA1MTIgMGE4MCA4MCAwIDEgMCAwIDE2MHpcIl1cbn07XG5jb25zdCBmYUNsb3ZlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG92ZXInLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUxMzlcIiwgXCJNMjE2LjYgNDkuOUMyMDUuMSAzOC41IDE4OS41IDMyIDE3My4zIDMyQzEzOS40IDMyIDExMiA1OS40IDExMiA5My4zbDAgNC45YzAgMTIgMy4zIDIzLjcgOS40IDM0bDE4LjggMzEuM2MxLjEgMS44IDEuMiAzLjEgMSA0LjJjLS4yIDEuMi0uOCAyLjUtMiAzLjZzLTIuNCAxLjgtMy42IDJjLTEgLjItMi40IC4xLTQuMi0xbC0zMS4zLTE4LjhjLTEwLjMtNi4yLTIyLTkuNC0zNC05LjRsLTQuOSAwQzI3LjQgMTQ0IDAgMTcxLjQgMCAyMDUuM2MwIDE2LjIgNi41IDMxLjggMTcuOSA0My4zbDEuMiAxLjJjMy40IDMuNCAzLjQgOSAwIDEyLjRsLTEuMiAxLjJDNi41IDI3NC45IDAgMjkwLjUgMCAzMDYuN0MwIDM0MC42IDI3LjQgMzY4IDYxLjMgMzY4bDQuOSAwYzEyIDAgMjMuNy0zLjMgMzQtOS40bDMxLjMtMTguOGMxLjgtMS4xIDMuMS0xLjIgNC4yLTFjMS4yIC4yIDIuNSAuOCAzLjYgMnMxLjggMi40IDIgMy42Yy4yIDEgLjEgMi40LTEgNC4ybC0xOC44IDMxLjNjLTYuMiAxMC4zLTkuNCAyMi05LjQgMzRsMCA0LjljMCAzMy44IDI3LjQgNjEuMyA2MS4zIDYxLjNjMTYuMiAwIDMxLjgtNi41IDQzLjMtMTcuOWwxLjItMS4yYzMuNC0zLjQgOS0zLjQgMTIuNCAwbDEuMiAxLjJjMTEuNSAxMS41IDI3LjEgMTcuOSA0My4zIDE3LjljMzMuOCAwIDYxLjMtMjcuNCA2MS4zLTYxLjNsMC00LjljMC0xMi0zLjMtMjMuNy05LjQtMzRsLTE4LjgtMzEuM2MtMS4xLTEuOC0xLjItMy4xLTEtNC4yYy4yLTEuMiAuOC0yLjUgMi0zLjZzMi40LTEuOCAzLjYtMmMxLS4yIDIuNC0uMSA0LjIgMWwzMS4zIDE4LjhjMTAuMyA2LjIgMjIgOS40IDM0IDkuNGw0LjkgMGMzMy44IDAgNjEuMy0yNy40IDYxLjMtNjEuM2MwLTE2LjItNi41LTMxLjgtMTcuOS00My4zbC0xLjItMS4yYy0zLjQtMy40LTMuNC05IDAtMTIuNGwxLjItMS4yYzExLjUtMTEuNSAxNy45LTI3LjEgMTcuOS00My4zYzAtMzMuOC0yNy40LTYxLjMtNjEuMy02MS4zbC00LjkgMGMtMTIgMC0yMy43IDMuMy0zNCA5LjRsLTMxLjMgMTguOGMtMS44IDEuMS0zLjEgMS4yLTQuMiAxYy0xLjItLjItMi41LS44LTMuNi0ycy0xLjgtMi40LTItMy42Yy0uMi0xLS4xLTIuNCAxLTQuMmwxOC44LTMxLjNjNi4yLTEwLjMgOS40LTIyIDkuNC0zNGwwLTQuOUMzMzYgNTkuNCAzMDguNiAzMiAyNzQuNyAzMmMtMTYuMiAwLTMxLjggNi41LTQzLjMgMTcuOWwtMS4yIDEuMmMtMy40IDMuNC05IDMuNC0xMi40IDBsLTEuMi0xLjJ6XCJdXG59O1xuY29uc3QgZmFSZXBseSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZXBseScsXG4gIGljb246IFs1MTIsIDUxMiwgWzYxNzE0LCBcIm1haWwtcmVwbHlcIl0sIFwiZjNlNVwiLCBcIk0yMDUgMzQuOGMxMS41IDUuMSAxOSAxNi42IDE5IDI5LjJsMCA2NCAxMTIgMGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NmMwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjFjLTIuNSAxLjQtNS4zIDEuOS04LjEgMS45Yy0xMC45IDAtMTkuNy04LjktMTkuNy0xOS43YzAtNy41IDQuMy0xNC40IDkuOC0xOS41YzkuNC04LjggMjIuMi0yNi40IDIyLjItNTYuN2MwLTUzLTQzLTk2LTk2LTk2bC05NiAwIDAgNjRjMCAxMi42LTcuNCAyNC4xLTE5IDI5LjJzLTI1IDMtMzQuNC01LjRsLTE2MC0xNDRDMy45IDIyNS43IDAgMjE3LjEgMCAyMDhzMy45LTE3LjcgMTAuNi0yMy44bDE2MC0xNDRjOS40LTguNSAyMi45LTEwLjYgMzQuNC01LjR6XCJdXG59O1xuY29uc3QgZmFNYWlsUmVwbHkgPSBmYVJlcGx5O1xuY29uc3QgZmFTdGFyQW5kQ3Jlc2NlbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Rhci1hbmQtY3Jlc2NlbnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5NzcwXSwgXCJmNjk5XCIsIFwiTTAgMjU2QzAgMTE0LjYgMTE0LjYgMCAyNTYgMGMzMyAwIDY0LjYgNi4zIDkzLjYgMTcuN2M3LjQgMi45IDExLjUgMTAuNyA5LjggMTguNHMtOC44IDEzLTE2LjcgMTIuNGMtNC44LS4zLTkuNy0uNS0xNC42LS41Yy0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDhzOTMuMSAyMDggMjA4IDIwOGM0LjkgMCA5LjgtLjIgMTQuNi0uNWM3LjktLjUgMTUgNC43IDE2LjcgMTIuNHMtMi40IDE1LjUtOS44IDE4LjRDMzIwLjYgNTA1LjcgMjg5IDUxMiAyNTYgNTEyQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2ek0zNzUuNCAxMzcuNGMzLjUtNy4xIDEzLjctNy4xIDE3LjIgMGwzMS41IDYzLjhjMS40IDIuOCA0LjEgNC44IDcuMiA1LjNsNzAuNCAxMC4yYzcuOSAxLjEgMTEgMTAuOCA1LjMgMTYuNGwtNTAuOSA0OS42Yy0yLjMgMi4yLTMuMyA1LjQtMi44IDguNWwxMiA3MC4xYzEuMyA3LjgtNi45IDEzLjgtMTMuOSAxMC4xbC02My0zMy4xYy0yLjgtMS41LTYuMS0xLjUtOC45IDBsLTYzIDMzLjFjLTcgMy43LTE1LjMtMi4zLTEzLjktMTAuMWwxMi03MC4xYy41LTMuMS0uNS02LjMtMi44LTguNUwyNjEgMjMzLjFjLTUuNy01LjYtMi42LTE1LjIgNS4zLTE2LjRsNzAuNC0xMC4yYzMuMS0uNSA1LjgtMi40IDcuMi01LjNsMzEuNS02My44elwiXVxufTtcbmNvbnN0IGZhSG91c2VGaXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWZpcmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGNcIiwgXCJNMjg4IDM1MC4xbDAgMS45LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjQgMCAyNGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMjQgMC0zMS45IDBjLTEuNSAwLTMtLjEtNC41LS4yYy0xLjIgLjEtMi40IC4yLTMuNiAuMmwtMTYgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0xMTJjMC0uOSAwLTEuOSAuMS0yLjhsMC02OS43LTMyIDBjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQ0Ny4zIDEyOC4xYy0xMi4zLTEtMjUgMy0zNC44IDExLjdjLTM1LjQgMzEuNi02NS42IDY3LjctODcuMyAxMDIuOEMzMDQuMyAyNzYuNSAyODggMzE0LjkgMjg4IDM1MC4xek00ODAgNTEyYy04OC40IDAtMTYwLTcxLjYtMTYwLTE2MGMwLTc2LjcgNjIuNS0xNDQuNyAxMDcuMi0xNzkuNGM1LTMuOSAxMC45LTUuOCAxNi44LTUuOGM3LjktLjEgMTYgMy4xIDIyIDkuMmw0NiA0NiAxMS4zLTExLjNjMTEuNy0xMS43IDMwLjYtMTIuNyA0Mi4zLTFDNjI0LjUgMjY4IDY0MCAzMjAuMiA2NDAgMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwem02NC0xMTEuOGMwLTM2LjUtMzctNzMtNTQuOC04OC40Yy01LjQtNC43LTEzLjEtNC43LTE4LjUgMEM0NTMgMzI3LjEgNDE2IDM2My42IDQxNiA0MDAuMmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbmNvbnN0IGZhU3F1YXJlTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLW1pbnVzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjE3NjcsIFwibWludXMtc3F1YXJlXCJdLCBcImYxNDZcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptODggMjAwbDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpcIl1cbn07XG5jb25zdCBmYU1pbnVzU3F1YXJlID0gZmFTcXVhcmVNaW51cztcbmNvbnN0IGZhSGVsaWNvcHRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWxpY29wdGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjQxXSwgXCJmNTMzXCIsIFwiTTEyOCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkw1NDQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzODQgNjRsMCA2NCAzMiAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwLTY0IDBjLTIwLjEgMC0zOS4xLTkuNS01MS4yLTI1LjZsLTcxLjQtOTUuMmMtMy41LTQuNy04LjMtOC4zLTEzLjctMTAuNUw0Ny4yIDE5OC4xYy05LjUtMy44LTE2LjctMTItMTkuMi0yMkw1IDgzLjlDMi40IDczLjggMTAuMSA2NCAyMC41IDY0TDQ4IDY0YzEwLjEgMCAxOS42IDQuNyAyNS42IDEyLjhMMTEyIDEyOGwyMDggMCAwLTY0TDE2MCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTM4NCAzMjBsMTI4IDAgMC0zMmMwLTUzLTQzLTk2LTk2LTk2bC0zMiAwIDAgMTI4ek02MzAuNiA0MjUuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMy45IDMuOWMtMjQgMjQtNTYuNiAzNy41LTkwLjUgMzcuNUwyNTYgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDI4MC4yIDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdsMy45LTMuOWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHpcIl1cbn07XG5jb25zdCBmYUNvbXBhc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tcGFzcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTUxN10sIFwiZjE0ZVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptNTAuNy0xODYuOUwxNjIuNCAzODAuNmMtMTkuNCA3LjUtMzguNS0xMS42LTMxLTMxbDU1LjUtMTQ0LjNjMy4zLTguNSA5LjktMTUuMSAxOC40LTE4LjRsMTQ0LjMtNTUuNWMxOS40LTcuNSAzOC41IDExLjYgMzEgMzFMMzI1LjEgMzA2LjdjLTMuMiA4LjUtOS45IDE1LjEtMTguNCAxOC40ek0yODggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xuY29uc3QgZmFTcXVhcmVDYXJldERvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLWNhcmV0LWRvd24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImNhcmV0LXNxdWFyZS1kb3duXCJdLCBcImYxNTBcIiwgXCJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45czEyLjUtMTQuNCAyMi0xNC40bDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6XCJdXG59O1xuY29uc3QgZmFDYXJldFNxdWFyZURvd24gPSBmYVNxdWFyZUNhcmV0RG93bjtcbmNvbnN0IGZhRmlsZUNpcmNsZVF1ZXN0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY2lyY2xlLXF1ZXN0aW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGVmXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0w2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTM4NCA2NGwtMTI4IDBMMjU2IDAgMzg0IDEyOHptNDggOTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDI0MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTM2OCAzMjEuNmwwIDYuNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNi40YzAtNS4zIDQuMy05LjYgOS42LTkuNmw0MC41IDBjNy43IDAgMTMuOSA2LjIgMTMuOSAxMy45YzAgNS4yLTIuOSA5LjktNy40IDEyLjNsLTMyIDE2LjhjLTUuMyAyLjgtOC42IDguMi04LjYgMTQuMmwwIDE0LjhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTUuMSAyMy41LTEyLjNjMTUuMS03LjkgMjQuNS0yMy42IDI0LjUtNDAuNmMwLTI1LjQtMjAuNi00NS45LTQ1LjktNDUuOWwtNDAuNSAwYy0yMyAwLTQxLjYgMTguNi00MS42IDQxLjZ6XCJdXG59O1xuY29uc3QgZmFMYXB0b3BDb2RlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xhcHRvcC1jb2RlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNWZjXCIsIFwiTTY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2LTY0IDAgMC0yNTZMMTI4IDk2bDAgMjU2LTY0IDBMNjQgOTZ6TTAgNDAzLjJDMCAzOTIuNiA4LjYgMzg0IDE5LjIgMzg0bDYwMS42IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmMwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEw3Ni44IDQ4MEMzNC40IDQ4MCAwIDQ0NS42IDAgNDAzLjJ6TTI4MSAyMDlsLTMxIDMxIDMxIDMxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ4LTQ4Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw0OC00OGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6TTM5MyAxNzVsNDggNDhjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTQ4IDQ4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDB6XCJdXG59O1xuY29uc3QgZmFTd2F0Y2hib29rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N3YXRjaGJvb2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YzNcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzODRjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZMMCAzMnpNMjIzLjYgNDI1LjljLjMtMy4zIC40LTYuNiAuNC05LjlsMC0yNjIgNzUuNC03NS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDkwLjUgOTAuNWMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0wyMjMuNiA0MjUuOXpNMTgyLjggNTEybDE5Mi0xOTJMNDgwIDMyMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjk3LjIgMHpNMTI4IDY0TDY0IDY0bDAgNjQgNjQgMCAwLTY0ek02NCAxOTJsMCA2NCA2NCAwIDAtNjQtNjQgMHpNOTYgNDQwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpcIl1cbn07XG5jb25zdCBmYVByZXNjcmlwdGlvbkJvdHRsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwcmVzY3JpcHRpb24tYm90dGxlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNDg1XCIsIFwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NEwwIDMyem0zMiA5NmwzMjAgMCAwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzIgMTEyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMMzIgMzg0bDAtNjQgMTEyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMMzIgMjg4bDAtNjQgMTEyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMMzIgMTkybDAtNjR6XCJdXG59O1xuY29uc3QgZmFCYXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhcnMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcIm5hdmljb25cIl0sIFwiZjBjOVwiLCBcIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyelwiXVxufTtcbmNvbnN0IGZhTmF2aWNvbiA9IGZhQmFycztcbmNvbnN0IGZhUGVvcGxlR3JvdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVvcGxlLWdyb3VwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTMzXCIsIFwiTTcyIDg4YTU2IDU2IDAgMSAxIDExMiAwQTU2IDU2IDAgMSAxIDcyIDg4ek02NCAyNDUuN0M1NCAyNTYuOSA0OCAyNzEuOCA0OCAyODhzNiAzMS4xIDE2IDQyLjNsMC04NC43em0xNDQuNC00OS4zQzE3OC43IDIyMi43IDE2MCAyNjEuMiAxNjAgMzA0YzAgMzQuMyAxMiA2NS44IDMyIDkwLjVsMCAyMS41YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI2LjhDMjYuMiAzNzEuMiAwIDMzMi43IDAgMjg4YzAtNjEuOSA1MC4xLTExMiAxMTItMTEybDMyIDBjMjQgMCA0Ni4yIDcuNSA2NC40IDIwLjN6TTQ0OCA0MTZsMC0yMS41YzIwLTI0LjcgMzItNTYuMiAzMi05MC41YzAtNDIuOC0xOC43LTgxLjMtNDguNC0xMDcuN0M0NDkuOCAxODMuNSA0NzIgMTc2IDQ5NiAxNzZsMzIgMGM2MS45IDAgMTEyIDUwLjEgMTEyIDExMmMwIDQ0LjctMjYuMiA4My4yLTY0IDEwMS4ybDAgMjYuOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTgtMzI4YTU2IDU2IDAgMSAxIDExMiAwQTU2IDU2IDAgMSAxIDQ1NiA4OHpNNTc2IDI0NS43bDAgODQuN2MxMC0xMS4zIDE2LTI2LjEgMTYtNDIuM3MtNi0zMS4xLTE2LTQyLjN6TTMyMCAzMmE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMjQwIDMwNGMwIDE2LjIgNiAzMSAxNiA0Mi4zbDAtODQuN2MtMTAgMTEuMy0xNiAyNi4xLTE2IDQyLjN6bTE0NC00Mi4zbDAgODQuN2MxMC0xMS4zIDE2LTI2LjEgMTYtNDIuM3MtNi0zMS4xLTE2LTQyLjN6TTQ0OCAzMDRjMCA0NC43LTI2LjIgODMuMi02NCAxMDEuMmwwIDQyLjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDIuOGMtMzcuOC0xOC02NC01Ni41LTY0LTEwMS4yYzAtNjEuOSA1MC4xLTExMiAxMTItMTEybDMyIDBjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJ6XCJdXG59O1xuY29uc3QgZmFIb3VyZ2xhc3NFbmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91cmdsYXNzLWVuZCcsXG4gIGljb246IFszODQsIDUxMiwgWzg5ODcsIFwiaG91cmdsYXNzLTNcIl0sIFwiZjI1M1wiLCBcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMTFjMCA0Mi40IDE2LjkgODMuMSA0Ni45IDExMy4xTDE0Ni43IDI1NiA3OC45IDMyMy45QzQ4LjkgMzUzLjkgMzIgMzk0LjYgMzIgNDM3bDAgMTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAyNTYgMCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xTDIzNy4zIDI1Nmw2Ny45LTY3LjljMzAtMzAgNDYuOS03MC43IDQ2LjktMTEzLjFsMC0xMWMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMjAgMCA2NCAwIDMyIDB6TTk2IDc1bDAtMTEgMTkyIDAgMCAxMWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUwxOTIgMjEwLjdsLTY3LjktNjcuOUMxMDYuMSAxMjQuOSA5NiAxMDAuNCA5NiA3NXpcIl1cbn07XG5jb25zdCBmYUhvdXJnbGFzczMgPSBmYUhvdXJnbGFzc0VuZDtcbmNvbnN0IGZhSGVhcnRDcmFjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jcmFjaycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODE0OCwgXCJoZWFydC1icm9rZW5cIl0sIFwiZjdhOVwiLCBcIk0xMTkuNCA0NC4xYzIzLjMtMy45IDQ2LjgtMS45IDY4LjYgNS4zbDQ5LjggNzcuNS03NS40IDc1LjRjLTEuNSAxLjUtMi40IDMuNi0yLjMgNS44czEgNC4yIDIuNiA1LjdsMTEyIDEwNGMyLjkgMi43IDcuNCAyLjkgMTAuNSAuM3MzLjgtNyAxLjctMTAuNGwtNjAuNC05OC4xIDkwLjctNzUuNmMyLjYtMi4xIDMuNS01LjcgMi40LTguOEwyOTYuOCA2MS44YzI4LjUtMTYuNyA2Mi40LTIzLjIgOTUuNy0xNy42QzQ2MS41IDU1LjYgNTEyIDExNS4yIDUxMiAxODUuMWwwIDUuOGMwIDQxLjUtMTcuMiA4MS4yLTQ3LjYgMTA5LjVMMjgzLjcgNDY5LjFjLTcuNSA3LTE3LjQgMTAuOS0yNy43IDEwLjlzLTIwLjItMy45LTI3LjctMTAuOUw0Ny42IDMwMC40QzE3LjIgMjcyLjEgMCAyMzIuNCAwIDE5MC45bDAtNS44YzAtNjkuOSA1MC41LTEyOS41IDExOS40LTE0MXpcIl1cbn07XG5jb25zdCBmYUhlYXJ0QnJva2VuID0gZmFIZWFydENyYWNrO1xuY29uc3QgZmFTcXVhcmVVcFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS11cC1yaWdodCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg1OTksIFwiZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0XCJdLCBcImYzNjBcIiwgXCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMTYwIDE2MGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDQwIDQwLTcxIDcxQzExNCAzMDIgMTEyIDMwNi45IDExMiAzMTJzMiAxMCA1LjcgMTMuN2wzNi43IDM2LjdjMy42IDMuNiA4LjUgNS43IDEzLjcgNS43czEwLTIgMTMuNy01LjdsNzEtNzEgNDAgNDBjNC42IDQuNiAxMS41IDUuOSAxNy40IDMuNXM5LjktOC4zIDkuOS0xNC44bDAtMTQ0YzAtOC44LTcuMi0xNi0xNi0xNmwtMTQ0IDB6XCJdXG59O1xuY29uc3QgZmFFeHRlcm5hbExpbmtTcXVhcmVBbHQgPSBmYVNxdWFyZVVwUmlnaHQ7XG5jb25zdCBmYUZhY2VLaXNzQmVhbSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWtpc3MtYmVhbScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUzNywgXCJraXNzLWJlYW1cIl0sIFwiZjU5N1wiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptNDguNy0xOTguM2M0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRjLTIuNyAxLjUtNS43IDMtOC43IDQuM2MzLjEgMS4zIDYgMi43IDguNyA0LjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3MtMy4xIDEzLjItNy4zIDE4LjNjLTQuMyA1LjItMTAuMSA5LjctMTYuNyAxMy40QzI3NC43IDQ0My4xIDI1Ny40IDQ0OCAyNDAgNDQ4Yy0zLjYgMC02LjgtMi41LTcuNy02cy42LTcuMiAzLjgtOWMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBjMCAwIDAgMCAwIDBsLjItLjFjLjItLjEgLjUtLjMgLjktLjVjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFjLS40LS4yLS43LS40LS45LS41bC0uMi0uMWMwIDAgMCAwIDAgMGMwIDAgMCAwIDAgMHMwIDAgMCAwYy0yLjUtMS40LTQuMS00LjEtNC4xLTdzMS42LTUuNiA0LjEtN2MwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGMwIDAgMCAwIDAgMGwuMi0uMSAuMy0uMiAuNi0uNGMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWwtLjQtLjMtLjUtLjMtLjItLjFjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMGMtMy4yLTEuOC00LjctNS41LTMuOC05czQuMS02IDcuNy02YzE3LjQgMCAzNC43IDQuOSA0Ny45IDEyLjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjR6bS04Ny4xLTg0LjlzMCAwIDAgMGMwIDAgMCAwIDAgMGwtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjJjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhjMCAwIDAgMCAwIDBzMCAwIDAgMHptMTYwIDBjMCAwIDAgMCAwIDBsLS4yLS4yYy0uMi0uMi0uNC0uNS0uNy0uOWMtLjYtLjgtMS42LTItMi44LTMuNGMtMi41LTIuOC02LTYuNi0xMC4yLTEwLjNjLTguOC03LjgtMTguOC0xNC0yNy43LTE0cy0xOC45IDYuMi0yNy43IDE0Yy00LjIgMy43LTcuNyA3LjUtMTAuMiAxMC4zYy0xLjIgMS40LTIuMiAyLjYtMi44IDMuNGMtLjMgLjQtLjYgLjctLjcgLjlsLS4yIC4yYzAgMCAwIDAgMCAwYzAgMCAwIDAgMCAwczAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44YzAgMCAwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHpcIl1cbn07XG5jb25zdCBmYUtpc3NCZWFtID0gZmFGYWNlS2lzc0JlYW07XG5jb25zdCBmYUZpbG0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsbScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzkwMl0sIFwiZjAwOFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNNDggMzY4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTM2OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek00OCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzY4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTQ4IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2ek00MTYgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMTYwIDEyOGwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMTkyIDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwelwiXVxufTtcbmNvbnN0IGZhUnVsZXJIb3Jpem9udGFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3J1bGVyLWhvcml6b250YWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1NDdcIiwgXCJNMCAzMzZjMCAyNi41IDIxLjUgNDggNDggNDhsNTQ0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNjBjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgMzM2elwiXVxufTtcbmNvbnN0IGZhUGVvcGxlUm9iYmVyeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW9wbGUtcm9iYmVyeScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUzNlwiLCBcIk00ODguMiA1OS4xQzQ3OC4xIDk5LjYgNDQxLjcgMTI4IDQwMCAxMjhzLTc4LjEtMjguNC04OC4yLTY4LjlMMzAzIDI0LjJDMjk4LjggNy4xIDI4MS40LTMuMyAyNjQuMiAxUzIzNi43IDIyLjYgMjQxIDM5LjhsOC43IDM0LjljMTEgNDQgNDAuMiA3OS42IDc4LjMgOTkuNkwzMjggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA1LjdjMzguMS0yMCA2Ny4zLTU1LjYgNzguMy05OS42TDU1OSAzOS44YzQuMy0xNy4xLTYuMS0zNC41LTIzLjMtMzguOFM1MDEuMiA3LjEgNDk3IDI0LjJsLTguNyAzNC45ek00MDAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek04MCA5NkE0OCA0OCAwIDEgMCA4MCAwYTQ4IDQ4IDAgMSAwIDAgOTZ6bS04IDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2IDAgLjZMOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMjcuMyAxMyAyMC41YzUuOSA5LjIgMTYuMSAxNC45IDI3IDE0LjlsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzAuNCAwLTM3LjQtNTguOUMxNTcuNiAxNDIgMTMyLjEgMTI4IDEwNC43IDEyOEw3MiAxMjh6XCJdXG59O1xuY29uc3QgZmFMaWdodGJ1bGIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlnaHRidWxiJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MTYxXSwgXCJmMGViXCIsIFwiTTI3MiAzODRjOS42LTMxLjkgMjkuNS01OS4xIDQ5LjItODYuMmMwIDAgMCAwIDAgMGM1LjItNy4xIDEwLjQtMTQuMiAxNS40LTIxLjRjMTkuOC0yOC41IDMxLjQtNjMgMzEuNC0xMDAuM0MzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgMzcuMyAxMS42IDcxLjkgMzEuNCAxMDAuM2M1IDcuMiAxMC4yIDE0LjMgMTUuNCAyMS40YzAgMCAwIDAgMCAwYzE5LjggMjcuMSAzOS43IDU0LjQgNDkuMiA4Ni4ybDE2MCAwek0xOTIgNTEyYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtMTYtMTYwIDAgMCAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHpNMTEyIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmMtNDQuMiAwLTgwIDM1LjgtODAgODB6XCJdXG59O1xuY29uc3QgZmFDYXJldExlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyZXQtbGVmdCcsXG4gIGljb246IFsyNTYsIDUxMiwgW10sIFwiZjBkOVwiLCBcIk05LjQgMjc4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDEyOC0xMjhjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlzMTkuOCAxNi42IDE5LjggMjkuNmwwIDI1NmMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtMTI4LTEyOHpcIl1cbn07XG5jb25zdCBmYUNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZXhjbGFtYXRpb24tY2lyY2xlXCJdLCBcImYwNmFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMzg0YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yMjQgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xuY29uc3QgZmFFeGNsYW1hdGlvbkNpcmNsZSA9IGZhQ2lyY2xlRXhjbGFtYXRpb247XG5jb25zdCBmYVNjaG9vbENpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjaG9vbC1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NmRcIiwgXCJNMzM3LjggNS40QzMyNy0xLjggMzEzLTEuOCAzMDIuMiA1LjRMMTY2LjMgOTYgNDggOTZDMjEuNSA5NiAwIDExNy41IDAgMTQ0TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI3MiAwczAgMCAwIDBsLTY0IDAgMC05NmMwLTM1LjMgMjguNy02NCA2NC02NGwuMyAwIC41IDBjMy40LTM3LjcgMTguNy03Mi4xIDQyLjItOTkuMUMzNTAuMiAyNjAgMzM1LjYgMjY0IDMyMCAyNjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4czM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDE4LjMtNS42IDM1LjMtMTUuMSA0OS40YzI5LTIxIDY0LjYtMzMuNCAxMDMuMS0zMy40YzU5LjUgMCAxMTIuMSAyOS42IDE0NCA3NC44TDY0MCAxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDczLjcgOTYgMzM3LjggNS40ek05NiAxOTJsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA2NGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnptMCAxMjhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA2NGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMzIwIDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDAgMC0xNmMwLTguOC03LjItMTYtMTYtMTZ6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDUxOC42IDM2OHpcIl1cbn07XG5jb25zdCBmYUFycm93UmlnaHRGcm9tQnJhY2tldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yaWdodC1mcm9tLWJyYWNrZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNpZ24tb3V0XCJdLCBcImYwOGJcIiwgXCJNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAxOTIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6TTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpcIl1cbn07XG5jb25zdCBmYVNpZ25PdXQgPSBmYUFycm93UmlnaHRGcm9tQnJhY2tldDtcbmNvbnN0IGZhQ2lyY2xlQ2hldnJvbkRvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWNoZXZyb24tZG93bicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY2hldnJvbi1jaXJjbGUtZG93blwiXSwgXCJmMTNhXCIsIFwiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMHpNMTM1IDI0MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDg3IDg3IDg3LTg3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUwyNzMgMzQ1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxMzUgMjQxelwiXVxufTtcbmNvbnN0IGZhQ2hldnJvbkNpcmNsZURvd24gPSBmYUNpcmNsZUNoZXZyb25Eb3duO1xuY29uc3QgZmFVbmxvY2tLZXlob2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VubG9jay1rZXlob2xlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ1bmxvY2stYWx0XCJdLCBcImYxM2VcIiwgXCJNMjI0IDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDQ4IDI0MCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyNTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYgMCAwLTQ4QzgwIDY0LjUgMTQ0LjUgMCAyMjQgMGM1Ny41IDAgMTA3IDMzLjcgMTMwLjEgODIuM2M3LjYgMTYgLjggMzUuMS0xNS4yIDQyLjZzLTM1LjEgLjgtNDIuNi0xNS4yQzI4My40IDgyLjYgMjU1LjkgNjQgMjI0IDY0em0zMiAzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMHpcIl1cbn07XG5jb25zdCBmYVVubG9ja0FsdCA9IGZhVW5sb2NrS2V5aG9sZTtcbmNvbnN0IGZhQ2xvdWRTaG93ZXJzSGVhdnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtc2hvd2Vycy1oZWF2eScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjc0MFwiLCBcIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTZjMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjJDNjQuNyAxMjYuMSA2NCAxMTkuMSA2NCAxMTJDNjQgNTAuMSAxMTQuMSAwIDE3NiAwYzQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MGMxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgNS41LS42IDEwLjgtMS42IDE2Yy41IDAgMS4xIDAgMS42IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZMOTYgMzIwek04MS41IDM1My45YzEyLjIgNS4yIDE3LjggMTkuMyAxMi42IDMxLjVsLTQ4IDExMmMtNS4yIDEyLjItMTkuMyAxNy44LTMxLjUgMTIuNlMtMy4zIDQ5MC43IDEuOSA0NzguNWw0OC0xMTJjNS4yLTEyLjIgMTkuMy0xNy44IDMxLjUtMTIuNnptMTIwIDBjMTIuMiA1LjIgMTcuOCAxOS4zIDEyLjYgMzEuNWwtNDggMTEyYy01LjIgMTIuMi0xOS4zIDE3LjgtMzEuNSAxMi42cy0xNy44LTE5LjMtMTIuNi0zMS41bDQ4LTExMmM1LjItMTIuMiAxOS4zLTE3LjggMzEuNS0xMi42em0yNDQuNiAzMS41bC00OCAxMTJjLTUuMiAxMi4yLTE5LjMgMTcuOC0zMS41IDEyLjZzLTE3LjgtMTkuMy0xMi42LTMxLjVsNDgtMTEyYzUuMi0xMi4yIDE5LjMtMTcuOCAzMS41LTEyLjZzMTcuOCAxOS4zIDEyLjYgMzEuNXpNMzEzLjUgMzUzLjljMTIuMiA1LjIgMTcuOCAxOS4zIDEyLjYgMzEuNWwtNDggMTEyYy01LjIgMTIuMi0xOS4zIDE3LjgtMzEuNSAxMi42cy0xNy44LTE5LjMtMTIuNi0zMS41bDQ4LTExMmM1LjItMTIuMiAxOS4zLTE3LjggMzEuNS0xMi42elwiXVxufTtcbmNvbnN0IGZhSGVhZHBob25lc1NpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkcGhvbmVzLXNpbXBsZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaGVhZHBob25lcy1hbHRcIl0sIFwiZjU4ZlwiLCBcIk0yNTYgODBDMTQxLjEgODAgNDggMTczLjEgNDggMjg4bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0TDAgMjg4QzAgMTQ2LjYgMTE0LjYgMzIgMjU2IDMyczI1NiAxMTQuNiAyNTYgMjU2bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA0YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOHpNODAgMzUyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjR6bTI4OC02NGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xNiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNiAwelwiXVxufTtcbmNvbnN0IGZhSGVhZHBob25lc0FsdCA9IGZhSGVhZHBob25lc1NpbXBsZTtcbmNvbnN0IGZhU2l0ZW1hcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaXRlbWFwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMGU4XCIsIFwiTTIwOCA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGw2NCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTggMCAwIDQwIDE1MiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgMzIgOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTY0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjRjMC0yNi41IDIxLjUtNDggNDgtNDhsOCAwIDAtMzJjMC00LjQtMy42LTgtOC04bC0xNTIgMCAwIDQwIDggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC02NCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTY0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDggMCAwLTQwLTE1MiAwYy00LjQgMC04IDMuNi04IDhsMCAzMiA4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNjQgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC02NGMwLTI2LjUgMjEuNS00OCA0OC00OGw4IDAgMC0zMmMwLTMwLjkgMjUuMS01NiA1Ni01NmwxNTIgMCAwLTQwLTggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC02NHpcIl1cbn07XG5jb25zdCBmYUNpcmNsZURvbGxhclRvU2xvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtZG9sbGFyLXRvLXNsb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImRvbmF0ZVwiXSwgXCJmNGI5XCIsIFwiTTMyNi43IDQwMy43Yy0yMi4xIDgtNDUuOSAxMi4zLTcwLjcgMTIuM3MtNDguNy00LjQtNzAuNy0xMi4zbC0uOC0uM2MtMzAtMTEtNTYuOC0yOC43LTc4LjYtNTEuNEM3MCAzMTQuNiA0OCAyNjMuOSA0OCAyMDhDNDggOTMuMSAxNDEuMSAwIDI1NiAwUzQ2NCA5My4xIDQ2NCAyMDhjMCA1NS45LTIyIDEwNi42LTU3LjkgMTQ0Yy0xIDEtMiAyLjEtMyAzLjFjLTIxLjQgMjEuNC00Ny40IDM4LjEtNzYuMyA0OC42ek0yNTYgOTEuOWMtMTEuMSAwLTIwLjEgOS0yMC4xIDIwLjFsMCA2Yy01LjYgMS4yLTEwLjkgMi45LTE1LjkgNS4xYy0xNSA2LjgtMjcuOSAxOS40LTMxLjEgMzcuN2MtMS44IDEwLjItLjggMjAgMy40IDI5YzQuMiA4LjggMTAuNyAxNSAxNy4zIDE5LjVjMTEuNiA3LjkgMjYuOSAxMi41IDM4LjYgMTZsMi4yIC43YzEzLjkgNC4yIDIzLjQgNy40IDI5LjMgMTEuN2MyLjUgMS44IDMuNCAzLjIgMy43IDRjLjMgLjggLjkgMi42IC4yIDYuN2MtLjYgMy41LTIuNSA2LjQtOCA4LjhjLTYuMSAyLjYtMTYgMy45LTI4LjggMS45Yy02LTEtMTYuNy00LjYtMjYuMi03LjljMCAwIDAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwYy0yLjItLjctNC4zLTEuNS02LjQtMi4xYy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjdzMi4yIDIxLjggMTIuNyAyNS4zYzEuMiAuNCAyLjcgLjkgNC40IDEuNWM3LjkgMi43IDIwLjMgNi45IDI5LjggOS4xbDAgNi40YzAgMTEuMSA5IDIwLjEgMjAuMSAyMC4xczIwLjEtOSAyMC4xLTIwLjFsMC01LjVjNS4zLTEgMTAuNS0yLjUgMTUuNC00LjZjMTUuNy02LjcgMjguNC0xOS43IDMxLjYtMzguN2MxLjgtMTAuNCAxLTIwLjMtMy0yOS40Yy0zLjktOS0xMC4yLTE1LjYtMTYuOS0yMC41Yy0xMi4yLTguOC0yOC4zLTEzLjctNDAuNC0xNy40bC0uOC0uMmMtMTQuMi00LjMtMjMuOC03LjMtMjkuOS0xMS40Yy0yLjYtMS44LTMuNC0zLTMuNi0zLjVjLS4yLS4zLS43LTEuNi0uMS01Yy4zLTEuOSAxLjktNS4yIDguMi04LjFjNi40LTIuOSAxNi40LTQuNSAyOC42LTIuNmM0LjMgLjcgMTcuOSAzLjMgMjEuNyA0LjNjMTAuNyAyLjggMjEuNi0zLjUgMjQuNS0xNC4ycy0zLjUtMjEuNi0xNC4yLTI0LjVjLTQuNC0xLjItMTQuNC0zLjItMjEtNC40bDAtNi4zYzAtMTEuMS05LTIwLjEtMjAuMS0yMC4xek00OCAzNTJsMTYgMGMxOS41IDI1LjkgNDQgNDcuNyA3Mi4yIDY0TDY0IDQxNmwwIDMyIDE5MiAwIDE5MiAwIDAtMzItNzIuMiAwYzI4LjItMTYuMyA1Mi44LTM4LjEgNzIuMi02NGwxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTY0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbmNvbnN0IGZhRG9uYXRlID0gZmFDaXJjbGVEb2xsYXJUb1Nsb3Q7XG5jb25zdCBmYU1lbW9yeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtZW1vcnknLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1MzhcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA3LjRjMCA2LjggNC40IDEyLjYgMTAuMSAxNi4zQzIzLjMgMTYwLjMgMzIgMTc1LjEgMzIgMTkycy04LjcgMzEuNy0yMS45IDQwLjNDNC40IDIzNiAwIDI0MS44IDAgMjQ4LjZMMCAzMjBsNTc2IDAgMC03MS40YzAtNi44LTQuNC0xMi42LTEwLjEtMTYuM0M1NTIuNyAyMjMuNyA1NDQgMjA4LjkgNTQ0IDE5MnM4LjctMzEuNyAyMS45LTQwLjNjNS43LTMuNyAxMC4xLTkuNSAxMC4xLTE2LjNsMC03LjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTU3NiAzNTJMMCAzNTJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwIDAtMzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDMyIDk2IDAgMC0zMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMzIgOTYgMCAwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAzMiA5NiAwIDAtMzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDMyIDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NHpNMTkyIDE2MGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbmNvbnN0IGZhUm9hZFNwaWtlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb2FkLXNwaWtlcycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2OFwiLCBcIk02NCAxMTYuOGMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUwxOTIgMjU2bDAtMTM5LjJjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlMMzIwIDI1NmwwLTEzOS4yYzAtMTUuOCAyMC41LTIyIDI5LjMtOC45TDQ0OCAyNTZsMC0xMzkuMmMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUw2MDYuOCAzMDIuMmMxNC4yIDIxLjMtMS4xIDQ5LjctMjYuNiA0OS43TDUxMiAzNTJsLTY0IDAtNjQgMC02NCAwLTY0IDAtNjQgMEw2NCAzNTJsMC0yMzUuMnpNMzIgMzg0bDU3NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYUZpcmVCdXJuZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlyZS1idXJuZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZjFcIiwgXCJNMzQ1LjcgNDguM0wzNTggMzQuNWM1LjQtNi4xIDEzLjMtOC44IDIwLjktOC45YzcuMiAwIDE0LjMgMi42IDE5LjkgNy44YzE5LjcgMTguMyAzOS44IDQzLjIgNTUgNzAuNkM0NjkgMTMxLjIgNDgwIDE2Mi4yIDQ4MCAxOTIuMkM0ODAgMjgwLjggNDA4LjcgMzUyIDMyMCAzNTJjLTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjhjMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNWMyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjJDMjczLjQgMi4zIDI4MC43LS4yIDI4OCAwYzE0LjEgLjMgMjMuOCAxMS40IDMyLjcgMjEuNmMwIDAgMCAwIDAgMGMyIDIuMyA0IDQuNiA2IDYuN2wxOSAxOS45ek0zODQgMjQwLjJjMC0zNi41LTM3LTczLTU0LjgtODguNGMtNS40LTQuNy0xMy4xLTQuNy0xOC41IDBDMjkzIDE2Ny4xIDI1NiAyMDMuNiAyNTYgMjQwLjJjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMzIgMjg4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA2NCA0NDggMCAwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwwLTk2ek0zMjAgNDgwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTYwLTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTE5MiA0ODBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbmNvbnN0IGZhRmxhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbGFnJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTg4LCA2MTcyNV0sIFwiZjAyNFwiLCBcIk02NCAzMkM2NCAxNC4zIDQ5LjcgMCAzMiAwUzAgMTQuMyAwIDMyTDAgNjQgMCAzNjggMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCA2NC4zLTE2LjFjNDEuMS0xMC4zIDg0LjYtNS41IDEyMi41IDEzLjRjNDQuMiAyMi4xIDk1LjUgMjQuOCAxNDEuNyA3LjRsMzQuNy0xM2MxMi41LTQuNyAyMC44LTE2LjYgMjAuOC0zMGwwLTI0Ny43YzAtMjMtMjQuMi0zOC00NC44LTI3LjdsLTkuNiA0LjhjLTQ2LjMgMjMuMi0xMDAuOCAyMy4yLTE0Ny4xIDBjLTM1LjEtMTcuNi03NS40LTIyLTExMy41LTEyLjVMNjQgNDhsMC0xNnpcIl1cbn07XG5jb25zdCBmYUhhbnVraWFoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbnVraWFoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MzM0XSwgXCJmNmU2XCIsIFwiTTMxNC4yIDMuM0MzMDkuMSAxMi4xIDI5NiAzNi42IDI5NiA1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43QzMyNC42IDEuMiAzMjIuNCAwIDMyMCAwcy00LjYgMS4yLTUuOCAzLjN6bS0yODggNDhDMjEuMSA2MC4xIDggODQuNiA4IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43QzM2LjYgNDkuMiAzNC40IDQ4IDMyIDQ4cy00LjYgMS4yLTUuOCAzLjN6TTg4IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzEwMS4xIDYwLjEgODggODQuNiA4OCAxMDR6bTgyLjItNTIuN0MxNjUuMSA2MC4xIDE1MiA4NC42IDE1MiAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN2MtMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNMjE2IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzIyOS4xIDYwLjEgMjE2IDg0LjYgMjE2IDEwNHpNMzk0LjIgNTEuM0MzODkuMSA2MC4xIDM3NiA4NC42IDM3NiAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN2MtMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNNDQwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzQ1My4xIDYwLjEgNDQwIDg0LjYgNDQwIDEwNHptODIuMi01Mi43QzUxNy4xIDYwLjEgNTA0IDg0LjYgNTA0IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek01ODQgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDNTk3LjEgNjAuMSA1ODQgODQuNiA1ODQgMTA0ek0xMTIgMTYwYy04LjggMC0xNiA3LjItMTYgMTZsMCA5NiAwIDE2IDMyIDAgMC0xNiAwLTk2YzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgOTYgMCAxNiAzMiAwIDAtMTYgMC05NmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2IDAgMTYgMzIgMCAwLTE2IDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2em0xNjAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgOTYgMCAxNiAzMiAwIDAtMTYgMC05NmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2IDAgMTYgMzIgMCAwLTE2IDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA5NiAwIDE2IDMyIDAgMC0xNiAwLTk2YzAtOC44LTcuMi0xNi0xNi0xNnpNMzUyIDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3Nkw5NiAzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDUzIDQzIDk2IDk2IDk2bDE5MiAwIDAgNjQtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwIDAtNjQgMTkyIDBjNTMgMCA5Ni00MyA5Ni05NmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwIDAtMTc2elwiXVxufTtcbmNvbnN0IGZhRmVhdGhlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmZWF0aGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NzE4XSwgXCJmNTJkXCIsIFwiTTI3OC41IDIxNS42TDIzIDQ3MWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU3LTU3IDY4IDBjNDkuNyAwIDk3LjktMTQuNCAxMzktNDFjMTEuMS03LjIgNS41LTIzLTcuOC0yM2MtNS4xIDAtOS4yLTQuMS05LjItOS4yYzAtNC4xIDIuNy03LjYgNi41LTguOGw4MS0yNC4zYzIuNS0uOCA0LjgtMi4xIDYuNy00bDIyLjQtMjIuNGMxMC4xLTEwLjEgMi45LTI3LjMtMTEuMy0yNy4zbC0zMi4yIDBjLTUuMSAwLTkuMi00LjEtOS4yLTkuMmMwLTQuMSAyLjctNy42IDYuNS04LjhsMTEyLTMzLjZjNC0xLjIgNy40LTMuOSA5LjMtNy43QzUwNi40IDIwNy42IDUxMiAxODQuMSA1MTIgMTYwYzAtNDEtMTYuMy04MC4zLTQ1LjMtMTA5LjNsLTUuNS01LjVDNDMyLjMgMTYuMyAzOTMgMCAzNTIgMHMtODAuMyAxNi4zLTEwOS4zIDQ1LjNMMTM5IDE0OUM5MSAxOTcgNjQgMjYyLjEgNjQgMzMwbDAgNTUuM0wyNTMuNiAxOTUuOGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGM1LjQgNS40IDYuMSAxMy42IDIuMiAxOS44elwiXVxufTtcbmNvbnN0IGZhVm9sdW1lTG93ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbHVtZS1sb3cnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNjQsIFwidm9sdW1lLWRvd25cIl0sIFwiZjAyN1wiLCBcIk0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NGwwIDM4NGMwIDEyLjYtNy40IDI0LTE4LjkgMjkuMnMtMjUgMy4xLTM0LjQtNS4zTDEzMS44IDM1MiA2NCAzNTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjcuOCAwTDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6TTQxMi42IDE4MS41QzQzNC4xIDE5OS4xIDQ0OCAyMjUuOSA0NDggMjU2cy0xMy45IDU2LjktMzUuNCA3NC41Yy0xMC4zIDguNC0yNS40IDYuOC0zMy44LTMuNXMtNi44LTI1LjQgMy41LTMzLjhDMzkzLjEgMjg0LjQgNDAwIDI3MSA0MDAgMjU2cy02LjktMjguNC0xNy43LTM3LjNjLTEwLjMtOC40LTExLjgtMjMuNS0zLjUtMzMuOHMyMy41LTExLjggMzMuOC0zLjV6XCJdXG59O1xuY29uc3QgZmFWb2x1bWVEb3duID0gZmFWb2x1bWVMb3c7XG5jb25zdCBmYUNvbW1lbnRTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21tZW50LXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNGIzXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNTEyLjkgMzc2LjdDNTUyLjIgMzQwLjIgNTc2IDI5Mi4zIDU3NiAyNDBDNTc2IDEyNS4xIDQ2MS40IDMyIDMyMCAzMmMtNjcuNyAwLTEyOS4zIDIxLjQtMTc1LjEgNTYuM0wzOC44IDUuMXptMzg1LjIgNDI1TDgyLjkgMTYxLjNDNzAuNyAxODUuNiA2NCAyMTIuMiA2NCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuM2MwIDAgMCAwIDAgMGMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45YzM3IDAgNzIuMy02LjQgMTA0LjEtMTcuOXpcIl1cbn07XG5jb25zdCBmYUNsb3VkU3VuUmFpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1zdW4tcmFpbicsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyNzc4Ml0sIFwiZjc0M1wiLCBcIk0yOTQuMiAxLjJjNS4xIDIuMSA4LjcgNi43IDkuNiAxMi4xbDEwLjQgNjIuNGMtMjMuMyAxMC44LTQyLjkgMjguNC01NiA1MC4zYy0xNC42LTktMzEuOC0xNC4xLTUwLjItMTQuMWMtNTMgMC05NiA0My05NiA5NmMwIDM1LjUgMTkuMyA2Ni42IDQ4IDgzLjJjLjggMzEuOCAxMy4yIDYwLjcgMzMuMSA4Mi43bC01NiAzOS4yYy00LjUgMy4yLTEwLjMgMy44LTE1LjQgMS42cy04LjctNi43LTkuNi0xMi4xTDk4LjEgMzE3LjkgMTMuNCAzMDMuOGMtNS40LS45LTEwLTQuNS0xMi4xLTkuNnMtMS41LTEwLjkgMS42LTE1LjRMNTIuNSAyMDggMi45IDEzNy4yYy0zLjItNC41LTMuOC0xMC4zLTEuNi0xNS40czYuNy04LjcgMTIuMS05LjZMOTguMSA5OC4xbDE0LjEtODQuN2MuOS01LjQgNC41LTEwIDkuNi0xMi4xczEwLjktMS41IDE1LjQgMS42TDIwOCA1Mi41IDI3OC44IDIuOWM0LjUtMy4yIDEwLjMtMy44IDE1LjQtMS42ek0yMDggMTQ0YzEzLjggMCAyNi43IDQuNCAzNy4xIDExLjljLTEuMiA0LjEtMi4yIDguMy0zIDEyLjZjLTM3LjkgMTQuNi02Ny4yIDQ2LjYtNzcuOCA4Ni40QzE1MS44IDI0My4xIDE0NCAyMjYuNSAxNDQgMjA4YzAtMzUuMyAyOC43LTY0IDY0LTY0em02OS40IDI3NmMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43em05NiAwYzExIDcuNCAxNCAyMi4zIDYuNyAzMy4zbC0zMiA0OGMtNy40IDExLTIyLjMgMTQtMzMuMyA2LjdzLTE0LTIyLjMtNi43LTMzLjNsMzItNDhjNy40LTExIDIyLjMtMTQgMzMuMy02Ljd6bTk2IDBjMTEgNy40IDE0IDIyLjMgNi43IDMzLjNsLTMyIDQ4Yy03LjQgMTEtMjIuMyAxNC0zMy4zIDYuN3MtMTQtMjIuMy02LjctMzMuM2wzMi00OGM3LjQtMTEgMjIuMy0xNCAzMy4zLTYuN3ptOTYgMGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43em03NC41LTExNi4xYzAgNDQuMi0zNS44IDgwLTgwIDgwbC0yNzEuOSAwYy01MyAwLTk2LTQzLTk2LTk2YzAtNDcuNiAzNC42LTg3IDgwLTk0LjZsMC0xLjNjMC01MyA0My05NiA5Ni05NmMzNC45IDAgNjUuNCAxOC42IDgyLjIgNDYuNGMxMy05LjEgMjguOC0xNC40IDQ1LjgtMTQuNGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDUuOS0uNiAxMS43LTEuOSAxNy4yYzM3LjQgNi43IDY1LjggMzkuNCA2NS44IDc4Ljd6XCJdXG59O1xuY29uc3QgZmFDb21wcmVzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21wcmVzcycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjA2NlwiLCBcIk0xNjAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NnpNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDB6TTM1MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NHpNMzIwIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMHpcIl1cbn07XG5jb25zdCBmYVdoZWF0QXduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWF0LWF3bicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wid2hlYXQtYWx0XCJdLCBcImUyY2RcIiwgXCJNNTA1IDQxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzgzIDk1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODgtODh6TTMwNS41IDI3LjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI3MS41IDM4LjZjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44bC0xMS4zLTExLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0xMS4zIDExLjNjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44TDEwMS44IDIzMWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNjcuOSAyNDIuM2MtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNEw5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguOS02OC45IDEyLjIgMTIuMmMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBsMTEuMy0xMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMS4zLTExLjNjLTIxLjgtMjEuOC00OS42LTM0LjEtNzguMS0zNi45bDMxLjktMzEuOSAxMi4yIDEyLjJjMzcuNSAzNy41IDk4LjMgMzcuNSAxMzUuOCAwbDExLjMtMTEuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtMTEuMy0xMS4zYy0yMS44LTIxLjgtNDkuNi0zNC4xLTc4LjEtMzYuOWwzMS45LTMxLjkgMTIuMiAxMi4yYzM3LjUgMzcuNSA5OC4zIDM3LjUgMTM1LjggMEw0ODYuNSAyMzFjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZMNDc1LjIgMTk3Yy01LjItNS4yLTEwLjYtOS44LTE2LjQtMTMuOUw1MDUgMTM3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU5LjQgNTkuNGMtMjAuNi00LjQtNDItMy43LTYyLjMgMi4xYzYuMS0yMS4zIDYuNi00My44IDEuNC02NS4zTDQwOSA0MWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDMyOS4xIDUyLjljLTMuNy01LTcuOC05LjgtMTIuNC0xNC4zTDMwNS41IDI3LjN6XCJdXG59O1xuY29uc3QgZmFXaGVhdEFsdCA9IGZhV2hlYXRBd247XG5jb25zdCBmYUFua2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5raCcsXG4gIGljb246IFszMjAsIDUxMiwgWzk3NjVdLCBcImY2NDRcIiwgXCJNOTYgMTI4YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRjMCA0MS42LTIwLjcgNzYuNi00Ni42IDEwNC4xYy01LjkgNi4yLTExLjggMTEuOC0xNy40IDE2LjdjLTUuNi00LjktMTEuNS0xMC41LTE3LjQtMTYuN0MxMTYuNyAyMDQuNiA5NiAxNjkuNiA5NiAxMjh6TTE2MCAwQzg5LjMgMCAzMiA1Ny4zIDMyIDEyOGMwIDUyLjQgMjEuNSA5NS41IDQ2LjggMTI4TDMyIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDYuOCAwYzI1LjQtMzIuNSA0Ni44LTc1LjYgNDYuOC0xMjhDMjg4IDU3LjMgMjMwLjcgMCAxNjAgMHpcIl1cbn07XG5jb25zdCBmYUhhbmRzSG9sZGluZ0NoaWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWhvbGRpbmctY2hpbGQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZmFcIiwgXCJNMzIwIDBhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem00NC43IDE2NC4zTDM3NS44IDI1M2MxLjYgMTMuMi03LjcgMjUuMS0yMC44IDI2LjhzLTI1LjEtNy43LTI2LjgtMjAuOGwtNC40LTM1LTcuNiAwLTQuNCAzNWMtMS42IDEzLjItMTMuNiAyMi41LTI2LjggMjAuOHMtMjIuNS0xMy42LTIwLjgtMjYuOGwxMS4xLTg4LjhMMjU1LjUgMTgxYy0xMC4xIDguNi0yNS4zIDcuMy0zMy44LTIuOHMtNy4zLTI1LjMgMi44LTMzLjhsMjcuOS0yMy42QzI3MS4zIDEwNC44IDI5NS4zIDk2IDMyMCA5NnM0OC43IDguOCA2Ny42IDI0LjdsMjcuOSAyMy42YzEwLjEgOC42IDExLjQgMjMuNyAyLjggMzMuOHMtMjMuNyAxMS40LTMzLjggMi44bC0xOS44LTE2Ljd6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDAgMCA4MCAwIDQwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xYzEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOGwtMTUuMi0xNS4yLTMyLTMyYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDMyIDMyIDE1LjIgMTUuMmMwIDAgMCAwIDAgMGwyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMmwwIDc4LjljMCAyNi41LTIxLjUgNDgtNDggNDhsLTY2LjcgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMjguMSAzOTMuNEMxMC4xIDM3NS40IDAgMzUxIDAgMzI1LjVMMCAyMjRsMC02NCAwLTU2QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDU2IDAgNjQgMCAxMDEuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNDAwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC03OC45YzAtMjkuNyAxMS44LTU4LjIgMzIuOC03OS4ybDI1LjMtMjUuM2MwIDAgMCAwIDAgMGwxNS4yLTE1LjIgMzItMzJjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMzIgMzItMTUuMiAxNS4yYy0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOGM5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM2wwLTQwLjIgMC04MCAwLTQwYzAtMjIuMSAxNy45LTQwIDQwLTQwelwiXVxufTtcbmNvbnN0IGZhQXN0ZXJpc2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXN0ZXJpc2snLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMDAzMywgNjE1NDVdLCBcIjJhXCIsIFwiTTE5MiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEzNS41IDExMS41LTY2LjljMTUuMi05LjEgMzQuOC00LjIgNDMuOSAxMXM0LjIgMzQuOC0xMSA0My45TDI1NC4yIDI1NmwxMTQuMyA2OC42YzE1LjIgOS4xIDIwLjEgMjguNyAxMSA0My45cy0yOC43IDIwLjEtNDMuOSAxMUwyMjQgMzEyLjUgMjI0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEzNS41TDQ4LjUgMzc5LjRjLTE1LjIgOS4xLTM0LjggNC4yLTQzLjktMTFzLTQuMi0zNC44IDExLTQzLjlMMTI5LjggMjU2IDE1LjUgMTg3LjRjLTE1LjItOS4xLTIwLjEtMjguNy0xMS00My45czI4LjctMjAuMSA0My45LTExTDE2MCAxOTkuNSAxNjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFTcXVhcmVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtY2hlY2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5NzQ1LCA5OTg5LCA2MTUxMCwgXCJjaGVjay1zcXVhcmVcIl0sIFwiZjE0YVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zMzcgMjA5TDIwOSAzMzdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQ3IDQ3TDMwMyAxNzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45elwiXVxufTtcbmNvbnN0IGZhQ2hlY2tTcXVhcmUgPSBmYVNxdWFyZUNoZWNrO1xuY29uc3QgZmFQZXNldGFTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blc2V0YS1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMjIxXCIsIFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NGwwIDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgOTYgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjNzcuNCAwIDE0Mi01NSAxNTYuOC0xMjhsMy4yIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMuMiAwQzMzNCA4NyAyNjkuNCAzMiAxOTIgMzJMNjQgMzJ6TTI4Mi41IDE2MEw5NiAxNjBsMC02NCA5NiAwYzQxLjggMCA3Ny40IDI2LjcgOTAuNSA2NHpNOTYgMjI0bDE4Ni41IDBjLTEzLjIgMzcuMy00OC43IDY0LTkwLjUgNjRsLTk2IDAgMC02NHpcIl1cbn07XG5jb25zdCBmYUhlYWRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhZGluZycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiaGVhZGVyXCJdLCBcImYxZGNcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw0OCAwIDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2IDAgMCAxMTIgMjI0IDAgMC0xMTItMTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0OCAwIDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2IDAgMCAxNDQgMCAxNzYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNDggMC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC0xNDQtMjI0IDAgMCAxNDQgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNDggMC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC0xNzZMNDggOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpcIl1cbn07XG5jb25zdCBmYUhlYWRlciA9IGZhSGVhZGluZztcbmNvbnN0IGZhR2hvc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2hvc3QnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxMjNdLCBcImY2ZTJcIiwgXCJNNDAuMSA0NjcuMWwtMTEuMiA5Yy0zLjIgMi41LTcuMSAzLjktMTEuMSAzLjlDOCA0ODAgMCA0NzIgMCA0NjIuMkwwIDE5MkMwIDg2IDg2IDAgMTkyIDBTMzg0IDg2IDM4NCAxOTJsMCAyNzAuMmMwIDkuOC04IDE3LjgtMTcuOCAxNy44Yy00IDAtNy45LTEuNC0xMS4xLTMuOWwtMTEuMi05Yy0xMy40LTEwLjctMzIuOC05LTQ0LjEgMy45TDI2OS4zIDUwNmMtMy4zIDMuOC04LjIgNi0xMy4zIDZzLTkuOS0yLjItMTMuMy02bC0yNi42LTMwLjVjLTEyLjctMTQuNi0zNS40LTE0LjYtNDguMiAwTDE0MS4zIDUwNmMtMy4zIDMuOC04LjIgNi0xMy4zIDZzLTkuOS0yLjItMTMuMy02TDg0LjIgNDcxYy0xMS4zLTEyLjktMzAuNy0xNC42LTQ0LjEtMy45ek0xNjAgMTkyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUxpc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGlzdC1zcXVhcmVzXCJdLCBcImYwM2FcIiwgXCJNNDAgNDhDMjYuNyA0OCAxNiA1OC43IDE2IDcybDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0TDQwIDQ4ek0xOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMTkyIDY0em0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yODggMHpNMTYgMjMybDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNNDAgMzY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMHpcIl1cbn07XG5jb25zdCBmYUxpc3RTcXVhcmVzID0gZmFMaXN0O1xuY29uc3QgZmFTcXVhcmVQaG9uZUZsaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXBob25lLWZsaXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInBob25lLXNxdWFyZS1hbHRcIl0sIFwiZjg3YlwiLCBcIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwem0tOTAuNyA5Ni43Yy05LjctMi42LTE5LjkgMi4zLTIzLjcgMTEuNmwtMjAgNDhjLTMuNCA4LjItMSAxNy42IDUuOCAyMy4yTDI4MCAyMzEuN2MtMTYuNiAzNS4yLTQ1LjEgNjMuNy04MC4zIDgwLjNsLTIwLjItMjQuN2MtNS42LTYuOC0xNS05LjItMjMuMi01LjhsLTQ4IDIwYy05LjMgMy45LTE0LjIgMTQtMTEuNiAyMy43bDEyIDQ0QzExMS4xIDM3OCAxMTkgMzg0IDEyOCAzODRjMTIzLjcgMCAyMjQtMTAwLjMgMjI0LTIyNGMwLTktNi0xNi45LTE0LjctMTkuM2wtNDQtMTJ6XCJdXG59O1xuY29uc3QgZmFQaG9uZVNxdWFyZUFsdCA9IGZhU3F1YXJlUGhvbmVGbGlwO1xuY29uc3QgZmFDYXJ0UGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJ0LXBsdXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYyMTdcIiwgXCJNMCAyNEMwIDEwLjcgMTAuNyAwIDI0IDBMNjkuNSAwYzIyIDAgNDEuNSAxMi44IDUwLjYgMzJsNDExIDBjMjYuMyAwIDQ1LjUgMjUgMzguNiA1MC40bC00MSAxNTIuM2MtOC41IDMxLjQtMzcgNTMuMy02OS41IDUzLjNsLTI4OC41IDAgNS40IDI4LjVjMi4yIDExLjMgMTIuMSAxOS41IDIzLjYgMTkuNUw0ODggMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yODguMyAwYy0zNC42IDAtNjQuMy0yNC42LTcwLjctNTguNUw3Ny40IDU0LjVjLS43LTMuOC00LTYuNS03LjktNi41TDI0IDQ4QzEwLjcgNDggMCAzNy4zIDAgMjR6TTEyOCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMzM2LTQ4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMjUyIDE2MGMwIDExIDkgMjAgMjAgMjBsNDQgMCAwIDQ0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNDQgNDQgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQ0IDAgMC00NGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCA0NC00NCAwYy0xMSAwLTIwIDktMjAgMjB6XCJdXG59O1xuY29uc3QgZmFHYW1lcGFkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dhbWVwYWQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYxMWJcIiwgXCJNMTkyIDY0Qzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4bDI1NiAwYzEwNiAwIDE5Mi04NiAxOTItMTkycy04Ni0xOTItMTkyLTE5MkwxOTIgNjR6TTQ5NiAxNjhhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwek0zOTIgMzA0YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTE2OCAyMDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDMyIDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDAgMCAzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTMyLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMzIgMCAwLTMyelwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlRG90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1kb3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyODAsIFwiZG90LWNpcmNsZVwiXSwgXCJmMTkyXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTM1MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG5jb25zdCBmYURvdENpcmNsZSA9IGZhQ2lyY2xlRG90O1xuY29uc3QgZmFGYWNlRGl6enkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1kaXp6eScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZGl6enlcIl0sIFwiZjU2N1wiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0yMjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTEwMC43IDEzMi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwTDE2MCAxNjkuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDE4Mi42IDE5MmwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEwxNjAgMjE0LjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkwxMzcuNCAxOTJsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6bTE5MiAwYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwTDM1MiAxNjkuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDM3NC42IDE5MmwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEwzNTIgMjE0LjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkwzMjkuNCAxOTJsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xuY29uc3QgZmFEaXp6eSA9IGZhRmFjZURpenp5O1xuY29uc3QgZmFFZ2cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWdnJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI5MzcwXSwgXCJmN2ZiXCIsIFwiTTE5MiA0OTZDODYgNDk2IDAgMzk0IDAgMjg4QzAgMTc2IDY0IDE2IDE5MiAxNnMxOTIgMTYwIDE5MiAyNzJjMCAxMDYtODYgMjA4LTE5MiAyMDh6TTE1NC44IDEzNGM2LjUtNiA3LTE2LjEgMS0yMi42cy0xNi4xLTctMjIuNi0xYy0yMy45IDIxLjgtNDEuMSA1Mi43LTUyLjMgODQuMkM2OS43IDIyNi4xIDY0IDI1OS43IDY0IDI4OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2YzAtMjQuNSA1LTU0LjQgMTUuMS04Mi44YzEwLjEtMjguNSAyNS01NC4xIDQzLjctNzEuMnpcIl1cbn07XG5jb25zdCBmYUhvdXNlTWVkaWNhbENpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLW1lZGljYWwtY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTEzXCIsIFwiTTMyMCAzNjhjMCA1OS41IDI5LjUgMTEyLjEgNzQuOCAxNDRsLTI2Ni43IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTYwLjQtMzIgMGMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTIyLjEgMTkzLjljLTguNS0xLjMtMTcuMy0xLjktMjYuMS0xLjljLTU0LjcgMC0xMDMuNSAyNC45LTEzNS44IDY0TDMyMCAyNTZsMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMjIuNiAxNDRsMzYuNy0zNi43YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBMNDk2IDM0NS40bC0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMNDczLjQgMzY4bC0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEw0OTYgMzkwLjZsMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw1MTguNiAzNjh6XCJdXG59O1xuY29uc3QgZmFDYW1wZ3JvdW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbXBncm91bmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs5OTc4XSwgXCJmNmJiXCIsIFwiTTM3NyA1MmMxMS0xMy44IDguOC0zMy45LTUtNDVzLTMzLjktOC44LTQ1IDVMMjg4IDYwLjggMjQ5IDEyYy0xMS0xMy44LTMxLjItMTYtNDUtNXMtMTYgMzEuMi01IDQ1bDQ4IDYwTDEyLjMgNDA1LjRDNC4zIDQxNS40IDAgNDI3LjcgMCA0NDAuNEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNDAgMCAyNDAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIzLjZjMC0xMi43LTQuMy0yNS4xLTEyLjMtMzVMMzI5IDExMmw0OC02MHpNMjg4IDQ0OGwtMTE5LjUgMEwyODggMjkxLjcgNDA3LjUgNDQ4IDI4OCA0NDh6XCJdXG59O1xuY29uc3QgZmFGb2xkZXJQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZvbGRlci1wbHVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjVlXCIsIFwiTTUxMiA0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEyOCAwYzIwLjEgMCAzOS4xIDkuNSA1MS4yIDI1LjZsMTkuMiAyNS42YzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhsMTYwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZ6TTIzMiAzNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0IDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDAgMC02NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDY0LTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjQgMCAwIDY0elwiXVxufTtcbmNvbnN0IGZhRnV0Ym9sID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Z1dGJvbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk5MTcsIFwiZnV0Ym9sLWJhbGxcIiwgXCJzb2NjZXItYmFsbFwiXSwgXCJmMWUzXCIsIFwiTTQxNy4zIDM2MC4xbC03MS42LTQuOGMtNS4yLS4zLTEwLjMgMS4xLTE0LjUgNC4ycy03LjIgNy40LTguNCAxMi41bC0xNy42IDY5LjZDMjg5LjUgNDQ1LjggMjczIDQ0OCAyNTYgNDQ4cy0zMy41LTIuMi00OS4yLTYuNEwxODkuMiAzNzJjLTEuMy01LTQuMy05LjQtOC40LTEyLjVzLTkuMy00LjUtMTQuNS00LjJsLTcxLjYgNC44Yy0xNy42LTI3LjItMjguNS01OS4yLTMwLjQtOTMuNkwxMjUgMjI4LjNjNC40LTIuOCA3LjYtNyA5LjItMTEuOXMxLjQtMTAuMi0uNS0xNWwtMjYuNy02Ni42QzEyOCAxMDkuMiAxNTUuMyA4OSAxODYuNyA3Ni45bDU1LjIgNDZjNCAzLjMgOSA1LjEgMTQuMSA1LjFzMTAuMi0xLjggMTQuMS01LjFsNTUuMi00NmMzMS4zIDEyLjEgNTguNyAzMi4zIDc5LjYgNTcuOWwtMjYuNyA2Ni42Yy0xLjkgNC44LTIuMSAxMC4xLS41IDE1czQuOSA5LjEgOS4yIDExLjlsNjAuNyAzOC4yYy0xLjkgMzQuNC0xMi44IDY2LjQtMzAuNCA5My42ek0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptMTQuMS0zMjUuN2MtOC40LTYuMS0xOS44LTYuMS0yOC4yIDBMMTk0IDIyMWMtOC40IDYuMS0xMS45IDE2LjktOC43IDI2LjhsMTguMyA1Ni4zYzMuMiA5LjkgMTIuNCAxNi42IDIyLjggMTYuNmw1OS4yIDBjMTAuNCAwIDE5LjYtNi43IDIyLjgtMTYuNmwxOC4zLTU2LjNjMy4yLTkuOS0uMy0yMC43LTguNy0yNi44bC00Ny45LTM0Ljh6XCJdXG59O1xuY29uc3QgZmFGdXRib2xCYWxsID0gZmFGdXRib2w7XG5jb25zdCBmYVNvY2NlckJhbGwgPSBmYUZ1dGJvbDtcbmNvbnN0IGZhUGFpbnRicnVzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWludGJydXNoJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mzk2LCBcInBhaW50LWJydXNoXCJdLCBcImYxZmNcIiwgXCJNMzM5LjMgMzY3LjFjMjcuMy0zLjkgNTEuOS0xOS40IDY3LjItNDIuOUw1NjguMiA3NC4xYzEyLjYtMTkuNSA5LjQtNDUuMy03LjYtNjEuMlM1MTcuNy00LjQgNDk5LjEgOS42TDI2Mi40IDE4Ny4yYy0yNCAxOC0zOC4yIDQ2LjEtMzguNCA3Ni4xTDMzOS4zIDM2Ny4xem0tMTkuNiAyNS40bC0xMTYtMTA0LjRDMTQzLjkgMjkwLjMgOTYgMzM5LjYgOTYgNDAwYzAgMy45IC4yIDcuOCAuNiAxMS42Qzk4LjQgNDI5LjEgODYuNCA0NDggNjguOCA0NDhMNjQgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE0NCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyYzAtMi41LS4xLTUtLjItNy41elwiXVxufTtcbmNvbnN0IGZhUGFpbnRCcnVzaCA9IGZhUGFpbnRicnVzaDtcbmNvbnN0IGZhTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4Mjc0XSwgXCJmMDIzXCIsIFwiTTE0NCAxNDRsMCA0OCAxNjAgMCAwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwek04MCAxOTJsMC00OEM4MCA2NC41IDE0NC41IDAgMjI0IDBzMTQ0IDY0LjUgMTQ0IDE0NGwwIDQ4IDE2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDI1NmMwLTM1LjMgMjguNy02NCA2NC02NGwxNiAwelwiXVxufTtcbmNvbnN0IGZhR2FzUHVtcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXMtcHVtcCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzk5ODFdLCBcImY1MmZcIiwgXCJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwyNTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MiA4IDBjNDguNiAwIDg4IDM5LjQgODggODhsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTU0Yy0yNy42LTcuMS00OC0zMi4yLTQ4LTYybDAtNjRMMzg0IDY0Yy04LjgtOC44LTguOC0yMy4yIDAtMzJzMjMuMi04LjggMzIgMGw3Ny4zIDc3LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM2wwIDEzLjUgMCAyNCAwIDMyIDAgMTUyYzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcybDAtMzJjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTggMCAwIDE0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJMMzIgNjR6TTk2IDgwbDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNkwxMTIgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG5jb25zdCBmYUhvdFR1YlBlcnNvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3QtdHViLXBlcnNvbicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaG90LXR1YlwiXSwgXCJmNTkzXCIsIFwiTTI3MiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDUuMmMwIDM0IDE0LjQgNjYuNCAzOS43IDg5LjJsMTYuNCAxNC44YzE1LjIgMTMuNyAyMy44IDMzLjEgMjMuOCA1My41bDAgMTMuMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTMuMmMwLTM0LTE0LjQtNjYuNC0zOS43LTg5LjJMMjk1LjggODIuOEMyODAuNyA2OS4xIDI3MiA0OS43IDI3MiAyOS4ybDAtNS4yek0wIDMyMGwwIDE2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xNzAuNyAwYy0xMy44IDAtMjcuMy00LjUtMzguNC0xMi44bC04NS4zLTY0QzEzNyAxNjYuNyAxMTYuOCAxNjAgOTYgMTYwYy01MyAwLTk2IDQzLTk2IDk2bDAgNjR6bTEyOCAxNmwwIDk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptODAtMTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgOTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC05NmMwLTguOCA3LjItMTYgMTYtMTZ6bTExMiAxNmwwIDk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptODAtMTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgOTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC05NmMwLTguOCA3LjItMTYgMTYtMTZ6TTM2MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDUuMmMwIDM0IDE0LjQgNjYuNCAzOS43IDg5LjJsMTYuNCAxNC44YzE1LjIgMTMuNyAyMy44IDMzLjEgMjMuOCA1My41bDAgMTMuMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTMuMmMwLTM0LTE0LjQtNjYuNC0zOS43LTg5LjJMNDA3LjggODIuOEMzOTIuNyA2OS4xIDM4NCA0OS43IDM4NCAyOS4ybDAtNS4yYzAtMTMuMy0xMC43LTI0LTI0LTI0ek02NCAxMjhBNjQgNjQgMCAxIDAgNjQgMGE2NCA2NCAwIDEgMCAwIDEyOHpcIl1cbn07XG5jb25zdCBmYUhvdFR1YiA9IGZhSG90VHViUGVyc29uO1xuY29uc3QgZmFNYXBMb2NhdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXAtbG9jYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcIm1hcC1tYXJrZWRcIl0sIFwiZjU5ZlwiLCBcIk0zMDIuOCAzMTJDMzM0LjkgMjcxLjkgNDA4IDE3NC42IDQwOCAxMjBDNDA4IDUzLjcgMzU0LjMgMCAyODggMFMxNjggNTMuNyAxNjggMTIwYzAgNTQuNiA3My4xIDE1MS45IDEwNS4yIDE5MmM3LjcgOS42IDIyIDkuNiAyOS42IDB6TTQxNiA1MDNsMTQ0LjktNThjOS4xLTMuNiAxNS4xLTEyLjUgMTUuMS0yMi4zTDU3NiAxNTJjMC0xNy0xNy4xLTI4LjYtMzIuOS0yMi4zbC0xMTYgNDYuNGMtLjUgMS4yLTEgMi41LTEuNSAzLjdjLTIuOSA2LjgtNi4xIDEzLjctOS42IDIwLjZMNDE2IDUwM3pNMTUuMSAxODcuM0M2IDE5MSAwIDE5OS44IDAgMjA5LjZMMCA0ODAuNGMwIDE3IDE3LjEgMjguNiAzMi45IDIyLjNMMTYwIDQ1MS44bDAtMjUxLjRjLTMuNS02LjktNi43LTEzLjgtOS42LTIwLjZjLTUuNi0xMy4yLTEwLjQtMjcuNC0xMi44LTQxLjVsLTEyMi42IDQ5ek0zODQgMjU1Yy0yMC41IDMxLjMtNDIuMyA1OS42LTU2LjIgNzdjLTIwLjUgMjUuNi01OS4xIDI1LjYtNzkuNiAwYy0xMy45LTE3LjQtMzUuNy00NS43LTU2LjItNzdsMCAxOTQuNCAxOTIgNTQuOUwzODQgMjU1elwiXVxufTtcbmNvbnN0IGZhTWFwTWFya2VkID0gZmFNYXBMb2NhdGlvbjtcbmNvbnN0IGZhSG91c2VGbG9vZFdhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWZsb29kLXdhdGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTBlXCIsIFwiTTMwNi44IDYuMUMyOTUuNi0yIDI4MC40LTIgMjY5LjIgNi4xbC0xNzYgMTI4Yy0xMS4yIDguMi0xNS45IDIyLjYtMTEuNiAzNS44Uzk4LjEgMTkyIDExMiAxOTJsMTYgMCAwIDczYzEuNyAxIDMuMyAyIDQuOSAzLjFjMTggMTIuNCA0MC4xIDIwLjMgNTkuMiAyMC4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzEuNS0xIDMtMiA0LjUtMi45bC0uMy03My4yIDE2LjYgMGMxMy45IDAgMjYuMS04LjkgMzAuNC0yMi4xcy0uNC0yNy42LTExLjYtMzUuOGwtMTc2LTEyOHpNMjY5LjUgMzA5LjlDMjQ3IDMyNS40IDIxOS41IDMzNiAxOTIgMzM2Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWMwIDAgMCAwIDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSAzODkuNyAxNTkgNDAwIDE5MiA0MDBjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNSAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNS0yNy4zLTEwLjEtMzkuMi0xLjdjMCAwIDAgMCAwIDBDNDM5LjQgMzI1LjIgNDEwLjkgMzM2IDM4NCAzMzZjLTI3LjUgMC01NS0xMC42LTc3LjUtMjYuMWMtMTEuMS03LjktMjUuOS03LjktMzcgMHpNMzg0IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwQzI0NyA0MzcuNCAyMTkuNSA0NDggMTkyIDQ0OGMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFjMCAwIDAgMCAwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43YzAgMCAwIDAgMCAwQzQzOS40IDQzNy4yIDQxMC45IDQ0OCAzODQgNDQ4elwiXVxufTtcbmNvbnN0IGZhVHJlZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cmVlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3Nzk0XSwgXCJmMWJiXCIsIFwiTTIxMC42IDUuOUw2MiAxNjkuNGMtMy45IDQuMi02IDkuOC02IDE1LjVDNTYgMTk3LjcgNjYuMyAyMDggNzkuMSAyMDhsMjQuOSAwTDMwLjYgMjgxLjRjLTQuMiA0LjItNi42IDEwLTYuNiAxNkMyNCAzMDkuOSAzNC4xIDMyMCA0Ni42IDMyMEw4MCAzMjAgNS40IDQwOS41QzEuOSA0MTMuNyAwIDQxOSAwIDQyNC41YzAgMTMgMTAuNSAyMy41IDIzLjUgMjMuNUwxOTIgNDQ4bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDE2OC41IDBjMTMgMCAyMy41LTEwLjUgMjMuNS0yMy41YzAtNS41LTEuOS0xMC44LTUuNC0xNUwzNjggMzIwbDMzLjQgMGMxMi41IDAgMjIuNi0xMC4xIDIyLjYtMjIuNmMwLTYtMi40LTExLjgtNi42LTE2TDM0NCAyMDhsMjQuOSAwYzEyLjcgMCAyMy4xLTEwLjMgMjMuMS0yMy4xYzAtNS43LTIuMS0xMS4zLTYtMTUuNUwyMzcuNCA1LjlDMjM0IDIuMSAyMjkuMSAwIDIyNCAwcy0xMCAyLjEtMTMuNCA1Ljl6XCJdXG59O1xuY29uc3QgZmFCcmlkZ2VMb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZS1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGNjXCIsIFwiTTMyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDUxMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC00MCAwIDAgNjQtOCAwYy02MS45IDAtMTEyIDUwLjEtMTEyIDExMmwwIDI0LjZjLTkuOSA1LjgtMTguMiAxNC4xLTIzLjggMjQuMWMtMTcuNi0yMC00My40LTMyLjctNzIuMi0zMi43Yy01MyAwLTk2IDQzLTk2IDk2bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC01My00My05Ni05Ni05NmwwLTEyOCA3MiAwIDAtNjRMNjQgOTZDNDYuMyA5NiAzMiA4MS43IDMyIDY0ek00MDggOTZsMCA2NCA4MCAwIDAtNjQtODAgMHptLTQ4IDY0bDAtNjQtODAgMCAwIDY0IDgwIDB6TTE1MiA5NmwwIDY0IDgwIDAgMC02NC04MCAwek01MjggMjQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtNDh6XCJdXG59O1xuY29uc3QgZmFTYWNrRG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NhY2stZG9sbGFyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTc2XSwgXCJmODFkXCIsIFwiTTMyMCA5NkwxOTIgOTYgMTQ0LjYgMjQuOUMxMzcuNSAxNC4yIDE0NS4xIDAgMTU3LjkgMEwzNTQuMSAwYzEyLjggMCAyMC40IDE0LjIgMTMuMyAyNC45TDMyMCA5NnpNMTkyIDEyOGwxMjggMGMzLjggMi41IDguMSA1LjMgMTMgOC40QzM4OS43IDE3Mi43IDUxMiAyNTAuOSA1MTIgNDE2YzAgNTMtNDMgOTYtOTYgOTZMOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2QzAgMjUwLjkgMTIyLjMgMTcyLjcgMTc5IDEzNi40YzAgMCAwIDAgMCAwczAgMCAwIDBjNC44LTMuMSA5LjItNS45IDEzLTguNHptODQgODhjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMTRjLTcuNiAxLjctMTUuMiA0LjQtMjIuMiA4LjVjLTEzLjkgOC4zLTI1LjkgMjIuOC0yNS44IDQzLjljLjEgMjAuMyAxMiAzMy4xIDI0LjcgNDAuN2MxMSA2LjYgMjQuNyAxMC44IDM1LjYgMTRsMS43IC41YzEyLjYgMy44IDIxLjggNi44IDI4IDEwLjdjNS4xIDMuMiA1LjggNS40IDUuOSA4LjJjLjEgNS0xLjggOC01LjkgMTAuNWMtNSAzLjEtMTIuOSA1LTIxLjQgNC43Yy0xMS4xLS40LTIxLjUtMy45LTM1LjEtOC41Yy0yLjMtLjgtNC43LTEuNi03LjItMi40Yy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zYzEuOSAuNiA0IDEuMyA2LjEgMi4xYzAgMCAwIDAgMCAwczAgMCAwIDBjOC4zIDIuOSAxNy45IDYuMiAyOC4yIDguNGwwIDE0LjZjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xMy44YzgtMS43IDE2LTQuNSAyMy4yLTljMTQuMy04LjkgMjUuMS0yNC4xIDI0LjgtNDVjLS4zLTIwLjMtMTEuNy0zMy40LTI0LjYtNDEuNmMtMTEuNS03LjItMjUuOS0xMS42LTM3LjEtMTVjMCAwIDAgMCAwIDBsLS43LS4yYy0xMi44LTMuOS0yMS45LTYuNy0yOC4zLTEwLjVjLTUuMi0zLjEtNS4zLTQuOS01LjMtNi43YzAtMy43IDEuNC02LjUgNi4yLTkuM2M1LjQtMy4yIDEzLjYtNS4xIDIxLjUtNWM5LjYgLjEgMjAuMiAyLjIgMzEuMiA1LjJjMTAuNyAyLjggMjEuNi0zLjUgMjQuNS0xNC4ycy0zLjUtMjEuNi0xNC4yLTI0LjVjLTYuNS0xLjctMTMuNy0zLjQtMjEuMS00LjdsMC0xMy45elwiXVxufTtcbmNvbnN0IGZhUGVuVG9TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuLXRvLXNxdWFyZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZWRpdFwiXSwgXCJmMDQ0XCIsIFwiTTQ3MS42IDIxLjdjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwTDM2Mi4zIDUxLjdsOTcuOSA5Ny45IDMwLjEtMzAuMWMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMkw0NzEuNiAyMS43em0tMjk5LjIgMjIwYy02LjEgNi4xLTEwLjggMTMuNi0xMy41IDIxLjlsLTI5LjYgODguOGMtMi45IDguNi0uNiAxOC4xIDUuOCAyNC42czE1LjkgOC43IDI0LjYgNS44bDg4LjgtMjkuNmM4LjItMi43IDE1LjctNy40IDIxLjktMTMuNUw0MzcuNyAxNzIuMyAzMzkuNyA3NC4zIDE3Mi40IDI0MS43ek05NiA2NEM0MyA2NCAwIDEwNyAwIDE2MEwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiA2NHpcIl1cbn07XG5jb25zdCBmYUVkaXQgPSBmYVBlblRvU3F1YXJlO1xuY29uc3QgZmFDYXJTaWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nhci1zaWRlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjYzXSwgXCJmNWU0XCIsIFwiTTE3MS4zIDk2TDIyNCA5NmwwIDk2LTExMi43IDAgMzAuNC03NS45QzE0Ni41IDEwNCAxNTguMiA5NiAxNzEuMyA5NnpNMjcyIDE5MmwwLTk2IDgxLjIgMGM5LjcgMCAxOC45IDQuNCAyNSAxMmw2Ny4yIDg0TDI3MiAxOTJ6bTI1Ni4yIDFMNDI4LjIgNjhjLTE4LjItMjIuOC00NS44LTM2LTc1LTM2TDE3MS4zIDMyYy0zOS4zIDAtNzQuNiAyMy45LTg5LjEgNjAuM0w0MC42IDE5Ni40QzE2LjggMjA1LjggMCAyMjguOSAwIDI1NkwwIDM2OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMy4zIDBjNy42IDQ1LjQgNDcuMSA4MCA5NC43IDgwczg3LjEtMzQuNiA5NC43LTgwbDEzMC43IDBjNy42IDQ1LjQgNDcuMSA4MCA5NC43IDgwczg3LjEtMzQuNiA5NC43LTgwbDMzLjMgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4YzAtNjUuMi00OC44LTExOS0xMTEuOC0xMjd6TTQzNC43IDM2OGE0OCA0OCAwIDEgMSA5MC41IDMyIDQ4IDQ4IDAgMSAxIC05MC41LTMyek0xNjAgMzM2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG5jb25zdCBmYVNoYXJlTm9kZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hhcmUtbm9kZXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInNoYXJlLWFsdFwiXSwgXCJmMWUwXCIsIFwiTTM1MiAyMjRjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgNCAuMiA4IC43IDExLjlsLTk0LjEgNDdDMTQ1LjQgMTcwLjIgMTIxLjkgMTYwIDk2IDE2MGMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMyNS45IDAgNDkuNC0xMC4yIDY2LjYtMjYuOWw5NC4xIDQ3Yy0uNSAzLjktLjcgNy44LS43IDExLjljMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLTI1LjkgMC00OS40IDEwLjItNjYuNiAyNi45bC05NC4xLTQ3Yy41LTMuOSAuNy03LjggLjctMTEuOXMtLjItOC0uNy0xMS45bDk0LjEtNDdDMzAyLjYgMjEzLjggMzI2LjEgMjI0IDM1MiAyMjR6XCJdXG59O1xuY29uc3QgZmFTaGFyZUFsdCA9IGZhU2hhcmVOb2RlcztcbmNvbnN0IGZhSGVhcnRDaXJjbGVNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUtbWludXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZmZcIiwgXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOWwyLjYtMi40QzI2Ny4yIDQzOC42IDI1NiA0MDQuNiAyNTYgMzY4YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2YzI4LjMgMCA1NSA2LjcgNzguNyAxOC41Yy45LTYuNSAxLjMtMTMgMS4zLTE5LjZsMC01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMWwwIDUuOGMwIDQxLjUgMTcuMiA4MS4yIDQ3LjYgMTA5LjV6TTU3NiAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxMjggMGM4LjggMCAxNiA3LjIgMTYgMTZ6XCJdXG59O1xuY29uc3QgZmFIb3VyZ2xhc3NIYWxmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXJnbGFzcy1oYWxmJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJob3VyZ2xhc3MtMlwiXSwgXCJmMjUyXCIsIFwiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFMMTQ2LjcgMjU2IDc4LjkgMzIzLjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0MzdsMCAxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDI1NiAwIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMWMwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFMMjM3LjMgMjU2bDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMWwwLTExYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyMCAwIDY0IDAgMzIgMHpNOTYgNzVsMC0xMSAxOTIgMCAwIDExYzAgMTktNS42IDM3LjQtMTYgNTNMMTEyIDEyOGMtMTAuMy0xNS42LTE2LTM0LTE2LTUzem0xNiAzMDljMy41LTUuMyA3LjYtMTAuMyAxMi4xLTE0LjlMMTkyIDMwMS4zbDY3LjkgNjcuOWM0LjYgNC42IDguNiA5LjYgMTIuMSAxNC45TDExMiAzODR6XCJdXG59O1xuY29uc3QgZmFIb3VyZ2xhc3MyID0gZmFIb3VyZ2xhc3NIYWxmO1xuY29uc3QgZmFNaWNyb3Njb3BlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21pY3Jvc2NvcGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMDBdLCBcImY2MTBcIiwgXCJNMTYwIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzIgNDQ4bDI4OCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4cy01Ny4zLTEyOC0xMjgtMTI4bDAtNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJjMCA0OS4yLTE4LjUgOTQtNDguOSAxMjhsMTYuOSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMEwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTgwLTY0bDE5MiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYVNpbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2luaycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTA2ZFwiLCBcIk0yODggOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAxOTItNjQgMCAwLTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjNC40IDAgOCAzLjYgOCA4bDAgMjQtODAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMjQgMCAyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtODAgMCAwLTI0YzAtNC40IDMuNi04IDgtOGw1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDI0LTY0IDAgMC0xOTJ6TTQ4MCA0MTZsMC0zMkwzMiAzODRsMCAzMmMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZ6XCJdXG59O1xuY29uc3QgZmFCYWdTaG9wcGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWctc2hvcHBpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInNob3BwaW5nLWJhZ1wiXSwgXCJmMjkwXCIsIFwiTTE2MCAxMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGwwIDQ4LTEyOCAwIDAtNDh6bS00OCA0OGwtNjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMjA4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwIDAtNDhDMzM2IDUwLjEgMjg1LjkgMCAyMjQgMFMxMTIgNTAuMSAxMTIgMTEybDAgNDh6bTI0IDQ4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMTUyIDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6XCJdXG59O1xuY29uc3QgZmFTaG9wcGluZ0JhZyA9IGZhQmFnU2hvcHBpbmc7XG5jb25zdCBmYUFycm93RG93blpBID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24tei1hJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LWFscGhhLWRlc2NcIiwgXCJzb3J0LWFscGhhLWRvd24tYWx0XCJdLCBcImY4ODFcIiwgXCJNMTgzLjYgNDY5LjZDMTc3LjUgNDc2LjIgMTY5IDQ4MCAxNjAgNDgwcy0xNy41LTMuOC0yMy42LTEwLjRsLTg4LTk2Yy0xMS45LTEzLTExLjEtMzMuMyAyLTQ1LjJzMzMuMy0xMS4xIDQ1LjIgMkwxMjggMzY1LjcgMTI4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDEuNyAzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUw0MjkuMyAxNjBsNTAuNyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlMNDAyLjcgOTYgMzUyIDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnptOTYgMTkyYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdsNjQgMTI4IDE2IDMyYzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNMNDYwLjIgNDQ4bC04OC40IDAtNy4yIDE0LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsMTYtMzIgNjQtMTI4YzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3Ljd6TTM5NS44IDQwMGw0MC40IDBMNDE2IDM1OS42IDM5NS44IDQwMHpcIl1cbn07XG5jb25zdCBmYVNvcnRBbHBoYURlc2MgPSBmYUFycm93RG93blpBO1xuY29uc3QgZmFTb3J0QWxwaGFEb3duQWx0ID0gZmFBcnJvd0Rvd25aQTtcbmNvbnN0IGZhTWl0dGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21pdHRlbicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjdiNVwiLCBcIk0zNTIgMzg0TDY0IDM4NCA1LjQgMTc4LjlDMS44IDE2Ni40IDAgMTUzLjQgMCAxNDAuM0MwIDYyLjggNjIuOCAwIDE0MC4zIDBsMy40IDBjNjYgMCAxMjMuNSA0NC45IDEzOS41IDEwOC45bDMxLjQgMTI1LjggMTcuNi0yMC4xQzM0NC44IDIwMC4yIDM2Mi45IDE5MiAzODIgMTkybDIuOCAwYzM0LjkgMCA2My4zIDI4LjMgNjMuMyA2My4zYzAgMTUuOS02IDMxLjItMTYuOCA0Mi45TDM1MiAzODR6TTMyIDQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMnpcIl1cbn07XG5jb25zdCBmYVBlcnNvblJheXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXJheXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NGRcIiwgXCJNMjA4IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNGwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIyMy4xLTI4LjYgNDcuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZsMjkuNyAwYzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDU4LjMgOTdjOS4xIDE1LjEgNC4yIDM0LjgtMTAuOSA0My45cy0zNC44IDQuMi00My45LTEwLjlMMzI4IDI1Ni45IDMyOCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMTYgMHpNNyA3QzE2LjQtMi4zIDMxLjYtMi4zIDQxIDdsODAgODBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw3IDQxQy0yLjMgMzEuNi0yLjMgMTYuNCA3IDd6TTQ3MSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODAgODBjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMNDcxIDd6TTcgNTA1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4MC04MGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNDEgNTA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHptNDY0IDBsLTgwLTgwYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsODAgODBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMHpcIl1cbn07XG5jb25zdCBmYVVzZXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXJzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmMGMwXCIsIFwiTTE0NCAwYTgwIDgwIDAgMSAxIDAgMTYwQTgwIDgwIDAgMSAxIDE0NCAwek01MTIgMGE4MCA4MCAwIDEgMSAwIDE2MEE4MCA4MCAwIDEgMSA1MTIgMHpNMCAyOTguN0MwIDIzOS44IDQ3LjggMTkyIDEwNi43IDE5Mmw0Mi43IDBjMTUuOSAwIDMxIDMuNSA0NC42IDkuN2MtMS4zIDcuMi0xLjkgMTQuNy0xLjkgMjIuM2MwIDM4LjIgMTYuOCA3Mi41IDQzLjMgOTZjLS4yIDAtLjQgMC0uNyAwTDIxLjMgMzIwQzkuNiAzMjAgMCAzMTAuNCAwIDI5OC43ek00MDUuMyAzMjBjLS4yIDAtLjQgMC0uNyAwYzI2LjYtMjMuNSA0My4zLTU3LjggNDMuMy05NmMwLTcuNi0uNy0xNS0xLjktMjIuM2MxMy42LTYuMyAyOC43LTkuNyA0NC42LTkuN2w0Mi43IDBDNTkyLjIgMTkyIDY0MCAyMzkuOCA2NDAgMjk4LjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM2wtMjEzLjMgMHpNMjI0IDIyNGE5NiA5NiAwIDEgMSAxOTIgMCA5NiA5NiAwIDEgMSAtMTkyIDB6TTEyOCA0ODUuM0MxMjggNDExLjcgMTg3LjcgMzUyIDI2MS4zIDM1MmwxMTcuMyAwQzQ1Mi4zIDM1MiA1MTIgNDExLjcgNTEyIDQ4NS4zYzAgMTQuNy0xMS45IDI2LjctMjYuNyAyNi43bC0zMzAuNyAwYy0xNC43IDAtMjYuNy0xMS45LTI2LjctMjYuN3pcIl1cbn07XG5jb25zdCBmYUV5ZVNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V5ZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjA3MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDUyNS42IDM4Ni43YzM5LjYtNDAuNiA2Ni40LTg2LjEgNzkuOS0xMTguNGMzLjMtNy45IDMuMy0xNi43IDAtMjQuNmMtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMUM0NjUuNSA2OC44IDQwMC44IDMyIDMyMCAzMmMtNjguMiAwLTEyNSAyNi4zLTE2OS4zIDYwLjhMMzguOCA1LjF6TTIyMy4xIDE0OS41QzI0OC42IDEyNi4yIDI4Mi43IDExMiAzMjAgMTEyYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0YzAgMjQuOS02LjMgNDguMy0xNy40IDY4LjdMNDA4IDI5NC41YzguNC0xOS4zIDEwLjYtNDEuNCA0LjgtNjMuM2MtMTEuMS00MS41LTQ3LjgtNjkuNC04OC42LTcxLjFjLTUuOC0uMi05LjIgNi4xLTcuNCAxMS43YzIuMSA2LjQgMy4zIDEzLjIgMy4zIDIwLjNjMCAxMC4yLTIuNCAxOS44LTYuNiAyOC4zbC05MC4zLTcwLjh6TTM3MyAzODkuOWMtMTYuNCA2LjUtMzQuMyAxMC4xLTUzIDEwLjFjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0YzAtNi45IC41LTEzLjYgMS40LTIwLjJMODMuMSAxNjEuNUM2MC4zIDE5MS4yIDQ0IDIyMC44IDM0LjUgMjQzLjdjLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42YzE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjFDMTc0LjUgNDQzLjIgMjM5LjIgNDgwIDMyMCA0ODBjNDcuOCAwIDg5LjktMTIuOSAxMjYuMi0zMi41TDM3MyAzODkuOXpcIl1cbn07XG5jb25zdCBmYUZsYXNrVmlhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbGFzay12aWFsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGYzXCIsIFwiTTE3NSAzODkuNGMtOS44IDE2LTE1IDM0LjMtMTUgNTMuMWMtMTAgMy41LTIwLjggNS41LTMyIDUuNWMtNTMgMC05Ni00My05Ni05NkwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwTDk2IDBsNjQgMCA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMjQ1LjktNDkgNzkuNnpNOTYgNjRsMCA5NiA2NCAwIDAtOTZMOTYgNjR6TTM1MiAwTDQ4MCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTAuOUw2MjkuNyA0MDYuMmM2LjcgMTAuOSAxMC4zIDIzLjUgMTAuMyAzNi40YzAgMzguMy0zMS4xIDY5LjQtNjkuNCA2OS40bC0zMDkuMiAwYy0zOC4zIDAtNjkuNC0zMS4xLTY5LjQtNjkuNGMwLTEyLjggMy42LTI1LjQgMTAuMy0zNi40TDMyMCAyMTQuOSAzMjAgNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMHptMzIgNjRsMCAxNjBjMCA1LjktMS42IDExLjctNC43IDE2LjhMMzMwLjUgMzIwbDE3MSAwLTQ4LjgtNzkuMmMtMy4xLTUtNC43LTEwLjgtNC43LTE2LjhsMC0xNjAtNjQgMHpcIl1cbn07XG5jb25zdCBmYUhhbmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTMwNiwgOTk5NSwgXCJoYW5kLXBhcGVyXCJdLCBcImYyNTZcIiwgXCJNMjg4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjA4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjcyYzAgMS41IDAgMy4xIC4xIDQuNkw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRzLTE0LjYgNDEuMyAxLjQgNTYuNkwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NGwxOS4yIDBjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZsMC0yMDhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMTJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0yMDh6XCJdXG59O1xuY29uc3QgZmFIYW5kUGFwZXIgPSBmYUhhbmQ7XG5jb25zdCBmYU9tID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ29tJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzI5XSwgXCJmNjc5XCIsIFwiTTM3OS4zIDQuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTE2IDE2Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwxNiAxNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGwxNi0xNmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtMTYtMTZ6TTI4MSA2Ni43Yy0yLjItMS41LTQuOS0yLjUtNy43LTIuN2MtLjYgMC0xLjMtLjEtMS45IDBjLTMuOSAuMi03LjQgMS43LTEwLjEgNC4yYy0uOSAuOC0xLjYgMS43LTIuMyAyLjZjLTEuNyAyLjQtMi43IDUuMy0yLjkgOC41YzAgLjcgMCAxLjQgMCAyLjFjLjIgMi4yIC45IDQuMyAxLjkgNi4ybC4zIC42Yy4zIC42IC44IDEuNCAxLjQgMi40YzEuMiAyIDIuOSA0LjggNS4xIDguMmM0LjQgNi43IDExLjEgMTUuNSAyMCAyNC40QzMwMi40IDE0MS4xIDMzMC4zIDE2MCAzNjggMTYwYzMxLjIgMCA1Ni42LTEwLjQgNzMuOS0yMC4yYzguNy01IDE1LjYtOS45IDIwLjQtMTMuOGMyLjQtMS45IDQuMy0zLjYgNS43LTQuOWMuNy0uNiAxLjMtMS4yIDEuNy0xLjZsLjYtLjUgLjEtLjEgLjEtLjFzMCAwIDAgMHMwIDAgMCAwYzUuOS01LjggOS41LTEzLjkgOS41LTIyLjhjMC0xNy43LTE0LjMtMzItMzItMzJjLTguNyAwLTE2LjcgMy41LTIyLjQgOS4yYy0uMSAuMS0uMiAuMi0uNSAuNGMtLjUgLjUtMS41IDEuMy0yLjggMi40Yy0yLjcgMi4yLTYuOCA1LjItMTIuMSA4LjJDMzk5LjQgOTAuNCAzODQuOCA5NiAzNjggOTZjLTIwLjggMC00Mi40LTctNTkuNS0xNC42Yy04LjQtMy43LTE1LjQtNy41LTIwLjMtMTAuM2MtMi40LTEuNC00LjMtMi41LTUuNi0zLjNjLS42LS40LTEuMS0uNy0xLjQtLjlsLS4zLS4yek0xMTUuMiAxNjkuNmM4LTYgMTcuOS05LjYgMjguOC05LjZjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTM0LjIgMGMtNy42IDAtMTMuOCA2LjItMTMuOCAxMy44YzAgMS41IC4yIDIuOSAuNyA0LjRsOCAyNGM0LjQgMTMuMSAxNi42IDIxLjkgMzAuNCAyMS45bDguOSAwIDE2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRjLTUwLjggMC04Mi43LTIxLjUtMTAyLjItNDIuOGMtOS45LTEwLjgtMTYuNi0yMS42LTIwLjktMjkuN2MtMi4xLTQtMy42LTcuMy00LjUtOS42Yy0uNS0xLjEtLjgtMi0xLTIuNWwtLjItLjVjLS4zLS45LS43LTEuOC0xLjEtMi42Yy0xLjItMi4yLTIuOC00LTQuNy01LjRjLTEuOS0xLjQtNC4xLTIuMy02LjUtMi44Yy0xLjQtLjMtMi45LS4zLTQuNC0uMmMtMi41IC4yLTQuOCAxLTYuOCAyLjNjLTEuMSAuNy0yLjIgMS41LTMuMSAyLjVjLTIuNCAyLjUtNC4xIDUuOC00LjUgOS41Yy0uMSAuNi0uMSAxLjEtLjEgMS43YzAgMCAwIDAgMCAwYzAgLjggLjEgMS43IC4yIDIuNWwwIC4xYzAgLjMgLjEgLjggLjIgMS4zYy4yIDEuMSAuNCAyLjcgLjggNC42Yy44IDMuOSAyIDkuNCAzLjkgMTUuOWMzLjggMTMgMTAuMyAzMC40IDIxLjMgNDhDNDguNyA0NzYuMiA4OS40IDUxMiAxNjAgNTEyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4YzAtMjMuMy02LjItNDUuMi0xNy4xLTY0bDIyLjYgMGMyNS41IDAgNDkuOS0xMC4xIDY3LjktMjguMWwyNi41LTI2LjVjNi02IDE0LjEtOS40IDIyLjYtOS40bDUuNSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJjLTI1LjcgMC00MS40LTEyLjUtNTEuMi0yNS42Yy01LTYuNy04LjQtMTMuNC0xMC41LTE4LjZjLTEuMS0yLjUtMS44LTQuNi0yLjItNmMtLjItLjctLjQtMS4yLS41LTEuNWwtLjEtLjJjLS4zLTEuMy0uOC0yLjYtMS41LTMuOGMtMS4xLTItMi42LTMuOC00LjQtNS4xYy0yLjctMi02LTMuMi05LjYtMy4ybC0uMiAwYy04IC4xLTE0LjYgNi4xLTE1LjYgMTMuOWMwIDAgMCAwIDAgMGMwIC4zLS4xIC42LS4yIDEuMWMtLjEgLjktLjMgMi4xLS40IDMuNmMtLjMgMy0uNiA3LjMtLjYgMTIuNGMwIDEwLjEgMS4xIDIzLjkgNS44IDM4LjFjNC44IDE0LjMgMTMuNCAyOS4zIDI4LjYgNDAuN0MzNjguNyA0NzMuMyAzODkuMyA0ODAgNDE2IDQ4MGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMC01My00My05Ni05Ni05NmwtNS41IDBjLTI1LjUgMC00OS45IDEwLjEtNjcuOSAyOC4xbC0yNi41IDI2LjVjLTYgNi0xNC4xIDkuNC0yMi42IDkuNGwtNDguMyAwYzYuOS0xNC41IDEwLjgtMzAuOCAxMC44LTQ4YzAtNjEuOS01MC4xLTExMi0xMTItMTEyYy0yNS4yIDAtNDguNSA4LjMtNjcuMiAyMi40Yy0xNC4xIDEwLjYtMTcgMzAuNy02LjQgNDQuOHMzMC43IDE3IDQ0LjggNi40elwiXVxufTtcbmNvbnN0IGZhV29ybSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3b3JtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTk5XCIsIFwiTTI1NiA5NmMwLTUzIDQzLTk2IDk2LTk2bDM4LjQgMEM0MzkuOSAwIDQ4MCA0MC4xIDQ4MCA4OS42bDAgODYuNCAwIDE2IDAgMTg0YzAgNzUuMS02MC45IDEzNi0xMzYgMTM2cy0xMzYtNjAuOS0xMzYtMTM2bDAtODBjMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBsMCAxNjhjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xNjhjMC03NS4xIDYwLjktMTM2IDEzNi0xMzZzMTM2IDYwLjkgMTM2IDEzNmwwIDgwYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0xODQtMzIgMGMtNTMgMC05Ni00My05Ni05NnptMTQ0LThhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpcIl1cbn07XG5jb25zdCBmYUhvdXNlQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTBiXCIsIFwiTTMyMC43IDM1MmM4LjEtODkuNyA4My41LTE2MCAxNzUuMy0xNjBjOC45IDAgMTcuNiAuNyAyNi4xIDEuOUwzMDkuNSA3Yy02LTUtMTQtNy0yMS03cy0xNSAxLTIyIDhMMTAgMjMxLjVjLTcgNy0xMCAxNS0xMCAyNGMwIDE4IDE0IDMyLjEgMzIgMzIuMWwzMiAwIDAgNjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOGwwIDExMmMwIDIyLjEgMTcuOSA0MCA0MCA0MGwxNiAwYzEuMiAwIDIuNC0uMSAzLjYtLjJjMS41IC4xIDMgLjIgNC41IC4ybDMxLjkgMCAyNCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtMjQgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwIC43IDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43TDUxOC42IDM2OGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbmNvbnN0IGZhUGx1ZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbHVnJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjY4XSwgXCJmMWU2XCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJsMCA5NiA2NCAwIDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2IDY0IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgMzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhsMCA2Ny4yYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02Ny4yQzI5NyAzOTggMzUyIDMzMy40IDM1MiAyNTZsMC0zMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjB6XCJdXG59O1xuY29uc3QgZmFDaGV2cm9uVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hldnJvbi11cCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjA3N1wiLCBcIk0yMzMuNCAxMDUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDI1NiAxNzMuMyA4Ni42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxOTItMTkyelwiXVxufTtcbmNvbnN0IGZhSGFuZFNwb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtc3BvY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg0MDZdLCBcImYyNTlcIiwgXCJNMjQ2LjkgMjMuN0MyNDIuMyA2LjYgMjI0LjgtMy41IDIwNy43IDEuMXMtMjcuMiAyMi4xLTIyLjYgMzkuMkwyMzggMjM3LjhjMi41IDkuMi00LjUgMTguMi0xNCAxOC4yYy02LjQgMC0xMi00LjItMTMuOS0xMC4zTDE2Ni42IDEwMi43Yy01LjEtMTYuOS0yMy0yNi40LTM5LjktMjEuM3MtMjYuNCAyMy0yMS4zIDM5LjlsNjIuOCAyMDYuNGMyLjQgNy45LTcuMiAxMy44LTEzLjIgOC4xTDk5LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNHMtMTQuNiA0MS4zIDEuNCA1Ni42TDE1Ni44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDEwLjkgMCA4LjIgMGMuMSAwIC4xLS4xIC4xLS4xcy4xLS4xIC4xLS4xYzU4LjMtMy41IDEwOC42LTQzLjIgMTI1LjMtOTkuN2w4MS4yLTI3NWM1LTE2LjktNC43LTM0LjctMjEuNi0zOS44cy0zNC43IDQuNy0zOS44IDIxLjZMNDQzLjUgMjQ3LjFjLTEuNiA1LjMtNi40IDguOS0xMiA4LjljLTcuOSAwLTEzLjgtNy4zLTEyLjItMTUuMWwzNi0xNzAuM2MzLjctMTcuMy03LjQtMzQuMy0yNC43LTM3LjlzLTM0LjMgNy40LTM3LjkgMjQuN0wzNTUuMSAyMzUuMWMtMi42IDEyLjItMTMuMyAyMC45LTI1LjggMjAuOWMtMTEuOSAwLTIyLjQtOC0yNS40LTE5LjVsLTU3LTIxMi44elwiXVxufTtcbmNvbnN0IGZhU3RvcHdhdGNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0b3B3YXRjaCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzkyMDFdLCBcImYyZjJcIiwgXCJNMTc2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYgMCAwIDM0LjRDOTIuMyAxMTMuOCAxNiAyMDAgMTYgMzA0YzAgMTE0LjkgOTMuMSAyMDggMjA4IDIwOHMyMDgtOTMuMSAyMDgtMjA4YzAtNDEuOC0xMi4zLTgwLjctMzMuNS0xMTMuMmwyNC4xLTI0LjFjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzU1LjcgMTQzYy0yOC4xLTIzLTYyLjItMzguOC05OS43LTQ0LjZMMjU2IDY0bDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMjI0IDAgMTc2IDB6bTcyIDE5MmwwIDEyOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEyOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbmNvbnN0IGZhRmFjZUtpc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1raXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM1LCBcImtpc3NcIl0sIFwiZjU5NlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptNDguNy0xOTguM2M0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRjLTIuNyAxLjUtNS43IDMtOC43IDQuM2MzLjEgMS4zIDYgMi43IDguNyA0LjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3MtMy4xIDEzLjItNy4zIDE4LjNjLTQuMyA1LjItMTAuMSA5LjctMTYuNyAxMy40QzI3NC43IDQ0My4xIDI1Ny40IDQ0OCAyNDAgNDQ4Yy0zLjYgMC02LjgtMi41LTcuNy02cy42LTcuMiAzLjgtOWMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBjMCAwIDAgMCAwIDBsLjItLjFjLjItLjEgLjUtLjMgLjktLjVjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFjLS40LS4yLS43LS40LS45LS41bC0uMi0uMWMwIDAgMCAwIDAgMGMwIDAgMCAwIDAgMHMwIDAgMCAwYy0yLjUtMS40LTQuMS00LjEtNC4xLTdzMS42LTUuNiA0LjEtN2MwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGMwIDAgMCAwIDAgMGwuMi0uMSAuMy0uMiAuNi0uNGMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWwtLjQtLjMtLjUtLjMtLjItLjFjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMGMtMy4yLTEuOC00LjctNS41LTMuOC05czQuMS02IDcuNy02YzE3LjQgMCAzNC43IDQuOSA0Ny45IDEyLjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjR6TTE0NC40IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhS2lzcyA9IGZhRmFjZUtpc3M7XG5jb25zdCBmYUJyaWRnZUNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZS1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0Y2JcIiwgXCJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0czE0LjMgMzIgMzIgMzJsNDAgMCAwIDY0LTcyIDAgMCAxMjhjNTMgMCA5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMmwwLTcyLjItNzIgMCAwLTY0IDQwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMzJ6TTQ4OCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0zNjAgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjMyIDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43TDUxOC42IDM2OGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbmNvbnN0IGZhRmFjZUdyaW5Ub25ndWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXRvbmd1ZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUzOSwgXCJncmluLXRvbmd1ZVwiXSwgXCJmNTg5XCIsIFwiTTAgMjU2QzAgMzY4LjkgNzMuMSA0NjQuNyAxNzQuNSA0OTguOEMxNjUuMyA0ODQgMTYwIDQ2Ni42IDE2MCA0NDhsMC00Ny4zYy0yNC0xNy41LTQzLjEtNDEuNC01NC44LTY5LjJjLTUtMTEuOCA3LTIyLjUgMTkuMy0xOC43YzM5LjcgMTIuMiA4NC41IDE5IDEzMS44IDE5czkyLjEtNi44IDEzMS44LTE5YzEyLjMtMy44IDI0LjMgNi45IDE5LjMgMTguN2MtMTEuOCAyOC0zMS4xIDUyLTU1LjQgNjkuNmwwIDQ2LjljMCAxOC42LTUuMyAzNi0xNC41IDUwLjhDNDM4LjkgNDY0LjcgNTEyIDM2OC45IDUxMiAyNTZDNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NnptMTc2LjQtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMzIwIDQ0OGwwLTQ1LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOWMtMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMGMtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWwtMiAwYy0xNC43IDAtMjYuNiAxMS45LTI2LjYgMjYuNmwwIDQ1LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpcIl1cbn07XG5jb25zdCBmYUdyaW5Ub25ndWUgPSBmYUZhY2VHcmluVG9uZ3VlO1xuY29uc3QgZmFDaGVzc0Jpc2hvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1iaXNob3AnLFxuICBpY29uOiBbMzIwLCA1MTIsIFs5ODIxXSwgXCJmNDNhXCIsIFwiTTEyOCAwQzExMC4zIDAgOTYgMTQuMyA5NiAzMmMwIDE2LjEgMTEuOSAyOS40IDI3LjQgMzEuN0M3OC40IDEwNi44IDggMTkwIDggMjg4YzAgNDcuNCAzMC44IDcyLjMgNTYgODQuN0w2NCA0MDBsMTkyIDAgMC0yNy4zYzI1LjItMTIuNSA1Ni0zNy40IDU2LTg0LjdjMC0zNy4zLTEwLjItNzIuNC0yNS4zLTEwNC4xbC05OS40IDk5LjRjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMMjcwLjggMTU0LjZjLTIzLjItMzguMS01MS44LTY5LjUtNzQuMi05MC45QzIxMi4xIDYxLjQgMjI0IDQ4LjEgMjI0IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDEyOCAwek00OCA0MzJMNi42IDQ3My40Yy00LjIgNC4yLTYuNiAxMC02LjYgMTZDMCA1MDEuOSAxMC4xIDUxMiAyMi42IDUxMmwyNzQuNyAwYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZMMjcyIDQzMiA0OCA0MzJ6XCJdXG59O1xuY29uc3QgZmFGYWNlR3JpbldpbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXdpbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImdyaW4td2lua1wiXSwgXCJmNThjXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6bS0xNi45LTc5LjJjLTE3LjYtMjMuNS01Mi44LTIzLjUtNzAuNCAwYy01LjMgNy4xLTE1LjMgOC41LTIyLjQgMy4ycy04LjUtMTUuMy0zLjItMjIuNGMzMC40LTQwLjUgOTEuMi00MC41IDEyMS42IDBjNS4zIDcuMSAzLjkgMTcuMS0zLjIgMjIuNHMtMTcuMSAzLjktMjIuNC0zLjJ6TTE3Ni40IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFHcmluV2luayA9IGZhRmFjZUdyaW5XaW5rO1xuY29uc3QgZmFFYXJEZWFmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Vhci1kZWFmJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJkZWFmXCIsIFwiZGVhZm5lc3NcIiwgXCJoYXJkLW9mLWhlYXJpbmdcIl0sIFwiZjJhNFwiLCBcIk01MDIuNiA1NC42bC00MCA0MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNDAtNDBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptLTMyMCAzMjBsLTEyOCAxMjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDEyOC0xMjhjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMjQwIDEyOGMtNTcuNiAwLTEwNS4xIDQzLjYtMTExLjMgOTkuNWMtMS45IDE3LjYtMTcuOCAzMC4yLTM1LjMgMjguM3MtMzAuMi0xNy44LTI4LjMtMzUuM0M3NC44IDEzMi41IDE0OS40IDY0IDI0MCA2NGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NmMwIDQ2LTE3LjcgODcuOS00Ni42IDExOS4zYy0xMiAxMy0xNy40IDI0LjgtMTcuNCAzNC43bDAgNi4xYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNi4xYzAtMzIuOSAxNy40LTU5LjYgMzQuNC03OGMxOC40LTIwIDI5LjYtNDYuNiAyOS42LTc1LjljMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6bTAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6XCJdXG59O1xuY29uc3QgZmFEZWFmID0gZmFFYXJEZWFmO1xuY29uc3QgZmFEZWFmbmVzcyA9IGZhRWFyRGVhZjtcbmNvbnN0IGZhSGFyZE9mSGVhcmluZyA9IGZhRWFyRGVhZjtcbmNvbnN0IGZhUm9hZENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvYWQtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTY0XCIsIFwiTTIxMy4yIDMyTDI4OCAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA3NC44IDBjMjcuMSAwIDUxLjMgMTcuMSA2MC4zIDQyLjZsNDIuNyAxMjAuNmMtMTAuOS0yLjEtMjIuMi0zLjItMzMuOC0zLjJjLTU5LjUgMC0xMTIuMSAyOS42LTE0NCA3NC44bDAtNDIuOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyYzIuMyAwIDQuNi0uMyA2LjgtLjdjLTQuNSAxNS41LTYuOCAzMS44LTYuOCA0OC43YzAgNS40IC4yIDEwLjcgLjcgMTZsLS43IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRMODYuNiA0ODBDNTYuNSA0ODAgMzIgNDU1LjUgMzIgNDI1LjRjMC02LjIgMS4xLTEyLjQgMy4xLTE4LjJMMTUyLjkgNzQuNkMxNjIgNDkuMSAxODYuMSAzMiAyMTMuMiAzMnpNMzUyIDM2OGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMTEuMy00My4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEw0ODAgMzg1LjRsLTI4LjctMjguN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw3Mi03MmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG5jb25zdCBmYURpY2VGaXZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UtZml2ZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4NjBdLCBcImY1MjNcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek05NiAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0LTY0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDE2MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFTcXVhcmVSc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXJzcycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wicnNzLXNxdWFyZVwiXSwgXCJmMTQzXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNGMxMzcgMCAyNDggMTExIDI0OCAyNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMTAuNS04OS41LTIwMC0yMDAtMjAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGM4My45IDAgMTUyIDY4LjEgMTUyIDE1MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTU3LjQtNDYuNi0xMDQtMTA0LTEwNGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTAgMTIwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xuY29uc3QgZmFSc3NTcXVhcmUgPSBmYVNxdWFyZVJzcztcbmNvbnN0IGZhTGFuZE1pbmVPbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYW5kLW1pbmUtb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MWJcIiwgXCJNMzQ0IDI0bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTE5MiAzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMi0yNTYgMCAwLTMyem0tNzcuMyA5MC41YzguMS0xNi4zIDI0LjgtMjYuNSA0Mi45LTI2LjVsMzI0LjcgMGMxOC4yIDAgMzQuOCAxMC4zIDQyLjkgMjYuNWwyNy42IDU1LjJDNTYzLjUgNDg3IDU0OCA1MTIgNTI0LjIgNTEybC00MDguNCAwYy0yMy44IDAtMzkuMy0yNS0yOC42LTQ2LjNsMjcuNi01NS4yek0zNi4zIDEzOC4zYzcuNS0xMC45IDIyLjUtMTMuNiAzMy40LTYuMWwxMDQgNzJjMTAuOSA3LjUgMTMuNiAyMi41IDYuMSAzMy40cy0yMi41IDEzLjYtMzMuNCA2LjFsLTEwNC03MmMtMTAuOS03LjUtMTMuNi0yMi41LTYuMS0zMy40em01MzQuMS02LjFjMTAuOS03LjUgMjUuOC00LjggMzMuNCA2LjFzNC44IDI1LjgtNi4xIDMzLjRsLTEwNCA3MmMtMTAuOSA3LjUtMjUuOCA0LjgtMzMuNC02LjFzLTQuOC0yNS44IDYuMS0zMy40bDEwNC03MnpcIl1cbn07XG5jb25zdCBmYUlDdXJzb3IgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaS1jdXJzb3InLFxuICBpY29uOiBbMjU2LCA1MTIsIFtdLCBcImYyNDZcIiwgXCJNLjEgMjkuM0MtMS40IDQ3IDExLjcgNjIuNCAyOS4zIDYzLjlsOCAuN0M3MC41IDY3LjMgOTYgOTUgOTYgMTI4LjNMOTYgMjI0bC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCA5NS43YzAgMzMuMy0yNS41IDYxLTU4LjcgNjMuOGwtOCAuN0MxMS43IDQ0OS42LTEuNCA0NjUgLjEgNDgyLjdzMTYuOSAzMC43IDM0LjUgMjkuMmw4LS43YzM0LjEtMi44IDY0LjItMTguOSA4NS40LTQyLjljMjEuMiAyNCA1MS4yIDQwIDg1LjQgNDIuOWw4IC43YzE3LjYgMS41IDMzLjEtMTEuNiAzNC41LTI5LjJzLTExLjYtMzMuMS0yOS4yLTM0LjVsLTgtLjdDMTg1LjUgNDQ0LjcgMTYwIDQxNyAxNjAgMzgzLjdsMC05NS43IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC05NS43YzAtMzMuMyAyNS41LTYxIDU4LjctNjMuOGw4LS43YzE3LjYtMS41IDMwLjctMTYuOSAyOS4yLTM0LjVTMjM5LTEuNCAyMjEuMyAuMWwtOCAuN0MxNzkuMiAzLjYgMTQ5LjIgMTkuNyAxMjggNDMuN2MtMjEuMi0yNC01MS4yLTQwLTg1LjQtNDIuOWwtOC0uN0MxNy0xLjQgMS42IDExLjcgLjEgMjkuM3pcIl1cbn07XG5jb25zdCBmYVN0YW1wID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0YW1wJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNWJmXCIsIFwiTTMxMiAyMDEuOGMwLTE3LjQgOS4yLTMzLjIgMTkuOS00N0MzNDQuNSAxMzguNSAzNTIgMTE4LjEgMzUyIDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMjIuMSA3LjUgNDIuNSAyMC4xIDU4LjhjMTAuNyAxMy44IDE5LjkgMjkuNiAxOS45IDQ3YzAgMjkuOS0yNC4zIDU0LjItNTQuMiA1NC4yTDExMiAyNTZDNTAuMSAyNTYgMCAzMDYuMSAwIDM2OGMwIDIwLjkgMTMuNCAzOC43IDMyIDQ1LjNMMzIgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNTAuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNjMC02MS45LTUwLjEtMTEyLTExMi0xMTJsLTMzLjggMGMtMjkuOSAwLTU0LjItMjQuMy01NC4yLTU0LjJ6TTQxNiA0MTZsMCAzMkw5NiA0NDhsMC0zMiAzMjAgMHpcIl1cbn07XG5jb25zdCBmYVN0YWlycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGFpcnMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUyODlcIiwgXCJNMzg0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDAgMC05NnpcIl1cbn07XG5jb25zdCBmYUkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaScsXG4gIGljb246IFszMjAsIDUxMiwgWzEwNV0sIFwiNDlcIiwgXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDk2IDAgMCAzMjAtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMCAwLTMyMCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE2MCAzMiAzMiAzMnpcIl1cbn07XG5jb25zdCBmYUhyeXZuaWFTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hyeXZuaWEtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgWzgzNzIsIFwiaHJ5dm5pYVwiXSwgXCJmNmYyXCIsIFwiTTEyMS45IDExNi4yQzEzOC4zIDEwMy4xIDE1OC43IDk2IDE3OS42IDk2TDIyMyA5NmMyNy4xIDAgNDkgMjEuOSA0OSA0OWMwIDExLjUtNCAyMi40LTExLjEgMzFMMzIgMTc2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyMy41IDAtNTAuNiAyOC45Yy0xLjcgMS0zLjQgMi01LjEgMy4xTDMyIDI3MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMC4zIDBjLTIuOCA5LjktNC4zIDIwLjQtNC4zIDMxYzAgNjIuNCA1MC42IDExMyAxMTMgMTEzbDQzLjQgMGMzNS41IDAgNzAtMTIuMSA5Ny43LTM0LjNMMzA4IDQ0MWMxMy44LTExIDE2LTMxLjIgNS00NXMtMzEuMi0xNi00NS01bC01LjkgNC43Yy0xNi40IDEzLjEtMzYuNyAyMC4yLTU3LjcgMjAuMkwxNjEgNDE2Yy0yNy4xIDAtNDktMjEuOS00OS00OWMwLTExLjUgNC0yMi40IDExLjEtMzFMMzUyIDMzNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTIzLjUgMCA1MC42LTI4LjljMS43LTEgMy40LTIgNS4xLTMuMWw2Ny44IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIwLjMgMGMyLjgtMTAgNC4zLTIwLjQgNC4zLTMxYzAtNjIuNC01MC42LTExMy0xMTMtMTEzbC00My40IDBjLTM1LjUgMC03MCAxMi4xLTk3LjcgMzQuM0w3NiA3MWMtMTMuOCAxMS0xNiAzMS4yLTUgNDVzMzEuMiAxNiA0NSA1bDUuOS00Ljd6XCJdXG59O1xuY29uc3QgZmFIcnl2bmlhID0gZmFIcnl2bmlhU2lnbjtcbmNvbnN0IGZhUGlsbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGlsbHMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0ODRcIiwgXCJNMTEyIDk2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDExMiA5NiAwIDAtMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0wIDE0NEMwIDgyLjEgNTAuMSAzMiAxMTIgMzJzMTEyIDUwLjEgMTEyIDExMmwwIDIyNGMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMwIDQyOS45IDAgMzY4TDAgMTQ0ek01NTQuOSAzOTkuNGMtNy4xIDEyLjMtMjMuNyAxMy4xLTMzLjggMy4xTDMzMy41IDIxNC45Yy0xMC0xMC05LjMtMjYuNyAzLjEtMzMuOEMzNjAgMTY3LjcgMzg3LjEgMTYwIDQxNiAxNjBjODguNCAwIDE2MCA3MS42IDE2MCAxNjBjMCAyOC45LTcuNyA1Ni0yMS4xIDc5LjR6bS01OS41IDU5LjVDNDcyIDQ3Mi4zIDQ0NC45IDQ4MCA0MTYgNDgwYy04OC40IDAtMTYwLTcxLjYtMTYwLTE2MGMwLTI4LjkgNy43LTU2IDIxLjEtNzkuNGM3LjEtMTIuMyAyMy43LTEzLjEgMzMuOC0zLjFMNDk4LjUgNDI1LjFjMTAgMTAgOS4zIDI2LjctMy4xIDMzLjh6XCJdXG59O1xuY29uc3QgZmFGYWNlR3JpbldpZGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLXdpZGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTUsIFwiZ3Jpbi1hbHRcIl0sIFwiZjU4MVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg4LjEgMzEyLjhjMTIuMy0zLjggMjQuMyA2LjkgMTkuMyAxOC43QzM4Mi40IDM5MC42IDMyNC4yIDQzMiAyNTYuMyA0MzJzLTEyNi4yLTQxLjQtMTUxLjEtMTAwLjVjLTUtMTEuOCA3LTIyLjUgMTkuMy0xOC43YzM5LjcgMTIuMiA4NC41IDE5IDEzMS44IDE5czkyLjEtNi44IDEzMS44LTE5ek0yMDggMTkyYzAgMzUuMy0xNC4zIDY0LTMyIDY0cy0zMi0yOC43LTMyLTY0czE0LjMtNjQgMzItNjRzMzIgMjguNyAzMiA2NHptMTI4IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0czMyIDI4LjcgMzIgNjRzLTE0LjMgNjQtMzIgNjR6XCJdXG59O1xuY29uc3QgZmFHcmluQWx0ID0gZmFGYWNlR3JpbldpZGU7XG5jb25zdCBmYVRvb3RoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Rvb3RoJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5NDYzXSwgXCJmNWM5XCIsIFwiTTE4Ni4xIDUyLjFDMTY5LjMgMzkuMSAxNDguNyAzMiAxMjcuNSAzMkM3NC43IDMyIDMyIDc0LjcgMzIgMTI3LjVsMCA2LjJjMCAxNS44IDMuNyAzMS4zIDEwLjcgNDUuNWwyMy41IDQ3LjFjNC41IDguOSA3LjYgMTguNCA5LjQgMjguMmwzNi43IDIwNS44YzIgMTEuMiAxMS42IDE5LjQgMjIuOSAxOS44czIxLjQtNy40IDI0LTE4LjRsMjguOS0xMjEuM0MxOTIuMiAzMjMuNyAyMDcgMzEyIDIyNCAzMTJzMzEuOCAxMS43IDM1LjggMjguM2wyOC45IDEyMS4zYzIuNiAxMS4xIDEyLjcgMTguOCAyNCAxOC40czIwLjktOC42IDIyLjktMTkuOGwzNi43LTIwNS44YzEuOC05LjggNC45LTE5LjMgOS40LTI4LjJsMjMuNS00Ny4xYzcuMS0xNC4xIDEwLjctMjkuNyAxMC43LTQ1LjVsMC0yLjFjMC01NS00NC42LTk5LjYtOTkuNi05OS42Yy0yNC4xIDAtNDcuNCA4LjgtNjUuNiAyNC42bC0zLjIgMi44IDE5LjUgMTUuMmM3IDUuNCA4LjIgMTUuNSAyLjggMjIuNXMtMTUuNSA4LjItMjIuNSAyLjhsLTI0LjQtMTktMzctMjguOHpcIl1cbn07XG5jb25zdCBmYVYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndicsXG4gIGljb246IFszODQsIDUxMiwgWzExOF0sIFwiNTZcIiwgXCJNMTkuNyAzNC41YzE2LjMtNi44IDM1IC45IDQxLjggMTcuMkwxOTIgMzY0LjggMzIyLjUgNTEuN2M2LjgtMTYuMyAyNS41LTI0IDQxLjgtMTcuMnMyNCAyNS41IDE3LjIgNDEuOGwtMTYwIDM4NGMtNSAxMS45LTE2LjYgMTkuNy0yOS41IDE5LjdzLTI0LjYtNy44LTI5LjUtMTkuN0wyLjUgNzYuM2MtNi44LTE2LjMgLjktMzUgMTcuMi00MS44elwiXVxufTtcbmNvbnN0IGZhQmFuZ2xhZGVzaGlUYWthU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYW5nbGFkZXNoaS10YWthLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUyZTZcIiwgXCJNMzYgMzIuM0MxOC40IDMwLjEgMi40IDQyLjUgLjIgNjBTMTAuNSA5My42IDI4IDk1LjhsNy45IDFjMTYgMiAyOCAxNS42IDI4IDMxLjhMNjQgMTYwbC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAxNjBjMCA1MyA0MyA5NiA5NiA5NmwzMiAwYzEwNiAwIDE5Mi04NiAxOTItMTkybDAtMzJjMC01My00My05Ni05Ni05NmwtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMS41YzAtNDguNC0zNi4xLTg5LjMtODQuMS05NS4zbC03LjktMXpcIl1cbn07XG5jb25zdCBmYUJpY3ljbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmljeWNsZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY5MF0sIFwiZjIwNlwiLCBcIk0zMTIgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjUuNyAwIDM0LjYgNjQtMTQ5LjQgMC0yNy40LTM4QzE5MSA5OS43IDE4My43IDk2IDE3NiA5NmwtNTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0My43IDAgMjIuMSAzMC43LTI2LjYgNTMuMWMtMTAtMi41LTIwLjUtMy44LTMxLjItMy44QzU3LjMgMjI0IDAgMjgxLjMgMCAzNTJzNTcuMyAxMjggMTI4IDEyOGM2NS4zIDAgMTE5LjEtNDguOSAxMjctMTEybDQ5IDBjOC41IDAgMTYuMy00LjUgMjAuNy0xMS44bDg0LjgtMTQzLjUgMjEuNyA0MC4xQzQwMi40IDI3Ni4zIDM4NCAzMTIgMzg0IDM1MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4cy01Ny4zLTEyOC0xMjgtMTI4Yy0xMy41IDAtMjYuNSAyLjEtMzguNyA2TDM3NS40IDQ4LjhDMzY5LjggMzguNCAzNTkgMzIgMzQ3LjIgMzJMMzEyIDMyek00NTguNiAzMDMuN2wzMi4zIDU5LjdjNi4zIDExLjcgMjAuOSAxNiAzMi41IDkuN3MxNi0yMC45IDkuNy0zMi41bC0zMi4zLTU5LjdjMy42LS42IDcuNC0uOSAxMS4yLS45YzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyYzAtMTguNiA3LTM1LjUgMTguNi00OC4zek0xMzMuMiAzNjhsNjUgMGMtNy4zIDMyLjEtMzYgNTYtNzAuMiA1NmMtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmMxLjcgMCAzLjQgLjEgNS4xIC4ybC0yNC4yIDQ4LjVjLTkgMTguMSA0LjEgMzkuNCAyNC4zIDM5LjR6bTMzLjctNDhsNTAuNy0xMDEuMyA3Mi45IDEwMS4yLS4xIC4xLTEyMy41IDB6bTkwLjYtMTI4bDEwOC41IDBMMzE3IDI3NC44IDI1Ny40IDE5MnpcIl1cbn07XG5jb25zdCBmYVN0YWZmU25ha2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RhZmYtc25ha2UnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcInJvZC1hc2NsZXBpdXNcIiwgXCJyb2Qtc25ha2VcIiwgXCJzdGFmZi1hZXNjdWxhcGl1c1wiXSwgXCJlNTc5XCIsIFwiTTIyMi42IDQzLjJsLS4xIDQuOEwyODggNDhjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTQwIDAgMC04MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC00MCAwLTI4IDAtNC41IDE0NCA0MC41IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTE2IDAgMC04MCAxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC00MyAwLTMuMSA5OS41TDIwOC41IDQ5NWwwIDFjLS4zIDguOS03LjYgMTYtMTYuNSAxNnMtMTYuMi03LjEtMTYuNS0xNmwwLTEtMS0zMUwxMzYgNDY0Yy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwbDM2IDAtMS0zMi0xOSAwYy01MyAwLTk2LTQzLTk2LTk2YzAtNDcuNiAzNC42LTg3LjEgODAtOTQuN2wwIDk0LjdjMCA4LjggNy4yIDE2IDE2IDE2bDE2LjUgMEwxNjQgMTI4bC0yOCAwLTEzLjQgMGMtOSAxOC45LTI4LjMgMzItNTAuNiAzMmwtMTYgMGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZTMjUuMSA0OCA1NiA0OGw4IDAgOCAwIDg5LjUgMC0uMS00LjhMMTYxIDMyYzAtLjcgMC0xLjMgMC0xLjljLjUtMTYuNiAxNC4xLTMwIDMxLTMwczMwLjUgMTMuNCAzMSAzMGMwIC42IDAgMS4zIDAgMS45bC0uNCAxMS4yek02NCAxMTJhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyelwiXVxufTtcbmNvbnN0IGZhUm9kQXNjbGVwaXVzID0gZmFTdGFmZlNuYWtlO1xuY29uc3QgZmFSb2RTbmFrZSA9IGZhU3RhZmZTbmFrZTtcbmNvbnN0IGZhU3RhZmZBZXNjdWxhcGl1cyA9IGZhU3RhZmZTbmFrZTtcbmNvbnN0IGZhSGVhZFNpZGVDb3VnaFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWQtc2lkZS1jb3VnaC1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MlwiLCBcIk00NDggMzI1LjhsNDQgMzQuNWM4LjEgMS40IDE0LjggNi44IDE4IDE0LjFMNTUyLjkgNDA4YzEwLjYgLjQgMTkuNSA3LjYgMjIuMiAxNy40bDM5LjEgMzAuNmMuNiAwIDEuMi0uMSAxLjgtLjFjMTEuMSAwIDIwLjQgNy41IDIzLjIgMTcuOGwtMy45IDBjNi4yIDguNSA2LjQgMjAuNC0uNCAyOWMtOC4yIDEwLjQtMjMuMyAxMi4zLTMzLjcgNC4xTDkuMiA0Mi45Qy0xLjIgMzQuNy0zLjEgMTkuNiA1LjEgOS4yUzI4LjQtMy4xIDM4LjggNS4xTDg5LjYgNDQuOUMxMjcgMTYuNyAxNzMuNSAwIDIyNCAwbDI0IDBjOTUuMiAwIDE4MS4yIDY5LjMgMTk3LjMgMTYwLjJjMi4zIDEzIDYuOCAyNS43IDE1LjEgMzZsNDIgNTIuNmM2LjIgNy44IDkuNiAxNy40IDkuNiAyNy40YzAgMjQuMi0xOS42IDQzLjgtNDMuOCA0My44TDQ0OCAzMjBzMCAwIDAgMGwwIDUuOHpNMCAyMjQuMmMwLTM4LjcgOS44LTc1LjEgMjcuMS0xMDYuOUwzNDEuOCAzNjUuM2wtMi41IC4zYy0xMSAxLjQtMTkuMiAxMC43LTE5LjIgMjEuOGMwIDExLjYgOSAyMS4yIDIwLjYgMjEuOWw2MiAzLjkgNDMgMzMuOUM0MzkuMyA0NjYuMiA0MjEuMiA0ODAgNDAwIDQ4MGwtODAgMCAwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQwIDBzMCAwIDAgMEw5NiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNzIuN2MwLTE2LjctNi45LTMyLjUtMTcuMS00NS44QzE2LjYgMzIyLjQgMCAyNzQuMSAwIDIyNC4yek02MTYgMzYwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTY0LTQ4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAtMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG5jb25zdCBmYVRydWNrTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cnVjay1tZWRpY2FsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjU3LCBcImFtYnVsYW5jZVwiXSwgXCJmMGY5XCIsIFwiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwTDM2OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDggNTAuNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDU4OS4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgMTguNyAwIDMyIDAgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsLTEyOCAwYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bC0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4ek00MTYgMjU2bDEyOCAwIDAtMTguN0w0NjYuNyAxNjAgNDE2IDE2MGwwIDk2ek0xNjAgNDY0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMzY4LTQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTE3NiA4MGwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG5jb25zdCBmYUFtYnVsYW5jZSA9IGZhVHJ1Y2tNZWRpY2FsO1xuY29uc3QgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWF0LWF3bi1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OThcIiwgXCJNNTA1IDQxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzgzIDk1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODgtODh6TTMwNS41IDI3LjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI3MS41IDM4LjZjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44bC0xMS4zLTExLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0xMS4zIDExLjNjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44TDEwMS44IDIzMWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNjcuOSAyNDIuM2MtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNEw5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguOS02OC45IDEyLjIgMTIuMmMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBsMTEuMy0xMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMS4zLTExLjNjLTIxLjgtMjEuOC00OS42LTM0LjEtNzguMS0zNi45bDMxLjktMzEuOSAxMi4yIDEyLjJjMjIuNSAyMi41IDUzLjMgMzEuNSA4Mi40IDI3YzAtMSAwLTIuMSAwLTMuMWMwLTMzLjEgOS4xLTY0LjEgMjUtOTAuNmMtMTUuNS04LjctMzIuNS0xMy44LTQ5LjgtMTUuNWwzMS45LTMxLjkgMTIuMiAxMi4yYzYgNiAxMi42IDExLjEgMTkuNyAxNS4yYzI3LjUtMzQgNjcuMy01Ny41IDExMi42LTYzLjhjLTQuMS0zLjgtOC40LTcuMy0xMi45LTEwLjVMNTA1IDEzN2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01OS40IDU5LjRjLTIwLjYtNC40LTQyLTMuNy02Mi4zIDIuMWM2LjEtMjEuMyA2LjYtNDMuOCAxLjQtNjUuM0w0MDkgNDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzMjkuMSA1Mi45Yy0zLjctNS03LjgtOS44LTEyLjQtMTQuM0wzMDUuNSAyNy4zek00OTYgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC05NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAtMTQ0YzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhU25vd21hbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbm93bWFuJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTczMSwgOTkyNF0sIFwiZjdkMFwiLCBcIk0zNDEuMSAxNDAuNmMtMiAzLjktMS42IDguNiAxLjIgMTJjNyA4LjUgMTIuOSAxOC4xIDE3LjIgMjguNEw0MDggMTYwLjJsMC00MC4yYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxOS42IDIyLjUtOS43YzEyLjItNS4yIDI2LjMgLjQgMzEuNSAxMi42cy0uNCAyNi4zLTEyLjYgMzEuNWwtNTYgMjQtNzMuNiAzMS41Yy0uNSA5LjUtMi4xIDE4LjYtNC44IDI3LjNjLTEuMiAzLjgtLjEgOCAyLjggMTAuOEMzOTYuNyAyOTYuOSA0MTYgMzM4LjIgNDE2IDM4NGMwIDQ0LjctMTguMyA4NS00Ny44IDExNC4xYy05LjkgOS43LTIzLjcgMTMuOS0zNy41IDEzLjlsLTE0OS4zIDBjLTEzLjkgMC0yNy43LTQuMi0zNy41LTEzLjlDMTE0LjMgNDY5IDk2IDQyOC43IDk2IDM4NGMwLTQ1LjggMTkuMy04Ny4xIDUwLjEtMTE2LjNjMi45LTIuOCA0LTYuOSAyLjgtMTAuOGMtMi43LTguNy00LjMtMTcuOS00LjgtMjcuM0w3MC41IDE5OC4xbC01Ni0yNEMyLjQgMTY4LjgtMy4zIDE1NC43IDEuOSAxNDIuNXMxOS4zLTE3LjggMzEuNS0xMi42TDU2IDEzOS42IDU2IDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAuMkwxNTIuNiAxODFjNC4zLTEwLjMgMTAuMS0xOS45IDE3LjItMjguNGMyLjgtMy40IDMuMy04LjEgMS4yLTEyQzE2NCAxMjcuMiAxNjAgMTEyLjEgMTYwIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAxNi4xLTQgMzEuMi0xMC45IDQ0LjZ6TTIyNCA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTQ4IDEyOGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0tMTYgODBhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0xNiA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwek0yODggOTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0tNDggMjRsMCAzLjJjMCAzLjIgLjggNi4zIDIuMyA5bDkgMTYuOWMuOSAxLjcgMi43IDIuOCA0LjcgMi44czMuOC0xLjEgNC43LTIuOGw5LTE2LjljMS41LTIuOCAyLjMtNS45IDIuMy05bDAtMy4yYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2elwiXVxufTtcbmNvbnN0IGZhTW9ydGFyUGVzdGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vcnRhci1wZXN0bGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YTdcIiwgXCJNNTA0LjMgMTEuMUM0OTMuMy0xLjYgNDc0LjUtMy43IDQ2MSA2LjJMMjUyLjMgMTYwbDE0NC45IDBMNTAyLjYgNTQuNmMxMS44LTExLjggMTIuNi0zMC44IDEuNi00My41ek0zMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJjMCA4Mi41IDQzLjQgMTQ3LjcgMTIzLjkgMTc2LjJjLTExLjEgMTMuOS0xOS40IDMwLjMtMjMuOSA0OC4xQzEyNy42IDQ5Ny40IDE0Mi4zIDUxMiAxNjAgNTEybDE5MiAwYzE3LjcgMCAzMi40LTE0LjYgMjguMS0zMS43Yy00LjUtMTcuOC0xMi44LTM0LjEtMjMuOS00OC4xQzQzNi42IDQwMy43IDQ4MCAzMzguNSA0ODAgMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE5MnpcIl1cbn07XG5jb25zdCBmYVJvYWRCYXJyaWVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvYWQtYmFycmllcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2MlwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xODEuN0wxNDkuMiA5NiA2NCA5NmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek00MDUuMiA5NmwtNzQuMyAwLTUuNCAxMC43TDIzNC44IDI4OGw3NC4zIDAgNS40LTEwLjdMNDA1LjIgOTZ6TTM2Mi44IDI4OGw3NC4zIDAgNS40LTEwLjdMNTMzLjIgOTZsLTc0LjMgMC01LjQgMTAuN0wzNjIuOCAyODh6TTIwMi44IDk2bC01LjQgMTAuN0wxMDYuOCAyODhsNzQuMyAwIDUuNC0xMC43TDI3Ny4yIDk2bC03NC4zIDB6bTI4OCAxOTJsODUuMiAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA1My43TDQ5MC44IDI4OHpcIl1cbn07XG5jb25zdCBmYVNjaG9vbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzY2hvb2wnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5NzldLCBcImY1NDlcIiwgXCJNMzM3LjggNS40QzMyNy0xLjggMzEzLTEuOCAzMDIuMiA1LjRMMTY2LjMgOTYgNDggOTZDMjEuNSA5NiAwIDExNy41IDAgMTQ0TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIwOCAwIDAtOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGwwIDk2IDIwOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzIwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ3My43IDk2IDMzNy44IDUuNHpNOTYgMTkybDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZ6bTQwMCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA2NGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0ek05NiAzMjBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA2NGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnptNDAwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDY0YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNjR6TTIzMiAxNzZhODggODggMCAxIDEgMTc2IDAgODggODggMCAxIDEgLTE3NiAwem04OC00OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDAgMC0xNmMwLTguOC03LjItMTYtMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFJZ2xvbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpZ2xvbycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjdhZVwiLCBcIk0zMjAgMzMuOEwzMjAgMTYwIDQ4LjUgMTYwQzEwMC4yIDgyLjggMTg4LjEgMzIgMjg4IDMyYzEwLjggMCAyMS41IC42IDMyIDEuOHpNMzUyIDE2MGwwLTEyMC45QzQyNC45IDU1LjcgNDg3LjIgOTkuOCA1MjcuNSAxNjBMMzUyIDE2MHpNMjkuOSAxOTJMOTYgMTkybDAgMTI4TDAgMzIwYzAtNDYgMTAuOC04OS40IDI5LjktMTI4ek0xOTIgMzIwbC02NCAwIDAtMTI4IDMyMCAwIDAgMTI4LTY0IDAgMCAzMiAxOTIgMCAwIDgwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNzYgMCAwLTEyOGMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NGwwIDEyOEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtODAgMTkyIDAgMC0zMnptMjg4IDBsMC0xMjggNjYuMSAwYzE5LjIgMzguNiAyOS45IDgyIDI5LjkgMTI4bC05NiAwelwiXVxufTtcbmNvbnN0IGZhSm9pbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnam9pbnQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1OTVcIiwgXCJNNDQ4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTFjMCA1NS4yIDIxLjkgMTA4LjEgNjAuOSAxNDcuMWwyMSAyMWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOWwwIDExYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMWMwLTI5LjctMTEuOC01OC4yLTMyLjgtNzkuMmwtMjEtMjFDNDYzLjIgMTE3LjggNDQ4IDgxLjIgNDQ4IDQzbDAtMTF6TTU3NiAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExYzAtNTUuMi0yMS45LTEwOC4xLTYwLjktMTQ3LjFsLTIxLTIxYy05LTktMTQuMS0yMS4yLTE0LjEtMzMuOWwwLTExYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTFjMCAyOS43IDExLjggNTguMiAzMi44IDc5LjJsMjEgMjFjMjcgMjcgNDIuMiA2My42IDQyLjIgMTAxLjhsMCAxMXpNMjI5LjggMzYwYy00LjctMi4zLTEwLTIuNy0xNS4yLTJjLTM3LjggNS42LTc1LjIgMTQuMy0xMDYuOSAyMi44QzgxLjMgMzg4IDU4LjMgMzk1LjEgNDIgNDAwLjRjLTguMiAyLjctMTQuNyA0LjktMTkuMiA2LjVjLTIuMyAuOC00IDEuNC01LjIgMS44bC0xLjMgLjVDNi44IDQxMi41IDAgNDIxLjQgMCA0MzJzNi44IDE5LjUgMTYuMyAyMi43bDEuMyAuNWMxLjIgLjQgMyAxLjEgNS4yIDEuOGM0LjUgMS42IDExIDMuOCAxOS4yIDYuNWMxNi4zIDUuNCAzOS4yIDEyLjUgNjUuNyAxOS42QzE2MC4zIDQ5Ny4zIDIyOC44IDUxMiAyODggNTEybDY3LjMgMGM0LjEgMCA2LjMtNS4xIDMuNi04LjNMMjU2LjUgMzgwLjhjLTcuNC04LjktMTYuNS0xNS45LTI2LjctMjAuOHpNNDQ1IDUxMmwxOSAwIDUxLjMgMGM0LjEgMCA2LjMtNS4xIDMuNi04LjNMNDE2LjUgMzgwLjhDNDAxLjMgMzYyLjUgMzc4LjggMzUyIDM1NSAzNTJsLTE5IDAtNDggMGMtMS4xIDAtMi4zIDAtMy40IDBjLTQuMSAwLTYuMiA1LjEtMy41IDguM0wzODMuNSA0ODMuMkMzOTguNyA1MDEuNSA0MjEuMiA1MTIgNDQ1IDUxMnptLTMuOS0xNTEuN0w1NDMuNSA0ODMuMmMxNC42IDE3LjUgMzUuOSAyNy45IDU4LjYgMjguN2MyMS4xLTEuMSAzNy45LTE4LjYgMzcuOS0zOS45bDAtODBjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTE1NS4zIDBjLTQuMSAwLTYuMyA1LjEtMy42IDguM3pcIl1cbn07XG5jb25zdCBmYUFuZ2xlUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtcmlnaHQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFs4MjUwXSwgXCJmMTA1XCIsIFwiTTI3OC42IDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xNjAgMTYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyMTAuNyAyNTYgNzMuNCAxMTguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwelwiXVxufTtcbmNvbnN0IGZhSG9yc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG9yc2UnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMTRdLCBcImY2ZjBcIiwgXCJNNDQ4IDIzOC4xbDAtNzguMSAxNiAwIDkuOCAxOS42YzEyLjUgMjUuMSA0Mi4yIDM2LjQgNjguMyAyNmMyMC41LTguMiAzMy45LTI4IDMzLjktNTAuMUw1NzYgODBjMC0xOS4xLTguNC0zNi4zLTIxLjctNDhsNS43IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMNDgwIDAgNDQ4IDBDMzc3LjMgMCAzMjAgNTcuMyAzMjAgMTI4bC05NiAwLTIwLjggMC01NC40IDBjLTMwLjcgMC01Ny42IDE2LjMtNzIuNSA0MC44QzMzLjIgMTc0LjUgMCAyMTEuNCAwIDI1NmwwIDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC01NmMwLTEzLjQgNi42LTI1LjIgMTYuNy0zMi41YzEuNiAxMyA2LjMgMjUuNCAxMy42IDM2LjRsMjguMiA0Mi40YzguMyAxMi40IDYuNCAyOC43LTEuMiA0MS42Yy0xNi41IDI4LTIwLjYgNjIuMi0xMCA5My45bDE3LjUgNTIuNGM0LjQgMTMuMSAxNi42IDIxLjkgMzAuNCAyMS45bDMzLjcgMGMyMS44IDAgMzcuMy0yMS40IDMwLjQtNDIuMWwtMjAuOC02Mi41Yy0yLjEtNi40LS41LTEzLjQgNC4zLTE4LjJsMTIuNy0xMi43YzEzLjItMTMuMiAyMC42LTMxLjEgMjAuNi00OS43YzAtMi4zLS4xLTQuNi0uMy02LjlsODQgMjRjNC4xIDEuMiA4LjIgMi4xIDEyLjMgMi44TDMyMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2NC4zYzE5LjItMTkuMiAzMS41LTQ1LjcgMzItNzUuN2MwIDAgMCAwIDAgMGwwLTEuOXpNNDk2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG5jb25zdCBmYVEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncScsXG4gIGljb246IFs0NDgsIDUxMiwgWzExM10sIFwiNTFcIiwgXCJNNjQgMjU2YzAgODguNCA3MS42IDE2MCAxNjAgMTYwYzI4LjkgMCA1Ni03LjcgNzkuNC0yMS4xbC03Mi04Ni40Yy0xMS4zLTEzLjYtOS41LTMzLjggNC4xLTQ1LjFzMzMuOC05LjUgNDUuMSA0LjFsNzAuOSA4NS4xQzM3MS45IDMyNS44IDM4NCAyOTIuMyAzODQgMjU2YzAtODguNC03MS42LTE2MC0xNjAtMTYwUzY0IDE2Ny42IDY0IDI1NnpNMzQ0LjkgNDQ0LjZDMzEwIDQ2NyAyNjguNSA0ODAgMjI0IDQ4MEMxMDAuMyA0ODAgMCAzNzkuNyAwIDI1NlMxMDAuMyAzMiAyMjQgMzJzMjI0IDEwMC4zIDIyNCAyMjRjMCA1Ni4xLTIwLjYgMTA3LjQtNTQuNyAxNDYuN2w0Ny4zIDU2LjhjMTEuMyAxMy42IDkuNSAzMy44LTQuMSA0NS4xcy0zMy44IDkuNS00NS4xLTQuMWwtNDYuNi01NS45elwiXVxufTtcbmNvbnN0IGZhRyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTAzXSwgXCI0N1wiLCBcIk0yMjQgOTZDMTM1LjYgOTYgNjQgMTY3LjYgNjQgMjU2czcxLjYgMTYwIDE2MCAxNjBjNzcuNCAwIDE0Mi01NSAxNTYuOC0xMjhMMjU2IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDQgMGMyNS44IDAgNDkuNiAyMS40IDQ3LjIgNTAuNkM0MzcuOCAzODkuNiAzNDEuNCA0ODAgMjI0IDQ4MEMxMDAuMyA0ODAgMCAzNzkuNyAwIDI1NlMxMDAuMyAzMiAyMjQgMzJjNTcuNCAwIDEwOS43IDIxLjYgMTQ5LjMgNTdjMTMuMiAxMS44IDE0LjMgMzIgMi41IDQ1LjJzLTMyIDE0LjMtNDUuMiAyLjVDMzAyLjMgMTExLjQgMjY1IDk2IDIyNCA5NnpcIl1cbn07XG5jb25zdCBmYU5vdGVzTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdub3Rlcy1tZWRpY2FsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDgxXCIsIFwiTTk2IDM1Mkw5NiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyNTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5Ny41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zbC01OC41IDU4LjVjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMMTYwIDQxNmMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTI3MiAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTI0IDMzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYwIDBDNjAuOSA1MTIgMCA0NTEuMSAwIDM3NkwwIDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjI0YzAgNDguNiAzOS40IDg4IDg4IDg4bDE2MCAwelwiXVxufTtcbmNvbnN0IGZhVGVtcGVyYXR1cmVIYWxmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbXBlcmF0dXJlLWhhbGYnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjc3NzcsIFwidGVtcGVyYXR1cmUtMlwiLCBcInRoZXJtb21ldGVyLTJcIiwgXCJ0aGVybW9tZXRlci1oYWxmXCJdLCBcImYyYzlcIiwgXCJNMTYwIDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2NC41YzAgMTcuMy03LjEgMzEuOS0xNS4zIDQyLjVDODYuMiAzMzIuNiA4MCAzNDkuNSA4MCAzNjhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTE4LjUtNi4yLTM1LjQtMTYuNy00OC45Yy04LjItMTAuNi0xNS4zLTI1LjItMTUuMy00Mi41TDIwOCAxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDExMkM0OCA1MC4yIDk4LjEgMCAxNjAgMHMxMTIgNTAuMSAxMTIgMTEybDAgMTY0LjRjMCAuMSAuMSAuMyAuMiAuNmMuMiAuNiAuOCAxLjYgMS43IDIuOGMxOC45IDI0LjQgMzAuMSA1NSAzMC4xIDg4LjFjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZMNDggMTEyek0yMDggMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM0wxNDQgMjA4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMTQuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdXG59O1xuY29uc3QgZmFUZW1wZXJhdHVyZTIgPSBmYVRlbXBlcmF0dXJlSGFsZjtcbmNvbnN0IGZhVGhlcm1vbWV0ZXIyID0gZmFUZW1wZXJhdHVyZUhhbGY7XG5jb25zdCBmYVRoZXJtb21ldGVySGFsZiA9IGZhVGVtcGVyYXR1cmVIYWxmO1xuY29uc3QgZmFEb25nU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb25nLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxNjlcIiwgXCJNMjg4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgNDkuMWMtMTguOC0xMC45LTQwLjctMTcuMS02NC0xNy4xYy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOHM1Ny4zIDEyOCAxMjggMTI4YzI0LjUgMCA0Ny40LTYuOSA2Ni44LTE4LjhjNSAxMS4xIDE2LjIgMTguOCAyOS4yIDE4LjhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NiAwLTE2MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMTI4IDI4OGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0NDh6XCJdXG59O1xuY29uc3QgZmFDYXBzdWxlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXBzdWxlcycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjQ2YlwiLCBcIk02NCAxNDRjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMi05NiAwIDAtMTEyek0wIDE0NEwwIDM2OGMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEybDAtMTc4LjRjMS44IDE5LjEgOC4yIDM4IDE5LjggNTQuOEwzNzIuMyA0MzEuN2MzNS41IDUxLjcgMTA1LjMgNjQuMyAxNTYgMjguMXM2My0xMDcuNSAyNy41LTE1OS4yTDQyNy4zIDExMy4zQzM5MS44IDYxLjUgMzIxLjkgNDkgMjcxLjMgODUuMmMtMjggMjAtNDQuMyA1MC44LTQ3LjMgODNsMC0yNC4yYzAtNjEuOS01MC4xLTExMi0xMTItMTEyUzAgODIuMSAwIDE0NHptMjk2LjYgNjQuMmMtMTYtMjMuMy0xMC01NS4zIDExLjktNzFjMjEuMi0xNS4xIDUwLjUtMTAuMyA2NiAxMi4ybDY3IDk3LjZMMzYxLjYgMzAzbC02NS05NC44ek00OTEgNDA3LjdjLS44IC42LTEuNiAxLjEtMi40IDEuNmw0LTIuOGMtLjUgLjQtMSAuOC0xLjYgMS4yelwiXVxufTtcbmNvbnN0IGZhUG9vU3Rvcm0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncG9vLXN0b3JtJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJwb28tYm9sdFwiXSwgXCJmNzVhXCIsIFwiTTIzNi45IC4yYy01LjUtLjctMTEgMS40LTE0LjUgNS43cy00LjYgMTAuMS0yLjggMTUuM2MyLjggOC4yIDQuMyAxNi45IDQuMyAyNi4xYzAgMjEuNy04LjUgMzcuMi0yMS45IDQ3LjZjLTEzLjggMTAuOC0zNCAxNy01Ny44IDE3TDEyOCAxMTJjLTM1LjMgMC02NCAyOC43LTY0IDY0YzAgMTIuMiAzLjQgMjMuNSA5LjMgMzMuMkMzMS43IDIxNi4yIDAgMjUyLjQgMCAyOTZjMCA0MC45IDI4IDc1LjQgNjUuOCA4NS4yYy01LjMtMTguNSAxLTM4LjUgMTYuMi01MC43bDE2MC0xMjhjMTcuNi0xNC4xIDQyLjYtMTQgNjAuMiAuMnMyMi44IDM4LjYgMTIuOCA1OC44TDI4NS43IDMyMGwxOC4zIDBjMjAuNCAwIDM4LjUgMTIuOSA0NS4zIDMyLjFjMy43IDEwLjYgMy41IDIxLjggMCAzMS45bDEwLjcgMGM0OC42IDAgODgtMzkuNCA4OC04OGMwLTQzLjYtMzEuNy03OS44LTczLjMtODYuOGM1LjktOS43IDkuMy0yMS4xIDkuMy0zMy4yYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xLjQgMGMuOS01LjQgMS40LTEwLjkgMS40LTE2LjZjMC00OC43LTM2LjEtODguOS04My4xLTk1LjJ6bTQ1LjEgMjI3LjRjLTUuOC00LjctMTQuMi00LjctMjAuMS0uMWwtMTYwIDEyOGMtNS4zIDQuMi03LjQgMTEuNC01LjEgMTcuOHM4LjMgMTAuNyAxNS4xIDEwLjdsNzAuMSAwTDEyOS43IDQ4OC44Yy0zLjQgNi43LTEuNiAxNC45IDQuMyAxOS42czE0LjIgNC43IDIwLjEgLjFsMTYwLTEyOGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44cy04LjMtMTAuNy0xNS4xLTEwLjdsLTcwLjEgMCA1Mi40LTEwNC44YzMuNC02LjcgMS42LTE0LjktNC4zLTE5LjZ6XCJdXG59O1xuY29uc3QgZmFQb29Cb2x0ID0gZmFQb29TdG9ybTtcbmNvbnN0IGZhRmFjZUZyb3duT3BlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWZyb3duLW9wZW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTAsIFwiZnJvd24tb3BlblwiXSwgXCJmNTdhXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYuNCAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTEyMiAxNzQuNWMtMTIuNCA1LjItMjYuNS00LjEtMjEuMS0xNi40YzE2LTM2LjYgNTIuNC02Mi4xIDk0LjgtNjIuMXM3OC44IDI1LjYgOTQuOCA2Mi4xYzUuNCAxMi4zLTguNyAyMS42LTIxLjEgMTYuNGMtMjIuNC05LjUtNDcuNC0xNC44LTczLjctMTQuOHMtNTEuMyA1LjMtNzMuNyAxNC44elwiXVxufTtcbmNvbnN0IGZhRnJvd25PcGVuID0gZmFGYWNlRnJvd25PcGVuO1xuY29uc3QgZmFIYW5kUG9pbnRVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLXBvaW50LXVwJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbOTc1N10sIFwiZjBhNlwiLCBcIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwUzk2IDE0LjMgOTYgMzJsMCAyMDgtNjQgMEwzMiAzMnpNMjI0IDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTY0LTY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em0tOTYgODhsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNmMxMy4yIDAgMjUuNC00IDM1LjYtMTAuOGM4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44YzExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTYxLjcgMGMtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45TDM3LjUgNDUzLjVDMTMuNSA0MjkuNSAwIDM5Ni45IDAgMzYzbDAtMjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsODggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyelwiXVxufTtcbmNvbnN0IGZhTW9uZXlCaWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYwZDZcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTY0IDMyMGwtNjQgMCAwLTY0YzM1LjMgMCA2NCAyOC43IDY0IDY0ek02NCAxOTJsMC02NCA2NCAwYzAgMzUuMy0yOC43IDY0LTY0IDY0ek00NDggMzg0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDAgNjQtNjQgMHptNjQtMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NGw2NCAwIDAgNjR6TTI4OCAxNjBhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6XCJdXG59O1xuY29uc3QgZmFCb29rbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rbWFyaycsXG4gIGljb246IFszODQsIDUxMiwgWzEyODI3OCwgNjE1OTFdLCBcImYwMmVcIiwgXCJNMCA0OFY0ODcuN0MwIDUwMS4xIDEwLjkgNTEyIDI0LjMgNTEyYzUgMCA5LjktMS41IDE0LTQuNEwxOTIgNDAwIDM0NS43IDUwNy42YzQuMSAyLjkgOSA0LjQgMTQgNC40YzEzLjQgMCAyNC4zLTEwLjkgMjQuMy0yNC4zVjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4QzIxLjUgMCAwIDIxLjUgMCA0OHpcIl1cbn07XG5jb25zdCBmYUFsaWduSnVzdGlmeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbGlnbi1qdXN0aWZ5JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDM5XCIsIFwiTTQ0OCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6bTAgMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNNDQ4IDQ0OGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFVbWJyZWxsYUJlYWNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VtYnJlbGxhLWJlYWNoJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTU4XSwgXCJmNWNhXCIsIFwiTTM0Ni4zIDI3MS44bC02MC4xLTIxLjlMMjE0IDQ0OCAzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI2MS45IDAgNjQuMS0xNzYuMnptMTIxLjEtLjJsLTMuMyA5LjEgNjcuNyAyNC42YzE4LjEgNi42IDM4LTQuMiAzOS42LTIzLjRjNi41LTc4LjUtMjMuOS0xNTUuNS04MC44LTIwOC41YzIgOCAzLjIgMTYuMyAzLjQgMjQuOGwuMiA2YzEuOCA1Ny03LjMgMTEzLjgtMjYuOCAxNjcuNHpNNDYyIDk5LjFjLTEuMS0zNC40LTIyLjUtNjQuOC01NC40LTc3LjRjLS45LS40LTEuOS0uNy0yLjgtMS4xYy0zMy0xMS43LTY5LjgtMi40LTkzLjEgMjMuOGwtNCA0LjVDMjcyLjQgODguMyAyNDUgMTM0LjIgMjI2LjggMTg0bC0zLjMgOS4xTDQzNCAyNjkuN2wzLjMtOS4xYzE4LjEtNDkuOCAyNi42LTEwMi41IDI0LjktMTU1LjVsLS4yLTZ6TTEwNy4yIDExMi45Yy0xMS4xIDE1LjctMi44IDM2LjggMTUuMyA0My40bDcxIDI1LjggMy4zLTkuMWMxOS41LTUzLjYgNDkuMS0xMDMgODcuMS0xNDUuNWw0LTQuNWM2LjItNi45IDEzLjEtMTMgMjAuNS0xOC4yYy03OS42IDIuNS0xNTQuNyA0Mi4yLTIwMS4yIDEwOHpcIl1cbn07XG5jb25zdCBmYUhlbG1ldFVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlbG1ldC11bicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUwM1wiLCBcIk00NzkuNSAyMjRDNDcxLjIgOTguOSAzNjcuMiAwIDI0MCAwQzEwNy41IDAgMCAxMDcuNSAwIDI0MGwwIDU2LjNDMCAzNDQuOCAzOS4yIDM4NCA4Ny43IDM4NEwyMDAgMzg0bDE0LjkgMEwzNDMuNSA1MDUuNGM0LjUgNC4yIDEwLjQgNi42IDE2LjUgNi42bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg2LjUgMC0xLjUtMS41TDM2OCAyODhsODAgMCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0uNSAwek0zMjAgNDE3LjJsLTc4LTczLjdMMjc0LjQgMjg4bDQ1LjYgMCAwIDEyOS4yek0yODUuMyAxMDMuMWwzNC43IDUyIDAtNDMuMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgOTZjMCA3LjEtNC42IDEzLjMtMTEuNCAxNS4zcy0xNC0uNi0xNy45LTYuNGwtMzQuNy01MiAwIDQzLjJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC05NmMwLTcuMSA0LjYtMTMuMyAxMS40LTE1LjNzMTQgLjYgMTcuOSA2LjR6TTE2MCAxMTJsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG5jb25zdCBmYUJ1bGxzZXllID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1bGxzZXllJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMTQwXCIsIFwiTTQ0OCAyNTZBMTkyIDE5MiAwIDEgMCA2NCAyNTZhMTkyIDE5MiAwIDEgMCAzODQgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0yNTYgODBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHpNMjI0IDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbmNvbnN0IGZhQmFjb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFjb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjkzNjNdLCBcImY3ZTVcIiwgXCJNNDM5LjIgMS4yYzExLjItMy4yIDIzLjItLjEgMzEuNCA4LjFMNTE4IDU2LjdsLTI2LjUgNy45Yy01OCAxNi42LTk4LjEgMzkuNi0xMjkuNiA2Ny40Yy0zMS4yIDI3LjUtNTMuMiA1OS4xLTc1LjEgOTAuOWwtMi4zIDMuM0MyNDEuNiAyODguNyAxOTUgMzU2LjYgNzIuOCA0MTcuN0wzNy45IDQzNS4yIDkuNCA0MDYuNmMtNy4zLTcuMy0xMC42LTE3LjYtOS0yNy44czguMS0xOC45IDE3LjMtMjMuNUMxMzYuMSAyOTYuMiAxODAuOSAyMzEgMjIzLjMgMTY5LjNsMi4zLTMuNGMyMS44LTMxLjggNDQuOS02NC45IDc3LjctOTMuOWMzMy40LTI5LjUgNzUuOC01My42IDEzNS45LTcwLjh6TTYxLjggNDU5bDI1LjQtMTIuN2MxMjkuNS02NC43IDE3OS45LTEzOC4xIDIyMy44LTIwMmwyLjItMy4zYzIyLjEtMzIuMSA0Mi4xLTYwLjUgNjkuOS04NS4xYzI3LjUtMjQuMyA2My40LTQ1LjIgMTE3LjMtNjAuNmMwIDAgMCAwIDAgMGwuMi0uMSA0My4xLTEyLjkgMjMgMjNjOCA4IDExLjIgMTkuNyA4LjMgMzAuN3MtMTEuMyAxOS42LTIyLjIgMjIuN2MtNTEuOSAxNC44LTg1LjYgMzQuNy0xMTEuMSA1Ny4yYy0yNi4xIDIzLTQ1LjEgNDkuOS02Ny4zIDgyLjFsLTIuMiAzLjJDMzI3LjggMzY1LjkgMjc1LjUgNDQyIDE0Mi4zIDUwOC42Yy0xMi4zIDYuMi0yNy4yIDMuNy0zNi45LTZMNjEuOCA0NTl6XCJdXG59O1xuY29uc3QgZmFIYW5kUG9pbnREb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtcG9pbnQtZG93bicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjBhN1wiLCBcIk0zMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIwOC02NCAwIDAgMjA4ek0yMjQgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0em0tNjQgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyem0xNjAtOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjR6bS05Ni04OGwwIC42YzkuNC01LjQgMjAuMy04LjYgMzItOC42YzEzLjIgMCAyNS40IDQgMzUuNiAxMC44YzguNy0yNC45IDMyLjUtNDIuOCA2MC40LTQyLjhjMTEuNyAwIDIyLjYgMy4xIDMyIDguNmwwLTguNkMzODQgNzEuNiAzMTIuNCAwIDIyNCAwTDE2Mi4zIDBDMTE5LjggMCA3OS4xIDE2LjkgNDkuMSA0Ni45TDM3LjUgNTguNUMxMy41IDgyLjUgMCAxMTUuMSAwIDE0OWwwIDI3YzAgMzUuMyAyOC43IDY0IDY0IDY0bDg4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBsLTU2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNTYgMGMzOS44IDAgNzIgMzIuMiA3MiA3MnpcIl1cbn07XG5jb25zdCBmYUFycm93VXBGcm9tQnJhY2tldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC1mcm9tLWJyYWNrZXQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwOWFcIiwgXCJNMjQ2LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMTA5LjMgMTkyIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjEwLjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjh6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0elwiXVxufTtcbmNvbnN0IGZhRm9sZGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZvbGRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODE5MywgMTI4NDQ3LCA2MTcxNiwgXCJmb2xkZXItYmxhbmtcIl0sIFwiZjA3YlwiLCBcIk02NCA0ODBINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MGMwLTM1LjMtMjguNy02NC02NC02NEgyODhjLTEwLjEgMC0xOS42LTQuNy0yNS42LTEyLjhMMjQzLjIgNTcuNkMyMzEuMSA0MS41IDIxMi4xIDMyIDE5MiAzMkg2NEMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NHpcIl1cbn07XG5jb25zdCBmYUZvbGRlckJsYW5rID0gZmFGb2xkZXI7XG5jb25zdCBmYUZpbGVXYXZlZm9ybSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXdhdmVmb3JtJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJmaWxlLW1lZGljYWwtYWx0XCJdLCBcImY0NzhcIiwgXCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDIyNCAxMTIgMGM2LjEgMCAxMS42IDMuNCAxNC4zIDguOEwxNzYgMzMyLjJsNDkuNy05OS40YzIuNy01LjQgOC4zLTguOCAxNC4zLTguOHMxMS42IDMuNCAxNC4zIDguOEwyODEuOSAyODhsNzAuMSAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC04MCAwYy02LjEgMC0xMS42LTMuNC0xNC4zLTguOEwyNDAgMjc1LjhsLTQ5LjcgOTkuNGMtMi43IDUuNC04LjMgOC44LTE0LjMgOC44cy0xMS42LTMuNC0xNC4zLTguOEwxMzQuMSAzMjAgMzIgMzIwbDAgMTI4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwyNTYgMCA5NiAwek0yODggMGwwIDEyOCAxMjggMEwyODggMHpcIl1cbn07XG5jb25zdCBmYUZpbGVNZWRpY2FsQWx0ID0gZmFGaWxlV2F2ZWZvcm07XG5jb25zdCBmYVJhZGlhdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyYWRpYXRpb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3YjlcIiwgXCJNMjE2IDE4Ni43Yy0yMy45IDEzLjgtNDAgMzkuNy00MCA2OS4zTDMyIDI1NkMxNC4zIDI1Ni0uMiAyNDEuNiAyIDIyNC4xQzEwLjcgMTU0IDQ3LjggOTIuNyAxMDEuMyA1MmMxNC4xLTEwLjcgMzMuOC01LjMgNDIuNyAxMGw3MiAxMjQuN3pNMjU2IDMzNmMxNC42IDAgMjguMi0zLjkgNDAtMTAuN2w3MiAxMjQuOGM4LjggMTUuMyAzLjcgMzUuMS0xMi42IDQxLjljLTMwLjYgMTIuOS02NC4yIDIwLTk5LjQgMjBzLTY4LjktNy4xLTk5LjQtMjBjLTE2LjMtNi45LTIxLjQtMjYuNi0xMi42LTQxLjlsNzItMTI0LjhjMTEuOCA2LjggMjUuNCAxMC43IDQwIDEwLjd6bTIyNC04MGwtMTQ0IDBjMC0yOS42LTE2LjEtNTUuNS00MC02OS4zTDM2OCA2MmM4LjgtMTUuMyAyOC42LTIwLjcgNDIuNy0xMGM1My42IDQwLjcgOTAuNiAxMDIgOTkuNCAxNzIuMWMyLjIgMTcuNS0xMi40IDMxLjktMzAgMzEuOXpNMjU2IDIwOGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xuY29uc3QgZmFDaGFydFNpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFydC1zaW1wbGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImU0NzNcIiwgXCJNMTYwIDgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzUyek0wIDI3MmMwLTI2LjUgMjEuNS00OCA0OC00OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTYwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDI3MnpNMzY4IDk2bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXVxufTtcbmNvbnN0IGZhTWFyc1N0cm9rZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLXN0cm9rZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzk4OTRdLCBcImYyMjlcIiwgXCJNMzc2IDBjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzMuNCAzMy40TDM3MC4zIDk2LjQgMzQ1IDcxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDI1LjQgMjUuNEwzMDcuOCAxNTljLTI4LjQtMTkuNS02Mi43LTMxLTk5LjgtMzFjLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2czc4LjggMTc2IDE3NiAxNzZzMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDI4LjYtMjguNkw0MDcgMjAxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMjUuNC0yNS40IDIyLjEtMjIuMUw0NzEgMTUzYzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMmwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEwzNzYgMHptODggNDhzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDB6TTk2IDMwNGExMTIgMTEyIDAgMSAxIDIyNCAwQTExMiAxMTIgMCAxIDEgOTYgMzA0elwiXVxufTtcbmNvbnN0IGZhVmlhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aWFsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE0XSwgXCJmNDkyXCIsIFwiTTM0Mi42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNEwyOC4xIDM0Mi42QzEwLjEgMzYwLjYgMCAzODUgMCA0MTAuNUwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2bDUuNSAwYzI1LjUgMCA0OS45LTEwLjEgNjcuOS0yOC4xTDQ0OCAyMDUuM2w5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTMyLTMyLTk2LTk2LTMyLTMyek0yMDUuMyAyNTZMMzUyIDEwOS4zIDQwMi43IDE2MGwtOTYgOTYtMTAxLjUgMHpcIl1cbn07XG5jb25zdCBmYUdhdWdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dhdWdlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJkYXNoYm9hcmRcIiwgXCJnYXVnZS1tZWRcIiwgXCJ0YWNob21ldGVyLWFsdC1hdmVyYWdlXCJdLCBcImY2MjRcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCA4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwNC43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjNjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMTQ0IDE3NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bS0xNiA4MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek00MDAgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xuY29uc3QgZmFEYXNoYm9hcmQgPSBmYUdhdWdlO1xuY29uc3QgZmFHYXVnZU1lZCA9IGZhR2F1Z2U7XG5jb25zdCBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlID0gZmFHYXVnZTtcbmNvbnN0IGZhV2FuZE1hZ2ljU3BhcmtsZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2FuZC1tYWdpYy1zcGFya2xlcycsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibWFnaWMtd2FuZC1zcGFya2xlc1wiXSwgXCJlMmNhXCIsIFwiTTIzNC43IDQyLjdMMTk3IDU2LjhjLTMgMS4xLTUgNC01IDcuMnMyIDYuMSA1IDcuMmwzNy43IDE0LjFMMjQ4LjggMTIzYzEuMSAzIDQgNSA3LjIgNXM2LjEtMiA3LjItNWwxNC4xLTM3LjdMMzE1IDcxLjJjMy0xLjEgNS00IDUtNy4ycy0yLTYuMS01LTcuMkwyNzcuMyA0Mi43IDI2My4yIDVjLTEuMS0zLTQtNS03LjItNXMtNi4xIDItNy4yIDVMMjM0LjcgNDIuN3pNNDYuMSAzOTUuNGMtMTguNyAxOC43LTE4LjcgNDkuMSAwIDY3LjlsMzQuNiAzNC42YzE4LjcgMTguNyA0OS4xIDE4LjcgNjcuOSAwTDUyOS45IDExNi41YzE4LjctMTguNyAxOC43LTQ5LjEgMC02Ny45TDQ5NS4zIDE0LjFjLTE4LjctMTguNy00OS4xLTE4LjctNjcuOSAwTDQ2LjEgMzk1LjR6TTQ4NC42IDgyLjZsLTEwNSAxMDUtMjMuMy0yMy4zIDEwNS0xMDUgMjMuMyAyMy4zek03LjUgMTE3LjJDMyAxMTguOSAwIDEyMy4yIDAgMTI4czMgOS4xIDcuNSAxMC44TDY0IDE2MGwyMS4yIDU2LjVjMS43IDQuNSA2IDcuNSAxMC44IDcuNXM5LjEtMyAxMC44LTcuNUwxMjggMTYwbDU2LjUtMjEuMmM0LjUtMS43IDcuNS02IDcuNS0xMC44cy0zLTkuMS03LjUtMTAuOEwxMjggOTYgMTA2LjggMzkuNUMxMDUuMSAzNSAxMDAuOCAzMiA5NiAzMnMtOS4xIDMtMTAuOCA3LjVMNjQgOTYgNy41IDExNy4yem0zNTIgMjU2Yy00LjUgMS43LTcuNSA2LTcuNSAxMC44czMgOS4xIDcuNSAxMC44TDQxNiA0MTZsMjEuMiA1Ni41YzEuNyA0LjUgNiA3LjUgMTAuOCA3LjVzOS4xLTMgMTAuOC03LjVMNDgwIDQxNmw1Ni41LTIxLjJjNC41LTEuNyA3LjUtNiA3LjUtMTAuOHMtMy05LjEtNy41LTEwLjhMNDgwIDM1MmwtMjEuMi01Ni41Yy0xLjctNC41LTYtNy41LTEwLjgtNy41cy05LjEgMy0xMC44IDcuNUw0MTYgMzUybC01Ni41IDIxLjJ6XCJdXG59O1xuY29uc3QgZmFNYWdpY1dhbmRTcGFya2xlcyA9IGZhV2FuZE1hZ2ljU3BhcmtsZXM7XG5jb25zdCBmYUUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZScsXG4gIGljb246IFszMjAsIDUxMiwgWzEwMV0sIFwiNDVcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDI1NiAwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw2NCA0MTZsMC0xMjggMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMjI0IDY0IDk2bDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDY0IDMyelwiXVxufTtcbmNvbnN0IGZhUGVuQ2xpcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW4tY2xpcCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wicGVuLWFsdFwiXSwgXCJmMzA1XCIsIFwiTTQ1My4zIDE5LjNsMzkuNCAzOS40YzI1IDI1IDI1IDY1LjUgMCA5MC41bC01Mi4xIDUyLjFzMCAwIDAgMGwtMS0xczAgMCAwIDBsLTE2LTE2LTk2LTk2LTE3LTE3IDUyLjEtNTIuMWMyNS0yNSA2NS41LTI1IDkwLjUgMHpNMjQxIDExNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEwxMDUgMjE3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDE3My4xIDgxYzI4LjEtMjguMSA3My43LTI4LjEgMTAxLjggMEwyODggOTQuMWwxNyAxNyA5NiA5NiAxNiAxNiAxIDEtMTcgMTdMMjI5LjUgNDEyLjVjLTQ4IDQ4LTEwOS4yIDgwLjgtMTc1LjggOTQuMWwtMjUgNWMtNy45IDEuNi0xNi0uOS0yMS43LTYuNnMtOC4xLTEzLjgtNi42LTIxLjdsNS0yNWMxMy4zLTY2LjYgNDYuMS0xMjcuOCA5NC4xLTE3NS44TDI1NC4xIDEyOCAyNDEgMTE0Ljl6XCJdXG59O1xuY29uc3QgZmFQZW5BbHQgPSBmYVBlbkNsaXA7XG5jb25zdCBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0Y2FcIiwgXCJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0czE0LjMgMzIgMzIgMzJsNDAgMCAwIDY0LTcyIDAgMCAxMjhjNTMgMCA5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMmwwLTcyLjItNzIgMCAwLTY0IDQwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMzJ6TTQ4OCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0zNjAgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjMyIDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFVc2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXInLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxMDAsIDYyMTQ0XSwgXCJmMDA3XCIsIFwiTTIyNCAyNTZBMTI4IDEyOCAwIDEgMCAyMjQgMGExMjggMTI4IDAgMSAwIDAgMjU2em0tNDUuNyA0OEM3OS44IDMwNCAwIDM4My44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMmwzODguNiAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43QzQ0OCAzODMuOCAzNjguMiAzMDQgMjY5LjcgMzA0bC05MS40IDB6XCJdXG59O1xuY29uc3QgZmFTY2hvb2xDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzY2hvb2wtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTZiXCIsIFwiTTMzNy44IDUuNEMzMjctMS44IDMxMy0xLjggMzAyLjIgNS40TDE2Ni4zIDk2IDQ4IDk2QzIxLjUgOTYgMCAxMTcuNSAwIDE0NEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNzIgMHMwIDAgMCAwbC02NCAwIDAtOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsLjMgMCAuNSAwYzMuNC0zNy43IDE4LjctNzIuMSA0Mi4yLTk5LjFDMzUwLjIgMjYwIDMzNS42IDI2NCAzMjAgMjY0Yy00OC42IDAtODgtMzkuNC04OC04OHMzOS40LTg4IDg4LTg4czg4IDM5LjQgODggODhjMCAxOC4zLTUuNiAzNS4zLTE1LjEgNDkuNGMyOS0yMSA2NC42LTMzLjQgMTAzLjEtMzMuNGM1OS41IDAgMTEyLjEgMjkuNiAxNDQgNzQuOEw2NDAgMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ3My43IDk2IDMzNy44IDUuNHpNOTYgMTkybDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZ6bTAgMTI4bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZ6TTMyMCAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwIDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2ek02NDAgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS05OS4zLTQzLjNjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN3pcIl1cbn07XG5jb25zdCBmYUR1bXBzdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2R1bXBzdGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNzkzXCIsIFwiTTQ5LjcgMzJjLTEwLjUgMC0xOS44IDYuOS0yMi45IDE2LjlMLjkgMTMzYy0uNiAyLS45IDQuMS0uOSA2LjFDMCAxNTAuNyA5LjMgMTYwIDIwLjkgMTYwbDk0IDBMMTQwLjUgMzIgNDkuNyAzMnpNMjcyIDE2MGwwLTEyOC05OC45IDBMMTQ3LjUgMTYwIDI3MiAxNjB6bTMyIDBsMTI0LjUgMEw0MDIuOSAzMiAzMDQgMzJsMCAxMjh6bTE1Ny4xIDBsOTQgMGMxMS41IDAgMjAuOS05LjMgMjAuOS0yMC45YzAtMi4xLS4zLTQuMS0uOS02LjFMNTQ5LjIgNDguOUM1NDYuMSAzOC45IDUzNi44IDMyIDUyNi4zIDMybC05MC44IDAgMjUuNiAxMjh6TTMyIDE5Mmw0IDMyLTQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMiAwTDY0IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDMyMCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMjAtMTYwIDEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQgMCA0LTMyTDMyIDE5MnpcIl1cbn07XG5jb25zdCBmYVZhblNodXR0bGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmFuLXNodXR0bGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjg2NTYsIFwic2h1dHRsZS12YW5cIl0sIFwiZjViNlwiLCBcIk02NCAxMDRsMCA4OCA5NiAwIDAtOTZMNzIgOTZjLTQuNCAwLTggMy42LTggOHptNDgyIDg4TDQ2NS4xIDk2IDM4NCA5NmwwIDk2IDE2MiAwem0tMjI2IDBsMC05Ni05NiAwIDAgOTYgOTYgMHpNNTkyIDM4NGwtMTYgMGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwtMTI4IDBjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsLTE2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMTA0QzAgNjQuMiAzMi4yIDMyIDcyIDMybDEyMCAwIDE2MCAwIDExMy4xIDBjMTguOSAwIDM2LjggOC4zIDQ5IDIyLjhMNjI1IDE4Ni41YzkuNyAxMS41IDE1IDI2LjEgMTUgNDEuMkw2NDAgMzM2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4em0tNjQgMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xNjAgNDMyYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpcIl1cbn07XG5jb25zdCBmYVNodXR0bGVWYW4gPSBmYVZhblNodXR0bGU7XG5jb25zdCBmYUJ1aWxkaW5nVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWlsZGluZy11c2VyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGRhXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDAgMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgODAgODkuOSAwYy02LjMtMTAuMi05LjktMjIuMi05LjktMzUuMWMwLTQ2LjkgMjUuOC04Ny44IDY0LTEwOS4ybDAtOTUuOUwzODQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTExMi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek04MCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNTc2IDI3MmE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6TTM1MiA0NzcuMWMwIDE5LjMgMTUuNiAzNC45IDM0LjkgMzQuOWwyMTguMiAwYzE5LjMgMCAzNC45LTE1LjYgMzQuOS0zNC45YzAtNTEuNC00MS43LTkzLjEtOTMuMS05My4xbC0xMDEuOCAwYy01MS40IDAtOTMuMSA0MS43LTkzLjEgOTMuMXpcIl1cbn07XG5jb25zdCBmYVNxdWFyZUNhcmV0TGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtY2FyZXQtbGVmdCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiY2FyZXQtc3F1YXJlLWxlZnRcIl0sIFwiZjE5MVwiLCBcIk0wIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2ek0xMjggMjU2YzAtNi43IDIuOC0xMyA3LjctMTcuNmwxMTItMTA0YzctNi41IDE3LjItOC4yIDI1LjktNC40czE0LjQgMTIuNSAxNC40IDIybDAgMjA4YzAgOS41LTUuNyAxOC4yLTE0LjQgMjJzLTE4LjkgMi4xLTI1LjktNC40bC0xMTItMTA0Yy00LjktNC41LTcuNy0xMC45LTcuNy0xNy42elwiXVxufTtcbmNvbnN0IGZhQ2FyZXRTcXVhcmVMZWZ0ID0gZmFTcXVhcmVDYXJldExlZnQ7XG5jb25zdCBmYUhpZ2hsaWdodGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hpZ2hsaWdodGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTkxXCIsIFwiTTMxNSAzMTVsMTU4LjQtMjE1TDQ0NC4xIDcwLjYgMjI5IDIyOSAzMTUgMzE1em0tMTg3IDVzMCAwIDAgMGwwLTcxLjdjMC0xNS4zIDcuMi0yOS42IDE5LjUtMzguNkw0MjAuNiA4LjRDNDI4IDIuOSA0MzcgMCA0NDYuMiAwYzExLjQgMCAyMi40IDQuNSAzMC41IDEyLjZsNTQuOCA1NC44YzguMSA4LjEgMTIuNiAxOSAxMi42IDMwLjVjMCA5LjItMi45IDE4LjItOC40IDI1LjZMMzM0LjQgMzk2LjVjLTkgMTIuMy0yMy40IDE5LjUtMzguNiAxOS41TDIyNCA0MTZsLTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTUwLjctNTAuN2MtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNMMTI4IDMyMHpNNyA0NjYuM2w2My02MyA3MC42IDcwLjYtMzEgMzFjLTQuNSA0LjUtMTAuNiA3LTE3IDdMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuN2MwLTYuNCAyLjUtMTIuNSA3LTE3elwiXVxufTtcbmNvbnN0IGZhS2V5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tleScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI3M10sIFwiZjA4NFwiLCBcIk0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDBTMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTdsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjNi40IDAgMTIuNS0yLjUgMTctN2wzMy4zLTMzLjNjMTYuOSA1LjQgMzUgOC4zIDUzLjcgOC4zek0zNzYgOTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwelwiXVxufTtcbmNvbnN0IGZhQnVsbGhvcm4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVsbGhvcm4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjYsIDEyODM2M10sIFwiZjBhMVwiLCBcIk00ODAgMzJjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlMMzgxLjcgNTNjLTQ4IDQ4LTExMy4xIDc1LTE4MSA3NWwtOC43IDAtMzIgMC05NiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjggOC43IDBjNjcuOSAwIDEzMyAyNyAxODEgNzVsNDMuNiA0My42YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45czE5LjgtMTYuNiAxOS44LTI5LjZsMC0xNDcuNmMxOC42LTguOCAzMi0zMi41IDMyLTYwLjRzLTEzLjQtNTEuNi0zMi02MC40TDQ4MCAzMnptLTY0IDc2LjdMNDE2IDI0MGwwIDEzMS4zQzM1Ny4yIDMxNy44IDI4MC41IDI4OCAyMDAuNyAyODhsLTguNyAwIDAtOTYgOC43IDBjNzkuOCAwIDE1Ni41LTI5LjggMjE1LjMtODMuM3pcIl1cbn07XG5jb25zdCBmYUdsb2JlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dsb2JlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzYwXSwgXCJmMGFjXCIsIFwiTTM1MiAyNTZjMCAyMi4yLTEuMiA0My42LTMuMyA2NGwtMTg1LjMgMGMtMi4yLTIwLjQtMy4zLTQxLjgtMy4zLTY0czEuMi00My42IDMuMy02NGwxODUuMyAwYzIuMiAyMC40IDMuMyA0MS44IDMuMyA2NHptMjguOC02NGwxMjMuMSAwYzUuMyAyMC41IDguMSA0MS45IDguMSA2NHMtMi44IDQzLjUtOC4xIDY0bC0xMjMuMSAwYzIuMS0yMC42IDMuMi00MiAzLjItNjRzLTEuMS00My40LTMuMi02NHptMTEyLjYtMzJsLTExNi43IDBjLTEwLTYzLjktMjkuOC0xMTcuNC01NS4zLTE1MS42Yzc4LjMgMjAuNyAxNDIgNzcuNSAxNzEuOSAxNTEuNnptLTE0OS4xIDBsLTE3Ni42IDBjNi4xLTM2LjQgMTUuNS02OC42IDI3LTk0LjdjMTAuNS0yMy42IDIyLjItNDAuNyAzMy41LTUxLjVDMjM5LjQgMy4yIDI0OC43IDAgMjU2IDBzMTYuNiAzLjIgMjcuOCAxMy44YzExLjMgMTAuOCAyMyAyNy45IDMzLjUgNTEuNWMxMS42IDI2IDIwLjkgNTguMiAyNyA5NC43em0tMjA5IDBMMTguNiAxNjBDNDguNiA4NS45IDExMi4yIDI5LjEgMTkwLjYgOC40QzE2NS4xIDQyLjYgMTQ1LjMgOTYuMSAxMzUuMyAxNjB6TTguMSAxOTJsMTIzLjEgMGMtMi4xIDIwLjYtMy4yIDQyLTMuMiA2NHMxLjEgNDMuNCAzLjIgNjRMOC4xIDMyMEMyLjggMjk5LjUgMCAyNzguMSAwIDI1NnMyLjgtNDMuNSA4LjEtNjR6TTE5NC43IDQ0Ni42Yy0xMS42LTI2LTIwLjktNTguMi0yNy05NC42bDE3Ni42IDBjLTYuMSAzNi40LTE1LjUgNjguNi0yNyA5NC42Yy0xMC41IDIzLjYtMjIuMiA0MC43LTMzLjUgNTEuNUMyNzIuNiA1MDguOCAyNjMuMyA1MTIgMjU2IDUxMnMtMTYuNi0zLjItMjcuOC0xMy44Yy0xMS4zLTEwLjgtMjMtMjcuOS0zMy41LTUxLjV6TTEzNS4zIDM1MmMxMCA2My45IDI5LjggMTE3LjQgNTUuMyAxNTEuNkMxMTIuMiA0ODIuOSA0OC42IDQyNi4xIDE4LjYgMzUybDExNi43IDB6bTM1OC4xIDBjLTMwIDc0LjEtOTMuNiAxMzAuOS0xNzEuOSAxNTEuNmMyNS41LTM0LjIgNDUuMi04Ny43IDU1LjMtMTUxLjZsMTE2LjcgMHpcIl1cbn07XG5jb25zdCBmYVN5bmFnb2d1ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzeW5hZ29ndWUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzNdLCBcImY2OWJcIiwgXCJNMzA5LjggMy43YzUuOS00LjkgMTQuNi00LjkgMjAuNSAwbDEyMSAxMDAuOEM0NjkuNSAxMTkuNyA0ODAgMTQyLjIgNDgwIDE2NmwwIDExNC4xTDQ4MCA1MTJsLTE2IDAtMTEyIDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2LTExMiAwLTE2IDAgMC0yMzEuOUwxNjAgMTY2YzAtMjMuNyAxMC41LTQ2LjMgMjguOC02MS41TDMwOS44IDMuN3pNNTEyIDUxMmwwLTI2Ny41IDI4LjEtMzEuMmMzLTMuNCA3LjQtNS4zIDExLjktNS4zczguOSAxLjkgMTEuOSA1LjNsNjMuOCA3MC45YzcuOSA4LjggMTIuMyAyMC4zIDEyLjMgMzIuMUw2NDAgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwek0xMjggMjQ0LjVMMTI4IDUxMmwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAzMTYuM2MwLTExLjkgNC40LTIzLjMgMTIuMy0zMi4xbDYzLjgtNzAuOWMzLTMuNCA3LjQtNS4zIDExLjktNS4zczguOSAxLjkgMTEuOSA1LjNMMTI4IDI0NC41ek0zMjcgMTI0LjNjLTMuMS01LjQtMTAuOS01LjQtMTMuOSAwbC0xNS45IDI4LjEtMzIuMy0uM2MtNi4yLS4xLTEwLjEgNi43LTcgMTIuMUwyNzQuMyAxOTJsLTE2LjQgMjcuOGMtMy4yIDUuNCAuNyAxMi4xIDcgMTIuMWwzMi4zLS4zTDMxMyAyNTkuN2MzLjEgNS40IDEwLjkgNS40IDEzLjkgMGwxNS45LTI4LjEgMzIuMyAuM2M2LjIgLjEgMTAuMS02LjcgNy0xMi4xTDM2NS43IDE5MmwxNi40LTI3LjhjMy4yLTUuNC0uNy0xMi4xLTctMTIuMWwtMzIuMyAuM0wzMjcgMTI0LjN6XCJdXG59O1xuY29uc3QgZmFQZXJzb25IYWxmRHJlc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWhhbGYtZHJlc3MnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImU1NDhcIiwgXCJNMTYwIDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em04IDM1MmwwLTIyNCA2LjkgMGMzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw1OC4zIDk3YzkuMSAxNS4xIDQuMiAzNC44LTEwLjkgNDMuOXMtMzQuOCA0LjItNDMuOS0xMC45TDIzMiAyNTYuOSAyMzIgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTI4czAgMCAwIDB6TTU4LjIgMTgyLjNjMTkuOS0zMy4xIDU1LjMtNTMuNSA5My44LTU0LjNsMCAyNTZzMCAwIDAgMGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTcuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMUw5My4zIDI0OC4xIDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1My42LTg5LjJ6XCJdXG59O1xuY29uc3QgZmFSb2FkQnJpZGdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvYWQtYnJpZGdlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTYzXCIsIFwiTTM1MiAwTDYwOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00NDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ4MCAyMDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0YzAtMTMuMy0xMC43LTI0LTI0LTI0em0yNCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNjR6TTQ4MCA0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTMyIDk2bDI1NiAwIDAgNjQtNDAgMCAwIDY0IDQwIDAgMCA5NmMtNTMgMC05NiA0My05NiA5NmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtNTMtNDMtOTYtOTYtOTZsMC05NiA3MiAwIDAtNjQtNDAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMTY4IDY0bC04MCAwIDAgNjQgODAgMCAwLTY0elwiXVxufTtcbmNvbnN0IGZhTG9jYXRpb25BcnJvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NhdGlvbi1hcnJvdycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjEyNFwiLCBcIk00MjkuNiA5Mi4xYzQuOS0xMS45IDIuMS0yNS42LTctMzQuN3MtMjIuOC0xMS45LTM0LjctN2wtMzUyIDE0NGMtMTQuMiA1LjgtMjIuMiAyMC44LTE5LjMgMzUuOHMxNi4xIDI1LjggMzEuNCAyNS44bDE3NiAwIDAgMTc2YzAgMTUuMyAxMC44IDI4LjQgMjUuOCAzMS40czMwLTUuMSAzNS44LTE5LjNsMTQ0LTM1MnpcIl1cbn07XG5jb25zdCBmYUMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYycsXG4gIGljb246IFszODQsIDUxMiwgWzk5XSwgXCI0M1wiLCBcIk0zMjkuMSAxNDIuOWMtNjIuNS02Mi41LTE1NS44LTYyLjUtMjE4LjMgMHMtNjIuNSAxNjMuOCAwIDIyNi4zczE1NS44IDYyLjUgMjE4LjMgMGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy04Ny41IDg3LjUtMjIxLjMgODcuNS0zMDguOCAwcy04Ny41LTIyOS4zIDAtMzE2LjhzMjIxLjMtODcuNSAzMDguOCAwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwelwiXVxufTtcbmNvbnN0IGZhVGFibGV0QnV0dG9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxldC1idXR0b24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYxMGFcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMjI0IDQwMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFCdWlsZGluZ0xvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmctbG9jaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRkNlwiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDg4LjYgMGMtNS40LTkuNC04LjYtMjAuMy04LjYtMzJsMC0xMjhjMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjQuNmMwLTMwLjUgMTIuMi01OC4yIDMyLTc4LjRMMzg0IDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDB6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xMTItMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNODAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ2NCAyNDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OC02NCAwIDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMmwwIDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbmNvbnN0IGZhUGl6emFTbGljZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaXp6YS1zbGljZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjgxOFwiLCBcIk0xNjkuNyAuOWMtMjIuOC0xLjYtNDEuOSAxNC00Ny41IDM0LjdMMTEwLjQgODBjLjUgMCAxLjEgMCAxLjYgMGMxNzYuNyAwIDMyMCAxNDMuMyAzMjAgMzIwYzAgLjUgMCAxLjEgMCAxLjZsNDQuNC0xMS44YzIwLjgtNS41IDM2LjMtMjQuNyAzNC43LTQ3LjVDNDk4LjUgMTU5LjUgMzUyLjUgMTMuNSAxNjkuNyAuOXpNMzk5LjggNDEwLjJjLjEtMy40IC4yLTYuOCAuMi0xMC4yYzAtMTU5LjEtMTI4LjktMjg4LTI4OC0yODhjLTMuNCAwLTYuOCAuMS0xMC4yIC4yTC41IDQ5MS45Yy0xLjUgNS41IC4xIDExLjQgNC4xIDE1LjRzOS45IDUuNiAxNS40IDQuMUwzOTkuOCA0MTAuMnpNMTc2IDIwOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek05NiAzODRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpcIl1cbn07XG5jb25zdCBmYU1vbmV5QmlsbFdhdmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktYmlsbC13YXZlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTNhXCIsIFwiTTAgMTEyLjVMMCA0MjIuM2MwIDE4IDEwLjEgMzUgMjcgNDEuM2M4NyAzMi41IDE3NCAxMC4zIDI2MS0xMS45Yzc5LjgtMjAuMyAxNTkuNi00MC43IDIzOS4zLTE4LjljMjMgNi4zIDQ4LjctOS41IDQ4LjctMzMuNGwwLTMwOS45YzAtMTgtMTAuMS0zNS0yNy00MS4zQzQ2MiAxNS45IDM3NSAzOC4xIDI4OCA2MC4zQzIwOC4yIDgwLjYgMTI4LjQgMTAwLjkgNDguNyA3OS4xQzI1LjYgNzIuOCAwIDg4LjYgMCAxMTIuNXpNMjg4IDM1MmMtNDQuMiAwLTgwLTQzLTgwLTk2czM1LjgtOTYgODAtOTZzODAgNDMgODAgOTZzLTM1LjggOTYtODAgOTZ6TTY0IDM1MmMzNS4zIDAgNjQgMjguNyA2NCA2NGwtNjQgMCAwLTY0em02NC0yMDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMC02NCA2NCAwek01MTIgMzA0bDAgNjQtNjQgMGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDQ4IDk2bDY0IDAgMCA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6XCJdXG59O1xuY29uc3QgZmFDaGFydEFyZWEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hhcnQtYXJlYScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYXJlYS1jaGFydFwiXSwgXCJmMWZlXCIsIFwiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2TDY0IDY0em05NiAyODhsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02OC4yYzAtNy42LTIuNy0xNS03LjctMjAuOGwtNjUuOC03Ni44Yy0xMi4xLTE0LjItMzMuNy0xNS00Ni45LTEuOGwtMjEgMjFjLTEwIDEwLTI2LjQgOS4yLTM1LjQtMS42bC0zOS4yLTQ3Yy0xMi42LTE1LjEtMzUuNy0xNS40LTQ4LjctLjZMMTM1LjkgMjE1Yy01LjEgNS44LTcuOSAxMy4zLTcuOSAyMS4xbDAgODRjMCAxNy43IDE0LjMgMzIgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFBcmVhQ2hhcnQgPSBmYUNoYXJ0QXJlYTtcbmNvbnN0IGZhSG91c2VGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGRcIiwgXCJNNDgwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTYwIDAgMzIwIDY0IDAgMC0zMjAgMTEyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNkw1MTIgMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQxNiAxNTlMMjc2LjggMzkuN2MtMTItMTAuMy0yOS43LTEwLjMtNDEuNyAwbC0yMjQgMTkyQzEgMjQwLjQtMi43IDI1NC41IDIgMjY3LjFTMTguNiAyODggMzIgMjg4bDMyIDAgMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NC43IDAgLjIgMC0xIDAgMC0zNTN6XCJdXG59O1xuY29uc3QgZmFQZXJzb25DaXJjbGVNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tY2lyY2xlLW1pbnVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTQwXCIsIFwiTTExMiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjMuMUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmwyOS43IDBjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45IDIzMiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMTYgMHptMTM2IDE2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIyNCAwYzAtOC44LTcuMi0xNi0xNi0xNmwtMTI4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2elwiXVxufTtcbmNvbnN0IGZhQmFuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY4MywgXCJjYW5jZWxcIl0sIFwiZjA1ZVwiLCBcIk0zNjcuMiA0MTIuNUw5OS41IDE0NC44Qzc3LjEgMTc2LjEgNjQgMjE0LjUgNjQgMjU2YzAgMTA2IDg2IDE5MiAxOTIgMTkyYzQxLjUgMCA3OS45LTEzLjEgMTExLjItMzUuNXptNDUuMy00NS4zQzQzNC45IDMzNS45IDQ0OCAyOTcuNSA0NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyYy00MS41IDAtNzkuOSAxMy4xLTExMS4yIDM1LjVMNDEyLjUgMzY3LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnpcIl1cbn07XG5jb25zdCBmYUNhbmNlbCA9IGZhQmFuO1xuY29uc3QgZmFDYW1lcmFSb3RhdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FtZXJhLXJvdGF0ZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTBkOFwiLCBcIk0yMTMuMSA2NC44TDIwMi43IDk2IDEyOCA5NmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTc0LjcgMEw0MjYuOSA2NC44QzQyMC40IDQ1LjIgNDAyLjEgMzIgMzgxLjQgMzJMMjU4LjYgMzJjLTIwLjcgMC0zOSAxMy4yLTQ1LjUgMzIuOHpNNDQ4IDI1NmMwIDguOC03LjIgMTYtMTYgMTZsLTc2LjcgMGMtNi4yIDAtMTEuMy01LjEtMTEuMy0xMS4zYzAtMyAxLjItNS45IDMuMy04TDM3MSAyMjljLTEzLjYtMTMuNC0zMS45LTIxLTUxLTIxYy0xOS4yIDAtMzcuNyA3LjYtNTEuMyAyMS4zTDI0OSAyNDljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMTkuNy0xOS43QzI1Ny40IDE3Mi43IDI4OCAxNjAgMzIwIDE2MGMzMS44IDAgNjIuNCAxMi42IDg1IDM1bDIzLjctMjMuN2MyLjEtMi4xIDUtMy4zIDgtMy4zYzYuMiAwIDExLjMgNS4xIDExLjMgMTEuM2wwIDc2Ljd6TTE5MiAzMjBjMC04LjggNy4yLTE2IDE2LTE2bDc2LjcgMGM2LjIgMCAxMS4zIDUuMSAxMS4zIDExLjNjMCAzLTEuMiA1LjktMy4zIDhMMjY5IDM0N2MxMy42IDEzLjQgMzEuOSAyMSA1MSAyMWMxOS4yIDAgMzcuNy03LjYgNTEuMy0yMS4zTDM5MSAzMjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0xOS43IDE5LjdDMzgyLjYgNDAzLjMgMzUyIDQxNiAzMjAgNDE2Yy0zMS44IDAtNjIuNC0xMi42LTg1LTM1bC0yMy43IDIzLjdjLTIuMSAyLjEtNSAzLjMtOCAzLjNjLTYuMiAwLTExLjMtNS4xLTExLjMtMTEuM2wwLTc2Ljd6XCJdXG59O1xuY29uc3QgZmFTcHJheUNhblNwYXJrbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NwcmF5LWNhbi1zcGFya2xlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYWlyLWZyZXNoZW5lclwiXSwgXCJmNWQwXCIsIFwiTTk2IDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJ6bTAgMTI4Yy01MyAwLTk2IDQzLTk2IDk2TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjA4YzAtNTMtNDMtOTYtOTYtOTZMOTYgMTYwem02NCA5NmE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNMzg0IDQ4YzAtMS40LTEtMy0yLjItMy42TDM1MiAzMiAzMzkuNiAyLjJDMzM5IDEgMzM3LjQgMCAzMzYgMHMtMyAxLTMuNiAyLjJMMzIwIDMyIDI5MC4yIDQ0LjRDMjg5IDQ1IDI4OCA0Ni42IDI4OCA0OGMwIDEuNCAxIDMgMi4yIDMuNkwzMjAgNjRsMTIuNCAyOS44QzMzMyA5NSAzMzQuNiA5NiAzMzYgOTZzMy0xIDMuNi0yLjJMMzUyIDY0bDI5LjgtMTIuNEMzODMgNTEgMzg0IDQ5LjQgMzg0IDQ4em03Ni40IDQ1LjhDNDYxIDk1IDQ2Mi42IDk2IDQ2NCA5NnMzLTEgMy42LTIuMkw0ODAgNjRsMjkuOC0xMi40QzUxMSA1MSA1MTIgNDkuNCA1MTIgNDhjMC0xLjQtMS0zLTIuMi0zLjZMNDgwIDMyIDQ2Ny42IDIuMkM0NjcgMSA0NjUuNCAwIDQ2NCAwcy0zIDEtMy42IDIuMkw0NDggMzIgNDE4LjIgNDQuNEM0MTcgNDUgNDE2IDQ2LjYgNDE2IDQ4YzAgMS40IDEgMyAyLjIgMy42TDQ0OCA2NGwxMi40IDI5Ljh6bTcuMiAxMDAuNGMtLjYtMS4yLTIuMi0yLjItMy42LTIuMnMtMyAxLTMuNiAyLjJMNDQ4IDIyNGwtMjkuOCAxMi40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42YzAgMS40IDEgMyAyLjIgMy42TDQ0OCAyNTZsMTIuNCAyOS44Yy42IDEuMiAyLjIgMi4yIDMuNiAyLjJzMy0xIDMuNi0yLjJMNDgwIDI1NmwyOS44LTEyLjRjMS4yLS42IDIuMi0yLjIgMi4yLTMuNmMwLTEuNC0xLTMtMi4yLTMuNkw0ODAgMjI0bC0xMi40LTI5Ljh6TTQ0OCAxNDRjMC0xLjQtMS0zLTIuMi0zLjZMNDE2IDEyOCA0MDMuNiA5OC4yQzQwMyA5NyA0MDEuNCA5NiA0MDAgOTZzLTMgMS0zLjYgMi4yTDM4NCAxMjhsLTI5LjggMTIuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNmMwIDEuNCAxIDMgMi4yIDMuNkwzODQgMTYwbDEyLjQgMjkuOGMuNiAxLjIgMi4yIDIuMiAzLjYgMi4yczMtMSAzLjYtMi4yTDQxNiAxNjBsMjkuOC0xMi40YzEuMi0uNiAyLjItMi4yIDIuMi0zLjZ6XCJdXG59O1xuY29uc3QgZmFBaXJGcmVzaGVuZXIgPSBmYVNwcmF5Q2FuU3BhcmtsZXM7XG5jb25zdCBmYVN0YXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RhcicsXG4gIGljb246IFs1NzYsIDUxMiwgWzExMDg4LCA2MTQ0Nl0sIFwiZjAwNVwiLCBcIk0zMTYuOSAxOEMzMTEuNiA3IDMwMC40IDAgMjg4LjEgMHMtMjMuNCA3LTI4LjggMThMMTk1IDE1MC4zIDUxLjQgMTcxLjVjLTEyIDEuOC0yMiAxMC4yLTI1LjcgMjEuN3MtLjcgMjQuMiA3LjkgMzIuN0wxMzcuOCAzMjkgMTEzLjIgNDc0LjdjLTIgMTIgMyAyNC4yIDEyLjkgMzEuM3MyMyA4IDMzLjggMi4zbDEyOC4zLTY4LjUgMTI4LjMgNjguNWMxMC44IDUuNyAyMy45IDQuOSAzMy44LTIuM3MxNC45LTE5LjMgMTIuOS0zMS4zTDQzOC41IDMyOSA1NDIuNyAyMjUuOWM4LjYtOC41IDExLjctMjEuMiA3LjktMzIuN3MtMTMuNy0xOS45LTI1LjctMjEuN0wzODEuMiAxNTAuMyAzMTYuOSAxOHpcIl1cbn07XG5jb25zdCBmYVJlcGVhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZXBlYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNTddLCBcImYzNjNcIiwgXCJNMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTUzIDQzLTk2IDk2LTk2bDE2MCAwIDAgMzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzMyMCAxOS4xIDMyMCAzMmwwIDMyTDE2MCA2NEM3MS42IDY0IDAgMTM1LjYgMCAyMjR6bTUxMiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDUzLTQzIDk2LTk2IDk2bC0xNjAgMCAwLTMyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNmwwLTMyIDE2MCAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwelwiXVxufTtcbmNvbnN0IGZhQ3Jvc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3Jvc3MnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgzMjcsIDEwMDEzXSwgXCJmNjU0XCIsIFwiTTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDgwLTgwIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsODAgMCAwIDIwOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjA4IDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OGwtODAgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDE3NiAwelwiXVxufTtcbmNvbnN0IGZhQm94ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JveCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODIzMF0sIFwiZjQ2NlwiLCBcIk01MC43IDU4LjVMMCAxNjBsMjA4IDAgMC0xMjhMOTMuNyAzMkM3NS41IDMyIDU4LjkgNDIuMyA1MC43IDU4LjV6TTI0MCAxNjBsMjA4IDBMMzk3LjMgNTguNUMzODkuMSA0Mi4zIDM3Mi41IDMyIDM1NC4zIDMyTDI0MCAzMmwwIDEyOHptMjA4IDMyTDAgMTkyIDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0elwiXVxufTtcbmNvbnN0IGZhVmVudXNNYXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZlbnVzLW1hcnMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs5ODkyXSwgXCJmMjI4XCIsIFwiTTE3NiAyODhhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0ek0zNTIgMTc2YzAgODYuMy02Mi4xIDE1OC4xLTE0NCAxNzMuMWwwIDM0LjkgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtMzQuOUM2Mi4xIDMzNC4xIDAgMjYyLjMgMCAxNzZDMCA3OC44IDc4LjggMCAxNzYgMHMxNzYgNzguOCAxNzYgMTc2ek0yNzEuOSAzNjAuNmMxOS4zLTEwLjEgMzYuOS0yMy4xIDUyLjEtMzguNGMyMCAxOC41IDQ2LjcgMjkuOCA3Ni4xIDI5LjhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJzLTUwLjEtMTEyLTExMi0xMTJjLTcuMiAwLTE0LjMgLjctMjEuMSAyYy00LjktMjEuNS0xMy00MS43LTI0LTYwLjJDMzY5LjMgNjYgMzg0LjQgNjQgNDAwIDY0YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsMjAuNi0yMC42TDQ4NyA0MWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM0OTQuMyAwIDUwNCAwTDYxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTEyYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTMzLjQtMzMuNEw1NDUgMTQwLjJjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOGMwIDk3LjItNzguOCAxNzYtMTc2IDE3NmMtNTAuNSAwLTk2LTIxLjMtMTI4LjEtNTUuNHpcIl1cbn07XG5jb25zdCBmYUFycm93UG9pbnRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1wb2ludGVyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJtb3VzZS1wb2ludGVyXCJdLCBcImYyNDVcIiwgXCJNMCA1NS4yTDAgNDI2YzAgMTIuMiA5LjkgMjIgMjIgMjJjNi4zIDAgMTIuNC0yLjcgMTYuNi03LjVMMTIxLjIgMzQ2bDU4LjEgMTE2LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45TDE3OS44IDMyMGwxMTguMSAwYzEyLjIgMCAyMi4xLTkuOSAyMi4xLTIyLjFjMC02LjMtMi43LTEyLjMtNy40LTE2LjVMMzguNiAzNy45QzM0LjMgMzQuMSAyOC45IDMyIDIzLjIgMzJDMTAuNCAzMiAwIDQyLjQgMCA1NS4yelwiXVxufTtcbmNvbnN0IGZhTW91c2VQb2ludGVyID0gZmFBcnJvd1BvaW50ZXI7XG5jb25zdCBmYU1heGltaXplID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21heGltaXplJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJleHBhbmQtYXJyb3dzLWFsdFwiXSwgXCJmMzFlXCIsIFwiTTIwMCAzMkw1NiAzMkM0Mi43IDMyIDMyIDQyLjcgMzIgNTZsMCAxNDRjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4ybDQwLTQwIDc5IDc5LTc5IDc5TDczIDI5NWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzMiAzMDIuMyAzMiAzMTJsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjOS43IDAgMTguNS01LjggMjIuMi0xNC44czEuNy0xOS4zLTUuMi0yNi4ybC00MC00MCA3OS03OSA3OSA3OS00MCA0MGMtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMnMxMi41IDE0LjggMjIuMiAxNC44bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTQ0YzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMnMtMTkuMy0xLjctMjYuMiA1LjJsLTQwIDQwLTc5LTc5IDc5LTc5IDQwIDQwYzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMmwwLTE0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwzMTIgMzJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsNDAgNDAtNzkgNzktNzktNzkgNDAtNDBjNi45LTYuOSA4LjktMTcuMiA1LjItMjYuMlMyMDkuNyAzMiAyMDAgMzJ6XCJdXG59O1xuY29uc3QgZmFFeHBhbmRBcnJvd3NBbHQgPSBmYU1heGltaXplO1xuY29uc3QgZmFDaGFyZ2luZ1N0YXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hhcmdpbmctc3RhdGlvbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjVlN1wiLCBcIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTQ0IDE2IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAzMmMwIDM5LjggMzIuMiA3MiA3MiA3MnM3Mi0zMi4yIDcyLTcybDAtMTIzLjdjMzIuNS0xMC4yIDU2LTQwLjUgNTYtNzYuM2wwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNDgtMzIgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNDgtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCAzNS44IDIzLjUgNjYuMSA1NiA3Ni4zTDQ3MiAzNzZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0zMmMwLTQ4LjYtMzkuNC04OC04OC04OGwtMTYgMCAwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwek0yMTYuOSA4Mi43YzYgNCA4LjUgMTEuNSA2LjMgMTguM2wtMjUgNzQuOSA1Ny44IDBjNi43IDAgMTIuNyA0LjIgMTUgMTAuNHMuNSAxMy4zLTQuNiAxNy43bC0xMTIgOTZjLTUuNSA0LjctMTMuNCA1LjEtMTkuMyAxLjFzLTguNS0xMS41LTYuMy0xOC4zbDI1LTc0LjlMOTYgMjA4Yy02LjcgMC0xMi43LTQuMi0xNS0xMC40cy0uNS0xMy4zIDQuNi0xNy43bDExMi05NmM1LjUtNC43IDEzLjQtNS4xIDE5LjMtMS4xelwiXVxufTtcbmNvbnN0IGZhU2hhcGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoYXBlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW1widHJpYW5nbGUtY2lyY2xlLXNxdWFyZVwiXSwgXCJmNjFmXCIsIFwiTTMxNS40IDE1LjVDMzA5LjcgNS45IDI5OS4yIDAgMjg4IDBzLTIxLjcgNS45LTI3LjQgMTUuNWwtOTYgMTYwYy01LjkgOS45LTYuMSAyMi4yLS40IDMyLjJzMTYuMyAxNi4yIDI3LjggMTYuMmwxOTIgMGMxMS41IDAgMjIuMi02LjIgMjcuOC0xNi4yczUuNS0yMi4zLS40LTMyLjJsLTk2LTE2MHpNMjg4IDMxMmwwIDE0NGMwIDIyLjEgMTcuOSA0MCA0MCA0MGwxNDQgMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTE0NGMwLTIyLjEtMTcuOS00MC00MC00MGwtMTQ0IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek0xMjggNTEyYTEyOCAxMjggMCAxIDAgMC0yNTYgMTI4IDEyOCAwIDEgMCAwIDI1NnpcIl1cbn07XG5jb25zdCBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlID0gZmFTaGFwZXM7XG5jb25zdCBmYVNodWZmbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2h1ZmZsZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI1NiwgXCJyYW5kb21cIl0sIFwiZjA3NFwiLCBcIk00MDMuOCAzNC40YzEyLTUgMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjRjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45cy0xOS44LTE2LjYtMTkuOC0yOS42bDAtMzItMzIgMGMtMTAuMSAwLTE5LjYgNC43LTI1LjYgMTIuOEwyODQgMjI5LjMgMjQ0IDE3NmwzMS4yLTQxLjZDMjkzLjMgMTEwLjIgMzIxLjggOTYgMzUyIDk2bDMyIDAgMC0zMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42ek0xNjQgMjgyLjdMMjA0IDMzNmwtMzEuMiA0MS42QzE1NC43IDQwMS44IDEyNi4yIDQxNiA5NiA0MTZsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMGMxMC4xIDAgMTkuNi00LjcgMjUuNi0xMi44TDE2NCAyODIuN3ptMjc0LjYgMTg4Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNmwwLTMyLTMyIDBjLTMwLjIgMC01OC43LTE0LjItNzYuOC0zOC40TDEyMS42IDE3Mi44Yy02LTguMS0xNS41LTEyLjgtMjUuNi0xMi44bC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDBjMzAuMiAwIDU4LjcgMTQuMiA3Ni44IDM4LjRMMzI2LjQgMzM5LjJjNiA4LjEgMTUuNSAxMi44IDI1LjYgMTIuOGwzMiAwIDAtMzJjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWw2NCA2NGM2IDYgOS40IDE0LjEgOS40IDIyLjZzLTMuNCAxNi42LTkuNCAyMi42bC02NCA2NHpcIl1cbn07XG5jb25zdCBmYVJhbmRvbSA9IGZhU2h1ZmZsZTtcbmNvbnN0IGZhUGVyc29uUnVubmluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tcnVubmluZycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzkzOSwgXCJydW5uaW5nXCJdLCBcImY3MGNcIiwgXCJNMzIwIDQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTEyNS43IDE3NS41YzkuOS05LjkgMjMuNC0xNS41IDM3LjUtMTUuNWMxLjkgMCAzLjggLjEgNS42IC4zTDEzNy42IDI1NGMtOS4zIDI4IDEuNyA1OC44IDI2LjggNzQuNWw4Ni4yIDUzLjktMjUuNCA4OC44Yy00LjkgMTcgNSAzNC43IDIyIDM5LjZzMzQuNy01IDM5LjYtMjJsMjguNy0xMDAuNGM1LjktMjAuNi0yLjYtNDIuNi0yMC43LTUzLjlMMjM4IDI5OWwzMC45LTgyLjQgNS4xIDEyLjNDMjg5IDI2NC43IDMyMy45IDI4OCAzNjIuNyAyODhsMjEuMyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMS4zIDBjLTEyLjkgMC0yNC42LTcuOC0yOS41LTE5LjdsLTYuMy0xNWMtMTQuNi0zNS4xLTQ0LjEtNjEuOS04MC41LTczLjFsLTQ4LjctMTVjLTExLjEtMy40LTIyLjctNS4yLTM0LjQtNS4yYy0zMSAwLTYwLjggMTIuMy04Mi43IDM0LjNMNTcuNCAxNTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwyMy4xLTIzLjF6TTkxLjIgMzUyTDMyIDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2OS42IDBjMTkgMCAzNi4yLTExLjIgNDMuOS0yOC41TDE1NyAzNjEuNmwtOS41LTZjLTE3LjUtMTAuOS0zMC41LTI2LjgtMzcuOS00NC45TDkxLjIgMzUyelwiXVxufTtcbmNvbnN0IGZhUnVubmluZyA9IGZhUGVyc29uUnVubmluZztcbmNvbnN0IGZhTW9iaWxlUmV0cm8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9iaWxlLXJldHJvJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTI3XCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDI1NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptNjQgOTZsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTgwIDM1MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDU2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTU2LTU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNTZhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptNTYtNTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA1NmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xMjggNDhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNjQgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNjQgMHpcIl1cbn07XG5jb25zdCBmYUdyaXBMaW5lc1ZlcnRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyaXAtbGluZXMtdmVydGljYWwnLFxuICBpY29uOiBbMTkyLCA1MTIsIFtdLCBcImY3YTVcIiwgXCJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCA2NHptMTI4IDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NHpcIl1cbn07XG5jb25zdCBmYVNwaWRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcGlkZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzNzVdLCBcImY3MTdcIiwgXCJNMTU4LjQgMzIuNmM0LjgtMTIuNC0xLjQtMjYuMy0xMy44LTMxcy0yNi4zIDEuNC0zMSAxMy44TDgxLjEgMTAwYy03LjkgMjAuNy0zIDQ0LjEgMTIuNyA1OS43bDU3LjQgNTcuNEw3MC44IDE5MC4zYy0yLjQtLjgtNC4zLTIuNy01LjEtNS4xTDQ2LjggMTI4LjRDNDIuNiAxMTUuOCAyOSAxMDkgMTYuNCAxMTMuMlMtMyAxMzEgMS4yIDE0My42bDE4LjkgNTYuOGM1LjYgMTYuNyAxOC43IDI5LjggMzUuNCAzNS40TDExNi4xIDI1NiA1NS42IDI3Ni4yYy0xNi43IDUuNi0yOS44IDE4LjctMzUuNCAzNS40TDEuMiAzNjguNEMtMyAzODEgMy44IDM5NC42IDE2LjQgMzk4LjhzMjYuMi0yLjYgMzAuNC0xNS4ybDE4LjktNTYuOGMuOC0yLjQgMi43LTQuMyA1LjEtNS4xbDgwLjQtMjYuOEw5My43IDM1Mi4zQzc4LjEgMzY4IDczLjEgMzkxLjQgODEuMSA0MTJsMzIuNSA4NC42YzQuOCAxMi40IDE4LjYgMTguNSAzMSAxMy44czE4LjUtMTguNiAxMy44LTMxbC0zMi41LTg0LjZjLTEuMS0zLS40LTYuMyAxLjgtOC41TDE2MCAzNTMuOWMxIDUyLjEgNDMuNiA5NC4xIDk2IDk0LjFzOTUtNDEuOSA5Ni05NC4xbDMyLjMgMzIuM2MyLjIgMi4yIDIuOSA1LjYgMS44IDguNWwtMzIuNSA4NC42Yy00LjggMTIuNCAxLjQgMjYuMyAxMy44IDMxczI2LjMtMS40IDMxLTEzLjhMNDMwLjkgNDEyYzcuOS0yMC43IDMtNDQuMS0xMi43LTU5LjdsLTU3LjQtNTcuNCA4MC40IDI2LjhjMi40IC44IDQuMyAyLjcgNS4xIDUuMWwxOC45IDU2LjhjNC4yIDEyLjYgMTcuOCAxOS40IDMwLjQgMTUuMnMxOS40LTE3LjggMTUuMi0zMC40bC0xOC45LTU2LjhjLTUuNi0xNi43LTE4LjctMjkuOC0zNS40LTM1LjRMMzk1LjkgMjU2bDYwLjUtMjAuMmMxNi43LTUuNiAyOS44LTE4LjcgMzUuNC0zNS40bDE4LjktNTYuOGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMTguOSA1Ni44Yy0uOCAyLjQtMi43IDQuMy01LjEgNS4xbC04MC40IDI2LjggNTcuNC01Ny40YzE1LjYtMTUuNiAyMC42LTM5IDEyLjctNTkuN0wzOTguNCAxNS40QzM5My42IDMgMzc5LjgtMy4yIDM2Ny40IDEuNnMtMTguNSAxOC42LTEzLjggMzFsMzIuNSA4NC42YzEuMSAzIC40IDYuMy0xLjggOC41TDMzNiAxNzQuMWwwLTE0LjFjMC0zMS44LTE4LjYtNTkuMy00NS41LTcyLjJjLTkuMS00LjQtMTguNSAzLjMtMTguNSAxMy40bDAgMTAuOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTEwLjhjMC0xMC4xLTkuNC0xNy43LTE4LjUtMTMuNEMxOTQuNiAxMDAuNyAxNzYgMTI4LjIgMTc2IDE2MGwwIDE0LjEtNDguMy00OC4zYy0yLjItMi4yLTIuOS01LjYtMS44LTguNWwzMi41LTg0LjZ6XCJdXG59O1xuY29uc3QgZmFIYW5kc0JvdW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWJvdW5kJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGY5XCIsIFwiTTk2IDMyQzk2IDE0LjMgODEuNyAwIDY0IDBTMzIgMTQuMyAzMiAzMmwwIDY0IDAgNTkuMSAwIC43TDMyIDE5MmwwIDIxLjljMCAxNC4yIDUuMSAyNy45IDE0LjMgMzguN0wxMzEuNiAzNTJsLTMuNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMTI4IDAgNjQgMCAxMjggMCAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zLjYgMCA4NS4zLTk5LjVjOS4yLTEwLjggMTQuMy0yNC41IDE0LjMtMzguN2wwLTIxLjkgMC0zNi4yIDAtLjdMNjA4IDk2bDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NCAwIDQ4LjgtNjkuMyA5Mi40Yy01LjcgNy42LTE2LjEgOS42LTI0LjIgNC44Yy05LjctNS43LTEyLjEtMTguNy01LjEtMjcuNUw0NzMgMTgwYzEwLjgtMTMuNSA4LjktMzMuMy00LjQtNDQuNXMtMzMtOS44LTQ0LjUgMy4ybC00Ni43IDUyLjVDMzYxIDIwOS43IDM1MiAyMzMuNCAzNTIgMjU4LjFsMCA2MS45IDAgMzItNjQgMCAwLTMyIDAtNjEuOWMwLTI0LjYtOS00OC40LTI1LjQtNjYuOGwtNDYuNy01Mi41Yy0xMS41LTEzLTMxLjMtMTQuNC00NC41LTMuMnMtMTUuMiAzMC45LTQuNCA0NC41bDI3LjYgMzQuNWM3IDguOCA0LjcgMjEuOC01LjEgMjcuNWMtOC4xIDQuOC0xOC42IDIuNy0yNC4yLTQuOEw5NiAxNDQuOCA5NiA5NmwwLTY0em02NCA0NDhsMCAzMiAxMjggMCAwLTMyIDY0IDAgMCAzMiAxMjggMCAwLTMyIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAtMTI4IDAtNjQgMC0xMjggMC0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDB6XCJdXG59O1xuY29uc3QgZmFGaWxlSW52b2ljZURvbGxhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWludm9pY2UtZG9sbGFyJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNTcxXCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwyMjQgMCA2NCAwek0yNTYgMGwwIDEyOCAxMjggMEwyNTYgMHpNNjQgODBjMC04LjggNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMODAgOTZjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2em0xMjggNzJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTcuM2M4LjUgMS4yIDE2LjcgMy4xIDI0LjEgNS4xYzguNSAyLjMgMTMuNiAxMSAxMS4zIDE5LjZzLTExIDEzLjYtMTkuNiAxMS4zYy0xMS4xLTMtMjItNS4yLTMyLjEtNS4zYy04LjQtLjEtMTcuNCAxLjgtMjMuNiA1LjVjLTUuNyAzLjQtOC4xIDcuMy04LjEgMTIuOGMwIDMuNyAxLjMgNi41IDcuMyAxMC4xYzYuOSA0LjEgMTYuNiA3LjEgMjkuMiAxMC45bC41IC4xczAgMCAwIDBzMCAwIDAgMGMxMS4zIDMuNCAyNS4zIDcuNiAzNi4zIDE0LjZjMTIuMSA3LjYgMjIuNCAxOS43IDIyLjcgMzguMmMuMyAxOS4zLTkuNiAzMy4zLTIyLjkgNDEuNmMtNy43IDQuOC0xNi40IDcuNi0yNS4xIDkuMWwwIDE3LjFjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNy44Yy0xMS4yLTIuMS0yMS43LTUuNy0zMC45LTguOWMwIDAgMCAwIDAgMGMtMi4xLS43LTQuMi0xLjQtNi4yLTIuMWMtOC40LTIuOC0xMi45LTExLjktMTAuMS0yMC4yczExLjktMTIuOSAyMC4yLTEwLjFjMi41IC44IDQuOCAxLjYgNy4xIDIuNGMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBjMTMuNiA0LjYgMjQuNiA4LjQgMzYuMyA4LjdjOS4xIC4zIDE3LjktMS43IDIzLjctNS4zYzUuMS0zLjIgNy45LTcuMyA3LjgtMTRjLS4xLTQuNi0xLjgtNy44LTcuNy0xMS42Yy02LjgtNC4zLTE2LjUtNy40LTI5LTExLjJsLTEuNi0uNXMwIDAgMCAwYy0xMS0zLjMtMjQuMy03LjMtMzQuOC0xMy43Yy0xMi03LjItMjIuNi0xOC45LTIyLjctMzcuM2MtLjEtMTkuNCAxMC44LTMyLjggMjMuOC00MC41YzcuNS00LjQgMTUuOC03LjIgMjQuMS04LjdsMC0xNy4zYzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYVBsYW5lQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTU2XCIsIFwiTTI1NiAwYy0zNSAwLTY0IDU5LjUtNjQgOTMuN2wwIDg0LjZMOC4xIDI4My40Yy01IDIuOC04LjEgOC4yLTguMSAxMy45bDAgNjUuNWMwIDEwLjYgMTAuMiAxOC4zIDIwLjQgMTUuNGwxNzEuNi00OSAwIDcwLjktNTcuNiA0My4yYy00IDMtNi40IDcuOC02LjQgMTIuOGwwIDQyYzAgNy44IDYuMyAxNCAxNCAxNGMxLjMgMCAyLjYtLjIgMy45LS41TDI1NiA0ODBsMTEwLjEgMzEuNWMxLjMgLjQgMi42IC41IDMuOSAuNWM2IDAgMTEuMS0zLjcgMTMuMS05QzM0NC41IDQ3MC43IDMyMCA0MjIuMiAzMjAgMzY4YzAtNjAuNiAzMC42LTExNCA3Ny4xLTE0NS42TDMyMCAxNzguM2wwLTg0LjZDMzIwIDU5LjUgMjkyIDAgMjU2IDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFYUmF5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3gtcmF5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDk3XCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAzMjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjR6TTI1NiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzItODAgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw4MCAwIDAgNDgtMTEyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTEyIDAgMCA3MC42TDE4OS4xIDMwN2MtNS4yLTItMTAuNi0zLTE2LjItM2wtMi4xIDBjLTIzLjYgMC00Mi44IDE5LjItNDIuOCA0Mi44YzAgOS42IDMuMiAxOC45IDkuMSAyNi40bDE4LjIgMjMuMmM5LjcgMTIuNCAyNC42IDE5LjYgNDAuMyAxOS42bDEyMC44IDBjMTUuNyAwIDMwLjYtNy4yIDQwLjMtMTkuNmwxOC4yLTIzLjJjNS45LTcuNSA5LjEtMTYuOCA5LjEtMjYuNGMwLTIzLjYtMTkuMi00Mi44LTQyLjgtNDIuOGwtMi4yIDBjLTUuNSAwLTExIDEtMTYuMiAzTDI3MiAzMjYuNmwwLTcwLjYgMTEyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTExMiAwIDAtNDggODAgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtODAgMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNnpNMjA4IDM1MmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6bTgwIDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6XCJdXG59O1xuY29uc3QgZmFTcGVsbENoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NwZWxsLWNoZWNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmODkxXCIsIFwiTTExMiAwQzk5LjEgMCA4Ny40IDcuOCA4Mi41IDE5LjdsLTY2LjcgMTYwLTEzLjMgMzJjLTYuOCAxNi4zIC45IDM1IDE3LjIgNDEuOHMzNS0uOSA0MS44LTE3LjJMNjYuNyAyMjRsOTAuNyAwIDUuMSAxMi4zYzYuOCAxNi4zIDI1LjUgMjQgNDEuOCAxNy4yczI0LTI1LjUgMTcuMi00MS44bC0xMy4zLTMyLTY2LjctMTYwQzEzNi42IDcuOCAxMjQuOSAwIDExMiAwem0xOC43IDE2MGwtMzcuMyAwTDExMiAxMTUuMiAxMzAuNyAxNjB6TTI1NiAzMmwwIDk2IDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsODAgMGM0NC4yIDAgODAtMzUuOCA4MC04MGMwLTIzLjEtOS44LTQzLjgtMjUuNC01OC40YzYtMTEuMiA5LjQtMjQgOS40LTM3LjZjMC00NC4yLTM1LjgtODAtODAtODBMMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem05NiA2NGwtMzIgMCAwLTMyIDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6bS0zMiA2NGwzMiAwIDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQ4IDAgMC0zMnpNNTY2LjYgMzEwLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzUyIDQzNC43bC03My40LTczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJ6XCJdXG59O1xuY29uc3QgZmFTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjcxNVwiLCBcIk01LjEgOS4yQzEzLjMtMS4yIDI4LjQtMy4xIDM4LjggNS4xbDU5MiA0NjRjMTAuNCA4LjIgMTIuMyAyMy4zIDQuMSAzMy43cy0yMy4zIDEyLjMtMzMuNyA0LjFMOS4yIDQyLjlDLTEuMiAzNC43LTMuMSAxOS42IDUuMSA5LjJ6XCJdXG59O1xuY29uc3QgZmFDb21wdXRlck1vdXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbXB1dGVyLW1vdXNlJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDMzLCBcIm1vdXNlXCJdLCBcImY4Y2NcIiwgXCJNMCAxOTJsMTc2IDBMMTc2IDAgMTYwIDBDNzEuNiAwIDAgNzEuNiAwIDE2MGwwIDMyem0wIDMyTDAgMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwbDY0IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC0xMjgtMTkyIDBMMCAyMjR6bTM4NC0zMmwwLTMyQzM4NCA3MS42IDMxMi40IDAgMjI0IDBMMjA4IDBsMCAxOTIgMTc2IDB6XCJdXG59O1xuY29uc3QgZmFNb3VzZSA9IGZhQ29tcHV0ZXJNb3VzZTtcbmNvbnN0IGZhQXJyb3dSaWdodFRvQnJhY2tldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yaWdodC10by1icmFja2V0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzaWduLWluXCJdLCBcImYwOTBcIiwgXCJNMzUyIDk2bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMjU2YzAtNTMtNDMtOTYtOTYtOTZsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bS05LjQgMTgyLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDI0Mi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjEwLjcgMC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHpcIl1cbn07XG5jb25zdCBmYVNpZ25JbiA9IGZhQXJyb3dSaWdodFRvQnJhY2tldDtcbmNvbnN0IGZhU2hvcFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Nob3Atc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInN0b3JlLWFsdC1zbGFzaFwiXSwgXCJlMDcwXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdsLTU0LjgtNDNMNTc2IDIyNGwtNjQgMCAwIDE1MkwzODQgMjc1LjdsMC01MS43LTY0IDAgMCAxLjVMMjc3LjIgMTkybDMyNS45IDBjMjAuMyAwIDM2LjgtMTYuNSAzNi44LTM2LjhjMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRMNTU4LjIgMjEuNEM1NDkuMyA4IDUzNC40IDAgNTE4LjMgMEwxMjEuNyAwYy0xNiAwLTMxIDgtMzkuOSAyMS40TDc0LjEgMzIuOCAzOC44IDUuMXpNMzYuOCAxOTJsODUgMEwyMSAxMTIuNSA2LjIgMTM0LjdjLTQgNi4xLTYuMiAxMy4yLTYuMiAyMC40QzAgMTc1LjUgMTYuNSAxOTIgMzYuOCAxOTJ6TTMyMCAzODRsLTE5MiAwIDAtMTYwLTY0IDAgMCAxNjAgMCA4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY1LjUtNjQtNTAuNCAwIDM1Ljl6XCJdXG59O1xuY29uc3QgZmFTdG9yZUFsdFNsYXNoID0gZmFTaG9wU2xhc2g7XG5jb25zdCBmYVNlcnZlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzZXJ2ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyMzNcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTI4MCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQ4IDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTY0IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDI4OHptMjgwIDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNTYgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG5jb25zdCBmYVZpcnVzQ292aWRTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aXJ1cy1jb3ZpZC1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRhOVwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ3Mi4xIDM0NC43YzExLjQtMTkuNSAxOS4xLTQxLjQgMjIuMy02NC43bDMzLjYgMCAwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTMzLjYgMGMtNC4yLTMwLjctMTYuMy01OC44LTM0LjEtODIuM0w0ODQgMTI1LjlsMTEuMyAxMS4zYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0NzIuNyA0Ni43Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45TDQ1MC4xIDkybC0yMy44IDIzLjhDNDAyLjggOTcuOSAzNzQuNyA4NS44IDM0NCA4MS42TDM0NCA0OGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI4MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2IDAgMCAzMy42Yy0zMC43IDQuMi01OC44IDE2LjMtODIuMyAzNC4xTDE4OS45IDkybDExLjMtMTEuM2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDEzNC4xIDc5LjggMzguOCA1LjF6TTE0OS4yIDIxMy41Yy0xLjUgNi0yLjcgMTIuMi0zLjUgMTguNUwxMTIgMjMybDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMzMuNiAwYzQuMiAzMC43IDE2LjMgNTguOCAzNC4xIDgyLjNMMTU2IDM4Ni4xbC0xMS4zLTExLjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTYuNiA1Ni42YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwxODkuOSA0MjBsMjMuOC0yMy44YzIzLjUgMTcuOSA1MS43IDI5LjkgODIuMyAzNC4xbDAgMzMuNi0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2IDAgMC0zMy42YzIwLjQtMi44IDM5LjctOS4xIDU3LjMtMTguMkwxNDkuMiAyMTMuNXpcIl1cbn07XG5jb25zdCBmYVNob3BMb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Nob3AtbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRhNVwiLCBcIk0zNi44IDE5Mmw0MTIuOCAwYzIwLjItMTkuOCA0Ny45LTMyIDc4LjQtMzJjMzAuNSAwIDU4LjEgMTIuMiA3OC4zIDMxLjljMTguOS0xLjYgMzMuNy0xNy40IDMzLjctMzYuN2MwLTcuMy0yLjItMTQuNC02LjItMjAuNEw1NTguMiAyMS40QzU0OS4zIDggNTM0LjQgMCA1MTguMyAwTDEyMS43IDBjLTE2IDAtMzEgOC0zOS45IDIxLjRMNi4yIDEzNC43Yy00IDYuMS02LjIgMTMuMi02LjIgMjAuNEMwIDE3NS41IDE2LjUgMTkyIDM2LjggMTkyek0zODQgMjI0bC02NCAwIDAgMTYwLTE5MiAwIDAtMTYwLTY0IDAgMCAxNjAgMCA4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTgwIDAtMzIgMC0xMjh6bTE0NCAxNmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4LTY0IDAgMC00OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTgwIDMybDAgNDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODB6XCJdXG59O1xuY29uc3QgZmFIb3VyZ2xhc3NTdGFydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VyZ2xhc3Mtc3RhcnQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImhvdXJnbGFzcy0xXCJdLCBcImYyNTFcIiwgXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDExYzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMUwxNDYuNyAyNTYgNzguOSAzMjMuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMjU2IDAgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTExYzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMUwyMzcuMyAyNTZsNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIwIDAgNjQgMCAzMiAwek0yODggNDM3bDAgMTFMOTYgNDQ4bDAtMTFjMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlMMTkyIDMwMS4zbDY3LjkgNjcuOWMxOCAxOCAyOC4xIDQyLjQgMjguMSA2Ny45elwiXVxufTtcbmNvbnN0IGZhSG91cmdsYXNzMSA9IGZhSG91cmdsYXNzU3RhcnQ7XG5jb25zdCBmYUJsZW5kZXJQaG9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdibGVuZGVyLXBob25lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNmI2XCIsIFwiTTIyNCAzNTJMMTk2LjggNTIuM0MxOTQuMiAyNC4yIDIxNi4zIDAgMjQ0LjYgMEw1MzQuMSAwYzIxLjEgMCAzNi40IDIwLjEgMzAuOSA0MC40TDU1OC41IDY0IDQwMCA2NGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxNDkuOCAwLTE3LjUgNjRMNDAwIDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjMuNiAwLTE3LjUgNjRMNDAwIDI1NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw5Ny41IDBMNDgwIDM1MmwtMjU2IDB6bS0xNiAzMmwyODggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yODggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zMmMwLTI2LjUgMjEuNS00OCA0OC00OHptMTQ0IDk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMTQ3LjUgMzAuN2MxMC44IDYuNyAxNS4zIDIxIDEwLjYgMzMuNGwtMjIgNTcuOGMtNC4yIDEwLjktMTQuNSAxNy42LTI1LjMgMTYuNGwtMzMuMy0zLjZjLTEzLjYgNDIuMi0xMy42IDg4LjQgMCAxMzAuN2wzMy4zLTMuNmMxMC45LTEuMiAyMS4yIDUuNSAyNS4zIDE2LjRsMjIgNTcuOGM0LjcgMTIuNCAuMiAyNi43LTEwLjYgMzMuNGwtNDQgMjcuMmMtOS43IDYtMjEuOSA0LjItMjkuOC00LjNDLTI0LjYgMjg2LTI0LjYgMTE0IDczLjcgNy44QzgxLjYtLjcgOTMuOC0yLjUgMTAzLjUgMy41bDQ0IDI3LjJ6XCJdXG59O1xuY29uc3QgZmFCdWlsZGluZ1doZWF0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLXdoZWF0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGRiXCIsIFwiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwTDMzNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhsMCA4MC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4ek04MCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptODAgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTEyLTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTY0IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw4MCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNzYgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptODAgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzg0IDgwbDAgMTZjMCA0NC4yLTM1LjggODAtODAgODBsLTE2IDAgMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MGwxNiAwem0wIDEyOGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMTYgMCAwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDE2IDAgMCAxNnptMCAxMTJjMCA0NC4yLTM1LjggODAtODAgODBsLTE2IDAgMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MGwxNiAwIDAgMTZ6TTUxMiA0OTZsMCAxNi0xNiAwYy00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2IDE2IDBjNDQuMiAwIDgwIDM1LjggODAgODB6bTAtOTZsLTE2IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTYgMTYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2em0wLTEyOGwwIDE2LTE2IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTYgMTYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MHpNNTI4IDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0em05NiA2NGwwIDMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMzJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpNNDU2IDcyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0zMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkJyZWFzdGZlZWRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWJyZWFzdGZlZWRpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImU1M2FcIiwgXCJNMjI0IDBhODAgODAgMCAxIDEgMCAxNjBBODAgODAgMCAxIDEgMjI0IDB6TTQzNi44IDM4Mi44TDM3My41IDQ2MmMtMTYuNiAyMC43LTQ2LjggMjQuMS02Ny41IDcuNWMtMTcuNi0xNC4xLTIyLjctMzguMS0xMy41LTU3LjdsLS44LS4xYy0zOC45LTUuNi03NC4zLTI1LjEtOTkuNy01NC44bDAtMzYuOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgLjggMCAxLjYgLjEgMi40bDEwMS40IDUwLjdjMjMuNyAxMS45IDMzLjMgNDAuNyAyMS41IDY0LjRzLTQwLjcgMzMuMy02NC40IDIxLjVMMjcuMiA0MjcuM2MtMS4xLS41LTIuMi0xLjEtMy4zLTEuN2MtNC45LTIuOC05LjItNi40LTEyLjYtMTAuNmMtNC42LTUuNC03LjgtMTEuNy05LjYtMTguNGMtMy4zLTEyLTEuOS0yNS4yIDQuOC0zNi42Yy42LTEuMSAxLjMtMi4yIDItMy4yTDc1LjYgMjU2LjFjMjYuNy00MC4xIDcxLjctNjQuMSAxMTkuOC02NC4xbDc1LjIgMGM0Ni41IDAgOTAuMSAyMi41IDExNy4yIDYwLjNsNTAuNyA3MC45YzIuMiAzIDQgNi4xIDUuNSA5LjRjMi45IDYuNyA0LjMgMTMuOCA0IDIwLjhjLS4zIDEwLjYtNC4yIDIxLTExLjIgMjkuNHpNMzIwIDMzMmE0NCA0NCAwIDEgMCAtODggMCA0NCA0NCAwIDEgMCA4OCAwelwiXVxufTtcbmNvbnN0IGZhUmlnaHRUb0JyYWNrZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmlnaHQtdG8tYnJhY2tldCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2lnbi1pbi1hbHRcIl0sIFwiZjJmNlwiLCBcIk0yMTcuOSAxMDUuOUwzNDAuNyAyMjguN2M3LjIgNy4yIDExLjMgMTcuMSAxMS4zIDI3LjNzLTQuMSAyMC4xLTExLjMgMjcuM0wyMTcuOSA0MDYuMWMtNi40IDYuNC0xNSA5LjktMjQgOS45Yy0xOC43IDAtMzMuOS0xNS4yLTMzLjktMzMuOWwwLTYyLjFMMzIgMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwIDAtNjIuMWMwLTE4LjcgMTUuMi0zMy45IDMzLjktMzMuOWM5IDAgMTcuNiAzLjYgMjQgOS45ek0zNTIgNDE2bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yNTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjU2YzAgNTMtNDMgOTYtOTYgOTZsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFTaWduSW5BbHQgPSBmYVJpZ2h0VG9CcmFja2V0O1xuY29uc3QgZmFWZW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2ZW51cycsXG4gIGljb246IFszODQsIDUxMiwgWzk3OTJdLCBcImYyMjFcIiwgXCJNODAgMTc2YTExMiAxMTIgMCAxIDEgMjI0IDBBMTEyIDExMiAwIDEgMSA4MCAxNzZ6TTIyNCAzNDkuMWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMUMzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45elwiXVxufTtcbmNvbnN0IGZhUGFzc3BvcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFzc3BvcnQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1YWJcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0xODMgMjc4LjhjLTI3LjktMTMuMi00OC40LTM5LjQtNTMuNy03MC44bDM5LjEgMGMxLjYgMzAuNCA3LjcgNTMuOCAxNC42IDcwLjh6bTQxLjMgOS4ybC0uMyAwLS4zIDBjLTIuNC0zLjUtNS43LTguOS05LjEtMTYuNWMtNi0xMy42LTEyLjQtMzQuMy0xNC4yLTYzLjVsNDcuMSAwYy0xLjggMjkuMi04LjEgNDkuOS0xNC4yIDYzLjVjLTMuNCA3LjYtNi43IDEzLTkuMSAxNi41em00MC43LTkuMmM2LjgtMTcuMSAxMi45LTQwLjQgMTQuNi03MC44bDM5LjEgMGMtNS4zIDMxLjQtMjUuOCA1Ny42LTUzLjcgNzAuOHpNMjc5LjYgMTc2Yy0xLjYtMzAuNC03LjctNTMuOC0xNC42LTcwLjhjMjcuOSAxMy4yIDQ4LjQgMzkuNCA1My43IDcwLjhsLTM5LjEgMHpNMjIzLjcgOTZsLjMgMCAuMyAwYzIuNCAzLjUgNS43IDguOSA5LjEgMTYuNWM2IDEzLjYgMTIuNCAzNC4zIDE0LjIgNjMuNWwtNDcuMSAwYzEuOC0yOS4yIDguMS00OS45IDE0LjItNjMuNWMzLjQtNy42IDYuNy0xMyA5LjEtMTYuNXpNMTgzIDEwNS4yYy02LjggMTcuMS0xMi45IDQwLjQtMTQuNiA3MC44bC0zOS4xIDBjNS4zLTMxLjQgMjUuOC01Ny42IDUzLjctNzAuOHpNMzUyIDE5MkExMjggMTI4IDAgMSAwIDk2IDE5MmExMjggMTI4IDAgMSAwIDI1NiAwek0xMTIgMzg0Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDIyNCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0yMjQgMHpcIl1cbn07XG5jb25zdCBmYVRodW1idGFja1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RodW1idGFjay1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1widGh1bWItdGFjay1zbGFzaFwiXSwgXCJlNjhmXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDgxLjQgMzUyYzkuOC0uNCAxOC45LTUuMyAyNC42LTEzLjNjNi04LjMgNy43LTE5LjEgNC40LTI4LjhsLTEtM2MtMTMuOC00MS41LTQyLjgtNzQuOC03OS41LTk0LjdMNDE4LjUgNjQgNDQ4IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI5LjUgMC02LjEgNzkuNUwzOC44IDUuMXpNMzI0LjkgMzUyTDE3Ny4xIDIzNS42Yy0yMC45IDE4LjktMzcuMiA0My4zLTQ2LjUgNzEuM2wtMSAzYy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44czE1LjcgMTMuMyAyNiAxMy4zbDE2NC45IDB6TTI4OCAzODRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYtNjQgMHpcIl1cbn07XG5jb25zdCBmYVRodW1iVGFja1NsYXNoID0gZmFUaHVtYnRhY2tTbGFzaDtcbmNvbnN0IGZhSGVhcnRQdWxzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1wdWxzZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiaGVhcnRiZWF0XCJdLCBcImYyMWVcIiwgXCJNMjI4LjMgNDY5LjFMNDcuNiAzMDAuNGMtNC4yLTMuOS04LjItOC4xLTExLjktMTIuNGw4NyAwYzIyLjYgMCA0My0xMy42IDUxLjctMzQuNWwxMC41LTI1LjIgNDkuMyAxMDkuNWMzLjggOC41IDEyLjEgMTQgMjEuNCAxNC4xczE3LjgtNSAyMi0xMy4zTDMyMCAyNTMuN2wxLjcgMy40YzkuNSAxOSAyOC45IDMxIDUwLjEgMzFsMTA0LjUgMGMtMy43IDQuMy03LjcgOC41LTExLjkgMTIuNEwyODMuNyA0NjkuMWMtNy41IDctMTcuNCAxMC45LTI3LjcgMTAuOXMtMjAuMi0zLjktMjcuNy0xMC45ek01MDMuNyAyNDBsLTEzMiAwYy0zIDAtNS44LTEuNy03LjItNC40bC0yMy4yLTQ2LjNjLTQuMS04LjEtMTIuNC0xMy4zLTIxLjUtMTMuM3MtMTcuNCA1LjEtMjEuNSAxMy4zbC00MS40IDgyLjhMMjA1LjkgMTU4LjJjLTMuOS04LjctMTIuNy0xNC4zLTIyLjItMTQuMXMtMTguMSA1LjktMjEuOCAxNC44bC0zMS44IDc2LjNjLTEuMiAzLTQuMiA0LjktNy40IDQuOUwxNiAyNDBjLTIuNiAwLTUgLjQtNy4zIDEuMUMzIDIyNS4yIDAgMjA4LjIgMCAxOTAuOWwwLTUuOGMwLTY5LjkgNTAuNS0xMjkuNSAxMTkuNC0xNDFDMTY1IDM2LjUgMjExLjQgNTEuNCAyNDQgODRsMTIgMTIgMTItMTJjMzIuNi0zMi42IDc5LTQ3LjUgMTI0LjYtMzkuOUM0NjEuNSA1NS42IDUxMiAxMTUuMiA1MTIgMTg1LjFsMCA1LjhjMCAxNi45LTIuOCAzMy41LTguMyA0OS4xelwiXVxufTtcbmNvbnN0IGZhSGVhcnRiZWF0ID0gZmFIZWFydFB1bHNlO1xuY29uc3QgZmFQZW9wbGVDYXJyeUJveCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW9wbGUtY2FycnktYm94JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJwZW9wbGUtY2FycnlcIl0sIFwiZjRjZVwiLCBcIk04MCA0OGE0OCA0OCAwIDEgMSA5NiAwQTQ4IDQ4IDAgMSAxIDgwIDQ4em02NCAxOTMuN2wwIDY1LjEgNTEgNTFjNy4xIDcuMSAxMS44IDE2LjIgMTMuNCAyNi4xbDE1LjIgOTAuOWMyLjkgMTcuNC04LjkgMzMuOS0yNi4zIDM2LjhzLTMzLjktOC45LTM2LjgtMjYuM2wtMTQuMy04NS45TDY2LjggMzIwQzU0LjggMzA4IDQ4IDI5MS43IDQ4IDI3NC43bDAtODguMWMwLTMyLjQgMjYuMi01OC42IDU4LjYtNTguNmMyNC4xIDAgNDYuNSAxMiA1OS45IDMybDQ3LjQgNzEuMSAxMC4xIDUgMC03Ni4yYzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNzYuMiAxMC4xLTVMNDczLjUgMTYwYzEzLjMtMjAgMzUuOC0zMiA1OS45LTMyYzMyLjQgMCA1OC42IDI2LjIgNTguNiA1OC42bDAgODguMWMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM2wtNzkuNCA3OS40LTE0LjMgODUuOWMtMi45IDE3LjQtMTkuNCAyOS4yLTM2LjggMjYuM3MtMjkuMi0xOS40LTI2LjMtMzYuOGwxNS4yLTkwLjljMS42LTkuOSA2LjMtMTkgMTMuNC0yNi4xbDUxLTUxIDAtNjUuMS0xOSAyOC41Yy00LjYgNy0xMSAxMi42LTE4LjUgMTYuM2wtNTkuNiAyOS44Yy0yLjQgMS4zLTQuOSAyLjItNy42IDIuOGMtMi42IC42LTUuMyAuOS03LjkgLjhsLTEyNi43IDBjLTIuNSAuMS01LS4yLTcuNS0uN2MtMi45LS42LTUuNi0xLjYtOC4xLTNsLTU5LjUtMjkuOGMtNy41LTMuNy0xMy44LTkuNC0xOC41LTE2LjNsLTE5LTI4LjV6TTIuMyA0NjguMUw1MC4xIDM0OC42bDQ5LjIgNDkuMi0zNy42IDk0Yy02LjYgMTYuNC0yNS4yIDI0LjQtNDEuNiAxNy44Uy00LjMgNDg0LjUgMi4zIDQ2OC4xek01MTIgMGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTc3LjkgMzQ4LjZsNDcuOCAxMTkuNWM2LjYgMTYuNC0xLjQgMzUtMTcuOCA0MS42cy0zNS0xLjQtNDEuNi0xNy44bC0zNy42LTk0IDQ5LjItNDkuMnpcIl1cbn07XG5jb25zdCBmYVBlb3BsZUNhcnJ5ID0gZmFQZW9wbGVDYXJyeUJveDtcbmNvbnN0IGZhVGVtcGVyYXR1cmVIaWdoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbXBlcmF0dXJlLWhpZ2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3NjlcIiwgXCJNNDE2IDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMCAxMjhBOTYgOTYgMCAxIDAgNDE2IDBhOTYgOTYgMCAxIDAgMCAxOTJ6TTk2IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTY0LjVjMCAxNy4zIDcuMSAzMS45IDE1LjMgNDIuNUMyMTcuOCAzMzIuNiAyMjQgMzQ5LjUgMjI0IDM2OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTE4LjUgNi4yLTM1LjQgMTYuNy00OC45Qzg4LjkgMzA4LjQgOTYgMjkzLjggOTYgMjc2LjVMOTYgMTEyek0xNDQgMEM4Mi4xIDAgMzIgNTAuMiAzMiAxMTJsMCAxNjQuNGMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEMxMS4yIDMwNC4yIDAgMzM0LjggMCAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGMwLTMzLjItMTEuMi02My44LTMwLjEtODguMWMtLjktMS4yLTEuNS0yLjItMS43LTIuOGMtLjEtLjMtLjItLjUtLjItLjZMMjU2IDExMkMyNTYgNTAuMiAyMDUuOSAwIDE0NCAwem0wIDQxNmMyNi41IDAgNDgtMjEuNSA0OC00OGMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNMMTYwIDExMmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDIxMC43Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjNjMCAyNi41IDIxLjUgNDggNDggNDh6XCJdXG59O1xuY29uc3QgZmFNaWNyb2NoaXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWljcm9jaGlwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMmRiXCIsIFwiTTE3NiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNTYtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNTYtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwIDU2IDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNTYgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMzNS4zIDAgNjQtMjguNyA2NC02NGw0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtNTYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTU2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDBjMC0zNS4zLTI4LjctNjQtNjQtNjRsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLTU2IDAgMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLTU2IDAgMC00MHpNMTYwIDEyOGwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMzJsLTE5MiAwIDAgMTkyIDE5MiAwIDAtMTkyelwiXVxufTtcbmNvbnN0IGZhQ3Jvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3Jvd24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwODFdLCBcImY1MjFcIiwgXCJNMzA5IDEwNmMxMS40LTcgMTktMTkuNyAxOS0zNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDE0LjQgNy42IDI3IDE5IDM0TDIwOS43IDIyMC42Yy05LjEgMTguMi0zMi43IDIzLjQtNDguNiAxMC43TDcyIDE2MGM1LTYuNyA4LTE1IDgtMjRjMC0yMi4xLTE3LjktNDAtNDAtNDBTMCAxMTMuOSAwIDEzNnMxNy45IDQwIDQwIDQwYy4yIDAgLjUgMCAuNyAwTDg2LjQgNDI3LjRjNS41IDMwLjQgMzIgNTIuNiA2MyA1Mi42bDI3Ny4yIDBjMzAuOSAwIDU3LjQtMjIuMSA2My01Mi42TDUzNS4zIDE3NmMuMiAwIC41IDAgLjcgMGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDkgMyAxNy4zIDggMjRsLTg5LjEgNzEuM2MtMTUuOSAxMi43LTM5LjUgNy41LTQ4LjYtMTAuN0wzMDkgMTA2elwiXVxufTtcbmNvbnN0IGZhV2VpZ2h0SGFuZ2luZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3ZWlnaHQtaGFuZ2luZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjVjZFwiLCBcIk0yMjQgOTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTIyLjUgMzJjMy41LTEwIDUuNS0yMC44IDUuNS0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDExLjIgMS45IDIyIDUuNSAzMkwxMjAgMTI4Yy0yMiAwLTQxLjIgMTUtNDYuNiAzNi40bC03MiAyODhjLTMuNiAxNC4zLS40IDI5LjUgOC43IDQxLjJTMzMuMiA1MTIgNDggNTEybDQxNiAwYzE0LjggMCAyOC43LTYuOCAzNy44LTE4LjVzMTIuMy0yNi44IDguNy00MS4ybC03Mi0yODhDNDMzLjIgMTQzIDQxNCAxMjggMzkyIDEyOGwtNDUuNSAwelwiXVxufTtcbmNvbnN0IGZhWG1hcmtzTGluZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneG1hcmtzLWxpbmVzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTlhXCIsIFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnptMCAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDE2ek03IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTVMNyAzMTFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1TDQxIDE2N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6TTI2NSAxNjdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1ek00NTUgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwelwiXVxufTtcbmNvbnN0IGZhRmlsZVByZXNjcmlwdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXByZXNjcmlwdGlvbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU3MlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMjI0IDAgNjQgMHpNMjU2IDBsMCAxMjggMTI4IDBMMjU2IDB6TTEwNCAxOTZsNzIgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MGMwIDI1LjUtMTUuOSA0Ny4yLTM4LjMgNTUuOWw0MyA0MC4zIDMzLjgtMzFjOC4xLTcuNSAyMC44LTYuOSAyOC4zIDEuMnM2LjkgMjAuOC0xLjIgMjguM0wyNzAgMzc5LjdsMzEuNyAyOS43YzguMSA3LjYgOC41IDIwLjIgLjkgMjguM3MtMjAuMiA4LjUtMjguMyAuOWwtMzMuOS0zMS44LTM0LjkgMzJjLTguMSA3LjUtMjAuOCA2LjktMjguMy0xLjJzLTYuOS0yMC44IDEuMi0yOC4zbDMyLjYtMjkuOS02NC44LTYwLjhjLS45LS44LTEuNi0xLjctMi4zLTIuNmwtMjAgMCAwIDQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTY0IDAtODBjMC0xMSA5LTIwIDIwLTIwem03MiA4MGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTUyIDAgMCA0MCA1MiAwelwiXVxufTtcbmNvbnN0IGZhV2VpZ2h0U2NhbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2VpZ2h0LXNjYWxlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ3ZWlnaHRcIl0sIFwiZjQ5NlwiLCBcIk0xMjggMTc2YTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6TTM5MS44IDY0QzM1OS41IDI0LjkgMzEwLjcgMCAyNTYgMFMxNTIuNSAyNC45IDEyMC4yIDY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0bC01Ni4yIDB6TTI5NiAyMjRjMC0xMC42LTQuMS0yMC4yLTEwLjktMjcuNGwzMy42LTc4LjNjMy41LTguMS0uMy0xNy41LTguNC0yMXMtMTcuNSAuMy0yMSA4LjRMMjU1LjcgMTg0Yy0yMiAuMS0zOS43IDE4LTM5LjcgNDBjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MHpcIl1cbn07XG5jb25zdCBmYVdlaWdodCA9IGZhV2VpZ2h0U2NhbGU7XG5jb25zdCBmYVVzZXJHcm91cCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLWdyb3VwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MTAxLCBcInVzZXItZnJpZW5kc1wiXSwgXCJmNTAwXCIsIFwiTTk2IDEyOGExMjggMTI4IDAgMSAxIDI1NiAwQTEyOCAxMjggMCAxIDEgOTYgMTI4ek0wIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0bDkxLjQgMEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0wyOS43IDUxMkMxMy4zIDUxMiAwIDQ5OC43IDAgNDgyLjN6TTYwOS4zIDUxMmwtMTM3LjggMGM1LjQtOS40IDguNi0yMC4zIDguNi0zMmwwLThjMC02MC43LTI3LjEtMTE1LjItNjkuOC0xNTEuOGMyLjQtLjEgNC43LS4yIDcuMS0uMmw2MS40IDBDNTY3LjggMzIwIDY0MCAzOTIuMiA2NDAgNDgxLjNjMCAxNy0xMy44IDMwLjctMzAuNyAzMC43ek00MzIgMjU2Yy0zMSAwLTU5LTEyLjYtNzkuMy0zMi45QzM3Mi40IDE5Ni41IDM4NCAxNjMuNiAzODQgMTI4YzAtMjYuOC02LjYtNTIuMS0xOC4zLTc0LjNDMzg0LjMgNDAuMSA0MDcuMiAzMiA0MzIgMzJjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJzLTUwLjEgMTEyLTExMiAxMTJ6XCJdXG59O1xuY29uc3QgZmFVc2VyRnJpZW5kcyA9IGZhVXNlckdyb3VwO1xuY29uc3QgZmFBcnJvd1VwQVogPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtYS16JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LWFscGhhLXVwXCJdLCBcImYxNWVcIiwgXCJNMTgzLjYgNDIuNEMxNzcuNSAzNS44IDE2OSAzMiAxNjAgMzJzLTE3LjUgMy44LTIzLjYgMTAuNGwtODggOTZjLTExLjkgMTMtMTEuMSAzMy4zIDIgNDUuMnMzMy4zIDExLjEgNDUuMi0yTDEyOCAxNDYuMyAxMjggNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDEuNyAzMi40IDM1LjRjMTEuOSAxMyAzMi4yIDEzLjkgNDUuMiAyczEzLjktMzIuMiAyLTQ1LjJsLTg4LTk2ek0zMjAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDUwLjcgMC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUwLjcgMCA3My40LTczLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNNDE2IDMyYy0xMi4xIDAtMjMuMiA2LjgtMjguNiAxNy43bC02NCAxMjgtMTYgMzJjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w3LjItMTQuMyA4OC40IDAgNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC0xNi0zMi02NC0xMjhDNDM5LjIgMzguOCA0MjguMSAzMiA0MTYgMzJ6TTM5NS44IDE3Nkw0MTYgMTM1LjYgNDM2LjIgMTc2bC00MC40IDB6XCJdXG59O1xuY29uc3QgZmFTb3J0QWxwaGFVcCA9IGZhQXJyb3dVcEFaO1xuY29uc3QgZmFDaGVzc0tuaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1rbmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODIyXSwgXCJmNDQxXCIsIFwiTTk2IDQ4TDgyLjcgNjEuM0M3MC43IDczLjMgNjQgODkuNSA2NCAxMDYuNWwwIDEzMi40YzAgMTAuNyA1LjMgMjAuNyAxNC4yIDI2LjZsMTAuNiA3YzE0LjMgOS42IDMyLjcgMTAuNyA0OC4xIDNsMy4yLTEuNmMyLjYtMS4zIDUtMi44IDcuMy00LjVsNDkuNC0zN2M2LjYtNSAxNS43LTUgMjIuMyAwYzEwLjIgNy43IDkuOSAyMy4xLS43IDMwLjNMOTAuNCAzNTBDNzMuOSAzNjEuMyA2NCAzODAgNjQgNDAwbDMyMCAwIDI4LjktMTU5YzIuMS0xMS4zIDMuMS0yMi44IDMuMS0zNC4zbDAtMTQuN0M0MTYgODYgMzMwIDAgMjI0IDBMODMuOCAwQzcyLjkgMCA2NCA4LjkgNjQgMTkuOGMwIDcuNSA0LjIgMTQuMyAxMC45IDE3LjdMOTYgNDh6bTI0IDY4YTIwIDIwIDAgMSAxIDQwIDAgMjAgMjAgMCAxIDEgLTQwIDB6TTIyLjYgNDczLjRjLTQuMiA0LjItNi42IDEwLTYuNiAxNkMxNiA1MDEuOSAyNi4xIDUxMiAzOC42IDUxMmwzNzAuNyAwYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZMMzg0IDQzMiA2NCA0MzIgMjIuNiA0NzMuNHpcIl1cbn07XG5jb25zdCBmYUZhY2VMYXVnaFNxdWludCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWxhdWdoLXNxdWludCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGF1Z2gtc3F1aW50XCJdLCBcImY1OWJcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTk2LjggMzE0LjFjLTMuOC0xMy43IDcuNC0yNi4xIDIxLjYtMjYuMWwyNzUuMiAwYzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6bTM2LjctMTk5LjRsODkuOSA0Ny45YzEwLjcgNS43IDEwLjcgMjEuMSAwIDI2LjhsLTg5LjkgNDcuOWMtNy45IDQuMi0xNy41LTEuNS0xNy41LTEwLjVjMC0yLjggMS01LjUgMi44LTcuNmwzNi00My4yLTM2LTQzLjJjLTEuOC0yLjEtMi44LTQuOC0yLjgtNy42YzAtOSA5LjYtMTQuNyAxNy41LTEwLjV6TTM5NiAxMjUuMWMwIDIuOC0xIDUuNS0yLjggNy42bC0zNiA0My4yIDM2IDQzLjJjMS44IDIuMSAyLjggNC44IDIuOCA3LjZjMCA5LTkuNiAxNC43LTE3LjUgMTAuNWwtODkuOS00Ny45Yy0xMC43LTUuNy0xMC43LTIxLjEgMC0yNi44bDg5LjktNDcuOWM3LjktNC4yIDE3LjUgMS41IDE3LjUgMTAuNXpcIl1cbn07XG5jb25zdCBmYUxhdWdoU3F1aW50ID0gZmFGYWNlTGF1Z2hTcXVpbnQ7XG5jb25zdCBmYVdoZWVsY2hhaXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2hlZWxjaGFpcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjE5M1wiLCBcIk0xOTIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0xMjAuNSAyNDcuMmMxMi40LTQuNyAxOC43LTE4LjUgMTQtMzAuOXMtMTguNS0xOC43LTMwLjktMTRDNDMuMSAyMjUuMSAwIDI4My41IDAgMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwYzYxLjIgMCAxMTQuMy0zNC4zIDE0MS4yLTg0LjdjNi4yLTExLjcgMS44LTI2LjItOS45LTMyLjVzLTI2LjItMS44LTMyLjUgOS45QzI0MCA0NDAgMjAyLjggNDY0IDE2MCA0NjRDOTguMSA0NjQgNDggNDEzLjkgNDggMzUyYzAtNDcuOSAzMC4xLTg4LjggNzIuNS0xMDQuOHpNMjU5LjggMTc2bC0xLjktOS43Yy00LjUtMjIuMy0yNC0zOC4zLTQ2LjgtMzguM2MtMzAuMSAwLTUyLjcgMjcuNS00Ni44IDU3bDIzLjEgMTE1LjVjNiAyOS45IDMyLjIgNTEuNCA2Mi44IDUxLjRsNS4xIDBjLjQgMCAuOCAwIDEuMyAwbDk0LjEgMGM2LjcgMCAxMi42IDQuMSAxNSAxMC40TDQwMiA0NTkuMmM2IDE2LjEgMjMuOCAyNC42IDQwLjEgMTkuMWw0OC0xNmMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41cy0yMy43LTI1LjgtNDAuNS0yMC4ybC0xOC43IDYuMi0yNS41LTY4Yy0xMS43LTMxLjItNDEuNi01MS45LTc0LjktNTEuOWwtNjguNSAwLTkuNi00OCA2My40IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTc2LjIgMHpcIl1cbn07XG5jb25zdCBmYUNpcmNsZUFycm93VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWFycm93LXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvdy1jaXJjbGUtdXBcIl0sIFwiZjBhYVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg1IDIxNWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03MS03MUwyODAgMzkyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjE0LjEtNzEgNzFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMjM5IDEwM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwzODUgMjE1elwiXVxufTtcbmNvbnN0IGZhQXJyb3dDaXJjbGVVcCA9IGZhQ2lyY2xlQXJyb3dVcDtcbmNvbnN0IGZhVG9nZ2xlT24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9nZ2xlLW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjA1XCIsIFwiTTE5MiA2NEM4NiA2NCAwIDE1MCAwIDI1NlM4NiA0NDggMTkyIDQ0OGwxOTIgMGMxMDYgMCAxOTItODYgMTkyLTE5MnMtODYtMTkyLTE5Mi0xOTJMMTkyIDY0em0xOTIgOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6XCJdXG59O1xuY29uc3QgZmFQZXJzb25XYWxraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi13YWxraW5nJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTI4Njk0LCBcIndhbGtpbmdcIl0sIFwiZjU1NFwiLCBcIk0xNjAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTI2LjUgMTk5LjNjLTEgLjQtMS45IC44LTIuOSAxLjJsLTggMy41Yy0xNi40IDcuMy0yOSAyMS4yLTM0LjcgMzguMmwtMi42IDcuOGMtNS42IDE2LjgtMjMuNyAyNS44LTQwLjUgMjAuMnMtMjUuOC0yMy43LTIwLjItNDAuNWwyLjYtNy44YzExLjQtMzQuMSAzNi42LTYxLjkgNjkuNC03Ni41bDgtMy41YzIwLjgtOS4yIDQzLjMtMTQgNjYuMS0xNGM0NC42IDAgODQuOCAyNi44IDEwMS45IDY3LjlMMjgxIDIzMi43bDIxLjQgMTAuN2MxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zTDI0NyAyODcuM2MtMTAuMy01LjItMTguNC0xMy44LTIyLjgtMjQuNWwtOS42LTIzLTE5LjMgNjUuNSA0OS41IDU0YzUuNCA1LjkgOS4yIDEzIDExLjIgMjAuOGwyMyA5Mi4xYzQuMyAxNy4xLTYuMSAzNC41LTIzLjMgMzguOHMtMzQuNS02LjEtMzguOC0yMy4zbC0yMi04OC4xLTcwLjctNzcuMWMtMTQuOC0xNi4xLTIwLjMtMzguNi0xNC43LTU5LjdsMTYuOS02My41ek02OC43IDM5OGwyNS02Mi40YzIuMSAzIDQuNSA1LjggNyA4LjZsNDAuNyA0NC40LTE0LjUgMzYuMmMtMi40IDYtNiAxMS41LTEwLjYgMTYuMUw1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w2OC43IDM5OHpcIl1cbn07XG5jb25zdCBmYVdhbGtpbmcgPSBmYVBlcnNvbldhbGtpbmc7XG5jb25zdCBmYUwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbCcsXG4gIGljb246IFszMjAsIDUxMiwgWzEwOF0sIFwiNGNcIiwgXCJNNjQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzNTIgMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwzMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYUZpcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlyZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODI5M10sIFwiZjA2ZFwiLCBcIk0xNTkuMyA1LjRjNy44LTcuMyAxOS45LTcuMiAyNy43IC4xYzI3LjYgMjUuOSA1My41IDUzLjggNzcuNyA4NGMxMS0xNC40IDIzLjUtMzAuMSAzNy00Mi45YzcuOS03LjQgMjAuMS03LjQgMjggLjFjMzQuNiAzMyA2My45IDc2LjYgODQuNSAxMThjMjAuMyA0MC44IDMzLjggODIuNSAzMy44IDExMS45QzQ0OCA0MDQuMiAzNDguMiA1MTIgMjI0IDUxMkM5OC40IDUxMiAwIDQwNC4xIDAgMjc2LjVjMC0zOC40IDE3LjgtODUuMyA0NS40LTEzMS43QzczLjMgOTcuNyAxMTIuNyA0OC42IDE1OS4zIDUuNHpNMjI1LjcgNDE2YzI1LjMgMCA0Ny43LTcgNjguOC0yMWM0Mi4xLTI5LjQgNTMuNC04OC4yIDI4LjEtMTM0LjRjLTQuNS05LTE2LTkuNi0yMi41LTJsLTI1LjIgMjkuM2MtNi42IDcuNi0xOC41IDcuNC0yNC43LS41Yy0xNi41LTIxLTQ2LTU4LjUtNjIuOC03OS44Yy02LjMtOC0xOC4zLTguMS0yNC43LS4xYy0zMy44IDQyLjUtNTAuOCA2OS4zLTUwLjggOTkuNEMxMTIgMzc1LjQgMTYyLjYgNDE2IDIyNS43IDQxNnpcIl1cbn07XG5jb25zdCBmYUJlZFB1bHNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JlZC1wdWxzZScsXG4gIGljb246IFs2NDAsIDUxMiwgW1wicHJvY2VkdXJlc1wiXSwgXCJmNDg3XCIsIFwiTTQ4My4yIDkuNkw1MjQgNjRsOTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTA0IDBjLTcuNiAwLTE0LjctMy42LTE5LjItOS42TDQ2OC43IDcwLjNsLTQ3IDk5LjljLTMuNyA3LjgtMTEuMyAxMy4xLTE5LjkgMTMuN3MtMTYuOS0zLjQtMjEuNy0xMC42TDMzOS4yIDExMiAyMTYgMTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEzNiAwYzggMCAxNS41IDQgMjAgMTAuN2wyNC40IDM2LjYgNDUuOS05Ny41QzQ0NS45IDYuMiA0NTMuMiAxIDQ2MS42IC4xczE2LjYgMi43IDIxLjYgOS41ek0zMjAgMTYwbDEyLjcgMCAyMC43IDMxLjFjMTEuMiAxNi44IDMwLjYgMjYuMyA1MC43IDI0LjhzMzcuOS0xMy43IDQ2LjUtMzJMNDYxLjkgMTYwbDgyLjEgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMjI0IDAtMzIgMEw2NCA0NDhsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkwwIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0czMyIDE0LjMgMzIgMzJsMCAyNTYgMjI0IDAgMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS0xNDQgMGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpcIl1cbn07XG5jb25zdCBmYVByb2NlZHVyZXMgPSBmYUJlZFB1bHNlO1xuY29uc3QgZmFTaHV0dGxlU3BhY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2h1dHRsZS1zcGFjZScsXG4gIGljb246IFs2NDAsIDUxMiwgW1wic3BhY2Utc2h1dHRsZVwiXSwgXCJmMTk3XCIsIFwiTTEzMCA0ODBjNDAuNiAwIDgwLjQtMTEgMTE1LjItMzEuOUwzNTIgMzg0bC0yMjQgMCAwIDk2IDIgMHpNMzUyIDEyOEwyNDUuMiA2My45QzIxMC40IDQzIDE3MC42IDMyIDEzMCAzMmwtMiAwIDAgOTYgMjI0IDB6TTk2IDEyOGwwLTk2TDgwIDMyQzUzLjUgMzIgMzIgNTMuNSAzMiA4MGwwIDQ4IDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCAxNkwwIDMyOGwwIDE2YzAgMjIuMSAxNy45IDQwIDQwIDQwbC04IDAgMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwIDAtOTYgOCAwYzI2LjIgMCA0OS40LTEyLjYgNjQtMzJsMjg4IDBjNjkuMyAwIDEzNS0yMi43IDE3OS4yLTgxLjZjNi40LTguNSA2LjQtMjAuMyAwLTI4LjhDNTkxIDE4Mi43IDUyNS4zIDE2MCA0NTYgMTYwbC0yODggMGMtMTQuNi0xOS40LTM3LjgtMzItNjQtMzJsLTggMHpNNTEyIDI0My42bDAgMjQuOWMwIDE5LjYtMTUuOSAzNS42LTM1LjYgMzUuNmMtMi41IDAtNC40LTItNC40LTQuNGwwLTg3LjFjMC0yLjUgMi00LjQgNC40LTQuNGMxOS42IDAgMzUuNiAxNS45IDM1LjYgMzUuNnpcIl1cbn07XG5jb25zdCBmYVNwYWNlU2h1dHRsZSA9IGZhU2h1dHRsZVNwYWNlO1xuY29uc3QgZmFGYWNlTGF1Z2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1sYXVnaCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGF1Z2hcIl0sIFwiZjU5OVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNOTYuOCAzMTQuMWMtMy44LTEzLjcgNy40LTI2LjEgMjEuNi0yNi4xbDI3NS4yIDBjMTQuMiAwIDI1LjUgMTIuNCAyMS42IDI2LjFDMzk2LjIgMzgyIDMzMi4xIDQzMiAyNTYgNDMycy0xNDAuMi01MC0xNTkuMi0xMTcuOXpNMTQ0LjQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFMYXVnaCA9IGZhRmFjZUxhdWdoO1xuY29uc3QgZmFGb2xkZXJPcGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZvbGRlci1vcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MTk0LCAxMjg0NDksIDYxNzE3XSwgXCJmMDdjXCIsIFwiTTg4LjcgMjIzLjhMMCAzNzUuOCAwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDExNy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMjYuNSAyNi41YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdMNDE2IDk2YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzItMzM2IDBjLTIyLjggMC00My44IDEyLjEtNTUuMyAzMS44em0yNy42IDE2LjFDMTIyLjEgMjMwIDEzMi42IDIyNCAxNDQgMjI0bDQwMCAwYzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTExMiAxOTJDNDUzLjkgNDc0IDQ0My40IDQ4MCA0MzIgNDgwTDMyIDQ4MGMtMTEuNSAwLTIyLTYuMS0yNy43LTE2LjFzLTUuNy0yMi4yIC4xLTMyLjFsMTEyLTE5MnpcIl1cbn07XG5jb25zdCBmYUhlYXJ0Q2lyY2xlUGx1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUwMFwiLCBcIk00Ny42IDMwMC40TDIyOC4zIDQ2OS4xYzcuNSA3IDE3LjQgMTAuOSAyNy43IDEwLjlzMjAuMi0zLjkgMjcuNy0xMC45bDIuNi0yLjRDMjY3LjIgNDM4LjYgMjU2IDQwNC42IDI1NiAzNjhjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZjMjguMyAwIDU1IDYuNyA3OC43IDE4LjVjLjktNi41IDEuMy0xMyAxLjMtMTkuNmwwLTUuOGMwLTY5LjktNTAuNS0xMjkuNS0xMTkuNC0xNDFDMzQ3IDM2LjUgMzAwLjYgNTEuNCAyNjggODRMMjU2IDk2IDI0NCA4NGMtMzIuNi0zMi42LTc5LTQ3LjUtMTI0LjYtMzkuOUM1MC41IDU1LjYgMCAxMTUuMiAwIDE4NS4xbDAgNS44YzAgNDEuNSAxNy4yIDgxLjIgNDcuNiAxMDkuNXpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTE2LTIwOGwwIDQ4IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQ4IDAgMCA0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTQ4LTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNDggMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdXG59O1xuY29uc3QgZmFDb2RlRm9yayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb2RlLWZvcmsnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUxM2JcIiwgXCJNODAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM2wwIDM4LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zOC43QzMwNy43IDE0MSAyODggMTEyLjggMjg4IDgwYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM2wwIDM4LjdjMCA1My00MyA5Ni05NiA5NmwtNDggMCAwIDcwLjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuM2MwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zbDAtNzAuNy00OCAwYy01MyAwLTk2LTQzLTk2LTk2bDAtMzguN0MxOS43IDE0MSAwIDExMi44IDAgODBDMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIwOCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI0OCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpcIl1cbn07XG5jb25zdCBmYUNpdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2l0eScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyNzk2MV0sIFwiZjY0ZlwiLCBcIk00ODAgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNDgtNjQgMCAwLTcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzItNjQgMCAwLTcyYzAtMTMuMy0xMC43LTI0LTI0LTI0UzY0IDEwLjcgNjQgMjRsMCA3Mkw0OCA5NkMyMS41IDk2IDAgMTE3LjUgMCAxNDRsMCA5NkwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNTYgMCAzMiAwIDk2IDAgMTYwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTExMiAwIDAtMTQ0em05NiAzMjBsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnpNMjQwIDQxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2ek0xMjggNDAwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJ6TTU2MCAyNTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHpNMjU2IDE3NmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2ek0xMTIgMTYwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6TTI1NiAzMDRjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMnpNMTEyIDMyMGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2em0zMDQtNDhsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnpNNDAwIDY0YzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6bTE2IDExMmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2elwiXVxufTtcbmNvbnN0IGZhTWljcm9waG9uZUxpbmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21pY3JvcGhvbmUtbGluZXMnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjc4OTcsIFwibWljcm9waG9uZS1hbHRcIl0sIFwiZjNjOVwiLCBcIk05NiA5NmwwIDE2MGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bC04MCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDgwIDAgMC0zMi04MCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDgwIDAgMC0zMi04MCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDgwIDBjMC01My00My05Ni05Ni05NlM5NiA0MyA5NiA5NnpNMzIwIDI0MGwwIDE2YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4bDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDg5LjEgNjYuMiAxNjIuNyAxNTIgMTc0LjRsMCAzMy42LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwIDAtMzMuNmM4NS44LTExLjcgMTUyLTg1LjMgMTUyLTE3NC40bDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNHpcIl1cbn07XG5jb25zdCBmYU1pY3JvcGhvbmVBbHQgPSBmYU1pY3JvcGhvbmVMaW5lcztcbmNvbnN0IGZhUGVwcGVySG90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcHBlci1ob3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3OThdLCBcImY4MTZcIiwgXCJNNDI4LjMgM2MxMS42LTYuNCAyNi4yLTIuMyAzMi42IDkuM2w0LjggOC43YzE5LjMgMzQuNyAxOS44IDc1LjcgMy40IDExMEM0OTUuOCAxNTkuNiA1MTIgMTk3LjkgNTEyIDI0MGMwIDE4LjUtMy4xIDM2LjMtOC45IDUyLjhjLTYuMSAxNy4zLTI4LjUgMTYuMy0zNi44LS4xbC0xMS43LTIzLjRjLTQuMS04LjEtMTIuNC0xMy4zLTIxLjUtMTMuM0wzNjAgMjU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xNy4xIDBjLTIxLjMgMC0zMC0yMy45LTEwLjgtMzIuOUMzMDQuNyA4NS40IDMyNy43IDgwIDM1MiA4MGMyOC4zIDAgNTQuOCA3LjMgNzcuOCAyMC4yYzUuNS0xOC4yIDMuNy0zOC40LTYtNTUuOEw0MTkgMzUuN2MtNi40LTExLjYtMi4zLTI2LjIgOS4zLTMyLjZ6TTE3MS4yIDM0NS41TDI2NCAxNjBsNDAgMCAwIDgwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDc2LjIgMCAyMy45IDQ3LjhDMzcyLjMgNDQzLjkgMjQ0LjMgNTEyIDEwMy4yIDUxMmwtNTguOCAwQzE5LjkgNTEyIDAgNDkyLjEgMCA0NjcuNmMwLTIwLjggMTQuNS0zOC44IDM0LjgtNDMuM2w0OS44LTExLjFjMzcuNi04LjQgNjkuNS0zMy4yIDg2LjctNjcuN3pcIl1cbn07XG5jb25zdCBmYVVubG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1bmxvY2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNzVdLCBcImYwOWNcIiwgXCJNMTQ0IDE0NGMwLTQ0LjIgMzUuOC04MCA4MC04MGMzMS45IDAgNTkuNCAxOC42IDcyLjMgNDUuN2M3LjYgMTYgMjYuNyAyMi44IDQyLjYgMTUuMnMyMi44LTI2LjcgMTUuMi00Mi42QzMzMSAzMy43IDI4MS41IDAgMjI0IDBDMTQ0LjUgMCA4MCA2NC41IDgwIDE0NGwwIDQ4LTE2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yNDAgMCAwLTQ4elwiXVxufTtcbmNvbnN0IGZhQ29sb25TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbG9uLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxNDBcIiwgXCJNMjU1IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzE5Ny4yIDcuMSAxOTMgMjQuMkwxODEuOSA2OC42Qzk2LjEgODcuOCAzMiAxNjQuNCAzMiAyNTZjMCA1OC4xIDI1LjggMTEwLjIgNjYuNyAxNDUuNEw4MSA0NzIuMmMtNC4zIDE3LjEgNi4xIDM0LjUgMjMuMyAzOC44czM0LjUtNi4xIDM4LjgtMjMuM2wxMy01Mi4xYzkgMy40IDE4LjQgNi4yIDI4IDguMkwxNzcgNDcyLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTAuNC00MS40YzMzLjQtNC40IDY0LjEtMTcuNCA4OS44LTM2LjdjMTQuMS0xMC42IDE3LTMwLjcgNi40LTQ0LjhzLTMwLjctMTctNDQuOC02LjRjLTEwLjIgNy43LTIxLjcgMTMuOS0zNCAxOC4zTDMyMSAxNjBjOS40LS4zIDE4LjUtNC43IDI0LjYtMTIuOGMxMC42LTE0LjEgNy44LTM0LjItNi40LTQ0LjhjLTEuMS0uOC0yLjItMS42LTMuMy0yLjRMMzUxIDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzI5My4yIDcuMSAyODkgMjQuMkwyNzcuMiA3MS41Yy05LjMtMi43LTE4LjgtNC42LTI4LjYtNS45TDI1NSAzOS44ek0xNjMuMiAxNDMuM0wxMTcuMyAzMjYuOEMxMDMuOSAzMDYuNSA5NiAyODIuMiA5NiAyNTZjMC00OC43IDI3LjItOTEgNjcuMi0xMTIuN3ptOC42IDIyOS41bDYxLjEtMjQ0LjZjOS45IC43IDE5LjUgMi41IDI4LjcgNS4zbC02MiAyNDguMWMtOS43LTEuOS0xOS00LjgtMjcuOC04Ljh6XCJdXG59O1xuY29uc3QgZmFIZWFkc2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWRzZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1OTBcIiwgXCJNMjU2IDQ4QzE0MS4xIDQ4IDQ4IDE0MS4xIDQ4IDI1NmwwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDBDMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2bDAgMTQ0LjFjMCA0OC42LTM5LjQgODgtODguMSA4OEwzMTMuNiA0ODhjLTguMyAxNC4zLTIzLjggMjQtNDEuNiAyNGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGwzMiAwYzE3LjggMCAzMy4zIDkuNyA0MS42IDI0bDExMC40IC4xYzIyLjEgMCA0MC0xNy45IDQwLTQwTDQ2NCAyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4ek0xNDQgMjA4bDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNDhjMC0zNS4zIDI4LjctNjQgNjQtNjR6bTIyNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2IDB6XCJdXG59O1xuY29uc3QgZmFTdG9yZVNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0b3JlLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMDcxXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdsLTg2LjgtNjggMC0xNy4xIDAtMTMxLjRjLTQgMS04IDEuOC0xMi4zIDIuM2MwIDAgMCAwLS4xIDBjLTUuMyAuNy0xMC43IDEuMS0xNi4yIDEuMWMtMTIuNCAwLTI0LjMtMS45LTM1LjQtNS4zbDAgMTAwLjNMMzAxLjIgMjEwLjdjNy00LjQgMTMuMy05LjcgMTguOC0xNS43YzE1LjkgMTcuNiAzOS4xIDI5IDY1LjIgMjljMjYuMiAwIDQ5LjMtMTEuNCA2NS4yLTI5YzE2IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzQuMSAwIDguMS0uMyAxMi4xLS44YzU1LjUtNy40IDgxLjgtNzIuNSA1Mi4xLTExOS40TDUyMi4zIDEzLjFDNTE3LjIgNSA1MDguMSAwIDQ5OC40IDBMMTQxLjYgMGMtOS43IDAtMTguOCA1LTIzLjkgMTMuMWwtMjIuNyAzNkwzOC44IDUuMXptNzMuNCAyMTguMWM0IC41IDguMSAuOCAxMi4xIC44YzExIDAgMjEuNC0yIDMxLTUuNkw0OC45IDEzNC41Yy02LjEgNDAuNiAxOS41IDgyLjggNjMuMyA4OC43ek0xNjAgMzg0bDAtMTMzLjRjLTExLjIgMy41LTIzLjIgNS40LTM1LjYgNS40Yy01LjUgMC0xMS0uNC0xNi4zLTEuMWwtLjEgMGMtNC4xLS42LTguMS0xLjMtMTItMi4zTDk2IDM4NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzEyLjkgMCAyNC44LTMuOCAzNC45LTEwLjNMMzY1LjUgMzg0IDE2MCAzODR6XCJdXG59O1xuY29uc3QgZmFSb2FkQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NjZcIiwgXCJNMjEzLjIgMzJMMjg4IDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDc0LjggMGMyNy4xIDAgNTEuMyAxNy4xIDYwLjMgNDIuNmw0Mi43IDEyMC42Yy0xMC45LTIuMS0yMi4yLTMuMi0zMy44LTMuMmMtNTkuNSAwLTExMi4xIDI5LjYtMTQ0IDc0LjhsMC00Mi44YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJjMi4zIDAgNC42LS4zIDYuOC0uN2MtNC41IDE1LjUtNi44IDMxLjgtNi44IDQ4LjdjMCA1LjQgLjIgMTAuNyAuNyAxNmwtLjcgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NEw4Ni42IDQ4MEM1Ni41IDQ4MCAzMiA0NTUuNSAzMiA0MjUuNGMwLTYuMiAxLjEtMTIuNCAzLjEtMTguMkwxNTIuOSA3NC42QzE2MiA0OS4xIDE4Ni4xIDMyIDIxMy4yIDMyek00OTYgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMjIuNiAxNDRsMzYuNy0zNi43YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBMNDk2IDM0NS40bC0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMNDczLjQgMzY4bC0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEw0OTYgMzkwLjZsMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw1MTguNiAzNjh6XCJdXG59O1xuY29uc3QgZmFVc2VyTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1taW51cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjUwM1wiLCBcIk05NiAxMjhhMTI4IDEyOCAwIDEgMSAyNTYgMEExMjggMTI4IDAgMSAxIDk2IDEyOHpNMCA0ODIuM0MwIDM4My44IDc5LjggMzA0IDE3OC4zIDMwNGw5MS40IDBDMzY4LjIgMzA0IDQ0OCAzODMuOCA0NDggNDgyLjNjMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMMjkuNyA1MTJDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zek00NzIgMjAwbDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpcIl1cbn07XG5jb25zdCBmYU1hcnNTdHJva2VVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLXN0cm9rZS11cCcsXG4gIGljb246IFszMjAsIDUxMiwgWzk4OTYsIFwibWFycy1zdHJva2UtdlwiXSwgXCJmMjJhXCIsIFwiTTE0OC43IDQuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGw2NCA2NGM0LjYgNC42IDUuOSAxMS41IDMuNSAxNy40cy04LjMgOS45LTE0LjggOS45bC00MCAwIDAgMjQgMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMCAwIDI0YzAgLjYgMCAxLjItLjEgMS44Yzc3IDExLjYgMTM2LjEgNzggMTM2LjEgMTU4LjJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0NDAuNCAwIDM1MmMwLTgwLjIgNTkuMS0xNDYuNyAxMzYuMS0xNTguMmMwLS42LS4xLTEuMi0uMS0xLjhsMC0yNC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDMyIDAgMC0yNEw5NiA5NmMtNi41IDAtMTIuMy0zLjktMTQuOC05LjlzLTEuMS0xMi45IDMuNS0xNy40bDY0LTY0ek0yNTYgMzUyQTk2IDk2IDAgMSAwIDY0IDM1MmE5NiA5NiAwIDEgMCAxOTIgMHpcIl1cbn07XG5jb25zdCBmYU1hcnNTdHJva2VWID0gZmFNYXJzU3Ryb2tlVXA7XG5jb25zdCBmYUNoYW1wYWduZUdsYXNzZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hhbXBhZ25lLWdsYXNzZXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzNDYsIFwiZ2xhc3MtY2hlZXJzXCJdLCBcImY3OWZcIiwgXCJNMTU1LjYgMTcuM0MxNjMgMyAxNzkuOS0zLjYgMTk1IDEuOUwzMjAgNDcuNWwxMjUtNDUuNmMxNS4xLTUuNSAzMiAxLjEgMzkuNCAxNS40bDc4LjggMTUyLjljMjguOCA1NS44IDEwLjMgMTIyLjMtMzguNSAxNTYuNkw1NTYuMSA0MTNsNDEtMTVjMTYuNi02IDM1IDIuNSA0MSAxOS4xcy0yLjUgMzUtMTkuMSA0MWwtNzEuMSAyNS45TDQ3Ni44IDUxMGMtMTYuNiA2LjEtMzUtMi41LTQxLTE5LjFzMi41LTM1IDE5LjEtNDFsNDEtMTUtMzEuMy04Ni4yYy01OS40IDUuMi0xMTYuMi0zNC0xMzAtOTUuMkwzMjAgMTg4LjhsLTE0LjYgNjQuN2MtMTMuOCA2MS4zLTcwLjYgMTAwLjQtMTMwIDk1LjJsLTMxLjMgODYuMiA0MSAxNWMxNi42IDYgMjUuMiAyNC40IDE5LjEgNDFzLTI0LjQgMjUuMi00MSAxOS4xTDkyLjIgNDg0LjEgMjEuMSA0NTguMmMtMTYuNi02LjEtMjUuMi0yNC40LTE5LjEtNDFzMjQuNC0yNS4yIDQxLTE5LjFsNDEgMTUgMzEuMy04Ni4yQzY2LjUgMjkyLjUgNDguMSAyMjYgNzYuOSAxNzAuMkwxNTUuNiAxNy4zem00NCA1NC40bC0yNy4yIDUyLjhMMjYxLjYgMTU3bDEzLjEtNTcuOUwxOTkuNiA3MS43em0yNDAuOSAwTDM2NS40IDk5LjEgMzc4LjUgMTU3bDg5LjItMzIuNUw0NDAuNSA3MS43elwiXVxufTtcbmNvbnN0IGZhR2xhc3NDaGVlcnMgPSBmYUNoYW1wYWduZUdsYXNzZXM7XG5jb25zdCBmYUNsaXBib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbGlwYm9hcmQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDNdLCBcImYzMjhcIiwgXCJNMTkyIDBjLTQxLjggMC03Ny40IDI2LjctOTAuNSA2NEw2NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NGwtMzcuNSAwQzI2OS40IDI2LjcgMjMzLjggMCAxOTIgMHptMCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTExMiAxOTJsMTYwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2MCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MGFcIiwgXCJNMzIwLjcgMzUyYzguMS04OS43IDgzLjUtMTYwIDE3NS4zLTE2MGM4LjkgMCAxNy42IC43IDI2LjEgMS45TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xbDMyIDAgMCA2OS43Yy0uMSAuOS0uMSAxLjgtLjEgMi44bDAgMTEyYzAgMjIuMSAxNy45IDQwIDQwIDQwbDE2IDBjMS4yIDAgMi40LS4xIDMuNi0uMmMxLjUgLjEgMyAuMiA0LjUgLjJsMzEuOSAwIDI0IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC0yNCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDAgLjcgMHpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wLTE0NGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYUZpbGVBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtYXJyb3ctdXAnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImZpbGUtdXBsb2FkXCJdLCBcImY1NzRcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODgtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDIyNCAwIDY0IDB6TTI1NiAwbDAgMTI4IDEyOCAwTDI1NiAwek0yMTYgNDA4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTAyLjEtMzEgMzFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNzItNzJjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzEtMzFMMjE2IDQwOHpcIl1cbn07XG5jb25zdCBmYUZpbGVVcGxvYWQgPSBmYUZpbGVBcnJvd1VwO1xuY29uc3QgZmFXaWZpID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dpZmknLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcIndpZmktM1wiLCBcIndpZmktc3Ryb25nXCJdLCBcImYxZWJcIiwgXCJNNTQuMiAyMDIuOUMxMjMuMiAxMzYuNyAyMTYuOCA5NiAzMjAgOTZzMTk2LjggNDAuNyAyNjUuOCAxMDYuOWMxMi44IDEyLjIgMzMgMTEuOCA0NS4yLS45czExLjgtMzMtLjktNDUuMkM1NDkuNyA3OS41IDQ0MC40IDMyIDMyMCAzMlM5MC4zIDc5LjUgOS44IDE1Ni43Qy0yLjkgMTY5LTMuMyAxODkuMiA4LjkgMjAyczMyLjUgMTMuMiA0NS4yIC45ek0zMjAgMjU2YzU2LjggMCAxMDguNiAyMS4xIDE0OC4yIDU2YzEzLjMgMTEuNyAzMy41IDEwLjQgNDUuMi0yLjhzMTAuNC0zMy41LTIuOC00NS4yQzQ1OS44IDIxOS4yIDM5MyAxOTIgMzIwIDE5MnMtMTM5LjggMjcuMi0xOTAuNSA3MmMtMTMuMyAxMS43LTE0LjUgMzEuOS0yLjggNDUuMnMzMS45IDE0LjUgNDUuMiAyLjhjMzkuNS0zNC45IDkxLjMtNTYgMTQ4LjItNTZ6bTY0IDE2MGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6XCJdXG59O1xuY29uc3QgZmFXaWZpMyA9IGZhV2lmaTtcbmNvbnN0IGZhV2lmaVN0cm9uZyA9IGZhV2lmaTtcbmNvbnN0IGZhQmF0aCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXRoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzA1LCBcImJhdGh0dWJcIl0sIFwiZjJjZFwiLCBcIk05NiA3Ny4zYzAtNy4zIDUuOS0xMy4zIDEzLjMtMTMuM2MzLjUgMCA2LjkgMS40IDkuNCAzLjlsMTQuOSAxNC45QzEzMCA5MS44IDEyOCAxMDEuNyAxMjggMTEyYzAgMTkuOSA3LjIgMzggMTkuMiA1MmMtNS4zIDkuMi00IDIxLjEgMy44IDI5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwTDI4OSA4OWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWMtNy45LTcuOS0xOS44LTkuMS0yOS0zLjhDMjQ2IDM5LjIgMjI3LjkgMzIgMjA4IDMyYy0xMC4zIDAtMjAuMiAyLTI5LjIgNS41TDE2My45IDIyLjZDMTQ5LjQgOC4xIDEyOS43IDAgMTA5LjMgMEM2Ni42IDAgMzIgMzQuNiAzMiA3Ny4zTDMyIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAyNTYgOTYgNzcuM3pNMzIgMzUybDAgMTZjMCAyOC40IDEyLjQgNTQgMzIgNzEuNkw2NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2IDI1NiAwIDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQwLjRjMTkuNi0xNy42IDMyLTQzLjEgMzItNzEuNmwwLTE2TDMyIDM1MnpcIl1cbn07XG5jb25zdCBmYUJhdGh0dWIgPSBmYUJhdGg7XG5jb25zdCBmYVVuZGVybGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1bmRlcmxpbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwY2RcIiwgXCJNMTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDEyOGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMTI4LTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDEyOGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MHMtMTYwLTcxLjYtMTYwLTE2MEw2NCA5NiA0OCA5NkMzMC4zIDk2IDE2IDgxLjcgMTYgNjR6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdXG59O1xuY29uc3QgZmFVc2VyUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItcGVuJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2VyLWVkaXRcIl0sIFwiZjRmZlwiLCBcIk0yMjQgMjU2QTEyOCAxMjggMCAxIDAgMjI0IDBhMTI4IDEyOCAwIDEgMCAwIDI1NnptLTQ1LjcgNDhDNzkuOCAzMDQgMCAzODMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJsMjkzLjEgMGMtMy4xLTguOC0zLjctMTguNC0xLjQtMjcuOGwxNS02MC4xYzIuOC0xMS4zIDguNi0yMS41IDE2LjgtMjkuN2w0MC4zLTQwLjNjLTMyLjEtMzEtNzUuNy01MC4xLTEyMy45LTUwLjFsLTkxLjQgMHptNDM1LjUtNjguM2MtMTUuNi0xNS42LTQwLjktMTUuNi01Ni42IDBsLTI5LjQgMjkuNCA3MSA3MSAyOS40LTI5LjRjMTUuNi0xNS42IDE1LjYtNDAuOSAwLTU2LjZsLTE0LjQtMTQuNHpNMzc1LjkgNDE3Yy00LjEgNC4xLTcgOS4yLTguNCAxNC45bC0xNSA2MC4xYy0xLjQgNS41IC4yIDExLjIgNC4yIDE1LjJzOS43IDUuNiAxNS4yIDQuMmw2MC4xLTE1YzUuNi0xLjQgMTAuOC00LjMgMTQuOS04LjRMNTc2LjEgMzU4LjdsLTcxLTcxTDM3NS45IDQxN3pcIl1cbn07XG5jb25zdCBmYVVzZXJFZGl0ID0gZmFVc2VyUGVuO1xuY29uc3QgZmFTaWduYXR1cmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2lnbmF0dXJlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNWI3XCIsIFwiTTE5MiAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDcuOGMwIDI3LjctMi40IDU1LjMtNy4xIDgyLjVsLTg0LjQgMjUuM2MtNDAuNiAxMi4yLTY4LjQgNDkuNi02OC40IDkybDAgNzEuOWMwIDQwIDMyLjUgNzIuNSA3Mi41IDcyLjVjMjYgMCA1MC0xMy45IDYyLjktMzYuNWwxMy45LTI0LjNjMjYuOC00NyA0Ni41LTk3LjcgNTguNC0xNTAuNWw5NC40LTI4LjMtMTIuNSAzNy41Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44czE1LjcgMTMuMyAyNiAxMy4zbDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04My42IDAgMTgtNTMuOWMzLjgtMTEuMyAuOS0yMy44LTcuNC0zMi40cy0yMC43LTExLjgtMzIuMi04LjRMMzE2LjQgMTk4LjFjMi40LTIwLjcgMy42LTQxLjQgMy42LTYyLjNsMC03LjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJ6bS05LjIgMTc3bDQ5LTE0LjdjLTEwLjQgMzMuOC0yNC41IDY2LjQtNDIuMSA5Ny4ybC0xMy45IDI0LjNjLTEuNSAyLjYtNC4zIDQuMy03LjQgNC4zYy00LjcgMC04LjUtMy44LTguNS04LjVsMC03MS45YzAtMTQuMSA5LjMtMjYuNiAyMi44LTMwLjd6TTI0IDM2OGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MC4zIDBjLS4yLTIuOC0uMy01LjYtLjMtOC41TDY0IDM2OGwtNDAgMHptNTkyIDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMTAuMSAwYy02LjcgMTYuMy0xNC4yIDMyLjMtMjIuMyA0OEw2MTYgNDE2elwiXVxufTtcbmNvbnN0IGZhU3Ryb29wd2FmZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Ryb29wd2FmZWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NTFcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0zMTIuNiA2My43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEwyNTYgOTcuNiAyMjIuMSA2My43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDMzLjkgMzMuOS00NS4zIDQ1LjMtNTYuNi01Ni42Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDU2LjYgNTYuNi00NS4zIDQ1LjNMODYuMyAxOTkuNGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw5Ny42IDI1NiA2My43IDI4OS45Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzMuOS0zMy45IDQ1LjMgNDUuMy01Ni42IDU2LjZjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni42LTU2LjYgNDUuMyA0NS4zLTMzLjkgMzMuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDI1NiA0MTQuNGwzMy45IDMzLjljNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zMy45LTMzLjkgNDUuMy00NS4zIDU2LjYgNTYuNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTU2LjYtNTYuNiA0NS4zLTQ1LjMgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw0MTQuNCAyNTZsMzMuOS0zMy45YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTMzLjkgMzMuOS00NS4zLTQ1LjMgNTYuNi01Ni42YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTU2LjYgNTYuNi00NS4zLTQ1LjMgMzMuOS0zMy45YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42ek0xNDIuOSAyNTZsNDUuMy00NS4zTDIzMy40IDI1NmwtNDUuMyA0NS4zTDE0Mi45IDI1NnptNjcuOSA2Ny45TDI1NiAyNzguNmw0NS4zIDQ1LjNMMjU2IDM2OS4xbC00NS4zLTQ1LjN6TTI3OC42IDI1Nmw0NS4zLTQ1LjNMMzY5LjEgMjU2bC00NS4zIDQ1LjNMMjc4LjYgMjU2em0yMi42LTY3LjlMMjU2IDIzMy40bC00NS4zLTQ1LjNMMjU2IDE0Mi45bDQ1LjMgNDUuM3pcIl1cbn07XG5jb25zdCBmYUJvbGQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9sZCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjAzMlwiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDQ4IDAgMTYgMCAxMjggMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGMwIDMxLjMtMTEuMyA2MC4xLTMwIDgyLjNjMzcuMSAyMi40IDYyIDYzLjEgNjIgMTA5LjdjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhMOTYgNDgwbC0xNiAwLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTE2MEw0OCA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0yMjQgMjI0YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0TDExMiA5NmwwIDEyOCAxMTIgMHpNMTEyIDI4OGwwIDEyOCAxNDQgMGMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NGwtMzIgMC0xMTIgMHpcIl1cbn07XG5jb25zdCBmYUFuY2hvckxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5jaG9yLWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YWRcIiwgXCJNMzIwIDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bTIxLjEgODBDMzY3IDE1OC44IDM4NCAxMjkuNCAzODQgOTZjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAzMy40IDE3IDYyLjggNDIuOSA4MEwyMjQgMTc2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAyMDgtNDggMGMtNTMgMC05Ni00My05Ni05NmwwLTYuMSA3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTcgMCA2LjFjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBsODAgMCA4MCAwYzggMCAxNS45LS42IDIzLjYtMS43Yy00LjgtOS03LjYtMTkuMy03LjYtMzAuM2wwLTMzLjNjLTUuMiAuOS0xMC41IDEuMy0xNiAxLjNsLTQ4IDAgMC0yMDggMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTAuOSAwek01MjggMjQwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDgtNjQgMCAwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJsMCA0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG5jb25zdCBmYUJ1aWxkaW5nTmdvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLW5nbycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRkN1wiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC00MTZjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTExMi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0xNjggNjRsNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMCAwIDY0IDE2IDAgMC0xNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtODhjMC04LjggNy4yLTE2IDE2LTE2ek0zMDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZ6bS00OCAxNmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMzJjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0zMnpNNjEuMyA3MS4xbDM0LjcgNTJMOTYgODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDk2YzAgNy4xLTQuNiAxMy4zLTExLjQgMTUuM3MtMTQtLjYtMTcuOS02LjRMNjQgMTMyLjggNjQgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOTZjMC03LjEgNC42LTEzLjMgMTEuNC0xNS4zczE0IC42IDE3LjkgNi40elwiXVxufTtcbmNvbnN0IGZhTWFuYXRTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hbmF0LXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxZDVcIiwgXCJNMTkyIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDM0LjdDNjkuMiAxMTMuOSAwIDE5Mi45IDAgMjg4TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC01OS42IDQwLjgtMTA5LjggOTYtMTI0bDAgMjg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yODRjNTUuMiAxNC4yIDk2IDY0LjMgOTYgMTI0bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC05NS4xLTY5LjItMTc0LjEtMTYwLTE4OS4zTDIyNCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpcIl1cbn07XG5jb25zdCBmYU5vdEVxdWFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ25vdC1lcXVhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUzZVwiLCBcIk0zNjkuOCAzNy40YzE0LjcgOS44IDE4LjcgMjkuNyA4LjkgNDQuNEwzMzcuMSAxNDRsNjIuOSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMDUuNSAwLTY0IDk2TDQwMCAzMDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIxMi4yIDAtNjUuMiA5Ny43Yy05LjggMTQuNy0yOS43IDE4LjctNDQuNCA4LjlzLTE4LjctMjkuNy04LjktNDQuNEwxMTAuOSAzNjggNDggMzY4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEwNS41IDAgNjQtOTZMNDggMjA4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDIxMi4yIDAgNjUuMi05Ny43YzkuOC0xNC43IDI5LjctMTguNyA0NC40LTguOXpcIl1cbn07XG5jb25zdCBmYUJvcmRlclRvcExlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9yZGVyLXRvcC1sZWZ0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJib3JkZXItc3R5bGVcIl0sIFwiZjg1M1wiLCBcIk0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzM2YzAtOC44IDcuMi0xNiAxNi0xNmwzMzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCAzMkMzNS44IDMyIDAgNjcuOCAwIDExMkwwIDQ0OHptMTYwIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTkyIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptLTk2IDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTkyIDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDE2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTAgMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFCb3JkZXJTdHlsZSA9IGZhQm9yZGVyVG9wTGVmdDtcbmNvbnN0IGZhTWFwTG9jYXRpb25Eb3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFwLWxvY2F0aW9uLWRvdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibWFwLW1hcmtlZC1hbHRcIl0sIFwiZjVhMFwiLCBcIk00MDggMTIwYzAgNTQuNi03My4xIDE1MS45LTEwNS4yIDE5MmMtNy43IDkuNi0yMiA5LjYtMjkuNiAwQzI0MS4xIDI3MS45IDE2OCAxNzQuNiAxNjggMTIwQzE2OCA1My43IDIyMS43IDAgMjg4IDBzMTIwIDUzLjcgMTIwIDEyMHptOCA4MC40YzMuNS02LjkgNi43LTEzLjggOS42LTIwLjZjLjUtMS4yIDEtMi41IDEuNS0zLjdsMTE2LTQ2LjRDNTU4LjkgMTIzLjQgNTc2IDEzNSA1NzYgMTUybDAgMjcwLjhjMCA5LjgtNiAxOC42LTE1LjEgMjIuM0w0MTYgNTAzbDAtMzAyLjZ6TTEzNy42IDEzOC4zYzIuNCAxNC4xIDcuMiAyOC4zIDEyLjggNDEuNWMyLjkgNi44IDYuMSAxMy43IDkuNiAyMC42bDAgMjUxLjRMMzIuOSA1MDIuN0MxNy4xIDUwOSAwIDQ5Ny40IDAgNDgwLjRMMCAyMDkuNmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMi42LTQ5ek0zMjcuOCAzMzJjMTMuOS0xNy40IDM1LjctNDUuNyA1Ni4yLTc3bDAgMjQ5LjNMMTkyIDQ0OS40IDE5MiAyNTVjMjAuNSAzMS4zIDQyLjMgNTkuNiA1Ni4yIDc3YzIwLjUgMjUuNiA1OS4xIDI1LjYgNzkuNiAwek0yODggMTUyYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpcIl1cbn07XG5jb25zdCBmYU1hcE1hcmtlZEFsdCA9IGZhTWFwTG9jYXRpb25Eb3Q7XG5jb25zdCBmYUplZGkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnamVkaScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjY2OVwiLCBcIk0yNDYgMzE1LjdsLTIxLjItMzEuOWMtMi4xLTMuMi0xLjctNy40IDEtMTAuMXM2LjktMy4xIDEwLjEtMWwyOS41IDE5LjdjMi4xIDEuNCA0LjkgMCA1LTIuNkwyNzkuNyA4Yy4xLTQuNSAzLjgtOCA4LjMtOHM4LjEgMy41IDguMyA4bDkuNCAyODEuOWMuMSAyLjUgMi45IDMuOSA1IDIuNmwyOS41LTE5LjdjMy4yLTIuMSA3LjQtMS43IDEwLjEgMXMzLjEgNi45IDEgMTAuMUwzMzAgMzE1LjdjLTEuMyAxLjktLjIgNC41IDIgNC45bDM3LjYgNy41YzMuNyAuNyA2LjQgNCA2LjQgNy44cy0yLjcgNy4xLTYuNCA3LjhMMzMyIDM1MS40Yy0yLjIgLjQtMy4zIDMtMiA0LjlsMjEuMiAzMS45YzIuMSAzLjIgMS43IDcuNC0xIDEwLjFzLTYuOSAzLjEtMTAuMSAxbC0yNi4zLTE3LjZjLTIuMi0xLjQtNS4xIC4yLTUgMi44bDIuMSA2MS41QzM3MC42IDQzNS4yIDQxNiAzODIuOSA0MTYgMzIwYzAtMzctMTUuNy03MC40LTQwLjgtOTMuN2MtNy02LjUtNi41LTE4LjYgMS0yNC40QzQxMC4xIDE3NS41IDQzMiAxMzQuMyA0MzIgODhjMC0xNi44LTIuOS0zMy04LjItNDhjLTQuNi0xMyAxMC4yLTMwIDIxLjQtMjJjNTMuNSAzOCA5Mi43IDk0LjggMTA3LjggMTYwLjdjLjUgMi4xLS4yIDQuMy0xLjcgNS45bC0yOC40IDI4LjRjLTQgNC0xLjIgMTAuOSA0LjUgMTAuOWwyNiAwYzMuNCAwIDYuMiAyLjYgNi4zIDZjLjEgMy4zIC4yIDYuNiAuMiAxMGMwIDE3LjUtMS43IDM0LjctNC44IDUxLjNjLS4yIDEuMi0uOSAyLjQtMS43IDMuM2wtNDYuNSA0Ni41Yy00IDQtMS4yIDEwLjkgNC41IDEwLjlsMTQuNiAwYzQuNiAwIDcuNyA0LjggNS43IDlDNDg3LjIgNDUwLjUgMzk0LjggNTEyIDI4OCA1MTJTODguOCA0NTAuNSA0NC4zIDM2MWMtMi4xLTQuMiAxLTkgNS43LTlsMTQuNiAwYzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjIuNiAyOTQuNmMtLjktLjktMS41LTItMS43LTMuM0MxNy43IDI3NC43IDE2IDI1Ny41IDE2IDI0MGMwLTMuMyAuMS02LjcgLjItMTBjLjEtMy40IDIuOS02IDYuMy02bDI2IDBjNS43IDAgOC42LTYuOSA0LjUtMTAuOUwyNC42IDE4NC42Yy0xLjUtMS41LTIuMi0zLjgtMS43LTUuOUMzOC4xIDExMi44IDc3LjMgNTYgMTMwLjggMThjMTEuMy04IDI2IDguOSAyMS40IDIyYy01LjMgMTUtOC4yIDMxLjItOC4yIDQ4YzAgNDYuMyAyMS45IDg3LjUgNTUuOCAxMTMuOWM3LjUgNS44IDggMTcuOSAxIDI0LjRDMTc1LjcgMjQ5LjYgMTYwIDI4MyAxNjAgMzIwYzAgNjIuOSA0NS40IDExNS4yIDEwNS4xIDEyNmwyLjEtNjEuNWMuMS0yLjYtMi44LTQuMi01LTIuOGwtMjYuMyAxNy42Yy0zLjIgMi4xLTcuNCAxLjctMTAuMS0xcy0zLjEtNi45LTEtMTAuMUwyNDYgMzU2LjNjMS4zLTEuOSAuMi00LjUtMi00LjlsLTM3LjYtNy41Yy0zLjctLjctNi40LTQtNi40LTcuOHMyLjctNy4xIDYuNC03LjhsMzcuNi03LjVjMi4yLS40IDMuMy0zIDItNC45elwiXVxufTtcbmNvbnN0IGZhU3F1YXJlUG9sbFZlcnRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wb2xsLXZlcnRpY2FsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJwb2xsXCJdLCBcImY2ODFcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgMTkyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptNjQtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE5MnpNMzIwIDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFQb2xsID0gZmFTcXVhcmVQb2xsVmVydGljYWw7XG5jb25zdCBmYU11Z0hvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtdWctaG90JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTc0OV0sIFwiZjdiNlwiLCBcIk04OCAwQzc0LjcgMCA2NCAxMC43IDY0IDI0YzAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxQzEyMC41IDExMi4zIDEyOCAxMTkuOSAxMjggMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzExOS41IDQ3LjcgMTEyIDQwLjEgMTEyIDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyTDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZsMTkyIDBjNTMgMCA5Ni00MyA5Ni05NmwxNiAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEybC00OCAwTDMyIDE5MnptMzUyIDY0bDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE2IDAgMC05NnpNMjI0IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxQzIzMi41IDExMi4zIDI0MCAxMTkuOSAyNDAgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzIzMS41IDQ3LjcgMjI0IDQwLjEgMjI0IDI0elwiXVxufTtcbmNvbnN0IGZhQ2FyQmF0dGVyeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXItYmF0dGVyeScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYmF0dGVyeS1jYXJcIl0sIFwiZjVkZlwiLCBcIk04MCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYgMHptMzA0IDk2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMzItMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDAgMC0zMnpNODAgMjQwYzAgOC44IDcuMiAxNiAxNiAxNmw5NiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC05NiAwYy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xuY29uc3QgZmFCYXR0ZXJ5Q2FyID0gZmFDYXJCYXR0ZXJ5O1xuY29uc3QgZmFHaWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dpZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NzNdLCBcImYwNmJcIiwgXCJNMTkwLjUgNjguOEwyMjUuMyAxMjhsLTEuMyAwLTcyIDBjLTIyLjEgMC00MC0xNy45LTQwLTQwczE3LjktNDAgNDAtNDBsMi4yIDBjMTQuOSAwIDI4LjggNy45IDM2LjMgMjAuOHpNNjQgODhjMCAxNC40IDMuNSAyOCA5LjYgNDBMMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTQxLjYgMGM2LjEtMTIgOS42LTI1LjYgOS42LTQwYzAtNDguNi0zOS40LTg4LTg4LTg4bC0yLjIgMGMtMzEuOSAwLTYxLjUgMTYuOS03Ny43IDQ0LjRMMjU2IDg1LjVsLTI0LjEtNDFDMjE1LjcgMTYuOSAxODYuMSAwIDE1NC4yIDBMMTUyIDBDMTAzLjQgMCA2NCAzOS40IDY0IDg4em0zMzYgMGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNzIgMC0xLjMgMCAzNC44LTU5LjJDMzI5LjEgNTUuOSAzNDIuOSA0OCAzNTcuOCA0OGwyLjIgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHpNMzIgMjg4bDAgMTc2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE0NCAwIDAtMjI0TDMyIDI4OHpNMjg4IDUxMmwxNDQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE3Ni0xOTIgMCAwIDIyNHpcIl1cbn07XG5jb25zdCBmYURpY2VUd28gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS10d28nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU3XSwgXCJmNTI4XCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0zNTIgMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbmNvbnN0IGZhQ2hlc3NRdWVlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1xdWVlbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk4MTldLCBcImY0NDVcIiwgXCJNMjU2IDBhNTYgNTYgMCAxIDEgMCAxMTJBNTYgNTYgMCAxIDEgMjU2IDB6TTEzNC4xIDE0My44YzMuMy0xMyAxNS0yMy44IDMwLjItMjMuOGMxMi4zIDAgMjIuNiA3LjIgMjcuNyAxN2MxMiAyMy4yIDM2LjIgMzkgNjQgMzlzNTItMTUuOCA2NC0zOWM1LjEtOS44IDE1LjQtMTcgMjcuNy0xN2MxNS4zIDAgMjcgMTAuOCAzMC4yIDIzLjhjNyAyNy44IDMyLjIgNDguMyA2Mi4xIDQ4LjNjMTAuOCAwIDIxLTIuNyAyOS44LTcuNGM4LjQtNC40IDE4LjktNC41IDI3LjYgLjljMTMgOCAxNy4xIDI1IDkuMiAzOEwzOTkuNyA0MDAgMzg0IDQwMGwtNDAuNCAwLTE3NS4xIDBMMTI4IDQwMGwtMTUuNyAwTDUuNCAyMjMuNmMtNy45LTEzLTMuOC0zMCA5LjItMzhjOC43LTUuMyAxOS4yLTUuMyAyNy42LS45YzguOSA0LjcgMTkgNy40IDI5LjggNy40YzI5LjkgMCA1NS4xLTIwLjUgNjIuMS00OC4zek0yNTYgMjI0czAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwek0xMTIgNDMybDI4OCAwIDQxLjQgNDEuNGM0LjIgNC4yIDYuNiAxMCA2LjYgMTZjMCAxMi41LTEwLjEgMjIuNi0yMi42IDIyLjZMODYuNiA1MTJDNzQuMSA1MTIgNjQgNTAxLjkgNjQgNDg5LjRjMC02IDIuNC0xMS44IDYuNi0xNkwxMTIgNDMyelwiXVxufTtcbmNvbnN0IGZhR2xhc3NlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnbGFzc2VzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTMwXCIsIFwiTTExOC42IDgwYy0xMS41IDAtMjEuNCA3LjktMjQgMTkuMUw1NyAyNjAuM2MyMC41LTYuMiA0OC4zLTEyLjMgNzguNy0xMi4zYzMyLjMgMCA2MS44IDYuOSA4Mi44IDEzLjVjMTAuNiAzLjMgMTkuMyA2LjcgMjUuNCA5LjJjMy4xIDEuMyA1LjUgMi40IDcuMyAzLjJjLjkgLjQgMS42IC43IDIuMSAxbC42IC4zIC4yIC4xYzAgMCAuMSAwIC4xIDBjMCAwIDAgMCAwIDBzMCAwIDAgMEwyNDcuOSAyODhzMCAwIDAgMGw2LjMtMTIuN2M1LjggMi45IDEwLjQgNy4zIDEzLjUgMTIuN2w0MC42IDBjMy4xLTUuMyA3LjctOS44IDEzLjUtMTIuN2w2LjMgMTIuN3MwIDAgMCAwYy02LjMtMTIuNy02LjMtMTIuNy02LjMtMTIuN3MwIDAgMCAwczAgMCAwIDBjMCAwIC4xIDAgLjEgMGwuMi0uMSAuNi0uM2MuNS0uMiAxLjItLjYgMi4xLTFjMS44LS44IDQuMi0xLjkgNy4zLTMuMmM2LjEtMi42IDE0LjgtNS45IDI1LjQtOS4yYzIxLTYuNiA1MC40LTEzLjUgODIuOC0xMy41YzMwLjQgMCA1OC4yIDYuMSA3OC43IDEyLjNMNDgxLjQgOTkuMWMtMi42LTExLjItMTIuNi0xOS4xLTI0LTE5LjFjLTMuMSAwLTYuMiAuNi05LjIgMS44TDQxNi45IDk0LjNjLTEyLjMgNC45LTI2LjMtMS4xLTMxLjItMTMuNHMxLjEtMjYuMyAxMy40LTMxLjJsMzEuMy0xMi41YzguNi0zLjQgMTcuNy01LjIgMjctNS4yYzMzLjggMCA2My4xIDIzLjMgNzAuOCA1Ni4ybDQzLjkgMTg4YzEuNyA3LjMgMi45IDE0LjcgMy41IDIyLjFjLjMgMS45IC41IDMuOCAuNSA1LjdsMCA2LjcgMCA0MS4zIDAgMTZjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJsLTQ0LjMgMGMtNTkuNCAwLTEwOC41LTQ2LjQtMTExLjgtMTA1LjhMMzA2LjYgMzUybC0zNy4yIDAtMS4yIDIyLjJDMjY0LjkgNDMzLjYgMjE1LjggNDgwIDE1Ni4zIDQ4MEwxMTIgNDgwQzUwLjEgNDgwIDAgNDI5LjkgMCAzNjhsMC0xNiAwLTQxLjNMMCAzMDRjMC0xLjkgLjItMy44IC41LTUuN2MuNi03LjQgMS44LTE0LjggMy41LTIyLjFsNDMuOS0xODhDNTUuNSA1NS4zIDg0LjggMzIgMTE4LjYgMzJjOS4yIDAgMTguNCAxLjggMjcgNS4ybDMxLjMgMTIuNWMxMi4zIDQuOSAxOC4zIDE4LjkgMTMuNCAzMS4ycy0xOC45IDE4LjMtMzEuMiAxMy40TDEyNy44IDgxLjhjLTIuOS0xLjItNi0xLjgtOS4yLTEuOHpNNjQgMzI1LjRMNjQgMzY4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ0LjMgMGMyNS41IDAgNDYuNS0xOS45IDQ3LjktNDUuM2wyLjUtNDUuNmMtMi4zLS44LTQuOS0xLjctNy41LTIuNWMtMTcuMi01LjQtMzkuOS0xMC41LTYzLjYtMTAuNWMtMjMuNyAwLTQ2LjIgNS4xLTYzLjIgMTAuNWMtMy4xIDEtNS45IDEuOS04LjUgMi45ek01MTIgMzY4bDAtNDIuNmMtMi42LS45LTUuNS0xLjktOC41LTIuOWMtMTctNS40LTM5LjUtMTAuNS02My4yLTEwLjVjLTIzLjcgMC00Ni40IDUuMS02My42IDEwLjVjLTIuNyAuOC01LjIgMS43LTcuNSAyLjVsMi41IDQ1LjZjMS40IDI1LjQgMjIuNSA0NS4zIDQ3LjkgNDUuM2w0NC4zIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6XCJdXG59O1xuY29uc3QgZmFDaGVzc0JvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXNzLWJvYXJkJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmNDNjXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDY0bDAgNjQgNjQgMCAwLTY0IDY0IDAgMCA2NCA2NCAwIDAtNjQgNjQgMCAwIDY0LTY0IDAgMCA2NCA2NCAwIDAgNjQtNjQgMCAwIDY0IDY0IDAgMCA2NC02NCAwIDAtNjQtNjQgMCAwIDY0LTY0IDAgMC02NC02NCAwIDAgNjQtNjQgMCAwLTY0IDY0IDAgMC02NC02NCAwIDAtNjQgNjQgMCAwLTY0LTY0IDAgMC02NCA2NCAwem02NCAxMjhsNjQgMCAwLTY0LTY0IDAgMCA2NHptMCA2NGwwLTY0LTY0IDAgMCA2NCA2NCAwem02NCAwbC02NCAwIDAgNjQgNjQgMCAwLTY0em0wIDBsNjQgMCAwLTY0LTY0IDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmctY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGQyXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDAgMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgODAgOTYgMGMxNS4xIDAgMjguNS02LjkgMzcuMy0xNy44QzM0MC40IDQ2Mi4yIDMyMCA0MTcuNSAzMjAgMzY4YzAtNTQuNyAyNC45LTEwMy41IDY0LTEzNS44TDM4NCA0OGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAwek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTEyLTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTgwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek02NDAgMzY4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzg1LjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbmNvbnN0IGZhUGVyc29uQ2hhbGtib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tY2hhbGtib2FyZCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUzZFwiLCBcIk0xOTIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tOCAzODRsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjg4IDU2IDAgNjQgMCAxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtNjQgMTkyIDAgMCAxOTItMTkyIDAgMC0zMi02NCAwIDAgNDhjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzY4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgODAtNzYuOSAwLTY1LjkgMGMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjlMMTIwIDI1Ni45IDEyMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpcIl1cbn07XG5jb25zdCBmYU1hcnNTdHJva2VSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJzLXN0cm9rZS1yaWdodCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzk4OTcsIFwibWFycy1zdHJva2UtaFwiXSwgXCJmMjJiXCIsIFwiTTIwOCAzNjhhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0em0xNzQuNC04OEMzNzAuNyAzNjUuOCAyOTcuMSA0MzIgMjA4IDQzMmMtOTcuMiAwLTE3Ni03OC44LTE3Ni0xNzZzNzguOC0xNzYgMTc2LTE3NmM4OS4xIDAgMTYyLjcgNjYuMiAxNzQuNCAxNTJsMzMuNiAwIDAtNTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDU2IDMyIDAgMC01NmMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsODAgODBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTgwIDgwYy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4ycy0xNC44LTEyLjUtMTQuOC0yMi4ybDAtNTYtMzIgMCAwIDU2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNTYtMzMuNiAwelwiXVxufTtcbmNvbnN0IGZhTWFyc1N0cm9rZUggPSBmYU1hcnNTdHJva2VSaWdodDtcbmNvbnN0IGZhSGFuZEJhY2tGaXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtYmFjay1maXN0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJoYW5kLXJvY2tcIl0sIFwiZjI1NVwiLCBcIk0xNDQgMEMxMTcuNSAwIDk2IDIxLjUgOTYgNDhsMCA0OCAwIDI4LjVMOTYgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMjYuNy05IDcuNUM0MC40IDE2OSAzMiAxODcgMzIgMjA2TDMyIDI0NGMwIDM4IDE2LjkgNzQgNDYuMSA5OC4zTDEyOCAzODRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEwNS4zYzQ2LjktMTkgODAtNjUgODAtMTE4LjdsMC04MCAwLTE2IDAtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhjLTEyLjQgMC0yMy42IDQuNy0zMi4xIDEyLjNDMzUwIDgzLjUgMzI5LjMgNjQgMzA0IDY0Yy0xMi40IDAtMjMuNiA0LjctMzIuMSAxMi4zQzI3MCA1MS41IDI0OS4zIDMyIDIyNCAzMmMtMTIuNCAwLTIzLjYgNC43LTMyLjEgMTIuM0MxOTAgMTkuNSAxNjkuMyAwIDE0NCAwelwiXVxufTtcbmNvbnN0IGZhSGFuZFJvY2sgPSBmYUhhbmRCYWNrRmlzdDtcbmNvbnN0IGZhU3F1YXJlQ2FyZXRVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtY2FyZXQtdXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImNhcmV0LXNxdWFyZS11cFwiXSwgXCJmMTUxXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAxNjBjNi43IDAgMTMgMi44IDE3LjYgNy43bDEwNCAxMTJjNi41IDcgOC4yIDE3LjIgNC40IDI1LjlzLTEyLjUgMTQuNC0yMiAxNC40bC0yMDggMGMtOS41IDAtMTguMi01LjctMjItMTQuNHMtMi4xLTE4LjkgNC40LTI1LjlsMTA0LTExMmM0LjUtNC45IDEwLjktNy43IDE3LjYtNy43elwiXVxufTtcbmNvbnN0IGZhQ2FyZXRTcXVhcmVVcCA9IGZhU3F1YXJlQ2FyZXRVcDtcbmNvbnN0IGZhQ2xvdWRTaG93ZXJzV2F0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtc2hvd2Vycy13YXRlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRlNFwiLCBcIk0yMjQgMGMzOC42IDAgNzEuOSAyMi44IDg3LjIgNTUuN0MzMjUuNyA0MS4xIDM0NS44IDMyIDM2OCAzMmMzOC43IDAgNzEgMjcuNSA3OC40IDY0bDEuNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC0zMjAgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMwLTUzIDQzLTk2IDk2LTk2ek0xNDAuNiAyOTIuM2wtNDggODBjLTYuOCAxMS40LTIxLjYgMTUtMzIuOSA4LjJzLTE1LjEtMjEuNi04LjItMzIuOWw0OC04MGM2LjgtMTEuNCAyMS42LTE1LjEgMzIuOS04LjJzMTUuMSAyMS42IDguMiAzMi45em0zMjcuOC0zMi45YzExLjQgNi44IDE1IDIxLjYgOC4yIDMyLjlsLTQ4IDgwYy02LjggMTEuNC0yMS42IDE1LTMyLjkgOC4ycy0xNS0yMS42LTguMi0zMi45bDQ4LTgwYzYuOC0xMS40IDIxLjYtMTUuMSAzMi45LTguMnpNMjUyLjYgMjkyLjNsLTQ4IDgwYy02LjggMTEuNC0yMS42IDE1LTMyLjkgOC4ycy0xNS4xLTIxLjYtOC4yLTMyLjlsNDgtODBjNi44LTExLjQgMjEuNi0xNS4xIDMyLjktOC4yczE1LjEgMjEuNiA4LjIgMzIuOXptMTAzLjgtMzIuOWMxMS40IDYuOCAxNSAyMS42IDguMiAzMi45bC00OCA4MGMtNi44IDExLjQtMjEuNiAxNS0zMi45IDguMnMtMTUuMS0yMS42LTguMi0zMi45bDQ4LTgwYzYuOC0xMS40IDIxLjYtMTUuMSAzMi45LTguMnpNMzA2LjUgNDIxLjlDMzI5IDQzNy40IDM1Ni41IDQ0OCAzODQgNDQ4YzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xYzAgMCAwIDAgMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNTAxLjcgNDE3IDUxMiAzODQgNTEyYy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2MwIDAgMCAwIDAgMEMxMzYuNyA0MzcuMiAxNjUuMSA0NDggMTkyIDQ0OGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl1cbn07XG5jb25zdCBmYUNoYXJ0QmFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYXJ0LWJhcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYmFyLWNoYXJ0XCJdLCBcImYwODBcIiwgXCJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgNjRsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDk2bDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYUJhckNoYXJ0ID0gZmFDaGFydEJhcjtcbmNvbnN0IGZhSGFuZHNCdWJibGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWJ1YmJsZXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImhhbmRzLXdhc2hcIl0sIFwiZTA1ZVwiLCBcIk00MTYgNjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em05NiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0xNjAgNDY0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTMyIDE2MGwuMSA3Mi42Yy4xIDUyLjIgMjQgMTAxIDY0IDEzMy4xYy0uMS0xLjktLjEtMy44LS4xLTUuN2wwLThjMC03MS44IDM3LTEzOC42IDk3LjktMTc2LjdsNjAuMi0zNy42YzguNi01LjQgMTcuOS04LjQgMjcuMy05LjRsNDUuOS03OS41YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOGwtNzggMTM1LjFjLTMuMyA1LjctMTAuNyA3LjctMTYuNCA0LjRzLTcuNy0xMC43LTQuNC0xNi40bDYyLTEwNy40YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44UzIxNCA1IDIwNy40IDE2LjVsLTY4IDExNy44czAgMCAwIDBzMCAwIDAgMGwtNDMuMyA3NUw5NiAxNjBjMC0xNy43LTE0LjQtMzItMzItMzJzLTMyIDE0LjQtMzIgMzJ6TTMzMi4xIDg4LjVMMzA3LjUgMTMxYzEzLjkgNC41IDI2LjQgMTMuNyAzNC43IDI3Yy45IDEuNSAxLjggMi45IDIuNSA0LjRsMjguOS01MGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6bTQ2LjQgNjMuN2wtMjYuOCA0Ni40Yy0uNiA2LTIuMSAxMS44LTQuMyAxNy40bDQuNyAwIDEzLjMgMHMwIDAgMCAwbDMxLjggMCAyMy0zOS44YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOHpNMzE1LjEgMTc1Yy05LjQtMTUtMjkuMS0xOS41LTQ0LjEtMTAuMmwtNjAuMiAzNy42QzE1OS4zIDIzNC43IDEyOCAyOTEuMiAxMjggMzUybDAgOGMwIDguOSAuOCAxNy42IDIuMiAyNi4xYzM1LjQgOC4yIDYxLjggNDAgNjEuOCA3Ny45YzAgNi4zLS43IDEyLjUtMi4xIDE4LjRDMjE1LjEgNTAxIDI0Ni4zIDUxMiAyODAgNTEybDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05MiAwYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDEyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjQgMGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwxNTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTU2IDBjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMTI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEzNiAwczAgMCAwIDBzMCAwIDAgMGwtOTMuMiAwTDMwNSAyMTkuMWMxNS05LjQgMTkuNS0yOS4xIDEwLjItNDQuMXpcIl1cbn07XG5jb25zdCBmYUhhbmRzV2FzaCA9IGZhSGFuZHNCdWJibGVzO1xuY29uc3QgZmFMZXNzVGhhbkVxdWFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xlc3MtdGhhbi1lcXVhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUzN1wiLCBcIk0zOTUuOSA5My43YzE2LjQtNi42IDI0LjQtMjUuMiAxNy44LTQxLjZzLTI1LjItMjQuNC00MS42LTE3LjhsLTMyMCAxMjhDNDAgMTY3LjEgMzIgMTc4LjkgMzIgMTkyczggMjQuOSAyMC4xIDI5LjdsMzIwIDEyOGMxNi40IDYuNiAzNS0xLjQgNDEuNi0xNy44cy0xLjQtMzUtMTcuOC00MS42TDE1MC4yIDE5MiAzOTUuOSA5My43ek0zMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDE2elwiXVxufTtcbmNvbnN0IGZhVHJhaW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhaW4nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg2NDZdLCBcImYyMzhcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDM1MmMwIDQ4IDM1LjIgODcuNyA4MS4xIDk0LjlsLTQ2IDQ2QzI4LjEgNDk5LjkgMzMuMSA1MTIgNDMgNTEybDM5LjcgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNEwxNjAgNDQ4bDEyOCAwIDU0LjYgNTQuNmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMzkuNyAwYzEwIDAgMTUtMTIuMSA3LjktMTkuMWwtNDYtNDZjNDYtNy4xIDgxLjEtNDYuOSA4MS4xLTk0LjlsMC0yNTZjMC01My00My05Ni05Ni05Nkw5NiAwek02NCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NnpNMjI0IDI4OGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xuY29uc3QgZmFFeWVMb3dWaXNpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXllLWxvdy12aXNpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImxvdy12aXNpb25cIl0sIFwiZjJhOFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDUyNS42IDM4Ni43YzM5LjYtNDAuNiA2Ni40LTg2LjEgNzkuOS0xMTguNGMzLjMtNy45IDMuMy0xNi43IDAtMjQuNmMtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMUM0NjUuNSA2OC44IDQwMC44IDMyIDMyMCAzMmMtNjguMiAwLTEyNSAyNi4zLTE2OS4zIDYwLjhMMzguOCA1LjF6TTIyMyAxNDkuNWM0OC42LTQ0LjMgMTIzLTUwLjggMTc5LjMtMTEuN2M2MC44IDQyLjQgNzguOSAxMjMuMiA0NC4yIDE4Ni45TDQwOCAyOTQuNWM4LjQtMTkuMyAxMC42LTQxLjQgNC44LTYzLjNjLTExLjEtNDEuNS00Ny44LTY5LjQtODguNi03MS4xYy01LjgtLjItOS4yIDYuMS03LjQgMTEuN2MyLjEgNi40IDMuMyAxMy4yIDMuMyAyMC4zYzAgMTAuMi0yLjQgMTkuOC02LjYgMjguM0wyMjMgMTQ5LjV6bTIyMy4xIDI5OEw4My4xIDE2MS41Yy0xMSAxNC40LTIwLjUgMjguNy0yOC40IDQyLjJsMzM5IDI2NS43YzE4LjctNS41IDM2LjItMTMgNTIuNi0yMS44ek0zNC41IDI2OC4zYzE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjFDMTc0LjUgNDQzLjIgMjM5LjIgNDgwIDMyMCA0ODBjMy4xIDAgNi4xLS4xIDkuMi0uMkwzMy4xIDI0Ny44Yy0xLjggNi44LTEuMyAxNCAxLjQgMjAuNXpcIl1cbn07XG5jb25zdCBmYUxvd1Zpc2lvbiA9IGZhRXllTG93VmlzaW9uO1xuY29uc3QgZmFDcm93ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nyb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1MjBcIiwgXCJNNDU2IDBjLTQ4LjYgMC04OCAzOS40LTg4IDg4bDAgMjkuMkwxMi41IDM5MC42Yy0xNCAxMC44LTE2LjYgMzAuOS01LjkgNDQuOXMzMC45IDE2LjYgNDQuOSA1LjlMMTI2LjEgMzg0bDEzMy4xIDAgNDYuNiAxMTMuMWM1IDEyLjMgMTkuMSAxOC4xIDMxLjMgMTMuMXMxOC4xLTE5LjEgMTMuMS0zMS4zTDMxMS4xIDM4NGw0MC45IDBjMS4xIDAgMi4xIDAgMy4yIDBsNDYuNiAxMTMuMmM1IDEyLjMgMTkuMSAxOC4xIDMxLjMgMTMuMXMxOC4xLTE5LjEgMTMuMS0zMS4zbC00Mi0xMDJDNDg0LjkgMzU0LjEgNTQ0IDI4MCA1NDQgMTkybDAtNjQgMC04IDgwLjUtMjAuMWM4LjYtMi4xIDEzLjgtMTAuOCAxMS42LTE5LjRDNjI5IDUyIDYwMy40IDMyIDU3NCAzMmwtNTAuMSAwQzUwNy43IDEyLjUgNDgzLjMgMCA0NTYgMHptMCA2NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xuY29uc3QgZmFTYWlsYm9hdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzYWlsYm9hdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTQ0NVwiLCBcIk0yNTYgMTZjMC03IDQuNS0xMy4yIDExLjItMTUuM3MxMy45IC40IDE3LjkgNi4xbDIyNCAzMjBjMy40IDQuOSAzLjggMTEuMyAxLjEgMTYuNnMtOC4yIDguNi0xNC4yIDguNmwtMjI0IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyMHpNMjEyLjEgOTYuNWM3IDEuOSAxMS45IDguMiAxMS45IDE1LjVsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2TDgwIDM1MmMtNS43IDAtMTEtMy0xMy44LThzLTIuOS0xMS0uMS0xNmwxMjgtMjI0YzMuNi02LjMgMTEtOS40IDE4LTcuNXpNNS43IDQwNC4zQzIuOCAzOTQuMSAxMC41IDM4NCAyMS4xIDM4NGw1MzMuOCAwYzEwLjYgMCAxOC4zIDEwLjEgMTUuNCAyMC4zbC00IDE0LjNDNTUwLjcgNDczLjkgNTAwLjQgNTEyIDQ0MyA1MTJMMTMzIDUxMkM3NS42IDUxMiAyNS4zIDQ3My45IDkuNyA0MTguN2wtNC0xNC4zelwiXVxufTtcbmNvbnN0IGZhV2luZG93UmVzdG9yZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3aW5kb3ctcmVzdG9yZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjJkMlwiLCBcIk00MzIgNjRMMjA4IDY0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAxNi02NCAwIDAtMTZjMC00NC4yIDM1LjgtODAgODAtODBMNDMyIDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAyMjRjMCA0NC4yLTM1LjggODAtODAgODBsLTE2IDAgMC02NCAxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTIyNGMwLTguOC03LjItMTYtMTYtMTZ6TTAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDI1NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJ6bTY0IDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFTcXVhcmVQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wbHVzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjE4NDYsIFwicGx1cy1zcXVhcmVcIl0sIFwiZjBmZVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDAgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG5jb25zdCBmYVBsdXNTcXVhcmUgPSBmYVNxdWFyZVBsdXM7XG5jb25zdCBmYVRvcmlpR2F0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b3JpaS1nYXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTk2MV0sIFwiZjZhMVwiLCBcIk0wIDgwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2IDAgMCA2NCA2NCAwIDAtNjQgOTYgMCAwIDY0IDY0IDAgMC02NCA5NiAwIDAgNjQgNjQgMCAwLTY0IDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02Ni42QzUxMiA2IDUwNiAwIDQ5OC42IDBjLTEuNyAwLTMuNCAuMy01IDFsLTQ5IDE5LjZDNDI1LjcgMjguMSA0MDUuNSAzMiAzODUuMiAzMkwxMjYuOCAzMmMtMjAuNCAwLTQwLjUtMy45LTU5LjQtMTEuNEwxOC40IDFjLTEuNi0uNi0zLjMtMS01LTFDNiAwIDAgNiAwIDEzLjRMMCA4MHpNNjQgMjg4bDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTIgMjU2IDAgMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5MiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwelwiXVxufTtcbmNvbnN0IGZhRnJvZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmcm9nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTJlXCIsIFwiTTM2OCAzMmM0MS43IDAgNzUuOSAzMS44IDc5LjcgNzIuNWw4NS42IDI2LjNjMjUuNCA3LjggNDIuOCAzMS4zIDQyLjggNTcuOWMwIDIxLjgtMTEuNyA0MS45LTMwLjcgNTIuN0w0MDAuOCAzMjMuNSA0OTMuMyA0MTZsNTAuNyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNEwzNDYuOSAzNjAuMmMxMS43LTM2IDMuMi03Ny4xLTI1LjQtMTA1LjdjLTQwLjYtNDAuNi0xMDYuMy00MC42LTE0Ni45LS4xTDEwMSAzMjQuNGMtNi40IDYuMS02LjcgMTYuMi0uNiAyMi42czE2LjIgNi42IDIyLjYgLjZsNzMuOC03MC4yIC4xLS4xIC4xLS4xYzMuNS0zLjUgNy4zLTYuNiAxMS4zLTkuMmMyNy45LTE4LjUgNjUuOS0xNS40IDkwLjUgOS4yYzI0LjcgMjQuNyAyNy43IDYyLjkgOSA5MC45Yy0yLjYgMy44LTUuNiA3LjUtOSAxMC45TDI2MS44IDQxNmw5MC4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEMwIDI0OS42IDEyNyAxMTIuOSAyODkuMyA5Ny41QzI5Ni4yIDYwLjIgMzI4LjggMzIgMzY4IDMyem0wIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xuY29uc3QgZmFCdWNrZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVja2V0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJlNGNmXCIsIFwiTTk2IDE1MmwwIDgtNDggMCAwLThDNDggNjguMSAxMTYuMSAwIDIwMCAwbDQ4IDBjODMuOSAwIDE1MiA2OC4xIDE1MiAxNTJsMCA4LTQ4IDAgMC04YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0bC00OCAwQzE0Mi42IDQ4IDk2IDk0LjYgOTYgMTUyek0wIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNS4xIDBMMzg4LjUgNDY5Yy0yLjYgMjQuNC0yMy4yIDQzLTQ3LjcgNDNsLTIzMy42IDBjLTI0LjYgMC00NS4yLTE4LjUtNDcuNy00M0wzNy4xIDI1NiAzMiAyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyelwiXVxufTtcbmNvbnN0IGZhSW1hZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW1hZ2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwM2VcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTMyMy44IDIwMi41Yy00LjUtNi42LTExLjktMTAuNS0xOS44LTEwLjVzLTE1LjQgMy45LTE5LjggMTAuNWwtODcgMTI3LjZMMTcwLjcgMjk3Yy00LjYtNS43LTExLjUtOS0xOC43LTlzLTE0LjIgMy4zLTE4LjcgOWwtNjQgODBjLTUuOCA3LjItNi45IDE3LjEtMi45IDI1LjRzMTIuNCAxMy42IDIxLjYgMTMuNmw5NiAwIDMyIDAgMjA4IDBjOC45IDAgMTcuMS00LjkgMjEuMi0xMi44czMuNi0xNy40LTEuNC0yNC43bC0xMjAtMTc2ek0xMTIgMTkyYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpcIl1cbn07XG5jb25zdCBmYU1pY3JvcGhvbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWljcm9waG9uZScsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjEzMFwiLCBcIk0xOTIgMEMxMzkgMCA5NiA0MyA5NiA5NmwwIDE2MGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMTYwYzAtNTMtNDMtOTYtOTYtOTZ6TTY0IDIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYzAgODkuMSA2Ni4yIDE2Mi43IDE1MiAxNzQuNGwwIDMzLjYtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC0zMy42Yzg1LjgtMTEuNyAxNTItODUuMyAxNTItMTc0LjRsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4bDAtNDB6XCJdXG59O1xuY29uc3QgZmFDb3cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY293JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MDA0XSwgXCJmNmM4XCIsIFwiTTk2IDIyNGwwIDMyIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04OC4yYzkuOSA2LjYgMjAuNiAxMiAzMiAxNi4xbDAgMjQuMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTYuOWM1LjMgLjYgMTAuNiAuOSAxNiAuOXMxMC43LS4zIDE2LS45bDAgMTYuOWMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjQuMmMxMS40LTQgMjIuMS05LjQgMzItMTYuMWwwIDg4LjJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MCAzMiAzMiAwIDQ5LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZMNTMwIDQyN2M4LjggMTMuMSAyMy41IDIxIDM5LjMgMjFjMjIuNSAwIDQxLjktMTUuOSA0Ni4zLTM4bDIwLjMtMTAxLjZjMi42LTEzLS4zLTI2LjUtOC0zNy4zbC0zLjktNS41IDAtODEuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE0LjQtNTIuOS03NC4xQzQ5NiA4Ni41IDQ1Mi40IDY0IDQwNS45IDY0TDI3MiA2NGwtMTYgMC02NCAwLTQ4IDBDNzcuNyA2NCAyNCAxMTcuNyAyNCAxODRsMCA1NEM5LjQgMjQ5LjggMCAyNjcuOCAwIDI4OGwwIDE3LjZjMCA4IDYuNCAxNC40IDE0LjQgMTQuNEM0Ni4yIDMyMCA3MiAyOTQuMiA3MiAyNjIuNGwwLTYuNCAwLTMyIDAtNDBjMC0yNC4zIDEyLjEtNDUuOCAzMC41LTU4LjlDOTguMyAxMzUuOSA5NiAxNDcuNyA5NiAxNjBsMCA2NHpNNTYwIDMzNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwek0xNjYuNiAxNjYuNmMtNC4yLTQuMi02LjYtMTAtNi42LTE2YzAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDE3OC43IDBjMTIuNSAwIDIyLjYgMTAuMSAyMi42IDIyLjZjMCA2LTIuNCAxMS44LTYuNiAxNmwtMjMuNCAyMy40QzMzMi4yIDIxMS44IDMwMi43IDIyNCAyNzIgMjI0cy02MC4yLTEyLjItODEuOS0zMy45bC0yMy40LTIzLjR6XCJdXG59O1xuY29uc3QgZmFDYXJldFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcmV0LXVwJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJmMGQ4XCIsIFwiTTE4Mi42IDEzNy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlzMTYuNiAxOS44IDI5LjYgMTkuOGwyNTYgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC0xMjgtMTI4elwiXVxufTtcbmNvbnN0IGZhU2NyZXdkcml2ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2NyZXdkcml2ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk2OTFdLCBcImY1NGFcIiwgXCJNNDY1IDdjLTguNS04LjUtMjItOS40LTMxLjYtMi4xbC0xMDQgODBjLTUuOSA0LjUtOS40IDExLjYtOS40IDE5bDAgNTQuMS04NS42IDg1LjZjNi43IDQuMiAxMyA5LjMgMTguOCAxNS4xczEwLjkgMTIuMiAxNS4xIDE4LjhMMzUzLjkgMTkybDU0LjEgMGM3LjUgMCAxNC41LTMuNSAxOS05LjRsODAtMTA0YzcuNC05LjYgNi41LTIzLjEtMi4xLTMxLjZMNDY1IDd6TTEyMS40IDI4MS40bC0xMTIgMTEyYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMTItMTEyYzMwLjItMzAuMiAzMC4yLTc5LjEgMC0xMDkuM3MtNzkuMS0zMC4yLTEwOS4zIDB6XCJdXG59O1xuY29uc3QgZmFGb2xkZXJDbG9zZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9sZGVyLWNsb3NlZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTE4NVwiLCBcIk00NDggNDgwTDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJsNTEyIDAgMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjR6bTY0LTMyMEwwIDE2MCAwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEyOCAwYzIwLjEgMCAzOS4xIDkuNSA1MS4yIDI1LjZsMTkuMiAyNS42YzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhsMTYwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjR6XCJdXG59O1xuY29uc3QgZmFIb3VzZVRzdW5hbWkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtdHN1bmFtaScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUxNVwiLCBcIk04MC44IDEzNi41QzEwNC45IDkzLjggMTUyLjYgNjQgMjA5IDY0YzE2LjkgMCAzMy4xIDIuNyA0OC4yIDcuN2MxNi44IDUuNSAzNC45LTMuNiA0MC40LTIwLjRzLTMuNi0zNC45LTIwLjQtNDAuNEMyNTUuOCAzLjggMjMyLjggMCAyMDkgMEM5NS4yIDAgMCA4OCAwIDIwMGMwIDkxLjYgNTMuNSAxNzIuMSAxNDIuMiAxOTQuMWMxMy40IDMuOCAyNy41IDUuOSA0Mi4yIDUuOWMuNyAwIDEuNCAwIDIuMS0uMWMxLjggMCAzLjcgLjEgNS41IC4xYzAgMCAwIDAgMCAwYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjUtMjcuMy0xMC4xLTM5LjItMS43YzAgMCAwIDAgMCAwQzQzOS40IDMyNS4yIDQxMC45IDMzNiAzODQgMzM2Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjFjLTExLjEtNy45LTI1LjktNy45LTM3IDBjLTIyLjQgMTUuNS00OS45IDI2LjEtNzcuNCAyNi4xYzAgMC0uMSAwLS4xIDBjLTEyLjQgMC0yNC0xLjUtMzQuOS00LjNDMTIxLjYgMzIwLjIgOTYgMjg3IDk2IDI0OGMwLTQ4LjUgMzkuNS04OCA4OC40LTg4YzEzLjUgMCAyNi4xIDMgMzcuNSA4LjNjMTYgNy41IDM1LjEgLjYgNDIuNS0xNS41cy42LTM1LjEtMTUuNS00Mi41QzIyOS4zIDEwMS4xIDIwNy40IDk2IDE4NC40IDk2Yy00MCAwLTc2LjQgMTUuNC0xMDMuNiA0MC41em0yNTItMTguMWMtOC4xIDYtMTIuOCAxNS41LTEyLjggMjUuNmwwIDEyMWMxLjYgMSAzLjMgMiA0LjggMy4xYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzIzLjgtMTYuNyA1NS44LTE1LjMgNzguMSAzLjRjMTAuNiA4LjggMjQuMiAxNS42IDM3LjMgMTguNmM1LjggMS40IDExLjIgMy40IDE2LjIgNi4yYy43LTIuNyAxLjEtNS41IDEuMS04LjRsLS40LTE0NGMwLTEwLTQuNy0xOS40LTEyLjctMjUuNWwtOTUuNS03MmMtMTEuNC04LjYtMjcuMS04LjYtMzguNSAwbC05NiA3MnpNMzg0IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwQzI0NyA0MzcuNCAyMTkuNSA0NDggMTkyIDQ0OGMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFjMCAwIDAgMCAwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43YzAgMCAwIDAgMCAwQzQzOS40IDQzNy4yIDQxMC45IDQ0OCAzODQgNDQ4elwiXVxufTtcbmNvbnN0IGZhU3F1YXJlTmZpID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1uZmknLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImU1NzZcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTc1LjcgNjQuNkM2OC44IDE2Mi41IDY0IDE2OC44IDY0IDE3NmwwIDE2MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTAyLjIgNjYuMyAxMTAuNWMzLjcgNi4yIDExLjEgOS4xIDE4IDcuMnMxMS43LTguMiAxMS43LTE1LjRsMC0xNjBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxMDIuMkw5My43IDE2Ny44Yy0zLjctNi4yLTExLjEtOS4xLTE4LTcuMnpNMjI0IDE3NmwwIDY0IDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwIDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTQ4IDAgMC0zMiA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC02NCAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2MCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTYwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0xNjB6XCJdXG59O1xuY29uc3QgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLWZyb20tZ3JvdW5kLXdhdGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGI1XCIsIFwiTTI4OCAzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yMTAuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyNTYgMTA5LjMgMjU2IDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnptLTE4LjUgNjkuOUMyNDcgNDM3LjQgMjE5LjUgNDQ4IDE5MiA0NDhjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xYzAgMCAwIDAgMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzEyNi41IDUwMS43IDE1OSA1MTIgMTkyIDUxMmMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC41IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS40LTI3LjMtMTAuMS0zOS4yLTEuN2MwIDAgMCAwIDAgMEM0MzkuNCA0MzcuMiA0MTAuOSA0NDggMzg0IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwek0xOTIgMTkyTDQ4IDE5MmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0MjVjNS4zLTMuMSAxMS4yLTUuNCAxNy41LTYuOWMxMy4xLTMuMSAyNi43LTkuOCAzNy4zLTE4LjZjMjIuMi0xOC43IDU0LjMtMjAuMSA3OC4xLTMuNGMxOCAxMi40IDQwLjEgMjAuMyA1OS4xIDIwLjNMMTkyIDE5MnptMzg0IDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNDQgMCAwIDIyNC41czAgMCAwIDBjMTkgMCA0MS4yLTcuOSA1OS4yLTIwLjNjMjMuOC0xNi43IDU1LjgtMTUuNCA3OC4xIDMuNGMxMC42IDguOCAyNC4yIDE1LjYgMzcuMyAxOC42YzYuMyAxLjUgMTIuMSAzLjggMTcuNSA2LjlsMC0xODV6XCJdXG59O1xuY29uc3QgZmFNYXJ0aW5pR2xhc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFydGluaS1nbGFzcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzg2NCwgXCJnbGFzcy1tYXJ0aW5pLWFsdFwiXSwgXCJmNTdiXCIsIFwiTTMyIDBDMTkuMSAwIDcuNCA3LjggMi40IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45TDIyNCAyNjkuMyAyMjQgNDQ4bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTE3OC43TDUwMi42IDU0LjZjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgMCA0ODAgMEwzMiAwek0xNzMuMyAxMjhsLTY0LTY0IDI5My41IDAtNjQgNjQtMTY1LjUgMHpcIl1cbn07XG5jb25zdCBmYUdsYXNzTWFydGluaUFsdCA9IGZhTWFydGluaUdsYXNzO1xuY29uc3QgZmFSb3RhdGVMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvdGF0ZS1sZWZ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJyb3RhdGUtYmFja1wiLCBcInJvdGF0ZS1iYWNrd2FyZFwiLCBcInVuZG8tYWx0XCJdLCBcImYyZWFcIiwgXCJNNDguNSAyMjRMNDAgMjI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwxNiA3MmMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJMOTguNiA5Ni42Yzg3LjYtODYuNSAyMjguNy04Ni4yIDMxNS44IDFjODcuNSA4Ny41IDg3LjUgMjI5LjMgMCAzMTYuOHMtMjI5LjMgODcuNS0zMTYuOCAwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzYyLjUgNjIuNSAxNjMuOCA2Mi41IDIyNi4zIDBzNjIuNS0xNjMuOCAwLTIyNi4zYy02Mi4yLTYyLjItMTYyLjctNjIuNS0yMjUuMy0xTDE4NSAxODNjNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMnMtMTIuNSAxNC44LTIyLjIgMTQuOEw0OC41IDIyNHpcIl1cbn07XG5jb25zdCBmYVJvdGF0ZUJhY2sgPSBmYVJvdGF0ZUxlZnQ7XG5jb25zdCBmYVJvdGF0ZUJhY2t3YXJkID0gZmFSb3RhdGVMZWZ0O1xuY29uc3QgZmFVbmRvQWx0ID0gZmFSb3RhdGVMZWZ0O1xuY29uc3QgZmFUYWJsZUNvbHVtbnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGUtY29sdW1ucycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY29sdW1uc1wiXSwgXCJmMGRiXCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em02NCA2NGwwIDI1NiAxNjAgMCAwLTI1Nkw2NCAxNjB6bTM4NCAwbC0xNjAgMCAwIDI1NiAxNjAgMCAwLTI1NnpcIl1cbn07XG5jb25zdCBmYUNvbHVtbnMgPSBmYVRhYmxlQ29sdW1ucztcbmNvbnN0IGZhTGVtb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGVtb24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4MTldLCBcImYwOTRcIiwgXCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0Yy02LjYgMC0xMyAxLTE5IDIuOWMtMjIuNSA3LTQ4LjEgMTQuOS03MSA5Yy03NS4yLTE5LjEtMTU2LjQgMTEtMjEzLjcgNjguM1MtNy4yIDI1MC44IDExLjkgMzI2YzUuOCAyMi45LTIgNDguNC05IDcxQzEgNDAzIDAgNDA5LjQgMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRjNi42IDAgMTMtMSAxOS4xLTIuOWMyMi41LTcgNDguMS0xNC45IDcxLTljNzUuMiAxOS4xIDE1Ni40LTExIDIxMy43LTY4LjNzODcuNS0xMzguNSA2OC4zLTIxMy43Yy01LjgtMjIuOSAyLTQ4LjQgOS03MWMxLjktNiAyLjktMTIuNCAyLjktMTkuMXpNMjEyLjUgMTI3LjRjLTU0LjYgMTYtMTAxLjEgNjIuNS0xMTcuMSAxMTcuMUM5Mi45IDI1MyA4NCAyNTcuOCA3NS41IDI1NS40UzYyLjIgMjQ0IDY0LjYgMjM1LjVjMTkuMS02NS4xIDczLjctMTE5LjggMTM4LjktMTM4LjljOC41LTIuNSAxNy40IDIuNCAxOS45IDEwLjlzLTIuNCAxNy40LTEwLjkgMTkuOXpcIl1cbn07XG5jb25zdCBmYUhlYWRTaWRlTWFzayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFkLXNpZGUtbWFzaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTA2M1wiLCBcIk0zMiAyMjQuMmMwLTIyLjIgMy4yLTQzLjYgOS4yLTYzLjlMMjYyLjIgMzIxYy00IDkuNS02LjIgMjAtNi4yIDMxbDAgMTYwLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTcyLjdjMC0xNi43LTYuOS0zMi41LTE3LjEtNDUuOEM0OC42IDMyMi40IDMyIDI3NC4xIDMyIDIyNC4yem0yNDguMyA3MC40TDUzIDEyOS4zQzg4LjcgNTMgMTY2LjIgMCAyNTYgMGwyNCAwYzk1LjIgMCAxODEuMiA2OS4zIDE5Ny4zIDE2MC4yYzIuMyAxMyA2LjggMjUuNyAxNS4xIDM2bDQyIDUyLjZjNS40IDYuNyA4LjYgMTQuOCA5LjQgMjMuMkwzMzYgMjcyYy0yMS43IDAtNDEuMyA4LjYtNTUuNyAyMi42ek0zMzYgMzA0bDE5OCAwczAgMCAwIDBsMTAgMC0xOS43IDY0TDM2OCAzNjhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTQ2LjUgMC05LjggMzJMMzY4IDQzMmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjYuOCAwLS45IDIuOGMtOC4zIDI2LjktMzMuMSA0NS4yLTYxLjIgNDUuMkwyODggNTEybDAtMTYwYzAtMTQgNi0yNi43IDE1LjYtMzUuNGMwIDAgMCAwIDAgMGM4LjUtNy44IDE5LjktMTIuNiAzMi40LTEyLjZ6bTQ4LTgwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUhhbmRzaGFrZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kc2hha2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYyYjVcIiwgXCJNMzIzLjQgODUuMmwtOTYuOCA3OC40Yy0xNi4xIDEzLTE5LjIgMzYuNC03IDUzLjFjMTIuOSAxNy44IDM4IDIxLjMgNTUuMyA3LjhsOTkuMy03Ny4yYzctNS40IDE3LTQuMiAyMi41IDIuOHM0LjIgMTctMi44IDIyLjVsLTIwLjkgMTYuMkw1MTIgMzE2LjggNTEyIDEyOGwtLjcgMC0zLjktMi41TDQzNC44IDc5Yy0xNS4zLTkuOC0zMy4yLTE1LTUxLjQtMTVjLTIxLjggMC00MyA3LjUtNjAgMjEuMnptMjIuOCAxMjQuNGwtNTEuNyA0MC4yQzI2MyAyNzQuNCAyMTcuMyAyNjggMTkzLjcgMjM1LjZjLTIyLjItMzAuNS0xNi42LTczLjEgMTIuNy05Ni44bDgzLjItNjcuM2MtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC03MiA0OCAwIDIyNCAyOC4yIDAgOTEuNCA4My40YzE5LjYgMTcuOSA0OS45IDE2LjUgNjcuOC0zLjFjNS41LTYuMSA5LjItMTMuMiAxMS4xLTIwLjZsMTcgMTUuNmMxOS41IDE3LjkgNDkuOSAxNi42IDY3LjgtMi45YzQuNS00LjkgNy44LTEwLjYgOS45LTE2LjVjMTkuNCAxMyA0NS44IDEwLjMgNjIuMS03LjVjMTcuOS0xOS41IDE2LjYtNDkuOS0yLjktNjcuOGwtMTM0LjItMTIzek0xNiAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNkwwIDM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjI0LTgwIDB6TTQ4IDMyMGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6TTU0NCAxMjhsMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTIwOGMwLTguOC03LjItMTYtMTYtMTZsLTgwIDB6bTMyIDIwOGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbmNvbnN0IGZhR2VtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dlbScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODE0Ml0sIFwiZjNhNVwiLCBcIk0xMTYuNyAzMy44YzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhsMjQwIDBjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40bC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJ6bTM4LjUgMzkuOGMtMy4zIDIuNS00LjIgNy0yLjEgMTAuNWw1Ny40IDk1LjZMNjMuMyAxOTJjLTQuMSAuMy03LjMgMy44LTcuMyA4czMuMiA3LjYgNy4zIDhsMTkyIDE2Yy40IDAgLjkgMCAxLjMgMGwxOTItMTZjNC4xLS4zIDcuMy0zLjggNy4zLThzLTMuMi03LjYtNy4zLThMMzAxLjUgMTc5LjhsNTcuNC05NS42YzIuMS0zLjUgMS4yLTguMS0yLjEtMTAuNXMtNy45LTItMTAuNyAxTDI1NiAxNzIuMiAxNjUuOSA3NC42Yy0yLjgtMy03LjQtMy40LTEwLjctMXpcIl1cbn07XG5jb25zdCBmYURvbGx5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RvbGx5JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJkb2xseS1ib3hcIl0sIFwiZjQ3MlwiLCBcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMGw3Mi45IDBjMjcuNSAwIDUyIDE3LjYgNjAuNyA0My44TDI1Ny43IDMyMGMzMC4xIC41IDU2LjggMTQuOSA3NCAzN2wyMDIuMS02Ny40YzE2LjgtNS42IDM0LjkgMy41IDQwLjUgMjAuMnMtMy41IDM0LjktMjAuMiA0MC41TDM1MiA0MTcuN2MtLjkgNTIuMi00My41IDk0LjMtOTYgOTQuM2MtNTMgMC05Ni00My05Ni05NmMwLTMwLjggMTQuNS01OC4yIDM3LTc1LjhMMTA0LjkgNjQgMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnpNMjQ0LjggMTM0LjVjLTUuNS0xNi44IDMuNy0zNC45IDIwLjUtNDAuM0wzMTEgNzkuNGwxOS44IDYwLjkgNjAuOS0xOS44TDM3MS44IDU5LjZsNDUuNy0xNC44YzE2LjgtNS41IDM0LjkgMy43IDQwLjMgMjAuNWw0OS40IDE1Mi4yYzUuNSAxNi44LTMuNyAzNC45LTIwLjUgNDAuM0wzMzQuNSAzMDcuMmMtMTYuOCA1LjUtMzQuOS0zLjctNDAuMy0yMC41TDI0NC44IDEzNC41elwiXVxufTtcbmNvbnN0IGZhRG9sbHlCb3ggPSBmYURvbGx5O1xuY29uc3QgZmFTbW9raW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Ntb2tpbmcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjg2ODRdLCBcImY0OGRcIiwgXCJNNDQ4IDMybDAgMTFjMCAzOC4yIDE1LjIgNzQuOCA0Mi4yIDEwMS44bDIxIDIxYzIxIDIxIDMyLjggNDkuNSAzMi44IDc5LjJsMCAxMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTExYzAtMTIuNy01LjEtMjQuOS0xNC4xLTMzLjlsLTIxLTIxQzQwNS45IDE1MS4xIDM4NCA5OC4xIDM4NCA0M2wwLTExYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTU3NiAyNTZsMC0xMWMwLTM4LjItMTUuMi03NC44LTQyLjItMTAxLjhsLTIxLTIxYy0yMS0yMS0zMi44LTQ5LjUtMzIuOC03OS4ybDAtMTFjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDExYzAgMTIuNyA1LjEgMjQuOSAxNC4xIDMzLjlsMjEgMjFjMzkgMzkgNjAuOSA5MS45IDYwLjkgMTQ3LjFsMCAxMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpNMCA0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzJ6bTIyNCAwbDAgMzIgMTYwIDAgMC0zMi0xNjAgMHptMjg4LTY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFNaW5pbWl6ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaW5pbWl6ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY29tcHJlc3MtYXJyb3dzLWFsdFwiXSwgXCJmNzhjXCIsIFwiTTQ1NiAyMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsNDAgNDBMNDQyLjMgNS43QzQ0NiAyIDQ1MC45IDAgNDU2IDBzMTAgMiAxMy43IDUuN2wzNi43IDM2LjdDNTEwIDQ2IDUxMiA1MC45IDUxMiA1NnMtMiAxMC01LjcgMTMuN0w0MzMgMTQzbDQwIDQwYzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJzLTEyLjUgMTQuOC0yMi4yIDE0Ljh6bTAgNjRjOS43IDAgMTguNSA1LjggMjIuMiAxNC44czEuNyAxOS4zLTUuMiAyNi4ybC00MCA0MCA3My40IDczLjRjMy42IDMuNiA1LjcgOC41IDUuNyAxMy43cy0yIDEwLTUuNyAxMy43bC0zNi43IDM2LjdDNDY2IDUxMCA0NjEuMSA1MTIgNDU2IDUxMnMtMTAtMi0xMy43LTUuN0wzNjkgNDMzbC00MCA0MGMtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMnMtMTQuOC0xMi41LTE0LjgtMjIuMmwwLTE0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNDQgMHptLTI1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTQwLTQwTDY5LjcgNTA2LjNDNjYgNTEwIDYxLjEgNTEyIDU2IDUxMnMtMTAtMi0xMy43LTUuN0w1LjcgNDY5LjdDMiA0NjYgMCA0NjEuMSAwIDQ1NnMyLTEwIDUuNy0xMy43TDc5IDM2OSAzOSAzMjljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJzMTIuNS0xNC44IDIyLjItMTQuOGwxNDQgMHpNNTYgMjI0Yy05LjcgMC0xOC41LTUuOC0yMi4yLTE0LjhzLTEuNy0xOS4zIDUuMi0yNi4ybDQwLTQwTDUuNyA2OS43QzIgNjYgMCA2MS4xIDAgNTZzMi0xMCA1LjctMTMuN0w0Mi4zIDUuN0M0NiAyIDUwLjkgMCA1NiAwczEwIDIgMTMuNyA1LjdMMTQzIDc5bDQwLTQwYzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJzMTQuOCAxMi41IDE0LjggMjIuMmwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNEw1NiAyMjR6XCJdXG59O1xuY29uc3QgZmFDb21wcmVzc0Fycm93c0FsdCA9IGZhTWluaW1pemU7XG5jb25zdCBmYU1vbnVtZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbnVtZW50JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNWE2XCIsIFwiTTE4MC43IDQuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGw4MCA4MGMyLjUgMi41IDQuMSA1LjggNC42IDkuM2w0MC4yIDMyMkw1NS45IDQxNiA5Ni4xIDk0Yy40LTMuNSAyLTYuOCA0LjYtOS4zbDgwLTgwek0xNTIgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6TTMyIDQ0OGwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFTbm93cGxvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbm93cGxvdycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjdkMlwiLCBcIk0yOTguOSA2NGw2OC42IDE2MEwyNTYgMjI0bC02NC02NCAwLTk2IDEwNi45IDB6TTQ0NS4xIDI0Mi43bC04Ny40LTIwNEMzNDcuNiAxNS4zIDMyNC41IDAgMjk4LjkgMEwxNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMTItMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMDYuOEMyNi4yIDMxNi44IDAgMzU1LjMgMCA0MDBjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJsMjU2IDBjNjEuOSAwIDExMi01MC4xIDExMi0xMTJjMC0xNy4yLTMuOS0zMy41LTEwLjgtNDhsNDIuOCAwIDAgNTAuN2MwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1NC42IDU0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w1NzYgNDAyLjdsMC04Mi43IDAtODQuOEw2MzMgMTY0YzExLTEzLjggOC44LTMzLjktNS00NXMtMzMuOS04LjgtNDUgNWwtNTcgNzEuMmMtOS4xIDExLjMtMTQgMjUuNC0xNCA0MGwwIDUyLjgtNjQgMCAwLTMxLjNjLjEtMi40LS4yLTQuOC0uNi03LjFzLTEuMi00LjctMi4yLTYuOHpNMzY4IDM1MmMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtMjU2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhsMjU2IDB6TTE0NCA0MDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptMjE2IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTU2LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTIwMCA0MjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbmNvbnN0IGZhQW5nbGVzUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGVzLXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTg3LCBcImFuZ2xlLWRvdWJsZS1yaWdodFwiXSwgXCJmMTAxXCIsIFwiTTQ3MC42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyNTYgMjY1LjQgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHptLTM1MiAxNjBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMjEwLjcgMjU2IDczLjQgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDB6XCJdXG59O1xuY29uc3QgZmFBbmdsZURvdWJsZVJpZ2h0ID0gZmFBbmdsZXNSaWdodDtcbmNvbnN0IGZhQ2FubmFiaXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FubmFiaXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NWZcIiwgXCJNMjU2IDBjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjFjMTUuOCAyMy41IDM2LjcgNjMuNyA0OS4yIDEwOWM3LjIgMjYuNCAxMS44IDU1LjIgMTAuNCA4NGMxMS41LTguOCAyMy43LTE2LjcgMzUuOC0yMy42YzQxLTIzLjMgODQuNC0zNi45IDExMi4yLTQyLjVjNS4yLTEgMTAuNyAuNiAxNC40IDQuNHM1LjQgOS4yIDQuNCAxNC41Yy01LjYgMjcuNy0xOS4zIDcwLjktNDIuNyAxMTEuN2MtOS4xIDE1LjktMTkuOSAzMS43LTMyLjQgNDYuM2MyNy44IDYuNiA1Mi40IDE3LjMgNjcuMiAyNS41YzUuMSAyLjggOC4yIDguMiA4LjIgMTRzLTMuMiAxMS4yLTguMiAxNGMtMTUuMiA4LjQtNDAuOSAxOS41LTY5LjggMjYuMWMtMjAuMiA0LjYtNDIuOSA3LjItNjUuMiA0LjZsOC4zIDMzLjFjMS41IDYuMS0uNiAxMi40LTUuNSAxNi40cy0xMS42IDQuNi0xNy4yIDEuOUwyODAgNDE3LjJsMCA3MC44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzAuOC01OC41IDI5LjFjLTUuNiAyLjgtMTIuMyAyLjEtMTcuMi0xLjlzLTctMTAuMy01LjUtMTYuNGw4LjMtMzMuMWMtMjIuMiAyLjYtNDUgMC02NS4yLTQuNmMtMjguOS02LjYtNTQuNi0xNy42LTY5LjgtMjYuMWMtNS4xLTIuOC04LjItOC4yLTguMi0xNHMzLjItMTEuMiA4LjItMTRjMTQuOC04LjIgMzkuNC0xOC44IDY3LjItMjUuNUM3OC45IDI5Ni4zIDY4LjEgMjgwLjUgNTkgMjY0LjZjLTIzLjQtNDAuOC0zNy4xLTg0LTQyLjctMTExLjdjLTEuMS01LjIgLjYtMTAuNyA0LjQtMTQuNXM5LjItNS40IDE0LjQtNC40YzI3LjkgNS41IDcxLjIgMTkuMiAxMTIuMiA0Mi41YzEyLjEgNi45IDI0LjMgMTQuNyAzNS44IDIzLjZjLTEuNC0yOC43IDMuMS01Ny42IDEwLjQtODRjMTIuNS00NS4zIDMzLjQtODUuNSA0OS4yLTEwOWMzLTQuNCA4LTcuMSAxMy4zLTcuMXpcIl1cbn07XG5jb25zdCBmYUNpcmNsZVBsYXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXBsYXknLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2OSwgXCJwbGF5LWNpcmNsZVwiXSwgXCJmMTQ0XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnpNMTg4LjMgMTQ3LjFjLTcuNiA0LjItMTIuMyAxMi4zLTEyLjMgMjAuOWwwIDE3NmMwIDguNyA0LjcgMTYuNyAxMi4zIDIwLjlzMTYuOCA0LjEgMjQuMy0uNWwxNDQtODhjNy4xLTQuNCAxMS41LTEyLjEgMTEuNS0yMC41cy00LjQtMTYuMS0xMS41LTIwLjVsLTE0NC04OGMtNy40LTQuNS0xNi43LTQuNy0yNC4zLS41elwiXVxufTtcbmNvbnN0IGZhUGxheUNpcmNsZSA9IGZhQ2lyY2xlUGxheTtcbmNvbnN0IGZhVGFibGV0cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZXRzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNDkwXCIsIFwiTTYxNC4zIDI0N2MtNS4yIDcuOS0xNi4yIDguNS0yMi45IDEuOEwzOTEuMiA0OC42Yy02LjctNi43LTYuMi0xNy44IDEuOC0yMi45QzQxOC4xIDkuNCA0NDcuOSAwIDQ4MCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwYzAgMzIuMS05LjQgNjEuOS0yNS43IDg3ek01NjcgMjk0LjNjLTI1IDE2LjMtNTQuOSAyNS43LTg3IDI1LjdjLTg4LjQgMC0xNjAtNzEuNi0xNjAtMTYwYzAtMzIuMSA5LjQtNjEuOSAyNS43LTg3YzUuMi03LjkgMTYuMi04LjUgMjIuOS0xLjhMNTY4LjggMjcxLjRjNi43IDYuNyA2LjIgMTcuOC0xLjggMjIuOXpNMzAxLjUgMzY4YzkuNSAwIDE2LjkgOC4yIDE1IDE3LjVDMzAxLjEgNDU3LjggMjM2LjkgNTEyIDE2MCA1MTJTMTguOSA0NTcuOCAzLjUgMzg1LjVjLTItOS4zIDUuNS0xNy41IDE1LTE3LjVsMjgzLjEgMHptMC0zMkwxOC41IDMzNmMtOS41IDAtMTYuOS04LjItMTUtMTcuNUMxOC45IDI0Ni4yIDgzLjEgMTkyIDE2MCAxOTJzMTQxLjEgNTQuMiAxNTYuNSAxMjYuNWMyIDkuMy01LjUgMTcuNS0xNSAxNy41elwiXVxufTtcbmNvbnN0IGZhRXRoZXJuZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXRoZXJuZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3OTZcIiwgXCJNMCAyMjRMMCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMCAwLTExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTEyIDY0IDAgMC0xMTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDExMiA2NCAwIDAtMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMTIgNjQgMCAwLTExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTEyIDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE2MCA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbmNvbnN0IGZhRXVyb1NpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXVyby1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbODM2NCwgXCJldXJcIiwgXCJldXJvXCJdLCBcImYxNTNcIiwgXCJNNDguMSAyNDBjLS4xIDIuNy0uMSA1LjMtLjEgOGwwIDE2YzAgMi43IDAgNS4zIC4xIDhMMzIgMjcyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4LjMgMEM4OS45IDQxOS45IDE3MCA0ODAgMjY0IDQ4MGwyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNCAwYy01Ny45IDAtMTA4LjItMzIuNC0xMzMuOS04MEwyNTYgMzM2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNDMuOCAwYy0uMS0yLjYtLjItNS4zLS4yLThsMC0xNmMwLTIuNyAuMS01LjQgLjItOEwyNTYgMjQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjUuOSAwYzI1LjctNDcuNiA3Ni04MCAxMzMuOS04MGwyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNCAwQzE3MCAzMiA4OS45IDkyLjEgNjAuMyAxNzZMMzIgMTc2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2LjEgMHpcIl1cbn07XG5jb25zdCBmYUV1ciA9IGZhRXVyb1NpZ247XG5jb25zdCBmYUV1cm8gPSBmYUV1cm9TaWduO1xuY29uc3QgZmFDaGFpciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFpcicsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTY4MV0sIFwiZjZjMFwiLCBcIk0yNDggNDhsMCAyMDggNDggMCAwLTE5Ny4zYzIzLjkgMTMuOCA0MCAzOS43IDQwIDY5LjNsMCAxMjggNDggMCAwLTEyOEMzODQgNTcuMyAzMjYuNyAwIDI1NiAwTDE5MiAwQzEyMS4zIDAgNjQgNTcuMyA2NCAxMjhsMCAxMjggNDggMCAwLTEyOGMwLTI5LjYgMTYuMS01NS41IDQwLTY5LjNMMTUyIDI1Nmw0OCAwIDAtMjA4IDQ4IDB6TTQ4IDI4OGMtMTIuMSAwLTIzLjIgNi44LTI4LjYgMTcuN2wtMTYgMzJjLTUgOS45LTQuNCAyMS43IDEuNCAzMS4xUzIwLjkgMzg0IDMyIDM4NGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAyNTYgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMxMS4xIDAgMjEuNC01LjcgMjcuMi0xNS4yczYuNC0yMS4yIDEuNC0zMS4xbC0xNi0zMkM0MjMuMiAyOTQuOCA0MTIuMSAyODggNDAwIDI4OEw0OCAyODh6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTUzMywgXCJjaGVjay1jaXJjbGVcIl0sIFwiZjA1OFwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzY5IDIwOUwyNDEgMzM3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NyA0N0wzMzUgMTc1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXpcIl1cbn07XG5jb25zdCBmYUNoZWNrQ2lyY2xlID0gZmFDaXJjbGVDaGVjaztcbmNvbnN0IGZhQ2lyY2xlU3RvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtc3RvcCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMDk0LCBcInN0b3AtY2lyY2xlXCJdLCBcImYyOGRcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNjBsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYVN0b3BDaXJjbGUgPSBmYUNpcmNsZVN0b3A7XG5jb25zdCBmYUNvbXBhc3NEcmFmdGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21wYXNzLWRyYWZ0aW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJkcmFmdGluZy1jb21wYXNzXCJdLCBcImY1NjhcIiwgXCJNMzUyIDk2YzAgMTQuMy0zLjEgMjcuOS04LjggNDAuMkwzOTYgMjI3LjRjLTIzLjcgMjUuMy01NC4yIDQ0LjEtODguNSA1My42TDI1NiAxOTJjMCAwIDAgMCAwIDBzMCAwIDAgMGwtNjggMTE3LjVjMjEuNSA2LjggNDQuMyAxMC41IDY4LjEgMTAuNWM3MC43IDAgMTMzLjgtMzIuNyAxNzQuOS04NGMxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NUM0MjguMSAzNDEuOCAzNDcgMzg0IDI1NiAzODRjLTM1LjQgMC02OS40LTYuNC0xMDAuNy0xOC4xTDk4LjcgNDYzLjdDOTQgNDcxLjggODcgNDc4LjQgNzguNiA0ODIuNkwyMy4yIDUxMC4zYy01IDIuNS0xMC45IDIuMi0xNS42LS43UzAgNTAxLjUgMCA0OTZsMC01NS40YzAtOC40IDIuMi0xNi43IDYuNS0yNC4xbDYwLTEwMy43QzUzLjcgMzAxLjYgNDEuOCAyODkuMyAzMS4yIDI3NmMtMTEuMS0xMy44LTguOC0zMy45IDUtNDVzMzMuOS04LjggNDUgNWM1LjcgNy4xIDExLjggMTMuOCAxOC4yIDIwLjFsNjkuNC0xMTkuOWMtNS42LTEyLjItOC44LTI1LjgtOC44LTQwLjJjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptMjEgMjk3LjljMzIuNi0xMi44IDYyLjUtMzAuOCA4OC45LTUyLjlsNDMuNyA3NS41YzQuMiA3LjMgNi41IDE1LjYgNi41IDI0LjFsMCA1NS40YzAgNS41LTIuOSAxMC43LTcuNiAxMy42cy0xMC42IDMuMi0xNS42IC43bC01NS40LTI3LjdjLTguNC00LjItMTUuNC0xMC44LTIwLjEtMTguOUwzNzMgMzkzLjl6TTI1NiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbmNvbnN0IGZhRHJhZnRpbmdDb21wYXNzID0gZmFDb21wYXNzRHJhZnRpbmc7XG5jb25zdCBmYVBsYXRlV2hlYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhdGUtd2hlYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NWFcIiwgXCJNMTc2IDMyYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMjQgMTM2bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDQ4YzAtOC44IDcuMi0xNiAxNi0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmMtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0xNnpNNDAwIDMyYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTYwbDAgMTZjMCA0NC4yLTM1LjggODAtODAgODBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwYzguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDE3NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODB6bS05NiAxNmwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MGM4LjggMCAxNiA3LjIgMTYgMTZ6TTMuNSAzNDcuNkMxLjYgMzMyLjkgMTMgMzIwIDI3LjggMzIwbDQ1Ni40IDBjMTQuOCAwIDI2LjIgMTIuOSAyNC40IDI3LjZDNTAyLjMgMzk3LjggNDY0LjIgNDM3IDQxNiA0NDZsMCAyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yYy00OC4yLTktODYuMy00OC4yLTkyLjUtOTguNHpcIl1cbn07XG5jb25zdCBmYUljaWNsZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWNpY2xlcycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjdhZFwiLCBcIk03NS44IDMwNC44TDEgMzUuN2MtLjctMi41LTEtNS0xLTcuNUMwIDEyLjYgMTIuNiAwIDI4LjIgMEg0ODIuNEM0OTguOCAwIDUxMiAxMy4yIDUxMiAyOS42YzAgMS42LS4xIDMuMy0uNCA0LjlMNDM0LjYgNDk2LjFjLTEuNSA5LjItOS41IDE1LjktMTguOCAxNS45Yy05LjIgMC0xNy4xLTYuNi0xOC43LTE1LjZMMzM2IDE2MCAzMDcuMiAzMDMuOWMtMS45IDkuMy0xMC4xIDE2LjEtMTkuNiAxNi4xYy05LjIgMC0xNy4yLTYuMi0xOS40LTE1LjFMMjQwIDE5MiAyMTAuNiAzNjguMmMtMS41IDkuMS05LjQgMTUuOC0xOC42IDE1LjhzLTE3LjEtNi43LTE4LjYtMTUuOEwxNDQgMTkyIDExNS45IDMwNC4zYy0yLjMgOS4yLTEwLjYgMTUuNy0yMC4xIDE1LjdjLTkuMyAwLTE3LjUtNi4yLTIwLTE1LjJ6XCJdXG59O1xuY29uc3QgZmFQZXJzb25TaGVsdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1zaGVsdGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTRmXCIsIFwiTTI3MS45IDQuMmMtOS44LTUuNi0yMS45LTUuNi0zMS44IDBsLTIyNCAxMjhDNi4yIDEzNy45IDAgMTQ4LjUgMCAxNjBMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwMS40TDI1NiA2OC45IDQ0OCAxNzguNiA0NDggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMjBjMC0xMS41LTYuMi0yMi4xLTE2LjEtMjcuOGwtMjI0LTEyOHpNMjU2IDIwOGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bS04IDI4MGwwLTg4IDE2IDAgMCA4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc0LjUgMjYuOSA0OS45YzYuMyAxMS43IDIwLjggMTYgMzIuNSA5LjhzMTYtMjAuOCA5LjgtMzIuNWwtMzcuOS03MC4zYy0xNS4zLTI4LjUtNDUuMS00Ni4zLTc3LjUtNDYuM2wtMTkuNSAwYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzcuOSA3MC4zYy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEwyMDAgMzEzLjUgMjAwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0elwiXVxufTtcbmNvbnN0IGZhTmV1dGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ25ldXRlcicsXG4gIGljb246IFszODQsIDUxMiwgWzk5MDZdLCBcImYyMmNcIiwgXCJNODAgMTc2YTExMiAxMTIgMCAxIDEgMjI0IDBBMTEyIDExMiAwIDEgMSA4MCAxNzZ6TTIyNCAzNDkuMWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMUMzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMUwxNjAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMzAuOXpcIl1cbn07XG5jb25zdCBmYUlkQmFkZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWQtYmFkZ2UnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYyYzFcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHptOTYgMzIwbDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwem0tMzItOTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0xNDQgNjRsOTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtOTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYU1hcmtlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXJrZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YTFcIiwgXCJNNDgxIDMxQzQ0NS4xLTQuOCAzODYuOS00LjggMzUxIDMxbC0xNSAxNUwzMjIuOSAzM0MyOTQuOCA0LjkgMjQ5LjIgNC45IDIyMS4xIDMzTDEzNSAxMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwyNTUgNjYuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwzMDIuMSA4MCAxODYuMyAxOTUuNyAzMTYuMyAzMjUuNyA0ODEgMTYxYzM1LjktMzUuOSAzNS45LTk0LjEgMC0xMjkuOXpNMjkzLjcgMzQ4LjNMMTYzLjcgMjE4LjMgOTkuNSAyODIuNWMtNDggNDgtODAuOCAxMDkuMi05NC4xIDE3NS44bC01IDI1Yy0xLjYgNy45IC45IDE2IDYuNiAyMS43czEzLjggOC4xIDIxLjcgNi42bDI1LTVjNjYuNi0xMy4zIDEyNy44LTQ2LjEgMTc1LjgtOTQuMWw2NC4yLTY0LjJ6XCJdXG59O1xuY29uc3QgZmFGYWNlTGF1Z2hCZWFtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtbGF1Z2gtYmVhbScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUxMywgXCJsYXVnaC1iZWFtXCJdLCBcImY1OWFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTk2LjggMzE0LjFjLTMuOC0xMy43IDcuNC0yNi4xIDIxLjYtMjYuMWwyNzUuMiAwYzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6TTIxNy42IDIxMi44czAgMCAwIDBjMCAwIDAgMCAwIDBsLS4yLS4yYy0uMi0uMi0uNC0uNS0uNy0uOWMtLjYtLjgtMS42LTItMi44LTMuNGMtMi41LTIuOC02LTYuNi0xMC4yLTEwLjNjLTguOC03LjgtMTguOC0xNC0yNy43LTE0cy0xOC45IDYuMi0yNy43IDE0Yy00LjIgMy43LTcuNyA3LjUtMTAuMiAxMC4zYy0xLjIgMS40LTIuMiAyLjYtMi44IDMuNGMtLjMgLjQtLjYgLjctLjcgLjlsLS4yIC4yYzAgMCAwIDAgMCAwYzAgMCAwIDAgMCAwczAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44YzAgMCAwIDAgMCAwczAgMCAwIDB6bTE2MCAwYzAgMCAwIDAgMCAwbC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMmMwIDAgMCAwIDAgMGMwIDAgMCAwIDAgMHMwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDB6XCJdXG59O1xuY29uc3QgZmFMYXVnaEJlYW0gPSBmYUZhY2VMYXVnaEJlYW07XG5jb25zdCBmYUhlbGljb3B0ZXJTeW1ib2wgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVsaWNvcHRlci1zeW1ib2wnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MDJcIiwgXCJNNDQ1LjMgMjI0bDY0LjcgMEM0OTUuNiAxMDguMiA0MDMuOCAxNi40IDI4OCAybDAgNjQuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS4zIDIyNHpNNTEwIDI4OGwtNjQuNyAwQzQzMS45IDM2OC40IDM2OC40IDQzMS45IDI4OCA0NDUuM2wwIDY0LjdjMTE1LjgtMTQuNCAyMDcuNi0xMDYuMiAyMjItMjIyek0yIDI4OEMxNi40IDQwMy44IDEwOC4yIDQ5NS42IDIyNCA1MTBsMC02NC43QzE0My42IDQzMS45IDgwLjEgMzY4LjQgNjYuNyAyODhMMiAyODh6bTAtNjRsNjQuNyAwQzgwLjEgMTQzLjYgMTQzLjYgODAuMSAyMjQgNjYuN0wyMjQgMkMxMDguMiAxNi40IDE2LjQgMTA4LjIgMiAyMjR6bTIwNi02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgOTYgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NC05NiAwIDAtNjR6XCJdXG59O1xuY29uc3QgZmFVbml2ZXJzYWxBY2Nlc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndW5pdmVyc2FsLWFjY2VzcycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjI5YVwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTE2MS41LTg2LjFjLTEyLjItNS4yLTI2LjMgLjQtMzEuNSAxMi42cy40IDI2LjMgMTIuNiAzMS41bDExLjkgNS4xYzE3LjMgNy40IDM1LjIgMTIuOSA1My42IDE2LjNsMCA1MC4xYzAgNC4zLS43IDguNi0yLjEgMTIuNmwtMjguNyA4Ni4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDI0LjQtNzMuMmMxLjMtMy44IDQuOC02LjQgOC44LTYuNHM3LjYgMi42IDguOCA2LjRsMjQuNCA3My4yYzQuMiAxMi42IDE3LjggMTkuNCAzMC40IDE1LjJzMTkuNC0xNy44IDE1LjItMzAuNGwtMjguNy04Ni4xYy0xLjQtNC4xLTIuMS04LjMtMi4xLTEyLjZsMC01MC4xYzE4LjQtMy41IDM2LjMtOC45IDUzLjYtMTYuM2wxMS45LTUuMWMxMi4yLTUuMiAxNy44LTE5LjMgMTIuNi0zMS41cy0xOS4zLTE3LjgtMzEuNS0xMi42TDMzOC43IDE3NWMtMjYuMSAxMS4yLTU0LjIgMTctODIuNyAxN3MtNTYuNS01LjgtODIuNy0xN2wtMTEuOS01LjF6TTI1NiAxNjBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwelwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlQ2hldnJvblVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1jaGV2cm9uLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjaGV2cm9uLWNpcmNsZS11cFwiXSwgXCJmMTM5XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zNzcgMjcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTg3LTg3LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDIzOSAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMzc3IDI3MXpcIl1cbn07XG5jb25zdCBmYUNoZXZyb25DaXJjbGVVcCA9IGZhQ2lyY2xlQ2hldnJvblVwO1xuY29uc3QgZmFMYXJpU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYXJpLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxYzhcIiwgXCJNMTQ0IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIuN2M1LjMtLjQgMTAuNi0uNyAxNi0uN3MxMC43IC4yIDE2IC43TDIwOCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDkuNGM1NC45IDI1LjIgOTUuOCA3NS41IDEwOC4yIDEzNi4yYzMuNSAxNy4zLTcuNyAzNC4yLTI1IDM3LjdzLTM0LjItNy43LTM3LjctMjVjLTYuMS0yOS45LTIyLjUtNTUuOS00NS40LTc0LjNsMCA2Ny45YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTVjLTUuMi0uNy0xMC42LTEtMTYtMXMtMTAuOCAuMy0xNiAxbDAgOTVjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ny45QzgyLjcgMjExLjUgNjQgMjQ3LjYgNjQgMjg4YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMEwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYuOSAwQzE4LjUgMzgyIDAgMzM3LjIgMCAyODhjMC03Ny41IDQ1LjktMTQ0LjMgMTEyLTE3NC42TDExMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYVZvbGNhbm8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndm9sY2FubycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1NV0sIFwiZjc3MFwiLCBcIk0xNjAgMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzE1LjcgMCAzMCA1LjYgNDEuMiAxNUMyMTIuNCAxMi40IDIzMi43IDAgMjU2IDBzNDMuNiAxMi40IDU0LjggMzFDMzIyIDIxLjYgMzM2LjMgMTYgMzUyIDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy0xNC43IDAtMjguMy01LTM5LjEtMTMuM2wtMzIgNDhDMjc1LjMgMTg3IDI2NiAxOTIgMjU2IDE5MnMtMTkuMy01LTI0LjktMTMuM2wtMzItNDhDMTg4LjMgMTM5IDE3NC43IDE0NCAxNjAgMTQ0ek0xNDQgMzUybDQ4LjQtMjQuMmMxMC4yLTUuMSAyMS42LTcuOCAzMy03LjhjMTkuNiAwIDM4LjQgNy44IDUyLjIgMjEuNmwzMi41IDMyLjVjNi4zIDYuMyAxNC45IDkuOSAyMy44IDkuOWMxMS4zIDAgMjEuOC01LjYgMjgtMTVsOS43LTE0LjYtNTguOS02Ni4zYy05LjEtMTAuMi0yMi4yLTE2LjEtMzUuOS0xNi4xbC00MS44IDBjLTEzLjcgMC0yNi44IDUuOS0zNS45IDE2LjFsLTU5LjkgNjcuNEwxNDQgMzUyem0xOS40LTk1LjhjMTguMi0yMC41IDQ0LjMtMzIuMiA3MS44LTMyLjJsNDEuOCAwYzI3LjQgMCA1My41IDExLjcgNzEuOCAzMi4ybDE1MC4yIDE2OWM4LjUgOS41IDEzLjIgMjEuOSAxMy4yIDM0LjdjMCAyOC44LTIzLjQgNTIuMi01Mi4yIDUyLjJMNTIuMiA1MTJDMjMuNCA1MTIgMCA0ODguNiAwIDQ1OS44YzAtMTIuOCA0LjctMjUuMSAxMy4yLTM0LjdsMTUwLjItMTY5elwiXVxufTtcbmNvbnN0IGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi13YWxraW5nLWRhc2hlZC1saW5lLWFycm93LXJpZ2h0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTUzXCIsIFwiTTIwOCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTEyMy43IDIwMC41YzEtLjQgMS45LS44IDIuOS0xLjJsLTE2LjkgNjMuNWMtNS42IDIxLjEtLjEgNDMuNiAxNC43IDU5LjdsNzAuNyA3Ny4xIDIyIDg4LjFjNC4zIDE3LjEgMjEuNyAyNy42IDM4LjggMjMuM3MyNy42LTIxLjcgMjMuMy0zOC44bC0yMy05Mi4xYy0xLjktNy44LTUuOC0xNC45LTExLjItMjAuOGwtNDkuNS01NCAxOS4zLTY1LjUgOS42IDIzYzQuNCAxMC42IDEyLjUgMTkuMyAyMi44IDI0LjVsMjYuNyAxMy4zYzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOUwyODEgMjMyLjdsLTE1LjMtMzYuOEMyNDguNSAxNTQuOCAyMDguMyAxMjggMTYzLjcgMTI4Yy0yMi44IDAtNDUuMyA0LjgtNjYuMSAxNGwtOCAzLjVjLTMyLjkgMTQuNi01OC4xIDQyLjQtNjkuNCA3Ni41bC0yLjYgNy44Yy01LjYgMTYuOCAzLjUgMzQuOSAyMC4yIDQwLjVzMzQuOS0zLjUgNDAuNS0yMC4ybDIuNi03LjhjNS43LTE3LjEgMTguMy0zMC45IDM0LjctMzguMmw4LTMuNXptLTMwIDEzNS4xTDY4LjcgMzk4IDkuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxMTYuMyA0NDFjNC42LTQuNiA4LjItMTAuMSAxMC42LTE2LjFsMTQuNS0zNi4yLTQwLjctNDQuNGMtMi41LTIuNy00LjgtNS42LTctOC42ek01NTAuNiAxNTMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNTMwLjcgMjI0IDM4NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTQ2LjcgMC0yNS40IDI1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsODAtODBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwek0zOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0IDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNnpNMzkyIDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0IDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00OHpcIl1cbn07XG5jb25zdCBmYVN0ZXJsaW5nU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdGVybGluZy1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTYzLCBcImdicFwiLCBcInBvdW5kLXNpZ25cIl0sIFwiZjE1NFwiLCBcIk0xMTIgMTYwLjRjMC0zNS41IDI4LjgtNjQuNCA2NC40LTY0LjRjNi45IDAgMTMuOCAxLjEgMjAuNCAzLjNsODEuMiAyNy4xYzE2LjggNS42IDM0LjktMy41IDQwLjUtMjAuMnMtMy41LTM0LjktMjAuMi00MC41TDIxNyAzOC42Yy0xMy4xLTQuNC0yNi44LTYuNi00MC42LTYuNkMxMDUuNSAzMiA0OCA4OS41IDQ4IDE2MC40TDQ4IDIyNGwtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwIDAgNDQuNWMwIDE3LjQtNC43IDM0LjUtMTMuNyA0OS40TDQuNiA0MzEuNWMtNS45IDkuOS02LjEgMjIuMi0uNCAzMi4yUzIwLjUgNDgwIDMyIDQ4MGwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4OC41IDQxNmwuNy0xLjFDMTA0LjEgMzkwIDExMiAzNjEuNSAxMTIgMzMyLjVsMC00NC41IDExMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMTIgMCAwLTYzLjZ6XCJdXG59O1xuY29uc3QgZmFHYnAgPSBmYVN0ZXJsaW5nU2lnbjtcbmNvbnN0IGZhUG91bmRTaWduID0gZmFTdGVybGluZ1NpZ247XG5jb25zdCBmYVZpcnVzZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlydXNlcycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA3NlwiLCBcIk0xOTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDEzLjVjMCAzNS42IDQzLjEgNTMuNSA2OC4zIDI4LjNsOS41LTkuNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTkuNSA5LjVDMjkzIDEyNC45IDMxMC45IDE2OCAzNDYuNSAxNjhsMTMuNSAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMy41IDBjLTM1LjYgMC01My41IDQzLjEtMjguMyA2OC4zbDkuNSA5LjVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtOS41LTkuNUMyNTkuMSAyOTMgMjE2IDMxMC45IDIxNiAzNDYuNWwwIDEzLjVjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMy41YzAtMzUuNi00My4xLTUzLjUtNjguMy0yOC4zbC05LjUgOS41Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDkuNS05LjVDOTEgMjU5LjEgNzMuMSAyMTYgMzcuNSAyMTZMMjQgMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEzLjUgMGMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM2wtOS41LTkuNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDkuNSA5LjVDMTI0LjkgOTEgMTY4IDczLjEgMTY4IDM3LjVMMTY4IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0em00OCAyMjRhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0tNDgtNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMzIwIDgwYzAgMzMgMzkuOSA0OS41IDYzLjIgMjYuMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZDNTc0LjUgMzEyLjEgNTkxIDM1MiA2MjQgMzUyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2Yy0zMyAwLTQ5LjUgMzkuOS0yNi4yIDYzLjJjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEM1NTEuOSA0NDYuNSA1MTIgNDYzIDUxMiA0OTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZjMC0zMy0zOS45LTQ5LjUtNjMuMi0yNi4yYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42QzQxNy41IDQyMy45IDQwMSAzODQgMzY4IDM4NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmMzMyAwIDQ5LjUtMzkuOSAyNi4yLTYzLjJjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEM0NDAuMSAyODkuNSA0ODAgMjczIDQ4MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptMCAxMTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpcIl1cbn07XG5jb25zdCBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wZXJzb24tY29uZmluZWQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImU1NzdcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptOTYgMTEyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTgwIDEwNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTAyLjFjMCAzNi40LTI5LjUgNjUuOS02NS45IDY1LjljLTE3LjUgMC0zNC4zLTYuOS00Ni42LTE5LjNMMTg0LjggMzQybC0yOC4xIDU2LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsNDgtOTZjNC42LTkuMiAxMy4zLTE1LjYgMjMuNS0xNy4zczIwLjUgMS43IDI3LjggOUwyNDAgMzA2LjdsMC01OC43elwiXVxufTtcbmNvbnN0IGZhVXNlclRpZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLXRpZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUwOFwiLCBcIk05NiAxMjhhMTI4IDEyOCAwIDEgMCAyNTYgMEExMjggMTI4IDAgMSAwIDk2IDEyOHptOTQuNSAyMDAuMmwxOC42IDMxTDE3NS44IDQ4My4xbC0zNi0xNDYuOWMtMi04LjEtOS44LTEzLjQtMTcuOS0xMS4zQzUxLjkgMzQyLjQgMCA0MDUuOCAwIDQ4MS4zYzAgMTcgMTMuOCAzMC43IDMwLjcgMzAuN2wxMzEuNyAwYzAgMCAwIDAgLjEgMGw1LjUgMCAxMTIgMCA1LjUgMGMwIDAgMCAwIC4xIDBsMTMxLjcgMGMxNyAwIDMwLjctMTMuOCAzMC43LTMwLjdjMC03NS41LTUxLjktMTM4LjktMTIxLjktMTU2LjRjLTguMS0yLTE1LjkgMy4zLTE3LjkgMTEuM2wtMzYgMTQ2LjlMMjM4LjkgMzU5LjJsMTguNi0zMWM2LjQtMTAuNy0xLjMtMjQuMi0xMy43LTI0LjJMMjI0IDMwNGwtMTkuNyAwYy0xMi40IDAtMjAuMSAxMy42LTEzLjcgMjQuMnpcIl1cbn07XG5jb25zdCBmYUFycm93RG93bkxvbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi1sb25nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJsb25nLWFycm93LWRvd25cIl0sIFwiZjE3NVwiLCBcIk0xNjkuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCA0MDIuNyAyMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzNzAuN0w4Ni42IDMyOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4elwiXVxufTtcbmNvbnN0IGZhTG9uZ0Fycm93RG93biA9IGZhQXJyb3dEb3duTG9uZztcbmNvbnN0IGZhVGVudEFycm93RG93blRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW50LWFycm93LWRvd24tdG8tbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU3ZVwiLCBcIk0yNDEuOCAxMTEuOWM4LjkgOS45IDguMSAyNS0xLjggMzMuOWwtODAgNzJjLTkuMSA4LjItMjMgOC4yLTMyLjEgMGwtODAtNzJjLTkuOS04LjktMTAuNy0yNC0xLjgtMzMuOXMyNC0xMC43IDMzLjktMS44bDM5LjkgMzZMMTIwIDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMjIuMSAzOS45LTM2YzkuOS04LjkgMjUtOC4xIDMzLjkgMS44em0xMjIuOCAyMi42YzExLjUtOC43IDI3LjMtOC43IDM4LjggMGwxNjggMTI4YzYuNiA1IDExIDEyLjUgMTIuMyAyMC43bDI0IDE2MCAuNyA0LjdjMTcuNSAuMiAzMS42IDE0LjQgMzEuNiAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTI3LjYgMCAuNy00LjcgMjQtMTYwYzEuMi04LjIgNS42LTE1LjcgMTIuMy0yMC43bDE2OC0xMjh6TTM4NCA0NDhsODAgMEw0MDIuNyAzMjUuNWMtMS43LTMuNC01LjEtNS41LTguOC01LjVjLTUuNSAwLTkuOSA0LjQtOS45IDkuOUwzODQgNDQ4elwiXVxufTtcbmNvbnN0IGZhQ2VydGlmaWNhdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2VydGlmaWNhdGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwYTNcIiwgXCJNMjExIDcuM0MyMDUgMSAxOTYtMS40IDE4Ny42IC44cy0xNC45IDguOS0xNy4xIDE3LjNMMTU0LjcgODAuNmwtNjItMTcuNWMtOC40LTIuNC0xNy40IDAtMjMuNSA2LjFzLTguNSAxNS4xLTYuMSAyMy41bDE3LjUgNjJMMTguMSAxNzAuNmMtOC40IDIuMS0xNSA4LjctMTcuMyAxNy4xUzEgMjA1IDcuMyAyMTFsNDYuMiA0NUw3LjMgMzAxQzEgMzA3LTEuNCAzMTYgLjggMzI0LjRzOC45IDE0LjkgMTcuMyAxNy4xbDYyLjUgMTUuOC0xNy41IDYyYy0yLjQgOC40IDAgMTcuNCA2LjEgMjMuNXMxNS4xIDguNSAyMy41IDYuMWw2Mi0xNy41IDE1LjggNjIuNWMyLjEgOC40IDguNyAxNSAxNy4xIDE3LjNzMTcuMy0uMiAyMy40LTYuNGw0NS00Ni4yIDQ1IDQ2LjJjNi4xIDYuMiAxNSA4LjcgMjMuNCA2LjRzMTQuOS04LjkgMTcuMS0xNy4zbDE1LjgtNjIuNSA2MiAxNy41YzguNCAyLjQgMTcuNCAwIDIzLjUtNi4xczguNS0xNS4xIDYuMS0yMy41bC0xNy41LTYyIDYyLjUtMTUuOGM4LjQtMi4xIDE1LTguNyAxNy4zLTE3LjFzLS4yLTE3LjQtNi40LTIzLjRsLTQ2LjItNDUgNDYuMi00NWM2LjItNi4xIDguNy0xNSA2LjQtMjMuNHMtOC45LTE0LjktMTcuMy0xNy4xbC02Mi41LTE1LjggMTcuNS02MmMyLjQtOC40IDAtMTcuNC02LjEtMjMuNXMtMTUuMS04LjUtMjMuNS02LjFsLTYyIDE3LjVMMzQxLjQgMTguMWMtMi4xLTguNC04LjctMTUtMTcuMS0xNy4zUzMwNyAxIDMwMSA3LjNMMjU2IDUzLjUgMjExIDcuM3pcIl1cbn07XG5jb25zdCBmYVJlcGx5QWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlcGx5LWFsbCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibWFpbC1yZXBseS1hbGxcIl0sIFwiZjEyMlwiLCBcIk0yMDkuNCAzOS41Yy05LjEtOS42LTI0LjMtMTAtMzMuOS0uOUwzMy44IDE3My4yYy0xOS45IDE4LjktMTkuOSA1MC43IDAgNjkuNkwxNzUuNSAzNzcuNGM5LjYgOS4xIDI0LjggOC43IDMzLjktLjlzOC43LTI0LjgtLjktMzMuOUw2Ni44IDIwOCAyMDguNSA3My40YzkuNi05LjEgMTAtMjQuMyAuOS0zMy45ek0zNTIgNjRjMC0xMi42LTcuNC0yNC4xLTE5LTI5LjJzLTI1LTMtMzQuNCA1LjRsLTE2MCAxNDRjLTYuNyA2LjEtMTAuNiAxNC43LTEwLjYgMjMuOHMzLjkgMTcuNyAxMC42IDIzLjhsMTYwIDE0NGM5LjQgOC41IDIyLjkgMTAuNiAzNC40IDUuNHMxOS0xNi42IDE5LTI5LjJsMC02NCAzMiAwYzUzIDAgOTYgNDMgOTYgOTZjMCAzMC40LTEyLjggNDcuOS0yMi4yIDU2LjdjLTUuNSA1LjEtOS44IDEyLTkuOCAxOS41YzAgMTAuOSA4LjggMTkuNyAxOS43IDE5LjdjMi44IDAgNS42LS42IDguMS0xLjlDNDk0LjUgNDY3LjkgNTc2IDQxNy4zIDU3NiAzMDRjMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZsLTQ4IDAgMC02NHpcIl1cbn07XG5jb25zdCBmYU1haWxSZXBseUFsbCA9IGZhUmVwbHlBbGw7XG5jb25zdCBmYVN1aXRjYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1aXRjYXNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIzXSwgXCJmMGYyXCIsIFwiTTE3NiA1NmwwIDQwIDE2MCAwIDAtNDBjMC00LjQtMy42LTgtOC04TDE4NCA0OGMtNC40IDAtOCAzLjYtOCA4ek0xMjggOTZsMC00MGMwLTMwLjkgMjUuMS01NiA1Ni01NkwzMjggMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQwIDAgMzIgMCAzNTItMjU2IDAgMC0zNTIgMC0zMnpNNjQgOTZsMzIgMCAwIDM4NC0zMiAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDQ4IDQ4MGwtMzIgMCAwLTM4NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0elwiXVxufTtcbmNvbnN0IGZhUGVyc29uU2thdGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tc2thdGluZycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wic2thdGluZ1wiXSwgXCJmN2M1XCIsIFwiTTM1MiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0xMjggMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1OS40IDBjNDMuNiAwIDY0LjYgNTMuNCAzMi44IDgzLjFsLTc0LjQgNjkuNCA2MC4yIDYwLjJjOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlsMCA3My40YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuNy03Ny45LTc3LjhjLTI2LjYtMjYuNi0yNC42LTcwLjMgNC4zLTk0LjRsMjAuNC0xN0wxNjAgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNODEuNCAzNTMuNGw4Ni45LTg2LjljNC42IDEwIDExIDE5LjMgMTkuMyAyNy41bDIxLjggMjEuOC04Mi43IDgyLjdjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zem0zMjIuNSA5NS4xYzguNiAyLjEgMTMuOCAxMC44IDExLjYgMTkuNGwtLjQgMS43Yy02LjIgMjQuOS0yOC42IDQyLjQtNTQuMyA0Mi40TDI3MiA1MTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODguOCAwYzExIDAgMjAuNi03LjUgMjMuMy0xOC4ybC40LTEuN2MyLjEtOC42IDEwLjgtMTMuOCAxOS40LTExLjZ6TTEzNS4yIDQ3OC4zbC02LjIgMy4xYy0yMS42IDEwLjgtNDcuNiA2LjYtNjQuNi0xMC41TDQuNyA0MTEuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDU5LjYgNTkuNmM3LjMgNy4zIDE4LjUgOS4xIDI3LjcgNC41bDYuMi0zLjFjNy45LTQgMTcuNS0uNyAyMS41IDcuMnMuNyAxNy41LTcuMiAyMS41elwiXVxufTtcbmNvbnN0IGZhU2thdGluZyA9IGZhUGVyc29uU2thdGluZztcbmNvbnN0IGZhRmlsdGVyQ2lyY2xlRG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbHRlci1jaXJjbGUtZG9sbGFyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJmdW5uZWwtZG9sbGFyXCJdLCBcImY2NjJcIiwgXCJNMy45IDIyLjlDMTAuNSA4LjkgMjQuNSAwIDQwIDBMNDcyIDBjMTUuNSAwIDI5LjUgOC45IDM2LjEgMjIuOXM0LjYgMzAuNS01LjIgNDIuNUwzOTYuNCAxOTUuNkMzMTYuMiAyMTIuMSAyNTYgMjgzIDI1NiAzNjhjMCAyNy40IDYuMyA1My40IDE3LjUgNzYuNWMtMS42LS44LTMuMi0xLjgtNC43LTIuOWwtNjQtNDhjLTguMS02LTEyLjgtMTUuNS0xMi44LTI1LjZsMC03OS4xTDkgNjUuM0MtLjcgNTMuNC0yLjggMzYuOCAzLjkgMjIuOXpNMjg4IDM2OGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xMjAuOC0zMi42Yy42LS45IDEuOC0yLjEgNC4yLTMuNGM1LjEtMi43IDEyLjUtNC4xIDE4LjctNGM4LjIgLjEgMTcuMSAxLjggMjYuNCA0LjFjOC42IDIuMSAxNy4zLTMuMSAxOS40LTExLjdzLTMuMS0xNy4zLTExLjctMTkuNGMtNS42LTEuNC0xMS42LTIuNy0xNy45LTMuN2wwLTkuNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDkuNWMtNi4xIDEuMi0xMi4zIDMuMi0xOCA2LjNjLTExLjggNi4zLTIzIDE4LjQtMjEuOCAzNy4yYzEgMTYgMTEuNyAyNS4zIDIxLjYgMzAuN2M4LjggNC43IDE5LjcgNy44IDI4LjYgMTAuM2wxLjggLjVjMTAuMyAyLjkgMTcuOSA1LjIgMjMuMiA4LjNjNC41IDIuNyA0LjcgNC4yIDQuNyA1LjZjLjEgMi40LS41IDMuNy0xIDQuNWMtLjYgMS0xLjggMi4yLTQgMy4zYy00LjcgMi41LTExLjggMy44LTE4LjUgMy42Yy05LjUtLjMtMTguNS0zLjEtMjkuOS02LjhjLTEuOS0uNi0zLjgtMS4yLTUuOC0xLjhjLTguNC0yLjYtMTcuNCAyLjEtMjAgMTAuNXMyLjEgMTcuNCAxMC41IDIwYzEuNiAuNSAzLjMgMSA1IDEuNmMwIDAgMCAwIDAgMHMwIDAgMCAwYzcgMi4zIDE1LjEgNC44IDIzLjcgNi42bDAgMTEuNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTAuOGM2LjItMS4xIDEyLjUtMy4xIDE4LjMtNi4yYzEyLjEtNi41IDIyLjMtMTguNyAyMS43LTM2LjljLS41LTE2LjItMTAuMy0yNi4zLTIwLjUtMzIuM2MtOS40LTUuNi0yMS4yLTguOS0zMC41LTExLjVsLS4yIDBjLTEwLjQtMi45LTE4LjMtNS4yLTIzLjktOC4yYy00LjgtMi42LTQuOC00LTQuOC00LjVjMCAwIDAgMCAwLS4xYy0uMS0xLjkgLjMtMi45IC44LTMuNnpcIl1cbn07XG5jb25zdCBmYUZ1bm5lbERvbGxhciA9IGZhRmlsdGVyQ2lyY2xlRG9sbGFyO1xuY29uc3QgZmFDYW1lcmFSZXRybyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYW1lcmEtcmV0cm8nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDddLCBcImYwODNcIiwgXCJNMjIwLjYgMTIxLjJMMjcxLjEgOTYgNDQ4IDk2bDAgOTYtMTE0LjggMGMtMjEuOS0xNS4xLTQ4LjUtMjQtNzcuMi0yNHMtNTUuMiA4LjktNzcuMiAyNEw2NCAxOTJsMC02NCAxMjggMGM5LjkgMCAxOS43LTIuMyAyOC42LTYuOHpNMCAxMjhMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjcxLjEgMzJjLTkuOSAwLTE5LjcgMi4zLTI4LjYgNi44TDE5MiA2NGwtMzIgMCAwLTE2YzAtOC44LTcuMi0xNi0xNi0xNkw4MCAzMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZDMjguNyA2NCAwIDkyLjcgMCAxMjh6TTE2OCAzMDRhODggODggMCAxIDEgMTc2IDAgODggODggMCAxIDEgLTE3NiAwelwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlQXJyb3dEb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvdy1jaXJjbGUtZG93blwiXSwgXCJmMGFiXCIsIFwiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMHpNMTI3IDI5N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcxIDcxTDIzMiAxMjBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDIxNC4xIDcxLTcxYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUwyNzMgNDA5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxMjcgMjk3elwiXVxufTtcbmNvbnN0IGZhQXJyb3dDaXJjbGVEb3duID0gZmFDaXJjbGVBcnJvd0Rvd247XG5jb25zdCBmYUZpbGVJbXBvcnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1pbXBvcnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImFycm93LXJpZ2h0LXRvLWZpbGVcIl0sIFwiZjU2ZlwiLCBcIk0xMjggNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMzUyIDBsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDAgMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTExMiAxNzQuMSAwLTM5IDM5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTgwLTgwYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDM5IDM5TDEyOCAyODhsMC0yMjR6bTAgMjI0bDAgNDhMMjQgMzM2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwNCAwek01MTIgMTI4bC0xMjggMEwzODQgMCA1MTIgMTI4elwiXVxufTtcbmNvbnN0IGZhQXJyb3dSaWdodFRvRmlsZSA9IGZhRmlsZUltcG9ydDtcbmNvbnN0IGZhU3F1YXJlQXJyb3dVcFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1hcnJvdy11cC1yaWdodCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiZXh0ZXJuYWwtbGluay1zcXVhcmVcIl0sIFwiZjE0Y1wiLCBcIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0xNjAgMTQ0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk0LjEgMEwxMTkgMzI3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTM1LTEzNUwyODggMzI4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTE1MiAwelwiXVxufTtcbmNvbnN0IGZhRXh0ZXJuYWxMaW5rU3F1YXJlID0gZmFTcXVhcmVBcnJvd1VwUmlnaHQ7XG5jb25zdCBmYUJveE9wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94LW9wZW4nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0OWVcIiwgXCJNNTguOSA0Mi4xYzMtNi4xIDkuNi05LjYgMTYuMy04LjdMMzIwIDY0IDU2NC44IDMzLjRjNi43LS44IDEzLjMgMi43IDE2LjMgOC43bDQxLjcgODMuNGM5IDE3LjktLjYgMzkuNi0xOS44IDQ1LjFMNDM5LjYgMjE3LjNjLTEzLjkgNC0yOC44LTEuOS0zNi4yLTE0LjNMMzIwIDY0IDIzNi42IDIwM2MtNy40IDEyLjQtMjIuMyAxOC4zLTM2LjIgMTQuM0wzNy4xIDE3MC42Yy0xOS4zLTUuNS0yOC44LTI3LjItMTkuOC00NS4xTDU4LjkgNDIuMXpNMzIxLjEgMTI4bDU0LjkgOTEuNGMxNC45IDI0LjggNDQuNiAzNi42IDcyLjUgMjguNkw1NzYgMjExLjZsMCAxNjdjMCAyMi0xNSA0MS4yLTM2LjQgNDYuNmwtMjA0LjEgNTFjLTEwLjIgMi42LTIwLjkgMi42LTMxIDBsLTIwNC4xLTUxQzc5IDQxOS43IDY0IDQwMC41IDY0IDM3OC41bDAtMTY3TDE5MS42IDI0OGMyNy44IDggNTcuNi0zLjggNzIuNS0yOC42TDMxOC45IDEyOGwyLjIgMHpcIl1cbn07XG5jb25zdCBmYVNjcm9sbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzY3JvbGwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyMjBdLCBcImY3MGVcIiwgXCJNMCA4MGwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDAgNDggMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4UzAgNTMuNSAwIDgwek0xMTIgMzJjMTAgMTMuNCAxNiAzMCAxNiA0OGwwIDMwNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDAtNS4zYzAtMzIuNCAyNi4zLTU4LjcgNTguNy01OC43TDQ4MCAzMjBsMC0xOTJjMC01My00My05Ni05Ni05NkwxMTIgMzJ6TTQ2NCA0ODBjNjEuOSAwIDExMi01MC4xIDExMi0xMTJjMC04LjgtNy4yLTE2LTE2LTE2bC0yNDUuMyAwYy0xNC43IDAtMjYuNyAxMS45LTI2LjcgMjYuN2wwIDUuM2MwIDUzLTQzIDk2LTk2IDk2bDE3NiAwIDk2IDB6XCJdXG59O1xuY29uc3QgZmFTcGEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3BhJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNWJiXCIsIFwiTTE4My4xIDIzNS4zYzMzLjcgMjAuNyA2Mi45IDQ4LjEgODUuOCA4MC41YzcgOS45IDEzLjQgMjAuMyAxOS4xIDMxYzUuNy0xMC44IDEyLjEtMjEuMSAxOS4xLTMxYzIyLjktMzIuNCA1Mi4xLTU5LjggODUuOC04MC41QzQzNy42IDIwNy44IDQ5MC4xIDE5MiA1NDYgMTkybDkuOSAwYzExLjEgMCAyMC4xIDkgMjAuMSAyMC4xQzU3NiAzNjAuMSA0NTYuMSA0ODAgMzA4LjEgNDgwTDI4OCA0ODBsLTIwLjEgMEMxMTkuOSA0ODAgMCAzNjAuMSAwIDIxMi4xQzAgMjAxIDkgMTkyIDIwLjEgMTkybDkuOSAwYzU1LjkgMCAxMDguNCAxNS44IDE1My4xIDQzLjN6TTMwMS41IDM3LjZjMTUuNyAxNi45IDYxLjEgNzEuOCA4NC40IDE2NC42Yy0zOCAyMS42LTcxLjQgNTAuOC05Ny45IDg1LjZjLTI2LjUtMzQuOC01OS45LTYzLjktOTcuOS04NS42YzIzLjItOTIuOCA2OC42LTE0Ny43IDg0LjQtMTY0LjZDMjc4IDMzLjkgMjgyLjkgMzIgMjg4IDMyczEwIDEuOSAxMy41IDUuNnpcIl1cbn07XG5jb25zdCBmYUxvY2F0aW9uUGluTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NhdGlvbi1waW4tbG9jaycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUxZlwiLCBcIk0yMTUuNyA0OTkuMmMxMS0xMy44IDI1LjEtMzEuNyA0MC4zLTUyLjNsMC05NC44YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTI0LjZjMC01NS42IDQwLjUtMTAxLjcgOTMuNi0xMTAuNUMzNjcgNzAgMjg3LjcgMCAxOTIgMEM4NiAwIDAgODYgMCAxOTJjMCA4Ny40IDExNyAyNDMgMTY4LjMgMzA3LjJjMTIuMyAxNS4zIDM1LjEgMTUuMyA0Ny40IDB6TTE5MiAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTQwMCAyNDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OC02NCAwIDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMmwwIDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXVxufTtcbmNvbnN0IGZhUGF1c2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGF1c2UnLFxuICBpY29uOiBbMzIwLCA1MTIsIFs5MjA4XSwgXCJmMDRjXCIsIFwiTTQ4IDY0QzIxLjUgNjQgMCA4NS41IDAgMTEyTDAgNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDMyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggNjR6bTE5MiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDI4OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwelwiXVxufTtcbmNvbnN0IGZhSGlsbEF2YWxhbmNoZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoaWxsLWF2YWxhbmNoZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTUwN1wiLCBcIk00MzkuNyA0MDEuOWMzNC4yIDIzLjEgODEuMSAxOS41IDExMS40LTEwLjhjMzQuNC0zNC40IDM0LjQtOTAuMSAwLTEyNC40Yy0yNy44LTI3LjgtNjkuNS0zMy4xLTEwMi42LTE2Yy0xMS44IDYuMS0xNi40IDIwLjYtMTAuMyAzMi4zczIwLjYgMTYuNCAzMi4zIDEwLjNjMTUuMS03LjggMzQtNS4zIDQ2LjYgNy4zYzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42cy00MC45IDE1LjYtNTYuNiAwbC04MS43LTgxLjdDNDAxLjIgMjYxLjMgNDE2IDIzNi40IDQxNiAyMDhjMC0zMy45LTIxLjEtNjIuOS01MC45LTc0LjVjMS45LTYuOCAyLjktMTQgMi45LTIxLjVjMC00NC4yLTM1LjgtODAtODAtODBjLTI3LjMgMC01MS41IDEzLjctNjUuOSAzNC42QzIxNi4zIDQ2LjYgMTk3LjkgMzIgMTc2IDMyYy0yNi41IDAtNDggMjEuNS00OCA0OGMwIDQgLjUgNy45IDEuNCAxMS42TDQzOS43IDQwMS45ek00ODAgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMCAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek02OC4zIDg3QzQzLjEgNjEuOCAwIDc5LjcgMCAxMTUuM0wwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzMTYuNyAwYzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjMgODd6XCJdXG59O1xuY29uc3QgZmFUZW1wZXJhdHVyZUVtcHR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbXBlcmF0dXJlLWVtcHR5JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJ0ZW1wZXJhdHVyZS0wXCIsIFwidGhlcm1vbWV0ZXItMFwiLCBcInRoZXJtb21ldGVyLWVtcHR5XCJdLCBcImYyY2JcIiwgXCJNMTEyIDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTY0LjVjMCAxNy4zIDcuMSAzMS45IDE1LjMgNDIuNUMyMzMuOCAzMzIuNiAyNDAgMzQ5LjUgMjQwIDM2OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTE4LjUgNi4yLTM1LjQgMTYuNy00OC45YzguMi0xMC42IDE1LjMtMjUuMiAxNS4zLTQyLjVMMTEyIDExMnpNMTYwIDBDOTguMSAwIDQ4IDUwLjIgNDggMTEybDAgMTY0LjRjMCAuMS0uMSAuMy0uMiAuNmMtLjIgLjYtLjggMS42LTEuNyAyLjhDMjcuMiAzMDQuMiAxNiAzMzQuOCAxNiAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGMwLTMzLjItMTEuMi02My44LTMwLjEtODguMWMtLjktMS4yLTEuNS0yLjItMS43LTIuOGMtLjEtLjMtLjItLjUtLjItLjZMMjcyIDExMkMyNzIgNTAuMiAyMjEuOSAwIDE2MCAwem0wIDQxNmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6XCJdXG59O1xuY29uc3QgZmFUZW1wZXJhdHVyZTAgPSBmYVRlbXBlcmF0dXJlRW1wdHk7XG5jb25zdCBmYVRoZXJtb21ldGVyMCA9IGZhVGVtcGVyYXR1cmVFbXB0eTtcbmNvbnN0IGZhVGhlcm1vbWV0ZXJFbXB0eSA9IGZhVGVtcGVyYXR1cmVFbXB0eTtcbmNvbnN0IGZhQm9tYiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib21iJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTYzXSwgXCJmMWUyXCIsIFwiTTQ1OS4xIDUyLjRMNDQyLjYgNi41QzQ0MC43IDIuNiA0MzYuNSAwIDQzMi4xIDBzLTguNSAyLjYtMTAuNCA2LjVMNDA1LjIgNTIuNGwtNDYgMTYuOGMtNC4zIDEuNi03LjMgNS45LTcuMiAxMC40YzAgNC41IDMgOC43IDcuMiAxMC4ybDQ1LjcgMTYuOCAxNi44IDQ1LjhjMS41IDQuNCA1LjggNy41IDEwLjQgNy41czguOS0zLjEgMTAuNC03LjVsMTYuNS00NS44IDQ1LjctMTYuOGM0LjItMS41IDcuMi01LjcgNy4yLTEwLjJjMC00LjYtMy04LjktNy4yLTEwLjRMNDU5LjEgNTIuNHptLTEzMi40IDUzYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMi45IDIuOUMyNTYuNSAxMDAuMyAyMzIuNyA5NiAyMDggOTZDOTMuMSA5NiAwIDE4OS4xIDAgMzA0UzkzLjEgNTEyIDIwOCA1MTJzMjA4LTkzLjEgMjA4LTIwOGMwLTI0LjctNC4zLTQ4LjUtMTIuMi03MC41bDIuOS0yLjljMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwek0yMDAgMTkyYy01Ny40IDAtMTA0IDQ2LjYtMTA0IDEwNGwwIDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04YzAtNzUuMSA2MC45LTEzNiAxMzYtMTM2bDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtOCAwelwiXVxufTtcbmNvbnN0IGZhUmVnaXN0ZXJlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWdpc3RlcmVkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTc0XSwgXCJmMjVkXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjAgMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0bDg4IDBjNDQuMiAwIDgwIDM1LjggODAgODBjMCAyOC0xNC40IDUyLjctMzYuMyA2N2wzNC4xIDc1LjFjNS41IDEyLjEgLjEgMjYuMy0xMS45IDMxLjhzLTI2LjMgLjEtMzEuOC0xMS45TDI2OC45IDI4OCAyMDggMjg4bDAgNzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC05NiAwLTExMnptNDggODhsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwIDY0elwiXVxufTtcbmNvbnN0IGZhQWRkcmVzc0NhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYWRkcmVzcy1jYXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDAsIFwiY29udGFjdC1jYXJkXCIsIFwidmNhcmRcIl0sIFwiZjJiYlwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem04MCAyNTZsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZMODAgMzg0Yy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODB6bS0zMi05NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTI1Ni0zMmwxMjggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTI4IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRsMTI4IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYUNvbnRhY3RDYXJkID0gZmFBZGRyZXNzQ2FyZDtcbmNvbnN0IGZhVmNhcmQgPSBmYUFkZHJlc3NDYXJkO1xuY29uc3QgZmFTY2FsZVVuYmFsYW5jZWRGbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NjYWxlLXVuYmFsYW5jZWQtZmxpcCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiYmFsYW5jZS1zY2FsZS1yaWdodFwiXSwgXCJmNTE2XCIsIFwiTTExNy45IDYyLjRjLTE2LjgtNS42LTI1LjgtMjMuNy0yMC4yLTQwLjVzMjMuNy0yNS44IDQwLjUtMjAuMmwxMTMgMzcuN0MyNjUgMTUuOCAyOTAuNyAwIDMyMCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgMy0uMiA1LjktLjUgOC44bDEyMi42IDQwLjljMTYuOCA1LjYgMjUuOCAyMy43IDIwLjIgNDAuNXMtMjMuNyAyNS44LTQwLjUgMjAuMkwzNjYuNCAxNDUuMmMtNC41IDMuMi05LjMgNS45LTE0LjQgOC4yTDM1MiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwIDAtMjk0LjdjLTIxLTkuMi0zNy4yLTI3LTQ0LjItNDlsLTEyNS45LTQyek0yMDAuNCAyODhMMTI4IDE2My44IDU1LjYgMjg4bDE0NC45IDB6TTEyOCAzODRDNjUuMSAzODQgMTIuOCAzNTAgMiAzMDUuMWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMUMyNDMuMiAzNTAgMTkwLjkgMzg0IDEyOCAzODR6bTM4Mi44LTkyLjJMNDM4LjQgNDE2bDE0NC45IDBMNTEwLjggMjkxLjh6bTEyNiAxNDEuM0M2MjYgNDc4IDU3My43IDUxMiA1MTAuOCA1MTJzLTExNS4yLTM0LTEyNi03OC45Yy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xelwiXVxufTtcbmNvbnN0IGZhQmFsYW5jZVNjYWxlUmlnaHQgPSBmYVNjYWxlVW5iYWxhbmNlZEZsaXA7XG5jb25zdCBmYVN1YnNjcmlwdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdWJzY3JpcHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxMmNcIiwgXCJNMzIgNjRDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMybDE1LjMgMCA4OS42IDEyOEw0Ny4zIDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMGMxMC40IDAgMjAuMi01LjEgMjYuMi0xMy42TDE3NiAzMTEuOGw4NS44IDEyMi42YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUuMyAwTDIxNS4xIDI1Nmw4OS42LTEyOCAxNS4zIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTEwLjQgMC0yMC4yIDUuMS0yNi4yIDEzLjZMMTc2IDIwMC4yIDkwLjIgNzcuNkM4NC4yIDY5LjEgNzQuNCA2NCA2NCA2NEwzMiA2NHpNNDgwIDMyMGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjlDMzkzIDM2MS41IDQwNC4zIDM2OCA0MTYgMzY4bDAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTI4elwiXVxufTtcbmNvbnN0IGZhRGlhbW9uZFR1cm5SaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaWFtb25kLXR1cm4tcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImRpcmVjdGlvbnNcIl0sIFwiZjVlYlwiLCBcIk0yMjcuNyAxMS43YzE1LjYtMTUuNiA0MC45LTE1LjYgNTYuNiAwbDIxNiAyMTZjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTIxNiAyMTZjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwbC0yMTYtMjE2Yy0xNS42LTE1LjYtMTUuNi00MC45IDAtNTYuNmwyMTYtMjE2em04Ny42IDEzN2MtNC42LTQuNi0xMS41LTUuOS0xNy40LTMuNXMtOS45IDguMy05LjkgMTQuOGwwIDU2LTY0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNmw2NCAwIDAgNTZjMCA2LjUgMy45IDEyLjMgOS45IDE0LjhzMTIuOSAxLjEgMTcuNC0zLjVsODAtODBjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTgwLTgwelwiXVxufTtcbmNvbnN0IGZhRGlyZWN0aW9ucyA9IGZhRGlhbW9uZFR1cm5SaWdodDtcbmNvbnN0IGZhQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVyc3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0ZGNcIiwgXCJNMzcuNiA0LjJDMjgtMi4zIDE1LjItMS4xIDcgN3MtOS40IDIxLTIuOCAzMC41bDExMiAxNjMuM0wxNi42IDIzMy4yQzYuNyAyMzYuNCAwIDI0NS42IDAgMjU2czYuNyAxOS42IDE2LjYgMjIuOGwxMDMuMSAzMy40TDY2LjggNDEyLjhjLTQuOSA5LjMtMy4yIDIwLjcgNC4zIDI4LjFzMTguOCA5LjIgMjguMSA0LjNsMTAwLjYtNTIuOSAzMy40IDEwMy4xYzMuMiA5LjkgMTIuNCAxNi42IDIyLjggMTYuNnMxOS42LTYuNyAyMi44LTE2LjZsMzMuNC0xMDMuMSAxMDAuNiA1Mi45YzkuMyA0LjkgMjAuNyAzLjIgMjguMS00LjNzOS4yLTE4LjggNC4zLTI4LjFMMzkyLjMgMzEyLjJsMTAzLjEtMzMuNGM5LjktMy4yIDE2LjYtMTIuNCAxNi42LTIyLjhzLTYuNy0xOS42LTE2LjYtMjIuOEwzODguOSAxOTguN2wyNS43LTcwLjRjMy4yLTguOCAxLTE4LjYtNS42LTI1LjJzLTE2LjQtOC44LTI1LjItNS42bC03MC40IDI1LjdMMjc4LjggMTYuNkMyNzUuNiA2LjcgMjY2LjQgMCAyNTYgMHMtMTkuNiA2LjctMjIuOCAxNi42bC0zMi4zIDk5LjZMMzcuNiA0LjJ6XCJdXG59O1xuY29uc3QgZmFIb3VzZUxhcHRvcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1sYXB0b3AnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImxhcHRvcC1ob3VzZVwiXSwgXCJlMDY2XCIsIFwiTTIxOC4zIDguNWMxMi4zLTExLjMgMzEuMi0xMS4zIDQzLjQgMGwyMDggMTkyYzYuNyA2LjIgMTAuMyAxNC44IDEwLjMgMjMuNWwtMTQ0IDBjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43bDAtMzcuN2MwLTguOC03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw2NCAwIDAgMTI4LTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTExMi0zMiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC4xLTM1LjJsMjA4LTE5MnpNMzUyIDMwNGwwIDE0NCAxOTIgMCAwLTE0NC0xOTIgMHptLTQ4LTE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwIDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC00OCAwLTE5MiAwLTQ4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwIDAtMTYwelwiXVxufTtcbmNvbnN0IGZhTGFwdG9wSG91c2UgPSBmYUhvdXNlTGFwdG9wO1xuY29uc3QgZmFGYWNlVGlyZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS10aXJlZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1NSwgXCJ0aXJlZFwiXSwgXCJmNWM4XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjQuNyAzMjguN2MyMi0yMiA1My45LTQwLjcgOTEuMy00MC43czY5LjMgMTguNyA5MS4zIDQwLjdjMTEuMSAxMS4xIDIwLjEgMjMuNCAyNi40IDM1LjRjNi4yIDExLjcgMTAuMyAyNC40IDEwLjMgMzUuOWMwIDUuMi0yLjYgMTAuMi02LjkgMTMuMnMtOS44IDMuNy0xNC43IDEuOGwtMjAuNS03LjdjLTI2LjktMTAuMS01NS41LTE1LjMtODQuMy0xNS4zbC0zLjIgMGMtMjguOCAwLTU3LjMgNS4yLTg0LjMgMTUuM0wxNDkuNiA0MTVjLTQuOSAxLjgtMTAuNCAxLjItMTQuNy0xLjhzLTYuOS03LjktNi45LTEzLjJjMC0xMS42IDQuMi0yNC4yIDEwLjMtMzUuOWM2LjMtMTIgMTUuMy0yNC4zIDI2LjQtMzUuNHptLTMxLjItMTgybDg5LjkgNDcuOWMxMC43IDUuNyAxMC43IDIxLjEgMCAyNi44bC04OS45IDQ3LjljLTcuOSA0LjItMTcuNS0xLjUtMTcuNS0xMC41YzAtMi44IDEtNS41IDIuOC03LjZsMzYtNDMuMi0zNi00My4yYy0xLjgtMi4xLTIuOC00LjgtMi44LTcuNmMwLTkgOS42LTE0LjcgMTcuNS0xMC41ek0zOTYgMTU3LjFjMCAyLjgtMSA1LjUtMi44IDcuNmwtMzYgNDMuMiAzNiA0My4yYzEuOCAyLjEgMi44IDQuOCAyLjggNy42YzAgOS05LjYgMTQuNy0xNy41IDEwLjVsLTg5LjktNDcuOWMtMTAuNy01LjctMTAuNy0yMS4xIDAtMjYuOGw4OS45LTQ3LjljNy45LTQuMiAxNy41IDEuNSAxNy41IDEwLjV6XCJdXG59O1xuY29uc3QgZmFUaXJlZCA9IGZhRmFjZVRpcmVkO1xuY29uc3QgZmFNb25leUJpbGxzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGxzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMWYzXCIsIFwiTTk2IDk2bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQxNiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTY0IDE2MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwtNjQgMCAwLTY0ek0yMjQgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMC02NCA2NCAwek01NzYgMjU2bDAgNjQtNjQgMGMwLTM1LjMgMjguNy02NCA2NC02NHpNNTEyIDk2bDY0IDAgMCA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTI4OCAyMDhhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek00OCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMDYuNyAwIDEyMEwwIDM2MGMwIDY2LjMgNTMuNyAxMjAgMTIwIDEyMGw0MDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAwIDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtMjQwelwiXVxufTtcbmNvbnN0IGZhU21vZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbW9nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzVmXCIsIFwiTTMyIDE0NGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NGwxMjMuMyAwYzIyLjYgMTkuOSA1Mi4yIDMyIDg0LjcgMzJzNjIuMS0xMi4xIDg0LjctMzJsMjcuMyAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEyYy0xMC43IDAtMjEgMS41LTMwLjggNC4zQzQ0My44IDI3LjcgNDAxLjEgMCAzNTIgMGMtMzIuNiAwLTYyLjQgMTIuMi04NS4xIDMyLjNDMjQyLjEgMTIuMSAyMTAuNSAwIDE3NiAwQzk2LjUgMCAzMiA2NC41IDMyIDE0NHpNNjE2IDM2OGwtMzM2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzM2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6bS02NCA5NmwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6bS0xOTIgMEwyNCA0NjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzM2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6TTIyNCAzOTJjMC0xMy4zLTEwLjctMjQtMjQtMjRMOTYgMzY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0elwiXVxufTtcbmNvbnN0IGZhQ3J1dGNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NydXRjaCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjdmN1wiLCBcIk0yOTcuNCA5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDB6bS05NiAxNDRsLTM0LjggMzQuOGMtMTIuOSAxMi45LTIxLjkgMjkuMi0yNS44IDQ3LjFMMTE2LjggMzQyLjljLTEuMyA1LjktNC4zIDExLjQtOC42IDE1LjdMOS40IDQ1Ny40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDk4LjgtOTguOGM0LjMtNC4zIDkuNy03LjMgMTUuNy04LjZsMTA3LjYtMjMuOWMxNy44LTQgMzQuMS0xMi45IDQ3LjEtMjUuOGwzNC43LTM0LjdjMCAwIC4xLS4xIC4xLS4xcy4xLS4xIC4xLS4xbDc0LjYtNzQuNi00NS4zLTQ1LjNMMzM2IDI0Mi43IDI2OS4zIDE3Nmw1Mi4xLTUyLjFMMjc2LjEgNzguNmwtNzQuNyA3NC43ek0yMjQgMjIxLjNMMjkwLjcgMjg4bC0xMi4yIDEyLjJjLTQuMyA0LjMtOS43IDcuMy0xNS43IDguNmwtNzYuNyAxNyAxNy03Ni43YzEuMy01LjkgNC4zLTExLjQgOC42LTE1LjdMMjI0IDIyMS4zelwiXVxufTtcbmNvbnN0IGZhRm9udEF3ZXNvbWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9udC1hd2Vzb21lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjI1MDEsIDYyNjk0LCBcImZvbnQtYXdlc29tZS1mbGFnXCIsIFwiZm9udC1hd2Vzb21lLWxvZ28tZnVsbFwiXSwgXCJmMmI0XCIsIFwiTTkxLjcgOTZDMTA2LjMgODYuOCAxMTYgNzAuNSAxMTYgNTJDMTE2IDIzLjMgOTIuNyAwIDY0IDBTMTIgMjMuMyAxMiA1MmMwIDE2LjcgNy44IDMxLjUgMjAgNDFsMCAzIDAgMzUyIDAgNjQgNjQgMCAwLTY0IDM3My42IDBjMTQuNiAwIDI2LjQtMTEuOCAyNi40LTI2LjRjMC0zLjctLjgtNy4zLTIuMy0xMC43TDQzMiAyNzJsNjEuNy0xMzguOWMxLjUtMy40IDIuMy03IDIuMy0xMC43YzAtMTQuNi0xMS44LTI2LjQtMjYuNC0yNi40TDkxLjcgOTZ6XCJdXG59O1xuY29uc3QgZmFGb250QXdlc29tZUZsYWcgPSBmYUZvbnRBd2Vzb21lO1xuY29uc3QgZmFGb250QXdlc29tZUxvZ29GdWxsID0gZmFGb250QXdlc29tZTtcbmNvbnN0IGZhQ2xvdWRBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb3VkLWFycm93LXVwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbNjIzMzgsIFwiY2xvdWQtdXBsb2FkXCIsIFwiY2xvdWQtdXBsb2FkLWFsdFwiXSwgXCJmMGVlXCIsIFwiTTE0NCA0ODBDNjQuNSA0ODAgMCA0MTUuNSAwIDMzNmMwLTYyLjggNDAuMi0xMTYuMiA5Ni4yLTEzNS45Yy0uMS0yLjctLjItNS40LS4yLTguMWMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MGM1OS4zIDAgMTExIDMyLjIgMTM4LjcgODAuMkM0MDkuOSAxMDIgNDI4LjMgOTYgNDQ4IDk2YzUzIDAgOTYgNDMgOTYgOTZjMCAxMi4yLTIuMyAyMy44LTYuNCAzNC42QzU5NiAyMzguNCA2NDAgMjkwLjEgNjQwIDM1MmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMzY4IDB6bTc5LTIxN2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDM5LTM5TDI5NiAzOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEzNC4xIDM5IDM5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC04MCA4MHpcIl1cbn07XG5jb25zdCBmYUNsb3VkVXBsb2FkID0gZmFDbG91ZEFycm93VXA7XG5jb25zdCBmYUNsb3VkVXBsb2FkQWx0ID0gZmFDbG91ZEFycm93VXA7XG5jb25zdCBmYVBhbGV0dGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFsZXR0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzkxMl0sIFwiZjUzZlwiLCBcIk01MTIgMjU2YzAgLjkgMCAxLjggMCAyLjdjLS40IDM2LjUtMzMuNiA2MS4zLTcwLjEgNjEuM0wzNDQgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGMwIDMuNCAuNCA2LjcgMSA5LjljMi4xIDEwLjIgNi41IDIwIDEwLjggMjkuOWM2LjEgMTMuOCAxMi4xIDI3LjUgMTIuMSA0MmMwIDMxLjgtMjEuNiA2MC43LTUzLjQgNjJjLTMuNSAuMS03IC4yLTEwLjYgLjJDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMTI4IDI4OGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wLTk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMjg4IDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUFycm93c1R1cm5SaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtdHVybi1yaWdodCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTRjMFwiLCBcIk0yOTcuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wzMzguNyAxNjAgMTI4IDE2MGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyQzAgMTUzLjMgNTcuMyA5NiAxMjggOTZsMjEwLjcgMEwyOTcuNCA1NC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3ptLTk2IDI1NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0Mi43IDQxNiA5NiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDE0Ni43IDAtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG5jb25zdCBmYVZlc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmVzdCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA4NVwiLCBcIk0yMDcuMSAyMzcuNEwxNTEuMiA2OS43QzE2OC42IDc5LjcgMTkyLjYgODggMjI0IDg4czU1LjQtOC4zIDcyLjgtMTguM0wyMjYuNSAyODAuNmMtMS42IDQuOS0yLjUgMTAtMi41IDE1LjJMMjI0IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE5My41YzAtOS41LTIuOC0xOC43LTguMS0yNi42bC00Ny45LTcxLjhjLTUuMy03LjktOC4xLTE3LjEtOC4xLTI2LjZsMC0xNy41IDAtNzMuNyAwLTYuM2MwLTI2LjUtMjEuNS00OC00OC00OGwtNC41IDBjLS4yIDAtLjQgMC0uNiAwYy0uNCAwLS44IDAtMS4yIDBDMzExIDAgMjk1LjcgOS43IDI4NS43IDE4LjhDMjc2LjQgMjcuMiAyNTcuMiA0MCAyMjQgNDBzLTUyLjQtMTIuOC02MS43LTIxLjJDMTUyLjMgOS43IDEzNyAwIDExOC4zIDBjLS40IDAtLjggMC0xLjIgMGMtLjIgMC0uNCAwLS42IDBMMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhsMCA2LjNMNjQgMTI4bDAgMTcuNWMwIDkuNS0yLjggMTguNy04LjEgMjYuNkw4LjEgMjQzLjlDMi44IDI1MS44IDAgMjYxLjEgMCAyNzAuNUwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGM5LjkgMCAxOS0zIDI2LjctOC4xQzE5NS45IDQ5Mi4yIDE5MiA0NzguNSAxOTIgNDY0bDAtMTY4LjJjMC04LjYgMS40LTE3LjEgNC4xLTI1LjNsMTEtMzMuMXpNMzQ3LjMgMzU2LjdsNDggNDhjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtNDgtNDhjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMHptLTI5NC42IDQ4bDQ4LTQ4YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNmwtNDggNDhjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xuY29uc3QgZmFGZXJyeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmZXJyeScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRlYVwiLCBcIk0yMjQgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmw3NS4xIDBjMjAuNiAwIDMxLjYgMjQuMyAxOC4xIDM5LjhMNDU2IDk2IDEyMCA5NiA5OC44IDcxLjhDODUuMyA1Ni4zIDk2LjMgMzIgMTE2LjkgMzJMMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiAxMjhsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjMuNWMwIDEzLjMtNC4yIDI2LjMtMTEuOSAzNy4ybC01MS40IDcxLjljLTEuOSAxLjEtMy43IDIuMi01LjUgMy41Yy0xNS41IDEwLjctMzQgMTgtNTEgMTkuOWwtMTYuNSAwYy0xNy4xLTEuOC0zNS05LTUwLjgtMTkuOWMtMjIuMS0xNS41LTUxLjYtMTUuNS03My43IDBjLTE0LjggMTAuMi0zMi41IDE4LTUwLjYgMTkuOWwtMTYuNiAwYy0xNy0xLjgtMzUuNi05LjItNTEtMTkuOWMtMS44LTEuMy0zLjctMi40LTUuNi0zLjVMNzUuOSAzMjAuN0M2OC4yIDMwOS44IDY0IDI5Ni44IDY0IDI4My41TDY0IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMzIgNjRsMCA5NiAzMjAgMCAwLTk2LTMyMCAwek0zMDYuNSA0MjEuOUMzMjkgNDM3LjQgMzU2LjUgNDQ4IDM4NCA0NDhjMjYuOSAwIDU1LjMtMTAuOCA3Ny40LTI2LjFjMCAwIDAgMCAwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA1MDEuNyA0MTcgNTEyIDM4NCA1MTJjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43YzAgMCAwIDAgMCAwQzEzNi43IDQzNy4yIDE2NS4xIDQ0OCAxOTIgNDQ4YzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwelwiXVxufTtcbmNvbnN0IGZhQXJyb3dzRG93blRvUGVvcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy1kb3duLXRvLXBlb3BsZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRiOVwiLCBcIk0xNDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTguMUw5NyAxMTljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNjQgNjRjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNjQtNjRjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMjMgMjNMMTY4IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zNjAgMjAwYTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6TTE4NCAyOTZhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHptMzEyIDQwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpNMjAwIDQ0MS41bDI2LjkgNDkuOWM2LjMgMTEuNyAyMC44IDE2IDMyLjUgOS44czE2LTIwLjggOS44LTMyLjVsLTM2LjMtNjcuNWMxLjctMS43IDMuMi0zLjYgNC4zLTUuOEwyNjQgMzQ1LjVsMCA1NC41YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC01NC41IDI2LjkgNDkuOWMxLjIgMi4yIDIuNiA0LjEgNC4zIDUuOGwtMzYuMyA2Ny41Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEw0NDAgNDQxLjVsMCAzOC41YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zOC41IDI2LjkgNDkuOWM2LjMgMTEuNyAyMC44IDE2IDMyLjUgOS44czE2LTIwLjggOS44LTMyLjVsLTM3LjktNzAuM2MtMTUuMy0yOC41LTQ1LjEtNDYuMy03Ny41LTQ2LjNsLTE5LjUgMGMtMTYuMyAwLTMxLjkgNC41LTQ1LjQgMTIuNmwtMzMuNi02Mi4zYy0xNS4zLTI4LjUtNDUuMS00Ni4zLTc3LjUtNDYuM2wtMTkuNSAwYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzMuNiA2Mi4zYy0xMy41LTguMS0yOS4xLTEyLjYtNDUuNC0xMi42bC0xOS41IDBjLTMyLjQgMC02Mi4xIDE3LjgtNzcuNSA0Ni4zTDE4LjkgNDY4LjZjLTYuMyAxMS43LTEuOSAyNi4yIDkuOCAzMi41czI2LjIgMS45IDMyLjUtOS44TDg4IDQ0MS41IDg4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzguNXpNNDE1IDE1M2w2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2NC02NGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyM0w1MjAgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTguMS0yMy0yM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOXpcIl1cbn07XG5jb25zdCBmYVNlZWRsaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NlZWRsaW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzkzLCBcInNwcm91dFwiXSwgXCJmNGQ4XCIsIFwiTTUxMiAzMmMwIDExMy42LTg0LjYgMjA3LjUtMTk0LjIgMjIyYy03LjEtNTMuNC0zMC42LTEwMS42LTY1LjMtMTM5LjNDMjkwLjggNDYuMyAzNjQgMCA0NDggMGwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDMyIDBjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNGwwIDMyIDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwQzEwMC4zIDMyMCAwIDIxOS43IDAgOTZ6XCJdXG59O1xuY29uc3QgZmFTcHJvdXQgPSBmYVNlZWRsaW5nO1xuY29uc3QgZmFMZWZ0UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGVmdC1yaWdodCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzg1OTYsIFwiYXJyb3dzLWFsdC1oXCJdLCBcImYzMzdcIiwgXCJNNTA0LjMgMjczLjZjNC45LTQuNSA3LjctMTAuOSA3LjctMTcuNnMtMi44LTEzLTcuNy0xNy42bC0xMTItMTA0Yy03LTYuNS0xNy4yLTguMi0yNS45LTQuNHMtMTQuNCAxMi41LTE0LjQgMjJsMCA1Ni0xOTIgMCAwLTU2YzAtOS41LTUuNy0xOC4yLTE0LjQtMjJzLTE4LjktMi4xLTI1LjkgNC40bC0xMTIgMTA0QzIuOCAyNDMgMCAyNDkuMyAwIDI1NnMyLjggMTMgNy43IDE3LjZsMTEyIDEwNGM3IDYuNSAxNy4yIDguMiAyNS45IDQuNHMxNC40LTEyLjUgMTQuNC0yMmwwLTU2IDE5MiAwIDAgNTZjMCA5LjUgNS43IDE4LjIgMTQuNCAyMnMxOC45IDIuMSAyNS45LTQuNGwxMTItMTA0elwiXVxufTtcbmNvbnN0IGZhQXJyb3dzQWx0SCA9IGZhTGVmdFJpZ2h0O1xuY29uc3QgZmFCb3hlc1BhY2tpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm94ZXMtcGFja2luZycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRjN1wiLCBcIk0yNTYgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhMNTkyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTIxMC43IDBjMS44LTUgMi43LTEwLjQgMi43LTE2bDAtMjQyLjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTExMiAwIDAtODB6TTU3MS4zIDM0Ny4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC02NC02NGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTY0IDY0Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBMNDgwIDMxMC42IDQ4MCA0MzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTEyMS40IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHpNMCAxNzZjMC04LjggNy4yLTE2IDE2LTE2bDM1MiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNkwxNiAyMjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0zNTIgODBsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTIyNCAzMjAgMHpNMTQ0IDMyMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw5NiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC05NiAwelwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlQXJyb3dMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1hcnJvdy1sZWZ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvdy1jaXJjbGUtbGVmdFwiXSwgXCJmMGE4XCIsIFwiTTUxMiAyNTZBMjU2IDI1NiAwIDEgMCAwIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwek0yMTUgMTI3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNzEgNzFMMzkyIDIzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjE0LjEgMCA3MSA3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDEwMyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDIxNSAxMjd6XCJdXG59O1xuY29uc3QgZmFBcnJvd0NpcmNsZUxlZnQgPSBmYUNpcmNsZUFycm93TGVmdDtcbmNvbnN0IGZhR3JvdXBBcnJvd3NSb3RhdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ3JvdXAtYXJyb3dzLXJvdGF0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRmNlwiLCBcIk0yMDEuMSA3MS45YzE2LjktNSAyNi42LTIyLjkgMjEuNS0zOS44cy0yMi45LTI2LjYtMzkuOC0yMS41Yy0yMS41IDYuNC00MS44IDE1LjUtNjAuNiAyN0MxMTQuMyAzNCAxMDUuNCAzMiA5NiAzMkM2MC43IDMyIDMyIDYwLjcgMzIgOTZjMCA5LjQgMiAxOC4zIDUuNiAyNi4zYy0xMS41IDE4LjctMjAuNiAzOS0yNyA2MC42Yy01IDE2LjkgNC42IDM0LjggMjEuNSAzOS44czM0LjgtNC42IDM5LjgtMjEuNWM0LjMtMTQuNiAxMC40LTI4LjUgMTcuOS00MS40YzIgLjIgNC4xIC4zIDYuMSAuM2MzNS4zIDAgNjQtMjguNyA2NC02NGMwLTIuMS0uMS00LjEtLjMtNi4xYzEyLjktNy41IDI2LjgtMTMuNiA0MS40LTE3Ljl6bTEyOC02MS4zYy0xNi45LTUtMzQuOCA0LjYtMzkuOCAyMS41czQuNiAzNC44IDIxLjUgMzkuOGMxNC42IDQuMyAyOC41IDEwLjQgNDEuNCAxNy45Yy0uMiAyLS4zIDQuMS0uMyA2LjFjMCAzNS4zIDI4LjcgNjQgNjQgNjRjMi4xIDAgNC4xLS4xIDYuMi0uM2M3LjUgMTIuOSAxMy42IDI2LjggMTcuOSA0MS40YzUgMTYuOSAyMi45IDI2LjYgMzkuOCAyMS41czI2LjYtMjIuOSAyMS41LTM5LjhjLTYuNC0yMS41LTE1LjUtNDEuOC0yNy02MC42YzMuNi04IDUuNi0xNi45IDUuNi0yNi4zYzAtMzUuMy0yOC43LTY0LTY0LTY0Yy05LjQgMC0xOC4zIDItMjYuMyA1LjZjLTE4LjctMTEuNS0zOS0yMC42LTYwLjYtMjd6TTcxLjkgMzEwLjljLTUtMTYuOS0yMi45LTI2LjYtMzkuOC0yMS41cy0yNi42IDIyLjktMjEuNSAzOS44YzYuNCAyMS41IDE1LjUgNDEuOCAyNyA2MC42QzM0IDM5Ny43IDMyIDQwNi42IDMyIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGM5LjQgMCAxOC4zLTIgMjYuMy01LjZjMTguNyAxMS41IDM5IDIwLjYgNjAuNiAyN2MxNi45IDUgMzQuOC00LjYgMzkuOC0yMS41cy00LjYtMzQuOC0yMS41LTM5LjhjLTE0LjYtNC4zLTI4LjUtMTAuNC00MS40LTE3LjljLjItMiAuMy00LjEgLjMtNi4yYzAtMzUuMy0yOC43LTY0LTY0LTY0Yy0yLjEgMC00LjEgLjEtNi4yIC4zYy03LjUtMTIuOS0xMy42LTI2LjgtMTcuOS00MS40em00MjkuNCAxOC4zYzUtMTYuOS00LjYtMzQuOC0yMS41LTM5LjhzLTM0LjggNC42LTM5LjggMjEuNWMtNC4zIDE0LjYtMTAuNCAyOC41LTE3LjkgNDEuNGMtMi0uMi00LjEtLjMtNi4yLS4zYy0zNS4zIDAtNjQgMjguNy02NCA2NGMwIDIuMSAuMSA0LjEgLjMgNi4yYy0xMi45IDcuNS0yNi44IDEzLjYtNDEuNCAxNy45Yy0xNi45IDUtMjYuNiAyMi45LTIxLjUgMzkuOHMyMi45IDI2LjYgMzkuOCAyMS41YzIxLjUtNi40IDQxLjgtMTUuNSA2MC42LTI3YzggMy42IDE2LjkgNS42IDI2LjMgNS42YzM1LjMgMCA2NC0yOC43IDY0LTY0YzAtOS40LTItMTguMy01LjYtMjYuM2MxMS41LTE4LjcgMjAuNi0zOSAyNy02MC42ek0xOTIuOCAyNTYuOGMwLTE1LjYgNS42LTI5LjkgMTQuOS00MS4xTDIyMyAyMzFjNi42IDYuNiAxNy44IDEuOSAxNy44LTcuNGwwLTYwLjVjMC01LjctNC43LTEwLjQtMTAuNC0xMC40bC02MC41IDBjLTkuMyAwLTEzLjkgMTEuMi03LjQgMTcuOGwxMS4yIDExLjJjLTE3LjkgMTkuOC0yOC45IDQ2LjItMjguOSA3NS4xYzAgNDMuNiAyNC45IDgxLjMgNjEuMSA5OS44YzExLjggNiAyNi4zIDEuNCAzMi4zLTEwLjRzMS40LTI2LjMtMTAuNC0zMi4zYy0yMC44LTEwLjYtMzQuOS0zMi4yLTM0LjktNTd6bTkzLjEtNTguNmMyMC44IDEwLjYgMzQuOSAzMi4yIDM0LjkgNTdjMCAxNS42LTUuNiAyOS45LTE0LjkgNDEuMUwyOTAuNiAyODFjLTYuNi02LjYtMTcuOC0xLjktMTcuOCA3LjRsMCA2MC41YzAgNS43IDQuNyAxMC40IDEwLjQgMTAuNGw2MC41IDBjOS4zIDAgMTMuOS0xMS4yIDcuNC0xNy44bC0xMS4yLTExLjJjMTcuOS0xOS44IDI4LjktNDYuMiAyOC45LTc1LjFjMC00My42LTI0LjktODEuMy02MS4xLTk5LjhjLTExLjgtNi0yNi4zLTEuNC0zMi4zIDEwLjRzLTEuNCAyNi4zIDEwLjQgMzIuM3pcIl1cbn07XG5jb25zdCBmYUJvd2xGb29kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvd2wtZm9vZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRjNlwiLCBcIk0wIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGMuNSAwIDEuMSAwIDEuNiAwQzczIDkxLjUgMTA1LjMgNjQgMTQ0IDY0YzE1IDAgMjkgNC4xIDQwLjkgMTEuMkMxOTguMiA0OS42IDIyNS4xIDMyIDI1NiAzMnM1Ny44IDE3LjYgNzEuMSA0My4yQzMzOSA2OC4xIDM1MyA2NCAzNjggNjRjMzguNyAwIDcxIDI3LjUgNzguNCA2NGMuNSAwIDEuMSAwIDEuNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMTEuNy0zLjEgMjIuNi04LjYgMzJMOC42IDIyNEMzLjEgMjE0LjYgMCAyMDMuNyAwIDE5MnptMCA5MS40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZsNDU3LjEgMGMxNS4xIDAgMjcuNCAxMi4zIDI3LjQgMjcuNGMwIDcwLjUtNDQuNCAxMzAuNy0xMDYuNyAxNTQuMUw0MDMuNSA0NTJjLTIgMTYtMTUuNiAyOC0zMS44IDI4bC0yMzEuNSAwYy0xNi4xIDAtMjkuOC0xMi0zMS44LTI4bC0xLjgtMTQuNEM0NC40IDQxNC4xIDAgMzUzLjkgMCAyODMuNHpcIl1cbn07XG5jb25zdCBmYUNhbmR5Q2FuZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYW5keS1jYW5lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzg2XCIsIFwiTTM0OC44IDEzMS41YzMuNy0yLjMgNy45LTMuNSAxMi4yLTMuNWMxMi43IDAgMjMgMTAuMyAyMyAyM2wwIDUuNmMwIDkuOS01LjEgMTkuMS0xMy41IDI0LjNMMzAuMSAzOTMuN0MuMSA0MTIuNS05IDQ1MS45IDkuNyA0ODEuOXM1OC4yIDM5LjEgODguMiAyMC40TDQzOC40IDI4OS41YzQ1LjgtMjguNiA3My42LTc4LjggNzMuNi0xMzIuOGwwLTUuNkM1MTIgNjcuNiA0NDQuNCAwIDM2MSAwYy0yOC4zIDAtNTYgOC04MC4xIDIzTDI1NC4xIDM5LjdjLTMwIDE4LjctMzkuMSA1OC4yLTIwLjQgODguMnM1OC4yIDM5LjEgODguMiAyMC40bDI2LjgtMTYuOHpNMjk4LjQgNDkuOGM5LjItNS43IDE5LjEtMTAuMSAyOS40LTEzLjFMMzQ4IDk3LjVjLTUuNyAxLjQtMTEuMiAzLjctMTYuMyA2LjhsLTEyLjYgNy45TDI5OC40IDQ5Ljh6bTg4LjUgNTIuN2w0Ni4yLTQ2LjJjOC41IDYuNSAxNi4xIDE0LjEgMjIuNiAyMi42bC00Ni4yIDQ2LjJjLTUuMS05LjYtMTMtMTcuNS0yMi42LTIyLjZ6bTI4LjkgNTkuM2w2MS42IDIwLjVjLTIuMiAxMC41LTUuOCAyMC43LTEwLjUgMzAuMmwtNjItMjAuN2M2LjItOC44IDEwLjEtMTkuMSAxMS0zMC4xem0tODYuMSA4Mi41bDYwLjQgMzcuNy0zMC4yIDE4LjktNjAuNC0zNy43IDMwLjItMTguOXptLTEwNy4yIDY3bDYwLjQgMzcuNy0zMC4yIDE4LjktNjAuNC0zNy43IDMwLjItMTguOXpNMTE5LjMgMzc1LjdsNjAuNCAzNy43LTMwLjIgMTguOUw4OS4xIDM5NC42bDMwLjItMTguOXpcIl1cbn07XG5jb25zdCBmYUFycm93RG93bldpZGVTaG9ydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1kb3duLXdpZGUtc2hvcnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYW1vdW50LWFzY1wiLCBcInNvcnQtYW1vdW50LWRvd25cIl0sIFwiZjE2MFwiLCBcIk0xNTEuNiA0NjkuNkMxNDUuNSA0NzYuMiAxMzcgNDgwIDEyOCA0ODBzLTE3LjUtMy44LTIzLjYtMTAuNGwtODgtOTZjLTExLjktMTMtMTEuMS0zMy4zIDItNDUuMnMzMy4zLTExLjEgNDUuMiAyTDk2IDM2NS43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDEuNyAzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIwIDk2elwiXVxufTtcbmNvbnN0IGZhU29ydEFtb3VudEFzYyA9IGZhQXJyb3dEb3duV2lkZVNob3J0O1xuY29uc3QgZmFTb3J0QW1vdW50RG93biA9IGZhQXJyb3dEb3duV2lkZVNob3J0O1xuY29uc3QgZmFDbG91ZEJvbHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtYm9sdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc4NSwgXCJ0aHVuZGVyc3Rvcm1cIl0sIFwiZjc2Y1wiLCBcIk0wIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDQ3LjIgMEwyOTAgMjAyLjVjMTcuNi0xNC4xIDQyLjYtMTQgNjAuMiAuMnMyMi44IDM4LjYgMTIuOCA1OC44TDMzMy43IDMyMGwxOC4zIDAgNjQgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtLjUgMC0xLjEgMC0xLjYgMGMxLjEtNS4yIDEuNi0xMC41IDEuNi0xNmMwLTQ0LjItMzUuOC04MC04MC04MGMtMjQuMyAwLTQ2LjEgMTAuOS02MC44IDI4QzI1Ni41IDI0LjMgMjE5LjEgMCAxNzYgMEMxMTQuMSAwIDY0IDUwLjEgNjQgMTEyYzAgNy4xIC43IDE0LjEgMS45IDIwLjhDMjcuNiAxNDUuNCAwIDE4MS41IDAgMjI0em0zMzAuMSAzLjZjLTUuOC00LjctMTQuMi00LjctMjAuMS0uMWwtMTYwIDEyOGMtNS4zIDQuMi03LjQgMTEuNC01LjEgMTcuOHM4LjMgMTAuNyAxNS4xIDEwLjdsNzAuMSAwTDE3Ny43IDQ4OC44Yy0zLjQgNi43LTEuNiAxNC45IDQuMyAxOS42czE0LjIgNC43IDIwLjEgLjFsMTYwLTEyOGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44cy04LjMtMTAuNy0xNS4xLTEwLjdsLTcwLjEgMCA1Mi40LTEwNC44YzMuNC02LjcgMS42LTE0LjktNC4yLTE5LjZ6XCJdXG59O1xuY29uc3QgZmFUaHVuZGVyc3Rvcm0gPSBmYUNsb3VkQm9sdDtcbmNvbnN0IGZhVGV4dFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RleHQtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInJlbW92ZS1mb3JtYXRcIl0sIFwiZjg3ZFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM1NS43IDI1My41IDQwMC4yIDk2IDUwMyA5NiA0OTcgMTIwLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTEtNDQuMUM1NzcuNiA2MS4zIDU1NC43IDMyIDUyMy41IDMyTDM3Ni4xIDMybC0uMyAwTDIwNC41IDMyYy0yMiAwLTQxLjIgMTUtNDYuNiAzNi40bC02LjMgMjUuMkwzOC44IDUuMXptMTY4IDEzMS43Yy4xLS4zIC4yLS43IC4zLTFMMjE3IDk2bDExNi43IDBMMzAxLjMgMjEwLjhsLTk0LjUtNzQuMXpNMjQzLjMgNDE2TDE5MiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQyLjIgMCAxNy42LTYyLjFMMjcyLjkgMzExIDI0My4zIDQxNnpcIl1cbn07XG5jb25zdCBmYVJlbW92ZUZvcm1hdCA9IGZhVGV4dFNsYXNoO1xuY29uc3QgZmFGYWNlU21pbGVXaW5rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Utc21pbGUtd2luaycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUyMSwgXCJzbWlsZS13aW5rXCJdLCBcImY0ZGFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC4xIDMyNS41QzE4MiAzNDYuMiAyMTIuNiAzNjggMjU2IDM2OHM3NC0yMS44IDkxLjktNDIuNWM1LjgtNi43IDE1LjktNy40IDIyLjYtMS42czcuNCAxNS45IDEuNiAyMi42QzM0OS44IDM3Mi4xIDMxMS4xIDQwMCAyNTYgNDAwcy05My44LTI3LjktMTE2LjEtNTMuNWMtNS44LTYuNy01LjEtMTYuOCAxLjYtMjIuNnMxNi44LTUuMSAyMi42IDEuNnpNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE1Ni40IDI1LjZjLTUuMyA3LjEtMTUuMyA4LjUtMjIuNCAzLjJzLTguNS0xNS4zLTMuMi0yMi40YzMwLjQtNDAuNSA5MS4yLTQwLjUgMTIxLjYgMGM1LjMgNy4xIDMuOSAxNy4xLTMuMiAyMi40cy0xNy4xIDMuOS0yMi40LTMuMmMtMTcuNi0yMy41LTUyLjgtMjMuNS03MC40IDB6XCJdXG59O1xuY29uc3QgZmFTbWlsZVdpbmsgPSBmYUZhY2VTbWlsZVdpbms7XG5jb25zdCBmYUZpbGVXb3JkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtd29yZCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjFjMlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMjI0IDAgNjQgMHpNMjU2IDBsMCAxMjggMTI4IDBMMjU2IDB6TTExMSAyNTcuMWwyNi44IDg5LjIgMzEuNi05MC4zYzMuNC05LjYgMTIuNS0xNi4xIDIyLjctMTYuMXMxOS4zIDYuNCAyMi43IDE2LjFsMzEuNiA5MC4zTDI3MyAyNTcuMWMzLjgtMTIuNyAxNy4yLTE5LjkgMjkuOS0xNi4xczE5LjkgMTcuMiAxNi4xIDI5LjlsLTQ4IDE2MGMtMyAxMC0xMiAxNi45LTIyLjQgMTcuMXMtMTkuOC02LjItMjMuMi0xNi4xTDE5MiAzMzYuNmwtMzMuMyA5NS4zYy0zLjQgOS44LTEyLjggMTYuMy0yMy4yIDE2LjFzLTE5LjUtNy4xLTIyLjQtMTcuMWwtNDgtMTYwYy0zLjgtMTIuNyAzLjQtMjYuMSAxNi4xLTI5LjlzMjYuMSAzLjQgMjkuOSAxNi4xelwiXVxufTtcbmNvbnN0IGZhRmlsZVBvd2VycG9pbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1wb3dlcnBvaW50JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMWM0XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwyMjQgMCA2NCAwek0yNTYgMGwwIDEyOCAxMjggMEwyNTYgMHpNMTM2IDI0MGw2OCAwYzQyIDAgNzYgMzQgNzYgNzZzLTM0IDc2LTc2IDc2bC00NCAwIDAgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC01NiAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHptNjggMTA0YzE1LjUgMCAyOC0xMi41IDI4LTI4cy0xMi41LTI4LTI4LTI4bC00NCAwIDAgNTYgNDQgMHpcIl1cbn07XG5jb25zdCBmYUFycm93c0xlZnRSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtbGVmdC1yaWdodCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYXJyb3dzLWhcIl0sIFwiZjA3ZVwiLCBcIk00MDYuNiAzNzQuNmw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNGwtMjkzLjUgMCA0MS40LTQxLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI4OGwyOTMuNSAwLTQxLjQgNDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHpcIl1cbn07XG5jb25zdCBmYUFycm93c0ggPSBmYUFycm93c0xlZnRSaWdodDtcbmNvbnN0IGZhSG91c2VMb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MTBcIiwgXCJNMzg0IDQ4MGMwIDExLjcgMy4xIDIyLjYgOC42IDMybC0uNiAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTI0IDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjQgMCAyNGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMjQgMC0zMS45IDBjLTEuNSAwLTMtLjEtNC41LS4yYy0xLjIgLjEtMi40IC4yLTMuNiAuMmwtMTYgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0xMTJjMC0uOSAwLTEuOSAuMS0yLjhsMC02OS43LTMyIDBjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQ5MC43IDE2Ni4zQzQ0Ny4yIDE4MS43IDQxNiAyMjMuMiA0MTYgMjcybDAgMjQuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNGwwIDEyOHpNNTI4IDI0MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OCA2NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6bS04MCAzMmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwwLTQ4elwiXVxufTtcbmNvbnN0IGZhQ2xvdWRBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtYXJyb3ctZG93bicsXG4gIGljb246IFs2NDAsIDUxMiwgWzYyMzM3LCBcImNsb3VkLWRvd25sb2FkXCIsIFwiY2xvdWQtZG93bmxvYWQtYWx0XCJdLCBcImYwZWRcIiwgXCJNMTQ0IDQ4MEM2NC41IDQ4MCAwIDQxNS41IDAgMzM2YzAtNjIuOCA0MC4yLTExNi4yIDk2LjItMTM1LjljLS4xLTIuNy0uMi01LjQtLjItOC4xYzAtODguNCA3MS42LTE2MCAxNjAtMTYwYzU5LjMgMCAxMTEgMzIuMiAxMzguNyA4MC4yQzQwOS45IDEwMiA0MjguMyA5NiA0NDggOTZjNTMgMCA5NiA0MyA5NiA5NmMwIDEyLjItMi4zIDIzLjgtNi40IDM0LjZDNTk2IDIzOC40IDY0MCAyOTAuMSA2NDAgMzUyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zNjggMHptNzktMTY3bDgwIDgwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDgwLTgwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTM5IDM5TDM0NCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMzQuMS0zOS0zOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOXpcIl1cbn07XG5jb25zdCBmYUNsb3VkRG93bmxvYWQgPSBmYUNsb3VkQXJyb3dEb3duO1xuY29uc3QgZmFDbG91ZERvd25sb2FkQWx0ID0gZmFDbG91ZEFycm93RG93bjtcbmNvbnN0IGZhQ2hpbGRyZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hpbGRyZW4nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZTFcIiwgXCJNMTYwIDBhNjQgNjQgMCAxIDEgMCAxMjhBNjQgNjQgMCAxIDEgMTYwIDB6TTg4IDQ4MGwwLTgwLTE3LjggMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsMzEuMS05My40TDU3LjUgMzIzLjNjLTEwLjcgMTQuMS0zMC44IDE2LjgtNDQuOCA2LjJzLTE2LjgtMzAuNy02LjItNDQuOEw2NS40IDIwN2MyMi40LTI5LjYgNTcuNS00NyA5NC42LTQ3czcyLjIgMTcuNCA5NC42IDQ3bDU4LjkgNzcuN2MxMC43IDE0LjEgNy45IDM0LjItNi4yIDQ0LjhzLTM0LjIgNy45LTQ0LjgtNi4ybC0yOC42LTM3LjhMMjY1IDM3OC45YzMuNSAxMC40LTQuMyAyMS4xLTE1LjIgMjEuMUwyMzIgNDAwbDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MC0xNiAwIDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6TTQ4MCAwYTY0IDY0IDAgMSAxIDAgMTI4QTY0IDY0IDAgMSAxIDQ4MCAwem0tOCAzODRsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE3OS41TDM5NS4xIDMyMWMtOS40IDE1LTI5LjIgMTkuNC00NC4xIDEwcy0xOS40LTI5LjItMTAtNDQuMWw1MS43LTgyLjFjMTcuNi0yNy45IDQ4LjMtNDQuOSA4MS4yLTQ0LjlsMTIuMyAwYzMzIDAgNjMuNyAxNi45IDgxLjIgNDQuOUw2MTkuMSAyODdjOS40IDE1IDQuOSAzNC43LTEwIDQ0LjFzLTM0LjcgNC45LTQ0LjEtMTBMNTUyIDMwMC41IDU1MiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni0xNiAwelwiXVxufTtcbmNvbnN0IGZhQ2hhbGtib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFsa2JvYXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJibGFja2JvYXJkXCJdLCBcImY1MWJcIiwgXCJNOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2bDAgMjg4IDY0IDBMOTYgOTZsMzg0IDAgMCAyODggNjQgMCAwLTI4OGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAzMnpNMjI0IDM4NGwwIDMyTDMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbmNvbnN0IGZhQmxhY2tib2FyZCA9IGZhQ2hhbGtib2FyZDtcbmNvbnN0IGZhVXNlckxhcmdlU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1sYXJnZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1widXNlci1hbHQtc2xhc2hcIl0sIFwiZjRmYVwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM4MS45IDI3NGM0OC41LTIzLjIgODIuMS03Mi43IDgyLjEtMTMwQzQ2NCA2NC41IDM5OS41IDAgMzIwIDBDMjUwLjQgMCAxOTIuNCA0OS4zIDE3OC45IDExNC45TDM4LjggNS4xek01NDUuNSA1MTJMNTI4IDUxMiAyODQuMyAzMjBsLTU5IDBDMTM2LjIgMzIwIDY0IDM5Mi4yIDY0IDQ4MS4zYzAgMTcgMTMuOCAzMC43IDMwLjcgMzAuN2w0NTAuNiAwIC4zIDB6XCJdXG59O1xuY29uc3QgZmFVc2VyQWx0U2xhc2ggPSBmYVVzZXJMYXJnZVNsYXNoO1xuY29uc3QgZmFFbnZlbG9wZU9wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZW52ZWxvcGUtb3BlbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMTM1XSwgXCJmMmI2XCIsIFwiTTY0IDIwOC4xTDI1NiA2NS45IDQ0OCAyMDguMWwwIDQ3LjRMMjg5LjUgMzczYy05LjcgNy4yLTIxLjQgMTEtMzMuNSAxMXMtMjMuOC0zLjktMzMuNS0xMUw2NCAyNTUuNWwwLTQ3LjR6TTI1NiAwYy0xMi4xIDAtMjMuOCAzLjktMzMuNSAxMUwyNS45IDE1Ni43QzkuNiAxNjguOCAwIDE4Ny44IDAgMjA4LjFMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMzkuOWMwLTIwLjMtOS42LTM5LjQtMjUuOS01MS40TDI4OS41IDExQzI3OS44IDMuOSAyNjguMSAwIDI1NiAwelwiXVxufTtcbmNvbnN0IGZhSGFuZHNoYWtlU2ltcGxlU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHNoYWtlLXNpbXBsZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiaGFuZHNoYWtlLWFsdC1zbGFzaFwiXSwgXCJlMDVmXCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdsLTEzNS0xMDUuOGMtMS4xLTExLjQtNi4zLTIyLjMtMTUuMy0zMC43bC0xMzQuMi0xMjMtMjMuNCAxOC4yLTI2LTIwLjMgNzcuMi02MC4xYzctNS40IDE3LTQuMiAyMi41IDIuOHM0LjIgMTctMi44IDIyLjVsLTIwLjkgMTYuMkw1NTAuMiAzNTJsNDEuOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTI4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC03NiAwLTQgMC0uNyAwLTMuOS0yLjVMNDM0LjggNzljLTE1LjMtOS44LTMzLjItMTUtNTEuNC0xNWMtMjEuOCAwLTQzIDcuNS02MCAyMS4ybC04OS43IDcyLjYtMjUuOC0yMC4zIDgxLjgtNjYuMmMtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC0zNS41IDIzLjdMMzguOCA1LjF6TTAgMTc2TDAgMzA0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEwOC4yIDAgOTEuNCA4My40YzE5LjYgMTcuOSA0OS45IDE2LjUgNjcuOC0zLjFjNS41LTYuMSA5LjItMTMuMiAxMS4xLTIwLjZsMTcgMTUuNmMxOS41IDE3LjkgNDkuOSAxNi42IDY3LjgtMi45Yy44LS44IDEuNS0xLjcgMi4yLTIuNkw0MS4yIDEyOC41QzE3LjkgMTMxLjggMCAxNTEuOCAwIDE3NnpcIl1cbn07XG5jb25zdCBmYUhhbmRzaGFrZUFsdFNsYXNoID0gZmFIYW5kc2hha2VTaW1wbGVTbGFzaDtcbmNvbnN0IGZhTWF0dHJlc3NQaWxsb3cgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWF0dHJlc3MtcGlsbG93JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTI1XCIsIFwiTTI1NiA2NEw2NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwLTM4NHptMzIgMzg0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDI4OCA2NGwwIDM4NHpNNjQgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyelwiXVxufTtcbmNvbnN0IGZhR3VhcmFuaVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ3VhcmFuaS1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMTlhXCIsIFwiTTE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDM0LjdDNjkuMiA4MS45IDAgMTYwLjkgMCAyNTZzNjkuMiAxNzQuMSAxNjAgMTg5LjNsMCAzNC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNC43YzkwLjgtMTUuMiAxNjAtOTQuMiAxNjAtMTg5LjNjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwIDAtOTJjMjIuMSA1LjcgNDEuOCAxNy4xIDU3LjYgMzIuNmMxMi42IDEyLjQgMzIuOSAxMi4yIDQ1LjMtLjRzMTIuMi0zMi45LS41LTQ1LjNDMjk5IDkyIDI2My41IDczLjMgMjI0IDY2LjdMMjI0IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xNjAgMTMyTDE2MCAzODBjLTU1LjItMTQuMi05Ni02NC4zLTk2LTEyNHM0MC44LTEwOS44IDk2LTEyNHpNMjI0IDM4MGwwLTkyIDkyIDBjLTExLjYgNDUtNDcgODAuNC05MiA5MnpcIl1cbn07XG5jb25zdCBmYUFycm93c1JvdGF0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3Mtcm90YXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcyLCBcInJlZnJlc2hcIiwgXCJzeW5jXCJdLCBcImYwMjFcIiwgXCJNMTA1LjEgMjAyLjZjNy43LTIxLjggMjAuMi00Mi4zIDM3LjgtNTkuOGM2Mi41LTYyLjUgMTYzLjgtNjIuNSAyMjYuMyAwTDM4Ni4zIDE2MCAzNTIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDExMS41IDBjMCAwIDAgMCAwIDBsLjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTExMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDM1LjJMNDE0LjQgOTcuNmMtODcuNS04Ny41LTIyOS4zLTg3LjUtMzE2LjggMEM3My4yIDEyMiA1NS42IDE1MC43IDQ0LjggMTgxLjRjLTUuOSAxNi43IDIuOSAzNC45IDE5LjUgNDAuOHMzNC45LTIuOSA0MC44LTE5LjV6TTM5IDI4OS4zYy01IDEuNS05LjggNC4yLTEzLjcgOC4yYy00IDQtNi43IDguOC04LjEgMTRjLS4zIDEuMi0uNiAyLjUtLjggMy44Yy0uMyAxLjctLjQgMy40LS40IDUuMUwxNiA0MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM1LjEgMTcuNiAxNy41YzAgMCAwIDAgMCAwYzg3LjUgODcuNCAyMjkuMyA4Ny40IDMxNi43IDBjMjQuNC0yNC40IDQyLjEtNTMuMSA1Mi45LTgzLjhjNS45LTE2LjctMi45LTM0LjktMTkuNS00MC44cy0zNC45IDIuOS00MC44IDE5LjVjLTcuNyAyMS44LTIwLjIgNDIuMy0zNy44IDU5LjhjLTYyLjUgNjIuNS0xNjMuOCA2Mi41LTIyNi4zIDBsLS4xLS4xTDEyNS42IDM1MmwzNC40IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNDguNCAyODhjLTEuNiAwLTMuMiAuMS00LjggLjNzLTMuMSAuNS00LjYgMXpcIl1cbn07XG5jb25zdCBmYVJlZnJlc2ggPSBmYUFycm93c1JvdGF0ZTtcbmNvbnN0IGZhU3luYyA9IGZhQXJyb3dzUm90YXRlO1xuY29uc3QgZmFGaXJlRXh0aW5ndWlzaGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpcmUtZXh0aW5ndWlzaGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE5XSwgXCJmMTM0XCIsIFwiTTUwMC4zIDcuM0M1MDcuNyAxMy4zIDUxMiAyMi40IDUxMiAzMmwwIDk2YzAgOS42LTQuMyAxOC43LTExLjcgMjQuN3MtMTcuMiA4LjUtMjYuNiA2LjZsLTE2MC0zMkMzMDEuNSAxMjQuOSAyOTIgMTE1LjcgMjg5IDEwNGwtNjUgMCAwIDM0LjhjMzcuOCAxOCA2NCA1Ni41IDY0IDEwMS4ybDAgMTQ0TDY0IDM4NGwwLTE0NGMwLTQ0LjcgMjYuMi04My4yIDY0LTEwMS4ybDAtMjguOGMtMzYuMiAxMS4xLTY2IDM2LjktODIuMyA3MC41Yy01LjggMTEuOS0yMC4yIDE2LjktMzIuMSAxMS4xUy0zLjMgMTcxLjQgMi41IDE1OS41QzI2LjcgMTA5LjggNzIuNyA3Mi42IDEyOCA2MC40TDEyOCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjQgNjUgMGMzLTExLjcgMTIuNS0yMC45IDI0LjctMjMuNGwxNjAtMzJjOS40LTEuOSAxOS4xIC42IDI2LjYgNi42ek0yODggNDE2bDAgMzJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzIgMjI0IDB6TTE3NiA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xuY29uc3QgZmFDcnV6ZWlyb1NpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3J1emVpcm8tc2lnbicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTE1MlwiLCBcIk05NiAyNTZjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBjNDEgMCA3OC4zIDE1LjQgMTA2LjcgNDAuN2MxMy4yIDExLjggMzMuNCAxMC43IDQ1LjItMi41czEwLjctMzMuNC0yLjUtNDUuMmMtMzkuNi0zNS41LTkyLTU3LTE0OS4zLTU3QzEzMi4zIDMyIDMyIDEzMi4zIDMyIDI1NnMxMDAuMyAyMjQgMjI0IDIyNGM1Ny40IDAgMTA5LjctMjEuNiAxNDkuMy01N2MxMy4yLTExLjggMTQuMy0zMiAyLjUtNDUuMnMtMzItMTQuMy00NS4yLTIuNUMzMzQuMyA0MDAuNiAyOTcgNDE2IDI1NiA0MTZsMC05NiAwLTguN2MwLTEyLjggMTAuNC0yMy4zIDIzLjMtMjMuM2M0LjYgMCA5LjEgMS40IDEyLjkgMy45bDEwLjEgNi43YzE0LjcgOS44IDM0LjYgNS44IDQ0LjQtOC45czUuOC0zNC42LTguOS00NC40bC0xMC4xLTYuN2MtMTQuMy05LjYtMzEuMi0xNC43LTQ4LjQtMTQuN2MtMTIuNCAwLTI0LjIgMi42LTM0LjkgNy4zYy01LjUtNC41LTEyLjYtNy4zLTIwLjMtNy4zYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDU1LjMgMCA4LjcgMCA4Mi43QzEzNS41IDM3OCA5NiAzMjEuNiA5NiAyNTZ6XCJdXG59O1xuY29uc3QgZmFHcmVhdGVyVGhhbkVxdWFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyZWF0ZXItdGhhbi1lcXVhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUzMlwiLCBcIk01Mi4xIDkzLjdDMzUuNyA4Ny4xIDI3LjcgNjguNSAzNC4zIDUyLjFzMjUuMi0yNC40IDQxLjYtMTcuOGwzMjAgMTI4QzQwOCAxNjcuMSA0MTYgMTc4LjkgNDE2IDE5MnMtOCAyNC45LTIwLjEgMjkuN2wtMzIwIDEyOGMtMTYuNCA2LjYtMzUtMS40LTQxLjYtMTcuOHMxLjQtMzUgMTcuOC00MS42TDI5Ny44IDE5MiA1Mi4xIDkzLjd6TTQxNiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwelwiXVxufTtcbmNvbnN0IGZhU2hpZWxkSGFsdmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaWVsZC1oYWx2ZWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNoaWVsZC1hbHRcIl0sIFwiZjNlZFwiLCBcIk0yNTYgMGM0LjYgMCA5LjIgMSAxMy40IDIuOUw0NTcuNyA4Mi44YzIyIDkuMyAzOC40IDMxIDM4LjMgNTcuMmMtLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yYy0xNi43IDgtMzYuMSA4LTUyLjggMEM1Ny4zIDQyMC43IDE2LjUgMjM5LjIgMTYgMTQwYy0uMS0yNi4yIDE2LjMtNDcuOSAzOC4zLTU3LjJMMjQyLjcgMi45QzI0Ni44IDEgMjUxLjQgMCAyNTYgMHptMCA2Ni44bDAgMzc4LjFDMzk0IDM3OCA0MzEuMSAyMzAuMSA0MzIgMTQxLjRMMjU2IDY2LjhzMCAwIDAgMHpcIl1cbn07XG5jb25zdCBmYVNoaWVsZEFsdCA9IGZhU2hpZWxkSGFsdmVkO1xuY29uc3QgZmFCb29rQXRsYXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1hdGxhcycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiYXRsYXNcIl0sIFwiZjU1OFwiLCBcIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDM4NCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMEw5NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTZMMCA5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjRMOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMjQ3LjQgMjgzLjhjLTMuNyAzLjctNi4yIDQuMi03LjQgNC4ycy0zLjctLjUtNy40LTQuMmMtMy44LTMuNy04LTEwLTExLjgtMTguOWMtNi4yLTE0LjUtMTAuOC0zNC4zLTEyLjItNTYuOWw2MyAwYy0xLjUgMjIuNi02IDQyLjQtMTIuMiA1Ni45Yy0zLjggOC45LTggMTUuMi0xMS44IDE4Ljl6bTQyLjctOS45YzcuMy0xOC4zIDEyLTQxLjEgMTMuNC02NS45bDMxLjEgMGMtNC43IDI3LjktMjEuNCA1MS43LTQ0LjUgNjUuOXptMC0xNjMuOGMyMy4yIDE0LjIgMzkuOSAzOCA0NC41IDY1LjlsLTMxLjEgMGMtMS40LTI0LjctNi4xLTQ3LjUtMTMuNC02NS45ek0zNjggMTkyYTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6TTE0NS4zIDIwOGwzMS4xIDBjMS40IDI0LjcgNi4xIDQ3LjUgMTMuNCA2NS45Yy0yMy4yLTE0LjItMzkuOS0zOC00NC41LTY1Ljl6bTMxLjEtMzJsLTMxLjEgMGM0LjctMjcuOSAyMS40LTUxLjcgNDQuNS02NS45Yy03LjMgMTguMy0xMiA0MS4xLTEzLjQgNjUuOXptNTYuMS03NS44YzMuNy0zLjcgNi4yLTQuMiA3LjQtNC4yczMuNyAuNSA3LjQgNC4yYzMuOCAzLjcgOCAxMCAxMS44IDE4LjljNi4yIDE0LjUgMTAuOCAzNC4zIDEyLjIgNTYuOWwtNjMgMGMxLjUtMjIuNiA2LTQyLjQgMTIuMi01Ni45YzMuOC04LjkgOC0xNS4yIDExLjgtMTguOXpcIl1cbn07XG5jb25zdCBmYUF0bGFzID0gZmFCb29rQXRsYXM7XG5jb25zdCBmYVZpcnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpcnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMDc0XCIsIFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExLjVjMCA0OS45LTYwLjMgNzQuOS05NS42IDM5LjZMMTIwLjIgNzVDMTA3LjcgNjIuNSA4Ny41IDYyLjUgNzUgNzVzLTEyLjUgMzIuOCAwIDQ1LjNsOC4yIDguMkMxMTguNCAxNjMuNyA5My40IDIyNCA0My41IDIyNEwzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTEuNSAwYzQ5LjkgMCA3NC45IDYwLjMgMzkuNiA5NS42TDc1IDM5MS44Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDguMi04LjJjMzUuMy0zNS4zIDk1LjYtMTAuMyA5NS42IDM5LjZsMCAxMS41YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMS41YzAtNDkuOSA2MC4zLTc0LjkgOTUuNi0zOS42bDguMiA4LjJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOC4yLTguMmMtMzUuMy0zNS4zLTEwLjMtOTUuNiAzOS42LTk1LjZsMTEuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMS41IDBjLTQ5LjkgMC03NC45LTYwLjMtMzkuNi05NS42bDguMi04LjJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTguMiA4LjJDMzQ4LjMgMTE4LjQgMjg4IDkzLjQgMjg4IDQzLjVMMjg4IDMyek0xNzYgMjI0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xuY29uc3QgZmFFbnZlbG9wZUNpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VudmVsb3BlLWNpcmNsZS1jaGVjaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRlOFwiLCBcIk00OCA2NEMyMS41IDY0IDAgODUuNSAwIDExMmMwIDE1LjEgNy4xIDI5LjMgMTkuMiAzOC40TDIzNi44IDMxMy42YzExLjQgOC41IDI3IDguNSAzOC40IDBsNTcuNC00M2MyMy45LTU5LjggNzkuNy0xMDMuMyAxNDYuMy0xMDkuOGwxMy45LTEwLjRjMTIuMS05LjEgMTkuMi0yMy4zIDE5LjItMzguNGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCA2NHpNMjk0LjQgMzM5LjJjLTIyLjggMTcuMS01NCAxNy4xLTc2LjggMEwwIDE3NiAwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyOTYuMiAwQzMzNS4xIDQxNy42IDMyMCAzNzguNSAzMjAgMzM2YzAtNS42IC4zLTExLjEgLjgtMTYuNmwtMjYuNCAxOS44ek02NDAgMzM2YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzUzLjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbmNvbnN0IGZhTGF5ZXJHcm91cCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYXllci1ncm91cCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjVmZFwiLCBcIk0yNjQuNSA1LjJjMTQuOS02LjkgMzIuMS02LjkgNDcgMGwyMTguNiAxMDFjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEw0NS45IDE0OS44QzM3LjQgMTQ1LjggMzIgMTM3LjMgMzIgMTI4czUuNC0xNy45IDEzLjktMjEuOEwyNjQuNSA1LjJ6TTQ3Ni45IDIwOS42bDUzLjIgMjQuNmM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDQ1LjkgMjc3LjhDMzcuNCAyNzMuOCAzMiAyNjUuMyAzMiAyNTZzNS40LTE3LjkgMTMuOS0yMS44bDUzLjItMjQuNiAxNTIgNzAuMmMyMy40IDEwLjggNTAuNCAxMC44IDczLjggMGwxNTItNzAuMnptLTE1MiAxOTguMmwxNTItNzAuMiA1My4yIDI0LjZjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEw0NS45IDQwNS44QzM3LjQgNDAxLjggMzIgMzkzLjMgMzIgMzg0czUuNC0xNy45IDEzLjktMjEuOGw1My4yLTI0LjYgMTUyIDcwLjJjMjMuNCAxMC44IDUwLjQgMTAuOCA3My44IDB6XCJdXG59O1xuY29uc3QgZmFBcnJvd3NUb0RvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtdG8tZG90JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGJlXCIsIFwiTTI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45bC02NCA2NGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTY0LTY0Yy05LjItOS4yLTExLjktMjIuOS02LjktMzQuOXMxNi42LTE5LjggMjkuNi0xOS44bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTY5LjQgMzkzLjRsNjQtNjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNjQgNjRjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlzLTE2LjYgMTkuOC0yOS42IDE5LjhsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45ek0zMiAyMjRsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTI5Ny40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDY0LTY0YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45czE5LjggMTYuNiAxOS44IDI5LjZsMCAzMiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTY0LTY0ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYUFyY2h3YXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJjaHdheScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjU1N1wiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDAgNjQgMCAwLTEyOGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMTI4IDY0IDAgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTI4OEwzMiAxMjhsMCAyODh6XCJdXG59O1xuY29uc3QgZmFIZWFydENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYXJ0LWNpcmNsZS1jaGVjaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRmZFwiLCBcIk00Ny42IDMwMC40TDIyOC4zIDQ2OS4xYzcuNSA3IDE3LjQgMTAuOSAyNy43IDEwLjlzMjAuMi0zLjkgMjcuNy0xMC45bDIuNi0yLjRDMjY3LjIgNDM4LjYgMjU2IDQwNC42IDI1NiAzNjhjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZjMjguMyAwIDU1IDYuNyA3OC43IDE4LjVjLjktNi41IDEuMy0xMyAxLjMtMTkuNmwwLTUuOGMwLTY5LjktNTAuNS0xMjkuNS0xMTkuNC0xNDFDMzQ3IDM2LjUgMzAwLjYgNTEuNCAyNjggODRMMjU2IDk2IDI0NCA4NGMtMzIuNi0zMi42LTc5LTQ3LjUtMTI0LjYtMzkuOUM1MC41IDU1LjYgMCAxMTUuMiAwIDE4NS4xbDAgNS44YzAgNDEuNSAxNy4yIDgxLjIgNDcuNiAxMDkuNXpNNTc2IDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDE2IDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl1cbn07XG5jb25zdCBmYUhvdXNlQ2hpbW5leUNyYWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWNoaW1uZXktY3JhY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImhvdXNlLWRhbWFnZVwiXSwgXCJmNmYxXCIsIFwiTTU3NS44IDI1NS41YzAgMTgtMTUgMzIuMS0zMiAzMi4xbC0zMiAwIC43IDE2MC4yYy4yIDM1LjUtMjguNSA2NC4zLTY0IDY0LjNsLTEyMi4xIDBMMjg4IDQ0OGw4MC44LTY3LjNjNy44LTYuNSA3LjYtMTguNi0uNC0yNC45TDI1MC42IDI2My4yYy0xNC42LTExLjUtMzMuOCA3LTIyLjggMjJMMjg4IDM2OGwtODUuNSA3MS4yYy02LjEgNS03LjUgMTMuOC0zLjUgMjAuNUwyMzAuNCA1MTJsLTEwMi4zIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTYwLjQtMzIgMGMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNDE2IDEwMC43IDQxNiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTIxIDUyLjggNDYuNGM4IDcgMTIgMTUgMTEgMjR6XCJdXG59O1xuY29uc3QgZmFIb3VzZURhbWFnZSA9IGZhSG91c2VDaGltbmV5Q3JhY2s7XG5jb25zdCBmYUZpbGVaaXBwZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS16aXBwZXInLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImZpbGUtYXJjaGl2ZVwiXSwgXCJmMWM2XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwyMjQgMCA2NCAwek0yNTYgMGwwIDEyOCAxMjggMEwyNTYgMHpNOTYgNDhjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2em0wIDY0YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZ6bS02LjMgNzEuOGMzLjctMTQgMTYuNC0yMy44IDMwLjktMjMuOGwxNC44IDBjMTQuNSAwIDI3LjIgOS43IDMwLjkgMjMuOGwyMy41IDg4LjJjMS40IDUuNCAyLjEgMTAuOSAyLjEgMTYuNGMwIDM1LjItMjguOCA2My43LTY0IDYzLjdzLTY0LTI4LjUtNjQtNjMuN2MwLTUuNSAuNy0xMS4xIDIuMS0xNi40bDIzLjUtODguMnpNMTEyIDMzNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwelwiXVxufTtcbmNvbnN0IGZhRmlsZUFyY2hpdmUgPSBmYUZpbGVaaXBwZXI7XG5jb25zdCBmYVNxdWFyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5NjMyLCA5NzIzLCA5NzI0LCA2MTU5MF0sIFwiZjBjOFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2elwiXVxufTtcbmNvbnN0IGZhTWFydGluaUdsYXNzRW1wdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFydGluaS1nbGFzcy1lbXB0eScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZ2xhc3MtbWFydGluaVwiXSwgXCJmMDAwXCIsIFwiTTMyIDBDMTkuMSAwIDcuNCA3LjggMi40IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45TDIyNCAyNjkuMyAyMjQgNDQ4bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTE3OC43TDUwMi42IDU0LjZjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgMCA0ODAgMEwzMiAwek0yNTYgMjEwLjdMMTA5LjMgNjRsMjkzLjUgMEwyNTYgMjEwLjd6XCJdXG59O1xuY29uc3QgZmFHbGFzc01hcnRpbmkgPSBmYU1hcnRpbmlHbGFzc0VtcHR5O1xuY29uc3QgZmFDb3VjaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb3VjaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjRiOFwiLCBcIk02NCAxNjBDNjQgODkuMyAxMjEuMyAzMiAxOTIgMzJsMjU2IDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAzMy42Yy0zNi41IDcuNC02NCAzOS43LTY0IDc4LjRsMCA0OC0zODQgMCAwLTQ4YzAtMzguNy0yNy41LTcxLTY0LTc4LjRMNjQgMTYwek01NDQgMjcyYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2M1LTEuOCAxMC40LTIuNyAxNi0yLjdjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDk2IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhjNS42IDAgMTEgMSAxNiAyLjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgNDggMCAzMiAzMiAwIDM4NCAwIDMyIDAgMC0zMiAwLTQ4elwiXVxufTtcbmNvbnN0IGZhQ2VkaVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2VkaS1zaWduJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMGRmXCIsIFwiTTI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDM0LjdDMTAxLjIgODEuOSAzMiAxNjAuOSAzMiAyNTZzNjkuMiAxNzQuMSAxNjAgMTg5LjNsMCAzNC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNC43YzMwLjktNS4yIDU5LjItMTcuNyA4My4yLTM1LjhjMTQuMS0xMC42IDE3LTMwLjcgNi40LTQ0LjhzLTMwLjctMTctNDQuOC02LjRjLTEzLjIgOS45LTI4LjMgMTcuMy00NC44IDIxLjZMMjU2IDEzMmMxNi40IDQuMiAzMS42IDExLjYgNDQuOCAyMS42YzE0LjEgMTAuNiAzNC4yIDcuOCA0NC44LTYuNHM3LjgtMzQuMi02LjQtNDQuOGMtMjQtMTgtNTIuNC0zMC42LTgzLjItMzUuOEwyNTYgMzJ6TTE5MiAxMzJMMTkyIDM4MGMtNTUuMi0xNC4yLTk2LTY0LjMtOTYtMTI0czQwLjgtMTA5LjggOTYtMTI0elwiXVxufTtcbmNvbnN0IGZhSXRhbGljID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2l0YWxpYycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjAzM1wiLCBcIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTU4LjcgMEwxNjAgNDE2bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDU4LjcgMEwyMjQgOTZsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyelwiXVxufTtcbmNvbnN0IGZhVGFibGVDZWxsc0NvbHVtbkxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGUtY2VsbHMtY29sdW1uLWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU2NzhcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY1LjFjLTM3LjggNS40LTY5LjQgMjkuNi04NS4yIDYyLjlMMzYwIDIyNGwwIDY0IDU2IDAgMCA4LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRsLTI0IDAgMCA2NCAyNCAwIDAgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0yMDggMGwwIDY0IDg4IDAgMC02NC04OCAwem0yNDAgMGwtODggMCAwIDY0IDg4IDAgMC02NHpNMjA4IDIyNGwwIDY0IDg4IDAgMC02NC04OCAwem0wIDEyOGwwIDY0IDg4IDAgMC02NC04OCAwek01MjggMjQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtNDh6XCJdXG59O1xuY29uc3QgZmFDaHVyY2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2h1cmNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTk2Ml0sIFwiZjUxZFwiLCBcIk0zNDQgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNC0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCA0Ni40TDE4My4zIDIxMGMtMTQuNSA4LjctMjMuMyAyNC4zLTIzLjMgNDEuMkwxNjAgNTEybDk2IDAgMC05NmMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgOTYgOTYgMCAwLTI2MC44YzAtMTYuOS04LjgtMzIuNS0yMy4zLTQxLjJMMzQ0IDE0Mi40IDM0NCA5NmwzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMjR6TTI0LjkgMzMwLjNDOS41IDMzOC44IDAgMzU0LjkgMCAzNzIuNEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw4MCAwIDAtMjM4LjRMMjQuOSAzMzAuM3pNNTkyIDUxMmMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTkxLjZjMC0xNy41LTkuNS0zMy42LTI0LjktNDIuMUw1MTIgMjczLjYgNTEyIDUxMmw4MCAwelwiXVxufTtcbmNvbnN0IGZhQ29tbWVudHNEb2xsYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudHMtZG9sbGFyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNjUzXCIsIFwiTTQxNiAxNzZjMCA5Ny4yLTkzLjEgMTc2LTIwOCAxNzZjLTM4LjIgMC03My45LTguNy0xMDQuNy0yMy45Yy03LjUgNC0xNiA3LjktMjUuMiAxMS40QzU5LjggMzQ2LjQgMzcuOCAzNTIgMTYgMzUyYy02LjkgMC0xMy4xLTQuNS0xNS4yLTExLjFzLjItMTMuOCA1LjgtMTcuOWMwIDAgMCAwIDAgMHMwIDAgMCAwbC4yLS4yYy4yLS4yIC42LS40IDEuMS0uOGMxLS44IDIuNS0yIDQuMy0zLjdjMy42LTMuMyA4LjUtOC4xIDEzLjMtMTQuM2M1LjUtNyAxMC43LTE1LjQgMTQuMi0yNC43QzE0LjcgMjUwLjMgMCAyMTQuNiAwIDE3NkMwIDc4LjggOTMuMSAwIDIwOCAwUzQxNiA3OC44IDQxNiAxNzZ6TTIzMS41IDM4M0MzNDguOSAzNzIuOSA0NDggMjg4LjMgNDQ4IDE3NmMwLTUuMi0uMi0xMC40LS42LTE1LjVDNTU1LjEgMTY3LjEgNjQwIDI0My4yIDY0MCAzMzZjMCAzOC42LTE0LjcgNzQuMy0zOS42IDEwMy40YzMuNSA5LjQgOC43IDE3LjcgMTQuMiAyNC43YzQuOCA2LjIgOS43IDExIDEzLjMgMTQuM2MxLjggMS42IDMuMyAyLjkgNC4zIDMuN2MuNSAuNCAuOSAuNyAxLjEgLjhsLjIgLjJzMCAwIDAgMHMwIDAgMCAwYzUuNiA0LjEgNy45IDExLjMgNS44IDE3LjljLTIuMSA2LjYtOC4zIDExLjEtMTUuMiAxMS4xYy0yMS44IDAtNDMuOC01LjYtNjIuMS0xMi41Yy05LjItMy41LTE3LjgtNy40LTI1LjItMTEuNEM1MDUuOSA1MDMuMyA0NzAuMiA1MTIgNDMyIDUxMmMtOTUuNiAwLTE3Ni4yLTU0LjYtMjAwLjUtMTI5ek0yMjggNzJjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMTRjLTcuNiAxLjctMTUuMiA0LjQtMjIuMiA4LjVjLTEzLjkgOC4zLTI1LjkgMjIuOC0yNS44IDQzLjljLjEgMjAuMyAxMiAzMy4xIDI0LjcgNDAuN2MxMSA2LjYgMjQuNyAxMC44IDM1LjYgMTRsMS43IC41YzEyLjYgMy44IDIxLjggNi44IDI4IDEwLjdjNS4xIDMuMiA1LjggNS40IDUuOSA4LjJjLjEgNS0xLjggOC01LjkgMTAuNWMtNSAzLjEtMTIuOSA1LTIxLjQgNC43Yy0xMS4xLS40LTIxLjUtMy45LTM1LjEtOC41Yy0yLjMtLjgtNC43LTEuNi03LjItMi40Yy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zYzEuOSAuNiA0IDEuMyA2LjEgMi4xYzAgMCAwIDAgMCAwczAgMCAwIDBjOC4zIDIuOSAxNy45IDYuMiAyOC4yIDguNGwwIDE0LjZjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xMy44YzgtMS43IDE2LTQuNSAyMy4yLTljMTQuMy04LjkgMjUuMS0yNC4xIDI0LjgtNDVjLS4zLTIwLjMtMTEuNy0zMy40LTI0LjYtNDEuNmMtMTEuNS03LjItMjUuOS0xMS42LTM3LjEtMTVsLS43LS4yYy0xMi44LTMuOS0yMS45LTYuNy0yOC4zLTEwLjVjLTUuMi0zLjEtNS4zLTQuOS01LjMtNi43YzAtMy43IDEuNC02LjUgNi4yLTkuM2M1LjQtMy4yIDEzLjYtNS4xIDIxLjUtNWM5LjYgLjEgMjAuMiAyLjIgMzEuMiA1LjJjMTAuNyAyLjggMjEuNi0zLjUgMjQuNS0xNC4ycy0zLjUtMjEuNi0xNC4yLTI0LjVjLTYuNS0xLjctMTMuNy0zLjQtMjEuMS00LjdMMjI4IDcyelwiXVxufTtcbmNvbnN0IGZhRGVtb2NyYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGVtb2NyYXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3NDdcIiwgXCJNNjQgMzJjMC04LjkgMy44LTIwLjkgNi4yLTI3LjNDNzEuMiAxLjggNzQgMCA3NyAwYzEuOSAwIDMuOCAuNyA1LjIgMi4xTDEyOCA0NS43IDE3My44IDIuMUMxNzUuMiAuNyAxNzcuMSAwIDE3OSAwYzMgMCA1LjggMS44IDYuOCA0LjdjMi40IDYuNSA2LjIgMTguNCA2LjIgMjcuM2MwIDI2LjUtMjEuOSA0Mi0yOS41IDQ2LjZsNzYuMiA3Mi42YzYgNS43IDEzLjkgOC44IDIyLjEgOC44TDQ4MCAxNjBsMzIgMGM0MC4zIDAgNzguMiAxOSAxMDIuNCA1MS4ybDE5LjIgMjUuNmMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhzLTM0LjIgNy43LTQ0LjgtNi40bC0xOS4yLTI1LjZjLTUuMy03LTExLjgtMTIuOC0xOS4yLTE3bDAgODcuNC0zNTIgMC00MC40LTk0LjNjLTMuOS05LjItMTUuMy0xMi42LTIzLjYtN2wtNDIuMSAyOGMtOS4xIDYuMS0xOS43IDkuMy0zMC43IDkuM2wtMiAwQzIzLjkgMjU2IDAgMjMyLjEgMCAyMDIuN2MwLTEyLjEgNC4xLTIzLjggMTEuNy0zMy4zTDg3LjYgNzQuNkM3OC4xIDY3LjQgNjQgNTMuMiA2NCAzMnpNNDQ4IDM1Mmw5NiAwIDAgNjQgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NC0xNjAgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0IDAtNjQgOTYgMCAxNjAgMHpNMjYwLjkgMjEwLjljLS45LTEuOC0yLjgtMi45LTQuOC0yLjlzLTMuOSAxLjEtNC44IDIuOWwtMTAuNSAyMC41LTIzLjUgMy4zYy0yIC4zLTMuNyAxLjYtNC4zIDMuNXMtLjEgMy45IDEuMyA1LjNsMTcgMTYtNCAyMi42Yy0uMyAxLjkgLjUgMy45IDIuMSA1czMuOCAxLjMgNS42IC40bDIxLTEwLjcgMjEgMTAuN2MxLjggLjkgNCAuOCA1LjYtLjRzMi41LTMuMSAyLjEtNWwtNC0yMi42IDE3LTE2YzEuNS0xLjQgMi0zLjQgMS4zLTUuM3MtMi4zLTMuMi00LjMtMy41bC0yMy41LTMuMy0xMC41LTIwLjV6TTM2OC4xIDIwOGMtMiAwLTMuOSAxLjEtNC44IDIuOWwtMTAuNSAyMC41LTIzLjUgMy4zYy0yIC4zLTMuNyAxLjYtNC4zIDMuNXMtLjEgMy45IDEuMyA1LjNsMTcgMTYtNCAyMi42Yy0uMyAxLjkgLjUgMy45IDIuMSA1czMuOCAxLjMgNS42IC40bDIxLTEwLjcgMjEgMTAuN2MxLjggLjkgNCAuOCA1LjYtLjRzMi41LTMuMSAyLjEtNWwtNC0yMi42IDE3LTE2YzEuNS0xLjQgMi0zLjQgMS40LTUuM3MtMi4zLTMuMi00LjMtMy41bC0yMy41LTMuMy0xMC41LTIwLjVjLS45LTEuOC0yLjgtMi45LTQuOC0yLjl6bTExNi44IDIuOWMtLjktMS44LTIuOC0yLjktNC44LTIuOXMtMy45IDEuMS00LjggMi45bC0xMC41IDIwLjUtMjMuNSAzLjNjLTIgLjMtMy43IDEuNi00LjMgMy41cy0uMSAzLjkgMS4zIDUuM2wxNyAxNi00IDIyLjZjLS4zIDEuOSAuNSAzLjkgMi4xIDVzMy44IDEuMyA1LjYgLjRsMjEtMTAuNyAyMSAxMC43YzEuOCAuOSA0IC44IDUuNi0uNHMyLjUtMy4xIDIuMS01bC00LTIyLjYgMTctMTZjMS41LTEuNCAyLTMuNCAxLjQtNS4zcy0yLjMtMy4yLTQuMy0zLjVsLTIzLjUtMy4zLTEwLjUtMjAuNXpcIl1cbn07XG5jb25zdCBmYVogPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneicsXG4gIGljb246IFszODQsIDUxMiwgWzEyMl0sIFwiNWFcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzMjAgMGMxMi40IDAgMjMuNyA3LjIgMjkgMTguNHMzLjYgMjQuNS00LjQgMzQuMUwxMDAuMyA0MTYgMzUyIDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTEyLjQgMC0yMy43LTcuMi0yOS0xOC40cy0zLjYtMjQuNSA0LjQtMzQuMUwyODMuNyA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbmNvbnN0IGZhUGVyc29uU2tpaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1za2lpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5OTc1LCBcInNraWluZ1wiXSwgXCJmN2M5XCIsIFwiTTM4MC43IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTIuNyAyNjguOWM2LjEtMTEuOCAyMC42LTE2LjMgMzIuNC0xMC4yTDIzMi43IDM2MS4zbDQ2LjItNjkuMi03NS4xLTc1LjFjLTE0LjYtMTQuNi0yMC40LTMzLjktMTguNC01Mi4xbDEwOC44IDUyIDM5LjMgMzkuM2MxNi4yIDE2LjIgMTguNyA0MS41IDYgNjAuNkwyODkuOCAzOTFsMTI4LjcgNjYuOGMxMy42IDcuMSAyOS44IDcuMiA0My42IC4zbDE1LjItNy42YzExLjktNS45IDI2LjMtMS4xIDMyLjIgMTAuN3MxLjEgMjYuMy0xMC43IDMyLjJsLTE1LjIgNy42Yy0yNy41IDEzLjctNTkuOSAxMy41LTg3LjItLjdMMTIuOSAzMDEuM0MxLjIgMjk1LjItMy40IDI4MC43IDIuNyAyNjguOXpNMTE4LjkgNjUuNkwxMzcgNzQuMmw4LjctMTcuNGM0LTcuOSAxMy42LTExLjEgMjEuNS03LjJzMTEuMSAxMy42IDcuMiAyMS41bC04LjUgMTYuOSA1NC43IDI2LjJjMS41LS43IDMuMS0xLjQgNC43LTIuMWw4My40LTMzLjRjMzQuMi0xMy43IDcyLjggNC4yIDg0LjUgMzkuMmwxNy4xIDUxLjIgNTIuMSAyNi4xYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlzLTI3LjEgMjIuMi00Mi45IDE0LjNsLTU4LjEtMjljLTExLjQtNS43LTIwLTE1LjctMjQuMS0yNy44bC01LjgtMTcuMy0yNy4zIDEyLjEtNi44IDMtNi43LTMuMkwxNTEuNSAxMTYuN2wtOS4yIDE4LjRjLTQgNy45LTEzLjYgMTEuMS0yMS41IDcuMnMtMTEuMS0xMy42LTcuMi0yMS41bDktMTgtMTcuNi04LjRjLTgtMy44LTExLjMtMTMuNC03LjUtMjEuM3MxMy40LTExLjMgMjEuMy03LjV6XCJdXG59O1xuY29uc3QgZmFTa2lpbmcgPSBmYVBlcnNvblNraWluZztcbmNvbnN0IGZhUm9hZExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTY3XCIsIFwiTTI4OCAzMmwtNzQuOCAwYy0yNy4xIDAtNTEuMyAxNy4xLTYwLjMgNDIuNkwzNS4xIDQwNy4yYy0yLjEgNS45LTMuMSAxMi0zLjEgMTguMkMzMiA0NTUuNSA1Ni41IDQ4MCA4Ni42IDQ4MEwyODggNDgwbDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0IDMyIDAgMC0xMjhjMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjQuNmMwLTU4LjMgNDQuNi0xMDYuMiAxMDEuNS0xMTEuNUw0ODcuMSA3NC42QzQ3OCA0OS4xIDQ1My45IDMyIDQyNi44IDMyTDM1MiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bTY0IDE5MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTc2IDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDgtNjQgMCAwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJsMCA0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG5jb25zdCBmYUEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYScsXG4gIGljb246IFszODQsIDUxMiwgWzk3XSwgXCI0MVwiLCBcIk0yMjEuNSA1MS43QzIxNi42IDM5LjggMjA0LjkgMzIgMTkyIDMycy0yNC42IDcuOC0yOS41IDE5LjdsLTEyMCAyODgtNDAgOTZjLTYuOCAxNi4zIC45IDM1IDE3LjIgNDEuOHMzNS0uOSA0MS44LTE3LjJMOTMuMyAzODRsMTk3LjMgMCAzMS44IDc2LjNjNi44IDE2LjMgMjUuNSAyNCA0MS44IDE3LjJzMjQtMjUuNSAxNy4yLTQxLjhsLTQwLTk2LTEyMC0yODh6TTI2NCAzMjBsLTE0NCAwIDcyLTE3Mi44TDI2NCAzMjB6XCJdXG59O1xuY29uc3QgZmFUZW1wZXJhdHVyZUFycm93RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJ0ZW1wZXJhdHVyZS1kb3duXCJdLCBcImUwM2ZcIiwgXCJNMTI4IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTY0LjVjMCAxNy4zIDcuMSAzMS45IDE1LjMgNDIuNUMyNDkuOCAzMzIuNiAyNTYgMzQ5LjUgMjU2IDM2OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTE4LjUgNi4yLTM1LjQgMTYuNy00OC45YzguMi0xMC42IDE1LjMtMjUuMiAxNS4zLTQyLjVMMTI4IDExMnpNMTc2IDBDMTE0LjEgMCA2NCA1MC4xIDY0IDExMmwwIDE2NC40YzAgLjEtLjEgLjMtLjIgLjZjLS4yIC42LS44IDEuNi0xLjcgMi44QzQzLjIgMzA0LjIgMzIgMzM0LjggMzIgMzY4YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDRjMC0zMy4yLTExLjItNjMuOC0zMC4xLTg4LjFjLS45LTEuMi0xLjUtMi4yLTEuNy0yLjhjLS4xLS4zLS4yLS41LS4yLS42TDI4OCAxMTJDMjg4IDUwLjEgMjM3LjkgMCAxNzYgMHptMCA0MTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuN2MwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDUwLjdjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OHptMzM2LTY0bC0zMiAwIDAtMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjg4LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzYgNiAxNC4xIDkuNCAyMi42IDkuNHMxNi42LTMuNCAyMi42LTkuNGw2NC02NGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOHpcIl1cbn07XG5jb25zdCBmYVRlbXBlcmF0dXJlRG93biA9IGZhVGVtcGVyYXR1cmVBcnJvd0Rvd247XG5jb25zdCBmYUZlYXRoZXJQb2ludGVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZlYXRoZXItcG9pbnRlZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZmVhdGhlci1hbHRcIl0sIFwiZjU2YlwiLCBcIk0yNzguNSAyMTUuNkwyMyA0NzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3NC44LTc0LjhjNy40IDQuNiAxNS4zIDguMiAyMy44IDEwLjVDMjAwLjMgNDUyLjggMjcwIDQ1NC41IDMzOCA0MDkuNGMxMi4yLTguMSA1LjgtMjUuNC04LjgtMjUuNGwtMTYuMSAwYy01LjEgMC05LjItNC4xLTkuMi05LjJjMC00LjEgMi43LTcuNiA2LjUtOC44bDk3LjctMjkuM2MzLjQtMSA2LjQtMy4xIDguNC02LjFjNC40LTYuNCA4LjYtMTIuOSAxMi42LTE5LjZjNi4yLTEwLjMtMS41LTIzLTEzLjUtMjNsLTM4LjYgMGMtNS4xIDAtOS4yLTQuMS05LjItOS4yYzAtNC4xIDIuNy03LjYgNi41LTguOGw4MC45LTI0LjNjNC42LTEuNCA4LjQtNC44IDEwLjItOS4zQzQ5NC41IDE2MyA1MDcuOCA4Ni4xIDUxMS45IDM2LjhjLjgtOS45LTMtMTkuNi0xMC0yNi42cy0xNi43LTEwLjgtMjYuNi0xMEMzOTEuNSA3IDIyOC41IDQwLjUgMTM3LjQgMTMxLjZDNTcuMyAyMTEuNyA1Ni43IDMwMi4zIDcxLjMgMzU2LjRjMi4xIDcuOSAxMiA5LjYgMTcuOCAzLjhMMjUzLjYgMTk1LjhjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBjNS40IDUuNCA2LjEgMTMuNiAyLjIgMTkuOHpcIl1cbn07XG5jb25zdCBmYUZlYXRoZXJBbHQgPSBmYUZlYXRoZXJQb2ludGVkO1xuY29uc3QgZmFQID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3AnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMTJdLCBcIjUwXCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOTYgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MHMtNzEuNiAxNjAtMTYwIDE2MGwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDAgMzIwIDAgOTZ6TTY0IDI4OGw5NiAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2TDY0IDk2bDAgMTkyelwiXVxufTtcbmNvbnN0IGZhU25vd2ZsYWtlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Nub3dmbGFrZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEwMDUyLCAxMDA1NF0sIFwiZjJkY1wiLCBcIk0yMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMwLjEgMTUtMTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC00OSA0OSAwIDcwLjMgNjEuNC0zNS44IDE3LjctNjYuMWMzLjQtMTIuOCAxNi42LTIwLjQgMjkuNC0xN3MyMC40IDE2LjYgMTcgMjkuNGwtNS4yIDE5LjMgMjMuNi0xMy44YzE1LjMtOC45IDM0LjktMy43IDQzLjggMTEuNXMzLjggMzQuOS0xMS41IDQzLjhsLTI1LjMgMTQuOCAyMS43IDUuOGMxMi44IDMuNCAyMC40IDE2LjYgMTcgMjkuNHMtMTYuNiAyMC40LTI5LjQgMTdsLTY3LjctMTguMUwyODcuNSAyNTZsNjAuOSAzNS41IDY3LjctMTguMWMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN3MtNC4yIDI2LTE3IDI5LjRsLTIxLjcgNS44IDI1LjMgMTQuOGMxNS4zIDguOSAyMC40IDI4LjUgMTEuNSA0My44cy0yOC41IDIwLjQtNDMuOCAxMS41bC0yMy42LTEzLjggNS4yIDE5LjNjMy40IDEyLjgtNC4yIDI2LTE3IDI5LjRzLTI2LTQuMi0yOS40LTE3bC0xNy43LTY2LjFMMjU2IDMxMS43bDAgNzAuMyA0OSA0OWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0xNS0xNSAwIDMwLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMC4xLTE1IDE1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ5LTQ5IDAtNzAuMy02MS40IDM1LjgtMTcuNyA2Ni4xYy0zLjQgMTIuOC0xNi42IDIwLjQtMjkuNCAxN3MtMjAuNC0xNi42LTE3LTI5LjRsNS4yLTE5LjNMNDguMSAzOTUuNmMtMTUuMyA4LjktMzQuOSAzLjctNDMuOC0xMS41cy0zLjctMzQuOSAxMS41LTQzLjhsMjUuMy0xNC44LTIxLjctNS44Yy0xMi44LTMuNC0yMC40LTE2LjYtMTctMjkuNHMxNi42LTIwLjQgMjkuNC0xN2w2Ny43IDE4LjFMMTYwLjUgMjU2IDk5LjYgMjIwLjUgMzEuOSAyMzguNmMtMTIuOCAzLjQtMjYtNC4yLTI5LjQtMTdzNC4yLTI2IDE3LTI5LjRsMjEuNy01LjhMMTUuOSAxNzEuNkMuNiAxNjIuNy00LjUgMTQzLjEgNC40IDEyNy45czI4LjUtMjAuNCA0My44LTExLjVsMjMuNiAxMy44LTUuMi0xOS4zYy0zLjQtMTIuOCA0LjItMjYgMTctMjkuNHMyNiA0LjIgMjkuNCAxN2wxNy43IDY2LjFMMTkyIDIwMC4zbDAtNzAuM0wxNDMgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxNSAxNUwxOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFOZXdzcGFwZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbmV3c3BhcGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjQwXSwgXCJmMWVhXCIsIFwiTTk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI3MmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2TDk2IDk2em02NCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRMMTg0IDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMjA4LThjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNjAgMzA0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMjU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTI1NiAwYy04LjggMC0xNiA3LjItMTYgMTZ6XCJdXG59O1xuY29uc3QgZmFSZWN0YW5nbGVBZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWN0YW5nbGUtYWQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImFkXCJdLCBcImY2NDFcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI5LjUgMTczLjNsNzIgMTQ0YzUuOSAxMS45IDEuMSAyNi4zLTEwLjcgMzIuMnMtMjYuMyAxLjEtMzIuMi0xMC43TDI1My4yIDMyOGwtOTAuMyAwLTUuNCAxMC43Yy01LjkgMTEuOS0yMC4zIDE2LjctMzIuMiAxMC43cy0xNi43LTIwLjMtMTAuNy0zMi4ybDcyLTE0NGM0LjEtOC4xIDEyLjQtMTMuMyAyMS41LTEzLjNzMTcuNCA1LjEgMjEuNSAxMy4zek0yMDggMjM3LjdMMTg2LjggMjgwbDQyLjMgMEwyMDggMjM3Ljd6TTM5MiAyNTZhMjQgMjQgMCAxIDAgMCA0OCAyNCAyNCAwIDEgMCAwLTQ4em0yNC00My45bDAtMjguMWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOTYgMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGMtNi42IDAtMTIuNi0yLjctMTctN2MtOS40IDQuNS0xOS45IDctMzEgN2MtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmM4LjQgMCAxNi41IDEuNCAyNCA0LjF6XCJdXG59O1xuY29uc3QgZmFBZCA9IGZhUmVjdGFuZ2xlQWQ7XG5jb25zdCBmYUNpcmNsZUFycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWFycm93LXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvdy1jaXJjbGUtcmlnaHRcIl0sIFwiZjBhOVwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwQTI1NiAyNTYgMCAxIDAgMCAyNTZ6TTI5NyAzODVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNzEtNzFMMTIwIDI4MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMTQuMSAwLTcxLTcxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMNDA5IDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyOTcgMzg1elwiXVxufTtcbmNvbnN0IGZhQXJyb3dDaXJjbGVSaWdodCA9IGZhQ2lyY2xlQXJyb3dSaWdodDtcbmNvbnN0IGZhRmlsdGVyQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsdGVyLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTE3YlwiLCBcIk0zLjkgMjIuOUMxMC41IDguOSAyNC41IDAgNDAgMEw0NzIgMGMxNS41IDAgMjkuNSA4LjkgMzYuMSAyMi45czQuNiAzMC41LTUuMiA0Mi41TDM5Ni40IDE5NS42QzMxNi4yIDIxMi4xIDI1NiAyODMgMjU2IDM2OGMwIDI3LjQgNi4zIDUzLjQgMTcuNSA3Ni41Yy0xLjYtLjgtMy4yLTEuOC00LjctMi45bC02NC00OGMtOC4xLTYtMTIuOC0xNS41LTEyLjgtMjUuNmwwLTc5LjFMOSA2NS4zQy0uNyA1My40LTIuOCAzNi44IDMuOSAyMi45ek00MzIgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptNTkuMyAxMDcuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwTDQzMiAzNDUuNGwtMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42TDQwOS40IDM2OGwtMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBMNDMyIDM5MC42bDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZMNDU0LjYgMzY4bDM2LjctMzYuN3pcIl1cbn07XG5jb25zdCBmYUxvY3VzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2N1c3QnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MjBcIiwgXCJNMzEyIDMyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2IDBjOTguNyAwIDE4MC42IDcxLjQgMTk3IDE2NS40Yy05LTMuNS0xOC44LTUuNC0yOS01LjRsLTY0LjIgMC00MS44LTk3LjVjLTMuNC03LjktMTAuOC0xMy40LTE5LjMtMTQuNHMtMTcgMi43LTIyLjEgOS42bC00MC45IDU1LjUtMjEuNy01MC43Yy0zLjMtNy44LTEwLjUtMTMuMi0xOC45LTE0LjNzLTE2LjcgMi4zLTIyIDguOWwtMjQwIDMwNGMtOC4yIDEwLjQtNi40IDI1LjUgNCAzMy43czI1LjUgNi40IDMzLjctNGw3OS40LTEwMC41IDQzIDE2LjQtNDAuNSA1NWMtNy45IDEwLjctNS42IDI1LjcgNS4xIDMzLjZzMjUuNyA1LjYgMzMuNi01LjFMMjE1LjEgNDAwbDc0LjUgMC0yOS4zIDQyLjNjLTcuNSAxMC45LTQuOCAyNS44IDYuMSAzMy40czI1LjggNC44IDMzLjQtNi4xTDM0OCA0MDBsODAuNCAwIDM4LjggNjcuOWM2LjYgMTEuNSAyMS4yIDE1LjUgMzIuNyA4LjlzMTUuNS0yMS4yIDguOS0zMi43TDQ4My42IDQwMGwxMi40IDBjNDQuMSAwIDc5LjgtMzUuNyA4MC03OS43YzAtLjEgMC0uMiAwLS4zbDAtNDBDNTc2IDE0MyA0NjUgMzIgMzI4IDMybC0xNiAwem01MC41IDE2OGwxNy4xIDQwTDMzMyAyNDBsMjkuNS00MHptLTg3LjcgMzguMWwtMS40IDEuOS00OC4yIDAgMzIuNy00MS41IDE2LjkgMzkuNXpNODguOCAyNDBDNTcuNCAyNDAgMzIgMjY1LjQgMzIgMjk2LjhjMCAxNS41IDYuMyAzMCAxNi45IDQwLjRMMTI2LjcgMjQwbC0zNy45IDB6TTQ5NiAyODhhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyelwiXVxufTtcbmNvbnN0IGZhU29ydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzb3J0JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJ1bnNvcnRlZFwiXSwgXCJmMGRjXCIsIFwiTTEzNy40IDQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOXMtMTYuNiAxOS44LTI5LjYgMTkuOEwzMiAyMjRjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDEyOC0xMjh6bTAgNDI5LjNsLTEyOC0xMjhjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45czE2LjYtMTkuOCAyOS42LTE5LjhsMjU2IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOWwtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDB6XCJdXG59O1xuY29uc3QgZmFVbnNvcnRlZCA9IGZhU29ydDtcbmNvbnN0IGZhTGlzdE9sID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpc3Qtb2wnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxpc3QtMS0yXCIsIFwibGlzdC1udW1lcmljXCJdLCBcImYwY2JcIiwgXCJNMjQgNTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDEyMCAxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC05Ni04IDBDMzQuNyA4MCAyNCA2OS4zIDI0IDU2ek04Ni43IDM0MS4yYy02LjUtNy40LTE4LjMtNi45LTI0IDEuMkw1MS41IDM1Ny45Yy03LjcgMTAuOC0yMi43IDEzLjMtMzMuNSA1LjZzLTEzLjMtMjIuNy01LjYtMzMuNWwxMS4xLTE1LjZjMjMuNy0zMy4yIDcyLjMtMzUuNiA5OS4yLTQuOWMyMS4zIDI0LjQgMjAuOCA2MC45LTEuMSA4NC43TDg2LjggNDMybDMzLjIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODggMGMtOS41IDAtMTguMi01LjYtMjItMTQuNHMtMi4xLTE4LjkgNC4zLTI1LjlsNzItNzhjNS4zLTUuOCA1LjQtMTQuNiAuMy0yMC41ek0yMjQgNjRsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDE2MGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwbDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYUxpc3QxMiA9IGZhTGlzdE9sO1xuY29uc3QgZmFMaXN0TnVtZXJpYyA9IGZhTGlzdE9sO1xuY29uc3QgZmFQZXJzb25EcmVzc0J1cnN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1kcmVzcy1idXJzdCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU0NFwiLCBcIk01MjggNDhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMzkwLjIgMzg0bDE3LjggMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAxNiAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDE3LjggMGMxMC45IDAgMTguNi0xMC43IDE1LjItMjEuMUw1NDYuNyAyNDguMWwzMy45IDU2LjNjOS4xIDE1LjEgMjguOCAyMCA0My45IDEwLjlzMjAtMjguOCAxMC45LTQzLjlsLTUzLjYtODkuMmMtMjAuMi0zMy43LTU2LjctNTQuMy05Ni01NC4zbC0xMS42IDBjLTM5LjMgMC03NS43IDIwLjYtOTYgNTQuM2wtNTMuNiA4OS4yYy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45bDMzLjktNTYuM0wzNzUgMzYyLjljLTMuNSAxMC40IDQuMyAyMS4xIDE1LjIgMjEuMXpNMTkwLjkgMTguMUMxODguNCAxMiAxODIuNiA4IDE3NiA4cy0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0TDU1LjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjFMMTAuOSAyMDYuNGMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMkw5MC42IDMyN2MtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNkwxNzYgMjg2LjFsNTguNiA1My45YzQuOCA0LjQgMTEuOSA1LjUgMTcuOCAyLjZzOS41LTkgOS0xNS41bC01LjYtNzkuNCA1MC41LTcuOCAyNC40LTQwLjUtNTUuMi0zOEwzMTUgOTIuMmMzLjMtNS43IDIuNy0xMi44LTEuNC0xNy45cy0xMC45LTcuMi0xNy4yLTUuM0wyMjAuMyA5Mi4xbC0yOS40LTc0elwiXVxufTtcbmNvbnN0IGZhTW9uZXlDaGVja0RvbGxhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1jaGVjay1kb2xsYXInLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcIm1vbmV5LWNoZWNrLWFsdFwiXSwgXCJmNTNkXCIsIFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek0yNzIgMTkybDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0yMjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNMjU2IDMwNGMwLTguOCA3LjItMTYgMTYtMTZsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTIyNCAwYy04LjggMC0xNi03LjItMTYtMTZ6TTE2NCAxNTJsMCAxMy45YzcuNSAxLjIgMTQuNiAyLjkgMjEuMSA0LjdjMTAuNyAyLjggMTcgMTMuOCAxNC4yIDI0LjVzLTEzLjggMTctMjQuNSAxNC4yYy0xMS0yLjktMjEuNi01LTMxLjItNS4yYy03LjktLjEtMTYgMS44LTIxLjUgNWMtNC44IDIuOC02LjIgNS42LTYuMiA5LjNjMCAxLjggLjEgMy41IDUuMyA2LjdjNi4zIDMuOCAxNS41IDYuNyAyOC4zIDEwLjVsLjcgLjJjMTEuMiAzLjQgMjUuNiA3LjcgMzcuMSAxNWMxMi45IDguMSAyNC4zIDIxLjMgMjQuNiA0MS42Yy4zIDIwLjktMTAuNSAzNi4xLTI0LjggNDVjLTcuMiA0LjUtMTUuMiA3LjMtMjMuMiA5bDAgMTMuOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xNC42Yy0xMC4zLTIuMi0yMC01LjUtMjguMi04LjRjMCAwIDAgMCAwIDBzMCAwIDAgMGMtMi4xLS43LTQuMS0xLjQtNi4xLTIuMWMtMTAuNS0zLjUtMTYuMS0xNC44LTEyLjYtMjUuM3MxNC44LTE2LjEgMjUuMy0xMi42YzIuNSAuOCA0LjkgMS43IDcuMiAyLjRjMTMuNiA0LjYgMjQgOC4xIDM1LjEgOC41YzguNiAuMyAxNi41LTEuNiAyMS40LTQuN2M0LjEtMi41IDYtNS41IDUuOS0xMC41YzAtMi45LS44LTUtNS45LTguMmMtNi4zLTQtMTUuNC02LjktMjgtMTAuN2wtMS43LS41Yy0xMC45LTMuMy0yNC42LTcuNC0zNS42LTE0Yy0xMi43LTcuNy0yNC42LTIwLjUtMjQuNy00MC43Yy0uMS0yMS4xIDExLjgtMzUuNyAyNS44LTQzLjljNi45LTQuMSAxNC41LTYuOCAyMi4yLTguNWwwLTE0YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwelwiXVxufTtcbmNvbnN0IGZhTW9uZXlDaGVja0FsdCA9IGZhTW9uZXlDaGVja0RvbGxhcjtcbmNvbnN0IGZhVmVjdG9yU3F1YXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZlY3Rvci1zcXVhcmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImY1Y2JcIiwgXCJNMzY4IDgwbDMyIDAgMCAzMi0zMiAwIDAtMzJ6TTM1MiAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJMMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwwIDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDE5MiAwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTE5MmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwek05NiAxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMTkyIDBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybC0xOTIgMGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTE5MnpNNDggNDAwbDMyIDAgMCAzMi0zMiAwIDAtMzJ6bTMyMCAzMmwwLTMyIDMyIDAgMCAzMi0zMiAwek00OCAxMTJsMC0zMiAzMiAwIDAgMzItMzIgMHpcIl1cbn07XG5jb25zdCBmYUJyZWFkU2xpY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJlYWQtc2xpY2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ZWNcIiwgXCJNMjU2IDMyQzE5MiAzMiAwIDY0IDAgMTkyYzAgMzUuMyAyOC43IDY0IDY0IDY0VjQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjU2YzM1LjMgMCA2NC0yOC43IDY0LTY0QzUxMiA2NCAzMjAgMzIgMjU2IDMyelwiXVxufTtcbmNvbnN0IGZhTGFuZ3VhZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFuZ3VhZ2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYxYWJcIiwgXCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTkyIDAgNDggMCAxNiAwIDI1NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yNTYgMC0xNiAwLTQ4IDBMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMzIwIDBsMCAyNTYgMjU2IDAgMC0yNTYtMjU2IDB6TTE3OC4zIDE3NS45Yy0zLjItNy4yLTEwLjQtMTEuOS0xOC4zLTExLjlzLTE1LjEgNC43LTE4LjMgMTEuOWwtNjQgMTQ0Yy00LjUgMTAuMSAuMSAyMS45IDEwLjIgMjYuNHMyMS45LS4xIDI2LjQtMTAuMmw4LjktMjAuMSA3My42IDAgOC45IDIwLjFjNC41IDEwLjEgMTYuMyAxNC42IDI2LjQgMTAuMnMxNC42LTE2LjMgMTAuMi0yNi40bC02NC0xNDR6TTE2MCAyMzMuMkwxNzkgMjc2bC0zOCAwIDE5LTQyLjh6TTQ0OCAxNjRjMTEgMCAyMCA5IDIwIDIwbDAgNCA0NCAwIDE2IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC0yIDAtMS42IDQuNWMtOC45IDI0LjQtMjIuNCA0Ni42LTM5LjYgNjUuNGMuOSAuNiAxLjggMS4xIDIuNyAxLjZsMTguOSAxMS4zYzkuNSA1LjcgMTIuNSAxOCA2LjkgMjcuNHMtMTggMTIuNS0yNy40IDYuOWwtMTguOS0xMS4zYy00LjUtMi43LTguOC01LjUtMTMuMS04LjVjLTEwLjYgNy41LTIxLjkgMTQtMzQgMTkuNGwtMy42IDEuNmMtMTAuMSA0LjUtMjEuOS0uMS0yNi40LTEwLjJzLjEtMjEuOSAxMC4yLTI2LjRsMy42LTEuNmM2LjQtMi45IDEyLjYtNi4xIDE4LjUtOS44bC0xMi4yLTEyLjJjLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMGwxNC42IDE0LjYgLjUgLjVjMTIuNC0xMy4xIDIyLjUtMjguMyAyOS44LTQ1TDQ0OCAyMjhsLTcyIDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDUyIDAgMC00YzAtMTEgOS0yMCAyMC0yMHpcIl1cbn07XG5jb25zdCBmYUZhY2VLaXNzV2lua0hlYXJ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2Uta2lzcy13aW5rLWhlYXJ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM2LCBcImtpc3Mtd2luay1oZWFydFwiXSwgXCJmNTk4XCIsIFwiTTQ5OCAzMzkuN2M5LjEtMjYuMiAxNC01NC40IDE0LTgzLjdDNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMmMzNS40IDAgNjkuMS03LjIgOTkuNy0yMC4yYy00LjgtNS41LTguNS0xMi4yLTEwLjQtMTkuN2wtMjIuOS04OS4zYy0xMC0zOSAxMS44LTgwLjkgNTEuOC05Mi4xYzM3LjItMTAuNCA3My44IDEwLjEgODcuNSA0NGMxMi43LTEuNiAyNS4xIC40IDM2LjIgNXpNMjk2IDMzMmMwIDYuOS0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRjLTIuNyAxLjUtNS43IDMtOC43IDQuM2MzLjEgMS4zIDYgMi43IDguNyA0LjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3MtMy4xIDEzLjItNy4zIDE4LjNjLTQuMyA1LjItMTAuMSA5LjctMTYuNyAxMy40QzI1OC43IDQ0My4xIDI0MS40IDQ0OCAyMjQgNDQ4Yy0zLjYgMC02LjgtMi41LTcuNy02cy42LTcuMiAzLjgtOWMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBjMCAwIDAgMCAwIDBsLjItLjFjLjItLjEgLjUtLjMgLjktLjVjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFsLS42LS40LS4zLS4yLS4yLS4xYzAgMCAwIDAgMCAwYzAgMCAwIDAgMCAwczAgMCAwIDBjLTIuNS0xLjQtNC4xLTQuMS00LjEtN3MxLjYtNS42IDQuMS03YzAgMCAwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwYzAgMCAwIDAgMCAwbC4yLS4xYy4yLS4xIC41LS4zIC45LS41Yy44LS41IDItMS4yIDMuNC0yLjFjMi44LTEuOSA2LjUtNC41IDEwLjItNy42YzMuNy0zLjEgNy4yLTYuNiA5LjYtMTAuMWMyLjUtMy41IDMuNS02LjQgMy41LTguNnMtMS01LTMuNS04LjZjLTIuNS0zLjUtNS45LTYuOS05LjYtMTAuMWMtMy43LTMuMS03LjQtNS43LTEwLjItNy42Yy0xLjQtLjktMi42LTEuNi0zLjQtMi4xYy0uNC0uMi0uNy0uNC0uOS0uNWwtLjItLjFjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMGMtMy4yLTEuOC00LjctNS41LTMuOC05czQuMS02IDcuNy02YzE3LjQgMCAzNC43IDQuOSA0Ny45IDEyLjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3pNMTc2LjQgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTk0LjggNTcuNmMtMTcuNi0yMy41LTUyLjgtMjMuNS03MC40IDBjLTUuMyA3LjEtMTUuMyA4LjUtMjIuNCAzLjJzLTguNS0xNS4zLTMuMi0yMi40YzMwLjQtNDAuNSA5MS4yLTQwLjUgMTIxLjYgMGM1LjMgNy4xIDMuOSAxNy4xLTMuMiAyMi40cy0xNy4xIDMuOS0yMi40LTMuMnpNNDM0IDM1Mi4zYy02LTIzLjItMjguOC0zNy01MS4xLTMwLjhzLTM1LjQgMzAuMS0yOS41IDUzLjRsMjIuOSA4OS4zYzIuMiA4LjcgMTEuMiAxMy45IDE5LjggMTEuNGw4NC45LTIzLjhjMjIuMi02LjIgMzUuNC0zMC4xIDI5LjUtNTMuNHMtMjguOC0zNy01MS4xLTMwLjhsLTIwLjIgNS42LTUuNC0yMXpcIl1cbn07XG5jb25zdCBmYUtpc3NXaW5rSGVhcnQgPSBmYUZhY2VLaXNzV2lua0hlYXJ0O1xuY29uc3QgZmFGaWx0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsdGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMGIwXCIsIFwiTTMuOSA1NC45QzEwLjUgNDAuOSAyNC41IDMyIDQwIDMybDQzMiAwYzE1LjUgMCAyOS41IDguOSAzNi4xIDIyLjlzNC42IDMwLjUtNS4yIDQyLjVMMzIwIDMyMC45IDMyMCA0NDhjMCAxMi4xLTYuOCAyMy4yLTE3LjcgMjguNnMtMjMuOCA0LjMtMzMuNS0zbC02NC00OGMtOC4xLTYtMTIuOC0xNS41LTEyLjgtMjUuNmwwLTc5LjFMOSA5Ny4zQy0uNyA4NS40LTIuOCA2OC44IDMuOSA1NC45elwiXVxufTtcbmNvbnN0IGZhUXVlc3Rpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncXVlc3Rpb24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMDA2NywgMTAwNjgsIDYxNzM2XSwgXCIzZlwiLCBcIk04MCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMuNmMwIDIxLjgtMTEuMSA0Mi4xLTI5LjQgNTMuOGwtNDIuMiAyNy4xYy0yNS4yIDE2LjItNDAuNCA0NC4xLTQwLjQgNzRsMCAxLjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEuNGMwLTguMiA0LjItMTUuOCAxMS0yMC4ybDQyLjItMjcuMWMzNi42LTIzLjYgNTguOC02NC4xIDU4LjgtMTA3LjdsMC0zLjZjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTMyIDBDNzMuMyAzMiAxNiA4OS4zIDE2IDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem04MCAzMjBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwelwiXVxufTtcbmNvbnN0IGZhRmlsZVNpZ25hdHVyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXNpZ25hdHVyZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjU3M1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5LjNjLTIuNyAxLjEtNS40IDItOC4yIDIuN2wtNjAuMSAxNWMtMyAuNy02IDEuMi05IDEuNGMtLjkgLjEtMS44IC4yLTIuNyAuMmwtNjQgMGMtNi4xIDAtMTEuNi0zLjQtMTQuMy04LjhsLTguOC0xNy43Yy0xLjctMy40LTUuMS01LjUtOC44LTUuNXMtNy4yIDIuMS04LjggNS41bC04LjggMTcuN2MtMi45IDUuOS05LjIgOS40LTE1LjcgOC44cy0xMi4xLTUuMS0xMy45LTExLjNMMTQ0IDM4MWwtOS44IDMyLjhjLTYuMSAyMC4zLTI0LjggMzQuMi00NiAzNC4yTDgwIDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4LjIgMGM3LjEgMCAxMy4zLTQuNiAxNS4zLTExLjRsMTQuOS00OS41YzMuNC0xMS4zIDEzLjgtMTkuMSAyNS42LTE5LjFzMjIuMiA3LjggMjUuNiAxOS4xbDExLjYgMzguNmM3LjQtNi4yIDE2LjgtOS43IDI2LjgtOS43YzE1LjkgMCAzMC40IDkgMzcuNSAyMy4ybDQuNCA4LjggOC45IDBjLTMuMS04LjgtMy43LTE4LjQtMS40LTI3LjhsMTUtNjAuMWMyLjgtMTEuMyA4LjYtMjEuNSAxNi44LTI5LjdMMzg0IDIwMy42bDAtNDMuNi0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMjI0IDAgNjQgMHpNMjU2IDBsMCAxMjggMTI4IDBMMjU2IDB6TTU0OS44IDEzOS43Yy0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMGwtMjkuNCAyOS40IDcxIDcxIDI5LjQtMjkuNGMxNS42LTE1LjYgMTUuNi00MC45IDAtNTYuNmwtMTQuNC0xNC40ek0zMTEuOSAzMjFjLTQuMSA0LjEtNyA5LjItOC40IDE0LjlsLTE1IDYwLjFjLTEuNCA1LjUgLjIgMTEuMiA0LjIgMTUuMnM5LjcgNS42IDE1LjIgNC4ybDYwLjEtMTVjNS42LTEuNCAxMC44LTQuMyAxNC45LTguNEw1MTIuMSAyNjIuN2wtNzEtNzFMMzExLjkgMzIxelwiXVxufTtcbmNvbnN0IGZhVXBEb3duTGVmdFJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VwLWRvd24tbGVmdC1yaWdodCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYXJyb3dzLWFsdFwiXSwgXCJmMGIyXCIsIFwiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOXMxNi42IDE5LjggMjkuNiAxOS44bDMyIDAgMCA5Ni05NiAwIDAtMzJjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42bDAtMzIgOTYgMCAwIDk2LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45cy0xNi42LTE5LjgtMjkuNi0xOS44bC0zMiAwIDAtOTYgOTYgMCAwIDMyYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXMtMTkuOCAxNi42LTE5LjggMjkuNmwwIDMyLTk2IDAgMC05NiAzMiAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0elwiXVxufTtcbmNvbnN0IGZhQXJyb3dzQWx0ID0gZmFVcERvd25MZWZ0UmlnaHQ7XG5jb25zdCBmYUhvdXNlQ2hpbW5leVVzZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY2hpbW5leS11c2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDY1XCIsIFwiTTU0My44IDI4Ny42YzE3IDAgMzItMTQgMzItMzIuMWMxLTktMy0xNy0xMS0yNEw1MTIgMTg1bDAtMTIxYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDM2LjdMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFsMzIgMCAwIDE2MC40YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMC40IDBjMzUuNSAwIDY0LjItMjguOCA2NC02NC4zbC0uNy0xNjAuMiAzMiAwek0yODggMTYwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0xNzYgNDAwYzAtNDQuMiAzNS44LTgwIDgwLTgwbDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbmNvbnN0IGZhSGFuZEhvbGRpbmdIZWFydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWhvbGRpbmctaGVhcnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0YmVcIiwgXCJNMTYzLjkgMTM2LjljLTI5LjQtMjkuOC0yOS40LTc4LjIgMC0xMDhzNzctMjkuOCAxMDYuNCAwbDE3LjcgMTggMTcuNy0xOGMyOS40LTI5LjggNzctMjkuOCAxMDYuNCAwczI5LjQgNzguMiAwIDEwOEwzMTAuNSAyNDAuMWMtNi4yIDYuMy0xNC4zIDkuNC0yMi41IDkuNHMtMTYuMy0zLjEtMjIuNS05LjRMMTYzLjkgMTM2Ljl6TTU2OC4yIDMzNi4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVMMTkyIDUxMiAzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzYuOCAwIDQ0LjktMzZjMjIuNy0xOC4yIDUwLjktMjggODAtMjhsNzguMyAwIDE2IDAgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDEyMC42IDAgMTE5LjctODguMmMxNy44LTEzLjEgNDIuOC05LjMgNTUuOSA4LjV6TTE5My42IDM4NGMwIDAgMCAwIDAgMGwtLjkgMGMuMyAwIC42IDAgLjkgMHpcIl1cbn07XG5jb25zdCBmYVB1enpsZVBpZWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3B1enpsZS1waWVjZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTUxM10sIFwiZjEyZVwiLCBcIk0xOTIgMTA0LjhjMC05LjItNS44LTE3LjMtMTMuMi0yMi44QzE2Ny4yIDczLjMgMTYwIDYxLjMgMTYwIDQ4YzAtMjYuNSAyOC43LTQ4IDY0LTQ4czY0IDIxLjUgNjQgNDhjMCAxMy4zLTcuMiAyNS4zLTE4LjggMzRjLTcuNCA1LjUtMTMuMiAxMy42LTEzLjIgMjIuOGMwIDEyLjggMTAuNCAyMy4yIDIzLjIgMjMuMmw1Ni44IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA1Ni44YzAgMTIuOCAxMC40IDIzLjIgMjMuMiAyMy4yYzkuMiAwIDE3LjMtNS44IDIyLjgtMTMuMmM4LjctMTEuNiAyMC43LTE4LjggMzQtMTguOGMyNi41IDAgNDggMjguNyA0OCA2NHMtMjEuNSA2NC00OCA2NGMtMTMuMyAwLTI1LjMtNy4yLTM0LTE4LjhjLTUuNS03LjQtMTMuNi0xMy4yLTIyLjgtMTMuMmMtMTIuOCAwLTIzLjIgMTAuNC0yMy4yIDIzLjJMMzg0IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNTYuOCAwYy0xMi44IDAtMjMuMi0xMC40LTIzLjItMjMuMmMwLTkuMiA1LjgtMTcuMyAxMy4yLTIyLjhjMTEuNi04LjcgMTguOC0yMC43IDE4LjgtMzRjMC0yNi41LTI4LjctNDgtNjQtNDhzLTY0IDIxLjUtNjQgNDhjMCAxMy4zIDcuMiAyNS4zIDE4LjggMzRjNy40IDUuNSAxMy4yIDEzLjYgMTMuMiAyMi44YzAgMTIuOC0xMC40IDIzLjItMjMuMiAyMy4yTDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzNDMuMkMwIDMzMC40IDEwLjQgMzIwIDIzLjIgMzIwYzkuMiAwIDE3LjMgNS44IDIyLjggMTMuMkM1NC43IDM0NC44IDY2LjcgMzUyIDgwIDM1MmMyNi41IDAgNDgtMjguNyA0OC02NHMtMjEuNS02NC00OC02NGMtMTMuMyAwLTI1LjMgNy4yLTM0IDE4LjhDNDAuNSAyNTAuMiAzMi40IDI1NiAyMy4yIDI1NkMxMC40IDI1NiAwIDI0NS42IDAgMjMyLjhMMCAxNzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTIwLjggMGMxMi44IDAgMjMuMi0xMC40IDIzLjItMjMuMnpcIl1cbn07XG5jb25zdCBmYU1vbmV5Q2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1M2NcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTQ4IDE2MGwxNjAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6TTk2IDMzNmMwLTguOCA3LjItMTYgMTYtMTZsMzUyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTM1MiAwYy04LjggMC0xNi03LjItMTYtMTZ6TTM3NiAxNjBsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0elwiXVxufTtcbmNvbnN0IGZhU3RhckhhbGZTdHJva2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Rhci1oYWxmLXN0cm9rZScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic3Rhci1oYWxmLWFsdFwiXSwgXCJmNWMwXCIsIFwiTTI4OCAzNzYuNGwuMS0uMSAyNi40IDE0LjEgODUuMiA0NS41LTE2LjUtOTcuNi00LjgtMjguNyAyMC43LTIwLjUgNzAuMS02OS4zLTk2LjEtMTQuMi0yOS4zLTQuMy0xMi45LTI2LjZMMjg4LjEgODYuOWwtLjEgLjMgMCAyODkuMnptMTc1LjEgOTguM2MyIDEyLTMgMjQuMi0xMi45IDMxLjNzLTIzIDgtMzMuOCAyLjNMMjg4LjEgNDM5LjggMTU5LjggNTA4LjNDMTQ5IDUxNCAxMzUuOSA1MTMuMSAxMjYgNTA2cy0xNC45LTE5LjMtMTIuOS0zMS4zTDEzNy44IDMyOSAzMy42IDIyNS45Yy04LjYtOC41LTExLjctMjEuMi03LjktMzIuN3MxMy43LTE5LjkgMjUuNy0yMS43TDE5NSAxNTAuMyAyNTkuNCAxOGM1LjQtMTEgMTYuNS0xOCAyOC44LTE4czIzLjQgNyAyOC44IDE4bDY0LjMgMTMyLjMgMTQzLjYgMjEuMmMxMiAxLjggMjIgMTAuMiAyNS43IDIxLjdzLjcgMjQuMi03LjkgMzIuN0w0MzguNSAzMjlsMjQuNiAxNDUuN3pcIl1cbn07XG5jb25zdCBmYVN0YXJIYWxmQWx0ID0gZmFTdGFySGFsZlN0cm9rZTtcbmNvbnN0IGZhQ29kZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb2RlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmMTIxXCIsIFwiTTM5Mi44IDEuMmMtMTctNC45LTM0LjcgNS0zOS42IDIybC0xMjggNDQ4Yy00LjkgMTcgNSAzNC43IDIyIDM5LjZzMzQuNy01IDM5LjYtMjJsMTI4LTQ0OGM0LjktMTctNS0zNC43LTIyLTM5LjZ6bTgwLjYgMTIwLjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zTDU2Mi43IDI1NmwtODkuNCA4OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDExMi0xMTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTExMi0xMTJjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwem0tMzA2LjcgMGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTExMiAxMTJjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDExMiAxMTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1Nmw4OS40LTg5LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xuY29uc3QgZmFXaGlza2V5R2xhc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2hpc2tleS1nbGFzcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTM0NywgXCJnbGFzcy13aGlza2V5XCJdLCBcImY3YTBcIiwgXCJNMzIgMzJjLTkuMyAwLTE4LjEgNC0yNC4yIDExLjFTLTEgNTkuNCAuMyA2OC42bDUwIDM0Mi45YzUuNyAzOS4zIDM5LjQgNjguNSA3OS4yIDY4LjVsMjUzIDBjMzkuNyAwIDczLjQtMjkuMSA3OS4yLTY4LjVsNTAtMzQyLjljMS4zLTkuMi0xLjQtMTguNS03LjUtMjUuNVM0ODkuMyAzMiA0ODAgMzJMMzIgMzJ6TTg3LjcgMjI0TDY5IDk2bDM3NCAwTDQyNC4zIDIyNCA4Ny43IDIyNHpcIl1cbn07XG5jb25zdCBmYUdsYXNzV2hpc2tleSA9IGZhV2hpc2tleUdsYXNzO1xuY29uc3QgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLWNpcmNsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRkM1wiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDk2IDBjMTUuMSAwIDI4LjUtNi45IDM3LjMtMTcuOEMzNDAuNCA0NjIuMiAzMjAgNDE3LjUgMzIwIDM2OGMwLTU0LjcgMjQuOS0xMDMuNSA2NC0xMzUuOEwzODQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTExMi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek04MCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wLTE0NGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYU1hZ25pZnlpbmdHbGFzc0NoYXJ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtY2hhcnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1MjJcIiwgXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHptLTMxMiA4bDAgNjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MC05NmwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MCA2NGwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC05NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHpcIl1cbn07XG5jb25zdCBmYUFycm93VXBSaWdodEZyb21TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImV4dGVybmFsLWxpbmtcIl0sIFwiZjA4ZVwiLCBcIk0zMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4Mi43IDBMMjAxLjQgMjY1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMNDQ4IDEwOS4zbDAgODIuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyMCAwek04MCAzMkMzNS44IDMyIDAgNjcuOCAwIDExMkwwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzMjAgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTExMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZMODAgNDQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC0zMjBjMC04LjggNy4yLTE2IDE2LTE2bDExMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDMyelwiXVxufTtcbmNvbnN0IGZhRXh0ZXJuYWxMaW5rID0gZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlO1xuY29uc3QgZmFDdWJlc1N0YWNrZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3ViZXMtc3RhY2tlZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTRlNlwiLCBcIk0xOTIgNjRsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04Mi43IDIwN2MtMTUuMyA4LjgtMjAuNSAyOC40LTExLjcgNDMuN2wzMiA1NS40YzguOCAxNS4zIDI4LjQgMjAuNSA0My43IDExLjdsNTUuNC0zMmMxNS4zLTguOCAyMC41LTI4LjQgMTEuNy00My43bC0zMi01NS40Yy04LjgtMTUuMy0yOC40LTIwLjUtNDMuNy0xMS43TDgyLjcgMjA3ek0yODggMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMHptNjQgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMHpNMTYwIDM4NGwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTMyIDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDB6XCJdXG59O1xuY29uc3QgZmFXb25TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dvbi1zaWduJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbODM2MSwgXCJrcndcIiwgXCJ3b25cIl0sIFwiZjE1OVwiLCBcIk02Mi40IDUzLjlDNTYuOCAzNy4xIDM4LjYgMjguMSAyMS45IDMzLjZTLTMuOSA1Ny40IDEuNiA3NC4xTDUxLjYgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0MC45IDAgNTYuNyAxNzAuMWM0LjUgMTMuNSAxNy40IDIyLjQgMzEuNiAyMS45czI2LjQtMTAuNCAyOS44LTI0LjJMMjMzIDI4OGw0NiAwTDMyMSA0NTUuOGMzLjQgMTMuOCAxNS42IDIzLjcgMjkuOCAyNC4yczI3LjEtOC40IDMxLjYtMjEuOUw0MzkuMSAyODhsNDAuOSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOS42IDAgNTAtMTQ5LjljNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJMMzkyLjkgMjI0bC02NCAwTDI4NyA1Ni4yQzI4My41IDQyIDI3MC43IDMyIDI1NiAzMnMtMjcuNSAxMC0zMSAyNC4yTDE4MyAyMjRsLTY0IDBMNjIuNCA1My45em03OCAyMzQuMWwyNi42IDAtMTEuNCA0NS42TDE0MC40IDI4OHpNMjQ5IDIyNGw3LTI4LjEgNyAyOC4xLTE0IDB6bTk2IDY0bDI2LjYgMC0xNS4yIDQ1LjZMMzQ1IDI4OHpcIl1cbn07XG5jb25zdCBmYUtydyA9IGZhV29uU2lnbjtcbmNvbnN0IGZhV29uID0gZmFXb25TaWduO1xuY29uc3QgZmFWaXJ1c0NvdmlkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpcnVzLWNvdmlkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGE4XCIsIFwiTTE5MiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDAgMzMuNmMzMC43IDQuMiA1OC44IDE2LjMgODIuMyAzNC4xTDM4Ni4xIDkyIDM3NC44IDgwLjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni42IDU2LjZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw0MjAgMTI1LjlsLTIzLjggMjMuOGMxNy45IDIzLjUgMjkuOSA1MS43IDM0LjEgODIuM2wzMy42IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNi0zMy42IDBjLTQuMiAzMC43LTE2LjMgNTguOC0zNC4xIDgyLjNMNDIwIDM4Ni4xbDExLjMtMTEuM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU2LjYgNTYuNmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwzODYuMSA0MjBsLTIzLjgtMjMuOGMtMjMuNSAxNy45LTUxLjcgMjkuOS04Mi4zIDM0LjFsMCAzMy42IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMCAwLTMzLjZjLTMwLjctNC4yLTU4LjgtMTYuMy04Mi4zLTM0LjFMMTI1LjkgNDIwbDExLjMgMTEuM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDQ2LjcgNDA4LjdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEw5MiAzODYuMWwyMy44LTIzLjhDOTcuOSAzMzguOCA4NS44IDMxMC43IDgxLjYgMjgwTDQ4IDI4MGwwIDE2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtODBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE2IDMzLjYgMGM0LjItMzAuNyAxNi4zLTU4LjggMzQuMS04Mi4zTDkyIDEyNS45IDgwLjYgMTM3LjJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTYuNi01Ni42YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUwxMjUuOSA5MmwyMy44IDIzLjhjMjMuNS0xNy45IDUxLjctMjkuOSA4Mi4zLTM0LjFMMjMyIDQ4bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptNDggMjAwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTY0IDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xuY29uc3QgZmFBdXN0cmFsU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhdXN0cmFsLXNpZ24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwYTlcIiwgXCJNMjUzLjUgNTEuN0MyNDguNiAzOS44IDIzNi45IDMyIDIyNCAzMnMtMjQuNiA3LjgtMjkuNSAxOS43TDEyMi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMEw4Mi43IDMyMCAzMiAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjQgMEwzNC41IDQzNS43Yy02LjggMTYuMyAuOSAzNSAxNy4yIDQxLjhzMzUtLjkgNDEuOC0xNy4yTDEyNS4zIDM4NGwxOTcuMyAwIDMxLjggNzYuM2M2LjggMTYuMyAyNS41IDI0IDQxLjggMTcuMnMyNC0yNS41IDE3LjItNDEuOEwzOTIgMzg0bDI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUwLjcgMEwzNTIgMjg4bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTkwLjcgMEwyNTMuNSA1MS43ek0yNTYgMjI0bC02NCAwIDMyLTc2LjhMMjU2IDIyNHptLTkwLjcgNjRsMTE3LjMgMEwyOTYgMzIwbC0xNDQgMCAxMy4zLTMyelwiXVxufTtcbmNvbnN0IGZhRiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTAyXSwgXCI0NlwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMjU2IDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMjI0IDY0IDk2bDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDY0IDMyelwiXVxufTtcbmNvbnN0IGZhTGVhZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsZWFmJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDZjXCIsIFwiTTI3MiA5NmMtNzguNiAwLTE0NS4xIDUxLjUtMTY3LjcgMTIyLjVjMzMuNi0xNyA3MS41LTI2LjUgMTExLjctMjYuNWw4OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNiAwLTcyIDBzMCAwIDAgMGMtMTYuNiAwLTMyLjcgMS45LTQ4LjMgNS40Yy0yNS45IDUuOS00OS45IDE2LjQtNzEuNCAzMC43YzAgMCAwIDAgMCAwQzM4LjMgMjk4LjggMCAzNjQuOSAwIDQ0MGwwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNmMwLTQ4LjcgMjAuNy05Mi41IDUzLjgtMTIzLjJDMTIxLjYgMzkyLjMgMTkwLjMgNDQ4IDI3MiA0NDhsMSAwYzEzMi4xLS43IDIzOS0xMzAuOSAyMzktMjkxLjRjMC00Mi42LTcuNS04My4xLTIxLjEtMTE5LjZjLTIuNi02LjktMTIuNy02LjYtMTYuMi0uMUM0NTUuOSA3Mi4xIDQxOC43IDk2IDM3NiA5NkwyNzIgOTZ6XCJdXG59O1xuY29uc3QgZmFSb2FkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvYWQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg3MzldLCBcImYwMThcIiwgXCJNMjU2IDMybC03NC44IDBjLTI3LjEgMC01MS4zIDE3LjEtNjAuMyA0Mi42TDMuMSA0MDcuMkMxLjEgNDEzIDAgNDE5LjIgMCA0MjUuNEMwIDQ1NS41IDI0LjUgNDgwIDU0LjYgNDgwTDI1NiA0ODBsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjQgMjAxLjQgMGMzMC4yIDAgNTQuNi0yNC41IDU0LjYtNTQuNmMwLTYuMi0xLjEtMTIuNC0zLjEtMTguMkw0NTUuMSA3NC42QzQ0NiA0OS4xIDQyMS45IDMyIDM5NC44IDMyTDMyMCAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bTY0IDE5MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl1cbn07XG5jb25zdCBmYVRheGkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGF4aScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY2MiwgXCJjYWJcIl0sIFwiZjFiYVwiLCBcIk0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMiAwIC4yYy0zOC42IDIuMi03Mi4zIDI3LjMtODUuMiA2NC4xTDM5LjYgMjI4LjhDMTYuNCAyMzguNCAwIDI2MS4zIDAgMjg4TDAgNDMybDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4IDMyMCAwIDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4IDAtMTQ0YzAtMjYuNy0xNi40LTQ5LjYtMzkuNi01OS4yTDQzNy4yIDEyOC4zYy0xMi45LTM2LjgtNDYuNi02Mi04NS4yLTY0LjFsMC0uMiAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE5MiAwek0xNjUuNCAxMjhsMTgxLjIgMGMxMy42IDAgMjUuNyA4LjYgMzAuMiAyMS40TDQwMi45IDIyNGwtMjkzLjggMCAyNi4xLTc0LjZjNC41LTEyLjggMTYuNi0yMS40IDMwLjItMjEuNHpNOTYgMjg4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjg4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xuY29uc3QgZmFDYWIgPSBmYVRheGk7XG5jb25zdCBmYVBlcnNvbkNpcmNsZVBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWNpcmNsZS1wbHVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTQxXCIsIFwiTTExMiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjMuMUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmwyOS43IDBjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45IDIzMiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMTYgMHpNNDMyIDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTE2IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTQ4IDAgMC00OHpcIl1cbn07XG5jb25zdCBmYUNoYXJ0UGllID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoYXJ0LXBpZScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wicGllLWNoYXJ0XCJdLCBcImYyMDBcIiwgXCJNMzA0IDI0MGwwLTIyMy40YzAtOSA3LTE2LjYgMTYtMTYuNkM0NDMuNyAwIDU0NCAxMDAuMyA1NDQgMjI0YzAgOS03LjYgMTYtMTYuNiAxNkwzMDQgMjQwek0zMiAyNzJDMzIgMTUwLjcgMTIyLjEgNTAuMyAyMzkgMzQuM2M5LjItMS4zIDE3IDYuMSAxNyAxNS40TDI1NiAyODggNDEyLjUgNDQ0LjVjNi43IDYuNyA2LjIgMTcuNy0xLjUgMjMuMUMzNzEuOCA0OTUuNiAzMjMuOCA1MTIgMjcyIDUxMkMxMzkuNSA1MTIgMzIgNDA0LjYgMzIgMjcyem01MjYuNCAxNmM5LjMgMCAxNi42IDcuOCAxNS40IDE3Yy03LjcgNTUuOS0zNC42IDEwNS42LTczLjkgMTQyLjNjLTYgNS42LTE1LjQgNS4yLTIxLjItLjdMMzIwIDI4OGwyMzguNCAwelwiXVxufTtcbmNvbnN0IGZhUGllQ2hhcnQgPSBmYUNoYXJ0UGllO1xuY29uc3QgZmFCb2x0TGlnaHRuaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvbHQtbGlnaHRuaW5nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlMGI3XCIsIFwiTTAgMjU2TDI4LjUgMjhjMi0xNiAxNS42LTI4IDMxLjgtMjhIMjI4LjljMTUgMCAyNy4xIDEyLjEgMjcuMSAyNy4xYzAgMy4yLS42IDYuNS0xLjcgOS41TDIwOCAxNjBIMzQ3LjNjMjAuMiAwIDM2LjcgMTYuNCAzNi43IDM2LjdjMCA3LjQtMi4yIDE0LjYtNi40IDIwLjdsLTE5Mi4yIDI4MWMtNS45IDguNi0xNS42IDEzLjctMjUuOSAxMy43aC0yLjljLTE1LjcgMC0yOC41LTEyLjgtMjguNS0yOC41YzAtMi4zIC4zLTQuNiAuOS02LjlMMTc2IDI4OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdXG59O1xuY29uc3QgZmFTYWNrWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Fjay14bWFyaycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU2YVwiLCBcIk0xOTIgOTZsMTI4IDAgNDcuNC03MS4xQzM3NC41IDE0LjIgMzY2LjkgMCAzNTQuMSAwTDE1Ny45IDBjLTEyLjggMC0yMC40IDE0LjItMTMuMyAyNC45TDE5MiA5NnptMTI4IDMybC0xMjggMGMtMy44IDIuNS04LjEgNS4zLTEzIDguNGMwIDAgMCAwIDAgMHMwIDAgMCAwQzEyMi4zIDE3Mi43IDAgMjUwLjkgMCA0MTZjMCA1MyA0MyA5NiA5NiA5NmwzMjAgMGM1MyAwIDk2LTQzIDk2LTk2YzAtMTY1LjEtMTIyLjMtMjQzLjMtMTc5LTI3OS42Yy00LjgtMy4xLTkuMi01LjktMTMtOC40ek0yODkuOSAzMzZsNDcgNDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDctNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDctNDctNDctNDdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3elwiXVxufTtcbmNvbnN0IGZhRmlsZUV4Y2VsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtZXhjZWwnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYxYzNcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODgtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDIyNCAwIDY0IDB6TTI1NiAwbDAgMTI4IDEyOCAwTDI1NiAwek0xNTUuNyAyNTAuMkwxOTIgMzAyLjFsMzYuMy01MS45YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXMxMy41IDIyLjYgNS45IDMzLjRMMjIxLjMgMzQ0bDQ2LjQgNjYuMmM3LjYgMTAuOSA1IDI1LjgtNS45IDMzLjRzLTI1LjggNS0zMy40LTUuOUwxOTIgMzg1LjhsLTM2LjMgNTEuOWMtNy42IDEwLjktMjIuNiAxMy41LTMzLjQgNS45cy0xMy41LTIyLjYtNS45LTMzLjRMMTYyLjcgMzQ0bC00Ni40LTY2LjJjLTcuNi0xMC45LTUtMjUuOCA1LjktMzMuNHMyNS44LTUgMzMuNCA1Ljl6XCJdXG59O1xuY29uc3QgZmFGaWxlQ29udHJhY3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jb250cmFjdCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU2Y1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMjI0IDAgNjQgMHpNMjU2IDBsMCAxMjggMTI4IDBMMjU2IDB6TTgwIDY0bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMODAgOTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptNTQuMiAyNTMuOGMtNi4xIDIwLjMtMjQuOCAzNC4yLTQ2IDM0LjJMODAgNDE2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDguMiAwYzcuMSAwIDEzLjMtNC42IDE1LjMtMTEuNGwxNC45LTQ5LjVjMy40LTExLjMgMTMuOC0xOS4xIDI1LjYtMTkuMXMyMi4yIDcuNyAyNS42IDE5LjFsMTEuNiAzOC42YzcuNC02LjIgMTYuOC05LjcgMjYuOC05LjdjMTUuOSAwIDMwLjQgOSAzNy41IDIzLjJsNC40IDguOCA1NC4xIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTY0IDBjLTYuMSAwLTExLjYtMy40LTE0LjMtOC44bC04LjgtMTcuN2MtMS43LTMuNC01LjEtNS41LTguOC01LjVzLTcuMiAyLjEtOC44IDUuNWwtOC44IDE3LjdjLTIuOSA1LjktOS4yIDkuNC0xNS43IDguOHMtMTIuMS01LjEtMTMuOS0xMS4zTDE0NCAzNDlsLTkuOCAzMi44elwiXVxufTtcbmNvbnN0IGZhRmlzaEZpbnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlzaC1maW5zJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGYyXCIsIFwiTTI3NS4yIDM4LjRjLTEwLjYtOC0yNS04LjUtMzYuMy0xLjVTMjIyIDU3LjMgMjI0LjYgNzAuM2w5LjcgNDguNmMtMTkuNCA5LTM2LjkgMTkuOS01Mi40IDMxLjVjLTE1LjMgMTEuNS0yOSAyMy45LTQwLjcgMzYuM0w0OC4xIDEzMi40Yy0xMi41LTcuMy0yOC40LTUuMy0zOC42IDQuOVMtMyAxNjMuMyA0LjIgMTc1LjlMNTAgMjU2IDQuMiAzMzYuMWMtNy4yIDEyLjYtNSAyOC40IDUuMyAzOC42czI2LjEgMTIuMiAzOC42IDQuOWw5My4xLTU0LjNjMTEuOCAxMi4zIDI1LjQgMjQuOCA0MC43IDM2LjNjMTUuNSAxMS42IDMzIDIyLjUgNTIuNCAzMS41bC05LjcgNDguNmMtMi42IDEzIDMuMSAyNi4zIDE0LjMgMzMuM3MyNS42IDYuNSAzNi4zLTEuNWw3Ny42LTU4LjJjNTQuOS00IDEwMS41LTI3IDEzNy4yLTUzLjhjMzkuMi0yOS40IDY3LjItNjQuNyA4MS42LTg5LjVjNS44LTkuOSA1LjgtMjIuMiAwLTMyLjFjLTE0LjQtMjQuOC00Mi41LTYwLjEtODEuNi04OS41Yy0zNS44LTI2LjgtODIuMy00OS44LTEzNy4yLTUzLjhMMjc1LjIgMzguNHpNMzg0IDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbmNvbnN0IGZhQnVpbGRpbmdGbGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0ZDVcIiwgXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsOTYgMCAwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCA4MCA5NiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNDE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDB6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xMTItMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNODAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ0OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4MCA2NCAwIDAtMzIwIDE0NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyOGMwLTguOC03LjItMTYtMTYtMTZMNDgwIDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXVxufTtcbmNvbnN0IGZhRmFjZUdyaW5CZWFtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3Jpbi1iZWFtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE2LCBcImdyaW4tYmVhbVwiXSwgXCJmNTgyXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6bS0xNzAuNS04NHMwIDAgMCAwYzAgMCAwIDAgMCAwbC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMmMwIDAgMCAwIDAgMGMwIDAgMCAwIDAgMHMwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGMwIDAgMCAwIDAgMHMwIDAgMCAwem0xNjAgMGMwIDAgMCAwIDAgMGwtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjJjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhjMCAwIDAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwelwiXVxufTtcbmNvbnN0IGZhR3JpbkJlYW0gPSBmYUZhY2VHcmluQmVhbTtcbmNvbnN0IGZhT2JqZWN0VW5ncm91cCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdvYmplY3QtdW5ncm91cCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjI0OFwiLCBcIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0QzAgMjguNyAyOC43IDAgNjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsMjA5LjEgMEMzMzkuNiAxMi45IDM2MC4zIDAgMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMTEzLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNGMwIDM1LjMtMjguNyA2NC02NCA2NGMtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yMDkuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0xMTMuMXpNMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDExMy4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyMDkuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTExMy4xYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRMMTE5LjQgOTZ6bTE5MiAzODRjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTQwLjYgNjQgMCAwIDQwLjZjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40bDIwOS4xIDBjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40bDAtMTEzLjFjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNGwtNDYgMGMtNS40LTE1LjQtMTQuNi0yOC45LTI2LjUtMzkuNmwwLTI0LjQgNzIuNiAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMTEzLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNGMwIDM1LjMtMjguNyA2NC02NCA2NGMtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yMDkuMSAwelwiXVxufTtcbmNvbnN0IGZhUG9vcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwb29wJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjE5XCIsIFwiTTI1NC40IDYuNmMzLjUtNC4zIDktNi41IDE0LjUtNS43QzMxNS44IDcuMiAzNTIgNDcuNCAzNTIgOTZjMCAxMS4yLTEuOSAyMi01LjUgMzJsNS41IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxOS4xLTguNCAzNi4zLTIxLjcgNDhsMTMuNyAwYzM5LjggMCA3MiAzMi4yIDcyIDcyYzAgMjMuMi0xMSA0My44LTI4IDU3YzM0LjEgNS43IDYwIDM1LjMgNjAgNzFjMCAzOS44LTMyLjIgNzItNzIgNzJMNzIgNTEyYy0zOS44IDAtNzItMzIuMi03Mi03MmMwLTM1LjcgMjUuOS02NS4zIDYwLTcxYy0xNy0xMy4yLTI4LTMzLjgtMjgtNTdjMC0zOS44IDMyLjItNzIgNzItNzJsMTMuNyAwQzEwNC40IDIyOC4zIDk2IDIxMS4xIDk2IDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGwxNi4yIDBjNDQuMS0uMSA3OS44LTM1LjkgNzkuOC04MGMwLTkuMi0xLjUtMTcuOS00LjMtMjYuMWMtMS44LTUuMi0uOC0xMS4xIDIuOC0xNS40elwiXVxufTtcbmNvbnN0IGZhTG9jYXRpb25QaW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbG9jYXRpb24tcGluJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJtYXAtbWFya2VyXCJdLCBcImYwNDFcIiwgXCJNMzg0IDE5MmMwIDg3LjQtMTE3IDI0My0xNjguMyAzMDcuMmMtMTIuMyAxNS4zLTM1LjEgMTUuMy00Ny40IDBDMTE3IDQzNSAwIDI3OS40IDAgMTkyQzAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MnpcIl1cbn07XG5jb25zdCBmYU1hcE1hcmtlciA9IGZhTG9jYXRpb25QaW47XG5jb25zdCBmYUthYWJhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2thYWJhJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MzMxXSwgXCJmNjZiXCIsIFwiTTYwIDEyMGwyMjggNzEuMkw1MTYgMTIwIDI4OCA0OC44IDYwIDEyMHpNMjc4LjUgMS41YzYuMi0xLjkgMTIuOS0xLjkgMTkuMSAwbDI1NiA4MEM1NjYuOSA4NS42IDU3NiA5OCA1NzYgMTEybDAgMTZzMCAwIDAgMGwwIDIxLjJMMjkyLjggMjM3LjdjLTMuMSAxLTYuNCAxLTkuNSAwTDAgMTQ5LjIgMCAxMjhsMC0xNkMwIDk4IDkuMSA4NS42IDIyLjUgODEuNWwyNTYtODB6bTIzLjkgMjY2LjhMNTc2IDE4Mi44bDAgNDYuNS01Mi44IDE2LjVjLTguNCAyLjYtMTMuMSAxMS42LTEwLjUgMjBzMTEuNiAxMy4xIDIwIDEwLjVMNTc2IDI2Mi44IDU3NiA0MDBjMCAxNC05LjEgMjYuNC0yMi41IDMwLjVsLTI1NiA4MGMtNi4yIDEuOS0xMi45IDEuOS0xOS4xIDBsLTI1Ni04MEM5LjEgNDI2LjQgMCA0MTQgMCA0MDBMMCAyNjIuOGw0My4yIDEzLjVjOC40IDIuNiAxNy40LTIuMSAyMC0xMC41cy0yLjEtMTcuNC0xMC41LTIwTDAgMjI5LjJsMC00Ni41IDI3My43IDg1LjVjOS4zIDIuOSAxOS4zIDIuOSAyOC42IDB6bS0xODUuNS0yLjZjLTguNC0yLjYtMTcuNCAyLjEtMjAgMTAuNXMyLjEgMTcuNCAxMC41IDIwbDY0IDIwYzguNCAyLjYgMTcuNC0yLjEgMjAtMTAuNXMtMi4xLTE3LjQtMTAuNS0yMGwtNjQtMjB6bTM1MiAzMC41YzguNC0yLjYgMTMuMS0xMS42IDEwLjUtMjBzLTExLjYtMTMuMS0yMC0xMC41bC02NCAyMGMtOC40IDIuNi0xMy4xIDExLjYtMTAuNSAyMHMxMS42IDEzLjEgMjAgMTAuNWw2NC0yMHptLTIyNCA5LjVjLTguNC0yLjYtMTcuNCAyLjEtMjAgMTAuNXMyLjEgMTcuNCAxMC41IDIwbDM4LjUgMTJjOS4zIDIuOSAxOS4zIDIuOSAyOC42IDBsMzguNS0xMmM4LjQtMi42IDEzLjEtMTEuNiAxMC41LTIwcy0xMS42LTEzLjEtMjAtMTAuNWwtMzguNSAxMmMtMy4xIDEtNi40IDEtOS41IDBsLTM4LjUtMTJ6XCJdXG59O1xuY29uc3QgZmFUb2lsZXRQYXBlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b2lsZXQtcGFwZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjk1MzFdLCBcImY3MWVcIiwgXCJNNDQ0LjIgMEMzOTcuMiA0OS42IDM4NCAxMjYuNSAzODQgMTkyYzAgMTU4LjgtMjcuMyAyNDctNDIuNyAyODMuOWMtMTAgMjQtMzMuMiAzNi4xLTU1LjQgMzYuMUw0OCA1MTJjLTExLjUgMC0yMi4yLTYuMi0yNy44LTE2LjJzLTUuNi0yMi4zIC40LTMyLjJjOS44LTE3LjcgMTUuNC0zOC4yIDIwLjUtNTcuN0M1Mi4zIDM2Mi44IDY0IDI5My41IDY0IDE5MkM2NCA4NiAxMDcgMCAxNjAgMEw0NDQuMiAwek01MTIgMzg0Yy01MyAwLTk2LTg2LTk2LTE5MlM0NTkgMCA1MTIgMHM5NiA4NiA5NiAxOTJzLTQzIDE5Mi05NiAxOTJ6bTAtMTI4YzE3LjcgMCAzMi0yOC43IDMyLTY0cy0xNC4zLTY0LTMyLTY0cy0zMiAyOC43LTMyIDY0czE0LjMgNjQgMzIgNjR6TTE0NCAyMDhhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptNjQgMGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem00OCAxNmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTgwLTE2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6XCJdXG59O1xuY29uc3QgZmFIZWxtZXRTYWZldHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVsbWV0LXNhZmV0eScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaGFyZC1oYXRcIiwgXCJoYXQtaGFyZFwiXSwgXCJmODA3XCIsIFwiTTI1NiAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyLjMgMCA5OS42YzAgNS42LTQuNSAxMC4xLTEwLjEgMTAuMWMtMy42IDAtNy0xLjktOC44LTUuMUwxNTcuMSA4N0M4MyAxMjMuNSAzMiAxOTkuOCAzMiAyODhsMCA2NCA1MTIgMCAwLTY2LjRjLS45LTg3LjItNTEuNy0xNjIuNC0xMjUuMS0xOTguNmwtNDggODMuOWMtMS44IDMuMi01LjIgNS4xLTguOCA1LjFjLTUuNiAwLTEwLjEtNC41LTEwLjEtMTAuMWwwLTk5LjYgMC0yLjNjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDB6TTE2LjYgMzg0QzcuNCAzODQgMCAzOTEuNCAwIDQwMC42YzAgNC43IDIgOS4yIDUuOCAxMS45QzI3LjUgNDI4LjQgMTExLjggNDgwIDI4OCA0ODBzMjYwLjUtNTEuNiAyODIuMi02Ny41YzMuOC0yLjggNS44LTcuMiA1LjgtMTEuOWMwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZMMTYuNiAzODR6XCJdXG59O1xuY29uc3QgZmFIYXJkSGF0ID0gZmFIZWxtZXRTYWZldHk7XG5jb25zdCBmYUhhdEhhcmQgPSBmYUhlbG1ldFNhZmV0eTtcbmNvbnN0IGZhRWplY3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWplY3QnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5MTY3XSwgXCJmMDUyXCIsIFwiTTIyNCAzMmMxMy41IDAgMjYuMyA1LjYgMzUuNCAxNS42bDE3NiAxOTJjMTIuOSAxNCAxNi4yIDM0LjMgOC42IDUxLjhTNDE5IDMyMCA0MDAgMzIwTDQ4IDMyMGMtMTkgMC0zNi4zLTExLjItNDMuOS0yOC43cy00LjMtMzcuNyA4LjYtNTEuOGwxNzYtMTkyQzE5Ny43IDM3LjYgMjEwLjUgMzIgMjI0IDMyek0wIDQzMmMwLTI2LjUgMjEuNS00OCA0OC00OGwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4elwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE4MzgsIFwiYXJyb3ctYWx0LWNpcmNsZS1yaWdodFwiXSwgXCJmMzVhXCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDBBMjU2IDI1NiAwIDEgMCAwIDI1NnptMzk1LjMgMTEuM2wtMTEyIDExMmMtNC42IDQuNi0xMS41IDUuOS0xNy40IDMuNXMtOS45LTguMy05LjktMTQuOGwwLTY0LTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTY0YzAtNi41IDMuOS0xMi4zIDkuOS0xNC44czEyLjktMS4xIDE3LjQgMy41bDExMiAxMTJjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xuY29uc3QgZmFBcnJvd0FsdENpcmNsZVJpZ2h0ID0gZmFDaXJjbGVSaWdodDtcbmNvbnN0IGZhUGxhbmVDaXJjbGVDaGVjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZS1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTVcIiwgXCJNMjU2IDBjLTM1IDAtNjQgNTkuNS02NCA5My43bDAgODQuNkw4LjEgMjgzLjRjLTUgMi44LTguMSA4LjItOC4xIDEzLjlsMCA2NS41YzAgMTAuNiAxMC4yIDE4LjMgMjAuNCAxNS40bDE3MS42LTQ5IDAgNzAuOS01Ny42IDQzLjJjLTQgMy02LjQgNy44LTYuNCAxMi44bDAgNDJjMCA3LjggNi4zIDE0IDE0IDE0YzEuMyAwIDIuNi0uMiAzLjktLjVMMjU2IDQ4MGwxMTAuMSAzMS41YzEuMyAuNCAyLjYgLjUgMy45IC41YzYgMCAxMS4xLTMuNyAxMy4xLTlDMzQ0LjUgNDcwLjcgMzIwIDQyMi4yIDMyMCAzNjhjMC02MC42IDMwLjYtMTE0IDc3LjEtMTQ1LjZMMzIwIDE3OC4zbDAtODQuNkMzMjAgNTkuNSAyOTIgMCAyNTYgMHpNNjQwIDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl1cbn07XG5jb25zdCBmYUZhY2VSb2xsaW5nRXllcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLXJvbGxpbmctZXllcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU4MCwgXCJtZWgtcm9sbGluZy1leWVzXCJdLCBcImY1YTVcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAzNjhsMTI4IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0zMi0xNDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40Yy0zLjcgNS4yLTUuOCAxMS42LTUuOCAxOC40YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02LjktMi4yLTEzLjItNS44LTE4LjRDMjA4LjUgMTc1LjYgMjI0IDE5OCAyMjQgMjI0em0xMjggNjRjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjYgMTUuNS00OC40IDM3LjgtNTguNGMtMy43IDUuMi01LjggMTEuNi01LjggMTguNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40QzQwMC41IDE3NS42IDQxNiAxOTggNDE2IDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NHpcIl1cbn07XG5jb25zdCBmYU1laFJvbGxpbmdFeWVzID0gZmFGYWNlUm9sbGluZ0V5ZXM7XG5jb25zdCBmYU9iamVjdEdyb3VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ29iamVjdC1ncm91cCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjI0N1wiLCBcIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0QzAgMjguNyAyOC43IDAgNjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsMzM3LjEgMEM0NjcuNiAxMi45IDQ4OC4zIDAgNTEyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMjczLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNGMwIDM1LjMtMjguNyA2NC02NCA2NGMtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0zMzcuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0yNzMuMXpNNDU2LjYgOTZMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwzMzcuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTI3My4xYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjR6TTEyOCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6TTI1NiAzMjBsMzIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJ6XCJdXG59O1xuY29uc3QgZmFDaGFydExpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hhcnQtbGluZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGluZS1jaGFydFwiXSwgXCJmMjAxXCIsIFwiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2TDY0IDY0em00MDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDMyMCAyMTAuN2wtNTcuNC01Ny40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTEyIDExMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyNDAgMjIxLjNsNTcuNCA1Ny40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6XCJdXG59O1xuY29uc3QgZmFMaW5lQ2hhcnQgPSBmYUNoYXJ0TGluZTtcbmNvbnN0IGZhTWFza1ZlbnRpbGF0b3IgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFzay12ZW50aWxhdG9yJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTI0XCIsIFwiTTE1OS4xIDE3NkMxMzkuNCAyMTkuMiAxMjggMjY0LjcgMTI4IDMwMC44YzAgMTUuOSAyLjIgMzEuNCA2LjMgNDZsLTMxLjgtNy45QzcwLjUgMzMwLjkgNDggMzAyLjEgNDggMjY5bDAtODVjMC00LjQgMy42LTggOC04bDEwMy4xIDB6bTI2LTQ4TDU2IDEyOGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4NWMwIDU1LjEgMzcuNSAxMDMuMSA5MC45IDExNi40bDcxLjMgMTcuOGMyMi43IDMwLjUgNTUuNCA1NC4xIDkzLjggNjYuNmwwLTc2LjZjLTE5LjctMTYuNC0zMi00MC4zLTMyLTY2LjljMC00OS41IDQzLTEzNC40IDk2LTEzNC40YzUyLjUgMCA5NiA4NC45IDk2IDEzNC40YzAgMjYuNy0xMi40IDUwLjQtMzIgNjYuOGwwIDc2LjZjMzgtMTIuNiA3MC42LTM2IDkzLjUtNjYuNGw3MS42LTE3LjlDNjAyLjUgMzcyLjEgNjQwIDMyNC4xIDY0MCAyNjlsMC04NWMwLTMwLjktMjUuMS01Ni01Ni01NmwtMTI5LjUgMEM0MTkuNyA3My44IDM3Mi4xIDMyIDMyMCAzMmMtNTIuNiAwLTEwMC4yIDQxLjgtMTM0LjkgOTZ6bTI5NS42IDQ4TDU4NCAxNzZjNC40IDAgOCAzLjYgOCA4bDAgODVjMCAzMy0yMi41IDYxLjgtNTQuNSA2OS45bC0zMS44IDhjNC4yLTE0LjcgNi40LTMwLjEgNi40LTQ2LjFjMC0zNi4xLTExLjYtODEuNi0zMS4zLTEyNC44ek0yODggMzIwbDAgMTkyIDY0IDAgMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFBcnJvd1JpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXJpZ2h0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbODU5NF0sIFwiZjA2MVwiLCBcIk00MzguNiAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMzM4LjggMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMDYuNyAwTDIzMy40IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6XCJdXG59O1xuY29uc3QgZmFTaWduc1Bvc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2lnbnMtcG9zdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibWFwLXNpZ25zXCJdLCBcImYyNzdcIiwgXCJNMjI0IDMyTDY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NGwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDM3Ny40IDBjNC4yIDAgOC4zLTEuNyAxMS4zLTQuN2w0OC00OGM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtNDgtNDhjLTMtMy03LjEtNC43LTExLjMtNC43TDI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnpNNDgwIDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC0zMi02NCAwIDAgMzJMNzAuNiAyMjRjLTQuMiAwLTguMyAxLjctMTEuMyA0LjdsLTQ4IDQ4Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0OCA0OGMzIDMgNy4xIDQuNyAxMS4zIDQuN0w0NDggMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjR6TTI4OCA0ODBsMC05Ni02NCAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpcIl1cbn07XG5jb25zdCBmYU1hcFNpZ25zID0gZmFTaWduc1Bvc3Q7XG5jb25zdCBmYUNhc2hSZWdpc3RlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXNoLXJlZ2lzdGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzg4XCIsIFwiTTY0IDBDNDYuMyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4MCAwIDAgMzItNTcgMGMtMzEuNiAwLTU4LjUgMjMuMS02My4zIDU0LjRMMS4xIDM2NC4xQy40IDM2OC44IDAgMzczLjYgMCAzNzguNEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY5LjZjMC00LjgtLjQtOS42LTEuMS0xNC40TDQ4OC4yIDIxNC40QzQ4My41IDE4My4xIDQ1Ni42IDE2MCA0MjUgMTYwbC0yMTcgMCAwLTMyIDgwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMkw2NCAwek05NiA0OGwxNjAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkw5NiA4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNNjQgNDMyYzAtOC44IDcuMi0xNiAxNi0xNmwzNTIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkw4MCA0NDhjLTguOCAwLTE2LTcuMi0xNi0xNnptNDgtMTY4YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTIwLTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTE2MCAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek0zMjggMjQwYTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTI1NiAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek00MjQgMjQwYTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTM1MiAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4elwiXVxufTtcbmNvbnN0IGZhUGVyc29uQ2lyY2xlUXVlc3Rpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWNpcmNsZS1xdWVzdGlvbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0MlwiLCBcIk0xMTIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0bDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjIzLjFMNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZsMjkuNyAwYzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDQ0LjkgNzQuN2MtMTYuMSAxNy42LTI4LjYgMzguNS0zNi42IDYxLjVjLTEuOS0xLjgtMy41LTMuOS00LjktNi4zTDIzMiAyNTYuOSAyMzIgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTI4LTE2IDB6TTQzMiAyMjRhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDI0MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTM2OCAzMjEuNmwwIDYuNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNi40YzAtNS4zIDQuMy05LjYgOS42LTkuNmw0MC41IDBjNy43IDAgMTMuOSA2LjIgMTMuOSAxMy45YzAgNS4yLTIuOSA5LjktNy40IDEyLjNsLTMyIDE2LjhjLTUuMyAyLjgtOC42IDguMi04LjYgMTQuMmwwIDE0LjhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTUuMSAyMy41LTEyLjNjMTUuMS03LjkgMjQuNS0yMy42IDI0LjUtNDAuNmMwLTI1LjQtMjAuNi00NS45LTQ1LjktNDUuOWwtNDAuNSAwYy0yMyAwLTQxLjYgMTguNi00MS42IDQxLjZ6XCJdXG59O1xuY29uc3QgZmFIID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2gnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMDRdLCBcIjQ4XCIsIFwiTTMyMCAyNTZsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNCAwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDEyOEw2NCAxOTIgNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5MiAyNTYgMHpcIl1cbn07XG5jb25zdCBmYVRhcnAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFycCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU3YlwiLCBcIk01NzYgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM1MiAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwIDAtMTYwek00NDggNDQ4TDU3NiAzMjBsLTEyOCAwIDAgMTI4ek05NiAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhU2NyZXdkcml2ZXJXcmVuY2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2NyZXdkcml2ZXItd3JlbmNoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0b29sc1wiXSwgXCJmN2Q5XCIsIFwiTTc4LjYgNUM2OS4xLTIuNCA1NS42LTEuNSA0NyA3TDcgNDdjLTguNSA4LjUtOS40IDIyLTIuMSAzMS42bDgwIDEwNGM0LjUgNS45IDExLjYgOS40IDE5IDkuNGw1NC4xIDAgMTA5IDEwOWMtMTQuNyAyOS0xMCA2NS40IDE0LjMgODkuNmwxMTIgMTEyYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMTItMTEyYy0yNC4yLTI0LjItNjAuNi0yOS04OS42LTE0LjNsLTEwOS0xMDkgMC01NC4xYzAtNy41LTMuNS0xNC41LTkuNC0xOUw3OC42IDV6TTE5LjkgMzk2LjFDNy4yIDQwOC44IDAgNDI2LjEgMCA0NDQuMUMwIDQ4MS42IDMwLjQgNTEyIDY3LjkgNTEyYzE4IDAgMzUuMy03LjIgNDgtMTkuOUwyMzMuNyAzNzQuM2MtNy44LTIwLjktOS00My42LTMuNi02NS4xbC02MS43LTYxLjdMMTkuOSAzOTYuMXpNNTEyIDE0NGMwLTEwLjUtMS4xLTIwLjctMy4yLTMwLjVjLTIuNC0xMS4yLTE2LjEtMTQuMS0yNC4yLTZsLTYzLjkgNjMuOWMtMyAzLTcuMSA0LjctMTEuMyA0LjdMMzUyIDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNTcuNGMwLTQuMiAxLjctOC4zIDQuNy0xMS4zbDYzLjktNjMuOWM4LjEtOC4xIDUuMi0yMS44LTYtMjQuMkMzODguNyAxLjEgMzc4LjUgMCAzNjggMEMyODguNSAwIDIyNCA2NC41IDIyNCAxNDRsMCAuOCA4NS4zIDg1LjNjMzYtOS4xIDc1LjggLjUgMTA0IDI4LjdMNDI5IDI3NC41YzQ5LTIzIDgzLTcyLjggODMtMTMwLjV6TTU2IDQzMmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwelwiXVxufTtcbmNvbnN0IGZhVG9vbHMgPSBmYVNjcmV3ZHJpdmVyV3JlbmNoO1xuY29uc3QgZmFBcnJvd3NUb0V5ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtdG8tZXllJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGJmXCIsIFwiTTE1IDE1QzI0LjQgNS43IDM5LjYgNS43IDQ5IDE1bDYzIDYzTDExMiA0MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTk2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMzguMSAwTDE1IDQ5QzUuNyAzOS42IDUuNyAyNC40IDE1IDE1ek0xMzMuNSAyNDMuOUMxNTguNiAxOTMuNiAyMjIuNyAxMTIgMzIwIDExMnMxNjEuNCA4MS42IDE4Ni41IDEzMS45YzMuOCA3LjYgMy44IDE2LjUgMCAyNC4yQzQ4MS40IDMxOC40IDQxNy4zIDQwMCAzMjAgNDAwcy0xNjEuNC04MS42LTE4Ni41LTEzMS45Yy0zLjgtNy42LTMuOC0xNi41IDAtMjQuMnpNMzIwIDMyMGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNNTkxIDE1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjMgNjMgMzguMSAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC05NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTk2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAzOC4xIDYzLTYzek0xNSA0OTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDYzLTYzTDQwIDQwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0zOC4xTDQ5IDQ5N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6bTU3NiAwbC02My02MyAwIDM4LjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC05NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zOC4xIDAgNjMgNjNjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMHpcIl1cbn07XG5jb25zdCBmYVBsdWdDaXJjbGVCb2x0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLWJvbHQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NWJcIiwgXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMmwwIDk2IDY0IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTYgNjQgMCAwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCAzMmMwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOGwwIDY3LjJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY3LjJjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMTYwek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNDcuOS0yMjVjNC4zIDMuNyA1LjQgOS45IDIuNiAxNC45TDQ1Mi40IDM1NmwzNS42IDBjNS4yIDAgOS44IDMuMyAxMS40IDguMnMtLjEgMTAuMy00LjIgMTMuNGwtOTYgNzJjLTQuNSAzLjQtMTAuOCAzLjItMTUuMS0uNnMtNS40LTkuOS0yLjYtMTQuOUw0MTEuNiAzODAgMzc2IDM4MGMtNS4yIDAtOS44LTMuMy0xMS40LTguMnMuMS0xMC4zIDQuMi0xMy40bDk2LTcyYzQuNS0zLjQgMTAuOC0zLjIgMTUuMSAuNnpcIl1cbn07XG5jb25zdCBmYUhlYXJ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYXJ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTUzLCAxMjgxNTQsIDEyODE1NSwgMTI4MTU2LCAxMjg0MjAsIDEyOTI5MywgMTI5Mjk0LCAxMjk1MDUsIDk4MjksIDEwMDg0LCA2MTU3OF0sIFwiZjAwNFwiLCBcIk00Ny42IDMwMC40TDIyOC4zIDQ2OS4xYzcuNSA3IDE3LjQgMTAuOSAyNy43IDEwLjlzMjAuMi0zLjkgMjcuNy0xMC45TDQ2NC40IDMwMC40YzMwLjQtMjguMyA0Ny42LTY4IDQ3LjYtMTA5LjV2LTUuOGMwLTY5LjktNTAuNS0xMjkuNS0xMTkuNC0xNDFDMzQ3IDM2LjUgMzAwLjYgNTEuNCAyNjggODRMMjU2IDk2IDI0NCA4NGMtMzIuNi0zMi42LTc5LTQ3LjUtMTI0LjYtMzkuOUM1MC41IDU1LjYgMCAxMTUuMiAwIDE4NS4xdjUuOGMwIDQxLjUgMTcuMiA4MS4yIDQ3LjYgMTA5LjV6XCJdXG59O1xuY29uc3QgZmFNYXJzQW5kVmVudXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycy1hbmQtdmVudXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODkzXSwgXCJmMjI0XCIsIFwiTTMzNy44IDE0LjhDMzQxLjUgNS44IDM1MC4zIDAgMzYwIDBMNDcyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMTJjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzktMzktMjQuNyAyNC43QzQwNyAxNjMuMyA0MTYgMTkyLjYgNDE2IDIyNGMwIDgwLjItNTkgMTQ2LjYtMTM2IDE1OC4ybDAgMjUuOCAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0zMi0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0IDAgMC0yNS44QzE1NSAzNzAuNiA5NiAzMDQuMiA5NiAyMjRjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBjMzkuNiAwIDc1LjkgMTQuNCAxMDMuOCAzOC4yTDM4Mi4xIDgwIDM0MyA0MWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMnpNNDQ4IDQ4czAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwek0zNTIgMjI0YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpcIl1cbn07XG5jb25zdCBmYUhvdXNlVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS11c2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJob21lLXVzZXJcIl0sIFwiZTFiMFwiLCBcIk01NzUuOCAyNTUuNWMwIDE4LTE1IDMyLjEtMzIgMzIuMWwtMzIgMCAuNyAxNjAuMmMuMiAzNS41LTI4LjUgNjQuMy02NCA2NC4zbC0zMjAuNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE2MC40LTMyIDBjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDU2NC44IDIzMS41YzggNyAxMiAxNSAxMSAyNHpNMzUyIDIyNGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6bS05NiA5NmMtNDQuMiAwLTgwIDM1LjgtODAgODBjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNmMwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMHpcIl1cbn07XG5jb25zdCBmYUhvbWVVc2VyID0gZmFIb3VzZVVzZXI7XG5jb25zdCBmYUR1bXBzdGVyRmlyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkdW1wc3Rlci1maXJlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNzk0XCIsIFwiTTQ5LjcgMzJsOTAuOCAwTDExNC45IDE2MGwtOTQgMEM5LjMgMTYwIDAgMTUwLjcgMCAxMzkuMWMwLTIuMSAuMy00LjEgLjktNi4xTDI2LjggNDguOUMyOS45IDM4LjkgMzkuMiAzMiA0OS43IDMyek0yNzIgMTYwbC0xMjQuNSAwTDE3My4xIDMyIDI3MiAzMmwwIDEyOHptMzIgMGwwLTEyOCA5OC45IDAgMTQuNCA3Mi4xYy0xLjcgMS4xLTMuMyAyLjQtNC44IDMuOGMtMTguNCAxNi40LTM1LjQgMzQtNTAuNSA1Mi4xbC01OCAwem0yMDkuOS0yMy43Yy0xLjcgMS42LTMuNCAzLjItNSA0LjhDNDk4IDEyOS42IDQ4Ni43IDExOC42IDQ3NSAxMDhjLTcuNi02LjktMTctMTAuOC0yNi42LTExLjhMNDM1LjUgMzJsOTAuOCAwYzEwLjUgMCAxOS44IDYuOSAyMi45IDE2LjlMNTc1LjEgMTMzYy4yIC43IC40IDEuNCAuNSAyLjFjLTE3LjgtMTUtNDQuMy0xNC42LTYxLjcgMS4yek0zMjUuMiAyMTAuN0MzMDQuMyAyNDQuNSAyODggMjgyLjkgMjg4IDMxOC4xYzAgNDkuMyAxOC42IDk1LjIgNDkuNiAxMjkuOUwxMjggNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDQ0IDI4OGwtMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0IDAtNC0zMiAzMDUuNSAwYy00LjQgNi4yLTguNSAxMi41LTEyLjMgMTguN3ptMTgwLjYtMzQuNUw1MTggMTYyLjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOWM3LjIgMCAxNC4zIDIuNiAxOS45IDcuOGMxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjZDNjI5IDI1OS4yIDY0MCAyOTAuMiA2NDAgMzIwLjJDNjQwIDQwOC44IDU2OC43IDQ4MCA0ODAgNDgwYy04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44YzAtMzcuMyAxNi03My40IDM2LjgtMTA0LjVjMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4yYzUuNy01LjIgMTMuMS03LjcgMjAuMy03LjVjMTQuMSAuMyAyMy44IDExLjQgMzIuNyAyMS42YzAgMCAwIDAgMCAwYzIgMi4zIDQgNC42IDYgNi43bDE5IDE5Ljl6TTU0NCAzNjguMmMwLTM2LjUtMzctNzMtNTQuOC04OC40Yy01LjQtNC43LTEzLjEtNC43LTE4LjUgMEM0NTMgMjk1LjEgNDE2IDMzMS42IDQxNiAzNjguMmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbmNvbnN0IGZhSG91c2VDcmFjayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jcmFjaycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTNiMVwiLCBcIk01NDMuOCAyODcuNmMxNyAwIDMyLTE0IDMyLTMyLjFjMS05LTMtMTctMTEtMjRMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFsMzIgMCAwIDE2MC40YzAgMzUuMyAyOC43IDY0IDY0IDY0bDEwMi4zIDAtMzEuMy01Mi4yYy00LjEtNi44LTIuNi0xNS41IDMuNS0yMC41TDI4OCAzNjhsLTYwLjItODIuOGMtMTAuOS0xNSA4LjItMzMuNSAyMi44LTIybDExNy45IDkyLjZjOCA2LjMgOC4yIDE4LjQgLjQgMjQuOUwyODggNDQ4bDM4LjQgNjQgMTIyLjEgMGMzNS41IDAgNjQuMi0yOC44IDY0LTY0LjNsLS43LTE2MC4yIDMyIDB6XCJdXG59O1xuY29uc3QgZmFNYXJ0aW5pR2xhc3NDaXRydXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFydGluaS1nbGFzcy1jaXRydXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImNvY2t0YWlsXCJdLCBcImY1NjFcIiwgXCJNNDMyIDI0MGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtMzUuNSAwLTY2LjYgMTkuMy04My4yIDQ4bC01Mi42IDBDMzE2IDQwLjEgMzY5LjMgMCA0MzIgMGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NGMtMjcuNyAwLTUzLjUtNy44LTc1LjUtMjEuM2wzNS40LTM1LjRjMTIuMiA1LjYgMjUuOCA4LjcgNDAuMSA4Ljd6TTEuOCAxNDIuOEM1LjUgMTMzLjggMTQuMyAxMjggMjQgMTI4bDM2OCAwYzkuNyAwIDE4LjUgNS44IDIyLjIgMTQuOHMxLjcgMTkuMy01LjIgMjYuMmwtMTc3IDE3N0wyMzIgNDY0bDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTg4IDAtODggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtMTE4LjFMNyAxNjljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJ6XCJdXG59O1xuY29uc3QgZmFDb2NrdGFpbCA9IGZhTWFydGluaUdsYXNzQ2l0cnVzO1xuY29uc3QgZmFGYWNlU3VycHJpc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1zdXJwcmlzZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1OCwgXCJzdXJwcmlzZVwiXSwgXCJmNWMyXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYuNCAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjU2IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG5jb25zdCBmYVN1cnByaXNlID0gZmFGYWNlU3VycHJpc2U7XG5jb25zdCBmYUJvdHRsZVdhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvdHRsZS13YXRlcicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTRjNVwiLCBcIk0xMjAgMGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDBMOTYgNjRsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMzIgMTY3LjVjMC0xOS41IDEwLTM3LjYgMjYuNi00Ny45bDE1LjgtOS45Qzg4LjcgMTAwLjcgMTA1LjIgOTYgMTIyLjEgOTZsNzUuOCAwYzE2LjkgMCAzMy40IDQuNyA0Ny43IDEzLjdsMTUuOCA5LjlDMjc4IDEyOS45IDI4OCAxNDggMjg4IDE2Ny41YzAgMTctNy41IDMyLjMtMTkuNCA0Mi42QzI4MC42IDIyMS43IDI4OCAyMzggMjg4IDI1NmMwIDE5LjEtOC40IDM2LjMtMjEuNyA0OGMxMy4zIDExLjcgMjEuNyAyOC45IDIxLjcgNDhzLTguNCAzNi4zLTIxLjcgNDhjMTMuMyAxMS43IDIxLjcgMjguOSAyMS43IDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0xOS4xIDguNC0zNi4zIDIxLjctNDhDNDAuNCAzODguMyAzMiAzNzEuMSAzMiAzNTJzOC40LTM2LjMgMjEuNy00OEM0MC40IDI5Mi4zIDMyIDI3NS4xIDMyIDI1NmMwLTE4IDcuNC0zNC4zIDE5LjQtNDUuOUMzOS41IDE5OS43IDMyIDE4NC41IDMyIDE2Ny41ek05NiAyNDBjMCA4LjggNy4yIDE2IDE2IDE2bDk2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTk2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgMTEyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDk2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTk2IDB6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVQYXVzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtcGF1c2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5MiwgXCJwYXVzZS1jaXJjbGVcIl0sIFwiZjI4YlwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjI0IDE5MmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMGwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbmNvbnN0IGZhUGF1c2VDaXJjbGUgPSBmYUNpcmNsZVBhdXNlO1xuY29uc3QgZmFUb2lsZXRQYXBlclNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvaWxldC1wYXBlci1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA3MlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMDkuNy04NkM1NjkuOSAzNzQgNjA4IDI5MS45IDYwOCAxOTJDNjA4IDg2IDU2NSAwIDUxMiAwcy05NiA4Ni05NiAxOTJjMCA0OS4xIDkuMiA5My45IDI0LjQgMTI3LjlsLTU5LTQ2LjJjMS42LTI0LjggMi42LTUyIDIuNi04MS42YzAtNjUuNSAxMy4yLTE0Mi40IDYwLjItMTkyTDE2MCAwYy0yNC44IDAtNDcuNCAxOC44LTY0LjQgNDkuNkwzOC44IDUuMXpNMzY3LjMgMzg1LjRMNjYuNSAxNDguNEM2NC45IDE2Mi40IDY0IDE3NyA2NCAxOTJjMCAxMDEuNS0xMS43IDE3MC44LTIzIDIxMy45Yy01LjEgMTkuNC0xMC43IDM5LjktMjAuNSA1Ny43Yy01LjkgOS45LTYuMSAyMi4xLS40IDMyLjJTMzYuNSA1MTIgNDggNTEybDIzNy45IDBjMjIuMyAwIDQ1LjQtMTIuMSA1NS40LTM2LjFjNy40LTE3LjcgMTcuNS00Ny4yIDI2LTkwLjZ6TTU0NCAxOTJjMCAzNS4zLTE0LjMgNjQtMzIgNjRzLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NHMzMiAyOC43IDMyIDY0elwiXVxufTtcbmNvbnN0IGZhQXBwbGVXaG9sZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcHBsZS13aG9sZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzgyMiwgMTI3ODIzLCBcImFwcGxlLWFsdFwiXSwgXCJmNWQxXCIsIFwiTTIyNCAxMTJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA0NC4yLTM1LjggODAtODAgODBsLTE2IDB6TTAgMjg4YzAtNzYuMyAzNS43LTE2MCAxMTItMTYwYzI3LjMgMCA1OS43IDEwLjMgODIuNyAxOS4zYzE4LjggNy4zIDM5LjkgNy4zIDU4LjcgMGMyMi45LTguOSA1NS40LTE5LjMgODIuNy0xOS4zYzc2LjMgMCAxMTIgODMuNyAxMTIgMTYwYzAgMTI4LTgwIDIyNC0xNjAgMjI0Yy0xNi41IDAtMzguMS02LjYtNTEuNS0xMS4zYy04LjEtMi44LTE2LjktMi44LTI1IDBjLTEzLjQgNC43LTM1IDExLjMtNTEuNSAxMS4zQzgwIDUxMiAwIDQxNiAwIDI4OHpcIl1cbn07XG5jb25zdCBmYUFwcGxlQWx0ID0gZmFBcHBsZVdob2xlO1xuY29uc3QgZmFLaXRjaGVuU2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tpdGNoZW4tc2V0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTFhXCIsIFwiTTI0MCAxNDRBOTYgOTYgMCAxIDAgNDggMTQ0YTk2IDk2IDAgMSAwIDE5MiAwem00NC40IDMyQzI2OS45IDI0MC4xIDIxMi41IDI4OCAxNDQgMjg4QzY0LjUgMjg4IDAgMjIzLjUgMCAxNDRTNjQuNSAwIDE0NCAwYzY4LjUgMCAxMjUuOSA0Ny45IDE0MC40IDExMmw3MS44IDBjOC44LTkuOCAyMS42LTE2IDM1LjgtMTZsMTA0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTEwNCAwYy0xNC4yIDAtMjctNi4yLTM1LjgtMTZsLTcxLjggMHpNMTQ0IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00MDAgMjQwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOCA5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw5NiAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjg4IDQ2NGwwLTExMiAyMjQgMCAwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4ek00OCAzMjBsODAgMCAxNiAwIDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE2IDBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODBjMC04LjggNy4yLTE2IDE2LTE2em0xMjggNjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDAgMCAzMiAxNiAwek0yNCA0NjRsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0elwiXVxufTtcbmNvbnN0IGZhUiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTE0XSwgXCI1MlwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMjg4IDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggOTUuMyAwTDI2MS44IDQ2Ni40YzEwLjEgMTQuNSAzMC4xIDE4IDQ0LjYgNy45czE4LTMwLjEgNy45LTQ0LjZMMjMwLjEgMzA5LjVDMjgyLjggMjg4LjEgMzIwIDIzNi40IDMyMCAxNzZjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRMNjQgMzJ6TTE3NiAyNTZMNjQgMjU2IDY0IDk2bDExMiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwelwiXVxufTtcbmNvbnN0IGZhVGVtcGVyYXR1cmVRdWFydGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbXBlcmF0dXJlLXF1YXJ0ZXInLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInRlbXBlcmF0dXJlLTFcIiwgXCJ0aGVybW9tZXRlci0xXCIsIFwidGhlcm1vbWV0ZXItcXVhcnRlclwiXSwgXCJmMmNhXCIsIFwiTTE2MCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNjQuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41Qzg2LjIgMzMyLjYgODAgMzQ5LjUgODAgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNUwyMDggMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek00OCAxMTJDNDggNTAuMiA5OC4xIDAgMTYwIDBzMTEyIDUwLjEgMTEyIDExMmwwIDE2NC40YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTMzLjIgMTEuMi02My44IDMwLjEtODguMWMuOS0xLjIgMS41LTIuMiAxLjctMi44Yy4xLS4zIC4yLS41IC4yLS42TDQ4IDExMnpNMjA4IDM2OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA1MC43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM3pcIl1cbn07XG5jb25zdCBmYVRlbXBlcmF0dXJlMSA9IGZhVGVtcGVyYXR1cmVRdWFydGVyO1xuY29uc3QgZmFUaGVybW9tZXRlcjEgPSBmYVRlbXBlcmF0dXJlUXVhcnRlcjtcbmNvbnN0IGZhVGhlcm1vbWV0ZXJRdWFydGVyID0gZmFUZW1wZXJhdHVyZVF1YXJ0ZXI7XG5jb25zdCBmYUN1YmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3ViZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjFiMlwiLCBcIk0yMzQuNSA1LjdjMTMuOS01IDI5LjEtNSA0My4xIDBsMTkyIDY4LjZDNDk1IDgzLjQgNTEyIDEwNy41IDUxMiAxMzQuNmwwIDI0Mi45YzAgMjctMTcgNTEuMi00Mi41IDYwLjNsLTE5MiA2OC42Yy0xMy45IDUtMjkuMSA1LTQzLjEgMGwtMTkyLTY4LjZDMTcgNDI4LjYgMCA0MDQuNSAwIDM3Ny40TDAgMTM0LjZjMC0yNyAxNy01MS4yIDQyLjUtNjAuM2wxOTItNjguNnpNMjU2IDY2TDgyLjMgMTI4IDI1NiAxOTBsMTczLjctNjJMMjU2IDY2em0zMiAzNjguNmwxNjAtNTcuMSAwLTE4OEwyODggMjQ2LjZsMCAxODh6XCJdXG59O1xuY29uc3QgZmFCaXRjb2luU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiaXRjb2luLXNpZ24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImUwYjRcIiwgXCJNNDggMzJDNDggMTQuMyA2Mi4zIDAgODAgMHMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMmMwIDEuNS0uMSAzLjEtLjMgNC41QzI1NC4xIDgyLjIgMjg4IDEyNS4xIDI4OCAxNzZjMCAyNC4yLTcuNyA0Ni42LTIwLjcgNjQuOWMzMS43IDE5LjggNTIuNyA1NSA1Mi43IDk1LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTYuMyAwQzE4LjcgNDQ4IDAgNDI5LjMgMCA0MDYuM0wwIDI4OGwwLTIyLjNMMCAyMjQgMCAxMDEuNkMwIDgwLjggMTYuOCA2NCAzNy42IDY0TDQ4IDY0bDAtMzJ6TTY0IDIyNGwxMTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OEw2NCAxMjhsMCA5NnptMTEyIDY0TDY0IDI4OGwwIDk2IDE0NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC0zMiAwelwiXVxufTtcbmNvbnN0IGZhU2hpZWxkRG9nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaWVsZC1kb2cnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NzNcIiwgXCJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjJjLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yYzE2LjcgOCAzNi4xIDggNTIuOCAwQzQ1NC43IDQyMC43IDQ5NS41IDIzOS4yIDQ5NiAxNDBjLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMTYwLjkgMjg2LjJjNC44IDEuMiA5LjkgMS44IDE1LjEgMS44YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjQgNDQuMiAwYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdMMzIwIDE5Mmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgNDQuMi0zNS44IDgwLTgwIDgwbC00OCAwIDAgNTAuN2MwIDcuMy01LjkgMTMuMy0xMy4zIDEzLjNjLTEuOCAwLTMuNi0uNC01LjItMS4xbC05OC43LTQyLjNjLTYuNi0yLjgtMTAuOC05LjMtMTAuOC0xNi40YzAtMi44IC42LTUuNSAxLjktOGwxNS0zMHpNMTYwIDE2MGw0MCAwIDggMCAwIDMyIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00OGMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbmNvbnN0IGZhU29sYXJQYW5lbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzb2xhci1wYW5lbCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjViYVwiLCBcIk0xMjIuMiAwQzkxLjcgMCA2NS41IDIxLjUgNTkuNSA1MS40TDguMyAzMDcuNEMuNCAzNDcgMzAuNiAzODQgNzEgMzg0bDIxNyAwIDAgNjQtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0IDIxNyAwYzQwLjQgMCA3MC43LTM2LjkgNjIuOC03Ni42bC01MS4yLTI1NkM1NzQuNSAyMS41IDU0OC4zIDAgNTE3LjggMEwxMjIuMiAwek0yNjAuOSA2NGwxMTguMiAwIDEwLjQgMTA0LTEzOSAwTDI2MC45IDY0ek0yMDIuMyAxNjhsLTEwMC44IDBMMTIyLjIgNjRsOTAuNCAwTDIwMi4zIDE2OHpNOTEuOCAyMTZsMTA1LjYgMEwxODcuMSAzMjAgNzEgMzIwIDkxLjggMjE2em0xNTMuOSAwbDE0OC42IDAgMTAuNCAxMDQtMTY5LjQgMCAxMC40LTEwNHptMTk2LjggMGwxMDUuNiAwTDU2OSAzMjBsLTExNiAwTDQ0Mi41IDIxNnptOTYtNDhsLTEwMC44IDBMNDI3LjMgNjRsOTAuNCAwIDMxLjQtNi4zTDUxNy44IDY0bDIwLjggMTA0elwiXVxufTtcbmNvbnN0IGZhTG9ja09wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbG9jay1vcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmM2MxXCIsIFwiTTM1MiAxNDRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00OEM1NzYgNjQuNSA1MTEuNSAwIDQzMiAwUzI4OCA2NC41IDI4OCAxNDRsMCA0OEw2NCAxOTJjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAtNDh6XCJdXG59O1xuY29uc3QgZmFFbGV2YXRvciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbGV2YXRvcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTE2ZFwiLCBcIk0xMzIuNyA0LjdsLTY0IDY0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40czguMyA5LjkgMTQuOCA5LjlsMTI4IDBjNi41IDAgMTIuMy0zLjkgMTQuOC05LjlzMS4xLTEyLjktMy41LTE3LjRsLTY0LTY0Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAxMjh6bTk2IDk2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNODAgNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDY0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnptMTkyIDBjMC0yNi41IDIxLjUtNDggNDgtNDhsNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2em0zMi0xMjhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMzU2LjcgOTEuM2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw2NC02NGM0LjYtNC42IDUuOS0xMS41IDMuNS0xNy40UzQzOC41IDAgNDMyIDBMMzA0IDBjLTYuNSAwLTEyLjMgMy45LTE0LjggOS45cy0xLjEgMTIuOSAzLjUgMTcuNGw2NCA2NHpcIl1cbn07XG5jb25zdCBmYU1vbmV5QmlsbFRyYW5zZmVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vbmV5LWJpbGwtdHJhbnNmZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MjhcIiwgXCJNNTM1IDQxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNjQgNjRjNC41IDQuNSA3IDEwLjYgNyAxN3MtMi41IDEyLjUtNyAxN2wtNjQgNjRjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMjMtMjNMMzg0IDExMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNzQuMSAwTDUzNSA0MXpNMTA1IDM3N2wtMjMgMjNMMjU2IDQwMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4MS45IDQ0OGwyMyAyM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgNDQxYy00LjUtNC41LTctMTAuNi03LTE3czIuNS0xMi41IDctMTdsNjQtNjRjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek05NiA2NGwyNDEuOSAwYy0zLjcgNy4yLTUuOSAxNS4zLTUuOSAyNGMwIDI4LjcgMjMuMyA1MiA1MiA1MmwxMTcuNCAwYy00IDE3IC42IDM1LjUgMTMuOCA0OC44YzIwLjMgMjAuMyA1My4yIDIwLjMgNzMuNSAwTDYwOCAxNjkuNSA2MDggMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yNDEuOSAwYzMuNy03LjIgNS45LTE1LjMgNS45LTI0YzAtMjguNy0yMy4zLTUyLTUyLTUybC0xMTcuNCAwYzQtMTctLjYtMzUuNS0xMy44LTQ4LjhjLTIwLjMtMjAuMy01My4yLTIwLjMtNzMuNSAwTDMyIDM0Mi41IDMyIDEyOGMwLTM1LjMgMjguNy02NCA2NC02NHptNjQgNjRsLTY0IDAgMCA2NGMzNS4zIDAgNjQtMjguNyA2NC02NHpNNTQ0IDMyMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsNjQgMCAwLTY0ek0zMjAgMzUyYTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyelwiXVxufTtcbmNvbnN0IGZhTW9uZXlCaWxsVHJlbmRVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsLXRyZW5kLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTI5XCIsIFwiTTQ3MC43IDkuNGMzIDMuMSA1LjMgNi42IDYuOSAxMC4zczIuNCA3LjggMi40IDEyLjJjMCAwIDAgLjEgMCAuMWMwIDAgMCAwIDAgMGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguN0wzMTAuNiAyMTQuNmMtMTEuOCAxMS44LTMwLjggMTIuNi00My41IDEuN0wxNzYgMTM4LjEgODQuOCAyMTYuM2MtMTMuNCAxMS41LTMzLjYgOS45LTQ1LjEtMy41cy05LjktMzMuNiAzLjUtNDUuMWwxMTItOTZjMTItMTAuMyAyOS43LTEwLjMgNDEuNyAwbDg5LjUgNzYuN0wzNzAuNyA2NCAzNTIgNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMHMwIDAgMCAwYzguOCAwIDE2LjggMy42IDIyLjYgOS4zbC4xIC4xek0wIDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OGw0MTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzA0ek00OCA0MTZsMCA0OCA0OCAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek05NiAzMDRsLTQ4IDAgMCA0OGMyNi41IDAgNDgtMjEuNSA0OC00OHpNNDY0IDQxNmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsNDggMCAwLTQ4ek00MTYgMzA0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDAtNDgtNDggMHptLTk2IDgwYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpcIl1cbn07XG5jb25zdCBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtZmxvb2Qtd2F0ZXItY2lyY2xlLWFycm93LXJpZ2h0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTBmXCIsIFwiTTI4OCAxNDRBMTQ0IDE0NCAwIDEgMCAwIDE0NGExNDQgMTQ0IDAgMSAwIDI4OCAwek0xNDAuNyA3Ni43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDU2IDU2YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC01NiA1NmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkwxNjkuNCAxNjAgODAgMTYwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDg5LjQgMEwxNDAuNyA5OS4zYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpNMzIwIDE0NGMwIDU3LjMtMjcuNCAxMDguMi02OS44IDE0MC4zYzExLjgtMy42IDIzLTkuNCAzMy0xNi4yYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzIzLjgtMTYuNyA1NS44LTE1LjQgNzguMSAzLjRjMi4xIDEuNyA0LjIgMy4zIDYuNSA0LjlsLS4zLTg0LjQgMTYuNiAwYzEzLjkgMCAyNi4xLTguOSAzMC40LTIyLjFzLS40LTI3LjYtMTEuNi0zNS44bC0xNzYtMTI4QzQwNy42LTIgMzkyLjQtMiAzODEuMiA2LjFMMzAxIDY0LjRjMTIuMSAyMy45IDE5IDUwLjkgMTkgNzkuNnptMTguNSAxNjUuOWMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNzkgMzI1LjQgMjUxLjUgMzM2IDIyNCAzMzZjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xYzAgMCAwIDAgMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzE1OC41IDM4OS43IDE5MSA0MDAgMjI0IDQwMGMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS41LTI3LjMtMTAuMS0zOS4yLTEuN2MwIDAgMCAwIDAgMEM0NzEuNCAzMjUuMiA0NDIuOSAzMzYgNDE2IDMzNmMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xem0wIDExMmMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNzkgNDM3LjQgMjUxLjUgNDQ4IDIyNCA0NDhjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xYzAgMCAwIDAgMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzE1OC41IDUwMS43IDE5MSA1MTIgMjI0IDUxMmMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS40LTI3LjMtMTAuMS0zOS4yLTEuN2MwIDAgMCAwIDAgMEM0NzEuNCA0MzcuMiA0NDIuOSA0NDggNDE2IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xelwiXVxufTtcbmNvbnN0IGZhU3F1YXJlUG9sbEhvcml6b250YWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLXBvbGwtaG9yaXpvbnRhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wicG9sbC1oXCJdLCBcImY2ODJcIiwgXCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI1NiAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnptNjQgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE5MiAwek0xOTIgMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFQb2xsSCA9IGZhU3F1YXJlUG9sbEhvcml6b250YWw7XG5jb25zdCBmYUNpcmNsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMDgsIDEyODMwOSwgMTI4OTkyLCAxMjg5OTMsIDEyODk5NCwgMTI4OTk1LCAxMjg5OTYsIDk2NzksIDk4OTgsIDk4OTksIDExMDQ0LCA2MTcwOCwgNjE5MTVdLCBcImYxMTFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6XCJdXG59O1xuY29uc3QgZmFCYWNrd2FyZEZhc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFja3dhcmQtZmFzdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzkxOTgsIFwiZmFzdC1iYWNrd2FyZFwiXSwgXCJmMDQ5XCIsIFwiTTQ5My42IDQ0NWMtMTEuMiA1LjMtMjQuNSAzLjYtMzQuMS00LjRMMjg4IDI5Ny43IDI4OCA0MTZjMCAxMi40LTcuMiAyMy43LTE4LjQgMjlzLTI0LjUgMy42LTM0LjEtNC40TDY0IDI5Ny43IDY0IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkwwIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0czMyIDE0LjMgMzIgMzJsMCAxMTguM0wyMzUuNSA3MS40YzkuNS03LjkgMjIuOC05LjcgMzQuMS00LjRTMjg4IDgzLjYgMjg4IDk2bDAgMTE4LjNMNDU5LjUgNzEuNGM5LjUtNy45IDIyLjgtOS43IDM0LjEtNC40UzUxMiA4My42IDUxMiA5NmwwIDMyMGMwIDEyLjQtNy4yIDIzLjctMTguNCAyOXpcIl1cbn07XG5jb25zdCBmYUZhc3RCYWNrd2FyZCA9IGZhQmFja3dhcmRGYXN0O1xuY29uc3QgZmFSZWN5Y2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlY3ljbGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODQyLCA5ODUwLCA5ODUxXSwgXCJmMWI4XCIsIFwiTTE3NC43IDQ1LjFDMTkyLjIgMTcgMjIzIDAgMjU2IDBzNjMuOCAxNyA4MS4zIDQ1LjFsMzguNiA2MS43IDI3LTE1LjZjOC40LTQuOSAxOC45LTQuMiAyNi42IDEuN3MxMS4xIDE1LjkgOC42IDI1LjNsLTIzLjQgODcuNGMtMy40IDEyLjgtMTYuNiAyMC40LTI5LjQgMTdsLTg3LjQtMjMuNGMtOS40LTIuNS0xNi4zLTEwLjQtMTcuNi0yMHMzLjQtMTkuMSAxMS44LTIzLjlsMjguNC0xNi40TDI4MyA3OWMtNS44LTkuMy0xNi0xNS0yNy0xNXMtMjEuMiA1LjctMjcgMTVsLTE3LjUgMjhjLTkuMiAxNC44LTI4LjYgMTkuNS00My42IDEwLjVjLTE1LjMtOS4yLTIwLjItMjkuMi0xMC43LTQ0LjRsMTcuNS0yOHpNNDI5LjUgMjUxLjljMTUtOSAzNC40LTQuMyA0My42IDEwLjVsMjQuNCAzOS4xYzkuNCAxNS4xIDE0LjQgMzIuNCAxNC42IDUwLjJjLjMgNTMuMS00Mi43IDk2LjQtOTUuOCA5Ni40TDMyMCA0NDhsMCAzMmMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNjQtNjRjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMnMxNC44IDEyLjUgMTQuOCAyMi4ybDAgMzIgOTYuMiAwYzE3LjYgMCAzMS45LTE0LjQgMzEuOC0zMmMwLTUuOS0xLjctMTEuNy00LjgtMTYuN2wtMjQuNC0zOS4xYy05LjUtMTUuMi00LjctMzUuMiAxMC43LTQ0LjR6bS0zNjQuNi0zMUwzNiAyMDQuMmMtOC40LTQuOS0xMy4xLTE0LjMtMTEuOC0yMy45czguMi0xNy41IDE3LjYtMjBsODcuNC0yMy40YzEyLjgtMy40IDI2IDQuMiAyOS40IDE3TDE4MiAyNDEuMmMyLjUgOS40LS45IDE5LjMtOC42IDI1LjNzLTE4LjIgNi42LTI2LjYgMS43bC0yNi41LTE1LjNMNjguOCAzMzUuM2MtMy4xIDUtNC44IDEwLjgtNC44IDE2LjdjLS4xIDE3LjYgMTQuMiAzMiAzMS44IDMybDMyLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIuMiAwQzQyLjcgNDQ4LS4zIDQwNC44IDAgMzUxLjZjLjEtMTcuOCA1LjEtMzUuMSAxNC42LTUwLjJsNTAuMy04MC41elwiXVxufTtcbmNvbnN0IGZhVXNlckFzdHJvbmF1dCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLWFzdHJvbmF1dCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjRmYlwiLCBcIk0zNzAuNyA5Ni4xQzM0Ni4xIDM5LjUgMjg5LjcgMCAyMjQgMFMxMDEuOSAzOS41IDc3LjMgOTYuMUM2MC45IDk3LjUgNDggMTExLjIgNDggMTI4bDAgNjRjMCAxNi44IDEyLjkgMzAuNSAyOS4zIDMxLjlDMTAxLjkgMjgwLjUgMTU4LjMgMzIwIDIyNCAzMjBzMTIyLjEtMzkuNSAxNDYuNy05Ni4xYzE2LjQtMS40IDI5LjMtMTUuMSAyOS4zLTMxLjlsMC02NGMwLTE2LjgtMTIuOS0zMC41LTI5LjMtMzEuOXpNMzM2IDE0NGwwIDE2YzAgNTMtNDMgOTYtOTYgOTZsLTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZsMC0xNmMwLTI2LjUgMjEuNS00OCA0OC00OGwxMjggMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTg5LjMgMTYyLjdsLTYtMjEuMmMtLjktMy4zLTMuOS01LjUtNy4zLTUuNXMtNi40IDIuMi03LjMgNS41bC02IDIxLjItMjEuMiA2Yy0zLjMgLjktNS41IDMuOS01LjUgNy4zczIuMiA2LjQgNS41IDcuM2wyMS4yIDYgNiAyMS4yYy45IDMuMyAzLjkgNS41IDcuMyA1LjVzNi40LTIuMiA3LjMtNS41bDYtMjEuMiAyMS4yLTZjMy4zLS45IDUuNS0zLjkgNS41LTcuM3MtMi4yLTYuNC01LjUtNy4zbC0yMS4yLTZ6TTExMi43IDMxNi41QzQ2LjcgMzQyLjYgMCA0MDcgMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEybDk4LjMgMCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjQgOTguMyAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43YzAtNzUuMy00Ni43LTEzOS43LTExMi43LTE2NS44QzMwMy45IDMzOC44IDI2NS41IDM1MiAyMjQgMzUycy03OS45LTEzLjItMTExLjMtMzUuNXpNMTc2IDQ0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDggMzIgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNnptOTYgMzJhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyelwiXVxufTtcbmNvbnN0IGZhUGxhbmVTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFuZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2OVwiLCBcIk01MTQuMyAxOTJjMzQuMiAwIDkzLjcgMjkgOTMuNyA2NGMwIDM2LTU5LjUgNjQtOTMuNyA2NGwtNzMuOCAwTDYzMC44IDQ2OS4xYzEwLjQgOC4yIDEyLjMgMjMuMyA0LjEgMzMuN3MtMjMuMyAxMi4zLTMzLjcgNC4xTDkuMiA0Mi45Qy0xLjIgMzQuNy0zLjEgMTkuNiA1LjEgOS4yUzI4LjQtMy4xIDM4LjggNS4xTDIzOC4xIDE2MS4zIDE5Ny44IDIwLjRDMTk0LjkgMTAuMiAyMDIuNiAwIDIxMy4yIDBsNTYuMiAwYzExLjUgMCAyMi4xIDYuMiAyNy44IDE2LjFMMzk3LjcgMTkybDExNi42IDB6TTQxLjUgMTI4LjdsMzIxIDI1Mi45TDI5Ny4yIDQ5NS45Yy01LjcgMTAtMTYuMyAxNi4xLTI3LjggMTYuMWwtNTYuMiAwYy0xMC42IDAtMTguMy0xMC4yLTE1LjQtMjAuNGw0OS0xNzEuNkwxNDQgMzIwbC00My4yIDU3LjZjLTMgNC03LjggNi40LTEyLjggNi40bC00MiAwYy03LjggMC0xNC02LjMtMTQtMTRjMC0xLjMgLjItMi42IC41LTMuOUw2NCAyNTYgMzIuNSAxNDUuOWMtLjQtMS4zLS41LTIuNi0uNS0zLjljMC02LjIgNC0xMS40IDkuNS0xMy4zelwiXVxufTtcbmNvbnN0IGZhVHJhZGVtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWRlbWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgWzg0ODJdLCBcImYyNWNcIiwgXCJNMzQ1LjYgMTA4LjhjLTguMy0xMS0yMi43LTE1LjUtMzUuNy0xMS4yUzI4OCAxMTQuMiAyODggMTI4bDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgODYuNCAxMTUuMmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44czE5LjYtNC43IDI1LjYtMTIuOEw1NzYgMjI0bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNTZjMC0xMy44LTguOC0yNi0yMS45LTMwLjRzLTI3LjUgLjEtMzUuNyAxMS4yTDQ2NCAyNjYuNyAzNDUuNiAxMDguOHpNMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMCAwIDIyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI0IDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4elwiXVxufTtcbmNvbnN0IGZhQmFza2V0YmFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXNrZXRiYWxsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTM2LCBcImJhc2tldGJhbGwtYmFsbFwiXSwgXCJmNDM0XCIsIFwiTTg2LjYgNjRsODUuMiA4NS4yQzE5NC41IDEyMS43IDIwOCA4Ni40IDIwOCA0OGMwLTE0LjctMi0yOC45LTUuNy00Mi40QzE1OC42IDE1IDExOSAzNS41IDg2LjYgNjR6TTY0IDg2LjZDMzUuNSAxMTkgMTUgMTU4LjYgNS42IDIwMi4zQzE5LjEgMjA2IDMzLjMgMjA4IDQ4IDIwOGMzOC40IDAgNzMuNy0xMy41IDEwMS4zLTM2LjFMNjQgODYuNnpNMjU2IDBjLTcuMyAwLTE0LjYgLjMtMjEuOCAuOUMyMzggMTYgMjQwIDMxLjggMjQwIDQ4YzAgNDcuMy0xNy4xIDkwLjUtNDUuNCAxMjRMMjU2IDIzMy40IDQyNS40IDY0QzM4MC4yIDI0LjIgMzIwLjkgMCAyNTYgMHpNNDggMjQwYy0xNi4yIDAtMzItMi00Ny4xLTUuOEMuMyAyNDEuNCAwIDI0OC43IDAgMjU2YzAgNjQuOSAyNC4yIDEyNC4yIDY0IDE2OS40TDIzMy40IDI1NiAxNzIgMTk0LjZDMTM4LjUgMjIyLjkgOTUuMyAyNDAgNDggMjQwem00NjMuMSAzNy44Yy42LTcuMiAuOS0xNC41IC45LTIxLjhjMC02NC45LTI0LjItMTI0LjItNjQtMTY5LjRMMjc4LjYgMjU2IDM0MCAzMTcuNGMzMy40LTI4LjMgNzYuNy00NS40IDEyNC00NS40YzE2LjIgMCAzMiAyIDQ3LjEgNS44em0tNC43IDMxLjlDNDkyLjkgMzA2IDQ3OC43IDMwNCA0NjQgMzA0Yy0zOC40IDAtNzMuNyAxMy41LTEwMS4zIDM2LjFMNDQ4IDQyNS40YzI4LjUtMzIuMyA0OS4xLTcxLjkgNTguNC0xMTUuN3pNMzQwLjEgMzYyLjdDMzE3LjUgMzkwLjMgMzA0IDQyNS42IDMwNCA0NjRjMCAxNC43IDIgMjguOSA1LjcgNDIuNEMzNTMuNCA0OTcgMzkzIDQ3Ni41IDQyNS40IDQ0OGwtODUuMi04NS4yek0zMTcuNCAzNDBMMjU2IDI3OC42IDg2LjYgNDQ4YzQ1LjEgMzkuOCAxMDQuNCA2NCAxNjkuNCA2NGM3LjMgMCAxNC42LS4zIDIxLjgtLjlDMjc0IDQ5NiAyNzIgNDgwLjIgMjcyIDQ2NGMwLTQ3LjMgMTcuMS05MC41IDQ1LjQtMTI0elwiXVxufTtcbmNvbnN0IGZhQmFza2V0YmFsbEJhbGwgPSBmYUJhc2tldGJhbGw7XG5jb25zdCBmYVNhdGVsbGl0ZURpc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2F0ZWxsaXRlLWRpc2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjVdLCBcImY3YzBcIiwgXCJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyQzM4My4xIDAgNTEyIDEyOC45IDUxMiAyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJDNDQ4IDE2NC4zIDM0Ny43IDY0IDIyNCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTYwLjYgMjIwLjZMMTY0LjcgMzI0LjdsMjguNC0yOC40Yy0uNy0yLjYtMS4xLTUuNC0xLjEtOC4zYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTIuOSAwLTUuNi0uNC04LjMtMS4xbC0yOC40IDI4LjRMMjkxLjQgNDUxLjRjMTQuNSAxNC41IDExLjggMzguOC03LjMgNDYuM0MyNjAuNSA1MDYuOSAyMzQuOSA1MTIgMjA4IDUxMkM5My4xIDUxMiAwIDQxOC45IDAgMzA0YzAtMjYuOSA1LjEtNTIuNSAxNC40LTc2LjFjNy41LTE5IDMxLjgtMjEuOCA0Ni4zLTcuM3pNMjI0IDk2YzEwNiAwIDE5MiA4NiAxOTIgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjcsIFwiYXJyb3ctYWx0LWNpcmNsZS11cFwiXSwgXCJmMzViXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyem0xMS4zLTM5NS4zbDExMiAxMTJjNC42IDQuNiA1LjkgMTEuNSAzLjUgMTcuNHMtOC4zIDkuOS0xNC44IDkuOWwtNjQgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2LTY0IDBjLTYuNSAwLTEyLjMtMy45LTE0LjgtOS45cy0xLjEtMTIuOSAzLjUtMTcuNGwxMTItMTEyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXVxufTtcbmNvbnN0IGZhQXJyb3dBbHRDaXJjbGVVcCA9IGZhQ2lyY2xlVXA7XG5jb25zdCBmYU1vYmlsZVNjcmVlbkJ1dHRvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb2JpbGUtc2NyZWVuLWJ1dHRvbicsXG4gIGljb246IFszODQsIDUxMiwgW1wibW9iaWxlLWFsdFwiXSwgXCJmM2NkXCIsIFwiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBMMzA0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwxNiA2NHpNMjI0IDQ0OGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMDQgNjRMODAgNjRsMCAzMjAgMjI0IDAgMC0zMjB6XCJdXG59O1xuY29uc3QgZmFNb2JpbGVBbHQgPSBmYU1vYmlsZVNjcmVlbkJ1dHRvbjtcbmNvbnN0IGZhVm9sdW1lSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2b2x1bWUtaGlnaCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODI2NiwgXCJ2b2x1bWUtdXBcIl0sIFwiZjAyOFwiLCBcIk01MzMuNiAzMi41QzU5OC41IDg1LjIgNjQwIDE2NS44IDY0MCAyNTZzLTQxLjUgMTcwLjctMTA2LjQgMjIzLjVjLTEwLjMgOC40LTI1LjQgNi44LTMzLjgtMy41cy02LjgtMjUuNCAzLjUtMzMuOEM1NTcuNSAzOTguMiA1OTIgMzMxLjIgNTkyIDI1NnMtMzQuNS0xNDIuMi04OC43LTE4Ni4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41ek00NzMuMSAxMDdjNDMuMiAzNS4yIDcwLjkgODguOSA3MC45IDE0OXMtMjcuNyAxMTMuOC03MC45IDE0OWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzQ3NS4zIDM0MS4zIDQ5NiAzMDEuMSA0OTYgMjU2cy0yMC43LTg1LjMtNTMuMi0xMTEuOGMtMTAuMy04LjQtMTEuOC0yMy41LTMuNS0zMy44czIzLjUtMTEuOCAzMy44LTMuNXptLTYwLjUgNzQuNUM0MzQuMSAxOTkuMSA0NDggMjI1LjkgNDQ4IDI1NnMtMTMuOSA1Ni45LTM1LjQgNzQuNWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzM5My4xIDI4NC40IDQwMCAyNzEgNDAwIDI1NnMtNi45LTI4LjQtMTcuNy0zNy4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41ek0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NGwwIDM4NGMwIDEyLjYtNy40IDI0LTE4LjkgMjkuMnMtMjUgMy4xLTM0LjQtNS4zTDEzMS44IDM1MiA2NCAzNTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjcuOCAwTDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6XCJdXG59O1xuY29uc3QgZmFWb2x1bWVVcCA9IGZhVm9sdW1lSGlnaDtcbmNvbnN0IGZhVXNlcnNSYXlzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXJzLXJheXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OTNcIiwgXCJNNDEgN0MzMS42LTIuMyAxNi40LTIuMyA3IDdTLTIuMyAzMS42IDcgNDFsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQxIDd6TTU5OSA3TDUyNyA3OWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDB6TTcgNTA1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNyA0NzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45em01OTIgMGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyek0zMjAgMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4ek0yMTIuMSAzMzZjLTIuNyA3LjUtNC4xIDE1LjYtNC4xIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0YzAtOC40LTEuNC0xNi41LTQuMS0yNGMtLjUtMS40LTEtMi43LTEuNi00Yy05LjQtMjIuMy0yOS44LTM4LjktNTQuMy00M2MtMy45LS43LTcuOS0xLTEyLTFsLTgwIDBjLTQuMSAwLTguMSAuMy0xMiAxYy0uOCAuMS0xLjcgLjMtMi41IC41Yy0yNC45IDUuMS00NS4xIDIzLTUzLjQgNDYuNXpNMTc1LjggMjI0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTI2LjUgMzJDMTE5LjkgMjU2IDk2IDI3OS45IDk2IDMwOS4zYzAgMTQuNyAxMS45IDI2LjcgMjYuNyAyNi43bDU2LjEgMGM4LTM0LjEgMzIuOC02MS43IDY1LjItNzMuNmMtNy41LTQuMS0xNi4yLTYuNC0yNS4zLTYuNGwtNjkuMyAwem0zNjggODBjMTQuNyAwIDI2LjctMTEuOSAyNi43LTI2LjdjMC0yOS41LTIzLjktNTMuMy01My4zLTUzLjNsLTY5LjMgMGMtOS4yIDAtMTcuOCAyLjMtMjUuMyA2LjRjMzIuNCAxMS45IDU3LjIgMzkuNSA2NS4yIDczLjZsNTYuMSAwek00NjQgMjI0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpcIl1cbn07XG5jb25zdCBmYVdhbGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YWxsZXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1NTVcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIyNGMwLTM1LjMtMjguNy02NC02NC02NEw4MCAxMjhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMzY4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMzJ6TTQxNiAyNzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhQ2xpcGJvYXJkQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xpcGJvYXJkLWNoZWNrJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNDZjXCIsIFwiTTE5MiAwYy00MS44IDAtNzcuNCAyNi43LTkwLjUgNjRMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTM3LjUgMEMyNjkuNCAyNi43IDIzMy44IDAgMTkyIDB6bTAgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0zMDUgMjczTDE3NyA0MDFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDc5IDMzN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQ3IDQ3TDI3MSAyMzljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45elwiXVxufTtcbmNvbnN0IGZhRmlsZUF1ZGlvID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtYXVkaW8nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYxYzdcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODgtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDIyNCAwIDY0IDB6TTI1NiAwbDAgMTI4IDEyOCAwTDI1NiAwem0yIDIyNi4zYzM3LjEgMjIuNCA2MiA2My4xIDYyIDEwOS43cy0yNC45IDg3LjMtNjIgMTA5LjdjLTcuNiA0LjYtMTcuNCAyLjEtMjItNS40cy0yLjEtMTcuNCA1LjQtMjJDMjY5LjQgNDAxLjUgMjg4IDM3MC45IDI4OCAzMzZzLTE4LjYtNjUuNS00Ni41LTgyLjNjLTcuNi00LjYtMTAtMTQuNC01LjQtMjJzMTQuNC0xMCAyMi01LjR6bS05MS45IDMwLjljNiAyLjUgOS45IDguMyA5LjkgMTQuOGwwIDEyOGMwIDYuNS0zLjkgMTIuMy05LjkgMTQuOHMtMTIuOSAxLjEtMTcuNC0zLjVMMTEzLjQgMzc2IDgwIDM3NmMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDhjMC04LjggNy4yLTE2IDE2LTE2bDMzLjQgMCAzNS4zLTM1LjNjNC42LTQuNiAxMS41LTUuOSAxNy40LTMuNXptNTEgMzQuOWM2LjYtNS45IDE2LjctNS4zIDIyLjYgMS4zQzI0OS44IDMwNC42IDI1NiAzMTkuNiAyNTYgMzM2cy02LjIgMzEuNC0xNi4zIDQyLjdjLTUuOSA2LjYtMTYgNy4xLTIyLjYgMS4zcy03LjEtMTYtMS4zLTIyLjZjNS4xLTUuNyA4LjEtMTMuMSA4LjEtMjEuM3MtMy4xLTE1LjctOC4xLTIxLjNjLTUuOS02LjYtNS4zLTE2LjcgMS4zLTIyLjZ6XCJdXG59O1xuY29uc3QgZmFCdXJnZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVyZ2VyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJoYW1idXJnZXJcIl0sIFwiZjgwNVwiLCBcIk02MS4xIDIyNEM0NSAyMjQgMzIgMjExIDMyIDE5NC45YzAtMS45IC4yLTMuNyAuNi01LjZDMzcuOSAxNjguMyA3OC44IDMyIDI1NiAzMnMyMTguMSAxMzYuMyAyMjMuNCAxNTcuM2MuNSAxLjkgLjYgMy43IC42IDUuNmMwIDE2LjEtMTMgMjkuMS0yOS4xIDI5LjFMNjEuMSAyMjR6TTE0NCAxMjhhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMjQwIDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpNMjcyIDk2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6TTE2IDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OGwzODQgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEw2NCAzNTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4em0xNiA5NmMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE2elwiXVxufTtcbmNvbnN0IGZhSGFtYnVyZ2VyID0gZmFCdXJnZXI7XG5jb25zdCBmYVdyZW5jaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3cmVuY2gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyOTVdLCBcImYwYWRcIiwgXCJNMzUyIDMyMGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MGMwLTE1LjMtMi4yLTMwLjEtNi4yLTQ0LjJjLTMuMS0xMC44LTE2LjQtMTMuMi0yNC4zLTUuM2wtNzYuOCA3Ni44Yy0zIDMtNy4xIDQuNy0xMS4zIDQuN0wzMzYgMTkyYy04LjggMC0xNi03LjItMTYtMTZsMC01Ny40YzAtNC4yIDEuNy04LjMgNC43LTExLjNsNzYuOC03Ni44YzcuOS03LjkgNS40LTIxLjItNS4zLTI0LjNDMzgyLjEgMi4yIDM2Ny4zIDAgMzUyIDBDMjYzLjYgMCAxOTIgNzEuNiAxOTIgMTYwYzAgMTkuMSAzLjQgMzcuNSA5LjUgNTQuNUwxOS45IDM5Ni4xQzcuMiA0MDguOCAwIDQyNi4xIDAgNDQ0LjFDMCA0ODEuNiAzMC40IDUxMiA2Ny45IDUxMmMxOCAwIDM1LjMtNy4yIDQ4LTE5LjlMMjk3LjUgMzEwLjVjMTcgNi4yIDM1LjQgOS41IDU0LjUgOS41ek04MCA0MDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbmNvbnN0IGZhQnVncyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidWdzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGQwXCIsIFwiTTE2NC41IDEwNy40bDMzLjQtNzMuNWM1LjUtMTIuMSAuMS0yNi4zLTExLjktMzEuOHMtMjYuMy0uMS0zMS44IDExLjlMMTI4IDcxLjcgMTAxLjkgMTQuMUM5Ni40IDIgODIuMS0zLjMgNzAuMSAyLjFTNTIuNyAyMS45IDU4LjEgMzMuOWwzMy40IDczLjVjLTEwLjIgNy4xLTE4LjIgMTctMjIuOSAyOC42bC0xNyAwLTQuMS0yMC43Yy0yLjYtMTMtMTUuMi0yMS40LTI4LjItMTguOFMtMi4xIDExMS43IC41IDEyNC43bDggNDBDMTAuNyAxNzUuOSAyMC42IDE4NCAzMiAxODRsMzIgMCAwIDIzLjMtMzcuOCA5LjVjLTkuNSAyLjQtMTYuNiAxMC4yLTE3LjkgMTkuOWwtOCA1NmMtMS45IDEzLjEgNy4yIDI1LjMgMjAuNCAyNy4yczI1LjMtNy4yIDI3LjItMjAuNGw1LjctNDAgMTguNC00LjZDODIuNyAyNzQuNiAxMDMuOCAyODggMTI4IDI4OHM0NS4zLTEzLjQgNTYuMS0zMy4ybDE4LjQgNC42IDUuNyA0MGMxLjkgMTMuMSAxNCAyMi4yIDI3LjIgMjAuNHMyMi4yLTE0IDIwLjQtMjcuMmwtOC01NmMtMS40LTkuNy04LjUtMTcuNS0xNy45LTE5LjlMMTkyIDIwNy4zbDAtMjMuMyAzMiAwYzExLjQgMCAyMS4zLTguMSAyMy41LTE5LjNsOC00MGMyLjYtMTMtNS44LTI1LjYtMTguOC0yOC4ycy0yNS42IDUuOC0yOC4yIDE4LjhMMjA0LjMgMTM2bC0xNyAwYy00LjctMTEuNi0xMi43LTIxLjUtMjIuOS0yOC42ek00OTYgMjg2LjVsNjUuNi00N2MxMC44LTcuNyAxMy4zLTIyLjcgNS42LTMzLjVzLTIyLjctMTMuMy0zMy41LTUuNmwtNTEuNCAzNi44IDYuMS02Mi45YzEuMy0xMy4yLTguNC0yNC45LTIxLjYtMjYuMnMtMjQuOSA4LjQtMjYuMiAyMS42TDQzMi44IDI1MGMtMTIuMyAxLTI0LjIgNS42LTM0LjEgMTMuM0wzODQgMjU0LjhsNi44LTIwYzQuMi0xMi42LTIuNS0yNi4yLTE1LTMwLjRzLTI2LjIgMi41LTMwLjQgMTVsLTEzLjEgMzguNmMtMy43IDEwLjggLjggMjIuOCAxMC43IDI4LjVsMjcuNyAxNkwzNTkgMzIyLjcgMzIxLjUgMzEyYy05LjQtMi43LTE5LjUgLjYtMjUuNSA4LjNsLTM0LjkgNDQuNWMtOC4yIDEwLjQtNi40IDI1LjUgNC4xIDMzLjdzMjUuNSA2LjQgMzMuNy00LjFsMjUtMzEuOCAxOC4yIDUuMmMtLjUgMjIuNiAxMSA0NC43IDMyIDU2LjhzNDUuOSAxMSA2NS4yLS43bDEzLjYgMTMuMi0xNS4xIDM3LjVjLTQuOSAxMi4zIDEgMjYuMyAxMy4zIDMxLjJzMjYuMy0xIDMxLjItMTMuM0w1MDMuNSA0NDBjMy42LTkuMSAxLjQtMTkuNC01LjYtMjYuMmwtMjgtMjcuMSAxMS42LTIwLjEgMjcuNyAxNmM5LjkgNS43IDIyLjUgMy43IDMwLTQuOUw1NjYuMiAzNDdjOC43LTEwIDcuOC0yNS4xLTIuMi0zMy45cy0yNS4xLTcuOC0zMy45IDIuMmwtMTMuOSAxNS45LTE0LjctOC41YzEuNy0xMi40LS4yLTI1LTUuNS0zNi4yelwiXVxufTtcbmNvbnN0IGZhUnVwZWVTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3J1cGVlLXNpZ24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MzYwLCBcInJ1cGVlXCJdLCBcImYxNTZcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0YzAgNTguOC0zNS4yIDEwOS4zLTg1LjcgMTMxLjdsNTEuNCAxMjguNGM2LjYgMTYuNC0xLjQgMzUtMTcuOCA0MS42cy0zNS0xLjQtNDEuNi0xNy44TDEwNi4zIDMyMCA2NCAzMjBsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMMCAyODggMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBMNjQgOTZsMCAxNjB6bTI1Ni41IDE2LjRjLS45IDYgMCA4LjcgLjQgOS44Yy40IDEuMSAxLjQgMi42IDQuMiA0LjljNy4yIDUuNyAxOC43IDEwIDM3LjkgMTYuOGwxLjMgLjVjMTYgNS42IDM4LjcgMTMuNiA1NS43IDI4LjFjOS41IDguMSAxNy45IDE4LjYgMjMuMSAzMi4zYzUuMSAxMy43IDYuMSAyOC41IDMuOCA0NGMtNC4yIDI4LjEtMjAuNSA0OS4zLTQzLjggNjAuOWMtMjIuMSAxMS00OC4xIDEyLjUtNzMuMiA4bC0uMiAwczAgMCAwIDBjLTkuMy0xLjgtMjAuNS01LjctMjkuMy05Yy02LTIuMy0xMi42LTQuOS0xNy43LTYuOWMwIDAgMCAwIDAgMGMtMi41LTEtNC42LTEuOC02LjMtMi41Yy0xNi41LTYuNC0yNC42LTI1LTE4LjItNDEuNHMyNC45LTI0LjYgNDEuNC0xOC4yYzIuNiAxIDUuMiAyIDcuOSAzLjFjMCAwIDAgMCAwIDBjNC44IDEuOSA5LjggMy45IDE1LjQgNmM4LjggMy4zIDE1LjMgNS40IDE4LjcgNmMxNS43IDIuOCAyNi43IC44IDMyLjktMi4zYzUtMi41IDgtNiA5LjEtMTNjMS02LjkgLjItMTAuNS0uNS0xMi4zYy0uNi0xLjctMS44LTMuNi00LjUtNS45Yy02LjktNS44LTE4LjItMTAuNC0zNi45LTE3bC0zLTEuMWMtMTUuNS01LjQtMzctMTMtNTMuMy0yNS45Yy05LjUtNy41LTE4LjMtMTcuNi0yMy43LTMxYy01LjUtMTMuNC02LjYtMjgtNC40LTQzLjJjOC40LTU3LjEgNjctNzggMTE2LjktNjguOWM2LjkgMS4zIDI3LjMgNS44IDM1LjQgOC40YzE2LjkgNS4yIDI2LjMgMjMuMiAyMS4xIDQwLjFzLTIzLjIgMjYuMy00MC4xIDIxLjFjLTQuNy0xLjQtMjIuMy01LjUtMjcuOS02LjVjLTE0LjYtMi43LTI1LjgtLjQtMzIuNiAzLjJjLTYuMyAzLjMtOC45IDcuNi05LjUgMTJ6XCJdXG59O1xuY29uc3QgZmFSdXBlZSA9IGZhUnVwZWVTaWduO1xuY29uc3QgZmFGaWxlSW1hZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1pbWFnZScsXG4gIGljb246IFszODQsIDUxMiwgWzEyODQ0M10sIFwiZjFjNVwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMjI0IDAgNjQgMHpNMjU2IDBsMCAxMjggMTI4IDBMMjU2IDB6TTY0IDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNTIgMzJjNS4zIDAgMTAuMiAyLjYgMTMuMiA2LjlsODggMTI4YzMuNCA0LjkgMy43IDExLjMgMSAxNi41cy04LjIgOC42LTE0LjIgOC42bC04OCAwLTQwIDAtNDggMC00OCAwYy01LjggMC0xMS4xLTMuMS0xMy45LTguMXMtMi44LTExLjIgLjItMTYuMWw0OC04MGMyLjktNC44IDguMS03LjggMTMuNy03LjhzMTAuOCAyLjkgMTMuNyA3LjhsMTIuOCAyMS40IDQ4LjMtNzAuMmMzLTQuMyA3LjktNi45IDEzLjItNi45elwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlUXVlc3Rpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXF1ZXN0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMDgsIFwicXVlc3Rpb24tY2lyY2xlXCJdLCBcImYwNTlcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2OS44IDE2NS4zYzcuOS0yMi4zIDI5LjEtMzcuMyA1Mi44LTM3LjNsNTguMyAwYzM0LjkgMCA2My4xIDI4LjMgNjMuMSA2My4xYzAgMjIuNi0xMi4xIDQzLjUtMzEuNyA1NC44TDI4MCAyNjQuNGMtLjIgMTMtMTAuOSAyMy42LTI0IDIzLjZjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTMuNWMwLTguNiA0LjYtMTYuNSAxMi4xLTIwLjhsNDQuMy0yNS40YzQuNy0yLjcgNy42LTcuNyA3LjYtMTMuMWMwLTguNC02LjgtMTUuMS0xNS4xLTE1LjFsLTU4LjMgMGMtMy40IDAtNi40IDIuMS03LjUgNS4zbC0uNCAxLjJjLTQuNCAxMi41LTE4LjIgMTktMzAuNiAxNC42cy0xOS0xOC4yLTE0LjYtMzAuNmwuNC0xLjJ6TTIyNCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpcIl1cbn07XG5jb25zdCBmYVF1ZXN0aW9uQ2lyY2xlID0gZmFDaXJjbGVRdWVzdGlvbjtcbmNvbnN0IGZhUGxhbmVEZXBhcnR1cmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtZGVwYXJ0dXJlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzQ3XSwgXCJmNWIwXCIsIFwiTTM4MSAxMTQuOUwxODYuMSA0MS44Yy0xNi43LTYuMi0zNS4yLTUuMy01MS4xIDIuN0w4OS4xIDY3LjRDNzggNzMgNzcuMiA4OC41IDg3LjYgOTUuMmwxNDYuOSA5NC41TDEzNiAyNDAgNzcuOCAyMTQuMWMtOC43LTMuOS0xOC44LTMuNy0yNy4zIC42TDE4LjMgMjMwLjhjLTkuMyA0LjctMTEuOCAxNi44LTUgMjQuN2w3My4xIDg1LjNjNi4xIDcuMSAxNSAxMS4yIDI0LjMgMTEuMmwxMzcuNyAwYzUgMCA5LjktMS4yIDE0LjMtMy40TDUzNS42IDIxMi4yYzQ2LjUtMjMuMyA4Mi41LTYzLjMgMTAwLjgtMTEyQzY0NS45IDc1IDYyNy4yIDQ4IDYwMC4yIDQ4bC01Ny40IDBjLTIwLjIgMC00MC4yIDQuOC01OC4yIDE0TDM4MSAxMTQuOXpNMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsNTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpcIl1cbn07XG5jb25zdCBmYUhhbmRzaGFrZVNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzaGFrZS1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMzUtMTA1LjhjLTEuMS0xMS40LTYuMy0yMi4zLTE1LjMtMzAuN2wtMTM0LjItMTIzLTIzLjQgMTguMi0yNi0yMC4zIDc3LjItNjAuMWM3LTUuNCAxNy00LjIgMjIuNSAyLjhzNC4yIDE3LTIuOCAyMi41bC0yMC45IDE2LjJMNTEyIDMxNi44IDUxMiAxMjhsLS43IDAtMy45LTIuNUw0MzQuOCA3OWMtMTUuMy05LjgtMzMuMi0xNS01MS40LTE1Yy0yMS44IDAtNDMgNy41LTYwIDIxLjJsLTg5LjcgNzIuNi0yNS44LTIwLjMgODEuOC02Ni4yYy0xMS42LTQuOS0yNC4xLTcuNC0zNi44LTcuNEMyMzQgNjQgMjE1LjcgNjkuNiAyMDAgODBsLTM1LjUgMjMuN0wzOC44IDUuMXpNOTYgMTcxLjZMNDAuNiAxMjggMCAxMjggMCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE4MC40ek00MTMuNiA0MjEuOUwxMjggMTk2LjkgMTI4IDM1MmwyOC4yIDAgOTEuNCA4My40YzE5LjYgMTcuOSA0OS45IDE2LjUgNjcuOC0zLjFjNS41LTYuMSA5LjItMTMuMiAxMS4xLTIwLjZsMTcgMTUuNmMxOS41IDE3LjkgNDkuOSAxNi42IDY3LjgtMi45Yy44LS44IDEuNS0xLjcgMi4yLTIuNnpNNDggMzIwYTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpNNTQ0IDEyOGwwIDIyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjI0LTk2IDB6bTMyIDIwOGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbmNvbnN0IGZhQm9va0Jvb2ttYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stYm9va21hcmsnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwYmJcIiwgXCJNMCA5NkMwIDQzIDQzIDAgOTYgMGw5NiAwIDAgMTkwLjdjMCAxMy40IDE1LjUgMjAuOSAyNiAxMi41TDI3MiAxNjBsNTQgNDMuMmMxMC41IDguNCAyNiAuOSAyNi0xMi41TDM1MiAwbDMyIDAgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwTDk2IDUxMmMtNTMgMC05Ni00My05Ni05NkwwIDk2ek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjU2IDAgMC02NEw5NiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbmNvbnN0IGZhQ29kZUJyYW5jaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb2RlLWJyYW5jaCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjEyNlwiLCBcIk04MCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04MC0yNGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgODcuOGMxOC44LTEwLjkgNDAuNy0xNy4xIDY0LTE3LjFsOTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTYuN0MzMDcuNyAxNDEgMjg4IDExMi44IDI4OCA4MGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCA2LjdjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTk2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNi43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjNjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM2wwLTYuNyAwLTE5OC43QzE5LjcgMTQxIDAgMTEyLjggMCA4MEMwIDM1LjggMzUuOCAwIDgwIDBzODAgMzUuOCA4MCA4MHptMjMyIDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNODAgNDU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpcIl1cbn07XG5jb25zdCBmYUhhdENvd2JveSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYXQtY293Ym95JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmOGMwXCIsIFwiTTMyMCA2NGMxNC40IDAgMjIuMy03IDMwLjgtMTQuNEMzNjAuNCA0MS4xIDM3MC43IDMyIDM5MiAzMmM0OS4zIDAgODQuNCAxNTIuMiA5Ny45IDIyMS45QzQ0Ny44IDI3Mi4xIDM5MC45IDI4OCAzMjAgMjg4cy0xMjcuOC0xNS45LTE2OS45LTM0LjFDMTYzLjYgMTg0LjIgMTk4LjcgMzIgMjQ4IDMyYzIxLjMgMCAzMS42IDkuMSA0MS4yIDE3LjZDMjk3LjcgNTcgMzA1LjYgNjQgMzIwIDY0ek0xMTEuMSAyNzAuN2M0Ny4yIDI0LjUgMTE3LjUgNDkuMyAyMDkgNDkuM3MxNjEuOC0yNC44IDIwOC45LTQ5LjNjMjQuOC0xMi45IDQ5LjgtMjguMyA3MC4xLTQ3LjdjNy45LTcuOSAyMC4yLTkuMiAyOS42LTMuM2M5LjUgNS45IDEzLjUgMTcuOSA5LjkgMjguNWMtMTMuNSAzNy43LTM4LjQgNzIuMy02Ni4xIDEwMC42QzUyMy43IDM5OC45IDQ0My42IDQ0OCAzMjAgNDQ4cy0yMDMuNi00OS4xLTI1Mi41LTk5LjJDMzkuOCAzMjAuNCAxNC45IDI4NS44IDEuNCAyNDguMWMtMy42LTEwLjYgLjQtMjIuNiA5LjktMjguNWM5LjUtNS45IDIxLjctNC41IDI5LjYgMy4zYzIwLjQgMTkuNCA0NS4zIDM0LjggNzAuMSA0Ny43elwiXVxufTtcbmNvbnN0IGZhQnJpZGdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyaWRnZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRjOFwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsNDAgMCAwIDY0TDAgMTYwIDAgMjg4YzUzIDAgOTYgNDMgOTYgOTZsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2bDAtMTI4LTcyIDAgMC02NCA0MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00NTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMzI4IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTIwMCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwelwiXVxufTtcbmNvbnN0IGZhUGhvbmVGbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bob25lLWZsaXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzODEsIFwicGhvbmUtYWx0XCJdLCBcImY4NzlcIiwgXCJNMzQ3LjEgMjQuNmM3LjctMTguNiAyOC0yOC41IDQ3LjQtMjMuMmw4OCAyNEM0OTkuOSAzMC4yIDUxMiA0NiA1MTIgNjRjMCAyNDcuNC0yMDAuNiA0NDgtNDQ4IDQ0OGMtMTggMC0zMy44LTEyLjEtMzguNi0yOS41bC0yNC04OGMtNS4zLTE5LjQgNC42LTM5LjcgMjMuMi00Ny40bDk2LTQwYzE2LjMtNi44IDM1LjItMi4xIDQ2LjMgMTEuNkwyMDcuMyAzNjhjNzAuNC0zMy4zIDEyNy40LTkwLjMgMTYwLjctMTYwLjdMMzE4LjcgMTY3Yy0xMy43LTExLjItMTguNC0zMC0xMS42LTQ2LjNsNDAtOTZ6XCJdXG59O1xuY29uc3QgZmFQaG9uZUFsdCA9IGZhUGhvbmVGbGlwO1xuY29uc3QgZmFUcnVja0Zyb250ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZyb250JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMmI3XCIsIFwiTTAgODBDMCAzNS44IDM1LjggMCA4MCAwTDQzMiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMjg4YzAgMjYuMi0xMi42IDQ5LjQtMzIgNjRsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMi0yNTYgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4QzEyLjYgNDE3LjQgMCAzOTQuMiAwIDM2OEwwIDgwem0xMjkuOSA3Mi4yTDExMiAyMjRsMjg4IDAtMTcuOS03MS44QzM3OC41IDEzOCAzNjUuNyAxMjggMzUxIDEyOGwtMTkwIDBjLTE0LjcgMC0yNy41IDEwLTMxIDI0LjJ6TTEyOCAzMjBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjg4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUNhdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMDhdLCBcImY2YmVcIiwgXCJNMzIwIDE5MmwxNy4xIDBjMjIuMSAzOC4zIDYzLjUgNjQgMTEwLjkgNjRjMTEgMCAyMS44LTEuNCAzMi00bDAgNCAwIDMyIDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQwLjhMMjgwIDQ0OGw1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNDQgMGMtNTMgMC05Ni00My05Ni05NmwwLTIyMy41YzAtMTYuMS0xMi0yOS44LTI4LTMxLjhsLTcuOS0xYy0xNy41LTIuMi0zMC0xOC4yLTI3LjgtMzUuN3MxOC4yLTMwIDM1LjctMjcuOGw3LjkgMWM0OCA2IDg0LjEgNDYuOCA4NC4xIDk1LjNsMCA4NS4zYzM0LjQtNTEuNyA5My4yLTg1LjggMTYwLTg1Ljh6bTE2MCAyNi41czAgMCAwIDBjLTEwIDMuNS0yMC44IDUuNS0zMiA1LjVjLTI4LjQgMC01NC0xMi40LTcxLjYtMzJjMCAwIDAgMCAwIDBjLTMuNy00LjEtNy04LjUtOS45LTEzLjJDMzU3LjMgMTY0IDM1MiAxNDYuNiAzNTIgMTI4YzAgMCAwIDAgMCAwbDAtOTYgMC0yMCAwLTEuM0MzNTIgNC44IDM1Ni43IC4xIDM2Mi42IDBsLjIgMGMzLjMgMCA2LjQgMS42IDguNCA0LjJjMCAwIDAgMCAwIC4xTDM4NCAyMS4zbDI3LjIgMzYuM0w0MTYgNjRsNjQgMCA0LjgtNi40TDUxMiAyMS4zIDUyNC44IDQuM2MwIDAgMCAwIDAtLjFjMi0yLjYgNS4xLTQuMiA4LjQtNC4ybC4yIDBDNTM5LjMgLjEgNTQ0IDQuOCA1NDQgMTAuN2wwIDEuMyAwIDIwIDAgOTZjMCAxNy4zLTQuNiAzMy42LTEyLjYgNDcuNmMtMTEuMyAxOS44LTI5LjYgMzUuMi01MS40IDQyLjl6TTQzMiAxMjhhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptNDggMTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyelwiXVxufTtcbmNvbnN0IGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5jaG9yLWNpcmNsZS1leGNsYW1hdGlvbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRhYlwiLCBcIk0zMjAgOTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptMjEuMSA4MEMzNjcgMTU4LjggMzg0IDEyOS40IDM4NCA5NmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDMzLjQgMTcgNjIuOCA0Mi45IDgwTDIyNCAxNzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDIwOC00OCAwYy01MyAwLTk2LTQzLTk2LTk2bDAtNi4xIDcgN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMOTcgMjYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw3IDMxOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDctNyAwIDYuMWMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGw4MCAwIDgwIDBjOC4yIDAgMTYuMy0uNiAyNC4yLTEuOGMtMjIuMi0xNi4yLTQwLjQtMzcuNS01My02Mi4yTDMyMCA0NDhsMC04MCAwLTEyOCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMC45IDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTk2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMC0xNDRjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFUcnVja0ZpZWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZpZWxkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNThkXCIsIFwiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDIyNCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMmw1MS44IDBjMjUuMyAwIDQ4LjIgMTQuOSA1OC41IDM4bDUyLjggMTE4LjhjLjUgMS4xIC45IDIuMSAxLjMgMy4ybDQuMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsLTEyOCAwYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMC0zMnpNMzg0IDIyNGw4NS45IDAtNDIuNy05NkwzODQgMTI4bDAgOTZ6TTE2MCA0MzJhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0zNjgtNDhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpcIl1cbn07XG5jb25zdCBmYVJvdXRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvdXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNGQ3XCIsIFwiTTUxMiA5NmMwIDUwLjItNTkuMSAxMjUuMS04NC42IDE1NWMtMy44IDQuNC05LjQgNi4xLTE0LjUgNUwzMjAgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTI3Ni40IDBjOC43LTkuOSAxOS4zLTIyLjYgMzAtMzYuOGM2LjMtOC40IDEyLjgtMTcuNiAxOS0yNy4yTDQxNiA0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDBjLTUzIDAtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZsMzkuOCAwYy0yMS0zMS41LTM5LjgtNjcuNy0zOS44LTk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZ6TTExNy4xIDQ4OS4xYy0zLjggNC4zLTcuMiA4LjEtMTAuMSAxMS4zbC0xLjggMi0uMi0uMmMtNiA0LjYtMTQuNiA0LTIwLTEuOEM1OS44IDQ3MyAwIDQwMi41IDAgMzUyYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAzMC0yMS4xIDY3LTQzLjUgOTcuOWMtMTAuNyAxNC43LTIxLjcgMjgtMzAuOCAzOC41bC0uNiAuN3pNMTI4IDM1MmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek00MTYgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUNsaXBib2FyZFF1ZXN0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC1xdWVzdGlvbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRlM1wiLCBcIk0xOTIgMGMtNDEuOCAwLTc3LjQgMjYuNy05MC41IDY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zNy41IDBDMjY5LjQgMjYuNyAyMzMuOCAwIDE5MiAwem0wIDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMTA1LjggMjI5LjNjNy45LTIyLjMgMjkuMS0zNy4zIDUyLjgtMzcuM2w1OC4zIDBjMzQuOSAwIDYzLjEgMjguMyA2My4xIDYzLjFjMCAyMi42LTEyLjEgNDMuNS0zMS43IDU0LjhMMjE2IDMyOC40Yy0uMiAxMy0xMC45IDIzLjYtMjQgMjMuNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xMy41YzAtOC42IDQuNi0xNi41IDEyLjEtMjAuOGw0NC4zLTI1LjRjNC43LTIuNyA3LjYtNy43IDcuNi0xMy4xYzAtOC40LTYuOC0xNS4xLTE1LjEtMTUuMWwtNTguMyAwYy0zLjQgMC02LjQgMi4xLTcuNSA1LjNsLS40IDEuMmMtNC40IDEyLjUtMTguMiAxOS0zMC42IDE0LjZzLTE5LTE4LjItMTQuNi0zMC42bC40LTEuMnpNMTYwIDQxNmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbmNvbnN0IGZhUGFub3JhbWEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFub3JhbWEnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUyMDlcIiwgXCJNNDUuNiAzMkMyMC40IDMyIDAgNTIuNCAwIDc3LjZMMCA0MzQuNEMwIDQ1OS42IDIwLjQgNDgwIDQ1LjYgNDgwYzUuMSAwIDEwLS44IDE0LjctMi40Qzc0LjYgNDcyLjggMTc3LjYgNDQwIDMyMCA0NDBzMjQ1LjQgMzIuOCAyNTkuNiAzNy42YzQuNyAxLjYgOS43IDIuNCAxNC43IDIuNGMyNS4yIDAgNDUuNi0yMC40IDQ1LjYtNDUuNmwwLTM1Ni43QzY0MCA1Mi40IDYxOS42IDMyIDU5NC40IDMyYy01IDAtMTAgLjgtMTQuNyAyLjRDNTY1LjQgMzkuMiA0NjIuNCA3MiAzMjAgNzJTNzQuNiAzOS4yIDYwLjQgMzQuNEM1NS42IDMyLjggNTAuNyAzMiA0NS42IDMyek05NiAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjcyIDBjNy45IDAgMTUuNCAzLjkgMTkuOCAxMC41TDUxMi4zIDM1M2M1LjQgOCA1LjYgMTguNCAuNCAyNi41cy0xNC43IDEyLjMtMjQuMiAxMC43QzQ0Mi43IDM4Mi40IDM4NS4yIDM3NiAzMjAgMzc2Yy02NS42IDAtMTIzLjQgNi41LTE2OS4zIDE0LjRjLTkuOCAxLjctMTkuNy0yLjktMjQuNy0xMS41cy00LjMtMTkuNCAxLjktMjcuMkwxOTcuMyAyNjVjNC42LTUuNyAxMS40LTkgMTguNy05czE0LjIgMy4zIDE4LjcgOWwyNi40IDMzLjEgODctMTI3LjZjNC41LTYuNiAxMS45LTEwLjUgMTkuOC0xMC41elwiXVxufTtcbmNvbnN0IGZhQ29tbWVudE1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudC1tZWRpY2FsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmN2Y1XCIsIFwiTTI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMlMwIDEyNS4xIDAgMjQwYzAgNDUuMSAxNy43IDg2LjggNDcuNyAxMjAuOWMtMS45IDI0LjUtMTEuNCA0Ni4zLTIxLjQgNjIuOWMtNS41IDkuMi0xMS4xIDE2LjYtMTUuMiAyMS42Yy0yLjEgMi41LTMuNyA0LjQtNC45IDUuN2MtLjYgLjYtMSAxLjEtMS4zIDEuNGwtLjMgLjNjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwYy00LjYgNC42LTUuOSAxMS40LTMuNCAxNy40YzIuNSA2IDguMyA5LjkgMTQuOCA5LjljMjguNyAwIDU3LjYtOC45IDgxLjYtMTkuM2MyMi45LTEwIDQyLjQtMjEuOSA1NC4zLTMwLjZjMzEuOCAxMS41IDY3IDE3LjkgMTA0LjEgMTcuOXpNMjI0IDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQ4IDAgMC00OHpcIl1cbn07XG5jb25zdCBmYVRlZXRoT3BlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZWV0aC1vcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNjJmXCIsIFwiTTk2IDMyQzQzIDMyIDAgNzUgMCAxMjhsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0YzAtNTMtNDMtOTYtOTYtOTZMOTYgMzJ6TTIyNCA5NmMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDU2YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTU2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em04MCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgNTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNTZ6TTk2IDEyOGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em0zMzYgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0ek05NiA0ODBsMzg0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDUzIDQzIDk2IDk2IDk2em0wLTY0Yy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNGMwIDI2LjUtMjEuNSA0OC00OCA0OHptODAtNDhsMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh6bTE3NiA0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCAyNi41LTIxLjUgNDgtNDggNDh6bTgwLTQ4bDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4elwiXVxufTtcbmNvbnN0IGZhRmlsZUNpcmNsZU1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY2lyY2xlLW1pbnVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGVkXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0w2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTM4NCA2NGwtMTI4IDBMMjU2IDAgMzg0IDEyOHpNMjg4IDM2OGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMjQgMGMwLTguOC03LjItMTYtMTYtMTZsLTEyOCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYVRhZ3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFncycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjAyY1wiLCBcIk0zNDUgMzkuMUw0NzIuOCAxNjguNGM1Mi40IDUzIDUyLjQgMTM4LjIgMCAxOTEuMkwzNjAuOCA0NzIuOWMtOS4zIDkuNC0yNC41IDkuNS0zMy45IC4ycy05LjUtMjQuNS0uMi0zMy45TDQzOC42IDMyNS45YzMzLjktMzQuMyAzMy45LTg5LjQgMC0xMjMuN0wzMTAuOSA3Mi45Yy05LjMtOS40LTkuMi0yNC42IC4yLTMzLjlzMjQuNi05LjIgMzMuOSAuMnpNMCAyMjkuNUwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDE0OS41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMTY4IDE2OGMyNSAyNSAyNSA2NS41IDAgOTAuNUwyNzcuMyA0NDIuN2MtMjUgMjUtNjUuNSAyNS05MC41IDBsLTE2OC0xNjhDNi43IDI2Mi43IDAgMjQ2LjUgMCAyMjkuNXpNMTQ0IDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwelwiXVxufTtcbmNvbnN0IGZhV2luZUdsYXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dpbmUtZ2xhc3MnLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjc4NjNdLCBcImY0ZTNcIiwgXCJNMzIuMSAyOS4zQzMzLjUgMTIuOCA0Ny40IDAgNjQgMEwyNTYgMGMxNi42IDAgMzAuNSAxMi44IDMxLjkgMjkuM2wxNCAxNjguNGM2IDcyLTQyLjUgMTM1LjItMTA5LjkgMTUwLjZsMCA5OS42IDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTgwIDAtODAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0OCAwIDAtOTkuNkM2MC42IDMzMyAxMi4xIDI2OS44IDE4LjEgMTk3LjhsMTQtMTY4LjR6bTU2IDk4LjdsMTQzLjggMC01LjMtNjRMOTMuNCA2NGwtNS4zIDY0elwiXVxufTtcbmNvbnN0IGZhRm9yd2FyZEZhc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9yd2FyZC1mYXN0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTE5NywgXCJmYXN0LWZvcndhcmRcIl0sIFwiZjA1MFwiLCBcIk0xOC40IDQ0NWMxMS4yIDUuMyAyNC41IDMuNiAzNC4xLTQuNEwyMjQgMjk3LjcgMjI0IDQxNmMwIDEyLjQgNy4yIDIzLjcgMTguNCAyOXMyNC41IDMuNiAzNC4xLTQuNEw0NDggMjk3LjcgNDQ4IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTE4LjNMMjc2LjUgNzEuNGMtOS41LTcuOS0yMi44LTkuNy0zNC4xLTQuNFMyMjQgODMuNiAyMjQgOTZsMCAxMTguM0w1Mi41IDcxLjRjLTkuNS03LjktMjIuOC05LjctMzQuMS00LjRTMCA4My42IDAgOTZMMCA0MTZjMCAxMi40IDcuMiAyMy43IDE4LjQgMjl6XCJdXG59O1xuY29uc3QgZmFGYXN0Rm9yd2FyZCA9IGZhRm9yd2FyZEZhc3Q7XG5jb25zdCBmYUZhY2VNZWhCbGFuayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLW1laC1ibGFuaycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU2NiwgXCJtZWgtYmxhbmtcIl0sIFwiZjVhNFwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTIwOC40LTQ4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTEyOCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFNZWhCbGFuayA9IGZhRmFjZU1laEJsYW5rO1xuY29uc3QgZmFTcXVhcmVQYXJraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wYXJraW5nJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3MzU5LCBcInBhcmtpbmdcIl0sIFwiZjU0MFwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0xOTIgMjU2bDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQ4IDAgMCA2NHptNDggNjRsLTQ4IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0IDAtMTIwYzAtMjIuMSAxNy45LTQwIDQwLTQwbDcyIDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZ6XCJdXG59O1xuY29uc3QgZmFQYXJraW5nID0gZmFTcXVhcmVQYXJraW5nO1xuY29uc3QgZmFIb3VzZVNpZ25hbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1zaWduYWwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUwMTJcIiwgXCJNMzU3LjcgOC41Yy0xMi4zLTExLjMtMzEuMi0xMS4zLTQzLjQgMGwtMjA4IDE5MmMtOS40IDguNi0xMi43IDIyLTguNSAzNGM4Ny4xIDI1LjMgMTU1LjYgOTQuMiAxODAuMyAxODEuNkw0NjQgNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTEyIDMyIDBjMTMuMiAwIDI1LTguMSAyOS44LTIwLjNzMS42LTI2LjItOC4xLTM1LjJsLTIwOC0xOTJ6TTI4OCAyMDhjMC04LjggNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZsMC02NHpNMjQgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0YzEwMS42IDAgMTg0IDgyLjQgMTg0IDE4NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTI4LjEtMTAzLjktMjMyLTIzMi0yMzJ6bTggMjU2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMCAzNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRjNDguNiAwIDg4IDM5LjQgODggODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTc1LjEtNjAuOS0xMzYtMTM2LTEzNmMtMTMuMyAwLTI0IDEwLjctMjQgMjR6XCJdXG59O1xuY29uc3QgZmFCYXJzUHJvZ3Jlc3MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFycy1wcm9ncmVzcycsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGFza3MtYWx0XCJdLCBcImY4MjhcIiwgXCJNNDQ4IDE2MGwtMTI4IDAgMC0zMiAxMjggMCAwIDMyek00OCA2NEMyMS41IDY0IDAgODUuNSAwIDExMmwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggNjR6TTQ0OCAzNTJsMCAzMi0yNTYgMCAwLTMyIDI1NiAwek00OCAyODhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAyODh6XCJdXG59O1xuY29uc3QgZmFUYXNrc0FsdCA9IGZhQmFyc1Byb2dyZXNzO1xuY29uc3QgZmFGYXVjZXREcmlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhdWNldC1kcmlwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Njg4XSwgXCJlMDA2XCIsIFwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTIgOTYtMTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMjU2IDg0bC0zMS0zLjktMS0uMS0xIC4xTDE5MiA4NCA5NiA5NkM3OC4zIDk2IDY0IDgxLjcgNjQgNjRzMTQuMy0zMiAzMi0zMmw5NiAxMiAwLTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDIyLjYtMjIuNmM2LTYgMTQuMS05LjQgMjIuNi05LjRsMTguNyAwIDAtNDMuOCAzMi00IDMyIDQgMCA0My44IDE4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNEwzMjAgMTkybDMyIDBjODguNCAwIDE2MCA3MS42IDE2MCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMycy0xNC4zLTMyLTMyLTMybC0zNi4xIDBjLTIwLjIgMjktNTMuOSA0OC05MS45IDQ4cy03MS43LTE5LTkxLjktNDhMMzIgMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek00MzYuOCA0MjMuNGMxLjktNC41IDYuMy03LjQgMTEuMi03LjRzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMWwxOC4yLTQyLjR6XCJdXG59O1xuY29uc3QgZmFDYXJ0RmxhdGJlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJ0LWZsYXRiZWQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImRvbGx5LWZsYXRiZWRcIl0sIFwiZjQ3NFwiLCBcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjg4YzAgNDQuMiAzNS44IDgwIDgwIDgwbDE4LjcgMGMtMS44IDUtMi43IDEwLjQtMi43IDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhjMC01LjYtMS0xMS0yLjctMTZsMTk3LjUgMGMtMS44IDUtMi43IDEwLjQtMi43IDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhjMC01LjYtMS0xMS0yLjctMTZsNjYuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00NjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjg4QzEyOCAzNS44IDkyLjIgMCA0OCAwTDMyIDB6TTE5MiA4MGwwIDE5MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMjAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE5MmMwLTI2LjUtMjEuNS00OC00OC00OGwtOTYgMCAwIDE0NGMwIDUuOS0zLjIgMTEuMy04LjUgMTQuMXMtMTEuNSAyLjUtMTYuNC0uOEw0MDAgMTYzLjJsLTM5LjEgMjYuMWMtNC45IDMuMy0xMS4yIDMuNi0xNi40IC44cy04LjUtOC4yLTguNS0xNC4xbDAtMTQ0LTk2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4elwiXVxufTtcbmNvbnN0IGZhRG9sbHlGbGF0YmVkID0gZmFDYXJ0RmxhdGJlZDtcbmNvbnN0IGZhQmFuU21va2luZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYW4tc21va2luZycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODY4NSwgXCJzbW9raW5nLWJhblwiXSwgXCJmNTRkXCIsIFwiTTk5LjUgMTQ0LjhMMTc4LjcgMjI0bDk2IDk2IDkyLjUgOTIuNUMzMzUuOSA0MzQuOSAyOTcuNSA0NDggMjU2IDQ0OEMxNTAgNDQ4IDY0IDM2MiA2NCAyNTZjMC00MS41IDEzLjEtNzkuOSAzNS41LTExMS4yek0zMzMuMyAyODhsLTMyLTMyIDgyLjcgMCAwIDMyLTUwLjcgMHptMzIgMzJsMzQuNyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNmwtMTMwLjcgMEwxNDQuOCA5OS41QzE3Ni4xIDc3LjEgMjE0LjUgNjQgMjU2IDY0YzEwNiAwIDE5MiA4NiAxOTIgMTkyYzAgNDEuNS0xMy4xIDc5LjktMzUuNSAxMTEuMkwzNjUuMyAzMjB6TTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0yNzIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnM3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNnpNMjI5LjUgMzIwbC05Ni05NkwxMTIgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMTE3LjUgMHpcIl1cbn07XG5jb25zdCBmYVNtb2tpbmdCYW4gPSBmYUJhblNtb2tpbmc7XG5jb25zdCBmYVRlcm1pbmFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Rlcm1pbmFsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMTIwXCIsIFwiTTkuNCA4Ni42Qy0zLjEgNzQuMS0zLjEgNTMuOSA5LjQgNDEuNHMzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE3OC43IDI1NiA5LjQgODYuNnpNMjU2IDQxNmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjg4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFNb2JpbGVCdXR0b24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9iaWxlLWJ1dHRvbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjEwYlwiLCBcIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6TTE5MiA0MDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhSG91c2VNZWRpY2FsRmxhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1tZWRpY2FsLWZsYWcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MTRcIiwgXCJNNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMTEyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTI4YzAgOC44LTcuMiAxNi0xNiAxNmwtMTEyIDAgMCAzMjAtNjQgMCAwLTMyMCAwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjc2LjggMzkuN0w0MTYgMTU5bDAgMzUzIDEgMC0uMiAwTDk2IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTItMzIgMGMtMTMuNCAwLTI1LjQtOC4zLTMwLTIwLjlzLTEtMjYuNyA5LjItMzUuNGwyMjQtMTkyYzEyLTEwLjMgMjkuNy0xMC4zIDQxLjcgMHpNMjI0IDIwOGwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG5jb25zdCBmYUJhc2tldFNob3BwaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jhc2tldC1zaG9wcGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic2hvcHBpbmctYmFza2V0XCJdLCBcImYyOTFcIiwgXCJNMjUzLjMgMzUuMWM2LjEtMTEuOCAxLjUtMjYuMy0xMC4yLTMyLjRzLTI2LjMtMS41LTMyLjQgMTAuMkwxMTcuNiAxOTIgMzIgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyTDgzLjkgNDYzLjVDOTEgNDkyIDExNi42IDUxMiAxNDYgNTEyTDQzMCA1MTJjMjkuNCAwIDU1LTIwIDYyLjEtNDguNUw1NDQgMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04NS42IDBMMzY1LjMgMTIuOUMzNTkuMiAxLjIgMzQ0LjctMy40IDMzMi45IDIuN3MtMTYuMyAyMC42LTEwLjIgMzIuNEw0MDQuMyAxOTJsLTIzMi42IDBMMjUzLjMgMzUuMXpNMTkyIDMwNGwwIDk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptOTYtMTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgOTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC05NmMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCAxNmwwIDk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG5jb25zdCBmYVNob3BwaW5nQmFza2V0ID0gZmFCYXNrZXRTaG9wcGluZztcbmNvbnN0IGZhVGFwZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YXBlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNGRiXCIsIFwiTTM4MC44IDQxNmM0MS41LTQwLjcgNjcuMi05Ny4zIDY3LjItMTYwQzQ0OCAxMzIuMyAzNDcuNyAzMiAyMjQgMzJTMCAxMzIuMyAwIDI1NlMxMDAuMyA0ODAgMjI0IDQ4MGwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYzLjIgMHpNMjI0IDE2MGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptNjQgOTZhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwelwiXVxufTtcbmNvbnN0IGZhQnVzU2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1cy1zaW1wbGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImJ1cy1hbHRcIl0sIFwiZjU1ZVwiLCBcIk0yMjQgMEMzNDguOCAwIDQ0OCAzNS4yIDQ0OCA4MGwwIDE2IDAgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzItMTkyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCA5NiAwIDgwQzAgMzUuMiA5OS4yIDAgMjI0IDB6TTY0IDEyOGwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiA5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTgwIDQwMGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTI4OCAwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYUJ1c0FsdCA9IGZhQnVzU2ltcGxlO1xuY29uc3QgZmFFeWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXllJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDY1XSwgXCJmMDZlXCIsIFwiTTI4OCAzMmMtODAuOCAwLTE0NS41IDM2LjgtMTkyLjYgODAuNkM0OC42IDE1NiAxNy4zIDIwOCAyLjUgMjQzLjdjLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42QzE3LjMgMzA0IDQ4LjYgMzU2IDk1LjQgMzk5LjRDMTQyLjUgNDQzLjIgMjA3LjIgNDgwIDI4OCA0ODBzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjFjMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjZjLTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjFDNDMzLjUgNjguOCAzNjguOCAzMiAyODggMzJ6TTE0NCAyNTZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTY0YzAgMzUuMy0yOC43IDY0LTY0IDY0Yy03LjEgMC0xMy45LTEuMi0yMC4zLTMuM2MtNS41LTEuOC0xMS45IDEuNi0xMS43IDcuNGMuMyA2LjkgMS4zIDEzLjggMy4yIDIwLjdjMTMuNyA1MS4yIDY2LjQgODEuNiAxMTcuNiA2Ny45czgxLjYtNjYuNCA2Ny45LTExNy42Yy0xMS4xLTQxLjUtNDcuOC02OS40LTg4LjYtNzEuMWMtNS44LS4yLTkuMiA2LjEtNy40IDExLjdjMi4xIDYuNCAzLjMgMTMuMiAzLjMgMjAuM3pcIl1cbn07XG5jb25zdCBmYUZhY2VTYWRDcnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1zYWQtY3J5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU3LCBcInNhZC1jcnlcIl0sIFwiZjViM1wiLCBcIk0zNTIgNDkzLjRjLTI5LjYgMTItNjIuMSAxOC42LTk2IDE4LjZzLTY2LjQtNi42LTk2LTE4LjZMMTYwIDI4OGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDE4OS44QzUxLjUgNDMzLjUgMCAzNTAuOCAwIDI1NkMwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZjMCA5NC44LTUxLjUgMTc3LjUtMTI4IDIyMS44TDM4NCAyODhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAyMDUuNHpNMTk1LjIgMjMzLjZjNS4zIDcuMSAxNS4zIDguNSAyMi40IDMuMnM4LjUtMTUuMyAzLjItMjIuNGMtMzAuNC00MC41LTkxLjItNDAuNS0xMjEuNiAwYy01LjMgNy4xLTMuOSAxNy4xIDMuMiAyMi40czE3LjEgMy45IDIyLjQtMy4yYzE3LjYtMjMuNSA1Mi44LTIzLjUgNzAuNCAwem0xMjEuNiAwYzE3LjYtMjMuNSA1Mi44LTIzLjUgNzAuNCAwYzUuMyA3LjEgMTUuMyA4LjUgMjIuNCAzLjJzOC41LTE1LjMgMy4yLTIyLjRjLTMwLjQtNDAuNS05MS4yLTQwLjUtMTIxLjYgMGMtNS4zIDcuMS0zLjkgMTcuMSAzLjIgMjIuNHMxNy4xIDMuOSAyMi40LTMuMnpNMjA4IDMzNmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpcIl1cbn07XG5jb25zdCBmYVNhZENyeSA9IGZhRmFjZVNhZENyeTtcbmNvbnN0IGZhQXVkaW9EZXNjcmlwdGlvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhdWRpby1kZXNjcmlwdGlvbicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjI5ZVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMTMuNSAxNzMuM2w3MiAxNDRjNS45IDExLjkgMS4xIDI2LjMtMTAuNyAzMi4ycy0yNi4zIDEuMS0zMi4yLTEwLjdsLTkuNC0xOC45LTgyLjIgMC05LjQgMTguOWMtNS45IDExLjktMjAuMyAxNi43LTMyLjIgMTAuN3MtMTYuNy0yMC4zLTEwLjctMzIuMmw3Mi0xNDRjNC4xLTguMSAxMi40LTEzLjMgMjEuNS0xMy4zczE3LjQgNS4xIDIxLjUgMTMuM3ptLS40IDEwNi42TDE5MiAyMzcuN2wtMjEuMSA0Mi4yIDQyLjIgMHpNMzA0IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw1NiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC01NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NHptNDggMjRsMCA5NiAzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC0zMiAwelwiXVxufTtcbmNvbnN0IGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tbWlsaXRhcnktdG8tcGVyc29uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTRjXCIsIFwiTTcxIDEyLjVjLTguNiAxLTE1IDguMi0xNSAxNi44YzAgOS4zIDcuNSAxNi44IDE2LjcgMTYuOWwxMTEuNCAwYzguOC0uMSAxNS45LTcuMiAxNS45LTE2TDIwMCAxNmMwLTkuNS04LjMtMTctMTcuOC0xNS45TDcxIDEyLjV6TTE4OS41IDc4LjFsLTEyMi45IDBDNjQuOSA4My44IDY0IDg5LjggNjQgOTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTYuMi0uOS0xMi4yLTIuNS0xNy45ek0zMiAyNTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxLjggMCAzLjUtLjEgNS4yLS40TDUzIDIwOC42QzQwLjEgMjIwLjMgMzIgMjM3LjIgMzIgMjU2em0xOTAuMiA0Mi41YzEuMS0zLjMgMS44LTYuOCAxLjgtMTAuNWwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwYy0zLjcgMC03LjQgLjMtMTAuOSAuOUwyMjIuMiAyOTguNXpNMzg0IDE2MGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTMyIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDB6TTIxNS44IDQ1MC4xYzUuMi00LjYgOC4yLTExLjEgOC4yLTE4LjFzLTMtMTMuNS04LjItMTguMWwtNjQtNTZjLTcuMS02LjItMTcuMS03LjctMjUuNy0zLjhTMTEyIDM2Ni42IDExMiAzNzZsMCAzMi04OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDg4IDAgMCAzMmMwIDkuNCA1LjUgMTggMTQuMSAyMS45czE4LjYgMi40IDI1LjctMy44bDY0LTU2ek0yODggNDMxLjljMCA2LjkgMi45IDEzLjUgOC4xIDE4LjFsNjQgNTYuNGM3LjEgNi4yIDE3LjEgNy44IDI1LjcgMy45czE0LjEtMTIuNCAxNC4xLTIxLjlsMC0zMi40IDg4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg4IDAgMC0zMmMwLTkuNC01LjUtMTgtMTQuMS0yMS45cy0xOC42LTIuNC0yNS43IDMuOGwtNjQgNTZjLTUuMiA0LjUtOC4yIDExLjEtOC4yIDE4elwiXVxufTtcbmNvbnN0IGZhRmlsZVNoaWVsZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLXNoaWVsZCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRmMFwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMjQgMGwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMCAwIDQ3LTkyLjggMzcuMWMtMjEuMyA4LjUtMzUuMiAyOS4xLTM1LjIgNTJjMCA1Ni42IDE4LjkgMTQ4IDk0LjIgMjA4LjNjLTkgNC44LTE5LjMgNy42LTMwLjIgNy42TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMzg0IDY0bC0xMjggMEwyNTYgMCAzODQgMTI4em0zOS4xIDk3LjdjNS43LTIuMyAxMi4xLTIuMyAxNy44IDBsMTIwIDQ4QzU3MCAyNzcuNCA1NzYgMjg2LjIgNTc2IDI5NmMwIDYzLjMtMjUuOSAxNjguOC0xMzQuOCAyMTQuMmMtNS45IDIuNS0xMi42IDIuNS0xOC41IDBDMzEzLjkgNDY0LjggMjg4IDM1OS4zIDI4OCAyOTZjMC05LjggNi0xOC42IDE1LjEtMjIuM2wxMjAtNDh6TTUyNy40IDMxMkw0MzIgMjczLjhsMCAxODcuOGM2OC4yLTMzIDkxLjUtOTkgOTUuNC0xNDkuN3pcIl1cbn07XG5jb25zdCBmYVVzZXJTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTA2XCIsIFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMMzUzLjMgMjUxLjZDNDA3LjkgMjM3IDQ0OCAxODcuMiA0NDggMTI4QzQ0OCA1Ny4zIDM5MC43IDAgMzIwIDBDMjUwLjIgMCAxOTMuNSA1NS44IDE5MiAxMjUuMkwzOC44IDUuMXpNMjY0LjMgMzA0LjNDMTcwLjUgMzA5LjQgOTYgMzg3LjIgOTYgNDgyLjNjMCAxNi40IDEzLjMgMjkuNyAyOS43IDI5LjdsMzg4LjYgMGMzLjkgMCA3LjYtLjcgMTEtMi4xbC0yNjEtMjA1LjZ6XCJdXG59O1xuY29uc3QgZmFQZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVuJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzk0XSwgXCJmMzA0XCIsIFwiTTM2Mi43IDE5LjNMMzE0LjMgNjcuNyA0NDQuMyAxOTcuN2w0OC40LTQ4LjRjMjUtMjUgMjUtNjUuNSAwLTkwLjVMNDUzLjMgMTkuM2MtMjUtMjUtNjUuNS0yNS05MC41IDB6bS03MSA3MUw1OC42IDMyMy41Yy0xMC40IDEwLjQtMTggMjMuMy0yMi4yIDM3LjRMMSA0ODEuMkMtMS41IDQ4OS43IC44IDQ5OC44IDcgNTA1czE1LjMgOC41IDIzLjcgNi4xbDEyMC4zLTM1LjRjMTQuMS00LjIgMjctMTEuOCAzNy40LTIyLjJMNDIxLjcgMjIwLjMgMjkxLjcgOTAuM3pcIl1cbn07XG5jb25zdCBmYVRvd2VyT2JzZXJ2YXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG93ZXItb2JzZXJ2YXRpb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1ODZcIiwgXCJNMjQxLjcgMy40YzktNC41IDE5LjYtNC41IDI4LjYgMGwxNjAgODBjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOUM0MzkgMTM3LjUgNDI3LjcgMTQ0IDQxNiAxNDRsMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNC45IDAgMzIgMTkyIDY4LjkgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTUuNSAwYy0uNCAwLS44IDAtMS4xIDBsLTI1NC44IDBjLS40IDAtLjggMC0xLjEgMEwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjguOSAwIDMyLTE5Mi00LjkgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC04MGMtMTEuNyAwLTIzLTYuNS0yOC42LTE3LjdjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlsMTYwLTgwek0zMTQuNSA0NDhMMjU2IDM5OS4yIDE5Ny41IDQ0OGwxMTcgMHpNMTk3LjggMjU2bC00LjcgMjguM0wyNTYgMzM2LjhsNjIuOS01Mi41TDMxNC4yIDI1NmwtMTE2LjUgMHptLTEzLjkgODMuMmwtMTEuMiA2N0wyMTguNSAzNjhsLTM0LjYtMjguOHpNMjkzLjUgMzY4bDQ1LjggMzguMS0xMS4yLTY3TDI5My41IDM2OHpNMTc2IDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxNjAgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYwIDB6XCJdXG59O1xuY29uc3QgZmFGaWxlQ29kZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWNvZGUnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImYxYzlcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODgtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDIyNCAwIDY0IDB6TTI1NiAwbDAgMTI4IDEyOCAwTDI1NiAwek0xNTMgMjg5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcxIDMzN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0yNjUgMjU1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXVxufTtcbmNvbnN0IGZhU2lnbmFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NpZ25hbCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODI0NiwgXCJzaWduYWwtNVwiLCBcInNpZ25hbC1wZXJmZWN0XCJdLCBcImYwMTJcIiwgXCJNNTc2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00NDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ0OCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDIyNGwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek0xOTIgMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiA0MTZsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFTaWduYWw1ID0gZmFTaWduYWw7XG5jb25zdCBmYVNpZ25hbFBlcmZlY3QgPSBmYVNpZ25hbDtcbmNvbnN0IGZhQnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1cycsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODY1M10sIFwiZjIwN1wiLCBcIk0yODggMEM0MjIuNCAwIDUxMiAzNS4yIDUxMiA4MGwwIDE2IDAgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyLTE5MiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyYzAgMCAwIDAgMCAwbDAtMzJzMCAwIDAgMGwwLTE2QzY0IDM1LjIgMTUzLjYgMCAyODggMHpNMTI4IDE2MGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDExMiAwIDAtMTYwLTExMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzA0IDI4OGwxMTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMTIgMCAwIDE2MHpNMTQ0IDQwMGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTI4OCAwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMzg0IDgwYzAtOC44LTcuMi0xNi0xNi0xNkwyMDggNjRjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTYwIDBjOC44IDAgMTYtNy4yIDE2LTE2elwiXVxufTtcbmNvbnN0IGZhSGVhcnRDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoZWFydC1jaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MDFcIiwgXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOWwyLjYtMi40QzI2Ny4yIDQzOC42IDI1NiA0MDQuNiAyNTYgMzY4YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2YzI4LjMgMCA1NSA2LjcgNzguNyAxOC41Yy45LTYuNSAxLjMtMTMgMS4zLTE5LjZsMC01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMWwwIDUuOGMwIDQxLjUgMTcuMiA4MS4yIDQ3LjYgMTA5LjV6TTQzMiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43TDQ1NC42IDM2OGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0MzIgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0MDkuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQzMiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbmNvbnN0IGZhSG91c2VDaGltbmV5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLWNoaW1uZXknLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MzQ5OSwgXCJob21lLWxnXCJdLCBcImUzYWZcIiwgXCJNNTQzLjggMjg3LjZjMTcgMCAzMi0xNCAzMi0zMi4xYzEtOS0zLTE3LTExLTI0TDUxMiAxODVsMC0xMjFjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzYuN0wzMDkuNSA3Yy02LTUtMTQtNy0yMS03cy0xNSAxLTIyIDhMMTAgMjMxLjVjLTcgNy0xMCAxNS0xMCAyNGMwIDE4IDE0IDMyLjEgMzIgMzIuMWwzMiAwIDAgNjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOGwwIDExMmMwIDIyLjEgMTcuOSA0MCA0MCA0MGwxNiAwYzEuMiAwIDIuNC0uMSAzLjYtLjJjMS41IC4xIDMgLjIgNC41IC4ybDMxLjkgMCAyNCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtMjQgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjQgMCAyNGMwIDIyLjEgMTcuOSA0MCA0MCA0MGwyNCAwIDMyLjUgMGMxLjQgMCAyLjggMCA0LjItLjFjMS4xIC4xIDIuMiAuMSAzLjMgLjFsMTYgMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTE2LjJjLjMtMi42IC41LTUuMyAuNS04LjFsLS43LTE2MC4yIDMyIDB6XCJdXG59O1xuY29uc3QgZmFIb21lTGcgPSBmYUhvdXNlQ2hpbW5leTtcbmNvbnN0IGZhV2luZG93TWF4aW1pemUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2luZG93LW1heGltaXplJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcwXSwgXCJmMmQwXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDk2bDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDk2IDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYUZhY2VGcm93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWZyb3duJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NSwgXCJmcm93blwiXSwgXCJmMTE5XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNTkuMyAzODguN2MtMi42IDguNC0xMS42IDEzLjItMjAgMTAuNXMtMTMuMi0xMS42LTEwLjUtMjBDMTQ1LjIgMzI2LjEgMTk2LjMgMjg4IDI1NiAyODhzMTEwLjggMzguMSAxMjcuMyA5MS4zYzIuNiA4LjQtMi4xIDE3LjQtMTAuNSAyMHMtMTcuNC0yLjEtMjAtMTAuNUMzNDAuNSAzNDkuNCAzMDIuMSAzMjAgMjU2IDMyMHMtODQuNSAyOS40LTk2LjcgNjguN3pNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFGcm93biA9IGZhRmFjZUZyb3duO1xuY29uc3QgZmFQcmVzY3JpcHRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncHJlc2NyaXB0aW9uJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmNWIxXCIsIFwiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyTDAgMTkybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDUwLjcgMCAxMjggMTI4TDEzNy40IDQ1Ny40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDI4OCAzOTcuMyAzOTMuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDMzMy4zIDM1MiA0MzguNiAyNDYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyODggMzA2LjdsLTg1LjgtODUuOEMyNTEuNCAyMDkuMSAyODggMTY0LjggMjg4IDExMkMyODggNTAuMSAyMzcuOSAwIDE3NiAwTDMyIDB6TTE3NiAxNjBMNjQgMTYwbDAtOTYgMTEyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6XCJdXG59O1xuY29uc3QgZmFTaG9wID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Nob3AnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInN0b3JlLWFsdFwiXSwgXCJmNTRmXCIsIFwiTTM2LjggMTkybDU2Ni4zIDBjMjAuMyAwIDM2LjgtMTYuNSAzNi44LTM2LjhjMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRMNTU4LjIgMjEuNEM1NDkuMyA4IDUzNC40IDAgNTE4LjMgMEwxMjEuNyAwYy0xNiAwLTMxIDgtMzkuOSAyMS40TDYuMiAxMzQuN2MtNCA2LjEtNi4yIDEzLjItNi4yIDIwLjRDMCAxNzUuNSAxNi41IDE5MiAzNi44IDE5MnpNNjQgMjI0bDAgMTYwIDAgODBjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC04MCAwLTE2MC02NCAwIDAgMTYwLTE5MiAwIDAtMTYwLTY0IDB6bTQ0OCAwbDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNTYtNjQgMHpcIl1cbn07XG5jb25zdCBmYVN0b3JlQWx0ID0gZmFTaG9wO1xuY29uc3QgZmFGbG9wcHlEaXNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Zsb3BweS1kaXNrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTkwLCAxMjg0MjYsIFwic2F2ZVwiXSwgXCJmMGM3XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNDIuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNTIgNTAuN0MzNDAgMzguNyAzMjMuNyAzMiAzMDYuNyAzMkw2NCAzMnptMCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHpNMjI0IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG5jb25zdCBmYVNhdmUgPSBmYUZsb3BweURpc2s7XG5jb25zdCBmYVZpaGFyYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aWhhcmEnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2YTdcIiwgXCJNMjgxIDIyTDMwNS44IDQuN2MxLjMtLjkgMi43LTEuOCA0LjEtMi40QzMxMy4xIC43IDMxNi42IDAgMzIwIDBzNi45IC43IDEwLjEgMi4yYzEuNCAuNyAyLjggMS41IDQuMSAyLjRMMzU5IDIyQzM5MyA0NS44IDQzMC44IDYzLjUgNDcwLjggNzQuNGwyMyA2LjNjMS44IC41IDMuNiAxLjEgNS4yIDJjMy4yIDEuNyA1LjkgNCA4LjEgNi44YzMuOCA0LjkgNS42IDExLjMgNC43IDE3LjhjLS40IDIuOC0xLjIgNS40LTIuNSA3LjhjLTEuNyAzLjItNCA1LjktNi44IDguMWMtNC4zIDMuMi05LjYgNS4xLTE1LjEgNC45bC03LjUgMCAwIDU2LjEgNi40IDUuMSA1LjIgNC4xYzIxLjEgMTYuNyA0NSAyOS42IDcwLjUgMzguMWwyOC45IDkuNmMxLjYgLjUgMy4yIDEuMiA0LjYgMmMzLjEgMS43IDUuOCA0LjEgNy44IDYuOXMzLjUgNi4xIDQuMSA5LjZjLjUgMi43IC42IDUuNSAuMSA4LjNzLTEuNCA1LjQtMi43IDcuOGMtMS43IDMuMS00LjEgNS44LTYuOSA3LjhzLTYuMSAzLjUtOS42IDQuMWMtMS42IC4zLTMuMyAuNC01IC40TDU0NCAyODhsMCA2NS45YzIwLjUgMjIuOCA0Ny40IDM5LjIgNzcuNCA0Ni43QzYzMiA0MDMgNjQwIDQxMi42IDY0MCA0MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTE2MCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xNjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRjMC0xMS40IDgtMjEgMTguNi0yMy40YzMwLTcuNiA1Ni45LTIzLjkgNzcuNC00Ni43TDk2IDI4OGwtMzkuNCAwYy0xLjcgMC0zLjQtLjEtNS0uNGMtMy41LS43LTYuOC0yLjEtOS42LTQuMXMtNS4yLTQuNy03LTcuOGMtMS4zLTIuNC0yLjMtNS0yLjctNy44cy0uNC01LjYgLjEtOC4zYy43LTMuNSAyLjEtNi44IDQuMS05LjZzNC43LTUuMiA3LjgtNi45YzEuNC0uOCAzLTEuNSA0LjYtMmwyOC45LTkuNmMyNS41LTguNSA0OS40LTIxLjQgNzAuNS0zOC4xbDUuMi00LjEgNi40LTUuMSAwLTguMSAwLTQ4LTcuNSAwYy01LjUgLjEtMTAuOC0xLjctMTUuMS00LjljLTIuOC0yLjEtNS4xLTQuOC02LjgtOC4xYy0xLjItMi40LTIuMS01LTIuNS03LjhjLS45LTYuNSAuOS0xMi44IDQuNy0xNy44YzIuMS0yLjggNC44LTUuMSA4LjEtNi44YzEuNi0uOCAzLjQtMS41IDUuMi0ybDIzLTYuM0MyMDkuMiA2My41IDI0NyA0NS44IDI4MSAyMnpNNDE2IDEyOGwtOTYgMC05NiAwIDAgNjQgNzIgMCA0OCAwIDcyIDAgMC02NHpNMTYwIDI4OGwwIDY0IDEzNiAwIDI0IDAgMjQgMCAxMzYgMCAwLTY0LTEzNiAwLTI0IDBzMCAwIDAgMGwtMjQgMC0xMzYgMHpcIl1cbn07XG5jb25zdCBmYVNjYWxlVW5iYWxhbmNlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzY2FsZS11bmJhbGFuY2VkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJiYWxhbmNlLXNjYWxlLWxlZnRcIl0sIFwiZjUxNVwiLCBcIk01MjIuMSA2Mi40YzE2LjgtNS42IDI1LjgtMjMuNyAyMC4yLTQwLjVTNTE4LjYtMy45IDUwMS45IDEuNmwtMTEzIDM3LjdDMzc1IDE1LjggMzQ5LjMgMCAzMjAgMGMtNDQuMiAwLTgwIDM1LjgtODAgODBjMCAzIC4yIDUuOSAuNSA4LjhMMTE3LjkgMTI5LjZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmwxMzUuNS00NS4yYzQuNSAzLjIgOS4zIDUuOSAxNC40IDguMkwyODggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTI5NC43YzIxLTkuMiAzNy4yLTI3IDQ0LjItNDlsMTI1LjktNDJ6TTQzOS42IDI4OEw1MTIgMTYzLjggNTg0LjQgMjg4bC0xNDQuOSAwek01MTIgMzg0YzYyLjkgMCAxMTUuMi0zNCAxMjYtNzguOWMyLjYtMTEtMS0yMi4zLTYuNy0zMi4xTDUzNi4xIDEwOS44Yy01LTguNi0xNC4yLTEzLjgtMjQuMS0xMy44cy0xOS4xIDUuMy0yNC4xIDEzLjhMMzkyLjcgMjczLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjFDMzk2LjggMzUwIDQ0OS4xIDM4NCA1MTIgMzg0ek0xMjkuMiAyOTEuOEwyMDEuNiA0MTYgNTYuNyA0MTZsNzIuNC0xMjQuMnpNMy4yIDQzMy4xQzE0IDQ3OCA2Ni4zIDUxMiAxMjkuMiA1MTJzMTE1LjItMzQgMTI2LTc4LjljMi42LTExLTEtMjIuMy02LjctMzIuMUwxNTMuMiAyMzcuOGMtNS04LjYtMTQuMi0xMy44LTI0LjEtMTMuOHMtMTkuMSA1LjMtMjQuMSAxMy44TDkuOSA0MDEuMWMtNS43IDkuOC05LjMgMjEuMS02LjcgMzIuMXpcIl1cbn07XG5jb25zdCBmYUJhbGFuY2VTY2FsZUxlZnQgPSBmYVNjYWxlVW5iYWxhbmNlZDtcbmNvbnN0IGZhU29ydFVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NvcnQtdXAnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInNvcnQtYXNjXCJdLCBcImYwZGVcIiwgXCJNMTgyLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhsMjU2IDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTI4LTEyOHpcIl1cbn07XG5jb25zdCBmYVNvcnRBc2MgPSBmYVNvcnRVcDtcbmNvbnN0IGZhQ29tbWVudERvdHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudC1kb3RzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTcyLCA2MjA3NSwgXCJjb21tZW50aW5nXCJdLCBcImY0YWRcIiwgXCJNMjU2IDQ0OGMxNDEuNCAwIDI1Ni05My4xIDI1Ni0yMDhTMzk3LjQgMzIgMjU2IDMyUzAgMTI1LjEgMCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuM2MwIDAgMCAwIDAgMGMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45ek0xMjggMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwelwiXVxufTtcbmNvbnN0IGZhQ29tbWVudGluZyA9IGZhQ29tbWVudERvdHM7XG5jb25zdCBmYVBsYW50V2lsdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwbGFudC13aWx0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNWFhXCIsIFwiTTI4OCAxMjBjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEzYy0yOS4zIDEwLTQ4IDM0LjUtNDggNzAuMWMwIDI3LjkgMjUuMyA3NC44IDY2IDExMS42YzMuOCAzLjUgOC45IDUuMyAxNCA1LjNzMTAuMi0xLjggMTQtNS4zYzQwLjctMzYuOCA2Ni04My43IDY2LTExMS42YzAtMzUuNi0xOC43LTYwLjItNDgtNzAuMWwwLTEzQzQ2NCA1My43IDQxMC4zIDAgMzQ0IDBTMjI0IDUzLjcgMjI0IDEyMGwwIDIxLjhDMjA3LjMgMTMzIDE4OC4yIDEyOCAxNjggMTI4Yy02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMGwwIDEzYy0yOS4zIDEwLTQ4IDM0LjUtNDggNzAuMUMwIDM1OSAyNS4zIDQwNS45IDY2IDQ0Mi43YzMuOCAzLjUgOC45IDUuMyAxNCA1LjNzMTAuMi0xLjggMTQtNS4zYzQwLjctMzYuOCA2Ni04My43IDY2LTExMS42YzAtMzUuNi0xOC43LTYwLjItNDgtNzAuMWwwLTEzYzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAzMiAwIDIwMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjAwIDAtMzIgMC0xMjh6XCJdXG59O1xuY29uc3QgZmFEaWFtb25kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYW1vbmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5ODMwXSwgXCJmMjE5XCIsIFwiTTI4NC4zIDExLjdjLTE1LjYtMTUuNi00MC45LTE1LjYtNTYuNiAwbC0yMTYgMjE2Yy0xNS42IDE1LjYtMTUuNiA0MC45IDAgNTYuNmwyMTYgMjE2YzE1LjYgMTUuNiA0MC45IDE1LjYgNTYuNiAwbDIxNi0yMTZjMTUuNi0xNS42IDE1LjYtNDAuOSAwLTU2LjZsLTIxNi0yMTZ6XCJdXG59O1xuY29uc3QgZmFGYWNlR3JpblNxdWludCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tc3F1aW50JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE4LCBcImdyaW4tc3F1aW50XCJdLCBcImY1ODVcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4OC4xIDMxMi44YzEyLjMtMy44IDI0LjMgNi45IDE5LjMgMTguN0MzODIuNCAzOTAuNiAzMjQuMiA0MzIgMjU2LjMgNDMycy0xMjYuMi00MS40LTE1MS4xLTEwMC41Yy01LTExLjggNy0yMi41IDE5LjMtMTguN2MzOS43IDEyLjIgODQuNSAxOSAxMzEuOCAxOXM5Mi4xLTYuOCAxMzEuOC0xOXpNMTMzLjUgMTQ2LjdsODkuOSA0Ny45YzEwLjcgNS43IDEwLjcgMjEuMSAwIDI2LjhsLTg5LjkgNDcuOWMtNy45IDQuMi0xNy41LTEuNS0xNy41LTEwLjVjMC0yLjggMS01LjUgMi44LTcuNmwzNi00My4yLTM2LTQzLjJjLTEuOC0yLjEtMi44LTQuOC0yLjgtNy42YzAtOSA5LjYtMTQuNyAxNy41LTEwLjV6TTM5NiAxNTcuMWMwIDIuOC0xIDUuNS0yLjggNy42bC0zNiA0My4yIDM2IDQzLjJjMS44IDIuMSAyLjggNC44IDIuOCA3LjZjMCA5LTkuNiAxNC43LTE3LjUgMTAuNWwtODkuOS00Ny45Yy0xMC43LTUuNy0xMC43LTIxLjEgMC0yNi44bDg5LjktNDcuOWM3LjktNC4yIDE3LjUgMS41IDE3LjUgMTAuNXpcIl1cbn07XG5jb25zdCBmYUdyaW5TcXVpbnQgPSBmYUZhY2VHcmluU3F1aW50O1xuY29uc3QgZmFIYW5kSG9sZGluZ0RvbGxhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWhvbGRpbmctZG9sbGFyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJoYW5kLWhvbGRpbmctdXNkXCJdLCBcImY0YzBcIiwgXCJNMzEyIDI0bDAgMTAuNWM2LjQgMS4yIDEyLjYgMi43IDE4LjIgNC4yYzEyLjggMy40IDIwLjQgMTYuNiAxNyAyOS40cy0xNi42IDIwLjQtMjkuNCAxN2MtMTAuOS0yLjktMjEuMS00LjktMzAuMi01Yy03LjMtLjEtMTQuNyAxLjctMTkuNCA0LjRjLTIuMSAxLjMtMy4xIDIuNC0zLjUgM2MtLjMgLjUtLjcgMS4yLS43IDIuOGMwIC4zIDAgLjUgMCAuNmMuMiAuMiAuOSAxLjIgMy4zIDIuNmM1LjggMy41IDE0LjQgNi4yIDI3LjQgMTAuMWwuOSAuM3MwIDAgMCAwYzExLjEgMy4zIDI1LjkgNy44IDM3LjkgMTUuM2MxMy43IDguNiAyNi4xIDIyLjkgMjYuNCA0NC45Yy4zIDIyLjUtMTEuNCAzOC45LTI2LjcgNDguNWMtNi43IDQuMS0xMy45IDctMjEuMyA4LjhsMCAxMC42YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEuNGMtOS41LTIuMy0xOC4yLTUuMy0yNS42LTcuOGMtMi4xLS43LTQuMS0xLjQtNi0yYy0xMi42LTQuMi0xOS40LTE3LjgtMTUuMi0zMC40czE3LjgtMTkuNCAzMC40LTE1LjJjMi42IC45IDUgMS43IDcuMyAyLjVjMTMuNiA0LjYgMjMuNCA3LjkgMzMuOSA4LjNjOCAuMyAxNS4xLTEuNiAxOS4yLTQuMWMxLjktMS4yIDIuOC0yLjIgMy4yLTIuOWMuNC0uNiAuOS0xLjggLjgtNC4xbDAtLjJjMC0xIDAtMi4xLTQtNC42Yy01LjctMy42LTE0LjMtNi40LTI3LjEtMTAuM2wtMS45LS42Yy0xMC44LTMuMi0yNS03LjUtMzYuNC0xNC40Yy0xMy41LTguMS0yNi41LTIyLTI2LjYtNDQuMWMtLjEtMjIuOSAxMi45LTM4LjYgMjcuNy00Ny40YzYuNC0zLjggMTMuMy02LjQgMjAuMi04LjJMMjY0IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTU2OC4yIDMzNi4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVMMTkyIDUxMiAzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzYuOCAwIDQ0LjktMzZjMjIuNy0xOC4yIDUwLjktMjggODAtMjhsNzguMyAwIDE2IDAgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDEyMC42IDAgMTE5LjctODguMmMxNy44LTEzLjEgNDIuOC05LjMgNTUuOSA4LjV6TTE5My42IDM4NGMwIDAgMCAwIDAgMGwtLjkgMGMuMyAwIC42IDAgLjkgMHpcIl1cbn07XG5jb25zdCBmYUhhbmRIb2xkaW5nVXNkID0gZmFIYW5kSG9sZGluZ0RvbGxhcjtcbmNvbnN0IGZhQmFjdGVyaXVtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhY3Rlcml1bScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTA1YVwiLCBcIk00MjMuMSAzMC42YzMuNi0xMi43LTMuNy0yNi0xNi41LTI5LjdzLTI2IDMuNy0yOS43IDE2LjVsLTQuMiAxNC43Yy05LjgtLjQtMTkuOSAuNS0yOS45IDIuOGMtMTIuMSAyLjgtMjMuNyA1LjktMzQuOSA5LjRsLTUuOS0xMy43Yy01LjItMTIuMi0xOS4zLTE3LjgtMzEuNS0xMi42cy0xNy44IDE5LjMtMTIuNiAzMS41bDQuOSAxMS4zYy0yMiA5LjQtNDIgMjAuMS02MC4yIDMxLjhMMTk2IDgyLjdjLTcuNC0xMS0yMi4zLTE0LTMzLjMtNi43cy0xNCAyMi4zLTYuNyAzMy4zbDcuOCAxMS42Yy0xOCAxNS0zMy43IDMwLjgtNDcuMyA0Ny4xTDEwMyAxNTcuM2MtMTAuNC04LjMtMjUuNS02LjYtMzMuNyAzLjdzLTYuNiAyNS41IDMuNyAzMy43bDE1IDEyYy0yLjEgMy4yLTQuMSA2LjUtNiA5LjdjLTkuNCAxNS43LTE3IDMxLTIzLjIgNDUuM2wtOS45LTMuOWMtMTIuMy00LjktMjYuMyAxLjEtMzEuMiAxMy40czEuMSAyNi4zIDEzLjQgMzEuMmwxMS42IDQuNmMtLjMgMS4xLS42IDIuMS0uOSAzLjFjLTMuNSAxMi41LTUuNyAyMy4yLTcuMSAzMS4zYy0uNyA0LjEtMS4yIDcuNS0xLjYgMTAuM2MtLjIgMS40LS4zIDIuNi0uNCAzLjZsLS4xIDEuNC0uMSAuNiAwIC4zIDAgLjFjMCAwIDAgLjEgMzkuMiAzLjdjMCAwIDAgMCAwIDBsLTM5LjItMy42Yy0uNSA1LS42IDEwLS40IDE0LjlsLTE0LjcgNC4yQzQuNyAzODAuNi0yLjcgMzkzLjggLjkgNDA2LjZzMTYuOSAyMC4xIDI5LjcgMTYuNWwxMy44LTMuOWMxMC42IDIwLjcgMjcuNiAzNy44IDQ4LjUgNDguNWwtMy45IDEzLjdjLTMuNiAxMi43IDMuNyAyNiAxNi41IDI5LjdzMjYtMy43IDI5LjctMTYuNWw0LjItMTQuN2MyMy44IDEgNDYuMy01LjUgNjUuMS0xNy42TDIxNSA0NzNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMC42LTEwLjZjOS4xLTE0LjEgMTUuMS0zMC41IDE3LTQ4LjNsLjEtLjhjLjMtMS43IDEtNS4xIDIuMy05LjhsLjItLjggMTIuNiA1LjRjMTIuMiA1LjIgMjYuMy0uNCAzMS41LTEyLjZzLS40LTI2LjMtMTIuNi0zMS41bC0xMS4zLTQuOGM5LjktMTQuOSAyNC45LTMxLjYgNDguNi00NmwyLjEgNy41YzMuNiAxMi43IDE2LjkgMjAuMSAyOS43IDE2LjVzMjAuMS0xNi45IDE2LjUtMjkuN0wzNzEgMjU5LjJjNi45LTIuMiAxNC4zLTQuMyAyMi4yLTYuMWMxMi45LTMgMjQuNy04IDM1LjItMTQuOEw0MzkgMjQ5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTAuNi0xMC42YzEyLjItMTkgMTguNi00MS42IDE3LjYtNjUuMWwxNC43LTQuMmMxMi43LTMuNiAyMC4xLTE2LjkgMTYuNS0yOS43cy0xNi45LTIwLjEtMjkuNy0xNi41bC0xMy43IDMuOWMtMTAuOC0yMS4yLTI4LTM4LTQ4LjUtNDguNWwzLjktMTMuOHpNOTIuMSAzNjMuM3MwIDAgMCAwTDE0NCAzNjhsLTUxLjktNC43ek0xMTIgMzIwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTI0MCAxODRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbmNvbnN0IGZhSGFuZFBvaW50ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1wb2ludGVyJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMjVhXCIsIFwiTTEyOCA0MGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMTQ4LjJjOC41LTcuNiAxOS43LTEyLjIgMzItMTIuMmMyMC42IDAgMzguMiAxMyA0NSAzMS4yYzguOC05LjMgMjEuMi0xNS4yIDM1LTE1LjJjMjUuMyAwIDQ2IDE5LjUgNDcuOSA0NC4zYzguNS03LjcgMTkuOC0xMi4zIDMyLjEtMTIuM2MyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4IDAgMTYgMCA0OGMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMTYgMC02NCAwLS4xIDAtNS4yIDBjLTUgMC05LjktLjMtMTQuNy0xYy01NS4zLTUuNi0xMDYuMi0zNC0xNDAtNzlMOCAzMzZjLTEzLjMtMTcuNy05LjctNDIuNyA4LTU2czQyLjctOS43IDU2IDhsNTYgNzQuN0wxMjggNDB6TTI0MCAzMDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6bTQ4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2em04MCAxNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnpcIl1cbn07XG5jb25zdCBmYURydW1TdGVlbHBhbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkcnVtLXN0ZWVscGFuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTZhXCIsIFwiTTI4OCAzMmMxNTkuMSAwIDI4OCA0OCAyODggMTI4bDAgMTkyYzAgODAtMTI4LjkgMTI4LTI4OCAxMjhTMCA0MzIgMCAzNTJMMCAxNjBDMCA4MCAxMjguOSAzMiAyODggMzJ6TTUyOCAxNjBjMC05LjktOC0yOS45LTU1LTQ5LjhjLTE4LjYtNy45LTQwLjktMTQuNC02Ni0xOS40bC0yNy44IDQzLjZjLTcuMyAxMS41LTExLjIgMjQuOC0xMS4yIDM4LjRjMCAxNy41IDYuNCAzNC40IDE4LjEgNDcuNWw5LjggMTFjMjkuOC01LjIgNTUuOS0xMi41IDc3LjItMjEuNWM0Ny4xLTE5LjkgNTUtMzkuOSA1NS00OS44ek0zNDkuMiAyMzcuM2MtOC0yNi4yLTMyLjQtNDUuMy02MS4yLTQ1LjNzLTUzLjMgMTkuMS02MS4yIDQ1LjNjMTkuNCAxLjcgMzkuOSAyLjcgNjEuMiAyLjdzNDEuOC0uOSA2MS4yLTIuN3pNMTY5IDkwLjhjLTI1LjIgNS00Ny40IDExLjYtNjYgMTkuNEM1NiAxMzAuMSA0OCAxNTAuMSA0OCAxNjBzOCAyOS45IDU1IDQ5LjhjMjEuMyA5IDQ3LjQgMTYuMyA3Ny4yIDIxLjVsOS44LTExYzExLjYtMTMuMSAxOC4xLTMwIDE4LjEtNDcuNWMwLTEzLjYtMy45LTI2LjktMTEuMi0zOC40TDE2OSA5MC44em01Ni4zLThDMjI0LjUgODcgMjI0IDkxLjUgMjI0IDk2YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC00LjUtLjUtOS0xLjQtMTMuMkMzMzAuOCA4MSAzMDkuOCA4MCAyODggODBzLTQyLjggMS02Mi42IDIuOHpcIl1cbn07XG5jb25zdCBmYUhhbmRTY2lzc29ycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLXNjaXNzb3JzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMjU3XCIsIFwiTTQwIDIwOGMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwxODAuMiAwYy03LjYgOC41LTEyLjIgMTkuNy0xMi4yIDMyYzAgMjUuMyAxOS41IDQ2IDQ0LjMgNDcuOWMtNy43IDguNS0xMi4zIDE5LjgtMTIuMyAzMi4xYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDMyIDAgNjQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTExMy4xYzAtNDAuMi0xNi03OC44LTQ0LjQtMTA3LjNDNDQ0LjggNzYuOCA0MTMuOSA2NCAzODEuNyA2NEwzMzYgNjRjLTIxLjMgMC0zOS4zIDEzLjktNDUuNiAzMy4xbDc0LjUgMjMuN2M4LjQgMi43IDEzLjEgMTEuNyAxMC40IDIwLjFzLTExLjcgMTMuMS0yMC4xIDEwLjRMMjg4IDEyOS45YzAgMCAwIC4xIDAgLjFMODQgNjUuOEM2Mi45IDU5LjIgNDAuNSA3MC45IDMzLjggOTJzNS4xIDQzLjUgMjYuMiA1MC4yTDI2OS41IDIwOCA0MCAyMDh6XCJdXG59O1xuY29uc3QgZmFIYW5kc1ByYXlpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHMtcHJheWluZycsXG4gIGljb246IFs2NDAsIDUxMiwgW1wicHJheWluZy1oYW5kc1wiXSwgXCJmNjg0XCIsIFwiTTM1MS4yIDQuOGMzLjItMiA2LjYtMy4zIDEwLTQuMWM0LjctMSA5LjYtLjkgMTQuMSAuMWM3LjcgMS44IDE0LjggNi41IDE5LjQgMTMuNkw1MTQuNiAxOTQuMmM4LjggMTMuMSAxMy40IDI4LjYgMTMuNCA0NC40bDAgNzMuNWMwIDYuOSA0LjQgMTMgMTAuOSAxNS4ybDc5LjIgMjYuNEM2MzEuMiAzNTggNjQwIDM3MC4yIDY0MCAzODRsMCA5NmMwIDkuOS00LjYgMTkuMy0xMi41IDI1LjRzLTE4LjEgOC4xLTI3LjcgNS41TDQzMSA0NjUuOWMtNTYtMTQuOS05NS02NS43LTk1LTEyMy43TDMzNiAyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04NC45YzAtNy0xLjgtMTMuOC01LjMtMTkuOEwzNDAuMyA0OC4xYy0xLjctMy0yLjktNi4xLTMuNi05LjNjLTEtNC43LTEtOS42IC4xLTE0LjFjMS45LTggNi44LTE1LjIgMTQuMy0xOS45em0tNjIuNCAwYzcuNSA0LjYgMTIuNCAxMS45IDE0LjMgMTkuOWMxLjEgNC42IDEuMiA5LjQgLjEgMTQuMWMtLjcgMy4yLTEuOSA2LjMtMy42IDkuM0wyMTMuMyAxOTkuM2MtMy41IDYtNS4zIDEyLjktNS4zIDE5LjhsMCA4NC45YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTE4LjJjMCA1OC0zOSAxMDguNy05NSAxMjMuN2wtMTY4LjcgNDVjLTkuNiAyLjYtMTkuOSAuNS0yNy43LTUuNVMwIDQ5MCAwIDQ4MGwwLTk2YzAtMTMuOCA4LjgtMjYgMjEuOS0zMC40bDc5LjItMjYuNGM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMmwwLTczLjVjMC0xNS44IDQuNy0zMS4yIDEzLjQtNDQuNEwyNDUuMiAxNC41YzQuNi03LjEgMTEuNy0xMS44IDE5LjQtMTMuNmM0LjYtMS4xIDkuNC0xLjIgMTQuMS0uMWMzLjUgLjggNi45IDIuMSAxMCA0LjF6XCJdXG59O1xuY29uc3QgZmFQcmF5aW5nSGFuZHMgPSBmYUhhbmRzUHJheWluZztcbmNvbnN0IGZhQXJyb3dSb3RhdGVSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yb3RhdGUtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs4NjM1LCBcImFycm93LXJpZ2h0LXJvdGF0ZVwiLCBcImFycm93LXJvdGF0ZS1mb3J3YXJkXCIsIFwicmVkb1wiXSwgXCJmMDFlXCIsIFwiTTM4Ni4zIDE2MEwzMzYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNTEuMkw0MTQuNCA5Ny42Yy04Ny41LTg3LjUtMjI5LjMtODcuNS0zMTYuOCAwcy04Ny41IDIyOS4zIDAgMzE2LjhzMjI5LjMgODcuNSAzMTYuOCAwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwYy02Mi41IDYyLjUtMTYzLjggNjIuNS0yMjYuMyAwcy02Mi41LTE2My44IDAtMjI2LjNzMTYzLjgtNjIuNSAyMjYuMyAwTDM4Ni4zIDE2MHpcIl1cbn07XG5jb25zdCBmYUFycm93UmlnaHRSb3RhdGUgPSBmYUFycm93Um90YXRlUmlnaHQ7XG5jb25zdCBmYUFycm93Um90YXRlRm9yd2FyZCA9IGZhQXJyb3dSb3RhdGVSaWdodDtcbmNvbnN0IGZhUmVkbyA9IGZhQXJyb3dSb3RhdGVSaWdodDtcbmNvbnN0IGZhV2ViQXdlc29tZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3ZWItYXdlc29tZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTY4MlwiLCBcIk0zNzIuMiA1MmMwIDIwLjktMTIuNCAzOS0zMC4yIDQ3LjJMNDQ4IDE5MmwxMDQuNC0yMC45Yy01LjMtNy43LTguNC0xNy4xLTguNC0yNy4xYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhjMCAyNi0yMC42IDQ3LjEtNDYuNCA0OEw0ODEgNDQyLjNjLTEwLjMgMjMtMzMuMiAzNy43LTU4LjQgMzcuN2wtMjA1LjIgMGMtMjUuMiAwLTQ4LTE0LjgtNTguNC0zNy43TDQ2LjQgMTkyQzIwLjYgMTkxLjEgMCAxNzAgMCAxNDRjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGMwIDEwLjEtMy4xIDE5LjQtOC40IDI3LjFMMTkyIDE5MiAyOTguMSA5OS4xYy0xNy43LTguMy0zMC0yNi4zLTMwLTQ3LjFjMC0yOC43IDIzLjMtNTIgNTItNTJzNTIgMjMuMyA1MiA1MnpcIl1cbn07XG5jb25zdCBmYUJpb2hhemFyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiaW9oYXphcmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs5NzYzXSwgXCJmNzgwXCIsIFwiTTE3My4yIDBjLTEuOCAwLTMuNSAuNy00LjggMkMxMzguNSAzMi4zIDEyMCA3NCAxMjAgMTIwYzAgMjYuMiA2IDUwLjkgMTYuNiA3M2MtMjIgMi40LTQzLjggOS4xLTY0LjIgMjAuNUMzNy45IDIzMi44IDEzLjMgMjYyLjQgLjQgMjk2Yy0uNyAxLjctLjUgMy43IC41IDUuMmMyLjIgMy43IDcuNCA0LjMgMTAuNiAxLjNDNjQuMiAyNTQuMyAxNTggMjQ1LjEgMjA1IDMyNHMtOC4xIDE1My4xLTc3LjYgMTczLjJjLTQuMiAxLjItNi4zIDUuOS00LjEgOS42YzEgMS42IDIuNiAyLjcgNC41IDNjMzYuNSA1LjkgNzUuMiAuMSAxMDkuNy0xOS4yYzIwLjQtMTEuNCAzNy40LTI2LjUgNTAuNS00My44YzEzLjEgMTcuMyAzMC4xIDMyLjQgNTAuNSA0My44YzM0LjUgMTkuMyA3My4zIDI1LjIgMTA5LjcgMTkuMmMxLjktLjMgMy41LTEuNCA0LjUtM2MyLjItMy43IC4xLTguNC00LjEtOS42QzM3OS4xIDQ3Ny4xIDMyNCA0MDMgMzcxIDMyNHMxNDAuNy02OS44IDE5My41LTIxLjRjMy4yIDIuOSA4LjQgMi4zIDEwLjYtMS4zYzEtMS42IDEuMS0zLjUgLjUtNS4yYy0xMi45LTMzLjYtMzcuNS02My4yLTcyLjEtODIuNWMtMjAuNC0xMS40LTQyLjItMTguMS02NC4yLTIwLjVDNDUwIDE3MC45IDQ1NiAxNDYuMiA0NTYgMTIwYzAtNDYtMTguNS04Ny43LTQ4LjQtMTE4Yy0xLjMtMS4zLTMtMi00LjgtMmMtNSAwLTguNCA1LjItNi43IDkuOUM0MjEuNyA4MC41IDM4NS42IDE3NiAyODggMTc2UzE1NC4zIDgwLjUgMTc5LjkgOS45YzEuNy00LjctMS42LTkuOS02LjctOS45ek0yNDAgMjcyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTE4MS43IDQxNy42YzYuMy0xMS44IDkuOC0yNS4xIDguNi0zOS44Yy0xOS41LTE4LTM0LTQxLjQtNDEuMi02Ny44Yy0xMi41LTguMS0yNi4yLTExLjgtNDAtMTIuNGMtOS0uNC0xOC4xIC42LTI3LjEgMi43YzcuOCA1Ny4xIDM4LjcgMTA2LjggODIuOSAxMzkuNGM2LjgtNi43IDEyLjYtMTQuMSAxNi44LTIyLjF6TTI4OCA2NGMtMjguOCAwLTU2LjMgNS45LTgxLjIgMTYuNWMyIDguMyA1IDE2LjIgOSAyMy41YzYuOCAxMi40IDE2LjcgMjMuMSAzMC4xIDMwLjNjMTMuMy00LjEgMjcuNS02LjMgNDIuMi02LjNzMjguOCAyLjIgNDIuMiA2LjNjMTMuNC03LjIgMjMuMy0xNy45IDMwLjEtMzAuM2M0LTcuMyA3LTE1LjIgOS0yMy41QzM0NC4zIDY5LjkgMzE2LjggNjQgMjg4IDY0ek00MjYuOSAzMTBjLTcuMiAyNi40LTIxLjcgNDkuNy00MS4yIDY3LjhjLTEuMiAxNC43IDIuMiAyOC4xIDguNiAzOS44YzQuMyA4IDEwIDE1LjQgMTYuOCAyMi4xYzQ0LjMtMzIuNiA3NS4yLTgyLjMgODIuOS0xMzkuNGMtOS0yLjItMTguMS0zLjEtMjcuMS0yLjdjLTEzLjggLjYtMjcuNSA0LjQtNDAgMTIuNHpcIl1cbn07XG5jb25zdCBmYUxvY2F0aW9uQ3Jvc3NoYWlycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NhdGlvbi1jcm9zc2hhaXJzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsb2NhdGlvblwiXSwgXCJmNjAxXCIsIFwiTTI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzQuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS4zIDIyNGwzNC43IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM0LjcgMEM0MzEuOSAzNjguNCAzNjguNCA0MzEuOSAyODggNDQ1LjNsMCAzNC43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzQuN0MxNDMuNiA0MzEuOSA4MC4xIDM2OC40IDY2LjcgMjg4TDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzNC43IDBDODAuMSAxNDMuNiAxNDMuNiA4MC4xIDIyNCA2Ni43TDIyNCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTI4IDI1NmExMjggMTI4IDAgMSAwIDI1NiAwIDEyOCAxMjggMCAxIDAgLTI1NiAwem0xMjgtODBhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6XCJdXG59O1xuY29uc3QgZmFMb2NhdGlvbiA9IGZhTG9jYXRpb25Dcm9zc2hhaXJzO1xuY29uc3QgZmFNYXJzRG91YmxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcnMtZG91YmxlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTg5MV0sIFwiZjIyN1wiLCBcIk0zMTIgMzJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzMuNCAzMy40TDI3NS44IDE1OWMtMjguNC0xOS41LTYyLjctMzEtOTkuOC0zMUM3OC44IDEyOCAwIDIwNi44IDAgMzA0czc4LjggMTc2IDE3NiAxNzZzMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDUyLjYtNTIuNkw0MDcgMTg1YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMmwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEwzMTIgMzJ6bTg4IDQ4czAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwek02NCAzMDRhMTEyIDExMiAwIDEgMSAyMjQgMEExMTIgMTEyIDAgMSAxIDY0IDMwNHpNMzY4IDQ4MGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDUyLjYtNTIuNkw1OTkgMTg1YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMmwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEw1MDQgMzJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOGMtMS4yIDIuOS0xLjggNi0xLjggOWwwIC4yIDAgLjJjMCA2LjIgMi41IDEyLjIgNyAxNi44bDMzLjQgMzMuNEw0ODAgMTQ2LjdsMCAyMS4zYzAgMjIuNi0xMy42IDQzLjEtMzQuNiA1MS43Yy0uOCAuMy0xLjcgLjctMi41IDFDNDY1LjcgMjQxLjIgNDgwIDI3MC45IDQ4MCAzMDRjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJjLTUuNCAwLTEwLjgtLjQtMTYtMS4xYy0xMi45IDIwLjQtMjkuMSAzOC4zLTQ4LjEgNTMuMWMxOS44IDcuOCA0MS40IDEyIDY0IDEyelwiXVxufTtcbmNvbnN0IGZhQ2hpbGREcmVzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGlsZC1kcmVzcycsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZTU5Y1wiLCBcIk0yMjQgNjRBNjQgNjQgMCAxIDAgOTYgNjRhNjQgNjQgMCAxIDAgMTI4IDB6TTg4IDQwMGwwIDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC04MCAxNiAwIDAgODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTgwIDE3LjggMGMxMC45IDAgMTguNi0xMC43IDE1LjItMjEuMWwtMzEuMS05My40IDI4LjYgMzcuOGMxMC43IDE0LjEgMzAuOCAxNi44IDQ0LjggNi4yczE2LjgtMzAuNyA2LjItNDQuOEwyNTQuNiAyMDdjLTIyLjQtMjkuNi01Ny41LTQ3LTk0LjYtNDdzLTcyLjIgMTcuNC05NC42IDQ3TDYuNSAyODQuN2MtMTAuNyAxNC4xLTcuOSAzNC4yIDYuMiA0NC44czM0LjIgNy45IDQ0LjgtNi4ybDI4LjctMzcuOEw1NSAzNzguOUM1MS42IDM4OS4zIDU5LjMgNDAwIDcwLjIgNDAwTDg4IDQwMHpcIl1cbn07XG5jb25zdCBmYVVzZXJzQmV0d2VlbkxpbmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXJzLWJldHdlZW4tbGluZXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OTFcIiwgXCJNMCAyNEMwIDEwLjcgMTAuNyAwIDI0IDBMNjE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNDhDMTAuNyA0OCAwIDM3LjMgMCAyNHpNMCA0ODhjMC0xMy4zIDEwLjctMjQgMjQtMjRsNTkyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNODMuMiAxNjBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0zMiAzMjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsOTYgMGMxMi4yIDAgMjMuNyAzLjQgMzMuNCA5LjRjLTM3LjIgMTUuMS02NS42IDQ3LjItNzUuOCA4Ni42TDY0IDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTQ2MS42IDMyYy0xMC4zLTQwLjEtMzkuNi03Mi42LTc3LjctODcuNGM5LjQtNS41IDIwLjQtOC42IDMyLjEtOC42bDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTgyLjQgMHpNMzkxLjIgMjkwLjRjMzIuMSA3LjQgNTguMSAzMC45IDY4LjkgNjEuNmMzLjUgMTAgNS41IDIwLjggNS41IDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJjMC0xMS4yIDEuOS0yMiA1LjUtMzJjMTAuNS0yOS43IDM1LjMtNTIuOCA2Ni4xLTYwLjljNy44LTIuMSAxNi0zLjEgMjQuNS0zLjFsOTYgMGM3LjQgMCAxNC43IC44IDIxLjYgMi40em00NC0xMzAuNGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyMS42IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbmNvbnN0IGZhTHVuZ3NWaXJ1cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsdW5ncy12aXJ1cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2N1wiLCBcIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyNC4yYy04LjUtNy42LTE5LjctMTIuMi0zMi0xMi4ycy0yMy41IDQuNi0zMiAxMi4yTDI4OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDQ0LjUgMTk1LjVjLTE2LjQtMTYuNC00MS44LTE4LjUtNjAuNS02LjFsMC0yNC4xQzM4NCAxMjcgNDE1IDk2IDQ1My4zIDk2YzIxLjcgMCA0Mi44IDEwLjIgNTUuOCAyOC44YzE1LjQgMjIuMSA0NC4zIDY1LjQgNzEgMTE2LjljMjYuNSA1MC45IDUyLjQgMTEyLjUgNTkuNiAxNzAuM2MuMiAxLjMgLjIgMi42IC4yIDRsMCA3YzAgNDkuMS0zOS44IDg5LTg5IDg5Yy03LjMgMC0xNC41LS45LTIxLjYtMi43bC03Mi43LTE4LjJjLTIwLjktNS4yLTM4LjctMTcuMS01MS41LTMyLjljMTQgMS41IDI4LjUtMyAzOS4yLTEzLjhsLTIyLjYtMjIuNiAyMi42IDIyLjZjMTguNy0xOC43IDE4LjctNDkuMSAwLTY3LjljLTEuMS0xLjEtMS40LTItMS41LTIuNWMtLjEtLjgtLjEtMS44IC40LTIuOXMxLjItMS45IDEuOC0yLjNjLjUtLjMgMS4zLS44IDIuOS0uOGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGMtMS42IDAtMi40LS40LTIuOS0uOGMtLjYtLjQtMS4zLTEuMi0xLjgtMi4zcy0uNS0yLjItLjQtMi45Yy4xLS42IC40LTEuNCAxLjUtMi41YzE4LjctMTguNyAxOC43LTQ5LjEgMC02Ny45ek00MjEuOCA0MjEuOGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBDMzc1LjkgMzk4LjUgMzM2IDQxNSAzMzYgNDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2YzAtMzMtMzkuOS00OS41LTYzLjItMjYuMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkMyNDEuNSAzNzUuOSAyMjUgMzM2IDE5MiAzMzZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZjMzMgMCA0OS41LTM5LjkgMjYuMi02My4yYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBDMjY0LjEgMjQxLjUgMzA0IDIyNSAzMDQgMTkyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZjMCAzMyAzOS45IDQ5LjUgNjMuMiAyNi4yYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkMzOTguNSAyNjQuMSA0MTUgMzA0IDQ0OCAzMDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTMzIDAtNDkuNSAzOS45LTI2LjIgNjMuMmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnpNMTgzLjMgNDkxLjJsLTcyLjcgMTguMmMtNy4xIDEuOC0xNC4zIDIuNy0yMS42IDIuN2MtNDkuMSAwLTg5LTM5LjgtODktODlsMC03YzAtMS4zIC4xLTIuNyAuMi00YzcuMi01Ny45IDMzLjEtMTE5LjQgNTkuNi0xNzAuM2MyNi44LTUxLjUgNTUuNi05NC44IDcxLTExNi45YzEzLTE4LjYgMzQtMjguOCA1NS44LTI4LjhDMjI1IDk2IDI1NiAxMjcgMjU2IDE2NS4zbDAgMjQuMWMtMTguNi0xMi40LTQ0LTEwLjMtNjAuNSA2LjFjLTE4LjcgMTguNy0xOC43IDQ5LjEgMCA2Ny45YzEuMSAxLjEgMS40IDIgMS41IDIuNWMuMSAuOCAuMSAxLjgtLjQgMi45cy0xLjIgMS45LTEuOCAyLjNjLS41IC4zLTEuMyAuOC0yLjkgLjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhjMS42IDAgMi40IC40IDIuOSAuOGMuNiAuNCAxLjMgMS4yIDEuOCAyLjNzLjUgMi4yIC40IDIuOWMtLjEgLjYtLjQgMS40LTEuNSAyLjVjLTE4LjcgMTguNy0xOC43IDQ5LjEgMCA2Ny45YzEwLjcgMTAuNyAyNS4zIDE1LjMgMzkuMiAxMy44Yy0xMi44IDE1LjktMzAuNiAyNy43LTUxLjUgMzIuOXpNMjk2IDMyMGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTcyIDMyYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6XCJdXG59O1xuY29uc3QgZmFGYWNlR3JpblRlYXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3Jpbi10ZWFycycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODUxNCwgXCJncmluLXRlYXJzXCJdLCBcImY1ODhcIiwgXCJNNTQ4LjYgMzcxLjRDNTA2LjQgNDU0LjggNDE5LjkgNTEyIDMyMCA1MTJzLTE4Ni40LTU3LjItMjI4LjYtMTQwLjZjNC41LTIuOSA4LjctNi4zIDEyLjctMTAuM2M4LjEtOC4xIDEzLjItMTguNiAxNi41LTI2LjZjMy42LTguOCA2LjUtMTguNCA4LjgtMjcuNWM0LjYtMTguMiA3LjctMzcgOS4zLTQ4LjJjMy45LTI2LjUtMTguOC00OS4yLTQ1LjItNDUuNGMtNi44IC45LTE2LjIgMi40LTI2LjYgNC40Qzg1LjMgOTQuNSAxOTEuNiAwIDMyMCAwUzU1NC43IDk0LjUgNTczLjIgMjE3LjdjLTEwLjMtMi0xOS44LTMuNS0yNi42LTQuNGMtMjYuNS0zLjktNDkuMiAxOC44LTQ1LjIgNDUuNGMxLjYgMTEuMyA0LjYgMzAgOS4zIDQ4LjJjMi4zIDkuMSA1LjIgMTguOCA4LjggMjcuNWMzLjMgOC4xIDguNCAxOC41IDE2LjUgMjYuNmMzLjkgMy45IDguMiA3LjQgMTIuNyAxMC4zek0xMDcgMjU0LjFjLTMuMSAyMS41LTExLjQgNzAuMi0yNS41IDg0LjRjLS45IDEtMS45IDEuOC0yLjkgMi43QzYwIDM1Ni43IDMyIDM1NS41IDE0LjMgMzM3LjdjLTE4LjctMTguNy0xOS4xLTQ4LjgtLjctNjcuMmM4LjYtOC42IDMwLjEtMTUuMSA1MC41LTE5LjZjMTMtMi44IDI1LjUtNC44IDMzLjktNmM1LjQtLjggOS45IDMuNyA5IDl6bTQ1NC41IDg3LjFjLS44LS42LTEuNS0xLjMtMi4zLTJjLS4yLS4yLS41LS40LS43LS43Yy0xNC4xLTE0LjEtMjIuNS02Mi45LTI1LjUtODQuNGMtLjgtNS40IDMuNy05LjkgOS05YzEgLjEgMi4yIC4zIDMuMyAuNWM4LjIgMS4yIDE5LjIgMyAzMC42IDUuNWMyMC40IDQuNCA0MS45IDEwLjkgNTAuNSAxOS42YzE4LjQgMTguNCAxOCA0OC41LS43IDY3LjJjLTE3LjcgMTcuNy00NS43IDE5LTY0LjIgMy40em0tOTAuMS05LjdjNS0xMS44LTctMjIuNS0xOS4zLTE4LjdjLTM5LjcgMTIuMi04NC41IDE5LTEzMS44IDE5cy05Mi4xLTYuOC0xMzEuOC0xOWMtMTIuMy0zLjgtMjQuMyA2LjktMTkuMyAxOC43YzI1IDU5LjEgODMuMiAxMDAuNSAxNTEuMSAxMDAuNXMxMjYuMi00MS40IDE1MS4xLTEwMC41ek0yODEuNiAyMjguOHMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGMyLjEgMi44IDUuNyAzLjkgOC45IDIuOHM1LjUtNC4xIDUuNS03LjZjMC0xNy45LTYuNy0zNS42LTE2LjYtNDguOGMtOS44LTEzLTIzLjktMjMuMi0zOS40LTIzLjJzLTI5LjYgMTAuMi0zOS40IDIzLjJDMTkwLjcgMTg4LjQgMTg0IDIwNi4xIDE4NCAyMjRjMCAzLjQgMi4yIDYuNSA1LjUgNy42czYuOSAwIDguOS0yLjhjMCAwIDAgMCAwIDBzMCAwIDAgMGMwIDAgMCAwIDAgMGwuMi0uMmMuMi0uMiAuNC0uNSAuNy0uOWMuNi0uOCAxLjYtMiAyLjgtMy40YzIuNS0yLjggNi02LjYgMTAuMi0xMC4zYzguOC03LjggMTguOC0xNCAyNy43LTE0czE4LjkgNi4yIDI3LjcgMTRjNC4yIDMuNyA3LjcgNy41IDEwLjIgMTAuM2MxLjIgMS40IDIuMiAyLjYgMi44IDMuNGMuMyAuNCAuNiAuNyAuNyAuOWwuMiAuMmMwIDAgMCAwIDAgMHptMTYwIDBzMCAwIDAgMHMwIDAgMCAwYzIuMSAyLjggNS43IDMuOSA4LjkgMi44czUuNS00LjEgNS41LTcuNmMwLTE3LjktNi43LTM1LjYtMTYuNi00OC44Yy05LjgtMTMtMjMuOS0yMy4yLTM5LjQtMjMuMnMtMjkuNiAxMC4yLTM5LjQgMjMuMkMzNTAuNyAxODguNCAzNDQgMjA2LjEgMzQ0IDIyNGMwIDMuNCAyLjIgNi41IDUuNSA3LjZzNi45IDAgOC45LTIuOGMwIDAgMCAwIDAgMHMwIDAgMCAwYzAgMCAwIDAgMCAwbC4yLS4yYy4yLS4yIC40LS41IC43LS45Yy42LS44IDEuNi0yIDIuOC0zLjRjMi41LTIuOCA2LTYuNiAxMC4yLTEwLjNjOC44LTcuOCAxOC44LTE0IDI3LjctMTRzMTguOSA2LjIgMjcuNyAxNGM0LjIgMy43IDcuNyA3LjUgMTAuMiAxMC4zYzEuMiAxLjQgMi4yIDIuNiAyLjggMy40Yy4zIC40IC42IC43IC43IC45bC4yIC4yYzAgMCAwIDAgMCAwYzAgMCAwIDAgMCAwelwiXVxufTtcbmNvbnN0IGZhR3JpblRlYXJzID0gZmFGYWNlR3JpblRlYXJzO1xuY29uc3QgZmFQaG9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaG9uZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODIyMiwgMTI4Mzc5XSwgXCJmMDk1XCIsIFwiTTE2NC45IDI0LjZjLTcuNy0xOC42LTI4LTI4LjUtNDcuNC0yMy4ybC04OCAyNEMxMi4xIDMwLjIgMCA0NiAwIDY0QzAgMzExLjQgMjAwLjYgNTEyIDQ0OCA1MTJjMTggMCAzMy44LTEyLjEgMzguNi0yOS41bDI0LTg4YzUuMy0xOS40LTQuNi0zOS43LTIzLjItNDcuNGwtOTYtNDBjLTE2LjMtNi44LTM1LjItMi4xLTQ2LjMgMTEuNkwzMDQuNyAzNjhDMjM0LjMgMzM0LjcgMTc3LjMgMjc3LjcgMTQ0IDIwNy4zTDE5My4zIDE2N2MxMy43LTExLjIgMTguNC0zMCAxMS42LTQ2LjNsLTQwLTk2elwiXVxufTtcbmNvbnN0IGZhQ2FsZW5kYXJYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWxlbmRhci14bWFyaycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiY2FsZW5kYXItdGltZXNcIl0sIFwiZjI3M1wiLCBcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OEwwIDE2MGwwLTQ4QzAgODUuNSAyMS41IDY0IDQ4IDY0bDQ4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJsNDQ4IDAgMCAyNzJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE5MnpNMzA1IDMwNWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC00NyA0Ny00Ny00N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw0NyA0Ny00NyA0N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDQ3LTQ3IDQ3IDQ3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDctNDcgNDctNDd6XCJdXG59O1xuY29uc3QgZmFDYWxlbmRhclRpbWVzID0gZmFDYWxlbmRhclhtYXJrO1xuY29uc3QgZmFDaGlsZFJlYWNoaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoaWxkLXJlYWNoaW5nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNTlkXCIsIFwiTTI1NiA2NEE2NCA2NCAwIDEgMCAxMjggNjRhNjQgNjQgMCAxIDAgMTI4IDB6TTE1Mi45IDE2OS4zYy0yMy43LTguNC00NC41LTI0LjMtNTguOC00NS44TDc0LjYgOTQuMkM2NC44IDc5LjUgNDUgNzUuNiAzMC4yIDg1LjRzLTE4LjcgMjkuNy04LjkgNDQuNEw0MC45IDE1OWMxOC4xIDI3LjEgNDIuOCA0OC40IDcxLjEgNjIuNEwxMTIgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1OC40YzI5LjEtMTQuMiA1NC40LTM2LjIgNzIuNy02NC4ybDE4LjItMjcuOWM5LjYtMTQuOCA1LjQtMzQuNi05LjQtNDQuM3MtMzQuNi01LjUtNDQuMyA5LjRMMjkxIDEyMi40Yy0yMS44IDMzLjQtNTguOSA1My42LTk4LjggNTMuNmMtMTIuNiAwLTI0LjktMi0zNi42LTUuOGMtLjktLjMtMS44LS43LTIuNy0uOXpcIl1cbn07XG5jb25zdCBmYUhlYWRTaWRlVmlydXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhZC1zaWRlLXZpcnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMDY0XCIsIFwiTTAgMjI0LjJDMCAxMDAuNiAxMDAuMiAwIDIyNCAwbDI0IDBjOTUuMiAwIDE4MS4yIDY5LjMgMTk3LjMgMTYwLjJjMi4zIDEzIDYuOCAyNS43IDE1LjEgMzZsNDIgNTIuNmM2LjIgNy44IDkuNiAxNy40IDkuNiAyNy40YzAgMjQuMi0xOS42IDQzLjgtNDMuOCA0My44TDQ0OCAzMjBsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03Mi43YzAtMTYuNy02LjktMzIuNS0xNy4xLTQ1LjhDMTYuNiAzMjIuNCAwIDI3NC4xIDAgMjI0LjJ6TTIyNCA2NGMtOC44IDAtMTYgNy4yLTE2IDE2YzAgMzMtMzkuOSA0OS41LTYzLjIgMjYuMmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkMxNDUuNSAxNTIuMSAxMjkgMTkyIDk2IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmMzMyAwIDQ5LjUgMzkuOSAyNi4yIDYzLjJjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEMxNjguMSAyODYuNSAyMDggMzAzIDIwOCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTMzIDM5LjktNDkuNSA2My4yLTI2LjJjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42QzMwMi41IDI2My45IDMxOSAyMjQgMzUyIDIyNGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtMzMgMC00OS41LTM5LjktMjYuMi02My4yYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBDMjc5LjkgMTI5LjUgMjQwIDExMyAyNDAgODBjMC04LjgtNy4yLTE2LTE2LTE2em0tMjQgOTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4MGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwelwiXVxufTtcbmNvbnN0IGZhVXNlckdlYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1nZWFyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2VyLWNvZ1wiXSwgXCJmNGZlXCIsIFwiTTIyNCAwYTEyOCAxMjggMCAxIDEgMCAyNTZBMTI4IDEyOCAwIDEgMSAyMjQgMHpNMTc4LjMgMzA0bDkxLjQgMGMxMS44IDAgMjMuNCAxLjIgMzQuNSAzLjNjLTIuMSAxOC41IDcuNCAzNS42IDIxLjggNDQuOGMtMTYuNiAxMC42LTI2LjcgMzEuNi0yMCA1My4zYzQgMTIuOSA5LjQgMjUuNSAxNi40IDM3LjZzMTUuMiAyMy4xIDI0LjQgMzNjMTUuNyAxNi45IDM5LjYgMTguNCA1Ny4yIDguN2wwIC45YzAgOS4yIDIuNyAxOC41IDcuOSAyNi4zTDI5LjcgNTEyQzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM0MwIDM4My44IDc5LjggMzA0IDE3OC4zIDMwNHpNNDM2IDIxOC4yYzAtNyA0LjUtMTMuMyAxMS4zLTE0LjhjMTAuNS0yLjQgMjEuNS0zLjcgMzIuNy0zLjdzMjIuMiAxLjMgMzIuNyAzLjdjNi44IDEuNSAxMS4zIDcuOCAxMS4zIDE0LjhsMCAzMC42YzcuOSAzLjQgMTUuNCA3LjcgMjIuMyAxMi44bDI0LjktMTQuM2M2LjEtMy41IDEzLjctMi43IDE4LjUgMi40YzcuNiA4LjEgMTQuMyAxNy4yIDIwLjEgMjcuMnMxMC4zIDIwLjQgMTMuNSAzMWMyLjEgNi43LTEuMSAxMy43LTcuMiAxNy4ybC0yNSAxNC40Yy40IDQgLjcgOC4xIC43IDEyLjNzLS4yIDguMi0uNyAxMi4zbDI1IDE0LjRjNi4xIDMuNSA5LjIgMTAuNSA3LjIgMTcuMmMtMy4zIDEwLjYtNy44IDIxLTEzLjUgMzFzLTEyLjUgMTkuMS0yMC4xIDI3LjJjLTQuOCA1LjEtMTIuNSA1LjktMTguNSAyLjRsLTI0LjktMTQuM2MtNi45IDUuMS0xNC4zIDkuNC0yMi4zIDEyLjhsMCAzMC42YzAgNy00LjUgMTMuMy0xMS4zIDE0LjhjLTEwLjUgMi40LTIxLjUgMy43LTMyLjcgMy43cy0yMi4yLTEuMy0zMi43LTMuN2MtNi44LTEuNS0xMS4zLTcuOC0xMS4zLTE0LjhsMC0zMC41Yy04LTMuNC0xNS42LTcuNy0yMi41LTEyLjlsLTI0LjcgMTQuM2MtNi4xIDMuNS0xMy43IDIuNy0xOC41LTIuNGMtNy42LTguMS0xNC4zLTE3LjItMjAuMS0yNy4ycy0xMC4zLTIwLjQtMTMuNS0zMWMtMi4xLTYuNyAxLjEtMTMuNyA3LjItMTcuMmwyNC44LTE0LjNjLS40LTQuMS0uNy04LjItLjctMTIuNHMuMi04LjMgLjctMTIuNEwzNDMuOCAzMjVjLTYuMS0zLjUtOS4yLTEwLjUtNy4yLTE3LjJjMy4zLTEwLjYgNy43LTIxIDEzLjUtMzFzMTIuNS0xOS4xIDIwLjEtMjcuMmM0LjgtNS4xIDEyLjQtNS45IDE4LjUtMi40bDI0LjggMTQuM2M2LjktNS4xIDE0LjUtOS40IDIyLjUtMTIuOWwwLTMwLjV6bTkyLjEgMTMzLjVhNDguMSA0OC4xIDAgMSAwIC05Ni4xIDAgNDguMSA0OC4xIDAgMSAwIDk2LjEgMHpcIl1cbn07XG5jb25zdCBmYVVzZXJDb2cgPSBmYVVzZXJHZWFyO1xuY29uc3QgZmFBcnJvd1VwMTkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtMS05JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LW51bWVyaWMtdXBcIl0sIFwiZjE2M1wiLCBcIk00NTAuNyAzOGM4LjMgNiAxMy4zIDE1LjcgMTMuMyAyNmwwIDk2IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTQ4IDAtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtNTEuNi01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40ek0xNjAgMzJjOSAwIDE3LjUgMy44IDIzLjYgMTAuNGw4OCA5NmMxMS45IDEzIDExLjEgMzMuMy0yIDQ1LjJzLTMzLjMgMTEuMS00NS4yLTJMMTkyIDE0Ni4zIDE5MiA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMDEuN0w5NS42IDE4MS42Yy0xMS45IDEzLTMyLjIgMTMuOS00NS4yIDJzLTEzLjktMzIuMi0yLTQ1LjJsODgtOTZDMTQyLjUgMzUuOCAxNTEgMzIgMTYwIDMyek00NDUuNyAzNjQuOUEzMiAzMiAwIDEgMCA0MTguMyAzMDdhMzIgMzIgMCAxIDAgMjcuNCA1Ny45em0tNDAuNyA1NC45QzM2OS42IDQwOC40IDM0NCAzNzUuMiAzNDQgMzM2YzAtNDguNiAzOS40LTg4IDg4LTg4czg4IDM5LjQgODggODhjMCAyMy41LTcuNSA0Ni4zLTIxLjUgNjUuMkw0NDkuNyA0NjdjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjdzLTE3LjItMzAuNi02LjctNDQuOGw2LjgtOS4yelwiXVxufTtcbmNvbnN0IGZhU29ydE51bWVyaWNVcCA9IGZhQXJyb3dVcDE5O1xuY29uc3QgZmFEb29yQ2xvc2VkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Rvb3ItY2xvc2VkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjgyXSwgXCJmNTJhXCIsIFwiTTk2IDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDQxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTExMiAwLTI4OCAwTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwTDk2IDY0ek0zODQgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYVNoaWVsZFZpcnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaWVsZC12aXJ1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTA2Y1wiLCBcIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMmMuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjJjMTYuNyA4IDM2LjEgOCA1Mi44IDBDNDU0LjcgNDIwLjcgNDk1LjUgMjM5LjIgNDk2IDE0MGMuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0yNTYgMTEyYzguOCAwIDE2IDcuMiAxNiAxNmMwIDMzIDM5LjkgNDkuNSA2My4yIDI2LjJjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42QzMzNC41IDIwMC4xIDM1MSAyNDAgMzg0IDI0MGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmMtMzMgMC00OS41IDM5LjktMjYuMiA2My4yYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBDMzExLjkgMzM0LjUgMjcyIDM1MSAyNzIgMzg0YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2YzAtMzMtMzkuOS00OS41LTYzLjItMjYuMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkMxNzcuNSAzMTEuOSAxNjEgMjcyIDEyOCAyNzJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZjMzMgMCA0OS41LTM5LjkgMjYuMi02My4yYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBDMjAwLjEgMTc3LjUgMjQwIDE2MSAyNDAgMTI4YzAtOC44IDcuMi0xNiAxNi0xNnpNMjMyIDI1NmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTcyIDMyYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6XCJdXG59O1xuY29uc3QgZmFEaWNlU2l4ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2Utc2l4JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbOTg2MV0sIFwiZjUyNlwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTYwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMTkyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFNb3NxdWl0b05ldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb3NxdWl0by1uZXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MmNcIiwgXCJNMTY4LjggNDYyLjNjLTcuOS00LTExLjEtMTMuNi03LjItMjEuNUwxOTIgMzgwLjJsMC00NC4yYzAtNC4yIDEuNy04LjMgNC43LTExLjNMMjU2IDI2NS40bDAtMjMuMUwxMzkuMiAzNDRDODcuOCAzOTUuMyAwIDM1OC45IDAgMjg2LjNjMC00MS4xIDMwLjYtNzUuOCA3MS40LTgwLjlsMTU5LjktMjMuOS00OS42LTQxLjNjLTUuMS00LjItNy0xMS4xLTQuOS0xNy40bDEzLjktNDEuNy0yOS01OC4xYy00LTcuOS0uNy0xNy41IDcuMi0yMS41czE3LjUtLjcgMjEuNSA3LjJsMzIgNjRjMS45IDMuOCAyLjIgOC4yIC45IDEyLjJsLTEyLjUgMzcuNkwyNTYgMTYwLjVsMC0yMi42YzAtMTQuOSAxMC4xLTI3LjMgMjMuOC0zMWwwLTQzLjNjMC00LjUgMy43LTguMiA4LjItOC4yczguMiAzLjcgOC4yIDguMmwwIDQzLjNjMTMuNyAzLjYgMjMuOCAxNi4xIDIzLjggMzFsMCAyMi42IDQ1LjQtMzcuOEwzNTIuOCA4NS4xYy0xLjMtNC0xLTguNCAuOS0xMi4ybDMyLTY0YzQtNy45IDEzLjYtMTEuMSAyMS41LTcuMnMxMS4xIDEzLjYgNy4yIDIxLjVsLTI5IDU4LjEgMTMuOSA0MS43YzIuMSA2LjIgLjEgMTMuMS00LjkgMTcuNGwtNDkuNiA0MS4zIDE1OS45IDIzLjljMjIuNSAyLjggNDEuOCAxNC42IDU0LjcgMzEuNGMtMi43IDIuNi01LjIgNS40LTcuMyA4LjZjLTguNi0xMi45LTIzLjMtMjEuNS00MC0yMS41cy0zMS40IDguNS00MCAyMS41Yy04LjYtMTIuOS0yMy4zLTIxLjUtNDAtMjEuNWMtMjEuNyAwLTQwIDE0LjMtNDUuOSAzNC4xYy0xMC43IDMuMi0xOS44IDEwLjEtMjUuOSAxOS4ybC00MC4yLTM1IDAgMjMuMSAzMi40IDMyLjRjLS4zIDItLjQgNC4xLS40IDYuMmMwIDE2LjcgOC41IDMxLjQgMjEuNSA0MGMtNCAyLjYtNy41IDUuOS0xMC42IDkuNUwzMjAgMzEwLjZsMCA1MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTUwLTMyIDMyIDAgNDEuNGMwIDIuNS0uNiA0LjktMS43IDcuMmwtMzIgNjRjLTQgNy45LTEzLjYgMTEuMS0yMS41IDcuMnpNNTEyIDI1NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNiA0OCAwIDAtMTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2IDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2IDAgMCA0OCAxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNiAwIDAgNDggMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYgMCAwIDE2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTYtNDggMCAwIDE2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTYtNDggMCAwIDE2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTYtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwIDAtNDgtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwIDAtNDgtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwIDAtMTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2IDQ4IDAgMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTE2IDExMmw0OCAwIDAtNDgtNDggMCAwIDQ4em0wIDgwbDQ4IDAgMC00OC00OCAwIDAgNDh6TTQ0OCAzMjBsMCA0OCA0OCAwIDAtNDgtNDggMHptMCA4MGwwIDQ4IDQ4IDAgMC00OC00OCAwelwiXVxufTtcbmNvbnN0IGZhQnJpZGdlV2F0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJpZGdlLXdhdGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGNlXCIsIFwiTTAgOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRsNTEyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzNS42YzAgMTUuNy0xMi43IDI4LjQtMjguNCAyOC40Yy0zNy4zIDAtNjcuNiAzMC4yLTY3LjYgNjcuNmwwIDEyNC45Yy0xMi45IDAtMjUuOCAzLjktMzYuOCAxMS43Yy0xOCAxMi40LTQwLjEgMjAuMy01OS4yIDIwLjNjMCAwIDAgMCAwIDBsMC0uNSAwLTEyOGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDEyOCAwIC41Yy0xOSAwLTQxLjItNy45LTU5LjEtMjAuM2MtMTEuMS03LjgtMjQtMTEuNy0zNi45LTExLjdsMC0xMjQuOUM5NiAxOTAuMiA2NS44IDE2MCAyOC40IDE2MEMxMi43IDE2MCAwIDE0Ny4zIDAgMTMxLjZMMCA5NnpNMzA2LjUgMzg5LjlDMzI5IDQwNS40IDM1Ni41IDQxNiAzODQgNDE2YzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xYzAgMCAwIDAgMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNDY5LjcgNDE3IDQ4MCAzODQgNDgwYy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2MwIDAgMCAwIDAgMEMxMzYuNyA0MDUuMiAxNjUuMSA0MTYgMTkyIDQxNmMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkJvb3RoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1ib290aCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjc1NlwiLCBcIk0yNTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNjAgNjQgMCAwLTE2MHptMzIwIDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ0OHpNMjI0IDUxMmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MC02NCAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyek0zMjAgMGMtOS4zIDAtMTguMSA0LTI0LjIgMTFzLTguOCAxNi4zLTcuNSAyNS41bDMxLjIgMjE4LjZMMjg4LjYgNDA5LjdjLTMuNSAxNy4zIDcuOCAzNC4yIDI1LjEgMzcuN3MzNC4yLTcuOCAzNy43LTI1LjFsLjctMy42YzEuMyAxNi40IDE1LjEgMjkuNCAzMS45IDI5LjRjMTcuNyAwIDMyLTE0LjMgMzItMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMjAgMHpNMTEyIDgwQTQ4IDQ4IDAgMSAwIDE2IDgwYTQ4IDQ4IDAgMSAwIDk2IDB6bTAgMjYxLjNsMC03Mi4xIDQuNyA0LjdjOSA5IDIxLjIgMTQuMSAzMy45IDE0LjFsNzMuNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02Ni43IDAtNDEuNi00MS42Yy0xNC4zLTE0LjMtMzMuOC0yMi40LTU0LTIyLjRDMjcuNiAxNjAgMCAxODcuNiAwIDIyMS42bDAgNTUuNyAwIC45TDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiA0Mi43TDk2IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNTguN2MwLTEwLjQtMy40LTIwLjUtOS42LTI4LjhMMTEyIDM0MS4zelwiXVxufTtcbmNvbnN0IGZhVGV4dFdpZHRoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RleHQtd2lkdGgnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwMzVcIiwgXCJNNjQgMTI4bDAtMzIgMTI4IDAgMCAxMjgtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtMTI4IDEyOCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDIyNCAzMiA0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwbDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNOS40IDM2MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42bDAtMzIgMTkyIDAgMCAzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlzLTE5LjggMTYuNi0xOS44IDI5LjZsMCAzMi0xOTIgMCAwLTMyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NHpcIl1cbn07XG5jb25zdCBmYUhhdFdpemFyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYXQtd2l6YXJkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNmU4XCIsIFwiTTY0IDQxNkwxNjguNiAxODAuN2MxNS4zLTM0LjQgNDAuMy02My41IDcyLTgzLjdsMTQ2LjktOTRjMy0xLjkgNi41LTIuOSAxMC0yLjlDNDA3LjcgMCA0MTYgOC4zIDQxNiAxOC42bDAgMS42YzAgMi42LS41IDUuMS0xLjQgNy41TDM1NC44IDE3Ni45Yy0xLjkgNC43LTIuOCA5LjctMi44IDE0LjdjMCA1LjUgMS4yIDExIDMuNCAxNi4xTDQ0OCA0MTZsLTIwNy4xIDAgMTEuOC0zNS40IDQwLjQtMTMuNWM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMnMtNC40LTEzLTEwLjktMTUuMmwtNDAuNC0xMy41LTEzLjUtNDAuNEMyMzcgMjc2LjQgMjMwLjkgMjcyIDIyNCAyNzJzLTEzIDQuNC0xNS4yIDEwLjlsLTEzLjUgNDAuNC00MC40IDEzLjVDMTQ4LjQgMzM5IDE0NCAzNDUuMSAxNDQgMzUyczQuNCAxMyAxMC45IDE1LjJsNDAuNCAxMy41TDIwNy4xIDQxNiA2NCA0MTZ6TTI3OS42IDE0MS41Yy0xLjEtMy4zLTQuMS01LjUtNy42LTUuNXMtNi41IDIuMi03LjYgNS41bC02LjcgMjAuMi0yMC4yIDYuN2MtMy4zIDEuMS01LjUgNC4xLTUuNSA3LjZzMi4yIDYuNSA1LjUgNy42bDIwLjIgNi43IDYuNyAyMC4yYzEuMSAzLjMgNC4xIDUuNSA3LjYgNS41czYuNS0yLjIgNy42LTUuNWw2LjctMjAuMiAyMC4yLTYuN2MzLjMtMS4xIDUuNS00LjEgNS41LTcuNnMtMi4yLTYuNS01LjUtNy42bC0yMC4yLTYuNy02LjctMjAuMnpNMzIgNDQ4bDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYVBlbkZhbmN5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blbi1mYW5jeScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODM5NSwgMTAwMDJdLCBcImY1YWNcIiwgXCJNMzczLjUgMjcuMUMzODguNSA5LjkgNDEwLjIgMCA0MzMgMGM0My42IDAgNzkgMzUuNCA3OSA3OWMwIDIyLjgtOS45IDQ0LjYtMjcuMSA1OS42TDI3Ny43IDMxOWwtMTAuMy0xMC4zLTY0LTY0TDE5MyAyMzQuMyAzNzMuNSAyNy4xek0xNzAuMyAyNTYuOWwxMC40IDEwLjQgNjQgNjQgMTAuNCAxMC40LTE5LjIgODMuNGMtMy45IDE3LjEtMTYuOSAzMC43LTMzLjggMzUuNEwyNC4zIDUxMC4zbDk1LjQtOTUuNGMyLjYgLjcgNS40IDEuMSA4LjMgMS4xYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgMi45IC40IDUuNiAxLjEgOC4zTDEuNyA0ODcuNiA1MS41IDMxMGM0LjctMTYuOSAxOC4zLTI5LjkgMzUuNC0zMy44bDgzLjQtMTkuMnpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkRpZ2dpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWRpZ2dpbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImRpZ2dpbmdcIl0sIFwiZjg1ZVwiLCBcIk0yMDggNjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNOS44IDIxNC44YzUuMS0xMi4yIDE5LjEtMTggMzEuNC0xMi45TDYwLjcgMjEwbDIyLjktMzguMUM5OS45IDE0NC42IDEyOS4zIDEyOCAxNjEgMTI4YzUxLjQgMCA5NyAzMi45IDExMy4zIDgxLjdsMzQuNiAxMDMuNyA3OS4zIDMzLjEgMzQuMi00NS42YzYuNC04LjUgMTYuNi0xMy4zIDI3LjItMTIuOHMyMC4zIDYuNCAyNS44IDE1LjVsOTYgMTYwYzUuOSA5LjkgNi4xIDIyLjIgLjQgMzIuMnMtMTYuMyAxNi4yLTI3LjggMTYuMmwtMjU2IDBjLTExLjEgMC0yMS40LTUuNy0yNy4yLTE1LjJzLTYuNC0yMS4yLTEuNC0zMS4xbDE2LTMyYzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdsMzIgMCAyMi41LTMwTDIyLjggMjQ2LjJjLTEyLjItNS4xLTE4LTE5LjEtMTIuOS0zMS40em04Mi44IDkxLjhsMTEyIDQ4YzExLjggNSAxOS40IDE2LjYgMTkuNCAyOS40bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC03NC45LTYwLjYtMjYtMzcgMTExYy01LjYgMTYuOC0yMy43IDI1LjgtNDAuNSAyMC4yUy0zLjkgNDg2LjYgMS42IDQ2OS45bDQ4LTE0NCAxMS0zMyAzMiAxMy43elwiXVxufTtcbmNvbnN0IGZhRGlnZ2luZyA9IGZhUGVyc29uRGlnZ2luZztcbmNvbnN0IGZhVHJhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhc2gnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYxZjhcIiwgXCJNMTM1LjIgMTcuN0wxMjggMzIgMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwLTcuMi0xNC4zQzMwNy40IDYuOCAyOTYuMyAwIDI4NC4yIDBMMTYzLjggMGMtMTIuMSAwLTIzLjIgNi44LTI4LjYgMTcuN3pNNDE2IDEyOEwzMiAxMjggNTMuMiA0NjdjMS42IDI1LjMgMjIuNiA0NSA0Ny45IDQ1bDI0NS44IDBjMjUuMyAwIDQ2LjMtMTkuNyA0Ny45LTQ1TDQxNiAxMjh6XCJdXG59O1xuY29uc3QgZmFHYXVnZVNpbXBsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXVnZS1zaW1wbGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImdhdWdlLXNpbXBsZS1tZWRcIiwgXCJ0YWNob21ldGVyLWF2ZXJhZ2VcIl0sIFwiZjYyOVwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTMyMCA5NmMwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjgwIDg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA0LjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuM2MwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXVxufTtcbmNvbnN0IGZhR2F1Z2VTaW1wbGVNZWQgPSBmYUdhdWdlU2ltcGxlO1xuY29uc3QgZmFUYWNob21ldGVyQXZlcmFnZSA9IGZhR2F1Z2VTaW1wbGU7XG5jb25zdCBmYUJvb2tNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stbWVkaWNhbCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjdlNlwiLCBcIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDM4NCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMEw5NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTZMMCA5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjRMOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMjA4IDExMmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG5jb25zdCBmYVBvbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwb28nLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNjldLCBcImYyZmVcIiwgXCJNMjY4LjkgLjljLTUuNS0uNy0xMSAxLjQtMTQuNSA1LjdzLTQuNiAxMC4xLTIuOCAxNS40YzIuOCA4LjIgNC4zIDE2LjkgNC4zIDI2LjFjMCA0NC4xLTM1LjcgNzkuOS03OS44IDgwTDE2MCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0YzAgMTkuMSA4LjQgMzYuMyAyMS43IDQ4TDEwNCAyNDBjLTM5LjggMC03MiAzMi4yLTcyIDcyYzAgMjMuMiAxMSA0My44IDI4IDU3Yy0zNC4xIDUuNy02MCAzNS4zLTYwIDcxYzAgMzkuOCAzMi4yIDcyIDcyIDcybDM2OCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyYzAtMzUuNy0yNS45LTY1LjMtNjAtNzFjMTctMTMuMiAyOC0zMy44IDI4LTU3YzAtMzkuOC0zMi4yLTcyLTcyLTcybC0xMy43IDBjMTMuMy0xMS43IDIxLjctMjguOSAyMS43LTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC01LjUgMGMzLjUtMTAgNS41LTIwLjggNS41LTMyYzAtNDguNi0zNi4yLTg4LjgtODMuMS05NS4xek0xOTIgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptNjQgMTA4LjNjMCAyLjQtLjcgNC44LTIuMiA2LjdjLTguMiAxMC41LTM5LjUgNDUtOTMuOCA0NXMtODUuNi0zNC42LTkzLjgtNDVjLTEuNS0xLjktMi4yLTQuMy0yLjItNi43YzAtNi44IDUuNS0xMi4zIDEyLjMtMTIuM2wxNjcuNCAwYzYuOCAwIDEyLjMgNS41IDEyLjMgMTIuM3pcIl1cbn07XG5jb25zdCBmYVF1b3RlUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncXVvdGUtcmlnaHQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MjIxLCBcInF1b3RlLXJpZ2h0LWFsdFwiXSwgXCJmMTBlXCIsIFwiTTQ0OCAyOTZjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyIDAgMzIgMCA3MnptLTI1NiAwYzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC04IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtOC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiAwIDMyIDAgNzJ6XCJdXG59O1xuY29uc3QgZmFRdW90ZVJpZ2h0QWx0ID0gZmFRdW90ZVJpZ2h0O1xuY29uc3QgZmFTaGlydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaGlydCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODA4NSwgXCJ0LXNoaXJ0XCIsIFwidHNoaXJ0XCJdLCBcImY1NTNcIiwgXCJNMjExLjggMGM3LjggMCAxNC4zIDUuNyAxNi43IDEzLjJDMjQwLjggNTEuOSAyNzcuMSA4MCAzMjAgODBzNzkuMi0yOC4xIDkxLjUtNjYuOEM0MTMuOSA1LjcgNDIwLjQgMCA0MjguMiAwbDEyLjYgMGMyMi41IDAgNDQuMiA3LjkgNjEuNSAyMi4zTDYyOC41IDEyNy40YzYuNiA1LjUgMTAuNyAxMy41IDExLjQgMjIuMXMtMi4xIDE3LjEtNy44IDIzLjZsLTU2IDY0Yy0xMS40IDEzLjEtMzEuMiAxNC42LTQ0LjYgMy41TDQ4MCAxOTcuNyA0ODAgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yNTAuMy01MS41IDQyLjljLTEzLjMgMTEuMS0zMy4xIDkuNi00NC42LTMuNWwtNTYtNjRjLTUuNy02LjUtOC41LTE1LTcuOC0yMy42czQuOC0xNi42IDExLjQtMjIuMUwxMzcuNyAyMi4zQzE1NSA3LjkgMTc2LjcgMCAxOTkuMiAwbDEyLjYgMHpcIl1cbn07XG5jb25zdCBmYVRTaGlydCA9IGZhU2hpcnQ7XG5jb25zdCBmYVRzaGlydCA9IGZhU2hpcnQ7XG5jb25zdCBmYUN1YmVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2N1YmVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMWIzXCIsIFwiTTI5MC44IDQ4LjZsNzguNCAyOS43TDI4OCAxMDkuNSAyMDYuOCA3OC4zbDc4LjQtMjkuN2MxLjgtLjcgMy44LS43IDUuNyAwek0xMzYgOTIuNWwwIDExMi4yYy0xLjMgLjQtMi42IC44LTMuOSAxLjNsLTk2IDM2LjRDMTQuNCAyNTAuNiAwIDI3MS41IDAgMjk0LjdMMCA0MTMuOWMwIDIyLjIgMTMuMSA0Mi4zIDMzLjUgNTEuM2w5NiA0Mi4yYzE0LjQgNi4zIDMwLjcgNi4zIDQ1LjEgMEwyODggNDU3LjVsMTEzLjUgNDkuOWMxNC40IDYuMyAzMC43IDYuMyA0NS4xIDBsOTYtNDIuMmMyMC4zLTguOSAzMy41LTI5LjEgMzMuNS01MS4zbDAtMTE5LjFjMC0yMy4zLTE0LjQtNDQuMS0zNi4xLTUyLjRsLTk2LTM2LjRjLTEuMy0uNS0yLjYtLjktMy45LTEuM2wwLTExMi4yYzAtMjMuMy0xNC40LTQ0LjEtMzYuMS01Mi40bC05Ni0zNi40Yy0xMi44LTQuOC0yNi45LTQuOC0zOS43IDBsLTk2IDM2LjRDMTUwLjQgNDguNCAxMzYgNjkuMyAxMzYgOTIuNXpNMzkyIDIxMC42bC04Mi40IDMxLjIgMC04OS4yTDM5MiAxMjFsMCA4OS42ek0xNTQuOCAyNTAuOWw3OC40IDI5LjdMMTUyIDMxMS43IDcwLjggMjgwLjZsNzguNC0yOS43YzEuOC0uNyAzLjgtLjcgNS43IDB6bTE4LjggMjA0LjRsMC0xMDAuNUwyNTYgMzIzLjJsMCA5NS45LTgyLjQgMzYuMnpNNDIxLjIgMjUwLjljMS44LS43IDMuOC0uNyA1LjcgMGw3OC40IDI5LjdMNDI0IDMxMS43bC04MS4yLTMxLjEgNzguNC0yOS43ek01MjMuMiA0MjEuMmwtNzcuNiAzNC4xIDAtMTAwLjVMNTI4IDMyMy4ybDAgOTAuN2MwIDMuMi0xLjkgNi00LjggNy4zelwiXVxufTtcbmNvbnN0IGZhRGl2aWRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpdmlkZScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEwMTM1LCAyNDddLCBcImY1MjlcIiwgXCJNMjcyIDk2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTAgMzIwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQwMCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNDggMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM1MiAwelwiXVxufTtcbmNvbnN0IGZhVGVuZ2VTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbmdlLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFs4Mzc2LCBcInRlbmdlXCJdLCBcImY3ZDdcIiwgXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNjAgMCAxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDAgMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjRMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl1cbn07XG5jb25zdCBmYVRlbmdlID0gZmFUZW5nZVNpZ247XG5jb25zdCBmYUhlYWRwaG9uZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhZHBob25lcycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzkxMV0sIFwiZjAyNVwiLCBcIk0yNTYgODBDMTQ5LjkgODAgNjIuNCAxNTkuNCA0OS42IDI2MmM5LjQtMy44IDE5LjYtNiAzMC40LTZjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMjhjMCAyNi41LTIxLjUgNDgtNDggNDhjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTYgMC00OCAwLTQ4QzAgMTQ2LjYgMTE0LjYgMzIgMjU2IDMyczI1NiAxMTQuNiAyNTYgMjU2bDAgNDggMCA0OCAwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTEyOGMwLTI2LjUgMjEuNS00OCA0OC00OGMxMC44IDAgMjEgMi4xIDMwLjQgNkM0NDkuNiAxNTkuNCAzNjIuMSA4MCAyNTYgODB6XCJdXG59O1xuY29uc3QgZmFIYW5kc0hvbGRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHMtaG9sZGluZycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjRjMlwiLCBcIk04MCAxMDRjMC0yMi4xLTE3LjktNDAtNDAtNDBTMCA4MS45IDAgMTA0bDAgNTYgMCA2NEwwIDMyNS41YzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45TDEyOCA0OTMuM2MxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43bDY2LjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTc4LjljMC0yOS43LTExLjgtNTguMi0zMi44LTc5LjJsLTI1LjMtMjUuM2MwIDAgMCAwIDAgMGwtMTUuMi0xNS4yLTMyLTMyYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wzMiAzMiAxNS4yIDE1LjJjMTEgMTEgOS4yIDI5LjItMy43IDM3LjhjLTkuNyA2LjUtMjIuNyA1LjItMzEtMy4xTDk4LjcgMzA5LjVjLTEyLTEyLTE4LjctMjguMy0xOC43LTQ1LjNMODAgMjI0bDAtODAgMC00MHptNDgwIDBsMCA0MCAwIDgwIDAgNDAuMmMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM2wtNTEuMSA1MS4xYy04LjMgOC4zLTIxLjMgOS42LTMxIDMuMWMtMTIuOS04LjYtMTQuNy0yNi45LTMuNy0zNy44bDE1LjItMTUuMiAzMi0zMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMzIgMzItMTUuMiAxNS4yYzAgMCAwIDAgMCAwbC0yNS4zIDI1LjNjLTIxIDIxLTMyLjggNDkuNS0zMi44IDc5LjJsMCA3OC45YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY2LjcgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2w5OS45LTk5LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOUw2NDAgMjI0bDAtNjQgMC01NmMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHpcIl1cbn07XG5jb25zdCBmYUhhbmRzQ2xhcHBpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHMtY2xhcHBpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUxYThcIiwgXCJNMzM2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0tOTguNyA3LjFsMzIgNDhjNC45IDcuNCAyLjkgMTcuMy00LjQgMjIuMnMtMTcuMyAyLjktMjIuMi00LjRsLTMyLTQ4Yy00LjktNy40LTIuOS0xNy4zIDQuNC0yMi4yczE3LjMtMi45IDIyLjIgNC40ek0xMzUgMTE5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI5Mi43IDI0Mi43YzEwLjEgMTAuMSAyNy4zIDIuOSAyNy4zLTExLjNsMC0zOS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNTMuNmMwIDU3LjEtMzAgMTEwLTc4LjkgMTM5LjRjLTY0IDM4LjQtMTQ1LjggMjguMy0xOTguNS0yNC40TDcgMzYxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTMgNTNjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFMMjMgMjY1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsOTMgOTNjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFMNTUgMTg1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTE3IDExN2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMWwtOTMtOTNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45ek00MzMuMSA0ODQuOWMtMjQuMiAxNC41LTUwLjkgMjIuMS03Ny43IDIzLjFjNDguMS0zOS42IDc2LjYtOTkgNzYuNi0xNjIuNGwwLTk4LjFjOC4yLS4xIDE2LTYuNCAxNi0xNmwwLTM5LjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE1My42YzAgNTcuMS0zMCAxMTAtNzguOSAxMzkuNHpNNDI0LjkgMTguN2M3LjQgNC45IDkuMyAxNC44IDQuNCAyMi4ybC0zMiA0OGMtNC45IDcuNC0xNC44IDkuMy0yMi4yIDQuNHMtOS4zLTE0LjgtNC40LTIyLjJsMzItNDhjNC45LTcuNCAxNC44LTkuMyAyMi4yLTQuNHpcIl1cbn07XG5jb25zdCBmYVJlcHVibGljYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVwdWJsaWNhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjc1ZVwiLCBcIk0wIDE5MkMwIDEwMy42IDcxLjYgMzIgMTYwIDMybDIyNCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgNjRMMCAyNTZsMC02NHptNDE1LjktNjRjLTIuNCAwLTQuNyAxLjMtNS43IDMuNGwtMTIuNiAyNC42LTI4LjIgNGMtMi40IC4zLTQuNCAyLTUuMiA0LjJzLS4xIDQuNyAxLjYgNi4zbDIwLjQgMTkuMi00LjggMjcuMWMtLjQgMi4zIC42IDQuNyAyLjUgNnM0LjYgMS42IDYuNyAuNWwyNS4yLTEyLjggMjUuMiAxMi44YzIuMiAxLjEgNC44IC45IDYuNy0uNXMzLTMuNyAyLjUtNmwtNC44LTI3LjFMNDY2IDE3MC41YzEuNy0xLjYgMi40LTQuMSAxLjYtNi4zcy0yLjgtMy45LTUuMi00LjJsLTI4LjItNC0xMi42LTI0LjZjLTEuMS0yLjEtMy4zLTMuNC01LjctMy40em0tMTM4LjMgMy40Yy0xLjEtMi4xLTMuMy0zLjQtNS43LTMuNHMtNC43IDEuMy01LjcgMy40bC0xMi42IDI0LjYtMjguMiA0Yy0yLjQgLjMtNC40IDItNS4yIDQuMnMtLjEgNC43IDEuNiA2LjNsMjAuNCAxOS4yLTQuOCAyNy4xYy0uNCAyLjMgLjYgNC43IDIuNSA2czQuNiAxLjYgNi43IC41bDI1LjItMTIuOCAyNS4yIDEyLjhjMi4yIDEuMSA0LjggLjkgNi43LS41czMtMy43IDIuNS02bC00LjgtMjcuMUwzMjIgMTcwLjVjMS43LTEuNiAyLjQtNC4xIDEuNi02LjNzLTIuOC0zLjktNS4yLTQuMmwtMjguMi00LTEyLjYtMjQuNnpNMTI3LjkgMTI4Yy0yLjQgMC00LjcgMS4zLTUuNyAzLjRsLTEyLjYgMjQuNi0yOC4yIDRjLTIuNCAuMy00LjQgMi01LjIgNC4ycy0uMSA0LjcgMS42IDYuM2wyMC40IDE5LjItNC44IDI3LjFjLS40IDIuMyAuNiA0LjcgMi41IDZzNC42IDEuNiA2LjcgLjVsMjUuMi0xMi44IDI1LjIgMTIuOGMyLjIgMS4xIDQuOCAuOSA2LjctLjVzMy0zLjcgMi41LTZsLTQuOC0yNy4xTDE3OCAxNzAuNWMxLjctMS42IDIuNC00LjEgMS42LTYuM3MtMi44LTMuOS01LjItNC4ybC0yOC4yLTQtMTIuNi0yNC42Yy0xLjEtMi4xLTMuMy0zLjQtNS43LTMuNHptLjEgMTYwbDE5MiAwIDk2IDAgMzIgMCA2NCAwIDMyIDAgMCAzMiAwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDhjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBsMC00OC0zMiAwIDAgMzIgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NC0xOTIgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0IDAtOTYgMTI4IDB6XCJdXG59O1xuY29uc3QgZmFBcnJvd0xlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctbGVmdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg1OTJdLCBcImYwNjBcIiwgXCJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjIgMjg4IDQxNiAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwNi43IDBMMjE0LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6XCJdXG59O1xuY29uc3QgZmFQZXJzb25DaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTQzXCIsIFwiTTExMiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjMuMUw1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmwyOS43IDBjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45IDIzMiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMTYgMHpNNDMyIDIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdXG59O1xuY29uc3QgZmFSdWxlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdydWxlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODIwN10sIFwiZjU0NVwiLCBcIk0xNzcuOSA0OTQuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMTcuOSA0MDEuOWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlsNTAuNy01MC43IDQ4IDQ4YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNDgtNDggNDEuNC00MS40IDQ4IDQ4YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNDgtNDggNDEuNC00MS40IDQ4IDQ4YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNDgtNDggNDEuNC00MS40IDQ4IDQ4YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNDgtNDggNTAuNy01MC43YzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDkyLjEgOTIuMWMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOUwxNzcuOSA0OTQuMXpcIl1cbn07XG5jb25zdCBmYUFsaWduTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbGlnbi1sZWZ0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDM2XCIsIFwiTTI4OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFEaWNlRDYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1kNicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjZkMVwiLCBcIk0yMDEgMTAuM2MxNC4zLTcuOCAzMS42LTcuOCA0NiAwTDQyMi4zIDEwNmM1LjEgMi44IDguMyA4LjIgOC4zIDE0cy0zLjIgMTEuMi04LjMgMTRMMjMxLjcgMjM4Yy00LjggMi42LTEwLjUgMi42LTE1LjMgMEwyNS43IDEzNGMtNS4xLTIuOC04LjMtOC4yLTguMy0xNHMzLjItMTEuMiA4LjMtMTRMMjAxIDEwLjN6TTIzLjcgMTcwbDE3NiA5NmM1LjEgMi44IDguMyA4LjIgOC4zIDE0bDAgMjE2YzAgNS42LTMgMTAuOS03LjggMTMuOHMtMTAuOSAzLTE1LjggLjNMMjUgNDIzLjFDOS42IDQxNC43IDAgMzk4LjYgMCAzODFMMCAxODRjMC01LjYgMy0xMC45IDcuOC0xMy44czEwLjktMyAxNS44LS4zem00MDAuNyAwYzUtMi43IDExLTIuNiAxNS44IC4zczcuOCA4LjEgNy44IDEzLjhsMCAxOTdjMCAxNy42LTkuNiAzMy43LTI1IDQyLjFMMjYzLjcgNTEwYy01IDIuNy0xMSAyLjYtMTUuOC0uM3MtNy44LTguMS03LjgtMTMuOGwwLTIxNmMwLTUuOSAzLjItMTEuMiA4LjMtMTRsMTc2LTk2elwiXVxufTtcbmNvbnN0IGZhUmVzdHJvb20gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmVzdHJvb20nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3YmRcIiwgXCJNODAgNDhhNDggNDggMCAxIDEgOTYgMEE0OCA0OCAwIDEgMSA4MCA0OHptNDAgMzA0bDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTU0LjhjLTguMSA5LjItMjEuMSAxMy4yLTMzLjUgOS40Yy0xNi45LTUuMy0yNi4zLTIzLjItMjEtNDAuMWwzMC45LTk5LjFDNDQuOSAxNTUuMyA4MiAxMjggMTI0IDEyOGw4IDBjNDIgMCA3OS4xIDI3LjMgOTEuNiA2Ny40bDMwLjkgOTkuMWM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xYy0xMi40IDMuOS0yNS40LS4yLTMzLjUtOS40TDIwMCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMTYgMHpNMzIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0NjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00NjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTQ2NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00NDAgNDgwbDAtOTYtMTcuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw5LTI2LjljLTMuMiAwLTYuNC0uNS05LjUtMS41Yy0xNi45LTUuMy0yNi4zLTIzLjItMjEtNDAuMWwyOS43LTk1LjJDNDI4LjQgMTU2LjkgNDY3LjYgMTI4IDUxMiAxMjhzODMuNiAyOC45IDk2LjggNzEuMmwyOS43IDk1LjJjNS4zIDE2LjktNC4xIDM0LjgtMjEgNDAuMWMtMy4yIDEtNi40IDEuNS05LjUgMS41bDkgMjYuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFMNTg0IDM4NGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyelwiXVxufTtcbmNvbnN0IGZhSiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTA2XSwgXCI0YVwiLCBcIk0yODggMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0MDguNCAwIDMyMGwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbmNvbnN0IGZhVXNlcnNWaWV3ZmluZGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXJzLXZpZXdmaW5kZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OTVcIiwgXCJNNDggNDhsODggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwzMiAwQzE0LjMgMCAwIDE0LjMgMCAzMkwwIDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODh6TTE3NS44IDIyNGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS0yNi41IDMyQzExOS45IDI1NiA5NiAyNzkuOSA5NiAzMDkuM2MwIDE0LjcgMTEuOSAyNi43IDI2LjcgMjYuN2w1Ni4xIDBjOC0zNC4xIDMyLjgtNjEuNyA2NS4yLTczLjZjLTcuNS00LjEtMTYuMi02LjQtMjUuMy02LjRsLTY5LjMgMHptMzY4IDgwYzE0LjcgMCAyNi43LTExLjkgMjYuNy0yNi43YzAtMjkuNS0yMy45LTUzLjMtNTMuMy01My4zbC02OS4zIDBjLTkuMiAwLTE3LjggMi4zLTI1LjMgNi40YzMyLjQgMTEuOSA1Ny4yIDM5LjUgNjUuMiA3My42bDU2LjEgMHptLTg5LjQgMGMtOC42LTI0LjMtMjkuOS00Mi42LTU1LjktNDdjLTMuOS0uNy03LjktMS0xMi0xbC04MCAwYy00LjEgMC04LjEgLjMtMTIgMWMtMjYgNC40LTQ3LjMgMjIuNy01NS45IDQ3Yy0yLjcgNy41LTQuMSAxNS42LTQuMSAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGMwLTguNC0xLjQtMTYuNS00LjEtMjR6TTQ2NCAyMjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tODAtMzJhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek01MDQgNDhsODggMCAwIDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDRjMC0xNy43LTE0LjMtMzItMzItMzJMNTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6TTQ4IDQ2NGwwLTg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0TDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04OCAwem00NTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDg4LTg4IDB6XCJdXG59O1xuY29uc3QgZmFGaWxlVmlkZW8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS12aWRlbycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjFjOFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMjI0IDAgNjQgMHpNMjU2IDBsMCAxMjggMTI4IDBMMjU2IDB6TTY0IDI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6TTMwMC45IDM5Ny45TDI1NiAzNjhsMC02NCA0NC45LTI5LjljMi0xLjMgNC40LTIuMSA2LjgtMi4xYzYuOCAwIDEyLjMgNS41IDEyLjMgMTIuM2wwIDEwMy40YzAgNi44LTUuNSAxMi4zLTEyLjMgMTIuM2MtMi40IDAtNC44LS43LTYuOC0yLjF6XCJdXG59O1xuY29uc3QgZmFVcFJpZ2h0RnJvbVNxdWFyZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1cC1yaWdodC1mcm9tLXNxdWFyZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZXh0ZXJuYWwtbGluay1hbHRcIl0sIFwiZjM1ZFwiLCBcIk0zNTIgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlMMzcwLjcgOTYgMjAxLjQgMjY1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMNDE2IDE0MS4zbDQxLjQgNDEuNGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42bDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDM1MiAwek04MCAzMkMzNS44IDMyIDAgNjcuOCAwIDExMkwwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzMjAgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTExMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZMODAgNDQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC0zMjBjMC04LjggNy4yLTE2IDE2LTE2bDExMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDMyelwiXVxufTtcbmNvbnN0IGZhRXh0ZXJuYWxMaW5rQWx0ID0gZmFVcFJpZ2h0RnJvbVNxdWFyZTtcbmNvbnN0IGZhVGFibGVDZWxscyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZS1jZWxscycsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGhcIl0sIFwiZjAwYVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem04OCA2NGwwIDY0LTg4IDAgMC02NCA4OCAwem01NiAwbDg4IDAgMCA2NC04OCAwIDAtNjR6bTI0MCAwbDAgNjQtODggMCAwLTY0IDg4IDB6TTY0IDIyNGw4OCAwIDAgNjQtODggMCAwLTY0em0yMzIgMGwwIDY0LTg4IDAgMC02NCA4OCAwem02NCAwbDg4IDAgMCA2NC04OCAwIDAtNjR6TTE1MiAzNTJsMCA2NC04OCAwIDAtNjQgODggMHptNTYgMGw4OCAwIDAgNjQtODggMCAwLTY0em0yNDAgMGwwIDY0LTg4IDAgMC02NCA4OCAwelwiXVxufTtcbmNvbnN0IGZhVGggPSBmYVRhYmxlQ2VsbHM7XG5jb25zdCBmYUZpbGVQZGYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1wZGYnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxYzFcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjI0IDBsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDAgMCAxNDQtMjA4IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMTQ0LTQ4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTM4NCA2NGwtMTI4IDBMMjU2IDAgMzg0IDEyOHpNMTc2IDM1MmwzMiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2cy0yNS4xIDU2LTU2IDU2bC0xNiAwIDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OCAwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnptMzIgODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2IDAgMCA0OCAxNiAwem05Ni04MGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTEyOGMwLTguOCA3LjItMTYgMTYtMTZ6bTMyIDEyOGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZsLTE2IDAgMCA5NiAxNiAwem04MC0xMTJjMC04LjggNy4yLTE2IDE2LTE2bDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTMyIDAgMCAzMiAzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0zMiAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC02NCAwLTY0elwiXVxufTtcbmNvbnN0IGZhQm9va0JpYmxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stYmlibGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImJpYmxlXCJdLCBcImY2NDdcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2bDI4OCAwIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02NGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzODQgMCA5NiAwem0wIDM4NGwyNTYgMCAwIDY0TDk2IDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNMjA4IDgwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwIDAgMTEyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTEyLTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwIDAtNDh6XCJdXG59O1xuY29uc3QgZmFCaWJsZSA9IGZhQm9va0JpYmxlO1xuY29uc3QgZmFPID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ28nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMTFdLCBcIjRmXCIsIFwiTTIyNCA5NmExNjAgMTYwIDAgMSAwIDAgMzIwIDE2MCAxNjAgMCAxIDAgMC0zMjB6TTQ0OCAyNTZBMjI0IDIyNCAwIDEgMSAwIDI1NmEyMjQgMjI0IDAgMSAxIDQ0OCAwelwiXVxufTtcbmNvbnN0IGZhU3VpdGNhc2VNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1aXRjYXNlLW1lZGljYWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcIm1lZGtpdFwiXSwgXCJmMGZhXCIsIFwiTTE4NCA0OGwxNDQgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MEwxNzYgOTZsMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAgMCAzMiAwIDM1MiAyNTYgMCAwLTM1MiAwLTMyIDAtNDBjMC0zMC45LTI1LjEtNTYtNTYtNTZMMTg0IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek05NiA5Nkw2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIgMEw5NiA5NnpNNDE2IDQ4MGwzMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAgMzg0ek0yMjQgMjA4YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDggMCAwLTQ4elwiXVxufTtcbmNvbnN0IGZhTWVka2l0ID0gZmFTdWl0Y2FzZU1lZGljYWw7XG5jb25zdCBmYVVzZXJTZWNyZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1zZWNyZXQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgzNzNdLCBcImYyMWJcIiwgXCJNMjI0IDE2Yy02LjcgMC0xMC44LTIuOC0xNS41LTYuMUMyMDEuOSA1LjQgMTk0IDAgMTc2IDBjLTMwLjUgMC01MiA0My43LTY2IDg5LjRDNjIuNyA5OC4xIDMyIDExMi4yIDMyIDEyOGMwIDE0LjMgMjUgMjcuMSA2NC42IDM1LjljLS40IDQtLjYgOC0uNiAxMi4xYzAgMTcgMy4zIDMzLjIgOS4zIDQ4bC01OS45IDBDMzggMjI0IDMyIDIzMCAzMiAyMzcuNGMwIDEuNyAuMyAzLjQgMSA1bDM4LjggOTYuOUMyOC4yIDM3MS44IDAgNDIzLjggMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEybDM4OC42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjdjMC01OC41LTI4LjItMTEwLjQtNzEuNy0xNDNMNDE1IDI0Mi40Yy42LTEuNiAxLTMuMyAxLTVjMC03LjQtNi0xMy40LTEzLjQtMTMuNGwtNTkuOSAwYzYtMTQuOCA5LjMtMzEgOS4zLTQ4YzAtNC4xLS4yLTguMS0uNi0xMi4xQzM5MSAxNTUuMSA0MTYgMTQyLjMgNDE2IDEyOGMwLTE1LjgtMzAuNy0yOS45LTc4LTM4LjZDMzI0IDQzLjcgMzAyLjUgMCAyNzIgMGMtMTggMC0yNS45IDUuNC0zMi41IDkuOWMtNC44IDMuMy04LjggNi4xLTE1LjUgNi4xem01NiAyMDhsLTEyLjQgMGMtMTYuNSAwLTMxLjEtMTAuNi0zNi4zLTI2LjJjLTIuMy03LTEyLjItNy0xNC41IDBjLTUuMiAxNS42LTE5LjkgMjYuMi0zNi4zIDI2LjJMMTY4IDIyNGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0xNC40YzI4LjIgNC4xIDYxIDYuNCA5NiA2LjRzNjcuOC0yLjMgOTYtNi40bDAgMTQuNGMwIDIyLjEtMTcuOSA0MC00MCA0MHptLTg4IDk2bDE2IDMyTDE3NiA0ODAgMTI4IDI4OGw2NCAzMnptMTI4LTMyTDI3MiA0ODAgMjQwIDM1MmwxNi0zMiA2NC0zMnpcIl1cbn07XG5jb25zdCBmYU90dGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ290dGVyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI5NDQ2XSwgXCJmNzAwXCIsIFwiTTE4MS41IDE5Ny4xbDEyLjkgNi40YzUuOSAzIDEyLjQgNC41IDE5LjEgNC41YzIzLjUgMCA0Mi42LTE5LjEgNDIuNi00Mi42bDAtMjEuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMS40YzAgMjMuNSAxOS4xIDQyLjYgNDIuNiA0Mi42YzYuNiAwIDEzLjEtMS41IDE5LjEtNC41bDEyLjktNi40IDguNC00LjJMMTM1LjEgMTg1Yy00LjUtMy03LjEtOC03LjEtMTMuM2wwLTMuN2MwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMy43YzAgNS4zLTIuNyAxMC4zLTcuMSAxMy4zbC0xMS44IDcuOSA4LjQgNC4yem0tOC42IDQ5LjRMMTYwIDI0MGwtMTIuOSA2LjRjLTEyLjYgNi4zLTI2LjUgOS42LTQwLjUgOS42Yy0zLjYgMC03LjEtLjItMTAuNi0uNmwwIC42YzAgMzUuMyAyOC43IDY0IDY0IDY0bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMTYwIDAgMC00OCAwLTE2YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGM5LjQtNS40IDIwLjMtOC42IDMyLTguNmwwLTE2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyIDAgMTYgMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTkuN2MwLTQ4LjItMzAuOC05MS03Ni42LTEwNi4zbC04LjUtMi44Yy04LTIuNy0xMi42LTExLjEtMTAuNC0xOS4zczEwLjMtMTMuMiAxOC42LTExLjZsMTkuOSA0QzU3NiA4Ni4xIDY0MCAxNjQuMiA2NDAgMjU0LjlsMCAxLjFzMCAwIDAgMGMwIDEyMy43LTEwMC4zIDIyNC0yMjQgMjI0bC0xLjEgMEwyNTYgNDgwbC0uNiAwQzEzMiA0ODAgMzIgMzgwIDMyIDI1Ni42bDAtLjYgMC0zOS4yYy0xMC4xLTE0LjYtMTYtMzIuMy0xNi01MS40TDE2IDE0NGwwLTEuNEM2LjcgMTM5LjMgMCAxMzAuNSAwIDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyLjggMEM0NC44IDU4LjIgODMuMyAzMiAxMjggMzJsNjQgMGM0NC43IDAgODMuMiAyNi4yIDEwMS4yIDY0bDIuOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0YzAgMTAuNS02LjcgMTkuMy0xNiAyMi42bDAgMS40IDAgMjEuNGMwIDEuNCAwIDIuOC0uMSA0LjNjMTItNi4yIDI1LjctOS42IDQwLjEtOS42bDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDggNTYuNCAwYy0xNS4yIDE3LTI0LjQgMzkuNC0yNC40IDY0bC0zMiAwYy00Mi4zIDAtNzguMi0yNy40LTkxLTY1LjNjLTUuMSAuOS0xMC4zIDEuMy0xNS42IDEuM2MtMTQuMSAwLTI3LjktMy4zLTQwLjUtOS42ek05NiAxMjhhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem0xMTIgMTZhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkRyZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1kcmVzcycsXG4gIGljb246IFszMjAsIDUxMiwgW1wiZmVtYWxlXCJdLCBcImYxODJcIiwgXCJNMTYwIDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2ek04OCAzODRsLTE3LjggMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFMOTMuMyAyNDguMSA1OS40IDMwNC41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTMuNi04OS4yYzIwLjMtMzMuNyA1Ni43LTU0LjMgOTYtNTQuM2wxMS42IDBjMzkuMyAwIDc1LjcgMjAuNiA5NiA1NC4zbDUzLjYgODkuMmM5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOWwtMzMuOS01Ni4zTDI2NSAzNjIuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFMMjMyIDM4NGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZ6XCJdXG59O1xuY29uc3QgZmFGZW1hbGUgPSBmYVBlcnNvbkRyZXNzO1xuY29uc3QgZmFDb21tZW50RG9sbGFyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvbW1lbnQtZG9sbGFyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjUxXCIsIFwiTTI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMlMwIDEyNS4xIDAgMjQwYzAgNDUuMSAxNy43IDg2LjggNDcuNyAxMjAuOWMtMS45IDI0LjUtMTEuNCA0Ni4zLTIxLjQgNjIuOWMtNS41IDkuMi0xMS4xIDE2LjYtMTUuMiAyMS42Yy0yLjEgMi41LTMuNyA0LjQtNC45IDUuN2MtLjYgLjYtMSAxLjEtMS4zIDEuNGwtLjMgLjNjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwYy00LjYgNC42LTUuOSAxMS40LTMuNCAxNy40YzIuNSA2IDguMyA5LjkgMTQuOCA5LjljMjguNyAwIDU3LjYtOC45IDgxLjYtMTkuM2MyMi45LTEwIDQyLjQtMjEuOSA1NC4zLTMwLjZjMzEuOCAxMS41IDY3IDE3LjkgMTA0LjEgMTcuOXptMjAtMzEybDAgMTMuOWM3LjUgMS4yIDE0LjYgMi45IDIxLjEgNC43YzEwLjcgMi44IDE3IDEzLjggMTQuMiAyNC41cy0xMy44IDE3LTI0LjUgMTQuMmMtMTEtMi45LTIxLjYtNS0zMS4yLTUuMmMtNy45LS4xLTE2IDEuOC0yMS41IDVjLTQuOCAyLjgtNi4yIDUuNi02LjIgOS4zYzAgMS44IC4xIDMuNSA1LjMgNi43YzYuMyAzLjggMTUuNSA2LjcgMjguMyAxMC41bC43IC4yYzExLjIgMy40IDI1LjYgNy43IDM3LjEgMTVjMTIuOSA4LjEgMjQuMyAyMS4zIDI0LjYgNDEuNmMuMyAyMC45LTEwLjUgMzYuMS0yNC44IDQ1Yy03LjIgNC41LTE1LjIgNy4zLTIzLjIgOWwwIDEzLjhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMTQuNmMtMTAuMy0yLjItMjAtNS41LTI4LjItOC40YzAgMCAwIDAgMCAwczAgMCAwIDBjLTIuMS0uNy00LjEtMS40LTYuMS0yLjFjLTEwLjUtMy41LTE2LjEtMTQuOC0xMi42LTI1LjNzMTQuOC0xNi4xIDI1LjMtMTIuNmMyLjUgLjggNC45IDEuNyA3LjIgMi40YzAgMCAwIDAgMCAwYzEzLjYgNC42IDI0IDguMSAzNS4xIDguNWM4LjYgLjMgMTYuNS0xLjYgMjEuNC00LjdjNC4xLTIuNSA2LTUuNSA1LjktMTAuNWMwLTIuOS0uOC01LTUuOS04LjJjLTYuMy00LTE1LjQtNi45LTI4LTEwLjdsLTEuNy0uNWMtMTAuOS0zLjMtMjQuNi03LjQtMzUuNi0xNGMtMTIuNy03LjctMjQuNi0yMC41LTI0LjctNDAuN2MtLjEtMjEuMSAxMS44LTM1LjcgMjUuOC00My45YzYuOS00LjEgMTQuNS02LjggMjIuMi04LjVsMC0xNGMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMHpcIl1cbn07XG5jb25zdCBmYUJ1c2luZXNzVGltZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdidXNpbmVzcy10aW1lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJicmllZmNhc2UtY2xvY2tcIl0sIFwiZjY0YVwiLCBcIk0xODQgNDhsMTQ0IDBjNC40IDAgOCAzLjYgOCA4bDAgNDBMMTc2IDk2bDAtNDBjMC00LjQgMy42LTggOC04em0tNTYgOGwwIDQwTDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MGwwIDk2IDE5MiAwIDE2MCAwIDguMiAwYzMyLjMtMzkuMSA4MS4xLTY0IDEzNS44LTY0YzUuNCAwIDEwLjcgLjIgMTYgLjdsMC0zMi43YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwIDAtNDBjMC0zMC45LTI1LjEtNTYtNTYtNTZMMTg0IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek0zMjAgMzUybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyTDAgMjg4IDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI5Ni4yIDBDMzM1LjEgNDQ5LjYgMzIwIDQxMC41IDMyMCAzNjhjMC01LjQgLjItMTAuNyAuNy0xNmwtLjcgMHptMzIwIDE2YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTQ5NiAyODhjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDggMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhQnJpZWZjYXNlQ2xvY2sgPSBmYUJ1c2luZXNzVGltZTtcbmNvbnN0IGZhVGFibGVDZWxsc0xhcmdlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxlLWNlbGxzLWxhcmdlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0aC1sYXJnZVwiXSwgXCJmMDA5XCIsIFwiTTQ0OCA5NmwwIDEyOC0xNjAgMCAwLTEyOCAxNjAgMHptMCAxOTJsMCAxMjgtMTYwIDAgMC0xMjggMTYwIDB6TTIyNCAyMjRMNjQgMjI0IDY0IDk2bDE2MCAwIDAgMTI4ek02NCAyODhsMTYwIDAgMCAxMjhMNjQgNDE2bDAtMTI4ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyelwiXVxufTtcbmNvbnN0IGZhVGhMYXJnZSA9IGZhVGFibGVDZWxsc0xhcmdlO1xuY29uc3QgZmFCb29rVGFuYWtoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jvb2stdGFuYWtoJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ0YW5ha2hcIl0sIFwiZjgyN1wiLCBcIk0zNTIgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMzIwYzAgNTMtNDMgOTYtOTYgOTZMNjQgNTEybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDY0IDAgMzUyIDB6bTAgMzg0TDk2IDM4NGwwIDY0IDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyek0xMzguNyAyMDhsMTMuOSAyNC0yNy43IDAgMTMuOS0yNHptLTEzLjktMjRMOTcuMSAyMzJjLTYuMiAxMC43IDEuNSAyNCAxMy45IDI0bDU1LjQgMCAyNy43IDQ4YzYuMiAxMC43IDIxLjYgMTAuNyAyNy43IDBsMjcuNy00OCA1NS40IDBjMTIuMyAwIDIwLTEzLjMgMTMuOS0yNGwtMjcuNy00OCAyNy43LTQ4YzYuMi0xMC43LTEuNS0yNC0xMy45LTI0bC01NS40IDBMMjIxLjkgNjRjLTYuMi0xMC43LTIxLjYtMTAuNy0yNy43IDBsLTI3LjcgNDhMMTExIDExMmMtMTIuMyAwLTIwIDEzLjMtMTMuOSAyNGwyNy43IDQ4em0yNy43IDBsMjcuNy00OCA1NS40IDAgMjcuNyA0OC0yNy43IDQ4LTU1LjQgMC0yNy43LTQ4em0wLTQ4bC0xMy45IDI0LTEzLjktMjQgMjcuNyAwem00MS42LTI0TDIwOCA4OGwxMy45IDI0LTI3LjcgMHptNjkuMyAyNGwyNy43IDAtMTMuOSAyNC0xMy45LTI0em0xMy45IDcybDEzLjkgMjQtMjcuNyAwIDEzLjktMjR6bS01NS40IDQ4TDIwOCAyODBsLTEzLjktMjQgMjcuNyAwelwiXVxufTtcbmNvbnN0IGZhVGFuYWtoID0gZmFCb29rVGFuYWtoO1xuY29uc3QgZmFQaG9uZVZvbHVtZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwaG9uZS12b2x1bWUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInZvbHVtZS1jb250cm9sLXBob25lXCJdLCBcImYyYTBcIiwgXCJNMjgwIDBDNDA4LjEgMCA1MTIgMTAzLjkgNTEyIDIzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTEwMS42LTgyLjQtMTg0LTE4NC0xODRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTggMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptLTMyLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0Yzc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDguNi0zOS40LTg4LTg4LTg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMTE3LjUgMS40YzE5LjQtNS4zIDM5LjcgNC42IDQ3LjQgMjMuMmw0MCA5NmM2LjggMTYuMyAyLjEgMzUuMi0xMS42IDQ2LjNMMTQ0IDIwNy4zYzMzLjMgNzAuNCA5MC4zIDEyNy40IDE2MC43IDE2MC43TDM0NSAzMTguN2MxMS4yLTEzLjcgMzAtMTguNCA0Ni4zLTExLjZsOTYgNDBjMTguNiA3LjcgMjguNSAyOCAyMy4yIDQ3LjRsLTI0IDg4QzQ4MS44IDQ5OS45IDQ2NiA1MTIgNDQ4IDUxMkMyMDAuNiA1MTIgMCAzMTEuNCAwIDY0QzAgNDYgMTIuMSAzMC4yIDI5LjUgMjUuNGw4OC0yNHpcIl1cbn07XG5jb25zdCBmYVZvbHVtZUNvbnRyb2xQaG9uZSA9IGZhUGhvbmVWb2x1bWU7XG5jb25zdCBmYUhhdENvd2JveVNpZGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGF0LWNvd2JveS1zaWRlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmOGMxXCIsIFwiTTE1Mi43IDEzNS45bC0xMC40IDU3LjJjNi44LS43IDEzLjYtMS4xIDIwLjUtMS4xbDEwLjcgMGMzOS40IDAgNzcuOCAxMi4xIDExMC4xIDM0LjdMNTYyLjQgNDIxLjhsMzUuMSAyNC42YzI0LjQtNiA0Mi41LTI4LjEgNDIuNS01NC40YzAtNzUuOC05NC43LTEyNi42LTEzNC42LTE0NC43TDQ3NCA4My45QzQ2OC4yIDUzLjggNDQxLjggMzIgNDExLjEgMzJsLTIuNyAwYy01LjYgMC0xMS4xIC43LTE2LjUgMi4yTDE5OS4yIDg1LjVjLTIzLjkgNi40LTQyIDI2LTQ2LjUgNTAuNHpNMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDgwIDBMMjY1LjMgMjUyLjljLTI2LjktMTguOC01OC45LTI4LjktOTEuOC0yOC45bC0xMC43IDBjLTYwLjYgMC0xMTYgMzQuMi0xNDMuMSA4OC40TDEzLjUgMzI1QzQuNiAzNDIuNyAwIDM2Mi4zIDAgMzgyLjJMMCAzODR6XCJdXG59O1xuY29uc3QgZmFDbGlwYm9hcmRVc2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsaXBib2FyZC11c2VyJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmN2YzXCIsIFwiTTE5MiAwYy00MS44IDAtNzcuNCAyNi43LTkwLjUgNjRMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTM3LjUgMEMyNjkuNCAyNi43IDIzMy44IDAgMTkyIDB6bTAgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xMjggMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNODAgNDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwbDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2elwiXVxufTtcbmNvbnN0IGZhQ2hpbGQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hpbGQnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImYxYWVcIiwgXCJNOTYgNjRhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgOTYgNjR6bTQ4IDMyMGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLjJMNTkuMSAzMjFjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMFMtNC41IDMwMS45IDQuOSAyODdsMzkuOS02My4zQzY5LjcgMTg0IDExMy4yIDE2MCAxNjAgMTYwczkwLjMgMjQgMTE1LjIgNjMuNkwzMTUuMSAyODdjOS40IDE1IDQuOSAzNC43LTEwIDQ0LjFzLTM0LjcgNC45LTQ0LjEtMTBMMjQwIDI4Ny44IDI0MCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni0zMiAwelwiXVxufTtcbmNvbnN0IGZhTGlyYVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlyYS1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbODM1Nl0sIFwiZjE5NVwiLCBcIk0xMTIgMTYwLjRjMC0zNS41IDI4LjgtNjQuNCA2NC40LTY0LjRjNi45IDAgMTMuOCAxLjEgMjAuNCAzLjNsODEuMiAyNy4xYzE2LjggNS42IDM0LjktMy41IDQwLjUtMjAuMnMtMy41LTM0LjktMjAuMi00MC41TDIxNyAzOC42Yy0xMy4xLTQuNC0yNi44LTYuNi00MC42LTYuNkMxMDUuNSAzMiA0OCA4OS41IDQ4IDE2MC40TDQ4IDE5MmwtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwIDAgMzItMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNCAwYy0yLjIgMTAuNS02LjEgMjAuNi0xMS43IDI5LjlMNC42IDQzMS41Yy01LjkgOS45LTYuMSAyMi4yLS40IDMyLjJTMjAuNSA0ODAgMzIgNDgwbDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDg4LjUgNDE2bC43LTEuMWMxMS42LTE5LjMgMTguOS00MC43IDIxLjYtNjIuOUwyMjQgMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMTIgMCAwLTMyIDExMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMTIgMCAwLTMxLjZ6XCJdXG59O1xuY29uc3QgZmFTYXRlbGxpdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2F0ZWxsaXRlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzUyXSwgXCJmN2JmXCIsIFwiTTIzMyA3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtOTYgOTZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDg5LjQgODkuNC0xNS41IDE1LjVDMTUyLjMgMjMwLjQgMTI0LjkgMjI0IDk2IDIyNGMtMzEuNyAwLTYxLjUgNy43LTg3LjggMjEuMmMtOSA0LjctMTAuMyAxNi43LTMuMSAyMy44TDExMi43IDM3Ni43IDk2LjMgMzkzLjFjLTIuNi0uNy01LjQtMS4xLTguMy0xLjFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTIuOS0uNC01LjYtMS4xLTguM2wxNi40LTE2LjRMMjQyLjkgNTA2LjljNy4yIDcuMiAxOS4yIDUuOSAyMy44LTMuMUMyODAuMyA0NzcuNSAyODggNDQ3LjcgMjg4IDQxNmMwLTI4LjktNi40LTU2LjMtMTcuOC04MC45bDE1LjUtMTUuNUwzNzUgNDA5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDk2LTk2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC04OS40LTg5LjQgNTUtNTVjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTQ4LTQ4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNTUgNTVMMjMzIDd6bTE1OSAzNTFsLTcyLjQtNzIuNCA2Mi4xLTYyLjFMNDU0LjEgMjk2IDM5MiAzNTguMXpNMjI2LjMgMTkyLjRMMTUzLjkgMTIwIDIxNiA1Ny45bDcyLjQgNzIuNC02Mi4xIDYyLjF6XCJdXG59O1xuY29uc3QgZmFQbGFuZUxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU1OFwiLCBcIk0xOTIgOTMuN0MxOTIgNTkuNSAyMjEgMCAyNTYgMGMzNiAwIDY0IDU5LjUgNjQgOTMuN2wwIDg0LjYgMTAxLjggNTguMkM0MTggMjQ3LjYgNDE2IDI1OS42IDQxNiAyNzJsMCAyNC42Yy0xNy45IDEwLjQtMzAuMyAyOS4xLTMxLjggNTAuOUwzMjAgMzI5LjFsMCA3MC45IDU3LjYgNDMuMmM0IDMgNi40IDcuOCA2LjQgMTIuOGwwIDI0IDAgMThjMCA3LjgtNi4zIDE0LTE0IDE0Yy0xLjMgMC0yLjYtLjItMy45LS41TDI1NiA0ODAgMTQ1LjkgNTExLjVjLTEuMyAuNC0yLjYgLjUtMy45IC41Yy03LjggMC0xNC02LjMtMTQtMTRsMC00MmMwLTUgMi40LTkuOCA2LjQtMTIuOEwxOTIgNDAwbDAtNzAuOS0xNzEuNiA0OUMxMC4yIDM4MS4xIDAgMzczLjQgMCAzNjIuOGwwLTY1LjVjMC01LjcgMy4xLTExIDguMS0xMy45TDE5MiAxNzguM2wwLTg0LjZ6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tODAgMzJjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMC00OHpcIl1cbn07XG5jb25zdCBmYVRhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5OTFdLCBcImYwMmJcIiwgXCJNMCA4MEwwIDIyOS41YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDE3NiAxNzZjMjUgMjUgNjUuNSAyNSA5MC41IDBMNDE4LjcgMzE3LjNjMjUtMjUgMjUtNjUuNSAwLTkwLjVsLTE3Ni0xNzZjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MHptMTEyIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYUNvbW1lbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODQ4OSwgNjE2NjldLCBcImYwNzVcIiwgXCJNNTEyIDI0MGMwIDExNC45LTExNC42IDIwOC0yNTYgMjA4Yy0zNy4xIDAtNzIuMy02LjQtMTA0LjEtMTcuOWMtMTEuOSA4LjctMzEuMyAyMC42LTU0LjMgMzAuNkM3My42IDQ3MS4xIDQ0LjcgNDgwIDE2IDQ4MGMtNi41IDAtMTIuMy0zLjktMTQuOC05LjljLTIuNS02LTEuMS0xMi44IDMuNC0xNy40YzAgMCAwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGMwIDAgMCAwIDAgMGwuMy0uM2MuMy0uMyAuNy0uNyAxLjMtMS40YzEuMS0xLjIgMi44LTMuMSA0LjktNS43YzQuMS01IDkuNi0xMi40IDE1LjItMjEuNmMxMC0xNi42IDE5LjUtMzguNCAyMS40LTYyLjlDMTcuNyAzMjYuOCAwIDI4NS4xIDAgMjQwQzAgMTI1LjEgMTE0LjYgMzIgMjU2IDMyczI1NiA5My4xIDI1NiAyMDh6XCJdXG59O1xuY29uc3QgZmFDYWtlQ2FuZGxlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWtlLWNhbmRsZXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4NzQsIFwiYmlydGhkYXktY2FrZVwiLCBcImNha2VcIl0sIFwiZjFmZFwiLCBcIk04Ni40IDUuNUw2MS44IDQ3LjZDNTggNTQuMSA1NiA2MS42IDU2IDY5LjJMNTYgNzJjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTIuOGMwLTcuNi0yLTE1LTUuOC0yMS42TDEwNS42IDUuNUMxMDMuNiAyLjEgMTAwIDAgOTYgMHMtNy42IDIuMS05LjYgNS41em0xMjggMEwxODkuOCA0Ny42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNmwwIDIuOGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMjMzLjYgNS41QzIzMS42IDIuMSAyMjggMCAyMjQgMHMtNy42IDIuMS05LjYgNS41ek0zMTcuOCA0Ny42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNmwwIDIuOGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMzYxLjYgNS41QzM1OS42IDIuMSAzNTYgMCAzNTIgMHMtNy42IDIuMS05LjYgNS41TDMxNy44IDQ3LjZ6TTEyOCAxNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA3MWM4LjMgNS4yIDE4LjEgOSAyOC44IDljMTMuNSAwIDI3LjItNi4xIDM4LjQtMTMuNGM1LjQtMy41IDkuOS03LjEgMTMtOS43YzEuNS0xLjMgMi43LTIuNCAzLjUtMy4xYy40LS40IC43LS42IC44LS44bC4xLS4xczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBjMy4xLTMuMiA3LjQtNC45IDExLjktNC44czguNiAyLjEgMTEuNiA1LjRjMCAwIDAgMCAwIDBzMCAwIDAgMGwuMSAuMWMuMSAuMSAuNCAuNCAuNyAuN2MuNyAuNyAxLjcgMS43IDMuMSAzYzIuOCAyLjYgNi44IDYuMSAxMS44IDkuNWMxMC4yIDcuMSAyMyAxMy4xIDM2LjMgMTMuMXMyNi4xLTYgMzYuMy0xMy4xYzUtMy41IDktNi45IDExLjgtOS41YzEuNC0xLjMgMi40LTIuMyAzLjEtM2MuMy0uMyAuNi0uNiAuNy0uN2wuMS0uMWMzLTMuNSA3LjQtNS40IDEyLTUuNHM5IDIgMTIgNS40bC4xIC4xYy4xIC4xIC40IC40IC43IC43Yy43IC43IDEuNyAxLjcgMy4xIDNjMi44IDIuNiA2LjggNi4xIDExLjggOS41YzEwLjIgNy4xIDIzIDEzLjEgMzYuMyAxMy4xczI2LjEtNiAzNi4zLTEzLjFjNS0zLjUgOS02LjkgMTEuOC05LjVjMS40LTEuMyAyLjQtMi4zIDMuMS0zYy4zLS4zIC42LS42IC43LS43bC4xLS4xYzIuOS0zLjQgNy4xLTUuMyAxMS42LTUuNHM4LjcgMS42IDExLjkgNC44YzAgMCAwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGwuMSAuMWMuMiAuMiAuNCAuNCAuOCAuOGMuOCAuNyAxLjkgMS44IDMuNSAzLjFjMy4xIDIuNiA3LjUgNi4yIDEzIDkuN2MxMS4yIDcuMyAyNC45IDEzLjQgMzguNCAxMy40YzEwLjcgMCAyMC41LTMuOSAyOC44LTlsMC03MWMwLTM1LjMtMjguNy02NC02NC02NGwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNjQgMCAwLTQ4ek00NDggMzk0LjZjLTguNSAzLjMtMTguMiA1LjQtMjguOCA1LjRjLTIyLjUgMC00Mi40LTkuOS01NS44LTE4LjZjLTQuMS0yLjctNy44LTUuNC0xMC45LTcuOGMtMi44IDIuNC02LjEgNS05LjggNy41QzMyOS44IDM5MCAzMTAuNiA0MDAgMjg4IDQwMHMtNDEuOC0xMC01NC42LTE4LjljLTMuNS0yLjQtNi43LTQuOS05LjQtNy4yYy0yLjcgMi4zLTUuOSA0LjctOS40IDcuMkMyMDEuOCAzOTAgMTgyLjYgNDAwIDE2MCA0MDBzLTQxLjgtMTAtNTQuNi0xOC45Yy0zLjctMi42LTctNS4yLTkuOC03LjVjLTMuMSAyLjQtNi44IDUuMS0xMC45IDcuOEM3MS4yIDM5MC4xIDUxLjMgNDAwIDI4LjggNDAwYy0xMC42IDAtMjAuMy0yLjItMjguOC01LjRMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04NS40elwiXVxufTtcbmNvbnN0IGZhQmlydGhkYXlDYWtlID0gZmFDYWtlQ2FuZGxlcztcbmNvbnN0IGZhQ2FrZSA9IGZhQ2FrZUNhbmRsZXM7XG5jb25zdCBmYUVudmVsb3BlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VudmVsb3BlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzg2LCA5OTkzLCA2MTQ0M10sIFwiZjBlMFwiLCBcIk00OCA2NEMyMS41IDY0IDAgODUuNSAwIDExMmMwIDE1LjEgNy4xIDI5LjMgMTkuMiAzOC40TDIzNi44IDMxMy42YzExLjQgOC41IDI3IDguNSAzOC40IDBMNDkyLjggMTUwLjRjMTIuMS05LjEgMTkuMi0yMy4zIDE5LjItMzguNGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCA2NHpNMCAxNzZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMDhMMjk0LjQgMzM5LjJjLTIyLjggMTcuMS01NCAxNy4xLTc2LjggMEwwIDE3NnpcIl1cbn07XG5jb25zdCBmYUFuZ2xlc1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FuZ2xlcy11cCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiYW5nbGUtZG91YmxlLXVwXCJdLCBcImYxMDJcIiwgXCJNMjQ2LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjI0IDEwOS4zIDM2MS40IDI0Ni42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjB6bTE2MCAzNTJsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDIyNCAzMDEuMyAzNjEuNCA0MzguNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zelwiXVxufTtcbmNvbnN0IGZhQW5nbGVEb3VibGVVcCA9IGZhQW5nbGVzVXA7XG5jb25zdCBmYVBhcGVyY2xpcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYXBlcmNsaXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyMDZdLCBcImYwYzZcIiwgXCJNMzY0LjIgODMuOGMtMjQuNC0yNC40LTY0LTI0LjQtODguNCAwbC0xODQgMTg0Yy00Mi4xIDQyLjEtNDIuMSAxMTAuMyAwIDE1Mi40czExMC4zIDQyLjEgMTUyLjQgMGwxNTItMTUyYzEwLjktMTAuOSAyOC43LTEwLjkgMzkuNiAwczEwLjkgMjguNyAwIDM5LjZsLTE1MiAxNTJjLTY0IDY0LTE2Ny42IDY0LTIzMS42IDBzLTY0LTE2Ny42IDAtMjMxLjZsMTg0LTE4NGM0Ni4zLTQ2LjMgMTIxLjMtNDYuMyAxNjcuNiAwczQ2LjMgMTIxLjMgMCAxNjcuNmwtMTc2IDE3NmMtMjguNiAyOC42LTc1IDI4LjYtMTAzLjYgMHMtMjguNi03NSAwLTEwMy42bDE0NC0xNDRjMTAuOS0xMC45IDI4LjctMTAuOSAzOS42IDBzMTAuOSAyOC43IDAgMzkuNmwtMTQ0IDE0NGMtNi43IDYuNy02LjcgMTcuNyAwIDI0LjRzMTcuNyA2LjcgMjQuNCAwbDE3Ni0xNzZjMjQuNC0yNC40IDI0LjQtNjQgMC04OC40elwiXVxufTtcbmNvbnN0IGZhQXJyb3dSaWdodFRvQ2l0eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yaWdodC10by1jaXR5JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGIzXCIsIFwiTTI4OCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTQ0IDQwIDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDIyNGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDAtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC00MTZ6bTY0IDMybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTM1MiAyNzJsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTc2LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTUxMiAzNjhsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTY2LjYgMTUzLjRsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxNDYuNyAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDExNC43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwelwiXVxufTtcbmNvbnN0IGZhUmliYm9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JpYmJvbicsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyNzg5NV0sIFwiZjRkNlwiLCBcIk0zMzMuMiAzMjIuOHMwIDAgMCAwbC0xMzMuOS0xNDZzMCAwIDAgMEwxNDYgMTE4LjZjNy44LTUuMSAzNy0yMi42IDc4LTIyLjZzNzAuMiAxNy40IDc4IDIyLjZMMjQ1LjcgMTgwbDg1LjYgOTMuNCAyNy40LTI5LjhjMTYuMy0xNy43IDI1LjMtNDAuOSAyNS4zLTY1bDAtMjkuNWMwLTE5LTUuNi0zNy41LTE2LjEtNTMuM0wzMjcuOCAzNS42QzMxMi45IDEzLjQgMjg3LjkgMCAyNjEuMiAwbC03NiAwYy0yNS44IDAtNTAuMSAxMi41LTY1LjEgMzMuNUw4MS45IDg3QzcwLjMgMTAzLjIgNjQgMTIyLjggNjQgMTQyLjhMNjQgMTY0YzAgMjMuMiA4LjQgNDUuNiAyMy42IDYzLjFsNTYgNjQuMnMwIDAgMCAwbDgzLjMgOTUuNnMwIDAgMCAwbDkxLjggMTA1LjNjMTAgMTEuNSAyNi44IDE0LjMgNDAgNi44bDU0LjUtMzEuMWMxNy44LTEwLjIgMjEuNi0zNC4zIDcuNy00OS40bC04Ny43LTk1Ljd6TTIwNS4yIDQxMC42bC04My4zLTk1LjZMMjcuMSA0MTguNWMtMTMuOSAxNS4xLTEwLjEgMzkuMiA3LjcgNDkuNGw1NS4xIDMxLjVjMTMgNy40IDI5LjMgNC45IDM5LjQtNi4xbDc1LjktODIuNnpcIl1cbn07XG5jb25zdCBmYUx1bmdzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2x1bmdzJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI5NzI5XSwgXCJmNjA0XCIsIFwiTTMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTMyLjFjMCAxNi40IDguNCAzMS43IDIyLjIgNDAuNWw5LjggNi4yIDAtNDUuNUMzODQgMTI3IDQxNSA5NiA0NTMuMyA5NmMyMS43IDAgNDIuOCAxMC4yIDU1LjggMjguOGMxNS40IDIyLjEgNDQuMyA2NS40IDcxIDExNi45YzI2LjUgNTAuOSA1Mi40IDExMi41IDU5LjYgMTcwLjNjLjIgMS4zIC4yIDIuNiAuMiA0bDAgN2MwIDQ5LjEtMzkuOCA4OS04OSA4OWMtNy4zIDAtMTQuNS0uOS0yMS42LTIuN2wtNzIuNy0xOC4yQzQxNCA0ODAuNSAzODQgNDQyLjEgMzg0IDM5OGwwLTczIDkwLjUgNTcuNmM3LjUgNC43IDE3LjMgMi41IDIyLjEtNC45czIuNS0xNy4zLTQuOS0yMi4xTDM4NCAyODcuMWwwLS40LTQ0LjEtMjguMWMtNy4zLTQuNi0xMy45LTEwLjEtMTkuOS0xNi4xYy01LjkgNi0xMi42IDExLjUtMTkuOSAxNi4xTDI1NiAyODYuNyAxNjEuMiAzNDdsLTEzLjUgOC42YzAgMCAwIDAtLjEgMGMtNy40IDQuOC05LjYgMTQuNi00LjggMjIuMWM0LjcgNy41IDE0LjYgOS43IDIyLjEgNC45bDkxLjEtNTggMCA3My40YzAgNDQuMS0zMCA4Mi41LTcyLjcgOTMuMWwtNzIuNyAxOC4yYy03LjEgMS44LTE0LjMgMi43LTIxLjYgMi43Yy00OS4xIDAtODktMzkuOC04OS04OWwwLTdjMC0xLjMgLjEtMi43IC4yLTRjNy4yLTU3LjkgMzMuMS0xMTkuNCA1OS42LTE3MC4zYzI2LjgtNTEuNSA1NS42LTk0LjggNzEtMTE2LjljMTMtMTguNiAzNC0yOC44IDU1LjgtMjguOEMyMjUgOTYgMjU2IDEyNyAyNTYgMTY1LjNsMCA0NS41IDkuOC02LjJjMTMuOC04LjggMjIuMi0yNC4xIDIyLjItNDAuNUwyODggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFBcnJvd1VwOTEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtOS0xJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LW51bWVyaWMtdXAtYWx0XCJdLCBcImY4ODdcIiwgXCJNMTYwIDMyYzkgMCAxNy41IDMuOCAyMy42IDEwLjRsODggOTZjMTEuOSAxMyAxMS4xIDMzLjMtMiA0NS4ycy0zMy4zIDExLjEtNDUuMi0yTDE5MiAxNDYuMyAxOTIgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzAxLjdMOTUuNiAxODEuNmMtMTEuOSAxMy0zMi4yIDEzLjktNDUuMiAycy0xMy45LTMyLjItMi00NS4ybDg4LTk2QzE0Mi41IDM1LjggMTUxIDMyIDE2MCAzMnpNNDUwLjcgMjk0YzguMyA2IDEzLjMgMTUuNyAxMy4zIDI2bDAgOTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNDggMC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC01MS42LTUuOSAyYy0xNi44IDUuNi0zNC45LTMuNS00MC41LTIwLjJzMy41LTM0LjkgMjAuMi00MC41bDQ4LTE2YzkuOC0zLjMgMjAuNS0xLjYgMjguOCA0LjR6bS01LTE0NS4xQTMyIDMyIDAgMSAwIDQxOC4zIDkxYTMyIDMyIDAgMSAwIDI3LjQgNTcuOXptLTQwLjcgNTQuOUMzNjkuNiAxOTIuNCAzNDQgMTU5LjIgMzQ0IDEyMGMwLTQ4LjYgMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgMjMuNS03LjUgNDYuMy0yMS41IDY1LjJMNDQ5LjcgMjUxYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi43cy0xNy4yLTMwLjYtNi43LTQ0LjhsNi44LTkuMnpcIl1cbn07XG5jb25zdCBmYVNvcnROdW1lcmljVXBBbHQgPSBmYUFycm93VXA5MTtcbmNvbnN0IGZhTGl0ZWNvaW5TaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpdGVjb2luLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxZDNcIiwgXCJNMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRsMCAxNDkuNkwyMy4yIDIyNS4yYy0xNyA0LjktMjYuOCAyMi42LTIyIDM5LjZzMjIuNiAyNi44IDM5LjYgMjJMNjQgMjgwLjEgNjQgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMCAwLTE1NC4xIDEzNi44LTM5LjFjMTctNC45IDI2LjgtMjIuNiAyMi0zOS42cy0yMi42LTI2LjgtMzkuNi0yMkwxMjggMTk1LjMgMTI4IDY0elwiXVxufTtcbmNvbnN0IGZhQm9yZGVyTm9uZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3JkZXItbm9uZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjg1MFwiLCBcIk0zMiA0ODBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em05Ni02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAtMzg0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMCAyNTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0ek0zMjAgNDE2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMC0zMjBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTIyNCA0ODBhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wLTQ0OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAgMjU2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHpNNDE2IDQxNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTAtMzg0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIgOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0ek00MTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIgMjg4YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMTkyIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTkyIDY0YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHpNMzIgMzIwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNNDE2IDE5MmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6TTMyIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTE5MiA2NGEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVOb2RlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtbm9kZXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0ZTJcIiwgXCJNNDE4LjQgMTU3LjljMzUuMy04LjMgNjEuNi00MCA2MS42LTc3LjljMC00NC4yLTM1LjgtODAtODAtODBjLTQzLjQgMC03OC43IDM0LjUtODAgNzcuNUwxMzYuMiAxNTEuMUMxMjEuNyAxMzYuOCAxMDEuOSAxMjggODAgMTI4Yy00NC4yIDAtODAgMzUuOC04MCA4MHMzNS44IDgwIDgwIDgwYzEyLjIgMCAyMy44LTIuNyAzNC4xLTcuNkwyNTkuNyA0MDcuOGMtMi40IDcuNi0zLjcgMTUuOC0zLjcgMjQuMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMjcuNy0xNC01Mi4xLTM1LjQtNjYuNGwzNy44LTIwNy43ek0xNTYuMyAyMzIuMmMyLjItNi45IDMuNS0xNC4yIDMuNy0yMS43bDE4My44LTczLjVjMy42IDMuNSA3LjQgNi43IDExLjYgOS41TDMxNy42IDM1NC4xYy01LjUgMS4zLTEwLjggMy4xLTE1LjggNS41TDE1Ni4zIDIzMi4yelwiXVxufTtcbmNvbnN0IGZhUGFyYWNodXRlQm94ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhcmFjaHV0ZS1ib3gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0Y2RcIiwgXCJNMzgzLjUgMTkyYy4zLTUuMyAuNS0xMC42IC41LTE2YzAtNTEtMTUuOS05Ni00MC4yLTEyNy42QzMxOS41IDE2LjkgMjg4LjIgMCAyNTYgMHMtNjMuNSAxNi45LTg3LjggNDguNEMxNDMuOSA4MCAxMjggMTI1IDEyOCAxNzZjMCA1LjQgLjIgMTAuNyAuNSAxNkwyNDAgMTkybDAgMTI4LTMyIDBjLTcgMC0xMy43IDEuNS0xOS43IDQuMkw2OC4yIDE5MmwyOC4zIDBjLS4zLTUuMy0uNS0xMC42LS41LTE2YzAtNjQgMjIuMi0xMjEuMiA1Ny4xLTE1OS4zQzYyIDQ5LjMgMTguNiAxMjIuNiA0LjIgMTczLjZDMS41IDE4My4xIDkgMTkyIDE4LjkgMTkybDYgMEwxNjUuMiAzNDYuM2MtMy4zIDYuNS01LjIgMTMuOS01LjIgMjEuN2wwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTcuOC0xLjktMTUuMi01LjItMjEuN0w0ODcuMSAxOTJsNiAwYzkuOSAwIDE3LjQtOC45IDE0LjctMTguNEM0OTMuNCAxMjIuNiA0NTAgNDkuMyAzNTguOSAxNi43QzM5My44IDU0LjggNDE2IDExMi4xIDQxNiAxNzZjMCA1LjQtLjIgMTAuNy0uNSAxNmwyOC4zIDBMMzIzLjcgMzI0LjJjLTYtMi43LTEyLjctNC4yLTE5LjctNC4ybC0zMiAwIDAtMTI4IDExMS41IDB6XCJdXG59O1xuY29uc3QgZmFJbmRlbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5kZW50JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDNjXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMTkyIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA5NmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTEyNy44IDI2OC42TDI1LjggMzQ3LjlDMTUuMyAzNTYuMSAwIDM0OC42IDAgMzM1LjNMMCAxNzYuN2MwLTEzLjMgMTUuMy0yMC44IDI1LjgtMTIuNmwxMDEuOSA3OS4zYzguMiA2LjQgOC4yIDE4LjkgMCAyNS4zelwiXVxufTtcbmNvbnN0IGZhVHJ1Y2tGaWVsZFVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWZpZWxkLXVuJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNThlXCIsIFwiTTk2IDMyQzYwLjcgMzIgMzIgNjAuNyAzMiA5NmwwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDEyOCAwYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC00LjIgMGMtLjQtMS4xLS45LTIuMS0xLjMtMy4yTDQ4NS43IDEwMmMtMTAuMy0yMy4xLTMzLjItMzgtNTguNS0zOGwtNTEuOCAwQzM2NC40IDQ0LjkgMzQzLjcgMzIgMzIwIDMyTDk2IDMyem0yODggOTZsNDMuMiAwIDQyLjcgOTZMMzg0IDIyNGwwLTk2ek0xMTIgMzg0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTM2OC00OGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTI1My4zIDEzNS4xbDM0LjcgNTIgMC00My4yYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyIDAgNDMuMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTk2YzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTI4IDE0NGwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbmNvbnN0IGZhSG91cmdsYXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXJnbGFzcycsXG4gIGljb246IFszODQsIDUxMiwgWzkyMDMsIDYyMDMyLCBcImhvdXJnbGFzcy1lbXB0eVwiXSwgXCJmMjU0XCIsIFwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDY0IDAgMzIwIDBsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDExYzAgNDIuNC0xNi45IDgzLjEtNDYuOSAxMTMuMUwyMzcuMyAyNTZsNjcuOSA2Ny45YzMwIDMwIDQ2LjkgNzAuNyA0Ni45IDExMy4xbDAgMTFjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBMNjQgNTEybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtMTFjMC00Mi40IDE2LjktODMuMSA0Ni45LTExMy4xTDE0Ni43IDI1NiA3OC45IDE4OC4xQzQ4LjkgMTU4LjEgMzIgMTE3LjQgMzIgNzVsMC0xMUMxNC4zIDY0IDAgNDkuNyAwIDMyek05NiA2NGwwIDExYzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45TDE5MiAyMTAuN2w2Ny45LTY3LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOWwwLTExTDk2IDY0em0wIDM4NGwxOTIgMCAwLTExYzAtMjUuNS0xMC4xLTQ5LjktMjguMS02Ny45TDE5MiAzMDEuM2wtNjcuOSA2Ny45Yy0xOCAxOC0yOC4xIDQyLjQtMjguMSA2Ny45bDAgMTF6XCJdXG59O1xuY29uc3QgZmFIb3VyZ2xhc3NFbXB0eSA9IGZhSG91cmdsYXNzO1xuY29uc3QgZmFNb3VudGFpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb3VudGFpbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzk1Nl0sIFwiZjZmY1wiLCBcIk0yNTYgMzJjMTIuNSAwIDI0LjEgNi40IDMwLjggMTdMNTAzLjQgMzk0LjRjNS42IDguOSA4LjYgMTkuMiA4LjYgMjkuN2MwIDMwLjktMjUgNTUuOS01NS45IDU1LjlMNTUuOSA0ODBDMjUgNDgwIDAgNDU1IDAgNDI0LjFjMC0xMC41IDMtMjAuOCA4LjYtMjkuN0wyMjUuMiA0OWM2LjYtMTAuNiAxOC4zLTE3IDMwLjgtMTd6bTY1IDE5MkwyNTYgMTIwLjQgMTc2LjkgMjQ2LjVsMTguMyAyNC40YzYuNCA4LjUgMTkuMiA4LjUgMjUuNiAwbDI1LjYtMzQuMWM2LTguMSAxNS41LTEyLjggMjUuNi0xMi44bDQ5IDB6XCJdXG59O1xuY29uc3QgZmFVc2VyRG9jdG9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItZG9jdG9yJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ1c2VyLW1kXCJdLCBcImYwZjBcIiwgXCJNMjI0IDI1NkExMjggMTI4IDAgMSAwIDIyNCAwYTEyOCAxMjggMCAxIDAgMCAyNTZ6bS05NiA1NS4yQzU0IDMzMi45IDAgNDAxLjMgMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEybDM4OC42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjdjMC04MS01NC0xNDkuNC0xMjgtMTcxLjFsMCA1MC44YzI3LjYgNy4xIDQ4IDMyLjIgNDggNjJsMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MGMwLTI5LjggMjAuNC01NC45IDQ4LTYybDAtNTcuMWMtNi0uNi0xMi4xLS45LTE4LjMtLjlsLTkxLjQgMGMtNi4yIDAtMTIuMyAuMy0xOC4zIC45bDAgNjUuNGMyMy4xIDYuOSA0MCAyOC4zIDQwIDUzLjdjMCAzMC45LTI1LjEgNTYtNTYgNTZzLTU2LTI1LjEtNTYtNTZjMC0yNS40IDE2LjktNDYuOCA0MC01My43bDAtNTkuMXpNMTQ0IDQ0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xuY29uc3QgZmFVc2VyTWQgPSBmYVVzZXJEb2N0b3I7XG5jb25zdCBmYUNpcmNsZUluZm8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLWluZm8nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImluZm8tY2lyY2xlXCJdLCBcImYwNWFcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIxNiAzMzZsMjQgMCAwLTY0LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDg4IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptNDAtMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYUluZm9DaXJjbGUgPSBmYUNpcmNsZUluZm87XG5jb25zdCBmYUNsb3VkTWVhdGJhbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtbWVhdGJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3M2JcIiwgXCJNMCAyMjRjMCA1MyA0MyA5NiA5NiA5Nmw0NC43IDBjOS41LTIzLjUgMzIuNS00MCA1OS4zLTQwYzIgMCAzLjkgLjEgNS44IC4zQzIxNy42IDI2NS41IDIzNS43IDI1NiAyNTYgMjU2czM4LjQgOS41IDUwLjIgMjQuM2MxLjktLjIgMy45LS4zIDUuOC0uM2MyNi45IDAgNDkuOSAxNi41IDU5LjMgNDBsNDQuNyAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwYzEuMS01LjIgMS42LTEwLjUgMS42LTE2YzAtNDQuMi0zNS44LTgwLTgwLTgwYy0yNC4zIDAtNDYuMSAxMC45LTYwLjggMjhDMjU2LjUgMjQuMyAyMTkuMSAwIDE3NiAwQzExNC4xIDAgNjQgNTAuMSA2NCAxMTJjMCA3LjEgLjcgMTQuMSAxLjkgMjAuOEMyNy42IDE0NS40IDAgMTgxLjUgMCAyMjR6bTI4OCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDEgLjEgMi4xIC4xIDMuMWMtLjctLjgtMS40LTEuNi0yLjEtMi4zYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2MuNyAuNyAxLjUgMS40IDIuMyAyLjFjLTEtLjEtMi4xLS4xLTMuMS0uMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmMxIDAgMi4xLS4xIDMuMS0uMWMtLjggLjctMS42IDEuMy0yLjMgMi4xYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwYy43LS43IDEuNC0xLjUgMi4xLTIuM2MtLjEgMS0uMSAyLjEtLjEgMy4xYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC0xLS4xLTIuMS0uMS0zLjFjLjcgLjggMS4zIDEuNiAyLjEgMi4zYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNjLS43LS43LTEuNS0xLjQtMi4zLTIuMWMxIC4xIDIuMSAuMSAzLjEgLjFjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJjLTEgMC0yLjEgLjEtMy4xIC4xYy44LS43IDEuNi0xLjMgMi4zLTIuMWMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGMtLjcgLjctMS40IDEuNS0yLjEgMi4zYy4xLTEgLjEtMi4xIC4xLTMuMXpNNDggNDQ4YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDE2IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2elwiXVxufTtcbmNvbnN0IGZhQ2FtZXJhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbWVyYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMjU4LCBcImNhbWVyYS1hbHRcIl0sIFwiZjAzMFwiLCBcIk0xNDkuMSA2NC44TDEzOC43IDk2IDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtNzQuNyAwTDM2Mi45IDY0LjhDMzU2LjQgNDUuMiAzMzguMSAzMiAzMTcuNCAzMkwxOTQuNiAzMmMtMjAuNyAwLTM5IDEzLjItNDUuNSAzMi44ek0yNTYgMTkyYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyelwiXVxufTtcbmNvbnN0IGZhQ2FtZXJhQWx0ID0gZmFDYW1lcmE7XG5jb25zdCBmYVNxdWFyZVZpcnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS12aXJ1cycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTU3OFwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMjMuOCA5My43YzEzLjMgMCAyNCAxMC43IDI0IDI0YzAgMjkuMyAzNS40IDQzLjkgNTYuMSAyMy4yYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMjAuNyAyMC43LTYgNTYuMSAyMy4yIDU2LjFjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTI5LjMgMC00My45IDM1LjQtMjMuMiA1Ni4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTIwLjctMjAuNy01Ni4xLTYtNTYuMSAyMy4yYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjkuMy0zNS40LTQzLjktNTYuMS0yMy4yYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzIwLjctMjAuNyA2LTU2LjEtMjMuMi01Ni4xYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzI5LjMgMCA0My45LTM1LjQgMjMuMi01Ni4xYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMjAuNyAyMC43IDU2LjEgNiA1Ni4xLTIzLjJjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTE5MiAyNTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em04OCAzMmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwelwiXVxufTtcbmNvbnN0IGZhTWV0ZW9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21ldGVvcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3MzJdLCBcImY3NTNcIiwgXCJNNDkzLjcgLjlMMjk5LjQgNzUuNmwyLjMtMjkuM2MxLTEyLjgtMTIuOC0yMS41LTI0LTE1LjFMMTAxLjMgMTMzLjRDMzguNiAxNjkuNyAwIDIzNi42IDAgMzA5QzAgNDIxLjEgOTAuOSA1MTIgMjAzIDUxMmM3Mi40IDAgMTM5LjQtMzguNiAxNzUuNy0xMDEuM0w0ODAuOCAyMzQuM2M2LjUtMTEuMS0yLjItMjUtMTUuMS0yNGwtMjkuMyAyLjNMNTExLjEgMTguM2MuNi0xLjUgLjktMy4yIC45LTQuOEM1MTIgNiA1MDYgMCA0OTguNSAwYy0xLjcgMC0zLjMgLjMtNC44IC45ek0xOTIgMTkyYTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnptMCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xNiA5NmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6XCJdXG59O1xuY29uc3QgZmFDYXJPbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXItb24nLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0ZGRcIiwgXCJNMjgwIDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTgwek0xODUuOCAyMjRsMTQwLjMgMGM2LjggMCAxMi44IDQuMyAxNS4xIDEwLjZMMzYwLjMgMjg4bC0yMDguNiAwIDE5LjEtNTMuNGMyLjMtNi40IDguMy0xMC42IDE1LjEtMTAuNnptLTc1LjMtMTAuOUw4Mi4yIDI5Mi40QzYyLjEgMzAwLjkgNDggMzIwLjggNDggMzQ0bDAgNDAgMCA2NCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAyNTYgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAwLTY0IDAtNDBjMC0yMy4yLTE0LjEtNDMuMS0zNC4yLTUxLjZsLTI4LjMtNzkuM0MzOTAuMSAxODEuMyAzNjAgMTYwIDMyNi4yIDE2MGwtMTQwLjMgMGMtMzMuOCAwLTY0IDIxLjMtNzUuMyA1My4xek0xMjggMzQ0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMjMyIDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTM5IDM5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw0OCA0OGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNzMgMzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwem00MDAgMEwzOTEgODdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwelwiXVxufTtcbmNvbnN0IGZhU2xlaWdoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NsZWlnaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjdjY1wiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMCAxNjBjMCA1MyA0MyA5NiA5NiA5NmwwIDMyIDY0IDAgMC0zMiAxOTIgMCAwIDMyIDY0IDAgMC0zMmM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0MS4zYzAgMzAuMi0yNC41IDU0LjctNTQuNyA1NC43Yy03NS41IDAtMTQ1LjYtMzguOS0xODUuNi0xMDIuOWwtNC4zLTYuOUMxNzQuMiA2Ny42IDEyNSAzNy42IDcwLjcgMzIuN2MtMi4yLS41LTQuNC0uNy02LjctLjdsLTkgMEwzMiAzMnpNNjQwIDM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRMNjQgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDQ4OCAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4bDAtOHpcIl1cbn07XG5jb25zdCBmYUFycm93RG93bjE5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24tMS05JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LW51bWVyaWMtYXNjXCIsIFwic29ydC1udW1lcmljLWRvd25cIl0sIFwiZjE2MlwiLCBcIk00NTAuNyAzOGMtOC4zLTYtMTkuMS03LjctMjguOC00LjRsLTQ4IDE2Yy0xNi44IDUuNi0yNS44IDIzLjctMjAuMiA0MC41czIzLjcgMjUuOCA0MC41IDIwLjJsNS45LTIgMCA1MS42LTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNDggMCA0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtOTZjMC0xMC4zLTQuOS0xOS45LTEzLjMtMjZ6TTE2MCA0ODBjOSAwIDE3LjUtMy44IDIzLjYtMTAuNGw4OC05NmMxMS45LTEzIDExLjEtMzMuMy0yLTQ1LjJzLTMzLjMtMTEuMS00NS4yIDJMMTkyIDM2NS43IDE5MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMwMS43TDk1LjYgMzMwLjRjLTExLjktMTMtMzIuMi0xMy45LTQ1LjItMnMtMTMuOSAzMi4yLTIgNDUuMmw4OCA5NkMxNDIuNSA0NzYuMiAxNTEgNDgwIDE2MCA0ODB6TTQxOC4zIDMwN2EzMiAzMiAwIDEgMSAyNy40IDU3LjlBMzIgMzIgMCAxIDEgNDE4LjMgMzA3ek00MDUuMSA0MTkuOGwtNi44IDkuMmMtMTAuNSAxNC4yLTcuNSAzNC4yIDYuNyA0NC44czM0LjIgNy41IDQ0LjgtNi43bDQ4LjgtNjUuOGMxNC0xOC45IDIxLjUtNDEuNyAyMS41LTY1LjJjMC00OC42LTM5LjQtODgtODgtODhzLTg4IDM5LjQtODggODhjMCAzOS4yIDI1LjYgNzIuNCA2MS4xIDgzLjh6XCJdXG59O1xuY29uc3QgZmFTb3J0TnVtZXJpY0FzYyA9IGZhQXJyb3dEb3duMTk7XG5jb25zdCBmYVNvcnROdW1lcmljRG93biA9IGZhQXJyb3dEb3duMTk7XG5jb25zdCBmYUhhbmRIb2xkaW5nRHJvcGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWhvbGRpbmctZHJvcGxldCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaGFuZC1ob2xkaW5nLXdhdGVyXCJdLCBcImY0YzFcIiwgXCJNMjc1LjUgNi42QzI3OC4zIDIuNSAyODMgMCAyODggMHM5LjcgMi41IDEyLjUgNi42TDM2Ni44IDEwM0MzNzggMTE5LjMgMzg0IDEzOC42IDM4NCAxNTguM2wwIDEuN2MwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTEuN2MwLTE5LjggNi0zOSAxNy4yLTU1LjNMMjc1LjUgNi42ek01NjguMiAzMzYuM2MxMy4xIDE3LjggOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41TDE5MiA1MTIgMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM2LjggMCA0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4bDc4LjMgMCAxNiAwIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDAtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjAuNiAwIDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzODRjMCAwIDAgMCAwIDBsLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdXG59O1xuY29uc3QgZmFIYW5kSG9sZGluZ1dhdGVyID0gZmFIYW5kSG9sZGluZ0Ryb3BsZXQ7XG5jb25zdCBmYVdhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dhdGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNzczXCIsIFwiTTI2OS41IDY5LjljMTEuMS03LjkgMjUuOS03LjkgMzcgMEMzMjkgODUuNCAzNTYuNSA5NiAzODQgOTZjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFjMCAwIDAgMCAwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSAxNDkuNyA0MTcgMTYwIDM4NCAxNjBjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40QzQyLjggOTIuNiA2MSA4My41IDc1LjMgNzEuNmMxMS4xLTkuNSAyNy4zLTEwLjEgMzkuMi0xLjdjMCAwIDAgMCAwIDBDMTM2LjcgODUuMiAxNjUuMSA5NiAxOTIgOTZjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xem0zNyAyODhDMzI5IDM3My40IDM1Ni41IDM4NCAzODQgMzg0YzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xYzAgMCAwIDAgMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNDM3LjcgNDE3IDQ0OCAzODQgNDQ4Yy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2MwIDAgMCAwIDAgMEMxMzYuNyAzNzMuMiAxNjUuMSAzODQgMTkyIDM4NGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHptMC0xNDRDMzI5IDIyOS40IDM1Ni41IDI0MCAzODQgMjQwYzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xYzAgMCAwIDAgMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgMjkzLjcgNDE3IDMwNCAzODQgMzA0Yy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS41IDI3LjMtMTAuMSAzOS4yLTEuN2MwIDAgMCAwIDAgMEMxMzYuNyAyMjkuMiAxNjUuMSAyNDAgMTkyIDI0MGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl1cbn07XG5jb25zdCBmYUNhbGVuZGFyQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItY2hlY2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYyNzRcIiwgXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiA0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDhMMCAxNjBsMC00OEMwIDg1LjUgMjEuNSA2NCA0OCA2NGw0OCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkybDQ0OCAwIDAgMjcyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAxOTJ6TTMyOSAzMDVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtOTUgOTUtNDctNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNjQgNjRjOS40IDkuNCAyNC42IDkuNCAzMy45IDBMMzI5IDMwNXpcIl1cbn07XG5jb25zdCBmYUJyYWlsbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJhaWxsZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjJhMVwiLCBcIk0wIDk2YTY0IDY0IDAgMSAxIDEyOCAwQTY0IDY0IDAgMSAxIDAgOTZ6TTIyNCAyNzJhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0wLTgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek04MCA0MTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpNMCA0MTZhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgMCA0MTZ6bTI0MCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNjQgMTkyYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0yMjQgMzJhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTM1MiA5NmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSAzNTIgOTZ6bTI0MCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwQTY0IDY0IDAgMSAxIDUxMiA5NnptNjQgMTc2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptMC04MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptMTYgMjI0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bS04MCAwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNDE2IDI3MmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTAtODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTE2IDIyNGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0tODAgMGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6XCJdXG59O1xuY29uc3QgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ByZXNjcmlwdGlvbi1ib3R0bGUtbWVkaWNhbCcsXG4gIGljb246IFszODQsIDUxMiwgW1wicHJlc2NyaXB0aW9uLWJvdHRsZS1hbHRcIl0sIFwiZjQ4NlwiLCBcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRMMCAzMnptMzIgOTZsMzIwIDAgMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMyMHpNMTYwIDI0MGwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG5jb25zdCBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCA9IGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbDtcbmNvbnN0IGZhTGFuZG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFuZG1hcmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjNdLCBcImY2NmZcIiwgXCJNMjQwLjEgNC4yYzkuOC01LjYgMjEuOS01LjYgMzEuOCAwbDE3MS44IDk4LjFMNDQ4IDEwNGwwIC45IDQ3LjkgMjcuNGMxMi42IDcuMiAxOC44IDIyIDE1LjEgMzZzLTE2LjQgMjMuOC0zMC45IDIzLjhMMzIgMTkyYy0xNC41IDAtMjcuMi05LjgtMzAuOS0yMy44czIuNS0yOC44IDE1LjEtMzZMNjQgMTA0LjlsMC0uOSA0LjQtMS42TDI0MC4xIDQuMnpNNjQgMjI0bDY0IDAgMCAxOTIgNDAgMCAwLTE5MiA2NCAwIDAgMTkyIDQ4IDAgMC0xOTIgNjQgMCAwIDE5MiA0MCAwIDAtMTkyIDY0IDAgMCAxOTYuM2MuNiAuMyAxLjIgLjcgMS44IDEuMWw0OCAzMmMxMS43IDcuOCAxNyAyMi40IDEyLjkgMzUuOVM0OTQuMSA1MTIgNDgwIDUxMkwzMiA1MTJjLTE0LjEgMC0yNi41LTkuMi0zMC42LTIyLjdzMS4xLTI4LjEgMTIuOS0zNS45bDQ4LTMyYy42LS40IDEuMi0uNyAxLjgtMS4xTDY0IDIyNHpcIl1cbn07XG5jb25zdCBmYVRydWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjY2LCA5OTUxXSwgXCJmMGQxXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgMzY4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2IDBjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwxMjggMGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02NCAwLTMyIDAtMTguN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTE0LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdMNDE2IDk2bDAtNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMHpNNDE2IDE2MGw1MC43IDBMNTQ0IDIzNy4zbDAgMTguNy0xMjggMCAwLTk2ek0xMTIgNDE2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTM2OC00OGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xuY29uc3QgZmFDcm9zc2hhaXJzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nyb3NzaGFpcnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwNWJcIiwgXCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMC40YzkzLjcgMTMuOSAxNjcuNyA4OCAxODEuNiAxODEuNmwxMC40IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjQgMGMtMTMuOSA5My43LTg4IDE2Ny43LTE4MS42IDE4MS42bDAgMTAuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEwLjRDMTMwLjMgNDU1LjcgNTYuMyAzODEuNyA0Mi40IDI4OEwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTAuNCAwQzU2LjMgMTMwLjMgMTMwLjMgNTYuMyAyMjQgNDIuNEwyMjQgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEwNy40IDI4OGMxMi41IDU4LjMgNTguNCAxMDQuMSAxMTYuNiAxMTYuNmwwLTIwLjZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDIwLjZjNTguMy0xMi41IDEwNC4xLTU4LjQgMTE2LjYtMTE2LjZMMzg0IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMC42IDBDMzkyLjEgMTY1LjcgMzQ2LjMgMTE5LjkgMjg4IDEwNy40bDAgMjAuNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIwLjZDMTY1LjcgMTE5LjkgMTE5LjkgMTY1LjcgMTA3LjQgMjI0bDIwLjYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjAuNiAwek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkNhbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWNhbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImU1M2NcIiwgXCJNMjcyIDQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bS04IDE4Ny4zbDQ3LjQgNTcuMWMxMS4zIDEzLjYgMzEuNSAxNS41IDQ1LjEgNC4yczE1LjUtMzEuNSA0LjItNDUuMWwtNzMuNy04OC45Yy0xOC4yLTIyLTQ1LjMtMzQuNy03My45LTM0LjdsLTM1LjkgMGMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjlMMTIwIDI1Ni45IDEyMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDQuN3pNMzUyIDM3NmMwLTQuNCAzLjYtOCA4LThzOCAzLjYgOCA4bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZsMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04elwiXVxufTtcbmNvbnN0IGZhVGVudCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW50JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTdkXCIsIFwiTTI2OS40IDZDMjgwLjUtMiAyOTUuNS0yIDMwNi42IDZsMjI0IDE2MGM3LjQgNS4zIDEyLjIgMTMuNSAxMy4yIDIyLjVsMzIgMjg4YzEgOS0xLjkgMTguMS04IDI0LjlzLTE0LjcgMTAuNy0yMy44IDEwLjdsLTgwIDAtMjguMiAwYy0xMi4xIDAtMjMuMi02LjgtMjguNi0xNy43TDMwNi43IDI5My41Yy0xLjctMy40LTUuMS01LjUtOC44LTUuNWMtNS41IDAtOS45IDQuNC05LjkgOS45TDI4OCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2IDBMMzIgNTEyYy05LjEgMC0xNy44LTMuOS0yMy44LTEwLjdzLTktMTUuOC04LTI0LjlsMzItMjg4YzEtOSA1LjgtMTcuMiAxMy4yLTIyLjVMMjY5LjQgNnpcIl1cbn07XG5jb25zdCBmYVZlc3RQYXRjaGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Zlc3QtcGF0Y2hlcycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA4NlwiLCBcIk0xNTEuMiA2OS43bDU1LjkgMTY3LjctMTEgMzMuMWMtMi43IDguMi00LjEgMTYuNy00LjEgMjUuM0wxOTIgNDY0YzAgMTQuNSAzLjkgMjguMiAxMC43IDM5LjlDMTk1IDUwOSAxODUuOSA1MTIgMTc2IDUxMkw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMjcwLjVjMC05LjUgMi44LTE4LjcgOC4xLTI2LjZsNDcuOS03MS44YzUuMy03LjkgOC4xLTE3LjEgOC4xLTI2LjZMNjQgMTI4bDAtNzMuN0w2NCA0OEM2NCAyMS41IDg1LjUgMCAxMTIgMGw0LjUgMGMuMiAwIC40IDAgLjYgMGMuNCAwIC44IDAgMS4yIDBjMTguOCAwIDM0LjEgOS43IDQ0LjEgMTguOEMxNzEuNiAyNy4yIDE5MC44IDQwIDIyNCA0MHM1Mi40LTEyLjggNjEuNy0yMS4yQzI5NS43IDkuNyAzMTEgMCAzMjkuNyAwYy40IDAgLjggMCAxLjIgMGMuMiAwIC40IDAgLjYgMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDYuMyAwIDczLjcgMCAxNy41YzAgOS41IDIuOCAxOC43IDguMSAyNi42bDQ3LjkgNzEuOGM1LjMgNy45IDguMSAxNy4xIDguMSAyNi42TDQ0OCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2OC4yYzAtNS4yIC44LTEwLjMgMi41LTE1LjJMMjk2LjggNjkuN0MyNzkuNCA3OS43IDI1NS40IDg4IDIyNCA4OHMtNTUuNC04LjMtNzIuOC0xOC4zek05NiA0NTZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek02My41IDI1NS41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdMNzkgMjg4IDYzLjUgMzAzLjVjLTQuNyA0LjctNC43IDEyLjMgMCAxN3MxMi4zIDQuNyAxNyAwTDk2IDMwNWwxNS41IDE1LjVjNC43IDQuNyAxMi4zIDQuNyAxNyAwczQuNy0xMi4zIDAtMTdMMTEzIDI4OGwxNS41LTE1LjVjNC43LTQuNyA0LjctMTIuMyAwLTE3cy0xMi4zLTQuNy0xNyAwTDk2IDI3MSA4MC41IDI1NS41Yy00LjctNC43LTEyLjMtNC43LTE3IDB6TTMwNCAyODBsMCA4IDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDAgOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMC04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0elwiXVxufTtcbmNvbnN0IGZhQ2hlY2tEb3VibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlY2stZG91YmxlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmNTYwXCIsIFwiTTM0Mi42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTYwIDE3OC43bC01Ny40LTU3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDgwIDgwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6bTk2IDEyOGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxNjAgNDAyLjcgNTQuNiAyOTcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwyNTYtMjU2elwiXVxufTtcbmNvbnN0IGZhQXJyb3dEb3duQVogPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi1hLXonLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYWxwaGEtYXNjXCIsIFwic29ydC1hbHBoYS1kb3duXCJdLCBcImYxNWRcIiwgXCJNMTgzLjYgNDY5LjZDMTc3LjUgNDc2LjIgMTY5IDQ4MCAxNjAgNDgwcy0xNy41LTMuOC0yMy42LTEwLjRsLTg4LTk2Yy0xMS45LTEzLTExLjEtMzMuMyAyLTQ1LjJzMzMuMy0xMS4xIDQ1LjIgMkwxMjggMzY1LjcgMTI4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDEuNyAzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlMNDI5LjMgNDE2bDUwLjcgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45TDQwMi43IDM1MiAzNTIgMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDE2IDMyYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdsNjQgMTI4IDE2IDMyYzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNMNDYwLjIgMjI0bC04OC40IDAtNy4yIDE0LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsMTYtMzIgNjQtMTI4QzM5Mi44IDM4LjggNDAzLjkgMzIgNDE2IDMyek0zOTUuOCAxNzZsNDAuNCAwTDQxNiAxMzUuNiAzOTUuOCAxNzZ6XCJdXG59O1xuY29uc3QgZmFTb3J0QWxwaGFBc2MgPSBmYUFycm93RG93bkFaO1xuY29uc3QgZmFTb3J0QWxwaGFEb3duID0gZmFBcnJvd0Rvd25BWjtcbmNvbnN0IGZhTW9uZXlCaWxsV2hlYXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbW9uZXktYmlsbC13aGVhdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTUyYVwiLCBcIk0xNzYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgMTZsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiA2NEM0Mi43IDY0IDMyIDUzLjMgMzIgNDBzMTAuNy0yNCAyNC0yNHpNMjQgODhsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgMTM2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFMxMC43IDg4IDI0IDg4em04IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0yNzIgMTZjMC04LjggNy4yLTE2IDE2LTE2YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgOC44LTcuMiAxNi0xNiAxNmMtNDQuMiAwLTgwLTM1LjgtODAtODB6TTQwMCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgOC44LTcuMiAxNi0xNiAxNmMtNDQuMiAwLTgwLTM1LjgtODAtODBjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNDRjMCA0NC4yLTM1LjggODAtODAgODBjLTguOCAwLTE2LTcuMi0xNi0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MGM4LjggMCAxNiA3LjIgMTYgMTZ6TTM1MiAxMjhjOC44IDAgMTYgNy4yIDE2IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODB6bS05NiAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGMtOC44IDAtMTYtNy4yLTE2LTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwYzguOCAwIDE2IDcuMiAxNiAxNnpNMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMwNHpNNDggNDE2bDAgNDggNDggMGMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0bC00OCAwIDAgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6TTQ2NCA0MTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDQ4IDAgMC00OHpNNDE2IDMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwwLTQ4LTQ4IDB6bS05NiA4MGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6XCJdXG59O1xuY29uc3QgZmFDb29raWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29va2llJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODUwXSwgXCJmNTYzXCIsIFwiTTI0Ny4yIDE3Yy0yMi4xLTMuMS00NC42IC45LTY0LjQgMTEuNGwtNzQgMzkuNUM4OS4xIDc4LjQgNzMuMiA5NC45IDYzLjQgMTE1TDI2LjcgMTkwLjZjLTkuOCAyMC4xLTEzIDQyLjktOS4xIDY0LjlsMTQuNSA4Mi44YzMuOSAyMi4xIDE0LjYgNDIuMyAzMC43IDU3LjlsNjAuMyA1OC40YzE2LjEgMTUuNiAzNi42IDI1LjYgNTguNyAyOC43bDgzIDExLjdjMjIuMSAzLjEgNDQuNi0uOSA2NC40LTExLjRsNzQtMzkuNWMxOS43LTEwLjUgMzUuNi0yNyA0NS40LTQ3LjJsMzYuNy03NS41YzkuOC0yMC4xIDEzLTQyLjkgOS4xLTY0LjlsLTE0LjYtODIuOGMtMy45LTIyLjEtMTQuNi00Mi4zLTMwLjctNTcuOUwzODguOSA1Ny41Yy0xNi4xLTE1LjYtMzYuNi0yNS42LTU4LjctMjguN0wyNDcuMiAxN3pNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYUFycm93Um90YXRlTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yb3RhdGUtbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzg2MzQsIFwiYXJyb3ctbGVmdC1yb3RhdGVcIiwgXCJhcnJvdy1yb3RhdGUtYmFja1wiLCBcImFycm93LXJvdGF0ZS1iYWNrd2FyZFwiLCBcInVuZG9cIl0sIFwiZjBlMlwiLCBcIk0xMjUuNyAxNjBsNTAuMyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDQ4IDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDUxLjJMOTcuNiA5Ny42Yzg3LjUtODcuNSAyMjkuMy04Ny41IDMxNi44IDBzODcuNSAyMjkuMyAwIDMxNi44cy0yMjkuMyA4Ny41LTMxNi44IDBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBjNjIuNSA2Mi41IDE2My44IDYyLjUgMjI2LjMgMHM2Mi41LTE2My44IDAtMjI2LjNzLTE2My44LTYyLjUtMjI2LjMgMEwxMjUuNyAxNjB6XCJdXG59O1xuY29uc3QgZmFBcnJvd0xlZnRSb3RhdGUgPSBmYUFycm93Um90YXRlTGVmdDtcbmNvbnN0IGZhQXJyb3dSb3RhdGVCYWNrID0gZmFBcnJvd1JvdGF0ZUxlZnQ7XG5jb25zdCBmYUFycm93Um90YXRlQmFja3dhcmQgPSBmYUFycm93Um90YXRlTGVmdDtcbmNvbnN0IGZhVW5kbyA9IGZhQXJyb3dSb3RhdGVMZWZ0O1xuY29uc3QgZmFIYXJkRHJpdmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFyZC1kcml2ZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODQzNiwgXCJoZGRcIl0sIFwiZjBhMFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTg0LjRjLTE3LTE1LjItMzkuNC0yNC40LTY0LTI0LjRMNjQgMjU2Yy0yNC42IDAtNDcgOS4yLTY0IDI0LjRMMCA5NnpNNjQgMjg4bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0ek0zMjAgNDE2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTI4LTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xuY29uc3QgZmFIZGQgPSBmYUhhcmREcml2ZTtcbmNvbnN0IGZhRmFjZUdyaW5TcXVpbnRUZWFycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tc3F1aW50LXRlYXJzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzE1LCBcImdyaW4tc3F1aW50LXRlYXJzXCJdLCBcImY1ODZcIiwgXCJNNDI2LjggMTQuMkM0NDYtNSA0NzcuNS00LjYgNDk3LjEgMTQuOXMyMCA1MSAuNyA3MC4zYy02LjggNi44LTIxLjQgMTIuNC0zNy40IDE2LjdjLTE2LjMgNC40LTM0LjEgNy41LTQ2LjMgOS4zYy0xLjYgLjItMy4xIC41LTQuNiAuNmMtNC45IC44LTkuMS0yLjgtOS41LTcuNGMtLjEtLjcgMC0xLjQgLjEtMi4xYzEuNi0xMS4yIDQuNi0yOS42IDktNDdjLjMtMS4zIC43LTIuNiAxLTMuOWM0LjMtMTUuOSA5LjgtMzAuNSAxNi43LTM3LjR6bS00NC43IDE5Yy0xLjUgNC44LTIuOSA5LjYtNC4xIDE0LjNjLTQuOCAxOC45LTggMzguNS05LjcgNTAuM2MtNCAyNi44IDE4LjkgNDkuNyA0NS43IDQ1LjhjMTEuOS0xLjYgMzEuNS00LjggNTAuNC05LjdjNC43LTEuMiA5LjUtMi41IDE0LjMtNC4xQzUzNC4yIDIyNy41IDUyMC4yIDM1My44IDQzNyA0MzdjLTgzLjIgODMuMi0yMDkuNSA5Ny4yLTMwNy4yIDQxLjhjMS41LTQuOCAyLjgtOS42IDQtMTQuM2M0LjgtMTguOSA4LTM4LjUgOS43LTUwLjNjNC0yNi44LTE4LjktNDkuNy00NS43LTQ1LjhjLTExLjkgMS42LTMxLjUgNC44LTUwLjQgOS43Yy00LjcgMS4yLTkuNSAyLjUtMTQuMyA0LjFDLTIyLjIgMjg0LjUtOC4yIDE1OC4yIDc1IDc1QzE1OC4yLTguMyAyODQuNS0yMi4yIDM4Mi4yIDMzLjJ6TTUxLjUgNDEwLjFjMTguNS01IDM4LjgtOC4zIDUwLjktMTBjLjQtLjEgLjctLjEgMS0uMWM1LjEtLjIgOS4yIDQuMyA4LjQgOS42Yy0xLjcgMTIuMS01IDMyLjQtMTAgNTAuOUM5Ny42IDQ3Ni40IDkyIDQ5MSA4NS4yIDQ5Ny44QzY2IDUxNyAzNC41IDUxNi42IDE0LjkgNDk3LjFzLTIwLTUxLS43LTcwLjNjNi44LTYuOCAyMS40LTEyLjQgMzcuNC0xNi43ek00MTYuOSAyMDljLTQuNy0xMS45LTIwLjgtMTEtMjYuOCAuM2MtMTkgMzUuNS00NSA3MC44LTc3LjUgMTAzLjNTMjQ0LjggMzcxLjEgMjA5LjMgMzkwYy0xMS4zIDYtMTIuMiAyMi4xLS4zIDI2LjhjNTcuNiAyMi45IDEyNS44IDExIDE3Mi4zLTM1LjVzNTguNC0xMTQuOCAzNS41LTE3Mi4zek04Ny4xIDI4NS4xYzIgMiA0LjYgMy4yIDcuMyAzLjRsNTYuMSA1LjEgNS4xIDU2LjFjLjMgMi44IDEuNSA1LjQgMy40IDcuM2M2LjMgNi4zIDE3LjIgMy42IDE5LjgtNC45bDI5LjctOTcuNGMzLjUtMTEuNi03LjMtMjIuNS0xOS0xOUw5MiAyNjUuM2MtOC42IDIuNi0xMS4zIDEzLjQtNC45IDE5Ljh6TTI2NS4zIDkybC0yOS43IDk3LjRjLTMuNSAxMS42IDcuMyAyMi41IDE5IDE5bDk3LjQtMjkuN2M4LjYtMi42IDExLjMtMTMuNCA0LjktMTkuOGMtMi0yLTQuNi0zLjItNy4zLTMuNGwtNTYuMS01LjEtNS4xLTU2LjFjLS4zLTIuOC0xLjUtNS40LTMuNC03LjNjLTYuMy02LjMtMTcuMi0zLjYtMTkuOCA0Ljl6XCJdXG59O1xuY29uc3QgZmFHcmluU3F1aW50VGVhcnMgPSBmYUZhY2VHcmluU3F1aW50VGVhcnM7XG5jb25zdCBmYUR1bWJiZWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2R1bWJiZWxsJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNDRiXCIsIFwiTTk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjAgMCA2NCAwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMCAwLTY0em00NDggMGwwIDY0IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwIDAtNjQgMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNNDE2IDIyNGwwIDY0LTE5MiAwIDAtNjQgMTkyIDB6XCJdXG59O1xuY29uc3QgZmFSZWN0YW5nbGVMaXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JlY3RhbmdsZS1saXN0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJsaXN0LWFsdFwiXSwgXCJmMDIyXCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xMjggMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzItMTI4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em05Ni0yNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTIyNCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDIyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yMjQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjI0IDB6XCJdXG59O1xuY29uc3QgZmFMaXN0QWx0ID0gZmFSZWN0YW5nbGVMaXN0O1xuY29uc3QgZmFUYXJwRHJvcGxldCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YXJwLWRyb3BsZXQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1N2NcIiwgXCJNMjg4IDE2MGMtMzUuMyAwLTY0LTI2LjktNjQtNjBjMC0yNCAzMy43LTcwLjEgNTIuMi05My41YzYuMS03LjcgMTcuNS03LjcgMjMuNiAwQzMxOC4zIDI5LjkgMzUyIDc2IDM1MiAxMDBjMCAzMy4xLTI4LjcgNjAtNjQgNjB6TTY0IDEyOGwxMzMuNSAwYzEzLjIgMzcuMyA0OC43IDY0IDkwLjUgNjRzNzcuNC0yNi43IDkwLjUtNjRMNTEyIDEyOGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2MC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NHpNNDQ4IDUxMmwwLTEyOCAxMjggMEw0NDggNTEyek05NiAyNTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbmNvbnN0IGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtbWVkaWNhbC1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MTFcIiwgXCJNMzIwIDM2OGMwIDU5LjUgMjkuNSAxMTIuMSA3NC44IDE0NGwtMjY2LjcgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNjAuNC0zMiAwYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w1MjIuMSAxOTMuOWMtOC41LTEuMy0xNy4zLTEuOS0yNi4xLTEuOWMtNTQuNyAwLTEwMy41IDI0LjktMTM1LjggNjRMMzIwIDI1NmwwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDAgMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6bTMyIDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjExLjMtNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNDgwIDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xuY29uc3QgZmFQZXJzb25Ta2lpbmdOb3JkaWMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXNraWluZy1ub3JkaWMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNraWluZy1ub3JkaWNcIl0sIFwiZjdjYVwiLCBcIk0zMzYgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0yMjcuMiAxNjBjMS45IDAgMy44IC4xIDUuNiAuM0wyMDEuNiAyNTRjLTkuMyAyOCAxLjcgNTguOCAyNi44IDc0LjVsODYuMiA1My45TDI5MS4zIDQ2NGwtODguNSAwIDQxLjEtODguMS0zMi40LTIwLjNjLTcuOC00LjktMTQuNy0xMC43LTIwLjYtMTcuM0wxMzIuMiA0NjRsLTMyLjQgMCA1NC4yLTI1Ny42YzQuNi0xLjUgOS00LjEgMTIuNy03LjhsMjMuMS0yMy4xYzkuOS05LjkgMjMuNC0xNS41IDM3LjUtMTUuNXpNMTIxLjQgMTk4LjZjLjQgLjQgLjggLjggMS4zIDEuMkw2NyA0NjRsLTQzIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTM1LjMgMGMuNSAwIC45IDAgMS40IDBsMTU4LjYgMGMuNSAwIDEgMCAxLjQgMEw1MDQgNTEyYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTY5LjQgMCAyNy42LTE3OS4zYzEwLjUtNS4yIDE3LjgtMTYuMSAxNy44LTI4LjdjMC0xNy43LTE0LjMtMzItMzItMzJsLTIxLjMgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjUtMTkuN2wtNi4zLTE1Yy0xNC42LTM1LjEtNDQuMS02MS45LTgwLjUtNzMuMWwtNDguNy0xNWMtMTEuMS0zLjQtMjIuNy01LjItMzQuNC01LjJjLTMxIDAtNjAuOCAxMi4zLTgyLjcgMzQuM2wtMjMuMSAyMy4xYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3ptMzA4IDg5LjRMNDAyLjMgNDY0bC00NC40IDAgMjEuNi03NS42YzUuOS0yMC42LTIuNi00Mi42LTIwLjctNTMuOUwzMDIgMjk5bDMwLjktODIuNCA1LjEgMTIuM0MzNTMgMjY0LjcgMzg3LjkgMjg4IDQyNi43IDI4OGwyLjcgMHpcIl1cbn07XG5jb25zdCBmYVNraWluZ05vcmRpYyA9IGZhUGVyc29uU2tpaW5nTm9yZGljO1xuY29uc3QgZmFDYWxlbmRhclBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItcGx1cycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjI3MVwiLCBcIk05NiAzMmwwIDMyTDQ4IDY0QzIxLjUgNjQgMCA4NS41IDAgMTEybDAgNDggNDQ4IDAgMC00OGMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzJMMTYwIDY0bDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJTOTYgMTQuMyA5NiAzMnpNNDQ4IDE5MkwwIDE5MiAwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTI3MnpNMjI0IDI0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDU2IDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDAgMCA1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTU2LTU2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNTYgMCAwLTU2YzAtMTMuMyAxMC43LTI0IDI0LTI0elwiXVxufTtcbmNvbnN0IGZhUGxhbmVBcnJpdmFsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYW5lLWFycml2YWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjg3NDhdLCBcImY1YWZcIiwgXCJNLjMgMTY2LjlMMCA2OEMwIDU3LjcgOS41IDUwLjEgMTkuNSA1Mi4zbDM1LjYgNy45YzEwLjYgMi4zIDE5LjIgOS45IDIzIDIwTDk2IDEyOGwxMjcuMyAzNy42TDE4MS44IDIwLjRDMTc4LjkgMTAuMiAxODYuNiAwIDE5Ny4yIDBsNDAuMSAwYzExLjYgMCAyMi4yIDYuMiAyNy45IDE2LjNsMTA5IDE5My44IDEwNy4yIDMxLjdjMTUuOSA0LjcgMzAuOCAxMi41IDQzLjcgMjIuOGwzNC40IDI3LjZjMjQgMTkuMiAxOC4xIDU3LjMtMTAuNyA2OC4yYy00MS4yIDE1LjYtODYuMiAxOC4xLTEyOC44IDdMMTIxLjcgMjg5LjhjLTExLjEtMi45LTIxLjItOC43LTI5LjMtMTYuOUw5LjUgMTg5LjRjLTUuOS02LTkuMy0xNC4xLTkuMy0yMi41ek0zMiA0NDhsNTc2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem05Ni04MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjgtMTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzYxODQwLCBcImFycm93LWFsdC1jaXJjbGUtbGVmdFwiXSwgXCJmMzU5XCIsIFwiTTUxMiAyNTZBMjU2IDI1NiAwIDEgMCAwIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwek0xMTYuNyAyNDQuN2wxMTItMTEyYzQuNi00LjYgMTEuNS01LjkgMTcuNC0zLjVzOS45IDguMyA5LjkgMTQuOGwwIDY0IDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDY0YzAgNi41LTMuOSAxMi4zLTkuOSAxNC44cy0xMi45IDEuMS0xNy40LTMuNWwtMTEyLTExMmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xuY29uc3QgZmFBcnJvd0FsdENpcmNsZUxlZnQgPSBmYUNpcmNsZUxlZnQ7XG5jb25zdCBmYVRyYWluU3Vid2F5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWluLXN1YndheScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wic3Vid2F5XCJdLCBcImYyMzlcIiwgXCJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDM1MmMwIDQ4IDM1LjIgODcuNyA4MS4xIDk0LjlsLTQ2IDQ2QzI4LjEgNDk5LjkgMzMuMSA1MTIgNDMgNTEybDM5LjcgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNEwxNjAgNDQ4bDEyOCAwIDU0LjYgNTQuNmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMzkuNyAwYzEwIDAgMTUtMTIuMSA3LjktMTkuMWwtNDYtNDZjNDYtNy4xIDgxLjEtNDYuOSA4MS4xLTk0LjlsMC0yNTZjMC01My00My05Ni05Ni05Nkw5NiAwek02NCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2ek0yNzIgOTZsODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjg4LTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYVN1YndheSA9IGZhVHJhaW5TdWJ3YXk7XG5jb25zdCBmYUNoYXJ0R2FudHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hhcnQtZ2FudHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUwZTRcIiwgXCJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTk2IDY0bDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMTYwIDk2bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFJbmRpYW5SdXBlZVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5kaWFuLXJ1cGVlLXNpZ24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcImluZGlhbi1ydXBlZVwiLCBcImluclwiXSwgXCJlMWJjXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNjQgMCAxNiAwIDE3NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC01Ni4yIDBjOS42IDE0LjQgMTYuNyAzMC42IDIwLjcgNDhsMzUuNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNS42IDBjLTEzLjIgNTguMy02MS45IDEwMy4yLTEyMi4yIDExMC45TDI3NC42IDQyMmMxNC40IDEwLjMgMTcuNyAzMC4zIDcuNCA0NC42cy0zMC4zIDE3LjctNDQuNiA3LjRMMTMuNCAzMTRDMi4xIDMwNi0yLjcgMjkxLjUgMS41IDI3OC4yUzE4LjEgMjU2IDMyIDI1Nmw4MCAwYzMyLjggMCA2MS0xOS43IDczLjMtNDhMMzIgMjA4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE1My4zIDBDMTczIDExNS43IDE0NC44IDk2IDExMiA5Nkw5NiA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXVxufTtcbmNvbnN0IGZhSW5kaWFuUnVwZWUgPSBmYUluZGlhblJ1cGVlU2lnbjtcbmNvbnN0IGZhSW5yID0gZmFJbmRpYW5SdXBlZVNpZ247XG5jb25zdCBmYUNyb3BTaW1wbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3JvcC1zaW1wbGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImNyb3AtYWx0XCJdLCBcImY1NjVcIiwgXCJNMTI4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDE0LjMgNjQgMzJsMCAzMkwzMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMzIgMCAwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMCAwLTY0LTIyNCAwIDAtMzUyek0zODQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCA2NGwwIDY0IDIyNCAwIDAgMzUyelwiXVxufTtcbmNvbnN0IGZhQ3JvcEFsdCA9IGZhQ3JvcFNpbXBsZTtcbmNvbnN0IGZhTW9uZXlCaWxsMSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsLTEnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcIm1vbmV5LWJpbGwtYWx0XCJdLCBcImYzZDFcIiwgXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTY0IDMyMGwtNjQgMCAwLTY0YzM1LjMgMCA2NCAyOC43IDY0IDY0ek02NCAxOTJsMC02NCA2NCAwYzAgMzUuMy0yOC43IDY0LTY0IDY0ek00NDggMzg0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDAgNjQtNjQgMHptNjQtMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NGw2NCAwIDAgNjR6TTE3NiAyNTZhMTEyIDExMiAwIDEgMSAyMjQgMCAxMTIgMTEyIDAgMSAxIC0yMjQgMHptNzYtNDhjMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDI0IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC00IDAgMC02OGMwLTExLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHpcIl1cbn07XG5jb25zdCBmYU1vbmV5QmlsbEFsdCA9IGZhTW9uZXlCaWxsMTtcbmNvbnN0IGZhTGVmdExvbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGVmdC1sb25nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsb25nLWFycm93LWFsdC1sZWZ0XCJdLCBcImYzMGFcIiwgXCJNMTc3LjUgNDE0Yy04LjggMy44LTE5IDItMjYtNC42bC0xNDQtMTM2QzIuNyAyNjguOSAwIDI2Mi42IDAgMjU2czIuNy0xMi45IDcuNS0xNy40bDE0NC0xMzZjNy02LjYgMTcuMi04LjQgMjYtNC42czE0LjUgMTIuNSAxNC41IDIybDAgNzIgMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjg4IDAgMCA3MmMwIDkuNi01LjcgMTguMi0xNC41IDIyelwiXVxufTtcbmNvbnN0IGZhTG9uZ0Fycm93QWx0TGVmdCA9IGZhTGVmdExvbmc7XG5jb25zdCBmYURuYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkbmEnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjk1MTZdLCBcImY0NzFcIiwgXCJNNDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJjMCA1OS44LTMwLjMgMTA3LjUtNjkuNCAxNDYuNmMtMjggMjgtNjIuNSA1My41LTk3LjMgNzcuNGwtMi41IDEuN2MtMTEuOSA4LjEtMjMuOCAxNi4xLTM1LjUgMjMuOWMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBsLTEuNiAxYy02IDQtMTEuOSA3LjktMTcuOCAxMS45Yy0yMC45IDE0LTQwLjggMjcuNy01OS4zIDQxLjVsMTE4LjUgMGMtOS44LTcuNC0yMC4xLTE0LjctMzAuNy0yMi4xbDctNC43IDMtMmMxNS4xLTEwLjEgMzAuOS0yMC42IDQ2LjctMzEuNmMyNSAxOC4xIDQ4LjkgMzcuMyA2OS40IDU3LjdDNDE3LjcgMzcyLjUgNDQ4IDQyMC4yIDQ0OCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMNjQgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtNTkuOCAzMC4zLTEwNy41IDY5LjQtMTQ2LjZjMjgtMjggNjIuNS01My41IDk3LjMtNzcuNGMtMzQuOC0yMy45LTY5LjMtNDkuMy05Ny4zLTc3LjRDMzAuMyAxMzkuNSAwIDkxLjggMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBTNjQgMTQuMyA2NCAzMmwzMjAgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzM4LjYgMzg0bC0yMjkuMiAwYy0xMC4xIDEwLjYtMTguNiAyMS4zLTI1LjUgMzJsMjgwLjIgMGMtNi44LTEwLjctMTUuMy0yMS40LTI1LjUtMzJ6TTEwOS40IDEyOGwyMjkuMiAwYzEwLjEtMTAuNyAxOC42LTIxLjMgMjUuNS0zMkw4My45IDk2YzYuOCAxMC43IDE1LjMgMjEuMyAyNS41IDMyem01NS40IDQ4YzE4LjQgMTMuOCAzOC40IDI3LjUgNTkuMyA0MS41YzIwLjktMTQgNDAuOC0yNy43IDU5LjMtNDEuNWwtMTE4LjUgMHpcIl1cbn07XG5jb25zdCBmYVZpcnVzU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlydXMtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUwNzVcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN2wtMTU0LjMtMTIxYy0yLTMwLjEgMjAuOC02MC4xIDU2LTYwLjFsMTEuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMS41IDBjLTQ5LjkgMC03NC45LTYwLjMtMzkuNi05NS42bDguMi04LjJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTguMiA4LjJDNDEyLjMgMTE4LjQgMzUyIDkzLjQgMzUyIDQzLjVMMzUyIDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEuNWMwIDQ5LjktNjAuMyA3NC45LTk1LjYgMzkuNkwxODQuMiA3NWMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBjLTEuNiAxLjYtMy4xIDMuNC00LjMgNS4zTDM4LjggNS4xem0yMjUuOCAxNzdjNi45LTMuOSAxNC45LTYuMSAyMy40LTYuMWMyNi41IDAgNDggMjEuNSA0OCA0OGMwIDQuNC0uNiA4LjctMS43IDEyLjdsLTY5LjctNTQuNnpNNDAyIDQxMi43TDE0NC43IDIxMGMtOS41IDguNS0yMi4yIDE0LTM3LjIgMTRMOTYgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDExLjUgMGM0OS45IDAgNzQuOSA2MC4zIDM5LjYgOTUuNmwtOC4yIDguMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw4LjItOC4yYzM1LjMtMzUuMyA5NS42LTEwLjMgOTUuNiAzOS42bDAgMTEuNWMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTEuNWMwLTMxLjIgMjMuNi01Mi43IDUwLTU1Ljd6XCJdXG59O1xuY29uc3QgZmFNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtaW51cycsXG4gIGljb246IFs0NDgsIDUxMiwgWzgyMTEsIDg3MjIsIDEwMTM0LCBcInN1YnRyYWN0XCJdLCBcImYwNjhcIiwgXCJNNDMyIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFTdWJ0cmFjdCA9IGZhTWludXM7XG5jb25zdCBmYUNoZXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXNzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNDM5XCIsIFwiTTE0NCAxNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDE2TDk2IDMyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDE2IDAgMCAzMkw2MC4yIDk2QzQ5LjEgOTYgNDAgMTA1LjEgNDAgMTE2LjJjMCAyLjUgLjUgNC45IDEuMyA3LjNMNzMuOCAyMDggNzIgMjA4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQgMEw2MCAzODRsMTM2IDBMMTgwIDI1Nmw0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEuOCAwIDMyLjUtODQuNWMuOS0yLjMgMS4zLTQuOCAxLjMtNy4zYzAtMTEuMi05LjEtMjAuMi0yMC4yLTIwLjJMMTQ0IDk2bDAtMzIgMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMCAwLTE2ek00OCA0MTZMNC44IDQ3My42QzEuNyA0NzcuOCAwIDQ4Mi44IDAgNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDIwOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0YzAtNS4yLTEuNy0xMC4yLTQuOC0xNC40TDIwOCA0MTYgNDggNDE2em0yODggMGwtNDMuMiA1Ny42Yy0zLjEgNC4yLTQuOCA5LjItNC44IDE0LjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRjMC01LjItMS43LTEwLjItNC44LTE0LjRMNDY0IDQxNmwtMTI4IDB6TTMwNCAyMDhsMCA1MS45YzAgNy44IDIuOCAxNS4zIDggMjEuMUwzMzkuMiAzMTIgMzM3IDM4NGwxMjUuNSAwLTMuMy03MiAyOC4zLTMwLjhjNS40LTUuOSA4LjUtMTMuNiA4LjUtMjEuN2wwLTUxLjVjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNi0yNCAwIDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNi0yNCAwIDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTgwIDk2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAzMi0zMiAwIDAtMzJ6XCJdXG59O1xuY29uc3QgZmFBcnJvd0xlZnRMb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWxlZnQtbG9uZycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibG9uZy1hcnJvdy1sZWZ0XCJdLCBcImYxNzdcIiwgXCJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDQ4MCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM3MC43IDAgNzMuNC03My40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4elwiXVxufTtcbmNvbnN0IGZhTG9uZ0Fycm93TGVmdCA9IGZhQXJyb3dMZWZ0TG9uZztcbmNvbnN0IGZhUGx1Z0NpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTVjXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJsMCA5NiA2NCAwIDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2IDY0IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgMzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhsMCA2Ny4yYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02Ny4yYzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDE2MHpNNTc2IDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDE2IDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl1cbn07XG5jb25zdCBmYVN0cmVldFZpZXcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RyZWV0LXZpZXcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyMWRcIiwgXCJNMzIwIDY0QTY0IDY0IDAgMSAwIDE5MiA2NGE2NCA2NCAwIDEgMCAxMjggMHptLTk2IDk2Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEuOCAwIDExLjEgOTkuNWMxLjggMTYuMiAxNS41IDI4LjUgMzEuOCAyOC41bDM4LjcgMGMxNi4zIDAgMzAtMTIuMyAzMS44LTI4LjVMMzE4LjIgMzA0bDEuOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDB6TTEzMi4zIDM5NC4yYzEzLTIuNCAyMS43LTE0LjkgMTkuMy0yNy45cy0xNC45LTIxLjctMjcuOS0xOS4zYy0zMi40IDUuOS02MC45IDE0LjItODIgMjQuOGMtMTAuNSA1LjMtMjAuMyAxMS43LTI3LjggMTkuNkM2LjQgMzk5LjUgMCA0MTAuNSAwIDQyNGMwIDIxLjQgMTUuNSAzNi4xIDI5LjEgNDVjMTQuNyA5LjYgMzQuMyAxNy4zIDU2LjQgMjMuNEMxMzAuMiA1MDQuNyAxOTAuNCA1MTIgMjU2IDUxMnMxMjUuOC03LjMgMTcwLjQtMTkuNmMyMi4xLTYuMSA0MS44LTEzLjggNTYuNC0yMy40YzEzLjctOC45IDI5LjEtMjMuNiAyOS4xLTQ1YzAtMTMuNS02LjQtMjQuNS0xNC0zMi42Yy03LjUtNy45LTE3LjMtMTQuMy0yNy44LTE5LjZjLTIxLTEwLjYtNDkuNS0xOC45LTgyLTI0LjhjLTEzLTIuNC0yNS41IDYuMy0yNy45IDE5LjNzNi4zIDI1LjUgMTkuMyAyNy45YzMwLjIgNS41IDUzLjcgMTIuOCA2OSAyMC41YzMuMiAxLjYgNS44IDMuMSA3LjkgNC41YzMuNiAyLjQgMy42IDcuMiAwIDkuNmMtOC44IDUuNy0yMy4xIDExLjgtNDMgMTcuM0MzNzQuMyA0NTcgMzE4LjUgNDY0IDI1NiA0NjRzLTExOC4zLTctMTU3LjctMTcuOWMtMTkuOS01LjUtMzQuMi0xMS42LTQzLTE3LjNjLTMuNi0yLjQtMy42LTcuMiAwLTkuNmMyLjEtMS40IDQuOC0yLjkgNy45LTQuNWMxNS4zLTcuNyAzOC44LTE0LjkgNjktMjAuNXpcIl1cbn07XG5jb25zdCBmYUZyYW5jU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmcmFuYy1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlMThmXCIsIFwiTTgwIDMyQzYyLjMgMzIgNDggNDYuMyA0OCA2NGwwIDE2MCAwIDk2LTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA4MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDAtNjQgMTQ0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE0NCAwIDAtOTYgMTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgMzJ6XCJdXG59O1xuY29uc3QgZmFWb2x1bWVPZmYgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndm9sdW1lLW9mZicsXG4gIGljb246IFszMjAsIDUxMiwgW10sIFwiZjAyNlwiLCBcIk0zMjAgNjRjMC0xMi42LTcuNC0yNC0xOC45LTI5LjJzLTI1LTMuMS0zNC40IDUuM0wxMzEuOCAxNjAgNjQgMTYwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDY3LjggMEwyNjYuNyA0NzEuOWM5LjQgOC40IDIyLjkgMTAuNCAzNC40IDUuM1MzMjAgNDYwLjYgMzIwIDQ0OGwwLTM4NHpcIl1cbn07XG5jb25zdCBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzLWFzbC1pbnRlcnByZXRpbmcnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nXCIsIFwiYXNsLWludGVycHJldGluZ1wiLCBcImhhbmRzLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nXCJdLCBcImYyYTNcIiwgXCJNMTU2LjYgNDYuM2M3LjktMTUuOCAxLjUtMzUtMTQuMy00Mi45cy0zNS0xLjUtNDIuOSAxNC4zTDEzLjUgMTg5LjRDNC42IDIwNy4yIDAgMjI2LjggMCAyNDYuN0wwIDI1NmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGw3MiAwIDggMCAwLS4zYzM1LjItMi43IDY1LjQtMjIuOCA4Mi4xLTUxLjdjOC44LTE1LjMgMy42LTM0LjktMTEuNy00My43cy0zNC45LTMuNi00My43IDExLjdjLTcgMTItMTkuOSAyMC0zNC43IDIwYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwYzE0LjggMCAyNy43IDggMzQuNyAyMGM4LjggMTUuMyAyOC40IDIwLjUgNDMuNyAxMS43czIwLjUtMjguNCAxMS43LTQzLjdjLTEyLjgtMjIuMS0zMy42LTM5LjEtNTguNC00Ny4xbDgwLjgtMjJjMTctNC42IDI3LjEtMjIuMiAyMi41LTM5LjNzLTIyLjItMjcuMS0zOS4zLTIyLjVMMTk0LjkgMTI0LjZsODEuNi02OGMxMy42LTExLjMgMTUuNC0zMS41IDQuMS00NS4xUzI0OS4xLTMuOSAyMzUuNSA3LjRMMTMzLjYgOTIuM2wyMy00NnpNNDgzLjQgNDY1LjdjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w4NS45LTE3MS43YzguOS0xNy44IDEzLjUtMzcuNCAxMy41LTU3LjJsMC05LjNjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTcyIDAtOCAwIDAgLjNjLTM1LjIgMi43LTY1LjQgMjIuOC04Mi4xIDUxLjdjLTguOSAxNS4zLTMuNiAzNC45IDExLjcgNDMuN3MzNC45IDMuNiA0My43LTExLjdjNy0xMiAxOS45LTIwIDM0LjctMjBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBjLTE0LjggMC0yNy43LTgtMzQuNy0yMGMtOC45LTE1LjMtMjguNC0yMC41LTQzLjctMTEuN3MtMjAuNSAyOC40LTExLjcgNDMuN2MxMi44IDIyLjEgMzMuNiAzOS4xIDU4LjQgNDcuMWwtODAuOCAyMmMtMTcuMSA0LjctMjcuMSAyMi4yLTIyLjUgMzkuM3MyMi4yIDI3LjEgMzkuMyAyMi41bDEwMC43LTI3LjUtODEuNiA2OGMtMTMuNiAxMS4zLTE1LjQgMzEuNS00LjEgNDUuMXMzMS41IDE1LjQgNDUuMSA0LjFsMTAxLjktODQuOS0yMyA0NnpcIl1cbn07XG5jb25zdCBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZztcbmNvbnN0IGZhQXNsSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZztcbmNvbnN0IGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyA9IGZhSGFuZHNBc2xJbnRlcnByZXRpbmc7XG5jb25zdCBmYUdlYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2VhcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk4ODEsIFwiY29nXCJdLCBcImYwMTNcIiwgXCJNNDk1LjkgMTY2LjZjMy4yIDguNyAuNSAxOC40LTYuNCAyNC42bC00My4zIDM5LjRjMS4xIDguMyAxLjcgMTYuOCAxLjcgMjUuNHMtLjYgMTcuMS0xLjcgMjUuNGw0My4zIDM5LjRjNi45IDYuMiA5LjYgMTUuOSA2LjQgMjQuNmMtNC40IDExLjktOS43IDIzLjMtMTUuOCAzNC4zbC00LjcgOC4xYy02LjYgMTEtMTQgMjEuNC0yMi4xIDMxLjJjLTUuOSA3LjItMTUuNyA5LjYtMjQuNSA2LjhsLTU1LjctMTcuN2MtMTMuNCAxMC4zLTI4LjIgMTguOS00NCAyNS40bC0xMi41IDU3LjFjLTIgOS4xLTkgMTYuMy0xOC4yIDE3LjhjLTEzLjggMi4zLTI4IDMuNS00Mi41IDMuNXMtMjguNy0xLjItNDIuNS0zLjVjLTkuMi0xLjUtMTYuMi04LjctMTguMi0xNy44bC0xMi41LTU3LjFjLTE1LjgtNi41LTMwLjYtMTUuMS00NC0yNS40TDgzLjEgNDI1LjljLTguOCAyLjgtMTguNiAuMy0yNC41LTYuOGMtOC4xLTkuOC0xNS41LTIwLjItMjIuMS0zMS4ybC00LjctOC4xYy02LjEtMTEtMTEuNC0yMi40LTE1LjgtMzQuM2MtMy4yLTguNy0uNS0xOC40IDYuNC0yNC42bDQzLjMtMzkuNEM2NC42IDI3My4xIDY0IDI2NC42IDY0IDI1NnMuNi0xNy4xIDEuNy0yNS40TDIyLjQgMTkxLjJjLTYuOS02LjItOS42LTE1LjktNi40LTI0LjZjNC40LTExLjkgOS43LTIzLjMgMTUuOC0zNC4zbDQuNy04LjFjNi42LTExIDE0LTIxLjQgMjIuMS0zMS4yYzUuOS03LjIgMTUuNy05LjYgMjQuNS02LjhsNTUuNyAxNy43YzEzLjQtMTAuMyAyOC4yLTE4LjkgNDQtMjUuNGwxMi41LTU3LjFjMi05LjEgOS0xNi4zIDE4LjItMTcuOEMyMjcuMyAxLjIgMjQxLjUgMCAyNTYgMHMyOC43IDEuMiA0Mi41IDMuNWM5LjIgMS41IDE2LjIgOC43IDE4LjIgMTcuOGwxMi41IDU3LjFjMTUuOCA2LjUgMzAuNiAxNS4xIDQ0IDI1LjRsNTUuNy0xNy43YzguOC0yLjggMTguNi0uMyAyNC41IDYuOGM4LjEgOS44IDE1LjUgMjAuMiAyMi4xIDMxLjJsNC43IDguMWM2LjEgMTEgMTEuNCAyMi40IDE1LjggMzQuM3pNMjU2IDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHpcIl1cbn07XG5jb25zdCBmYUNvZyA9IGZhR2VhcjtcbmNvbnN0IGZhRHJvcGxldFNsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Ryb3BsZXQtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInRpbnQtc2xhc2hcIl0sIFwiZjVjN1wiLCBcIk0zMjAgNTEyYzUzLjIgMCAxMDEuNC0yMS42IDEzNi4xLTU2LjZsLTI5OC4zLTIzNUMxNDAgMjU3LjEgMTI4IDI5Mi4zIDEyOCAzMjBjMCAxMDYgODYgMTkyIDE5MiAxOTJ6TTUwNS4yIDM3MC43YzQuNC0xNi4yIDYuOC0zMy4xIDYuOC01MC43YzAtOTEuMi0xMzAuMi0yNjIuMy0xNjYuNi0zMDguM0MzMzkuNCA0LjIgMzMwLjUgMCAzMjAuOSAwbC0xLjggMGMtOS42IDAtMTguNSA0LjItMjQuNSAxMS43QzI3Ny44IDMzIDI0MC43IDgxLjMgMjA1LjggMTM2TDM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNTA1LjIgMzcwLjd6TTIyNCAzMzZjMCA0NC4yIDM1LjggODAgODAgODBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTYxLjkgMC0xMTItNTAuMS0xMTItMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdXG59O1xuY29uc3QgZmFUaW50U2xhc2ggPSBmYURyb3BsZXRTbGFzaDtcbmNvbnN0IGZhTW9zcXVlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vc3F1ZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODMzMl0sIFwiZjY3OFwiLCBcIk00MDAgMGM1IDAgOS44IDIuNCAxMi44IDYuNGMzNC43IDQ2LjMgNzguMSA3NC45IDEzMy41IDExMS41YzAgMCAwIDAgMCAwczAgMCAwIDBjNS4yIDMuNCAxMC41IDcgMTYgMTAuNmMyOC45IDE5LjIgNDUuNyA1MS43IDQ1LjcgODYuMWMwIDI4LjYtMTEuMyA1NC41LTI5LjggNzMuNGwtMzU2LjQgMGMtMTguNC0xOS0yOS44LTQ0LjktMjkuOC03My40YzAtMzQuNCAxNi43LTY2LjkgNDUuNy04Ni4xYzUuNC0zLjYgMTAuOC03LjEgMTYtMTAuNmMwIDAgMCAwIDAgMHMwIDAgMCAwQzMwOS4xIDgxLjMgMzUyLjUgNTIuNyAzODcuMiA2LjRjMy00IDcuOC02LjQgMTIuOC02LjR6TTI4OCA1MTJsMC03MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDcyLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDQxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwIDAtNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3Mi02NCAwIDAtNThjMC0xOS04LjQtMzctMjMtNDkuMkw0MDAgMzg0bC0yNSAyMC44QzM2MC40IDQxNyAzNTIgNDM1IDM1MiA0NTRsMCA1OC02NCAwek03MC40IDUuMmM1LjctNC4zIDEzLjUtNC4zIDE5LjIgMGwxNiAxMkMxMzkuOCA0Mi45IDE2MCA4My4yIDE2MCAxMjZsMCAyTDAgMTI4bDAtMkMwIDgzLjIgMjAuMiA0Mi45IDU0LjQgMTcuMmwxNi0xMnpNMCAxNjBsMTYwIDAgMCAxMzYuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNGwwIDEyOGMwIDkuNiAyLjEgMTguNiA1LjggMjYuOGMtNi42IDMuNC0xNCA1LjItMjEuOCA1LjJsLTY0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMTc2bDAtMTZ6XCJdXG59O1xuY29uc3QgZmFNb3NxdWl0byA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb3NxdWl0bycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUyYlwiLCBcIk00NjMuNyA1MDUuOWM5LjgtOC45IDEwLjctMjQuMyAyLjEtMzQuM2wtNDIuMS00OSAwLTU0LjdjMC01LjUtMS44LTEwLjgtNS4xLTE1LjFMMzUyIDI2Ni4zbDAtLjNMNDg1LjQgMzg3LjhDNTQyLjQgNDQ3LjYgNjQwIDQwNS4yIDY0MCAzMjAuNmMwLTQ3LjktMzQtODguMy03OS40LTk0LjJsLTE1My0yMy45IDQwLjgtNDAuOWM3LjgtNy44IDkuNC0yMC4xIDMuOS0yOS44TDQyOC41IDkwLjFsMzguMi01MC45YzgtMTAuNiA2LjEtMjUuOS00LjMtMzQuMXMtMjUuMi02LjMtMzMuMiA0LjRsLTQ4IDYzLjljLTUuOSA3LjktNi42IDE4LjYtMS43IDI3LjJMNDAyLjIgMTQwIDM1MiAxOTAuM2wwLTM4LjJjMC0xNC45LTEwLjItMjcuNC0yNC0zMWwwLTU3LjJjMC00LjQtMy42LTgtOC04cy04IDMuNi04IDhsMCA1Ny4yYy0xMy44IDMuNi0yNCAxNi4xLTI0IDMxbDAgMzguMUwyMzcuOCAxNDBsMjIuNi0zOS41YzQuOS04LjYgNC4yLTE5LjMtMS43LTI3LjJsLTQ4LTYzLjljLTgtMTAuNi0yMi44LTEyLjYtMzMuMi00LjRzLTEyLjIgMjMuNS00LjMgMzQuMWwzOC4yIDUwLjktMjMuOSA0MS43Yy01LjUgOS43LTMuOSAyMiAzLjkgMjkuOGw0MC44IDQwLjktMTUzIDIzLjlDMzQgMjMyLjMgMCAyNzIuNyAwIDMyMC42YzAgODQuNiA5Ny42IDEyNyAxNTQuNiA2Ny4xTDI4OCAyNjZsMCAuMy02Ni41IDg2LjRjLTMuMyA0LjMtNS4xIDkuNi01LjEgMTUuMWwwIDU0LjctNDIuMSA0OWMtOC42IDEwLjEtNy43IDI1LjUgMi4xIDM0LjNzMjQuNyA3LjkgMzMuNC0yLjFsNDgtNTUuOWMzLjgtNC40IDUuOS0xMC4yIDUuOS0xNi4xbDAtNTUuNEwyODggMzQ0LjdsMCA2My4xYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02My4xIDI0LjMgMzEuNiAwIDU1LjRjMCA1LjkgMi4xIDExLjcgNS45IDE2LjFsNDggNTUuOWM4LjYgMTAuMSAyMy42IDExIDMzLjQgMi4xelwiXVxufTtcbmNvbnN0IGZhU3Rhck9mRGF2aWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Rhci1vZi1kYXZpZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEwMDE3XSwgXCJmNjlhXCIsIFwiTTQwNC4yIDMwOS41TDM4My4xIDM0NGw0Mi4zIDAtMjEuMS0zNC41ek0zNzEuNCAyNTZsLTU0LTg4LTEyMi44IDAtNTQgODggNTQgODggMTIyLjggMCA1NC04OHptNjUuNyAwbDUzLjQgODdjMy42IDUuOSA1LjUgMTIuNyA1LjUgMTkuNmMwIDIwLjctMTYuOCAzNy40LTM3LjQgMzcuNGwtMTA5LjggMC01Ni4yIDkxLjVDMjg0LjggNTA0LjMgMjcwLjkgNTEyIDI1NiA1MTJzLTI4LjgtNy43LTM2LjYtMjAuNUwxNjMuMyA0MDAgNTMuNCA0MDBDMzIuOCA0MDAgMTYgMzgzLjIgMTYgMzYyLjZjMC02LjkgMS45LTEzLjcgNS41LTE5LjZsNTMuNC04N0wyMS41IDE2OWMtMy42LTUuOS01LjUtMTIuNy01LjUtMTkuNkMxNiAxMjguOCAzMi44IDExMiA1My40IDExMmwxMDkuOCAwIDU2LjItOTEuNUMyMjcuMiA3LjcgMjQxLjEgMCAyNTYgMHMyOC44IDcuNyAzNi42IDIwLjVMMzQ4LjcgMTEybDEwOS44IDBjMjAuNyAwIDM3LjQgMTYuOCAzNy40IDM3LjRjMCA2LjktMS45IDEzLjctNS41IDE5LjZsLTUzLjQgODd6bS01NC04OGwyMS4xIDM0LjVMNDI1LjQgMTY4bC00Mi4zIDB6TTI4MyAxMTJMMjU2IDY4bC0yNyA0NCA1NCAwek0xMjguOSAxNjhsLTQyLjMgMCAyMS4xIDM0LjVMMTI4LjkgMTY4ek0xMDcuOCAzMDkuNUw4Ni42IDM0NGw0Mi4zIDAtMjEuMS0zNC41ek0yMjkgNDAwbDI3IDQ0IDI3LTQ0LTU0IDB6XCJdXG59O1xuY29uc3QgZmFQZXJzb25NaWxpdGFyeVJpZmxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1taWxpdGFyeS1yaWZsZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU0YlwiLCBcIk0xNjAgMzljMC0xMyAxMC0yMy44IDIyLjktMjQuOUwzMzQuNyAxLjRDMzQ0IC43IDM1MiA4IDM1MiAxNy40TDM1MiA0OGMwIDguOC03LjIgMTYtMTYgMTZMMTg1IDY0Yy0xMy44IDAtMjUtMTEuMi0yNS0yNXptMTcuNiA1N2wxNTYuOCAwYzEgNS4yIDEuNiAxMC41IDEuNiAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTUuNSAuNi0xMC44IDEuNi0xNnptMjI4IDM2NC4zTDM1MiAzNjkuNyAzNTIgNDgwYzAgMS4zLS4xIDIuNS0uMiAzLjhMMTc3LjUgMjM0LjljMTYuNi03LjEgMzQuNi0xMC45IDUzLjMtMTAuOWw1MC40IDBjMTUuOSAwIDMxLjMgMi44IDQ1LjggNy45TDQyMS45IDY3LjdjLTcuNy00LjQtMTAuMy0xNC4yLTUuOS0yMS45czE0LjItMTAuMyAyMS45LTUuOWwxMy45IDggMTMuOSA4YzcuNyA0LjQgMTAuMyAxNC4yIDUuOSAyMS45TDQxNiAxNzMuOWwxLjYgLjljMTUuMyA4LjggMjAuNiAyOC40IDExLjcgNDMuN0wzOTIuNiAyODJjMiAyLjggMy45IDUuOCA1LjcgOC44bDc2LjEgMTI4LjhjMTEuMiAxOSA0LjkgNDMuNS0xNC4xIDU0LjhzLTQzLjUgNC45LTU0LjgtMTQuMXpNMzIwIDUxMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTEwLjMtNTMuNiA5MC42Yy0xMS4yIDE5LTM1LjggMjUuMy01NC44IDE0LjFzLTI1LjMtMzUuOC0xNC4xLTU0LjhsNzYuMS0xMjguOGM5LjQtMTUuOCAyMS43LTI5LjMgMzYtNDBMMzMxLjEgNTEwYy0zLjUgMS4zLTcuMiAyLTExLjEgMnpNMjk2IDMyMGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6XCJdXG59O1xuY29uc3QgZmFDYXJ0U2hvcHBpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FydC1zaG9wcGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODcyMiwgXCJzaG9wcGluZy1jYXJ0XCJdLCBcImYwN2FcIiwgXCJNMCAyNEMwIDEwLjcgMTAuNyAwIDI0IDBMNjkuNSAwYzIyIDAgNDEuNSAxMi44IDUwLjYgMzJsNDExIDBjMjYuMyAwIDQ1LjUgMjUgMzguNiA1MC40bC00MSAxNTIuM2MtOC41IDMxLjQtMzcgNTMuMy02OS41IDUzLjNsLTI4OC41IDAgNS40IDI4LjVjMi4yIDExLjMgMTIuMSAxOS41IDIzLjYgMTkuNUw0ODggMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yODguMyAwYy0zNC42IDAtNjQuMy0yNC42LTcwLjctNTguNUw3Ny40IDU0LjVjLS43LTMuOC00LTYuNS03LjktNi41TDI0IDQ4QzEwLjcgNDggMCAzNy4zIDAgMjR6TTEyOCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMzM2LTQ4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG5jb25zdCBmYVNob3BwaW5nQ2FydCA9IGZhQ2FydFNob3BwaW5nO1xuY29uc3QgZmFWaWFscyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aWFscycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjQ5M1wiLCBcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDU2IDAgNDggMCA1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMzA0YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjR6TTEzNiA5Nkw4OCA5NmwwIDE2MCA0OCAwIDAtMTYwek0yODggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsNTYgMCA0OCAwIDU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAzMDRjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBsMC0zMDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00MjQgOTZsLTQ4IDAgMCAxNjAgNDggMCAwLTE2MHpcIl1cbn07XG5jb25zdCBmYVBsdWdDaXJjbGVQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLXBsdXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NWZcIiwgXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMmwwIDk2IDY0IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTYgNjQgMCAwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCAzMmMwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOGwwIDY3LjJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY3LjJjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMTYwek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl1cbn07XG5jb25zdCBmYVBsYWNlT2ZXb3JzaGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYWNlLW9mLXdvcnNoaXAnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY2N2ZcIiwgXCJNMjI0IDEwOS4zbDAgMTA4LjNMMTgzLjMgMjQyYy0xNC41IDguNy0yMy4zIDI0LjMtMjMuMyA0MS4yTDE2MCA1MTJsOTYgMCAwLTk2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCA5NiA5NiAwIDAtMjI4LjhjMC0xNi45LTguOC0zMi41LTIzLjMtNDEuMkw0MTYgMjE3LjZsMC0xMDguM2MwLTguNS0zLjQtMTYuNi05LjQtMjIuNkwzMzEuMyAxMS4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEwyMzMuNCA4Ni42Yy02IDYtOS40IDE0LjEtOS40IDIyLjZ6TTI0LjkgMzMwLjNDOS41IDMzOC44IDAgMzU0LjkgMCAzNzIuNEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw4MCAwIDAtMjM4LjRMMjQuOSAzMzAuM3pNNTkyIDUxMmMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTkxLjZjMC0xNy41LTkuNS0zMy42LTI0LjktNDIuMUw1MTIgMjczLjYgNTEyIDUxMmw4MCAwelwiXVxufTtcbmNvbnN0IGZhR3JpcFZlcnRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyaXAtdmVydGljYWwnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtdLCBcImY1OGVcIiwgXCJNNDAgMzUybDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MHptMTkyIDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwbC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwek00MCAzMjBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwbC00OCAwek0yMzIgMTkybDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MHpNNDAgMTYwYy0yMi4xIDAtNDAtMTcuOS00MC00MEwwIDcyQzAgNDkuOSAxNy45IDMyIDQwIDMybDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMHpNMjMyIDMybDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MHpcIl1cbn07XG5jb25zdCBmYUFycm93VHVyblVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXR1cm4tdXAnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImxldmVsLXVwXCJdLCBcImYxNDhcIiwgXCJNMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTMwNi43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTA5LjMgMTYwIDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMHpcIl1cbn07XG5jb25zdCBmYUxldmVsVXAgPSBmYUFycm93VHVyblVwO1xuY29uc3QgZmFVID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3UnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMTddLCBcIjU1XCIsIFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhsMC0yMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDIyNGMwIDEwNi04NiAxOTItMTkyIDE5MlMwIDM5NCAwIDI4OEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyelwiXVxufTtcbmNvbnN0IGZhU3F1YXJlUm9vdFZhcmlhYmxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1yb290LXZhcmlhYmxlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzcXVhcmUtcm9vdC1hbHRcIl0sIFwiZjY5OFwiLCBcIk0yODIuNiA3OC4xYzgtMjcuMyAzMy00Ni4xIDYxLjQtNDYuMWwyMDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzNDQgOTYgMjM4LjcgNDU3Yy0zLjYgMTIuMy0xNC4xIDIxLjItMjYuOCAyMi44cy0yNS4xLTQuNi0zMS41LTE1LjZMNzcuNiAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ1LjYgMGMyMi44IDAgNDMuOCAxMi4xIDU1LjMgMzEuOGw2NS4yIDExMS44TDI4Mi42IDc4LjF6TTM5My40IDIzMy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDQ4MCAyNzQuN2w0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0w1MjUuMyAzMjBsNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDQ4MCAzNjUuM2wtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MzQuNyAzMjBsLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6XCJdXG59O1xuY29uc3QgZmFTcXVhcmVSb290QWx0ID0gZmFTcXVhcmVSb290VmFyaWFibGU7XG5jb25zdCBmYUNsb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb2NrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzM5LCBcImNsb2NrLWZvdXJcIl0sIFwiZjAxN1wiLCBcIk0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyQTI1NiAyNTYgMCAxIDEgMjU2IDB6TTIzMiAxMjBsMCAxMzZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjIgMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHpcIl1cbn07XG5jb25zdCBmYUNsb2NrRm91ciA9IGZhQ2xvY2s7XG5jb25zdCBmYUJhY2t3YXJkU3RlcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWNrd2FyZC1zdGVwJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJzdGVwLWJhY2t3YXJkXCJdLCBcImYwNDhcIiwgXCJNMjY3LjUgNDQwLjZjOS41IDcuOSAyMi44IDkuNyAzNC4xIDQuNHMxOC40LTE2LjYgMTguNC0yOWwwLTMyMGMwLTEyLjQtNy4yLTIzLjctMTguNC0yOXMtMjQuNS0zLjYtMzQuMSA0LjRsLTE5MiAxNjBMNjQgMjQxIDY0IDk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNzguMyAwIDk2TDAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNDUgMTEuNSA5LjYgMTkyIDE2MHpcIl1cbn07XG5jb25zdCBmYVN0ZXBCYWNrd2FyZCA9IGZhQmFja3dhcmRTdGVwO1xuY29uc3QgZmFQYWxsZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFsbGV0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNDgyXCIsIFwiTTMyIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgNjQtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwIDIyNCAwIDIyNCAwIDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC02NCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwLTIyNCAwTDk2IDMyMGwtNjQgMHptOTYgNjRsMTYwIDAgMCA2NC0xNjAgMCAwLTY0em0yMjQgMGwxNjAgMCAwIDY0LTE2MCAwIDAtNjR6XCJdXG59O1xuY29uc3QgZmFGYXVjZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmF1Y2V0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMDA1XCIsIFwiTTE5MiA5NmwwIDEyTDk2IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2LTEyIDMxLTMuOSAxLS4xIDEgLjEgMzEgMy45IDk2IDEyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAxMiAwLTEyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyek0zMiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTAwLjEgMGMyMC4yIDI5IDUzLjkgNDggOTEuOSA0OHM3MS43LTE5IDkxLjktNDhsMzYuMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MGwtMzIgMC0yMi42LTIyLjZjLTYtNi0xNC4xLTkuNC0yMi42LTkuNEwyNTYgMjI0bDAtNDMuOC0zMi00LTMyIDQgMCA0My44LTE4LjcgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRMMTI4IDI1NmwtOTYgMHpcIl1cbn07XG5jb25zdCBmYUJhc2ViYWxsQmF0QmFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXNlYmFsbC1iYXQtYmFsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjQzMlwiLCBcIk00MjQgMGMtMTIuNCAwLTI0LjIgNC45LTMzIDEzLjdMMjMzLjUgMTcxLjJjLTEwLjUgMTAuNS0xOS44IDIyLjEtMjcuNyAzNC42TDEzMi43IDMyMS42Yy03LjMgMTEuNS0xNS44IDIyLjItMjUuNSAzMS45TDY5LjkgMzkwLjdsNTEuMyA1MS4zIDM3LjMtMzcuM2M5LjYtOS42IDIwLjMtMTguMiAzMS45LTI1LjVsMTE1LjgtNzMuMWMxMi41LTcuOSAyNC4xLTE3LjIgMzQuNi0yNy43TDQ5OC4zIDEyMWM4LjctOC43IDEzLjctMjAuNiAxMy43LTMzcy00LjktMjQuMi0xMy43LTMzTDQ1NyAxMy43QzQ0OC4yIDQuOSA0MzYuNCAwIDQyNCAwem04OCA0MzJhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAwek0xNSAzOTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDY0IDY0YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0OSAzOTljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwelwiXVxufTtcbmNvbnN0IGZhUyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTE1XSwgXCI1M1wiLCBcIk05OS4xIDEwNS40Qzc5IDExNCA2OC4yIDEyNy4yIDY1LjIgMTQ0LjhjLTIuNCAxNC4xLS43IDIzLjIgMiAyOS40YzIuOCA2LjMgNy45IDEyLjQgMTYuNyAxOC42YzE5LjIgMTMuNCA0OC4zIDIyLjEgODQuOSAzMi41YzEgLjMgMS45IC42IDIuOSAuOGMzMi43IDkuMyA3MiAyMC42IDEwMC45IDQwLjdjMTUuNyAxMC45IDI5LjkgMjUuNSAzOC42IDQ1LjFjOC44IDE5LjggMTAuOCA0MiA2LjYgNjYuM2MtNy4zIDQyLjUtMzUuMyA3MS43LTcxLjggODcuM2MtMzUuNCAxNS4yLTc5LjEgMTcuOS0xMjMuNyAxMC45bC0uMiAwczAgMCAwIDBjLTI0LTMuOS02Mi43LTE3LjEtODcuNi0yNS42Yy00LjgtMS43LTkuMi0zLjEtMTIuOC00LjNDNS4xIDQ0MC44LTMuOSA0MjIuNyAxLjYgNDA1LjlzMjMuNy0yNS44IDQwLjUtMjAuM2M0LjkgMS42IDEwLjIgMy40IDE1LjkgNS40YzI1LjQgOC42IDU2LjQgMTkuMiA3NC40IDIyLjFjMzYuOCA1LjcgNjcuNSAyLjUgODguNS02LjVjMjAuMS04LjYgMzAuOC0yMS44IDMzLjktMzkuNGMyLjQtMTQuMSAuNy0yMy4yLTItMjkuNGMtMi44LTYuMy03LjktMTIuNC0xNi43LTE4LjZjLTE5LjItMTMuNC00OC4zLTIyLjEtODQuOS0zMi41Yy0xLS4zLTEuOS0uNi0yLjktLjhjLTMyLjctOS4zLTcyLTIwLjYtMTAwLjktNDAuN2MtMTUuNy0xMC45LTI5LjktMjUuNS0zOC42LTQ1LjFjLTguOC0xOS44LTEwLjgtNDItNi42LTY2LjNsMzEuNSA1LjVMMi4xIDEzMy45QzkuNCA5MS40IDM3LjQgNjIuMiA3My45IDQ2LjZjMzUuNC0xNS4yIDc5LjEtMTcuOSAxMjMuNy0xMC45YzEzIDIgNTIuNCA5LjYgNjYuNiAxMy40YzE3LjEgNC41IDI3LjIgMjIuMSAyMi43IDM5LjJzLTIyLjEgMjcuMi0zOS4yIDIyLjdjLTExLjItMy00OC4xLTEwLjItNjAuMS0xMmw0LjktMzEuNS00LjkgMzEuNWMtMzYuOS01LjgtNjcuNS0yLjUtODguNiA2LjV6XCJdXG59O1xuY29uc3QgZmFUaW1lbGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0aW1lbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTI5Y1wiLCBcIk0xMjggNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0zMiA5Ny4zYzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjNjMC00NC4yLTM1LjgtODAtODAtODBTNDggNTEuOCA0OCA5NmMwIDMyLjggMTkuNyA2MSA0OCA3My4zTDk2IDIyNGwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMCAwIDU0LjdjLTI4LjMgMTIuMy00OCA0MC41LTQ4IDczLjNjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTMyLjgtMTkuNy02MS00OC03My4zbDAtNTQuNyAyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTU0LjdjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuM2MwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDMyLjggMTkuNyA2MSA0OCA3My4zbDAgNTQuNy0zMjAgMCAwLTU0Ljd6TTQ4OCA5NmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zMjAgMzkyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG5jb25zdCBmYUtleWJvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tleWJvYXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbOTAwMF0sIFwiZjExY1wiLCBcIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTYgNjRsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE2IDgwbDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwLTE3NmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xNjAgMzM2YzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDEyOGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0yNTYgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTM2OCAxMjhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMzUyIDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek00NjQgMTI4bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ0OCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYUNhcmV0RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXJldC1kb3duJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJmMGQ3XCIsIFwiTTEzNy40IDM3NC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhMMzIgMTkyYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWwxMjggMTI4elwiXVxufTtcbmNvbnN0IGZhSG91c2VDaGltbmV5TWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaGltbmV5LW1lZGljYWwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImNsaW5pYy1tZWRpY2FsXCJdLCBcImY3ZjJcIiwgXCJNNTc1LjggMjU1LjVjMCAxOC0xNSAzMi4xLTMyIDMyLjFsLTMyIDAgLjcgMTYwLjJjLjIgMzUuNS0yOC41IDY0LjMtNjQgNjQuM2wtMzIwLjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNjAuNC0zMiAwYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w0MTYgMTAwLjcgNDE2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjEgNTIuOCA0Ni40YzggNyAxMiAxNSAxMSAyNHpNMjcyIDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDAgMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00OCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpcIl1cbn07XG5jb25zdCBmYUNsaW5pY01lZGljYWwgPSBmYUhvdXNlQ2hpbW5leU1lZGljYWw7XG5jb25zdCBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS10aHJlZS1xdWFydGVycycsXG4gIGljb246IFszMjAsIDUxMiwgW1widGVtcGVyYXR1cmUtM1wiLCBcInRoZXJtb21ldGVyLTNcIiwgXCJ0aGVybW9tZXRlci10aHJlZS1xdWFydGVyc1wiXSwgXCJmMmM4XCIsIFwiTTE2MCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNjQuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41Qzg2LjIgMzMyLjYgODAgMzQ5LjUgODAgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNUwyMDggMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek00OCAxMTJDNDggNTAuMiA5OC4xIDAgMTYwIDBzMTEyIDUwLjEgMTEyIDExMmwwIDE2NC40YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTMzLjIgMTEuMi02My44IDMwLjEtODguMWMuOS0xLjIgMS41LTIuMiAxLjctMi44Yy4xLS4zIC4yLS41IC4yLS42TDQ4IDExMnpNMjA4IDM2OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNMMTQ0IDE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTc4LjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zelwiXVxufTtcbmNvbnN0IGZhVGVtcGVyYXR1cmUzID0gZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM7XG5jb25zdCBmYVRoZXJtb21ldGVyMyA9IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzO1xuY29uc3QgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnMgPSBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycztcbmNvbnN0IGZhTW9iaWxlU2NyZWVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vYmlsZS1zY3JlZW4nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcIm1vYmlsZS1hbmRyb2lkLWFsdFwiXSwgXCJmM2NmXCIsIFwiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBMMzA0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwxNiA2NHpNMTQ0IDQ0OGMwIDguOCA3LjIgMTYgMTYgMTZsNjQgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0zMDQgNjRMODAgNjRsMCAzMjAgMjI0IDAgMC0zMjB6XCJdXG59O1xuY29uc3QgZmFNb2JpbGVBbmRyb2lkQWx0ID0gZmFNb2JpbGVTY3JlZW47XG5jb25zdCBmYVBsYW5lVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtdXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUyMmRcIiwgXCJNMTkyIDkzLjdDMTkyIDU5LjUgMjIxIDAgMjU2IDBjMzYgMCA2NCA1OS41IDY0IDkzLjdsMCA2Ni4zTDQ5Ny44IDI3OC41YzguOSA1LjkgMTQuMiAxNS45IDE0LjIgMjYuNmwwIDU2LjdjMCAxMC45LTEwLjcgMTguNi0yMS4xIDE1LjJMMzIwIDMyMGwwIDgwIDU3LjYgNDMuMmM0IDMgNi40IDcuOCA2LjQgMTIuOGwwIDQyYzAgNy44LTYuMyAxNC0xNCAxNGMtMS4zIDAtMi42LS4yLTMuOS0uNUwyNTYgNDgwIDE0NS45IDUxMS41Yy0xLjMgLjQtMi42IC41LTMuOSAuNWMtNy44IDAtMTQtNi4zLTE0LTE0bDAtNDJjMC01IDIuNC05LjggNi40LTEyLjhMMTkyIDQwMGwwLTgwTDIxLjEgMzc3QzEwLjcgMzgwLjQgMCAzNzIuNyAwIDM2MS44bDAtNTYuN2MwLTEwLjcgNS4zLTIwLjcgMTQuMi0yNi42TDE5MiAxNjBsMC02Ni4zelwiXVxufTtcbmNvbnN0IGZhUGlnZ3lCYW5rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BpZ2d5LWJhbmsnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY0ZDNcIiwgXCJNNDAwIDk2bDAgLjdjLTUuMy0uNC0xMC42LS43LTE2LS43TDI1NiA5NmMtMTYuNSAwLTMyLjUgMi4xLTQ3LjggNmMtLjEtMi0uMi00LS4yLTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptLTE2IDMyYzMuNSAwIDcgLjEgMTAuNCAuM2M0LjIgLjMgOC40IC43IDEyLjYgMS4zQzQyNC42IDEwOS4xIDQ1MC44IDk2IDQ4MCA5NmwxMS41IDBjMTAuNCAwIDE4IDkuOCAxNS41IDE5LjlsLTEzLjggNTUuMmMxNS44IDE0LjggMjguNyAzMi44IDM3LjUgNTIuOWwxMy4zIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtOS4xIDEyLjEtMTkuOSAyMi45LTMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzItMTI4IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMtMzQuOS0yNi4yLTU4LjctNjYuMy02My4yLTExMkw2OCAzMDRjLTM3LjYgMC02OC0zMC40LTY4LTY4czMwLjQtNjggNjgtNjhsNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00IDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDMxLjIgMGMxMi4xLTU5LjggNTcuNy0xMDcuNSAxMTYuMy0xMjIuOGMxMi45LTMuNCAyNi41LTUuMiA0MC41LTUuMmwxMjggMHptNjQgMTM2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6XCJdXG59O1xuY29uc3QgZmFCYXR0ZXJ5SGFsZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXR0ZXJ5LWhhbGYnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImJhdHRlcnktM1wiXSwgXCJmMjQyXCIsIFwiTTQ2NCAxNjBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTYwYzAgOC44LTcuMiAxNi0xNiAxNkw4MCAzNTJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6TTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NkwwIDMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzODQgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTE2YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC0xNmMwLTQ0LjItMzUuOC04MC04MC04MEw4MCA5NnptMjA4IDk2TDk2IDE5MmwwIDEyOCAxOTIgMCAwLTEyOHpcIl1cbn07XG5jb25zdCBmYUJhdHRlcnkzID0gZmFCYXR0ZXJ5SGFsZjtcbmNvbnN0IGZhTW91bnRhaW5DaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW50YWluLWNpdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MmVcIiwgXCJNMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTIuMSA3MS40IDExOC40YzIuNS0xLjYgNS40LTIuNSA4LjYtMi41bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zLjUgMCA3My44IDEyMi40YzEyLjQgMjAuNiAxMi45IDQ2LjMgMS4yIDY3LjNjLS40IC44LS45IDEuNi0xLjQgMi4zTDU5MiA1MTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTI0IDAgMC03MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDcyLTQwIDAgMC0xNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzM2IDB6bTMyIDY0bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTM1MiAxNzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYwIDk2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE2IDgwbDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCAxODguOUwyODMuOCAyODggMjIzIDI4OGwtNDggNjQtMjQuNi00MS4yTDIyNCAxODguOXptMjkuNC00NC4yQzI0Ny4xIDEzNC4zIDIzNiAxMjggMjI0IDEyOHMtMjMuMSA2LjMtMjkuNCAxNi43TDUuMSA0NTguOWMtNi41IDEwLjgtNi43IDI0LjMtLjcgMzUuM1MyMiA1MTIgMzQuNSA1MTJsMzc5LjEgMGMxMi41IDAgMjQtNi44IDMwLjEtMTcuOHM1LjgtMjQuNS0uNy0zNS4zTDI1My40IDE0NC43elwiXVxufTtcbmNvbnN0IGZhQ29pbnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29pbnMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1MWVcIiwgXCJNNTEyIDgwYzAgMTgtMTQuMyAzNC42LTM4LjQgNDhjLTI5LjEgMTYuMS03Mi41IDI3LjUtMTIyLjMgMzAuOWMtMy43LTEuOC03LjQtMy41LTExLjMtNUMzMDAuNiAxMzcuNCAyNDguMiAxMjggMTkyIDEyOGMtOC4zIDAtMTYuNCAuMi0yNC41IC42bC0xLjEtLjZDMTQyLjMgMTE0LjYgMTI4IDk4IDEyOCA4MGMwLTQ0LjIgODYtODAgMTkyLTgwUzUxMiAzNS44IDUxMiA4MHpNMTYwLjcgMTYxLjFjMTAuMi0uNyAyMC43LTEuMSAzMS4zLTEuMWM2Mi4yIDAgMTE3LjQgMTIuMyAxNTIuNSAzMS40QzM2OS4zIDIwNC45IDM4NCAyMjEuNyAzODQgMjQwYzAgNC0uNyA3LjktMi4xIDExLjdjLTQuNiAxMy4yLTE3IDI1LjMtMzUgMzUuNWMwIDAgMCAwIDAgMGMtLjEgLjEtLjMgLjEtLjQgLjJjMCAwIDAgMCAwIDBzMCAwIDAgMGMtLjMgLjItLjYgLjMtLjkgLjVjLTM1IDE5LjQtOTAuOCAzMi0xNTMuNiAzMmMtNTkuNiAwLTExMi45LTExLjMtMTQ4LjItMjkuMWMtMS45LS45LTMuNy0xLjktNS41LTIuOUMxNC4zIDI3NC42IDAgMjU4IDAgMjQwYzAtMzQuOCA1My40LTY0LjUgMTI4LTc1LjRjMTAuNS0xLjUgMjEuNC0yLjcgMzIuNy0zLjV6TTQxNiAyNDBjMC0yMS45LTEwLjYtMzkuOS0yNC4xLTUzLjRjMjguMy00LjQgNTQuMi0xMS40IDc2LjItMjAuNWMxNi4zLTYuOCAzMS41LTE1LjIgNDMuOS0yNS41bDAgMzUuNGMwIDE5LjMtMTYuNSAzNy4xLTQzLjggNTAuOWMtMTQuNiA3LjQtMzIuNCAxMy43LTUyLjQgMTguNWMuMS0xLjggLjItMy41IC4yLTUuM3ptLTMyIDk2YzAgMTgtMTQuMyAzNC42LTM4LjQgNDhjLTEuOCAxLTMuNiAxLjktNS41IDIuOUMzMDQuOSA0MDQuNyAyNTEuNiA0MTYgMTkyIDQxNmMtNjIuOCAwLTExOC42LTEyLjYtMTUzLjYtMzJDMTQuMyAzNzAuNiAwIDM1NCAwIDMzNmwwLTM1LjRjMTIuNSAxMC4zIDI3LjYgMTguNyA0My45IDI1LjVDODMuNCAzNDIuNiAxMzUuOCAzNTIgMTkyIDM1MnMxMDguNi05LjQgMTQ4LjEtMjUuOWM3LjgtMy4yIDE1LjMtNi45IDIyLjQtMTAuOWM2LjEtMy40IDExLjgtNy4yIDE3LjItMTEuMmMxLjUtMS4xIDIuOS0yLjMgNC4zLTMuNGwwIDMuNCAwIDUuNyAwIDI2LjN6bTMyIDBsMC0zMiAwLTI1LjljMTktNC4yIDM2LjUtOS41IDUyLjEtMTZjMTYuMy02LjggMzEuNS0xNS4yIDQzLjktMjUuNWwwIDM1LjRjMCAxMC41LTUgMjEtMTQuOSAzMC45Yy0xNi4zIDE2LjMtNDUgMjkuNy04MS4zIDM4LjRjLjEtMS43IC4yLTMuNSAuMi01LjN6TTE5MiA0NDhjNTYuMiAwIDEwOC42LTkuNCAxNDguMS0yNS45YzE2LjMtNi44IDMxLjUtMTUuMiA0My45LTI1LjVsMCAzNS40YzAgNDQuMi04NiA4MC0xOTIgODBTMCA0NzYuMiAwIDQzMmwwLTM1LjRjMTIuNSAxMC4zIDI3LjYgMTguNyA0My45IDI1LjVDODMuNCA0MzguNiAxMzUuOCA0NDggMTkyIDQ0OHpcIl1cbn07XG5jb25zdCBmYUtoYW5kYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdraGFuZGEnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5NzcyXSwgXCJmNjZkXCIsIFwiTTI0NS44IDMuN2M1LjktNC45IDE0LjYtNC45IDIwLjUgMGw0OCA0MGM1LjkgNC45IDcuNSAxMy4yIDMuOCAxOS45YzAgMCAwIDAgMCAwczAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwbC0uMSAuMS0uMyAuNmMtLjMgLjUtLjcgMS4zLTEuMiAyLjNjLTEgMi0yLjYgNS00LjQgOC42Yy0uNSAuOS0uOSAxLjktMS40IDIuOUMzNDQuOSA5Ny40IDM2OCAxMzQgMzY4IDE3NnMtMjMuMSA3OC42LTU3LjMgOTcuOGMuNSAxIDEgMiAxLjQgMi45YzEuOCAzLjcgMy4zIDYuNiA0LjQgOC42Yy41IDEgLjkgMS44IDEuMiAyLjNsLjMgLjYgLjEgLjFzMCAwIDAgMHMwIDAgMCAwYzMuNiA2LjcgMiAxNS0zLjggMTkuOUwyNzIgMzQzLjVsMCAxOS44IDM1LjYtMjQuNSA0MS4xLTI4LjJjNDIuOC0yOS40IDY4LjQtNzggNjguNC0xMzBjMC0zMS4xLTkuMi02MS42LTI2LjUtODcuNWwtMi44LTQuMmMtNC02LTMuNS0xNCAxLjMtMTkuNXMxMi43LTcgMTkuMi0zLjdMNDAxLjEgODBjNy4yLTE0LjMgNy4yLTE0LjMgNy4yLTE0LjNzMCAwIDAgMHMwIDAgMCAwbC4xIDAgLjMgLjIgMSAuNWMuOCAuNCAyIDEuMSAzLjUgMS45YzIuOSAxLjcgNyA0LjEgMTEuOCA3LjNjOS42IDYuNCAyMi41IDE2LjEgMzUuNCAyOWMyNS43IDI1LjcgNTIuNyA2NS42IDUyLjcgMTE5LjNjMCA1My4xLTI2LjQgMTAwLjUtNTEuMiAxMzMuNmMtMTIuNiAxNi43LTI1LjEgMzAuMy0zNC41IDM5LjdjLTQuNyA0LjctOC43IDguNC0xMS41IDEwLjljLTEuNCAxLjMtMi41IDIuMi0zLjMgMi45bC0uOSAuOC0uMyAuMi0uMSAuMWMwIDAgMCAwIDAgMHMwIDAgMCAwTDQwMS4xIDQwMGwxMC4yIDEyLjNjLTUuMSA0LjMtMTIuNCA0LjktMTguMiAxLjZsLTc1LjYtNDMtMzIuNyAyMi41IDQ1LjUgMzEuM2MxLjgtLjQgMy43LS43IDUuNy0uN2MxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTIuMiAwLTIyLjMtOS4xLTIzLjgtMjFMMjcyIDQyMy40bDAgMjguOWM5LjYgNS41IDE2IDE1LjkgMTYgMjcuN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTExLjggNi40LTIyLjIgMTYtMjcuN2wwLTI4LjEtNDAuMyAyNy43QzE5Ny44IDQ2My4zIDE4Ny45IDQ3MiAxNzYgNDcyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIuMiAwIDQuNCAuMyA2LjUgLjlsNDUuOC0zMS41LTMyLjctMjIuNS03NS42IDQzYy01LjggMy4zLTEzIDIuNy0xOC4yLTEuNkwxMTIgNDAwYy0xMC4yIDEyLjMtMTAuMiAxMi4zLTEwLjMgMTIuM3MwIDAgMCAwczAgMCAwIDBsLS4xLS4xLS4zLS4yLS45LS44Yy0uOC0uNy0xLjktMS43LTMuMy0yLjljLTIuOC0yLjUtNi43LTYuMi0xMS41LTEwLjljLTkuNC05LjQtMjEuOS0yMy0zNC41LTM5LjdDMjYuNCAzMjQuNSAwIDI3Ny4xIDAgMjI0YzAtNTMuNyAyNi45LTkzLjYgNTIuNy0xMTkuM2MxMi45LTEyLjkgMjUuOC0yMi42IDM1LjQtMjlDOTMgNzIuNSA5NyA3MCA5OS45IDY4LjRjMS41LS44IDIuNi0xLjUgMy41LTEuOWwxLS41IC4zLS4yIC4xIDBjMCAwIDAgMCAwIDBzMCAwIDAgMEwxMTIgODBsLTcuMi0xNC4zYzYuNS0zLjIgMTQuMy0xLjcgMTkuMiAzLjdzNS4zIDEzLjQgMS4zIDE5LjVsLTIuOCA0LjJDMTA1LjIgMTE5IDk2IDE0OS41IDk2IDE4MC42YzAgNTEuOSAyNS42IDEwMC42IDY4LjQgMTMwbDQxLjEgMjguMkwyNDAgMzYyLjZsMC0xOS4xLTQyLjItMzUuMmMtNS45LTQuOS03LjUtMTMuMi0zLjgtMTkuOWMwIDAgMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBsLjEtLjEgLjMtLjZjLjMtLjUgLjctMS4zIDEuMi0yLjNjMS0yIDIuNi01IDQuNC04LjZjLjUtLjkgLjktMS45IDEuNC0yLjlDMTY3LjEgMjU0LjYgMTQ0IDIxOCAxNDQgMTc2czIzLjEtNzguNiA1Ny4zLTk3LjhjLS41LTEtMS0yLTEuNC0yLjljLTEuOC0zLjctMy4zLTYuNi00LjQtOC42Yy0uNS0xLS45LTEuOC0xLjItMi4zbC0uMy0uNi0uMS0uMXMwIDAgMCAwczAgMCAwIDBzMCAwIDAgMGMtMy42LTYuNy0yLTE1IDMuOC0xOS45bDQ4LTQwek0yMjAuMiAxMjIuOWMtMTcgMTEuNS0yOC4yIDMxLTI4LjIgNTMuMXMxMS4yIDQxLjYgMjguMiA1My4xQzIyNyAyMTAuMiAyMzIgMTkwLjkgMjMyIDE3NnMtNS0zNC4yLTExLjgtNTMuMXptNzEuNSAxMDYuMmMxNy0xMS41IDI4LjItMzEgMjguMi01My4xcy0xMS4yLTQxLjYtMjguMi01My4xQzI4NSAxNDEuOCAyODAgMTYxLjEgMjgwIDE3NnM1IDM0LjIgMTEuOCA1My4xelwiXVxufTtcbmNvbnN0IGZhU2xpZGVycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzbGlkZXJzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzbGlkZXJzLWhcIl0sIFwiZjFkZVwiLCBcIk0wIDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw1NC43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhMNDgwIDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjQ2LjcgMGMtMTIuMy0yOC4zLTQwLjUtNDgtNzMuMy00OHMtNjEgMTkuNy03My4zIDQ4TDMyIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTEyOCAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTMyMCAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzItODBjLTMyLjggMC02MSAxOS43LTczLjMgNDhMMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI0Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhsNTQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01NC43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDh6TTE5MiAxMjhhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em03My4zLTY0QzI1MyAzNS43IDIyNC44IDE2IDE5MiAxNnMtNjEgMTkuNy03My4zIDQ4TDMyIDY0QzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmw4Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhMNDgwIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwyNjUuMyA2NHpcIl1cbn07XG5jb25zdCBmYVNsaWRlcnNIID0gZmFTbGlkZXJzO1xuY29uc3QgZmFGb2xkZXJUcmVlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZvbGRlci10cmVlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmODAyXCIsIFwiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJsMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwLTY0TDY0IDM4NGwwLTIyNCAxOTIgMCAwLTY0TDY0IDk2bDAtNjR6TTI4OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTk4LjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMNDA5LjQgOS40Yy02LTYtMTQuMS05LjQtMjIuNi05LjRMMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTYwem0wIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTguNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTMuMy0xMy4zYy02LTYtMTQuMS05LjQtMjIuNi05LjRMMzIwIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNjB6XCJdXG59O1xuY29uc3QgZmFOZXR3b3JrV2lyZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbmV0d29yay13aXJlZCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjZmZlwiLCBcIk0yNTYgNjRsMTI4IDAgMCA2NC0xMjggMCAwLTY0ek0yNDAgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0OCAwIDAgMzJMMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgMCAzMi00OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMC0zMiAyNTYgMCAwIDMyLTQ4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsMTYwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMCAwLTMyIDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI1NiAwIDAtMzIgNDggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDI0MCAwek05NiA0NDhsMC02NCAxMjggMCAwIDY0TDk2IDQ0OHptMzIwLTY0bDEyOCAwIDAgNjQtMTI4IDAgMC02NHpcIl1cbn07XG5jb25zdCBmYU1hcFBpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXAtcGluJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbMTI4MjA1XSwgXCJmMjc2XCIsIFwiTTE2IDE0NGExNDQgMTQ0IDAgMSAxIDI4OCAwQTE0NCAxNDQgMCAxIDEgMTYgMTQ0ek0xNjAgODBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZjLTUzIDAtOTYgNDMtOTYgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTM1LjMgMjguNy02NCA2NC02NHpNMTI4IDQ4MGwwLTE2Mi45YzEwLjQgMS45IDIxLjEgMi45IDMyIDIuOXMyMS42LTEgMzItMi45TDE5MiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6XCJdXG59O1xuY29uc3QgZmFIYW1zYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW1zYScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY2NVwiLCBcIk0zNC42IDI4OEw4MCAyODhjOC44IDAgMTYtNy4yIDE2LTE2TDk2IDcyYzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAxMzJjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xNjRjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDE2NGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTEzMmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjAwYzAgOC44IDcuMiAxNiAxNiAxNmw0NS40IDBjMTkuMSAwIDM0LjYgMTUuNSAzNC42IDM0LjZjMCA4LjYtMy4yIDE2LjktOSAyMy4zTDQxNi42IDQ0MWMtNDEuMSA0NS4yLTk5LjQgNzEtMTYwLjYgNzFzLTExOS40LTI1LjgtMTYwLjYtNzFMOSAzNDUuOWMtNS44LTYuNC05LTE0LjctOS0yMy4zQzAgMzAzLjUgMTUuNSAyODggMzQuNiAyODh6TTI1NiAyODhjLTM4LjQgMC03Ni44IDM1LjgtOTAuNiA1MC4yYy0zLjYgMy43LTUuNCA4LjctNS40IDEzLjhzMS44IDEwLjEgNS40IDEzLjhDMTc5LjIgMzgwLjIgMjE3LjYgNDE2IDI1NiA0MTZzNzYuOC0zNS44IDkwLjYtNTAuMmMzLjYtMy43IDUuNC04LjcgNS40LTEzLjhzLTEuOC0xMC4xLTUuNC0xMy44QzMzMi44IDMyMy44IDI5NC40IDI4OCAyNTYgMjg4em0wIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYUNlbnRTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NlbnQtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTNmNVwiLCBcIk0yMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDM0LjdjMzAuOSA1LjIgNTkuMiAxNy43IDgzLjIgMzUuOGMxNC4xIDEwLjYgMTcgMzAuNyA2LjQgNDQuOHMtMzAuNyAxNy00NC44IDYuNEMyNzkuNCAxMzcuNSAyNTIuOSAxMjggMjI0IDEyOGMtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjhzNTcuMyAxMjggMTI4IDEyOGMyOC45IDAgNTUuNC05LjUgNzYuOC0yNS42YzE0LjEtMTAuNiAzNC4yLTcuOCA0NC44IDYuNHM3LjggMzQuMi02LjQgNDQuOGMtMjQgMTgtNTIuNCAzMC42LTgzLjIgMzUuOGwwIDM0LjdjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNC43QzEwMS4yIDQzMC4xIDMyIDM1MS4xIDMyIDI1NnM2OS4yLTE3NC4xIDE2MC0xODkuM0wxOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFGbGFzayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbGFzaycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjBjM1wiLCBcIk0yODggMEwxNjAgMCAxMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJzMTQuMyAzMiAzMiAzMmwwIDEzMi44YzAgMTEuOC0zLjMgMjMuNS05LjUgMzMuNUwxMC4zIDQwNi4yQzMuNiA0MTcuMiAwIDQyOS43IDAgNDQyLjZDMCA0ODAuOSAzMS4xIDUxMiA2OS40IDUxMmwzMDkuMiAwYzM4LjMgMCA2OS40LTMxLjEgNjkuNC02OS40YzAtMTIuOC0zLjYtMjUuNC0xMC4zLTM2LjRMMzI5LjUgMjMwLjRjLTYuMi0xMC4xLTkuNS0yMS43LTkuNS0zMy41TDMyMCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwyODggMHpNMTkyIDE5Ni44TDE5MiA2NGw2NCAwIDAgMTMyLjhjMCAyMy43IDYuNiA0Ni45IDE5IDY3LjFMMzA5LjUgMzIwbC0xNzEgMEwxNzMgMjYzLjljMTIuNC0yMC4yIDE5LTQzLjQgMTktNjcuMXpcIl1cbn07XG5jb25zdCBmYVBlcnNvblByZWduYW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1wcmVnbmFudCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTMxZVwiLCBcIk0xOTIgMGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTEyMCAzODNjLTEzLjgtMy42LTI0LTE2LjEtMjQtMzFsMC01NS4xLTQuNiA3LjZjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE1LTI0LjkgNDAuMy00MS41IDY4LjctNDUuNmM0LjEtLjYgOC4yLTEgMTIuNS0xbDEuMSAwIDEyLjUgMCAyLjQgMGMxLjQgMCAyLjggLjEgNC4xIC4zYzM1LjcgMi45IDY1LjQgMjkuMyA3Mi4xIDY1bDYuMSAzMi41YzQ0LjMgOC42IDc3LjcgNDcuNSA3Ny43IDk0LjNsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYgMC00MCAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni04IDAtOCAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05N3pcIl1cbn07XG5jb25zdCBmYVdhbmRTcGFya2xlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YW5kLXNwYXJrbGVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNzJiXCIsIFwiTTQ2NCA2LjFjOS41LTguNSAyNC04LjEgMzMgLjlsOCA4YzkgOSA5LjQgMjMuNSAuOSAzM2wtODUuOCA5NS45Yy0yLjYgMi45LTQuMSA2LjctNC4xIDEwLjdsMCAyMS40YzAgOC44LTcuMiAxNi0xNiAxNmwtMTUuOCAwYy00LjYgMC04LjkgMS45LTExLjkgNS4zTDEwMC43IDUwMC45Qzk0LjMgNTA4IDg1LjMgNTEyIDc1LjggNTEyYy04LjggMC0xNy4zLTMuNS0yMy41LTkuOEw5LjcgNDU5LjdDMy41IDQ1My40IDAgNDQ1IDAgNDM2LjJjMC05LjUgNC0xOC41IDExLjEtMjQuOGwxMTEuNi05OS44YzMuNC0zIDUuMy03LjQgNS4zLTExLjlsMC0yNy42YzAtOC44IDcuMi0xNiAxNi0xNmwzNC42IDBjMy45IDAgNy43LTEuNSAxMC43LTQuMUw0NjQgNi4xek00MzIgMjg4YzMuNiAwIDYuNyAyLjQgNy43IDUuOGwxNC44IDUxLjcgNTEuNyAxNC44YzMuNCAxIDUuOCA0LjEgNS44IDcuN3MtMi40IDYuNy01LjggNy43bC01MS43IDE0LjgtMTQuOCA1MS43Yy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOGwtMTQuOC01MS43LTUxLjctMTQuOGMtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjggMTQuOC01MS43YzEtMy40IDQuMS01LjggNy43LTUuOHpNODcuNyA2OS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOEw4Ny43IDIxOC4yYy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOEw1Ny41IDE2Ni41IDUuOCAxNTEuN2MtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjhMNzIuMyA2OS44YzEtMy40IDQuMS01LjggNy43LTUuOHM2LjcgMi40IDcuNyA1Ljh6TTIwOCAwYzMuNyAwIDYuOSAyLjUgNy44IDYuMWw2LjggMjcuMyAyNy4zIDYuOGMzLjYgLjkgNi4xIDQuMSA2LjEgNy44cy0yLjUgNi45LTYuMSA3LjhsLTI3LjMgNi44LTYuOCAyNy4zYy0uOSAzLjYtNC4xIDYuMS03LjggNi4xcy02LjktMi41LTcuOC02LjFsLTYuOC0yNy4zLTI3LjMtNi44Yy0zLjYtLjktNi4xLTQuMS02LjEtNy44czIuNS02LjkgNi4xLTcuOGwyNy4zLTYuOCA2LjgtMjcuM2MuOS0zLjYgNC4xLTYuMSA3LjgtNi4xelwiXVxufTtcbmNvbnN0IGZhRWxsaXBzaXNWZXJ0aWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbGxpcHNpcy12ZXJ0aWNhbCcsXG4gIGljb246IFsxMjgsIDUxMiwgW1wiZWxsaXBzaXMtdlwiXSwgXCJmMTQyXCIsIFwiTTY0IDM2MGE1NiA1NiAwIDEgMCAwIDExMiA1NiA1NiAwIDEgMCAwLTExMnptMC0xNjBhNTYgNTYgMCAxIDAgMCAxMTIgNTYgNTYgMCAxIDAgMC0xMTJ6TTEyMCA5NkE1NiA1NiAwIDEgMCA4IDk2YTU2IDU2IDAgMSAwIDExMiAwelwiXVxufTtcbmNvbnN0IGZhRWxsaXBzaXNWID0gZmFFbGxpcHNpc1ZlcnRpY2FsO1xuY29uc3QgZmFUaWNrZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGlja2V0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTAzXSwgXCJmMTQ1XCIsIFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4bDAgNjRjMCA4LjggNy40IDE1LjcgMTUuNyAxOC42QzM0LjUgMjE3LjEgNDggMjM1IDQ4IDI1NnMtMTMuNSAzOC45LTMyLjMgNDUuNEM3LjQgMzA0LjMgMCAzMTEuMiAwIDMyMGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC04LjgtNy40LTE1LjctMTUuNy0xOC42QzU0MS41IDI5NC45IDUyOCAyNzcgNTI4IDI1NnMxMy41LTM4LjkgMzIuMy00NS40YzguMy0yLjkgMTUuNy05LjggMTUuNy0xOC42bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTY0IDExMmwwIDE2MGMwIDguOCA3LjIgMTYgMTYgMTZsMjg4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTYwYzAtOC44LTcuMi0xNi0xNi0xNmwtMjg4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJ6XCJdXG59O1xuY29uc3QgZmFQb3dlck9mZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwb3dlci1vZmYnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5MjExXSwgXCJmMDExXCIsIFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI0ek0xNDMuNSAxMjAuNmMxMy42LTExLjMgMTUuNC0zMS41IDQuMS00NS4xcy0zMS41LTE1LjQtNDUuMS00LjFDNDkuNyAxMTUuNCAxNiAxODEuOCAxNiAyNTZjMCAxMzIuNSAxMDcuNSAyNDAgMjQwIDI0MHMyNDAtMTA3LjUgMjQwLTI0MGMwLTc0LjItMzMuOC0xNDAuNi04Ni42LTE4NC42Yy0xMy42LTExLjMtMzMuOC05LjQtNDUuMSA0LjFzLTkuNCAzMy44IDQuMSA0NS4xYzM4LjkgMzIuMyA2My41IDgxIDYzLjUgMTM1LjRjMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZzLTE3Ni03OC44LTE3Ni0xNzZjMC01NC40IDI0LjctMTAzLjEgNjMuNS0xMzUuNHpcIl1cbn07XG5jb25zdCBmYVJpZ2h0TG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyaWdodC1sb25nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJsb25nLWFycm93LWFsdC1yaWdodFwiXSwgXCJmMzBiXCIsIFwiTTMzNC41IDQxNGM4LjggMy44IDE5IDIgMjYtNC42bDE0NC0xMzZjNC44LTQuNSA3LjUtMTAuOCA3LjUtMTcuNHMtMi43LTEyLjktNy41LTE3LjRsLTE0NC0xMzZjLTctNi42LTE3LjItOC40LTI2LTQuNnMtMTQuNSAxMi41LTE0LjUgMjJsMCA3MkwzMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjg4IDAgMCA3MmMwIDkuNiA1LjcgMTguMiAxNC41IDIyelwiXVxufTtcbmNvbnN0IGZhTG9uZ0Fycm93QWx0UmlnaHQgPSBmYVJpZ2h0TG9uZztcbmNvbnN0IGZhRmxhZ1VzYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmbGFnLXVzYScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjc0ZFwiLCBcIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMybDAgMTYgNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41YzQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xbDAgMzYuMS00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTIwLjMtOS00MS44LTE0LjctNjMuNi0xNi45bDAgMzIuMmMxNy40IDIuMSAzNC40IDYuNyA1MC42IDEzLjlsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNEw0NDggMTM2LjNsMCA2Mi00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNMNjQgMjAzLjFsMCAzMi43IDcwLjItMTUuMWMzNi40LTcuOCA3NC4zLTMuOSAxMDguNCAxMS4zbDE2LjEgNy4yYzQ5LjIgMjEuOSAxMDUgMjMuOCAxNTUuNiA1LjRMNDQ4IDIzMi4zbDAgNjItNDQuNyAxNi4yYy00Mi44IDE1LjYtOTAgMTMuOS0xMzEuNi00LjZsLTE2LjEtNy4yYy00MC4yLTE3LjktODUtMjIuNS0xMjguMS0xMy4zTDY0IDI5OS4xbDAgMzIuNyA3MC4yLTE1LjFjMzYuNC03LjggNzQuMy0zLjkgMTA4LjQgMTEuM2wxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40TDQ0OCAzMjguM2wwIDMzLjVjMCAxMy4zLTguMyAyNS4zLTIwLjggMzBsLTM0LjcgMTNjLTQ2LjIgMTcuMy05Ny42IDE0LjYtMTQxLjctNy40Yy0zNy45LTE5LTgxLjMtMjMuNy0xMjIuNS0xMy40TDY0IDQwMGwwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjQgMC03MC41IDAtMzIuNyAwLTYzLjMgMC0zMi43IDAtNjMuMyAwLTMyLjdMMCA2NCAwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMHptODAgOTZBMTYgMTYgMCAxIDAgODAgOTZhMTYgMTYgMCAxIDAgMzIgMHptMzIgMGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bS0zMiA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG5jb25zdCBmYUxhcHRvcEZpbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGFwdG9wLWZpbGUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1MWRcIiwgXCJNMTI4IDBDOTIuNyAwIDY0IDI4LjcgNjQgNjRsMCAyMjQtNDQuOCAwQzguNiAyODggMCAyOTYuNiAwIDMwNy4yQzAgMzQ5LjYgMzQuNCAzODQgNzYuOCAzODRMMzIwIDM4NGwwLTk2LTE5MiAwIDAtMjI0IDMyMCAwIDAgMzIgNjQgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOCAwek01MTIgMTI4bC0xMTIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAyODhjMCAyNi41IDIxLjUgNDggNDggNDhsMTkyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMDgtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NnptMzIgMGwwIDk2IDk2IDAtOTYtOTZ6XCJdXG59O1xuY29uc3QgZmFUdHkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHR5JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ0ZWxldHlwZVwiXSwgXCJmMWU0XCIsIFwiTTM4LjMgMjQxLjNMMTUuMSAyMDAuNmMtOS4yLTE2LjItOC40LTM2LjUgNC41LTUwQzYxLjQgMTA2LjggMTQ0LjcgNDggMjU2IDQ4czE5NC42IDU4LjggMjM2LjQgMTAyLjZjMTIuOSAxMy41IDEzLjcgMzMuOCA0LjUgNTBsLTIzLjEgNDAuN2MtNy41IDEzLjItMjMuMyAxOS4zLTM3LjggMTQuNmwtODEuMS0yNi42Yy0xMy4xLTQuMy0yMi0xNi42LTIyLTMwLjRsMC01NC44Yy00OS42LTE4LjEtMTA0LTE4LjEtMTUzLjYgMGwwIDU0LjhjMCAxMy44LTguOSAyNi4xLTIyIDMwLjRMNzYuMSAyNTUuOGMtMTQuNSA0LjctMzAuMy0xLjQtMzcuOC0xNC42ek0zMiAzMzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0xNDQgMzIwbDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTExMi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggNDMyYzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpcIl1cbn07XG5jb25zdCBmYVRlbGV0eXBlID0gZmFUdHk7XG5jb25zdCBmYURpYWdyYW1OZXh0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpYWdyYW0tbmV4dCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTQ3NlwiLCBcIk01MTIgMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xNjggMCAwIDY0IDQ2LjEgMGMyMS40IDAgMzIuMSAyNS45IDE3IDQxTDI3MyAzOTljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDE2OSAzMjljLTE1LjEtMTUuMS00LjQtNDEgMTctNDFsNDYuMSAwIDAtNjRMNjQgMjI0Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjR6TTQ0OCA0MTZsMC02NC04Mi43IDAgLjQtLjRjMTguNC0xOC40IDIwLjQtNDMuNyAxMS02My42bDcxLjMgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGw3MS4zIDBjLTkuNCAxOS45LTcuNCA0NS4yIDExIDYzLjZsLjQgLjRMNjQgMzUybDAgNjQgMTQ2LjcgMCA1LjcgNS43YzIxLjkgMjEuOSA1Ny4zIDIxLjkgNzkuMiAwbDUuNy01LjdMNDQ4IDQxNnpcIl1cbn07XG5jb25zdCBmYVBlcnNvblJpZmxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1yaWZsZScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0ZVwiLCBcIk0yNjUuMiAxOTJjMjUuNCAwIDQ5LjggNy4xIDcwLjggMTkuOUwzMzYgNTEybC0xOTIgMCAwLTE3NC4zTDkwLjQgNDI4LjNjLTExLjIgMTktMzUuOCAyNS4zLTU0LjggMTQuMXMtMjUuMy0zNS44LTE0LjEtNTQuOEw5Ny43IDI1OC44YzI0LjUtNDEuNCA2OS02Ni44IDExNy4xLTY2LjhsNTAuNCAwek0xNjAgODBhODAgODAgMCAxIDEgMTYwIDBBODAgODAgMCAxIDEgMTYwIDgwek00NDggMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxMTYuM2M5LjYgNS41IDE2IDE1LjkgMTYgMjcuN2wwIDEwOS4zIDE2LTUuMyAwLTU2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDg0LjVjMCA2LjktNC40IDEzLTEwLjkgMTUuMkw0ODAgMzI1LjNsMCAyNi43IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC00NCAwIDIzIDkyLjFjMi41IDEwLjEtNS4xIDE5LjktMTUuNSAxOS45TDQzMiA1MTJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTk2LTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTQ0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtMzJjMC0xMS44IDYuNC0yMi4yIDE2LTI3LjdMNDE2IDMyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDAgMTYgMHpcIl1cbn07XG5jb25zdCBmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvdXNlLW1lZGljYWwtY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTEyXCIsIFwiTTMyMCAzNjhjMCA1OS41IDI5LjUgMTEyLjEgNzQuOCAxNDRsLTI2Ni43IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTYwLjQtMzIgMGMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTIyLjEgMTkzLjljLTguNS0xLjMtMTcuMy0xLjktMjYuMS0xLjljLTU0LjcgMC0xMDMuNSAyNC45LTEzNS44IDY0TDMyMCAyNTZsMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyNDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0wLTE5MmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnpcIl1cbn07XG5jb25zdCBmYUNsb3NlZENhcHRpb25pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvc2VkLWNhcHRpb25pbmcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYyMGFcIiwgXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTIwMCAyMDhjMTQuMiAwIDI3IDYuMSAzNS44IDE2YzguOCA5LjkgMjQgMTAuNyAzMy45IDEuOXMxMC43LTI0IDEuOS0zMy45Yy0xNy41LTE5LjYtNDMuMS0zMi03MS41LTMyYy01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2YzI4LjQgMCA1NC0xMi40IDcxLjUtMzJjOC44LTkuOSA4LTI1LTEuOS0zMy45cy0yNS04LTMzLjkgMS45Yy04LjggOS45LTIxLjYgMTYtMzUuOCAxNmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHptMTQ0IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4YzE0LjIgMCAyNyA2LjEgMzUuOCAxNmM4LjggOS45IDI0IDEwLjcgMzMuOSAxLjlzMTAuNy0yNCAxLjktMzMuOWMtMTcuNS0xOS42LTQzLjEtMzItNzEuNS0zMmMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMyOC40IDAgNTQtMTIuNCA3MS41LTMyYzguOC05LjkgOC0yNS0xLjktMzMuOXMtMjUtOC0zMy45IDEuOWMtOC44IDkuOS0yMS42IDE2LTM1LjggMTZjLTI2LjUgMC00OC0yMS41LTQ4LTQ4elwiXVxufTtcbmNvbnN0IGZhUGVyc29uSGlraW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1oaWtpbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImhpa2luZ1wiXSwgXCJmNmVjXCIsIFwiTTE5MiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem01MS4zIDE4Mi43TDIyNC4yIDMwN2w0OS43IDQ5LjdjOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlsMCA4OS40YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODIuNy03My45LTczLjljLTE1LjgtMTUuOC0yMi4yLTM4LjYtMTYuOS02MC4zbDIwLjQtODRjOC4zLTM0LjEgNDIuNy01NC45IDc2LjctNDYuNGMxOSA0LjggMzUuNiAxNi40IDQ2LjQgMzIuN0wzMDUuMSAyMDhsMzAuOSAwIDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDU1LjhjMCAuMSAwIC4yIDAgLjJzMCAuMiAwIC4yTDM4NCA0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yMTYtMzkuNCAwYy0xNiAwLTMxLTgtMzkuOS0yMS40bC0xMy4zLTIwek04MS4xIDQ3MS45TDExNy4zIDMzNGMzIDQuMiA2LjQgOC4yIDEwLjEgMTEuOWw0MS45IDQxLjlMMTQyLjkgNDg4LjFjLTQuNSAxNy4xLTIyIDI3LjMtMzkuMSAyMi44cy0yNy4zLTIyLTIyLjgtMzkuMXptNTUuNS0zNDZMMTAxLjQgMjY2LjVjLTMgMTIuMS0xNC45IDE5LjktMjcuMiAxNy45bC00Ny45LThjLTE0LTIuMy0yMi45LTE2LjMtMTkuMi0zMEwzMS45IDE1NWM5LjUtMzQuOCA0MS4xLTU5IDc3LjItNTlsNC4yIDBjMTUuNiAwIDI3LjEgMTQuNyAyMy4zIDI5Ljh6XCJdXG59O1xuY29uc3QgZmFIaWtpbmcgPSBmYVBlcnNvbkhpa2luZztcbmNvbnN0IGZhVmVudXNEb3VibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmVudXMtZG91YmxlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbOTg5MF0sIFwiZjIyNlwiLCBcIk0xOTIgMjg4YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHpNMzY4IDE3NmMwIDg2LjMtNjIuMSAxNTguMS0xNDQgMTczLjFsMCAzNC45IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTM0LjlDNzguMSAzMzQuMSAxNiAyNjIuMyAxNiAxNzZDMTYgNzguOCA5NC44IDAgMTkyIDBzMTc2IDc4LjggMTc2IDE3NnpNMzQ0IDMxOGMxNC42LTE1LjYgMjYuOC0zMy40IDM2LTUzYzE4LjggMTQuNCA0Mi40IDIzIDY4IDIzYzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEyYy0yNS42IDAtNDkuMSA4LjYtNjggMjNjLTkuMy0xOS41LTIxLjUtMzcuNC0zNi01M0MzNzMuMSAxMi42IDQwOS4xIDAgNDQ4IDBjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xbDAgMzQuOSAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zNC45Yy0yNi42LTQuOS01MS4xLTE1LjctNzItMzEuMXpcIl1cbn07XG5jb25zdCBmYUltYWdlcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpbWFnZXMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYzMDJcIiwgXCJNMTYwIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzNTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIyNGMwLTM1LjMtMjguNy02NC02NC02NEwxNjAgMzJ6TTM5NiAxMzguN2w5NiAxNDRjNC45IDcuNCA1LjQgMTYuOCAxLjIgMjQuNlM0ODAuOSAzMjAgNDcyIDMyMGwtMTQ0IDAtNDggMC04MCAwYy05LjIgMC0xNy42LTUuMy0yMS42LTEzLjZzLTIuOS0xOC4yIDIuOS0yNS40bDY0LTgwYzQuNi01LjcgMTEuNC05IDE4LjctOXMxNC4yIDMuMyAxOC43IDlsMTcuMyAyMS42IDU2LTg0QzM2MC41IDEzMiAzNjggMTI4IDM3NiAxMjhzMTUuNSA0IDIwIDEwLjd6TTE5MiAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNDggMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTA2LjcgMCAxMjBMMCAzNDRjMCA3NS4xIDYwLjkgMTM2IDEzNiAxMzZsMzIwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyMCAwYy00OC42IDAtODgtMzkuNC04OC04OGwwLTIyNHpcIl1cbn07XG5jb25zdCBmYUNhbGN1bGF0b3IgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsY3VsYXRvcicsXG4gIGljb246IFszODQsIDUxMiwgWzEyODQyNV0sIFwiZjFlY1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek05NiA2NGwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMzIgMTYwYTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6TTk2IDM1MmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTkyIDI1NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bTY0LTY0YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHpNMjg4IDQ0OGEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6XCJdXG59O1xuY29uc3QgZmFQZW9wbGVQdWxsaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Blb3BsZS1wdWxsaW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTM1XCIsIFwiTTgwIDk2QTQ4IDQ4IDAgMSAwIDgwIDBhNDggNDggMCAxIDAgMCA5NnpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmM5LjggMCAxOC41LTQuNCAyNC40LTExLjJMODAuNCA0ODUuM2MyLjkgMTcuNCAxOS40IDI5LjIgMzYuOCAyNi4zczI5LjItMTkuNCAyNi4zLTM2LjhMMTIzLjEgMzUybDE1LjcgMCAzMCAxMzQuOWMzLjggMTcuMyAyMC45IDI4LjEgMzguMiAyNC4zczI4LjEtMjAuOSAyNC4zLTM4LjJsLTU3LjMtMjU4IDExNi4zIDUzLjhjLjUgLjMgMS4xIC41IDEuNiAuN2M4LjYgMy42IDE4IDMuMSAyNS45LS43YzMuNC0xLjYgNi42LTMuOSA5LjMtNi43YzMuMS0zLjIgNS41LTcgNy4xLTExLjRjLjEtLjMgLjItLjcgLjMtMWwyLjUtNy41YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDUzNyAyMzIuN2wtMTUuMy0zNi44QzUwNC41IDE1NC44IDQ2NC4zIDEyOCA0MTkuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMjQuNCAxMC45LTQ0LjYgMjktNTguMSA1MS42TDE1Ny4zIDEzNi45QzE0NC43IDEzMSAxMzAuOSAxMjggMTE3IDEyOGwtNTMgMHpNNDY0IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzQ5LjcgMzM1LjZsLTI1IDYyLjQtNTkuNCA1OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM3Mi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6XCJdXG59O1xuY29uc3QgZmFOID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMTBdLCBcIjRlXCIsIFwiTTIxLjEgMzMuOWMxMi43LTQuNiAyNi45LS43IDM1LjUgOS42TDMyMCAzNTkuNiAzMjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDM4NGMwIDEzLjUtOC40IDI1LjUtMjEuMSAzMC4xcy0yNi45IC43LTM1LjUtOS42TDY0IDE1Mi40IDY0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkwwIDY0QzAgNTAuNSA4LjQgMzguNSAyMS4xIDMzLjl6XCJdXG59O1xuY29uc3QgZmFDYWJsZUNhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWJsZS1jYXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2NzMsIDU3NTUxLCBcInRyYW1cIl0sIFwiZjdkYVwiLCBcIk0yODggMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE2MCA1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zMiAyODhjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTM2IDAgMC02Ni41LTIwMy4xIDQyYy0xMyAyLjctMjUuNy01LjctMjguNC0xOC42czUuNy0yNS43IDE4LjYtMjguNGwyMzItNDggMjMyLTQ4YzEzLTIuNyAyNS43IDUuNyAyOC40IDE4LjZzLTUuNyAyNS43LTE4LjYgMjguNEwyODAgMTQ3LjVsMCA3Ni41IDEzNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNjB6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw2NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMHptMTEyIDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDY0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDY0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwelwiXVxufTtcbmNvbnN0IGZhVHJhbSA9IGZhQ2FibGVDYXI7XG5jb25zdCBmYUNsb3VkUmFpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1yYWluJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzgzLCA5OTI2XSwgXCJmNzNkXCIsIFwiTTk2IDMyMGMtNTMgMC05Ni00My05Ni05NmMwLTQyLjUgMjcuNi03OC42IDY1LjktOTEuMkM2NC43IDEyNi4xIDY0IDExOS4xIDY0IDExMkM2NCA1MC4xIDExNC4xIDAgMTc2IDBjNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwYzE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjhjNDQuMiAwIDgwIDM1LjggODAgODBjMCA1LjUtLjYgMTAuOC0xLjYgMTZjLjUgMCAxLjEgMCAxLjYgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkw5NiAzMjB6bS02LjggNTJjMS4zLTIuNSAzLjktNCA2LjgtNHM1LjQgMS41IDYuOCA0bDM1LjEgNjQuNmM0LjEgNy41IDYuMiAxNS44IDYuMiAyNC4zbDAgM2MwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTNjMC04LjUgMi4xLTE2LjkgNi4yLTI0LjNMODkuMiAzNzJ6bTE2MCAwYzEuMy0yLjUgMy45LTQgNi44LTRzNS40IDEuNSA2LjggNGwzNS4xIDY0LjZjNC4xIDcuNSA2LjIgMTUuOCA2LjIgMjQuM2wwIDNjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0zYzAtOC41IDIuMS0xNi45IDYuMi0yNC4zTDI0OS4yIDM3MnptMTI0LjkgNjQuNkw0MDkuMiAzNzJjMS4zLTIuNSAzLjktNCA2LjgtNHM1LjQgMS41IDYuOCA0bDM1LjEgNjQuNmM0LjEgNy41IDYuMiAxNS44IDYuMiAyNC4zbDAgM2MwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTNjMC04LjUgMi4xLTE2LjkgNi4yLTI0LjN6XCJdXG59O1xuY29uc3QgZmFCdWlsZGluZ0NpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLWNpcmNsZS14bWFyaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRkNFwiLCBcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDk2IDBjMTUuMSAwIDI4LjUtNi45IDM3LjMtMTcuOEMzNDAuNCA0NjIuMiAzMjAgNDE3LjUgMzIwIDM2OGMwLTU0LjcgMjQuOS0xMDMuNSA2NC0xMzUuOEwzODQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTExMi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek04MCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xuY29uc3QgZmFTaGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NzRdLCBcImYyMWFcIiwgXCJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDEyOCA0NC40IDE0LjhjMjMuMSA3LjcgMjkuNSAzNy41IDExLjUgNTMuOWwtMTAxIDkyLjZjLTE2LjIgOS40LTM0LjcgMTUuMS01MC45IDE1LjFjLTE5LjYgMC00MC44LTcuNy01OS4yLTIwLjNjLTIyLjEtMTUuNS01MS42LTE1LjUtNzMuNyAwYy0xNy4xIDExLjgtMzggMjAuMy01OS4yIDIwLjNjLTE2LjIgMC0zNC43LTUuNy01MC45LTE1LjFsLTEwMS05Mi42Yy0xOC0xNi41LTExLjYtNDYuMiAxMS41LTUzLjlMOTYgMjQwbDAtMTI4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDQ4IDAgMC0zMnpNMTYwIDIxOC43bDEwNy44LTM1LjljMTMuMS00LjQgMjcuMy00LjQgNDAuNSAwTDQxNiAyMTguN2wwLTkwLjctMjU2IDAgMCA5MC43ek0zMDYuNSA0MjEuOUMzMjkgNDM3LjQgMzU2LjUgNDQ4IDM4NCA0NDhjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFjMCAwIDAgMCAwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA1MDEuNyA0MTcgNTEyIDM4NCA1MTJjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43YzAgMCAwIDAgMCAwQzEzNi43IDQzNy4yIDE2NS4xIDQ0OCAxOTIgNDQ4YzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwelwiXVxufTtcbmNvbnN0IGZhQXJyb3dzRG93blRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtZG93bi10by1saW5lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGI4XCIsIFwiTTU0NCA0MTZMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyem0yMi42LTEzNy40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQ4MCAyNzQuNyA0ODAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuNy00MS40LTQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2em0tMzIwLTQ1LjNjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE2MCAyNzQuNyAxNjAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuN0w1NC42IDIzMy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG5jb25zdCBmYURvd25sb2FkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Rvd25sb2FkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDE5XCIsIFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI0Mi43LTczLjQtNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI4OCAyNzQuNyAyODggMzJ6TTY0IDM1MmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xMDEuNSAwLTQ1LjMgNDUuM2MtMjUgMjUtNjUuNSAyNS05MC41IDBMMTY1LjUgMzUyIDY0IDM1MnptMzY4IDU2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG5jb25zdCBmYUZhY2VHcmluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3JpbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUxMiwgXCJncmluXCJdLCBcImY1ODBcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4OC4xIDMxMi44YzEyLjMtMy44IDI0LjMgNi45IDE5LjMgMTguN0MzODIuNCAzOTAuNiAzMjQuMiA0MzIgMjU2LjMgNDMycy0xMjYuMi00MS40LTE1MS4xLTEwMC41Yy01LTExLjggNy0yMi41IDE5LjMtMTguN2MzOS43IDEyLjIgODQuNSAxOSAxMzEuOCAxOXM5Mi4xLTYuOCAxMzEuOC0xOXpNMTQ0LjQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFHcmluID0gZmFGYWNlR3JpbjtcbmNvbnN0IGZhRGVsZXRlTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkZWxldGUtbGVmdCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzkwMDMsIFwiYmFja3NwYWNlXCJdLCBcImY1NWFcIiwgXCJNNTc2IDEyOGMwLTM1LjMtMjguNy02NC02NC02NEwyMDUuMyA2NGMtMTcgMC0zMy4zIDYuNy00NS4zIDE4LjdMOS40IDIzMy40Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZMMTYwIDQyOS4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdMNTEyIDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NnpNMjcxIDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3IDQ3IDQ3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ3LTQ3LTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ3LTQ3LTQ3LTQ3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpcIl1cbn07XG5jb25zdCBmYUJhY2tzcGFjZSA9IGZhRGVsZXRlTGVmdDtcbmNvbnN0IGZhRXllRHJvcHBlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdleWUtZHJvcHBlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZXllLWRyb3BwZXItZW1wdHlcIiwgXCJleWVkcm9wcGVyXCJdLCBcImYxZmJcIiwgXCJNMzQxLjYgMjkuMkwyNDAuMSAxMzAuOGwtOS40LTkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40TDQ4Mi44IDE3MC40YzM5LTM5IDM5LTEwMi4yIDAtMTQxLjFzLTEwMi4yLTM5LTE0MS4xIDB6TTU1LjQgMzIzLjNjLTE1IDE1LTIzLjQgMzUuNC0yMy40IDU2LjZsMCA0Mi40TDUuNCA0NjIuMmMtOC41IDEyLjctNi44IDI5LjYgNCA0MC40czI3LjcgMTIuNSA0MC40IDRMODkuNyA0ODBsNDIuNCAwYzIxLjIgMCA0MS42LTguNCA1Ni42LTIzLjRMMzA5LjQgMzM1LjlsLTQ1LjMtNDUuM0wxNDMuNCA0MTEuM2MtMyAzLTcuMSA0LjctMTEuMyA0LjdMOTYgNDE2bDAtMzYuMWMwLTQuMiAxLjctOC4zIDQuNy0xMS4zTDIyMS40IDI0Ny45bC00NS4zLTQ1LjNMNTUuNCAzMjMuM3pcIl1cbn07XG5jb25zdCBmYUV5ZURyb3BwZXJFbXB0eSA9IGZhRXllRHJvcHBlcjtcbmNvbnN0IGZhRXllZHJvcHBlciA9IGZhRXllRHJvcHBlcjtcbmNvbnN0IGZhRmlsZUNpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNWEwXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0w2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTM4NCA2NGwtMTI4IDBMMjU2IDAgMzg0IDEyOHpNMjg4IDM2OGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMTEuMy00My4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEw0MTYgMzg1LjRsLTI4LjctMjguN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw3Mi03MmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG5jb25zdCBmYUZvcndhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9yd2FyZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzkxOTNdLCBcImYwNGVcIiwgXCJNNTIuNSA0NDAuNmMtOS41IDcuOS0yMi44IDkuNy0zNC4xIDQuNFMwIDQyOC40IDAgNDE2TDAgOTZDMCA4My42IDcuMiA3Mi4zIDE4LjQgNjdzMjQuNS0zLjYgMzQuMSA0LjRMMjI0IDIxNC4zbDAgNDEuNyAwIDQxLjdMNTIuNSA0NDAuNnpNMjU2IDM1MmwwLTk2IDAtMTI4IDAtMzJjMC0xMi40IDcuMi0yMy43IDE4LjQtMjlzMjQuNS0zLjYgMzQuMSA0LjRsMTkyIDE2MGM3LjMgNi4xIDExLjUgMTUuMSAxMS41IDI0LjZzLTQuMiAxOC41LTExLjUgMjQuNmwtMTkyIDE2MGMtOS41IDcuOS0yMi44IDkuNy0zNC4xIDQuNHMtMTguNC0xNi42LTE4LjQtMjlsMC02NHpcIl1cbn07XG5jb25zdCBmYU1vYmlsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb2JpbGUnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNDEsIFwibW9iaWxlLWFuZHJvaWRcIiwgXCJtb2JpbGUtcGhvbmVcIl0sIFwiZjNjZVwiLCBcIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6bTgwIDQzMmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhTW9iaWxlQW5kcm9pZCA9IGZhTW9iaWxlO1xuY29uc3QgZmFNb2JpbGVQaG9uZSA9IGZhTW9iaWxlO1xuY29uc3QgZmFGYWNlTWVoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtbWVoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTI4LCBcIm1laFwiXSwgXCJmMTFhXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYuNCAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMTYwIDMzNmwxOTIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFNZWggPSBmYUZhY2VNZWg7XG5jb25zdCBmYUFsaWduQ2VudGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FsaWduLWNlbnRlcicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjAzN1wiLCBcIk0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMTI4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem05NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNTIgMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpcIl1cbn07XG5jb25zdCBmYUJvb2tTa3VsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rLXNrdWxsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJib29rLWRlYWRcIl0sIFwiZjZiN1wiLCBcIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDM4NCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMEw5NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTZMMCA5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjRMOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzIwIDExMmMwLTM1LjMtMzUuOC02NC04MC02NHMtODAgMjguNy04MCA2NGMwIDIwLjkgMTIuNiAzOS41IDMyIDUxLjJsMCAxMi44YzAgOC44IDcuMiAxNiAxNiAxNmw2NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyLjhjMTkuNC0xMS43IDMyLTMwLjMgMzItNTEuMnpNMjA4IDk2YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnptNDggMTZhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpNMTM0LjMgMjA5LjNjLTguMS0zLjUtMTcuNSAuMy0yMSA4LjRzLjMgMTcuNSA4LjQgMjFMMTk5LjQgMjcybC03Ny43IDMzLjNjLTguMSAzLjUtMTEuOSAxMi45LTguNCAyMXMxMi45IDExLjkgMjEgOC40TDI0MCAyODkuNGwxMDUuNyA0NS4zYzguMSAzLjUgMTcuNS0uMyAyMS04LjRzLS4zLTE3LjUtOC40LTIxTDI4MC42IDI3Mmw3Ny43LTMzLjNjOC4xLTMuNSAxMS45LTEyLjkgOC40LTIxcy0xMi45LTExLjktMjEtOC40TDI0MCAyNTQuNiAxMzQuMyAyMDkuM3pcIl1cbn07XG5jb25zdCBmYUJvb2tEZWFkID0gZmFCb29rU2t1bGw7XG5jb25zdCBmYUlkQ2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpZC1jYXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDcsIFwiZHJpdmVycy1saWNlbnNlXCJdLCBcImYyYzJcIiwgXCJNMCA5Nmw1NzYgMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2em0wIDMyTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4TDAgMTI4ek02NCA0MDUuM2MwLTI5LjUgMjMuOS01My4zIDUzLjMtNTMuM2wxMTcuMyAwYzI5LjUgMCA1My4zIDIzLjkgNTMuMyA1My4zYzAgNS45LTQuOCAxMC43LTEwLjcgMTAuN0w3NC43IDQxNmMtNS45IDAtMTAuNy00LjgtMTAuNy0xMC43ek0xNzYgMTkyYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em0xNzYgMTZjMC04LjggNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2em0wIDY0YzAtOC44IDcuMi0xNiAxNi0xNmwxMjggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTI4IDBjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZsMTI4IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFEcml2ZXJzTGljZW5zZSA9IGZhSWRDYXJkO1xuY29uc3QgZmFPdXRkZW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ291dGRlbnQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImRlZGVudFwiXSwgXCJmMDNiXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMTkyIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA5NmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TS4yIDI2OC42Yy04LjItNi40LTguMi0xOC45IDAtMjUuM2wxMDEuOS03OS4zYzEwLjUtOC4yIDI1LjgtLjcgMjUuOCAxMi42bDAgMTU4LjZjMCAxMy4zLTE1LjMgMjAuOC0yNS44IDEyLjZMLjIgMjY4LjZ6XCJdXG59O1xuY29uc3QgZmFEZWRlbnQgPSBmYU91dGRlbnQ7XG5jb25zdCBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY2lyY2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNGZlXCIsIFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42bDAtNS44YzAtNjkuOS01MC41LTEyOS41LTExOS40LTE0MUMzNDcgMzYuNSAzMDAuNiA1MS40IDI2OCA4NEwyNTYgOTYgMjQ0IDg0Yy0zMi42LTMyLjYtNzktNDcuNS0xMjQuNi0zOS45QzUwLjUgNTUuNiAwIDExNS4yIDAgMTg1LjFsMCA1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC05NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAtMTQ0YzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhSG91c2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NjgsIDYzNDk4LCA2MzUwMCwgXCJob21lXCIsIFwiaG9tZS1hbHRcIiwgXCJob21lLWxnLWFsdFwiXSwgXCJmMDE1XCIsIFwiTTU3NS44IDI1NS41YzAgMTgtMTUgMzIuMS0zMiAzMi4xbC0zMiAwIC43IDE2MC4yYzAgMi43LS4yIDUuNC0uNSA4LjFsMCAxNi4yYzAgMjIuMS0xNy45IDQwLTQwIDQwbC0xNiAwYy0xLjEgMC0yLjIgMC0zLjMtLjFjLTEuNCAuMS0yLjggLjEtNC4yIC4xTDQxNiA1MTJsLTI0IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtMjQgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NCAwIDI0YzAgMjIuMS0xNy45IDQwLTQwIDQwbC0yNCAwLTMxLjkgMGMtMS41IDAtMy0uMS00LjUtLjJjLTEuMiAuMS0yLjQgLjItMy42IC4ybC0xNiAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTExMmMwLS45IDAtMS45IC4xLTIuOGwwLTY5LjctMzIgMGMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTY0LjggMjMxLjVjOCA3IDEyIDE1IDExIDI0elwiXVxufTtcbmNvbnN0IGZhSG9tZSA9IGZhSG91c2U7XG5jb25zdCBmYUhvbWVBbHQgPSBmYUhvdXNlO1xuY29uc3QgZmFIb21lTGdBbHQgPSBmYUhvdXNlO1xuY29uc3QgZmFDYWxlbmRhcldlZWsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXItd2VlaycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjc4NFwiLCBcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OEwwIDE2MGwwLTQ4QzAgODUuNSAyMS41IDY0IDQ4IDY0bDQ4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJsNDQ4IDAgMCAyNzJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE5MnptODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwyODggMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZMODAgMjU2elwiXVxufTtcbmNvbnN0IGZhTGFwdG9wTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsYXB0b3AtbWVkaWNhbCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjgxMlwiLCBcIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1Ni02NCAwIDAtMjU2TDEyOCA5NmwwIDI1Ni02NCAwTDY0IDk2ek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NGw2MDEuNiAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjJjMCA0Mi40LTM0LjQgNzYuOC03Ni44IDc2LjhMNzYuOCA0ODBDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODggMTYwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDggMCAwLTQ4elwiXVxufTtcbmNvbnN0IGZhQiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOThdLCBcIjQyXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAyNTYgMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTI4IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuN2MxOC43LTIyLjMgMzAtNTEgMzAtODIuM2MwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEw2NCAzMnptOTYgMTkybC05NiAwTDY0IDk2bDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTY0IDI4OGw5NiAwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRMNjQgNDE2bDAtMTI4elwiXVxufTtcbmNvbnN0IGZhRmlsZU1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1tZWRpY2FsJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNDc3XCIsIFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwyMjQgMCA2NCAwek0yNTYgMGwwIDEyOCAxMjggMEwyNTYgMHpNMTYwIDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQ4IDAgMC00OHpcIl1cbn07XG5jb25zdCBmYURpY2VPbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGljZS1vbmUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU2XSwgXCJmNTI1XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhS2l3aUJpcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAna2l3aS1iaXJkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNTM1XCIsIFwiTTI5MS4yIDM4OC40YzMxLjItMTguOCA2NC43LTM2LjQgMTAxLjEtMzYuNGw1NS43IDBjNC42IDAgOS4xLS4yIDEzLjYtLjdsODUuMyAxMjEuOWM0IDUuNyAxMS4zIDguMiAxNy45IDYuMXMxMS4yLTguMyAxMS4yLTE1LjNsMC0yNDBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTU1LjcgMGMtMzYuNCAwLTY5LjktMTcuNi0xMDEuMS0zNi40QzI2Mi4zIDQyLjEgMjI4LjMgMzIgMTkyIDMyQzg2IDMyIDAgMTE4IDAgMjI0YzAgNzEuMSAzOC42IDEzMy4xIDk2IDE2Ni4zTDk2IDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDZjMTUuMyAzLjkgMzEuNCA2IDQ4IDZjNS40IDAgMTAuNy0uMiAxNi0uN2wwIDQwLjdjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTUwLjljMTIuNC00LjQgMjQuMi0xMCAzNS4yLTE2Ljd6TTQ0OCAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbmNvbnN0IGZhQXJyb3dSaWdodEFycm93TGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy1yaWdodC1hcnJvdy1sZWZ0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbODY0NCwgXCJleGNoYW5nZVwiXSwgXCJmMGVjXCIsIFwiTTQzOC42IDE1MC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMzM4LjcgOTYgMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4czE0LjMgMzIgMzIgMzJsMzA2LjcgMC00MS40IDQxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOTYtOTZ6bS0zMzMuMyAzNTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyA0MTYgNDE2IDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzA2LjcgMCA0MS40LTQxLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w5NiA5NnpcIl1cbn07XG5jb25zdCBmYUV4Y2hhbmdlID0gZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0O1xuY29uc3QgZmFSb3RhdGVSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb3RhdGUtcmlnaHQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInJlZG8tYWx0XCIsIFwicm90YXRlLWZvcndhcmRcIl0sIFwiZjJmOVwiLCBcIk00NjMuNSAyMjRsOC41IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMjhjMC05LjctNS44LTE4LjUtMTQuOC0yMi4ycy0xOS4zLTEuNy0yNi4yIDUuMkw0MTMuNCA5Ni42Yy04Ny42LTg2LjUtMjI4LjctODYuMi0zMTUuOCAxYy04Ny41IDg3LjUtODcuNSAyMjkuMyAwIDMxNi44czIyOS4zIDg3LjUgMzE2LjggMGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGMtNjIuNSA2Mi41LTE2My44IDYyLjUtMjI2LjMgMHMtNjIuNS0xNjMuOCAwLTIyNi4zYzYyLjItNjIuMiAxNjIuNy02Mi41IDIyNS4zLTFMMzI3IDE4M2MtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMnMxMi41IDE0LjggMjIuMiAxNC44bDExOS41IDB6XCJdXG59O1xuY29uc3QgZmFSZWRvQWx0ID0gZmFSb3RhdGVSaWdodDtcbmNvbnN0IGZhUm90YXRlRm9yd2FyZCA9IGZhUm90YXRlUmlnaHQ7XG5jb25zdCBmYVV0ZW5zaWxzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3V0ZW5zaWxzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODYwLCA2MTY4NSwgXCJjdXRsZXJ5XCJdLCBcImYyZTdcIiwgXCJNNDE2IDBDNDAwIDAgMjg4IDMyIDI4OCAxNzZsMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDAtMTEyIDAtMjA4YzAtMTcuNy0xNC4zLTMyLTMyLTMyek02NCAxNkM2NCA3LjggNTcuOSAxIDQ5LjcgLjFTMzQuMiA0LjYgMzIuNCAxMi41TDIuMSAxNDguOEMuNyAxNTUuMSAwIDE2MS41IDAgMTY3LjljMCA0NS45IDM1LjEgODMuNiA4MCA4Ny43TDgwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI0LjRjNDQuOS00LjEgODAtNDEuOCA4MC04Ny43YzAtNi40LS43LTEyLjgtMi4xLTE5LjFMMTkxLjYgMTIuNWMtMS44LTgtOS4zLTEzLjMtMTcuNC0xMi40UzE2MCA3LjggMTYwIDE2bDAgMTM0LjJjMCA1LjQtNC40IDkuOC05LjggOS44Yy01LjEgMC05LjMtMy45LTkuOC05TDEyNy45IDE0LjZDMTI3LjIgNi4zIDEyMC4zIDAgMTEyIDBzLTE1LjIgNi4zLTE1LjkgMTQuNkw4My43IDE1MWMtLjUgNS4xLTQuNyA5LTkuOCA5Yy01LjQgMC05LjgtNC40LTkuOC05LjhMNjQgMTZ6bTQ4LjMgMTUybC0uMyAwLS4zIDAgLjMtLjcgLjMgLjd6XCJdXG59O1xuY29uc3QgZmFDdXRsZXJ5ID0gZmFVdGVuc2lscztcbmNvbnN0IGZhQXJyb3dVcFdpZGVTaG9ydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC13aWRlLXNob3J0JyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LWFtb3VudC11cFwiXSwgXCJmMTYxXCIsIFwiTTE1MS42IDQyLjRDMTQ1LjUgMzUuOCAxMzcgMzIgMTI4IDMycy0xNy41IDMuOC0yMy42IDEwLjRsLTg4IDk2Yy0xMS45IDEzLTExLjEgMzMuMyAyIDQ1LjJzMzMuMyAxMS4xIDQ1LjItMkw5NiAxNDYuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwMS43IDMyLjQgMzUuNGMxMS45IDEzIDMyLjIgMTMuOSA0NS4yIDJzMTMuOS0zMi4yIDItNDUuMmwtODgtOTZ6TTMyMCA0ODBsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFTb3J0QW1vdW50VXAgPSBmYUFycm93VXBXaWRlU2hvcnQ7XG5jb25zdCBmYU1pbGxTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21pbGwtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTFlZFwiLCBcIk0zMDIuMSA0Mi44YzUuOS0xNi42LTIuNy0zNS0xOS40LTQwLjlzLTM1IDIuNy00MC45IDE5LjRMMjA4IDExNi4xYy01LjcgNC0xMS4xIDguNS0xNiAxMy41QzE3MS43IDEwOC45IDE0My4zIDk2IDExMiA5NmMtMTkuNSAwLTM3LjggNS01My43IDEzLjdDNTIuNSAxMDEuNCA0Mi45IDk2IDMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOGwwIDgwTDAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMDhjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDQyLjVMODEuOSA0NjkuMmMtNS45IDE2LjYgMi43IDM1IDE5LjQgNDAuOXMzNS0yLjcgNDAuOS0xOS40bDIxLjQtNjBDMTY4LjkgNDQxIDE3OS42IDQ0OCAxOTIgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTU0LjUgMzUuNy0xMDBjMy45LTEgOC4xLTEuNiAxMi4zLTEuNmMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDIwOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjA4YzAtNTguMi00NC4zLTEwNi0xMDEuMS0xMTEuNWwxOS4yLTUzLjh6XCJdXG59O1xuY29uc3QgZmFCb3dsUmljZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3dsLXJpY2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImUyZWJcIiwgXCJNMTc2IDU2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0yNCA0OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek01NiAxNzZsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMCAyODMuNEMwIDI2OC4zIDEyLjMgMjU2IDI3LjQgMjU2bDQ1Ny4xIDBjMTUuMSAwIDI3LjQgMTIuMyAyNy40IDI3LjRjMCA3MC41LTQ0LjQgMTMwLjctMTA2LjcgMTU0LjFMNDAzLjUgNDUyYy0yIDE2LTE1LjYgMjgtMzEuOCAyOGwtMjMxLjUgMGMtMTYuMSAwLTI5LjgtMTItMzEuOC0yOGwtMS44LTE0LjRDNDQuNCA0MTQuMSAwIDM1My45IDAgMjgzLjR6TTIyNCAyMDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bS05NiAwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0tMjQtOTZsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMjE2IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0tMjQtOTZsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMTIwIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0tMjQtOTZsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMjk2IDMybDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdXG59O1xuY29uc3QgZmFTa3VsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdza3VsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODEyOF0sIFwiZjU0Y1wiLCBcIk00MTYgMzk4LjljNTguNS00MS4xIDk2LTEwNC4xIDk2LTE3NC45QzUxMiAxMDAuMyAzOTcuNCAwIDI1NiAwUzAgMTAwLjMgMCAyMjRjMCA3MC43IDM3LjUgMTMzLjggOTYgMTc0LjljMCAuNCAwIC43IDAgMS4xbDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNDggMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OCA2NCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLS40IDAtLjcgMC0xLjF6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMEE2NCA2NCAwIDEgMSA5NiAyNTZ6bTI1Ni02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG5jb25zdCBmYVRvd2VyQnJvYWRjYXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Rvd2VyLWJyb2FkY2FzdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiYnJvYWRjYXN0LXRvd2VyXCJdLCBcImY1MTlcIiwgXCJNODAuMyA0NEM2OS44IDY5LjkgNjQgOTguMiA2NCAxMjhzNS44IDU4LjEgMTYuMyA4NGM2LjYgMTYuNC0xLjMgMzUtMTcuNyA0MS43cy0zNS0xLjMtNDEuNy0xNy43QzcuNCAyMDIuNiAwIDE2Ni4xIDAgMTI4UzcuNCA1My40IDIwLjkgMjBDMjcuNiAzLjYgNDYuMi00LjMgNjIuNiAyLjNTODYuOSAyNy42IDgwLjMgNDR6TTU1NS4xIDIwQzU2OC42IDUzLjQgNTc2IDg5LjkgNTc2IDEyOHMtNy40IDc0LjYtMjAuOSAxMDhjLTYuNiAxNi40LTI1LjMgMjQuMy00MS43IDE3LjdTNDg5LjEgMjI4LjQgNDk1LjcgMjEyYzEwLjUtMjUuOSAxNi4zLTU0LjIgMTYuMy04NHMtNS44LTU4LjEtMTYuMy04NEM0ODkuMSAyNy42IDQ5NyA5IDUxMy40IDIuM3MzNSAxLjMgNDEuNyAxNy43ek0zNTIgMTI4YzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNEwzMjAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjk2LjZjLTE5LjEtMTEuMS0zMi0zMS43LTMyLTU1LjRjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHpNMTcwLjYgNzYuOEMxNjMuOCA5Mi40IDE2MCAxMDkuNyAxNjAgMTI4czMuOCAzNS42IDEwLjYgNTEuMmM3LjEgMTYuMi0uMyAzNS4xLTE2LjUgNDIuMXMtMzUuMS0uMy00Mi4xLTE2LjVjLTEwLjMtMjMuNi0xNi00OS42LTE2LTc2LjhzNS43LTUzLjIgMTYtNzYuOGM3LjEtMTYuMiAyNS45LTIzLjYgNDIuMS0xNi41czIzLjYgMjUuOSAxNi41IDQyLjF6TTQ2NCA1MS4yYzEwLjMgMjMuNiAxNiA0OS42IDE2IDc2LjhzLTUuNyA1My4yLTE2IDc2LjhjLTcuMSAxNi4yLTI1LjkgMjMuNi00Mi4xIDE2LjVzLTIzLjYtMjUuOS0xNi41LTQyLjFjNi44LTE1LjYgMTAuNi0zMi45IDEwLjYtNTEuMnMtMy44LTM1LjYtMTAuNi01MS4yYy03LjEtMTYuMiAuMy0zNS4xIDE2LjUtNDIuMXMzNS4xIC4zIDQyLjEgMTYuNXpcIl1cbn07XG5jb25zdCBmYUJyb2FkY2FzdFRvd2VyID0gZmFUb3dlckJyb2FkY2FzdDtcbmNvbnN0IGZhVHJ1Y2tQaWNrdXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stcGlja3VwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzYzXSwgXCJmNjNjXCIsIFwiTTM2OC42IDk2bDc2LjggOTZMMjg4IDE5MmwwLTk2IDgwLjYgMHpNMjI0IDgwbDAgMTEyTDY0IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMy4xIDBjLS43IDUuMi0xLjEgMTAuNi0xLjEgMTZjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmMwLTUuNC0uNC0xMC44LTEuMS0xNmw2Ni4zIDBjLS43IDUuMi0xLjEgMTAuNi0xLjEgMTZjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmMwLTUuNC0uNC0xMC44LTEuMS0xNmwzMy4xIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNDguNiAwTDQxOC42IDU2Yy0xMi4xLTE1LjItMzAuNS0yNC01MC0yNEwyNzIgMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4em0wIDI4OGE0OCA0OCAwIDEgMSAtOTYgMCA0OCA0OCAwIDEgMSA5NiAwem0yODggMGE0OCA0OCAwIDEgMSAtOTYgMCA0OCA0OCAwIDEgMSA5NiAwelwiXVxufTtcbmNvbnN0IGZhVXBMb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VwLWxvbmcnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcImxvbmctYXJyb3ctYWx0LXVwXCJdLCBcImYzMGNcIiwgXCJNMzE4IDE3Ny41YzMuOC04LjggMi0xOS00LjYtMjZsLTEzNi0xNDRDMTcyLjkgMi43IDE2Ni42IDAgMTYwIDBzLTEyLjkgMi43LTE3LjQgNy41bC0xMzYgMTQ0Yy02LjYgNy04LjQgMTcuMi00LjYgMjZTMTQuNCAxOTIgMjQgMTkybDcyIDAgMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI4OCA3MiAwYzkuNiAwIDE4LjItNS43IDIyLTE0LjV6XCJdXG59O1xuY29uc3QgZmFMb25nQXJyb3dBbHRVcCA9IGZhVXBMb25nO1xuY29uc3QgZmFTdG9wID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0b3AnLFxuICBpY29uOiBbMzg0LCA1MTIsIFs5MjA5XSwgXCJmMDRkXCIsIFwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NFYzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHpcIl1cbn07XG5jb25zdCBmYUNvZGVNZXJnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb2RlLW1lcmdlJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMzg3XCIsIFwiTTgwIDU2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMzIuNCA5Ny4yYzI4LTEyLjQgNDcuNi00MC41IDQ3LjYtNzMuMmMwLTQ0LjItMzUuOC04MC04MC04MFMwIDM1LjggMCA4MGMwIDMyLjggMTkuNyA2MSA0OCA3My4zbDAgMjA1LjNDMTkuNyAzNzEgMCAzOTkuMiAwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNsMC04Ni42YzI2LjcgMjAuMSA2MCAzMiA5NiAzMmw4Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MGMtMzIuOCAwLTYxIDE5LjctNzMuMyA0OEwyMDggMjQwYy00OS45IDAtOTEtMzguMS05NS42LTg2Ljh6TTgwIDQwOGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTM0NCAyNzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpcIl1cbn07XG5jb25zdCBmYVVwbG9hZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1cGxvYWQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwOTNcIiwgXCJNMjg4IDEwOS4zTDI4OCAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yNDIuNy03My40IDczLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDEyOC0xMjhjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTI4IDEyOGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyODggMTA5LjN6TTY0IDM1MmwxMjggMGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMyYzAtMzUuMyAyOC43LTY0IDY0LTY0ek00MzIgNDU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpcIl1cbn07XG5jb25zdCBmYUh1cnJpY2FuZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdodXJyaWNhbmUnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImY3NTFcIiwgXCJNMCAyMDhDMCAxMDQuNCA3NS43IDE4LjUgMTc0LjkgMi42QzE4NCAxLjIgMTkyIDguNiAxOTIgMTcuOWwwIDYzLjNjMCA4LjQgNi41IDE1LjMgMTQuNyAxNi41QzMwNyAxMTIuNSAzODQgMTk5IDM4NCAzMDMuNGMwIDEwMy42LTc1LjcgMTg5LjUtMTc0LjkgMjA1LjRjLTkuMiAxLjUtMTcuMS01LjktMTcuMS0xNS4ybDAtNjMuM2MwLTguNC02LjUtMTUuMy0xNC43LTE2LjVDNzcgMzk4LjkgMCAzMTIuNCAwIDIwOHptMjg4IDQ4QTk2IDk2IDAgMSAwIDk2IDI1NmE5NiA5NiAwIDEgMCAxOTIgMHptLTk2LTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYU1vdW5kID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW5kJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTJkXCIsIFwiTTE0NC4xIDE3OS4yQzE3My44IDEyNy43IDIyOC42IDk2IDI4OCA5NnMxMTQuMiAzMS43IDE0My45IDgzLjJMNTQwLjQgMzY4YzEyLjMgMjEuMy0zLjEgNDgtMjcuNyA0OEg2My4zYy0yNC42IDAtNDAtMjYuNi0yNy43LTQ4TDE0NC4xIDE3OS4yelwiXVxufTtcbmNvbnN0IGZhVG9pbGV0UG9ydGFibGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndG9pbGV0LXBvcnRhYmxlJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTgzXCIsIFwiTTAgMzJMMCA2NGwzMjAgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyek0yNCA5NkwwIDk2bDAgMjRMMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTggMjI0IDAgMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zNjggMC0yNC0yNCAwTDI0IDk2ek0yNTYgMjQwbDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXVxufTtcbmNvbnN0IGZhQ29tcGFjdERpc2MgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tcGFjdC1kaXNjJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkxLCAxMjgxOTIsIDEyODQ0MF0sIFwiZjUxZlwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTI1NiAzMmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS05Ni0zMmE5NiA5NiAwIDEgMCAxOTIgMCA5NiA5NiAwIDEgMCAtMTkyIDB6TTk2IDI0MGMwLTM1IDE3LjUtNzEuMSA0NS4yLTk4LjhTMjA1IDk2IDI0MCA5NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtNDUuNCAwLTg5LjIgMjIuMy0xMjEuNSA1NC41UzY0IDE5NC42IDY0IDI0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2elwiXVxufTtcbmNvbnN0IGZhRmlsZUFycm93RG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWFycm93LWRvd24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImZpbGUtZG93bmxvYWRcIl0sIFwiZjU2ZFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMjI0IDAgNjQgMHpNMjU2IDBsMCAxMjggMTI4IDBMMjU2IDB6TTIxNiAyMzJsMCAxMDIuMSAzMS0zMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtNzItNzJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMSAzMUwxNjggMjMyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdXG59O1xuY29uc3QgZmFGaWxlRG93bmxvYWQgPSBmYUZpbGVBcnJvd0Rvd247XG5jb25zdCBmYUNhcmF2YW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyYXZhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjhmZlwiLCBcIk0wIDExMkMwIDY3LjggMzUuOCAzMiA4MCAzMmwzMzYgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MGwwIDE2MCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwLTI4OCAwYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bC0xNiAwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDExMnpNMzIwIDM1MmwxMjggMCAwLTk2LTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMzIgMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE5MnpNOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTI4em05NiAzMzZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2elwiXVxufTtcbmNvbnN0IGZhU2hpZWxkQ2F0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaWVsZC1jYXQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NzJcIiwgXCJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjJjLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yYzE2LjcgOCAzNi4xIDggNTIuOCAwQzQ1NC43IDQyMC43IDQ5NS41IDIzOS4yIDQ5NiAxNDBjLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMTYwIDE1NC40YzAtNS44IDQuNy0xMC40IDEwLjQtMTAuNGwuMiAwYzMuNCAwIDYuNSAxLjYgOC41IDQuM2w0MCA1My4zYzMgNCA3LjggNi40IDEyLjggNi40bDQ4IDBjNSAwIDkuOC0yLjQgMTIuOC02LjRsNDAtNTMuM2MyLTIuNyA1LjItNC4zIDguNS00LjNsLjIgMGM1LjggMCAxMC40IDQuNyAxMC40IDEwLjRMMzUyIDI3MmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTExNy42ek0yMTYgMjg4YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptOTYtMTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHpcIl1cbn07XG5jb25zdCBmYUJvbHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9sdCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzk4ODksIFwiemFwXCJdLCBcImYwZTdcIiwgXCJNMzQ5LjQgNDQuNmM1LjktMTMuNyAxLjUtMjkuNy0xMC42LTM4LjVzLTI4LjYtOC0zOS45IDEuOGwtMjU2IDIyNGMtMTAgOC44LTEzLjYgMjIuOS04LjkgMzUuM1M1MC43IDI4OCA2NCAyODhsMTExLjUgMEw5OC42IDQ2Ny40Yy01LjkgMTMuNy0xLjUgMjkuNyAxMC42IDM4LjVzMjguNiA4IDM5LjktMS44bDI1Ni0yMjRjMTAtOC44IDEzLjYtMjIuOSA4LjktMzUuM3MtMTYuNi0yMC43LTMwLTIwLjdsLTExMS41IDBMMzQ5LjQgNDQuNnpcIl1cbn07XG5jb25zdCBmYVphcCA9IGZhQm9sdDtcbmNvbnN0IGZhR2xhc3NXYXRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnbGFzcy13YXRlcicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRmNFwiLCBcIk0zMiAwQzIzLjEgMCAxNC42IDMuNyA4LjYgMTAuMlMtLjYgMjUuNCAuMSAzNC4zTDI4LjkgNDM3LjdjMyA0MS45IDM3LjggNzQuMyA3OS44IDc0LjNsMTY2LjYgMGM0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEwzMiAwek03MyAxNTYuNUw2Ni40IDY0bDI1MS4zIDBMMzExIDE1Ni41bC0yNC4yIDEyLjFjLTE5LjQgOS43LTQyLjIgOS43LTYxLjYgMGMtMjAuOS0xMC40LTQ1LjUtMTAuNC02Ni40IDBjLTE5LjQgOS43LTQyLjIgOS43LTYxLjYgMEw3MyAxNTYuNXpcIl1cbn07XG5jb25zdCBmYU9pbFdlbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnb2lsLXdlbGwnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MzJcIiwgXCJNNTI4LjMgNjEuM2MtMTEuNC00Mi43LTU1LjMtNjgtOTgtNTYuNkw0MTQuOSA4LjhDMzk3LjggMTMuNCAzODcuNyAzMSAzOTIuMyA0OGwyNC41IDkxLjRMMzA4LjUgMTY3LjVsLTYuMy0xOC4xQzI5Ny43IDEzNi42IDI4NS42IDEyOCAyNzIgMTI4cy0yNS43IDguNi0zMC4yIDIxLjRsLTEzLjYgMzlMOTYgMjIyLjYgOTYgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjY0LTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEzNy4zIDBMMzQwIDI1Ny41bC02Mi4yIDE2LjFMMzA1LjMgMzUybC02Ni42IDBMMjY1IDI3N2wtNzQuNiAxOS4zTDEzNy4zIDQ0OCA5NiA0NDhsMC0xNTkuMiAzMzcuNC04Ny41IDI1LjIgOTRjNC42IDE3LjEgMjIuMSAyNy4yIDM5LjIgMjIuNmwxNS41LTQuMWM0Mi43LTExLjQgNjgtNTUuMyA1Ni42LTk4TDUyOC4zIDYxLjN6TTIwNS4xIDQ0OGwxMS4yLTMyIDExMS40IDAgMTEuMiAzMi0xMzMuOCAwelwiXVxufTtcbmNvbnN0IGZhVmF1bHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmF1bHQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUyYzVcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYgMCAxNiAzMiA2NCAwIDE2LTMyIDIyNCAwIDE2IDMyIDY0IDAgMTYtMzIgMTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM1MmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0yMjQgMzIwYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wLTI0MGExNjAgMTYwIDAgMSAxIDAgMzIwIDE2MCAxNjAgMCAxIDEgMC0zMjB6TTQ4MCAyMjEuM0w0ODAgMzM2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTE0LjdjLTE4LjYtNi42LTMyLTI0LjQtMzItNDUuM2MwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4YzAgMjAuOS0xMy40IDM4LjctMzIgNDUuM3pcIl1cbn07XG5jb25zdCBmYU1hcnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFycycsXG4gIGljb246IFs0NDgsIDUxMiwgWzk3OTRdLCBcImYyMjJcIiwgXCJNMjg5LjggNDYuOGMzLjctOSAxMi41LTE0LjggMjIuMi0xNC44bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTEyYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTMzLjQtMzMuNEwzMjEgMjA0LjJjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOGMwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMwIDQwMS4yIDAgMzA0czc4LjgtMTc2IDE3Ni0xNzZjMzcgMCA3MS40IDExLjQgOTkuOCAzMWw1Mi42LTUyLjZMMjk1IDczYy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yek00MDAgODBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDB6TTE3NiA0MTZhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0elwiXVxufTtcbmNvbnN0IGZhVG9pbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RvaWxldCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODcwMV0sIFwiZjdkOFwiLCBcIk0yNCAwQzEwLjcgMCAwIDEwLjcgMCAyNFMxMC43IDQ4IDI0IDQ4bDggMCAwIDE0OC45Yy0xLjkgMS40LTMuOCAyLjktNS42IDQuNEMxMC45IDIxNC41IDAgMjMyLjkgMCAyNTZjMCA0Ni45IDE0LjMgODQuMSAzNyAxMTIuNWMxNC4yIDE3LjcgMzEuMSAzMS4zIDQ4LjUgNDEuOEw2NS42IDQ2OS45Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44czE1LjcgMTMuMyAyNiAxMy4zbDI1NiAwYzEwLjMgMCAxOS45LTQuOSAyNi0xMy4zczcuNy0xOS4xIDQuNC0yOC44bC0xOS44LTU5LjVjMTcuNC0xMC41IDM0LjMtMjQuMSA0OC41LTQxLjhjMjIuNy0yOC40IDM3LTY1LjUgMzctMTEyLjVjMC0yMy4xLTEwLjktNDEuNS0yNi40LTU0LjZjLTEuOC0xLjUtMy43LTMtNS42LTQuNEw0MTYgNDhsOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDB6TTM4NCAyNTYuM2MwIDEtLjMgMi42LTMuOCA1LjZjLTQuOCA0LjEtMTQgOS0yOS4zIDEzLjRDMzIwLjUgMjg0IDI3Ni4xIDI4OCAyMjQgMjg4cy05Ni41LTQtMTI2LjktMTIuOGMtMTUuMy00LjQtMjQuNS05LjMtMjkuMy0xMy40Yy0zLjUtMy0zLjgtNC42LTMuOC01LjZsMC0uM2MwIDAgMC0uMSAwLS4xYzAtMSAwLTIuNSAzLjgtNS44YzQuOC00LjEgMTQtOSAyOS4zLTEzLjRDMTI3LjUgMjI4IDE3MS45IDIyNCAyMjQgMjI0czk2LjUgNCAxMjYuOSAxMi44YzE1LjMgNC40IDI0LjUgOS4zIDI5LjMgMTMuNGMzLjggMy4yIDMuOCA0LjggMy44IDUuOGMwIDAgMCAuMSAwIC4xbDAgLjN6TTMyOC4yIDM4NGwtLjIgLjUgMC0uNSAuMiAwek0xMTIgNjRsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYVBsYW5lQ2lyY2xlWG1hcmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUtY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTU3XCIsIFwiTTI1NiAwYy0zNSAwLTY0IDU5LjUtNjQgOTMuN2wwIDg0LjZMOC4xIDI4My40Yy01IDIuOC04LjEgOC4yLTguMSAxMy45bDAgNjUuNWMwIDEwLjYgMTAuMiAxOC4zIDIwLjQgMTUuNGwxNzEuNi00OSAwIDcwLjktNTcuNiA0My4yYy00IDMtNi40IDcuOC02LjQgMTIuOGwwIDQyYzAgNy44IDYuMyAxNCAxNCAxNGMxLjMgMCAyLjYtLjIgMy45LS41TDI1NiA0ODBsMTEwLjEgMzEuNWMxLjMgLjQgMi42IC41IDMuOSAuNWM2IDAgMTEuMS0zLjcgMTMuMS05QzM0NC41IDQ3MC43IDMyMCA0MjIuMiAzMjAgMzY4YzAtNjAuNiAzMC42LTExNCA3Ny4xLTE0NS42TDMyMCAxNzguM2wwLTg0LjZDMzIwIDU5LjUgMjkyIDAgMjU2IDB6TTQ5NiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43TDUxOC42IDM2OGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbmNvbnN0IGZhWWVuU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd5ZW4tc2lnbicsXG4gIGljb246IFszMjAsIDUxMiwgWzE2NSwgXCJjbnlcIiwgXCJqcHlcIiwgXCJybWJcIiwgXCJ5ZW5cIl0sIFwiZjE1N1wiLCBcIk01OC42IDQ2LjNDNDguOCAzMS41IDI5IDI3LjYgMTQuMiAzNy40Uy00LjQgNjcgNS40IDgxLjhMMTAwLjIgMjI0IDQ4IDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4MCAwIDAgMzItODAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4MCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDgwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTgwIDAgMC0zMiA4MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01Mi4yIDBMMzE0LjYgODEuOGM5LjgtMTQuNyA1LjgtMzQuNi04LjktNDQuNHMtMzQuNi01LjgtNDQuNCA4LjlMMTYwIDE5OC4zIDU4LjYgNDYuM3pcIl1cbn07XG5jb25zdCBmYUNueSA9IGZhWWVuU2lnbjtcbmNvbnN0IGZhSnB5ID0gZmFZZW5TaWduO1xuY29uc3QgZmFSbWIgPSBmYVllblNpZ247XG5jb25zdCBmYVllbiA9IGZhWWVuU2lnbjtcbmNvbnN0IGZhUnVibGVTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3J1YmxlLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFs4MzgxLCBcInJvdWJsZVwiLCBcInJ1YlwiLCBcInJ1YmxlXCJdLCBcImYxNThcIiwgXCJNOTYgMzJDNzguMyAzMiA2NCA0Ni4zIDY0IDY0bDAgMTkyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC0zMiAxMTIgMGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NEw5NiAzMnpNMjQwIDI1NmwtMTEyIDAgMC0xNjAgMTEyIDBjNDQuMiAwIDgwIDM1LjggODAgODBzLTM1LjggODAtODAgODB6XCJdXG59O1xuY29uc3QgZmFSb3VibGUgPSBmYVJ1YmxlU2lnbjtcbmNvbnN0IGZhUnViID0gZmFSdWJsZVNpZ247XG5jb25zdCBmYVJ1YmxlID0gZmFSdWJsZVNpZ247XG5jb25zdCBmYVN1biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdW4nLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5NzI4XSwgXCJmMTg1XCIsIFwiTTM2MS41IDEuMmM1IDIuMSA4LjYgNi42IDkuNiAxMS45TDM5MSAxMjFsMTA3LjkgMTkuOGM1LjMgMSA5LjggNC42IDExLjkgOS42czEuNSAxMC43LTEuNiAxNS4yTDQ0Ni45IDI1Nmw2Mi4zIDkwLjNjMy4xIDQuNSAzLjcgMTAuMiAxLjYgMTUuMnMtNi42IDguNi0xMS45IDkuNkwzOTEgMzkxIDM3MS4xIDQ5OC45Yy0xIDUuMy00LjYgOS44LTkuNiAxMS45cy0xMC43IDEuNS0xNS4yLTEuNkwyNTYgNDQ2LjlsLTkwLjMgNjIuM2MtNC41IDMuMS0xMC4yIDMuNy0xNS4yIDEuNnMtOC42LTYuNi05LjYtMTEuOUwxMjEgMzkxIDEzLjEgMzcxLjFjLTUuMy0xLTkuOC00LjYtMTEuOS05LjZzLTEuNS0xMC43IDEuNi0xNS4yTDY1LjEgMjU2IDIuOCAxNjUuN2MtMy4xLTQuNS0zLjctMTAuMi0xLjYtMTUuMnM2LjYtOC42IDExLjktOS42TDEyMSAxMjEgMTQwLjkgMTMuMWMxLTUuMyA0LjYtOS44IDkuNi0xMS45czEwLjctMS41IDE1LjIgMS42TDI1NiA2NS4xIDM0Ni4zIDIuOGM0LjUtMy4xIDEwLjItMy43IDE1LjItMS42ek0xNjAgMjU2YTk2IDk2IDAgMSAxIDE5MiAwIDk2IDk2IDAgMSAxIC0xOTIgMHptMjI0IDBhMTI4IDEyOCAwIDEgMCAtMjU2IDAgMTI4IDEyOCAwIDEgMCAyNTYgMHpcIl1cbn07XG5jb25zdCBmYUd1aXRhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdndWl0YXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3YTZcIiwgXCJNNDY1IDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDM4MyA1NWMtMi40IDIuNC00LjMgNS4zLTUuNSA4LjVsLTE1LjQgNDEtNzcuNSA3Ny42Yy00NS4xLTI5LjQtOTkuMy0zMC4yLTEzMSAxLjZjLTExIDExLTE4IDI0LjYtMjEuNCAzOS42Yy0zLjcgMTYuNi0xOS4xIDMwLjctMzYuMSAzMS42Yy0yNS42IDEuMy00OS4zIDEwLjctNjcuMyAyOC42Qy0xNiAzMjguNC03LjYgNDA5LjQgNDcuNSA0NjQuNXMxMzYuMSA2My41IDE4MC45IDE4LjdjMTcuOS0xNy45IDI3LjQtNDEuNyAyOC42LTY3LjNjLjktMTcgMTUtMzIuMyAzMS42LTM2LjFjMTUtMy40IDI4LjYtMTAuNSAzOS42LTIxLjRjMzEuOC0zMS44IDMxLTg1LjkgMS42LTEzMWw3Ny42LTc3LjYgNDEtMTUuNGMzLjItMS4yIDYuMS0zLjEgOC41LTUuNWw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0NjUgN3pNMjA4IDI1NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xuY29uc3QgZmFGYWNlTGF1Z2hXaW5rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtbGF1Z2gtd2luaycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGF1Z2gtd2lua1wiXSwgXCJmNTljXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek05Ni44IDMxNC4xYy0zLjgtMTMuNyA3LjQtMjYuMSAyMS42LTI2LjFsMjc1LjIgMGMxNC4yIDAgMjUuNSAxMi40IDIxLjYgMjYuMUMzOTYuMiAzODIgMzMyLjEgNDMyIDI1NiA0MzJzLTE0MC4yLTUwLTE1OS4yLTExNy45ek0xNDQuNCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTU2LjQgMjUuNmMtNS4zIDcuMS0xNS4zIDguNS0yMi40IDMuMnMtOC41LTE1LjMtMy4yLTIyLjRjMzAuNC00MC41IDkxLjItNDAuNSAxMjEuNiAwYzUuMyA3LjEgMy45IDE3LjEtMy4yIDIyLjRzLTE3LjEgMy45LTIyLjQtMy4yYy0xNy42LTIzLjUtNTIuOC0yMy41LTcwLjQgMHpcIl1cbn07XG5jb25zdCBmYUxhdWdoV2luayA9IGZhRmFjZUxhdWdoV2luaztcbmNvbnN0IGZhSG9yc2VIZWFkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hvcnNlLWhlYWQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3YWJcIiwgXCJNNjQgNDY0bDAtMTQ3LjFjMC0xMDguNCA2OC4zLTIwNS4xIDE3MC41LTI0MS4zTDQwNC4yIDE1LjVDNDI1LjYgNy45IDQ0OCAyMy44IDQ0OCA0Ni40YzAgMTEtNS41IDIxLjItMTQuNiAyNy4zTDQwMCA5NmM0OC4xIDAgOTEuMiAyOS44IDEwOC4xIDc0LjlsNDguNiAxMjkuNWMxMS44IDMxLjQgNC4xIDY2LjgtMTkuNiA5MC41Yy0xNiAxNi0zNy44IDI1LjEtNjAuNSAyNS4xbC0zLjQgMGMtMjYuMSAwLTUwLjktMTEuNi02Ny42LTMxLjdsLTMyLjMtMzguN2MtMTEuNyA0LjEtMjQuMiA2LjQtMzcuMyA2LjRjMCAwIDAgMC0uMSAwYzAgMCAwIDAgMCAwYy02LjMgMC0xMi41LS41LTE4LjYtMS41Yy0zLjYtLjYtNy4yLTEuNC0xMC43LTIuM2MwIDAgMCAwIDAgMGMtMjguOS03LjgtNTMuMS0yNi44LTY3LjgtNTIuMmMtNC40LTcuNi0xNC4yLTEwLjMtMjEuOS01LjhzLTEwLjMgMTQuMi01LjggMjEuOWMyNCA0MS41IDY4LjMgNzAgMTE5LjMgNzEuOWw0Ny4yIDcwLjhjNCA2LjEgNi4yIDEzLjIgNi4yIDIwLjRjMCAyMC4zLTE2LjUgMzYuOC0zNi44IDM2LjhMMTEyIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6TTM5MiAyMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4elwiXVxufTtcbmNvbnN0IGZhQm9yZUhvbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9yZS1ob2xlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGMzXCIsIFwiTTI1NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI2NC42Yy0xOS4xIDExLjEtMzIgMzEuNy0zMiA1NS40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0yMy43LTEyLjktNDQuNC0zMi01NS40TDI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDggMTI4Yy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OGwtODAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTgwIDB6XCJdXG59O1xuY29uc3QgZmFJbmR1c3RyeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdpbmR1c3RyeScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjI3NVwiLCBcIk02NCAzMkM0Ni4zIDMyIDMyIDQ2LjMgMzIgNjRsMCAyNDAgMCA0OCAwIDgwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTI4IDAtMTUxLjhjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFMMzUyIDIxNS40bDAtNjMuMmMwLTE4LjItMTkuNC0yOS43LTM1LjQtMjEuMUwxNjAgMjE1LjQgMTYwIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDY0IDMyelwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtZG93bicsXG4gIGljb246IFs1MTIsIDUxMiwgWzYxNDY2LCBcImFycm93LWFsdC1jaXJjbGUtZG93blwiXSwgXCJmMzU4XCIsIFwiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMHpNMjQ0LjcgMzk1LjNsLTExMi0xMTJjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjRzOC4zLTkuOSAxNC44LTkuOWw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTExMiAxMTJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwelwiXVxufTtcbmNvbnN0IGZhQXJyb3dBbHRDaXJjbGVEb3duID0gZmFDaXJjbGVEb3duO1xuY29uc3QgZmFBcnJvd3NUdXJuVG9Eb3RzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy10dXJuLXRvLWRvdHMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0YzFcIiwgXCJNMjQ5LjQgMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zTDI2OS4zIDk2IDQxNiA5NmM1MyAwIDk2IDQzIDk2IDk2bDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTQ2LjcgMCAyNS40IDI1LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w4MC04MHptMTMuMyAyNTZsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDIuNyA0MTYgOTYgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzJjMC01MyA0My05NiA5Ni05NmwxNDYuNyAwLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMHpNMzg0IDM4NGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTY0IDE5MkE2NCA2NCAwIDEgMSA2NCA2NGE2NCA2NCAwIDEgMSAwIDEyOHpcIl1cbn07XG5jb25zdCBmYUZsb3JpblNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmxvcmluLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxODRcIiwgXCJNMzE0LjcgMzJjLTM4LjggMC03My43IDIzLjMtODguNiA1OS4xTDE3MC43IDIyNCA2NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODAgMEw5OC45IDM5Ni4zYy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN0wzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcuMyAwYzM4LjggMCA3My43LTIzLjMgODguNi01OS4xTDIxMy4zIDI4OCAzMjAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDQ1LjEtMTA4LjNjNS0xMS45IDE2LjYtMTkuNyAyOS41LTE5LjdMMzUyIDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNy4zIDB6XCJdXG59O1xuY29uc3QgZmFBcnJvd0Rvd25TaG9ydFdpZGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi1zaG9ydC13aWRlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJzb3J0LWFtb3VudC1kZXNjXCIsIFwic29ydC1hbW91bnQtZG93bi1hbHRcIl0sIFwiZjg4NFwiLCBcIk0xNTEuNiA0NjkuNkMxNDUuNSA0NzYuMiAxMzcgNDgwIDEyOCA0ODBzLTE3LjUtMy44LTIzLjYtMTAuNGwtODgtOTZjLTExLjktMTMtMTEuMS0zMy4zIDItNDUuMnMzMy4zLTExLjEgNDUuMiAyTDk2IDM2NS43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDEuNyAzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOGwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFTb3J0QW1vdW50RGVzYyA9IGZhQXJyb3dEb3duU2hvcnRXaWRlO1xuY29uc3QgZmFTb3J0QW1vdW50RG93bkFsdCA9IGZhQXJyb3dEb3duU2hvcnRXaWRlO1xuY29uc3QgZmFMZXNzVGhhbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsZXNzLXRoYW4nLFxuICBpY29uOiBbMzg0LCA1MTIsIFs2Mjc3NF0sIFwiM2NcIiwgXCJNMzgwLjYgODEuN2M3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45TDEwMy42IDI1NiAzNjYuMyAzODcuNGMxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zbC0zMjAtMTYwQzYuOCAyNzkuMiAwIDI2OC4xIDAgMjU2czYuOC0yMy4yIDE3LjctMjguNmwzMjAtMTYwYzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjN6XCJdXG59O1xuY29uc3QgZmFBbmdsZURvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtZG93bicsXG4gIGljb246IFs0NDgsIDUxMiwgWzg5NjRdLCBcImYxMDdcIiwgXCJNMjAxLjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzA2LjcgODYuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHpcIl1cbn07XG5jb25zdCBmYUNhclR1bm5lbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXItdHVubmVsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNGRlXCIsIFwiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0Mi44IDBjLTYuNi01LjktMTAuOC0xNC40LTEwLjgtMjRsMC0xMTJjMC0yMC44IDExLjMtMzguOSAyOC4xLTQ4LjZsMjEtNjQuN2M3LjUtMjMuMSAyOS0zOC43IDUzLjMtMzguN2wxMTUuMiAwYzI0LjMgMCA0NS44IDE1LjYgNTMuMyAzOC43bDIxIDY0LjdjMTYuOCA5LjcgMjguMiAyNy44IDI4LjIgNDguNmwwIDExMmMwIDkuNi00LjIgMTguMS0xMC44IDI0bDQyLjggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MkM1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMHpNMzYyLjggNTEyYy02LjYtNS45LTEwLjgtMTQuNC0xMC44LTI0bDAtNDAtMTkyIDAgMCA0MGMwIDkuNi00LjIgMTguMS0xMC44IDI0bDIxMy43IDB6TTE5MC44IDI3Ny41TDE3NyAzMjBsMTU4IDAtMTMuOC00Mi41Yy0xLjEtMy4zLTQuMS01LjUtNy42LTUuNWwtMTE1LjIgMGMtMy41IDAtNi41IDIuMi03LjYgNS41ek0xNjggNDA4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjAwLTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6XCJdXG59O1xuY29uc3QgZmFIZWFkU2lkZUNvdWdoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hlYWQtc2lkZS1jb3VnaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA2MVwiLCBcIk0wIDIyNC4yQzAgMTAwLjYgMTAwLjIgMCAyMjQgMGwyNCAwYzk1LjIgMCAxODEuMiA2OS4zIDE5Ny4zIDE2MC4yYzIuMyAxMyA2LjggMjUuNyAxNS4xIDM2bDQyIDUyLjZjNi4yIDcuOCA5LjYgMTcuNCA5LjYgMjcuNGMwIDI0LjItMTkuNiA0My44LTQzLjggNDMuOEw0NDggMzIwczAgMCAwIDBsMCAzMkwzMzkuMiAzNjUuNmMtMTEgMS40LTE5LjIgMTAuNy0xOS4yIDIxLjhjMCAxMS42IDkgMjEuMiAyMC42IDIxLjlMNDQ4IDQxNmwwIDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC04MCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDAgMHMwIDAgMCAwTDk2IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03Mi43YzAtMTYuNy02LjktMzIuNS0xNy4xLTQ1LjhDMTYuNiAzMjIuNCAwIDI3NC4xIDAgMjI0LjJ6bTM1Mi0uMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTQ2NCAzODRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTUyLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNNTkyIDQ4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek01NTIgMzEyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAtMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNTUyIDQwOGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xuY29uc3QgZmFHcmlwTGluZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ3JpcC1saW5lcycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjdhNFwiLCBcIk0zMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMjg4em0wLTEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjB6XCJdXG59O1xuY29uc3QgZmFUaHVtYnNEb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RodW1icy1kb3duJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MDc4LCA2MTU3Nl0sIFwiZjE2NVwiLCBcIk0zMTMuNCA0NzkuMWMyNi01LjIgNDIuOS0zMC41IDM3LjctNTYuNWwtMi4zLTExLjRjLTUuMy0yNi43LTE1LjEtNTIuMS0yOC44LTc1LjJsMTQ0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhjMC0xOC41LTEwLjUtMzQuNi0yNS45LTQyLjZDNDk3IDIzNi42IDUwNCAyMjMuMSA1MDQgMjA4YzAtMjMuNC0xNi44LTQyLjktMzguOS00Ny4xYzQuNC03LjMgNi45LTE1LjggNi45LTI0LjljMC0yMS4zLTEzLjktMzkuNC0zMy4xLTQ1LjZjLjctMy4zIDEuMS02LjggMS4xLTEwLjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTk3LjUgMGMtMTkgMC0zNy41IDUuNi01My4zIDE2LjFMMjAyLjcgNzMuOEMxNzYgOTEuNiAxNjAgMTIxLjYgMTYwIDE1My43bDAgMzguMyAwIDQ4IDAgMjQuOWMwIDI5LjIgMTMuMyA1Ni43IDM2IDc1bDcuNCA1LjljMjYuNSAyMS4yIDQ0LjYgNTEgNTEuMiA4NC4ybDIuMyAxMS40YzUuMiAyNiAzMC41IDQyLjkgNTYuNSAzNy43ek0zMiAzODRsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhMMCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFVc2VyTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLWxvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY1MDJcIiwgXCJNMjI0IDI1NkExMjggMTI4IDAgMSAwIDIyNCAwYTEyOCAxMjggMCAxIDAgMCAyNTZ6bS00NS43IDQ4Qzc5LjggMzA0IDAgMzgzLjggMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEybDM2Mi44IDBjLTUuNC05LjQtOC42LTIwLjMtOC42LTMybDAtMTI4YzAtMi4xIC4xLTQuMiAuMy02LjNjLTMxLTI2LTcxLTQxLjctMTE0LjYtNDEuN2wtOTEuNCAwek01MjggMjQwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDgtNjQgMCAwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJsMCA0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl1cbn07XG5jb25zdCBmYUFycm93UmlnaHRMb25nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXJpZ2h0LWxvbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxvbmctYXJyb3ctcmlnaHRcIl0sIFwiZjE3OFwiLCBcIk01MDIuNiAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDAyLjcgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzNzAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4elwiXVxufTtcbmNvbnN0IGZhTG9uZ0Fycm93UmlnaHQgPSBmYUFycm93UmlnaHRMb25nO1xuY29uc3QgZmFBbmNob3JDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmNob3ItY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGFjXCIsIFwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0yMS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBMMjI0IDE3NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMjA4LTQ4IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC02LjEgNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw5NyAyNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDcgMzE5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNy03IDAgNi4xYzAgODguNCA3MS42IDE2MCAxNjAgMTYwbDgwIDAgODAgMGM4LjIgMCAxNi4zLS42IDI0LjItMS44Yy0yMi4yLTE2LjItNDAuNC0zNy41LTUzLTYyLjJMMzIwIDQ0OGwwLTgwIDAtMTI4IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwLjkgMHpNNDk2IDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xuY29uc3QgZmFFbGxpcHNpcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlbGxpcHNpcycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiZWxsaXBzaXMtaFwiXSwgXCJmMTQxXCIsIFwiTTggMjU2YTU2IDU2IDAgMSAxIDExMiAwQTU2IDU2IDAgMSAxIDggMjU2em0xNjAgMGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTIxNi01NmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpcIl1cbn07XG5jb25zdCBmYUVsbGlwc2lzSCA9IGZhRWxsaXBzaXM7XG5jb25zdCBmYUNoZXNzUGF3biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVzcy1wYXduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbOTgyM10sIFwiZjQ0M1wiLCBcIk0yMTUuNSAyMjRjMjkuMi0xOC40IDQ4LjUtNTAuOSA0OC41LTg4YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0UzU2IDc4LjYgNTYgMTM2YzAgMzcuMSAxOS40IDY5LjYgNDguNSA4OEw5NiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyYzAgMTYuNSAxMi41IDMwIDI4LjUgMzEuOEw4MCA0MDBsMTYwIDBMMjI3LjUgMjg3LjhjMTYtMS44IDI4LjUtMTUuMyAyOC41LTMxLjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTguNSAwek0yMi42IDQ3My40Yy00LjIgNC4yLTYuNiAxMC02LjYgMTZDMTYgNTAxLjkgMjYuMSA1MTIgMzguNiA1MTJsMjQyLjcgMGMxMi41IDAgMjIuNi0xMC4xIDIyLjYtMjIuNmMwLTYtMi40LTExLjgtNi42LTE2TDI1NiA0MzIgNjQgNDMyIDIyLjYgNDczLjR6XCJdXG59O1xuY29uc3QgZmFLaXRNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2tpdC1tZWRpY2FsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJmaXJzdC1haWRcIl0sIFwiZjQ3OVwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyIDBMOTYgMzIgNjQgMzJ6bTY0IDBsMCA0NDggMzIwIDAgMC00NDhMMTI4IDMyek01MTIgNDgwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAgNDQ4IDMyIDB6TTI1NiAxNzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQ4IDAgMCA0OGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQ4LTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwIDAtNDh6XCJdXG59O1xuY29uc3QgZmFGaXJzdEFpZCA9IGZhS2l0TWVkaWNhbDtcbmNvbnN0IGZhUGVyc29uVGhyb3VnaFdpbmRvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tdGhyb3VnaC13aW5kb3cnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1YTlcIiwgXCJNNjQgNjRsMjI0IDAgMCA5LjhjMCAzOS0yMy43IDc0LTU5LjkgODguNEMxNjcuNiAxODYuNSAxMjggMjQ1IDEyOCAzMTAuMmwwIDczLjhzMCAwIDAgMGwtNjQgMEw2NCA2NHptMjg4IDBsMjI0IDAgMCAzMjAtNjcuNyAwLTMuNy00LjUtNzUuMi05MC4yYy05LjEtMTAuOS0yMi42LTE3LjMtMzYuOS0xNy4zbC03MS4xIDAtNDEtNjMuMWMtLjMtLjUtLjYtMS0xLTEuNGM0NC43LTI5IDcyLjUtNzkgNzIuNS0xMzMuNmwwLTkuOHptNzMgMzIwbC00NS44IDAgNDIuNyA2NEw1OTIgNDQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI2MC4yIDAgMzMuMiA0OS44YzkuOCAxNC43IDI5LjcgMTguNyA0NC40IDguOXMxOC43LTI5LjcgOC45LTQ0LjRMMzEwLjUgMzM2bDc0LjYgMCA0MCA0OHptLTE1OS41IDBMMTkyIDM4NHMwIDAgMCAwbDAtNzMuOGMwLTEwLjIgMS42LTIwLjEgNC43LTI5LjVMMjY1LjUgMzg0ek0xOTIgMTI4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6XCJdXG59O1xuY29uc3QgZmFUb29sYm94ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Rvb2xib3gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MjBdLCBcImY1NTJcIiwgXCJNMTc2IDg4bDAgNDAgMTYwIDAgMC00MGMwLTQuNC0zLjYtOC04LThMMTg0IDgwYy00LjQgMC04IDMuNi04IDh6bS00OCA0MGwwLTQwYzAtMzAuOSAyNS4xLTU2IDU2LTU2bDE0NCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgNDAgMjguMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFsNTEuOSA1MS45YzkgOSAxNC4xIDIxLjIgMTQuMSAzMy45bDAgOTIuMS0xMjggMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzItMTI4IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyTDAgMzIwbDAtOTIuMWMwLTEyLjcgNS4xLTI0LjkgMTQuMS0zMy45bDUxLjktNTEuOWM5LTkgMjEuMi0xNC4xIDMzLjktMTQuMWwyOC4xIDB6TTAgNDE2bDAtNjQgMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwxMjggMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDEyOCAwIDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHpcIl1cbn07XG5jb25zdCBmYUhhbmRzSG9sZGluZ0NpcmNsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kcy1ob2xkaW5nLWNpcmNsZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRmYlwiLCBcIk0zMjAgMGExMjggMTI4IDAgMSAxIDAgMjU2QTEyOCAxMjggMCAxIDEgMzIwIDB6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDAgMCA4MCAwIDQwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xYzEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOGwtMTUuMi0xNS4yLTMyLTMyYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDMyIDMyIDE1LjIgMTUuMmMwIDAgMCAwIDAgMGwyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMmwwIDc4LjljMCAyNi41LTIxLjUgNDgtNDggNDhsLTY2LjcgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMjguMSAzOTMuNEMxMC4xIDM3NS40IDAgMzUxIDAgMzI1LjVMMCAyMjRsMC02NCAwLTU2QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDU2IDAgNjQgMCAxMDEuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNDAwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC03OC45YzAtMjkuNyAxMS44LTU4LjIgMzIuOC03OS4ybDI1LjMtMjUuM2MwIDAgMCAwIDAgMGwxNS4yLTE1LjIgMzItMzJjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMzIgMzItMTUuMiAxNS4yYy0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOGM5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM2wwLTQwLjIgMC04MCAwLTQwYzAtMjIuMSAxNy45LTQwIDQwLTQwelwiXVxufTtcbmNvbnN0IGZhQnVnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1ZycsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjE4OFwiLCBcIk0yNTYgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMy42YzAgMTUuNy0xMi43IDI4LjQtMjguNCAyOC40bC0xMzUuMSAwYy0xNS43IDAtMjguNC0xMi43LTI4LjQtMjguNGwwLTMuNmMwLTUzIDQzLTk2IDk2LTk2ek00MS40IDEwNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDY0IDY0Yy43IC43IDEuMyAxLjQgMS45IDIuMWMxNC4yLTcuMyAzMC40LTExLjQgNDcuNS0xMS40bDExMiAwYzE3LjEgMCAzMy4yIDQuMSA0Ny41IDExLjRjLjYtLjcgMS4yLTEuNCAxLjktMi4xbDY0LTY0YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0Yy0uNyAuNy0xLjQgMS4zLTIuMSAxLjljNi4yIDEyIDEwLjEgMjUuMyAxMS4xIDM5LjVsNjQuMyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYzAgMjQuNi01LjUgNDcuOC0xNS40IDY4LjZjMi4yIDEuMyA0LjIgMi45IDYgNC44bDY0IDY0YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC02My4xLTYzLjFjLTI0LjUgMjEuOC01NS44IDM2LjItOTAuMyAzOS42TDI3MiAyNDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAyMzkuMmMtMzQuNS0zLjQtNjUuOC0xNy44LTkwLjMtMzkuNkw4Ni42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w2NC02NGMxLjktMS45IDMuOS0zLjQgNi00LjhDMTAxLjUgMzY3LjggOTYgMzQ0LjYgOTYgMzIwbC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0LjMgMGMxLjEtMTQuMSA1LTI3LjUgMTEuMS0zOS41Yy0uNy0uNi0xLjQtMS4yLTIuMS0xLjlsLTY0LTY0Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3pcIl1cbn07XG5jb25zdCBmYUNyZWRpdENhcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY3JlZGl0LWNhcmQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxNzksIDYyMDgzLCBcImNyZWRpdC1jYXJkLWFsdFwiXSwgXCJmMDlkXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZsMCAzMiA1NzYgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek01NzYgMjI0TDAgMjI0IDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyek0xMTIgMzUybDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTY0IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTExMiAxNmMwLTguOCA3LjItMTYgMTYtMTZsMTI4IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFDcmVkaXRDYXJkQWx0ID0gZmFDcmVkaXRDYXJkO1xuY29uc3QgZmFDYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NjY0LCBcImF1dG9tb2JpbGVcIl0sIFwiZjFiOVwiLCBcIk0xMzUuMiAxMTcuNEwxMDkuMSAxOTJsMjkzLjggMC0yNi4xLTc0LjZDMzcyLjMgMTA0LjYgMzYwLjIgOTYgMzQ2LjYgOTZMMTY1LjQgOTZjLTEzLjYgMC0yNS43IDguNi0zMC4yIDIxLjR6TTM5LjYgMTk2LjhMNzQuOCA5Ni4zQzg4LjMgNTcuOCAxMjQuNiAzMiAxNjUuNCAzMmwxODEuMiAwYzQwLjggMCA3Ny4xIDI1LjggOTAuNiA2NC4zbDM1LjIgMTAwLjVjMjMuMiA5LjYgMzkuNiAzMi41IDM5LjYgNTkuMmwwIDE0NCAwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4TDk2IDQwMGwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4TDAgMjU2YzAtMjYuNyAxNi40LTQ5LjYgMzkuNi01OS4yek0xMjggMjg4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI4OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFBdXRvbW9iaWxlID0gZmFDYXI7XG5jb25zdCBmYUhhbmRIb2xkaW5nSGFuZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWhvbGRpbmctaGFuZCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRmN1wiLCBcIk03LjggMjA3LjdjLTEzLjEtMTcuOC05LjMtNDIuOCA4LjUtNTUuOUwxNDIuOSA1OC41QzE2Ni4yIDQxLjMgMTk0LjUgMzIgMjIzLjUgMzJMMzg0IDMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTM2LjggMC00NC45IDM2Yy0yMi43IDE4LjItNTAuOSAyOC04MCAyOEwzMDQgMjI0bC0xNiAwLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xMjAuNiAwTDYzLjcgMjE2LjJjLTE3LjggMTMuMS00Mi44IDkuMy01NS45LTguNXpNMzgyLjQgMTYwYzAgMCAwIDAgMCAwbC45IDBjLS4zIDAtLjYgMC0uOSAwek01NjguMiAzMDQuM2MxMy4xIDE3LjggOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDUzLjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41TDE5MiA0ODAgMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM2LjggMCA0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4bDc4LjMgMCAxNiAwIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDAtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjAuNiAwIDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzNTJjMCAwIDAgMCAwIDBsLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdXG59O1xuY29uc3QgZmFCb29rT3BlblJlYWRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rLW9wZW4tcmVhZGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJib29rLXJlYWRlclwiXSwgXCJmNWRhXCIsIFwiTTE2MCA5NmE5NiA5NiAwIDEgMSAxOTIgMEE5NiA5NiAwIDEgMSAxNjAgOTZ6bTgwIDE1MmwwIDI2NC00OC40LTI0LjJjLTIwLjktMTAuNC00My41LTE3LTY2LjgtMTkuM2wtOTYtOS42QzEyLjUgNDU3LjIgMCA0NDMuNSAwIDQyN0wwIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMC4zIDBjNjMuNiAwIDEyNS42IDE5LjYgMTc3LjcgNTZ6bTMyIDI2NGwwLTI2NGM1Mi4xLTM2LjQgMTE0LjEtNTYgMTc3LjctNTZsMzAuMyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjAzYzAgMTYuNC0xMi41IDMwLjItMjguOCAzMS44bC05NiA5LjZjLTIzLjIgMi4zLTQ1LjkgOC45LTY2LjggMTkuM0wyNzIgNTEyelwiXVxufTtcbmNvbnN0IGZhQm9va1JlYWRlciA9IGZhQm9va09wZW5SZWFkZXI7XG5jb25zdCBmYU1vdW50YWluU3VuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21vdW50YWluLXN1bicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUyZlwiLCBcIk01NjAgMTYwQTgwIDgwIDAgMSAwIDU2MCAwYTgwIDgwIDAgMSAwIDAgMTYwek01NS45IDUxMmwzMjUuMiAwIDc1IDAgMTIyLjggMGMzMy44IDAgNjEuMS0yNy40IDYxLjEtNjEuMWMwLTExLjItMy4xLTIyLjItOC45LTMxLjhsLTEzMi0yMTYuM0M0OTUgMTk2LjEgNDg3LjggMTkyIDQ4MCAxOTJzLTE1IDQuMS0xOS4xIDEwLjdsLTQ4LjIgNzlMMjg2LjggODFjLTYuNi0xMC42LTE4LjMtMTctMzAuOC0xN3MtMjQuMSA2LjQtMzAuOCAxN0w4LjYgNDI2LjRDMyA0MzUuMyAwIDQ0NS42IDAgNDU2LjFDMCA0ODcgMjUgNTEyIDU1LjkgNTEyelwiXVxufTtcbmNvbnN0IGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93cy1sZWZ0LXJpZ2h0LXRvLWxpbmUnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU0YmFcIiwgXCJNMzIgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NHptMjE0LjYgNzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0wyMDUuMyAyMjRsMjI5LjUgMC00MS40LTQxLjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MzQuNyAyODhsLTIyOS41IDAgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDB6TTY0MCA5NmwwIDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXVxufTtcbmNvbnN0IGZhRGljZUQyMCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaWNlLWQyMCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjZjZlwiLCBcIk00OC43IDEyNS44bDUzLjIgMzEuOWM3LjggNC43IDE3LjggMiAyMi4yLTUuOUwyMDEuNiAxMi4xYzMtNS40LS45LTEyLjEtNy4xLTEyLjFjLTEuNiAwLTMuMiAuNS00LjYgMS40TDQ3LjkgOTguOGMtOS42IDYuNi05LjIgMjAuOSAuOCAyNi45ek0xNiAxNzEuN2wwIDEyMy41YzAgOCAxMC40IDExIDE0LjcgNC40bDYwLTkyYzUtNy42IDIuNi0xNy44LTUuMi0yMi41TDQwLjIgMTU4QzI5LjYgMTUxLjYgMTYgMTU5LjMgMTYgMTcxLjd6TTMxMC40IDEyLjFsNzcuNiAxMzkuNmM0LjQgNy45IDE0LjUgMTAuNiAyMi4yIDUuOWw1My4yLTMxLjljMTAtNiAxMC40LTIwLjMgLjgtMjYuOUwzMjIuMSAxLjRjLTEuNC0uOS0zLTEuNC00LjYtMS40Yy02LjIgMC0xMC4xIDYuNy03LjEgMTIuMXpNNDk2IDE3MS43YzAtMTIuNC0xMy42LTIwLjEtMjQuMi0xMy43bC00NS4zIDI3LjJjLTcuOCA0LjctMTAuMSAxNC45LTUuMiAyMi41bDYwIDkyYzQuMyA2LjcgMTQuNyAzLjYgMTQuNy00LjRsMC0xMjMuNXptLTQ5LjMgMjQ2TDI4Ni4xIDQzNi42Yy04LjEgLjktMTQuMSA3LjgtMTQuMSAxNS45bDAgNTIuOGMwIDMuNyAzIDYuOCA2LjggNi44Yy44IDAgMS42LS4xIDIuNC0uNGwxNzIuNy02NGM2LjEtMi4yIDEwLjEtOCAxMC4xLTE0LjVjMC05LjMtOC4xLTE2LjUtMTcuMy0xNS40ek0yMzMuMiA1MTJjMy43IDAgNi44LTMgNi44LTYuOGwwLTUyLjZjMC04LjEtNi4xLTE0LjktMTQuMS0xNS45bC0xNjAuNi0xOWMtOS4yLTEuMS0xNy4zIDYuMS0xNy4zIDE1LjRjMCA2LjUgNCAxMi4zIDEwLjEgMTQuNWwxNzIuNyA2NGMuOCAuMyAxLjYgLjQgMi40IC40ek00MS43IDM4Mi45bDE3MC45IDIwLjJjNy44IC45IDEzLjQtNy41IDkuNS0xNC4zbC04NS43LTE1MGMtNS45LTEwLjQtMjAuNy0xMC44LTI3LjMtLjhMMzAuMiAzNTguMmMtNi41IDkuOS0uMyAyMy4zIDExLjUgMjQuN3ptNDM5LjYtMjQuOEw0MDIuOSAyMzguMWMtNi41LTEwLTIxLjQtOS42LTI3LjMgLjhMMjkwLjIgMzg4LjVjLTMuOSA2LjggMS42IDE1LjIgOS41IDE0LjNsMTcwLjEtMjBjMTEuOC0xLjQgMTgtMTQuNyAxMS41LTI0LjZ6bS0yMTYuOSAxMWw3OC40LTEzNy4yYzYuMS0xMC43LTEuNi0yMy45LTEzLjktMjMuOWwtMTQ1LjcgMGMtMTIuMyAwLTIwIDEzLjMtMTMuOSAyMy45bDc4LjQgMTM3LjJjMy43IDYuNCAxMyA2LjQgMTYuNyAwek0xNzQuNCAxNzZsMTYzLjIgMGMxMi4yIDAgMTkuOS0xMy4xIDE0LTIzLjhsLTgwLTE0NGMtMi44LTUuMS04LjItOC4yLTE0LTguMmwtMy4yIDBjLTUuOCAwLTExLjIgMy4yLTE0IDguMmwtODAgMTQ0Yy01LjkgMTAuNyAxLjggMjMuOCAxNCAyMy44elwiXVxufTtcbmNvbnN0IGZhVHJ1Y2tEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RydWNrLWRyb3BsZXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1OGNcIiwgXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzY4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OCA1MC43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNTg5LjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNsMCAxOC43IDAgMzIgMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwtMTI4IDBjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsLTE2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgNDh6TTQxNiAyNTZsMTI4IDAgMC0xOC43TDQ2Ni43IDE2MCA0MTYgMTYwbDAgOTZ6TTE2MCA0NjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0zNjgtNDhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMjA4IDI3MmMzOS44IDAgNzItMjkuNiA3Mi02NmMwLTI3LTM5LjQtODIuOS01OS45LTExMC4zYy02LjEtOC4yLTE4LjEtOC4yLTI0LjIgMEMxNzUuNCAxMjMgMTM2IDE3OSAxMzYgMjA2YzAgMzYuNSAzMi4yIDY2IDcyIDY2elwiXVxufTtcbmNvbnN0IGZhRmlsZUNpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNWExXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0w2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTM4NCA2NGwtMTI4IDBMMjU2IDAgMzg0IDEyOHptNDggOTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em01OS4zIDEwNy4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBMNDMyIDM0NS40bC0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMNDA5LjQgMzY4bC0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEw0MzIgMzkwLjZsMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw0NTQuNiAzNjhsMzYuNy0zNi43elwiXVxufTtcbmNvbnN0IGZhVGVtcGVyYXR1cmVBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbXBlcmF0dXJlLWFycm93LXVwJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJ0ZW1wZXJhdHVyZS11cFwiXSwgXCJlMDQwXCIsIFwiTTEyOCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDE2NC41YzAgMTcuMyA3LjEgMzEuOSAxNS4zIDQyLjVDMjQ5LjggMzMyLjYgMjU2IDM0OS41IDI1NiAzNjhjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0xOC41IDYuMi0zNS40IDE2LjctNDguOWM4LjItMTAuNiAxNS4zLTI1LjIgMTUuMy00Mi41TDEyOCAxMTJ6TTE3NiAwQzExNC4xIDAgNjQgNTAuMSA2NCAxMTJsMCAxNjQuNGMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEM0My4yIDMwNC4yIDMyIDMzNC44IDMyIDM2OGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0YzAtMzMuMi0xMS4yLTYzLjgtMzAuMS04OC4xYy0uOS0xLjItMS41LTIuMi0xLjctMi44Yy0uMS0uMy0uMi0uNS0uMi0uNkwyODggMTEyQzI4OCA1MC4xIDIzNy45IDAgMTc2IDB6bTAgNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM0wxOTIgMTEyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMjEwLjdjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OHpNNDgwIDE2MGwzMiAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhsMzIgMCAwIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjg4elwiXVxufTtcbmNvbnN0IGZhVGVtcGVyYXR1cmVVcCA9IGZhVGVtcGVyYXR1cmVBcnJvd1VwO1xuY29uc3QgZmFNZWRhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtZWRhbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzk0MV0sIFwiZjVhMlwiLCBcIk00LjEgMzguMkMxLjQgMzQuMiAwIDI5LjQgMCAyNC42QzAgMTEgMTEgMCAyNC42IDBMMTMzLjkgMGMxMS4yIDAgMjEuNyA1LjkgMjcuNCAxNS41bDY4LjUgMTE0LjFjLTQ4LjIgNi4xLTkxLjMgMjguNi0xMjMuNCA2MS45TDQuMSAzOC4yem01MDMuNyAwTDQwNS42IDE5MS41Yy0zMi4xLTMzLjMtNzUuMi01NS44LTEyMy40LTYxLjlMMzUwLjcgMTUuNUMzNTYuNSA1LjkgMzY2LjkgMCAzNzguMSAwTDQ4Ny40IDBDNTAxIDAgNTEyIDExIDUxMiAyNC42YzAgNC44LTEuNCA5LjYtNC4xIDEzLjZ6TTgwIDMzNmExNzYgMTc2IDAgMSAxIDM1MiAwQTE3NiAxNzYgMCAxIDEgODAgMzM2em0xODQuNC05NC45Yy0zLjQtNy0xMy4zLTctMTYuOCAwbC0yMi40IDQ1LjRjLTEuNCAyLjgtNCA0LjctNyA1LjFMMTY4IDI5OC45Yy03LjcgMS4xLTEwLjcgMTAuNS01LjIgMTZsMzYuMyAzNS40YzIuMiAyLjIgMy4yIDUuMiAyLjcgOC4zbC04LjYgNDkuOWMtMS4zIDcuNiA2LjcgMTMuNSAxMy42IDkuOWw0NC44LTIzLjZjMi43LTEuNCA2LTEuNCA4LjcgMGw0NC44IDIzLjZjNi45IDMuNiAxNC45LTIuMiAxMy42LTkuOWwtOC42LTQ5LjljLS41LTMgLjUtNi4xIDIuNy04LjNsMzYuMy0zNS40YzUuNi01LjQgMi41LTE0LjgtNS4yLTE2bC01MC4xLTcuM2MtMy0uNC01LjctMi40LTctNS4xbC0yMi40LTQ1LjR6XCJdXG59O1xuY29uc3QgZmFCZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmVkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzE2XSwgXCJmMjM2XCIsIFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2IDIyNCAwIDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0yMjQgMC0zMiAwTDY0IDQxNmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJ6bTE0NCA5NmE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpcIl1cbn07XG5jb25zdCBmYVNxdWFyZUggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3F1YXJlLWgnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImgtc3F1YXJlXCJdLCBcImYwZmRcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzM2IDE1MmwwIDEwNCAwIDEwNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTgwLTEyOCAwIDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yMDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDgwIDEyOCAwIDAtODBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl1cbn07XG5jb25zdCBmYUhTcXVhcmUgPSBmYVNxdWFyZUg7XG5jb25zdCBmYVBvZGNhc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncG9kY2FzdCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjJjZVwiLCBcIk0zMTkuNCAzNzJjNDguNS0zMS4zIDgwLjYtODUuOSA4MC42LTE0OGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NlM0OCAxMjYuOCA0OCAyMjRjMCA2Mi4xIDMyLjEgMTE2LjYgODAuNiAxNDhjMS4yIDE3LjMgNCAzOCA3LjIgNTcuMWwuMiAxQzU2IDM5NS44IDAgMzE2LjUgMCAyMjRDMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0YzAgOTIuNS01NiAxNzEuOS0xMzYgMjA2LjFsLjItMS4xYzMuMS0xOS4yIDYtMzkuOCA3LjItNTd6bS0yLjMtMzguMWMtMS42LTUuNy0zLjktMTEuMS03LTE2LjJjLTUuOC05LjctMTMuNS0xNy0yMS45LTIyLjRjMTkuNS0xNy42IDMxLjgtNDMgMzEuOC03MS4zYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMjguMyAxMi4zIDUzLjggMzEuOCA3MS4zYy04LjQgNS40LTE2LjEgMTIuNy0yMS45IDIyLjRjLTMuMSA1LjEtNS40IDEwLjUtNyAxNi4yQzk5LjggMzA3LjUgODAgMjY4IDgwIDIyNGMwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NHMxNDQgNjQuNSAxNDQgMTQ0YzAgNDQtMTkuOCA4My41LTUwLjkgMTA5Ljl6TTIyNCAzMTJjMzIuOSAwIDY0IDguNiA2NCA0My44YzAgMzMtMTIuOSAxMDQuMS0yMC42IDEzMi45Yy01LjEgMTktMjQuNSAyMy40LTQzLjQgMjMuNHMtMzguMi00LjQtNDMuNC0yMy40Yy03LjgtMjguNS0yMC42LTk5LjctMjAuNi0xMzIuOGMwLTM1LjEgMzEuMS00My44IDY0LTQzLjh6bTAtMTQ0YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyelwiXVxufTtcbmNvbnN0IGZhVGVtcGVyYXR1cmVGdWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RlbXBlcmF0dXJlLWZ1bGwnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcInRlbXBlcmF0dXJlLTRcIiwgXCJ0aGVybW9tZXRlci00XCIsIFwidGhlcm1vbWV0ZXItZnVsbFwiXSwgXCJmMmM3XCIsIFwiTTE2MCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNjQuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41Qzg2LjIgMzMyLjYgODAgMzQ5LjUgODAgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNUwyMDggMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek00OCAxMTJDNDggNTAuMiA5OC4xIDAgMTYwIDBzMTEyIDUwLjEgMTEyIDExMmwwIDE2NC40YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTMzLjIgMTEuMi02My44IDMwLjEtODguMWMuOS0xLjIgMS41LTIuMiAxLjctMi44Yy4xLS4zIC4yLS41IC4yLS42TDQ4IDExMnpNMjA4IDM2OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNMMTQ0IDExMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMjEwLjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zelwiXVxufTtcbmNvbnN0IGZhVGVtcGVyYXR1cmU0ID0gZmFUZW1wZXJhdHVyZUZ1bGw7XG5jb25zdCBmYVRoZXJtb21ldGVyNCA9IGZhVGVtcGVyYXR1cmVGdWxsO1xuY29uc3QgZmFUaGVybW9tZXRlckZ1bGwgPSBmYVRlbXBlcmF0dXJlRnVsbDtcbmNvbnN0IGZhQmVsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiZWxsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4Mjc2LCA2MTYwMl0sIFwiZjBmM1wiLCBcIk0yMjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxOS4yQzExOSA2NiA2NCAxMzAuNiA2NCAyMDhsMCAxOC44YzAgNDctMTcuMyA5Mi40LTQ4LjUgMTI3LjZsLTcuNCA4LjNjLTguNCA5LjQtMTAuNCAyMi45LTUuMyAzNC40UzE5LjQgNDE2IDMyIDQxNmwzODQgMGMxMi42IDAgMjQtNy40IDI5LjItMTguOXMzLjEtMjUtNS4zLTM0LjRsLTcuNC04LjNDNDAxLjMgMzE5LjIgMzg0IDI3My45IDM4NCAyMjYuOGwwLTE4LjhjMC03Ny40LTU1LTE0Mi0xMjgtMTU2LjhMMjU2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyem00NS4zIDQ5My4zYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNsLTY0IDAtNjQgMGMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM3MyOC4zIDE4LjcgNDUuMyAxOC43czMzLjMtNi43IDQ1LjMtMTguN3pcIl1cbn07XG5jb25zdCBmYVN1cGVyc2NyaXB0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N1cGVyc2NyaXB0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMTJiXCIsIFwiTTQ4MCAzMmMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjlDMzkzIDczLjUgNDA0LjMgODAgNDE2IDgwbDAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTI4ek0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMTUuMyAwIDg5LjYgMTI4TDQ3LjMgMzg0IDMyIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzEwLjQgMCAyMC4yLTUuMSAyNi4yLTEzLjZMMTc2IDMxMS44bDg1LjggMTIyLjZjNiA4LjYgMTUuOCAxMy42IDI2LjIgMTMuNmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNS4zIDBMMjE1LjEgMjU2bDg5LjYtMTI4IDE1LjMgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTAuNCAwLTIwLjIgNS4xLTI2LjIgMTMuNkwxNzYgMjAwLjIgOTAuMiA3Ny42Qzg0LjIgNjkuMSA3NC40IDY0IDY0IDY0TDMyIDY0elwiXVxufTtcbmNvbnN0IGZhUGx1Z0NpcmNsZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLXhtYXJrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTYwXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJsMCA5NiA2NCAwIDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2IDY0IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgMzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhsMCA2Ny4yYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02Ny4yYzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDE2MHpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdMNDU0LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQzMiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQwOS40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDMyIDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdXG59O1xuY29uc3QgZmFTdGFyT2ZMaWZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0YXItb2YtbGlmZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjYyMVwiLCBcIk0yMDggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE0MC45IDEyMi03MC40YzE1LjMtOC44IDM0LjktMy42IDQzLjcgMTEuN2wxNiAyNy43YzguOCAxNS4zIDMuNiAzNC45LTExLjcgNDMuN0wzNTIgMjU2bDEyMiA3MC40YzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdsLTE2IDI3LjdjLTguOCAxNS4zLTI4LjQgMjAuNi00My43IDExLjdMMzA0IDMzOS4xIDMwNCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTQwLjlMODYgNDA5LjZjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN2wtMTYtMjcuN2MtOC44LTE1LjMtMy42LTM0LjkgMTEuNy00My43TDE2MCAyNTYgMzggMTg1LjZjLTE1LjMtOC44LTIwLjUtMjguNC0xMS43LTQzLjdsMTYtMjcuN0M1MS4xIDk4LjggNzAuNyA5My42IDg2IDEwMi40bDEyMiA3MC40TDIwOCAzMnpcIl1cbn07XG5jb25zdCBmYVBob25lU2xhc2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGhvbmUtc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYzZGRcIiwgXCJNMjI4LjkgMjQuNmMtNy43LTE4LjYtMjgtMjguNS00Ny40LTIzLjJsLTg4IDI0Qzc2LjEgMzAuMiA2NCA0NiA2NCA2NGMwIDEwNy40IDM3LjggMjA2IDEwMC44IDI4My4xTDkuMiA0NjkuMWMtMTAuNCA4LjItMTIuMyAyMy4zLTQuMSAzMy43czIzLjMgMTIuMyAzMy43IDQuMWw1OTItNDY0YzEwLjQtOC4yIDEyLjMtMjMuMyA0LjEtMzMuN3MtMjMuMy0xMi4zLTMzLjctNC4xTDI1MyAyNzhjLTE3LjgtMjEuNS0zMi45LTQ1LjItNDUtNzAuN0wyNTcuMyAxNjdjMTMuNy0xMS4yIDE4LjQtMzAgMTEuNi00Ni4zbC00MC05NnptOTYuOCAzMTlsLTkxLjMgNzJDMzEwLjcgNDc2IDQwNy4xIDUxMiA1MTIgNTEyYzE4IDAgMzMuOC0xMi4xIDM4LjYtMjkuNWwyNC04OGM1LjMtMTkuNC00LjYtMzkuNy0yMy4yLTQ3LjRsLTk2LTQwYy0xNi4zLTYuOC0zNS4yLTIuMS00Ni4zIDExLjZMMzY4LjcgMzY4Yy0xNS03LjEtMjkuMy0xNS4yLTQzLTI0LjN6XCJdXG59O1xuY29uc3QgZmFQYWludFJvbGxlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwYWludC1yb2xsZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY1YWFcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCAxOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTE2MCAzNTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MGwxNDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDAtOTAuNWMzNy4zIDEzLjIgNjQgNDguNyA2NCA5MC41bDAgMzJjMCA1My00MyA5Ni05NiA5NmwtMTQ0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOHpcIl1cbn07XG5jb25zdCBmYUhhbmRzaGFrZUFuZ2xlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRzaGFrZS1hbmdsZScsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiaGFuZHMtaGVscGluZ1wiXSwgXCJmNGM0XCIsIFwiTTU0NCAyNDhsMCAzLjMgNjkuNy02OS43YzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDUzNS42IDI0LjRjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwTDQxNi4zIDY0LjVjLTIuNy0uMy01LjUtLjUtOC4zLS41TDI5NiA2NGMtMzcuMSAwLTY3LjYgMjgtNzEuNiA2NGwtLjQgMCAwIDEyMGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtNzJjMCAwIDAtLjEgMC0uMWwwLTE1LjkgMTYgMCAxMzYgMGMwIDAgMCAwIC4xIDBsNy45IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCA4ek0zMzYgMTkybDAgNTZjMCAzOS44LTMyLjIgNzItNzIgNzJzLTcyLTMyLjItNzItNzJsMC0xMTguNmMtMzUuOSA2LjItNjUuOCAzMi4zLTc2IDY4LjJMOTkuNSAyNTUuMiAyNi4zIDMyOC40Yy0yMS45IDIxLjktMjEuOSA1Ny4zIDAgNzkuMmw3OC4xIDc4LjFjMjEuOSAyMS45IDU3LjMgMjEuOSA3OS4yIDBsMzcuNy0zNy43Yy45IDAgMS44IC4xIDIuNyAuMWwxNjAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNmwyLjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGMwLTEyLjgtNS0yNC40LTEzLjItMzNjMjUuNy01IDQ1LjEtMjcuNiA0NS4yLTU0LjhsMC0uNGMtLjEtMzAuOC0yNS4xLTU1LjgtNTYtNTUuOGMwIDAgMCAwIDAgMGwtMTIwIDB6XCJdXG59O1xuY29uc3QgZmFIYW5kc0hlbHBpbmcgPSBmYUhhbmRzaGFrZUFuZ2xlO1xuY29uc3QgZmFMb2NhdGlvbkRvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsb2NhdGlvbi1kb3QnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcIm1hcC1tYXJrZXItYWx0XCJdLCBcImYzYzVcIiwgXCJNMjE1LjcgNDk5LjJDMjY3IDQzNSAzODQgMjc5LjQgMzg0IDE5MkMzODQgODYgMjk4IDAgMTkyIDBTMCA4NiAwIDE5MmMwIDg3LjQgMTE3IDI0MyAxNjguMyAzMDcuMmMxMi4zIDE1LjMgMzUuMSAxNS4zIDQ3LjQgMHpNMTkyIDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpcIl1cbn07XG5jb25zdCBmYU1hcE1hcmtlckFsdCA9IGZhTG9jYXRpb25Eb3Q7XG5jb25zdCBmYUZpbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZScsXG4gIGljb246IFszODQsIDUxMiwgWzEyODE5NiwgMTI4NDU5LCA2MTQ2Ml0sIFwiZjE1YlwiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMjQgMGwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMCAwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTM4NCA2NGwtMTI4IDBMMjU2IDAgMzg0IDEyOHpcIl1cbn07XG5jb25zdCBmYUdyZWF0ZXJUaGFuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyZWF0ZXItdGhhbicsXG4gIGljb246IFszODQsIDUxMiwgWzYyNzY5XSwgXCIzZVwiLCBcIk0zLjQgODEuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOUwyODAuNSAyNTYgMTcuNyAzODcuNEMxLjkgMzk1LjMtNC41IDQxNC41IDMuNCA0MzAuM3MyNy4xIDIyLjIgNDIuOSAxNC4zbDMyMC0xNjBjMTAuOC01LjQgMTcuNy0xNi41IDE3LjctMjguNnMtNi44LTIzLjItMTcuNy0yOC42bC0zMjAtMTYwYy0xNS44LTcuOS0zNS0xLjUtNDIuOSAxNC4zelwiXVxufTtcbmNvbnN0IGZhUGVyc29uU3dpbW1pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXN3aW1taW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTQ2LCBcInN3aW1tZXJcIl0sIFwiZjVjNFwiLCBcIk0zMDkuNSAxNzguNEw0NDcuOSAyOTcuMWMtMS42IC45LTMuMiAyLTQuOCAzYy0xOCAxMi40LTQwLjEgMjAuMy01OS4yIDIwLjNjLTE5LjYgMC00MC44LTcuNy01OS4yLTIwLjNjLTIyLjEtMTUuNS01MS42LTE1LjUtNzMuNyAwYy0xNy4xIDExLjgtMzggMjAuMy01OS4yIDIwLjNjLTEwLjEgMC0yMS4xLTIuMi0zMS45LTYuMkMxNjMuMSAxOTMuMiAyNjIuMiA5NiAzODQgOTZsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMjYuOSAwLTUyLjMgNi42LTc0LjUgMTguNHpNMTYwIDE2MEE2NCA2NCAwIDEgMSAzMiAxNjBhNjQgNjQgMCAxIDEgMTI4IDB6TTMwNi41IDMyNS45QzMyOSAzNDEuNCAzNTYuNSAzNTIgMzg0IDM1MmMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWMwIDAgMCAwIDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDQwNS43IDQxNyA0MTYgMzg0IDQxNmMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNCAyNy4zLTEwLjEgMzkuMi0xLjdjMCAwIDAgMCAwIDBDMTM2LjcgMzQxLjIgMTY1LjEgMzUyIDE5MiAzNTJjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdXG59O1xuY29uc3QgZmFTd2ltbWVyID0gZmFQZXJzb25Td2ltbWluZztcbmNvbnN0IGZhQXJyb3dEb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LWRvd24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFs4NTk1XSwgXCJmMDYzXCIsIFwiTTE2OS40IDQ3MC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDM3MC44IDIyNCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMwNi43TDU0LjYgMjY1LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjB6XCJdXG59O1xuY29uc3QgZmFEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Ryb3BsZXQnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjcsIFwidGludFwiXSwgXCJmMDQzXCIsIFwiTTE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwQzAgMjI4LjggMTMwLjIgNTcuNyAxNjYuNiAxMS43QzE3Mi42IDQuMiAxODEuNSAwIDE5MS4xIDBsMS44IDBjOS42IDAgMTguNSA0LjIgMjQuNSAxMS43QzI1My44IDU3LjcgMzg0IDIyOC44IDM4NCAzMjBjMCAxMDYtODYgMTkyLTE5MiAxOTJ6TTk2IDMzNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtNDQuMiAwLTgwLTM1LjgtODAtODB6XCJdXG59O1xuY29uc3QgZmFUaW50ID0gZmFEcm9wbGV0O1xuY29uc3QgZmFFcmFzZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXJhc2VyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMTJkXCIsIFwiTTI5MC43IDU3LjRMNTcuNCAyOTAuN2MtMjUgMjUtMjUgNjUuNSAwIDkwLjVsODAgODBjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0wyODggNDgwbDkuNCAwTDUxMiA0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyNC4xIDBMNTE4LjYgMjg1LjNjMjUtMjUgMjUtNjUuNSAwLTkwLjVMMzgxLjMgNTcuNGMtMjUtMjUtNjUuNS0yNS05MC41IDB6TTI5Ny40IDQxNmwtOS40IDAtMTA1LjQgMC04MC04MEwyMjcuMyAyMTEuMyAzNjQuNyAzNDguNyAyOTcuNCA0MTZ6XCJdXG59O1xuY29uc3QgZmFFYXJ0aEFtZXJpY2FzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VhcnRoLWFtZXJpY2FzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzU4LCBcImVhcnRoXCIsIFwiZWFydGgtYW1lcmljYVwiLCBcImdsb2JlLWFtZXJpY2FzXCJdLCBcImY1N2RcIiwgXCJNNTcuNyAxOTNsOS40IDE2LjRjOC4zIDE0LjUgMjEuOSAyNS4yIDM4IDI5LjhMMTYzIDI1NS43YzE3LjIgNC45IDI5IDIwLjYgMjkgMzguNWwwIDM5LjljMCAxMSA2LjIgMjEgMTYgMjUuOXMxNiAxNC45IDE2IDI1LjlsMCAzOWMwIDE1LjYgMTQuOSAyNi45IDI5LjkgMjIuNmMxNi4xLTQuNiAyOC42LTE3LjUgMzIuNy0zMy44bDIuOC0xMS4yYzQuMi0xNi45IDE1LjItMzEuNCAzMC4zLTQwbDguMS00LjZjMTUtOC41IDI0LjItMjQuNSAyNC4yLTQxLjdsMC04LjNjMC0xMi43LTUuMS0yNC45LTE0LjEtMzMuOWwtMy45LTMuOWMtOS05LTIxLjItMTQuMS0zMy45LTE0LjFMMjU3IDI1NmMtMTEuMSAwLTIyLjEtMi45LTMxLjgtOC40bC0zNC41LTE5LjdjLTQuMy0yLjUtNy42LTYuNS05LjItMTEuMmMtMy4yLTkuNiAxLjEtMjAgMTAuMi0yNC41bDUuOS0zYzYuNi0zLjMgMTQuMy0zLjkgMjEuMy0xLjVsMjMuMiA3LjdjOC4yIDIuNyAxNy4yLS40IDIxLjktNy41YzQuNy03IDQuMi0xNi4zLTEuMi0yMi44bC0xMy42LTE2LjNjLTEwLTEyLTkuOS0yOS41IC4zLTQxLjNsMTUuNy0xOC4zYzguOC0xMC4zIDEwLjItMjUgMy41LTM2LjdsLTIuNC00LjJjLTMuNS0uMi02LjktLjMtMTAuNC0uM0MxNjMuMSA0OCA4NC40IDEwOC45IDU3LjcgMTkzek00NjQgMjU2YzAtMzYuOC05LjYtNzEuNC0yNi40LTEwMS41TDQxMiAxNjQuOGMtMTUuNyA2LjMtMjMuOCAyMy44LTE4LjUgMzkuOGwxNi45IDUwLjdjMy41IDEwLjQgMTIgMTguMyAyMi42IDIwLjlsMjkuMSA3LjNjMS4yLTkgMS44LTE4LjIgMS44LTI3LjV6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnpcIl1cbn07XG5jb25zdCBmYUVhcnRoID0gZmFFYXJ0aEFtZXJpY2FzO1xuY29uc3QgZmFFYXJ0aEFtZXJpY2EgPSBmYUVhcnRoQW1lcmljYXM7XG5jb25zdCBmYUdsb2JlQW1lcmljYXMgPSBmYUVhcnRoQW1lcmljYXM7XG5jb25zdCBmYVBlcnNvbkJ1cnN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1idXJzdCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTUzYlwiLCBcIk00ODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tOCAzODRsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjIzLjEgMjguNiA0Ny41YzkuMSAxNS4xIDI4LjggMjAgNDMuOSAxMC45czIwLTI4LjggMTAuOS00My45bC01OC4zLTk3Yy0xNy40LTI4LjktNDguNi00Ni42LTgyLjMtNDYuNmwtMjkuNyAwYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOUw0MDggMjU2LjkgNDA4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek0xOTAuOSAxOC4xQzE4OC40IDEyIDE4Mi42IDggMTc2IDhzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzRMNTUuNiA2OC45Yy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNzLTQuNiAxMi4yLTEuNCAxNy45bDM5LjUgNjkuMUwxMC45IDIwNi40Yy01LjQgMy43LTggMTAuMy02LjUgMTYuN3M2LjcgMTEuMiAxMy4xIDEyLjJsNzguNyAxMi4yTDkwLjYgMzI3Yy0uNSA2LjUgMy4xIDEyLjcgOSAxNS41czEyLjkgMS44IDE3LjgtMi42TDE3NiAyODYuMWw1OC42IDUzLjljNC44IDQuNCAxMS45IDUuNSAxNy44IDIuNnM5LjUtOSA5LTE1LjVsLTUuNi03OS40IDUwLjUtNy44IDI0LjMtNDAuNS01NS4yLTM4TDMxNSA5Mi4yYzMuMy01LjcgMi43LTEyLjgtMS40LTE3LjlzLTEwLjktNy4yLTE3LjItNS4zTDIyMC4zIDkyLjFsLTI5LjQtNzR6XCJdXG59O1xuY29uc3QgZmFEb3ZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RvdmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMzBdLCBcImY0YmFcIiwgXCJNMTYwLjggOTYuNWMxNCAxNyAzMSAzMC45IDQ5LjUgNDIuMmMyNS45IDE1LjggNTMuNyAyNS45IDc3LjcgMzEuNmwwLTMxLjVDMjY1LjggMTA4LjUgMjUwIDcxLjUgMjQ4LjYgMjhjLS40LTExLjMtNy41LTIxLjUtMTguNC0yNC40Yy03LjYtMi0xNS44LS4yLTIxIDUuOGMtMTMuMyAxNS40LTMyLjcgNDQuNi00OC40IDg3LjJ6TTMyMCAxNDRsMCAzMC42czAgMCAwIDBsMCAxLjNzMCAwIDAgMGwwIDMyLjFjLTYwLjgtNS4xLTE4NS00My44LTIxOS4zLTE1Ny4yQzk3LjQgNDAgODcuOSAzMiA3Ni42IDMyYy03LjkgMC0xNS4zIDMuOS0xOC44IDExQzQ2LjggNjUuOSAzMiAxMTIuMSAzMiAxNzZjMCAxMTYuOSA4MC4xIDE4MC41IDExOC40IDIwMi44TDExLjggNDE2LjZDNi43IDQxOCAyLjYgNDIxLjggLjkgNDI2LjhzLS44IDEwLjYgMi4zIDE0LjhDMjEuNyA0NjYuMiA3Ny4zIDUxMiAxNjAgNTEyYzMuNiAwIDcuMi0xLjIgMTAtMy41TDI0NS42IDQ0OGw3NC40IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC0xNjAgMjkuOS00NC45YzEuMy0yIDIuMS00LjQgMi4xLTYuOGMwLTYuOC01LjUtMTIuMy0xMi4zLTEyLjNMNDAwIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MHptODAtMTZhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyelwiXVxufTtcbmNvbnN0IGZhQmF0dGVyeUVtcHR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhdHRlcnktZW1wdHknLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImJhdHRlcnktMFwiXSwgXCJmMjQ0XCIsIFwiTTgwIDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTYwYzAgOC44IDcuMiAxNiAxNiAxNmwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNjBjMC04LjgtNy4yLTE2LTE2LTE2TDgwIDE2MHpNMCAxNzZjMC00NC4yIDM1LjgtODAgODAtODBsMzg0IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybDAgMTZjMCA0NC4yLTM1LjggODAtODAgODBMODAgNDE2Yy00NC4yIDAtODAtMzUuOC04MC04MEwwIDE3NnpcIl1cbn07XG5jb25zdCBmYUJhdHRlcnkwID0gZmFCYXR0ZXJ5RW1wdHk7XG5jb25zdCBmYVNvY2tzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NvY2tzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTEwXSwgXCJmNjk2XCIsIFwiTTE3NS4yIDQ3Ni42Yy05LjctMTgtMTUuMi0zOC43LTE1LjItNjAuNmMwLTQwLjMgMTktNzguMiA1MS4yLTEwMi40bDY0LTQ4YzguMS02IDEyLjgtMTUuNSAxMi44LTI1LjZsMC0xNDRMMTI4IDk2bDAgMTQ0YzAgMjAuMS05LjUgMzkuMS0yNS42IDUxLjJsLTY0IDQ4QzE0LjIgMzU3LjMgMCAzODUuOCAwIDQxNmMwIDUzIDQzIDk2IDk2IDk2YzIwLjggMCA0MS02LjcgNTcuNi0xOS4ybDIxLjYtMTYuMnpNMTI4IDY0bDE2MCAwIDAtMTZjMC0xNC41IDMuOS0yOC4yIDEwLjctMzkuOUMyOTEgMyAyODEuOSAwIDI3MiAwTDE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2ek0zMjAgOTZsMCAxNDRjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhDMjA2LjIgMzU3LjMgMTkyIDM4NS44IDE5MiA0MTZjMCA1MyA0MyA5NiA5NiA5NmMyMC44IDAgNDEtNi43IDU3LjYtMTkuMmwxMTUuMi04Ni40QzQ5MyAzODIuMiA1MTIgMzQ0LjMgNTEyIDMwNGwwLTIwOEwzMjAgOTZ6TTUxMiA2NGwwLTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDM2OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2IDE5MiAwelwiXVxufTtcbmNvbnN0IGZhSW5ib3ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaW5ib3gnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwMWNcIiwgXCJNMTIxIDMyQzkxLjYgMzIgNjYgNTIgNTguOSA4MC41TDEuOSAzMDguNEMuNiAzMTMuNSAwIDMxOC43IDAgMzIzLjlMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC05Mi4xYzAtNS4yLS42LTEwLjQtMS45LTE1LjVsLTU3LTIyNy45QzQ0NiA1MiA0MjAuNCAzMiAzOTEgMzJMMTIxIDMyem0wIDY0bDI3MCAwIDQ4IDE5Mi01MS4yIDBjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTE0LjMgMjguNmMtNS40IDEwLjgtMTYuNSAxNy43LTI4LjYgMTcuN2wtMTIwLjQgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN2wtMTQuMy0yOC42Yy01LjQtMTAuOC0xNi41LTE3LjctMjguNi0xNy43TDczIDI4OCAxMjEgOTZ6XCJdXG59O1xuY29uc3QgZmFTZWN0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NlY3Rpb24nLFxuICBpY29uOiBbMjU2LCA1MTIsIFtdLCBcImU0NDdcIiwgXCJNNjQuOSA5NkM2Ny4xIDg0LjQgNzMuNyA3Ni4yIDg2IDcwLjZjMTMuOC02LjIgMzQuOC04LjkgNjEuMi00LjVjOC44IDEuNCAzNi4xIDcuMSA0NC4xIDkuM2MxNyA0LjggMzQuNy01LjEgMzkuNS0yMi4ycy01LjEtMzQuNy0yMi4yLTM5LjVjLTExLjEtMy4xLTQxLTkuMi01MC45LTEwLjhDMTIzLTIuNyA4OC4zLS42IDU5LjcgMTIuM0MyOS45IDI1LjggNy41IDUwLjkgMS42IDg2LjVjLS4xIC41LS4yIDEuMS0uMiAxLjZjLTIuMiAxOS43IC4zIDM3LjkgOC4xIDU0LjFjNy43IDE2LjEgMTkuNCAyOCAzMiAzNi45Yy42IC41IDEuMyAuOSAyIDEuNEMyMi4zIDE5NC4yIDYuNSAyMTUuMSAxLjcgMjQzYy0uMSAuNi0uMiAxLjEtLjIgMS43Yy0yLjMgMTkuMyAuNCAzNy4xIDguNCA1M2M3LjkgMTUuNiAxOS44IDI3IDMyLjMgMzUuNWMyMi40IDE1LjIgNTEuOSAyNCA3NS40IDMxYzAgMCAwIDAgMCAwbDMuNyAxLjFjMjcuMiA4LjIgNDYuOSAxNC42IDU5LjQgMjMuOGM1LjUgNCA4LjIgNy42IDkuNSAxMC45YzEuMyAzLjIgMi42IDguNiAuOSAxOC4xYy0xLjcgMTAuMS03LjcgMTgtMjAuNyAyMy41Yy0xNCA2LTM1LjQgOC41LTYyIDQuNGMtMTIuOC0yLjEtMzUuMS05LjctNTQuMS0xNi4yYzAgMCAwIDAgMCAwYy00LjMtMS41LTguNS0yLjktMTIuMy00LjJDMjUuMyA0MjAgNy4yIDQyOS4xIDEuNiA0NDUuOHMzLjUgMzQuOSAyMC4zIDQwLjVjMi42IC44IDUuNyAxLjkgOS4yIDMuMWMxOC42IDYuMyA0OC41IDE2LjYgNjcuMyAxOS42YzAgMCAwIDAgMCAwbC4yIDBjMzQuNSA1LjQgNjguOCAzLjQgOTcuMi04LjdjMjkuNC0xMi42IDUyLjUtMzYuNSA1OC41LTcxLjVjMy4zLTE5LjMgMS45LTM3LjQtNS01My45Yy02LjMtMTUtMTYuNC0yNi40LTI3LjYtMzUuMmMxNi41LTEzLjkgMjguNS0zMy4yIDMyLjYtNTguMmMzLjItMTkuOCAxLjktMzguMy00LjgtNTUuMWMtNi43LTE2LjgtMTcuOC0yOS40LTMwLjItMzljLTIyLjgtMTcuNi01My42LTI3LjQtNzcuNy0zNWwtMS40LS41Yy0yNy40LTguNy00Ny44LTE1LjMtNjEuNS0yNWMtNi4xLTQuNC05LjUtOC41LTExLjQtMTIuNGMtMS44LTMuNy0zLjItOS4zLTIuMy0xOC41em03Ni43IDIwOC41bC0uNi0uMi0xLjQtLjRjLTI3LjQtOC4yLTQ3LjktMTQuNS02MS43LTIzLjhjLTYuMi00LjItOS4zLTcuOS0xMS0xMS4zYy0xLjUtMy0yLjktNy43LTIuMS0xNS43YzEuOS05LjcgNy45LTE3LjMgMjAuNS0yMi43YzE0LTYgMzUuNC04LjUgNjIuMS00LjNsMTYuNCAyLjZjNi4zIDIuOSAxMS43IDYgMTYuMiA5LjVjNS41IDQuMiA4LjQgOC4yIDEwIDEyLjJjMS42IDQgMi44IDEwLjQgMS4xIDIwLjljLTIuNCAxNC43LTEyLjggMjYuNC0zNy4xIDMxbC0xMi40IDIuM3pcIl1cbn07XG5jb25zdCBmYUdhdWdlSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXVnZS1oaWdoJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjI0NjEsIFwidGFjaG9tZXRlci1hbHRcIiwgXCJ0YWNob21ldGVyLWFsdC1mYXN0XCJdLCBcImY2MjVcIiwgXCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2ek0yODggOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMjU2IDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NGMwLTE3LjQtNi45LTMzLjEtMTguMS00NC42TDM2NiAxNjEuN2M1LjMtMTIuMS0uMi0yNi4zLTEyLjMtMzEuNnMtMjYuMyAuMi0zMS42IDEyLjNMMjU3LjkgMjg4Yy0uNiAwLTEuMyAwLTEuOSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0ek0xNzYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTk2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTM1Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwelwiXVxufTtcbmNvbnN0IGZhVGFjaG9tZXRlckFsdCA9IGZhR2F1Z2VIaWdoO1xuY29uc3QgZmFUYWNob21ldGVyQWx0RmFzdCA9IGZhR2F1Z2VIaWdoO1xuY29uc3QgZmFFbnZlbG9wZU9wZW5UZXh0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VudmVsb3BlLW9wZW4tdGV4dCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY1OFwiLCBcIk0yMTUuNCA5NkwxNDQgOTZsLTM2LjIgMEw5NiA5NmwwIDguOEw5NiAxNDRsMCA0MC40IDAgODlMLjIgMjAyLjVjMS42LTE4LjEgMTAuOS0zNC45IDI1LjctNDUuOEw0OCAxNDAuMyA0OCA5NmMwLTI2LjUgMjEuNS00OCA0OC00OGw3Ni42IDAgNDkuOS0zNi45QzIzMi4yIDMuOSAyNDMuOSAwIDI1NiAwczIzLjggMy45IDMzLjUgMTFMMzM5LjQgNDggNDE2IDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDQuMyAyMi4xIDE2LjRjMTQuOCAxMC45IDI0LjEgMjcuNyAyNS43IDQ1LjhMNDE2IDI3My40bDAtODkgMC00MC40IDAtMzkuMiAwLTguOC0xMS44IDBMMzY4IDk2bC03MS40IDAtODEuMyAwek0wIDQ0OEwwIDI0Mi4xIDIxNy42IDQwMy4zYzExLjEgOC4yIDI0LjYgMTIuNyAzOC40IDEyLjdzMjcuMy00LjQgMzguNC0xMi43TDUxMiAyNDIuMSA1MTIgNDQ4czAgMCAwIDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGMwIDAgMCAwIDAgMHpNMTc2IDE2MGwxNjAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRsMTYwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2MCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhSG9zcGl0YWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG9zcGl0YWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5NzMsIDYyNTg5LCBcImhvc3BpdGFsLWFsdFwiLCBcImhvc3BpdGFsLXdpZGVcIl0sIFwiZjBmOFwiLCBcIk0xOTIgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhMNDAwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0NjQtODAgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgODAtODAgMCAwLTQ2NHpNNDggOTZsMTEyIDAgMCA0MTZMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMyMGw4MCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2TDAgMjg4bDAtNjQgODAgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkwwIDE5MmwwLTQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em01NDQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4LTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAgMCAwIDY0LTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAgMCAwIDE0NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTEyIDAgMC00MTYgMTEyIDB6TTMxMiA2NGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjQtMjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDAgMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNCAyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMCAwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMHpcIl1cbn07XG5jb25zdCBmYUhvc3BpdGFsQWx0ID0gZmFIb3NwaXRhbDtcbmNvbnN0IGZhSG9zcGl0YWxXaWRlID0gZmFIb3NwaXRhbDtcbmNvbnN0IGZhV2luZUJvdHRsZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3aW5lLWJvdHRsZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjcyZlwiLCBcIk0zOTMuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNjLTExLjggMTEuOC0zMC43IDEyLjUtNDMuMiAxLjlsLTkuNSA5LjUtNDguOCA0OC44Yy05LjIgOS4yLTExLjUgMjIuOS04LjYgMzUuNmM5LjQgNDAuOS0xLjkgODUuNi0zMy44IDExNy41TDE5Ny4zIDQ5My4zYy0yNSAyNS02NS41IDI1LTkwLjUgMGwtODgtODhjLTI1LTI1LTI1LTY1LjUgMC05MC41TDE4MC4yIDE1My4zYzMxLjktMzEuOSA3Ni42LTQzLjEgMTE3LjUtMzMuOGMxMi42IDIuOSAyNi40IC41IDM1LjUtOC42bDQ4LjgtNDguOCA5LjUtOS41Yy0xMC42LTEyLjYtMTAtMzEuNCAxLjktNDMuMnpNOTkuMyAzNDcuM2w2NS40IDY1LjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsOTcuNC05Ny40YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC02NS40LTY1LjRjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDk5LjMgMzI0LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42elwiXVxufTtcbmNvbnN0IGZhQ2hlc3NSb29rID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXNzLXJvb2snLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODIwXSwgXCJmNDQ3XCIsIFwiTTMyIDE5MkwzMiA0OGMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MGMwIDQuNCAzLjYgOCA4IDhsMzIgMGM0LjQgMCA4LTMuNiA4LThsMC00MGMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MGMwIDQuNCAzLjYgOCA4IDhsMzIgMGM0LjQgMCA4LTMuNiA4LThsMC00MGMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNDRjMCAxMC4xLTQuNyAxOS42LTEyLjggMjUuNkwzNTIgMjU2bDE2IDE0NEw4MCA0MDAgOTYgMjU2IDQ0LjggMjE3LjZDMzYuNyAyMTEuNiAzMiAyMDIuMSAzMiAxOTJ6bTE3NiA5NmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2ek0yMi42IDQ3My40TDY0IDQzMmwzMjAgMCA0MS40IDQxLjRjNC4yIDQuMiA2LjYgMTAgNi42IDE2YzAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42TDM4LjYgNTEyQzI2LjEgNTEyIDE2IDUwMS45IDE2IDQ4OS40YzAtNiAyLjQtMTEuOCA2LjYtMTZ6XCJdXG59O1xuY29uc3QgZmFCYXJzU3RhZ2dlcmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhcnMtc3RhZ2dlcmVkJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJyZW9yZGVyXCIsIFwic3RyZWFtXCJdLCBcImY1NTBcIiwgXCJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek02NCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTYgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFSZW9yZGVyID0gZmFCYXJzU3RhZ2dlcmVkO1xuY29uc3QgZmFTdHJlYW0gPSBmYUJhcnNTdGFnZ2VyZWQ7XG5jb25zdCBmYURoYXJtYWNoYWtyYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaGFybWFjaGFrcmEnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5Nzg0XSwgXCJmNjU1XCIsIFwiTTMzNy44IDIwNS43bDQ4LjYtNDIuNWMxMy44IDE5LjMgMjMuNCA0MS45IDI3LjQgNjYuMmwtNjQuNCA0LjNjLTIuNC0xMC4xLTYuNC0xOS41LTExLjYtMjh6bTE0MC4xIDE5LjVjLTUuMy0zOC44LTIwLjYtNzQuNS00My4yLTEwNC4zbC44LS43QzQ0OSAxMDguNCA0NDkuNyA4Ny42IDQzNyA3NXMtMzMuNC0xMi00NS4yIDEuNWwtLjcgLjhjLTI5LjgtMjIuNi02NS41LTM3LjktMTA0LjMtNDMuMmwuMS0xLjFjMS4yLTE3LjktMTMtMzMtMzAuOS0zM3MtMzIuMSAxNS4yLTMwLjkgMzNsLjEgMS4xYy0zOC44IDUuMy03NC41IDIwLjYtMTA0LjMgNDMuMmwtLjctLjhDMTA4LjQgNjMgODcuNiA2Mi4zIDc1IDc1cy0xMiAzMy40IDEuNSA0NS4ybC44IC43Yy0yMi42IDI5LjgtMzcuOSA2NS41LTQzLjIgMTA0LjNsLTEuMS0uMWMtMTcuOS0xLjItMzMgMTMtMzMgMzAuOXMxNS4yIDMyLjEgMzMgMzAuOWwxLjEtLjFjNS4zIDM4LjggMjAuNiA3NC41IDQzLjIgMTA0LjNsLS44IC43QzYzIDQwMy42IDYyLjMgNDI0LjQgNzUgNDM3czMzLjQgMTIgNDUuMi0xLjVsLjctLjhjMjkuOCAyMi42IDY1LjUgMzcuOSAxMDQuMyA0My4ybC0uMSAxLjFjLTEuMiAxNy45IDEzIDMzIDMwLjkgMzNzMzIuMS0xNS4yIDMwLjktMzNsLS4xLTEuMWMzOC44LTUuMyA3NC41LTIwLjYgMTA0LjMtNDMuMmwuNyAuOGMxMS44IDEzLjUgMzIuNSAxNC4yIDQ1LjIgMS41czEyLTMzLjQtMS41LTQ1LjJsLS44LS43YzIyLjYtMjkuOCAzNy45LTY1LjUgNDMuMi0xMDQuM2wxLjEgLjFjMTcuOSAxLjIgMzMtMTMgMzMtMzAuOXMtMTUuMi0zMi4xLTMzLTMwLjlsLTEuMSAuMXpNMTYzLjIgMTI1LjZjMTkuMy0xMy44IDQxLjktMjMuNCA2Ni4yLTI3LjVsNC4zIDY0LjRjLTEwIDIuNC0xOS41IDYuNC0yOCAxMS42bC00Mi41LTQ4LjZ6bS02NSAxMDMuOGM0LjEtMjQuNCAxMy43LTQ2LjkgMjcuNS02Ni4ybDQ4LjYgNDIuNWMtNS4zIDguNS05LjIgMTgtMTEuNiAyOGwtNjQuNC00LjN6bTI3LjUgMTE5LjRjLTEzLjgtMTkuMy0yMy40LTQxLjktMjcuNS02Ni4ybDY0LjQtNC4zYzIuNCAxMCA2LjQgMTkuNSAxMS42IDI4bC00OC42IDQyLjV6bTEwMy44IDY1Yy0yNC40LTQuMS00Ni45LTEzLjctNjYuMi0yNy40bDQyLjUtNDguNmM4LjUgNS4zIDE4IDkuMiAyOCAxMS42bC00LjMgNjQuNHptMTE5LjQtMjcuNGMtMTkuMyAxMy44LTQxLjkgMjMuNC02Ni4yIDI3LjRsLTQuMy02NC40YzEwLTIuNCAxOS41LTYuNCAyOC0xMS42bDQyLjUgNDguNnptNjUtMTAzLjhjLTQuMSAyNC40LTEzLjcgNDYuOS0yNy40IDY2LjJsLTQ4LjYtNDIuNWM1LjMtOC41IDkuMi0xOCAxMS42LTI4bDY0LjQgNC4zem0tNjUtMTU2LjlsLTQyLjUgNDguNmMtOC41LTUuMy0xOC05LjItMjgtMTEuNmw0LjMtNjQuNGMyNC40IDQuMSA0Ni45IDEzLjcgNjYuMiAyNy41ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYUhvdGRvZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3Rkb2cnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODldLCBcImY4MGZcIiwgXCJNNDg4LjYgMjMuNGMzMS4yIDMxLjIgMzEuMiA4MS45IDAgMTEzLjFsLTM1MiAzNTJjLTMxLjIgMzEuMi04MS45IDMxLjItMTEzLjEgMHMtMzEuMi04MS45IDAtMTEzLjFsMzUyLTM1MmMzMS4yLTMxLjIgODEuOS0zMS4yIDExMy4xIDB6TTQ0My4zIDkyLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwYy0xMi41IDEyLjUtMjMuOCAxNS4xLTM3LjUgMTcuNmwtMi41IC40Yy0xMy44IDIuNS0zMS42IDUuNi00OCAyMmMtMTYuNyAxNi43LTIwLjkgMzYtMjQuMSA1MC45YzAgMCAwIDAgMCAwczAgMCAwIDBsLS4yIDFjLTMuNCAxNS42LTYgMjYuNC0xNS43IDM2LjFzLTIwLjUgMTIuMy0zNi4xIDE1LjdsLTEgLjJjLTE0LjkgMy4yLTM0LjIgNy40LTUwLjkgMjQuMXMtMjAuOSAzNi0yNC4xIDUwLjlsLS4yIDFjLTMuNCAxNS42LTYgMjYuNC0xNS43IDM2LjFjLTkuMiA5LjItMTggMTAuOC0zMi43IDEzLjRjMCAwIDAgMCAwIDBsLS45IC4yYy0xNS42IDIuOC0zNC45IDYuOS01NC40IDI2LjRjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGMxMi41LTEyLjUgMjMuOC0xNS4xIDM3LjUtMTcuNmwyLjUtLjRjMTMuOC0yLjUgMzEuNi01LjYgNDgtMjJjMTYuNy0xNi43IDIwLjktMzYgMjQuMS01MC45bC4yLTFjMy40LTE1LjYgNi0yNi40IDE1LjctMzYuMXMyMC41LTEyLjMgMzYuMS0xNS43bDEtLjJjMTQuOS0zLjIgMzQuMi03LjQgNTAuOS0yNC4xczIwLjktMzYgMjQuMS01MC45bC4yLTFjMy40LTE1LjYgNi0yNi40IDE1LjctMzYuMWM5LjItOS4yIDE4LTEwLjggMzIuNy0xMy40bC45LS4yYzE1LjYtMi44IDM0LjktNi45IDU0LjQtMjYuNGM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpNMTkxLjIgNDc5LjJsMjg4LTI4OEw0OTUgMjA3YzEwLjkgMTAuOSAxNyAyNS42IDE3IDQxcy02LjEgMzAuMS0xNyA0MUwyODkgNDk1Yy0xMC45IDEwLjktMjUuNiAxNy00MSAxN3MtMzAuMS02LjEtNDEtMTdsLTE1LjgtMTUuOHpNMTcgMzA1QzYuMSAyOTQuMSAwIDI3OS40IDAgMjY0czYuMS0zMC4xIDE3LTQxTDIyMyAxN0MyMzMuOSA2LjEgMjQ4LjYgMCAyNjQgMHMzMC4xIDYuMSA0MSAxN2wxNS44IDE1LjgtMjg4IDI4OEwxNyAzMDV6XCJdXG59O1xuY29uc3QgZmFQZXJzb25XYWxraW5nV2l0aENhbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXdhbGtpbmctd2l0aC1jYW5lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJibGluZFwiXSwgXCJmMjlkXCIsIFwiTTE3NiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04LjQgMzJjLTM2LjQgMC02OS42IDIwLjUtODUuOSA1My4xTDM1LjQgMjczLjdjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM0wxMjggMjMxLjZsMCA0My4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zTDIyNCAzOTcuM2wwIDgyLjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTg5LjRjMC0xMi43LTUuMS0yNC45LTE0LjEtMzMuOUwyMjQgMzA2LjdsMC05My40IDcwLjQgOTMuOWMxMC42IDE0LjEgMzAuNyAxNyA0NC44IDYuNHMxNy0zMC43IDYuNC00NC44TDI2OC44IDE2Ni40QzI1MC43IDE0Mi4yIDIyMi4yIDEyOCAxOTIgMTI4bC0yNC40IDB6TTEyOC4zIDM0Ni44TDk3IDQ3Mi4yYy00LjMgMTcuMSA2LjEgMzQuNSAyMy4zIDM4LjhzMzQuNS02LjEgMzguOC0yMy4zbDIyLTg4LjItNTIuOC01Mi44ek00NTAuOCA1MDUuMWM1IDcuMyAxNSA5LjEgMjIuMyA0czkuMS0xNSA0LTIyLjNMMzU4LjkgMzE2LjFjLTIuOCAzLjgtNi4xIDcuMy0xMC4xIDEwLjNjLTUgMy44LTEwLjUgNi40LTE2LjIgNy45TDQ1MC44IDUwNS4xelwiXVxufTtcbmNvbnN0IGZhQmxpbmQgPSBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZTtcbmNvbnN0IGZhRHJ1bSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkcnVtJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzQ1XSwgXCJmNTY5XCIsIFwiTTUwMS4yIDc2LjFjMTEuMS03LjMgMTQuMi0yMi4xIDYuOS0zMy4ycy0yMi4xLTE0LjItMzMuMi02LjlMMzcwLjIgMTA0LjVDMzM1LjggOTguNyAyOTcgOTYgMjU2IDk2QzExNC42IDk2IDAgMTI4IDAgMjA4TDAgMzY4YzAgMzEuMyAyNy40IDU4LjggNzIgNzguN0w3MiAzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDExOS40YzMzIDguOSA3MS4xIDE0LjUgMTEyIDE2LjFMMjMyIDM3NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTAzLjVjNDAuOS0xLjYgNzktNy4yIDExMi0xNi4xTDM5MiAzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwMi43YzQ0LjYtMTkuOSA3Mi00Ny40IDcyLTc4LjdsMC0xNjBjMC00MS4xLTMwLjItNjkuNS03OC44LTg3LjRsNjcuOS00NC41ek0zMDcuNCAxNDUuNmwtNjQuNiA0Mi4zYy0xMS4xIDcuMy0xNC4yIDIyLjEtNi45IDMzLjJzMjIuMSAxNC4yIDMzLjIgNi45bDExMS4xLTcyLjhjMTQuNyAzLjIgMjcuOSA3IDM5LjQgMTEuNUM0NTguNCAxODEuOCA0NjQgMTk3LjQgNDY0IDIwOGMwIC44LTIuNyAxNy4yLTQ2IDM1LjlDMzc5LjEgMjYwLjcgMzIyIDI3MiAyNTYgMjcycy0xMjMuMS0xMS4zLTE2Mi0yOC4xQzUwLjcgMjI1LjIgNDggMjA4LjggNDggMjA4YzAtMTAuNiA1LjYtMjYuMiA0NC40LTQxLjNDMTMwLjYgMTUxLjkgMTg3LjggMTQ0IDI1NiAxNDRjMTggMCAzNS4xIC41IDUxLjQgMS42elwiXVxufTtcbmNvbnN0IGZhSWNlQ3JlYW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaWNlLWNyZWFtJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODQ4XSwgXCJmODEwXCIsIFwiTTM2Ny4xIDE2MGMuNi01LjMgLjktMTAuNiAuOS0xNkMzNjggNjQuNSAzMDMuNSAwIDIyNCAwUzgwIDY0LjUgODAgMTQ0YzAgNS40IC4zIDEwLjcgLjkgMTZsLS45IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhsNTMuNSAwIDE4MSAwIDUzLjUgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGwtLjkgMHpNOTYgMjg4TDIwMC44IDQ5Ny43YzQuNCA4LjggMTMuMyAxNC4zIDIzLjIgMTQuM3MxOC44LTUuNSAyMy4yLTE0LjNMMzUyIDI4OCA5NiAyODh6XCJdXG59O1xuY29uc3QgZmFIZWFydENpcmNsZUJvbHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGVhcnQtY2lyY2xlLWJvbHQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0ZmNcIiwgXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOWwyLjYtMi40QzI2Ny4yIDQzOC42IDI1NiA0MDQuNiAyNTYgMzY4YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2YzI4LjMgMCA1NSA2LjcgNzguNyAxOC41Yy45LTYuNSAxLjMtMTMgMS4zLTE5LjZsMC01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMWwwIDUuOGMwIDQxLjUgMTcuMiA4MS4yIDQ3LjYgMTA5LjV6TTQzMiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em00Ny45LTIyNWM0LjMgMy43IDUuNCA5LjkgMi42IDE0LjlMNDUyLjQgMzU2bDM1LjYgMGM1LjIgMCA5LjggMy4zIDExLjQgOC4ycy0uMSAxMC4zLTQuMiAxMy40bC05NiA3MmMtNC41IDMuNC0xMC44IDMuMi0xNS4xLS42cy01LjQtOS45LTIuNi0xNC45TDQxMS42IDM4MCAzNzYgMzgwYy01LjIgMC05LjgtMy4zLTExLjQtOC4ycy4xLTEwLjMgNC4yLTEzLjRsOTYtNzJjNC41LTMuNCAxMC44LTMuMiAxNS4xIC42elwiXVxufTtcbmNvbnN0IGZhRmF4ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZheCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODIyNCwgMTI4NDM5XSwgXCJmMWFjXCIsIFwiTTEyOCA2NGwwIDk2IDY0IDAgMC05NiAxOTQuNyAwTDQxNiA5My4zbDAgNjYuNyA2NCAwIDAtNjYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w0MzIgMTguN0M0MjAgNi43IDQwMy43IDAgMzg2LjcgMEwxOTIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6TTAgMTYwTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem00ODAgMzJsLTM1MiAwIDAgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yNTYgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0yMjQgNDE2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6XCJdXG59O1xuY29uc3QgZmFQYXJhZ3JhcGggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGFyYWdyYXBoJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTgyXSwgXCJmMWRkXCIsIFwiTTE5MiAzMmw2NCAwIDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzUyLTMyIDAgMCAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni0zMiAwYy04OC40IDAtMTYwLTcxLjYtMTYwLTE2MHM3MS42LTE2MCAxNjAtMTYwelwiXVxufTtcbmNvbnN0IGZhQ2hlY2tUb1Nsb3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hlY2stdG8tc2xvdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1widm90ZS15ZWFcIl0sIFwiZjc3MlwiLCBcIk05NiA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGwyODggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDMwNEw5NiAzODQgOTYgODB6bTMxMyA0N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTExMSAxMTEtNDctNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNjQgNjRjOS40IDkuNCAyNC42IDkuNCAzMy45IDBMNDA5IDE2MWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXpNMCAzMzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwIDEyOCA0NDggMCAwLTEyOCAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2elwiXVxufTtcbmNvbnN0IGZhVm90ZVllYSA9IGZhQ2hlY2tUb1Nsb3Q7XG5jb25zdCBmYVN0YXJIYWxmID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0YXItaGFsZicsXG4gIGljb246IFs1NzYsIDUxMiwgWzYxNzMxXSwgXCJmMDg5XCIsIFwiTTI4OCAwYy0xMi4yIC4xLTIzLjMgNy0yOC42IDE4TDE5NSAxNTAuMyA1MS40IDE3MS41Yy0xMiAxLjgtMjIgMTAuMi0yNS43IDIxLjdzLS43IDI0LjIgNy45IDMyLjdMMTM3LjggMzI5IDExMy4yIDQ3NC43Yy0yIDEyIDMgMjQuMiAxMi45IDMxLjNzMjMgOCAzMy44IDIuM0wyODggNDM5LjggMjg4IDB6TTQyOS45IDUxMmMxLjEgLjEgMi4xIC4xIDMuMiAwbC0zLjIgMHpcIl1cbn07XG5jb25zdCBmYUJveGVzU3RhY2tlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3hlcy1zdGFja2VkJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbNjI2MjUsIFwiYm94ZXNcIiwgXCJib3hlcy1hbHRcIl0sIFwiZjQ2OFwiLCBcIk0yNDggMEwyMDggMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTI4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xMTJjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzI4IDBsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZsLTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTgwek02NCAyNTZjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC00MCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC04MC00MCAwek0zNTIgNTEybDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC00MCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC04MC00MCAwYy0xNSAwLTI4LjggNS4xLTM5LjcgMTMuOGM0LjkgMTAuNCA3LjcgMjIgNy43IDM0LjJsMCAxNjBjMCAxMi4yLTIuOCAyMy44LTcuNyAzNC4yQzMyMy4yIDUwNi45IDMzNyA1MTIgMzUyIDUxMnpcIl1cbn07XG5jb25zdCBmYUJveGVzID0gZmFCb3hlc1N0YWNrZWQ7XG5jb25zdCBmYUJveGVzQWx0ID0gZmFCb3hlc1N0YWNrZWQ7XG5jb25zdCBmYUxpbmsgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGluaycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODI3OSwgXCJjaGFpblwiXSwgXCJmMGMxXCIsIFwiTTU3OS44IDI2Ny43YzU2LjUtNTYuNSA1Ni41LTE0OCAwLTIwNC41Yy01MC01MC0xMjguOC01Ni41LTE4Ni4zLTE1LjRsLTEuNiAxLjFjLTE0LjQgMTAuMy0xNy43IDMwLjMtNy40IDQ0LjZzMzAuMyAxNy43IDQ0LjYgNy40bDEuNi0xLjFjMzIuMS0yMi45IDc2LTE5LjMgMTAzLjggOC42YzMxLjUgMzEuNSAzMS41IDgyLjUgMCAxMTRMNDIyLjMgMzM0LjhjLTMxLjUgMzEuNS04Mi41IDMxLjUtMTE0IDBjLTI3LjktMjcuOS0zMS41LTcxLjgtOC42LTEwMy44bDEuMS0xLjZjMTAuMy0xNC40IDYuOS0zNC40LTcuNC00NC42cy0zNC40LTYuOS00NC42IDcuNGwtMS4xIDEuNkMyMDYuNSAyNTEuMiAyMTMgMzMwIDI2MyAzODBjNTYuNSA1Ni41IDE0OCA1Ni41IDIwNC41IDBMNTc5LjggMjY3Ljd6TTYwLjIgMjQ0LjNjLTU2LjUgNTYuNS01Ni41IDE0OCAwIDIwNC41YzUwIDUwIDEyOC44IDU2LjUgMTg2LjMgMTUuNGwxLjYtMS4xYzE0LjQtMTAuMyAxNy43LTMwLjMgNy40LTQ0LjZzLTMwLjMtMTcuNy00NC42LTcuNGwtMS42IDEuMWMtMzIuMSAyMi45LTc2IDE5LjMtMTAzLjgtOC42Qzc0IDM3MiA3NCAzMjEgMTA1LjUgMjg5LjVMMjE3LjcgMTc3LjJjMzEuNS0zMS41IDgyLjUtMzEuNSAxMTQgMGMyNy45IDI3LjkgMzEuNSA3MS44IDguNiAxMDMuOWwtMS4xIDEuNmMtMTAuMyAxNC40LTYuOSAzNC40IDcuNCA0NC42czM0LjQgNi45IDQ0LjYtNy40bDEuMS0xLjZDNDMzLjUgMjYwLjggNDI3IDE4MiAzNzcgMTMyYy01Ni41LTU2LjUtMTQ4LTU2LjUtMjA0LjUgMEw2MC4yIDI0NC4zelwiXVxufTtcbmNvbnN0IGZhQ2hhaW4gPSBmYUxpbms7XG5jb25zdCBmYUVhckxpc3RlbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdlYXItbGlzdGVuJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXNcIl0sIFwiZjJhMlwiLCBcIk0zOTguMyAzLjRjLTE1LjgtNy45LTM1LTEuNS00Mi45IDE0LjNjLTcuOSAxNS44LTEuNSAzNC45IDE0LjIgNDIuOWwuNCAuMmMuNCAuMiAxLjEgLjYgMi4xIDEuMmMyIDEuMiA1IDMgOC43IDUuNmM3LjUgNS4yIDE3LjYgMTMuMiAyNy43IDI0LjJDNDI4LjUgMTEzLjQgNDQ4IDE0NiA0NDggMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02Ni0yOC41LTExMy40LTU2LjUtMTQzLjdDNDQxLjYgMzMuMiA0MjcuNyAyMi4yIDQxNy4zIDE1Yy01LjMtMy43LTkuNy02LjQtMTMtOC4zYy0xLjYtMS0zLTEuNy00LTIuMmMtLjUtLjMtLjktLjUtMS4yLS43bC0uNC0uMi0uMi0uMWMwIDAgMCAwLS4xIDBjMCAwIDAgMCAwIDBMMzg0IDMyIDM5OC4zIDMuNHpNMTI4LjcgMjI3LjVjNi4yLTU2IDUzLjctOTkuNSAxMTEuMy05OS41YzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyYzAgMjkuMy0xMS4yIDU1LjktMjkuNiA3NS45Yy0xNyAxOC40LTM0LjQgNDUuMS0zNC40IDc4bDAgNi4xYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzYxLjkgMCAxMTItNTAuMSAxMTItMTEybDAtNi4xYzAtOS44IDUuNC0yMS43IDE3LjQtMzQuN0MzOTguMyAzMjcuOSA0MTYgMjg2IDQxNiAyNDBjMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZDMTQ5LjQgNjQgNzQuOCAxMzIuNSA2NS4xIDIyMC41Yy0xLjkgMTcuNiAxMC43IDMzLjQgMjguMyAzNS4zczMzLjQtMTAuNyAzNS4zLTI4LjN6TTMyIDUxMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTE5MiAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDEuNCAzNjEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwek0yMDggMjQwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0elwiXVxufTtcbmNvbnN0IGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtcyA9IGZhRWFyTGlzdGVuO1xuY29uc3QgZmFUcmVlQ2l0eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cmVlLWNpdHknLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1ODdcIiwgXCJNMjg4IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNDQgNDAgMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiAyNCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQxNnptNjQgMzJsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMzUyIDI3MmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNzYtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNTEyIDM2OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0yMjQgMTYwYzAgNi0xIDExLTIgMTZjMjAgMTQgMzQgMzggMzQgNjRjMCA0NS0zNiA4MC04MCA4MGwtMTYgMCAwIDE2MGMwIDE4LTE1IDMyLTMyIDMyYy0xOCAwLTMyLTE0LTMyLTMybDAtMTYwLTE2IDBjLTQ1IDAtODAtMzUtODAtODBjMC0yNiAxMy01MCAzMy02NGMtMS01LTEtMTAtMS0xNmMwLTUzIDQyLTk2IDk2LTk2YzUzIDAgOTYgNDMgOTYgOTZ6XCJdXG59O1xuY29uc3QgZmFQbGF5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsYXknLFxuICBpY29uOiBbMzg0LCA1MTIsIFs5NjU0XSwgXCJmMDRiXCIsIFwiTTczIDM5Yy0xNC44LTkuMS0zMy40LTkuNC00OC41LS45UzAgNjIuNiAwIDgwTDAgNDMyYzAgMTcuNCA5LjQgMzMuNCAyNC41IDQxLjlzMzMuNyA4LjEgNDguNS0uOUwzNjEgMjk3YzE0LjMtOC43IDIzLTI0LjIgMjMtNDFzLTguNy0zMi4yLTIzLTQxTDczIDM5elwiXVxufTtcbmNvbnN0IGZhRm9udCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmb250JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDMxXCIsIFwiTTI1NCA1Mi44QzI0OS4zIDQwLjMgMjM3LjMgMzIgMjI0IDMycy0yNS4zIDguMy0zMCAyMC44TDU3LjggNDE2IDMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xLjggMCAxOC00OCAxNTkuNiAwIDE4IDQ4LTEuOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI1LjggMEwyNTQgNTIuOHpNMjc5LjggMzA0bC0xMTEuNiAwTDIyNCAxNTUuMSAyNzkuOCAzMDR6XCJdXG59O1xuY29uc3QgZmFUYWJsZUNlbGxzUm93TG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0YWJsZS1jZWxscy1yb3ctbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTY3YVwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjUuMWMtMzcuOCA1LjQtNjkuNCAyOS42LTg1LjIgNjIuOUwzNjAgMjI0bDAgNjQgNTYgMCAwIDguNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNGwtMjQgMCAwIDY0IDI0IDAgMCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTY0IDIyNGwwIDY0IDg4IDAgMC02NC04OCAwem0yMzIgMGwtODggMCAwIDY0IDg4IDAgMC02NHpNMTUyIDM1MmwtODggMCAwIDY0IDg4IDAgMC02NHptNTYgMGwwIDY0IDg4IDAgMC02NC04OCAwek01MjggMjQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtNDh6XCJdXG59O1xuY29uc3QgZmFSdXBpYWhTaWduID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3J1cGlhaC1zaWduJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMjNkXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsODAgMGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDU4LjgtMzUuMiAxMDkuMy04NS43IDEzMS43bDUxLjQgMTI4LjRjNi42IDE2LjQtMS40IDM1LTE3LjggNDEuNnMtMzUtMS40LTQxLjYtMTcuOEwxMDYuMyAzMjAgNjQgMzIwbDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDAgMjg4IDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwTDY0IDk2bDAgMTYwem0yNTYtOTZsODAgMGM2MS45IDAgMTEyIDUwLjEgMTEyIDExMnMtNTAuMSAxMTItMTEyIDExMmwtNDggMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTI4IDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyem04MCAxNjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA5NiA0OCAwelwiXVxufTtcbmNvbnN0IGZhTWFnbmlmeWluZ0dsYXNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNjksIFwic2VhcmNoXCJdLCBcImYwMDJcIiwgXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6XCJdXG59O1xuY29uc3QgZmFTZWFyY2ggPSBmYU1hZ25pZnlpbmdHbGFzcztcbmNvbnN0IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxlLXRlbm5pcy1wYWRkbGUtYmFsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzk1NSwgXCJwaW5nLXBvbmctcGFkZGxlLWJhbGxcIiwgXCJ0YWJsZS10ZW5uaXNcIl0sIFwiZjQ1ZFwiLCBcIk00MTYgMjg4Yy01MC4xIDAtOTMuNiAyOC44LTExNC42IDcwLjhMNjguOSAxMjYuM2wuNi0uNiA2MC4xLTYwLjFjODcuNS04Ny41IDIyOS4zLTg3LjUgMzE2LjggMGM2Ny4xIDY3LjEgODIuNyAxNjYuMyA0Ni44IDI0OC4zQzQ3MS44IDI5Ny42IDQ0NSAyODggNDE2IDI4OHpNNDkuMyAxNTEuOUwyOTAuMSAzOTIuN2MtMS40IDcuNS0yLjEgMTUuMy0yLjEgMjMuM2MwIDIzLjIgNi4yIDQ0LjkgMTYuOSA2My43Yy0zIC4yLTYuMSAuMy05LjIgLjNsLTIuNyAwYy0zMy45IDAtNjYuNS0xMy41LTkwLjUtMzcuNWwtOS44LTkuOGMtMTMuMS0xMy4xLTM0LjYtMTIuNC00Ni44IDEuN0w4OC4yIDUwMWMtNS44IDYuNy0xNC4yIDEwLjctMjMgMTFzLTE3LjUtMy4xLTIzLjgtOS40bC0zMi0zMkMzLjEgNDY0LjMtLjMgNDU1LjcgMCA0NDYuOXM0LjMtMTcuMiAxMS0yM2w2Ni42LTU3LjdjMTQtMTIuMiAxNC44LTMzLjcgMS43LTQ2LjhsLTkuOC05LjhDNDUuNSAyODUuNSAzMiAyNTIuOSAzMiAyMTlsMC0yLjdjMC0yMi44IDYuMS00NC45IDE3LjMtNjQuM3pNNDE2IDMyMGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpcIl1cbn07XG5jb25zdCBmYVBpbmdQb25nUGFkZGxlQmFsbCA9IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsO1xuY29uc3QgZmFUYWJsZVRlbm5pcyA9IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsO1xuY29uc3QgZmFQZXJzb25Eb3RzRnJvbUxpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWRvdHMtZnJvbS1saW5lJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJkaWFnbm9zZXNcIl0sIFwiZjQ3MFwiLCBcIk0yODggMTc2QTg4IDg4IDAgMSAwIDI4OCAwYTg4IDg4IDAgMSAwIDAgMTc2ek03OC43IDM3Mi45YzE1LTEyLjUgNTAtMzQuNCA5Ny4zLTUwLjFMMTc2IDQzMmwyMjQgMCAwLTEwOS4zYzQ3LjMgMTUuOCA4Mi4zIDM3LjcgOTcuMyA1MC4xYzIwLjQgMTcgNTAuNiAxNC4yIDY3LjYtNi4xczE0LjItNTAuNi02LjEtNjcuNmMtMTItMTAtMzAuMS0yMi41LTUzLjItMzVDNDk3LjIgMjc4LjQgNDgxLjcgMjg4IDQ2NCAyODhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4YzAtNC4zIC42LTguNCAxLjYtMTIuNEMzNzkuMSAyMTUuOSAzMzUuMyAyMDggMjg4IDIwOGMtNjAuMiAwLTExNC45IDEyLjktMTYwIDI5LjljMCAuNyAwIDEuNCAwIDIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGMtMTEuOCAwLTIyLjctNC4zLTMxLTExLjRjLTEzLjEgOC4xLTIzLjcgMTUuOS0zMS43IDIyLjVjLTIwLjQgMTctMjMuMSA0Ny4yLTYuMSA2Ny42czQ3LjIgMjMuMSA2Ny42IDYuMXpNMjQgNDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDUyOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDQ2NHpNMjI0IDI4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMDQgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek05NiAyNDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMzY4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnpcIl1cbn07XG5jb25zdCBmYURpYWdub3NlcyA9IGZhUGVyc29uRG90c0Zyb21MaW5lO1xuY29uc3QgZmFUcmFzaENhbkFycm93VXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhc2gtY2FuLWFycm93LXVwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ0cmFzaC1yZXN0b3JlLWFsdFwiXSwgXCJmODJhXCIsIFwiTTE2My44IDBMMjg0LjIgMGMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43TDMyMCAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDcuMi0xNC4zQzE0MC42IDYuOCAxNTEuNyAwIDE2My44IDB6TTMyIDEyOGwzODQgMCAwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzIwem0xOTIgNjRjLTYuNCAwLTEyLjUgMi41LTE3IDdsLTgwIDgwYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzktMzlMMjAwIDQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTM0LjEgMzkgMzljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04MC04MGMtNC41LTQuNS0xMC42LTctMTctN3pcIl1cbn07XG5jb25zdCBmYVRyYXNoUmVzdG9yZUFsdCA9IGZhVHJhc2hDYW5BcnJvd1VwO1xuY29uc3QgZmFOYWlyYVNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbmFpcmEtc2lnbicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTFmNlwiLCBcIk0xMjIuNiA0Ni4zYy03LjgtMTEuNy0yMi40LTE3LTM1LjktMTIuOVM2NCA0OS45IDY0IDY0bDAgMTkyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDEwMC4yIDAgOTcuMiAxNDUuOGM3LjggMTEuNyAyMi40IDE3IDM1LjkgMTIuOXMyMi43LTE2LjUgMjIuNy0zMC42bDAtMTI4IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxOTItNTcuNSAwTDEyMi42IDQ2LjN6TTMwNS4xIDMyMGwxNC45IDAgMCAyMi4zTDMwNS4xIDMyMHpNMTg1LjUgMjU2TDEyOCAyNTZsMC04Ni4zTDE4NS41IDI1NnpcIl1cbn07XG5jb25zdCBmYUNhcnRBcnJvd0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FydC1hcnJvdy1kb3duJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmMjE4XCIsIFwiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsNDUuNSAwYzMuOCAwIDcuMSAyLjcgNy45IDYuNWw1MS42IDI3MWM2LjUgMzQgMzYuMiA1OC41IDcwLjcgNTguNUw0ODggMzg0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yODguMyAwYy0xMS41IDAtMjEuNC04LjItMjMuNi0xOS41TDE3MC43IDI4OGwyODguNSAwYzMyLjYgMCA2MS4xLTIxLjggNjkuNS01My4zbDQxLTE1Mi4zQzU3Ni42IDU3IDU1Ny40IDMyIDUzMS4xIDMyTDM2MCAzMmwwIDEwMi4xIDIzLTIzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjQgNjRjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDIzIDIzTDMxMiAzMiAxMjAuMSAzMkMxMTEgMTIuOCA5MS42IDAgNjkuNSAwTDI0IDB6TTE3NiA1MTJhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0zMzYtNDhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpcIl1cbn07XG5jb25zdCBmYVdhbGtpZVRhbGtpZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YWxraWUtdGFsa2llJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmOGVmXCIsIFwiTTExMiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM2NCAxMC43IDY0IDI0bDAgNzJMNDggOTZDMjEuNSA5NiAwIDExNy41IDAgMTQ0TDAgMzAwLjFjMCAxMi43IDUuMSAyNC45IDE0LjEgMzMuOWwzLjkgMy45YzkgOSAxNC4xIDIxLjIgMTQuMSAzMy45TDMyIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTkyLjFjMC0xMi43IDUuMS0yNC45IDE0LjEtMzMuOWwzLjktMy45YzktOSAxNC4xLTIxLjIgMTQuMS0zMy45TDM4NCAxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsLTMyIDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsLTQ4IDAgMC03MnptMCAxMzZsMTYwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2MCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0bDE2MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNjAgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMCA2NGwxNjAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFGaWxlUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MjIxLCBcImZpbGUtZWRpdFwiXSwgXCJmMzFjXCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMTI1LjctODYuOCA4Ni44Yy0xMC4zIDEwLjMtMTcuNSAyMy4xLTIxIDM3LjJsLTE4LjcgNzQuOWMtMi4zIDkuMi0xLjggMTguOCAxLjMgMjcuNUw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTM4NCA2NGwtMTI4IDBMMjU2IDAgMzg0IDEyOHpNNTQ5LjggMjM1LjdsMTQuNCAxNC40YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC0yOS40IDI5LjQtNzEtNzEgMjkuNC0yOS40YzE1LjYtMTUuNiA0MC45LTE1LjYgNTYuNiAwek0zMTEuOSA0MTdMNDQxLjEgMjg3LjhsNzEgNzFMMzgyLjkgNDg3LjljLTQuMSA0LjEtOS4yIDctMTQuOSA4LjRsLTYwLjEgMTVjLTUuNSAxLjQtMTEuMi0uMi0xNS4yLTQuMnMtNS42LTkuNy00LjItMTUuMmwxNS02MC4xYzEuNC01LjYgNC4zLTEwLjggOC40LTE0Ljl6XCJdXG59O1xuY29uc3QgZmFGaWxlRWRpdCA9IGZhRmlsZVBlbjtcbmNvbnN0IGZhUmVjZWlwdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWNlaXB0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTM0XSwgXCJmNTQzXCIsIFwiTTE0IDIuMkMyMi41LTEuNyAzMi41LS4zIDM5LjYgNS44TDgwIDQwLjQgMTIwLjQgNS44YzktNy43IDIyLjMtNy43IDMxLjIgMEwxOTIgNDAuNCAyMzIuNCA1LjhjOS03LjcgMjIuMy03LjcgMzEuMiAwTDMwNCA0MC40IDM0NC40IDUuOGM3LjEtNi4xIDE3LjEtNy41IDI1LjYtMy42czE0IDEyLjQgMTQgMjEuOGwwIDQ2NGMwIDkuNC01LjUgMTcuOS0xNCAyMS44cy0xOC41IDIuNS0yNS42LTMuNkwzMDQgNDcxLjZsLTQwLjQgMzQuNmMtOSA3LjctMjIuMyA3LjctMzEuMiAwTDE5MiA0NzEuNmwtNDAuNCAzNC42Yy05IDcuNy0yMi4zIDcuNy0zMS4yIDBMODAgNDcxLjYgMzkuNiA1MDYuMmMtNy4xIDYuMS0xNy4xIDcuNS0yNS42IDMuNlMwIDQ5Ny40IDAgNDg4TDAgMjRDMCAxNC42IDUuNSA2LjEgMTQgMi4yek05NiAxNDRjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMOTYgMTQ0ek04MCAzNTJjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2TDk2IDMzNmMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiAyNDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMOTYgMjQwelwiXVxufTtcbmNvbnN0IGZhU3F1YXJlUGVuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1wZW4nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcInBlbi1zcXVhcmVcIiwgXCJwZW5jaWwtc3F1YXJlXCJdLCBcImYxNGJcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzI1LjggMTM5LjdsMTQuNCAxNC40YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC0yMS40IDIxLjQtNzEtNzEgMjEuNC0yMS40YzE1LjYtMTUuNiA0MC45LTE1LjYgNTYuNiAwek0xMTkuOSAyODlMMjI1LjEgMTgzLjhsNzEgNzFMMTkwLjkgMzU5LjljLTQuMSA0LjEtOS4yIDctMTQuOSA4LjRsLTYwLjEgMTVjLTUuNSAxLjQtMTEuMi0uMi0xNS4yLTQuMnMtNS42LTkuNy00LjItMTUuMmwxNS02MC4xYzEuNC01LjYgNC4zLTEwLjggOC40LTE0Ljl6XCJdXG59O1xuY29uc3QgZmFQZW5TcXVhcmUgPSBmYVNxdWFyZVBlbjtcbmNvbnN0IGZhUGVuY2lsU3F1YXJlID0gZmFTcXVhcmVQZW47XG5jb25zdCBmYVN1aXRjYXNlUm9sbGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzdWl0Y2FzZS1yb2xsaW5nJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNWMxXCIsIFwiTTE0NCA1NmMwLTQuNCAzLjYtOCA4LThsODAgMGM0LjQgMCA4IDMuNiA4IDhsMCA3Mi05NiAwIDAtNzJ6bTE3NiA3MmwtMzIgMCAwLTcyYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDE1MiAwQzEyMS4xIDAgOTYgMjUuMSA5NiA1NmwwIDcyLTMyIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIyNGMwLTM1LjMtMjguNy02NC02NC02NHpNMTEyIDIyNGwxNjAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgMTI4bDE2MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNjAgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1M2ZcIiwgXCJNMTEyIDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNGwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIyMy4xTDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42bDI5LjcgMGMzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw0NC45IDc0LjdjLTE2LjEgMTcuNi0yOC42IDM4LjUtMzYuNiA2MS41Yy0xLjktMS44LTMuNS0zLjktNC45LTYuM0wyMzIgMjU2LjkgMjMyIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0xNiAwek00MzIgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyNDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0wLTE5MmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnpcIl1cbn07XG5jb25zdCBmYUNoZXZyb25Eb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXZyb24tZG93bicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjA3OFwiLCBcIk0yMzMuNCA0MDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxOTItMTkyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI1NiAzMzguNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxOTIgMTkyelwiXVxufTtcbmNvbnN0IGZhQmF0dGVyeUZ1bGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmF0dGVyeS1mdWxsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MjY3LCBcImJhdHRlcnlcIiwgXCJiYXR0ZXJ5LTVcIl0sIFwiZjI0MFwiLCBcIk00NjQgMTYwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2MGMwIDguOC03LjIgMTYtMTYgMTZMODAgMzUyYy04LjggMC0xNi03LjItMTYtMTZsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2bDM4NCAwek04MCA5NkMzNS44IDk2IDAgMTMxLjggMCAxNzZMMCAzMzZjMCA0NC4yIDM1LjggODAgODAgODBsMzg0IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0xNmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtMTZjMC00NC4yLTM1LjgtODAtODAtODBMODAgOTZ6bTM2OCA5Nkw5NiAxOTJsMCAxMjggMzUyIDAgMC0xMjh6XCJdXG59O1xuY29uc3QgZmFCYXR0ZXJ5ID0gZmFCYXR0ZXJ5RnVsbDtcbmNvbnN0IGZhQmF0dGVyeTUgPSBmYUJhdHRlcnlGdWxsO1xuY29uc3QgZmFTa3VsbENyb3NzYm9uZXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2t1bGwtY3Jvc3Nib25lcycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODM2OSwgOTc2MF0sIFwiZjcxNFwiLCBcIk0zNjggMTI4YzAgNDQuNC0yNS40IDgzLjUtNjQgMTA2LjRsMCAyMS42YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTIxLjZjLTM4LjYtMjMtNjQtNjIuMS02NC0xMDYuNEM4MCA1Ny4zIDE0NC41IDAgMjI0IDBzMTQ0IDU3LjMgMTQ0IDEyOHpNMTY4IDE3NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE0NC0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zLjQgMjczLjdjNy45LTE1LjggMjcuMS0yMi4yIDQyLjktMTQuM0wyMjQgMzQ4LjJsMTc3LjctODguOGMxNS44LTcuOSAzNS0xLjUgNDIuOSAxNC4zczEuNSAzNS0xNC4zIDQyLjlMMjk1LjYgMzg0bDEzNC44IDY3LjRjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOXMtMjcuMSAyMi4yLTQyLjkgMTQuM0wyMjQgNDE5LjggNDYuMyA1MDguNmMtMTUuOCA3LjktMzUgMS41LTQyLjktMTQuM3MtMS41LTM1IDE0LjMtNDIuOUwxNTIuNCAzODQgMTcuNyAzMTYuNkMxLjkgMzA4LjctNC41IDI4OS41IDMuNCAyNzMuN3pcIl1cbn07XG5jb25zdCBmYUNvZGVDb21wYXJlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvZGUtY29tcGFyZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTEzYVwiLCBcIk0zMjAgNDg4YzAgOS41LTUuNiAxOC4xLTE0LjIgMjEuOXMtMTguOCAyLjMtMjUuOC00LjFsLTgwLTcyYy01LjEtNC42LTcuOS0xMS03LjktMTcuOHMyLjktMTMuMyA3LjktMTcuOGw4MC03MmM3LTYuMyAxNy4yLTcuOSAyNS44LTQuMXMxNC4yIDEyLjQgMTQuMiAyMS45bDAgNDAgMTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2Ni43QzM3MS43IDE0MSAzNTIgMTEyLjggMzUyIDgwYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM0w0NjQgMzIwYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0xNiAwIDAgNDB6TTQ1NiA4MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xOTIgMjRjMC05LjUgNS42LTE4LjEgMTQuMi0yMS45czE4LjgtMi4zIDI1LjggNC4xbDgwIDcyYzUuMSA0LjYgNy45IDExIDcuOSAxNy44cy0yLjkgMTMuMy03LjkgMTcuOGwtODAgNzJjLTcgNi4zLTE3LjIgNy45LTI1LjggNC4xcy0xNC4yLTEyLjQtMTQuMi0yMS45bDAtNDAtMTYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAxNjYuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNMNDggMTkyYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDE2IDAgMC00MHpNNTYgNDMyYTI0IDI0IDAgMSAwIDQ4IDAgMjQgMjQgMCAxIDAgLTQ4IDB6XCJdXG59O1xuY29uc3QgZmFMaXN0VWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlzdC11bCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibGlzdC1kb3RzXCJdLCBcImYwY2FcIiwgXCJNNjQgMTQ0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwem0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6TTY0IDQ2NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQ4LTIwOGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwelwiXVxufTtcbmNvbnN0IGZhTGlzdERvdHMgPSBmYUxpc3RVbDtcbmNvbnN0IGZhU2Nob29sTG9jayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzY2hvb2wtbG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU2ZlwiLCBcIk0zMDIuMiA1LjRjMTAuNy03LjIgMjQuOC03LjIgMzUuNSAwTDQ3My43IDk2IDU5MiA5NmMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDEyOGMwLTYxLjktNTAuMS0xMTItMTEyLTExMnMtMTEyIDUwLjEtMTEyIDExMmwwIDI0LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRsLTYzLjcgMC0uMyAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2IDY0IDBzMCAwIDAgMEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDExOC4zIDBMMzAyLjIgNS40ek04MCAyMDhsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMCAxMjhsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMjQwLTcyYTg4IDg4IDAgMSAwIDAtMTc2IDg4IDg4IDAgMSAwIDAgMTc2em0xNi0xMjBsMCAxNiAxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0xOTIgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tODAgMzJjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMC00OHpcIl1cbn07XG5jb25zdCBmYVRvd2VyQ2VsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b3dlci1jZWxsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTg1XCIsIFwiTTYyLjYgMi4zQzQ2LjItNC4zIDI3LjYgMy42IDIwLjkgMjBDNy40IDUzLjQgMCA4OS45IDAgMTI4czcuNCA3NC42IDIwLjkgMTA4YzYuNiAxNi40IDI1LjMgMjQuMyA0MS43IDE3LjdTODYuOSAyMjguNCA4MC4zIDIxMkM2OS44IDE4Ni4xIDY0IDE1Ny44IDY0IDEyOHM1LjgtNTguMSAxNi4zLTg0Qzg2LjkgMjcuNiA3OSA5IDYyLjYgMi4zem00NTAuOCAwQzQ5NyA5IDQ4OS4xIDI3LjYgNDk1LjcgNDRDNTA2LjIgNjkuOSA1MTIgOTguMiA1MTIgMTI4cy01LjggNTguMS0xNi4zIDg0Yy02LjYgMTYuNCAxLjMgMzUgMTcuNyA0MS43czM1LTEuMyA0MS43LTE3LjdjMTMuNS0zMy40IDIwLjktNjkuOSAyMC45LTEwOHMtNy40LTc0LjYtMjAuOS0xMDhDNTQ4LjQgMy42IDUyOS44LTQuMyA1MTMuNCAyLjN6TTM0MC4xIDE2NS4yYzcuNS0xMC41IDExLjktMjMuMyAxMS45LTM3LjJjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRjMCAxMy45IDQuNCAyNi43IDExLjkgMzcuMkw5OC45IDQ2Ni44Yy03LjMgMTYuMS0uMiAzNS4xIDE1LjkgNDIuNHMzNS4xIC4yIDQyLjQtMTUuOUwxNzcuNyA0NDhsMjIwLjYgMCAyMC42IDQ1LjJjNy4zIDE2LjEgMjYuMyAyMy4yIDQyLjQgMTUuOXMyMy4yLTI2LjMgMTUuOS00Mi40TDM0MC4xIDE2NS4yek0zNjkuMiAzODRsLTE2Mi40IDAgMTQuNS0zMiAxMzMuMyAwIDE0LjUgMzJ6TTI4OCAyMDUuM0wzMjUuNiAyODhsLTc1LjIgMEwyODggMjA1LjN6TTE2My4zIDczLjZjNS4zLTEyLjEtLjItMjYuMy0xMi40LTMxLjZzLTI2LjMgLjItMzEuNiAxMi40QzEwOS41IDc3IDEwNCAxMDEuOSAxMDQgMTI4czUuNSA1MSAxNS4zIDczLjZjNS4zIDEyLjEgMTkuNSAxNy43IDMxLjYgMTIuNHMxNy43LTE5LjUgMTIuNC0zMS42QzE1NiAxNjUuOCAxNTIgMTQ3LjQgMTUyIDEyOHM0LTM3LjggMTEuMy01NC40ek00NTYuNyA1NC40Yy01LjMtMTIuMS0xOS41LTE3LjctMzEuNi0xMi40cy0xNy43IDE5LjUtMTIuNCAzMS42QzQyMCA5MC4yIDQyNCAxMDguNiA0MjQgMTI4cy00IDM3LjgtMTEuMyA1NC40Yy01LjMgMTIuMSAuMiAyNi4zIDEyLjQgMzEuNnMyNi4zLS4yIDMxLjYtMTIuNEM0NjYuNSAxNzkgNDcyIDE1NC4xIDQ3MiAxMjhzLTUuNS01MS0xNS4zLTczLjZ6XCJdXG59O1xuY29uc3QgZmFEb3duTG9uZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb3duLWxvbmcnLFxuICBpY29uOiBbMzIwLCA1MTIsIFtcImxvbmctYXJyb3ctYWx0LWRvd25cIl0sIFwiZjMwOVwiLCBcIk0yIDMzNC41Yy0zLjggOC44LTIgMTkgNC42IDI2bDEzNiAxNDRjNC41IDQuOCAxMC44IDcuNSAxNy40IDcuNXMxMi45LTIuNyAxNy40LTcuNWwxMzYtMTQ0YzYuNi03IDguNC0xNy4yIDQuNi0yNnMtMTIuNS0xNC41LTIyLTE0LjVsLTcyIDAgMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJMMTI4IDBDMTEwLjMgMCA5NiAxNC4zIDk2IDMybDAgMjg4LTcyIDBjLTkuNiAwLTE4LjIgNS43LTIyIDE0LjV6XCJdXG59O1xuY29uc3QgZmFMb25nQXJyb3dBbHREb3duID0gZmFEb3duTG9uZztcbmNvbnN0IGZhUmFua2luZ1N0YXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmFua2luZy1zdGFyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTYxXCIsIFwiTTM1My44IDU0LjFMMzMwLjIgNi4zYy0zLjktOC4zLTE2LjEtOC42LTIwLjQgMEwyODYuMiA1NC4xbC01Mi4zIDcuNWMtOS4zIDEuNC0xMy4zIDEyLjktNi40IDE5LjhsMzggMzctOSA1Mi4xYy0xLjQgOS4zIDguMiAxNi41IDE2LjggMTIuMmw0Ni45LTI0LjggNDYuNiAyNC40YzguNiA0LjMgMTguMy0yLjkgMTYuOC0xMi4ybC05LTUyLjEgMzgtMzYuNmM2LjgtNi44IDIuOS0xOC4zLTYuNC0xOS44bC01Mi4zLTcuNXpNMjU2IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwek0zMiAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyMHptNDE2IDk2bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbmNvbnN0IGZhQ2hlc3NLaW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXNzLWtpbmcnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODE4XSwgXCJmNDNmXCIsIFwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDQ4IDE1MiAwYzIyLjEgMCA0MCAxNy45IDQwIDQwYzAgNS4zLTEgMTAuNS0zLjEgMTUuNEwzNjggNDAwIDgwIDQwMCAzLjEgMjE1LjRDMSAyMTAuNSAwIDIwNS4zIDAgMjAwYzAtMjIuMSAxNy45LTQwIDQwLTQwbDE1MiAwIDAtNDgtMTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtMTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTM4LjYgNDczLjRMODAgNDMybDI4OCAwIDQxLjQgNDEuNGM0LjIgNC4yIDYuNiAxMCA2LjYgMTZjMCAxMi41LTEwLjEgMjIuNi0yMi42IDIyLjZMNTQuNiA1MTJDNDIuMSA1MTIgMzIgNTAxLjkgMzIgNDg5LjRjMC02IDIuNC0xMS44IDYuNi0xNnpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkhhcmFzc2luZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24taGFyYXNzaW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTQ5XCIsIFwiTTE5MiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTU5LjQgMzA0LjVMODggMjU2LjkgODggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQ0LjcgNDcuNCA1Ny4xYzExLjMgMTMuNiAzMS41IDE1LjUgNDUuMSA0LjJzMTUuNS0zMS41IDQuMi00NS4xbC03My43LTg4LjljLTE4LjItMjItNDUuMy0zNC43LTczLjktMzQuN2wtMzUuOSAwYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOXpNNDgwIDI0MGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00NjQgMzQ0bDAgNTguNy00MS40LTQxLjRjLTcuMy03LjMtMTcuNi0xMC42LTI3LjgtOXMtMTguOSA4LjEtMjMuNSAxNy4zbC00OCA5NmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zTDQwOC44IDQzOGw1NC43IDU0LjdjMTIuNCAxMi40IDI5LjEgMTkuMyA0Ni42IDE5LjNjMzYuNCAwIDY1LjktMjkuNSA2NS45LTY1LjlMNTc2IDM0NGMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NnpNMjg4IDQ4YzAgOC44IDcuMiAxNiAxNiAxNmw1NiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bS0uOCA0OS43Yy03LjktNC0xNy41LS43LTIxLjUgNy4ycy0uNyAxNy41IDcuMiAyMS41bDQ4IDI0YzcuOSA0IDE3LjUgLjcgMjEuNS03LjJzLjctMTcuNS03LjItMjEuNWwtNDgtMjR6XCJdXG59O1xuY29uc3QgZmFCcmF6aWxpYW5SZWFsU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmF6aWxpYW4tcmVhbC1zaWduJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNDZjXCIsIFwiTTQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTguMmMxMi41IDIuMyAyNC43IDYuNCAzNi4yIDEyLjFsMTAuMSA1LjFjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOXMtMjcuMSAyMi4yLTQyLjkgMTQuM2wtMTAuMi01LjFjLTkuOS01LTIwLjktNy41LTMyLTcuNWwtMS43IDBjLTI5LjggMC01My45IDI0LjEtNTMuOSA1My45YzAgMjIgMTMuNCA0MS44IDMzLjkgNTBsNTIgMjAuOGM0NC43IDE3LjkgNzQuMSA2MS4yIDc0LjEgMTA5LjRsMCAzLjRjMCA1MS4yLTMzLjYgOTQuNi04MCAxMDkuMmwwIDIxLjNjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOS40Yy0xNS0zLjUtMjkuNC05LjctNDIuMy0xOC4zbC0yMy40LTE1LjZjLTE0LjctOS44LTE4LjctMjkuNy04LjktNDQuNHMyOS43LTE4LjcgNDQuNC04LjlMMzYxLjIgMzg5YzEwLjggNy4yIDIzLjQgMTEgMzYuMyAxMWMyNy45IDAgNTAuNS0yMi42IDUwLjUtNTAuNWwwLTMuNGMwLTIyLTEzLjQtNDEuOC0zMy45LTUwbC01Mi0yMC44QzMxNy4zIDI1Ny40IDI4OCAyMTQuMSAyODggMTY1LjlDMjg4IDExNCAzMjEuNSA3MCAzNjggNTQuMkwzNjggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsODAgMGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDU4LjgtMzUuMiAxMDkuMy04NS43IDEzMS43bDUxLjQgMTI4LjRjNi42IDE2LjQtMS40IDM1LTE3LjggNDEuNnMtMzUtMS40LTQxLjYtMTcuOEwxMDYuMyAzMjAgNjQgMzIwbDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDAgMjg4IDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwTDY0IDk2bDAgMTYwelwiXVxufTtcbmNvbnN0IGZhTGFuZG1hcmtEb21lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xhbmRtYXJrLWRvbWUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImxhbmRtYXJrLWFsdFwiXSwgXCJmNzUyXCIsIFwiTTI0OCAwbDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMC43QzM2OC40IDQ4LjEgNDMxLjkgMTExLjYgNDQ1LjMgMTkybDIuNyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyLjcgMEM4MC4xIDExMS42IDE0My42IDQ4LjEgMjI0IDM0LjdMMjI0IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0ek02NCAyODhsNjQgMCAwIDEyOCA0MCAwIDAtMTI4IDY0IDAgMCAxMjggNDggMCAwLTEyOCA2NCAwIDAgMTI4IDQwIDAgMC0xMjggNjQgMCAwIDEzMi4zYy42IC4zIDEuMiAuNyAxLjggMS4xbDQ4IDMyYzExLjcgNy44IDE3IDIyLjQgMTIuOSAzNS45UzQ5NC4xIDUxMiA0ODAgNTEyTDMyIDUxMmMtMTQuMSAwLTI2LjUtOS4yLTMwLjYtMjIuN3MxLjEtMjguMSAxMi45LTM1LjlsNDgtMzJjLjYtLjQgMS4yLS43IDEuOC0xLjFMNjQgMjg4elwiXVxufTtcbmNvbnN0IGZhTGFuZG1hcmtBbHQgPSBmYUxhbmRtYXJrRG9tZTtcbmNvbnN0IGZhQXJyb3dVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cCcsXG4gIGljb246IFszODQsIDUxMiwgWzg1OTNdLCBcImYwNjJcIiwgXCJNMjE0LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTYwIDE0MS4yIDE2MCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43TDMyOS40IDI0Ni42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjB6XCJdXG59O1xuY29uc3QgZmFUdiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0dicsXG4gIGljb246IFs2NDAsIDUxMiwgWzYzNzE3LCBcInRlbGV2aXNpb25cIiwgXCJ0di1hbHRcIl0sIFwiZjI2Y1wiLCBcIk02NCA2NGwwIDI4OCA1MTIgMCAwLTI4OEw2NCA2NHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMNTc2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDE2Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0xMjggNDQ4bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl1cbn07XG5jb25zdCBmYVRlbGV2aXNpb24gPSBmYVR2O1xuY29uc3QgZmFUdkFsdCA9IGZhVHY7XG5jb25zdCBmYVNocmltcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaHJpbXAnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjk0MjRdLCBcImU0NDhcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnMyOC43IDY0IDY0IDY0bDEgMGMzLjcgODguOSA3NyAxNjAgMTY3IDE2MGw1NiAwIDAtMTkyLTI0IDBMODguOCAxMjggNjQgMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQwMCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2TDY0IDMyek0yMjQgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDcyIDAgMC03Mi4yLTY0LjEtMjIuNGMtMTIuNS00LjQtMjYuMiAyLjItMzAuNiAxNC43czIuMiAyNi4yIDE0LjcgMzAuNmw0LjUgMS42QzIzMyA0MzMuOSAyMjQgNDQzLjkgMjI0IDQ1NnptMTI4IDIzLjNjMzYuNC0zLjMgNjkuNS0xNy42IDk2LjEtMzkuNmwtODYuNS0zNC42Yy0zIDEuOC02LjIgMy4yLTkuNiA0LjNsMCA2OS45ek00NzIuNiA0MTVjMjQuNi0zMC4zIDM5LjQtNjguOSAzOS40LTExMWMwLTEyLjMtMS4zLTI0LjMtMy43LTM1LjlMMzgyLjggMzU1LjFjLjggMy40IDEuMiA3IDEuMiAxMC42YzAgNC42LS43IDktMS45IDEzLjFMNDcyLjYgNDE1ek0zMzYgMTI4bC0xNiAwIDAgMTkyIDE4LjMgMGM5LjkgMCAxOS4xIDMuMiAyNi42IDguNWwxMzMuNS05Mi40QzQ3MS44IDE3Mi42IDQwOS4xIDEyOCAzMzYgMTI4ek0xNjggMTkyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6XCJdXG59O1xuY29uc3QgZmFMaXN0Q2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGlzdC1jaGVjaycsXG4gIGljb246IFs1MTIsIDUxMiwgW1widGFza3NcIl0sIFwiZjBhZVwiLCBcIk0xNTIuMSAzOC4yYzkuOSA4LjkgMTAuNyAyNCAxLjggMzMuOWwtNzIgODBjLTQuNCA0LjktMTAuNiA3LjgtMTcuMiA3LjlzLTEyLjktMi40LTE3LjYtN0w3IDExM0MtMi4zIDEwMy42LTIuMyA4OC40IDcgNzlzMjQuNi05LjQgMzMuOSAwbDIyLjEgMjIuMSA1NS4xLTYxLjJjOC45LTkuOSAyNC0xMC43IDMzLjktMS44em0wIDE2MGM5LjkgOC45IDEwLjcgMjQgMS44IDMzLjlsLTcyIDgwYy00LjQgNC45LTEwLjYgNy44LTE3LjIgNy45cy0xMi45LTIuNC0xNy42LTdMNyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyMi4xIDIyLjEgNTUuMS02MS4yYzguOS05LjkgMjQtMTAuNyAzMy45LTEuOHpNMjI0IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE2MCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI4OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDggMzY4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpcIl1cbn07XG5jb25zdCBmYVRhc2tzID0gZmFMaXN0Q2hlY2s7XG5jb25zdCBmYUp1Z0RldGVyZ2VudCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdqdWctZGV0ZXJnZW50JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJlNTE5XCIsIFwiTTk2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggOTZDNzQuNyA5NiA2NCA4NS4zIDY0IDcyczEwLjctMjQgMjQtMjRsOCAwIDAtMjR6TTAgMjU2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDEyOCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyNTZ6bTI1NiAwbDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyelwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtdXNlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzYyMTQyLCBcInVzZXItY2lyY2xlXCJdLCBcImYyYmRcIiwgXCJNMzk5IDM4NC4yQzM3Ni45IDM0NS44IDMzNS40IDMyMCAyODggMzIwbC02NCAwYy00Ny40IDAtODguOSAyNS44LTExMSA2NC4yYzM1LjIgMzkuMiA4Ni4yIDYzLjggMTQzIDYzLjhzMTA3LjgtMjQuNyAxNDMtNjMuOHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0yNTYgMTZhNzIgNzIgMCAxIDAgMC0xNDQgNzIgNzIgMCAxIDAgMCAxNDR6XCJdXG59O1xuY29uc3QgZmFVc2VyQ2lyY2xlID0gZmFDaXJjbGVVc2VyO1xuY29uc3QgZmFVc2VyU2hpZWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItc2hpZWxkJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTA1XCIsIFwiTTIyNCAyNTZBMTI4IDEyOCAwIDEgMCAyMjQgMGExMjggMTI4IDAgMSAwIDAgMjU2em0tNDUuNyA0OEM3OS44IDMwNCAwIDM4My44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMmwzODguNiAwYzEuOCAwIDMuNS0uMiA1LjMtLjVjLTc2LjMtNTUuMS05OS44LTE0MS0xMDMuMS0yMDAuMmMtMTYuMS00LjgtMzMuMS03LjMtNTAuNy03LjNsLTkxLjQgMHptMzA4LjgtNzguM2wtMTIwIDQ4QzM1OCAyNzcuNCAzNTIgMjg2LjIgMzUyIDI5NmMwIDYzLjMgMjUuOSAxNjguOCAxMzQuOCAyMTQuMmM1LjkgMi41IDEyLjYgMi41IDE4LjUgMEM2MTQuMSA0NjQuOCA2NDAgMzU5LjMgNjQwIDI5NmMwLTkuOC02LTE4LjYtMTUuMS0yMi4zbC0xMjAtNDhjLTUuNy0yLjMtMTIuMS0yLjMtMTcuOCAwek01OTEuNCAzMTJjLTMuOSA1MC43LTI3LjIgMTE2LjctOTUuNCAxNDkuN2wwLTE4Ny44TDU5MS40IDMxMnpcIl1cbn07XG5jb25zdCBmYVdpbmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2luZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjcyZVwiLCBcIk0yODggMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZMMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem02NCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NkwzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xMjggNTEybDMyIDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZMMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXVxufTtcbmNvbnN0IGZhQ2FyQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FyLWJ1cnN0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJjYXItY3Jhc2hcIl0sIFwiZjVlMVwiLCBcIk0xNzYgOGMtNi42IDAtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NEw1NS42IDY4LjljLTYuMy0xLjktMTMuMSAuMi0xNy4yIDUuM3MtNC42IDEyLjItMS40IDE3LjlsMzkuNSA2OS4xTDEwLjkgMjA2LjRjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43czYuNyAxMS4yIDEzLjEgMTIuMmw3OC43IDEyLjJMOTAuNiAzMjdjLS41IDYuNSAzLjEgMTIuNyA5IDE1LjVzMTIuOSAxLjggMTcuOC0yLjZsMzUuMy0zMi41IDkuNS0zNS40IDEwLjQtMzguNmM4LTI5LjkgMzAuNS01Mi4xIDU3LjktNjAuOWw0MS01OS4yYzExLjMtMTYuMyAyNi40LTI4LjkgNDMuNS0zNy4yYy0uNC0uNi0uOC0xLjItMS4zLTEuOGMtNC4xLTUuMS0xMC45LTcuMi0xNy4yLTUuM0wyMjAuMyA5Mi4xbC0yOS40LTc0QzE4OC40IDEyIDE4Mi42IDggMTc2IDh6TTM2Ny43IDE2MS41bDEzNS42IDM2LjNjNi41IDEuOCAxMS4zIDcuNCAxMS44IDE0LjJsNC42IDU2LjUtMjAxLjUtNTQgMzIuMi00Ni42YzMuOC01LjYgMTAuOC04LjEgMTcuMy02LjR6bS02OS45LTMwbC00Ny45IDY5LjNjLTIxLjYgMy00MC4zIDE4LjYtNDYuMyA0MWwtMTAuNCAzOC42LTE2LjYgNjEuOC04LjMgMzAuOWMtNC42IDE3LjEgNS42IDM0LjYgMjIuNiAzOS4ybDE1LjUgNC4xYzE3LjEgNC42IDM0LjYtNS42IDM5LjItMjIuNmw4LjMtMzAuOSAyNDcuMyA2Ni4zLTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42bDguMy0zMC45TDU5NSAzODhsMTAuNC0zOC42YzYtMjIuNC0yLjUtNDUuMi0xOS42LTU4LjdsLTYuOC04NGMtMi43LTMzLjctMjYuNC02Mi01OS03MC44TDM4NC4yIDk5LjdjLTMyLjctOC44LTY3LjMgNC04Ni41IDMxLjh6bS0xNyAxMzFhMjQgMjQgMCAxIDEgLTEyLjQgNDYuNCAyNCAyNCAwIDEgMSAxMi40LTQ2LjR6bTIxNy45IDgzLjJBMjQgMjQgMCAxIDEgNTQ1IDM1OC4xYTI0IDI0IDAgMSAxIC00Ni40LTEyLjR6XCJdXG59O1xuY29uc3QgZmFDYXJDcmFzaCA9IGZhQ2FyQnVyc3Q7XG5jb25zdCBmYVkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneScsXG4gIGljb246IFszODQsIDUxMiwgWzEyMV0sIFwiNTlcIiwgXCJNNTggNDUuNEM0Ny44IDMxIDI3LjggMjcuNyAxMy40IDM4Uy00LjMgNjguMiA2IDgyLjZMMTYwIDI5OC4zIDE2MCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0OS43TDM3OCA4Mi42YzEwLjMtMTQuNCA2LjktMzQuNC03LjQtNDQuNlMzMzYuMiAzMSAzMjYgNDUuNEwxOTIgMjMyLjkgNTggNDUuNHpcIl1cbn07XG5jb25zdCBmYVBlcnNvblNub3dib2FyZGluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tc25vd2JvYXJkaW5nJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTM4LCBcInNub3dib2FyZGluZ1wiXSwgXCJmN2NlXCIsIFwiTTIwOS43IDMuNGMxNS44LTcuOSAzNS0xLjUgNDIuOSAxNC4zbDI1IDUwIDQyLjQgOC41YzE5LjUgMy45IDM3LjggMTIuMyA1My41IDI0LjVsMTI2LjEgOTguMWMxNCAxMC45IDE2LjUgMzEgNS42IDQ0LjlzLTMxIDE2LjUtNDQuOSA1LjZsLTcyLjEtNTYuMS03MS41IDMxLjggMzMuMSAyNy42YzIzLjIgMTkuMyAzMy41IDUwIDI2LjcgNzkuNGwtMTcuNCA3NS4yYy0yLjIgOS40LTguMiAxNi44LTE2LjEgMjFsODYuNSAzMy4xYzQuNiAxLjggOS40IDIuNiAxNC4zIDIuNmwyOC4yIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI4LjIgMGMtMTAuOCAwLTIxLjQtMi0zMS41LTUuOEw2MC4xIDM3MS4zYy0xMS41LTQuNC0yMi0xMS4yLTMwLjgtMjBMNyAzMjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyMi40IDIyLjRjNCA0IDguNyA3LjEgMTQgOS4xbDIyLjQgOC42Yy0uOC0xLjYtMS41LTMuMi0yLjEtNC45Yy01LjYtMTYuOCAzLjUtMzQuOSAyMC4yLTQwLjVMMTkyIDI2NC45bDAtNTMuMmMwLTI0LjIgMTMuNy00Ni40IDM1LjQtNTcuMmw0NS4yLTIyLjYtNy41LTEuNWMtMTkuNC0zLjktMzUuOS0xNi41LTQ0LjctMzQuMWwtMjUtNTBjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjl6TTEzOSAzNTAuMWwxNTkgNjAuOWMtMi4xLTUuNi0yLjYtMTEuOS0xLjEtMTguMmwxNy40LTc1LjJjMS40LTUuOS0uNy0xMi01LjMtMTUuOWwtNTIuOC00NCAwIDE4LjhjMCAyMC43LTEzLjIgMzktMzIuOCA0NS41TDEzOSAzNTAuMXpNNDMyIDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbmNvbnN0IGZhU25vd2JvYXJkaW5nID0gZmFQZXJzb25Tbm93Ym9hcmRpbmc7XG5jb25zdCBmYVRydWNrRmFzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cnVjay1mYXN0JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJzaGlwcGluZy1mYXN0XCJdLCBcImY0OGJcIiwgXCJNMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhsMCA0OEwxNiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw0OCAwIDIwOCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDY0IDE2MGwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxNiAwIDE3NiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDY0IDIyNGwtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw0OCAwIDE0NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDY0IDI4OGwwIDEyOGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDEyOCAwYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY0IDAtMzIgMC0xOC43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxMTQuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0w0MTYgOTZsMC00OGMwLTI2LjUtMjEuNS00OC00OC00OEwxMTIgMHpNNTQ0IDIzNy4zbDAgMTguNy0xMjggMCAwLTk2IDUwLjcgMEw1NDQgMjM3LjN6TTE2MCAzNjhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0yNzIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpcIl1cbn07XG5jb25zdCBmYVNoaXBwaW5nRmFzdCA9IGZhVHJ1Y2tGYXN0O1xuY29uc3QgZmFGaXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Zpc2gnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMzFdLCBcImY1NzhcIiwgXCJNMTgwLjUgMTQxLjVDMjE5LjcgMTA4LjUgMjcyLjYgODAgMzM2IDgwczExNi4zIDI4LjUgMTU1LjUgNjEuNWMzOS4xIDMzIDY2LjkgNzIuNCA4MSA5OS44YzQuNyA5LjIgNC43IDIwLjEgMCAyOS4zYy0xNC4xIDI3LjQtNDEuOSA2Ni44LTgxIDk5LjhDNDUyLjMgNDAzLjUgMzk5LjQgNDMyIDMzNiA0MzJzLTExNi4zLTI4LjUtMTU1LjUtNjEuNWMtMTYuMi0xMy43LTMwLjUtMjguNS00Mi43LTQzLjFMNDguMSAzNzkuNmMtMTIuNSA3LjMtMjguNCA1LjMtMzguNy00LjlTLTMgMzQ4LjcgNC4yIDMzNi4xTDUwIDI1NiA0LjIgMTc1LjljLTcuMi0xMi42LTUtMjguNCA1LjMtMzguNnMyNi4xLTEyLjIgMzguNy00LjlsODkuNyA1Mi4zYzEyLjItMTQuNiAyNi41LTI5LjQgNDIuNy00My4xek00NDggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xuY29uc3QgZmFVc2VyR3JhZHVhdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1ncmFkdWF0ZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjUwMVwiLCBcIk0yMTkuMyAuNWMzLjEtLjYgNi4zLS42IDkuNCAwbDIwMCA0MEM0MzkuOSA0Mi43IDQ0OCA1Mi42IDQ0OCA2NHMtOC4xIDIxLjMtMTkuMyAyMy41TDM1MiAxMDIuOWwwIDU3LjFjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhsMC01Ny4xTDQ4IDkzLjNsMCA2NS4xIDE1LjcgNzguNGMuOSA0LjctLjMgOS42LTMuMyAxMy4zcy03LjYgNS45LTEyLjQgNS45bC0zMiAwYy00LjggMC05LjMtMi4xLTEyLjQtNS45cy00LjMtOC42LTMuMy0xMy4zTDE2IDE1OC40bDAtNzEuOEM2LjUgODMuMyAwIDc0LjMgMCA2NEMwIDUyLjYgOC4xIDQyLjcgMTkuMyA0MC41bDIwMC00MHpNMTExLjkgMzI3LjdjMTAuNS0zLjQgMjEuOCAuNCAyOS40IDguNWw3MSA3NS41YzYuMyA2LjcgMTcgNi43IDIzLjMgMGw3MS03NS41YzcuNi04LjEgMTguOS0xMS45IDI5LjQtOC41QzQwMSAzNDguNiA0NDggNDA5LjQgNDQ4IDQ4MS4zYzAgMTctMTMuOCAzMC43LTMwLjcgMzAuN0wzMC43IDUxMkMxMy44IDUxMiAwIDQ5OC4yIDAgNDgxLjNjMC03MS45IDQ3LTEzMi43IDExMS45LTE1My42elwiXVxufTtcbmNvbnN0IGZhQ2lyY2xlSGFsZlN0cm9rZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtaGFsZi1zdHJva2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5NjgwLCBcImFkanVzdFwiXSwgXCJmMDQyXCIsIFwiTTQ0OCAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJsMCAzODRjMTA2IDAgMTkyLTg2IDE5Mi0xOTJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnpcIl1cbn07XG5jb25zdCBmYUFkanVzdCA9IGZhQ2lyY2xlSGFsZlN0cm9rZTtcbmNvbnN0IGZhQ2xhcHBlcmJvYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NsYXBwZXJib2FyZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTEzMVwiLCBcIk00NDggMzJsLTg2LjEgMC0xIDEtMTI3IDEyNyA5Mi4xIDAgMS0xTDQ1My44IDMyLjNjLTEuOS0uMi0zLjgtLjMtNS44LS4zem02NCAxMjhsMC02NGMwLTE1LjEtNS4zLTI5LjEtMTQtNDBsLTEwNCAxMDRMNTEyIDE2MHpNMjk0LjEgMzJsLTkyLjEgMC0xIDFMNzMuOSAxNjBsOTIuMSAwIDEtMSAxMjctMTI3ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjQgNi4xIDAgMS0xIDEyNy0xMjdMNjQgMzJ6TTUxMiAxOTJMMCAxOTIgMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjR6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVSYWRpYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2lyY2xlLXJhZGlhdGlvbicsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3NjIsIFwicmFkaWF0aW9uLWFsdFwiXSwgXCJmN2JhXCIsIFwiTTI1NiA2NGExOTIgMTkyIDAgMSAxIDAgMzg0IDE5MiAxOTIgMCAxIDEgMC0zODR6bTAgNDQ4QTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjAwIDI1NmMwLTIwLjcgMTEuMy0zOC44IDI4LTQ4LjVsLTM2LTYyLjNjLTguOC0xNS4zLTI4LjctMjAuOC00Mi05Yy0yNS42IDIyLjYtNDMuOSA1My4zLTUwLjkgODguMUM5NS43IDI0MS41IDExMC4zIDI1NiAxMjggMjU2bDcyIDB6bTI4IDQ4LjVsLTM2IDYyLjRjLTguOCAxNS4zLTMuNiAzNS4yIDEzLjEgNDAuOGMxNiA1LjQgMzMuMSA4LjMgNTAuOSA4LjNzMzQuOS0yLjkgNTAuOS04LjNjMTYuNy01LjYgMjEuOS0yNS41IDEzLjEtNDAuOGwtMzYtNjIuNGMtOC4yIDQuOC0xNy44IDcuNS0yOCA3LjVzLTE5LjgtMi43LTI4LTcuNXpNMzEyIDI1Nmw3MiAwYzE3LjcgMCAzMi4zLTE0LjUgMjguOC0zMS44Yy03LTM0LjgtMjUuMy02NS41LTUwLjktODguMWMtMTMuMi0xMS43LTMzLjEtNi4zLTQyIDlsLTM2IDYyLjNjMTYuNyA5LjcgMjggMjcuOCAyOCA0OC41em0tNTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0elwiXVxufTtcbmNvbnN0IGZhUmFkaWF0aW9uQWx0ID0gZmFDaXJjbGVSYWRpYXRpb247XG5jb25zdCBmYUJhc2ViYWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jhc2ViYWxsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzU4LCA5OTE4LCBcImJhc2ViYWxsLWJhbGxcIl0sIFwiZjQzM1wiLCBcIk02Mi43IDIyMy40Yy00LjggLjQtOS43IC42LTE0LjcgLjZjLTE1LjYgMC0zMC44LTItNDUuMi01LjlDMTkuMiAxMDcuMSAxMDcuMSAxOS4yIDIxOC4xIDIuOEMyMjIgMTcuMiAyMjQgMzIuNCAyMjQgNDhjMCA0LjktLjIgOS44LS42IDE0LjdjLS43IDguOCA1LjggMTYuNSAxNC42IDE3LjNzMTYuNS01LjggMTcuMy0xNC42Yy41LTUuNyAuNy0xMS41IC43LTE3LjNjMC0xNi41LTEuOS0zMi42LTUuNi00Ny45YzEuOCAwIDMuNy0uMSA1LjYtLjFDMzk3LjQgMCA1MTIgMTE0LjYgNTEyIDI1NmMwIDEuOSAwIDMuNy0uMSA1LjZjLTE1LjQtMy42LTMxLjQtNS42LTQ3LjktNS42Yy01LjggMC0xMS42IC4yLTE3LjMgLjdjLTguOCAuNy0xNS40IDguNS0xNC42IDE3LjNzOC41IDE1LjQgMTcuMyAxNC42YzQuOC0uNCA5LjctLjYgMTQuNy0uNmMxNS42IDAgMzAuOCAyIDQ1LjIgNS45QzQ5Mi44IDQwNC45IDQwNC45IDQ5Mi44IDI5My45IDUwOS4yQzI5MCA0OTQuOCAyODggNDc5LjYgMjg4IDQ2NGMwLTQuOSAuMi05LjggLjYtMTQuN2MuNy04LjgtNS44LTE2LjUtMTQuNi0xNy4zcy0xNi41IDUuOC0xNy4zIDE0LjZjLS41IDUuNy0uNyAxMS41LS43IDE3LjNjMCAxNi41IDEuOSAzMi42IDUuNiA0Ny45Yy0xLjggMC0zLjcgLjEtNS42IC4xQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2YzAtMS45IDAtMy43IC4xLTUuNkMxNS40IDI1NC4xIDMxLjUgMjU2IDQ4IDI1NmM1LjggMCAxMS42LS4yIDE3LjMtLjdjOC44LS43IDE1LjQtOC41IDE0LjYtMTcuM3MtOC41LTE1LjQtMTcuMy0xNC42ek0xMjEuMyAyMDhjLTggMy43LTExLjYgMTMuMi03LjkgMjEuMnMxMy4yIDExLjYgMjEuMiA3LjljNDUuMi0yMC44IDgxLjctNTcuMiAxMDIuNS0xMDIuNWMzLjctOCAuMi0xNy41LTcuOS0yMS4ycy0xNy41LS4yLTIxLjIgNy45Yy0xNy42IDM4LjMtNDguNSA2OS4yLTg2LjcgODYuN3ptMjc3LjIgNzQuN2MtMy43LTgtMTMuMi0xMS42LTIxLjItNy45Yy00NS4yIDIwLjgtODEuNyA1Ny4yLTEwMi41IDEwMi41Yy0zLjcgOC0uMiAxNy41IDcuOSAyMS4yczE3LjUgLjIgMjEuMi03LjljMTcuNi0zOC4zIDQ4LjUtNjkuMiA4Ni43LTg2LjdjOC0zLjcgMTEuNi0xMy4yIDcuOS0yMS4yelwiXVxufTtcbmNvbnN0IGZhQmFzZWJhbGxCYWxsID0gZmFCYXNlYmFsbDtcbmNvbnN0IGZhSmV0RmlnaHRlclVwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2pldC1maWdodGVyLXVwJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTE4XCIsIFwiTTI3MC43IDkuN0MyNjguMiAzLjggMjYyLjQgMCAyNTYgMHMtMTIuMiAzLjgtMTQuNyA5LjdMMTk3LjIgMTEyLjZjLTMuNCA4LTUuMiAxNi41LTUuMiAyNS4ybDAgNzctMTQ0IDg0TDQ4IDI4MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDU2IDAgMzIgMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOCAxNDQgMCAwIDMyLjdMMTMzLjUgNDY4Yy0zLjUgMy01LjUgNy40LTUuNSAxMmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmw5NiAwIDAtNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDY0IDk2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC00LjYtMi05LTUuNS0xMkwzMjAgNDE2LjdsMC0zMi43IDE0NCAwIDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQgMC0zMiAwLTU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTguOC0xNDQtODQgMC03N2MwLTguNy0xLjgtMTcuMi01LjItMjUuMkwyNzAuNyA5Ljd6XCJdXG59O1xuY29uc3QgZmFEaWFncmFtUHJvamVjdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaWFncmFtLXByb2plY3QnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInByb2plY3QtZGlhZ3JhbVwiXSwgXCJmNTQyXCIsIFwiTTAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDE5MiAwIDAtMTZjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2LTE5MiAwIDAgMTZjMCAxLjctLjEgMy40LS4zIDVMMjcyIDI4OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0xLjcgLjEtMy40IC4zLTVMMTQ0IDIyNGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHpcIl1cbn07XG5jb25zdCBmYVByb2plY3REaWFncmFtID0gZmFEaWFncmFtUHJvamVjdDtcbmNvbnN0IGZhQ29weSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb3B5JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMGM1XCIsIFwiTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHpcIl1cbn07XG5jb25zdCBmYVZvbHVtZVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZvbHVtZS14bWFyaycsXG4gIGljb246IFs1NzYsIDUxMiwgW1widm9sdW1lLW11dGVcIiwgXCJ2b2x1bWUtdGltZXNcIl0sIFwiZjZhOVwiLCBcIk0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NGwwIDM4NGMwIDEyLjYtNy40IDI0LTE4LjkgMjkuMnMtMjUgMy4xLTM0LjQtNS4zTDEzMS44IDM1MiA2NCAzNTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjcuOCAwTDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6TTQyNSAxNjdsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXVxufTtcbmNvbnN0IGZhVm9sdW1lTXV0ZSA9IGZhVm9sdW1lWG1hcms7XG5jb25zdCBmYVZvbHVtZVRpbWVzID0gZmFWb2x1bWVYbWFyaztcbmNvbnN0IGZhSGFuZFNwYXJrbGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtc3BhcmtsZXMnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImUwNWRcIiwgXCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTE3NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0xMTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE5NS4xYy0xMS45IDQuOC0yMS4zIDE0LjktMjUgMjcuOGwtOC45IDMxLjJMNDc4LjkgMzkxQzQ2MC42IDM5Ni4zIDQ0OCA0MTMgNDQ4IDQzMmMwIDE4LjkgMTIuNSAzNS42IDMwLjYgNDAuOUM0NDguNCA0OTcuNCA0MDkuOSA1MTIgMzY4IDUxMmwtMTkuMiAwYy01OS42IDAtMTE2LjktMjIuOS0xNjAtNjRMNzYuNCAzNDFjLTE2LTE1LjItMTYuNi00MC42LTEuNC01Ni42czQwLjYtMTYuNiA1Ni42LTEuNGw2MC41IDU3LjZjMC0xLjUtLjEtMy4xLS4xLTQuNmwwLTI3MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS03LjMgMzI2LjZjLTEuMS0zLjktNC43LTYuNi04LjctNi42cy03LjYgMi43LTguNyA2LjZMMjg4IDM1MmwtMjUuNCA3LjNjLTMuOSAxLjEtNi42IDQuNy02LjYgOC43czIuNyA3LjYgNi42IDguN0wyODggMzg0bDcuMyAyNS40YzEuMSAzLjkgNC43IDYuNiA4LjcgNi42czcuNi0yLjcgOC43LTYuNkwzMjAgMzg0bDI1LjQtNy4zYzMuOS0xLjEgNi42LTQuNyA2LjYtOC43cy0yLjctNy42LTYuNi04LjdMMzIwIDM1MmwtNy4zLTI1LjR6TTEwNCAxMjBsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkwxMDQgMTY4IDkwLjIgMjE2LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1NiAxNjggNy43IDE1NC4yQzMuMSAxNTIuOSAwIDE0OC43IDAgMTQ0czMuMS04LjkgNy43LTEwLjJMNTYgMTIwIDY5LjggNzEuN0M3MS4xIDY3LjEgNzUuMyA2NCA4MCA2NHM4LjkgMy4xIDEwLjIgNy43TDEwNCAxMjB6TTU4NCA0MDhsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkw1ODQgNDU2bC0xMy44IDQ4LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1MzYgNDU2bC00OC4zLTEzLjhjLTQuNi0xLjMtNy43LTUuNS03LjctMTAuMnMzLjEtOC45IDcuNy0xMC4yTDUzNiA0MDhsMTMuOC00OC4zYzEuMy00LjYgNS41LTcuNyAxMC4yLTcuN3M4LjkgMy4xIDEwLjIgNy43TDU4NCA0MDh6XCJdXG59O1xuY29uc3QgZmFHcmlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyaXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImdyaXAtaG9yaXpvbnRhbFwiXSwgXCJmNThkXCIsIFwiTTEyOCAxMzZjMC0yMi4xLTE3LjktNDAtNDAtNDBMNDAgOTZDMTcuOSA5NiAwIDExMy45IDAgMTM2bDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4em0wIDE5MmMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6bTMyLTE5MmwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTI4OCAzMjhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4em0zMi0xOTJsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek00NDggMzI4YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHpcIl1cbn07XG5jb25zdCBmYUdyaXBIb3Jpem9udGFsID0gZmFHcmlwO1xuY29uc3QgZmFTaGFyZUZyb21TcXVhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hhcmUtZnJvbS1zcXVhcmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFs2MTUwOSwgXCJzaGFyZS1zcXVhcmVcIl0sIFwiZjE0ZFwiLCBcIk0zNTIgMjI0bC00Ni41IDBjLTQ1IDAtODEuNSAzNi41LTgxLjUgODEuNWMwIDIyLjMgMTAuMyAzNC4zIDE5LjIgNDAuNWM2LjggNC43IDEyLjggMTIgMTIuOCAyMC4zYzAgOS44LTggMTcuOC0xNy44IDE3LjhsLTIuNSAwYy0yLjQgMC00LjgtLjQtNy4xLTEuNEMyMTAuOCAzNzQuOCAxMjggMzMzLjQgMTI4IDI0MGMwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NGw4MCAwIDAtNjEuM0MzNTIgMTUuNSAzNjcuNSAwIDM4Ni43IDBjOC42IDAgMTYuOCAzLjIgMjMuMiA4LjlMNTQ4LjEgMTMzLjNjNy42IDYuOCAxMS45IDE2LjUgMTEuOSAyNi43cy00LjMgMTkuOS0xMS45IDI2LjdsLTEzOSAxMjUuMWMtNS45IDUuMy0xMy41IDguMi0yMS40IDguMmwtMy43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjR6TTgwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OGMwIDQ0LjItMzUuOCA4MC04MCA4MEw4MCA1MTJjLTQ0LjIgMC04MC0zNS44LTgwLTgwTDAgMTEyQzAgNjcuOCAzNS44IDMyIDgwIDMybDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgOTZ6XCJdXG59O1xuY29uc3QgZmFTaGFyZVNxdWFyZSA9IGZhU2hhcmVGcm9tU3F1YXJlO1xuY29uc3QgZmFDaGlsZENvbWJhdGFudCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGlsZC1jb21iYXRhbnQnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImNoaWxkLXJpZmxlXCJdLCBcImU0ZTBcIiwgXCJNMTc2IDEyOEE2NCA2NCAwIDEgMCAxNzYgMGE2NCA2NCAwIDEgMCAwIDEyOHptLTggMzUybDAtMTI4IDE2IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE3OS41TDI2MC45IDMyMWM5LjQgMTUgMjkuMiAxOS40IDQ0LjEgMTBzMTkuNC0yOS4yIDEwLTQ0LjFsLTUxLjctODIuMWMtMTcuNi0yNy45LTQ4LjMtNDQuOS04MS4yLTQ0LjlsLTEyLjMgMGMtMzMgMC02My43IDE2LjktODEuMiA0NC45TDM2LjkgMjg3Yy05LjQgMTUtNC45IDM0LjcgMTAgNDQuMXMzNC43IDQuOSA0NC4xLTEwTDEwNCAzMDAuNSAxMDQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTQ0OCAwTDQzMiAwIDQxNiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDAgMTAwLjNjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTQ0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDAgMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsNTkuNSAwYzEwLjQgMCAxOC05LjggMTUuNS0xOS45TDQ4NCA0MDBsNDQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC0yNi43IDUzLjEtMTcuN2M2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMmwwLTg0LjVjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA1Ni0xNiA1LjNMNDgwIDE2MGMwLTExLjgtNi40LTIyLjItMTYtMjcuN0w0NjQgMTZjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbmNvbnN0IGZhQ2hpbGRSaWZsZSA9IGZhQ2hpbGRDb21iYXRhbnQ7XG5jb25zdCBmYUd1biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdndW4nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImUxOWJcIiwgXCJNNTI4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOEwzMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2TDAgMjA4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwIDBjMjAuOCAwIDM2LjEgMTkuNiAzMSAzOS44TDMzIDQ0MC4yYy0yLjQgOS42LS4yIDE5LjcgNS44IDI3LjVTNTQuMSA0ODAgNjQgNDgwbDk2IDBjMTQuNyAwIDI3LjUtMTAgMzEtMjQuMkwyMTcgMzUybDEwNC41IDBjMjMuNyAwIDQ0LjgtMTQuOSA1Mi43LTM3LjJMNDAwLjkgMjQwbDMxLjEgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNEw0NzcuMyAyMDhsNjYuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2IDAgMC04ek0zMjEuNCAzMDRMMjI5IDMwNGwxNi02NCAxMDUgMC0yMSA1OC43Yy0xLjEgMy4yLTQuMiA1LjMtNy41IDUuM3pNODAgMTI4bDM4NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDgwIDE2MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYVNxdWFyZVBob25lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1waG9uZScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wicGhvbmUtc3F1YXJlXCJdLCBcImYwOThcIiwgXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptOTAuNyA5Ni43YzkuNy0yLjYgMTkuOSAyLjMgMjMuNyAxMS42bDIwIDQ4YzMuNCA4LjIgMSAxNy42LTUuOCAyMy4yTDE2OCAyMzEuN2MxNi42IDM1LjIgNDUuMSA2My43IDgwLjMgODAuM2wyMC4yLTI0LjdjNS42LTYuOCAxNS05LjIgMjMuMi01LjhsNDggMjBjOS4zIDMuOSAxNC4yIDE0IDExLjYgMjMuN2wtMTIgNDRDMzM2LjkgMzc4IDMyOSAzODQgMzIwIDM4NEMxOTYuMyAzODQgOTYgMjgzLjcgOTYgMTYwYzAtOSA2LTE2LjkgMTQuNy0xOS4zbDQ0LTEyelwiXVxufTtcbmNvbnN0IGZhUGhvbmVTcXVhcmUgPSBmYVNxdWFyZVBob25lO1xuY29uc3QgZmFQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdXMnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMDEzMywgNjE1NDMsIFwiYWRkXCJdLCBcIjJiXCIsIFwiTTI1NiA4MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0NEw0OCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTQ0IDAgMCAxNDRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0NCAxNDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTQ0IDAgMC0xNDR6XCJdXG59O1xuY29uc3QgZmFBZGQgPSBmYVBsdXM7XG5jb25zdCBmYUV4cGFuZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdleHBhbmQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwNjVcIiwgXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtNjR6TTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwek00NDggMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjQtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZ6XCJdXG59O1xuY29uc3QgZmFDb21wdXRlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb21wdXRlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRlNVwiLCBcIk0zODQgOTZsMCAyMjRMNjQgMzIwIDY0IDk2bDMyMCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzIwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDExNy4zIDAtMTAuNyAzMkw5NiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTc0LjcgMC0xMC43LTMyTDM4NCAzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTQ2NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDM1MmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwem0xNiA2NGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tMTYgODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnptMzIgMTYwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYVhtYXJrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3htYXJrJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDczLCAxMDAwNSwgMTAwMDYsIDEwMDYwLCAyMTUsIFwiY2xvc2VcIiwgXCJtdWx0aXBseVwiLCBcInJlbW92ZVwiLCBcInRpbWVzXCJdLCBcImYwMGRcIiwgXCJNMzQyLjYgMTUwLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDIxMC43IDg2LjYgMTA1LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ni43IDI1NiA0MS40IDM2MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAzMDEuMyAyOTcuNCA0MDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIzNy4zIDI1NiAzNDIuNiAxNTAuNnpcIl1cbn07XG5jb25zdCBmYUNsb3NlID0gZmFYbWFyaztcbmNvbnN0IGZhTXVsdGlwbHkgPSBmYVhtYXJrO1xuY29uc3QgZmFSZW1vdmUgPSBmYVhtYXJrO1xuY29uc3QgZmFUaW1lcyA9IGZhWG1hcms7XG5jb25zdCBmYUFycm93c1VwRG93bkxlZnRSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtdXAtZG93bi1sZWZ0LXJpZ2h0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhcnJvd3NcIl0sIFwiZjA0N1wiLCBcIk0yNzguNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5LjQtOS40TDIyNCAyMjRsLTExNC43IDAgOS40LTkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjRMMjI0IDI4OGwwIDExNC43LTkuNC05LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05LjQgOS40TDI4OCAyODhsMTE0LjcgMC05LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNEwyODggMjI0bDAtMTE0LjcgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHpcIl1cbn07XG5jb25zdCBmYUFycm93cyA9IGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0O1xuY29uc3QgZmFDaGFsa2JvYXJkVXNlciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGFsa2JvYXJkLXVzZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImNoYWxrYm9hcmQtdGVhY2hlclwiXSwgXCJmNTFjXCIsIFwiTTE2MCA2NGMwLTM1LjMgMjguNy02NCA2NC02NEw1NzYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjM5LjIgMGMtMTEuOC0yNS41LTI5LjktNDcuNS01Mi40LTY0bDk5LjYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiA2NCAwIDAtMjg4TDIyNCA2NGwwIDQ5LjFDMjA1LjIgMTAyLjIgMTgzLjMgOTYgMTYwIDk2bDAtMzJ6bTAgNjRhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6TTEzMy4zIDM1Mmw1My4zIDBDMjYwLjMgMzUyIDMyMCA0MTEuNyAzMjAgNDg1LjNjMCAxNC43LTExLjkgMjYuNy0yNi43IDI2LjdMMjYuNyA1MTJDMTEuOSA1MTIgMCA1MDAuMSAwIDQ4NS4zQzAgNDExLjcgNTkuNyAzNTIgMTMzLjMgMzUyelwiXVxufTtcbmNvbnN0IGZhQ2hhbGtib2FyZFRlYWNoZXIgPSBmYUNoYWxrYm9hcmRVc2VyO1xuY29uc3QgZmFQZXNvU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXNvLXNpZ24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUyMjJcIiwgXCJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0bDAgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDY0IDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDgwIDBjNjguNCAwIDEyNy43LTM5IDE1Ni44LTk2bDE5LjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtLjcgMGMuNS01LjMgLjctMTAuNiAuNy0xNnMtLjItMTAuNy0uNy0xNmwuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOS4yIDBDMzAzLjcgNzEgMjQ0LjQgMzIgMTc2IDMyTDY0IDMyem0xOTAuNCA5Nkw5NiAxMjhsMC0zMiA4MCAwYzMwLjUgMCA1OC4yIDEyLjIgNzguNCAzMnpNOTYgMTkybDE5MC45IDBjLjcgNS4yIDEuMSAxMC42IDEuMSAxNnMtLjQgMTAuOC0xLjEgMTZMOTYgMjI0bDAtMzJ6bTE1OC40IDk2Yy0yMC4yIDE5LjgtNDcuOSAzMi03OC40IDMybC04MCAwIDAtMzIgMTU4LjQgMHpcIl1cbn07XG5jb25zdCBmYUJ1aWxkaW5nU2hpZWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1aWxkaW5nLXNoaWVsZCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTRkOFwiLCBcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE1OS00Mi40IDE3TDMwNCAyMjRsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyIDAgMjQuMiAwIDcuOGMwIC45IC4xIDEuNyAuMiAyLjZjMi4zIDU4LjEgMjQuMSAxNDQuOCA5OC43IDIwMS41Yy01LjggMi41LTEyLjIgMy45LTE4LjkgMy45bC05NiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhsMCA4MC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4ek04MCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptODAgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNNjQgMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2TDgwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6TTE3NiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem04MCAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek00MjMuMSAyMjUuN2M1LjctMi4zIDEyLjEtMi4zIDE3LjggMGwxMjAgNDhDNTcwIDI3Ny40IDU3NiAyODYuMiA1NzYgMjk2YzAgNjMuMy0yNS45IDE2OC44LTEzNC44IDIxNC4yYy01LjkgMi41LTEyLjYgMi41LTE4LjUgMEMzMTMuOSA0NjQuOCAyODggMzU5LjMgMjg4IDI5NmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMC00OHpNNTI3LjQgMzEyTDQzMiAyNzMuOGwwIDE4Ny44YzY4LjItMzMgOTEuNS05OSA5NS40LTE0OS43elwiXVxufTtcbmNvbnN0IGZhQmFieSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYWJ5JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmNzdjXCIsIFwiTTE1MiA4OGE3MiA3MiAwIDEgMSAxNDQgMEE3MiA3MiAwIDEgMSAxNTIgODh6TTM5LjcgMTQ0LjVjMTMtMTcuOSAzOC0yMS44IDU1LjktOC44TDEzMS44IDE2MmMyNi44IDE5LjUgNTkuMSAzMCA5Mi4yIDMwczY1LjQtMTAuNSA5Mi4yLTMwbDM2LjItMjYuNGMxNy45LTEzIDQyLjktOSA1NS45IDguOHM5IDQyLjktOC44IDU1LjlsLTM2LjIgMjYuNGMtMTMuNiA5LjktMjguMSAxOC4yLTQzLjMgMjVsMCAzNi4zLTE5MiAwIDAtMzYuM2MtMTUuMi02LjctMjkuNy0xNS4xLTQzLjMtMjVMNDguNSAyMDAuM2MtMTcuOS0xMy0yMS44LTM4LTguOC01NS45em04OS44IDE4NC44bDYwLjYgNTMtMjYgMzcuMiAyNC4zIDI0LjNjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZzLTQwLjkgMTUuNi01Ni42IDBsLTQ4LTQ4QzcwIDQzOC42IDY4LjEgNDE3IDc5LjIgNDAxLjFsNTAuMi03MS44em0xMjguNSA1M2w2MC42LTUzIDUwLjIgNzEuOGMxMS4xIDE1LjkgOS4yIDM3LjUtNC41IDUxLjJsLTQ4IDQ4Yy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMHMtMTUuNi00MC45IDAtNTYuNkwyODQgNDE5LjRsLTI2LTM3LjJ6XCJdXG59O1xuY29uc3QgZmFVc2Vyc0xpbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlcnMtbGluZScsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU5MlwiLCBcIk0yMTEuMiA5NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTMyIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4NS42IDBjMTAuMS0zOS40IDM4LjYtNzEuNSA3NS44LTg2LjZjLTkuNy02LTIxLjItOS40LTMzLjQtOS40bC05NiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHptNDYxLjYgMzJsODIuNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC05NiAwYy0xMS43IDAtMjIuNyAzLjEtMzIuMSA4LjZjMzguMSAxNC44IDY3LjQgNDcuMyA3Ny43IDg3LjR6TTM5MS4yIDIyNi40Yy02LjktMS42LTE0LjItMi40LTIxLjYtMi40bC05NiAwYy04LjUgMC0xNi43IDEuMS0yNC41IDMuMWMtMzAuOCA4LjEtNTUuNiAzMS4xLTY2LjEgNjAuOWMtMy41IDEwLTUuNSAyMC44LTUuNSAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmMwLTExLjItMS45LTIyLTUuNS0zMmMtMTAuOC0zMC43LTM2LjgtNTQuMi02OC45LTYxLjZ6TTU2My4yIDk2YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNMzIxLjYgMTkyYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwek0zMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDE2elwiXVxufTtcbmNvbnN0IGZhUXVvdGVMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3F1b3RlLWxlZnQnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MjIwLCBcInF1b3RlLWxlZnQtYWx0XCJdLCBcImYxMGRcIiwgXCJNMCAyMTZDMCAxNDkuNyA1My43IDk2IDEyMCA5Nmw4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMiAwLTMyIDAtNzJ6bTI1NiAwYzAtNjYuMyA1My43LTEyMCAxMjAtMTIwbDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMyIDAtMzIgMC03MnpcIl1cbn07XG5jb25zdCBmYVF1b3RlTGVmdEFsdCA9IGZhUXVvdGVMZWZ0O1xuY29uc3QgZmFUcmFjdG9yID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYWN0b3InLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjg2NjhdLCBcImY3MjJcIiwgXCJNOTYgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjY2LjMgMGMyNi4yIDAgNDkuNyAxNS45IDU5LjQgNDAuMkwzNzMuNyAxNjAgNDgwIDE2MGwwLTMzLjhjMC0yNC44IDUuOC00OS4zIDE2LjktNzEuNmwyLjUtNWM3LjktMTUuOCAyNy4xLTIyLjIgNDIuOS0xNC4zczIyLjIgMjcuMSAxNC4zIDQyLjlsLTIuNSA1Yy02LjcgMTMuMy0xMC4xIDI4LTEwLjEgNDIuOWwwIDMzLjggNTYgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ1LjRjMCAxNi41LTguNSAzMS45LTIyLjYgNDAuN2wtNDMuMyAyNy4xYy0xNC4yLTUuOS0yOS44LTkuMi00Ni4xLTkuMmMtMzkuMyAwLTc0LjEgMTguOS05NiA0OGwtODAgMGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOC4yIDBjLTEuNyA0LjgtMy43IDkuNS01LjggMTQuMWw1LjggNS44YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0yMi42IDIyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01LjgtNS44Yy00LjYgMi4yLTkuMyA0LjEtMTQuMSA1LjhsMCA4LjJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOC4yYy00LjgtMS43LTkuNS0zLjctMTQuMS01LjhsLTUuOCA1LjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwTDQwLjIgNDQ5LjFjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDUuOC01LjhjLTIuMi00LjYtNC4xLTkuMy01LjgtMTQuMUwzMiAzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOC4yIDBjMS43LTQuOCAzLjctOS41IDUuOC0xNC4xbC01LjgtNS44Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wyMi42LTIyLjZjOS05IDIxLjktMTEuNSAzMy4xLTcuNmwwLS42IDAtMzIgMC05NnptMTcwLjMgMEwxNjAgNjRsMCA5NiAzMiAwIDExMi43IDBMMjY2LjMgNjR6TTE3NiAyNTZhODAgODAgMCAxIDAgMCAxNjAgODAgODAgMCAxIDAgMC0xNjB6TTUyOCA0NDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0wIDY0Yy00OC42IDAtODgtMzkuNC04OC04OGMwLTI5LjggMTQuOC01Ni4xIDM3LjQtNzJjMTQuMy0xMC4xIDMxLjgtMTYgNTAuNi0xNmMyLjcgMCA1LjMgLjEgNy45IC4zYzQ0LjkgNCA4MC4xIDQxLjcgODAuMSA4Ny43YzAgNDguNi0zOS40IDg4LTg4IDg4elwiXVxufTtcbmNvbnN0IGZhVHJhc2hBcnJvd1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYXNoLWFycm93LXVwJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXCJ0cmFzaC1yZXN0b3JlXCJdLCBcImY4MjlcIiwgXCJNMTYzLjggMEwyODQuMiAwYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdMMzIwIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDk2IDAgNy4yLTE0LjNDMTQwLjYgNi44IDE1MS43IDAgMTYzLjggMHpNMzIgMTI4bDM4NCAwTDM5NC44IDQ2N2MtMS42IDI1LjMtMjIuNiA0NS00Ny45IDQ1bC0yNDUuOCAwYy0yNS4zIDAtNDYuMy0xOS43LTQ3LjktNDVMMzIgMTI4em0xOTIgNjRjLTYuNCAwLTEyLjUgMi41LTE3IDdsLTgwIDgwYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzktMzlMMjAwIDQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTM0LjEgMzkgMzljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04MC04MGMtNC41LTQuNS0xMC42LTctMTctN3pcIl1cbn07XG5jb25zdCBmYVRyYXNoUmVzdG9yZSA9IGZhVHJhc2hBcnJvd1VwO1xuY29uc3QgZmFBcnJvd0Rvd25VcExvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctZG93bi11cC1sb2NrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNGIwXCIsIFwiTTE1MC42IDUwMi42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE2MCA0MDIuNyAxNjAgMjg4bDI1NiAwIDAtMTZjMC0xNy4yIDMuOS0zMy41IDEwLjgtNDhMMzUyIDIyNGwwLTExNC43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NmMtNi02LTE0LjEtOS40LTIyLjYtOS40cy0xNi42IDMuNC0yMi42IDkuNGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjg4IDEwOS4zIDI4OCAyMjRsLTEyOCAwLTY0IDAtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwIDAgMTE0LjdMNTQuNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDB6TTE2MCAxOTJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMjggNjQgMHpNMjg4IDMyMGwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4LTY0IDB6bTI0MC04MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4LTY0IDAgMC00OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTgwIDMybDAgNDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODB6XCJdXG59O1xuY29uc3QgZmFMaW5lc0xlYW5pbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbGluZXMtbGVhbmluZycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTUxZVwiLCBcIk0xOTAuNCA3NC4xYzUuNi0xNi44LTMuNS0zNC45LTIwLjItNDAuNXMtMzQuOSAzLjUtNDAuNSAyMC4ybC0xMjggMzg0Yy01LjYgMTYuOCAzLjUgMzQuOSAyMC4yIDQwLjVzMzQuOS0zLjUgNDAuNS0yMC4ybDEyOC0zODR6bTcwLjktNDEuN2MtMTcuNC0yLjktMzMuOSA4LjktMzYuOCAyNi4zbC02NCAzODRjLTIuOSAxNy40IDguOSAzMy45IDI2LjMgMzYuOHMzMy45LTguOSAzNi44LTI2LjNsNjQtMzg0YzIuOS0xNy40LTguOS0zMy45LTI2LjMtMzYuOHpNMzUyIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXVxufTtcbmNvbnN0IGZhUnVsZXJDb21iaW5lZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdydWxlci1jb21iaW5lZCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjU0NlwiLCBcIk0uMiA0NjguOUMyLjcgNDkzLjEgMjMuMSA1MTIgNDggNTEybDk2IDAgMzIwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMCAwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODAtNjQgMCAwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODAtNjQgMCAwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODAtODAgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4MCAwIDAtNjQtODAgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4MCAwIDAtNjQtODAgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4MCAwIDAtNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMEMyMS41IDAgMCAyMS41IDAgNDhMMCAzNjhsMCA5NmMwIDEuNyAuMSAzLjMgLjIgNC45elwiXVxufTtcbmNvbnN0IGZhQ29weXJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NvcHlyaWdodCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzE2OV0sIFwiZjFmOVwiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTk5LjQgMzEyLjZjMzEuMiAzMS4yIDgxLjkgMzEuMiAxMTMuMSAwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtNTAgNTAtMTMxIDUwLTE4MSAwcy01MC0xMzEgMC0xODFzMTMxLTUwIDE4MSAwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTMxLjItMzEuMi04MS45LTMxLjItMTEzLjEgMHMtMzEuMiA4MS45IDAgMTEzLjF6XCJdXG59O1xuY29uc3QgZmFFcXVhbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZXF1YWxzJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjI3NjRdLCBcIjNkXCIsIFwiTTQ4IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzNTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw0OCAxMjh6bTAgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM1MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDQ4IDMyMHpcIl1cbn07XG5jb25zdCBmYUJsZW5kZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmxlbmRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjUxN1wiLCBcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMGw2NCAwIDMyIDBMNDcwLjEgMGMyMS4xIDAgMzYuNCAyMC4xIDMwLjkgNDAuNEw0OTQuNSA2NCAzMzYgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTQ5LjggMC0xNy41IDY0TDMzNiAxNjBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTIzLjYgMC0xNy41IDY0TDMzNiAyNTZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsOTcuNSAwTDQxNiAzNTJsLTI1NiAwLTguNy05Nkw2NCAyNTZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTE0NS41IDE5MkwxMzMuOCA2NCA2NCA2NGwwIDEyOCA4MS41IDB6TTE0NCAzODRsMjg4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjg4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTE0NCA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFUZWV0aCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZWV0aCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjYyZVwiLCBcIk0wIDEyOEMwIDc1IDQzIDMyIDk2IDMybDM4NCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyNTZjMCA1My00MyA5Ni05NiA5Nkw5NiA0ODBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjh6bTE3NiA0OGwwIDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC01NmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHptMTc2LTQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC01NmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDggMjA4bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4ek05NiAzODRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OHptODAtNDhjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDI0em0xNzYgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OHptODAtMTc2bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4em00OCAxNzZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OHpcIl1cbn07XG5jb25zdCBmYVNoZWtlbFNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hla2VsLXNpZ24nLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs4MzYyLCBcImlsc1wiLCBcInNoZWtlbFwiLCBcInNoZXFlbFwiLCBcInNoZXFlbC1zaWduXCJdLCBcImYyMGJcIiwgXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDY0IDk2bDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhMMzIgMzJ6TTMyMCA0ODBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEyOCAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwelwiXVxufTtcbmNvbnN0IGZhSWxzID0gZmFTaGVrZWxTaWduO1xuY29uc3QgZmFTaGVrZWwgPSBmYVNoZWtlbFNpZ247XG5jb25zdCBmYVNoZXFlbCA9IGZhU2hla2VsU2lnbjtcbmNvbnN0IGZhU2hlcWVsU2lnbiA9IGZhU2hla2VsU2lnbjtcbmNvbnN0IGZhTWFwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hcCcsXG4gIGljb246IFs1NzYsIDUxMiwgWzEyODUwNiwgNjIwNzJdLCBcImYyNzlcIiwgXCJNMzg0IDQ3Ni4xTDE5MiA0MjEuMmwwLTM4NS4zTDM4NCA5MC44bDAgMzg1LjN6bTMyLTEuMmwwLTM4Ni41TDU0My4xIDM3LjVjMTUuOC02LjMgMzIuOSA1LjMgMzIuOSAyMi4zbDAgMzM0LjhjMCA5LjgtNiAxOC42LTE1LjEgMjIuM0w0MTYgNDc0Ljh6TTE1LjEgOTUuMUwxNjAgMzcuMmwwIDM4Ni41TDMyLjkgNDc0LjVDMTcuMSA0ODAuOCAwIDQ2OS4yIDAgNDUyLjJMMCAxMTcuNGMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zelwiXVxufTtcbmNvbnN0IGZhUm9ja2V0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvY2tldCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjEzNVwiLCBcIk0xNTYuNiAzODQuOUwxMjUuNyAzNTRjLTguNS04LjUtMTEuNS0yMC44LTcuNy0zMi4yYzMtOC45IDctMjAuNSAxMS44LTMzLjhMMjQgMjg4Yy04LjYgMC0xNi42LTQuNi0yMC45LTEyLjFzLTQuMi0xNi43IC4yLTI0LjFsNTIuNS04OC41YzEzLTIxLjkgMzYuNS0zNS4zIDYxLjktMzUuM2w4Mi4zIDBjMi40LTQgNC44LTcuNyA3LjItMTEuM0MyODkuMS00LjEgNDExLjEtOC4xIDQ4My45IDUuM2MxMS42IDIuMSAyMC42IDExLjIgMjIuOCAyMi44YzEzLjQgNzIuOSA5LjMgMTk0LjgtMTExLjQgMjc2LjdjLTMuNSAyLjQtNy4zIDQuOC0xMS4zIDcuMmwwIDgyLjNjMCAyNS40LTEzLjQgNDktMzUuMyA2MS45bC04OC41IDUyLjVjLTcuNCA0LjQtMTYuNiA0LjUtMjQuMSAuMnMtMTIuMS0xMi4yLTEyLjEtMjAuOWwwLTEwNy4yYy0xNC4xIDQuOS0yNi40IDguOS0zNS43IDExLjljLTExLjIgMy42LTIzLjQgLjUtMzEuOC03Ljh6TTM4NCAxNjhhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwelwiXVxufTtcbmNvbnN0IGZhUGhvdG9GaWxtID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Bob3RvLWZpbG0nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcInBob3RvLXZpZGVvXCJdLCBcImY4N2NcIiwgXCJNMjU2IDBMNTc2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMyMCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIyNGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDc2IDEwNi43QzQ3MS41IDEwMCA0NjQgOTYgNDU2IDk2cy0xNS41IDQtMjAgMTAuN2wtNTYgODRMMzYyLjcgMTY5Yy00LjYtNS43LTExLjUtOS0xOC43LTlzLTE0LjIgMy4zLTE4LjcgOWwtNjQgODBjLTUuOCA3LjItNi45IDE3LjEtMi45IDI1LjRzMTIuNCAxMy42IDIxLjYgMTMuNmw4MCAwIDQ4IDAgMTQ0IDBjOC45IDAgMTctNC45IDIxLjItMTIuN3MzLjctMTcuMy0xLjItMjQuNmwtOTYtMTQ0ek0zMzYgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNjQgMTI4bDk2IDAgMCAyNTYgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDE2MCAwIDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NHptOCA2NGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwem0wIDEwNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwem0wIDEwNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwem0zMzYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl1cbn07XG5jb25zdCBmYVBob3RvVmlkZW8gPSBmYVBob3RvRmlsbTtcbmNvbnN0IGZhRm9sZGVyTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZm9sZGVyLW1pbnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmNjVkXCIsIFwiTTQ0OCA0ODBMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEyOCAwYzIwLjEgMCAzOS4xIDkuNSA1MS4yIDI1LjZsMTkuMiAyNS42YzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhsMTYwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTE4NCAyNzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwelwiXVxufTtcbmNvbnN0IGZhU3RvcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3RvcmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImY1NGVcIiwgXCJNNTQ3LjYgMTAzLjhMNDkwLjMgMTMuMUM0ODUuMiA1IDQ3Ni4xIDAgNDY2LjQgMEwxMDkuNiAwQzk5LjkgMCA5MC44IDUgODUuNyAxMy4xTDI4LjMgMTAzLjhjLTI5LjYgNDYuOC0zLjQgMTExLjkgNTEuOSAxMTkuNGM0IC41IDguMSAuOCAxMi4xIC44YzI2LjEgMCA0OS4zLTExLjQgNjUuMi0yOWMxNS45IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzI2LjEgMCA0OS4zLTExLjQgNjUuMi0yOWMxNS45IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzI2LjIgMCA0OS4zLTExLjQgNjUuMi0yOWMxNiAxNy42IDM5LjEgMjkgNjUuMiAyOWM0LjEgMCA4LjEtLjMgMTIuMS0uOGM1NS41LTcuNCA4MS44LTcyLjUgNTIuMS0xMTkuNHpNNDk5LjcgMjU0LjljMCAwIDAgMC0uMSAwYy01LjMgLjctMTAuNyAxLjEtMTYuMiAxLjFjLTEyLjQgMC0yNC4zLTEuOS0zNS40LTUuM0w0NDggMzg0bC0zMjAgMCAwLTEzMy40Yy0xMS4yIDMuNS0yMy4yIDUuNC0zNS42IDUuNGMtNS41IDAtMTEtLjQtMTYuMy0xLjFsLS4xIDBjLTQuMS0uNi04LjEtMS4zLTEyLTIuM0w2NCAzODRsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0IDAtMTMxLjRjLTQgMS04IDEuOC0xMi4zIDIuM3pcIl1cbn07XG5jb25zdCBmYUFycm93VHJlbmRVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy10cmVuZC11cCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTA5OFwiLCBcIk0zODQgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODIuN0wzNDIuNiAzNzQuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMMTkyIDI2OS4zIDU0LjYgNDA2LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBMMzIwIDMwNi43IDQ2Ni43IDE2MCAzODQgMTYwelwiXVxufTtcbmNvbnN0IGZhUGx1Z0NpcmNsZU1pbnVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BsdWctY2lyY2xlLW1pbnVzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTVlXCIsIFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJsMCA5NiA2NCAwIDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2IDY0IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgMzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhsMCA2Ny4yYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02Ny4yYzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDE2MHpNNTc2IDM2OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNjQgMGMwIDguOC03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnpcIl1cbn07XG5jb25zdCBmYVNpZ25IYW5naW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NpZ24taGFuZ2luZycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2lnblwiXSwgXCJmNGQ5XCIsIFwiTTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzUyIDAgMCAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNTItMzIgMEMxNC4zIDEyOCAwIDExMy43IDAgOTZTMTQuMyA2NCAzMiA2NGwzMiAwIDAtMzJDNjQgMTQuMyA3OC4zIDAgOTYgMHptOTYgMTYwbDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFTaWduID0gZmFTaWduSGFuZ2luZztcbmNvbnN0IGZhQmV6aWVyQ3VydmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmV6aWVyLWN1cnZlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTViXCIsIFwiTTI5NiAxMzZsMC00OCA0OCAwIDAgNDgtNDggMHpNMjg4IDMyYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDRMMTIxLjYgODRDMTExLjIgNjIuNyA4OS4zIDQ4IDY0IDQ4QzI4LjcgNDggMCA3Ni43IDAgMTEyczI4LjcgNjQgNjQgNjRjMjUuMyAwIDQ3LjItMTQuNyA1Ny42LTM2bDY2LjkgMGMtNTguOSAzOS42LTk4LjkgMTA1LTEwNCAxODBMODAgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMy4zIDBjNS45LTY3IDQ4LjUtMTIzLjQgMTA3LjUtMTQ5LjFjOC42IDEyLjcgMjMuMiAyMS4xIDM5LjggMjEuMWw2NCAwYzE2LjYgMCAzMS4xLTguNCAzOS44LTIxLjFjNTkgMjUuNyAxMDEuNiA4Mi4xIDEwNy41IDE0OS4xbC0zLjMgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQuNSAwYy01LTc1LTQ1LjEtMTQwLjQtMTA0LTE4MGw2Ni45IDBjMTAuNCAyMS4zIDMyLjMgMzYgNTcuNiAzNmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NGMtMjUuMyAwLTQ3LjIgMTQuNy01Ny42IDM2TDQwMCA4NGwwLTRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTg4IDM3Nmw0OCAwIDAgNDgtNDggMCAwLTQ4em00MTYgNDhsMC00OCA0OCAwIDAgNDgtNDggMHpcIl1cbn07XG5jb25zdCBmYUJlbGxTbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiZWxsLXNsYXNoJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Mjc3LCA2MTk0M10sIFwiZjFmNlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC05MC4yLTcwLjdjLjItLjQgLjQtLjkgLjYtMS4zYzUuMi0xMS41IDMuMS0yNS01LjMtMzQuNGwtNy40LTguM0M0OTcuMyAzMTkuMiA0ODAgMjczLjkgNDgwIDIyNi44bDAtMTguOGMwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOEwzNTIgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxOS4yYy00Mi42IDguNi03OSAzNC4yLTEwMiA2OS4zTDM4LjggNS4xek00MDYuMiA0MTZMMTYwIDIyMi4xbDAgNC44YzAgNDctMTcuMyA5Mi40LTQ4LjUgMTI3LjZsLTcuNCA4LjNjLTguNCA5LjQtMTAuNCAyMi45LTUuMyAzNC40UzExNS40IDQxNiAxMjggNDE2bDI3OC4yIDB6bS00MC45IDc3LjNjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM2wtNjQgMC02NCAwYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zczI4LjMgMTguNyA0NS4zIDE4LjdzMzMuMy02LjcgNDUuMy0xOC43elwiXVxufTtcbmNvbnN0IGZhVGFibGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxldCcsXG4gIGljb246IFs0NDgsIDUxMiwgW1widGFibGV0LWFuZHJvaWRcIl0sIFwiZjNmYlwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0xNzYgNDMybDk2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTk2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFUYWJsZXRBbmRyb2lkID0gZmFUYWJsZXQ7XG5jb25zdCBmYVNjaG9vbEZsYWcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2Nob29sLWZsYWcnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NmVcIiwgXCJNMjg4IDBMNDAwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2bC03OS4zIDAgODkuNiA2NEw1MTIgMTYwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xNzYgMCAwLTExMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OGwwIDExMkw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDEwMS43IDBMMjU2IDk1LjUgMjU2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem00OCAyNDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNODAgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTM2OCAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek04MCAzNTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMzg0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpcIl1cbn07XG5jb25zdCBmYUZpbGwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjU3NVwiLCBcIk04Ni42IDkuNEM3NC4xLTMuMSA1My45LTMuMSA0MS40IDkuNHMtMTIuNSAzMi44IDAgNDUuM0wxMjIuNyAxMzYgMzAuNiAyMjguMWMtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44TDE0OC4xIDQ4MS40YzM3LjUgMzcuNSA5OC4zIDM3LjUgMTM1LjggMEw0NzQuMyAyOTAuOWMyOC4xLTI4LjEgMjguMS03My43IDAtMTAxLjhMMzIyLjkgMzcuN2MtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwTDE2OCA5MC43IDg2LjYgOS40ek0xNjggMTgxLjNsNDkuNCA0OS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMjEzLjMgMTM2bDUzLjEtNTMuMWMzLjEtMy4xIDguMi0zLjEgMTEuMyAwTDQyOS4xIDIzNC4zYzMuMSAzLjEgMy4xIDguMiAwIDExLjNMMzg2LjcgMjg4IDY3LjUgMjg4YzEuNC01LjQgNC4yLTEwLjQgOC40LTE0LjZMMTY4IDE4MS4zelwiXVxufTtcbmNvbnN0IGZhQW5nbGVVcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmdsZS11cCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzg5NjNdLCBcImYxMDZcIiwgXCJNMjAxLjQgMTM3LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyMjQgMjA1LjMgODYuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MHpcIl1cbn07XG5jb25zdCBmYURydW1zdGlja0JpdGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHJ1bXN0aWNrLWJpdGUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY2ZDdcIiwgXCJNMTYwIDI2NS4yYzAgOC41LTMuNCAxNi42LTkuNCAyMi42bC0yNi44IDI2LjhjLTEyLjMgMTIuMy0zMi41IDExLjQtNDkuNCA3LjJDNjkuOCAzMjAuNiA2NSAzMjAgNjAgMzIwYy0zMy4xIDAtNjAgMjYuOS02MCA2MHMyNi45IDYwIDYwIDYwYzYuMyAwIDEyIDUuNyAxMiAxMmMwIDMzLjEgMjYuOSA2MCA2MCA2MHM2MC0yNi45IDYwLTYwYzAtNS0uNi05LjgtMS44LTE0LjVjLTQuMi0xNi45LTUuMi0zNy4xIDcuMi00OS40bDI2LjgtMjYuOGM2LTYgMTQuMS05LjQgMjIuNi05LjRsODkuMiAwYzYuMyAwIDEyLjQtLjMgMTguNS0xYzExLjktMS4yIDE2LjQtMTUuNSAxMC44LTI2Yy04LjUtMTUuOC0xMy4zLTMzLjgtMTMuMy01M2MwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmM4IDAgMTUuNyAuOCAyMy4yIDIuNGMxMS43IDIuNSAyNC4xLTUuOSAyMi0xNy42QzQ5NC41IDYyLjUgNDIyLjUgMCAzMzYgMEMyMzguOCAwIDE2MCA3OC44IDE2MCAxNzZsMCA4OS4yelwiXVxufTtcbmNvbnN0IGZhSG9sbHlCZXJyeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob2xseS1iZXJyeScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjdhYVwiLCBcIk0yNTYgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0yNzYuOCAzODMuOGMxIC4xIDIuMSAuMiAzLjIgLjJjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyMi43YzAgMTYuNCAxNiAyNy45IDMxLjYgMjIuOGwxMi44LTQuM2MxOC02IDM3LjMtNi41IDU1LjYtMS41bDE5LjQgNS4zYzE3LjkgNC45IDM0LjQtMTEuNiAyOS41LTI5LjVMNDk1LjYgNDUyYy01LTE4LjMtNC40LTM3LjYgMS41LTU1LjZsNC4zLTEyLjhjNS4yLTE1LjUtNi40LTMxLjYtMjIuOC0zMS42Yy0zNC42IDAtNjIuNy0yOC4xLTYyLjctNjIuN2wwLTMyYzAtMTYuNC0xNi0yNy45LTMxLjYtMjIuOGwtMTIuOCA0LjNjLTE4IDYtMzcuMyA2LjUtNTUuNiAxLjVsLTI5LjYtOC4xYy0yLjktLjgtNS45LTEtOC43LS43YzQuMiA5LjcgNS44IDIwLjggMy43IDMyLjNMMjc1IDI5OC43Yy0xLjUgOC40LTEuNCAxNyAuNSAyNS4zbDUuMyAyMy45YzIuOCAxMi43IDEuMSAyNS4yLTQgMzUuOXpNMTI3LjYgMjM0LjVjLTE1LjUtNS4yLTMxLjYgNi40LTMxLjYgMjIuOGwwIDMyQzk2IDMyMy45IDY3LjkgMzUyIDMzLjMgMzUyYy0xNi40IDAtMjcuOSAxNi0yMi44IDMxLjZsNC4zIDEyLjhjNiAxOCA2LjUgMzcuMyAxLjUgNTUuNmwtNS4zIDE5LjRDNi4yIDQ4OS40IDIyLjYgNTA1LjggNDAuNSA1MDFMNjAgNDk1LjZjMTguMy01IDM3LjYtNC41IDU1LjYgMS41bDEyLjggNC4zYzE1LjUgNS4yIDMxLjYtNi40IDMxLjYtMjIuOGwwLTMyYzAtMzQuNiAyOC4xLTYyLjcgNjIuNy02Mi43YzE2LjQgMCAyNy45LTE2IDIyLjgtMzEuNmwtNC4zLTEyLjhjLTYtMTgtNi41LTM3LjMtMS41LTU1LjZsNS4zLTE5LjRjNC45LTE3LjktMTEuNi0zNC40LTI5LjUtMjkuNUwxOTYgMjQwLjRjLTE4LjMgNS0zNy42IDQuNC01NS42LTEuNWwtMTIuOC00LjN6TTM4NCAxNDRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpcIl1cbn07XG5jb25zdCBmYUNoZXZyb25MZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZXZyb24tbGVmdCcsXG4gIGljb246IFszMjAsIDUxMiwgWzkwMDFdLCBcImYwNTNcIiwgXCJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxOTIgMTkyYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMNzcuMyAyNTYgMjQ2LjYgODYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTkyIDE5MnpcIl1cbn07XG5jb25zdCBmYUJhY3RlcmlhID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JhY3RlcmlhJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMDU5XCIsIFwiTTMwNC45IC43Yy05LjYtMi43LTE5LjUgMi44LTIyLjMgMTIuNGwtNC4zIDE1LjJjLTguMy0uNi0xNi44IDAtMjUuMiAxLjljLTcuMyAxLjctMTQuMyAzLjUtMjEuMSA1LjVsLTUuNS0xMi43Yy0zLjktOS4xLTE0LjUtMTMuNC0yMy42LTkuNXMtMTMuNCAxNC41LTkuNSAyMy42bDQuNCAxMC40Yy0xNi42IDYuNy0zMS43IDE0LjQtNDUuNCAyMi44TDE0NyA2MmMtNS41LTguMy0xNi43LTEwLjUtMjUtNXMtMTAuNSAxNi43LTUgMjVsNiA5Yy0xMy43IDExLTI1LjUgMjIuOC0zNS44IDM0LjlsLTEwLThjLTcuOC02LjItMTkuMS01LTI1LjMgMi44cy01IDE5LjEgMi44IDI1LjNMNjUuOSAxNTVjLTEuOCAyLjgtMy41IDUuNy01LjEgOC41Yy02LjYgMTEuNC0xMS44IDIyLjYtMTYgMzNsLTgtMy4yYy05LjItMy43LTE5LjcgLjgtMjMuNCAxMHMuOCAxOS43IDEwIDIzLjRsMTAuNCA0LjJjLS4yIC44LS40IDEuNS0uNSAyLjNjLTIuMiA5LjMtMy40IDE3LjMtNC4xIDIzLjRjLS40IDMuMS0uNiA1LjctLjggNy44Yy0uMSAxLjEtLjEgMi0uMiAyLjhsLS4xIDEuMSAwIC41IDAgLjIgMCAuMWMwIDAgMCAuMSAyOS4xIDFjMCAwIDAgMC0uMSAwTDI4IDI2OS4zYy0uMSAzLjEgMCA2LjEgLjIgOS4xbC0xNS4yIDQuM0MzLjUgMjg1LjQtMiAyOTUuNCAuNyAzMDQuOXMxMi43IDE1LjEgMjIuMyAxMi40bDE1LjYtNC41YzcuNiAxMy42IDE4LjkgMjUgMzIuNiAzMi42TDY2LjcgMzYxYy0yLjcgOS42IDIuOCAxOS41IDEyLjQgMjIuM3MxOS41LTIuOCAyMi4zLTEyLjRsNC4zLTE1LjJjMS4yIC4xIDIuNCAuMiAzLjYgLjJjMTUuNiAuNSAzMC4zLTMuMyA0My0xMC4ybDkgOWM3IDcgMTguNCA3IDI1LjUgMHM3LTE4LjQgMC0yNS41bC03LjItNy4yYzkuMy0xMi42IDE1LjItMjcuOCAxNi4zLTQ0LjVsNy4xIDNjOS4xIDMuOSAxOS43LS4zIDIzLjYtOS41cy0uMy0xOS43LTkuNS0yMy42bC04LjYtMy43YzYuNC05LjkgMTcuMy0yMi40IDM2LjktMzMuM2wxLjMgNC40YzIuNyA5LjYgMTIuNyAxNS4xIDIyLjMgMTIuNHMxNS4xLTEyLjcgMTIuNC0yMi4zbC0yLjMtOC4xYzMuOC0xLjEgNy43LTIuMSAxMS45LTMuMWMxMS42LTIuNyAyMi4xLTcuNyAzMS4xLTE0LjRsNy4yIDcuMmM3IDcgMTguNCA3IDI1LjUgMHM3LTE4LjQgMC0yNS41bC05LTljNy42LTEzLjkgMTEuMy0zMC4xIDEwLjEtNDYuNmwxNS4yLTQuM2M5LjYtMi43IDE1LjEtMTIuNyAxMi40LTIyLjNTMzcwLjYgNjQgMzYxIDY2LjdsLTE1LjYgNC41Yy03LjctMTMuOS0xOS4xLTI1LjEtMzIuNi0zMi42bDQuNS0xNS42YzIuNy05LjYtMi44LTE5LjUtMTIuNC0yMi4zek0xMTIgMjcybC00OC0xLjVjMCAwIDAgMCAwIDBjMTEuNyAuNCAyNy4zIC45IDQ4IDEuNnptMTYtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NC00OGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwek0zMjIuNyA0ODljLTIuNyA5LjYgMi44IDE5LjUgMTIuNCAyMi4zczE5LjUtMi44IDIyLjItMTIuNGw0LjMtMTUuMmM4LjMgLjYgMTYuOCAwIDI1LjItMS45YzcuMy0xLjcgMTQuMy0zLjUgMjEuMS01LjVsNS41IDEyLjdjMy45IDkuMSAxNC41IDEzLjQgMjMuNiA5LjVzMTMuNC0xNC41IDkuNS0yMy42bC00LjQtMTAuNGMxNi42LTYuNyAzMS43LTE0LjQgNDUuNC0yMi44TDQ5MyA0NTBjNS41IDguMyAxNi43IDEwLjUgMjUgNXMxMC41LTE2LjcgNS0yNWwtNi05YzEzLjctMTEgMjUuNS0yMi44IDM1LjgtMzQuOWwxMCA4YzcuOCA2LjIgMTkuMSA1IDI1LjMtMi44czUtMTkuMS0yLjgtMjUuM0w1NzQuMSAzNTdjMS44LTIuOCAzLjUtNS43IDUuMS04LjVjNi42LTExLjQgMTEuOC0yMi42IDE2LTMzbDggMy4yYzkuMiAzLjcgMTkuNy0uOCAyMy40LTEwcy0uOC0xOS43LTEwLTIzLjRsLTEwLjQtNC4yYy4yLS44IC40LTEuNSAuNS0yLjNjMi4yLTkuMyAzLjQtMTcuMyA0LjEtMjMuNGMuNC0zLjEgLjYtNS43IC44LTcuOGMuMS0xLjEgLjEtMiAuMi0yLjhsLjEtMS4xIDAtLjUgMC0uMiAwLS4xYzAgMCAwLS4xLTI5LjEtMWMwIDAgMCAwIC4xIDBsMjkuMSAuOWMuMS0zLjEgMC02LjEtLjItOS4xbDE1LjItNC4zYzkuNi0yLjcgMTUuMS0xMi43IDEyLjQtMjIuM3MtMTIuNy0xNS4xLTIyLjMtMTIuNGwtMTUuNiA0LjVjLTcuNi0xMy42LTE4LjktMjUtMzIuNi0zMi42bDQuNS0xNS42YzIuNy05LjYtMi44LTE5LjUtMTIuNC0yMi4zcy0xOS41IDIuOC0yMi4zIDEyLjRsLTQuMyAxNS4yYy0xLjItLjEtMi40LS4yLTMuNi0uMmMtMTUuNi0uNS0zMC4zIDMuMy00MyAxMC4ybC05LTljLTctNy0xOC40LTctMjUuNSAwcy03IDE4LjQgMCAyNS41bDcuMiA3LjJjLTkuMyAxMi42LTE1LjIgMjcuOC0xNi4zIDQ0LjVsLTcuMS0zYy05LjEtMy45LTE5LjcgLjMtMjMuNiA5LjVzLjMgMTkuNyA5LjUgMjMuNmw4LjYgMy43Yy02LjQgOS45LTE3LjMgMjIuNC0zNi45IDMzLjNsLTEuMy00LjRjLTIuNy05LjYtMTIuNy0xNS4xLTIyLjMtMTIuNHMtMTUuMSAxMi43LTEyLjQgMjIuM2wyLjMgOC4xYy0zLjggMS4xLTcuNyAyLjEtMTEuOSAzLjFjLTExLjYgMi43LTIyLjEgNy43LTMxLjEgMTQuNGwtNy4yLTcuMmMtNy03LTE4LjQtNy0yNS41IDBzLTcgMTguNCAwIDI1LjVsOSA5Yy03LjYgMTMuOS0xMS4zIDMwLjEtMTAuMSA0Ni42bC0xNS4yIDQuM2MtOS42IDIuNy0xNS4xIDEyLjctMTIuNCAyMi4yczEyLjcgMTUuMSAyMi4zIDEyLjRsMTUuNi00LjVjNy43IDEzLjkgMTkuMSAyNS4xIDMyLjYgMzIuNkwzMjIuNyA0ODl6TTU3NiAyNDEuNWMwIDAgMCAwIDAgMGMtMTEuNy0uNC0yNy4zLS45LTQ4LTEuNmw0OCAxLjV6TTQ0OCAzODRhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHpcIl1cbn07XG5jb25zdCBmYUhhbmRMaXphcmQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1saXphcmQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYyNThcIiwgXCJNMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRsMTEyIDAgODAgMCA0Ni41IDBjMzYuOCAwIDcxLjIgMTggOTIuMSA0OC4ybDExMy41IDE2NGMxMyAxOC43IDE5LjkgNDEgMTkuOSA2My44bDAgMTIgMCAxNiAwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzLjhMMjczLjkgMzUyIDI0MCAzNTJsLTgwIDAtNDggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGw0OCAwIDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTgwIDBMNDggMTYwYy0yNi41IDAtNDgtMjEuNS00OC00OHpcIl1cbn07XG5jb25zdCBmYU5vdGRlZiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdub3RkZWYnLFxuICBpY29uOiBbMzg0LCA1MTIsIFtdLCBcImUxZmVcIiwgXCJNNjQgMzkwLjNMMTUzLjUgMjU2IDY0IDEyMS43bDAgMjY4LjZ6TTEwMi41IDQ0OGwxNzkuMSAwTDE5MiAzMTMuNyAxMDIuNSA0NDh6bTEyOC0xOTJMMzIwIDM5MC4zbDAtMjY4LjZMMjMwLjUgMjU2ek0yODEuNSA2NEwxMDIuNSA2NCAxOTIgMTk4LjMgMjgxLjUgNjR6TTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwTDMzNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA0OHpcIl1cbn07XG5jb25zdCBmYURpc2Vhc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGlzZWFzZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjdmYVwiLCBcIk0yMzYuNCA2MS40TDIyNyA3NS41Yy0yMS4zIDMyLTU5LjQgNDguNS05Ny4zIDQyLjFsLTU5LjYtOS45QzMzLjQgMTAxLjYgMCAxMjkuOSAuMSAxNjcuMWMwIDE1LjkgNi40IDMxLjIgMTcuNiA0Mi41bDI5LjIgMjkuMmMxMSAxMSAxNy4yIDI1LjkgMTcuMiA0MS41YzAgMTUuOC02LjQgMzAuOS0xNy43IDQyTDMzLjMgMzM1LjFDMjIuMiAzNDUuOSAxNiAzNjAuNyAxNiAzNzYuMmMwIDM2LjggMzQuMSA2NC4yIDcwLjEgNTYuMmw2Mi4zLTEzLjhjNy43LTEuNyAxNS43LTIuNiAyMy42LTIuNmwxMCAwYzI3LjIgMCA1My43IDkuMyA3NSAyNi4zTDI4Ny44IDQ2N2MxMC41IDguNCAyMy42IDEzIDM3IDEzYzMyLjcgMCA1OS4zLTI2LjUgNTkuMy01OS4zbDAtMjUuMmMwLTM0LjkgMjEuNC02Ni4yIDUzLjktNzguOGwzNi45LTE0LjNjMjIuNC04LjcgMzcuMi0zMC4zIDM3LjItNTQuM2MwLTI4LjEtMjAuMS01Mi4zLTQ3LjgtNTcuM2wtMjgtNS4xYy0zNi41LTYuNy02NS40LTM0LjUtNzMuNi03MC43bC03LjEtMzEuNUMzNDguOSA1My40IDMyMi4xIDMyIDI5MS4zIDMyYy0yMiAwLTQyLjYgMTEtNTQuOSAyOS40ek0xNjAgMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bTAgODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhQnJpZWZjYXNlTWVkaWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdicmllZmNhc2UtbWVkaWNhbCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjQ2OVwiLCBcIk0xODQgNDhsMTQ0IDBjNC40IDAgOCAzLjYgOCA4bDAgNDBMMTc2IDk2bDAtNDBjMC00LjQgMy42LTggOC04em0tNTYgOGwwIDQwTDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDE4NCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnptOTYgMTUyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDggMCAwLTQ4elwiXVxufTtcbmNvbnN0IGZhR2VuZGVybGVzcyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnZW5kZXJsZXNzJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmMjJkXCIsIFwiTTE5MiAxNDRhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0em0wIDI4OGExNzYgMTc2IDAgMSAwIDAtMzUyIDE3NiAxNzYgMCAxIDAgMCAzNTJ6XCJdXG59O1xuY29uc3QgZmFDaGV2cm9uUmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hldnJvbi1yaWdodCcsXG4gIGljb246IFszMjAsIDUxMiwgWzkwMDJdLCBcImYwNTRcIiwgXCJNMzEwLjYgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0Mi43IDI1NiA3My40IDg2LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MnpcIl1cbn07XG5jb25zdCBmYVJldHdlZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmV0d2VldCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjA3OVwiLCBcIk0yNzIgNDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjggMzIgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOXMxNi42IDE5LjggMjkuNiAxOS44bDMyIDAgMCAxMjhjMCA1MyA0MyA5NiA5NiA5NmwxMTIgMHpNMzA0IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45cy0xNi42LTE5LjgtMjkuNi0xOS44bC0zMiAwIDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZMMzA0IDk2elwiXVxufTtcbmNvbnN0IGZhQ2FyUmVhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYXItcmVhcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY2FyLWFsdFwiXSwgXCJmNWRlXCIsIFwiTTE2NS40IDk2bDE4MS4yIDBjMTMuNiAwIDI1LjcgOC42IDMwLjIgMjEuNEw0MDIuOSAxOTJsLTI5My44IDAgMjYuMS03NC42YzQuNS0xMi44IDE2LjYtMjEuNCAzMC4yLTIxLjR6bS05MC42IC4zTDM5LjYgMTk2LjhDMTYuNCAyMDYuNCAwIDIyOS4zIDAgMjU2bDAgODBjMCAyMy43IDEyLjkgNDQuNCAzMiA1NS40TDMyIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDggMjU2IDAgMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNTYuNmMxOS4xLTExLjEgMzItMzEuNyAzMi01NS40bDAtODBjMC0yNi43LTE2LjQtNDkuNi0zOS42LTU5LjJMNDM3LjIgOTYuM0M0MjMuNyA1Ny44IDM4Ny40IDMyIDM0Ni42IDMyTDE2NS40IDMyYy00MC44IDAtNzcuMSAyNS44LTkwLjYgNjQuM3pNMjA4IDI3Mmw5NiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtOTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek00OCAyODBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTM2MC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0elwiXVxufTtcbmNvbnN0IGZhQ2FyQWx0ID0gZmFDYXJSZWFyO1xuY29uc3QgZmFQdW1wU29hcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwdW1wLXNvYXAnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImUwNmJcIiwgXCJNMTI4IDMybDAgOTYgMTI4IDAgMC0zMiA2MC4xIDBjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2wzMy45IDMzLjljMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzNzIuNyA1NS40Yy0xNS0xNS0zNS40LTIzLjQtNTYuNi0yMy40TDI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTExNy40IDE2MGMtMzMuMyAwLTYxIDI1LjUtNjMuOCA1OC43TDM1IDQ0Mi43QzMxLjkgNDgwIDYxLjMgNTEyIDk4LjggNTEybDE4Ni40IDBjMzcuNCAwIDY2LjktMzIgNjMuOC02OS4zbC0xOC43LTIyNGMtMi44LTMzLjItMzAuNS01OC43LTYzLjgtNTguN2wtMTQ5LjEgMHpNMjU2IDM2MGMwIDM1LjMtMjguNyA1Ni02NCA1NnMtNjQtMjAuNy02NC01NmMwLTMyLjUgMzctODAuOSA1MC45LTk3LjljMy4yLTMuOSA4LjEtNi4xIDEzLjEtNi4xczkuOSAyLjIgMTMuMSA2LjFDMjE5IDI3OS4xIDI1NiAzMjcuNSAyNTYgMzYwelwiXVxufTtcbmNvbnN0IGZhVmlkZW9TbGFzaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2aWRlby1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjRlMlwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC04Ni40LTY3LjcgMTMuOCA5LjJjOS44IDYuNSAyMi40IDcuMiAzMi45IDEuNnMxNi45LTE2LjQgMTYuOS0yOC4ybDAtMjU2YzAtMTEuOC02LjUtMjIuNi0xNi45LTI4LjJzLTIzLTUtMzIuOSAxLjZsLTk2IDY0TDQ0OCAxNzQuOWwwIDE3LjEgMCAxMjggMCA1LjgtMzItMjUuMUw0MTYgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDExMy45IDY0IDM4LjggNS4xek00MDcgNDE2LjdMMzIuMyAxMjEuNWMtLjIgMi4xLS4zIDQuMy0uMyA2LjVsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMjMuNCAwIDQzLjktMTIuNiA1NS0zMS4zelwiXVxufTtcbmNvbnN0IGZhQmF0dGVyeVF1YXJ0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmF0dGVyeS1xdWFydGVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJiYXR0ZXJ5LTJcIl0sIFwiZjI0M1wiLCBcIk00NjQgMTYwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2MGMwIDguOC03LjIgMTYtMTYgMTZMODAgMzUyYy04LjggMC0xNi03LjItMTYtMTZsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2bDM4NCAwek04MCA5NkMzNS44IDk2IDAgMTMxLjggMCAxNzZMMCAzMzZjMCA0NC4yIDM1LjggODAgODAgODBsMzg0IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0xNmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtMTZjMC00NC4yLTM1LjgtODAtODAtODBMODAgOTZ6bTExMiA5NmwtOTYgMCAwIDEyOCA5NiAwIDAtMTI4elwiXVxufTtcbmNvbnN0IGZhQmF0dGVyeTIgPSBmYUJhdHRlcnlRdWFydGVyO1xuY29uc3QgZmFSYWRpbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyYWRpbycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI1MV0sIFwiZjhkN1wiLCBcIk00OTQuOCA0N2MxMi43LTMuNyAyMC0xNy4xIDE2LjMtMjkuOFM0OTQtMi44IDQ4MS4yIDFMNTEuNyAxMjYuOWMtOS40IDIuNy0xNy45IDcuMy0yNS4xIDEzLjJDMTAuNSAxNTEuNyAwIDE3MC42IDAgMTkybDAgNEwwIDMwNCAwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMjI5LjUgMEw0OTQuOCA0N3pNMzY4IDI0MGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNODAgMjU2YzAtOC44IDcuMi0xNiAxNi0xNmw5NiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC05NiAwYy04LjggMC0xNi03LjItMTYtMTZ6TTY0IDMyMGMwLTguOCA3LjItMTYgMTYtMTZsMTI4IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMODAgMzM2Yy04LjggMC0xNi03LjItMTYtMTZ6bTE2IDY0YzAtOC44IDcuMi0xNiAxNi0xNmw5NiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC05NiAwYy04LjggMC0xNi03LjItMTYtMTZ6XCJdXG59O1xuY29uc3QgZmFCYWJ5Q2FycmlhZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFieS1jYXJyaWFnZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiY2FycmlhZ2UtYmFieVwiXSwgXCJmNzdkXCIsIFwiTTI1NiAxOTJMLjEgMTkyQzIuNyAxMTcuOSA0MS4zIDUyLjkgOTkgMTQuMWMxMy4zLTguOSAzMC44LTQuMyAzOS45IDguOEwyNTYgMTkyem0xMjgtMzJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDY0YzAgMjUuMi01LjggNTAuMi0xNyA3My41cy0yNy44IDQ0LjUtNDguNiA2Mi4zcy00NS41IDMyLTcyLjcgNDEuNlMyNTMuNCA0MTYgMjI0IDQxNnMtNTguNS01LTg1LjctMTQuNnMtNTEuOS0yMy44LTcyLjctNDEuNnMtMzcuMy0zOS00OC42LTYyLjNTMCAyNDkuMiAwIDIyNGwyMjQgMCAxNjAgMCAwLTY0ek04MCA0MTZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0yNDAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpcIl1cbn07XG5jb25zdCBmYUNhcnJpYWdlQmFieSA9IGZhQmFieUNhcnJpYWdlO1xuY29uc3QgZmFUcmFmZmljTGlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhZmZpYy1saWdodCcsXG4gIGljb246IFszMjAsIDUxMiwgWzEyODY3OF0sIFwiZjYzN1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MHMxNjAtNzEuNiAxNjAtMTYwbDAtMjg4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6bTk2IDQxNmE0OCA0OCAwIDEgMSAwLTk2IDQ4IDQ4IDAgMSAxIDAgOTZ6bTQ4LTE3NmE0OCA0OCAwIDEgMSAtOTYgMCA0OCA0OCAwIDEgMSA5NiAwem0tNDgtODBhNDggNDggMCAxIDEgMC05NiA0OCA0OCAwIDEgMSAwIDk2elwiXVxufTtcbmNvbnN0IGZhVGhlcm1vbWV0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGhlcm1vbWV0ZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0OTFcIiwgXCJNOTYgMzgyLjFsMC04OC44YzAtMTQuOSA1LjktMjkuMSAxNi40LTM5LjZsMjcuMy0yNy4zIDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDUuNS00NS41QzM1NS4yIDEwLjkgMzgxLjQgMCA0MDguOCAwQzQ2NS44IDAgNTEyIDQ2LjIgNTEyIDEwMy4yYzAgMjcuNC0xMC45IDUzLjYtMzAuMiA3M0wyNTguMyAzOTkuNmMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRsLTg4LjggMEw0MSA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsODktODl6XCJdXG59O1xuY29uc3QgZmFWckNhcmRib2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2ci1jYXJkYm9hcmQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY3MjlcIiwgXCJNNTc2IDY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDEyMC40IDBjMjQuMiAwIDQ2LjQtMTMuNyA1Ny4yLTM1LjRsMzItNjRjOC44LTE3LjUgMjYuNy0yOC42IDQ2LjMtMjguNnMzNy41IDExLjEgNDYuMyAyOC42bDMyIDY0YzEwLjggMjEuNyAzMyAzNS40IDU3LjIgMzUuNEw1NzYgNDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0ek05NiAyNDBhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgOTYgMjQwem0zODQtNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6XCJdXG59O1xuY29uc3QgZmFIYW5kTWlkZGxlRmluZ2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtbWlkZGxlLWZpbmdlcicsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODQwNV0sIFwiZjgwNlwiLCBcIk0yMzIgMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCAxNjQuMmMtOC41LTcuNi0xOS43LTEyLjItMzItMTIuMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA3IDAgNzNjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC01NS43Yy0yIDEuNC0zLjkgMy01LjggNC41TDU1IDI4NC44QzQwLjQgMjk3IDMyIDMxNSAzMiAzMzRMMzIgMzcyYzAgMzggMTYuOSA3NCA0Ni4xIDk4LjNsNS40IDQuNWMyOC44IDI0IDY1IDM3LjEgMTAyLjQgMzcuMUwzMDQgNTEyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtNjQgMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OGMtMTIuNCAwLTIzLjYgNC43LTMyLjEgMTIuM0MzNTAgMjI3LjUgMzI5LjMgMjA4IDMwNCAyMDhjLTEyLjMgMC0yMy41IDQuNi0zMiAxMi4yTDI3MiA0MGMwLTIyLjEtMTcuOS00MC00MC00MHpcIl1cbn07XG5jb25zdCBmYVBlcmNlbnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyY2VudCcsXG4gIGljb246IFszODQsIDUxMiwgWzYyMTAxLCA2Mjc4NSwgXCJwZXJjZW50YWdlXCJdLCBcIjI1XCIsIFwiTTM3NC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0zMjAgMzIwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDMyMC0zMjB6TTEyOCAxMjhBNjQgNjQgMCAxIDAgMCAxMjhhNjQgNjQgMCAxIDAgMTI4IDB6TTM4NCAzODRhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwelwiXVxufTtcbmNvbnN0IGZhUGVyY2VudGFnZSA9IGZhUGVyY2VudDtcbmNvbnN0IGZhVHJ1Y2tNb3ZpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJ1Y2stbW92aW5nJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNGRmXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzMDRsMCA4MCAwIDE2YzAgNDQuMiAzNS44IDgwIDgwIDgwYzI2LjIgMCA0OS40LTEyLjYgNjQtMzJjMTQuNiAxOS40IDM3LjggMzIgNjQgMzJjNDQuMiAwIDgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZMNDE2IDM4NGwzMy42IDBjLTEgNS4yLTEuNiAxMC41LTEuNiAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtNS41LS42LTEwLjgtMS42LTE2bDEuNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjQgMC0xNiAwLTEwLjNjMC05LjItMy4yLTE4LjItOS0yNS4zbC01OC44LTcxLjhjLTEwLjYtMTMtMjYuNS0yMC41LTQzLjMtMjAuNUw0ODAgMTQ0bDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTU4NSAyNTZsLTEwNSAwIDAtNjQgNDguOCAwYzIuNCAwIDQuNyAxLjEgNi4yIDIuOUw1ODUgMjU2ek01MjggMzY4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMTc2IDQwMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek04MCAzNjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhR2xhc3NXYXRlckRyb3BsZXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ2xhc3Mtd2F0ZXItZHJvcGxldCcsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTRmNVwiLCBcIk0zMiAwQzIzLjEgMCAxNC42IDMuNyA4LjYgMTAuMlMtLjYgMjUuNCAuMSAzNC4zTDI4LjkgNDM3LjdjMyA0MS45IDM3LjggNzQuMyA3OS44IDc0LjNsMTY2LjYgMGM0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEwzMiAwek04MyAyOTcuNUw2Ni40IDY0bDI1MS4zIDBMMzAxIDI5Ny41IDI4OCAzMDRjLTIwLjEgMTAuMS00My45IDEwLjEtNjQgMHMtNDMuOS0xMC4xLTY0IDBzLTQzLjkgMTAuMS02NCAwbC0xMy02LjV6TTI1NiAxOTZjMC0yNC0zMy43LTcwLjEtNTIuMi05My41Yy02LjEtNy43LTE3LjUtNy43LTIzLjYgMEMxNjEuNyAxMjUuOSAxMjggMTcyIDEyOCAxOTZjMCAzMy4xIDI4LjcgNjAgNjQgNjBzNjQtMjYuOSA2NC02MHpcIl1cbn07XG5jb25zdCBmYURpc3BsYXkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGlzcGxheScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTE2M1wiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNzYgMC0xMC43IDMyTDE2MCA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY5LjMgMEwzMzYgNDE2bDE3NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTUxMiA2NGwwIDI4OEw2NCAzNTIgNjQgNjRsNDQ4IDB6XCJdXG59O1xuY29uc3QgZmFGYWNlU21pbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1zbWlsZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU3OCwgXCJzbWlsZVwiXSwgXCJmMTE4XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjQuMSAzMjUuNUMxODIgMzQ2LjIgMjEyLjYgMzY4IDI1NiAzNjhzNzQtMjEuOCA5MS45LTQyLjVjNS44LTYuNyAxNS45LTcuNCAyMi42LTEuNnM3LjQgMTUuOSAxLjYgMjIuNkMzNDkuOCAzNzIuMSAzMTEuMSA0MDAgMjU2IDQwMHMtOTMuOC0yNy45LTExNi4xLTUzLjVjLTUuOC02LjctNS4xLTE2LjggMS42LTIyLjZzMTYuOC01LjEgMjIuNiAxLjZ6TTE0NC40IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhU21pbGUgPSBmYUZhY2VTbWlsZTtcbmNvbnN0IGZhVGh1bWJ0YWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RodW1idGFjaycsXG4gIGljb246IFszODQsIDUxMiwgWzEyODIwNCwgMTI4MzkyLCBcInRodW1iLXRhY2tcIl0sIFwiZjA4ZFwiLCBcIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwTDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOS41IDAgMTEuNCAxNDguMmMzNi43IDE5LjkgNjUuNyA1My4yIDc5LjUgOTQuN2wxIDNjMy4zIDkuOCAxLjYgMjAuNS00LjQgMjguOHMtMTUuNyAxMy4zLTI2IDEzLjNMMzIgMzUyYy0xMC4zIDAtMTkuOS00LjktMjYtMTMuM3MtNy43LTE5LjEtNC40LTI4LjhsMS0zYzEzLjgtNDEuNSA0Mi44LTc0LjggNzkuNS05NC43TDkzLjUgNjQgNjQgNjRDNDYuMyA2NCAzMiA0OS43IDMyIDMyek0xNjAgMzg0bDY0IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2elwiXVxufTtcbmNvbnN0IGZhVGh1bWJUYWNrID0gZmFUaHVtYnRhY2s7XG5jb25zdCBmYVRyb3BoeSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cm9waHknLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NDJdLCBcImYwOTFcIiwgXCJNNDAwIDBMMTc2IDBjLTI2LjUgMC00OC4xIDIxLjgtNDcuMSA0OC4yYy4yIDUuMyAuNCAxMC42IC43IDE1LjhMMjQgNjRDMTAuNyA2NCAwIDc0LjcgMCA4OGMwIDkyLjYgMzMuNSAxNTcgNzguNSAyMDAuN2M0NC4zIDQzLjEgOTguMyA2NC44IDEzOC4xIDc1LjhjMjMuNCA2LjUgMzkuNCAyNiAzOS40IDQ1LjZjMCAyMC45LTE3IDM3LjktMzcuOSAzNy45TDE5MiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI2LjEgMEMzMzcgNDQ4IDMyMCA0MzEgMzIwIDQxMC4xYzAtMTkuNiAxNS45LTM5LjIgMzkuNC00NS42YzM5LjktMTEgOTMuOS0zMi43IDEzOC4yLTc1LjhDNTQyLjUgMjQ1IDU3NiAxODAuNiA1NzYgODhjMC0xMy4zLTEwLjctMjQtMjQtMjRMNDQ2LjQgNjRjLjMtNS4yIC41LTEwLjQgLjctMTUuOEM0NDguMSAyMS44IDQyNi41IDAgNDAwIDB6TTQ4LjkgMTEybDg0LjQgMGM5LjEgOTAuMSAyOS4yIDE1MC4zIDUxLjkgMTkwLjZjLTI0LjktMTEtNTAuOC0yNi41LTczLjItNDguM2MtMzItMzEuMS01OC03Ni02My0xNDIuM3pNNDY0LjEgMjU0LjNjLTIyLjQgMjEuOC00OC4zIDM3LjMtNzMuMiA0OC4zYzIyLjctNDAuMyA0Mi44LTEwMC41IDUxLjktMTkwLjZsODQuNCAwYy01LjEgNjYuMy0zMS4xIDExMS4yLTYzIDE0Mi4zelwiXVxufTtcbmNvbnN0IGZhUGVyc29uUHJheWluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tcHJheWluZycsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODcyMCwgXCJwcmF5XCJdLCBcImY2ODNcIiwgXCJNMzUyIDY0QTY0IDY0IDAgMSAwIDIyNCA2NGE2NCA2NCAwIDEgMCAxMjggMHpNMjMyLjcgMjY0bDIyLjkgMzEuNWM2LjUgOC45IDE2LjMgMTQuNyAyNy4yIDE2LjFzMjEuOS0xLjcgMzAuNC04LjdsODgtNzJjMTcuMS0xNCAxOS42LTM5LjIgNS42LTU2LjNzLTM5LjItMTkuNi01Ni4zLTUuNmwtNTUuMiA0NS4yLTI2LjItMzZDMjUzLjYgMTU2LjcgMjI4LjYgMTQ0IDIwMiAxNDRjLTMwLjkgMC01OS4yIDE3LjEtNzMuNiA0NC40TDc5LjggMjgwLjljLTIwLjIgMzguNS05LjQgODUuOSAyNS42IDExMS44TDE1OC42IDQzMiA3MiA0MzJjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMjA4IDBjMTcuMyAwIDMyLjYtMTEuMSAzOC0yNy41cy0uMy0zNC40LTE0LjItNDQuN0wxODcuNyAzNTRsNDUtOTB6XCJdXG59O1xuY29uc3QgZmFQcmF5ID0gZmFQZXJzb25QcmF5aW5nO1xuY29uc3QgZmFIYW1tZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFtbWVyJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mjk2XSwgXCJmNmUzXCIsIFwiTTQxMy41IDIzNy41Yy0yOC4yIDQuOC01OC4yLTMuNi04MC0yNS40bC0zOC4xLTM4LjFDMjgwLjQgMTU5IDI3MiAxMzguOCAyNzIgMTE3LjZsMC0xMi4xTDE5Mi4zIDYyYy01LjMtMi45LTguNi04LjYtOC4zLTE0LjdzMy45LTExLjUgOS41LTE0bDQ3LjItMjFDMjU5LjEgNC4yIDI3OSAwIDI5OS4yIDBsMTguMSAwYzM2LjcgMCA3MiAxNCA5OC43IDM5LjFsNDQuNiA0MmMyNC4yIDIyLjggMzMuMiA1NS43IDI2LjYgODZMNTAzIDE4M2w4LThjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMjQgMjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg4IDg4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMjQtMjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDgtOC0xNy41LTE3LjV6TTI3LjQgMzc3LjFMMjYwLjkgMTgyLjZjMy41IDQuOSA3LjUgOS42IDExLjggMTRsMzguMSAzOC4xYzYgNiAxMi40IDExLjIgMTkuMiAxNS43TDEzNC45IDQ4NC42Yy0xNC41IDE3LjQtMzYgMjcuNC01OC42IDI3LjRDMzQuMSA1MTIgMCA0NzcuOCAwIDQzNS43YzAtMjIuNiAxMC4xLTQ0LjEgMjcuNC01OC42elwiXVxufTtcbmNvbnN0IGZhSGFuZFBlYWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtcGVhY2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5OTk2XSwgXCJmMjViXCIsIFwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjA4LTY0IDAgMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek05My4zIDUxLjJMMTc1LjkgMjQwbC02OS45IDBMMzQuNyA3Ni44QzI3LjYgNjAuNiAzNSA0MS44IDUxLjIgMzQuN3MzNS4xIC4zIDQyLjEgMTYuNXptMjcgMjIxLjNsLS4yLS41IDY5LjkgMCAyNi4xIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNTYgMGMzOS44IDAgNzItMzIuMiA3Mi03MmwwLS42YzkuNCA1LjQgMjAuMyA4LjYgMzIgOC42YzEzLjIgMCAyNS40LTQgMzUuNi0xMC44YzguNyAyNC45IDMyLjUgNDIuOCA2MC40IDQyLjhjMTEuNyAwIDIyLjYtMy4xIDMyLTguNmwwIDguNmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MGwtNjEuNyAwYy00Mi40IDAtODMuMS0xNi45LTExMy4xLTQ2LjlsLTExLjYtMTEuNkM3Ny41IDQyOS41IDY0IDM5Ni45IDY0IDM2M2wwLTI3YzAtMzIuNyAyNC42LTU5LjcgNTYuMy02My41elwiXVxufTtcbmNvbnN0IGZhUm90YXRlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JvdGF0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODI2MCwgXCJzeW5jLWFsdFwiXSwgXCJmMmYxXCIsIFwiTTE0Mi45IDE0Mi45Yy0xNy41IDE3LjUtMzAuMSAzOC0zNy44IDU5LjhjLTUuOSAxNi43LTI0LjIgMjUuNC00MC44IDE5LjVzLTI1LjQtMjQuMi0xOS41LTQwLjhDNTUuNiAxNTAuNyA3My4yIDEyMiA5Ny42IDk3LjZjODcuMi04Ny4yIDIyOC4zLTg3LjUgMzE1LjgtMUw0NTUgNTVjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMnMxNC44IDEyLjUgMTQuOCAyMi4ybDAgMTI4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC04LjQgMGMwIDAgMCAwIDAgMEwzNDQgMjI0Yy05LjcgMC0xOC41LTUuOC0yMi4yLTE0LjhzLTEuNy0xOS4zIDUuMi0yNi4ybDQxLjEtNDEuMWMtNjIuNi02MS41LTE2My4xLTYxLjItMjI1LjMgMXpNMTYgMzEyYzAtMTMuMyAxMC43LTI0IDI0LTI0bDcuNiAwIC43IDBMMTY4IDI4OGM5LjcgMCAxOC41IDUuOCAyMi4yIDE0LjhzMS43IDE5LjMtNS4yIDI2LjJsLTQxLjEgNDEuMWM2Mi42IDYxLjUgMTYzLjEgNjEuMiAyMjUuMy0xYzE3LjUtMTcuNSAzMC4xLTM4IDM3LjgtNTkuOGM1LjktMTYuNyAyNC4yLTI1LjQgNDAuOC0xOS41czI1LjQgMjQuMiAxOS41IDQwLjhjLTEwLjggMzAuNi0yOC40IDU5LjMtNTIuOSA4My44Yy04Ny4yIDg3LjItMjI4LjMgODcuNS0zMTUuOCAxTDU3IDQ1N2MtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMxNiA0NDkuNyAxNiA0NDBsMC0xMTkuNiAwLS43IDAtNy42elwiXVxufTtcbmNvbnN0IGZhU3luY0FsdCA9IGZhUm90YXRlO1xuY29uc3QgZmFTcGlubmVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NwaW5uZXInLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxMTBcIiwgXCJNMzA0IDQ4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTAgNDE2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQ4IDMwNGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQ2NC00OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xNDIuOSA0MzdBNDggNDggMCAxIDAgNzUgMzY5LjEgNDggNDggMCAxIDAgMTQyLjkgNDM3em0wLTI5NC4yQTQ4IDQ4IDAgMSAwIDc1IDc1YTQ4IDQ4IDAgMSAwIDY3LjkgNjcuOXpNMzY5LjEgNDM3QTQ4IDQ4IDAgMSAwIDQzNyAzNjkuMSA0OCA0OCAwIDEgMCAzNjkuMSA0Mzd6XCJdXG59O1xuY29uc3QgZmFSb2JvdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyb2JvdCcsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTMwMl0sIFwiZjU0NFwiLCBcIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0IDEyMCAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgMjcyYzAgMzkuOC0zMi4yIDcyLTcyIDcybC0zMDQgMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC0yNzJjMC0zOS44IDMyLjItNzIgNzItNzJsMTIwIDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjA4IDM4NGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwem05NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDB6bTk2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzIgMHpNMjY0IDI1NmE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0xNTIgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek00OCAyMjRsMTYgMCAwIDE5Mi0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em01NDQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwIDAtMTkyIDE2IDB6XCJdXG59O1xuY29uc3QgZmFQZWFjZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZWFjZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzk3NzRdLCBcImY2N2NcIiwgXCJNMjI0IDQ0NS4zbDAtMTIxLjgtOTQuMyA3Ny4xYzI2LjEgMjIuOCA1OC41IDM4LjcgOTQuMyA0NC43ek04OS4yIDM1MS4xTDIyNCAyNDAuOGwwLTE3NC4yQzEzMy4yIDgxLjkgNjQgMTYwLjkgNjQgMjU2YzAgMzQuNiA5LjIgNjcuMSAyNS4yIDk1LjF6bTI5My4xIDQ5LjVMMjg4IDMyMy41bDAgMTIxLjhjMzUuNy02IDY4LjEtMjEuOSA5NC4zLTQ0Ljd6bTQwLjYtNDkuNWMxNi0yOCAyNS4yLTYwLjUgMjUuMi05NS4xYzAtOTUuMS02OS4yLTE3NC4xLTE2MC0xODkuM2wwIDE3NC4yTDQyMi44IDM1MS4xek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6XCJdXG59O1xuY29uc3QgZmFHZWFycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnZWFycycsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiY29nc1wiXSwgXCJmMDg1XCIsIFwiTTMwOC41IDEzNS4zYzcuMS02LjMgOS45LTE2LjIgNi4yLTI1Yy0yLjMtNS4zLTQuOC0xMC41LTcuNi0xNS41TDMwNCA4OS40Yy0zLTUtNi4zLTkuOS05LjgtMTQuNmMtNS43LTcuNi0xNS43LTEwLjEtMjQuNy03LjFsLTI4LjIgOS4zYy0xMC43LTguOC0yMy0xNi0zNi4yLTIwLjlMMTk5IDI3LjFjLTEuOS05LjMtOS4xLTE2LjctMTguNS0xNy44QzE3My45IDguNCAxNjcuMiA4IDE2MC40IDhsLS43IDBjLTYuOCAwLTEzLjUgLjQtMjAuMSAxLjJjLTkuNCAxLjEtMTYuNiA4LjYtMTguNSAxNy44TDExNSA1Ni4xYy0xMy4zIDUtMjUuNSAxMi4xLTM2LjIgMjAuOUw1MC41IDY3LjhjLTktMy0xOS0uNS0yNC43IDcuMWMtMy41IDQuNy02LjggOS42LTkuOSAxNC42bC0zIDUuM2MtMi44IDUtNS4zIDEwLjItNy42IDE1LjZjLTMuNyA4LjctLjkgMTguNiA2LjIgMjVsMjIuMiAxOS44QzMyLjYgMTYxLjkgMzIgMTY4LjkgMzIgMTc2cy42IDE0LjEgMS43IDIwLjlMMTEuNSAyMTYuN2MtNy4xIDYuMy05LjkgMTYuMi02LjIgMjVjMi4zIDUuMyA0LjggMTAuNSA3LjYgMTUuNmwzIDUuMmMzIDUuMSA2LjMgOS45IDkuOSAxNC42YzUuNyA3LjYgMTUuNyAxMC4xIDI0LjcgNy4xbDI4LjItOS4zYzEwLjcgOC44IDIzIDE2IDM2LjIgMjAuOWw2LjEgMjkuMWMxLjkgOS4zIDkuMSAxNi43IDE4LjUgMTcuOGM2LjcgLjggMTMuNSAxLjIgMjAuNCAxLjJzMTMuNy0uNCAyMC40LTEuMmM5LjQtMS4xIDE2LjYtOC42IDE4LjUtMTcuOGw2LjEtMjkuMWMxMy4zLTUgMjUuNS0xMi4xIDM2LjItMjAuOWwyOC4yIDkuM2M5IDMgMTkgLjUgMjQuNy03LjFjMy41LTQuNyA2LjgtOS41IDkuOC0xNC42bDMuMS01LjRjMi44LTUgNS4zLTEwLjIgNy42LTE1LjVjMy43LTguNyAuOS0xOC42LTYuMi0yNWwtMjIuMi0xOS44YzEuMS02LjggMS43LTEzLjggMS43LTIwLjlzLS42LTE0LjEtMS43LTIwLjlsMjIuMi0xOS44ek0xMTIgMTc2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTUwNC43IDUwMC41YzYuMyA3LjEgMTYuMiA5LjkgMjUgNi4yYzUuMy0yLjMgMTAuNS00LjggMTUuNS03LjZsNS40LTMuMWM1LTMgOS45LTYuMyAxNC42LTkuOGM3LjYtNS43IDEwLjEtMTUuNyA3LjEtMjQuN2wtOS4zLTI4LjJjOC44LTEwLjcgMTYtMjMgMjAuOS0zNi4ybDI5LjEtNi4xYzkuMy0xLjkgMTYuNy05LjEgMTcuOC0xOC41Yy44LTYuNyAxLjItMTMuNSAxLjItMjAuNHMtLjQtMTMuNy0xLjItMjAuNGMtMS4xLTkuNC04LjYtMTYuNi0xNy44LTE4LjVMNTgzLjkgMzA3Yy01LTEzLjMtMTIuMS0yNS41LTIwLjktMzYuMmw5LjMtMjguMmMzLTkgLjUtMTktNy4xLTI0LjdjLTQuNy0zLjUtOS42LTYuOC0xNC42LTkuOWwtNS4zLTNjLTUtMi44LTEwLjItNS4zLTE1LjYtNy42Yy04LjctMy43LTE4LjYtLjktMjUgNi4ybC0xOS44IDIyLjJjLTYuOC0xLjEtMTMuOC0xLjctMjAuOS0xLjdzLTE0LjEgLjYtMjAuOSAxLjdsLTE5LjgtMjIuMmMtNi4zLTcuMS0xNi4yLTkuOS0yNS02LjJjLTUuMyAyLjMtMTAuNSA0LjgtMTUuNiA3LjZsLTUuMiAzYy01LjEgMy05LjkgNi4zLTE0LjYgOS45Yy03LjYgNS43LTEwLjEgMTUuNy03LjEgMjQuN2w5LjMgMjguMmMtOC44IDEwLjctMTYgMjMtMjAuOSAzNi4yTDMxNS4xIDMxM2MtOS4zIDEuOS0xNi43IDkuMS0xNy44IDE4LjVjLS44IDYuNy0xLjIgMTMuNS0xLjIgMjAuNHMuNCAxMy43IDEuMiAyMC40YzEuMSA5LjQgOC42IDE2LjYgMTcuOCAxOC41bDI5LjEgNi4xYzUgMTMuMyAxMi4xIDI1LjUgMjAuOSAzNi4ybC05LjMgMjguMmMtMyA5LS41IDE5IDcuMSAyNC43YzQuNyAzLjUgOS41IDYuOCAxNC42IDkuOGw1LjQgMy4xYzUgMi44IDEwLjIgNS4zIDE1LjUgNy42YzguNyAzLjcgMTguNiAuOSAyNS02LjJsMTkuOC0yMi4yYzYuOCAxLjEgMTMuOCAxLjcgMjAuOSAxLjdzMTQuMS0uNiAyMC45LTEuN2wxOS44IDIyLjJ6TTQ2NCAzMDRhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2elwiXVxufTtcbmNvbnN0IGZhQ29ncyA9IGZhR2VhcnM7XG5jb25zdCBmYVdhcmVob3VzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3YXJlaG91c2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0OTRcIiwgXCJNMCA0ODhMMCAxNzEuM2MwLTI2LjIgMTUuOS00OS43IDQwLjItNTkuNEwzMDguMSA0LjhjNy42LTMuMSAxNi4xLTMuMSAyMy44IDBMNTk5LjggMTExLjljMjQuMyA5LjcgNDAuMiAzMy4zIDQwLjIgNTkuNEw2NDAgNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI2NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzg0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjY0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptNDg4IDI0bC0zMzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC01NiAzODQgMCAwIDU2YzAgMTMuMy0xMC43IDI0LTI0IDI0ek0xMjggNDAwbDAtNjQgMzg0IDAgMCA2NC0zODQgMHptMC05NmwwLTgwIDM4NCAwIDAgODAtMzg0IDB6XCJdXG59O1xuY29uc3QgZmFBcnJvd1VwUmlnaHREb3RzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Fycm93LXVwLXJpZ2h0LWRvdHMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0YjdcIiwgXCJNMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTAuNyAwTDkuNCAyNjUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyNTYgMTA5LjNsMCA1MC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMMTYwIDB6TTU3NiA4MGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00NDggMjA4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQwMCAzODRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em00OCA4MGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0xMjggMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0yNzIgMzg0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDggODBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTQ0IDUxMmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTU3NiAzMzZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHptLTQ4LTgwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpcIl1cbn07XG5jb25zdCBmYVNwbG90Y2ggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3Bsb3RjaCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjViY1wiLCBcIk0yMDguNSA2Mi4zbDI4LjEtMzYuOUMyNDguOCA5LjQgMjY3LjggMCAyODggMGMyOC41IDAgNTMuNiAxOC43IDYxLjggNDZsMTcuOCA1OS40YzEwLjMgMzQuNCAzNi4xIDYyIDY5LjggNzQuNmwzOS44IDE0LjljMjAuOSA3LjkgMzQuOCAyNy45IDM0LjggNTAuMmMwIDE2LjktNy45IDMyLjgtMjEuNSA0Mi45bC02Ny4zIDUwLjVjLTI0LjMgMTguMi0zNy4yIDQ3LjktMzMuOCA3OC4xbDIuNSAyMi43YzQuMyAzOC43LTI2IDcyLjYtNjUgNzIuNmMtMTQuOCAwLTI5LjMtNS4xLTQwLjgtMTQuM2wtNTUuNC00NC4zYy00LjUtMy42LTkuMy02LjctMTQuNS05LjJjLTE1LjgtNy45LTMzLjctMTAuNC01MS03LjNMODIuNCA0NTEuOUM0Ny44IDQ1OC4yIDE2IDQzMS42IDE2IDM5Ni41YzAtMTMuMiA0LjctMjYgMTMuMS0zNi4ybDExLjItMTMuNGMxNC42LTE3LjQgMjIuNi0zOS40IDIyLjYtNjIuMWMwLTE4LjgtNS41LTM3LjItMTUuOC01M0w4LjggMTczLjVDMy4xIDE2NC43IDAgMTU0LjQgMCAxNDMuOWMwLTMzLjQgMzAuMS01OC44IDYzLTUzLjJsNTEuMyA4LjdjMzUuOSA2LjEgNzIuMi04LjIgOTQuMi0zNy4xelwiXVxufTtcbmNvbnN0IGZhRmFjZUdyaW5IZWFydHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1ncmluLWhlYXJ0cycsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODUyNSwgXCJncmluLWhlYXJ0c1wiXSwgXCJmNTg0XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6TTE5OS4zIDEyOS4xYzE3LjggNC44IDI4LjQgMjMuMSAyMy42IDQwLjhsLTE3LjQgNjVjLTIuMyA4LjUtMTEuMSAxMy42LTE5LjYgMTEuM2wtNjUuMS0xNy40Yy0xNy44LTQuOC0yOC40LTIzLjEtMjMuNi00MC44czIzLjEtMjguNCA0MC44LTIzLjZsMTYuMSA0LjMgNC4zLTE2LjFjNC44LTE3LjggMjMuMS0yOC40IDQwLjgtMjMuNnptMTU0LjMgMjMuNmw0LjMgMTYuMSAxNi4xLTQuM2MxNy44LTQuOCAzNi4xIDUuOCA0MC44IDIzLjZzLTUuOCAzNi4xLTIzLjYgNDAuOGwtNjUuMSAxNy40Yy04LjUgMi4zLTE3LjMtMi44LTE5LjYtMTEuM2wtMTcuNC02NWMtNC44LTE3LjggNS44LTM2LjEgMjMuNi00MC44czM2LjEgNS44IDQwLjkgMjMuNnpcIl1cbn07XG5jb25zdCBmYUdyaW5IZWFydHMgPSBmYUZhY2VHcmluSGVhcnRzO1xuY29uc3QgZmFEaWNlRm91ciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkaWNlLWZvdXInLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU5XSwgXCJmNTI0XCIsIFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNjAgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTM1MiAxNjBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFTaW1DYXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NpbS1jYXJkJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmN2M0XCIsIFwiTTY0IDBMMjQyLjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyA5NmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0QzAgMjguNyAyOC43IDAgNjQgMHpNOTYgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyIDY0IDAgMC02NC0zMiAwek02NCAzNTJsODAgMCA5NiAwIDgwIDAgMC02NC04MCAwLTk2IDAtODAgMCAwIDY0ek0zMjAgMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwIDAgNjQgNjQgMCAwLTMyek0xNjAgMTkybDAgNjQgNjQgMCAwLTY0LTY0IDB6TTI4OCA0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMi02NCAwIDAgNjQgMzIgMHpNMTYwIDM4NGwwIDY0IDY0IDAgMC02NC02NCAwek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwLTY0LTY0IDAgMCAzMnpcIl1cbn07XG5jb25zdCBmYVRyYW5zZ2VuZGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyYW5zZ2VuZGVyJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTg5NSwgXCJ0cmFuc2dlbmRlci1hbHRcIl0sIFwiZjIyNVwiLCBcIk0xMTIgMGM2LjUgMCAxMi4zIDMuOSAxNC44IDkuOXMxLjEgMTIuOS0zLjUgMTcuNGwtMzEgMzFMMTEyIDc4LjFsNy03YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNyA3IDE1LjIgMTUuMkMxODcuNyAxMDcuNiAyMjAuNSA5NiAyNTYgOTZzNjguMyAxMS42IDk0LjkgMzEuMmw2OC44LTY4LjgtMzEtMzFjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjRzOC4zLTkuOSAxNC44LTkuOWw5NiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDk2YzAgNi41LTMuOSAxMi4zLTkuOSAxNC44cy0xMi45IDEuMS0xNy40LTMuNWwtMzEtMzEtNjguOCA2OC44QzQwNC40IDE4Ny43IDQxNiAyMjAuNSA0MTYgMjU2YzAgODAuMi01OSAxNDYuNi0xMzYgMTU4LjJsMCAxNy44IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC0xNy44QzE1NSA0MDIuNiA5NiAzMzYuMiA5NiAyNTZjMC0zNS41IDExLjYtNjguMyAzMS4yLTk0LjlMMTEyIDE0NS45bC03IDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNy03TDU4LjMgOTIuM2wtMzEgMzFjLTQuNiA0LjYtMTEuNSA1LjktMTcuNCAzLjVTMCAxMTguNSAwIDExMkwwIDE2QzAgNy4yIDcuMiAwIDE2IDBsOTYgMHpNMzUyIDI1NmE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6XCJdXG59O1xuY29uc3QgZmFUcmFuc2dlbmRlckFsdCA9IGZhVHJhbnNnZW5kZXI7XG5jb25zdCBmYU1lcmN1cnkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWVyY3VyeScsXG4gIGljb246IFszODQsIDUxMiwgWzk3OTFdLCBcImYyMjNcIiwgXCJNNzIuMSA3Qzg1LjgtNCAxMDYtMS44IDExNyAxMmMxNy42IDIyIDQ0LjcgMzYgNzUgMzZzNTcuMy0xNCA3NS0zNmMxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NWMtNy44IDkuNy0xNi42IDE4LjQtMjYuNCAyNi4xQzMzNy4zIDEwOS43IDM2OCAxNjMuMyAzNjggMjI0YzAgODkuMS02Ni4yIDE2Mi43LTE1MiAxNzQuNGwwIDI1LjYgMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMCAwIDE2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTYtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwzMiAwIDAtMjUuNkM4Mi4yIDM4Ni43IDE2IDMxMy4xIDE2IDIyNGMwLTYwLjcgMzAuNy0xMTQuMyA3Ny41LTE0NS45QzgzLjcgNzAuNSA3NC45IDYxLjcgNjcuMSA1MmMtMTEuMS0xMy44LTguOC0zMy45IDUtNDV6TTgwIDIyNGExMTIgMTEyIDAgMSAwIDIyNCAwQTExMiAxMTIgMCAxIDAgODAgMjI0elwiXVxufTtcbmNvbnN0IGZhQXJyb3dUdXJuRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy10dXJuLWRvd24nLFxuICBpY29uOiBbMzg0LCA1MTIsIFtcImxldmVsLWRvd25cIl0sIFwiZjE0OVwiLCBcIk0zMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwbDk2IDBjNTMgMCA5NiA0MyA5NiA5NmwwIDMwNi43IDczLjQtNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0xMjggMTI4Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTI4LTEyOGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxNjAgNDAyLjcgMTYwIDk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDY0elwiXVxufTtcbmNvbnN0IGZhTGV2ZWxEb3duID0gZmFBcnJvd1R1cm5Eb3duO1xuY29uc3QgZmFQZXJzb25GYWxsaW5nQnVyc3QgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWZhbGxpbmctYnVyc3QnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NDdcIiwgXCJNMjU2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgOS44YzAgMzktMjMuNyA3NC01OS45IDg4LjRDNzEuNiAxNTQuNSAzMiAyMTMgMzIgMjc4LjJMMzIgMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC03My44YzAtMTAgMS42LTE5LjggNC41LTI5TDI2MS4xIDQ5Ny40YzkuNiAxNC44IDI5LjQgMTkuMSA0NC4zIDkuNXMxOS4xLTI5LjQgOS41LTQ0LjNMMjIyLjYgMzIwbDEuNCAwIDgwIDAgMzguNCA1MS4yYzEwLjYgMTQuMSAzMC43IDE3IDQ0LjggNi40czE3LTMwLjcgNi40LTQ0LjhsLTQzLjItNTcuNkMzNDEuMyAyNjMuMSAzMjcuMSAyNTYgMzEyIDI1NmwtNzEuNSAwLTU2LjgtODAuMi0uMi0uM2M0NC43LTI5IDcyLjUtNzkgNzIuNS0xMzMuNmwwLTkuOHpNOTYgODBBNDggNDggMCAxIDAgMCA4MGE0OCA0OCAwIDEgMCA5NiAwek00NjQgMjg2LjFsNTguNiA1My45YzQuOCA0LjQgMTEuOSA1LjUgMTcuOCAyLjZzOS41LTkgOS0xNS41bC01LjYtNzkuNCA3OC43LTEyLjJjNi41LTEgMTEuNy01LjkgMTMuMS0xMi4ycy0xLjEtMTMtNi41LTE2LjdsLTY1LjYtNDUuMUw2MDMgOTIuMmMzLjMtNS43IDIuNy0xMi44LTEuNC0xNy45cy0xMC45LTcuMi0xNy4yLTUuM0w1MDguMyA5Mi4xbC0yOS40LTc0QzQ3Ni40IDEyIDQ3MC42IDggNDY0IDhzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzRMMzQzLjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjEtNjUuNiA0NS4xYy01LjQgMy43LTggMTAuMy02LjUgMTYuN2MuMSAuMyAuMSAuNiAuMiAuOGwxOS40IDBjMjAuMSAwIDM5LjIgNy41IDUzLjggMjAuOGwxOC40IDIuOUwzODMgMjY1LjNsMzYuMiA0OC4zYzIuMSAyLjggMy45IDUuNyA1LjUgOC42TDQ2NCAyODYuMXpcIl1cbn07XG5jb25zdCBmYUF3YXJkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2F3YXJkJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNTU5XCIsIFwiTTE3My44IDUuNWMxMS03LjMgMjUuNC03LjMgMzYuNCAwTDIyOCAxNy4yYzYgMy45IDEzIDUuOCAyMC4xIDUuNGwyMS4zLTEuM2MxMy4yLS44IDI1LjYgNi40IDMxLjUgMTguMmw5LjYgMTkuMWMzLjIgNi40IDguNCAxMS41IDE0LjcgMTQuN0wzNDQuNSA4M2MxMS44IDUuOSAxOSAxOC4zIDE4LjIgMzEuNWwtMS4zIDIxLjNjLS40IDcuMSAxLjUgMTQuMiA1LjQgMjAuMWwxMS44IDE3LjhjNy4zIDExIDcuMyAyNS40IDAgMzYuNEwzNjYuOCAyMjhjLTMuOSA2LTUuOCAxMy01LjQgMjAuMWwxLjMgMjEuM2MuOCAxMy4yLTYuNCAyNS42LTE4LjIgMzEuNWwtMTkuMSA5LjZjLTYuNCAzLjItMTEuNSA4LjQtMTQuNyAxNC43TDMwMSAzNDQuNWMtNS45IDExLjgtMTguMyAxOS0zMS41IDE4LjJsLTIxLjMtMS4zYy03LjEtLjQtMTQuMiAxLjUtMjAuMSA1LjRsLTE3LjggMTEuOGMtMTEgNy4zLTI1LjQgNy4zLTM2LjQgMEwxNTYgMzY2LjhjLTYtMy45LTEzLTUuOC0yMC4xLTUuNGwtMjEuMyAxLjNjLTEzLjIgLjgtMjUuNi02LjQtMzEuNS0xOC4ybC05LjYtMTkuMWMtMy4yLTYuNC04LjQtMTEuNS0xNC43LTE0LjdMMzkuNSAzMDFjLTExLjgtNS45LTE5LTE4LjMtMTguMi0zMS41bDEuMy0yMS4zYy40LTcuMS0xLjUtMTQuMi01LjQtMjAuMUw1LjUgMjEwLjJjLTcuMy0xMS03LjMtMjUuNCAwLTM2LjRMMTcuMiAxNTZjMy45LTYgNS44LTEzIDUuNC0yMC4xbC0xLjMtMjEuM2MtLjgtMTMuMiA2LjQtMjUuNiAxOC4yLTMxLjVsMTkuMS05LjZDNjUgNzAuMiA3MC4yIDY1IDczLjQgNTguNkw4MyAzOS41YzUuOS0xMS44IDE4LjMtMTkgMzEuNS0xOC4ybDIxLjMgMS4zYzcuMSAuNCAxNC4yLTEuNSAyMC4xLTUuNEwxNzMuOCA1LjV6TTI3MiAxOTJhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAwek0xLjMgNDQxLjhMNDQuNCAzMzkuM2MuMiAuMSAuMyAuMiAuNCAuNGw5LjYgMTkuMWMxMS43IDIzLjIgMzYgMzcuMyA2MiAzNS44bDIxLjMtMS4zYy4yIDAgLjUgMCAuNyAuMmwxNy44IDExLjhjNS4xIDMuMyAxMC41IDUuOSAxNi4xIDcuN2wtMzcuNiA4OS4zYy0yLjMgNS41LTcuNCA5LjItMTMuMyA5LjdzLTExLjYtMi4yLTE0LjgtNy4yTDc0LjQgNDU1LjVsLTU2LjEgOC4zYy01LjcgLjgtMTEuNC0xLjUtMTUtNnMtNC4zLTEwLjctMi4xLTE2em0yNDggNjAuNEwyMTEuNyA0MTNjNS42LTEuOCAxMS00LjMgMTYuMS03LjdsMTcuOC0xMS44Yy4yLS4xIC40LS4yIC43LS4ybDIxLjMgMS4zYzI2IDEuNSA1MC4zLTEyLjYgNjItMzUuOGw5LjYtMTkuMWMuMS0uMiAuMi0uMyAuNC0uNGw0My4yIDEwMi41YzIuMiA1LjMgMS40IDExLjQtMi4xIDE2cy05LjMgNi45LTE1IDZsLTU2LjEtOC4zLTMyLjIgNDkuMmMtMy4yIDUtOC45IDcuNy0xNC44IDcuMnMtMTEtNC4zLTEzLjMtOS43elwiXVxufTtcbmNvbnN0IGZhVGlja2V0U2ltcGxlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RpY2tldC1zaW1wbGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInRpY2tldC1hbHRcIl0sIFwiZjNmZlwiLCBcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgOC44LTcuNCAxNS43LTE1LjcgMTguNkM1NDEuNSAyMTcuMSA1MjggMjM1IDUyOCAyNTZzMTMuNSAzOC45IDMyLjMgNDUuNGM4LjMgMi45IDE1LjcgOS44IDE1LjcgMTguNmwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTguOCA3LjQtMTUuNyAxNS43LTE4LjZDMzQuNSAyOTQuOSA0OCAyNzcgNDggMjU2cy0xMy41LTM4LjktMzIuMy00NS40QzcuNCAyMDcuNyAwIDIwMC44IDAgMTkybDAtNjR6XCJdXG59O1xuY29uc3QgZmFUaWNrZXRBbHQgPSBmYVRpY2tldFNpbXBsZTtcbmNvbnN0IGZhQnVpbGRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmcnLFxuICBpY29uOiBbMzg0LCA1MTIsIFsxMjc5NzAsIDYxNjg3XSwgXCJmMWFkXCIsIFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDAgMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgODAgOTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTQxNmMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAwek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTEyLTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTgwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhQW5nbGVzTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhbmdsZXMtbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzE3MSwgXCJhbmdsZS1kb3VibGUtbGVmdFwiXSwgXCJmMTAwXCIsIFwiTTQxLjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyNTYgMjQ2LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6bTM1Mi0xNjBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMDEuMyAyNTYgNDM4LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDB6XCJdXG59O1xuY29uc3QgZmFBbmdsZURvdWJsZUxlZnQgPSBmYUFuZ2xlc0xlZnQ7XG5jb25zdCBmYVFyY29kZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdxcmNvZGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtdLCBcImYwMjlcIiwgXCJNMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODB6TTY0IDk2bDAgNjQgNjQgMCAwLTY0TDY0IDk2ek0wIDMzNmMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6bTY0IDE2bDAgNjQgNjQgMCAwLTY0LTY0IDB6TTMwNCAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6bTgwIDY0bC02NCAwIDAgNjQgNjQgMCAwLTY0ek0yNTYgMzA0YzAtOC44IDcuMi0xNiAxNi0xNmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNnM3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDk2YzAgOC44LTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2cy03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTYwek0zNjggNDgwYTE2IDE2IDAgMSAxIDAtMzIgMTYgMTYgMCAxIDEgMCAzMnptNjQgMGExNiAxNiAwIDEgMSAwLTMyIDE2IDE2IDAgMSAxIDAgMzJ6XCJdXG59O1xuY29uc3QgZmFDbG9ja1JvdGF0ZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvY2stcm90YXRlLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcImhpc3RvcnlcIl0sIFwiZjFkYVwiLCBcIk03NSA3NUw0MSA0MUMyNS45IDI1LjkgMCAzNi42IDAgNTcuOUwwIDE2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTAuMSAwYzIxLjQgMCAzMi4xLTI1LjkgMTctNDFsLTMwLjgtMzAuOEMxNTUgODUuNSAyMDMgNjQgMjU2IDY0YzEwNiAwIDE5MiA4NiAxOTIgMTkycy04NiAxOTItMTkyIDE5MmMtNDAuOCAwLTc4LjYtMTIuNy0xMDkuNy0zNC40Yy0xNC41LTEwLjEtMzQuNC02LjYtNDQuNiA3LjlzLTYuNiAzNC40IDcuOSA0NC42QzE1MS4yIDQ5NSAyMDEuNyA1MTIgMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBDMTg1LjMgMCAxMjEuMyAyOC43IDc1IDc1em0xODEgNTNjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTA0YzAgNi40IDIuNSAxMi41IDcgMTdsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NS02NSAwLTk0LjFjMC0xMy4zLTEwLjctMjQtMjQtMjR6XCJdXG59O1xuY29uc3QgZmFIaXN0b3J5ID0gZmFDbG9ja1JvdGF0ZUxlZnQ7XG5jb25zdCBmYUZhY2VHcmluQmVhbVN3ZWF0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3Jpbi1iZWFtLXN3ZWF0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE3LCBcImdyaW4tYmVhbS1zd2VhdFwiXSwgXCJmNTgzXCIsIFwiTTQ3Ni44IDEyNi4zYy00LjEgMS4xLTguNCAxLjctMTIuOCAxLjdjLTI2LjUgMC00OC0yMS00OC00N2MwLTUgMS44LTExLjMgNC42LTE4LjFjLjMtLjcgLjYtMS40IC45LTIuMWM5LTIwLjIgMjYuNS00NC45IDM2LTU3LjVjMy4yLTQuNCA5LjYtNC40IDEyLjggMEM0ODMuNCAyMC42IDUxMiA2MSA1MTIgODFjMCAyMS43LTE0LjkgMzkuOC0zNS4yIDQ1LjN6TTI1NiAwYzUxLjQgMCA5OS4zIDE1LjIgMTM5LjQgNDEuMmMtMS41IDMuMS0zIDYuMi00LjMgOS4zYy0zLjQgOC03LjEgMTktNy4xIDMwLjVjMCA0NC4zIDM2LjYgNzkgODAgNzljOS42IDAgMTguOC0xLjcgMjcuNC00LjhjMTMuMyAzMC45IDIwLjYgNjUgMjAuNiAxMDAuOGMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMHpNMzgzLjggMzE3LjhDMzQ1LjMgMzI5LjQgMzAxLjkgMzM2IDI1NiAzMzZzLTg5LjMtNi42LTEyNy44LTE4LjJjLTEyLjMtMy43LTI0LjMgNy0xOS4yIDE4LjdjMjQuNSA1Ni45IDgxLjEgOTYuNyAxNDcgOTYuN3MxMjIuNS0zOS44IDE0Ny05Ni43YzUuMS0xMS44LTYuOS0yMi40LTE5LjItMTguN3ptLTE2Ni4yLTg5czAgMCAwIDBzMCAwIDAgMGMyLjEgMi44IDUuNyAzLjkgOC45IDIuOHM1LjUtNC4xIDUuNS03LjZjMC0xNy45LTYuNy0zNS42LTE2LjYtNDguOGMtOS44LTEzLTIzLjktMjMuMi0zOS40LTIzLjJzLTI5LjYgMTAuMi0zOS40IDIzLjJDMTI2LjcgMTg4LjQgMTIwIDIwNi4xIDEyMCAyMjRjMCAzLjQgMi4yIDYuNSA1LjUgNy42czYuOSAwIDguOS0yLjhjMCAwIDAgMCAwIDBzMCAwIDAgMGMwIDAgMCAwIDAgMGwuMi0uMmMuMi0uMiAuNC0uNSAuNy0uOWMuNi0uOCAxLjYtMiAyLjgtMy40YzIuNS0yLjggNi02LjYgMTAuMi0xMC4zYzguOC03LjggMTguOC0xNCAyNy43LTE0czE4LjkgNi4yIDI3LjcgMTRjNC4yIDMuNyA3LjcgNy41IDEwLjIgMTAuM2MxLjIgMS40IDIuMiAyLjYgMi44IDMuNGMuMyAuNCAuNiAuNyAuNyAuOWwuMiAuMmMwIDAgMCAwIDAgMGMwIDAgMCAwIDAgMHptMTYwIDBzMCAwIDAgMHMwIDAgMCAwczAgMCAwIDBjMi4xIDIuOCA1LjcgMy45IDguOSAyLjhzNS41LTQuMSA1LjUtNy42YzAtMTcuOS02LjctMzUuNi0xNi42LTQ4LjhjLTkuOC0xMy0yMy45LTIzLjItMzkuNC0yMy4ycy0yOS42IDEwLjItMzkuNCAyMy4yQzI4Ni43IDE4OC40IDI4MCAyMDYuMSAyODAgMjI0YzAgMy40IDIuMiA2LjUgNS41IDcuNnM2LjkgMCA4LjktMi44YzAgMCAwIDAgMCAwczAgMCAwIDBjMCAwIDAgMCAwIDBsLjItLjJjLjItLjIgLjQtLjUgLjctLjljLjYtLjggMS42LTIgMi44LTMuNGMyLjUtMi44IDYtNi42IDEwLjItMTAuM2M4LjgtNy44IDE4LjgtMTQgMjcuNy0xNHMxOC45IDYuMiAyNy43IDE0YzQuMiAzLjcgNy43IDcuNSAxMC4yIDEwLjNjMS4yIDEuNCAyLjIgMi42IDIuOCAzLjRjLjMgLjQgLjYgLjcgLjcgLjlsLjIgLjJjMCAwIDAgMCAwIDB6XCJdXG59O1xuY29uc3QgZmFHcmluQmVhbVN3ZWF0ID0gZmFGYWNlR3JpbkJlYW1Td2VhdDtcbmNvbnN0IGZhRmlsZUV4cG9ydCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaWxlLWV4cG9ydCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiYXJyb3ctcmlnaHQtZnJvbS1maWxlXCJdLCBcImY1NmVcIiwgXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjI0IDBsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDAgMCAxMjgtMTY4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTY4IDAgMCAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0zODQgMzM2bDAtNDggMTEwLjEgMC0zOS0zOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04MCA4MGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzOS0zOUwzODQgMzM2em0wLTIwOGwtMTI4IDBMMjU2IDAgMzg0IDEyOHpcIl1cbn07XG5jb25zdCBmYUFycm93UmlnaHRGcm9tRmlsZSA9IGZhRmlsZUV4cG9ydDtcbmNvbnN0IGZhU2hpZWxkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaWVsZCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODczNywgXCJzaGllbGQtYmxhbmtcIl0sIFwiZjEzMlwiLCBcIk0yNTYgMGM0LjYgMCA5LjIgMSAxMy40IDIuOUw0NTcuNyA4Mi44YzIyIDkuMyAzOC40IDMxIDM4LjMgNTcuMmMtLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yYy0xNi43IDgtMzYuMSA4LTUyLjggMEM1Ny4zIDQyMC43IDE2LjUgMjM5LjIgMTYgMTQwYy0uMS0yNi4yIDE2LjMtNDcuOSAzOC4zLTU3LjJMMjQyLjcgMi45QzI0Ni44IDEgMjUxLjQgMCAyNTYgMHpcIl1cbn07XG5jb25zdCBmYVNoaWVsZEJsYW5rID0gZmFTaGllbGQ7XG5jb25zdCBmYUFycm93VXBTaG9ydFdpZGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdXAtc2hvcnQtd2lkZScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wic29ydC1hbW91bnQtdXAtYWx0XCJdLCBcImY4ODVcIiwgXCJNMTUxLjYgNDIuNEMxNDUuNSAzNS44IDEzNyAzMiAxMjggMzJzLTE3LjUgMy44LTIzLjYgMTAuNGwtODggOTZjLTExLjkgMTMtMTEuMSAzMy4zIDIgNDUuMnMzMy4zIDExLjEgNDUuMi0yTDk2IDE0Ni4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzAxLjcgMzIuNCAzNS40YzExLjkgMTMgMzIuMiAxMy45IDQ1LjIgMnMxMy45LTMyLjIgMi00NS4ybC04OC05NnpNMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMHptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwelwiXVxufTtcbmNvbnN0IGZhU29ydEFtb3VudFVwQWx0ID0gZmFBcnJvd1VwU2hvcnRXaWRlO1xuY29uc3QgZmFIb3VzZU1lZGljYWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtbWVkaWNhbCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTNiMlwiLCBcIk01NDMuOCAyODcuNmMxNyAwIDMyLTE0IDMyLTMyLjFjMS05LTMtMTctMTEtMjRMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFsMzIgMCAwIDE2MC40YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMC40IDBjMzUuNSAwIDY0LjItMjguOCA2NC02NC4zbC0uNy0xNjAuMiAzMiAwek0yNTYgMjA4YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDggMCAwLTQ4elwiXVxufTtcbmNvbnN0IGZhR29sZkJhbGxUZWUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ29sZi1iYWxsLXRlZScsXG4gIGljb246IFszODQsIDUxMiwgW1wiZ29sZi1iYWxsXCJdLCBcImY0NTBcIiwgXCJNMzg0IDE5MmMwIDY2LjgtMzQuMSAxMjUuNi04NS44IDE2MEw4NS44IDM1MkMzNC4xIDMxNy42IDAgMjU4LjggMCAxOTJDMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyek0yNDIuMSAyNTYuNmMwIDE4LjUtMTUgMzMuNS0zMy41IDMzLjVjLTQuOSAwLTkuMSA1LjEtNS40IDguNGM1LjkgNS4yIDEzLjcgOC40IDIyLjEgOC40YzE4LjUgMCAzMy41LTE1IDMzLjUtMzMuNWMwLTguNS0zLjItMTYuMi04LjQtMjIuMWMtMy4zLTMuNy04LjQgLjUtOC40IDUuNHptLTUyLjMtNDkuM2MtNC45IDAtOS4xIDUuMS01LjQgOC40YzUuOSA1LjIgMTMuNyA4LjQgMjIuMSA4LjRjMTguNSAwIDMzLjUtMTUgMzMuNS0zMy41YzAtOC41LTMuMi0xNi4yLTguNC0yMi4xYy0zLjMtMy43LTguNCAuNS04LjQgNS40YzAgMTguNS0xNSAzMy41LTMzLjUgMzMuNXptMTEzLjUtMTcuNWMwIDE4LjUtMTUgMzMuNS0zMy41IDMzLjVjLTQuOSAwLTkuMSA1LjEtNS40IDguNGM1LjkgNS4yIDEzLjcgOC40IDIyLjEgOC40YzE4LjUgMCAzMy41LTE1IDMzLjUtMzMuNWMwLTguNS0zLjItMTYuMi04LjQtMjIuMWMtMy4zLTMuNy04LjQgLjUtOC40IDUuNHpNOTYgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDAgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyelwiXVxufTtcbmNvbnN0IGZhR29sZkJhbGwgPSBmYUdvbGZCYWxsVGVlO1xuY29uc3QgZmFDaXJjbGVDaGV2cm9uTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUtY2hldnJvbi1sZWZ0JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJjaGV2cm9uLWNpcmNsZS1sZWZ0XCJdLCBcImYxMzdcIiwgXCJNNTEyIDI1NkEyNTYgMjU2IDAgMSAwIDAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDB6TTI3MSAxMzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC04NyA4NyA4NyA4N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDE2NyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDI3MSAxMzV6XCJdXG59O1xuY29uc3QgZmFDaGV2cm9uQ2lyY2xlTGVmdCA9IGZhQ2lyY2xlQ2hldnJvbkxlZnQ7XG5jb25zdCBmYUhvdXNlQ2hpbW5leVdpbmRvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdob3VzZS1jaGltbmV5LXdpbmRvdycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTAwZFwiLCBcIk01NzUuOCAyNTUuNWMwIDE4LTE1IDMyLjEtMzIgMzIuMWwtMzIgMCAuNyAxNjAuMmMuMiAzNS41LTI4LjUgNjQuMy02NCA2NC4zbC0zMjAuNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE2MC40LTMyIDBjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQxNiAxMDAuNyA0MTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyMSA1Mi44IDQ2LjRjOCA3IDEyIDE1IDExIDI0ek0yNDggMTkyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtODAgMHpcIl1cbn07XG5jb25zdCBmYVBlbk5pYiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZW4tbmliJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTAwMDFdLCBcImY1YWRcIiwgXCJNMzY4LjQgMTguM0wzMTIuNyA3NC4xIDQzNy45IDE5OS4zbDU1LjctNTUuN2MyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMkw0NDcuNiAxOC4zYy0yMS45LTIxLjktNTcuMy0yMS45LTc5LjIgMHpNMjg4IDk0LjZsLTkuMiAyLjhMMTM0LjcgMTQwLjZjLTE5LjkgNi0zNS43IDIxLjItNDIuMyA0MUwzLjggNDQ1LjhjLTMuOCAxMS4zLTEgMjMuOSA3LjMgMzIuNEwxNjQuNyAzMjQuN2MtMy02LjMtNC43LTEzLjMtNC43LTIwLjdjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGMtNy40IDAtMTQuNC0xLjctMjAuNy00LjdMMzMuNyA1MDAuOWM4LjYgOC4zIDIxLjEgMTEuMiAzMi40IDcuM2wyNjQuMy04OC42YzE5LjctNi42IDM1LTIyLjQgNDEtNDIuM2w0My4yLTE0NC4xIDIuNy05LjJMMjg4IDk0LjZ6XCJdXG59O1xuY29uc3QgZmFUZW50QXJyb3dUdXJuTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW50LWFycm93LXR1cm4tbGVmdCcsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU4MFwiLCBcIk0xMjAuMSA0MS44YzkuOS04LjkgMTAuNy0yNCAxLjgtMzMuOVM5Ny44LTIuNyA4Ny45IDYuMmwtODAgNzJDMi45IDgyLjcgMCA4OS4yIDAgOTZzMi45IDEzLjMgNy45IDE3LjhsODAgNzJjOS45IDguOSAyNSA4LjEgMzMuOS0xLjhzOC4xLTI1LTEuOC0zMy45TDg2LjUgMTIwIDQ1NiAxMjBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDBjMC02Ni4zLTUzLjctMTIwLTEyMC0xMjBMODYuNSA3MmwzMy41LTMwLjJ6TTMwNy40IDE2Ni41Yy0xMS41LTguNy0yNy4zLTguNy0zOC44IDBsLTE2OCAxMjhjLTYuNiA1LTExIDEyLjUtMTIuMyAyMC43bC0yNCAxNjBjLTEuNCA5LjIgMS4zIDE4LjYgNy40IDI1LjZTODYuNyA1MTIgOTYgNTEybDE0NCAwIDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMTguMWMwLTUuNSA0LjQtOS45IDkuOS05LjljMy43IDAgNy4yIDIuMSA4LjggNS41bDY4LjQgMTM2LjhjNS40IDEwLjggMTYuNSAxNy43IDI4LjYgMTcuN2w2MC4yIDAgMTYgMGM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjh6XCJdXG59O1xuY29uc3QgZmFUZW50cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW50cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU4MlwiLCBcIk0zOTYuNiA2LjVMMjM1LjggMTI5LjFjOS42IDEuOCAxOC45IDUuOCAyNyAxMmwxNjggMTI4YzEzLjIgMTAuMSAyMiAyNC45IDI0LjUgNDEuNGw2LjIgNDEuNUw2MDggMzUyYzkuMyAwIDE4LjItNC4xIDI0LjItMTEuMXM4LjgtMTYuNCA3LjQtMjUuNmwtMjQtMTYwYy0xLjItOC4yLTUuNi0xNS43LTEyLjMtMjAuN2wtMTY4LTEyOGMtMTEuNS04LjctMjcuMy04LjctMzguOCAwem0tMTUzLjIgMTYwYy0xMS41LTguNy0yNy4zLTguNy0zOC44IDBsLTE2OCAxMjhjLTYuNiA1LTExIDEyLjUtMTIuMyAyMC43bC0yNCAxNjBjLTEuNCA5LjIgMS4zIDE4LjYgNy40IDI1LjZTMjIuNyA1MTIgMzIgNTEybDE0NCAwIDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMTguMWMwLTUuNSA0LjQtOS45IDkuOS05LjljMy43IDAgNy4yIDIuMSA4LjggNS41bDY4LjQgMTM2LjhjNS40IDEwLjggMTYuNSAxNy43IDI4LjYgMTcuN2w2MC4yIDAgMTYgMGM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjh6XCJdXG59O1xuY29uc3QgZmFXYW5kTWFnaWMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2FuZC1tYWdpYycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wibWFnaWNcIl0sIFwiZjBkMFwiLCBcIk0xNC4xIDQ2My4zYy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOUwzOTUuNCAxNC4xYzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDM0LjYgMzQuNmMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOUwxMTYuNSA0OTcuOWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMTQuMSA0NjMuM3pNMzQ3LjYgMTg3LjZsMTA1LTEwNUw0MjkuNCA1OS4zbC0xMDUgMTA1IDIzLjMgMjMuM3pcIl1cbn07XG5jb25zdCBmYU1hZ2ljID0gZmFXYW5kTWFnaWM7XG5jb25zdCBmYURvZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkb2cnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMjFdLCBcImY2ZDNcIiwgXCJNMzA5LjYgMTU4LjVMMzMyLjcgMTkuOEMzMzQuNiA4LjQgMzQ0LjUgMCAzNTYuMSAwYzcuNSAwIDE0LjUgMy41IDE5IDkuNUwzOTIgMzJsNTIuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFMNDk2IDY0bDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMzIgMC0xNiAwLTIxLjMgMC01LjEgMzAuNS0xMTItNjR6TTQxNiAyNTYuMUw0MTYgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExNS4yYy0yNCAxMi4zLTUxLjIgMTkuMi04MCAxOS4ycy01Ni02LjktODAtMTkuMkwxNjAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTIzMC4yYy0yOC44LTEwLjktNTEuNC0zNS4zLTU5LjItNjYuNUwxIDE2Ny44Yy00LjMtMTcuMSA2LjEtMzQuNSAyMy4zLTM4LjhzMzQuNSA2LjEgMzguOCAyMy4zbDMuOSAxNS41QzcwLjUgMTgyIDgzLjMgMTkyIDk4IDE5MmwzMCAwIDE2IDAgMTU5LjggMEw0MTYgMjU2LjF6TTQ2NCA4MGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwelwiXVxufTtcbmNvbnN0IGZhQ2Fycm90ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcnJvdCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyOTM2NV0sIFwiZjc4N1wiLCBcIk0zNDYuNyA2QzMzNy42IDE3IDMyMCA0Mi4zIDMyMCA3MmMwIDQwIDE1LjMgNTUuMyA0MCA4MHM0MCA0MCA4MCA0MGMyOS43IDAgNTUtMTcuNiA2Ni0yNi43YzQtMy4zIDYtOC4yIDYtMTMuM3MtMi0xMC02LTEzLjJjLTExLjQtOS4xLTM4LjMtMjYuOC03NC0yNi44Yy0zMiAwLTQwIDgtNDAgOHM4LTggOC00MGMwLTM1LjctMTcuNy02Mi42LTI2LjgtNzRDMzcwIDIgMzY1LjEgMCAzNjAgMHMtMTAgMi0xMy4zIDZ6TTI0NC42IDEzNmMtNDAgMC03Ny4xIDE4LjEtMTAxLjcgNDguMmw2MC41IDYwLjVjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtNTUuMy01NS4zIDAgLjFMMi4yIDQ3Ny45Qy0yIDQ4Ny0uMSA0OTcuOCA3IDUwNXMxNy45IDkgMjcuMSA0LjhsMTM0LjctNjIuNC01Mi4xLTUyLjFjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEwxOTkuNyA0MzNsMTAwLjItNDYuNGM0Ni40LTIxLjUgNzYuMi02OCA3Ni4yLTExOS4yQzM3NiAxOTQuOCAzMTcuMiAxMzYgMjQ0LjYgMTM2elwiXVxufTtcbmNvbnN0IGZhTW9vbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb29uJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTI3NzY5LCA5MjE0XSwgXCJmMTg2XCIsIFwiTTIyMy41IDMyQzEwMCAzMiAwIDEzMi4zIDAgMjU2UzEwMCA0ODAgMjIzLjUgNDgwYzYwLjYgMCAxMTUuNS0yNC4yIDE1NS44LTYzLjRjNS00LjkgNi4zLTEyLjUgMy4xLTE4LjdzLTEwLjEtOS43LTE3LTguNWMtOS44IDEuNy0xOS44IDIuNi0zMC4xIDIuNmMtOTYuOSAwLTE3NS41LTc4LjgtMTc1LjUtMTc2YzAtNjUuOCAzNi0xMjMuMSA4OS4zLTE1My4zYzYuMS0zLjUgOS4yLTEwLjUgNy43LTE3LjNzLTcuMy0xMS45LTE0LjMtMTIuNWMtNi4zLS41LTEyLjYtLjgtMTktLjh6XCJdXG59O1xuY29uc3QgZmFXaW5lR2xhc3NFbXB0eSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd3aW5lLWdsYXNzLWVtcHR5JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXCJ3aW5lLWdsYXNzLWFsdFwiXSwgXCJmNWNlXCIsIFwiTTY0IDBDNDcuNCAwIDMzLjUgMTIuOCAzMi4xIDI5LjNsLTE0IDE2OC40Yy02IDcyIDQyLjUgMTM1LjIgMTA5LjkgMTUwLjZsMCA5OS42LTQ4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODAgMCA4MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwIDAtOTkuNmM2Ny40LTE1LjQgMTE1LjktNzguNiAxMDkuOS0xNTAuNmwtMTQtMTY4LjRDMjg2LjUgMTIuOCAyNzIuNiAwIDI1NiAwTDY0IDB6TTgxLjkgMjAzLjFMOTMuNCA2NGwxMzMuMSAwIDExLjYgMTM5LjFDMjQyIDI0OC44IDIwNS45IDI4OCAxNjAgMjg4cy04Mi0zOS4yLTc4LjEtODQuOXpcIl1cbn07XG5jb25zdCBmYVdpbmVHbGFzc0FsdCA9IGZhV2luZUdsYXNzRW1wdHk7XG5jb25zdCBmYUNoZWVzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaGVlc2UnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3ZWZcIiwgXCJNNTEyIDI0MC4ybDAgMTUuOEwwIDI1NmMwLTIwIDEwLTM4LjcgMjYuNi00OS44TDI3NC45IDQwLjdjOC42LTUuNyAxOC42LTguNyAyOC45LTguN0M0MTguOCAzMiA1MTIgMTI1LjIgNTEyIDI0MC4yem0wIDQ3LjhsMCAxMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDI4OGw1MTIgMHpcIl1cbn07XG5jb25zdCBmYVlpbllhbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneWluLXlhbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs5Nzc1XSwgXCJmNmFkXCIsIFwiTTI1NiA2NGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZDMTUwIDQ0OCA2NCAzNjIgNjQgMjU2UzE1MCA2NCAyNTYgNjR6bTAgNDQ4QTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnptMzItMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTIyNCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpcIl1cbn07XG5jb25zdCBmYU11c2ljID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ211c2ljJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTI1XSwgXCJmMDAxXCIsIFwiTTQ5OS4xIDYuM2M4LjEgNiAxMi45IDE1LjYgMTIuOSAyNS43bDAgNzIgMCAyNjRjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwczQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42TDQ0OCAxNDcgMTkyIDIyMy44IDE5MiA0MzJjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwczQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42TDEyOCAyMDBsMC03MmMwLTE0LjEgOS4zLTI2LjYgMjIuOC0zMC43bDMyMC05NmM5LjctMi45IDIwLjItMS4xIDI4LjMgNXpcIl1cbn07XG5jb25zdCBmYUNvZGVDb21taXQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29kZS1jb21taXQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImYzODZcIiwgXCJNMzIwIDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTU2LjgtNDhDNDYyIDM2MSAzOTcuNCA0MTYgMzIwIDQxNnMtMTQyLTU1LTE1Ni44LTEyOEwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTMxLjIgMEMxNzggMTUxIDI0Mi42IDk2IDMyMCA5NnMxNDIgNTUgMTU2LjggMTI4TDYwOCAyMjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEzMS4yIDB6XCJdXG59O1xuY29uc3QgZmFUZW1wZXJhdHVyZUxvdyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0ZW1wZXJhdHVyZS1sb3cnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY3NmJcIiwgXCJNNDQ4IDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCA5NmE5NiA5NiAwIDEgMSAxOTIgMEE5NiA5NiAwIDEgMSAzMjAgOTZ6TTE0NCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNjQuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41QzcwLjIgMzMyLjYgNjQgMzQ5LjUgNjQgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNUwxOTIgMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0zMiAxMTJDMzIgNTAuMiA4Mi4xIDAgMTQ0IDBzMTEyIDUwLjEgMTEyIDExMmwwIDE2NC40YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzAgNDQ3LjUgMCAzNjhjMC0zMy4yIDExLjItNjMuOCAzMC4xLTg4LjFjLjktMS4yIDEuNS0yLjIgMS43LTIuOGMuMS0uMyAuMi0uNSAuMi0uNkwzMiAxMTJ6TTE5MiAzNjhjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuN2MwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNTAuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdXG59O1xuY29uc3QgZmFQZXJzb25CaWtpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWJpa2luZycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODY5MiwgXCJiaWtpbmdcIl0sIFwiZjg0YVwiLCBcIk00MDAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0yNy4yIDY0bC02MS44LTQ4LjhjLTE3LjMtMTMuNi00MS43LTEzLjgtNTkuMS0uM2wtODMuMSA2NC4yYy0zMC43IDIzLjgtMjguNSA3MC44IDQuMyA5MS42TDI4OCAzMDUuMSAyODggNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xMC43LTUuMy0yMC43LTE0LjItMjYuNkwyOTUgMjMyLjlsNjAuMy00OC41TDM5NiAyMTdjNS43IDQuNSAxMi43IDcgMjAgN2w2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01Mi44IDB6TTU2IDM4NGE3MiA3MiAwIDEgMSAxNDQgMEE3MiA3MiAwIDEgMSA1NiAzODR6bTIwMCAwQTEyOCAxMjggMCAxIDAgMCAzODRhMTI4IDEyOCAwIDEgMCAyNTYgMHptMTg0IDBhNzIgNzIgMCAxIDEgMTQ0IDAgNzIgNzIgMCAxIDEgLTE0NCAwem0yMDAgMGExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAwelwiXVxufTtcbmNvbnN0IGZhQmlraW5nID0gZmFQZXJzb25CaWtpbmc7XG5jb25zdCBmYUJyb29tID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Jyb29tJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NTI5XSwgXCJmNTFhXCIsIFwiTTU2Ni42IDU0LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE5MiAxOTItMzQuNy0zNC43Yy00LjItNC4yLTEwLTYuNi0xNi02LjZjLTEyLjUgMC0yMi42IDEwLjEtMjIuNiAyMi42bDAgMjkuMUwzNjQuMyAzMjBsMjkuMSAwYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42YzAtNi0yLjQtMTEuOC02LjYtMTZsLTM0LjctMzQuNyAxOTItMTkyek0zNDEuMSAzNTMuNEwyMjIuNiAyMzQuOWMtNDIuNy0zLjctODUuMiAxMS43LTExNS44IDQyLjNsLTggOEM3Ni41IDMwNy41IDY0IDMzNy43IDY0IDM2OS4yYzAgNi44IDcuMSAxMS4yIDEzLjIgOC4ybDUxLjEtMjUuNWM1LTIuNSA5LjUgNC4xIDUuNCA3LjlMNy4zIDQ3My40QzIuNyA0NzcuNiAwIDQ4My42IDAgNDg5LjlDMCA1MDIuMSA5LjkgNTEyIDIyLjEgNTEybDE3My4zIDBjMzguOCAwIDc1LjktMTUuNCAxMDMuNC00Mi44YzMwLjYtMzAuNiA0NS45LTczLjEgNDIuMy0xMTUuOHpcIl1cbn07XG5jb25zdCBmYVNoaWVsZEhlYXJ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NoaWVsZC1oZWFydCcsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTU3NFwiLCBcIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMmMuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjJjMTYuNyA4IDM2LjEgOCA1Mi44IDBDNDU0LjcgNDIwLjcgNDk1LjUgMjM5LjIgNDk2IDE0MGMuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNDQgMjIxLjNjMC0zMy44IDI3LjQtNjEuMyA2MS4zLTYxLjNjMTYuMiAwIDMxLjggNi41IDQzLjMgMTcuOWw3LjQgNy40IDcuNC03LjRjMTEuNS0xMS41IDI3LjEtMTcuOSA0My4zLTE3LjljMzMuOCAwIDYxLjMgMjcuNCA2MS4zIDYxLjNjMCAxNi4yLTYuNSAzMS44LTE3LjkgNDMuM2wtODIuNyA4Mi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtODIuNy04Mi43Yy0xMS41LTExLjUtMTcuOS0yNy4xLTE3LjktNDMuM3pcIl1cbn07XG5jb25zdCBmYUdvcHVyYW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZ29wdXJhbScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjY2NFwiLCBcIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDggNDAgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDggNDggMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDggNDAgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDggMCAzMiAwIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwIDAtMTYwLTMyIDAgMC0xMjgtMzIgMCAwLTk2LTMyIDAgMCA5NiAzMiAwIDAgMTI4IDMyIDAgMCAxNjAtODAgMCAwLTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgNDgtODAgMCAwLTE2MCAzMiAwIDAtMTI4IDMyIDAgMC05Ni0zMiAwIDAgOTYtMzIgMCAwIDEyOC0zMiAwIDAgMTYwLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtNjQgMC0zMiAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTI1NiAyNzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMzItODBsMCAzMiA2NCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFFYXJ0aE9jZWFuaWEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWFydGgtb2NlYW5pYScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZ2xvYmUtb2NlYW5pYVwiXSwgXCJlNDdiXCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDguNiAzNTcuM2wtMzktMTMuNWMtNi41LTIuMi0xMy42LTIuMy0yMC4xLS4zbC0xNS4zIDQuOWMtMTguNSA1LjktMzguNS0yLjQtNDcuNS0xOS41bC0zLjMtNi4yYy0xMC42LTIwLjEtMi4zLTQ1IDE4LjItNTQuN2wzNS4zLTE2LjhjMi4zLTEuMSA0LjQtMi44IDUuOS00LjhsNS4zLTdjNy4yLTkuNiAxOC42LTE1LjMgMzAuNi0xNS4zczIzLjQgNS43IDMwLjYgMTUuM2w0LjYgNi4xYzIgMi42IDQuOSA0LjUgOC4xIDUuMWM3LjggMS42IDE1LjctMS41IDIwLjQtNy45bDEwLjQtMTQuMmMyLTIuOCA1LjMtNC40IDguNy00LjRjNC40IDAgOC40IDIuNyAxMCA2LjhsMTAuMSAyNS45YzIuOCA3LjIgNi43IDE0IDExLjUgMjAuMkwzMTEgMjk5LjhjNS44IDcuNCA5IDE2LjYgOSAyNnMtMy4yIDE4LjYtOSAyNkwyOTkgMzY3LjJjLTguMyAxMC42LTIxIDE2LjgtMzQuNCAxNi44Yy04LjQgMC0xNi42LTIuNC0yMy43LTdsLTI1LjQtMTYuNGMtMi4yLTEuNC00LjUtMi41LTYuOS0zLjR6bTY1LjItMjE0LjhMMjk2IDE2NC43YzEwLjEgMTAuMSAyLjkgMjcuMy0xMS4zIDI3LjNsLTI5LjkgMGMtNS42IDAtMTEuMS0xLjItMTYuMi0zLjRsLTQyLjgtMTljLTE0LjMtNi4zLTExLjktMjcuMyAzLjQtMzAuM2wzOC41LTcuN2MxMy4xLTIuNiAyNi43IDEuNSAzNi4xIDEwLjl6TTI0OCA0MzJjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnpNNDMxLjIgMjk4LjlsOCAyNGMyLjggOC40LTEuNyAxNy40LTEwLjEgMjAuMnMtMTcuNC0xLjctMjAuMi0xMC4xbC04LTI0Yy0yLjgtOC40IDEuNy0xNy40IDEwLjEtMjAuMnMxNy40IDEuNyAyMC4yIDEwLjF6bS0xOS45IDgwLjRsLTMyIDMyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDMyLTMyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl1cbn07XG5jb25zdCBmYUdsb2JlT2NlYW5pYSA9IGZhRWFydGhPY2VhbmlhO1xuY29uc3QgZmFTcXVhcmVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUteG1hcmsnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMDA2MiwgXCJ0aW1lcy1zcXVhcmVcIiwgXCJ4bWFyay1zcXVhcmVcIl0sIFwiZjJkM1wiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem03OSAxNDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNDcgNDcgNDctNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC00NyA0NyA0NyA0N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00Ny00NyA0N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Ny00Ny00Ny00N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6XCJdXG59O1xuY29uc3QgZmFUaW1lc1NxdWFyZSA9IGZhU3F1YXJlWG1hcms7XG5jb25zdCBmYVhtYXJrU3F1YXJlID0gZmFTcXVhcmVYbWFyaztcbmNvbnN0IGZhSGFzaHRhZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYXNodGFnJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbNjIwOThdLCBcIjIzXCIsIFwiTTE4MS4zIDMyLjRjMTcuNCAyLjkgMjkuMiAxOS40IDI2LjMgMzYuOEwxOTcuOCAxMjhsOTUuMSAwIDExLjUtNjkuM2MyLjktMTcuNCAxOS40LTI5LjIgMzYuOC0yNi4zczI5LjIgMTkuNCAyNi4zIDM2LjhMMzU3LjggMTI4bDU4LjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjguOSAwTDMyNS44IDMyMGw1OC4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY4LjkgMC0xMS41IDY5LjNjLTIuOSAxNy40LTE5LjQgMjkuMi0zNi44IDI2LjNzLTI5LjItMTkuNC0yNi4zLTM2LjhsOS44LTU4LjctOTUuMSAwLTExLjUgNjkuM2MtMi45IDE3LjQtMTkuNCAyOS4yLTM2LjggMjYuM3MtMjkuMi0xOS40LTI2LjMtMzYuOEw5MC4yIDM4NCAzMiAzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjguOSAwIDIxLjMtMTI4TDY0IDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2OC45IDAgMTEuNS02OS4zYzIuOS0xNy40IDE5LjQtMjkuMiAzNi44LTI2LjN6TTE4Ny4xIDE5MkwxNjUuOCAzMjBsOTUuMSAwIDIxLjMtMTI4LTk1LjEgMHpcIl1cbn07XG5jb25zdCBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXAtcmlnaHQtYW5kLWRvd24tbGVmdC1mcm9tLWNlbnRlcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZXhwYW5kLWFsdFwiXSwgXCJmNDI0XCIsIFwiTTM0NCAwTDQ4OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMzItMzJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3TDMyNyA0MWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlMzMzQuMyAwIDM0NCAwek0xNjggNTEyTDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMCAzNDRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yczE5LjMtMS43IDI2LjIgNS4ybDM5IDM5IDg3LTg3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMyIDMyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04NyA4NyAzOSAzOWM2LjkgNi45IDguOSAxNy4yIDUuMiAyNi4ycy0xMi41IDE0LjgtMjIuMiAxNC44elwiXVxufTtcbmNvbnN0IGZhRXhwYW5kQWx0ID0gZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyO1xuY29uc3QgZmFPaWxDYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnb2lsLWNhbicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjYxM1wiLCBcIk0zMjAgMTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzItODAgMC00OCAwLTQ4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjQuOGMwIDE5IDExLjIgMzYuMiAyOC41IDQzLjlsNjcuNSAzMEw5NiAzNjhjMCAyNi41IDIxLjUgNDggNDggNDhsMjU5LjEgMGMxOC40IDAgMzUuOC03LjkgNDgtMjEuN0w2MzMuNSAxODcuN2MxMi4zLTEzLjktLjMtMzUuNC0xOC40LTMxLjVMNDQ4IDE5MmwtNTAuNS0yNS4yYy04LjktNC40LTE4LjctNi44LTI4LjYtNi44TDI4OCAxNjBsMC0zMiAzMiAwek05NiAyMDhsMCA4Ni4xTDQ4IDI3Mi44IDQ4IDIwOGw0OCAwelwiXVxufTtcbmNvbnN0IGZhVCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTE2XSwgXCI1NFwiLCBcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMTI4IDAgMCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM1MiAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgMzIgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFIaXBwbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoaXBwbycsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTQzNV0sIFwiZjZlZFwiLCBcIk00MDcgNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMTcuMiAxNy4yYzEuOS0uMSAzLjktLjIgNS44LS4ybDMyIDBjMTEuMiAwIDIxLjkgMi4zIDMxLjYgNi41TDU0MyA1NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNTY0IDEwMS45YzcuNiAxMi4yIDEyIDI2LjcgMTIgNDIuMWMwIDEwLjIgNy40IDE4LjggMTYuNyAyM2MyNy45IDEyLjUgNDcuMyA0MC41IDQ3LjMgNzNjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTYtNjQgMCAwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTcuNmMtMTEuOC0yLjQtMjIuNy03LjQtMzItMTQuNGMtMS41LTEuMS0yLjktMi4zLTQuMy0zLjVjLTE3LTE0LjctMjcuNy0zNi40LTI3LjctNjAuNWMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmMwIDQ0LjcgMjYuMiA4My4yIDY0IDEwMS4ybDAgMTAuOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNzZjLTE5LjggNy43LTQxLjQgMTItNjQgMTJzLTQ0LjItNC4zLTY0LTEybDAgNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTE4LjlMNDUuOSAzNjkuN2MtNS40IDEyLjEtMTkuNiAxNy42LTMxLjcgMTIuMlMtMy4zIDM2Mi40IDIuMSAzNTAuM0wyNCAzMDAuOWM1LjMtMTEuOSA4LTI0LjcgOC0zNy43QzMyIDE1NS43IDExNy4yIDY4IDIyMy44IDY0LjFsLjItLjEgNy4yIDBMMjU2IDY0bDMyIDBjNDEuNyAwIDgzLjQgMTIuMSAxMTcuMiAyNS43YzEuNy0xLjggMy41LTMuNiA1LjMtNS4yTDQwNyA4MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6bTczIDE4NWEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem04OCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTQ4MCAxNDRhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptNDggMTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyelwiXVxufTtcbmNvbnN0IGZhQ2hhcnRDb2x1bW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2hhcnQtY29sdW1uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlMGUzXCIsIFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzM2YzAgOC44IDcuMiAxNiAxNiAxNmw0MDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw4MCA0ODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwTDAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJ6TTE2MCAyMjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xMjgtNjRsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptNjQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00ODAgOTZsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl1cbn07XG5jb25zdCBmYUluZmluaXR5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2luZmluaXR5JyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbODczNCwgOTg1NF0sIFwiZjUzNFwiLCBcIk0wIDI0MS4xQzAgMTYxIDY1IDk2IDE0NS4xIDk2YzM4LjUgMCA3NS40IDE1LjMgMTAyLjYgNDIuNUwzMjAgMjEwLjdsNzIuMi03Mi4yQzQxOS41IDExMS4zIDQ1Ni40IDk2IDQ5NC45IDk2QzU3NSA5NiA2NDAgMTYxIDY0MCAyNDEuMWwwIDI5LjdDNjQwIDM1MSA1NzUgNDE2IDQ5NC45IDQxNmMtMzguNSAwLTc1LjQtMTUuMy0xMDIuNi00Mi41TDMyMCAzMDEuM2wtNzIuMiA3Mi4yQzIyMC41IDQwMC43IDE4My42IDQxNiAxNDUuMSA0MTZDNjUgNDE2IDAgMzUxIDAgMjcwLjlsMC0yOS43ek0yNzQuNyAyNTZsLTcyLjItNzIuMmMtMTUuMi0xNS4yLTM1LjktMjMuOC01Ny40LTIzLjhDMTAwLjMgMTYwIDY0IDE5Ni4zIDY0IDI0MS4xbDAgMjkuN2MwIDQ0LjggMzYuMyA4MS4xIDgxLjEgODEuMWMyMS41IDAgNDIuMi04LjUgNTcuNC0yMy44TDI3NC43IDI1NnptOTAuNSAwbDcyLjIgNzIuMmMxNS4yIDE1LjIgMzUuOSAyMy44IDU3LjQgMjMuOGM0NC44IDAgODEuMS0zNi4zIDgxLjEtODEuMWwwLTI5LjdjMC00NC44LTM2LjMtODEuMS04MS4xLTgxLjFjLTIxLjUgMC00Mi4yIDguNS01Ny40IDIzLjhMMzY1LjMgMjU2elwiXVxufTtcbmNvbnN0IGZhVmlhbENpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ZpYWwtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJlNTk2XCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNjQgMCA2NCAwIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNzAuOGMtMjAuMiAyOC42LTMyIDYzLjUtMzIgMTAxLjJjMCAyNS4yIDUuMyA0OS4xIDE0LjggNzAuOEMxODkuNSA0NjMuNyAxNjAuNiA0ODAgMTI4IDQ4MGMtNTMgMC05Ni00My05Ni05NkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek05NiA5NmwwIDk2IDY0IDAgMC05Nkw5NiA5NnpNMjI0IDM2OGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMTEuMy00My4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEwzNTIgMzg1LjRsLTI4LjctMjguN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw3Mi03MmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkFycm93RG93blRvTGluZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24tYXJyb3ctZG93bi10by1saW5lJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTM4XCIsIFwiTTE5MiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04IDM1MmwwLTk2IDE2IDAgMCA5Ni0xNiAwem0tNjQgMGwtODggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjAgMCA4MCAwIDM3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNDQgMCAwLTE5MS4xIDI4LjYgNDcuNWM5LjEgMTUuMSAyOC44IDIwIDQzLjkgMTAuOXMyMC0yOC44IDEwLjktNDMuOWwtNTguMy05N2MtMTcuNC0yOC45LTQ4LjYtNDYuNi04Mi4zLTQ2LjZsLTI5LjcgMGMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjlMMTIwIDI1Ni45IDEyMCA0NDh6TTQ2NCA2NGwwIDI0Mi43LTI1LjQtMjUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsODAgODBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsODAtODBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMNTI4IDMwNi43IDUyOCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnpcIl1cbn07XG5jb25zdCBmYVZvaWNlbWFpbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd2b2ljZW1haWwnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY4OTdcIiwgXCJNMTQ0IDMyMGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHptMTE5LjggMGMxNS4zLTIyLjkgMjQuMi01MC40IDI0LjItODBjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRTMCAxNjAuNSAwIDI0MHM2NC41IDE0NCAxNDQgMTQ0bDM1MiAwYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0YzAgMjkuNiA4LjkgNTcuMSAyNC4yIDgwbC0xMTIuNSAwek00OTYgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwelwiXVxufTtcbmNvbnN0IGZhRmFuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhbicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjg2M1wiLCBcIk0yNTguNiAwYy0xLjcgMC0zLjQgLjEtNS4xIC41QzE2OCAxNyAxMTUuNiAxMDIuMyAxMzAuNSAxODkuM2MyLjkgMTcgOC40IDMyLjkgMTUuOSA0Ny40TDMyIDIyNGwtMi42IDBDMTMuMiAyMjQgMCAyMzcuMiAwIDI1My40YzAgMS43IC4xIDMuNCAuNSA1LjFDMTcgMzQ0IDEwMi4zIDM5Ni40IDE4OS4zIDM4MS41YzE3LTIuOSAzMi45LTguNCA0Ny40LTE1LjlMMjI0IDQ4MGwwIDIuNmMwIDE2LjIgMTMuMiAyOS40IDI5LjQgMjkuNGMxLjcgMCAzLjQtLjEgNS4xLS41QzM0NCA0OTUgMzk2LjQgNDA5LjcgMzgxLjUgMzIyLjdjLTIuOS0xNy04LjQtMzIuOS0xNS45LTQ3LjRMNDgwIDI4OGwyLjYgMGMxNi4yIDAgMjkuNC0xMy4yIDI5LjQtMjkuNGMwLTEuNy0uMS0zLjQtLjUtNS4xQzQ5NSAxNjggNDA5LjcgMTE1LjYgMzIyLjcgMTMwLjVjLTE3IDIuOS0zMi45IDguNC00Ny40IDE1LjlMMjg4IDMybDAtMi42QzI4OCAxMy4yIDI3NC44IDAgMjU4LjYgMHpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdwZXJzb24td2Fsa2luZy1sdWdnYWdlJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlNTU0XCIsIFwiTTQzMiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTM0Ny43IDIwMC41YzEtLjQgMS45LS44IDIuOS0xLjJsLTE2LjkgNjMuNWMtNS42IDIxLjEtLjEgNDMuNiAxNC43IDU5LjdsNzAuNyA3Ny4xIDIyIDg4LjFjNC4zIDE3LjEgMjEuNyAyNy42IDM4LjggMjMuM3MyNy42LTIxLjcgMjMuMy0zOC44bC0yMy05Mi4xYy0xLjktNy44LTUuOC0xNC45LTExLjItMjAuOGwtNDkuNS01NCAxOS4zLTY1LjUgOS42IDIzYzQuNCAxMC42IDEyLjUgMTkuMyAyMi44IDI0LjVsMjYuNyAxMy4zYzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOUw1MDUgMjMyLjdsLTE1LjMtMzYuOEM0NzIuNSAxNTQuOCA0MzIuMyAxMjggMzg3LjcgMTI4Yy0yMi44IDAtNDUuMyA0LjgtNjYuMSAxNGwtOCAzLjVjLTMyLjkgMTQuNi01OC4xIDQyLjQtNjkuNCA3Ni41bC0yLjYgNy44Yy01LjYgMTYuOCAzLjUgMzQuOSAyMC4yIDQwLjVzMzQuOS0zLjUgNDAuNS0yMC4ybDIuNi03LjhjNS43LTE3LjEgMTguMy0zMC45IDM0LjctMzguMmw4LTMuNXptLTMwIDEzNS4xbC0yNSA2Mi40LTU5LjQgNTkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwzNDAuMyA0NDFjNC42LTQuNiA4LjItMTAuMSAxMC42LTE2LjFsMTQuNS0zNi4yLTQwLjctNDQuNGMtMi41LTIuNy00LjgtNS42LTctOC42ek0yNTYgMjc0LjFjLTcuNy00LjQtMTcuNC0xLjgtMjEuOSA1LjlsLTMyIDU1LjRMMTQ3LjcgMzA0Yy0xNS4zLTguOC0zNC45LTMuNi00My43IDExLjdMNDAgNDI2LjZjLTguOCAxNS4zLTMuNiAzNC45IDExLjcgNDMuN2w1NS40IDMyYzE1LjMgOC44IDM0LjkgMy42IDQzLjctMTEuN2w2NC0xMTAuOWMxLjUtMi42IDIuNi01LjIgMy4zLThMMjYxLjkgMjk2YzQuNC03LjcgMS44LTE3LjQtNS45LTIxLjl6XCJdXG59O1xuY29uc3QgZmFVcERvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXAtZG93bicsXG4gIGljb246IFsyNTYsIDUxMiwgWzg1OTcsIDExMDIxLCBcImFycm93cy1hbHQtdlwiXSwgXCJmMzM4XCIsIFwiTTE0NS42IDcuN0MxNDEgMi44IDEzNC43IDAgMTI4IDBzLTEzIDIuOC0xNy42IDcuN2wtMTA0IDExMmMtNi41IDctOC4yIDE3LjItNC40IDI1LjlTMTQuNSAxNjAgMjQgMTYwbDU2IDAgMCAxOTItNTYgMGMtOS41IDAtMTguMiA1LjctMjIgMTQuNHMtMi4xIDE4LjkgNC40IDI1LjlsMTA0IDExMmM0LjUgNC45IDEwLjkgNy43IDE3LjYgNy43czEzLTIuOCAxNy42LTcuN2wxMDQtMTEyYzYuNS03IDguMi0xNy4yIDQuNC0yNS45cy0xMi41LTE0LjQtMjItMTQuNGwtNTYgMCAwLTE5MiA1NiAwYzkuNSAwIDE4LjItNS43IDIyLTE0LjRzMi4xLTE4LjktNC40LTI1LjlsLTEwNC0xMTJ6XCJdXG59O1xuY29uc3QgZmFBcnJvd3NBbHRWID0gZmFVcERvd247XG5jb25zdCBmYUNsb3VkTW9vblJhaW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2xvdWQtbW9vbi1yYWluJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNzNjXCIsIFwiTTQ4MS4yIDBDNDE3IDAgMzYzLjUgNDYuNSAzNTMuNyAxMDcuNmMzNS40IDE3LjYgNjAuMiA1My4zIDYyLjEgOTUuMWMyMy4yIDExIDQyIDI5LjcgNTMuMSA1Mi43YzQgLjQgOC4xIC42IDEyLjMgLjZjMzQuOSAwIDY2LjctMTMuOCA4OS45LTM2LjFjNS4xLTQuOSA2LjQtMTIuNSAzLjItMTguN3MtMTAuMS05LjctMTctOC42Yy00LjkgLjgtMTAgMS4zLTE1LjIgMS4zYy00OSAwLTg4LjQtMzkuMy04OC40LTg3LjRjMC0zMi42IDE4LTYxLjEgNDQuOS03Ni4xYzYuMS0zLjQgOS4zLTEwLjUgNy44LTE3LjRzLTcuMy0xMi0xNC4zLTEyLjZjLTMuNi0uMy03LjMtLjUtMTAuOS0uNXpNMzY3LjkgMzgzLjljNDQuMiAwIDgwLTM1LjggODAtODBjMC0zOS4zLTI4LjQtNzIuMS02NS44LTc4LjdjMS4yLTUuNiAxLjktMTEuMyAxLjktMTcuMmMwLTQ0LjItMzUuOC04MC04MC04MGMtMTcgMC0zMi44IDUuMy00NS44IDE0LjRDMjQxLjMgMTE0LjYgMjEwLjggOTYgMTc2IDk2Yy01MyAwLTk2IDQzLTk2IDk2bDAgMS4zYy00NS40IDcuNi04MCA0Ny4xLTgwIDk0LjZjMCA1MyA0MyA5NiA5NiA5NmwyNzEuOSAwek04NS40IDQyMC4xYy0xMS03LjQtMjUuOS00LjQtMzMuMyA2LjdsLTMyIDQ4Yy03LjQgMTEtNC40IDI1LjkgNi43IDMzLjNzMjUuOSA0LjQgMzMuMy02LjdsMzItNDhjNy40LTExIDQuNC0yNS45LTYuNy0zMy4zem05NiAwYy0xMS03LjQtMjUuOS00LjQtMzMuMyA2LjdsLTMyIDQ4Yy03LjQgMTEtNC40IDI1LjkgNi43IDMzLjNzMjUuOSA0LjQgMzMuMy02LjdsMzItNDhjNy40LTExIDQuNC0yNS45LTYuNy0zMy4zem05NiAwYy0xMS03LjQtMjUuOS00LjQtMzMuMyA2LjdsLTMyIDQ4Yy03LjQgMTEtNC40IDI1LjkgNi43IDMzLjNzMjUuOSA0LjQgMzMuMy02LjdsMzItNDhjNy40LTExIDQuNC0yNS45LTYuNy0zMy4zem05NiAwYy0xMS03LjQtMjUuOS00LjQtMzMuMyA2LjdsLTMyIDQ4Yy03LjQgMTEtNC40IDI1LjkgNi43IDMzLjNzMjUuOSA0LjQgMzMuMy02LjdsMzItNDhjNy40LTExIDQuNC0yNS45LTYuNy0zMy4zelwiXVxufTtcbmNvbnN0IGZhQ2FsZW5kYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY2FsZW5kYXInLFxuICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTcsIDEyODE5OF0sIFwiZjEzM1wiLCBcIk05NiAzMmwwIDMyTDQ4IDY0QzIxLjUgNjQgMCA4NS41IDAgMTEybDAgNDggNDQ4IDAgMC00OGMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzJMMTYwIDY0bDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJTOTYgMTQuMyA5NiAzMnpNNDQ4IDE5MkwwIDE5MiAwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTI3MnpcIl1cbn07XG5jb25zdCBmYVRyYWlsZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhaWxlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTA0MVwiLCBcIk00OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgMzM2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE3LjEgMGM3LjgtNTQuMyA1NC40LTk2IDExMC45LTk2czEwMy4xIDQxLjcgMTEwLjkgOTZMNDg4IDM4NGw4IDAgMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC0yNDBjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMzJ6TTgwIDk2YzguOCAwIDE2IDcuMiAxNiAxNmwwIDEzMS4yYy0xMS40IDUuOS0yMi4yIDEyLjktMzIgMjFMNjQgMTEyYzAtOC44IDcuMi0xNiAxNi0xNnptOTYgMTI4Yy01LjQgMC0xMC43IC4yLTE2IC43TDE2MCAxMTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDExMi43Yy01LjMtLjUtMTAuNi0uNy0xNi0uN3ptODAgMTkuMkwyNTYgMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNTIuMmMtOS44LTguMS0yMC42LTE1LjItMzItMjF6TTM2OCA5NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxOTJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xOTJjMC04LjggNy4yLTE2IDE2LTE2em0xMTIgMTZsMCAxOTJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xOTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpNMTc2IDQ4MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMC0xMTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhQmFoYWkgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFoYWknLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcImhheWthbFwiXSwgXCJmNjY2XCIsIFwiTTI4OCAwYzE0LjUgMCAyNy4yIDkuNyAzMC45IDIzLjhsMjMuOSA4OS42IDc1LjktNTMuM2MxMS45LTguMyAyNy44LTcuNiAzOSAxLjdzMTQuNiAyNC45IDguNCAzOC4xbC0zOS4zIDg0IDkyLjQgOGMxNC40IDEuMiAyNi4yIDEyIDI4LjggMjYuM3MtNC45IDI4LjUtMTggMzQuNmwtODQuMSAzOS4xIDY1LjcgNjUuNWMxMC4zIDEwLjIgMTIuNCAyNi4xIDUuMSAzOC43cy0yMiAxOC43LTM2IDE0LjlMMzkxIDM4Ni44bDguMiA5Mi40YzEuMyAxNC40LTcuMyAyNy45LTIwLjkgMzIuOXMtMjguOSAuMS0zNy4yLTExLjdsLTUzLjEtNzYtNTMuMSA3NmMtOC4zIDExLjktMjMuNiAxNi43LTM3LjIgMTEuN3MtMjIuMi0xOC41LTIwLjktMzIuOWw4LjItOTIuNEw5NS40IDQxMC45Yy0xNCAzLjgtMjguOC0yLjMtMzYtMTQuOXMtNS4yLTI4LjQgNS4xLTM4LjdsNjUuNy02NS41TDQ2IDI1Mi43Yy0xMy4xLTYuMS0yMC41LTIwLjMtMTgtMzQuNnMxNC4zLTI1LjEgMjguOC0yNi4zbDkyLjQtOC0zOS4zLTg0Yy02LjEtMTMuMS0yLjctMjguOCA4LjQtMzguMXMyNy4xLTEwIDM5LTEuN2w3NS45IDUzLjMgMjMuOS04OS42QzI2MC44IDkuNyAyNzMuNSAwIDI4OCAwem0wIDE1Ni4ybC00LjggMThjLTIuNyAxMC4xLTEwLjIgMTguMi0yMCAyMS44cy0yMC44IDIuMS0yOS4zLTMuOWwtMTUuMi0xMC43IDcuOSAxNi44YzQuNCA5LjUgNCAyMC41LTEuMyAyOS42cy0xNC41IDE1LTI1IDE1LjlsLTE4LjUgMS42IDE2LjggNy44YzkuNSA0LjQgMTYuMiAxMy4yIDE4IDIzLjVzLTEuNSAyMC44LTguOSAyOC4ybC0xMy4yIDEzLjEgMTcuOS00LjhjMTAuMS0yLjcgMjAuOS0uMyAyOC45IDYuNHMxMi4yIDE2LjkgMTEuMyAyNy4zbC0xLjYgMTguNSAxMC42LTE1LjJjNi04LjYgMTUuOC0xMy43IDI2LjItMTMuN3MyMC4yIDUuMSAyNi4yIDEzLjdsMTAuNiAxNS4yLTEuNi0xOC41Yy0uOS0xMC40IDMuMy0yMC42IDExLjMtMjcuM3MxOC44LTkuMSAyOC45LTYuNGwxNy45IDQuOC0xMy4yLTEzLjFjLTcuNC03LjQtMTAuNy0xNy45LTguOS0yOC4yczguNS0xOS4xIDE4LTIzLjVsMTYuOC03LjgtMTguNS0xLjZjLTEwLjQtLjktMTkuNy02LjgtMjUtMTUuOXMtNS43LTIwLjEtMS4zLTI5LjZsNy45LTE2LjgtMTUuMiAxMC43Yy04LjYgNi0xOS41IDcuNS0yOS4zIDMuOXMtMTcuMy0xMS43LTIwLTIxLjhsLTQuOC0xOHpcIl1cbn07XG5jb25zdCBmYUhheWthbCA9IGZhQmFoYWk7XG5jb25zdCBmYVNkQ2FyZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzZC1jYXJkJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmN2MyXCIsIFwiTTMyMCAwTDE0MS4zIDBDMTI0LjMgMCAxMDggNi43IDk2IDE4LjdMMTguNyA5NkM2LjcgMTA4IDAgMTI0LjMgMCAxNDEuM0wwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NHpNMTYwIDg4bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em04MCAwbDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em04MCAwbDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXVxufTtcbmNvbnN0IGZhRHJhZ29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RyYWdvbicsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyODAwOV0sIFwiZjZkNVwiLCBcIk0zNTIgMTI0LjVsLTUxLjktMTNjLTYuNS0xLjYtMTEuMy03LjEtMTItMTMuOHMyLjgtMTMuMSA4LjctMTYuMWw0MC44LTIwLjRMMjk0LjQgMjguOGMtNS41LTQuMS03LjgtMTEuMy01LjYtMTcuOVMyOTcuMSAwIDMwNCAwTDQxNiAwbDMyIDAgMTYgMGMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNGw1Ny42IDc2LjhjNi4yIDguMyA5LjYgMTguNCA5LjYgMjguOGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjEuNSAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0w0ODAgMTYwbC0zMiAwIDAgMjEuNWMwIDI0LjggMTIuOCA0Ny45IDMzLjggNjEuMWwxMDYuNiA2Ni42YzMyLjEgMjAuMSA1MS42IDU1LjIgNTEuNiA5My4xQzY0MCA0NjIuOSA1OTAuOSA1MTIgNTMwLjIgNTEyTDQ5NiA1MTJsLTY0IDBMMzIuMyA1MTJjLTMuMyAwLTYuNi0uNC05LjYtMS40QzEzLjUgNTA3LjggNiA1MDEgMi40IDQ5Mi4xQzEgNDg4LjcgLjIgNDg1LjIgMCA0ODEuNGMtLjItMy43IC4zLTcuMyAxLjMtMTAuN2MyLjgtOS4yIDkuNi0xNi43IDE4LjYtMjAuNGMzLTEuMiA2LjItMiA5LjUtMi4yTDQzMy4zIDQxMmM4LjMtLjcgMTQuNy03LjcgMTQuNy0xNi4xYzAtNC4zLTEuNy04LjQtNC43LTExLjRsLTQ0LjQtNDQuNGMtMzAtMzAtNDYuOS03MC43LTQ2LjktMTEzLjFsMC00NS41IDAtNTd6TTUxMiA3Mi4zYzAtLjEgMC0uMiAwLS4zczAtLjIgMC0uM2wwIC42em0tMS4zIDcuNEw0NjQuMyA2OC4xYy0uMiAxLjMtLjMgMi42LS4zIDMuOWMwIDEzLjMgMTAuNyAyNCAyNCAyNGMxMC42IDAgMTkuNS02LjggMjIuNy0xNi4zek0xMzAuOSAxMTYuNWMxNi4zLTE0LjUgNDAuNC0xNi4yIDU4LjUtNC4xbDEzMC42IDg3IDAgMjcuNWMwIDMyLjggOC40IDY0LjggMjQgOTNsLTIzMiAwYy02LjcgMC0xMi43LTQuMi0xNS0xMC40cy0uNS0xMy4zIDQuNi0xNy43TDE3MSAyMzIuMyAxOC40IDI1NS44Yy03IDEuMS0xMy45LTIuNi0xNi45LTlzLTEuNS0xNC4xIDMuOC0xOC44TDEzMC45IDExNi41elwiXVxufTtcbmNvbnN0IGZhU2hvZVByaW50cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzaG9lLXByaW50cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjU0YlwiLCBcIk00MTYgMEMzNTIuMyAwIDI1NiAzMiAyNTYgMzJsMCAxMjhjNDggMCA3NiAxNiAxMDQgMzJzNTYgMzIgMTA0IDMyYzU2LjQgMCAxNzYtMTYgMTc2LTk2UzUxMiAwIDQxNiAwek0xMjggOTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIgMCAwLTEyOC0zMiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHpNMjg4IDUxMmM5NiAwIDIyNC00OCAyMjQtMTI4cy0xMTkuNi05Ni0xNzYtOTZjLTQ4IDAtNzYgMTYtMTA0IDMycy01NiAzMi0xMDQgMzJsMCAxMjhzOTYuMyAzMiAxNjAgMzJ6TTAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyIDAgMC0xMjgtMzIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NpcmNsZS1wbHVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJwbHVzLWNpcmNsZVwiXSwgXCJmMDU1XCIsIFwiTTI1NiA1MTJBMjU2IDI1NiAwIDEgMCAyNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyek0yMzIgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG5jb25zdCBmYVBsdXNDaXJjbGUgPSBmYUNpcmNsZVBsdXM7XG5jb25zdCBmYUZhY2VHcmluVG9uZ3VlV2luayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmYWNlLWdyaW4tdG9uZ3VlLXdpbmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDAsIFwiZ3Jpbi10b25ndWUtd2lua1wiXSwgXCJmNThiXCIsIFwiTTE3NC41IDQ5OC44QzczLjEgNDY0LjcgMCAzNjguOSAwIDI1NkMwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZjMCAxMTIuOS03My4xIDIwOC43LTE3NC41IDI0Mi44QzM0Ni43IDQ4NCAzNTIgNDY2LjYgMzUyIDQ0OGwwLTQ2LjljMjQuMy0xNy41IDQzLjYtNDEuNiA1NS40LTY5LjZjNS0xMS44LTctMjIuNS0xOS4zLTE4LjdjLTM5LjcgMTIuMi04NC41IDE5LTEzMS44IDE5cy05Mi4xLTYuOC0xMzEuOC0xOWMtMTIuMy0zLjgtMjQuMyA2LjktMTkuMyAxOC43YzExLjcgMjcuOCAzMC44IDUxLjcgNTQuOCA2OS4ybDAgNDcuM2MwIDE4LjYgNS4zIDM2IDE0LjUgNTAuOHptMjAuNy0yNjUuMmM1LjMgNy4xIDE1LjMgOC41IDIyLjQgMy4yczguNS0xNS4zIDMuMi0yMi40Yy0zMC40LTQwLjUtOTEuMi00MC41LTEyMS42IDBjLTUuMyA3LjEtMy45IDE3LjEgMy4yIDIyLjRzMTcuMSAzLjkgMjIuNC0zLjJjMTcuNi0yMy41IDUyLjgtMjMuNSA3MC40IDB6TTMzNiAyNzJhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6TTMyMCA0MDIuNmwwIDQ1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRsMC00NS40YzAtMTQuNyAxMS45LTI2LjYgMjYuNi0yNi42bDIgMGMxMS4zIDAgMjEuMSA3LjkgMjMuNiAxOC45YzIuOCAxMi42IDIwLjggMTIuNiAyMy42IDBjMi41LTExLjEgMTIuMy0xOC45IDIzLjYtMTguOWwyIDBjMTQuNyAwIDI2LjYgMTEuOSAyNi42IDI2LjZ6TTMzNiAxODRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbmNvbnN0IGZhR3JpblRvbmd1ZVdpbmsgPSBmYUZhY2VHcmluVG9uZ3VlV2luaztcbmNvbnN0IGZhSGFuZEhvbGRpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1ob2xkaW5nJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNGJkXCIsIFwiTTU1OS43IDM5Mi4yYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjcyIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwIDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAtMTYgMC03OC4zIDBjLTI5LjEgMC01Ny4zIDkuOS04MCAyOEw2OC44IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDAgMTYwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zem0tMzY3LTguMmMuMyAwIC42IDAgLjkgMGMwIDAgMCAwIDAgMGMtLjMgMC0uNiAwLS45IDB6XCJdXG59O1xuY29uc3QgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1Zy1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1NWRcIiwgXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMmwwIDk2IDY0IDAgMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTYgNjQgMCAwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCAzMmMwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOGwwIDY3LjJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY3LjJjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMTYwek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC05NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAtMTQ0YzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhTGlua1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2xpbmstc2xhc2gnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImNoYWluLWJyb2tlblwiLCBcImNoYWluLXNsYXNoXCIsIFwidW5saW5rXCJdLCBcImYxMjdcIiwgXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w0ODkuMyAzNTguMmw5MC41LTkwLjVjNTYuNS01Ni41IDU2LjUtMTQ4IDAtMjA0LjVjLTUwLTUwLTEyOC44LTU2LjUtMTg2LjMtMTUuNGwtMS42IDEuMWMtMTQuNCAxMC4zLTE3LjcgMzAuMy03LjQgNDQuNnMzMC4zIDE3LjcgNDQuNiA3LjRsMS42LTEuMWMzMi4xLTIyLjkgNzYtMTkuMyAxMDMuOCA4LjZjMzEuNSAzMS41IDMxLjUgODIuNSAwIDExNGwtOTYgOTYtMzEuOS0yNUM0MzAuOSAyMzkuNiA0MjAuMSAxNzUuMSAzNzcgMTMyYy01Mi4yLTUyLjMtMTM0LjUtNTYuMi0xOTEuMy0xMS43TDM4LjggNS4xek0yMzkgMTYyYzMwLjEtMTQuOSA2Ny43LTkuOSA5Mi44IDE1LjNjMjAgMjAgMjcuNSA0OC4zIDIxLjcgNzQuNUwyMzkgMTYyek00MDYuNiA0MTYuNEwyMjAuOSAyNzBjLTIuMSAzOS44IDEyLjIgODAuMSA0Mi4yIDExMGMzOC45IDM4LjkgOTQuNCA1MSAxNDMuNiAzNi4zem0tMjkwLTIyOC41TDYwLjIgMjQ0LjNjLTU2LjUgNTYuNS01Ni41IDE0OCAwIDIwNC41YzUwIDUwIDEyOC44IDU2LjUgMTg2LjMgMTUuNGwxLjYtMS4xYzE0LjQtMTAuMyAxNy43LTMwLjMgNy40LTQ0LjZzLTMwLjMtMTcuNy00NC42LTcuNGwtMS42IDEuMWMtMzIuMSAyMi45LTc2IDE5LjMtMTAzLjgtOC42Qzc0IDM3MiA3NCAzMjEgMTA1LjUgMjg5LjVsNjEuOC02MS44LTUwLjYtMzkuOXpcIl1cbn07XG5jb25zdCBmYUNoYWluQnJva2VuID0gZmFMaW5rU2xhc2g7XG5jb25zdCBmYUNoYWluU2xhc2ggPSBmYUxpbmtTbGFzaDtcbmNvbnN0IGZhVW5saW5rID0gZmFMaW5rU2xhc2g7XG5jb25zdCBmYUNsb25lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb25lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMjRkXCIsIFwiTTI4OCA0NDhMNjQgNDQ4bDAtMjI0IDY0IDAgMC02NC02NCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0LTY0IDAgMCA2NHptLTY0LTk2bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIyNCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NHpcIl1cbn07XG5jb25zdCBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi13YWxraW5nLWFycm93LWxvb3AtbGVmdCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU1MVwiLCBcIk0yMDggOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0xMjMuNyAyMDAuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlMMjgxIDIzMi43bC0xNS4zLTM2LjhDMjQ4LjUgMTU0LjggMjA4LjMgMTI4IDE2My43IDEyOGMtMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0zMi45IDE0LjYtNTguMSA0Mi40LTY5LjQgNzYuNWwtMi42IDcuOGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwyLjYtNy44YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjV6bS0zMCAxMzUuMUw2OC43IDM5OCA5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTE2LjMgNDQxYzQuNi00LjYgOC4yLTEwLjEgMTAuNi0xNi4xbDE0LjUtMzYuMi00MC43LTQ0LjRjLTIuNS0yLjctNC44LTUuNi03LTguNnptMzQ3LjcgMTE5YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMNDYxLjMgMzg0bDE4LjcgMGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MHMtNzEuNi0xNjAtMTYwLTE2MEwzNTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTE4LjcgMCAyNS40LTI1LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w4MCA4MHpcIl1cbn07XG5jb25zdCBmYUFycm93VXBaQSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC16LWEnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNvcnQtYWxwaGEtdXAtYWx0XCJdLCBcImY4ODJcIiwgXCJNMTgzLjYgNDIuNEMxNzcuNSAzNS44IDE2OSAzMiAxNjAgMzJzLTE3LjUgMy44LTIzLjYgMTAuNGwtODggOTZjLTExLjkgMTMtMTEuMSAzMy4zIDIgNDUuMnMzMy4zIDExLjEgNDUuMi0yTDEyOCAxNDYuMyAxMjggNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDEuNyAzMi40IDM1LjRjMTEuOSAxMyAzMi4yIDEzLjkgNDUuMiAyczEzLjktMzIuMiAyLTQ1LjJsLTg4LTk2ek0zMjAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNTAuNyAwLTczLjQgNzMuNGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlzMTYuNiAxOS44IDI5LjYgMTkuOGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTAuNyAwIDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEwzNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem05NiAxOTJjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTY0IDEyOC0xNiAzMmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zIDg4LjQgMCA3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjlsLTE2LTMyLTY0LTEyOEM0MzkuMiAyNjIuOCA0MjguMSAyNTYgNDE2IDI1NnpNMzk1LjggNDAwTDQxNiAzNTkuNiA0MzYuMiA0MDBsLTQwLjQgMHpcIl1cbn07XG5jb25zdCBmYVNvcnRBbHBoYVVwQWx0ID0gZmFBcnJvd1VwWkE7XG5jb25zdCBmYUZpcmVGbGFtZUN1cnZlZCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdmaXJlLWZsYW1lLWN1cnZlZCcsXG4gIGljb246IFszODQsIDUxMiwgW1wiZmlyZS1hbHRcIl0sIFwiZjdlNFwiLCBcIk0xNTMuNiAyOS45bDE2LTIxLjNDMTczLjYgMy4yIDE4MCAwIDE4Ni43IDBDMTk4LjQgMCAyMDggOS42IDIwOCAyMS4zVjQzLjVjMCAxMy4xIDUuNCAyNS43IDE0LjkgMzQuN0wzMDcuNiAxNTlDMzU2LjQgMjA1LjYgMzg0IDI3MC4yIDM4NCAzMzcuN0MzODQgNDM0IDMwNiA1MTIgMjA5LjcgNTEySDE5MkM4NiA1MTIgMCA0MjYgMCAzMjB2LTMuOGMwLTQ4LjggMTkuNC05NS42IDUzLjktMTMwLjFsMy41LTMuNWM0LjItNC4yIDEwLTYuNiAxNi02LjZDODUuOSAxNzYgOTYgMTg2LjEgOTYgMTk4LjZWMjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR2LTMuOWMwLTE4LTcuMi0zNS4zLTE5LjktNDhsLTM4LjYtMzguNmMtMjQtMjQtMzcuNS01Ni43LTM3LjUtOTAuN2MwLTI3LjcgOS01NC44IDI1LjYtNzYuOXpcIl1cbn07XG5jb25zdCBmYUZpcmVBbHQgPSBmYUZpcmVGbGFtZUN1cnZlZDtcbmNvbnN0IGZhVG9ybmFkbyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0b3JuYWRvJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3Nzg2XSwgXCJmNzZmXCIsIFwiTTAgMzJMMCA0NS42QzAgNjIuNyAxLjcgNzkuNiA1IDk2bDM1Mi44IDBjMy4yLTYuOSA3LjUtMTMuMyAxMy0xOC44bDM4LjYtMzguNmM0LjItNC4yIDYuNi0xMCA2LjYtMTZDNDE2IDEwLjEgNDA1LjkgMCAzOTMuNCAwTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyem0zNTIuMiA5NkwxMy42IDEyOGMxMi4yIDM1LjkgMzIuMyA2OC43IDU4LjggOTZMNDEyIDIyNGwtNDcuMi02Mi45Yy03LjMtOS43LTExLjYtMjEuMi0xMi42LTMzLjF6bS0yMjYgMTM4LjJsMTE2LjQgNjguNWM4LjIgNC44IDE1LjggMTAuNyAyMi41IDE3LjNMNDQ1IDM1MmMyLTkuOCAzLTE5LjkgMy0zMC4xYzAtMjMtNS4zLTQ1LjUtMTUuMy02NS45bC0zMjIuNSAwYzUuMiAzLjYgMTAuNSA3IDE2IDEwLjJ6TTI4OCAzODRjMTAuMyAyMS40IDEzLjggNDUuNSA5LjkgNjlsLTUuOSAzNS43Yy0yIDEyLjIgNy40IDIzLjQgMTkuOCAyMy40YzUuMyAwIDEwLjQtMi4xIDE0LjItNS45bDc4LjItNzguMmMxMi44LTEyLjggMjMuMS0yNy43IDMwLjQtNDMuOUwyODggMzg0elwiXVxufTtcbmNvbnN0IGZhRmlsZUNpcmNsZVBsdXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmlsZS1jaXJjbGUtcGx1cycsXG4gIGljb246IFs1NzYsIDUxMiwgWzU4NjA2XSwgXCJlNDk0XCIsIFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIyNCAwbDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwIDAgMzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0w2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTM4NCA2NGwtMTI4IDBMMjU2IDAgMzg0IDEyOHptNDggOTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0xNiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNDggMCAwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00OCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC00OCAwIDAtNDh6XCJdXG59O1xuY29uc3QgZmFCb29rUXVyYW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1xdXJhbicsXG4gIGljb246IFs0NDgsIDUxMiwgW1wicXVyYW5cIl0sIFwiZjY4N1wiLCBcIk0zNTIgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMzIwYzAgNTMtNDMgOTYtOTYgOTZMNjQgNTEybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDY0IDAgMzUyIDB6bTAgMzg0TDk2IDM4NGwwIDY0IDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyek0yNzQuMSAxNTAuMmwtOC45IDIxLjQtMjMuMSAxLjljLTUuNyAuNS04IDcuNS0zLjcgMTEuMkwyNTYgMTk5LjhsLTUuNCAyMi42Yy0xLjMgNS41IDQuNyA5LjkgOS42IDYuOUwyODAgMjE3LjJsMTkuOCAxMi4xYzQuOSAzIDEwLjktMS40IDkuNi02LjlMMzA0IDE5OS44bDE3LjYtMTUuMWM0LjMtMy43IDItMTAuOC0zLjctMTEuMmwtMjMuMS0xLjktOC45LTIxLjRjLTIuMi01LjMtOS42LTUuMy0xMS44IDB6TTk2IDE5MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGMyNS42IDAgNDkuNS03LjUgNjkuNS0yMC41YzMuMi0yLjEgNC41LTYuMiAzLjEtOS43cy01LjItNS42LTktNC44Yy02LjEgMS4yLTEyLjUgMS45LTE5IDEuOWMtNTIuNCAwLTk0LjktNDIuNS05NC45LTk0LjlzNDIuNS05NC45IDk0LjktOTQuOWM2LjUgMCAxMi44IC43IDE5IDEuOWMzLjggLjggNy41LTEuMyA5LTQuOHMuMi03LjYtMy4xLTkuN0MyNzMuNSA3MS41IDI0OS42IDY0IDIyNCA2NEMxNTMuMyA2NCA5NiAxMjEuMyA5NiAxOTJ6XCJdXG59O1xuY29uc3QgZmFRdXJhbiA9IGZhQm9va1F1cmFuO1xuY29uc3QgZmFBbmNob3IgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5jaG9yJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbOTg3NV0sIFwiZjEzZFwiLCBcIk0zMjAgOTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptMjEuMSA4MEMzNjcgMTU4LjggMzg0IDEyOS40IDM4NCA5NmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDMzLjQgMTcgNjIuOCA0Mi45IDgwTDIyNCAxNzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDIwOC00OCAwYy01MyAwLTk2LTQzLTk2LTk2bDAtNi4xIDcgN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMOTcgMjYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw3IDMxOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDctNyAwIDYuMWMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGw4MCAwIDgwIDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC02LjEgNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTYtNTZjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC01NiA1NmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDctNyAwIDYuMWMwIDUzLTQzIDk2LTk2IDk2bC00OCAwIDAtMjA4IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwLjkgMHpcIl1cbn07XG5jb25zdCBmYUJvcmRlckFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3JkZXItYWxsJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmODRjXCIsIFwiTTM4NCA5NmwwIDEyOC0xMjggMCAwLTEyOCAxMjggMHptMCAxOTJsMCAxMjgtMTI4IDAgMC0xMjggMTI4IDB6TTE5MiAyMjRMNjQgMjI0IDY0IDk2bDEyOCAwIDAgMTI4ek02NCAyODhsMTI4IDAgMCAxMjhMNjQgNDE2bDAtMTI4ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyelwiXVxufTtcbmNvbnN0IGZhRmFjZUFuZ3J5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtYW5ncnknLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDQsIFwiYW5ncnlcIl0sIFwiZjU1NlwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6TTMzOC43IDM5NS45YzYuNi01LjkgNy4xLTE2IDEuMi0yMi42QzMyMy44IDM1NS40IDI5NS43IDMzNiAyNTYgMzM2cy02Ny44IDE5LjQtODMuOSAzNy4zYy01LjkgNi42LTUuNCAxNi43IDEuMiAyMi42czE2LjcgNS40IDIyLjYtMS4yYzExLjctMTMgMzEuNi0yNi43IDYwLjEtMjYuN3M0OC40IDEzLjcgNjAuMSAyNi43YzUuOSA2LjYgMTYgNy4xIDIyLjYgMS4yek0xNzYuNCAyNzJjMTcuNyAwIDMyLTE0LjMgMzItMzJjMC0xLjUtLjEtMy0uMy00LjRsMTAuOSAzLjZjOC40IDIuOCAxNy40LTEuNyAyMC4yLTEwLjFzLTEuNy0xNy40LTEwLjEtMjAuMmwtOTYtMzJjLTguNC0yLjgtMTcuNCAxLjctMjAuMiAxMC4xczEuNyAxNy40IDEwLjEgMjAuMmwzMC43IDEwLjJjLTUuOCA1LjgtOS4zIDEzLjgtOS4zIDIyLjZjMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE5Mi0zMmMwLTguOS0zLjYtMTctOS41LTIyLjhsMzAuMi0xMC4xYzguNC0yLjggMTIuOS0xMS45IDEwLjEtMjAuMnMtMTEuOS0xMi45LTIwLjItMTAuMWwtOTYgMzJjLTguNCAyLjgtMTIuOSAxMS45LTEwLjEgMjAuMnMxMS45IDEyLjkgMjAuMiAxMC4xbDExLjctMy45Yy0uMiAxLjUtLjMgMy4xLS4zIDQuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyelwiXVxufTtcbmNvbnN0IGZhQW5ncnkgPSBmYUZhY2VBbmdyeTtcbmNvbnN0IGZhQ29va2llQml0ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjb29raWUtYml0ZScsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjU2NFwiLCBcIk0yNTcuNSAyNy42Yy0uOC01LjQtNC45LTkuOC0xMC4zLTEwLjZjLTIyLjEtMy4xLTQ0LjYgLjktNjQuNCAxMS40bC03NCAzOS41Qzg5LjEgNzguNCA3My4yIDk0LjkgNjMuNCAxMTVMMjYuNyAxOTAuNmMtOS44IDIwLjEtMTMgNDIuOS05LjEgNjQuOWwxNC41IDgyLjhjMy45IDIyLjEgMTQuNiA0Mi4zIDMwLjcgNTcuOWw2MC4zIDU4LjRjMTYuMSAxNS42IDM2LjYgMjUuNiA1OC43IDI4LjdsODMgMTEuN2MyMi4xIDMuMSA0NC42LS45IDY0LjQtMTEuNGw3NC0zOS41YzE5LjctMTAuNSAzNS42LTI3IDQ1LjQtNDcuMmwzNi43LTc1LjVjOS44LTIwLjEgMTMtNDIuOSA5LjEtNjQuOWMtLjktNS4zLTUuMy05LjMtMTAuNi0xMC4xYy01MS41LTguMi05Mi44LTQ3LjEtMTA0LjUtOTcuNGMtMS44LTcuNi04LTEzLjQtMTUuNy0xNC42Yy01NC42LTguNy05Ny43LTUyLTEwNi4yLTEwNi44ek0yMDggMTQ0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMTQ0IDMzNmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0yMjQtNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhQXJyb3dUcmVuZERvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYXJyb3ctdHJlbmQtZG93bicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTA5N1wiLCBcIk0zODQgMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgODIuN0wzNDIuNiAxMzcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBMMTkyIDI0Mi43IDU0LjYgMTA1LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBMMzIwIDIwNS4zIDQ2Ni43IDM1MiAzODQgMzUyelwiXVxufTtcbmNvbnN0IGZhUnNzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3JzcycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiZmVlZFwiXSwgXCJmMDllXCIsIFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJjMjI5LjggMCA0MTYgMTg2LjIgNDE2IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkMzODQgMjUzLjYgMjI2LjQgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMCA0MTZhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgMCA0MTZ6TTMyIDE2MGMxNTkuMSAwIDI4OCAxMjguOSAyODggMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMTIzLjctMTAwLjMtMjI0LTIyNC0yMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdXG59O1xuY29uc3QgZmFGZWVkID0gZmFSc3M7XG5jb25zdCBmYURyYXdQb2x5Z29uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RyYXctcG9seWdvbicsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjVlZVwiLCBcIk05NiAxNTEuNGwwIDIwOS4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyMDkuMSAwYzAtLjEgLjEtLjIgLjEtLjNsLTQuNS03LjktMzItNTZzMCAwIDAgMGMtMS40IC4xLTIuOCAuMS00LjIgLjFjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMS40IDAgMi44IDAgNC4yIC4xYzAgMCAwIDAgMCAwbDMyLTU2IDQuNS03LjktLjEtLjMtMjA5LjEgMGMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40ek0zODQuMyAzNTJjMzUuMiAuMiA2My43IDI4LjcgNjMuNyA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGMtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yMDkuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0yMDkuMUMxMi45IDE0MC40IDAgMTE5LjcgMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsMjA5LjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMzUuMy0yOC41IDYzLjgtNjMuNyA2NGwtNC41IDcuOS0zMiA1Ni0yLjMgNGM0LjIgOC41IDYuNSAxOCA2LjUgMjguMXMtMi4zIDE5LjYtNi41IDI4LjFsMi4zIDQgMzIgNTYgNC41IDcuOXpcIl1cbn07XG5jb25zdCBmYVNjYWxlQmFsYW5jZWQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2NhbGUtYmFsYW5jZWQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFs5ODc4LCBcImJhbGFuY2Utc2NhbGVcIl0sIFwiZjI0ZVwiLCBcIk0zODQgMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzk4LjQgOTZjLTUuMiAyNS44LTIyLjkgNDcuMS00Ni40IDU3LjNMMzUyIDQ0OGwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDAtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDAgMC0yOTQuN2MtMjMuNS0xMC4zLTQxLjItMzEuNi00Ni40LTU3LjNMMTI4IDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEyOCAwYzE0LjYtMTkuNCAzNy44LTMyIDY0LTMyczQ5LjQgMTIuNiA2NCAzMnptNTUuNiAyODhsMTQ0LjkgMEw1MTIgMTk1LjggNDM5LjYgMzIwek01MTIgNDE2Yy02Mi45IDAtMTE1LjItMzQtMTI2LTc4LjljLTIuNi0xMSAxLTIyLjMgNi43LTMyLjFsOTUuMi0xNjMuMmM1LTguNiAxNC4yLTEzLjggMjQuMS0xMy44czE5LjEgNS4zIDI0LjEgMTMuOGw5NS4yIDE2My4yYzUuNyA5LjggOS4zIDIxLjEgNi43IDMyLjFDNjI3LjIgMzgyIDU3NC45IDQxNiA1MTIgNDE2ek0xMjYuOCAxOTUuOEw1NC40IDMyMGwxNDQuOSAwTDEyNi44IDE5NS44ek0uOSAzMzcuMWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMUMyNDIgMzgyIDE4OS43IDQxNiAxMjYuOCA0MTZTMTEuNyAzODIgLjkgMzM3LjF6XCJdXG59O1xuY29uc3QgZmFCYWxhbmNlU2NhbGUgPSBmYVNjYWxlQmFsYW5jZWQ7XG5jb25zdCBmYUdhdWdlU2ltcGxlSGlnaCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnYXVnZS1zaW1wbGUtaGlnaCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzYxNjY4LCBcInRhY2hvbWV0ZXJcIiwgXCJ0YWNob21ldGVyLWZhc3RcIl0sIFwiZjYyYVwiLCBcIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwQTI1NiAyNTYgMCAxIDEgMCAyNTZ6bTMyMCA5NmMwLTE1LjktNS44LTMwLjQtMTUuMy00MS42bDc2LjYtMTQ3LjRjNi4xLTExLjggMS41LTI2LjMtMTAuMi0zMi40cy0yNi4yLTEuNS0zMi40IDEwLjJMMjYyLjEgMjg4LjNjLTItLjItNC0uMy02LjEtLjNjLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpcIl1cbn07XG5jb25zdCBmYVRhY2hvbWV0ZXIgPSBmYUdhdWdlU2ltcGxlSGlnaDtcbmNvbnN0IGZhVGFjaG9tZXRlckZhc3QgPSBmYUdhdWdlU2ltcGxlSGlnaDtcbmNvbnN0IGZhU2hvd2VyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3Nob3dlcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODcwM10sIFwiZjJjY1wiLCBcIk02NCAxMzEuOUM2NCAxMTIuMSA4MC4xIDk2IDk5LjkgOTZjOS41IDAgMTguNiAzLjggMjUuNCAxMC41bDE2LjIgMTYuMmMtMjEgMzguOS0xNy40IDg3LjUgMTAuOSAxMjNMMTUxIDI0N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDM0NSAxMjFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMS4zIDEuM2MtMzUuNS0yOC4zLTg0LjItMzEuOS0xMjMtMTAuOUwxNzAuNSA2MS4zQzE1MS44IDQyLjUgMTI2LjQgMzIgOTkuOSAzMkM0NC43IDMyIDAgNzYuNyAwIDEzMS45TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMTYuMXpNMjU2IDM1MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC0xMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMi0zMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFEZXNrdG9wID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Rlc2t0b3AnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjg0MjEsIDYxNzA0LCBcImRlc2t0b3AtYWx0XCJdLCBcImYzOTBcIiwgXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTc2IDAtMTAuNyAzMkwxNjAgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02OS4zIDBMMzM2IDQxNmwxNzYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek01MTIgNjRsMCAyMjRMNjQgMjg4IDY0IDY0bDQ0OCAwelwiXVxufTtcbmNvbnN0IGZhRGVza3RvcEFsdCA9IGZhRGVza3RvcDtcbmNvbnN0IGZhTSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTA5XSwgXCI0ZFwiLCBcIk0yMi43IDMzLjRjMTMuNS00LjEgMjguMSAxLjEgMzUuOSAxMi45TDIyNCAyOTQuMyAzODkuNCA0Ni4zYzcuOC0xMS43IDIyLjQtMTcgMzUuOS0xMi45UzQ0OCA0OS45IDQ0OCA2NGwwIDM4NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI3OC4zTDI1MC42IDM2OS44Yy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJzLTIwLjctNS4zLTI2LjYtMTQuMkw2NCAxNjkuNyA2NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMMCA2NEMwIDQ5LjkgOS4yIDM3LjUgMjIuNyAzMy40elwiXVxufTtcbmNvbnN0IGZhVGFibGVMaXN0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RhYmxlLWxpc3QnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInRoLWxpc3RcIl0sIFwiZjAwYlwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptNjQgMGwwIDY0IDY0IDAgMC02NEw2NCA5NnptMzg0IDBMMTkyIDk2bDAgNjQgMjU2IDAgMC02NHpNNjQgMjI0bDAgNjQgNjQgMCAwLTY0LTY0IDB6bTM4NCAwbC0yNTYgMCAwIDY0IDI1NiAwIDAtNjR6TTY0IDM1MmwwIDY0IDY0IDAgMC02NC02NCAwem0zODQgMGwtMjU2IDAgMCA2NCAyNTYgMCAwLTY0elwiXVxufTtcbmNvbnN0IGZhVGhMaXN0ID0gZmFUYWJsZUxpc3Q7XG5jb25zdCBmYUNvbW1lbnRTbXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnY29tbWVudC1zbXMnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcInNtc1wiXSwgXCJmN2NkXCIsIFwiTTI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMlMwIDEyNS4xIDAgMjQwYzAgNDUuMSAxNy43IDg2LjggNDcuNyAxMjAuOWMtMS45IDI0LjUtMTEuNCA0Ni4zLTIxLjQgNjIuOWMtNS41IDkuMi0xMS4xIDE2LjYtMTUuMiAyMS42Yy0yLjEgMi41LTMuNyA0LjQtNC45IDUuN2MtLjYgLjYtMSAxLjEtMS4zIDEuNGwtLjMgLjNjMCAwIDAgMCAwIDBjMCAwIDAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwYy00LjYgNC42LTUuOSAxMS40LTMuNCAxNy40YzIuNSA2IDguMyA5LjkgMTQuOCA5LjljMjguNyAwIDU3LjYtOC45IDgxLjYtMTkuM2MyMi45LTEwIDQyLjQtMjEuOSA1NC4zLTMwLjZjMzEuOCAxMS41IDY3IDE3LjkgMTA0LjEgMTcuOXpNOTYgMjEyLjhjMC0yMC4zIDE2LjUtMzYuOCAzNi44LTM2LjhsMTkuMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xOS4yIDBjLTIuNyAwLTQuOCAyLjItNC44IDQuOGMwIDEuNiAuOCAzLjEgMi4yIDRsMjkuNCAxOS42YzEwLjMgNi44IDE2LjQgMTguMyAxNi40IDMwLjdjMCAyMC4zLTE2LjUgMzYuOC0zNi44IDM2LjhMMTEyIDMwNGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNy4yIDBjMi43IDAgNC44LTIuMiA0LjgtNC44YzAtMS42LS44LTMuMS0yLjItNGwtMjkuNC0xOS42QzEwMi4yIDIzNi43IDk2IDIyNS4yIDk2IDIxMi44ek0zNzIuOCAxNzZsMTkuMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xOS4yIDBjLTIuNyAwLTQuOCAyLjItNC44IDQuOGMwIDEuNiAuOCAzLjEgMi4yIDRsMjkuNCAxOS42YzEwLjIgNi44IDE2LjQgMTguMyAxNi40IDMwLjdjMCAyMC4zLTE2LjUgMzYuOC0zNi44IDM2LjhMMzUyIDMwNGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNy4yIDBjMi43IDAgNC44LTIuMiA0LjgtNC44YzAtMS42LS44LTMuMS0yLjItNGwtMjkuNC0xOS42Yy0xMC4yLTYuOC0xNi40LTE4LjMtMTYuNC0zMC43YzAtMjAuMyAxNi41LTM2LjggMzYuOC0zNi44em0tMTUyIDYuNEwyNTYgMjI5LjNsMzUuMi00Ni45YzQuMS01LjUgMTEuMy03LjggMTcuOS01LjZzMTAuOSA4LjMgMTAuOSAxNS4ybDAgOTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OC0xOS4yIDI1LjZjLTMgNC03LjggNi40LTEyLjggNi40cy05LjgtMi40LTEyLjgtNi40TDIyNCAyNDBsMCA0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTk2YzAtNi45IDQuNC0xMyAxMC45LTE1LjJzMTMuNyAuMSAxNy45IDUuNnpcIl1cbn07XG5jb25zdCBmYVNtcyA9IGZhQ29tbWVudFNtcztcbmNvbnN0IGZhQm9vayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib29rJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjEyXSwgXCJmMDJkXCIsIFwiTTk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NmwyODggMCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJMMzg0IDAgOTYgMHptMCAzODRsMjU2IDAgMCA2NEw5NiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTMyLTI0MGMwLTguOCA3LjItMTYgMTYtMTZsMTkyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE5MiAwYy04LjggMC0xNi03LjItMTYtMTZ6bTE2IDQ4bDE5MiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl1cbn07XG5jb25zdCBmYVVzZXJQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItcGx1cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjIzNFwiLCBcIk05NiAxMjhhMTI4IDEyOCAwIDEgMSAyNTYgMEExMjggMTI4IDAgMSAxIDk2IDEyOHpNMCA0ODIuM0MwIDM4My44IDc5LjggMzA0IDE3OC4zIDMwNGw5MS40IDBDMzY4LjIgMzA0IDQ0OCAzODMuOCA0NDggNDgyLjNjMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMMjkuNyA1MTJDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zek01MDQgMzEybDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpcIl1cbn07XG5jb25zdCBmYUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NoZWNrJyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbMTAwMDMsIDEwMDA0XSwgXCJmMDBjXCIsIFwiTTQzOC42IDEwNS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0yNTYgMjU2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTI4LTEyOGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxNjAgMzM4LjcgMzkzLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDB6XCJdXG59O1xuY29uc3QgZmFCYXR0ZXJ5VGhyZWVRdWFydGVycyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXCJiYXR0ZXJ5LTRcIl0sIFwiZjI0MVwiLCBcIk00NjQgMTYwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2MGMwIDguOC03LjIgMTYtMTYgMTZMODAgMzUyYy04LjggMC0xNi03LjItMTYtMTZsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2bDM4NCAwek04MCA5NkMzNS44IDk2IDAgMTMxLjggMCAxNzZMMCAzMzZjMCA0NC4yIDM1LjggODAgODAgODBsMzg0IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0xNmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtMTZjMC00NC4yLTM1LjgtODAtODAtODBMODAgOTZ6bTI3MiA5Nkw5NiAxOTJsMCAxMjggMjU2IDAgMC0xMjh6XCJdXG59O1xuY29uc3QgZmFCYXR0ZXJ5NCA9IGZhQmF0dGVyeVRocmVlUXVhcnRlcnM7XG5jb25zdCBmYUhvdXNlQ2lyY2xlQ2hlY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG91c2UtY2lyY2xlLWNoZWNrJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTA5XCIsIFwiTTMyMC43IDM1MmM4LjEtODkuNyA4My41LTE2MCAxNzUuMy0xNjBjOC45IDAgMTcuNiAuNyAyNi4xIDEuOUwzMDkuNSA3Yy02LTUtMTQtNy0yMS03cy0xNSAxLTIyIDhMMTAgMjMxLjVjLTcgNy0xMCAxNS0xMCAyNGMwIDE4IDE0IDMyLjEgMzIgMzIuMWwzMiAwIDAgNjkuN2MtLjEgLjktLjEgMS44LS4xIDIuOGwwIDExMmMwIDIyLjEgMTcuOSA0MCA0MCA0MGwxNiAwYzEuMiAwIDIuNC0uMSAzLjYtLjJjMS41IC4xIDMgLjIgNC41IC4ybDMxLjkgMCAyNCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtMjQgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwIC43IDB6TTY0MCAzNjhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ4MCAzODUuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdXG59O1xuY29uc3QgZmFBbmdsZUxlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYW5nbGUtbGVmdCcsXG4gIGljb246IFszMjAsIDUxMiwgWzgyNDldLCBcImYxMDRcIiwgXCJNNDEuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI1NiAyNDYuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHpcIl1cbn07XG5jb25zdCBmYURpYWdyYW1TdWNjZXNzb3IgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZGlhZ3JhbS1zdWNjZXNzb3InLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0N2FcIiwgXCJNNTEyIDQxNmwwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NHpNNjQgMTYwbDAtNjQgMTQ0IDAgMTYgMCAwIDY0TDY0IDE2MHptMjI0IDBsMC02NCA4MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2LTM4LjEgMGMtMjEuNCAwLTMyLjEgMjUuOS0xNyA0MUwzOTkgMjM5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwTDUwMyAxNjljMTUuMS0xNS4xIDQuNC00MS0xNy00MUw0NDggMTI4bDAtMTZjMC00NC4yLTM1LjgtODAtODAtODBMMjI0IDMybC0xNiAwTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NHpcIl1cbn07XG5jb25zdCBmYVRydWNrQXJyb3dSaWdodCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cnVjay1hcnJvdy1yaWdodCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTU4YlwiLCBcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEwzNjggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4IDUwLjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w1ODkuMyAxOTJjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM2wwIDE4LjcgMCAzMiAwIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bC0xMjggMGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwtMTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA0OHpNNDE2IDI1NmwxMjggMCAwLTE4LjdMNDY2LjcgMTYwIDQxNiAxNjBsMCA5NnpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTM2OC00OGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0yNTcgOTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzkgMzlMOTYgMTY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2Ni4xIDAtMzkgMzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUwyNTcgOTV6XCJdXG59O1xuY29uc3QgZmFBcnJvd3NTcGxpdFVwQW5kTGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3Mtc3BsaXQtdXAtYW5kLWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU0YmNcIiwgXCJNMjQ2LjYgMTUwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDM1MiAxMDkuMyAzNTIgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xMTQuNyAwIDQxLjQgNDEuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMjU2IDIyNCAyNTZjMjMuMyAwIDQ1LjIgNi4yIDY0IDE3LjFsMC0xNjMuOS00MS40IDQxLjR6XCJdXG59O1xuY29uc3QgZmFIYW5kRmlzdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLWZpc3QnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs5OTk0LCBcImZpc3QtcmFpc2VkXCJdLCBcImY2ZGVcIiwgXCJNMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMTItNjQgMCAwLTExMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDgwLTY0IDAgMC04MHptMTkyIDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZ6bTk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em0tOTYgODhsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNmMxMy4yIDAgMjUuNC00IDM1LjYtMTAuOGM4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44YzExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA1Mi4zLTI1LjEgOTguOC02NCAxMjhsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNzguNGMtMTcuMy03LjktMzMuMi0xOC44LTQ2LjktMzIuNUw2OS41IDM1Ny41QzQ1LjUgMzMzLjUgMzIgMzAwLjkgMzIgMjY3bDAtMjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsODggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyelwiXVxufTtcbmNvbnN0IGZhRmlzdFJhaXNlZCA9IGZhSGFuZEZpc3Q7XG5jb25zdCBmYUNsb3VkTW9vbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjbG91ZC1tb29uJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNmMzXCIsIFwiTTQ5NS44IDBjNS41IDAgMTAuOSAuMiAxNi4zIC43YzcgLjYgMTIuOCA1LjcgMTQuMyAxMi41cy0xLjYgMTMuOS03LjcgMTcuM2MtNDQuNCAyNS4yLTc0LjQgNzMtNzQuNCAxMjcuOGMwIDgxIDY1LjUgMTQ2LjYgMTQ2LjIgMTQ2LjZjOC42IDAgMTctLjcgMjUuMS0yLjFjNi45LTEuMiAxMy44IDIuMiAxNyA4LjVzMS45IDEzLjgtMy4xIDE4LjdjLTM0LjUgMzMuNi04MS43IDU0LjQtMTMzLjYgNTQuNGMtOS4zIDAtMTguNC0uNy0yNy40LTEuOWMtMTEuMi0yMi42LTI5LjgtNDAuOS01Mi42LTUxLjdjLTIuNy01OC41LTUwLjMtMTA1LjMtMTA5LjItMTA2LjdjLTEuNy0xMC40LTIuNi0yMS0yLjYtMzEuOEMzMDQgODYuMSAzODkuOCAwIDQ5NS44IDB6TTQ0Ny45IDQzMS45YzAgNDQuMi0zNS44IDgwLTgwIDgwTDk2IDUxMS45Yy01MyAwLTk2LTQzLTk2LTk2YzAtNDcuNiAzNC42LTg3IDgwLTk0LjZsMC0xLjNjMC01MyA0My05NiA5Ni05NmMzNC45IDAgNjUuNCAxOC42IDgyLjIgNDYuNGMxMy05LjEgMjguOC0xNC40IDQ1LjgtMTQuNGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDUuOS0uNiAxMS43LTEuOSAxNy4yYzM3LjQgNi43IDY1LjggMzkuNCA2NS44IDc4Ljd6XCJdXG59O1xuY29uc3QgZmFCcmllZmNhc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnJpZWZjYXNlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTg4XSwgXCJmMGIxXCIsIFwiTTE4NCA0OGwxNDQgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MEwxNzYgOTZsMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDBMNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwbDAgOTYgMTkyIDAgMTI4IDAgMTkyIDAgMC05NmMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDE4NCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnpNNTEyIDI4OGwtMTkyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMkwwIDI4OCAwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTEyOHpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkZhbGxpbmcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLWZhbGxpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1NDZcIiwgXCJNMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5LjhjMCA1NC42LTI3LjkgMTA0LjYtNzIuNSAxMzMuNmwuMiAuM0wzMDQuNSAyNTZsODcuNSAwYzE1LjEgMCAyOS4zIDcuMSAzOC40IDE5LjJsNDMuMiA1Ny42YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOHMtMzQuMiA3LjctNDQuOC02LjRMMzg0IDMyMGwtOTYgMC0xLjQgMCA5Mi4zIDE0Mi42YzkuNiAxNC44IDUuNCAzNC42LTkuNSA0NC4zcy0zNC42IDUuNC00NC4zLTkuNUwxNjQuNSAyNDkuMmMtMi45IDkuMi00LjUgMTktNC41IDI5bDAgNzMuOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTczLjhjMC02NS4xIDM5LjYtMTIzLjcgMTAwLjEtMTQ3LjlDMjMyLjMgMTE1LjggMjU2IDgwLjggMjU2IDQxLjhsMC05LjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTExMiAzMmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6XCJdXG59O1xuY29uc3QgZmFJbWFnZVBvcnRyYWl0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ltYWdlLXBvcnRyYWl0JyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXCJwb3J0cmFpdFwiXSwgXCJmM2UwXCIsIFwiTTM4NCA2NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NHpNMTI4IDE5MmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTgwIDM1Ni42YzAtMzcuOSAzMC43LTY4LjYgNjguNi02OC42bDg2LjkgMGMzNy45IDAgNjguNiAzMC43IDY4LjYgNjguNmMwIDE1LjEtMTIuMyAyNy40LTI3LjQgMjcuNGwtMTY5LjEgMEM5Mi4zIDM4NCA4MCAzNzEuNyA4MCAzNTYuNnpcIl1cbn07XG5jb25zdCBmYVBvcnRyYWl0ID0gZmFJbWFnZVBvcnRyYWl0O1xuY29uc3QgZmFVc2VyVGFnID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItdGFnJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJmNTA3XCIsIFwiTTIyNCAyNTZBMTI4IDEyOCAwIDEgMCAyMjQgMGExMjggMTI4IDAgMSAwIDAgMjU2em0tNDUuNyA0OEM3OS44IDMwNCAwIDM4My44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMmwzODguNiAwYzEwIDAgMTguOC00LjkgMjQuMi0xMi41bC05OS4yLTk5LjJjLTE0LjktMTQuOS0yMy4zLTM1LjEtMjMuMy01Ni4xbDAtMzNjLTE1LjktNC43LTMyLjgtNy4yLTUwLjMtNy4ybC05MS40IDB6TTM4NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODIuN2MwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM0w0NzguMSA0OTEuM2MxOC43IDE4LjcgNDkuMSAxOC43IDY3LjkgMGw3My40LTczLjRjMTguNy0xOC43IDE4LjctNDkuMSAwLTY3LjlMNTEyIDI0Mi43Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43TDM4NCAyMjR6bTI0IDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6XCJdXG59O1xuY29uc3QgZmFSdWcgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncnVnJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlNTY5XCIsIFwiTTI0IDY0bDMyIDAgMjQgMCAwIDI0IDAgODggMCA4MCAwIDgwIDAgODggMCAyNC0yNCAwLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDAtOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTMyLTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC0zMi04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDAtOCAwQzEwLjcgMTEyIDAgMTAxLjMgMCA4OFMxMC43IDY0IDI0IDY0em04OCAwbDQxNiAwIDAgMzg0LTQxNiAwIDAtMzg0ek02NDAgODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMzIgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAzMiA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMC0yNCAwIDAtMjQgMC04OCAwLTgwIDAtODAgMC04OCAwLTI0IDI0IDAgMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHpcIl1cbn07XG5jb25zdCBmYUVhcnRoRXVyb3BlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2VhcnRoLWV1cm9wZScsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZ2xvYmUtZXVyb3BlXCJdLCBcImY3YTJcIiwgXCJNMjY2LjMgNDguM0wyMzIuNSA3My42Yy01LjQgNC04LjUgMTAuNC04LjUgMTcuMWwwIDkuMWMwIDYuOCA1LjUgMTIuMyAxMi4zIDEyLjNjMi40IDAgNC44LS43IDYuOC0yLjFsNDEuOC0yNy45YzItMS4zIDQuNC0yLjEgNi44LTIuMWwxIDBjNi4yIDAgMTEuMyA1LjEgMTEuMyAxMS4zYzAgMy0xLjIgNS45LTMuMyA4bC0xOS45IDE5LjljLTUuOCA1LjgtMTIuOSAxMC4yLTIwLjcgMTIuOGwtMjYuNSA4LjhjLTUuOCAxLjktOS42IDcuMy05LjYgMTMuNGMwIDMuNy0xLjUgNy4zLTQuMSAxMGwtMTcuOSAxNy45Yy02LjQgNi40LTkuOSAxNS05LjkgMjRsMCA0LjNjMCAxNi40IDEzLjYgMjkuNyAyOS45IDI5LjdjMTEgMCAyMS4yLTYuMiAyNi4xLTE2bDQtOC4xYzIuNC00LjggNy40LTcuOSAxMi44LTcuOWM0LjUgMCA4LjcgMi4xIDExLjQgNS43bDE2LjMgMjEuN2MyLjEgMi45IDUuNSA0LjUgOS4xIDQuNWM4LjQgMCAxMy45LTguOSAxMC4xLTE2LjRsLTEuMS0yLjNjLTMuNS03IDAtMTUuNSA3LjUtMThsMjEuMi03LjFjNy42LTIuNSAxMi43LTkuNiAxMi43LTE3LjZjMC0xMC4zIDguMy0xOC42IDE4LjYtMTguNmwyOS40IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTIwLjcgMGMtNy4yIDAtMTQuMiAyLjktMTkuMyA4bC00LjcgNC43Yy0yLjEgMi4xLTMuMyA1LTMuMyA4YzAgNi4yIDUuMSAxMS4zIDExLjMgMTEuM2wxMS4zIDBjNiAwIDExLjggMi40IDE2IDYuNmw2LjUgNi41YzEuOCAxLjggMi44IDQuMyAyLjggNi44cy0xIDUtMi44IDYuOGwtNy41IDcuNUMzODYgMjYyIDM4NCAyNjYuOSAzODQgMjcyczIgMTAgNS43IDEzLjdMNDA4IDMwNGMxMC4yIDEwLjIgMjQuMSAxNiAzOC42IDE2bDcuMyAwYzYuNS0yMC4yIDEwLTQxLjcgMTAtNjRjMC0xMTEuNC04Ny42LTIwMi40LTE5Ny43LTIwNy43em0xNzIgMzA3LjljLTMuNy0yLjYtOC4yLTQuMS0xMy00LjFjLTYgMC0xMS44LTIuNC0xNi02LjZMMzk2IDMzMmMtNy43LTcuNy0xOC0xMi0yOC45LTEyYy05LjcgMC0xOS4yLTMuNS0yNi42LTkuOEwzMTQgMjg3LjRjLTExLjYtOS45LTI2LjQtMTUuNC00MS43LTE1LjRsLTIwLjkgMGMtMTIuNiAwLTI1IDMuNy0zNS41IDEwLjdMMTg4LjUgMzAxYy0xNy44IDExLjktMjguNSAzMS45LTI4LjUgNTMuM2wwIDMuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2wxNiAxNmM4LjUgOC41IDIwIDEzLjMgMzIgMTMuM2wyMS4zIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRjMCAyLjUgLjQgNSAxLjEgNy4zYzcxLjMtNS44IDEzMi41LTQ3LjYgMTY1LjItMTA3LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDBBMjU2IDI1NiAwIDEgMSAwIDI1NnpNMTg3LjMgMTAwLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0zMiAzMmMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDMyLTMyYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42elwiXVxufTtcbmNvbnN0IGZhR2xvYmVFdXJvcGUgPSBmYUVhcnRoRXVyb3BlO1xuY29uc3QgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhcnQtZmxhdGJlZC1zdWl0Y2FzZScsXG4gIGljb246IFs2NDAsIDUxMiwgW1wibHVnZ2FnZS1jYXJ0XCJdLCBcImY1OWRcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsNDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY2LjcgMGMxLjggNSAyLjcgMTAuNCAyLjcgMTZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC01LjYgMS0xMSAyLjctMTZsLTE5Ny41IDBjMS44IDUgMi43IDEwLjQgMi43IDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNS42IDEtMTEgMi43LTE2TDE0NCA0NDhjLTQ0LjIgMC04MC0zNS44LTgwLTgwTDY0IDgwYzAtOC44LTcuMi0xNi0xNi0xNkwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyek00MzIgOTZsMC00MGMwLTQuNC0zLjYtOC04LThsLTgwIDBjLTQuNCAwLTggMy42LTggOGwwIDQwIDk2IDB6TTI4OCA5NmwwLTQwYzAtMzAuOSAyNS4xLTU2IDU2LTU2bDgwIDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCA0MCAwIDIyNC0xOTIgMCAwLTIyNHpNNTEyIDMyMGwwLTIyNCAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwek0yNDAgOTZsMTYgMCAwIDIyNC0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTEyOGMwLTI2LjUgMjEuNS00OCA0OC00OHpcIl1cbn07XG5jb25zdCBmYUx1Z2dhZ2VDYXJ0ID0gZmFDYXJ0RmxhdGJlZFN1aXRjYXNlO1xuY29uc3QgZmFSZWN0YW5nbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdyZWN0YW5nbGUteG1hcmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MjE2NCwgXCJyZWN0YW5nbGUtdGltZXNcIiwgXCJ0aW1lcy1yZWN0YW5nbGVcIiwgXCJ3aW5kb3ctY2xvc2VcIl0sIFwiZjQxMFwiLCBcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0xNzUgMTc1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDQ3IDQ3IDQ3LTQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNDcgNDcgNDcgNDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDctNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDctNDctNDctNDdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45elwiXVxufTtcbmNvbnN0IGZhUmVjdGFuZ2xlVGltZXMgPSBmYVJlY3RhbmdsZVhtYXJrO1xuY29uc3QgZmFUaW1lc1JlY3RhbmdsZSA9IGZhUmVjdGFuZ2xlWG1hcms7XG5jb25zdCBmYVdpbmRvd0Nsb3NlID0gZmFSZWN0YW5nbGVYbWFyaztcbmNvbnN0IGZhQmFodFNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFodC1zaWduJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlMGFjXCIsIFwiTTE0NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyTDM3LjYgNjRDMTYuOCA2NCAwIDgwLjggMCAxMDEuNkwwIDIyNGwwIDQxLjdMMCAyODggMCA0MDYuM2MwIDIzIDE4LjcgNDEuNyA0MS43IDQxLjdsNzAuMyAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjNjEuOSAwIDExMi01MC4xIDExMi0xMTJjMC00MC4xLTIxLjEtNzUuMy01Mi43LTk1LjFDMjgwLjMgMjIyLjYgMjg4IDIwMC4yIDI4OCAxNzZjMC02MS45LTUwLjEtMTEyLTExMi0xMTJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMTEyIDEyOGwwIDk2LTQ4IDAgMC05NiA0OCAwem02NCA5NmwwLTk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4em0tNjQgNjRsMCA5Ni00OCAwIDAtOTYgNDggMHptNjQgOTZsMC05NiAzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0zMiAwelwiXVxufTtcbmNvbnN0IGZhQm9va09wZW4gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1vcGVuJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MjE0LCAxMjgzNjZdLCBcImY1MThcIiwgXCJNMjQ5LjYgNDcxLjVjMTAuOCAzLjggMjIuNC00LjEgMjIuNC0xNS41bDAtMzc3LjRjMC00LjItMS42LTguNC01LTExQzI0Ny40IDUyIDIwMi40IDMyIDE0NCAzMkM5My41IDMyIDQ2LjMgNDUuMyAxOC4xIDU2LjFDNi44IDYwLjUgMCA3MS43IDAgODMuOEwwIDQ1NC4xYzAgMTEuOSAxMi44IDIwLjIgMjQuMSAxNi41QzU1LjYgNDYwLjEgMTA1LjUgNDQ4IDE0NCA0NDhjMzMuOSAwIDc5IDE0IDEwNS42IDIzLjV6bTc2LjggMEMzNTMgNDYyIDM5OC4xIDQ0OCA0MzIgNDQ4YzM4LjUgMCA4OC40IDEyLjEgMTE5LjkgMjIuNmMxMS4zIDMuOCAyNC4xLTQuNiAyNC4xLTE2LjVsMC0zNzAuM2MwLTEyLjEtNi44LTIzLjMtMTguMS0yNy42QzUyOS43IDQ1LjMgNDgyLjUgMzIgNDMyIDMyYy01OC40IDAtMTAzLjQgMjAtMTIzIDM1LjZjLTMuMyAyLjYtNSA2LjgtNSAxMUwzMDQgNDU2YzAgMTEuNCAxMS43IDE5LjMgMjIuNCAxNS41elwiXVxufTtcbmNvbnN0IGZhQm9va0pvdXJuYWxXaGlsbHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYm9vay1qb3VybmFsLXdoaWxscycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wiam91cm5hbC13aGlsbHNcIl0sIFwiZjY2YVwiLCBcIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDM4NCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMEw5NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTZMMCA5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjRMOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTAuNC0yMzQuNGwtMjEuMi0yMS4yYy0zIDEwLjEtNS4xIDIwLjYtNS4xIDMxLjZjMCAuMiAwIC41IC4xIC44cy4xIC41IC4xIC44TDE2NS4yIDIyNmMyLjUgMi4xIDMuNCA1LjggMi4zIDguOWMtMS4zIDMtNC4xIDUuMS03LjUgNS4xYy0xLjktLjEtMy44LS44LTUuMi0ybC0yMy42LTIwLjZDMTQyLjggMjY3IDE4Ni45IDMwNCAyNDAgMzA0czk3LjMtMzcgMTA4LjktODYuNkwzMjUuMyAyMzhjLTEuNCAxLjItMy4zIDItNS4zIDJjLTIuMi0uMS00LjQtMS4xLTYtMi44Yy0xLjItMS41LTEuOS0zLjQtMi01LjJjLjEtMi4yIDEuMS00LjQgMi44LTZsMzcuMS0zMi41YzAtLjMgMC0uNSAuMS0uOHMuMS0uNSAuMS0uOGMwLTExLTIuMS0yMS41LTUuMS0zMS42bC0yMS4yIDIxLjJjLTMuMSAzLjEtOC4xIDMuMS0xMS4zIDBzLTMuMS04LjEgMC0xMS4ybDI2LjQtMjYuNWMtOC4yLTE3LTIwLjUtMzEuNy0zNS45LTQyLjZjLTIuNy0xLjktNi4yIDEuNC01IDQuNWM4LjUgMjIuNCAzLjYgNDgtMTMgNjUuNmMtMy4yIDMuNC0zLjYgOC45LS45IDEyLjdjOS44IDE0IDEyLjcgMzEuOSA3LjUgNDguNWMtNS45IDE5LjQtMjIgMzQuMS00MS45IDM4LjNsLTEuNC0zNC4zIDEyLjYgOC42Yy42IC40IDEuNSAuNiAyLjMgLjZjMS41IDAgMi43LS44IDMuNS0ycy42LTIuOC0uMS00TDI2MCAyMjUuNGwxOC0zLjZjMS44LS40IDMuMS0yLjEgMy4xLTRzLTEuNC0zLjUtMy4xLTMuOWwtMTgtMy43IDguNS0xNC4zYy44LTEuMiAuOS0yLjkgLjEtNC4xcy0yLTItMy41LTJsLS4xIDBjLS43IC4xLTEuNSAuMy0yLjEgLjdsLTE0LjEgOS42TDI0NCA4Ny45Yy0uMS0yLjItMS45LTMuOS00LTMuOXMtMy45IDEuNi00IDMuOWwtNC42IDExMC44LTEyLTguMWMtMS41LTEuMS0zLjYtLjktNSAuNHMtMS42IDMuNC0uOCA1bDguNiAxNC4zLTE4IDMuN2MtMS44IC40LTMuMSAyLTMuMSAzLjlzMS40IDMuNiAzLjEgNGwxOCAzLjgtOC42IDE0LjJjLS4yIC42LS41IDEuNC0uNSAyYzAgMS4xIC41IDIuMSAxLjIgM2MuOCAuNiAxLjggMSAyLjggMWMuNyAwIDEuNi0uMiAyLjItLjZsMTAuNC03LjEtMS40IDMyLjhjLTE5LjktNC4xLTM2LTE4LjktNDEuOS0zOC4zYy01LjEtMTYuNi0yLjItMzQuNCA3LjYtNDguNWMyLjctMy45IDIuMy05LjMtLjktMTIuN2MtMTYuNi0xNy41LTIxLjYtNDMuMS0xMy4xLTY1LjVjMS4yLTMuMS0yLjMtNi40LTUtNC41Yy0xNS4zIDEwLjktMjcuNiAyNS42LTM1LjggNDIuNmwyNi40IDI2LjVjMy4xIDMuMSAzLjEgOC4xIDAgMTEuMnMtOC4xIDMuMS0xMS4yIDB6XCJdXG59O1xuY29uc3QgZmFKb3VybmFsV2hpbGxzID0gZmFCb29rSm91cm5hbFdoaWxscztcbmNvbnN0IGZhSGFuZGN1ZmZzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmRjdWZmcycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTRmOFwiLCBcIk0yNDAgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMTkyIDQ4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptLTMyIDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE2YzAgMS43LS4yIDMuNC0uNSA1LjFDMjgwLjMgMjI5LjYgMzIwIDI4Ni4yIDMyMCAzNTJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0NDAuNCAwIDM1MmMwLTY1LjggMzkuNy0xMjIuNCA5Ni41LTE0Ni45Yy0uNC0xLjYtLjUtMy4zLS41LTUuMWwwLTE2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDggMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAzMjBhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6bTE5Mi05NmMwLTI1LjktNS4xLTUwLjUtMTQuNC03My4xYzE2LjktMzIuOSA0NC44LTU5LjEgNzguOS03My45Yy0uNC0xLjYtLjUtMy4zLS41LTUuMWwwLTE2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDggMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE2YzAgMS43LS4yIDMuNC0uNSA1LjFDNjAwLjMgMjI5LjYgNjQwIDI4Ni4yIDY0MCAzNTJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBjLTYyIDAtMTE1LjgtMzUuMy0xNDIuNC04Ni45YzkuMy0yMi41IDE0LjQtNDcuMiAxNC40LTczLjF6bTIyNCAwYTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpNMzY4IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em04MCA0OGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RyaWFuZ2xlLWV4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbOTg4OCwgXCJleGNsYW1hdGlvbi10cmlhbmdsZVwiLCBcIndhcm5pbmdcIl0sIFwiZjA3MVwiLCBcIk0yNTYgMzJjMTQuMiAwIDI3LjMgNy41IDM0LjUgMTkuOGwyMTYgMzY4YzcuMyAxMi40IDcuMyAyNy43IC4yIDQwLjFTNDg2LjMgNDgwIDQ3MiA0ODBMNDAgNDgwYy0xNC4zIDAtMjcuNi03LjctMzQuNy0yMC4xcy03LTI3LjggLjItNDAuMWwyMTYtMzY4QzIyOC43IDM5LjUgMjQxLjggMzIgMjU2IDMyem0wIDEyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMzIgMjI0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6XCJdXG59O1xuY29uc3QgZmFFeGNsYW1hdGlvblRyaWFuZ2xlID0gZmFUcmlhbmdsZUV4Y2xhbWF0aW9uO1xuY29uc3QgZmFXYXJuaW5nID0gZmFUcmlhbmdsZUV4Y2xhbWF0aW9uO1xuY29uc3QgZmFEYXRhYmFzZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkYXRhYmFzZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjFjMFwiLCBcIk00NDggODBsMCA0OGMwIDQ0LjItMTAwLjMgODAtMjI0IDgwUzAgMTcyLjIgMCAxMjhMMCA4MEMwIDM1LjggMTAwLjMgMCAyMjQgMFM0NDggMzUuOCA0NDggODB6TTM5My4yIDIxNC43YzIwLjgtNy40IDM5LjktMTYuOSA1NC44LTI4LjZMNDQ4IDI4OGMwIDQ0LjItMTAwLjMgODAtMjI0IDgwUzAgMzMyLjIgMCAyODhMMCAxODYuMWMxNC45IDExLjggMzQgMjEuMiA1NC44IDI4LjZDOTkuNyAyMzAuNyAxNTkuNSAyNDAgMjI0IDI0MHMxMjQuMy05LjMgMTY5LjItMjUuM3pNMCAzNDYuMWMxNC45IDExLjggMzQgMjEuMiA1NC44IDI4LjZDOTkuNyAzOTAuNyAxNTkuNSA0MDAgMjI0IDQwMHMxMjQuMy05LjMgMTY5LjItMjUuM2MyMC44LTcuNCAzOS45LTE2LjkgNTQuOC0yOC42bDAgODUuOWMwIDQ0LjItMTAwLjMgODAtMjI0IDgwUzAgNDc2LjIgMCA0MzJsMC04NS45elwiXVxufTtcbmNvbnN0IGZhU2hhcmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc2hhcmUnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtcIm1haWwtZm9yd2FyZFwiXSwgXCJmMDY0XCIsIFwiTTMwNyAzNC44Yy0xMS41IDUuMS0xOSAxNi42LTE5IDI5LjJsMCA2NC0xMTIgMEM3OC44IDEyOCAwIDIwNi44IDAgMzA0QzAgNDE3LjMgODEuNSA0NjcuOSAxMDAuMiA0NzguMWMyLjUgMS40IDUuMyAxLjkgOC4xIDEuOWMxMC45IDAgMTkuNy04LjkgMTkuNy0xOS43YzAtNy41LTQuMy0xNC40LTkuOC0xOS41QzEwOC44IDQzMS45IDk2IDQxNC40IDk2IDM4NGMwLTUzIDQzLTk2IDk2LTk2bDk2IDAgMCA2NGMwIDEyLjYgNy40IDI0LjEgMTkgMjkuMnMyNSAzIDM0LjQtNS40bDE2MC0xNDRjNi43LTYuMSAxMC42LTE0LjcgMTAuNi0yMy44cy0zLjgtMTcuNy0xMC42LTIzLjhsLTE2MC0xNDRjLTkuNC04LjUtMjIuOS0xMC42LTM0LjQtNS40elwiXVxufTtcbmNvbnN0IGZhTWFpbEZvcndhcmQgPSBmYVNoYXJlO1xuY29uc3QgZmFCb3R0bGVEcm9wbGV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvdHRsZS1kcm9wbGV0JyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNGM0XCIsIFwiTTk2IDBDODIuNyAwIDcyIDEwLjcgNzIgMjRzMTAuNyAyNCAyNCAyNGM0LjQgMCA4IDMuNiA4IDhsMCA2NC45YzAgMTIuMi03LjIgMjMuMS0xNy4yIDMwLjFDNTMuNyAxNzQuMSAzMiAyMTIuNSAzMiAyNTZsMCAxOTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTI4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC00My41LTIxLjctODEuOS01NC44LTEwNWMtMTAtNy0xNy4yLTE3LjktMTcuMi0zMC4xTDIxNiA1NmMwLTQuNCAzLjYtOCA4LThjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTggMHMwIDAgMCAwczAgMCAwIDBMMTA0IDBzMCAwIDAgMHMwIDAgMCAwTDk2IDB6bTY0IDM4MmMtMjYuNSAwLTQ4LTIwLjEtNDgtNDVjMC0xNi44IDIyLjEtNDguMSAzNi4zLTY2LjRjNi03LjggMTcuNS03LjggMjMuNSAwQzE4NS45IDI4OC45IDIwOCAzMjAuMiAyMDggMzM3YzAgMjQuOS0yMS41IDQ1LTQ4IDQ1elwiXVxufTtcbmNvbnN0IGZhTWFza0ZhY2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbWFzay1mYWNlJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXSwgXCJlMWQ3XCIsIFwiTTMyMCA2NGMtMjcuMiAwLTUzLjggOC03Ni40IDIzLjFsLTM3LjEgMjQuOGMtMTUuOCAxMC41LTM0LjMgMTYuMS01My4zIDE2LjFsLTkuMiAwLTE2IDAtNzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4NWMwIDU1LjEgMzcuNSAxMDMuMSA5MC45IDExNi40bDEwOCAyN0MyMzMuOCA0MzUgMjc1LjQgNDQ4IDMyMCA0NDhzODYuMi0xMyAxMjEuMS0zNS41bDEwOC0yN0M2MDIuNSAzNzIuMSA2NDAgMzI0LjEgNjQwIDI2OWwwLTg1YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC03MiAwLTE2IDAtOS4yIDBjLTE5IDAtMzcuNS01LjYtNTMuMy0xNi4xTDM5Ni40IDg3LjFDMzczLjggNzIgMzQ3LjIgNjQgMzIwIDY0ek0xMzIuMyAzNDYuM2wtMjkuOC03LjRDNzAuNSAzMzAuOSA0OCAzMDIuMSA0OCAyNjlsMC04NWMwLTQuNCAzLjYtOCA4LThsNDAgMCAwIDQ4YzAgNDUuMSAxMy40IDg3LjIgMzYuMyAxMjIuM3ptNDA1LjEtNy40bC0yOS44IDcuNGMyMy0zNS4yIDM2LjMtNzcuMiAzNi4zLTEyMi4zbDAtNDggNDAgMGM0LjQgMCA4IDMuNiA4IDhsMCA4NWMwIDMzLTIyLjUgNjEuOC01NC41IDY5Ljl6TTE5MiAyMDhjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0yMjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2em0xNiA0OGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMjI0IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTE2IDgwYzAtOC44IDcuMi0xNiAxNi0xNmwxNjAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnpcIl1cbn07XG5jb25zdCBmYUhpbGxSb2Nrc2xpZGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGlsbC1yb2Nrc2xpZGUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1MDhcIiwgXCJNMjUyLjQgMTAzLjhsMjcgNDhjMi44IDUgOC4yIDguMiAxMy45IDguMmw1My4zIDBjNS44IDAgMTEuMS0zLjEgMTMuOS04LjJsMjctNDhjMi43LTQuOSAyLjctMTAuOCAwLTE1LjdsLTI3LTQ4Yy0yLjgtNS04LjItOC4yLTEzLjktOC4ybC01My4zIDBjLTUuOCAwLTExLjEgMy4xLTEzLjkgOC4ybC0yNyA0OGMtMi43IDQuOS0yLjcgMTAuOCAwIDE1Ljd6TTY4LjMgODdDNDMuMSA2MS44IDAgNzkuNyAwIDExNS4zTDAgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDMxNi43IDBjMzUuNiAwIDUzLjUtNDMuMSAyOC4zLTY4LjNMNjguMyA4N3pNNTA0LjIgNDAzLjZjNC45IDIuNyAxMC44IDIuNyAxNS43IDBsNDgtMjdjNS0yLjggOC4yLTguMiA4LjItMTMuOWwwLTUzLjNjMC01LjgtMy4xLTExLjEtOC4yLTEzLjlsLTQ4LTI3Yy00LjktMi43LTEwLjgtMi43LTE1LjcgMGwtNDggMjdjLTUgMi44LTguMiA4LjItOC4yIDEzLjlsMCA1My4zYzAgNS44IDMuMSAxMS4xIDguMiAxMy45bDQ4IDI3ek0xOTIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzg0IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFSaWdodExlZnQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncmlnaHQtbGVmdCcsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiZXhjaGFuZ2UtYWx0XCJdLCBcImYzNjJcIiwgXCJNMzIgOTZsMzIwIDAgMC02NGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDk2IDk2YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTk2IDk2Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNmwwLTY0TDMyIDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNNDgwIDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtOTYtOTZjLTYtNi05LjQtMTQuMS05LjQtMjIuNnMzLjQtMTYuNiA5LjQtMjIuNmw5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOXMxOS44IDE2LjYgMTkuOCAyOS42bDAgNjQgMzIwIDB6XCJdXG59O1xuY29uc3QgZmFFeGNoYW5nZUFsdCA9IGZhUmlnaHRMZWZ0O1xuY29uc3QgZmFQYXBlclBsYW5lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BhcGVyLXBsYW5lJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbNjE5MTNdLCBcImYxZDhcIiwgXCJNNDk4LjEgNS42YzEwLjEgNyAxNS40IDE5LjEgMTMuNSAzMS4ybC02NCA0MTZjLTEuNSA5LjctNy40IDE4LjItMTYgMjNzLTE4LjkgNS40LTI4IDEuNkwyODQgNDI3LjdsLTY4LjUgNzQuMWMtOC45IDkuNy0yMi45IDEyLjktMzUuMiA4LjFTMTYwIDQ5My4yIDE2MCA0ODBsMC04My42YzAtNCAxLjUtNy44IDQuMi0xMC44TDMzMS44IDIwMi44YzUuOC02LjMgNS42LTE2LS40LTIycy0xNS43LTYuNC0yMi0uN0wxMDYgMzYwLjggMTcuNyAzMTYuNkM3LjEgMzExLjMgLjMgMzAwLjcgMCAyODguOXM1LjktMjIuOCAxNi4xLTI4LjdsNDQ4LTI1NmMxMC43LTYuMSAyMy45LTUuNSAzNCAxLjR6XCJdXG59O1xuY29uc3QgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncm9hZC1jaXJjbGUtZXhjbGFtYXRpb24nLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NjVcIiwgXCJNMjEzLjIgMzJMMjg4IDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDc0LjggMGMyNy4xIDAgNTEuMyAxNy4xIDYwLjMgNDIuNmw0Mi43IDEyMC42Yy0xMC45LTIuMS0yMi4yLTMuMi0zMy44LTMuMmMtNTkuNSAwLTExMi4xIDI5LjYtMTQ0IDc0LjhsMC00Mi44YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJjMi4zIDAgNC42LS4zIDYuOC0uN2MtNC41IDE1LjUtNi44IDMxLjgtNi44IDQ4LjdjMCA1LjQgLjIgMTAuNyAuNyAxNmwtLjcgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NEw4Ni42IDQ4MEM1Ni41IDQ4MCAzMiA0NTUuNSAzMiA0MjUuNGMwLTYuMiAxLjEtMTIuNCAzLjEtMTguMkwxNTIuOSA3NC42QzE2MiA0OS4xIDE4Ni4xIDMyIDIxMy4yIDMyek00OTYgMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyNDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0wLTE5MmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnpcIl1cbn07XG5jb25zdCBmYUR1bmdlb24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZHVuZ2VvbicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZjZkOVwiLCBcIk0zMzYuNiAxNTYuNWMxLjMgMS4xIDIuNyAyLjIgMy45IDMuM2M5LjMgOC4yIDIzIDEwLjUgMzMuNCAzLjZsNjcuNi00NS4xYzExLjQtNy42IDE0LjItMjMuMiA1LjEtMzMuNEM0MzAgNjYuNiA0MTAuOSA1MC42IDM4OS43IDM3LjZjLTExLjktNy4zLTI2LjktMS40LTMyLjEgMTEuNmwtMzAuNSA3Ni4yYy00LjUgMTEuMSAuMiAyMy42IDkuNSAzMS4yek0zMjggMzYuOGM1LjEtMTIuOC0xLjYtMjcuNC0xNS0zMC41QzI5NC43IDIuMiAyNzUuNiAwIDI1NiAwcy0zOC43IDIuMi01NyA2LjRDMTg1LjUgOS40IDE3OC44IDI0IDE4NCAzNi44bDMwLjMgNzUuOGM0LjUgMTEuMyAxNi44IDE3LjIgMjkgMTZjNC4yLS40IDguNC0uNiAxMi43LS42czguNiAuMiAxMi43IC42YzEyLjEgMS4yIDI0LjQtNC43IDI5LTE2TDMyOCAzNi44ek02NS41IDg1Yy05LjEgMTAuMi02LjMgMjUuOCA1LjEgMzMuNGw2Ny42IDQ1LjFjMTAuMyA2LjkgMjQuMSA0LjYgMzMuNC0zLjZjMS4zLTEuMSAyLjYtMi4zIDQtMy4zYzkuMy03LjUgMTMuOS0yMC4xIDkuNS0zMS4yTDE1NC40IDQ5LjJjLTUuMi0xMi45LTIwLjMtMTguOC0zMi4xLTExLjZDMTAxLjEgNTAuNiA4MiA2Ni42IDY1LjUgODV6bTMxNCAxMzcuMWMuOSAzLjMgMS43IDYuNiAyLjMgMTBjMi41IDEzIDEzIDIzLjkgMjYuMiAyMy45bDgwIDBjMTMuMyAwIDI0LjEtMTAuOCAyMi45LTI0Yy0yLjUtMjcuMi05LjMtNTMuMi0xOS43LTc3LjNjLTUuNS0xMi45LTIxLjQtMTYuNi0zMy4xLTguOWwtNjguNiA0NS43Yy05LjggNi41LTEzLjIgMTkuMi0xMCAzMC41ek01My45IDE0NS44Yy0xMS42LTcuOC0yNy42LTQtMzMuMSA4LjlDMTAuNCAxNzguOCAzLjYgMjA0LjggMS4xIDIzMmMtMS4yIDEzLjIgOS42IDI0IDIyLjkgMjRsODAgMGMxMy4zIDAgMjMuOC0xMC44IDI2LjItMjMuOWMuNi0zLjQgMS40LTYuNyAyLjMtMTBjMy4xLTExLjQtLjItMjQtMTAtMzAuNUw1My45IDE0NS44ek0xMDQgMjg4bC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMzA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAwek0yNCA0MTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAwem0zODQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTgwIDB6TTI3MiAxOTJjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAyNzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTI3MnptLTY0IDMyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMjQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yNDB6bTEyOCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMjQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yNDB6XCJdXG59O1xuY29uc3QgZmFBbGlnblJpZ2h0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2FsaWduLXJpZ2h0JyxcbiAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgXCJmMDM4XCIsIFwiTTQ0OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwxOTIgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6XCJdXG59O1xuY29uc3QgZmFNb25leUJpbGwxV2F2ZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtb25leS1iaWxsLTEtd2F2ZScsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibW9uZXktYmlsbC13YXZlLWFsdFwiXSwgXCJmNTNiXCIsIFwiTTAgMTEyLjVMMCA0MjIuM2MwIDE4IDEwLjEgMzUgMjcgNDEuM2M4NyAzMi41IDE3NCAxMC4zIDI2MS0xMS45Yzc5LjgtMjAuMyAxNTkuNi00MC43IDIzOS4zLTE4LjljMjMgNi4zIDQ4LjctOS41IDQ4LjctMzMuNGwwLTMwOS45YzAtMTgtMTAuMS0zNS0yNy00MS4zQzQ2MiAxNS45IDM3NSAzOC4xIDI4OCA2MC4zQzIwOC4yIDgwLjYgMTI4LjQgMTAwLjkgNDguNyA3OS4xQzI1LjYgNzIuOCAwIDg4LjYgMCAxMTIuNXpNMTI4IDQxNmwtNjQgMCAwLTY0YzM1LjMgMCA2NCAyOC43IDY0IDY0ek02NCAyMjRsMC02NCA2NCAwYzAgMzUuMy0yOC43IDY0LTY0IDY0ek00NDggMzUyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDAgNjQtNjQgMHptNjQtMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NGw2NCAwIDAgNjR6TTM4NCAyNTZjMCA2MS45LTQzIDExMi05NiAxMTJzLTk2LTUwLjEtOTYtMTEyczQzLTExMiA5Ni0xMTJzOTYgNTAuMSA5NiAxMTJ6TTI1MiAyMDhjMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDI0IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC00IDAgMC02OGMwLTExLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHpcIl1cbn07XG5jb25zdCBmYU1vbmV5QmlsbFdhdmVBbHQgPSBmYU1vbmV5QmlsbDFXYXZlO1xuY29uc3QgZmFMaWZlUmluZyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdsaWZlLXJpbmcnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYxY2RcIiwgXCJNMzY3LjIgNDEyLjVDMzM1LjkgNDM0LjkgMjk3LjUgNDQ4IDI1NiA0NDhzLTc5LjktMTMuMS0xMTEuMi0zNS41bDU4LTU4YzE1LjggOC42IDM0IDEzLjUgNTMuMyAxMy41czM3LjQtNC45IDUzLjMtMTMuNWw1OCA1OHptOTAuNyAuOGMzMy44LTQzLjQgNTQtOTggNTQtMTU3LjNzLTIwLjItMTEzLjktNTQtMTU3LjNjOS0xMi41IDcuOS0zMC4xLTMuNC00MS4zUzQyNS44IDQ1IDQxMy4zIDU0QzM2OS45IDIwLjIgMzE1LjMgMCAyNTYgMFMxNDIuMSAyMC4yIDk4LjcgNTRjLTEyLjUtOS0zMC4xLTcuOS00MS4zIDMuNFM0NSA4Ni4yIDU0IDk4LjdDMjAuMiAxNDIuMSAwIDE5Ni43IDAgMjU2czIwLjIgMTEzLjkgNTQgMTU3LjNjLTkgMTIuNS03LjkgMzAuMSAzLjQgNDEuM1M4Ni4yIDQ2NyA5OC43IDQ1OGM0My40IDMzLjggOTggNTQgMTU3LjMgNTRzMTEzLjktMjAuMiAxNTcuMy01NGMxMi41IDkgMzAuMSA3LjkgNDEuMy0zLjRzMTIuNC0yOC44IDMuNC00MS4zem0tNDUuNS00Ni4xbC01OC01OGM4LjYtMTUuOCAxMy41LTM0IDEzLjUtNTMuM3MtNC45LTM3LjQtMTMuNS01My4zbDU4LTU4QzQzNC45IDE3Ni4xIDQ0OCAyMTQuNSA0NDggMjU2cy0xMy4xIDc5LjktMzUuNSAxMTEuMnpNMzY3LjIgOTkuNWwtNTggNThjLTE1LjgtOC42LTM0LTEzLjUtNTMuMy0xMy41cy0zNy40IDQuOS01My4zIDEzLjVsLTU4LTU4QzE3Ni4xIDc3LjEgMjE0LjUgNjQgMjU2IDY0czc5LjkgMTMuMSAxMTEuMiAzNS41ek0xNTcuNSAzMDkuM2wtNTggNThDNzcuMSAzMzUuOSA2NCAyOTcuNSA2NCAyNTZzMTMuMS03OS45IDM1LjUtMTExLjJsNTggNThjLTguNiAxNS44LTEzLjUgMzQtMTMuNSA1My4zczQuOSAzNy40IDEzLjUgNTMuM3pNMjA4IDI1NmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwelwiXVxufTtcbmNvbnN0IGZhSGFuZHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHMnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInNpZ24tbGFuZ3VhZ2VcIiwgXCJzaWduaW5nXCJdLCBcImYyYTdcIiwgXCJNNTQ0IDE2MGwtLjEgNzIuNmMtLjEgNTIuMi0yNCAxMDEtNjQgMTMzLjFjLjEtMS45IC4xLTMuOCAuMS01LjdsMC04YzAtNzEuOC0zNy0xMzguNi05Ny45LTE3Ni43bC02MC4yLTM3LjZjLTguNi01LjQtMTcuOS04LjQtMjcuMy05LjRMMjQ4LjcgNDguOGMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhzMjYuMi0yLjcgMzIuOCA4LjhsNzggMTM1LjFjMy4zIDUuNyAxMC43IDcuNyAxNi40IDQuNHM3LjctMTAuNyA0LjQtMTYuNGwtNjItMTA3LjRjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44UzM2MiA1IDM2OC42IDE2LjVsNjggMTE3LjhzMCAwIDAgMHMwIDAgMCAwbDQzLjMgNzVMNDgwIDE2MGMwLTE3LjcgMTQuNC0zMiAzMi0zMnMzMiAxNC40IDMyIDMyek0yNDMuOSA4OC41TDI2OC41IDEzMWMtMTMuOSA0LjUtMjYuNCAxMy43LTM0LjcgMjdjLS45IDEuNC0xLjcgMi45LTIuNSA0LjRsLTI4LjktNTBjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44em0tNDYuNCA2My43bDI2LjggNDYuNGMuNiA2IDIuMSAxMS44IDQuMyAxNy40bC00LjcgMC0xMy4zIDBzMCAwIDAgMEwxNzkgMjE2bC0yMy0zOS44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOHpNMjYwLjkgMTc1YzkuNC0xNSAyOS4xLTE5LjUgNDQuMS0xMC4ybDYwLjIgMzcuNkM0MTYuNyAyMzQuNyA0NDggMjkxLjIgNDQ4IDM1MmwwIDhjMCA4My45LTY4LjEgMTUyLTE1MiAxNTJsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDkyIDBjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJMODggNDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEyNCAwYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEyTDU2IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNTYgMGM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkw4OCAyOTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTM2IDBzMCAwIDAgMHMwIDAgMCAwbDkzLjIgMEwyNzEgMjE5LjFjLTE1LTkuNC0xOS41LTI5LjEtMTAuMi00NC4xelwiXVxufTtcbmNvbnN0IGZhU2lnbkxhbmd1YWdlID0gZmFIYW5kcztcbmNvbnN0IGZhU2lnbmluZyA9IGZhSGFuZHM7XG5jb25zdCBmYUNhbGVuZGFyRGF5ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2NhbGVuZGFyLWRheScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjc4M1wiLCBcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OEwwIDE2MGwwLTQ4QzAgODUuNSAyMS41IDY0IDQ4IDY0bDQ4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJsNDQ4IDAgMCAyNzJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE5MnptODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmw5NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNmwtOTYgMHpcIl1cbn07XG5jb25zdCBmYVdhdGVyTGFkZGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3dhdGVyLWxhZGRlcicsXG4gIGljb246IFs1NzYsIDUxMiwgW1wibGFkZGVyLXdhdGVyXCIsIFwic3dpbW1pbmctcG9vbFwiXSwgXCJmNWM1XCIsIFwiTTEyOCAxMjcuN0MxMjggNzQuOSAxNzAuOSAzMiAyMjMuNyAzMmM0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjhjLTE3LjUgMC0zMS43IDE0LjItMzEuNyAzMS43bDAgOTYuMyAxOTIgMCAwLTk2LjNDMzg0IDc0LjkgNDI2LjkgMzIgNDc5LjcgMzJjNDguMyAwIDg5IDM2IDk1IDgzLjlsMSA4LjJjMi4yIDE3LjUtMTAuMiAzMy41LTI3LjggMzUuN3MtMzMuNS0xMC4yLTM1LjctMjcuOGwtMS04LjJjLTItMTUuOS0xNS41LTI3LjgtMzEuNS0yNy44Yy0xNy41IDAtMzEuNyAxNC4yLTMxLjcgMzEuN0w0NDggMzYxYy0xLjYgMS0zLjMgMi00LjggMy4xYy0xOCAxMi40LTQwLjEgMjAuMy01OS4yIDIwLjNjMCAwIDAgMCAwIDBsMC05Ni41LTE5MiAwIDAgOTYuNWMtMTkgMC00MS4yLTcuOS01OS4xLTIwLjNjLTEuNi0xLjEtMy4yLTIuMi00LjktMy4xbDAtMjMzLjN6TTMwNi41IDM4OS45QzMyOSA0MDUuNCAzNTYuNSA0MTYgMzg0IDQxNmMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWMwIDAgMCAwIDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDQ2OS43IDQxNyA0ODAgMzg0IDQ4MGMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNCAyNy4zLTEwLjEgMzkuMi0xLjdjMCAwIDAgMCAwIDBDMTM2LjcgNDA1LjIgMTY1LjEgNDE2IDE5MiA0MTZjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdXG59O1xuY29uc3QgZmFMYWRkZXJXYXRlciA9IGZhV2F0ZXJMYWRkZXI7XG5jb25zdCBmYVN3aW1taW5nUG9vbCA9IGZhV2F0ZXJMYWRkZXI7XG5jb25zdCBmYUFycm93c1VwRG93biA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3MtdXAtZG93bicsXG4gIGljb246IFszMjAsIDUxMiwgW1wiYXJyb3dzLXZcIl0sIFwiZjA3ZFwiLCBcIk0xODIuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxMjggMTA5LjNsMCAyOTMuNUw4Ni42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDAyLjdsMC0yOTMuNSA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6XCJdXG59O1xuY29uc3QgZmFBcnJvd3NWID0gZmFBcnJvd3NVcERvd247XG5jb25zdCBmYUZhY2VHcmltYWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZhY2UtZ3JpbWFjZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU1NiwgXCJncmltYWNlXCJdLCBcImY1N2ZcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6bTk2LTExMmwtOCAwIDAtNDAgNTUuMyAwYy0zLjggMjIuNy0yMy42IDQwLTQ3LjMgNDB6bTQ3LjMtNTZMMzQ0IDM0NGwwLTQwIDggMGMyMy44IDAgNDMuNSAxNy4zIDQ3LjMgNDB6TTMyOCAzNDRsLTY0IDAgMC00MCA2NCAwIDAgNDB6bTAgNTZsLTY0IDAgMC00MCA2NCAwIDAgNDB6bS04MC05NmwwIDQwLTY0IDAgMC00MCA2NCAwem0wIDU2bDAgNDAtNjQgMCAwLTQwIDY0IDB6bS04MC0xNmwtNTUuMyAwYzMuOC0yMi43IDIzLjYtNDAgNDcuMy00MGw4IDAgMCA0MHptMCA1NmwtOCAwYy0yMy44IDAtNDMuNS0xNy4zLTQ3LjMtNDBsNTUuMyAwIDAgNDB6TTE0NC40IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhR3JpbWFjZSA9IGZhRmFjZUdyaW1hY2U7XG5jb25zdCBmYVdoZWVsY2hhaXJNb3ZlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3doZWVsY2hhaXItbW92ZScsXG4gIGljb246IFs0NDgsIDUxMiwgW1wid2hlZWxjaGFpci1hbHRcIl0sIFwiZTJjZVwiLCBcIk0zMjAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMjA0LjUgMTIxLjNjLTUuNC0yLjUtMTEuNy0xLjktMTYuNCAxLjdsLTQwLjkgMzAuN2MtMTQuMSAxMC42LTM0LjIgNy43LTQ0LjgtNi40cy03LjctMzQuMiA2LjQtNDQuOGw0MC45LTMwLjdjMjMuNy0xNy44IDU1LjMtMjEgODIuMS04LjRsOTAuNCA0Mi41YzI5LjEgMTMuNyAzNi44IDUxLjYgMTUuMiA3NS41TDI5OS4xIDIyNGw5Ny40IDBjMzAuMyAwIDUzIDI3LjcgNDcuMSA1Ny40TDQxNS40IDQyMi4zYy0zLjUgMTcuMy0yMC4zIDI4LjYtMzcuNyAyNS4xcy0yOC42LTIwLjMtMjUuMS0zNy43TDM3NyAyODhsLTcwLjMgMGM4LjYgMTkuNiAxMy4zIDQxLjIgMTMuMyA2NGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQ0MC40IDAgMzUyczcxLjYtMTYwIDE2MC0xNjBjMTEuMSAwIDIyIDEuMSAzMi40IDMuM2w1NC4yLTU0LjItNDIuMS0xOS44ek0xNjAgNDQ4YTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyelwiXVxufTtcbmNvbnN0IGZhV2hlZWxjaGFpckFsdCA9IGZhV2hlZWxjaGFpck1vdmU7XG5jb25zdCBmYVR1cm5Eb3duID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3R1cm4tZG93bicsXG4gIGljb246IFszODQsIDUxMiwgWzEwNTQ5LCBcImxldmVsLWRvd24tYWx0XCJdLCBcImYzYmVcIiwgXCJNMzUwIDMzNC41YzMuOCA4LjggMiAxOS00LjYgMjZsLTEzNiAxNDRjLTQuNSA0LjgtMTAuOCA3LjUtMTcuNCA3LjVzLTEyLjktMi43LTE3LjQtNy41bC0xMzYtMTQ0Yy02LjYtNy04LjQtMTcuMi00LjYtMjZzMTIuNS0xNC41IDIyLTE0LjVsODggMCAwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0TDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwbDgwIDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAxOTIgODggMGM5LjYgMCAxOC4yIDUuNyAyMiAxNC41elwiXVxufTtcbmNvbnN0IGZhTGV2ZWxEb3duQWx0ID0gZmFUdXJuRG93bjtcbmNvbnN0IGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGVyc29uLXdhbGtpbmctYXJyb3ctcmlnaHQnLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1NTJcIiwgXCJNMjA4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTIzLjcgMjAwLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDI4MSAyMzIuN2wtMTUuMy0zNi44QzI0OC41IDE1NC44IDIwOC4zIDEyOCAxNjMuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMzIuOSAxNC42LTU4LjEgNDIuNC02OS40IDc2LjVsLTIuNiA3LjhjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMi42LTcuOGM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41em0tMzAgMTM1LjFMNjguNyAzOTggOS40IDQ1Ny40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDExNi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6TTU1MC42IDE1My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w1MzAuNyAyMjQgMzg0IDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNDYuNyAwLTI1LjQgMjUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw4MC04MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtODAtODB6XCJdXG59O1xuY29uc3QgZmFTcXVhcmVFbnZlbG9wZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdzcXVhcmUtZW52ZWxvcGUnLFxuICBpY29uOiBbNDQ4LCA1MTIsIFtcImVudmVsb3BlLXNxdWFyZVwiXSwgXCJmMTk5XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIxOCAyNzEuN0w2NC4yIDE3Mi40QzY2IDE1Ni40IDc5LjUgMTQ0IDk2IDE0NGwyNTYgMGMxNi41IDAgMzAgMTIuNCAzMS44IDI4LjRMMjMwIDI3MS43Yy0xLjggMS4yLTMuOSAxLjgtNiAxLjhzLTQuMi0uNi02LTEuOHptMjkuNCAyNi45TDM4NCAyMTAuNCAzODQgMzM2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDM2OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjUuNiAxMzYuNiA4OC4yYzcgNC41IDE1LjEgNi45IDIzLjQgNi45czE2LjQtMi40IDIzLjQtNi45elwiXVxufTtcbmNvbnN0IGZhRW52ZWxvcGVTcXVhcmUgPSBmYVNxdWFyZUVudmVsb3BlO1xuY29uc3QgZmFEaWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2RpY2UnLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5MjJdLCBcImY1MjJcIiwgXCJNMjc0LjkgMzQuM2MtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwTDM0LjMgMTczLjFjLTI4LjEgMjguMS0yOC4xIDczLjcgMCAxMDEuOEwxNzMuMSA0MTMuN2MyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDBMNDEzLjcgMjc0LjljMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44TDI3NC45IDM0LjN6TTIwMCAyMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNOTYgMjAwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjI0IDM3NmEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTM1MiAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yMjQgMTIwYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptOTYgMzI4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xMTQuMyAwYzExLjYgMzYgMy4xIDc3LTI1LjQgMTA1LjVMMzIwIDQxMy44bDAgMzQuMnpNNDgwIDMyOGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6XCJdXG59O1xuY29uc3QgZmFCb3dsaW5nQmFsbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdib3dsaW5nLWJhbGwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImY0MzZcIiwgXCJNMjU2IDUxMkEyNTYgMjU2IDAgMSAwIDI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI0MCA4MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTIwOCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTY0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpcIl1cbn07XG5jb25zdCBmYUJyYWluID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JyYWluJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTA0XSwgXCJmNWRjXCIsIFwiTTE4NCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgNDAwYzAgMzAuOS0yNS4xIDU2LTU2IDU2Yy0yOC45IDAtNTIuNy0yMS45LTU1LjctNTAuMWMtNS4yIDEuNC0xMC43IDIuMS0xNi4zIDIuMWMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC03LjQgMS4zLTE0LjYgMy42LTIxLjJDMjEuNCAzNjcuNCAwIDMzOC4yIDAgMzA0YzAtMzEuOSAxOC43LTU5LjUgNDUuOC03Mi4zQzM3LjEgMjIwLjggMzIgMjA3IDMyIDE5MmMwLTMwLjcgMjEuNi01Ni4zIDUwLjQtNjIuNkM4MC44IDEyMy45IDgwIDExOCA4MCAxMTJjMC0yOS45IDIwLjYtNTUuMSA0OC4zLTYyLjFDMTMxLjMgMjEuOSAxNTUuMSAwIDE4NCAwek0zMjggMGMyOC45IDAgNTIuNiAyMS45IDU1LjcgNDkuOWMyNy44IDcgNDguMyAzMi4xIDQ4LjMgNjIuMWMwIDYtLjggMTEuOS0yLjQgMTcuNGMyOC44IDYuMiA1MC40IDMxLjkgNTAuNCA2Mi42YzAgMTUtNS4xIDI4LjgtMTMuOCAzOS43QzQ5My4zIDI0NC41IDUxMiAyNzIuMSA1MTIgMzA0YzAgMzQuMi0yMS40IDYzLjQtNTEuNiA3NC44YzIuMyA2LjYgMy42IDEzLjggMy42IDIxLjJjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTUuNiAwLTExLjEtLjctMTYuMy0yLjFjLTMgMjguMi0yNi44IDUwLjEtNTUuNyA1MC4xYy0zMC45IDAtNTYtMjUuMS01Ni01NmwwLTQwMGMwLTMwLjkgMjUuMS01NiA1Ni01NnpcIl1cbn07XG5jb25zdCBmYUJhbmRhZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYmFuZGFnZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTY1NywgXCJiYW5kLWFpZFwiXSwgXCJmNDYyXCIsIFwiTTQ4MCA0MTZsOTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NGwtOTYgMCAwIDMyMHpNNDQ4IDk2TDE5MiA5NmwwIDMyMCAyNTYgMCAwLTMyMHpNNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDk2IDAgMC0zMjBMNjQgOTZ6TTI0OCAyMDhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTIwLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjQ4IDMwNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4elwiXVxufTtcbmNvbnN0IGZhQmFuZEFpZCA9IGZhQmFuZGFnZTtcbmNvbnN0IGZhQ2FsZW5kYXJNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjYWxlbmRhci1taW51cycsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjI3MlwiLCBcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OEwwIDE2MGwwLTQ4QzAgODUuNSAyMS41IDY0IDQ4IDY0bDQ4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJsNDQ4IDAgMCAyNzJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE5MnpNMzEyIDM3NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDB6XCJdXG59O1xuY29uc3QgZmFDaXJjbGVYbWFyayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdjaXJjbGUteG1hcmsnLFxuICBpY29uOiBbNTEyLCA1MTIsIFs2MTUzMiwgXCJ0aW1lcy1jaXJjbGVcIiwgXCJ4bWFyay1jaXJjbGVcIl0sIFwiZjA1N1wiLCBcIk0yNTYgNTEyQTI1NiAyNTYgMCAxIDAgMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc1IDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3IDQ3IDQ3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ3LTQ3LTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ3LTQ3LTQ3LTQ3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpcIl1cbn07XG5jb25zdCBmYVRpbWVzQ2lyY2xlID0gZmFDaXJjbGVYbWFyaztcbmNvbnN0IGZhWG1hcmtDaXJjbGUgPSBmYUNpcmNsZVhtYXJrO1xuY29uc3QgZmFHaWZ0cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdnaWZ0cycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZjc5Y1wiLCBcIk0yMDAuNiAzMkMyMDUgMTkuNSAxOTguNSA1LjggMTg2IDEuNFMxNTkuOCAzLjUgMTU1LjQgMTZMMTQ0LjcgNDYuMmwtOS45LTI5LjhDMTMwLjYgMy44IDExNy0zIDEwNC40IDEuMlM4NSAxOSA4OS4yIDMxLjZsOC4zIDI1LTI3LjQtMjBjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zcy01LjQgMjUuNyA1LjMgMzMuNUw3MC4yIDk2IDQ4IDk2QzIxLjUgOTYgMCAxMTcuNSAwIDE0NEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNTIuNiAwYy01LjQtOS40LTguNi0yMC4zLTguNi0zMmwwLTIyNGMwLTI5LjkgMjAuNS01NSA0OC4yLTYyYzEuOC0zMSAxNy4xLTU4LjIgNDAuMS03Ni4xQzI3MS43IDEwNC43IDI1Ni45IDk2IDI0MCA5NmwtMjIuMiAwIDI4LjMtMjAuNmMxMC43LTcuOCAxMy4xLTIyLjggNS4zLTMzLjVzLTIyLjgtMTMuMS0zMy41LTUuM0wxOTIuNSA1NS4xIDIwMC42IDMyek0zNjMuNSAxODUuNUwzOTMuMSAyMjQgMzQ0IDIyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRjMC0xMy4xIDEwLjgtMjQgMjQuMi0yNGM3LjYgMCAxNC43IDMuNSAxOS4zIDkuNXpNMjcyIDIwMGMwIDguNCAxLjQgMTYuNSA0LjEgMjRsLTQuMSAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDgwIDE5MiAwIDAtOTYgMzIgMCAwIDk2IDE5MiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQuMSAwYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0YzAtMzkuOS0zMi41LTcyLTcyLjItNzJjLTIyLjQgMC00My42IDEwLjQtNTcuMyAyOC4yTDQzMiAxOTUuOGwtMzAuNS0zOS42Yy0xMy43LTE3LjgtMzUtMjguMi01Ny4zLTI4LjJjLTM5LjcgMC03Mi4yIDMyLjEtNzIuMiA3MnpNMjI0IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNDQgMCAwLTEyOC0xOTIgMCAwIDgwem0yMjQgNDhsMTQ0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC04MC0xOTIgMCAwIDEyOHptOTYtMzEyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OS4xIDAgMjkuNi0zOC41YzQuNi01LjkgMTEuNy05LjUgMTkuMy05LjVjMTMuNCAwIDI0LjIgMTAuOSAyNC4yIDI0elwiXVxufTtcbmNvbnN0IGZhSG90ZWwgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaG90ZWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NzZdLCBcImY1OTRcIiwgXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE3NiAwIDAtNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhsMCA0OEwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJMMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnptOTYgODBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMjQwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xMTIgMTkyYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMzI4IDM4NGMxMy4zIDAgMjQuMy0xMC45IDIxLTIzLjhjLTEwLjYtNDEuNS00OC4yLTcyLjItOTMtNzIuMnMtODIuNSAzMC43LTkzIDcyLjJjLTMuMyAxMi44IDcuOCAyMy44IDIxIDIzLjhsMTQ0IDB6XCJdXG59O1xuY29uc3QgZmFFYXJ0aEFzaWEgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZWFydGgtYXNpYScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyNzc1OSwgXCJnbG9iZS1hc2lhXCJdLCBcImY1N2VcIiwgXCJNNTEuNyAyOTUuMWwzMS43IDYuM2M3LjkgMS42IDE2LS45IDIxLjctNi42bDE1LjQtMTUuNGMxMS42LTExLjYgMzEuMS04LjQgMzguNCA2LjJsOS4zIDE4LjVjNC44IDkuNiAxNC42IDE1LjcgMjUuNCAxNS43YzE1LjIgMCAyNi4xLTE0LjYgMjEuNy0yOS4ybC02LTE5LjljLTQuNi0xNS40IDYuOS0zMC45IDIzLTMwLjlsMi4zIDBjMTMuNCAwIDI1LjktNi43IDMzLjMtMTcuOGwxMC43LTE2LjFjNS42LTguNSA1LjMtMTkuNi0uOC0yNy43bC0xNi4xLTIxLjVjLTEwLjMtMTMuNy0zLjMtMzMuNSAxMy40LTM3LjdsMTctNC4zYzcuNS0xLjkgMTMuNi03LjIgMTYuNS0xNC40bDE2LjQtNDAuOUMzMDMuNCA1Mi4xIDI4MC4yIDQ4IDI1NiA0OEMxNDEuMSA0OCA0OCAxNDEuMSA0OCAyNTZjMCAxMy40IDEuMyAyNi41IDMuNyAzOS4xem00MDcuNyA0LjZjLTMtLjMtNi0uMS05IC44bC0xNS44IDQuNGMtNi43IDEuOS0xMy44LS45LTE3LjUtNi43bC0yLTMuMWMtNi05LjQtMTYuNC0xNS4xLTI3LjYtMTUuMXMtMjEuNiA1LjctMjcuNiAxNS4xbC02LjEgOS41Yy0xLjQgMi4yLTMuNCA0LjEtNS43IDUuM0wzMTIgMzMwLjFjLTE4LjEgMTAuMS0yNS41IDMyLjQtMTcgNTEuM2w1LjUgMTIuNGM4LjYgMTkuMiAzMC43IDI4LjUgNTAuNSAyMS4xbDIuNi0xYzEwLTMuNyAyMS4zLTIuMiAyOS45IDQuMWwxLjUgMS4xYzM3LjItMjkuNSA2NC4xLTcxLjQgNzQuNC0xMTkuNXpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMEEyNTYgMjU2IDAgMSAxIDAgMjU2em0xNDQuNSA5Mi4xYy0yLjEgOC42IDMuMSAxNy4zIDExLjYgMTkuNGwzMiA4YzguNiAyLjEgMTcuMy0zLjEgMTkuNC0xMS42cy0zLjEtMTcuMy0xMS42LTE5LjRsLTMyLThjLTguNi0yLjEtMTcuMyAzLjEtMTkuNCAxMS42em05Mi0yMGMtMi4xIDguNiAzLjEgMTcuMyAxMS42IDE5LjRzMTcuMy0zLjEgMTkuNC0xMS42bDgtMzJjMi4xLTguNi0zLjEtMTcuMy0xMS42LTE5LjRzLTE3LjMgMy4xLTE5LjQgMTEuNmwtOCAzMnpNMzQzLjIgMTEzLjdjLTcuOS00LTE3LjUtLjctMjEuNSA3LjJsLTE2IDMyYy00IDcuOS0uNyAxNy41IDcuMiAyMS41czE3LjUgLjcgMjEuNS03LjJsMTYtMzJjNC03LjkgLjctMTcuNS03LjItMjEuNXpcIl1cbn07XG5jb25zdCBmYUdsb2JlQXNpYSA9IGZhRWFydGhBc2lhO1xuY29uc3QgZmFJZENhcmRDbGlwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2lkLWNhcmQtY2xpcCcsXG4gIGljb246IFs1NzYsIDUxMiwgW1wiaWQtY2FyZC1hbHRcIl0sIFwiZjQ3ZlwiLCBcIk0yNTYgMGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDY0bDEyOCAwIDAgNDhjMCAyNi41IDIxLjUgNDggNDggNDhsOTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTQ4IDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjR6TTE3NiA0MzcuM2MwIDUuOSA0LjggMTAuNyAxMC43IDEwLjdsMjAyLjcgMGM1LjkgMCAxMC43LTQuOCAxMC43LTEwLjdjMC0yOS41LTIzLjktNTMuMy01My4zLTUzLjNsLTExNy4zIDBjLTI5LjUgMC01My4zIDIzLjktNTMuMyA1My4zek0yODggMzUyYTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4elwiXVxufTtcbmNvbnN0IGZhSWRDYXJkQWx0ID0gZmFJZENhcmRDbGlwO1xuY29uc3QgZmFNYWduaWZ5aW5nR2xhc3NQbHVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25pZnlpbmctZ2xhc3MtcGx1cycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2VhcmNoLXBsdXNcIl0sIFwiZjAwZVwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0xODQgMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC02NCA2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwIDAtNjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA2NC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDAgMCA2NHpcIl1cbn07XG5jb25zdCBmYVNlYXJjaFBsdXMgPSBmYU1hZ25pZnlpbmdHbGFzc1BsdXM7XG5jb25zdCBmYVRodW1ic1VwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3RodW1icy11cCcsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODA3NywgNjE1NzVdLCBcImYxNjRcIiwgXCJNMzEzLjQgMzIuOWMyNiA1LjIgNDIuOSAzMC41IDM3LjcgNTYuNWwtMi4zIDExLjRjLTUuMyAyNi43LTE1LjEgNTIuMS0yOC44IDc1LjJsMTQ0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhjMCAxOC41LTEwLjUgMzQuNi0yNS45IDQyLjZDNDk3IDI3NS40IDUwNCAyODguOSA1MDQgMzA0YzAgMjMuNC0xNi44IDQyLjktMzguOSA0Ny4xYzQuNCA3LjMgNi45IDE1LjggNi45IDI0LjljMCAyMS4zLTEzLjkgMzkuNC0zMy4xIDQ1LjZjLjcgMy4zIDEuMSA2LjggMS4xIDEwLjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk3LjUgMGMtMTkgMC0zNy41LTUuNi01My4zLTE2LjFsLTM4LjUtMjUuN0MxNzYgNDIwLjQgMTYwIDM5MC40IDE2MCAzNTguM2wwLTM4LjMgMC00OCAwLTI0LjljMC0yOS4yIDEzLjMtNTYuNyAzNi03NWw3LjQtNS45YzI2LjUtMjEuMiA0NC42LTUxIDUxLjItODQuMmwyLjMtMTEuNGM1LjItMjYgMzAuNS00Mi45IDU2LjUtMzcuN3pNMzIgMTkybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbmNvbnN0IGZhVXNlckNsb2NrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItY2xvY2snLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImY0ZmRcIiwgXCJNMjI0IDBhMTI4IDEyOCAwIDEgMSAwIDI1NkExMjggMTI4IDAgMSAxIDIyNCAwek0xNzguMyAzMDRsOTEuNCAwYzIwLjYgMCA0MC40IDMuNSA1OC44IDkuOUMzMjMgMzMxIDMyMCAzNDkuMSAzMjAgMzY4YzAgNTkuNSAyOS41IDExMi4xIDc0LjggMTQ0TDI5LjcgNTEyQzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM0MwIDM4My44IDc5LjggMzA0IDE3OC4zIDMwNHpNMzUyIDM2OGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNDQtODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2elwiXVxufTtcbmNvbnN0IGZhSGFuZERvdHMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZC1kb3RzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJhbGxlcmdpZXNcIl0sIFwiZjQ2MVwiLCBcIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNzJjMCAxLjUgMCAzLjEgLjEgNC42TDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNHMtMTQuNiA0MS4zIDEuNCA1Ni42TDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjIgMGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmwwLTIwOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTIwOHpNMjQwIDMzNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwem04MCAxNmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6bTQ4LTE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6bS0xNiA4MGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6TTI0MCA0MzJhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHptLTQ4LTQ4YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpcIl1cbn07XG5jb25zdCBmYUFsbGVyZ2llcyA9IGZhSGFuZERvdHM7XG5jb25zdCBmYUZpbGVJbnZvaWNlID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2ZpbGUtaW52b2ljZScsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZjU3MFwiLCBcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI4OC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMjI0IDAgNjQgMHpNMjU2IDBsMCAxMjggMTI4IDBMMjU2IDB6TTgwIDY0bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMODAgOTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMTYgOTZsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMzJsMCA2NCAxOTIgMCAwLTY0TDk2IDI1NnpNMjQwIDQxNmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXVxufTtcbmNvbnN0IGZhV2luZG93TWluaW1pemUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnd2luZG93LW1pbmltaXplJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDY5XSwgXCJmMmQxXCIsIFwiTTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6XCJdXG59O1xuY29uc3QgZmFNdWdTYXVjZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbXVnLXNhdWNlcicsXG4gIGljb246IFs2NDAsIDUxMiwgW1wiY29mZmVlXCJdLCBcImYwZjRcIiwgXCJNOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIwIDAgNjQgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHMtNTcuMyAxMjgtMTI4IDEyOGwtMzIgMGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMGMtNTMgMC05Ni00My05Ni05Nkw5NiA2NHpNNDgwIDIyNGwzMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0bC0zMiAwIDAgMTI4ek0zMiA0MTZsNTEyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXVxufTtcbmNvbnN0IGZhQ29mZmVlID0gZmFNdWdTYXVjZXI7XG5jb25zdCBmYUJydXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JydXNoJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbXSwgXCJmNTVkXCIsIFwiTTE2Mi40IDZjLTEuNS0zLjYtNS02LTguOS02bC0xOSAwYy0zLjkgMC03LjUgMi40LTguOSA2TDEwNC45IDU3LjdjLTMuMiA4LTE0LjYgOC0xNy44IDBMNjYuNCA2Yy0xLjUtMy42LTUtNi04LjktNkw0OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDIyNGwwIDIyLjRMMCAyNTZsOS42IDAgMzY0LjggMCA5LjYgMCAwLTkuNiAwLTIyLjQgMC0xNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMjMwLjUgMGMtMy45IDAtNy41IDIuNC04LjkgNkwyMDAuOSA1Ny43Yy0zLjIgOC0xNC42IDgtMTcuOCAwTDE2Mi40IDZ6TTAgMjg4bDAgMzJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNjQgMCAwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRsMC02NCA2NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzJMMCAyODh6TTE5MiA0MzJhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyelwiXVxufTtcbmNvbnN0IGZhTWFzayA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYXNrJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJmNmZhXCIsIFwiTTI4OCA2NEM2NCA2NCAwIDE2MCAwIDI3MlM4MCA0NDggMTc2IDQ0OGw4LjQgMGMyNC4yIDAgNDYuNC0xMy43IDU3LjItMzUuNGwyMy4yLTQ2LjNjNC40LTguOCAxMy4zLTE0LjMgMjMuMi0xNC4zczE4LjggNS41IDIzLjIgMTQuM2wyMy4yIDQ2LjNjMTAuOCAyMS43IDMzIDM1LjQgNTcuMiAzNS40bDguNCAwYzk2IDAgMTc2LTY0IDE3Ni0xNzZzLTY0LTIwOC0yODgtMjA4ek05NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDBBNjQgNjQgMCAxIDEgOTYgMjU2em0zMjAtNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6XCJdXG59O1xuY29uc3QgZmFNYWduaWZ5aW5nR2xhc3NNaW51cyA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYWduaWZ5aW5nLWdsYXNzLW1pbnVzJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJzZWFyY2gtbWludXNcIl0sIFwiZjAxMFwiLCBcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0xMzYgMTg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHpcIl1cbn07XG5jb25zdCBmYVNlYXJjaE1pbnVzID0gZmFNYWduaWZ5aW5nR2xhc3NNaW51cztcbmNvbnN0IGZhUnVsZXJWZXJ0aWNhbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdydWxlci12ZXJ0aWNhbCcsXG4gIGljb246IFsyNTYsIDUxMiwgW10sIFwiZjU0OFwiLCBcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEwyMDggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4LTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAgMCAwIDY0LTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAgMCAwIDY0LTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAgMCAwIDY0LTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAgMCAwIDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA0OHpcIl1cbn07XG5jb25zdCBmYVVzZXJMYXJnZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2VyLWxhcmdlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXCJ1c2VyLWFsdFwiXSwgXCJmNDA2XCIsIFwiTTI1NiAyODhBMTQ0IDE0NCAwIDEgMCAyNTYgMGExNDQgMTQ0IDAgMSAwIDAgMjg4em0tOTQuNyAzMkM3Mi4yIDMyMCAwIDM5Mi4yIDAgNDgxLjNjMCAxNyAxMy44IDMwLjcgMzAuNyAzMC43bDQ1MC42IDBjMTcgMCAzMC43LTEzLjggMzAuNy0zMC43QzUxMiAzOTIuMiA0MzkuOCAzMjAgMzUwLjcgMzIwbC0xODkuNCAwelwiXVxufTtcbmNvbnN0IGZhVXNlckFsdCA9IGZhVXNlckxhcmdlO1xuY29uc3QgZmFUcmFpblRyYW0gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHJhaW4tdHJhbScsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyODY1MF0sIFwiZTViNFwiLCBcIk04Ni44IDQ4Yy0xMi4yIDAtMjMuNiA1LjUtMzEuMiAxNUw0Mi43IDc5QzM0LjUgODkuMyAxOS40IDkxIDkgODIuN1MtMyA1OS40IDUuMyA0OUwxOCAzM0MzNC43IDEyLjIgNjAgMCA4Ni44IDBMMzYxLjIgMGMyNi43IDAgNTIgMTIuMiA2OC43IDMzbDEyLjggMTZjOC4zIDEwLjQgNi42IDI1LjUtMy44IDMzLjdzLTI1LjUgNi42LTMzLjctMy43TDM5Mi41IDYzYy03LjYtOS41LTE5LjEtMTUtMzEuMi0xNUwyNDggNDhsMCA0OCA0MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAxNjBjMCAzMC42LTE0LjMgNTcuOC0zNi42IDc1LjRsNjUuNSA2NS41YzcuMSA3LjEgMi4xIDE5LjEtNy45IDE5LjFsLTM5LjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMjg4IDQ0OGwtMTI4IDAtNTQuNiA1NC42Yy02IDYtMTQuMSA5LjQtMjIuNiA5LjRMNDMgNTEyYy0xMCAwLTE1LTEyLjEtNy45LTE5LjFsNjUuNS02NS41Qzc4LjMgNDA5LjggNjQgMzgyLjYgNjQgMzUybDAtMTYwYzAtNTMgNDMtOTYgOTYtOTZsNDAgMCAwLTQ4TDg2LjggNDh6TTE2MCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDB6bTMyIDE5MmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6XCJdXG59O1xuY29uc3QgZmFVc2VyTnVyc2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndXNlci1udXJzZScsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjgyZlwiLCBcIk05NiAxMjhsMC01Ny44YzAtMTMuMyA4LjMtMjUuMyAyMC44LTMwbDk2LTM2YzcuMi0yLjcgMTUuMi0yLjcgMjIuNSAwbDk2IDM2YzEyLjUgNC43IDIwLjggMTYuNiAyMC44IDMwbDAgNTcuOC0uMyAwYy4yIDIuNiAuMyA1LjMgLjMgOGwwIDQwYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4bDAtNDBjMC0yLjcgLjEtNS40IC4zLThsLS4zIDB6bTQ4IDQ4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBsMC0xNi0xNjAgMCAwIDE2ek0xMTEuOSAzMjcuN2MxMC41LTMuNCAyMS44IC40IDI5LjQgOC41bDcxIDc1LjVjNi4zIDYuNyAxNyA2LjcgMjMuMyAwbDcxLTc1LjVjNy42LTguMSAxOC45LTExLjkgMjkuNC04LjVDNDAxIDM0OC42IDQ0OCA0MDkuNCA0NDggNDgxLjNjMCAxNy0xMy44IDMwLjctMzAuNyAzMC43TDMwLjcgNTEyQzEzLjggNTEyIDAgNDk4LjIgMCA0ODEuM2MwLTcxLjkgNDctMTMyLjcgMTExLjktMTUzLjZ6TTIwOCA0OGwwIDE2LTE2IDBjLTQuNCAwLTggMy42LTggOGwwIDE2YzAgNC40IDMuNiA4IDggOGwxNiAwIDAgMTZjMCA0LjQgMy42IDggOCA4bDE2IDBjNC40IDAgOC0zLjYgOC04bDAtMTYgMTYgMGM0LjQgMCA4LTMuNiA4LThsMC0xNmMwLTQuNC0zLjYtOC04LThsLTE2IDAgMC0xNmMwLTQuNC0zLjYtOC04LThsLTE2IDBjLTQuNCAwLTggMy42LTggOHpcIl1cbn07XG5jb25zdCBmYVN5cmluZ2UgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnc3lyaW5nZScsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODEzN10sIFwiZjQ4ZVwiLCBcIk00NDEgN2wzMiAzMiAzMiAzMmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0xNS0xNUw0MTcuOSAxMjhsNTUgNTVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNzItNzJMMjk1IDczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTUgNTVMNDIyLjEgNTYgNDA3IDQxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDB6TTIxMC4zIDE1NS43bDYxLjEtNjEuMWMuMyAuMyAuNiAuNyAxIDFsMTYgMTYgNTYgNTYgNTYgNTYgMTYgMTZjLjMgLjMgLjYgLjYgMSAxbC0xOTEgMTkxYy0xMC41IDEwLjUtMjQuNyAxNi40LTM5LjYgMTYuNGwtODguOCAwTDQxIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1Ny01NyAwLTg4LjhjMC0xNC45IDUuOS0yOS4xIDE2LjQtMzkuNmw0My4zLTQzLjMgNTcgNTdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ny01NyA0MS40LTQxLjQgNTcgNTdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ny01N3pcIl1cbn07XG5jb25zdCBmYUNsb3VkU3VuID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2Nsb3VkLXN1bicsXG4gIGljb246IFs2NDAsIDUxMiwgWzk5MjVdLCBcImY2YzRcIiwgXCJNMjk0LjIgMS4yYzUuMSAyLjEgOC43IDYuNyA5LjYgMTIuMWwxNC4xIDg0LjcgODQuNyAxNC4xYzUuNCAuOSAxMCA0LjUgMTIuMSA5LjZzMS41IDEwLjktMS42IDE1LjRsLTM4LjUgNTVjLTIuMi0uMS00LjQtLjItNi43LS4yYy0yMy4zIDAtNDUuMSA2LjItNjQgMTcuMWwwLTEuMWMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnM0MyA5NiA5NiA5NmM4LjEgMCAxNS45LTEgMjMuNC0yLjljLTM2LjYgMTguMS02My4zIDUzLjEtNjkuOCA5NC45bC0yNC40IDE3Yy00LjUgMy4yLTEwLjMgMy44LTE1LjQgMS42cy04LjctNi43LTkuNi0xMi4xTDk4LjEgMzE3LjkgMTMuNCAzMDMuOGMtNS40LS45LTEwLTQuNS0xMi4xLTkuNnMtMS41LTEwLjkgMS42LTE1LjRMNTIuNSAyMDggMi45IDEzNy4yYy0zLjItNC41LTMuOC0xMC4zLTEuNi0xNS40czYuNy04LjcgMTIuMS05LjZMOTguMSA5OC4xbDE0LjEtODQuN2MuOS01LjQgNC41LTEwIDkuNi0xMi4xczEwLjktMS41IDE1LjQgMS42TDIwOCA1Mi41IDI3OC44IDIuOWM0LjUtMy4yIDEwLjMtMy44IDE1LjQtMS42ek0xNDQgMjA4YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNjM5LjkgNDMxLjljMCA0NC4yLTM1LjggODAtODAgODBsLTI3MS45IDBjLTUzIDAtOTYtNDMtOTYtOTZjMC00Ny42IDM0LjYtODcgODAtOTQuNmwwLTEuM2MwLTUzIDQzLTk2IDk2LTk2YzM0LjkgMCA2NS40IDE4LjYgODIuMiA0Ni40YzEzLTkuMSAyOC44LTE0LjQgNDUuOC0xNC40YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgNS45LS42IDExLjctMS45IDE3LjJjMzcuNCA2LjcgNjUuOCAzOS40IDY1LjggNzguN3pcIl1cbn07XG5jb25zdCBmYVN0b3B3YXRjaDIwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0b3B3YXRjaC0yMCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZTA2ZlwiLCBcIk0xNzYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwIDAgMzQuNEM5Mi4zIDExMy44IDE2IDIwMCAxNiAzMDRjMCAxMTQuOSA5My4xIDIwOCAyMDggMjA4czIwOC05My4xIDIwOC0yMDhjMC00MS44LTEyLjMtODAuNy0zMy41LTExMy4ybDI0LjEtMjQuMWMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwzNTUuNyAxNDNjLTI4LjEtMjMtNjIuMi0zOC44LTk5LjctNDQuNkwyNTYgNjRsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxNzYgMHpNMjg4IDIwNGMyOC43IDAgNTIgMjMuMyA1MiA1MmwwIDk2YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtOTZjMC0yOC43IDIzLjMtNTIgNTItNTJ6bS0xMiA1MmwwIDk2YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC05NmMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMnpNMTU5LjUgMjQ0Yy01LjQgMC0xMC4yIDMuNS0xMS45IDguNmwtLjYgMS43Yy0zLjUgMTAuNS0xNC44IDE2LjEtMjUuMyAxMi42cy0xNi4xLTE0LjgtMTIuNi0yNS4zbC42LTEuN2M3LjItMjEuNSAyNy4yLTM1LjkgNDkuOC0zNS45YzI5IDAgNTIuNSAyMy41IDUyLjUgNTIuNWwwIDIuMmMwIDEzLjQtNC45IDI2LjQtMTMuOCAzNi40bC0zOSA0My45Yy02LjIgNy0xMCAxNS43LTEwLjkgMjQuOWw0My44IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC02NCAwYy0xMSAwLTIwLTktMjAtMjBsMC0xNS43YzAtMjAuNiA3LjUtNDAuNCAyMS4yLTU1LjhsMzktNDMuOWMyLjQtMi43IDMuNy02LjIgMy43LTkuOGwwLTIuMmMwLTYuOS01LjYtMTIuNS0xMi41LTEyLjV6XCJdXG59O1xuY29uc3QgZmFTcXVhcmVGdWxsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1mdWxsJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4OTk3LCAxMjg5OTgsIDEyODk5OSwgMTI5MDAwLCAxMjkwMDEsIDEyOTAwMiwgMTI5MDAzLCAxMTAzNSwgMTEwMzZdLCBcImY0NWNcIiwgXCJNMCAwSDUxMlY1MTJIMFYwelwiXVxufTtcbmNvbnN0IGZhTWFnbmV0ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hZ25ldCcsXG4gIGljb246IFs0NDgsIDUxMiwgWzEyOTUyMl0sIFwiZjA3NlwiLCBcIk0wIDE2MGwwIDk2QzAgMzc5LjcgMTAwLjMgNDgwIDIyNCA0ODBzMjI0LTEwMC4zIDIyNC0yMjRsMC05Ni0xMjggMCAwIDk2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bDAtOTZMMCAxNjB6bTAtMzJsMTI4IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0bDAgNjR6bTMyMCAwbDEyOCAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjR6XCJdXG59O1xuY29uc3QgZmFKYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnamFyJyxcbiAgaWNvbjogWzMyMCwgNTEyLCBbXSwgXCJlNTE2XCIsIFwiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNjRDNDYuMyA2NCAzMiA0OS43IDMyIDMyek0wIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTYwem05NiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDIyNHpcIl1cbn07XG5jb25zdCBmYU5vdGVTdGlja3kgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnbm90ZS1zdGlja3knLFxuICBpY29uOiBbNDQ4LCA1MTIsIFs2MjAyNiwgXCJzdGlja3ktbm90ZVwiXSwgXCJmMjQ5XCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDAgMC0xMTJjMC0yNi41IDIxLjUtNDggNDgtNDhsMTEyIDAgMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTQ0OCAzNTJsLTQ1LjMgMEwzMzYgMzUyYy04LjggMC0xNiA3LjItMTYgMTZsMCA2Ni43IDAgNDUuMyAzMi0zMiA2NC02NCAzMi0zMnpcIl1cbn07XG5jb25zdCBmYVN0aWNreU5vdGUgPSBmYU5vdGVTdGlja3k7XG5jb25zdCBmYUJ1Z1NsYXNoID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2J1Zy1zbGFzaCcsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTQ5MFwiLCBcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ3Ny40IDM0OC45YzEuNy05LjQgMi42LTE5IDIuNi0yOC45bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0LjMgMGMtMS4xLTE0LjEtNS0yNy41LTExLjEtMzkuNWMuNy0uNiAxLjQtMS4yIDIuMS0xLjlsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0uNyAuNy0xLjMgMS40LTEuOSAyLjFDNDA5LjIgMTY0LjEgMzkzLjEgMTYwIDM3NiAxNjBsLTExMiAwYy04LjMgMC0xNi4zIDEtMjQgMi44TDM4LjggNS4xek0zMjAgMGMtNTMgMC05NiA0My05NiA5NmwwIDMuNmMwIDE1LjcgMTIuNyAyOC40IDI4LjQgMjguNGwxMzUuMSAwYzE1LjcgMCAyOC40LTEyLjcgMjguNC0yOC40bDAtMy42YzAtNTMtNDMtOTYtOTYtOTZ6TTE2MC4zIDI1Nkw5NiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMwIDI0LjYgNS41IDQ3LjggMTUuNCA2OC42Yy0yLjIgMS4zLTQuMiAyLjktNiA0LjhsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDYzLjEtNjMuMWMyNC41IDIxLjggNTUuOCAzNi4yIDkwLjMgMzkuNmwwLTE0My43TDE2Ni43IDIyNy4zYy0zLjQgOS01LjYgMTguNy02LjQgMjguN3pNMzM2IDQ3OS4yYzM2LjYtMy42IDY5LjctMTkuNiA5NC44LTQzLjhMMzM2IDM2MC43bDAgMTE4LjV6XCJdXG59O1xuY29uc3QgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvdy11cC1mcm9tLXdhdGVyLXB1bXAnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU0YjZcIiwgXCJNMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhsMCAyMDgtMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDggMiAxNS42IDUuNCAyMi4yYzMuOC0xLjcgNy44LTMuMSAxMi00LjFjMTMuMS0zLjEgMjYuNy05LjggMzcuMy0xOC42YzIyLjItMTguNyA1NC4zLTIwLjEgNzguMS0zLjRjMTggMTIuNCA0MC4xIDIwLjMgNTkuMiAyMC4zYzIxLjEgMCA0Mi04LjUgNTkuMi0yMC4zYzIyLjEtMTUuNSA1MS42LTE1LjUgNzMuNyAwYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzIzLjgtMTYuNyA1NS44LTE1LjMgNzguMSAzLjRjMTAuNiA4LjggMjQuMiAxNS42IDM3LjMgMTguNmM0LjIgMSA4LjIgMi40IDEyIDQuMUM1NzQgNDE1LjYgNTc2IDQwOCA1NzYgNDAwbDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMC0xNDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw0MTYgMTA5LjMgNDE2IDI1NmwtMTI4IDAgMC0yMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTEyIDB6TTMwNi41IDQyMS45Yy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwQzI0NyA0MzcuNCAyMTkuNSA0NDggMTkyIDQ0OGMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFjMCAwIDAgMCAwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjUgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43YzAgMCAwIDAgMCAwQzQzOS40IDQzNy4yIDQxMC45IDQ0OCAzODQgNDQ4Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjF6XCJdXG59O1xuY29uc3QgZmFCb25lID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2JvbmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFsxMjk0NjBdLCBcImY1ZDdcIiwgXCJNMTUzLjcgMTQ0LjhjNi45IDE2LjMgMjAuNiAzMS4yIDM4LjMgMzEuMmwxOTIgMGMxNy43IDAgMzEuNC0xNC45IDM4LjMtMzEuMkM0MzQuNCAxMTYuMSA0NjIuOSA5NiA0OTYgOTZjNDQuMiAwIDgwIDM1LjggODAgODBjMCAzMC40LTE3IDU2LjktNDIgNzAuNGMtMy42IDEuOS02IDUuNS02IDkuNnMyLjQgNy43IDYgOS42YzI1IDEzLjUgNDIgNDAgNDIgNzAuNGMwIDQ0LjItMzUuOCA4MC04MCA4MGMtMzMuMSAwLTYxLjYtMjAuMS03My43LTQ4LjhDNDE1LjQgMzUwLjkgNDAxLjcgMzM2IDM4NCAzMzZsLTE5MiAwYy0xNy43IDAtMzEuNCAxNC45LTM4LjMgMzEuMkMxNDEuNiAzOTUuOSAxMTMuMSA0MTYgODAgNDE2Yy00NC4yIDAtODAtMzUuOC04MC04MGMwLTMwLjQgMTctNTYuOSA0Mi03MC40YzMuNi0xLjkgNi01LjUgNi05LjZzLTIuNC03LjctNi05LjZDMTcgMjMyLjkgMCAyMDYuNCAwIDE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MGMzMy4xIDAgNjEuNiAyMC4xIDczLjcgNDguOHpcIl1cbn07XG5jb25zdCBmYVRhYmxlQ2VsbHNSb3dVbmxvY2sgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGFibGUtY2VsbHMtcm93LXVubG9jaycsXG4gIGljb246IFs2NDAsIDUxMiwgW10sIFwiZTY5MVwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjUuMWMtMzcuOCA1LjQtNjkuNCAyOS42LTg1LjIgNjIuOUwzNjAgMjI0bDAgNjQgNTYgMCAwIDguNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNGwtMjQgMCAwIDY0IDI0IDAgMCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTY0IDIyNGwwIDY0IDg4IDAgMC02NC04OCAwem0yMzIgMGwtODggMCAwIDY0IDg4IDAgMC02NHpNMTUyIDM1MmwtODggMCAwIDY0IDg4IDAgMC02NHptNTYgMGwwIDY0IDg4IDAgMC02NC04OCAwem0yODgtODBsMCA0OCAzMiAwIDMyIDAgNDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtNDhjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwtNDggMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnpcIl1cbn07XG5jb25zdCBmYVVzZXJJbmp1cmVkID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3VzZXItaW5qdXJlZCcsXG4gIGljb246IFs0NDgsIDUxMiwgW10sIFwiZjcyOFwiLCBcIk0yNDAgODBsMTAyLjcgMGMtNy45LTE5LjUtMjAuNC0zNi41LTM2LjItNDkuOUwyNDAgODB6bTM3LjctNjguMkMyNjEuMyA0LjIgMjQzLjIgMCAyMjQgMGMtNTMuNyAwLTk5LjcgMzMuMS0xMTguNyA4MGw4MS40IDAgOTEtNjguMnpNMjI0IDI1NmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGMwLTUuNC0uMy0xMC44LTEtMTZMOTcgMTEyYy0uNyA1LjItMSAxMC42LTEgMTZjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjh6TTEyNCAzMTIuNGMtOS43IDMuMS0xOS4xIDctMjggMTEuN0w5NiA1MTJsMTQ3LjcgMEwxODEuNSA0MDguMiAxMjQgMzEyLjR6bTMzLTcuMkwyMDQuMyAzODRsNjcuNyAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgMTgtNiAzNC42LTE2IDQ4bDgyLjMgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuN0M0NDggMzgzLjggMzY4LjIgMzA0IDI2OS43IDMwNGwtOTEuNCAwYy03LjIgMC0xNC4zIC40LTIxLjMgMS4zek0wIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJMNjQgNTEybDAtMTY2LjZDMjQuOSAzNzguMSAwIDQyNy4zIDAgNDgyLjN6TTMyMCA0NjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4LjUgMCA1Ny4xIDk1LjJDMzAzIDUwNy4yIDMyMCA0ODcuNiAzMjAgNDY0elwiXVxufTtcbmNvbnN0IGZhRmFjZVNhZFRlYXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZmFjZS1zYWQtdGVhcicsXG4gIGljb246IFs1MTIsIDUxMiwgWzEyODU0NiwgXCJzYWQtdGVhclwiXSwgXCJmNWI0XCIsIFwiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDBBMjU2IDI1NiAwIDEgMCAwIDI1NnptMjQwIDgwYzAtOC44IDcuMi0xNiAxNi0xNmM0NSAwIDg1LjYgMjAuNSAxMTUuNyA1My4xYzYgNi41IDUuNiAxNi42LS45IDIyLjZzLTE2LjYgNS42LTIyLjYtLjljLTI1LTI3LjEtNTcuNC00Mi45LTkyLjMtNDIuOWMtOC44IDAtMTYtNy4yLTE2LTE2em0tODAgODBjLTI2LjUgMC00OC0yMS00OC00N2MwLTIwIDI4LjYtNjAuNCA0MS42LTc3LjdjMy4yLTQuNCA5LjYtNC40IDEyLjggMEMxNzkuNiAzMDguNiAyMDggMzQ5IDIwOCAzNjljMCAyNi0yMS41IDQ3LTQ4IDQ3ek0zNjcuNiAyMDhhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6XCJdXG59O1xuY29uc3QgZmFTYWRUZWFyID0gZmFGYWNlU2FkVGVhcjtcbmNvbnN0IGZhUGxhbmUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGxhbmUnLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImYwNzJcIiwgXCJNNDgyLjMgMTkyYzM0LjIgMCA5My43IDI5IDkzLjcgNjRjMCAzNi01OS41IDY0LTkzLjcgNjRsLTExNi42IDBMMjY1LjIgNDk1LjljLTUuNyAxMC0xNi4zIDE2LjEtMjcuOCAxNi4xbC01Ni4yIDBjLTEwLjYgMC0xOC4zLTEwLjItMTUuNC0yMC40bDQ5LTE3MS42TDExMiAzMjAgNjguOCAzNzcuNmMtMyA0LTcuOCA2LjQtMTIuOCA2LjRsLTQyIDBjLTcuOCAwLTE0LTYuMy0xNC0xNGMwLTEuMyAuMi0yLjYgLjUtMy45TDMyIDI1NiAuNSAxNDUuOWMtLjQtMS4zLS41LTIuNi0uNS0zLjljMC03LjggNi4zLTE0IDE0LTE0bDQyIDBjNSAwIDkuOCAyLjQgMTIuOCA2LjRMMTEyIDE5MmwxMDIuOSAwLTQ5LTE3MS42QzE2Mi45IDEwLjIgMTcwLjYgMCAxODEuMiAwbDU2LjIgMGMxMS41IDAgMjIuMSA2LjIgMjcuOCAxNi4xTDM2NS43IDE5MmwxMTYuNiAwelwiXVxufTtcbmNvbnN0IGZhVGVudEFycm93c0Rvd24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndGVudC1hcnJvd3MtZG93bicsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU4MVwiLCBcIk0yMDkuOCAxMTEuOWMtOC45LTkuOS0yNC0xMC43LTMzLjktMS44bC0zOS45IDM2TDEzNiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM4OCAxMC43IDg4IDI0bDAgMTIyLjEtMzkuOS0zNmMtOS45LTguOS0yNS04LjEtMzMuOSAxLjhzLTguMSAyNSAxLjggMzMuOWw4MCA3MmM5LjEgOC4yIDIzIDguMiAzMi4xIDBsODAtNzJjOS45LTguOSAxMC43LTI0IDEuOC0zMy45em0zNTIgMGMtOC45LTkuOS0yNC0xMC43LTMzLjktMS44bC0zOS45IDM2TDQ4OCAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDEyMi4xLTM5LjktMzZjLTkuOS04LjktMjUtOC4xLTMzLjkgMS44cy04LjEgMjUgMS44IDMzLjlsODAgNzJjOS4xIDguMiAyMyA4LjIgMzIuMSAwbDgwLTcyYzkuOS04LjkgMTAuNy0yNCAxLjgtMzMuOXpNMzA3LjQgMTY2LjVjLTExLjUtOC43LTI3LjMtOC43LTM4LjggMGwtMTY4IDEyOGMtNi42IDUtMTEgMTIuNS0xMi4zIDIwLjdsLTI0IDE2MGMtMS40IDkuMiAxLjMgMTguNiA3LjQgMjUuNlM4Ni43IDUxMiA5NiA1MTJsMTQ0IDAgMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTExOC4xYzAtNS41IDQuNC05LjkgOS45LTkuOWMzLjcgMCA3LjIgMi4xIDguOCA1LjVsNjguNCAxMzYuOGM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43bDYwLjIgMCAxNiAwYzkuMyAwIDE4LjItNC4xIDI0LjItMTEuMXM4LjgtMTYuNCA3LjQtMjUuNmwtMjQtMTYwYy0xLjItOC4yLTUuNi0xNS43LTEyLjMtMjAuN2wtMTY4LTEyOHpcIl1cbn07XG5jb25zdCBmYUV4Y2xhbWF0aW9uID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2V4Y2xhbWF0aW9uJyxcbiAgaWNvbjogWzEyOCwgNTEyLCBbMTAwNjksIDEwMDcxLCA2MTczOF0sIFwiMjFcIiwgXCJNOTYgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMzIgNDYuMyAzMiA2NGwwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDk2IDY0ek02NCA0ODBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwelwiXVxufTtcbmNvbnN0IGZhQXJyb3dzU3BpbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdhcnJvd3Mtc3BpbicsXG4gIGljb246IFs1MTIsIDUxMiwgW10sIFwiZTRiYlwiLCBcIk0yNTYgOTZjMzguNCAwIDczLjcgMTMuNSAxMDEuMyAzNi4xbC0zMi42IDMyLjZjLTQuNiA0LjYtNS45IDExLjUtMy41IDE3LjRzOC4zIDkuOSAxNC44IDkuOWwxMTIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTJjMC02LjUtMy45LTEyLjMtOS45LTE0LjhzLTEyLjktMS4xLTE3LjQgMy41bC0zNCAzNEMzNjMuNCA1Mi42IDMxMi4xIDMyIDI1NiAzMmMtMTAuOSAwLTIxLjUgLjgtMzIgMi4zbDAgNjQuOWMxMC4zLTIuMSAyMS0zLjIgMzItMy4yek0xMzIuMSAxNTQuN2wzMi42IDMyLjZjNC42IDQuNiAxMS41IDUuOSAxNy40IDMuNXM5LjktOC4zIDkuOS0xNC44bDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA0OGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDM0IDM0QzUyLjYgMTQ4LjYgMzIgMTk5LjkgMzIgMjU2YzAgMTAuOSAuOCAyMS41IDIuMyAzMmw2NC45IDBjLTIuMS0xMC4zLTMuMi0yMS0zLjItMzJjMC0zOC40IDEzLjUtNzMuNyAzNi4xLTEwMS4zek00NzcuNyAyMjRsLTY0LjkgMGMyLjEgMTAuMyAzLjIgMjEgMy4yIDMyYzAgMzguNC0xMy41IDczLjctMzYuMSAxMDEuM2wtMzIuNi0zMi42Yy00LjYtNC42LTExLjUtNS45LTE3LjQtMy41cy05LjkgOC4zLTkuOSAxNC44bDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMTIgMGM2LjUgMCAxMi4zLTMuOSAxNC44LTkuOXMxLjEtMTIuOS0zLjUtMTcuNGwtMzQtMzRDNDU5LjQgMzYzLjQgNDgwIDMxMi4xIDQ4MCAyNTZjMC0xMC45LS44LTIxLjUtMi4zLTMyek0yNTYgNDE2Yy0zOC40IDAtNzMuNy0xMy41LTEwMS4zLTM2LjFsMzIuNi0zMi42YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRzLTguMy05LjktMTQuOC05LjlMNjQgMzIwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTJjMCA2LjUgMy45IDEyLjMgOS45IDE0LjhzMTIuOSAxLjEgMTcuNC0zLjVsMzQtMzRDMTQ4LjYgNDU5LjQgMTk5LjkgNDgwIDI1NiA0ODBjMTAuOSAwIDIxLjUtLjggMzItMi4zbDAtNjQuOWMtMTAuMyAyLjEtMjEgMy4yLTMyIDMuMnpcIl1cbn07XG5jb25zdCBmYVByaW50ID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3ByaW50JyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDI0LCAxMjg0MzgsIDkxMTNdLCBcImYwMmZcIiwgXCJNMTI4IDBDOTIuNyAwIDY0IDI4LjcgNjQgNjRsMCA5NiA2NCAwIDAtOTYgMjI2LjcgMEwzODQgOTMuM2wwIDY2LjcgNjQgMCAwLTY2LjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNDAwIDE4LjdDMzg4IDYuNyAzNzEuNyAwIDM1NC43IDBMMTI4IDB6TTM4NCAzNTJsMCAzMiAwIDY0LTI1NiAwIDAtNjQgMC0xNiAwLTE2IDI1NiAwem02NCAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMTkyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0ek00MzIgMjQ4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpcIl1cbn07XG5jb25zdCBmYVR1cmtpc2hMaXJhU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0dXJraXNoLWxpcmEtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW1widHJ5XCIsIFwidHVya2lzaC1saXJhXCJdLCBcImUyYmJcIiwgXCJNOTYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzNS4zTDI0Ny4yIDY1LjJjMTctNC45IDM0LjcgNSAzOS42IDIycy01IDM0LjctMjIgMzkuNkwxMjggMTY1LjlsMCAyOS40IDExOS4yLTM0LjFjMTctNC45IDM0LjcgNSAzOS42IDIycy01IDM0LjctMjIgMzkuNkwxMjggMjYxLjkgMTI4IDQxNmw2My44IDBjNjguMiAwIDEyNC40LTUzLjUgMTI3LjgtMTIxLjZsLjQtOGMuOS0xNy43IDE1LjktMzEuMiAzMy42LTMwLjRzMzEuMiAxNS45IDMwLjQgMzMuNmwtLjQgOEMzNzguNSAzOTkuOCAyOTQuMSA0ODAgMTkxLjggNDgwTDk2IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNjcuOS0yMy4yIDYuNmMtMTcgNC45LTM0LjctNS0zOS42LTIyczUtMzQuNyAyMi0zOS42TDY0IDIxMy42bDAtMjkuNC0yMy4yIDYuNmMtMTcgNC45LTM0LjctNS0zOS42LTIyczUtMzQuNyAyMi0zOS42TDY0IDExNy42IDY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbmNvbnN0IGZhVHJ5ID0gZmFUdXJraXNoTGlyYVNpZ247XG5jb25zdCBmYVR1cmtpc2hMaXJhID0gZmFUdXJraXNoTGlyYVNpZ247XG5jb25zdCBmYURvbGxhclNpZ24gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnZG9sbGFyLXNpZ24nLFxuICBpY29uOiBbMzIwLCA1MTIsIFsxMjgxNzgsIDYxNzgxLCBcImRvbGxhclwiLCBcInVzZFwiXSwgXCIyNFwiLCBcIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDM1LjdjMS42IC4yIDMuMSAuNCA0LjcgLjdjLjQgLjEgLjcgLjEgMS4xIC4ybDQ4IDguOGMxNy40IDMuMiAyOC45IDE5LjkgMjUuNyAzNy4ycy0xOS45IDI4LjktMzcuMiAyNS43bC00Ny41LTguN2MtMzEuMy00LjYtNTguOS0xLjUtNzguMyA2LjJzLTI3LjIgMTguMy0yOSAyOC4xYy0yIDEwLjctLjUgMTYuNyAxLjIgMjAuNGMxLjggMy45IDUuNSA4LjMgMTIuOCAxMy4yYzE2LjMgMTAuNyA0MS4zIDE3LjcgNzMuNyAyNi4zbDIuOSAuOGMyOC42IDcuNiA2My42IDE2LjggODkuNiAzMy44YzE0LjIgOS4zIDI3LjYgMjEuOSAzNS45IDM5LjVjOC41IDE3LjkgMTAuMyAzNy45IDYuNCA1OS4yYy02LjkgMzgtMzMuMSA2My40LTY1LjYgNzYuN2MtMTMuNyA1LjYtMjguNiA5LjItNDQuNCAxMWwwIDMzLjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNC45Yy0uNC0uMS0uOS0uMS0xLjMtLjJsLS4yIDBzMCAwIDAgMGMtMjQuNC0zLjgtNjQuNS0xNC4zLTkxLjUtMjYuM2MtMTYuMS03LjItMjMuNC0yNi4xLTE2LjItNDIuMnMyNi4xLTIzLjQgNDIuMi0xNi4yYzIwLjkgOS4zIDU1LjMgMTguNSA3NS4yIDIxLjZjMzEuOSA0LjcgNTguMiAyIDc2LTUuM2MxNi45LTYuOSAyNC42LTE2LjkgMjYuOC0yOC45YzEuOS0xMC42IC40LTE2LjctMS4zLTIwLjRjLTEuOS00LTUuNi04LjQtMTMtMTMuM2MtMTYuNC0xMC43LTQxLjUtMTcuNy03NC0yNi4zbC0yLjgtLjdzMCAwIDAgMEMxMTkuNCAyNzkuMyA4NC40IDI3MCA1OC40IDI1M2MtMTQuMi05LjMtMjcuNS0yMi0zNS44LTM5LjZjLTguNC0xNy45LTEwLjEtMzcuOS02LjEtNTkuMkMyMy43IDExNiA1Mi4zIDkxLjIgODQuOCA3OC4zYzEzLjMtNS4zIDI3LjktOC45IDQzLjItMTFMMTI4IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXVxufTtcbmNvbnN0IGZhRG9sbGFyID0gZmFEb2xsYXJTaWduO1xuY29uc3QgZmFVc2QgPSBmYURvbGxhclNpZ247XG5jb25zdCBmYVggPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAneCcsXG4gIGljb246IFszODQsIDUxMiwgWzEyMF0sIFwiNThcIiwgXCJNMzc2LjYgODQuNWMxMS4zLTEzLjYgOS41LTMzLjgtNC4xLTQ1LjFzLTMzLjgtOS41LTQ1LjEgNC4xTDE5MiAyMDYgNTYuNiA0My41QzQ1LjMgMjkuOSAyNS4xIDI4LjEgMTEuNSAzOS40Uy0zLjkgNzAuOSA3LjQgODQuNUwxNTAuMyAyNTYgNy40IDQyNy41Yy0xMS4zIDEzLjYtOS41IDMzLjggNC4xIDQ1LjFzMzMuOCA5LjUgNDUuMS00LjFMMTkyIDMwNiAzMjcuNCA0NjguNWMxMS4zIDEzLjYgMzEuNSAxNS40IDQ1LjEgNC4xczE1LjQtMzEuNSA0LjEtNDUuMUwyMzMuNyAyNTYgMzc2LjYgODQuNXpcIl1cbn07XG5jb25zdCBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdtYWduaWZ5aW5nLWdsYXNzLWRvbGxhcicsXG4gIGljb246IFs1MTIsIDUxMiwgW1wic2VhcmNoLWRvbGxhclwiXSwgXCJmNjg4XCIsIFwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZjLTM0LjQgMjUuMi03Ni44IDQwLTEyMi43IDQwQzkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwUzQxNiA5My4xIDQxNiAyMDh6TTIyOCAxMDRjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMTRjLTcuNiAxLjctMTUuMiA0LjQtMjIuMiA4LjVjLTEzLjkgOC4zLTI1LjkgMjIuOC0yNS44IDQzLjljLjEgMjAuMyAxMiAzMy4xIDI0LjcgNDAuN2MxMSA2LjYgMjQuNyAxMC44IDM1LjYgMTRsMS43IC41YzEyLjYgMy44IDIxLjggNi44IDI4IDEwLjdjNS4xIDMuMiA1LjggNS40IDUuOSA4LjJjLjEgNS0xLjggOC01LjkgMTAuNWMtNSAzLjEtMTIuOSA1LTIxLjQgNC43Yy0xMS4xLS40LTIxLjUtMy45LTM1LjEtOC41Yy0yLjMtLjgtNC43LTEuNi03LjItMi40Yy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zYzEuOSAuNiA0IDEuMyA2LjEgMi4xYzAgMCAwIDAgMCAwczAgMCAwIDBjOC4zIDIuOSAxNy45IDYuMiAyOC4yIDguNGwwIDE0LjZjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xMy44YzgtMS43IDE2LTQuNSAyMy4yLTljMTQuMy04LjkgMjUuMS0yNC4xIDI0LjgtNDVjLS4zLTIwLjMtMTEuNy0zMy40LTI0LjYtNDEuNmMtMTEuNS03LjItMjUuOS0xMS42LTM3LjEtMTVsLS43LS4yYy0xMi44LTMuOS0yMS45LTYuNy0yOC4zLTEwLjVjLTUuMi0zLjEtNS4zLTQuOS01LjMtNi43YzAtMy43IDEuNC02LjUgNi4yLTkuM2M1LjQtMy4yIDEzLjYtNS4xIDIxLjUtNWM5LjYgLjEgMjAuMiAyLjIgMzEuMiA1LjJjMTAuNyAyLjggMjEuNi0zLjUgMjQuNS0xNC4ycy0zLjUtMjEuNi0xNC4yLTI0LjVjLTYuNS0xLjctMTMuNy0zLjQtMjEuMS00LjdsMC0xMy45elwiXVxufTtcbmNvbnN0IGZhU2VhcmNoRG9sbGFyID0gZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXI7XG5jb25zdCBmYVVzZXJzR2VhciA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1c2Vycy1nZWFyJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbXCJ1c2Vycy1jb2dcIl0sIFwiZjUwOVwiLCBcIk0xNDQgMTYwQTgwIDgwIDAgMSAwIDE0NCAwYTgwIDgwIDAgMSAwIDAgMTYwem0zNjggMEE4MCA4MCAwIDEgMCA1MTIgMGE4MCA4MCAwIDEgMCAwIDE2MHpNMCAyOTguN0MwIDMxMC40IDkuNiAzMjAgMjEuMyAzMjBsMjEzLjMgMGMuMiAwIC40IDAgLjcgMGMtMjYuNi0yMy41LTQzLjMtNTcuOC00My4zLTk2YzAtNy42IC43LTE1IDEuOS0yMi4zYy0xMy42LTYuMy0yOC43LTkuNy00NC42LTkuN2wtNDIuNyAwQzQ3LjggMTkyIDAgMjM5LjggMCAyOTguN3pNMzIwIDMyMGMyNCAwIDQ1LjktOC44IDYyLjctMjMuM2MyLjUtMy43IDUuMi03LjMgOC0xMC43YzIuNy0zLjMgNS43LTYuMSA5LTguM0M0MTAgMjYyLjMgNDE2IDI0My45IDQxNiAyMjRjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZ6bTY1LjQgNjAuMmMtMTAuMy01LjktMTguMS0xNi4yLTIwLjgtMjguMmwtMTAzLjIgMEMxODcuNyAzNTIgMTI4IDQxMS43IDEyOCA0ODUuM2MwIDE0LjcgMTEuOSAyNi43IDI2LjcgMjYuN2wzMDAuNiAwYy0yLjEtNS4yLTMuMi0xMC45LTMuMi0xNi40bDAtM2MtMS4zLS43LTIuNy0xLjUtNC0yLjNsLTIuNiAxLjVjLTE2LjggOS43LTQwLjUgOC01NC43LTkuN2MtNC41LTUuNi04LjYtMTEuNS0xMi40LTE3LjZsLS4xLS4yLS4xLS4yLTIuNC00LjEtLjEtLjItLjEtLjJjLTMuNC02LjItNi40LTEyLjYtOS0xOS4zYy04LjItMjEuMiAyLjItNDIuNiAxOS01Mi4zbDIuNy0xLjVjMC0uOCAwLTEuNSAwLTIuM3MwLTEuNSAwLTIuM2wtMi43LTEuNXpNNTMzLjMgMTkybC00Mi43IDBjLTE1LjkgMC0zMSAzLjUtNDQuNiA5LjdjMS4zIDcuMiAxLjkgMTQuNyAxLjkgMjIuM2MwIDE3LjQtMy41IDMzLjktOS43IDQ5YzIuNSAuOSA0LjkgMiA3LjEgMy4zbDIuNiAxLjVjMS4zLS44IDIuNi0xLjYgNC0yLjNsMC0zYzAtMTkuNCAxMy4zLTM5LjEgMzUuOC00Mi42YzcuOS0xLjIgMTYtMS45IDI0LjItMS45czE2LjMgLjYgMjQuMiAxLjljMjIuNSAzLjUgMzUuOCAyMy4yIDM1LjggNDIuNmwwIDNjMS4zIC43IDIuNyAxLjUgNCAyLjNsMi42LTEuNWMxNi44LTkuNyA0MC41LTggNTQuNyA5LjdjMi4zIDIuOCA0LjUgNS44IDYuNiA4LjdjLTIuMS01Ny4xLTQ5LTEwMi43LTEwNi42LTEwMi43em05MS4zIDE2My45YzYuMy0zLjYgOS41LTExLjEgNi44LTE4Yy0yLjEtNS41LTQuNi0xMC44LTcuNC0xNS45bC0yLjMtNGMtMy4xLTUuMS02LjUtOS45LTEwLjItMTQuNWMtNC42LTUuNy0xMi43LTYuNy0xOS0zbC0yLjkgMS43Yy05LjIgNS4zLTIwLjQgNC0yOS42LTEuM3MtMTYuMS0xNC41LTE2LjEtMjUuMWwwLTMuNGMwLTcuMy00LjktMTMuOC0xMi4xLTE0LjljLTYuNS0xLTEzLjEtMS41LTE5LjktMS41cy0xMy40IC41LTE5LjkgMS41Yy03LjIgMS4xLTEyLjEgNy42LTEyLjEgMTQuOWwwIDMuNGMwIDEwLjYtNi45IDE5LjgtMTYuMSAyNS4xcy0yMC40IDYuNi0yOS42IDEuM2wtMi45LTEuN2MtNi4zLTMuNi0xNC40LTIuNi0xOSAzYy0zLjcgNC42LTcuMSA5LjUtMTAuMiAxNC42bC0yLjMgMy45Yy0yLjggNS4xLTUuMyAxMC40LTcuNCAxNS45Yy0yLjYgNi44IC41IDE0LjMgNi44IDE3LjlsMi45IDEuN2M5LjIgNS4zIDEzLjcgMTUuOCAxMy43IDI2LjRzLTQuNSAyMS4xLTEzLjcgMjYuNGwtMyAxLjdjLTYuMyAzLjYtOS41IDExLjEtNi44IDE3LjljMi4xIDUuNSA0LjYgMTAuNyA3LjQgMTUuOGwyLjQgNC4xYzMgNS4xIDYuNCA5LjkgMTAuMSAxNC41YzQuNiA1LjcgMTIuNyA2LjcgMTkgM2wyLjktMS43YzkuMi01LjMgMjAuNC00IDI5LjYgMS4zczE2LjEgMTQuNSAxNi4xIDI1LjFsMCAzLjRjMCA3LjMgNC45IDEzLjggMTIuMSAxNC45YzYuNSAxIDEzLjEgMS41IDE5LjkgMS41czEzLjQtLjUgMTkuOS0xLjVjNy4yLTEuMSAxMi4xLTcuNiAxMi4xLTE0LjlsMC0zLjRjMC0xMC42IDYuOS0xOS44IDE2LjEtMjUuMXMyMC40LTYuNiAyOS42LTEuM2wyLjkgMS43YzYuMyAzLjYgMTQuNCAyLjYgMTktM2MzLjctNC42IDcuMS05LjQgMTAuMS0xNC41bDIuNC00LjJjMi44LTUuMSA1LjMtMTAuMyA3LjQtMTUuOGMyLjYtNi44LS41LTE0LjMtNi44LTE3LjlsLTMtMS43Yy05LjItNS4zLTEzLjctMTUuOC0xMy43LTI2LjRzNC41LTIxLjEgMTMuNy0yNi40bDMtMS43ek00NzIgMzg0YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6XCJdXG59O1xuY29uc3QgZmFVc2Vyc0NvZyA9IGZhVXNlcnNHZWFyO1xuY29uc3QgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1taWxpdGFyeS1wb2ludGluZycsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZTU0YVwiLCBcIk0yNDYuOSAxNC4xQzIzNCAxNS4yIDIyNCAyNiAyMjQgMzljMCAxMy44IDExLjIgMjUgMjUgMjVsMTUxIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzAuNkM0MTYgOCA0MDggLjcgMzk4LjcgMS40TDI0Ni45IDE0LjF6TTI0MCAxMTJjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTUuNS0uNi0xMC44LTEuNi0xNkwyNDEuNiA5NmMtMSA1LjItMS42IDEwLjUtMS42IDE2ek03MiAyMjRjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMTUyIDAgMCA4OS40TDM4Ni44IDIzMC41Yy0xMy4zLTQuMy0yNy4zLTYuNS00MS42LTYuNUwyNDAgMjI0IDcyIDIyNHptMzQ1LjcgMjAuOUwyNDYuNiA0MTYgNDE2IDQxNmwwLTQ2LjMgNTMuNiA5MC42YzExLjIgMTkgMzUuOCAyNS4zIDU0LjggMTQuMXMyNS4zLTM1LjggMTQuMS01NC44TDQ2Mi4zIDI5MC44Yy0xMS4yLTE4LjktMjYuNi0zNC41LTQ0LjYtNDUuOXpNMjI0IDQ0OGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzItMTkyIDB6XCJdXG59O1xuY29uc3QgZmFCdWlsZGluZ0NvbHVtbnMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnYnVpbGRpbmctY29sdW1ucycsXG4gIGljb246IFs1MTIsIDUxMiwgW1wiYmFua1wiLCBcImluc3RpdHV0aW9uXCIsIFwibXVzZXVtXCIsIFwidW5pdmVyc2l0eVwiXSwgXCJmMTljXCIsIFwiTTI0My40IDIuNmwtMjI0IDk2Yy0xNCA2LTIxLjggMjEtMTguNyAzNS44UzE2LjggMTYwIDMyIDE2MGwwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDAwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC04YzE1LjIgMCAyOC4zLTEwLjcgMzEuMy0yNS42cy00LjgtMjkuOS0xOC43LTM1LjhsLTIyNC05NmMtOC0zLjQtMTcuMi0zLjQtMjUuMiAwek0xMjggMjI0bC02NCAwIDAgMTk2LjNjLS42IC4zLTEuMiAuNy0xLjggMS4xbC00OCAzMmMtMTEuNyA3LjgtMTcgMjIuNC0xMi45IDM1LjlTMTcuOSA1MTIgMzIgNTEybDQ0OCAwYzE0LjEgMCAyNi41LTkuMiAzMC42LTIyLjdzLTEuMS0yOC4xLTEyLjktMzUuOWwtNDgtMzJjLS42LS40LTEuMi0uNy0xLjgtMS4xTDQ0OCAyMjRsLTY0IDAgMCAxOTItNDAgMCAwLTE5Mi02NCAwIDAgMTkyLTQ4IDAgMC0xOTItNjQgMCAwIDE5Mi00MCAwIDAtMTkyek0yNTYgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0elwiXVxufTtcbmNvbnN0IGZhQmFuayA9IGZhQnVpbGRpbmdDb2x1bW5zO1xuY29uc3QgZmFJbnN0aXR1dGlvbiA9IGZhQnVpbGRpbmdDb2x1bW5zO1xuY29uc3QgZmFNdXNldW0gPSBmYUJ1aWxkaW5nQ29sdW1ucztcbmNvbnN0IGZhVW5pdmVyc2l0eSA9IGZhQnVpbGRpbmdDb2x1bW5zO1xuY29uc3QgZmFVbWJyZWxsYSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd1bWJyZWxsYScsXG4gIGljb246IFs1NzYsIDUxMiwgW10sIFwiZjBlOVwiLCBcIk0yODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE3LjdDNDUxLjggNjMuNCA1NTcuNyAxNjEgNTczLjkgMjg1LjljMiAxNS42LTE3LjMgMjQuNC0yNy44IDEyLjdDNTMyLjEgMjgzIDUwNC44IDI3MiA0ODAgMjcyYy0zOC43IDAtNzEgMjcuNS03OC40IDY0LjFjLTEuNyA4LjctOC43IDE1LjktMTcuNiAxNS45cy0xNS44LTcuMi0xNy42LTE1LjlDMzU5IDI5OS41IDMyNi43IDI3MiAyODggMjcycy03MSAyNy41LTc4LjQgNjQuMWMtMS43IDguNy04LjcgMTUuOS0xNy42IDE1LjlzLTE1LjgtNy4yLTE3LjYtMTUuOUMxNjcgMjk5LjUgMTM0LjcgMjcyIDk2IDI3MmMtMjQuOCAwLTUyLjEgMTEtNjYuMSAyNi43QzE5LjQgMzEwLjQgLjEgMzAxLjUgMi4xIDI4NS45QzE4LjMgMTYxIDEyNC4yIDYzLjQgMjU2IDQ5LjdMMjU2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0wIDMwNGMxMi4zIDAgMjMuNSA0LjYgMzIgMTIuMmwwIDExNC4zYzAgNDUtMzYuNSA4MS40LTgxLjQgODEuNGMtMzAuOCAwLTU5LTE3LjQtNzIuOC00NWwtMi4zLTQuN2MtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDIuMyA0LjdjMyA1LjkgOSA5LjYgMTUuNiA5LjZjOS42IDAgMTcuNC03LjggMTcuNC0xNy40bDAtMTE0LjNjOC41LTcuNiAxOS43LTEyLjIgMzItMTIuMnpcIl1cbn07XG5jb25zdCBmYVRyb3dlbCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICd0cm93ZWwnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImU1ODlcIiwgXCJNMzQzLjkgMjEzLjRMMjQ1LjMgMzEybDY1LjQgNjUuNGM3LjkgNy45IDExLjEgMTkuNCA4LjQgMzAuM3MtMTAuOCAxOS42LTIxLjUgMjIuOWwtMjU2IDgwYy0xMS40IDMuNS0yMy44IC41LTMyLjItNy45Uy0yLjEgNDgxLjggMS41IDQ3MC41bDgwLTI1NmMzLjMtMTAuNyAxMi0xOC45IDIyLjktMjEuNXMyMi40IC41IDMwLjMgOC40TDIwMCAyNjYuN2w5OC42LTk4LjZjLTE0LjMtMTQuNi0xNC4yLTM4IC4zLTUyLjVsOTUuNC05NS40YzI2LjktMjYuOSA3MC41LTI2LjkgOTcuNSAwczI2LjkgNzAuNSAwIDk3LjVsLTk1LjQgOTUuNGMtMTQuNSAxNC41LTM3LjkgMTQuNi01Mi41IC4zelwiXVxufTtcbmNvbnN0IGZhRCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdkJyxcbiAgaWNvbjogWzM4NCwgNTEyLCBbMTAwXSwgXCI0NFwiLCBcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDk2IDBjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNHMtMTAwLjMgMjI0LTIyNCAyMjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE2MCAwTDY0IDk2bDAgMzIwIDk2IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBzLTcxLjYtMTYwLTE2MC0xNjB6XCJdXG59O1xuY29uc3QgZmFTdGFwbGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3N0YXBsZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtdLCBcImU1YWZcIiwgXCJNNjQwIDI5OS4zbDAgNC43IDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC04MCAwLTY0IDBMNjQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwIDAtNDhMOTYgMzY4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExNi42TDMzLjggMjE0QzE0LjIgMjEwLjUgMCAxOTMuNSAwIDE3My43YzAtOC45IDIuOS0xNy41IDguMi0yNC42bDM1LjYtNDcuNUM3Ni43IDU3LjggMTI4LjIgMzIgMTgyLjkgMzJjMjcgMCA1My42IDYuMyA3Ny44IDE4LjRMNTg2LjkgMjEzLjVDNjE5LjUgMjI5LjcgNjQwIDI2MyA2NDAgMjk5LjN6TTQ0OCAzMDRsMC0xNkwxMjggMjMwLjlsMCA3My4xIDMyMCAwelwiXVxufTtcbmNvbnN0IGZhTWFza3NUaGVhdGVyID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ21hc2tzLXRoZWF0ZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5MTcsIFwidGhlYXRlci1tYXNrc1wiXSwgXCJmNjMwXCIsIFwiTTc0LjYgMzczLjJjNDEuNyAzNi4xIDEwOCA4Mi41IDE2Ni4xIDczLjdjNi4xLS45IDEyLjEtMi41IDE4LTQuNWMtOS4yLTEyLjMtMTcuMy0yNC40LTI0LjItMzUuNGMtMjEuOS0zNS0yOC44LTc1LjItMjUuOS0xMTMuNmMtMjAuNiA0LjEtMzkuMiAxMy01NC43IDI1LjRjLTYuNSA1LjItMTYuMyAxLjMtMTQuOC03YzYuNC0zMy41IDMzLTYwLjkgNjguMi02Ni4zYzIuNi0uNCA1LjMtLjcgNy45LS44bDE5LjQtMTMxLjNjMi0xMy44IDgtMzIuNyAyNS00NS45QzI3OC4yIDUzLjIgMzEwLjUgMzcgMzYzLjIgMzIuMmMtLjgtLjctMS42LTEuNC0yLjQtMi4xQzM0MC42IDE0LjUgMjg4LjQtMTEuNSAxNzUuNyA1LjZTMjAuNSA2MyA1LjcgODMuOUMwIDkxLjktLjggMTAyIC42IDExMS44TDI0LjggMjc2LjFjNS41IDM3LjMgMjEuNSA3Mi42IDQ5LjggOTcuMnptODcuNy0yMTkuNmM0LjQtMy4xIDEwLjgtMiAxMS44IDMuM2MuMSAuNSAuMiAxLjEgLjMgMS42YzMuMiAyMS44LTExLjYgNDItMzMuMSA0NS4zcy00MS41LTExLjgtNDQuNy0zMy41Yy0uMS0uNS0uMS0xLjEtLjItMS42Yy0uNi01LjQgNS4yLTguNCAxMC4zLTYuN2M5IDMgMTguOCAzLjkgMjguNyAyLjRzMTkuMS01LjMgMjYuOC0xMC44ek0yNjEuNiAzOTBjMjkuNCA0Ni45IDc5LjUgMTEwLjkgMTM3LjYgMTE5LjdzMTI0LjUtMzcuNSAxNjYuMS03My43YzI4LjMtMjQuNSA0NC4zLTU5LjggNDkuOC05Ny4ybDI0LjItMTY0LjNjMS40LTkuOCAuNi0xOS45LTUuMS0yNy45Yy0xNC44LTIwLjktNTcuMy02MS4yLTE3MC03OC4zUzI5OS40IDc3LjIgMjc5LjIgOTIuOGMtNy44IDYtMTEuNSAxNS40LTEyLjkgMjUuMkwyNDIuMSAyODIuM2MtNS41IDM3LjMtLjQgNzUuOCAxOS42IDEwNy43ek00MDQuNSAyMzUuM2MtNy43LTUuNS0xNi44LTkuMy0yNi44LTEwLjhzLTE5LjgtLjYtMjguNyAyLjRjLTUuMSAxLjctMTAuOS0xLjMtMTAuMy02LjdjLjEtLjUgLjEtMS4xIC4yLTEuNmMzLjItMjEuOCAyMy4yLTM2LjggNDQuNy0zMy41czM2LjMgMjMuNSAzMy4xIDQ1LjNjLS4xIC41LS4yIDEuMS0uMyAxLjZjLTEgNS4zLTcuNCA2LjQtMTEuOCAzLjN6bTEzNi4yIDE1LjVjLTEgNS4zLTcuNCA2LjQtMTEuOCAzLjNjLTcuNy01LjUtMTYuOC05LjMtMjYuOC0xMC44cy0xOS44LS42LTI4LjcgMi40Yy01LjEgMS43LTEwLjktMS4zLTEwLjMtNi43Yy4xLS41IC4xLTEuMSAuMi0xLjZjMy4yLTIxLjggMjMuMi0zNi44IDQ0LjctMzMuNXMzNi4zIDIzLjUgMzMuMSA0NS4zYy0uMSAuNS0uMiAxLjEtLjMgMS42ek01MzAgMzUwLjJjLTE5LjYgNDQuNy02Ni44IDcyLjUtMTE2LjggNjQuOXMtODcuMS00OC4yLTkzLTk2LjdjLTEtOC4zIDguOS0xMi4xIDE1LjItNi43YzIzLjkgMjAuOCA1My42IDM1LjMgODcgNDAuM3M2Ni4xIC4xIDk0LjktMTIuOGM3LjYtMy40IDE2IDMuMiAxMi42IDEwLjl6XCJdXG59O1xuY29uc3QgZmFUaGVhdGVyTWFza3MgPSBmYU1hc2tzVGhlYXRlcjtcbmNvbnN0IGZhS2lwU2lnbiA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdraXAtc2lnbicsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTFjNFwiLCBcIk0zNDAuOCA4OC4zYzEzLjQtMTEuNSAxNS0zMS43IDMuNS00NS4xcy0zMS43LTE1LTQ1LjEtMy41TDEyOCAxODYuNCAxMjggNjRjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgNDYuMyA2NCA2NGwwIDE2MC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyMi40TDI5OS4yIDQ3Mi4zYzEzLjQgMTEuNSAzMy42IDkuOSA0NS4xLTMuNXM5LjktMzMuNi0zLjUtNDUuMUwxODIuNSAyODggMzUyIDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTY5LjUgMEwzNDAuOCA4OC4zelwiXVxufTtcbmNvbnN0IGZhSGFuZFBvaW50TGVmdCA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdoYW5kLXBvaW50LWxlZnQnLFxuICBpY29uOiBbNTEyLCA1MTIsIFtdLCBcImYwYTVcIiwgXCJNMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4czE0LjMgMzIgMzIgMzJsMjA4IDAgMC02NEwzMiA5NnpNMTkyIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwem0tNjQtNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTk2IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwem04OC05NmwtLjYgMGM1LjQgOS40IDguNiAyMC4zIDguNiAzMmMwIDEzLjItNCAyNS40LTEwLjggMzUuNmMyNC45IDguNyA0Mi44IDMyLjUgNDIuOCA2MC40YzAgMTEuNy0zLjEgMjIuNi04LjYgMzJsOC42IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC02MS43YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMWwtMTEuNi0xMS42QzQyOS41IDc3LjUgMzk2LjkgNjQgMzYzIDY0bC0yNyAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDg4YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC01NmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNTZjMCAzOS44LTMyLjIgNzItNzIgNzJ6XCJdXG59O1xuY29uc3QgZmFIYW5kc2hha2VTaW1wbGUgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnaGFuZHNoYWtlLXNpbXBsZScsXG4gIGljb246IFs2NDAsIDUxMiwgWzEyOTMwOSwgXCJoYW5kc2hha2UtYWx0XCJdLCBcImY0YzZcIiwgXCJNMzIzLjQgODUuMmwtOTYuOCA3OC40Yy0xNi4xIDEzLTE5LjIgMzYuNC03IDUzLjFjMTIuOSAxNy44IDM4IDIxLjMgNTUuMyA3LjhsOTkuMy03Ny4yYzctNS40IDE3LTQuMiAyMi41IDIuOHM0LjIgMTctMi44IDIyLjVsLTIwLjkgMTYuMkw1NTAuMiAzNTJsNDEuOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTI4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC03NiAwLTQgMC0uNyAwLTMuOS0yLjVMNDM0LjggNzljLTE1LjMtOS44LTMzLjItMTUtNTEuNC0xNWMtMjEuOCAwLTQzIDcuNS02MCAyMS4yem0yMi44IDEyNC40bC01MS43IDQwLjJDMjYzIDI3NC40IDIxNy4zIDI2OCAxOTMuNyAyMzUuNmMtMjIuMi0zMC41LTE2LjYtNzMuMSAxMi43LTk2LjhsODMuMi02Ny4zYy0xMS42LTQuOS0yNC4xLTcuNC0zNi44LTcuNEMyMzQgNjQgMjE1LjcgNjkuNiAyMDAgODBsLTcyIDQ4LTgwIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgMzA0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEwOC4yIDAgOTEuNCA4My40YzE5LjYgMTcuOSA0OS45IDE2LjUgNjcuOC0zLjFjNS41LTYuMSA5LjItMTMuMiAxMS4xLTIwLjZsMTcgMTUuNmMxOS41IDE3LjkgNDkuOSAxNi42IDY3LjgtMi45YzQuNS00LjkgNy44LTEwLjYgOS45LTE2LjVjMTkuNCAxMyA0NS44IDEwLjMgNjIuMS03LjVjMTcuOS0xOS41IDE2LjYtNDkuOS0yLjktNjcuOGwtMTM0LjItMTIzelwiXVxufTtcbmNvbnN0IGZhSGFuZHNoYWtlQWx0ID0gZmFIYW5kc2hha2VTaW1wbGU7XG5jb25zdCBmYUpldEZpZ2h0ZXIgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAnamV0LWZpZ2h0ZXInLFxuICBpY29uOiBbNjQwLCA1MTIsIFtcImZpZ2h0ZXItamV0XCJdLCBcImYwZmJcIiwgXCJNMTYwIDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0TDI5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwTDM4NCAxOTJsMTE2LjQgMGM3LjcgMCAxNS4zIDEuNCAyMi41IDQuMUw2MjUgMjM0LjRjOSAzLjQgMTUgMTIgMTUgMjEuNnMtNiAxOC4yLTE1IDIxLjZMNTIyLjkgMzE1LjljLTcuMiAyLjctMTQuOCA0LjEtMjIuNSA0LjFMMzg0IDMyMCAyODAgNDY0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTE0NC0zMiAwLTU0LjYgNTQuNmMtNiA2LTE0LjEgOS40LTIyLjYgOS40TDY0IDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNEwxNjAgMTkybDMyIDAgMC0xNDQtOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNODAgMjQwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDY0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTY0IDB6XCJdXG59O1xuY29uc3QgZmFGaWdodGVySmV0ID0gZmFKZXRGaWdodGVyO1xuY29uc3QgZmFTcXVhcmVTaGFyZU5vZGVzID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3NxdWFyZS1zaGFyZS1ub2RlcycsXG4gIGljb246IFs0NDgsIDUxMiwgW1wic2hhcmUtYWx0LXNxdWFyZVwiXSwgXCJmMWUxXCIsIFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTM4NCAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTE1LjQgMC0yOS41LTUuNC00MC42LTE0LjVMMTk0LjEgMjU2bDg1LjMgNDYuNWMxMS05LjEgMjUuMi0xNC41IDQwLjYtMTQuNWMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTIuNSAuMS00LjkgLjQtNy4zTDE3NC41IDMwMGMtMTEuNyAxMi4zLTI4LjIgMjAtNDYuNSAyMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxOC4zIDAgMzQuOCA3LjcgNDYuNSAyMGw4MS45LTQ0LjdjLS4zLTIuNC0uNC00LjktLjQtNy4zYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6XCJdXG59O1xuY29uc3QgZmFTaGFyZUFsdFNxdWFyZSA9IGZhU3F1YXJlU2hhcmVOb2RlcztcbmNvbnN0IGZhQmFyY29kZSA9IHtcbiAgcHJlZml4OiAnZmFzJyxcbiAgaWNvbk5hbWU6ICdiYXJjb2RlJyxcbiAgaWNvbjogWzUxMiwgNTEyLCBbXSwgXCJmMDJhXCIsIFwiTTI0IDMyQzEwLjcgMzIgMCA0Mi43IDAgNTZMMCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNEw2NCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEwyNCAzMnptODggMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDE2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00MTZjMC04LjgtNy4yLTE2LTE2LTE2em03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQwMGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xNiAwem05NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQwMGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xNiAwek00NDggNTZsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bS02NC04bDAgNDE2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00MTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6XCJdXG59O1xuY29uc3QgZmFQbHVzTWludXMgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAncGx1cy1taW51cycsXG4gIGljb246IFszODQsIDUxMiwgW10sIFwiZTQzY1wiLCBcIk0yMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMTJMNDggMTQ0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDExMiAwIDAgMTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTIgMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTExMiAwIDAtMTEyek0wIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXVxufTtcbmNvbnN0IGZhVmlkZW8gPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndmlkZW8nLFxuICBpY29uOiBbNTc2LCA1MTIsIFtcInZpZGVvLWNhbWVyYVwiXSwgXCJmMDNkXCIsIFwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6TTU1OS4xIDk5LjhjMTAuNCA1LjYgMTYuOSAxNi40IDE2LjkgMjguMmwwIDI1NmMwIDExLjgtNi41IDIyLjYtMTYuOSAyOC4ycy0yMyA1LTMyLjktMS42bC05Ni02NEw0MTYgMzM3LjFsMC0xNy4xIDAtMTI4IDAtMTcuMSAxNC4yLTkuNSA5Ni02NGM5LjgtNi41IDIyLjQtNy4yIDMyLjktMS42elwiXVxufTtcbmNvbnN0IGZhVmlkZW9DYW1lcmEgPSBmYVZpZGVvO1xuY29uc3QgZmFHcmFkdWF0aW9uQ2FwID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2dyYWR1YXRpb24tY2FwJyxcbiAgaWNvbjogWzY0MCwgNTEyLCBbMTI3ODkxLCBcIm1vcnRhci1ib2FyZFwiXSwgXCJmMTlkXCIsIFwiTTMyMCAzMmMtOC4xIDAtMTYuMSAxLjQtMjMuNyA0LjFMMTUuOCAxMzcuNEM2LjMgMTQwLjkgMCAxNDkuOSAwIDE2MHM2LjMgMTkuMSAxNS44IDIyLjZsNTcuOSAyMC45QzU3LjMgMjI5LjMgNDggMjU5LjggNDggMjkxLjlsMCAyOC4xYzAgMjguNC0xMC44IDU3LjctMjIuMyA4MC44Yy02LjUgMTMtMTMuOSAyNS44LTIyLjUgMzcuNkMwIDQ0Mi43LS45IDQ0OC4zIC45IDQ1My40czYgOC45IDExLjIgMTAuMmw2NCAxNmM0LjIgMS4xIDguNyAuMyAxMi40LTJzNi4zLTYuMSA3LjEtMTAuNGM4LjYtNDIuOCA0LjMtODEuMi0yLjEtMTA4LjdDOTAuMyAzNDQuMyA4NiAzMjkuOCA4MCAzMTYuNWwwLTI0LjZjMC0zMC4yIDEwLjItNTguNyAyNy45LTgxLjVjMTIuOS0xNS41IDI5LjYtMjggNDkuMi0zNS43bDE1Ny02MS43YzguMi0zLjIgMTcuNSAuOCAyMC43IDlzLS44IDE3LjUtOSAyMC43bC0xNTcgNjEuN2MtMTIuNCA0LjktMjMuMyAxMi40LTMyLjIgMjEuNmwxNTkuNiA1Ny42YzcuNiAyLjcgMTUuNiA0LjEgMjMuNyA0LjFzMTYuMS0xLjQgMjMuNy00LjFMNjI0LjIgMTgyLjZjOS41LTMuNCAxNS44LTEyLjUgMTUuOC0yMi42cy02LjMtMTkuMS0xNS44LTIyLjZMMzQzLjcgMzYuMUMzMzYuMSAzMy40IDMyOC4xIDMyIDMyMCAzMnpNMTI4IDQwOGMwIDM1LjMgODYgNzIgMTkyIDcyczE5Mi0zNi43IDE5Mi03Mkw0OTYuNyAyNjIuNiAzNTQuNSAzMTRjLTExLjEgNC0yMi44IDYtMzQuNSA2cy0yMy41LTItMzQuNS02TDE0My4zIDI2Mi42IDEyOCA0MDh6XCJdXG59O1xuY29uc3QgZmFNb3J0YXJCb2FyZCA9IGZhR3JhZHVhdGlvbkNhcDtcbmNvbnN0IGZhSGFuZEhvbGRpbmdNZWRpY2FsID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ2hhbmQtaG9sZGluZy1tZWRpY2FsJyxcbiAgaWNvbjogWzU3NiwgNTEyLCBbXSwgXCJlMDVjXCIsIFwiTTIyNCAyNGwwIDU2LTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNTYgMCAwIDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC01NiA1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTU2IDAgMC01NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEwyNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTU1OS43IDM5Mi4yYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjcyIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwIDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAtMTYgMC03OC4zIDBjLTI5LjEgMC01Ny4zIDkuOS04MCAyOEw2OC44IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDAgMTYwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zem0tMzY3LTguMmwuOSAwYzAgMCAwIDAgMCAwYy0uMyAwLS42IDAtLjkgMHpcIl1cbn07XG5jb25zdCBmYVBlcnNvbkNpcmNsZUNoZWNrID0ge1xuICBwcmVmaXg6ICdmYXMnLFxuICBpY29uTmFtZTogJ3BlcnNvbi1jaXJjbGUtY2hlY2snLFxuICBpY29uOiBbNTc2LCA1MTIsIFtdLCBcImU1M2VcIiwgXCJNMTEyIDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQwIDMwNGwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIyMy4xTDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42bDI5LjcgMGMzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw0NC45IDc0LjdjLTE2LjEgMTcuNi0yOC42IDM4LjUtMzYuNiA2MS41Yy0xLjktMS44LTMuNS0zLjktNC45LTYuM0wyMzIgMjU2LjkgMjMyIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0xNiAwem0xMzYgMTZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjExLjMtNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNDE2IDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdXG59O1xuY29uc3QgZmFUdXJuVXAgPSB7XG4gIHByZWZpeDogJ2ZhcycsXG4gIGljb25OYW1lOiAndHVybi11cCcsXG4gIGljb246IFszODQsIDUxMiwgWzEwNTQ4LCBcImxldmVsLXVwLWFsdFwiXSwgXCJmM2JmXCIsIFwiTTM1MCAxNzcuNWMzLjgtOC44IDItMTktNC42LTI2bC0xMzYtMTQ0QzIwNC45IDIuNyAxOTguNiAwIDE5MiAwcy0xMi45IDIuNy0xNy40IDcuNWwtMTM2IDE0NGMtNi42IDctOC40IDE3LjItNC42IDI2czEyLjUgMTQuNSAyMiAxNC41bDg4IDAgMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTgwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsODAgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTE5MiA4OCAwYzkuNiAwIDE4LjItNS43IDIyLTE0LjV6XCJdXG59O1xuY29uc3QgZmFMZXZlbFVwQWx0ID0gZmFUdXJuVXA7XG52YXIgaWNvbnMgPSB7XG4gIGZhMCxcbiAgZmExLFxuICBmYTIsXG4gIGZhMyxcbiAgZmE0LFxuICBmYTUsXG4gIGZhNixcbiAgZmE3LFxuICBmYTgsXG4gIGZhOSxcbiAgZmFGaWxsRHJpcCxcbiAgZmFBcnJvd3NUb0NpcmNsZSxcbiAgZmFDaXJjbGVDaGV2cm9uUmlnaHQsXG4gIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LFxuICBmYUF0LFxuICBmYVRyYXNoQ2FuLFxuICBmYVRyYXNoQWx0LFxuICBmYVRleHRIZWlnaHQsXG4gIGZhVXNlclhtYXJrLFxuICBmYVVzZXJUaW1lcyxcbiAgZmFTdGV0aG9zY29wZSxcbiAgZmFNZXNzYWdlLFxuICBmYUNvbW1lbnRBbHQsXG4gIGZhSW5mbyxcbiAgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlcixcbiAgZmFDb21wcmVzc0FsdCxcbiAgZmFFeHBsb3Npb24sXG4gIGZhRmlsZUxpbmVzLFxuICBmYUZpbGVBbHQsXG4gIGZhRmlsZVRleHQsXG4gIGZhV2F2ZVNxdWFyZSxcbiAgZmFSaW5nLFxuICBmYUJ1aWxkaW5nVW4sXG4gIGZhRGljZVRocmVlLFxuICBmYUNhbGVuZGFyRGF5cyxcbiAgZmFDYWxlbmRhckFsdCxcbiAgZmFBbmNob3JDaXJjbGVDaGVjayxcbiAgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsXG4gIGZhVm9sbGV5YmFsbCxcbiAgZmFWb2xsZXliYWxsQmFsbCxcbiAgZmFBcnJvd3NVcFRvTGluZSxcbiAgZmFTb3J0RG93bixcbiAgZmFTb3J0RGVzYyxcbiAgZmFDaXJjbGVNaW51cyxcbiAgZmFNaW51c0NpcmNsZSxcbiAgZmFEb29yT3BlbixcbiAgZmFSaWdodEZyb21CcmFja2V0LFxuICBmYVNpZ25PdXRBbHQsXG4gIGZhQXRvbSxcbiAgZmFTb2FwLFxuICBmYUljb25zLFxuICBmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0LFxuICBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLFxuICBmYU1pY3JvcGhvbmVBbHRTbGFzaCxcbiAgZmFCcmlkZ2VDaXJjbGVDaGVjayxcbiAgZmFQdW1wTWVkaWNhbCxcbiAgZmFGaW5nZXJwcmludCxcbiAgZmFIYW5kUG9pbnRSaWdodCxcbiAgZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbixcbiAgZmFTZWFyY2hMb2NhdGlvbixcbiAgZmFGb3J3YXJkU3RlcCxcbiAgZmFTdGVwRm9yd2FyZCxcbiAgZmFGYWNlU21pbGVCZWFtLFxuICBmYVNtaWxlQmVhbSxcbiAgZmFGbGFnQ2hlY2tlcmVkLFxuICBmYUZvb3RiYWxsLFxuICBmYUZvb3RiYWxsQmFsbCxcbiAgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFDcm9wLFxuICBmYUFuZ2xlc0Rvd24sXG4gIGZhQW5nbGVEb3VibGVEb3duLFxuICBmYVVzZXJzUmVjdGFuZ2xlLFxuICBmYVBlb3BsZVJvb2YsXG4gIGZhUGVvcGxlTGluZSxcbiAgZmFCZWVyTXVnRW1wdHksXG4gIGZhQmVlcixcbiAgZmFEaWFncmFtUHJlZGVjZXNzb3IsXG4gIGZhQXJyb3dVcExvbmcsXG4gIGZhTG9uZ0Fycm93VXAsXG4gIGZhRmlyZUZsYW1lU2ltcGxlLFxuICBmYUJ1cm4sXG4gIGZhUGVyc29uLFxuICBmYU1hbGUsXG4gIGZhTGFwdG9wLFxuICBmYUZpbGVDc3YsXG4gIGZhTWVub3JhaCxcbiAgZmFUcnVja1BsYW5lLFxuICBmYVJlY29yZFZpbnlsLFxuICBmYUZhY2VHcmluU3RhcnMsXG4gIGZhR3JpblN0YXJzLFxuICBmYUJvbmcsXG4gIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZyxcbiAgZmFQYXN0YWZhcmlhbmlzbSxcbiAgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsXG4gIGZhU3Bvb24sXG4gIGZhVXRlbnNpbFNwb29uLFxuICBmYUphcldoZWF0LFxuICBmYUVudmVsb3Blc0J1bGssXG4gIGZhTWFpbEJ1bGssXG4gIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLFxuICBmYUNpcmNsZUgsXG4gIGZhSG9zcGl0YWxTeW1ib2wsXG4gIGZhUGFnZXIsXG4gIGZhQWRkcmVzc0Jvb2ssXG4gIGZhQ29udGFjdEJvb2ssXG4gIGZhU3RyaWtldGhyb3VnaCxcbiAgZmFLLFxuICBmYUxhbmRtYXJrRmxhZyxcbiAgZmFQZW5jaWwsXG4gIGZhUGVuY2lsQWx0LFxuICBmYUJhY2t3YXJkLFxuICBmYUNhcmV0UmlnaHQsXG4gIGZhQ29tbWVudHMsXG4gIGZhUGFzdGUsXG4gIGZhRmlsZUNsaXBib2FyZCxcbiAgZmFDb2RlUHVsbFJlcXVlc3QsXG4gIGZhQ2xpcGJvYXJkTGlzdCxcbiAgZmFUcnVja1JhbXBCb3gsXG4gIGZhVHJ1Y2tMb2FkaW5nLFxuICBmYVVzZXJDaGVjayxcbiAgZmFWaWFsVmlydXMsXG4gIGZhU2hlZXRQbGFzdGljLFxuICBmYUJsb2csXG4gIGZhVXNlck5pbmphLFxuICBmYVBlcnNvbkFycm93VXBGcm9tTGluZSxcbiAgZmFTY3JvbGxUb3JhaCxcbiAgZmFUb3JhaCxcbiAgZmFCcm9vbUJhbGwsXG4gIGZhUXVpZGRpdGNoLFxuICBmYVF1aWRkaXRjaEJyb29tQmFsbCxcbiAgZmFUb2dnbGVPZmYsXG4gIGZhQm94QXJjaGl2ZSxcbiAgZmFBcmNoaXZlLFxuICBmYVBlcnNvbkRyb3duaW5nLFxuICBmYUFycm93RG93bjkxLFxuICBmYVNvcnROdW1lcmljRGVzYyxcbiAgZmFTb3J0TnVtZXJpY0Rvd25BbHQsXG4gIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsXG4gIGZhR3JpblRvbmd1ZVNxdWludCxcbiAgZmFTcHJheUNhbixcbiAgZmFUcnVja01vbnN0ZXIsXG4gIGZhVyxcbiAgZmFFYXJ0aEFmcmljYSxcbiAgZmFHbG9iZUFmcmljYSxcbiAgZmFSYWluYm93LFxuICBmYUNpcmNsZU5vdGNoLFxuICBmYVRhYmxldFNjcmVlbkJ1dHRvbixcbiAgZmFUYWJsZXRBbHQsXG4gIGZhUGF3LFxuICBmYUNsb3VkLFxuICBmYVRyb3dlbEJyaWNrcyxcbiAgZmFGYWNlRmx1c2hlZCxcbiAgZmFGbHVzaGVkLFxuICBmYUhvc3BpdGFsVXNlcixcbiAgZmFUZW50QXJyb3dMZWZ0UmlnaHQsXG4gIGZhR2F2ZWwsXG4gIGZhTGVnYWwsXG4gIGZhQmlub2N1bGFycyxcbiAgZmFNaWNyb3Bob25lU2xhc2gsXG4gIGZhQm94VGlzc3VlLFxuICBmYU1vdG9yY3ljbGUsXG4gIGZhQmVsbENvbmNpZXJnZSxcbiAgZmFDb25jaWVyZ2VCZWxsLFxuICBmYVBlblJ1bGVyLFxuICBmYVBlbmNpbFJ1bGVyLFxuICBmYVBlb3BsZUFycm93cyxcbiAgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsXG4gIGZhTWFyc0FuZFZlbnVzQnVyc3QsXG4gIGZhU3F1YXJlQ2FyZXRSaWdodCxcbiAgZmFDYXJldFNxdWFyZVJpZ2h0LFxuICBmYVNjaXNzb3JzLFxuICBmYUN1dCxcbiAgZmFTdW5QbGFudFdpbHQsXG4gIGZhVG9pbGV0c1BvcnRhYmxlLFxuICBmYUhvY2tleVB1Y2ssXG4gIGZhVGFibGUsXG4gIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCxcbiAgZmFUYWNob2dyYXBoRGlnaXRhbCxcbiAgZmFEaWdpdGFsVGFjaG9ncmFwaCxcbiAgZmFVc2Vyc1NsYXNoLFxuICBmYUNsb3ZlcixcbiAgZmFSZXBseSxcbiAgZmFNYWlsUmVwbHksXG4gIGZhU3RhckFuZENyZXNjZW50LFxuICBmYUhvdXNlRmlyZSxcbiAgZmFTcXVhcmVNaW51cyxcbiAgZmFNaW51c1NxdWFyZSxcbiAgZmFIZWxpY29wdGVyLFxuICBmYUNvbXBhc3MsXG4gIGZhU3F1YXJlQ2FyZXREb3duLFxuICBmYUNhcmV0U3F1YXJlRG93bixcbiAgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sXG4gIGZhTGFwdG9wQ29kZSxcbiAgZmFTd2F0Y2hib29rLFxuICBmYVByZXNjcmlwdGlvbkJvdHRsZSxcbiAgZmFCYXJzLFxuICBmYU5hdmljb24sXG4gIGZhUGVvcGxlR3JvdXAsXG4gIGZhSG91cmdsYXNzRW5kLFxuICBmYUhvdXJnbGFzczMsXG4gIGZhSGVhcnRDcmFjayxcbiAgZmFIZWFydEJyb2tlbixcbiAgZmFTcXVhcmVVcFJpZ2h0LFxuICBmYUV4dGVybmFsTGlua1NxdWFyZUFsdCxcbiAgZmFGYWNlS2lzc0JlYW0sXG4gIGZhS2lzc0JlYW0sXG4gIGZhRmlsbSxcbiAgZmFSdWxlckhvcml6b250YWwsXG4gIGZhUGVvcGxlUm9iYmVyeSxcbiAgZmFMaWdodGJ1bGIsXG4gIGZhQ2FyZXRMZWZ0LFxuICBmYUNpcmNsZUV4Y2xhbWF0aW9uLFxuICBmYUV4Y2xhbWF0aW9uQ2lyY2xlLFxuICBmYVNjaG9vbENpcmNsZVhtYXJrLFxuICBmYUFycm93UmlnaHRGcm9tQnJhY2tldCxcbiAgZmFTaWduT3V0LFxuICBmYUNpcmNsZUNoZXZyb25Eb3duLFxuICBmYUNoZXZyb25DaXJjbGVEb3duLFxuICBmYVVubG9ja0tleWhvbGUsXG4gIGZhVW5sb2NrQWx0LFxuICBmYUNsb3VkU2hvd2Vyc0hlYXZ5LFxuICBmYUhlYWRwaG9uZXNTaW1wbGUsXG4gIGZhSGVhZHBob25lc0FsdCxcbiAgZmFTaXRlbWFwLFxuICBmYUNpcmNsZURvbGxhclRvU2xvdCxcbiAgZmFEb25hdGUsXG4gIGZhTWVtb3J5LFxuICBmYVJvYWRTcGlrZXMsXG4gIGZhRmlyZUJ1cm5lcixcbiAgZmFGbGFnLFxuICBmYUhhbnVraWFoLFxuICBmYUZlYXRoZXIsXG4gIGZhVm9sdW1lTG93LFxuICBmYVZvbHVtZURvd24sXG4gIGZhQ29tbWVudFNsYXNoLFxuICBmYUNsb3VkU3VuUmFpbixcbiAgZmFDb21wcmVzcyxcbiAgZmFXaGVhdEF3bixcbiAgZmFXaGVhdEFsdCxcbiAgZmFBbmtoLFxuICBmYUhhbmRzSG9sZGluZ0NoaWxkLFxuICBmYUFzdGVyaXNrLFxuICBmYVNxdWFyZUNoZWNrLFxuICBmYUNoZWNrU3F1YXJlLFxuICBmYVBlc2V0YVNpZ24sXG4gIGZhSGVhZGluZyxcbiAgZmFIZWFkZXIsXG4gIGZhR2hvc3QsXG4gIGZhTGlzdCxcbiAgZmFMaXN0U3F1YXJlcyxcbiAgZmFTcXVhcmVQaG9uZUZsaXAsXG4gIGZhUGhvbmVTcXVhcmVBbHQsXG4gIGZhQ2FydFBsdXMsXG4gIGZhR2FtZXBhZCxcbiAgZmFDaXJjbGVEb3QsXG4gIGZhRG90Q2lyY2xlLFxuICBmYUZhY2VEaXp6eSxcbiAgZmFEaXp6eSxcbiAgZmFFZ2csXG4gIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssXG4gIGZhQ2FtcGdyb3VuZCxcbiAgZmFGb2xkZXJQbHVzLFxuICBmYUZ1dGJvbCxcbiAgZmFGdXRib2xCYWxsLFxuICBmYVNvY2NlckJhbGwsXG4gIGZhUGFpbnRicnVzaCxcbiAgZmFQYWludEJydXNoLFxuICBmYUxvY2ssXG4gIGZhR2FzUHVtcCxcbiAgZmFIb3RUdWJQZXJzb24sXG4gIGZhSG90VHViLFxuICBmYU1hcExvY2F0aW9uLFxuICBmYU1hcE1hcmtlZCxcbiAgZmFIb3VzZUZsb29kV2F0ZXIsXG4gIGZhVHJlZSxcbiAgZmFCcmlkZ2VMb2NrLFxuICBmYVNhY2tEb2xsYXIsXG4gIGZhUGVuVG9TcXVhcmUsXG4gIGZhRWRpdCxcbiAgZmFDYXJTaWRlLFxuICBmYVNoYXJlTm9kZXMsXG4gIGZhU2hhcmVBbHQsXG4gIGZhSGVhcnRDaXJjbGVNaW51cyxcbiAgZmFIb3VyZ2xhc3NIYWxmLFxuICBmYUhvdXJnbGFzczIsXG4gIGZhTWljcm9zY29wZSxcbiAgZmFTaW5rLFxuICBmYUJhZ1Nob3BwaW5nLFxuICBmYVNob3BwaW5nQmFnLFxuICBmYUFycm93RG93blpBLFxuICBmYVNvcnRBbHBoYURlc2MsXG4gIGZhU29ydEFscGhhRG93bkFsdCxcbiAgZmFNaXR0ZW4sXG4gIGZhUGVyc29uUmF5cyxcbiAgZmFVc2VycyxcbiAgZmFFeWVTbGFzaCxcbiAgZmFGbGFza1ZpYWwsXG4gIGZhSGFuZCxcbiAgZmFIYW5kUGFwZXIsXG4gIGZhT20sXG4gIGZhV29ybSxcbiAgZmFIb3VzZUNpcmNsZVhtYXJrLFxuICBmYVBsdWcsXG4gIGZhQ2hldnJvblVwLFxuICBmYUhhbmRTcG9jayxcbiAgZmFTdG9wd2F0Y2gsXG4gIGZhRmFjZUtpc3MsXG4gIGZhS2lzcyxcbiAgZmFCcmlkZ2VDaXJjbGVYbWFyayxcbiAgZmFGYWNlR3JpblRvbmd1ZSxcbiAgZmFHcmluVG9uZ3VlLFxuICBmYUNoZXNzQmlzaG9wLFxuICBmYUZhY2VHcmluV2luayxcbiAgZmFHcmluV2luayxcbiAgZmFFYXJEZWFmLFxuICBmYURlYWYsXG4gIGZhRGVhZm5lc3MsXG4gIGZhSGFyZE9mSGVhcmluZyxcbiAgZmFSb2FkQ2lyY2xlQ2hlY2ssXG4gIGZhRGljZUZpdmUsXG4gIGZhU3F1YXJlUnNzLFxuICBmYVJzc1NxdWFyZSxcbiAgZmFMYW5kTWluZU9uLFxuICBmYUlDdXJzb3IsXG4gIGZhU3RhbXAsXG4gIGZhU3RhaXJzLFxuICBmYUksXG4gIGZhSHJ5dm5pYVNpZ24sXG4gIGZhSHJ5dm5pYSxcbiAgZmFQaWxscyxcbiAgZmFGYWNlR3JpbldpZGUsXG4gIGZhR3JpbkFsdCxcbiAgZmFUb290aCxcbiAgZmFWLFxuICBmYUJhbmdsYWRlc2hpVGFrYVNpZ24sXG4gIGZhQmljeWNsZSxcbiAgZmFTdGFmZlNuYWtlLFxuICBmYVJvZEFzY2xlcGl1cyxcbiAgZmFSb2RTbmFrZSxcbiAgZmFTdGFmZkFlc2N1bGFwaXVzLFxuICBmYUhlYWRTaWRlQ291Z2hTbGFzaCxcbiAgZmFUcnVja01lZGljYWwsXG4gIGZhQW1idWxhbmNlLFxuICBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhU25vd21hbixcbiAgZmFNb3J0YXJQZXN0bGUsXG4gIGZhUm9hZEJhcnJpZXIsXG4gIGZhU2Nob29sLFxuICBmYUlnbG9vLFxuICBmYUpvaW50LFxuICBmYUFuZ2xlUmlnaHQsXG4gIGZhSG9yc2UsXG4gIGZhUSxcbiAgZmFHLFxuICBmYU5vdGVzTWVkaWNhbCxcbiAgZmFUZW1wZXJhdHVyZUhhbGYsXG4gIGZhVGVtcGVyYXR1cmUyLFxuICBmYVRoZXJtb21ldGVyMixcbiAgZmFUaGVybW9tZXRlckhhbGYsXG4gIGZhRG9uZ1NpZ24sXG4gIGZhQ2Fwc3VsZXMsXG4gIGZhUG9vU3Rvcm0sXG4gIGZhUG9vQm9sdCxcbiAgZmFGYWNlRnJvd25PcGVuLFxuICBmYUZyb3duT3BlbixcbiAgZmFIYW5kUG9pbnRVcCxcbiAgZmFNb25leUJpbGwsXG4gIGZhQm9va21hcmssXG4gIGZhQWxpZ25KdXN0aWZ5LFxuICBmYVVtYnJlbGxhQmVhY2gsXG4gIGZhSGVsbWV0VW4sXG4gIGZhQnVsbHNleWUsXG4gIGZhQmFjb24sXG4gIGZhSGFuZFBvaW50RG93bixcbiAgZmFBcnJvd1VwRnJvbUJyYWNrZXQsXG4gIGZhRm9sZGVyLFxuICBmYUZvbGRlckJsYW5rLFxuICBmYUZpbGVXYXZlZm9ybSxcbiAgZmFGaWxlTWVkaWNhbEFsdCxcbiAgZmFSYWRpYXRpb24sXG4gIGZhQ2hhcnRTaW1wbGUsXG4gIGZhTWFyc1N0cm9rZSxcbiAgZmFWaWFsLFxuICBmYUdhdWdlLFxuICBmYURhc2hib2FyZCxcbiAgZmFHYXVnZU1lZCxcbiAgZmFUYWNob21ldGVyQWx0QXZlcmFnZSxcbiAgZmFXYW5kTWFnaWNTcGFya2xlcyxcbiAgZmFNYWdpY1dhbmRTcGFya2xlcyxcbiAgZmFFLFxuICBmYVBlbkNsaXAsXG4gIGZhUGVuQWx0LFxuICBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLFxuICBmYVVzZXIsXG4gIGZhU2Nob29sQ2lyY2xlQ2hlY2ssXG4gIGZhRHVtcHN0ZXIsXG4gIGZhVmFuU2h1dHRsZSxcbiAgZmFTaHV0dGxlVmFuLFxuICBmYUJ1aWxkaW5nVXNlcixcbiAgZmFTcXVhcmVDYXJldExlZnQsXG4gIGZhQ2FyZXRTcXVhcmVMZWZ0LFxuICBmYUhpZ2hsaWdodGVyLFxuICBmYUtleSxcbiAgZmFCdWxsaG9ybixcbiAgZmFHbG9iZSxcbiAgZmFTeW5hZ29ndWUsXG4gIGZhUGVyc29uSGFsZkRyZXNzLFxuICBmYVJvYWRCcmlkZ2UsXG4gIGZhTG9jYXRpb25BcnJvdyxcbiAgZmFDLFxuICBmYVRhYmxldEJ1dHRvbixcbiAgZmFCdWlsZGluZ0xvY2ssXG4gIGZhUGl6emFTbGljZSxcbiAgZmFNb25leUJpbGxXYXZlLFxuICBmYUNoYXJ0QXJlYSxcbiAgZmFBcmVhQ2hhcnQsXG4gIGZhSG91c2VGbGFnLFxuICBmYVBlcnNvbkNpcmNsZU1pbnVzLFxuICBmYUJhbixcbiAgZmFDYW5jZWwsXG4gIGZhQ2FtZXJhUm90YXRlLFxuICBmYVNwcmF5Q2FuU3BhcmtsZXMsXG4gIGZhQWlyRnJlc2hlbmVyLFxuICBmYVN0YXIsXG4gIGZhUmVwZWF0LFxuICBmYUNyb3NzLFxuICBmYUJveCxcbiAgZmFWZW51c01hcnMsXG4gIGZhQXJyb3dQb2ludGVyLFxuICBmYU1vdXNlUG9pbnRlcixcbiAgZmFNYXhpbWl6ZSxcbiAgZmFFeHBhbmRBcnJvd3NBbHQsXG4gIGZhQ2hhcmdpbmdTdGF0aW9uLFxuICBmYVNoYXBlcyxcbiAgZmFUcmlhbmdsZUNpcmNsZVNxdWFyZSxcbiAgZmFTaHVmZmxlLFxuICBmYVJhbmRvbSxcbiAgZmFQZXJzb25SdW5uaW5nLFxuICBmYVJ1bm5pbmcsXG4gIGZhTW9iaWxlUmV0cm8sXG4gIGZhR3JpcExpbmVzVmVydGljYWwsXG4gIGZhU3BpZGVyLFxuICBmYUhhbmRzQm91bmQsXG4gIGZhRmlsZUludm9pY2VEb2xsYXIsXG4gIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFYUmF5LFxuICBmYVNwZWxsQ2hlY2ssXG4gIGZhU2xhc2gsXG4gIGZhQ29tcHV0ZXJNb3VzZSxcbiAgZmFNb3VzZSxcbiAgZmFBcnJvd1JpZ2h0VG9CcmFja2V0LFxuICBmYVNpZ25JbixcbiAgZmFTaG9wU2xhc2gsXG4gIGZhU3RvcmVBbHRTbGFzaCxcbiAgZmFTZXJ2ZXIsXG4gIGZhVmlydXNDb3ZpZFNsYXNoLFxuICBmYVNob3BMb2NrLFxuICBmYUhvdXJnbGFzc1N0YXJ0LFxuICBmYUhvdXJnbGFzczEsXG4gIGZhQmxlbmRlclBob25lLFxuICBmYUJ1aWxkaW5nV2hlYXQsXG4gIGZhUGVyc29uQnJlYXN0ZmVlZGluZyxcbiAgZmFSaWdodFRvQnJhY2tldCxcbiAgZmFTaWduSW5BbHQsXG4gIGZhVmVudXMsXG4gIGZhUGFzc3BvcnQsXG4gIGZhVGh1bWJ0YWNrU2xhc2gsXG4gIGZhVGh1bWJUYWNrU2xhc2gsXG4gIGZhSGVhcnRQdWxzZSxcbiAgZmFIZWFydGJlYXQsXG4gIGZhUGVvcGxlQ2FycnlCb3gsXG4gIGZhUGVvcGxlQ2FycnksXG4gIGZhVGVtcGVyYXR1cmVIaWdoLFxuICBmYU1pY3JvY2hpcCxcbiAgZmFDcm93bixcbiAgZmFXZWlnaHRIYW5naW5nLFxuICBmYVhtYXJrc0xpbmVzLFxuICBmYUZpbGVQcmVzY3JpcHRpb24sXG4gIGZhV2VpZ2h0U2NhbGUsXG4gIGZhV2VpZ2h0LFxuICBmYVVzZXJHcm91cCxcbiAgZmFVc2VyRnJpZW5kcyxcbiAgZmFBcnJvd1VwQVosXG4gIGZhU29ydEFscGhhVXAsXG4gIGZhQ2hlc3NLbmlnaHQsXG4gIGZhRmFjZUxhdWdoU3F1aW50LFxuICBmYUxhdWdoU3F1aW50LFxuICBmYVdoZWVsY2hhaXIsXG4gIGZhQ2lyY2xlQXJyb3dVcCxcbiAgZmFBcnJvd0NpcmNsZVVwLFxuICBmYVRvZ2dsZU9uLFxuICBmYVBlcnNvbldhbGtpbmcsXG4gIGZhV2Fsa2luZyxcbiAgZmFMLFxuICBmYUZpcmUsXG4gIGZhQmVkUHVsc2UsXG4gIGZhUHJvY2VkdXJlcyxcbiAgZmFTaHV0dGxlU3BhY2UsXG4gIGZhU3BhY2VTaHV0dGxlLFxuICBmYUZhY2VMYXVnaCxcbiAgZmFMYXVnaCxcbiAgZmFGb2xkZXJPcGVuLFxuICBmYUhlYXJ0Q2lyY2xlUGx1cyxcbiAgZmFDb2RlRm9yayxcbiAgZmFDaXR5LFxuICBmYU1pY3JvcGhvbmVMaW5lcyxcbiAgZmFNaWNyb3Bob25lQWx0LFxuICBmYVBlcHBlckhvdCxcbiAgZmFVbmxvY2ssXG4gIGZhQ29sb25TaWduLFxuICBmYUhlYWRzZXQsXG4gIGZhU3RvcmVTbGFzaCxcbiAgZmFSb2FkQ2lyY2xlWG1hcmssXG4gIGZhVXNlck1pbnVzLFxuICBmYU1hcnNTdHJva2VVcCxcbiAgZmFNYXJzU3Ryb2tlVixcbiAgZmFDaGFtcGFnbmVHbGFzc2VzLFxuICBmYUdsYXNzQ2hlZXJzLFxuICBmYUNsaXBib2FyZCxcbiAgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uLFxuICBmYUZpbGVBcnJvd1VwLFxuICBmYUZpbGVVcGxvYWQsXG4gIGZhV2lmaSxcbiAgZmFXaWZpMyxcbiAgZmFXaWZpU3Ryb25nLFxuICBmYUJhdGgsXG4gIGZhQmF0aHR1YixcbiAgZmFVbmRlcmxpbmUsXG4gIGZhVXNlclBlbixcbiAgZmFVc2VyRWRpdCxcbiAgZmFTaWduYXR1cmUsXG4gIGZhU3Ryb29wd2FmZWwsXG4gIGZhQm9sZCxcbiAgZmFBbmNob3JMb2NrLFxuICBmYUJ1aWxkaW5nTmdvLFxuICBmYU1hbmF0U2lnbixcbiAgZmFOb3RFcXVhbCxcbiAgZmFCb3JkZXJUb3BMZWZ0LFxuICBmYUJvcmRlclN0eWxlLFxuICBmYU1hcExvY2F0aW9uRG90LFxuICBmYU1hcE1hcmtlZEFsdCxcbiAgZmFKZWRpLFxuICBmYVNxdWFyZVBvbGxWZXJ0aWNhbCxcbiAgZmFQb2xsLFxuICBmYU11Z0hvdCxcbiAgZmFDYXJCYXR0ZXJ5LFxuICBmYUJhdHRlcnlDYXIsXG4gIGZhR2lmdCxcbiAgZmFEaWNlVHdvLFxuICBmYUNoZXNzUXVlZW4sXG4gIGZhR2xhc3NlcyxcbiAgZmFDaGVzc0JvYXJkLFxuICBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssXG4gIGZhUGVyc29uQ2hhbGtib2FyZCxcbiAgZmFNYXJzU3Ryb2tlUmlnaHQsXG4gIGZhTWFyc1N0cm9rZUgsXG4gIGZhSGFuZEJhY2tGaXN0LFxuICBmYUhhbmRSb2NrLFxuICBmYVNxdWFyZUNhcmV0VXAsXG4gIGZhQ2FyZXRTcXVhcmVVcCxcbiAgZmFDbG91ZFNob3dlcnNXYXRlcixcbiAgZmFDaGFydEJhcixcbiAgZmFCYXJDaGFydCxcbiAgZmFIYW5kc0J1YmJsZXMsXG4gIGZhSGFuZHNXYXNoLFxuICBmYUxlc3NUaGFuRXF1YWwsXG4gIGZhVHJhaW4sXG4gIGZhRXllTG93VmlzaW9uLFxuICBmYUxvd1Zpc2lvbixcbiAgZmFDcm93LFxuICBmYVNhaWxib2F0LFxuICBmYVdpbmRvd1Jlc3RvcmUsXG4gIGZhU3F1YXJlUGx1cyxcbiAgZmFQbHVzU3F1YXJlLFxuICBmYVRvcmlpR2F0ZSxcbiAgZmFGcm9nLFxuICBmYUJ1Y2tldCxcbiAgZmFJbWFnZSxcbiAgZmFNaWNyb3Bob25lLFxuICBmYUNvdyxcbiAgZmFDYXJldFVwLFxuICBmYVNjcmV3ZHJpdmVyLFxuICBmYUZvbGRlckNsb3NlZCxcbiAgZmFIb3VzZVRzdW5hbWksXG4gIGZhU3F1YXJlTmZpLFxuICBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsXG4gIGZhTWFydGluaUdsYXNzLFxuICBmYUdsYXNzTWFydGluaUFsdCxcbiAgZmFSb3RhdGVMZWZ0LFxuICBmYVJvdGF0ZUJhY2ssXG4gIGZhUm90YXRlQmFja3dhcmQsXG4gIGZhVW5kb0FsdCxcbiAgZmFUYWJsZUNvbHVtbnMsXG4gIGZhQ29sdW1ucyxcbiAgZmFMZW1vbixcbiAgZmFIZWFkU2lkZU1hc2ssXG4gIGZhSGFuZHNoYWtlLFxuICBmYUdlbSxcbiAgZmFEb2xseSxcbiAgZmFEb2xseUJveCxcbiAgZmFTbW9raW5nLFxuICBmYU1pbmltaXplLFxuICBmYUNvbXByZXNzQXJyb3dzQWx0LFxuICBmYU1vbnVtZW50LFxuICBmYVNub3dwbG93LFxuICBmYUFuZ2xlc1JpZ2h0LFxuICBmYUFuZ2xlRG91YmxlUmlnaHQsXG4gIGZhQ2FubmFiaXMsXG4gIGZhQ2lyY2xlUGxheSxcbiAgZmFQbGF5Q2lyY2xlLFxuICBmYVRhYmxldHMsXG4gIGZhRXRoZXJuZXQsXG4gIGZhRXVyb1NpZ24sXG4gIGZhRXVyLFxuICBmYUV1cm8sXG4gIGZhQ2hhaXIsXG4gIGZhQ2lyY2xlQ2hlY2ssXG4gIGZhQ2hlY2tDaXJjbGUsXG4gIGZhQ2lyY2xlU3RvcCxcbiAgZmFTdG9wQ2lyY2xlLFxuICBmYUNvbXBhc3NEcmFmdGluZyxcbiAgZmFEcmFmdGluZ0NvbXBhc3MsXG4gIGZhUGxhdGVXaGVhdCxcbiAgZmFJY2ljbGVzLFxuICBmYVBlcnNvblNoZWx0ZXIsXG4gIGZhTmV1dGVyLFxuICBmYUlkQmFkZ2UsXG4gIGZhTWFya2VyLFxuICBmYUZhY2VMYXVnaEJlYW0sXG4gIGZhTGF1Z2hCZWFtLFxuICBmYUhlbGljb3B0ZXJTeW1ib2wsXG4gIGZhVW5pdmVyc2FsQWNjZXNzLFxuICBmYUNpcmNsZUNoZXZyb25VcCxcbiAgZmFDaGV2cm9uQ2lyY2xlVXAsXG4gIGZhTGFyaVNpZ24sXG4gIGZhVm9sY2FubyxcbiAgZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQsXG4gIGZhU3RlcmxpbmdTaWduLFxuICBmYUdicCxcbiAgZmFQb3VuZFNpZ24sXG4gIGZhVmlydXNlcyxcbiAgZmFTcXVhcmVQZXJzb25Db25maW5lZCxcbiAgZmFVc2VyVGllLFxuICBmYUFycm93RG93bkxvbmcsXG4gIGZhTG9uZ0Fycm93RG93bixcbiAgZmFUZW50QXJyb3dEb3duVG9MaW5lLFxuICBmYUNlcnRpZmljYXRlLFxuICBmYVJlcGx5QWxsLFxuICBmYU1haWxSZXBseUFsbCxcbiAgZmFTdWl0Y2FzZSxcbiAgZmFQZXJzb25Ta2F0aW5nLFxuICBmYVNrYXRpbmcsXG4gIGZhRmlsdGVyQ2lyY2xlRG9sbGFyLFxuICBmYUZ1bm5lbERvbGxhcixcbiAgZmFDYW1lcmFSZXRybyxcbiAgZmFDaXJjbGVBcnJvd0Rvd24sXG4gIGZhQXJyb3dDaXJjbGVEb3duLFxuICBmYUZpbGVJbXBvcnQsXG4gIGZhQXJyb3dSaWdodFRvRmlsZSxcbiAgZmFTcXVhcmVBcnJvd1VwUmlnaHQsXG4gIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLFxuICBmYUJveE9wZW4sXG4gIGZhU2Nyb2xsLFxuICBmYVNwYSxcbiAgZmFMb2NhdGlvblBpbkxvY2ssXG4gIGZhUGF1c2UsXG4gIGZhSGlsbEF2YWxhbmNoZSxcbiAgZmFUZW1wZXJhdHVyZUVtcHR5LFxuICBmYVRlbXBlcmF0dXJlMCxcbiAgZmFUaGVybW9tZXRlcjAsXG4gIGZhVGhlcm1vbWV0ZXJFbXB0eSxcbiAgZmFCb21iLFxuICBmYVJlZ2lzdGVyZWQsXG4gIGZhQWRkcmVzc0NhcmQsXG4gIGZhQ29udGFjdENhcmQsXG4gIGZhVmNhcmQsXG4gIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCxcbiAgZmFCYWxhbmNlU2NhbGVSaWdodCxcbiAgZmFTdWJzY3JpcHQsXG4gIGZhRGlhbW9uZFR1cm5SaWdodCxcbiAgZmFEaXJlY3Rpb25zLFxuICBmYUJ1cnN0LFxuICBmYUhvdXNlTGFwdG9wLFxuICBmYUxhcHRvcEhvdXNlLFxuICBmYUZhY2VUaXJlZCxcbiAgZmFUaXJlZCxcbiAgZmFNb25leUJpbGxzLFxuICBmYVNtb2csXG4gIGZhQ3J1dGNoLFxuICBmYUZvbnRBd2Vzb21lLFxuICBmYUZvbnRBd2Vzb21lRmxhZyxcbiAgZmFGb250QXdlc29tZUxvZ29GdWxsLFxuICBmYUNsb3VkQXJyb3dVcCxcbiAgZmFDbG91ZFVwbG9hZCxcbiAgZmFDbG91ZFVwbG9hZEFsdCxcbiAgZmFQYWxldHRlLFxuICBmYUFycm93c1R1cm5SaWdodCxcbiAgZmFWZXN0LFxuICBmYUZlcnJ5LFxuICBmYUFycm93c0Rvd25Ub1Blb3BsZSxcbiAgZmFTZWVkbGluZyxcbiAgZmFTcHJvdXQsXG4gIGZhTGVmdFJpZ2h0LFxuICBmYUFycm93c0FsdEgsXG4gIGZhQm94ZXNQYWNraW5nLFxuICBmYUNpcmNsZUFycm93TGVmdCxcbiAgZmFBcnJvd0NpcmNsZUxlZnQsXG4gIGZhR3JvdXBBcnJvd3NSb3RhdGUsXG4gIGZhQm93bEZvb2QsXG4gIGZhQ2FuZHlDYW5lLFxuICBmYUFycm93RG93bldpZGVTaG9ydCxcbiAgZmFTb3J0QW1vdW50QXNjLFxuICBmYVNvcnRBbW91bnREb3duLFxuICBmYUNsb3VkQm9sdCxcbiAgZmFUaHVuZGVyc3Rvcm0sXG4gIGZhVGV4dFNsYXNoLFxuICBmYVJlbW92ZUZvcm1hdCxcbiAgZmFGYWNlU21pbGVXaW5rLFxuICBmYVNtaWxlV2luayxcbiAgZmFGaWxlV29yZCxcbiAgZmFGaWxlUG93ZXJwb2ludCxcbiAgZmFBcnJvd3NMZWZ0UmlnaHQsXG4gIGZhQXJyb3dzSCxcbiAgZmFIb3VzZUxvY2ssXG4gIGZhQ2xvdWRBcnJvd0Rvd24sXG4gIGZhQ2xvdWREb3dubG9hZCxcbiAgZmFDbG91ZERvd25sb2FkQWx0LFxuICBmYUNoaWxkcmVuLFxuICBmYUNoYWxrYm9hcmQsXG4gIGZhQmxhY2tib2FyZCxcbiAgZmFVc2VyTGFyZ2VTbGFzaCxcbiAgZmFVc2VyQWx0U2xhc2gsXG4gIGZhRW52ZWxvcGVPcGVuLFxuICBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLFxuICBmYUhhbmRzaGFrZUFsdFNsYXNoLFxuICBmYU1hdHRyZXNzUGlsbG93LFxuICBmYUd1YXJhbmlTaWduLFxuICBmYUFycm93c1JvdGF0ZSxcbiAgZmFSZWZyZXNoLFxuICBmYVN5bmMsXG4gIGZhRmlyZUV4dGluZ3Vpc2hlcixcbiAgZmFDcnV6ZWlyb1NpZ24sXG4gIGZhR3JlYXRlclRoYW5FcXVhbCxcbiAgZmFTaGllbGRIYWx2ZWQsXG4gIGZhU2hpZWxkQWx0LFxuICBmYUJvb2tBdGxhcyxcbiAgZmFBdGxhcyxcbiAgZmFWaXJ1cyxcbiAgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLFxuICBmYUxheWVyR3JvdXAsXG4gIGZhQXJyb3dzVG9Eb3QsXG4gIGZhQXJjaHdheSxcbiAgZmFIZWFydENpcmNsZUNoZWNrLFxuICBmYUhvdXNlQ2hpbW5leUNyYWNrLFxuICBmYUhvdXNlRGFtYWdlLFxuICBmYUZpbGVaaXBwZXIsXG4gIGZhRmlsZUFyY2hpdmUsXG4gIGZhU3F1YXJlLFxuICBmYU1hcnRpbmlHbGFzc0VtcHR5LFxuICBmYUdsYXNzTWFydGluaSxcbiAgZmFDb3VjaCxcbiAgZmFDZWRpU2lnbixcbiAgZmFJdGFsaWMsXG4gIGZhVGFibGVDZWxsc0NvbHVtbkxvY2ssXG4gIGZhQ2h1cmNoLFxuICBmYUNvbW1lbnRzRG9sbGFyLFxuICBmYURlbW9jcmF0LFxuICBmYVosXG4gIGZhUGVyc29uU2tpaW5nLFxuICBmYVNraWluZyxcbiAgZmFSb2FkTG9jayxcbiAgZmFBLFxuICBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLFxuICBmYVRlbXBlcmF0dXJlRG93bixcbiAgZmFGZWF0aGVyUG9pbnRlZCxcbiAgZmFGZWF0aGVyQWx0LFxuICBmYVAsXG4gIGZhU25vd2ZsYWtlLFxuICBmYU5ld3NwYXBlcixcbiAgZmFSZWN0YW5nbGVBZCxcbiAgZmFBZCxcbiAgZmFDaXJjbGVBcnJvd1JpZ2h0LFxuICBmYUFycm93Q2lyY2xlUmlnaHQsXG4gIGZhRmlsdGVyQ2lyY2xlWG1hcmssXG4gIGZhTG9jdXN0LFxuICBmYVNvcnQsXG4gIGZhVW5zb3J0ZWQsXG4gIGZhTGlzdE9sLFxuICBmYUxpc3QxMixcbiAgZmFMaXN0TnVtZXJpYyxcbiAgZmFQZXJzb25EcmVzc0J1cnN0LFxuICBmYU1vbmV5Q2hlY2tEb2xsYXIsXG4gIGZhTW9uZXlDaGVja0FsdCxcbiAgZmFWZWN0b3JTcXVhcmUsXG4gIGZhQnJlYWRTbGljZSxcbiAgZmFMYW5ndWFnZSxcbiAgZmFGYWNlS2lzc1dpbmtIZWFydCxcbiAgZmFLaXNzV2lua0hlYXJ0LFxuICBmYUZpbHRlcixcbiAgZmFRdWVzdGlvbixcbiAgZmFGaWxlU2lnbmF0dXJlLFxuICBmYVVwRG93bkxlZnRSaWdodCxcbiAgZmFBcnJvd3NBbHQsXG4gIGZhSG91c2VDaGltbmV5VXNlcixcbiAgZmFIYW5kSG9sZGluZ0hlYXJ0LFxuICBmYVB1enpsZVBpZWNlLFxuICBmYU1vbmV5Q2hlY2ssXG4gIGZhU3RhckhhbGZTdHJva2UsXG4gIGZhU3RhckhhbGZBbHQsXG4gIGZhQ29kZSxcbiAgZmFXaGlza2V5R2xhc3MsXG4gIGZhR2xhc3NXaGlza2V5LFxuICBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQsXG4gIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSxcbiAgZmFFeHRlcm5hbExpbmssXG4gIGZhQ3ViZXNTdGFja2VkLFxuICBmYVdvblNpZ24sXG4gIGZhS3J3LFxuICBmYVdvbixcbiAgZmFWaXJ1c0NvdmlkLFxuICBmYUF1c3RyYWxTaWduLFxuICBmYUYsXG4gIGZhTGVhZixcbiAgZmFSb2FkLFxuICBmYVRheGksXG4gIGZhQ2FiLFxuICBmYVBlcnNvbkNpcmNsZVBsdXMsXG4gIGZhQ2hhcnRQaWUsXG4gIGZhUGllQ2hhcnQsXG4gIGZhQm9sdExpZ2h0bmluZyxcbiAgZmFTYWNrWG1hcmssXG4gIGZhRmlsZUV4Y2VsLFxuICBmYUZpbGVDb250cmFjdCxcbiAgZmFGaXNoRmlucyxcbiAgZmFCdWlsZGluZ0ZsYWcsXG4gIGZhRmFjZUdyaW5CZWFtLFxuICBmYUdyaW5CZWFtLFxuICBmYU9iamVjdFVuZ3JvdXAsXG4gIGZhUG9vcCxcbiAgZmFMb2NhdGlvblBpbixcbiAgZmFNYXBNYXJrZXIsXG4gIGZhS2FhYmEsXG4gIGZhVG9pbGV0UGFwZXIsXG4gIGZhSGVsbWV0U2FmZXR5LFxuICBmYUhhcmRIYXQsXG4gIGZhSGF0SGFyZCxcbiAgZmFFamVjdCxcbiAgZmFDaXJjbGVSaWdodCxcbiAgZmFBcnJvd0FsdENpcmNsZVJpZ2h0LFxuICBmYVBsYW5lQ2lyY2xlQ2hlY2ssXG4gIGZhRmFjZVJvbGxpbmdFeWVzLFxuICBmYU1laFJvbGxpbmdFeWVzLFxuICBmYU9iamVjdEdyb3VwLFxuICBmYUNoYXJ0TGluZSxcbiAgZmFMaW5lQ2hhcnQsXG4gIGZhTWFza1ZlbnRpbGF0b3IsXG4gIGZhQXJyb3dSaWdodCxcbiAgZmFTaWduc1Bvc3QsXG4gIGZhTWFwU2lnbnMsXG4gIGZhQ2FzaFJlZ2lzdGVyLFxuICBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLFxuICBmYUgsXG4gIGZhVGFycCxcbiAgZmFTY3Jld2RyaXZlcldyZW5jaCxcbiAgZmFUb29scyxcbiAgZmFBcnJvd3NUb0V5ZSxcbiAgZmFQbHVnQ2lyY2xlQm9sdCxcbiAgZmFIZWFydCxcbiAgZmFNYXJzQW5kVmVudXMsXG4gIGZhSG91c2VVc2VyLFxuICBmYUhvbWVVc2VyLFxuICBmYUR1bXBzdGVyRmlyZSxcbiAgZmFIb3VzZUNyYWNrLFxuICBmYU1hcnRpbmlHbGFzc0NpdHJ1cyxcbiAgZmFDb2NrdGFpbCxcbiAgZmFGYWNlU3VycHJpc2UsXG4gIGZhU3VycHJpc2UsXG4gIGZhQm90dGxlV2F0ZXIsXG4gIGZhQ2lyY2xlUGF1c2UsXG4gIGZhUGF1c2VDaXJjbGUsXG4gIGZhVG9pbGV0UGFwZXJTbGFzaCxcbiAgZmFBcHBsZVdob2xlLFxuICBmYUFwcGxlQWx0LFxuICBmYUtpdGNoZW5TZXQsXG4gIGZhUixcbiAgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsXG4gIGZhVGVtcGVyYXR1cmUxLFxuICBmYVRoZXJtb21ldGVyMSxcbiAgZmFUaGVybW9tZXRlclF1YXJ0ZXIsXG4gIGZhQ3ViZSxcbiAgZmFCaXRjb2luU2lnbixcbiAgZmFTaGllbGREb2csXG4gIGZhU29sYXJQYW5lbCxcbiAgZmFMb2NrT3BlbixcbiAgZmFFbGV2YXRvcixcbiAgZmFNb25leUJpbGxUcmFuc2ZlcixcbiAgZmFNb25leUJpbGxUcmVuZFVwLFxuICBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQsXG4gIGZhU3F1YXJlUG9sbEhvcml6b250YWwsXG4gIGZhUG9sbEgsXG4gIGZhQ2lyY2xlLFxuICBmYUJhY2t3YXJkRmFzdCxcbiAgZmFGYXN0QmFja3dhcmQsXG4gIGZhUmVjeWNsZSxcbiAgZmFVc2VyQXN0cm9uYXV0LFxuICBmYVBsYW5lU2xhc2gsXG4gIGZhVHJhZGVtYXJrLFxuICBmYUJhc2tldGJhbGwsXG4gIGZhQmFza2V0YmFsbEJhbGwsXG4gIGZhU2F0ZWxsaXRlRGlzaCxcbiAgZmFDaXJjbGVVcCxcbiAgZmFBcnJvd0FsdENpcmNsZVVwLFxuICBmYU1vYmlsZVNjcmVlbkJ1dHRvbixcbiAgZmFNb2JpbGVBbHQsXG4gIGZhVm9sdW1lSGlnaCxcbiAgZmFWb2x1bWVVcCxcbiAgZmFVc2Vyc1JheXMsXG4gIGZhV2FsbGV0LFxuICBmYUNsaXBib2FyZENoZWNrLFxuICBmYUZpbGVBdWRpbyxcbiAgZmFCdXJnZXIsXG4gIGZhSGFtYnVyZ2VyLFxuICBmYVdyZW5jaCxcbiAgZmFCdWdzLFxuICBmYVJ1cGVlU2lnbixcbiAgZmFSdXBlZSxcbiAgZmFGaWxlSW1hZ2UsXG4gIGZhQ2lyY2xlUXVlc3Rpb24sXG4gIGZhUXVlc3Rpb25DaXJjbGUsXG4gIGZhUGxhbmVEZXBhcnR1cmUsXG4gIGZhSGFuZHNoYWtlU2xhc2gsXG4gIGZhQm9va0Jvb2ttYXJrLFxuICBmYUNvZGVCcmFuY2gsXG4gIGZhSGF0Q293Ym95LFxuICBmYUJyaWRnZSxcbiAgZmFQaG9uZUZsaXAsXG4gIGZhUGhvbmVBbHQsXG4gIGZhVHJ1Y2tGcm9udCxcbiAgZmFDYXQsXG4gIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhVHJ1Y2tGaWVsZCxcbiAgZmFSb3V0ZSxcbiAgZmFDbGlwYm9hcmRRdWVzdGlvbixcbiAgZmFQYW5vcmFtYSxcbiAgZmFDb21tZW50TWVkaWNhbCxcbiAgZmFUZWV0aE9wZW4sXG4gIGZhRmlsZUNpcmNsZU1pbnVzLFxuICBmYVRhZ3MsXG4gIGZhV2luZUdsYXNzLFxuICBmYUZvcndhcmRGYXN0LFxuICBmYUZhc3RGb3J3YXJkLFxuICBmYUZhY2VNZWhCbGFuayxcbiAgZmFNZWhCbGFuayxcbiAgZmFTcXVhcmVQYXJraW5nLFxuICBmYVBhcmtpbmcsXG4gIGZhSG91c2VTaWduYWwsXG4gIGZhQmFyc1Byb2dyZXNzLFxuICBmYVRhc2tzQWx0LFxuICBmYUZhdWNldERyaXAsXG4gIGZhQ2FydEZsYXRiZWQsXG4gIGZhRG9sbHlGbGF0YmVkLFxuICBmYUJhblNtb2tpbmcsXG4gIGZhU21va2luZ0JhbixcbiAgZmFUZXJtaW5hbCxcbiAgZmFNb2JpbGVCdXR0b24sXG4gIGZhSG91c2VNZWRpY2FsRmxhZyxcbiAgZmFCYXNrZXRTaG9wcGluZyxcbiAgZmFTaG9wcGluZ0Jhc2tldCxcbiAgZmFUYXBlLFxuICBmYUJ1c1NpbXBsZSxcbiAgZmFCdXNBbHQsXG4gIGZhRXllLFxuICBmYUZhY2VTYWRDcnksXG4gIGZhU2FkQ3J5LFxuICBmYUF1ZGlvRGVzY3JpcHRpb24sXG4gIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbixcbiAgZmFGaWxlU2hpZWxkLFxuICBmYVVzZXJTbGFzaCxcbiAgZmFQZW4sXG4gIGZhVG93ZXJPYnNlcnZhdGlvbixcbiAgZmFGaWxlQ29kZSxcbiAgZmFTaWduYWwsXG4gIGZhU2lnbmFsNSxcbiAgZmFTaWduYWxQZXJmZWN0LFxuICBmYUJ1cyxcbiAgZmFIZWFydENpcmNsZVhtYXJrLFxuICBmYUhvdXNlQ2hpbW5leSxcbiAgZmFIb21lTGcsXG4gIGZhV2luZG93TWF4aW1pemUsXG4gIGZhRmFjZUZyb3duLFxuICBmYUZyb3duLFxuICBmYVByZXNjcmlwdGlvbixcbiAgZmFTaG9wLFxuICBmYVN0b3JlQWx0LFxuICBmYUZsb3BweURpc2ssXG4gIGZhU2F2ZSxcbiAgZmFWaWhhcmEsXG4gIGZhU2NhbGVVbmJhbGFuY2VkLFxuICBmYUJhbGFuY2VTY2FsZUxlZnQsXG4gIGZhU29ydFVwLFxuICBmYVNvcnRBc2MsXG4gIGZhQ29tbWVudERvdHMsXG4gIGZhQ29tbWVudGluZyxcbiAgZmFQbGFudFdpbHQsXG4gIGZhRGlhbW9uZCxcbiAgZmFGYWNlR3JpblNxdWludCxcbiAgZmFHcmluU3F1aW50LFxuICBmYUhhbmRIb2xkaW5nRG9sbGFyLFxuICBmYUhhbmRIb2xkaW5nVXNkLFxuICBmYUJhY3Rlcml1bSxcbiAgZmFIYW5kUG9pbnRlcixcbiAgZmFEcnVtU3RlZWxwYW4sXG4gIGZhSGFuZFNjaXNzb3JzLFxuICBmYUhhbmRzUHJheWluZyxcbiAgZmFQcmF5aW5nSGFuZHMsXG4gIGZhQXJyb3dSb3RhdGVSaWdodCxcbiAgZmFBcnJvd1JpZ2h0Um90YXRlLFxuICBmYUFycm93Um90YXRlRm9yd2FyZCxcbiAgZmFSZWRvLFxuICBmYVdlYkF3ZXNvbWUsXG4gIGZhQmlvaGF6YXJkLFxuICBmYUxvY2F0aW9uQ3Jvc3NoYWlycyxcbiAgZmFMb2NhdGlvbixcbiAgZmFNYXJzRG91YmxlLFxuICBmYUNoaWxkRHJlc3MsXG4gIGZhVXNlcnNCZXR3ZWVuTGluZXMsXG4gIGZhTHVuZ3NWaXJ1cyxcbiAgZmFGYWNlR3JpblRlYXJzLFxuICBmYUdyaW5UZWFycyxcbiAgZmFQaG9uZSxcbiAgZmFDYWxlbmRhclhtYXJrLFxuICBmYUNhbGVuZGFyVGltZXMsXG4gIGZhQ2hpbGRSZWFjaGluZyxcbiAgZmFIZWFkU2lkZVZpcnVzLFxuICBmYVVzZXJHZWFyLFxuICBmYVVzZXJDb2csXG4gIGZhQXJyb3dVcDE5LFxuICBmYVNvcnROdW1lcmljVXAsXG4gIGZhRG9vckNsb3NlZCxcbiAgZmFTaGllbGRWaXJ1cyxcbiAgZmFEaWNlU2l4LFxuICBmYU1vc3F1aXRvTmV0LFxuICBmYUJyaWRnZVdhdGVyLFxuICBmYVBlcnNvbkJvb3RoLFxuICBmYVRleHRXaWR0aCxcbiAgZmFIYXRXaXphcmQsXG4gIGZhUGVuRmFuY3ksXG4gIGZhUGVyc29uRGlnZ2luZyxcbiAgZmFEaWdnaW5nLFxuICBmYVRyYXNoLFxuICBmYUdhdWdlU2ltcGxlLFxuICBmYUdhdWdlU2ltcGxlTWVkLFxuICBmYVRhY2hvbWV0ZXJBdmVyYWdlLFxuICBmYUJvb2tNZWRpY2FsLFxuICBmYVBvbyxcbiAgZmFRdW90ZVJpZ2h0LFxuICBmYVF1b3RlUmlnaHRBbHQsXG4gIGZhU2hpcnQsXG4gIGZhVFNoaXJ0LFxuICBmYVRzaGlydCxcbiAgZmFDdWJlcyxcbiAgZmFEaXZpZGUsXG4gIGZhVGVuZ2VTaWduLFxuICBmYVRlbmdlLFxuICBmYUhlYWRwaG9uZXMsXG4gIGZhSGFuZHNIb2xkaW5nLFxuICBmYUhhbmRzQ2xhcHBpbmcsXG4gIGZhUmVwdWJsaWNhbixcbiAgZmFBcnJvd0xlZnQsXG4gIGZhUGVyc29uQ2lyY2xlWG1hcmssXG4gIGZhUnVsZXIsXG4gIGZhQWxpZ25MZWZ0LFxuICBmYURpY2VENixcbiAgZmFSZXN0cm9vbSxcbiAgZmFKLFxuICBmYVVzZXJzVmlld2ZpbmRlcixcbiAgZmFGaWxlVmlkZW8sXG4gIGZhVXBSaWdodEZyb21TcXVhcmUsXG4gIGZhRXh0ZXJuYWxMaW5rQWx0LFxuICBmYVRhYmxlQ2VsbHMsXG4gIGZhVGgsXG4gIGZhRmlsZVBkZixcbiAgZmFCb29rQmlibGUsXG4gIGZhQmlibGUsXG4gIGZhTyxcbiAgZmFTdWl0Y2FzZU1lZGljYWwsXG4gIGZhTWVka2l0LFxuICBmYVVzZXJTZWNyZXQsXG4gIGZhT3R0ZXIsXG4gIGZhUGVyc29uRHJlc3MsXG4gIGZhRmVtYWxlLFxuICBmYUNvbW1lbnREb2xsYXIsXG4gIGZhQnVzaW5lc3NUaW1lLFxuICBmYUJyaWVmY2FzZUNsb2NrLFxuICBmYVRhYmxlQ2VsbHNMYXJnZSxcbiAgZmFUaExhcmdlLFxuICBmYUJvb2tUYW5ha2gsXG4gIGZhVGFuYWtoLFxuICBmYVBob25lVm9sdW1lLFxuICBmYVZvbHVtZUNvbnRyb2xQaG9uZSxcbiAgZmFIYXRDb3dib3lTaWRlLFxuICBmYUNsaXBib2FyZFVzZXIsXG4gIGZhQ2hpbGQsXG4gIGZhTGlyYVNpZ24sXG4gIGZhU2F0ZWxsaXRlLFxuICBmYVBsYW5lTG9jayxcbiAgZmFUYWcsXG4gIGZhQ29tbWVudCxcbiAgZmFDYWtlQ2FuZGxlcyxcbiAgZmFCaXJ0aGRheUNha2UsXG4gIGZhQ2FrZSxcbiAgZmFFbnZlbG9wZSxcbiAgZmFBbmdsZXNVcCxcbiAgZmFBbmdsZURvdWJsZVVwLFxuICBmYVBhcGVyY2xpcCxcbiAgZmFBcnJvd1JpZ2h0VG9DaXR5LFxuICBmYVJpYmJvbixcbiAgZmFMdW5ncyxcbiAgZmFBcnJvd1VwOTEsXG4gIGZhU29ydE51bWVyaWNVcEFsdCxcbiAgZmFMaXRlY29pblNpZ24sXG4gIGZhQm9yZGVyTm9uZSxcbiAgZmFDaXJjbGVOb2RlcyxcbiAgZmFQYXJhY2h1dGVCb3gsXG4gIGZhSW5kZW50LFxuICBmYVRydWNrRmllbGRVbixcbiAgZmFIb3VyZ2xhc3MsXG4gIGZhSG91cmdsYXNzRW1wdHksXG4gIGZhTW91bnRhaW4sXG4gIGZhVXNlckRvY3RvcixcbiAgZmFVc2VyTWQsXG4gIGZhQ2lyY2xlSW5mbyxcbiAgZmFJbmZvQ2lyY2xlLFxuICBmYUNsb3VkTWVhdGJhbGwsXG4gIGZhQ2FtZXJhLFxuICBmYUNhbWVyYUFsdCxcbiAgZmFTcXVhcmVWaXJ1cyxcbiAgZmFNZXRlb3IsXG4gIGZhQ2FyT24sXG4gIGZhU2xlaWdoLFxuICBmYUFycm93RG93bjE5LFxuICBmYVNvcnROdW1lcmljQXNjLFxuICBmYVNvcnROdW1lcmljRG93bixcbiAgZmFIYW5kSG9sZGluZ0Ryb3BsZXQsXG4gIGZhSGFuZEhvbGRpbmdXYXRlcixcbiAgZmFXYXRlcixcbiAgZmFDYWxlbmRhckNoZWNrLFxuICBmYUJyYWlsbGUsXG4gIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCxcbiAgZmFQcmVzY3JpcHRpb25Cb3R0bGVBbHQsXG4gIGZhTGFuZG1hcmssXG4gIGZhVHJ1Y2ssXG4gIGZhQ3Jvc3NoYWlycyxcbiAgZmFQZXJzb25DYW5lLFxuICBmYVRlbnQsXG4gIGZhVmVzdFBhdGNoZXMsXG4gIGZhQ2hlY2tEb3VibGUsXG4gIGZhQXJyb3dEb3duQVosXG4gIGZhU29ydEFscGhhQXNjLFxuICBmYVNvcnRBbHBoYURvd24sXG4gIGZhTW9uZXlCaWxsV2hlYXQsXG4gIGZhQ29va2llLFxuICBmYUFycm93Um90YXRlTGVmdCxcbiAgZmFBcnJvd0xlZnRSb3RhdGUsXG4gIGZhQXJyb3dSb3RhdGVCYWNrLFxuICBmYUFycm93Um90YXRlQmFja3dhcmQsXG4gIGZhVW5kbyxcbiAgZmFIYXJkRHJpdmUsXG4gIGZhSGRkLFxuICBmYUZhY2VHcmluU3F1aW50VGVhcnMsXG4gIGZhR3JpblNxdWludFRlYXJzLFxuICBmYUR1bWJiZWxsLFxuICBmYVJlY3RhbmdsZUxpc3QsXG4gIGZhTGlzdEFsdCxcbiAgZmFUYXJwRHJvcGxldCxcbiAgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjayxcbiAgZmFQZXJzb25Ta2lpbmdOb3JkaWMsXG4gIGZhU2tpaW5nTm9yZGljLFxuICBmYUNhbGVuZGFyUGx1cyxcbiAgZmFQbGFuZUFycml2YWwsXG4gIGZhQ2lyY2xlTGVmdCxcbiAgZmFBcnJvd0FsdENpcmNsZUxlZnQsXG4gIGZhVHJhaW5TdWJ3YXksXG4gIGZhU3Vid2F5LFxuICBmYUNoYXJ0R2FudHQsXG4gIGZhSW5kaWFuUnVwZWVTaWduLFxuICBmYUluZGlhblJ1cGVlLFxuICBmYUlucixcbiAgZmFDcm9wU2ltcGxlLFxuICBmYUNyb3BBbHQsXG4gIGZhTW9uZXlCaWxsMSxcbiAgZmFNb25leUJpbGxBbHQsXG4gIGZhTGVmdExvbmcsXG4gIGZhTG9uZ0Fycm93QWx0TGVmdCxcbiAgZmFEbmEsXG4gIGZhVmlydXNTbGFzaCxcbiAgZmFNaW51cyxcbiAgZmFTdWJ0cmFjdCxcbiAgZmFDaGVzcyxcbiAgZmFBcnJvd0xlZnRMb25nLFxuICBmYUxvbmdBcnJvd0xlZnQsXG4gIGZhUGx1Z0NpcmNsZUNoZWNrLFxuICBmYVN0cmVldFZpZXcsXG4gIGZhRnJhbmNTaWduLFxuICBmYVZvbHVtZU9mZixcbiAgZmFIYW5kc0FzbEludGVycHJldGluZyxcbiAgZmFBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyxcbiAgZmFBc2xJbnRlcnByZXRpbmcsXG4gIGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyxcbiAgZmFHZWFyLFxuICBmYUNvZyxcbiAgZmFEcm9wbGV0U2xhc2gsXG4gIGZhVGludFNsYXNoLFxuICBmYU1vc3F1ZSxcbiAgZmFNb3NxdWl0byxcbiAgZmFTdGFyT2ZEYXZpZCxcbiAgZmFQZXJzb25NaWxpdGFyeVJpZmxlLFxuICBmYUNhcnRTaG9wcGluZyxcbiAgZmFTaG9wcGluZ0NhcnQsXG4gIGZhVmlhbHMsXG4gIGZhUGx1Z0NpcmNsZVBsdXMsXG4gIGZhUGxhY2VPZldvcnNoaXAsXG4gIGZhR3JpcFZlcnRpY2FsLFxuICBmYUFycm93VHVyblVwLFxuICBmYUxldmVsVXAsXG4gIGZhVSxcbiAgZmFTcXVhcmVSb290VmFyaWFibGUsXG4gIGZhU3F1YXJlUm9vdEFsdCxcbiAgZmFDbG9jayxcbiAgZmFDbG9ja0ZvdXIsXG4gIGZhQmFja3dhcmRTdGVwLFxuICBmYVN0ZXBCYWNrd2FyZCxcbiAgZmFQYWxsZXQsXG4gIGZhRmF1Y2V0LFxuICBmYUJhc2ViYWxsQmF0QmFsbCxcbiAgZmFTLFxuICBmYVRpbWVsaW5lLFxuICBmYUtleWJvYXJkLFxuICBmYUNhcmV0RG93bixcbiAgZmFIb3VzZUNoaW1uZXlNZWRpY2FsLFxuICBmYUNsaW5pY01lZGljYWwsXG4gIGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzLFxuICBmYVRlbXBlcmF0dXJlMyxcbiAgZmFUaGVybW9tZXRlcjMsXG4gIGZhVGhlcm1vbWV0ZXJUaHJlZVF1YXJ0ZXJzLFxuICBmYU1vYmlsZVNjcmVlbixcbiAgZmFNb2JpbGVBbmRyb2lkQWx0LFxuICBmYVBsYW5lVXAsXG4gIGZhUGlnZ3lCYW5rLFxuICBmYUJhdHRlcnlIYWxmLFxuICBmYUJhdHRlcnkzLFxuICBmYU1vdW50YWluQ2l0eSxcbiAgZmFDb2lucyxcbiAgZmFLaGFuZGEsXG4gIGZhU2xpZGVycyxcbiAgZmFTbGlkZXJzSCxcbiAgZmFGb2xkZXJUcmVlLFxuICBmYU5ldHdvcmtXaXJlZCxcbiAgZmFNYXBQaW4sXG4gIGZhSGFtc2EsXG4gIGZhQ2VudFNpZ24sXG4gIGZhRmxhc2ssXG4gIGZhUGVyc29uUHJlZ25hbnQsXG4gIGZhV2FuZFNwYXJrbGVzLFxuICBmYUVsbGlwc2lzVmVydGljYWwsXG4gIGZhRWxsaXBzaXNWLFxuICBmYVRpY2tldCxcbiAgZmFQb3dlck9mZixcbiAgZmFSaWdodExvbmcsXG4gIGZhTG9uZ0Fycm93QWx0UmlnaHQsXG4gIGZhRmxhZ1VzYSxcbiAgZmFMYXB0b3BGaWxlLFxuICBmYVR0eSxcbiAgZmFUZWxldHlwZSxcbiAgZmFEaWFncmFtTmV4dCxcbiAgZmFQZXJzb25SaWZsZSxcbiAgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbixcbiAgZmFDbG9zZWRDYXB0aW9uaW5nLFxuICBmYVBlcnNvbkhpa2luZyxcbiAgZmFIaWtpbmcsXG4gIGZhVmVudXNEb3VibGUsXG4gIGZhSW1hZ2VzLFxuICBmYUNhbGN1bGF0b3IsXG4gIGZhUGVvcGxlUHVsbGluZyxcbiAgZmFOLFxuICBmYUNhYmxlQ2FyLFxuICBmYVRyYW0sXG4gIGZhQ2xvdWRSYWluLFxuICBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssXG4gIGZhU2hpcCxcbiAgZmFBcnJvd3NEb3duVG9MaW5lLFxuICBmYURvd25sb2FkLFxuICBmYUZhY2VHcmluLFxuICBmYUdyaW4sXG4gIGZhRGVsZXRlTGVmdCxcbiAgZmFCYWNrc3BhY2UsXG4gIGZhRXllRHJvcHBlcixcbiAgZmFFeWVEcm9wcGVyRW1wdHksXG4gIGZhRXllZHJvcHBlcixcbiAgZmFGaWxlQ2lyY2xlQ2hlY2ssXG4gIGZhRm9yd2FyZCxcbiAgZmFNb2JpbGUsXG4gIGZhTW9iaWxlQW5kcm9pZCxcbiAgZmFNb2JpbGVQaG9uZSxcbiAgZmFGYWNlTWVoLFxuICBmYU1laCxcbiAgZmFBbGlnbkNlbnRlcixcbiAgZmFCb29rU2t1bGwsXG4gIGZhQm9va0RlYWQsXG4gIGZhSWRDYXJkLFxuICBmYURyaXZlcnNMaWNlbnNlLFxuICBmYU91dGRlbnQsXG4gIGZhRGVkZW50LFxuICBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhSG91c2UsXG4gIGZhSG9tZSxcbiAgZmFIb21lQWx0LFxuICBmYUhvbWVMZ0FsdCxcbiAgZmFDYWxlbmRhcldlZWssXG4gIGZhTGFwdG9wTWVkaWNhbCxcbiAgZmFCLFxuICBmYUZpbGVNZWRpY2FsLFxuICBmYURpY2VPbmUsXG4gIGZhS2l3aUJpcmQsXG4gIGZhQXJyb3dSaWdodEFycm93TGVmdCxcbiAgZmFFeGNoYW5nZSxcbiAgZmFSb3RhdGVSaWdodCxcbiAgZmFSZWRvQWx0LFxuICBmYVJvdGF0ZUZvcndhcmQsXG4gIGZhVXRlbnNpbHMsXG4gIGZhQ3V0bGVyeSxcbiAgZmFBcnJvd1VwV2lkZVNob3J0LFxuICBmYVNvcnRBbW91bnRVcCxcbiAgZmFNaWxsU2lnbixcbiAgZmFCb3dsUmljZSxcbiAgZmFTa3VsbCxcbiAgZmFUb3dlckJyb2FkY2FzdCxcbiAgZmFCcm9hZGNhc3RUb3dlcixcbiAgZmFUcnVja1BpY2t1cCxcbiAgZmFVcExvbmcsXG4gIGZhTG9uZ0Fycm93QWx0VXAsXG4gIGZhU3RvcCxcbiAgZmFDb2RlTWVyZ2UsXG4gIGZhVXBsb2FkLFxuICBmYUh1cnJpY2FuZSxcbiAgZmFNb3VuZCxcbiAgZmFUb2lsZXRQb3J0YWJsZSxcbiAgZmFDb21wYWN0RGlzYyxcbiAgZmFGaWxlQXJyb3dEb3duLFxuICBmYUZpbGVEb3dubG9hZCxcbiAgZmFDYXJhdmFuLFxuICBmYVNoaWVsZENhdCxcbiAgZmFCb2x0LFxuICBmYVphcCxcbiAgZmFHbGFzc1dhdGVyLFxuICBmYU9pbFdlbGwsXG4gIGZhVmF1bHQsXG4gIGZhTWFycyxcbiAgZmFUb2lsZXQsXG4gIGZhUGxhbmVDaXJjbGVYbWFyayxcbiAgZmFZZW5TaWduLFxuICBmYUNueSxcbiAgZmFKcHksXG4gIGZhUm1iLFxuICBmYVllbixcbiAgZmFSdWJsZVNpZ24sXG4gIGZhUm91YmxlLFxuICBmYVJ1YixcbiAgZmFSdWJsZSxcbiAgZmFTdW4sXG4gIGZhR3VpdGFyLFxuICBmYUZhY2VMYXVnaFdpbmssXG4gIGZhTGF1Z2hXaW5rLFxuICBmYUhvcnNlSGVhZCxcbiAgZmFCb3JlSG9sZSxcbiAgZmFJbmR1c3RyeSxcbiAgZmFDaXJjbGVEb3duLFxuICBmYUFycm93QWx0Q2lyY2xlRG93bixcbiAgZmFBcnJvd3NUdXJuVG9Eb3RzLFxuICBmYUZsb3JpblNpZ24sXG4gIGZhQXJyb3dEb3duU2hvcnRXaWRlLFxuICBmYVNvcnRBbW91bnREZXNjLFxuICBmYVNvcnRBbW91bnREb3duQWx0LFxuICBmYUxlc3NUaGFuLFxuICBmYUFuZ2xlRG93bixcbiAgZmFDYXJUdW5uZWwsXG4gIGZhSGVhZFNpZGVDb3VnaCxcbiAgZmFHcmlwTGluZXMsXG4gIGZhVGh1bWJzRG93bixcbiAgZmFVc2VyTG9jayxcbiAgZmFBcnJvd1JpZ2h0TG9uZyxcbiAgZmFMb25nQXJyb3dSaWdodCxcbiAgZmFBbmNob3JDaXJjbGVYbWFyayxcbiAgZmFFbGxpcHNpcyxcbiAgZmFFbGxpcHNpc0gsXG4gIGZhQ2hlc3NQYXduLFxuICBmYUtpdE1lZGljYWwsXG4gIGZhRmlyc3RBaWQsXG4gIGZhUGVyc29uVGhyb3VnaFdpbmRvdyxcbiAgZmFUb29sYm94LFxuICBmYUhhbmRzSG9sZGluZ0NpcmNsZSxcbiAgZmFCdWcsXG4gIGZhQ3JlZGl0Q2FyZCxcbiAgZmFDcmVkaXRDYXJkQWx0LFxuICBmYUNhcixcbiAgZmFBdXRvbW9iaWxlLFxuICBmYUhhbmRIb2xkaW5nSGFuZCxcbiAgZmFCb29rT3BlblJlYWRlcixcbiAgZmFCb29rUmVhZGVyLFxuICBmYU1vdW50YWluU3VuLFxuICBmYUFycm93c0xlZnRSaWdodFRvTGluZSxcbiAgZmFEaWNlRDIwLFxuICBmYVRydWNrRHJvcGxldCxcbiAgZmFGaWxlQ2lyY2xlWG1hcmssXG4gIGZhVGVtcGVyYXR1cmVBcnJvd1VwLFxuICBmYVRlbXBlcmF0dXJlVXAsXG4gIGZhTWVkYWwsXG4gIGZhQmVkLFxuICBmYVNxdWFyZUgsXG4gIGZhSFNxdWFyZSxcbiAgZmFQb2RjYXN0LFxuICBmYVRlbXBlcmF0dXJlRnVsbCxcbiAgZmFUZW1wZXJhdHVyZTQsXG4gIGZhVGhlcm1vbWV0ZXI0LFxuICBmYVRoZXJtb21ldGVyRnVsbCxcbiAgZmFCZWxsLFxuICBmYVN1cGVyc2NyaXB0LFxuICBmYVBsdWdDaXJjbGVYbWFyayxcbiAgZmFTdGFyT2ZMaWZlLFxuICBmYVBob25lU2xhc2gsXG4gIGZhUGFpbnRSb2xsZXIsXG4gIGZhSGFuZHNoYWtlQW5nbGUsXG4gIGZhSGFuZHNIZWxwaW5nLFxuICBmYUxvY2F0aW9uRG90LFxuICBmYU1hcE1hcmtlckFsdCxcbiAgZmFGaWxlLFxuICBmYUdyZWF0ZXJUaGFuLFxuICBmYVBlcnNvblN3aW1taW5nLFxuICBmYVN3aW1tZXIsXG4gIGZhQXJyb3dEb3duLFxuICBmYURyb3BsZXQsXG4gIGZhVGludCxcbiAgZmFFcmFzZXIsXG4gIGZhRWFydGhBbWVyaWNhcyxcbiAgZmFFYXJ0aCxcbiAgZmFFYXJ0aEFtZXJpY2EsXG4gIGZhR2xvYmVBbWVyaWNhcyxcbiAgZmFQZXJzb25CdXJzdCxcbiAgZmFEb3ZlLFxuICBmYUJhdHRlcnlFbXB0eSxcbiAgZmFCYXR0ZXJ5MCxcbiAgZmFTb2NrcyxcbiAgZmFJbmJveCxcbiAgZmFTZWN0aW9uLFxuICBmYUdhdWdlSGlnaCxcbiAgZmFUYWNob21ldGVyQWx0LFxuICBmYVRhY2hvbWV0ZXJBbHRGYXN0LFxuICBmYUVudmVsb3BlT3BlblRleHQsXG4gIGZhSG9zcGl0YWwsXG4gIGZhSG9zcGl0YWxBbHQsXG4gIGZhSG9zcGl0YWxXaWRlLFxuICBmYVdpbmVCb3R0bGUsXG4gIGZhQ2hlc3NSb29rLFxuICBmYUJhcnNTdGFnZ2VyZWQsXG4gIGZhUmVvcmRlcixcbiAgZmFTdHJlYW0sXG4gIGZhRGhhcm1hY2hha3JhLFxuICBmYUhvdGRvZyxcbiAgZmFQZXJzb25XYWxraW5nV2l0aENhbmUsXG4gIGZhQmxpbmQsXG4gIGZhRHJ1bSxcbiAgZmFJY2VDcmVhbSxcbiAgZmFIZWFydENpcmNsZUJvbHQsXG4gIGZhRmF4LFxuICBmYVBhcmFncmFwaCxcbiAgZmFDaGVja1RvU2xvdCxcbiAgZmFWb3RlWWVhLFxuICBmYVN0YXJIYWxmLFxuICBmYUJveGVzU3RhY2tlZCxcbiAgZmFCb3hlcyxcbiAgZmFCb3hlc0FsdCxcbiAgZmFMaW5rLFxuICBmYUNoYWluLFxuICBmYUVhckxpc3RlbixcbiAgZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zLFxuICBmYVRyZWVDaXR5LFxuICBmYVBsYXksXG4gIGZhRm9udCxcbiAgZmFUYWJsZUNlbGxzUm93TG9jayxcbiAgZmFSdXBpYWhTaWduLFxuICBmYU1hZ25pZnlpbmdHbGFzcyxcbiAgZmFTZWFyY2gsXG4gIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsLFxuICBmYVBpbmdQb25nUGFkZGxlQmFsbCxcbiAgZmFUYWJsZVRlbm5pcyxcbiAgZmFQZXJzb25Eb3RzRnJvbUxpbmUsXG4gIGZhRGlhZ25vc2VzLFxuICBmYVRyYXNoQ2FuQXJyb3dVcCxcbiAgZmFUcmFzaFJlc3RvcmVBbHQsXG4gIGZhTmFpcmFTaWduLFxuICBmYUNhcnRBcnJvd0Rvd24sXG4gIGZhV2Fsa2llVGFsa2llLFxuICBmYUZpbGVQZW4sXG4gIGZhRmlsZUVkaXQsXG4gIGZhUmVjZWlwdCxcbiAgZmFTcXVhcmVQZW4sXG4gIGZhUGVuU3F1YXJlLFxuICBmYVBlbmNpbFNxdWFyZSxcbiAgZmFTdWl0Y2FzZVJvbGxpbmcsXG4gIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhQ2hldnJvbkRvd24sXG4gIGZhQmF0dGVyeUZ1bGwsXG4gIGZhQmF0dGVyeSxcbiAgZmFCYXR0ZXJ5NSxcbiAgZmFTa3VsbENyb3NzYm9uZXMsXG4gIGZhQ29kZUNvbXBhcmUsXG4gIGZhTGlzdFVsLFxuICBmYUxpc3REb3RzLFxuICBmYVNjaG9vbExvY2ssXG4gIGZhVG93ZXJDZWxsLFxuICBmYURvd25Mb25nLFxuICBmYUxvbmdBcnJvd0FsdERvd24sXG4gIGZhUmFua2luZ1N0YXIsXG4gIGZhQ2hlc3NLaW5nLFxuICBmYVBlcnNvbkhhcmFzc2luZyxcbiAgZmFCcmF6aWxpYW5SZWFsU2lnbixcbiAgZmFMYW5kbWFya0RvbWUsXG4gIGZhTGFuZG1hcmtBbHQsXG4gIGZhQXJyb3dVcCxcbiAgZmFUdixcbiAgZmFUZWxldmlzaW9uLFxuICBmYVR2QWx0LFxuICBmYVNocmltcCxcbiAgZmFMaXN0Q2hlY2ssXG4gIGZhVGFza3MsXG4gIGZhSnVnRGV0ZXJnZW50LFxuICBmYUNpcmNsZVVzZXIsXG4gIGZhVXNlckNpcmNsZSxcbiAgZmFVc2VyU2hpZWxkLFxuICBmYVdpbmQsXG4gIGZhQ2FyQnVyc3QsXG4gIGZhQ2FyQ3Jhc2gsXG4gIGZhWSxcbiAgZmFQZXJzb25Tbm93Ym9hcmRpbmcsXG4gIGZhU25vd2JvYXJkaW5nLFxuICBmYVRydWNrRmFzdCxcbiAgZmFTaGlwcGluZ0Zhc3QsXG4gIGZhRmlzaCxcbiAgZmFVc2VyR3JhZHVhdGUsXG4gIGZhQ2lyY2xlSGFsZlN0cm9rZSxcbiAgZmFBZGp1c3QsXG4gIGZhQ2xhcHBlcmJvYXJkLFxuICBmYUNpcmNsZVJhZGlhdGlvbixcbiAgZmFSYWRpYXRpb25BbHQsXG4gIGZhQmFzZWJhbGwsXG4gIGZhQmFzZWJhbGxCYWxsLFxuICBmYUpldEZpZ2h0ZXJVcCxcbiAgZmFEaWFncmFtUHJvamVjdCxcbiAgZmFQcm9qZWN0RGlhZ3JhbSxcbiAgZmFDb3B5LFxuICBmYVZvbHVtZVhtYXJrLFxuICBmYVZvbHVtZU11dGUsXG4gIGZhVm9sdW1lVGltZXMsXG4gIGZhSGFuZFNwYXJrbGVzLFxuICBmYUdyaXAsXG4gIGZhR3JpcEhvcml6b250YWwsXG4gIGZhU2hhcmVGcm9tU3F1YXJlLFxuICBmYVNoYXJlU3F1YXJlLFxuICBmYUNoaWxkQ29tYmF0YW50LFxuICBmYUNoaWxkUmlmbGUsXG4gIGZhR3VuLFxuICBmYVNxdWFyZVBob25lLFxuICBmYVBob25lU3F1YXJlLFxuICBmYVBsdXMsXG4gIGZhQWRkLFxuICBmYUV4cGFuZCxcbiAgZmFDb21wdXRlcixcbiAgZmFYbWFyayxcbiAgZmFDbG9zZSxcbiAgZmFNdWx0aXBseSxcbiAgZmFSZW1vdmUsXG4gIGZhVGltZXMsXG4gIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LFxuICBmYUFycm93cyxcbiAgZmFDaGFsa2JvYXJkVXNlcixcbiAgZmFDaGFsa2JvYXJkVGVhY2hlcixcbiAgZmFQZXNvU2lnbixcbiAgZmFCdWlsZGluZ1NoaWVsZCxcbiAgZmFCYWJ5LFxuICBmYVVzZXJzTGluZSxcbiAgZmFRdW90ZUxlZnQsXG4gIGZhUXVvdGVMZWZ0QWx0LFxuICBmYVRyYWN0b3IsXG4gIGZhVHJhc2hBcnJvd1VwLFxuICBmYVRyYXNoUmVzdG9yZSxcbiAgZmFBcnJvd0Rvd25VcExvY2ssXG4gIGZhTGluZXNMZWFuaW5nLFxuICBmYVJ1bGVyQ29tYmluZWQsXG4gIGZhQ29weXJpZ2h0LFxuICBmYUVxdWFscyxcbiAgZmFCbGVuZGVyLFxuICBmYVRlZXRoLFxuICBmYVNoZWtlbFNpZ24sXG4gIGZhSWxzLFxuICBmYVNoZWtlbCxcbiAgZmFTaGVxZWwsXG4gIGZhU2hlcWVsU2lnbixcbiAgZmFNYXAsXG4gIGZhUm9ja2V0LFxuICBmYVBob3RvRmlsbSxcbiAgZmFQaG90b1ZpZGVvLFxuICBmYUZvbGRlck1pbnVzLFxuICBmYVN0b3JlLFxuICBmYUFycm93VHJlbmRVcCxcbiAgZmFQbHVnQ2lyY2xlTWludXMsXG4gIGZhU2lnbkhhbmdpbmcsXG4gIGZhU2lnbixcbiAgZmFCZXppZXJDdXJ2ZSxcbiAgZmFCZWxsU2xhc2gsXG4gIGZhVGFibGV0LFxuICBmYVRhYmxldEFuZHJvaWQsXG4gIGZhU2Nob29sRmxhZyxcbiAgZmFGaWxsLFxuICBmYUFuZ2xlVXAsXG4gIGZhRHJ1bXN0aWNrQml0ZSxcbiAgZmFIb2xseUJlcnJ5LFxuICBmYUNoZXZyb25MZWZ0LFxuICBmYUJhY3RlcmlhLFxuICBmYUhhbmRMaXphcmQsXG4gIGZhTm90ZGVmLFxuICBmYURpc2Vhc2UsXG4gIGZhQnJpZWZjYXNlTWVkaWNhbCxcbiAgZmFHZW5kZXJsZXNzLFxuICBmYUNoZXZyb25SaWdodCxcbiAgZmFSZXR3ZWV0LFxuICBmYUNhclJlYXIsXG4gIGZhQ2FyQWx0LFxuICBmYVB1bXBTb2FwLFxuICBmYVZpZGVvU2xhc2gsXG4gIGZhQmF0dGVyeVF1YXJ0ZXIsXG4gIGZhQmF0dGVyeTIsXG4gIGZhUmFkaW8sXG4gIGZhQmFieUNhcnJpYWdlLFxuICBmYUNhcnJpYWdlQmFieSxcbiAgZmFUcmFmZmljTGlnaHQsXG4gIGZhVGhlcm1vbWV0ZXIsXG4gIGZhVnJDYXJkYm9hcmQsXG4gIGZhSGFuZE1pZGRsZUZpbmdlcixcbiAgZmFQZXJjZW50LFxuICBmYVBlcmNlbnRhZ2UsXG4gIGZhVHJ1Y2tNb3ZpbmcsXG4gIGZhR2xhc3NXYXRlckRyb3BsZXQsXG4gIGZhRGlzcGxheSxcbiAgZmFGYWNlU21pbGUsXG4gIGZhU21pbGUsXG4gIGZhVGh1bWJ0YWNrLFxuICBmYVRodW1iVGFjayxcbiAgZmFUcm9waHksXG4gIGZhUGVyc29uUHJheWluZyxcbiAgZmFQcmF5LFxuICBmYUhhbW1lcixcbiAgZmFIYW5kUGVhY2UsXG4gIGZhUm90YXRlLFxuICBmYVN5bmNBbHQsXG4gIGZhU3Bpbm5lcixcbiAgZmFSb2JvdCxcbiAgZmFQZWFjZSxcbiAgZmFHZWFycyxcbiAgZmFDb2dzLFxuICBmYVdhcmVob3VzZSxcbiAgZmFBcnJvd1VwUmlnaHREb3RzLFxuICBmYVNwbG90Y2gsXG4gIGZhRmFjZUdyaW5IZWFydHMsXG4gIGZhR3JpbkhlYXJ0cyxcbiAgZmFEaWNlRm91cixcbiAgZmFTaW1DYXJkLFxuICBmYVRyYW5zZ2VuZGVyLFxuICBmYVRyYW5zZ2VuZGVyQWx0LFxuICBmYU1lcmN1cnksXG4gIGZhQXJyb3dUdXJuRG93bixcbiAgZmFMZXZlbERvd24sXG4gIGZhUGVyc29uRmFsbGluZ0J1cnN0LFxuICBmYUF3YXJkLFxuICBmYVRpY2tldFNpbXBsZSxcbiAgZmFUaWNrZXRBbHQsXG4gIGZhQnVpbGRpbmcsXG4gIGZhQW5nbGVzTGVmdCxcbiAgZmFBbmdsZURvdWJsZUxlZnQsXG4gIGZhUXJjb2RlLFxuICBmYUNsb2NrUm90YXRlTGVmdCxcbiAgZmFIaXN0b3J5LFxuICBmYUZhY2VHcmluQmVhbVN3ZWF0LFxuICBmYUdyaW5CZWFtU3dlYXQsXG4gIGZhRmlsZUV4cG9ydCxcbiAgZmFBcnJvd1JpZ2h0RnJvbUZpbGUsXG4gIGZhU2hpZWxkLFxuICBmYVNoaWVsZEJsYW5rLFxuICBmYUFycm93VXBTaG9ydFdpZGUsXG4gIGZhU29ydEFtb3VudFVwQWx0LFxuICBmYUhvdXNlTWVkaWNhbCxcbiAgZmFHb2xmQmFsbFRlZSxcbiAgZmFHb2xmQmFsbCxcbiAgZmFDaXJjbGVDaGV2cm9uTGVmdCxcbiAgZmFDaGV2cm9uQ2lyY2xlTGVmdCxcbiAgZmFIb3VzZUNoaW1uZXlXaW5kb3csXG4gIGZhUGVuTmliLFxuICBmYVRlbnRBcnJvd1R1cm5MZWZ0LFxuICBmYVRlbnRzLFxuICBmYVdhbmRNYWdpYyxcbiAgZmFNYWdpYyxcbiAgZmFEb2csXG4gIGZhQ2Fycm90LFxuICBmYU1vb24sXG4gIGZhV2luZUdsYXNzRW1wdHksXG4gIGZhV2luZUdsYXNzQWx0LFxuICBmYUNoZWVzZSxcbiAgZmFZaW5ZYW5nLFxuICBmYU11c2ljLFxuICBmYUNvZGVDb21taXQsXG4gIGZhVGVtcGVyYXR1cmVMb3csXG4gIGZhUGVyc29uQmlraW5nLFxuICBmYUJpa2luZyxcbiAgZmFCcm9vbSxcbiAgZmFTaGllbGRIZWFydCxcbiAgZmFHb3B1cmFtLFxuICBmYUVhcnRoT2NlYW5pYSxcbiAgZmFHbG9iZU9jZWFuaWEsXG4gIGZhU3F1YXJlWG1hcmssXG4gIGZhVGltZXNTcXVhcmUsXG4gIGZhWG1hcmtTcXVhcmUsXG4gIGZhSGFzaHRhZyxcbiAgZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyLFxuICBmYUV4cGFuZEFsdCxcbiAgZmFPaWxDYW4sXG4gIGZhVCxcbiAgZmFIaXBwbyxcbiAgZmFDaGFydENvbHVtbixcbiAgZmFJbmZpbml0eSxcbiAgZmFWaWFsQ2lyY2xlQ2hlY2ssXG4gIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLFxuICBmYVZvaWNlbWFpbCxcbiAgZmFGYW4sXG4gIGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2UsXG4gIGZhVXBEb3duLFxuICBmYUFycm93c0FsdFYsXG4gIGZhQ2xvdWRNb29uUmFpbixcbiAgZmFDYWxlbmRhcixcbiAgZmFUcmFpbGVyLFxuICBmYUJhaGFpLFxuICBmYUhheWthbCxcbiAgZmFTZENhcmQsXG4gIGZhRHJhZ29uLFxuICBmYVNob2VQcmludHMsXG4gIGZhQ2lyY2xlUGx1cyxcbiAgZmFQbHVzQ2lyY2xlLFxuICBmYUZhY2VHcmluVG9uZ3VlV2luayxcbiAgZmFHcmluVG9uZ3VlV2luayxcbiAgZmFIYW5kSG9sZGluZyxcbiAgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhTGlua1NsYXNoLFxuICBmYUNoYWluQnJva2VuLFxuICBmYUNoYWluU2xhc2gsXG4gIGZhVW5saW5rLFxuICBmYUNsb25lLFxuICBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0LFxuICBmYUFycm93VXBaQSxcbiAgZmFTb3J0QWxwaGFVcEFsdCxcbiAgZmFGaXJlRmxhbWVDdXJ2ZWQsXG4gIGZhRmlyZUFsdCxcbiAgZmFUb3JuYWRvLFxuICBmYUZpbGVDaXJjbGVQbHVzLFxuICBmYUJvb2tRdXJhbixcbiAgZmFRdXJhbixcbiAgZmFBbmNob3IsXG4gIGZhQm9yZGVyQWxsLFxuICBmYUZhY2VBbmdyeSxcbiAgZmFBbmdyeSxcbiAgZmFDb29raWVCaXRlLFxuICBmYUFycm93VHJlbmREb3duLFxuICBmYVJzcyxcbiAgZmFGZWVkLFxuICBmYURyYXdQb2x5Z29uLFxuICBmYVNjYWxlQmFsYW5jZWQsXG4gIGZhQmFsYW5jZVNjYWxlLFxuICBmYUdhdWdlU2ltcGxlSGlnaCxcbiAgZmFUYWNob21ldGVyLFxuICBmYVRhY2hvbWV0ZXJGYXN0LFxuICBmYVNob3dlcixcbiAgZmFEZXNrdG9wLFxuICBmYURlc2t0b3BBbHQsXG4gIGZhTSxcbiAgZmFUYWJsZUxpc3QsXG4gIGZhVGhMaXN0LFxuICBmYUNvbW1lbnRTbXMsXG4gIGZhU21zLFxuICBmYUJvb2ssXG4gIGZhVXNlclBsdXMsXG4gIGZhQ2hlY2ssXG4gIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsXG4gIGZhQmF0dGVyeTQsXG4gIGZhSG91c2VDaXJjbGVDaGVjayxcbiAgZmFBbmdsZUxlZnQsXG4gIGZhRGlhZ3JhbVN1Y2Nlc3NvcixcbiAgZmFUcnVja0Fycm93UmlnaHQsXG4gIGZhQXJyb3dzU3BsaXRVcEFuZExlZnQsXG4gIGZhSGFuZEZpc3QsXG4gIGZhRmlzdFJhaXNlZCxcbiAgZmFDbG91ZE1vb24sXG4gIGZhQnJpZWZjYXNlLFxuICBmYVBlcnNvbkZhbGxpbmcsXG4gIGZhSW1hZ2VQb3J0cmFpdCxcbiAgZmFQb3J0cmFpdCxcbiAgZmFVc2VyVGFnLFxuICBmYVJ1ZyxcbiAgZmFFYXJ0aEV1cm9wZSxcbiAgZmFHbG9iZUV1cm9wZSxcbiAgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlLFxuICBmYUx1Z2dhZ2VDYXJ0LFxuICBmYVJlY3RhbmdsZVhtYXJrLFxuICBmYVJlY3RhbmdsZVRpbWVzLFxuICBmYVRpbWVzUmVjdGFuZ2xlLFxuICBmYVdpbmRvd0Nsb3NlLFxuICBmYUJhaHRTaWduLFxuICBmYUJvb2tPcGVuLFxuICBmYUJvb2tKb3VybmFsV2hpbGxzLFxuICBmYUpvdXJuYWxXaGlsbHMsXG4gIGZhSGFuZGN1ZmZzLFxuICBmYVRyaWFuZ2xlRXhjbGFtYXRpb24sXG4gIGZhRXhjbGFtYXRpb25UcmlhbmdsZSxcbiAgZmFXYXJuaW5nLFxuICBmYURhdGFiYXNlLFxuICBmYVNoYXJlLFxuICBmYU1haWxGb3J3YXJkLFxuICBmYUJvdHRsZURyb3BsZXQsXG4gIGZhTWFza0ZhY2UsXG4gIGZhSGlsbFJvY2tzbGlkZSxcbiAgZmFSaWdodExlZnQsXG4gIGZhRXhjaGFuZ2VBbHQsXG4gIGZhUGFwZXJQbGFuZSxcbiAgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24sXG4gIGZhRHVuZ2VvbixcbiAgZmFBbGlnblJpZ2h0LFxuICBmYU1vbmV5QmlsbDFXYXZlLFxuICBmYU1vbmV5QmlsbFdhdmVBbHQsXG4gIGZhTGlmZVJpbmcsXG4gIGZhSGFuZHMsXG4gIGZhU2lnbkxhbmd1YWdlLFxuICBmYVNpZ25pbmcsXG4gIGZhQ2FsZW5kYXJEYXksXG4gIGZhV2F0ZXJMYWRkZXIsXG4gIGZhTGFkZGVyV2F0ZXIsXG4gIGZhU3dpbW1pbmdQb29sLFxuICBmYUFycm93c1VwRG93bixcbiAgZmFBcnJvd3NWLFxuICBmYUZhY2VHcmltYWNlLFxuICBmYUdyaW1hY2UsXG4gIGZhV2hlZWxjaGFpck1vdmUsXG4gIGZhV2hlZWxjaGFpckFsdCxcbiAgZmFUdXJuRG93bixcbiAgZmFMZXZlbERvd25BbHQsXG4gIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQsXG4gIGZhU3F1YXJlRW52ZWxvcGUsXG4gIGZhRW52ZWxvcGVTcXVhcmUsXG4gIGZhRGljZSxcbiAgZmFCb3dsaW5nQmFsbCxcbiAgZmFCcmFpbixcbiAgZmFCYW5kYWdlLFxuICBmYUJhbmRBaWQsXG4gIGZhQ2FsZW5kYXJNaW51cyxcbiAgZmFDaXJjbGVYbWFyayxcbiAgZmFUaW1lc0NpcmNsZSxcbiAgZmFYbWFya0NpcmNsZSxcbiAgZmFHaWZ0cyxcbiAgZmFIb3RlbCxcbiAgZmFFYXJ0aEFzaWEsXG4gIGZhR2xvYmVBc2lhLFxuICBmYUlkQ2FyZENsaXAsXG4gIGZhSWRDYXJkQWx0LFxuICBmYU1hZ25pZnlpbmdHbGFzc1BsdXMsXG4gIGZhU2VhcmNoUGx1cyxcbiAgZmFUaHVtYnNVcCxcbiAgZmFVc2VyQ2xvY2ssXG4gIGZhSGFuZERvdHMsXG4gIGZhQWxsZXJnaWVzLFxuICBmYUZpbGVJbnZvaWNlLFxuICBmYVdpbmRvd01pbmltaXplLFxuICBmYU11Z1NhdWNlcixcbiAgZmFDb2ZmZWUsXG4gIGZhQnJ1c2gsXG4gIGZhTWFzayxcbiAgZmFNYWduaWZ5aW5nR2xhc3NNaW51cyxcbiAgZmFTZWFyY2hNaW51cyxcbiAgZmFSdWxlclZlcnRpY2FsLFxuICBmYVVzZXJMYXJnZSxcbiAgZmFVc2VyQWx0LFxuICBmYVRyYWluVHJhbSxcbiAgZmFVc2VyTnVyc2UsXG4gIGZhU3lyaW5nZSxcbiAgZmFDbG91ZFN1bixcbiAgZmFTdG9wd2F0Y2gyMCxcbiAgZmFTcXVhcmVGdWxsLFxuICBmYU1hZ25ldCxcbiAgZmFKYXIsXG4gIGZhTm90ZVN0aWNreSxcbiAgZmFTdGlja3lOb3RlLFxuICBmYUJ1Z1NsYXNoLFxuICBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLFxuICBmYUJvbmUsXG4gIGZhVGFibGVDZWxsc1Jvd1VubG9jayxcbiAgZmFVc2VySW5qdXJlZCxcbiAgZmFGYWNlU2FkVGVhcixcbiAgZmFTYWRUZWFyLFxuICBmYVBsYW5lLFxuICBmYVRlbnRBcnJvd3NEb3duLFxuICBmYUV4Y2xhbWF0aW9uLFxuICBmYUFycm93c1NwaW4sXG4gIGZhUHJpbnQsXG4gIGZhVHVya2lzaExpcmFTaWduLFxuICBmYVRyeSxcbiAgZmFUdXJraXNoTGlyYSxcbiAgZmFEb2xsYXJTaWduLFxuICBmYURvbGxhcixcbiAgZmFVc2QsXG4gIGZhWCxcbiAgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIsXG4gIGZhU2VhcmNoRG9sbGFyLFxuICBmYVVzZXJzR2VhcixcbiAgZmFVc2Vyc0NvZyxcbiAgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nLFxuICBmYUJ1aWxkaW5nQ29sdW1ucyxcbiAgZmFCYW5rLFxuICBmYUluc3RpdHV0aW9uLFxuICBmYU11c2V1bSxcbiAgZmFVbml2ZXJzaXR5LFxuICBmYVVtYnJlbGxhLFxuICBmYVRyb3dlbCxcbiAgZmFELFxuICBmYVN0YXBsZXIsXG4gIGZhTWFza3NUaGVhdGVyLFxuICBmYVRoZWF0ZXJNYXNrcyxcbiAgZmFLaXBTaWduLFxuICBmYUhhbmRQb2ludExlZnQsXG4gIGZhSGFuZHNoYWtlU2ltcGxlLFxuICBmYUhhbmRzaGFrZUFsdCxcbiAgZmFKZXRGaWdodGVyLFxuICBmYUZpZ2h0ZXJKZXQsXG4gIGZhU3F1YXJlU2hhcmVOb2RlcyxcbiAgZmFTaGFyZUFsdFNxdWFyZSxcbiAgZmFCYXJjb2RlLFxuICBmYVBsdXNNaW51cyxcbiAgZmFWaWRlbyxcbiAgZmFWaWRlb0NhbWVyYSxcbiAgZmFHcmFkdWF0aW9uQ2FwLFxuICBmYU1vcnRhckJvYXJkLFxuICBmYUhhbmRIb2xkaW5nTWVkaWNhbCxcbiAgZmFQZXJzb25DaXJjbGVDaGVjayxcbiAgZmFUdXJuVXAsXG4gIGZhTGV2ZWxVcEFsdFxufTtcblxuZXhwb3J0IHsgaWNvbnMgYXMgZmFzLCBwcmVmaXgsIGZhMCwgZmExLCBmYTIsIGZhMywgZmE0LCBmYTUsIGZhNiwgZmE3LCBmYTgsIGZhOSwgZmFGaWxsRHJpcCwgZmFBcnJvd3NUb0NpcmNsZSwgZmFDaXJjbGVDaGV2cm9uUmlnaHQsIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LCBmYUF0LCBmYVRyYXNoQ2FuLCBmYVRyYXNoQWx0LCBmYVRleHRIZWlnaHQsIGZhVXNlclhtYXJrLCBmYVVzZXJUaW1lcywgZmFTdGV0aG9zY29wZSwgZmFNZXNzYWdlLCBmYUNvbW1lbnRBbHQsIGZhSW5mbywgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciwgZmFDb21wcmVzc0FsdCwgZmFFeHBsb3Npb24sIGZhRmlsZUxpbmVzLCBmYUZpbGVBbHQsIGZhRmlsZVRleHQsIGZhV2F2ZVNxdWFyZSwgZmFSaW5nLCBmYUJ1aWxkaW5nVW4sIGZhRGljZVRocmVlLCBmYUNhbGVuZGFyRGF5cywgZmFDYWxlbmRhckFsdCwgZmFBbmNob3JDaXJjbGVDaGVjaywgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsIGZhVm9sbGV5YmFsbCwgZmFWb2xsZXliYWxsQmFsbCwgZmFBcnJvd3NVcFRvTGluZSwgZmFTb3J0RG93biwgZmFTb3J0RGVzYywgZmFDaXJjbGVNaW51cywgZmFNaW51c0NpcmNsZSwgZmFEb29yT3BlbiwgZmFSaWdodEZyb21CcmFja2V0LCBmYVNpZ25PdXRBbHQsIGZhQXRvbSwgZmFTb2FwLCBmYUljb25zLCBmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0LCBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLCBmYU1pY3JvcGhvbmVBbHRTbGFzaCwgZmFCcmlkZ2VDaXJjbGVDaGVjaywgZmFQdW1wTWVkaWNhbCwgZmFGaW5nZXJwcmludCwgZmFIYW5kUG9pbnRSaWdodCwgZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbiwgZmFTZWFyY2hMb2NhdGlvbiwgZmFGb3J3YXJkU3RlcCwgZmFTdGVwRm9yd2FyZCwgZmFGYWNlU21pbGVCZWFtLCBmYVNtaWxlQmVhbSwgZmFGbGFnQ2hlY2tlcmVkLCBmYUZvb3RiYWxsLCBmYUZvb3RiYWxsQmFsbCwgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiwgZmFDcm9wLCBmYUFuZ2xlc0Rvd24sIGZhQW5nbGVEb3VibGVEb3duLCBmYVVzZXJzUmVjdGFuZ2xlLCBmYVBlb3BsZVJvb2YsIGZhUGVvcGxlTGluZSwgZmFCZWVyTXVnRW1wdHksIGZhQmVlciwgZmFEaWFncmFtUHJlZGVjZXNzb3IsIGZhQXJyb3dVcExvbmcsIGZhTG9uZ0Fycm93VXAsIGZhRmlyZUZsYW1lU2ltcGxlLCBmYUJ1cm4sIGZhUGVyc29uLCBmYU1hbGUsIGZhTGFwdG9wLCBmYUZpbGVDc3YsIGZhTWVub3JhaCwgZmFUcnVja1BsYW5lLCBmYVJlY29yZFZpbnlsLCBmYUZhY2VHcmluU3RhcnMsIGZhR3JpblN0YXJzLCBmYUJvbmcsIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZywgZmFQYXN0YWZhcmlhbmlzbSwgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsIGZhU3Bvb24sIGZhVXRlbnNpbFNwb29uLCBmYUphcldoZWF0LCBmYUVudmVsb3Blc0J1bGssIGZhTWFpbEJ1bGssIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUNpcmNsZUgsIGZhSG9zcGl0YWxTeW1ib2wsIGZhUGFnZXIsIGZhQWRkcmVzc0Jvb2ssIGZhQ29udGFjdEJvb2ssIGZhU3RyaWtldGhyb3VnaCwgZmFLLCBmYUxhbmRtYXJrRmxhZywgZmFQZW5jaWwsIGZhUGVuY2lsQWx0LCBmYUJhY2t3YXJkLCBmYUNhcmV0UmlnaHQsIGZhQ29tbWVudHMsIGZhUGFzdGUsIGZhRmlsZUNsaXBib2FyZCwgZmFDb2RlUHVsbFJlcXVlc3QsIGZhQ2xpcGJvYXJkTGlzdCwgZmFUcnVja1JhbXBCb3gsIGZhVHJ1Y2tMb2FkaW5nLCBmYVVzZXJDaGVjaywgZmFWaWFsVmlydXMsIGZhU2hlZXRQbGFzdGljLCBmYUJsb2csIGZhVXNlck5pbmphLCBmYVBlcnNvbkFycm93VXBGcm9tTGluZSwgZmFTY3JvbGxUb3JhaCwgZmFUb3JhaCwgZmFCcm9vbUJhbGwsIGZhUXVpZGRpdGNoLCBmYVF1aWRkaXRjaEJyb29tQmFsbCwgZmFUb2dnbGVPZmYsIGZhQm94QXJjaGl2ZSwgZmFBcmNoaXZlLCBmYVBlcnNvbkRyb3duaW5nLCBmYUFycm93RG93bjkxLCBmYVNvcnROdW1lcmljRGVzYywgZmFTb3J0TnVtZXJpY0Rvd25BbHQsIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsIGZhR3JpblRvbmd1ZVNxdWludCwgZmFTcHJheUNhbiwgZmFUcnVja01vbnN0ZXIsIGZhVywgZmFFYXJ0aEFmcmljYSwgZmFHbG9iZUFmcmljYSwgZmFSYWluYm93LCBmYUNpcmNsZU5vdGNoLCBmYVRhYmxldFNjcmVlbkJ1dHRvbiwgZmFUYWJsZXRBbHQsIGZhUGF3LCBmYUNsb3VkLCBmYVRyb3dlbEJyaWNrcywgZmFGYWNlRmx1c2hlZCwgZmFGbHVzaGVkLCBmYUhvc3BpdGFsVXNlciwgZmFUZW50QXJyb3dMZWZ0UmlnaHQsIGZhR2F2ZWwsIGZhTGVnYWwsIGZhQmlub2N1bGFycywgZmFNaWNyb3Bob25lU2xhc2gsIGZhQm94VGlzc3VlLCBmYU1vdG9yY3ljbGUsIGZhQmVsbENvbmNpZXJnZSwgZmFDb25jaWVyZ2VCZWxsLCBmYVBlblJ1bGVyLCBmYVBlbmNpbFJ1bGVyLCBmYVBlb3BsZUFycm93cywgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsIGZhTWFyc0FuZFZlbnVzQnVyc3QsIGZhU3F1YXJlQ2FyZXRSaWdodCwgZmFDYXJldFNxdWFyZVJpZ2h0LCBmYVNjaXNzb3JzLCBmYUN1dCwgZmFTdW5QbGFudFdpbHQsIGZhVG9pbGV0c1BvcnRhYmxlLCBmYUhvY2tleVB1Y2ssIGZhVGFibGUsIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCwgZmFUYWNob2dyYXBoRGlnaXRhbCwgZmFEaWdpdGFsVGFjaG9ncmFwaCwgZmFVc2Vyc1NsYXNoLCBmYUNsb3ZlciwgZmFSZXBseSwgZmFNYWlsUmVwbHksIGZhU3RhckFuZENyZXNjZW50LCBmYUhvdXNlRmlyZSwgZmFTcXVhcmVNaW51cywgZmFNaW51c1NxdWFyZSwgZmFIZWxpY29wdGVyLCBmYUNvbXBhc3MsIGZhU3F1YXJlQ2FyZXREb3duLCBmYUNhcmV0U3F1YXJlRG93biwgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sIGZhTGFwdG9wQ29kZSwgZmFTd2F0Y2hib29rLCBmYVByZXNjcmlwdGlvbkJvdHRsZSwgZmFCYXJzLCBmYU5hdmljb24sIGZhUGVvcGxlR3JvdXAsIGZhSG91cmdsYXNzRW5kLCBmYUhvdXJnbGFzczMsIGZhSGVhcnRDcmFjaywgZmFIZWFydEJyb2tlbiwgZmFTcXVhcmVVcFJpZ2h0LCBmYUV4dGVybmFsTGlua1NxdWFyZUFsdCwgZmFGYWNlS2lzc0JlYW0sIGZhS2lzc0JlYW0sIGZhRmlsbSwgZmFSdWxlckhvcml6b250YWwsIGZhUGVvcGxlUm9iYmVyeSwgZmFMaWdodGJ1bGIsIGZhQ2FyZXRMZWZ0LCBmYUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUV4Y2xhbWF0aW9uQ2lyY2xlLCBmYVNjaG9vbENpcmNsZVhtYXJrLCBmYUFycm93UmlnaHRGcm9tQnJhY2tldCwgZmFTaWduT3V0LCBmYUNpcmNsZUNoZXZyb25Eb3duLCBmYUNoZXZyb25DaXJjbGVEb3duLCBmYVVubG9ja0tleWhvbGUsIGZhVW5sb2NrQWx0LCBmYUNsb3VkU2hvd2Vyc0hlYXZ5LCBmYUhlYWRwaG9uZXNTaW1wbGUsIGZhSGVhZHBob25lc0FsdCwgZmFTaXRlbWFwLCBmYUNpcmNsZURvbGxhclRvU2xvdCwgZmFEb25hdGUsIGZhTWVtb3J5LCBmYVJvYWRTcGlrZXMsIGZhRmlyZUJ1cm5lciwgZmFGbGFnLCBmYUhhbnVraWFoLCBmYUZlYXRoZXIsIGZhVm9sdW1lTG93LCBmYVZvbHVtZURvd24sIGZhQ29tbWVudFNsYXNoLCBmYUNsb3VkU3VuUmFpbiwgZmFDb21wcmVzcywgZmFXaGVhdEF3biwgZmFXaGVhdEFsdCwgZmFBbmtoLCBmYUhhbmRzSG9sZGluZ0NoaWxkLCBmYUFzdGVyaXNrLCBmYVNxdWFyZUNoZWNrLCBmYUNoZWNrU3F1YXJlLCBmYVBlc2V0YVNpZ24sIGZhSGVhZGluZywgZmFIZWFkZXIsIGZhR2hvc3QsIGZhTGlzdCwgZmFMaXN0U3F1YXJlcywgZmFTcXVhcmVQaG9uZUZsaXAsIGZhUGhvbmVTcXVhcmVBbHQsIGZhQ2FydFBsdXMsIGZhR2FtZXBhZCwgZmFDaXJjbGVEb3QsIGZhRG90Q2lyY2xlLCBmYUZhY2VEaXp6eSwgZmFEaXp6eSwgZmFFZ2csIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssIGZhQ2FtcGdyb3VuZCwgZmFGb2xkZXJQbHVzLCBmYUZ1dGJvbCwgZmFGdXRib2xCYWxsLCBmYVNvY2NlckJhbGwsIGZhUGFpbnRicnVzaCwgZmFQYWludEJydXNoLCBmYUxvY2ssIGZhR2FzUHVtcCwgZmFIb3RUdWJQZXJzb24sIGZhSG90VHViLCBmYU1hcExvY2F0aW9uLCBmYU1hcE1hcmtlZCwgZmFIb3VzZUZsb29kV2F0ZXIsIGZhVHJlZSwgZmFCcmlkZ2VMb2NrLCBmYVNhY2tEb2xsYXIsIGZhUGVuVG9TcXVhcmUsIGZhRWRpdCwgZmFDYXJTaWRlLCBmYVNoYXJlTm9kZXMsIGZhU2hhcmVBbHQsIGZhSGVhcnRDaXJjbGVNaW51cywgZmFIb3VyZ2xhc3NIYWxmLCBmYUhvdXJnbGFzczIsIGZhTWljcm9zY29wZSwgZmFTaW5rLCBmYUJhZ1Nob3BwaW5nLCBmYVNob3BwaW5nQmFnLCBmYUFycm93RG93blpBLCBmYVNvcnRBbHBoYURlc2MsIGZhU29ydEFscGhhRG93bkFsdCwgZmFNaXR0ZW4sIGZhUGVyc29uUmF5cywgZmFVc2VycywgZmFFeWVTbGFzaCwgZmFGbGFza1ZpYWwsIGZhSGFuZCwgZmFIYW5kUGFwZXIsIGZhT20sIGZhV29ybSwgZmFIb3VzZUNpcmNsZVhtYXJrLCBmYVBsdWcsIGZhQ2hldnJvblVwLCBmYUhhbmRTcG9jaywgZmFTdG9wd2F0Y2gsIGZhRmFjZUtpc3MsIGZhS2lzcywgZmFCcmlkZ2VDaXJjbGVYbWFyaywgZmFGYWNlR3JpblRvbmd1ZSwgZmFHcmluVG9uZ3VlLCBmYUNoZXNzQmlzaG9wLCBmYUZhY2VHcmluV2luaywgZmFHcmluV2luaywgZmFFYXJEZWFmLCBmYURlYWYsIGZhRGVhZm5lc3MsIGZhSGFyZE9mSGVhcmluZywgZmFSb2FkQ2lyY2xlQ2hlY2ssIGZhRGljZUZpdmUsIGZhU3F1YXJlUnNzLCBmYVJzc1NxdWFyZSwgZmFMYW5kTWluZU9uLCBmYUlDdXJzb3IsIGZhU3RhbXAsIGZhU3RhaXJzLCBmYUksIGZhSHJ5dm5pYVNpZ24sIGZhSHJ5dm5pYSwgZmFQaWxscywgZmFGYWNlR3JpbldpZGUsIGZhR3JpbkFsdCwgZmFUb290aCwgZmFWLCBmYUJhbmdsYWRlc2hpVGFrYVNpZ24sIGZhQmljeWNsZSwgZmFTdGFmZlNuYWtlLCBmYVJvZEFzY2xlcGl1cywgZmFSb2RTbmFrZSwgZmFTdGFmZkFlc2N1bGFwaXVzLCBmYUhlYWRTaWRlQ291Z2hTbGFzaCwgZmFUcnVja01lZGljYWwsIGZhQW1idWxhbmNlLCBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24sIGZhU25vd21hbiwgZmFNb3J0YXJQZXN0bGUsIGZhUm9hZEJhcnJpZXIsIGZhU2Nob29sLCBmYUlnbG9vLCBmYUpvaW50LCBmYUFuZ2xlUmlnaHQsIGZhSG9yc2UsIGZhUSwgZmFHLCBmYU5vdGVzTWVkaWNhbCwgZmFUZW1wZXJhdHVyZUhhbGYsIGZhVGVtcGVyYXR1cmUyLCBmYVRoZXJtb21ldGVyMiwgZmFUaGVybW9tZXRlckhhbGYsIGZhRG9uZ1NpZ24sIGZhQ2Fwc3VsZXMsIGZhUG9vU3Rvcm0sIGZhUG9vQm9sdCwgZmFGYWNlRnJvd25PcGVuLCBmYUZyb3duT3BlbiwgZmFIYW5kUG9pbnRVcCwgZmFNb25leUJpbGwsIGZhQm9va21hcmssIGZhQWxpZ25KdXN0aWZ5LCBmYVVtYnJlbGxhQmVhY2gsIGZhSGVsbWV0VW4sIGZhQnVsbHNleWUsIGZhQmFjb24sIGZhSGFuZFBvaW50RG93biwgZmFBcnJvd1VwRnJvbUJyYWNrZXQsIGZhRm9sZGVyLCBmYUZvbGRlckJsYW5rLCBmYUZpbGVXYXZlZm9ybSwgZmFGaWxlTWVkaWNhbEFsdCwgZmFSYWRpYXRpb24sIGZhQ2hhcnRTaW1wbGUsIGZhTWFyc1N0cm9rZSwgZmFWaWFsLCBmYUdhdWdlLCBmYURhc2hib2FyZCwgZmFHYXVnZU1lZCwgZmFUYWNob21ldGVyQWx0QXZlcmFnZSwgZmFXYW5kTWFnaWNTcGFya2xlcywgZmFNYWdpY1dhbmRTcGFya2xlcywgZmFFLCBmYVBlbkNsaXAsIGZhUGVuQWx0LCBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYVVzZXIsIGZhU2Nob29sQ2lyY2xlQ2hlY2ssIGZhRHVtcHN0ZXIsIGZhVmFuU2h1dHRsZSwgZmFTaHV0dGxlVmFuLCBmYUJ1aWxkaW5nVXNlciwgZmFTcXVhcmVDYXJldExlZnQsIGZhQ2FyZXRTcXVhcmVMZWZ0LCBmYUhpZ2hsaWdodGVyLCBmYUtleSwgZmFCdWxsaG9ybiwgZmFHbG9iZSwgZmFTeW5hZ29ndWUsIGZhUGVyc29uSGFsZkRyZXNzLCBmYVJvYWRCcmlkZ2UsIGZhTG9jYXRpb25BcnJvdywgZmFDLCBmYVRhYmxldEJ1dHRvbiwgZmFCdWlsZGluZ0xvY2ssIGZhUGl6emFTbGljZSwgZmFNb25leUJpbGxXYXZlLCBmYUNoYXJ0QXJlYSwgZmFBcmVhQ2hhcnQsIGZhSG91c2VGbGFnLCBmYVBlcnNvbkNpcmNsZU1pbnVzLCBmYUJhbiwgZmFDYW5jZWwsIGZhQ2FtZXJhUm90YXRlLCBmYVNwcmF5Q2FuU3BhcmtsZXMsIGZhQWlyRnJlc2hlbmVyLCBmYVN0YXIsIGZhUmVwZWF0LCBmYUNyb3NzLCBmYUJveCwgZmFWZW51c01hcnMsIGZhQXJyb3dQb2ludGVyLCBmYU1vdXNlUG9pbnRlciwgZmFNYXhpbWl6ZSwgZmFFeHBhbmRBcnJvd3NBbHQsIGZhQ2hhcmdpbmdTdGF0aW9uLCBmYVNoYXBlcywgZmFUcmlhbmdsZUNpcmNsZVNxdWFyZSwgZmFTaHVmZmxlLCBmYVJhbmRvbSwgZmFQZXJzb25SdW5uaW5nLCBmYVJ1bm5pbmcsIGZhTW9iaWxlUmV0cm8sIGZhR3JpcExpbmVzVmVydGljYWwsIGZhU3BpZGVyLCBmYUhhbmRzQm91bmQsIGZhRmlsZUludm9pY2VEb2xsYXIsIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiwgZmFYUmF5LCBmYVNwZWxsQ2hlY2ssIGZhU2xhc2gsIGZhQ29tcHV0ZXJNb3VzZSwgZmFNb3VzZSwgZmFBcnJvd1JpZ2h0VG9CcmFja2V0LCBmYVNpZ25JbiwgZmFTaG9wU2xhc2gsIGZhU3RvcmVBbHRTbGFzaCwgZmFTZXJ2ZXIsIGZhVmlydXNDb3ZpZFNsYXNoLCBmYVNob3BMb2NrLCBmYUhvdXJnbGFzc1N0YXJ0LCBmYUhvdXJnbGFzczEsIGZhQmxlbmRlclBob25lLCBmYUJ1aWxkaW5nV2hlYXQsIGZhUGVyc29uQnJlYXN0ZmVlZGluZywgZmFSaWdodFRvQnJhY2tldCwgZmFTaWduSW5BbHQsIGZhVmVudXMsIGZhUGFzc3BvcnQsIGZhVGh1bWJ0YWNrU2xhc2gsIGZhVGh1bWJUYWNrU2xhc2gsIGZhSGVhcnRQdWxzZSwgZmFIZWFydGJlYXQsIGZhUGVvcGxlQ2FycnlCb3gsIGZhUGVvcGxlQ2FycnksIGZhVGVtcGVyYXR1cmVIaWdoLCBmYU1pY3JvY2hpcCwgZmFDcm93biwgZmFXZWlnaHRIYW5naW5nLCBmYVhtYXJrc0xpbmVzLCBmYUZpbGVQcmVzY3JpcHRpb24sIGZhV2VpZ2h0U2NhbGUsIGZhV2VpZ2h0LCBmYVVzZXJHcm91cCwgZmFVc2VyRnJpZW5kcywgZmFBcnJvd1VwQVosIGZhU29ydEFscGhhVXAsIGZhQ2hlc3NLbmlnaHQsIGZhRmFjZUxhdWdoU3F1aW50LCBmYUxhdWdoU3F1aW50LCBmYVdoZWVsY2hhaXIsIGZhQ2lyY2xlQXJyb3dVcCwgZmFBcnJvd0NpcmNsZVVwLCBmYVRvZ2dsZU9uLCBmYVBlcnNvbldhbGtpbmcsIGZhV2Fsa2luZywgZmFMLCBmYUZpcmUsIGZhQmVkUHVsc2UsIGZhUHJvY2VkdXJlcywgZmFTaHV0dGxlU3BhY2UsIGZhU3BhY2VTaHV0dGxlLCBmYUZhY2VMYXVnaCwgZmFMYXVnaCwgZmFGb2xkZXJPcGVuLCBmYUhlYXJ0Q2lyY2xlUGx1cywgZmFDb2RlRm9yaywgZmFDaXR5LCBmYU1pY3JvcGhvbmVMaW5lcywgZmFNaWNyb3Bob25lQWx0LCBmYVBlcHBlckhvdCwgZmFVbmxvY2ssIGZhQ29sb25TaWduLCBmYUhlYWRzZXQsIGZhU3RvcmVTbGFzaCwgZmFSb2FkQ2lyY2xlWG1hcmssIGZhVXNlck1pbnVzLCBmYU1hcnNTdHJva2VVcCwgZmFNYXJzU3Ryb2tlViwgZmFDaGFtcGFnbmVHbGFzc2VzLCBmYUdsYXNzQ2hlZXJzLCBmYUNsaXBib2FyZCwgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUZpbGVBcnJvd1VwLCBmYUZpbGVVcGxvYWQsIGZhV2lmaSwgZmFXaWZpMywgZmFXaWZpU3Ryb25nLCBmYUJhdGgsIGZhQmF0aHR1YiwgZmFVbmRlcmxpbmUsIGZhVXNlclBlbiwgZmFVc2VyRWRpdCwgZmFTaWduYXR1cmUsIGZhU3Ryb29wd2FmZWwsIGZhQm9sZCwgZmFBbmNob3JMb2NrLCBmYUJ1aWxkaW5nTmdvLCBmYU1hbmF0U2lnbiwgZmFOb3RFcXVhbCwgZmFCb3JkZXJUb3BMZWZ0LCBmYUJvcmRlclN0eWxlLCBmYU1hcExvY2F0aW9uRG90LCBmYU1hcE1hcmtlZEFsdCwgZmFKZWRpLCBmYVNxdWFyZVBvbGxWZXJ0aWNhbCwgZmFQb2xsLCBmYU11Z0hvdCwgZmFDYXJCYXR0ZXJ5LCBmYUJhdHRlcnlDYXIsIGZhR2lmdCwgZmFEaWNlVHdvLCBmYUNoZXNzUXVlZW4sIGZhR2xhc3NlcywgZmFDaGVzc0JvYXJkLCBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssIGZhUGVyc29uQ2hhbGtib2FyZCwgZmFNYXJzU3Ryb2tlUmlnaHQsIGZhTWFyc1N0cm9rZUgsIGZhSGFuZEJhY2tGaXN0LCBmYUhhbmRSb2NrLCBmYVNxdWFyZUNhcmV0VXAsIGZhQ2FyZXRTcXVhcmVVcCwgZmFDbG91ZFNob3dlcnNXYXRlciwgZmFDaGFydEJhciwgZmFCYXJDaGFydCwgZmFIYW5kc0J1YmJsZXMsIGZhSGFuZHNXYXNoLCBmYUxlc3NUaGFuRXF1YWwsIGZhVHJhaW4sIGZhRXllTG93VmlzaW9uLCBmYUxvd1Zpc2lvbiwgZmFDcm93LCBmYVNhaWxib2F0LCBmYVdpbmRvd1Jlc3RvcmUsIGZhU3F1YXJlUGx1cywgZmFQbHVzU3F1YXJlLCBmYVRvcmlpR2F0ZSwgZmFGcm9nLCBmYUJ1Y2tldCwgZmFJbWFnZSwgZmFNaWNyb3Bob25lLCBmYUNvdywgZmFDYXJldFVwLCBmYVNjcmV3ZHJpdmVyLCBmYUZvbGRlckNsb3NlZCwgZmFIb3VzZVRzdW5hbWksIGZhU3F1YXJlTmZpLCBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsIGZhTWFydGluaUdsYXNzLCBmYUdsYXNzTWFydGluaUFsdCwgZmFSb3RhdGVMZWZ0LCBmYVJvdGF0ZUJhY2ssIGZhUm90YXRlQmFja3dhcmQsIGZhVW5kb0FsdCwgZmFUYWJsZUNvbHVtbnMsIGZhQ29sdW1ucywgZmFMZW1vbiwgZmFIZWFkU2lkZU1hc2ssIGZhSGFuZHNoYWtlLCBmYUdlbSwgZmFEb2xseSwgZmFEb2xseUJveCwgZmFTbW9raW5nLCBmYU1pbmltaXplLCBmYUNvbXByZXNzQXJyb3dzQWx0LCBmYU1vbnVtZW50LCBmYVNub3dwbG93LCBmYUFuZ2xlc1JpZ2h0LCBmYUFuZ2xlRG91YmxlUmlnaHQsIGZhQ2FubmFiaXMsIGZhQ2lyY2xlUGxheSwgZmFQbGF5Q2lyY2xlLCBmYVRhYmxldHMsIGZhRXRoZXJuZXQsIGZhRXVyb1NpZ24sIGZhRXVyLCBmYUV1cm8sIGZhQ2hhaXIsIGZhQ2lyY2xlQ2hlY2ssIGZhQ2hlY2tDaXJjbGUsIGZhQ2lyY2xlU3RvcCwgZmFTdG9wQ2lyY2xlLCBmYUNvbXBhc3NEcmFmdGluZywgZmFEcmFmdGluZ0NvbXBhc3MsIGZhUGxhdGVXaGVhdCwgZmFJY2ljbGVzLCBmYVBlcnNvblNoZWx0ZXIsIGZhTmV1dGVyLCBmYUlkQmFkZ2UsIGZhTWFya2VyLCBmYUZhY2VMYXVnaEJlYW0sIGZhTGF1Z2hCZWFtLCBmYUhlbGljb3B0ZXJTeW1ib2wsIGZhVW5pdmVyc2FsQWNjZXNzLCBmYUNpcmNsZUNoZXZyb25VcCwgZmFDaGV2cm9uQ2lyY2xlVXAsIGZhTGFyaVNpZ24sIGZhVm9sY2FubywgZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQsIGZhU3RlcmxpbmdTaWduLCBmYUdicCwgZmFQb3VuZFNpZ24sIGZhVmlydXNlcywgZmFTcXVhcmVQZXJzb25Db25maW5lZCwgZmFVc2VyVGllLCBmYUFycm93RG93bkxvbmcsIGZhTG9uZ0Fycm93RG93biwgZmFUZW50QXJyb3dEb3duVG9MaW5lLCBmYUNlcnRpZmljYXRlLCBmYVJlcGx5QWxsLCBmYU1haWxSZXBseUFsbCwgZmFTdWl0Y2FzZSwgZmFQZXJzb25Ta2F0aW5nLCBmYVNrYXRpbmcsIGZhRmlsdGVyQ2lyY2xlRG9sbGFyLCBmYUZ1bm5lbERvbGxhciwgZmFDYW1lcmFSZXRybywgZmFDaXJjbGVBcnJvd0Rvd24sIGZhQXJyb3dDaXJjbGVEb3duLCBmYUZpbGVJbXBvcnQsIGZhQXJyb3dSaWdodFRvRmlsZSwgZmFTcXVhcmVBcnJvd1VwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLCBmYUJveE9wZW4sIGZhU2Nyb2xsLCBmYVNwYSwgZmFMb2NhdGlvblBpbkxvY2ssIGZhUGF1c2UsIGZhSGlsbEF2YWxhbmNoZSwgZmFUZW1wZXJhdHVyZUVtcHR5LCBmYVRlbXBlcmF0dXJlMCwgZmFUaGVybW9tZXRlcjAsIGZhVGhlcm1vbWV0ZXJFbXB0eSwgZmFCb21iLCBmYVJlZ2lzdGVyZWQsIGZhQWRkcmVzc0NhcmQsIGZhQ29udGFjdENhcmQsIGZhVmNhcmQsIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCwgZmFCYWxhbmNlU2NhbGVSaWdodCwgZmFTdWJzY3JpcHQsIGZhRGlhbW9uZFR1cm5SaWdodCwgZmFEaXJlY3Rpb25zLCBmYUJ1cnN0LCBmYUhvdXNlTGFwdG9wLCBmYUxhcHRvcEhvdXNlLCBmYUZhY2VUaXJlZCwgZmFUaXJlZCwgZmFNb25leUJpbGxzLCBmYVNtb2csIGZhQ3J1dGNoLCBmYUZvbnRBd2Vzb21lLCBmYUZvbnRBd2Vzb21lRmxhZywgZmFGb250QXdlc29tZUxvZ29GdWxsLCBmYUNsb3VkQXJyb3dVcCwgZmFDbG91ZFVwbG9hZCwgZmFDbG91ZFVwbG9hZEFsdCwgZmFQYWxldHRlLCBmYUFycm93c1R1cm5SaWdodCwgZmFWZXN0LCBmYUZlcnJ5LCBmYUFycm93c0Rvd25Ub1Blb3BsZSwgZmFTZWVkbGluZywgZmFTcHJvdXQsIGZhTGVmdFJpZ2h0LCBmYUFycm93c0FsdEgsIGZhQm94ZXNQYWNraW5nLCBmYUNpcmNsZUFycm93TGVmdCwgZmFBcnJvd0NpcmNsZUxlZnQsIGZhR3JvdXBBcnJvd3NSb3RhdGUsIGZhQm93bEZvb2QsIGZhQ2FuZHlDYW5lLCBmYUFycm93RG93bldpZGVTaG9ydCwgZmFTb3J0QW1vdW50QXNjLCBmYVNvcnRBbW91bnREb3duLCBmYUNsb3VkQm9sdCwgZmFUaHVuZGVyc3Rvcm0sIGZhVGV4dFNsYXNoLCBmYVJlbW92ZUZvcm1hdCwgZmFGYWNlU21pbGVXaW5rLCBmYVNtaWxlV2luaywgZmFGaWxlV29yZCwgZmFGaWxlUG93ZXJwb2ludCwgZmFBcnJvd3NMZWZ0UmlnaHQsIGZhQXJyb3dzSCwgZmFIb3VzZUxvY2ssIGZhQ2xvdWRBcnJvd0Rvd24sIGZhQ2xvdWREb3dubG9hZCwgZmFDbG91ZERvd25sb2FkQWx0LCBmYUNoaWxkcmVuLCBmYUNoYWxrYm9hcmQsIGZhQmxhY2tib2FyZCwgZmFVc2VyTGFyZ2VTbGFzaCwgZmFVc2VyQWx0U2xhc2gsIGZhRW52ZWxvcGVPcGVuLCBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLCBmYUhhbmRzaGFrZUFsdFNsYXNoLCBmYU1hdHRyZXNzUGlsbG93LCBmYUd1YXJhbmlTaWduLCBmYUFycm93c1JvdGF0ZSwgZmFSZWZyZXNoLCBmYVN5bmMsIGZhRmlyZUV4dGluZ3Vpc2hlciwgZmFDcnV6ZWlyb1NpZ24sIGZhR3JlYXRlclRoYW5FcXVhbCwgZmFTaGllbGRIYWx2ZWQsIGZhU2hpZWxkQWx0LCBmYUJvb2tBdGxhcywgZmFBdGxhcywgZmFWaXJ1cywgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLCBmYUxheWVyR3JvdXAsIGZhQXJyb3dzVG9Eb3QsIGZhQXJjaHdheSwgZmFIZWFydENpcmNsZUNoZWNrLCBmYUhvdXNlQ2hpbW5leUNyYWNrLCBmYUhvdXNlRGFtYWdlLCBmYUZpbGVaaXBwZXIsIGZhRmlsZUFyY2hpdmUsIGZhU3F1YXJlLCBmYU1hcnRpbmlHbGFzc0VtcHR5LCBmYUdsYXNzTWFydGluaSwgZmFDb3VjaCwgZmFDZWRpU2lnbiwgZmFJdGFsaWMsIGZhVGFibGVDZWxsc0NvbHVtbkxvY2ssIGZhQ2h1cmNoLCBmYUNvbW1lbnRzRG9sbGFyLCBmYURlbW9jcmF0LCBmYVosIGZhUGVyc29uU2tpaW5nLCBmYVNraWluZywgZmFSb2FkTG9jaywgZmFBLCBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLCBmYVRlbXBlcmF0dXJlRG93biwgZmFGZWF0aGVyUG9pbnRlZCwgZmFGZWF0aGVyQWx0LCBmYVAsIGZhU25vd2ZsYWtlLCBmYU5ld3NwYXBlciwgZmFSZWN0YW5nbGVBZCwgZmFBZCwgZmFDaXJjbGVBcnJvd1JpZ2h0LCBmYUFycm93Q2lyY2xlUmlnaHQsIGZhRmlsdGVyQ2lyY2xlWG1hcmssIGZhTG9jdXN0LCBmYVNvcnQsIGZhVW5zb3J0ZWQsIGZhTGlzdE9sLCBmYUxpc3QxMiwgZmFMaXN0TnVtZXJpYywgZmFQZXJzb25EcmVzc0J1cnN0LCBmYU1vbmV5Q2hlY2tEb2xsYXIsIGZhTW9uZXlDaGVja0FsdCwgZmFWZWN0b3JTcXVhcmUsIGZhQnJlYWRTbGljZSwgZmFMYW5ndWFnZSwgZmFGYWNlS2lzc1dpbmtIZWFydCwgZmFLaXNzV2lua0hlYXJ0LCBmYUZpbHRlciwgZmFRdWVzdGlvbiwgZmFGaWxlU2lnbmF0dXJlLCBmYVVwRG93bkxlZnRSaWdodCwgZmFBcnJvd3NBbHQsIGZhSG91c2VDaGltbmV5VXNlciwgZmFIYW5kSG9sZGluZ0hlYXJ0LCBmYVB1enpsZVBpZWNlLCBmYU1vbmV5Q2hlY2ssIGZhU3RhckhhbGZTdHJva2UsIGZhU3RhckhhbGZBbHQsIGZhQ29kZSwgZmFXaGlza2V5R2xhc3MsIGZhR2xhc3NXaGlza2V5LCBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24sIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQsIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSwgZmFFeHRlcm5hbExpbmssIGZhQ3ViZXNTdGFja2VkLCBmYVdvblNpZ24sIGZhS3J3LCBmYVdvbiwgZmFWaXJ1c0NvdmlkLCBmYUF1c3RyYWxTaWduLCBmYUYsIGZhTGVhZiwgZmFSb2FkLCBmYVRheGksIGZhQ2FiLCBmYVBlcnNvbkNpcmNsZVBsdXMsIGZhQ2hhcnRQaWUsIGZhUGllQ2hhcnQsIGZhQm9sdExpZ2h0bmluZywgZmFTYWNrWG1hcmssIGZhRmlsZUV4Y2VsLCBmYUZpbGVDb250cmFjdCwgZmFGaXNoRmlucywgZmFCdWlsZGluZ0ZsYWcsIGZhRmFjZUdyaW5CZWFtLCBmYUdyaW5CZWFtLCBmYU9iamVjdFVuZ3JvdXAsIGZhUG9vcCwgZmFMb2NhdGlvblBpbiwgZmFNYXBNYXJrZXIsIGZhS2FhYmEsIGZhVG9pbGV0UGFwZXIsIGZhSGVsbWV0U2FmZXR5LCBmYUhhcmRIYXQsIGZhSGF0SGFyZCwgZmFFamVjdCwgZmFDaXJjbGVSaWdodCwgZmFBcnJvd0FsdENpcmNsZVJpZ2h0LCBmYVBsYW5lQ2lyY2xlQ2hlY2ssIGZhRmFjZVJvbGxpbmdFeWVzLCBmYU1laFJvbGxpbmdFeWVzLCBmYU9iamVjdEdyb3VwLCBmYUNoYXJ0TGluZSwgZmFMaW5lQ2hhcnQsIGZhTWFza1ZlbnRpbGF0b3IsIGZhQXJyb3dSaWdodCwgZmFTaWduc1Bvc3QsIGZhTWFwU2lnbnMsIGZhQ2FzaFJlZ2lzdGVyLCBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLCBmYUgsIGZhVGFycCwgZmFTY3Jld2RyaXZlcldyZW5jaCwgZmFUb29scywgZmFBcnJvd3NUb0V5ZSwgZmFQbHVnQ2lyY2xlQm9sdCwgZmFIZWFydCwgZmFNYXJzQW5kVmVudXMsIGZhSG91c2VVc2VyLCBmYUhvbWVVc2VyLCBmYUR1bXBzdGVyRmlyZSwgZmFIb3VzZUNyYWNrLCBmYU1hcnRpbmlHbGFzc0NpdHJ1cywgZmFDb2NrdGFpbCwgZmFGYWNlU3VycHJpc2UsIGZhU3VycHJpc2UsIGZhQm90dGxlV2F0ZXIsIGZhQ2lyY2xlUGF1c2UsIGZhUGF1c2VDaXJjbGUsIGZhVG9pbGV0UGFwZXJTbGFzaCwgZmFBcHBsZVdob2xlLCBmYUFwcGxlQWx0LCBmYUtpdGNoZW5TZXQsIGZhUiwgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsIGZhVGVtcGVyYXR1cmUxLCBmYVRoZXJtb21ldGVyMSwgZmFUaGVybW9tZXRlclF1YXJ0ZXIsIGZhQ3ViZSwgZmFCaXRjb2luU2lnbiwgZmFTaGllbGREb2csIGZhU29sYXJQYW5lbCwgZmFMb2NrT3BlbiwgZmFFbGV2YXRvciwgZmFNb25leUJpbGxUcmFuc2ZlciwgZmFNb25leUJpbGxUcmVuZFVwLCBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQsIGZhU3F1YXJlUG9sbEhvcml6b250YWwsIGZhUG9sbEgsIGZhQ2lyY2xlLCBmYUJhY2t3YXJkRmFzdCwgZmFGYXN0QmFja3dhcmQsIGZhUmVjeWNsZSwgZmFVc2VyQXN0cm9uYXV0LCBmYVBsYW5lU2xhc2gsIGZhVHJhZGVtYXJrLCBmYUJhc2tldGJhbGwsIGZhQmFza2V0YmFsbEJhbGwsIGZhU2F0ZWxsaXRlRGlzaCwgZmFDaXJjbGVVcCwgZmFBcnJvd0FsdENpcmNsZVVwLCBmYU1vYmlsZVNjcmVlbkJ1dHRvbiwgZmFNb2JpbGVBbHQsIGZhVm9sdW1lSGlnaCwgZmFWb2x1bWVVcCwgZmFVc2Vyc1JheXMsIGZhV2FsbGV0LCBmYUNsaXBib2FyZENoZWNrLCBmYUZpbGVBdWRpbywgZmFCdXJnZXIsIGZhSGFtYnVyZ2VyLCBmYVdyZW5jaCwgZmFCdWdzLCBmYVJ1cGVlU2lnbiwgZmFSdXBlZSwgZmFGaWxlSW1hZ2UsIGZhQ2lyY2xlUXVlc3Rpb24sIGZhUXVlc3Rpb25DaXJjbGUsIGZhUGxhbmVEZXBhcnR1cmUsIGZhSGFuZHNoYWtlU2xhc2gsIGZhQm9va0Jvb2ttYXJrLCBmYUNvZGVCcmFuY2gsIGZhSGF0Q293Ym95LCBmYUJyaWRnZSwgZmFQaG9uZUZsaXAsIGZhUGhvbmVBbHQsIGZhVHJ1Y2tGcm9udCwgZmFDYXQsIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sIGZhVHJ1Y2tGaWVsZCwgZmFSb3V0ZSwgZmFDbGlwYm9hcmRRdWVzdGlvbiwgZmFQYW5vcmFtYSwgZmFDb21tZW50TWVkaWNhbCwgZmFUZWV0aE9wZW4sIGZhRmlsZUNpcmNsZU1pbnVzLCBmYVRhZ3MsIGZhV2luZUdsYXNzLCBmYUZvcndhcmRGYXN0LCBmYUZhc3RGb3J3YXJkLCBmYUZhY2VNZWhCbGFuaywgZmFNZWhCbGFuaywgZmFTcXVhcmVQYXJraW5nLCBmYVBhcmtpbmcsIGZhSG91c2VTaWduYWwsIGZhQmFyc1Byb2dyZXNzLCBmYVRhc2tzQWx0LCBmYUZhdWNldERyaXAsIGZhQ2FydEZsYXRiZWQsIGZhRG9sbHlGbGF0YmVkLCBmYUJhblNtb2tpbmcsIGZhU21va2luZ0JhbiwgZmFUZXJtaW5hbCwgZmFNb2JpbGVCdXR0b24sIGZhSG91c2VNZWRpY2FsRmxhZywgZmFCYXNrZXRTaG9wcGluZywgZmFTaG9wcGluZ0Jhc2tldCwgZmFUYXBlLCBmYUJ1c1NpbXBsZSwgZmFCdXNBbHQsIGZhRXllLCBmYUZhY2VTYWRDcnksIGZhU2FkQ3J5LCBmYUF1ZGlvRGVzY3JpcHRpb24sIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiwgZmFGaWxlU2hpZWxkLCBmYVVzZXJTbGFzaCwgZmFQZW4sIGZhVG93ZXJPYnNlcnZhdGlvbiwgZmFGaWxlQ29kZSwgZmFTaWduYWwsIGZhU2lnbmFsNSwgZmFTaWduYWxQZXJmZWN0LCBmYUJ1cywgZmFIZWFydENpcmNsZVhtYXJrLCBmYUhvdXNlQ2hpbW5leSwgZmFIb21lTGcsIGZhV2luZG93TWF4aW1pemUsIGZhRmFjZUZyb3duLCBmYUZyb3duLCBmYVByZXNjcmlwdGlvbiwgZmFTaG9wLCBmYVN0b3JlQWx0LCBmYUZsb3BweURpc2ssIGZhU2F2ZSwgZmFWaWhhcmEsIGZhU2NhbGVVbmJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZUxlZnQsIGZhU29ydFVwLCBmYVNvcnRBc2MsIGZhQ29tbWVudERvdHMsIGZhQ29tbWVudGluZywgZmFQbGFudFdpbHQsIGZhRGlhbW9uZCwgZmFGYWNlR3JpblNxdWludCwgZmFHcmluU3F1aW50LCBmYUhhbmRIb2xkaW5nRG9sbGFyLCBmYUhhbmRIb2xkaW5nVXNkLCBmYUJhY3Rlcml1bSwgZmFIYW5kUG9pbnRlciwgZmFEcnVtU3RlZWxwYW4sIGZhSGFuZFNjaXNzb3JzLCBmYUhhbmRzUHJheWluZywgZmFQcmF5aW5nSGFuZHMsIGZhQXJyb3dSb3RhdGVSaWdodCwgZmFBcnJvd1JpZ2h0Um90YXRlLCBmYUFycm93Um90YXRlRm9yd2FyZCwgZmFSZWRvLCBmYVdlYkF3ZXNvbWUsIGZhQmlvaGF6YXJkLCBmYUxvY2F0aW9uQ3Jvc3NoYWlycywgZmFMb2NhdGlvbiwgZmFNYXJzRG91YmxlLCBmYUNoaWxkRHJlc3MsIGZhVXNlcnNCZXR3ZWVuTGluZXMsIGZhTHVuZ3NWaXJ1cywgZmFGYWNlR3JpblRlYXJzLCBmYUdyaW5UZWFycywgZmFQaG9uZSwgZmFDYWxlbmRhclhtYXJrLCBmYUNhbGVuZGFyVGltZXMsIGZhQ2hpbGRSZWFjaGluZywgZmFIZWFkU2lkZVZpcnVzLCBmYVVzZXJHZWFyLCBmYVVzZXJDb2csIGZhQXJyb3dVcDE5LCBmYVNvcnROdW1lcmljVXAsIGZhRG9vckNsb3NlZCwgZmFTaGllbGRWaXJ1cywgZmFEaWNlU2l4LCBmYU1vc3F1aXRvTmV0LCBmYUJyaWRnZVdhdGVyLCBmYVBlcnNvbkJvb3RoLCBmYVRleHRXaWR0aCwgZmFIYXRXaXphcmQsIGZhUGVuRmFuY3ksIGZhUGVyc29uRGlnZ2luZywgZmFEaWdnaW5nLCBmYVRyYXNoLCBmYUdhdWdlU2ltcGxlLCBmYUdhdWdlU2ltcGxlTWVkLCBmYVRhY2hvbWV0ZXJBdmVyYWdlLCBmYUJvb2tNZWRpY2FsLCBmYVBvbywgZmFRdW90ZVJpZ2h0LCBmYVF1b3RlUmlnaHRBbHQsIGZhU2hpcnQsIGZhVFNoaXJ0LCBmYVRzaGlydCwgZmFDdWJlcywgZmFEaXZpZGUsIGZhVGVuZ2VTaWduLCBmYVRlbmdlLCBmYUhlYWRwaG9uZXMsIGZhSGFuZHNIb2xkaW5nLCBmYUhhbmRzQ2xhcHBpbmcsIGZhUmVwdWJsaWNhbiwgZmFBcnJvd0xlZnQsIGZhUGVyc29uQ2lyY2xlWG1hcmssIGZhUnVsZXIsIGZhQWxpZ25MZWZ0LCBmYURpY2VENiwgZmFSZXN0cm9vbSwgZmFKLCBmYVVzZXJzVmlld2ZpbmRlciwgZmFGaWxlVmlkZW8sIGZhVXBSaWdodEZyb21TcXVhcmUsIGZhRXh0ZXJuYWxMaW5rQWx0LCBmYVRhYmxlQ2VsbHMsIGZhVGgsIGZhRmlsZVBkZiwgZmFCb29rQmlibGUsIGZhQmlibGUsIGZhTywgZmFTdWl0Y2FzZU1lZGljYWwsIGZhTWVka2l0LCBmYVVzZXJTZWNyZXQsIGZhT3R0ZXIsIGZhUGVyc29uRHJlc3MsIGZhRmVtYWxlLCBmYUNvbW1lbnREb2xsYXIsIGZhQnVzaW5lc3NUaW1lLCBmYUJyaWVmY2FzZUNsb2NrLCBmYVRhYmxlQ2VsbHNMYXJnZSwgZmFUaExhcmdlLCBmYUJvb2tUYW5ha2gsIGZhVGFuYWtoLCBmYVBob25lVm9sdW1lLCBmYVZvbHVtZUNvbnRyb2xQaG9uZSwgZmFIYXRDb3dib3lTaWRlLCBmYUNsaXBib2FyZFVzZXIsIGZhQ2hpbGQsIGZhTGlyYVNpZ24sIGZhU2F0ZWxsaXRlLCBmYVBsYW5lTG9jaywgZmFUYWcsIGZhQ29tbWVudCwgZmFDYWtlQ2FuZGxlcywgZmFCaXJ0aGRheUNha2UsIGZhQ2FrZSwgZmFFbnZlbG9wZSwgZmFBbmdsZXNVcCwgZmFBbmdsZURvdWJsZVVwLCBmYVBhcGVyY2xpcCwgZmFBcnJvd1JpZ2h0VG9DaXR5LCBmYVJpYmJvbiwgZmFMdW5ncywgZmFBcnJvd1VwOTEsIGZhU29ydE51bWVyaWNVcEFsdCwgZmFMaXRlY29pblNpZ24sIGZhQm9yZGVyTm9uZSwgZmFDaXJjbGVOb2RlcywgZmFQYXJhY2h1dGVCb3gsIGZhSW5kZW50LCBmYVRydWNrRmllbGRVbiwgZmFIb3VyZ2xhc3MsIGZhSG91cmdsYXNzRW1wdHksIGZhTW91bnRhaW4sIGZhVXNlckRvY3RvciwgZmFVc2VyTWQsIGZhQ2lyY2xlSW5mbywgZmFJbmZvQ2lyY2xlLCBmYUNsb3VkTWVhdGJhbGwsIGZhQ2FtZXJhLCBmYUNhbWVyYUFsdCwgZmFTcXVhcmVWaXJ1cywgZmFNZXRlb3IsIGZhQ2FyT24sIGZhU2xlaWdoLCBmYUFycm93RG93bjE5LCBmYVNvcnROdW1lcmljQXNjLCBmYVNvcnROdW1lcmljRG93biwgZmFIYW5kSG9sZGluZ0Ryb3BsZXQsIGZhSGFuZEhvbGRpbmdXYXRlciwgZmFXYXRlciwgZmFDYWxlbmRhckNoZWNrLCBmYUJyYWlsbGUsIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCwgZmFQcmVzY3JpcHRpb25Cb3R0bGVBbHQsIGZhTGFuZG1hcmssIGZhVHJ1Y2ssIGZhQ3Jvc3NoYWlycywgZmFQZXJzb25DYW5lLCBmYVRlbnQsIGZhVmVzdFBhdGNoZXMsIGZhQ2hlY2tEb3VibGUsIGZhQXJyb3dEb3duQVosIGZhU29ydEFscGhhQXNjLCBmYVNvcnRBbHBoYURvd24sIGZhTW9uZXlCaWxsV2hlYXQsIGZhQ29va2llLCBmYUFycm93Um90YXRlTGVmdCwgZmFBcnJvd0xlZnRSb3RhdGUsIGZhQXJyb3dSb3RhdGVCYWNrLCBmYUFycm93Um90YXRlQmFja3dhcmQsIGZhVW5kbywgZmFIYXJkRHJpdmUsIGZhSGRkLCBmYUZhY2VHcmluU3F1aW50VGVhcnMsIGZhR3JpblNxdWludFRlYXJzLCBmYUR1bWJiZWxsLCBmYVJlY3RhbmdsZUxpc3QsIGZhTGlzdEFsdCwgZmFUYXJwRHJvcGxldCwgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjaywgZmFQZXJzb25Ta2lpbmdOb3JkaWMsIGZhU2tpaW5nTm9yZGljLCBmYUNhbGVuZGFyUGx1cywgZmFQbGFuZUFycml2YWwsIGZhQ2lyY2xlTGVmdCwgZmFBcnJvd0FsdENpcmNsZUxlZnQsIGZhVHJhaW5TdWJ3YXksIGZhU3Vid2F5LCBmYUNoYXJ0R2FudHQsIGZhSW5kaWFuUnVwZWVTaWduLCBmYUluZGlhblJ1cGVlLCBmYUluciwgZmFDcm9wU2ltcGxlLCBmYUNyb3BBbHQsIGZhTW9uZXlCaWxsMSwgZmFNb25leUJpbGxBbHQsIGZhTGVmdExvbmcsIGZhTG9uZ0Fycm93QWx0TGVmdCwgZmFEbmEsIGZhVmlydXNTbGFzaCwgZmFNaW51cywgZmFTdWJ0cmFjdCwgZmFDaGVzcywgZmFBcnJvd0xlZnRMb25nLCBmYUxvbmdBcnJvd0xlZnQsIGZhUGx1Z0NpcmNsZUNoZWNrLCBmYVN0cmVldFZpZXcsIGZhRnJhbmNTaWduLCBmYVZvbHVtZU9mZiwgZmFIYW5kc0FzbEludGVycHJldGluZywgZmFBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZywgZmFBc2xJbnRlcnByZXRpbmcsIGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZywgZmFHZWFyLCBmYUNvZywgZmFEcm9wbGV0U2xhc2gsIGZhVGludFNsYXNoLCBmYU1vc3F1ZSwgZmFNb3NxdWl0bywgZmFTdGFyT2ZEYXZpZCwgZmFQZXJzb25NaWxpdGFyeVJpZmxlLCBmYUNhcnRTaG9wcGluZywgZmFTaG9wcGluZ0NhcnQsIGZhVmlhbHMsIGZhUGx1Z0NpcmNsZVBsdXMsIGZhUGxhY2VPZldvcnNoaXAsIGZhR3JpcFZlcnRpY2FsLCBmYUFycm93VHVyblVwLCBmYUxldmVsVXAsIGZhVSwgZmFTcXVhcmVSb290VmFyaWFibGUsIGZhU3F1YXJlUm9vdEFsdCwgZmFDbG9jaywgZmFDbG9ja0ZvdXIsIGZhQmFja3dhcmRTdGVwLCBmYVN0ZXBCYWNrd2FyZCwgZmFQYWxsZXQsIGZhRmF1Y2V0LCBmYUJhc2ViYWxsQmF0QmFsbCwgZmFTLCBmYVRpbWVsaW5lLCBmYUtleWJvYXJkLCBmYUNhcmV0RG93biwgZmFIb3VzZUNoaW1uZXlNZWRpY2FsLCBmYUNsaW5pY01lZGljYWwsIGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzLCBmYVRlbXBlcmF0dXJlMywgZmFUaGVybW9tZXRlcjMsIGZhVGhlcm1vbWV0ZXJUaHJlZVF1YXJ0ZXJzLCBmYU1vYmlsZVNjcmVlbiwgZmFNb2JpbGVBbmRyb2lkQWx0LCBmYVBsYW5lVXAsIGZhUGlnZ3lCYW5rLCBmYUJhdHRlcnlIYWxmLCBmYUJhdHRlcnkzLCBmYU1vdW50YWluQ2l0eSwgZmFDb2lucywgZmFLaGFuZGEsIGZhU2xpZGVycywgZmFTbGlkZXJzSCwgZmFGb2xkZXJUcmVlLCBmYU5ldHdvcmtXaXJlZCwgZmFNYXBQaW4sIGZhSGFtc2EsIGZhQ2VudFNpZ24sIGZhRmxhc2ssIGZhUGVyc29uUHJlZ25hbnQsIGZhV2FuZFNwYXJrbGVzLCBmYUVsbGlwc2lzVmVydGljYWwsIGZhRWxsaXBzaXNWLCBmYVRpY2tldCwgZmFQb3dlck9mZiwgZmFSaWdodExvbmcsIGZhTG9uZ0Fycm93QWx0UmlnaHQsIGZhRmxhZ1VzYSwgZmFMYXB0b3BGaWxlLCBmYVR0eSwgZmFUZWxldHlwZSwgZmFEaWFncmFtTmV4dCwgZmFQZXJzb25SaWZsZSwgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbiwgZmFDbG9zZWRDYXB0aW9uaW5nLCBmYVBlcnNvbkhpa2luZywgZmFIaWtpbmcsIGZhVmVudXNEb3VibGUsIGZhSW1hZ2VzLCBmYUNhbGN1bGF0b3IsIGZhUGVvcGxlUHVsbGluZywgZmFOLCBmYUNhYmxlQ2FyLCBmYVRyYW0sIGZhQ2xvdWRSYWluLCBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssIGZhU2hpcCwgZmFBcnJvd3NEb3duVG9MaW5lLCBmYURvd25sb2FkLCBmYUZhY2VHcmluLCBmYUdyaW4sIGZhRGVsZXRlTGVmdCwgZmFCYWNrc3BhY2UsIGZhRXllRHJvcHBlciwgZmFFeWVEcm9wcGVyRW1wdHksIGZhRXllZHJvcHBlciwgZmFGaWxlQ2lyY2xlQ2hlY2ssIGZhRm9yd2FyZCwgZmFNb2JpbGUsIGZhTW9iaWxlQW5kcm9pZCwgZmFNb2JpbGVQaG9uZSwgZmFGYWNlTWVoLCBmYU1laCwgZmFBbGlnbkNlbnRlciwgZmFCb29rU2t1bGwsIGZhQm9va0RlYWQsIGZhSWRDYXJkLCBmYURyaXZlcnNMaWNlbnNlLCBmYU91dGRlbnQsIGZhRGVkZW50LCBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24sIGZhSG91c2UsIGZhSG9tZSwgZmFIb21lQWx0LCBmYUhvbWVMZ0FsdCwgZmFDYWxlbmRhcldlZWssIGZhTGFwdG9wTWVkaWNhbCwgZmFCLCBmYUZpbGVNZWRpY2FsLCBmYURpY2VPbmUsIGZhS2l3aUJpcmQsIGZhQXJyb3dSaWdodEFycm93TGVmdCwgZmFFeGNoYW5nZSwgZmFSb3RhdGVSaWdodCwgZmFSZWRvQWx0LCBmYVJvdGF0ZUZvcndhcmQsIGZhVXRlbnNpbHMsIGZhQ3V0bGVyeSwgZmFBcnJvd1VwV2lkZVNob3J0LCBmYVNvcnRBbW91bnRVcCwgZmFNaWxsU2lnbiwgZmFCb3dsUmljZSwgZmFTa3VsbCwgZmFUb3dlckJyb2FkY2FzdCwgZmFCcm9hZGNhc3RUb3dlciwgZmFUcnVja1BpY2t1cCwgZmFVcExvbmcsIGZhTG9uZ0Fycm93QWx0VXAsIGZhU3RvcCwgZmFDb2RlTWVyZ2UsIGZhVXBsb2FkLCBmYUh1cnJpY2FuZSwgZmFNb3VuZCwgZmFUb2lsZXRQb3J0YWJsZSwgZmFDb21wYWN0RGlzYywgZmFGaWxlQXJyb3dEb3duLCBmYUZpbGVEb3dubG9hZCwgZmFDYXJhdmFuLCBmYVNoaWVsZENhdCwgZmFCb2x0LCBmYVphcCwgZmFHbGFzc1dhdGVyLCBmYU9pbFdlbGwsIGZhVmF1bHQsIGZhTWFycywgZmFUb2lsZXQsIGZhUGxhbmVDaXJjbGVYbWFyaywgZmFZZW5TaWduLCBmYUNueSwgZmFKcHksIGZhUm1iLCBmYVllbiwgZmFSdWJsZVNpZ24sIGZhUm91YmxlLCBmYVJ1YiwgZmFSdWJsZSwgZmFTdW4sIGZhR3VpdGFyLCBmYUZhY2VMYXVnaFdpbmssIGZhTGF1Z2hXaW5rLCBmYUhvcnNlSGVhZCwgZmFCb3JlSG9sZSwgZmFJbmR1c3RyeSwgZmFDaXJjbGVEb3duLCBmYUFycm93QWx0Q2lyY2xlRG93biwgZmFBcnJvd3NUdXJuVG9Eb3RzLCBmYUZsb3JpblNpZ24sIGZhQXJyb3dEb3duU2hvcnRXaWRlLCBmYVNvcnRBbW91bnREZXNjLCBmYVNvcnRBbW91bnREb3duQWx0LCBmYUxlc3NUaGFuLCBmYUFuZ2xlRG93biwgZmFDYXJUdW5uZWwsIGZhSGVhZFNpZGVDb3VnaCwgZmFHcmlwTGluZXMsIGZhVGh1bWJzRG93biwgZmFVc2VyTG9jaywgZmFBcnJvd1JpZ2h0TG9uZywgZmFMb25nQXJyb3dSaWdodCwgZmFBbmNob3JDaXJjbGVYbWFyaywgZmFFbGxpcHNpcywgZmFFbGxpcHNpc0gsIGZhQ2hlc3NQYXduLCBmYUtpdE1lZGljYWwsIGZhRmlyc3RBaWQsIGZhUGVyc29uVGhyb3VnaFdpbmRvdywgZmFUb29sYm94LCBmYUhhbmRzSG9sZGluZ0NpcmNsZSwgZmFCdWcsIGZhQ3JlZGl0Q2FyZCwgZmFDcmVkaXRDYXJkQWx0LCBmYUNhciwgZmFBdXRvbW9iaWxlLCBmYUhhbmRIb2xkaW5nSGFuZCwgZmFCb29rT3BlblJlYWRlciwgZmFCb29rUmVhZGVyLCBmYU1vdW50YWluU3VuLCBmYUFycm93c0xlZnRSaWdodFRvTGluZSwgZmFEaWNlRDIwLCBmYVRydWNrRHJvcGxldCwgZmFGaWxlQ2lyY2xlWG1hcmssIGZhVGVtcGVyYXR1cmVBcnJvd1VwLCBmYVRlbXBlcmF0dXJlVXAsIGZhTWVkYWwsIGZhQmVkLCBmYVNxdWFyZUgsIGZhSFNxdWFyZSwgZmFQb2RjYXN0LCBmYVRlbXBlcmF0dXJlRnVsbCwgZmFUZW1wZXJhdHVyZTQsIGZhVGhlcm1vbWV0ZXI0LCBmYVRoZXJtb21ldGVyRnVsbCwgZmFCZWxsLCBmYVN1cGVyc2NyaXB0LCBmYVBsdWdDaXJjbGVYbWFyaywgZmFTdGFyT2ZMaWZlLCBmYVBob25lU2xhc2gsIGZhUGFpbnRSb2xsZXIsIGZhSGFuZHNoYWtlQW5nbGUsIGZhSGFuZHNIZWxwaW5nLCBmYUxvY2F0aW9uRG90LCBmYU1hcE1hcmtlckFsdCwgZmFGaWxlLCBmYUdyZWF0ZXJUaGFuLCBmYVBlcnNvblN3aW1taW5nLCBmYVN3aW1tZXIsIGZhQXJyb3dEb3duLCBmYURyb3BsZXQsIGZhVGludCwgZmFFcmFzZXIsIGZhRWFydGhBbWVyaWNhcywgZmFFYXJ0aCwgZmFFYXJ0aEFtZXJpY2EsIGZhR2xvYmVBbWVyaWNhcywgZmFQZXJzb25CdXJzdCwgZmFEb3ZlLCBmYUJhdHRlcnlFbXB0eSwgZmFCYXR0ZXJ5MCwgZmFTb2NrcywgZmFJbmJveCwgZmFTZWN0aW9uLCBmYUdhdWdlSGlnaCwgZmFUYWNob21ldGVyQWx0LCBmYVRhY2hvbWV0ZXJBbHRGYXN0LCBmYUVudmVsb3BlT3BlblRleHQsIGZhSG9zcGl0YWwsIGZhSG9zcGl0YWxBbHQsIGZhSG9zcGl0YWxXaWRlLCBmYVdpbmVCb3R0bGUsIGZhQ2hlc3NSb29rLCBmYUJhcnNTdGFnZ2VyZWQsIGZhUmVvcmRlciwgZmFTdHJlYW0sIGZhRGhhcm1hY2hha3JhLCBmYUhvdGRvZywgZmFQZXJzb25XYWxraW5nV2l0aENhbmUsIGZhQmxpbmQsIGZhRHJ1bSwgZmFJY2VDcmVhbSwgZmFIZWFydENpcmNsZUJvbHQsIGZhRmF4LCBmYVBhcmFncmFwaCwgZmFDaGVja1RvU2xvdCwgZmFWb3RlWWVhLCBmYVN0YXJIYWxmLCBmYUJveGVzU3RhY2tlZCwgZmFCb3hlcywgZmFCb3hlc0FsdCwgZmFMaW5rLCBmYUNoYWluLCBmYUVhckxpc3RlbiwgZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zLCBmYVRyZWVDaXR5LCBmYVBsYXksIGZhRm9udCwgZmFUYWJsZUNlbGxzUm93TG9jaywgZmFSdXBpYWhTaWduLCBmYU1hZ25pZnlpbmdHbGFzcywgZmFTZWFyY2gsIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsLCBmYVBpbmdQb25nUGFkZGxlQmFsbCwgZmFUYWJsZVRlbm5pcywgZmFQZXJzb25Eb3RzRnJvbUxpbmUsIGZhRGlhZ25vc2VzLCBmYVRyYXNoQ2FuQXJyb3dVcCwgZmFUcmFzaFJlc3RvcmVBbHQsIGZhTmFpcmFTaWduLCBmYUNhcnRBcnJvd0Rvd24sIGZhV2Fsa2llVGFsa2llLCBmYUZpbGVQZW4sIGZhRmlsZUVkaXQsIGZhUmVjZWlwdCwgZmFTcXVhcmVQZW4sIGZhUGVuU3F1YXJlLCBmYVBlbmNpbFNxdWFyZSwgZmFTdWl0Y2FzZVJvbGxpbmcsIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24sIGZhQ2hldnJvbkRvd24sIGZhQmF0dGVyeUZ1bGwsIGZhQmF0dGVyeSwgZmFCYXR0ZXJ5NSwgZmFTa3VsbENyb3NzYm9uZXMsIGZhQ29kZUNvbXBhcmUsIGZhTGlzdFVsLCBmYUxpc3REb3RzLCBmYVNjaG9vbExvY2ssIGZhVG93ZXJDZWxsLCBmYURvd25Mb25nLCBmYUxvbmdBcnJvd0FsdERvd24sIGZhUmFua2luZ1N0YXIsIGZhQ2hlc3NLaW5nLCBmYVBlcnNvbkhhcmFzc2luZywgZmFCcmF6aWxpYW5SZWFsU2lnbiwgZmFMYW5kbWFya0RvbWUsIGZhTGFuZG1hcmtBbHQsIGZhQXJyb3dVcCwgZmFUdiwgZmFUZWxldmlzaW9uLCBmYVR2QWx0LCBmYVNocmltcCwgZmFMaXN0Q2hlY2ssIGZhVGFza3MsIGZhSnVnRGV0ZXJnZW50LCBmYUNpcmNsZVVzZXIsIGZhVXNlckNpcmNsZSwgZmFVc2VyU2hpZWxkLCBmYVdpbmQsIGZhQ2FyQnVyc3QsIGZhQ2FyQ3Jhc2gsIGZhWSwgZmFQZXJzb25Tbm93Ym9hcmRpbmcsIGZhU25vd2JvYXJkaW5nLCBmYVRydWNrRmFzdCwgZmFTaGlwcGluZ0Zhc3QsIGZhRmlzaCwgZmFVc2VyR3JhZHVhdGUsIGZhQ2lyY2xlSGFsZlN0cm9rZSwgZmFBZGp1c3QsIGZhQ2xhcHBlcmJvYXJkLCBmYUNpcmNsZVJhZGlhdGlvbiwgZmFSYWRpYXRpb25BbHQsIGZhQmFzZWJhbGwsIGZhQmFzZWJhbGxCYWxsLCBmYUpldEZpZ2h0ZXJVcCwgZmFEaWFncmFtUHJvamVjdCwgZmFQcm9qZWN0RGlhZ3JhbSwgZmFDb3B5LCBmYVZvbHVtZVhtYXJrLCBmYVZvbHVtZU11dGUsIGZhVm9sdW1lVGltZXMsIGZhSGFuZFNwYXJrbGVzLCBmYUdyaXAsIGZhR3JpcEhvcml6b250YWwsIGZhU2hhcmVGcm9tU3F1YXJlLCBmYVNoYXJlU3F1YXJlLCBmYUNoaWxkQ29tYmF0YW50LCBmYUNoaWxkUmlmbGUsIGZhR3VuLCBmYVNxdWFyZVBob25lLCBmYVBob25lU3F1YXJlLCBmYVBsdXMsIGZhQWRkLCBmYUV4cGFuZCwgZmFDb21wdXRlciwgZmFYbWFyaywgZmFDbG9zZSwgZmFNdWx0aXBseSwgZmFSZW1vdmUsIGZhVGltZXMsIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LCBmYUFycm93cywgZmFDaGFsa2JvYXJkVXNlciwgZmFDaGFsa2JvYXJkVGVhY2hlciwgZmFQZXNvU2lnbiwgZmFCdWlsZGluZ1NoaWVsZCwgZmFCYWJ5LCBmYVVzZXJzTGluZSwgZmFRdW90ZUxlZnQsIGZhUXVvdGVMZWZ0QWx0LCBmYVRyYWN0b3IsIGZhVHJhc2hBcnJvd1VwLCBmYVRyYXNoUmVzdG9yZSwgZmFBcnJvd0Rvd25VcExvY2ssIGZhTGluZXNMZWFuaW5nLCBmYVJ1bGVyQ29tYmluZWQsIGZhQ29weXJpZ2h0LCBmYUVxdWFscywgZmFCbGVuZGVyLCBmYVRlZXRoLCBmYVNoZWtlbFNpZ24sIGZhSWxzLCBmYVNoZWtlbCwgZmFTaGVxZWwsIGZhU2hlcWVsU2lnbiwgZmFNYXAsIGZhUm9ja2V0LCBmYVBob3RvRmlsbSwgZmFQaG90b1ZpZGVvLCBmYUZvbGRlck1pbnVzLCBmYVN0b3JlLCBmYUFycm93VHJlbmRVcCwgZmFQbHVnQ2lyY2xlTWludXMsIGZhU2lnbkhhbmdpbmcsIGZhU2lnbiwgZmFCZXppZXJDdXJ2ZSwgZmFCZWxsU2xhc2gsIGZhVGFibGV0LCBmYVRhYmxldEFuZHJvaWQsIGZhU2Nob29sRmxhZywgZmFGaWxsLCBmYUFuZ2xlVXAsIGZhRHJ1bXN0aWNrQml0ZSwgZmFIb2xseUJlcnJ5LCBmYUNoZXZyb25MZWZ0LCBmYUJhY3RlcmlhLCBmYUhhbmRMaXphcmQsIGZhTm90ZGVmLCBmYURpc2Vhc2UsIGZhQnJpZWZjYXNlTWVkaWNhbCwgZmFHZW5kZXJsZXNzLCBmYUNoZXZyb25SaWdodCwgZmFSZXR3ZWV0LCBmYUNhclJlYXIsIGZhQ2FyQWx0LCBmYVB1bXBTb2FwLCBmYVZpZGVvU2xhc2gsIGZhQmF0dGVyeVF1YXJ0ZXIsIGZhQmF0dGVyeTIsIGZhUmFkaW8sIGZhQmFieUNhcnJpYWdlLCBmYUNhcnJpYWdlQmFieSwgZmFUcmFmZmljTGlnaHQsIGZhVGhlcm1vbWV0ZXIsIGZhVnJDYXJkYm9hcmQsIGZhSGFuZE1pZGRsZUZpbmdlciwgZmFQZXJjZW50LCBmYVBlcmNlbnRhZ2UsIGZhVHJ1Y2tNb3ZpbmcsIGZhR2xhc3NXYXRlckRyb3BsZXQsIGZhRGlzcGxheSwgZmFGYWNlU21pbGUsIGZhU21pbGUsIGZhVGh1bWJ0YWNrLCBmYVRodW1iVGFjaywgZmFUcm9waHksIGZhUGVyc29uUHJheWluZywgZmFQcmF5LCBmYUhhbW1lciwgZmFIYW5kUGVhY2UsIGZhUm90YXRlLCBmYVN5bmNBbHQsIGZhU3Bpbm5lciwgZmFSb2JvdCwgZmFQZWFjZSwgZmFHZWFycywgZmFDb2dzLCBmYVdhcmVob3VzZSwgZmFBcnJvd1VwUmlnaHREb3RzLCBmYVNwbG90Y2gsIGZhRmFjZUdyaW5IZWFydHMsIGZhR3JpbkhlYXJ0cywgZmFEaWNlRm91ciwgZmFTaW1DYXJkLCBmYVRyYW5zZ2VuZGVyLCBmYVRyYW5zZ2VuZGVyQWx0LCBmYU1lcmN1cnksIGZhQXJyb3dUdXJuRG93biwgZmFMZXZlbERvd24sIGZhUGVyc29uRmFsbGluZ0J1cnN0LCBmYUF3YXJkLCBmYVRpY2tldFNpbXBsZSwgZmFUaWNrZXRBbHQsIGZhQnVpbGRpbmcsIGZhQW5nbGVzTGVmdCwgZmFBbmdsZURvdWJsZUxlZnQsIGZhUXJjb2RlLCBmYUNsb2NrUm90YXRlTGVmdCwgZmFIaXN0b3J5LCBmYUZhY2VHcmluQmVhbVN3ZWF0LCBmYUdyaW5CZWFtU3dlYXQsIGZhRmlsZUV4cG9ydCwgZmFBcnJvd1JpZ2h0RnJvbUZpbGUsIGZhU2hpZWxkLCBmYVNoaWVsZEJsYW5rLCBmYUFycm93VXBTaG9ydFdpZGUsIGZhU29ydEFtb3VudFVwQWx0LCBmYUhvdXNlTWVkaWNhbCwgZmFHb2xmQmFsbFRlZSwgZmFHb2xmQmFsbCwgZmFDaXJjbGVDaGV2cm9uTGVmdCwgZmFDaGV2cm9uQ2lyY2xlTGVmdCwgZmFIb3VzZUNoaW1uZXlXaW5kb3csIGZhUGVuTmliLCBmYVRlbnRBcnJvd1R1cm5MZWZ0LCBmYVRlbnRzLCBmYVdhbmRNYWdpYywgZmFNYWdpYywgZmFEb2csIGZhQ2Fycm90LCBmYU1vb24sIGZhV2luZUdsYXNzRW1wdHksIGZhV2luZUdsYXNzQWx0LCBmYUNoZWVzZSwgZmFZaW5ZYW5nLCBmYU11c2ljLCBmYUNvZGVDb21taXQsIGZhVGVtcGVyYXR1cmVMb3csIGZhUGVyc29uQmlraW5nLCBmYUJpa2luZywgZmFCcm9vbSwgZmFTaGllbGRIZWFydCwgZmFHb3B1cmFtLCBmYUVhcnRoT2NlYW5pYSwgZmFHbG9iZU9jZWFuaWEsIGZhU3F1YXJlWG1hcmssIGZhVGltZXNTcXVhcmUsIGZhWG1hcmtTcXVhcmUsIGZhSGFzaHRhZywgZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyLCBmYUV4cGFuZEFsdCwgZmFPaWxDYW4sIGZhVCwgZmFIaXBwbywgZmFDaGFydENvbHVtbiwgZmFJbmZpbml0eSwgZmFWaWFsQ2lyY2xlQ2hlY2ssIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLCBmYVZvaWNlbWFpbCwgZmFGYW4sIGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2UsIGZhVXBEb3duLCBmYUFycm93c0FsdFYsIGZhQ2xvdWRNb29uUmFpbiwgZmFDYWxlbmRhciwgZmFUcmFpbGVyLCBmYUJhaGFpLCBmYUhheWthbCwgZmFTZENhcmQsIGZhRHJhZ29uLCBmYVNob2VQcmludHMsIGZhQ2lyY2xlUGx1cywgZmFQbHVzQ2lyY2xlLCBmYUZhY2VHcmluVG9uZ3VlV2luaywgZmFHcmluVG9uZ3VlV2luaywgZmFIYW5kSG9sZGluZywgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24sIGZhTGlua1NsYXNoLCBmYUNoYWluQnJva2VuLCBmYUNoYWluU2xhc2gsIGZhVW5saW5rLCBmYUNsb25lLCBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0LCBmYUFycm93VXBaQSwgZmFTb3J0QWxwaGFVcEFsdCwgZmFGaXJlRmxhbWVDdXJ2ZWQsIGZhRmlyZUFsdCwgZmFUb3JuYWRvLCBmYUZpbGVDaXJjbGVQbHVzLCBmYUJvb2tRdXJhbiwgZmFRdXJhbiwgZmFBbmNob3IsIGZhQm9yZGVyQWxsLCBmYUZhY2VBbmdyeSwgZmFBbmdyeSwgZmFDb29raWVCaXRlLCBmYUFycm93VHJlbmREb3duLCBmYVJzcywgZmFGZWVkLCBmYURyYXdQb2x5Z29uLCBmYVNjYWxlQmFsYW5jZWQsIGZhQmFsYW5jZVNjYWxlLCBmYUdhdWdlU2ltcGxlSGlnaCwgZmFUYWNob21ldGVyLCBmYVRhY2hvbWV0ZXJGYXN0LCBmYVNob3dlciwgZmFEZXNrdG9wLCBmYURlc2t0b3BBbHQsIGZhTSwgZmFUYWJsZUxpc3QsIGZhVGhMaXN0LCBmYUNvbW1lbnRTbXMsIGZhU21zLCBmYUJvb2ssIGZhVXNlclBsdXMsIGZhQ2hlY2ssIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsIGZhQmF0dGVyeTQsIGZhSG91c2VDaXJjbGVDaGVjaywgZmFBbmdsZUxlZnQsIGZhRGlhZ3JhbVN1Y2Nlc3NvciwgZmFUcnVja0Fycm93UmlnaHQsIGZhQXJyb3dzU3BsaXRVcEFuZExlZnQsIGZhSGFuZEZpc3QsIGZhRmlzdFJhaXNlZCwgZmFDbG91ZE1vb24sIGZhQnJpZWZjYXNlLCBmYVBlcnNvbkZhbGxpbmcsIGZhSW1hZ2VQb3J0cmFpdCwgZmFQb3J0cmFpdCwgZmFVc2VyVGFnLCBmYVJ1ZywgZmFFYXJ0aEV1cm9wZSwgZmFHbG9iZUV1cm9wZSwgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlLCBmYUx1Z2dhZ2VDYXJ0LCBmYVJlY3RhbmdsZVhtYXJrLCBmYVJlY3RhbmdsZVRpbWVzLCBmYVRpbWVzUmVjdGFuZ2xlLCBmYVdpbmRvd0Nsb3NlLCBmYUJhaHRTaWduLCBmYUJvb2tPcGVuLCBmYUJvb2tKb3VybmFsV2hpbGxzLCBmYUpvdXJuYWxXaGlsbHMsIGZhSGFuZGN1ZmZzLCBmYVRyaWFuZ2xlRXhjbGFtYXRpb24sIGZhRXhjbGFtYXRpb25UcmlhbmdsZSwgZmFXYXJuaW5nLCBmYURhdGFiYXNlLCBmYVNoYXJlLCBmYU1haWxGb3J3YXJkLCBmYUJvdHRsZURyb3BsZXQsIGZhTWFza0ZhY2UsIGZhSGlsbFJvY2tzbGlkZSwgZmFSaWdodExlZnQsIGZhRXhjaGFuZ2VBbHQsIGZhUGFwZXJQbGFuZSwgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24sIGZhRHVuZ2VvbiwgZmFBbGlnblJpZ2h0LCBmYU1vbmV5QmlsbDFXYXZlLCBmYU1vbmV5QmlsbFdhdmVBbHQsIGZhTGlmZVJpbmcsIGZhSGFuZHMsIGZhU2lnbkxhbmd1YWdlLCBmYVNpZ25pbmcsIGZhQ2FsZW5kYXJEYXksIGZhV2F0ZXJMYWRkZXIsIGZhTGFkZGVyV2F0ZXIsIGZhU3dpbW1pbmdQb29sLCBmYUFycm93c1VwRG93biwgZmFBcnJvd3NWLCBmYUZhY2VHcmltYWNlLCBmYUdyaW1hY2UsIGZhV2hlZWxjaGFpck1vdmUsIGZhV2hlZWxjaGFpckFsdCwgZmFUdXJuRG93biwgZmFMZXZlbERvd25BbHQsIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQsIGZhU3F1YXJlRW52ZWxvcGUsIGZhRW52ZWxvcGVTcXVhcmUsIGZhRGljZSwgZmFCb3dsaW5nQmFsbCwgZmFCcmFpbiwgZmFCYW5kYWdlLCBmYUJhbmRBaWQsIGZhQ2FsZW5kYXJNaW51cywgZmFDaXJjbGVYbWFyaywgZmFUaW1lc0NpcmNsZSwgZmFYbWFya0NpcmNsZSwgZmFHaWZ0cywgZmFIb3RlbCwgZmFFYXJ0aEFzaWEsIGZhR2xvYmVBc2lhLCBmYUlkQ2FyZENsaXAsIGZhSWRDYXJkQWx0LCBmYU1hZ25pZnlpbmdHbGFzc1BsdXMsIGZhU2VhcmNoUGx1cywgZmFUaHVtYnNVcCwgZmFVc2VyQ2xvY2ssIGZhSGFuZERvdHMsIGZhQWxsZXJnaWVzLCBmYUZpbGVJbnZvaWNlLCBmYVdpbmRvd01pbmltaXplLCBmYU11Z1NhdWNlciwgZmFDb2ZmZWUsIGZhQnJ1c2gsIGZhTWFzaywgZmFNYWduaWZ5aW5nR2xhc3NNaW51cywgZmFTZWFyY2hNaW51cywgZmFSdWxlclZlcnRpY2FsLCBmYVVzZXJMYXJnZSwgZmFVc2VyQWx0LCBmYVRyYWluVHJhbSwgZmFVc2VyTnVyc2UsIGZhU3lyaW5nZSwgZmFDbG91ZFN1biwgZmFTdG9wd2F0Y2gyMCwgZmFTcXVhcmVGdWxsLCBmYU1hZ25ldCwgZmFKYXIsIGZhTm90ZVN0aWNreSwgZmFTdGlja3lOb3RlLCBmYUJ1Z1NsYXNoLCBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLCBmYUJvbmUsIGZhVGFibGVDZWxsc1Jvd1VubG9jaywgZmFVc2VySW5qdXJlZCwgZmFGYWNlU2FkVGVhciwgZmFTYWRUZWFyLCBmYVBsYW5lLCBmYVRlbnRBcnJvd3NEb3duLCBmYUV4Y2xhbWF0aW9uLCBmYUFycm93c1NwaW4sIGZhUHJpbnQsIGZhVHVya2lzaExpcmFTaWduLCBmYVRyeSwgZmFUdXJraXNoTGlyYSwgZmFEb2xsYXJTaWduLCBmYURvbGxhciwgZmFVc2QsIGZhWCwgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIsIGZhU2VhcmNoRG9sbGFyLCBmYVVzZXJzR2VhciwgZmFVc2Vyc0NvZywgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nLCBmYUJ1aWxkaW5nQ29sdW1ucywgZmFCYW5rLCBmYUluc3RpdHV0aW9uLCBmYU11c2V1bSwgZmFVbml2ZXJzaXR5LCBmYVVtYnJlbGxhLCBmYVRyb3dlbCwgZmFELCBmYVN0YXBsZXIsIGZhTWFza3NUaGVhdGVyLCBmYVRoZWF0ZXJNYXNrcywgZmFLaXBTaWduLCBmYUhhbmRQb2ludExlZnQsIGZhSGFuZHNoYWtlU2ltcGxlLCBmYUhhbmRzaGFrZUFsdCwgZmFKZXRGaWdodGVyLCBmYUZpZ2h0ZXJKZXQsIGZhU3F1YXJlU2hhcmVOb2RlcywgZmFTaGFyZUFsdFNxdWFyZSwgZmFCYXJjb2RlLCBmYVBsdXNNaW51cywgZmFWaWRlbywgZmFWaWRlb0NhbWVyYSwgZmFHcmFkdWF0aW9uQ2FwLCBmYU1vcnRhckJvYXJkLCBmYUhhbmRIb2xkaW5nTWVkaWNhbCwgZmFQZXJzb25DaXJjbGVDaGVjaywgZmFUdXJuVXAsIGZhTGV2ZWxVcEFsdCB9O1xuIiwgIi8qKlxuICogQG1vZHVsZSB2aWV3c1xuICovXG5pbXBvcnQgeyBHcm91cEVsZW1lbnQsIEdyb3VwaW5nLCBHcm91cGluZ3MsIExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgRGlzcGF0Y2gsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgTGl0IH0gZnJvbSBcInVpL21hcmtkb3duXCI7XG5pbXBvcnQgeyB1c2VJbnRlcm5pbmcgfSBmcm9tIFwidWkvaG9va3NcIjtcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSBcInByZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgVk5vZGUsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgQ29udHJvbGxlZFBhZ2VyLCB1c2VEYXRhY29yZVBhZ2luZyB9IGZyb20gXCIuL3BhZ2luZ1wiO1xuXG5pbXBvcnQgXCIuL3RhYmxlLmNzc1wiO1xuaW1wb3J0IHsgRWRpdGFibGUsIEVkaXRhYmxlQWN0aW9uLCB1c2VFZGl0YWJsZURpc3BhdGNoIH0gZnJvbSBcInVpL2ZpZWxkcy9lZGl0YWJsZVwiO1xuaW1wb3J0IHsgZmFTb3J0RG93biwgZmFTb3J0VXAsIGZhU29ydCB9IGZyb20gXCJAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnNcIjtcbmltcG9ydCB7IEZvbnRBd2Vzb21lSWNvbiB9IGZyb20gXCJAZm9ydGF3ZXNvbWUvcmVhY3QtZm9udGF3ZXNvbWVcIjtcblxuLyoqIEEgc2ltcGxlIGNvbHVtbiBkZWZpbml0aW9uIHdoaWNoIGFsbG93cyBmb3IgY3VzdG9tIHJlbmRlcmVycyBhbmQgdGl0bGVzLlxuICogQGdyb3VwIFByb3BzXG4gKiBAdHlwZVBhcmFtIFQgLSB0aGUgdHlwZSBvZiBlYWNoIHJvd1xuICogQHR5cGVQYXJhbSBWIC0gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGluIHRoaXMgY29sdW1uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFuaWxsYUNvbHVtbjxULCBWID0gTGl0ZXJhbD4ge1xuICAgIC8qKiBUaGUgdW5pcXVlIElEIG9mIHRoaXMgdGFibGUgY29sdW1uOyB5b3UgY2Fubm90IGhhdmUgbXVsdGlwbGUgY29sdW1ucyB3aXRoIHRoZSBzYW1lIElEIGluIGEgZ2l2ZW4gdGFibGUuICovXG4gICAgaWQ6IHN0cmluZztcblxuICAgIC8qKiBUaGUgdGl0bGUgd2hpY2ggd2lsbCBkaXNwbGF5IGF0IHRoZSB0b3Agb2YgdGhlIGNvbHVtbiBpZiBwcmVzZW50LiAqL1xuICAgIHRpdGxlPzogc3RyaW5nIHwgVk5vZGUgfCAoKCkgPT4gc3RyaW5nIHwgVk5vZGUpO1xuXG4gICAgLyoqIElmIHByZXNlbnQsIHRoZSBDU1Mgd2lkdGggdG8gYXBwbHkgdG8gdGhlIGNvbHVtbi4gJ21pbmltdW0nIHdpbGwgc2V0IHRoZSBjb2x1bW4gc2l6ZSB0byBpdCdzIHNtYWxsZXN0IHBvc3NpYmxlIHZhbHVlLCB3aGlsZSAnbWF4aW11bScgd2lsbCBkbyB0aGUgb3Bwb3NpdGUuICovXG4gICAgd2lkdGg/OiBcIm1pbmltdW1cIiB8IFwibWF4aW11bVwiIHwgc3RyaW5nO1xuXG4gICAgLyoqIFZhbHVlIGZ1bmN0aW9uIHdoaWNoIG1hcHMgdGhlIHJvdyB0byB0aGUgdmFsdWUgYmVpbmcgcmVuZGVyZWQuICovXG4gICAgdmFsdWU6IChvYmplY3Q6IFQpID0+IFY7XG5cbiAgICAvKiogQ2FsbGVkIHRvIHJlbmRlciB0aGUgZ2l2ZW4gY29sdW1uIHZhbHVlLiBDYW4gZGVwZW5kIG9uIGJvdGggdGhlIHNwZWNpZmljIHZhbHVlIGFuZCB0aGUgcm93IG9iamVjdC4gKi9cbiAgICByZW5kZXI/OiAodmFsdWU6IFYsIG9iamVjdDogVCkgPT4gTGl0ZXJhbCB8IFZOb2RlO1xuXG4gICAgLyoqIHdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgZWRpdGFibGUgb3Igbm90ICovXG4gICAgZWRpdGFibGU/OiBib29sZWFuO1xuXG4gICAgLyoqIFJlbmRlcmVkIHdoZW4gZWRpdGluZyB0aGUgY29sdW1uICovXG4gICAgZWRpdG9yPzogKHZhbHVlOiBWLCBvYmplY3Q6IFQpID0+IEpTWC5FbGVtZW50O1xuXG4gICAgLyoqIENhbGxlZCB3aGVuIHRoZSBjb2x1bW4gdmFsdWUgdXBkYXRlcy4gKi9cbiAgICBvblVwZGF0ZT86ICh2YWx1ZTogViwgb2JqZWN0OiBUKSA9PiB1bmtub3duO1xufVxuXG4vKiogTWV0YWRhdGEgZm9yIGNvbmZpZ3VyaW5nIGhvdyBncm91cGluZ3MgaW4gdGhlIGRhdGEgc2hvdWxkIGJlIGhhbmRsZWQuXG4gKiBAZ3JvdXAgUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cGluZ0NvbmZpZzxUPiB7XG4gICAgLyoqIEhvdyBhIGdyb3VwaW5nIHdpdGggdGhlIGdpdmVuIGtleSBhbmQgc2V0IG9mIHJvd3Mgc2hvdWxkIGJlIGhhbmRsZWQuICovXG4gICAgcmVuZGVyPzogKGtleTogTGl0ZXJhbCwgcm93czogR3JvdXBpbmc8VD4pID0+IExpdGVyYWwgfCBWTm9kZTtcbn1cblxuLyoqIEFsbCBhdmFpbGFibGUgcHJvcHMgZm9yIGEgdmFuaWxsYSB0YWJsZS5cbiAqIEBncm91cCBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbmlsbGFUYWJsZVByb3BzPFQ+IHtcbiAgICAvKiogVGhlIGNvbHVtbnMgdG8gcmVuZGVyIGluIHRoZSB0YWJsZS4gKi9cbiAgICBjb2x1bW5zOiBWYW5pbGxhQ29sdW1uPFQ+W107XG5cbiAgICAvKiogVGhlIHJvd3MgdG8gcmVuZGVyOyBtYXkgcG90ZW50aWFsbHkgYmUgZ3JvdXBlZCBvciBqdXN0IGEgcGxhaW4gYXJyYXkuICovXG4gICAgcm93czogR3JvdXBpbmc8VD47XG5cbiAgICAvKiogQWxsb3dzIGZvciBncm91cGluZyBoZWFkZXIgY29sdW1ucyB0byBiZSBvdmVycmlkZGVuIHdpdGggY3VzdG9tIHJlbmRlcmluZy9sb2dpYy4gKi9cbiAgICBncm91cGluZ3M/OiBHcm91cGluZ0NvbmZpZzxUPiB8IEdyb3VwaW5nQ29uZmlnPFQ+W10gfCAoKGtleTogTGl0ZXJhbCwgcm93czogR3JvdXBpbmc8VD4pID0+IExpdGVyYWwgfCBWTm9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gYSBib29sZWFuIC0gZW5hYmxlcyBvciBkaXNhYmxlcyBwYWdpbmcuXG4gICAgICogSWYgc2V0IHRvIGEgbnVtYmVyLCBwYWdpbmcgd2lsbCBiZSBlbmFibGVkIHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiByb3dzIHBlciBwYWdlLlxuICAgICAqL1xuICAgIHBhZ2luZz86IGJvb2xlYW4gfCBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB2aWV3IHdpbGwgc2Nyb2xsIHRvIHRoZSB0b3AgYXV0b21hdGljYWxseSBvbiBwYWdlIGNoYW5nZXMuIElmIHRydWUsIHdpbGwgYWx3YXlzIHNjcm9sbCBvbiBwYWdlIGNoYW5nZXMuXG4gICAgICogSWYgYSBudW1iZXIsIHdpbGwgc2Nyb2xsIG9ubHkgaWYgdGhlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgcGFnZSBzaXplLlxuICAgICAqKi9cbiAgICBzY3JvbGxPblBhZ2luZz86IGJvb2xlYW4gfCBudW1iZXI7XG59XG5cbi8qKiBBIHNpbXBsZSB0YWJsZSB3aGljaCBzdXBwb3J0cyBncm91cGluZywgc29ydGluZywgcGFnaW5nLCBhbmQgY3VzdG9tIGNvbHVtbnMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICogQHBhcmFtIHByb3BzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBWYW5pbGxhVGFibGU8VD4ocHJvcHM6IFZhbmlsbGFUYWJsZVByb3BzPFQ+KSB7XG4gICAgLy8gQ2FjaGUgY29sdW1ucyBieSByZWZlcmVuY2UgZXF1YWxpdHkgb2YgdGhlIHNwZWNpZmljIGNvbHVtbnMuIENvbHVtbnMgaGF2ZSB2YXJpb3VzIGZ1bmN0aW9uIHJlZmVyZW5jZXNcbiAgICAvLyBpbnNpZGUgdGhlbSBhbmQgc28gY2Fubm90IGJlIGNvbXBhcmVkIGJ5IHZhbHVlIGVxdWFsaXR5LlxuICAgIGNvbnN0IGNvbHVtbnMgPSB1c2VJbnRlcm5pbmcocHJvcHMuY29sdW1ucywgKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBhLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09IGJbaW5kZXhdKTtcbiAgICB9KTtcblxuICAgIC8vIENvdW50IHRvdGFsIGVsZW1lbnRzIGFuZCB0aGVuIHBhZ2UgYXBwcm9wcmlhdGVseS5cbiAgICBjb25zdCB0YWJsZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gICAgY29uc3QgdG90YWxFbGVtZW50cyA9IHVzZU1lbW8oKCkgPT4gR3JvdXBpbmdzLmNvdW50KHByb3BzLnJvd3MpLCBbcHJvcHMucm93c10pO1xuICAgIGNvbnN0IHBhZ2luZyA9IHVzZURhdGFjb3JlUGFnaW5nKHtcbiAgICAgICAgaW5pdGlhbFBhZ2U6IDAsXG4gICAgICAgIHBhZ2luZzogcHJvcHMucGFnaW5nLFxuICAgICAgICBzY3JvbGxPblBhZ2VDaGFuZ2U6IHByb3BzLnNjcm9sbE9uUGFnaW5nLFxuICAgICAgICBlbGVtZW50czogdG90YWxFbGVtZW50cyxcbiAgICAgICAgY29udGFpbmVyOiB0YWJsZVJlZixcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhZ2VkUm93cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAocGFnaW5nLmVuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm4gR3JvdXBpbmdzLnNsaWNlKHByb3BzLnJvd3MsIHBhZ2luZy5wYWdlICogcGFnaW5nLnBhZ2VTaXplLCAocGFnaW5nLnBhZ2UgKyAxKSAqIHBhZ2luZy5wYWdlU2l6ZSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIHByb3BzLnJvd3M7XG4gICAgfSwgW3BhZ2luZy5wYWdlLCBwYWdpbmcucGFnZVNpemUsIHBhZ2luZy5lbmFibGVkLCBwcm9wcy5yb3dzXSk7XG5cbiAgICBjb25zdCBncm91cGluZ3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wcy5ncm91cGluZ3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BzLmdyb3VwaW5ncykpIHJldHVybiBwcm9wcy5ncm91cGluZ3M7XG5cbiAgICAgICAgaWYgKExpdGVyYWxzLmlzRnVuY3Rpb24ocHJvcHMuZ3JvdXBpbmdzKSkgcmV0dXJuIFt7IHJlbmRlcjogcHJvcHMuZ3JvdXBpbmdzIH1dO1xuICAgICAgICBlbHNlIHJldHVybiBbcHJvcHMuZ3JvdXBpbmdzXTtcbiAgICB9LCBbcHJvcHMuZ3JvdXBpbmdzXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHJlZj17dGFibGVSZWZ9PlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VmFuaWxsYVRhYmxlSGVhZGVyQ2VsbCBjb2x1bW49e2NvbH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICB7cGFnZWRSb3dzLm1hcCgocm93KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VmFuaWxsYVJvd0dyb3VwIGxldmVsPXswfSBncm91cGluZ3M9e2dyb3VwaW5nc30gY29sdW1ucz17Y29sdW1uc30gZWxlbWVudD17cm93fSAvPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIHtwYWdpbmcuZW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgPENvbnRyb2xsZWRQYWdlciBwYWdlPXtwYWdpbmcucGFnZX0gdG90YWxQYWdlcz17cGFnaW5nLnRvdGFsUGFnZXN9IHNldFBhZ2U9e3BhZ2luZy5zZXRQYWdlfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cblxuLyoqIEFuIGluZGl2aWR1YWwgY29sdW1uIGNlbGwgaW4gdGhlIHRhYmxlLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gVmFuaWxsYVRhYmxlSGVhZGVyQ2VsbDxUPih7IGNvbHVtbiB9OiB7IGNvbHVtbjogVmFuaWxsYUNvbHVtbjxUPiB9KSB7XG4gICAgY29uc3QgaGVhZGVyOiBzdHJpbmcgfCBWTm9kZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIWNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5pZDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29sdW1uLnRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4udGl0bGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4udGl0bGU7XG4gICAgICAgIH1cbiAgICB9LCBbY29sdW1uLmlkLCBjb2x1bW4udGl0bGVdKTtcblxuICAgIGNvbnN0IHJlYWxXaWR0aCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IChjb2x1bW4ud2lkdGggPT09IFwibWluaW11bVwiID8gXCIxcHhcIiA6IGNvbHVtbi53aWR0aCA9PT0gXCJtYXhpbXVtXCIgPyBcImF1dG9cIiA6IGNvbHVtbi53aWR0aCksXG4gICAgICAgIFtjb2x1bW4ud2lkdGhdXG4gICAgKTtcblxuICAgIC8vIFdlIHVzZSBhbiBpbnRlcm5hbCBkaXYgdG8gYXZvaWQgZmxleCBtZXNzaW5nIHdpdGggdGhlIHRhYmxlIGxheW91dC5cbiAgICByZXR1cm4gKFxuICAgICAgICA8dGggd2lkdGg9e3JlYWxXaWR0aH0gY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtaGVhZGVyLWNlbGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtaGVhZGVyLXRpdGxlXCI+e2hlYWRlcn08L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICApO1xufVxuXG4vKiogQSBncm91cGluZyBpbiB0aGUgdGFibGUsIG9yIGFuIGluZGl2aWR1YWwgcm93LlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gVmFuaWxsYVJvd0dyb3VwPFQ+KHtcbiAgICBsZXZlbCxcbiAgICBjb2x1bW5zLFxuICAgIGVsZW1lbnQsXG4gICAgZ3JvdXBpbmdzLFxufToge1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgY29sdW1uczogVmFuaWxsYUNvbHVtbjxUPltdO1xuICAgIGVsZW1lbnQ6IFQgfCBHcm91cEVsZW1lbnQ8VD47XG4gICAgZ3JvdXBpbmdzPzogR3JvdXBpbmdDb25maWc8VD5bXTtcbn0pIHtcbiAgICBpZiAoR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwaW5nQ29uZmlnID0gZ3JvdXBpbmdzID8gZ3JvdXBpbmdzW01hdGgubWluKGdyb3VwaW5ncy5sZW5ndGggLSAxLCBsZXZlbCldIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPFRhYmxlR3JvdXBIZWFkZXIgbGV2ZWw9e2xldmVsfSB2YWx1ZT17ZWxlbWVudH0gd2lkdGg9e2NvbHVtbnMubGVuZ3RofSBjb25maWc9e2dyb3VwaW5nQ29uZmlnfSAvPlxuICAgICAgICAgICAgICAgIHtlbGVtZW50LnJvd3MubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFZhbmlsbGFSb3dHcm91cCBsZXZlbD17bGV2ZWwgKyAxfSBjb2x1bW5zPXtjb2x1bW5zfSBlbGVtZW50PXtyb3d9IC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiA8VGFibGVSb3cgbGV2ZWw9e2xldmVsfSByb3c9e2VsZW1lbnR9IGNvbHVtbnM9e2NvbHVtbnN9IC8+O1xuICAgIH1cbn1cblxuLyoqIEEgaGVhZGVyIG9mIGEgZ3JvdXBlZCBzZXQgb2YgY29sdW1ucy5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRhYmxlR3JvdXBIZWFkZXI8VD4oe1xuICAgIGxldmVsLFxuICAgIHZhbHVlLFxuICAgIHdpZHRoLFxuICAgIGNvbmZpZyxcbn06IHtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIHZhbHVlOiBHcm91cEVsZW1lbnQ8VD47XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBjb25maWc/OiBHcm91cGluZ0NvbmZpZzxUPjtcbn0pIHtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgY29uc3QgcmF3UmVuZGVyYWJsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoY29uZmlnPy5yZW5kZXIpIHJldHVybiBjb25maWcucmVuZGVyKHZhbHVlLmtleSwgdmFsdWUucm93cyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGgyPlxuICAgICAgICAgICAgICAgICAgICA8TGl0IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGh9IGlubGluZT17dHJ1ZX0gdmFsdWU9e3ZhbHVlLmtleX0gLz5cbiAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgKTtcbiAgICB9LCBbY29uZmlnPy5yZW5kZXIsIHZhbHVlLmtleSwgdmFsdWUucm93c10pO1xuICAgIGNvbnN0IHJlbmRlcmFibGUgPSB1c2VBc0VsZW1lbnQocmF3UmVuZGVyYWJsZSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8dHIgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtZ3JvdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICA8dGQgY29sU3Bhbj17d2lkdGh9PntyZW5kZXJhYmxlfTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgKTtcbn1cblxuLyoqIEEgc2luZ2xlIHJvdyBpbnNpZGUgdGhlIHRhYmxlLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gVGFibGVSb3c8VD4oeyBsZXZlbCwgcm93LCBjb2x1bW5zIH06IHsgbGV2ZWw6IG51bWJlcjsgcm93OiBUOyBjb2x1bW5zOiBWYW5pbGxhQ29sdW1uPFQ+W10gfSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDx0ciBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1yb3dcIiBzdHlsZT17bGV2ZWwgPyBgcGFkZGluZy1sZWZ0OiAke2xldmVsICogNX1weGAgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wpID0+IChcbiAgICAgICAgICAgICAgICA8VGFibGVSb3dDZWxsIHJvdz17cm93fSBjb2x1bW49e2NvbH0gLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L3RyPlxuICAgICk7XG59XG5cbi8qKiBBIHNpbmdsZSBjZWxsIGluc2lkZSBvZiBhIHJvdyBvZiB0aGUgdGFibGUuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUYWJsZVJvd0NlbGw8VD4oeyByb3csIGNvbHVtbiB9OiB7IHJvdzogVDsgY29sdW1uOiBWYW5pbGxhQ29sdW1uPFQ+IH0pIHtcbiAgICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oKCkgPT4gY29sdW1uLnZhbHVlKHJvdyksIFtyb3csIGNvbHVtbi52YWx1ZV0pO1xuICAgIGNvbnN0IFtlZGl0YWJsZVN0YXRlLCBkaXNwYXRjaF0gPSB1c2VFZGl0YWJsZURpc3BhdGNoPHR5cGVvZiB2YWx1ZT4oe1xuICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgdXBkYXRlcjogKHYpID0+IGNvbHVtbi5vblVwZGF0ZSAmJiBjb2x1bW4ub25VcGRhdGUodiwgcm93KSxcbiAgICB9KTtcbiAgICBjb25zdCByZW5kZXJhYmxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4ucmVuZGVyKSB7XG4gICAgICAgICAgICBsZXQgciA9IGNvbHVtbi5yZW5kZXIoZWRpdGFibGVTdGF0ZS5jb250ZW50LCByb3cpO1xuICAgICAgICAgICAgaWYgKHIgJiYgdHlwZW9mIHIgPT0gXCJvYmplY3RcIiAmJiBcInByb3BzXCIgaW4gcikgcmV0dXJuIHsgLi4uciwgcHJvcHM6IHsgLi4uci5wcm9wcywgZGlzcGF0Y2ggfSB9O1xuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gdmFsdWU7XG4gICAgfSwgW3JvdywgY29sdW1uLnJlbmRlciwgdmFsdWVdKTtcblxuICAgIGNvbnN0IHJlbmRlcmVkID0gdXNlQXNFbGVtZW50KHJlbmRlcmFibGUpO1xuXG4gICAgY29uc3QgRWRpdG9yID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBlO1xuICAgICAgICBpZiAoY29sdW1uLmVkaXRhYmxlICYmIGNvbHVtbi5lZGl0b3IpIGUgPSBjb2x1bW4uZWRpdG9yKGVkaXRhYmxlU3RhdGUuY29udGVudCwgcm93KTtcbiAgICAgICAgZWxzZSBlID0gbnVsbDtcbiAgICAgICAgaWYgKGUpIHJldHVybiB7IC4uLmUsIHByb3BzOiB7IC4uLmUucHJvcHMsIGRpc3BhdGNoIH0gfTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfSwgW3JvdywgY29sdW1uLmVkaXRvciwgY29sdW1uLmVkaXRhYmxlLCB2YWx1ZV0pO1xuICAgIHJldHVybiAoXG4gICAgICAgIDx0ZFxuICAgICAgICAgICAgb25EYmxDbGljaz17KCkgPT4gZGlzcGF0Y2goeyB0eXBlOiBcImVkaXRpbmctdG9nZ2xlZFwiLCBuZXdWYWx1ZTogIWVkaXRhYmxlU3RhdGUuaXNFZGl0aW5nIH0pfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0YWNvcmUtdGFibGUtY2VsbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHtjb2x1bW4uZWRpdGFibGUgPyAoXG4gICAgICAgICAgICAgICAgPEVkaXRhYmxlPHR5cGVvZiB2YWx1ZT5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlbmRlcj17cmVuZGVyZWR9XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcj17RWRpdG9yfVxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD17ZGlzcGF0Y2h9XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPXtlZGl0YWJsZVN0YXRlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIHJlbmRlcmVkXG4gICAgICAgICAgICApfVxuICAgICAgICA8L3RkPlxuICAgICk7XG59XG5cbi8qKiBFbnN1cmUgdGhhdCBhIGdpdmVuIGxpdGVyYWwgb3IgZWxlbWVudCBpbnB1dCBpcyByZW5kZXJlZCBhcyBhIEpTWC5FbGVtZW50LlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXNFbGVtZW50KGVsZW1lbnQ6IFZOb2RlIHwgTGl0ZXJhbCk6IFZOb2RlIHtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gdXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG5cbiAgICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgYXMgVk5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gPExpdCBzb3VyY2VQYXRoPXtzb3VyY2VQYXRofSBpbmxpbmU9e3RydWV9IHZhbHVlPXtlbGVtZW50IGFzIGFueX0gLz47XG4gICAgICAgIH1cbiAgICB9LCBbZWxlbWVudF0pO1xufVxuLyoqIFByb3ZpZGVzIGEgc29ydCBidXR0b24gdGhhdCBoYXMgYSBjbGljayBoYW5kbGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNvcnRCdXR0b24oe1xuICAgIGRpcmVjdGlvbixcbiAgICBvbkNsaWNrLFxuICAgIGNsYXNzTmFtZSxcbn06IHtcbiAgICBkaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uO1xuICAgIG9uQ2xpY2s/OiAoZXZ0OiBNb3VzZUV2ZW50KSA9PiBhbnk7XG4gICAgY2xhc3NOYW1lPzogc3RyaW5nO1xufSkge1xuICAgIGNvbnN0IGljb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBcImFzY2VuZGluZ1wiKSByZXR1cm4gZmFTb3J0RG93bjtcbiAgICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFwiZGVzY2VuZGluZ1wiKSByZXR1cm4gZmFTb3J0VXA7XG4gICAgICAgIHJldHVybiBmYVNvcnQ7XG4gICAgfSwgW2RpcmVjdGlvbl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBvbkNsaWNrPXtvbkNsaWNrfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIGljb249e2ljb259IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG5cbi8qKiBEZWZhdWx0IGNvbXBhcmF0b3IgZm9yIHNvcnRpbmcgb24gYSB0YWJsZSBjb2x1bW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9UQUJMRV9DT01QQVJBVE9SOiA8VD4oYTogTGl0ZXJhbCwgYjogTGl0ZXJhbCwgYW86IFQsIGJvOiBUKSA9PiBudW1iZXIgPSAoYSwgYiwgX2FvLCBfYm8pID0+XG4gICAgTGl0ZXJhbHMuY29tcGFyZShhLCBiKTtcblxuLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFRhYmxlIEhvb2tzIC8vXG4vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgdHlwZSBUYWJsZUFjdGlvbiA9XG4gICAgfCB7IHR5cGU6IFwicmVzZXQtYWxsXCIgfVxuICAgIHwgeyB0eXBlOiBcInNldC1wYWdlXCI7IHBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6IFwic29ydC1jb2x1bW5cIjsgY29sdW1uOiBzdHJpbmc7IGRpcmVjdGlvbj86IFwiYXNjZW5kaW5nXCIgfCBcImRlc2NlbmRpbmdcIiB9O1xuXG5leHBvcnQgdHlwZSBTb3J0RGlyZWN0aW9uID0gXCJhc2NlbmRpbmdcIiB8IFwiZGVzY2VuZGluZ1wiO1xuXG4vKiogVGhlIHdheXMgdGhhdCB0aGUgdGFibGUgY2FuIGJlIHNvcnRlZC4gKi9cbmV4cG9ydCB0eXBlIFNvcnRPbiA9IHsgdHlwZTogXCJjb2x1bW5cIjsgaWQ6IHN0cmluZzsgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uIH07XG4iLCAiLyoqXG4gKiBAbW9kdWxlIHZpZXdzXG4gKi9cbmltcG9ydCB7IFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgUHJvcHNXaXRoQ2hpbGRyZW4gfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlZFN0YXRlIH0gZnJvbSBcInVpL2hvb2tzXCI7XG5cbmltcG9ydCBcIi4vY2FsbG91dC5jc3NcIjtcbmltcG9ydCB7IGNvbWJpbmVDbGFzc2VzIH0gZnJvbSBcIi4uL2Jhc2ljc1wiO1xuXG4vKiogR2VuZXJhbCBwcm9wZXJ0aWVzIGZvciBjb25maWd1cmluZyBhIGNhbGxvdXQuXG4gKiBAZ3JvdXAgUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWxsb3V0UHJvcHMge1xuICAgIC8qKiBUaXRsZSBvZiB0aGUgY2FsbG91dC4gKi9cbiAgICB0aXRsZTogc3RyaW5nIHwgVk5vZGU7XG4gICAgLyoqIEFyYml0cmFyeSBpY29uIHRvIHNob3cgYXQgdGhlIGxlZnQgc2lkZSBvZiB0aGUgdGl0bGUgaW4gdGhlIGNhbGxvdXQuICovXG4gICAgaWNvbj86IFZOb2RlO1xuICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgY2FsbG91dC4gKi9cbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIC8qKiBXaGV0aGVyIHRoZSBjYWxsb3V0IGlzIGNvbGxhcHNpYmxlIChkZWZhdWx0cyB0byB0cnVlKS4gKi9cbiAgICBjb2xsYXBzaWJsZT86IGJvb2xlYW47XG5cbiAgICAvKiogQ29udHJvbGxlZCBwcm9wIGZvciBzZXR0aW5nIHdoZXRoZXIgdGhlIGNhbGxvdXQgaXMgb3Blbi4gKi9cbiAgICBvcGVuOiBib29sZWFuO1xuICAgIC8qKiBXaGV0aGVyIHRoZSBjYWxsb3V0IGlzIGluaXRpYWxseSBvcGVuIGlmIHVuY29udHJvbGxlZC4gKi9cbiAgICBpbml0aWFsT3Blbj86IGJvb2xlYW47XG4gICAgLyoqIENhbGxlZCB3aGVuZXZlciB0aGUgb3BlbiBzdGF0ZSBvZiB0aGUgY2FsbG91dCBjaGFuZ2VzIGR1ZSB0byB1c2VyIGFjdGlvbi4gKi9cbiAgICBvbk9wZW5DaGFuZ2U/OiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbi8qKiBTcGxpdHMgb24gYHw8c3R1ZmY+YC4gKi9cbmNvbnN0IE1FVEFEQVRBX1NQTElUX1JFR0VYID0gL1xcfCguKikvcztcblxuLyoqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICogQHBhcmFtIHByb3BzIHtAaW5oZXJpdERvYyBDYWxsb3V0UHJvcHN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDYWxsb3V0KHtcbiAgICBjb2xsYXBzaWJsZSA9IHRydWUsXG4gICAgb3Blbjogb3BlblByb3AsXG4gICAgaW5pdGlhbE9wZW4sXG4gICAgb25PcGVuQ2hhbmdlLFxuICAgIHRpdGxlLFxuICAgIGljb24sXG4gICAgY2hpbGRyZW4sXG4gICAgdHlwZSxcbn06IFByb3BzV2l0aENoaWxkcmVuPENhbGxvdXRQcm9wcz4pIHtcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VDb250cm9sbGVkU3RhdGUoaW5pdGlhbE9wZW4gPz8gdHJ1ZSwgb3BlblByb3AsIG9uT3BlbkNoYW5nZSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgZGF0YS1jYWxsb3V0LW1ldGFkYXRhPXt0eXBlPy5zcGxpdChNRVRBREFUQV9TUExJVF9SRUdFWCk/LlsxXX1cbiAgICAgICAgICAgIGRhdGEtY2FsbG91dD17dHlwZT8uc3BsaXQoTUVUQURBVEFfU1BMSVRfUkVHRVgpPy5bMF19XG4gICAgICAgICAgICBkYXRhLWNhbGxvdXQtZm9sZD17b3BlbiA/IFwiK1wiIDogXCItXCJ9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NvbWJpbmVDbGFzc2VzKFwiZGF0YWNvcmVcIiwgXCJjYWxsb3V0XCIsIGNvbGxhcHNpYmxlID8gXCJpcy1jb2xsYXBzaWJsZVwiIDogdW5kZWZpbmVkKX1cbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYWxsb3V0LXRpdGxlXCIgb25DbGljaz17KCkgPT4gY29sbGFwc2libGUgJiYgc2V0T3Blbighb3Blbil9PlxuICAgICAgICAgICAgICAgIHtpY29uICYmIDxkaXYgY2xhc3NOYW1lPVwiY2FsbG91dC1pY29uXCI+e2ljb259PC9kaXY+fVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FsbG91dC10aXRsZS1pbm5lclwiPnt0aXRsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICB7Y29sbGFwc2libGUgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y29tYmluZUNsYXNzZXMoXCJjYWxsb3V0LWZvbGRcIiwgIW9wZW4gPyBcImlzLWNvbGxhcHNlZFwiIDogdW5kZWZpbmVkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIGx1Y2lkZS1jaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJtNiA5IDYgNiA2LTZcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge29wZW4gJiYgPGRpdiBjbGFzc05hbWU9XCJjYWxsb3V0LWNvbnRlbnRcIj57Y2hpbGRyZW59PC9kaXY+fVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSB2aWV3c1xuICovXG5cbmltcG9ydCB7IExpdGVyYWwgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5cbmltcG9ydCBcIi4vY2FyZHMuY3NzXCI7XG4vKipcbiAqIFByb3BzIGZvciB0aGUgY2FyZCBjb21wb25lbnRcbiAqXG4gKiBAZ3JvdXAgUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXJkUHJvcHM8VD4ge1xuICAgIC8qKiB0aGUgYWN0dWFsIHZhbHVlIGhlbGQgaW4gdGhpcyBjYXJkLiAqL1xuICAgIHZhbHVlOiBUO1xuXG4gICAgLyoqIFRoZSB0aXRsZSBvZiB0aGUgY2FyZC4gKi9cbiAgICB0aXRsZTogTGl0ZXJhbCB8ICgodmFsOiBUKSA9PiBMaXRlcmFsIHwgVk5vZGUpO1xuXG4gICAgLyoqIFRoZSByYXcgY29udGVudCBvZiB0aGUgY2FyZC4gKi9cbiAgICBjb250ZW50OiBMaXRlcmFsIHwgKCh2YWw6IFQpID0+IExpdGVyYWwgfCBWTm9kZSk7XG5cbiAgICAvKiogb3B0aW9uYWwgZm9vdGVyIChiZWNhdXNlIHdoeSBub3Q/KSAqL1xuICAgIGZvb3Rlcj86IExpdGVyYWwgfCAoKHZhbDogVCkgPT4gTGl0ZXJhbCB8IFZOb2RlKTtcblxuICAgIC8qKiBJZiB0cnVlLCB0aGUgdGl0bGUgd2lsbCBiZSByZW5kZXJlZCBjZW50ZXJlZC4gKi9cbiAgICBjZW50ZXJUaXRsZT86IGJvb2xlYW47XG59XG4vKipcbiAqIEEgY2FyZCB3aXRoIGEgdGl0bGUgYW5kIGNvbnRlbnRcbiAqXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gQ2FyZDxUPihwcm9wczogQ2FyZFByb3BzPFQ+KSB7XG4gICAgY29uc3QgY2FyZFRpdGxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMudGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRpdGxlKHByb3BzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aXRsZTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy52YWx1ZSwgcHJvcHMudGl0bGVdKTtcblxuICAgIGNvbnN0IGlubmVyQ29udGVudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHByb3BzLmNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHByb3BzLmNvbnRlbnQocHJvcHMudmFsdWUpO1xuICAgICAgICBlbHNlIHJldHVybiBwcm9wcy5jb250ZW50O1xuICAgIH0sIFtwcm9wcy52YWx1ZSwgcHJvcHMuY29udGVudF0pO1xuXG4gICAgY29uc3QgZm9vdGVyQ29udGVudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuZm9vdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcHMuZm9vdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuZm9vdGVyKHByb3BzLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmZvb3RlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LCBbcHJvcHMuZm9vdGVyLCBwcm9wcy52YWx1ZV0pO1xuXG4gICAgY29uc3QgdGl0bGVDbGFzc2VzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBiYXNlID0gW1wiZGF0YWNvcmUtY2FyZC10aXRsZVwiXTtcbiAgICAgICAgaWYgKHByb3BzLmNlbnRlclRpdGxlKSBiYXNlID0gYmFzZS5jb25jYXQoXCJjZW50ZXJlZFwiKTtcbiAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfSwgW3Byb3BzLmNlbnRlclRpdGxlLCBwcm9wcy50aXRsZSwgcHJvcHMuY29udGVudCwgcHJvcHMudmFsdWVdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtY2FyZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RpdGxlQ2xhc3Nlcy5qb2luKFwiIFwiKX0+e2NhcmRUaXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtY2FyZC1pbm5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0YWNvcmUtY2FyZC1jb250ZW50XCI+e2lubmVyQ29udGVudH08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGFjb3JlLWNhcmQtZm9vdGVyXCI+e2Zvb3RlckNvbnRlbnR9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgYXBpXG4gKi9cbmltcG9ydCB7IEdyb3VwaW5ncywgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5cbi8qKiBBIGZ1bmN0aW9uIHdoaWNoIG1hcHMgYW4gYXJyYXkgZWxlbWVudCB0byBzb21lIHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgQXJyYXlGdW5jPFQsIE8+ID0gKGVsZW06IFQsIGluZGV4OiBudW1iZXIsIGFycjogVFtdKSA9PiBPO1xuXG4vKiogQSBmdW5jdGlvbiB3aGljaCBjb21wYXJlcyB0d28gdHlwZXMuICovXG5leHBvcnQgdHlwZSBBcnJheUNvbXBhcmF0b3I8VD4gPSAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xuXG4vKiogRmluZHMgdGhlIHZhbHVlIG9mIHRoZSBsb3dlc3QgdmFsdWUgdHlwZSBpbiBhIGdyb3VwaW5nLiAqL1xuZXhwb3J0IHR5cGUgTG93ZXN0S2V5PFQ+ID0gVCBleHRlbmRzIHsga2V5OiBhbnk7IHJvd3M6IGFueSB9ID8gTG93ZXN0S2V5PFRbXCJyb3dzXCJdWzBdPiA6IFQ7XG5cbi8qKiBBIHJpZGljdWxvdXMgdHlwZSB3aGljaCBwcm9wZXJseSB0eXBlcyB0aGUgcmVzdWx0IG9mIHRoZSAnZ3JvdXBJbicgY29tbWFuZC4gKi9cbmV4cG9ydCB0eXBlIEluZ3JvdXBlZDxVLCBUPiA9IFQgZXh0ZW5kcyB7IGtleTogYW55OyByb3dzOiBhbnkgfVxuICAgID8geyBrZXk6IFRbXCJrZXlcIl07IHJvd3M6IEluZ3JvdXBlZDxVLCBUW1wicm93c1wiXVswXT4gfVxuICAgIDogeyBrZXk6IFU7IHJvd3M6IFRbXSB9O1xuXG4vKipcbiAqIFByb3hpZWQgaW50ZXJmYWNlIHdoaWNoIGFsbG93cyBtYW5pcHVsYXRpbmcgYXJyYXktYmFzZWQgZGF0YS4gQWxsIGZ1bmN0aW9ucyBvbiBhIGRhdGEgYXJyYXkgcHJvZHVjZSBhIE5FVyBhcnJheVxuICogKGkuZS4sIHRoZSBhcnJheXMgYXJlIGltbXV0YWJsZSkuXG4gKiBAZ3JvdXAgQ29tbW9uIFR5cGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUFycmF5PFQ+IHtcbiAgICAvKiogVGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkuICovXG4gICAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgICAvKiogQXBwbGllcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gdGhlIGVudGlyZSBkYXRhIGFycmF5LiBBbGxvd3MgdXNpbmcgZnVuY3Rpb24gY2hhaW5pbmcgd2hpbGUgYXBwbHlpbmcgYW4gYXJiaXRyYXJ5IGludGVybWVkaWF0ZSBmdW5jdGlvbi4gKi9cbiAgICBjaGFpbjxVPihvcDogKGFycjogRGF0YUFycmF5PFQ+KSA9PiBEYXRhQXJyYXk8VT4pOiBEYXRhQXJyYXk8VT47XG5cbiAgICAvKiogRmlsdGVyIHRoZSBkYXRhIGFycmF5IGRvd24gdG8ganVzdCBlbGVtZW50cyB3aGljaCBtYXRjaCB0aGUgZ2l2ZW4gcHJlZGljYXRlLiAqL1xuICAgIHdoZXJlKHByZWRpY2F0ZTogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogRGF0YUFycmF5PFQ+O1xuICAgIC8qKiBBbGlhcyBmb3IgJ3doZXJlJyBmb3IgcGVvcGxlIHdobyB3YW50IGFycmF5IHNlbWFudGljcy4gKi9cbiAgICBmaWx0ZXIocHJlZGljYXRlOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBEYXRhQXJyYXk8VD47XG5cbiAgICAvKiogTWFwIGVsZW1lbnRzIGluIHRoZSBkYXRhIGFycmF5IGJ5IGFwcGx5aW5nIGEgZnVuY3Rpb24gdG8gZWFjaC4gKi9cbiAgICBtYXA8VT4oZjogQXJyYXlGdW5jPFQsIFU+KTogRGF0YUFycmF5PFU+O1xuICAgIC8qKiBNYXAgZWxlbWVudHMgaW4gdGhlIGRhdGEgYXJyYXkgYnkgYXBwbHlpbmcgYSBmdW5jdGlvbiB0byBlYWNoLCB0aGVuIGZsYXR0ZW4gdGhlIHJlc3VsdHMgdG8gcHJvZHVjZSBhIG5ldyBhcnJheS4gKi9cbiAgICBmbGF0TWFwPFU+KGY6IEFycmF5RnVuYzxULCBVW10+KTogRGF0YUFycmF5PFU+O1xuICAgIC8qKiBNdXRhYmx5IGNoYW5nZSBlYWNoIHZhbHVlIGluIHRoZSBhcnJheSwgcmV0dXJuaW5nIHRoZSBzYW1lIGFycmF5IHdoaWNoIHlvdSBjYW4gZnVydGhlciBjaGFpbiBvZmYgb2YuICovXG4gICAgbXV0YXRlKGY6IEFycmF5RnVuYzxULCB2b2lkPik6IERhdGFBcnJheTxUPjtcblxuICAgIC8qKiBMaW1pdCB0aGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGFycmF5IHRvIHRoZSBnaXZlbiB2YWx1ZS4gKi9cbiAgICBsaW1pdChjb3VudDogbnVtYmVyKTogRGF0YUFycmF5PFQ+O1xuICAgIC8qKlxuICAgICAqIFRha2UgYSBzbGljZSBvZiB0aGUgYXJyYXkuIElmIGBzdGFydGAgaXMgdW5kZWZpbmVkLCBpdCBpcyBhc3N1bWVkIHRvIGJlIDA7IGlmIGBlbmRgIGlzIHVuZGVmaW5lZCwgaXQgaXMgYXNzdW1iZWRcbiAgICAgKiB0byBiZSB0aGUgZW5kIG9mIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICBzbGljZShzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKTogRGF0YUFycmF5PFQ+O1xuICAgIC8qKiBDb25jYXRlbmF0ZSB0aGUgdmFsdWVzIGluIHRoaXMgZGF0YSBhcnJheSB3aXRoIHRob3NlIG9mIGFub3RoZXIgaXRlcmFibGUgLyBkYXRhIGFycmF5IC8gYXJyYXkuICovXG4gICAgY29uY2F0KG90aGVyOiBJdGVyYWJsZTxUPik6IERhdGFBcnJheTxUPjtcblxuICAgIC8qKiBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IG9mIHRoZSBnaXZlbiAob3B0aW9uYWxseSBzdGFydGluZyB0aGUgc2VhcmNoKSAqL1xuICAgIGluZGV4T2YoZWxlbWVudDogVCwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xuICAgIC8qKiBSZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS4gKi9cbiAgICBmaW5kKHByZWQ6IEFycmF5RnVuYzxULCBib29sZWFuPik6IFQgfCB1bmRlZmluZWQ7XG4gICAgLyoqIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgc2F0aXNmaWVzIHRoZSBnaXZlbiBwcmVkaWNhdGUuIFJldHVybnMgLTEgaWYgbm90aGluZyB3YXMgZm91bmQuICovXG4gICAgZmluZEluZGV4KHByZWQ6IEFycmF5RnVuYzxULCBib29sZWFuPiwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyO1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFycmF5IGNvbnRhaW5zIHRoZSBnaXZlbiBlbGVtZW50LCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAqL1xuICAgIGluY2x1ZGVzKGVsZW1lbnQ6IFQpOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIG9idGFpbmVkIGJ5IGNvbnZlcnRpbmcgZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSB0byBhIHN0cmluZywgYW5kIGpvaW5pbmcgaXQgd2l0aCB0aGVcbiAgICAgKiBnaXZlbiBzZXBhcmF0b3IgKHdoaWNoIGRlZmF1bHRzIHRvICcsICcpLlxuICAgICAqL1xuICAgIGpvaW4oc2VwPzogc3RyaW5nKTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgc29ydGVkIGFycmF5IHNvcnRlZCBieSB0aGUgZ2l2ZW4ga2V5OyBhbiBvcHRpb25hbCBjb21wYXJhdG9yIGNhbiBiZSBwcm92aWRlZCwgd2hpY2ggd2lsbFxuICAgICAqIGJlIHVzZWQgdG8gY29tcGFyZSB0aGUga2V5cyBpbiBsZWl1IG9mIHRoZSBkZWZhdWx0IGRhdGF2aWV3IGNvbXBhcmF0b3IuXG4gICAgICovXG4gICAgc29ydDxVPihrZXk6IEFycmF5RnVuYzxULCBVPiwgZGlyZWN0aW9uPzogXCJhc2NcIiB8IFwiZGVzY1wiLCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PFQ+O1xuXG4gICAgLyoqXG4gICAgICogTXV0YWJseSBtb2RpZnkgdGhlIGN1cnJlbnQgYXJyYXkgd2l0aCBhbiBpbiBwbGFjZSBzb3J0OyB0aGlzIGlzIGxlc3MgZmxleGlibGUgdGhhbiBhIHJlZ3VsYXIgc29ydCBpbiBleGNoYW5nZVxuICAgICAqIGZvciBiZWluZyBhIGxpdHRsZSBtb3JlIHBlcmZvcm1hbnQuIE9ubHkgdXNlIHRoaXMgaXMgcGVyZm9ybWFuY2UgaXMgYSBzZXJpb3VzIGNvbnNpZGVyYXRpb24uXG4gICAgICovXG4gICAgc29ydEluUGxhY2U8VT4oa2V5OiAodjogVCkgPT4gVSwgZGlyZWN0aW9uPzogXCJhc2NcIiB8IFwiZGVzY1wiLCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PFQ+O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIGFycmF5IHdoZXJlIGVsZW1lbnRzIGFyZSBncm91cGVkIGJ5IHRoZSBnaXZlbiBrZXk7IHRoZSByZXN1bHRpbmcgYXJyYXkgd2lsbCBoYXZlIG9iamVjdHMgb2YgdGhlIGZvcm1cbiAgICAgKiBcXGB7IGtleTogXFw8a2V5IHZhbHVlXFw+LCByb3dzOiBEYXRhQXJyYXkgfWAuXG4gICAgICovXG4gICAgZ3JvdXBCeTxVPihrZXk6IEFycmF5RnVuYzxULCBVPiwgY29tcGFyYXRvcj86IEFycmF5Q29tcGFyYXRvcjxVPik6IERhdGFBcnJheTx7IGtleTogVTsgcm93czogVFtdIH0+O1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIGFycmF5IGlzIG5vdCBncm91cGVkLCBncm91cHMgaXQgYXMgYGdyb3VwQnlgIGRvZXM7IG90aGVyd2lzZSwgZ3JvdXBzIHRoZSBlbGVtZW50cyBpbnNpZGUgZWFjaCBjdXJyZW50XG4gICAgICogZ3JvdXAuIFRoaXMgYWxsb3dzIGZvciB0b3AtZG93biByZWN1cnNpdmUgZ3JvdXBpbmcgd2hpY2ggbWF5IGJlIGVhc2llciB0aGFuIGJvdHRvbS11cCBncm91cGluZy5cbiAgICAgKi9cbiAgICBncm91cEluPFU+KGtleTogQXJyYXlGdW5jPExvd2VzdEtleTxUPiwgVT4sIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT4pOiBEYXRhQXJyYXk8SW5ncm91cGVkPFUsIFQ+PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybiBkaXN0aW5jdCBlbnRyaWVzLiBJZiBhIGtleSBpcyBwcm92aWRlZCwgdGhlbiByb3dzIHdpdGggZGlzdGluY3Qga2V5cyBhcmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgZGlzdGluY3Q8VT4oa2V5PzogQXJyYXlGdW5jPFQsIFU+LCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PFQ+O1xuXG4gICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBwcmVkaWNhdGUgaXMgdHJ1ZSBmb3IgYWxsIHZhbHVlcy4gKi9cbiAgICBldmVyeShmOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBib29sZWFuO1xuICAgIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcHJlZGljYXRlIGlzIHRydWUgZm9yIGF0IGxlYXN0IG9uZSB2YWx1ZS4gKi9cbiAgICBzb21lKGY6IEFycmF5RnVuYzxULCBib29sZWFuPik6IGJvb2xlYW47XG4gICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBwcmVkaWNhdGUgaXMgRkFMU0UgZm9yIGFsbCB2YWx1ZXMuICovXG4gICAgbm9uZShmOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBib29sZWFuO1xuXG4gICAgLyoqIFJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgZGF0YSBhcnJheS4gUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGFycmF5IGlzIGVtcHR5LiAqL1xuICAgIGZpcnN0KCk6IFQ7XG4gICAgLyoqIFJldHVybiB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBkYXRhIGFycmF5LiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuICovXG4gICAgbGFzdCgpOiBUO1xuXG4gICAgLyoqIE1hcCBldmVyeSBlbGVtZW50IGluIHRoaXMgZGF0YSBhcnJheSB0byB0aGUgZ2l2ZW4ga2V5LCBhbmQgdGhlbiBmbGF0dGVuIGl0LiovXG4gICAgdG8oa2V5OiBzdHJpbmcpOiBEYXRhQXJyYXk8YW55PjtcbiAgICAvKiogTWFwIGV2ZXJ5IGVsZW1lbnQgaW4gdGhpcyBkYXRhIGFycmF5IHRvIHRoZSBnaXZlbiBrZXk7IHVubGlrZSB0bygpLCBkb2VzIG5vdCBmbGF0dGVuIHRoZSByZXN1bHQuICovXG4gICAgaW50byhrZXk6IHN0cmluZyk6IERhdGFBcnJheTxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZXhwYW5kIHRoZSBnaXZlbiBrZXksIGZsYXR0ZW5pbmcgYSB0cmVlIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUga2V5IGludG8gYSBmbGF0IGFycmF5LiBVc2VmdWwgZm9yIGhhbmRsaW5nXG4gICAgICogaGVpcmFyY2hpY2FsIGRhdGEgbGlrZSB0YXNrcyB3aXRoICdzdWJ0YXNrcycuXG4gICAgICovXG4gICAgZXhwYW5kKGtleTogc3RyaW5nKTogRGF0YUFycmF5PGFueT47XG5cbiAgICAvKiogUnVuIGEgbGFtYmRhIG9uIGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkuICovXG4gICAgZm9yRWFjaChmOiBBcnJheUZ1bmM8VCwgdm9pZD4pOiB2b2lkO1xuXG4gICAgLyoqIENvbnZlcnQgdGhpcyB0byBhIHBsYWluIGphdmFzY3JpcHQgYXJyYXkuICovXG4gICAgYXJyYXkoKTogVFtdO1xuXG4gICAgLyoqIEFsbG93IGl0ZXJhdGluZyBkaXJlY3RseSBvdmVyIHRoZSBhcnJheS4gKi9cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYXRvcjxUPjtcblxuICAgIC8qKiBNYXAgaW5kZXhlcyB0byB2YWx1ZXMuICovXG4gICAgW2luZGV4OiBudW1iZXJdOiBhbnk7XG4gICAgLyoqIEF1dG9tYXRpYyBmbGF0dGVuaW5nIG9mIGZpZWxkcy4gRXF1aXZhbGVudCB0byBpbXBsaWNpdGx5IGNhbGxpbmcgYGFycmF5LnRvKFwiZmllbGRcIilgICovXG4gICAgW2ZpZWxkOiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBAaGlkZGVuXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBEYXRhQXJyYXksIG1pbnVzIHRoZSBkeW5hbWljIHZhcmlhYmxlIGFjY2Vzcywgd2hpY2ggaXMgaW1wbGVtZW50ZWQgdmlhIHByb3h5LlxuICogKi9cbmNsYXNzIERhdGFBcnJheUltcGw8VD4gaW1wbGVtZW50cyBEYXRhQXJyYXk8VD4ge1xuICAgIHByaXZhdGUgc3RhdGljIEFSUkFZX0ZVTkNUSU9OUzogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgICAgICAgXCJjaGFpblwiLFxuICAgICAgICBcIndoZXJlXCIsXG4gICAgICAgIFwiZmlsdGVyXCIsXG4gICAgICAgIFwibWFwXCIsXG4gICAgICAgIFwiZmxhdE1hcFwiLFxuICAgICAgICBcIm11dGF0ZVwiLFxuICAgICAgICBcInNsaWNlXCIsXG4gICAgICAgIFwiY29uY2F0XCIsXG4gICAgICAgIFwiaW5kZXhPZlwiLFxuICAgICAgICBcImxpbWl0XCIsXG4gICAgICAgIFwiZmluZFwiLFxuICAgICAgICBcImZpbmRJbmRleFwiLFxuICAgICAgICBcImluY2x1ZGVzXCIsXG4gICAgICAgIFwiam9pblwiLFxuICAgICAgICBcInNvcnRcIixcbiAgICAgICAgXCJzb3J0SW5QbGFjZVwiLFxuICAgICAgICBcImdyb3VwQnlcIixcbiAgICAgICAgXCJncm91cEluXCIsXG4gICAgICAgIFwiZGlzdGluY3RcIixcbiAgICAgICAgXCJldmVyeVwiLFxuICAgICAgICBcInNvbWVcIixcbiAgICAgICAgXCJub25lXCIsXG4gICAgICAgIFwiZmlyc3RcIixcbiAgICAgICAgXCJsYXN0XCIsXG4gICAgICAgIFwidG9cIixcbiAgICAgICAgXCJpbnRvXCIsXG4gICAgICAgIFwibHdyYXBcIixcbiAgICAgICAgXCJleHBhbmRcIixcbiAgICAgICAgXCJmb3JFYWNoXCIsXG4gICAgICAgIFwibGVuZ3RoXCIsXG4gICAgICAgIFwidmFsdWVzXCIsXG4gICAgICAgIFwiYXJyYXlcIixcbiAgICAgICAgXCJkZWZhdWx0Q29tcGFyYXRvclwiLFxuICAgICAgICBcInRvU3RyaW5nXCIsXG4gICAgICAgIFwic2V0dGluZ3NcIixcbiAgICBdKTtcblxuICAgIHByaXZhdGUgc3RhdGljIEFSUkFZX1BST1hZOiBQcm94eUhhbmRsZXI8RGF0YUFycmF5SW1wbDxhbnk+PiA9IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wLCByZWNpZXZlcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSBcInN5bWJvbFwiKSByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHByb3AgPT09IFwibnVtYmVyXCIpIHJldHVybiB0YXJnZXQudmFsdWVzW3Byb3BdO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gXCJjb25zdHJ1Y3RvclwiKSByZXR1cm4gdGFyZ2V0LnZhbHVlcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc05hTihwYXJzZUludChwcm9wKSkpIHJldHVybiB0YXJnZXQudmFsdWVzW3BhcnNlSW50KHByb3ApXTtcbiAgICAgICAgICAgIGVsc2UgaWYgKERhdGFBcnJheUltcGwuQVJSQVlfRlVOQ1RJT05TLmhhcyhwcm9wLnRvU3RyaW5nKCkpKSByZXR1cm4gdGFyZ2V0W3Byb3AudG9TdHJpbmcoKV07XG5cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQudG8ocHJvcCk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHB1YmxpYyBzdGF0aWMgd3JhcDxUPihhcnI6IFRbXSwgZGVmYXVsdENvbXBhcmF0b3I6IEFycmF5Q29tcGFyYXRvcjxhbnk+ID0gTGl0ZXJhbHMuY29tcGFyZSk6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHk8RGF0YUFycmF5SW1wbDxUPj4obmV3IERhdGFBcnJheUltcGw8VD4oYXJyLCBkZWZhdWx0Q29tcGFyYXRvciksIERhdGFBcnJheUltcGwuQVJSQVlfUFJPWFkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsZW5ndGg6IG51bWJlcjtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZXM6IGFueVtdLCBwdWJsaWMgZGVmYXVsdENvbXBhcmF0b3I6IEFycmF5Q29tcGFyYXRvcjxhbnk+ID0gTGl0ZXJhbHMuY29tcGFyZSkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsd3JhcDxVPih2YWx1ZXM6IFVbXSk6IERhdGFBcnJheTxVPiB7XG4gICAgICAgIHJldHVybiBEYXRhQXJyYXlJbXBsLndyYXAodmFsdWVzLCB0aGlzLmRlZmF1bHRDb21wYXJhdG9yKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhaW48VT4ob3A6IChhcnI6IERhdGFBcnJheTxUPikgPT4gRGF0YUFycmF5PFU+KTogRGF0YUFycmF5PFU+IHtcbiAgICAgICAgcmV0dXJuIG9wKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aGVyZShwcmVkaWNhdGU6IEFycmF5RnVuYzxULCBib29sZWFuPik6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHRoaXMudmFsdWVzLmZpbHRlcihwcmVkaWNhdGUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2hlcmUocHJlZGljYXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwPFU+KGY6IEFycmF5RnVuYzxULCBVPik6IERhdGFBcnJheTxVPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHRoaXMudmFsdWVzLm1hcChmKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXRNYXA8VT4oZjogQXJyYXlGdW5jPFQsIFVbXT4pOiBEYXRhQXJyYXk8VT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZih0aGlzLnZhbHVlc1tpbmRleF0sIGluZGV4LCB0aGlzLnZhbHVlcyk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA9PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgZm9yIChsZXQgciBvZiB2YWx1ZSkgcmVzdWx0LnB1c2gocik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtdXRhdGUoZjogQXJyYXlGdW5jPFQsIHZvaWQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgZih0aGlzLnZhbHVlc1tpbmRleF0sIGluZGV4LCB0aGlzLnZhbHVlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHVibGljIGxpbWl0KGNvdW50OiBudW1iZXIpOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcCh0aGlzLnZhbHVlcy5zbGljZSgwLCBjb3VudCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzbGljZShzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAodGhpcy52YWx1ZXMuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25jYXQob3RoZXI6IERhdGFBcnJheTxUPik6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHRoaXMudmFsdWVzLmNvbmNhdChvdGhlci52YWx1ZXMpKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBvZiB0aGUgZ2l2ZW4gKG9wdGlvbmFsbHkgc3RhcnRpbmcgdGhlIHNlYXJjaCkgKi9cbiAgICBwdWJsaWMgaW5kZXhPZihlbGVtZW50OiBULCBmcm9tSW5kZXg/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kSW5kZXgoKGUpID0+IHRoaXMuZGVmYXVsdENvbXBhcmF0b3IoZSwgZWxlbWVudCkgPT0gMCwgZnJvbUluZGV4KTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgc2F0aXNmaWVzIHRoZSBnaXZlbiBwcmVkaWNhdGUuICovXG4gICAgcHVibGljIGZpbmQocHJlZDogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuZmluZEluZGV4KHByZWQpO1xuICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGVsc2UgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEluZGV4KHByZWQ6IEFycmF5RnVuYzxULCBib29sZWFuPiwgZnJvbUluZGV4PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSBmcm9tSW5kZXggPz8gMDsgaW5kZXggPCB0aGlzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKHByZWQodGhpcy52YWx1ZXNbaW5kZXhdLCBpbmRleCwgdGhpcy52YWx1ZXMpKSByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcHVibGljIGluY2x1ZGVzKGVsZW1lbnQ6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZihlbGVtZW50LCAwKSAhPSAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbihzZXA/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAoKHMpID0+IExpdGVyYWxzLnRvU3RyaW5nKHMpKVxuICAgICAgICAgICAgLmFycmF5KClcbiAgICAgICAgICAgIC5qb2luKHNlcCA/PyBcIiwgXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0PFU+KGtleT86IEFycmF5RnVuYzxULCBVPiwgZGlyZWN0aW9uPzogXCJhc2NcIiB8IFwiZGVzY1wiLCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PSAwKSByZXR1cm4gdGhpcztcbiAgICAgICAgbGV0IHJlYWxDb21wYXJhdG9yID0gY29tcGFyYXRvciA/PyB0aGlzLmRlZmF1bHRDb21wYXJhdG9yO1xuICAgICAgICBsZXQgcmVhbEtleSA9IGtleSA/PyAoKGw6IFQpID0+IGwgYXMgYW55IGFzIFUpO1xuXG4gICAgICAgIC8vIEFzc29jaWF0ZSBlYWNoIGVudHJ5IHdpdGggaXQncyBpbmRleCBmb3IgdGhlIGtleSBmdW5jdGlvbiwgYW5kIHRoZW4gZG8gYSBub3JtYWwgc29ydC5cbiAgICAgICAgbGV0IGNvcHkgPSAoW10gYXMgYW55W10pLmNvbmNhdCh0aGlzLmFycmF5KCkpLm1hcCgoZWxlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IGluZGV4OiBpbmRleCwgdmFsdWU6IGVsZW0gfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvcHkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgbGV0IGFLZXkgPSByZWFsS2V5KGEudmFsdWUsIGEuaW5kZXgsIHRoaXMudmFsdWVzKTtcbiAgICAgICAgICAgIGxldCBiS2V5ID0gcmVhbEtleShiLnZhbHVlLCBiLmluZGV4LCB0aGlzLnZhbHVlcyk7XG4gICAgICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09PSBcImRlc2NcIiA/IC1yZWFsQ29tcGFyYXRvcihhS2V5LCBiS2V5KSA6IHJlYWxDb21wYXJhdG9yKGFLZXksIGJLZXkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5sd3JhcChjb3B5Lm1hcCgoZSkgPT4gZS52YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0SW5QbGFjZTxVPihcbiAgICAgICAga2V5PzogKHZhbHVlOiBUKSA9PiBVLFxuICAgICAgICBkaXJlY3Rpb24/OiBcImFzY1wiIHwgXCJkZXNjXCIsXG4gICAgICAgIGNvbXBhcmF0b3I/OiBBcnJheUNvbXBhcmF0b3I8VT5cbiAgICApOiBEYXRhQXJyYXk8VD4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09IDApIHJldHVybiB0aGlzO1xuICAgICAgICBsZXQgcmVhbENvbXBhcmF0b3IgPSBjb21wYXJhdG9yID8/IHRoaXMuZGVmYXVsdENvbXBhcmF0b3I7XG4gICAgICAgIGxldCByZWFsS2V5ID0ga2V5ID8/ICgobDogVCkgPT4gbCBhcyBhbnkgYXMgVSk7XG5cbiAgICAgICAgdGhpcy52YWx1ZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgbGV0IGFLZXkgPSByZWFsS2V5KGEpO1xuICAgICAgICAgICAgbGV0IGJLZXkgPSByZWFsS2V5KGIpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09IFwiZGVzY1wiID8gLXJlYWxDb21wYXJhdG9yKGFLZXksIGJLZXkpIDogcmVhbENvbXBhcmF0b3IoYUtleSwgYktleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cEJ5PFU+KGtleTogQXJyYXlGdW5jPFQsIFU+LCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PHsga2V5OiBVOyByb3dzOiBUW10gfT4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09IDApIHJldHVybiB0aGlzLmx3cmFwKFtdKTtcblxuICAgICAgICAvLyBKYXZhU2NyaXB0IHN1Y2tzIGFuZCB3ZSBjYW4ndCBtYWtlIGhhc2ggbWFwcyBvdmVyIGFyYml0cmFyeSB0eXBlcyAob25seSBzdHJpbmdzL2ludHMpLCBzb1xuICAgICAgICAvLyB3ZSBkbyBhIHBvb3IgbWFuIGFsZ29yaXRobSB3aGVyZSB3ZSBTT1JULCBmb2xsb3dlZCBieSBncm91cGluZy5cbiAgICAgICAgbGV0IGludGVybWVkaWF0ZSA9IHRoaXMuc29ydChrZXksIFwiYXNjXCIsIGNvbXBhcmF0b3IpO1xuICAgICAgICBjb21wYXJhdG9yID0gY29tcGFyYXRvciA/PyB0aGlzLmRlZmF1bHRDb21wYXJhdG9yO1xuXG4gICAgICAgIGxldCByZXN1bHQ6IHsga2V5OiBVOyByb3dzOiBUW10gfVtdID0gW107XG4gICAgICAgIGxldCBjdXJyZW50Um93ID0gW2ludGVybWVkaWF0ZVswXV07XG4gICAgICAgIGxldCBjdXJyZW50ID0ga2V5KGludGVybWVkaWF0ZVswXSwgMCwgaW50ZXJtZWRpYXRlLnZhbHVlcyk7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpbnRlcm1lZGlhdGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBsZXQgbmV3S2V5ID0ga2V5KGludGVybWVkaWF0ZVtpbmRleF0sIGluZGV4LCBpbnRlcm1lZGlhdGUudmFsdWVzKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJhdG9yKGN1cnJlbnQsIG5ld0tleSkgIT0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsga2V5OiBjdXJyZW50LCByb3dzOiBjdXJyZW50Um93IH0pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBuZXdLZXk7XG4gICAgICAgICAgICAgICAgY3VycmVudFJvdyA9IFtpbnRlcm1lZGlhdGVbaW5kZXhdXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJvdy5wdXNoKGludGVybWVkaWF0ZVtpbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKHsga2V5OiBjdXJyZW50LCByb3dzOiBjdXJyZW50Um93IH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwSW48VT4oa2V5OiBBcnJheUZ1bmM8TG93ZXN0S2V5PFQ+LCBVPiwgY29tcGFyYXRvcj86IEFycmF5Q29tcGFyYXRvcjxVPik6IERhdGFBcnJheTxJbmdyb3VwZWQ8VSwgVD4+IHtcbiAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0dyb3VwaW5nKHRoaXMudmFsdWVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAodiBhcyBhbnkpLmtleSxcbiAgICAgICAgICAgICAgICAgICAgcm93czogRGF0YUFycmF5LndyYXAoKHYgYXMgYW55KS5yb3dzKS5ncm91cEluKGtleSBhcyBhbnksIGNvbXBhcmF0b3IgYXMgYW55KSxcbiAgICAgICAgICAgICAgICB9IGFzIGFueTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeShrZXkgYXMgYW55LCBjb21wYXJhdG9yKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzdGluY3Q8VT4oa2V5PzogQXJyYXlGdW5jPFQsIFU+LCBjb21wYXJhdG9yPzogQXJyYXlDb21wYXJhdG9yPFU+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PSAwKSByZXR1cm4gdGhpcztcbiAgICAgICAgbGV0IHJlYWxLZXkgPSBrZXkgPz8gKCh4KSA9PiB4IGFzIGFueSBhcyBVKTtcblxuICAgICAgICAvLyBGb3Igc2ltaWxhciByZWFzb25zIHRvIGdyb3VwQnksIGRvIGEgc29ydCBhbmQgdGFrZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBlYWNoIGJsb2NrLlxuICAgICAgICBsZXQgaW50ZXJtZWRpYXRlID0gdGhpcy5tYXAoKHgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBrZXk6IHJlYWxLZXkoeCwgaW5kZXgsIHRoaXMudmFsdWVzKSwgdmFsdWU6IHggfTtcbiAgICAgICAgfSkuc29ydCgoeCkgPT4geC5rZXksIFwiYXNjXCIsIGNvbXBhcmF0b3IpO1xuICAgICAgICBjb21wYXJhdG9yID0gY29tcGFyYXRvciA/PyB0aGlzLmRlZmF1bHRDb21wYXJhdG9yO1xuXG4gICAgICAgIGxldCByZXN1bHQ6IFRbXSA9IFtpbnRlcm1lZGlhdGVbMF0udmFsdWVdO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaW50ZXJtZWRpYXRlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoaW50ZXJtZWRpYXRlW2luZGV4IC0gMV0ua2V5LCBpbnRlcm1lZGlhdGVbaW5kZXhdLmtleSkgIT0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGludGVybWVkaWF0ZVtpbmRleF0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXZlcnkoZjogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5ldmVyeShmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc29tZShmOiBBcnJheUZ1bmM8VCwgYm9vbGVhbj4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLnNvbWUoZik7XG4gICAgfVxuXG4gICAgcHVibGljIG5vbmUoZjogQXJyYXlGdW5jPFQsIGJvb2xlYW4+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5ldmVyeSgodiwgaSwgYSkgPT4gIWYodiwgaSwgYSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaXJzdCgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLnZhbHVlc1swXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcHVibGljIGxhc3QoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGggPiAwID8gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZXMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHRvKGtleTogc3RyaW5nKTogRGF0YUFycmF5PGFueT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gY2hpbGRba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IERhdGFBcnJheS5pc0RhdGFBcnJheSh2YWx1ZSkpIHZhbHVlLmZvckVhY2goKHYpID0+IHJlc3VsdC5wdXNoKHYpKTtcbiAgICAgICAgICAgIGVsc2UgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW50byhrZXk6IHN0cmluZyk6IERhdGFBcnJheTxhbnk+IHtcbiAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgdGhpcy52YWx1ZXMpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGNoaWxkW2tleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmx3cmFwKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cGFuZChrZXk6IHN0cmluZyk6IERhdGFBcnJheTxhbnk+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgcXVldWU6IGFueVtdID0gKFtdIGFzIGFueVtdKS5jb25jYXQodGhpcy52YWx1ZXMpO1xuXG4gICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgbmV4dCA9IHF1ZXVlLnBvcCgpO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gbmV4dFtrZXldO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlLmZvckVhY2goKHYpID0+IHF1ZXVlLnB1c2godikpO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhQXJyYXlJbXBsKSB2YWx1ZS5mb3JFYWNoKCh2KSA9PiBxdWV1ZS5wdXNoKHYpKTtcbiAgICAgICAgICAgIGVsc2UgcXVldWUucHVzaCh2YWx1ZSk7XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5leHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubHdyYXAocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRWFjaChmOiBBcnJheUZ1bmM8VCwgdm9pZD4pIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgZih0aGlzLnZhbHVlc1tpbmRleF0sIGluZGV4LCB0aGlzLnZhbHVlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXJyYXkoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIChbXSBhcyBhbnlbXSkuY29uY2F0KHRoaXMudmFsdWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmF0b3I8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJbXCIgKyB0aGlzLnZhbHVlcy5qb2luKFwiLCBcIikgKyBcIl1cIjtcbiAgICB9XG59XG5cbi8qKiBQcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgZ2VuZXJhdGluZyBkYXRhIGFycmF5cy5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBEYXRhQXJyYXkge1xuICAgIC8qKiBDcmVhdGUgYSBuZXcgRGF0YXZpZXcgZGF0YSBhcnJheS4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gd3JhcDxUPihyYXc6IFRbXSB8IERhdGFBcnJheTxUPik6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIGlmIChpc0RhdGFBcnJheShyYXcpKSByZXR1cm4gcmF3O1xuICAgICAgICByZXR1cm4gRGF0YUFycmF5SW1wbC53cmFwKHJhdyk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIG5ldyBEYXRhQXJyYXkgZnJvbSBhbiBpdGVyYWJsZSBvYmplY3QuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGZyb208VD4ocmF3OiBJdGVyYWJsZTxUPik6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIGlmIChpc0RhdGFBcnJheShyYXcpKSByZXR1cm4gcmF3O1xuXG4gICAgICAgIGxldCBkYXRhID0gW107XG4gICAgICAgIGZvciAobGV0IGVsZW0gb2YgcmF3KSBkYXRhLnB1c2goZWxlbSk7XG4gICAgICAgIHJldHVybiBEYXRhQXJyYXlJbXBsLndyYXAoZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBkYXRhIGFycmF5LiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0RhdGFBcnJheShvYmo6IGFueSk6IG9iaiBpcyBEYXRhQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEYXRhQXJyYXlJbXBsO1xuICAgIH1cbn1cblxuLy8gQSBzY2FyeSBsb29raW5nIHBvbHlmaWxsLCBzdXJlLCBidXQgaXQgZml4ZXMgdXAgZGF0YSBhcnJheS9hcnJheSBpbnRlcm9wIGZvciB1cy5cbmNvbnN0IG9sZEFycmF5SXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5BcnJheS5pc0FycmF5ID0gKGFyZyk6IGFyZyBpcyBhbnlbXSA9PiB7XG4gICAgcmV0dXJuIG9sZEFycmF5SXNBcnJheShhcmcpIHx8IERhdGFBcnJheS5pc0RhdGFBcnJheShhcmcpO1xufTtcbiIsICIvKiogQGlnbm9yZSAqL1xuLy8hIFV0aWxpdGllcyBmb3IgZm9yY2luZyB0eXBlcyB0byBiZSBvZiBhIHNwZWNpZmljIHR5cGUgb3IgcmV0dXJuaW5nICd1bmRlZmluZWQnIGlmIG5vdCwgYWxsb3dpbmcgZm9yIG11Y2ggbW9yZSBjb25jaXNlIHR5cGluZy5cblxuaW1wb3J0IHsgTGluaywgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQgeyBQUklNSVRJVkVTIH0gZnJvbSBcImV4cHJlc3Npb24vcGFyc2VyXCI7XG5pbXBvcnQgeyBEYXRlVGltZSwgRHVyYXRpb24gfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IHJlbmRlck1pbmltYWxEYXRlIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29lcmNlIHtcbiAgICAvKiogQ29lcmNlcyBjb21tb24gdHlwZXMgdG8gc3RyaW5nIG9yIG90aGVyd2lzZSB1bmRlZmluZWQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHN0cmluZyh2YWx1ZTogTGl0ZXJhbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQgPSBMaXRlcmFscy53cmFwVmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAoIXdyYXBwZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgc3dpdGNoICh3cmFwcGVkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiArIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNaW5pbWFsRGF0ZSh3cmFwcGVkLnZhbHVlLCBcInl5eXktTU0tZGRcIiwgXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXCIpO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXJrZG93bigpO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiArIHdyYXBwZWQudmFsdWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29lcmNlcyBib29sZWFucyBhbmQgc3RyaW5nLWJvb2xlYW5zLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBib29sZWFuKHZhbHVlOiBMaXRlcmFsKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBDb2VyY2VzIG51bWJlcnMgYW5kIHN0cmluZ3MgdG8gbnVtYmVycy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbnVtYmVyKHZhbHVlOiBMaXRlcmFsKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHZhbHVlO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZWQpKSByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQ29lcmNlcyBkYXRlcyBhbmQgc3RyaW5ncyBpbnRvIGRhdGVzLiAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBkYXRlKHZhbHVlOiBMaXRlcmFsKTogRGF0ZVRpbWUgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlVGltZSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IFBSSU1JVElWRVMuZGF0ZVBsdXMucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZC5zdGF0dXMpIHJldHVybiBwYXJzZWQudmFsdWU7XG4gICAgICAgICAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBDb2VyY2VzIGR1cmF0aW9ucyBhbmQgc3RyaW5ncyBpbnRvIGR1cmF0aW9ucy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gZHVyYXRpb24odmFsdWU6IExpdGVyYWwpOiBEdXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIER1cmF0aW9uKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gUFJJTUlUSVZFUy5kdXJhdGlvbi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkLnN0YXR1cykgcmV0dXJuIHBhcnNlZC52YWx1ZTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIENvZXJjZXMgbGlua3MgYW5kIHN0cmluZ3MgaW50byBsaW5rcy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gbGluayh2YWx1ZTogTGl0ZXJhbCk6IExpbmsgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaW5rKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gUFJJTUlUSVZFUy5lbWJlZExpbmsucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZC5zdGF0dXMpIHJldHVybiBwYXJzZWQudmFsdWU7XG4gICAgICAgICAgICBlbHNlIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBDb2VyY2VzIGFueXRoaW5nIGludG8gYW4gYXJyYXksIGJ5IGNvbnZlcnRpbmcgbm9uLWFycmF5cyBpbnRvIHVuaXQgbGVuZ3RoIGFycmF5cy4gKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gYXJyYXkodmFsdWU6IExpdGVyYWwpOiBMaXRlcmFsW10gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgZWxzZSByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG59XG4iLCAiLyoqIEEgcHJvbWlzZSB0aGF0IGNhbiBiZSByZXNvbHZlZCBkaXJlY3RseS4gKi9cbmV4cG9ydCB0eXBlIERlZmVycmVkPFQ+ID0gUHJvbWlzZTxUPiAmIHtcbiAgICByZXNvbHZlOiAodmFsdWU6IFQpID0+IHZvaWQ7XG4gICAgcmVqZWN0OiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcbn07XG5cbi8qKiBDcmVhdGUgYSBuZXcgZGVmZXJyZWQgb2JqZWN0LCB3aGljaCBpcyBhIHJlc29sdmFibGUgcHJvbWlzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZlcnJlZDxUPigpOiBEZWZlcnJlZDxUPiB7XG4gICAgbGV0IHJlc29sdmU6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgICBsZXQgcmVqZWN0OiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcblxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgcmVzb2x2ZSA9IHJlcztcbiAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmZXJyZWQgPSBwcm9taXNlIGFzIGFueSBhcyBEZWZlcnJlZDxUPjtcbiAgICBkZWZlcnJlZC5yZXNvbHZlID0gcmVzb2x2ZSE7XG4gICAgZGVmZXJyZWQucmVqZWN0ID0gcmVqZWN0ITtcblxuICAgIHJldHVybiBkZWZlcnJlZDtcbn1cbiIsICJpbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgRGF0YXN0b3JlIH0gZnJvbSBcImluZGV4L2RhdGFzdG9yZVwiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4vcmVzdWx0XCI7XG5pbXBvcnQgeyBNYXJrZG93bkNvZGVibG9jaywgTWFya2Rvd25TZWN0aW9uIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBEZWZlcnJlZCwgZGVmZXJyZWQgfSBmcm9tIFwidXRpbHMvZGVmZXJyZWRcIjtcbmltcG9ydCB7IFNjcmlwdExhbmd1YWdlLCBhc3luY0V2YWxJbkNvbnRleHQsIHRyYW5zcGlsZSB9IGZyb20gXCJ1dGlscy9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBsaW5lUmFuZ2UgfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcbmltcG9ydCB7IFRGaWxlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBGcmFnbWVudCwgaCB9IGZyb20gXCJwcmVhY3RcIjtcblxuLyoqIEEgc2NyaXB0IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGxvYWRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ1NjcmlwdCB7XG4gICAgdHlwZTogXCJsb2FkaW5nXCI7XG5cbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgcHJvbWlzZTogRGVmZXJyZWQ8UmVzdWx0PGFueSwgc3RyaW5nPj47XG59XG5cbi8qKiBBIHNjcmlwdCB0aGF0IGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkZWRTY3JpcHQge1xuICAgIHR5cGU6IFwibG9hZGVkXCI7XG5cbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgb2JqZWN0OiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIERhdGFjb3JlU2NyaXB0ID0gTG9hZGluZ1NjcmlwdCB8IExvYWRlZFNjcmlwdDtcblxuLyoqIEEgc2ltcGxlIGNhY2hpbmcgc2NyaXB0IGxvYWRlciB0aGF0IGNhbiBsb2FkIGFueSBEQUcgb2Ygc2NyaXB0IGRlcGVuZGVuY2llcy4gKi9cbmV4cG9ydCBjbGFzcyBTY3JpcHRDYWNoZSB7XG4gICAgLyoqIEFsbCBvZiB0aGUgdGFncyB3ZSByZWNvZ25pemUgZm9yIHNjcmlwdHMuICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgU0NSSVBUX0xBTkdVQUdFUzogUmVjb3JkPHN0cmluZywgU2NyaXB0TGFuZ3VhZ2U+ID0ge1xuICAgICAgICBqczogXCJqc1wiLFxuICAgICAgICBqYXZhc2NyaXB0OiBcImpzXCIsXG4gICAgICAgIGRhdGFjb3JlanM6IFwianNcIixcbiAgICAgICAgdHlwZXNjcmlwdDogXCJ0c1wiLFxuICAgICAgICB0czogXCJ0c1wiLFxuICAgICAgICBkYXRhY29yZXRzOiBcInRzXCIsXG4gICAgICAgIGpzeDogXCJqc3hcIixcbiAgICAgICAgZGF0YWNvcmVqc3g6IFwianN4XCIsXG4gICAgICAgIHRzeDogXCJ0c3hcIixcbiAgICAgICAgZGF0YWNvcmV0c3g6IFwidHN4XCIsXG4gICAgfTtcblxuICAgIC8qKiBBbGwgb2YgdGhlIGRpcmVjdCBmaWxlIGV4dGVuc2lvbnMgd2UgY2FuIGxvYWQuICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgRklMRV9FWFRFTlNJT05TOiBSZWNvcmQ8c3RyaW5nLCBTY3JpcHRMYW5ndWFnZT4gPSB7XG4gICAgICAgIHRzeDogXCJ0c3hcIixcbiAgICAgICAganN4OiBcImpzeFwiLFxuICAgICAgICBqczogXCJqc1wiLFxuICAgICAgICB0czogXCJ0c1wiLFxuICAgIH07XG5cbiAgICAvKiogQ2FjaGVzIHNjcmlwdHMgYnkgZnVsbHkgcXVhbGlmaWVkIHBhdGguICovXG4gICAgcHVibGljIHNjcmlwdHM6IE1hcDxzdHJpbmcsIERhdGFjb3JlU2NyaXB0PiA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhY29yZVNjcmlwdD4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBEYXRhc3RvcmUpIHt9XG5cbiAgICAvKiogTG9hZCB0aGUgZ2l2ZW4gc2NyaXB0IGF0IHRoZSBnaXZlbiBwYXRoLCByZWN1cnNpdmVseSBsb2FkaW5nIGFueSBzdWJzY3JpcHRzIGFzIHdlbGwuICAqL1xuICAgIHB1YmxpYyBhc3luYyBsb2FkKHBhdGg6IHN0cmluZyB8IExpbmssIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPFJlc3VsdDxhbnksIHN0cmluZz4+IHtcbiAgICAgICAgLy8gQWx3YXlzIGNoZWNrIHRoZSBjYWNoZSBmaXJzdC5cbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5wYXRoa2V5KHBhdGgpO1xuICAgICAgICBjb25zdCBjdXJyZW50U2NyaXB0ID0gdGhpcy5zY3JpcHRzLmdldChrZXkpO1xuICAgICAgICBpZiAoY3VycmVudFNjcmlwdCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTY3JpcHQudHlwZSA9PT0gXCJsb2FkZWRcIikgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGN1cnJlbnRTY3JpcHQub2JqZWN0KTtcblxuICAgICAgICAgICAgLy8gVE9ETzogSWYgd2UgdHJ5IHRvIGxvYWQgYW4gYWxyZWFkeS1sb2FkaW5nIHNjcmlwdCwgd2UgYXJlIGFsbW9zdCBjZXJ0YWlubHkgZG9pbmcgc29tZXRoaW5nXG4gICAgICAgICAgICAvLyB3ZWlyZC4gRWl0aGVyIHRoZSBjYWxsZXIgaXMgbm90IGBhd2FpdGAtaW5nIHRoZSBsb2FkIGFuZCBsb2FkaW5nIG11bHRpcGxlIHRpbWVzLCBPUlxuICAgICAgICAgICAgLy8gd2UgYXJlIGluIGEgYHJlcXVpcmUoKWAgbG9vcC4gRWl0aGVyIHdheSwgd2UnbGwgZXJyb3Igb3V0IGZvciBub3cgc2luY2Ugd2UgY2FuJ3QgaGFuZGxlXG4gICAgICAgICAgICAvLyBlaXRoZXIgY2FzZSBjdXJyZW50bHkuXG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZhaWx1cmUoXG4gICAgICAgICAgICAgICAgYEZhaWxlZCB0byBpbXBvcnQgc2NyaXB0IFwiJHtwYXRoLnRvU3RyaW5nKCl9XCIsIGFzIGl0IGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgbG9hZGVkLiBEbyB5b3UgaGF2ZVxuICAgICAgICAgICAgICAgICBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgaW4geW91ciByZXF1aXJlKCkgY2FsbHM/IFRoZSBjdXJyZW50bHkgbG9hZGVkIG9yIGxvYWRpbmcgc2NyaXB0cyBhcmU6IFxuICAgICAgICAgICAgICAgICAke0FycmF5LmZyb20odGhpcy5zY3JpcHRzLnZhbHVlcygpKVxuICAgICAgICAgICAgICAgICAgICAgLm1hcCgoc2MpID0+IFwiXFx0XCIgKyBzYy5wYXRoKVxuICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIil9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhY2hlIGhhcyBtaXNzZWQsIHNvIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIGNhY2hlIGFuZCB0cnkgYW5kIGxvYWQgaXQgZGlyZWN0bHkuXG4gICAgICAgIGNvbnN0IGRlZmVycmFsID0gZGVmZXJyZWQ8UmVzdWx0PGFueSwgc3RyaW5nPj4oKTtcbiAgICAgICAgdGhpcy5zY3JpcHRzLnNldChrZXksIHsgdHlwZTogXCJsb2FkaW5nXCIsIHByb21pc2U6IGRlZmVycmFsLCBwYXRoOiBrZXkgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5sb2FkVW5jYWNoZWQocGF0aCwgY29udGV4dCk7XG4gICAgICAgIGRlZmVycmFsLnJlc29sdmUocmVzdWx0KTtcblxuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2NyaXB0cy5zZXQoa2V5LCB7IHR5cGU6IFwibG9hZGVkXCIsIHBhdGg6IGtleSwgb2JqZWN0OiByZXN1bHQudmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcmlwdHMuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBMb2FkIGEgc2NyaXB0LCBkaXJlY3RseSBieXBhc3NpbmcgdGhlIGNhY2hlLiAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZFVuY2FjaGVkKHBhdGg6IHN0cmluZyB8IExpbmssIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPFJlc3VsdDxhbnksIHN0cmluZz4+IHtcbiAgICAgICAgY29uc3QgbWF5YmVTb3VyY2UgPSBhd2FpdCB0aGlzLnJlc29sdmVTb3VyY2UocGF0aCk7XG4gICAgICAgIGlmICghbWF5YmVTb3VyY2Uuc3VjY2Vzc2Z1bCkgcmV0dXJuIG1heWJlU291cmNlO1xuXG4gICAgICAgIC8vIFRyYW5zcGlsZSB0byB2YW5pbGxhIGphdmFzY3JpcHQgZmlyc3QuLi5cbiAgICAgICAgY29uc3QgeyBjb2RlLCBsYW5ndWFnZSB9ID0gbWF5YmVTb3VyY2UudmFsdWU7XG4gICAgICAgIGxldCBiYXNpYztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGJhc2ljID0gdHJhbnNwaWxlKGNvZGUsIGxhbmd1YWdlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgRmFpbGVkIHRvIGltcG9ydCAke3BhdGgudG9TdHJpbmcoKX0gd2hpbGUgdHJhbnNwaWxpbmcgZnJvbSAke2xhbmd1YWdlfTogJHtlcnJvcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZW4gZmluYWxseSBleGVjdXRlIHRoZSBzY3JpcHQgdG8gJ2xvYWQnIGl0LlxuICAgICAgICBjb25zdCBmaW5hbENvbnRleHQgPSBPYmplY3QuYXNzaWduKHsgaDogaCwgRnJhZ21lbnQ6IEZyYWdtZW50IH0sIGNvbnRleHQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGF3YWl0IGFzeW5jRXZhbEluQ29udGV4dChiYXNpYywgZmluYWxDb250ZXh0KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYEZhaWxlZCB0byBleGVjdXRlIHNjcmlwdCAnJHtwYXRoLnRvU3RyaW5nKCl9JzogJHtlcnJvcn1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBOb3JtYWxpemUgYSBwYXRoIG9yIGxpbmsgdG8gYSB0ZXh0dWFsIHBhdGguICovXG4gICAgcHJpdmF0ZSBwYXRoa2V5KHBhdGg6IHN0cmluZyB8IExpbmspOiBzdHJpbmcge1xuICAgICAgICBpZiAocGF0aCBpbnN0YW5jZW9mIExpbmspIHJldHVybiBwYXRoLm9ic2lkaWFuTGluaygpO1xuICAgICAgICBlbHNlIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8qKiBBdHRlbXB0cyB0byByZXNvbHZlIHRoZSBzb3VyY2UgdG8gbG9hZCBnaXZlbiBhIHBhdGggb3IgbGluayB0byBhIG1hcmtkb3duIHNlY3Rpb24uICovXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlU291cmNlKFxuICAgICAgICBwYXRoOiBzdHJpbmcgfCBMaW5rXG4gICAgKTogUHJvbWlzZTxSZXN1bHQ8eyBjb2RlOiBzdHJpbmc7IGxhbmd1YWdlOiBTY3JpcHRMYW5ndWFnZSB9LCBzdHJpbmc+PiB7XG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuc3RvcmUucmVzb2x2ZUxpbmsocGF0aCk7XG4gICAgICAgIGlmICghb2JqZWN0KSByZXR1cm4gUmVzdWx0LmZhaWx1cmUoXCJDb3VsZCBub3QgZmluZCBhIHNjcmlwdCBhdCB0aGUgZ2l2ZW4gcGF0aDogXCIgKyBwYXRoLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIGNvbnN0IHRmaWxlID0gdGhpcy5zdG9yZS52YXVsdC5nZXRGaWxlQnlQYXRoKG9iamVjdC4kZmlsZSEpO1xuICAgICAgICBpZiAoIXRmaWxlKSByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYEZpbGUgXCIke29iamVjdC4kZmlsZX1cIiBub3QgZm91bmQuYCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIEpTIGZpbGUgd2Ugc2hvdWxkIGxvYWQgZGlyZWN0bHkuXG4gICAgICAgIGlmICh0ZmlsZS5leHRlbnNpb24udG9Mb2NhbGVMb3dlckNhc2UoKSBpbiBTY3JpcHRDYWNoZS5GSUxFX0VYVEVOU0lPTlMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID0gU2NyaXB0Q2FjaGUuRklMRV9FWFRFTlNJT05TW3RmaWxlLmV4dGVuc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpXTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gYXdhaXQgdGhpcy5zdG9yZS52YXVsdC5jYWNoZWRSZWFkKHRmaWxlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoeyBjb2RlLCBsYW5ndWFnZSB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKFwiRmFpbGVkIHRvIGxvYWQgamF2YXNjcmlwdC90eXBlc2NyaXB0IHNvdXJjZSBmaWxlOiBcIiArIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBvYmplY3QgaXMgYSBtYXJrZG93biBzZWN0aW9uLCBzZWFyY2ggZm9yIGFueSBqYXZhc2NyaXB0IGNvZGVibG9ja3M7IG90aGVyd2lzZSwgY2hlY2sgaWYgaXQgaXMgYSBmdWxsIHNjcmlwdCBmaWxlLlxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFya2Rvd25TZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUJsb2NrID0gb2JqZWN0LiRibG9ja3NcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChiKTogYiBpcyBNYXJrZG93bkNvZGVibG9jayA9PiBiLiR0eXBlID09PSBcImNvZGVibG9ja1wiKVxuICAgICAgICAgICAgICAgIC5maW5kKChjYikgPT5cbiAgICAgICAgICAgICAgICAgICAgY2IuJGxhbmd1YWdlcy5zb21lKChsYW5ndWFnZSkgPT4gbGFuZ3VhZ2UudG9Mb2NhbGVMb3dlckNhc2UoKSBpbiBTY3JpcHRDYWNoZS5TQ1JJUFRfTEFOR1VBR0VTKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghbWF5YmVCbG9jaylcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZhaWx1cmUoXCJDb3VsZCBub3QgZmluZCBhIHNjcmlwdCBpbiB0aGUgZ2l2ZW4gbWFya2Rvd24gc2VjdGlvbjogXCIgKyBwYXRoLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZSA9XG4gICAgICAgICAgICAgICAgU2NyaXB0Q2FjaGUuU0NSSVBUX0xBTkdVQUdFU1tcbiAgICAgICAgICAgICAgICAgICAgbWF5YmVCbG9jay4kbGFuZ3VhZ2VzLmZpbmQoKGxhbmcpID0+IGxhbmcudG9Mb2NhbGVMb3dlckNhc2UoKSBpbiBTY3JpcHRDYWNoZS5TQ1JJUFRfTEFOR1VBR0VTKSFcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnJlYWRDb2RlYmxvY2sodGZpbGUsIG1heWJlQmxvY2spKS5tYXAoKGNvZGUpID0+ICh7IGNvZGUsIGxhbmd1YWdlIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNYXJrZG93bkNvZGVibG9jaykge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVMYW5ndWFnZSA9IG9iamVjdC4kbGFuZ3VhZ2VzLmZpbmQoXG4gICAgICAgICAgICAgICAgKGxhbmcpID0+IGxhbmcudG9Mb2NhbGVMb3dlckNhc2UoKSBpbiBTY3JpcHRDYWNoZS5TQ1JJUFRfTEFOR1VBR0VTXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFtYXliZUxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgVGhlIGNvZGVibG9jayByZWZlcmVuY2VkIGJ5ICcke3BhdGh9JyBpcyBub3QgYSBKUy9UUyBjb2RlYmxvY2suYCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID0gU2NyaXB0Q2FjaGUuU0NSSVBUX0xBTkdVQUdFU1ttYXliZUxhbmd1YWdlXTtcbiAgICAgICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5yZWFkQ29kZWJsb2NrKHRmaWxlLCBvYmplY3QpKS5tYXAoKGNvZGUpID0+ICh7IGNvZGUsIGxhbmd1YWdlIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgQ2Fubm90IGltcG9ydCAnJHtwYXRoLnRvU3RyaW5nKCl9OiBub3QgYSBKUy9UUyBmaWxlIG9yIGNvZGVibG9jayByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgY29kZWJsb2NrIGZyb20gYSBmaWxlLiAqL1xuICAgIHByaXZhdGUgYXN5bmMgcmVhZENvZGVibG9jayhmaWxlOiBURmlsZSwgYmxvY2s6IE1hcmtkb3duQ29kZWJsb2NrKTogUHJvbWlzZTxSZXN1bHQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXcgPSBsaW5lUmFuZ2UoXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yZS52YXVsdC5jYWNoZWRSZWFkKGZpbGUpLFxuICAgICAgICAgICAgICAgIGJsb2NrLiRjb250ZW50UG9zaXRpb24uc3RhcnQsXG4gICAgICAgICAgICAgICAgYmxvY2suJGNvbnRlbnRQb3NpdGlvbi5lbmRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChibG9jay4kc3R5bGUgPT09IFwiZmVuY2VkXCIpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyYXcpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgcmF3XG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbVN0YXJ0KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIlxcblwiKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYEZhaWxlZCB0byByZWFkIGEgY29kZWJsb2NrIGZyb20gJHtmaWxlLnBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENoZWNrYm94LCBPbWl0dGFibGUsIFNsaWRlciwgU3dpdGNoIH0gZnJvbSBcImFwaS91aS9iYXNpY3NcIjtcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSBcImV4cHJlc3Npb24vZmllbGRcIjtcbmltcG9ydCB7IERpc3BhdGNoLCB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyB1c2VGaW5hbGl6ZXIsIHVzZVNldEZpZWxkIH0gZnJvbSBcInV0aWxzL2ZpZWxkc1wiO1xuaW1wb3J0IHsgRWRpdGFibGVBY3Rpb24sIFVuY29udHJvbGxlZFRleHRFZGl0YWJsZSB9IGZyb20gXCIuL2VkaXRhYmxlXCI7XG5pbXBvcnQgU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3RcIjtcbmV4cG9ydCBmdW5jdGlvbiBGaWVsZENoZWNrYm94KFxuICAgIHByb3BzOiB7XG4gICAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgICAgZmllbGQ6IEZpZWxkO1xuICAgICAgICBkZWZhdWx0Q2hlY2tlZD86IGJvb2xlYW47XG4gICAgICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxGaWVsZD4+O1xuICAgIH0gJiBSZWFjdC5IVE1MUHJvcHM8SFRNTElucHV0RWxlbWVudD5cbikge1xuICAgIGNvbnN0IHsgZmllbGQsIGRlZmF1bHRDaGVja2VkID0gZmFsc2UsIGRpc3BhdGNoLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3VuZGVmaW5lZH1cbiAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkPXsoZmllbGQ/LnZhbHVlID8/IGRlZmF1bHRDaGVja2VkKSBhcyBib29sZWFufVxuICAgICAgICAgICAgb25DaGVja0NoYW5nZT17dXNlU2V0RmllbGQoZmllbGQsIChiKSA9PlxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJjb250ZW50LWNoYW5nZWRcIiwgbmV3VmFsdWU6IHsgLi4uZmllbGQsIHZhbHVlOiBiIH0gfSlcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBjaGVja2VkPXt1bmRlZmluZWR9XG4gICAgICAgIC8+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVkaXRhYmxlVGV4dEZpZWxkKHByb3BzOiB7XG4gICAgZmllbGQ6IEZpZWxkO1xuICAgIGlubGluZTogYm9vbGVhbjtcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZztcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248c3RyaW5nPj47XG59KSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZGVmYXVsdFZhbHVlID0gXCJcIiwgaW5saW5lLCBkaXNwYXRjaCB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPENvbnRyb2xsZWRFZGl0YWJsZVRleHRGaWVsZFxuICAgICAgICAgICAgdGV4dD17KGZpZWxkPy52YWx1ZSA/PyBkZWZhdWx0VmFsdWUpIGFzIHN0cmluZ31cbiAgICAgICAgICAgIGlubGluZT17aW5saW5lfVxuICAgICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAvPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb250cm9sbGVkRWRpdGFibGVUZXh0RmllbGQocHJvcHM6IHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgaW5saW5lOiBib29sZWFuO1xuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxzdHJpbmc+Pjtcbn0pIHtcbiAgICBjb25zdCB7IHRleHQsIGlubGluZSwgZGlzcGF0Y2ggfSA9IHByb3BzO1xuICAgIGNvbnN0IFt0ZXh0U3RhdGUsIHNldFRleHRdID0gdXNlU3RhdGUodGV4dCk7XG4gICAgY29uc3Qgb25JbnB1dCA9IGFzeW5jIChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHNldFRleHQoKGUuY3VycmVudFRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG5cbiAgICAgICAgaWYgKHByb3BzLmlubGluZSkge1xuICAgICAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdXNlRmluYWxpemVyKHRleHRTdGF0ZSwgZGlzcGF0Y2gpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiAmJiBlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdXNlRmluYWxpemVyKHRleHRTdGF0ZSwgZGlzcGF0Y2gpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiA8VW5jb250cm9sbGVkVGV4dEVkaXRhYmxlIHRleHQ9e3RleHR9IGlubGluZT17aW5saW5lfSBkaXNwYXRjaD17ZGlzcGF0Y2h9IG9uSW5wdXQ9e29uSW5wdXR9IC8+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRmllbGRTbGlkZXIoXG4gICAgcHJvcHM6IHtcbiAgICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICAgIG1pbjogbnVtYmVyO1xuICAgICAgICBtYXg6IG51bWJlcjtcbiAgICAgICAgc3RlcDogbnVtYmVyO1xuICAgICAgICBkZWZhdWx0VmFsdWU6IG51bWJlcjtcbiAgICAgICAgZmllbGQ6IEZpZWxkO1xuICAgICAgICBkaXNwYXRjaDogRGlzcGF0Y2g8RWRpdGFibGVBY3Rpb248RmllbGQ+PjtcbiAgICB9ICYgT21pdDxSZWFjdC5IVE1MUHJvcHM8SFRNTElucHV0RWxlbWVudD4sIE9taXR0YWJsZT5cbikge1xuICAgIGNvbnN0IHsgZmllbGQsIGRpc3BhdGNoLCBkZWZhdWx0VmFsdWUgPSAwLCBtaW4sIG1heCwgc3RlcCwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gICAgY29uc3QgdmFsdWUgPSAoZmllbGQ/LnZhbHVlID8/IGRlZmF1bHRWYWx1ZSkgYXMgbnVtYmVyO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxTbGlkZXJcbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgIG1pbj17bWlufVxuICAgICAgICAgICAgbWF4PXttYXh9XG4gICAgICAgICAgICBzdGVwPXtzdGVwfVxuICAgICAgICAgICAgdmFsdWU9e3VuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3VzZVNldEZpZWxkKGZpZWxkLCAoYikgPT5cbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiB7IC4uLmZpZWxkLCB2YWx1ZTogYiB9IH0pXG4gICAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWVsZFN3aXRjaChcbiAgICBwcm9wczoge1xuICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBib29sZWFuO1xuICAgICAgICBmaWVsZDogRmllbGQ7XG4gICAgICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxFZGl0YWJsZUFjdGlvbjxGaWVsZD4+O1xuICAgIH0gJiBPbWl0PFJlYWN0LkhUTUxQcm9wczxIVE1MSW5wdXRFbGVtZW50PiwgT21pdHRhYmxlPlxuKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZGlzcGF0Y2gsIGRlZmF1bHRWYWx1ZSA9IGZhbHNlLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIG9uVG9nZ2xlQ2hhbmdlPXt1c2VTZXRGaWVsZChmaWVsZCwgKGIpID0+XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRlbnQtY2hhbmdlZFwiLCBuZXdWYWx1ZTogeyAuLi5maWVsZCwgdmFsdWU6IGIgfSB9KVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkPXsoZmllbGQ/LnZhbHVlID8/IGRlZmF1bHRWYWx1ZSkgYXMgYm9vbGVhbn1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3VuZGVmaW5lZH1cbiAgICAgICAgLz5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRmllbGRTZWxlY3Qoe1xuICAgIG11bHRpID0gZmFsc2UsXG4gICAgb3B0aW9ucyxcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgZmllbGQsXG4gICAgZGlzcGF0Y2gsXG59OiB7XG4gICAgbXVsdGk/OiBib29sZWFuO1xuICAgIGRlZmF1bHRWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgZmllbGQ6IEZpZWxkO1xuICAgIG9wdGlvbnM6IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W107XG4gICAgZGlzcGF0Y2g6IERpc3BhdGNoPEVkaXRhYmxlQWN0aW9uPEZpZWxkPj47XG59KSB7XG4gICAgY29uc3QgaW5uZXJDYWxsYmFjayA9IHVzZVNldEZpZWxkKGZpZWxkLCAoYikgPT5cbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcImNvbnRlbnQtY2hhbmdlZFwiLCBuZXdWYWx1ZTogeyAuLi5maWVsZCwgdmFsdWU6IGIgfSB9KVxuICAgICk7XG4gICAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IG5ld1ZhbHVlLm1hcCgoeCkgPT4geC52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSBuZXdWYWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlubmVyQ2FsbGJhY2sobm9ybWFsaXplZCk7XG4gICAgICAgIH0sXG4gICAgICAgIFtmaWVsZCwgaW5uZXJDYWxsYmFja11cbiAgICApO1xuXG4gICAgY29uc3QgYXJyYXlWYWwgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiAoQXJyYXkuaXNBcnJheShmaWVsZD8udmFsdWUpID8gZmllbGQudmFsdWUgOiAhIWZpZWxkID8gW2ZpZWxkLnZhbHVlXSA6IFtkZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgW2ZpZWxkXVxuICAgICk7XG4gICAgY29uc3QgZGVmVmFsID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIG11bHRpXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcigoYSkgPT4gYXJyYXlWYWwuZmluZEluZGV4KChiKSA9PiBiID09IGEudmFsdWUpICE9IC0xKVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5maW5kKChhKSA9PiBhLnZhbHVlID09IGZpZWxkPy52YWx1ZSksXG4gICAgICAgIFtvcHRpb25zLCBtdWx0aV1cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGNsYXNzTmFtZVByZWZpeD1cImRhdGFjb3JlLXNlbGVjdGFibGVcIlxuICAgICAgICAgICAgb25DaGFuZ2U9eyhuKSA9PiBvbkNoYW5nZShuKX1cbiAgICAgICAgICAgIHVuc3R5bGVkXG4gICAgICAgICAgICBpc011bHRpPXttdWx0aSA/PyBmYWxzZX1cbiAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0PXtkb2N1bWVudC5ib2R5fVxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZWYWx9XG4gICAgICAgICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICgpID0+IFwicHJvbXB0LWlucHV0XCIsXG4gICAgICAgICAgICAgICAgdmFsdWVDb250YWluZXI6ICgpID0+IFwic3VnZ2VzdGlvbi1pdGVtIHZhbHVlLWNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogKCkgPT4gXCJzdWdnZXN0aW9uLWNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIG1lbnU6ICgpID0+IFwic3VnZ2VzdGlvbi1jb250ZW50IHN1Z2dlc3Rpb24tY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgb3B0aW9uOiAocHJvcHM6IGFueSkgPT4gYHN1Z2dlc3Rpb24taXRlbSR7cHJvcHMuaXNTZWxlY3RlZCA/IFwiIGlzLXNlbGVjdGVkXCIgOiBcIlwifWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICk7XG59XG4iLCAiaW1wb3J0IHsgR3JvdXBFbGVtZW50LCBHcm91cGluZywgR3JvdXBpbmdzLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IEdyb3VwaW5nQ29uZmlnLCB1c2VBc0VsZW1lbnQsIFZhbmlsbGFDb2x1bW4sIFZhbmlsbGFUYWJsZVByb3BzIH0gZnJvbSBcIi4vdGFibGVcIjtcbmltcG9ydCB7IHVzZUludGVybmluZywgdXNlU3RhYmxlQ2FsbGJhY2sgfSBmcm9tIFwidWkvaG9va3NcIjtcbmltcG9ydCB7IERpc3BhdGNoLCBSZWR1Y2VyLCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWR1Y2VyLCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBDb250cm9sbGVkUGFnZXIsIHVzZURhdGFjb3JlUGFnaW5nIH0gZnJvbSBcIi4vcGFnaW5nXCI7XG5pbXBvcnQgeyBERUZBVUxUX1RBQkxFX0NPTVBBUkFUT1IsIFNvcnRCdXR0b24sIFNvcnREaXJlY3Rpb24sIFNvcnRPbiB9IGZyb20gXCIuL3RhYmxlXCI7XG5pbXBvcnQgeyBDb250ZXh0LCBjcmVhdGVDb250ZXh0LCBGcmFnbWVudCwgVk5vZGUgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBDVVJSRU5UX0ZJTEVfQ09OVEVYVCwgTGl0IH0gZnJvbSBcInVpL21hcmtkb3duXCI7XG5pbXBvcnQgeyBFZGl0YWJsZSwgdXNlRWRpdGFibGVEaXNwYXRjaCB9IGZyb20gXCJ1aS9maWVsZHMvZWRpdGFibGVcIjtcbmltcG9ydCB7IGNvbWJpbmVDbGFzc2VzIH0gZnJvbSBcIi4uL2Jhc2ljc1wiO1xuaW1wb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVUYWJsZVJvd0RhdGE8VD4ge1xuICAgIHZhbHVlOiBUO1xuICAgIGNoaWxkcmVuOiBUcmVlVGFibGVSb3dEYXRhPFQ+W107XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgVHJlZVV0aWxzIHtcbiAgICBleHBvcnQgZnVuY3Rpb24gaXNUcmVlVGFibGVSb3dEYXRhPFQ+KGRhdGE6IGFueSk6IGRhdGEgaXMgVHJlZVRhYmxlUm93RGF0YTxUPiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImNoaWxkcmVuXCIgaW4gZGF0YSAmJlxuICAgICAgICAgICAgXCJ2YWx1ZVwiIGluIGRhdGEgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGRhdGEpICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT0gMiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShkYXRhLmNoaWxkcmVuKVxuICAgICAgICApO1xuICAgIH1cbiAgICBleHBvcnQgZnVuY3Rpb24gY291bnRJblRyZWVSb3c8VD4obm9kZTogVHJlZVRhYmxlUm93RGF0YTxUPiwgdG9wOiBib29sZWFuID0gdHJ1ZSk6IG51bWJlciB7XG4gICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICBpZiAoIXRvcCkgcmVzdWx0Kys7XG4gICAgICAgIGZvciAobGV0IG4gb2Ygbm9kZS5jaGlsZHJlbikgcmVzdWx0ICs9IGNvdW50SW5UcmVlUm93KG4sIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9mQXJyYXk8VD4oc291cmNlOiBUW10sIGNoaWxkRm46IChlbDogVCkgPT4gVFtdKTogVHJlZVRhYmxlUm93RGF0YTxUPltdIHtcbiAgICAgICAgY29uc3QgbWFwcGVyID0gKGVsOiBUKTogVHJlZVRhYmxlUm93RGF0YTxUPiA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBlbCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRGbihlbCkubWFwKG1hcHBlciksXG4gICAgICAgICAgICB9IGFzIFRyZWVUYWJsZVJvd0RhdGE8VD47XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb3VyY2UubWFwKG1hcHBlcik7XG4gICAgfVxuICAgIGV4cG9ydCBmdW5jdGlvbiBvZk5vZGU8VD4oc291cmNlOiBULCBjaGlsZEZuOiAoZWw6IFQpID0+IFRbXSk6IFRyZWVUYWJsZVJvd0RhdGE8VD4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHNvdXJjZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBvZkFycmF5KGNoaWxkRm4oc291cmNlKSwgY2hpbGRGbiksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG9mR3JvdXBpbmc8VD4oZWxlbWVudHM6IEdyb3VwaW5nPFQ+LCBjaGlsZEZuOiAoZWw6IFQpID0+IFRbXSk6IEdyb3VwaW5nPFRyZWVUYWJsZVJvd0RhdGE8VD4+IHtcbiAgICAgICAgY29uc3QgbWFwcGVyID0gKGw6IFQgfCBHcm91cEVsZW1lbnQ8VD4pOiBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4gfCBUcmVlVGFibGVSb3dEYXRhPFQ+ID0+IHtcbiAgICAgICAgICAgIGlmIChHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAobCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2V5OiBsLmtleSwgcm93czogbC5yb3dzLm1hcChtYXBwZXIpIH0gYXMgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRGbihsKS5tYXAobWFwcGVyKSxcbiAgICAgICAgICAgIH0gYXMgVHJlZVRhYmxlUm93RGF0YTxUPjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLm1hcChtYXBwZXIpIGFzIEdyb3VwaW5nPFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihlbGVtZW50czogR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj4gfCBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4pOiBudW1iZXIge1xuICAgICAgICBpZiAoR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvdW50KGVsZW1lbnRzLnJvd3MpO1xuICAgICAgICB9IGVsc2UgaWYgKEdyb3VwaW5ncy5pc0dyb3VwaW5nKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBncm91cCBvZiBlbGVtZW50cykgcmVzdWx0ICs9IGNvdW50KGdyb3VwLnJvd3MpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5yZWR1Y2UoKHB2LCBjdikgPT4gcHYgKyBjb3VudEluVHJlZVJvdyhjdiksIDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2xpY2VJblRyZWVSb3c8VD4oZWxlbWVudHM6IFRyZWVUYWJsZVJvd0RhdGE8VD5bXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBUcmVlVGFibGVSb3dEYXRhPFQ+W10ge1xuICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gW107XG5cbiAgICAgICAgbGV0IGluZGV4ID0gMCxcbiAgICAgICAgICAgIHNlZW4gPSAwO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBlbGVtZW50cy5sZW5ndGggJiYgc2VlbiArIGNvdW50SW5UcmVlUm93KGVsZW1lbnRzW2luZGV4XSkgPD0gc3RhcnQpIHtcbiAgICAgICAgICAgIHNlZW4gKz0gY291bnRJblRyZWVSb3coZWxlbWVudHNbaW5kZXhdKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPj0gZWxlbWVudHMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlVGFibGVSb3dEYXRhPFQ+W10gPSBbXTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgZWxlbWVudHMubGVuZ3RoICYmIHNlZW4gPCBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZWxlbWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBTaXplID0gY291bnRJblRyZWVSb3coZ3JvdXApO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBTdGFydCA9IE1hdGgubWF4KHNlZW4sIHN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRW5kID0gTWF0aC5taW4oZ3JvdXBTaXplICsgc2VlbiwgZW5kKTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBncm91cC52YWx1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogc2xpY2VJblRyZWVSb3coZ3JvdXAuY2hpbGRyZW4sIGdyb3VwU3RhcnQgLSBzZWVuLCBncm91cEVuZCAtIHNlZW4pLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNlZW4gKz0gZ3JvdXBTaXplO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNsaWNlPFQ+KFxuICAgICAgICBlbGVtZW50czogR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj4sXG4gICAgICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgICAgIGVuZDogbnVtYmVyXG4gICAgKTogR3JvdXBpbmc8VHJlZVRhYmxlUm93RGF0YTxUPj4ge1xuICAgICAgICBsZXQgaW5pdGlhbCA9IFsuLi5Hcm91cGluZ3Muc2xpY2UoZWxlbWVudHMsIHN0YXJ0LCBlbmQpXSBhcyBHcm91cGluZzxUcmVlVGFibGVSb3dEYXRhPFQ+PjtcbiAgICAgICAgbGV0IGluZGV4ID0gMCxcbiAgICAgICAgICAgIHNlZW4gPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgaW5pdGlhbCkge1xuICAgICAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGxldCBncm91cFNpemUgPSBHcm91cGluZ3MuY291bnQoZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIGxldCBncm91cFN0YXJ0ID0gTWF0aC5taW4oc2Vlbiwgc3RhcnQpO1xuICAgICAgICAgICAgICAgIGxldCBncm91cEVuZCA9IE1hdGgubWluKGdyb3VwU2l6ZSwgZW5kKTtcbiAgICAgICAgICAgICAgICAoaW5pdGlhbFtpbmRleF0gYXMgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+KS5yb3dzID0gR3JvdXBpbmdzLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJvd3MsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRW5kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzZWVuICs9IGdyb3VwU2l6ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VlbiArPSBjb3VudEluVHJlZVJvdyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluaXRpYWw7XG4gICAgfVxuICAgIC8qKiByZWN1cnNpdmVseSBzb3J0IGEgdHJlZSAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBzb3J0PFQsIFYgPSBMaXRlcmFsPihcbiAgICAgICAgcm93czogKFRyZWVUYWJsZVJvd0RhdGE8VD4gfCBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4pW10sXG4gICAgICAgIGNvbXBhcmF0b3JzOiB7XG4gICAgICAgICAgICBmbjogKGE6IFYsIGI6IFYsIGFvOiBULCBhYjogVCkgPT4gbnVtYmVyO1xuICAgICAgICAgICAgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgYWN0dWFsVmFsdWU6IChvYmo6IFQpID0+IFY7XG4gICAgICAgIH1bXVxuICAgICk6IChUcmVlVGFibGVSb3dEYXRhPFQ+IHwgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+KVtdIHtcbiAgICAgICAgY29uc3QgcmVhbENvbXBhcmF0b3IgPSAoXG4gICAgICAgICAgICBhOiBUcmVlVGFibGVSb3dEYXRhPFQ+IHwgR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+LFxuICAgICAgICAgICAgYjogVHJlZVRhYmxlUm93RGF0YTxUPiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PlxuICAgICAgICApOiBudW1iZXIgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgY29tcCBvZiBjb21wYXJhdG9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGNvbXAuZGlyZWN0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IFwiYXNjZW5kaW5nXCIgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKEdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChhKSAmJiBHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAoYikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAoYSkgJiYgIUdyb3VwaW5ncy5pc0VsZW1lbnRHcm91cChiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uICogY29tcC5mbihjb21wLmFjdHVhbFZhbHVlKGEudmFsdWUpLCBjb21wLmFjdHVhbFZhbHVlKGIudmFsdWUpLCBhLnZhbHVlLCBiLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1hcCA9IChcbiAgICAgICAgICAgIHQ6IFRyZWVUYWJsZVJvd0RhdGE8VD4gfCBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj5cbiAgICAgICAgKTogVHJlZVRhYmxlUm93RGF0YTxUPiB8IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PiA9PiB7XG4gICAgICAgICAgICBsZXQgcjtcbiAgICAgICAgICAgIGlmIChHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAodCkpXG4gICAgICAgICAgICAgICAgciA9IHsgLi4udCwgcm93czogc29ydCh0LnJvd3MsIGNvbXBhcmF0b3JzKS5tYXAobWFwKSB9IGFzIEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PjtcbiAgICAgICAgICAgIGVsc2UgciA9IHsgLi4udCwgY2hpbGRyZW46IHNvcnQodC5jaGlsZHJlbiwgY29tcGFyYXRvcnMpLm1hcChtYXApIH0gYXMgVHJlZVRhYmxlUm93RGF0YTxUPjtcbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcm93cy5tYXAobWFwKS5zb3J0KHJlYWxDb21wYXJhdG9yKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHVzZUtleUZuPFQ+KGlkOiBUcmVlVGFibGVTdGF0ZTxUPltcImlkXCJdLCAuLi5kZXBzOiBhbnlbXSkge1xuICAgIGNvbnN0IHJldCA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAoZWw6IFRyZWVUYWJsZVJvd0RhdGE8VD4gfCBHcm91cEVsZW1lbnQ8VHJlZVRhYmxlUm93RGF0YTxUPj4pID0+IHtcbiAgICAgICAgICAgIGlmIChHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAoZWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsLmtleTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkKGVsLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgWy4uLmRlcHNdXG4gICAgKTtcbiAgICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVUYWJsZUNvbHVtbjxULCBWID0gTGl0ZXJhbD4gZXh0ZW5kcyBWYW5pbGxhQ29sdW1uPFQsIFY+IHtcbiAgICBzb3J0YWJsZT86IGJvb2xlYW47XG5cbiAgICBjb21wYXJhdG9yPzogKGZpcnN0OiBWLCBzZWNvbmQ6IFYsIGZpcnN0T2JqZWN0OiBULCBzZWNvbmRPYmplY3Q6IFQpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmVlVGFibGVTdGF0ZTxUPiB7XG4gICAgc29ydE9uPzogU29ydE9uW107XG4gICAgb3Blbk1hcD86IE1hcDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIGlkOiAob2JqOiBUKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZVRhYmxlUHJvcHM8VD4ge1xuICAgIGNvbHVtbnM6IFRyZWVUYWJsZUNvbHVtbjxUPltdO1xuICAgIHJvd3M6IFRbXSB8IEdyb3VwaW5nPFQ+O1xuICAgIHBhZ2luZz86IGJvb2xlYW4gfCBudW1iZXI7XG4gICAgc2Nyb2xsT25QYWdpbmc/OiBib29sZWFuIHwgbnVtYmVyO1xuICAgIGdyb3VwaW5ncz86IFZhbmlsbGFUYWJsZVByb3BzPFRyZWVUYWJsZVJvd0RhdGE8VD4+W1wiZ3JvdXBpbmdzXCJdO1xuICAgIHNvcnRPbj86IFNvcnRPbltdO1xuICAgIGNoaWxkU2VsZWN0b3I6IChyYXc6IFQpID0+IFRbXTtcbiAgICBpZD86IChvYmo6IFQpID0+IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVHJlZVRhYmxlQWN0aW9uPFQ+ID1cbiAgICB8IHsgdHlwZTogXCJzb3J0LWNvbHVtblwiOyBjb2x1bW46IHN0cmluZzsgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uIHwgdW5kZWZpbmVkIH1cbiAgICB8IHtcbiAgICAgICAgICB0eXBlOiBcInJvdy1leHBhbmRcIjtcbiAgICAgICAgICByb3c6IFQ7XG4gICAgICAgICAgbmV3VmFsdWU6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7IHR5cGU6IFwib3Blbi1tYXAtY2hhbmdlZFwiOyBuZXdWYWx1ZTogTWFwPHN0cmluZywgYm9vbGVhbj4gfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyZWVUYWJsZVJlZHVjZXI8VD4oc3RhdGU6IFRyZWVUYWJsZVN0YXRlPFQ+LCBhY3Rpb246IFRyZWVUYWJsZUFjdGlvbjxUPik6IFRyZWVUYWJsZVN0YXRlPFQ+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJzb3J0LWNvbHVtblwiOlxuICAgICAgICAgICAgaWYgKGFjdGlvbi5kaXJlY3Rpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNvcnRPbjogdW5kZWZpbmVkIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0T246IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImNvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogYWN0aW9uLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJvdy1leHBhbmRcIjpcbiAgICAgICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS5vcGVuTWFwKSByZXR1cm4geyAuLi5zdGF0ZSB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIHN0YXRlLm9wZW5NYXAua2V5cygpKSBuZXdNYXAuc2V0KGssIHN0YXRlLm9wZW5NYXAuZ2V0KGspISk7XG4gICAgICAgICAgICBuZXdNYXAuc2V0KHN0YXRlLmlkKGFjdGlvbi5yb3cpLCBhY3Rpb24ubmV3VmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIG9wZW5NYXA6IG5ld01hcCB9O1xuICAgICAgICBjYXNlIFwib3Blbi1tYXAtY2hhbmdlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIG9wZW5NYXA6IGFjdGlvbi5uZXdWYWx1ZSB9O1xuICAgIH1cbiAgICBjb25zb2xlLndhcm4oXCJkYXRhY29yZTogRW5jb3VudGVyZWQgdW5yZWNvZ25pemVkIG9wZXJhdGlvbjogXCIgKyAoYWN0aW9uIGFzIFRyZWVUYWJsZUFjdGlvbjxUPikudHlwZSk7XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVHJlZVRhYmxlRGlzcGF0Y2g8VD4oXG4gICAgaW5pdGlhbDogVHJlZVRhYmxlU3RhdGU8VD4gfCAoKCkgPT4gVHJlZVRhYmxlU3RhdGU8VD4pXG4pOiBbVHJlZVRhYmxlU3RhdGU8VD4sIERpc3BhdGNoPFRyZWVUYWJsZUFjdGlvbjxUPj5dIHtcbiAgICBjb25zdCBpbml0ID0gdXNlTWVtbygoKSA9PiAodHlwZW9mIGluaXRpYWwgPT0gXCJmdW5jdGlvblwiID8gaW5pdGlhbCgpIDogaW5pdGlhbCksIFtdKTtcbiAgICByZXR1cm4gdXNlUmVkdWNlcih0cmVlVGFibGVSZWR1Y2VyIGFzIFJlZHVjZXI8VHJlZVRhYmxlU3RhdGU8VD4sIFRyZWVUYWJsZUFjdGlvbjxUPj4sIGluaXQpO1xufVxuXG5leHBvcnQgdHlwZSBSb3dFeHBhbnNpb25Db250ZXh0VHlwZTxUPiA9IHtcbiAgICBkaXNwYXRjaDogRGlzcGF0Y2g8VHJlZVRhYmxlQWN0aW9uPFQ+PjtcbiAgICBvcGVuTWFwOiBNYXA8c3RyaW5nLCBib29sZWFuPjtcbiAgICBpZDogKG9iajogVCkgPT4gc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IEVYUEFOREVEX0NPTlRFWFQgPSBjcmVhdGVDb250ZXh0PFJvd0V4cGFuc2lvbkNvbnRleHRUeXBlPHVua25vd24+IHwgbnVsbD4obnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBUeXBlZEV4cGFuZGVkQ29udGV4dDxUPigpIHtcbiAgICByZXR1cm4gRVhQQU5ERURfQ09OVEVYVCBhcyBDb250ZXh0PFJvd0V4cGFuc2lvbkNvbnRleHRUeXBlPFQ+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyZWVUYWJsZUhlYWRlckNlbGw8VD4oe1xuICAgIGNvbHVtbixcbiAgICBzb3J0LFxuICAgIHNvcnRhYmxlLFxufToge1xuICAgIGNvbHVtbjogVHJlZVRhYmxlQ29sdW1uPFQ+O1xuICAgIHNvcnQ/OiBTb3J0RGlyZWN0aW9uO1xuICAgIHNvcnRhYmxlOiBib29sZWFuO1xufSkge1xuICAgIGNvbnN0IHsgZGlzcGF0Y2ggfSA9IHVzZUNvbnRleHQoVHlwZWRFeHBhbmRlZENvbnRleHQ8VD4oKSk7XG4gICAgY29uc3QgaGVhZGVyOiBzdHJpbmcgfCBWTm9kZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIWNvbHVtbi50aXRsZSkgcmV0dXJuIGNvbHVtbi5pZDtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbHVtbi50aXRsZSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY29sdW1uLnRpdGxlKCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIGNvbHVtbi50aXRsZTtcbiAgICB9LCBbY29sdW1uLmlkLCBjb2x1bW4udGl0bGVdKTtcblxuICAgIGNvbnN0IHNvcnRDbGlja2VkID0gdXNlU3RhYmxlQ2FsbGJhY2soXG4gICAgICAgIChfZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChzb3J0ID09IHVuZGVmaW5lZCkgZGlzcGF0Y2goeyB0eXBlOiBcInNvcnQtY29sdW1uXCIsIGNvbHVtbjogY29sdW1uLmlkLCBkaXJlY3Rpb246IFwiYXNjZW5kaW5nXCIgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChzb3J0ID09IFwiYXNjZW5kaW5nXCIpIGRpc3BhdGNoKHsgdHlwZTogXCJzb3J0LWNvbHVtblwiLCBjb2x1bW46IGNvbHVtbi5pZCwgZGlyZWN0aW9uOiBcImRlc2NlbmRpbmdcIiB9KTtcbiAgICAgICAgICAgIGVsc2UgZGlzcGF0Y2goeyB0eXBlOiBcInNvcnQtY29sdW1uXCIsIGNvbHVtbjogY29sdW1uLmlkLCBkaXJlY3Rpb246IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW2NvbHVtbi5pZF1cbiAgICApO1xuXG4gICAgY29uc3QgcmVhbFdpZHRoID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gKGNvbHVtbi53aWR0aCA9PT0gXCJtaW5pbXVtXCIgPyBcIjFweFwiIDogY29sdW1uLndpZHRoID09PSBcIm1heGltdW1cIiA/IFwiYXV0b1wiIDogY29sdW1uLndpZHRoICsgXCJweFwiKSxcbiAgICAgICAgW2NvbHVtbi53aWR0aF1cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICAgIDx0aCB3aWR0aD17cmVhbFdpZHRofSBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItY2VsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItY2VsbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAge3NvcnRhYmxlICYmIDxTb3J0QnV0dG9uIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLXNvcnRcIiBkaXJlY3Rpb249e3NvcnR9IG9uQ2xpY2s9e3NvcnRDbGlja2VkfSAvPn1cbiAgICAgICAgICAgICAgICA8ZGl2IG9uQ2xpY2s9e3NvcnRDbGlja2VkfSBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmVlVGFibGVHcm91cEhlYWRlcjxUPih7XG4gICAgbGV2ZWwsXG4gICAgdmFsdWUsXG4gICAgd2lkdGgsXG4gICAgY29uZmlnLFxufToge1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgdmFsdWU6IEdyb3VwRWxlbWVudDxUcmVlVGFibGVSb3dEYXRhPFQ+PjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGNvbmZpZz86IEdyb3VwaW5nQ29uZmlnPFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xufSkge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSB1c2VDb250ZXh0KENVUlJFTlRfRklMRV9DT05URVhUKTtcbiAgICBjb25zdCByYXdSZW5kZXJhYmxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChjb25maWc/LnJlbmRlcikgcmV0dXJuIGNvbmZpZy5yZW5kZXIodmFsdWUua2V5LCB2YWx1ZS5yb3dzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8aDI+XG4gICAgICAgICAgICAgICAgICAgIDxMaXQgc291cmNlUGF0aD17c291cmNlUGF0aH0gaW5saW5lPXt0cnVlfSB2YWx1ZT17dmFsdWUua2V5fSAvPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICApO1xuICAgIH0sIFtjb25maWc/LnJlbmRlciwgdmFsdWUua2V5LCB2YWx1ZS5yb3dzXSk7XG4gICAgY29uc3QgcmVuZGVyYWJsZSA9IHVzZUFzRWxlbWVudChyYXdSZW5kZXJhYmxlKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDx0ciBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1ncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDx0ZCBzdHlsZT17eyBwYWRkaW5nTGVmdDogYCR7bGV2ZWwgKiAxLjEyfWVtYCB9fSBjb2xTcGFuPXt3aWR0aCArIDF9PlxuICAgICAgICAgICAgICAgIHtyZW5kZXJhYmxlfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFRyZWVUYWJsZVJvd0dyb3VwPFQ+KHtcbiAgICBsZXZlbCxcbiAgICBjb2x1bW5zLFxuICAgIGVsZW1lbnQsXG4gICAgZ3JvdXBpbmdzLFxufToge1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgY29sdW1uczogVHJlZVRhYmxlQ29sdW1uPFQ+W107XG4gICAgZWxlbWVudDogR3JvdXBFbGVtZW50PFRyZWVUYWJsZVJvd0RhdGE8VD4+IHwgVHJlZVRhYmxlUm93RGF0YTxUPjtcbiAgICBncm91cGluZ3M/OiBHcm91cGluZ0NvbmZpZzxUcmVlVGFibGVSb3dEYXRhPFQ+PltdO1xufSkge1xuICAgIGNvbnN0IHsgaWQgfSA9IHVzZUNvbnRleHQoVHlwZWRFeHBhbmRlZENvbnRleHQ8VD4oKSk7XG4gICAgY29uc3Qga2V5Rm4gPSB1c2VLZXlGbihpZCk7XG4gICAgY29uc3QgZ3JvdXBJbmRleCA9IGdyb3VwaW5ncyA/IE1hdGgubWluKGdyb3VwaW5ncy5sZW5ndGggLSAxLCBsZXZlbCkgOiAwO1xuICAgIGlmIChHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdDb25maWcgPSBncm91cGluZ3MgPyBncm91cGluZ3NbZ3JvdXBJbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtrZXlGbihlbGVtZW50KX0+XG4gICAgICAgICAgICAgICAgPFRyZWVUYWJsZUdyb3VwSGVhZGVyIGxldmVsPXtsZXZlbH0gdmFsdWU9e2VsZW1lbnR9IHdpZHRoPXtjb2x1bW5zLmxlbmd0aH0gY29uZmlnPXtncm91cGluZ0NvbmZpZ30gLz5cbiAgICAgICAgICAgICAgICB7ZWxlbWVudC5yb3dzLm1hcCgocm93KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxUcmVlVGFibGVSb3dHcm91cDxUPiBsZXZlbD17bGV2ZWwgKyAxfSBjb2x1bW5zPXtjb2x1bW5zfSBlbGVtZW50PXtyb3d9IGdyb3VwaW5ncz17Z3JvdXBpbmdzfSAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gPFRyZWVUYWJsZVJvdyByb3c9e2VsZW1lbnR9IGNvbHVtbnM9e2NvbHVtbnN9IGxldmVsPXtsZXZlbCAtIGdyb3VwSW5kZXggKyAxfSBrZXk9e2tleUZuKGVsZW1lbnQpfSAvPjtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmVlVGFibGVSb3dFeHBhbmRlcjxUPih7IHJvdywgbGV2ZWwgfTogeyByb3c6IFQ7IGxldmVsOiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHsgb3Blbk1hcCwgZGlzcGF0Y2gsIGlkIH0gPSB1c2VDb250ZXh0KFR5cGVkRXhwYW5kZWRDb250ZXh0PFQ+KCkpO1xuICAgIGNvbnN0IG9wZW4gPSB1c2VNZW1vKCgpID0+IG9wZW5NYXAuZ2V0KGlkKHJvdykpID8/IGZhbHNlLCBbcm93LCBvcGVuTWFwLCBvcGVuTWFwLmdldChpZChyb3cpKSwgZGlzcGF0Y2hdKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8dGRcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRpc3BhdGNoKHsgdHlwZTogXCJyb3ctZXhwYW5kXCIsIHJvdywgbmV3VmFsdWU6ICFvcGVuIH0pfVxuICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IGAkeyhsZXZlbCAtIDEpICogMS4xMjV9ZW1gIH19XG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjb21iaW5lQ2xhc3NlcyhcImRhdGFjb3JlLWNvbGxhcHNlclwiLCAhb3BlbiA/IFwiaXMtY29sbGFwc2VkXCIgOiB1bmRlZmluZWQpfSBkaXI9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Zy1pY29uIHJpZ2h0LXRyaWFuZ2xlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyA4TDEyIDE3TDIxIDhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJlZVRhYmxlUm93PFQ+KHtcbiAgICBsZXZlbCxcbiAgICByb3csXG4gICAgY29sdW1ucyxcbn06IHtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIHJvdzogVHJlZVRhYmxlUm93RGF0YTxUPjtcbiAgICBjb2x1bW5zOiBUcmVlVGFibGVDb2x1bW48VD5bXTtcbn0pIHtcbiAgICBjb25zdCB7IG9wZW5NYXAsIGlkIH0gPSB1c2VDb250ZXh0KFR5cGVkRXhwYW5kZWRDb250ZXh0PFQ+KCkpO1xuICAgIGNvbnN0IG9wZW4gPSB1c2VNZW1vKCgpID0+IG9wZW5NYXAuZ2V0KGlkKHJvdy52YWx1ZSkpLCBbb3Blbk1hcCwgb3Blbk1hcC5nZXQoaWQocm93LnZhbHVlKSksIHJvdywgcm93LnZhbHVlXSk7XG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSB1c2VNZW1vKCgpID0+IHJvdy5jaGlsZHJlbi5sZW5ndGggPiAwLCBbcm93LCByb3cuY2hpbGRyZW4sIHJvdy52YWx1ZV0pO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICB7aGFzQ2hpbGRyZW4gPyA8VHJlZVRhYmxlUm93RXhwYW5kZXI8VD4gbGV2ZWw9e2xldmVsfSByb3c9e3Jvdy52YWx1ZX0gLz4gOiA8dGQ+PC90ZD59XG4gICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFRyZWVUYWJsZVJvd0NlbGw8VD4gcm93PXtyb3d9IGNvbHVtbj17Y29sfSBsZXZlbD17bGV2ZWx9IGlzRmlyc3Q9e2kgPT0gMH0gLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICB7b3BlblxuICAgICAgICAgICAgICAgID8gcm93LmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VHJlZVRhYmxlUm93IHJvdz17Y2hpbGR9IGNvbHVtbnM9e2NvbHVtbnN9IGxldmVsPXtsZXZlbCArIDF9IGtleT17aWQoY2hpbGQudmFsdWUpfSAvPlxuICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyZWVUYWJsZVJvd0NlbGw8VD4oe1xuICAgIHJvdyxcbiAgICBjb2x1bW4sXG4gICAgbGV2ZWwsXG4gICAgaXNGaXJzdCA9IGZhbHNlLFxufToge1xuICAgIHJvdzogVHJlZVRhYmxlUm93RGF0YTxUPjtcbiAgICBjb2x1bW46IFRyZWVUYWJsZUNvbHVtbjxUPjtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIGlzRmlyc3Q6IGJvb2xlYW47XG59KSB7XG4gICAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+IGNvbHVtbi52YWx1ZShyb3cudmFsdWUpLCBbcm93LnZhbHVlLCBjb2x1bW4udmFsdWUsIGNvbHVtbi52YWx1ZShyb3cudmFsdWUpXSk7XG4gICAgY29uc3QgdXBkYXRlciA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAodjogTGl0ZXJhbCkgPT4ge1xuICAgICAgICAgICAgY29sdW1uLm9uVXBkYXRlICYmIGNvbHVtbi5vblVwZGF0ZSh2LCByb3cudmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBbdmFsdWUsIHJvdy52YWx1ZV1cbiAgICApO1xuICAgIGNvbnN0IFtlZGl0YWJsZVN0YXRlLCBkaXNwYXRjaF0gPSB1c2VFZGl0YWJsZURpc3BhdGNoPHR5cGVvZiB2YWx1ZT4oe1xuICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgdXBkYXRlcjogKHYpID0+IGNvbHVtbi5vblVwZGF0ZSAmJiBjb2x1bW4ub25VcGRhdGUodiwgcm93LnZhbHVlKSxcbiAgICB9KTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29udGVudC1jaGFuZ2VkXCIsIG5ld1ZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9LCBbdmFsdWUsIHVwZGF0ZXJdKTtcbiAgICBsZXQgcmVuZGVyZWRDb2x1bW4gPSBjb2x1bW4ucmVuZGVyID8gY29sdW1uLnJlbmRlcihlZGl0YWJsZVN0YXRlLmNvbnRlbnQsIHJvdy52YWx1ZSkgOiB2YWx1ZTtcbiAgICBjb25zdCByZW5kZXJhYmxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChyZW5kZXJlZENvbHVtbiAmJiB0eXBlb2YgcmVuZGVyZWRDb2x1bW4gPT0gXCJvYmplY3RcIiAmJiBcInByb3BzXCIgaW4gcmVuZGVyZWRDb2x1bW4pXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZW5kZXJlZENvbHVtbiwgeyBwcm9wczogT2JqZWN0LmFzc2lnbihyZW5kZXJlZENvbHVtbi5wcm9wcywgeyBkaXNwYXRjaCB9KSB9KTtcbiAgICAgICAgZWxzZSByZXR1cm4gcmVuZGVyZWRDb2x1bW47XG4gICAgfSwgW2NvbHVtbi5yZW5kZXIsIHZhbHVlLCBlZGl0YWJsZVN0YXRlLmNvbnRlbnQsIHJlbmRlcmVkQ29sdW1uLCByb3cudmFsdWUsIHVwZGF0ZXJdKTtcblxuICAgIGNvbnN0IHJlbmRlcmVkID0gdXNlQXNFbGVtZW50KHJlbmRlcmFibGUpO1xuXG4gICAgY29uc3QgRWRpdG9yID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGxldCBlO1xuICAgICAgICBpZiAoY29sdW1uLmVkaXRhYmxlICYmIGNvbHVtbi5lZGl0b3IpIGUgPSBjb2x1bW4uZWRpdG9yKGVkaXRhYmxlU3RhdGUuY29udGVudCwgcm93LnZhbHVlKTtcbiAgICAgICAgZWxzZSBlID0gbnVsbDtcbiAgICAgICAgaWYgKGUpIHJldHVybiBPYmplY3QuYXNzaWduKGUsIHsgcHJvcHM6IE9iamVjdC5hc3NpZ24oZS5wcm9wcywgeyBkaXNwYXRjaCB9KSB9KTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfSwgW2NvbHVtbi5lZGl0b3IsIGNvbHVtbi5lZGl0YWJsZSwgZWRpdGFibGVTdGF0ZS5jb250ZW50LCByb3cudmFsdWVdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDx0ZFxuICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IGlzRmlyc3QgPyBgJHsobGV2ZWwgLSAxKSAqIDEuMn1lbWAgOiB1bmRlZmluZWQgfX1cbiAgICAgICAgICAgIG9uRGJsQ2xpY2s9eygpID0+IGRpc3BhdGNoKHsgdHlwZTogXCJlZGl0aW5nLXRvZ2dsZWRcIiwgbmV3VmFsdWU6ICFlZGl0YWJsZVN0YXRlLmlzRWRpdGluZyB9KX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWNlbGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7Y29sdW1uLmVkaXRhYmxlID8gKFxuICAgICAgICAgICAgICAgIDxFZGl0YWJsZTx0eXBlb2YgdmFsdWU+XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZW5kZXI9e3JlbmRlcmVkfVxuICAgICAgICAgICAgICAgICAgICBlZGl0b3I9e0VkaXRvcn1cbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2g9e2Rpc3BhdGNofVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZT17ZWRpdGFibGVTdGF0ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICByZW5kZXJlZFxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC90ZD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29udHJvbGxlZFRyZWVUYWJsZVZpZXc8VD4oXG4gICAgcHJvcHM6IFRyZWVUYWJsZVN0YXRlPFQ+ICYgVHJlZVRhYmxlUHJvcHM8VD4gJiB7IGRpc3BhdGNoOiBEaXNwYXRjaDxUcmVlVGFibGVBY3Rpb248VD4+IH1cbikge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB1c2VJbnRlcm5pbmcocHJvcHMuY29sdW1ucywgKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBhLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09IGJbaW5kZXhdKTtcbiAgICB9KTtcbiAgICBjb25zdCB0b3RhbEVsZW1lbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChHcm91cGluZ3MuaXNHcm91cGluZyhwcm9wcy5yb3dzKSkgcmV0dXJuIEdyb3VwaW5ncy5jb3VudChwcm9wcy5yb3dzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnJvd3MucmVkdWNlKFxuICAgICAgICAgICAgICAgIChwdiwgY3YpID0+IHB2ICsgVHJlZVV0aWxzLmNvdW50SW5UcmVlUm93KFRyZWVVdGlscy5vZk5vZGUoY3YsIHByb3BzLmNoaWxkU2VsZWN0b3IpKSxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuICAgIH0sIFtwcm9wcy5yb3dzXSk7XG4gICAgY29uc3QgdGFibGVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICAgIGNvbnN0IHBhZ2luZyA9IHVzZURhdGFjb3JlUGFnaW5nKHtcbiAgICAgICAgaW5pdGlhbFBhZ2U6IDAsXG4gICAgICAgIHBhZ2luZzogcHJvcHMucGFnaW5nLFxuICAgICAgICBzY3JvbGxPblBhZ2VDaGFuZ2U6IHByb3BzLnNjcm9sbE9uUGFnaW5nLFxuICAgICAgICBlbGVtZW50czogdG90YWxFbGVtZW50cyxcbiAgICAgICAgY29udGFpbmVyOiB0YWJsZVJlZixcbiAgICB9KTtcbiAgICBjb25zdCByYXdTb3J0cyA9IHVzZUludGVybmluZyhwcm9wcy5zb3J0T24sIChhLCBiKSA9PiBMaXRlcmFscy5jb21wYXJlKGEsIGIpID09IDApO1xuICAgIGNvbnN0IHNvcnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiByYXdTb3J0cz8uZmlsdGVyKChzb3J0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmlkID09IHNvcnQuaWQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiAmJiAoY29sdW1uLnNvcnRhYmxlID8/IHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9LCBbY29sdW1ucywgcmF3U29ydHNdKTtcbiAgICBjb25zdCBncm91cGluZ3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wcy5ncm91cGluZ3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BzLmdyb3VwaW5ncykpIHJldHVybiBwcm9wcy5ncm91cGluZ3M7XG5cbiAgICAgICAgaWYgKExpdGVyYWxzLmlzRnVuY3Rpb24ocHJvcHMuZ3JvdXBpbmdzKSkgcmV0dXJuIFt7IHJlbmRlcjogcHJvcHMuZ3JvdXBpbmdzIH1dO1xuICAgICAgICBlbHNlIHJldHVybiBbcHJvcHMuZ3JvdXBpbmdzXTtcbiAgICB9LCBbcHJvcHMuZ3JvdXBpbmdzXSk7XG4gICAgY29uc3QgcmF3Um93cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIUdyb3VwaW5ncy5pc0dyb3VwaW5nKHByb3BzLnJvd3MpKSByZXR1cm4gVHJlZVV0aWxzLm9mQXJyYXkocHJvcHMucm93cywgcHJvcHMuY2hpbGRTZWxlY3Rvcik7XG4gICAgICAgIHJldHVybiBUcmVlVXRpbHMub2ZHcm91cGluZyhwcm9wcy5yb3dzLCBwcm9wcy5jaGlsZFNlbGVjdG9yKTtcbiAgICB9LCBbcHJvcHMucm93c10pO1xuICAgIGNvbnN0IHJvd3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHNvcnRzID09IHVuZGVmaW5lZCB8fCBzb3J0cy5sZW5ndGggPT0gMCkgcmV0dXJuIHJhd1Jvd3M7XG4gICAgICAgIGNvbnN0IGNvbXBhcmF0b3JzID0gc29ydHMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBjb2x1bW5zLmZpbmQoKHkpID0+IHkuaWQgPT0geC5pZCkhO1xuICAgICAgICAgICAgY29uc3QgY29tcCA9IGNvbD8uY29tcGFyYXRvciA/PyBERUZBVUxUX1RBQkxFX0NPTVBBUkFUT1I7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGZuOiBjb21wLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogeC5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgYWN0dWFsVmFsdWU6IGNvbC52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gVHJlZVV0aWxzLnNvcnQ8VCwgTGl0ZXJhbD4ocmF3Um93cywgY29tcGFyYXRvcnMpIGFzIEdyb3VwaW5nPFRyZWVUYWJsZVJvd0RhdGE8VD4+O1xuICAgIH0sIFtyYXdSb3dzLCBzb3J0c10pO1xuXG4gICAgY29uc3QgcGFnZWRSb3dzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChwYWdpbmcuZW5hYmxlZClcbiAgICAgICAgICAgIHJldHVybiBUcmVlVXRpbHMuc2xpY2Uocm93cywgcGFnaW5nLnBhZ2UgKiBwYWdpbmcucGFnZVNpemUsIChwYWdpbmcucGFnZSArIDEpICogcGFnaW5nLnBhZ2VTaXplKTtcbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfSwgW3BhZ2luZy5wYWdlLCBwYWdpbmcucGFnZVNpemUsIHBhZ2luZy5lbmFibGVkLCBwcm9wcy5yb3dzLCByb3dzXSk7XG5cbiAgICBjb25zdCBrZXlGbiA9IHVzZUtleUZuKHByb3BzLmlkLCBwYWdlZFJvd3MpO1xuICAgIGNvbnN0IENvbnRleHQgPSBUeXBlZEV4cGFuZGVkQ29udGV4dDxUPigpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IG9wZW5NYXA6IHByb3BzLm9wZW5NYXAhLCBkaXNwYXRjaDogcHJvcHMuZGlzcGF0Y2gsIGlkOiBwcm9wcy5pZCB9fT5cbiAgICAgICAgICAgIDxkaXYgcmVmPXt0YWJsZVJlZn0+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJkYXRhY29yZS10YWJsZS1oZWFkZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cImRhdGFjb3JlLXRhYmxlLWhlYWRlci1jZWxsXCIgd2lkdGg9XCIxcHhcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHJlZVRhYmxlSGVhZGVyQ2VsbDxUPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydD17cHJvcHMuc29ydE9uPy5maW5kKChzKSA9PiBzLmlkID09PSB4LmlkKT8uZGlyZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uPXt4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU9e3guc29ydGFibGUgPz8gdHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYWdlZFJvd3MubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHJlZVRhYmxlUm93R3JvdXA8VD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17cm93fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD17MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdzPXtncm91cGluZ3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17a2V5Rm4ocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICB7cGFnaW5nLmVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8Q29udHJvbGxlZFBhZ2VyIHBhZ2U9e3BhZ2luZy5wYWdlfSB0b3RhbFBhZ2VzPXtwYWdpbmcudG90YWxQYWdlc30gc2V0UGFnZT17cGFnaW5nLnNldFBhZ2V9IC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyZWVUYWJsZVZpZXc8VD4ocHJvcHM6IFRyZWVUYWJsZVByb3BzPFQ+KSB7XG4gICAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VUcmVlVGFibGVEaXNwYXRjaDxUPih7XG4gICAgICAgIHNvcnRPbjogcHJvcHMuc29ydE9uID8/IFtdLFxuICAgICAgICBpZDogcHJvcHMuaWQgPyBwcm9wcy5pZCA6ICh4KSA9PiAoeCBhcyBJbmRleGFibGUpLiRpZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZlN0YXRlID0gdXNlTWVtbygoKSA9PiB1c2VSZWYoc3RhdGUpLCBbc3RhdGVdKTtcbiAgICBpZiAoc3RhdGUub3Blbk1hcCAhPT0gdW5kZWZpbmVkKSByZWZTdGF0ZS5jdXJyZW50ID0gc3RhdGU7XG4gICAgZWxzZSByZWZTdGF0ZS5jdXJyZW50Lm9wZW5NYXAgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwib3Blbi1tYXAtY2hhbmdlZFwiLCBuZXdWYWx1ZTogcmVmU3RhdGUuY3VycmVudC5vcGVuTWFwID8/IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpIH0pO1xuICAgIH0sIFtkaXNwYXRjaF0pO1xuICAgIGRlbGV0ZSBwcm9wcy5zb3J0T247XG4gICAgcmV0dXJuIDxDb250cm9sbGVkVHJlZVRhYmxlVmlldzxUPiBkaXNwYXRjaD17ZGlzcGF0Y2h9IHsuLi5zdGF0ZX0gey4uLnByb3BzfSAvPjtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgYXBpXG4gKi9cbmltcG9ydCB7IERhdGFjb3JlQXBpIH0gZnJvbSBcImFwaS9hcGlcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQgeyBEYXRhY29yZSB9IGZyb20gXCJpbmRleC9kYXRhY29yZVwiO1xuaW1wb3J0IHsgU2VhcmNoUmVzdWx0IH0gZnJvbSBcImluZGV4L2RhdGFzdG9yZVwiO1xuaW1wb3J0IHsgSW5kZXhRdWVyeSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgTWFya2Rvd25QYWdlLCBNYXJrZG93blRhc2tJdGVtIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IHVzZUZpbGVNZXRhZGF0YSwgdXNlRnVsbFF1ZXJ5LCB1c2VJbmRleFVwZGF0ZXMsIHVzZUludGVybmluZywgdXNlUXVlcnkgfSBmcm9tIFwidWkvaG9va3NcIjtcbmltcG9ydCAqIGFzIGx1eG9uIGZyb20gXCJsdXhvblwiO1xuaW1wb3J0ICogYXMgcHJlYWN0IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCAqIGFzIGhvb2tzIGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCIuL3Jlc3VsdFwiO1xuaW1wb3J0IHsgR3JvdXAsIFN0YWNrIH0gZnJvbSBcIi4vdWkvbGF5b3V0XCI7XG5pbXBvcnQgeyBFbWJlZCwgTGluZVNwYW5FbWJlZCB9IGZyb20gXCJhcGkvdWkvZW1iZWRcIjtcbmltcG9ydCB7IENVUlJFTlRfRklMRV9DT05URVhULCBMaXQsIE1hcmtkb3duLCBPYnNpZGlhbkxpbmsgfSBmcm9tIFwidWkvbWFya2Rvd25cIjtcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IEJ1dHRvbiwgQ2hlY2tib3gsIEljb24sIFNsaWRlciwgU3dpdGNoLCBUZXh0Ym94LCBWYW5pbGxhU2VsZWN0IH0gZnJvbSBcIi4vdWkvYmFzaWNzXCI7XG5pbXBvcnQgeyBUYXNrTGlzdCB9IGZyb20gXCIuL3VpL3ZpZXdzL3Rhc2tcIjtcbmltcG9ydCB7IFZhbmlsbGFUYWJsZSB9IGZyb20gXCIuL3VpL3ZpZXdzL3RhYmxlXCI7XG5pbXBvcnQgeyBDYWxsb3V0IH0gZnJvbSBcIi4vdWkvdmlld3MvY2FsbG91dFwiO1xuaW1wb3J0IHsgQ2FyZCB9IGZyb20gXCIuL3VpL3ZpZXdzL2NhcmRzXCI7XG5pbXBvcnQgeyBEYXRhQXJyYXkgfSBmcm9tIFwiLi9kYXRhLWFycmF5XCI7XG5pbXBvcnQgeyBDb2VyY2UgfSBmcm9tIFwiLi9jb2VyY2VcIjtcbmltcG9ydCB7IFNjcmlwdENhY2hlIH0gZnJvbSBcIi4vc2NyaXB0LWNhY2hlXCI7XG5pbXBvcnQgeyBzZXRUYXNrVGV4dCwgdXNlU2V0RmllbGQgfSBmcm9tIFwidXRpbHMvZmllbGRzXCI7XG5pbXBvcnQge1xuICAgIENvbnRyb2xsZWRFZGl0YWJsZVRleHRGaWVsZCxcbiAgICBGaWVsZENoZWNrYm94LFxuICAgIEVkaXRhYmxlVGV4dEZpZWxkLFxuICAgIEZpZWxkU2xpZGVyLFxuICAgIEZpZWxkU2VsZWN0LFxuICAgIEZpZWxkU3dpdGNoLFxufSBmcm9tIFwidWkvZmllbGRzL2VkaXRhYmxlLWZpZWxkc1wiO1xuaW1wb3J0IHsgY29tcGxldGVUYXNrIH0gZnJvbSBcInV0aWxzL3Rhc2tcIjtcbmltcG9ydCB7IFRyZWVUYWJsZVZpZXcgfSBmcm9tIFwiLi91aS92aWV3cy90cmVlLXRhYmxlXCI7XG5cbi8qKiBMb2NhbCBBUEkgcHJvdmlkZWQgdG8gc3BlY2lmaWMgY29kZWJsb2NrcyB3aGVuIHRoZXkgYXJlIGV4ZWN1dGluZy5cbiAqIEBncm91cCBDb3JlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhY29yZUxvY2FsQXBpIHtcbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2NyaXB0Q2FjaGU6IFNjcmlwdENhY2hlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBhcGk6IERhdGFjb3JlQXBpLCBwdWJsaWMgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2NyaXB0Q2FjaGUgPSBuZXcgU2NyaXB0Q2FjaGUodGhpcy5jb3JlLmRhdGFzdG9yZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjdXJyZW50IGZpbGUgcGF0aCBmb3IgdGhlIGxvY2FsIEFQSS4gKi9cbiAgICBwdWJsaWMgY3VycmVudFBhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGF0aDtcbiAgICB9XG5cbiAgICAvKiogVGhlIGZ1bGwgbWFya2Rvd24gZmlsZSBtZXRhZGF0YSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gKi9cbiAgICBwdWJsaWMgY3VycmVudEZpbGUoKTogTWFya2Rvd25QYWdlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBhZ2UodGhpcy5wYXRoKSE7XG4gICAgfVxuXG4gICAgLyoqIEdldCBhY2VzcyB0byBsdXhvbiBmdW5jdGlvbnMuICovXG4gICAgZ2V0IGx1eG9uKCk6IHR5cGVvZiBsdXhvbiB7XG4gICAgICAgIHJldHVybiBsdXhvbjtcbiAgICB9XG5cbiAgICAvKiogR2V0IGFjY2VzcyB0byBwcmVhY3QgZnVuY3Rpb25zLiAqL1xuICAgIGdldCBwcmVhY3QoKTogdHlwZW9mIHByZWFjdCB7XG4gICAgICAgIHJldHVybiBwcmVhY3Q7XG4gICAgfVxuXG4gICAgLyoqIENlbnRyYWwgT2JzaWRpYW4gYXBwIG9iamVjdC4gKi9cbiAgICBnZXQgYXBwKCk6IEFwcCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvcmUuYXBwO1xuICAgIH1cblxuICAgIC8qKiBUaGUgaW50ZXJuYWwgcGx1Z2luIGNlbnRyYWwgZGF0YXN0cnVjdHVyZS4gKi9cbiAgICBnZXQgY29yZSgpOiBEYXRhY29yZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5jb3JlO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFNjcmlwdCBsb2FkaW5nIHV0aWxpdGllcyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLyoqXG4gICAgICogQXN5bmNocm9ub3VzbHkgbG9hZCBhIGphdmFzY3JpcHQgYmxvY2sgZnJvbSB0aGUgZ2l2ZW4gcGF0aCBvciBsaW5rOyB5b3UgY2FuIGVpdGhlciBsb2FkIGZyb20gSlMvVFMvSlNYL1RTWCBmaWxlc1xuICAgICAqIGRpcmVjdGx5LCBvciBmcm9tIGNvZGVibG9ja3MgYnkgbG9hZGluZyBmcm9tIHRoZSBzZWN0aW9uIHRoZSBjb2RlYmxvY2sgaXMgaW5zaWRlIG9mLiBUaGVyZSBhcmUgYSBmZXcgc3RpcHVsYXRpb25zXG4gICAgICogdG8gbG9hZGluZzpcbiAgICAgKiAtIFlvdSBjYW5ub3QgbG9hZCBjeWNsaWNhbCBkZXBlbmRlbmNpZXMuXG4gICAgICogLSBUaGlzIGlzIHNpbWlsYXIgdG8gdmFuaWxsYSBqcyBgcmVxdWlyZSgpYCwgbm90IGBpbXBvcnQgLi4uIGAuIFlvdXIgc2NyaXB0cyB5b3UgYXJlIHJlcXVpcmluZyBuZWVkIHRvIGV4cGxpY2l0bHlcbiAgICAgKiAgIHJldHVybiB0aGUgdGhpbmdzIHRoZXkgYXJlIGV4cG9ydGluZywgbGlrZSB0aGUgZXhhbXBsZSBiZWxvdy4gVGhlIGBleHBvcnRgIGtleXdvcmQgZG9lcyBub3Qgd29yay5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogZnVuY3Rpb24gTXlFbGVtZW50KCkge1xuICAgICAqICAuLi5cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiByZXR1cm4geyBNeUVsZW1lbnQgfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgcmVxdWlyZShwYXRoOiBzdHJpbmcgfCBMaW5rKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zY3JpcHRDYWNoZS5sb2FkKHBhdGgsIHsgZGM6IHRoaXMgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEdlbmVyYWwgdXRpbGl0aWVzIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIC8qKiBVdGlsaXRpZXMgZm9yIGNvZXJjaW5nIHR5cGVzIGludG8gb25lIHNwZWNpZmljIHR5cGUgZm9yIGVhc2llciBwcm9ncmFtbWluZy4gKi9cbiAgICBwdWJsaWMgY29lcmNlID0gQ29lcmNlO1xuXG4gICAgLyoqIFJlc29sdmUgYSBsb2NhbCBvciBhYnNvbHV0ZSBwYXRoIG9yIGxpbmsgdG8gYW4gYWJzb2x1dGUgcGF0aC4gKi9cbiAgICBwdWJsaWMgcmVzb2x2ZVBhdGgocGF0aDogc3RyaW5nIHwgTGluaywgc291cmNlUGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5yZXNvbHZlUGF0aChwYXRoLCBzb3VyY2VQYXRoID8/IHRoaXMucGF0aCk7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSB0aGUgZ2l2ZW4gcXVlcnksIHJldHVybmluZyBhIG1vbmFkaWMgc3VjY2Vzcy9mYWlsdXJlIHJlc3VsdC4gKi9cbiAgICBwdWJsaWMgdHJ5UGFyc2VRdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSk6IFJlc3VsdDxJbmRleFF1ZXJ5LCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnRyeVBhcnNlUXVlcnkocXVlcnkpO1xuICAgIH1cblxuICAgIC8qKiBUcnkgdG8gcGFyc2UgdGhlIGdpdmVuIHF1ZXJ5LCB0aHJvd2luZyBhbiBlcnJvciBpZiBpdCBpcyBpbnZhbGlkLiAqL1xuICAgIHB1YmxpYyBwYXJzZVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogSW5kZXhRdWVyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyeVBhcnNlUXVlcnkocXVlcnkpLm9yRWxzZVRocm93KChlKSA9PiBcIkZhaWxlZCB0byBwYXJzZSBxdWVyeTogXCIgKyBlKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgZmlsZSBsaW5rIHBvaW50aW5nIHRvIHRoZSBnaXZlbiBwYXRoLiAqL1xuICAgIHB1YmxpYyBmaWxlTGluayhwYXRoOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZShwYXRoKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIGhlYWRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLiAqL1xuICAgIHB1YmxpYyBoZWFkZXJMaW5rKHBhdGg6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHBhdGgsIGhlYWRlcik7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIGxpbmsgdG8gYSBibG9jayB3aXRoIHRoZSBnaXZlbiBwYXRoIGFuZCBibG9jayBJRC4gKi9cbiAgICBwdWJsaWMgYmxvY2tMaW5rKHBhdGg6IHN0cmluZywgYmxvY2s6IHN0cmluZyk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5ibG9jayhwYXRoLCBibG9jayk7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSB0aGUgZ2l2ZW4gbGluaywgdGhyb3dpbmcgYW4gZXJyb3IgaWYgaXQgaXMgaW52YWxpZC4gKi9cbiAgICBwdWJsaWMgcGFyc2VMaW5rKGxpbmt0ZXh0OiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBhcnNlTGluayhsaW5rdGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSBhIGxpbmssIHJldHVybmluZyBhIG1vbmFkaWMgc3VjY2Vzcy9mYWlsdXJlIHJlc3VsdC4gKi9cbiAgICBwdWJsaWMgdHJ5UGFyc2VMaW5rKGxpbmt0ZXh0OiBzdHJpbmcpOiBSZXN1bHQ8TGluaywgc3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS50cnlQYXJzZUxpbmsobGlua3RleHQpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBkYXRhIGFycmF5IGZyb20gYSByZWd1bGFyIGFycmF5LiAqL1xuICAgIHB1YmxpYyBhcnJheTxUPihpbnB1dDogVFtdIHwgRGF0YUFycmF5PFQ+KTogRGF0YUFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIERhdGFBcnJheS53cmFwKGlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyB0aGUgdGV4dCBvZiBhIGdpdmVuIHRhc2sgcHJvZ3JhbW1hdGljYWxseS4gKi9cblxuICAgIHB1YmxpYyBzZXRUYXNrVGV4dChuZXdUZXh0OiBzdHJpbmcsIHRhc2s6IE1hcmtkb3duVGFza0l0ZW0pOiB2b2lkIHtcbiAgICAgICAgc2V0VGFza1RleHQodGhpcy5hcHAsIHRoaXMuY29yZSwgbmV3VGV4dCwgdGFzayk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgdGhlIGNvbXBsZXRpb24gc3RhdHVzIG9mIGEgZ2l2ZW4gdGFzayBwcm9ncmFtbWF0aWNhbGx5LiAqL1xuICAgIHB1YmxpYyBzZXRUYXNrQ29tcGxldGlvbihjb21wbGV0ZWQ6IGJvb2xlYW4sIHRhc2s6IE1hcmtkb3duVGFza0l0ZW0pOiB2b2lkIHtcbiAgICAgICAgY29tcGxldGVUYXNrKGNvbXBsZXRlZCwgdGFzaywgdGhpcy5hcHAudmF1bHQsIHRoaXMuY29yZSk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vL1xuICAgIC8vICBIb29rcyAgLy9cbiAgICAvLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBFeHBvcnQgdGhlIGNvbW1vbiBwcmVhY3QgaG9va3MgZm9yIHBlb3BsZSB0byB1c2UgdmlhIGBkYy5gOlxuICAgIHB1YmxpYyB1c2VTdGF0ZSA9IGhvb2tzLnVzZVN0YXRlO1xuICAgIHB1YmxpYyB1c2VDYWxsYmFjayA9IGhvb2tzLnVzZUNhbGxiYWNrO1xuICAgIHB1YmxpYyB1c2VSZWR1Y2VyID0gaG9va3MudXNlUmVkdWNlcjtcbiAgICBwdWJsaWMgdXNlTWVtbyA9IGhvb2tzLnVzZU1lbW87XG4gICAgcHVibGljIHVzZUVmZmVjdCA9IGhvb2tzLnVzZUVmZmVjdDtcbiAgICBwdWJsaWMgY3JlYXRlQ29udGV4dCA9IHByZWFjdC5jcmVhdGVDb250ZXh0O1xuICAgIHB1YmxpYyB1c2VDb250ZXh0ID0gaG9va3MudXNlQ29udGV4dDtcbiAgICBwdWJsaWMgdXNlUmVmID0gaG9va3MudXNlUmVmO1xuICAgIHB1YmxpYyB1c2VJbnRlcm5pbmcgPSB1c2VJbnRlcm5pbmc7XG4gICAgcHVibGljIHVzZVNldEZpZWxkID0gdXNlU2V0RmllbGQ7XG5cbiAgICAvKiogTWVtb2l6ZSB0aGUgaW5wdXQgYXV0b21hdGljYWxseSBhbmQgcHJvY2VzcyBpdCB1c2luZyBhIERhdGEgQXJyYXk7IHJldHVybnMgYSB2YW5pbGxhIGFycmF5IGJhY2suICovXG4gICAgcHVibGljIHVzZUFycmF5PFQsIFU+KGlucHV0OiBUW10gfCBEYXRhQXJyYXk8VD4sIHByb2Nlc3M6IChkYXRhOiBEYXRhQXJyYXk8VD4pID0+IERhdGFBcnJheTxVPiwgZGVwcz86IGFueVtdKTogVVtdIHtcbiAgICAgICAgcmV0dXJuIGhvb2tzLnVzZU1lbW8oKCkgPT4gcHJvY2VzcyhEYXRhQXJyYXkud3JhcChpbnB1dCkpLmFycmF5KCksIFtpbnB1dCwgLi4uKGRlcHMgPz8gW10pXSk7XG4gICAgfVxuXG4gICAgLyoqIFVzZSB0aGUgZmlsZSBtZXRhZGF0YSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSB2aWV3IHdoZW4gdGhlIGN1cnJlbnQgZmlsZSBtZXRhZGF0YSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyB1c2VDdXJyZW50RmlsZShzZXR0aW5ncz86IHsgZGVib3VuY2U/OiBudW1iZXIgfSk6IE1hcmtkb3duUGFnZSB7XG4gICAgICAgIHJldHVybiB1c2VGaWxlTWV0YWRhdGEodGhpcy5jb3JlLCB0aGlzLnBhdGgsIHNldHRpbmdzKSBhcyBNYXJrZG93blBhZ2U7XG4gICAgfVxuXG4gICAgLyoqIFVzZSB0aGUgY3VycmVudCBwYXRoLiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHZpZXcgaWYgdGhlIHBhdGggY2hhbmdlcyAodGhvdWdoIHRoYXQgd291bGQgYmUgd2VpcmQpLiAqL1xuICAgIHB1YmxpYyB1c2VDdXJyZW50UGF0aChzZXR0aW5ncz86IHsgZGVib3VuY2U/OiBudW1iZXIgfSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLnVzZUN1cnJlbnRGaWxlKHNldHRpbmdzKTtcbiAgICAgICAgcmV0dXJuIG1ldGEuJHBhdGg7XG4gICAgfVxuXG4gICAgLyoqIFVzZSB0aGUgZmlsZSBtZXRhZGF0YSBmb3IgYSBzcGVjaWZpYyBmaWxlLiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHZpZXcgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyB1c2VGaWxlKHBhdGg6IHN0cmluZywgc2V0dGluZ3M/OiB7IGRlYm91bmNlPzogbnVtYmVyIH0pOiBJbmRleGFibGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdXNlRmlsZU1ldGFkYXRhKHRoaXMuY29yZSwgcGF0aCwgc2V0dGluZ3MpITtcbiAgICB9XG5cbiAgICAvKiogQXV0b21hdGljYWxseSByZWZyZXNoIHRoZSB2aWV3IHdoZW5ldmVyIHRoZSBpbmRleCB1cGRhdGVzOyByZXR1cm5zIHRoZSBsYXRlc3QgaW5kZXggcmV2aXNpb24gSUQuICovXG4gICAgcHVibGljIHVzZUluZGV4VXBkYXRlcyhzZXR0aW5ncz86IHsgZGVib3VuY2U/OiBudW1iZXIgfSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB1c2VJbmRleFVwZGF0ZXModGhpcy5jb3JlLCBzZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVuIGEgcXVlcnksIGF1dG9tYXRpY2FsbHkgcmUtcnVubmluZyBpdCB3aGVuZXZlciB0aGUgdmF1bHQgY2hhbmdlcy4gUmV0dXJucyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBxdWVyeVxuICAgICAqIGV4ZWN1dGlvbiwgc3VjaCBhcyBpbmRleCByZXZpc2lvbiBhbmQgdG90YWwgc2VhcmNoIGR1cmF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB1c2VGdWxsUXVlcnkocXVlcnk6IHN0cmluZyB8IEluZGV4UXVlcnksIHNldHRpbmdzPzogeyBkZWJvdW5jZT86IG51bWJlciB9KTogU2VhcmNoUmVzdWx0PEluZGV4YWJsZT4ge1xuICAgICAgICByZXR1cm4gdXNlRnVsbFF1ZXJ5KHRoaXMuY29yZSwgdGhpcy5wYXJzZVF1ZXJ5KHF1ZXJ5KSwgc2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKiBSdW4gYSBxdWVyeSwgYXV0b21hdGljYWxseSByZS1ydW5uaW5nIGl0IHdoZW5ldmVyIHRoZSB2YXVsdCBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyB1c2VRdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSwgc2V0dGluZ3M/OiB7IGRlYm91bmNlPzogbnVtYmVyIH0pOiBJbmRleGFibGVbXSB7XG4gICAgICAgIC8vIEhvb2tzIG5lZWQgdG8gYmUgY2FsbGVkIGluIGEgY29uc2lzdGVudCBvcmRlciwgc28gd2UgZG9uJ3QgbmVzdCB0aGUgYHVzZVF1ZXJ5YCBjYWxsIGluIHRoZSBEYXRhQXJyYXkud3JhcCBfanVzdF8gaW4gY2FzZS5cbiAgICAgICAgcmV0dXJuIHVzZVF1ZXJ5KHRoaXMuY29yZSwgdGhpcy5wYXJzZVF1ZXJ5KHF1ZXJ5KSwgc2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFZpc3VhbCBFbGVtZW50cyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLyoqIFZlcnRpY2FsIGZsZXhib3ggY29udGFpbmVyOyBnb29kIGZvciBwdXR0aW5nIGl0ZW1zIHRvZ2V0aGVyIGluIGEgY29sdW1uLiAqL1xuICAgIHB1YmxpYyBTdGFjayA9IFN0YWNrO1xuICAgIC8qKiBIb3Jpem9udGFsIGZsZXhib3ggY29udGFpbmVyOyBnb29kIGZvciBwdXR0aW5nIGl0ZW1zIHRvZ2V0aGVyIGluIGEgcm93LiAqL1xuICAgIHB1YmxpYyBHcm91cCA9IEdyb3VwO1xuXG4gICAgLyoqIFJlbmRlcnMgYSBsaXRlcmFsIHZhbHVlIGluIGEgcHJldHR5IHdheSB0aGF0IHJlc3BlY3RzIHNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBMaXRlcmFsID0gKCh7IHZhbHVlLCBzb3VyY2VQYXRoLCBpbmxpbmUgfTogeyB2YWx1ZTogTGl0ZXJhbDsgc291cmNlUGF0aD86IHN0cmluZzsgaW5saW5lPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGltcGxpY2l0U291cmNlUGF0aCA9IGhvb2tzLnVzZUNvbnRleHQoQ1VSUkVOVF9GSUxFX0NPTlRFWFQpO1xuICAgICAgICByZXR1cm4gPExpdCB2YWx1ZT17dmFsdWV9IHNvdXJjZVBhdGg9e3NvdXJjZVBhdGggPz8gaW1wbGljaXRTb3VyY2VQYXRoID8/IHRoaXMucGF0aH0gaW5saW5lPXtpbmxpbmV9IC8+O1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICAvKiogUmVuZGVycyBtYXJrZG93biB1c2luZyB0aGUgT2JzaWRpYW4gbWFya2Rvd24gcmVuZGVyZXIsIG9wdGlvbmFsbHkgYXR0YWNoaW5nIGFkZGl0aW9uYWwgc3R5bGVzLiAqL1xuICAgIHB1YmxpYyBNYXJrZG93biA9ICgoe1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBzb3VyY2VQYXRoLFxuICAgICAgICBpbmxpbmUsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgfToge1xuICAgICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gICAgICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgICAgIHN0eWxlPzogQ1NTUHJvcGVydGllcztcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIH0pID0+IHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRTb3VyY2VQYXRoID0gaG9va3MudXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg9e3NvdXJjZVBhdGggPz8gaW1wbGljaXRTb3VyY2VQYXRoID8/IHRoaXMucGF0aH1cbiAgICAgICAgICAgICAgICBpbmxpbmU9e2lubGluZX1cbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICAgICAgY2xzPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICAvKiogUmVuZGVycyBhbiBvYnNpZGlhbi1zdHlsZSBsaW5rIGRpcmVjdGx5IGFuZCBtb3JlIGVmZmllaWNudGx5IHRoYW4gcmVuZGVyaW5nIG1hcmtkb3duLiAqL1xuICAgIHB1YmxpYyBMaW5rID0gT2JzaWRpYW5MaW5rO1xuXG4gICAgLyoqIENyZWF0ZSBhIHZhbmlsbGEgT2JzaWRpYW4gZW1iZWQgZm9yIHRoZSBnaXZlbiBsaW5rLiAqL1xuICAgIHB1YmxpYyBMaW5rRW1iZWQgPSAoKHtcbiAgICAgICAgbGluayxcbiAgICAgICAgaW5saW5lLFxuICAgICAgICBzb3VyY2VQYXRoLFxuICAgIH06IHtcbiAgICAgICAgbGluazogc3RyaW5nIHwgTGluaztcbiAgICAgICAgaW5saW5lPzogYm9vbGVhbjtcbiAgICAgICAgc291cmNlUGF0aD86IHN0cmluZztcbiAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWxMaW5rID0gaG9va3MudXNlTWVtbygoKSA9PiAodHlwZW9mIGxpbmsgPT09IFwic3RyaW5nXCIgPyBMaW5rLmZpbGUobGluaykgOiBsaW5rKSwgW2xpbmtdKTtcbiAgICAgICAgY29uc3QgaW1wbGljaXRTb3VyY2VQYXRoID0gaG9va3MudXNlQ29udGV4dChDVVJSRU5UX0ZJTEVfQ09OVEVYVCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RW1iZWRcbiAgICAgICAgICAgICAgICBsaW5rPXtyZWFsTGlua31cbiAgICAgICAgICAgICAgICBpbmxpbmU9e2lubGluZSA/PyBmYWxzZX1cbiAgICAgICAgICAgICAgICBzb3VyY2VQYXRoPXtzb3VyY2VQYXRoID8/IGltcGxpY2l0U291cmNlUGF0aCA/PyB0aGlzLnBhdGh9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICAvKiogQ3JlYXRlIGFuIGV4cGxpY2l0ICdzcGFuJyBlbWJlZCB3aGljaCBleHRyYWN0cyBhIHNwYW4gb2YgbGluZXMgZnJvbSBhIG1hcmtkb3duIGZpbGUuICovXG4gICAgcHVibGljIFNwYW5FbWJlZCA9ICgoe1xuICAgICAgICBwYXRoLFxuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kLFxuICAgICAgICBleHBsYWluLFxuICAgICAgICBzaG93RXhwbGFpbixcbiAgICAgICAgc291cmNlUGF0aDogbWF5YmVTb3VyY2VQYXRoLFxuICAgIH06IHtcbiAgICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICAgICAgICBleHBsYWluPzogc3RyaW5nO1xuICAgICAgICBzaG93RXhwbGFpbj86IGJvb2xlYW47XG4gICAgICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgICAgIGVuZDogbnVtYmVyO1xuICAgIH0pID0+IHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcGF0aCB0byB0aGUgY29ycmVjdCBwYXRoIGlmIGEgc291cmNlIHBhdGggaXMgcHJvdmlkZWQuXG4gICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBtYXliZVNvdXJjZVBhdGggPz8gdGhpcy5wYXRoO1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSBob29rcy51c2VNZW1vKCgpID0+IHRoaXMucmVzb2x2ZVBhdGgocGF0aCwgc291cmNlUGF0aCksIFtwYXRoLCBzb3VyY2VQYXRoXSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxMaW5lU3BhbkVtYmVkIHBhdGg9e3Jlc29sdmVkUGF0aH0gc3RhcnQ9e3N0YXJ0fSBlbmQ9e2VuZH0gZXhwbGFpbj17ZXhwbGFpbn0gc2hvd0V4cGxhaW49e3Nob3dFeHBsYWlufSAvPlxuICAgICAgICApO1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICAvKiogUmVuZGVycyBhbiBvYnNpZGlhbiBsdWNpZGUgaWNvbi4gKi9cbiAgICBwdWJsaWMgSWNvbiA9IEljb247XG5cbiAgICAvLy8vLy8vLy8vL1xuICAgIC8vIFZpZXdzIC8vXG4gICAgLy8vLy8vLy8vLy9cblxuICAgIHB1YmxpYyBUYXNrTGlzdCA9IFRhc2tMaXN0O1xuICAgIHB1YmxpYyBWYW5pbGxhVGFibGUgPSBWYW5pbGxhVGFibGU7XG4gICAgcHVibGljIFRyZWVUYWJsZSA9IFRyZWVUYWJsZVZpZXc7XG4gICAgcHVibGljIENhcmQgPSBDYXJkO1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEludGVyYXRpdmUgZWxlbWVudHMgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBwdWJsaWMgQnV0dG9uID0gQnV0dG9uO1xuICAgIHB1YmxpYyBUZXh0Ym94ID0gVGV4dGJveDtcbiAgICBwdWJsaWMgQ2FsbG91dCA9IENhbGxvdXQ7XG4gICAgcHVibGljIENoZWNrYm94ID0gQ2hlY2tib3g7XG4gICAgcHVibGljIFNsaWRlciA9IFNsaWRlcjtcbiAgICBwdWJsaWMgU3dpdGNoID0gU3dpdGNoO1xuICAgIHB1YmxpYyBWYW5pbGxhU2VsZWN0ID0gVmFuaWxsYVNlbGVjdDtcblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyAgICBmaWVsZCBlZGl0b3JzICAgIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIHB1YmxpYyBGaWVsZENoZWNrYm94ID0gRmllbGRDaGVja2JveDtcbiAgICBwdWJsaWMgRmllbGRTbGlkZXIgPSBGaWVsZFNsaWRlcjtcbiAgICBwdWJsaWMgRmllbGRTZWxlY3QgPSBGaWVsZFNlbGVjdDtcbiAgICBwdWJsaWMgRmllbGRTd2l0Y2ggPSBGaWVsZFN3aXRjaDtcbiAgICBwdWJsaWMgVGV4dEZpZWxkID0gRWRpdGFibGVUZXh0RmllbGQ7XG4gICAgcHVibGljIFZhbmlsbGFUZXh0Qm94ID0gQ29udHJvbGxlZEVkaXRhYmxlVGV4dEZpZWxkO1xufVxuIiwgIi8qKlxuICogQG1vZHVsZSBhcGlcbiAqL1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCJleHByZXNzaW9uL2xpbmtcIjtcbmltcG9ydCB7IERhdGFjb3JlIH0gZnJvbSBcImluZGV4L2RhdGFjb3JlXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwiaW5kZXgvZGF0YXN0b3JlXCI7XG5pbXBvcnQgeyBQUklNSVRJVkVTLCBRVUVSWSB9IGZyb20gXCJleHByZXNzaW9uL3BhcnNlclwiO1xuaW1wb3J0IHsgSW5kZXhRdWVyeSB9IGZyb20gXCJpbmRleC90eXBlcy9pbmRleC1xdWVyeVwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgTWFya2Rvd25QYWdlIH0gZnJvbSBcImluZGV4L3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi9yZXN1bHRcIjtcbmltcG9ydCB7IEFwcCwgQ29tcG9uZW50LCBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LCBNYXJrZG93blJlbmRlckNoaWxkIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBEYXRhY29yZUpTUmVuZGVyZXIgfSBmcm9tIFwidWkvamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YWNvcmVMb2NhbEFwaSB9IGZyb20gXCIuL2xvY2FsLWFwaVwiO1xuaW1wb3J0IFBhcnNpbW1vbiBmcm9tIFwicGFyc2ltbW9uXCI7XG5pbXBvcnQgeyBDb2VyY2UgfSBmcm9tIFwiLi9jb2VyY2VcIjtcbmltcG9ydCB7IERhdGFBcnJheSB9IGZyb20gXCIuL2RhdGEtYXJyYXlcIjtcbmltcG9ydCAqIGFzIGx1eG9uIGZyb20gXCJsdXhvblwiO1xuaW1wb3J0ICogYXMgcHJlYWN0IGZyb20gXCJwcmVhY3RcIjtcblxuLyoqIEV4dGVyYWxseSB2aXNpYmxlIEFQSSBmb3IgZGF0YWNvcmUuXG4gKiBAZ3JvdXAgQ29yZVxuICovXG5leHBvcnQgY2xhc3MgRGF0YWNvcmVBcGkge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgY29yZTogRGF0YWNvcmUpIHt9XG5cbiAgICAvKiogR2V0IGFjZXNzIHRvIGx1eG9uIGZ1bmN0aW9ucy4gKi9cbiAgICBnZXQgbHV4b24oKTogdHlwZW9mIGx1eG9uIHtcbiAgICAgICAgcmV0dXJuIGx1eG9uO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYWNjZXNzIHRvIHByZWFjdCBmdW5jdGlvbnMuICovXG4gICAgZ2V0IHByZWFjdCgpOiB0eXBlb2YgcHJlYWN0IHtcbiAgICAgICAgcmV0dXJuIHByZWFjdDtcbiAgICB9XG5cbiAgICAvKiogQ2VudHJhbCBPYnNpZGlhbiBhcHAgb2JqZWN0LiAqL1xuICAgIGdldCBhcHAoKTogQXBwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29yZS5hcHA7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTG9jYWwgQVBJIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKiogQ29uc3RydWN0IGEgbG9jYWwgQVBJIGZvciB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aC4gKi9cbiAgICBwdWJsaWMgbG9jYWwocGF0aDogc3RyaW5nKTogRGF0YWNvcmVMb2NhbEFwaSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YWNvcmVMb2NhbEFwaSh0aGlzLCBwYXRoKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUXVlcnlpbmcgKyBGZXRjaGluZyAvL1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIC8qKiBMb2FkIGEgbWFya2Rvd24gZmlsZSBieSBmdWxsIHBhdGggb3IgbGluay4gKi9cbiAgICBwdWJsaWMgcGFnZShwYXRoOiBzdHJpbmcgfCBMaW5rKTogTWFya2Rvd25QYWdlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgcmVhbFBhdGggPSBwYXRoIGluc3RhbmNlb2YgTGluayA/IHBhdGgucGF0aCA6IHBhdGg7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29yZS5kYXRhc3RvcmUubG9hZChyZWFsUGF0aCkgYXMgTWFya2Rvd25QYWdlIHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBFeGVjdXRlIGEgdGV4dHVhbCBvciB0eXBlZCBpbmRleCBxdWVyeSwgcmV0dXJuaW5nIGFsbCByZXN1bHRzLiAqL1xuICAgIHB1YmxpYyBxdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSk6IEluZGV4YWJsZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5UXVlcnkocXVlcnkpLm9yRWxzZVRocm93KCk7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGUgYSB0ZXh0dWFsIG9yIHR5cGVkIGluZGV4IHF1ZXJ5LCByZXR1cm5pbmcgYWxsIHJlc3VsdHMuICovXG4gICAgcHVibGljIHRyeVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogUmVzdWx0PEluZGV4YWJsZVtdLCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5RnVsbFF1ZXJ5KHF1ZXJ5KS5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnJlc3VsdHMpO1xuICAgIH1cblxuICAgIC8qKiBFeGVjdXRlIGEgdGV4dHVhbCBvciB0eXBlZCBpbmRleCBxdWVyeSwgcmV0dXJuaW5nIHJlc3VsdHMgcGx1cyBwZXJmb3JtYW5jZSBtZXRhZGF0YS4gKi9cbiAgICBwdWJsaWMgZnVsbHF1ZXJ5KHF1ZXJ5OiBzdHJpbmcgfCBJbmRleFF1ZXJ5KTogU2VhcmNoUmVzdWx0PEluZGV4YWJsZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cnlGdWxsUXVlcnkocXVlcnkpLm9yRWxzZVRocm93KCk7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGUgYSB0ZXh0dWFsIG9yIHR5cGVkIGluZGV4IHF1ZXJ5LCByZXR1cm5pbmcgcmVzdWx0cyBwbHVzIHBlcmZvcm1hbmNlIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyB0cnlGdWxsUXVlcnkocXVlcnk6IHN0cmluZyB8IEluZGV4UXVlcnkpOiBSZXN1bHQ8U2VhcmNoUmVzdWx0PEluZGV4YWJsZT4sIHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IFFVRVJZLnF1ZXJ5LnRyeVBhcnNlKHF1ZXJ5KSA6IHF1ZXJ5O1xuICAgICAgICByZXR1cm4gdGhpcy5jb3JlLmRhdGFzdG9yZS5zZWFyY2gocGFyc2VkUXVlcnkpO1xuICAgIH1cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gR2VuZXJhbCB1dGlsaXRpZXMgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgLyoqIFV0aWxpdGllcyBmb3IgY29lcmNpbmcgdHlwZXMgaW50byBvbmUgc3BlY2lmaWMgdHlwZSBmb3IgZWFzaWVyIHByb2dyYW1taW5nLiAqL1xuICAgIHB1YmxpYyBjb2VyY2UgPSBDb2VyY2U7XG5cbiAgICAvKiogUmVzb2x2ZSBhIGxvY2FsIG9yIGFic29sdXRlIHBhdGggb3IgbGluayB0byBhbiBhYnNvbHV0ZSBwYXRoLiAqL1xuICAgIHB1YmxpYyByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcgfCBMaW5rLCBzb3VyY2VQYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmF3cGF0aCA9IHBhdGggaW5zdGFuY2VvZiBMaW5rID8gcGF0aC5wYXRoIDogcGF0aDtcbiAgICAgICAgaWYgKHJhd3BhdGguc3RhcnRzV2l0aChcIi9cIikpIHJldHVybiByYXdwYXRoLnN1YnN0cmluZygxKTtcblxuICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHRoaXMuY29yZS5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KHJhd3BhdGgsIHNvdXJjZVBhdGggPz8gXCJcIik7XG4gICAgICAgIGlmIChhYnNvbHV0ZSkgcmV0dXJuIGFic29sdXRlLnBhdGg7XG5cbiAgICAgICAgcmV0dXJuIHJhd3BhdGg7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSB0aGUgZ2l2ZW4gcXVlcnksIHJldHVybmluZyBhIG1vbmFkaWMgc3VjY2Vzcy9mYWlsdXJlIHJlc3VsdC4gKi9cbiAgICBwdWJsaWMgdHJ5UGFyc2VRdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSk6IFJlc3VsdDxJbmRleFF1ZXJ5LCBzdHJpbmc+IHtcbiAgICAgICAgaWYgKCEodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiKSkgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHF1ZXJ5KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBRVUVSWS5xdWVyeS5wYXJzZShxdWVyeSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgZWxzZSByZXR1cm4gUmVzdWx0LmZhaWx1cmUoUGFyc2ltbW9uLmZvcm1hdEVycm9yKHF1ZXJ5LCByZXN1bHQpKTtcbiAgICB9XG5cbiAgICAvKiogVHJ5IHRvIHBhcnNlIHRoZSBnaXZlbiBxdWVyeSwgdGhyb3dpbmcgYW4gZXJyb3IgaWYgaXQgaXMgaW52YWxpZC4gKi9cbiAgICBwdWJsaWMgcGFyc2VRdWVyeShxdWVyeTogc3RyaW5nIHwgSW5kZXhRdWVyeSk6IEluZGV4UXVlcnkge1xuICAgICAgICByZXR1cm4gdGhpcy50cnlQYXJzZVF1ZXJ5KHF1ZXJ5KS5vckVsc2VUaHJvdygoZSkgPT4gXCJGYWlsZWQgdG8gcGFyc2UgcXVlcnk6IFwiICsgZSk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIGZpbGUgbGluayBwb2ludGluZyB0byB0aGUgZ2l2ZW4gcGF0aC4gKi9cbiAgICBwdWJsaWMgZmlsZUxpbmsocGF0aDogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmZpbGUocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhIGxpbmsgdG8gYSBoZWFkZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gKi9cbiAgICBwdWJsaWMgaGVhZGVyTGluayhwYXRoOiBzdHJpbmcsIGhlYWRlcjogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiBMaW5rLmhlYWRlcihwYXRoLCBoZWFkZXIpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgYmxvY2sgd2l0aCB0aGUgZ2l2ZW4gcGF0aCBhbmQgYmxvY2sgSUQuICovXG4gICAgcHVibGljIGJsb2NrTGluayhwYXRoOiBzdHJpbmcsIGJsb2NrOiBzdHJpbmcpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuYmxvY2socGF0aCwgYmxvY2spO1xuICAgIH1cblxuICAgIC8qKiBUcnkgdG8gcGFyc2UgdGhlIGdpdmVuIGxpbmssIHRocm93aW5nIGFuIGVycm9yIGlmIGl0IGlzIGludmFsaWQuICovXG4gICAgcHVibGljIHBhcnNlTGluayhsaW5rdGV4dDogc3RyaW5nKTogTGluayB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyeVBhcnNlTGluayhsaW5rdGV4dCkub3JFbHNlVGhyb3coKGUpID0+IFwiRmFpbGVkIHRvIHBhcnNlIGxpbms6IFwiICsgZSk7XG4gICAgfVxuXG4gICAgLyoqIFRyeSB0byBwYXJzZSBhIGxpbmssIHJldHVybmluZyBhIG1vbmFkaWMgc3VjY2Vzcy9mYWlsdXJlIHJlc3VsdC4gKi9cbiAgICBwdWJsaWMgdHJ5UGFyc2VMaW5rKGxpbmt0ZXh0OiBzdHJpbmcpOiBSZXN1bHQ8TGluaywgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFBSSU1JVElWRVMuZW1iZWRMaW5rLnBhcnNlKGxpbmt0ZXh0KTtcbiAgICAgICAgaWYgKCFwYXJzZWQuc3RhdHVzKSByZXR1cm4gUmVzdWx0LmZhaWx1cmUoUGFyc2ltbW9uLmZvcm1hdEVycm9yKGxpbmt0ZXh0LCBwYXJzZWQpKTtcblxuICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocGFyc2VkLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgZGF0YSBhcnJheSBmcm9tIGEgcmVndWxhciBhcnJheS4gKi9cbiAgICBwdWJsaWMgYXJyYXk8VD4oaW5wdXQ6IFRbXSB8IERhdGFBcnJheTxUPik6IERhdGFBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiBEYXRhQXJyYXkud3JhcChpbnB1dCk7XG4gICAgfVxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gVmlzdWFsIEVsZW1lbnRzIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIGdpdmVuIERhdGFjb3JlSlMgc2NyaXB0LCByZW5kZXJpbmcgaXQgaW50byB0aGUgZ2l2ZW4gY29udGFpbmVyLiBUaGlzIGZ1bmN0aW9uXG4gICAgICogd2lsbCByZXR1cm4gcXVpY2tseTsgYWN0dWFsIHJlbmRlcmluZyBpcyBkb25lIGFzeW5jaHJvbm91c2x5IGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgICAqXG4gICAgICogUmV0dXJucyBhIG1hcmtkb3duIHJlbmRlciBjaGlsZCByZXByZXNlbnRpbmcgdGhlIHJlbmRlcmVkIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZUpzKFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQgfCBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmdcbiAgICApOiBNYXJrZG93blJlbmRlckNoaWxkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckphdmFzY3JpcHQoc291cmNlLCBjb250YWluZXIsIGNvbXBvbmVudCwgc291cmNlUGF0aCwgXCJqc1wiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaW1pbGFyIHRvIGBleGVjdXRlSnNgLCBidXQgZm9yIEpTWCBzY3JpcHRzLiBJZiB5b3UgYXJlIHVuc3VyZSBpZiB5b3VyIGlucHV0IHdpbGwgYmUgSlNcbiAgICAgKiBvciBKU1gsIHVzZSB0aGlzIG9uZSwgYXMgaXQgYWxzbyBzdXBwb3J0cyByZWd1bGFyIGphdmFzY3JpcHQgKGFsYmVpdCBhdCBhdCBhIG1pbGQgcGVyZm9ybWFuY2VcbiAgICAgKiBoaXQgdG8gcmVuZGVyaW5nKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZUpzeChcbiAgICAgICAgc291cmNlOiBzdHJpbmcsXG4gICAgICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50IHwgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCxcbiAgICAgICAgc291cmNlUGF0aDogc3RyaW5nXG4gICAgKTogTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJKYXZhc2NyaXB0KHNvdXJjZSwgY29udGFpbmVyLCBjb21wb25lbnQsIHNvdXJjZVBhdGgsIFwianN4XCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpbWlsYXIgdG8gYGV4ZWN1dGVKc2AsIGJ1dCBmb3IgVHlwZVNjcmlwdCBzY3JpcHRzLiBVc2UgdGhlIFRTWCB2YXJpYW50IGZvciBUU1ggc3VwcHJvdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhlY3V0ZVRzKFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQgfCBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICAgICAgICBzb3VyY2VQYXRoOiBzdHJpbmdcbiAgICApOiBNYXJrZG93blJlbmRlckNoaWxkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckphdmFzY3JpcHQoc291cmNlLCBjb250YWluZXIsIGNvbXBvbmVudCwgc291cmNlUGF0aCwgXCJ0c1wiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaW1pbGFyIHRvIGBleGVjdXRlVHNgLCBidXQgZm9yIFRTWCBzY3JpcHRzLiBJZiB5b3UgYXJlIHVuc3VyZSBpZiB5b3VyIGlucHV0IHdpbGwgYmUgVFNcbiAgICAgKiBvciBUU1gsIHVzZSB0aGlzIG9uZSwgYXMgaXQgYWxzbyBzdXBwb3J0cyByZWd1bGFyIGphdmFzY3JpcHQgKGFsYmVpdCBhdCBhdCBhIG1pbGQgcGVyZm9ybWFuY2VcbiAgICAgKiBoaXQgdG8gcmVuZGVyaW5nKS5cbiAgICAgKlxuICAgICAqIFRoaXMgZ2VuZXJhbGx5IHdpbGwgYWxzbyB3b3JrIGlmIHlvdSBhcmUgdW5zdXJlIGlmIHlvdXIgaW5wdXQgaXMgamF2YXNjcmlwdCBvciB0eXBlc2NyaXB0LFxuICAgICAqIHRob3VnaCBiZXdhcmUgdGhlcmUgYXJlIGEgZmV3IG5pY2hlIGNhc2VzIHdoZXJlIGphdmFzY3JpcHQgYW5kIHR5cGVzY3JpcHQgZGl2ZXJnZSBpbiBzeW50YXguXG4gICAgICovXG4gICAgcHVibGljIGV4ZWN1dGVUc3goXG4gICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCB8IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsXG4gICAgICAgIHNvdXJjZVBhdGg6IHN0cmluZ1xuICAgICk6IE1hcmtkb3duUmVuZGVyQ2hpbGQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVySmF2YXNjcmlwdChzb3VyY2UsIGNvbnRhaW5lciwgY29tcG9uZW50LCBzb3VyY2VQYXRoLCBcInRzeFwiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNoYXJlZCBsb2dpYyBmb3IgcmVuZGVyaW5nIGFueSBKUy9UUyBzY3JpcHQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVuZGVySmF2YXNjcmlwdChcbiAgICAgICAgc291cmNlOiBzdHJpbmcsXG4gICAgICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50IHwgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCxcbiAgICAgICAgc291cmNlUGF0aDogc3RyaW5nLFxuICAgICAgICBsYW5ndWFnZTogXCJqc1wiIHwgXCJ0c1wiIHwgXCJqc3hcIiB8IFwidHN4XCJcbiAgICApIHtcbiAgICAgICAgbGV0IGxvY2FsID0gbmV3IERhdGFjb3JlTG9jYWxBcGkodGhpcywgc291cmNlUGF0aCk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IERhdGFjb3JlSlNSZW5kZXJlcihsb2NhbCwgY29udGFpbmVyLCBzb3VyY2VQYXRoLCBzb3VyY2UsIGxhbmd1YWdlKTtcbiAgICAgICAgY29tcG9uZW50LmFkZENoaWxkKHJlbmRlcmVyKTtcblxuICAgICAgICByZXR1cm4gcmVuZGVyZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGdldFBhcmVudEZvbGRlciB9IGZyb20gXCJ1dGlscy9ub3JtYWxpemVyc1wiO1xuaW1wb3J0IHsgVEZpbGUsIFRGb2xkZXIsIFZhdWx0IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbi8qKiBTcGVjaWZpYyBpbmRleCBmb3IgdHJhY2tpbmcgb2JqZWN0cyBpbiByZWxhdGl2ZSBwYXRocy4gU3BlY2lmaWNhbGx5IHRyYWNrcyB0b3AtbGV2ZWwgcGFnZSBvYmplY3RzLiAqL1xuZXhwb3J0IGNsYXNzIEZvbGRlckluZGV4IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdmF1bHQ6IFZhdWx0KSB7fVxuXG4gICAgLyoqIEdldCB0aGUgbGlzdCBvZiBhbGwgZmlsZXMgdW5kZXIgdGhlIGdpdmVuIHBhdGguICovXG4gICAgcHVibGljIGdldChwcmVmaXg6IHN0cmluZywgZmlsdGVyPzogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbik6IFNldDxzdHJpbmc+IHtcbiAgICAgICAgbGV0IGZvbGRlciA9IHRoaXMudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHByZWZpeCB8fCBcIi9cIik7XG4gICAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gRm9sZGVySW5kZXguRU1QVFlfU0VUO1xuICAgICAgICB9IGVsc2UgaWYgKGZvbGRlciBpbnN0YW5jZW9mIFRGb2xkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KHRoaXMud2Fsayhmb2xkZXIsIGZpbHRlcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKHByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNldChwcmVmaXgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRm9sZGVySW5kZXguRU1QVFlfU0VUO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgbGlzdCBvZiBmaWxlcyBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGdpdmVuIHBhdGguICovXG4gICAgcHVibGljIGdldEV4YWN0KHByZWZpeDogc3RyaW5nLCBmaWx0ZXI/OiAocGF0aDogc3RyaW5nKSA9PiBib29sZWFuKTogU2V0PHN0cmluZz4ge1xuICAgICAgICBsZXQgZm9sZGVyID0gdGhpcy52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocHJlZml4IHx8IFwiL1wiKTtcbiAgICAgICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBGb2xkZXJJbmRleC5FTVBUWV9TRVQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmb2xkZXIuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoZmlsZS5wYXRoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5hZGQoZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKHByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNldChwcmVmaXgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRm9sZGVySW5kZXguRU1QVFlfU0VUO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHBhdGggZXhpc3RzIGluIHRoZSBpbmRleC4gKi9cbiAgICBwdWJsaWMgcGF0aEV4aXN0cyhwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGggfHwgXCIvXCIpICE9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGZvbGRlciBleGlzdHMgaW4gdGhlIGluZGV4LiAqL1xuICAgIHB1YmxpYyBmb2xkZXJFeGlzdHMoZm9sZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGZvbGRlciB8fCBcIi9cIikgaW5zdGFuY2VvZiBURm9sZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZSB0aGUgaW4tbWVtb3J5IHByZWZpeCBpbmRleCB0byBjb252ZXJ0IGEgcmVsYXRpdmUgcGF0aCB0byBhbiBhYnNvbHV0ZSBvbmUuXG4gICAgICovXG4gICAgcHVibGljIHJlc29sdmVSZWxhdGl2ZShwYXRoOiBzdHJpbmcsIG9yaWdpbj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghb3JpZ2luKSByZXR1cm4gcGF0aDtcbiAgICAgICAgZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDEpO1xuXG4gICAgICAgIGxldCByZWxhdGl2ZVBhdGggPSBnZXRQYXJlbnRGb2xkZXIob3JpZ2luKSArIFwiL1wiICsgcGF0aDtcbiAgICAgICAgaWYgKHRoaXMucGF0aEV4aXN0cyhyZWxhdGl2ZVBhdGgpKSByZXR1cm4gcmVsYXRpdmVQYXRoO1xuICAgICAgICBlbHNlIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgKndhbGsoZm9sZGVyOiBURm9sZGVyLCBmaWx0ZXI/OiAocGF0aDogc3RyaW5nKSA9PiBib29sZWFuKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZm9sZGVyLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCogdGhpcy53YWxrKGZpbGUsIGZpbHRlcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA/IGZpbHRlcihmaWxlLnBhdGgpIDogdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGZpbGUucGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBFbXB0eSBwbGFjZWhvbGRlciBzZXQuICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgRU1QVFlfU0VUOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbn1cbiIsICIvKiogVHJhY2tzIGFuIGludmVydGVkIGluZGV4IG9mIHZhbHVlIC0+IHNldFxcPGlkc1xcPi4gKi9cbmV4cG9ydCBjbGFzcyBJbnZlcnRlZEluZGV4PFY+IHtcbiAgICBwcml2YXRlIGludmVydGVkOiBNYXA8ViwgU2V0PHN0cmluZz4+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmludmVydGVkID0gbmV3IE1hcCgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgdGhlIGtleSB0byB0aGUgZ2l2ZW4gdmFsdWVzLiAqL1xuICAgIHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlczogSXRlcmFibGU8Vj4pIHtcbiAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW52ZXJ0ZWQuaGFzKHZhbHVlKSkgdGhpcy5pbnZlcnRlZC5zZXQodmFsdWUsIG5ldyBTZXQoKSk7XG4gICAgICAgICAgICB0aGlzLmludmVydGVkLmdldCh2YWx1ZSkhLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldCBhbGwga2V5cyB0aGF0IG1hcCB0byB0aGUgZ2l2ZW4gdmFsdWUuICovXG4gICAgcHVibGljIGdldCh2YWx1ZTogVik6IFNldDxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52ZXJ0ZWQuZ2V0KHZhbHVlKSA/PyBJbnZlcnRlZEluZGV4LkVNUFRZX1NFVDtcbiAgICB9XG5cbiAgICAvKiogRGVsZXRlIGEga2V5IGZyb20gdGhlIHNldCBvZiBhc3NvY2lhdGVkIHZhbHVlcy4gKi9cbiAgICBwdWJsaWMgZGVsZXRlKGtleTogc3RyaW5nLCB2YWx1ZXM6IEl0ZXJhYmxlPFY+KSB7XG4gICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5pbnZlcnRlZC5nZXQodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHNldCkge1xuICAgICAgICAgICAgICAgIHNldC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNldCAmJiBzZXQuc2l6ZSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZlcnRlZC5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmludmVydGVkLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgRU1QVFlfU0VUOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbn1cbiIsICJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsYXRRdWV1ZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pZHMgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgcHVzaChpZCwgdmFsdWUpIHtcbiAgICAgICAgbGV0IHBvcyA9IHRoaXMubGVuZ3RoKys7XG5cbiAgICAgICAgd2hpbGUgKHBvcyA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IChwb3MgLSAxKSA+PiAxO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLnZhbHVlc1twYXJlbnRdO1xuICAgICAgICAgICAgaWYgKHZhbHVlID49IHBhcmVudFZhbHVlKSBicmVhaztcbiAgICAgICAgICAgIHRoaXMuaWRzW3Bvc10gPSB0aGlzLmlkc1twYXJlbnRdO1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbcG9zXSA9IHBhcmVudFZhbHVlO1xuICAgICAgICAgICAgcG9zID0gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pZHNbcG9zXSA9IGlkO1xuICAgICAgICB0aGlzLnZhbHVlc1twb3NdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcG9wKCkge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5pZHNbMF07XG4gICAgICAgIHRoaXMubGVuZ3RoLS07XG5cbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmlkc1swXSA9IHRoaXMuaWRzW3RoaXMubGVuZ3RoXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZXNbMF0gPSB0aGlzLnZhbHVlc1t0aGlzLmxlbmd0aF07XG4gICAgICAgICAgICBjb25zdCBoYWxmTGVuZ3RoID0gdGhpcy5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgIGxldCBwb3MgPSAwO1xuXG4gICAgICAgICAgICB3aGlsZSAocG9zIDwgaGFsZkxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gKHBvcyA8PCAxKSArIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgMTtcbiAgICAgICAgICAgICAgICBsZXQgYmVzdEluZGV4ID0gdGhpcy5pZHNbbGVmdF07XG4gICAgICAgICAgICAgICAgbGV0IGJlc3RWYWx1ZSA9IHRoaXMudmFsdWVzW2xlZnRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0VmFsdWUgPSB0aGlzLnZhbHVlc1tyaWdodF07XG5cbiAgICAgICAgICAgICAgICBpZiAocmlnaHQgPCB0aGlzLmxlbmd0aCAmJiByaWdodFZhbHVlIDwgYmVzdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSByaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYmVzdEluZGV4ID0gdGhpcy5pZHNbcmlnaHRdO1xuICAgICAgICAgICAgICAgICAgICBiZXN0VmFsdWUgPSByaWdodFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYmVzdFZhbHVlID49IHZhbHVlKSBicmVhaztcblxuICAgICAgICAgICAgICAgIHRoaXMuaWRzW3Bvc10gPSBiZXN0SW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbcG9zXSA9IGJlc3RWYWx1ZTtcbiAgICAgICAgICAgICAgICBwb3MgPSBsZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlkc1twb3NdID0gaWQ7XG4gICAgICAgICAgICB0aGlzLnZhbHVlc1twb3NdID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9wO1xuICAgIH1cblxuICAgIHBlZWsoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWRzWzBdO1xuICAgIH1cblxuICAgIHBlZWtWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XG4gICAgfVxuXG4gICAgc2hyaW5rKCkge1xuICAgICAgICB0aGlzLmlkcy5sZW5ndGggPSB0aGlzLnZhbHVlcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgTGl0ZXJhbCwgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgQlRyZWV9IGZyb20gXCJzb3J0ZWQtYnRyZWVcIjtcblxuLyoqIEdlbmVyYWwgYWJzdHJhY3Rpb24gZm9yIGFsbCBmaWVsZCBpbmRpY2VzOyBzb21lIG1heSBiZSBvcHRpbWl6ZWQgZm9yIHNvbWUgdHlwZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkSW5kZXgge1xuICAgIC8vIFRPRE86IENoYW5nZSBhbGwoKSBhbmQgZXF1YWxzKCkgdG8gcmV0dXJuIEZpbHRlcjxzdHJpbmc+IGluc3RlYWQgZm9yIHBlcmZvcm1hbmNlIG9uIHNvbWUgaW5kZXggdHlwZXMuXG5cbiAgICAvKiogQWRkIGFuIChvYmplY3QsIHZhbHVlKSBwYWlyaW5nIHRvIHRoZSBjb2xsZWN0aW9uLiAqL1xuICAgIGFkZChpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQ7XG5cbiAgICAvKiogRGVsZXRlIGFuIChvYmplY3QsIHZhbHVlKSBwYWlyaW5nIGZyb20gdGhlIGNvbGxlY3Rpb24uICovXG4gICAgZGVsZXRlKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZDtcblxuICAgIC8qKiBSZXR1cm4gYSBzZXQgb2YgYWxsIHBhZ2VzIGluIHRoZSBjb2xsZWN0aW9uLiAqL1xuICAgIGFsbCgpOiBTZXQ8c3RyaW5nPjtcblxuICAgIC8qKiBGb3IgaW5kaWNlcyB3aGljaCBzdXBwb3J0IGZhc3QgdmFsdWUgbG9va3VwcywgcmV0dXJucyB0aGUgc2V0IG9mIGFsbCBkb2N1bWVudHMgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuICovXG4gICAgZXF1YWxzKHZhbHVlOiBMaXRlcmFsKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBGaWVsZCBpbmRleCBmb3IgYW55IGZpZWxkIHdoaWNoIGlzIGFsd2F5cyBvciBhbG1vc3QgYWx3YXlzIHByZXNlbnQgKCRyZXZpc2lvbiwgJHR5cGVzKS4gKi9cbmV4cG9ydCBjbGFzcyBFdmVyeXRoaW5nRmllbGRJbmRleCBpbXBsZW1lbnRzIEZpZWxkSW5kZXgge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgYWxsOiAoKSA9PiBTZXQ8c3RyaW5nPikge31cblxuICAgIHB1YmxpYyBhZGQoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHt9XG4gICAgcHVibGljIGRlbGV0ZShpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQge31cblxuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExpdGVyYWwpOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vKiogU3BlY2lhbGl6ZWQgZmllbGQgaW5kZXggZm9yIElEcyB3aGljaCBrbm93cyB0byBkaXJlY3RseSBqdXN0IHJldHVybiB0aGUgSUQuICovXG5leHBvcnQgY2xhc3MgSWRGaWVsZEluZGV4IGltcGxlbWVudHMgRmllbGRJbmRleCB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBhbGw6ICgpID0+IFNldDxzdHJpbmc+LCBwdWJsaWMgbG9va3VwOiAoaWQ6IHN0cmluZykgPT4gYm9vbGVhbikge31cblxuICAgIHB1YmxpYyBhZGQoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHt9XG4gICAgcHVibGljIGRlbGV0ZShpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQge31cblxuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExpdGVyYWwpOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghTGl0ZXJhbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLmxvb2t1cCh2YWx1ZSBhcyBzdHJpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNldChbdmFsdWUgYXMgc3RyaW5nXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiogRGVmYXVsdCBmaWVsZCBpbmRleCB3aGljaCB0cmFja3MgZmllbGQgbG9jYXRpb25zIHVzaW5nIGEgc2V0LiAqL1xuZXhwb3J0IGNsYXNzIFNldEZpZWxkSW5kZXggaW1wbGVtZW50cyBGaWVsZEluZGV4IHtcbiAgICAvKiogVGhlIElEIG9mIGV2ZXJ5IG9iamVjdCB0aGF0IHRoaXMgZmllbGQgaXMgcHJlc2VudCBvbi4gKi9cbiAgICBwcml2YXRlIHByZXNlbnQ6IFNldDxzdHJpbmc+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByZXNlbnQgPSBuZXcgU2V0KCk7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBhbiAob2JqZWN0LCB2YWx1ZSkgcGFpcmluZyB0byB0aGUgY29sbGVjdGlvbi4gKi9cbiAgICBwdWJsaWMgYWRkKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJlc2VudC5hZGQoaWQpO1xuICAgIH1cblxuICAgIC8qKiBEZWxldGUgYW4gKG9iamVjdCwgdmFsdWUpIHBhaXJpbmcgZnJvbSB0aGUgY29sbGVjdGlvbi4gKi9cbiAgICBwdWJsaWMgZGVsZXRlKGlkOiBzdHJpbmcsIHZhbHVlOiBMaXRlcmFsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJlc2VudC5kZWxldGUoaWQpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBzZXQgb2YgYWxsIHBhZ2VzIGluIHdoaWNoIHRoZSBmaWVsZCBleGlzdHMgYXQgYWxsIChldmVuIGlmIHVuZGVmaW5lZCkuICovXG4gICAgcHVibGljIGFsbCgpOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbnQ7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhbGwgcGFnZXMgd2l0aCBhIHZhbHVlIGV4YWN0bHkgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlLiAqL1xuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExpdGVyYWwpOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vKiogRmllbGQgaW5kZXggd2hpY2ggdHJhY2tzIGZpZWxkIGxvY2F0aW9ucyB1c2luZyBib3RoIGFuIG92ZXJhbGwgc2V0IGFuZCBhIEJUcmVlIG9mIHZhbHVlcy4gKi9cbmV4cG9ydCBjbGFzcyBCVHJlZUZpZWxkSW5kZXggaW1wbGVtZW50cyBGaWVsZEluZGV4IHtcbiAgICAvKiogVGhlIElEIG9mIGV2ZXJ5IG9iamVjdCB0aGF0IHRoaXMgZmllbGQgaXMgcHJlc2VudCBvbi4gKi9cbiAgICBwcml2YXRlIHByZXNlbnQ6IFNldDxzdHJpbmc+O1xuICAgIC8qKiBNYXBzICh2YWx1ZSwgc2V0IG9mIHBhZ2VzIGNvbnRhaW5pbmcgdGhhdCB2YWx1ZSkuICovXG4gICAgcHJpdmF0ZSB2YWx1ZXM6IEJUcmVlPExpdGVyYWwsIFNldDxzdHJpbmc+PjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcmVzZW50ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBCVHJlZShbXSwgKGEsIGIpID0+IExpdGVyYWxzLmNvbXBhcmUoYSwgYikpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgYW4gKG9iamVjdCwgdmFsdWUpIHBhaXJpbmcgdG8gdGhlIGNvbGxlY3Rpb24uICovXG4gICAgcHVibGljIGFkZChpZDogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXNlbnQuYWRkKGlkKTtcblxuICAgICAgICB0aGlzLnZhbHVlcy5zZXRJZk5vdFByZXNlbnQodmFsdWUsIG5ldyBTZXQoKSk7XG4gICAgICAgIHRoaXMudmFsdWVzLmdldCh2YWx1ZSkhLmFkZChpZCk7XG4gICAgfVxuXG4gICAgLyoqIERlbGV0ZSBhbiAob2JqZWN0LCB2YWx1ZSkgcGFpcmluZyBmcm9tIHRoZSBjb2xsZWN0aW9uLiAqL1xuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZywgdmFsdWU6IExpdGVyYWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmVzZW50LmRlbGV0ZShpZCk7XG5cbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy52YWx1ZXMuZ2V0KHZhbHVlKTtcbiAgICAgICAgc2V0Py5kZWxldGUoaWQpO1xuXG4gICAgICAgIGlmIChzZXQgPT0gbnVsbCB8fCBzZXQuc2l6ZSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiBhIHNldCBvZiBhbGwgcGFnZXMgaW4gd2hpY2ggdGhlIGZpZWxkIGV4aXN0cyBhdCBhbGwgKGV2ZW4gaWYgdW5kZWZpbmVkKS4gKi9cbiAgICBwdWJsaWMgYWxsKCk6IFNldDxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlc2VudDtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJuIGFsbCBwYWdlcyB3aXRoIGEgdmFsdWUgZXhhY3RseSBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUuICovXG4gICAgcHVibGljIGVxdWFscyh2YWx1ZTogTGl0ZXJhbCk6IFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmdldCh2YWx1ZSwgQlRyZWVGaWVsZEluZGV4LkVNUFRZX1NFVCk7XG4gICAgfVxuXG4gICAgLyoqIFBsYWNlaG9sZGVyIGVtcHR5IHNldC4gKi9cbiAgICBwcml2YXRlIHN0YXRpYyBFTVBUWV9TRVQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbn1cbiIsICIvKiogUHJvdmlkZXMgYSBnbG9iYWwgZGlzcGF0Y2ggdGFibGUgZm9yIGV2YWx1YXRpbmcgYmluYXJ5IG9wZXJhdG9ycywgaW5jbHVkaW5nIGNvbXBhcmlzb24uICovXG5pbXBvcnQgeyBMaXRlcmFsUmVwciwgTGl0ZXJhbFR5cGUsIExpdGVyYWwsIExpdGVyYWxzLCBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgbm9ybWFsaXplRHVyYXRpb24gfSBmcm9tIFwidXRpbHMvbm9ybWFsaXplcnNcIjtcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCJhcGkvcmVzdWx0XCI7XG5pbXBvcnQgeyBCaW5hcnlPcCwgRXhwcmVzc2lvbnMgfSBmcm9tIFwiZXhwcmVzc2lvbi9leHByZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IEV2YWx1YXRvciB9IGZyb20gXCJleHByZXNzaW9uL2V2YWx1YXRvclwiO1xuaW1wb3J0IHsgRGF0ZVRpbWUsIER1cmF0aW9uIH0gZnJvbSBcImx1eG9uXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuaW1wb3J0IHsgRmllbGRiZWFyaW5ncyB9IGZyb20gXCIuL2ZpZWxkXCI7XG5cbi8qKiBBIGxpdGVyYWwgdHlwZSBvciBhIGNhdGNoLWFsbCAnKicuICovXG5leHBvcnQgdHlwZSBMaXRlcmFsVHlwZU9yQWxsID0gTGl0ZXJhbFR5cGUgfCBcIipcIjtcblxuLyoqIE1hcHMgYSBsaXRlcmFsIHR5cGUgb3IgdGhlIGNhdGNoLWFsbCAnKicuICovXG5leHBvcnQgdHlwZSBMaXRlcmFsUmVwckFsbDxUIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4gPSBUIGV4dGVuZHMgXCIqXCJcbiAgICA/IExpdGVyYWxcbiAgICA6IFQgZXh0ZW5kcyBMaXRlcmFsVHlwZVxuICAgID8gTGl0ZXJhbFJlcHI8VD5cbiAgICA6IGFueTtcblxuLyoqIEFuIGltcGxlbWVudGF0aW9uIGZvciBhIGJpbmFyeSBvcGVyYXRvci4gKi9cbmV4cG9ydCB0eXBlIEJpbmFyeU9wSW1wbDxBIGV4dGVuZHMgTGl0ZXJhbCwgQiBleHRlbmRzIExpdGVyYWw+ID0gKGZpcnN0OiBBLCBzZWNvbmQ6IEIsIGN0eDogRXZhbHVhdG9yKSA9PiBMaXRlcmFsO1xuLyoqIEJpbmFyeSBvcGVyYXRvciB3aGljaCBjYW4gZmFpbCBhbmQgcHJvZHVjZSBhbiBlcnJvci4gKi9cbmV4cG9ydCB0eXBlIEJpbmFyeU9wUmVzdWx0SW1wbDxBIGV4dGVuZHMgTGl0ZXJhbCwgQiBleHRlbmRzIExpdGVyYWw+ID0gKFxuICAgIGZpcnN0OiBBLFxuICAgIHNlY29uZDogQixcbiAgICBjdHg6IEV2YWx1YXRvclxuKSA9PiBSZXN1bHQ8TGl0ZXJhbCwgc3RyaW5nPjtcbi8qKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIGNvbXBhcmF0b3IgKHJldHVybmluZyBhIG51bWJlcikgd2hpY2ggdGhlbiBhdXRvbWF0aWNhbGx5IGRlZmluZXMgYWxsIG9mIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy4gKi9cbmV4cG9ydCB0eXBlIENvbXBhcmVJbXBsPFQgZXh0ZW5kcyBMaXRlcmFsPiA9IChmaXJzdDogVCwgc2Vjb25kOiBULCBjdHg6IEV2YWx1YXRvcikgPT4gbnVtYmVyO1xuXG4vKiogUHJvdmlkZXMgaW1wbGVtZW50YXRpb25zIGZvciBiaW5hcnkgb3BlcmF0b3JzIG9uIHR3byB0eXBlcyB1c2luZyBhIHJlZ2lzdHJ5LiAqL1xuZXhwb3J0IGNsYXNzIEJpbmFyeU9wSGFuZGxlciB7XG4gICAgcHJpdmF0ZSBtYXA6IE1hcDxzdHJpbmcsIEJpbmFyeU9wUmVzdWx0SW1wbDxhbnksIGFueT4+O1xuICAgIHByaXZhdGUgaGFuZGxlRGVmYXVsdE51bGxzOiBib29sZWFuO1xuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmluYXJ5T3BIYW5kbGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVEZWZhdWx0TnVsbHMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXI8VCBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGwsIFUgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsPihcbiAgICAgICAgbGVmdDogVCxcbiAgICAgICAgb3A6IEJpbmFyeU9wLFxuICAgICAgICByaWdodDogVSxcbiAgICAgICAgZnVuYzogQmluYXJ5T3BJbXBsPExpdGVyYWxSZXByQWxsPFQ+LCBMaXRlcmFsUmVwckFsbDxVPj5cbiAgICApOiBCaW5hcnlPcEhhbmRsZXIge1xuICAgICAgICB0aGlzLm1hcC5zZXQoQmluYXJ5T3BIYW5kbGVyLnJlcHIob3AsIGxlZnQsIHJpZ2h0KSwgKGEsIGIsIGMpID0+IFJlc3VsdC5zdWNjZXNzKGZ1bmMoYSwgYiwgYykpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUmVzdWx0PFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBVIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGxlZnQ6IFQsXG4gICAgICAgIG9wOiBCaW5hcnlPcCxcbiAgICAgICAgcmlnaHQ6IFUsXG4gICAgICAgIGZ1bmM6IEJpbmFyeU9wUmVzdWx0SW1wbDxMaXRlcmFsUmVwckFsbDxUPiwgTGl0ZXJhbFJlcHJBbGw8VT4+XG4gICAgKTogQmluYXJ5T3BIYW5kbGVyIHtcbiAgICAgICAgdGhpcy5tYXAuc2V0KEJpbmFyeU9wSGFuZGxlci5yZXByKG9wLCBsZWZ0LCByaWdodCksIGZ1bmMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJDb21tPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBVIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGxlZnQ6IFQsXG4gICAgICAgIG9wOiBCaW5hcnlPcCxcbiAgICAgICAgcmlnaHQ6IFUsXG4gICAgICAgIGZ1bmM6IEJpbmFyeU9wSW1wbDxMaXRlcmFsUmVwckFsbDxUPiwgTGl0ZXJhbFJlcHJBbGw8VT4+XG4gICAgKTogQmluYXJ5T3BIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXIobGVmdCwgb3AsIHJpZ2h0LCBmdW5jKS5yZWdpc3RlcihyaWdodCwgb3AsIGxlZnQsIChhLCBiLCBjdHgpID0+IGZ1bmMoYiwgYSwgY3R4KSk7XG4gICAgfVxuXG4gICAgLyoqIElmIGVuYWJsZWQsIGFsbCBudWxsIChvcCkgbnVsbCBvcGVyYXRpb25zIHByb2R1Y2UgbnVsbC4gKi9cbiAgICBwdWJsaWMgd2l0aERlZmF1bHROdWxsSGFuZGxpbmcoKTogQmluYXJ5T3BIYW5kbGVyIHtcbiAgICAgICAgdGhpcy5oYW5kbGVEZWZhdWx0TnVsbHMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogSW1wbGVtZW50IGEgY29tcGFyaXNvbiBmdW5jdGlvbi4gKi9cbiAgICBwdWJsaWMgY29tcGFyZTxUIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4odHlwZTogVCwgY29tcGFyZTogQ29tcGFyZUltcGw8TGl0ZXJhbFJlcHJBbGw8VD4+KTogQmluYXJ5T3BIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXIodHlwZSwgXCI8XCIsIHR5cGUsIChhLCBiLCBjdHgpID0+IGNvbXBhcmUoYSwgYiwgY3R4KSA8IDApXG4gICAgICAgICAgICAucmVnaXN0ZXIodHlwZSwgXCI8PVwiLCB0eXBlLCAoYSwgYiwgY3R4KSA9PiBjb21wYXJlKGEsIGIsIGN0eCkgPD0gMClcbiAgICAgICAgICAgIC5yZWdpc3Rlcih0eXBlLCBcIj5cIiwgdHlwZSwgKGEsIGIsIGN0eCkgPT4gY29tcGFyZShhLCBiLCBjdHgpID4gMClcbiAgICAgICAgICAgIC5yZWdpc3Rlcih0eXBlLCBcIj49XCIsIHR5cGUsIChhLCBiLCBjdHgpID0+IGNvbXBhcmUoYSwgYiwgY3R4KSA+PSAwKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKHR5cGUsIFwiPVwiLCB0eXBlLCAoYSwgYiwgY3R4KSA9PiBjb21wYXJlKGEsIGIsIGN0eCkgPT0gMClcbiAgICAgICAgICAgIC5yZWdpc3Rlcih0eXBlLCBcIiE9XCIsIHR5cGUsIChhLCBiLCBjdHgpID0+IGNvbXBhcmUoYSwgYiwgY3R4KSAhPSAwKTtcbiAgICB9XG5cbiAgICAvKiogQXR0ZW1wdCB0byBldmFsdWF0ZSB0aGUgZ2l2ZW4gYmluYXJ5IG9wZXJhdG9yIG9uIHRoZSB0d28gbGl0ZXJhbCBmaWVsZHMuICovXG4gICAgcHVibGljIGV2YWx1YXRlKG9wOiBCaW5hcnlPcCwgbGVmdDogTGl0ZXJhbCwgcmlnaHQ6IExpdGVyYWwsIGN0eDogRXZhbHVhdG9yKTogUmVzdWx0PExpdGVyYWwsIHN0cmluZz4ge1xuICAgICAgICBsZXQgbGVmdFR5cGUgPSBMaXRlcmFscy50eXBlT2YobGVmdCk7XG4gICAgICAgIGxldCByaWdodFR5cGUgPSBMaXRlcmFscy50eXBlT2YocmlnaHQpO1xuICAgICAgICBpZiAoIWxlZnRUeXBlKSByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYFVucmVjb2duaXplZCB2YWx1ZSAnJHtsZWZ0fSdgKTtcbiAgICAgICAgZWxzZSBpZiAoIXJpZ2h0VHlwZSkgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBVbnJlY29nbml6ZWQgdmFsdWUgJyR7cmlnaHR9J2ApO1xuXG4gICAgICAgIC8vIFF1aWNrIGNhc2U6IGhhbmRsZSBudWxsIChvcCkgbnVsbCBieSBkZWZhdWx0IGlmIGVuYWJsZWQuXG4gICAgICAgIGlmICh0aGlzLmhhbmRsZURlZmF1bHROdWxscyAmJiBsZWZ0VHlwZSA9PT0gXCJudWxsXCIgJiYgcmlnaHRUeXBlID09PSBcIm51bGxcIikgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKG51bGwpO1xuXG4gICAgICAgIGxldCBoYW5kbGVyID0gdGhpcy5tYXAuZ2V0KEJpbmFyeU9wSGFuZGxlci5yZXByKG9wLCBsZWZ0VHlwZSwgcmlnaHRUeXBlKSk7XG4gICAgICAgIGlmIChoYW5kbGVyKSByZXR1cm4gaGFuZGxlcihsZWZ0LCByaWdodCwgY3R4KTtcblxuICAgICAgICAvLyBSaWdodC0nKicgZmFsbGJhY2s6XG4gICAgICAgIGxldCBoYW5kbGVyMiA9IHRoaXMubWFwLmdldChCaW5hcnlPcEhhbmRsZXIucmVwcihvcCwgbGVmdFR5cGUsIFwiKlwiKSk7XG4gICAgICAgIGlmIChoYW5kbGVyMikgcmV0dXJuIGhhbmRsZXIyKGxlZnQsIHJpZ2h0LCBjdHgpO1xuXG4gICAgICAgIC8vIExlZnQtJyonIGZhbGxiYWNrOlxuICAgICAgICBsZXQgaGFuZGxlcjMgPSB0aGlzLm1hcC5nZXQoQmluYXJ5T3BIYW5kbGVyLnJlcHIob3AsIFwiKlwiLCByaWdodFR5cGUpKTtcbiAgICAgICAgaWYgKGhhbmRsZXIzKSByZXR1cm4gaGFuZGxlcjMobGVmdCwgcmlnaHQsIGN0eCk7XG5cbiAgICAgICAgLy8gRG91YmxlICcqJyBmYWxsYmFjay5cbiAgICAgICAgbGV0IGhhbmRsZXI0ID0gdGhpcy5tYXAuZ2V0KEJpbmFyeU9wSGFuZGxlci5yZXByKG9wLCBcIipcIiwgXCIqXCIpKTtcbiAgICAgICAgaWYgKGhhbmRsZXI0KSByZXR1cm4gaGFuZGxlcjQobGVmdCwgcmlnaHQsIGN0eCk7XG5cbiAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGBObyBpbXBsZW1lbnRhdGlvbiBmb3VuZCBmb3IgJyR7bGVmdFR5cGV9ICR7b3B9ICR7cmlnaHRUeXBlfSdgKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiB0cmlwbGV0IGZvciB1bmlxdWUgbG9va3VwIGluIHRoZSBtYXAuICovXG4gICAgcHVibGljIHN0YXRpYyByZXByKG9wOiBCaW5hcnlPcCwgbGVmdDogTGl0ZXJhbFR5cGVPckFsbCwgcmlnaHQ6IExpdGVyYWxUeXBlT3JBbGwpIHtcbiAgICAgICAgcmV0dXJuIGAke2xlZnR9LCR7b3B9LCR7cmlnaHR9YDtcbiAgICB9XG59XG5cbi8qKiBDb25maWd1cmUgYW5kIGNyZWF0ZSBhIGJpbmFyeSBPUCBoYW5kbGVyIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmluYXJ5T3BzKGxpbmtOb3JtYWxpemVyOiAoeDogc3RyaW5nKSA9PiBzdHJpbmcpOiBCaW5hcnlPcEhhbmRsZXIge1xuICAgIHJldHVybiAoXG4gICAgICAgIEJpbmFyeU9wSGFuZGxlci5jcmVhdGUoKVxuICAgICAgICAgICAgLmNvbXBhcmUoXCIqXCIsIChhLCBiKSA9PiBMaXRlcmFscy5jb21wYXJlKGEsIGIsIGxpbmtOb3JtYWxpemVyKSlcbiAgICAgICAgICAgIC8vIEdsb2JhbCBib29sZWFuIG9wZXJhdGlvbnMuXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCIqXCIsIFwiJlwiLCBcIipcIiwgKGEsIGIpID0+IExpdGVyYWxzLmlzVHJ1dGh5KGEpICYmIExpdGVyYWxzLmlzVHJ1dGh5KGIpKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiKlwiLCBcInxcIiwgXCIqXCIsIChhLCBiKSA9PiBMaXRlcmFscy5pc1RydXRoeShhKSB8fCBMaXRlcmFscy5pc1RydXRoeShiKSlcbiAgICAgICAgICAgIC8vIE51bWJlciBpbXBsZW1lbnRhdGlvbnMuXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJudW1iZXJcIiwgXCIrXCIsIFwibnVtYmVyXCIsIChhLCBiKSA9PiBhICsgYilcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIm51bWJlclwiLCBcIi1cIiwgXCJudW1iZXJcIiwgKGEsIGIpID0+IGEgLSBiKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwibnVtYmVyXCIsIFwiKlwiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gYSAqIGIpXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJudW1iZXJcIiwgXCIvXCIsIFwibnVtYmVyXCIsIChhLCBiKSA9PiBhIC8gYilcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIm51bWJlclwiLCBcIiVcIiwgXCJudW1iZXJcIiwgKGEsIGIpID0+IGEgJSBiKVxuICAgICAgICAgICAgLy8gU3RyaW5nIGltcGxlbWVudGF0aW9ucy5cbiAgICAgICAgICAgIC5yZWdpc3RlcihcInN0cmluZ1wiLCBcIitcIiwgXCIqXCIsIChhLCBiLCBjdHgpID0+IGEgKyBMaXRlcmFscy50b1N0cmluZyhiLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIipcIiwgXCIrXCIsIFwic3RyaW5nXCIsIChhLCBiLCBjdHgpID0+IExpdGVyYWxzLnRvU3RyaW5nKGEsIHN0cmluZ1NldHRpbmdzKGN0eC5zZXR0aW5ncykpICsgYilcbiAgICAgICAgICAgIC5yZWdpc3RlckNvbW0oXCJzdHJpbmdcIiwgXCIqXCIsIFwibnVtYmVyXCIsIChhLCBiKSA9PiAoYiA8IDAgPyBcIlwiIDogYS5yZXBlYXQoYikpKVxuICAgICAgICAgICAgLy8gRGF0ZSBPcGVyYXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiZGF0ZVwiLCBcIi1cIiwgXCJkYXRlXCIsIChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUR1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBhLmRpZmYoYiwgW1wieWVhcnNcIiwgXCJtb250aHNcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiXSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcImRhdGVcIiwgXCItXCIsIFwiZHVyYXRpb25cIiwgKGEsIGIpID0+IGEubWludXMoYikpXG4gICAgICAgICAgICAucmVnaXN0ZXJDb21tKFwiZGF0ZVwiLCBcIitcIiwgXCJkdXJhdGlvblwiLCAoYSwgYikgPT4gYS5wbHVzKGIpKVxuICAgICAgICAgICAgLy8gRHVyYXRpb24gT3BlcmF0aW9ucy5cbiAgICAgICAgICAgIC5yZWdpc3RlcihcImR1cmF0aW9uXCIsIFwiK1wiLCBcImR1cmF0aW9uXCIsIChhLCBiKSA9PiBub3JtYWxpemVEdXJhdGlvbihhLnBsdXMoYikpKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiZHVyYXRpb25cIiwgXCItXCIsIFwiZHVyYXRpb25cIiwgKGEsIGIpID0+IG5vcm1hbGl6ZUR1cmF0aW9uKGEubWludXMoYikpKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiZHVyYXRpb25cIiwgXCIvXCIsIFwibnVtYmVyXCIsIChhLCBiKSA9PiBub3JtYWxpemVEdXJhdGlvbihhLm1hcFVuaXRzKCh4KSA9PiB4IC8gYikpKVxuICAgICAgICAgICAgLnJlZ2lzdGVyQ29tbShcImR1cmF0aW9uXCIsIFwiKlwiLCBcIm51bWJlclwiLCAoYSwgYikgPT4gbm9ybWFsaXplRHVyYXRpb24oYS5tYXBVbml0cygoeCkgPT4geCAqIGIpKSlcbiAgICAgICAgICAgIC8vIEFycmF5IG9wZXJhdGlvbnMuXG4gICAgICAgICAgICAucmVnaXN0ZXIoXCJhcnJheVwiLCBcIitcIiwgXCJhcnJheVwiLCAoYSwgYikgPT4gKFtdIGFzIExpdGVyYWxbXSkuY29uY2F0KGEpLmNvbmNhdChiKSlcbiAgICAgICAgICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwib2JqZWN0XCIsIFwiK1wiLCBcIm9iamVjdFwiLCAoYSwgYikgPT4gT2JqZWN0LmFzc2lnbih7fSwgYSwgYikpXG4gICAgICAgICAgICAvLyBJbmRleCBvcGVyYXRpb25zLlxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiYXJyYXlcIiwgXCJpbmRleFwiLCBcIm51bWJlclwiLCAoYXJyLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gYXJyLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycltpZHhdO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZWdpc3RlclJlc3VsdChcImFycmF5XCIsIFwiaW5kZXhcIiwgXCJzdHJpbmdcIiwgKGFyciwga2V5LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKFtdKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBjb250ZXh0LmV2YWx1YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuaW5kZXgoRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtZW50KSwgRXhwcmVzc2lvbnMubGl0ZXJhbChrZXkpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkLnN1Y2Nlc3NmdWwpIHJldHVybiBSZXN1bHQuZmFpbHVyZShyZXNvbHZlZC5lcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocmVzb2x2ZWQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIm9iamVjdFwiLCBcImluZGV4XCIsIFwic3RyaW5nXCIsIChvYmosIGtleSkgPT4gRmllbGRiZWFyaW5ncy5nZXQob2JqLCBrZXkpID8/IG51bGwpXG4gICAgICAgICAgICAucmVnaXN0ZXJSZXN1bHQoXCJsaW5rXCIsIFwiaW5kZXhcIiwgXCJzdHJpbmdcIiwgaW5kZXhMaW5rKVxuICAgICAgICAgICAgLnJlZ2lzdGVyUmVzdWx0KFwibGlua1wiLCBcImluZGV4XCIsIFwibnVtYmVyXCIsIGluZGV4TGluaylcbiAgICAgICAgICAgIC5yZWdpc3RlcihcIm9iamVjdFwiLCBcImluZGV4XCIsIFwibnVtYmVyXCIsIChvYmosIGtleSkgPT4gb2JqW2tleV0gPz8gbnVsbClcbiAgICAgICAgICAgIC5yZWdpc3RlcihcInN0cmluZ1wiLCBcImluZGV4XCIsIFwibnVtYmVyXCIsIChzdHIsIGlkeCkgPT4gKGlkeCA8IDAgfHwgaWR4ID49IHN0ci5sZW5ndGggPyBudWxsIDogc3RyW2lkeF0pKVxuICAgICAgICAgICAgLnJlZ2lzdGVyKFwiZGF0ZVwiLCBcImluZGV4XCIsIFwic3RyaW5nXCIsIGluZGV4RGF0ZSlcbiAgICAgICAgICAgIC5yZWdpc3RlcihcImR1cmF0aW9uXCIsIFwiaW5kZXhcIiwgXCJzdHJpbmdcIiwgaW5kZXhEdXJhdGlvbilcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdE51bGxIYW5kbGluZygpXG4gICAgKTtcbn1cblxuLyoqIENvbnZlcnQgaGlnaCBsZXZlbCBzZXR0aW5ncyB0byBzZXR0aW5ncyB1c2VkIGZvciBzdHJpbmcgcmVuZGVyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1NldHRpbmdzKHNldHRpbmdzOiBTZXR0aW5ncyk6IExpdGVyYWxzLlRvU3RyaW5nU2V0dGluZ3Mge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGVGb3JtYXQ6IHNldHRpbmdzLmRlZmF1bHREYXRlRm9ybWF0LFxuICAgICAgICBkYXRlVGltZUZvcm1hdDogc2V0dGluZ3MuZGVmYXVsdERhdGVUaW1lRm9ybWF0LFxuICAgICAgICBudWxsUmVwcmVzZW50YXRpb246IHNldHRpbmdzLnJlbmRlck51bGxBcyxcbiAgICB9O1xufVxuXG4vKiogQWxsb3dzIHlvdSB0byBpbmRleCBpbnRvIGxpbmtzIHRvIGdldCBtZXRhZGF0YS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleExpbmsobGluazogTGluaywga2V5OiBzdHJpbmcgfCBudW1iZXIsIGNvbnRleHQ6IEV2YWx1YXRvcik6IFJlc3VsdDxMaXRlcmFsLCBzdHJpbmc+IHtcbiAgICBjb25zdCBvYmplY3QgPSBjb250ZXh0LmxpbmtIYW5kbGVyLnJlc29sdmUobGluayk7XG4gICAgaWYgKCFvYmplY3QpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhudWxsKTtcblxuICAgIHJldHVybiBjb250ZXh0LmV2YWx1YXRlKEV4cHJlc3Npb25zLmluZGV4KEV4cHJlc3Npb25zLmxpdGVyYWwob2JqZWN0KSwgRXhwcmVzc2lvbnMubGl0ZXJhbChrZXkpKSk7XG59XG5cbi8qKiBJbmRleCBpbnRvIGEgZGF0ZSwgcHJvZHVjaW5nIHZhcmlvdXMgdXNlZnVsIGZpZWxkcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleERhdGUoZGF0ZTogRGF0ZVRpbWUsIGtleTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnllYXI7XG4gICAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgICAgICAgcmV0dXJuIGRhdGUubW9udGg7XG4gICAgICAgIGNhc2UgXCJkYXlcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLmRheTtcbiAgICAgICAgY2FzZSBcImhvdXJcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLmhvdXI7XG4gICAgICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLm1pbnV0ZTtcbiAgICAgICAgY2FzZSBcInNlY29uZFwiOlxuICAgICAgICAgICAgcmV0dXJuIGRhdGUuc2Vjb25kO1xuICAgICAgICBjYXNlIFwibWlsbGlzZWNvbmRcIjpcbiAgICAgICAgICAgIHJldHVybiBkYXRlLm1pbGxpc2Vjb25kO1xuICAgICAgICBjYXNlIFwid2Vla1wiOlxuICAgICAgICAgICAgcmV0dXJuIGRhdGUud2Vla051bWJlcjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuLyoqIEluZGV4IGludG8gYSBkdXJhdGlvbiwgcHJvZHVjaW5nIHZhcmlvdXMgdXNlZnVsIGZpZWxkcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleER1cmF0aW9uKGR1cjogRHVyYXRpb24sIGtleTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcInllYXJzXCI6XG4gICAgICAgICAgICByZXR1cm4gZHVyLnllYXJzO1xuICAgICAgICBjYXNlIFwibW9udGhzXCI6XG4gICAgICAgICAgICByZXR1cm4gZHVyLm1vbnRocztcbiAgICAgICAgY2FzZSBcImRheXNcIjpcbiAgICAgICAgICAgIHJldHVybiBkdXIuZGF5cztcbiAgICAgICAgY2FzZSBcImhvdXJzXCI6XG4gICAgICAgICAgICByZXR1cm4gZHVyLmhvdXJzO1xuICAgICAgICBjYXNlIFwibWludXRlc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci5taW51dGVzO1xuICAgICAgICBjYXNlIFwic2Vjb25kc1wiOlxuICAgICAgICAgICAgcmV0dXJuIGR1ci5zZWNvbmRzO1xuICAgICAgICBjYXNlIFwibWlsbGlzZWNvbmRzXCI6XG4gICAgICAgICAgICByZXR1cm4gZHVyLm1pbGxpc2Vjb25kcztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICIvKiogRGVmYXVsdCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBleHByZXNzaW9uIGV2YWx1YXRvci4gKi9cblxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IExpdGVyYWxUeXBlLCBMaW5rLCBMaXRlcmFsLCBMaXRlcmFscyB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcbmltcG9ydCB7IGVzY2FwZVJlZ2V4LCBjdXJyZW50TG9jYWxlIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5pbXBvcnQgeyBMaXRlcmFsUmVwckFsbCwgTGl0ZXJhbFR5cGVPckFsbCwgc3RyaW5nU2V0dGluZ3MgfSBmcm9tIFwiZXhwcmVzc2lvbi9iaW5hcnlvcFwiO1xuaW1wb3J0IHsgRXZhbHVhdG9yIH0gZnJvbSBcImV4cHJlc3Npb24vZXZhbHVhdG9yXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9ucyB9IGZyb20gXCJleHByZXNzaW9uL2V4cHJlc3Npb25cIjtcbmltcG9ydCB7IFBSSU1JVElWRVMgfSBmcm9tIFwiZXhwcmVzc2lvbi9wYXJzZXJcIjtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIHdoaWNoIHRha2VzIGluIGEgZnVuY3Rpb24gY29udGV4dCBhbmQgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLiBUaHJvd3MgYW4gZXJyb3IgaWYgYW5cbiAqIGludmFsaWQgbnVtYmVyL3R5cGUgb2YgYXJndW1lbnRzIGFyZSBwYXNzZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uSW1wbCA9IChjb250ZXh0OiBFdmFsdWF0b3IsIC4uLnJlc3Q6IExpdGVyYWxbXSkgPT4gTGl0ZXJhbDtcbi8qKiBBIFwiYm91bmRcIiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiB3aGljaCBoYXMgYWxyZWFkeSBoYWQgYSBmdW5jdGlvbiBjb250ZXh0IHBhc3NlZCB0byBpdC4gKi9cbmV4cG9ydCB0eXBlIEJvdW5kRnVuY3Rpb25JbXBsID0gKC4uLmFyZ3M6IExpdGVyYWxbXSkgPT4gTGl0ZXJhbDtcblxuLyoqIEEgZnVuY3Rpb24gdmFyaWFudCB1c2VkIGluIHRoZSBmdW5jdGlvbiBidWlsZGVyIHdoaWNoIGhvbGRzIHRoZSBhcmd1bWVudCB0eXBlcy4gKi9cbmludGVyZmFjZSBGdW5jdGlvblZhcmlhbnQge1xuICAgIGFyZ3M6IExpdGVyYWxUeXBlT3JBbGxbXTtcbiAgICB2YXJhcmdzOiBib29sZWFuO1xuICAgIC8qKiBUaGUgaW1wbGVtZW50aW5nIGZ1bmN0aW9uIGZvciB0aGlzIHNwZWNpZmljIHZhcmlhbnQuICovXG4gICAgaW1wbDogRnVuY3Rpb25JbXBsO1xufVxuXG4vKipcbiAqIEFsbG93cyBmb3IgdGhlIGNyZWF0aW9uIG9mIGZ1bmN0aW9ucyB0aGF0IGNoZWNrIHRoZSBudW1iZXIgYW5kIHR5cGUgb2YgdGhlaXIgYXJndW1lbnRzLCBhbmQgZGlzcGF0Y2hcbiAqIHRvIGRpZmZlcmVudCBpbXBsZW1lbmF0aW9ucyBiYXNlZCBvbiB0aGUgdHlwZXMgb2YgdGhlIGlucHV0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uQnVpbGRlciB7XG4gICAgdmFyaWFudHM6IEZ1bmN0aW9uVmFyaWFudFtdO1xuICAgIHZlY3Rvcml6ZWQ6IFJlY29yZDxudW1iZXIsIG51bWJlcltdPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudmFyaWFudHMgPSBbXTtcbiAgICAgICAgdGhpcy52ZWN0b3JpemVkID0ge307XG4gICAgfVxuXG4gICAgLyoqIEFkZCBhIGdlbmVyYWwgZnVuY3Rpb24gdmFyaWFudCB3aGljaCBhY2NlcHRzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIG9mIGFueSB0eXBlLiAqL1xuICAgIHB1YmxpYyB2YXJhcmcoaW1wbDogRnVuY3Rpb25JbXBsKTogRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAgICAgdGhpcy52YXJpYW50cy5wdXNoKHsgYXJnczogW10sIHZhcmFyZ3M6IHRydWUsIGltcGwgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKiBBZGQgYSBmdW5jdGlvbiB2YXJpYW50IHdoaWNoIHRha2VzIGluIGEgc2luZ2xlIGFyZ3VtZW50LiAqL1xuICAgIHB1YmxpYyBhZGQxPFQgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsPihcbiAgICAgICAgYXJnVHlwZTogVCxcbiAgICAgICAgaW1wbDogKGE6IExpdGVyYWxSZXByQWxsPFQ+LCBjb250ZXh0OiBFdmFsdWF0b3IpID0+IExpdGVyYWxcbiAgICApOiBGdW5jdGlvbkJ1aWxkZXIge1xuICAgICAgICB0aGlzLnZhcmlhbnRzLnB1c2goe1xuICAgICAgICAgICAgYXJnczogW2FyZ1R5cGVdLFxuICAgICAgICAgICAgdmFyYXJnczogZmFsc2UsXG4gICAgICAgICAgICBpbXBsOiAoYywgLi4ucmVzdCkgPT4gaW1wbChyZXN0WzBdIGFzIExpdGVyYWxSZXByQWxsPFQ+LCBjKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKiBBZGQgYSBmdW5jdGlvbiB2YXJpYW50IHdoaWNoIHRha2VzIGluIHR3byB0eXBlZCBhcmd1bWVudHMuICovXG4gICAgcHVibGljIGFkZDI8VCBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGwsIFUgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsPihcbiAgICAgICAgYXJnMTogVCxcbiAgICAgICAgYXJnMjogVSxcbiAgICAgICAgaW1wbDogKGE6IExpdGVyYWxSZXByQWxsPFQ+LCBiOiBMaXRlcmFsUmVwckFsbDxVPiwgY29udGV4dDogRXZhbHVhdG9yKSA9PiBMaXRlcmFsXG4gICAgKTogRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAgICAgdGhpcy52YXJpYW50cy5wdXNoKHtcbiAgICAgICAgICAgIGFyZ3M6IFthcmcxLCBhcmcyXSxcbiAgICAgICAgICAgIHZhcmFyZ3M6IGZhbHNlLFxuICAgICAgICAgICAgaW1wbDogKGMsIC4uLnJlc3QpID0+IGltcGwocmVzdFswXSBhcyBMaXRlcmFsUmVwckFsbDxUPiwgcmVzdFsxXSBhcyBMaXRlcmFsUmVwckFsbDxVPiwgYyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogQWRkIGEgZnVuY3Rpb24gdmFyaWFudCB3aGljaCB0YWtlcyBpbiB0aHJlZSB0eXBlZCBhcmd1bWVudHMuICovXG4gICAgcHVibGljIGFkZDM8VCBleHRlbmRzIExpdGVyYWxUeXBlT3JBbGwsIFUgZXh0ZW5kcyBMaXRlcmFsVHlwZU9yQWxsLCBWIGV4dGVuZHMgTGl0ZXJhbFR5cGVPckFsbD4oXG4gICAgICAgIGFyZzE6IFQsXG4gICAgICAgIGFyZzI6IFUsXG4gICAgICAgIGFyZzM6IFYsXG4gICAgICAgIGltcGw6IChhOiBMaXRlcmFsUmVwckFsbDxUPiwgYjogTGl0ZXJhbFJlcHJBbGw8VT4sIGM6IExpdGVyYWxSZXByQWxsPFY+LCBjb250ZXh0OiBFdmFsdWF0b3IpID0+IExpdGVyYWxcbiAgICApOiBGdW5jdGlvbkJ1aWxkZXIge1xuICAgICAgICB0aGlzLnZhcmlhbnRzLnB1c2goe1xuICAgICAgICAgICAgYXJnczogW2FyZzEsIGFyZzIsIGFyZzNdLFxuICAgICAgICAgICAgdmFyYXJnczogZmFsc2UsXG4gICAgICAgICAgICBpbXBsOiAoYywgLi4ucmVzdCkgPT5cbiAgICAgICAgICAgICAgICBpbXBsKHJlc3RbMF0gYXMgTGl0ZXJhbFJlcHJBbGw8VD4sIHJlc3RbMV0gYXMgTGl0ZXJhbFJlcHJBbGw8VT4sIHJlc3RbMl0gYXMgTGl0ZXJhbFJlcHJBbGw8Vj4sIGMpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqIEFkZCB2ZWN0b3JpemVkIHZhcmlhbnRzIHdoaWNoIGFjY2VwdCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgZGVsZWdhdGUuICovXG4gICAgcHVibGljIHZlY3Rvcml6ZShudW1BcmdzOiBudW1iZXIsIHBvc2l0aW9uczogbnVtYmVyW10pOiBGdW5jdGlvbkJ1aWxkZXIge1xuICAgICAgICB0aGlzLnZlY3Rvcml6ZWRbbnVtQXJnc10gPSBwb3NpdGlvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm4gYSBmdW5jdGlvbiB3aGljaCBjaGVja3MgdGhlIG51bWJlciBhbmQgdHlwZSBvZiBhcmd1bWVudHMsIHBhc3NpbmcgdGhlbSBvbiB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgdmFyaWFudC4gKi9cbiAgICBwdWJsaWMgYnVpbGQoKTogRnVuY3Rpb25JbXBsIHtcbiAgICAgICAgbGV0IHNlbGY6IEZ1bmN0aW9uSW1wbCA9IChjb250ZXh0OiBFdmFsdWF0b3IsIC4uLmFyZ3M6IExpdGVyYWxbXSkgPT4ge1xuICAgICAgICAgICAgbGV0IHR5cGVzOiBMaXRlcmFsVHlwZVtdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBhcmcgb2YgYXJncykge1xuICAgICAgICAgICAgICAgIGxldCBhcmdUeXBlID0gTGl0ZXJhbHMudHlwZU9mKGFyZyk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcmdUeXBlKSB0aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkIGFyZ3VtZW50IHR5cGUgZm9yIGFyZ3VtZW50ICcke2FyZ30nYCk7XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChhcmdUeXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSGFuZGxlIHZlY3Rvcml6YXRpb24sIHBvc3NpYmx5IGluIG11bHRpcGxlIGZpZWxkcy5cbiAgICAgICAgICAgIGlmICh0aGlzLnZlY3Rvcml6ZWRbdHlwZXMubGVuZ3RoXSkge1xuICAgICAgICAgICAgICAgIGxldCB2ZWN0b3JpemVkUG9zaXRpb25zID0gdGhpcy52ZWN0b3JpemVkW3R5cGVzLmxlbmd0aF0uZmlsdGVyKChrKSA9PiB0eXBlc1trXSA9PSBcImFycmF5XCIpO1xuICAgICAgICAgICAgICAgIGlmICh2ZWN0b3JpemVkUG9zaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1pbkxlbmd0aCA9IHZlY3Rvcml6ZWRQb3NpdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHApID0+IChhcmdzW3BdIGFzIGFueVtdKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBNYXRoLm1pbihwLCBjKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCB0aGUgc3ViZnVuY3Rpb24gZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbG9uZ2VzdCBhcnJheS5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgeW91IGNhbGwgYSB2ZWN0b3JpemVkIGZ1bmN0aW9uIHdpdGggZGlmZmVyZW50LWxlbmd0aCBhcnJheXMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvdXRwdXQgaXMgbGltaXRlZCBieSB0aGUgbGVuZ3RoIG9mIHRoZSBzaG9ydGVzdCBhcnJheS5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB2cG9zID0gMDsgdnBvcyA8IG1pbkxlbmd0aDsgdnBvcysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3ViYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlY3Rvcml6ZWRQb3NpdGlvbnMuaW5jbHVkZXMoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBhcmdzW2luZGV4XSBhcyBhbnlbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYXJncy5wdXNoKGFyclt2cG9zXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYXJncy5wdXNoKGFyZ3NbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNlbGYoY29udGV4dCwgLi4uc3ViYXJncykpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dGVyOiBmb3IgKGxldCB2YXJpYW50IG9mIHRoaXMudmFyaWFudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudC52YXJhcmdzKSByZXR1cm4gdmFyaWFudC5pbXBsKGNvbnRleHQsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmFyZ3MubGVuZ3RoICE9IHR5cGVzLmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFyaWFudC5hcmdzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hcmdzW2luZGV4XSAhPSBcIipcIiAmJiB2YXJpYW50LmFyZ3NbaW5kZXhdICE9IHR5cGVzW2luZGV4XSkgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnQuaW1wbChjb250ZXh0LCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIGltcGxlbWVudGF0aW9uIG9mICcke3RoaXMubmFtZX0nIGZvdW5kIGZvciBhcmd1bWVudHM6ICR7dHlwZXMuam9pbihcIiwgXCIpfWApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbn1cblxuLyoqIFV0aWxpdGllcyBmb3IgbWFuYWdpbmcgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zLiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBGdW5jdGlvbnMge1xuICAgIC8qKiBCaW5kIGEgY29udGV4dCB0byBhIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uLCB5aWVsZGluZyBhIGZ1bmN0aW9uIHdoaWNoIGRvZXMgbm90IG5lZWQgdGhlIGNvbnRleHQgYXJndW1lbnQuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJpbmQoZnVuYzogRnVuY3Rpb25JbXBsLCBjb250ZXh0OiBFdmFsdWF0b3IpOiBCb3VuZEZ1bmN0aW9uSW1wbCB7XG4gICAgICAgIHJldHVybiAoLi4uYXJnczogTGl0ZXJhbFtdKSA9PiBmdW5jKGNvbnRleHQsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIC8qKiBCaW5kIGEgY29udGV4dCB0byBhbGwgZnVuY3Rpb25zIGluIHRoZSBnaXZlbiBtYXAsIHlpZWxkaW5nIGEgbmV3IG1hcCBvZiBib3VuZCBmdW5jdGlvbnMuICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGJpbmRBbGwoXG4gICAgICAgIGZ1bmNzOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbkltcGw+LFxuICAgICAgICBjb250ZXh0OiBFdmFsdWF0b3JcbiAgICApOiBSZWNvcmQ8c3RyaW5nLCBCb3VuZEZ1bmN0aW9uSW1wbD4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBCb3VuZEZ1bmN0aW9uSW1wbD4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgW2tleSwgZnVuY10gb2YgT2JqZWN0LmVudHJpZXMoZnVuY3MpKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IEZ1bmN0aW9ucy5iaW5kKGZ1bmMsIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBhbGwgZGVmaW5lZCBmdW5jdGlvbnM7IGRlZmluZWQgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBkYXRhdmlldyxcbiAqIGFuZCB0ZXN0IGNvZGUuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgRGVmYXVsdEZ1bmN0aW9ucyB7XG4gICAgZXhwb3J0IGNvbnN0IHR5cGVPZiA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJ0eXBlXCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKF8pID0+IFwiYXJyYXlcIilcbiAgICAgICAgLmFkZDEoXCJib29sZWFuXCIsIChfKSA9PiBcImJvb2xlYW5cIilcbiAgICAgICAgLmFkZDEoXCJkYXRlXCIsIChfKSA9PiBcImRhdGVcIilcbiAgICAgICAgLmFkZDEoXCJkdXJhdGlvblwiLCAoXykgPT4gXCJkdXJhdGlvblwiKVxuICAgICAgICAuYWRkMShcImZ1bmN0aW9uXCIsIChfKSA9PiBcImZ1bmN0aW9uXCIpXG4gICAgICAgIC5hZGQxKFwibGlua1wiLCAoXykgPT4gXCJsaW5rXCIpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoXykgPT4gXCJudWxsXCIpXG4gICAgICAgIC5hZGQxKFwibnVtYmVyXCIsIChfKSA9PiBcIm51bWJlclwiKVxuICAgICAgICAuYWRkMShcIm9iamVjdFwiLCAoXykgPT4gXCJvYmplY3RcIilcbiAgICAgICAgLmFkZDEoXCJzdHJpbmdcIiwgKF8pID0+IFwic3RyaW5nXCIpXG4gICAgICAgIC5hZGQxKFwiKlwiLCAoXykgPT4gXCJ1bmtub3duXCIpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLyoqIENvbXB1dGUgdGhlIGxlbmd0aCBvZiBhIGRhdGEgdHlwZS4gKi9cbiAgICBleHBvcnQgY29uc3QgbGVuZ3RoID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImxlbmd0aFwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhKSA9PiBhLmxlbmd0aClcbiAgICAgICAgLmFkZDEoXCJvYmplY3RcIiwgKGEpID0+IE9iamVjdC5rZXlzKGEpLmxlbmd0aClcbiAgICAgICAgLmFkZDEoXCJzdHJpbmdcIiwgKGEpID0+IGEubGVuZ3RoKVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKF9hKSA9PiAwKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBMaXN0IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBjb25zdCBsaXN0OiBGdW5jdGlvbkltcGwgPSAoX2NvbnRleHQsIC4uLmFyZ3MpID0+IGFyZ3M7XG5cbiAgICAvKiogT2JqZWN0IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBjb25zdCBvYmplY3Q6IEZ1bmN0aW9uSW1wbCA9IChfY29udGV4dCwgLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggJSAyICE9IDApIHRocm93IEVycm9yKFwib2JqZWN0KCkgcmVxdWlyZXMgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzXCIpO1xuICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBMaXRlcmFsPiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4ICs9IDIpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBhcmdzW2luZGV4XTtcbiAgICAgICAgICAgIGlmICghTGl0ZXJhbHMuaXNTdHJpbmcoa2V5KSkgdGhyb3cgRXJyb3IoXCJrZXlzIHNob3VsZCBiZSBvZiB0eXBlIHN0cmluZyBmb3Igb2JqZWN0KGtleTEsIHZhbHVlMSwgLi4uKVwiKTtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gYXJnc1tpbmRleCArIDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLyoqIEludGVybmFsIGxpbmsgY29uc3RydWN0b3IgZnVuY3Rpb24uICovXG4gICAgZXhwb3J0IGNvbnN0IGxpbms6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJsaW5rXCIpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChhLCBjKSA9PiBMaW5rLmZpbGUoYy5saW5rSGFuZGxlci5ub3JtYWxpemUoYSksIGZhbHNlKSlcbiAgICAgICAgLmFkZDEoXCJsaW5rXCIsIChhKSA9PiBhKVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKF9hKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHQsIGQsIGMpID0+IExpbmsuZmlsZShjLmxpbmtIYW5kbGVyLm5vcm1hbGl6ZSh0KSwgZmFsc2UsIGQpKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcInN0cmluZ1wiLCBcImJvb2xlYW5cIiwgKHQsIGQsIGUsIGMpID0+IExpbmsuZmlsZShjLmxpbmtIYW5kbGVyLm5vcm1hbGl6ZSh0KSwgZSwgZCkpXG4gICAgICAgIC5hZGQyKFwibGlua1wiLCBcInN0cmluZ1wiLCAodCwgZCkgPT4gdC53aXRoRGlzcGxheShkKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICh0LCBfbiwgYykgPT4gbGluayhjLCB0KSlcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLyoqIEVtYmVkIGFuZCB1bi1lbWJlZCBhIGxpbmsuICovXG4gICAgZXhwb3J0IGNvbnN0IGVtYmVkOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZW1iZWRcIilcbiAgICAgICAgLmFkZDEoXCJsaW5rXCIsIChsKSA9PiBsLnRvRW1iZWQoKSlcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5hZGQyKFwibGlua1wiLCBcImJvb2xlYW5cIiwgKGwsIGUsIGMpID0+IChlID8gbC50b0VtYmVkKCkgOiBsLmZyb21FbWJlZCgpKSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKiogRGF0ZSBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gKi9cbiAgICBleHBvcnQgY29uc3QgZGF0ZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJkYXRlXCIpXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChzdHIpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXJzZWREYXRlID0gUFJJTUlUSVZFUy5kYXRlUGx1cy5wYXJzZShzdHIpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZERhdGUuc3RhdHVzKSByZXR1cm4gcGFyc2VkRGF0ZS52YWx1ZTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQxKFwiZGF0ZVwiLCAoZCkgPT4gZClcbiAgICAgICAgLmFkZDEoXCJsaW5rXCIsIChsaW5rLCBjKSA9PiB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2UgZnJvbSB0aGUgZGlzcGxheS4uLlxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWREYXRlID0gUFJJTUlUSVZFUy5kYXRlLnBhcnNlKGxpbmsuZGlzcGxheSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZERhdGUuc3RhdHVzKSByZXR1cm4gcGFyc2VkRGF0ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVGhlbiB0cnkgdG8gcGFyc2UgZnJvbSB0aGUgcGF0aC4uLlxuICAgICAgICAgICAgbGV0IHBhcnNlZERhdGUgPSBQUklNSVRJVkVTLmRhdGUucGFyc2UobGluay5wYXRoKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLnN0YXR1cykgcmV0dXJuIHBhcnNlZERhdGUudmFsdWU7XG5cbiAgICAgICAgICAgIC8vIFRoZW4gcHVsbCBpdCBmcm9tIHRoZSBmaWxlLlxuICAgICAgICAgICAgbGV0IHJlc29sdmVkID0gYy5saW5rSGFuZGxlci5yZXNvbHZlKGxpbmsucGF0aCk7XG4gICAgICAgICAgICBpZiAocmVzb2x2ZWQgJiYgKHJlc29sdmVkIGFzIGFueSk/LmZpbGU/LmRheSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAocmVzb2x2ZWQgYXMgYW55KT8uZmlsZT8uZGF5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKGQsIGYpID0+IHtcbiAgICAgICAgICAgIGlmIChmID09PSBcInhcIiB8fCBmID09PSBcIlhcIikge1xuICAgICAgICAgICAgICAgIGxldCBtYXRjaCA9IE5VTUJFUl9SRUdFWC5leGVjKGQpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgcmV0dXJuIERhdGVUaW1lLmZyb21NaWxsaXMoTnVtYmVyLnBhcnNlSW50KG1hdGNoWzBdKSAqIChmID09PSBcIlhcIiA/IDEwMDAgOiAxKSk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiTm90IGEgbnVtYmVyIGZvciBmb3JtYXQoICgkeyBmIH0pOiAkeyBkIH1cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkRGF0ZSA9IERhdGVUaW1lLmZyb21Gb3JtYXQoZCwgZik7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZERhdGUuaXNWYWxpZCkgcmV0dXJuIHBhcnNlZERhdGU7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBDYW4ndCBoYW5kbGUgZm9ybWF0ICgke2Z9KSBvbiBkYXRlIHN0cmluZyAoJHtkfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvKiogRHVyYXRpb24gY29uc3RydWN0b3IgZnVuY3Rpb24uICovXG4gICAgZXhwb3J0IGNvbnN0IGR1ciA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJkdXJcIilcbiAgICAgICAgLmFkZDEoXCJzdHJpbmdcIiwgKHN0cikgPT4ge1xuICAgICAgICAgICAgbGV0IHBhcnNlZER1ciA9IFBSSU1JVElWRVMuZHVyYXRpb24ucGFyc2Uoc3RyLnRyaW0oKSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkRHVyLnN0YXR1cykgcmV0dXJuIHBhcnNlZER1ci52YWx1ZTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQxKFwiZHVyYXRpb25cIiwgKGQpID0+IGQpXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoZCkgPT4gZClcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLyoqIEZvcm1hdCBhIGRhdGUgdXNpbmcgYSBsdXhvbi9tb21lbnQtc3R5bGUgZGF0ZSBmb3JtYXQuICovXG4gICAgZXhwb3J0IGNvbnN0IGRhdGVmb3JtYXQgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZGF0ZWZvcm1hdFwiKVxuICAgICAgICAuYWRkMihcImRhdGVcIiwgXCJzdHJpbmdcIiwgKGRhdGUsIGZvcm1hdCkgPT4gZGF0ZS50b0Zvcm1hdChmb3JtYXQsIHsgbG9jYWxlOiBjdXJyZW50TG9jYWxlKCkgfSkpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcInN0cmluZ1wiLCAoX251bCwgX2Zvcm1hdCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGxvY2FsdGltZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJsb2NhbHRpbWVcIilcbiAgICAgICAgLmFkZDEoXCJkYXRlXCIsIChkKSA9PiBkLnRvTG9jYWwoKSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGNvbnN0IE5VTUJFUl9SRUdFWCA9IC8tP1swLTldKyhcXC5bMC05XSspPy87XG5cbiAgICAvKiogTnVtYmVyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiAqL1xuICAgIGV4cG9ydCBjb25zdCBudW1iZXIgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibnVtYmVyXCIpXG4gICAgICAgIC5hZGQxKFwibnVtYmVyXCIsIChhKSA9PiBhKVxuICAgICAgICAuYWRkMShcInN0cmluZ1wiLCAoc3RyKSA9PiB7XG4gICAgICAgICAgICBsZXQgbWF0Y2ggPSBOVU1CRVJfUkVHRVguZXhlYyhzdHIpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSByZXR1cm4gTnVtYmVyLnBhcnNlRmxvYXQobWF0Y2hbMF0pO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW55IHZhbHVlIHRvIGEgcmVhc29uYWJsZSBpbnRlcm5hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24uIE1vc3QgdXNlZnVsIGZvciBkYXRlcywgc3RyaW5ncywgbnVtYmVycywgYW5kXG4gICAgICogc28gb24uXG4gICAgICovXG4gICAgZXhwb3J0IGNvbnN0IHN0cmluZyA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzdHJpbmdcIilcbiAgICAgICAgLmFkZDEoXCIqXCIsIChhLCBjdHgpID0+IExpdGVyYWxzLnRvU3RyaW5nKGEsIHN0cmluZ1NldHRpbmdzKGN0eC5zZXR0aW5ncykpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCByb3VuZCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyb3VuZFwiKVxuICAgICAgICAuYWRkMShcIm51bWJlclwiLCAobikgPT4gTWF0aC5yb3VuZChuKSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYWRkMihcIm51bWJlclwiLCBcIm51bWJlclwiLCAobiwgcCkgPT4ge1xuICAgICAgICAgICAgaWYgKHAgPD0gMCkgcmV0dXJuIE1hdGgucm91bmQobik7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChuLnRvRml4ZWQocCkpO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcIm51bWJlclwiLCBcIm51bGxcIiwgKG4pID0+IE1hdGgucm91bmQobikpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IG1pbjogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm1pblwiKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsIChhLCBfbikgPT4gYSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoX24sIGEpID0+IGEpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIipcIiwgKGEsIGIsIGN0eCkgPT4gKExpdGVyYWxzLmNvbXBhcmUoYSwgYiwgY3R4LmxpbmtIYW5kbGVyLm5vcm1hbGl6ZSkgPD0gMCA/IGEgOiBiKSlcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYSwgY3R4KSA9PiBtaW4oY3R4LCAuLi5hKSlcbiAgICAgICAgLnZhcmFyZygoY3R4LCAuLi5hcmdzKSA9PiAoYXJncy5sZW5ndGggPT0gMCA/IG51bGwgOiBhcmdzLnJlZHVjZSgocCwgYykgPT4gbWluKGN0eCwgcCwgYykpKSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgbWF4OiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibWF4XCIpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKGEsIF9uKSA9PiBhKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsIChfbiwgYSkgPT4gYSlcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwiKlwiLCAoYSwgYiwgY3R4KSA9PiAoTGl0ZXJhbHMuY29tcGFyZShhLCBiLCBjdHgubGlua0hhbmRsZXIubm9ybWFsaXplKSA+IDAgPyBhIDogYikpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGEsIGN0eCkgPT4gbWF4KGN0eCwgLi4uYSkpXG4gICAgICAgIC52YXJhcmcoKGN0eCwgLi4uYXJncykgPT4gKGFyZ3MubGVuZ3RoID09IDAgPyBudWxsIDogYXJncy5yZWR1Y2UoKHAsIGMpID0+IG1heChjdHgsIHAsIGMpKSkpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IG1pbmJ5OiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibWluYnlcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChhcnIsIGZ1bmMsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBhcnIubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHYsIG1hcHBlZDogZnVuYyhjdHgsIHYpIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBmaWx0ZXJlZCA9IHZhbHVlcy5maWx0ZXIoKHYpID0+ICFMaXRlcmFscy5pc051bGwodi5tYXBwZWQpKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZC5sZW5ndGggPT0gMCkgcmV0dXJuIGFyclswXTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLnJlZHVjZSgocCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChMaXRlcmFscy5jb21wYXJlKHAubWFwcGVkLCBjLm1hcHBlZCwgY3R4LmxpbmtIYW5kbGVyLm5vcm1hbGl6ZSkgPD0gMCkgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYztcbiAgICAgICAgICAgIH0pLnZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCJmdW5jdGlvblwiLCAoX2FyciwgX2Z1bmMsIF9jdHgpID0+IG51bGwpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IG1heGJ5OiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibWF4YnlcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChhcnIsIGZ1bmMsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBhcnIubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHYsIG1hcHBlZDogZnVuYyhjdHgsIHYpIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBmaWx0ZXJlZCA9IHZhbHVlcy5maWx0ZXIoKHYpID0+ICFMaXRlcmFscy5pc051bGwodi5tYXBwZWQpKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZC5sZW5ndGggPT0gMCkgcmV0dXJuIGFyclswXTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLnJlZHVjZSgocCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChMaXRlcmFscy5jb21wYXJlKHAubWFwcGVkLCBjLm1hcHBlZCwgY3R4LmxpbmtIYW5kbGVyLm5vcm1hbGl6ZSkgPiAwKSByZXR1cm4gcDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBjO1xuICAgICAgICAgICAgfSkudmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcImZ1bmN0aW9uXCIsIChfYXJyLCBfZnVuYywgX2N0eCkgPT4gbnVsbClcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgc3RyaXB0aW1lID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInN0cmlwdGltZVwiKVxuICAgICAgICAuYWRkMShcImRhdGVcIiwgKGQpID0+IERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiBkLnllYXIsIG1vbnRoOiBkLm1vbnRoLCBkYXk6IGQuZGF5IH0pKVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKF9uKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDEsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvLyBEZWZhdWx0IGNvbnRhaW5zLCB3aGljaCBsb29rcyB0aHJvdWdoIGRhdGEgc3RydWN0dXJlcyByZWN1cnNpdmVseS5cbiAgICBleHBvcnQgY29uc3QgY29udGFpbnM6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJjb250YWluc1wiKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwiKlwiLCAobCwgZWxlbSwgY29udGV4dCkgPT4gbC5zb21lKChlKSA9PiBjb250YWlucyhjb250ZXh0LCBlLCBlbGVtKSkpXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChoYXlzdGFjaywgbmVlZGxlKSA9PiBoYXlzdGFjay5pbmNsdWRlcyhuZWVkbGUpKVxuICAgICAgICAuYWRkMihcIm9iamVjdFwiLCBcInN0cmluZ1wiLCAob2JqLCBrZXkpID0+IGtleSBpbiBvYmopXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIipcIiwgKGVsZW0xLCBlbGVtMiwgY29udGV4dCkgPT5cbiAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICAgICAgICAuZXZhbHVhdGUoRXhwcmVzc2lvbnMuYmluYXJ5T3AoRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtMSksIFwiPVwiLCBFeHByZXNzaW9ucy5saXRlcmFsKGVsZW0yKSkpXG4gICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KClcbiAgICAgICAgKVxuICAgICAgICAudmVjdG9yaXplKDIsIFsxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvLyBDYXNlIGluc2Vuc2l0aXZlIHZlcnNpb24gb2YgY29udGFpbnMuXG4gICAgZXhwb3J0IGNvbnN0IGljb250YWluczogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImljb250YWluc1wiKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwiKlwiLCAobCwgZWxlbSwgY29udGV4dCkgPT4gbC5zb21lKChlKSA9PiBpY29udGFpbnMoY29udGV4dCwgZSwgZWxlbSkpKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoaGF5c3RhY2ssIG5lZWRsZSkgPT5cbiAgICAgICAgICAgIGhheXN0YWNrLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMobmVlZGxlLnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgICAgIClcbiAgICAgICAgLmFkZDIoXCJvYmplY3RcIiwgXCJzdHJpbmdcIiwgKG9iaiwga2V5KSA9PiBrZXkgaW4gb2JqKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsIChlbGVtMSwgZWxlbTIsIGNvbnRleHQpID0+XG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoZWxlbTEpLCBcIj1cIiwgRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtMikpKVxuICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygpXG4gICAgICAgIClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gXCJleGFjdFwiIGNvbnRhaW5zLCBkb2VzIG5vdCBsb29rIHJlY3Vyc2l2ZWx5LlxuICAgIGV4cG9ydCBjb25zdCBlY29udGFpbnM6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJlY29udGFpbnNcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcIipcIiwgKGwsIGVsZW0sIGNvbnRleHQpID0+XG4gICAgICAgICAgICBsLnNvbWUoKGUpID0+XG4gICAgICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgICAgICAgICAuZXZhbHVhdGUoRXhwcmVzc2lvbnMuYmluYXJ5T3AoRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtKSwgXCI9XCIsIEV4cHJlc3Npb25zLmxpdGVyYWwoZSkpKVxuICAgICAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChoYXlzdGFjaywgbmVlZGxlKSA9PiBoYXlzdGFjay5pbmNsdWRlcyhuZWVkbGUpKVxuICAgICAgICAuYWRkMihcIm9iamVjdFwiLCBcInN0cmluZ1wiLCAob2JqLCBrZXkpID0+IGtleSBpbiBvYmopXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIipcIiwgKGVsZW0xLCBlbGVtMiwgY29udGV4dCkgPT5cbiAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICAgICAgICAuZXZhbHVhdGUoRXhwcmVzc2lvbnMuYmluYXJ5T3AoRXhwcmVzc2lvbnMubGl0ZXJhbChlbGVtMSksIFwiPVwiLCBFeHByZXNzaW9ucy5saXRlcmFsKGVsZW0yKSkpXG4gICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KClcbiAgICAgICAgKVxuICAgICAgICAudmVjdG9yaXplKDIsIFsxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvLyBDYXNlIGluc2Vuc2l0aXZlIGNvbnRhaW5zIHdoaWNoIGxvb2tzIGZvciBleGFjdCB3b3JkIG1hdGNoZXMgKGkuZS4sIGJvdW5kcnktdG8tYm91bmRyeSBtYXRjaCkuXG4gICAgZXhwb3J0IGNvbnN0IGNvbnRhaW5zd29yZDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImNvbnRhaW5zd29yZFwiKVxuICAgICAgICAuYWRkMihcbiAgICAgICAgICAgIFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICAgICAgKGhheSwgbmVlZGxlKSA9PiAhIWhheS5tYXRjaChuZXcgUmVnRXhwKFwiLipcXFxcYlwiICsgZXNjYXBlUmVnZXgobmVlZGxlKSArIFwiXFxcXGIuKlwiLCBcImlcIikpXG4gICAgICAgIClcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoX2EsIF9iKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsIChfYSwgX2IpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBFeHRyYWN0IDAgb3IgbW9yZSBrZXlzIGZyb20gYSBnaXZlbiBvYmplY3QgdmlhIGluZGV4aW5nLiAqL1xuICAgIGV4cG9ydCBjb25zdCBleHRyYWN0OiBGdW5jdGlvbkltcGwgPSAoY29udGV4dDogRXZhbHVhdG9yLCAuLi5hcmdzOiBMaXRlcmFsW10pID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDApIHJldHVybiBcImV4dHJhY3Qob2JqZWN0LCBrZXkxLCAuLi4pIHJlcXVpcmVzIGF0IGxlYXN0IDEgYXJndW1lbnRcIjtcblxuICAgICAgICAvLyBNYW51YWxseSBoYW5kbGUgdmVjdG9yaXphdGlvbiBpbiB0aGUgZmlyc3QgYXJndW1lbnQuXG4gICAgICAgIGxldCBvYmplY3QgPSBhcmdzWzBdO1xuICAgICAgICBpZiAoTGl0ZXJhbHMuaXNBcnJheShvYmplY3QpKSByZXR1cm4gb2JqZWN0Lm1hcCgodikgPT4gZXh0cmFjdChjb250ZXh0LCB2LCAuLi5hcmdzLnNsaWNlKDEpKSk7XG5cbiAgICAgICAgbGV0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgTGl0ZXJhbD4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gYXJnc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoIUxpdGVyYWxzLmlzU3RyaW5nKGtleSkpIHRocm93IEVycm9yKFwiZXh0cmFjdChvYmplY3QsIGtleTEsIC4uLikgbXVzdCBiZSBjYWxsZWQgd2l0aCBzdHJpbmcga2V5c1wiKTtcblxuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjb250ZXh0XG4gICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmluZGV4KEV4cHJlc3Npb25zLmxpdGVyYWwob2JqZWN0KSwgRXhwcmVzc2lvbnMubGl0ZXJhbChrZXkpKSlcbiAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIFJldmVyc2UgYW4gYXJyYXkgb3Igc3RyaW5nLlxuICAgIGV4cG9ydCBjb25zdCByZXZlcnNlID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInJldmVyc2VcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAobCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSBsLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHJlc3VsdC5wdXNoKGxbaW5kZXhdKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQxKFwic3RyaW5nXCIsIChsKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbC5sZW5ndGg7IGMrKykgcmVzdWx0ICs9IGxbbC5sZW5ndGggLSBjIC0gMV07XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcIipcIiwgKGUpID0+IGUpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gU29ydCBhbiBhcnJheTsgaWYgZ2l2ZW4gdHdvIGFyZ3VtZW50cywgc29ydHMgYnkgdGhlIGtleSByZXR1cm5lZC5cbiAgICBleHBvcnQgY29uc3Qgc29ydDogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInNvcnRcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAobGlzdCwgY29udGV4dCkgPT4gc29ydChjb250ZXh0LCBsaXN0LCAoX2N0eDogRXZhbHVhdG9yLCBhOiBMaXRlcmFsKSA9PiBhKSlcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChsaXN0LCBrZXksIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAoW10gYXMgTGl0ZXJhbFtdKS5jb25jYXQobGlzdCk7XG4gICAgICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBha2V5ID0ga2V5KGNvbnRleHQsIGEpO1xuICAgICAgICAgICAgICAgIGxldCBia2V5ID0ga2V5KGNvbnRleHQsIGIpO1xuICAgICAgICAgICAgICAgIGxldCBsZSA9IGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoYWtleSksIFwiPFwiLCBFeHByZXNzaW9ucy5saXRlcmFsKGJrZXkpKSlcbiAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKExpdGVyYWxzLmlzVHJ1dGh5KGxlKSkgcmV0dXJuIC0xO1xuXG4gICAgICAgICAgICAgICAgbGV0IGVxID0gY29udGV4dFxuICAgICAgICAgICAgICAgICAgICAuZXZhbHVhdGUoRXhwcmVzc2lvbnMuYmluYXJ5T3AoRXhwcmVzc2lvbnMubGl0ZXJhbChha2V5KSwgXCI9XCIsIEV4cHJlc3Npb25zLmxpdGVyYWwoYmtleSkpKVxuICAgICAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKTtcbiAgICAgICAgICAgICAgICBpZiAoTGl0ZXJhbHMuaXNUcnV0aHkoZXEpKSByZXR1cm4gMDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMShcIipcIiwgKGUpID0+IGUpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHJlZ2V4dGVzdCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyZWdleHRlc3RcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHBhdHRlcm46IHN0cmluZywgZmllbGQ6IHN0cmluZykgPT4gUmVnRXhwKHBhdHRlcm4pLnRlc3QoZmllbGQpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsIChfbiwgX2EpID0+IGZhbHNlKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsIChfYSwgX24pID0+IGZhbHNlKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgcmVnZXhtYXRjaCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJyZWdleG1hdGNoXCIpXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwic3RyaW5nXCIsIChwYXR0ZXJuOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmICghcGF0dGVybi5zdGFydHNXaXRoKFwiXlwiKSAmJiAhcGF0dGVybi5lbmRzV2l0aChcIiRcIikpIHBhdHRlcm4gPSBcIl5cIiArIHBhdHRlcm4gKyBcIiRcIjtcbiAgICAgICAgICAgIHJldHVybiAhIWZpZWxkLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsIChfbiwgX2EpID0+IGZhbHNlKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsIChfYSwgX24pID0+IGZhbHNlKVxuICAgICAgICAudmVjdG9yaXplKDIsIFswLCAxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgcmVnZXhyZXBsYWNlID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInJlZ2V4cmVwbGFjZVwiKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoZmllbGQ6IHN0cmluZywgcGF0OiBzdHJpbmcsIHJlcDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCByZWcgPSBuZXcgUmVnRXhwKHBhdCwgXCJnXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5yZXBsYWNlKHJlZywgcmVwKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgcmVnZXhwICcke3BhdH0nIGluIHJlZ2V4cmVwbGFjZWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYWRkMyhcIm51bGxcIiwgXCIqXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgbG93ZXIgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibG93ZXJcIilcbiAgICAgICAgLmFkZDEoXCJzdHJpbmdcIiwgKHMpID0+IHMudG9Mb2NhbGVMb3dlckNhc2UoKSlcbiAgICAgICAgLmFkZDEoXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMSwgWzBdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCB1cHBlciA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJ1cHBlclwiKVxuICAgICAgICAuYWRkMShcInN0cmluZ1wiLCAocykgPT4gcy50b0xvY2FsZVVwcGVyQ2FzZSgpKVxuICAgICAgICAuYWRkMShcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgxLCBbMF0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IHJlcGxhY2UgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicmVwbGFjZVwiKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoc3RyLCBwYXQsIHJlcHIpID0+IHN0ci5zcGxpdChwYXQpLmpvaW4ocmVwcikpXG4gICAgICAgIC5hZGQzKFwibnVsbFwiLCBcIipcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMywgWzAsIDEsIDJdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vIEVuc3VyZSB1bmRlZmluZWQgbWF0Y2hlcyB0dXJuIGludG8gZW1wdHkgc3RyaW5ncyBmb3Igc3BsaXQvMiBhbmQgc3BsaXQvMy5cbiAgICBjb25zdCBzcGxpdEltcGwgPSAoc3RyOiBzdHJpbmcsIGRlbGltOiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyKTogc3RyaW5nW10gPT5cbiAgICAgICAgc3RyLnNwbGl0KG5ldyBSZWdFeHAoZGVsaW0pLCBsaW1pdCkubWFwKChzdHIpID0+IHN0ciB8fCBcIlwiKTtcblxuICAgIC8qKiBTcGxpdCBhIHN0cmluZyBvbiBhIGdpdmVuIHN0cmluZy4gKi9cbiAgICBleHBvcnQgY29uc3Qgc3BsaXQ6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzcGxpdFwiKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoc3RyaW5nLCBzcGxpdHRlcikgPT4gc3BsaXRJbXBsKHN0cmluZywgc3BsaXR0ZXIpKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcInN0cmluZ1wiLCBcIm51bWJlclwiLCAoc3RyaW5nLCBzcGxpdHRlciwgbGltaXQpID0+IHNwbGl0SW1wbChzdHJpbmcsIHNwbGl0dGVyLCBsaW1pdCkpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIipcIiwgXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMyhcIm51bGxcIiwgXCIqXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBzdGFydHN3aXRoOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwic3RhcnRzd2l0aFwiKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcInN0cmluZ1wiLCAoc3RyLCBzdGFydGluZykgPT4gc3RyLnN0YXJ0c1dpdGgoc3RhcnRpbmcpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGVuZHN3aXRoOiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZW5kc3dpdGhcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIiwgKHN0ciwgZW5kaW5nKSA9PiBzdHIuZW5kc1dpdGgoZW5kaW5nKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBwYWRsZWZ0OiBGdW5jdGlvbkltcGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwicGFkbGVmdFwiKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcIm51bWJlclwiLCAoc3RyLCBsZW4pID0+IHN0ci5wYWRTdGFydChsZW4sIFwiIFwiKSlcbiAgICAgICAgLmFkZDMoXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJzdHJpbmdcIiwgKHN0ciwgbGVuLCBwYWRkaW5nKSA9PiBzdHIucGFkU3RhcnQobGVuLCBwYWRkaW5nKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwibnVsbFwiLCBcIipcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgcGFkcmlnaHQ6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJwYWRyaWdodFwiKVxuICAgICAgICAuYWRkMihcInN0cmluZ1wiLCBcIm51bWJlclwiLCAoc3RyLCBsZW4pID0+IHN0ci5wYWRFbmQobGVuLCBcIiBcIikpXG4gICAgICAgIC5hZGQzKFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwic3RyaW5nXCIsIChzdHIsIGxlbiwgcGFkZGluZykgPT4gc3RyLnBhZEVuZChsZW4sIHBhZGRpbmcpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCJudWxsXCIsIFwiKlwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC52ZWN0b3JpemUoMywgWzAsIDEsIDJdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBzdWJzdHJpbmc6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJzdWJzdHJpbmdcIilcbiAgICAgICAgLmFkZDIoXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgKHN0ciwgc3RhcnQpID0+IHN0ci5zdWJzdHJpbmcoc3RhcnQpKVxuICAgICAgICAuYWRkMyhcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcIm51bWJlclwiLCAoc3RyLCBzdGFydCwgZW5kKSA9PiBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQyKFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCJudWxsXCIsIFwiKlwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwiKlwiLCBcIm51bGxcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLnZlY3Rvcml6ZSgyLCBbMCwgMV0pXG4gICAgICAgIC52ZWN0b3JpemUoMywgWzAsIDEsIDJdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCB0cnVuY2F0ZTogRnVuY3Rpb25JbXBsID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInRydW5jYXRlXCIpXG4gICAgICAgIC5hZGQzKFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwic3RyaW5nXCIsIChzdHIsIGxlbmd0aCwgc3VmZml4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA+IGxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBNYXRoLm1heCgwLCBsZW5ndGggLSBzdWZmaXgubGVuZ3RoKSkgKyBzdWZmaXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQyKFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIChzdHIsIGxlbmd0aCwgY3R4KSA9PiB0cnVuY2F0ZShjdHgsIHN0ciwgbGVuZ3RoLCBcIi4uLlwiKSlcbiAgICAgICAgLmFkZDIoXCJudWxsXCIsIFwiKlwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwibnVsbFwiLCBcIipcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5hZGQzKFwiKlwiLCBcIipcIiwgXCJudWxsXCIsICgpID0+IG51bGwpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswLCAxLCAyXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgZmRlZmF1bHQgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZGVmYXVsdFwiKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsICh2LCBiaykgPT4gKExpdGVyYWxzLmlzTnVsbCh2KSA/IGJrIDogdikpXG4gICAgICAgIC52ZWN0b3JpemUoMiwgWzAsIDFdKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBsZGVmYXVsdCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJsZGVmYXVsdFwiKVxuICAgICAgICAuYWRkMihcIipcIiwgXCIqXCIsICh2LCBiaykgPT4gKExpdGVyYWxzLmlzTnVsbCh2KSA/IGJrIDogdikpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGNob2ljZSA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJjaG9pY2VcIilcbiAgICAgICAgLmFkZDMoXCIqXCIsIFwiKlwiLCBcIipcIiwgKGIsIGxlZnQsIHJpZ2h0KSA9PiAoTGl0ZXJhbHMuaXNUcnV0aHkoYikgPyBsZWZ0IDogcmlnaHQpKVxuICAgICAgICAudmVjdG9yaXplKDMsIFswXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgcmVkdWNlID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInJlZHVjZVwiKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwic3RyaW5nXCIsIChsaXMsIG9wLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBpZiAobGlzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgaWYgKG9wICE9IFwiK1wiICYmIG9wICE9IFwiLVwiICYmIG9wICE9IFwiKlwiICYmIG9wICE9IFwiL1wiICYmIG9wICE9IFwiJlwiICYmIG9wICE9IFwifFwiKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwicmVkdWNlKGFycmF5LCBvcCkgc3VwcG9ydHMgJysnLCAnLScsICcvJywgJyonLCAnJicsIGFuZCAnfCdcIik7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGxpc1swXTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBsaXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIC5ldmFsdWF0ZShFeHByZXNzaW9ucy5iaW5hcnlPcChFeHByZXNzaW9ucy5saXRlcmFsKHZhbHVlKSwgb3AsIEV4cHJlc3Npb25zLmxpdGVyYWwobGlzW2luZGV4XSkpKVxuICAgICAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwiZnVuY3Rpb25cIiwgKGxpcywgb3AsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGlmIChsaXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBsaXNbMF07XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbGlzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgbnVsbCB2YWx1ZXMgdG8gcmVkdWNlIHRoZSBwYWluIG9mIHN1bW1pbmcgb3ZlciBmaWVsZHMgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICBpZiAoTGl0ZXJhbHMuaXNOdWxsKGxpc1tpbmRleF0pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gb3AoY29udGV4dCwgdmFsdWUsIGxpc1tpbmRleF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmFkZDIoXCIqXCIsIFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAudmVjdG9yaXplKDIsIFsxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3Qgc3VtID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcInN1bVwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhcnIsIGMpID0+IHJlZHVjZShjLCBhcnIsIFwiK1wiKSlcbiAgICAgICAgLmFkZDEoXCIqXCIsIChlKSA9PiBlKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBhdmVyYWdlID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImF2ZXJhZ2VcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyYXksIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGlmIChhcnJheS5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZCA9IHN1bShjb250ZXh0LCBhcnJheSk7XG4gICAgICAgICAgICBpZiAoYWRkID09IG51bGwgfHwgYWRkID09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0XG4gICAgICAgICAgICAgICAgLmV2YWx1YXRlKEV4cHJlc3Npb25zLmJpbmFyeU9wKEV4cHJlc3Npb25zLmxpdGVyYWwoYWRkKSwgXCIvXCIsIEV4cHJlc3Npb25zLmxpdGVyYWwoYXJyYXkubGVuZ3RoKSkpXG4gICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQxKFwiKlwiLCAoZSkgPT4gZSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgcHJvZHVjdCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJwcm9kdWN0XCIpXG4gICAgICAgIC5hZGQxKFwiYXJyYXlcIiwgKGFyciwgYykgPT4gcmVkdWNlKGMsIGFyciwgXCIqXCIpKVxuICAgICAgICAuYWRkMShcIipcIiwgKGUpID0+IGUpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGpvaW46IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJqb2luXCIpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJzdHJpbmdcIiwgKGFyciwgc2VwLCBjdHgpID0+XG4gICAgICAgICAgICBhcnIubWFwKChlKSA9PiBMaXRlcmFscy50b1N0cmluZyhlLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSkuam9pbihzZXApXG4gICAgICAgIClcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcIm51bGxcIiwgKGFyciwgX3MsIGNvbnRleHQpID0+IGpvaW4oY29udGV4dCwgYXJyLCBcIiwgXCIpKVxuICAgICAgICAuYWRkMihcIipcIiwgXCJzdHJpbmdcIiwgKGVsZW0sIHNlcCwgY3R4KSA9PiBMaXRlcmFscy50b1N0cmluZyhlbGVtLCBzdHJpbmdTZXR0aW5ncyhjdHguc2V0dGluZ3MpKSlcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyLCBjb250ZXh0KSA9PiBqb2luKGNvbnRleHQsIGFyciwgXCIsIFwiKSlcbiAgICAgICAgLmFkZDEoXCIqXCIsIChlLCBjdHgpID0+IExpdGVyYWxzLnRvU3RyaW5nKGUsIHN0cmluZ1NldHRpbmdzKGN0eC5zZXR0aW5ncykpKVxuICAgICAgICAudmVjdG9yaXplKDIsIFsxXSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgYW55ID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImFueVwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhcnIpID0+IGFyci5zb21lKCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeSh2KSkpXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJmdW5jdGlvblwiLCAoYXJyLCBmLCBjdHgpID0+IGFyci5zb21lKCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeShmKGN0eCwgdikpKSlcbiAgICAgICAgLnZhcmFyZygoX2N0eCwgLi4uYXJncykgPT4gYXJncy5zb21lKCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeSh2KSkpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGFsbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJhbGxcIilcbiAgICAgICAgLmFkZDEoXCJhcnJheVwiLCAoYXJyKSA9PiBhcnIuZXZlcnkoKHYpID0+IExpdGVyYWxzLmlzVHJ1dGh5KHYpKSlcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChhcnIsIGYsIGN0eCkgPT4gYXJyLmV2ZXJ5KCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeShmKGN0eCwgdikpKSlcbiAgICAgICAgLnZhcmFyZygoX2N0eCwgLi4uYXJncykgPT4gYXJncy5ldmVyeSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkodikpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGV4cG9ydCBjb25zdCBub25lID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcImFsbFwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhcnIpID0+ICFhcnIuc29tZSgodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkodikpKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwiZnVuY3Rpb25cIiwgKGFyciwgZiwgY3R4KSA9PiAhYXJyLnNvbWUoKHYpID0+IExpdGVyYWxzLmlzVHJ1dGh5KGYoY3R4LCB2KSkpKVxuICAgICAgICAudmFyYXJnKChfY3R4LCAuLi5hcmdzKSA9PiAhYXJncy5zb21lKCh2KSA9PiBMaXRlcmFscy5pc1RydXRoeSh2KSkpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IGZpbHRlciA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJmaWx0ZXJcIilcbiAgICAgICAgLmFkZDIoXCJhcnJheVwiLCBcImZ1bmN0aW9uXCIsIChhcnIsIGYsIGN0eCkgPT4gYXJyLmZpbHRlcigodikgPT4gTGl0ZXJhbHMuaXNUcnV0aHkoZihjdHgsIHYpKSkpXG4gICAgICAgIC5hZGQyKFwibnVsbFwiLCBcIipcIiwgKCkgPT4gbnVsbClcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBleHBvcnQgY29uc3QgbWFwID0gbmV3IEZ1bmN0aW9uQnVpbGRlcihcIm1hcFwiKVxuICAgICAgICAuYWRkMihcImFycmF5XCIsIFwiZnVuY3Rpb25cIiwgKGFyciwgZiwgY3R4KSA9PiBhcnIubWFwKCh2KSA9PiBmKGN0eCwgdikpKVxuICAgICAgICAuYWRkMihcIm51bGxcIiwgXCIqXCIsICgpID0+IG51bGwpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgZXhwb3J0IGNvbnN0IG5vbm51bGwgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwibm9ubnVsbFwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhcnIpID0+IGFyci5maWx0ZXIoKHYpID0+IExpdGVyYWxzLnR5cGVPZih2KSAhPSBcIm51bGxcIikpXG4gICAgICAgIC52YXJhcmcoKF9jdHgsIC4uLmFyZ3MpID0+IGFyZ3MuZmlsdGVyKCh2KSA9PiBMaXRlcmFscy50eXBlT2YodikgIT0gXCJudWxsXCIpKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8qKiBHZXRzIGFuIG9iamVjdCBjb250YWluaW5nIGEgbGluaydzIG93biBwcm9wZXJ0aWVzICovXG4gICAgZXhwb3J0IGNvbnN0IG1ldGE6IEZ1bmN0aW9uSW1wbCA9IG5ldyBGdW5jdGlvbkJ1aWxkZXIoXCJtZXRhXCIpXG4gICAgICAgIC5hZGQxKFwibGlua1wiLCAobGluaykgPT4gKHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGxpbmsuZGlzcGxheSA/PyBudWxsLFxuICAgICAgICAgICAgZW1iZWQ6IGxpbmsuZW1iZWQsXG4gICAgICAgICAgICBwYXRoOiBsaW5rLnBhdGgsXG4gICAgICAgICAgICBzdWJwYXRoOiBsaW5rLnN1YnBhdGggPz8gbnVsbCxcbiAgICAgICAgICAgIHR5cGU6IGxpbmsudHlwZSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgLy8gQ29uY2F0ZW5hdGVzIHN1Yi1hcnJheSBlbGVtZW50cyBpbnRvIGEgbmV3IGFycmF5XG4gICAgZXhwb3J0IGNvbnN0IGZsYXQgPSBuZXcgRnVuY3Rpb25CdWlsZGVyKFwiZmxhdFwiKVxuICAgICAgICAuYWRkMShcImFycmF5XCIsIChhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYS5mbGF0KCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQyKFwiYXJyYXlcIiwgXCJudW1iZXJcIiwgKGEsIG4pID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHJldHVybiBhLmZsYXQobik7XG4gICAgICAgIH0pXG4gICAgICAgIC5hZGQxKFwibnVsbFwiLCAoKSA9PiBudWxsKVxuICAgICAgICAuYnVpbGQoKTtcbn1cblxuLyoqIERlZmF1bHQgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIGZvciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0b3IuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GVU5DVElPTlM6IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uSW1wbD4gPSB7XG4gICAgLy8gQ29uc3RydWN0b3JzLlxuICAgIGxpc3Q6IERlZmF1bHRGdW5jdGlvbnMubGlzdCxcbiAgICBhcnJheTogRGVmYXVsdEZ1bmN0aW9ucy5saXN0LFxuICAgIGxpbms6IERlZmF1bHRGdW5jdGlvbnMubGluayxcbiAgICBlbWJlZDogRGVmYXVsdEZ1bmN0aW9ucy5lbWJlZCxcbiAgICBkYXRlOiBEZWZhdWx0RnVuY3Rpb25zLmRhdGUsXG4gICAgZHVyOiBEZWZhdWx0RnVuY3Rpb25zLmR1cixcbiAgICBkYXRlZm9ybWF0OiBEZWZhdWx0RnVuY3Rpb25zLmRhdGVmb3JtYXQsXG4gICAgbG9jYWx0aW1lOiBEZWZhdWx0RnVuY3Rpb25zLmxvY2FsdGltZSxcbiAgICBudW1iZXI6IERlZmF1bHRGdW5jdGlvbnMubnVtYmVyLFxuICAgIHN0cmluZzogRGVmYXVsdEZ1bmN0aW9ucy5zdHJpbmcsXG4gICAgb2JqZWN0OiBEZWZhdWx0RnVuY3Rpb25zLm9iamVjdCxcbiAgICB0eXBlb2Y6IERlZmF1bHRGdW5jdGlvbnMudHlwZU9mLFxuXG4gICAgLy8gTWF0aCBPcGVyYXRpb25zLlxuICAgIHJvdW5kOiBEZWZhdWx0RnVuY3Rpb25zLnJvdW5kLFxuICAgIG1pbjogRGVmYXVsdEZ1bmN0aW9ucy5taW4sXG4gICAgbWF4OiBEZWZhdWx0RnVuY3Rpb25zLm1heCxcbiAgICBtaW5ieTogRGVmYXVsdEZ1bmN0aW9ucy5taW5ieSxcbiAgICBtYXhieTogRGVmYXVsdEZ1bmN0aW9ucy5tYXhieSxcblxuICAgIC8vIFN0cmluZyBvcGVyYXRpb25zLlxuICAgIHJlZ2V4cmVwbGFjZTogRGVmYXVsdEZ1bmN0aW9ucy5yZWdleHJlcGxhY2UsXG4gICAgcmVnZXh0ZXN0OiBEZWZhdWx0RnVuY3Rpb25zLnJlZ2V4dGVzdCxcbiAgICByZWdleG1hdGNoOiBEZWZhdWx0RnVuY3Rpb25zLnJlZ2V4bWF0Y2gsXG4gICAgcmVwbGFjZTogRGVmYXVsdEZ1bmN0aW9ucy5yZXBsYWNlLFxuICAgIGxvd2VyOiBEZWZhdWx0RnVuY3Rpb25zLmxvd2VyLFxuICAgIHVwcGVyOiBEZWZhdWx0RnVuY3Rpb25zLnVwcGVyLFxuICAgIHNwbGl0OiBEZWZhdWx0RnVuY3Rpb25zLnNwbGl0LFxuICAgIHN0YXJ0c3dpdGg6IERlZmF1bHRGdW5jdGlvbnMuc3RhcnRzd2l0aCxcbiAgICBlbmRzd2l0aDogRGVmYXVsdEZ1bmN0aW9ucy5lbmRzd2l0aCxcbiAgICBwYWRsZWZ0OiBEZWZhdWx0RnVuY3Rpb25zLnBhZGxlZnQsXG4gICAgcGFkcmlnaHQ6IERlZmF1bHRGdW5jdGlvbnMucGFkcmlnaHQsXG4gICAgc3Vic3RyaW5nOiBEZWZhdWx0RnVuY3Rpb25zLnN1YnN0cmluZyxcbiAgICB0cnVuY2F0ZTogRGVmYXVsdEZ1bmN0aW9ucy50cnVuY2F0ZSxcblxuICAgIC8vIERhdGUgT3BlcmF0aW9ucy5cbiAgICBzdHJpcHRpbWU6IERlZmF1bHRGdW5jdGlvbnMuc3RyaXB0aW1lLFxuXG4gICAgLy8gTGlzdCBvcGVyYXRpb25zLlxuICAgIGxlbmd0aDogRGVmYXVsdEZ1bmN0aW9ucy5sZW5ndGgsXG4gICAgY29udGFpbnM6IERlZmF1bHRGdW5jdGlvbnMuY29udGFpbnMsXG4gICAgaWNvbnRhaW5zOiBEZWZhdWx0RnVuY3Rpb25zLmljb250YWlucyxcbiAgICBlY29udGFpbnM6IERlZmF1bHRGdW5jdGlvbnMuZWNvbnRhaW5zLFxuICAgIGNvbnRhaW5zd29yZDogRGVmYXVsdEZ1bmN0aW9ucy5jb250YWluc3dvcmQsXG4gICAgcmV2ZXJzZTogRGVmYXVsdEZ1bmN0aW9ucy5yZXZlcnNlLFxuICAgIHNvcnQ6IERlZmF1bHRGdW5jdGlvbnMuc29ydCxcbiAgICBmbGF0OiBEZWZhdWx0RnVuY3Rpb25zLmZsYXQsXG5cbiAgICAvLyBBZ2dyZWdhdGlvbiBvcGVyYXRpb25zIGxpa2UgcmVkdWNlLlxuICAgIHJlZHVjZTogRGVmYXVsdEZ1bmN0aW9ucy5yZWR1Y2UsXG4gICAgam9pbjogRGVmYXVsdEZ1bmN0aW9ucy5qb2luLFxuICAgIHN1bTogRGVmYXVsdEZ1bmN0aW9ucy5zdW0sXG4gICAgcHJvZHVjdDogRGVmYXVsdEZ1bmN0aW9ucy5wcm9kdWN0LFxuICAgIGF2ZXJhZ2U6IERlZmF1bHRGdW5jdGlvbnMuYXZlcmFnZSxcbiAgICBhbGw6IERlZmF1bHRGdW5jdGlvbnMuYWxsLFxuICAgIGFueTogRGVmYXVsdEZ1bmN0aW9ucy5hbnksXG4gICAgbm9uZTogRGVmYXVsdEZ1bmN0aW9ucy5ub25lLFxuICAgIGZpbHRlcjogRGVmYXVsdEZ1bmN0aW9ucy5maWx0ZXIsXG4gICAgbWFwOiBEZWZhdWx0RnVuY3Rpb25zLm1hcCxcbiAgICBub25udWxsOiBEZWZhdWx0RnVuY3Rpb25zLm5vbm51bGwsXG5cbiAgICAvLyBPYmplY3QvVXRpbGl0eSBvcGVyYXRpb25zLlxuICAgIGV4dHJhY3Q6IERlZmF1bHRGdW5jdGlvbnMuZXh0cmFjdCxcbiAgICBkZWZhdWx0OiBEZWZhdWx0RnVuY3Rpb25zLmZkZWZhdWx0LFxuICAgIGxkZWZhdWx0OiBEZWZhdWx0RnVuY3Rpb25zLmxkZWZhdWx0LFxuICAgIGNob2ljZTogRGVmYXVsdEZ1bmN0aW9ucy5jaG9pY2UsXG4gICAgbWV0YTogRGVmYXVsdEZ1bmN0aW9ucy5tZXRhLFxufTtcbiIsICIvKiogQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcXVlcnkgbGFuZ3VhZ2UgZXZhbHVhdGlvbiBlbmdpbmUuICovXG5cbmltcG9ydCB7IERhdGFPYmplY3QsIExpbmssIExpdGVyYWwsIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcImFwaS9yZXN1bHRcIjtcbmltcG9ydCB7IEJpbmFyeU9wSGFuZGxlciwgY3JlYXRlQmluYXJ5T3BzIH0gZnJvbSBcIi4vYmluYXJ5b3BcIjtcbmltcG9ydCB7IEV4cHJlc3Npb24sIEV4cHJlc3Npb25zIH0gZnJvbSBcImV4cHJlc3Npb24vZXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgREVGQVVMVF9GVU5DVElPTlMsIEZ1bmN0aW9uSW1wbCB9IGZyb20gXCIuL2Z1bmN0aW9uc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3MgfSBmcm9tIFwic2V0dGluZ3NcIjtcbmltcG9ydCB7IEZpZWxkYmVhcmluZywgRmllbGRiZWFyaW5ncyB9IGZyb20gXCIuL2ZpZWxkXCI7XG5cbi8qKiBIYW5kbGVzIGxpbmsgcmVzb2x1dGlvbiBhbmQgbm9ybWFsaXphdGlvbiBpbnNpZGUgb2YgYSBjb250ZXh0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rSGFuZGxlciB7XG4gICAgLyoqIFJlc29sdmUgYSBsaW5rIHRvIHRoZSBtZXRhZGF0YSBpdCBjb250YWlucy4gKi9cbiAgICByZXNvbHZlKHBhdGg6IHN0cmluZyB8IExpbmspOiBEYXRhT2JqZWN0IHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgYSBsaW5rIHRvIGl0J3MgZnVsbHktcXVhbGlmaWVkIHBhdGggZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuXG4gICAgICogSWYgdGhlIHBhdGggZG9lcyBub3QgZXhpc3QsIHJldHVybnMgaXQgdW5jaGFuZ2VkLlxuICAgICAqL1xuICAgIG5vcm1hbGl6ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBwYXRoIGFjdHVhbGx5IGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLiAqL1xuICAgIGV4aXN0cyhwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xufVxuXG4vKiogU291cmNlIG9mIHZhcmlhYmxlcyB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBpbiB0aGUgZXZhbHVhdG9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYXJpYWJsZXMge1xuICAgIC8qKiBSZW5kZXIgdGhlIGVudGlyZSB2YXJpYWJsZSBzdG9yZSB0byBhIGtleS12YWx1ZSBtYXAuICovXG4gICAgYWxsKCk6IERhdGFPYmplY3Q7XG5cbiAgICAvKiogUmVzb2x2ZSBhIHZhcmlhYmxlIGJ5IG5hbWUuICovXG4gICAgcmVzb2x2ZShuYW1lOiBzdHJpbmcpOiBMaXRlcmFsIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEV2YWx1YXRpb24gY29udGV4dCB0aGF0IGV4cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQgaW4uIEluY2x1ZGVzIGdsb2JhbCBzdGF0ZSwgYXMgd2VsbCBhcyBhdmFpbGFibGUgZnVuY3Rpb25zIGFuZCBhIGhhbmRsZXJcbiAqIGZvciBiaW5hcnkgb3BlcmF0b3JzLlxuICovXG5leHBvcnQgY2xhc3MgRXZhbHVhdG9yIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgY29udGV4dCB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2Ugb2YgZ2xvYmFscywgYXMgd2VsbCBhcyBvcHRpb25hbGx5IHdpdGggY3VzdG9tIGJpbmFyeSBvcGVyYXRvciwgZnVuY3Rpb24sXG4gICAgICogYW5kIGxpbmsgaGFuZGxlcnMuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgbGlua0hhbmRsZXI6IExpbmtIYW5kbGVyLFxuICAgICAgICBwdWJsaWMgc2V0dGluZ3M6IFNldHRpbmdzLFxuICAgICAgICBwdWJsaWMgZ2xvYmFsczogUmVjb3JkPHN0cmluZywgTGl0ZXJhbD4gPSB7fSxcbiAgICAgICAgcHVibGljIGJpbmFyeU9wczogQmluYXJ5T3BIYW5kbGVyID0gY3JlYXRlQmluYXJ5T3BzKGxpbmtIYW5kbGVyLm5vcm1hbGl6ZSksXG4gICAgICAgIHB1YmxpYyBmdW5jdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uSW1wbD4gPSBERUZBVUxUX0ZVTkNUSU9OU1xuICAgICkge31cblxuICAgIC8qKiBTZXQgYSBnbG9iYWwgdmFsdWUgaW4gdGhpcyBjb250ZXh0LiAqL1xuICAgIHB1YmxpYyBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogTGl0ZXJhbCk6IEV2YWx1YXRvciB7XG4gICAgICAgIHRoaXMuZ2xvYmFsc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSB2YWx1ZSBvZiBhIGdsb2JhbCB2YXJpYWJsZSBieSBuYW1lLiBSZXR1cm5zIG51bGwgaWYgbm90IHByZXNlbnQuICovXG4gICAgcHVibGljIGdldChuYW1lOiBzdHJpbmcpOiBMaXRlcmFsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsc1tuYW1lXSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKiBUcnkgdG8gZXZhbHVhdGUgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gaW4gdGhpcyBjb250ZXh0LCByYWlzaW5nIGFuIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLiAqL1xuICAgIHB1YmxpYyB0cnlFdmFsdWF0ZShleHByOiBFeHByZXNzaW9uLCB2YXJpYWJsZXM6IFZhcmlhYmxlcyA9IFZhcmlhYmxlcy5lbXB0eSgpKTogTGl0ZXJhbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKGV4cHIsIHZhcmlhYmxlcykub3JFbHNlVGhyb3coKTtcbiAgICB9XG5cbiAgICAvKiogRXZhbHVhdGUgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gaW4gdGhpcyBjb250ZXh0LiAqL1xuICAgIHB1YmxpYyBldmFsdWF0ZShleHByOiBFeHByZXNzaW9uLCB2YXJpYWJsZXM6IFZhcmlhYmxlcyA9IFZhcmlhYmxlcy5lbXB0eSgpKTogUmVzdWx0PExpdGVyYWwsIHN0cmluZz4ge1xuICAgICAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoZXhwci52YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIFwidmFyaWFibGVcIjpcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5uYW1lID09PSBFeHByZXNzaW9ucy5ST1cpIHJldHVybiBSZXN1bHQuc3VjY2Vzcyh2YXJpYWJsZXMuYWxsKCkpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSB2YXJpYWJsZXMucmVzb2x2ZShleHByLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MocmVzb2x2ZWQpO1xuICAgICAgICAgICAgICAgIGlmIChleHByLm5hbWUgaW4gdGhpcy5nbG9iYWxzKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3ModGhpcy5nbG9iYWxzW2V4cHIubmFtZV0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKG51bGwpO1xuICAgICAgICAgICAgY2FzZSBcIm5lZ2F0ZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShleHByLmNoaWxkLCB2YXJpYWJsZXMpLm1hcCgocykgPT4gIUxpdGVyYWxzLmlzVHJ1dGh5KHMpKTtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlvcFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmxhdE1hcDIoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGUoZXhwci5sZWZ0LCB2YXJpYWJsZXMpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlKGV4cHIucmlnaHQsIHZhcmlhYmxlcyksXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiB0aGlzLmJpbmFyeU9wcy5ldmFsdWF0ZShleHByLm9wLCBhLCBiLCB0aGlzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBleHByLnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViZXZhbCA9IHRoaXMuZXZhbHVhdGUoY2hpbGQsIHZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3ViZXZhbC5zdWNjZXNzZnVsKSByZXR1cm4gc3ViZXZhbDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3ViZXZhbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQpO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIGxldCBvYmpSZXN1bHQ6IERhdGFPYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMoZXhwci52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJldmFsID0gdGhpcy5ldmFsdWF0ZShjaGlsZCwgdmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJldmFsLnN1Y2Nlc3NmdWwpIHJldHVybiBzdWJldmFsO1xuICAgICAgICAgICAgICAgICAgICBvYmpSZXN1bHRba2V5XSA9IHN1YmV2YWwudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhvYmpSZXN1bHQpO1xuICAgICAgICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICAgICAgICAgIC8vIEp1c3QgcmVseWluZyBvbiBKUyB0byBjYXB0dXJlICdkYXRhJyBmb3IgdXMgaW1wbGljaXRseTsgdW5zdXJlXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBjb3JyZWN0IHRoaW5nIHRvIGRvLiBDb3VsZCBjYXVzZSB3ZWlyZCBiZWhhdmlvcnMuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKChjdHg6IEV2YWx1YXRvciwgLi4uYXJnczogTGl0ZXJhbFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsb2NhbHM6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFyZyA9IDA7IGFyZyA8IE1hdGgubWluKGFyZ3MubGVuZ3RoLCBleHByLmFyZ3VtZW50cy5sZW5ndGgpOyBhcmcrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzW2V4cHIuYXJndW1lbnRzW2FyZ11dID0gYXJnc1thcmddO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5ldmFsdWF0ZShleHByLnZhbHVlLCBWYXJpYWJsZXMubGFtYmRhKHZhcmlhYmxlcywgbG9jYWxzKSkub3JFbHNlVGhyb3coKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIGxldCByYXdGdW5jID1cbiAgICAgICAgICAgICAgICAgICAgZXhwci5mdW5jLnR5cGUgPT0gXCJ2YXJpYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFJlc3VsdC5zdWNjZXNzPHN0cmluZywgc3RyaW5nPihleHByLmZ1bmMubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5ldmFsdWF0ZShleHByLmZ1bmMsIHZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyYXdGdW5jLnN1Y2Nlc3NmdWwpIHJldHVybiByYXdGdW5jO1xuICAgICAgICAgICAgICAgIGxldCBmdW5jID0gcmF3RnVuYy52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGxldCBhcmdzOiBMaXRlcmFsW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhcmcgb2YgZXhwci5hcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkID0gdGhpcy5ldmFsdWF0ZShhcmcsIHZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZWQuc3VjY2Vzc2Z1bCkgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2gocmVzb2x2ZWQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBjYWxsOiBGdW5jdGlvbkltcGw7XG4gICAgICAgICAgICAgICAgaWYgKExpdGVyYWxzLmlzRnVuY3Rpb24oZnVuYykpIGNhbGwgPSBmdW5jIGFzIEZ1bmN0aW9uSW1wbDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChMaXRlcmFscy5pc1N0cmluZyhmdW5jKSAmJiBmdW5jIGluIHRoaXMuZnVuY3Rpb25zKSBjYWxsID0gdGhpcy5mdW5jdGlvbnNbZnVuY107XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoTGl0ZXJhbHMuaXNTdHJpbmcoZnVuYykpIHJldHVybiBSZXN1bHQuZmFpbHVyZShgVW5yZWNvZ25pemVkIGZ1bmN0aW9uIG5hbWUgJyR7ZnVuY30nYCk7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gUmVzdWx0LmZhaWx1cmUoYENhbm5vdCBjYWxsIHR5cGUgJyR7TGl0ZXJhbHMudHlwZU9mKGZ1bmMpfScgYXMgYSBmdW5jdGlvbmApO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKGNhbGwodGhpcywgLi4uYXJncykpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiogR2V0IHZhcmlhYmxlcyBmcm9tIGEgcGxhaW4gb2JqZWN0LiAqL1xuZXhwb3J0IGNsYXNzIE9iamVjdFZhcmlhYmxlcyBpbXBsZW1lbnRzIFZhcmlhYmxlcyB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBvYmplY3Q6IERhdGFPYmplY3QpIHt9XG5cbiAgICBwdWJsaWMgYWxsKCk6IERhdGFPYmplY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmUobmFtZTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLm9iamVjdFtuYW1lXTtcbiAgICB9XG59XG5cbi8qKiBHZXQgdmFyaWFibGVzIGZyb20gYSBmaWVsZC1iZWFyaW5nIG9iamVjdCAod2hpY2ggc3VwcG9ydHMgY2FzZSBpbnNlbnNpdGl2aXR5KS4gKi9cbmV4cG9ydCBjbGFzcyBGaWVsZGJlYXJpbmdWYXJpYWJsZXMgaW1wbGVtZW50cyBWYXJpYWJsZXMge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqZWN0OiBGaWVsZGJlYXJpbmcpIHt9XG5cbiAgICBwdWJsaWMgYWxsKCk6IERhdGFPYmplY3Qge1xuICAgICAgICBjb25zdCBvYmplY3Q6IERhdGFPYmplY3QgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLm9iamVjdC5maWVsZHMpIHtcbiAgICAgICAgICAgIG9iamVjdFtmaWVsZC5rZXldID0gZmllbGQudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlKG5hbWU6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QuZmllbGQobmFtZSk/LnZhbHVlO1xuICAgIH1cbn1cblxuLyoqIERlbGVnYXRlIHRvIGxvY2FsIGNvbnRleHQgZmlyc3QsIHRoZW4gdG8gcGFyZW50IGNvbnRleHQgaWYgbm90IGF2YWlsYWJsZS4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFWYXJpYWJsZXMgaW1wbGVtZW50cyBWYXJpYWJsZXMge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyZW50OiBWYXJpYWJsZXMsIHB1YmxpYyBsb2NhbHM6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+KSB7fVxuXG4gICAgcHVibGljIGFsbCgpOiBEYXRhT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5wYXJlbnQuYWxsKCksIC4uLnRoaXMubG9jYWxzIH07XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmUobmFtZTogc3RyaW5nKTogTGl0ZXJhbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2Fsc1tuYW1lXSA/PyB0aGlzLnBhcmVudC5yZXNvbHZlKG5hbWUpO1xuICAgIH1cbn1cblxuLyoqIERlZmF1bHQgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIG1ha2luZyB2YXJpYWJsZSBzdG9yZXMuICovXG5leHBvcnQgbmFtZXNwYWNlIFZhcmlhYmxlcyB7XG4gICAgZXhwb3J0IGZ1bmN0aW9uIGVtcHR5KCkge1xuICAgICAgICByZXR1cm4gbmV3IE9iamVjdFZhcmlhYmxlcyh7fSk7XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGluZmVyKG9iamVjdDogYW55KTogVmFyaWFibGVzIHtcbiAgICAgICAgaWYgKEZpZWxkYmVhcmluZ3MuaXNGaWVsZGJlYXJpbmcob2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWVsZGJlYXJpbmdWYXJpYWJsZXMob2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0VmFyaWFibGVzKG9iamVjdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gbGFtYmRhKHBhcmVudDogVmFyaWFibGVzLCBsb2NhbHM6IFJlY29yZDxzdHJpbmcsIExpdGVyYWw+KTogVmFyaWFibGVzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMYW1iZGFWYXJpYWJsZXMocGFyZW50LCBsb2NhbHMpO1xuICAgIH1cbn1cbiIsICIvLyEgUHJvdmlkZXMgdXRpbGl0aWVzIGZvciBleGVjdXRpbmcgcXVlcmllcyBhZ2FpbnN0IHRoZSBzdG9yYWdlIGxheWVyLlxuaW1wb3J0IHsgSW5kZXhQcmltaXRpdmUsIEluZGV4UXVlcnksIEluZGV4U291cmNlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4LXF1ZXJ5XCI7XG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlcnMgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWx0ZXJzXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuaW1wb3J0IHsgRXhwcmVzc2lvbiwgRXhwcmVzc2lvbnMgfSBmcm9tIFwiZXhwcmVzc2lvbi9leHByZXNzaW9uXCI7XG5pbXBvcnQgeyBFdmFsdWF0b3IsIFZhcmlhYmxlcyB9IGZyb20gXCJleHByZXNzaW9uL2V2YWx1YXRvclwiO1xuaW1wb3J0IHsgSW5kZXhhYmxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgTGl0ZXJhbHMgfSBmcm9tIFwiZXhwcmVzc2lvbi9saXRlcmFsXCI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSW5kZXggUXVlcnkgT3B0aW1pemF0aW9uIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIFBlcmZvcm0gc2ltcGxlIHJlY3Vyc2l2ZSBvcHRpbWl6YXRpb25zIG92ZXIgYW4gaW5kZXggcXVlcnksIHN1Y2ggYXMgY29uc3RhbnQgZm9sZGluZyBhbmQgZGUtbmVzdGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcHRpbWl6ZVF1ZXJ5KHF1ZXJ5OiBJbmRleFF1ZXJ5KTogSW5kZXhRdWVyeSB7XG4gICAgcXVlcnkgPSBkZW5lc3QocXVlcnkpO1xuICAgIHF1ZXJ5ID0gY29uc3RhbnRmb2xkKHF1ZXJ5KTtcblxuICAgIHJldHVybiBxdWVyeTtcbn1cblxuLyoqIERlLW5lc3QgcmVjdXJzaXZlbHkgbmVzdGVkIEFORCBhbmQgT1IgcXVlcmllcyBpbnRvIGEgc2luZ2xlIHRvcC1sZXZlbCBhbmQvb3IuICovXG5mdW5jdGlvbiBkZW5lc3QocXVlcnk6IEluZGV4UXVlcnkpOiBJbmRleFF1ZXJ5IHtcbiAgICBzd2l0Y2ggKHF1ZXJ5LnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImFuZFwiOlxuICAgICAgICAgICAgY29uc3QgYW5kcyA9IHF1ZXJ5LmVsZW1lbnRzLmZsYXRNYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXhlZCA9IGRlbmVzdChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZml4ZWQudHlwZSA9PT0gXCJhbmRcIikgcmV0dXJuIGZpeGVkLmVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIFtmaXhlZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiYW5kXCIsIGVsZW1lbnRzOiBhbmRzIH07XG4gICAgICAgIGNhc2UgXCJvclwiOlxuICAgICAgICAgICAgY29uc3Qgb3JzID0gcXVlcnkuZWxlbWVudHMuZmxhdE1hcCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpeGVkID0gZGVuZXN0KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChmaXhlZC50eXBlID09PSBcIm9yXCIpIHJldHVybiBmaXhlZC5lbGVtZW50cztcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBbZml4ZWRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIm9yXCIsIGVsZW1lbnRzOiBvcnMgfTtcbiAgICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3RcIiwgZWxlbWVudDogZGVuZXN0KHF1ZXJ5LmVsZW1lbnQpIH07XG4gICAgICAgIGNhc2UgXCJjaGlsZC1vZlwiOlxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5LCB7IHBhcmVudHM6IGRlbmVzdChxdWVyeS5wYXJlbnRzKSB9KTtcbiAgICAgICAgY2FzZSBcInBhcmVudC1vZlwiOlxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5LCB7IGNoaWxkcmVuOiBkZW5lc3QocXVlcnkuY2hpbGRyZW4pIH0pO1xuICAgICAgICBjYXNlIFwibGlua2VkXCI6XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnksIHsgc291cmNlOiBkZW5lc3QocXVlcnkuc291cmNlKSB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG59XG5cbi8qKiBQZXJmb3JtIGNvbnN0YW50IGZvbGRpbmcgYnkgZWxpbWluYXRpbmcgZGVhZCAndHJ1ZScgYW5kICdmYWxzZScgdGVybXMuICovXG5mdW5jdGlvbiBjb25zdGFudGZvbGQocXVlcnk6IEluZGV4UXVlcnkpOiBJbmRleFF1ZXJ5IHtcbiAgICBzd2l0Y2ggKHF1ZXJ5LnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImFuZFwiOlxuICAgICAgICAgICAgY29uc3QgYWNoaWxkcmVuID0gW10gYXMgSW5kZXhRdWVyeVtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBxdWVyeS5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbGRlZCA9IGNvbnN0YW50Zm9sZChjaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBFbGltaW5hdGUgJ3RydWUnIGNvbnN0YW50cyBhbmQgZWxpbWluYXRlIHRoZSBlbnRpcmUgYW5kIG9uIGEgJ2ZhbHNlJyBjb25zdGFudC5cbiAgICAgICAgICAgICAgICBpZiAoZm9sZGVkLnR5cGUgPT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVkLmNvbnN0YW50KSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFjaGlsZHJlbi5wdXNoKGZvbGRlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwiYW5kXCIsIGVsZW1lbnRzOiBhY2hpbGRyZW4gfTtcbiAgICAgICAgY2FzZSBcIm9yXCI6XG4gICAgICAgICAgICBjb25zdCBvY2hpbGRyZW4gPSBbXSBhcyBJbmRleFF1ZXJ5W107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHF1ZXJ5LmVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9sZGVkID0gY29uc3RhbnRmb2xkKGNoaWxkKTtcblxuICAgICAgICAgICAgICAgIC8vIEVsaW1pbmF0ZSAnZmFsc2UnIGNvbnN0YW50cyBhbmQgc2hvcnQgY2lyY3VpdCBvbiBhICd0cnVlJyBjb25zdGFudC5cbiAgICAgICAgICAgICAgICBpZiAoZm9sZGVkLnR5cGUgPT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbGRlZC5jb25zdGFudCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9jaGlsZHJlbi5wdXNoKGZvbGRlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwib3JcIiwgZWxlbWVudHM6IG9jaGlsZHJlbiB9O1xuICAgICAgICBjYXNlIFwibm90XCI6XG4gICAgICAgICAgICBjb25zdCBmb2xkZWQgPSBjb25zdGFudGZvbGQocXVlcnkuZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChmb2xkZWQudHlwZSA9PT0gXCJjb25zdGFudFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJjb25zdGFudFwiLCBjb25zdGFudDogIWZvbGRlZC5jb25zdGFudCB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5vdFwiLCBlbGVtZW50OiBmb2xkZWQgfTtcbiAgICAgICAgY2FzZSBcImNoaWxkLW9mXCI6XG4gICAgICAgICAgICAvLyBwYXJlbnRzID0gRU1QVFkgbWVhbnMgdGhpcyB3aWxsIGFsc28gYmUgZW1wdHkuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRzID0gY29uc3RhbnRmb2xkKHF1ZXJ5LnBhcmVudHMpO1xuICAgICAgICAgICAgaWYgKHBhcmVudHMudHlwZSA9PT0gXCJjb25zdGFudFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRzLmNvbnN0YW50KSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmVudHMuY29uc3RhbnQgJiYgcXVlcnkuaW5jbHVzaXZlKSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgeyBwYXJlbnRzIH0pO1xuICAgICAgICBjYXNlIFwicGFyZW50LW9mXCI6XG4gICAgICAgICAgICAvLyBjaGlsZHJlbiA9IEVNUFRZIG1lYW5zIHRoaXMgd2lsbCBhbHNvIGJlIGVtcHR5LlxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjb25zdGFudGZvbGQocXVlcnkuY2hpbGRyZW4pO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnR5cGUgPT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW4uY29uc3RhbnQpIHJldHVybiB7IHR5cGU6IFwiY29uc3RhbnRcIiwgY29uc3RhbnQ6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRyZW4uY29uc3RhbnQgJiYgcXVlcnkuaW5jbHVzaXZlKSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSwgeyBjaGlsZHJlbiB9KTtcbiAgICAgICAgY2FzZSBcImxpbmtlZFwiOlxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gY29uc3RhbnRmb2xkKHF1ZXJ5LnNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoc291cmNlLnR5cGUgPT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghc291cmNlLmNvbnN0YW50KSByZXR1cm4geyB0eXBlOiBcImNvbnN0YW50XCIsIGNvbnN0YW50OiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZS5jb25zdGFudCAmJiBxdWVyeS5pbmNsdXNpdmUpIHJldHVybiB7IHR5cGU6IFwiY29uc3RhbnRcIiwgY29uc3RhbnQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5LCB7IHNvdXJjZSB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBJbmRleCBRdWVyeSBFeGVjdXRvciAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqIEludGVyZmFjZSBwcm92aWRlZCB0byB0aGUgcXVlcnkgZXhlY3V0b3IgdG8gcmVzb2x2ZSBxdWVyeSBsZWFmIG5vZGVzIChsaWtlIFwiZmluZCBhbGwgcGFnZXMgbWF0Y2hpbmcgJyN0YWcnXCIpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleFJlc29sdmVyPFQ+IHtcbiAgICAvKiogVGhlIHNldCBvZiBhbGwgcG9zc2libGUgb2JqZWN0cy4gKi9cbiAgICB1bml2ZXJzZTogU2V0PFQ+O1xuXG4gICAgLyoqIFJlc29sdmUgYW4gYXJiaXRyYXJ5IGluZGV4IHNvdXJjZSAobGlrZSBcImZpbmQgYWxsIHBhZ2VzIG1hdGNoaW5nICcjdGFnJ1wiKSBpbnRvIGEgZmlsdGVyLiAgKi9cbiAgICByZXNvbHZlKGxlYWY6IEluZGV4U291cmNlKTogUmVzdWx0PEZpbHRlcjxUPiwgc3RyaW5nPjtcblxuICAgIC8qKiBSZXNvbHZlIGFuIGluZGV4IHByaW1pdGl2ZSwgd2hpY2ggaXMgZ2FyYXVudGVlZCB0byBuZXZlciByYWlzZSBhbiBleGNlcHRpb24uICovXG4gICAgcmVzb2x2ZVByaW1pdGl2ZShsZWFmOiBJbmRleFByaW1pdGl2ZSk6IEZpbHRlcjxUPjtcblxuICAgIC8qKiBMb2FkIGEgc3BlY2lmaWMgb2JqZWN0IGlmIGF2YWlsYWJsZS4gKi9cbiAgICBsb2FkKGlkOiBUKTogSW5kZXhhYmxlIHwgdW5kZWZpbmVkO1xufVxuXG4vKiogRXhlY3V0ZSBhIHF1ZXJ5LCB1c2luZyB0aGUgZ2l2ZW4gcmVzb2x2ZXIgdG8gZXhlY3V0ZSB0aGUgbGVhZiBub2RlcyBhbmQgdGhlIGdpdmVuIGV2YWx1YXRvciB0byByZXNvbHZlIGV4cHJlc3Npb25zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGU8VD4oXG4gICAgcXVlcnk6IEluZGV4UXVlcnksXG4gICAgcmVzb2x2ZXI6IEluZGV4UmVzb2x2ZXI8VD4sXG4gICAgZXZhbHVhdG9yOiBFdmFsdWF0b3Jcbik6IFJlc3VsdDxGaWx0ZXI8VD4sIHN0cmluZz4ge1xuICAgIHJldHVybiBzaW1wbGlmeShxdWVyeSwgcmVzb2x2ZXIpLmZsYXRNYXAoKHRyZWUpID0+IGNvbGxhcHNlKHRyZWUsIHJlc29sdmVyLCBldmFsdWF0b3IpKTtcbn1cblxuLyoqIFNpbXBsaWZ5IGEgdHJlZSwgY29tYmluaW5nIHByaW1pdGl2ZXMgaW4gQU5Ecy9PUnMuICovXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxpZnk8VD4ocXVlcnk6IEluZGV4UXVlcnksIHJlc29sdmVyOiBJbmRleFJlc29sdmVyPFQ+KTogUmVzdWx0PEZpbHRlclRyZWU8VD4sIHN0cmluZz4ge1xuICAgIHN3aXRjaCAocXVlcnkudHlwZSkge1xuICAgICAgICBjYXNlIFwiYW5kXCI6XG4gICAgICAgICAgICAvLyBUT0RPOiBFYXJseSByZXR1cm4gb24gYSBOT1RISU5HIGluc2lkZSB0aGUgbWFwQWxsIGxvb3AuXG4gICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm1hcEFsbChxdWVyeS5lbGVtZW50cywgKGNoaWxkKSA9PiBzaW1wbGlmeShjaGlsZCwgcmVzb2x2ZXIpKS5tYXAoKGVsZW1lbnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gZWxlbWVudHMuZmxhdE1hcCgoZWxlbWVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID09PSBcImFuZFwiID8gZWxlbWVudC5lbGVtZW50cyA6IFtlbGVtZW50XVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcjogRmlsdGVyVHJlZTxUPltdID0gW107XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbWl0aXZlID0gRmlsdGVycy5sYXp5SW50ZXJzZWN0KGZsYXR0ZW5lZCwgKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJmaWx0ZXJcIikgcmV0dXJuIGVsZW1lbnQuZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBFYXJseSByZXR1cm4gb24gTk9USElORyAobm90aGluZyB3aWxsIG1hdGNoKSwgYW5kIHNraXAgb24gTk9USElORy5cbiAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlLnR5cGUgPT09IFwibm90aGluZ1wiKSByZXR1cm4geyB0eXBlOiBcImZpbHRlclwiLCBmaWx0ZXI6IEZpbHRlcnMuTk9USElORyB9O1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZS50eXBlICE9IFwiZXZlcnl0aGluZ1wiKSBvdGhlci5wdXNoKEZpbHRlclRyZWVzLmZpbHRlcihwcmltaXRpdmUpKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJUcmVlcy5hbmQob3RoZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJvclwiOlxuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5tYXBBbGwocXVlcnkuZWxlbWVudHMsIChjaGlsZCkgPT4gc2ltcGxpZnkoY2hpbGQsIHJlc29sdmVyKSkubWFwKChlbGVtZW50cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IGVsZW1lbnRzLmZsYXRNYXAoKGVsZW1lbnQpID0+IChlbGVtZW50LnR5cGUgPT09IFwib3JcIiA/IGVsZW1lbnQuZWxlbWVudHMgOiBbZWxlbWVudF0pKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyOiBGaWx0ZXJUcmVlPFQ+W10gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmltaXRpdmUgPSBGaWx0ZXJzLmxhenlVbmlvbihmbGF0dGVuZWQsIChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwiZmlsdGVyXCIpIHJldHVybiBlbGVtZW50LmZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdGhlci5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gRWFybHkgcmV0dXJuIG9uIEVWRVJZVEhJTkcgKGFsbCB3aWxsIG1hdGNoKSwgYW5kIHNraXAgb24gTk9USElORy5cbiAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSByZXR1cm4geyB0eXBlOiBcImZpbHRlclwiLCBmaWx0ZXI6IEZpbHRlcnMuRVZFUllUSElORyB9O1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZS50eXBlICE9IFwibm90aGluZ1wiKSBvdGhlci5wdXNoKEZpbHRlclRyZWVzLmZpbHRlcihwcmltaXRpdmUpKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJUcmVlcy5vcihvdGhlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICAgICAgcmV0dXJuIHNpbXBsaWZ5KHF1ZXJ5LmVsZW1lbnQsIHJlc29sdmVyKS5tYXAoRmlsdGVyVHJlZXMubm90KTtcbiAgICAgICAgY2FzZSBcImV4cHJlc3Npb25cIjpcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBoYXNWYXJpYWJsZXMocXVlcnkuZXhwcmVzc2lvbiwgcmVzb2x2ZXIpO1xuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHsgdHlwZTogXCJzY2FuXCIsIGNhbmRpZGF0ZXMsIGV4cHJlc3Npb246IHF1ZXJ5LmV4cHJlc3Npb24gfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZShxdWVyeSkubWFwKChmaWx0ZXIpID0+ICh7IHR5cGU6IFwiZmlsdGVyXCIsIGZpbHRlciB9KSk7XG4gICAgfVxufVxuXG4vKiogQ29sbGFwc2UgYSBmaWx0ZXIgdHJlZSBieSBldmFsdWF0aW5nIGFsbCBzY2FucyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxhcHNlPFQ+KFxuICAgIHRyZWU6IEZpbHRlclRyZWU8VD4sXG4gICAgcmVzb2x2ZXI6IEluZGV4UmVzb2x2ZXI8VD4sXG4gICAgZXZhbHVhdG9yOiBFdmFsdWF0b3IsXG4gICAgbGltaXQ6IEZpbHRlcjxUPiA9IEZpbHRlcnMuRVZFUllUSElOR1xuKTogUmVzdWx0PEZpbHRlcjxUPiwgc3RyaW5nPiB7XG4gICAgc3dpdGNoICh0cmVlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm9yXCI6XG4gICAgICAgICAgICByZXR1cm4gRmlsdGVycy5sYXp5RmFpbGFibGVVbmlvbih0cmVlLmVsZW1lbnRzLCAoZWxlbWVudCkgPT4gY29sbGFwc2UoZWxlbWVudCwgcmVzb2x2ZXIsIGV2YWx1YXRvciwgbGltaXQpKTtcbiAgICAgICAgY2FzZSBcImFuZFwiOlxuICAgICAgICAgICAgY29uc3QgcHJpbWl0aXZlcyA9IHRyZWUuZWxlbWVudHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbGVtKTogZWxlbSBpcyB7IHR5cGU6IFwiZmlsdGVyXCI7IGZpbHRlcjogRmlsdGVyPFQ+IH0gPT4gZWxlbS50eXBlID09PSBcImZpbHRlclwiKVxuICAgICAgICAgICAgICAgIC5tYXAoKGYpID0+IGYuZmlsdGVyKTtcbiAgICAgICAgICAgIGxldCByZXN0cmljdGVkTGltaXQgPSBGaWx0ZXJzLmludGVyc2VjdChbbGltaXQsIC4uLnByaW1pdGl2ZXNdKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRyZWUuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcImZpbHRlclwiKSBjb250aW51ZTsgLy8gQWxyZWFkeSBpbiB0aGUgaW50ZXJzZWN0aW9uLlxuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF5YmVFdmFsdWF0ZWQgPSBjb2xsYXBzZShlbGVtZW50LCByZXNvbHZlciwgZXZhbHVhdG9yLCByZXN0cmljdGVkTGltaXQpO1xuICAgICAgICAgICAgICAgIGlmICghbWF5YmVFdmFsdWF0ZWQuc3VjY2Vzc2Z1bCkgcmV0dXJuIG1heWJlRXZhbHVhdGVkLmNhc3QoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRlZCA9IG1heWJlRXZhbHVhdGVkLnZhbHVlO1xuICAgICAgICAgICAgICAgIHJlc3RyaWN0ZWRMaW1pdCA9IEZpbHRlcnMuaW50ZXJzZWN0KFtyZXN0cmljdGVkTGltaXQsIGV2YWx1YXRlZF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3RyaWN0ZWRMaW1pdC50eXBlID09PSBcIm5vdGhpbmdcIikgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN0cmljdGVkTGltaXQpO1xuICAgICAgICBjYXNlIFwibm90XCI6XG4gICAgICAgICAgICByZXR1cm4gY29sbGFwc2UodHJlZS5lbGVtZW50LCByZXNvbHZlciwgZXZhbHVhdG9yLCBsaW1pdCkubWFwKEZpbHRlcnMubmVnYXRlKTtcbiAgICAgICAgY2FzZSBcImZpbHRlclwiOlxuICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHRyZWUuZmlsdGVyKTtcbiAgICAgICAgY2FzZSBcInNjYW5cIjpcbiAgICAgICAgICAgIC8vIExvY2FsIHRyZWUgY2FuZGlkYXRlcyArIGV4aXN0aW5nIGxpbWl0IHRvIHByb2R1Y2UgdGhlIG1pbmltYWwgc2V0IG9mIGNhbmRpZGF0ZXMuXG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gRmlsdGVycy5yZXNvbHZlKEZpbHRlcnMuaW50ZXJzZWN0KFt0cmVlLmNhbmRpZGF0ZXMsIGxpbWl0XSksIHJlc29sdmVyLnVuaXZlcnNlKTtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJTY2FuKGNhbmRpZGF0ZXMsIHRyZWUuZXhwcmVzc2lvbiwgZXZhbHVhdG9yLCByZXNvbHZlcikubWFwKEZpbHRlcnMuYXRvbSk7XG4gICAgfVxufVxuXG4vKiogU2NhbiBvdmVyIGFsbCBjYW5kaWRhdGUgb2JqZWN0cywgcmV0dXJuaW5nIG9iamVjdHMgZm9yIHdoaWNoIHRoZSBnaXZlbiBleHByZXNzaW9uIHJlc29sdmVzIHRvIHRydWUuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyU2NhbjxUPihcbiAgICBjYW5kaWRhdGVzOiBTZXQ8VD4sXG4gICAgZXhwcjogRXhwcmVzc2lvbixcbiAgICBldmFsdWF0b3I6IEV2YWx1YXRvcixcbiAgICByZXNvbHZlcjogSW5kZXhSZXNvbHZlcjxUPlxuKTogUmVzdWx0PFNldDxUPiwgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxUPigpO1xuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gcmVzb2x2ZXIubG9hZChjYW5kaWRhdGUpO1xuICAgICAgICBpZiAoIW9iamVjdCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwciwgVmFyaWFibGVzLmluZmVyKG9iamVjdCkpO1xuICAgICAgICBpZiAoIXZhbHVlLnN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZmFpbHVyZShgRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBleHByZXNzaW9uIFwiJHtFeHByZXNzaW9ucy50b1N0cmluZyhleHByKX1cIjogJHt2YWx1ZS5lcnJvcn1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChMaXRlcmFscy5pc1RydXRoeSh2YWx1ZS52YWx1ZSkpIHJlc3VsdC5hZGQoY2FuZGlkYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhyZXN1bHQpO1xufVxuXG4vKiogRmlsdGVycyBhbiBleHByZXNzaW9uIHRvIGZpbmQgcGFnZXMgdGhhdCBoYXZlIHRoZSB2YXJpYWJsZXMgZm9yIHRoYXQgZXhwcmVzc2lvbi4gICovXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFyaWFibGVzPFQ+KGV4cHI6IEV4cHJlc3Npb24sIHJlc29sdmVyOiBJbmRleFJlc29sdmVyPFQ+KTogRmlsdGVyPFQ+IHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSBFeHByZXNzaW9ucy51bmJvdW5kVmFyaWFibGVzKGV4cHIsIG5ldyBTZXQoW0V4cHJlc3Npb25zLlJPVywgXCJ0aGlzXCJdKSk7XG5cbiAgICAvLyB2YXJpYWJsZXMgPSAwIGltcGxpZXNzIHNvbWUgd2VpcmQgZnVuY3Rpb24gb3IgY29uc3RhbnQgZXhwcmVzc2lvbi5cbiAgICAvLyBUT0RPOiB3ZSBjYW4gcHJvYmFibHkgZXZhbHVhdGUgaXQgd2l0aG91dCBldmVuIHNjYW5uaW5nIHRvIGB0cnVlYCBvciBgZmFsc2VgIGJ1dCB0byBiZSBkZWZlbnNpdmUgaGF2ZSB0byByZXR1cm4gZXZlcnl0aGluZyBmb3Igbm93LlxuICAgIGlmICh2YXJpYWJsZXMuc2l6ZSA9PSAwKSByZXR1cm4gRmlsdGVycy5FVkVSWVRISU5HO1xuXG4gICAgcmV0dXJuIEZpbHRlcnMubGF6eVVuaW9uKHZhcmlhYmxlcywgKHZhcmlhYmxlKSA9PiByZXNvbHZlci5yZXNvbHZlUHJpbWl0aXZlKHsgdHlwZTogXCJmaWVsZFwiLCB2YWx1ZTogdmFyaWFibGUgfSkpO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEZpbHRlciBUcmVlcyAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCB0eXBlIEZpbHRlclRyZWU8VD4gPVxuICAgIHwgeyB0eXBlOiBcImFuZFwiOyBlbGVtZW50czogRmlsdGVyVHJlZTxUPltdIH1cbiAgICB8IHsgdHlwZTogXCJvclwiOyBlbGVtZW50czogRmlsdGVyVHJlZTxUPltdIH1cbiAgICB8IHsgdHlwZTogXCJub3RcIjsgZWxlbWVudDogRmlsdGVyVHJlZTxUPiB9XG4gICAgfCB7IHR5cGU6IFwiZmlsdGVyXCI7IGZpbHRlcjogRmlsdGVyPFQ+IH1cbiAgICB8IHsgdHlwZTogXCJzY2FuXCI7IGNhbmRpZGF0ZXM6IEZpbHRlcjxUPjsgZXhwcmVzc2lvbjogRXhwcmVzc2lvbiB9O1xuXG5leHBvcnQgbmFtZXNwYWNlIEZpbHRlclRyZWVzIHtcbiAgICBleHBvcnQgZnVuY3Rpb24gZmlsdGVyPFQ+KGZpbHRlcjogRmlsdGVyPFQ+KTogRmlsdGVyVHJlZTxUPiB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiZmlsdGVyXCIsIGZpbHRlciB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBhbmQ8VD4oY2hpbGRyZW46IEZpbHRlclRyZWU8VD5bXSk6IEZpbHRlclRyZWU8VD4ge1xuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDApIHJldHVybiBmaWx0ZXIoRmlsdGVycy5FVkVSWVRISU5HKTtcbiAgICAgICAgZWxzZSBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDEpIHJldHVybiBjaGlsZHJlblswXTtcbiAgICAgICAgZWxzZSByZXR1cm4geyB0eXBlOiBcImFuZFwiLCBlbGVtZW50czogY2hpbGRyZW4gfTtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gb3I8VD4oY2hpbGRyZW46IEZpbHRlclRyZWU8VD5bXSk6IEZpbHRlclRyZWU8VD4ge1xuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDApIHJldHVybiBmaWx0ZXIoRmlsdGVycy5OT1RISU5HKTtcbiAgICAgICAgZWxzZSBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDEpIHJldHVybiBjaGlsZHJlblswXTtcbiAgICAgICAgZWxzZSByZXR1cm4geyB0eXBlOiBcIm9yXCIsIGVsZW1lbnRzOiBjaGlsZHJlbiB9O1xuICAgIH1cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBub3Q8VD4oY2hpbGQ6IEZpbHRlclRyZWU8VD4pOiBGaWx0ZXJUcmVlPFQ+IHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IFwiZmlsdGVyXCIpIHJldHVybiB7IHR5cGU6IFwiZmlsdGVyXCIsIGZpbHRlcjogRmlsdGVycy5uZWdhdGUoY2hpbGQuZmlsdGVyKSB9O1xuICAgICAgICBlbHNlIHJldHVybiB7IHR5cGU6IFwibm90XCIsIGVsZW1lbnQ6IGNoaWxkIH07XG4gICAgfVxufVxuIiwgImltcG9ydCB7IExpbmssIExpdGVyYWxzIH0gZnJvbSBcImV4cHJlc3Npb24vbGl0ZXJhbFwiO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJzIH0gZnJvbSBcImV4cHJlc3Npb24vZmlsdGVyc1wiO1xuaW1wb3J0IHsgRm9sZGVySW5kZXggfSBmcm9tIFwiaW5kZXgvc3RvcmFnZS9mb2xkZXJcIjtcbmltcG9ydCB7IEludmVydGVkSW5kZXggfSBmcm9tIFwiaW5kZXgvc3RvcmFnZS9pbnZlcnRlZFwiO1xuaW1wb3J0IHsgSW5kZXhQcmltaXRpdmUsIEluZGV4UXVlcnksIEluZGV4U291cmNlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4LXF1ZXJ5XCI7XG5pbXBvcnQgeyBJbmRleGFibGUsIExJTktBQkxFX1RZUEUsIExJTktCRUFSSU5HX1RZUEUsIFRBR0dBQkxFX1RZUEUgfSBmcm9tIFwiaW5kZXgvdHlwZXMvaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBNZXRhZGF0YUNhY2hlLCBWYXVsdCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgTWFya2Rvd25QYWdlIH0gZnJvbSBcIi4vdHlwZXMvbWFya2Rvd25cIjtcbmltcG9ydCB7IGV4dHJhY3RTdWJ0YWdzLCBub3JtYWxpemVIZWFkZXJGb3JMaW5rIH0gZnJvbSBcInV0aWxzL25vcm1hbGl6ZXJzXCI7XG5pbXBvcnQgRmxhdFF1ZXVlIGZyb20gXCJmbGF0cXVldWVcIjtcbmltcG9ydCB7IEJUcmVlRmllbGRJbmRleCwgRXZlcnl0aGluZ0ZpZWxkSW5kZXgsIEZpZWxkSW5kZXgsIElkRmllbGRJbmRleCwgU2V0RmllbGRJbmRleCB9IGZyb20gXCJpbmRleC9zdG9yYWdlL2ZpZWxkc1wiO1xuaW1wb3J0IHsgRklFTERCRUFSSU5HX1RZUEUsIEZpZWxkLCBGaWVsZGJlYXJpbmcgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgSW5kZXhSZXNvbHZlciwgZXhlY3V0ZSwgb3B0aW1pemVRdWVyeSB9IGZyb20gXCJpbmRleC9zdG9yYWdlL3F1ZXJ5LWV4ZWN1dG9yXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuaW1wb3J0IHsgRXZhbHVhdG9yIH0gZnJvbSBcImV4cHJlc3Npb24vZXZhbHVhdG9yXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuXG4vKiogQ2VudHJhbCwgaW5kZXggc3RvcmFnZSBmb3IgZGF0YWNvcmUgdmFsdWVzLiAqL1xuZXhwb3J0IGNsYXNzIERhdGFzdG9yZSB7XG4gICAgLyoqIFRoZSBjdXJyZW50IHN0b3JlIHJldmlzaW9uLiAqL1xuICAgIHB1YmxpYyByZXZpc2lvbjogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIE1hc3RlciBjb2xsZWN0aW9uIG9mIGFsbCBvYmplY3QgSURzLiBUaGlzIGlzIHRlY2huaWNhbGx5IHJlZHVuZGFudCB3aXRoIG9iamVjdHMua2V5cygpIGJ1dCB0aGlzIGlzIGEgZmFzdCBzZXRcbiAgICAgKiBjb21wYXJlZCB0byBhbiBpdGVyYXRvci5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlkczogU2V0PHN0cmluZz47XG4gICAgLyoqIFRoZSBtYXN0ZXIgY29sbGVjdGlvbiBvZiBBTEwgaW5kZXhlZCBvYmplY3RzLCBtYXBwaW5nIElEIC0+IHRoZSBvYmplY3QuICovXG4gICAgcHJpdmF0ZSBvYmplY3RzOiBNYXA8c3RyaW5nLCBJbmRleGFibGU+O1xuICAgIC8qKiBNYXAgcGFyZW50IG9iamVjdCB0byBpdCdzIGRpcmVjdCBjaGlsZCBvYmplY3RzLiAqL1xuICAgIHByaXZhdGUgY2hpbGRyZW46IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PjtcblxuICAgIC8vIEluZGljZXMgZm9yIHRoZSB2YXJpb3VzIGFjY2VwdGVkIHF1ZXJ5IHR5cGVzLiBUaGVzZSB3aWxsIHByb2JhYmx5IGJlIG1vdmVkIHRvIGEgZGlmZmVyZW50IHR5cGUgbGF0ZXIuXG4gICAgLyoqIEdsb2JhbCBtYXAgb2Ygb2JqZWN0IHR5cGUgLT4gbGlzdCBvZiBhbGwgb2JqZWN0cyBvZiB0aGF0IHR5cGUuICovXG4gICAgcHJpdmF0ZSB0eXBlczogSW52ZXJ0ZWRJbmRleDxzdHJpbmc+O1xuICAgIC8qKiBUcmFja3MgZXhhY3QgdGFnIG9jY3VyZW5jZSBpbiBvYmplY3RzLiAqL1xuICAgIHByaXZhdGUgZXRhZ3M6IEludmVydGVkSW5kZXg8c3RyaW5nPjtcbiAgICAvKiogVHJhY2tzIHRhZyBvY2N1cmVuY2UgaW4gb2JqZWN0cy4gKi9cbiAgICBwcml2YXRlIHRhZ3M6IEludmVydGVkSW5kZXg8c3RyaW5nPjtcbiAgICAvKiogTWFwcyBsaW5rIHN0cmluZ3MgdG8gdGhlIG9iamVjdCBJRHMgdGhhdCBsaW5rIHRvIHRob3NlIGxpbmtzLiAqL1xuICAgIHByaXZhdGUgbGlua3M6IEludmVydGVkSW5kZXg8c3RyaW5nPjtcbiAgICAvKiogVHJhY2tzIHRoZSBleGlzdGVuY2Ugb2YgZmllbGRzIChpbmRleGVkIGJ5IG5vcm1hbGl6ZWQga2V5IG5hbWUpLiAqL1xuICAgIHByaXZhdGUgZmllbGRzOiBNYXA8c3RyaW5nLCBGaWVsZEluZGV4PjtcbiAgICAvKipcbiAgICAgKiBRdWljayBzZWFyY2hlcyBmb3Igb2JqZWN0cyBpbiBmb2xkZXJzLiBUaGlzIGluZGV4IG9ubHkgdHJhY2tzIHRvcC1sZXZlbCBvYmplY3RzIC0gaXQgaXMgZXhwYW5kZWQgcmVjdXJzaXZlbHkgdG9cbiAgICAgKiBmaW5kIGNoaWxkIG9iamVjdHMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb2xkZXI6IEZvbGRlckluZGV4O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyB2YXVsdDogVmF1bHQsIHB1YmxpYyBtZXRhZGF0YUNhY2hlOiBNZXRhZGF0YUNhY2hlLCBwdWJsaWMgc2V0dGluZ3M6IFNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMucmV2aXNpb24gPSAwO1xuICAgICAgICB0aGlzLmlkcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5vYmplY3RzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gbmV3IE1hcCgpO1xuXG4gICAgICAgIHRoaXMudHlwZXMgPSBuZXcgSW52ZXJ0ZWRJbmRleCgpO1xuICAgICAgICB0aGlzLmV0YWdzID0gbmV3IEludmVydGVkSW5kZXgoKTtcbiAgICAgICAgdGhpcy50YWdzID0gbmV3IEludmVydGVkSW5kZXgoKTtcbiAgICAgICAgdGhpcy5saW5rcyA9IG5ldyBJbnZlcnRlZEluZGV4KCk7XG4gICAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5faW5pdGlhbGl6ZUZpZWxkcygpO1xuICAgICAgICB0aGlzLmZvbGRlciA9IG5ldyBGb2xkZXJJbmRleCh2YXVsdCk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN0b3JlLiAqL1xuICAgIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzLnNpemU7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSB0aGUgcmV2aXNpb24gb2YgdGhlIGRhdGFzdG9yZSBkdWUgdG8gYW4gZXh0ZXJuYWwgdXBkYXRlLiAqL1xuICAgIHB1YmxpYyB0b3VjaCgpIHtcbiAgICAgICAgdGhpcy5yZXZpc2lvbiArPSAxO1xuICAgIH1cblxuICAgIC8qKiBMb2FkIGFuIG9iamVjdCBieSBJRC4gKi9cbiAgICBwdWJsaWMgbG9hZChpZDogc3RyaW5nKTogSW5kZXhhYmxlIHwgdW5kZWZpbmVkO1xuICAgIC8qKiBMb2FkIGEgbGlzdCBvZiBvYmplY3RzIGJ5IElELiAqL1xuICAgIHB1YmxpYyBsb2FkKGlkczogc3RyaW5nW10pOiBJbmRleGFibGVbXTtcblxuICAgIC8qKiBMb2FkIGFuIG9iamVjdCBieSBJRCBvciBsaXN0IG9mIElEcy4gKi9cbiAgICBsb2FkKGlkOiBzdHJpbmcgfCBzdHJpbmdbXSk6IEluZGV4YWJsZSB8IEluZGV4YWJsZVtdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQubWFwKChhKSA9PiB0aGlzLmxvYWQoYSkpLmZpbHRlcigob2JqKTogb2JqIGlzIEluZGV4YWJsZSA9PiBvYmogIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzLmdldChpZCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgdXAgc2FuZSBmaWVsZCBkZWZhdWx0cyBmb3Igc2V2ZXJhbCBpbmRleGFibGUgZmllbGRzLiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVGaWVsZHMoKTogTWFwPHN0cmluZywgRmllbGRJbmRleD4ge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBuZXcgTWFwPHN0cmluZywgRmllbGRJbmRleD4oKTtcblxuICAgICAgICAvLyBTcGVjaWFsaXplIGluZGljZXMgZm9yICRpZCBhbmQgdGhlIG90aGVyIG9tbmlwcmVzZW50IGZpZWxkIHZhbHVlcy5cbiAgICAgICAgZmllbGRzLnNldChcbiAgICAgICAgICAgIFwiJGlkXCIsXG4gICAgICAgICAgICBuZXcgSWRGaWVsZEluZGV4KFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuaWRzLFxuICAgICAgICAgICAgICAgIChpZCkgPT4gdGhpcy5vYmplY3RzLmhhcyhpZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZmllbGRzLnNldChcIiR0eXBlc1wiLCBuZXcgRXZlcnl0aGluZ0ZpZWxkSW5kZXgoKCkgPT4gdGhpcy5pZHMpKTtcbiAgICAgICAgZmllbGRzLnNldChcIiR0eXBlbmFtZVwiLCBuZXcgRXZlcnl0aGluZ0ZpZWxkSW5kZXgoKCkgPT4gdGhpcy5pZHMpKTtcbiAgICAgICAgZmllbGRzLnNldChcIiRyZXZpc2lvblwiLCBuZXcgRXZlcnl0aGluZ0ZpZWxkSW5kZXgoKCkgPT4gdGhpcy5pZHMpKTtcblxuICAgICAgICAvLyBPcHRpbWl6ZSBvdmVyICRjb21wbGV0ZWQgYW5kICRzdGF0dXMgbG9va3VwcyBmb3IgdGFza3MuXG4gICAgICAgIGZpZWxkcy5zZXQoXCIkY29tcGxldGVkXCIsIG5ldyBCVHJlZUZpZWxkSW5kZXgoKSk7XG4gICAgICAgIGZpZWxkcy5zZXQoXCIkc3RhdHVzXCIsIG5ldyBCVHJlZUZpZWxkSW5kZXgoKSk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSB0aGUgZ2l2ZW4gb2JqZWN0LCBtYWtpbmcgaXQgaW1tZWRpYXRlbHkgcXVlcnlhYmxlLiBTdG9yaW5nIGFuIG9iamVjdFxuICAgICAqIHRha2VzIG93bmVyc2hpcCBvdmVyIGl0LCBhbmQgaW5kZXgtc3BlY2lmaWMgdmFyaWFibGVzIChwcmVmaXhlZCB2aWEgJyQnKSBtYXkgYmVcbiAgICAgKiBhZGRlZCB0byB0aGUgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdG9yZTxUIGV4dGVuZHMgSW5kZXhhYmxlPihvYmplY3Q6IFQgfCBUW10sIHN1YnN0b3Jlcj86IFN1YnN0b3JlcjxUPikge1xuICAgICAgICB0aGlzLl9yZWN1cnNpdmVTdG9yZShvYmplY3QsIHRoaXMucmV2aXNpb24rKywgc3Vic3RvcmVyLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIC8qKiBSZWN1cnNpdmVseSBzdG9yZSBvYmplY3RzIHVzaW5nIGEgcG90ZW50aWFsIHN1YmluZGV4ZXIuICovXG4gICAgcHJpdmF0ZSBfcmVjdXJzaXZlU3RvcmU8VCBleHRlbmRzIEluZGV4YWJsZT4oXG4gICAgICAgIG9iamVjdDogVCB8IFRbXSxcbiAgICAgICAgcmV2aXNpb246IG51bWJlcixcbiAgICAgICAgc3Vic3RvcmVyPzogU3Vic3RvcmVyPFQ+LFxuICAgICAgICBwYXJlbnQ/OiBJbmRleGFibGVcbiAgICApIHtcbiAgICAgICAgLy8gSGFuZGxlIGFycmF5IGlucHV0cy5cbiAgICAgICAgaWYgKExpdGVyYWxzLmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWN1cnNpdmVTdG9yZShlbGVtZW50LCByZXZpc2lvbiwgc3Vic3RvcmVyLCBwYXJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWxldGUgdGhlIHByZXZpb3VzIGluc3RhbmNlIG9mIHRoaXMgb2JqZWN0IGlmIHByZXNlbnQuXG4gICAgICAgIC8vIFRPRE86IFByb2JhYmx5IG9ubHkgYWN0dWFsbHkgbmVlZCB0byBkZWxldGUgdGhlIHJvb3Qgb2JqZWN0cy5cbiAgICAgICAgdGhpcy5fZGVsZXRlUmVjdXJzaXZlKG9iamVjdC4kaWQpO1xuXG4gICAgICAgIC8vIEFzc2lnbiB0aGUgbmV4dCByZXZpc2lvbiB0byB0aGlzIG9iamVjdDsgaW5kZXhlZCBvYmplY3RzIGFyZSBpbXBsaWVkIHRvIGJlIHJvb3Qgb2JqZWN0cy5cbiAgICAgICAgb2JqZWN0LiRyZXZpc2lvbiA9IHJldmlzaW9uO1xuICAgICAgICBvYmplY3QuJHBhcmVudCA9IHBhcmVudDtcblxuICAgICAgICAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgYXBwcm9wcmlhdGUgb2JqZWN0IG1hcHMuXG4gICAgICAgIHRoaXMuaWRzLmFkZChvYmplY3QuJGlkKTtcbiAgICAgICAgdGhpcy5vYmplY3RzLnNldChvYmplY3QuJGlkLCBvYmplY3QpO1xuXG4gICAgICAgIC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBwYXJlbnQgY2hpbGRyZW4gbWFwLlxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hpbGRyZW4uaGFzKHBhcmVudC4kaWQpKSB0aGlzLmNoaWxkcmVuLnNldChwYXJlbnQuJGlkLCBuZXcgU2V0KCkpO1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5nZXQocGFyZW50LiRpZCkhLmFkZChvYmplY3QuJGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2luZGV4KG9iamVjdCk7XG5cbiAgICAgICAgLy8gSW5kZXggYW55IHN1Ym9yZGluYXRlIG9iamVjdHMgaW4gdGhpcyBvYmplY3QuXG4gICAgICAgIHN1YnN0b3Jlcj8uKG9iamVjdCwgKGluY29taW5nLCBzdWJpbmRleCkgPT4gdGhpcy5fcmVjdXJzaXZlU3RvcmUoaW5jb21pbmcsIHJldmlzaW9uLCBzdWJpbmRleCwgb2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqIERlbGV0ZSBhbiBvYmplY3QgYnkgSUQgZnJvbSB0aGUgaW5kZXgsIHJlY3Vyc2l2ZWx5IGRlbGV0aW5nIGFueSBjaGlsZCBvYmplY3RzIGFzIHdlbGwuICovXG4gICAgcHVibGljIGRlbGV0ZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxldGVSZWN1cnNpdmUoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLnJldmlzaW9uKys7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogSW50ZXJuYWwgbWV0aG9kIHRoYXQgZG9lcyBub3QgYnVtcCB0aGUgcmV2aXNpb24uICovXG4gICAgcHJpdmF0ZSBfZGVsZXRlUmVjdXJzaXZlKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5vYmplY3RzLmdldChpZCk7XG4gICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGNoaWxkIG9iamVjdHMuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5nZXQoaWQpO1xuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlUmVjdXJzaXZlKGNoaWxkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5kZWxldGUoaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJvcCB0aGlzIG9iamVjdCBmcm9tIHRoZSBhcHByb3ByaWF0ZSBtYXBzLlxuICAgICAgICB0aGlzLl91bmluZGV4KG9iamVjdCk7XG4gICAgICAgIHRoaXMuaWRzLmRlbGV0ZShpZCk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5kZWxldGUoaWQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQWRkIHRoZSBnaXZlbiBpbmRleGFibGUgdG8gdGhlIGFwcHJvcHJpYXRlIGluZGljZXMuICovXG4gICAgcHJpdmF0ZSBfaW5kZXgob2JqZWN0OiBJbmRleGFibGUpIHtcbiAgICAgICAgdGhpcy50eXBlcy5zZXQob2JqZWN0LiRpZCwgb2JqZWN0LiR0eXBlcyk7XG5cbiAgICAgICAgLy8gRXhhY3QgYW5kIGRlcml2ZWQgdGFncy5cbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZXMuY29udGFpbnMoVEFHR0FCTEVfVFlQRSkgJiYgaXRlcmFibGVFeGlzdHMob2JqZWN0LCBcIiR0YWdzXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0YWdzID0gb2JqZWN0LiR0YWdzIGFzIFNldDxzdHJpbmc+O1xuXG4gICAgICAgICAgICB0aGlzLmV0YWdzLnNldChvYmplY3QuJGlkLCB0YWdzKTtcbiAgICAgICAgICAgIHRoaXMudGFncy5zZXQob2JqZWN0LiRpZCwgZXh0cmFjdFN1YnRhZ3ModGFncykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhhY3QgYW5kIGRlcml2ZWQgbGlua3MuXG4gICAgICAgIGlmIChvYmplY3QuJHR5cGVzLmNvbnRhaW5zKExJTktCRUFSSU5HX1RZUEUpICYmIGl0ZXJhYmxlRXhpc3RzKG9iamVjdCwgXCIkbGlua3NcIikpIHtcbiAgICAgICAgICAgIHRoaXMubGlua3Muc2V0KFxuICAgICAgICAgICAgICAgIG9iamVjdC4kaWQsXG4gICAgICAgICAgICAgICAgKG9iamVjdC4kbGlua3MgYXMgTGlua1tdKS5tYXAoKGxpbmspID0+IGxpbmsub2JzaWRpYW5MaW5rKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxsIGZpZWxkcyBvbiBhbiBvYmplY3QuXG4gICAgICAgIGlmIChvYmplY3QuJHR5cGVzLmNvbnRhaW5zKEZJRUxEQkVBUklOR19UWVBFKSAmJiBcImZpZWxkc1wiIGluIG9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBvYmplY3QuZmllbGRzIGFzIEl0ZXJhYmxlPEZpZWxkPikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm0gPSBmaWVsZC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmllbGRzLmhhcyhub3JtKSkgdGhpcy5maWVsZHMuc2V0KG5vcm0sIG5ldyBTZXRGaWVsZEluZGV4KCkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZHMuZ2V0KG5vcm0pIS5hZGQob2JqZWN0LiRpZCwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSB0aGUgZ2l2ZW4gaW5kZXhhYmxlIGZyb20gYWxsIGluZGljZXMuICovXG4gICAgcHJpdmF0ZSBfdW5pbmRleChvYmplY3Q6IEluZGV4YWJsZSkge1xuICAgICAgICB0aGlzLnR5cGVzLmRlbGV0ZShvYmplY3QuJGlkLCBvYmplY3QuJHR5cGVzKTtcblxuICAgICAgICBpZiAob2JqZWN0LiR0eXBlcy5jb250YWlucyhUQUdHQUJMRV9UWVBFKSAmJiBpdGVyYWJsZUV4aXN0cyhvYmplY3QsIFwiJHRhZ3NcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSBvYmplY3QuJHRhZ3MgYXMgU2V0PHN0cmluZz47XG5cbiAgICAgICAgICAgIHRoaXMuZXRhZ3MuZGVsZXRlKG9iamVjdC4kaWQsIHRhZ3MpO1xuICAgICAgICAgICAgdGhpcy50YWdzLmRlbGV0ZShvYmplY3QuJGlkLCBleHRyYWN0U3VidGFncyh0YWdzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqZWN0LiR0eXBlcy5jb250YWlucyhMSU5LQkVBUklOR19UWVBFKSAmJiBpdGVyYWJsZUV4aXN0cyhvYmplY3QsIFwiJGxpbmtzXCIpKSB7XG4gICAgICAgICAgICAvLyBBc3N1bWUgbGlua3MgYXJlIG5vcm1hbGl6ZWQgd2hlbiBkZWxldGluZyB0aGVtLiBDb3VsZCBiZSBicm9rZW4gYnV0IEkgaG9wZSBub3QuIFdlIGNhbiBhbHdheXMgdXNlIGEgMi13YXkgaW5kZXggdG9cbiAgICAgICAgICAgIC8vIGZpeCB0aGlzIGlmIHdlIGVuY291bnRlciBub24tbm9ybWFsaXplZCBsaW5rcy5cbiAgICAgICAgICAgIHRoaXMubGlua3MuZGVsZXRlKFxuICAgICAgICAgICAgICAgIG9iamVjdC4kaWQsXG4gICAgICAgICAgICAgICAgKG9iamVjdC4kbGlua3MgYXMgTGlua1tdKS5tYXAoKGxpbmspID0+IGxpbmsub2JzaWRpYW5MaW5rKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iamVjdC4kdHlwZXMuY29udGFpbnMoRklFTERCRUFSSU5HX1RZUEUpICYmIFwiZmllbGRzXCIgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG9iamVjdC5maWVsZHMgYXMgSXRlcmFibGU8RmllbGQ+KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybSA9IGZpZWxkLmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWVsZHMuaGFzKG5vcm0pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLmdldChub3JtKSEuZGVsZXRlKG9iamVjdC4kaWQsIGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb21wbGV0ZWx5IGNsZWFyIHRoZSBkYXRhc3RvcmUgb2YgYWxsIHZhbHVlcy4gKi9cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuaWRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy50eXBlcy5jbGVhcigpO1xuICAgICAgICB0aGlzLnRhZ3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5ldGFncy5jbGVhcigpO1xuICAgICAgICB0aGlzLmxpbmtzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZmllbGRzLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5yZXZpc2lvbisrO1xuICAgIH1cblxuICAgIC8qKiBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdCBmb3IgYSBnaXZlbiBsaW5rLiAqL1xuICAgIHB1YmxpYyByZXNvbHZlTGluayhyYXdMaW5rOiBzdHJpbmcgfCBMaW5rLCBzb3VyY2VQYXRoPzogc3RyaW5nKTogSW5kZXhhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGxpbmsgPSB0eXBlb2YgcmF3TGluayA9PT0gXCJzdHJpbmdcIiA/IExpbmsucGFyc2VJbm5lcihyYXdMaW5rKSA6IHJhd0xpbms7XG5cbiAgICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtkZXN0ID0gdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KGxpbmsucGF0aCwgc291cmNlUGF0aCk7XG4gICAgICAgICAgICBpZiAobGlua2Rlc3QpIGxpbmsgPSBsaW5rLndpdGhQYXRoKGxpbmtkZXN0LnBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMub2JqZWN0cy5nZXQobGluay5wYXRoKTtcbiAgICAgICAgaWYgKCFmaWxlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChsaW5rLnR5cGUgPT09IFwiZmlsZVwiKSByZXR1cm4gZmlsZTtcblxuICAgICAgICAvLyBCbG9ja3MgYW5kIGhlYWRlciBsaW5rcyBjYW4gb25seSByZXNvbHZlIGluc2lkZSBvZiBtYXJrZG93biBmaWxlcy5cbiAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIE1hcmtkb3duUGFnZSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGxpbmsudHlwZSA9PT0gXCJoZWFkZXJcIikge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGZpbGUuJHNlY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgKHNlYykgPT4gbm9ybWFsaXplSGVhZGVyRm9yTGluayhzZWMuJHRpdGxlKSA9PSBsaW5rLnN1YnBhdGggfHwgc2VjLiR0aXRsZSA9PSBsaW5rLnN1YnBhdGhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChzZWN0aW9uKSByZXR1cm4gc2VjdGlvbjtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmIChsaW5rLnR5cGUgPT09IFwiYmxvY2tcIikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGZpbGUuJHNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBzZWN0aW9uLiRibG9ja3MuZmluZCgoYmwpID0+IGJsLiRibG9ja0lkID09PSBsaW5rLnN1YnBhdGgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrKSByZXR1cm4gYmxvY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBsaW5rIHR5cGU6ICR7bGluay50eXBlfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIHRoZSBkYXRhc3RvcmUgZm9yIGFsbCBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIGdpdmVuIHF1ZXJ5LCByZXR1cm5pbmcgdGhlbVxuICAgICAqIGFzIGEgbGlzdCBvZiBpbmRleGVkIG9iamVjdHMgYWxvbmcgd2l0aCBwZXJmb3JtYW5jZSBtZXRhZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VhcmNoKHF1ZXJ5OiBJbmRleFF1ZXJ5LCBzZXR0aW5ncz86IFNlYXJjaFNldHRpbmdzKTogUmVzdWx0PFNlYXJjaFJlc3VsdDxJbmRleGFibGU+LCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIGNvbnN0IG1heWJlRmlsdGVyID0gdGhpcy5fc2VhcmNoKHF1ZXJ5LCBzZXR0aW5ncyk7XG4gICAgICAgIGlmICghbWF5YmVGaWx0ZXIuc3VjY2Vzc2Z1bCkgcmV0dXJuIG1heWJlRmlsdGVyLmNhc3QoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gRmlsdGVycy5yZXNvbHZlKG1heWJlRmlsdGVyLnZhbHVlLCB0aGlzLmlkcyk7XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0czogSW5kZXhhYmxlW10gPSBbXTtcbiAgICAgICAgbGV0IG1heFJldmlzaW9uID0gMDtcbiAgICAgICAgZm9yIChsZXQgaWQgb2YgcmVzdWx0KSB7XG4gICAgICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLm9iamVjdHMuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBvYmplY3RzLnB1c2gob2JqZWN0KTtcbiAgICAgICAgICAgICAgICBtYXhSZXZpc2lvbiA9IE1hdGgubWF4KG1heFJldmlzaW9uLCBvYmplY3QuJHJldmlzaW9uID8/IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgIHJlc3VsdHM6IG9iamVjdHMsXG4gICAgICAgICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLjAsXG4gICAgICAgICAgICByZXZpc2lvbjogbWF4UmV2aXNpb24sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBJbnRlcm5hbCBzZWFyY2ggd2hpY2ggeWllbGRzIGEgZmlsdGVyIG9mIHJlc3VsdHMuICovXG4gICAgcHJpdmF0ZSBfc2VhcmNoKHF1ZXJ5OiBJbmRleFF1ZXJ5LCBzZXR0aW5ncz86IFNlYXJjaFNldHRpbmdzKTogUmVzdWx0PEZpbHRlcjxzdHJpbmc+LCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHNldHRpbmdzPy5zb3VyY2VQYXRoO1xuICAgICAgICBjb25zdCBmaWxlID0gc291cmNlUGF0aCA/IHRoaXMub2JqZWN0cy5nZXQoc291cmNlUGF0aCkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgZXZhbHVhdG9yID0gbmV3IEV2YWx1YXRvcihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleGlzdHM6IChwYXRoOiBzdHJpbmcgfCBMaW5rKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMaW5rKHR5cGVvZiBwYXRoID09IFwic3RyaW5nXCIgPyBMaW5rLmZpbGUocGF0aCkgOiBwYXRoLCBzb3VyY2VQYXRoKSAhPSBudWxsLFxuICAgICAgICAgICAgICAgIHJlc29sdmU6IChwYXRoOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUxpbmsodHlwZW9mIHBhdGggPT0gXCJzdHJpbmdcIiA/IExpbmsuZmlsZShwYXRoKSA6IHBhdGgsIHNvdXJjZVBhdGgpID8/IG51bGwsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplOiAocGF0aDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QocGF0aCwgc291cmNlUGF0aCA/PyBcIlwiKT8ucGF0aCA/PyBwYXRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTZXQgYHRoaXNgIG9uIHRoZSBmaWxlIGlmIG5lZWRlZC5cbiAgICAgICAgaWYgKGZpbGUpIGV2YWx1YXRvci5zZXQoXCJ0aGlzXCIsIGZpbGUpO1xuXG4gICAgICAgIGNvbnN0IHJlc29sdmVyOiBJbmRleFJlc29sdmVyPHN0cmluZz4gPSB7XG4gICAgICAgICAgICB1bml2ZXJzZTogdGhpcy5pZHMsXG4gICAgICAgICAgICByZXNvbHZlOiAobGVhZikgPT4gdGhpcy5fcmVzb2x2ZVNvdXJjZShsZWFmLCBzZXR0aW5ncyksXG4gICAgICAgICAgICByZXNvbHZlUHJpbWl0aXZlOiAobGVhZikgPT4gdGhpcy5fcmVzb2x2ZVByaW1pdGl2ZShsZWFmLCBzZXR0aW5ncyksXG4gICAgICAgICAgICBsb2FkOiAoaWQpID0+IHRoaXMubG9hZChpZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGV4ZWN1dGUob3B0aW1pemVRdWVyeShxdWVyeSksIHJlc29sdmVyLCBldmFsdWF0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVTb3VyY2UocXVlcnk6IEluZGV4U291cmNlLCBzZXR0aW5ncz86IFNlYXJjaFNldHRpbmdzKTogUmVzdWx0PEZpbHRlcjxzdHJpbmc+LCBzdHJpbmc+IHtcbiAgICAgICAgc3dpdGNoIChxdWVyeS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiY2hpbGQtb2ZcIjpcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBjb252ZXJ0aW5nIHRoaXMgdG8gYmUgYSBzY2FuIGluc3RlYWQgZm9yIGEgbm90aWNhYmxlIHNwZWVkdXAuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF5YmVQYXJlbnRzID0gdGhpcy5fc2VhcmNoKHF1ZXJ5LnBhcmVudHMsIHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1heWJlUGFyZW50cy5zdWNjZXNzZnVsKSByZXR1cm4gbWF5YmVQYXJlbnRzLmNhc3QoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBtYXliZVBhcmVudHMudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKEZpbHRlcnMuZW1wdHkocGFyZW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnRzLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeS5pbmNsdXNpdmUpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLkVWRVJZVEhJTkcpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgc2V0IGFsbCBjaGlsZHJlbi4gVE9ETzogQ29uc2lkZXIgY2FjaGluZyB2aWEgYSBgcGFyZW50c2AgbWFwLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDaGlsZHJlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5vYmplY3RzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC4kcGFyZW50KSBhbGxDaGlsZHJlbi5hZGQoZWxlbWVudC4kaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuYXRvbShhbGxDaGlsZHJlbikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUGFyZW50cyA9IEZpbHRlcnMucmVzb2x2ZShwYXJlbnRzLCB0aGlzLmlkcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZXN1bHRzID0gbmV3IFNldDxzdHJpbmc+KHF1ZXJ5LmluY2x1c2l2ZSA/IHJlc29sdmVkUGFyZW50cyA6IFtdKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHJlc29sdmVkUGFyZW50cykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuX2l0ZXJhdGVDaGlsZHJlbihwYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFJlc3VsdHMuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20oY2hpbGRSZXN1bHRzKSk7XG4gICAgICAgICAgICBjYXNlIFwicGFyZW50LW9mXCI6XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY29udmVydGluZyB0aGlzIHRvIGJlIGEgc2NhbiBpbnN0ZWFkIGZvciBhIG5vdGljYWJsZSBzcGVlZHVwLlxuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlQ2hpbGRyZW4gPSB0aGlzLl9zZWFyY2gocXVlcnkuY2hpbGRyZW4sIHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1heWJlQ2hpbGRyZW4uc3VjY2Vzc2Z1bCkgcmV0dXJuIG1heWJlQ2hpbGRyZW4uY2FzdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbWF5YmVDaGlsZHJlbi52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChGaWx0ZXJzLmVtcHR5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5OT1RISU5HKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkcmVuLnR5cGUgPT09IFwiZXZlcnl0aGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeS5pbmNsdXNpdmUpIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLkVWRVJZVEhJTkcpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20obmV3IFNldCh0aGlzLmNoaWxkcmVuLmtleXMoKSkpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZENoaWxkcmVuID0gRmlsdGVycy5yZXNvbHZlKGNoaWxkcmVuLCB0aGlzLmlkcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50UmVzdWx0cyA9IG5ldyBTZXQ8c3RyaW5nPihxdWVyeS5pbmNsdXNpdmUgPyByZXNvbHZlZENoaWxkcmVuIDogW10pO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiByZXNvbHZlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHRoaXMuX2l0ZXJhdGVQYXJlbnRzKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVzdWx0cy5hZGQocGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20ocGFyZW50UmVzdWx0cykpO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtlZFwiOlxuICAgICAgICAgICAgICAgIGlmIChxdWVyeS5kaXN0YW5jZSAmJiBxdWVyeS5kaXN0YW5jZSA8IDApIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLk5PVEhJTkcpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgc291cmNlIG9iamVjdHMgZmlyc3QuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF5YmVTb3VyY2VzID0gdGhpcy5fc2VhcmNoKHF1ZXJ5LnNvdXJjZSwgc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIGlmICghbWF5YmVTb3VyY2VzLnN1Y2Nlc3NmdWwpIHJldHVybiBtYXliZVNvdXJjZXMuY2FzdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBtYXliZVNvdXJjZXMudmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoRmlsdGVycy5lbXB0eShzb3VyY2VzKSkgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuTk9USElORyk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc291cmNlcy50eXBlID09PSBcImV2ZXJ5dGhpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkuaW5jbHVzaXZlKSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5FVkVSWVRISU5HKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gUmVzdWx0LnN1Y2Nlc3MoRmlsdGVycy5OT1RISU5HKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFNvdXJjZXMgPSBGaWx0ZXJzLnJlc29sdmUoc291cmNlcywgdGhpcy5pZHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHF1ZXJ5LmRpcmVjdGlvbiA/PyBcImJvdGhcIjtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5fdHJhdmVyc2VMaW5rZWQocmVzb2x2ZWRTb3VyY2VzLCBxdWVyeS5kaXN0YW5jZSA/PyAxLCAoaWQpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGVBZGphY2VudExpbmtlZChpZCwgZGlyZWN0aW9uKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5LmluY2x1c2l2ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5zdWNjZXNzKEZpbHRlcnMuYXRvbShGaWx0ZXJzLnNldEludGVyc2VjdE5lZ2F0aW9uKHJlc3VsdHMsIHJlc29sdmVkU291cmNlcykpKTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBSZXN1bHQuc3VjY2VzcyhGaWx0ZXJzLmF0b20ocmVzdWx0cykpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnN1Y2Nlc3ModGhpcy5fcmVzb2x2ZVByaW1pdGl2ZShxdWVyeSwgc2V0dGluZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXNvbHZlIGxlYWYgbm9kZXMgaW4gYSBzZWFyY2ggQVNULCB5aWVsZGluZyByYXcgc2V0cyBvZiByZXN1bHRzLiAqL1xuICAgIHByaXZhdGUgX3Jlc29sdmVQcmltaXRpdmUocXVlcnk6IEluZGV4UHJpbWl0aXZlLCBzZXR0aW5ncz86IFNlYXJjaFNldHRpbmdzKTogRmlsdGVyPHN0cmluZz4ge1xuICAgICAgICBzd2l0Y2ggKHF1ZXJ5LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjb25zdGFudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLmNvbnN0YW50KHF1ZXJ5LmNvbnN0YW50KTtcbiAgICAgICAgICAgIGNhc2UgXCJpZFwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IGV4YWN0T2JqZWN0ID0gdGhpcy5vYmplY3RzLmdldChxdWVyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4YWN0T2JqZWN0ID8gRmlsdGVycy5hdG9tKG5ldyBTZXQoW2V4YWN0T2JqZWN0LiRpZF0pKSA6IEZpbHRlcnMuTk9USElORztcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KFxuICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncz8uc291cmNlUGF0aCA/PyBcIlwiXG4gICAgICAgICAgICAgICAgKT8ucGF0aDtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVkUGF0aCA/IHF1ZXJ5LnZhbHVlLndpdGhQYXRoKHJlc29sdmVkUGF0aCkgOiBxdWVyeS52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMucmVzb2x2ZUxpbmsocmVzb2x2ZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QgPyBGaWx0ZXJzLmF0b20obmV3IFNldChbb2JqZWN0LiRpZF0pKSA6IEZpbHRlcnMuTk9USElORztcbiAgICAgICAgICAgIGNhc2UgXCJ0eXBlZFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLm51bGxhYmxlQXRvbSh0aGlzLnR5cGVzLmdldChxdWVyeS52YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSBcInRhZ2dlZFwiOlxuICAgICAgICAgICAgICAgIGlmIChxdWVyeS5leGFjdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5udWxsYWJsZUF0b20odGhpcy5ldGFncy5nZXQocXVlcnkudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5udWxsYWJsZUF0b20odGhpcy50YWdzLmdldChxdWVyeS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwYXRoXCI6XG4gICAgICAgICAgICAgICAgbGV0IHRvcGxldmVsO1xuICAgICAgICAgICAgICAgIGlmIChxdWVyeS5leGFjdCkge1xuICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHRoaXMuZm9sZGVyLmdldEV4YWN0KHF1ZXJ5LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkudmFsdWUgPT0gXCJcIiB8fCBxdWVyeS52YWx1ZSA9PSBcIi9cIikgcmV0dXJuIEZpbHRlcnMuRVZFUllUSElORztcblxuICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA9IHRoaXMuZm9sZGVyLmdldChxdWVyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRvcGxldmVsLnNpemUgPT0gMCkgcmV0dXJuIEZpbHRlcnMuTk9USElORztcblxuICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBhbGwgY2hpbGRyZW4uXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldCh0b3BsZXZlbCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdG9wIG9mIHRvcGxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIHRoaXMuX2l0ZXJhdGVDaGlsZHJlbih0b3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLmF0b20ocmVzdWx0KTtcbiAgICAgICAgICAgIGNhc2UgXCJmaWVsZFwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1rZXkgPSBxdWVyeS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZpZWxkcy5nZXQobm9ybWtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkSW5kZXggPT0gbnVsbCkgcmV0dXJuIEZpbHRlcnMuTk9USElORztcblxuICAgICAgICAgICAgICAgIHJldHVybiBGaWx0ZXJzLmF0b20oZmllbGRJbmRleC5hbGwoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZXF1YWwtdmFsdWVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsdGVycy5sYXp5VW5pb24ocXVlcnkudmFsdWVzLCAodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZpZWxkcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGluZGV4KSA9PiBpbmRleC5lcXVhbHModmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkKSA9PiBMaXRlcmFscy5jb21wYXJlKHZhbHVlLCBmaWVsZC52YWx1ZSkgPT0gMFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGaWx0ZXIgZG9jdW1lbnRzIGJ5IGZpZWxkIHZhbHVlcywgdXNpbmcgdGhlIGZhc3QgbG9va3VwIGlmIGl0IHJldHVybnMgYSByZXN1bHQgYW5kIG90aGVyd2lzZSBmaWx0ZXJpbmcgb3ZlciBldmVyeSBkb2N1bWVudCB1c2luZyB0aGUgc2xvdyBwcmVkaWNhdGUuICovXG4gICAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzKFxuICAgICAgICBrZXk6IHN0cmluZyxcbiAgICAgICAgZmFzdDogKGluZGV4OiBGaWVsZEluZGV4KSA9PiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgc2xvdzogKGZpZWxkOiBGaWVsZCkgPT4gYm9vbGVhblxuICAgICk6IEZpbHRlcjxzdHJpbmc+IHtcbiAgICAgICAgY29uc3Qgbm9ybWtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZmllbGRzLmdldChub3Jta2V5KTtcbiAgICAgICAgaWYgKGluZGV4ID09IG51bGwpIHJldHVybiBGaWx0ZXJzLk5PVEhJTkc7XG5cbiAgICAgICAgY29uc3QgZmFzdGxvb2t1cCA9IGZhc3QoaW5kZXgpO1xuICAgICAgICBpZiAoZmFzdGxvb2t1cCAhPSBudWxsKSByZXR1cm4gRmlsdGVycy5hdG9tKGZhc3Rsb29rdXApO1xuXG4gICAgICAgIC8vIENvbXB1dGUgYnkgaXRlcmF0aW5nIG92ZXIgZWFjaCBmaWVsZC5cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IG9iamVjdElkIG9mIGluZGV4LmFsbCgpKSB7XG4gICAgICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLm9iamVjdHMuZ2V0KG9iamVjdElkKTtcbiAgICAgICAgICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QuJHR5cGVzLmNvbnRhaW5zKEZJRUxEQkVBUklOR19UWVBFKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gKG9iamVjdCBhcyBhbnkgYXMgRmllbGRiZWFyaW5nKS5maWVsZChub3Jta2V5KTtcbiAgICAgICAgICAgIGlmICghZmllbGQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoc2xvdyhmaWVsZCkpIG1hdGNoZXMuYWRkKG9iamVjdElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBGaWx0ZXJzLmF0b20obWF0Y2hlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG9lcyBCcmVhZHRoLWZpcnN0IFNlYXJjaCB0byBmaW5kIGFsbCBsaW5rZWQgZmlsZXMgd2l0aGluIGRpc3RhbmNlIDxkaXN0YW5jZT4uIFRoaXMgaW5jbHVkZXMgYWxsIHNvdXJjZSBub2RlcyxcbiAgICAgKiBzbyByZW1vdmUgdGhlbSBhZnRlcndhcmRzIGlmIHlvdSBkbyBub3Qgd2FudCB0aGVtLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3RyYXZlcnNlTGlua2VkKFxuICAgICAgICBzb3VyY2VJZHM6IFNldDxzdHJpbmc+LFxuICAgICAgICBkaXN0YW5jZTogbnVtYmVyLFxuICAgICAgICBhZGphY2VudDogKGlkOiBzdHJpbmcpID0+IEl0ZXJhYmxlPHN0cmluZz5cbiAgICApOiBTZXQ8c3RyaW5nPiB7XG4gICAgICAgIGlmIChkaXN0YW5jZSA8IDApIHJldHVybiBuZXcgU2V0KCk7XG4gICAgICAgIGlmIChzb3VyY2VJZHMuc2l6ZSA9PSAwKSByZXR1cm4gbmV3IFNldCgpO1xuXG4gICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oc291cmNlSWRzKTtcblxuICAgICAgICBjb25zdCBxdWV1ZSA9IG5ldyBGbGF0UXVldWU8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc291cmNlSWRzKSBxdWV1ZS5wdXNoKGVsZW1lbnQsIDApO1xuXG4gICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0ID0gcXVldWUucGVla1ZhbHVlKCkhO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHF1ZXVlLnBvcCgpITtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBuZWlnaGJvciBvZiBhZGphY2VudChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGlmICh2aXNpdGVkLmhhcyhuZWlnaGJvcikpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgdmlzaXRlZC5hZGQobmVpZ2hib3IpO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgZGlzdGFuY2UpIHF1ZXVlLnB1c2gobmVpZ2hib3IsIGRpc3QgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2aXNpdGVkO1xuICAgIH1cblxuICAgIC8qKiBJdGVyYXRlIGFsbCBsaW5rZWQgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIG9iamVjdC4gKi9cbiAgICBwcml2YXRlICpfaXRlcmF0ZUFkamFjZW50TGlua2VkKGlkOiBzdHJpbmcsIGRpcmVjdGlvbjogXCJpbmNvbWluZ1wiIHwgXCJvdXRnb2luZ1wiIHwgXCJib3RoXCIpOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMub2JqZWN0cy5nZXQoaWQpO1xuICAgICAgICBpZiAoIW9iamVjdCkgcmV0dXJuO1xuXG4gICAgICAgIGlmICgoZGlyZWN0aW9uID09PSBcImJvdGhcIiB8fCBkaXJlY3Rpb24gPT09IFwiaW5jb21pbmdcIikgJiYgXCIkbGlua1wiIGluIG9iamVjdCAmJiBvYmplY3RbXCIkbGlua1wiXSkge1xuICAgICAgICAgICAgY29uc3QgaW5jb21pbmcgPSB0aGlzLmxpbmtzLmdldCgob2JqZWN0LiRsaW5rIGFzIExpbmspLm9ic2lkaWFuTGluaygpKTtcbiAgICAgICAgICAgIGlmIChpbmNvbWluZykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaW5jb21pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGRpcmVjdGlvbiA9PT0gXCJib3RoXCIgfHwgZGlyZWN0aW9uID09PSBcIm91dGdvaW5nXCIpICYmXG4gICAgICAgICAgICBvYmplY3QuJHR5cGVzLmNvbnRhaW5zKExJTktBQkxFX1RZUEUpICYmXG4gICAgICAgICAgICBpdGVyYWJsZUV4aXN0cyhvYmplY3QsIFwiJGxpbmtzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIG9iamVjdC4kbGlua3MgYXMgTGlua1tdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVMaW5rKGxpbmspO1xuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZCkgeWllbGQgcmVzb2x2ZWQuJGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEl0ZXJhdG9yIHdoaWNoIHByb2R1Y2VzIGFsbCBwYXJlbnRzIG9mIHRoZSBnaXZlbiBvYmplY3QuICovXG4gICAgcHJpdmF0ZSAqX2l0ZXJhdGVQYXJlbnRzKGNoaWxkOiBzdHJpbmcpOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gICAgICAgIGxldCBvYmplY3QgPSB0aGlzLm9iamVjdHMuZ2V0KGNoaWxkKTtcbiAgICAgICAgd2hpbGUgKG9iamVjdCAmJiBvYmplY3Q/LiRwYXJlbnQpIHtcbiAgICAgICAgICAgIHlpZWxkIG9iamVjdC4kcGFyZW50LiRpZDtcbiAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdC4kcGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEl0ZXJhdGl2ZSB3aGljaCBwcm9kdWNlcyBhbGwgY2hpbGRyZW4gKHJlY3Vyc2l2ZWx5KSBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAqL1xuICAgIHByaXZhdGUgKl9pdGVyYXRlQ2hpbGRyZW4ocGFyZW50OiBzdHJpbmcpOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5nZXQocGFyZW50KTtcbiAgICAgICAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLnNpemUgPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNoaWxkO1xuICAgICAgICAgICAgICAgIHlpZWxkKiB0aGlzLl9pdGVyYXRlQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiogQSBnZW5lcmFsIGZ1bmN0aW9uIGZvciBzdG9yaW5nIHN1Yi1vYmplY3RzIGluIGEgZ2l2ZW4gb2JqZWN0LiAqL1xuZXhwb3J0IHR5cGUgU3Vic3RvcmVyPFQgZXh0ZW5kcyBJbmRleGFibGU+ID0gKFxuICAgIG9iamVjdDogVCxcbiAgICBhZGQ6IDxVIGV4dGVuZHMgSW5kZXhhYmxlPihvYmplY3Q6IFUgfCBVW10sIHN1YmluZGV4PzogU3Vic3RvcmVyPFU+KSA9PiB2b2lkXG4pID0+IHZvaWQ7XG5cbi8qKiBUaGUgcmVzdWx0IG9mIHNlYXJjaGluZyBnaXZlbiBhbiBpbmRleCBxdWVyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0PE8+IHtcbiAgICAvKiogVGhlIHF1ZXJ5IHVzZWQgdG8gc2VhcmNoLiAqL1xuICAgIHF1ZXJ5OiBJbmRleFF1ZXJ5O1xuICAgIC8qKiBBbGwgb2YgdGhlIHJldHVybmVkIHJlc3VsdHMuICovXG4gICAgcmVzdWx0czogT1tdO1xuICAgIC8qKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSBzZWFyY2ggdG9vay4gKi9cbiAgICBkdXJhdGlvbjogbnVtYmVyO1xuICAgIC8qKiBUaGUgbWF4aW11bSByZXZpc2lvbiBvZiBhbnkgZG9jdW1lbnQgaW4gdGhlIHJlc3VsdCwgd2hpY2ggaXMgdXNlZnVsIGZvciBkaWZmaW5nLiAqL1xuICAgIHJldmlzaW9uOiBudW1iZXI7XG59XG5cbi8qKiBFeHRyYSBzZXR0aW5ncyB0aGF0IGNhbiBiZSBwcm92aWRlZCB0byBhIHNlYXJjaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoU2V0dGluZ3Mge1xuICAgIC8qKiBUaGUgcGF0aCB0byBydW4gZnJvbSB3aGVuIHJlc29sdmluZyBsaW5rcyBhbmQgYHRoaXNgIHNlY3Rpb25zLiAqL1xuICAgIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKiBUeXBlIGd1YXJkIHdoaWNoIGNoZWNrcyBpZiBvYmplY3Rba2V5XSBleGlzdHMgYW5kIGlzIGFuIGl0ZXJhYmxlLiAqL1xuZnVuY3Rpb24gaXRlcmFibGVFeGlzdHM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIG9iamVjdDogVCxcbiAgICBrZXk6IEtcbik6IG9iamVjdCBpcyBUICYgUmVjb3JkPEssIEl0ZXJhYmxlPGFueT4+IHtcbiAgICByZXR1cm4ga2V5IGluIG9iamVjdCAmJiBvYmplY3Rba2V5XSAhPT0gdW5kZWZpbmVkICYmIFN5bWJvbC5pdGVyYXRvciBpbiBvYmplY3Rba2V5XTtcbn1cbiIsICJpbXBvcnQgbG9jYWxmb3JhZ2UgZnJvbSBcImxvY2FsZm9yYWdlXCI7XG5cbi8qKiBBIHBpZWNlIG9mIGRhdGEgdGhhdCBoYXMgYmVlbiBjYWNoZWQgZm9yIGEgc3BlY2lmaWMgdmVyc2lvbiBhbmQgdGltZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVkPFQ+IHtcbiAgICAvKiogVGhlIHZlcnNpb24gb2YgdGhlIHBsdWdpbiB0aGF0IHRoZSBkYXRhIHdhcyB3cml0dGVuIHRvIGNhY2hlIHdpdGguICovXG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIC8qKiBUaGUgVU5JWCBlcG9jaCB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBkYXRhIHdhcyB3cml0dGVuIHRvIGNhY2hlLiAqL1xuICAgIHRpbWU6IG51bWJlcjtcbiAgICAvKiogVGhlIGRhdGEgdGhhdCB3YXMgY2FjaGVkLiAqL1xuICAgIGRhdGE6IFQ7XG59XG5cbi8qKiBTaW1wbGVyIHdyYXBwZXIgZm9yIGEgZmlsZS1iYWNrZWQgY2FjaGUgZm9yIGFyYml0cmFyeSBtZXRhZGF0YS4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VDYWNoZSB7XG4gICAgcHVibGljIHBlcnNpc3RlcjogTG9jYWxGb3JhZ2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGFwcElkOiBzdHJpbmcsIHB1YmxpYyB2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wZXJzaXN0ZXIgPSBsb2NhbGZvcmFnZS5jcmVhdGVJbnN0YW5jZSh7XG4gICAgICAgICAgICBuYW1lOiBcImRhdGFjb3JlL2NhY2hlL1wiICsgYXBwSWQsXG4gICAgICAgICAgICBkcml2ZXI6IFtsb2NhbGZvcmFnZS5JTkRFWEVEREJdLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ2FjaGUgbWV0YWRhdGEgYWJvdXQgZmlsZXMgYW5kIHNlY3Rpb25zIGluIHRoZSBkYXRhY29yZSBpbmRleC5cIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIERyb3AgdGhlIGVudGlyZSBjYWNoZSBpbnN0YW5jZSBhbmQgcmUtY3JlYXRlIGEgbmV3IGZyZXNoIGluc3RhbmNlLiAqL1xuICAgIHB1YmxpYyBhc3luYyByZWNyZWF0ZSgpIHtcbiAgICAgICAgYXdhaXQgbG9jYWxmb3JhZ2UuZHJvcEluc3RhbmNlKHsgbmFtZTogXCJkYXRhY29yZS9jYWNoZS9cIiArIHRoaXMuYXBwSWQgfSk7XG5cbiAgICAgICAgdGhpcy5wZXJzaXN0ZXIgPSBsb2NhbGZvcmFnZS5jcmVhdGVJbnN0YW5jZSh7XG4gICAgICAgICAgICBuYW1lOiBcImRhdGFjb3JlL2NhY2hlL1wiICsgdGhpcy5hcHBJZCxcbiAgICAgICAgICAgIGRyaXZlcjogW2xvY2FsZm9yYWdlLklOREVYRUREQl0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDYWNoZSBtZXRhZGF0YSBhYm91dCBmaWxlcyBhbmQgc2VjdGlvbnMgaW4gdGhlIGRhdGFjb3JlIGluZGV4LlwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTG9hZCBmaWxlIG1ldGFkYXRhIGJ5IHBhdGguICovXG4gICAgcHVibGljIGFzeW5jIGxvYWRGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVkPFBhcnRpYWw8YW55Pj4gfCBudWxsIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3Rlci5nZXRJdGVtKHRoaXMuZmlsZUtleShwYXRoKSkudGhlbigocmF3KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmF3IGFzIGFueSBhcyBDYWNoZWQ8UGFydGlhbDxhbnk+PjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIFN0b3JlIGZpbGUgbWV0YWRhdGEgYnkgcGF0aC4gKi9cbiAgICBwdWJsaWMgYXN5bmMgc3RvcmVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogUGFydGlhbDxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGVyc2lzdGVyLnNldEl0ZW0odGhpcy5maWxlS2V5KHBhdGgpLCB7XG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIERyb3Agb2xkIGZpbGUga2V5cyB0aGF0IG5vIGxvbmdlciBleGlzdC4gKi9cbiAgICBwdWJsaWMgYXN5bmMgc3luY2hyb25pemUoZXhpc3Rpbmc6IHN0cmluZ1tdIHwgU2V0PHN0cmluZz4pOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gICAgICAgIGxldCBrZXlzID0gbmV3IFNldChhd2FpdCB0aGlzLmFsbEZpbGVzKCkpO1xuICAgICAgICBmb3IgKGxldCBleGlzdCBvZiBleGlzdGluZykga2V5cy5kZWxldGUoZXhpc3QpO1xuXG4gICAgICAgIC8vIEFueSBrZXlzIHJlbWFpbmluZyBhZnRlciBkZWxldGluZyBleGlzdGluZyBrZXlzIGFyZSBub24tZXhpc3RlbnQga2V5cyB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIGZyb20gY2FjaGUuXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSBhd2FpdCB0aGlzLnBlcnNpc3Rlci5yZW1vdmVJdGVtKHRoaXMuZmlsZUtleShrZXkpKTtcblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9XG5cbiAgICAvKiogT2J0YWluIGEgbGlzdCBvZiBhbGwgbWV0YWRhdGEga2V5cy4gKi9cbiAgICBwdWJsaWMgYXN5bmMgYWxsS2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3Rlci5rZXlzKCk7XG4gICAgfVxuXG4gICAgLyoqIE9idGFpbiBhIGxpc3Qgb2YgYWxsIHBlcnNpc3RlZCBmaWxlcy4gKi9cbiAgICBwdWJsaWMgYXN5bmMgYWxsRmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBsZXQga2V5cyA9IGF3YWl0IHRoaXMuYWxsS2V5cygpO1xuICAgICAgICByZXR1cm4ga2V5cy5maWx0ZXIoKGspID0+IGsuc3RhcnRzV2l0aChcImZpbGU6XCIpKS5tYXAoKGspID0+IGsuc3Vic3RyaW5nKDUpKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGEgdW5pcXVlIGtleSBmb3IgYSBnaXZlbiBmaWxlIHBhdGguICovXG4gICAgcHVibGljIGZpbGVLZXkocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiZmlsZTpcIiArIHBhdGg7XG4gICAgfVxufVxuIiwgIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5saW5lV29ya2VyKHNjcmlwdFRleHQpIHtcbiAgbGV0IGJsb2IgPSBuZXcgQmxvYihbc2NyaXB0VGV4dF0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xuICBsZXQgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgbGV0IHdvcmtlciA9IG5ldyBXb3JrZXIodXJsLCB7XCJuYW1lXCI6XCJEYXRhY29yZSBJbmRleGVyXCJ9KTtcbiAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICByZXR1cm4gd29ya2VyO1xufVxuIiwgImltcG9ydCBpbmxpbmVXb3JrZXIgZnJvbSAnX19pbmxpbmUtd29ya2VyJ1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gV29ya2VyKCkge1xuICByZXR1cm4gaW5saW5lV29ya2VyKFwidmFyIGNsPU9iamVjdC5jcmVhdGU7dmFyIEpzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmbD1PYmplY3QuZGVmaW5lUHJvcGVydGllcyxkbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGhsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLG1sPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLHFyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMscGw9T2JqZWN0LmdldFByb3RvdHlwZU9mLHpzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTW89T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgSHM9KG4sZSk9PihlPVN5bWJvbFtuXSk/ZTpTeW1ib2wuZm9yKFxcXCJTeW1ib2wuXFxcIituKSxEbD1uPT57dGhyb3cgVHlwZUVycm9yKG4pfTt2YXIgQW89KG4sZSx0KT0+ZSBpbiBuP0pzKG4sZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pOm5bZV09dCxSPShuLGUpPT57Zm9yKHZhciB0IGluIGV8fChlPXt9KSl6cy5jYWxsKGUsdCkmJkFvKG4sdCxlW3RdKTtpZihxcilmb3IodmFyIHQgb2YgcXIoZSkpTW8uY2FsbChlLHQpJiZBbyhuLHQsZVt0XSk7cmV0dXJuIG59LHllPShuLGUpPT5mbChuLGhsKGUpKTt2YXIgWXM9KG4sZSk9Pnt2YXIgdD17fTtmb3IodmFyIHIgaW4gbil6cy5jYWxsKG4scikmJmUuaW5kZXhPZihyKTwwJiYodFtyXT1uW3JdKTtpZihuIT1udWxsJiZxcilmb3IodmFyIHIgb2YgcXIobikpZS5pbmRleE9mKHIpPDAmJk1vLmNhbGwobixyKSYmKHRbcl09bltyXSk7cmV0dXJuIHR9O3ZhciBfbz0obixlKT0+KCk9PihlfHxuKChlPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxlKSxlLmV4cG9ydHMpO3ZhciB5bD0obixlLHQscik9PntpZihlJiZ0eXBlb2YgZT09XFxcIm9iamVjdFxcXCJ8fHR5cGVvZiBlPT1cXFwiZnVuY3Rpb25cXFwiKWZvcihsZXQgcyBvZiBtbChlKSkhenMuY2FsbChuLHMpJiZzIT09dCYmSnMobixzLHtnZXQ6KCk9PmVbc10sZW51bWVyYWJsZTohKHI9ZGwoZSxzKSl8fHIuZW51bWVyYWJsZX0pO3JldHVybiBufTt2YXIgVnI9KG4sZSx0KT0+KHQ9biE9bnVsbD9jbChwbChuKSk6e30seWwoZXx8IW58fCFuLl9fZXNNb2R1bGU/SnModCxcXFwiZGVmYXVsdFxcXCIse3ZhbHVlOm4sZW51bWVyYWJsZTohMH0pOnQsbikpO3ZhciBnbD1mdW5jdGlvbihuLGUpe3RoaXNbMF09bix0aGlzWzFdPWV9O3ZhciBTPW49Pnt2YXIgZT1uW0hzKFxcXCJhc3luY0l0ZXJhdG9yXFxcIildLHQ9ITEscixzPXt9O3JldHVybiBlPT1udWxsPyhlPW5bSHMoXFxcIml0ZXJhdG9yXFxcIildKCkscj1pPT5zW2ldPW89PmVbaV0obykpOihlPWUuY2FsbChuKSxyPWk9PnNbaV09bz0+e2lmKHQpe2lmKHQ9ITEsaT09PVxcXCJ0aHJvd1xcXCIpdGhyb3cgbztyZXR1cm4gb31yZXR1cm4gdD0hMCx7ZG9uZTohMSx2YWx1ZTpuZXcgZ2wobmV3IFByb21pc2UoYT0+e3ZhciB1PWVbaV0obyk7dSBpbnN0YW5jZW9mIE9iamVjdHx8RGwoXFxcIk9iamVjdCBleHBlY3RlZFxcXCIpLGEodSl9KSwxKX19KSxzW0hzKFxcXCJpdGVyYXRvclxcXCIpXT0oKT0+cyxyKFxcXCJuZXh0XFxcIiksXFxcInRocm93XFxcImluIGU/cihcXFwidGhyb3dcXFwiKTpzLnRocm93PWk9Pnt0aHJvdyBpfSxcXFwicmV0dXJuXFxcImluIGUmJnIoXFxcInJldHVyblxcXCIpLHN9O3ZhciBucz1fbygobXIsQWkpPT57KGZ1bmN0aW9uKG4sZSl7dHlwZW9mIG1yPT1cXFwib2JqZWN0XFxcIiYmdHlwZW9mIEFpPT1cXFwib2JqZWN0XFxcIj9BaS5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT1cXFwiZnVuY3Rpb25cXFwiJiZkZWZpbmUuYW1kP2RlZmluZShbXSxlKTp0eXBlb2YgbXI9PVxcXCJvYmplY3RcXFwiP21yLlBhcnNpbW1vbj1lKCk6bi5QYXJzaW1tb249ZSgpfSkodHlwZW9mIHNlbGYhPVxcXCJ1bmRlZmluZWRcXFwiP3NlbGY6bXIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9e307ZnVuY3Rpb24gdChyKXtpZihlW3JdKXJldHVybiBlW3JdLmV4cG9ydHM7dmFyIHM9ZVtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIG5bcl0uY2FsbChzLmV4cG9ydHMscyxzLmV4cG9ydHMsdCkscy5sPSEwLHMuZXhwb3J0c31yZXR1cm4gdC5tPW4sdC5jPWUsdC5kPWZ1bmN0aW9uKHIscyxpKXt0Lm8ocixzKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHIscyx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Oml9KX0sdC5yPWZ1bmN0aW9uKHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFxcXCJfX2VzTW9kdWxlXFxcIix7dmFsdWU6ITB9KX0sdC5uPWZ1bmN0aW9uKHIpe3ZhciBzPXImJnIuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiByLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9O3JldHVybiB0LmQocyxcXFwiYVxcXCIscyksc30sdC5vPWZ1bmN0aW9uKHIscyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMpfSx0LnA9XFxcIlxcXCIsdCh0LnM9MCl9KFtmdW5jdGlvbihuLGUsdCl7XFxcInVzZSBzdHJpY3RcXFwiO2Z1bmN0aW9uIHIoYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpcmV0dXJuIG5ldyByKGMpO3RoaXMuXz1jfXZhciBzPXIucHJvdG90eXBlO2Z1bmN0aW9uIGkoYyxwKXtmb3IodmFyIEU9MDtFPGM7RSsrKXAoRSl9ZnVuY3Rpb24gbyhjLHAsRSl7cmV0dXJuIGZ1bmN0aW9uKGssTCl7aShMLmxlbmd0aCxmdW5jdGlvbihBKXtrKExbQV0sQSxMKX0pfShmdW5jdGlvbihrLEwsQSl7cD1jKHAsayxMLEEpfSxFKSxwfWZ1bmN0aW9uIGEoYyxwKXtyZXR1cm4gbyhmdW5jdGlvbihFLGssTCxBKXtyZXR1cm4gRS5jb25jYXQoW2MoayxMLEEpXSl9LFtdLHApfWZ1bmN0aW9uIHUoYyxwKXt2YXIgRT17djowLGJ1ZjpwfTtyZXR1cm4gaShjLGZ1bmN0aW9uKCl7dmFyIGs7RT17djpFLnY8PDF8KGs9RS5idWYsa1swXT4+NyksYnVmOmZ1bmN0aW9uKEwpe3ZhciBBPW8oZnVuY3Rpb24oTSxVLHRlLEVlKXtyZXR1cm4gTS5jb25jYXQodGU9PT1FZS5sZW5ndGgtMT9CdWZmZXIuZnJvbShbVSwwXSkucmVhZFVJbnQxNkJFKDApOkVlLnJlYWRVSW50MTZCRSh0ZSkpfSxbXSxMKTtyZXR1cm4gQnVmZmVyLmZyb20oYShmdW5jdGlvbihNKXtyZXR1cm4oTTw8MSY2NTUzNSk+Pjh9LEEpKX0oRS5idWYpfX0pLEV9ZnVuY3Rpb24gbCgpe3JldHVybiB0eXBlb2YgQnVmZmVyIT1cXFwidW5kZWZpbmVkXFxcIn1mdW5jdGlvbiBmKCl7aWYoIWwoKSl0aHJvdyBuZXcgRXJyb3IoXFxcIkJ1ZmZlciBnbG9iYWwgZG9lcyBub3QgZXhpc3Q7IHBsZWFzZSB1c2Ugd2VicGFjayBpZiB5b3UgbmVlZCB0byBwYXJzZSBCdWZmZXJzIGluIHRoZSBicm93c2VyLlxcXCIpfWZ1bmN0aW9uIGQoYyl7ZigpO3ZhciBwPW8oZnVuY3Rpb24oQSxNKXtyZXR1cm4gQStNfSwwLGMpO2lmKHAlOCE9MCl0aHJvdyBuZXcgRXJyb3IoXFxcIlRoZSBiaXRzIFtcXFwiK2Muam9pbihcXFwiLCBcXFwiKStcXFwiXSBhZGQgdXAgdG8gXFxcIitwK1xcXCIgd2hpY2ggaXMgbm90IGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzOyB0aGUgdG90YWwgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA4XFxcIik7dmFyIEUsaz1wLzgsTD0oRT1mdW5jdGlvbihBKXtyZXR1cm4gQT40OH0sbyhmdW5jdGlvbihBLE0pe3JldHVybiBBfHwoRShNKT9NOkEpfSxudWxsLGMpKTtpZihMKXRocm93IG5ldyBFcnJvcihMK1xcXCIgYml0IHJhbmdlIHJlcXVlc3RlZCBleGNlZWRzIDQ4IGJpdCAoNiBieXRlKSBOdW1iZXIgbWF4LlxcXCIpO3JldHVybiBuZXcgcihmdW5jdGlvbihBLE0pe3ZhciBVPWsrTTtyZXR1cm4gVT5BLmxlbmd0aD92KE0say50b1N0cmluZygpK1xcXCIgYnl0ZXNcXFwiKTp3KFUsbyhmdW5jdGlvbih0ZSxFZSl7dmFyIG1lPXUoRWUsdGUuYnVmKTtyZXR1cm57Y29sbDp0ZS5jb2xsLmNvbmNhdChtZS52KSxidWY6bWUuYnVmfX0se2NvbGw6W10sYnVmOkEuc2xpY2UoTSxVKX0sYykuY29sbCl9KX1mdW5jdGlvbiBtKGMscCl7cmV0dXJuIG5ldyByKGZ1bmN0aW9uKEUsayl7cmV0dXJuIGYoKSxrK3A+RS5sZW5ndGg/dihrLHArXFxcIiBieXRlcyBmb3IgXFxcIitjKTp3KGsrcCxFLnNsaWNlKGssaytwKSl9KX1mdW5jdGlvbiBoKGMscCl7aWYodHlwZW9mKEU9cCkhPVxcXCJudW1iZXJcXFwifHxNYXRoLmZsb29yKEUpIT09RXx8cDwwfHxwPjYpdGhyb3cgbmV3IEVycm9yKGMrXFxcIiByZXF1aXJlcyBpbnRlZ2VyIGxlbmd0aCBpbiByYW5nZSBbMCwgNl0uXFxcIik7dmFyIEV9ZnVuY3Rpb24gYihjKXtyZXR1cm4gaChcXFwidWludEJFXFxcIixjKSxtKFxcXCJ1aW50QkUoXFxcIitjK1xcXCIpXFxcIixjKS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVhZFVJbnRCRSgwLGMpfSl9ZnVuY3Rpb24gZyhjKXtyZXR1cm4gaChcXFwidWludExFXFxcIixjKSxtKFxcXCJ1aW50TEUoXFxcIitjK1xcXCIpXFxcIixjKS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVhZFVJbnRMRSgwLGMpfSl9ZnVuY3Rpb24gRChjKXtyZXR1cm4gaChcXFwiaW50QkVcXFwiLGMpLG0oXFxcImludEJFKFxcXCIrYytcXFwiKVxcXCIsYykubWFwKGZ1bmN0aW9uKHApe3JldHVybiBwLnJlYWRJbnRCRSgwLGMpfSl9ZnVuY3Rpb24gVChjKXtyZXR1cm4gaChcXFwiaW50TEVcXFwiLGMpLG0oXFxcImludExFKFxcXCIrYytcXFwiKVxcXCIsYykubWFwKGZ1bmN0aW9uKHApe3JldHVybiBwLnJlYWRJbnRMRSgwLGMpfSl9ZnVuY3Rpb24gSShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIHJ9ZnVuY3Rpb24gTihjKXtyZXR1cm57fS50b1N0cmluZy5jYWxsKGMpPT09XFxcIltvYmplY3QgQXJyYXldXFxcIn1mdW5jdGlvbiB5KGMpe3JldHVybiBsKCkmJkJ1ZmZlci5pc0J1ZmZlcihjKX1mdW5jdGlvbiB3KGMscCl7cmV0dXJue3N0YXR1czohMCxpbmRleDpjLHZhbHVlOnAsZnVydGhlc3Q6LTEsZXhwZWN0ZWQ6W119fWZ1bmN0aW9uIHYoYyxwKXtyZXR1cm4gTihwKXx8KHA9W3BdKSx7c3RhdHVzOiExLGluZGV4Oi0xLHZhbHVlOm51bGwsZnVydGhlc3Q6YyxleHBlY3RlZDpwfX1mdW5jdGlvbiB4KGMscCl7aWYoIXB8fGMuZnVydGhlc3Q+cC5mdXJ0aGVzdClyZXR1cm4gYzt2YXIgRT1jLmZ1cnRoZXN0PT09cC5mdXJ0aGVzdD9mdW5jdGlvbihrLEwpe2lmKGZ1bmN0aW9uKCl7aWYoci5fc3VwcG9ydHNTZXQhPT12b2lkIDApcmV0dXJuIHIuX3N1cHBvcnRzU2V0O3ZhciBodD10eXBlb2YgU2V0IT1cXFwidW5kZWZpbmVkXFxcIjtyZXR1cm4gci5fc3VwcG9ydHNTZXQ9aHQsaHR9KCkmJkFycmF5LmZyb20pe2Zvcih2YXIgQT1uZXcgU2V0KGspLE09MDtNPEwubGVuZ3RoO00rKylBLmFkZChMW01dKTt2YXIgVT1BcnJheS5mcm9tKEEpO3JldHVybiBVLnNvcnQoKSxVfWZvcih2YXIgdGU9e30sRWU9MDtFZTxrLmxlbmd0aDtFZSsrKXRlW2tbRWVdXT0hMDtmb3IodmFyIG1lPTA7bWU8TC5sZW5ndGg7bWUrKyl0ZVtMW21lXV09ITA7dmFyIGR0PVtdO2Zvcih2YXIgdmUgaW4gdGUpKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLHZlKSYmZHQucHVzaCh2ZSk7cmV0dXJuIGR0LnNvcnQoKSxkdH0oYy5leHBlY3RlZCxwLmV4cGVjdGVkKTpwLmV4cGVjdGVkO3JldHVybntzdGF0dXM6Yy5zdGF0dXMsaW5kZXg6Yy5pbmRleCx2YWx1ZTpjLnZhbHVlLGZ1cnRoZXN0OnAuZnVydGhlc3QsZXhwZWN0ZWQ6RX19dmFyIEM9e307ZnVuY3Rpb24gVihjLHApe2lmKHkoYykpcmV0dXJue29mZnNldDpwLGxpbmU6LTEsY29sdW1uOi0xfTtjIGluIEN8fChDW2NdPXt9KTtmb3IodmFyIEU9Q1tjXSxrPTAsTD0wLEE9MCxNPXA7TT49MDspe2lmKE0gaW4gRSl7az1FW01dLmxpbmUsQT09PTAmJihBPUVbTV0ubGluZVN0YXJ0KTticmVha30oYy5jaGFyQXQoTSk9PT1gXFxuYHx8Yy5jaGFyQXQoTSk9PT1cXFwiXFxcXHJcXFwiJiZjLmNoYXJBdChNKzEpIT09YFxcbmApJiYoTCsrLEE9PT0wJiYoQT1NKzEpKSxNLS19dmFyIFU9aytMLHRlPXAtQTtyZXR1cm4gRVtwXT17bGluZTpVLGxpbmVTdGFydDpBfSx7b2Zmc2V0OnAsbGluZTpVKzEsY29sdW1uOnRlKzF9fWZ1bmN0aW9uIGooYyl7aWYoIUkoYykpdGhyb3cgbmV3IEVycm9yKFxcXCJub3QgYSBwYXJzZXI6IFxcXCIrYyl9ZnVuY3Rpb24gWShjLHApe3JldHVybiB0eXBlb2YgYz09XFxcInN0cmluZ1xcXCI/Yy5jaGFyQXQocCk6Y1twXX1mdW5jdGlvbiBlZShjKXtpZih0eXBlb2YgYyE9XFxcIm51bWJlclxcXCIpdGhyb3cgbmV3IEVycm9yKFxcXCJub3QgYSBudW1iZXI6IFxcXCIrYyl9ZnVuY3Rpb24gYWUoYyl7aWYodHlwZW9mIGMhPVxcXCJmdW5jdGlvblxcXCIpdGhyb3cgbmV3IEVycm9yKFxcXCJub3QgYSBmdW5jdGlvbjogXFxcIitjKX1mdW5jdGlvbiBPKGMpe2lmKHR5cGVvZiBjIT1cXFwic3RyaW5nXFxcIil0aHJvdyBuZXcgRXJyb3IoXFxcIm5vdCBhIHN0cmluZzogXFxcIitjKX12YXIgJD0yLFE9Myx1ZT04LERlPTUqdWUsUmU9NCp1ZSxRdD1cXFwiICBcXFwiO2Z1bmN0aW9uIE10KGMscCl7cmV0dXJuIG5ldyBBcnJheShwKzEpLmpvaW4oYyl9ZnVuY3Rpb24gX3QoYyxwLEUpe3ZhciBrPXAtYy5sZW5ndGg7cmV0dXJuIGs8PTA/YzpNdChFLGspK2N9ZnVuY3Rpb24gQWUoYyxwLEUsayl7cmV0dXJue2Zyb206Yy1wPjA/Yy1wOjAsdG86YytFPms/azpjK0V9fWZ1bmN0aW9uIEJ0KGMscCl7dmFyIEUsayxMLEEsTSxVPXAuaW5kZXgsdGU9VS5vZmZzZXQsRWU9MTtpZih0ZT09PWMubGVuZ3RoKXJldHVyblxcXCJHb3QgdGhlIGVuZCBvZiB0aGUgaW5wdXRcXFwiO2lmKHkoYykpe3ZhciBtZT10ZS10ZSV1ZSxkdD10ZS1tZSx2ZT1BZShtZSxEZSxSZSt1ZSxjLmxlbmd0aCksaHQ9YShmdW5jdGlvbihsZSl7cmV0dXJuIGEoZnVuY3Rpb24oZW4pe3JldHVybiBfdChlbi50b1N0cmluZygxNiksMixcXFwiMFxcXCIpfSxsZSl9LGZ1bmN0aW9uKGxlLGVuKXt2YXIgdG49bGUubGVuZ3RoLFJ0PVtdLG5uPTA7aWYodG48PWVuKXJldHVybltsZS5zbGljZSgpXTtmb3IodmFyIHJuPTA7cm48dG47cm4rKylSdFtubl18fFJ0LnB1c2goW10pLFJ0W25uXS5wdXNoKGxlW3JuXSksKHJuKzEpJWVuPT0wJiZubisrO3JldHVybiBSdH0oYy5zbGljZSh2ZS5mcm9tLHZlLnRvKS50b0pTT04oKS5kYXRhLHVlKSk7QT1mdW5jdGlvbihsZSl7cmV0dXJuIGxlLmZyb209PT0wJiZsZS50bz09PTE/e2Zyb206bGUuZnJvbSx0bzpsZS50b306e2Zyb206bGUuZnJvbS91ZSx0bzpNYXRoLmZsb29yKGxlLnRvL3VlKX19KHZlKSxrPW1lL3VlLEU9MypkdCxkdD49NCYmKEUrPTEpLEVlPTIsTD1hKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGUubGVuZ3RoPD00P2xlLmpvaW4oXFxcIiBcXFwiKTpsZS5zbGljZSgwLDQpLmpvaW4oXFxcIiBcXFwiKStcXFwiICBcXFwiK2xlLnNsaWNlKDQpLmpvaW4oXFxcIiBcXFwiKX0saHQpLChNPSg4KihBLnRvPjA/QS50by0xOkEudG8pKS50b1N0cmluZygxNikubGVuZ3RoKTwyJiYoTT0yKX1lbHNle3ZhciBYdD1jLnNwbGl0KC9cXFxcclxcXFxufFtcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XS8pO0U9VS5jb2x1bW4tMSxrPVUubGluZS0xLEE9QWUoaywkLFEsWHQubGVuZ3RoKSxMPVh0LnNsaWNlKEEuZnJvbSxBLnRvKSxNPUEudG8udG9TdHJpbmcoKS5sZW5ndGh9dmFyIGxsPWstQS5mcm9tO3JldHVybiB5KGMpJiYoTT0oOCooQS50bz4wP0EudG8tMTpBLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKE09MiksbyhmdW5jdGlvbihsZSxlbix0bil7dmFyIFJ0LG5uPXRuPT09bGwscm49bm4/XFxcIj4gXFxcIjpRdDtyZXR1cm4gUnQ9eShjKT9fdCgoOCooQS5mcm9tK3RuKSkudG9TdHJpbmcoMTYpLE0sXFxcIjBcXFwiKTpfdCgoQS5mcm9tK3RuKzEpLnRvU3RyaW5nKCksTSxcXFwiIFxcXCIpLFtdLmNvbmNhdChsZSxbcm4rUnQrXFxcIiB8IFxcXCIrZW5dLG5uP1tRdCtNdChcXFwiIFxcXCIsTSkrXFxcIiB8IFxcXCIrX3QoXFxcIlxcXCIsRSxcXFwiIFxcXCIpK010KFxcXCJeXFxcIixFZSldOltdKX0sW10sTCkuam9pbihgXFxuYCl9ZnVuY3Rpb24gU28oYyxwKXtyZXR1cm5bYFxcbmAsXFxcIi0tIFBBUlNJTkcgRkFJTEVEIFxcXCIrTXQoXFxcIi1cXFwiLDUwKSxgXFxuXFxuYCxCdChjLHApLGBcXG5cXG5gLChFPXAuZXhwZWN0ZWQsRS5sZW5ndGg9PT0xP2BFeHBlY3RlZDpcXG5cXG5gK0VbMF06YEV4cGVjdGVkIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBcXG5cXG5gK0Uuam9pbihcXFwiLCBcXFwiKSksYFxcbmBdLmpvaW4oXFxcIlxcXCIpO3ZhciBFfWZ1bmN0aW9uIGtvKGMpe3JldHVybiBjLmZsYWdzIT09dm9pZCAwP2MuZmxhZ3M6W2MuZ2xvYmFsP1xcXCJnXFxcIjpcXFwiXFxcIixjLmlnbm9yZUNhc2U/XFxcImlcXFwiOlxcXCJcXFwiLGMubXVsdGlsaW5lP1xcXCJtXFxcIjpcXFwiXFxcIixjLnVuaWNvZGU/XFxcInVcXFwiOlxcXCJcXFwiLGMuc3RpY2t5P1xcXCJ5XFxcIjpcXFwiXFxcIl0uam9pbihcXFwiXFxcIil9ZnVuY3Rpb24gQnIoKXtmb3IodmFyIGM9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHA9Yy5sZW5ndGgsRT0wO0U8cDtFKz0xKWooY1tFXSk7cmV0dXJuIHIoZnVuY3Rpb24oayxMKXtmb3IodmFyIEEsTT1uZXcgQXJyYXkocCksVT0wO1U8cDtVKz0xKXtpZighKEE9eChjW1VdLl8oayxMKSxBKSkuc3RhdHVzKXJldHVybiBBO01bVV09QS52YWx1ZSxMPUEuaW5kZXh9cmV0dXJuIHgodyhMLE0pLEEpfSl9ZnVuY3Rpb24gUHQoKXt2YXIgYz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoYy5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcihcXFwic2VxTWFwIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudFxcXCIpO3ZhciBwPWMucG9wKCk7cmV0dXJuIGFlKHApLEJyLmFwcGx5KG51bGwsYykubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBwLmFwcGx5KG51bGwsRSl9KX1mdW5jdGlvbiBQcigpe3ZhciBjPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxwPWMubGVuZ3RoO2lmKHA9PT0wKXJldHVybiAkcihcXFwiemVybyBhbHRlcm5hdGVzXFxcIik7Zm9yKHZhciBFPTA7RTxwO0UrPTEpaihjW0VdKTtyZXR1cm4gcihmdW5jdGlvbihrLEwpe2Zvcih2YXIgQSxNPTA7TTxjLmxlbmd0aDtNKz0xKWlmKChBPXgoY1tNXS5fKGssTCksQSkpLnN0YXR1cylyZXR1cm4gQTtyZXR1cm4gQX0pfWZ1bmN0aW9uIENvKGMscCl7cmV0dXJuIFVzKGMscCkub3IoJHQoW10pKX1mdW5jdGlvbiBVcyhjLHApe3JldHVybiBqKGMpLGoocCksUHQoYyxwLnRoZW4oYykubWFueSgpLGZ1bmN0aW9uKEUsayl7cmV0dXJuW0VdLmNvbmNhdChrKX0pfWZ1bmN0aW9uIEJuKGMpe08oYyk7dmFyIHA9XFxcIidcXFwiK2MrXFxcIidcXFwiO3JldHVybiByKGZ1bmN0aW9uKEUsayl7dmFyIEw9aytjLmxlbmd0aCxBPUUuc2xpY2UoayxMKTtyZXR1cm4gQT09PWM/dyhMLEEpOnYoayxwKX0pfWZ1bmN0aW9uIGZ0KGMscCl7KGZ1bmN0aW9uKEwpe2lmKCEoTCBpbnN0YW5jZW9mIFJlZ0V4cCkpdGhyb3cgbmV3IEVycm9yKFxcXCJub3QgYSByZWdleHA6IFxcXCIrTCk7Zm9yKHZhciBBPWtvKEwpLE09MDtNPEEubGVuZ3RoO00rKyl7dmFyIFU9QS5jaGFyQXQoTSk7aWYoVSE9PVxcXCJpXFxcIiYmVSE9PVxcXCJtXFxcIiYmVSE9PVxcXCJ1XFxcIiYmVSE9PVxcXCJzXFxcIil0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHJlZ2V4cCBmbGFnIFxcXCInK1UrJ1xcXCI6ICcrTCl9fSkoYyksYXJndW1lbnRzLmxlbmd0aD49Mj9lZShwKTpwPTA7dmFyIEU9ZnVuY3Rpb24oTCl7cmV0dXJuIFJlZ0V4cChcXFwiXig/OlxcXCIrTC5zb3VyY2UrXFxcIilcXFwiLGtvKEwpKX0oYyksaz1cXFwiXFxcIitjO3JldHVybiByKGZ1bmN0aW9uKEwsQSl7dmFyIE09RS5leGVjKEwuc2xpY2UoQSkpO2lmKE0pe2lmKDA8PXAmJnA8PU0ubGVuZ3RoKXt2YXIgVT1NWzBdLHRlPU1bcF07cmV0dXJuIHcoQStVLmxlbmd0aCx0ZSl9cmV0dXJuIHYoQSxcXFwidmFsaWQgbWF0Y2ggZ3JvdXAgKDAgdG8gXFxcIitNLmxlbmd0aCtcXFwiKSBpbiBcXFwiK2spfXJldHVybiB2KEEsayl9KX1mdW5jdGlvbiAkdChjKXtyZXR1cm4gcihmdW5jdGlvbihwLEUpe3JldHVybiB3KEUsYyl9KX1mdW5jdGlvbiAkcihjKXtyZXR1cm4gcihmdW5jdGlvbihwLEUpe3JldHVybiB2KEUsYyl9KX1mdW5jdGlvbiBScihjKXtpZihJKGMpKXJldHVybiByKGZ1bmN0aW9uKHAsRSl7dmFyIGs9Yy5fKHAsRSk7cmV0dXJuIGsuaW5kZXg9RSxrLnZhbHVlPVxcXCJcXFwiLGt9KTtpZih0eXBlb2YgYz09XFxcInN0cmluZ1xcXCIpcmV0dXJuIFJyKEJuKGMpKTtpZihjIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBScihmdChjKSk7dGhyb3cgbmV3IEVycm9yKFxcXCJub3QgYSBzdHJpbmcsIHJlZ2V4cCwgb3IgcGFyc2VyOiBcXFwiK2MpfWZ1bmN0aW9uIHZvKGMpe3JldHVybiBqKGMpLHIoZnVuY3Rpb24ocCxFKXt2YXIgaz1jLl8ocCxFKSxMPXAuc2xpY2UoRSxrLmluZGV4KTtyZXR1cm4gay5zdGF0dXM/dihFLCdub3QgXFxcIicrTCsnXFxcIicpOncoRSxudWxsKX0pfWZ1bmN0aW9uIGpyKGMpe3JldHVybiBhZShjKSxyKGZ1bmN0aW9uKHAsRSl7dmFyIGs9WShwLEUpO3JldHVybiBFPHAubGVuZ3RoJiZjKGspP3coRSsxLGspOnYoRSxcXFwiYSBjaGFyYWN0ZXIvYnl0ZSBtYXRjaGluZyBcXFwiK2MpfSl9ZnVuY3Rpb24geG8oYyxwKXthcmd1bWVudHMubGVuZ3RoPDImJihwPWMsYz12b2lkIDApO3ZhciBFPXIoZnVuY3Rpb24oayxMKXtyZXR1cm4gRS5fPXAoKS5fLEUuXyhrLEwpfSk7cmV0dXJuIGM/RS5kZXNjKGMpOkV9ZnVuY3Rpb24gS3MoKXtyZXR1cm4gJHIoXFxcImZhbnRhc3ktbGFuZC9lbXB0eVxcXCIpfXMucGFyc2U9ZnVuY3Rpb24oYyl7aWYodHlwZW9mIGMhPVxcXCJzdHJpbmdcXFwiJiYheShjKSl0aHJvdyBuZXcgRXJyb3IoXFxcIi5wYXJzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3RyaW5nIG9yIEJ1ZmZlciBhcyBpdHMgYXJndW1lbnRcXFwiKTt2YXIgcCxFPXRoaXMuc2tpcChXcykuXyhjLDApO3JldHVybiBwPUUuc3RhdHVzP3tzdGF0dXM6ITAsdmFsdWU6RS52YWx1ZX06e3N0YXR1czohMSxpbmRleDpWKGMsRS5mdXJ0aGVzdCksZXhwZWN0ZWQ6RS5leHBlY3RlZH0sZGVsZXRlIENbY10scH0scy50cnlQYXJzZT1mdW5jdGlvbihjKXt2YXIgcD10aGlzLnBhcnNlKGMpO2lmKHAuc3RhdHVzKXJldHVybiBwLnZhbHVlO3ZhciBFPVNvKGMscCksaz1uZXcgRXJyb3IoRSk7dGhyb3cgay50eXBlPVxcXCJQYXJzaW1tb25FcnJvclxcXCIsay5yZXN1bHQ9cCxrfSxzLmFzc2VydD1mdW5jdGlvbihjLHApe3JldHVybiB0aGlzLmNoYWluKGZ1bmN0aW9uKEUpe3JldHVybiBjKEUpPyR0KEUpOiRyKHApfSl9LHMub3I9ZnVuY3Rpb24oYyl7cmV0dXJuIFByKHRoaXMsYyl9LHMudHJpbT1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy53cmFwKGMsYyl9LHMud3JhcD1mdW5jdGlvbihjLHApe3JldHVybiBQdChjLHRoaXMscCxmdW5jdGlvbihFLGspe3JldHVybiBrfSl9LHMudGhydT1mdW5jdGlvbihjKXtyZXR1cm4gYyh0aGlzKX0scy50aGVuPWZ1bmN0aW9uKGMpe3JldHVybiBqKGMpLEJyKHRoaXMsYykubWFwKGZ1bmN0aW9uKHApe3JldHVybiBwWzFdfSl9LHMubWFueT1mdW5jdGlvbigpe3ZhciBjPXRoaXM7cmV0dXJuIHIoZnVuY3Rpb24ocCxFKXtmb3IodmFyIGs9W10sTD12b2lkIDA7Oyl7aWYoIShMPXgoYy5fKHAsRSksTCkpLnN0YXR1cylyZXR1cm4geCh3KEUsayksTCk7aWYoRT09PUwuaW5kZXgpdGhyb3cgbmV3IEVycm9yKFxcXCJpbmZpbml0ZSBsb29wIGRldGVjdGVkIGluIC5tYW55KCkgcGFyc2VyIC0tLSBjYWxsaW5nIC5tYW55KCkgb24gYSBwYXJzZXIgd2hpY2ggY2FuIGFjY2VwdCB6ZXJvIGNoYXJhY3RlcnMgaXMgdXN1YWxseSB0aGUgY2F1c2VcXFwiKTtFPUwuaW5kZXgsay5wdXNoKEwudmFsdWUpfX0pfSxzLnRpZVdpdGg9ZnVuY3Rpb24oYyl7cmV0dXJuIE8oYyksdGhpcy5tYXAoZnVuY3Rpb24ocCl7aWYoZnVuY3Rpb24oTCl7aWYoIU4oTCkpdGhyb3cgbmV3IEVycm9yKFxcXCJub3QgYW4gYXJyYXk6IFxcXCIrTCl9KHApLHAubGVuZ3RoKXtPKHBbMF0pO2Zvcih2YXIgRT1wWzBdLGs9MTtrPHAubGVuZ3RoO2srKylPKHBba10pLEUrPWMrcFtrXTtyZXR1cm4gRX1yZXR1cm5cXFwiXFxcIn0pfSxzLnRpZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpZVdpdGgoXFxcIlxcXCIpfSxzLnRpbWVzPWZ1bmN0aW9uKGMscCl7dmFyIEU9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYocD1jKSxlZShjKSxlZShwKSxyKGZ1bmN0aW9uKGssTCl7Zm9yKHZhciBBPVtdLE09dm9pZCAwLFU9dm9pZCAwLHRlPTA7dGU8Yzt0ZSs9MSl7aWYoVT14KE09RS5fKGssTCksVSksIU0uc3RhdHVzKXJldHVybiBVO0w9TS5pbmRleCxBLnB1c2goTS52YWx1ZSl9Zm9yKDt0ZTxwJiYoVT14KE09RS5fKGssTCksVSksTS5zdGF0dXMpO3RlKz0xKUw9TS5pbmRleCxBLnB1c2goTS52YWx1ZSk7cmV0dXJuIHgodyhMLEEpLFUpfSl9LHMucmVzdWx0PWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBjfSl9LHMuYXRNb3N0PWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLnRpbWVzKDAsYyl9LHMuYXRMZWFzdD1mdW5jdGlvbihjKXtyZXR1cm4gUHQodGhpcy50aW1lcyhjKSx0aGlzLm1hbnkoKSxmdW5jdGlvbihwLEUpe3JldHVybiBwLmNvbmNhdChFKX0pfSxzLm1hcD1mdW5jdGlvbihjKXthZShjKTt2YXIgcD10aGlzO3JldHVybiByKGZ1bmN0aW9uKEUsayl7dmFyIEw9cC5fKEUsayk7cmV0dXJuIEwuc3RhdHVzP3godyhMLmluZGV4LGMoTC52YWx1ZSkpLEwpOkx9KX0scy5jb250cmFtYXA9ZnVuY3Rpb24oYyl7YWUoYyk7dmFyIHA9dGhpcztyZXR1cm4gcihmdW5jdGlvbihFLGspe3ZhciBMPXAucGFyc2UoYyhFLnNsaWNlKGspKSk7cmV0dXJuIEwuc3RhdHVzP3coaytFLmxlbmd0aCxMLnZhbHVlKTpMfSl9LHMucHJvbWFwPWZ1bmN0aW9uKGMscCl7cmV0dXJuIGFlKGMpLGFlKHApLHRoaXMuY29udHJhbWFwKGMpLm1hcChwKX0scy5za2lwPWZ1bmN0aW9uKGMpe3JldHVybiBCcih0aGlzLGMpLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcFswXX0pfSxzLm1hcms9ZnVuY3Rpb24oKXtyZXR1cm4gUHQoUG4sdGhpcyxQbixmdW5jdGlvbihjLHAsRSl7cmV0dXJue3N0YXJ0OmMsdmFsdWU6cCxlbmQ6RX19KX0scy5ub2RlPWZ1bmN0aW9uKGMpe3JldHVybiBQdChQbix0aGlzLFBuLGZ1bmN0aW9uKHAsRSxrKXtyZXR1cm57bmFtZTpjLHZhbHVlOkUsc3RhcnQ6cCxlbmQ6a319KX0scy5zZXBCeT1mdW5jdGlvbihjKXtyZXR1cm4gQ28odGhpcyxjKX0scy5zZXBCeTE9ZnVuY3Rpb24oYyl7cmV0dXJuIFVzKHRoaXMsYyl9LHMubG9va2FoZWFkPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLnNraXAoUnIoYykpfSxzLm5vdEZvbGxvd2VkQnk9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuc2tpcCh2byhjKSl9LHMuZGVzYz1mdW5jdGlvbihjKXtOKGMpfHwoYz1bY10pO3ZhciBwPXRoaXM7cmV0dXJuIHIoZnVuY3Rpb24oRSxrKXt2YXIgTD1wLl8oRSxrKTtyZXR1cm4gTC5zdGF0dXN8fChMLmV4cGVjdGVkPWMpLEx9KX0scy5mYWxsYmFjaz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5vcigkdChjKSl9LHMuYXA9ZnVuY3Rpb24oYyl7cmV0dXJuIFB0KGMsdGhpcyxmdW5jdGlvbihwLEUpe3JldHVybiBwKEUpfSl9LHMuY2hhaW49ZnVuY3Rpb24oYyl7dmFyIHA9dGhpcztyZXR1cm4gcihmdW5jdGlvbihFLGspe3ZhciBMPXAuXyhFLGspO3JldHVybiBMLnN0YXR1cz94KGMoTC52YWx1ZSkuXyhFLEwuaW5kZXgpLEwpOkx9KX0scy5jb25jYXQ9cy5vcixzLmVtcHR5PUtzLHMub2Y9JHQsc1tcXFwiZmFudGFzeS1sYW5kL2FwXFxcIl09cy5hcCxzW1xcXCJmYW50YXN5LWxhbmQvY2hhaW5cXFwiXT1zLmNoYWluLHNbXFxcImZhbnRhc3ktbGFuZC9jb25jYXRcXFwiXT1zLmNvbmNhdCxzW1xcXCJmYW50YXN5LWxhbmQvZW1wdHlcXFwiXT1zLmVtcHR5LHNbXFxcImZhbnRhc3ktbGFuZC9vZlxcXCJdPXMub2Ysc1tcXFwiZmFudGFzeS1sYW5kL21hcFxcXCJdPXMubWFwO3ZhciBQbj1yKGZ1bmN0aW9uKGMscCl7cmV0dXJuIHcocCxWKGMscCkpfSksZWw9cihmdW5jdGlvbihjLHApe3JldHVybiBwPj1jLmxlbmd0aD92KHAsXFxcImFueSBjaGFyYWN0ZXIvYnl0ZVxcXCIpOncocCsxLFkoYyxwKSl9KSx0bD1yKGZ1bmN0aW9uKGMscCl7cmV0dXJuIHcoYy5sZW5ndGgsYy5zbGljZShwKSl9KSxXcz1yKGZ1bmN0aW9uKGMscCl7cmV0dXJuIHA8Yy5sZW5ndGg/dihwLFxcXCJFT0ZcXFwiKTp3KHAsbnVsbCl9KSxubD1mdCgvWzAtOV0vKS5kZXNjKFxcXCJhIGRpZ2l0XFxcIikscmw9ZnQoL1swLTldKi8pLmRlc2MoXFxcIm9wdGlvbmFsIGRpZ2l0c1xcXCIpLHNsPWZ0KC9bYS16XS9pKS5kZXNjKFxcXCJhIGxldHRlclxcXCIpLGlsPWZ0KC9bYS16XSovaSkuZGVzYyhcXFwib3B0aW9uYWwgbGV0dGVyc1xcXCIpLG9sPWZ0KC9cXFxccyovKS5kZXNjKFxcXCJvcHRpb25hbCB3aGl0ZXNwYWNlXFxcIiksYWw9ZnQoL1xcXFxzKy8pLmRlc2MoXFxcIndoaXRlc3BhY2VcXFwiKSxPbz1CbihcXFwiXFxcXHJcXFwiKSxJbz1CbihgXFxuYCksTG89Qm4oYFxcXFxyXFxuYCksTm89UHIoTG8sSW8sT28pLmRlc2MoXFxcIm5ld2xpbmVcXFwiKSx1bD1QcihObyxXcyk7ci5hbGw9dGwsci5hbHQ9UHIsci5hbnk9ZWwsci5jcj1PbyxyLmNyZWF0ZUxhbmd1YWdlPWZ1bmN0aW9uKGMpe3ZhciBwPXt9O2Zvcih2YXIgRSBpbiBjKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChjLEUpJiZmdW5jdGlvbihrKXtwW2tdPXhvKGZ1bmN0aW9uKCl7cmV0dXJuIGNba10ocCl9KX0oRSk7cmV0dXJuIHB9LHIuY3JsZj1MbyxyLmN1c3RvbT1mdW5jdGlvbihjKXtyZXR1cm4gcihjKHcsdikpfSxyLmRpZ2l0PW5sLHIuZGlnaXRzPXJsLHIuZW1wdHk9S3Msci5lbmQ9dWwsci5lb2Y9V3Msci5mYWlsPSRyLHIuZm9ybWF0RXJyb3I9U28sci5pbmRleD1QbixyLmlzUGFyc2VyPUksci5sYXp5PXhvLHIubGV0dGVyPXNsLHIubGV0dGVycz1pbCxyLmxmPUlvLHIubG9va2FoZWFkPVJyLHIubWFrZUZhaWx1cmU9dixyLm1ha2VTdWNjZXNzPXcsci5uZXdsaW5lPU5vLHIubm9uZU9mPWZ1bmN0aW9uKGMpe3JldHVybiBqcihmdW5jdGlvbihwKXtyZXR1cm4gYy5pbmRleE9mKHApPDB9KS5kZXNjKFxcXCJub25lIG9mICdcXFwiK2MrXFxcIidcXFwiKX0sci5ub3RGb2xsb3dlZEJ5PXZvLHIub2Y9JHQsci5vbmVPZj1mdW5jdGlvbihjKXtmb3IodmFyIHA9Yy5zcGxpdChcXFwiXFxcIiksRT0wO0U8cC5sZW5ndGg7RSsrKXBbRV09XFxcIidcXFwiK3BbRV0rXFxcIidcXFwiO3JldHVybiBqcihmdW5jdGlvbihrKXtyZXR1cm4gYy5pbmRleE9mKGspPj0wfSkuZGVzYyhwKX0sci5vcHRXaGl0ZXNwYWNlPW9sLHIuUGFyc2VyPXIsci5yYW5nZT1mdW5jdGlvbihjLHApe3JldHVybiBqcihmdW5jdGlvbihFKXtyZXR1cm4gYzw9RSYmRTw9cH0pLmRlc2MoYytcXFwiLVxcXCIrcCl9LHIucmVnZXg9ZnQsci5yZWdleHA9ZnQsci5zZXBCeT1DbyxyLnNlcEJ5MT1VcyxyLnNlcT1CcixyLnNlcU1hcD1QdCxyLnNlcU9iaj1mdW5jdGlvbigpe2Zvcih2YXIgYyxwPXt9LEU9MCxrPShjPWFyZ3VtZW50cyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjKSksTD1rLmxlbmd0aCxBPTA7QTxMO0ErPTEpe3ZhciBNPWtbQV07aWYoIUkoTSkpe2lmKE4oTSkmJk0ubGVuZ3RoPT09MiYmdHlwZW9mIE1bMF09PVxcXCJzdHJpbmdcXFwiJiZJKE1bMV0pKXt2YXIgVT1NWzBdO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLFUpKXRocm93IG5ldyBFcnJvcihcXFwic2VxT2JqOiBkdXBsaWNhdGUga2V5IFxcXCIrVSk7cFtVXT0hMCxFKys7Y29udGludWV9dGhyb3cgbmV3IEVycm9yKFxcXCJzZXFPYmogYXJndW1lbnRzIG11c3QgYmUgcGFyc2VycyBvciBbc3RyaW5nLCBwYXJzZXJdIGFycmF5IHBhaXJzLlxcXCIpfX1pZihFPT09MCl0aHJvdyBuZXcgRXJyb3IoXFxcInNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYXJzZXIsIGZvdW5kIHplcm9cXFwiKTtyZXR1cm4gcihmdW5jdGlvbih0ZSxFZSl7Zm9yKHZhciBtZSxkdD17fSx2ZT0wO3ZlPEw7dmUrPTEpe3ZhciBodCxYdDtpZihOKGtbdmVdKT8oaHQ9a1t2ZV1bMF0sWHQ9a1t2ZV1bMV0pOihodD1udWxsLFh0PWtbdmVdKSwhKG1lPXgoWHQuXyh0ZSxFZSksbWUpKS5zdGF0dXMpcmV0dXJuIG1lO2h0JiYoZHRbaHRdPW1lLnZhbHVlKSxFZT1tZS5pbmRleH1yZXR1cm4geCh3KEVlLGR0KSxtZSl9KX0sci5zdHJpbmc9Qm4sci5zdWNjZWVkPSR0LHIudGFrZVdoaWxlPWZ1bmN0aW9uKGMpe3JldHVybiBhZShjKSxyKGZ1bmN0aW9uKHAsRSl7Zm9yKHZhciBrPUU7azxwLmxlbmd0aCYmYyhZKHAsaykpOylrKys7cmV0dXJuIHcoayxwLnNsaWNlKEUsaykpfSl9LHIudGVzdD1qcixyLndoaXRlc3BhY2U9YWwscltcXFwiZmFudGFzeS1sYW5kL2VtcHR5XFxcIl09S3MscltcXFwiZmFudGFzeS1sYW5kL29mXFxcIl09JHQsci5CaW5hcnk9e2JpdFNlcTpkLGJpdFNlcU9iajpmdW5jdGlvbihjKXtmKCk7dmFyIHA9e30sRT0wLGs9YShmdW5jdGlvbihBKXtpZihOKEEpKXt2YXIgTT1BO2lmKE0ubGVuZ3RoIT09Mil0aHJvdyBuZXcgRXJyb3IoXFxcIltcXFwiK00uam9pbihcXFwiLCBcXFwiKStcXFwiXSBzaG91bGQgYmUgbGVuZ3RoIDIsIGdvdCBsZW5ndGggXFxcIitNLmxlbmd0aCk7aWYoTyhNWzBdKSxlZShNWzFdKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocCxNWzBdKSl0aHJvdyBuZXcgRXJyb3IoXFxcImR1cGxpY2F0ZSBrZXkgaW4gYml0U2VxT2JqOiBcXFwiK01bMF0pO3JldHVybiBwW01bMF1dPSEwLEUrKyxNfXJldHVybiBlZShBKSxbbnVsbCxBXX0sYyk7aWYoRTwxKXRocm93IG5ldyBFcnJvcihcXFwiYml0U2VxT2JqIGV4cGVjdHMgYXQgbGVhc3Qgb25lIG5hbWVkIHBhaXIsIGdvdCBbXFxcIitjLmpvaW4oXFxcIiwgXFxcIikrXFxcIl1cXFwiKTt2YXIgTD1hKGZ1bmN0aW9uKEEpe3JldHVybiBBWzBdfSxrKTtyZXR1cm4gZChhKGZ1bmN0aW9uKEEpe3JldHVybiBBWzFdfSxrKSkubWFwKGZ1bmN0aW9uKEEpe3JldHVybiBvKGZ1bmN0aW9uKE0sVSl7cmV0dXJuIFVbMF0hPT1udWxsJiYoTVtVWzBdXT1VWzFdKSxNfSx7fSxhKGZ1bmN0aW9uKE0sVSl7cmV0dXJuW00sQVtVXV19LEwpKX0pfSxieXRlOmZ1bmN0aW9uKGMpe2lmKGYoKSxlZShjKSxjPjI1NSl0aHJvdyBuZXcgRXJyb3IoXFxcIlZhbHVlIHNwZWNpZmllZCB0byBieXRlIGNvbnN0cnVjdG9yIChcXFwiK2MrXFxcIj0weFxcXCIrYy50b1N0cmluZygxNikrXFxcIikgaXMgbGFyZ2VyIGluIHZhbHVlIHRoYW4gYSBzaW5nbGUgYnl0ZS5cXFwiKTt2YXIgcD0oYz4xNT9cXFwiMHhcXFwiOlxcXCIweDBcXFwiKStjLnRvU3RyaW5nKDE2KTtyZXR1cm4gcihmdW5jdGlvbihFLGspe3ZhciBMPVkoRSxrKTtyZXR1cm4gTD09PWM/dyhrKzEsTCk6dihrLHApfSl9LGJ1ZmZlcjpmdW5jdGlvbihjKXtyZXR1cm4gbShcXFwiYnVmZmVyXFxcIixjKS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIEJ1ZmZlci5mcm9tKHApfSl9LGVuY29kZWRTdHJpbmc6ZnVuY3Rpb24oYyxwKXtyZXR1cm4gbShcXFwic3RyaW5nXFxcIixwKS5tYXAoZnVuY3Rpb24oRSl7cmV0dXJuIEUudG9TdHJpbmcoYyl9KX0sdWludEJFOmIsdWludDhCRTpiKDEpLHVpbnQxNkJFOmIoMiksdWludDMyQkU6Yig0KSx1aW50TEU6Zyx1aW50OExFOmcoMSksdWludDE2TEU6ZygyKSx1aW50MzJMRTpnKDQpLGludEJFOkQsaW50OEJFOkQoMSksaW50MTZCRTpEKDIpLGludDMyQkU6RCg0KSxpbnRMRTpULGludDhMRTpUKDEpLGludDE2TEU6VCgyKSxpbnQzMkxFOlQoNCksZmxvYXRCRTptKFxcXCJmbG9hdEJFXFxcIiw0KS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVhZEZsb2F0QkUoMCl9KSxmbG9hdExFOm0oXFxcImZsb2F0TEVcXFwiLDQpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy5yZWFkRmxvYXRMRSgwKX0pLGRvdWJsZUJFOm0oXFxcImRvdWJsZUJFXFxcIiw4KS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMucmVhZERvdWJsZUJFKDApfSksZG91YmxlTEU6bShcXFwiZG91YmxlTEVcXFwiLDgpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy5yZWFkRG91YmxlTEUoMCl9KX0sbi5leHBvcnRzPXJ9XSl9KX0pO3ZhciBSdT1fbyhOZT0+e1xcXCJ1c2Ugc3RyaWN0XFxcIjt2YXIgU2Y9TmUmJk5lLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihyLHMpe3IuX19wcm90b19fPXN9fHxmdW5jdGlvbihyLHMpe2Zvcih2YXIgaSBpbiBzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGkpJiYocltpXT1zW2ldKX0sbihlLHQpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdCE9XFxcImZ1bmN0aW9uXFxcIiYmdCE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcXFwiK1N0cmluZyh0KStcXFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcXFwiKTtuKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOZSxcXFwiX19lc01vZHVsZVxcXCIse3ZhbHVlOiEwfSk7TmUuRW1wdHlCVHJlZT1OZS5hc1NldD1OZS5zaW1wbGVDb21wYXJhdG9yPU5lLmRlZmF1bHRDb21wYXJhdG9yPXZvaWQgMDtmdW5jdGlvbiBCdShuLGUpe2lmKE51bWJlci5pc0Zpbml0ZShuKSYmTnVtYmVyLmlzRmluaXRlKGUpKXJldHVybiBuLWU7dmFyIHQ9dHlwZW9mIG4scj10eXBlb2YgZTtpZih0IT09cilyZXR1cm4gdDxyPy0xOjE7aWYodD09PVxcXCJvYmplY3RcXFwiKXtpZihuPT09bnVsbClyZXR1cm4gZT09PW51bGw/MDotMTtpZihlPT09bnVsbClyZXR1cm4gMTtpZihuPW4udmFsdWVPZigpLGU9ZS52YWx1ZU9mKCksdD10eXBlb2YgbixyPXR5cGVvZiBlLHQhPT1yKXJldHVybiB0PHI/LTE6MX1yZXR1cm4gbjxlPy0xOm4+ZT8xOm49PT1lPzA6TnVtYmVyLmlzTmFOKG4pP051bWJlci5pc05hTihlKT8wOi0xOk51bWJlci5pc05hTihlKT8xOkFycmF5LmlzQXJyYXkobik/MDpOdW1iZXIuTmFOfU5lLmRlZmF1bHRDb21wYXJhdG9yPUJ1O2Z1bmN0aW9uIGtmKG4sZSl7cmV0dXJuIG4+ZT8xOm48ZT8tMTowfU5lLnNpbXBsZUNvbXBhcmF0b3I9a2Y7dmFyIGx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihlLHQscil7dGhpcy5fcm9vdD1mbyx0aGlzLl9zaXplPTAsdGhpcy5fbWF4Tm9kZVNpemU9cj49ND9NYXRoLm1pbihyLDI1Nik6MzIsdGhpcy5fY29tcGFyZT10fHxCdSxlJiZ0aGlzLnNldFBhaXJzKGUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcInNpemVcXFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcImxlbmd0aFxcXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcXFwiaXNFbXB0eVxcXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplPT09MH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX3Jvb3Q9Zm8sdGhpcy5fc2l6ZT0wfSxuLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztyZXR1cm4gdCE9PXZvaWQgMCYmKGU9ZS5iaW5kKHQpKSx0aGlzLmZvckVhY2hQYWlyKGZ1bmN0aW9uKHMsaSl7cmV0dXJuIGUoaSxzLHIpfSl9LG4ucHJvdG90eXBlLmZvckVhY2hQYWlyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5taW5LZXkoKSxzPXRoaXMubWF4S2V5KCk7cmV0dXJuIHRoaXMuZm9yUmFuZ2UocixzLCEwLGUsdCl9LG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9yb290LmdldChlLHQsdGhpcyl9LG4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQscil7dGhpcy5fcm9vdC5pc1NoYXJlZCYmKHRoaXMuX3Jvb3Q9dGhpcy5fcm9vdC5jbG9uZSgpKTt2YXIgcz10aGlzLl9yb290LnNldChlLHQscix0aGlzKTtyZXR1cm4gcz09PSEwfHxzPT09ITE/czoodGhpcy5fcm9vdD1uZXcgdmYoW3RoaXMuX3Jvb3Qsc10pLCEwKX0sbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZvclJhbmdlKGUsZSwhMCx2b2lkIDApIT09MH0sbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVkaXRSYW5nZShlLGUsITAsTXUpIT09MH0sbi5wcm90b3R5cGUud2l0aD1mdW5jdGlvbihlLHQscil7dmFyIHM9dGhpcy5jbG9uZSgpO3JldHVybiBzLnNldChlLHQscil8fHI/czp0aGlzfSxuLnByb3RvdHlwZS53aXRoUGFpcnM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNsb25lKCk7cmV0dXJuIHIuc2V0UGFpcnMoZSx0KSE9PTB8fHQ/cjp0aGlzfSxuLnByb3RvdHlwZS53aXRoS2V5cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLmNsb25lKCkscz0hMSxpPTA7aTxlLmxlbmd0aDtpKyspcz1yLnNldChlW2ldLHZvaWQgMCwhMSl8fHM7cmV0dXJuIHQmJiFzP3RoaXM6cn0sbi5wcm90b3R5cGUud2l0aG91dD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLndpdGhvdXRSYW5nZShlLGUsITAsdCl9LG4ucHJvdG90eXBlLndpdGhvdXRLZXlzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jbG9uZSgpO3JldHVybiByLmRlbGV0ZUtleXMoZSl8fCF0P3I6dGhpc30sbi5wcm90b3R5cGUud2l0aG91dFJhbmdlPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBpPXRoaXMuY2xvbmUoKTtyZXR1cm4gaS5kZWxldGVSYW5nZShlLHQscik9PT0wJiZzP3RoaXM6aX0sbi5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5ncmVlZHlDbG9uZSgpLHM7cmV0dXJuIHIuZWRpdEFsbChmdW5jdGlvbihpLG8sYSl7aWYoIWUoaSxvLGEpKXJldHVybiBzPSR1fSksIXMmJnQ/dGhpczpyfSxuLnByb3RvdHlwZS5tYXBWYWx1ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9e30scj10aGlzLmdyZWVkeUNsb25lKCk7cmV0dXJuIHIuZWRpdEFsbChmdW5jdGlvbihzLGksbyl7cmV0dXJuIHQudmFsdWU9ZShpLHMsbyksdH0pLHJ9LG4ucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLHM9dCxpPXRoaXMuZW50cmllcyh0aGlzLm1pbktleSgpLE1yKSxvOyEobz1pLm5leHQoKSkuZG9uZTspcz1lKHMsby52YWx1ZSxyKyssdGhpcyk7cmV0dXJuIHN9LG4ucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmZpbmRQYXRoKGUpO2lmKHI9PT12b2lkIDApcmV0dXJuIEFuKCk7dmFyIHM9ci5ub2RlcXVldWUsaT1yLm5vZGVpbmRleCxvPXIubGVhZixhPXQhPT12b2lkIDA/MTowLHU9ZT09PXZvaWQgMD8tMTpvLmluZGV4T2YoZSwwLHRoaXMuX2NvbXBhcmUpLTE7cmV0dXJuIEFuKGZ1bmN0aW9uKCl7ZTpmb3IoOzspc3dpdGNoKGEpe2Nhc2UgMDppZigrK3U8by5rZXlzLmxlbmd0aClyZXR1cm57ZG9uZTohMSx2YWx1ZTpbby5rZXlzW3VdLG8udmFsdWVzW3VdXX07YT0yO2NvbnRpbnVlO2Nhc2UgMTppZigrK3U8by5rZXlzLmxlbmd0aClyZXR1cm4gdFswXT1vLmtleXNbdV0sdFsxXT1vLnZhbHVlc1t1XSx7ZG9uZTohMSx2YWx1ZTp0fTthPTI7Y2FzZSAyOmZvcih2YXIgbD0tMTs7KXtpZigrK2w+PXMubGVuZ3RoKXthPTM7Y29udGludWUgZX1pZigrK2lbbF08c1tsXS5sZW5ndGgpYnJlYWt9Zm9yKDtsPjA7bC0tKXNbbC0xXT1zW2xdW2lbbF1dLmNoaWxkcmVuLGlbbC0xXT0wO289c1swXVtpWzBdXSx1PS0xLGE9dCE9PXZvaWQgMD8xOjA7Y29udGludWU7Y2FzZSAzOnJldHVybntkb25lOiEwLHZhbHVlOnZvaWQgMH19fSl9LG4ucHJvdG90eXBlLmVudHJpZXNSZXZlcnNlZD1mdW5jdGlvbihlLHQscil7aWYoZT09PXZvaWQgMCYmKGU9dGhpcy5tYXhLZXkoKSxyPXZvaWQgMCxlPT09dm9pZCAwKSlyZXR1cm4gQW4oKTt2YXIgcz10aGlzLmZpbmRQYXRoKGUpfHx0aGlzLmZpbmRQYXRoKHRoaXMubWF4S2V5KCkpLGk9cy5ub2RlcXVldWUsbz1zLm5vZGVpbmRleCxhPXMubGVhZjtMZSghaVswXXx8YT09PWlbMF1bb1swXV0sXFxcIndhdCFcXFwiKTt2YXIgdT1hLmluZGV4T2YoZSwwLHRoaXMuX2NvbXBhcmUpOyFyJiZ1PGEua2V5cy5sZW5ndGgmJnRoaXMuX2NvbXBhcmUoYS5rZXlzW3VdLGUpPD0wJiZ1Kys7dmFyIGw9dCE9PXZvaWQgMD8xOjA7cmV0dXJuIEFuKGZ1bmN0aW9uKCl7ZTpmb3IoOzspc3dpdGNoKGwpe2Nhc2UgMDppZigtLXU+PTApcmV0dXJue2RvbmU6ITEsdmFsdWU6W2Eua2V5c1t1XSxhLnZhbHVlc1t1XV19O2w9Mjtjb250aW51ZTtjYXNlIDE6aWYoLS11Pj0wKXJldHVybiB0WzBdPWEua2V5c1t1XSx0WzFdPWEudmFsdWVzW3VdLHtkb25lOiExLHZhbHVlOnR9O2w9MjtjYXNlIDI6Zm9yKHZhciBmPS0xOzspe2lmKCsrZj49aS5sZW5ndGgpe2w9Mztjb250aW51ZSBlfWlmKC0tb1tmXT49MClicmVha31mb3IoO2Y+MDtmLS0paVtmLTFdPWlbZl1bb1tmXV0uY2hpbGRyZW4sb1tmLTFdPWlbZi0xXS5sZW5ndGgtMTthPWlbMF1bb1swXV0sdT1hLmtleXMubGVuZ3RoLGw9dCE9PXZvaWQgMD8xOjA7Y29udGludWU7Y2FzZSAzOnJldHVybntkb25lOiEwLHZhbHVlOnZvaWQgMH19fSl9LG4ucHJvdG90eXBlLmZpbmRQYXRoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Jvb3QscixzO2lmKHQuaXNMZWFmKXI9X3Uscz1fdTtlbHNle3I9W10scz1bXTtmb3IodmFyIGk9MDshdC5pc0xlYWY7aSsrKXtpZihyW2ldPXQuY2hpbGRyZW4sc1tpXT1lPT09dm9pZCAwPzA6dC5pbmRleE9mKGUsMCx0aGlzLl9jb21wYXJlKSxzW2ldPj1yW2ldLmxlbmd0aClyZXR1cm47dD1yW2ldW3NbaV1dfXIucmV2ZXJzZSgpLHMucmV2ZXJzZSgpfXJldHVybntub2RlcXVldWU6cixub2RlaW5kZXg6cyxsZWFmOnR9fSxuLnByb3RvdHlwZS5kaWZmQWdhaW5zdD1mdW5jdGlvbihlLHQscixzKXtpZihlLl9jb21wYXJlIT09dGhpcy5fY29tcGFyZSl0aHJvdyBuZXcgRXJyb3IoXFxcIlRyZWUgY29tcGFyYXRvcnMgYXJlIG5vdCB0aGUgc2FtZS5cXFwiKTtpZih0aGlzLmlzRW1wdHl8fGUuaXNFbXB0eSlyZXR1cm4gdGhpcy5pc0VtcHR5JiZlLmlzRW1wdHk/dm9pZCAwOnRoaXMuaXNFbXB0eT9yPT09dm9pZCAwP3ZvaWQgMDpuLnN0ZXBUb0VuZChuLm1ha2VEaWZmQ3Vyc29yKGUpLHIpOnQ9PT12b2lkIDA/dm9pZCAwOm4uc3RlcFRvRW5kKG4ubWFrZURpZmZDdXJzb3IodGhpcyksdCk7Zm9yKHZhciBpPXRoaXMuX2NvbXBhcmUsbz1uLm1ha2VEaWZmQ3Vyc29yKHRoaXMpLGE9bi5tYWtlRGlmZkN1cnNvcihlKSx1PSEwLGw9ITAsZj1uLmNvbXBhcmUobyxhLGkpO3UmJmw7KXt2YXIgZD1uLmNvbXBhcmUobyxhLGkpLG09by5sZWFmLGg9by5pbnRlcm5hbFNwaW5lLGI9by5sZXZlbEluZGljZXMsZz1hLmxlYWYsRD1hLmludGVybmFsU3BpbmUsVD1hLmxldmVsSW5kaWNlcztpZihtfHxnKXtpZihmIT09MCl7aWYoZD09PTApe2lmKG0mJmcmJnMpe3ZhciBJPW0udmFsdWVzW2JbYi5sZW5ndGgtMV1dLE49Zy52YWx1ZXNbVFtULmxlbmd0aC0xXV07aWYoIU9iamVjdC5pcyhJLE4pKXt2YXIgeT1zKG8uY3VycmVudEtleSxJLE4pO2lmKHkmJnkuYnJlYWspcmV0dXJuIHkuYnJlYWt9fX1lbHNlIGlmKGQ+MCl7aWYoZyYmcil7dmFyIHc9Zy52YWx1ZXNbVFtULmxlbmd0aC0xXV0seT1yKGEuY3VycmVudEtleSx3KTtpZih5JiZ5LmJyZWFrKXJldHVybiB5LmJyZWFrfX1lbHNlIGlmKHQmJm0mJmYhPT0wKXt2YXIgST1tLnZhbHVlc1tiW2IubGVuZ3RoLTFdXSx5PXQoby5jdXJyZW50S2V5LEkpO2lmKHkmJnkuYnJlYWspcmV0dXJuIHkuYnJlYWt9fX1lbHNlIGlmKCFtJiYhZyYmZD09PTApe3ZhciB2PWgubGVuZ3RoLTEseD1ELmxlbmd0aC0xLEM9aFt2XVtiW3ZdXSxWPURbeF1bVFt4XV07aWYoVj09PUMpe2Y9MCx1PW4uc3RlcChvLCEwKSxsPW4uc3RlcChhLCEwKTtjb250aW51ZX19Zj1kLGQ8MD91PW4uc3RlcChvKTpsPW4uc3RlcChhKX1pZih1JiZ0KXJldHVybiBuLmZpbmlzaEN1cnNvcldhbGsobyxhLGksdCk7aWYobCYmcilyZXR1cm4gbi5maW5pc2hDdXJzb3JXYWxrKGEsbyxpLHIpfSxuLmZpbmlzaEN1cnNvcldhbGs9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGk9bi5jb21wYXJlKGUsdCxyKTtpZihpPT09MCl7aWYoIW4uc3RlcChlKSlyZXR1cm59ZWxzZSBpPDAmJkxlKCExLFxcXCJjdXJzb3Igd2FsayB0ZXJtaW5hdGVkIGVhcmx5XFxcIik7cmV0dXJuIG4uc3RlcFRvRW5kKGUscyl9LG4uc3RlcFRvRW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPSEwO3I7KXt2YXIgcz1lLmxlYWYsaT1lLmxldmVsSW5kaWNlcyxvPWUuY3VycmVudEtleTtpZihzKXt2YXIgYT1zLnZhbHVlc1tpW2kubGVuZ3RoLTFdXSx1PXQobyxhKTtpZih1JiZ1LmJyZWFrKXJldHVybiB1LmJyZWFrfXI9bi5zdGVwKGUpfX0sbi5tYWtlRGlmZkN1cnNvcj1mdW5jdGlvbihlKXt2YXIgdD1lLl9yb290LHI9ZS5oZWlnaHQ7cmV0dXJue2hlaWdodDpyLGludGVybmFsU3BpbmU6W1t0XV0sbGV2ZWxJbmRpY2VzOlswXSxsZWFmOnZvaWQgMCxjdXJyZW50S2V5OnQubWF4S2V5KCl9fSxuLnN0ZXA9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmludGVybmFsU3BpbmUscz1lLmxldmVsSW5kaWNlcyxpPWUubGVhZjtpZih0PT09ITB8fGkpe3ZhciBvPXMubGVuZ3RoO2lmKHQ9PT0hMHx8c1tvLTFdPT09MCl7dmFyIGE9ci5sZW5ndGg7aWYoYT09PTApcmV0dXJuITE7Zm9yKHZhciB1PWEtMSxsPXU7bD49MDspe2lmKHNbbF0+MClyZXR1cm4gbDxvLTEmJihlLmxlYWY9dm9pZCAwLHMucG9wKCkpLGw8dSYmKGUuaW50ZXJuYWxTcGluZT1yLnNsaWNlKDAsbCsxKSksZS5jdXJyZW50S2V5PXJbbF1bLS1zW2xdXS5tYXhLZXkoKSwhMDtsLS19cmV0dXJuITF9ZWxzZXt2YXIgZj0tLXNbby0xXTtyZXR1cm4gZS5jdXJyZW50S2V5PWkua2V5c1tmXSwhMH19ZWxzZXt2YXIgZD1yLmxlbmd0aCxtPWQtMSxoPXJbbV1bc1ttXV07aWYoaC5pc0xlYWYpe2UubGVhZj1oO3ZhciBmPXNbZF09aC52YWx1ZXMubGVuZ3RoLTE7ZS5jdXJyZW50S2V5PWgua2V5c1tmXX1lbHNle3ZhciBiPWguY2hpbGRyZW47cltkXT1iO3ZhciBnPWIubGVuZ3RoLTE7c1tkXT1nLGUuY3VycmVudEtleT1iW2ddLm1heEtleSgpfXJldHVybiEwfX0sbi5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lLmhlaWdodCxpPWUuY3VycmVudEtleSxvPWUubGV2ZWxJbmRpY2VzLGE9dC5oZWlnaHQsdT10LmN1cnJlbnRLZXksbD10LmxldmVsSW5kaWNlcyxmPXIodSxpKTtpZihmIT09MClyZXR1cm4gZjt2YXIgZD1zPGE/czphLG09by5sZW5ndGgtKHMtZCksaD1sLmxlbmd0aC0oYS1kKTtyZXR1cm4gbS1ofSxuLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW50cmllcyhlLE1yKTtyZXR1cm4gQW4oZnVuY3Rpb24oKXt2YXIgcj10Lm5leHQoKTtyZXR1cm4gci52YWx1ZSYmKHIudmFsdWU9ci52YWx1ZVswXSkscn0pfSxuLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lbnRyaWVzKGUsTXIpO3JldHVybiBBbihmdW5jdGlvbigpe3ZhciByPXQubmV4dCgpO3JldHVybiByLnZhbHVlJiYoci52YWx1ZT1yLnZhbHVlWzFdKSxyfSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcXFwibWF4Tm9kZVNpemVcXFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4Tm9kZVNpemV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksbi5wcm90b3R5cGUubWluS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3QubWluS2V5KCl9LG4ucHJvdG90eXBlLm1heEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290Lm1heEtleSgpfSxuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QuaXNTaGFyZWQ9ITA7dmFyIGU9bmV3IG4odm9pZCAwLHRoaXMuX2NvbXBhcmUsdGhpcy5fbWF4Tm9kZVNpemUpO3JldHVybiBlLl9yb290PXRoaXMuX3Jvb3QsZS5fc2l6ZT10aGlzLl9zaXplLGV9LG4ucHJvdG90eXBlLmdyZWVkeUNsb25lPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBuKHZvaWQgMCx0aGlzLl9jb21wYXJlLHRoaXMuX21heE5vZGVTaXplKTtyZXR1cm4gdC5fcm9vdD10aGlzLl9yb290LmdyZWVkeUNsb25lKGUpLHQuX3NpemU9dGhpcy5fc2l6ZSx0fSxuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGUpe2U9PT12b2lkIDAmJihlPTIxNDc0ODM2NDcpO3ZhciB0PXRoaXMubWluS2V5KCkscj10aGlzLm1heEtleSgpO3JldHVybiB0IT09dm9pZCAwP3RoaXMuZ2V0UmFuZ2UodCxyLCEwLGUpOltdfSxuLnByb3RvdHlwZS5rZXlzQXJyYXk9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5fcm9vdC5mb3JSYW5nZSh0aGlzLm1pbktleSgpLHRoaXMubWF4S2V5KCksITAsITEsdGhpcywwLGZ1bmN0aW9uKHQscil7ZS5wdXNoKHQpfSksZX0sbi5wcm90b3R5cGUudmFsdWVzQXJyYXk9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5fcm9vdC5mb3JSYW5nZSh0aGlzLm1pbktleSgpLHRoaXMubWF4S2V5KCksITAsITEsdGhpcywwLGZ1bmN0aW9uKHQscil7ZS5wdXNoKHIpfSksZX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0FycmF5KCkudG9TdHJpbmcoKX0sbi5wcm90b3R5cGUuc2V0SWZOb3RQcmVzZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2V0KGUsdCwhMSl9LG4ucHJvdG90eXBlLm5leHRIaWdoZXJQYWlyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8W10sZT09PXZvaWQgMD90aGlzLl9yb290Lm1pblBhaXIodCk6dGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0SGlnaGVyKGUsdGhpcy5fY29tcGFyZSwhMSx0KX0sbi5wcm90b3R5cGUubmV4dEhpZ2hlcktleT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm5leHRIaWdoZXJQYWlyKGUsTXIpO3JldHVybiB0JiZ0WzBdfSxuLnByb3RvdHlwZS5uZXh0TG93ZXJQYWlyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8W10sZT09PXZvaWQgMD90aGlzLl9yb290Lm1heFBhaXIodCk6dGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0TG93ZXIoZSx0aGlzLl9jb21wYXJlLCExLHQpfSxuLnByb3RvdHlwZS5uZXh0TG93ZXJLZXk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uZXh0TG93ZXJQYWlyKGUsTXIpO3JldHVybiB0JiZ0WzBdfSxuLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcm9vdC5nZXRQYWlyT3JOZXh0TG93ZXIoZSx0aGlzLl9jb21wYXJlLCEwLHR8fFtdKX0sbi5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dEhpZ2hlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9yb290LmdldFBhaXJPck5leHRIaWdoZXIoZSx0aGlzLl9jb21wYXJlLCEwLHR8fFtdKX0sbi5wcm90b3R5cGUuY2hhbmdlSWZQcmVzZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWRpdFJhbmdlKGUsZSwhMCxmdW5jdGlvbihyLHMpe3JldHVybnt2YWx1ZTp0fX0pIT09MH0sbi5wcm90b3R5cGUuZ2V0UmFuZ2U9ZnVuY3Rpb24oZSx0LHIscyl7cz09PXZvaWQgMCYmKHM9NjcxMDg4NjMpO3ZhciBpPVtdO3JldHVybiB0aGlzLl9yb290LmZvclJhbmdlKGUsdCxyLCExLHRoaXMsMCxmdW5jdGlvbihvLGEpe3JldHVybiBpLnB1c2goW28sYV0pLGkubGVuZ3RoPnM/eGY6dm9pZCAwfSksaX0sbi5wcm90b3R5cGUuc2V0UGFpcnM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MCxzPTA7czxlLmxlbmd0aDtzKyspdGhpcy5zZXQoZVtzXVswXSxlW3NdWzFdLHQpJiZyKys7cmV0dXJuIHJ9LG4ucHJvdG90eXBlLmZvclJhbmdlPWZ1bmN0aW9uKGUsdCxyLHMsaSl7dmFyIG89dGhpcy5fcm9vdC5mb3JSYW5nZShlLHQsciwhMSx0aGlzLGl8fDAscyk7cmV0dXJuIHR5cGVvZiBvPT1cXFwibnVtYmVyXFxcIj9vOm8uYnJlYWt9LG4ucHJvdG90eXBlLmVkaXRSYW5nZT1mdW5jdGlvbihlLHQscixzLGkpe3ZhciBvPXRoaXMuX3Jvb3Q7by5pc1NoYXJlZCYmKHRoaXMuX3Jvb3Q9bz1vLmNsb25lKCkpO3RyeXt2YXIgYT1vLmZvclJhbmdlKGUsdCxyLCEwLHRoaXMsaXx8MCxzKTtyZXR1cm4gdHlwZW9mIGE9PVxcXCJudW1iZXJcXFwiP2E6YS5icmVha31maW5hbGx5e2Zvcih2YXIgdT12b2lkIDA7by5rZXlzLmxlbmd0aDw9MSYmIW8uaXNMZWFmOyl1fHwodT1vLmlzU2hhcmVkKSx0aGlzLl9yb290PW89by5rZXlzLmxlbmd0aD09PTA/Zm86by5jaGlsZHJlblswXTt1JiYoby5pc1NoYXJlZD0hMCl9fSxuLnByb3RvdHlwZS5lZGl0QWxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWRpdFJhbmdlKHRoaXMubWluS2V5KCksdGhpcy5tYXhLZXkoKSwhMCxlLHQpfSxuLnByb3RvdHlwZS5kZWxldGVSYW5nZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZWRpdFJhbmdlKGUsdCxyLE11KX0sbi5wcm90b3R5cGUuZGVsZXRlS2V5cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPTA7dDxlLmxlbmd0aDt0KyspdGhpcy5kZWxldGUoZVt0XSkmJnIrKztyZXR1cm4gcn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFxcXCJoZWlnaHRcXFwiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5fcm9vdCx0PS0xO2U7KXQrKyxlPWUuaXNMZWFmP3ZvaWQgMDplLmNoaWxkcmVuWzBdO3JldHVybiB0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG4ucHJvdG90eXBlLmZyZWV6ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5jbGVhcj1lLnNldD1lLmVkaXRSYW5nZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcXFwiQXR0ZW1wdGVkIHRvIG1vZGlmeSBhIGZyb3plbiBCVHJlZVxcXCIpfX0sbi5wcm90b3R5cGUudW5mcmVlemU9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jbGVhcixkZWxldGUgdGhpcy5zZXQsZGVsZXRlIHRoaXMuZWRpdFJhbmdlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXFxcImlzRnJvemVuXFxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoXFxcImVkaXRSYW5nZVxcXCIpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG4ucHJvdG90eXBlLmNoZWNrVmFsaWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yb290LmNoZWNrVmFsaWQoMCx0aGlzLDApO0xlKGU9PT10aGlzLnNpemUsXFxcInNpemUgbWlzbWF0Y2g6IGNvdW50ZWQgXFxcIixlLFxcXCJidXQgc3RvcmVkXFxcIix0aGlzLnNpemUpfSxufSgpO05lLmRlZmF1bHQ9bHQ7ZnVuY3Rpb24gQ2Yobil7cmV0dXJuIG59TmUuYXNTZXQ9Q2Y7U3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJihsdC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1sdC5wcm90b3R5cGUuZW50cmllcyk7bHQucHJvdG90eXBlLndoZXJlPWx0LnByb3RvdHlwZS5maWx0ZXI7bHQucHJvdG90eXBlLnNldFJhbmdlPWx0LnByb3RvdHlwZS5zZXRQYWlycztsdC5wcm90b3R5cGUuYWRkPWx0LnByb3RvdHlwZS5zZXQ7ZnVuY3Rpb24gQW4obil7bj09PXZvaWQgMCYmKG49ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fSk7dmFyIGU9e25leHQ6bn07cmV0dXJuIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiYoZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlfXZhciBQdT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oZSx0KXtlPT09dm9pZCAwJiYoZT1bXSksdGhpcy5rZXlzPWUsdGhpcy52YWx1ZXM9dHx8cGUsdGhpcy5pc1NoYXJlZD12b2lkIDB9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcXFwiaXNMZWFmXFxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW49PT12b2lkIDB9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksbi5wcm90b3R5cGUubWF4S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c1t0aGlzLmtleXMubGVuZ3RoLTFdfSxuLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIHM9dGhpcy5rZXlzLGk9MCxvPXMubGVuZ3RoLGE9bz4+MTtpPG87KXt2YXIgdT1yKHNbYV0sZSk7aWYodTwwKWk9YSsxO2Vsc2UgaWYodT4wKW89YTtlbHNle2lmKHU9PT0wKXJldHVybiBhO2lmKGU9PT1lKXJldHVybiBzLmxlbmd0aDt0aHJvdyBuZXcgRXJyb3IoXFxcIkJUcmVlOiBOYU4gd2FzIHVzZWQgYXMgYSBrZXlcXFwiKX1hPWkrbz4+MX1yZXR1cm4gYV50fSxuLnByb3RvdHlwZS5taW5LZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzWzBdfSxuLnByb3RvdHlwZS5taW5QYWlyPWZ1bmN0aW9uKGUpe2lmKHRoaXMua2V5cy5sZW5ndGghPT0wKXJldHVybiBlWzBdPXRoaXMua2V5c1swXSxlWzFdPXRoaXMudmFsdWVzWzBdLGV9LG4ucHJvdG90eXBlLm1heFBhaXI9ZnVuY3Rpb24oZSl7aWYodGhpcy5rZXlzLmxlbmd0aCE9PTApe3ZhciB0PXRoaXMua2V5cy5sZW5ndGgtMTtyZXR1cm4gZVswXT10aGlzLmtleXNbdF0sZVsxXT10aGlzLnZhbHVlc1t0XSxlfX0sbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZhbHVlcztyZXR1cm4gbmV3IG4odGhpcy5rZXlzLnNsaWNlKDApLGU9PT1wZT9lOmUuc2xpY2UoMCkpfSxuLnByb3RvdHlwZS5ncmVlZHlDbG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc1NoYXJlZCYmIWU/dGhpczp0aGlzLmNsb25lKCl9LG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQscil7dmFyIHM9dGhpcy5pbmRleE9mKGUsLTEsci5fY29tcGFyZSk7cmV0dXJuIHM8MD90OnRoaXMudmFsdWVzW3NdfSxuLnByb3RvdHlwZS5nZXRQYWlyT3JOZXh0TG93ZXI9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGk9dGhpcy5pbmRleE9mKGUsLTEsdCksbz1pPDA/fmktMTpyP2k6aS0xO2lmKG8+PTApcmV0dXJuIHNbMF09dGhpcy5rZXlzW29dLHNbMV09dGhpcy52YWx1ZXNbb10sc30sbi5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dEhpZ2hlcj1mdW5jdGlvbihlLHQscixzKXt2YXIgaT10aGlzLmluZGV4T2YoZSwtMSx0KSxvPWk8MD9+aTpyP2k6aSsxLGE9dGhpcy5rZXlzO2lmKG88YS5sZW5ndGgpcmV0dXJuIHNbMF09YVtvXSxzWzFdPXRoaXMudmFsdWVzW29dLHN9LG4ucHJvdG90eXBlLmNoZWNrVmFsaWQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXRoaXMua2V5cy5sZW5ndGgsaT10aGlzLnZhbHVlcy5sZW5ndGg7cmV0dXJuIExlKHRoaXMudmFsdWVzPT09cGU/czw9aTpzPT09aSxcXFwia2V5cy92YWx1ZXMgbGVuZ3RoIG1pc21hdGNoOiBkZXB0aFxcXCIsZSxcXFwid2l0aCBsZW5ndGhzXFxcIixzLGksXFxcImFuZCBiYXNlSW5kZXhcXFwiLHIpLExlKGU9PTB8fHM+MCxcXFwiZW1wdHkgbGVhZiBhdCBkZXB0aFxcXCIsZSxcXFwiYW5kIGJhc2VJbmRleFxcXCIsciksc30sbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBpPXRoaXMuaW5kZXhPZihlLC0xLHMuX2NvbXBhcmUpO2lmKGk8MCl7aWYoaT1+aSxzLl9zaXplKyssdGhpcy5rZXlzLmxlbmd0aDxzLl9tYXhOb2RlU2l6ZSlyZXR1cm4gdGhpcy5pbnNlcnRJbkxlYWYoaSxlLHQscyk7dmFyIG89dGhpcy5zcGxpdE9mZlJpZ2h0U2lkZSgpLGE9dGhpcztyZXR1cm4gaT50aGlzLmtleXMubGVuZ3RoJiYoaS09dGhpcy5rZXlzLmxlbmd0aCxhPW8pLGEuaW5zZXJ0SW5MZWFmKGksZSx0LHMpLG99ZWxzZSByZXR1cm4gciE9PSExJiYodCE9PXZvaWQgMCYmdGhpcy5yZWlmeVZhbHVlcygpLHRoaXMua2V5c1tpXT1lLHRoaXMudmFsdWVzW2ldPXQpLCExfSxuLnByb3RvdHlwZS5yZWlmeVZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcz09PXBlP3RoaXMudmFsdWVzPXRoaXMudmFsdWVzLnNsaWNlKDAsdGhpcy5rZXlzLmxlbmd0aCk6dGhpcy52YWx1ZXN9LG4ucHJvdG90eXBlLmluc2VydEluTGVhZj1mdW5jdGlvbihlLHQscixzKXtpZih0aGlzLmtleXMuc3BsaWNlKGUsMCx0KSx0aGlzLnZhbHVlcz09PXBlKXtmb3IoO3BlLmxlbmd0aDxzLl9tYXhOb2RlU2l6ZTspcGUucHVzaCh2b2lkIDApO2lmKHI9PT12b2lkIDApcmV0dXJuITA7dGhpcy52YWx1ZXM9cGUuc2xpY2UoMCx0aGlzLmtleXMubGVuZ3RoLTEpfXJldHVybiB0aGlzLnZhbHVlcy5zcGxpY2UoZSwwLHIpLCEwfSxuLnByb3RvdHlwZS50YWtlRnJvbVJpZ2h0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudmFsdWVzO2UudmFsdWVzPT09cGU/dCE9PXBlJiZ0LnB1c2godm9pZCAwKToodD10aGlzLnJlaWZ5VmFsdWVzKCksdC5wdXNoKGUudmFsdWVzLnNoaWZ0KCkpKSx0aGlzLmtleXMucHVzaChlLmtleXMuc2hpZnQoKSl9LG4ucHJvdG90eXBlLnRha2VGcm9tTGVmdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnZhbHVlcztlLnZhbHVlcz09PXBlP3QhPT1wZSYmdC51bnNoaWZ0KHZvaWQgMCk6KHQ9dGhpcy5yZWlmeVZhbHVlcygpLHQudW5zaGlmdChlLnZhbHVlcy5wb3AoKSkpLHRoaXMua2V5cy51bnNoaWZ0KGUua2V5cy5wb3AoKSl9LG4ucHJvdG90eXBlLnNwbGl0T2ZmUmlnaHRTaWRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5rZXlzLmxlbmd0aD4+MSx0PXRoaXMua2V5cy5zcGxpY2UoZSkscj10aGlzLnZhbHVlcz09PXBlP3BlOnRoaXMudmFsdWVzLnNwbGljZShlKTtyZXR1cm4gbmV3IG4odCxyKX0sbi5wcm90b3R5cGUuZm9yUmFuZ2U9ZnVuY3Rpb24oZSx0LHIscyxpLG8sYSl7dmFyIHU9aS5fY29tcGFyZSxsLGY7aWYodD09PWUpe2lmKCFyfHwoZj0obD10aGlzLmluZGV4T2YoZSwtMSx1KSkrMSxsPDApKXJldHVybiBvfWVsc2UgbD10aGlzLmluZGV4T2YoZSwwLHUpLGY9dGhpcy5pbmRleE9mKHQsLTEsdSksZjwwP2Y9fmY6cj09PSEwJiZmKys7dmFyIGQ9dGhpcy5rZXlzLG09dGhpcy52YWx1ZXM7aWYoYSE9PXZvaWQgMClmb3IodmFyIGg9bDtoPGY7aCsrKXt2YXIgYj1kW2hdLGc9YShiLG1baF0sbysrKTtpZihnIT09dm9pZCAwKXtpZihzPT09ITApe2lmKGIhPT1kW2hdfHx0aGlzLmlzU2hhcmVkPT09ITApdGhyb3cgbmV3IEVycm9yKFxcXCJCVHJlZSBpbGxlZ2FsbHkgY2hhbmdlZCBvciBjbG9uZWQgaW4gZWRpdFJhbmdlXFxcIik7Zy5kZWxldGU/KHRoaXMua2V5cy5zcGxpY2UoaCwxKSx0aGlzLnZhbHVlcyE9PXBlJiZ0aGlzLnZhbHVlcy5zcGxpY2UoaCwxKSxpLl9zaXplLS0saC0tLGYtLSk6Zy5oYXNPd25Qcm9wZXJ0eShcXFwidmFsdWVcXFwiKSYmKG1baF09Zy52YWx1ZSl9aWYoZy5icmVhayE9PXZvaWQgMClyZXR1cm4gZ319ZWxzZSBvKz1mLWw7cmV0dXJuIG99LG4ucHJvdG90eXBlLm1lcmdlU2libGluZz1mdW5jdGlvbihlLHQpe2lmKHRoaXMua2V5cy5wdXNoLmFwcGx5KHRoaXMua2V5cyxlLmtleXMpLHRoaXMudmFsdWVzPT09cGUpe2lmKGUudmFsdWVzPT09cGUpcmV0dXJuO3RoaXMudmFsdWVzPXRoaXMudmFsdWVzLnNsaWNlKDAsdGhpcy5rZXlzLmxlbmd0aCl9dGhpcy52YWx1ZXMucHVzaC5hcHBseSh0aGlzLnZhbHVlcyxlLnJlaWZ5VmFsdWVzKCkpfSxufSgpLHZmPWZ1bmN0aW9uKG4pe1NmKGUsbik7ZnVuY3Rpb24gZSh0LHIpe3ZhciBzPXRoaXM7aWYoIXIpe3I9W107Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspcltpXT10W2ldLm1heEtleSgpfXJldHVybiBzPW4uY2FsbCh0aGlzLHIpfHx0aGlzLHMuY2hpbGRyZW49dCxzfXJldHVybiBlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmNoaWxkcmVuLnNsaWNlKDApLHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmlzU2hhcmVkPSEwO3JldHVybiBuZXcgZSh0LHRoaXMua2V5cy5zbGljZSgwKSl9LGUucHJvdG90eXBlLmdyZWVkeUNsb25lPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNTaGFyZWQmJiF0KXJldHVybiB0aGlzO2Zvcih2YXIgcj1uZXcgZSh0aGlzLmNoaWxkcmVuLnNsaWNlKDApLHRoaXMua2V5cy5zbGljZSgwKSkscz0wO3M8ci5jaGlsZHJlbi5sZW5ndGg7cysrKXIuY2hpbGRyZW5bc109ci5jaGlsZHJlbltzXS5ncmVlZHlDbG9uZSh0KTtyZXR1cm4gcn0sZS5wcm90b3R5cGUubWluS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ubWluS2V5KCl9LGUucHJvdG90eXBlLm1pblBhaXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ubWluUGFpcih0KX0sZS5wcm90b3R5cGUubWF4UGFpcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXS5tYXhQYWlyKHQpfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxyLHMpe3ZhciBpPXRoaXMuaW5kZXhPZih0LDAscy5fY29tcGFyZSksbz10aGlzLmNoaWxkcmVuO3JldHVybiBpPG8ubGVuZ3RoP29baV0uZ2V0KHQscixzKTp2b2lkIDB9LGUucHJvdG90eXBlLmdldFBhaXJPck5leHRMb3dlcj1mdW5jdGlvbih0LHIscyxpKXt2YXIgbz10aGlzLmluZGV4T2YodCwwLHIpLGE9dGhpcy5jaGlsZHJlbjtpZihvPj1hLmxlbmd0aClyZXR1cm4gdGhpcy5tYXhQYWlyKGkpO3ZhciB1PWFbb10uZ2V0UGFpck9yTmV4dExvd2VyKHQscixzLGkpO3JldHVybiB1PT09dm9pZCAwJiZvPjA/YVtvLTFdLm1heFBhaXIoaSk6dX0sZS5wcm90b3R5cGUuZ2V0UGFpck9yTmV4dEhpZ2hlcj1mdW5jdGlvbih0LHIscyxpKXt2YXIgbz10aGlzLmluZGV4T2YodCwwLHIpLGE9dGhpcy5jaGlsZHJlbix1PWEubGVuZ3RoO2lmKCEobz49dSkpe3ZhciBsPWFbb10uZ2V0UGFpck9yTmV4dEhpZ2hlcih0LHIscyxpKTtyZXR1cm4gbD09PXZvaWQgMCYmbzx1LTE/YVtvKzFdLm1pblBhaXIoaSk6bH19LGUucHJvdG90eXBlLmNoZWNrVmFsaWQ9ZnVuY3Rpb24odCxyLHMpe3ZhciBpPXRoaXMua2V5cy5sZW5ndGgsbz10aGlzLmNoaWxkcmVuLmxlbmd0aDtMZShpPT09byxcXFwia2V5cy9jaGlsZHJlbiBsZW5ndGggbWlzbWF0Y2g6IGRlcHRoXFxcIix0LFxcXCJsZW5ndGhzXFxcIixpLG8sXFxcImJhc2VJbmRleFxcXCIscyksTGUoaT4xfHx0PjAsXFxcImludGVybmFsIG5vZGUgaGFzIGxlbmd0aFxcXCIsaSxcXFwiYXQgZGVwdGhcXFwiLHQsXFxcImJhc2VJbmRleFxcXCIscyk7Zm9yKHZhciBhPTAsdT10aGlzLmNoaWxkcmVuLGw9dGhpcy5rZXlzLGY9MCxkPTA7ZDxvO2QrKylhKz11W2RdLmNoZWNrVmFsaWQodCsxLHIscythKSxmKz11W2RdLmtleXMubGVuZ3RoLExlKGE+PWYsXFxcInd0ZlxcXCIscyksTGUoZD09PTB8fHVbZC0xXS5jb25zdHJ1Y3Rvcj09PXVbZF0uY29uc3RydWN0b3IsXFxcInR5cGUgbWlzbWF0Y2gsIGJhc2VJbmRleDpcXFwiLHMpLHVbZF0ubWF4S2V5KCkhPWxbZF0mJkxlKCExLFxcXCJrZXlzW1xcXCIsZCxcXFwiXSA9XFxcIixsW2RdLFxcXCJpcyB3cm9uZywgc2hvdWxkIGJlIFxcXCIsdVtkXS5tYXhLZXkoKSxcXFwiYXQgZGVwdGhcXFwiLHQsXFxcImJhc2VJbmRleFxcXCIscyksZD09PTB8fHIuX2NvbXBhcmUobFtkLTFdLGxbZF0pPDB8fExlKCExLFxcXCJzb3J0IHZpb2xhdGlvbiBhdCBkZXB0aFxcXCIsdCxcXFwiaW5kZXhcXFwiLGQsXFxcImtleXNcXFwiLGxbZC0xXSxsW2RdKTt2YXIgbT1mPT09MDtyZXR1cm4obXx8Zj5yLm1heE5vZGVTaXplKm8pJiZMZSghMSxtP1xcXCJ0b28gZmV3XFxcIjpcXFwidG9vIG1hbnlcXFwiLFxcXCJjaGlsZHJlbiAoXFxcIixmLGEsXFxcIikgYXQgZGVwdGhcXFwiLHQsXFxcIm1heE5vZGVTaXplOlxcXCIsci5tYXhOb2RlU2l6ZSxcXFwiY2hpbGRyZW4ubGVuZ3RoOlxcXCIsbyxcXFwiYmFzZUluZGV4OlxcXCIscyksYX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQscixzLGkpe3ZhciBvPXRoaXMuY2hpbGRyZW4sYT1pLl9tYXhOb2RlU2l6ZSx1PWkuX2NvbXBhcmUsbD1NYXRoLm1pbih0aGlzLmluZGV4T2YodCwwLHUpLG8ubGVuZ3RoLTEpLGY9b1tsXTtpZihmLmlzU2hhcmVkJiYob1tsXT1mPWYuY2xvbmUoKSksZi5rZXlzLmxlbmd0aD49YSl7dmFyIGQ7bD4wJiYoZD1vW2wtMV0pLmtleXMubGVuZ3RoPGEmJnUoZi5rZXlzWzBdLHQpPDA/KGQuaXNTaGFyZWQmJihvW2wtMV09ZD1kLmNsb25lKCkpLGQudGFrZUZyb21SaWdodChmKSx0aGlzLmtleXNbbC0xXT1kLm1heEtleSgpKTooZD1vW2wrMV0pIT09dm9pZCAwJiZkLmtleXMubGVuZ3RoPGEmJnUoZi5tYXhLZXkoKSx0KTwwJiYoZC5pc1NoYXJlZCYmKG9bbCsxXT1kPWQuY2xvbmUoKSksZC50YWtlRnJvbUxlZnQoZiksdGhpcy5rZXlzW2xdPW9bbF0ubWF4S2V5KCkpfXZhciBtPWYuc2V0KHQscixzLGkpO2lmKG09PT0hMSlyZXR1cm4hMTtpZih0aGlzLmtleXNbbF09Zi5tYXhLZXkoKSxtPT09ITApcmV0dXJuITA7aWYodGhpcy5rZXlzLmxlbmd0aDxhKXJldHVybiB0aGlzLmluc2VydChsKzEsbSksITA7dmFyIGg9dGhpcy5zcGxpdE9mZlJpZ2h0U2lkZSgpLGI9dGhpcztyZXR1cm4gdShtLm1heEtleSgpLHRoaXMubWF4S2V5KCkpPjAmJihiPWgsbC09dGhpcy5rZXlzLmxlbmd0aCksYi5pbnNlcnQobCsxLG0pLGh9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe3RoaXMuY2hpbGRyZW4uc3BsaWNlKHQsMCxyKSx0aGlzLmtleXMuc3BsaWNlKHQsMCxyLm1heEtleSgpKX0sZS5wcm90b3R5cGUuc3BsaXRPZmZSaWdodFNpZGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNoaWxkcmVuLmxlbmd0aD4+MTtyZXR1cm4gbmV3IGUodGhpcy5jaGlsZHJlbi5zcGxpY2UodCksdGhpcy5rZXlzLnNwbGljZSh0KSl9LGUucHJvdG90eXBlLnRha2VGcm9tUmlnaHQ9ZnVuY3Rpb24odCl7dGhpcy5rZXlzLnB1c2godC5rZXlzLnNoaWZ0KCkpLHRoaXMuY2hpbGRyZW4ucHVzaCh0LmNoaWxkcmVuLnNoaWZ0KCkpfSxlLnByb3RvdHlwZS50YWtlRnJvbUxlZnQ9ZnVuY3Rpb24odCl7dGhpcy5rZXlzLnVuc2hpZnQodC5rZXlzLnBvcCgpKSx0aGlzLmNoaWxkcmVuLnVuc2hpZnQodC5jaGlsZHJlbi5wb3AoKSl9LGUucHJvdG90eXBlLmZvclJhbmdlPWZ1bmN0aW9uKHQscixzLGksbyxhLHUpe3ZhciBsPW8uX2NvbXBhcmUsZj10aGlzLmtleXMsZD10aGlzLmNoaWxkcmVuLG09dGhpcy5pbmRleE9mKHQsMCxsKSxoPW0sYj1NYXRoLm1pbihyPT09dD9tOnRoaXMuaW5kZXhPZihyLDAsbCksZi5sZW5ndGgtMSk7aWYoaSl7aWYoaDw9Yil0cnl7Zm9yKDtoPD1iO2grKyl7ZFtoXS5pc1NoYXJlZCYmKGRbaF09ZFtoXS5jbG9uZSgpKTt2YXIgZz1kW2hdLmZvclJhbmdlKHQscixzLGksbyxhLHUpO2lmKGZbaF09ZFtoXS5tYXhLZXkoKSx0eXBlb2YgZyE9XFxcIm51bWJlclxcXCIpcmV0dXJuIGc7YT1nfX1maW5hbGx5e3ZhciBEPW8uX21heE5vZGVTaXplPj4xO2ZvcihtPjAmJm0tLSxoPWI7aD49bTtoLS0pZFtoXS5rZXlzLmxlbmd0aDw9RCYmKGRbaF0ua2V5cy5sZW5ndGghPT0wP3RoaXMudHJ5TWVyZ2UoaCxvLl9tYXhOb2RlU2l6ZSk6KGYuc3BsaWNlKGgsMSksZC5zcGxpY2UoaCwxKSkpO2QubGVuZ3RoIT09MCYmZFswXS5rZXlzLmxlbmd0aD09PTAmJkxlKCExLFxcXCJlbXB0aW5lc3MgYnVnXFxcIil9fWVsc2UgZm9yKDtoPD1iO2grKyl7dmFyIGc9ZFtoXS5mb3JSYW5nZSh0LHIscyxpLG8sYSx1KTtpZih0eXBlb2YgZyE9XFxcIm51bWJlclxcXCIpcmV0dXJuIGc7YT1nfXJldHVybiBhfSxlLnByb3RvdHlwZS50cnlNZXJnZT1mdW5jdGlvbih0LHIpe3ZhciBzPXRoaXMuY2hpbGRyZW47cmV0dXJuIHQ+PTAmJnQrMTxzLmxlbmd0aCYmc1t0XS5rZXlzLmxlbmd0aCtzW3QrMV0ua2V5cy5sZW5ndGg8PXI/KHNbdF0uaXNTaGFyZWQmJihzW3RdPXNbdF0uY2xvbmUoKSksc1t0XS5tZXJnZVNpYmxpbmcoc1t0KzFdLHIpLHMuc3BsaWNlKHQrMSwxKSx0aGlzLmtleXMuc3BsaWNlKHQrMSwxKSx0aGlzLmtleXNbdF09c1t0XS5tYXhLZXkoKSwhMCk6ITF9LGUucHJvdG90eXBlLm1lcmdlU2libGluZz1mdW5jdGlvbih0LHIpe3ZhciBzPXRoaXMua2V5cy5sZW5ndGg7dGhpcy5rZXlzLnB1c2guYXBwbHkodGhpcy5rZXlzLHQua2V5cyk7dmFyIGk9dC5jaGlsZHJlbjtpZih0aGlzLmNoaWxkcmVuLnB1c2guYXBwbHkodGhpcy5jaGlsZHJlbixpKSx0LmlzU2hhcmVkJiYhdGhpcy5pc1NoYXJlZClmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylpW29dLmlzU2hhcmVkPSEwO3RoaXMudHJ5TWVyZ2Uocy0xLHIpfSxlfShQdSkscGU9W10sJHU9e2RlbGV0ZTohMH0sTXU9ZnVuY3Rpb24oKXtyZXR1cm4gJHV9LHhmPXticmVhazohMH0sZm89ZnVuY3Rpb24oKXt2YXIgbj1uZXcgUHU7cmV0dXJuIG4uaXNTaGFyZWQ9ITAsbn0oKSxfdT1bXSxNcj1bXTtmdW5jdGlvbiBMZShuKXtmb3IodmFyIGU9W10sdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0LTFdPWFyZ3VtZW50c1t0XTtpZighbil0aHJvdyBlLnVuc2hpZnQoXFxcIkIrIHRyZWVcXFwiKSxuZXcgRXJyb3IoZS5qb2luKFxcXCIgXFxcIikpfU5lLkVtcHR5QlRyZWU9ZnVuY3Rpb24oKXt2YXIgbj1uZXcgbHQ7cmV0dXJuIG4uZnJlZXplKCksbn0oKX0pO3ZhciBtdD1jbGFzcyBleHRlbmRzIEVycm9ye30sVXI9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihgSW52YWxpZCBEYXRlVGltZTogJHtlLnRvTWVzc2FnZSgpfWApfX0sS3I9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihgSW52YWxpZCBJbnRlcnZhbDogJHtlLnRvTWVzc2FnZSgpfWApfX0sV3I9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihgSW52YWxpZCBEdXJhdGlvbjogJHtlLnRvTWVzc2FnZSgpfWApfX0scHQ9Y2xhc3MgZXh0ZW5kcyBtdHt9LHNuPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEludmFsaWQgdW5pdCAke2V9YCl9fSxmZT1jbGFzcyBleHRlbmRzIG10e30samU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKFxcXCJab25lIGlzIGFuIGFic3RyYWN0IGNsYXNzXFxcIil9fTt2YXIgXz1cXFwibnVtZXJpY1xcXCIscWU9XFxcInNob3J0XFxcIix4ZT1cXFwibG9uZ1xcXCIsb249e3llYXI6Xyxtb250aDpfLGRheTpffSwkbj17eWVhcjpfLG1vbnRoOnFlLGRheTpffSxHcz17eWVhcjpfLG1vbnRoOnFlLGRheTpfLHdlZWtkYXk6cWV9LFJuPXt5ZWFyOl8sbW9udGg6eGUsZGF5Ol99LGpuPXt5ZWFyOl8sbW9udGg6eGUsZGF5Ol8sd2Vla2RheTp4ZX0scW49e2hvdXI6XyxtaW51dGU6X30sVm49e2hvdXI6XyxtaW51dGU6XyxzZWNvbmQ6X30sVW49e2hvdXI6XyxtaW51dGU6XyxzZWNvbmQ6Xyx0aW1lWm9uZU5hbWU6cWV9LEtuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl8sdGltZVpvbmVOYW1lOnhlfSxXbj17aG91cjpfLG1pbnV0ZTpfLGhvdXJDeWNsZTpcXFwiaDIzXFxcIn0sSG49e2hvdXI6XyxtaW51dGU6XyxzZWNvbmQ6Xyxob3VyQ3ljbGU6XFxcImgyM1xcXCJ9LEpuPXtob3VyOl8sbWludXRlOl8sc2Vjb25kOl8saG91ckN5Y2xlOlxcXCJoMjNcXFwiLHRpbWVab25lTmFtZTpxZX0sem49e2hvdXI6XyxtaW51dGU6XyxzZWNvbmQ6Xyxob3VyQ3ljbGU6XFxcImgyM1xcXCIsdGltZVpvbmVOYW1lOnhlfSxZbj17eWVhcjpfLG1vbnRoOl8sZGF5Ol8saG91cjpfLG1pbnV0ZTpffSxHbj17eWVhcjpfLG1vbnRoOl8sZGF5Ol8saG91cjpfLG1pbnV0ZTpfLHNlY29uZDpffSxabj17eWVhcjpfLG1vbnRoOnFlLGRheTpfLGhvdXI6XyxtaW51dGU6X30sUW49e3llYXI6Xyxtb250aDpxZSxkYXk6Xyxob3VyOl8sbWludXRlOl8sc2Vjb25kOl99LFpzPXt5ZWFyOl8sbW9udGg6cWUsZGF5Ol8sd2Vla2RheTpxZSxob3VyOl8sbWludXRlOl99LFhuPXt5ZWFyOl8sbW9udGg6eGUsZGF5Ol8saG91cjpfLG1pbnV0ZTpfLHRpbWVab25lTmFtZTpxZX0sZXI9e3llYXI6Xyxtb250aDp4ZSxkYXk6Xyxob3VyOl8sbWludXRlOl8sc2Vjb25kOl8sdGltZVpvbmVOYW1lOnFlfSx0cj17eWVhcjpfLG1vbnRoOnhlLGRheTpfLHdlZWtkYXk6eGUsaG91cjpfLG1pbnV0ZTpfLHRpbWVab25lTmFtZTp4ZX0sbnI9e3llYXI6Xyxtb250aDp4ZSxkYXk6Xyx3ZWVrZGF5OnhlLGhvdXI6XyxtaW51dGU6XyxzZWNvbmQ6Xyx0aW1lWm9uZU5hbWU6eGV9O2Z1bmN0aW9uIFcobil7cmV0dXJuIHR5cGVvZiBuPT1cXFwidW5kZWZpbmVkXFxcIn1mdW5jdGlvbiB0dChuKXtyZXR1cm4gdHlwZW9mIG49PVxcXCJudW1iZXJcXFwifWZ1bmN0aW9uIHJyKG4pe3JldHVybiB0eXBlb2Ygbj09XFxcIm51bWJlclxcXCImJm4lMT09PTB9ZnVuY3Rpb24gQm8obil7cmV0dXJuIHR5cGVvZiBuPT1cXFwic3RyaW5nXFxcIn1mdW5jdGlvbiBQbyhuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pPT09XFxcIltvYmplY3QgRGF0ZV1cXFwifWZ1bmN0aW9uIEhyKCl7dHJ5e3JldHVybiB0eXBlb2YgSW50bCE9XFxcInVuZGVmaW5lZFxcXCImJiEhSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXR9Y2F0Y2gobil7cmV0dXJuITF9fWZ1bmN0aW9uICRvKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP246W25dfWZ1bmN0aW9uIFhzKG4sZSx0KXtpZihuLmxlbmd0aCE9PTApcmV0dXJuIG4ucmVkdWNlKChyLHMpPT57bGV0IGk9W2Uocyksc107cmV0dXJuIHImJnQoclswXSxpWzBdKT09PXJbMF0/cjppfSxudWxsKVsxXX1mdW5jdGlvbiBSbyhuLGUpe3JldHVybiBlLnJlZHVjZSgodCxyKT0+KHRbcl09bltyXSx0KSx7fSl9ZnVuY3Rpb24ga3QobixlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSl9ZnVuY3Rpb24gbnQobixlLHQpe3JldHVybiBycihuKSYmbj49ZSYmbjw9dH1mdW5jdGlvbiBibChuLGUpe3JldHVybiBuLWUqTWF0aC5mbG9vcihuL2UpfWZ1bmN0aW9uIHJlKG4sZT0yKXtsZXQgdD1uPDAscjtyZXR1cm4gdD9yPVxcXCItXFxcIisoXFxcIlxcXCIrLW4pLnBhZFN0YXJ0KGUsXFxcIjBcXFwiKTpyPShcXFwiXFxcIituKS5wYWRTdGFydChlLFxcXCIwXFxcIikscn1mdW5jdGlvbiBEdChuKXtpZighKFcobil8fG49PT1udWxsfHxuPT09XFxcIlxcXCIpKXJldHVybiBwYXJzZUludChuLDEwKX1mdW5jdGlvbiBDdChuKXtpZighKFcobil8fG49PT1udWxsfHxuPT09XFxcIlxcXCIpKXJldHVybiBwYXJzZUZsb2F0KG4pfWZ1bmN0aW9uIHNyKG4pe2lmKCEoVyhuKXx8bj09PW51bGx8fG49PT1cXFwiXFxcIikpe2xldCBlPXBhcnNlRmxvYXQoXFxcIjAuXFxcIituKSoxZTM7cmV0dXJuIE1hdGguZmxvb3IoZSl9fWZ1bmN0aW9uIGFuKG4sZSx0PSExKXtsZXQgcj0xMCoqZTtyZXR1cm4odD9NYXRoLnRydW5jOk1hdGgucm91bmQpKG4qcikvcn1mdW5jdGlvbiBqdChuKXtyZXR1cm4gbiU0PT09MCYmKG4lMTAwIT09MHx8biU0MDA9PT0wKX1mdW5jdGlvbiBxdChuKXtyZXR1cm4ganQobik/MzY2OjM2NX1mdW5jdGlvbiB1bihuLGUpe2xldCB0PWJsKGUtMSwxMikrMSxyPW4rKGUtdCkvMTI7cmV0dXJuIHQ9PT0yP2p0KHIpPzI5OjI4OlszMSxudWxsLDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVt0LTFdfWZ1bmN0aW9uIGlyKG4pe2xldCBlPURhdGUuVVRDKG4ueWVhcixuLm1vbnRoLTEsbi5kYXksbi5ob3VyLG4ubWludXRlLG4uc2Vjb25kLG4ubWlsbGlzZWNvbmQpO3JldHVybiBuLnllYXI8MTAwJiZuLnllYXI+PTAmJihlPW5ldyBEYXRlKGUpLGUuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpLTE5MDApKSwrZX1mdW5jdGlvbiBsbihuKXtsZXQgZT0obitNYXRoLmZsb29yKG4vNCktTWF0aC5mbG9vcihuLzEwMCkrTWF0aC5mbG9vcihuLzQwMCkpJTcsdD1uLTEscj0odCtNYXRoLmZsb29yKHQvNCktTWF0aC5mbG9vcih0LzEwMCkrTWF0aC5mbG9vcih0LzQwMCkpJTc7cmV0dXJuIGU9PT00fHxyPT09Mz81Mzo1Mn1mdW5jdGlvbiBvcihuKXtyZXR1cm4gbj45OT9uOm4+NjA/MTkwMCtuOjJlMytufWZ1bmN0aW9uIEpyKG4sZSx0LHI9bnVsbCl7bGV0IHM9bmV3IERhdGUobiksaT17aG91ckN5Y2xlOlxcXCJoMjNcXFwiLHllYXI6XFxcIm51bWVyaWNcXFwiLG1vbnRoOlxcXCIyLWRpZ2l0XFxcIixkYXk6XFxcIjItZGlnaXRcXFwiLGhvdXI6XFxcIjItZGlnaXRcXFwiLG1pbnV0ZTpcXFwiMi1kaWdpdFxcXCJ9O3ImJihpLnRpbWVab25lPXIpO2xldCBvPVIoe3RpbWVab25lTmFtZTplfSxpKSxhPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHQsbykuZm9ybWF0VG9QYXJ0cyhzKS5maW5kKHU9PnUudHlwZS50b0xvd2VyQ2FzZSgpPT09XFxcInRpbWV6b25lbmFtZVxcXCIpO3JldHVybiBhP2EudmFsdWU6bnVsbH1mdW5jdGlvbiBWdChuLGUpe2xldCB0PXBhcnNlSW50KG4sMTApO051bWJlci5pc05hTih0KSYmKHQ9MCk7bGV0IHI9cGFyc2VJbnQoZSwxMCl8fDAscz10PDB8fE9iamVjdC5pcyh0LC0wKT8tcjpyO3JldHVybiB0KjYwK3N9ZnVuY3Rpb24gZWkobil7bGV0IGU9TnVtYmVyKG4pO2lmKHR5cGVvZiBuPT1cXFwiYm9vbGVhblxcXCJ8fG49PT1cXFwiXFxcInx8TnVtYmVyLmlzTmFOKGUpKXRocm93IG5ldyBmZShgSW52YWxpZCB1bml0IHZhbHVlICR7bn1gKTtyZXR1cm4gZX1mdW5jdGlvbiBjbihuLGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBuKWlmKGt0KG4scikpe2xldCBzPW5bcl07aWYocz09bnVsbCljb250aW51ZTt0W2UocildPWVpKHMpfXJldHVybiB0fWZ1bmN0aW9uIHZ0KG4sZSl7bGV0IHQ9TWF0aC50cnVuYyhNYXRoLmFicyhuLzYwKSkscj1NYXRoLnRydW5jKE1hdGguYWJzKG4lNjApKSxzPW4+PTA/XFxcIitcXFwiOlxcXCItXFxcIjtzd2l0Y2goZSl7Y2FzZVxcXCJzaG9ydFxcXCI6cmV0dXJuYCR7c30ke3JlKHQsMil9OiR7cmUociwyKX1gO2Nhc2VcXFwibmFycm93XFxcIjpyZXR1cm5gJHtzfSR7dH0ke3I+MD9gOiR7cn1gOlxcXCJcXFwifWA7Y2FzZVxcXCJ0ZWNoaWVcXFwiOnJldHVybmAke3N9JHtyZSh0LDIpfSR7cmUociwyKX1gO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFZhbHVlIGZvcm1hdCAke2V9IGlzIG91dCBvZiByYW5nZSBmb3IgcHJvcGVydHkgZm9ybWF0YCl9fWZ1bmN0aW9uIGFyKG4pe3JldHVybiBSbyhuLFtcXFwiaG91clxcXCIsXFxcIm1pbnV0ZVxcXCIsXFxcInNlY29uZFxcXCIsXFxcIm1pbGxpc2Vjb25kXFxcIl0pfXZhciB0aT0vW0EtWmEtel8rLV17MSwyNTZ9KD86Oj9cXFxcL1tBLVphLXowLTlfKy1dezEsMjU2fSg/OlxcXFwvW0EtWmEtejAtOV8rLV17MSwyNTZ9KT8pPy87dmFyIEZsPVtcXFwiSmFudWFyeVxcXCIsXFxcIkZlYnJ1YXJ5XFxcIixcXFwiTWFyY2hcXFwiLFxcXCJBcHJpbFxcXCIsXFxcIk1heVxcXCIsXFxcIkp1bmVcXFwiLFxcXCJKdWx5XFxcIixcXFwiQXVndXN0XFxcIixcXFwiU2VwdGVtYmVyXFxcIixcXFwiT2N0b2JlclxcXCIsXFxcIk5vdmVtYmVyXFxcIixcXFwiRGVjZW1iZXJcXFwiXSxuaT1bXFxcIkphblxcXCIsXFxcIkZlYlxcXCIsXFxcIk1hclxcXCIsXFxcIkFwclxcXCIsXFxcIk1heVxcXCIsXFxcIkp1blxcXCIsXFxcIkp1bFxcXCIsXFxcIkF1Z1xcXCIsXFxcIlNlcFxcXCIsXFxcIk9jdFxcXCIsXFxcIk5vdlxcXCIsXFxcIkRlY1xcXCJdLEVsPVtcXFwiSlxcXCIsXFxcIkZcXFwiLFxcXCJNXFxcIixcXFwiQVxcXCIsXFxcIk1cXFwiLFxcXCJKXFxcIixcXFwiSlxcXCIsXFxcIkFcXFwiLFxcXCJTXFxcIixcXFwiT1xcXCIsXFxcIk5cXFwiLFxcXCJEXFxcIl07ZnVuY3Rpb24gcmkobil7c3dpdGNoKG4pe2Nhc2VcXFwibmFycm93XFxcIjpyZXR1cm5bLi4uRWxdO2Nhc2VcXFwic2hvcnRcXFwiOnJldHVyblsuLi5uaV07Y2FzZVxcXCJsb25nXFxcIjpyZXR1cm5bLi4uRmxdO2Nhc2VcXFwibnVtZXJpY1xcXCI6cmV0dXJuW1xcXCIxXFxcIixcXFwiMlxcXCIsXFxcIjNcXFwiLFxcXCI0XFxcIixcXFwiNVxcXCIsXFxcIjZcXFwiLFxcXCI3XFxcIixcXFwiOFxcXCIsXFxcIjlcXFwiLFxcXCIxMFxcXCIsXFxcIjExXFxcIixcXFwiMTJcXFwiXTtjYXNlXFxcIjItZGlnaXRcXFwiOnJldHVybltcXFwiMDFcXFwiLFxcXCIwMlxcXCIsXFxcIjAzXFxcIixcXFwiMDRcXFwiLFxcXCIwNVxcXCIsXFxcIjA2XFxcIixcXFwiMDdcXFwiLFxcXCIwOFxcXCIsXFxcIjA5XFxcIixcXFwiMTBcXFwiLFxcXCIxMVxcXCIsXFxcIjEyXFxcIl07ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIHNpPVtcXFwiTW9uZGF5XFxcIixcXFwiVHVlc2RheVxcXCIsXFxcIldlZG5lc2RheVxcXCIsXFxcIlRodXJzZGF5XFxcIixcXFwiRnJpZGF5XFxcIixcXFwiU2F0dXJkYXlcXFwiLFxcXCJTdW5kYXlcXFwiXSxpaT1bXFxcIk1vblxcXCIsXFxcIlR1ZVxcXCIsXFxcIldlZFxcXCIsXFxcIlRodVxcXCIsXFxcIkZyaVxcXCIsXFxcIlNhdFxcXCIsXFxcIlN1blxcXCJdLHdsPVtcXFwiTVxcXCIsXFxcIlRcXFwiLFxcXCJXXFxcIixcXFwiVFxcXCIsXFxcIkZcXFwiLFxcXCJTXFxcIixcXFwiU1xcXCJdO2Z1bmN0aW9uIG9pKG4pe3N3aXRjaChuKXtjYXNlXFxcIm5hcnJvd1xcXCI6cmV0dXJuWy4uLndsXTtjYXNlXFxcInNob3J0XFxcIjpyZXR1cm5bLi4uaWldO2Nhc2VcXFwibG9uZ1xcXCI6cmV0dXJuWy4uLnNpXTtjYXNlXFxcIm51bWVyaWNcXFwiOnJldHVybltcXFwiMVxcXCIsXFxcIjJcXFwiLFxcXCIzXFxcIixcXFwiNFxcXCIsXFxcIjVcXFwiLFxcXCI2XFxcIixcXFwiN1xcXCJdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBhaT1bXFxcIkFNXFxcIixcXFwiUE1cXFwiXSxUbD1bXFxcIkJlZm9yZSBDaHJpc3RcXFwiLFxcXCJBbm5vIERvbWluaVxcXCJdLFNsPVtcXFwiQkNcXFwiLFxcXCJBRFxcXCJdLGtsPVtcXFwiQlxcXCIsXFxcIkFcXFwiXTtmdW5jdGlvbiB1aShuKXtzd2l0Y2gobil7Y2FzZVxcXCJuYXJyb3dcXFwiOnJldHVyblsuLi5rbF07Y2FzZVxcXCJzaG9ydFxcXCI6cmV0dXJuWy4uLlNsXTtjYXNlXFxcImxvbmdcXFwiOnJldHVyblsuLi5UbF07ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gam8obil7cmV0dXJuIGFpW24uaG91cjwxMj8wOjFdfWZ1bmN0aW9uIHFvKG4sZSl7cmV0dXJuIG9pKGUpW24ud2Vla2RheS0xXX1mdW5jdGlvbiBWbyhuLGUpe3JldHVybiByaShlKVtuLm1vbnRoLTFdfWZ1bmN0aW9uIFVvKG4sZSl7cmV0dXJuIHVpKGUpW24ueWVhcjwwPzA6MV19ZnVuY3Rpb24gS28obixlLHQ9XFxcImFsd2F5c1xcXCIscj0hMSl7bGV0IHM9e3llYXJzOltcXFwieWVhclxcXCIsXFxcInlyLlxcXCJdLHF1YXJ0ZXJzOltcXFwicXVhcnRlclxcXCIsXFxcInF0ci5cXFwiXSxtb250aHM6W1xcXCJtb250aFxcXCIsXFxcIm1vLlxcXCJdLHdlZWtzOltcXFwid2Vla1xcXCIsXFxcIndrLlxcXCJdLGRheXM6W1xcXCJkYXlcXFwiLFxcXCJkYXlcXFwiLFxcXCJkYXlzXFxcIl0saG91cnM6W1xcXCJob3VyXFxcIixcXFwiaHIuXFxcIl0sbWludXRlczpbXFxcIm1pbnV0ZVxcXCIsXFxcIm1pbi5cXFwiXSxzZWNvbmRzOltcXFwic2Vjb25kXFxcIixcXFwic2VjLlxcXCJdfSxpPVtcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCJdLmluZGV4T2Yobik9PT0tMTtpZih0PT09XFxcImF1dG9cXFwiJiZpKXtsZXQgZD1uPT09XFxcImRheXNcXFwiO3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGQ/XFxcInRvbW9ycm93XFxcIjpgbmV4dCAke3Nbbl1bMF19YDtjYXNlLTE6cmV0dXJuIGQ/XFxcInllc3RlcmRheVxcXCI6YGxhc3QgJHtzW25dWzBdfWA7Y2FzZSAwOnJldHVybiBkP1xcXCJ0b2RheVxcXCI6YHRoaXMgJHtzW25dWzBdfWA7ZGVmYXVsdDp9fWxldCBvPU9iamVjdC5pcyhlLC0wKXx8ZTwwLGE9TWF0aC5hYnMoZSksdT1hPT09MSxsPXNbbl0sZj1yP3U/bFsxXTpsWzJdfHxsWzFdOnU/c1tuXVswXTpuO3JldHVybiBvP2Ake2F9ICR7Zn0gYWdvYDpgaW4gJHthfSAke2Z9YH1mdW5jdGlvbiBXbyhuLGUpe2xldCB0PVxcXCJcXFwiO2ZvcihsZXQgciBvZiBuKXIubGl0ZXJhbD90Kz1yLnZhbDp0Kz1lKHIudmFsKTtyZXR1cm4gdH12YXIgQ2w9e0Q6b24sREQ6JG4sREREOlJuLEREREQ6am4sdDpxbix0dDpWbix0dHQ6VW4sdHR0dDpLbixUOlduLFRUOkhuLFRUVDpKbixUVFRUOnpuLGY6WW4sZmY6Wm4sZmZmOlhuLGZmZmY6dHIsRjpHbixGRjpRbixGRkY6ZXIsRkZGRjpucn0sd2U9Y2xhc3MgbntzdGF0aWMgY3JlYXRlKGUsdD17fSl7cmV0dXJuIG5ldyBuKGUsdCl9c3RhdGljIHBhcnNlRm9ybWF0KGUpe2xldCB0PW51bGwscj1cXFwiXFxcIixzPSExLGk9W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2xldCBhPWUuY2hhckF0KG8pO2E9PT1cXFwiJ1xcXCI/KHIubGVuZ3RoPjAmJmkucHVzaCh7bGl0ZXJhbDpzLHZhbDpyfSksdD1udWxsLHI9XFxcIlxcXCIscz0hcyk6c3x8YT09PXQ/cis9YTooci5sZW5ndGg+MCYmaS5wdXNoKHtsaXRlcmFsOiExLHZhbDpyfSkscj1hLHQ9YSl9cmV0dXJuIHIubGVuZ3RoPjAmJmkucHVzaCh7bGl0ZXJhbDpzLHZhbDpyfSksaX1zdGF0aWMgbWFjcm9Ub2tlblRvRm9ybWF0T3B0cyhlKXtyZXR1cm4gQ2xbZV19Y29uc3RydWN0b3IoZSx0KXt0aGlzLm9wdHM9dCx0aGlzLmxvYz1lLHRoaXMuc3lzdGVtTG9jPW51bGx9Zm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZSx0KXtyZXR1cm4gdGhpcy5zeXN0ZW1Mb2M9PT1udWxsJiYodGhpcy5zeXN0ZW1Mb2M9dGhpcy5sb2MucmVkZWZhdWx0VG9TeXN0ZW0oKSksdGhpcy5zeXN0ZW1Mb2MuZHRGb3JtYXR0ZXIoZSxSKFIoe30sdGhpcy5vcHRzKSx0KSkuZm9ybWF0KCl9Zm9ybWF0RGF0ZVRpbWUoZSx0PXt9KXtyZXR1cm4gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZSxSKFIoe30sdGhpcy5vcHRzKSx0KSkuZm9ybWF0KCl9Zm9ybWF0RGF0ZVRpbWVQYXJ0cyhlLHQ9e30pe3JldHVybiB0aGlzLmxvYy5kdEZvcm1hdHRlcihlLFIoUih7fSx0aGlzLm9wdHMpLHQpKS5mb3JtYXRUb1BhcnRzKCl9cmVzb2x2ZWRPcHRpb25zKGUsdD17fSl7cmV0dXJuIHRoaXMubG9jLmR0Rm9ybWF0dGVyKGUsUihSKHt9LHRoaXMub3B0cyksdCkpLnJlc29sdmVkT3B0aW9ucygpfW51bShlLHQ9MCl7aWYodGhpcy5vcHRzLmZvcmNlU2ltcGxlKXJldHVybiByZShlLHQpO2xldCByPVIoe30sdGhpcy5vcHRzKTtyZXR1cm4gdD4wJiYoci5wYWRUbz10KSx0aGlzLmxvYy5udW1iZXJGb3JtYXR0ZXIocikuZm9ybWF0KGUpfWZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhlLHQpe2xldCByPXRoaXMubG9jLmxpc3RpbmdNb2RlKCk9PT1cXFwiZW5cXFwiLHM9dGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXImJnRoaXMubG9jLm91dHB1dENhbGVuZGFyIT09XFxcImdyZWdvcnlcXFwiLGk9KGgsYik9PnRoaXMubG9jLmV4dHJhY3QoZSxoLGIpLG89aD0+ZS5pc09mZnNldEZpeGVkJiZlLm9mZnNldD09PTAmJmguYWxsb3daP1xcXCJaXFxcIjplLmlzVmFsaWQ/ZS56b25lLmZvcm1hdE9mZnNldChlLnRzLGguZm9ybWF0KTpcXFwiXFxcIixhPSgpPT5yP2pvKGUpOmkoe2hvdXI6XFxcIm51bWVyaWNcXFwiLGhvdXJDeWNsZTpcXFwiaDEyXFxcIn0sXFxcImRheXBlcmlvZFxcXCIpLHU9KGgsYik9PnI/Vm8oZSxoKTppKGI/e21vbnRoOmh9Onttb250aDpoLGRheTpcXFwibnVtZXJpY1xcXCJ9LFxcXCJtb250aFxcXCIpLGw9KGgsYik9PnI/cW8oZSxoKTppKGI/e3dlZWtkYXk6aH06e3dlZWtkYXk6aCxtb250aDpcXFwibG9uZ1xcXCIsZGF5OlxcXCJudW1lcmljXFxcIn0sXFxcIndlZWtkYXlcXFwiKSxmPWg9PntsZXQgYj1uLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMoaCk7cmV0dXJuIGI/dGhpcy5mb3JtYXRXaXRoU3lzdGVtRGVmYXVsdChlLGIpOmh9LGQ9aD0+cj9VbyhlLGgpOmkoe2VyYTpofSxcXFwiZXJhXFxcIiksbT1oPT57c3dpdGNoKGgpe2Nhc2VcXFwiU1xcXCI6cmV0dXJuIHRoaXMubnVtKGUubWlsbGlzZWNvbmQpO2Nhc2VcXFwidVxcXCI6Y2FzZVxcXCJTU1NcXFwiOnJldHVybiB0aGlzLm51bShlLm1pbGxpc2Vjb25kLDMpO2Nhc2VcXFwic1xcXCI6cmV0dXJuIHRoaXMubnVtKGUuc2Vjb25kKTtjYXNlXFxcInNzXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5zZWNvbmQsMik7Y2FzZVxcXCJ1dVxcXCI6cmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZS5taWxsaXNlY29uZC8xMCksMik7Y2FzZVxcXCJ1dXVcXFwiOnJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGUubWlsbGlzZWNvbmQvMTAwKSk7Y2FzZVxcXCJtXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5taW51dGUpO2Nhc2VcXFwibW1cXFwiOnJldHVybiB0aGlzLm51bShlLm1pbnV0ZSwyKTtjYXNlXFxcImhcXFwiOnJldHVybiB0aGlzLm51bShlLmhvdXIlMTI9PT0wPzEyOmUuaG91ciUxMik7Y2FzZVxcXCJoaFxcXCI6cmV0dXJuIHRoaXMubnVtKGUuaG91ciUxMj09PTA/MTI6ZS5ob3VyJTEyLDIpO2Nhc2VcXFwiSFxcXCI6cmV0dXJuIHRoaXMubnVtKGUuaG91cik7Y2FzZVxcXCJISFxcXCI6cmV0dXJuIHRoaXMubnVtKGUuaG91ciwyKTtjYXNlXFxcIlpcXFwiOnJldHVybiBvKHtmb3JtYXQ6XFxcIm5hcnJvd1xcXCIsYWxsb3daOnRoaXMub3B0cy5hbGxvd1p9KTtjYXNlXFxcIlpaXFxcIjpyZXR1cm4gbyh7Zm9ybWF0OlxcXCJzaG9ydFxcXCIsYWxsb3daOnRoaXMub3B0cy5hbGxvd1p9KTtjYXNlXFxcIlpaWlxcXCI6cmV0dXJuIG8oe2Zvcm1hdDpcXFwidGVjaGllXFxcIixhbGxvd1o6dGhpcy5vcHRzLmFsbG93Wn0pO2Nhc2VcXFwiWlpaWlxcXCI6cmV0dXJuIGUuem9uZS5vZmZzZXROYW1lKGUudHMse2Zvcm1hdDpcXFwic2hvcnRcXFwiLGxvY2FsZTp0aGlzLmxvYy5sb2NhbGV9KTtjYXNlXFxcIlpaWlpaXFxcIjpyZXR1cm4gZS56b25lLm9mZnNldE5hbWUoZS50cyx7Zm9ybWF0OlxcXCJsb25nXFxcIixsb2NhbGU6dGhpcy5sb2MubG9jYWxlfSk7Y2FzZVxcXCJ6XFxcIjpyZXR1cm4gZS56b25lTmFtZTtjYXNlXFxcImFcXFwiOnJldHVybiBhKCk7Y2FzZVxcXCJkXFxcIjpyZXR1cm4gcz9pKHtkYXk6XFxcIm51bWVyaWNcXFwifSxcXFwiZGF5XFxcIik6dGhpcy5udW0oZS5kYXkpO2Nhc2VcXFwiZGRcXFwiOnJldHVybiBzP2koe2RheTpcXFwiMi1kaWdpdFxcXCJ9LFxcXCJkYXlcXFwiKTp0aGlzLm51bShlLmRheSwyKTtjYXNlXFxcImNcXFwiOnJldHVybiB0aGlzLm51bShlLndlZWtkYXkpO2Nhc2VcXFwiY2NjXFxcIjpyZXR1cm4gbChcXFwic2hvcnRcXFwiLCEwKTtjYXNlXFxcImNjY2NcXFwiOnJldHVybiBsKFxcXCJsb25nXFxcIiwhMCk7Y2FzZVxcXCJjY2NjY1xcXCI6cmV0dXJuIGwoXFxcIm5hcnJvd1xcXCIsITApO2Nhc2VcXFwiRVxcXCI6cmV0dXJuIHRoaXMubnVtKGUud2Vla2RheSk7Y2FzZVxcXCJFRUVcXFwiOnJldHVybiBsKFxcXCJzaG9ydFxcXCIsITEpO2Nhc2VcXFwiRUVFRVxcXCI6cmV0dXJuIGwoXFxcImxvbmdcXFwiLCExKTtjYXNlXFxcIkVFRUVFXFxcIjpyZXR1cm4gbChcXFwibmFycm93XFxcIiwhMSk7Y2FzZVxcXCJMXFxcIjpyZXR1cm4gcz9pKHttb250aDpcXFwibnVtZXJpY1xcXCIsZGF5OlxcXCJudW1lcmljXFxcIn0sXFxcIm1vbnRoXFxcIik6dGhpcy5udW0oZS5tb250aCk7Y2FzZVxcXCJMTFxcXCI6cmV0dXJuIHM/aSh7bW9udGg6XFxcIjItZGlnaXRcXFwiLGRheTpcXFwibnVtZXJpY1xcXCJ9LFxcXCJtb250aFxcXCIpOnRoaXMubnVtKGUubW9udGgsMik7Y2FzZVxcXCJMTExcXFwiOnJldHVybiB1KFxcXCJzaG9ydFxcXCIsITApO2Nhc2VcXFwiTExMTFxcXCI6cmV0dXJuIHUoXFxcImxvbmdcXFwiLCEwKTtjYXNlXFxcIkxMTExMXFxcIjpyZXR1cm4gdShcXFwibmFycm93XFxcIiwhMCk7Y2FzZVxcXCJNXFxcIjpyZXR1cm4gcz9pKHttb250aDpcXFwibnVtZXJpY1xcXCJ9LFxcXCJtb250aFxcXCIpOnRoaXMubnVtKGUubW9udGgpO2Nhc2VcXFwiTU1cXFwiOnJldHVybiBzP2koe21vbnRoOlxcXCIyLWRpZ2l0XFxcIn0sXFxcIm1vbnRoXFxcIik6dGhpcy5udW0oZS5tb250aCwyKTtjYXNlXFxcIk1NTVxcXCI6cmV0dXJuIHUoXFxcInNob3J0XFxcIiwhMSk7Y2FzZVxcXCJNTU1NXFxcIjpyZXR1cm4gdShcXFwibG9uZ1xcXCIsITEpO2Nhc2VcXFwiTU1NTU1cXFwiOnJldHVybiB1KFxcXCJuYXJyb3dcXFwiLCExKTtjYXNlXFxcInlcXFwiOnJldHVybiBzP2koe3llYXI6XFxcIm51bWVyaWNcXFwifSxcXFwieWVhclxcXCIpOnRoaXMubnVtKGUueWVhcik7Y2FzZVxcXCJ5eVxcXCI6cmV0dXJuIHM/aSh7eWVhcjpcXFwiMi1kaWdpdFxcXCJ9LFxcXCJ5ZWFyXFxcIik6dGhpcy5udW0oZS55ZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLDIpO2Nhc2VcXFwieXl5eVxcXCI6cmV0dXJuIHM/aSh7eWVhcjpcXFwibnVtZXJpY1xcXCJ9LFxcXCJ5ZWFyXFxcIik6dGhpcy5udW0oZS55ZWFyLDQpO2Nhc2VcXFwieXl5eXl5XFxcIjpyZXR1cm4gcz9pKHt5ZWFyOlxcXCJudW1lcmljXFxcIn0sXFxcInllYXJcXFwiKTp0aGlzLm51bShlLnllYXIsNik7Y2FzZVxcXCJHXFxcIjpyZXR1cm4gZChcXFwic2hvcnRcXFwiKTtjYXNlXFxcIkdHXFxcIjpyZXR1cm4gZChcXFwibG9uZ1xcXCIpO2Nhc2VcXFwiR0dHR0dcXFwiOnJldHVybiBkKFxcXCJuYXJyb3dcXFwiKTtjYXNlXFxcImtrXFxcIjpyZXR1cm4gdGhpcy5udW0oZS53ZWVrWWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwyKTtjYXNlXFxcImtra2tcXFwiOnJldHVybiB0aGlzLm51bShlLndlZWtZZWFyLDQpO2Nhc2VcXFwiV1xcXCI6cmV0dXJuIHRoaXMubnVtKGUud2Vla051bWJlcik7Y2FzZVxcXCJXV1xcXCI6cmV0dXJuIHRoaXMubnVtKGUud2Vla051bWJlciwyKTtjYXNlXFxcIm9cXFwiOnJldHVybiB0aGlzLm51bShlLm9yZGluYWwpO2Nhc2VcXFwib29vXFxcIjpyZXR1cm4gdGhpcy5udW0oZS5vcmRpbmFsLDMpO2Nhc2VcXFwicVxcXCI6cmV0dXJuIHRoaXMubnVtKGUucXVhcnRlcik7Y2FzZVxcXCJxcVxcXCI6cmV0dXJuIHRoaXMubnVtKGUucXVhcnRlciwyKTtjYXNlXFxcIlhcXFwiOnJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGUudHMvMWUzKSk7Y2FzZVxcXCJ4XFxcIjpyZXR1cm4gdGhpcy5udW0oZS50cyk7ZGVmYXVsdDpyZXR1cm4gZihoKX19O3JldHVybiBXbyhuLnBhcnNlRm9ybWF0KHQpLG0pfWZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyhlLHQpe2xldCByPXU9Pntzd2l0Y2godVswXSl7Y2FzZVxcXCJTXFxcIjpyZXR1cm5cXFwibWlsbGlzZWNvbmRcXFwiO2Nhc2VcXFwic1xcXCI6cmV0dXJuXFxcInNlY29uZFxcXCI7Y2FzZVxcXCJtXFxcIjpyZXR1cm5cXFwibWludXRlXFxcIjtjYXNlXFxcImhcXFwiOnJldHVyblxcXCJob3VyXFxcIjtjYXNlXFxcImRcXFwiOnJldHVyblxcXCJkYXlcXFwiO2Nhc2VcXFwid1xcXCI6cmV0dXJuXFxcIndlZWtcXFwiO2Nhc2VcXFwiTVxcXCI6cmV0dXJuXFxcIm1vbnRoXFxcIjtjYXNlXFxcInlcXFwiOnJldHVyblxcXCJ5ZWFyXFxcIjtkZWZhdWx0OnJldHVybiBudWxsfX0scz11PT5sPT57bGV0IGY9cihsKTtyZXR1cm4gZj90aGlzLm51bSh1LmdldChmKSxsLmxlbmd0aCk6bH0saT1uLnBhcnNlRm9ybWF0KHQpLG89aS5yZWR1Y2UoKHUse2xpdGVyYWw6bCx2YWw6Zn0pPT5sP3U6dS5jb25jYXQoZiksW10pLGE9ZS5zaGlmdFRvKC4uLm8ubWFwKHIpLmZpbHRlcih1PT51KSk7cmV0dXJuIFdvKGkscyhhKSl9fTt2YXIgZGU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnJlYXNvbj1lLHRoaXMuZXhwbGFuYXRpb249dH10b01lc3NhZ2UoKXtyZXR1cm4gdGhpcy5leHBsYW5hdGlvbj9gJHt0aGlzLnJlYXNvbn06ICR7dGhpcy5leHBsYW5hdGlvbn1gOnRoaXMucmVhc29ufX07dmFyIGtlPWNsYXNze2dldCB0eXBlKCl7dGhyb3cgbmV3IGplfWdldCBuYW1lKCl7dGhyb3cgbmV3IGplfWdldCBpYW5hTmFtZSgpe3JldHVybiB0aGlzLm5hbWV9Z2V0IGlzVW5pdmVyc2FsKCl7dGhyb3cgbmV3IGplfW9mZnNldE5hbWUoZSx0KXt0aHJvdyBuZXcgamV9Zm9ybWF0T2Zmc2V0KGUsdCl7dGhyb3cgbmV3IGplfW9mZnNldChlKXt0aHJvdyBuZXcgamV9ZXF1YWxzKGUpe3Rocm93IG5ldyBqZX1nZXQgaXNWYWxpZCgpe3Rocm93IG5ldyBqZX19O3ZhciBjaT1udWxsLGZuPWNsYXNzIG4gZXh0ZW5kcyBrZXtzdGF0aWMgZ2V0IGluc3RhbmNlKCl7cmV0dXJuIGNpPT09bnVsbCYmKGNpPW5ldyBuKSxjaX1nZXQgdHlwZSgpe3JldHVyblxcXCJzeXN0ZW1cXFwifWdldCBuYW1lKCl7cmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmV9Z2V0IGlzVW5pdmVyc2FsKCl7cmV0dXJuITF9b2Zmc2V0TmFtZShlLHtmb3JtYXQ6dCxsb2NhbGU6cn0pe3JldHVybiBKcihlLHQscil9Zm9ybWF0T2Zmc2V0KGUsdCl7cmV0dXJuIHZ0KHRoaXMub2Zmc2V0KGUpLHQpfW9mZnNldChlKXtyZXR1cm4tbmV3IERhdGUoZSkuZ2V0VGltZXpvbmVPZmZzZXQoKX1lcXVhbHMoZSl7cmV0dXJuIGUudHlwZT09PVxcXCJzeXN0ZW1cXFwifWdldCBpc1ZhbGlkKCl7cmV0dXJuITB9fTt2YXIgWXI9e307ZnVuY3Rpb24gdmwobil7cmV0dXJuIFlyW25dfHwoWXJbbl09bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXFxcImVuLVVTXFxcIix7aG91cjEyOiExLHRpbWVab25lOm4seWVhcjpcXFwibnVtZXJpY1xcXCIsbW9udGg6XFxcIjItZGlnaXRcXFwiLGRheTpcXFwiMi1kaWdpdFxcXCIsaG91cjpcXFwiMi1kaWdpdFxcXCIsbWludXRlOlxcXCIyLWRpZ2l0XFxcIixzZWNvbmQ6XFxcIjItZGlnaXRcXFwiLGVyYTpcXFwic2hvcnRcXFwifSkpLFlyW25dfXZhciB4bD17eWVhcjowLG1vbnRoOjEsZGF5OjIsZXJhOjMsaG91cjo0LG1pbnV0ZTo1LHNlY29uZDo2fTtmdW5jdGlvbiBPbChuLGUpe2xldCB0PW4uZm9ybWF0KGUpLnJlcGxhY2UoL1xcXFx1MjAwRS9nLFxcXCJcXFwiKSxyPS8oXFxcXGQrKVxcXFwvKFxcXFxkKylcXFxcLyhcXFxcZCspIChBRHxCQyksPyAoXFxcXGQrKTooXFxcXGQrKTooXFxcXGQrKS8uZXhlYyh0KSxbLHMsaSxvLGEsdSxsLGZdPXI7cmV0dXJuW28scyxpLGEsdSxsLGZdfWZ1bmN0aW9uIElsKG4sZSl7bGV0IHQ9bi5mb3JtYXRUb1BhcnRzKGUpLHI9W107Zm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldHt0eXBlOmksdmFsdWU6b309dFtzXSxhPXhsW2ldO2k9PT1cXFwiZXJhXFxcIj9yW2FdPW86VyhhKXx8KHJbYV09cGFyc2VJbnQobywxMCkpfXJldHVybiByfXZhciB6cj17fSxnZT1jbGFzcyBuIGV4dGVuZHMga2V7c3RhdGljIGNyZWF0ZShlKXtyZXR1cm4genJbZV18fCh6cltlXT1uZXcgbihlKSksenJbZV19c3RhdGljIHJlc2V0Q2FjaGUoKXt6cj17fSxZcj17fX1zdGF0aWMgaXNWYWxpZFNwZWNpZmllcihlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkWm9uZShlKX1zdGF0aWMgaXNWYWxpZFpvbmUoZSl7aWYoIWUpcmV0dXJuITE7dHJ5e3JldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcXFwiZW4tVVNcXFwiLHt0aW1lWm9uZTplfSkuZm9ybWF0KCksITB9Y2F0Y2godCl7cmV0dXJuITF9fWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy56b25lTmFtZT1lLHRoaXMudmFsaWQ9bi5pc1ZhbGlkWm9uZShlKX1nZXQgdHlwZSgpe3JldHVyblxcXCJpYW5hXFxcIn1nZXQgbmFtZSgpe3JldHVybiB0aGlzLnpvbmVOYW1lfWdldCBpc1VuaXZlcnNhbCgpe3JldHVybiExfW9mZnNldE5hbWUoZSx7Zm9ybWF0OnQsbG9jYWxlOnJ9KXtyZXR1cm4gSnIoZSx0LHIsdGhpcy5uYW1lKX1mb3JtYXRPZmZzZXQoZSx0KXtyZXR1cm4gdnQodGhpcy5vZmZzZXQoZSksdCl9b2Zmc2V0KGUpe2xldCB0PW5ldyBEYXRlKGUpO2lmKGlzTmFOKHQpKXJldHVybiBOYU47bGV0IHI9dmwodGhpcy5uYW1lKSxbcyxpLG8sYSx1LGwsZl09ci5mb3JtYXRUb1BhcnRzP0lsKHIsdCk6T2wocix0KTthPT09XFxcIkJDXFxcIiYmKHM9LU1hdGguYWJzKHMpKzEpO2xldCBtPWlyKHt5ZWFyOnMsbW9udGg6aSxkYXk6byxob3VyOnU9PT0yND8wOnUsbWludXRlOmwsc2Vjb25kOmYsbWlsbGlzZWNvbmQ6MH0pLGg9K3QsYj1oJTFlMztyZXR1cm4gaC09Yj49MD9iOjFlMytiLChtLWgpLyg2MCoxZTMpfWVxdWFscyhlKXtyZXR1cm4gZS50eXBlPT09XFxcImlhbmFcXFwiJiZlLm5hbWU9PT10aGlzLm5hbWV9Z2V0IGlzVmFsaWQoKXtyZXR1cm4gdGhpcy52YWxpZH19O3ZhciBmaT1udWxsLGhlPWNsYXNzIG4gZXh0ZW5kcyBrZXtzdGF0aWMgZ2V0IHV0Y0luc3RhbmNlKCl7cmV0dXJuIGZpPT09bnVsbCYmKGZpPW5ldyBuKDApKSxmaX1zdGF0aWMgaW5zdGFuY2UoZSl7cmV0dXJuIGU9PT0wP24udXRjSW5zdGFuY2U6bmV3IG4oZSl9c3RhdGljIHBhcnNlU3BlY2lmaWVyKGUpe2lmKGUpe2xldCB0PWUubWF0Y2goL151dGMoPzooWystXVxcXFxkezEsMn0pKD86OihcXFxcZHsyfSkpPyk/JC9pKTtpZih0KXJldHVybiBuZXcgbihWdCh0WzFdLHRbMl0pKX1yZXR1cm4gbnVsbH1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuZml4ZWQ9ZX1nZXQgdHlwZSgpe3JldHVyblxcXCJmaXhlZFxcXCJ9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5maXhlZD09PTA/XFxcIlVUQ1xcXCI6YFVUQyR7dnQodGhpcy5maXhlZCxcXFwibmFycm93XFxcIil9YH1nZXQgaWFuYU5hbWUoKXtyZXR1cm4gdGhpcy5maXhlZD09PTA/XFxcIkV0Yy9VVENcXFwiOmBFdGMvR01UJHt2dCgtdGhpcy5maXhlZCxcXFwibmFycm93XFxcIil9YH1vZmZzZXROYW1lKCl7cmV0dXJuIHRoaXMubmFtZX1mb3JtYXRPZmZzZXQoZSx0KXtyZXR1cm4gdnQodGhpcy5maXhlZCx0KX1nZXQgaXNVbml2ZXJzYWwoKXtyZXR1cm4hMH1vZmZzZXQoKXtyZXR1cm4gdGhpcy5maXhlZH1lcXVhbHMoZSl7cmV0dXJuIGUudHlwZT09PVxcXCJmaXhlZFxcXCImJmUuZml4ZWQ9PT10aGlzLmZpeGVkfWdldCBpc1ZhbGlkKCl7cmV0dXJuITB9fTt2YXIgZG49Y2xhc3MgZXh0ZW5kcyBrZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuem9uZU5hbWU9ZX1nZXQgdHlwZSgpe3JldHVyblxcXCJpbnZhbGlkXFxcIn1nZXQgbmFtZSgpe3JldHVybiB0aGlzLnpvbmVOYW1lfWdldCBpc1VuaXZlcnNhbCgpe3JldHVybiExfW9mZnNldE5hbWUoKXtyZXR1cm4gbnVsbH1mb3JtYXRPZmZzZXQoKXtyZXR1cm5cXFwiXFxcIn1vZmZzZXQoKXtyZXR1cm4gTmFOfWVxdWFscygpe3JldHVybiExfWdldCBpc1ZhbGlkKCl7cmV0dXJuITF9fTtmdW5jdGlvbiBWZShuLGUpe2xldCB0O2lmKFcobil8fG49PT1udWxsKXJldHVybiBlO2lmKG4gaW5zdGFuY2VvZiBrZSlyZXR1cm4gbjtpZihCbyhuKSl7bGV0IHI9bi50b0xvd2VyQ2FzZSgpO3JldHVybiByPT09XFxcImxvY2FsXFxcInx8cj09PVxcXCJzeXN0ZW1cXFwiP2U6cj09PVxcXCJ1dGNcXFwifHxyPT09XFxcImdtdFxcXCI/aGUudXRjSW5zdGFuY2U6aGUucGFyc2VTcGVjaWZpZXIocil8fGdlLmNyZWF0ZShuKX1lbHNlIHJldHVybiB0dChuKT9oZS5pbnN0YW5jZShuKTp0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm4ub2Zmc2V0JiZ0eXBlb2Ygbi5vZmZzZXQ9PVxcXCJudW1iZXJcXFwiP246bmV3IGRuKG4pfXZhciBIbz0oKT0+RGF0ZS5ub3coKSxKbz1cXFwic3lzdGVtXFxcIix6bz1udWxsLFlvPW51bGwsR289bnVsbCxabyxYPWNsYXNze3N0YXRpYyBnZXQgbm93KCl7cmV0dXJuIEhvfXN0YXRpYyBzZXQgbm93KGUpe0hvPWV9c3RhdGljIHNldCBkZWZhdWx0Wm9uZShlKXtKbz1lfXN0YXRpYyBnZXQgZGVmYXVsdFpvbmUoKXtyZXR1cm4gVmUoSm8sZm4uaW5zdGFuY2UpfXN0YXRpYyBnZXQgZGVmYXVsdExvY2FsZSgpe3JldHVybiB6b31zdGF0aWMgc2V0IGRlZmF1bHRMb2NhbGUoZSl7em89ZX1zdGF0aWMgZ2V0IGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0oKXtyZXR1cm4gWW99c3RhdGljIHNldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKGUpe1lvPWV9c3RhdGljIGdldCBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIoKXtyZXR1cm4gR299c3RhdGljIHNldCBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIoZSl7R289ZX1zdGF0aWMgZ2V0IHRocm93T25JbnZhbGlkKCl7cmV0dXJuIFpvfXN0YXRpYyBzZXQgdGhyb3dPbkludmFsaWQoZSl7Wm89ZX1zdGF0aWMgcmVzZXRDYWNoZXMoKXtuZS5yZXNldENhY2hlKCksZ2UucmVzZXRDYWNoZSgpfX07dmFyIFFvPXt9O2Z1bmN0aW9uIExsKG4sZT17fSl7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoW24sZV0pLHI9UW9bdF07cmV0dXJuIHJ8fChyPW5ldyBJbnRsLkxpc3RGb3JtYXQobixlKSxRb1t0XT1yKSxyfXZhciBkaT17fTtmdW5jdGlvbiBoaShuLGU9e30pe2xldCB0PUpTT04uc3RyaW5naWZ5KFtuLGVdKSxyPWRpW3RdO3JldHVybiByfHwocj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChuLGUpLGRpW3RdPXIpLHJ9dmFyIG1pPXt9O2Z1bmN0aW9uIE5sKG4sZT17fSl7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoW24sZV0pLHI9bWlbdF07cmV0dXJuIHJ8fChyPW5ldyBJbnRsLk51bWJlckZvcm1hdChuLGUpLG1pW3RdPXIpLHJ9dmFyIHBpPXt9O2Z1bmN0aW9uIEFsKG4sZT17fSl7bGV0IG89ZSx7YmFzZTp0fT1vLHI9WXMobyxbXFxcImJhc2VcXFwiXSkscz1KU09OLnN0cmluZ2lmeShbbixyXSksaT1waVtzXTtyZXR1cm4gaXx8KGk9bmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KG4sZSkscGlbc109aSksaX12YXIgdXI9bnVsbDtmdW5jdGlvbiBNbCgpe3JldHVybiB1cnx8KHVyPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLHVyKX1mdW5jdGlvbiBfbChuKXtsZXQgZT1uLmluZGV4T2YoXFxcIi11LVxcXCIpO2lmKGU9PT0tMSlyZXR1cm5bbl07e2xldCB0LHI9bi5zdWJzdHJpbmcoMCxlKTt0cnl7dD1oaShuKS5yZXNvbHZlZE9wdGlvbnMoKX1jYXRjaChvKXt0PWhpKHIpLnJlc29sdmVkT3B0aW9ucygpfWxldHtudW1iZXJpbmdTeXN0ZW06cyxjYWxlbmRhcjppfT10O3JldHVybltyLHMsaV19fWZ1bmN0aW9uIEJsKG4sZSx0KXtyZXR1cm4odHx8ZSkmJihuKz1cXFwiLXVcXFwiLHQmJihuKz1gLWNhLSR7dH1gKSxlJiYobis9YC1udS0ke2V9YCkpLG59ZnVuY3Rpb24gUGwobil7bGV0IGU9W107Zm9yKGxldCB0PTE7dDw9MTI7dCsrKXtsZXQgcj1xLnV0YygyMDE2LHQsMSk7ZS5wdXNoKG4ocikpfXJldHVybiBlfWZ1bmN0aW9uICRsKG4pe2xldCBlPVtdO2ZvcihsZXQgdD0xO3Q8PTc7dCsrKXtsZXQgcj1xLnV0YygyMDE2LDExLDEzK3QpO2UucHVzaChuKHIpKX1yZXR1cm4gZX1mdW5jdGlvbiBHcihuLGUsdCxyLHMpe2xldCBpPW4ubGlzdGluZ01vZGUodCk7cmV0dXJuIGk9PT1cXFwiZXJyb3JcXFwiP251bGw6aT09PVxcXCJlblxcXCI/cihlKTpzKGUpfWZ1bmN0aW9uIFJsKG4pe3JldHVybiBuLm51bWJlcmluZ1N5c3RlbSYmbi5udW1iZXJpbmdTeXN0ZW0hPT1cXFwibGF0blxcXCI/ITE6bi5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCJ8fCFuLmxvY2FsZXx8bi5sb2NhbGUuc3RhcnRzV2l0aChcXFwiZW5cXFwiKXx8bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobi5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCJ9dmFyIERpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnBhZFRvPXIucGFkVG98fDAsdGhpcy5mbG9vcj1yLmZsb29yfHwhMTtsZXQgYT1yLHtwYWRUbzpzLGZsb29yOml9PWEsbz1ZcyhhLFtcXFwicGFkVG9cXFwiLFxcXCJmbG9vclxcXCJdKTtpZighdHx8T2JqZWN0LmtleXMobykubGVuZ3RoPjApe2xldCB1PVIoe3VzZUdyb3VwaW5nOiExfSxyKTtyLnBhZFRvPjAmJih1Lm1pbmltdW1JbnRlZ2VyRGlnaXRzPXIucGFkVG8pLHRoaXMuaW5mPU5sKGUsdSl9fWZvcm1hdChlKXtpZih0aGlzLmluZil7bGV0IHQ9dGhpcy5mbG9vcj9NYXRoLmZsb29yKGUpOmU7cmV0dXJuIHRoaXMuaW5mLmZvcm1hdCh0KX1lbHNle2xldCB0PXRoaXMuZmxvb3I/TWF0aC5mbG9vcihlKTphbihlLDMpO3JldHVybiByZSh0LHRoaXMucGFkVG8pfX19LHlpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm9wdHM9cjtsZXQgcztpZihlLnpvbmUuaXNVbml2ZXJzYWwpe2xldCBvPS0xKihlLm9mZnNldC82MCksYT1vPj0wP2BFdGMvR01UKyR7b31gOmBFdGMvR01UJHtvfWA7ZS5vZmZzZXQhPT0wJiZnZS5jcmVhdGUoYSkudmFsaWQ/KHM9YSx0aGlzLmR0PWUpOihzPVxcXCJVVENcXFwiLHIudGltZVpvbmVOYW1lP3RoaXMuZHQ9ZTp0aGlzLmR0PWUub2Zmc2V0PT09MD9lOnEuZnJvbU1pbGxpcyhlLnRzK2Uub2Zmc2V0KjYwKjFlMykpfWVsc2UgZS56b25lLnR5cGU9PT1cXFwic3lzdGVtXFxcIj90aGlzLmR0PWU6KHRoaXMuZHQ9ZSxzPWUuem9uZS5uYW1lKTtsZXQgaT1SKHt9LHRoaXMub3B0cyk7cyYmKGkudGltZVpvbmU9cyksdGhpcy5kdGY9aGkodCxpKX1mb3JtYXQoKXtyZXR1cm4gdGhpcy5kdGYuZm9ybWF0KHRoaXMuZHQudG9KU0RhdGUoKSl9Zm9ybWF0VG9QYXJ0cygpe3JldHVybiB0aGlzLmR0Zi5mb3JtYXRUb1BhcnRzKHRoaXMuZHQudG9KU0RhdGUoKSl9cmVzb2x2ZWRPcHRpb25zKCl7cmV0dXJuIHRoaXMuZHRmLnJlc29sdmVkT3B0aW9ucygpfX0sZ2k9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMub3B0cz1SKHtzdHlsZTpcXFwibG9uZ1xcXCJ9LHIpLCF0JiZIcigpJiYodGhpcy5ydGY9QWwoZSxyKSl9Zm9ybWF0KGUsdCl7cmV0dXJuIHRoaXMucnRmP3RoaXMucnRmLmZvcm1hdChlLHQpOktvKHQsZSx0aGlzLm9wdHMubnVtZXJpYyx0aGlzLm9wdHMuc3R5bGUhPT1cXFwibG9uZ1xcXCIpfWZvcm1hdFRvUGFydHMoZSx0KXtyZXR1cm4gdGhpcy5ydGY/dGhpcy5ydGYuZm9ybWF0VG9QYXJ0cyhlLHQpOltdfX0sbmU9Y2xhc3MgbntzdGF0aWMgZnJvbU9wdHMoZSl7cmV0dXJuIG4uY3JlYXRlKGUubG9jYWxlLGUubnVtYmVyaW5nU3lzdGVtLGUub3V0cHV0Q2FsZW5kYXIsZS5kZWZhdWx0VG9FTil9c3RhdGljIGNyZWF0ZShlLHQscixzPSExKXtsZXQgaT1lfHxYLmRlZmF1bHRMb2NhbGUsbz1pfHwocz9cXFwiZW4tVVNcXFwiOk1sKCkpLGE9dHx8WC5kZWZhdWx0TnVtYmVyaW5nU3lzdGVtLHU9cnx8WC5kZWZhdWx0T3V0cHV0Q2FsZW5kYXI7cmV0dXJuIG5ldyBuKG8sYSx1LGkpfXN0YXRpYyByZXNldENhY2hlKCl7dXI9bnVsbCxkaT17fSxtaT17fSxwaT17fX1zdGF0aWMgZnJvbU9iamVjdCh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnQsb3V0cHV0Q2FsZW5kYXI6cn09e30pe3JldHVybiBuLmNyZWF0ZShlLHQscil9Y29uc3RydWN0b3IoZSx0LHIscyl7bGV0W2ksbyxhXT1fbChlKTt0aGlzLmxvY2FsZT1pLHRoaXMubnVtYmVyaW5nU3lzdGVtPXR8fG98fG51bGwsdGhpcy5vdXRwdXRDYWxlbmRhcj1yfHxhfHxudWxsLHRoaXMuaW50bD1CbCh0aGlzLmxvY2FsZSx0aGlzLm51bWJlcmluZ1N5c3RlbSx0aGlzLm91dHB1dENhbGVuZGFyKSx0aGlzLndlZWtkYXlzQ2FjaGU9e2Zvcm1hdDp7fSxzdGFuZGFsb25lOnt9fSx0aGlzLm1vbnRoc0NhY2hlPXtmb3JtYXQ6e30sc3RhbmRhbG9uZTp7fX0sdGhpcy5tZXJpZGllbUNhY2hlPW51bGwsdGhpcy5lcmFDYWNoZT17fSx0aGlzLnNwZWNpZmllZExvY2FsZT1zLHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ9bnVsbH1nZXQgZmFzdE51bWJlcnMoKXtyZXR1cm4gdGhpcy5mYXN0TnVtYmVyc0NhY2hlZD09bnVsbCYmKHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ9UmwodGhpcykpLHRoaXMuZmFzdE51bWJlcnNDYWNoZWR9bGlzdGluZ01vZGUoKXtsZXQgZT10aGlzLmlzRW5nbGlzaCgpLHQ9KHRoaXMubnVtYmVyaW5nU3lzdGVtPT09bnVsbHx8dGhpcy5udW1iZXJpbmdTeXN0ZW09PT1cXFwibGF0blxcXCIpJiYodGhpcy5vdXRwdXRDYWxlbmRhcj09PW51bGx8fHRoaXMub3V0cHV0Q2FsZW5kYXI9PT1cXFwiZ3JlZ29yeVxcXCIpO3JldHVybiBlJiZ0P1xcXCJlblxcXCI6XFxcImludGxcXFwifWNsb25lKGUpe3JldHVybiFlfHxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5sZW5ndGg9PT0wP3RoaXM6bi5jcmVhdGUoZS5sb2NhbGV8fHRoaXMuc3BlY2lmaWVkTG9jYWxlLGUubnVtYmVyaW5nU3lzdGVtfHx0aGlzLm51bWJlcmluZ1N5c3RlbSxlLm91dHB1dENhbGVuZGFyfHx0aGlzLm91dHB1dENhbGVuZGFyLGUuZGVmYXVsdFRvRU58fCExKX1yZWRlZmF1bHRUb0VOKGU9e30pe3JldHVybiB0aGlzLmNsb25lKHllKFIoe30sZSkse2RlZmF1bHRUb0VOOiEwfSkpfXJlZGVmYXVsdFRvU3lzdGVtKGU9e30pe3JldHVybiB0aGlzLmNsb25lKHllKFIoe30sZSkse2RlZmF1bHRUb0VOOiExfSkpfW1vbnRocyhlLHQ9ITEscj0hMCl7cmV0dXJuIEdyKHRoaXMsZSxyLHJpLCgpPT57bGV0IHM9dD97bW9udGg6ZSxkYXk6XFxcIm51bWVyaWNcXFwifTp7bW9udGg6ZX0saT10P1xcXCJmb3JtYXRcXFwiOlxcXCJzdGFuZGFsb25lXFxcIjtyZXR1cm4gdGhpcy5tb250aHNDYWNoZVtpXVtlXXx8KHRoaXMubW9udGhzQ2FjaGVbaV1bZV09UGwobz0+dGhpcy5leHRyYWN0KG8scyxcXFwibW9udGhcXFwiKSkpLHRoaXMubW9udGhzQ2FjaGVbaV1bZV19KX13ZWVrZGF5cyhlLHQ9ITEscj0hMCl7cmV0dXJuIEdyKHRoaXMsZSxyLG9pLCgpPT57bGV0IHM9dD97d2Vla2RheTplLHllYXI6XFxcIm51bWVyaWNcXFwiLG1vbnRoOlxcXCJsb25nXFxcIixkYXk6XFxcIm51bWVyaWNcXFwifTp7d2Vla2RheTplfSxpPXQ/XFxcImZvcm1hdFxcXCI6XFxcInN0YW5kYWxvbmVcXFwiO3JldHVybiB0aGlzLndlZWtkYXlzQ2FjaGVbaV1bZV18fCh0aGlzLndlZWtkYXlzQ2FjaGVbaV1bZV09JGwobz0+dGhpcy5leHRyYWN0KG8scyxcXFwid2Vla2RheVxcXCIpKSksdGhpcy53ZWVrZGF5c0NhY2hlW2ldW2VdfSl9bWVyaWRpZW1zKGU9ITApe3JldHVybiBHcih0aGlzLHZvaWQgMCxlLCgpPT5haSwoKT0+e2lmKCF0aGlzLm1lcmlkaWVtQ2FjaGUpe2xldCB0PXtob3VyOlxcXCJudW1lcmljXFxcIixob3VyQ3ljbGU6XFxcImgxMlxcXCJ9O3RoaXMubWVyaWRpZW1DYWNoZT1bcS51dGMoMjAxNiwxMSwxMyw5KSxxLnV0YygyMDE2LDExLDEzLDE5KV0ubWFwKHI9PnRoaXMuZXh0cmFjdChyLHQsXFxcImRheXBlcmlvZFxcXCIpKX1yZXR1cm4gdGhpcy5tZXJpZGllbUNhY2hlfSl9ZXJhcyhlLHQ9ITApe3JldHVybiBHcih0aGlzLGUsdCx1aSwoKT0+e2xldCByPXtlcmE6ZX07cmV0dXJuIHRoaXMuZXJhQ2FjaGVbZV18fCh0aGlzLmVyYUNhY2hlW2VdPVtxLnV0YygtNDAsMSwxKSxxLnV0YygyMDE3LDEsMSldLm1hcChzPT50aGlzLmV4dHJhY3QocyxyLFxcXCJlcmFcXFwiKSkpLHRoaXMuZXJhQ2FjaGVbZV19KX1leHRyYWN0KGUsdCxyKXtsZXQgcz10aGlzLmR0Rm9ybWF0dGVyKGUsdCksaT1zLmZvcm1hdFRvUGFydHMoKSxvPWkuZmluZChhPT5hLnR5cGUudG9Mb3dlckNhc2UoKT09PXIpO3JldHVybiBvP28udmFsdWU6bnVsbH1udW1iZXJGb3JtYXR0ZXIoZT17fSl7cmV0dXJuIG5ldyBEaSh0aGlzLmludGwsZS5mb3JjZVNpbXBsZXx8dGhpcy5mYXN0TnVtYmVycyxlKX1kdEZvcm1hdHRlcihlLHQ9e30pe3JldHVybiBuZXcgeWkoZSx0aGlzLmludGwsdCl9cmVsRm9ybWF0dGVyKGU9e30pe3JldHVybiBuZXcgZ2kodGhpcy5pbnRsLHRoaXMuaXNFbmdsaXNoKCksZSl9bGlzdEZvcm1hdHRlcihlPXt9KXtyZXR1cm4gTGwodGhpcy5pbnRsLGUpfWlzRW5nbGlzaCgpe3JldHVybiB0aGlzLmxvY2FsZT09PVxcXCJlblxcXCJ8fHRoaXMubG9jYWxlLnRvTG93ZXJDYXNlKCk9PT1cXFwiZW4tdXNcXFwifHxuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmludGwpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZS5zdGFydHNXaXRoKFxcXCJlbi11c1xcXCIpfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5sb2NhbGU9PT1lLmxvY2FsZSYmdGhpcy5udW1iZXJpbmdTeXN0ZW09PT1lLm51bWJlcmluZ1N5c3RlbSYmdGhpcy5vdXRwdXRDYWxlbmRhcj09PWUub3V0cHV0Q2FsZW5kYXJ9fTtmdW5jdGlvbiBtbiguLi5uKXtsZXQgZT1uLnJlZHVjZSgodCxyKT0+dCtyLnNvdXJjZSxcXFwiXFxcIik7cmV0dXJuIFJlZ0V4cChgXiR7ZX0kYCl9ZnVuY3Rpb24gcG4oLi4ubil7cmV0dXJuIGU9Pm4ucmVkdWNlKChbdCxyLHNdLGkpPT57bGV0W28sYSx1XT1pKGUscyk7cmV0dXJuW1IoUih7fSx0KSxvKSxhfHxyLHVdfSxbe30sbnVsbCwxXSkuc2xpY2UoMCwyKX1mdW5jdGlvbiBEbihuLC4uLmUpe2lmKG49PW51bGwpcmV0dXJuW251bGwsbnVsbF07Zm9yKGxldFt0LHJdb2YgZSl7bGV0IHM9dC5leGVjKG4pO2lmKHMpcmV0dXJuIHIocyl9cmV0dXJuW251bGwsbnVsbF19ZnVuY3Rpb24gZWEoLi4ubil7cmV0dXJuKGUsdCk9PntsZXQgcj17fSxzO2ZvcihzPTA7czxuLmxlbmd0aDtzKyspcltuW3NdXT1EdChlW3Qrc10pO3JldHVybltyLG51bGwsdCtzXX19dmFyIHRhPS8oPzooWil8KFsrLV1cXFxcZFxcXFxkKSg/Ojo/KFxcXFxkXFxcXGQpKT8pLyxqbD1gKD86JHt0YS5zb3VyY2V9Pyg/OlxcXFxcXFxcWygke3RpLnNvdXJjZX0pXFxcXFxcXFxdKT8pP2AsYmk9LyhcXFxcZFxcXFxkKSg/Ojo/KFxcXFxkXFxcXGQpKD86Oj8oXFxcXGRcXFxcZCkoPzpbLixdKFxcXFxkezEsMzB9KSk/KT8pPy8sbmE9UmVnRXhwKGAke2JpLnNvdXJjZX0ke2psfWApLEZpPVJlZ0V4cChgKD86VCR7bmEuc291cmNlfSk/YCkscWw9LyhbKy1dXFxcXGR7Nn18XFxcXGR7NH0pKD86LT8oXFxcXGRcXFxcZCkoPzotPyhcXFxcZFxcXFxkKSk/KT8vLFZsPS8oXFxcXGR7NH0pLT9XKFxcXFxkXFxcXGQpKD86LT8oXFxcXGQpKT8vLFVsPS8oXFxcXGR7NH0pLT8oXFxcXGR7M30pLyxLbD1lYShcXFwid2Vla1llYXJcXFwiLFxcXCJ3ZWVrTnVtYmVyXFxcIixcXFwid2Vla0RheVxcXCIpLFdsPWVhKFxcXCJ5ZWFyXFxcIixcXFwib3JkaW5hbFxcXCIpLEhsPS8oXFxcXGR7NH0pLShcXFxcZFxcXFxkKS0oXFxcXGRcXFxcZCkvLHJhPVJlZ0V4cChgJHtiaS5zb3VyY2V9ID8oPzoke3RhLnNvdXJjZX18KCR7dGkuc291cmNlfSkpP2ApLEpsPVJlZ0V4cChgKD86ICR7cmEuc291cmNlfSk/YCk7ZnVuY3Rpb24gaG4obixlLHQpe2xldCByPW5bZV07cmV0dXJuIFcocik/dDpEdChyKX1mdW5jdGlvbiB6bChuLGUpe3JldHVyblt7eWVhcjpobihuLGUpLG1vbnRoOmhuKG4sZSsxLDEpLGRheTpobihuLGUrMiwxKX0sbnVsbCxlKzNdfWZ1bmN0aW9uIHluKG4sZSl7cmV0dXJuW3tob3VyczpobihuLGUsMCksbWludXRlczpobihuLGUrMSwwKSxzZWNvbmRzOmhuKG4sZSsyLDApLG1pbGxpc2Vjb25kczpzcihuW2UrM10pfSxudWxsLGUrNF19ZnVuY3Rpb24gbHIobixlKXtsZXQgdD0hbltlXSYmIW5bZSsxXSxyPVZ0KG5bZSsxXSxuW2UrMl0pLHM9dD9udWxsOmhlLmluc3RhbmNlKHIpO3JldHVyblt7fSxzLGUrM119ZnVuY3Rpb24gY3IobixlKXtsZXQgdD1uW2VdP2dlLmNyZWF0ZShuW2VdKTpudWxsO3JldHVyblt7fSx0LGUrMV19dmFyIFlsPVJlZ0V4cChgXlQ/JHtiaS5zb3VyY2V9JGApLEdsPS9eLT9QKD86KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pWSk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pTSk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pVyk/KD86KC0/XFxcXGR7MSwyMH0oPzpcXFxcLlxcXFxkezEsMjB9KT8pRCk/KD86VCg/OigtP1xcXFxkezEsMjB9KD86XFxcXC5cXFxcZHsxLDIwfSk/KUgpPyg/OigtP1xcXFxkezEsMjB9KD86XFxcXC5cXFxcZHsxLDIwfSk/KU0pPyg/OigtP1xcXFxkezEsMjB9KSg/OlsuLF0oLT9cXFxcZHsxLDIwfSkpP1MpPyk/KSQvO2Z1bmN0aW9uIFpsKG4pe2xldFtlLHQscixzLGksbyxhLHUsbF09bixmPWVbMF09PT1cXFwiLVxcXCIsZD11JiZ1WzBdPT09XFxcIi1cXFwiLG09KGgsYj0hMSk9PmghPT12b2lkIDAmJihifHxoJiZmKT8taDpoO3JldHVyblt7eWVhcnM6bShDdCh0KSksbW9udGhzOm0oQ3QocikpLHdlZWtzOm0oQ3QocykpLGRheXM6bShDdChpKSksaG91cnM6bShDdChvKSksbWludXRlczptKEN0KGEpKSxzZWNvbmRzOm0oQ3QodSksdT09PVxcXCItMFxcXCIpLG1pbGxpc2Vjb25kczptKHNyKGwpLGQpfV19dmFyIFFsPXtHTVQ6MCxFRFQ6LTQqNjAsRVNUOi01KjYwLENEVDotNSo2MCxDU1Q6LTYqNjAsTURUOi02KjYwLE1TVDotNyo2MCxQRFQ6LTcqNjAsUFNUOi04KjYwfTtmdW5jdGlvbiBFaShuLGUsdCxyLHMsaSxvKXtsZXQgYT17eWVhcjplLmxlbmd0aD09PTI/b3IoRHQoZSkpOkR0KGUpLG1vbnRoOm5pLmluZGV4T2YodCkrMSxkYXk6RHQociksaG91cjpEdChzKSxtaW51dGU6RHQoaSl9O3JldHVybiBvJiYoYS5zZWNvbmQ9RHQobykpLG4mJihhLndlZWtkYXk9bi5sZW5ndGg+Mz9zaS5pbmRleE9mKG4pKzE6aWkuaW5kZXhPZihuKSsxKSxhfXZhciBYbD0vXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLFxcXFxzKT8oXFxcXGR7MSwyfSlcXFxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXFxccyhcXFxcZHsyLDR9KVxcXFxzKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKSg/OjooXFxcXGRcXFxcZCkpP1xcXFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXFxcXGRcXFxcZCkoXFxcXGRcXFxcZCkpKSQvO2Z1bmN0aW9uIGVjKG4pe2xldFssZSx0LHIscyxpLG8sYSx1LGwsZixkXT1uLG09RWkoZSxzLHIsdCxpLG8sYSksaDtyZXR1cm4gdT9oPVFsW3VdOmw/aD0wOmg9VnQoZixkKSxbbSxuZXcgaGUoaCldfWZ1bmN0aW9uIHRjKG4pe3JldHVybiBuLnJlcGxhY2UoL1xcXFwoW14oKV0qXFxcXCl8W1xcXFxuXFxcXHRdL2csXFxcIiBcXFwiKS5yZXBsYWNlKC8oXFxcXHNcXFxccyspL2csXFxcIiBcXFwiKS50cmltKCl9dmFyIG5jPS9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcXFxcZFxcXFxkKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpIChcXFxcZHs0fSkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgR01UJC8scmM9L14oTW9uZGF5fFR1ZXNkYXl8V2VkbmVzZGF5fFRodXJzZGF5fEZyaWRheXxTYXR1cmRheXxTdW5kYXkpLCAoXFxcXGRcXFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxcXGRcXFxcZCkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgR01UJC8sc2M9L14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpICggXFxcXGR8XFxcXGRcXFxcZCkgKFxcXFxkXFxcXGQpOihcXFxcZFxcXFxkKTooXFxcXGRcXFxcZCkgKFxcXFxkezR9KSQvO2Z1bmN0aW9uIFhvKG4pe2xldFssZSx0LHIscyxpLG8sYV09bjtyZXR1cm5bRWkoZSxzLHIsdCxpLG8sYSksaGUudXRjSW5zdGFuY2VdfWZ1bmN0aW9uIGljKG4pe2xldFssZSx0LHIscyxpLG8sYV09bjtyZXR1cm5bRWkoZSxhLHQscixzLGksbyksaGUudXRjSW5zdGFuY2VdfXZhciBvYz1tbihxbCxGaSksYWM9bW4oVmwsRmkpLHVjPW1uKFVsLEZpKSxsYz1tbihuYSksc2E9cG4oemwseW4sbHIsY3IpLGNjPXBuKEtsLHluLGxyLGNyKSxmYz1wbihXbCx5bixscixjciksZGM9cG4oeW4sbHIsY3IpO2Z1bmN0aW9uIGlhKG4pe3JldHVybiBEbihuLFtvYyxzYV0sW2FjLGNjXSxbdWMsZmNdLFtsYyxkY10pfWZ1bmN0aW9uIG9hKG4pe3JldHVybiBEbih0YyhuKSxbWGwsZWNdKX1mdW5jdGlvbiBhYShuKXtyZXR1cm4gRG4obixbbmMsWG9dLFtyYyxYb10sW3NjLGljXSl9ZnVuY3Rpb24gdWEobil7cmV0dXJuIERuKG4sW0dsLFpsXSl9dmFyIGhjPXBuKHluKTtmdW5jdGlvbiBsYShuKXtyZXR1cm4gRG4obixbWWwsaGNdKX12YXIgbWM9bW4oSGwsSmwpLHBjPW1uKHJhKSxEYz1wbih5bixscixjcik7ZnVuY3Rpb24gY2Eobil7cmV0dXJuIERuKG4sW21jLHNhXSxbcGMsRGNdKX12YXIgeWM9XFxcIkludmFsaWQgRHVyYXRpb25cXFwiLGZhPXt3ZWVrczp7ZGF5czo3LGhvdXJzOjcqMjQsbWludXRlczo3KjI0KjYwLHNlY29uZHM6NyoyNCo2MCo2MCxtaWxsaXNlY29uZHM6NyoyNCo2MCo2MCoxZTN9LGRheXM6e2hvdXJzOjI0LG1pbnV0ZXM6MjQqNjAsc2Vjb25kczoyNCo2MCo2MCxtaWxsaXNlY29uZHM6MjQqNjAqNjAqMWUzfSxob3Vyczp7bWludXRlczo2MCxzZWNvbmRzOjYwKjYwLG1pbGxpc2Vjb25kczo2MCo2MCoxZTN9LG1pbnV0ZXM6e3NlY29uZHM6NjAsbWlsbGlzZWNvbmRzOjYwKjFlM30sc2Vjb25kczp7bWlsbGlzZWNvbmRzOjFlM319LGdjPVIoe3llYXJzOntxdWFydGVyczo0LG1vbnRoczoxMix3ZWVrczo1MixkYXlzOjM2NSxob3VyczozNjUqMjQsbWludXRlczozNjUqMjQqNjAsc2Vjb25kczozNjUqMjQqNjAqNjAsbWlsbGlzZWNvbmRzOjM2NSoyNCo2MCo2MCoxZTN9LHF1YXJ0ZXJzOnttb250aHM6Myx3ZWVrczoxMyxkYXlzOjkxLGhvdXJzOjkxKjI0LG1pbnV0ZXM6OTEqMjQqNjAsc2Vjb25kczo5MSoyNCo2MCo2MCxtaWxsaXNlY29uZHM6OTEqMjQqNjAqNjAqMWUzfSxtb250aHM6e3dlZWtzOjQsZGF5czozMCxob3VyczozMCoyNCxtaW51dGVzOjMwKjI0KjYwLHNlY29uZHM6MzAqMjQqNjAqNjAsbWlsbGlzZWNvbmRzOjMwKjI0KjYwKjYwKjFlM319LGZhKSxNZT0xNDYwOTcvNDAwLGduPTE0NjA5Ny80ODAwLGJjPVIoe3llYXJzOntxdWFydGVyczo0LG1vbnRoczoxMix3ZWVrczpNZS83LGRheXM6TWUsaG91cnM6TWUqMjQsbWludXRlczpNZSoyNCo2MCxzZWNvbmRzOk1lKjI0KjYwKjYwLG1pbGxpc2Vjb25kczpNZSoyNCo2MCo2MCoxZTN9LHF1YXJ0ZXJzOnttb250aHM6Myx3ZWVrczpNZS8yOCxkYXlzOk1lLzQsaG91cnM6TWUqMjQvNCxtaW51dGVzOk1lKjI0KjYwLzQsc2Vjb25kczpNZSoyNCo2MCo2MC80LG1pbGxpc2Vjb25kczpNZSoyNCo2MCo2MCoxZTMvNH0sbW9udGhzOnt3ZWVrczpnbi83LGRheXM6Z24saG91cnM6Z24qMjQsbWludXRlczpnbioyNCo2MCxzZWNvbmRzOmduKjI0KjYwKjYwLG1pbGxpc2Vjb25kczpnbioyNCo2MCo2MCoxZTN9fSxmYSksS3Q9W1xcXCJ5ZWFyc1xcXCIsXFxcInF1YXJ0ZXJzXFxcIixcXFwibW9udGhzXFxcIixcXFwid2Vla3NcXFwiLFxcXCJkYXlzXFxcIixcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCIsXFxcIm1pbGxpc2Vjb25kc1xcXCJdLEZjPUt0LnNsaWNlKDApLnJldmVyc2UoKTtmdW5jdGlvbiBVdChuLGUsdD0hMSl7bGV0IHI9e3ZhbHVlczp0P2UudmFsdWVzOlIoUih7fSxuLnZhbHVlcyksZS52YWx1ZXN8fHt9KSxsb2M6bi5sb2MuY2xvbmUoZS5sb2MpLGNvbnZlcnNpb25BY2N1cmFjeTplLmNvbnZlcnNpb25BY2N1cmFjeXx8bi5jb252ZXJzaW9uQWNjdXJhY3l9O3JldHVybiBuZXcgQihyKX1mdW5jdGlvbiBFYyhuKXtyZXR1cm4gbjwwP01hdGguZmxvb3Iobik6TWF0aC5jZWlsKG4pfWZ1bmN0aW9uIGRhKG4sZSx0LHIscyl7bGV0IGk9bltzXVt0XSxvPWVbdF0vaSxhPU1hdGguc2lnbihvKT09PU1hdGguc2lnbihyW3NdKSx1PSFhJiZyW3NdIT09MCYmTWF0aC5hYnMobyk8PTE/RWMobyk6TWF0aC50cnVuYyhvKTtyW3NdKz11LGVbdF0tPXUqaX1mdW5jdGlvbiB3YyhuLGUpe0ZjLnJlZHVjZSgodCxyKT0+VyhlW3JdKT90Oih0JiZkYShuLGUsdCxlLHIpLHIpLG51bGwpfXZhciBCPWNsYXNzIG57Y29uc3RydWN0b3IoZSl7bGV0IHQ9ZS5jb252ZXJzaW9uQWNjdXJhY3k9PT1cXFwibG9uZ3Rlcm1cXFwifHwhMTt0aGlzLnZhbHVlcz1lLnZhbHVlcyx0aGlzLmxvYz1lLmxvY3x8bmUuY3JlYXRlKCksdGhpcy5jb252ZXJzaW9uQWNjdXJhY3k9dD9cXFwibG9uZ3Rlcm1cXFwiOlxcXCJjYXN1YWxcXFwiLHRoaXMuaW52YWxpZD1lLmludmFsaWR8fG51bGwsdGhpcy5tYXRyaXg9dD9iYzpnYyx0aGlzLmlzTHV4b25EdXJhdGlvbj0hMH1zdGF0aWMgZnJvbU1pbGxpcyhlLHQpe3JldHVybiBuLmZyb21PYmplY3Qoe21pbGxpc2Vjb25kczplfSx0KX1zdGF0aWMgZnJvbU9iamVjdChlLHQ9e30pe2lmKGU9PW51bGx8fHR5cGVvZiBlIT1cXFwib2JqZWN0XFxcIil0aHJvdyBuZXcgZmUoYER1cmF0aW9uLmZyb21PYmplY3Q6IGFyZ3VtZW50IGV4cGVjdGVkIHRvIGJlIGFuIG9iamVjdCwgZ290ICR7ZT09PW51bGw/XFxcIm51bGxcXFwiOnR5cGVvZiBlfWApO3JldHVybiBuZXcgbih7dmFsdWVzOmNuKGUsbi5ub3JtYWxpemVVbml0KSxsb2M6bmUuZnJvbU9iamVjdCh0KSxjb252ZXJzaW9uQWNjdXJhY3k6dC5jb252ZXJzaW9uQWNjdXJhY3l9KX1zdGF0aWMgZnJvbUR1cmF0aW9uTGlrZShlKXtpZih0dChlKSlyZXR1cm4gbi5mcm9tTWlsbGlzKGUpO2lmKG4uaXNEdXJhdGlvbihlKSlyZXR1cm4gZTtpZih0eXBlb2YgZT09XFxcIm9iamVjdFxcXCIpcmV0dXJuIG4uZnJvbU9iamVjdChlKTt0aHJvdyBuZXcgZmUoYFVua25vd24gZHVyYXRpb24gYXJndW1lbnQgJHtlfSBvZiB0eXBlICR7dHlwZW9mIGV9YCl9c3RhdGljIGZyb21JU08oZSx0KXtsZXRbcl09dWEoZSk7cmV0dXJuIHI/bi5mcm9tT2JqZWN0KHIsdCk6bi5pbnZhbGlkKFxcXCJ1bnBhcnNhYmxlXFxcIixgdGhlIGlucHV0IFxcXCIke2V9XFxcIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKX1zdGF0aWMgZnJvbUlTT1RpbWUoZSx0KXtsZXRbcl09bGEoZSk7cmV0dXJuIHI/bi5mcm9tT2JqZWN0KHIsdCk6bi5pbnZhbGlkKFxcXCJ1bnBhcnNhYmxlXFxcIixgdGhlIGlucHV0IFxcXCIke2V9XFxcIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKX1zdGF0aWMgaW52YWxpZChlLHQ9bnVsbCl7aWYoIWUpdGhyb3cgbmV3IGZlKFxcXCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIER1cmF0aW9uIGlzIGludmFsaWRcXFwiKTtsZXQgcj1lIGluc3RhbmNlb2YgZGU/ZTpuZXcgZGUoZSx0KTtpZihYLnRocm93T25JbnZhbGlkKXRocm93IG5ldyBXcihyKTtyZXR1cm4gbmV3IG4oe2ludmFsaWQ6cn0pfXN0YXRpYyBub3JtYWxpemVVbml0KGUpe2xldCB0PXt5ZWFyOlxcXCJ5ZWFyc1xcXCIseWVhcnM6XFxcInllYXJzXFxcIixxdWFydGVyOlxcXCJxdWFydGVyc1xcXCIscXVhcnRlcnM6XFxcInF1YXJ0ZXJzXFxcIixtb250aDpcXFwibW9udGhzXFxcIixtb250aHM6XFxcIm1vbnRoc1xcXCIsd2VlazpcXFwid2Vla3NcXFwiLHdlZWtzOlxcXCJ3ZWVrc1xcXCIsZGF5OlxcXCJkYXlzXFxcIixkYXlzOlxcXCJkYXlzXFxcIixob3VyOlxcXCJob3Vyc1xcXCIsaG91cnM6XFxcImhvdXJzXFxcIixtaW51dGU6XFxcIm1pbnV0ZXNcXFwiLG1pbnV0ZXM6XFxcIm1pbnV0ZXNcXFwiLHNlY29uZDpcXFwic2Vjb25kc1xcXCIsc2Vjb25kczpcXFwic2Vjb25kc1xcXCIsbWlsbGlzZWNvbmQ6XFxcIm1pbGxpc2Vjb25kc1xcXCIsbWlsbGlzZWNvbmRzOlxcXCJtaWxsaXNlY29uZHNcXFwifVtlJiZlLnRvTG93ZXJDYXNlKCldO2lmKCF0KXRocm93IG5ldyBzbihlKTtyZXR1cm4gdH1zdGF0aWMgaXNEdXJhdGlvbihlKXtyZXR1cm4gZSYmZS5pc0x1eG9uRHVyYXRpb258fCExfWdldCBsb2NhbGUoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMubG9jLmxvY2FsZTpudWxsfWdldCBudW1iZXJpbmdTeXN0ZW0oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMubG9jLm51bWJlcmluZ1N5c3RlbTpudWxsfXRvRm9ybWF0KGUsdD17fSl7bGV0IHI9eWUoUih7fSx0KSx7Zmxvb3I6dC5yb3VuZCE9PSExJiZ0LmZsb29yIT09ITF9KTtyZXR1cm4gdGhpcy5pc1ZhbGlkP3dlLmNyZWF0ZSh0aGlzLmxvYyxyKS5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcodGhpcyxlKTp5Y310b0h1bWFuKGU9e30pe2xldCB0PUt0Lm1hcChyPT57bGV0IHM9dGhpcy52YWx1ZXNbcl07cmV0dXJuIFcocyk/bnVsbDp0aGlzLmxvYy5udW1iZXJGb3JtYXR0ZXIoeWUoUih7c3R5bGU6XFxcInVuaXRcXFwiLHVuaXREaXNwbGF5OlxcXCJsb25nXFxcIn0sZSkse3VuaXQ6ci5zbGljZSgwLC0xKX0pKS5mb3JtYXQocyl9KS5maWx0ZXIocj0+cik7cmV0dXJuIHRoaXMubG9jLmxpc3RGb3JtYXR0ZXIoUih7dHlwZTpcXFwiY29uanVuY3Rpb25cXFwiLHN0eWxlOmUubGlzdFN0eWxlfHxcXFwibmFycm93XFxcIn0sZSkpLmZvcm1hdCh0KX10b09iamVjdCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/Uih7fSx0aGlzLnZhbHVlcyk6e319dG9JU08oKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiBudWxsO2xldCBlPVxcXCJQXFxcIjtyZXR1cm4gdGhpcy55ZWFycyE9PTAmJihlKz10aGlzLnllYXJzK1xcXCJZXFxcIiksKHRoaXMubW9udGhzIT09MHx8dGhpcy5xdWFydGVycyE9PTApJiYoZSs9dGhpcy5tb250aHMrdGhpcy5xdWFydGVycyozK1xcXCJNXFxcIiksdGhpcy53ZWVrcyE9PTAmJihlKz10aGlzLndlZWtzK1xcXCJXXFxcIiksdGhpcy5kYXlzIT09MCYmKGUrPXRoaXMuZGF5cytcXFwiRFxcXCIpLCh0aGlzLmhvdXJzIT09MHx8dGhpcy5taW51dGVzIT09MHx8dGhpcy5zZWNvbmRzIT09MHx8dGhpcy5taWxsaXNlY29uZHMhPT0wKSYmKGUrPVxcXCJUXFxcIiksdGhpcy5ob3VycyE9PTAmJihlKz10aGlzLmhvdXJzK1xcXCJIXFxcIiksdGhpcy5taW51dGVzIT09MCYmKGUrPXRoaXMubWludXRlcytcXFwiTVxcXCIpLCh0aGlzLnNlY29uZHMhPT0wfHx0aGlzLm1pbGxpc2Vjb25kcyE9PTApJiYoZSs9YW4odGhpcy5zZWNvbmRzK3RoaXMubWlsbGlzZWNvbmRzLzFlMywzKStcXFwiU1xcXCIpLGU9PT1cXFwiUFxcXCImJihlKz1cXFwiVDBTXFxcIiksZX10b0lTT1RpbWUoZT17fSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gbnVsbDtsZXQgdD10aGlzLnRvTWlsbGlzKCk7aWYodDwwfHx0Pj04NjRlNSlyZXR1cm4gbnVsbDtlPVIoe3N1cHByZXNzTWlsbGlzZWNvbmRzOiExLHN1cHByZXNzU2Vjb25kczohMSxpbmNsdWRlUHJlZml4OiExLGZvcm1hdDpcXFwiZXh0ZW5kZWRcXFwifSxlKTtsZXQgcj10aGlzLnNoaWZ0VG8oXFxcImhvdXJzXFxcIixcXFwibWludXRlc1xcXCIsXFxcInNlY29uZHNcXFwiLFxcXCJtaWxsaXNlY29uZHNcXFwiKSxzPWUuZm9ybWF0PT09XFxcImJhc2ljXFxcIj9cXFwiaGhtbVxcXCI6XFxcImhoOm1tXFxcIjsoIWUuc3VwcHJlc3NTZWNvbmRzfHxyLnNlY29uZHMhPT0wfHxyLm1pbGxpc2Vjb25kcyE9PTApJiYocys9ZS5mb3JtYXQ9PT1cXFwiYmFzaWNcXFwiP1xcXCJzc1xcXCI6XFxcIjpzc1xcXCIsKCFlLnN1cHByZXNzTWlsbGlzZWNvbmRzfHxyLm1pbGxpc2Vjb25kcyE9PTApJiYocys9XFxcIi5TU1NcXFwiKSk7bGV0IGk9ci50b0Zvcm1hdChzKTtyZXR1cm4gZS5pbmNsdWRlUHJlZml4JiYoaT1cXFwiVFxcXCIraSksaX10b0pTT04oKXtyZXR1cm4gdGhpcy50b0lTTygpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9JU08oKX10b01pbGxpcygpe3JldHVybiB0aGlzLmFzKFxcXCJtaWxsaXNlY29uZHNcXFwiKX12YWx1ZU9mKCl7cmV0dXJuIHRoaXMudG9NaWxsaXMoKX1wbHVzKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9bi5mcm9tRHVyYXRpb25MaWtlKGUpLHI9e307Zm9yKGxldCBzIG9mIEt0KShrdCh0LnZhbHVlcyxzKXx8a3QodGhpcy52YWx1ZXMscykpJiYocltzXT10LmdldChzKSt0aGlzLmdldChzKSk7cmV0dXJuIFV0KHRoaXMse3ZhbHVlczpyfSwhMCl9bWludXMoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1uLmZyb21EdXJhdGlvbkxpa2UoZSk7cmV0dXJuIHRoaXMucGx1cyh0Lm5lZ2F0ZSgpKX1tYXBVbml0cyhlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PXt9O2ZvcihsZXQgciBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpdFtyXT1laShlKHRoaXMudmFsdWVzW3JdLHIpKTtyZXR1cm4gVXQodGhpcyx7dmFsdWVzOnR9LCEwKX1nZXQoZSl7cmV0dXJuIHRoaXNbbi5ub3JtYWxpemVVbml0KGUpXX1zZXQoZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgdD1SKFIoe30sdGhpcy52YWx1ZXMpLGNuKGUsbi5ub3JtYWxpemVVbml0KSk7cmV0dXJuIFV0KHRoaXMse3ZhbHVlczp0fSl9cmVjb25maWd1cmUoe2xvY2FsZTplLG51bWJlcmluZ1N5c3RlbTp0LGNvbnZlcnNpb25BY2N1cmFjeTpyfT17fSl7bGV0IHM9dGhpcy5sb2MuY2xvbmUoe2xvY2FsZTplLG51bWJlcmluZ1N5c3RlbTp0fSksaT17bG9jOnN9O3JldHVybiByJiYoaS5jb252ZXJzaW9uQWNjdXJhY3k9ciksVXQodGhpcyxpKX1hcyhlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuc2hpZnRUbyhlKS5nZXQoZSk6TmFOfW5vcm1hbGl6ZSgpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IGU9dGhpcy50b09iamVjdCgpO3JldHVybiB3Yyh0aGlzLm1hdHJpeCxlKSxVdCh0aGlzLHt2YWx1ZXM6ZX0sITApfXNoaWZ0VG8oLi4uZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztpZihlLmxlbmd0aD09PTApcmV0dXJuIHRoaXM7ZT1lLm1hcChvPT5uLm5vcm1hbGl6ZVVuaXQobykpO2xldCB0PXt9LHI9e30scz10aGlzLnRvT2JqZWN0KCksaTtmb3IobGV0IG8gb2YgS3QpaWYoZS5pbmRleE9mKG8pPj0wKXtpPW87bGV0IGE9MDtmb3IobGV0IGwgaW4gcilhKz10aGlzLm1hdHJpeFtsXVtvXSpyW2xdLHJbbF09MDt0dChzW29dKSYmKGErPXNbb10pO2xldCB1PU1hdGgudHJ1bmMoYSk7dFtvXT11LHJbb109KGEqMWUzLXUqMWUzKS8xZTM7Zm9yKGxldCBsIGluIHMpS3QuaW5kZXhPZihsKT5LdC5pbmRleE9mKG8pJiZkYSh0aGlzLm1hdHJpeCxzLGwsdCxvKX1lbHNlIHR0KHNbb10pJiYocltvXT1zW29dKTtmb3IobGV0IG8gaW4gcilyW29dIT09MCYmKHRbaV0rPW89PT1pP3Jbb106cltvXS90aGlzLm1hdHJpeFtpXVtvXSk7cmV0dXJuIFV0KHRoaXMse3ZhbHVlczp0fSwhMCkubm9ybWFsaXplKCl9bmVnYXRlKCl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gdGhpcztsZXQgZT17fTtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXModGhpcy52YWx1ZXMpKWVbdF09dGhpcy52YWx1ZXNbdF09PT0wPzA6LXRoaXMudmFsdWVzW3RdO3JldHVybiBVdCh0aGlzLHt2YWx1ZXM6ZX0sITApfWdldCB5ZWFycygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMueWVhcnN8fDA6TmFOfWdldCBxdWFydGVycygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMucXVhcnRlcnN8fDA6TmFOfWdldCBtb250aHMoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudmFsdWVzLm1vbnRoc3x8MDpOYU59Z2V0IHdlZWtzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy53ZWVrc3x8MDpOYU59Z2V0IGRheXMoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudmFsdWVzLmRheXN8fDA6TmFOfWdldCBob3Vycygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMuaG91cnN8fDA6TmFOfWdldCBtaW51dGVzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnZhbHVlcy5taW51dGVzfHwwOk5hTn1nZXQgc2Vjb25kcygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMuc2Vjb25kc3x8MDpOYU59Z2V0IG1pbGxpc2Vjb25kcygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy52YWx1ZXMubWlsbGlzZWNvbmRzfHwwOk5hTn1nZXQgaXNWYWxpZCgpe3JldHVybiB0aGlzLmludmFsaWQ9PT1udWxsfWdldCBpbnZhbGlkUmVhc29uKCl7cmV0dXJuIHRoaXMuaW52YWxpZD90aGlzLmludmFsaWQucmVhc29uOm51bGx9Z2V0IGludmFsaWRFeHBsYW5hdGlvbigpe3JldHVybiB0aGlzLmludmFsaWQ/dGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uOm51bGx9ZXF1YWxzKGUpe2lmKCF0aGlzLmlzVmFsaWR8fCFlLmlzVmFsaWR8fCF0aGlzLmxvYy5lcXVhbHMoZS5sb2MpKXJldHVybiExO2Z1bmN0aW9uIHQocixzKXtyZXR1cm4gcj09PXZvaWQgMHx8cj09PTA/cz09PXZvaWQgMHx8cz09PTA6cj09PXN9Zm9yKGxldCByIG9mIEt0KWlmKCF0KHRoaXMudmFsdWVzW3JdLGUudmFsdWVzW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH19O3ZhciBmcj1cXFwiSW52YWxpZCBJbnRlcnZhbFxcXCI7ZnVuY3Rpb24gVGMobixlKXtyZXR1cm4hbnx8IW4uaXNWYWxpZD95dC5pbnZhbGlkKFxcXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhcnRcXFwiKTohZXx8IWUuaXNWYWxpZD95dC5pbnZhbGlkKFxcXCJtaXNzaW5nIG9yIGludmFsaWQgZW5kXFxcIik6ZTxuP3l0LmludmFsaWQoXFxcImVuZCBiZWZvcmUgc3RhcnRcXFwiLGBUaGUgZW5kIG9mIGFuIGludGVydmFsIG11c3QgYmUgYWZ0ZXIgaXRzIHN0YXJ0LCBidXQgeW91IGhhZCBzdGFydD0ke24udG9JU08oKX0gYW5kIGVuZD0ke2UudG9JU08oKX1gKTpudWxsfXZhciB5dD1jbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucz1lLnN0YXJ0LHRoaXMuZT1lLmVuZCx0aGlzLmludmFsaWQ9ZS5pbnZhbGlkfHxudWxsLHRoaXMuaXNMdXhvbkludGVydmFsPSEwfXN0YXRpYyBpbnZhbGlkKGUsdD1udWxsKXtpZighZSl0aHJvdyBuZXcgZmUoXFxcIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgSW50ZXJ2YWwgaXMgaW52YWxpZFxcXCIpO2xldCByPWUgaW5zdGFuY2VvZiBkZT9lOm5ldyBkZShlLHQpO2lmKFgudGhyb3dPbkludmFsaWQpdGhyb3cgbmV3IEtyKHIpO3JldHVybiBuZXcgbih7aW52YWxpZDpyfSl9c3RhdGljIGZyb21EYXRlVGltZXMoZSx0KXtsZXQgcj1ibihlKSxzPWJuKHQpLGk9VGMocixzKTtyZXR1cm4gaT09bnVsbD9uZXcgbih7c3RhcnQ6cixlbmQ6c30pOml9c3RhdGljIGFmdGVyKGUsdCl7bGV0IHI9Qi5mcm9tRHVyYXRpb25MaWtlKHQpLHM9Ym4oZSk7cmV0dXJuIG4uZnJvbURhdGVUaW1lcyhzLHMucGx1cyhyKSl9c3RhdGljIGJlZm9yZShlLHQpe2xldCByPUIuZnJvbUR1cmF0aW9uTGlrZSh0KSxzPWJuKGUpO3JldHVybiBuLmZyb21EYXRlVGltZXMocy5taW51cyhyKSxzKX1zdGF0aWMgZnJvbUlTTyhlLHQpe2xldFtyLHNdPShlfHxcXFwiXFxcIikuc3BsaXQoXFxcIi9cXFwiLDIpO2lmKHImJnMpe2xldCBpLG87dHJ5e2k9cS5mcm9tSVNPKHIsdCksbz1pLmlzVmFsaWR9Y2F0Y2gobCl7bz0hMX1sZXQgYSx1O3RyeXthPXEuZnJvbUlTTyhzLHQpLHU9YS5pc1ZhbGlkfWNhdGNoKGwpe3U9ITF9aWYobyYmdSlyZXR1cm4gbi5mcm9tRGF0ZVRpbWVzKGksYSk7aWYobyl7bGV0IGw9Qi5mcm9tSVNPKHMsdCk7aWYobC5pc1ZhbGlkKXJldHVybiBuLmFmdGVyKGksbCl9ZWxzZSBpZih1KXtsZXQgbD1CLmZyb21JU08ocix0KTtpZihsLmlzVmFsaWQpcmV0dXJuIG4uYmVmb3JlKGEsbCl9fXJldHVybiBuLmludmFsaWQoXFxcInVucGFyc2FibGVcXFwiLGB0aGUgaW5wdXQgXFxcIiR7ZX1cXFwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApfXN0YXRpYyBpc0ludGVydmFsKGUpe3JldHVybiBlJiZlLmlzTHV4b25JbnRlcnZhbHx8ITF9Z2V0IHN0YXJ0KCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnM6bnVsbH1nZXQgZW5kKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmU6bnVsbH1nZXQgaXNWYWxpZCgpe3JldHVybiB0aGlzLmludmFsaWRSZWFzb249PT1udWxsfWdldCBpbnZhbGlkUmVhc29uKCl7cmV0dXJuIHRoaXMuaW52YWxpZD90aGlzLmludmFsaWQucmVhc29uOm51bGx9Z2V0IGludmFsaWRFeHBsYW5hdGlvbigpe3JldHVybiB0aGlzLmludmFsaWQ/dGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uOm51bGx9bGVuZ3RoKGU9XFxcIm1pbGxpc2Vjb25kc1xcXCIpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy50b0R1cmF0aW9uKGUpLmdldChlKTpOYU59Y291bnQoZT1cXFwibWlsbGlzZWNvbmRzXFxcIil7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gTmFOO2xldCB0PXRoaXMuc3RhcnQuc3RhcnRPZihlKSxyPXRoaXMuZW5kLnN0YXJ0T2YoZSk7cmV0dXJuIE1hdGguZmxvb3Ioci5kaWZmKHQsZSkuZ2V0KGUpKSsxfWhhc1NhbWUoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmlzRW1wdHkoKXx8dGhpcy5lLm1pbnVzKDEpLmhhc1NhbWUodGhpcy5zLGUpOiExfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zLnZhbHVlT2YoKT09PXRoaXMuZS52YWx1ZU9mKCl9aXNBZnRlcihlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMucz5lOiExfWlzQmVmb3JlKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5lPD1lOiExfWNvbnRhaW5zKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5zPD1lJiZ0aGlzLmU+ZTohMX1zZXQoe3N0YXJ0OmUsZW5kOnR9PXt9KXtyZXR1cm4gdGhpcy5pc1ZhbGlkP24uZnJvbURhdGVUaW1lcyhlfHx0aGlzLnMsdHx8dGhpcy5lKTp0aGlzfXNwbGl0QXQoLi4uZSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm5bXTtsZXQgdD1lLm1hcChibikuZmlsdGVyKG89PnRoaXMuY29udGFpbnMobykpLnNvcnQoKSxyPVtdLHtzfT10aGlzLGk9MDtmb3IoO3M8dGhpcy5lOyl7bGV0IG89dFtpXXx8dGhpcy5lLGE9K28+K3RoaXMuZT90aGlzLmU6bztyLnB1c2gobi5mcm9tRGF0ZVRpbWVzKHMsYSkpLHM9YSxpKz0xfXJldHVybiByfXNwbGl0QnkoZSl7bGV0IHQ9Qi5mcm9tRHVyYXRpb25MaWtlKGUpO2lmKCF0aGlzLmlzVmFsaWR8fCF0LmlzVmFsaWR8fHQuYXMoXFxcIm1pbGxpc2Vjb25kc1xcXCIpPT09MClyZXR1cm5bXTtsZXR7czpyfT10aGlzLHM9MSxpLG89W107Zm9yKDtyPHRoaXMuZTspe2xldCBhPXRoaXMuc3RhcnQucGx1cyh0Lm1hcFVuaXRzKHU9PnUqcykpO2k9K2E+K3RoaXMuZT90aGlzLmU6YSxvLnB1c2gobi5mcm9tRGF0ZVRpbWVzKHIsaSkpLHI9aSxzKz0xfXJldHVybiBvfWRpdmlkZUVxdWFsbHkoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnNwbGl0QnkodGhpcy5sZW5ndGgoKS9lKS5zbGljZSgwLGUpOltdfW92ZXJsYXBzKGUpe3JldHVybiB0aGlzLmU+ZS5zJiZ0aGlzLnM8ZS5lfWFidXRzU3RhcnQoZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD8rdGhpcy5lPT0rZS5zOiExfWFidXRzRW5kKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/K2UuZT09K3RoaXMuczohMX1lbmd1bGZzKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5zPD1lLnMmJnRoaXMuZT49ZS5lOiExfWVxdWFscyhlKXtyZXR1cm4hdGhpcy5pc1ZhbGlkfHwhZS5pc1ZhbGlkPyExOnRoaXMucy5lcXVhbHMoZS5zKSYmdGhpcy5lLmVxdWFscyhlLmUpfWludGVyc2VjdGlvbihlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PXRoaXMucz5lLnM/dGhpcy5zOmUucyxyPXRoaXMuZTxlLmU/dGhpcy5lOmUuZTtyZXR1cm4gdD49cj9udWxsOm4uZnJvbURhdGVUaW1lcyh0LHIpfXVuaW9uKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9dGhpcy5zPGUucz90aGlzLnM6ZS5zLHI9dGhpcy5lPmUuZT90aGlzLmU6ZS5lO3JldHVybiBuLmZyb21EYXRlVGltZXModCxyKX1zdGF0aWMgbWVyZ2UoZSl7bGV0W3Qscl09ZS5zb3J0KChzLGkpPT5zLnMtaS5zKS5yZWR1Y2UoKFtzLGldLG8pPT5pP2kub3ZlcmxhcHMobyl8fGkuYWJ1dHNTdGFydChvKT9bcyxpLnVuaW9uKG8pXTpbcy5jb25jYXQoW2ldKSxvXTpbcyxvXSxbW10sbnVsbF0pO3JldHVybiByJiZ0LnB1c2gociksdH1zdGF0aWMgeG9yKGUpe2xldCB0PW51bGwscj0wLHM9W10saT1lLm1hcCh1PT5be3RpbWU6dS5zLHR5cGU6XFxcInNcXFwifSx7dGltZTp1LmUsdHlwZTpcXFwiZVxcXCJ9XSksbz1BcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmkpLGE9by5zb3J0KCh1LGwpPT51LnRpbWUtbC50aW1lKTtmb3IobGV0IHUgb2YgYSlyKz11LnR5cGU9PT1cXFwic1xcXCI/MTotMSxyPT09MT90PXUudGltZToodCYmK3QhPSt1LnRpbWUmJnMucHVzaChuLmZyb21EYXRlVGltZXModCx1LnRpbWUpKSx0PW51bGwpO3JldHVybiBuLm1lcmdlKHMpfWRpZmZlcmVuY2UoLi4uZSl7cmV0dXJuIG4ueG9yKFt0aGlzXS5jb25jYXQoZSkpLm1hcCh0PT50aGlzLmludGVyc2VjdGlvbih0KSkuZmlsdGVyKHQ9PnQmJiF0LmlzRW1wdHkoKSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2BbJHt0aGlzLnMudG9JU08oKX0gXFxcXHUyMDEzICR7dGhpcy5lLnRvSVNPKCl9KWA6ZnJ9dG9JU08oZSl7cmV0dXJuIHRoaXMuaXNWYWxpZD9gJHt0aGlzLnMudG9JU08oZSl9LyR7dGhpcy5lLnRvSVNPKGUpfWA6ZnJ9dG9JU09EYXRlKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9gJHt0aGlzLnMudG9JU09EYXRlKCl9LyR7dGhpcy5lLnRvSVNPRGF0ZSgpfWA6ZnJ9dG9JU09UaW1lKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/YCR7dGhpcy5zLnRvSVNPVGltZShlKX0vJHt0aGlzLmUudG9JU09UaW1lKGUpfWA6ZnJ9dG9Gb3JtYXQoZSx7c2VwYXJhdG9yOnQ9XFxcIiBcXFxcdTIwMTMgXFxcIn09e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/YCR7dGhpcy5zLnRvRm9ybWF0KGUpfSR7dH0ke3RoaXMuZS50b0Zvcm1hdChlKX1gOmZyfXRvRHVyYXRpb24oZSx0KXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuZS5kaWZmKHRoaXMucyxlLHQpOkIuaW52YWxpZCh0aGlzLmludmFsaWRSZWFzb24pfW1hcEVuZHBvaW50cyhlKXtyZXR1cm4gbi5mcm9tRGF0ZVRpbWVzKGUodGhpcy5zKSxlKHRoaXMuZSkpfX07dmFyIGd0PWNsYXNze3N0YXRpYyBoYXNEU1QoZT1YLmRlZmF1bHRab25lKXtsZXQgdD1xLm5vdygpLnNldFpvbmUoZSkuc2V0KHttb250aDoxMn0pO3JldHVybiFlLmlzVW5pdmVyc2FsJiZ0Lm9mZnNldCE9PXQuc2V0KHttb250aDo2fSkub2Zmc2V0fXN0YXRpYyBpc1ZhbGlkSUFOQVpvbmUoZSl7cmV0dXJuIGdlLmlzVmFsaWRab25lKGUpfXN0YXRpYyBub3JtYWxpemVab25lKGUpe3JldHVybiBWZShlLFguZGVmYXVsdFpvbmUpfXN0YXRpYyBtb250aHMoZT1cXFwibG9uZ1xcXCIse2xvY2FsZTp0PW51bGwsbnVtYmVyaW5nU3lzdGVtOnI9bnVsbCxsb2NPYmo6cz1udWxsLG91dHB1dENhbGVuZGFyOmk9XFxcImdyZWdvcnlcXFwifT17fSl7cmV0dXJuKHN8fG5lLmNyZWF0ZSh0LHIsaSkpLm1vbnRocyhlKX1zdGF0aWMgbW9udGhzRm9ybWF0KGU9XFxcImxvbmdcXFwiLHtsb2NhbGU6dD1udWxsLG51bWJlcmluZ1N5c3RlbTpyPW51bGwsbG9jT2JqOnM9bnVsbCxvdXRwdXRDYWxlbmRhcjppPVxcXCJncmVnb3J5XFxcIn09e30pe3JldHVybihzfHxuZS5jcmVhdGUodCxyLGkpKS5tb250aHMoZSwhMCl9c3RhdGljIHdlZWtkYXlzKGU9XFxcImxvbmdcXFwiLHtsb2NhbGU6dD1udWxsLG51bWJlcmluZ1N5c3RlbTpyPW51bGwsbG9jT2JqOnM9bnVsbH09e30pe3JldHVybihzfHxuZS5jcmVhdGUodCxyLG51bGwpKS53ZWVrZGF5cyhlKX1zdGF0aWMgd2Vla2RheXNGb3JtYXQoZT1cXFwibG9uZ1xcXCIse2xvY2FsZTp0PW51bGwsbnVtYmVyaW5nU3lzdGVtOnI9bnVsbCxsb2NPYmo6cz1udWxsfT17fSl7cmV0dXJuKHN8fG5lLmNyZWF0ZSh0LHIsbnVsbCkpLndlZWtkYXlzKGUsITApfXN0YXRpYyBtZXJpZGllbXMoe2xvY2FsZTplPW51bGx9PXt9KXtyZXR1cm4gbmUuY3JlYXRlKGUpLm1lcmlkaWVtcygpfXN0YXRpYyBlcmFzKGU9XFxcInNob3J0XFxcIix7bG9jYWxlOnQ9bnVsbH09e30pe3JldHVybiBuZS5jcmVhdGUodCxudWxsLFxcXCJncmVnb3J5XFxcIikuZXJhcyhlKX1zdGF0aWMgZmVhdHVyZXMoKXtyZXR1cm57cmVsYXRpdmU6SHIoKX19fTtmdW5jdGlvbiBoYShuLGUpe2xldCB0PXM9PnMudG9VVEMoMCx7a2VlcExvY2FsVGltZTohMH0pLnN0YXJ0T2YoXFxcImRheVxcXCIpLnZhbHVlT2YoKSxyPXQoZSktdChuKTtyZXR1cm4gTWF0aC5mbG9vcihCLmZyb21NaWxsaXMocikuYXMoXFxcImRheXNcXFwiKSl9ZnVuY3Rpb24gU2MobixlLHQpe2xldCByPVtbXFxcInllYXJzXFxcIiwoYSx1KT0+dS55ZWFyLWEueWVhcl0sW1xcXCJxdWFydGVyc1xcXCIsKGEsdSk9PnUucXVhcnRlci1hLnF1YXJ0ZXJdLFtcXFwibW9udGhzXFxcIiwoYSx1KT0+dS5tb250aC1hLm1vbnRoKyh1LnllYXItYS55ZWFyKSoxMl0sW1xcXCJ3ZWVrc1xcXCIsKGEsdSk9PntsZXQgbD1oYShhLHUpO3JldHVybihsLWwlNykvN31dLFtcXFwiZGF5c1xcXCIsaGFdXSxzPXt9LGksbztmb3IobGV0W2EsdV1vZiByKWlmKHQuaW5kZXhPZihhKT49MCl7aT1hO2xldCBsPXUobixlKTtvPW4ucGx1cyh7W2FdOmx9KSxvPmU/KG49bi5wbHVzKHtbYV06bC0xfSksbC09MSk6bj1vLHNbYV09bH1yZXR1cm5bbixzLG8saV19ZnVuY3Rpb24gbWEobixlLHQscil7bGV0W3MsaSxvLGFdPVNjKG4sZSx0KSx1PWUtcyxsPXQuZmlsdGVyKGQ9PltcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCIsXFxcIm1pbGxpc2Vjb25kc1xcXCJdLmluZGV4T2YoZCk+PTApO2wubGVuZ3RoPT09MCYmKG88ZSYmKG89cy5wbHVzKHtbYV06MX0pKSxvIT09cyYmKGlbYV09KGlbYV18fDApK3UvKG8tcykpKTtsZXQgZj1CLmZyb21PYmplY3QoaSxyKTtyZXR1cm4gbC5sZW5ndGg+MD9CLmZyb21NaWxsaXModSxyKS5zaGlmdFRvKC4uLmwpLnBsdXMoZik6Zn12YXIgd2k9e2FyYWI6XFxcIltcXFxcdTA2NjAtXFxcXHUwNjY5XVxcXCIsYXJhYmV4dDpcXFwiW1xcXFx1MDZGMC1cXFxcdTA2RjldXFxcIixiYWxpOlxcXCJbXFxcXHUxQjUwLVxcXFx1MUI1OV1cXFwiLGJlbmc6XFxcIltcXFxcdTA5RTYtXFxcXHUwOUVGXVxcXCIsZGV2YTpcXFwiW1xcXFx1MDk2Ni1cXFxcdTA5NkZdXFxcIixmdWxsd2lkZTpcXFwiW1xcXFx1RkYxMC1cXFxcdUZGMTldXFxcIixndWpyOlxcXCJbXFxcXHUwQUU2LVxcXFx1MEFFRl1cXFwiLGhhbmlkZWM6XFxcIltcXFxcdTMwMDd8XFxcXHU0RTAwfFxcXFx1NEU4Q3xcXFxcdTRFMDl8XFxcXHU1NkRCfFxcXFx1NEU5NHxcXFxcdTUxNkR8XFxcXHU0RTAzfFxcXFx1NTE2QnxcXFxcdTRFNURdXFxcIixraG1yOlxcXCJbXFxcXHUxN0UwLVxcXFx1MTdFOV1cXFwiLGtuZGE6XFxcIltcXFxcdTBDRTYtXFxcXHUwQ0VGXVxcXCIsbGFvbzpcXFwiW1xcXFx1MEVEMC1cXFxcdTBFRDldXFxcIixsaW1iOlxcXCJbXFxcXHUxOTQ2LVxcXFx1MTk0Rl1cXFwiLG1seW06XFxcIltcXFxcdTBENjYtXFxcXHUwRDZGXVxcXCIsbW9uZzpcXFwiW1xcXFx1MTgxMC1cXFxcdTE4MTldXFxcIixteW1yOlxcXCJbXFxcXHUxMDQwLVxcXFx1MTA0OV1cXFwiLG9yeWE6XFxcIltcXFxcdTBCNjYtXFxcXHUwQjZGXVxcXCIsdGFtbGRlYzpcXFwiW1xcXFx1MEJFNi1cXFxcdTBCRUZdXFxcIix0ZWx1OlxcXCJbXFxcXHUwQzY2LVxcXFx1MEM2Rl1cXFwiLHRoYWk6XFxcIltcXFxcdTBFNTAtXFxcXHUwRTU5XVxcXCIsdGlidDpcXFwiW1xcXFx1MEYyMC1cXFxcdTBGMjldXFxcIixsYXRuOlxcXCJcXFxcXFxcXGRcXFwifSxwYT17YXJhYjpbMTYzMiwxNjQxXSxhcmFiZXh0OlsxNzc2LDE3ODVdLGJhbGk6WzY5OTIsNzAwMV0sYmVuZzpbMjUzNCwyNTQzXSxkZXZhOlsyNDA2LDI0MTVdLGZ1bGx3aWRlOls2NTI5Niw2NTMwM10sZ3VqcjpbMjc5MCwyNzk5XSxraG1yOls2MTEyLDYxMjFdLGtuZGE6WzMzMDIsMzMxMV0sbGFvbzpbMzc5MiwzODAxXSxsaW1iOls2NDcwLDY0NzldLG1seW06WzM0MzAsMzQzOV0sbW9uZzpbNjE2MCw2MTY5XSxteW1yOls0MTYwLDQxNjldLG9yeWE6WzI5MTgsMjkyN10sdGFtbGRlYzpbMzA0NiwzMDU1XSx0ZWx1OlszMTc0LDMxODNdLHRoYWk6WzM2NjQsMzY3M10sdGlidDpbMzg3MiwzODgxXX0sa2M9d2kuaGFuaWRlYy5yZXBsYWNlKC9bXFxcXFt8XFxcXF1dL2csXFxcIlxcXCIpLnNwbGl0KFxcXCJcXFwiKTtmdW5jdGlvbiBEYShuKXtsZXQgZT1wYXJzZUludChuLDEwKTtpZihpc05hTihlKSl7ZT1cXFwiXFxcIjtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyl7bGV0IHI9bi5jaGFyQ29kZUF0KHQpO2lmKG5bdF0uc2VhcmNoKHdpLmhhbmlkZWMpIT09LTEpZSs9a2MuaW5kZXhPZihuW3RdKTtlbHNlIGZvcihsZXQgcyBpbiBwYSl7bGV0W2ksb109cGFbc107cj49aSYmcjw9byYmKGUrPXItaSl9fXJldHVybiBwYXJzZUludChlLDEwKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIF9lKHtudW1iZXJpbmdTeXN0ZW06bn0sZT1cXFwiXFxcIil7cmV0dXJuIG5ldyBSZWdFeHAoYCR7d2lbbnx8XFxcImxhdG5cXFwiXX0ke2V9YCl9dmFyIENjPVxcXCJtaXNzaW5nIEludGwuRGF0ZVRpbWVGb3JtYXQuZm9ybWF0VG9QYXJ0cyBzdXBwb3J0XFxcIjtmdW5jdGlvbiBHKG4sZT10PT50KXtyZXR1cm57cmVnZXg6bixkZXNlcjooW3RdKT0+ZShEYSh0KSl9fXZhciB2Yz1cXFwiXFxcXHhBMFxcXCIsYmE9YFsgJHt2Y31dYCxGYT1uZXcgUmVnRXhwKGJhLFxcXCJnXFxcIik7ZnVuY3Rpb24geGMobil7cmV0dXJuIG4ucmVwbGFjZSgvXFxcXC4vZyxcXFwiXFxcXFxcXFwuP1xcXCIpLnJlcGxhY2UoRmEsYmEpfWZ1bmN0aW9uIHlhKG4pe3JldHVybiBuLnJlcGxhY2UoL1xcXFwuL2csXFxcIlxcXCIpLnJlcGxhY2UoRmEsXFxcIiBcXFwiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFVlKG4sZSl7cmV0dXJuIG49PT1udWxsP251bGw6e3JlZ2V4OlJlZ0V4cChuLm1hcCh4Yykuam9pbihcXFwifFxcXCIpKSxkZXNlcjooW3RdKT0+bi5maW5kSW5kZXgocj0+eWEodCk9PT15YShyKSkrZX19ZnVuY3Rpb24gZ2EobixlKXtyZXR1cm57cmVnZXg6bixkZXNlcjooWyx0LHJdKT0+VnQodCxyKSxncm91cHM6ZX19ZnVuY3Rpb24gVGkobil7cmV0dXJue3JlZ2V4Om4sZGVzZXI6KFtlXSk9PmV9fWZ1bmN0aW9uIE9jKG4pe3JldHVybiBuLnJlcGxhY2UoL1tcXFxcLVxcXFxbXFxcXF17fSgpKis/LixcXFxcXFxcXFxcXFxeJHwjXFxcXHNdL2csXFxcIlxcXFxcXFxcJCZcXFwiKX1mdW5jdGlvbiBJYyhuLGUpe2xldCB0PV9lKGUpLHI9X2UoZSxcXFwiezJ9XFxcIikscz1fZShlLFxcXCJ7M31cXFwiKSxpPV9lKGUsXFxcIns0fVxcXCIpLG89X2UoZSxcXFwiezZ9XFxcIiksYT1fZShlLFxcXCJ7MSwyfVxcXCIpLHU9X2UoZSxcXFwiezEsM31cXFwiKSxsPV9lKGUsXFxcInsxLDZ9XFxcIiksZj1fZShlLFxcXCJ7MSw5fVxcXCIpLGQ9X2UoZSxcXFwiezIsNH1cXFwiKSxtPV9lKGUsXFxcIns0LDZ9XFxcIiksaD1EPT4oe3JlZ2V4OlJlZ0V4cChPYyhELnZhbCkpLGRlc2VyOihbVF0pPT5ULGxpdGVyYWw6ITB9KSxnPShEPT57aWYobi5saXRlcmFsKXJldHVybiBoKEQpO3N3aXRjaChELnZhbCl7Y2FzZVxcXCJHXFxcIjpyZXR1cm4gVWUoZS5lcmFzKFxcXCJzaG9ydFxcXCIsITEpLDApO2Nhc2VcXFwiR0dcXFwiOnJldHVybiBVZShlLmVyYXMoXFxcImxvbmdcXFwiLCExKSwwKTtjYXNlXFxcInlcXFwiOnJldHVybiBHKGwpO2Nhc2VcXFwieXlcXFwiOnJldHVybiBHKGQsb3IpO2Nhc2VcXFwieXl5eVxcXCI6cmV0dXJuIEcoaSk7Y2FzZVxcXCJ5eXl5eVxcXCI6cmV0dXJuIEcobSk7Y2FzZVxcXCJ5eXl5eXlcXFwiOnJldHVybiBHKG8pO2Nhc2VcXFwiTVxcXCI6cmV0dXJuIEcoYSk7Y2FzZVxcXCJNTVxcXCI6cmV0dXJuIEcocik7Y2FzZVxcXCJNTU1cXFwiOnJldHVybiBVZShlLm1vbnRocyhcXFwic2hvcnRcXFwiLCEwLCExKSwxKTtjYXNlXFxcIk1NTU1cXFwiOnJldHVybiBVZShlLm1vbnRocyhcXFwibG9uZ1xcXCIsITAsITEpLDEpO2Nhc2VcXFwiTFxcXCI6cmV0dXJuIEcoYSk7Y2FzZVxcXCJMTFxcXCI6cmV0dXJuIEcocik7Y2FzZVxcXCJMTExcXFwiOnJldHVybiBVZShlLm1vbnRocyhcXFwic2hvcnRcXFwiLCExLCExKSwxKTtjYXNlXFxcIkxMTExcXFwiOnJldHVybiBVZShlLm1vbnRocyhcXFwibG9uZ1xcXCIsITEsITEpLDEpO2Nhc2VcXFwiZFxcXCI6cmV0dXJuIEcoYSk7Y2FzZVxcXCJkZFxcXCI6cmV0dXJuIEcocik7Y2FzZVxcXCJvXFxcIjpyZXR1cm4gRyh1KTtjYXNlXFxcIm9vb1xcXCI6cmV0dXJuIEcocyk7Y2FzZVxcXCJISFxcXCI6cmV0dXJuIEcocik7Y2FzZVxcXCJIXFxcIjpyZXR1cm4gRyhhKTtjYXNlXFxcImhoXFxcIjpyZXR1cm4gRyhyKTtjYXNlXFxcImhcXFwiOnJldHVybiBHKGEpO2Nhc2VcXFwibW1cXFwiOnJldHVybiBHKHIpO2Nhc2VcXFwibVxcXCI6cmV0dXJuIEcoYSk7Y2FzZVxcXCJxXFxcIjpyZXR1cm4gRyhhKTtjYXNlXFxcInFxXFxcIjpyZXR1cm4gRyhyKTtjYXNlXFxcInNcXFwiOnJldHVybiBHKGEpO2Nhc2VcXFwic3NcXFwiOnJldHVybiBHKHIpO2Nhc2VcXFwiU1xcXCI6cmV0dXJuIEcodSk7Y2FzZVxcXCJTU1NcXFwiOnJldHVybiBHKHMpO2Nhc2VcXFwidVxcXCI6cmV0dXJuIFRpKGYpO2Nhc2VcXFwidXVcXFwiOnJldHVybiBUaShhKTtjYXNlXFxcInV1dVxcXCI6cmV0dXJuIEcodCk7Y2FzZVxcXCJhXFxcIjpyZXR1cm4gVWUoZS5tZXJpZGllbXMoKSwwKTtjYXNlXFxcImtra2tcXFwiOnJldHVybiBHKGkpO2Nhc2VcXFwia2tcXFwiOnJldHVybiBHKGQsb3IpO2Nhc2VcXFwiV1xcXCI6cmV0dXJuIEcoYSk7Y2FzZVxcXCJXV1xcXCI6cmV0dXJuIEcocik7Y2FzZVxcXCJFXFxcIjpjYXNlXFxcImNcXFwiOnJldHVybiBHKHQpO2Nhc2VcXFwiRUVFXFxcIjpyZXR1cm4gVWUoZS53ZWVrZGF5cyhcXFwic2hvcnRcXFwiLCExLCExKSwxKTtjYXNlXFxcIkVFRUVcXFwiOnJldHVybiBVZShlLndlZWtkYXlzKFxcXCJsb25nXFxcIiwhMSwhMSksMSk7Y2FzZVxcXCJjY2NcXFwiOnJldHVybiBVZShlLndlZWtkYXlzKFxcXCJzaG9ydFxcXCIsITAsITEpLDEpO2Nhc2VcXFwiY2NjY1xcXCI6cmV0dXJuIFVlKGUud2Vla2RheXMoXFxcImxvbmdcXFwiLCEwLCExKSwxKTtjYXNlXFxcIlpcXFwiOmNhc2VcXFwiWlpcXFwiOnJldHVybiBnYShuZXcgUmVnRXhwKGAoWystXSR7YS5zb3VyY2V9KSg/OjooJHtyLnNvdXJjZX0pKT9gKSwyKTtjYXNlXFxcIlpaWlxcXCI6cmV0dXJuIGdhKG5ldyBSZWdFeHAoYChbKy1dJHthLnNvdXJjZX0pKCR7ci5zb3VyY2V9KT9gKSwyKTtjYXNlXFxcInpcXFwiOnJldHVybiBUaSgvW2Etel8rLS9dezEsMjU2fT8vaSk7ZGVmYXVsdDpyZXR1cm4gaChEKX19KShuKXx8e2ludmFsaWRSZWFzb246Q2N9O3JldHVybiBnLnRva2VuPW4sZ312YXIgTGM9e3llYXI6e1xcXCIyLWRpZ2l0XFxcIjpcXFwieXlcXFwiLG51bWVyaWM6XFxcInl5eXl5XFxcIn0sbW9udGg6e251bWVyaWM6XFxcIk1cXFwiLFxcXCIyLWRpZ2l0XFxcIjpcXFwiTU1cXFwiLHNob3J0OlxcXCJNTU1cXFwiLGxvbmc6XFxcIk1NTU1cXFwifSxkYXk6e251bWVyaWM6XFxcImRcXFwiLFxcXCIyLWRpZ2l0XFxcIjpcXFwiZGRcXFwifSx3ZWVrZGF5OntzaG9ydDpcXFwiRUVFXFxcIixsb25nOlxcXCJFRUVFXFxcIn0sZGF5cGVyaW9kOlxcXCJhXFxcIixkYXlQZXJpb2Q6XFxcImFcXFwiLGhvdXI6e251bWVyaWM6XFxcImhcXFwiLFxcXCIyLWRpZ2l0XFxcIjpcXFwiaGhcXFwifSxtaW51dGU6e251bWVyaWM6XFxcIm1cXFwiLFxcXCIyLWRpZ2l0XFxcIjpcXFwibW1cXFwifSxzZWNvbmQ6e251bWVyaWM6XFxcInNcXFwiLFxcXCIyLWRpZ2l0XFxcIjpcXFwic3NcXFwifX07ZnVuY3Rpb24gTmMobixlLHQpe2xldHt0eXBlOnIsdmFsdWU6c309bjtpZihyPT09XFxcImxpdGVyYWxcXFwiKXJldHVybntsaXRlcmFsOiEwLHZhbDpzfTtsZXQgaT10W3JdLG89TGNbcl07aWYodHlwZW9mIG89PVxcXCJvYmplY3RcXFwiJiYobz1vW2ldKSxvKXJldHVybntsaXRlcmFsOiExLHZhbDpvfX1mdW5jdGlvbiBBYyhuKXtyZXR1cm5bYF4ke24ubWFwKHQ9PnQucmVnZXgpLnJlZHVjZSgodCxyKT0+YCR7dH0oJHtyLnNvdXJjZX0pYCxcXFwiXFxcIil9JGAsbl19ZnVuY3Rpb24gTWMobixlLHQpe2xldCByPW4ubWF0Y2goZSk7aWYocil7bGV0IHM9e30saT0xO2ZvcihsZXQgbyBpbiB0KWlmKGt0KHQsbykpe2xldCBhPXRbb10sdT1hLmdyb3Vwcz9hLmdyb3VwcysxOjE7IWEubGl0ZXJhbCYmYS50b2tlbiYmKHNbYS50b2tlbi52YWxbMF1dPWEuZGVzZXIoci5zbGljZShpLGkrdSkpKSxpKz11fXJldHVybltyLHNdfWVsc2UgcmV0dXJuW3Ise31dfWZ1bmN0aW9uIF9jKG4pe2xldCBlPWk9Pntzd2l0Y2goaSl7Y2FzZVxcXCJTXFxcIjpyZXR1cm5cXFwibWlsbGlzZWNvbmRcXFwiO2Nhc2VcXFwic1xcXCI6cmV0dXJuXFxcInNlY29uZFxcXCI7Y2FzZVxcXCJtXFxcIjpyZXR1cm5cXFwibWludXRlXFxcIjtjYXNlXFxcImhcXFwiOmNhc2VcXFwiSFxcXCI6cmV0dXJuXFxcImhvdXJcXFwiO2Nhc2VcXFwiZFxcXCI6cmV0dXJuXFxcImRheVxcXCI7Y2FzZVxcXCJvXFxcIjpyZXR1cm5cXFwib3JkaW5hbFxcXCI7Y2FzZVxcXCJMXFxcIjpjYXNlXFxcIk1cXFwiOnJldHVyblxcXCJtb250aFxcXCI7Y2FzZVxcXCJ5XFxcIjpyZXR1cm5cXFwieWVhclxcXCI7Y2FzZVxcXCJFXFxcIjpjYXNlXFxcImNcXFwiOnJldHVyblxcXCJ3ZWVrZGF5XFxcIjtjYXNlXFxcIldcXFwiOnJldHVyblxcXCJ3ZWVrTnVtYmVyXFxcIjtjYXNlXFxcImtcXFwiOnJldHVyblxcXCJ3ZWVrWWVhclxcXCI7Y2FzZVxcXCJxXFxcIjpyZXR1cm5cXFwicXVhcnRlclxcXCI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LHQ9bnVsbCxyO3JldHVybiBXKG4ueil8fCh0PWdlLmNyZWF0ZShuLnopKSxXKG4uWil8fCh0fHwodD1uZXcgaGUobi5aKSkscj1uLlopLFcobi5xKXx8KG4uTT0obi5xLTEpKjMrMSksVyhuLmgpfHwobi5oPDEyJiZuLmE9PT0xP24uaCs9MTI6bi5oPT09MTImJm4uYT09PTAmJihuLmg9MCkpLG4uRz09PTAmJm4ueSYmKG4ueT0tbi55KSxXKG4udSl8fChuLlM9c3Iobi51KSksW09iamVjdC5rZXlzKG4pLnJlZHVjZSgoaSxvKT0+e2xldCBhPWUobyk7cmV0dXJuIGEmJihpW2FdPW5bb10pLGl9LHt9KSx0LHJdfXZhciBTaT1udWxsO2Z1bmN0aW9uIEJjKCl7cmV0dXJuIFNpfHwoU2k9cS5mcm9tTWlsbGlzKDE1NTU1NTU1NTU1NTUpKSxTaX1mdW5jdGlvbiBQYyhuLGUpe2lmKG4ubGl0ZXJhbClyZXR1cm4gbjtsZXQgdD13ZS5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKG4udmFsKTtpZighdClyZXR1cm4gbjtsZXQgaT13ZS5jcmVhdGUoZSx0KS5mb3JtYXREYXRlVGltZVBhcnRzKEJjKCkpLm1hcChvPT5OYyhvLGUsdCkpO3JldHVybiBpLmluY2x1ZGVzKHZvaWQgMCk/bjppfWZ1bmN0aW9uICRjKG4sZSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoLi4ubi5tYXAodD0+UGModCxlKSkpfWZ1bmN0aW9uIGtpKG4sZSx0KXtsZXQgcj0kYyh3ZS5wYXJzZUZvcm1hdCh0KSxuKSxzPXIubWFwKG89PkljKG8sbikpLGk9cy5maW5kKG89Pm8uaW52YWxpZFJlYXNvbik7aWYoaSlyZXR1cm57aW5wdXQ6ZSx0b2tlbnM6cixpbnZhbGlkUmVhc29uOmkuaW52YWxpZFJlYXNvbn07e2xldFtvLGFdPUFjKHMpLHU9UmVnRXhwKG8sXFxcImlcXFwiKSxbbCxmXT1NYyhlLHUsYSksW2QsbSxoXT1mP19jKGYpOltudWxsLG51bGwsdm9pZCAwXTtpZihrdChmLFxcXCJhXFxcIikmJmt0KGYsXFxcIkhcXFwiKSl0aHJvdyBuZXcgcHQoXFxcIkNhbid0IGluY2x1ZGUgbWVyaWRpZW0gd2hlbiBzcGVjaWZ5aW5nIDI0LWhvdXIgZm9ybWF0XFxcIik7cmV0dXJue2lucHV0OmUsdG9rZW5zOnIscmVnZXg6dSxyYXdNYXRjaGVzOmwsbWF0Y2hlczpmLHJlc3VsdDpkLHpvbmU6bSxzcGVjaWZpY09mZnNldDpofX19ZnVuY3Rpb24gRWEobixlLHQpe2xldHtyZXN1bHQ6cix6b25lOnMsc3BlY2lmaWNPZmZzZXQ6aSxpbnZhbGlkUmVhc29uOm99PWtpKG4sZSx0KTtyZXR1cm5bcixzLGksb119dmFyIHdhPVswLDMxLDU5LDkwLDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzRdLFRhPVswLDMxLDYwLDkxLDEyMSwxNTIsMTgyLDIxMywyNDQsMjc0LDMwNSwzMzVdO2Z1bmN0aW9uIEJlKG4sZSl7cmV0dXJuIG5ldyBkZShcXFwidW5pdCBvdXQgb2YgcmFuZ2VcXFwiLGB5b3Ugc3BlY2lmaWVkICR7ZX0gKG9mIHR5cGUgJHt0eXBlb2YgZX0pIGFzIGEgJHtufSwgd2hpY2ggaXMgaW52YWxpZGApfWZ1bmN0aW9uIFNhKG4sZSx0KXtsZXQgcj1uZXcgRGF0ZShEYXRlLlVUQyhuLGUtMSx0KSk7bjwxMDAmJm4+PTAmJnIuc2V0VVRDRnVsbFllYXIoci5nZXRVVENGdWxsWWVhcigpLTE5MDApO2xldCBzPXIuZ2V0VVRDRGF5KCk7cmV0dXJuIHM9PT0wPzc6c31mdW5jdGlvbiBrYShuLGUsdCl7cmV0dXJuIHQrKGp0KG4pP1RhOndhKVtlLTFdfWZ1bmN0aW9uIENhKG4sZSl7bGV0IHQ9anQobik/VGE6d2Escj10LmZpbmRJbmRleChpPT5pPGUpLHM9ZS10W3JdO3JldHVybnttb250aDpyKzEsZGF5OnN9fWZ1bmN0aW9uIFpyKG4pe2xldHt5ZWFyOmUsbW9udGg6dCxkYXk6cn09bixzPWthKGUsdCxyKSxpPVNhKGUsdCxyKSxvPU1hdGguZmxvb3IoKHMtaSsxMCkvNyksYTtyZXR1cm4gbzwxPyhhPWUtMSxvPWxuKGEpKTpvPmxuKGUpPyhhPWUrMSxvPTEpOmE9ZSxSKHt3ZWVrWWVhcjphLHdlZWtOdW1iZXI6byx3ZWVrZGF5Oml9LGFyKG4pKX1mdW5jdGlvbiBDaShuKXtsZXR7d2Vla1llYXI6ZSx3ZWVrTnVtYmVyOnQsd2Vla2RheTpyfT1uLHM9U2EoZSwxLDQpLGk9cXQoZSksbz10Kjcrci1zLTMsYTtvPDE/KGE9ZS0xLG8rPXF0KGEpKTpvPmk/KGE9ZSsxLG8tPXF0KGUpKTphPWU7bGV0e21vbnRoOnUsZGF5Omx9PUNhKGEsbyk7cmV0dXJuIFIoe3llYXI6YSxtb250aDp1LGRheTpsfSxhcihuKSl9ZnVuY3Rpb24gUXIobil7bGV0e3llYXI6ZSxtb250aDp0LGRheTpyfT1uLHM9a2EoZSx0LHIpO3JldHVybiBSKHt5ZWFyOmUsb3JkaW5hbDpzfSxhcihuKSl9ZnVuY3Rpb24gdmkobil7bGV0e3llYXI6ZSxvcmRpbmFsOnR9PW4se21vbnRoOnIsZGF5OnN9PUNhKGUsdCk7cmV0dXJuIFIoe3llYXI6ZSxtb250aDpyLGRheTpzfSxhcihuKSl9ZnVuY3Rpb24gdmEobil7bGV0IGU9cnIobi53ZWVrWWVhciksdD1udChuLndlZWtOdW1iZXIsMSxsbihuLndlZWtZZWFyKSkscj1udChuLndlZWtkYXksMSw3KTtyZXR1cm4gZT90P3I/ITE6QmUoXFxcIndlZWtkYXlcXFwiLG4ud2Vla2RheSk6QmUoXFxcIndlZWtcXFwiLG4ud2Vlayk6QmUoXFxcIndlZWtZZWFyXFxcIixuLndlZWtZZWFyKX1mdW5jdGlvbiB4YShuKXtsZXQgZT1ycihuLnllYXIpLHQ9bnQobi5vcmRpbmFsLDEscXQobi55ZWFyKSk7cmV0dXJuIGU/dD8hMTpCZShcXFwib3JkaW5hbFxcXCIsbi5vcmRpbmFsKTpCZShcXFwieWVhclxcXCIsbi55ZWFyKX1mdW5jdGlvbiB4aShuKXtsZXQgZT1ycihuLnllYXIpLHQ9bnQobi5tb250aCwxLDEyKSxyPW50KG4uZGF5LDEsdW4obi55ZWFyLG4ubW9udGgpKTtyZXR1cm4gZT90P3I/ITE6QmUoXFxcImRheVxcXCIsbi5kYXkpOkJlKFxcXCJtb250aFxcXCIsbi5tb250aCk6QmUoXFxcInllYXJcXFwiLG4ueWVhcil9ZnVuY3Rpb24gT2kobil7bGV0e2hvdXI6ZSxtaW51dGU6dCxzZWNvbmQ6cixtaWxsaXNlY29uZDpzfT1uLGk9bnQoZSwwLDIzKXx8ZT09PTI0JiZ0PT09MCYmcj09PTAmJnM9PT0wLG89bnQodCwwLDU5KSxhPW50KHIsMCw1OSksdT1udChzLDAsOTk5KTtyZXR1cm4gaT9vP2E/dT8hMTpCZShcXFwibWlsbGlzZWNvbmRcXFwiLHMpOkJlKFxcXCJzZWNvbmRcXFwiLHIpOkJlKFxcXCJtaW51dGVcXFwiLHQpOkJlKFxcXCJob3VyXFxcIixlKX12YXIgSWk9XFxcIkludmFsaWQgRGF0ZVRpbWVcXFwiLE9hPTg2NGUxMztmdW5jdGlvbiBYcihuKXtyZXR1cm4gbmV3IGRlKFxcXCJ1bnN1cHBvcnRlZCB6b25lXFxcIixgdGhlIHpvbmUgXFxcIiR7bi5uYW1lfVxcXCIgaXMgbm90IHN1cHBvcnRlZGApfWZ1bmN0aW9uIExpKG4pe3JldHVybiBuLndlZWtEYXRhPT09bnVsbCYmKG4ud2Vla0RhdGE9WnIobi5jKSksbi53ZWVrRGF0YX1mdW5jdGlvbiBkcihuLGUpe2xldCB0PXt0czpuLnRzLHpvbmU6bi56b25lLGM6bi5jLG86bi5vLGxvYzpuLmxvYyxpbnZhbGlkOm4uaW52YWxpZH07cmV0dXJuIG5ldyBxKHllKFIoUih7fSx0KSxlKSx7b2xkOnR9KSl9ZnVuY3Rpb24gUGEobixlLHQpe2xldCByPW4tZSo2MCoxZTMscz10Lm9mZnNldChyKTtpZihlPT09cylyZXR1cm5bcixlXTtyLT0ocy1lKSo2MCoxZTM7bGV0IGk9dC5vZmZzZXQocik7cmV0dXJuIHM9PT1pP1tyLHNdOltuLU1hdGgubWluKHMsaSkqNjAqMWUzLE1hdGgubWF4KHMsaSldfWZ1bmN0aW9uIElhKG4sZSl7bis9ZSo2MCoxZTM7bGV0IHQ9bmV3IERhdGUobik7cmV0dXJue3llYXI6dC5nZXRVVENGdWxsWWVhcigpLG1vbnRoOnQuZ2V0VVRDTW9udGgoKSsxLGRheTp0LmdldFVUQ0RhdGUoKSxob3VyOnQuZ2V0VVRDSG91cnMoKSxtaW51dGU6dC5nZXRVVENNaW51dGVzKCksc2Vjb25kOnQuZ2V0VVRDU2Vjb25kcygpLG1pbGxpc2Vjb25kOnQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9fWZ1bmN0aW9uIHRzKG4sZSx0KXtyZXR1cm4gUGEoaXIobiksZSx0KX1mdW5jdGlvbiBMYShuLGUpe2xldCB0PW4ubyxyPW4uYy55ZWFyK01hdGgudHJ1bmMoZS55ZWFycykscz1uLmMubW9udGgrTWF0aC50cnVuYyhlLm1vbnRocykrTWF0aC50cnVuYyhlLnF1YXJ0ZXJzKSozLGk9eWUoUih7fSxuLmMpLHt5ZWFyOnIsbW9udGg6cyxkYXk6TWF0aC5taW4obi5jLmRheSx1bihyLHMpKStNYXRoLnRydW5jKGUuZGF5cykrTWF0aC50cnVuYyhlLndlZWtzKSo3fSksbz1CLmZyb21PYmplY3Qoe3llYXJzOmUueWVhcnMtTWF0aC50cnVuYyhlLnllYXJzKSxxdWFydGVyczplLnF1YXJ0ZXJzLU1hdGgudHJ1bmMoZS5xdWFydGVycyksbW9udGhzOmUubW9udGhzLU1hdGgudHJ1bmMoZS5tb250aHMpLHdlZWtzOmUud2Vla3MtTWF0aC50cnVuYyhlLndlZWtzKSxkYXlzOmUuZGF5cy1NYXRoLnRydW5jKGUuZGF5cyksaG91cnM6ZS5ob3VycyxtaW51dGVzOmUubWludXRlcyxzZWNvbmRzOmUuc2Vjb25kcyxtaWxsaXNlY29uZHM6ZS5taWxsaXNlY29uZHN9KS5hcyhcXFwibWlsbGlzZWNvbmRzXFxcIiksYT1pcihpKSxbdSxsXT1QYShhLHQsbi56b25lKTtyZXR1cm4gbyE9PTAmJih1Kz1vLGw9bi56b25lLm9mZnNldCh1KSkse3RzOnUsbzpsfX1mdW5jdGlvbiBocihuLGUsdCxyLHMsaSl7bGV0e3NldFpvbmU6byx6b25lOmF9PXQ7aWYobiYmT2JqZWN0LmtleXMobikubGVuZ3RoIT09MCl7bGV0IHU9ZXx8YSxsPXEuZnJvbU9iamVjdChuLHllKFIoe30sdCkse3pvbmU6dSxzcGVjaWZpY09mZnNldDppfSkpO3JldHVybiBvP2w6bC5zZXRab25lKGEpfWVsc2UgcmV0dXJuIHEuaW52YWxpZChuZXcgZGUoXFxcInVucGFyc2FibGVcXFwiLGB0aGUgaW5wdXQgXFxcIiR7c31cXFwiIGNhbid0IGJlIHBhcnNlZCBhcyAke3J9YCkpfWZ1bmN0aW9uIGVzKG4sZSx0PSEwKXtyZXR1cm4gbi5pc1ZhbGlkP3dlLmNyZWF0ZShuZS5jcmVhdGUoXFxcImVuLVVTXFxcIikse2FsbG93Wjp0LGZvcmNlU2ltcGxlOiEwfSkuZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKG4sZSk6bnVsbH1mdW5jdGlvbiBOaShuLGUpe2xldCB0PW4uYy55ZWFyPjk5OTl8fG4uYy55ZWFyPDAscj1cXFwiXFxcIjtyZXR1cm4gdCYmbi5jLnllYXI+PTAmJihyKz1cXFwiK1xcXCIpLHIrPXJlKG4uYy55ZWFyLHQ/Njo0KSxlPyhyKz1cXFwiLVxcXCIscis9cmUobi5jLm1vbnRoKSxyKz1cXFwiLVxcXCIscis9cmUobi5jLmRheSkpOihyKz1yZShuLmMubW9udGgpLHIrPXJlKG4uYy5kYXkpKSxyfWZ1bmN0aW9uIE5hKG4sZSx0LHIscyxpKXtsZXQgbz1yZShuLmMuaG91cik7cmV0dXJuIGU/KG8rPVxcXCI6XFxcIixvKz1yZShuLmMubWludXRlKSwobi5jLnNlY29uZCE9PTB8fCF0KSYmKG8rPVxcXCI6XFxcIikpOm8rPXJlKG4uYy5taW51dGUpLChuLmMuc2Vjb25kIT09MHx8IXQpJiYobys9cmUobi5jLnNlY29uZCksKG4uYy5taWxsaXNlY29uZCE9PTB8fCFyKSYmKG8rPVxcXCIuXFxcIixvKz1yZShuLmMubWlsbGlzZWNvbmQsMykpKSxzJiYobi5pc09mZnNldEZpeGVkJiZuLm9mZnNldD09PTAmJiFpP28rPVxcXCJaXFxcIjpuLm88MD8obys9XFxcIi1cXFwiLG8rPXJlKE1hdGgudHJ1bmMoLW4uby82MCkpLG8rPVxcXCI6XFxcIixvKz1yZShNYXRoLnRydW5jKC1uLm8lNjApKSk6KG8rPVxcXCIrXFxcIixvKz1yZShNYXRoLnRydW5jKG4uby82MCkpLG8rPVxcXCI6XFxcIixvKz1yZShNYXRoLnRydW5jKG4ubyU2MCkpKSksaSYmKG8rPVxcXCJbXFxcIituLnpvbmUuaWFuYU5hbWUrXFxcIl1cXFwiKSxvfXZhciAkYT17bW9udGg6MSxkYXk6MSxob3VyOjAsbWludXRlOjAsc2Vjb25kOjAsbWlsbGlzZWNvbmQ6MH0sUmM9e3dlZWtOdW1iZXI6MSx3ZWVrZGF5OjEsaG91cjowLG1pbnV0ZTowLHNlY29uZDowLG1pbGxpc2Vjb25kOjB9LGpjPXtvcmRpbmFsOjEsaG91cjowLG1pbnV0ZTowLHNlY29uZDowLG1pbGxpc2Vjb25kOjB9LFJhPVtcXFwieWVhclxcXCIsXFxcIm1vbnRoXFxcIixcXFwiZGF5XFxcIixcXFwiaG91clxcXCIsXFxcIm1pbnV0ZVxcXCIsXFxcInNlY29uZFxcXCIsXFxcIm1pbGxpc2Vjb25kXFxcIl0scWM9W1xcXCJ3ZWVrWWVhclxcXCIsXFxcIndlZWtOdW1iZXJcXFwiLFxcXCJ3ZWVrZGF5XFxcIixcXFwiaG91clxcXCIsXFxcIm1pbnV0ZVxcXCIsXFxcInNlY29uZFxcXCIsXFxcIm1pbGxpc2Vjb25kXFxcIl0sVmM9W1xcXCJ5ZWFyXFxcIixcXFwib3JkaW5hbFxcXCIsXFxcImhvdXJcXFwiLFxcXCJtaW51dGVcXFwiLFxcXCJzZWNvbmRcXFwiLFxcXCJtaWxsaXNlY29uZFxcXCJdO2Z1bmN0aW9uIEFhKG4pe2xldCBlPXt5ZWFyOlxcXCJ5ZWFyXFxcIix5ZWFyczpcXFwieWVhclxcXCIsbW9udGg6XFxcIm1vbnRoXFxcIixtb250aHM6XFxcIm1vbnRoXFxcIixkYXk6XFxcImRheVxcXCIsZGF5czpcXFwiZGF5XFxcIixob3VyOlxcXCJob3VyXFxcIixob3VyczpcXFwiaG91clxcXCIsbWludXRlOlxcXCJtaW51dGVcXFwiLG1pbnV0ZXM6XFxcIm1pbnV0ZVxcXCIscXVhcnRlcjpcXFwicXVhcnRlclxcXCIscXVhcnRlcnM6XFxcInF1YXJ0ZXJcXFwiLHNlY29uZDpcXFwic2Vjb25kXFxcIixzZWNvbmRzOlxcXCJzZWNvbmRcXFwiLG1pbGxpc2Vjb25kOlxcXCJtaWxsaXNlY29uZFxcXCIsbWlsbGlzZWNvbmRzOlxcXCJtaWxsaXNlY29uZFxcXCIsd2Vla2RheTpcXFwid2Vla2RheVxcXCIsd2Vla2RheXM6XFxcIndlZWtkYXlcXFwiLHdlZWtudW1iZXI6XFxcIndlZWtOdW1iZXJcXFwiLHdlZWtzbnVtYmVyOlxcXCJ3ZWVrTnVtYmVyXFxcIix3ZWVrbnVtYmVyczpcXFwid2Vla051bWJlclxcXCIsd2Vla3llYXI6XFxcIndlZWtZZWFyXFxcIix3ZWVreWVhcnM6XFxcIndlZWtZZWFyXFxcIixvcmRpbmFsOlxcXCJvcmRpbmFsXFxcIn1bbi50b0xvd2VyQ2FzZSgpXTtpZighZSl0aHJvdyBuZXcgc24obik7cmV0dXJuIGV9ZnVuY3Rpb24gTWEobixlKXtsZXQgdD1WZShlLnpvbmUsWC5kZWZhdWx0Wm9uZSkscj1uZS5mcm9tT2JqZWN0KGUpLHM9WC5ub3coKSxpLG87aWYoVyhuLnllYXIpKWk9cztlbHNle2ZvcihsZXQgbCBvZiBSYSlXKG5bbF0pJiYobltsXT0kYVtsXSk7bGV0IGE9eGkobil8fE9pKG4pO2lmKGEpcmV0dXJuIHEuaW52YWxpZChhKTtsZXQgdT10Lm9mZnNldChzKTtbaSxvXT10cyhuLHUsdCl9cmV0dXJuIG5ldyBxKHt0czppLHpvbmU6dCxsb2M6cixvfSl9ZnVuY3Rpb24gX2EobixlLHQpe2xldCByPVcodC5yb3VuZCk/ITA6dC5yb3VuZCxzPShvLGEpPT4obz1hbihvLHJ8fHQuY2FsZW5kYXJ5PzA6MiwhMCksZS5sb2MuY2xvbmUodCkucmVsRm9ybWF0dGVyKHQpLmZvcm1hdChvLGEpKSxpPW89PnQuY2FsZW5kYXJ5P2UuaGFzU2FtZShuLG8pPzA6ZS5zdGFydE9mKG8pLmRpZmYobi5zdGFydE9mKG8pLG8pLmdldChvKTplLmRpZmYobixvKS5nZXQobyk7aWYodC51bml0KXJldHVybiBzKGkodC51bml0KSx0LnVuaXQpO2ZvcihsZXQgbyBvZiB0LnVuaXRzKXtsZXQgYT1pKG8pO2lmKE1hdGguYWJzKGEpPj0xKXJldHVybiBzKGEsbyl9cmV0dXJuIHMobj5lPy0wOjAsdC51bml0c1t0LnVuaXRzLmxlbmd0aC0xXSl9ZnVuY3Rpb24gQmEobil7bGV0IGU9e30sdDtyZXR1cm4gbi5sZW5ndGg+MCYmdHlwZW9mIG5bbi5sZW5ndGgtMV09PVxcXCJvYmplY3RcXFwiPyhlPW5bbi5sZW5ndGgtMV0sdD1BcnJheS5mcm9tKG4pLnNsaWNlKDAsbi5sZW5ndGgtMSkpOnQ9QXJyYXkuZnJvbShuKSxbZSx0XX12YXIgcT1jbGFzcyBue2NvbnN0cnVjdG9yKGUpe2xldCB0PWUuem9uZXx8WC5kZWZhdWx0Wm9uZSxyPWUuaW52YWxpZHx8KE51bWJlci5pc05hTihlLnRzKT9uZXcgZGUoXFxcImludmFsaWQgaW5wdXRcXFwiKTpudWxsKXx8KHQuaXNWYWxpZD9udWxsOlhyKHQpKTt0aGlzLnRzPVcoZS50cyk/WC5ub3coKTplLnRzO2xldCBzPW51bGwsaT1udWxsO2lmKCFyKWlmKGUub2xkJiZlLm9sZC50cz09PXRoaXMudHMmJmUub2xkLnpvbmUuZXF1YWxzKHQpKVtzLGldPVtlLm9sZC5jLGUub2xkLm9dO2Vsc2V7bGV0IGE9dC5vZmZzZXQodGhpcy50cyk7cz1JYSh0aGlzLnRzLGEpLHI9TnVtYmVyLmlzTmFOKHMueWVhcik/bmV3IGRlKFxcXCJpbnZhbGlkIGlucHV0XFxcIik6bnVsbCxzPXI/bnVsbDpzLGk9cj9udWxsOmF9dGhpcy5fem9uZT10LHRoaXMubG9jPWUubG9jfHxuZS5jcmVhdGUoKSx0aGlzLmludmFsaWQ9cix0aGlzLndlZWtEYXRhPW51bGwsdGhpcy5jPXMsdGhpcy5vPWksdGhpcy5pc0x1eG9uRGF0ZVRpbWU9ITB9c3RhdGljIG5vdygpe3JldHVybiBuZXcgbih7fSl9c3RhdGljIGxvY2FsKCl7bGV0W2UsdF09QmEoYXJndW1lbnRzKSxbcixzLGksbyxhLHUsbF09dDtyZXR1cm4gTWEoe3llYXI6cixtb250aDpzLGRheTppLGhvdXI6byxtaW51dGU6YSxzZWNvbmQ6dSxtaWxsaXNlY29uZDpsfSxlKX1zdGF0aWMgdXRjKCl7bGV0W2UsdF09QmEoYXJndW1lbnRzKSxbcixzLGksbyxhLHUsbF09dDtyZXR1cm4gZS56b25lPWhlLnV0Y0luc3RhbmNlLE1hKHt5ZWFyOnIsbW9udGg6cyxkYXk6aSxob3VyOm8sbWludXRlOmEsc2Vjb25kOnUsbWlsbGlzZWNvbmQ6bH0sZSl9c3RhdGljIGZyb21KU0RhdGUoZSx0PXt9KXtsZXQgcj1QbyhlKT9lLnZhbHVlT2YoKTpOYU47aWYoTnVtYmVyLmlzTmFOKHIpKXJldHVybiBuLmludmFsaWQoXFxcImludmFsaWQgaW5wdXRcXFwiKTtsZXQgcz1WZSh0LnpvbmUsWC5kZWZhdWx0Wm9uZSk7cmV0dXJuIHMuaXNWYWxpZD9uZXcgbih7dHM6cix6b25lOnMsbG9jOm5lLmZyb21PYmplY3QodCl9KTpuLmludmFsaWQoWHIocykpfXN0YXRpYyBmcm9tTWlsbGlzKGUsdD17fSl7aWYodHQoZSkpcmV0dXJuIGU8LU9hfHxlPk9hP24uaW52YWxpZChcXFwiVGltZXN0YW1wIG91dCBvZiByYW5nZVxcXCIpOm5ldyBuKHt0czplLHpvbmU6VmUodC56b25lLFguZGVmYXVsdFpvbmUpLGxvYzpuZS5mcm9tT2JqZWN0KHQpfSk7dGhyb3cgbmV3IGZlKGBmcm9tTWlsbGlzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0LCBidXQgcmVjZWl2ZWQgYSAke3R5cGVvZiBlfSB3aXRoIHZhbHVlICR7ZX1gKX1zdGF0aWMgZnJvbVNlY29uZHMoZSx0PXt9KXtpZih0dChlKSlyZXR1cm4gbmV3IG4oe3RzOmUqMWUzLHpvbmU6VmUodC56b25lLFguZGVmYXVsdFpvbmUpLGxvYzpuZS5mcm9tT2JqZWN0KHQpfSk7dGhyb3cgbmV3IGZlKFxcXCJmcm9tU2Vjb25kcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dFxcXCIpfXN0YXRpYyBmcm9tT2JqZWN0KGUsdD17fSl7ZT1lfHx7fTtsZXQgcj1WZSh0LnpvbmUsWC5kZWZhdWx0Wm9uZSk7aWYoIXIuaXNWYWxpZClyZXR1cm4gbi5pbnZhbGlkKFhyKHIpKTtsZXQgcz1YLm5vdygpLGk9Vyh0LnNwZWNpZmljT2Zmc2V0KT9yLm9mZnNldChzKTp0LnNwZWNpZmljT2Zmc2V0LG89Y24oZSxBYSksYT0hVyhvLm9yZGluYWwpLHU9IVcoby55ZWFyKSxsPSFXKG8ubW9udGgpfHwhVyhvLmRheSksZj11fHxsLGQ9by53ZWVrWWVhcnx8by53ZWVrTnVtYmVyLG09bmUuZnJvbU9iamVjdCh0KTtpZigoZnx8YSkmJmQpdGhyb3cgbmV3IHB0KFxcXCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzXFxcIik7aWYobCYmYSl0aHJvdyBuZXcgcHQoXFxcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XFxcIik7bGV0IGg9ZHx8by53ZWVrZGF5JiYhZixiLGcsRD1JYShzLGkpO2g/KGI9cWMsZz1SYyxEPVpyKEQpKTphPyhiPVZjLGc9amMsRD1RcihEKSk6KGI9UmEsZz0kYSk7bGV0IFQ9ITE7Zm9yKGxldCBDIG9mIGIpe2xldCBWPW9bQ107VyhWKT9UP29bQ109Z1tDXTpvW0NdPURbQ106VD0hMH1sZXQgST1oP3ZhKG8pOmE/eGEobyk6eGkobyksTj1JfHxPaShvKTtpZihOKXJldHVybiBuLmludmFsaWQoTik7bGV0IHk9aD9DaShvKTphP3ZpKG8pOm8sW3csdl09dHMoeSxpLHIpLHg9bmV3IG4oe3RzOncsem9uZTpyLG86dixsb2M6bX0pO3JldHVybiBvLndlZWtkYXkmJmYmJmUud2Vla2RheSE9PXgud2Vla2RheT9uLmludmFsaWQoXFxcIm1pc21hdGNoZWQgd2Vla2RheVxcXCIsYHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICR7by53ZWVrZGF5fSBhbmQgYSBkYXRlIG9mICR7eC50b0lTTygpfWApOnh9c3RhdGljIGZyb21JU08oZSx0PXt9KXtsZXRbcixzXT1pYShlKTtyZXR1cm4gaHIocixzLHQsXFxcIklTTyA4NjAxXFxcIixlKX1zdGF0aWMgZnJvbVJGQzI4MjIoZSx0PXt9KXtsZXRbcixzXT1vYShlKTtyZXR1cm4gaHIocixzLHQsXFxcIlJGQyAyODIyXFxcIixlKX1zdGF0aWMgZnJvbUhUVFAoZSx0PXt9KXtsZXRbcixzXT1hYShlKTtyZXR1cm4gaHIocixzLHQsXFxcIkhUVFBcXFwiLHQpfXN0YXRpYyBmcm9tRm9ybWF0KGUsdCxyPXt9KXtpZihXKGUpfHxXKHQpKXRocm93IG5ldyBmZShcXFwiZnJvbUZvcm1hdCByZXF1aXJlcyBhbiBpbnB1dCBzdHJpbmcgYW5kIGEgZm9ybWF0XFxcIik7bGV0e2xvY2FsZTpzPW51bGwsbnVtYmVyaW5nU3lzdGVtOmk9bnVsbH09cixvPW5lLmZyb21PcHRzKHtsb2NhbGU6cyxudW1iZXJpbmdTeXN0ZW06aSxkZWZhdWx0VG9FTjohMH0pLFthLHUsbCxmXT1FYShvLGUsdCk7cmV0dXJuIGY/bi5pbnZhbGlkKGYpOmhyKGEsdSxyLGBmb3JtYXQgJHt0fWAsZSxsKX1zdGF0aWMgZnJvbVN0cmluZyhlLHQscj17fSl7cmV0dXJuIG4uZnJvbUZvcm1hdChlLHQscil9c3RhdGljIGZyb21TUUwoZSx0PXt9KXtsZXRbcixzXT1jYShlKTtyZXR1cm4gaHIocixzLHQsXFxcIlNRTFxcXCIsZSl9c3RhdGljIGludmFsaWQoZSx0PW51bGwpe2lmKCFlKXRocm93IG5ldyBmZShcXFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEYXRlVGltZSBpcyBpbnZhbGlkXFxcIik7bGV0IHI9ZSBpbnN0YW5jZW9mIGRlP2U6bmV3IGRlKGUsdCk7aWYoWC50aHJvd09uSW52YWxpZCl0aHJvdyBuZXcgVXIocik7cmV0dXJuIG5ldyBuKHtpbnZhbGlkOnJ9KX1zdGF0aWMgaXNEYXRlVGltZShlKXtyZXR1cm4gZSYmZS5pc0x1eG9uRGF0ZVRpbWV8fCExfWdldChlKXtyZXR1cm4gdGhpc1tlXX1nZXQgaXNWYWxpZCgpe3JldHVybiB0aGlzLmludmFsaWQ9PT1udWxsfWdldCBpbnZhbGlkUmVhc29uKCl7cmV0dXJuIHRoaXMuaW52YWxpZD90aGlzLmludmFsaWQucmVhc29uOm51bGx9Z2V0IGludmFsaWRFeHBsYW5hdGlvbigpe3JldHVybiB0aGlzLmludmFsaWQ/dGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uOm51bGx9Z2V0IGxvY2FsZSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5sb2MubG9jYWxlOm51bGx9Z2V0IG51bWJlcmluZ1N5c3RlbSgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtOm51bGx9Z2V0IG91dHB1dENhbGVuZGFyKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmxvYy5vdXRwdXRDYWxlbmRhcjpudWxsfWdldCB6b25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9Z2V0IHpvbmVOYW1lKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnpvbmUubmFtZTpudWxsfWdldCB5ZWFyKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmMueWVhcjpOYU59Z2V0IHF1YXJ0ZXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP01hdGguY2VpbCh0aGlzLmMubW9udGgvMyk6TmFOfWdldCBtb250aCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5jLm1vbnRoOk5hTn1nZXQgZGF5KCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLmMuZGF5Ok5hTn1nZXQgaG91cigpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5jLmhvdXI6TmFOfWdldCBtaW51dGUoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuYy5taW51dGU6TmFOfWdldCBzZWNvbmQoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuYy5zZWNvbmQ6TmFOfWdldCBtaWxsaXNlY29uZCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5jLm1pbGxpc2Vjb25kOk5hTn1nZXQgd2Vla1llYXIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP0xpKHRoaXMpLndlZWtZZWFyOk5hTn1nZXQgd2Vla051bWJlcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/TGkodGhpcykud2Vla051bWJlcjpOYU59Z2V0IHdlZWtkYXkoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP0xpKHRoaXMpLndlZWtkYXk6TmFOfWdldCBvcmRpbmFsKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9Rcih0aGlzLmMpLm9yZGluYWw6TmFOfWdldCBtb250aFNob3J0KCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9ndC5tb250aHMoXFxcInNob3J0XFxcIix7bG9jT2JqOnRoaXMubG9jfSlbdGhpcy5tb250aC0xXTpudWxsfWdldCBtb250aExvbmcoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2d0Lm1vbnRocyhcXFwibG9uZ1xcXCIse2xvY09iajp0aGlzLmxvY30pW3RoaXMubW9udGgtMV06bnVsbH1nZXQgd2Vla2RheVNob3J0KCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9ndC53ZWVrZGF5cyhcXFwic2hvcnRcXFwiLHtsb2NPYmo6dGhpcy5sb2N9KVt0aGlzLndlZWtkYXktMV06bnVsbH1nZXQgd2Vla2RheUxvbmcoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP2d0LndlZWtkYXlzKFxcXCJsb25nXFxcIix7bG9jT2JqOnRoaXMubG9jfSlbdGhpcy53ZWVrZGF5LTFdOm51bGx9Z2V0IG9mZnNldCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/K3RoaXMubzpOYU59Z2V0IG9mZnNldE5hbWVTaG9ydCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cyx7Zm9ybWF0OlxcXCJzaG9ydFxcXCIsbG9jYWxlOnRoaXMubG9jYWxlfSk6bnVsbH1nZXQgb2Zmc2V0TmFtZUxvbmcoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMse2Zvcm1hdDpcXFwibG9uZ1xcXCIsbG9jYWxlOnRoaXMubG9jYWxlfSk6bnVsbH1nZXQgaXNPZmZzZXRGaXhlZCgpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy56b25lLmlzVW5pdmVyc2FsOm51bGx9Z2V0IGlzSW5EU1QoKXtyZXR1cm4gdGhpcy5pc09mZnNldEZpeGVkPyExOnRoaXMub2Zmc2V0PnRoaXMuc2V0KHttb250aDoxLGRheToxfSkub2Zmc2V0fHx0aGlzLm9mZnNldD50aGlzLnNldCh7bW9udGg6NX0pLm9mZnNldH1nZXQgaXNJbkxlYXBZZWFyKCl7cmV0dXJuIGp0KHRoaXMueWVhcil9Z2V0IGRheXNJbk1vbnRoKCl7cmV0dXJuIHVuKHRoaXMueWVhcix0aGlzLm1vbnRoKX1nZXQgZGF5c0luWWVhcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/cXQodGhpcy55ZWFyKTpOYU59Z2V0IHdlZWtzSW5XZWVrWWVhcigpe3JldHVybiB0aGlzLmlzVmFsaWQ/bG4odGhpcy53ZWVrWWVhcik6TmFOfXJlc29sdmVkTG9jYWxlT3B0aW9ucyhlPXt9KXtsZXR7bG9jYWxlOnQsbnVtYmVyaW5nU3lzdGVtOnIsY2FsZW5kYXI6c309d2UuY3JlYXRlKHRoaXMubG9jLmNsb25lKGUpLGUpLnJlc29sdmVkT3B0aW9ucyh0aGlzKTtyZXR1cm57bG9jYWxlOnQsbnVtYmVyaW5nU3lzdGVtOnIsb3V0cHV0Q2FsZW5kYXI6c319dG9VVEMoZT0wLHQ9e30pe3JldHVybiB0aGlzLnNldFpvbmUoaGUuaW5zdGFuY2UoZSksdCl9dG9Mb2NhbCgpe3JldHVybiB0aGlzLnNldFpvbmUoWC5kZWZhdWx0Wm9uZSl9c2V0Wm9uZShlLHtrZWVwTG9jYWxUaW1lOnQ9ITEsa2VlcENhbGVuZGFyVGltZTpyPSExfT17fSl7aWYoZT1WZShlLFguZGVmYXVsdFpvbmUpLGUuZXF1YWxzKHRoaXMuem9uZSkpcmV0dXJuIHRoaXM7aWYoZS5pc1ZhbGlkKXtsZXQgcz10aGlzLnRzO2lmKHR8fHIpe2xldCBpPWUub2Zmc2V0KHRoaXMudHMpLG89dGhpcy50b09iamVjdCgpO1tzXT10cyhvLGksZSl9cmV0dXJuIGRyKHRoaXMse3RzOnMsem9uZTplfSl9ZWxzZSByZXR1cm4gbi5pbnZhbGlkKFhyKGUpKX1yZWNvbmZpZ3VyZSh7bG9jYWxlOmUsbnVtYmVyaW5nU3lzdGVtOnQsb3V0cHV0Q2FsZW5kYXI6cn09e30pe2xldCBzPXRoaXMubG9jLmNsb25lKHtsb2NhbGU6ZSxudW1iZXJpbmdTeXN0ZW06dCxvdXRwdXRDYWxlbmRhcjpyfSk7cmV0dXJuIGRyKHRoaXMse2xvYzpzfSl9c2V0TG9jYWxlKGUpe3JldHVybiB0aGlzLnJlY29uZmlndXJlKHtsb2NhbGU6ZX0pfXNldChlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PWNuKGUsQWEpLHI9IVcodC53ZWVrWWVhcil8fCFXKHQud2Vla051bWJlcil8fCFXKHQud2Vla2RheSkscz0hVyh0Lm9yZGluYWwpLGk9IVcodC55ZWFyKSxvPSFXKHQubW9udGgpfHwhVyh0LmRheSksYT1pfHxvLHU9dC53ZWVrWWVhcnx8dC53ZWVrTnVtYmVyO2lmKChhfHxzKSYmdSl0aHJvdyBuZXcgcHQoXFxcIkNhbid0IG1peCB3ZWVrWWVhci93ZWVrTnVtYmVyIHVuaXRzIHdpdGggeWVhci9tb250aC9kYXkgb3Igb3JkaW5hbHNcXFwiKTtpZihvJiZzKXRocm93IG5ldyBwdChcXFwiQ2FuJ3QgbWl4IG9yZGluYWwgZGF0ZXMgd2l0aCBtb250aC9kYXlcXFwiKTtsZXQgbDtyP2w9Q2koUihSKHt9LFpyKHRoaXMuYykpLHQpKTpXKHQub3JkaW5hbCk/KGw9UihSKHt9LHRoaXMudG9PYmplY3QoKSksdCksVyh0LmRheSkmJihsLmRheT1NYXRoLm1pbih1bihsLnllYXIsbC5tb250aCksbC5kYXkpKSk6bD12aShSKFIoe30sUXIodGhpcy5jKSksdCkpO2xldFtmLGRdPXRzKGwsdGhpcy5vLHRoaXMuem9uZSk7cmV0dXJuIGRyKHRoaXMse3RzOmYsbzpkfSl9cGx1cyhlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PUIuZnJvbUR1cmF0aW9uTGlrZShlKTtyZXR1cm4gZHIodGhpcyxMYSh0aGlzLHQpKX1taW51cyhlKXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiB0aGlzO2xldCB0PUIuZnJvbUR1cmF0aW9uTGlrZShlKS5uZWdhdGUoKTtyZXR1cm4gZHIodGhpcyxMYSh0aGlzLHQpKX1zdGFydE9mKGUpe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJuIHRoaXM7bGV0IHQ9e30scj1CLm5vcm1hbGl6ZVVuaXQoZSk7c3dpdGNoKHIpe2Nhc2VcXFwieWVhcnNcXFwiOnQubW9udGg9MTtjYXNlXFxcInF1YXJ0ZXJzXFxcIjpjYXNlXFxcIm1vbnRoc1xcXCI6dC5kYXk9MTtjYXNlXFxcIndlZWtzXFxcIjpjYXNlXFxcImRheXNcXFwiOnQuaG91cj0wO2Nhc2VcXFwiaG91cnNcXFwiOnQubWludXRlPTA7Y2FzZVxcXCJtaW51dGVzXFxcIjp0LnNlY29uZD0wO2Nhc2VcXFwic2Vjb25kc1xcXCI6dC5taWxsaXNlY29uZD0wO2JyZWFrO2Nhc2VcXFwibWlsbGlzZWNvbmRzXFxcIjpicmVha31pZihyPT09XFxcIndlZWtzXFxcIiYmKHQud2Vla2RheT0xKSxyPT09XFxcInF1YXJ0ZXJzXFxcIil7bGV0IHM9TWF0aC5jZWlsKHRoaXMubW9udGgvMyk7dC5tb250aD0ocy0xKSozKzF9cmV0dXJuIHRoaXMuc2V0KHQpfWVuZE9mKGUpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy5wbHVzKHtbZV06MX0pLnN0YXJ0T2YoZSkubWludXMoMSk6dGhpc310b0Zvcm1hdChlLHQ9e30pe3JldHVybiB0aGlzLmlzVmFsaWQ/d2UuY3JlYXRlKHRoaXMubG9jLnJlZGVmYXVsdFRvRU4odCkpLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyh0aGlzLGUpOklpfXRvTG9jYWxlU3RyaW5nKGU9b24sdD17fSl7cmV0dXJuIHRoaXMuaXNWYWxpZD93ZS5jcmVhdGUodGhpcy5sb2MuY2xvbmUodCksZSkuZm9ybWF0RGF0ZVRpbWUodGhpcyk6SWl9dG9Mb2NhbGVQYXJ0cyhlPXt9KXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3dlLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShlKSxlKS5mb3JtYXREYXRlVGltZVBhcnRzKHRoaXMpOltdfXRvSVNPKHtmb3JtYXQ6ZT1cXFwiZXh0ZW5kZWRcXFwiLHN1cHByZXNzU2Vjb25kczp0PSExLHN1cHByZXNzTWlsbGlzZWNvbmRzOnI9ITEsaW5jbHVkZU9mZnNldDpzPSEwLGV4dGVuZGVkWm9uZTppPSExfT17fSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gbnVsbDtsZXQgbz1lPT09XFxcImV4dGVuZGVkXFxcIixhPU5pKHRoaXMsbyk7cmV0dXJuIGErPVxcXCJUXFxcIixhKz1OYSh0aGlzLG8sdCxyLHMsaSksYX10b0lTT0RhdGUoe2Zvcm1hdDplPVxcXCJleHRlbmRlZFxcXCJ9PXt9KXtyZXR1cm4gdGhpcy5pc1ZhbGlkP05pKHRoaXMsZT09PVxcXCJleHRlbmRlZFxcXCIpOm51bGx9dG9JU09XZWVrRGF0ZSgpe3JldHVybiBlcyh0aGlzLFxcXCJra2trLSdXJ1dXLWNcXFwiKX10b0lTT1RpbWUoe3N1cHByZXNzTWlsbGlzZWNvbmRzOmU9ITEsc3VwcHJlc3NTZWNvbmRzOnQ9ITEsaW5jbHVkZU9mZnNldDpyPSEwLGluY2x1ZGVQcmVmaXg6cz0hMSxleHRlbmRlZFpvbmU6aT0hMSxmb3JtYXQ6bz1cXFwiZXh0ZW5kZWRcXFwifT17fSl7cmV0dXJuIHRoaXMuaXNWYWxpZD8ocz9cXFwiVFxcXCI6XFxcIlxcXCIpK05hKHRoaXMsbz09PVxcXCJleHRlbmRlZFxcXCIsdCxlLHIsaSk6bnVsbH10b1JGQzI4MjIoKXtyZXR1cm4gZXModGhpcyxcXFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyBaWlpcXFwiLCExKX10b0hUVFAoKXtyZXR1cm4gZXModGhpcy50b1VUQygpLFxcXCJFRUUsIGRkIExMTCB5eXl5IEhIOm1tOnNzICdHTVQnXFxcIil9dG9TUUxEYXRlKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9OaSh0aGlzLCEwKTpudWxsfXRvU1FMVGltZSh7aW5jbHVkZU9mZnNldDplPSEwLGluY2x1ZGVab25lOnQ9ITEsaW5jbHVkZU9mZnNldFNwYWNlOnI9ITB9PXt9KXtsZXQgcz1cXFwiSEg6bW06c3MuU1NTXFxcIjtyZXR1cm4odHx8ZSkmJihyJiYocys9XFxcIiBcXFwiKSx0P3MrPVxcXCJ6XFxcIjplJiYocys9XFxcIlpaXFxcIikpLGVzKHRoaXMscywhMCl9dG9TUUwoZT17fSl7cmV0dXJuIHRoaXMuaXNWYWxpZD9gJHt0aGlzLnRvU1FMRGF0ZSgpfSAke3RoaXMudG9TUUxUaW1lKGUpfWA6bnVsbH10b1N0cmluZygpe3JldHVybiB0aGlzLmlzVmFsaWQ/dGhpcy50b0lTTygpOklpfXZhbHVlT2YoKXtyZXR1cm4gdGhpcy50b01pbGxpcygpfXRvTWlsbGlzKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD90aGlzLnRzOk5hTn10b1NlY29uZHMoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3RoaXMudHMvMWUzOk5hTn10b1VuaXhJbnRlZ2VyKCl7cmV0dXJuIHRoaXMuaXNWYWxpZD9NYXRoLmZsb29yKHRoaXMudHMvMWUzKTpOYU59dG9KU09OKCl7cmV0dXJuIHRoaXMudG9JU08oKX10b0JTT04oKXtyZXR1cm4gdGhpcy50b0pTRGF0ZSgpfXRvT2JqZWN0KGU9e30pe2lmKCF0aGlzLmlzVmFsaWQpcmV0dXJue307bGV0IHQ9Uih7fSx0aGlzLmMpO3JldHVybiBlLmluY2x1ZGVDb25maWcmJih0Lm91dHB1dENhbGVuZGFyPXRoaXMub3V0cHV0Q2FsZW5kYXIsdC5udW1iZXJpbmdTeXN0ZW09dGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtLHQubG9jYWxlPXRoaXMubG9jLmxvY2FsZSksdH10b0pTRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLmlzVmFsaWQ/dGhpcy50czpOYU4pfWRpZmYoZSx0PVxcXCJtaWxsaXNlY29uZHNcXFwiLHI9e30pe2lmKCF0aGlzLmlzVmFsaWR8fCFlLmlzVmFsaWQpcmV0dXJuIEIuaW52YWxpZChcXFwiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWVcXFwiKTtsZXQgcz1SKHtsb2NhbGU6dGhpcy5sb2NhbGUsbnVtYmVyaW5nU3lzdGVtOnRoaXMubnVtYmVyaW5nU3lzdGVtfSxyKSxpPSRvKHQpLm1hcChCLm5vcm1hbGl6ZVVuaXQpLG89ZS52YWx1ZU9mKCk+dGhpcy52YWx1ZU9mKCksYT1vP3RoaXM6ZSx1PW8/ZTp0aGlzLGw9bWEoYSx1LGkscyk7cmV0dXJuIG8/bC5uZWdhdGUoKTpsfWRpZmZOb3coZT1cXFwibWlsbGlzZWNvbmRzXFxcIix0PXt9KXtyZXR1cm4gdGhpcy5kaWZmKG4ubm93KCksZSx0KX11bnRpbChlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkP3l0LmZyb21EYXRlVGltZXModGhpcyxlKTp0aGlzfWhhc1NhbWUoZSx0KXtpZighdGhpcy5pc1ZhbGlkKXJldHVybiExO2xldCByPWUudmFsdWVPZigpLHM9dGhpcy5zZXRab25lKGUuem9uZSx7a2VlcExvY2FsVGltZTohMH0pO3JldHVybiBzLnN0YXJ0T2YodCk8PXImJnI8PXMuZW5kT2YodCl9ZXF1YWxzKGUpe3JldHVybiB0aGlzLmlzVmFsaWQmJmUuaXNWYWxpZCYmdGhpcy52YWx1ZU9mKCk9PT1lLnZhbHVlT2YoKSYmdGhpcy56b25lLmVxdWFscyhlLnpvbmUpJiZ0aGlzLmxvYy5lcXVhbHMoZS5sb2MpfXRvUmVsYXRpdmUoZT17fSl7aWYoIXRoaXMuaXNWYWxpZClyZXR1cm4gbnVsbDtsZXQgdD1lLmJhc2V8fG4uZnJvbU9iamVjdCh7fSx7em9uZTp0aGlzLnpvbmV9KSxyPWUucGFkZGluZz90aGlzPHQ/LWUucGFkZGluZzplLnBhZGRpbmc6MCxzPVtcXFwieWVhcnNcXFwiLFxcXCJtb250aHNcXFwiLFxcXCJkYXlzXFxcIixcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCJdLGk9ZS51bml0O3JldHVybiBBcnJheS5pc0FycmF5KGUudW5pdCkmJihzPWUudW5pdCxpPXZvaWQgMCksX2EodCx0aGlzLnBsdXMocikseWUoUih7fSxlKSx7bnVtZXJpYzpcXFwiYWx3YXlzXFxcIix1bml0czpzLHVuaXQ6aX0pKX10b1JlbGF0aXZlQ2FsZW5kYXIoZT17fSl7cmV0dXJuIHRoaXMuaXNWYWxpZD9fYShlLmJhc2V8fG4uZnJvbU9iamVjdCh7fSx7em9uZTp0aGlzLnpvbmV9KSx0aGlzLHllKFIoe30sZSkse251bWVyaWM6XFxcImF1dG9cXFwiLHVuaXRzOltcXFwieWVhcnNcXFwiLFxcXCJtb250aHNcXFwiLFxcXCJkYXlzXFxcIl0sY2FsZW5kYXJ5OiEwfSkpOm51bGx9c3RhdGljIG1pbiguLi5lKXtpZighZS5ldmVyeShuLmlzRGF0ZVRpbWUpKXRocm93IG5ldyBmZShcXFwibWluIHJlcXVpcmVzIGFsbCBhcmd1bWVudHMgYmUgRGF0ZVRpbWVzXFxcIik7cmV0dXJuIFhzKGUsdD0+dC52YWx1ZU9mKCksTWF0aC5taW4pfXN0YXRpYyBtYXgoLi4uZSl7aWYoIWUuZXZlcnkobi5pc0RhdGVUaW1lKSl0aHJvdyBuZXcgZmUoXFxcIm1heCByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lc1xcXCIpO3JldHVybiBYcyhlLHQ9PnQudmFsdWVPZigpLE1hdGgubWF4KX1zdGF0aWMgZnJvbUZvcm1hdEV4cGxhaW4oZSx0LHI9e30pe2xldHtsb2NhbGU6cz1udWxsLG51bWJlcmluZ1N5c3RlbTppPW51bGx9PXIsbz1uZS5mcm9tT3B0cyh7bG9jYWxlOnMsbnVtYmVyaW5nU3lzdGVtOmksZGVmYXVsdFRvRU46ITB9KTtyZXR1cm4ga2kobyxlLHQpfXN0YXRpYyBmcm9tU3RyaW5nRXhwbGFpbihlLHQscj17fSl7cmV0dXJuIG4uZnJvbUZvcm1hdEV4cGxhaW4oZSx0LHIpfXN0YXRpYyBnZXQgREFURV9TSE9SVCgpe3JldHVybiBvbn1zdGF0aWMgZ2V0IERBVEVfTUVEKCl7cmV0dXJuICRufXN0YXRpYyBnZXQgREFURV9NRURfV0lUSF9XRUVLREFZKCl7cmV0dXJuIEdzfXN0YXRpYyBnZXQgREFURV9GVUxMKCl7cmV0dXJuIFJufXN0YXRpYyBnZXQgREFURV9IVUdFKCl7cmV0dXJuIGpufXN0YXRpYyBnZXQgVElNRV9TSU1QTEUoKXtyZXR1cm4gcW59c3RhdGljIGdldCBUSU1FX1dJVEhfU0VDT05EUygpe3JldHVybiBWbn1zdGF0aWMgZ2V0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQoKXtyZXR1cm4gVW59c3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKXtyZXR1cm4gS259c3RhdGljIGdldCBUSU1FXzI0X1NJTVBMRSgpe3JldHVybiBXbn1zdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9TRUNPTkRTKCl7cmV0dXJuIEhufXN0YXRpYyBnZXQgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCgpe3JldHVybiBKbn1zdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCgpe3JldHVybiB6bn1zdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUKCl7cmV0dXJuIFlufXN0YXRpYyBnZXQgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTKCl7cmV0dXJuIEdufXN0YXRpYyBnZXQgREFURVRJTUVfTUVEKCl7cmV0dXJuIFpufXN0YXRpYyBnZXQgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUygpe3JldHVybiBRbn1zdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKXtyZXR1cm4gWnN9c3RhdGljIGdldCBEQVRFVElNRV9GVUxMKCl7cmV0dXJuIFhufXN0YXRpYyBnZXQgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMoKXtyZXR1cm4gZXJ9c3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCl7cmV0dXJuIHRyfXN0YXRpYyBnZXQgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMoKXtyZXR1cm4gbnJ9fTtmdW5jdGlvbiBibihuKXtpZihxLmlzRGF0ZVRpbWUobikpcmV0dXJuIG47aWYobiYmbi52YWx1ZU9mJiZ0dChuLnZhbHVlT2YoKSkpcmV0dXJuIHEuZnJvbUpTRGF0ZShuKTtpZihuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCIpcmV0dXJuIHEuZnJvbU9iamVjdChuKTt0aHJvdyBuZXcgZmUoYFVua25vd24gZGF0ZXRpbWUgYXJndW1lbnQ6ICR7bn0sIG9mIHR5cGUgJHt0eXBlb2Ygbn1gKX12YXIgYnQ9VnIobnMoKSk7dmFyIEZuPSgpPT4vWyMqMC05XVxcXFx1RkUwRj9cXFxcdTIwRTN8W1xcXFx4QTlcXFxceEFFXFxcXHUyMDNDXFxcXHUyMDQ5XFxcXHUyMTIyXFxcXHUyMTM5XFxcXHUyMTk0LVxcXFx1MjE5OVxcXFx1MjFBOVxcXFx1MjFBQVxcXFx1MjMxQVxcXFx1MjMxQlxcXFx1MjMyOFxcXFx1MjNDRlxcXFx1MjNFRC1cXFxcdTIzRUZcXFxcdTIzRjFcXFxcdTIzRjJcXFxcdTIzRjgtXFxcXHUyM0ZBXFxcXHUyNEMyXFxcXHUyNUFBXFxcXHUyNUFCXFxcXHUyNUI2XFxcXHUyNUMwXFxcXHUyNUZCXFxcXHUyNUZDXFxcXHUyNUZFXFxcXHUyNjAwLVxcXFx1MjYwNFxcXFx1MjYwRVxcXFx1MjYxMVxcXFx1MjYxNFxcXFx1MjYxNVxcXFx1MjYxOFxcXFx1MjYyMFxcXFx1MjYyMlxcXFx1MjYyM1xcXFx1MjYyNlxcXFx1MjYyQVxcXFx1MjYyRVxcXFx1MjYyRlxcXFx1MjYzOC1cXFxcdTI2M0FcXFxcdTI2NDBcXFxcdTI2NDJcXFxcdTI2NDgtXFxcXHUyNjUzXFxcXHUyNjVGXFxcXHUyNjYwXFxcXHUyNjYzXFxcXHUyNjY1XFxcXHUyNjY2XFxcXHUyNjY4XFxcXHUyNjdCXFxcXHUyNjdFXFxcXHUyNjdGXFxcXHUyNjkyXFxcXHUyNjk0LVxcXFx1MjY5N1xcXFx1MjY5OVxcXFx1MjY5QlxcXFx1MjY5Q1xcXFx1MjZBMFxcXFx1MjZBN1xcXFx1MjZBQVxcXFx1MjZCMFxcXFx1MjZCMVxcXFx1MjZCRFxcXFx1MjZCRVxcXFx1MjZDNFxcXFx1MjZDOFxcXFx1MjZDRlxcXFx1MjZEMVxcXFx1MjZFOVxcXFx1MjZGMC1cXFxcdTI2RjVcXFxcdTI2RjdcXFxcdTI2RjhcXFxcdTI2RkFcXFxcdTI3MDJcXFxcdTI3MDhcXFxcdTI3MDlcXFxcdTI3MEZcXFxcdTI3MTJcXFxcdTI3MTRcXFxcdTI3MTZcXFxcdTI3MURcXFxcdTI3MjFcXFxcdTI3MzNcXFxcdTI3MzRcXFxcdTI3NDRcXFxcdTI3NDdcXFxcdTI3NTdcXFxcdTI3NjNcXFxcdTI3QTFcXFxcdTI5MzRcXFxcdTI5MzVcXFxcdTJCMDUtXFxcXHUyQjA3XFxcXHUyQjFCXFxcXHUyQjFDXFxcXHUyQjU1XFxcXHUzMDMwXFxcXHUzMDNEXFxcXHUzMjk3XFxcXHUzMjk5XVxcXFx1RkUwRj98W1xcXFx1MjYxRFxcXFx1MjcwQ1xcXFx1MjcwRF0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVGRTBGKT98W1xcXFx1MjcwQVxcXFx1MjcwQl0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pP3xbXFxcXHUyM0U5LVxcXFx1MjNFQ1xcXFx1MjNGMFxcXFx1MjNGM1xcXFx1MjVGRFxcXFx1MjY5M1xcXFx1MjZBMVxcXFx1MjZBQlxcXFx1MjZDNVxcXFx1MjZDRVxcXFx1MjZENFxcXFx1MjZFQVxcXFx1MjZGRFxcXFx1MjcwNVxcXFx1MjcyOFxcXFx1Mjc0Q1xcXFx1Mjc0RVxcXFx1Mjc1My1cXFxcdTI3NTVcXFxcdTI3OTUtXFxcXHUyNzk3XFxcXHUyN0IwXFxcXHUyN0JGXFxcXHUyQjUwXXxcXFxcdTI2RDNcXFxcdUZFMEY/KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQ0E1KT98XFxcXHUyNkY5KD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RkUwRik/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98XFxcXHUyNzY0XFxcXHVGRTBGPyg/OlxcXFx1MjAwRCg/OlxcXFx1RDgzRFxcXFx1REQyNXxcXFxcdUQ4M0VcXFxcdURFNzkpKT98XFxcXHVEODNDKD86W1xcXFx1REMwNFxcXFx1REQ3MFxcXFx1REQ3MVxcXFx1REQ3RVxcXFx1REQ3RlxcXFx1REUwMlxcXFx1REUzN1xcXFx1REYyMVxcXFx1REYyNC1cXFxcdURGMkNcXFxcdURGMzZcXFxcdURGN0RcXFxcdURGOTZcXFxcdURGOTdcXFxcdURGOTktXFxcXHVERjlCXFxcXHVERjlFXFxcXHVERjlGXFxcXHVERkNEXFxcXHVERkNFXFxcXHVERkQ0LVxcXFx1REZERlxcXFx1REZGNVxcXFx1REZGN11cXFxcdUZFMEY/fFtcXFxcdURGODVcXFxcdURGQzJcXFxcdURGQzddKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT98W1xcXFx1REZDNFxcXFx1REZDQV0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pPyg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFtcXFxcdURGQ0JcXFxcdURGQ0NdKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RkUwRik/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98W1xcXFx1RENDRlxcXFx1REQ4RVxcXFx1REQ5MS1cXFxcdUREOUFcXFxcdURFMDFcXFxcdURFMUFcXFxcdURFMkZcXFxcdURFMzItXFxcXHVERTM2XFxcXHVERTM4LVxcXFx1REUzQVxcXFx1REU1MFxcXFx1REU1MVxcXFx1REYwMC1cXFxcdURGMjBcXFxcdURGMkQtXFxcXHVERjM1XFxcXHVERjM3LVxcXFx1REY0M1xcXFx1REY0NS1cXFxcdURGNEFcXFxcdURGNEMtXFxcXHVERjdDXFxcXHVERjdFLVxcXFx1REY4NFxcXFx1REY4Ni1cXFxcdURGOTNcXFxcdURGQTAtXFxcXHVERkMxXFxcXHVERkM1XFxcXHVERkM2XFxcXHVERkM4XFxcXHVERkM5XFxcXHVERkNGLVxcXFx1REZEM1xcXFx1REZFMC1cXFxcdURGRjBcXFxcdURGRjgtXFxcXHVERkZGXXxcXFxcdURERTZcXFxcdUQ4M0NbXFxcXHVEREU4LVxcXFx1RERFQ1xcXFx1RERFRVxcXFx1RERGMVxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGNi1cXFxcdURERkFcXFxcdURERkNcXFxcdURERkRcXFxcdURERkZdfFxcXFx1RERFN1xcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERTdcXFxcdURERTktXFxcXHVEREVGXFxcXHVEREYxLVxcXFx1RERGNFxcXFx1RERGNi1cXFxcdURERjlcXFxcdURERkJcXFxcdURERkNcXFxcdURERkVcXFxcdURERkZdfFxcXFx1RERFOFxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERThcXFxcdURERTlcXFxcdURERUItXFxcXHVEREVFXFxcXHVEREYwLVxcXFx1RERGN1xcXFx1RERGQS1cXFxcdURERkZdfFxcXFx1RERFOVxcXFx1RDgzQ1tcXFxcdURERUFcXFxcdURERUNcXFxcdURERUZcXFxcdURERjBcXFxcdURERjJcXFxcdURERjRcXFxcdURERkZdfFxcXFx1RERFQVxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERThcXFxcdURERUFcXFxcdURERUNcXFxcdURERURcXFxcdURERjctXFxcXHVEREZBXXxcXFxcdURERUJcXFxcdUQ4M0NbXFxcXHVEREVFLVxcXFx1RERGMFxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGN118XFxcXHVEREVDXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFN1xcXFx1RERFOS1cXFxcdURERUVcXFxcdURERjEtXFxcXHVEREYzXFxcXHVEREY1LVxcXFx1RERGQVxcXFx1RERGQ1xcXFx1RERGRV18XFxcXHVEREVEXFxcXHVEODNDW1xcXFx1RERGMFxcXFx1RERGMlxcXFx1RERGM1xcXFx1RERGN1xcXFx1RERGOVxcXFx1RERGQV18XFxcXHVEREVFXFxcXHVEODNDW1xcXFx1RERFOC1cXFxcdURERUFcXFxcdURERjEtXFxcXHVEREY0XFxcXHVEREY2LVxcXFx1RERGOV18XFxcXHVEREVGXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERGMlxcXFx1RERGNFxcXFx1RERGNV18XFxcXHVEREYwXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERFQy1cXFxcdURERUVcXFxcdURERjJcXFxcdURERjNcXFxcdURERjVcXFxcdURERjdcXFxcdURERkNcXFxcdURERkVcXFxcdURERkZdfFxcXFx1RERGMVxcXFx1RDgzQ1tcXFxcdURERTYtXFxcXHVEREU4XFxcXHVEREVFXFxcXHVEREYwXFxcXHVEREY3LVxcXFx1RERGQlxcXFx1RERGRV18XFxcXHVEREYyXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFOC1cXFxcdURERURcXFxcdURERjAtXFxcXHVEREZGXXxcXFxcdURERjNcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREU4XFxcXHVEREVBLVxcXFx1RERFQ1xcXFx1RERFRVxcXFx1RERGMVxcXFx1RERGNFxcXFx1RERGNVxcXFx1RERGN1xcXFx1RERGQVxcXFx1RERGRl18XFxcXHVEREY0XFxcXHVEODNDXFxcXHVEREYyfFxcXFx1RERGNVxcXFx1RDgzQ1tcXFxcdURERTZcXFxcdURERUEtXFxcXHVEREVEXFxcXHVEREYwLVxcXFx1RERGM1xcXFx1RERGNy1cXFxcdURERjlcXFxcdURERkNcXFxcdURERkVdfFxcXFx1RERGNlxcXFx1RDgzQ1xcXFx1RERFNnxcXFxcdURERjdcXFxcdUQ4M0NbXFxcXHVEREVBXFxcXHVEREY0XFxcXHVEREY4XFxcXHVEREZBXFxcXHVEREZDXXxcXFxcdURERjhcXFxcdUQ4M0NbXFxcXHVEREU2LVxcXFx1RERFQVxcXFx1RERFQy1cXFxcdURERjRcXFxcdURERjctXFxcXHVEREY5XFxcXHVEREZCXFxcXHVEREZELVxcXFx1RERGRl18XFxcXHVEREY5XFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERFOFxcXFx1RERFOVxcXFx1RERFQi1cXFxcdURERURcXFxcdURERUYtXFxcXHVEREY0XFxcXHVEREY3XFxcXHVEREY5XFxcXHVEREZCXFxcXHVEREZDXFxcXHVEREZGXXxcXFxcdURERkFcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREVDXFxcXHVEREYyXFxcXHVEREYzXFxcXHVEREY4XFxcXHVEREZFXFxcXHVEREZGXXxcXFxcdURERkJcXFxcdUQ4M0NbXFxcXHVEREU2XFxcXHVEREU4XFxcXHVEREVBXFxcXHVEREVDXFxcXHVEREVFXFxcXHVEREYzXFxcXHVEREZBXXxcXFxcdURERkNcXFxcdUQ4M0NbXFxcXHVEREVCXFxcXHVEREY4XXxcXFxcdURERkRcXFxcdUQ4M0NcXFxcdURERjB8XFxcXHVEREZFXFxcXHVEODNDW1xcXFx1RERFQVxcXFx1RERGOV18XFxcXHVEREZGXFxcXHVEODNDW1xcXFx1RERFNlxcXFx1RERGMlxcXFx1RERGQ118XFxcXHVERjQ0KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVERkVCKT98XFxcXHVERjRCKD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVERkU5KT98XFxcXHVERkMzKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT8oPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjQwXFxcXHUyNjQyXVxcXFx1RkUwRj8oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98XFxcXHUyN0ExXFxcXHVGRTBGPykpP3xcXFxcdURGRjNcXFxcdUZFMEY/KD86XFxcXHUyMDBEKD86XFxcXHUyNkE3XFxcXHVGRTBGP3xcXFxcdUQ4M0NcXFxcdURGMDgpKT98XFxcXHVERkY0KD86XFxcXHUyMDBEXFxcXHUyNjIwXFxcXHVGRTBGP3xcXFxcdURCNDBcXFxcdURDNjdcXFxcdURCNDBcXFxcdURDNjJcXFxcdURCNDAoPzpcXFxcdURDNjVcXFxcdURCNDBcXFxcdURDNkVcXFxcdURCNDBcXFxcdURDNjd8XFxcXHVEQzczXFxcXHVEQjQwXFxcXHVEQzYzXFxcXHVEQjQwXFxcXHVEQzc0fFxcXFx1REM3N1xcXFx1REI0MFxcXFx1REM2Q1xcXFx1REI0MFxcXFx1REM3MylcXFxcdURCNDBcXFxcdURDN0YpPyl8XFxcXHVEODNEKD86W1xcXFx1REMzRlxcXFx1RENGRFxcXFx1REQ0OVxcXFx1REQ0QVxcXFx1REQ2RlxcXFx1REQ3MFxcXFx1REQ3M1xcXFx1REQ3Ni1cXFxcdURENzlcXFxcdUREODdcXFxcdUREOEEtXFxcXHVERDhEXFxcXHVEREE1XFxcXHVEREE4XFxcXHVEREIxXFxcXHVEREIyXFxcXHVEREJDXFxcXHVEREMyLVxcXFx1RERDNFxcXFx1REREMS1cXFxcdURERDNcXFxcdUREREMtXFxcXHVERERFXFxcXHVEREUxXFxcXHVEREUzXFxcXHVEREU4XFxcXHVEREVGXFxcXHVEREYzXFxcXHVEREZBXFxcXHVERUNCXFxcXHVERUNELVxcXFx1REVDRlxcXFx1REVFMC1cXFxcdURFRTVcXFxcdURFRTlcXFxcdURFRjBcXFxcdURFRjNdXFxcXHVGRTBGP3xbXFxcXHVEQzQyXFxcXHVEQzQzXFxcXHVEQzQ2LVxcXFx1REM1MFxcXFx1REM2NlxcXFx1REM2N1xcXFx1REM2Qi1cXFxcdURDNkRcXFxcdURDNzJcXFxcdURDNzQtXFxcXHVEQzc2XFxcXHVEQzc4XFxcXHVEQzdDXFxcXHVEQzgzXFxcXHVEQzg1XFxcXHVEQzhGXFxcXHVEQzkxXFxcXHVEQ0FBXFxcXHVERDdBXFxcXHVERDk1XFxcXHVERDk2XFxcXHVERTRDXFxcXHVERTRGXFxcXHVERUMwXFxcXHVERUNDXSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/fFtcXFxcdURDNkVcXFxcdURDNzBcXFxcdURDNzFcXFxcdURDNzNcXFxcdURDNzdcXFxcdURDODFcXFxcdURDODJcXFxcdURDODZcXFxcdURDODdcXFxcdURFNDUtXFxcXHVERTQ3XFxcXHVERTRCXFxcXHVERTREXFxcXHVERTRFXFxcXHVERUEzXFxcXHVERUI0XFxcXHVERUI1XSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSk/KD86XFxcXHUyMDBEW1xcXFx1MjY0MFxcXFx1MjY0Ml1cXFxcdUZFMEY/KT98W1xcXFx1REQ3NFxcXFx1REQ5MF0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVGRTBGKT98W1xcXFx1REMwMC1cXFxcdURDMDdcXFxcdURDMDktXFxcXHVEQzE0XFxcXHVEQzE2LVxcXFx1REMyNVxcXFx1REMyNy1cXFxcdURDM0FcXFxcdURDM0MtXFxcXHVEQzNFXFxcXHVEQzQwXFxcXHVEQzQ0XFxcXHVEQzQ1XFxcXHVEQzUxLVxcXFx1REM2NVxcXFx1REM2QVxcXFx1REM3OS1cXFxcdURDN0JcXFxcdURDN0QtXFxcXHVEQzgwXFxcXHVEQzg0XFxcXHVEQzg4LVxcXFx1REM4RVxcXFx1REM5MFxcXFx1REM5Mi1cXFxcdURDQTlcXFxcdURDQUItXFxcXHVEQ0ZDXFxcXHVEQ0ZGLVxcXFx1REQzRFxcXFx1REQ0Qi1cXFxcdURENEVcXFxcdURENTAtXFxcXHVERDY3XFxcXHVEREE0XFxcXHVEREZCLVxcXFx1REUyRFxcXFx1REUyRi1cXFxcdURFMzRcXFxcdURFMzctXFxcXHVERTQxXFxcXHVERTQzXFxcXHVERTQ0XFxcXHVERTQ4LVxcXFx1REU0QVxcXFx1REU4MC1cXFxcdURFQTJcXFxcdURFQTQtXFxcXHVERUIzXFxcXHVERUI3LVxcXFx1REVCRlxcXFx1REVDMS1cXFxcdURFQzVcXFxcdURFRDAtXFxcXHVERUQyXFxcXHVERUQ1LVxcXFx1REVEN1xcXFx1REVEQy1cXFxcdURFREZcXFxcdURFRUJcXFxcdURFRUNcXFxcdURFRjQtXFxcXHVERUZDXFxcXHVERkUwLVxcXFx1REZFQlxcXFx1REZGMF18XFxcXHVEQzA4KD86XFxcXHUyMDBEXFxcXHUyQjFCKT98XFxcXHVEQzE1KD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREJBKT98XFxcXHVEQzI2KD86XFxcXHUyMDBEKD86XFxcXHUyQjFCfFxcXFx1RDgzRFxcXFx1REQyNSkpP3xcXFxcdURDM0IoPzpcXFxcdTIwMERcXFxcdTI3NDRcXFxcdUZFMEY/KT98XFxcXHVEQzQxXFxcXHVGRTBGPyg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RERFOFxcXFx1RkUwRj8pP3xcXFxcdURDNjgoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4fFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldXFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPyl8W1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPyl8XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdKSl8XFxcXHVEODNDKD86XFxcXHVERkZCKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0QpP1xcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQy1cXFxcdURGRkZdKSkpP3xcXFxcdURGRkMoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RcXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZELVxcXFx1REZGRl0pKSk/fFxcXFx1REZGRCg/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEKT9cXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkJcXFxcdURGRkNcXFxcdURGRkVcXFxcdURGRkZdKSkpP3xcXFxcdURGRkUoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OlxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRCk/XFxcXHVEQzY4XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RcXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRFxcXFx1REZGRl0pKSk/fFxcXFx1REZGRig/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEKT9cXFxcdURDNjhcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2OFxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZFXSkpKT8pKT98XFxcXHVEQzY5KD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0QpP1tcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRCg/OltcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1REM2Nig/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1REM2Nik/fFxcXFx1REM2Nyg/OlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjZcXFxcdURDNjddKT98XFxcXHVEQzY5XFxcXHUyMDBEXFxcXHVEODNEKD86XFxcXHVEQzY2KD86XFxcXHUyMDBEXFxcXHVEODNEXFxcXHVEQzY2KT98XFxcXHVEQzY3KD86XFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2NlxcXFx1REM2N10pPykpfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXSkpfFxcXFx1RDgzQyg/OlxcXFx1REZGQig/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEXFxcXHVEODNEKD86W1xcXFx1REM2OFxcXFx1REM2OV18XFxcXHVEQzhCXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV0pXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XVxcXFx1RDgzQ1tcXFxcdURGRkMtXFxcXHVERkZGXSkpKT98XFxcXHVERkZDKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpbXFxcXHVEQzY4XFxcXHVEQzY5XXxcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XSlcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldXFxcXHVEODNDW1xcXFx1REZGQlxcXFx1REZGRC1cXFxcdURGRkZdKSkpP3xcXFxcdURGRkQoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldKVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV1cXFxcdUQ4M0NbXFxcXHVERkZCXFxcXHVERkZDXFxcXHVERkZFXFxcXHVERkZGXSkpKT98XFxcXHVERkZFKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMERcXFxcdUQ4M0QoPzpbXFxcXHVEQzY4XFxcXHVEQzY5XXxcXFxcdURDOEJcXFxcdTIwMERcXFxcdUQ4M0RbXFxcXHVEQzY4XFxcXHVEQzY5XSlcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkRcXFxcdURGRkZdKSkpP3xcXFxcdURGRkYoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRFxcXFx1RDgzRCg/OltcXFxcdURDNjhcXFxcdURDNjldfFxcXFx1REM4QlxcXFx1MjAwRFxcXFx1RDgzRFtcXFxcdURDNjhcXFxcdURDNjldKVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNEW1xcXFx1REM2OFxcXFx1REM2OV1cXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRV0pKSk/KSk/fFxcXFx1REM2Rig/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFxcXFx1REQ3NSg/OlxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXXxcXFxcdUZFMEYpPyg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFxcXFx1REUyRSg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RENBOCk/fFxcXFx1REUzNSg/OlxcXFx1MjAwRFxcXFx1RDgzRFxcXFx1RENBQik/fFxcXFx1REUzNig/OlxcXFx1MjAwRFxcXFx1RDgzQ1xcXFx1REYyQlxcXFx1RkUwRj8pP3xcXFxcdURFNDIoPzpcXFxcdTIwMERbXFxcXHUyMTk0XFxcXHUyMTk1XVxcXFx1RkUwRj8pP3xcXFxcdURFQjYoPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pPyg/OlxcXFx1MjAwRCg/OltcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xcXFxcdTI3QTFcXFxcdUZFMEY/KSk/KXxcXFxcdUQ4M0UoPzpbXFxcXHVERDBDXFxcXHVERDBGXFxcXHVERDE4LVxcXFx1REQxRlxcXFx1REQzMC1cXFxcdUREMzRcXFxcdUREMzZcXFxcdURENzdcXFxcdUREQjVcXFxcdUREQjZcXFxcdUREQkJcXFxcdURERDJcXFxcdURERDNcXFxcdURERDVcXFxcdURFQzMtXFxcXHVERUM1XFxcXHVERUYwXFxcXHVERUYyLVxcXFx1REVGOF0oPzpcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pP3xbXFxcXHVERDI2XFxcXHVERDM1XFxcXHVERDM3LVxcXFx1REQzOVxcXFx1REQzRFxcXFx1REQzRVxcXFx1RERCOFxcXFx1RERCOVxcXFx1RERDRFxcXFx1RERDRlxcXFx1RERENFxcXFx1RERENi1cXFxcdURERERdKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT8oPzpcXFxcdTIwMERbXFxcXHUyNjQwXFxcXHUyNjQyXVxcXFx1RkUwRj8pP3xbXFxcXHVERERFXFxcXHVERERGXSg/OlxcXFx1MjAwRFtcXFxcdTI2NDBcXFxcdTI2NDJdXFxcXHVGRTBGPyk/fFtcXFxcdUREMERcXFxcdUREMEVcXFxcdUREMTAtXFxcXHVERDE3XFxcXHVERDIwLVxcXFx1REQyNVxcXFx1REQyNy1cXFxcdUREMkZcXFxcdUREM0FcXFxcdUREM0YtXFxcXHVERDQ1XFxcXHVERDQ3LVxcXFx1REQ3NlxcXFx1REQ3OC1cXFxcdUREQjRcXFxcdUREQjdcXFxcdUREQkFcXFxcdUREQkMtXFxcXHVERENDXFxcXHVEREQwXFxcXHVEREUwLVxcXFx1RERGRlxcXFx1REU3MC1cXFxcdURFN0NcXFxcdURFODAtXFxcXHVERTg5XFxcXHVERThGLVxcXFx1REVDMlxcXFx1REVDNlxcXFx1REVDRS1cXFxcdURFRENcXFxcdURFREYtXFxcXHVERUU5XXxcXFxcdUREM0MoPzpcXFxcdTIwMERbXFxcXHUyNjQwXFxcXHUyNjQyXVxcXFx1RkUwRj98XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT98XFxcXHVERENFKD86XFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKT8oPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjQwXFxcXHUyNjQyXVxcXFx1RkUwRj8oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98XFxcXHUyN0ExXFxcXHVGRTBGPykpP3xcXFxcdURERDEoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY4NFxcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REREMXxcXFxcdURERDFcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDIoPzpcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDIpP3xcXFxcdURERDIoPzpcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDIpPykpfFxcXFx1RDgzQyg/OlxcXFx1REZGQig/OlxcXFx1MjAwRCg/OltcXFxcdTI2OTVcXFxcdTI2OTZcXFxcdTI3MDhdXFxcXHVGRTBGP3xcXFxcdTI3NjRcXFxcdUZFMEY/XFxcXHUyMDBEKD86XFxcXHVEODNEXFxcXHVEQzhCXFxcXHUyMDBEKT9cXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZDLVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY4NFxcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSkpKT98XFxcXHVERkZDKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMEQoPzpcXFxcdUQ4M0RcXFxcdURDOEJcXFxcdTIwMEQpP1xcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkJcXFxcdURGRkQtXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjg0XFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQxXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKSkpP3xcXFxcdURGRkQoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRCg/OlxcXFx1RDgzRFxcXFx1REM4QlxcXFx1MjAwRCk/XFxcXHVEODNFXFxcXHVEREQxXFxcXHVEODNDW1xcXFx1REZGQlxcXFx1REZGQ1xcXFx1REZGRVxcXFx1REZGRl18XFxcXHVEODNDW1xcXFx1REYzRVxcXFx1REY3M1xcXFx1REY3Q1xcXFx1REY4NFxcXFx1REY5M1xcXFx1REZBNFxcXFx1REZBOFxcXFx1REZFQlxcXFx1REZFRF18XFxcXHVEODNEW1xcXFx1RENCQlxcXFx1RENCQ1xcXFx1REQyN1xcXFx1REQyQ1xcXFx1REU4MFxcXFx1REU5Ml18XFxcXHVEODNFKD86W1xcXFx1RERBRlxcXFx1RERCQ1xcXFx1RERCRF0oPzpcXFxcdTIwMERcXFxcdTI3QTFcXFxcdUZFMEY/KT98W1xcXFx1RERCMC1cXFxcdUREQjNdfFxcXFx1REQxRFxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZGXSkpKT98XFxcXHVERkZFKD86XFxcXHUyMDBEKD86W1xcXFx1MjY5NVxcXFx1MjY5NlxcXFx1MjcwOF1cXFxcdUZFMEY/fFxcXFx1Mjc2NFxcXFx1RkUwRj9cXFxcdTIwMEQoPzpcXFxcdUQ4M0RcXFxcdURDOEJcXFxcdTIwMEQpP1xcXFx1RDgzRVxcXFx1REREMVxcXFx1RDgzQ1tcXFxcdURGRkItXFxcXHVERkZEXFxcXHVERkZGXXxcXFxcdUQ4M0NbXFxcXHVERjNFXFxcXHVERjczXFxcXHVERjdDXFxcXHVERjg0XFxcXHVERjkzXFxcXHVERkE0XFxcXHVERkE4XFxcXHVERkVCXFxcXHVERkVEXXxcXFxcdUQ4M0RbXFxcXHVEQ0JCXFxcXHVEQ0JDXFxcXHVERDI3XFxcXHVERDJDXFxcXHVERTgwXFxcXHVERTkyXXxcXFxcdUQ4M0UoPzpbXFxcXHVEREFGXFxcXHVEREJDXFxcXHVEREJEXSg/OlxcXFx1MjAwRFxcXFx1MjdBMVxcXFx1RkUwRj8pP3xbXFxcXHVEREIwLVxcXFx1RERCM118XFxcXHVERDFEXFxcXHUyMDBEXFxcXHVEODNFXFxcXHVEREQxXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkZdKSkpP3xcXFxcdURGRkYoPzpcXFxcdTIwMEQoPzpbXFxcXHUyNjk1XFxcXHUyNjk2XFxcXHUyNzA4XVxcXFx1RkUwRj98XFxcXHUyNzY0XFxcXHVGRTBGP1xcXFx1MjAwRCg/OlxcXFx1RDgzRFxcXFx1REM4QlxcXFx1MjAwRCk/XFxcXHVEODNFXFxcXHVEREQxXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkVdfFxcXFx1RDgzQ1tcXFxcdURGM0VcXFxcdURGNzNcXFxcdURGN0NcXFxcdURGODRcXFxcdURGOTNcXFxcdURGQTRcXFxcdURGQThcXFxcdURGRUJcXFxcdURGRURdfFxcXFx1RDgzRFtcXFxcdURDQkJcXFxcdURDQkNcXFxcdUREMjdcXFxcdUREMkNcXFxcdURFODBcXFxcdURFOTJdfFxcXFx1RDgzRSg/OltcXFxcdUREQUZcXFxcdUREQkNcXFxcdUREQkRdKD86XFxcXHUyMDBEXFxcXHUyN0ExXFxcXHVGRTBGPyk/fFtcXFxcdUREQjAtXFxcXHVEREIzXXxcXFxcdUREMURcXFxcdTIwMERcXFxcdUQ4M0VcXFxcdURERDFcXFxcdUQ4M0NbXFxcXHVERkZCLVxcXFx1REZGRl0pKSk/KSk/fFxcXFx1REVGMSg/OlxcXFx1RDgzQyg/OlxcXFx1REZGQig/OlxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REVGMlxcXFx1RDgzQ1tcXFxcdURGRkMtXFxcXHVERkZGXSk/fFxcXFx1REZGQyg/OlxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REVGMlxcXFx1RDgzQ1tcXFxcdURGRkJcXFxcdURGRkQtXFxcXHVERkZGXSk/fFxcXFx1REZGRCg/OlxcXFx1MjAwRFxcXFx1RDgzRVxcXFx1REVGMlxcXFx1RDgzQ1tcXFxcdURGRkJcXFxcdURGRkNcXFxcdURGRkVcXFxcdURGRkZdKT98XFxcXHVERkZFKD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVERUYyXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkRcXFxcdURGRkZdKT98XFxcXHVERkZGKD86XFxcXHUyMDBEXFxcXHVEODNFXFxcXHVERUYyXFxcXHVEODNDW1xcXFx1REZGQi1cXFxcdURGRkVdKT8pKT8pL2c7ZnVuY3Rpb24gTWkobil7cmV0dXJuIG49PW51bGw/bjpuLnNoaWZ0VG8oXFxcInllYXJzXFxcIixcXFwibW9udGhzXFxcIixcXFwid2Vla3NcXFwiLFxcXCJkYXlzXFxcIixcXFwiaG91cnNcXFwiLFxcXCJtaW51dGVzXFxcIixcXFwic2Vjb25kc1xcXCIsXFxcIm1pbGxpc2Vjb25kc1xcXCIpLm5vcm1hbGl6ZSgpfWZ1bmN0aW9uIGphKG4sZSx0LHIpe3JldHVybiBuLnNlY29uZD09MCYmbi5taW51dGU9PTAmJm4uaG91cj09MD9uLnRvTG9jYWwoKS50b0Zvcm1hdChlLHtsb2NhbGU6cn0pOm4udG9Mb2NhbCgpLnRvRm9ybWF0KHQse2xvY2FsZTpyfSl9ZnVuY3Rpb24gcWEobil7bj1NaShuKTtsZXQgZT1cXFwiXFxcIjtyZXR1cm4gbi55ZWFycyYmKGUrPWAke24ueWVhcnN9IHllYXJzLCBgKSxuLm1vbnRocyYmKGUrPWAke24ubW9udGhzfSBtb250aHMsIGApLG4ud2Vla3MmJihlKz1gJHtuLndlZWtzfSB3ZWVrcywgYCksbi5kYXlzJiYoZSs9YCR7bi5kYXlzfSBkYXlzLCBgKSxuLmhvdXJzJiYoZSs9YCR7bi5ob3Vyc30gaG91cnMsIGApLG4ubWludXRlcyYmKGUrPWAke24ubWludXRlc30gbWludXRlcywgYCksbi5zZWNvbmRzJiYoZSs9YCR7TWF0aC5yb3VuZChuLnNlY29uZHMpfSBzZWNvbmRzLCBgKSxuLm1pbGxpc2Vjb25kcyYmKGUrPWAke01hdGgucm91bmQobi5taWxsaXNlY29uZHMpfSBtcywgYCksZS5lbmRzV2l0aChcXFwiLCBcXFwiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0yKSksZX1mdW5jdGlvbiBFbihuKXtyZXR1cm4gbi5pbmNsdWRlcyhcXFwiL1xcXCIpJiYobj1uLnN1YnN0cmluZyhuLmxhc3RJbmRleE9mKFxcXCIvXFxcIikrMSkpLG4uZW5kc1dpdGgoXFxcIi5tZFxcXCIpJiYobj1uLnN1YnN0cmluZygwLG4ubGVuZ3RoLTMpKSxufWZ1bmN0aW9uIFZhKG4pe3JldHVybiBuLmluY2x1ZGVzKFxcXCIuXFxcIik/bi5zdWJzdHJpbmcobi5sYXN0SW5kZXhPZihcXFwiLlxcXCIpKzEpOlxcXCJcXFwifXZhciBVYz1idC5hbHQoYnQucmVnZXgobmV3IFJlZ0V4cChGbigpLFxcXCJcXFwiKSksYnQucmVnZXgoL1swLTlcXFxccHtMZXR0ZXJ9Xy1dKy91KSxidC53aGl0ZXNwYWNlLm1hcChuPT5cXFwiIFxcXCIpLGJ0LmFueS5tYXAobj0+XFxcIiBcXFwiKSkubWFueSgpLm1hcChuPT5uLmpvaW4oXFxcIlxcXCIpLnNwbGl0KC9cXFxccysvKS5qb2luKFxcXCIgXFxcIikudHJpbSgpKTtmdW5jdGlvbiBVYShuKXtyZXR1cm4gVWMudHJ5UGFyc2Uobil9dmFyIE9lPWNsYXNzIG57c3RhdGljIGZpbGUoZSx0PSExLHIpe3JldHVybiBuZXcgbih7cGF0aDplLGVtYmVkOnQsZGlzcGxheTpyLHN1YnBhdGg6dm9pZCAwLHR5cGU6XFxcImZpbGVcXFwifSl9c3RhdGljIGluZmVyKGUsdD0hMSxyKXtpZihlLmluY2x1ZGVzKFxcXCIjXlxcXCIpKXtsZXQgcz1lLnNwbGl0KFxcXCIjXlxcXCIpO3JldHVybiBuLmJsb2NrKHNbMF0sc1sxXSx0LHIpfWVsc2UgaWYoZS5pbmNsdWRlcyhcXFwiI1xcXCIpKXtsZXQgcz1lLnNwbGl0KFxcXCIjXFxcIik7cmV0dXJuIG4uaGVhZGVyKHNbMF0sc1sxXSx0LHIpfWVsc2UgcmV0dXJuIG4uZmlsZShlLHQscil9c3RhdGljIGhlYWRlcihlLHQscixzKXtyZXR1cm4gbmV3IG4oe3BhdGg6ZSxlbWJlZDpyLGRpc3BsYXk6cyxzdWJwYXRoOlVhKHQpLHR5cGU6XFxcImhlYWRlclxcXCJ9KX1zdGF0aWMgYmxvY2soZSx0LHIscyl7cmV0dXJuIG5ldyBuKHtwYXRoOmUsZW1iZWQ6cixkaXNwbGF5OnMsc3VicGF0aDp0LHR5cGU6XFxcImJsb2NrXFxcIn0pfXN0YXRpYyBmcm9tT2JqZWN0KGUpe3JldHVybiBuZXcgbihlKX1zdGF0aWMgcGFyc2VJbm5lcihlKXtsZXRbdCxyXT1LYyhlKTtyZXR1cm4gbi5pbmZlcih0LCExLHIpfWNvbnN0cnVjdG9yKGUpe09iamVjdC5hc3NpZ24odGhpcyxlKX13aXRoUGF0aChlKXtyZXR1cm4gbmV3IG4oT2JqZWN0LmFzc2lnbih7fSx0aGlzLHtwYXRoOmV9KSl9d2l0aERpc3BsYXkoZSl7cmV0dXJuIG5ldyBuKE9iamVjdC5hc3NpZ24oe30sdGhpcyx7ZGlzcGxheTplfSkpfXdpdGhFbWJlZChlKXtyZXR1cm4gdGhpcy5lbWJlZD09ZT90aGlzOm5ldyBuKE9iamVjdC5hc3NpZ24oe30sdGhpcyx7ZW1iZWQ6ZX0pKX13aXRoSGVhZGVyKGUpe3JldHVybiBuLmhlYWRlcih0aGlzLnBhdGgsZSx0aGlzLmVtYmVkLHRoaXMuZGlzcGxheSl9d2l0aEJsb2NrKGUpe3JldHVybiBuLmJsb2NrKHRoaXMucGF0aCxlLHRoaXMuZW1iZWQsdGhpcy5kaXNwbGF5KX1lcXVhbHMoZSl7cmV0dXJuIGU9PW51bGx8fGU9PW51bGw/ITE6dGhpcy5wYXRoPT1lLnBhdGgmJnRoaXMudHlwZT09ZS50eXBlJiZ0aGlzLnN1YnBhdGg9PWUuc3VicGF0aH10b1N0cmluZygpe3JldHVybiB0aGlzLm1hcmtkb3duKCl9dG9PYmplY3QoKXtyZXR1cm57cGF0aDp0aGlzLnBhdGgsdHlwZTp0aGlzLnR5cGUsc3VicGF0aDp0aGlzLnN1YnBhdGgsZGlzcGxheTp0aGlzLmRpc3BsYXksZW1iZWQ6dGhpcy5lbWJlZH19dG9GaWxlKCl7cmV0dXJuIG4uZmlsZSh0aGlzLnBhdGgsdGhpcy5lbWJlZCx0aGlzLmRpc3BsYXkpfXRvRW1iZWQoKXtyZXR1cm4gdGhpcy53aXRoRW1iZWQoITApfWZyb21FbWJlZCgpe3JldHVybiB0aGlzLndpdGhFbWJlZCghMSl9bWFya2Rvd24oKXtsZXQgZT0odGhpcy5lbWJlZD9cXFwiIVxcXCI6XFxcIlxcXCIpK1xcXCJbW1xcXCIrdGhpcy5vYnNpZGlhbkxpbmsoKTtyZXR1cm4gZSs9XFxcInxcXFwiLGUrPXRoaXMuZGlzcGxheU9yRGVmYXVsdCgpLGUrPVxcXCJdXVxcXCIsZX1kaXNwbGF5T3JEZWZhdWx0KCl7aWYodGhpcy5kaXNwbGF5KXJldHVybiB0aGlzLmRpc3BsYXk7e2xldCBlPUVuKHRoaXMucGF0aCk7cmV0dXJuKHRoaXMudHlwZT09XFxcImhlYWRlclxcXCJ8fHRoaXMudHlwZT09XFxcImJsb2NrXFxcIikmJihlKz1cXFwiID4gXFxcIit0aGlzLnN1YnBhdGgpLGV9fW9ic2lkaWFuTGluaygpe3ZhciB0LHI7bGV0IGU9dGhpcy5wYXRoLnJlcGxhY2UoXFxcInxcXFwiLFxcXCJcXFxcXFxcXHxcXFwiKTtyZXR1cm4gdGhpcy50eXBlPT1cXFwiaGVhZGVyXFxcIj9lK1xcXCIjXFxcIisoKHQ9dGhpcy5zdWJwYXRoKT09bnVsbD92b2lkIDA6dC5yZXBsYWNlKFxcXCJ8XFxcIixcXFwiXFxcXFxcXFx8XFxcIikpOnRoaXMudHlwZT09XFxcImJsb2NrXFxcIj9lK1xcXCIjXlxcXCIrKChyPXRoaXMuc3VicGF0aCk9PW51bGw/dm9pZCAwOnIucmVwbGFjZShcXFwifFxcXCIsXFxcIlxcXFxcXFxcfFxcXCIpKTplfWZpbGVOYW1lKCl7cmV0dXJuIEVuKHRoaXMucGF0aCl9fTtmdW5jdGlvbiBLYyhuKXtsZXQgZT0tMTtmb3IoOyhlPW4uaW5kZXhPZihcXFwifFxcXCIsZSsxKSk+PTA7KWlmKCEoZT4wJiZuW2UtMV09PVxcXCJcXFxcXFxcXFxcXCIpKXJldHVybltuLnN1YnN0cmluZygwLGUpLnJlcGxhY2UoL1xcXFxcXFxcXFxcXHwvZyxcXFwifFxcXCIpLG4uc3Vic3RyaW5nKGUrMSldO3JldHVybltuLnJlcGxhY2UoL1xcXFxcXFxcXFxcXHwvZyxcXFwifFxcXCIpLHZvaWQgMF19dmFyIHJzPVN5bWJvbC5mb3IoXFxcInlhbWwuYWxpYXNcXFwiKSxzcz1TeW1ib2wuZm9yKFxcXCJ5YW1sLmRvY3VtZW50XFxcIiksS2U9U3ltYm9sLmZvcihcXFwieWFtbC5tYXBcXFwiKSxfaT1TeW1ib2wuZm9yKFxcXCJ5YW1sLnBhaXJcXFwiKSxJZT1TeW1ib2wuZm9yKFxcXCJ5YW1sLnNjYWxhclxcXCIpLEZ0PVN5bWJvbC5mb3IoXFxcInlhbWwuc2VxXFxcIiksVGU9U3ltYm9sLmZvcihcXFwieWFtbC5ub2RlLnR5cGVcXFwiKSxXZT1uPT4hIW4mJnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIiYmbltUZV09PT1ycyxydD1uPT4hIW4mJnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIiYmbltUZV09PT1zcyxIZT1uPT4hIW4mJnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIiYmbltUZV09PT1LZSxIPW49PiEhbiYmdHlwZW9mIG49PVxcXCJvYmplY3RcXFwiJiZuW1RlXT09PV9pLEs9bj0+ISFuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm5bVGVdPT09SWUsSmU9bj0+ISFuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJm5bVGVdPT09RnQ7ZnVuY3Rpb24gWihuKXtpZihuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCIpc3dpdGNoKG5bVGVdKXtjYXNlIEtlOmNhc2UgRnQ6cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gSihuKXtpZihuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCIpc3dpdGNoKG5bVGVdKXtjYXNlIHJzOmNhc2UgS2U6Y2FzZSBJZTpjYXNlIEZ0OnJldHVybiEwfXJldHVybiExfXZhciBLYT1uPT4oSyhuKXx8WihuKSkmJiEhbi5hbmNob3I7dmFyIENlPVN5bWJvbChcXFwiYnJlYWsgdmlzaXRcXFwiKSxXYT1TeW1ib2woXFxcInNraXAgY2hpbGRyZW5cXFwiKSxzdD1TeW1ib2woXFxcInJlbW92ZSBub2RlXFxcIik7ZnVuY3Rpb24gemUobixlKXtsZXQgdD1IYShlKTtydChuKT93bihudWxsLG4uY29udGVudHMsdCxPYmplY3QuZnJlZXplKFtuXSkpPT09c3QmJihuLmNvbnRlbnRzPW51bGwpOnduKG51bGwsbix0LE9iamVjdC5mcmVlemUoW10pKX16ZS5CUkVBSz1DZTt6ZS5TS0lQPVdhO3plLlJFTU9WRT1zdDtmdW5jdGlvbiB3bihuLGUsdCxyKXtsZXQgcz1KYShuLGUsdCxyKTtpZihKKHMpfHxIKHMpKXJldHVybiB6YShuLHIscyksd24obixzLHQscik7aWYodHlwZW9mIHMhPVxcXCJzeW1ib2xcXFwiKXtpZihaKGUpKXtyPU9iamVjdC5mcmVlemUoci5jb25jYXQoZSkpO2ZvcihsZXQgaT0wO2k8ZS5pdGVtcy5sZW5ndGg7KytpKXtsZXQgbz13bihpLGUuaXRlbXNbaV0sdCxyKTtpZih0eXBlb2Ygbz09XFxcIm51bWJlclxcXCIpaT1vLTE7ZWxzZXtpZihvPT09Q2UpcmV0dXJuIENlO289PT1zdCYmKGUuaXRlbXMuc3BsaWNlKGksMSksaS09MSl9fX1lbHNlIGlmKEgoZSkpe3I9T2JqZWN0LmZyZWV6ZShyLmNvbmNhdChlKSk7bGV0IGk9d24oXFxcImtleVxcXCIsZS5rZXksdCxyKTtpZihpPT09Q2UpcmV0dXJuIENlO2k9PT1zdCYmKGUua2V5PW51bGwpO2xldCBvPXduKFxcXCJ2YWx1ZVxcXCIsZS52YWx1ZSx0LHIpO2lmKG89PT1DZSlyZXR1cm4gQ2U7bz09PXN0JiYoZS52YWx1ZT1udWxsKX19cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gaXMobixlKXtsZXQgdD1IYShlKTtydChuKT9hd2FpdCBUbihudWxsLG4uY29udGVudHMsdCxPYmplY3QuZnJlZXplKFtuXSkpPT09c3QmJihuLmNvbnRlbnRzPW51bGwpOmF3YWl0IFRuKG51bGwsbix0LE9iamVjdC5mcmVlemUoW10pKX1pcy5CUkVBSz1DZTtpcy5TS0lQPVdhO2lzLlJFTU9WRT1zdDthc3luYyBmdW5jdGlvbiBUbihuLGUsdCxyKXtsZXQgcz1hd2FpdCBKYShuLGUsdCxyKTtpZihKKHMpfHxIKHMpKXJldHVybiB6YShuLHIscyksVG4obixzLHQscik7aWYodHlwZW9mIHMhPVxcXCJzeW1ib2xcXFwiKXtpZihaKGUpKXtyPU9iamVjdC5mcmVlemUoci5jb25jYXQoZSkpO2ZvcihsZXQgaT0wO2k8ZS5pdGVtcy5sZW5ndGg7KytpKXtsZXQgbz1hd2FpdCBUbihpLGUuaXRlbXNbaV0sdCxyKTtpZih0eXBlb2Ygbz09XFxcIm51bWJlclxcXCIpaT1vLTE7ZWxzZXtpZihvPT09Q2UpcmV0dXJuIENlO289PT1zdCYmKGUuaXRlbXMuc3BsaWNlKGksMSksaS09MSl9fX1lbHNlIGlmKEgoZSkpe3I9T2JqZWN0LmZyZWV6ZShyLmNvbmNhdChlKSk7bGV0IGk9YXdhaXQgVG4oXFxcImtleVxcXCIsZS5rZXksdCxyKTtpZihpPT09Q2UpcmV0dXJuIENlO2k9PT1zdCYmKGUua2V5PW51bGwpO2xldCBvPWF3YWl0IFRuKFxcXCJ2YWx1ZVxcXCIsZS52YWx1ZSx0LHIpO2lmKG89PT1DZSlyZXR1cm4gQ2U7bz09PXN0JiYoZS52YWx1ZT1udWxsKX19cmV0dXJuIHN9ZnVuY3Rpb24gSGEobil7cmV0dXJuIHR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIiYmKG4uQ29sbGVjdGlvbnx8bi5Ob2RlfHxuLlZhbHVlKT9PYmplY3QuYXNzaWduKHtBbGlhczpuLk5vZGUsTWFwOm4uTm9kZSxTY2FsYXI6bi5Ob2RlLFNlcTpuLk5vZGV9LG4uVmFsdWUmJntNYXA6bi5WYWx1ZSxTY2FsYXI6bi5WYWx1ZSxTZXE6bi5WYWx1ZX0sbi5Db2xsZWN0aW9uJiZ7TWFwOm4uQ29sbGVjdGlvbixTZXE6bi5Db2xsZWN0aW9ufSxuKTpufWZ1bmN0aW9uIEphKG4sZSx0LHIpe3ZhciBzLGksbyxhLHU7aWYodHlwZW9mIHQ9PVxcXCJmdW5jdGlvblxcXCIpcmV0dXJuIHQobixlLHIpO2lmKEhlKGUpKXJldHVybihzPXQuTWFwKT09bnVsbD92b2lkIDA6cy5jYWxsKHQsbixlLHIpO2lmKEplKGUpKXJldHVybihpPXQuU2VxKT09bnVsbD92b2lkIDA6aS5jYWxsKHQsbixlLHIpO2lmKEgoZSkpcmV0dXJuKG89dC5QYWlyKT09bnVsbD92b2lkIDA6by5jYWxsKHQsbixlLHIpO2lmKEsoZSkpcmV0dXJuKGE9dC5TY2FsYXIpPT1udWxsP3ZvaWQgMDphLmNhbGwodCxuLGUscik7aWYoV2UoZSkpcmV0dXJuKHU9dC5BbGlhcyk9PW51bGw/dm9pZCAwOnUuY2FsbCh0LG4sZSxyKX1mdW5jdGlvbiB6YShuLGUsdCl7bGV0IHI9ZVtlLmxlbmd0aC0xXTtpZihaKHIpKXIuaXRlbXNbbl09dDtlbHNlIGlmKEgocikpbj09PVxcXCJrZXlcXFwiP3Iua2V5PXQ6ci52YWx1ZT10O2Vsc2UgaWYocnQocikpci5jb250ZW50cz10O2Vsc2V7bGV0IHM9V2Uocik/XFxcImFsaWFzXFxcIjpcXFwic2NhbGFyXFxcIjt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXBsYWNlIG5vZGUgd2l0aCAke3N9IHBhcmVudGApfX12YXIgV2M9e1xcXCIhXFxcIjpcXFwiJTIxXFxcIixcXFwiLFxcXCI6XFxcIiUyQ1xcXCIsXFxcIltcXFwiOlxcXCIlNUJcXFwiLFxcXCJdXFxcIjpcXFwiJTVEXFxcIixcXFwie1xcXCI6XFxcIiU3QlxcXCIsXFxcIn1cXFwiOlxcXCIlN0RcXFwifSxIYz1uPT5uLnJlcGxhY2UoL1shLFtcXFxcXXt9XS9nLGU9PldjW2VdKSxpdD1jbGFzcyBue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kb2NTdGFydD1udWxsLHRoaXMuZG9jRW5kPSExLHRoaXMueWFtbD1PYmplY3QuYXNzaWduKHt9LG4uZGVmYXVsdFlhbWwsZSksdGhpcy50YWdzPU9iamVjdC5hc3NpZ24oe30sbi5kZWZhdWx0VGFncyx0KX1jbG9uZSgpe2xldCBlPW5ldyBuKHRoaXMueWFtbCx0aGlzLnRhZ3MpO3JldHVybiBlLmRvY1N0YXJ0PXRoaXMuZG9jU3RhcnQsZX1hdERvY3VtZW50KCl7bGV0IGU9bmV3IG4odGhpcy55YW1sLHRoaXMudGFncyk7c3dpdGNoKHRoaXMueWFtbC52ZXJzaW9uKXtjYXNlXFxcIjEuMVxcXCI6dGhpcy5hdE5leHREb2N1bWVudD0hMDticmVhaztjYXNlXFxcIjEuMlxcXCI6dGhpcy5hdE5leHREb2N1bWVudD0hMSx0aGlzLnlhbWw9e2V4cGxpY2l0Om4uZGVmYXVsdFlhbWwuZXhwbGljaXQsdmVyc2lvbjpcXFwiMS4yXFxcIn0sdGhpcy50YWdzPU9iamVjdC5hc3NpZ24oe30sbi5kZWZhdWx0VGFncyk7YnJlYWt9cmV0dXJuIGV9YWRkKGUsdCl7dGhpcy5hdE5leHREb2N1bWVudCYmKHRoaXMueWFtbD17ZXhwbGljaXQ6bi5kZWZhdWx0WWFtbC5leHBsaWNpdCx2ZXJzaW9uOlxcXCIxLjFcXFwifSx0aGlzLnRhZ3M9T2JqZWN0LmFzc2lnbih7fSxuLmRlZmF1bHRUYWdzKSx0aGlzLmF0TmV4dERvY3VtZW50PSExKTtsZXQgcj1lLnRyaW0oKS5zcGxpdCgvWyBcXFxcdF0rLykscz1yLnNoaWZ0KCk7c3dpdGNoKHMpe2Nhc2VcXFwiJVRBR1xcXCI6e2lmKHIubGVuZ3RoIT09MiYmKHQoMCxcXFwiJVRBRyBkaXJlY3RpdmUgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSB0d28gcGFydHNcXFwiKSxyLmxlbmd0aDwyKSlyZXR1cm4hMTtsZXRbaSxvXT1yO3JldHVybiB0aGlzLnRhZ3NbaV09bywhMH1jYXNlXFxcIiVZQU1MXFxcIjp7aWYodGhpcy55YW1sLmV4cGxpY2l0PSEwLHIubGVuZ3RoIT09MSlyZXR1cm4gdCgwLFxcXCIlWUFNTCBkaXJlY3RpdmUgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSBvbmUgcGFydFxcXCIpLCExO2xldFtpXT1yO2lmKGk9PT1cXFwiMS4xXFxcInx8aT09PVxcXCIxLjJcXFwiKXJldHVybiB0aGlzLnlhbWwudmVyc2lvbj1pLCEwO3tsZXQgbz0vXlxcXFxkK1xcXFwuXFxcXGQrJC8udGVzdChpKTtyZXR1cm4gdCg2LGBVbnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gJHtpfWAsbyksITF9fWRlZmF1bHQ6cmV0dXJuIHQoMCxgVW5rbm93biBkaXJlY3RpdmUgJHtzfWAsITApLCExfX10YWdOYW1lKGUsdCl7aWYoZT09PVxcXCIhXFxcIilyZXR1cm5cXFwiIVxcXCI7aWYoZVswXSE9PVxcXCIhXFxcIilyZXR1cm4gdChgTm90IGEgdmFsaWQgdGFnOiAke2V9YCksbnVsbDtpZihlWzFdPT09XFxcIjxcXFwiKXtsZXQgbz1lLnNsaWNlKDIsLTEpO3JldHVybiBvPT09XFxcIiFcXFwifHxvPT09XFxcIiEhXFxcIj8odChgVmVyYmF0aW0gdGFncyBhcmVuJ3QgcmVzb2x2ZWQsIHNvICR7ZX0gaXMgaW52YWxpZC5gKSxudWxsKTooZVtlLmxlbmd0aC0xXSE9PVxcXCI+XFxcIiYmdChcXFwiVmVyYmF0aW0gdGFncyBtdXN0IGVuZCB3aXRoIGEgPlxcXCIpLG8pfWxldFsscixzXT1lLm1hdGNoKG5ldyBSZWdFeHAoXFxcIl4oLiohKShbXiFdKikkXFxcIixcXFwic1xcXCIpKTtzfHx0KGBUaGUgJHtlfSB0YWcgaGFzIG5vIHN1ZmZpeGApO2xldCBpPXRoaXMudGFnc1tyXTtpZihpKXRyeXtyZXR1cm4gaStkZWNvZGVVUklDb21wb25lbnQocyl9Y2F0Y2gobyl7cmV0dXJuIHQoU3RyaW5nKG8pKSxudWxsfXJldHVybiByPT09XFxcIiFcXFwiP2U6KHQoYENvdWxkIG5vdCByZXNvbHZlIHRhZzogJHtlfWApLG51bGwpfXRhZ1N0cmluZyhlKXtmb3IobGV0W3Qscl1vZiBPYmplY3QuZW50cmllcyh0aGlzLnRhZ3MpKWlmKGUuc3RhcnRzV2l0aChyKSlyZXR1cm4gdCtIYyhlLnN1YnN0cmluZyhyLmxlbmd0aCkpO3JldHVybiBlWzBdPT09XFxcIiFcXFwiP2U6YCE8JHtlfT5gfXRvU3RyaW5nKGUpe2xldCB0PXRoaXMueWFtbC5leHBsaWNpdD9bYCVZQU1MICR7dGhpcy55YW1sLnZlcnNpb258fFxcXCIxLjJcXFwifWBdOltdLHI9T2JqZWN0LmVudHJpZXModGhpcy50YWdzKSxzO2lmKGUmJnIubGVuZ3RoPjAmJkooZS5jb250ZW50cykpe2xldCBpPXt9O3plKGUuY29udGVudHMsKG8sYSk9PntKKGEpJiZhLnRhZyYmKGlbYS50YWddPSEwKX0pLHM9T2JqZWN0LmtleXMoaSl9ZWxzZSBzPVtdO2ZvcihsZXRbaSxvXW9mIHIpaT09PVxcXCIhIVxcXCImJm89PT1cXFwidGFnOnlhbWwub3JnLDIwMDI6XFxcInx8KCFlfHxzLnNvbWUoYT0+YS5zdGFydHNXaXRoKG8pKSkmJnQucHVzaChgJVRBRyAke2l9ICR7b31gKTtyZXR1cm4gdC5qb2luKGBcXG5gKX19O2l0LmRlZmF1bHRZYW1sPXtleHBsaWNpdDohMSx2ZXJzaW9uOlxcXCIxLjJcXFwifTtpdC5kZWZhdWx0VGFncz17XFxcIiEhXFxcIjpcXFwidGFnOnlhbWwub3JnLDIwMDI6XFxcIn07ZnVuY3Rpb24gb3Mobil7aWYoL1tcXFxceDAwLVxcXFx4MTlcXFxccyxbXFxcXF17fV0vLnRlc3Qobikpe2xldCB0PWBBbmNob3IgbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlIG9yIGNvbnRyb2wgY2hhcmFjdGVyczogJHtKU09OLnN0cmluZ2lmeShuKX1gO3Rocm93IG5ldyBFcnJvcih0KX1yZXR1cm4hMH1mdW5jdGlvbiBCaShuKXtsZXQgZT1uZXcgU2V0O3JldHVybiB6ZShuLHtWYWx1ZSh0LHIpe3IuYW5jaG9yJiZlLmFkZChyLmFuY2hvcil9fSksZX1mdW5jdGlvbiBQaShuLGUpe2ZvcihsZXQgdD0xOzsrK3Qpe2xldCByPWAke259JHt0fWA7aWYoIWUuaGFzKHIpKXJldHVybiByfX1mdW5jdGlvbiBZYShuLGUpe2xldCB0PVtdLHI9bmV3IE1hcCxzPW51bGw7cmV0dXJue29uQW5jaG9yOmk9Pnt0LnB1c2goaSksc3x8KHM9QmkobikpO2xldCBvPVBpKGUscyk7cmV0dXJuIHMuYWRkKG8pLG99LHNldEFuY2hvcnM6KCk9Pntmb3IobGV0IGkgb2YgdCl7bGV0IG89ci5nZXQoaSk7aWYodHlwZW9mIG89PVxcXCJvYmplY3RcXFwiJiZvLmFuY2hvciYmKEsoby5ub2RlKXx8WihvLm5vZGUpKSlvLm5vZGUuYW5jaG9yPW8uYW5jaG9yO2Vsc2V7bGV0IGE9bmV3IEVycm9yKFxcXCJGYWlsZWQgdG8gcmVzb2x2ZSByZXBlYXRlZCBvYmplY3QgKHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4pXFxcIik7dGhyb3cgYS5zb3VyY2U9aSxhfX19LHNvdXJjZU9iamVjdHM6cn19ZnVuY3Rpb24geHQobixlLHQscil7aWYociYmdHlwZW9mIHI9PVxcXCJvYmplY3RcXFwiKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBzPTAsaT1yLmxlbmd0aDtzPGk7KytzKXtsZXQgbz1yW3NdLGE9eHQobixyLFN0cmluZyhzKSxvKTthPT09dm9pZCAwP2RlbGV0ZSByW3NdOmEhPT1vJiYocltzXT1hKX1lbHNlIGlmKHIgaW5zdGFuY2VvZiBNYXApZm9yKGxldCBzIG9mIEFycmF5LmZyb20oci5rZXlzKCkpKXtsZXQgaT1yLmdldChzKSxvPXh0KG4scixzLGkpO289PT12b2lkIDA/ci5kZWxldGUocyk6byE9PWkmJnIuc2V0KHMsbyl9ZWxzZSBpZihyIGluc3RhbmNlb2YgU2V0KWZvcihsZXQgcyBvZiBBcnJheS5mcm9tKHIpKXtsZXQgaT14dChuLHIscyxzKTtpPT09dm9pZCAwP3IuZGVsZXRlKHMpOmkhPT1zJiYoci5kZWxldGUocyksci5hZGQoaSkpfWVsc2UgZm9yKGxldFtzLGldb2YgT2JqZWN0LmVudHJpZXMocikpe2xldCBvPXh0KG4scixzLGkpO289PT12b2lkIDA/ZGVsZXRlIHJbc106byE9PWkmJihyW3NdPW8pfXJldHVybiBuLmNhbGwoZSx0LHIpfWZ1bmN0aW9uIGNlKG4sZSx0KXtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiBuLm1hcCgocixzKT0+Y2UocixTdHJpbmcocyksdCkpO2lmKG4mJnR5cGVvZiBuLnRvSlNPTj09XFxcImZ1bmN0aW9uXFxcIil7aWYoIXR8fCFLYShuKSlyZXR1cm4gbi50b0pTT04oZSx0KTtsZXQgcj17YWxpYXNDb3VudDowLGNvdW50OjEscmVzOnZvaWQgMH07dC5hbmNob3JzLnNldChuLHIpLHQub25DcmVhdGU9aT0+e3IucmVzPWksZGVsZXRlIHQub25DcmVhdGV9O2xldCBzPW4udG9KU09OKGUsdCk7cmV0dXJuIHQub25DcmVhdGUmJnQub25DcmVhdGUocyksc31yZXR1cm4gdHlwZW9mIG49PVxcXCJiaWdpbnRcXFwiJiYhKHQhPW51bGwmJnQua2VlcCk/TnVtYmVyKG4pOm59dmFyIE90PWNsYXNze2NvbnN0cnVjdG9yKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFRlLHt2YWx1ZTplfSl9Y2xvbmUoKXtsZXQgZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0aGlzKSk7cmV0dXJuIHRoaXMucmFuZ2UmJihlLnJhbmdlPXRoaXMucmFuZ2Uuc2xpY2UoKSksZX10b0pTKGUse21hcEFzTWFwOnQsbWF4QWxpYXNDb3VudDpyLG9uQW5jaG9yOnMscmV2aXZlcjppfT17fSl7aWYoIXJ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkEgZG9jdW1lbnQgYXJndW1lbnQgaXMgcmVxdWlyZWRcXFwiKTtsZXQgbz17YW5jaG9yczpuZXcgTWFwLGRvYzplLGtlZXA6ITAsbWFwQXNNYXA6dD09PSEwLG1hcEtleVdhcm5lZDohMSxtYXhBbGlhc0NvdW50OnR5cGVvZiByPT1cXFwibnVtYmVyXFxcIj9yOjEwMH0sYT1jZSh0aGlzLFxcXCJcXFwiLG8pO2lmKHR5cGVvZiBzPT1cXFwiZnVuY3Rpb25cXFwiKWZvcihsZXR7Y291bnQ6dSxyZXM6bH1vZiBvLmFuY2hvcnMudmFsdWVzKCkpcyhsLHUpO3JldHVybiB0eXBlb2YgaT09XFxcImZ1bmN0aW9uXFxcIj94dChpLHtcXFwiXFxcIjphfSxcXFwiXFxcIixhKTphfX07dmFyIEV0PWNsYXNzIGV4dGVuZHMgT3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocnMpLHRoaXMuc291cmNlPWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXFxcInRhZ1xcXCIse3NldCgpe3Rocm93IG5ldyBFcnJvcihcXFwiQWxpYXMgbm9kZXMgY2Fubm90IGhhdmUgdGFnc1xcXCIpfX0pfXJlc29sdmUoZSl7bGV0IHQ7cmV0dXJuIHplKGUse05vZGU6KHIscyk9PntpZihzPT09dGhpcylyZXR1cm4gemUuQlJFQUs7cy5hbmNob3I9PT10aGlzLnNvdXJjZSYmKHQ9cyl9fSksdH10b0pTT04oZSx0KXtpZighdClyZXR1cm57c291cmNlOnRoaXMuc291cmNlfTtsZXR7YW5jaG9yczpyLGRvYzpzLG1heEFsaWFzQ291bnQ6aX09dCxvPXRoaXMucmVzb2x2ZShzKTtpZighbyl7bGV0IHU9YFVucmVzb2x2ZWQgYWxpYXMgKHRoZSBhbmNob3IgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBhbGlhcyk6ICR7dGhpcy5zb3VyY2V9YDt0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IodSl9bGV0IGE9ci5nZXQobyk7aWYoYXx8KGNlKG8sbnVsbCx0KSxhPXIuZ2V0KG8pKSwhYXx8YS5yZXM9PT12b2lkIDApe2xldCB1PVxcXCJUaGlzIHNob3VsZCBub3QgaGFwcGVuOiBBbGlhcyBhbmNob3Igd2FzIG5vdCByZXNvbHZlZD9cXFwiO3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcih1KX1pZihpPj0wJiYoYS5jb3VudCs9MSxhLmFsaWFzQ291bnQ9PT0wJiYoYS5hbGlhc0NvdW50PWFzKHMsbyxyKSksYS5jb3VudCphLmFsaWFzQ291bnQ+aSkpe2xldCB1PVxcXCJFeGNlc3NpdmUgYWxpYXMgY291bnQgaW5kaWNhdGVzIGEgcmVzb3VyY2UgZXhoYXVzdGlvbiBhdHRhY2tcXFwiO3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcih1KX1yZXR1cm4gYS5yZXN9dG9TdHJpbmcoZSx0LHIpe2xldCBzPWAqJHt0aGlzLnNvdXJjZX1gO2lmKGUpe2lmKG9zKHRoaXMuc291cmNlKSxlLm9wdGlvbnMudmVyaWZ5QWxpYXNPcmRlciYmIWUuYW5jaG9ycy5oYXModGhpcy5zb3VyY2UpKXtsZXQgaT1gVW5yZXNvbHZlZCBhbGlhcyAodGhlIGFuY2hvciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGFsaWFzKTogJHt0aGlzLnNvdXJjZX1gO3Rocm93IG5ldyBFcnJvcihpKX1pZihlLmltcGxpY2l0S2V5KXJldHVybmAke3N9IGB9cmV0dXJuIHN9fTtmdW5jdGlvbiBhcyhuLGUsdCl7aWYoV2UoZSkpe2xldCByPWUucmVzb2x2ZShuKSxzPXQmJnImJnQuZ2V0KHIpO3JldHVybiBzP3MuY291bnQqcy5hbGlhc0NvdW50OjB9ZWxzZSBpZihaKGUpKXtsZXQgcj0wO2ZvcihsZXQgcyBvZiBlLml0ZW1zKXtsZXQgaT1hcyhuLHMsdCk7aT5yJiYocj1pKX1yZXR1cm4gcn1lbHNlIGlmKEgoZSkpe2xldCByPWFzKG4sZS5rZXksdCkscz1hcyhuLGUudmFsdWUsdCk7cmV0dXJuIE1hdGgubWF4KHIscyl9cmV0dXJuIDF9dmFyIHVzPW49PiFufHx0eXBlb2YgbiE9XFxcImZ1bmN0aW9uXFxcIiYmdHlwZW9mIG4hPVxcXCJvYmplY3RcXFwiLFA9Y2xhc3MgZXh0ZW5kcyBPdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihJZSksdGhpcy52YWx1ZT1lfXRvSlNPTihlLHQpe3JldHVybiB0IT1udWxsJiZ0LmtlZXA/dGhpcy52YWx1ZTpjZSh0aGlzLnZhbHVlLGUsdCl9dG9TdHJpbmcoKXtyZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpfX07UC5CTE9DS19GT0xERUQ9XFxcIkJMT0NLX0ZPTERFRFxcXCI7UC5CTE9DS19MSVRFUkFMPVxcXCJCTE9DS19MSVRFUkFMXFxcIjtQLlBMQUlOPVxcXCJQTEFJTlxcXCI7UC5RVU9URV9ET1VCTEU9XFxcIlFVT1RFX0RPVUJMRVxcXCI7UC5RVU9URV9TSU5HTEU9XFxcIlFVT1RFX1NJTkdMRVxcXCI7dmFyIEpjPVxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpcXFwiO2Z1bmN0aW9uIHpjKG4sZSx0KXt2YXIgcjtpZihlKXtsZXQgcz10LmZpbHRlcihvPT5vLnRhZz09PWUpLGk9KHI9cy5maW5kKG89PiFvLmZvcm1hdCkpIT1udWxsP3I6c1swXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYFRhZyAke2V9IG5vdCBmb3VuZGApO3JldHVybiBpfXJldHVybiB0LmZpbmQocz0+e3ZhciBpO3JldHVybigoaT1zLmlkZW50aWZ5KT09bnVsbD92b2lkIDA6aS5jYWxsKHMsbikpJiYhcy5mb3JtYXR9KX1mdW5jdGlvbiB3dChuLGUsdCl7dmFyIGQsbSxoO2lmKHJ0KG4pJiYobj1uLmNvbnRlbnRzKSxKKG4pKXJldHVybiBuO2lmKEgobikpe2xldCBiPShtPShkPXQuc2NoZW1hW0tlXSkuY3JlYXRlTm9kZSk9PW51bGw/dm9pZCAwOm0uY2FsbChkLHQuc2NoZW1hLG51bGwsdCk7cmV0dXJuIGIuaXRlbXMucHVzaChuKSxifShuIGluc3RhbmNlb2YgU3RyaW5nfHxuIGluc3RhbmNlb2YgTnVtYmVyfHxuIGluc3RhbmNlb2YgQm9vbGVhbnx8dHlwZW9mIEJpZ0ludCE9XFxcInVuZGVmaW5lZFxcXCImJm4gaW5zdGFuY2VvZiBCaWdJbnQpJiYobj1uLnZhbHVlT2YoKSk7bGV0e2FsaWFzRHVwbGljYXRlT2JqZWN0czpyLG9uQW5jaG9yOnMsb25UYWdPYmo6aSxzY2hlbWE6byxzb3VyY2VPYmplY3RzOmF9PXQsdTtpZihyJiZuJiZ0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCIpe2lmKHU9YS5nZXQobiksdSlyZXR1cm4gdS5hbmNob3J8fCh1LmFuY2hvcj1zKG4pKSxuZXcgRXQodS5hbmNob3IpO3U9e2FuY2hvcjpudWxsLG5vZGU6bnVsbH0sYS5zZXQobix1KX1lIT1udWxsJiZlLnN0YXJ0c1dpdGgoXFxcIiEhXFxcIikmJihlPUpjK2Uuc2xpY2UoMikpO2xldCBsPXpjKG4sZSxvLnRhZ3MpO2lmKCFsKXtpZihuJiZ0eXBlb2Ygbi50b0pTT049PVxcXCJmdW5jdGlvblxcXCImJihuPW4udG9KU09OKCkpLCFufHx0eXBlb2YgbiE9XFxcIm9iamVjdFxcXCIpe2xldCBiPW5ldyBQKG4pO3JldHVybiB1JiYodS5ub2RlPWIpLGJ9bD1uIGluc3RhbmNlb2YgTWFwP29bS2VdOlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3Qobik/b1tGdF06b1tLZV19aSYmKGkobCksZGVsZXRlIHQub25UYWdPYmopO2xldCBmPWwhPW51bGwmJmwuY3JlYXRlTm9kZT9sLmNyZWF0ZU5vZGUodC5zY2hlbWEsbix0KTp0eXBlb2YoKGg9bD09bnVsbD92b2lkIDA6bC5ub2RlQ2xhc3MpPT1udWxsP3ZvaWQgMDpoLmZyb20pPT1cXFwiZnVuY3Rpb25cXFwiP2wubm9kZUNsYXNzLmZyb20odC5zY2hlbWEsbix0KTpuZXcgUChuKTtyZXR1cm4gZT9mLnRhZz1lOmwuZGVmYXVsdHx8KGYudGFnPWwudGFnKSx1JiYodS5ub2RlPWYpLGZ9ZnVuY3Rpb24gcHIobixlLHQpe2xldCByPXQ7Zm9yKGxldCBzPWUubGVuZ3RoLTE7cz49MDstLXMpe2xldCBpPWVbc107aWYodHlwZW9mIGk9PVxcXCJudW1iZXJcXFwiJiZOdW1iZXIuaXNJbnRlZ2VyKGkpJiZpPj0wKXtsZXQgbz1bXTtvW2ldPXIscj1vfWVsc2Ugcj1uZXcgTWFwKFtbaSxyXV0pfXJldHVybiB3dChyLHZvaWQgMCx7YWxpYXNEdXBsaWNhdGVPYmplY3RzOiExLGtlZXBVbmRlZmluZWQ6ITEsb25BbmNob3I6KCk9Pnt0aHJvdyBuZXcgRXJyb3IoXFxcIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIHBsZWFzZSByZXBvcnQgYSBidWcuXFxcIil9LHNjaGVtYTpuLHNvdXJjZU9iamVjdHM6bmV3IE1hcH0pfXZhciBrbj1uPT5uPT1udWxsfHx0eXBlb2Ygbj09XFxcIm9iamVjdFxcXCImJiEhbltTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmUsU249Y2xhc3MgZXh0ZW5kcyBPdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFxcXCJzY2hlbWFcXFwiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwfSl9Y2xvbmUoZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGhpcykpO3JldHVybiBlJiYodC5zY2hlbWE9ZSksdC5pdGVtcz10Lml0ZW1zLm1hcChyPT5KKHIpfHxIKHIpP3IuY2xvbmUoZSk6ciksdGhpcy5yYW5nZSYmKHQucmFuZ2U9dGhpcy5yYW5nZS5zbGljZSgpKSx0fWFkZEluKGUsdCl7aWYoa24oZSkpdGhpcy5hZGQodCk7ZWxzZXtsZXRbciwuLi5zXT1lLGk9dGhpcy5nZXQociwhMCk7aWYoWihpKSlpLmFkZEluKHMsdCk7ZWxzZSBpZihpPT09dm9pZCAwJiZ0aGlzLnNjaGVtYSl0aGlzLnNldChyLHByKHRoaXMuc2NoZW1hLHMsdCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZQU1MIGNvbGxlY3Rpb24gYXQgJHtyfS4gUmVtYWluaW5nIHBhdGg6ICR7c31gKX19ZGVsZXRlSW4oZSl7bGV0W3QsLi4ucl09ZTtpZihyLmxlbmd0aD09PTApcmV0dXJuIHRoaXMuZGVsZXRlKHQpO2xldCBzPXRoaXMuZ2V0KHQsITApO2lmKFoocykpcmV0dXJuIHMuZGVsZXRlSW4ocik7dGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZQU1MIGNvbGxlY3Rpb24gYXQgJHt0fS4gUmVtYWluaW5nIHBhdGg6ICR7cn1gKX1nZXRJbihlLHQpe2xldFtyLC4uLnNdPWUsaT10aGlzLmdldChyLCEwKTtyZXR1cm4gcy5sZW5ndGg9PT0wPyF0JiZLKGkpP2kudmFsdWU6aTpaKGkpP2kuZ2V0SW4ocyx0KTp2b2lkIDB9aGFzQWxsTnVsbFZhbHVlcyhlKXtyZXR1cm4gdGhpcy5pdGVtcy5ldmVyeSh0PT57aWYoIUgodCkpcmV0dXJuITE7bGV0IHI9dC52YWx1ZTtyZXR1cm4gcj09bnVsbHx8ZSYmSyhyKSYmci52YWx1ZT09bnVsbCYmIXIuY29tbWVudEJlZm9yZSYmIXIuY29tbWVudCYmIXIudGFnfSl9aGFzSW4oZSl7bGV0W3QsLi4ucl09ZTtpZihyLmxlbmd0aD09PTApcmV0dXJuIHRoaXMuaGFzKHQpO2xldCBzPXRoaXMuZ2V0KHQsITApO3JldHVybiBaKHMpP3MuaGFzSW4ocik6ITF9c2V0SW4oZSx0KXtsZXRbciwuLi5zXT1lO2lmKHMubGVuZ3RoPT09MCl0aGlzLnNldChyLHQpO2Vsc2V7bGV0IGk9dGhpcy5nZXQociwhMCk7aWYoWihpKSlpLnNldEluKHMsdCk7ZWxzZSBpZihpPT09dm9pZCAwJiZ0aGlzLnNjaGVtYSl0aGlzLnNldChyLHByKHRoaXMuc2NoZW1hLHMsdCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZQU1MIGNvbGxlY3Rpb24gYXQgJHtyfS4gUmVtYWluaW5nIHBhdGg6ICR7c31gKX19fTt2YXIgR2E9bj0+bi5yZXBsYWNlKC9eKD8hJCkoPzogJCk/L2dtLFxcXCIjXFxcIik7ZnVuY3Rpb24gUGUobixlKXtyZXR1cm4vXlxcXFxuKyQvLnRlc3Qobik/bi5zdWJzdHJpbmcoMSk6ZT9uLnJlcGxhY2UoL14oPyEgKiQpL2dtLGUpOm59dmFyIG90PShuLGUsdCk9Pm4uZW5kc1dpdGgoYFxcbmApP1BlKHQsZSk6dC5pbmNsdWRlcyhgXFxuYCk/YFxcbmArUGUodCxlKToobi5lbmRzV2l0aChcXFwiIFxcXCIpP1xcXCJcXFwiOlxcXCIgXFxcIikrdDt2YXIgJGk9XFxcImZsb3dcXFwiLGxzPVxcXCJibG9ja1xcXCIsRHI9XFxcInF1b3RlZFxcXCI7ZnVuY3Rpb24geXIobixlLHQ9XFxcImZsb3dcXFwiLHtpbmRlbnRBdFN0YXJ0OnIsbGluZVdpZHRoOnM9ODAsbWluQ29udGVudFdpZHRoOmk9MjAsb25Gb2xkOm8sb25PdmVyZmxvdzphfT17fSl7aWYoIXN8fHM8MClyZXR1cm4gbjtzPGkmJihpPTApO2xldCB1PU1hdGgubWF4KDEraSwxK3MtZS5sZW5ndGgpO2lmKG4ubGVuZ3RoPD11KXJldHVybiBuO2xldCBsPVtdLGY9e30sZD1zLWUubGVuZ3RoO3R5cGVvZiByPT1cXFwibnVtYmVyXFxcIiYmKHI+cy1NYXRoLm1heCgyLGkpP2wucHVzaCgwKTpkPXMtcik7bGV0IG0saCxiPSExLGc9LTEsRD0tMSxUPS0xO3Q9PT1scyYmKGc9WmEobixnLGUubGVuZ3RoKSxnIT09LTEmJihkPWcrdSkpO2ZvcihsZXQgTjtOPW5bZys9MV07KXtpZih0PT09RHImJk49PT1cXFwiXFxcXFxcXFxcXFwiKXtzd2l0Y2goRD1nLG5bZysxXSl7Y2FzZVxcXCJ4XFxcIjpnKz0zO2JyZWFrO2Nhc2VcXFwidVxcXCI6Zys9NTticmVhaztjYXNlXFxcIlVcXFwiOmcrPTk7YnJlYWs7ZGVmYXVsdDpnKz0xfVQ9Z31pZihOPT09YFxcbmApdD09PWxzJiYoZz1aYShuLGcsZS5sZW5ndGgpKSxkPWcrZS5sZW5ndGgrdSxtPXZvaWQgMDtlbHNle2lmKE49PT1cXFwiIFxcXCImJmgmJmghPT1cXFwiIFxcXCImJmghPT1gXFxuYCYmaCE9PVxcXCJcXHRcXFwiKXtsZXQgeT1uW2crMV07eSYmeSE9PVxcXCIgXFxcIiYmeSE9PWBcXG5gJiZ5IT09XFxcIlxcdFxcXCImJihtPWcpfWlmKGc+PWQpaWYobSlsLnB1c2gobSksZD1tK3UsbT12b2lkIDA7ZWxzZSBpZih0PT09RHIpe2Zvcig7aD09PVxcXCIgXFxcInx8aD09PVxcXCJcXHRcXFwiOyloPU4sTj1uW2crPTFdLGI9ITA7bGV0IHk9Zz5UKzE/Zy0yOkQtMTtpZihmW3ldKXJldHVybiBuO2wucHVzaCh5KSxmW3ldPSEwLGQ9eSt1LG09dm9pZCAwfWVsc2UgYj0hMH1oPU59aWYoYiYmYSYmYSgpLGwubGVuZ3RoPT09MClyZXR1cm4gbjtvJiZvKCk7bGV0IEk9bi5zbGljZSgwLGxbMF0pO2ZvcihsZXQgTj0wO048bC5sZW5ndGg7KytOKXtsZXQgeT1sW05dLHc9bFtOKzFdfHxuLmxlbmd0aDt5PT09MD9JPWBcXG4ke2V9JHtuLnNsaWNlKDAsdyl9YDoodD09PURyJiZmW3ldJiYoSSs9YCR7blt5XX1cXFxcXFxcXGApLEkrPWBcXG4ke2V9JHtuLnNsaWNlKHkrMSx3KX1gKX1yZXR1cm4gSX1mdW5jdGlvbiBaYShuLGUsdCl7bGV0IHI9ZSxzPWUrMSxpPW5bc107Zm9yKDtpPT09XFxcIiBcXFwifHxpPT09XFxcIlxcdFxcXCI7KWlmKGU8cyt0KWk9blsrK2VdO2Vsc2V7ZG8gaT1uWysrZV07d2hpbGUoaSYmaSE9PWBcXG5gKTtyPWUscz1lKzEsaT1uW3NdfXJldHVybiByfXZhciBmcz0obixlKT0+KHtpbmRlbnRBdFN0YXJ0OmU/bi5pbmRlbnQubGVuZ3RoOm4uaW5kZW50QXRTdGFydCxsaW5lV2lkdGg6bi5vcHRpb25zLmxpbmVXaWR0aCxtaW5Db250ZW50V2lkdGg6bi5vcHRpb25zLm1pbkNvbnRlbnRXaWR0aH0pLGRzPW49Pi9eKCV8LS0tfFxcXFwuXFxcXC5cXFxcLikvbS50ZXN0KG4pO2Z1bmN0aW9uIFljKG4sZSx0KXtpZighZXx8ZTwwKXJldHVybiExO2xldCByPWUtdCxzPW4ubGVuZ3RoO2lmKHM8PXIpcmV0dXJuITE7Zm9yKGxldCBpPTAsbz0wO2k8czsrK2kpaWYobltpXT09PWBcXG5gKXtpZihpLW8+cilyZXR1cm4hMDtpZihvPWkrMSxzLW88PXIpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gZ3IobixlKXtsZXQgdD1KU09OLnN0cmluZ2lmeShuKTtpZihlLm9wdGlvbnMuZG91YmxlUXVvdGVkQXNKU09OKXJldHVybiB0O2xldHtpbXBsaWNpdEtleTpyfT1lLHM9ZS5vcHRpb25zLmRvdWJsZVF1b3RlZE1pbk11bHRpTGluZUxlbmd0aCxpPWUuaW5kZW50fHwoZHMobik/XFxcIiAgXFxcIjpcXFwiXFxcIiksbz1cXFwiXFxcIixhPTA7Zm9yKGxldCB1PTAsbD10W3VdO2w7bD10WysrdV0paWYobD09PVxcXCIgXFxcIiYmdFt1KzFdPT09XFxcIlxcXFxcXFxcXFxcIiYmdFt1KzJdPT09XFxcIm5cXFwiJiYobys9dC5zbGljZShhLHUpK1xcXCJcXFxcXFxcXCBcXFwiLHUrPTEsYT11LGw9XFxcIlxcXFxcXFxcXFxcIiksbD09PVxcXCJcXFxcXFxcXFxcXCIpc3dpdGNoKHRbdSsxXSl7Y2FzZVxcXCJ1XFxcIjp7bys9dC5zbGljZShhLHUpO2xldCBmPXQuc3Vic3RyKHUrMiw0KTtzd2l0Y2goZil7Y2FzZVxcXCIwMDAwXFxcIjpvKz1cXFwiXFxcXFxcXFwwXFxcIjticmVhaztjYXNlXFxcIjAwMDdcXFwiOm8rPVxcXCJcXFxcXFxcXGFcXFwiO2JyZWFrO2Nhc2VcXFwiMDAwYlxcXCI6bys9XFxcIlxcXFxcXFxcdlxcXCI7YnJlYWs7Y2FzZVxcXCIwMDFiXFxcIjpvKz1cXFwiXFxcXFxcXFxlXFxcIjticmVhaztjYXNlXFxcIjAwODVcXFwiOm8rPVxcXCJcXFxcXFxcXE5cXFwiO2JyZWFrO2Nhc2VcXFwiMDBhMFxcXCI6bys9XFxcIlxcXFxcXFxcX1xcXCI7YnJlYWs7Y2FzZVxcXCIyMDI4XFxcIjpvKz1cXFwiXFxcXFxcXFxMXFxcIjticmVhaztjYXNlXFxcIjIwMjlcXFwiOm8rPVxcXCJcXFxcXFxcXFBcXFwiO2JyZWFrO2RlZmF1bHQ6Zi5zdWJzdHIoMCwyKT09PVxcXCIwMFxcXCI/bys9XFxcIlxcXFxcXFxceFxcXCIrZi5zdWJzdHIoMik6bys9dC5zdWJzdHIodSw2KX11Kz01LGE9dSsxfWJyZWFrO2Nhc2VcXFwiblxcXCI6aWYocnx8dFt1KzJdPT09J1xcXCInfHx0Lmxlbmd0aDxzKXUrPTE7ZWxzZXtmb3Iobys9dC5zbGljZShhLHUpK2BcXG5cXG5gO3RbdSsyXT09PVxcXCJcXFxcXFxcXFxcXCImJnRbdSszXT09PVxcXCJuXFxcIiYmdFt1KzRdIT09J1xcXCInOylvKz1gXFxuYCx1Kz0yO28rPWksdFt1KzJdPT09XFxcIiBcXFwiJiYobys9XFxcIlxcXFxcXFxcXFxcIiksdSs9MSxhPXUrMX1icmVhaztkZWZhdWx0OnUrPTF9cmV0dXJuIG89YT9vK3Quc2xpY2UoYSk6dCxyP286eXIobyxpLERyLGZzKGUsITEpKX1mdW5jdGlvbiBSaShuLGUpe2lmKGUub3B0aW9ucy5zaW5nbGVRdW90ZT09PSExfHxlLmltcGxpY2l0S2V5JiZuLmluY2x1ZGVzKGBcXG5gKXx8L1sgXFxcXHRdXFxcXG58XFxcXG5bIFxcXFx0XS8udGVzdChuKSlyZXR1cm4gZ3IobixlKTtsZXQgdD1lLmluZGVudHx8KGRzKG4pP1xcXCIgIFxcXCI6XFxcIlxcXCIpLHI9XFxcIidcXFwiK24ucmVwbGFjZSgvJy9nLFxcXCInJ1xcXCIpLnJlcGxhY2UoL1xcXFxuKy9nLGAkJlxcbiR7dH1gKStcXFwiJ1xcXCI7cmV0dXJuIGUuaW1wbGljaXRLZXk/cjp5cihyLHQsJGksZnMoZSwhMSkpfWZ1bmN0aW9uIENuKG4sZSl7bGV0e3NpbmdsZVF1b3RlOnR9PWUub3B0aW9ucyxyO2lmKHQ9PT0hMSlyPWdyO2Vsc2V7bGV0IHM9bi5pbmNsdWRlcygnXFxcIicpLGk9bi5pbmNsdWRlcyhcXFwiJ1xcXCIpO3MmJiFpP3I9Umk6aSYmIXM/cj1ncjpyPXQ/Umk6Z3J9cmV0dXJuIHIobixlKX12YXIgamk7dHJ5e2ppPW5ldyBSZWdFeHAoYChefCg/PCFcXG4pKVxcbisoPyFcXG58JClgLFxcXCJnXFxcIil9Y2F0Y2gobil7amk9L1xcXFxuKyg/IVxcXFxufCQpL2d9ZnVuY3Rpb24gY3Moe2NvbW1lbnQ6bix0eXBlOmUsdmFsdWU6dH0scixzLGkpe2xldHtibG9ja1F1b3RlOm8sY29tbWVudFN0cmluZzphLGxpbmVXaWR0aDp1fT1yLm9wdGlvbnM7aWYoIW98fC9cXFxcbltcXFxcdCBdKyQvLnRlc3QodCl8fC9eXFxcXHMqJC8udGVzdCh0KSlyZXR1cm4gQ24odCxyKTtsZXQgbD1yLmluZGVudHx8KHIuZm9yY2VCbG9ja0luZGVudHx8ZHModCk/XFxcIiAgXFxcIjpcXFwiXFxcIiksZj1vPT09XFxcImxpdGVyYWxcXFwiPyEwOm89PT1cXFwiZm9sZGVkXFxcInx8ZT09PVAuQkxPQ0tfRk9MREVEPyExOmU9PT1QLkJMT0NLX0xJVEVSQUw/ITA6IVljKHQsdSxsLmxlbmd0aCk7aWYoIXQpcmV0dXJuIGY/YHxcXG5gOmA+XFxuYDtsZXQgZCxtO2ZvcihtPXQubGVuZ3RoO20+MDstLW0pe2xldCB2PXRbbS0xXTtpZih2IT09YFxcbmAmJnYhPT1cXFwiXFx0XFxcIiYmdiE9PVxcXCIgXFxcIilicmVha31sZXQgaD10LnN1YnN0cmluZyhtKSxiPWguaW5kZXhPZihgXFxuYCk7Yj09PS0xP2Q9XFxcIi1cXFwiOnQ9PT1ofHxiIT09aC5sZW5ndGgtMT8oZD1cXFwiK1xcXCIsaSYmaSgpKTpkPVxcXCJcXFwiLGgmJih0PXQuc2xpY2UoMCwtaC5sZW5ndGgpLGhbaC5sZW5ndGgtMV09PT1gXFxuYCYmKGg9aC5zbGljZSgwLC0xKSksaD1oLnJlcGxhY2UoamksYCQmJHtsfWApKTtsZXQgZz0hMSxELFQ9LTE7Zm9yKEQ9MDtEPHQubGVuZ3RoOysrRCl7bGV0IHY9dFtEXTtpZih2PT09XFxcIiBcXFwiKWc9ITA7ZWxzZSBpZih2PT09YFxcbmApVD1EO2Vsc2UgYnJlYWt9bGV0IEk9dC5zdWJzdHJpbmcoMCxUPEQ/VCsxOkQpO0kmJih0PXQuc3Vic3RyaW5nKEkubGVuZ3RoKSxJPUkucmVwbGFjZSgvXFxcXG4rL2csYCQmJHtsfWApKTtsZXQgeT0oZj9cXFwifFxcXCI6XFxcIj5cXFwiKSsoZz9sP1xcXCIyXFxcIjpcXFwiMVxcXCI6XFxcIlxcXCIpK2Q7aWYobiYmKHkrPVxcXCIgXFxcIithKG4ucmVwbGFjZSgvID9bXFxcXHJcXFxcbl0rL2csXFxcIiBcXFwiKSkscyYmcygpKSxmKXJldHVybiB0PXQucmVwbGFjZSgvXFxcXG4rL2csYCQmJHtsfWApLGAke3l9XFxuJHtsfSR7SX0ke3R9JHtofWA7dD10LnJlcGxhY2UoL1xcXFxuKy9nLGBcXG4kJmApLnJlcGxhY2UoLyg/Ol58XFxcXG4pKFtcXFxcdCBdLiopKD86KFtcXFxcblxcXFx0IF0qKVxcXFxuKD8hW1xcXFxuXFxcXHQgXSkpPy9nLFxcXCIkMSQyXFxcIikucmVwbGFjZSgvXFxcXG4rL2csYCQmJHtsfWApO2xldCB3PXlyKGAke0l9JHt0fSR7aH1gLGwsbHMsZnMociwhMCkpO3JldHVybmAke3l9XFxuJHtsfSR7d31gfWZ1bmN0aW9uIEdjKG4sZSx0LHIpe2xldHt0eXBlOnMsdmFsdWU6aX09bix7YWN0dWFsU3RyaW5nOm8saW1wbGljaXRLZXk6YSxpbmRlbnQ6dSxpbmRlbnRTdGVwOmwsaW5GbG93OmZ9PWU7aWYoYSYmaS5pbmNsdWRlcyhgXFxuYCl8fGYmJi9bW1xcXFxde30sXS8udGVzdChpKSlyZXR1cm4gQ24oaSxlKTtpZighaXx8L15bXFxcXG5cXFxcdCAsW1xcXFxde30jJiohfD4nXFxcIiVAYF18Xls/LV0kfF5bPy1dWyBcXFxcdF18W1xcXFxuOl1bIFxcXFx0XXxbIFxcXFx0XVxcXFxufFtcXFxcblxcXFx0IF0jfFtcXFxcblxcXFx0IDpdJC8udGVzdChpKSlyZXR1cm4gYXx8Znx8IWkuaW5jbHVkZXMoYFxcbmApP0NuKGksZSk6Y3MobixlLHQscik7aWYoIWEmJiFmJiZzIT09UC5QTEFJTiYmaS5pbmNsdWRlcyhgXFxuYCkpcmV0dXJuIGNzKG4sZSx0LHIpO2lmKGRzKGkpKXtpZih1PT09XFxcIlxcXCIpcmV0dXJuIGUuZm9yY2VCbG9ja0luZGVudD0hMCxjcyhuLGUsdCxyKTtpZihhJiZ1PT09bClyZXR1cm4gQ24oaSxlKX1sZXQgZD1pLnJlcGxhY2UoL1xcXFxuKy9nLGAkJlxcbiR7dX1gKTtpZihvKXtsZXQgbT1nPT57dmFyIEQ7cmV0dXJuIGcuZGVmYXVsdCYmZy50YWchPT1cXFwidGFnOnlhbWwub3JnLDIwMDI6c3RyXFxcIiYmKChEPWcudGVzdCk9PW51bGw/dm9pZCAwOkQudGVzdChkKSl9LHtjb21wYXQ6aCx0YWdzOmJ9PWUuZG9jLnNjaGVtYTtpZihiLnNvbWUobSl8fGghPW51bGwmJmguc29tZShtKSlyZXR1cm4gQ24oaSxlKX1yZXR1cm4gYT9kOnlyKGQsdSwkaSxmcyhlLCExKSl9ZnVuY3Rpb24gV3QobixlLHQscil7bGV0e2ltcGxpY2l0S2V5OnMsaW5GbG93Oml9PWUsbz10eXBlb2Ygbi52YWx1ZT09XFxcInN0cmluZ1xcXCI/bjpPYmplY3QuYXNzaWduKHt9LG4se3ZhbHVlOlN0cmluZyhuLnZhbHVlKX0pLHt0eXBlOmF9PW47YSE9PVAuUVVPVEVfRE9VQkxFJiYvW1xcXFx4MDAtXFxcXHgwOFxcXFx4MGItXFxcXHgxZlxcXFx4N2YtXFxcXHg5ZlxcXFx1e0Q4MDB9LVxcXFx1e0RGRkZ9XS91LnRlc3Qoby52YWx1ZSkmJihhPVAuUVVPVEVfRE9VQkxFKTtsZXQgdT1mPT57c3dpdGNoKGYpe2Nhc2UgUC5CTE9DS19GT0xERUQ6Y2FzZSBQLkJMT0NLX0xJVEVSQUw6cmV0dXJuIHN8fGk/Q24oby52YWx1ZSxlKTpjcyhvLGUsdCxyKTtjYXNlIFAuUVVPVEVfRE9VQkxFOnJldHVybiBncihvLnZhbHVlLGUpO2Nhc2UgUC5RVU9URV9TSU5HTEU6cmV0dXJuIFJpKG8udmFsdWUsZSk7Y2FzZSBQLlBMQUlOOnJldHVybiBHYyhvLGUsdCxyKTtkZWZhdWx0OnJldHVybiBudWxsfX0sbD11KGEpO2lmKGw9PT1udWxsKXtsZXR7ZGVmYXVsdEtleVR5cGU6ZixkZWZhdWx0U3RyaW5nVHlwZTpkfT1lLm9wdGlvbnMsbT1zJiZmfHxkO2lmKGw9dShtKSxsPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRlZmF1bHQgc3RyaW5nIHR5cGUgJHttfWApfXJldHVybiBsfWZ1bmN0aW9uIGhzKG4sZSl7bGV0IHQ9T2JqZWN0LmFzc2lnbih7YmxvY2tRdW90ZTohMCxjb21tZW50U3RyaW5nOkdhLGRlZmF1bHRLZXlUeXBlOm51bGwsZGVmYXVsdFN0cmluZ1R5cGU6XFxcIlBMQUlOXFxcIixkaXJlY3RpdmVzOm51bGwsZG91YmxlUXVvdGVkQXNKU09OOiExLGRvdWJsZVF1b3RlZE1pbk11bHRpTGluZUxlbmd0aDo0MCxmYWxzZVN0cjpcXFwiZmFsc2VcXFwiLGZsb3dDb2xsZWN0aW9uUGFkZGluZzohMCxpbmRlbnRTZXE6ITAsbGluZVdpZHRoOjgwLG1pbkNvbnRlbnRXaWR0aDoyMCxudWxsU3RyOlxcXCJudWxsXFxcIixzaW1wbGVLZXlzOiExLHNpbmdsZVF1b3RlOm51bGwsdHJ1ZVN0cjpcXFwidHJ1ZVxcXCIsdmVyaWZ5QWxpYXNPcmRlcjohMH0sbi5zY2hlbWEudG9TdHJpbmdPcHRpb25zLGUpLHI7c3dpdGNoKHQuY29sbGVjdGlvblN0eWxlKXtjYXNlXFxcImJsb2NrXFxcIjpyPSExO2JyZWFrO2Nhc2VcXFwiZmxvd1xcXCI6cj0hMDticmVhaztkZWZhdWx0OnI9bnVsbH1yZXR1cm57YW5jaG9yczpuZXcgU2V0LGRvYzpuLGZsb3dDb2xsZWN0aW9uUGFkZGluZzp0LmZsb3dDb2xsZWN0aW9uUGFkZGluZz9cXFwiIFxcXCI6XFxcIlxcXCIsaW5kZW50OlxcXCJcXFwiLGluZGVudFN0ZXA6dHlwZW9mIHQuaW5kZW50PT1cXFwibnVtYmVyXFxcIj9cXFwiIFxcXCIucmVwZWF0KHQuaW5kZW50KTpcXFwiICBcXFwiLGluRmxvdzpyLG9wdGlvbnM6dH19ZnVuY3Rpb24gWmMobixlKXt2YXIgcyxpLG8sYTtpZihlLnRhZyl7bGV0IHU9bi5maWx0ZXIobD0+bC50YWc9PT1lLnRhZyk7aWYodS5sZW5ndGg+MClyZXR1cm4ocz11LmZpbmQobD0+bC5mb3JtYXQ9PT1lLmZvcm1hdCkpIT1udWxsP3M6dVswXX1sZXQgdCxyO2lmKEsoZSkpe3I9ZS52YWx1ZTtsZXQgdT1uLmZpbHRlcihsPT57dmFyIGY7cmV0dXJuKGY9bC5pZGVudGlmeSk9PW51bGw/dm9pZCAwOmYuY2FsbChsLHIpfSk7aWYodS5sZW5ndGg+MSl7bGV0IGw9dS5maWx0ZXIoZj0+Zi50ZXN0KTtsLmxlbmd0aD4wJiYodT1sKX10PShpPXUuZmluZChsPT5sLmZvcm1hdD09PWUuZm9ybWF0KSkhPW51bGw/aTp1LmZpbmQobD0+IWwuZm9ybWF0KX1lbHNlIHI9ZSx0PW4uZmluZCh1PT51Lm5vZGVDbGFzcyYmciBpbnN0YW5jZW9mIHUubm9kZUNsYXNzKTtpZighdCl7bGV0IHU9KGE9KG89cj09bnVsbD92b2lkIDA6ci5jb25zdHJ1Y3Rvcik9PW51bGw/dm9pZCAwOm8ubmFtZSkhPW51bGw/YTp0eXBlb2Ygcjt0aHJvdyBuZXcgRXJyb3IoYFRhZyBub3QgcmVzb2x2ZWQgZm9yICR7dX0gdmFsdWVgKX1yZXR1cm4gdH1mdW5jdGlvbiBRYyhuLGUse2FuY2hvcnM6dCxkb2M6cn0pe2lmKCFyLmRpcmVjdGl2ZXMpcmV0dXJuXFxcIlxcXCI7bGV0IHM9W10saT0oSyhuKXx8WihuKSkmJm4uYW5jaG9yO2kmJm9zKGkpJiYodC5hZGQoaSkscy5wdXNoKGAmJHtpfWApKTtsZXQgbz1uLnRhZz9uLnRhZzplLmRlZmF1bHQ/bnVsbDplLnRhZztyZXR1cm4gbyYmcy5wdXNoKHIuZGlyZWN0aXZlcy50YWdTdHJpbmcobykpLHMuam9pbihcXFwiIFxcXCIpfWZ1bmN0aW9uIFR0KG4sZSx0LHIpe3ZhciB1LGw7aWYoSChuKSlyZXR1cm4gbi50b1N0cmluZyhlLHQscik7aWYoV2Uobikpe2lmKGUuZG9jLmRpcmVjdGl2ZXMpcmV0dXJuIG4udG9TdHJpbmcoZSk7aWYoKHU9ZS5yZXNvbHZlZEFsaWFzZXMpIT1udWxsJiZ1LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3Qgc3RyaW5naWZ5IGNpcmN1bGFyIHN0cnVjdHVyZSB3aXRob3V0IGFsaWFzIG5vZGVzXFxcIik7ZS5yZXNvbHZlZEFsaWFzZXM/ZS5yZXNvbHZlZEFsaWFzZXMuYWRkKG4pOmUucmVzb2x2ZWRBbGlhc2VzPW5ldyBTZXQoW25dKSxuPW4ucmVzb2x2ZShlLmRvYyl9bGV0IHMsaT1KKG4pP246ZS5kb2MuY3JlYXRlTm9kZShuLHtvblRhZ09iajpmPT5zPWZ9KTtzfHwocz1aYyhlLmRvYy5zY2hlbWEudGFncyxpKSk7bGV0IG89UWMoaSxzLGUpO28ubGVuZ3RoPjAmJihlLmluZGVudEF0U3RhcnQ9KChsPWUuaW5kZW50QXRTdGFydCkhPW51bGw/bDowKStvLmxlbmd0aCsxKTtsZXQgYT10eXBlb2Ygcy5zdHJpbmdpZnk9PVxcXCJmdW5jdGlvblxcXCI/cy5zdHJpbmdpZnkoaSxlLHQscik6SyhpKT9XdChpLGUsdCxyKTppLnRvU3RyaW5nKGUsdCxyKTtyZXR1cm4gbz9LKGkpfHxhWzBdPT09XFxcIntcXFwifHxhWzBdPT09XFxcIltcXFwiP2Ake299ICR7YX1gOmAke299XFxuJHtlLmluZGVudH0ke2F9YDphfWZ1bmN0aW9uIFFhKHtrZXk6bix2YWx1ZTplfSx0LHIscyl7dmFyIHgsQztsZXR7YWxsTnVsbFZhbHVlczppLGRvYzpvLGluZGVudDphLGluZGVudFN0ZXA6dSxvcHRpb25zOntjb21tZW50U3RyaW5nOmwsaW5kZW50U2VxOmYsc2ltcGxlS2V5czpkfX09dCxtPUoobikmJm4uY29tbWVudHx8bnVsbDtpZihkKXtpZihtKXRocm93IG5ldyBFcnJvcihcXFwiV2l0aCBzaW1wbGUga2V5cywga2V5IG5vZGVzIGNhbm5vdCBoYXZlIGNvbW1lbnRzXFxcIik7aWYoWihuKXx8IUoobikmJnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIil7bGV0IFY9XFxcIldpdGggc2ltcGxlIGtleXMsIGNvbGxlY3Rpb24gY2Fubm90IGJlIHVzZWQgYXMgYSBrZXkgdmFsdWVcXFwiO3Rocm93IG5ldyBFcnJvcihWKX19bGV0IGg9IWQmJighbnx8bSYmZT09bnVsbCYmIXQuaW5GbG93fHxaKG4pfHwoSyhuKT9uLnR5cGU9PT1QLkJMT0NLX0ZPTERFRHx8bi50eXBlPT09UC5CTE9DS19MSVRFUkFMOnR5cGVvZiBuPT1cXFwib2JqZWN0XFxcIikpO3Q9T2JqZWN0LmFzc2lnbih7fSx0LHthbGxOdWxsVmFsdWVzOiExLGltcGxpY2l0S2V5OiFoJiYoZHx8IWkpLGluZGVudDphK3V9KTtsZXQgYj0hMSxnPSExLEQ9VHQobix0LCgpPT5iPSEwLCgpPT5nPSEwKTtpZighaCYmIXQuaW5GbG93JiZELmxlbmd0aD4xMDI0KXtpZihkKXRocm93IG5ldyBFcnJvcihcXFwiV2l0aCBzaW1wbGUga2V5cywgc2luZ2xlIGxpbmUgc2NhbGFyIG11c3Qgbm90IHNwYW4gbW9yZSB0aGFuIDEwMjQgY2hhcmFjdGVyc1xcXCIpO2g9ITB9aWYodC5pbkZsb3cpe2lmKGl8fGU9PW51bGwpcmV0dXJuIGImJnImJnIoKSxEPT09XFxcIlxcXCI/XFxcIj9cXFwiOmg/YD8gJHtEfWA6RH1lbHNlIGlmKGkmJiFkfHxlPT1udWxsJiZoKXJldHVybiBEPWA/ICR7RH1gLG0mJiFiP0QrPW90KEQsdC5pbmRlbnQsbChtKSk6ZyYmcyYmcygpLEQ7YiYmKG09bnVsbCksaD8obSYmKEQrPW90KEQsdC5pbmRlbnQsbChtKSkpLEQ9YD8gJHtEfVxcbiR7YX06YCk6KEQ9YCR7RH06YCxtJiYoRCs9b3QoRCx0LmluZGVudCxsKG0pKSkpO2xldCBULEksTjtKKGUpPyhUPSEhZS5zcGFjZUJlZm9yZSxJPWUuY29tbWVudEJlZm9yZSxOPWUuY29tbWVudCk6KFQ9ITEsST1udWxsLE49bnVsbCxlJiZ0eXBlb2YgZT09XFxcIm9iamVjdFxcXCImJihlPW8uY3JlYXRlTm9kZShlKSkpLHQuaW1wbGljaXRLZXk9ITEsIWgmJiFtJiZLKGUpJiYodC5pbmRlbnRBdFN0YXJ0PUQubGVuZ3RoKzEpLGc9ITEsIWYmJnUubGVuZ3RoPj0yJiYhdC5pbkZsb3cmJiFoJiZKZShlKSYmIWUuZmxvdyYmIWUudGFnJiYhZS5hbmNob3ImJih0LmluZGVudD10LmluZGVudC5zdWJzdHJpbmcoMikpO2xldCB5PSExLHc9VHQoZSx0LCgpPT55PSEwLCgpPT5nPSEwKSx2PVxcXCIgXFxcIjtpZihtfHxUfHxJKXtpZih2PVQ/YFxcbmA6XFxcIlxcXCIsSSl7bGV0IFY9bChJKTt2Kz1gXFxuJHtQZShWLHQuaW5kZW50KX1gfXc9PT1cXFwiXFxcIiYmIXQuaW5GbG93P3Y9PT1gXFxuYCYmKHY9YFxcblxcbmApOnYrPWBcXG4ke3QuaW5kZW50fWB9ZWxzZSBpZighaCYmWihlKSl7bGV0IFY9d1swXSxqPXcuaW5kZXhPZihgXFxuYCksWT1qIT09LTEsZWU9KEM9KHg9dC5pbkZsb3cpIT1udWxsP3g6ZS5mbG93KSE9bnVsbD9DOmUuaXRlbXMubGVuZ3RoPT09MDtpZihZfHwhZWUpe2xldCBhZT0hMTtpZihZJiYoVj09PVxcXCImXFxcInx8Vj09PVxcXCIhXFxcIikpe2xldCBPPXcuaW5kZXhPZihcXFwiIFxcXCIpO1Y9PT1cXFwiJlxcXCImJk8hPT0tMSYmTzxqJiZ3W08rMV09PT1cXFwiIVxcXCImJihPPXcuaW5kZXhPZihcXFwiIFxcXCIsTysxKSksKE89PT0tMXx8ajxPKSYmKGFlPSEwKX1hZXx8KHY9YFxcbiR7dC5pbmRlbnR9YCl9fWVsc2Uodz09PVxcXCJcXFwifHx3WzBdPT09YFxcbmApJiYodj1cXFwiXFxcIik7cmV0dXJuIEQrPXYrdyx0LmluRmxvdz95JiZyJiZyKCk6TiYmIXk/RCs9b3QoRCx0LmluZGVudCxsKE4pKTpnJiZzJiZzKCksRH1mdW5jdGlvbiBtcyhuLGUpeyhuPT09XFxcImRlYnVnXFxcInx8bj09PVxcXCJ3YXJuXFxcIikmJih0eXBlb2YgcHJvY2VzcyE9XFxcInVuZGVmaW5lZFxcXCImJnByb2Nlc3MuZW1pdFdhcm5pbmc/cHJvY2Vzcy5lbWl0V2FybmluZyhlKTpjb25zb2xlLndhcm4oZSkpfXZhciBwcz1cXFwiPDxcXFwiLFllPXtpZGVudGlmeTpuPT5uPT09cHN8fHR5cGVvZiBuPT1cXFwic3ltYm9sXFxcIiYmbi5kZXNjcmlwdGlvbj09PXBzLGRlZmF1bHQ6XFxcImtleVxcXCIsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZVxcXCIsdGVzdDovXjw8JC8scmVzb2x2ZTooKT0+T2JqZWN0LmFzc2lnbihuZXcgUChTeW1ib2wocHMpKSx7YWRkVG9KU01hcDpWaX0pLHN0cmluZ2lmeTooKT0+cHN9LFhhPShuLGUpPT4oWWUuaWRlbnRpZnkoZSl8fEsoZSkmJighZS50eXBlfHxlLnR5cGU9PT1QLlBMQUlOKSYmWWUuaWRlbnRpZnkoZS52YWx1ZSkpJiYobj09bnVsbD92b2lkIDA6bi5kb2Muc2NoZW1hLnRhZ3Muc29tZSh0PT50LnRhZz09PVllLnRhZyYmdC5kZWZhdWx0KSk7ZnVuY3Rpb24gVmkobixlLHQpe2lmKHQ9biYmV2UodCk/dC5yZXNvbHZlKG4uZG9jKTp0LEplKHQpKWZvcihsZXQgciBvZiB0Lml0ZW1zKXFpKG4sZSxyKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCByIG9mIHQpcWkobixlLHIpO2Vsc2UgcWkobixlLHQpfWZ1bmN0aW9uIHFpKG4sZSx0KXtsZXQgcj1uJiZXZSh0KT90LnJlc29sdmUobi5kb2MpOnQ7aWYoIUhlKHIpKXRocm93IG5ldyBFcnJvcihcXFwiTWVyZ2Ugc291cmNlcyBtdXN0IGJlIG1hcHMgb3IgbWFwIGFsaWFzZXNcXFwiKTtsZXQgcz1yLnRvSlNPTihudWxsLG4sTWFwKTtmb3IobGV0W2ksb11vZiBzKWUgaW5zdGFuY2VvZiBNYXA/ZS5oYXMoaSl8fGUuc2V0KGksbyk6ZSBpbnN0YW5jZW9mIFNldD9lLmFkZChpKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSx7dmFsdWU6byx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3JldHVybiBlfWZ1bmN0aW9uIERzKG4sZSx7a2V5OnQsdmFsdWU6cn0pe2lmKEoodCkmJnQuYWRkVG9KU01hcCl0LmFkZFRvSlNNYXAobixlLHIpO2Vsc2UgaWYoWGEobix0KSlWaShuLGUscik7ZWxzZXtsZXQgcz1jZSh0LFxcXCJcXFwiLG4pO2lmKGUgaW5zdGFuY2VvZiBNYXApZS5zZXQocyxjZShyLHMsbikpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFNldCllLmFkZChzKTtlbHNle2xldCBpPVhjKHQscyxuKSxvPWNlKHIsaSxuKTtpIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSx7dmFsdWU6byx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbaV09b319cmV0dXJuIGV9ZnVuY3Rpb24gWGMobixlLHQpe2lmKGU9PT1udWxsKXJldHVyblxcXCJcXFwiO2lmKHR5cGVvZiBlIT1cXFwib2JqZWN0XFxcIilyZXR1cm4gU3RyaW5nKGUpO2lmKEoobikmJih0IT1udWxsJiZ0LmRvYykpe2xldCByPWhzKHQuZG9jLHt9KTtyLmFuY2hvcnM9bmV3IFNldDtmb3IobGV0IGkgb2YgdC5hbmNob3JzLmtleXMoKSlyLmFuY2hvcnMuYWRkKGkuYW5jaG9yKTtyLmluRmxvdz0hMCxyLmluU3RyaW5naWZ5S2V5PSEwO2xldCBzPW4udG9TdHJpbmcocik7aWYoIXQubWFwS2V5V2FybmVkKXtsZXQgaT1KU09OLnN0cmluZ2lmeShzKTtpLmxlbmd0aD40MCYmKGk9aS5zdWJzdHJpbmcoMCwzNikrJy4uLlxcXCInKSxtcyh0LmRvYy5vcHRpb25zLmxvZ0xldmVsLGBLZXlzIHdpdGggY29sbGVjdGlvbiB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZCBkdWUgdG8gSlMgT2JqZWN0IHJlc3RyaWN0aW9uczogJHtpfS4gU2V0IG1hcEFzTWFwOiB0cnVlIHRvIHVzZSBvYmplY3Qga2V5cy5gKSx0Lm1hcEtleVdhcm5lZD0hMH1yZXR1cm4gc31yZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9ZnVuY3Rpb24gdm4obixlLHQpe2xldCByPXd0KG4sdm9pZCAwLHQpLHM9d3QoZSx2b2lkIDAsdCk7cmV0dXJuIG5ldyBpZShyLHMpfXZhciBpZT1jbGFzcyBue2NvbnN0cnVjdG9yKGUsdD1udWxsKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxUZSx7dmFsdWU6X2l9KSx0aGlzLmtleT1lLHRoaXMudmFsdWU9dH1jbG9uZShlKXtsZXR7a2V5OnQsdmFsdWU6cn09dGhpcztyZXR1cm4gSih0KSYmKHQ9dC5jbG9uZShlKSksSihyKSYmKHI9ci5jbG9uZShlKSksbmV3IG4odCxyKX10b0pTT04oZSx0KXtsZXQgcj10IT1udWxsJiZ0Lm1hcEFzTWFwP25ldyBNYXA6e307cmV0dXJuIERzKHQscix0aGlzKX10b1N0cmluZyhlLHQscil7cmV0dXJuIGUhPW51bGwmJmUuZG9jP1FhKHRoaXMsZSx0LHIpOkpTT04uc3RyaW5naWZ5KHRoaXMpfX07ZnVuY3Rpb24gZ3MobixlLHQpe3ZhciBpO3JldHVybigoKGk9ZS5pbkZsb3cpIT1udWxsP2k6bi5mbG93KT90ZjplZikobixlLHQpfWZ1bmN0aW9uIGVmKHtjb21tZW50Om4saXRlbXM6ZX0sdCx7YmxvY2tJdGVtUHJlZml4OnIsZmxvd0NoYXJzOnMsaXRlbUluZGVudDppLG9uQ2hvbXBLZWVwOm8sb25Db21tZW50OmF9KXtsZXR7aW5kZW50OnUsb3B0aW9uczp7Y29tbWVudFN0cmluZzpsfX09dCxmPU9iamVjdC5hc3NpZ24oe30sdCx7aW5kZW50OmksdHlwZTpudWxsfSksZD0hMSxtPVtdO2ZvcihsZXQgYj0wO2I8ZS5sZW5ndGg7KytiKXtsZXQgZz1lW2JdLEQ9bnVsbDtpZihKKGcpKSFkJiZnLnNwYWNlQmVmb3JlJiZtLnB1c2goXFxcIlxcXCIpLHlzKHQsbSxnLmNvbW1lbnRCZWZvcmUsZCksZy5jb21tZW50JiYoRD1nLmNvbW1lbnQpO2Vsc2UgaWYoSChnKSl7bGV0IEk9SihnLmtleSk/Zy5rZXk6bnVsbDtJJiYoIWQmJkkuc3BhY2VCZWZvcmUmJm0ucHVzaChcXFwiXFxcIikseXModCxtLEkuY29tbWVudEJlZm9yZSxkKSl9ZD0hMTtsZXQgVD1UdChnLGYsKCk9PkQ9bnVsbCwoKT0+ZD0hMCk7RCYmKFQrPW90KFQsaSxsKEQpKSksZCYmRCYmKGQ9ITEpLG0ucHVzaChyK1QpfWxldCBoO2lmKG0ubGVuZ3RoPT09MCloPXMuc3RhcnQrcy5lbmQ7ZWxzZXtoPW1bMF07Zm9yKGxldCBiPTE7YjxtLmxlbmd0aDsrK2Ipe2xldCBnPW1bYl07aCs9Zz9gXFxuJHt1fSR7Z31gOmBcXG5gfX1yZXR1cm4gbj8oaCs9YFxcbmArUGUobChuKSx1KSxhJiZhKCkpOmQmJm8mJm8oKSxofWZ1bmN0aW9uIHRmKHtpdGVtczpufSxlLHtmbG93Q2hhcnM6dCxpdGVtSW5kZW50OnJ9KXtsZXR7aW5kZW50OnMsaW5kZW50U3RlcDppLGZsb3dDb2xsZWN0aW9uUGFkZGluZzpvLG9wdGlvbnM6e2NvbW1lbnRTdHJpbmc6YX19PWU7cis9aTtsZXQgdT1PYmplY3QuYXNzaWduKHt9LGUse2luZGVudDpyLGluRmxvdzohMCx0eXBlOm51bGx9KSxsPSExLGY9MCxkPVtdO2ZvcihsZXQgYj0wO2I8bi5sZW5ndGg7KytiKXtsZXQgZz1uW2JdLEQ9bnVsbDtpZihKKGcpKWcuc3BhY2VCZWZvcmUmJmQucHVzaChcXFwiXFxcIikseXMoZSxkLGcuY29tbWVudEJlZm9yZSwhMSksZy5jb21tZW50JiYoRD1nLmNvbW1lbnQpO2Vsc2UgaWYoSChnKSl7bGV0IEk9SihnLmtleSk/Zy5rZXk6bnVsbDtJJiYoSS5zcGFjZUJlZm9yZSYmZC5wdXNoKFxcXCJcXFwiKSx5cyhlLGQsSS5jb21tZW50QmVmb3JlLCExKSxJLmNvbW1lbnQmJihsPSEwKSk7bGV0IE49SihnLnZhbHVlKT9nLnZhbHVlOm51bGw7Tj8oTi5jb21tZW50JiYoRD1OLmNvbW1lbnQpLE4uY29tbWVudEJlZm9yZSYmKGw9ITApKTpnLnZhbHVlPT1udWxsJiYoSSE9bnVsbCYmSS5jb21tZW50KSYmKEQ9SS5jb21tZW50KX1EJiYobD0hMCk7bGV0IFQ9VHQoZyx1LCgpPT5EPW51bGwpO2I8bi5sZW5ndGgtMSYmKFQrPVxcXCIsXFxcIiksRCYmKFQrPW90KFQscixhKEQpKSksIWwmJihkLmxlbmd0aD5mfHxULmluY2x1ZGVzKGBcXG5gKSkmJihsPSEwKSxkLnB1c2goVCksZj1kLmxlbmd0aH1sZXR7c3RhcnQ6bSxlbmQ6aH09dDtpZihkLmxlbmd0aD09PTApcmV0dXJuIG0raDtpZighbCl7bGV0IGI9ZC5yZWR1Y2UoKGcsRCk9PmcrRC5sZW5ndGgrMiwyKTtsPWUub3B0aW9ucy5saW5lV2lkdGg+MCYmYj5lLm9wdGlvbnMubGluZVdpZHRofWlmKGwpe2xldCBiPW07Zm9yKGxldCBnIG9mIGQpYis9Zz9gXFxuJHtpfSR7c30ke2d9YDpgXFxuYDtyZXR1cm5gJHtifVxcbiR7c30ke2h9YH1lbHNlIHJldHVybmAke219JHtvfSR7ZC5qb2luKFxcXCIgXFxcIil9JHtvfSR7aH1gfWZ1bmN0aW9uIHlzKHtpbmRlbnQ6bixvcHRpb25zOntjb21tZW50U3RyaW5nOmV9fSx0LHIscyl7aWYociYmcyYmKHI9ci5yZXBsYWNlKC9eXFxcXG4rLyxcXFwiXFxcIikpLHIpe2xldCBpPVBlKGUociksbik7dC5wdXNoKGkudHJpbVN0YXJ0KCkpfX1mdW5jdGlvbiBJdChuLGUpe2xldCB0PUsoZSk/ZS52YWx1ZTplO2ZvcihsZXQgciBvZiBuKWlmKEgocikmJihyLmtleT09PWV8fHIua2V5PT09dHx8SyhyLmtleSkmJnIua2V5LnZhbHVlPT09dCkpcmV0dXJuIHJ9dmFyIG9lPWNsYXNzIGV4dGVuZHMgU257c3RhdGljIGdldCB0YWdOYW1lKCl7cmV0dXJuXFxcInRhZzp5YW1sLm9yZywyMDAyOm1hcFxcXCJ9Y29uc3RydWN0b3IoZSl7c3VwZXIoS2UsZSksdGhpcy5pdGVtcz1bXX1zdGF0aWMgZnJvbShlLHQscil7bGV0e2tlZXBVbmRlZmluZWQ6cyxyZXBsYWNlcjppfT1yLG89bmV3IHRoaXMoZSksYT0odSxsKT0+e2lmKHR5cGVvZiBpPT1cXFwiZnVuY3Rpb25cXFwiKWw9aS5jYWxsKHQsdSxsKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkmJiFpLmluY2x1ZGVzKHUpKXJldHVybjsobCE9PXZvaWQgMHx8cykmJm8uaXRlbXMucHVzaCh2bih1LGwscikpfTtpZih0IGluc3RhbmNlb2YgTWFwKWZvcihsZXRbdSxsXW9mIHQpYSh1LGwpO2Vsc2UgaWYodCYmdHlwZW9mIHQ9PVxcXCJvYmplY3RcXFwiKWZvcihsZXQgdSBvZiBPYmplY3Qua2V5cyh0KSlhKHUsdFt1XSk7cmV0dXJuIHR5cGVvZiBlLnNvcnRNYXBFbnRyaWVzPT1cXFwiZnVuY3Rpb25cXFwiJiZvLml0ZW1zLnNvcnQoZS5zb3J0TWFwRW50cmllcyksb31hZGQoZSx0KXt2YXIgbztsZXQgcjtIKGUpP3I9ZTohZXx8dHlwZW9mIGUhPVxcXCJvYmplY3RcXFwifHwhKFxcXCJrZXlcXFwiaW4gZSk/cj1uZXcgaWUoZSxlPT1udWxsP3ZvaWQgMDplLnZhbHVlKTpyPW5ldyBpZShlLmtleSxlLnZhbHVlKTtsZXQgcz1JdCh0aGlzLml0ZW1zLHIua2V5KSxpPShvPXRoaXMuc2NoZW1hKT09bnVsbD92b2lkIDA6by5zb3J0TWFwRW50cmllcztpZihzKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoYEtleSAke3Iua2V5fSBhbHJlYWR5IHNldGApO0socy52YWx1ZSkmJnVzKHIudmFsdWUpP3MudmFsdWUudmFsdWU9ci52YWx1ZTpzLnZhbHVlPXIudmFsdWV9ZWxzZSBpZihpKXtsZXQgYT10aGlzLml0ZW1zLmZpbmRJbmRleCh1PT5pKHIsdSk8MCk7YT09PS0xP3RoaXMuaXRlbXMucHVzaChyKTp0aGlzLml0ZW1zLnNwbGljZShhLDAscil9ZWxzZSB0aGlzLml0ZW1zLnB1c2gocil9ZGVsZXRlKGUpe2xldCB0PUl0KHRoaXMuaXRlbXMsZSk7cmV0dXJuIHQ/dGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pdGVtcy5pbmRleE9mKHQpLDEpLmxlbmd0aD4wOiExfWdldChlLHQpe3ZhciBpO2xldCByPUl0KHRoaXMuaXRlbXMsZSkscz1yPT1udWxsP3ZvaWQgMDpyLnZhbHVlO3JldHVybihpPSF0JiZLKHMpP3MudmFsdWU6cykhPW51bGw/aTp2b2lkIDB9aGFzKGUpe3JldHVybiEhSXQodGhpcy5pdGVtcyxlKX1zZXQoZSx0KXt0aGlzLmFkZChuZXcgaWUoZSx0KSwhMCl9dG9KU09OKGUsdCxyKXtsZXQgcz1yP25ldyByOnQhPW51bGwmJnQubWFwQXNNYXA/bmV3IE1hcDp7fTt0IT1udWxsJiZ0Lm9uQ3JlYXRlJiZ0Lm9uQ3JlYXRlKHMpO2ZvcihsZXQgaSBvZiB0aGlzLml0ZW1zKURzKHQscyxpKTtyZXR1cm4gc310b1N0cmluZyhlLHQscil7aWYoIWUpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO2ZvcihsZXQgcyBvZiB0aGlzLml0ZW1zKWlmKCFIKHMpKXRocm93IG5ldyBFcnJvcihgTWFwIGl0ZW1zIG11c3QgYWxsIGJlIHBhaXJzOyBmb3VuZCAke0pTT04uc3RyaW5naWZ5KHMpfSBpbnN0ZWFkYCk7cmV0dXJuIWUuYWxsTnVsbFZhbHVlcyYmdGhpcy5oYXNBbGxOdWxsVmFsdWVzKCExKSYmKGU9T2JqZWN0LmFzc2lnbih7fSxlLHthbGxOdWxsVmFsdWVzOiEwfSkpLGdzKHRoaXMsZSx7YmxvY2tJdGVtUHJlZml4OlxcXCJcXFwiLGZsb3dDaGFyczp7c3RhcnQ6XFxcIntcXFwiLGVuZDpcXFwifVxcXCJ9LGl0ZW1JbmRlbnQ6ZS5pbmRlbnR8fFxcXCJcXFwiLG9uQ2hvbXBLZWVwOnIsb25Db21tZW50OnR9KX19O3ZhciBHZT17Y29sbGVjdGlvbjpcXFwibWFwXFxcIixkZWZhdWx0OiEwLG5vZGVDbGFzczpvZSx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOm1hcFxcXCIscmVzb2x2ZShuLGUpe3JldHVybiBIZShuKXx8ZShcXFwiRXhwZWN0ZWQgYSBtYXBwaW5nIGZvciB0aGlzIHRhZ1xcXCIpLG59LGNyZWF0ZU5vZGU6KG4sZSx0KT0+b2UuZnJvbShuLGUsdCl9O3ZhciBiZT1jbGFzcyBleHRlbmRzIFNue3N0YXRpYyBnZXQgdGFnTmFtZSgpe3JldHVyblxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXFcXFwifWNvbnN0cnVjdG9yKGUpe3N1cGVyKEZ0LGUpLHRoaXMuaXRlbXM9W119YWRkKGUpe3RoaXMuaXRlbXMucHVzaChlKX1kZWxldGUoZSl7bGV0IHQ9YnMoZSk7cmV0dXJuIHR5cGVvZiB0IT1cXFwibnVtYmVyXFxcIj8hMTp0aGlzLml0ZW1zLnNwbGljZSh0LDEpLmxlbmd0aD4wfWdldChlLHQpe2xldCByPWJzKGUpO2lmKHR5cGVvZiByIT1cXFwibnVtYmVyXFxcIilyZXR1cm47bGV0IHM9dGhpcy5pdGVtc1tyXTtyZXR1cm4hdCYmSyhzKT9zLnZhbHVlOnN9aGFzKGUpe2xldCB0PWJzKGUpO3JldHVybiB0eXBlb2YgdD09XFxcIm51bWJlclxcXCImJnQ8dGhpcy5pdGVtcy5sZW5ndGh9c2V0KGUsdCl7bGV0IHI9YnMoZSk7aWYodHlwZW9mIHIhPVxcXCJudW1iZXJcXFwiKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSB2YWxpZCBpbmRleCwgbm90ICR7ZX0uYCk7bGV0IHM9dGhpcy5pdGVtc1tyXTtLKHMpJiZ1cyh0KT9zLnZhbHVlPXQ6dGhpcy5pdGVtc1tyXT10fXRvSlNPTihlLHQpe2xldCByPVtdO3QhPW51bGwmJnQub25DcmVhdGUmJnQub25DcmVhdGUocik7bGV0IHM9MDtmb3IobGV0IGkgb2YgdGhpcy5pdGVtcylyLnB1c2goY2UoaSxTdHJpbmcocysrKSx0KSk7cmV0dXJuIHJ9dG9TdHJpbmcoZSx0LHIpe3JldHVybiBlP2dzKHRoaXMsZSx7YmxvY2tJdGVtUHJlZml4OlxcXCItIFxcXCIsZmxvd0NoYXJzOntzdGFydDpcXFwiW1xcXCIsZW5kOlxcXCJdXFxcIn0saXRlbUluZGVudDooZS5pbmRlbnR8fFxcXCJcXFwiKStcXFwiICBcXFwiLG9uQ2hvbXBLZWVwOnIsb25Db21tZW50OnR9KTpKU09OLnN0cmluZ2lmeSh0aGlzKX1zdGF0aWMgZnJvbShlLHQscil7bGV0e3JlcGxhY2VyOnN9PXIsaT1uZXcgdGhpcyhlKTtpZih0JiZTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXtsZXQgbz0wO2ZvcihsZXQgYSBvZiB0KXtpZih0eXBlb2Ygcz09XFxcImZ1bmN0aW9uXFxcIil7bGV0IHU9dCBpbnN0YW5jZW9mIFNldD9hOlN0cmluZyhvKyspO2E9cy5jYWxsKHQsdSxhKX1pLml0ZW1zLnB1c2god3QoYSx2b2lkIDAscikpfX1yZXR1cm4gaX19O2Z1bmN0aW9uIGJzKG4pe2xldCBlPUsobik/bi52YWx1ZTpuO3JldHVybiBlJiZ0eXBlb2YgZT09XFxcInN0cmluZ1xcXCImJihlPU51bWJlcihlKSksdHlwZW9mIGU9PVxcXCJudW1iZXJcXFwiJiZOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj0wP2U6bnVsbH12YXIgWmU9e2NvbGxlY3Rpb246XFxcInNlcVxcXCIsZGVmYXVsdDohMCxub2RlQ2xhc3M6YmUsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXFcXFwiLHJlc29sdmUobixlKXtyZXR1cm4gSmUobil8fGUoXFxcIkV4cGVjdGVkIGEgc2VxdWVuY2UgZm9yIHRoaXMgdGFnXFxcIiksbn0sY3JlYXRlTm9kZToobixlLHQpPT5iZS5mcm9tKG4sZSx0KX07dmFyIEx0PXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcInN0cmluZ1xcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOnN0clxcXCIscmVzb2x2ZTpuPT5uLHN0cmluZ2lmeShuLGUsdCxyKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKHthY3R1YWxTdHJpbmc6ITB9LGUpLFd0KG4sZSx0LHIpfX07dmFyIEh0PXtpZGVudGlmeTpuPT5uPT1udWxsLGNyZWF0ZU5vZGU6KCk9Pm5ldyBQKG51bGwpLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsXFxcIix0ZXN0Oi9eKD86fnxbTm5ddWxsfE5VTEwpPyQvLHJlc29sdmU6KCk9Pm5ldyBQKG51bGwpLHN0cmluZ2lmeTooe3NvdXJjZTpufSxlKT0+dHlwZW9mIG49PVxcXCJzdHJpbmdcXFwiJiZIdC50ZXN0LnRlc3Qobik/bjplLm9wdGlvbnMubnVsbFN0cn07dmFyIGJyPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcImJvb2xlYW5cXFwiLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sXFxcIix0ZXN0Oi9eKD86W1R0XXJ1ZXxUUlVFfFtGZl1hbHNlfEZBTFNFKSQvLHJlc29sdmU6bj0+bmV3IFAoblswXT09PVxcXCJ0XFxcInx8blswXT09PVxcXCJUXFxcIiksc3RyaW5naWZ5KHtzb3VyY2U6bix2YWx1ZTplfSx0KXtpZihuJiZici50ZXN0LnRlc3Qobikpe2xldCByPW5bMF09PT1cXFwidFxcXCJ8fG5bMF09PT1cXFwiVFxcXCI7aWYoZT09PXIpcmV0dXJuIG59cmV0dXJuIGU/dC5vcHRpb25zLnRydWVTdHI6dC5vcHRpb25zLmZhbHNlU3RyfX07ZnVuY3Rpb24gRmUoe2Zvcm1hdDpuLG1pbkZyYWN0aW9uRGlnaXRzOmUsdGFnOnQsdmFsdWU6cn0pe2lmKHR5cGVvZiByPT1cXFwiYmlnaW50XFxcIilyZXR1cm4gU3RyaW5nKHIpO2xldCBzPXR5cGVvZiByPT1cXFwibnVtYmVyXFxcIj9yOk51bWJlcihyKTtpZighaXNGaW5pdGUocykpcmV0dXJuIGlzTmFOKHMpP1xcXCIubmFuXFxcIjpzPDA/XFxcIi0uaW5mXFxcIjpcXFwiLmluZlxcXCI7bGV0IGk9SlNPTi5zdHJpbmdpZnkocik7aWYoIW4mJmUmJighdHx8dD09PVxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdFxcXCIpJiYvXlxcXFxkLy50ZXN0KGkpKXtsZXQgbz1pLmluZGV4T2YoXFxcIi5cXFwiKTtvPDAmJihvPWkubGVuZ3RoLGkrPVxcXCIuXFxcIik7bGV0IGE9ZS0oaS5sZW5ndGgtby0xKTtmb3IoO2EtLSA+MDspaSs9XFxcIjBcXFwifXJldHVybiBpfXZhciBGcz17aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJudW1iZXJcXFwiLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdFxcXCIsdGVzdDovXig/OlstK10/XFxcXC4oPzppbmZ8SW5mfElORil8XFxcXC5uYW58XFxcXC5OYU58XFxcXC5OQU4pJC8scmVzb2x2ZTpuPT5uLnNsaWNlKC0zKS50b0xvd2VyQ2FzZSgpPT09XFxcIm5hblxcXCI/TmFOOm5bMF09PT1cXFwiLVxcXCI/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzdHJpbmdpZnk6RmV9LEVzPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIixmb3JtYXQ6XFxcIkVYUFxcXCIsdGVzdDovXlstK10/KD86XFxcXC5bMC05XSt8WzAtOV0rKD86XFxcXC5bMC05XSopPylbZUVdWy0rXT9bMC05XSskLyxyZXNvbHZlOm49PnBhcnNlRmxvYXQobiksc3RyaW5naWZ5KG4pe2xldCBlPU51bWJlcihuLnZhbHVlKTtyZXR1cm4gaXNGaW5pdGUoZSk/ZS50b0V4cG9uZW50aWFsKCk6RmUobil9fSx3cz17aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJudW1iZXJcXFwiLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdFxcXCIsdGVzdDovXlstK10/KD86XFxcXC5bMC05XSt8WzAtOV0rXFxcXC5bMC05XSopJC8scmVzb2x2ZShuKXtsZXQgZT1uZXcgUChwYXJzZUZsb2F0KG4pKSx0PW4uaW5kZXhPZihcXFwiLlxcXCIpO3JldHVybiB0IT09LTEmJm5bbi5sZW5ndGgtMV09PT1cXFwiMFxcXCImJihlLm1pbkZyYWN0aW9uRGlnaXRzPW4ubGVuZ3RoLXQtMSksZX0sc3RyaW5naWZ5OkZlfTt2YXIgVHM9bj0+dHlwZW9mIG49PVxcXCJiaWdpbnRcXFwifHxOdW1iZXIuaXNJbnRlZ2VyKG4pLFVpPShuLGUsdCx7aW50QXNCaWdJbnQ6cn0pPT5yP0JpZ0ludChuKTpwYXJzZUludChuLnN1YnN0cmluZyhlKSx0KTtmdW5jdGlvbiBldShuLGUsdCl7bGV0e3ZhbHVlOnJ9PW47cmV0dXJuIFRzKHIpJiZyPj0wP3Qrci50b1N0cmluZyhlKTpGZShuKX12YXIgU3M9e2lkZW50aWZ5Om49PlRzKG4pJiZuPj0wLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLGZvcm1hdDpcXFwiT0NUXFxcIix0ZXN0Oi9eMG9bMC03XSskLyxyZXNvbHZlOihuLGUsdCk9PlVpKG4sMiw4LHQpLHN0cmluZ2lmeTpuPT5ldShuLDgsXFxcIjBvXFxcIil9LGtzPXtpZGVudGlmeTpUcyxkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6aW50XFxcIix0ZXN0Oi9eWy0rXT9bMC05XSskLyxyZXNvbHZlOihuLGUsdCk9PlVpKG4sMCwxMCx0KSxzdHJpbmdpZnk6RmV9LENzPXtpZGVudGlmeTpuPT5UcyhuKSYmbj49MCxkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6aW50XFxcIixmb3JtYXQ6XFxcIkhFWFxcXCIsdGVzdDovXjB4WzAtOWEtZkEtRl0rJC8scmVzb2x2ZToobixlLHQpPT5VaShuLDIsMTYsdCksc3RyaW5naWZ5Om49PmV1KG4sMTYsXFxcIjB4XFxcIil9O3ZhciB0dT1bR2UsWmUsTHQsSHQsYnIsU3Msa3MsQ3MsRnMsRXMsd3NdO2Z1bmN0aW9uIG51KG4pe3JldHVybiB0eXBlb2Ygbj09XFxcImJpZ2ludFxcXCJ8fE51bWJlci5pc0ludGVnZXIobil9dmFyIHZzPSh7dmFsdWU6bn0pPT5KU09OLnN0cmluZ2lmeShuKSxuZj1be2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwic3RyaW5nXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6c3RyXFxcIixyZXNvbHZlOm49Pm4sc3RyaW5naWZ5OnZzfSx7aWRlbnRpZnk6bj0+bj09bnVsbCxjcmVhdGVOb2RlOigpPT5uZXcgUChudWxsKSxkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6bnVsbFxcXCIsdGVzdDovXm51bGwkLyxyZXNvbHZlOigpPT5udWxsLHN0cmluZ2lmeTp2c30se2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwiYm9vbGVhblxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmJvb2xcXFwiLHRlc3Q6L150cnVlfGZhbHNlJC8scmVzb2x2ZTpuPT5uPT09XFxcInRydWVcXFwiLHN0cmluZ2lmeTp2c30se2lkZW50aWZ5Om51LGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLHRlc3Q6L14tPyg/OjB8WzEtOV1bMC05XSopJC8scmVzb2x2ZToobixlLHtpbnRBc0JpZ0ludDp0fSk9PnQ/QmlnSW50KG4pOnBhcnNlSW50KG4sMTApLHN0cmluZ2lmeTooe3ZhbHVlOm59KT0+bnUobik/bi50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KG4pfSx7aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJudW1iZXJcXFwiLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdFxcXCIsdGVzdDovXi0/KD86MHxbMS05XVswLTldKikoPzpcXFxcLlswLTldKik/KD86W2VFXVstK10/WzAtOV0rKT8kLyxyZXNvbHZlOm49PnBhcnNlRmxvYXQobiksc3RyaW5naWZ5OnZzfV0scmY9e2RlZmF1bHQ6ITAsdGFnOlxcXCJcXFwiLHRlc3Q6L14vLHJlc29sdmUobixlKXtyZXR1cm4gZShgVW5yZXNvbHZlZCBwbGFpbiBzY2FsYXIgJHtKU09OLnN0cmluZ2lmeShuKX1gKSxufX0scnU9W0dlLFplXS5jb25jYXQobmYscmYpO3ZhciBGcj17aWRlbnRpZnk6bj0+biBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksZGVmYXVsdDohMSx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeVxcXCIscmVzb2x2ZShuLGUpe2lmKHR5cGVvZiBCdWZmZXI9PVxcXCJmdW5jdGlvblxcXCIpcmV0dXJuIEJ1ZmZlci5mcm9tKG4sXFxcImJhc2U2NFxcXCIpO2lmKHR5cGVvZiBhdG9iPT1cXFwiZnVuY3Rpb25cXFwiKXtsZXQgdD1hdG9iKG4ucmVwbGFjZSgvW1xcXFxuXFxcXHJdL2csXFxcIlxcXCIpKSxyPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoOysrcylyW3NdPXQuY2hhckNvZGVBdChzKTtyZXR1cm4gcn1lbHNlIHJldHVybiBlKFxcXCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyBiaW5hcnkgdGFnczsgZWl0aGVyIEJ1ZmZlciBvciBhdG9iIGlzIHJlcXVpcmVkXFxcIiksbn0sc3RyaW5naWZ5KHtjb21tZW50Om4sdHlwZTplLHZhbHVlOnR9LHIscyxpKXtsZXQgbz10LGE7aWYodHlwZW9mIEJ1ZmZlcj09XFxcImZ1bmN0aW9uXFxcIilhPW8gaW5zdGFuY2VvZiBCdWZmZXI/by50b1N0cmluZyhcXFwiYmFzZTY0XFxcIik6QnVmZmVyLmZyb20oby5idWZmZXIpLnRvU3RyaW5nKFxcXCJiYXNlNjRcXFwiKTtlbHNlIGlmKHR5cGVvZiBidG9hPT1cXFwiZnVuY3Rpb25cXFwiKXtsZXQgdT1cXFwiXFxcIjtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoOysrbCl1Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKG9bbF0pO2E9YnRvYSh1KX1lbHNlIHRocm93IG5ldyBFcnJvcihcXFwiVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHdyaXRpbmcgYmluYXJ5IHRhZ3M7IGVpdGhlciBCdWZmZXIgb3IgYnRvYSBpcyByZXF1aXJlZFxcXCIpO2lmKGV8fChlPVAuQkxPQ0tfTElURVJBTCksZSE9PVAuUVVPVEVfRE9VQkxFKXtsZXQgdT1NYXRoLm1heChyLm9wdGlvbnMubGluZVdpZHRoLXIuaW5kZW50Lmxlbmd0aCxyLm9wdGlvbnMubWluQ29udGVudFdpZHRoKSxsPU1hdGguY2VpbChhLmxlbmd0aC91KSxmPW5ldyBBcnJheShsKTtmb3IobGV0IGQ9MCxtPTA7ZDxsOysrZCxtKz11KWZbZF09YS5zdWJzdHIobSx1KTthPWYuam9pbihlPT09UC5CTE9DS19MSVRFUkFMP2BcXG5gOlxcXCIgXFxcIil9cmV0dXJuIFd0KHtjb21tZW50Om4sdHlwZTplLHZhbHVlOmF9LHIscyxpKX19O2Z1bmN0aW9uIEtpKG4sZSl7dmFyIHQ7aWYoSmUobikpZm9yKGxldCByPTA7cjxuLml0ZW1zLmxlbmd0aDsrK3Ipe2xldCBzPW4uaXRlbXNbcl07aWYoIUgocykpe2lmKEhlKHMpKXtzLml0ZW1zLmxlbmd0aD4xJiZlKFxcXCJFYWNoIHBhaXIgbXVzdCBoYXZlIGl0cyBvd24gc2VxdWVuY2UgaW5kaWNhdG9yXFxcIik7bGV0IGk9cy5pdGVtc1swXXx8bmV3IGllKG5ldyBQKG51bGwpKTtpZihzLmNvbW1lbnRCZWZvcmUmJihpLmtleS5jb21tZW50QmVmb3JlPWkua2V5LmNvbW1lbnRCZWZvcmU/YCR7cy5jb21tZW50QmVmb3JlfVxcbiR7aS5rZXkuY29tbWVudEJlZm9yZX1gOnMuY29tbWVudEJlZm9yZSkscy5jb21tZW50KXtsZXQgbz0odD1pLnZhbHVlKSE9bnVsbD90Omkua2V5O28uY29tbWVudD1vLmNvbW1lbnQ/YCR7cy5jb21tZW50fVxcbiR7by5jb21tZW50fWA6cy5jb21tZW50fXM9aX1uLml0ZW1zW3JdPUgocyk/czpuZXcgaWUocyl9fWVsc2UgZShcXFwiRXhwZWN0ZWQgYSBzZXF1ZW5jZSBmb3IgdGhpcyB0YWdcXFwiKTtyZXR1cm4gbn1mdW5jdGlvbiBXaShuLGUsdCl7bGV0e3JlcGxhY2VyOnJ9PXQscz1uZXcgYmUobik7cy50YWc9XFxcInRhZzp5YW1sLm9yZywyMDAyOnBhaXJzXFxcIjtsZXQgaT0wO2lmKGUmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpZm9yKGxldCBvIG9mIGUpe3R5cGVvZiByPT1cXFwiZnVuY3Rpb25cXFwiJiYobz1yLmNhbGwoZSxTdHJpbmcoaSsrKSxvKSk7bGV0IGEsdTtpZihBcnJheS5pc0FycmF5KG8pKWlmKG8ubGVuZ3RoPT09MilhPW9bMF0sdT1vWzFdO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgW2tleSwgdmFsdWVdIHR1cGxlOiAke299YCk7ZWxzZSBpZihvJiZvIGluc3RhbmNlb2YgT2JqZWN0KXtsZXQgbD1PYmplY3Qua2V5cyhvKTtpZihsLmxlbmd0aD09PTEpYT1sWzBdLHU9b1thXTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHR1cGxlIHdpdGggb25lIGtleSwgbm90ICR7bC5sZW5ndGh9IGtleXNgKX1lbHNlIGE9bztzLml0ZW1zLnB1c2godm4oYSx1LHQpKX1yZXR1cm4gc312YXIgRXI9e2NvbGxlY3Rpb246XFxcInNlcVxcXCIsZGVmYXVsdDohMSx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOnBhaXJzXFxcIixyZXNvbHZlOktpLGNyZWF0ZU5vZGU6V2l9O3ZhciB4bj1jbGFzcyBuIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkPW9lLnByb3RvdHlwZS5hZGQuYmluZCh0aGlzKSx0aGlzLmRlbGV0ZT1vZS5wcm90b3R5cGUuZGVsZXRlLmJpbmQodGhpcyksdGhpcy5nZXQ9b2UucHJvdG90eXBlLmdldC5iaW5kKHRoaXMpLHRoaXMuaGFzPW9lLnByb3RvdHlwZS5oYXMuYmluZCh0aGlzKSx0aGlzLnNldD1vZS5wcm90b3R5cGUuc2V0LmJpbmQodGhpcyksdGhpcy50YWc9bi50YWd9dG9KU09OKGUsdCl7aWYoIXQpcmV0dXJuIHN1cGVyLnRvSlNPTihlKTtsZXQgcj1uZXcgTWFwO3QhPW51bGwmJnQub25DcmVhdGUmJnQub25DcmVhdGUocik7Zm9yKGxldCBzIG9mIHRoaXMuaXRlbXMpe2xldCBpLG87aWYoSChzKT8oaT1jZShzLmtleSxcXFwiXFxcIix0KSxvPWNlKHMudmFsdWUsaSx0KSk6aT1jZShzLFxcXCJcXFwiLHQpLHIuaGFzKGkpKXRocm93IG5ldyBFcnJvcihcXFwiT3JkZXJlZCBtYXBzIG11c3Qgbm90IGluY2x1ZGUgZHVwbGljYXRlIGtleXNcXFwiKTtyLnNldChpLG8pfXJldHVybiByfXN0YXRpYyBmcm9tKGUsdCxyKXtsZXQgcz1XaShlLHQsciksaT1uZXcgdGhpcztyZXR1cm4gaS5pdGVtcz1zLml0ZW1zLGl9fTt4bi50YWc9XFxcInRhZzp5YW1sLm9yZywyMDAyOm9tYXBcXFwiO3ZhciB3cj17Y29sbGVjdGlvbjpcXFwic2VxXFxcIixpZGVudGlmeTpuPT5uIGluc3RhbmNlb2YgTWFwLG5vZGVDbGFzczp4bixkZWZhdWx0OiExLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6b21hcFxcXCIscmVzb2x2ZShuLGUpe2xldCB0PUtpKG4sZSkscj1bXTtmb3IobGV0e2tleTpzfW9mIHQuaXRlbXMpSyhzKSYmKHIuaW5jbHVkZXMocy52YWx1ZSk/ZShgT3JkZXJlZCBtYXBzIG11c3Qgbm90IGluY2x1ZGUgZHVwbGljYXRlIGtleXM6ICR7cy52YWx1ZX1gKTpyLnB1c2gocy52YWx1ZSkpO3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB4bix0KX0sY3JlYXRlTm9kZToobixlLHQpPT54bi5mcm9tKG4sZSx0KX07ZnVuY3Rpb24gc3Uoe3ZhbHVlOm4sc291cmNlOmV9LHQpe3JldHVybiBlJiYobj9IaTpKaSkudGVzdC50ZXN0KGUpP2U6bj90Lm9wdGlvbnMudHJ1ZVN0cjp0Lm9wdGlvbnMuZmFsc2VTdHJ9dmFyIEhpPXtpZGVudGlmeTpuPT5uPT09ITAsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmJvb2xcXFwiLHRlc3Q6L14oPzpZfHl8W1l5XWVzfFlFU3xbVHRdcnVlfFRSVUV8W09vXW58T04pJC8scmVzb2x2ZTooKT0+bmV3IFAoITApLHN0cmluZ2lmeTpzdX0sSmk9e2lkZW50aWZ5Om49Pm49PT0hMSxkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6Ym9vbFxcXCIsdGVzdDovXig/Ok58bnxbTm5db3xOT3xbRmZdYWxzZXxGQUxTRXxbT29dZmZ8T0ZGKSQvLHJlc29sdmU6KCk9Pm5ldyBQKCExKSxzdHJpbmdpZnk6c3V9O3ZhciBpdT17aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJudW1iZXJcXFwiLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdFxcXCIsdGVzdDovXig/OlstK10/XFxcXC4oPzppbmZ8SW5mfElORil8XFxcXC5uYW58XFxcXC5OYU58XFxcXC5OQU4pJC8scmVzb2x2ZTpuPT5uLnNsaWNlKC0zKS50b0xvd2VyQ2FzZSgpPT09XFxcIm5hblxcXCI/TmFOOm5bMF09PT1cXFwiLVxcXCI/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzdHJpbmdpZnk6RmV9LG91PXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIixmb3JtYXQ6XFxcIkVYUFxcXCIsdGVzdDovXlstK10/KD86WzAtOV1bMC05X10qKT8oPzpcXFxcLlswLTlfXSopP1tlRV1bLStdP1swLTldKyQvLHJlc29sdmU6bj0+cGFyc2VGbG9hdChuLnJlcGxhY2UoL18vZyxcXFwiXFxcIikpLHN0cmluZ2lmeShuKXtsZXQgZT1OdW1iZXIobi52YWx1ZSk7cmV0dXJuIGlzRmluaXRlKGUpP2UudG9FeHBvbmVudGlhbCgpOkZlKG4pfX0sYXU9e2lkZW50aWZ5Om49PnR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIixkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcXFwiLHRlc3Q6L15bLStdPyg/OlswLTldWzAtOV9dKik/XFxcXC5bMC05X10qJC8scmVzb2x2ZShuKXtsZXQgZT1uZXcgUChwYXJzZUZsb2F0KG4ucmVwbGFjZSgvXy9nLFxcXCJcXFwiKSkpLHQ9bi5pbmRleE9mKFxcXCIuXFxcIik7aWYodCE9PS0xKXtsZXQgcj1uLnN1YnN0cmluZyh0KzEpLnJlcGxhY2UoL18vZyxcXFwiXFxcIik7cltyLmxlbmd0aC0xXT09PVxcXCIwXFxcIiYmKGUubWluRnJhY3Rpb25EaWdpdHM9ci5sZW5ndGgpfXJldHVybiBlfSxzdHJpbmdpZnk6RmV9O3ZhciBUcj1uPT50eXBlb2Ygbj09XFxcImJpZ2ludFxcXCJ8fE51bWJlci5pc0ludGVnZXIobik7ZnVuY3Rpb24geHMobixlLHQse2ludEFzQmlnSW50OnJ9KXtsZXQgcz1uWzBdO2lmKChzPT09XFxcIi1cXFwifHxzPT09XFxcIitcXFwiKSYmKGUrPTEpLG49bi5zdWJzdHJpbmcoZSkucmVwbGFjZSgvXy9nLFxcXCJcXFwiKSxyKXtzd2l0Y2godCl7Y2FzZSAyOm49YDBiJHtufWA7YnJlYWs7Y2FzZSA4Om49YDBvJHtufWA7YnJlYWs7Y2FzZSAxNjpuPWAweCR7bn1gO2JyZWFrfWxldCBvPUJpZ0ludChuKTtyZXR1cm4gcz09PVxcXCItXFxcIj9CaWdJbnQoLTEpKm86b31sZXQgaT1wYXJzZUludChuLHQpO3JldHVybiBzPT09XFxcIi1cXFwiPy0xKmk6aX1mdW5jdGlvbiB6aShuLGUsdCl7bGV0e3ZhbHVlOnJ9PW47aWYoVHIocikpe2xldCBzPXIudG9TdHJpbmcoZSk7cmV0dXJuIHI8MD9cXFwiLVxcXCIrdCtzLnN1YnN0cigxKTp0K3N9cmV0dXJuIEZlKG4pfXZhciB1dT17aWRlbnRpZnk6VHIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJCSU5cXFwiLHRlc3Q6L15bLStdPzBiWzAtMV9dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwyLDIsdCksc3RyaW5naWZ5Om49PnppKG4sMixcXFwiMGJcXFwiKX0sbHU9e2lkZW50aWZ5OlRyLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLGZvcm1hdDpcXFwiT0NUXFxcIix0ZXN0Oi9eWy0rXT8wWzAtN19dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwxLDgsdCksc3RyaW5naWZ5Om49PnppKG4sOCxcXFwiMFxcXCIpfSxjdT17aWRlbnRpZnk6VHIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsdGVzdDovXlstK10/WzAtOV1bMC05X10qJC8scmVzb2x2ZToobixlLHQpPT54cyhuLDAsMTAsdCksc3RyaW5naWZ5OkZlfSxmdT17aWRlbnRpZnk6VHIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmludFxcXCIsZm9ybWF0OlxcXCJIRVhcXFwiLHRlc3Q6L15bLStdPzB4WzAtOWEtZkEtRl9dKyQvLHJlc29sdmU6KG4sZSx0KT0+eHMobiwyLDE2LHQpLHN0cmluZ2lmeTpuPT56aShuLDE2LFxcXCIweFxcXCIpfTt2YXIgT249Y2xhc3MgbiBleHRlbmRzIG9le2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMudGFnPW4udGFnfWFkZChlKXtsZXQgdDtIKGUpP3Q9ZTplJiZ0eXBlb2YgZT09XFxcIm9iamVjdFxcXCImJlxcXCJrZXlcXFwiaW4gZSYmXFxcInZhbHVlXFxcImluIGUmJmUudmFsdWU9PT1udWxsP3Q9bmV3IGllKGUua2V5LG51bGwpOnQ9bmV3IGllKGUsbnVsbCksSXQodGhpcy5pdGVtcyx0LmtleSl8fHRoaXMuaXRlbXMucHVzaCh0KX1nZXQoZSx0KXtsZXQgcj1JdCh0aGlzLml0ZW1zLGUpO3JldHVybiF0JiZIKHIpP0soci5rZXkpP3Iua2V5LnZhbHVlOnIua2V5OnJ9c2V0KGUsdCl7aWYodHlwZW9mIHQhPVxcXCJib29sZWFuXFxcIil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJvb2xlYW4gdmFsdWUgZm9yIHNldChrZXksIHZhbHVlKSBpbiBhIFlBTUwgc2V0LCBub3QgJHt0eXBlb2YgdH1gKTtsZXQgcj1JdCh0aGlzLml0ZW1zLGUpO3ImJiF0P3RoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuaW5kZXhPZihyKSwxKTohciYmdCYmdGhpcy5pdGVtcy5wdXNoKG5ldyBpZShlKSl9dG9KU09OKGUsdCl7cmV0dXJuIHN1cGVyLnRvSlNPTihlLHQsU2V0KX10b1N0cmluZyhlLHQscil7aWYoIWUpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO2lmKHRoaXMuaGFzQWxsTnVsbFZhbHVlcyghMCkpcmV0dXJuIHN1cGVyLnRvU3RyaW5nKE9iamVjdC5hc3NpZ24oe30sZSx7YWxsTnVsbFZhbHVlczohMH0pLHQscik7dGhyb3cgbmV3IEVycm9yKFxcXCJTZXQgaXRlbXMgbXVzdCBhbGwgaGF2ZSBudWxsIHZhbHVlc1xcXCIpfXN0YXRpYyBmcm9tKGUsdCxyKXtsZXR7cmVwbGFjZXI6c309cixpPW5ldyB0aGlzKGUpO2lmKHQmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpZm9yKGxldCBvIG9mIHQpdHlwZW9mIHM9PVxcXCJmdW5jdGlvblxcXCImJihvPXMuY2FsbCh0LG8sbykpLGkuaXRlbXMucHVzaCh2bihvLG51bGwscikpO3JldHVybiBpfX07T24udGFnPVxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXRcXFwiO3ZhciBTcj17Y29sbGVjdGlvbjpcXFwibWFwXFxcIixpZGVudGlmeTpuPT5uIGluc3RhbmNlb2YgU2V0LG5vZGVDbGFzczpPbixkZWZhdWx0OiExLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6c2V0XFxcIixjcmVhdGVOb2RlOihuLGUsdCk9Pk9uLmZyb20obixlLHQpLHJlc29sdmUobixlKXtpZihIZShuKSl7aWYobi5oYXNBbGxOdWxsVmFsdWVzKCEwKSlyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgT24sbik7ZShcXFwiU2V0IGl0ZW1zIG11c3QgYWxsIGhhdmUgbnVsbCB2YWx1ZXNcXFwiKX1lbHNlIGUoXFxcIkV4cGVjdGVkIGEgbWFwcGluZyBmb3IgdGhpcyB0YWdcXFwiKTtyZXR1cm4gbn19O2Z1bmN0aW9uIFlpKG4sZSl7bGV0IHQ9blswXSxyPXQ9PT1cXFwiLVxcXCJ8fHQ9PT1cXFwiK1xcXCI/bi5zdWJzdHJpbmcoMSk6bixzPW89PmU/QmlnSW50KG8pOk51bWJlcihvKSxpPXIucmVwbGFjZSgvXy9nLFxcXCJcXFwiKS5zcGxpdChcXFwiOlxcXCIpLnJlZHVjZSgobyxhKT0+bypzKDYwKStzKGEpLHMoMCkpO3JldHVybiB0PT09XFxcIi1cXFwiP3MoLTEpKmk6aX1mdW5jdGlvbiBkdShuKXtsZXR7dmFsdWU6ZX09bix0PW89Pm87aWYodHlwZW9mIGU9PVxcXCJiaWdpbnRcXFwiKXQ9bz0+QmlnSW50KG8pO2Vsc2UgaWYoaXNOYU4oZSl8fCFpc0Zpbml0ZShlKSlyZXR1cm4gRmUobik7bGV0IHI9XFxcIlxcXCI7ZTwwJiYocj1cXFwiLVxcXCIsZSo9dCgtMSkpO2xldCBzPXQoNjApLGk9W2Ulc107cmV0dXJuIGU8NjA/aS51bnNoaWZ0KDApOihlPShlLWlbMF0pL3MsaS51bnNoaWZ0KGUlcyksZT49NjAmJihlPShlLWlbMF0pL3MsaS51bnNoaWZ0KGUpKSkscitpLm1hcChvPT5TdHJpbmcobykucGFkU3RhcnQoMixcXFwiMFxcXCIpKS5qb2luKFxcXCI6XFxcIikucmVwbGFjZSgvMDAwMDAwXFxcXGQqJC8sXFxcIlxcXCIpfXZhciBPcz17aWRlbnRpZnk6bj0+dHlwZW9mIG49PVxcXCJiaWdpbnRcXFwifHxOdW1iZXIuaXNJbnRlZ2VyKG4pLGRlZmF1bHQ6ITAsdGFnOlxcXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcXFwiLGZvcm1hdDpcXFwiVElNRVxcXCIsdGVzdDovXlstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKSskLyxyZXNvbHZlOihuLGUse2ludEFzQmlnSW50OnR9KT0+WWkobix0KSxzdHJpbmdpZnk6ZHV9LElzPXtpZGVudGlmeTpuPT50eXBlb2Ygbj09XFxcIm51bWJlclxcXCIsZGVmYXVsdDohMCx0YWc6XFxcInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0XFxcIixmb3JtYXQ6XFxcIlRJTUVcXFwiLHRlc3Q6L15bLStdP1swLTldWzAtOV9dKig/OjpbMC01XT9bMC05XSkrXFxcXC5bMC05X10qJC8scmVzb2x2ZTpuPT5ZaShuLCExKSxzdHJpbmdpZnk6ZHV9LEluPXtpZGVudGlmeTpuPT5uIGluc3RhbmNlb2YgRGF0ZSxkZWZhdWx0OiEwLHRhZzpcXFwidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wXFxcIix0ZXN0OlJlZ0V4cChcXFwiXihbMC05XXs0fSktKFswLTldezEsMn0pLShbMC05XXsxLDJ9KSg/Oig/OnR8VHxbIFxcXFxcXFxcdF0rKShbMC05XXsxLDJ9KTooWzAtOV17MSwyfSk6KFswLTldezEsMn0oXFxcXFxcXFwuWzAtOV0rKT8pKD86WyBcXFxcXFxcXHRdKihafFstK11bMDEyXT9bMC05XSg/OjpbMC05XXsyfSk/KSk/KT8kXFxcIikscmVzb2x2ZShuKXtsZXQgZT1uLm1hdGNoKEluLnRlc3QpO2lmKCFlKXRocm93IG5ldyBFcnJvcihcXFwiISF0aW1lc3RhbXAgZXhwZWN0cyBhIGRhdGUsIHN0YXJ0aW5nIHdpdGggeXl5eS1tbS1kZFxcXCIpO2xldFssdCxyLHMsaSxvLGFdPWUubWFwKE51bWJlciksdT1lWzddP051bWJlcigoZVs3XStcXFwiMDBcXFwiKS5zdWJzdHIoMSwzKSk6MCxsPURhdGUuVVRDKHQsci0xLHMsaXx8MCxvfHwwLGF8fDAsdSksZj1lWzhdO2lmKGYmJmYhPT1cXFwiWlxcXCIpe2xldCBkPVlpKGYsITEpO01hdGguYWJzKGQpPDMwJiYoZCo9NjApLGwtPTZlNCpkfXJldHVybiBuZXcgRGF0ZShsKX0sc3RyaW5naWZ5Oih7dmFsdWU6bn0pPT5uLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvKChUMDA6MDApPzowMCk/XFxcXC4wMDBaJC8sXFxcIlxcXCIpfTt2YXIgR2k9W0dlLFplLEx0LEh0LEhpLEppLHV1LGx1LGN1LGZ1LGl1LG91LGF1LEZyLFllLHdyLEVyLFNyLE9zLElzLEluXTt2YXIgaHU9bmV3IE1hcChbW1xcXCJjb3JlXFxcIix0dV0sW1xcXCJmYWlsc2FmZVxcXCIsW0dlLFplLEx0XV0sW1xcXCJqc29uXFxcIixydV0sW1xcXCJ5YW1sMTFcXFwiLEdpXSxbXFxcInlhbWwtMS4xXFxcIixHaV1dKSxtdT17YmluYXJ5OkZyLGJvb2w6YnIsZmxvYXQ6d3MsZmxvYXRFeHA6RXMsZmxvYXROYU46RnMsZmxvYXRUaW1lOklzLGludDprcyxpbnRIZXg6Q3MsaW50T2N0OlNzLGludFRpbWU6T3MsbWFwOkdlLG1lcmdlOlllLG51bGw6SHQsb21hcDp3cixwYWlyczpFcixzZXE6WmUsc2V0OlNyLHRpbWVzdGFtcDpJbn0scHU9e1xcXCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnlcXFwiOkZyLFxcXCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZVxcXCI6WWUsXFxcInRhZzp5YW1sLm9yZywyMDAyOm9tYXBcXFwiOndyLFxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlyc1xcXCI6RXIsXFxcInRhZzp5YW1sLm9yZywyMDAyOnNldFxcXCI6U3IsXFxcInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcFxcXCI6SW59O2Z1bmN0aW9uIExzKG4sZSx0KXtsZXQgcj1odS5nZXQoZSk7aWYociYmIW4pcmV0dXJuIHQmJiFyLmluY2x1ZGVzKFllKT9yLmNvbmNhdChZZSk6ci5zbGljZSgpO2xldCBzPXI7aWYoIXMpaWYoQXJyYXkuaXNBcnJheShuKSlzPVtdO2Vsc2V7bGV0IGk9QXJyYXkuZnJvbShodS5rZXlzKCkpLmZpbHRlcihvPT5vIT09XFxcInlhbWwxMVxcXCIpLm1hcChvPT5KU09OLnN0cmluZ2lmeShvKSkuam9pbihcXFwiLCBcXFwiKTt0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc2NoZW1hIFxcXCIke2V9XFxcIjsgdXNlIG9uZSBvZiAke2l9IG9yIGRlZmluZSBjdXN0b21UYWdzIGFycmF5YCl9aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGkgb2YgbilzPXMuY29uY2F0KGkpO2Vsc2UgdHlwZW9mIG49PVxcXCJmdW5jdGlvblxcXCImJihzPW4ocy5zbGljZSgpKSk7cmV0dXJuIHQmJihzPXMuY29uY2F0KFllKSkscy5yZWR1Y2UoKGksbyk9PntsZXQgYT10eXBlb2Ygbz09XFxcInN0cmluZ1xcXCI/bXVbb106bztpZighYSl7bGV0IHU9SlNPTi5zdHJpbmdpZnkobyksbD1PYmplY3Qua2V5cyhtdSkubWFwKGY9PkpTT04uc3RyaW5naWZ5KGYpKS5qb2luKFxcXCIsIFxcXCIpO3Rocm93IG5ldyBFcnJvcihgVW5rbm93biBjdXN0b20gdGFnICR7dX07IHVzZSBvbmUgb2YgJHtsfWApfXJldHVybiBpLmluY2x1ZGVzKGEpfHxpLnB1c2goYSksaX0sW10pfXZhciBzZj0obixlKT0+bi5rZXk8ZS5rZXk/LTE6bi5rZXk+ZS5rZXk/MTowLGtyPWNsYXNzIG57Y29uc3RydWN0b3Ioe2NvbXBhdDplLGN1c3RvbVRhZ3M6dCxtZXJnZTpyLHJlc29sdmVLbm93blRhZ3M6cyxzY2hlbWE6aSxzb3J0TWFwRW50cmllczpvLHRvU3RyaW5nRGVmYXVsdHM6YX0pe3RoaXMuY29tcGF0PUFycmF5LmlzQXJyYXkoZSk/THMoZSxcXFwiY29tcGF0XFxcIik6ZT9McyhudWxsLGUpOm51bGwsdGhpcy5uYW1lPXR5cGVvZiBpPT1cXFwic3RyaW5nXFxcIiYmaXx8XFxcImNvcmVcXFwiLHRoaXMua25vd25UYWdzPXM/cHU6e30sdGhpcy50YWdzPUxzKHQsdGhpcy5uYW1lLHIpLHRoaXMudG9TdHJpbmdPcHRpb25zPWEhPW51bGw/YTpudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEtlLHt2YWx1ZTpHZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEllLHt2YWx1ZTpMdH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEZ0LHt2YWx1ZTpaZX0pLHRoaXMuc29ydE1hcEVudHJpZXM9dHlwZW9mIG89PVxcXCJmdW5jdGlvblxcXCI/bzpvPT09ITA/c2Y6bnVsbH1jbG9uZSgpe2xldCBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGhpcykpO3JldHVybiBlLnRhZ3M9dGhpcy50YWdzLnNsaWNlKCksZX19O2Z1bmN0aW9uIER1KG4sZSl7dmFyIHU7bGV0IHQ9W10scj1lLmRpcmVjdGl2ZXM9PT0hMDtpZihlLmRpcmVjdGl2ZXMhPT0hMSYmbi5kaXJlY3RpdmVzKXtsZXQgbD1uLmRpcmVjdGl2ZXMudG9TdHJpbmcobik7bD8odC5wdXNoKGwpLHI9ITApOm4uZGlyZWN0aXZlcy5kb2NTdGFydCYmKHI9ITApfXImJnQucHVzaChcXFwiLS0tXFxcIik7bGV0IHM9aHMobixlKSx7Y29tbWVudFN0cmluZzppfT1zLm9wdGlvbnM7aWYobi5jb21tZW50QmVmb3JlKXt0Lmxlbmd0aCE9PTEmJnQudW5zaGlmdChcXFwiXFxcIik7bGV0IGw9aShuLmNvbW1lbnRCZWZvcmUpO3QudW5zaGlmdChQZShsLFxcXCJcXFwiKSl9bGV0IG89ITEsYT1udWxsO2lmKG4uY29udGVudHMpe2lmKEoobi5jb250ZW50cykpe2lmKG4uY29udGVudHMuc3BhY2VCZWZvcmUmJnImJnQucHVzaChcXFwiXFxcIiksbi5jb250ZW50cy5jb21tZW50QmVmb3JlKXtsZXQgZD1pKG4uY29udGVudHMuY29tbWVudEJlZm9yZSk7dC5wdXNoKFBlKGQsXFxcIlxcXCIpKX1zLmZvcmNlQmxvY2tJbmRlbnQ9ISFuLmNvbW1lbnQsYT1uLmNvbnRlbnRzLmNvbW1lbnR9bGV0IGw9YT92b2lkIDA6KCk9Pm89ITAsZj1UdChuLmNvbnRlbnRzLHMsKCk9PmE9bnVsbCxsKTthJiYoZis9b3QoZixcXFwiXFxcIixpKGEpKSksKGZbMF09PT1cXFwifFxcXCJ8fGZbMF09PT1cXFwiPlxcXCIpJiZ0W3QubGVuZ3RoLTFdPT09XFxcIi0tLVxcXCI/dFt0Lmxlbmd0aC0xXT1gLS0tICR7Zn1gOnQucHVzaChmKX1lbHNlIHQucHVzaChUdChuLmNvbnRlbnRzLHMpKTtpZigodT1uLmRpcmVjdGl2ZXMpIT1udWxsJiZ1LmRvY0VuZClpZihuLmNvbW1lbnQpe2xldCBsPWkobi5jb21tZW50KTtsLmluY2x1ZGVzKGBcXG5gKT8odC5wdXNoKFxcXCIuLi5cXFwiKSx0LnB1c2goUGUobCxcXFwiXFxcIikpKTp0LnB1c2goYC4uLiAke2x9YCl9ZWxzZSB0LnB1c2goXFxcIi4uLlxcXCIpO2Vsc2V7bGV0IGw9bi5jb21tZW50O2wmJm8mJihsPWwucmVwbGFjZSgvXlxcXFxuKy8sXFxcIlxcXCIpKSxsJiYoKCFvfHxhKSYmdFt0Lmxlbmd0aC0xXSE9PVxcXCJcXFwiJiZ0LnB1c2goXFxcIlxcXCIpLHQucHVzaChQZShpKGwpLFxcXCJcXFwiKSkpfXJldHVybiB0LmpvaW4oYFxcbmApK2BcXG5gfXZhciBOdD1jbGFzcyBue2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmNvbW1lbnRCZWZvcmU9bnVsbCx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLmVycm9ycz1bXSx0aGlzLndhcm5pbmdzPVtdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFRlLHt2YWx1ZTpzc30pO2xldCBzPW51bGw7dHlwZW9mIHQ9PVxcXCJmdW5jdGlvblxcXCJ8fEFycmF5LmlzQXJyYXkodCk/cz10OnI9PT12b2lkIDAmJnQmJihyPXQsdD12b2lkIDApO2xldCBpPU9iamVjdC5hc3NpZ24oe2ludEFzQmlnSW50OiExLGtlZXBTb3VyY2VUb2tlbnM6ITEsbG9nTGV2ZWw6XFxcIndhcm5cXFwiLHByZXR0eUVycm9yczohMCxzdHJpY3Q6ITAsc3RyaW5nS2V5czohMSx1bmlxdWVLZXlzOiEwLHZlcnNpb246XFxcIjEuMlxcXCJ9LHIpO3RoaXMub3B0aW9ucz1pO2xldHt2ZXJzaW9uOm99PWk7ciE9bnVsbCYmci5fZGlyZWN0aXZlcz8odGhpcy5kaXJlY3RpdmVzPXIuX2RpcmVjdGl2ZXMuYXREb2N1bWVudCgpLHRoaXMuZGlyZWN0aXZlcy55YW1sLmV4cGxpY2l0JiYobz10aGlzLmRpcmVjdGl2ZXMueWFtbC52ZXJzaW9uKSk6dGhpcy5kaXJlY3RpdmVzPW5ldyBpdCh7dmVyc2lvbjpvfSksdGhpcy5zZXRTY2hlbWEobyxyKSx0aGlzLmNvbnRlbnRzPWU9PT12b2lkIDA/bnVsbDp0aGlzLmNyZWF0ZU5vZGUoZSxzLHIpfWNsb25lKCl7bGV0IGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSx7W1RlXTp7dmFsdWU6c3N9fSk7cmV0dXJuIGUuY29tbWVudEJlZm9yZT10aGlzLmNvbW1lbnRCZWZvcmUsZS5jb21tZW50PXRoaXMuY29tbWVudCxlLmVycm9ycz10aGlzLmVycm9ycy5zbGljZSgpLGUud2FybmluZ3M9dGhpcy53YXJuaW5ncy5zbGljZSgpLGUub3B0aW9ucz1PYmplY3QuYXNzaWduKHt9LHRoaXMub3B0aW9ucyksdGhpcy5kaXJlY3RpdmVzJiYoZS5kaXJlY3RpdmVzPXRoaXMuZGlyZWN0aXZlcy5jbG9uZSgpKSxlLnNjaGVtYT10aGlzLnNjaGVtYS5jbG9uZSgpLGUuY29udGVudHM9Sih0aGlzLmNvbnRlbnRzKT90aGlzLmNvbnRlbnRzLmNsb25lKGUuc2NoZW1hKTp0aGlzLmNvbnRlbnRzLHRoaXMucmFuZ2UmJihlLnJhbmdlPXRoaXMucmFuZ2Uuc2xpY2UoKSksZX1hZGQoZSl7TG4odGhpcy5jb250ZW50cykmJnRoaXMuY29udGVudHMuYWRkKGUpfWFkZEluKGUsdCl7TG4odGhpcy5jb250ZW50cykmJnRoaXMuY29udGVudHMuYWRkSW4oZSx0KX1jcmVhdGVBbGlhcyhlLHQpe2lmKCFlLmFuY2hvcil7bGV0IHI9QmkodGhpcyk7ZS5hbmNob3I9IXR8fHIuaGFzKHQpP1BpKHR8fFxcXCJhXFxcIixyKTp0fXJldHVybiBuZXcgRXQoZS5hbmNob3IpfWNyZWF0ZU5vZGUoZSx0LHIpe2xldCBzO2lmKHR5cGVvZiB0PT1cXFwiZnVuY3Rpb25cXFwiKWU9dC5jYWxsKHtcXFwiXFxcIjplfSxcXFwiXFxcIixlKSxzPXQ7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXtsZXQgRD1JPT50eXBlb2YgST09XFxcIm51bWJlclxcXCJ8fEkgaW5zdGFuY2VvZiBTdHJpbmd8fEkgaW5zdGFuY2VvZiBOdW1iZXIsVD10LmZpbHRlcihEKS5tYXAoU3RyaW5nKTtULmxlbmd0aD4wJiYodD10LmNvbmNhdChUKSkscz10fWVsc2Ugcj09PXZvaWQgMCYmdCYmKHI9dCx0PXZvaWQgMCk7bGV0e2FsaWFzRHVwbGljYXRlT2JqZWN0czppLGFuY2hvclByZWZpeDpvLGZsb3c6YSxrZWVwVW5kZWZpbmVkOnUsb25UYWdPYmo6bCx0YWc6Zn09ciE9bnVsbD9yOnt9LHtvbkFuY2hvcjpkLHNldEFuY2hvcnM6bSxzb3VyY2VPYmplY3RzOmh9PVlhKHRoaXMsb3x8XFxcImFcXFwiKSxiPXthbGlhc0R1cGxpY2F0ZU9iamVjdHM6aSE9bnVsbD9pOiEwLGtlZXBVbmRlZmluZWQ6dSE9bnVsbD91OiExLG9uQW5jaG9yOmQsb25UYWdPYmo6bCxyZXBsYWNlcjpzLHNjaGVtYTp0aGlzLnNjaGVtYSxzb3VyY2VPYmplY3RzOmh9LGc9d3QoZSxmLGIpO3JldHVybiBhJiZaKGcpJiYoZy5mbG93PSEwKSxtKCksZ31jcmVhdGVQYWlyKGUsdCxyPXt9KXtsZXQgcz10aGlzLmNyZWF0ZU5vZGUoZSxudWxsLHIpLGk9dGhpcy5jcmVhdGVOb2RlKHQsbnVsbCxyKTtyZXR1cm4gbmV3IGllKHMsaSl9ZGVsZXRlKGUpe3JldHVybiBMbih0aGlzLmNvbnRlbnRzKT90aGlzLmNvbnRlbnRzLmRlbGV0ZShlKTohMX1kZWxldGVJbihlKXtyZXR1cm4ga24oZSk/dGhpcy5jb250ZW50cz09bnVsbD8hMToodGhpcy5jb250ZW50cz1udWxsLCEwKTpMbih0aGlzLmNvbnRlbnRzKT90aGlzLmNvbnRlbnRzLmRlbGV0ZUluKGUpOiExfWdldChlLHQpe3JldHVybiBaKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZ2V0KGUsdCk6dm9pZCAwfWdldEluKGUsdCl7cmV0dXJuIGtuKGUpPyF0JiZLKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMudmFsdWU6dGhpcy5jb250ZW50czpaKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuZ2V0SW4oZSx0KTp2b2lkIDB9aGFzKGUpe3JldHVybiBaKHRoaXMuY29udGVudHMpP3RoaXMuY29udGVudHMuaGFzKGUpOiExfWhhc0luKGUpe3JldHVybiBrbihlKT90aGlzLmNvbnRlbnRzIT09dm9pZCAwOloodGhpcy5jb250ZW50cyk/dGhpcy5jb250ZW50cy5oYXNJbihlKTohMX1zZXQoZSx0KXt0aGlzLmNvbnRlbnRzPT1udWxsP3RoaXMuY29udGVudHM9cHIodGhpcy5zY2hlbWEsW2VdLHQpOkxuKHRoaXMuY29udGVudHMpJiZ0aGlzLmNvbnRlbnRzLnNldChlLHQpfXNldEluKGUsdCl7a24oZSk/dGhpcy5jb250ZW50cz10OnRoaXMuY29udGVudHM9PW51bGw/dGhpcy5jb250ZW50cz1wcih0aGlzLnNjaGVtYSxBcnJheS5mcm9tKGUpLHQpOkxuKHRoaXMuY29udGVudHMpJiZ0aGlzLmNvbnRlbnRzLnNldEluKGUsdCl9c2V0U2NoZW1hKGUsdD17fSl7dHlwZW9mIGU9PVxcXCJudW1iZXJcXFwiJiYoZT1TdHJpbmcoZSkpO2xldCByO3N3aXRjaChlKXtjYXNlXFxcIjEuMVxcXCI6dGhpcy5kaXJlY3RpdmVzP3RoaXMuZGlyZWN0aXZlcy55YW1sLnZlcnNpb249XFxcIjEuMVxcXCI6dGhpcy5kaXJlY3RpdmVzPW5ldyBpdCh7dmVyc2lvbjpcXFwiMS4xXFxcIn0pLHI9e3Jlc29sdmVLbm93blRhZ3M6ITEsc2NoZW1hOlxcXCJ5YW1sLTEuMVxcXCJ9O2JyZWFrO2Nhc2VcXFwiMS4yXFxcIjpjYXNlXFxcIm5leHRcXFwiOnRoaXMuZGlyZWN0aXZlcz90aGlzLmRpcmVjdGl2ZXMueWFtbC52ZXJzaW9uPWU6dGhpcy5kaXJlY3RpdmVzPW5ldyBpdCh7dmVyc2lvbjplfSkscj17cmVzb2x2ZUtub3duVGFnczohMCxzY2hlbWE6XFxcImNvcmVcXFwifTticmVhaztjYXNlIG51bGw6dGhpcy5kaXJlY3RpdmVzJiZkZWxldGUgdGhpcy5kaXJlY3RpdmVzLHI9bnVsbDticmVhaztkZWZhdWx0OntsZXQgcz1KU09OLnN0cmluZ2lmeShlKTt0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICcxLjEnLCAnMS4yJyBvciBudWxsIGFzIGZpcnN0IGFyZ3VtZW50LCBidXQgZm91bmQ6ICR7c31gKX19aWYodC5zY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpdGhpcy5zY2hlbWE9dC5zY2hlbWE7ZWxzZSBpZihyKXRoaXMuc2NoZW1hPW5ldyBrcihPYmplY3QuYXNzaWduKHIsdCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFxcXCJXaXRoIGEgbnVsbCBZQU1MIHZlcnNpb24sIHRoZSB7IHNjaGVtYTogU2NoZW1hIH0gb3B0aW9uIGlzIHJlcXVpcmVkXFxcIil9dG9KUyh7anNvbjplLGpzb25Bcmc6dCxtYXBBc01hcDpyLG1heEFsaWFzQ291bnQ6cyxvbkFuY2hvcjppLHJldml2ZXI6b309e30pe2xldCBhPXthbmNob3JzOm5ldyBNYXAsZG9jOnRoaXMsa2VlcDohZSxtYXBBc01hcDpyPT09ITAsbWFwS2V5V2FybmVkOiExLG1heEFsaWFzQ291bnQ6dHlwZW9mIHM9PVxcXCJudW1iZXJcXFwiP3M6MTAwfSx1PWNlKHRoaXMuY29udGVudHMsdCE9bnVsbD90OlxcXCJcXFwiLGEpO2lmKHR5cGVvZiBpPT1cXFwiZnVuY3Rpb25cXFwiKWZvcihsZXR7Y291bnQ6bCxyZXM6Zn1vZiBhLmFuY2hvcnMudmFsdWVzKCkpaShmLGwpO3JldHVybiB0eXBlb2Ygbz09XFxcImZ1bmN0aW9uXFxcIj94dChvLHtcXFwiXFxcIjp1fSxcXFwiXFxcIix1KTp1fXRvSlNPTihlLHQpe3JldHVybiB0aGlzLnRvSlMoe2pzb246ITAsanNvbkFyZzplLG1hcEFzTWFwOiExLG9uQW5jaG9yOnR9KX10b1N0cmluZyhlPXt9KXtpZih0aGlzLmVycm9ycy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoXFxcIkRvY3VtZW50IHdpdGggZXJyb3JzIGNhbm5vdCBiZSBzdHJpbmdpZmllZFxcXCIpO2lmKFxcXCJpbmRlbnRcXFwiaW4gZSYmKCFOdW1iZXIuaXNJbnRlZ2VyKGUuaW5kZW50KXx8TnVtYmVyKGUuaW5kZW50KTw9MCkpe2xldCB0PUpTT04uc3RyaW5naWZ5KGUuaW5kZW50KTt0aHJvdyBuZXcgRXJyb3IoYFxcXCJpbmRlbnRcXFwiIG9wdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgbm90ICR7dH1gKX1yZXR1cm4gRHUodGhpcyxlKX19O2Z1bmN0aW9uIExuKG4pe2lmKFoobikpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKFxcXCJFeHBlY3RlZCBhIFlBTUwgY29sbGVjdGlvbiBhcyBkb2N1bWVudCBjb250ZW50c1xcXCIpfXZhciBDcj1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxyLHMpe3N1cGVyKCksdGhpcy5uYW1lPWUsdGhpcy5jb2RlPXIsdGhpcy5tZXNzYWdlPXMsdGhpcy5wb3M9dH19LFFlPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKFxcXCJZQU1MUGFyc2VFcnJvclxcXCIsZSx0LHIpfX0sdnI9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoXFxcIllBTUxXYXJuaW5nXFxcIixlLHQscil9fSxaaT0obixlKT0+dD0+e2lmKHQucG9zWzBdPT09LTEpcmV0dXJuO3QubGluZVBvcz10LnBvcy5tYXAoYT0+ZS5saW5lUG9zKGEpKTtsZXR7bGluZTpyLGNvbDpzfT10LmxpbmVQb3NbMF07dC5tZXNzYWdlKz1gIGF0IGxpbmUgJHtyfSwgY29sdW1uICR7c31gO2xldCBpPXMtMSxvPW4uc3Vic3RyaW5nKGUubGluZVN0YXJ0c1tyLTFdLGUubGluZVN0YXJ0c1tyXSkucmVwbGFjZSgvW1xcXFxuXFxcXHJdKyQvLFxcXCJcXFwiKTtpZihpPj02MCYmby5sZW5ndGg+ODApe2xldCBhPU1hdGgubWluKGktMzksby5sZW5ndGgtNzkpO289XFxcIlxcXFx1MjAyNlxcXCIrby5zdWJzdHJpbmcoYSksaS09YS0xfWlmKG8ubGVuZ3RoPjgwJiYobz1vLnN1YnN0cmluZygwLDc5KStcXFwiXFxcXHUyMDI2XFxcIikscj4xJiYvXiAqJC8udGVzdChvLnN1YnN0cmluZygwLGkpKSl7bGV0IGE9bi5zdWJzdHJpbmcoZS5saW5lU3RhcnRzW3ItMl0sZS5saW5lU3RhcnRzW3ItMV0pO2EubGVuZ3RoPjgwJiYoYT1hLnN1YnN0cmluZygwLDc5KStgXFxcXHUyMDI2XFxuYCksbz1hK299aWYoL1teIF0vLnRlc3Qobykpe2xldCBhPTEsdT10LmxpbmVQb3NbMV07dSYmdS5saW5lPT09ciYmdS5jb2w+cyYmKGE9TWF0aC5tYXgoMSxNYXRoLm1pbih1LmNvbC1zLDgwLWkpKSk7bGV0IGw9XFxcIiBcXFwiLnJlcGVhdChpKStcXFwiXlxcXCIucmVwZWF0KGEpO3QubWVzc2FnZSs9YDpcXG5cXG4ke299XFxuJHtsfVxcbmB9fTtmdW5jdGlvbiBhdChuLHtmbG93OmUsaW5kaWNhdG9yOnQsbmV4dDpyLG9mZnNldDpzLG9uRXJyb3I6aSxwYXJlbnRJbmRlbnQ6byxzdGFydE9uTmV3bGluZTphfSl7bGV0IHU9ITEsbD1hLGY9YSxkPVxcXCJcXFwiLG09XFxcIlxcXCIsaD0hMSxiPSExLGc9bnVsbCxEPW51bGwsVD1udWxsLEk9bnVsbCxOPW51bGwseT1udWxsLHc9bnVsbDtmb3IobGV0IEMgb2Ygbilzd2l0Y2goYiYmKEMudHlwZSE9PVxcXCJzcGFjZVxcXCImJkMudHlwZSE9PVxcXCJuZXdsaW5lXFxcIiYmQy50eXBlIT09XFxcImNvbW1hXFxcIiYmaShDLm9mZnNldCxcXFwiTUlTU0lOR19DSEFSXFxcIixcXFwiVGFncyBhbmQgYW5jaG9ycyBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBuZXh0IHRva2VuIGJ5IHdoaXRlIHNwYWNlXFxcIiksYj0hMSksZyYmKGwmJkMudHlwZSE9PVxcXCJjb21tZW50XFxcIiYmQy50eXBlIT09XFxcIm5ld2xpbmVcXFwiJiZpKGcsXFxcIlRBQl9BU19JTkRFTlRcXFwiLFxcXCJUYWJzIGFyZSBub3QgYWxsb3dlZCBhcyBpbmRlbnRhdGlvblxcXCIpLGc9bnVsbCksQy50eXBlKXtjYXNlXFxcInNwYWNlXFxcIjohZSYmKHQhPT1cXFwiZG9jLXN0YXJ0XFxcInx8KHI9PW51bGw/dm9pZCAwOnIudHlwZSkhPT1cXFwiZmxvdy1jb2xsZWN0aW9uXFxcIikmJkMuc291cmNlLmluY2x1ZGVzKFxcXCJcXHRcXFwiKSYmKGc9QyksZj0hMDticmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOntmfHxpKEMsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkNvbW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIgdG9rZW5zIGJ5IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnNcXFwiKTtsZXQgVj1DLnNvdXJjZS5zdWJzdHJpbmcoMSl8fFxcXCIgXFxcIjtkP2QrPW0rVjpkPVYsbT1cXFwiXFxcIixsPSExO2JyZWFrfWNhc2VcXFwibmV3bGluZVxcXCI6bD9kP2QrPUMuc291cmNlOnU9ITA6bSs9Qy5zb3VyY2UsbD0hMCxoPSEwLChEfHxUKSYmKEk9QyksZj0hMDticmVhaztjYXNlXFxcImFuY2hvclxcXCI6RCYmaShDLFxcXCJNVUxUSVBMRV9BTkNIT1JTXFxcIixcXFwiQSBub2RlIGNhbiBoYXZlIGF0IG1vc3Qgb25lIGFuY2hvclxcXCIpLEMuc291cmNlLmVuZHNXaXRoKFxcXCI6XFxcIikmJmkoQy5vZmZzZXQrQy5zb3VyY2UubGVuZ3RoLTEsXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFuY2hvciBlbmRpbmcgaW4gOiBpcyBhbWJpZ3VvdXNcXFwiLCEwKSxEPUMsdz09PW51bGwmJih3PUMub2Zmc2V0KSxsPSExLGY9ITEsYj0hMDticmVhaztjYXNlXFxcInRhZ1xcXCI6e1QmJmkoQyxcXFwiTVVMVElQTEVfVEFHU1xcXCIsXFxcIkEgbm9kZSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSB0YWdcXFwiKSxUPUMsdz09PW51bGwmJih3PUMub2Zmc2V0KSxsPSExLGY9ITEsYj0hMDticmVha31jYXNlIHQ6KER8fFQpJiZpKEMsXFxcIkJBRF9QUk9QX09SREVSXFxcIixgQW5jaG9ycyBhbmQgdGFncyBtdXN0IGJlIGFmdGVyIHRoZSAke0Muc291cmNlfSBpbmRpY2F0b3JgKSx5JiZpKEMsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICR7Qy5zb3VyY2V9IGluICR7ZSE9bnVsbD9lOlxcXCJjb2xsZWN0aW9uXFxcIn1gKSx5PUMsbD10PT09XFxcInNlcS1pdGVtLWluZFxcXCJ8fHQ9PT1cXFwiZXhwbGljaXQta2V5LWluZFxcXCIsZj0hMTticmVhaztjYXNlXFxcImNvbW1hXFxcIjppZihlKXtOJiZpKEMsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICwgaW4gJHtlfWApLE49QyxsPSExLGY9ITE7YnJlYWt9ZGVmYXVsdDppKEMsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkICR7Qy50eXBlfSB0b2tlbmApLGw9ITEsZj0hMX1sZXQgdj1uW24ubGVuZ3RoLTFdLHg9dj92Lm9mZnNldCt2LnNvdXJjZS5sZW5ndGg6cztyZXR1cm4gYiYmciYmci50eXBlIT09XFxcInNwYWNlXFxcIiYmci50eXBlIT09XFxcIm5ld2xpbmVcXFwiJiZyLnR5cGUhPT1cXFwiY29tbWFcXFwiJiYoci50eXBlIT09XFxcInNjYWxhclxcXCJ8fHIuc291cmNlIT09XFxcIlxcXCIpJiZpKHIub2Zmc2V0LFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJUYWdzIGFuZCBhbmNob3JzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIG5leHQgdG9rZW4gYnkgd2hpdGUgc3BhY2VcXFwiKSxnJiYobCYmZy5pbmRlbnQ8PW98fChyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09XFxcImJsb2NrLW1hcFxcXCJ8fChyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09XFxcImJsb2NrLXNlcVxcXCIpJiZpKGcsXFxcIlRBQl9BU19JTkRFTlRcXFwiLFxcXCJUYWJzIGFyZSBub3QgYWxsb3dlZCBhcyBpbmRlbnRhdGlvblxcXCIpLHtjb21tYTpOLGZvdW5kOnksc3BhY2VCZWZvcmU6dSxjb21tZW50OmQsaGFzTmV3bGluZTpoLGFuY2hvcjpELHRhZzpULG5ld2xpbmVBZnRlclByb3A6SSxlbmQ6eCxzdGFydDp3IT1udWxsP3c6eH19ZnVuY3Rpb24gQXQobil7aWYoIW4pcmV0dXJuIG51bGw7c3dpdGNoKG4udHlwZSl7Y2FzZVxcXCJhbGlhc1xcXCI6Y2FzZVxcXCJzY2FsYXJcXFwiOmNhc2VcXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiOmNhc2VcXFwic2luZ2xlLXF1b3RlZC1zY2FsYXJcXFwiOmlmKG4uc291cmNlLmluY2x1ZGVzKGBcXG5gKSlyZXR1cm4hMDtpZihuLmVuZCl7Zm9yKGxldCBlIG9mIG4uZW5kKWlmKGUudHlwZT09PVxcXCJuZXdsaW5lXFxcIilyZXR1cm4hMH1yZXR1cm4hMTtjYXNlXFxcImZsb3ctY29sbGVjdGlvblxcXCI6Zm9yKGxldCBlIG9mIG4uaXRlbXMpe2ZvcihsZXQgdCBvZiBlLnN0YXJ0KWlmKHQudHlwZT09PVxcXCJuZXdsaW5lXFxcIilyZXR1cm4hMDtpZihlLnNlcCl7Zm9yKGxldCB0IG9mIGUuc2VwKWlmKHQudHlwZT09PVxcXCJuZXdsaW5lXFxcIilyZXR1cm4hMH1pZihBdChlLmtleSl8fEF0KGUudmFsdWUpKXJldHVybiEwfXJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWZ1bmN0aW9uIHhyKG4sZSx0KXtpZigoZT09bnVsbD92b2lkIDA6ZS50eXBlKT09PVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiKXtsZXQgcj1lLmVuZFswXTtyLmluZGVudD09PW4mJihyLnNvdXJjZT09PVxcXCJdXFxcInx8ci5zb3VyY2U9PT1cXFwifVxcXCIpJiZBdChlKSYmdChyLFxcXCJCQURfSU5ERU5UXFxcIixcXFwiRmxvdyBlbmQgaW5kaWNhdG9yIHNob3VsZCBiZSBtb3JlIGluZGVudGVkIHRoYW4gcGFyZW50XFxcIiwhMCl9fWZ1bmN0aW9uIE5zKG4sZSx0KXtsZXR7dW5pcXVlS2V5czpyfT1uLm9wdGlvbnM7aWYocj09PSExKXJldHVybiExO2xldCBzPXR5cGVvZiByPT1cXFwiZnVuY3Rpb25cXFwiP3I6KGksbyk9Pmk9PT1vfHxLKGkpJiZLKG8pJiZpLnZhbHVlPT09by52YWx1ZTtyZXR1cm4gZS5zb21lKGk9PnMoaS5rZXksdCkpfXZhciB5dT1cXFwiQWxsIG1hcHBpbmcgaXRlbXMgbXVzdCBzdGFydCBhdCB0aGUgc2FtZSBjb2x1bW5cXFwiO2Z1bmN0aW9uIGd1KHtjb21wb3NlTm9kZTpuLGNvbXBvc2VFbXB0eU5vZGU6ZX0sdCxyLHMsaSl7dmFyIGYsZDtsZXQgbz0oZj1pPT1udWxsP3ZvaWQgMDppLm5vZGVDbGFzcykhPW51bGw/ZjpvZSxhPW5ldyBvKHQuc2NoZW1hKTt0LmF0Um9vdCYmKHQuYXRSb290PSExKTtsZXQgdT1yLm9mZnNldCxsPW51bGw7Zm9yKGxldCBtIG9mIHIuaXRlbXMpe2xldHtzdGFydDpoLGtleTpiLHNlcDpnLHZhbHVlOkR9PW0sVD1hdChoLHtpbmRpY2F0b3I6XFxcImV4cGxpY2l0LWtleS1pbmRcXFwiLG5leHQ6YiE9bnVsbD9iOmc9PW51bGw/dm9pZCAwOmdbMF0sb2Zmc2V0OnUsb25FcnJvcjpzLHBhcmVudEluZGVudDpyLmluZGVudCxzdGFydE9uTmV3bGluZTohMH0pLEk9IVQuZm91bmQ7aWYoSSl7aWYoYiYmKGIudHlwZT09PVxcXCJibG9jay1zZXFcXFwiP3ModSxcXFwiQkxPQ0tfQVNfSU1QTElDSVRfS0VZXFxcIixcXFwiQSBibG9jayBzZXF1ZW5jZSBtYXkgbm90IGJlIHVzZWQgYXMgYW4gaW1wbGljaXQgbWFwIGtleVxcXCIpOlxcXCJpbmRlbnRcXFwiaW4gYiYmYi5pbmRlbnQhPT1yLmluZGVudCYmcyh1LFxcXCJCQURfSU5ERU5UXFxcIix5dSkpLCFULmFuY2hvciYmIVQudGFnJiYhZyl7bD1ULmVuZCxULmNvbW1lbnQmJihhLmNvbW1lbnQ/YS5jb21tZW50Kz1gXFxuYCtULmNvbW1lbnQ6YS5jb21tZW50PVQuY29tbWVudCk7Y29udGludWV9KFQubmV3bGluZUFmdGVyUHJvcHx8QXQoYikpJiZzKGIhPW51bGw/YjpoW2gubGVuZ3RoLTFdLFxcXCJNVUxUSUxJTkVfSU1QTElDSVRfS0VZXFxcIixcXFwiSW1wbGljaXQga2V5cyBuZWVkIHRvIGJlIG9uIGEgc2luZ2xlIGxpbmVcXFwiKX1lbHNlKChkPVQuZm91bmQpPT1udWxsP3ZvaWQgMDpkLmluZGVudCkhPT1yLmluZGVudCYmcyh1LFxcXCJCQURfSU5ERU5UXFxcIix5dSk7dC5hdEtleT0hMDtsZXQgTj1ULmVuZCx5PWI/bih0LGIsVCxzKTplKHQsTixoLG51bGwsVCxzKTt0LnNjaGVtYS5jb21wYXQmJnhyKHIuaW5kZW50LGIscyksdC5hdEtleT0hMSxOcyh0LGEuaXRlbXMseSkmJnMoTixcXFwiRFVQTElDQVRFX0tFWVxcXCIsXFxcIk1hcCBrZXlzIG11c3QgYmUgdW5pcXVlXFxcIik7bGV0IHc9YXQoZyE9bnVsbD9nOltdLHtpbmRpY2F0b3I6XFxcIm1hcC12YWx1ZS1pbmRcXFwiLG5leHQ6RCxvZmZzZXQ6eS5yYW5nZVsyXSxvbkVycm9yOnMscGFyZW50SW5kZW50OnIuaW5kZW50LHN0YXJ0T25OZXdsaW5lOiFifHxiLnR5cGU9PT1cXFwiYmxvY2stc2NhbGFyXFxcIn0pO2lmKHU9dy5lbmQsdy5mb3VuZCl7SSYmKChEPT1udWxsP3ZvaWQgMDpELnR5cGUpPT09XFxcImJsb2NrLW1hcFxcXCImJiF3Lmhhc05ld2xpbmUmJnModSxcXFwiQkxPQ0tfQVNfSU1QTElDSVRfS0VZXFxcIixcXFwiTmVzdGVkIG1hcHBpbmdzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wYWN0IG1hcHBpbmdzXFxcIiksdC5vcHRpb25zLnN0cmljdCYmVC5zdGFydDx3LmZvdW5kLm9mZnNldC0xMDI0JiZzKHkucmFuZ2UsXFxcIktFWV9PVkVSXzEwMjRfQ0hBUlNcXFwiLFxcXCJUaGUgOiBpbmRpY2F0b3IgbXVzdCBiZSBhdCBtb3N0IDEwMjQgY2hhcnMgYWZ0ZXIgdGhlIHN0YXJ0IG9mIGFuIGltcGxpY2l0IGJsb2NrIG1hcHBpbmcga2V5XFxcIikpO2xldCB2PUQ/bih0LEQsdyxzKTplKHQsdSxnLG51bGwsdyxzKTt0LnNjaGVtYS5jb21wYXQmJnhyKHIuaW5kZW50LEQscyksdT12LnJhbmdlWzJdO2xldCB4PW5ldyBpZSh5LHYpO3Qub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zJiYoeC5zcmNUb2tlbj1tKSxhLml0ZW1zLnB1c2goeCl9ZWxzZXtJJiZzKHkucmFuZ2UsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkltcGxpY2l0IG1hcCBrZXlzIG5lZWQgdG8gYmUgZm9sbG93ZWQgYnkgbWFwIHZhbHVlc1xcXCIpLHcuY29tbWVudCYmKHkuY29tbWVudD95LmNvbW1lbnQrPWBcXG5gK3cuY29tbWVudDp5LmNvbW1lbnQ9dy5jb21tZW50KTtsZXQgdj1uZXcgaWUoeSk7dC5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMmJih2LnNyY1Rva2VuPW0pLGEuaXRlbXMucHVzaCh2KX19cmV0dXJuIGwmJmw8dSYmcyhsLFxcXCJJTVBPU1NJQkxFXFxcIixcXFwiTWFwIGNvbW1lbnQgd2l0aCB0cmFpbGluZyBjb250ZW50XFxcIiksYS5yYW5nZT1bci5vZmZzZXQsdSxsIT1udWxsP2w6dV0sYX1mdW5jdGlvbiBidSh7Y29tcG9zZU5vZGU6bixjb21wb3NlRW1wdHlOb2RlOmV9LHQscixzLGkpe3ZhciBmO2xldCBvPShmPWk9PW51bGw/dm9pZCAwOmkubm9kZUNsYXNzKSE9bnVsbD9mOmJlLGE9bmV3IG8odC5zY2hlbWEpO3QuYXRSb290JiYodC5hdFJvb3Q9ITEpLHQuYXRLZXkmJih0LmF0S2V5PSExKTtsZXQgdT1yLm9mZnNldCxsPW51bGw7Zm9yKGxldHtzdGFydDpkLHZhbHVlOm19b2Ygci5pdGVtcyl7bGV0IGg9YXQoZCx7aW5kaWNhdG9yOlxcXCJzZXEtaXRlbS1pbmRcXFwiLG5leHQ6bSxvZmZzZXQ6dSxvbkVycm9yOnMscGFyZW50SW5kZW50OnIuaW5kZW50LHN0YXJ0T25OZXdsaW5lOiEwfSk7aWYoIWguZm91bmQpaWYoaC5hbmNob3J8fGgudGFnfHxtKW0mJm0udHlwZT09PVxcXCJibG9jay1zZXFcXFwiP3MoaC5lbmQsXFxcIkJBRF9JTkRFTlRcXFwiLFxcXCJBbGwgc2VxdWVuY2UgaXRlbXMgbXVzdCBzdGFydCBhdCB0aGUgc2FtZSBjb2x1bW5cXFwiKTpzKHUsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIlNlcXVlbmNlIGl0ZW0gd2l0aG91dCAtIGluZGljYXRvclxcXCIpO2Vsc2V7bD1oLmVuZCxoLmNvbW1lbnQmJihhLmNvbW1lbnQ9aC5jb21tZW50KTtjb250aW51ZX1sZXQgYj1tP24odCxtLGgscyk6ZSh0LGguZW5kLGQsbnVsbCxoLHMpO3Quc2NoZW1hLmNvbXBhdCYmeHIoci5pbmRlbnQsbSxzKSx1PWIucmFuZ2VbMl0sYS5pdGVtcy5wdXNoKGIpfXJldHVybiBhLnJhbmdlPVtyLm9mZnNldCx1LGwhPW51bGw/bDp1XSxhfWZ1bmN0aW9uIHV0KG4sZSx0LHIpe2xldCBzPVxcXCJcXFwiO2lmKG4pe2xldCBpPSExLG89XFxcIlxcXCI7Zm9yKGxldCBhIG9mIG4pe2xldHtzb3VyY2U6dSx0eXBlOmx9PWE7c3dpdGNoKGwpe2Nhc2VcXFwic3BhY2VcXFwiOmk9ITA7YnJlYWs7Y2FzZVxcXCJjb21tZW50XFxcIjp7dCYmIWkmJnIoYSxcXFwiTUlTU0lOR19DSEFSXFxcIixcXFwiQ29tbWVudHMgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBvdGhlciB0b2tlbnMgYnkgd2hpdGUgc3BhY2UgY2hhcmFjdGVyc1xcXCIpO2xldCBmPXUuc3Vic3RyaW5nKDEpfHxcXFwiIFxcXCI7cz9zKz1vK2Y6cz1mLG89XFxcIlxcXCI7YnJlYWt9Y2FzZVxcXCJuZXdsaW5lXFxcIjpzJiYobys9dSksaT0hMDticmVhaztkZWZhdWx0OnIoYSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYFVuZXhwZWN0ZWQgJHtsfSBhdCBub2RlIGVuZGApfWUrPXUubGVuZ3RofX1yZXR1cm57Y29tbWVudDpzLG9mZnNldDplfX12YXIgUWk9XFxcIkJsb2NrIGNvbGxlY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB3aXRoaW4gZmxvdyBjb2xsZWN0aW9uc1xcXCIsWGk9bj0+biYmKG4udHlwZT09PVxcXCJibG9jay1tYXBcXFwifHxuLnR5cGU9PT1cXFwiYmxvY2stc2VxXFxcIik7ZnVuY3Rpb24gRnUoe2NvbXBvc2VOb2RlOm4sY29tcG9zZUVtcHR5Tm9kZTplfSx0LHIscyxpKXt2YXIgRCxUO2xldCBvPXIuc3RhcnQuc291cmNlPT09XFxcIntcXFwiLGE9bz9cXFwiZmxvdyBtYXBcXFwiOlxcXCJmbG93IHNlcXVlbmNlXFxcIix1PShEPWk9PW51bGw/dm9pZCAwOmkubm9kZUNsYXNzKSE9bnVsbD9EOm8/b2U6YmUsbD1uZXcgdSh0LnNjaGVtYSk7bC5mbG93PSEwO2xldCBmPXQuYXRSb290O2YmJih0LmF0Um9vdD0hMSksdC5hdEtleSYmKHQuYXRLZXk9ITEpO2xldCBkPXIub2Zmc2V0K3Iuc3RhcnQuc291cmNlLmxlbmd0aDtmb3IobGV0IEk9MDtJPHIuaXRlbXMubGVuZ3RoOysrSSl7bGV0IE49ci5pdGVtc1tJXSx7c3RhcnQ6eSxrZXk6dyxzZXA6dix2YWx1ZTp4fT1OLEM9YXQoeSx7ZmxvdzphLGluZGljYXRvcjpcXFwiZXhwbGljaXQta2V5LWluZFxcXCIsbmV4dDp3IT1udWxsP3c6dj09bnVsbD92b2lkIDA6dlswXSxvZmZzZXQ6ZCxvbkVycm9yOnMscGFyZW50SW5kZW50OnIuaW5kZW50LHN0YXJ0T25OZXdsaW5lOiExfSk7aWYoIUMuZm91bmQpe2lmKCFDLmFuY2hvciYmIUMudGFnJiYhdiYmIXgpe0k9PT0wJiZDLmNvbW1hP3MoQy5jb21tYSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYFVuZXhwZWN0ZWQgLCBpbiAke2F9YCk6STxyLml0ZW1zLmxlbmd0aC0xJiZzKEMuc3RhcnQsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGBVbmV4cGVjdGVkIGVtcHR5IGl0ZW0gaW4gJHthfWApLEMuY29tbWVudCYmKGwuY29tbWVudD9sLmNvbW1lbnQrPWBcXG5gK0MuY29tbWVudDpsLmNvbW1lbnQ9Qy5jb21tZW50KSxkPUMuZW5kO2NvbnRpbnVlfSFvJiZ0Lm9wdGlvbnMuc3RyaWN0JiZBdCh3KSYmcyh3LFxcXCJNVUxUSUxJTkVfSU1QTElDSVRfS0VZXFxcIixcXFwiSW1wbGljaXQga2V5cyBvZiBmbG93IHNlcXVlbmNlIHBhaXJzIG5lZWQgdG8gYmUgb24gYSBzaW5nbGUgbGluZVxcXCIpfWlmKEk9PT0wKUMuY29tbWEmJnMoQy5jb21tYSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYFVuZXhwZWN0ZWQgLCBpbiAke2F9YCk7ZWxzZSBpZihDLmNvbW1hfHxzKEMuc3RhcnQsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsYE1pc3NpbmcgLCBiZXR3ZWVuICR7YX0gaXRlbXNgKSxDLmNvbW1lbnQpe2xldCBWPVxcXCJcXFwiO2U6Zm9yKGxldCBqIG9mIHkpc3dpdGNoKGoudHlwZSl7Y2FzZVxcXCJjb21tYVxcXCI6Y2FzZVxcXCJzcGFjZVxcXCI6YnJlYWs7Y2FzZVxcXCJjb21tZW50XFxcIjpWPWouc291cmNlLnN1YnN0cmluZygxKTticmVhayBlO2RlZmF1bHQ6YnJlYWsgZX1pZihWKXtsZXQgaj1sLml0ZW1zW2wuaXRlbXMubGVuZ3RoLTFdO0goaikmJihqPShUPWoudmFsdWUpIT1udWxsP1Q6ai5rZXkpLGouY29tbWVudD9qLmNvbW1lbnQrPWBcXG5gK1Y6ai5jb21tZW50PVYsQy5jb21tZW50PUMuY29tbWVudC5zdWJzdHJpbmcoVi5sZW5ndGgrMSl9fWlmKCFvJiYhdiYmIUMuZm91bmQpe2xldCBWPXg/bih0LHgsQyxzKTplKHQsQy5lbmQsdixudWxsLEMscyk7bC5pdGVtcy5wdXNoKFYpLGQ9Vi5yYW5nZVsyXSxYaSh4KSYmcyhWLnJhbmdlLFxcXCJCTE9DS19JTl9GTE9XXFxcIixRaSl9ZWxzZXt0LmF0S2V5PSEwO2xldCBWPUMuZW5kLGo9dz9uKHQsdyxDLHMpOmUodCxWLHksbnVsbCxDLHMpO1hpKHcpJiZzKGoucmFuZ2UsXFxcIkJMT0NLX0lOX0ZMT1dcXFwiLFFpKSx0LmF0S2V5PSExO2xldCBZPWF0KHYhPW51bGw/djpbXSx7ZmxvdzphLGluZGljYXRvcjpcXFwibWFwLXZhbHVlLWluZFxcXCIsbmV4dDp4LG9mZnNldDpqLnJhbmdlWzJdLG9uRXJyb3I6cyxwYXJlbnRJbmRlbnQ6ci5pbmRlbnQsc3RhcnRPbk5ld2xpbmU6ITF9KTtpZihZLmZvdW5kKXtpZighbyYmIUMuZm91bmQmJnQub3B0aW9ucy5zdHJpY3Qpe2lmKHYpZm9yKGxldCBPIG9mIHYpe2lmKE89PT1ZLmZvdW5kKWJyZWFrO2lmKE8udHlwZT09PVxcXCJuZXdsaW5lXFxcIil7cyhPLFxcXCJNVUxUSUxJTkVfSU1QTElDSVRfS0VZXFxcIixcXFwiSW1wbGljaXQga2V5cyBvZiBmbG93IHNlcXVlbmNlIHBhaXJzIG5lZWQgdG8gYmUgb24gYSBzaW5nbGUgbGluZVxcXCIpO2JyZWFrfX1DLnN0YXJ0PFkuZm91bmQub2Zmc2V0LTEwMjQmJnMoWS5mb3VuZCxcXFwiS0VZX09WRVJfMTAyNF9DSEFSU1xcXCIsXFxcIlRoZSA6IGluZGljYXRvciBtdXN0IGJlIGF0IG1vc3QgMTAyNCBjaGFycyBhZnRlciB0aGUgc3RhcnQgb2YgYW4gaW1wbGljaXQgZmxvdyBzZXF1ZW5jZSBrZXlcXFwiKX19ZWxzZSB4JiYoXFxcInNvdXJjZVxcXCJpbiB4JiZ4LnNvdXJjZSYmeC5zb3VyY2VbMF09PT1cXFwiOlxcXCI/cyh4LFxcXCJNSVNTSU5HX0NIQVJcXFwiLGBNaXNzaW5nIHNwYWNlIGFmdGVyIDogaW4gJHthfWApOnMoWS5zdGFydCxcXFwiTUlTU0lOR19DSEFSXFxcIixgTWlzc2luZyAsIG9yIDogYmV0d2VlbiAke2F9IGl0ZW1zYCkpO2xldCBlZT14P24odCx4LFkscyk6WS5mb3VuZD9lKHQsWS5lbmQsdixudWxsLFkscyk6bnVsbDtlZT9YaSh4KSYmcyhlZS5yYW5nZSxcXFwiQkxPQ0tfSU5fRkxPV1xcXCIsUWkpOlkuY29tbWVudCYmKGouY29tbWVudD9qLmNvbW1lbnQrPWBcXG5gK1kuY29tbWVudDpqLmNvbW1lbnQ9WS5jb21tZW50KTtsZXQgYWU9bmV3IGllKGosZWUpO2lmKHQub3B0aW9ucy5rZWVwU291cmNlVG9rZW5zJiYoYWUuc3JjVG9rZW49Tiksbyl7bGV0IE89bDtOcyh0LE8uaXRlbXMsaikmJnMoVixcXFwiRFVQTElDQVRFX0tFWVxcXCIsXFxcIk1hcCBrZXlzIG11c3QgYmUgdW5pcXVlXFxcIiksTy5pdGVtcy5wdXNoKGFlKX1lbHNle2xldCBPPW5ldyBvZSh0LnNjaGVtYSk7Ty5mbG93PSEwLE8uaXRlbXMucHVzaChhZSk7bGV0ICQ9KGVlIT1udWxsP2VlOmopLnJhbmdlO08ucmFuZ2U9W2oucmFuZ2VbMF0sJFsxXSwkWzJdXSxsLml0ZW1zLnB1c2goTyl9ZD1lZT9lZS5yYW5nZVsyXTpZLmVuZH19bGV0IG09bz9cXFwifVxcXCI6XFxcIl1cXFwiLFtoLC4uLmJdPXIuZW5kLGc9ZDtpZihoJiZoLnNvdXJjZT09PW0pZz1oLm9mZnNldCtoLnNvdXJjZS5sZW5ndGg7ZWxzZXtsZXQgST1hWzBdLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSksTj1mP2Ake0l9IG11c3QgZW5kIHdpdGggYSAke219YDpgJHtJfSBpbiBibG9jayBjb2xsZWN0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGluZGVudGVkIGFuZCBlbmQgd2l0aCBhICR7bX1gO3MoZCxmP1xcXCJNSVNTSU5HX0NIQVJcXFwiOlxcXCJCQURfSU5ERU5UXFxcIixOKSxoJiZoLnNvdXJjZS5sZW5ndGghPT0xJiZiLnVuc2hpZnQoaCl9aWYoYi5sZW5ndGg+MCl7bGV0IEk9dXQoYixnLHQub3B0aW9ucy5zdHJpY3Qscyk7SS5jb21tZW50JiYobC5jb21tZW50P2wuY29tbWVudCs9YFxcbmArSS5jb21tZW50OmwuY29tbWVudD1JLmNvbW1lbnQpLGwucmFuZ2U9W3Iub2Zmc2V0LGcsSS5vZmZzZXRdfWVsc2UgbC5yYW5nZT1bci5vZmZzZXQsZyxnXTtyZXR1cm4gbH1mdW5jdGlvbiBlbyhuLGUsdCxyLHMsaSl7bGV0IG89dC50eXBlPT09XFxcImJsb2NrLW1hcFxcXCI/Z3UobixlLHQscixpKTp0LnR5cGU9PT1cXFwiYmxvY2stc2VxXFxcIj9idShuLGUsdCxyLGkpOkZ1KG4sZSx0LHIsaSksYT1vLmNvbnN0cnVjdG9yO3JldHVybiBzPT09XFxcIiFcXFwifHxzPT09YS50YWdOYW1lPyhvLnRhZz1hLnRhZ05hbWUsbyk6KHMmJihvLnRhZz1zKSxvKX1mdW5jdGlvbiBFdShuLGUsdCxyLHMpe3ZhciBtLGg7bGV0IGk9ci50YWcsbz1pP2UuZGlyZWN0aXZlcy50YWdOYW1lKGkuc291cmNlLGI9PnMoaSxcXFwiVEFHX1JFU09MVkVfRkFJTEVEXFxcIixiKSk6bnVsbDtpZih0LnR5cGU9PT1cXFwiYmxvY2stc2VxXFxcIil7bGV0e2FuY2hvcjpiLG5ld2xpbmVBZnRlclByb3A6Z309cixEPWImJmk/Yi5vZmZzZXQ+aS5vZmZzZXQ/YjppOmIhPW51bGw/YjppO0QmJighZ3x8Zy5vZmZzZXQ8RC5vZmZzZXQpJiZzKEQsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIk1pc3NpbmcgbmV3bGluZSBhZnRlciBibG9jayBzZXF1ZW5jZSBwcm9wc1xcXCIpfWxldCBhPXQudHlwZT09PVxcXCJibG9jay1tYXBcXFwiP1xcXCJtYXBcXFwiOnQudHlwZT09PVxcXCJibG9jay1zZXFcXFwiP1xcXCJzZXFcXFwiOnQuc3RhcnQuc291cmNlPT09XFxcIntcXFwiP1xcXCJtYXBcXFwiOlxcXCJzZXFcXFwiO2lmKCFpfHwhb3x8bz09PVxcXCIhXFxcInx8bz09PW9lLnRhZ05hbWUmJmE9PT1cXFwibWFwXFxcInx8bz09PWJlLnRhZ05hbWUmJmE9PT1cXFwic2VxXFxcIilyZXR1cm4gZW8obixlLHQscyxvKTtsZXQgdT1lLnNjaGVtYS50YWdzLmZpbmQoYj0+Yi50YWc9PT1vJiZiLmNvbGxlY3Rpb249PT1hKTtpZighdSl7bGV0IGI9ZS5zY2hlbWEua25vd25UYWdzW29dO2lmKGImJmIuY29sbGVjdGlvbj09PWEpZS5zY2hlbWEudGFncy5wdXNoKE9iamVjdC5hc3NpZ24oe30sYix7ZGVmYXVsdDohMX0pKSx1PWI7ZWxzZSByZXR1cm4gYiE9bnVsbCYmYi5jb2xsZWN0aW9uP3MoaSxcXFwiQkFEX0NPTExFQ1RJT05fVFlQRVxcXCIsYCR7Yi50YWd9IHVzZWQgZm9yICR7YX0gY29sbGVjdGlvbiwgYnV0IGV4cGVjdHMgJHtiLmNvbGxlY3Rpb259YCwhMCk6cyhpLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGBVbnJlc29sdmVkIHRhZzogJHtvfWAsITApLGVvKG4sZSx0LHMsbyl9bGV0IGw9ZW8obixlLHQscyxvLHUpLGY9KGg9KG09dS5yZXNvbHZlKT09bnVsbD92b2lkIDA6bS5jYWxsKHUsbCxiPT5zKGksXFxcIlRBR19SRVNPTFZFX0ZBSUxFRFxcXCIsYiksZS5vcHRpb25zKSkhPW51bGw/aDpsLGQ9SihmKT9mOm5ldyBQKGYpO3JldHVybiBkLnJhbmdlPWwucmFuZ2UsZC50YWc9byx1IT1udWxsJiZ1LmZvcm1hdCYmKGQuZm9ybWF0PXUuZm9ybWF0KSxkfWZ1bmN0aW9uIHRvKG4sZSx0KXtsZXQgcj1lLm9mZnNldCxzPW9mKGUsbi5vcHRpb25zLnN0cmljdCx0KTtpZighcylyZXR1cm57dmFsdWU6XFxcIlxcXCIsdHlwZTpudWxsLGNvbW1lbnQ6XFxcIlxcXCIscmFuZ2U6W3IscixyXX07bGV0IGk9cy5tb2RlPT09XFxcIj5cXFwiP1AuQkxPQ0tfRk9MREVEOlAuQkxPQ0tfTElURVJBTCxvPWUuc291cmNlP2FmKGUuc291cmNlKTpbXSxhPW8ubGVuZ3RoO2ZvcihsZXQgZz1vLmxlbmd0aC0xO2c+PTA7LS1nKXtsZXQgRD1vW2ddWzFdO2lmKEQ9PT1cXFwiXFxcInx8RD09PVxcXCJcXFxcclxcXCIpYT1nO2Vsc2UgYnJlYWt9aWYoYT09PTApe2xldCBnPXMuY2hvbXA9PT1cXFwiK1xcXCImJm8ubGVuZ3RoPjA/YFxcbmAucmVwZWF0KE1hdGgubWF4KDEsby5sZW5ndGgtMSkpOlxcXCJcXFwiLEQ9citzLmxlbmd0aDtyZXR1cm4gZS5zb3VyY2UmJihEKz1lLnNvdXJjZS5sZW5ndGgpLHt2YWx1ZTpnLHR5cGU6aSxjb21tZW50OnMuY29tbWVudCxyYW5nZTpbcixELERdfX1sZXQgdT1lLmluZGVudCtzLmluZGVudCxsPWUub2Zmc2V0K3MubGVuZ3RoLGY9MDtmb3IobGV0IGc9MDtnPGE7KytnKXtsZXRbRCxUXT1vW2ddO2lmKFQ9PT1cXFwiXFxcInx8VD09PVxcXCJcXFxcclxcXCIpcy5pbmRlbnQ9PT0wJiZELmxlbmd0aD51JiYodT1ELmxlbmd0aCk7ZWxzZXtELmxlbmd0aDx1JiZ0KGwrRC5sZW5ndGgsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIkJsb2NrIHNjYWxhcnMgd2l0aCBtb3JlLWluZGVudGVkIGxlYWRpbmcgZW1wdHkgbGluZXMgbXVzdCB1c2UgYW4gZXhwbGljaXQgaW5kZW50YXRpb24gaW5kaWNhdG9yXFxcIikscy5pbmRlbnQ9PT0wJiYodT1ELmxlbmd0aCksZj1nLHU9PT0wJiYhbi5hdFJvb3QmJnQobCxcXFwiQkFEX0lOREVOVFxcXCIsXFxcIkJsb2NrIHNjYWxhciB2YWx1ZXMgaW4gY29sbGVjdGlvbnMgbXVzdCBiZSBpbmRlbnRlZFxcXCIpO2JyZWFrfWwrPUQubGVuZ3RoK1QubGVuZ3RoKzF9Zm9yKGxldCBnPW8ubGVuZ3RoLTE7Zz49YTstLWcpb1tnXVswXS5sZW5ndGg+dSYmKGE9ZysxKTtsZXQgZD1cXFwiXFxcIixtPVxcXCJcXFwiLGg9ITE7Zm9yKGxldCBnPTA7ZzxmOysrZylkKz1vW2ddWzBdLnNsaWNlKHUpK2BcXG5gO2ZvcihsZXQgZz1mO2c8YTsrK2cpe2xldFtELFRdPW9bZ107bCs9RC5sZW5ndGgrVC5sZW5ndGgrMTtsZXQgST1UW1QubGVuZ3RoLTFdPT09XFxcIlxcXFxyXFxcIjtpZihJJiYoVD1ULnNsaWNlKDAsLTEpKSxUJiZELmxlbmd0aDx1KXtsZXQgeT1gQmxvY2sgc2NhbGFyIGxpbmVzIG11c3Qgbm90IGJlIGxlc3MgaW5kZW50ZWQgdGhhbiB0aGVpciAke3MuaW5kZW50P1xcXCJleHBsaWNpdCBpbmRlbnRhdGlvbiBpbmRpY2F0b3JcXFwiOlxcXCJmaXJzdCBsaW5lXFxcIn1gO3QobC1ULmxlbmd0aC0oST8yOjEpLFxcXCJCQURfSU5ERU5UXFxcIix5KSxEPVxcXCJcXFwifWk9PT1QLkJMT0NLX0xJVEVSQUw/KGQrPW0rRC5zbGljZSh1KStULG09YFxcbmApOkQubGVuZ3RoPnV8fFRbMF09PT1cXFwiXFx0XFxcIj8obT09PVxcXCIgXFxcIj9tPWBcXG5gOiFoJiZtPT09YFxcbmAmJihtPWBcXG5cXG5gKSxkKz1tK0Quc2xpY2UodSkrVCxtPWBcXG5gLGg9ITApOlQ9PT1cXFwiXFxcIj9tPT09YFxcbmA/ZCs9YFxcbmA6bT1gXFxuYDooZCs9bStULG09XFxcIiBcXFwiLGg9ITEpfXN3aXRjaChzLmNob21wKXtjYXNlXFxcIi1cXFwiOmJyZWFrO2Nhc2VcXFwiK1xcXCI6Zm9yKGxldCBnPWE7ZzxvLmxlbmd0aDsrK2cpZCs9YFxcbmArb1tnXVswXS5zbGljZSh1KTtkW2QubGVuZ3RoLTFdIT09YFxcbmAmJihkKz1gXFxuYCk7YnJlYWs7ZGVmYXVsdDpkKz1gXFxuYH1sZXQgYj1yK3MubGVuZ3RoK2Uuc291cmNlLmxlbmd0aDtyZXR1cm57dmFsdWU6ZCx0eXBlOmksY29tbWVudDpzLmNvbW1lbnQscmFuZ2U6W3IsYixiXX19ZnVuY3Rpb24gb2Yoe29mZnNldDpuLHByb3BzOmV9LHQscil7aWYoZVswXS50eXBlIT09XFxcImJsb2NrLXNjYWxhci1oZWFkZXJcXFwiKXJldHVybiByKGVbMF0sXFxcIklNUE9TU0lCTEVcXFwiLFxcXCJCbG9jayBzY2FsYXIgaGVhZGVyIG5vdCBmb3VuZFxcXCIpLG51bGw7bGV0e3NvdXJjZTpzfT1lWzBdLGk9c1swXSxvPTAsYT1cXFwiXFxcIix1PS0xO2ZvcihsZXQgbT0xO208cy5sZW5ndGg7KyttKXtsZXQgaD1zW21dO2lmKCFhJiYoaD09PVxcXCItXFxcInx8aD09PVxcXCIrXFxcIikpYT1oO2Vsc2V7bGV0IGI9TnVtYmVyKGgpOyFvJiZiP289Yjp1PT09LTEmJih1PW4rbSl9fXUhPT0tMSYmcih1LFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixgQmxvY2sgc2NhbGFyIGhlYWRlciBpbmNsdWRlcyBleHRyYSBjaGFyYWN0ZXJzOiAke3N9YCk7bGV0IGw9ITEsZj1cXFwiXFxcIixkPXMubGVuZ3RoO2ZvcihsZXQgbT0xO208ZS5sZW5ndGg7KyttKXtsZXQgaD1lW21dO3N3aXRjaChoLnR5cGUpe2Nhc2VcXFwic3BhY2VcXFwiOmw9ITA7Y2FzZVxcXCJuZXdsaW5lXFxcIjpkKz1oLnNvdXJjZS5sZW5ndGg7YnJlYWs7Y2FzZVxcXCJjb21tZW50XFxcIjp0JiYhbCYmcihoLFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJDb21tZW50cyBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIG90aGVyIHRva2VucyBieSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzXFxcIiksZCs9aC5zb3VyY2UubGVuZ3RoLGY9aC5zb3VyY2Uuc3Vic3RyaW5nKDEpO2JyZWFrO2Nhc2VcXFwiZXJyb3JcXFwiOnIoaCxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsaC5tZXNzYWdlKSxkKz1oLnNvdXJjZS5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp7bGV0IGI9YFVuZXhwZWN0ZWQgdG9rZW4gaW4gYmxvY2sgc2NhbGFyIGhlYWRlcjogJHtoLnR5cGV9YDtyKGgsXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLGIpO2xldCBnPWguc291cmNlO2cmJnR5cGVvZiBnPT1cXFwic3RyaW5nXFxcIiYmKGQrPWcubGVuZ3RoKX19fXJldHVybnttb2RlOmksaW5kZW50Om8sY2hvbXA6YSxjb21tZW50OmYsbGVuZ3RoOmR9fWZ1bmN0aW9uIGFmKG4pe2xldCBlPW4uc3BsaXQoL1xcXFxuKCAqKS8pLHQ9ZVswXSxyPXQubWF0Y2goL14oICopLyksaT1bciE9bnVsbCYmclsxXT9bclsxXSx0LnNsaWNlKHJbMV0ubGVuZ3RoKV06W1xcXCJcXFwiLHRdXTtmb3IobGV0IG89MTtvPGUubGVuZ3RoO28rPTIpaS5wdXNoKFtlW29dLGVbbysxXV0pO3JldHVybiBpfWZ1bmN0aW9uIG5vKG4sZSx0KXtsZXR7b2Zmc2V0OnIsdHlwZTpzLHNvdXJjZTppLGVuZDpvfT1uLGEsdSxsPShtLGgsYik9PnQocittLGgsYik7c3dpdGNoKHMpe2Nhc2VcXFwic2NhbGFyXFxcIjphPVAuUExBSU4sdT11ZihpLGwpO2JyZWFrO2Nhc2VcXFwic2luZ2xlLXF1b3RlZC1zY2FsYXJcXFwiOmE9UC5RVU9URV9TSU5HTEUsdT1sZihpLGwpO2JyZWFrO2Nhc2VcXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiOmE9UC5RVU9URV9ET1VCTEUsdT1jZihpLGwpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHQobixcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYEV4cGVjdGVkIGEgZmxvdyBzY2FsYXIgdmFsdWUsIGJ1dCBmb3VuZDogJHtzfWApLHt2YWx1ZTpcXFwiXFxcIix0eXBlOm51bGwsY29tbWVudDpcXFwiXFxcIixyYW5nZTpbcixyK2kubGVuZ3RoLHIraS5sZW5ndGhdfX1sZXQgZj1yK2kubGVuZ3RoLGQ9dXQobyxmLGUsdCk7cmV0dXJue3ZhbHVlOnUsdHlwZTphLGNvbW1lbnQ6ZC5jb21tZW50LHJhbmdlOltyLGYsZC5vZmZzZXRdfX1mdW5jdGlvbiB1ZihuLGUpe2xldCB0PVxcXCJcXFwiO3N3aXRjaChuWzBdKXtjYXNlXFxcIlxcdFxcXCI6dD1cXFwiYSB0YWIgY2hhcmFjdGVyXFxcIjticmVhaztjYXNlXFxcIixcXFwiOnQ9XFxcImZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlciAsXFxcIjticmVhaztjYXNlXFxcIiVcXFwiOnQ9XFxcImRpcmVjdGl2ZSBpbmRpY2F0b3IgY2hhcmFjdGVyICVcXFwiO2JyZWFrO2Nhc2VcXFwifFxcXCI6Y2FzZVxcXCI+XFxcIjp7dD1gYmxvY2sgc2NhbGFyIGluZGljYXRvciAke25bMF19YDticmVha31jYXNlXFxcIkBcXFwiOmNhc2VcXFwiYFxcXCI6e3Q9YHJlc2VydmVkIGNoYXJhY3RlciAke25bMF19YDticmVha319cmV0dXJuIHQmJmUoMCxcXFwiQkFEX1NDQUxBUl9TVEFSVFxcXCIsYFBsYWluIHZhbHVlIGNhbm5vdCBzdGFydCB3aXRoICR7dH1gKSx3dShuKX1mdW5jdGlvbiBsZihuLGUpe3JldHVybihuW24ubGVuZ3RoLTFdIT09XFxcIidcXFwifHxuLmxlbmd0aD09PTEpJiZlKG4ubGVuZ3RoLFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJNaXNzaW5nIGNsb3NpbmcgJ3F1b3RlXFxcIiksd3Uobi5zbGljZSgxLC0xKSkucmVwbGFjZSgvJycvZyxcXFwiJ1xcXCIpfWZ1bmN0aW9uIHd1KG4pe3ZhciB1O2xldCBlLHQ7dHJ5e2U9bmV3IFJlZ0V4cChgKC4qPykoPzwhWyBcXHRdKVsgXFx0XSpcXFxccj9cXG5gLFxcXCJzeVxcXCIpLHQ9bmV3IFJlZ0V4cChgWyBcXHRdKiguKj8pKD86KD88IVsgXFx0XSlbIFxcdF0qKT9cXFxccj9cXG5gLFxcXCJzeVxcXCIpfWNhdGNoKGwpe2U9bmV3IFJlZ0V4cChcXFwiKC4qPylbIFxcXFxcXFxcdF0qXFxcXFxcXFxyP1xcXFxcXFxcblxcXCIsXFxcInN5XFxcIiksdD1uZXcgUmVnRXhwKFxcXCJbIFxcXFxcXFxcdF0qKC4qPylbIFxcXFxcXFxcdF0qXFxcXFxcXFxyP1xcXFxcXFxcblxcXCIsXFxcInN5XFxcIil9bGV0IHI9ZS5leGVjKG4pO2lmKCFyKXJldHVybiBuO2xldCBzPXJbMV0saT1cXFwiIFxcXCIsbz1lLmxhc3RJbmRleDtmb3IodC5sYXN0SW5kZXg9bztyPXQuZXhlYyhuKTspclsxXT09PVxcXCJcXFwiP2k9PT1gXFxuYD9zKz1pOmk9YFxcbmA6KHMrPWkrclsxXSxpPVxcXCIgXFxcIiksbz10Lmxhc3RJbmRleDtsZXQgYT1uZXcgUmVnRXhwKFxcXCJbIFxcXFxcXFxcdF0qKC4qKVxcXCIsXFxcInN5XFxcIik7cmV0dXJuIGEubGFzdEluZGV4PW8scj1hLmV4ZWMobikscytpKygodT1yPT1udWxsP3ZvaWQgMDpyWzFdKSE9bnVsbD91OlxcXCJcXFwiKX1mdW5jdGlvbiBjZihuLGUpe2xldCB0PVxcXCJcXFwiO2ZvcihsZXQgcj0xO3I8bi5sZW5ndGgtMTsrK3Ipe2xldCBzPW5bcl07aWYoIShzPT09XFxcIlxcXFxyXFxcIiYmbltyKzFdPT09YFxcbmApKWlmKHM9PT1gXFxuYCl7bGV0e2ZvbGQ6aSxvZmZzZXQ6b309ZmYobixyKTt0Kz1pLHI9b31lbHNlIGlmKHM9PT1cXFwiXFxcXFxcXFxcXFwiKXtsZXQgaT1uWysrcl0sbz1kZltpXTtpZihvKXQrPW87ZWxzZSBpZihpPT09YFxcbmApZm9yKGk9bltyKzFdO2k9PT1cXFwiIFxcXCJ8fGk9PT1cXFwiXFx0XFxcIjspaT1uWysrcisxXTtlbHNlIGlmKGk9PT1cXFwiXFxcXHJcXFwiJiZuW3IrMV09PT1gXFxuYClmb3IoaT1uWysrcisxXTtpPT09XFxcIiBcXFwifHxpPT09XFxcIlxcdFxcXCI7KWk9blsrK3IrMV07ZWxzZSBpZihpPT09XFxcInhcXFwifHxpPT09XFxcInVcXFwifHxpPT09XFxcIlVcXFwiKXtsZXQgYT17eDoyLHU6NCxVOjh9W2ldO3QrPWhmKG4scisxLGEsZSkscis9YX1lbHNle2xldCBhPW4uc3Vic3RyKHItMSwyKTtlKHItMSxcXFwiQkFEX0RRX0VTQ0FQRVxcXCIsYEludmFsaWQgZXNjYXBlIHNlcXVlbmNlICR7YX1gKSx0Kz1hfX1lbHNlIGlmKHM9PT1cXFwiIFxcXCJ8fHM9PT1cXFwiXFx0XFxcIil7bGV0IGk9cixvPW5bcisxXTtmb3IoO289PT1cXFwiIFxcXCJ8fG89PT1cXFwiXFx0XFxcIjspbz1uWysrcisxXTtvIT09YFxcbmAmJiEobz09PVxcXCJcXFxcclxcXCImJm5bcisyXT09PWBcXG5gKSYmKHQrPXI+aT9uLnNsaWNlKGkscisxKTpzKX1lbHNlIHQrPXN9cmV0dXJuKG5bbi5sZW5ndGgtMV0hPT0nXFxcIid8fG4ubGVuZ3RoPT09MSkmJmUobi5sZW5ndGgsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsJ01pc3NpbmcgY2xvc2luZyBcXFwicXVvdGUnKSx0fWZ1bmN0aW9uIGZmKG4sZSl7bGV0IHQ9XFxcIlxcXCIscj1uW2UrMV07Zm9yKDsocj09PVxcXCIgXFxcInx8cj09PVxcXCJcXHRcXFwifHxyPT09YFxcbmB8fHI9PT1cXFwiXFxcXHJcXFwiKSYmIShyPT09XFxcIlxcXFxyXFxcIiYmbltlKzJdIT09YFxcbmApOylyPT09YFxcbmAmJih0Kz1gXFxuYCksZSs9MSxyPW5bZSsxXTtyZXR1cm4gdHx8KHQ9XFxcIiBcXFwiKSx7Zm9sZDp0LG9mZnNldDplfX12YXIgZGY9ezA6XFxcIlxcXFwwXFxcIixhOlxcXCJcXFxceDA3XFxcIixiOlxcXCJcXFxcYlxcXCIsZTpcXFwiXFxcXHgxQlxcXCIsZjpcXFwiXFxcXGZcXFwiLG46YFxcbmAscjpcXFwiXFxcXHJcXFwiLHQ6XFxcIlxcdFxcXCIsdjpcXFwiXFxcXHZcXFwiLE46XFxcIlxcXFx4ODVcXFwiLF86XFxcIlxcXFx4QTBcXFwiLEw6XFxcIlxcXFx1MjAyOFxcXCIsUDpcXFwiXFxcXHUyMDI5XFxcIixcXFwiIFxcXCI6XFxcIiBcXFwiLCdcXFwiJzonXFxcIicsXFxcIi9cXFwiOlxcXCIvXFxcIixcXFwiXFxcXFxcXFxcXFwiOlxcXCJcXFxcXFxcXFxcXCIsXFxcIlxcdFxcXCI6XFxcIlxcdFxcXCJ9O2Z1bmN0aW9uIGhmKG4sZSx0LHIpe2xldCBzPW4uc3Vic3RyKGUsdCksbz1zLmxlbmd0aD09PXQmJi9eWzAtOWEtZkEtRl0rJC8udGVzdChzKT9wYXJzZUludChzLDE2KTpOYU47aWYoaXNOYU4obykpe2xldCBhPW4uc3Vic3RyKGUtMix0KzIpO3JldHVybiByKGUtMixcXFwiQkFEX0RRX0VTQ0FQRVxcXCIsYEludmFsaWQgZXNjYXBlIHNlcXVlbmNlICR7YX1gKSxhfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChvKX1mdW5jdGlvbiBybyhuLGUsdCxyKXtsZXR7dmFsdWU6cyx0eXBlOmksY29tbWVudDpvLHJhbmdlOmF9PWUudHlwZT09PVxcXCJibG9jay1zY2FsYXJcXFwiP3RvKG4sZSxyKTpubyhlLG4ub3B0aW9ucy5zdHJpY3QsciksdT10P24uZGlyZWN0aXZlcy50YWdOYW1lKHQuc291cmNlLGQ9PnIodCxcXFwiVEFHX1JFU09MVkVfRkFJTEVEXFxcIixkKSk6bnVsbCxsO24ub3B0aW9ucy5zdHJpbmdLZXlzJiZuLmF0S2V5P2w9bi5zY2hlbWFbSWVdOnU/bD1tZihuLnNjaGVtYSxzLHUsdCxyKTplLnR5cGU9PT1cXFwic2NhbGFyXFxcIj9sPXBmKG4scyxlLHIpOmw9bi5zY2hlbWFbSWVdO2xldCBmO3RyeXtsZXQgZD1sLnJlc29sdmUocyxtPT5yKHQhPW51bGw/dDplLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLG0pLG4ub3B0aW9ucyk7Zj1LKGQpP2Q6bmV3IFAoZCl9Y2F0Y2goZCl7bGV0IG09ZCBpbnN0YW5jZW9mIEVycm9yP2QubWVzc2FnZTpTdHJpbmcoZCk7cih0IT1udWxsP3Q6ZSxcXFwiVEFHX1JFU09MVkVfRkFJTEVEXFxcIixtKSxmPW5ldyBQKHMpfXJldHVybiBmLnJhbmdlPWEsZi5zb3VyY2U9cyxpJiYoZi50eXBlPWkpLHUmJihmLnRhZz11KSxsLmZvcm1hdCYmKGYuZm9ybWF0PWwuZm9ybWF0KSxvJiYoZi5jb21tZW50PW8pLGZ9ZnVuY3Rpb24gbWYobixlLHQscixzKXt2YXIgYTtpZih0PT09XFxcIiFcXFwiKXJldHVybiBuW0llXTtsZXQgaT1bXTtmb3IobGV0IHUgb2Ygbi50YWdzKWlmKCF1LmNvbGxlY3Rpb24mJnUudGFnPT09dClpZih1LmRlZmF1bHQmJnUudGVzdClpLnB1c2godSk7ZWxzZSByZXR1cm4gdTtmb3IobGV0IHUgb2YgaSlpZigoYT11LnRlc3QpIT1udWxsJiZhLnRlc3QoZSkpcmV0dXJuIHU7bGV0IG89bi5rbm93blRhZ3NbdF07cmV0dXJuIG8mJiFvLmNvbGxlY3Rpb24/KG4udGFncy5wdXNoKE9iamVjdC5hc3NpZ24oe30sbyx7ZGVmYXVsdDohMSx0ZXN0OnZvaWQgMH0pKSxvKToocyhyLFxcXCJUQUdfUkVTT0xWRV9GQUlMRURcXFwiLGBVbnJlc29sdmVkIHRhZzogJHt0fWAsdCE9PVxcXCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHJcXFwiKSxuW0llXSl9ZnVuY3Rpb24gcGYoe2F0S2V5Om4sZGlyZWN0aXZlczplLHNjaGVtYTp0fSxyLHMsaSl7dmFyIGE7bGV0IG89dC50YWdzLmZpbmQodT0+e3ZhciBsO3JldHVybih1LmRlZmF1bHQ9PT0hMHx8biYmdS5kZWZhdWx0PT09XFxcImtleVxcXCIpJiYoKGw9dS50ZXN0KT09bnVsbD92b2lkIDA6bC50ZXN0KHIpKX0pfHx0W0llXTtpZih0LmNvbXBhdCl7bGV0IHU9KGE9dC5jb21wYXQuZmluZChsPT57dmFyIGY7cmV0dXJuIGwuZGVmYXVsdCYmKChmPWwudGVzdCk9PW51bGw/dm9pZCAwOmYudGVzdChyKSl9KSkhPW51bGw/YTp0W0llXTtpZihvLnRhZyE9PXUudGFnKXtsZXQgbD1lLnRhZ1N0cmluZyhvLnRhZyksZj1lLnRhZ1N0cmluZyh1LnRhZyksZD1gVmFsdWUgbWF5IGJlIHBhcnNlZCBhcyBlaXRoZXIgJHtsfSBvciAke2Z9YDtpKHMsXFxcIlRBR19SRVNPTFZFX0ZBSUxFRFxcXCIsZCwhMCl9fXJldHVybiBvfWZ1bmN0aW9uIFR1KG4sZSx0KXtpZihlKXt0PT09bnVsbCYmKHQ9ZS5sZW5ndGgpO2ZvcihsZXQgcj10LTE7cj49MDstLXIpe2xldCBzPWVbcl07c3dpdGNoKHMudHlwZSl7Y2FzZVxcXCJzcGFjZVxcXCI6Y2FzZVxcXCJjb21tZW50XFxcIjpjYXNlXFxcIm5ld2xpbmVcXFwiOm4tPXMuc291cmNlLmxlbmd0aDtjb250aW51ZX1mb3Iocz1lWysrcl07KHM9PW51bGw/dm9pZCAwOnMudHlwZSk9PT1cXFwic3BhY2VcXFwiOyluKz1zLnNvdXJjZS5sZW5ndGgscz1lWysrcl07YnJlYWt9fXJldHVybiBufXZhciBEZj17Y29tcG9zZU5vZGU6c28sY29tcG9zZUVtcHR5Tm9kZTpBc307ZnVuY3Rpb24gc28obixlLHQscil7bGV0IHM9bi5hdEtleSx7c3BhY2VCZWZvcmU6aSxjb21tZW50Om8sYW5jaG9yOmEsdGFnOnV9PXQsbCxmPSEwO3N3aXRjaChlLnR5cGUpe2Nhc2VcXFwiYWxpYXNcXFwiOmw9eWYobixlLHIpLChhfHx1KSYmcihlLFxcXCJBTElBU19QUk9QU1xcXCIsXFxcIkFuIGFsaWFzIG5vZGUgbXVzdCBub3Qgc3BlY2lmeSBhbnkgcHJvcGVydGllc1xcXCIpO2JyZWFrO2Nhc2VcXFwic2NhbGFyXFxcIjpjYXNlXFxcInNpbmdsZS1xdW90ZWQtc2NhbGFyXFxcIjpjYXNlXFxcImRvdWJsZS1xdW90ZWQtc2NhbGFyXFxcIjpjYXNlXFxcImJsb2NrLXNjYWxhclxcXCI6bD1ybyhuLGUsdSxyKSxhJiYobC5hbmNob3I9YS5zb3VyY2Uuc3Vic3RyaW5nKDEpKTticmVhaztjYXNlXFxcImJsb2NrLW1hcFxcXCI6Y2FzZVxcXCJibG9jay1zZXFcXFwiOmNhc2VcXFwiZmxvdy1jb2xsZWN0aW9uXFxcIjpsPUV1KERmLG4sZSx0LHIpLGEmJihsLmFuY2hvcj1hLnNvdXJjZS5zdWJzdHJpbmcoMSkpO2JyZWFrO2RlZmF1bHQ6e2xldCBkPWUudHlwZT09PVxcXCJlcnJvclxcXCI/ZS5tZXNzYWdlOmBVbnN1cHBvcnRlZCB0b2tlbiAodHlwZTogJHtlLnR5cGV9KWA7cihlLFxcXCJVTkVYUEVDVEVEX1RPS0VOXFxcIixkKSxsPUFzKG4sZS5vZmZzZXQsdm9pZCAwLG51bGwsdCxyKSxmPSExfX1yZXR1cm4gYSYmbC5hbmNob3I9PT1cXFwiXFxcIiYmcihhLFxcXCJCQURfQUxJQVNcXFwiLFxcXCJBbmNob3IgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZ1xcXCIpLHMmJm4ub3B0aW9ucy5zdHJpbmdLZXlzJiYoIUsobCl8fHR5cGVvZiBsLnZhbHVlIT1cXFwic3RyaW5nXFxcInx8bC50YWcmJmwudGFnIT09XFxcInRhZzp5YW1sLm9yZywyMDAyOnN0clxcXCIpJiZyKHUhPW51bGw/dTplLFxcXCJOT05fU1RSSU5HX0tFWVxcXCIsXFxcIldpdGggc3RyaW5nS2V5cywgYWxsIGtleXMgbXVzdCBiZSBzdHJpbmdzXFxcIiksaSYmKGwuc3BhY2VCZWZvcmU9ITApLG8mJihlLnR5cGU9PT1cXFwic2NhbGFyXFxcIiYmZS5zb3VyY2U9PT1cXFwiXFxcIj9sLmNvbW1lbnQ9bzpsLmNvbW1lbnRCZWZvcmU9byksbi5vcHRpb25zLmtlZXBTb3VyY2VUb2tlbnMmJmYmJihsLnNyY1Rva2VuPWUpLGx9ZnVuY3Rpb24gQXMobixlLHQscix7c3BhY2VCZWZvcmU6cyxjb21tZW50OmksYW5jaG9yOm8sdGFnOmEsZW5kOnV9LGwpe2xldCBmPXt0eXBlOlxcXCJzY2FsYXJcXFwiLG9mZnNldDpUdShlLHQsciksaW5kZW50Oi0xLHNvdXJjZTpcXFwiXFxcIn0sZD1ybyhuLGYsYSxsKTtyZXR1cm4gbyYmKGQuYW5jaG9yPW8uc291cmNlLnN1YnN0cmluZygxKSxkLmFuY2hvcj09PVxcXCJcXFwiJiZsKG8sXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFuY2hvciBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nXFxcIikpLHMmJihkLnNwYWNlQmVmb3JlPSEwKSxpJiYoZC5jb21tZW50PWksZC5yYW5nZVsyXT11KSxkfWZ1bmN0aW9uIHlmKHtvcHRpb25zOm59LHtvZmZzZXQ6ZSxzb3VyY2U6dCxlbmQ6cn0scyl7bGV0IGk9bmV3IEV0KHQuc3Vic3RyaW5nKDEpKTtpLnNvdXJjZT09PVxcXCJcXFwiJiZzKGUsXFxcIkJBRF9BTElBU1xcXCIsXFxcIkFsaWFzIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmdcXFwiKSxpLnNvdXJjZS5lbmRzV2l0aChcXFwiOlxcXCIpJiZzKGUrdC5sZW5ndGgtMSxcXFwiQkFEX0FMSUFTXFxcIixcXFwiQWxpYXMgZW5kaW5nIGluIDogaXMgYW1iaWd1b3VzXFxcIiwhMCk7bGV0IG89ZSt0Lmxlbmd0aCxhPXV0KHIsbyxuLnN0cmljdCxzKTtyZXR1cm4gaS5yYW5nZT1bZSxvLGEub2Zmc2V0XSxhLmNvbW1lbnQmJihpLmNvbW1lbnQ9YS5jb21tZW50KSxpfWZ1bmN0aW9uIFN1KG4sZSx7b2Zmc2V0OnQsc3RhcnQ6cix2YWx1ZTpzLGVuZDppfSxvKXtsZXQgYT1PYmplY3QuYXNzaWduKHtfZGlyZWN0aXZlczplfSxuKSx1PW5ldyBOdCh2b2lkIDAsYSksbD17YXRLZXk6ITEsYXRSb290OiEwLGRpcmVjdGl2ZXM6dS5kaXJlY3RpdmVzLG9wdGlvbnM6dS5vcHRpb25zLHNjaGVtYTp1LnNjaGVtYX0sZj1hdChyLHtpbmRpY2F0b3I6XFxcImRvYy1zdGFydFxcXCIsbmV4dDpzIT1udWxsP3M6aT09bnVsbD92b2lkIDA6aVswXSxvZmZzZXQ6dCxvbkVycm9yOm8scGFyZW50SW5kZW50OjAsc3RhcnRPbk5ld2xpbmU6ITB9KTtmLmZvdW5kJiYodS5kaXJlY3RpdmVzLmRvY1N0YXJ0PSEwLHMmJihzLnR5cGU9PT1cXFwiYmxvY2stbWFwXFxcInx8cy50eXBlPT09XFxcImJsb2NrLXNlcVxcXCIpJiYhZi5oYXNOZXdsaW5lJiZvKGYuZW5kLFxcXCJNSVNTSU5HX0NIQVJcXFwiLFxcXCJCbG9jayBjb2xsZWN0aW9uIGNhbm5vdCBzdGFydCBvbiBzYW1lIGxpbmUgd2l0aCBkaXJlY3RpdmVzLWVuZCBtYXJrZXJcXFwiKSksdS5jb250ZW50cz1zP3NvKGwscyxmLG8pOkFzKGwsZi5lbmQscixudWxsLGYsbyk7bGV0IGQ9dS5jb250ZW50cy5yYW5nZVsyXSxtPXV0KGksZCwhMSxvKTtyZXR1cm4gbS5jb21tZW50JiYodS5jb21tZW50PW0uY29tbWVudCksdS5yYW5nZT1bdCxkLG0ub2Zmc2V0XSx1fWZ1bmN0aW9uIE9yKG4pe2lmKHR5cGVvZiBuPT1cXFwibnVtYmVyXFxcIilyZXR1cm5bbixuKzFdO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG4ubGVuZ3RoPT09Mj9uOltuWzBdLG5bMV1dO2xldHtvZmZzZXQ6ZSxzb3VyY2U6dH09bjtyZXR1cm5bZSxlKyh0eXBlb2YgdD09XFxcInN0cmluZ1xcXCI/dC5sZW5ndGg6MSldfWZ1bmN0aW9uIGt1KG4pe3ZhciBzO2xldCBlPVxcXCJcXFwiLHQ9ITEscj0hMTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoOysraSl7bGV0IG89bltpXTtzd2l0Y2gob1swXSl7Y2FzZVxcXCIjXFxcIjplKz0oZT09PVxcXCJcXFwiP1xcXCJcXFwiOnI/YFxcblxcbmA6YFxcbmApKyhvLnN1YnN0cmluZygxKXx8XFxcIiBcXFwiKSx0PSEwLHI9ITE7YnJlYWs7Y2FzZVxcXCIlXFxcIjooKHM9bltpKzFdKT09bnVsbD92b2lkIDA6c1swXSkhPT1cXFwiI1xcXCImJihpKz0xKSx0PSExO2JyZWFrO2RlZmF1bHQ6dHx8KHI9ITApLHQ9ITF9fXJldHVybntjb21tZW50OmUsYWZ0ZXJFbXB0eUxpbmU6cn19dmFyIElyPWNsYXNze2NvbnN0cnVjdG9yKGU9e30pe3RoaXMuZG9jPW51bGwsdGhpcy5hdERpcmVjdGl2ZXM9ITEsdGhpcy5wcmVsdWRlPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMud2FybmluZ3M9W10sdGhpcy5vbkVycm9yPSh0LHIscyxpKT0+e2xldCBvPU9yKHQpO2k/dGhpcy53YXJuaW5ncy5wdXNoKG5ldyB2cihvLHIscykpOnRoaXMuZXJyb3JzLnB1c2gobmV3IFFlKG8scixzKSl9LHRoaXMuZGlyZWN0aXZlcz1uZXcgaXQoe3ZlcnNpb246ZS52ZXJzaW9ufHxcXFwiMS4yXFxcIn0pLHRoaXMub3B0aW9ucz1lfWRlY29yYXRlKGUsdCl7bGV0e2NvbW1lbnQ6cixhZnRlckVtcHR5TGluZTpzfT1rdSh0aGlzLnByZWx1ZGUpO2lmKHIpe2xldCBpPWUuY29udGVudHM7aWYodCllLmNvbW1lbnQ9ZS5jb21tZW50P2Ake2UuY29tbWVudH1cXG4ke3J9YDpyO2Vsc2UgaWYoc3x8ZS5kaXJlY3RpdmVzLmRvY1N0YXJ0fHwhaSllLmNvbW1lbnRCZWZvcmU9cjtlbHNlIGlmKFooaSkmJiFpLmZsb3cmJmkuaXRlbXMubGVuZ3RoPjApe2xldCBvPWkuaXRlbXNbMF07SChvKSYmKG89by5rZXkpO2xldCBhPW8uY29tbWVudEJlZm9yZTtvLmNvbW1lbnRCZWZvcmU9YT9gJHtyfVxcbiR7YX1gOnJ9ZWxzZXtsZXQgbz1pLmNvbW1lbnRCZWZvcmU7aS5jb21tZW50QmVmb3JlPW8/YCR7cn1cXG4ke299YDpyfX10PyhBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLmVycm9ycyx0aGlzLmVycm9ycyksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZS53YXJuaW5ncyx0aGlzLndhcm5pbmdzKSk6KGUuZXJyb3JzPXRoaXMuZXJyb3JzLGUud2FybmluZ3M9dGhpcy53YXJuaW5ncyksdGhpcy5wcmVsdWRlPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMud2FybmluZ3M9W119c3RyZWFtSW5mbygpe3JldHVybntjb21tZW50Omt1KHRoaXMucHJlbHVkZSkuY29tbWVudCxkaXJlY3RpdmVzOnRoaXMuZGlyZWN0aXZlcyxlcnJvcnM6dGhpcy5lcnJvcnMsd2FybmluZ3M6dGhpcy53YXJuaW5nc319KmNvbXBvc2UoZSx0PSExLHI9LTEpe2ZvcihsZXQgcyBvZiBlKXlpZWxkKlModGhpcy5uZXh0KHMpKTt5aWVsZCpTKHRoaXMuZW5kKHQscikpfSpuZXh0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2VcXFwiZGlyZWN0aXZlXFxcIjp0aGlzLmRpcmVjdGl2ZXMuYWRkKGUuc291cmNlLCh0LHIscyk9PntsZXQgaT1PcihlKTtpWzBdKz10LHRoaXMub25FcnJvcihpLFxcXCJCQURfRElSRUNUSVZFXFxcIixyLHMpfSksdGhpcy5wcmVsdWRlLnB1c2goZS5zb3VyY2UpLHRoaXMuYXREaXJlY3RpdmVzPSEwO2JyZWFrO2Nhc2VcXFwiZG9jdW1lbnRcXFwiOntsZXQgdD1TdSh0aGlzLm9wdGlvbnMsdGhpcy5kaXJlY3RpdmVzLGUsdGhpcy5vbkVycm9yKTt0aGlzLmF0RGlyZWN0aXZlcyYmIXQuZGlyZWN0aXZlcy5kb2NTdGFydCYmdGhpcy5vbkVycm9yKGUsXFxcIk1JU1NJTkdfQ0hBUlxcXCIsXFxcIk1pc3NpbmcgZGlyZWN0aXZlcy1lbmQvZG9jLXN0YXJ0IGluZGljYXRvciBsaW5lXFxcIiksdGhpcy5kZWNvcmF0ZSh0LCExKSx0aGlzLmRvYyYmKHlpZWxkIHRoaXMuZG9jKSx0aGlzLmRvYz10LHRoaXMuYXREaXJlY3RpdmVzPSExO2JyZWFrfWNhc2VcXFwiYnl0ZS1vcmRlci1tYXJrXFxcIjpjYXNlXFxcInNwYWNlXFxcIjpicmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6dGhpcy5wcmVsdWRlLnB1c2goZS5zb3VyY2UpO2JyZWFrO2Nhc2VcXFwiZXJyb3JcXFwiOntsZXQgdD1lLnNvdXJjZT9gJHtlLm1lc3NhZ2V9OiAke0pTT04uc3RyaW5naWZ5KGUuc291cmNlKX1gOmUubWVzc2FnZSxyPW5ldyBRZShPcihlKSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsdCk7dGhpcy5hdERpcmVjdGl2ZXN8fCF0aGlzLmRvYz90aGlzLmVycm9ycy5wdXNoKHIpOnRoaXMuZG9jLmVycm9ycy5wdXNoKHIpO2JyZWFrfWNhc2VcXFwiZG9jLWVuZFxcXCI6e2lmKCF0aGlzLmRvYyl7bGV0IHI9XFxcIlVuZXhwZWN0ZWQgZG9jLWVuZCB3aXRob3V0IHByZWNlZGluZyBkb2N1bWVudFxcXCI7dGhpcy5lcnJvcnMucHVzaChuZXcgUWUoT3IoZSksXFxcIlVORVhQRUNURURfVE9LRU5cXFwiLHIpKTticmVha310aGlzLmRvYy5kaXJlY3RpdmVzLmRvY0VuZD0hMDtsZXQgdD11dChlLmVuZCxlLm9mZnNldCtlLnNvdXJjZS5sZW5ndGgsdGhpcy5kb2Mub3B0aW9ucy5zdHJpY3QsdGhpcy5vbkVycm9yKTtpZih0aGlzLmRlY29yYXRlKHRoaXMuZG9jLCEwKSx0LmNvbW1lbnQpe2xldCByPXRoaXMuZG9jLmNvbW1lbnQ7dGhpcy5kb2MuY29tbWVudD1yP2Ake3J9XFxuJHt0LmNvbW1lbnR9YDp0LmNvbW1lbnR9dGhpcy5kb2MucmFuZ2VbMl09dC5vZmZzZXQ7YnJlYWt9ZGVmYXVsdDp0aGlzLmVycm9ycy5wdXNoKG5ldyBRZShPcihlKSxcXFwiVU5FWFBFQ1RFRF9UT0tFTlxcXCIsYFVuc3VwcG9ydGVkIHRva2VuICR7ZS50eXBlfWApKX19KmVuZChlPSExLHQ9LTEpe2lmKHRoaXMuZG9jKXRoaXMuZGVjb3JhdGUodGhpcy5kb2MsITApLHlpZWxkIHRoaXMuZG9jLHRoaXMuZG9jPW51bGw7ZWxzZSBpZihlKXtsZXQgcj1PYmplY3QuYXNzaWduKHtfZGlyZWN0aXZlczp0aGlzLmRpcmVjdGl2ZXN9LHRoaXMub3B0aW9ucykscz1uZXcgTnQodm9pZCAwLHIpO3RoaXMuYXREaXJlY3RpdmVzJiZ0aGlzLm9uRXJyb3IodCxcXFwiTUlTU0lOR19DSEFSXFxcIixcXFwiTWlzc2luZyBkaXJlY3RpdmVzLWVuZCBpbmRpY2F0b3IgbGluZVxcXCIpLHMucmFuZ2U9WzAsdCx0XSx0aGlzLmRlY29yYXRlKHMsITEpLHlpZWxkIHN9fX07dmFyIGlvPVN5bWJvbChcXFwiYnJlYWsgdmlzaXRcXFwiKSxnZj1TeW1ib2woXFxcInNraXAgY2hpbGRyZW5cXFwiKSxDdT1TeW1ib2woXFxcInJlbW92ZSBpdGVtXFxcIik7ZnVuY3Rpb24gSnQobixlKXtcXFwidHlwZVxcXCJpbiBuJiZuLnR5cGU9PT1cXFwiZG9jdW1lbnRcXFwiJiYobj17c3RhcnQ6bi5zdGFydCx2YWx1ZTpuLnZhbHVlfSksdnUoT2JqZWN0LmZyZWV6ZShbXSksbixlKX1KdC5CUkVBSz1pbztKdC5TS0lQPWdmO0p0LlJFTU9WRT1DdTtKdC5pdGVtQXRQYXRoPShuLGUpPT57bGV0IHQ9bjtmb3IobGV0W3Isc11vZiBlKXtsZXQgaT10PT1udWxsP3ZvaWQgMDp0W3JdO2lmKGkmJlxcXCJpdGVtc1xcXCJpbiBpKXQ9aS5pdGVtc1tzXTtlbHNlIHJldHVybn1yZXR1cm4gdH07SnQucGFyZW50Q29sbGVjdGlvbj0obixlKT0+e2xldCB0PUp0Lml0ZW1BdFBhdGgobixlLnNsaWNlKDAsLTEpKSxyPWVbZS5sZW5ndGgtMV1bMF0scz10PT1udWxsP3ZvaWQgMDp0W3JdO2lmKHMmJlxcXCJpdGVtc1xcXCJpbiBzKXJldHVybiBzO3Rocm93IG5ldyBFcnJvcihcXFwiUGFyZW50IGNvbGxlY3Rpb24gbm90IGZvdW5kXFxcIil9O2Z1bmN0aW9uIHZ1KG4sZSx0KXtsZXQgcj10KGUsbik7aWYodHlwZW9mIHI9PVxcXCJzeW1ib2xcXFwiKXJldHVybiByO2ZvcihsZXQgcyBvZltcXFwia2V5XFxcIixcXFwidmFsdWVcXFwiXSl7bGV0IGk9ZVtzXTtpZihpJiZcXFwiaXRlbXNcXFwiaW4gaSl7Zm9yKGxldCBvPTA7bzxpLml0ZW1zLmxlbmd0aDsrK28pe2xldCBhPXZ1KE9iamVjdC5mcmVlemUobi5jb25jYXQoW1tzLG9dXSkpLGkuaXRlbXNbb10sdCk7aWYodHlwZW9mIGE9PVxcXCJudW1iZXJcXFwiKW89YS0xO2Vsc2V7aWYoYT09PWlvKXJldHVybiBpbzthPT09Q3UmJihpLml0ZW1zLnNwbGljZShvLDEpLG8tPTEpfX10eXBlb2Ygcj09XFxcImZ1bmN0aW9uXFxcIiYmcz09PVxcXCJrZXlcXFwiJiYocj1yKGUsbikpfX1yZXR1cm4gdHlwZW9mIHI9PVxcXCJmdW5jdGlvblxcXCI/cihlLG4pOnJ9dmFyIG9vPVxcXCJcXFxcdUZFRkZcXFwiLGFvPVxcXCJcXHUwMDAyXFxcIix1bz1cXFwiXFx1MDAxOFxcXCIsTXM9XFxcIlxcdTAwMWZcXFwiO2Z1bmN0aW9uIHh1KG4pe3N3aXRjaChuKXtjYXNlIG9vOnJldHVyblxcXCJieXRlLW9yZGVyLW1hcmtcXFwiO2Nhc2UgYW86cmV0dXJuXFxcImRvYy1tb2RlXFxcIjtjYXNlIHVvOnJldHVyblxcXCJmbG93LWVycm9yLWVuZFxcXCI7Y2FzZSBNczpyZXR1cm5cXFwic2NhbGFyXFxcIjtjYXNlXFxcIi0tLVxcXCI6cmV0dXJuXFxcImRvYy1zdGFydFxcXCI7Y2FzZVxcXCIuLi5cXFwiOnJldHVyblxcXCJkb2MtZW5kXFxcIjtjYXNlXFxcIlxcXCI6Y2FzZWBcXG5gOmNhc2VgXFxcXHJcXG5gOnJldHVyblxcXCJuZXdsaW5lXFxcIjtjYXNlXFxcIi1cXFwiOnJldHVyblxcXCJzZXEtaXRlbS1pbmRcXFwiO2Nhc2VcXFwiP1xcXCI6cmV0dXJuXFxcImV4cGxpY2l0LWtleS1pbmRcXFwiO2Nhc2VcXFwiOlxcXCI6cmV0dXJuXFxcIm1hcC12YWx1ZS1pbmRcXFwiO2Nhc2VcXFwie1xcXCI6cmV0dXJuXFxcImZsb3ctbWFwLXN0YXJ0XFxcIjtjYXNlXFxcIn1cXFwiOnJldHVyblxcXCJmbG93LW1hcC1lbmRcXFwiO2Nhc2VcXFwiW1xcXCI6cmV0dXJuXFxcImZsb3ctc2VxLXN0YXJ0XFxcIjtjYXNlXFxcIl1cXFwiOnJldHVyblxcXCJmbG93LXNlcS1lbmRcXFwiO2Nhc2VcXFwiLFxcXCI6cmV0dXJuXFxcImNvbW1hXFxcIn1zd2l0Y2goblswXSl7Y2FzZVxcXCIgXFxcIjpjYXNlXFxcIlxcdFxcXCI6cmV0dXJuXFxcInNwYWNlXFxcIjtjYXNlXFxcIiNcXFwiOnJldHVyblxcXCJjb21tZW50XFxcIjtjYXNlXFxcIiVcXFwiOnJldHVyblxcXCJkaXJlY3RpdmUtbGluZVxcXCI7Y2FzZVxcXCIqXFxcIjpyZXR1cm5cXFwiYWxpYXNcXFwiO2Nhc2VcXFwiJlxcXCI6cmV0dXJuXFxcImFuY2hvclxcXCI7Y2FzZVxcXCIhXFxcIjpyZXR1cm5cXFwidGFnXFxcIjtjYXNlXFxcIidcXFwiOnJldHVyblxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI7Y2FzZSdcXFwiJzpyZXR1cm5cXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiO2Nhc2VcXFwifFxcXCI6Y2FzZVxcXCI+XFxcIjpyZXR1cm5cXFwiYmxvY2stc2NhbGFyLWhlYWRlclxcXCJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gWGUobil7c3dpdGNoKG4pe2Nhc2Ugdm9pZCAwOmNhc2VcXFwiIFxcXCI6Y2FzZWBcXG5gOmNhc2VcXFwiXFxcXHJcXFwiOmNhc2VcXFwiXFx0XFxcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgT3U9bmV3IFNldChcXFwiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZlxcXCIpLEZmPW5ldyBTZXQoXFxcIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LSM7Lz86QCY9KyRfLiF+KicoKVxcXCIpLF9zPW5ldyBTZXQoXFxcIixbXXt9XFxcIiksRWY9bmV3IFNldChgICxbXXt9XFxuXFxcXHJcXHRgKSxsbz1uPT4hbnx8RWYuaGFzKG4pLExyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdEVuZD0hMSx0aGlzLmJsb2NrU2NhbGFySW5kZW50PS0xLHRoaXMuYmxvY2tTY2FsYXJLZWVwPSExLHRoaXMuYnVmZmVyPVxcXCJcXFwiLHRoaXMuZmxvd0tleT0hMSx0aGlzLmZsb3dMZXZlbD0wLHRoaXMuaW5kZW50TmV4dD0wLHRoaXMuaW5kZW50VmFsdWU9MCx0aGlzLmxpbmVFbmRQb3M9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLnBvcz0wfSpsZXgoZSx0PSExKXt2YXIgcztpZihlKXtpZih0eXBlb2YgZSE9XFxcInN0cmluZ1xcXCIpdGhyb3cgVHlwZUVycm9yKFxcXCJzb3VyY2UgaXMgbm90IGEgc3RyaW5nXFxcIik7dGhpcy5idWZmZXI9dGhpcy5idWZmZXI/dGhpcy5idWZmZXIrZTplLHRoaXMubGluZUVuZFBvcz1udWxsfXRoaXMuYXRFbmQ9IXQ7bGV0IHI9KHM9dGhpcy5uZXh0KSE9bnVsbD9zOlxcXCJzdHJlYW1cXFwiO2Zvcig7ciYmKHR8fHRoaXMuaGFzQ2hhcnMoMSkpOylyPXlpZWxkKlModGhpcy5wYXJzZU5leHQocikpfWF0TGluZUVuZCgpe2xldCBlPXRoaXMucG9zLHQ9dGhpcy5idWZmZXJbZV07Zm9yKDt0PT09XFxcIiBcXFwifHx0PT09XFxcIlxcdFxcXCI7KXQ9dGhpcy5idWZmZXJbKytlXTtyZXR1cm4hdHx8dD09PVxcXCIjXFxcInx8dD09PWBcXG5gPyEwOnQ9PT1cXFwiXFxcXHJcXFwiP3RoaXMuYnVmZmVyW2UrMV09PT1gXFxuYDohMX1jaGFyQXQoZSl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zK2VdfWNvbnRpbnVlU2NhbGFyKGUpe2xldCB0PXRoaXMuYnVmZmVyW2VdO2lmKHRoaXMuaW5kZW50TmV4dD4wKXtsZXQgcj0wO2Zvcig7dD09PVxcXCIgXFxcIjspdD10aGlzLmJ1ZmZlclsrK3IrZV07aWYodD09PVxcXCJcXFxcclxcXCIpe2xldCBzPXRoaXMuYnVmZmVyW3IrZSsxXTtpZihzPT09YFxcbmB8fCFzJiYhdGhpcy5hdEVuZClyZXR1cm4gZStyKzF9cmV0dXJuIHQ9PT1gXFxuYHx8cj49dGhpcy5pbmRlbnROZXh0fHwhdCYmIXRoaXMuYXRFbmQ/ZStyOi0xfWlmKHQ9PT1cXFwiLVxcXCJ8fHQ9PT1cXFwiLlxcXCIpe2xldCByPXRoaXMuYnVmZmVyLnN1YnN0cihlLDMpO2lmKChyPT09XFxcIi0tLVxcXCJ8fHI9PT1cXFwiLi4uXFxcIikmJlhlKHRoaXMuYnVmZmVyW2UrM10pKXJldHVybi0xfXJldHVybiBlfWdldExpbmUoKXtsZXQgZT10aGlzLmxpbmVFbmRQb3M7cmV0dXJuKHR5cGVvZiBlIT1cXFwibnVtYmVyXFxcInx8ZSE9PS0xJiZlPHRoaXMucG9zKSYmKGU9dGhpcy5idWZmZXIuaW5kZXhPZihgXFxuYCx0aGlzLnBvcyksdGhpcy5saW5lRW5kUG9zPWUpLGU9PT0tMT90aGlzLmF0RW5kP3RoaXMuYnVmZmVyLnN1YnN0cmluZyh0aGlzLnBvcyk6bnVsbDoodGhpcy5idWZmZXJbZS0xXT09PVxcXCJcXFxcclxcXCImJihlLT0xKSx0aGlzLmJ1ZmZlci5zdWJzdHJpbmcodGhpcy5wb3MsZSkpfWhhc0NoYXJzKGUpe3JldHVybiB0aGlzLnBvcytlPD10aGlzLmJ1ZmZlci5sZW5ndGh9c2V0TmV4dChlKXtyZXR1cm4gdGhpcy5idWZmZXI9dGhpcy5idWZmZXIuc3Vic3RyaW5nKHRoaXMucG9zKSx0aGlzLnBvcz0wLHRoaXMubGluZUVuZFBvcz1udWxsLHRoaXMubmV4dD1lLG51bGx9cGVlayhlKXtyZXR1cm4gdGhpcy5idWZmZXIuc3Vic3RyKHRoaXMucG9zLGUpfSpwYXJzZU5leHQoZSl7c3dpdGNoKGUpe2Nhc2VcXFwic3RyZWFtXFxcIjpyZXR1cm4geWllbGQqUyh0aGlzLnBhcnNlU3RyZWFtKCkpO2Nhc2VcXFwibGluZS1zdGFydFxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wYXJzZUxpbmVTdGFydCgpKTtjYXNlXFxcImJsb2NrLXN0YXJ0XFxcIjpyZXR1cm4geWllbGQqUyh0aGlzLnBhcnNlQmxvY2tTdGFydCgpKTtjYXNlXFxcImRvY1xcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wYXJzZURvY3VtZW50KCkpO2Nhc2VcXFwiZmxvd1xcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wYXJzZUZsb3dDb2xsZWN0aW9uKCkpO2Nhc2VcXFwicXVvdGVkLXNjYWxhclxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wYXJzZVF1b3RlZFNjYWxhcigpKTtjYXNlXFxcImJsb2NrLXNjYWxhclxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wYXJzZUJsb2NrU2NhbGFyKCkpO2Nhc2VcXFwicGxhaW4tc2NhbGFyXFxcIjpyZXR1cm4geWllbGQqUyh0aGlzLnBhcnNlUGxhaW5TY2FsYXIoKSl9fSpwYXJzZVN0cmVhbSgpe2xldCBlPXRoaXMuZ2V0TGluZSgpO2lmKGU9PT1udWxsKXJldHVybiB0aGlzLnNldE5leHQoXFxcInN0cmVhbVxcXCIpO2lmKGVbMF09PT1vbyYmKHlpZWxkKlModGhpcy5wdXNoQ291bnQoMSkpLGU9ZS5zdWJzdHJpbmcoMSkpLGVbMF09PT1cXFwiJVxcXCIpe2xldCB0PWUubGVuZ3RoLHI9ZS5pbmRleE9mKFxcXCIjXFxcIik7Zm9yKDtyIT09LTE7KXtsZXQgaT1lW3ItMV07aWYoaT09PVxcXCIgXFxcInx8aT09PVxcXCJcXHRcXFwiKXt0PXItMTticmVha31lbHNlIHI9ZS5pbmRleE9mKFxcXCIjXFxcIixyKzEpfWZvcig7Oyl7bGV0IGk9ZVt0LTFdO2lmKGk9PT1cXFwiIFxcXCJ8fGk9PT1cXFwiXFx0XFxcIil0LT0xO2Vsc2UgYnJlYWt9bGV0IHM9KHlpZWxkKlModGhpcy5wdXNoQ291bnQodCkpKSsoeWllbGQqUyh0aGlzLnB1c2hTcGFjZXMoITApKSk7cmV0dXJuIHlpZWxkKlModGhpcy5wdXNoQ291bnQoZS5sZW5ndGgtcykpLHRoaXMucHVzaE5ld2xpbmUoKSxcXFwic3RyZWFtXFxcIn1pZih0aGlzLmF0TGluZUVuZCgpKXtsZXQgdD15aWVsZCpTKHRoaXMucHVzaFNwYWNlcyghMCkpO3JldHVybiB5aWVsZCpTKHRoaXMucHVzaENvdW50KGUubGVuZ3RoLXQpKSx5aWVsZCpTKHRoaXMucHVzaE5ld2xpbmUoKSksXFxcInN0cmVhbVxcXCJ9cmV0dXJuIHlpZWxkIGFvLHlpZWxkKlModGhpcy5wYXJzZUxpbmVTdGFydCgpKX0qcGFyc2VMaW5lU3RhcnQoKXtsZXQgZT10aGlzLmNoYXJBdCgwKTtpZighZSYmIXRoaXMuYXRFbmQpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwibGluZS1zdGFydFxcXCIpO2lmKGU9PT1cXFwiLVxcXCJ8fGU9PT1cXFwiLlxcXCIpe2lmKCF0aGlzLmF0RW5kJiYhdGhpcy5oYXNDaGFycyg0KSlyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJsaW5lLXN0YXJ0XFxcIik7bGV0IHQ9dGhpcy5wZWVrKDMpO2lmKCh0PT09XFxcIi0tLVxcXCJ8fHQ9PT1cXFwiLi4uXFxcIikmJlhlKHRoaXMuY2hhckF0KDMpKSlyZXR1cm4geWllbGQqUyh0aGlzLnB1c2hDb3VudCgzKSksdGhpcy5pbmRlbnRWYWx1ZT0wLHRoaXMuaW5kZW50TmV4dD0wLHQ9PT1cXFwiLS0tXFxcIj9cXFwiZG9jXFxcIjpcXFwic3RyZWFtXFxcIn1yZXR1cm4gdGhpcy5pbmRlbnRWYWx1ZT15aWVsZCpTKHRoaXMucHVzaFNwYWNlcyghMSkpLHRoaXMuaW5kZW50TmV4dD50aGlzLmluZGVudFZhbHVlJiYhWGUodGhpcy5jaGFyQXQoMSkpJiYodGhpcy5pbmRlbnROZXh0PXRoaXMuaW5kZW50VmFsdWUpLHlpZWxkKlModGhpcy5wYXJzZUJsb2NrU3RhcnQoKSl9KnBhcnNlQmxvY2tTdGFydCgpe2xldFtlLHRdPXRoaXMucGVlaygyKTtpZighdCYmIXRoaXMuYXRFbmQpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwiYmxvY2stc3RhcnRcXFwiKTtpZigoZT09PVxcXCItXFxcInx8ZT09PVxcXCI/XFxcInx8ZT09PVxcXCI6XFxcIikmJlhlKHQpKXtsZXQgcj0oeWllbGQqUyh0aGlzLnB1c2hDb3VudCgxKSkpKyh5aWVsZCpTKHRoaXMucHVzaFNwYWNlcyghMCkpKTtyZXR1cm4gdGhpcy5pbmRlbnROZXh0PXRoaXMuaW5kZW50VmFsdWUrMSx0aGlzLmluZGVudFZhbHVlKz1yLHlpZWxkKlModGhpcy5wYXJzZUJsb2NrU3RhcnQoKSl9cmV0dXJuXFxcImRvY1xcXCJ9KnBhcnNlRG9jdW1lbnQoKXt5aWVsZCpTKHRoaXMucHVzaFNwYWNlcyghMCkpO2xldCBlPXRoaXMuZ2V0TGluZSgpO2lmKGU9PT1udWxsKXJldHVybiB0aGlzLnNldE5leHQoXFxcImRvY1xcXCIpO2xldCB0PXlpZWxkKlModGhpcy5wdXNoSW5kaWNhdG9ycygpKTtzd2l0Y2goZVt0XSl7Y2FzZVxcXCIjXFxcIjp5aWVsZCpTKHRoaXMucHVzaENvdW50KGUubGVuZ3RoLXQpKTtjYXNlIHZvaWQgMDpyZXR1cm4geWllbGQqUyh0aGlzLnB1c2hOZXdsaW5lKCkpLHlpZWxkKlModGhpcy5wYXJzZUxpbmVTdGFydCgpKTtjYXNlXFxcIntcXFwiOmNhc2VcXFwiW1xcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wdXNoQ291bnQoMSkpLHRoaXMuZmxvd0tleT0hMSx0aGlzLmZsb3dMZXZlbD0xLFxcXCJmbG93XFxcIjtjYXNlXFxcIn1cXFwiOmNhc2VcXFwiXVxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wdXNoQ291bnQoMSkpLFxcXCJkb2NcXFwiO2Nhc2VcXFwiKlxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wdXNoVW50aWwobG8pKSxcXFwiZG9jXFxcIjtjYXNlJ1xcXCInOmNhc2VcXFwiJ1xcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wYXJzZVF1b3RlZFNjYWxhcigpKTtjYXNlXFxcInxcXFwiOmNhc2VcXFwiPlxcXCI6cmV0dXJuIHQrPXlpZWxkKlModGhpcy5wYXJzZUJsb2NrU2NhbGFySGVhZGVyKCkpLHQrPXlpZWxkKlModGhpcy5wdXNoU3BhY2VzKCEwKSkseWllbGQqUyh0aGlzLnB1c2hDb3VudChlLmxlbmd0aC10KSkseWllbGQqUyh0aGlzLnB1c2hOZXdsaW5lKCkpLHlpZWxkKlModGhpcy5wYXJzZUJsb2NrU2NhbGFyKCkpO2RlZmF1bHQ6cmV0dXJuIHlpZWxkKlModGhpcy5wYXJzZVBsYWluU2NhbGFyKCkpfX0qcGFyc2VGbG93Q29sbGVjdGlvbigpe2xldCBlLHQscj0tMTtkbyBlPXlpZWxkKlModGhpcy5wdXNoTmV3bGluZSgpKSxlPjA/KHQ9eWllbGQqUyh0aGlzLnB1c2hTcGFjZXMoITEpKSx0aGlzLmluZGVudFZhbHVlPXI9dCk6dD0wLHQrPXlpZWxkKlModGhpcy5wdXNoU3BhY2VzKCEwKSk7d2hpbGUoZSt0PjApO2xldCBzPXRoaXMuZ2V0TGluZSgpO2lmKHM9PT1udWxsKXJldHVybiB0aGlzLnNldE5leHQoXFxcImZsb3dcXFwiKTtpZigociE9PS0xJiZyPHRoaXMuaW5kZW50TmV4dCYmc1swXSE9PVxcXCIjXFxcInx8cj09PTAmJihzLnN0YXJ0c1dpdGgoXFxcIi0tLVxcXCIpfHxzLnN0YXJ0c1dpdGgoXFxcIi4uLlxcXCIpKSYmWGUoc1szXSkpJiYhKHI9PT10aGlzLmluZGVudE5leHQtMSYmdGhpcy5mbG93TGV2ZWw9PT0xJiYoc1swXT09PVxcXCJdXFxcInx8c1swXT09PVxcXCJ9XFxcIikpKXJldHVybiB0aGlzLmZsb3dMZXZlbD0wLHlpZWxkIHVvLHlpZWxkKlModGhpcy5wYXJzZUxpbmVTdGFydCgpKTtsZXQgaT0wO2Zvcig7c1tpXT09PVxcXCIsXFxcIjspaSs9eWllbGQqUyh0aGlzLnB1c2hDb3VudCgxKSksaSs9eWllbGQqUyh0aGlzLnB1c2hTcGFjZXMoITApKSx0aGlzLmZsb3dLZXk9ITE7c3dpdGNoKGkrPXlpZWxkKlModGhpcy5wdXNoSW5kaWNhdG9ycygpKSxzW2ldKXtjYXNlIHZvaWQgMDpyZXR1cm5cXFwiZmxvd1xcXCI7Y2FzZVxcXCIjXFxcIjpyZXR1cm4geWllbGQqUyh0aGlzLnB1c2hDb3VudChzLmxlbmd0aC1pKSksXFxcImZsb3dcXFwiO2Nhc2VcXFwie1xcXCI6Y2FzZVxcXCJbXFxcIjpyZXR1cm4geWllbGQqUyh0aGlzLnB1c2hDb3VudCgxKSksdGhpcy5mbG93S2V5PSExLHRoaXMuZmxvd0xldmVsKz0xLFxcXCJmbG93XFxcIjtjYXNlXFxcIn1cXFwiOmNhc2VcXFwiXVxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5wdXNoQ291bnQoMSkpLHRoaXMuZmxvd0tleT0hMCx0aGlzLmZsb3dMZXZlbC09MSx0aGlzLmZsb3dMZXZlbD9cXFwiZmxvd1xcXCI6XFxcImRvY1xcXCI7Y2FzZVxcXCIqXFxcIjpyZXR1cm4geWllbGQqUyh0aGlzLnB1c2hVbnRpbChsbykpLFxcXCJmbG93XFxcIjtjYXNlJ1xcXCInOmNhc2VcXFwiJ1xcXCI6cmV0dXJuIHRoaXMuZmxvd0tleT0hMCx5aWVsZCpTKHRoaXMucGFyc2VRdW90ZWRTY2FsYXIoKSk7Y2FzZVxcXCI6XFxcIjp7bGV0IG89dGhpcy5jaGFyQXQoMSk7aWYodGhpcy5mbG93S2V5fHxYZShvKXx8bz09PVxcXCIsXFxcIilyZXR1cm4gdGhpcy5mbG93S2V5PSExLHlpZWxkKlModGhpcy5wdXNoQ291bnQoMSkpLHlpZWxkKlModGhpcy5wdXNoU3BhY2VzKCEwKSksXFxcImZsb3dcXFwifWRlZmF1bHQ6cmV0dXJuIHRoaXMuZmxvd0tleT0hMSx5aWVsZCpTKHRoaXMucGFyc2VQbGFpblNjYWxhcigpKX19KnBhcnNlUXVvdGVkU2NhbGFyKCl7bGV0IGU9dGhpcy5jaGFyQXQoMCksdD10aGlzLmJ1ZmZlci5pbmRleE9mKGUsdGhpcy5wb3MrMSk7aWYoZT09PVxcXCInXFxcIilmb3IoO3QhPT0tMSYmdGhpcy5idWZmZXJbdCsxXT09PVxcXCInXFxcIjspdD10aGlzLmJ1ZmZlci5pbmRleE9mKFxcXCInXFxcIix0KzIpO2Vsc2UgZm9yKDt0IT09LTE7KXtsZXQgaT0wO2Zvcig7dGhpcy5idWZmZXJbdC0xLWldPT09XFxcIlxcXFxcXFxcXFxcIjspaSs9MTtpZihpJTI9PT0wKWJyZWFrO3Q9dGhpcy5idWZmZXIuaW5kZXhPZignXFxcIicsdCsxKX1sZXQgcj10aGlzLmJ1ZmZlci5zdWJzdHJpbmcoMCx0KSxzPXIuaW5kZXhPZihgXFxuYCx0aGlzLnBvcyk7aWYocyE9PS0xKXtmb3IoO3MhPT0tMTspe2xldCBpPXRoaXMuY29udGludWVTY2FsYXIocysxKTtpZihpPT09LTEpYnJlYWs7cz1yLmluZGV4T2YoYFxcbmAsaSl9cyE9PS0xJiYodD1zLShyW3MtMV09PT1cXFwiXFxcXHJcXFwiPzI6MSkpfWlmKHQ9PT0tMSl7aWYoIXRoaXMuYXRFbmQpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwicXVvdGVkLXNjYWxhclxcXCIpO3Q9dGhpcy5idWZmZXIubGVuZ3RofXJldHVybiB5aWVsZCpTKHRoaXMucHVzaFRvSW5kZXgodCsxLCExKSksdGhpcy5mbG93TGV2ZWw/XFxcImZsb3dcXFwiOlxcXCJkb2NcXFwifSpwYXJzZUJsb2NrU2NhbGFySGVhZGVyKCl7dGhpcy5ibG9ja1NjYWxhckluZGVudD0tMSx0aGlzLmJsb2NrU2NhbGFyS2VlcD0hMTtsZXQgZT10aGlzLnBvcztmb3IoOzspe2xldCB0PXRoaXMuYnVmZmVyWysrZV07aWYodD09PVxcXCIrXFxcIil0aGlzLmJsb2NrU2NhbGFyS2VlcD0hMDtlbHNlIGlmKHQ+XFxcIjBcXFwiJiZ0PD1cXFwiOVxcXCIpdGhpcy5ibG9ja1NjYWxhckluZGVudD1OdW1iZXIodCktMTtlbHNlIGlmKHQhPT1cXFwiLVxcXCIpYnJlYWt9cmV0dXJuIHlpZWxkKlModGhpcy5wdXNoVW50aWwodD0+WGUodCl8fHQ9PT1cXFwiI1xcXCIpKX0qcGFyc2VCbG9ja1NjYWxhcigpe2xldCBlPXRoaXMucG9zLTEsdD0wLHI7ZTpmb3IobGV0IGk9dGhpcy5wb3M7cj10aGlzLmJ1ZmZlcltpXTsrK2kpc3dpdGNoKHIpe2Nhc2VcXFwiIFxcXCI6dCs9MTticmVhaztjYXNlYFxcbmA6ZT1pLHQ9MDticmVhaztjYXNlXFxcIlxcXFxyXFxcIjp7bGV0IG89dGhpcy5idWZmZXJbaSsxXTtpZighbyYmIXRoaXMuYXRFbmQpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwiYmxvY2stc2NhbGFyXFxcIik7aWYobz09PWBcXG5gKWJyZWFrfWRlZmF1bHQ6YnJlYWsgZX1pZighciYmIXRoaXMuYXRFbmQpcmV0dXJuIHRoaXMuc2V0TmV4dChcXFwiYmxvY2stc2NhbGFyXFxcIik7aWYodD49dGhpcy5pbmRlbnROZXh0KXt0aGlzLmJsb2NrU2NhbGFySW5kZW50PT09LTE/dGhpcy5pbmRlbnROZXh0PXQ6dGhpcy5pbmRlbnROZXh0PXRoaXMuYmxvY2tTY2FsYXJJbmRlbnQrKHRoaXMuaW5kZW50TmV4dD09PTA/MTp0aGlzLmluZGVudE5leHQpO2Rve2xldCBpPXRoaXMuY29udGludWVTY2FsYXIoZSsxKTtpZihpPT09LTEpYnJlYWs7ZT10aGlzLmJ1ZmZlci5pbmRleE9mKGBcXG5gLGkpfXdoaWxlKGUhPT0tMSk7aWYoZT09PS0xKXtpZighdGhpcy5hdEVuZClyZXR1cm4gdGhpcy5zZXROZXh0KFxcXCJibG9jay1zY2FsYXJcXFwiKTtlPXRoaXMuYnVmZmVyLmxlbmd0aH19bGV0IHM9ZSsxO2ZvcihyPXRoaXMuYnVmZmVyW3NdO3I9PT1cXFwiIFxcXCI7KXI9dGhpcy5idWZmZXJbKytzXTtpZihyPT09XFxcIlxcdFxcXCIpe2Zvcig7cj09PVxcXCJcXHRcXFwifHxyPT09XFxcIiBcXFwifHxyPT09XFxcIlxcXFxyXFxcInx8cj09PWBcXG5gOylyPXRoaXMuYnVmZmVyWysrc107ZT1zLTF9ZWxzZSBpZighdGhpcy5ibG9ja1NjYWxhcktlZXApZG97bGV0IGk9ZS0xLG89dGhpcy5idWZmZXJbaV07bz09PVxcXCJcXFxcclxcXCImJihvPXRoaXMuYnVmZmVyWy0taV0pO2xldCBhPWk7Zm9yKDtvPT09XFxcIiBcXFwiOylvPXRoaXMuYnVmZmVyWy0taV07aWYobz09PWBcXG5gJiZpPj10aGlzLnBvcyYmaSsxK3Q+YSllPWk7ZWxzZSBicmVha313aGlsZSghMCk7cmV0dXJuIHlpZWxkIE1zLHlpZWxkKlModGhpcy5wdXNoVG9JbmRleChlKzEsITApKSx5aWVsZCpTKHRoaXMucGFyc2VMaW5lU3RhcnQoKSl9KnBhcnNlUGxhaW5TY2FsYXIoKXtsZXQgZT10aGlzLmZsb3dMZXZlbD4wLHQ9dGhpcy5wb3MtMSxyPXRoaXMucG9zLTEscztmb3IoO3M9dGhpcy5idWZmZXJbKytyXTspaWYocz09PVxcXCI6XFxcIil7bGV0IGk9dGhpcy5idWZmZXJbcisxXTtpZihYZShpKXx8ZSYmX3MuaGFzKGkpKWJyZWFrO3Q9cn1lbHNlIGlmKFhlKHMpKXtsZXQgaT10aGlzLmJ1ZmZlcltyKzFdO2lmKHM9PT1cXFwiXFxcXHJcXFwiJiYoaT09PWBcXG5gPyhyKz0xLHM9YFxcbmAsaT10aGlzLmJ1ZmZlcltyKzFdKTp0PXIpLGk9PT1cXFwiI1xcXCJ8fGUmJl9zLmhhcyhpKSlicmVhaztpZihzPT09YFxcbmApe2xldCBvPXRoaXMuY29udGludWVTY2FsYXIocisxKTtpZihvPT09LTEpYnJlYWs7cj1NYXRoLm1heChyLG8tMil9fWVsc2V7aWYoZSYmX3MuaGFzKHMpKWJyZWFrO3Q9cn1yZXR1cm4hcyYmIXRoaXMuYXRFbmQ/dGhpcy5zZXROZXh0KFxcXCJwbGFpbi1zY2FsYXJcXFwiKTooeWllbGQgTXMseWllbGQqUyh0aGlzLnB1c2hUb0luZGV4KHQrMSwhMCkpLGU/XFxcImZsb3dcXFwiOlxcXCJkb2NcXFwiKX0qcHVzaENvdW50KGUpe3JldHVybiBlPjA/KHlpZWxkIHRoaXMuYnVmZmVyLnN1YnN0cih0aGlzLnBvcyxlKSx0aGlzLnBvcys9ZSxlKTowfSpwdXNoVG9JbmRleChlLHQpe2xldCByPXRoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zLGUpO3JldHVybiByPyh5aWVsZCByLHRoaXMucG9zKz1yLmxlbmd0aCxyLmxlbmd0aCk6KHQmJih5aWVsZFxcXCJcXFwiKSwwKX0qcHVzaEluZGljYXRvcnMoKXtzd2l0Y2godGhpcy5jaGFyQXQoMCkpe2Nhc2VcXFwiIVxcXCI6cmV0dXJuKHlpZWxkKlModGhpcy5wdXNoVGFnKCkpKSsoeWllbGQqUyh0aGlzLnB1c2hTcGFjZXMoITApKSkrKHlpZWxkKlModGhpcy5wdXNoSW5kaWNhdG9ycygpKSk7Y2FzZVxcXCImXFxcIjpyZXR1cm4oeWllbGQqUyh0aGlzLnB1c2hVbnRpbChsbykpKSsoeWllbGQqUyh0aGlzLnB1c2hTcGFjZXMoITApKSkrKHlpZWxkKlModGhpcy5wdXNoSW5kaWNhdG9ycygpKSk7Y2FzZVxcXCItXFxcIjpjYXNlXFxcIj9cXFwiOmNhc2VcXFwiOlxcXCI6e2xldCBlPXRoaXMuZmxvd0xldmVsPjAsdD10aGlzLmNoYXJBdCgxKTtpZihYZSh0KXx8ZSYmX3MuaGFzKHQpKXJldHVybiBlP3RoaXMuZmxvd0tleSYmKHRoaXMuZmxvd0tleT0hMSk6dGhpcy5pbmRlbnROZXh0PXRoaXMuaW5kZW50VmFsdWUrMSwoeWllbGQqUyh0aGlzLnB1c2hDb3VudCgxKSkpKyh5aWVsZCpTKHRoaXMucHVzaFNwYWNlcyghMCkpKSsoeWllbGQqUyh0aGlzLnB1c2hJbmRpY2F0b3JzKCkpKX19cmV0dXJuIDB9KnB1c2hUYWcoKXtpZih0aGlzLmNoYXJBdCgxKT09PVxcXCI8XFxcIil7bGV0IGU9dGhpcy5wb3MrMix0PXRoaXMuYnVmZmVyW2VdO2Zvcig7IVhlKHQpJiZ0IT09XFxcIj5cXFwiOyl0PXRoaXMuYnVmZmVyWysrZV07cmV0dXJuIHlpZWxkKlModGhpcy5wdXNoVG9JbmRleCh0PT09XFxcIj5cXFwiP2UrMTplLCExKSl9ZWxzZXtsZXQgZT10aGlzLnBvcysxLHQ9dGhpcy5idWZmZXJbZV07Zm9yKDt0OylpZihGZi5oYXModCkpdD10aGlzLmJ1ZmZlclsrK2VdO2Vsc2UgaWYodD09PVxcXCIlXFxcIiYmT3UuaGFzKHRoaXMuYnVmZmVyW2UrMV0pJiZPdS5oYXModGhpcy5idWZmZXJbZSsyXSkpdD10aGlzLmJ1ZmZlcltlKz0zXTtlbHNlIGJyZWFrO3JldHVybiB5aWVsZCpTKHRoaXMucHVzaFRvSW5kZXgoZSwhMSkpfX0qcHVzaE5ld2xpbmUoKXtsZXQgZT10aGlzLmJ1ZmZlclt0aGlzLnBvc107cmV0dXJuIGU9PT1gXFxuYD95aWVsZCpTKHRoaXMucHVzaENvdW50KDEpKTplPT09XFxcIlxcXFxyXFxcIiYmdGhpcy5jaGFyQXQoMSk9PT1gXFxuYD95aWVsZCpTKHRoaXMucHVzaENvdW50KDIpKTowfSpwdXNoU3BhY2VzKGUpe2xldCB0PXRoaXMucG9zLTEscjtkbyByPXRoaXMuYnVmZmVyWysrdF07d2hpbGUocj09PVxcXCIgXFxcInx8ZSYmcj09PVxcXCJcXHRcXFwiKTtsZXQgcz10LXRoaXMucG9zO3JldHVybiBzPjAmJih5aWVsZCB0aGlzLmJ1ZmZlci5zdWJzdHIodGhpcy5wb3MscyksdGhpcy5wb3M9dCksc30qcHVzaFVudGlsKGUpe2xldCB0PXRoaXMucG9zLHI9dGhpcy5idWZmZXJbdF07Zm9yKDshZShyKTspcj10aGlzLmJ1ZmZlclsrK3RdO3JldHVybiB5aWVsZCpTKHRoaXMucHVzaFRvSW5kZXgodCwhMSkpfX07dmFyIE5yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lU3RhcnRzPVtdLHRoaXMuYWRkTmV3TGluZT1lPT50aGlzLmxpbmVTdGFydHMucHVzaChlKSx0aGlzLmxpbmVQb3M9ZT0+e2xldCB0PTAscj10aGlzLmxpbmVTdGFydHMubGVuZ3RoO2Zvcig7dDxyOyl7bGV0IGk9dCtyPj4xO3RoaXMubGluZVN0YXJ0c1tpXTxlP3Q9aSsxOnI9aX1pZih0aGlzLmxpbmVTdGFydHNbdF09PT1lKXJldHVybntsaW5lOnQrMSxjb2w6MX07aWYodD09PTApcmV0dXJue2xpbmU6MCxjb2w6ZX07bGV0IHM9dGhpcy5saW5lU3RhcnRzW3QtMV07cmV0dXJue2xpbmU6dCxjb2w6ZS1zKzF9fX19O2Z1bmN0aW9uIHp0KG4sZSl7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDsrK3QpaWYoblt0XS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBJdShuKXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOysrZSlzd2l0Y2gobltlXS50eXBlKXtjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZX1yZXR1cm4tMX1mdW5jdGlvbiBOdShuKXtzd2l0Y2gobj09bnVsbD92b2lkIDA6bi50eXBlKXtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEJzKG4pe3ZhciBlO3N3aXRjaChuLnR5cGUpe2Nhc2VcXFwiZG9jdW1lbnRcXFwiOnJldHVybiBuLnN0YXJ0O2Nhc2VcXFwiYmxvY2stbWFwXFxcIjp7bGV0IHQ9bi5pdGVtc1tuLml0ZW1zLmxlbmd0aC0xXTtyZXR1cm4oZT10LnNlcCkhPW51bGw/ZTp0LnN0YXJ0fWNhc2VcXFwiYmxvY2stc2VxXFxcIjpyZXR1cm4gbi5pdGVtc1tuLml0ZW1zLmxlbmd0aC0xXS5zdGFydDtkZWZhdWx0OnJldHVybltdfX1mdW5jdGlvbiBObihuKXt2YXIgdDtpZihuLmxlbmd0aD09PTApcmV0dXJuW107bGV0IGU9bi5sZW5ndGg7ZTpmb3IoOy0tZT49MDspc3dpdGNoKG5bZV0udHlwZSl7Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOmNhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjpjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6Y2FzZVxcXCJuZXdsaW5lXFxcIjpicmVhayBlfWZvcig7KCh0PW5bKytlXSk9PW51bGw/dm9pZCAwOnQudHlwZSk9PT1cXFwic3BhY2VcXFwiOyk7cmV0dXJuIG4uc3BsaWNlKGUsbi5sZW5ndGgpfWZ1bmN0aW9uIEx1KG4pe2lmKG4uc3RhcnQudHlwZT09PVxcXCJmbG93LXNlcS1zdGFydFxcXCIpZm9yKGxldCBlIG9mIG4uaXRlbXMpZS5zZXAmJiFlLnZhbHVlJiYhenQoZS5zdGFydCxcXFwiZXhwbGljaXQta2V5LWluZFxcXCIpJiYhenQoZS5zZXAsXFxcIm1hcC12YWx1ZS1pbmRcXFwiKSYmKGUua2V5JiYoZS52YWx1ZT1lLmtleSksZGVsZXRlIGUua2V5LE51KGUudmFsdWUpP2UudmFsdWUuZW5kP0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGUudmFsdWUuZW5kLGUuc2VwKTplLnZhbHVlLmVuZD1lLnNlcDpBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLnN0YXJ0LGUuc2VwKSxkZWxldGUgZS5zZXApfXZhciBBcj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmF0U2NhbGFyPSExLHRoaXMuaW5kZW50PTAsdGhpcy5vZmZzZXQ9MCx0aGlzLm9uS2V5TGluZT0hMSx0aGlzLnN0YWNrPVtdLHRoaXMuc291cmNlPVxcXCJcXFwiLHRoaXMudHlwZT1cXFwiXFxcIix0aGlzLmxleGVyPW5ldyBMcix0aGlzLm9uTmV3TGluZT1lfSpwYXJzZShlLHQ9ITEpe3RoaXMub25OZXdMaW5lJiZ0aGlzLm9mZnNldD09PTAmJnRoaXMub25OZXdMaW5lKDApO2ZvcihsZXQgciBvZiB0aGlzLmxleGVyLmxleChlLHQpKXlpZWxkKlModGhpcy5uZXh0KHIpKTt0fHwoeWllbGQqUyh0aGlzLmVuZCgpKSl9Km5leHQoZSl7aWYodGhpcy5zb3VyY2U9ZSx0aGlzLmF0U2NhbGFyKXt0aGlzLmF0U2NhbGFyPSExLHlpZWxkKlModGhpcy5zdGVwKCkpLHRoaXMub2Zmc2V0Kz1lLmxlbmd0aDtyZXR1cm59bGV0IHQ9eHUoZSk7aWYodClpZih0PT09XFxcInNjYWxhclxcXCIpdGhpcy5hdE5ld0xpbmU9ITEsdGhpcy5hdFNjYWxhcj0hMCx0aGlzLnR5cGU9XFxcInNjYWxhclxcXCI7ZWxzZXtzd2l0Y2godGhpcy50eXBlPXQseWllbGQqUyh0aGlzLnN0ZXAoKSksdCl7Y2FzZVxcXCJuZXdsaW5lXFxcIjp0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmluZGVudD0wLHRoaXMub25OZXdMaW5lJiZ0aGlzLm9uTmV3TGluZSh0aGlzLm9mZnNldCtlLmxlbmd0aCk7YnJlYWs7Y2FzZVxcXCJzcGFjZVxcXCI6dGhpcy5hdE5ld0xpbmUmJmVbMF09PT1cXFwiIFxcXCImJih0aGlzLmluZGVudCs9ZS5sZW5ndGgpO2JyZWFrO2Nhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6Y2FzZVxcXCJtYXAtdmFsdWUtaW5kXFxcIjpjYXNlXFxcInNlcS1pdGVtLWluZFxcXCI6dGhpcy5hdE5ld0xpbmUmJih0aGlzLmluZGVudCs9ZS5sZW5ndGgpO2JyZWFrO2Nhc2VcXFwiZG9jLW1vZGVcXFwiOmNhc2VcXFwiZmxvdy1lcnJvci1lbmRcXFwiOnJldHVybjtkZWZhdWx0OnRoaXMuYXROZXdMaW5lPSExfXRoaXMub2Zmc2V0Kz1lLmxlbmd0aH1lbHNle2xldCByPWBOb3QgYSBZQU1MIHRva2VuOiAke2V9YDt5aWVsZCpTKHRoaXMucG9wKHt0eXBlOlxcXCJlcnJvclxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LG1lc3NhZ2U6cixzb3VyY2U6ZX0pKSx0aGlzLm9mZnNldCs9ZS5sZW5ndGh9fSplbmQoKXtmb3IoO3RoaXMuc3RhY2subGVuZ3RoPjA7KXlpZWxkKlModGhpcy5wb3AoKSl9Z2V0IHNvdXJjZVRva2VuKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsc291cmNlOnRoaXMuc291cmNlfX0qc3RlcCgpe2xldCBlPXRoaXMucGVlaygxKTtpZih0aGlzLnR5cGU9PT1cXFwiZG9jLWVuZFxcXCImJighZXx8ZS50eXBlIT09XFxcImRvYy1lbmRcXFwiKSl7Zm9yKDt0aGlzLnN0YWNrLmxlbmd0aD4wOyl5aWVsZCpTKHRoaXMucG9wKCkpO3RoaXMuc3RhY2sucHVzaCh7dHlwZTpcXFwiZG9jLWVuZFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LHNvdXJjZTp0aGlzLnNvdXJjZX0pO3JldHVybn1pZighZSlyZXR1cm4geWllbGQqUyh0aGlzLnN0cmVhbSgpKTtzd2l0Y2goZS50eXBlKXtjYXNlXFxcImRvY3VtZW50XFxcIjpyZXR1cm4geWllbGQqUyh0aGlzLmRvY3VtZW50KGUpKTtjYXNlXFxcImFsaWFzXFxcIjpjYXNlXFxcInNjYWxhclxcXCI6Y2FzZVxcXCJzaW5nbGUtcXVvdGVkLXNjYWxhclxcXCI6Y2FzZVxcXCJkb3VibGUtcXVvdGVkLXNjYWxhclxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5zY2FsYXIoZSkpO2Nhc2VcXFwiYmxvY2stc2NhbGFyXFxcIjpyZXR1cm4geWllbGQqUyh0aGlzLmJsb2NrU2NhbGFyKGUpKTtjYXNlXFxcImJsb2NrLW1hcFxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5ibG9ja01hcChlKSk7Y2FzZVxcXCJibG9jay1zZXFcXFwiOnJldHVybiB5aWVsZCpTKHRoaXMuYmxvY2tTZXF1ZW5jZShlKSk7Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOnJldHVybiB5aWVsZCpTKHRoaXMuZmxvd0NvbGxlY3Rpb24oZSkpO2Nhc2VcXFwiZG9jLWVuZFxcXCI6cmV0dXJuIHlpZWxkKlModGhpcy5kb2N1bWVudEVuZChlKSl9eWllbGQqUyh0aGlzLnBvcCgpKX1wZWVrKGUpe3JldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWVdfSpwb3AoZSl7bGV0IHQ9ZSE9bnVsbD9lOnRoaXMuc3RhY2sucG9wKCk7aWYoIXQpeWllbGR7dHlwZTpcXFwiZXJyb3JcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxzb3VyY2U6XFxcIlxcXCIsbWVzc2FnZTpcXFwiVHJpZWQgdG8gcG9wIGFuIGVtcHR5IHN0YWNrXFxcIn07ZWxzZSBpZih0aGlzLnN0YWNrLmxlbmd0aD09PTApeWllbGQgdDtlbHNle2xldCByPXRoaXMucGVlaygxKTtzd2l0Y2godC50eXBlPT09XFxcImJsb2NrLXNjYWxhclxcXCI/dC5pbmRlbnQ9XFxcImluZGVudFxcXCJpbiByP3IuaW5kZW50OjA6dC50eXBlPT09XFxcImZsb3ctY29sbGVjdGlvblxcXCImJnIudHlwZT09PVxcXCJkb2N1bWVudFxcXCImJih0LmluZGVudD0wKSx0LnR5cGU9PT1cXFwiZmxvdy1jb2xsZWN0aW9uXFxcIiYmTHUodCksci50eXBlKXtjYXNlXFxcImRvY3VtZW50XFxcIjpyLnZhbHVlPXQ7YnJlYWs7Y2FzZVxcXCJibG9jay1zY2FsYXJcXFwiOnIucHJvcHMucHVzaCh0KTticmVhaztjYXNlXFxcImJsb2NrLW1hcFxcXCI6e2xldCBzPXIuaXRlbXNbci5pdGVtcy5sZW5ndGgtMV07aWYocy52YWx1ZSl7ci5pdGVtcy5wdXNoKHtzdGFydDpbXSxrZXk6dCxzZXA6W119KSx0aGlzLm9uS2V5TGluZT0hMDtyZXR1cm59ZWxzZSBpZihzLnNlcClzLnZhbHVlPXQ7ZWxzZXtPYmplY3QuYXNzaWduKHMse2tleTp0LHNlcDpbXX0pLHRoaXMub25LZXlMaW5lPSFzLmV4cGxpY2l0S2V5O3JldHVybn1icmVha31jYXNlXFxcImJsb2NrLXNlcVxcXCI6e2xldCBzPXIuaXRlbXNbci5pdGVtcy5sZW5ndGgtMV07cy52YWx1ZT9yLml0ZW1zLnB1c2goe3N0YXJ0OltdLHZhbHVlOnR9KTpzLnZhbHVlPXQ7YnJlYWt9Y2FzZVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiOntsZXQgcz1yLml0ZW1zW3IuaXRlbXMubGVuZ3RoLTFdOyFzfHxzLnZhbHVlP3IuaXRlbXMucHVzaCh7c3RhcnQ6W10sa2V5OnQsc2VwOltdfSk6cy5zZXA/cy52YWx1ZT10Ok9iamVjdC5hc3NpZ24ocyx7a2V5OnQsc2VwOltdfSk7cmV0dXJufWRlZmF1bHQ6eWllbGQqUyh0aGlzLnBvcCgpKSx5aWVsZCpTKHRoaXMucG9wKHQpKX1pZigoci50eXBlPT09XFxcImRvY3VtZW50XFxcInx8ci50eXBlPT09XFxcImJsb2NrLW1hcFxcXCJ8fHIudHlwZT09PVxcXCJibG9jay1zZXFcXFwiKSYmKHQudHlwZT09PVxcXCJibG9jay1tYXBcXFwifHx0LnR5cGU9PT1cXFwiYmxvY2stc2VxXFxcIikpe2xldCBzPXQuaXRlbXNbdC5pdGVtcy5sZW5ndGgtMV07cyYmIXMuc2VwJiYhcy52YWx1ZSYmcy5zdGFydC5sZW5ndGg+MCYmSXUocy5zdGFydCk9PT0tMSYmKHQuaW5kZW50PT09MHx8cy5zdGFydC5ldmVyeShpPT5pLnR5cGUhPT1cXFwiY29tbWVudFxcXCJ8fGkuaW5kZW50PHQuaW5kZW50KSkmJihyLnR5cGU9PT1cXFwiZG9jdW1lbnRcXFwiP3IuZW5kPXMuc3RhcnQ6ci5pdGVtcy5wdXNoKHtzdGFydDpzLnN0YXJ0fSksdC5pdGVtcy5zcGxpY2UoLTEsMSkpfX19KnN0cmVhbSgpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcXFwiZGlyZWN0aXZlLWxpbmVcXFwiOnlpZWxke3R5cGU6XFxcImRpcmVjdGl2ZVxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LHNvdXJjZTp0aGlzLnNvdXJjZX07cmV0dXJuO2Nhc2VcXFwiYnl0ZS1vcmRlci1tYXJrXFxcIjpjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmNhc2VcXFwibmV3bGluZVxcXCI6eWllbGQgdGhpcy5zb3VyY2VUb2tlbjtyZXR1cm47Y2FzZVxcXCJkb2MtbW9kZVxcXCI6Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOntsZXQgZT17dHlwZTpcXFwiZG9jdW1lbnRcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxzdGFydDpbXX07dGhpcy50eXBlPT09XFxcImRvYy1zdGFydFxcXCImJmUuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKSx0aGlzLnN0YWNrLnB1c2goZSk7cmV0dXJufX15aWVsZHt0eXBlOlxcXCJlcnJvclxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LG1lc3NhZ2U6YFVuZXhwZWN0ZWQgJHt0aGlzLnR5cGV9IHRva2VuIGluIFlBTUwgc3RyZWFtYCxzb3VyY2U6dGhpcy5zb3VyY2V9fSpkb2N1bWVudChlKXtpZihlLnZhbHVlKXJldHVybiB5aWVsZCpTKHRoaXMubGluZUVuZChlKSk7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOntJdShlLnN0YXJ0KSE9PS0xPyh5aWVsZCpTKHRoaXMucG9wKCkpLHlpZWxkKlModGhpcy5zdGVwKCkpKTplLnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJufWNhc2VcXFwiYW5jaG9yXFxcIjpjYXNlXFxcInRhZ1xcXCI6Y2FzZVxcXCJzcGFjZVxcXCI6Y2FzZVxcXCJjb21tZW50XFxcIjpjYXNlXFxcIm5ld2xpbmVcXFwiOmUuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm59bGV0IHQ9dGhpcy5zdGFydEJsb2NrVmFsdWUoZSk7dD90aGlzLnN0YWNrLnB1c2godCk6eWllbGR7dHlwZTpcXFwiZXJyb3JcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxtZXNzYWdlOmBVbmV4cGVjdGVkICR7dGhpcy50eXBlfSB0b2tlbiBpbiBZQU1MIGRvY3VtZW50YCxzb3VyY2U6dGhpcy5zb3VyY2V9fSpzY2FsYXIoZSl7aWYodGhpcy50eXBlPT09XFxcIm1hcC12YWx1ZS1pbmRcXFwiKXtsZXQgdD1Ccyh0aGlzLnBlZWsoMikpLHI9Tm4odCkscztlLmVuZD8ocz1lLmVuZCxzLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZGVsZXRlIGUuZW5kKTpzPVt0aGlzLnNvdXJjZVRva2VuXTtsZXQgaT17dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6ZS5vZmZzZXQsaW5kZW50OmUuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6cixrZXk6ZSxzZXA6c31dfTt0aGlzLm9uS2V5TGluZT0hMCx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdPWl9ZWxzZSB5aWVsZCpTKHRoaXMubGluZUVuZChlKSl9KmJsb2NrU2NhbGFyKGUpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6Y2FzZVxcXCJuZXdsaW5lXFxcIjplLnByb3BzLnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwic2NhbGFyXFxcIjppZihlLnNvdXJjZT10aGlzLnNvdXJjZSx0aGlzLmF0TmV3TGluZT0hMCx0aGlzLmluZGVudD0wLHRoaXMub25OZXdMaW5lKXtsZXQgdD10aGlzLnNvdXJjZS5pbmRleE9mKGBcXG5gKSsxO2Zvcig7dCE9PTA7KXRoaXMub25OZXdMaW5lKHRoaXMub2Zmc2V0K3QpLHQ9dGhpcy5zb3VyY2UuaW5kZXhPZihgXFxuYCx0KSsxfXlpZWxkKlModGhpcy5wb3AoKSk7YnJlYWs7ZGVmYXVsdDp5aWVsZCpTKHRoaXMucG9wKCkpLHlpZWxkKlModGhpcy5zdGVwKCkpfX0qYmxvY2tNYXAoZSl7dmFyIHI7bGV0IHQ9ZS5pdGVtc1tlLml0ZW1zLmxlbmd0aC0xXTtzd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcIm5ld2xpbmVcXFwiOmlmKHRoaXMub25LZXlMaW5lPSExLHQudmFsdWUpe2xldCBzPVxcXCJlbmRcXFwiaW4gdC52YWx1ZT90LnZhbHVlLmVuZDp2b2lkIDAsaT1BcnJheS5pc0FycmF5KHMpP3Nbcy5sZW5ndGgtMV06dm9pZCAwOyhpPT1udWxsP3ZvaWQgMDppLnR5cGUpPT09XFxcImNvbW1lbnRcXFwiP3M9PW51bGx8fHMucHVzaCh0aGlzLnNvdXJjZVRva2VuKTplLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pfWVsc2UgdC5zZXA/dC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTp0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwic3BhY2VcXFwiOmNhc2VcXFwiY29tbWVudFxcXCI6aWYodC52YWx1ZSllLml0ZW1zLnB1c2goe3N0YXJ0Olt0aGlzLnNvdXJjZVRva2VuXX0pO2Vsc2UgaWYodC5zZXApdC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtlbHNle2lmKHRoaXMuYXRJbmRlbnRlZENvbW1lbnQodC5zdGFydCxlLmluZGVudCkpe2xldCBzPWUuaXRlbXNbZS5pdGVtcy5sZW5ndGgtMl0saT0ocj1zPT1udWxsP3ZvaWQgMDpzLnZhbHVlKT09bnVsbD92b2lkIDA6ci5lbmQ7aWYoQXJyYXkuaXNBcnJheShpKSl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSx0LnN0YXJ0KSxpLnB1c2godGhpcy5zb3VyY2VUb2tlbiksZS5pdGVtcy5wb3AoKTtyZXR1cm59fXQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKX1yZXR1cm59aWYodGhpcy5pbmRlbnQ+PWUuaW5kZW50KXtsZXQgcz0hdGhpcy5vbktleUxpbmUmJnRoaXMuaW5kZW50PT09ZS5pbmRlbnQsaT1zJiYodC5zZXB8fHQuZXhwbGljaXRLZXkpJiZ0aGlzLnR5cGUhPT1cXFwic2VxLWl0ZW0taW5kXFxcIixvPVtdO2lmKGkmJnQuc2VwJiYhdC52YWx1ZSl7bGV0IGE9W107Zm9yKGxldCB1PTA7dTx0LnNlcC5sZW5ndGg7Kyt1KXtsZXQgbD10LnNlcFt1XTtzd2l0Y2gobC50eXBlKXtjYXNlXFxcIm5ld2xpbmVcXFwiOmEucHVzaCh1KTticmVhaztjYXNlXFxcInNwYWNlXFxcIjpicmVhaztjYXNlXFxcImNvbW1lbnRcXFwiOmwuaW5kZW50PmUuaW5kZW50JiYoYS5sZW5ndGg9MCk7YnJlYWs7ZGVmYXVsdDphLmxlbmd0aD0wfX1hLmxlbmd0aD49MiYmKG89dC5zZXAuc3BsaWNlKGFbMV0pKX1zd2l0Y2godGhpcy50eXBlKXtjYXNlXFxcImFuY2hvclxcXCI6Y2FzZVxcXCJ0YWdcXFwiOml8fHQudmFsdWU/KG8ucHVzaCh0aGlzLnNvdXJjZVRva2VuKSxlLml0ZW1zLnB1c2goe3N0YXJ0Om99KSx0aGlzLm9uS2V5TGluZT0hMCk6dC5zZXA/dC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTp0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwiZXhwbGljaXQta2V5LWluZFxcXCI6IXQuc2VwJiYhdC5leHBsaWNpdEtleT8odC5zdGFydC5wdXNoKHRoaXMuc291cmNlVG9rZW4pLHQuZXhwbGljaXRLZXk9ITApOml8fHQudmFsdWU/KG8ucHVzaCh0aGlzLnNvdXJjZVRva2VuKSxlLml0ZW1zLnB1c2goe3N0YXJ0Om8sZXhwbGljaXRLZXk6ITB9KSk6dGhpcy5zdGFjay5wdXNoKHt0eXBlOlxcXCJibG9jay1tYXBcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl0sZXhwbGljaXRLZXk6ITB9XX0pLHRoaXMub25LZXlMaW5lPSEwO3JldHVybjtjYXNlXFxcIm1hcC12YWx1ZS1pbmRcXFwiOmlmKHQuZXhwbGljaXRLZXkpaWYodC5zZXApaWYodC52YWx1ZSllLml0ZW1zLnB1c2goe3N0YXJ0OltdLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19KTtlbHNlIGlmKHp0KHQuc2VwLFxcXCJtYXAtdmFsdWUtaW5kXFxcIikpdGhpcy5zdGFjay5wdXNoKHt0eXBlOlxcXCJibG9jay1tYXBcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDpvLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19XX0pO2Vsc2UgaWYoTnUodC5rZXkpJiYhenQodC5zZXAsXFxcIm5ld2xpbmVcXFwiKSl7bGV0IGE9Tm4odC5zdGFydCksdT10LmtleSxsPXQuc2VwO2wucHVzaCh0aGlzLnNvdXJjZVRva2VuKSxkZWxldGUgdC5rZXksZGVsZXRlIHQuc2VwLHRoaXMuc3RhY2sucHVzaCh7dHlwZTpcXFwiYmxvY2stbWFwXFxcIixvZmZzZXQ6dGhpcy5vZmZzZXQsaW5kZW50OnRoaXMuaW5kZW50LGl0ZW1zOlt7c3RhcnQ6YSxrZXk6dSxzZXA6bH1dfSl9ZWxzZSBvLmxlbmd0aD4wP3Quc2VwPXQuc2VwLmNvbmNhdChvLHRoaXMuc291cmNlVG9rZW4pOnQuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik7ZWxzZSBpZih6dCh0LnN0YXJ0LFxcXCJuZXdsaW5lXFxcIikpT2JqZWN0LmFzc2lnbih0LHtrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk7ZWxzZXtsZXQgYT1Obih0LnN0YXJ0KTt0aGlzLnN0YWNrLnB1c2goe3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0OmEsa2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX1dfSl9ZWxzZSB0LnNlcD90LnZhbHVlfHxpP2UuaXRlbXMucHVzaCh7c3RhcnQ6byxrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk6enQodC5zZXAsXFxcIm1hcC12YWx1ZS1pbmRcXFwiKT90aGlzLnN0YWNrLnB1c2goe3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0OltdLGtleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19XX0pOnQuc2VwLnB1c2godGhpcy5zb3VyY2VUb2tlbik6T2JqZWN0LmFzc2lnbih0LHtrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk7dGhpcy5vbktleUxpbmU9ITA7cmV0dXJuO2Nhc2VcXFwiYWxpYXNcXFwiOmNhc2VcXFwic2NhbGFyXFxcIjpjYXNlXFxcInNpbmdsZS1xdW90ZWQtc2NhbGFyXFxcIjpjYXNlXFxcImRvdWJsZS1xdW90ZWQtc2NhbGFyXFxcIjp7bGV0IGE9dGhpcy5mbG93U2NhbGFyKHRoaXMudHlwZSk7aXx8dC52YWx1ZT8oZS5pdGVtcy5wdXNoKHtzdGFydDpvLGtleTphLHNlcDpbXX0pLHRoaXMub25LZXlMaW5lPSEwKTp0LnNlcD90aGlzLnN0YWNrLnB1c2goYSk6KE9iamVjdC5hc3NpZ24odCx7a2V5OmEsc2VwOltdfSksdGhpcy5vbktleUxpbmU9ITApO3JldHVybn1kZWZhdWx0OntsZXQgYT10aGlzLnN0YXJ0QmxvY2tWYWx1ZShlKTtpZihhKXtzJiZhLnR5cGUhPT1cXFwiYmxvY2stc2VxXFxcIiYmZS5pdGVtcy5wdXNoKHtzdGFydDpvfSksdGhpcy5zdGFjay5wdXNoKGEpO3JldHVybn19fX15aWVsZCpTKHRoaXMucG9wKCkpLHlpZWxkKlModGhpcy5zdGVwKCkpfSpibG9ja1NlcXVlbmNlKGUpe3ZhciByO2xldCB0PWUuaXRlbXNbZS5pdGVtcy5sZW5ndGgtMV07c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVxcXCJuZXdsaW5lXFxcIjppZih0LnZhbHVlKXtsZXQgcz1cXFwiZW5kXFxcImluIHQudmFsdWU/dC52YWx1ZS5lbmQ6dm9pZCAwLGk9QXJyYXkuaXNBcnJheShzKT9zW3MubGVuZ3RoLTFdOnZvaWQgMDsoaT09bnVsbD92b2lkIDA6aS50eXBlKT09PVxcXCJjb21tZW50XFxcIj9zPT1udWxsfHxzLnB1c2godGhpcy5zb3VyY2VUb2tlbik6ZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KX1lbHNlIHQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm47Y2FzZVxcXCJzcGFjZVxcXCI6Y2FzZVxcXCJjb21tZW50XFxcIjppZih0LnZhbHVlKWUuaXRlbXMucHVzaCh7c3RhcnQ6W3RoaXMuc291cmNlVG9rZW5dfSk7ZWxzZXtpZih0aGlzLmF0SW5kZW50ZWRDb21tZW50KHQuc3RhcnQsZS5pbmRlbnQpKXtsZXQgcz1lLml0ZW1zW2UuaXRlbXMubGVuZ3RoLTJdLGk9KHI9cz09bnVsbD92b2lkIDA6cy52YWx1ZSk9PW51bGw/dm9pZCAwOnIuZW5kO2lmKEFycmF5LmlzQXJyYXkoaSkpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGksdC5zdGFydCksaS5wdXNoKHRoaXMuc291cmNlVG9rZW4pLGUuaXRlbXMucG9wKCk7cmV0dXJufX10LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbil9cmV0dXJuO2Nhc2VcXFwiYW5jaG9yXFxcIjpjYXNlXFxcInRhZ1xcXCI6aWYodC52YWx1ZXx8dGhpcy5pbmRlbnQ8PWUuaW5kZW50KWJyZWFrO3Quc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm47Y2FzZVxcXCJzZXEtaXRlbS1pbmRcXFwiOmlmKHRoaXMuaW5kZW50IT09ZS5pbmRlbnQpYnJlYWs7dC52YWx1ZXx8enQodC5zdGFydCxcXFwic2VxLWl0ZW0taW5kXFxcIik/ZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KTp0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJufWlmKHRoaXMuaW5kZW50PmUuaW5kZW50KXtsZXQgcz10aGlzLnN0YXJ0QmxvY2tWYWx1ZShlKTtpZihzKXt0aGlzLnN0YWNrLnB1c2gocyk7cmV0dXJufX15aWVsZCpTKHRoaXMucG9wKCkpLHlpZWxkKlModGhpcy5zdGVwKCkpfSpmbG93Q29sbGVjdGlvbihlKXtsZXQgdD1lLml0ZW1zW2UuaXRlbXMubGVuZ3RoLTFdO2lmKHRoaXMudHlwZT09PVxcXCJmbG93LWVycm9yLWVuZFxcXCIpe2xldCByO2RvIHlpZWxkKlModGhpcy5wb3AoKSkscj10aGlzLnBlZWsoMSk7d2hpbGUociYmci50eXBlPT09XFxcImZsb3ctY29sbGVjdGlvblxcXCIpfWVsc2UgaWYoZS5lbmQubGVuZ3RoPT09MCl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVxcXCJjb21tYVxcXCI6Y2FzZVxcXCJleHBsaWNpdC1rZXktaW5kXFxcIjohdHx8dC5zZXA/ZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KTp0LnN0YXJ0LnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJuO2Nhc2VcXFwibWFwLXZhbHVlLWluZFxcXCI6IXR8fHQudmFsdWU/ZS5pdGVtcy5wdXNoKHtzdGFydDpbXSxrZXk6bnVsbCxzZXA6W3RoaXMuc291cmNlVG9rZW5dfSk6dC5zZXA/dC5zZXAucHVzaCh0aGlzLnNvdXJjZVRva2VuKTpPYmplY3QuYXNzaWduKHQse2tleTpudWxsLHNlcDpbdGhpcy5zb3VyY2VUb2tlbl19KTtyZXR1cm47Y2FzZVxcXCJzcGFjZVxcXCI6Y2FzZVxcXCJjb21tZW50XFxcIjpjYXNlXFxcIm5ld2xpbmVcXFwiOmNhc2VcXFwiYW5jaG9yXFxcIjpjYXNlXFxcInRhZ1xcXCI6IXR8fHQudmFsdWU/ZS5pdGVtcy5wdXNoKHtzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19KTp0LnNlcD90LnNlcC5wdXNoKHRoaXMuc291cmNlVG9rZW4pOnQuc3RhcnQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTtyZXR1cm47Y2FzZVxcXCJhbGlhc1xcXCI6Y2FzZVxcXCJzY2FsYXJcXFwiOmNhc2VcXFwic2luZ2xlLXF1b3RlZC1zY2FsYXJcXFwiOmNhc2VcXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiOntsZXQgcz10aGlzLmZsb3dTY2FsYXIodGhpcy50eXBlKTshdHx8dC52YWx1ZT9lLml0ZW1zLnB1c2goe3N0YXJ0OltdLGtleTpzLHNlcDpbXX0pOnQuc2VwP3RoaXMuc3RhY2sucHVzaChzKTpPYmplY3QuYXNzaWduKHQse2tleTpzLHNlcDpbXX0pO3JldHVybn1jYXNlXFxcImZsb3ctbWFwLWVuZFxcXCI6Y2FzZVxcXCJmbG93LXNlcS1lbmRcXFwiOmUuZW5kLnB1c2godGhpcy5zb3VyY2VUb2tlbik7cmV0dXJufWxldCByPXRoaXMuc3RhcnRCbG9ja1ZhbHVlKGUpO3I/dGhpcy5zdGFjay5wdXNoKHIpOih5aWVsZCpTKHRoaXMucG9wKCkpLHlpZWxkKlModGhpcy5zdGVwKCkpKX1lbHNle2xldCByPXRoaXMucGVlaygyKTtpZihyLnR5cGU9PT1cXFwiYmxvY2stbWFwXFxcIiYmKHRoaXMudHlwZT09PVxcXCJtYXAtdmFsdWUtaW5kXFxcIiYmci5pbmRlbnQ9PT1lLmluZGVudHx8dGhpcy50eXBlPT09XFxcIm5ld2xpbmVcXFwiJiYhci5pdGVtc1tyLml0ZW1zLmxlbmd0aC0xXS5zZXApKXlpZWxkKlModGhpcy5wb3AoKSkseWllbGQqUyh0aGlzLnN0ZXAoKSk7ZWxzZSBpZih0aGlzLnR5cGU9PT1cXFwibWFwLXZhbHVlLWluZFxcXCImJnIudHlwZSE9PVxcXCJmbG93LWNvbGxlY3Rpb25cXFwiKXtsZXQgcz1CcyhyKSxpPU5uKHMpO0x1KGUpO2xldCBvPWUuZW5kLnNwbGljZSgxLGUuZW5kLmxlbmd0aCk7by5wdXNoKHRoaXMuc291cmNlVG9rZW4pO2xldCBhPXt0eXBlOlxcXCJibG9jay1tYXBcXFwiLG9mZnNldDplLm9mZnNldCxpbmRlbnQ6ZS5pbmRlbnQsaXRlbXM6W3tzdGFydDppLGtleTplLHNlcDpvfV19O3RoaXMub25LZXlMaW5lPSEwLHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV09YX1lbHNlIHlpZWxkKlModGhpcy5saW5lRW5kKGUpKX19Zmxvd1NjYWxhcihlKXtpZih0aGlzLm9uTmV3TGluZSl7bGV0IHQ9dGhpcy5zb3VyY2UuaW5kZXhPZihgXFxuYCkrMTtmb3IoO3QhPT0wOyl0aGlzLm9uTmV3TGluZSh0aGlzLm9mZnNldCt0KSx0PXRoaXMuc291cmNlLmluZGV4T2YoYFxcbmAsdCkrMX1yZXR1cm57dHlwZTplLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsc291cmNlOnRoaXMuc291cmNlfX1zdGFydEJsb2NrVmFsdWUoZSl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVxcXCJhbGlhc1xcXCI6Y2FzZVxcXCJzY2FsYXJcXFwiOmNhc2VcXFwic2luZ2xlLXF1b3RlZC1zY2FsYXJcXFwiOmNhc2VcXFwiZG91YmxlLXF1b3RlZC1zY2FsYXJcXFwiOnJldHVybiB0aGlzLmZsb3dTY2FsYXIodGhpcy50eXBlKTtjYXNlXFxcImJsb2NrLXNjYWxhci1oZWFkZXJcXFwiOnJldHVybnt0eXBlOlxcXCJibG9jay1zY2FsYXJcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQscHJvcHM6W3RoaXMuc291cmNlVG9rZW5dLHNvdXJjZTpcXFwiXFxcIn07Y2FzZVxcXCJmbG93LW1hcC1zdGFydFxcXCI6Y2FzZVxcXCJmbG93LXNlcS1zdGFydFxcXCI6cmV0dXJue3R5cGU6XFxcImZsb3ctY29sbGVjdGlvblxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxzdGFydDp0aGlzLnNvdXJjZVRva2VuLGl0ZW1zOltdLGVuZDpbXX07Y2FzZVxcXCJzZXEtaXRlbS1pbmRcXFwiOnJldHVybnt0eXBlOlxcXCJibG9jay1zZXFcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDpbdGhpcy5zb3VyY2VUb2tlbl19XX07Y2FzZVxcXCJleHBsaWNpdC1rZXktaW5kXFxcIjp7dGhpcy5vbktleUxpbmU9ITA7bGV0IHQ9QnMoZSkscj1Obih0KTtyZXR1cm4gci5wdXNoKHRoaXMuc291cmNlVG9rZW4pLHt0eXBlOlxcXCJibG9jay1tYXBcXFwiLG9mZnNldDp0aGlzLm9mZnNldCxpbmRlbnQ6dGhpcy5pbmRlbnQsaXRlbXM6W3tzdGFydDpyLGV4cGxpY2l0S2V5OiEwfV19fWNhc2VcXFwibWFwLXZhbHVlLWluZFxcXCI6e3RoaXMub25LZXlMaW5lPSEwO2xldCB0PUJzKGUpLHI9Tm4odCk7cmV0dXJue3R5cGU6XFxcImJsb2NrLW1hcFxcXCIsb2Zmc2V0OnRoaXMub2Zmc2V0LGluZGVudDp0aGlzLmluZGVudCxpdGVtczpbe3N0YXJ0OnIsa2V5Om51bGwsc2VwOlt0aGlzLnNvdXJjZVRva2VuXX1dfX19cmV0dXJuIG51bGx9YXRJbmRlbnRlZENvbW1lbnQoZSx0KXtyZXR1cm4gdGhpcy50eXBlIT09XFxcImNvbW1lbnRcXFwifHx0aGlzLmluZGVudDw9dD8hMTplLmV2ZXJ5KHI9PnIudHlwZT09PVxcXCJuZXdsaW5lXFxcInx8ci50eXBlPT09XFxcInNwYWNlXFxcIil9KmRvY3VtZW50RW5kKGUpe3RoaXMudHlwZSE9PVxcXCJkb2MtbW9kZVxcXCImJihlLmVuZD9lLmVuZC5wdXNoKHRoaXMuc291cmNlVG9rZW4pOmUuZW5kPVt0aGlzLnNvdXJjZVRva2VuXSx0aGlzLnR5cGU9PT1cXFwibmV3bGluZVxcXCImJih5aWVsZCpTKHRoaXMucG9wKCkpKSl9KmxpbmVFbmQoZSl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVxcXCJjb21tYVxcXCI6Y2FzZVxcXCJkb2Mtc3RhcnRcXFwiOmNhc2VcXFwiZG9jLWVuZFxcXCI6Y2FzZVxcXCJmbG93LXNlcS1lbmRcXFwiOmNhc2VcXFwiZmxvdy1tYXAtZW5kXFxcIjpjYXNlXFxcIm1hcC12YWx1ZS1pbmRcXFwiOnlpZWxkKlModGhpcy5wb3AoKSkseWllbGQqUyh0aGlzLnN0ZXAoKSk7YnJlYWs7Y2FzZVxcXCJuZXdsaW5lXFxcIjp0aGlzLm9uS2V5TGluZT0hMTtjYXNlXFxcInNwYWNlXFxcIjpjYXNlXFxcImNvbW1lbnRcXFwiOmRlZmF1bHQ6ZS5lbmQ/ZS5lbmQucHVzaCh0aGlzLnNvdXJjZVRva2VuKTplLmVuZD1bdGhpcy5zb3VyY2VUb2tlbl0sdGhpcy50eXBlPT09XFxcIm5ld2xpbmVcXFwiJiYoeWllbGQqUyh0aGlzLnBvcCgpKSl9fX07ZnVuY3Rpb24gd2Yobil7bGV0IGU9bi5wcmV0dHlFcnJvcnMhPT0hMTtyZXR1cm57bGluZUNvdW50ZXI6bi5saW5lQ291bnRlcnx8ZSYmbmV3IE5yfHxudWxsLHByZXR0eUVycm9yczplfX1mdW5jdGlvbiBBdShuLGU9e30pe2xldHtsaW5lQ291bnRlcjp0LHByZXR0eUVycm9yczpyfT13ZihlKSxzPW5ldyBBcih0PT1udWxsP3ZvaWQgMDp0LmFkZE5ld0xpbmUpLGk9bmV3IElyKGUpLG89bnVsbDtmb3IobGV0IGEgb2YgaS5jb21wb3NlKHMucGFyc2UobiksITAsbi5sZW5ndGgpKWlmKCFvKW89YTtlbHNlIGlmKG8ub3B0aW9ucy5sb2dMZXZlbCE9PVxcXCJzaWxlbnRcXFwiKXtvLmVycm9ycy5wdXNoKG5ldyBRZShhLnJhbmdlLnNsaWNlKDAsMiksXFxcIk1VTFRJUExFX0RPQ1NcXFwiLFxcXCJTb3VyY2UgY29udGFpbnMgbXVsdGlwbGUgZG9jdW1lbnRzOyBwbGVhc2UgdXNlIFlBTUwucGFyc2VBbGxEb2N1bWVudHMoKVxcXCIpKTticmVha31yZXR1cm4gciYmdCYmKG8uZXJyb3JzLmZvckVhY2goWmkobix0KSksby53YXJuaW5ncy5mb3JFYWNoKFppKG4sdCkpKSxvfWZ1bmN0aW9uIGNvKG4sZSx0KXtsZXQgcjt0eXBlb2YgZT09XFxcImZ1bmN0aW9uXFxcIj9yPWU6dD09PXZvaWQgMCYmZSYmdHlwZW9mIGU9PVxcXCJvYmplY3RcXFwiJiYodD1lKTtsZXQgcz1BdShuLHQpO2lmKCFzKXJldHVybiBudWxsO2lmKHMud2FybmluZ3MuZm9yRWFjaChpPT5tcyhzLm9wdGlvbnMubG9nTGV2ZWwsaSkpLHMuZXJyb3JzLmxlbmd0aD4wKXtpZihzLm9wdGlvbnMubG9nTGV2ZWwhPT1cXFwic2lsZW50XFxcIil0aHJvdyBzLmVycm9yc1swXTtzLmVycm9ycz1bXX1yZXR1cm4gcy50b0pTKE9iamVjdC5hc3NpZ24oe3Jldml2ZXI6cn0sdCkpfXZhciBqcz1WcihSdSgpKTt2YXIgRj1WcihucygpKTt2YXIgZXQ7KE49PntOLkRFRkFVTFRfVE9fU1RSSU5HPXtudWxsUmVwcmVzZW50YXRpb246XFxcIi1cXFwiLGRhdGVGb3JtYXQ6XFxcIk1NTU0gZGQsIHl5eXlcXFwiLGRhdGVUaW1lRm9ybWF0OlxcXCJoOm1tIGEgLSBNTU1NIGRkLCB5eXl5XFxcIn07ZnVuY3Rpb24gZSh5LHc9Ti5ERUZBVUxUX1RPX1NUUklORyx2PSExKXtsZXQgeD10KHkpO2lmKCF4KXJldHVybiB3Lm51bGxSZXByZXNlbnRhdGlvbjtzd2l0Y2goeC50eXBlKXtjYXNlXFxcIm51bGxcXFwiOnJldHVybiB3Lm51bGxSZXByZXNlbnRhdGlvbjtjYXNlXFxcInN0cmluZ1xcXCI6cmV0dXJuIHgudmFsdWU7Y2FzZVxcXCJudW1iZXJcXFwiOmNhc2VcXFwiYm9vbGVhblxcXCI6cmV0dXJuXFxcIlxcXCIreC52YWx1ZTtjYXNlXFxcImxpbmtcXFwiOnJldHVybiB4LnZhbHVlLm1hcmtkb3duKCk7Y2FzZVxcXCJmdW5jdGlvblxcXCI6cmV0dXJuXFxcIjxmdW5jdGlvbj5cXFwiO2Nhc2VcXFwiYXJyYXlcXFwiOmxldCBDPVxcXCJcXFwiO3JldHVybiB2JiYoQys9XFxcIltcXFwiKSxDKz14LnZhbHVlLm1hcChWPT5lKFYsdywhMCkpLmpvaW4oXFxcIiwgXFxcIiksdiYmKEMrPVxcXCJdXFxcIiksQztjYXNlXFxcIm9iamVjdFxcXCI6cmV0dXJuXFxcInsgXFxcIitPYmplY3QuZW50cmllcyh4LnZhbHVlKS5tYXAoVj0+VlswXStcXFwiOiBcXFwiK2UoVlsxXSx3LCEwKSkuam9pbihcXFwiLCBcXFwiKStcXFwiIH1cXFwiO2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJuIGphKHgudmFsdWUsdy5kYXRlRm9ybWF0LHcuZGF0ZVRpbWVGb3JtYXQpO2Nhc2VcXFwiZHVyYXRpb25cXFwiOnJldHVybiBxYSh4LnZhbHVlKX19Ti50b1N0cmluZz1lO2Z1bmN0aW9uIHQoeSl7cmV0dXJuIGgoeSk/e3R5cGU6XFxcIm51bGxcXFwiLHZhbHVlOnl9OmYoeSk/e3R5cGU6XFxcIm51bWJlclxcXCIsdmFsdWU6eX06bCh5KT97dHlwZTpcXFwic3RyaW5nXFxcIix2YWx1ZTp5fTpnKHkpP3t0eXBlOlxcXCJib29sZWFuXFxcIix2YWx1ZTp5fTptKHkpP3t0eXBlOlxcXCJkdXJhdGlvblxcXCIsdmFsdWU6eX06ZCh5KT97dHlwZTpcXFwiZGF0ZVxcXCIsdmFsdWU6eX06Yih5KT97dHlwZTpcXFwiYXJyYXlcXFwiLHZhbHVlOnl9OkQoeSk/e3R5cGU6XFxcImxpbmtcXFwiLHZhbHVlOnl9OkkoeSk/e3R5cGU6XFxcImZ1bmN0aW9uXFxcIix2YWx1ZTp5fTpUKHkpP3t0eXBlOlxcXCJvYmplY3RcXFwiLHZhbHVlOnl9OnZvaWQgMH1OLndyYXBWYWx1ZT10O2Z1bmN0aW9uIHIoeSx3KXtpZihUKHkpKXtsZXQgdj17fTtmb3IobGV0W3gsQ11vZiBPYmplY3QuZW50cmllcyh5KSl2W3hdPXIoQyx3KTtyZXR1cm4gdn1lbHNlIGlmKGIoeSkpe2xldCB2PVtdO2ZvcihsZXQgeCBvZiB5KXYucHVzaChyKHgsdykpO3JldHVybiB2fWVsc2UgcmV0dXJuIHcoeSl9Ti5tYXBMZWF2ZXM9cjtmdW5jdGlvbiBzKHksdyl7cmV0dXJuIGkoeSx3KT09MH1OLmVxdWFscz1zO2Z1bmN0aW9uIGkoeSx3LHYpe3ZhciBWLGo7aWYoeT09PXd8fCh5PT09dm9pZCAwJiYoeT1udWxsKSx3PT09dm9pZCAwJiYodz1udWxsKSx5PT09bnVsbCYmdz09PW51bGwpKXJldHVybiAwO2lmKHk9PT1udWxsKXJldHVybi0xO2lmKHc9PT1udWxsKXJldHVybiAxO2xldCB4PXQoeSksQz10KHcpO2lmKHg9PT12b2lkIDAmJkM9PT12b2lkIDApcmV0dXJuIDA7aWYoeD09PXZvaWQgMClyZXR1cm4tMTtpZihDPT09dm9pZCAwKXJldHVybiAxO2lmKHgudHlwZSE9Qy50eXBlKXJldHVybiB4LnR5cGUubG9jYWxlQ29tcGFyZShDLnR5cGUpO2lmKHgudmFsdWU9PT1DLnZhbHVlKXJldHVybiAwO3N3aXRjaCh4LnR5cGUpe2Nhc2VcXFwic3RyaW5nXFxcIjpyZXR1cm4geC52YWx1ZS5sb2NhbGVDb21wYXJlKEMudmFsdWUpO2Nhc2VcXFwibnVtYmVyXFxcIjpyZXR1cm4geC52YWx1ZTxDLnZhbHVlPy0xOngudmFsdWU9PUMudmFsdWU/MDoxO2Nhc2VcXFwibnVsbFxcXCI6cmV0dXJuIDA7Y2FzZVxcXCJib29sZWFuXFxcIjpyZXR1cm4geC52YWx1ZT09Qy52YWx1ZT8wOngudmFsdWU/MTotMTtjYXNlXFxcImxpbmtcXFwiOmxldCBZPXgudmFsdWUsZWU9Qy52YWx1ZSxhZT12IT1udWxsP3Y6QWU9PkFlLE89YWUoWS5wYXRoKS5sb2NhbGVDb21wYXJlKGFlKGVlLnBhdGgpKTtpZihPIT0wKXJldHVybiBPO2xldCAkPVkudHlwZS5sb2NhbGVDb21wYXJlKGVlLnR5cGUpO3JldHVybiAkIT0wPyQ6WS5zdWJwYXRoJiYhZWUuc3VicGF0aD8xOiFZLnN1YnBhdGgmJmVlLnN1YnBhdGg/LTE6IVkuc3VicGF0aCYmIWVlLnN1YnBhdGg/MDooKFY9WS5zdWJwYXRoKSE9bnVsbD9WOlxcXCJcXFwiKS5sb2NhbGVDb21wYXJlKChqPWVlLnN1YnBhdGgpIT1udWxsP2o6XFxcIlxcXCIpO2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJuIHgudmFsdWU8Qy52YWx1ZT8tMTp4LnZhbHVlLmVxdWFscyhDLnZhbHVlKT8wOjE7Y2FzZVxcXCJkdXJhdGlvblxcXCI6cmV0dXJuIHgudmFsdWU8Qy52YWx1ZT8tMTp4LnZhbHVlLmVxdWFscyhDLnZhbHVlKT8wOjE7Y2FzZVxcXCJhcnJheVxcXCI6bGV0IFE9eC52YWx1ZSx1ZT1DLnZhbHVlO2ZvcihsZXQgQWU9MDtBZTxNYXRoLm1pbihRLmxlbmd0aCx1ZS5sZW5ndGgpO0FlKyspe2xldCBCdD1pKFFbQWVdLHVlW0FlXSk7aWYoQnQhPTApcmV0dXJuIEJ0fXJldHVybiBRLmxlbmd0aC11ZS5sZW5ndGg7Y2FzZVxcXCJvYmplY3RcXFwiOmxldCBEZT14LnZhbHVlLFJlPUMudmFsdWUsUXQ9QXJyYXkuZnJvbShPYmplY3Qua2V5cyhEZSkpLE10PUFycmF5LmZyb20oT2JqZWN0LmtleXMoUmUpKTtRdC5zb3J0KCksTXQuc29ydCgpO2xldCBfdD1pKFF0LE10KTtpZihfdCE9MClyZXR1cm4gX3Q7Zm9yKGxldCBBZSBvZiBRdCl7bGV0IEJ0PWkoRGVbQWVdLFJlW0FlXSk7aWYoQnQhPTApcmV0dXJuIEJ0fXJldHVybiAwO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOnJldHVybiAwfX1OLmNvbXBhcmU9aTtmdW5jdGlvbiBvKHkpe3ZhciB3O3JldHVybih3PXQoeSkpPT1udWxsP3ZvaWQgMDp3LnR5cGV9Ti50eXBlT2Y9bztmdW5jdGlvbiBhKHkpe2xldCB3PXQoeSk7aWYoIXcpcmV0dXJuITE7c3dpdGNoKHcudHlwZSl7Y2FzZVxcXCJudW1iZXJcXFwiOnJldHVybiB3LnZhbHVlIT0wO2Nhc2VcXFwic3RyaW5nXFxcIjpyZXR1cm4gdy52YWx1ZS5sZW5ndGg+MDtjYXNlXFxcImJvb2xlYW5cXFwiOnJldHVybiB3LnZhbHVlO2Nhc2VcXFwibGlua1xcXCI6cmV0dXJuISF3LnZhbHVlLnBhdGg7Y2FzZVxcXCJkYXRlXFxcIjpyZXR1cm4gdy52YWx1ZS50b01pbGxpcygpIT0wO2Nhc2VcXFwiZHVyYXRpb25cXFwiOnJldHVybiB3LnZhbHVlLmFzKFxcXCJzZWNvbmRzXFxcIikhPTA7Y2FzZVxcXCJvYmplY3RcXFwiOnJldHVybiBPYmplY3Qua2V5cyh3LnZhbHVlKS5sZW5ndGg+MDtjYXNlXFxcImFycmF5XFxcIjpyZXR1cm4gdy52YWx1ZS5sZW5ndGg+MDtjYXNlXFxcIm51bGxcXFwiOnJldHVybiExO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOnJldHVybiEwfX1OLmlzVHJ1dGh5PWE7ZnVuY3Rpb24gdSh5KXtpZih5PT1udWxsKXJldHVybiB5O2lmKE4uaXNBcnJheSh5KSlyZXR1cm5bXS5jb25jYXQoeS5tYXAodz0+dSh3KSkpO2lmKE4uaXNPYmplY3QoeSkpe2xldCB3PXt9O2ZvcihsZXRbdix4XW9mIE9iamVjdC5lbnRyaWVzKHkpKXdbdl09dSh4KTtyZXR1cm4gd31lbHNlIHJldHVybiB5fU4uZGVlcENvcHk9dTtmdW5jdGlvbiBsKHkpe3JldHVybiB0eXBlb2YgeT09XFxcInN0cmluZ1xcXCJ9Ti5pc1N0cmluZz1sO2Z1bmN0aW9uIGYoeSl7cmV0dXJuIHR5cGVvZiB5PT1cXFwibnVtYmVyXFxcIn1OLmlzTnVtYmVyPWY7ZnVuY3Rpb24gZCh5KXtyZXR1cm4geSBpbnN0YW5jZW9mIHF9Ti5pc0RhdGU9ZDtmdW5jdGlvbiBtKHkpe3JldHVybiB5IGluc3RhbmNlb2YgQn1OLmlzRHVyYXRpb249bTtmdW5jdGlvbiBoKHkpe3JldHVybiB5PT1udWxsfU4uaXNOdWxsPWg7ZnVuY3Rpb24gYih5KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh5KX1OLmlzQXJyYXk9YjtmdW5jdGlvbiBnKHkpe3JldHVybiB0eXBlb2YgeT09XFxcImJvb2xlYW5cXFwifU4uaXNCb29sZWFuPWc7ZnVuY3Rpb24gRCh5KXtyZXR1cm4geSBpbnN0YW5jZW9mIE9lfU4uaXNMaW5rPUQ7ZnVuY3Rpb24gVCh5KXtyZXR1cm4geSE9PXZvaWQgMCYmdHlwZW9mIHk9PVxcXCJvYmplY3RcXFwiJiYhYih5KSYmIW0oeSkmJiFkKHkpJiYhRCh5KSYmIWgoeSl9Ti5pc09iamVjdD1UO2Z1bmN0aW9uIEkoeSl7cmV0dXJuIHR5cGVvZiB5PT1cXFwiZnVuY3Rpb25cXFwifU4uaXNGdW5jdGlvbj1JfSkoZXR8fChldD17fSkpO3ZhciBqdTsoaT0+e2Z1bmN0aW9uIG4obyl7cmV0dXJuIGV0LmlzT2JqZWN0KG8pJiZPYmplY3Qua2V5cyhvKS5sZW5ndGg9PTImJlxcXCJrZXlcXFwiaW4gbyYmXFxcInJvd3NcXFwiaW4gb31pLmlzRWxlbWVudEdyb3VwPW47ZnVuY3Rpb24gZShvKXtmb3IobGV0IGEgb2YgbylpZighbihhKSlyZXR1cm4hMTtyZXR1cm4hMH1pLmlzR3JvdXBpbmc9ZTtmdW5jdGlvbiB0KG8pe2ZvcihsZXQgYSBvZiBvKWlmKG4oYSkpcmV0dXJuITE7cmV0dXJuITB9aS5pc0xlYWY9dDtmdW5jdGlvbiByKG8pe2lmKG4obykpcmV0dXJuIHIoby5yb3dzKTtpZihlKG8pKXtsZXQgYT0wO2ZvcihsZXQgdSBvZiBvKWErPXIodS5yb3dzKTtyZXR1cm4gYX1lbHNlIHJldHVybiBvLmxlbmd0aH1pLmNvdW50PXI7ZnVuY3Rpb24gcyhvLGEsdSl7aWYodTw9YSlyZXR1cm5bXTtpZih0KG8pKXJldHVybiBvLnNsaWNlKGEsdSk7bGV0IGw9MCxmPTA7Zm9yKDtsPG8ubGVuZ3RoJiZmK3Iob1tsXSk8PWE7KWYrPXIob1tsXSksbCsrO2lmKGw+PW8ubGVuZ3RoKXJldHVybltdO2xldCBkPVtdO2Zvcig7bDxvLmxlbmd0aCYmZjx1Oyl7bGV0IG09b1tsXSxoPXIobSksYj1NYXRoLm1heChmLGEpLGc9TWF0aC5taW4oaCtmLHUpO2QucHVzaCh7a2V5Om0ua2V5LHJvd3M6cyhtLnJvd3MsYi1mLGctZil9KSxmKz1oLGwrK31yZXR1cm4gZH1pLnNsaWNlPXN9KShqdXx8KGp1PXt9KSk7dmFyIGhvPWNsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT1lO3RoaXMuc3VjY2Vzc2Z1bD0hMH1tYXAoZSl7cmV0dXJuIG5ldyBuKGUodGhpcy52YWx1ZSkpfWZsYXRNYXAoZSl7cmV0dXJuIGUodGhpcy52YWx1ZSl9bWFwRXJyKGUpe3JldHVybiB0aGlzfWJpbWFwKGUsdCl7cmV0dXJuIHRoaXMubWFwKGUpfW9yRWxzZShlKXtyZXR1cm4gdGhpcy52YWx1ZX1jYXN0KCl7cmV0dXJuIHRoaXN9b3JFbHNlVGhyb3coZSl7cmV0dXJuIHRoaXMudmFsdWV9fSxtbz1jbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZXJyb3I9ZTt0aGlzLnN1Y2Nlc3NmdWw9ITF9bWFwKGUpe3JldHVybiB0aGlzfWZsYXRNYXAoZSl7cmV0dXJuIHRoaXN9bWFwRXJyKGUpe3JldHVybiBuZXcgbihlKHRoaXMuZXJyb3IpKX1iaW1hcChlLHQpe3JldHVybiB0aGlzLm1hcEVycih0KX1vckVsc2UoZSl7cmV0dXJuIGV9Y2FzdCgpe3JldHVybiB0aGlzfW9yRWxzZVRocm93KGUpe3Rocm93IGU/bmV3IEVycm9yKGUodGhpcy5lcnJvcikpOm5ldyBFcnJvcihcXFwiXFxcIit0aGlzLmVycm9yKX19LFNlOyhhPT57ZnVuY3Rpb24gbih1KXtyZXR1cm4gbmV3IGhvKHUpfWEuc3VjY2Vzcz1uO2Z1bmN0aW9uIGUodSl7cmV0dXJuIG5ldyBtbyh1KX1hLmZhaWx1cmU9ZTtmdW5jdGlvbiB0KHUsbCxmKXtyZXR1cm4gdS5zdWNjZXNzZnVsP2wuc3VjY2Vzc2Z1bD9mKHUudmFsdWUsbC52YWx1ZSk6ZShsLmVycm9yKTplKHUuZXJyb3IpfWEuZmxhdE1hcDI9dDtmdW5jdGlvbiByKHUsbCxmKXtyZXR1cm4gdCh1LGwsKGQsbSk9Pm4oZihkLG0pKSl9YS5tYXAyPXI7ZnVuY3Rpb24gcyh1LGwpe2xldCBmPVtdO2ZvcihsZXQgZCBvZiB1KXtsZXQgbT1sKGQpO2lmKCFtLnN1Y2Nlc3NmdWwpcmV0dXJuIG0uY2FzdCgpO2YucHVzaChtLnZhbHVlKX1yZXR1cm4gYS5zdWNjZXNzKGYpfWEubWFwQWxsPXM7ZnVuY3Rpb24gaSh1KXt0cnl7cmV0dXJuIGEuc3VjY2Vzcyh1KCkpfWNhdGNoKGwpe3JldHVybiBhLmZhaWx1cmUobCl9fWEudHJ5aW5nPWk7YXN5bmMgZnVuY3Rpb24gbyh1KXt0cnl7cmV0dXJuIGEuc3VjY2Vzcyhhd2FpdCB1KX1jYXRjaChsKXtyZXR1cm4gYS5mYWlsdXJlKGwpfX1hLmFzeW5jPW99KShTZXx8KFNlPXt9KSk7dmFyIFl0OyhOPT57Ti5FVkVSWVRISU5HPXt0eXBlOlxcXCJldmVyeXRoaW5nXFxcIn0sTi5OT1RISU5HPXt0eXBlOlxcXCJub3RoaW5nXFxcIn0sTi5FTVBUWV9TRVQ9bmV3IFNldDtmdW5jdGlvbiByKHkpe3JldHVybiB5LnNpemU9PTA/Ti5OT1RISU5HOnt0eXBlOlxcXCJhdG9tXFxcIix2YWx1ZTp5fX1OLmF0b209cjtmdW5jdGlvbiBzKHkpe3JldHVybiB5P04uRVZFUllUSElORzpOLk5PVEhJTkd9Ti5jb25zdGFudD1zO2Z1bmN0aW9uIGkoeSl7cmV0dXJuIHkhPT12b2lkIDA/cih5KTpOLk5PVEhJTkd9Ti5udWxsYWJsZUF0b209aTtmdW5jdGlvbiBvKHkpe3JldHVybiB5LnNpemU9PTA/Ti5FVkVSWVRISU5HOnt0eXBlOlxcXCJuZWdhdGVkXFxcIix2YWx1ZTp5fX1OLm5lZ2F0ZWQ9bztmdW5jdGlvbiBhKHkpe3N3aXRjaCh5LnR5cGUpe2Nhc2VcXFwiZXZlcnl0aGluZ1xcXCI6cmV0dXJuIE4uTk9USElORztjYXNlXFxcIm5vdGhpbmdcXFwiOnJldHVybiBOLkVWRVJZVEhJTkc7Y2FzZVxcXCJhdG9tXFxcIjpyZXR1cm4gbyh5LnZhbHVlKTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiByKHkudmFsdWUpfX1OLm5lZ2F0ZT1hO2Z1bmN0aW9uIHUoeSl7c3dpdGNoKHkudHlwZSl7Y2FzZVxcXCJldmVyeXRoaW5nXFxcIjpyZXR1cm4hMTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiExO2Nhc2VcXFwiYXRvbVxcXCI6cmV0dXJuIHkudmFsdWUuc2l6ZT09MDtjYXNlXFxcIm5vdGhpbmdcXFwiOnJldHVybiEwfX1OLmVtcHR5PXU7ZnVuY3Rpb24gbCh5LHcpe3N3aXRjaCh5LnR5cGUpe2Nhc2VcXFwiZXZlcnl0aGluZ1xcXCI6cmV0dXJuIHc7Y2FzZVxcXCJub3RoaW5nXFxcIjpyZXR1cm4gTi5FTVBUWV9TRVQ7Y2FzZVxcXCJhdG9tXFxcIjpyZXR1cm4geS52YWx1ZTtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybiBJKHcseS52YWx1ZSl9fU4ucmVzb2x2ZT1sO2Z1bmN0aW9uIGYoeSl7cmV0dXJuIGQoeSx3PT53KX1OLmludGVyc2VjdD1mO2Z1bmN0aW9uIGQoeSx3KXtyZXR1cm4gbSh5LHY9PlNlLnN1Y2Nlc3Modyh2KSkpLm9yRWxzZVRocm93KCl9Ti5sYXp5SW50ZXJzZWN0PWQ7ZnVuY3Rpb24gbSh5LHcpe2xldCB2PVtdLHg9W107Zm9yKGxldCBDIG9mIHkpe2xldCBWPXcoQyk7aWYoIVYuc3VjY2Vzc2Z1bClyZXR1cm4gVi5jYXN0KCk7bGV0IGo9Vi52YWx1ZTtpZihqIT09dm9pZCAwKXtpZih1KGopKXJldHVybiBTZS5zdWNjZXNzKE4uTk9USElORyk7ai50eXBlIT09XFxcImV2ZXJ5dGhpbmdcXFwiJiYoai50eXBlPT1cXFwiYXRvbVxcXCI/di5wdXNoKGoudmFsdWUpOmoudHlwZT09XFxcIm5lZ2F0ZWRcXFwiJiZ4LnB1c2goai52YWx1ZSkpfX1yZXR1cm4gdi5sZW5ndGg9PTAmJngubGVuZ3RoPT0wP1NlLnN1Y2Nlc3MoTi5FVkVSWVRISU5HKTp2Lmxlbmd0aD4wJiZ4Lmxlbmd0aD09MD9TZS5zdWNjZXNzKHIoRCh2KSkpOnYubGVuZ3RoPT0wJiZ4Lmxlbmd0aD4wP1NlLnN1Y2Nlc3MobyhUKHgpKSk6U2Uuc3VjY2VzcyhOLmF0b20oSShEKHYpLFQoeCkpKSl9Ti5sYXp5RmFpbGFibGVJbnRlcnNlY3Rpb249bTtmdW5jdGlvbiBoKHkpe3JldHVybiBiKHksdz0+dyl9Ti51bmlvbj1oO2Z1bmN0aW9uIGIoeSx3KXtyZXR1cm4gZyh5LHY9PlNlLnN1Y2Nlc3Modyh2KSkpLm9yRWxzZVRocm93KCl9Ti5sYXp5VW5pb249YjtmdW5jdGlvbiBnKHksdyl7bGV0IHY9W10seD1bXTtmb3IobGV0IEMgb2YgeSl7bGV0IFY9dyhDKTtpZighVi5zdWNjZXNzZnVsKXJldHVybiBWLmNhc3QoKTtsZXQgaj1WLnZhbHVlO2lmKGohPT12b2lkIDApe2lmKGoudHlwZT09PVxcXCJldmVyeXRoaW5nXFxcIilyZXR1cm4gU2Uuc3VjY2VzcyhOLkVWRVJZVEhJTkcpO3Uoail8fChqLnR5cGU9PVxcXCJhdG9tXFxcIj92LnB1c2goai52YWx1ZSk6ai50eXBlPT1cXFwibmVnYXRlZFxcXCImJngucHVzaChqLnZhbHVlKSl9fXJldHVybiB2Lmxlbmd0aD09MCYmeC5sZW5ndGg9PTA/U2Uuc3VjY2VzcyhOLk5PVEhJTkcpOnYubGVuZ3RoPjAmJngubGVuZ3RoPT0wP1NlLnN1Y2Nlc3MoTi5hdG9tKFQodikpKTp2Lmxlbmd0aD09MCYmeC5sZW5ndGg+MD9TZS5zdWNjZXNzKE4ubmVnYXRlZChEKHgpKSk6U2Uuc3VjY2VzcyhvKEkoRCh4KSxUKHYpKSkpfU4ubGF6eUZhaWxhYmxlVW5pb249ZztmdW5jdGlvbiBEKHkpe2lmKHkubGVuZ3RoPT0wKXJldHVybiBuZXcgU2V0O2lmKHkubGVuZ3RoPT0xKXJldHVybiB5WzBdO2xldCB3PVtdLmNvbmNhdCh5KS5zb3J0KCh2LHgpPT52LnNpemUteC5zaXplKTtmb3IoO3cubGVuZ3RoPjE7KXtsZXQgdj1uZXcgU2V0LHg9dy5wb3AoKTtmb3IobGV0IEMgb2Ygd1swXSl4LmhhcyhDKSYmdi5hZGQoQyk7d1swXT12fXJldHVybiB3WzBdfU4uc2V0SW50ZXJzZWN0PUQ7ZnVuY3Rpb24gVCh5KXtpZih5Lmxlbmd0aD09MClyZXR1cm4gbmV3IFNldDtpZih5Lmxlbmd0aD09MSlyZXR1cm4geVswXTtsZXQgdz1uZXcgU2V0O2ZvcihsZXQgdiBvZiB5KWZvcihsZXQgeCBvZiB2KXcuYWRkKHgpO3JldHVybiB3fU4uc2V0VW5pb249VDtmdW5jdGlvbiBJKHksdyl7aWYoeS5zaXplPncuc2l6ZSl7bGV0IHY9bmV3IFNldCh5KTtmb3IobGV0IHggb2Ygdyl2LmRlbGV0ZSh4KTtyZXR1cm4gdn1lbHNle2xldCB2PW5ldyBTZXQ7Zm9yKGxldCB4IG9mIHkpdy5oYXMoeCl8fHYuYWRkKHgpO3JldHVybiB2fX1OLnNldEludGVyc2VjdE5lZ2F0aW9uPUl9KShZdHx8KFl0PXt9KSk7dmFyIHNlOyhnPT57Zy5ST1c9XFxcIiRyb3dcXFwiO2Z1bmN0aW9uIGUoRCl7cmV0dXJue3R5cGU6XFxcInZhcmlhYmxlXFxcIixuYW1lOkR9fWcudmFyaWFibGU9ZTtmdW5jdGlvbiB0KEQpe3JldHVybnt0eXBlOlxcXCJsaXRlcmFsXFxcIix2YWx1ZTpEfX1nLmxpdGVyYWw9dDtmdW5jdGlvbiByKEQsVCxJKXtyZXR1cm57dHlwZTpcXFwiYmluYXJ5b3BcXFwiLGxlZnQ6RCxvcDpULHJpZ2h0Okl9fWcuYmluYXJ5T3A9cjtmdW5jdGlvbiBzKEQsVCl7cmV0dXJue3R5cGU6XFxcImJpbmFyeW9wXFxcIixsZWZ0OkQscmlnaHQ6VCxvcDpcXFwiaW5kZXhcXFwifX1nLmluZGV4PXM7ZnVuY3Rpb24gaShEKXtsZXQgVD1ELnNwbGl0KFxcXCIuXFxcIiksST1nLnZhcmlhYmxlKFRbMF0pO2ZvcihsZXQgTj0xO048VC5sZW5ndGg7TisrKUk9Zy5pbmRleChJLGcubGl0ZXJhbChUW05dKSk7cmV0dXJuIEl9Zy5pbmRleFZhcmlhYmxlPWk7ZnVuY3Rpb24gbyhELFQpe3JldHVybnt0eXBlOlxcXCJsYW1iZGFcXFwiLGFyZ3VtZW50czpELHZhbHVlOlR9fWcubGFtYmRhPW87ZnVuY3Rpb24gYShELFQpe3JldHVybnt0eXBlOlxcXCJmdW5jdGlvblxcXCIsZnVuYzpELGFyZ3VtZW50czpUfX1nLmZ1bmM9YTtmdW5jdGlvbiB1KEQpe3JldHVybnt0eXBlOlxcXCJsaXN0XFxcIix2YWx1ZXM6RH19Zy5saXN0PXU7ZnVuY3Rpb24gbChEKXtyZXR1cm57dHlwZTpcXFwib2JqZWN0XFxcIix2YWx1ZXM6RH19Zy5vYmplY3Q9bDtmdW5jdGlvbiBmKEQpe3JldHVybnt0eXBlOlxcXCJuZWdhdGVkXFxcIixjaGlsZDpEfX1nLm5lZ2F0ZT1mO2Z1bmN0aW9uIGQoRCl7cmV0dXJuIEQ9PVxcXCI8PVxcXCJ8fEQ9PVxcXCI8XFxcInx8RD09XFxcIj5cXFwifHxEPT1cXFwiPj1cXFwifHxEPT1cXFwiIT1cXFwifHxEPT1cXFwiPVxcXCJ9Zy5pc0NvbXBhcmVPcD1kO2Z1bmN0aW9uIG0oRCxUPW5ldyBTZXQoW2cuUk9XXSkpe3N3aXRjaChELnR5cGUpe2Nhc2VcXFwiYmluYXJ5b3BcXFwiOnJldHVybiBELm9wPT09XFxcImluZGV4XFxcIiYmRC5sZWZ0LnR5cGU9PVxcXCJ2YXJpYWJsZVxcXCImJkQubGVmdC5uYW1lPT1nLlJPVyYmRC5yaWdodC50eXBlPT1cXFwibGl0ZXJhbFxcXCImJmV0LmlzU3RyaW5nKEQucmlnaHQudmFsdWUpP1QuaGFzKEQucmlnaHQudmFsdWUpP25ldyBTZXQ6bmV3IFNldChbRC5yaWdodC52YWx1ZV0pOll0LnNldFVuaW9uKFttKEQubGVmdCxUKSxtKEQucmlnaHQsVCldKTtjYXNlXFxcImZ1bmN0aW9uXFxcIjpyZXR1cm4gWXQuc2V0VW5pb24oRC5hcmd1bWVudHMubWFwKE49Pm0oTixUKSkpO2Nhc2VcXFwibGFtYmRhXFxcIjpsZXQgST1UIT1udWxsP1Q6bmV3IFNldDtmb3IobGV0IE4gb2YgRC5hcmd1bWVudHMpSS5hZGQoTik7cmV0dXJuIG0oRC52YWx1ZSxJKTtjYXNlXFxcImxpc3RcXFwiOnJldHVybiBZdC5zZXRVbmlvbihELnZhbHVlcy5tYXAoTj0+bShOLFQpKSk7Y2FzZVxcXCJuZWdhdGVkXFxcIjpyZXR1cm4gbShELmNoaWxkLFQpO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gWXQuc2V0VW5pb24oT2JqZWN0LnZhbHVlcyhELnZhbHVlcykubWFwKE49Pm0oTixUKSkpO2Nhc2VcXFwidmFyaWFibGVcXFwiOnJldHVybiBUJiZULmhhcyhELm5hbWUpP25ldyBTZXQ6bmV3IFNldChbRC5uYW1lXSk7Y2FzZVxcXCJsaXRlcmFsXFxcIjpyZXR1cm4gbmV3IFNldH19Zy51bmJvdW5kVmFyaWFibGVzPW07ZnVuY3Rpb24gaChEKXtzd2l0Y2goRC50eXBlKXtjYXNlXFxcImJpbmFyeW9wXFxcIjpyZXR1cm4gRC5vcD09PVxcXCJpbmRleFxcXCI/YCR7aChELmxlZnQpfVske2goRC5yaWdodCl9XWA6YCR7aChELmxlZnQpfSAke0Qub3B9ICR7aChELnJpZ2h0KX1gO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOnJldHVybmAke2goRC5mdW5jKX0oJHtELmFyZ3VtZW50cy5tYXAoaCkuam9pbihcXFwiLCBcXFwiKX0pYDtjYXNlXFxcImxhbWJkYVxcXCI6cmV0dXJuYCgke0QuYXJndW1lbnRzLmpvaW4oXFxcIiwgXFxcIil9KSA9PiAke2goRC52YWx1ZSl9YDtjYXNlXFxcImxpc3RcXFwiOnJldHVybmBbJHtELnZhbHVlcy5tYXAoaCkuam9pbihcXFwiLCBcXFwiKX1dYDtjYXNlXFxcIm5lZ2F0ZWRcXFwiOnJldHVybmAhJHtoKEQuY2hpbGQpfWA7Y2FzZVxcXCJvYmplY3RcXFwiOnJldHVybmB7JHtPYmplY3QuZW50cmllcyhELnZhbHVlcykubWFwKChbSSxOXSk9PmAke0l9OiAke2goTil9YCkuam9pbihcXFwiLCBcXFwiKX19YDtjYXNlXFxcInZhcmlhYmxlXFxcIjpyZXR1cm4gRC5uYW1lO2Nhc2VcXFwibGl0ZXJhbFxcXCI6bGV0IFQ9ZXQud3JhcFZhbHVlKEQudmFsdWUpO2lmKCFUKXJldHVyblxcXCJudWxsXFxcIjtzd2l0Y2goVC50eXBlKXtjYXNlXFxcInN0cmluZ1xcXCI6cmV0dXJuYFxcXCIke1QudmFsdWV9XFxcImA7ZGVmYXVsdDpyZXR1cm4gZXQudG9TdHJpbmcoVC52YWx1ZSl9fX1nLnRvU3RyaW5nPWgsZy5OVUxMPWcubGl0ZXJhbChudWxsKX0pKHNlfHwoc2U9e30pKTt2YXIgej1GLmNyZWF0ZUxhbmd1YWdlKHtudW1iZXI6bj0+Ri5yZWdleHAoLy0/WzAtOV0rKFxcXFwuWzAtOV0rKT8vKS5tYXAoZT0+TnVtYmVyLnBhcnNlRmxvYXQoZSkpLmRlc2MoXFxcIm51bWJlclxcXCIpLHN0cmluZzpuPT5GLnN0cmluZygnXFxcIicpLnRoZW4oRi5hbHQobi5lc2NhcGVDaGFyYWN0ZXIsRi5ub25lT2YoJ1xcXCJcXFxcXFxcXCcpKS5hdExlYXN0KDApLm1hcChlPT5lLmpvaW4oXFxcIlxcXCIpKSkuc2tpcChGLnN0cmluZygnXFxcIicpKS5kZXNjKFxcXCJzdHJpbmdcXFwiKSxlc2NhcGVDaGFyYWN0ZXI6bj0+Ri5zdHJpbmcoXFxcIlxcXFxcXFxcXFxcIikudGhlbihGLmFueSkubWFwKGU9PmU9PT0nXFxcIic/J1xcXCInOmU9PT1cXFwiXFxcXFxcXFxcXFwiP1xcXCJcXFxcXFxcXFxcXCI6XFxcIlxcXFxcXFxcXFxcIitlKSxib29sOm49PkYucmVnZXhwKC90cnVlfGZhbHNlfFRydWV8RmFsc2UvKS5tYXAoZT0+ZS50b0xvd2VyQ2FzZSgpPT1cXFwidHJ1ZVxcXCIpLmRlc2MoXFxcImJvb2xlYW5cXFwiKSx0YWc6bj0+Ri5zZXFNYXAoRi5zdHJpbmcoXFxcIiNcXFwiKSxGLmFsdChGLnJlZ2V4cCgvW15cXFxcdTIwMDAtXFxcXHUyMDZGXFxcXHUyRTAwLVxcXFx1MkU3RichXFxcIiMkJSYoKSorLC46Ozw9Pj9AXmB7fH1+XFxcXFtcXFxcXVxcXFxcXFxcXFxcXHNdLykuZGVzYyhcXFwidGV4dFxcXCIpKS5tYW55KCksKGUsdCk9PmUrdC5qb2luKFxcXCJcXFwiKSkuZGVzYyhcXFwidGFnXFxcIiksaWRlbnRpZmllcjpuPT5GLnNlcU1hcChGLmFsdChGLnJlZ2V4cCgvW1xcXFxwe0xldHRlcn0kXS91KSxGLnJlZ2V4cChxdSkuZGVzYyhcXFwidGV4dFxcXCIpKSxGLmFsdChGLnJlZ2V4cCgvWzAtOVxcXFxwe0xldHRlcn0kXy1dL3UpLEYucmVnZXhwKHF1KS5kZXNjKFxcXCJ0ZXh0XFxcIikpLm1hbnkoKSwoZSx0KT0+ZSt0LmpvaW4oXFxcIlxcXCIpKS5kZXNjKFxcXCJ2YXJpYWJsZVxcXCIpLGxpbms6bj0+Ri5yZWdleHAoL1xcXFxbXFxcXFsoW15cXFxcW1xcXFxdXSo/KVxcXFxdXFxcXF0vdSwxKS5tYXAoZT0+T2UucGFyc2VJbm5lcihlKSkuZGVzYyhcXFwiZmlsZSBsaW5rXFxcIiksZW1iZWRMaW5rOm49PkYuc2VxTWFwKEYuc3RyaW5nKFxcXCIhXFxcIikuYXRNb3N0KDEpLG4ubGluaywoZSx0KT0+KGUubGVuZ3RoPjAmJih0LmVtYmVkPSEwKSx0KSkuZGVzYyhcXFwiZmlsZSBsaW5rXFxcIiksYmluYXJ5UGx1c01pbnVzOm49PkYucmVnZXhwKC9cXFxcK3wtLykubWFwKGU9PmUpLmRlc2MoXFxcIicrJyBvciAnLSdcXFwiKSxiaW5hcnlNdWxEaXY6bj0+Ri5yZWdleHAoL1xcXFwqfFxcXFwvfCUvKS5tYXAoZT0+ZSkuZGVzYyhcXFwiJyonIG9yICcvJyBvciAnJSdcXFwiKSxiaW5hcnlDb21wYXJlT3A6bj0+Ri5yZWdleHAoLz49fDw9fCE9fD58PHw9LykubWFwKGU9PmUpLmRlc2MoXFxcIic+PScgb3IgJzw9JyBvciAnIT0nIG9yICc9JyBvciAnPicgb3IgJzwnXFxcIiksYmluYXJ5QW5kT3A6bj0+Ri5yZWdleHAoL2FuZHwmL2kpLm1hcChlPT5cXFwiJlxcXCIpLmRlc2MoXFxcIidhbmQnXFxcIiksYmluYXJ5T3JPcDpuPT5GLnJlZ2V4cCgvb3J8XFxcXHwvaSkubWFwKGU9PlxcXCJ8XFxcIikuZGVzYyhcXFwiJ29yJ1xcXCIpLHJvb3REYXRlOm49PkYuc2VxTWFwKEYucmVnZXhwKC9cXFxcZHs0fS8pLEYuc3RyaW5nKFxcXCItXFxcIiksRi5yZWdleHAoL1xcXFxkezJ9LyksKGUsdCxyKT0+cS5mcm9tT2JqZWN0KHt5ZWFyOk51bWJlci5wYXJzZUludChlKSxtb250aDpOdW1iZXIucGFyc2VJbnQocil9KSkuZGVzYyhcXFwiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdXFxcIiksZGF0ZVNob3J0aGFuZDpuPT5GLmFsdCguLi5PYmplY3Qua2V5cyhVdSkuc29ydCgoZSx0KT0+dC5sZW5ndGgtZS5sZW5ndGgpLm1hcChGLnN0cmluZykpLGRhdGU6bj0+T2Yobi5yb290RGF0ZSxlPT5GLnNlcU1hcChGLnN0cmluZyhcXFwiLVxcXCIpLEYucmVnZXhwKC9cXFxcZHsyfS8pLCh0LHIpPT5lLnNldCh7ZGF5Ok51bWJlci5wYXJzZUludChyKX0pKSxlPT5GLnNlcU1hcChGLnN0cmluZyhcXFwiVFxcXCIpLEYucmVnZXhwKC9cXFxcZHsyfS8pLCh0LHIpPT5lLnNldCh7aG91cjpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Ri5zZXFNYXAoRi5zdHJpbmcoXFxcIjpcXFwiKSxGLnJlZ2V4cCgvXFxcXGR7Mn0vKSwodCxyKT0+ZS5zZXQoe21pbnV0ZTpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Ri5zZXFNYXAoRi5zdHJpbmcoXFxcIjpcXFwiKSxGLnJlZ2V4cCgvXFxcXGR7Mn0vKSwodCxyKT0+ZS5zZXQoe3NlY29uZDpOdW1iZXIucGFyc2VJbnQocil9KSksZT0+Ri5hbHQoRi5zZXFNYXAoRi5zdHJpbmcoXFxcIi5cXFwiKSxGLnJlZ2V4cCgvXFxcXGR7M30vKSwodCxyKT0+ZS5zZXQoe21pbGxpc2Vjb25kOk51bWJlci5wYXJzZUludChyKX0pKSxGLnN1Y2NlZWQoZSkpLGU9PkYuYWx0KEYuc2VxTWFwKEYuc3RyaW5nKFxcXCIrXFxcIikub3IoRi5zdHJpbmcoXFxcIi1cXFwiKSksRi5yZWdleHAoL1xcXFxkezEsMn0oOlxcXFxkezJ9KT8vKSwodCxyKT0+ZS5zZXRab25lKFxcXCJVVENcXFwiK3Qrcix7a2VlcExvY2FsVGltZTohMH0pKSxGLnNlcU1hcChGLnN0cmluZyhcXFwiWlxcXCIpLCgpPT5lLnNldFpvbmUoXFxcInV0Y1xcXCIse2tlZXBMb2NhbFRpbWU6ITB9KSksRi5zZXFNYXAoRi5zdHJpbmcoXFxcIltcXFwiKSxGLnJlZ2V4cCgvWzAtOUEtWmEteistXFxcXC9dKy91KSxGLnN0cmluZyhcXFwiXVxcXCIpLCh0LHIscyk9PmUuc2V0Wm9uZShyLHtrZWVwTG9jYWxUaW1lOiEwfSkpKSkuYXNzZXJ0KGU9PmUuaXNWYWxpZCxcXFwidmFsaWQgZGF0ZVxcXCIpLmRlc2MoXFxcImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXVxcXCIpLGRhdGVQbHVzOm49PkYuYWx0KG4uZGF0ZVNob3J0aGFuZC5tYXAoZT0+VXVbZV0oKSksbi5kYXRlKS5kZXNjKFxcXCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10gb3IgaW4gc2hvcnRoYW5kXFxcIiksZHVyYXRpb25UeXBlOm49PkYuYWx0KC4uLk9iamVjdC5rZXlzKFZ1KS5zb3J0KChlLHQpPT50Lmxlbmd0aC1lLmxlbmd0aCkubWFwKEYuc3RyaW5nKSksZHVyYXRpb246bj0+Ri5zZXFNYXAobi5udW1iZXIsRi5vcHRXaGl0ZXNwYWNlLG4uZHVyYXRpb25UeXBlLChlLHQscik9PlZ1W3JdLm1hcFVuaXRzKHM9PnMqZSkpLnNlcEJ5MShGLnN0cmluZyhcXFwiLFxcXCIpLnRyaW0oRi5vcHRXaGl0ZXNwYWNlKS5vcihGLm9wdFdoaXRlc3BhY2UpKS5tYXAoZT0+ZS5yZWR1Y2UoKHQscik9PnQucGx1cyhyKSkpLmRlc2MoXFxcImR1cmF0aW9uIGxpa2UgNGhyMm1pblxcXCIpLHJhd051bGw6bj0+Ri5zdHJpbmcoXFxcIm51bGxcXFwiKSxhdG9tSW5saW5lRmllbGQ6bj0+Ri5hbHQobi5kYXRlLG4uZHVyYXRpb24ubWFwKGU9Pk1pKGUpKSxuLnN0cmluZyxuLnRhZyxuLmVtYmVkTGluayxuLmJvb2wsbi5udW1iZXIsbi5yYXdOdWxsKSxpbmxpbmVGaWVsZExpc3Q6bj0+bi5hdG9tSW5saW5lRmllbGQuc2VwQnkoRi5zdHJpbmcoXFxcIixcXFwiKS50cmltKEYub3B0V2hpdGVzcGFjZSkubG9va2FoZWFkKG4uYXRvbUlubGluZUZpZWxkKSksaW5saW5lRmllbGQ6bj0+Ri5hbHQoRi5zZXFNYXAobi5hdG9tSW5saW5lRmllbGQsRi5zdHJpbmcoXFxcIixcXFwiKS50cmltKEYub3B0V2hpdGVzcGFjZSksbi5pbmxpbmVGaWVsZExpc3QsKGUsdCxyKT0+W2VdLmNvbmNhdChyKSksbi5hdG9tSW5saW5lRmllbGQpfSkscXU9bmV3IFJlZ0V4cChGbigpLFxcXCJcXFwiKSxWdT17eWVhcjpCLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5ZWFyczpCLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5cjpCLmZyb21PYmplY3Qoe3llYXJzOjF9KSx5cnM6Qi5mcm9tT2JqZWN0KHt5ZWFyczoxfSksbW9udGg6Qi5mcm9tT2JqZWN0KHttb250aHM6MX0pLG1vbnRoczpCLmZyb21PYmplY3Qoe21vbnRoczoxfSksbW86Qi5mcm9tT2JqZWN0KHttb250aHM6MX0pLG1vczpCLmZyb21PYmplY3Qoe21vbnRoczoxfSksd2VlazpCLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3ZWVrczpCLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3azpCLmZyb21PYmplY3Qoe3dlZWtzOjF9KSx3a3M6Qi5mcm9tT2JqZWN0KHt3ZWVrczoxfSksdzpCLmZyb21PYmplY3Qoe3dlZWtzOjF9KSxkYXk6Qi5mcm9tT2JqZWN0KHtkYXlzOjF9KSxkYXlzOkIuZnJvbU9iamVjdCh7ZGF5czoxfSksZDpCLmZyb21PYmplY3Qoe2RheXM6MX0pLGhvdXI6Qi5mcm9tT2JqZWN0KHtob3VyczoxfSksaG91cnM6Qi5mcm9tT2JqZWN0KHtob3VyczoxfSksaHI6Qi5mcm9tT2JqZWN0KHtob3VyczoxfSksaHJzOkIuZnJvbU9iamVjdCh7aG91cnM6MX0pLGg6Qi5mcm9tT2JqZWN0KHtob3VyczoxfSksbWludXRlOkIuZnJvbU9iamVjdCh7bWludXRlczoxfSksbWludXRlczpCLmZyb21PYmplY3Qoe21pbnV0ZXM6MX0pLG1pbjpCLmZyb21PYmplY3Qoe21pbnV0ZXM6MX0pLG1pbnM6Qi5mcm9tT2JqZWN0KHttaW51dGVzOjF9KSxtOkIuZnJvbU9iamVjdCh7bWludXRlczoxfSksc2Vjb25kOkIuZnJvbU9iamVjdCh7c2Vjb25kczoxfSksc2Vjb25kczpCLmZyb21PYmplY3Qoe3NlY29uZHM6MX0pLHNlYzpCLmZyb21PYmplY3Qoe3NlY29uZHM6MX0pLHNlY3M6Qi5mcm9tT2JqZWN0KHtzZWNvbmRzOjF9KSxzOkIuZnJvbU9iamVjdCh7c2Vjb25kczoxfSl9LFV1PXtub3c6KCk9PnEubG9jYWwoKSx0b2RheTooKT0+cS5sb2NhbCgpLnN0YXJ0T2YoXFxcImRheVxcXCIpLHllc3RlcmRheTooKT0+cS5sb2NhbCgpLnN0YXJ0T2YoXFxcImRheVxcXCIpLm1pbnVzKEIuZnJvbU9iamVjdCh7ZGF5czoxfSkpLHRvbW9ycm93OigpPT5xLmxvY2FsKCkuc3RhcnRPZihcXFwiZGF5XFxcIikucGx1cyhCLmZyb21PYmplY3Qoe2RheXM6MX0pKSxzb3c6KCk9PnEubG9jYWwoKS5zdGFydE9mKFxcXCJ3ZWVrXFxcIiksXFxcInN0YXJ0LW9mLXdlZWtcXFwiOigpPT5xLmxvY2FsKCkuc3RhcnRPZihcXFwid2Vla1xcXCIpLGVvdzooKT0+cS5sb2NhbCgpLmVuZE9mKFxcXCJ3ZWVrXFxcIiksXFxcImVuZC1vZi13ZWVrXFxcIjooKT0+cS5sb2NhbCgpLmVuZE9mKFxcXCJ3ZWVrXFxcIiksc295OigpPT5xLmxvY2FsKCkuc3RhcnRPZihcXFwieWVhclxcXCIpLFxcXCJzdGFydC1vZi15ZWFyXFxcIjooKT0+cS5sb2NhbCgpLnN0YXJ0T2YoXFxcInllYXJcXFwiKSxlb3k6KCk9PnEubG9jYWwoKS5lbmRPZihcXFwieWVhclxcXCIpLFxcXCJlbmQtb2YteWVhclxcXCI6KCk9PnEubG9jYWwoKS5lbmRPZihcXFwieWVhclxcXCIpLHNvbTooKT0+cS5sb2NhbCgpLnN0YXJ0T2YoXFxcIm1vbnRoXFxcIiksXFxcInN0YXJ0LW9mLW1vbnRoXFxcIjooKT0+cS5sb2NhbCgpLnN0YXJ0T2YoXFxcIm1vbnRoXFxcIiksZW9tOigpPT5xLmxvY2FsKCkuZW5kT2YoXFxcIm1vbnRoXFxcIiksXFxcImVuZC1vZi1tb250aFxcXCI6KCk9PnEubG9jYWwoKS5lbmRPZihcXFwibW9udGhcXFwiKX0sS3U9Ri5jcmVhdGVMYW5ndWFnZSh7dmFyaWFibGU6bj0+ei5pZGVudGlmaWVyLm1hcChzZS52YXJpYWJsZSkuZGVzYyhcXFwidmFyaWFibGVcXFwiKSxudW1iZXI6bj0+ei5udW1iZXIubWFwKHNlLmxpdGVyYWwpLmRlc2MoXFxcIm51bWJlclxcXCIpLHN0cmluZzpuPT56LnN0cmluZy5tYXAoc2UubGl0ZXJhbCkuZGVzYyhcXFwic3RyaW5nXFxcIiksYm9vbDpuPT56LmJvb2wubWFwKHNlLmxpdGVyYWwpLmRlc2MoXFxcImJvb2xlYW5cXFwiKSxkYXRlOm49PlN0KFxcXCJkYXRlXFxcIix6LmRhdGVQbHVzKS5tYXAoKFtlLHRdKT0+c2UubGl0ZXJhbCh0KSkuZGVzYyhcXFwiZGF0ZVxcXCIpLGR1cmF0aW9uOm49PlN0KFxcXCJkdXJcXFwiLHouZHVyYXRpb24pLm1hcCgoW2UsdF0pPT5zZS5saXRlcmFsKHQpKS5kZXNjKFxcXCJkdXJhdGlvblxcXCIpLG51bGw6bj0+ei5yYXdOdWxsLm1hcChlPT5zZS5OVUxMKSxsaW5rOm49PnoubGluay5tYXAoc2UubGl0ZXJhbCksbGlzdDpuPT5uLmV4cHJlc3Npb24uc2VwQnkoRi5zdHJpbmcoXFxcIixcXFwiKS50cmltKEYub3B0V2hpdGVzcGFjZSkpLndyYXAoRi5zdHJpbmcoXFxcIltcXFwiKS5za2lwKEYub3B0V2hpdGVzcGFjZSksRi5vcHRXaGl0ZXNwYWNlLnRoZW4oRi5zdHJpbmcoXFxcIl1cXFwiKSkpLm1hcChlPT5zZS5saXN0KGUpKS5kZXNjKFxcXCJsaXN0XFxcIiksb2JqZWN0Om49PkYuc2VxTWFwKHouaWRlbnRpZmllci5vcih6LnN0cmluZyksRi5zdHJpbmcoXFxcIjpcXFwiKS50cmltKEYub3B0V2hpdGVzcGFjZSksbi5leHByZXNzaW9uLChlLHQscik9Pih7bmFtZTplLHZhbHVlOnJ9KSkuc2VwQnkoRi5zdHJpbmcoXFxcIixcXFwiKS50cmltKEYub3B0V2hpdGVzcGFjZSkpLndyYXAoRi5zdHJpbmcoXFxcIntcXFwiKS5za2lwKEYub3B0V2hpdGVzcGFjZSksRi5vcHRXaGl0ZXNwYWNlLnRoZW4oRi5zdHJpbmcoXFxcIn1cXFwiKSkpLm1hcChlPT57bGV0IHQ9e307Zm9yKGxldCByIG9mIGUpdFtyLm5hbWVdPXIudmFsdWU7cmV0dXJuIHNlLm9iamVjdCh0KX0pLmRlc2MoXFxcIm9iamVjdCAoJ3sgYTogMSwgYjogMiB9JylcXFwiKSxhdG9tOm49PkYuYWx0KHouZW1iZWRMaW5rLm1hcChlPT5zZS5saXRlcmFsKGUpKSxuLm5lZ2F0ZWQsbi5saW5rLG4ubGlzdCxuLm9iamVjdCxuLmxhbWJkYSxuLnBhcmVucyxuLmJvb2wsbi5udW1iZXIsbi5zdHJpbmcsbi5kYXRlLG4uZHVyYXRpb24sbi5udWxsLG4udmFyaWFibGUpLGluZGV4Om49PkYuc2VxTWFwKG4uYXRvbSxGLmFsdChuLmRvdFBvc3RmaXgsbi5pbmRleFBvc3RmaXgsbi5mdW5jdGlvblBvc3RmaXgpLm1hbnkoKSwoZSx0KT0+e2xldCByPWU7Zm9yKGxldCBzIG9mIHQpc3dpdGNoKHMudHlwZSl7Y2FzZVxcXCJkb3RcXFwiOnI9c2UuaW5kZXgocixzZS5saXRlcmFsKHMuZXhwcikpO2JyZWFrO2Nhc2VcXFwiaW5kZXhcXFwiOnI9c2UuaW5kZXgocixzLmV4cHIpO2JyZWFrO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOnI9c2UuZnVuYyhyLHMuZXhwcnMpO2JyZWFrfXJldHVybiByfSksbmVnYXRlZDpuPT5GLnNlcU1hcChGLnN0cmluZyhcXFwiIVxcXCIpLG4uaW5kZXgsKGUsdCk9PnNlLm5lZ2F0ZSh0KSkuZGVzYyhcXFwibmVnYXRlZCBmaWVsZFxcXCIpLHBhcmVuczpuPT5uLmV4cHJlc3Npb24udHJpbShGLm9wdFdoaXRlc3BhY2UpLndyYXAoRi5zdHJpbmcoXFxcIihcXFwiKSxGLnN0cmluZyhcXFwiKVxcXCIpKSxsYW1iZGE6bj0+Ri5zZXFNYXAoei5pZGVudGlmaWVyLnNlcEJ5KEYuc3RyaW5nKFxcXCIsXFxcIikudHJpbShGLm9wdFdoaXRlc3BhY2UpKS53cmFwKEYuc3RyaW5nKFxcXCIoXFxcIikudHJpbShGLm9wdFdoaXRlc3BhY2UpLEYuc3RyaW5nKFxcXCIpXFxcIikudHJpbShGLm9wdFdoaXRlc3BhY2UpKSxGLnN0cmluZyhcXFwiPT5cXFwiKS50cmltKEYub3B0V2hpdGVzcGFjZSksbi5leHByZXNzaW9uLChlLHQscik9Pih7dHlwZTpcXFwibGFtYmRhXFxcIixhcmd1bWVudHM6ZSx2YWx1ZTpyfSkpLGRvdFBvc3RmaXg6bj0+Ri5zZXFNYXAoRi5zdHJpbmcoXFxcIi5cXFwiKSx6LmlkZW50aWZpZXIsKGUsdCk9Pih7dHlwZTpcXFwiZG90XFxcIixleHByOnR9KSksaW5kZXhQb3N0Zml4Om49PkYuc2VxTWFwKEYuc3RyaW5nKFxcXCJbXFxcIiksRi5vcHRXaGl0ZXNwYWNlLG4uZXhwcmVzc2lvbixGLm9wdFdoaXRlc3BhY2UsRi5zdHJpbmcoXFxcIl1cXFwiKSwoZSx0LHIscyxpKT0+KHt0eXBlOlxcXCJpbmRleFxcXCIsZXhwcjpyfSkpLGZ1bmN0aW9uUG9zdGZpeDpuPT5GLnNlcU1hcChGLnN0cmluZyhcXFwiKFxcXCIpLEYub3B0V2hpdGVzcGFjZSxuLmV4cHJlc3Npb24uc2VwQnkoRi5zdHJpbmcoXFxcIixcXFwiKS50cmltKEYub3B0V2hpdGVzcGFjZSkpLEYub3B0V2hpdGVzcGFjZSxGLnN0cmluZyhcXFwiKVxcXCIpLChlLHQscixzLGkpPT4oe3R5cGU6XFxcImZ1bmN0aW9uXFxcIixleHByczpyfSkpLGJpbmFyeU11bERpdjpuPT5NbihuLmluZGV4LHouYmluYXJ5TXVsRGl2LHNlLmJpbmFyeU9wKSxiaW5hcnlQbHVzTWludXM6bj0+TW4obi5iaW5hcnlNdWxEaXYsei5iaW5hcnlQbHVzTWludXMsc2UuYmluYXJ5T3ApLGJpbmFyeUNvbXBhcmU6bj0+TW4obi5iaW5hcnlQbHVzTWludXMsei5iaW5hcnlDb21wYXJlT3Asc2UuYmluYXJ5T3ApLGJpbmFyeUJvb2xlYW46bj0+TW4obi5iaW5hcnlDb21wYXJlLHouYmluYXJ5QW5kT3Aub3Ioei5iaW5hcnlPck9wKSxzZS5iaW5hcnlPcCksYmluYXJ5T3A6bj0+bi5iaW5hcnlCb29sZWFuLGV4cHJlc3Npb246bj0+bi5iaW5hcnlPcH0pLGxiPUYuY3JlYXRlTGFuZ3VhZ2Uoe3F1ZXJ5VGFnOm49PnoudGFnLm1hcChlPT4oe3R5cGU6XFxcInRhZ2dlZFxcXCIsdmFsdWU6ZX0pKSxxdWVyeUlkOm49PlN0KFxcXCJpZFxcXCIsei5zdHJpbmcpLm1hcCgoW2UsdF0pPT4oe3R5cGU6XFxcImlkXFxcIix2YWx1ZTp0fSkpLHF1ZXJ5VHlwZTpuPT5GLnN0cmluZyhcXFwiQFxcXCIpLnRoZW4oei5pZGVudGlmaWVyKS5tYXAoZT0+KHt0eXBlOlxcXCJ0eXBlZFxcXCIsdmFsdWU6ZX0pKSxxdWVyeVBhdGg6bj0+U3QoRi5yZWdleHAoL2U/cGF0aC9pKS5kZXNjKFxcXCJbZV1wYXRoXFxcIiksei5zdHJpbmcpLm1hcCgoW2UsdF0pPT4oe3R5cGU6XFxcInBhdGhcXFwiLHZhbHVlOnQsZXhhY3Q6ZS50b0xvd2VyQ2FzZSgpPT09XFxcImVwYXRoXFxcIn0pKSxxdWVyeVBhcmVudE9mOm49PlN0KEYucmVnZXhwKC9wYXJlbnRvZnxzdXBlcnRyZWUvaSkuZGVzYyhcXFwicGFyZW50b2ZcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJwYXJlbnQtb2ZcXFwiLGNoaWxkcmVuOnQsaW5jbHVzaXZlOmUudG9Mb3dlckNhc2UoKT09PVxcXCJzdXBlcnRyZWVcXFwifSkpLHF1ZXJ5Q2hpbGRPZjpuPT5TdChGLnJlZ2V4cCgvY2hpbGRvZnxzdWJ0cmVlL2kpLmRlc2MoXFxcImNoaWxkb2ZcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJjaGlsZC1vZlxcXCIscGFyZW50czp0LGluY2x1c2l2ZTplLnRvTG93ZXJDYXNlKCk9PT1cXFwic3VidHJlZVxcXCJ9KSkscXVlcnlTaW1wbGVMaW5rZWQ6bj0+ei5saW5rLm1hcChlPT4oe3R5cGU6XFxcImxpbmtlZFxcXCIsc291cmNlOnt0eXBlOlxcXCJsaW5rXFxcIix2YWx1ZTplfSxkaXJlY3Rpb246XFxcImluY29taW5nXFxcIn0pKSxxdWVyeUxpbmtlZDpuPT5TdChGLnJlZ2V4cCgvbGlua3N0b3xsaW5rZWRmcm9tfGNvbm5lY3RlZC9pKS5kZXNjKFxcXCJjb25uZWN0ZWRcXFwiKSxuLnF1ZXJ5KS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJsaW5rZWRcXFwiLHNvdXJjZTp0LGRpcmVjdGlvbjplLnRvTG93ZXJDYXNlKCk9PVxcXCJsaW5rc3RvXFxcIj9cXFwiaW5jb21pbmdcXFwiOmUudG9Mb3dlckNhc2UoKT09XFxcImxpbmtlZGZyb21cXFwiP1xcXCJvdXRnb2luZ1xcXCI6XFxcImJvdGhcXFwifSkpLHF1ZXJ5RXhpc3RzOm49PlN0KEYucmVnZXhwKC9leGlzdHMvaSkuZGVzYyhcXFwiZXhpc3RzXFxcIiksei5pZGVudGlmaWVyLm9yKHouc3RyaW5nKSkubWFwKChbZSx0XSk9Pih7dHlwZTpcXFwiZmllbGRcXFwiLHZhbHVlOnR9KSkscXVlcnlRdW90ZWRFeHByZXNzaW9uOm49PlN0KEYucmVnZXhwKC9leHByL2kpLmRlc2MoXFxcImV4cHJcXFwiKSxLdS5leHByZXNzaW9uKS5tYXAoKFtlLHRdKT0+KHt0eXBlOlxcXCJleHByZXNzaW9uXFxcIixleHByZXNzaW9uOnR9KSkscXVlcnlSYXdFeHByZXNzaW9uOm49Pkt1LmJpbmFyeUNvbXBhcmUubWFwKGU9Pih7dHlwZTpcXFwiZXhwcmVzc2lvblxcXCIsZXhwcmVzc2lvbjplfSkpLHF1ZXJ5UGFyZW5zOm49Pm4ucXVlcnkudHJpbShGLm9wdFdoaXRlc3BhY2UpLndyYXAoRi5zdHJpbmcoXFxcIihcXFwiKSxGLnN0cmluZyhcXFwiKVxcXCIpKSxxdWVyeU5lZ2F0ZTpuPT5GLnN0cmluZyhcXFwiIVxcXCIpLnNraXAoRi5vcHRXaGl0ZXNwYWNlKS50aGVuKG4ucXVlcnlBdG9tKS5tYXAoZT0+KHt0eXBlOlxcXCJub3RcXFwiLGVsZW1lbnQ6ZX0pKSxxdWVyeUF0b206bj0+Ri5hbHQobi5xdWVyeVBhcmVucyxuLnF1ZXJ5TmVnYXRlLG4ucXVlcnlTaW1wbGVMaW5rZWQsbi5xdWVyeVRhZyxuLnF1ZXJ5VHlwZSxuLnF1ZXJ5SWQsbi5xdWVyeUV4aXN0cyxuLnF1ZXJ5Q2hpbGRPZixuLnF1ZXJ5UGFyZW50T2Ysbi5xdWVyeUxpbmtlZCxuLnF1ZXJ5UGF0aCxuLnF1ZXJ5UXVvdGVkRXhwcmVzc2lvbixuLnF1ZXJ5UmF3RXhwcmVzc2lvbikscXVlcnlBbmRzOm49Pk1uKG4ucXVlcnlBdG9tLHouYmluYXJ5QW5kT3AsKGUsdCxyKT0+KHt0eXBlOlxcXCJhbmRcXFwiLGVsZW1lbnRzOltlLHJdfSkpLHF1ZXJ5T3JzOm49Pk1uKG4ucXVlcnlBbmRzLHouYmluYXJ5T3JPcCwoZSx0LHIpPT4oe3R5cGU6XFxcIm9yXFxcIixlbGVtZW50czpbZSxyXX0pKSxxdWVyeTpuPT5uLnF1ZXJ5T3JzLnRyaW0oRi5vcHRXaGl0ZXNwYWNlKX0pO2Z1bmN0aW9uIE1uKG4sZSx0KXtyZXR1cm4gRi5zZXFNYXAobixGLnNlcShGLm9wdFdoaXRlc3BhY2UsZSxGLm9wdFdoaXRlc3BhY2UsbikubWFueSgpLChyLHMpPT57aWYocy5sZW5ndGg9PTApcmV0dXJuIHI7bGV0IGk9dChyLHNbMF1bMV0sc1swXVszXSk7Zm9yKGxldCBvPTE7bzxzLmxlbmd0aDtvKyspaT10KGksc1tvXVsxXSxzW29dWzNdKTtyZXR1cm4gaX0pfWZ1bmN0aW9uIFN0KG4sZSl7bGV0IHQ9dHlwZW9mIG49PVxcXCJzdHJpbmdcXFwiP0Yuc3RyaW5nKG4pOm47cmV0dXJuIEYuc2VxTWFwKHQuc2tpcChGLm9wdFdoaXRlc3BhY2UpLGUudHJpbShGLm9wdFdoaXRlc3BhY2UpLndyYXAoRi5zdHJpbmcoXFxcIihcXFwiKSxGLnN0cmluZyhcXFwiKVxcXCIpKSwocixzKT0+W3Isc10pfWZ1bmN0aW9uIE9mKG4sLi4uZSl7cmV0dXJuIEYuY3VzdG9tKCh0LHIpPT4ocyxpKT0+e2xldCBvPW4uXyhzLGkpO2lmKCFvLnN0YXR1cylyZXR1cm4gbztmb3IobGV0IGEgb2YgZSl7bGV0IHU9YShvLnZhbHVlKS5fKHMsby5pbmRleCk7aWYoIXUuc3RhdHVzKXJldHVybiBvO289dX1yZXR1cm4gb30pfXZhciBadD1WcihucygpKTtmdW5jdGlvbiBHdChuLGUpe2xldCB0PXt9O2ZvcihsZXRbcixzXW9mIE9iamVjdC5lbnRyaWVzKG4pKXRbcl09ZShzKTtyZXR1cm4gdH12YXIgX247KHI9PntyLk5PT1BfTk9STUFMSVpFUj1zPT5zO2Z1bmN0aW9uIGUocyl7bGV0IGk9ZXQud3JhcFZhbHVlKHMpO2lmKCFpKXJldHVybiBudWxsO3N3aXRjaChpPT1udWxsP3ZvaWQgMDppLnR5cGUpe2Nhc2VcXFwiYXJyYXlcXFwiOnJldHVybiBpLnZhbHVlLm1hcChyLmpzb24pO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gR3QoaS52YWx1ZSxyLmpzb24pO2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJueyRfdHlwZTpcXFwiZGF0ZVxcXCIsdmFsdWU6aS52YWx1ZS50b0lTTyh7aW5jbHVkZU9mZnNldDohMH0pfTtjYXNlXFxcImxpbmtcXFwiOnJldHVybnskX3R5cGU6XFxcImxpbmtcXFwiLHZhbHVlOmkudmFsdWUudG9PYmplY3QoKX07Y2FzZVxcXCJkdXJhdGlvblxcXCI6cmV0dXJueyRfdHlwZTpcXFwiZHVyYXRpb25cXFwiLHZhbHVlOmkudmFsdWUudG9JU08oKX07Y2FzZVxcXCJib29sZWFuXFxcIjpjYXNlXFxcIm51bWJlclxcXCI6Y2FzZVxcXCJzdHJpbmdcXFwiOnJldHVybiBpLnZhbHVlO2Nhc2VcXFwiZnVuY3Rpb25cXFwiOmNhc2VcXFwibnVsbFxcXCI6cmV0dXJuIG51bGx9fXIuanNvbj1lO2Z1bmN0aW9uIHQocyxpPXIuTk9PUF9OT1JNQUxJWkVSKXtpZihzPT1udWxsKXJldHVybiBudWxsO2lmKEFycmF5LmlzQXJyYXkocykpcmV0dXJuIGkocy5tYXAobz0+ci52YWx1ZShvLGkpKSk7aWYodHlwZW9mIHM9PVxcXCJvYmplY3RcXFwiKXtpZighKFxcXCIkX3R5cGVcXFwiaW4gcykpcmV0dXJuIEd0KHMsYT0+ci52YWx1ZShhLGkpKTtsZXQgbz1zLiRfdHlwZTtzd2l0Y2gobyl7Y2FzZVxcXCJkYXRlXFxcIjpyZXR1cm4gaShxLmZyb21JU08ocy52YWx1ZSx7c2V0Wm9uZTohMH0pKTtjYXNlXFxcImR1cmF0aW9uXFxcIjpyZXR1cm4gaShCLmZyb21JU08ocy52YWx1ZSkpO2Nhc2VcXFwibGlua1xcXCI6cmV0dXJuIGkoT2UuZnJvbU9iamVjdChzLnZhbHVlKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBzZXJpYWxpemVkIHR5cGUgJyR7b30nIWApfX1yZXR1cm4gaShzKX1yLnZhbHVlPXR9KShfbnx8KF9uPXt9KSk7ZnVuY3Rpb24gV3Uobil7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sbix7dmFsdWU6X24uanNvbihuLnZhbHVlKX0pfWZ1bmN0aW9uICRzKG4sZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5tYXAodD0+JHModCxlKSk6e2tleTpuLmtleSxyYXc6bi52YWx1ZSx2YWx1ZTpOZihuLnZhbHVlKSxwb3NpdGlvbjp7bGluZTplLHN0YXJ0Om4uc3RhcnQsc3RhcnRWYWx1ZTpuLnN0YXJ0VmFsdWUsZW5kOm4uZW5kfSx3cmFwcGluZzpuLndyYXBwaW5nfX12YXIgUHM9T2JqZWN0LmZyZWV6ZSh7XFxcIltcXFwiOlxcXCJdXFxcIixcXFwiKFxcXCI6XFxcIilcXFwifSk7ZnVuY3Rpb24gSWYobixlLHQscil7bGV0IHM9MCxpPSExO2ZvcihsZXQgbz1lO288bi5sZW5ndGg7bysrKXtsZXQgYT1uLmNoYXJBdChvKTtpZihhPT1cXFwiXFxcXFxcXFxcXFwiKXtpPSFpO2NvbnRpbnVlfWlmKGkpe2k9ITE7Y29udGludWV9aWYoYT09dD9zKys6YT09ciYmcy0tLHM8MClyZXR1cm57dmFsdWU6bi5zdWJzdHJpbmcoZSxvKS50cmltKCksZW5kSW5kZXg6bysxfTtpPSExfX1mdW5jdGlvbiBIdShuLGUpe2xldCB0PW4uaW5kZXhPZihcXFwiOjpcXFwiLGUpO2lmKCEodDwwKSlyZXR1cm57a2V5Om4uc3Vic3RyaW5nKGUsdCkudHJpbSgpLHZhbHVlSW5kZXg6dCsyfX1mdW5jdGlvbiBMZihuLGUpe2xldCB0PW4uY2hhckF0KGUpLHI9SHUobixlKzEpO2lmKHI9PT12b2lkIDApcmV0dXJuO2ZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhQcykuY29uY2F0KE9iamVjdC52YWx1ZXMoUHMpKSlpZihyLmtleS5pbmNsdWRlcyhpKSlyZXR1cm47bGV0IHM9SWYobixyLnZhbHVlSW5kZXgsdCxQc1t0XSk7aWYocyE9PXZvaWQgMClyZXR1cm57a2V5OnIua2V5LHZhbHVlOnMudmFsdWUsc3RhcnQ6ZSxzdGFydFZhbHVlOnIudmFsdWVJbmRleCxlbmQ6cy5lbmRJbmRleCx3cmFwcGluZzp0fX1mdW5jdGlvbiBOZihuKXtpZihuLnRyaW0oKT09XFxcIlxcXCIpcmV0dXJuIG51bGw7bGV0IGU9ei5pbmxpbmVGaWVsZC5wYXJzZShuKTtyZXR1cm4gZS5zdGF0dXM/ZS52YWx1ZTpufWZ1bmN0aW9uIEp1KG4sZT0hMSl7bGV0IHQ9W107Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKFBzKSl7bGV0IGk9bi5pbmRleE9mKHMpO2Zvcig7aT49MDspe2xldCBvPUxmKG4saSk7aWYoIW8pe2k9bi5pbmRleE9mKHMsaSsxKTtjb250aW51ZX10LnB1c2gobyksaT1uLmluZGV4T2YocyxvLmVuZCl9fWUmJih0PXQuY29uY2F0KHFmKG4pKSksdC5zb3J0KChzLGkpPT5zLnN0YXJ0LWkuc3RhcnQpO2xldCByPVtdO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKShzPT0wfHxyW3IubGVuZ3RoLTFdLmVuZDx0W3NdLnN0YXJ0KSYmci5wdXNoKHRbc10pO3JldHVybiByfXZhciBBZj1adC5hbHQoWnQucmVnZXhwKG5ldyBSZWdFeHAoRm4oKSxcXFwidVxcXCIpKSxadC5yZWdleHAoL1swLTlcXFxccHtMZXR0ZXJ9XFxcXHdcXFxcc18vLV0rL3UpKS5tYW55KCkubWFwKG49Pm4uam9pbihcXFwiXFxcIikpLE1mPVp0LnJlZ2V4cCgvW14wLTlcXFxcd1xcXFxwe0xldHRlcn1dKi91KS50aGVuKEFmKS5za2lwKFp0LnJlZ2V4cCgvW19cXFxcKn5gXSovdSkpO2Z1bmN0aW9uIHp1KG4pe2xldCBlPUh1KG4sMCk7aWYoIWUpcmV0dXJuO2xldCB0PU1mLnBhcnNlKGUua2V5KTtpZih0LnN0YXR1cylyZXR1cm57a2V5OnQudmFsdWUsdmFsdWU6bi5zdWJzdHJpbmcoZS52YWx1ZUluZGV4KS50cmltKCksc3RhcnQ6MCxzdGFydFZhbHVlOmUudmFsdWVJbmRleCxlbmQ6bi5sZW5ndGh9fXZhciBfZj0vXFxcXHV7Mjc5NX1cXFxccyooXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn0pL3UsQmY9Lyg/OlxcXFx1ezFGNEM1fXxcXFxcdXsxRjRDNn18XFxcXHV7MUY1RDN9XFxcXHV7RkUwRn0/KVxcXFxzKihcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfSkvdSxQZj0vXFxcXHV7MjcwNX1cXFxccyooXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn0pL3UsJGY9L1tcXFxcdXsyM0YzfVxcXFx1ezIzMUJ9XVxcXFxzKihcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfSkvdSxSZj0vXFxcXHV7MUY2RUJ9XFxcXHMqKFxcXFxkezR9LVxcXFxkezJ9LVxcXFxkezJ9KS91LGpmPVt7cmVnZXg6X2Ysa2V5OlxcXCJjcmVhdGVkXFxcIn0se3JlZ2V4OlJmLGtleTpcXFwic3RhcnRcXFwifSx7cmVnZXg6JGYsa2V5OlxcXCJzY2hlZHVsZWRcXFwifSx7cmVnZXg6QmYsa2V5OlxcXCJkdWVcXFwifSx7cmVnZXg6UGYsa2V5OlxcXCJjb21wbGV0aW9uXFxcIn1dO2Z1bmN0aW9uIHFmKG4pe2xldCBlPVtdO2ZvcihsZXR7cmVnZXg6dCxrZXk6cn1vZiBqZil7bGV0IHM9dC5leGVjKG4pO3MmJmUucHVzaCh7a2V5OnIsdmFsdWU6c1sxXSxzdGFydDpzLmluZGV4LHN0YXJ0VmFsdWU6cy5pbmRleCsxLGVuZDpzLmluZGV4K3NbMF0ubGVuZ3RoLHdyYXBwaW5nOlxcXCJlbW9qaS1zaG9ydGhhbmRcXFwifSl9cmV0dXJuIGV9dmFyIFJzOyh0PT57ZnVuY3Rpb24gbihyKXtsZXQgcz1ldC53cmFwVmFsdWUoZSk7aWYoIXMpcmV0dXJuIG51bGw7c3dpdGNoKHMudHlwZSl7Y2FzZVxcXCJzdHJpbmdcXFwiOmNhc2VcXFwiYm9vbGVhblxcXCI6Y2FzZVxcXCJudWxsXFxcIjpjYXNlXFxcIm51bWJlclxcXCI6cmV0dXJuIHMudmFsdWU7Y2FzZVxcXCJhcnJheVxcXCI6cmV0dXJuIHMudmFsdWUubWFwKG4pO2Nhc2VcXFwiZGF0ZVxcXCI6cmV0dXJuIHMudmFsdWUudG9JU08oKTtjYXNlXFxcImR1cmF0aW9uXFxcIjpyZXR1cm4gcy52YWx1ZS50b0h1bWFuKCk7Y2FzZVxcXCJmdW5jdGlvblxcXCI6cmV0dXJuIG51bGw7Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm4gcy52YWx1ZS5tYXJrZG93bigpO2Nhc2VcXFwib2JqZWN0XFxcIjpyZXR1cm4gR3Qocy52YWx1ZSxuKX19dC55YW1sPW47ZnVuY3Rpb24gZShyKXtpZihyPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiByPT1cXFwib2JqZWN0XFxcIilpZihBcnJheS5pc0FycmF5KHIpKXtsZXQgcz1bXTtmb3IobGV0IGkgb2YgcilzLnB1c2goZShpKSk7cmV0dXJuIHN9ZWxzZXtpZihyIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gcS5mcm9tSlNEYXRlKHIpO3tsZXQgcz1yLGk9e307Zm9yKGxldCBvIGluIHMpaVtvXT1lKHNbb10pO3JldHVybiBpfX1lbHNle2lmKHR5cGVvZiByPT1cXFwibnVtYmVyXFxcIilyZXR1cm4gcjtpZih0eXBlb2Ygcj09XFxcImJvb2xlYW5cXFwiKXJldHVybiByO2lmKHR5cGVvZiByPT1cXFwic3RyaW5nXFxcIil7bGV0IHM9ei5kYXRlLnBhcnNlKHIpO2lmKHMuc3RhdHVzKXJldHVybiBzLnZhbHVlO2xldCBpPXouZHVyYXRpb24ucGFyc2Uocik7aWYoaS5zdGF0dXMpcmV0dXJuIGkudmFsdWU7bGV0IG89ei5saW5rLnBhcnNlKHIpO3JldHVybiBvLnN0YXR1cz9vLnZhbHVlOnJ9fXJldHVybiBudWxsfXQubGl0ZXJhbD1lfSkoUnN8fChScz17fSkpO3ZhciBWZj0vYGBgeWFtbDpkYXRhL2ksVWY9L14oPzpgYGB8fn5+KSguKikkL2ltLEtmPS9eW1xcXFxzPl0qKFxcXFxkK1xcXFwufFxcXFxkK1xcXFwpfFxcXFwqfC18XFxcXCspXFxcXHMqKFxcXFxbLnswLDF9XFxcXF0pP1xcXFxzKiguKikkL211O2Z1bmN0aW9uIFp1KG4sZSx0LHIpe2xldHtsaW5lczpzLG1ldGFkYXRhOmksZnJvbnRtYXR0ZXI6byxzZWN0aW9uczphfT1GbyhuLGUsdCk7cmV0dXJuIG5ldyBwbyhuLHIscy5sZW5ndGgsaSxhLG8pLmJ1aWxkKCl9ZnVuY3Rpb24gRm8obixlLHQpe3ZhciBiLGcsRCxULEksTix5LHcsdix4LEMsVixqLFksZWUsYWU7bGV0IHI9dC5mcm9udG1hdHRlcj9HdSh0LmZyb250bWF0dGVyKTp2b2lkIDAscz1lLnNwbGl0KC9cXFxcclxcXFxufFxcXFxyfFxcXFxuLyksaT1uZXcgJGUsbz1bXSxhPShiPXQuaGVhZGluZ3MpIT1udWxsP2I6W107YS5zb3J0KChPLCQpPT5PLnBvc2l0aW9uLnN0YXJ0LmxpbmUtJC5wb3NpdGlvbi5zdGFydC5saW5lKTtsZXQgdT1uZXcganMuZGVmYXVsdCh2b2lkIDAsKE8sJCk9Pk8tJCk7Zm9yKGxldCBPPTA7TzxhLmxlbmd0aDtPKyspe2xldCAkPWFbT10sUT0kLnBvc2l0aW9uLnN0YXJ0LmxpbmUsdWU9Tz09YS5sZW5ndGgtMT9zLmxlbmd0aDphW08rMV0ucG9zaXRpb24uc3RhcnQubGluZSxEZT1uZXcgX3IoUSx1ZSwkLmhlYWRpbmcsJC5sZXZlbCxPKzEpO3Uuc2V0KFEsRGUpfWlmKHUuc2l6ZT09MCl7aWYoIVl1KHMsMCxzLmxlbmd0aCkpe2xldCBPPW5ldyBfcigwLHMubGVuZ3RoLEVuKG4pLDEsMCk7dS5zZXQoMCxPKX19ZWxzZXtsZXQgTz0oZz11LmdldFBhaXJPck5leHRIaWdoZXIoMCkpPT1udWxsP3ZvaWQgMDpnWzFdO2lmKE8uc3RhcnQ+MCYmIVl1KHMsMCxPLnN0YXJ0KSl7bGV0ICQ9bmV3IF9yKDAsTy5zdGFydCxFbihuKSwxLDApO3Uuc2V0KDAsJCl9fWxldCBsPW5ldyBqcy5kZWZhdWx0KHZvaWQgMCwoTywkKT0+Ty0kKSxmPTE7Zm9yKGxldCBPIG9mIHQuc2VjdGlvbnN8fFtdKXtpZihPLnR5cGU9PT1cXFwiaGVhZGluZ1xcXCIpY29udGludWU7bGV0ICQ9Ty5wb3NpdGlvbi5zdGFydC5saW5lLFE9Ty5wb3NpdGlvbi5lbmQubGluZSsxLHVlPXNbJF07aWYoTy50eXBlPT09XFxcImxpc3RcXFwiKWwuc2V0KCQsbmV3IERvKCQsUSxmKyssTy5pZCkpO2Vsc2UgaWYoTy50eXBlPT1cXFwiY29kZVxcXCImJlZmLnRlc3QodWUpKXtsZXQgRGU9cy5zbGljZSgkKzEsUS0xKS5qb2luKGBcXG5gKS5yZXBsYWNlKC9cXFxcdC9nbSxcXFwiICBcXFwiKSxSZT1HdShjbyhEZSkpO2wuc2V0KCQsbmV3IHlvKCQsUSxmKyssUmUsTy5pZCkpfWVsc2UgaWYoTy50eXBlPT09XFxcImNvZGVcXFwiKXtsZXQgRGU9dWUubWF0Y2goVWYpO2lmKCFEZSlsLnNldCgkLG5ldyBxcygkLFEsZisrLFtdLFxcXCJpbmRlbnRcXFwiLCQsUSxPLmlkKSk7ZWxzZXtsZXQgUmU9RGUubGVuZ3RoPjEmJkRlWzFdP0RlWzFdLnNwbGl0KFxcXCIsXFxcIik6W107bC5zZXQoJCxuZXcgcXMoJCxRLGYrKyxSZSxcXFwiZmVuY2VkXFxcIiwkKzEsUS0xLE8uaWQpKX19ZWxzZSBsLnNldCgkLG5ldyBnbygkLFEsZisrLE8udHlwZSxPLmlkKSl9Zm9yKGxldCBPIG9mIGwudmFsdWVzKCkpKEQ9Y3QoTy5zdGFydCx1KSk9PW51bGx8fEQuYmxvY2soTyk7bGV0IGQ9L15bXFxcXHRcXFxcZlxcXFx2IF0qW1xcXFwtK1xcXFwqXVxcXFxzKFxcXFxbLlxcXFxdXFxcXHMpPy8sbT0vXig+P1xcXFxzPykqKFxcXFx0fFxcXFxzKSovZyxoPW5ldyBqcy5kZWZhdWx0KHZvaWQgMCwoTywkKT0+Ty0kKTtmb3IobGV0IE8gb2YgdC5saXN0SXRlbXN8fFtdKXtsZXQgUT1zW08ucG9zaXRpb24uc3RhcnQubGluZV0ubWF0Y2goS2YpLHVlLERlO1EmJih1ZT1RWzFdLERlPVFbM10pO2xldCBSZT1uZXcgYm8oTy5wb3NpdGlvbi5zdGFydC5saW5lLE8ucG9zaXRpb24uZW5kLmxpbmUrMSxPLnBhcmVudCx1ZSxPLmlkLE8udGFzayxEZSk7aC5zZXQoUmUuc3RhcnQsUmUpfWZvcihsZXQgTyBvZiBoLnZhbHVlcygpKWlmKE8ucGFyZW50TGluZTwwKXtsZXQgJD1sLmdldCgtTy5wYXJlbnRMaW5lKTtpZighJHx8JC50eXBlIT09XFxcImxpc3RcXFwiKWNvbnRpbnVlOyQuaXRlbXMucHVzaChPKX1lbHNlKFQ9aC5nZXQoTy5wYXJlbnRMaW5lKSk9PW51bGx8fFQuZWxlbWVudHMucHVzaChPKTtmb3IobGV0IE8gb2YoST10LnRhZ3MpIT1udWxsP0k6W10pe2xldCAkPU8udGFnLnN0YXJ0c1dpdGgoXFxcIiNcXFwiKT9PLnRhZzpcXFwiI1xcXCIrTy50YWcsUT1PLnBvc2l0aW9uLnN0YXJ0LmxpbmU7aS50YWcoJCksKE49Y3QoUSx1KSk9PW51bGx8fE4ubWV0YWRhdGEudGFnKCQpLCh5PWN0KFEsbCkpPT1udWxsfHx5Lm1ldGFkYXRhLnRhZygkKSwodz1jdChRLGgpKT09bnVsbHx8dy5tZXRhZGF0YS50YWcoJCl9aWYodC5mcm9udG1hdHRlcilmb3IobGV0IE8gb2YgV2YodC5mcm9udG1hdHRlcikpe2xldCAkPU8uc3RhcnRzV2l0aChcXFwiI1xcXCIpP086XFxcIiNcXFwiK087aS50YWcoJCl9Zm9yKGxldCBPIG9mKHY9dC5saW5rcykhPW51bGw/djpbXSl7bGV0ICQ9T2UuaW5mZXIoTy5saW5rKSxRPU8ucG9zaXRpb24uc3RhcnQubGluZTtpLmxpbmsoJCksKHg9Y3QoUSx1KSk9PW51bGx8fHgubWV0YWRhdGEubGluaygkKSwoQz1jdChRLGwpKT09bnVsbHx8Qy5tZXRhZGF0YS5saW5rKCQpLChWPWN0KFEsaCkpPT1udWxsfHxWLm1ldGFkYXRhLmxpbmsoJCl9Zm9yKGxldCBPIG9mKGo9dC5mcm9udG1hdHRlckxpbmtzKSE9bnVsbD9qOltdKWkubGluayhPZS5pbmZlcihPLmxpbmssITEsTy5kaXNwbGF5VGV4dCkpO2ZvcihsZXQgTyBvZiBFbyhzKSl7bGV0ICQ9Ty5wb3NpdGlvbi5saW5lO2kuaW5saW5lRmllbGQoTyksKFk9Y3QoJCx1KSk9PW51bGx8fFkubWV0YWRhdGEuaW5saW5lRmllbGQoTyksKGVlPWN0KCQsbCkpPT1udWxsfHxlZS5tZXRhZGF0YS5pbmxpbmVGaWVsZChPKSwoYWU9Y3QoJCxoKSk9PW51bGx8fGFlLm1ldGFkYXRhLmlubGluZUZpZWxkKE8pfXJldHVybiBvLnB1c2goLi4udS52YWx1ZXMoKSkse2xpbmVzOnMsZnJvbnRtYXR0ZXI6cixtZXRhZGF0YTppLHNlY3Rpb25zOm99fWZ1bmN0aW9uIFl1KG4sZSx0KXtmb3IobGV0IHI9ZTtyPHQ7cisrKWlmKG5bcl0udHJpbSgpIT09XFxcIlxcXCIpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24qRW8obil7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCB0PW5bZV07aWYodC5sZW5ndGg+MzI3Njh8fCF0LmluY2x1ZGVzKFxcXCI6OlxcXCIpKWNvbnRpbnVlO2xldCByPUp1KHQpO2lmKHIubGVuZ3RoPjApZm9yKGxldCBzIG9mIHIpeWllbGQgJHMocyxlKTtlbHNle2xldCBzPXp1KHQpO3MmJih5aWVsZCAkcyhzLGUpKX19fWZ1bmN0aW9uIEd1KG4pe2xldCBlPXt9O2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHI9blt0XTtlW3QudG9Mb3dlckNhc2UoKV09e2tleTp0LHZhbHVlOl9uLmpzb24oUnMubGl0ZXJhbChyKSkscmF3OnJ9fXJldHVybiBlfWZ1bmN0aW9uIGN0KG4sZSl7dmFyIHI7bGV0IHQ9KHI9ZS5nZXRQYWlyT3JOZXh0TG93ZXIobikpPT1udWxsP3ZvaWQgMDpyWzFdO2lmKHQmJnQuZW5kPj1uKXJldHVybiB0fWZ1bmN0aW9uIFdmKG4pe3JldHVybiBPYmplY3Qua2V5cyhuKS5maWx0ZXIodD0+dC50b0xvd2VyQ2FzZSgpPT1cXFwidGFnc1xcXCJ8fHQudG9Mb3dlckNhc2UoKT09XFxcInRhZ1xcXCIpLm1hcCh0PT5RdShuW3RdLC9bLFxcXFxzXSsvKSkucmVkdWNlKCh0LHIpPT50LmNvbmNhdChyKSxbXSkubWFwKHQ9PnQuc3RhcnRzV2l0aChcXFwiI1xcXCIpP3Q6XFxcIiNcXFwiK3QpfWZ1bmN0aW9uIFF1KG4sZSl7cmV0dXJuIG49PW51bGx8fG49PW51bGw/W106QXJyYXkuaXNBcnJheShuKT9uLmZpbHRlcih0PT4hIXQpLm1hcCh0PT5RdSh0LGUpKS5yZWR1Y2UoKHQscik9PnQuY29uY2F0KHIpLFtdKTooXFxcIlxcXCIrbikuc3BsaXQoZSkuZmlsdGVyKHQ9PiEhdCkubWFwKHQ9PnQudHJpbSgpKS5maWx0ZXIodD0+dC5sZW5ndGg+MCl9dmFyICRlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50YWdzPW5ldyBTZXQ7dGhpcy5saW5rcz1bXTt0aGlzLmlubGluZUZpZWxkcz17fX10YWcoZSl7dGhpcy50YWdzLmFkZChlKX1saW5rKGUpe3RoaXMubGlua3MuZmluZCh0PT50LmVxdWFscyhlKSl8fHRoaXMubGlua3MucHVzaChlKX1pbmxpbmVGaWVsZChlKXtsZXQgdD1lLmtleS50b0xvd2VyQ2FzZSgpO09iamVjdC5rZXlzKHRoaXMuaW5saW5lRmllbGRzKS5zb21lKHI9PnIudG9Mb3dlckNhc2UoKT09dCl8fCh0aGlzLmlubGluZUZpZWxkc1t0XT1lKX1maW5pc2hUYWdzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy50YWdzKX1maW5pc2hMaW5rcygpe3JldHVybiB0aGlzLmxpbmtzLm1hcChlPT5lLnRvT2JqZWN0KCkpfWZpbmlzaElubGluZUZpZWxkcygpe3JldHVybiBHdCh0aGlzLmlubGluZUZpZWxkcyxXdSl9fSxwbz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGksbyl7dGhpcy5wYXRoPWU7dGhpcy5zdGF0cz10O3RoaXMubGVuZ3RoPXI7dGhpcy5tZXRhZGF0YT1zO3RoaXMuc2VjdGlvbnM9aTt0aGlzLmZyb250bWF0dGVyPW99YnVpbGQoKXtyZXR1cm57JHBhdGg6dGhpcy5wYXRoLCRjdGltZTp0aGlzLnN0YXRzLmN0aW1lLCRtdGltZTp0aGlzLnN0YXRzLm10aW1lLCRzaXplOnRoaXMuc3RhdHMuc2l6ZSwkZXh0ZW5zaW9uOlZhKHRoaXMucGF0aCksJHBvc2l0aW9uOntzdGFydDowLGVuZDp0aGlzLmxlbmd0aH0sJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkaW5maWVsZHM6dGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSwkc2VjdGlvbnM6dGhpcy5zZWN0aW9ucy5tYXAoZT0+ZS5idWlsZCgpKSwkZnJvbnRtYXR0ZXI6dGhpcy5mcm9udG1hdHRlcn19fSxfcj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGkpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMudGl0bGU9cjt0aGlzLmxldmVsPXM7dGhpcy5vcmRpbmFsPWk7dGhpcy5ibG9ja3M9W107dGhpcy5tZXRhZGF0YT1uZXcgJGV9YmxvY2soZSl7dGhpcy5ibG9ja3MucHVzaChlKX1idWlsZCgpe3JldHVybnskdGl0bGU6dGhpcy50aXRsZSwkb3JkaW5hbDp0aGlzLm9yZGluYWwsJGxldmVsOnRoaXMubGV2ZWwsJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkcG9zaXRpb246e3N0YXJ0OnRoaXMuc3RhcnQsZW5kOnRoaXMuZW5kfSwkYmxvY2tzOnRoaXMuYmxvY2tzLm1hcChlPT5lLmJ1aWxkKCkpfX19LERvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLHMpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMub3JkaW5hbD1yO3RoaXMuYmxvY2tJZD1zO3RoaXMudHlwZT1cXFwibGlzdFxcXCI7dGhpcy5tZXRhZGF0YT1uZXcgJGU7dGhpcy5pdGVtcz1bXX1idWlsZCgpe3JldHVybnskb3JkaW5hbDp0aGlzLm9yZGluYWwsJHBvc2l0aW9uOntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH0sJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkdHlwZTpcXFwibGlzdFxcXCIsJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRlbGVtZW50czp0aGlzLml0ZW1zLm1hcChlPT5lLmJ1aWxkKCkpfX19LHFzPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLHMsaSxvLGEsdSl7dGhpcy5zdGFydD1lO3RoaXMuZW5kPXQ7dGhpcy5vcmRpbmFsPXI7dGhpcy5sYW5ndWFnZXM9czt0aGlzLnN0eWxlPWk7dGhpcy5jb250ZW50U3RhcnQ9bzt0aGlzLmNvbnRlbnRFbmQ9YTt0aGlzLmJsb2NrSWQ9dTt0aGlzLnR5cGU9XFxcImNvZGVibG9ja1xcXCI7dGhpcy5tZXRhZGF0YT1uZXcgJGV9YnVpbGQoKXtyZXR1cm57JHR5cGU6XFxcImNvZGVibG9ja1xcXCIsJG9yZGluYWw6dGhpcy5vcmRpbmFsLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRsYW5ndWFnZXM6dGhpcy5sYW5ndWFnZXMsJHN0eWxlOnRoaXMuc3R5bGUsJGNvbnRlbnRQb3NpdGlvbjp7c3RhcnQ6dGhpcy5jb250ZW50U3RhcnQsZW5kOnRoaXMuY29udGVudEVuZH19fX0seW89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIscyxpKXt0aGlzLnN0YXJ0PWU7dGhpcy5lbmQ9dDt0aGlzLm9yZGluYWw9cjt0aGlzLmRhdGE9czt0aGlzLmJsb2NrSWQ9aTt0aGlzLnR5cGU9XFxcImRhdGFibG9ja1xcXCI7dGhpcy5tZXRhZGF0YT1uZXcgJGV9YnVpbGQoKXtyZXR1cm57JHR5cGU6XFxcImRhdGFibG9ja1xcXCIsJG9yZGluYWw6dGhpcy5vcmRpbmFsLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJGJsb2NrSWQ6dGhpcy5ibG9ja0lkLCRkYXRhOnRoaXMuZGF0YX19fSxnbz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixzLGkpe3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10O3RoaXMub3JkaW5hbD1yO3RoaXMudHlwZT1zO3RoaXMuYmxvY2tJZD1pO3RoaXMubWV0YWRhdGE9bmV3ICRlfWJ1aWxkKCl7cmV0dXJueyR0eXBlOnRoaXMudHlwZSwkb3JkaW5hbDp0aGlzLm9yZGluYWwsJHBvc2l0aW9uOntzdGFydDp0aGlzLnN0YXJ0LGVuZDp0aGlzLmVuZH0sJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJHRhZ3M6dGhpcy5tZXRhZGF0YS5maW5pc2hUYWdzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkYmxvY2tJZDp0aGlzLmJsb2NrSWR9fX0sYm89Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIscyxpLG8sYSl7dGhpcy5zdGFydD1lO3RoaXMuZW5kPXQ7dGhpcy5wYXJlbnRMaW5lPXI7dGhpcy5zeW1ib2w9czt0aGlzLmJsb2NrSWQ9aTt0aGlzLnN0YXR1cz1vO3RoaXMudGV4dD1hO3RoaXMubWV0YWRhdGE9bmV3ICRlO3RoaXMuZWxlbWVudHM9W119YnVpbGQoKXtyZXR1cm57JHBhcmVudExpbmU6dGhpcy5wYXJlbnRMaW5lLCRwb3NpdGlvbjp7c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9LCRibG9ja0lkOnRoaXMuYmxvY2tJZCwkZWxlbWVudHM6dGhpcy5lbGVtZW50cy5tYXAoZT0+ZS5idWlsZCgpKSwkdHlwZTp0aGlzLnN0YXR1cz9cXFwidGFza1xcXCI6XFxcImxpc3RcXFwiLCRpbmZpZWxkczp0aGlzLm1ldGFkYXRhLmZpbmlzaElubGluZUZpZWxkcygpLCR0YWdzOnRoaXMubWV0YWRhdGEuZmluaXNoVGFncygpLCRsaW5rczp0aGlzLm1ldGFkYXRhLmZpbmlzaExpbmtzKCksJHN0YXR1czp0aGlzLnN0YXR1cywkc3ltYm9sOnRoaXMuc3ltYm9sLCR0ZXh0OnRoaXMudGV4dH19fTtmdW5jdGlvbiBYdShuLGUsdCxyKXt2YXIgbztsZXQgcz1uZXcgVG8obixyKSxpPUpTT04ucGFyc2UoZSk7Zm9yKGxldCBhIG9mIGkubm9kZXMpaWYoYS50eXBlIT1cXFwiZ3JvdXBcXFwiKWlmKGEudHlwZT09XFxcInRleHRcXFwiKXtsZXR7ZnJvbnRtYXR0ZXI6dSxtZXRhZGF0YTpsLGxpbmVzOmYsc2VjdGlvbnM6ZH09Rm8obixhLnRleHQsdC5jYWNoZXNbYS5pZF0pLG09bmV3IFZzKG4sYS5pZCxhLHUpO2QuZm9yRWFjaChoPT5tLnNlY3Rpb24oaCkpLHMuY2FyZChtKTtmb3IobGV0IGggaW4gbC50YWdzKXMubWV0YWRhdGEudGFnKGgpO2ZvcihsZXQgaCBvZihvPWwubGlua3MpIT1udWxsP286W10pcy5tZXRhZGF0YS5saW5rKGgpO2ZvcihsZXQgaCBvZiBFbyhmKSlzLm1ldGFkYXRhLmlubGluZUZpZWxkKGgpfWVsc2V7bGV0IHU9bmV3IFZzKG4sYS5pZCxhKTtzLmNhcmQodSl9cmV0dXJuIHMuYnVpbGQoKX12YXIgd289Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMucGF0aD1lO3RoaXMuaWQ9dDt0aGlzLm5vZGVKc29uPXI7dGhpcy5tZXRhZGF0YT1uZXcgJGV9YnVpbGQoKXtyZXR1cm57JGZpbGU6dGhpcy5wYXRoLCRpZDp0aGlzLmlkLCRwb3NpdGlvbjp7eDp0aGlzLm5vZGVKc29uLngseTp0aGlzLm5vZGVKc29uLnl9LCRkaW1lbnNpb25zOnt3aWR0aDp0aGlzLm5vZGVKc29uLndpZHRoLGhlaWdodDp0aGlzLm5vZGVKc29uLmhlaWdodH0sJGNvbG9yOnRoaXMubm9kZUpzb24uY29sb3IsJGxpbms6T2UuZmlsZSh0aGlzLnBhdGgpLndpdGhCbG9jayh0aGlzLmlkKS50b09iamVjdCgpfX19LFZzPWNsYXNzIGV4dGVuZHMgd297Y29uc3RydWN0b3IodCxyLHMsaSl7c3VwZXIodCxyLHMpO3RoaXMucGF0aD10O3RoaXMuaWQ9cjt0aGlzLm5vZGVKc29uPXM7dGhpcy5mcm9udG1hdHRlcj1pO3RoaXMuc2VjdGlvbnM9W119c2VjdGlvbih0KXtyZXR1cm4gdGhpcy5zZWN0aW9ucy5wdXNoKHQpLHR9YnVpbGQoKXtzd2l0Y2godGhpcy5ub2RlSnNvbi50eXBlKXtjYXNlXFxcInRleHRcXFwiOnJldHVybiB5ZShSKHt9LHN1cGVyLmJ1aWxkKCkpLHskaW5maWVsZHM6dGhpcy5tZXRhZGF0YS5maW5pc2hJbmxpbmVGaWVsZHMoKSwkZnJvbnRtYXR0ZXI6dGhpcy5mcm9udG1hdHRlciwkc2VjdGlvbnM6dGhpcy5zZWN0aW9ucy5tYXAodD0+dC5idWlsZCgpKSwkdGFnczp0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSwkbGlua3M6dGhpcy5tZXRhZGF0YS5maW5pc2hMaW5rcygpLCR0eXBlOlxcXCJ0ZXh0LWNhcmRcXFwiLCRjb2xvcjp0aGlzLm5vZGVKc29uLmNvbG9yfSk7Y2FzZVxcXCJmaWxlXFxcIjpyZXR1cm4geWUoUih7fSxzdXBlci5idWlsZCgpKSx7JGxpbmtlZEZpbGU6dGhpcy5ub2RlSnNvbi5maWxlfSk7Y2FzZVxcXCJsaW5rXFxcIjpyZXR1cm4geWUoUih7fSxzdXBlci5idWlsZCgpKSx7JHVybDp0aGlzLm5vZGVKc29uLnVybH0pfX19LFRvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wYXRoPWU7dGhpcy5zdGF0cz10O3RoaXMuY2FyZHM9W107dGhpcy5tZXRhZGF0YT1uZXcgJGV9Y2FyZChlKXtyZXR1cm4gdGhpcy5jYXJkcy5wdXNoKGUpLGV9YnVpbGQoKXtyZXR1cm57JGNhcmRzOnRoaXMuY2FyZHMubWFwKGU9PmUuYnVpbGQoKSksJGN0aW1lOnRoaXMuc3RhdHMuY3RpbWUsJG10aW1lOnRoaXMuc3RhdHMubXRpbWUsJGluZmllbGRzOnRoaXMubWV0YWRhdGEuZmluaXNoSW5saW5lRmllbGRzKCksJGxpbmtzOnRoaXMubWV0YWRhdGEuZmluaXNoTGlua3MoKSwkdGFnczp0aGlzLm1ldGFkYXRhLmZpbmlzaFRhZ3MoKSwkcGF0aDp0aGlzLnBhdGgsJHNpemU6dGhpcy5zdGF0cy5zaXplfX19O29ubWVzc2FnZT1hc3luYyBuPT57dHJ5e2xldCBlPW4uZGF0YTtpZihlLnR5cGU9PT1cXFwibWFya2Rvd25cXFwiKXtsZXQgdD1adShlLnBhdGgsZS5jb250ZW50cyxlLm1ldGFkYXRhLGUuc3RhdCk7cG9zdE1lc3NhZ2Uoe3R5cGU6XFxcIm1hcmtkb3duXFxcIixyZXN1bHQ6dH0pfWVsc2UgaWYoZS50eXBlPT09XFxcImNhbnZhc1xcXCIpe2xldCB0PVh1KGUucGF0aCxlLmNvbnRlbnRzLGUuaW5kZXgsZS5zdGF0KTtwb3N0TWVzc2FnZSh7dHlwZTpcXFwiY2FudmFzXFxcIixyZXN1bHQ6dH0pfWVsc2UgcG9zdE1lc3NhZ2UoeyRlcnJvcjpcXFwiVW5zdXBwb3J0ZWQgaW1wb3J0IG1ldGhvZC5cXFwifSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihgRGF0YWNvcmUgSW5kZXhlciBmYWlsZWQgdG8gaW5kZXggJHtuLmRhdGEucGF0aH06ICR7ZX1gKSxwb3N0TWVzc2FnZSh7JGVycm9yOmUubWVzc2FnZX0pfX07XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxld29nSUNKMlpYSnphVzl1SWpvZ015d0tJQ0FpYzI5MWNtTmxjeUk2SUZzaUxpNHZMaTR2Y0dGeWMybHRiVzl1TDJKMWFXeGtMM0JoY25OcGJXMXZiaTUxYldRdWJXbHVMbXB6SWl3Z0lpNHVMeTR1TDNOdmNuUmxaQzFpZEhKbFpTOWlLM1J5WldVdWFuTWlMQ0FpTGk0dkxpNHZiSFY0YjI0dmMzSmpMMlZ5Y205eWN5NXFjeUlzSUNJdUxpOHVMaTlzZFhodmJpOXpjbU12YVcxd2JDOW1iM0p0WVhSekxtcHpJaXdnSWk0dUx5NHVMMngxZUc5dUwzTnlZeTlwYlhCc0wzVjBhV3d1YW5NaUxDQWlMaTR2TGk0dmJIVjRiMjR2YzNKakwybHRjR3d2Wlc1bmJHbHphQzVxY3lJc0lDSXVMaTh1TGk5c2RYaHZiaTl6Y21NdmFXMXdiQzltYjNKdFlYUjBaWEl1YW5NaUxDQWlMaTR2TGk0dmJIVjRiMjR2YzNKakwybHRjR3d2YVc1MllXeHBaQzVxY3lJc0lDSXVMaTh1TGk5c2RYaHZiaTl6Y21NdmVtOXVaUzVxY3lJc0lDSXVMaTh1TGk5c2RYaHZiaTl6Y21NdmVtOXVaWE12YzNsemRHVnRXbTl1WlM1cWN5SXNJQ0l1TGk4dUxpOXNkWGh2Ymk5emNtTXZlbTl1WlhNdlNVRk9RVnB2Ym1VdWFuTWlMQ0FpTGk0dkxpNHZiSFY0YjI0dmMzSmpMM3B2Ym1WekwyWnBlR1ZrVDJabWMyVjBXbTl1WlM1cWN5SXNJQ0l1TGk4dUxpOXNkWGh2Ymk5emNtTXZlbTl1WlhNdmFXNTJZV3hwWkZwdmJtVXVhbk1pTENBaUxpNHZMaTR2YkhWNGIyNHZjM0pqTDJsdGNHd3ZlbTl1WlZWMGFXd3Vhbk1pTENBaUxpNHZMaTR2YkhWNGIyNHZjM0pqTDNObGRIUnBibWR6TG1weklpd2dJaTR1THk0dUwyeDFlRzl1TDNOeVl5OXBiWEJzTDJ4dlkyRnNaUzVxY3lJc0lDSXVMaTh1TGk5c2RYaHZiaTl6Y21NdmFXMXdiQzl5WldkbGVGQmhjbk5sY2k1cWN5SXNJQ0l1TGk4dUxpOXNkWGh2Ymk5emNtTXZaSFZ5WVhScGIyNHVhbk1pTENBaUxpNHZMaTR2YkhWNGIyNHZjM0pqTDJsdWRHVnlkbUZzTG1weklpd2dJaTR1THk0dUwyeDFlRzl1TDNOeVl5OXBibVp2TG1weklpd2dJaTR1THk0dUwyeDFlRzl1TDNOeVl5OXBiWEJzTDJScFptWXVhbk1pTENBaUxpNHZMaTR2YkhWNGIyNHZjM0pqTDJsdGNHd3ZaR2xuYVhSekxtcHpJaXdnSWk0dUx5NHVMMngxZUc5dUwzTnlZeTlwYlhCc0wzUnZhMlZ1VUdGeWMyVnlMbXB6SWl3Z0lpNHVMeTR1TDJ4MWVHOXVMM055WXk5cGJYQnNMMk52Ym5abGNuTnBiMjV6TG1weklpd2dJaTR1THk0dUwyeDFlRzl1TDNOeVl5OWtZWFJsZEdsdFpTNXFjeUlzSUNJdUxpOHVMaTh1TGk5emNtTXZkWFJwYkhNdmJtOXliV0ZzYVhwbGNuTXVkSE1pTENBaUxpNHZMaTR2WlcxdmFta3RjbVZuWlhndmFXNWtaWGd1Yldweklpd2dJaTR1THk0dUx5NHVMM055WXk5bGVIQnlaWE56YVc5dUwyeHBibXN1ZEhNaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdmJtOWtaWE12YVdSbGJuUnBkSGt1YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdmRtbHphWFF1YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdlpHOWpMMlJwY21WamRHbDJaWE11YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdlpHOWpMMkZ1WTJodmNuTXVhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2Wkc5akwyRndjR3g1VW1WMmFYWmxjaTVxY3lJc0lDSXVMaTh1TGk5NVlXMXNMMkp5YjNkelpYSXZaR2x6ZEM5dWIyUmxjeTkwYjBwVExtcHpJaXdnSWk0dUx5NHVMM2xoYld3dlluSnZkM05sY2k5a2FYTjBMMjV2WkdWekwwNXZaR1V1YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdmJtOWtaWE12UVd4cFlYTXVhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2Ym05a1pYTXZVMk5oYkdGeUxtcHpJaXdnSWk0dUx5NHVMM2xoYld3dlluSnZkM05sY2k5a2FYTjBMMlJ2WXk5amNtVmhkR1ZPYjJSbExtcHpJaXdnSWk0dUx5NHVMM2xoYld3dlluSnZkM05sY2k5a2FYTjBMMjV2WkdWekwwTnZiR3hsWTNScGIyNHVhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2YzNSeWFXNW5hV1o1TDNOMGNtbHVaMmxtZVVOdmJXMWxiblF1YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdmMzUnlhVzVuYVdaNUwyWnZiR1JHYkc5M1RHbHVaWE11YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdmMzUnlhVzVuYVdaNUwzTjBjbWx1WjJsbWVWTjBjbWx1Wnk1cWN5SXNJQ0l1TGk4dUxpOTVZVzFzTDJKeWIzZHpaWEl2WkdsemRDOXpkSEpwYm1kcFpua3ZjM1J5YVc1bmFXWjVMbXB6SWl3Z0lpNHVMeTR1TDNsaGJXd3ZZbkp2ZDNObGNpOWthWE4wTDNOMGNtbHVaMmxtZVM5emRISnBibWRwWm5sUVlXbHlMbXB6SWl3Z0lpNHVMeTR1TDNsaGJXd3ZZbkp2ZDNObGNpOWthWE4wTDJ4dlp5NXFjeUlzSUNJdUxpOHVMaTk1WVcxc0wySnliM2R6WlhJdlpHbHpkQzl6WTJobGJXRXZlV0Z0YkMweExqRXZiV1Z5WjJVdWFuTWlMQ0FpTGk0dkxpNHZlV0Z0YkM5aWNtOTNjMlZ5TDJScGMzUXZibTlrWlhNdllXUmtVR0ZwY2xSdlNsTk5ZWEF1YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdmJtOWtaWE12VUdGcGNpNXFjeUlzSUNJdUxpOHVMaTk1WVcxc0wySnliM2R6WlhJdlpHbHpkQzl6ZEhKcGJtZHBabmt2YzNSeWFXNW5hV1o1UTI5c2JHVmpkR2x2Ymk1cWN5SXNJQ0l1TGk4dUxpOTVZVzFzTDJKeWIzZHpaWEl2WkdsemRDOXViMlJsY3k5WlFVMU1UV0Z3TG1weklpd2dJaTR1THk0dUwzbGhiV3d2WW5KdmQzTmxjaTlrYVhOMEwzTmphR1Z0WVM5amIyMXRiMjR2YldGd0xtcHpJaXdnSWk0dUx5NHVMM2xoYld3dlluSnZkM05sY2k5a2FYTjBMMjV2WkdWekwxbEJUVXhUWlhFdWFuTWlMQ0FpTGk0dkxpNHZlV0Z0YkM5aWNtOTNjMlZ5TDJScGMzUXZjMk5vWlcxaEwyTnZiVzF2Ymk5elpYRXVhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2YzJOb1pXMWhMMk52YlcxdmJpOXpkSEpwYm1jdWFuTWlMQ0FpTGk0dkxpNHZlV0Z0YkM5aWNtOTNjMlZ5TDJScGMzUXZjMk5vWlcxaEwyTnZiVzF2Ymk5dWRXeHNMbXB6SWl3Z0lpNHVMeTR1TDNsaGJXd3ZZbkp2ZDNObGNpOWthWE4wTDNOamFHVnRZUzlqYjNKbEwySnZiMnd1YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdmMzUnlhVzVuYVdaNUwzTjBjbWx1WjJsbWVVNTFiV0psY2k1cWN5SXNJQ0l1TGk4dUxpOTVZVzFzTDJKeWIzZHpaWEl2WkdsemRDOXpZMmhsYldFdlkyOXlaUzltYkc5aGRDNXFjeUlzSUNJdUxpOHVMaTk1WVcxc0wySnliM2R6WlhJdlpHbHpkQzl6WTJobGJXRXZZMjl5WlM5cGJuUXVhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2YzJOb1pXMWhMMk52Y21VdmMyTm9aVzFoTG1weklpd2dJaTR1THk0dUwzbGhiV3d2WW5KdmQzTmxjaTlrYVhOMEwzTmphR1Z0WVM5cWMyOXVMM05qYUdWdFlTNXFjeUlzSUNJdUxpOHVMaTk1WVcxc0wySnliM2R6WlhJdlpHbHpkQzl6WTJobGJXRXZlV0Z0YkMweExqRXZZbWx1WVhKNUxtcHpJaXdnSWk0dUx5NHVMM2xoYld3dlluSnZkM05sY2k5a2FYTjBMM05qYUdWdFlTOTVZVzFzTFRFdU1TOXdZV2x5Y3k1cWN5SXNJQ0l1TGk4dUxpOTVZVzFzTDJKeWIzZHpaWEl2WkdsemRDOXpZMmhsYldFdmVXRnRiQzB4TGpFdmIyMWhjQzVxY3lJc0lDSXVMaTh1TGk5NVlXMXNMMkp5YjNkelpYSXZaR2x6ZEM5elkyaGxiV0V2ZVdGdGJDMHhMakV2WW05dmJDNXFjeUlzSUNJdUxpOHVMaTk1WVcxc0wySnliM2R6WlhJdlpHbHpkQzl6WTJobGJXRXZlV0Z0YkMweExqRXZabXh2WVhRdWFuTWlMQ0FpTGk0dkxpNHZlV0Z0YkM5aWNtOTNjMlZ5TDJScGMzUXZjMk5vWlcxaEwzbGhiV3d0TVM0eEwybHVkQzVxY3lJc0lDSXVMaTh1TGk5NVlXMXNMMkp5YjNkelpYSXZaR2x6ZEM5elkyaGxiV0V2ZVdGdGJDMHhMakV2YzJWMExtcHpJaXdnSWk0dUx5NHVMM2xoYld3dlluSnZkM05sY2k5a2FYTjBMM05qYUdWdFlTOTVZVzFzTFRFdU1TOTBhVzFsYzNSaGJYQXVhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2YzJOb1pXMWhMM2xoYld3dE1TNHhMM05qYUdWdFlTNXFjeUlzSUNJdUxpOHVMaTk1WVcxc0wySnliM2R6WlhJdlpHbHpkQzl6WTJobGJXRXZkR0ZuY3k1cWN5SXNJQ0l1TGk4dUxpOTVZVzFzTDJKeWIzZHpaWEl2WkdsemRDOXpZMmhsYldFdlUyTm9aVzFoTG1weklpd2dJaTR1THk0dUwzbGhiV3d2WW5KdmQzTmxjaTlrYVhOMEwzTjBjbWx1WjJsbWVTOXpkSEpwYm1kcFpubEViMk4xYldWdWRDNXFjeUlzSUNJdUxpOHVMaTk1WVcxc0wySnliM2R6WlhJdlpHbHpkQzlrYjJNdlJHOWpkVzFsYm5RdWFuTWlMQ0FpTGk0dkxpNHZlV0Z0YkM5aWNtOTNjMlZ5TDJScGMzUXZaWEp5YjNKekxtcHpJaXdnSWk0dUx5NHVMM2xoYld3dlluSnZkM05sY2k5a2FYTjBMMk52YlhCdmMyVXZjbVZ6YjJ4MlpTMXdjbTl3Y3k1cWN5SXNJQ0l1TGk4dUxpOTVZVzFzTDJKeWIzZHpaWEl2WkdsemRDOWpiMjF3YjNObEwzVjBhV3d0WTI5dWRHRnBibk10Ym1WM2JHbHVaUzVxY3lJc0lDSXVMaTh1TGk5NVlXMXNMMkp5YjNkelpYSXZaR2x6ZEM5amIyMXdiM05sTDNWMGFXd3RabXh2ZHkxcGJtUmxiblF0WTJobFkyc3Vhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2WTI5dGNHOXpaUzkxZEdsc0xXMWhjQzFwYm1Oc2RXUmxjeTVxY3lJc0lDSXVMaTh1TGk5NVlXMXNMMkp5YjNkelpYSXZaR2x6ZEM5amIyMXdiM05sTDNKbGMyOXNkbVV0WW14dlkyc3RiV0Z3TG1weklpd2dJaTR1THk0dUwzbGhiV3d2WW5KdmQzTmxjaTlrYVhOMEwyTnZiWEJ2YzJVdmNtVnpiMngyWlMxaWJHOWpheTF6WlhFdWFuTWlMQ0FpTGk0dkxpNHZlV0Z0YkM5aWNtOTNjMlZ5TDJScGMzUXZZMjl0Y0c5elpTOXlaWE52YkhabExXVnVaQzVxY3lJc0lDSXVMaTh1TGk5NVlXMXNMMkp5YjNkelpYSXZaR2x6ZEM5amIyMXdiM05sTDNKbGMyOXNkbVV0Wm14dmR5MWpiMnhzWldOMGFXOXVMbXB6SWl3Z0lpNHVMeTR1TDNsaGJXd3ZZbkp2ZDNObGNpOWthWE4wTDJOdmJYQnZjMlV2WTI5dGNHOXpaUzFqYjJ4c1pXTjBhVzl1TG1weklpd2dJaTR1THk0dUwzbGhiV3d2WW5KdmQzTmxjaTlrYVhOMEwyTnZiWEJ2YzJVdmNtVnpiMngyWlMxaWJHOWpheTF6WTJGc1lYSXVhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2WTI5dGNHOXpaUzl5WlhOdmJIWmxMV1pzYjNjdGMyTmhiR0Z5TG1weklpd2dJaTR1THk0dUwzbGhiV3d2WW5KdmQzTmxjaTlrYVhOMEwyTnZiWEJ2YzJVdlkyOXRjRzl6WlMxelkyRnNZWEl1YW5NaUxDQWlMaTR2TGk0dmVXRnRiQzlpY205M2MyVnlMMlJwYzNRdlkyOXRjRzl6WlM5MWRHbHNMV1Z0Y0hSNUxYTmpZV3hoY2kxd2IzTnBkR2x2Ymk1cWN5SXNJQ0l1TGk4dUxpOTVZVzFzTDJKeWIzZHpaWEl2WkdsemRDOWpiMjF3YjNObEwyTnZiWEJ2YzJVdGJtOWtaUzVxY3lJc0lDSXVMaTh1TGk5NVlXMXNMMkp5YjNkelpYSXZaR2x6ZEM5amIyMXdiM05sTDJOdmJYQnZjMlV0Wkc5akxtcHpJaXdnSWk0dUx5NHVMM2xoYld3dlluSnZkM05sY2k5a2FYTjBMMk52YlhCdmMyVXZZMjl0Y0c5elpYSXVhbk1pTENBaUxpNHZMaTR2ZVdGdGJDOWljbTkzYzJWeUwyUnBjM1F2Y0dGeWMyVXZZM04wTFhacGMybDBMbXB6SWl3Z0lpNHVMeTR1TDNsaGJXd3ZZbkp2ZDNObGNpOWthWE4wTDNCaGNuTmxMMk56ZEM1cWN5SXNJQ0l1TGk4dUxpOTVZVzFzTDJKeWIzZHpaWEl2WkdsemRDOXdZWEp6WlM5c1pYaGxjaTVxY3lJc0lDSXVMaTh1TGk5NVlXMXNMMkp5YjNkelpYSXZaR2x6ZEM5d1lYSnpaUzlzYVc1bExXTnZkVzUwWlhJdWFuTWlMQ0FpTGk0dkxpNHZlV0Z0YkM5aWNtOTNjMlZ5TDJScGMzUXZjR0Z5YzJVdmNHRnljMlZ5TG1weklpd2dJaTR1THk0dUwzbGhiV3d2WW5KdmQzTmxjaTlrYVhOMEwzQjFZbXhwWXkxaGNHa3Vhbk1pTENBaUxpNHZMaTR2TGk0dmMzSmpMMmx1WkdWNEwybHRjRzl5ZEM5dFlYSnJaRzkzYmk1MGN5SXNJQ0l1TGk4dUxpOHVMaTl6Y21NdlpYaHdjbVZ6YzJsdmJpOXdZWEp6WlhJdWRITWlMQ0FpTGk0dkxpNHZMaTR2YzNKakwyVjRjSEpsYzNOcGIyNHZiR2wwWlhKaGJDNTBjeUlzSUNJdUxpOHVMaTh1TGk5emNtTXZZWEJwTDNKbGMzVnNkQzUwY3lJc0lDSXVMaTh1TGk4dUxpOXpjbU12Wlhod2NtVnpjMmx2Ymk5bWFXeDBaWEp6TG5Seklpd2dJaTR1THk0dUx5NHVMM055WXk5bGVIQnlaWE56YVc5dUwyVjRjSEpsYzNOcGIyNHVkSE1pTENBaUxpNHZMaTR2TGk0dmMzSmpMMmx1WkdWNEwybHRjRzl5ZEM5cGJteHBibVV0Wm1sbGJHUXVkSE1pTENBaUxpNHZMaTR2TGk0dmMzSmpMM1YwYVd4ekwyUmhkR0V1ZEhNaUxDQWlMaTR2TGk0dkxpNHZjM0pqTDJsdVpHVjRMM1I1Y0dWekwycHpiMjR2WTI5dGJXOXVMblJ6SWl3Z0lpNHVMeTR1THk0dUwzTnlZeTlwYm1SbGVDOTBlWEJsY3k5NVlXMXNMblJ6SWl3Z0lpNHVMeTR1THk0dUwzTnlZeTlwYm1SbGVDOXBiWEJ2Y25RdlkyRnVkbUZ6TG5Seklpd2dJaTR1THk0dUx5NHVMM055WXk5cGJtUmxlQzkzWldJdGQyOXlhMlZ5TDJsdGNHOXlkR1Z5TG5kdmNtdGxjaTUwY3lKZExBb2dJQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZJRnNpSVdaMWJtTjBhVzl1S0c0c2RDbDdYQ0p2WW1wbFkzUmNJajA5ZEhsd1pXOW1JR1Y0Y0c5eWRITW1KbHdpYjJKcVpXTjBYQ0k5UFhSNWNHVnZaaUJ0YjJSMWJHVS9iVzlrZFd4bExtVjRjRzl5ZEhNOWRDZ3BPbHdpWm5WdVkzUnBiMjVjSWowOWRIbHdaVzltSUdSbFptbHVaU1ltWkdWbWFXNWxMbUZ0WkQ5a1pXWnBibVVvVzEwc2RDazZYQ0p2WW1wbFkzUmNJajA5ZEhsd1pXOW1JR1Y0Y0c5eWRITS9aWGh3YjNKMGN5NVFZWEp6YVcxdGIyNDlkQ2dwT200dVVHRnljMmx0Ylc5dVBYUW9LWDBvWENKMWJtUmxabWx1WldSY0lpRTlkSGx3Wlc5bUlITmxiR1kvYzJWc1pqcDBhR2x6TEdaMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUdaMWJtTjBhVzl1S0c0cGUzWmhjaUIwUFh0OU8yWjFibU4wYVc5dUlISW9aU2w3YVdZb2RGdGxYU2x5WlhSMWNtNGdkRnRsWFM1bGVIQnZjblJ6TzNaaGNpQjFQWFJiWlYwOWUyazZaU3hzT2lFeExHVjRjRzl5ZEhNNmUzMTlPM0psZEhWeWJpQnVXMlZkTG1OaGJHd29kUzVsZUhCdmNuUnpMSFVzZFM1bGVIQnZjblJ6TEhJcExIVXViRDBoTUN4MUxtVjRjRzl5ZEhOOWNtVjBkWEp1SUhJdWJUMXVMSEl1WXoxMExISXVaRDFtZFc1amRHbHZiaWh1TEhRc1pTbDdjaTV2S0c0c2RDbDhmRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNodUxIUXNlMk52Ym1acFozVnlZV0pzWlRvaE1TeGxiblZ0WlhKaFlteGxPaUV3TEdkbGREcGxmU2w5TEhJdWNqMW1kVzVqZEdsdmJpaHVLWHRQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb2JpeGNJbDlmWlhOTmIyUjFiR1ZjSWl4N2RtRnNkV1U2SVRCOUtYMHNjaTV1UFdaMWJtTjBhVzl1S0c0cGUzWmhjaUIwUFc0bUptNHVYMTlsYzAxdlpIVnNaVDltZFc1amRHbHZiaWdwZTNKbGRIVnliaUJ1TG1SbFptRjFiSFI5T21aMWJtTjBhVzl1S0NsN2NtVjBkWEp1SUc1OU8zSmxkSFZ5YmlCeUxtUW9kQ3hjSW1GY0lpeDBLU3gwZlN4eUxtODlablZ1WTNScGIyNG9iaXgwS1h0eVpYUjFjbTRnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0c0c2RDbDlMSEl1Y0QxY0lsd2lMSElvY2k1elBUQXBmU2hiWm5WdVkzUnBiMjRvYml4MExISXBlMXdpZFhObElITjBjbWxqZEZ3aU8yWjFibU4wYVc5dUlHVW9iaWw3YVdZb0lTaDBhR2x6SUdsdWMzUmhibU5sYjJZZ1pTa3BjbVYwZFhKdUlHNWxkeUJsS0c0cE8zUm9hWE11WHoxdWZYWmhjaUIxUFdVdWNISnZkRzkwZVhCbE8yWjFibU4wYVc5dUlHOG9iaXgwS1h0bWIzSW9kbUZ5SUhJOU1EdHlQRzQ3Y2lzcktYUW9jaWw5Wm5WdVkzUnBiMjRnYVNodUxIUXNjaWw3Y21WMGRYSnVJR1oxYm1OMGFXOXVLRzRzZENsN2J5aDBMbXhsYm1kMGFDeG1kVzVqZEdsdmJpaHlLWHR1S0hSYmNsMHNjaXgwS1gwcGZTaG1kVzVqZEdsdmJpaHlMR1VzZFNsN2REMXVLSFFzY2l4bExIVXBmU3h5S1N4MGZXWjFibU4wYVc5dUlHRW9iaXgwS1h0eVpYUjFjbTRnYVNobWRXNWpkR2x2YmloMExISXNaU3gxS1h0eVpYUjFjbTRnZEM1amIyNWpZWFFvVzI0b2NpeGxMSFVwWFNsOUxGdGRMSFFwZldaMWJtTjBhVzl1SUdZb2JpeDBLWHQyWVhJZ2NqMTdkam93TEdKMVpqcDBmVHR5WlhSMWNtNGdieWh1TEdaMWJtTjBhVzl1S0NsN2RtRnlJRzQ3Y2oxN2RqcHlMblk4UERGOEtHNDljaTVpZFdZc2Jsc3dYVDQrTnlrc1luVm1PbVoxYm1OMGFXOXVLRzRwZTNaaGNpQjBQV2tvWm5WdVkzUnBiMjRvYml4MExISXNaU2w3Y21WMGRYSnVJRzR1WTI5dVkyRjBLSEk5UFQxbExteGxibWQwYUMweFAwSjFabVpsY2k1bWNtOXRLRnQwTERCZEtTNXlaV0ZrVlVsdWRERTJRa1VvTUNrNlpTNXlaV0ZrVlVsdWRERTJRa1VvY2lrcGZTeGJYU3h1S1R0eVpYUjFjbTRnUW5WbVptVnlMbVp5YjIwb1lTaG1kVzVqZEdsdmJpaHVLWHR5WlhSMWNtNG9ianc4TVNZMk5UVXpOU2srUGpoOUxIUXBLWDBvY2k1aWRXWXBmWDBwTEhKOVpuVnVZM1JwYjI0Z1l5Z3BlM0psZEhWeWJsd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJDZFdabVpYSjlablZ1WTNScGIyNGdjeWdwZTJsbUtDRmpLQ2twZEdoeWIzY2dibVYzSUVWeWNtOXlLRndpUW5WbVptVnlJR2RzYjJKaGJDQmtiMlZ6SUc1dmRDQmxlR2x6ZERzZ2NHeGxZWE5sSUhWelpTQjNaV0p3WVdOcklHbG1JSGx2ZFNCdVpXVmtJSFJ2SUhCaGNuTmxJRUoxWm1abGNuTWdhVzRnZEdobElHSnliM2R6WlhJdVhDSXBmV1oxYm1OMGFXOXVJR3dvYmlsN2N5Z3BPM1poY2lCMFBXa29ablZ1WTNScGIyNG9iaXgwS1h0eVpYUjFjbTRnYml0MGZTd3dMRzRwTzJsbUtIUWxPQ0U5TUNsMGFISnZkeUJ1WlhjZ1JYSnliM0lvWENKVWFHVWdZbWwwY3lCYlhDSXJiaTVxYjJsdUtGd2lMQ0JjSWlrclhDSmRJR0ZrWkNCMWNDQjBieUJjSWl0MEsxd2lJSGRvYVdOb0lHbHpJRzV2ZENCaGJpQmxkbVZ1SUc1MWJXSmxjaUJ2WmlCaWVYUmxjenNnZEdobElIUnZkR0ZzSUhOb2IzVnNaQ0JpWlNCa2FYWnBjMmxpYkdVZ1lua2dPRndpS1R0MllYSWdjaXgxUFhRdk9DeHZQU2h5UFdaMWJtTjBhVzl1S0c0cGUzSmxkSFZ5YmlCdVBqUTRmU3hwS0daMWJtTjBhVzl1S0c0c2RDbDdjbVYwZFhKdUlHNThmQ2h5S0hRcFAzUTZiaWw5TEc1MWJHd3NiaWtwTzJsbUtHOHBkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHOHJYQ0lnWW1sMElISmhibWRsSUhKbGNYVmxjM1JsWkNCbGVHTmxaV1J6SURRNElHSnBkQ0FvTmlCaWVYUmxLU0JPZFcxaVpYSWdiV0Y0TGx3aUtUdHlaWFIxY200Z2JtVjNJR1VvWm5WdVkzUnBiMjRvZEN4eUtYdDJZWElnWlQxMUszSTdjbVYwZFhKdUlHVStkQzVzWlc1bmRHZy9lQ2h5TEhVdWRHOVRkSEpwYm1jb0tTdGNJaUJpZVhSbGMxd2lLVHBpS0dVc2FTaG1kVzVqZEdsdmJpaHVMSFFwZTNaaGNpQnlQV1lvZEN4dUxtSjFaaWs3Y21WMGRYSnVlMk52Ykd3NmJpNWpiMnhzTG1OdmJtTmhkQ2h5TG5ZcExHSjFaanB5TG1KMVpuMTlMSHRqYjJ4c09sdGRMR0oxWmpwMExuTnNhV05sS0hJc1pTbDlMRzRwTG1OdmJHd3BmU2w5Wm5WdVkzUnBiMjRnYUNodUxIUXBlM0psZEhWeWJpQnVaWGNnWlNobWRXNWpkR2x2YmloeUxHVXBlM0psZEhWeWJpQnpLQ2tzWlN0MFBuSXViR1Z1WjNSb1AzZ29aU3gwSzF3aUlHSjVkR1Z6SUdadmNpQmNJaXR1S1RwaUtHVXJkQ3h5TG5Oc2FXTmxLR1VzWlN0MEtTbDlLWDFtZFc1amRHbHZiaUJ3S0c0c2RDbDdhV1lvWENKdWRXMWlaWEpjSWlFOWRIbHdaVzltS0hJOWRDbDhmRTFoZEdndVpteHZiM0lvY2lraFBUMXlmSHgwUERCOGZIUStOaWwwYUhKdmR5QnVaWGNnUlhKeWIzSW9iaXRjSWlCeVpYRjFhWEpsY3lCcGJuUmxaMlZ5SUd4bGJtZDBhQ0JwYmlCeVlXNW5aU0JiTUN3Z05sMHVYQ0lwTzNaaGNpQnlmV1oxYm1OMGFXOXVJR1FvYmlsN2NtVjBkWEp1SUhBb1hDSjFhVzUwUWtWY0lpeHVLU3hvS0Z3aWRXbHVkRUpGS0Z3aUsyNHJYQ0lwWENJc2Jpa3ViV0Z3S0daMWJtTjBhVzl1S0hRcGUzSmxkSFZ5YmlCMExuSmxZV1JWU1c1MFFrVW9NQ3h1S1gwcGZXWjFibU4wYVc5dUlIWW9iaWw3Y21WMGRYSnVJSEFvWENKMWFXNTBURVZjSWl4dUtTeG9LRndpZFdsdWRFeEZLRndpSzI0clhDSXBYQ0lzYmlrdWJXRndLR1oxYm1OMGFXOXVLSFFwZTNKbGRIVnliaUIwTG5KbFlXUlZTVzUwVEVVb01DeHVLWDBwZldaMWJtTjBhVzl1SUdjb2JpbDdjbVYwZFhKdUlIQW9YQ0pwYm5SQ1JWd2lMRzRwTEdnb1hDSnBiblJDUlNoY0lpdHVLMXdpS1Z3aUxHNHBMbTFoY0NobWRXNWpkR2x2YmloMEtYdHlaWFIxY200Z2RDNXlaV0ZrU1c1MFFrVW9NQ3h1S1gwcGZXWjFibU4wYVc5dUlHMG9iaWw3Y21WMGRYSnVJSEFvWENKcGJuUk1SVndpTEc0cExHZ29YQ0pwYm5STVJTaGNJaXR1SzF3aUtWd2lMRzRwTG0xaGNDaG1kVzVqZEdsdmJpaDBLWHR5WlhSMWNtNGdkQzV5WldGa1NXNTBURVVvTUN4dUtYMHBmV1oxYm1OMGFXOXVJSGtvYmlsN2NtVjBkWEp1SUc0Z2FXNXpkR0Z1WTJWdlppQmxmV1oxYm1OMGFXOXVJRVVvYmlsN2NtVjBkWEp1WENKYmIySnFaV04wSUVGeWNtRjVYVndpUFQwOWUzMHVkRzlUZEhKcGJtY3VZMkZzYkNodUtYMW1kVzVqZEdsdmJpQjNLRzRwZTNKbGRIVnliaUJqS0NrbUprSjFabVpsY2k1cGMwSjFabVpsY2lodUtYMW1kVzVqZEdsdmJpQmlLRzRzZENsN2NtVjBkWEp1ZTNOMFlYUjFjem9oTUN4cGJtUmxlRHB1TEhaaGJIVmxPblFzWm5WeWRHaGxjM1E2TFRFc1pYaHdaV04wWldRNlcxMTlmV1oxYm1OMGFXOXVJSGdvYml4MEtYdHlaWFIxY200Z1JTaDBLWHg4S0hROVczUmRLU3g3YzNSaGRIVnpPaUV4TEdsdVpHVjRPaTB4TEhaaGJIVmxPbTUxYkd3c1puVnlkR2hsYzNRNmJpeGxlSEJsWTNSbFpEcDBmWDFtZFc1amRHbHZiaUJDS0c0c2RDbDdhV1lvSVhRcGNtVjBkWEp1SUc0N2FXWW9iaTVtZFhKMGFHVnpkRDUwTG1aMWNuUm9aWE4wS1hKbGRIVnliaUJ1TzNaaGNpQnlQVzR1Wm5WeWRHaGxjM1E5UFQxMExtWjFjblJvWlhOMFAyWjFibU4wYVc5dUtHNHNkQ2w3YVdZb1puVnVZM1JwYjI0b0tYdHBaaWgyYjJsa0lEQWhQVDFsTGw5emRYQndiM0owYzFObGRDbHlaWFIxY200Z1pTNWZjM1Z3Y0c5eWRITlRaWFE3ZG1GeUlHNDlYQ0oxYm1SbFptbHVaV1JjSWlFOWRIbHdaVzltSUZObGREdHlaWFIxY200Z1pTNWZjM1Z3Y0c5eWRITlRaWFE5Yml4dWZTZ3BKaVpCY25KaGVTNW1jbTl0S1h0bWIzSW9kbUZ5SUhJOWJtVjNJRk5sZENodUtTeDFQVEE3ZFR4MExteGxibWQwYUR0MUt5c3BjaTVoWkdRb2RGdDFYU2s3ZG1GeUlHODlRWEp5WVhrdVpuSnZiU2h5S1R0eVpYUjFjbTRnYnk1emIzSjBLQ2tzYjMxbWIzSW9kbUZ5SUdrOWUzMHNZVDB3TzJFOGJpNXNaVzVuZEdnN1lTc3JLV2xiYmx0aFhWMDlJVEE3Wm05eUtIWmhjaUJtUFRBN1pqeDBMbXhsYm1kMGFEdG1LeXNwYVZ0MFcyWmRYVDBoTUR0MllYSWdZejFiWFR0bWIzSW9kbUZ5SUhNZ2FXNGdhU2tvZTMwcExtaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29hU3h6S1NZbVl5NXdkWE5vS0hNcE8zSmxkSFZ5YmlCakxuTnZjblFvS1N4amZTaHVMbVY0Y0dWamRHVmtMSFF1Wlhod1pXTjBaV1FwT25RdVpYaHdaV04wWldRN2NtVjBkWEp1ZTNOMFlYUjFjenB1TG5OMFlYUjFjeXhwYm1SbGVEcHVMbWx1WkdWNExIWmhiSFZsT200dWRtRnNkV1VzWm5WeWRHaGxjM1E2ZEM1bWRYSjBhR1Z6ZEN4bGVIQmxZM1JsWkRweWZYMTJZWElnYWoxN2ZUdG1kVzVqZEdsdmJpQlRLRzRzZENsN2FXWW9keWh1S1NseVpYUjFjbTU3YjJabWMyVjBPblFzYkdsdVpUb3RNU3hqYjJ4MWJXNDZMVEY5TzI0Z2FXNGdhbng4S0dwYmJsMDllMzBwTzJadmNpaDJZWElnY2oxcVcyNWRMR1U5TUN4MVBUQXNiejB3TEdrOWREdHBQajB3T3lsN2FXWW9hU0JwYmlCeUtYdGxQWEpiYVYwdWJHbHVaU3d3UFQwOWJ5WW1LRzg5Y2x0cFhTNXNhVzVsVTNSaGNuUXBPMkp5WldGcmZTaGNJbHhjYmx3aVBUMDliaTVqYUdGeVFYUW9hU2w4ZkZ3aVhGeHlYQ0k5UFQxdUxtTm9ZWEpCZENocEtTWW1YQ0pjWEc1Y0lpRTlQVzR1WTJoaGNrRjBLR2tyTVNrcEppWW9kU3NyTERBOVBUMXZKaVlvYnoxcEt6RXBLU3hwTFMxOWRtRnlJR0U5WlN0MUxHWTlkQzF2TzNKbGRIVnliaUJ5VzNSZFBYdHNhVzVsT21Fc2JHbHVaVk4wWVhKME9tOTlMSHR2Wm1aelpYUTZkQ3hzYVc1bE9tRXJNU3hqYjJ4MWJXNDZaaXN4ZlgxbWRXNWpkR2x2YmlCZktHNHBlMmxtS0NGNUtHNHBLWFJvY205M0lHNWxkeUJGY25KdmNpaGNJbTV2ZENCaElIQmhjbk5sY2pvZ1hDSXJiaWw5Wm5WdVkzUnBiMjRnVENodUxIUXBlM0psZEhWeWJsd2ljM1J5YVc1blhDSTlQWFI1Y0dWdlppQnVQMjR1WTJoaGNrRjBLSFFwT201YmRGMTlablZ1WTNScGIyNGdUeWh1S1h0cFppaGNJbTUxYldKbGNsd2lJVDEwZVhCbGIyWWdiaWwwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0p1YjNRZ1lTQnVkVzFpWlhJNklGd2lLMjRwZldaMWJtTjBhVzl1SUdzb2JpbDdhV1lvWENKbWRXNWpkR2x2Ymx3aUlUMTBlWEJsYjJZZ2JpbDBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hDSnViM1FnWVNCbWRXNWpkR2x2YmpvZ1hDSXJiaWw5Wm5WdVkzUnBiMjRnVUNodUtYdHBaaWhjSW5OMGNtbHVaMXdpSVQxMGVYQmxiMllnYmlsMGFISnZkeUJ1WlhjZ1JYSnliM0lvWENKdWIzUWdZU0J6ZEhKcGJtYzZJRndpSzI0cGZYWmhjaUJ4UFRJc1FUMHpMRWs5T0N4R1BUVXFTU3hOUFRRcVNTeDZQVndpSUNCY0lqdG1kVzVqZEdsdmJpQlNLRzRzZENsN2NtVjBkWEp1SUc1bGR5QkJjbkpoZVNoMEt6RXBMbXB2YVc0b2JpbDlablZ1WTNScGIyNGdWU2h1TEhRc2NpbDdkbUZ5SUdVOWRDMXVMbXhsYm1kMGFEdHlaWFIxY200Z1pUdzlNRDl1T2xJb2NpeGxLU3R1ZldaMWJtTjBhVzl1SUZjb2JpeDBMSElzWlNsN2NtVjBkWEp1ZTJaeWIyMDZiaTEwUGpBL2JpMTBPakFzZEc4NmJpdHlQbVUvWlRwdUszSjlmV1oxYm1OMGFXOXVJRVFvYml4MEtYdDJZWElnY2l4bExIVXNieXhtTEdNOWRDNXBibVJsZUN4elBXTXViMlptYzJWMExHdzlNVHRwWmloelBUMDliaTVzWlc1bmRHZ3BjbVYwZFhKdVhDSkhiM1FnZEdobElHVnVaQ0J2WmlCMGFHVWdhVzV3ZFhSY0lqdHBaaWgzS0c0cEtYdDJZWElnYUQxekxYTWxTU3h3UFhNdGFDeGtQVmNvYUN4R0xFMHJTU3h1TG14bGJtZDBhQ2tzZGoxaEtHWjFibU4wYVc5dUtHNHBlM0psZEhWeWJpQmhLR1oxYm1OMGFXOXVLRzRwZTNKbGRIVnliaUJWS0c0dWRHOVRkSEpwYm1jb01UWXBMRElzWENJd1hDSXBmU3h1S1gwc1puVnVZM1JwYjI0b2JpeDBLWHQyWVhJZ2NqMXVMbXhsYm1kMGFDeGxQVnRkTEhVOU1EdHBaaWh5UEQxMEtYSmxkSFZ5Ymx0dUxuTnNhV05sS0NsZE8yWnZjaWgyWVhJZ2J6MHdPMjg4Y2p0dkt5c3BaVnQxWFh4OFpTNXdkWE5vS0Z0ZEtTeGxXM1ZkTG5CMWMyZ29ibHR2WFNrc0tHOHJNU2tsZEQwOU1DWW1kU3NyTzNKbGRIVnliaUJsZlNodUxuTnNhV05sS0dRdVpuSnZiU3hrTG5SdktTNTBiMHBUVDA0b0tTNWtZWFJoTEVrcEtUdHZQV1oxYm1OMGFXOXVLRzRwZTNKbGRIVnliaUF3UFQwOWJpNW1jbTl0SmlZeFBUMDliaTUwYno5N1puSnZiVHB1TG1aeWIyMHNkRzg2Ymk1MGIzMDZlMlp5YjIwNmJpNW1jbTl0TDBrc2RHODZUV0YwYUM1bWJHOXZjaWh1TG5Sdkwwa3BmWDBvWkNrc1pUMW9MMGtzY2owektuQXNjRDQ5TkNZbUtISXJQVEVwTEd3OU1peDFQV0VvWm5WdVkzUnBiMjRvYmlsN2NtVjBkWEp1SUc0dWJHVnVaM1JvUEQwMFAyNHVhbTlwYmloY0lpQmNJaWs2Ymk1emJHbGpaU2d3TERRcExtcHZhVzRvWENJZ1hDSXBLMXdpSUNCY0lpdHVMbk5zYVdObEtEUXBMbXB2YVc0b1hDSWdYQ0lwZlN4MktTd29aajBvT0Nvb2J5NTBiejR3UDI4dWRHOHRNVHB2TG5SdktTa3VkRzlUZEhKcGJtY29NVFlwTG14bGJtZDBhQ2s4TWlZbUtHWTlNaWw5Wld4elpYdDJZWElnWnoxdUxuTndiR2wwS0M5Y1hISmNYRzU4VzF4Y2JseGNjbHhjZFRJd01qaGNYSFV5TURJNVhTOHBPM0k5WXk1amIyeDFiVzR0TVN4bFBXTXViR2x1WlMweExHODlWeWhsTEhFc1FTeG5MbXhsYm1kMGFDa3NkVDFuTG5Oc2FXTmxLRzh1Wm5KdmJTeHZMblJ2S1N4bVBXOHVkRzh1ZEc5VGRISnBibWNvS1M1c1pXNW5kR2g5ZG1GeUlHMDlaUzF2TG1aeWIyMDdjbVYwZFhKdUlIY29iaWttSmlobVBTZzRLaWh2TG5SdlBqQS9ieTUwYnkweE9tOHVkRzhwS1M1MGIxTjBjbWx1WnlneE5pa3ViR1Z1WjNSb0tUd3lKaVlvWmoweUtTeHBLR1oxYm1OMGFXOXVLSFFzWlN4MUtYdDJZWElnYVN4aFBYVTlQVDF0TEdNOVlUOWNJajRnWENJNmVqdHlaWFIxY200Z2FUMTNLRzRwUDFVb0tEZ3FLRzh1Wm5KdmJTdDFLU2t1ZEc5VGRISnBibWNvTVRZcExHWXNYQ0l3WENJcE9sVW9LRzh1Wm5KdmJTdDFLekVwTG5SdlUzUnlhVzVuS0Nrc1ppeGNJaUJjSWlrc1cxMHVZMjl1WTJGMEtIUXNXMk1yYVN0Y0lpQjhJRndpSzJWZExHRS9XM29yVWloY0lpQmNJaXhtS1N0Y0lpQjhJRndpSzFVb1hDSmNJaXh5TEZ3aUlGd2lLU3RTS0Z3aVhsd2lMR3dwWFRwYlhTbDlMRnRkTEhVcExtcHZhVzRvWENKY1hHNWNJaWw5Wm5WdVkzUnBiMjRnVGlodUxIUXBlM0psZEhWeWJsdGNJbHhjYmx3aUxGd2lMUzBnVUVGU1UwbE9SeUJHUVVsTVJVUWdYQ0lyVWloY0lpMWNJaXcxTUNrc1hDSmNYRzVjWEc1Y0lpeEVLRzRzZENrc1hDSmNYRzVjWEc1Y0lpd29jajEwTG1WNGNHVmpkR1ZrTERFOVBUMXlMbXhsYm1kMGFEOWNJa1Y0Y0dWamRHVmtPbHhjYmx4Y2Jsd2lLM0piTUYwNlhDSkZlSEJsWTNSbFpDQnZibVVnYjJZZ2RHaGxJR1p2Ykd4dmQybHVaem9nWEZ4dVhGeHVYQ0lyY2k1cWIybHVLRndpTENCY0lpa3BMRndpWEZ4dVhDSmRMbXB2YVc0b1hDSmNJaWs3ZG1GeUlISjlablZ1WTNScGIyNGdSeWh1S1h0eVpYUjFjbTRnZG05cFpDQXdJVDA5Ymk1bWJHRm5jejl1TG1ac1lXZHpPbHR1TG1kc2IySmhiRDljSW1kY0lqcGNJbHdpTEc0dWFXZHViM0psUTJGelpUOWNJbWxjSWpwY0lsd2lMRzR1YlhWc2RHbHNhVzVsUDF3aWJWd2lPbHdpWENJc2JpNTFibWxqYjJSbFAxd2lkVndpT2x3aVhDSXNiaTV6ZEdsamEzay9YQ0o1WENJNlhDSmNJbDB1YW05cGJpaGNJbHdpS1gxbWRXNWpkR2x2YmlCREtDbDdabTl5S0haaGNpQnVQVnRkTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SektTeDBQVzR1YkdWdVozUm9MSEk5TUR0eVBIUTdjaXM5TVNsZktHNWJjbDBwTzNKbGRIVnliaUJsS0daMWJtTjBhVzl1S0hJc1pTbDdabTl5S0haaGNpQjFMRzg5Ym1WM0lFRnljbUY1S0hRcExHazlNRHRwUEhRN2FTczlNU2w3YVdZb0lTaDFQVUlvYmx0cFhTNWZLSElzWlNrc2RTa3BMbk4wWVhSMWN5bHlaWFIxY200Z2RUdHZXMmxkUFhVdWRtRnNkV1VzWlQxMUxtbHVaR1Y0ZlhKbGRIVnliaUJDS0dJb1pTeHZLU3gxS1gwcGZXWjFibU4wYVc5dUlFb29LWHQyWVhJZ2JqMWJYUzV6YkdsalpTNWpZV3hzS0dGeVozVnRaVzUwY3lrN2FXWW9NRDA5UFc0dWJHVnVaM1JvS1hSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSW5ObGNVMWhjQ0J1WldWa2N5QmhkQ0JzWldGemRDQnZibVVnWVhKbmRXMWxiblJjSWlrN2RtRnlJSFE5Ymk1d2IzQW9LVHR5WlhSMWNtNGdheWgwS1N4RExtRndjR3g1S0c1MWJHd3NiaWt1YldGd0tHWjFibU4wYVc5dUtHNHBlM0psZEhWeWJpQjBMbUZ3Y0d4NUtHNTFiR3dzYmlsOUtYMW1kVzVqZEdsdmJpQlVLQ2w3ZG1GeUlHNDlXMTB1YzJ4cFkyVXVZMkZzYkNoaGNtZDFiV1Z1ZEhNcExIUTliaTVzWlc1bmRHZzdhV1lvTUQwOVBYUXBjbVYwZFhKdUlGa29YQ0o2WlhKdklHRnNkR1Z5Ym1GMFpYTmNJaWs3Wm05eUtIWmhjaUJ5UFRBN2NqeDBPM0lyUFRFcFh5aHVXM0pkS1R0eVpYUjFjbTRnWlNobWRXNWpkR2x2YmloMExISXBlMlp2Y2loMllYSWdaU3gxUFRBN2RUeHVMbXhsYm1kMGFEdDFLejB4S1dsbUtDaGxQVUlvYmx0MVhTNWZLSFFzY2lrc1pTa3BMbk4wWVhSMWN5bHlaWFIxY200Z1pUdHlaWFIxY200Z1pYMHBmV1oxYm1OMGFXOXVJRllvYml4MEtYdHlaWFIxY200Z1NDaHVMSFFwTG05eUtGZ29XMTBwS1gxbWRXNWpkR2x2YmlCSUtHNHNkQ2w3Y21WMGRYSnVJRjhvYmlrc1h5aDBLU3hLS0c0c2RDNTBhR1Z1S0c0cExtMWhibmtvS1N4bWRXNWpkR2x2YmlodUxIUXBlM0psZEhWeWJsdHVYUzVqYjI1allYUW9kQ2w5S1gxbWRXNWpkR2x2YmlCTEtHNHBlMUFvYmlrN2RtRnlJSFE5WENJblhDSXJiaXRjSWlkY0lqdHlaWFIxY200Z1pTaG1kVzVqZEdsdmJpaHlMR1VwZTNaaGNpQjFQV1VyYmk1c1pXNW5kR2dzYnoxeUxuTnNhV05sS0dVc2RTazdjbVYwZFhKdUlHODlQVDF1UDJJb2RTeHZLVHA0S0dVc2RDbDlLWDFtZFc1amRHbHZiaUJSS0c0c2RDbDdJV1oxYm1OMGFXOXVLRzRwZTJsbUtDRW9iaUJwYm5OMFlXNWpaVzltSUZKbFowVjRjQ2twZEdoeWIzY2dibVYzSUVWeWNtOXlLRndpYm05MElHRWdjbVZuWlhod09pQmNJaXR1S1R0bWIzSW9kbUZ5SUhROVJ5aHVLU3h5UFRBN2NqeDBMbXhsYm1kMGFEdHlLeXNwZTNaaGNpQmxQWFF1WTJoaGNrRjBLSElwTzJsbUtGd2lhVndpSVQwOVpTWW1YQ0p0WENJaFBUMWxKaVpjSW5WY0lpRTlQV1VtSmx3aWMxd2lJVDA5WlNsMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNWdWMzVndjRzl5ZEdWa0lISmxaMlY0Y0NCbWJHRm5JRndpSnl0bEt5ZGNJam9nSnl0dUtYMTlLRzRwTEdGeVozVnRaVzUwY3k1c1pXNW5kR2crUFRJL1R5aDBLVHAwUFRBN2RtRnlJSEk5Wm5WdVkzUnBiMjRvYmlsN2NtVjBkWEp1SUZKbFowVjRjQ2hjSWw0b1B6cGNJaXR1TG5OdmRYSmpaU3RjSWlsY0lpeEhLRzRwS1gwb2Jpa3NkVDFjSWx3aUsyNDdjbVYwZFhKdUlHVW9ablZ1WTNScGIyNG9iaXhsS1h0MllYSWdiejF5TG1WNFpXTW9iaTV6YkdsalpTaGxLU2s3YVdZb2J5bDdhV1lvTUR3OWRDWW1kRHc5Ynk1c1pXNW5kR2dwZTNaaGNpQnBQVzliTUYwc1lUMXZXM1JkTzNKbGRIVnliaUJpS0dVcmFTNXNaVzVuZEdnc1lTbDljbVYwZFhKdUlIZ29aU3hjSW5aaGJHbGtJRzFoZEdOb0lHZHliM1Z3SUNnd0lIUnZJRndpSzI4dWJHVnVaM1JvSzF3aUtTQnBiaUJjSWl0MUtYMXlaWFIxY200Z2VDaGxMSFVwZlNsOVpuVnVZM1JwYjI0Z1dDaHVLWHR5WlhSMWNtNGdaU2htZFc1amRHbHZiaWgwTEhJcGUzSmxkSFZ5YmlCaUtISXNiaWw5S1gxbWRXNWpkR2x2YmlCWktHNHBlM0psZEhWeWJpQmxLR1oxYm1OMGFXOXVLSFFzY2lsN2NtVjBkWEp1SUhnb2NpeHVLWDBwZldaMWJtTjBhVzl1SUZvb2JpbDdhV1lvZVNodUtTbHlaWFIxY200Z1pTaG1kVzVqZEdsdmJpaDBMSElwZTNaaGNpQmxQVzR1WHloMExISXBPM0psZEhWeWJpQmxMbWx1WkdWNFBYSXNaUzUyWVd4MVpUMWNJbHdpTEdWOUtUdHBaaWhjSW5OMGNtbHVaMXdpUFQxMGVYQmxiMllnYmlseVpYUjFjbTRnV2loTEtHNHBLVHRwWmlodUlHbHVjM1JoYm1ObGIyWWdVbVZuUlhod0tYSmxkSFZ5YmlCYUtGRW9iaWtwTzNSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSW01dmRDQmhJSE4wY21sdVp5d2djbVZuWlhod0xDQnZjaUJ3WVhKelpYSTZJRndpSzI0cGZXWjFibU4wYVc5dUlDUW9iaWw3Y21WMGRYSnVJRjhvYmlrc1pTaG1kVzVqZEdsdmJpaDBMSElwZTNaaGNpQmxQVzR1WHloMExISXBMSFU5ZEM1emJHbGpaU2h5TEdVdWFXNWtaWGdwTzNKbGRIVnliaUJsTG5OMFlYUjFjejk0S0hJc0oyNXZkQ0JjSWljcmRTc25YQ0luS1RwaUtISXNiblZzYkNsOUtYMW1kVzVqZEdsdmJpQnViaWh1S1h0eVpYUjFjbTRnYXlodUtTeGxLR1oxYm1OMGFXOXVLSFFzY2lsN2RtRnlJR1U5VENoMExISXBPM0psZEhWeWJpQnlQSFF1YkdWdVozUm9KaVp1S0dVcFAySW9jaXN4TEdVcE9uZ29jaXhjSW1FZ1kyaGhjbUZqZEdWeUwySjVkR1VnYldGMFkyaHBibWNnWENJcmJpbDlLWDFtZFc1amRHbHZiaUIwYmlodUxIUXBlMkZ5WjNWdFpXNTBjeTVzWlc1bmRHZzhNaVltS0hROWJpeHVQWFp2YVdRZ01DazdkbUZ5SUhJOVpTaG1kVzVqZEdsdmJpaHVMR1VwZTNKbGRIVnliaUJ5TGw4OWRDZ3BMbDhzY2k1ZktHNHNaU2w5S1R0eVpYUjFjbTRnYmo5eUxtUmxjMk1vYmlrNmNuMW1kVzVqZEdsdmJpQnliaWdwZTNKbGRIVnliaUJaS0Z3aVptRnVkR0Z6ZVMxc1lXNWtMMlZ0Y0hSNVhDSXBmWFV1Y0dGeWMyVTlablZ1WTNScGIyNG9iaWw3YVdZb1hDSnpkSEpwYm1kY0lpRTlkSGx3Wlc5bUlHNG1KaUYzS0c0cEtYUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lpNXdZWEp6WlNCdGRYTjBJR0psSUdOaGJHeGxaQ0IzYVhSb0lHRWdjM1J5YVc1bklHOXlJRUoxWm1abGNpQmhjeUJwZEhNZ1lYSm5kVzFsYm5SY0lpazdkbUZ5SUhRc2NqMTBhR2x6TG5OcmFYQW9ZVzRwTGw4b2Jpd3dLVHR5WlhSMWNtNGdkRDF5TG5OMFlYUjFjejk3YzNSaGRIVnpPaUV3TEhaaGJIVmxPbkl1ZG1Gc2RXVjlPbnR6ZEdGMGRYTTZJVEVzYVc1a1pYZzZVeWh1TEhJdVpuVnlkR2hsYzNRcExHVjRjR1ZqZEdWa09uSXVaWGh3WldOMFpXUjlMR1JsYkdWMFpTQnFXMjVkTEhSOUxIVXVkSEo1VUdGeWMyVTlablZ1WTNScGIyNG9iaWw3ZG1GeUlIUTlkR2hwY3k1d1lYSnpaU2h1S1R0cFppaDBMbk4wWVhSMWN5bHlaWFIxY200Z2RDNTJZV3gxWlR0MllYSWdjajFPS0c0c2RDa3NaVDF1WlhjZ1JYSnliM0lvY2lrN2RHaHliM2NnWlM1MGVYQmxQVndpVUdGeWMybHRiVzl1UlhKeWIzSmNJaXhsTG5KbGMzVnNkRDEwTEdWOUxIVXVZWE56WlhKMFBXWjFibU4wYVc5dUtHNHNkQ2w3Y21WMGRYSnVJSFJvYVhNdVkyaGhhVzRvWm5WdVkzUnBiMjRvY2lsN2NtVjBkWEp1SUc0b2Npay9XQ2h5S1RwWktIUXBmU2w5TEhVdWIzSTlablZ1WTNScGIyNG9iaWw3Y21WMGRYSnVJRlFvZEdocGN5eHVLWDBzZFM1MGNtbHRQV1oxYm1OMGFXOXVLRzRwZTNKbGRIVnliaUIwYUdsekxuZHlZWEFvYml4dUtYMHNkUzUzY21Gd1BXWjFibU4wYVc5dUtHNHNkQ2w3Y21WMGRYSnVJRW9vYml4MGFHbHpMSFFzWm5WdVkzUnBiMjRvYml4MEtYdHlaWFIxY200Z2RIMHBmU3gxTG5Sb2NuVTlablZ1WTNScGIyNG9iaWw3Y21WMGRYSnVJRzRvZEdocGN5bDlMSFV1ZEdobGJqMW1kVzVqZEdsdmJpaHVLWHR5WlhSMWNtNGdYeWh1S1N4REtIUm9hWE1zYmlrdWJXRndLR1oxYm1OMGFXOXVLRzRwZTNKbGRIVnliaUJ1V3pGZGZTbDlMSFV1YldGdWVUMW1kVzVqZEdsdmJpZ3BlM1poY2lCdVBYUm9hWE03Y21WMGRYSnVJR1VvWm5WdVkzUnBiMjRvZEN4eUtYdG1iM0lvZG1GeUlHVTlXMTBzZFQxMmIybGtJREE3T3lsN2FXWW9JU2gxUFVJb2JpNWZLSFFzY2lrc2RTa3BMbk4wWVhSMWN5bHlaWFIxY200Z1FpaGlLSElzWlNrc2RTazdhV1lvY2owOVBYVXVhVzVrWlhncGRHaHliM2NnYm1WM0lFVnljbTl5S0Z3aWFXNW1hVzVwZEdVZ2JHOXZjQ0JrWlhSbFkzUmxaQ0JwYmlBdWJXRnVlU2dwSUhCaGNuTmxjaUF0TFMwZ1kyRnNiR2x1WnlBdWJXRnVlU2dwSUc5dUlHRWdjR0Z5YzJWeUlIZG9hV05vSUdOaGJpQmhZMk5sY0hRZ2VtVnlieUJqYUdGeVlXTjBaWEp6SUdseklIVnpkV0ZzYkhrZ2RHaGxJR05oZFhObFhDSXBPM0k5ZFM1cGJtUmxlQ3hsTG5CMWMyZ29kUzUyWVd4MVpTbDlmU2w5TEhVdWRHbGxWMmwwYUQxbWRXNWpkR2x2YmlodUtYdHlaWFIxY200Z1VDaHVLU3gwYUdsekxtMWhjQ2htZFc1amRHbHZiaWgwS1h0cFppaG1kVzVqZEdsdmJpaHVLWHRwWmlnaFJTaHVLU2wwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0p1YjNRZ1lXNGdZWEp5WVhrNklGd2lLMjRwZlNoMEtTeDBMbXhsYm1kMGFDbDdVQ2gwV3pCZEtUdG1iM0lvZG1GeUlISTlkRnN3WFN4bFBURTdaVHgwTG14bGJtZDBhRHRsS3lzcFVDaDBXMlZkS1N4eUt6MXVLM1JiWlYwN2NtVjBkWEp1SUhKOWNtVjBkWEp1WENKY0luMHBmU3gxTG5ScFpUMW1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQjBhR2x6TG5ScFpWZHBkR2dvWENKY0lpbDlMSFV1ZEdsdFpYTTlablZ1WTNScGIyNG9iaXgwS1h0MllYSWdjajEwYUdsek8zSmxkSFZ5YmlCaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvUERJbUppaDBQVzRwTEU4b2Jpa3NUeWgwS1N4bEtHWjFibU4wYVc5dUtHVXNkU2w3Wm05eUtIWmhjaUJ2UFZ0ZExHazlkbTlwWkNBd0xHRTlkbTlwWkNBd0xHWTlNRHRtUEc0N1ppczlNU2w3YVdZb1lUMUNLR2s5Y2k1ZktHVXNkU2tzWVNrc0lXa3VjM1JoZEhWektYSmxkSFZ5YmlCaE8zVTlhUzVwYm1SbGVDeHZMbkIxYzJnb2FTNTJZV3gxWlNsOVptOXlLRHRtUEhRbUppaGhQVUlvYVQxeUxsOG9aU3gxS1N4aEtTeHBMbk4wWVhSMWN5azdaaXM5TVNsMVBXa3VhVzVrWlhnc2J5NXdkWE5vS0drdWRtRnNkV1VwTzNKbGRIVnliaUJDS0dJb2RTeHZLU3hoS1gwcGZTeDFMbkpsYzNWc2REMW1kVzVqZEdsdmJpaHVLWHR5WlhSMWNtNGdkR2hwY3k1dFlYQW9ablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdibjBwZlN4MUxtRjBUVzl6ZEQxbWRXNWpkR2x2YmlodUtYdHlaWFIxY200Z2RHaHBjeTUwYVcxbGN5Z3dMRzRwZlN4MUxtRjBUR1ZoYzNROVpuVnVZM1JwYjI0b2JpbDdjbVYwZFhKdUlFb29kR2hwY3k1MGFXMWxjeWh1S1N4MGFHbHpMbTFoYm5rb0tTeG1kVzVqZEdsdmJpaHVMSFFwZTNKbGRIVnliaUJ1TG1OdmJtTmhkQ2gwS1gwcGZTeDFMbTFoY0QxbWRXNWpkR2x2YmlodUtYdHJLRzRwTzNaaGNpQjBQWFJvYVhNN2NtVjBkWEp1SUdVb1puVnVZM1JwYjI0b2NpeGxLWHQyWVhJZ2RUMTBMbDhvY2l4bEtUdHlaWFIxY200Z2RTNXpkR0YwZFhNL1FpaGlLSFV1YVc1a1pYZ3NiaWgxTG5aaGJIVmxLU2tzZFNrNmRYMHBmU3gxTG1OdmJuUnlZVzFoY0QxbWRXNWpkR2x2YmlodUtYdHJLRzRwTzNaaGNpQjBQWFJvYVhNN2NtVjBkWEp1SUdVb1puVnVZM1JwYjI0b2NpeGxLWHQyWVhJZ2RUMTBMbkJoY25ObEtHNG9jaTV6YkdsalpTaGxLU2twTzNKbGRIVnliaUIxTG5OMFlYUjFjejlpS0dVcmNpNXNaVzVuZEdnc2RTNTJZV3gxWlNrNmRYMHBmU3gxTG5CeWIyMWhjRDFtZFc1amRHbHZiaWh1TEhRcGUzSmxkSFZ5YmlCcktHNHBMR3NvZENrc2RHaHBjeTVqYjI1MGNtRnRZWEFvYmlrdWJXRndLSFFwZlN4MUxuTnJhWEE5Wm5WdVkzUnBiMjRvYmlsN2NtVjBkWEp1SUVNb2RHaHBjeXh1S1M1dFlYQW9ablZ1WTNScGIyNG9iaWw3Y21WMGRYSnVJRzViTUYxOUtYMHNkUzV0WVhKclBXWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlFb29aVzRzZEdocGN5eGxiaXhtZFc1amRHbHZiaWh1TEhRc2NpbDdjbVYwZFhKdWUzTjBZWEowT200c2RtRnNkV1U2ZEN4bGJtUTZjbjE5S1gwc2RTNXViMlJsUFdaMWJtTjBhVzl1S0c0cGUzSmxkSFZ5YmlCS0tHVnVMSFJvYVhNc1pXNHNablZ1WTNScGIyNG9kQ3h5TEdVcGUzSmxkSFZ5Ym50dVlXMWxPbTRzZG1Gc2RXVTZjaXh6ZEdGeWREcDBMR1Z1WkRwbGZYMHBmU3gxTG5ObGNFSjVQV1oxYm1OMGFXOXVLRzRwZTNKbGRIVnliaUJXS0hSb2FYTXNiaWw5TEhVdWMyVndRbmt4UFdaMWJtTjBhVzl1S0c0cGUzSmxkSFZ5YmlCSUtIUm9hWE1zYmlsOUxIVXViRzl2YTJGb1pXRmtQV1oxYm1OMGFXOXVLRzRwZTNKbGRIVnliaUIwYUdsekxuTnJhWEFvV2lodUtTbDlMSFV1Ym05MFJtOXNiRzkzWldSQ2VUMW1kVzVqZEdsdmJpaHVLWHR5WlhSMWNtNGdkR2hwY3k1emEybHdLQ1FvYmlrcGZTeDFMbVJsYzJNOVpuVnVZM1JwYjI0b2JpbDdSU2h1S1h4OEtHNDlXMjVkS1R0MllYSWdkRDEwYUdsek8zSmxkSFZ5YmlCbEtHWjFibU4wYVc5dUtISXNaU2w3ZG1GeUlIVTlkQzVmS0hJc1pTazdjbVYwZFhKdUlIVXVjM1JoZEhWemZId29kUzVsZUhCbFkzUmxaRDF1S1N4MWZTbDlMSFV1Wm1Gc2JHSmhZMnM5Wm5WdVkzUnBiMjRvYmlsN2NtVjBkWEp1SUhSb2FYTXViM0lvV0NodUtTbDlMSFV1WVhBOVpuVnVZM1JwYjI0b2JpbDdjbVYwZFhKdUlFb29iaXgwYUdsekxHWjFibU4wYVc5dUtHNHNkQ2w3Y21WMGRYSnVJRzRvZENsOUtYMHNkUzVqYUdGcGJqMW1kVzVqZEdsdmJpaHVLWHQyWVhJZ2REMTBhR2x6TzNKbGRIVnliaUJsS0daMWJtTjBhVzl1S0hJc1pTbDdkbUZ5SUhVOWRDNWZLSElzWlNrN2NtVjBkWEp1SUhVdWMzUmhkSFZ6UDBJb2JpaDFMblpoYkhWbEtTNWZLSElzZFM1cGJtUmxlQ2tzZFNrNmRYMHBmU3gxTG1OdmJtTmhkRDExTG05eUxIVXVaVzF3ZEhrOWNtNHNkUzV2WmoxWUxIVmJYQ0ptWVc1MFlYTjVMV3hoYm1RdllYQmNJbDA5ZFM1aGNDeDFXMXdpWm1GdWRHRnplUzFzWVc1a0wyTm9ZV2x1WENKZFBYVXVZMmhoYVc0c2RWdGNJbVpoYm5SaGMza3RiR0Z1WkM5amIyNWpZWFJjSWwwOWRTNWpiMjVqWVhRc2RWdGNJbVpoYm5SaGMza3RiR0Z1WkM5bGJYQjBlVndpWFQxMUxtVnRjSFI1TEhWYlhDSm1ZVzUwWVhONUxXeGhibVF2YjJaY0lsMDlkUzV2Wml4MVcxd2labUZ1ZEdGemVTMXNZVzVrTDIxaGNGd2lYVDExTG0xaGNEdDJZWElnWlc0OVpTaG1kVzVqZEdsdmJpaHVMSFFwZTNKbGRIVnliaUJpS0hRc1V5aHVMSFFwS1gwcExIVnVQV1VvWm5WdVkzUnBiMjRvYml4MEtYdHlaWFIxY200Z2RENDliaTVzWlc1bmRHZy9lQ2gwTEZ3aVlXNTVJR05vWVhKaFkzUmxjaTlpZVhSbFhDSXBPbUlvZENzeExFd29iaXgwS1NsOUtTeHZiajFsS0daMWJtTjBhVzl1S0c0c2RDbDdjbVYwZFhKdUlHSW9iaTVzWlc1bmRHZ3NiaTV6YkdsalpTaDBLU2w5S1N4aGJqMWxLR1oxYm1OMGFXOXVLRzRzZENsN2NtVjBkWEp1SUhROGJpNXNaVzVuZEdnL2VDaDBMRndpUlU5R1hDSXBPbUlvZEN4dWRXeHNLWDBwTEdadVBWRW9MMXN3TFRsZEx5a3VaR1Z6WXloY0ltRWdaR2xuYVhSY0lpa3NZMjQ5VVNndld6QXRPVjBxTHlrdVpHVnpZeWhjSW05d2RHbHZibUZzSUdScFoybDBjMXdpS1N4emJqMVJLQzliWVMxNlhTOXBLUzVrWlhOaktGd2lZU0JzWlhSMFpYSmNJaWtzYkc0OVVTZ3ZXMkV0ZWwwcUwya3BMbVJsYzJNb1hDSnZjSFJwYjI1aGJDQnNaWFIwWlhKelhDSXBMR2h1UFZFb0wxeGNjeW92S1M1a1pYTmpLRndpYjNCMGFXOXVZV3dnZDJocGRHVnpjR0ZqWlZ3aUtTeHdiajFSS0M5Y1hITXJMeWt1WkdWell5aGNJbmRvYVhSbGMzQmhZMlZjSWlrc1pHNDlTeWhjSWx4Y2Nsd2lLU3gyYmoxTEtGd2lYRnh1WENJcExHZHVQVXNvWENKY1hISmNYRzVjSWlrc2JXNDlWQ2huYml4MmJpeGtiaWt1WkdWell5aGNJbTVsZDJ4cGJtVmNJaWtzZVc0OVZDaHRiaXhoYmlrN1pTNWhiR3c5YjI0c1pTNWhiSFE5VkN4bExtRnVlVDExYml4bExtTnlQV1J1TEdVdVkzSmxZWFJsVEdGdVozVmhaMlU5Wm5WdVkzUnBiMjRvYmlsN2RtRnlJSFE5ZTMwN1ptOXlLSFpoY2lCeUlHbHVJRzRwS0h0OUtTNW9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLRzRzY2lrbUptWjFibU4wYVc5dUtISXBlM1JiY2wwOWRHNG9ablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdibHR5WFNoMEtYMHBmU2h5S1R0eVpYUjFjbTRnZEgwc1pTNWpjbXhtUFdkdUxHVXVZM1Z6ZEc5dFBXWjFibU4wYVc5dUtHNHBlM0psZEhWeWJpQmxLRzRvWWl4NEtTbDlMR1V1WkdsbmFYUTlabTRzWlM1a2FXZHBkSE05WTI0c1pTNWxiWEIwZVQxeWJpeGxMbVZ1WkQxNWJpeGxMbVZ2WmoxaGJpeGxMbVpoYVd3OVdTeGxMbVp2Y20xaGRFVnljbTl5UFU0c1pTNXBibVJsZUQxbGJpeGxMbWx6VUdGeWMyVnlQWGtzWlM1c1lYcDVQWFJ1TEdVdWJHVjBkR1Z5UFhOdUxHVXViR1YwZEdWeWN6MXNiaXhsTG14bVBYWnVMR1V1Ykc5dmEyRm9aV0ZrUFZvc1pTNXRZV3RsUm1GcGJIVnlaVDE0TEdVdWJXRnJaVk4xWTJObGMzTTlZaXhsTG01bGQyeHBibVU5Ylc0c1pTNXViMjVsVDJZOVpuVnVZM1JwYjI0b2JpbDdjbVYwZFhKdUlHNXVLR1oxYm1OMGFXOXVLSFFwZTNKbGRIVnliaUJ1TG1sdVpHVjRUMllvZENrOE1IMHBMbVJsYzJNb1hDSnViMjVsSUc5bUlDZGNJaXR1SzF3aUoxd2lLWDBzWlM1dWIzUkdiMnhzYjNkbFpFSjVQU1FzWlM1dlpqMVlMR1V1YjI1bFQyWTlablZ1WTNScGIyNG9iaWw3Wm05eUtIWmhjaUIwUFc0dWMzQnNhWFFvWENKY0lpa3NjajB3TzNJOGRDNXNaVzVuZEdnN2Npc3JLWFJiY2wwOVhDSW5YQ0lyZEZ0eVhTdGNJaWRjSWp0eVpYUjFjbTRnYm00b1puVnVZM1JwYjI0b2RDbDdjbVYwZFhKdUlHNHVhVzVrWlhoUFppaDBLVDQ5TUgwcExtUmxjMk1vZENsOUxHVXViM0IwVjJocGRHVnpjR0ZqWlQxb2JpeGxMbEJoY25ObGNqMWxMR1V1Y21GdVoyVTlablZ1WTNScGIyNG9iaXgwS1h0eVpYUjFjbTRnYm00b1puVnVZM1JwYjI0b2NpbDdjbVYwZFhKdUlHNDhQWEltSm5JOFBYUjlLUzVrWlhOaktHNHJYQ0l0WENJcmRDbDlMR1V1Y21WblpYZzlVU3hsTG5KbFoyVjRjRDFSTEdVdWMyVndRbms5Vml4bExuTmxjRUo1TVQxSUxHVXVjMlZ4UFVNc1pTNXpaWEZOWVhBOVNpeGxMbk5sY1U5aWFqMW1kVzVqZEdsdmJpZ3BlMlp2Y2loMllYSWdiaXgwUFh0OUxISTlNQ3gxUFNodVBXRnlaM1Z0Wlc1MGN5eEJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaHVLU2tzYnoxMUxteGxibWQwYUN4cFBUQTdhVHh2TzJrclBURXBlM1poY2lCaFBYVmJhVjA3YVdZb0lYa29ZU2twZTJsbUtFVW9ZU2ttSmpJOVBUMWhMbXhsYm1kMGFDWW1YQ0p6ZEhKcGJtZGNJajA5ZEhsd1pXOW1JR0ZiTUYwbUpua29ZVnN4WFNrcGUzWmhjaUJtUFdGYk1GMDdhV1lvVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0hRc1ppa3BkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGd2ljMlZ4VDJKcU9pQmtkWEJzYVdOaGRHVWdhMlY1SUZ3aUsyWXBPM1JiWmwwOUlUQXNjaXNyTzJOdmJuUnBiblZsZlhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSW5ObGNVOWlhaUJoY21kMWJXVnVkSE1nYlhWemRDQmlaU0J3WVhKelpYSnpJRzl5SUZ0emRISnBibWNzSUhCaGNuTmxjbDBnWVhKeVlYa2djR0ZwY25NdVhDSXBmWDFwWmlnd1BUMDljaWwwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0p6WlhGUFltb2daWGh3WldOMGN5QmhkQ0JzWldGemRDQnZibVVnYm1GdFpXUWdjR0Z5YzJWeUxDQm1iM1Z1WkNCNlpYSnZYQ0lwTzNKbGRIVnliaUJsS0daMWJtTjBhVzl1S0c0c2RDbDdabTl5S0haaGNpQnlMR1U5ZTMwc2FUMHdPMms4Ynp0cEt6MHhLWHQyWVhJZ1lTeG1PMmxtS0VVb2RWdHBYU2svS0dFOWRWdHBYVnN3WFN4bVBYVmJhVjFiTVYwcE9paGhQVzUxYkd3c1pqMTFXMmxkS1N3aEtISTlRaWhtTGw4b2JpeDBLU3h5S1NrdWMzUmhkSFZ6S1hKbGRIVnliaUJ5TzJFbUppaGxXMkZkUFhJdWRtRnNkV1VwTEhROWNpNXBibVJsZUgxeVpYUjFjbTRnUWloaUtIUXNaU2tzY2lsOUtYMHNaUzV6ZEhKcGJtYzlTeXhsTG5OMVkyTmxaV1E5V0N4bExuUmhhMlZYYUdsc1pUMW1kVzVqZEdsdmJpaHVLWHR5WlhSMWNtNGdheWh1S1N4bEtHWjFibU4wYVc5dUtIUXNjaWw3Wm05eUtIWmhjaUJsUFhJN1pUeDBMbXhsYm1kMGFDWW1iaWhNS0hRc1pTa3BPeWxsS3lzN2NtVjBkWEp1SUdJb1pTeDBMbk5zYVdObEtISXNaU2twZlNsOUxHVXVkR1Z6ZEQxdWJpeGxMbmRvYVhSbGMzQmhZMlU5Y0c0c1pWdGNJbVpoYm5SaGMza3RiR0Z1WkM5bGJYQjBlVndpWFQxeWJpeGxXMXdpWm1GdWRHRnplUzFzWVc1a0wyOW1YQ0pkUFZnc1pTNUNhVzVoY25rOWUySnBkRk5sY1Rwc0xHSnBkRk5sY1U5aWFqcG1kVzVqZEdsdmJpaHVLWHR6S0NrN2RtRnlJSFE5ZTMwc2NqMHdMR1U5WVNobWRXNWpkR2x2YmlodUtYdHBaaWhGS0c0cEtYdDJZWElnWlQxdU8ybG1LREloUFQxbExteGxibWQwYUNsMGFISnZkeUJ1WlhjZ1JYSnliM0lvWENKYlhDSXJaUzVxYjJsdUtGd2lMQ0JjSWlrclhDSmRJSE5vYjNWc1pDQmlaU0JzWlc1bmRHZ2dNaXdnWjI5MElHeGxibWQwYUNCY0lpdGxMbXhsYm1kMGFDazdhV1lvVUNobFd6QmRLU3hQS0dWYk1WMHBMRTlpYW1WamRDNXdjbTkwYjNSNWNHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrdVkyRnNiQ2gwTEdWYk1GMHBLWFJvY205M0lHNWxkeUJGY25KdmNpaGNJbVIxY0d4cFkyRjBaU0JyWlhrZ2FXNGdZbWwwVTJWeFQySnFPaUJjSWl0bFd6QmRLVHR5WlhSMWNtNGdkRnRsV3pCZFhUMGhNQ3h5S3lzc1pYMXlaWFIxY200Z1R5aHVLU3hiYm5Wc2JDeHVYWDBzYmlrN2FXWW9jand4S1hSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSW1KcGRGTmxjVTlpYWlCbGVIQmxZM1J6SUdGMElHeGxZWE4wSUc5dVpTQnVZVzFsWkNCd1lXbHlMQ0JuYjNRZ1cxd2lLMjR1YW05cGJpaGNJaXdnWENJcEsxd2lYVndpS1R0MllYSWdkVDFoS0daMWJtTjBhVzl1S0c0cGUzSmxkSFZ5YmlCdVd6QmRmU3hsS1R0eVpYUjFjbTRnYkNoaEtHWjFibU4wYVc5dUtHNHBlM0psZEhWeWJpQnVXekZkZlN4bEtTa3ViV0Z3S0daMWJtTjBhVzl1S0c0cGUzSmxkSFZ5YmlCcEtHWjFibU4wYVc5dUtHNHNkQ2w3Y21WMGRYSnVJRzUxYkd3aFBUMTBXekJkSmlZb2JsdDBXekJkWFQxMFd6RmRLU3h1ZlN4N2ZTeGhLR1oxYm1OMGFXOXVLSFFzY2lsN2NtVjBkWEp1VzNRc2JsdHlYVjE5TEhVcEtYMHBmU3hpZVhSbE9tWjFibU4wYVc5dUtHNHBlMmxtS0hNb0tTeFBLRzRwTEc0K01qVTFLWFJvY205M0lHNWxkeUJGY25KdmNpaGNJbFpoYkhWbElITndaV05wWm1sbFpDQjBieUJpZVhSbElHTnZibk4wY25WamRHOXlJQ2hjSWl0dUsxd2lQVEI0WENJcmJpNTBiMU4wY21sdVp5Z3hOaWtyWENJcElHbHpJR3hoY21kbGNpQnBiaUIyWVd4MVpTQjBhR0Z1SUdFZ2MybHVaMnhsSUdKNWRHVXVYQ0lwTzNaaGNpQjBQU2h1UGpFMVAxd2lNSGhjSWpwY0lqQjRNRndpS1N0dUxuUnZVM1J5YVc1bktERTJLVHR5WlhSMWNtNGdaU2htZFc1amRHbHZiaWh5TEdVcGUzWmhjaUIxUFV3b2NpeGxLVHR5WlhSMWNtNGdkVDA5UFc0L1lpaGxLekVzZFNrNmVDaGxMSFFwZlNsOUxHSjFabVpsY2pwbWRXNWpkR2x2YmlodUtYdHlaWFIxY200Z2FDaGNJbUoxWm1abGNsd2lMRzRwTG0xaGNDaG1kVzVqZEdsdmJpaHVLWHR5WlhSMWNtNGdRblZtWm1WeUxtWnliMjBvYmlsOUtYMHNaVzVqYjJSbFpGTjBjbWx1WnpwbWRXNWpkR2x2YmlodUxIUXBlM0psZEhWeWJpQm9LRndpYzNSeWFXNW5YQ0lzZENrdWJXRndLR1oxYm1OMGFXOXVLSFFwZTNKbGRIVnliaUIwTG5SdlUzUnlhVzVuS0c0cGZTbDlMSFZwYm5SQ1JUcGtMSFZwYm5RNFFrVTZaQ2d4S1N4MWFXNTBNVFpDUlRwa0tESXBMSFZwYm5Rek1rSkZPbVFvTkNrc2RXbHVkRXhGT25Zc2RXbHVkRGhNUlRwMktERXBMSFZwYm5ReE5reEZPbllvTWlrc2RXbHVkRE15VEVVNmRpZzBLU3hwYm5SQ1JUcG5MR2x1ZERoQ1JUcG5LREVwTEdsdWRERTJRa1U2WnlneUtTeHBiblF6TWtKRk9tY29OQ2tzYVc1MFRFVTZiU3hwYm5RNFRFVTZiU2d4S1N4cGJuUXhOa3hGT20wb01pa3NhVzUwTXpKTVJUcHRLRFFwTEdac2IyRjBRa1U2YUNoY0ltWnNiMkYwUWtWY0lpdzBLUzV0WVhBb1puVnVZM1JwYjI0b2JpbDdjbVYwZFhKdUlHNHVjbVZoWkVac2IyRjBRa1VvTUNsOUtTeG1iRzloZEV4Rk9tZ29YQ0ptYkc5aGRFeEZYQ0lzTkNrdWJXRndLR1oxYm1OMGFXOXVLRzRwZTNKbGRIVnliaUJ1TG5KbFlXUkdiRzloZEV4RktEQXBmU2tzWkc5MVlteGxRa1U2YUNoY0ltUnZkV0pzWlVKRlhDSXNPQ2t1YldGd0tHWjFibU4wYVc5dUtHNHBlM0psZEhWeWJpQnVMbkpsWVdSRWIzVmliR1ZDUlNnd0tYMHBMR1J2ZFdKc1pVeEZPbWdvWENKa2IzVmliR1ZNUlZ3aUxEZ3BMbTFoY0NobWRXNWpkR2x2YmlodUtYdHlaWFIxY200Z2JpNXlaV0ZrUkc5MVlteGxURVVvTUNsOUtYMHNiaTVsZUhCdmNuUnpQV1Y5WFNsOUtUc2lMQ0FpWENKMWMyVWdjM1J5YVdOMFhDSTdYSEpjYm5aaGNpQmZYMlY0ZEdWdVpITWdQU0FvZEdocGN5QW1KaUIwYUdsekxsOWZaWGgwWlc1a2N5a2dmSHdnS0daMWJtTjBhVzl1SUNncElIdGNjbHh1SUNBZ0lIWmhjaUJsZUhSbGJtUlRkR0YwYVdOeklEMGdablZ1WTNScGIyNGdLR1FzSUdJcElIdGNjbHh1SUNBZ0lDQWdJQ0JsZUhSbGJtUlRkR0YwYVdOeklEMGdUMkpxWldOMExuTmxkRkJ5YjNSdmRIbHdaVTltSUh4OFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNoN0lGOWZjSEp2ZEc5Zlh6b2dXMTBnZlNCcGJuTjBZVzVqWlc5bUlFRnljbUY1SUNZbUlHWjFibU4wYVc5dUlDaGtMQ0JpS1NCN0lHUXVYMTl3Y205MGIxOWZJRDBnWWpzZ2ZTa2dmSHhjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdablZ1WTNScGIyNGdLR1FzSUdJcElIc2dabTl5SUNoMllYSWdjQ0JwYmlCaUtTQnBaaUFvVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0dJc0lIQXBLU0JrVzNCZElEMGdZbHR3WFRzZ2ZUdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdaWGgwWlc1a1UzUmhkR2xqY3loa0xDQmlLVHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0J5WlhSMWNtNGdablZ1WTNScGIyNGdLR1FzSUdJcElIdGNjbHh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdJZ0lUMDlJRndpWm5WdVkzUnBiMjVjSWlBbUppQmlJQ0U5UFNCdWRXeHNLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLRndpUTJ4aGMzTWdaWGgwWlc1a2N5QjJZV3gxWlNCY0lpQXJJRk4wY21sdVp5aGlLU0FySUZ3aUlHbHpJRzV2ZENCaElHTnZibk4wY25WamRHOXlJRzl5SUc1MWJHeGNJaWs3WEhKY2JpQWdJQ0FnSUNBZ1pYaDBaVzVrVTNSaGRHbGpjeWhrTENCaUtUdGNjbHh1SUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJmWHlncElIc2dkR2hwY3k1amIyNXpkSEoxWTNSdmNpQTlJR1E3SUgxY2NseHVJQ0FnSUNBZ0lDQmtMbkJ5YjNSdmRIbHdaU0E5SUdJZ1BUMDlJRzUxYkd3Z1B5QlBZbXBsWTNRdVkzSmxZWFJsS0dJcElEb2dLRjlmTG5CeWIzUnZkSGx3WlNBOUlHSXVjSEp2ZEc5MGVYQmxMQ0J1WlhjZ1gxOG9LU2s3WEhKY2JpQWdJQ0I5TzF4eVhHNTlLU2dwTzF4eVhHNVBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvWlhod2IzSjBjeXdnWENKZlgyVnpUVzlrZFd4bFhDSXNJSHNnZG1Gc2RXVTZJSFJ5ZFdVZ2ZTazdYSEpjYm1WNGNHOXlkSE11Ulcxd2RIbENWSEpsWlNBOUlHVjRjRzl5ZEhNdVlYTlRaWFFnUFNCbGVIQnZjblJ6TG5OcGJYQnNaVU52YlhCaGNtRjBiM0lnUFNCbGVIQnZjblJ6TG1SbFptRjFiSFJEYjIxd1lYSmhkRzl5SUQwZ2RtOXBaQ0F3TzF4eVhHNHZLaXBjY2x4dUlDb2dRMjl0Y0dGeVpYTWdSR1ZtWVhWc2RFTnZiWEJoY21GaWJHVnpJSFJ2SUdadmNtMGdZU0J6ZEhKcFkzUWdjR0Z5ZEdsaGJDQnZjbVJsY21sdVp5NWNjbHh1SUNwY2NseHVJQ29nU0dGdVpHeGxjeUFyTHkwd0lHRnVaQ0JPWVU0Z2JHbHJaU0JOWVhBNklFNWhUaUJwY3lCbGNYVmhiQ0IwYnlCT1lVNHNJR0Z1WkNBdE1DQnBjeUJsY1hWaGJDQjBieUFyTUM1Y2NseHVJQ3BjY2x4dUlDb2dRWEp5WVhseklHRnlaU0JqYjIxd1lYSmxaQ0IxYzJsdVp5QW5QQ2NnWVc1a0lDYytKeXdnZDJocFkyZ2diV0Y1SUdOaGRYTmxJSFZ1Wlhod1pXTjBaV1FnWlhGMVlXeHBkSGs2WEhKY2JpQXFJR1p2Y2lCbGVHRnRjR3hsSUZzeFhTQjNhV3hzSUdKbElHTnZibk5wWkdWeVpXUWdaWEYxWVd3Z2RHOGdXeWN4SjEwdVhISmNiaUFxWEhKY2JpQXFJRlIzYnlCdlltcGxZM1J6SUhkcGRHZ2daWEYxWVd3Z2RtRnNkV1ZQWmlCamIyMXdZWEpsSUhSb1pTQnpZVzFsTENCaWRYUWdZMjl0Y0dGeVpTQjFibVZ4ZFdGc0lIUnZYSEpjYmlBcUlIQnlhVzFwZEdsMlpYTWdkR2hoZENCb1lYWmxJSFJvWlNCellXMWxJSFpoYkhWbExseHlYRzRnS2k5Y2NseHVablZ1WTNScGIyNGdaR1ZtWVhWc2RFTnZiWEJoY21GMGIzSW9ZU3dnWWlrZ2UxeHlYRzRnSUNBZ0x5OGdVM0JsWTJsaGJDQmpZWE5sSUdacGJtbDBaU0J1ZFcxaVpYSnpJR1pwY25OMElHWnZjaUJ3WlhKbWIzSnRZVzVqWlM1Y2NseHVJQ0FnSUM4dklFNXZkR1VnZEdoaGRDQjBhR1VnZEhKcFkyc2diMllnZFhOcGJtY2dKMkVnTFNCaUp5QmhibVFnWTJobFkydHBibWNnWm05eUlFNWhUaUIwYnlCa1pYUmxZM1FnYm05dUxXNTFiV0psY25OY2NseHVJQ0FnSUM4dklHUnZaWE1nYm05MElIZHZjbXNnYVdZZ2RHaGxJSE4wY21sdVozTWdZWEpsSUc1MWJXVnlhV01nS0dWNE9pQmNJalZjSWlrdUlGUm9hWE1nZDI5MWJHUWdiR1ZoWkdsdVp5QnRiM04wSUZ4eVhHNGdJQ0FnTHk4Z1kyOXRjR0Z5YVhOdmJpQm1kVzVqZEdsdmJuTWdkWE5wYm1jZ2RHaGhkQ0JoY0hCeWIyRmphQ0IwYnlCbVlXbHNJSFJ2SUdoaGRtVWdkSEpoYm5OcGRHbDJhWFI1TGx4eVhHNGdJQ0FnYVdZZ0tFNTFiV0psY2k1cGMwWnBibWwwWlNoaEtTQW1KaUJPZFcxaVpYSXVhWE5HYVc1cGRHVW9ZaWtwSUh0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTQXRJR0k3WEhKY2JpQWdJQ0I5WEhKY2JpQWdJQ0F2THlCVWFHVWdaR1ZtWVhWc2RDQThJR0Z1WkNBK0lHOXdaWEpoZEc5eWN5QmhjbVVnYm05MElIUnZkR0ZzYkhrZ2IzSmtaWEpsWkM0Z1ZHOGdZV3hzYjNjZ2RIbHdaWE1nZEc4Z1ltVWdiV2w0WldSY2NseHVJQ0FnSUM4dklHbHVJR0VnYzJsdVoyeGxJR052Ykd4bFkzUnBiMjRzSUdOdmJYQmhjbVVnZEhsd1pYTWdZVzVrSUc5eVpHVnlJSFpoYkhWbGN5QnZaaUJrYVdabVpYSmxiblFnZEhsd1pYTWdZbmtnZEhsd1pTNWNjbHh1SUNBZ0lIWmhjaUIwWVNBOUlIUjVjR1Z2WmlCaE8xeHlYRzRnSUNBZ2RtRnlJSFJpSUQwZ2RIbHdaVzltSUdJN1hISmNiaUFnSUNCcFppQW9kR0VnSVQwOUlIUmlLU0I3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSaElEd2dkR0lnUHlBdE1TQTZJREU3WEhKY2JpQWdJQ0I5WEhKY2JpQWdJQ0JwWmlBb2RHRWdQVDA5SUNkdlltcGxZM1FuS1NCN1hISmNiaUFnSUNBZ0lDQWdMeThnYzNSaGJtUmhjbVJwZW1Wa0lFcGhkbUZUWTNKcGNIUWdZblZuT2lCdWRXeHNJR2x6SUc1dmRDQmhiaUJ2WW1wbFkzUXNJR0oxZENCMGVYQmxiMllnYzJGNWN5QnBkQ0JwYzF4eVhHNGdJQ0FnSUNBZ0lHbG1JQ2hoSUQwOVBTQnVkV3hzS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZaUE5UFQwZ2JuVnNiQ0EvSURBZ09pQXRNVHRjY2x4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoaUlEMDlQU0J1ZFd4c0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnTVR0Y2NseHVJQ0FnSUNBZ0lDQmhJRDBnWVM1MllXeDFaVTltS0NrN1hISmNiaUFnSUNBZ0lDQWdZaUE5SUdJdWRtRnNkV1ZQWmlncE8xeHlYRzRnSUNBZ0lDQWdJSFJoSUQwZ2RIbHdaVzltSUdFN1hISmNiaUFnSUNBZ0lDQWdkR0lnUFNCMGVYQmxiMllnWWp0Y2NseHVJQ0FnSUNBZ0lDQXZMeUJFWldGc0lIZHBkR2dnZEdobElIUjNieUIyWVd4MVpVOW1LQ2x6SUhCeWIyUjFZMmx1WnlCa2FXWm1aWEpsYm5RZ2RIbHdaWE5jY2x4dUlDQWdJQ0FnSUNCcFppQW9kR0VnSVQwOUlIUmlLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBZU0E4SUhSaUlEOGdMVEVnT2lBeE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJSDFjY2x4dUlDQWdJQzh2SUdFZ1lXNWtJR0lnWVhKbElHNXZkeUIwYUdVZ2MyRnRaU0IwZVhCbExDQmhibVFnZDJsc2JDQmlaU0JoSUc1MWJXSmxjaXdnYzNSeWFXNW5JRzl5SUdGeWNtRjVJRnh5WEc0Z0lDQWdMeThnS0hkb2FXTm9JSGRsSUdGemMzVnRaU0JvYjJ4a2N5QnVkVzFpWlhKeklHOXlJSE4wY21sdVozTXBMQ0J2Y2lCemIyMWxkR2hwYm1jZ2RXNXpkWEJ3YjNKMFpXUXVYSEpjYmlBZ0lDQnBaaUFvWVNBOElHSXBYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJQzB4TzF4eVhHNGdJQ0FnYVdZZ0tHRWdQaUJpS1Z4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlBeE8xeHlYRzRnSUNBZ2FXWWdLR0VnUFQwOUlHSXBYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJREE3WEhKY2JpQWdJQ0F2THlCUGNtUmxjaUJPWVU0Z2JHVnpjeUIwYUdGdUlHOTBhR1Z5SUc1MWJXSmxjbk5jY2x4dUlDQWdJR2xtSUNoT2RXMWlaWEl1YVhOT1lVNG9ZU2twWEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUU1MWJXSmxjaTVwYzA1aFRpaGlLU0EvSURBZ09pQXRNVHRjY2x4dUlDQWdJR1ZzYzJVZ2FXWWdLRTUxYldKbGNpNXBjMDVoVGloaUtTbGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdNVHRjY2x4dUlDQWdJQzh2SUZSb2FYTWdZMjkxYkdRZ1ltVWdkSGR2SUc5aWFtVmpkSE1nS0dVdVp5NGdXemRkSUdGdVpDQmJKemNuWFNrZ2RHaGhkQ0JoY21WdUozUWdiM0prWlhKbFpGeHlYRzRnSUNBZ2NtVjBkWEp1SUVGeWNtRjVMbWx6UVhKeVlYa29ZU2tnUHlBd0lEb2dUblZ0WW1WeUxrNWhUanRjY2x4dWZWeHlYRzVsZUhCdmNuUnpMbVJsWm1GMWJIUkRiMjF3WVhKaGRHOXlJRDBnWkdWbVlYVnNkRU52YlhCaGNtRjBiM0k3WEhKY2JqdGNjbHh1Wm5WdVkzUnBiMjRnYzJsdGNHeGxRMjl0Y0dGeVlYUnZjaWhoTENCaUtTQjdYSEpjYmlBZ0lDQnlaWFIxY200Z1lTQStJR0lnUHlBeElEb2dZU0E4SUdJZ1B5QXRNU0E2SURBN1hISmNibjFjY2x4dVpYaHdiM0owY3k1emFXMXdiR1ZEYjIxd1lYSmhkRzl5SUQwZ2MybHRjR3hsUTI5dGNHRnlZWFJ2Y2p0Y2NseHVPMXh5WEc0dktpcGNjbHh1SUNvZ1FTQnlaV0Z6YjI1aFlteDVJR1poYzNRZ1kyOXNiR1ZqZEdsdmJpQnZaaUJyWlhrdGRtRnNkV1VnY0dGcGNuTWdkMmwwYUNCaElIQnZkMlZ5Wm5Wc0lFRlFTUzVjY2x4dUlDb2dUR0Z5WjJWc2VTQmpiMjF3WVhScFlteGxJSGRwZEdnZ2RHaGxJSE4wWVc1a1lYSmtJRTFoY0M0Z1FsUnlaV1VnYVhNZ1lTQkNLeUIwY21WbElHUmhkR0VnYzNSeWRXTjBkWEpsTEZ4eVhHNGdLaUJ6YnlCMGFHVWdZMjlzYkdWamRHbHZiaUJwY3lCemIzSjBaV1FnWW5rZ2EyVjVMbHh5WEc0Z0tseHlYRzRnS2lCQ0t5QjBjbVZsY3lCMFpXNWtJSFJ2SUhWelpTQnRaVzF2Y25rZ2JXOXlaU0JsWm1acFkybGxiblJzZVNCMGFHRnVJR2hoYzJoMFlXSnNaWE1nYzNWamFDQmhjeUIwYUdWY2NseHVJQ29nYzNSaGJtUmhjbVFnVFdGd0xDQmxjM0JsWTJsaGJHeDVJSGRvWlc0Z2RHaGxJR052Ykd4bFkzUnBiMjRnWTI5dWRHRnBibk1nWVNCc1lYSm5aU0J1ZFcxaVpYSWdiMlpjY2x4dUlDb2dhWFJsYlhNdUlFaHZkMlYyWlhJc0lHMWhhVzUwWVdsdWFXNW5JSFJvWlNCemIzSjBJRzl5WkdWeUlHMWhhMlZ6SUhSb1pXMGdiVzlrWlhOMGJIa2djMnh2ZDJWeU9seHlYRzRnS2lCUEtHeHZaeUJ6YVhwbEtTQnlZWFJvWlhJZ2RHaGhiaUJQS0RFcExpQlVhR2x6SUVJcklIUnlaV1VnYVcxd2JHVnRaVzUwWVhScGIyNGdjM1Z3Y0c5eWRITWdUeWd4S1Z4eVhHNGdLaUJtWVhOMElHTnNiMjVwYm1jdUlFbDBJR0ZzYzI4Z2MzVndjRzl5ZEhNZ1puSmxaWHBsS0Nrc0lIZG9hV05vSUdOaGJpQmlaU0IxYzJWa0lIUnZJR1Z1YzNWeVpTQjBhR0YwWEhKY2JpQXFJR0VnUWxSeVpXVWdhWE1nYm05MElHTm9ZVzVuWldRZ1lXTmphV1JsYm5SaGJHeDVMbHh5WEc0Z0tseHlYRzRnS2lCRGIyNW1kWE5wYm1kc2VTd2dkR2hsSUVWVE5pQk5ZWEF1Wm05eVJXRmphQ2hqS1NCdFpYUm9iMlFnWTJGc2JITWdZeWgyWVd4MVpTeHJaWGtwSUdsdWMzUmxZV1FnYjJaY2NseHVJQ29nWXloclpYa3NkbUZzZFdVcExDQnBiaUJqYjI1MGNtRnpkQ0IwYnlCdmRHaGxjaUJ0WlhSb2IyUnpJSE4xWTJnZ1lYTWdjMlYwS0NrZ1lXNWtJR1Z1ZEhKcFpYTW9LVnh5WEc0Z0tpQjNhR2xqYUNCd2RYUWdkR2hsSUd0bGVTQm1hWEp6ZEM0Z1NTQmpZVzRnYjI1c2VTQmhjM04xYldVZ2RHaGhkQ0IwYUdVZ2IzSmtaWElnZDJGeklISmxkbVZ5YzJWa0lHOXVYSEpjYmlBcUlIUm9aU0IwYUdWdmNua2dkR2hoZENCMWMyVnljeUIzYjNWc1pDQjFjM1ZoYkd4NUlIZGhiblFnZEc4Z1pYaGhiV2x1WlNCMllXeDFaWE1nWVc1a0lHbG5ibTl5WlNCclpYbHpMbHh5WEc0Z0tpQkNWSEpsWlNkeklHWnZja1ZoWTJnb0tTQjBhR1Z5WldadmNtVWdkMjl5YTNNZ2RHaGxJSE5oYldVZ2QyRjVMQ0JpZFhRZ1lTQnpaV052Ym1RZ2JXVjBhRzlrWEhKY2JpQXFJR0F1Wm05eVJXRmphRkJoYVhJb0tHdGxlU3gyWVd4MVpTazlQbnN1TGk1OUtXQWdhWE1nY0hKdmRtbGtaV1FnZDJocFkyZ2djMlZ1WkhNZ2VXOTFJSFJvWlNCclpYbGNjbHh1SUNvZ1ptbHljM1FnWVc1a0lIUm9aU0IyWVd4MVpTQnpaV052Ym1RN0lIUm9hWE1nYldWMGFHOWtJR2x6SUhOc2FXZG9kR3g1SUdaaGMzUmxjaUJpWldOaGRYTmxJR2wwSUdselhISmNiaUFxSUhSb1pTQmNJbTVoZEdsMlpWd2lJR1p2Y2kxbFlXTm9JRzFsZEdodlpDQm1iM0lnZEdocGN5QmpiR0Z6Y3k1Y2NseHVJQ3BjY2x4dUlDb2dUM1YwSUc5bUlIUm9aU0JpYjNnc0lFSlVjbVZsSUhOMWNIQnZjblJ6SUd0bGVYTWdkR2hoZENCaGNtVWdiblZ0WW1WeWN5d2djM1J5YVc1bmN5d2dZWEp5WVhseklHOW1YSEpjYmlBcUlHNTFiV0psY25NdmMzUnlhVzVuY3l3Z1JHRjBaU3dnWVc1a0lHOWlhbVZqZEhNZ2RHaGhkQ0JvWVhabElHRWdkbUZzZFdWUFppZ3BJRzFsZEdodlpDQnlaWFIxY201cGJtY2dZVnh5WEc0Z0tpQnVkVzFpWlhJZ2IzSWdjM1J5YVc1bkxpQlBkR2hsY2lCa1lYUmhJSFI1Y0dWekxDQnpkV05vSUdGeklHRnljbUY1Y3lCdlppQkVZWFJsSUc5eUlHTjFjM1J2YlZ4eVhHNGdLaUJ2WW1wbFkzUnpMQ0J5WlhGMWFYSmxJR0VnWTNWemRHOXRJR052YlhCaGNtRjBiM0lzSUhkb2FXTm9JSGx2ZFNCdGRYTjBJSEJoYzNNZ1lYTWdkR2hsSUhObFkyOXVaRnh5WEc0Z0tpQmhjbWQxYldWdWRDQjBieUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSWdLSFJvWlNCbWFYSnpkQ0JoY21kMWJXVnVkQ0JwY3lCaGJpQnZjSFJwYjI1aGJDQnNhWE4wSUc5bVhISmNiaUFxSUdsdWFYUnBZV3dnYVhSbGJYTXBMaUJUZVcxaWIyeHpJR05oYm01dmRDQmlaU0IxYzJWa0lHRnpJR3RsZVhNZ1ltVmpZWFZ6WlNCMGFHVjVJR0Z5WlNCMWJtOXlaR1Z5WldSY2NseHVJQ29nS0c5dVpTQlRlVzFpYjJ3Z2FYTWdibVYyWlhJZ1hDSm5jbVZoZEdWeVhDSWdiM0lnWENKc1pYTnpYQ0lnZEdoaGJpQmhibTkwYUdWeUtTNWNjbHh1SUNwY2NseHVJQ29nUUdWNFlXMXdiR1ZjY2x4dUlDb2dSMmwyWlc0Z1lTQjdibUZ0WlRvZ2MzUnlhVzVuTENCaFoyVTZJRzUxYldKbGNuMGdiMkpxWldOMExDQjViM1VnWTJGdUlHTnlaV0YwWlNCaElIUnlaV1VnYzI5eWRHVmtJR0o1WEhKY2JpQXFJRzVoYldVZ1lXNWtJSFJvWlc0Z1lua2dZV2RsSUd4cGEyVWdkR2hwY3pwY2NseHVJQ3BjY2x4dUlDb2dJQ0FnSUhaaGNpQjBjbVZsSUQwZ2JtVjNJRUpVY21WbEtIVnVaR1ZtYVc1bFpDd2dLR0VzSUdJcElEMCtJSHRjY2x4dUlDb2dJQ0FnSUNBZ2FXWWdLR0V1Ym1GdFpTQStJR0l1Ym1GdFpTbGNjbHh1SUNvZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnTVRzZ0x5OGdVbVYwZFhKdUlHRWdiblZ0WW1WeUlENHdJSGRvWlc0Z1lTQStJR0pjY2x4dUlDb2dJQ0FnSUNBZ1pXeHpaU0JwWmlBb1lTNXVZVzFsSUR3Z1lpNXVZVzFsS1Z4eVhHNGdLaUFnSUNBZ0lDQWdJSEpsZEhWeWJpQXRNVHNnTHk4Z1VtVjBkWEp1SUdFZ2JuVnRZbVZ5SUR3d0lIZG9aVzRnWVNBOElHSmNjbHh1SUNvZ0lDQWdJQ0FnWld4elpTQXZMeUJ1WVcxbGN5QmhjbVVnWlhGMVlXd2dLRzl5SUdsdVkyOXRjR0Z5WVdKc1pTbGNjbHh1SUNvZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWVM1aFoyVWdMU0JpTG1GblpUc2dMeThnVW1WMGRYSnVJRDR3SUhkb1pXNGdZUzVoWjJVZ1BpQmlMbUZuWlZ4eVhHNGdLaUFnSUNBZ2ZTazdYSEpjYmlBcVhISmNiaUFxSUNBZ0lDQjBjbVZsTG5ObGRDaDdibUZ0WlRwY0lrSnBiR3hjSWl3Z1lXZGxPakUzZlN3Z1hDSm9ZWEJ3ZVZ3aUtUdGNjbHh1SUNvZ0lDQWdJSFJ5WldVdWMyVjBLSHR1WVcxbE9sd2lSbkpoYmx3aUxDQmhaMlU2TkRCOUxDQmNJbUoxYzNrZ0ppQnpkSEpsYzNObFpGd2lLVHRjY2x4dUlDb2dJQ0FnSUhSeVpXVXVjMlYwS0h0dVlXMWxPbHdpUW1sc2JGd2lMQ0JoWjJVNk5UVjlMQ0JjSW5KbFkyVnVkR3g1SUd4aGFXUWdiMlptWENJcE8xeHlYRzRnS2lBZ0lDQWdkSEpsWlM1bWIzSkZZV05vVUdGcGNpZ29heXdnZGlrZ1BUNGdlMXh5WEc0Z0tpQWdJQ0FnSUNCamIyNXpiMnhsTG14dlp5aGdUbUZ0WlRvZ0pIdHJMbTVoYldWOUlFRm5aVG9nSkh0ckxtRm5aWDBnVTNSaGRIVnpPaUFrZTNaOVlDazdYSEpjYmlBcUlDQWdJQ0I5S1R0Y2NseHVJQ3BjY2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1WEhKY2JpQXFJRlJvWlNCY0luSmhibWRsWENJZ2JXVjBhRzlrY3lBb1lHWnZja1ZoWTJnc0lHWnZjbEpoYm1kbExDQmxaR2wwVW1GdVoyVmdLU0IzYVd4c0lISmxkSFZ5YmlCMGFHVWdiblZ0WW1WeVhISmNiaUFxSUc5bUlHVnNaVzFsYm5SeklIUm9ZWFFnZDJWeVpTQnpZMkZ1Ym1Wa0xpQkpiaUJoWkdScGRHbHZiaXdnZEdobElHTmhiR3hpWVdOcklHTmhiaUJ5WlhSMWNtNGdlMkp5WldGck9sSjlYSEpjYmlBcUlIUnZJSE4wYjNBZ1pXRnliSGtnWVc1a0lISmxkSFZ5YmlCU0lHWnliMjBnZEdobElHOTFkR1Z5SUdaMWJtTjBhVzl1TGx4eVhHNGdLbHh5WEc0Z0tpQXRJRlJQUkU4NklGUmxjM1FnY0dWeVptOXliV0Z1WTJVZ2IyWWdjSEpsWVd4c2IyTmhkR2x1WnlCMllXeDFaWE1nWVhKeVlYa2dZWFFnYldGNElITnBlbVZjY2x4dUlDb2dMU0JVVDBSUE9pQkJaR1FnWm1GemRDQnBibWwwYVdGc2FYcGhkR2x2YmlCM2FHVnVJR0VnYzI5eWRHVmtJR0Z5Y21GNUlHbHpJSEJ5YjNacFpHVmtJSFJ2SUdOdmJuTjBjblZqZEc5eVhISmNiaUFxWEhKY2JpQXFJRVp2Y2lCdGIzSmxJR1J2WTNWdFpXNTBZWFJwYjI0Z2MyVmxJR2gwZEhCek9pOHZaMmwwYUhWaUxtTnZiUzl4ZDJWeWRHbGxMMkowY21WbExYUjVjR1Z6WTNKcGNIUmNjbHh1SUNwY2NseHVJQ29nUVhKbElIbHZkU0JoSUVNaklHUmxkbVZzYjNCbGNqOGdXVzkxSUcxcFoyaDBJR3hwYTJVZ2RHaGxJSE5wYldsc1lYSWdaR0YwWVNCemRISjFZM1IxY21WeklFa2diV0ZrWlNCbWIzSWdReU02WEhKY2JpQXFJRUpFYVdOMGFXOXVZWEo1TENCQ1RHbHpkQ3dnWlhSakxpQlRaV1VnYUhSMGNEb3ZMMk52Y21VdWJHOTVZeTV1WlhRdlkyOXNiR1ZqZEdsdmJuTXZYSEpjYmlBcVhISmNiaUFxSUVCaGRYUm9iM0lnUkdGMmFXUWdVR2xsY0dkeVlYTnpYSEpjYmlBcUwxeHlYRzUyWVhJZ1FsUnlaV1VnUFNBdktpb2dRR05zWVhOeklDb3ZJQ2htZFc1amRHbHZiaUFvS1NCN1hISmNiaUFnSUNBdktpcGNjbHh1SUNBZ0lDQXFJRWx1YVhScFlXeHBlbVZ6SUdGdUlHVnRjSFI1SUVJcklIUnlaV1V1WEhKY2JpQWdJQ0FnS2lCQWNHRnlZVzBnWTI5dGNHRnlaU0JEZFhOMGIyMGdablZ1WTNScGIyNGdkRzhnWTI5dGNHRnlaU0J3WVdseWN5QnZaaUJsYkdWdFpXNTBjeUJwYmlCMGFHVWdkSEpsWlM1Y2NseHVJQ0FnSUNBcUlDQWdTV1lnYm05MElITndaV05wWm1sbFpDd2daR1ZtWVhWc2RFTnZiWEJoY21GMGIzSWdkMmxzYkNCaVpTQjFjMlZrSUhkb2FXTm9JR2x6SUhaaGJHbGtJR0Z6SUd4dmJtY2dZWE1nU3lCbGVIUmxibVJ6SUVSbFptRjFiSFJEYjIxd1lYSmhZbXhsTGx4eVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUdWdWRISnBaWE1nUVNCelpYUWdiMllnYTJWNUxYWmhiSFZsSUhCaGFYSnpJSFJ2SUdsdWFYUnBZV3hwZW1VZ2RHaGxJSFJ5WldWY2NseHVJQ0FnSUNBcUlFQndZWEpoYlNCdFlYaE9iMlJsVTJsNlpTQkNjbUZ1WTJocGJtY2dabUZqZEc5eUlDaHRZWGhwYlhWdElHbDBaVzF6SUc5eUlHTm9hV3hrY21WdUlIQmxjaUJ1YjJSbEtWeHlYRzRnSUNBZ0lDb2dJQ0JOZFhOMElHSmxJR2x1SUhKaGJtZGxJRFF1TGpJMU5pNGdTV1lnZFc1a1pXWnBibVZrSUc5eUlEdzBJSFJvWlc0Z1pHVm1ZWFZzZENCcGN5QjFjMlZrT3lCcFppQStNalUySUhSb1pXNGdNalUyTGx4eVhHNGdJQ0FnSUNvdlhISmNiaUFnSUNCbWRXNWpkR2x2YmlCQ1ZISmxaU2hsYm5SeWFXVnpMQ0JqYjIxd1lYSmxMQ0J0WVhoT2IyUmxVMmw2WlNrZ2UxeHlYRzRnSUNBZ0lDQWdJSFJvYVhNdVgzSnZiM1FnUFNCRmJYQjBlVXhsWVdZN1hISmNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmMybDZaU0E5SURBN1hISmNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmJXRjRUbTlrWlZOcGVtVWdQU0J0WVhoT2IyUmxVMmw2WlNBK1BTQTBJRDhnVFdGMGFDNXRhVzRvYldGNFRtOWtaVk5wZW1Vc0lESTFOaWtnT2lBek1qdGNjbHh1SUNBZ0lDQWdJQ0IwYUdsekxsOWpiMjF3WVhKbElEMGdZMjl0Y0dGeVpTQjhmQ0JrWldaaGRXeDBRMjl0Y0dGeVlYUnZjanRjY2x4dUlDQWdJQ0FnSUNCcFppQW9aVzUwY21sbGN5bGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV6WlhSUVlXbHljeWhsYm5SeWFXVnpLVHRjY2x4dUlDQWdJSDFjY2x4dUlDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoQ1ZISmxaUzV3Y205MGIzUjVjR1VzSUZ3aWMybDZaVndpTENCN1hISmNiaUFnSUNBZ0lDQWdMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2NseHVJQ0FnSUNBZ0lDQXZMeUJGVXpZZ1RXRndQRXNzVmo0Z2JXVjBhRzlrY3lBdkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2TDF4eVhHNGdJQ0FnSUNBZ0lDOHFLaUJIWlhSeklIUm9aU0J1ZFcxaVpYSWdiMllnYTJWNUxYWmhiSFZsSUhCaGFYSnpJR2x1SUhSb1pTQjBjbVZsTGlBcUwxeHlYRzRnSUNBZ0lDQWdJR2RsZERvZ1puVnVZM1JwYjI0Z0tDa2dleUJ5WlhSMWNtNGdkR2hwY3k1ZmMybDZaVHNnZlN4Y2NseHVJQ0FnSUNBZ0lDQmxiblZ0WlhKaFlteGxPaUJtWVd4elpTeGNjbHh1SUNBZ0lDQWdJQ0JqYjI1bWFXZDFjbUZpYkdVNklIUnlkV1ZjY2x4dUlDQWdJSDBwTzF4eVhHNGdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtFSlVjbVZsTG5CeWIzUnZkSGx3WlN3Z1hDSnNaVzVuZEdoY0lpd2dlMXh5WEc0Z0lDQWdJQ0FnSUM4cUtpQkhaWFJ6SUhSb1pTQnVkVzFpWlhJZ2IyWWdhMlY1TFhaaGJIVmxJSEJoYVhKeklHbHVJSFJvWlNCMGNtVmxMaUFxTDF4eVhHNGdJQ0FnSUNBZ0lHZGxkRG9nWm5WdVkzUnBiMjRnS0NrZ2V5QnlaWFIxY200Z2RHaHBjeTVmYzJsNlpUc2dmU3hjY2x4dUlDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2NseHVJQ0FnSUNBZ0lDQmpiMjVtYVdkMWNtRmliR1U2SUhSeWRXVmNjbHh1SUNBZ0lIMHBPMXh5WEc0Z0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0VKVWNtVmxMbkJ5YjNSdmRIbHdaU3dnWENKcGMwVnRjSFI1WENJc0lIdGNjbHh1SUNBZ0lDQWdJQ0F2S2lvZ1VtVjBkWEp1Y3lCMGNuVmxJR2xtWmlCMGFHVWdkSEpsWlNCamIyNTBZV2x1Y3lCdWJ5QnJaWGt0ZG1Gc2RXVWdjR0ZwY25NdUlDb3ZYSEpjYmlBZ0lDQWdJQ0FnWjJWME9pQm1kVzVqZEdsdmJpQW9LU0I3SUhKbGRIVnliaUIwYUdsekxsOXphWHBsSUQwOVBTQXdPeUI5TEZ4eVhHNGdJQ0FnSUNBZ0lHVnVkVzFsY21GaWJHVTZJR1poYkhObExGeHlYRzRnSUNBZ0lDQWdJR052Ym1acFozVnlZV0pzWlRvZ2RISjFaVnh5WEc0Z0lDQWdmU2s3WEhKY2JpQWdJQ0F2S2lvZ1VtVnNaV0Z6WlhNZ2RHaGxJSFJ5WldVZ2MyOGdkR2hoZENCcGRITWdjMmw2WlNCcGN5QXdMaUFxTDF4eVhHNGdJQ0FnUWxSeVpXVXVjSEp2ZEc5MGVYQmxMbU5zWldGeUlEMGdablZ1WTNScGIyNGdLQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lIUm9hWE11WDNKdmIzUWdQU0JGYlhCMGVVeGxZV1k3WEhKY2JpQWdJQ0FnSUNBZ2RHaHBjeTVmYzJsNlpTQTlJREE3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnTHlvcUlGSjFibk1nWVNCbWRXNWpkR2x2YmlCbWIzSWdaV0ZqYUNCclpYa3RkbUZzZFdVZ2NHRnBjaXdnYVc0Z2IzSmtaWElnWm5KdmJTQnpiV0ZzYkdWemRDQjBiMXh5WEc0Z0lDQWdJQ29nSUd4aGNtZGxjM1FnYTJWNUxpQkdiM0lnWTI5dGNHRjBhV0pwYkdsMGVTQjNhWFJvSUVWVE5pQk5ZWEFzSUhSb1pTQmhjbWQxYldWdWRDQnZjbVJsY2lCMGIxeHlYRzRnSUNBZ0lDb2dJSFJvWlNCallXeHNZbUZqYXlCcGN5QmlZV05yZDJGeVpITTZJSFpoYkhWbElHWnBjbk4wTENCMGFHVnVJR3RsZVM0Z1EyRnNiQ0JtYjNKRllXTm9VR0ZwY2x4eVhHNGdJQ0FnSUNvZ0lHbHVjM1JsWVdRZ2RHOGdjbVZqWldsMlpTQjBhR1VnYTJWNUlHRnpJSFJvWlNCbWFYSnpkQ0JoY21kMWJXVnVkQzVjY2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0IwYUdselFYSm5JRWxtSUhCeWIzWnBaR1ZrTENCMGFHbHpJSEJoY21GdFpYUmxjaUJwY3lCaGMzTnBaMjVsWkNCaGN5QjBhR1VnWUhSb2FYTmdYSEpjYmlBZ0lDQWdLaUFnSUNBZ0lDQWdkbUZzZFdVZ1ptOXlJR1ZoWTJnZ1kyRnNiR0poWTJzdVhISmNiaUFnSUNBZ0tpQkFjbVYwZFhKdWN5QjBhR1VnYm5WdFltVnlJRzltSUhaaGJIVmxjeUIwYUdGMElIZGxjbVVnYzJWdWRDQjBieUIwYUdVZ1kyRnNiR0poWTJzc1hISmNiaUFnSUNBZ0tpQWdJQ0FnSUNBZ2IzSWdkR2hsSUZJZ2RtRnNkV1VnYVdZZ2RHaGxJR05oYkd4aVlXTnJJSEpsZEhWeWJtVmtJSHRpY21WaGF6cFNmUzRnS2k5Y2NseHVJQ0FnSUVKVWNtVmxMbkJ5YjNSdmRIbHdaUzVtYjNKRllXTm9JRDBnWm5WdVkzUnBiMjRnS0dOaGJHeGlZV05yTENCMGFHbHpRWEpuS1NCN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUY5MGFHbHpJRDBnZEdocGN6dGNjbHh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjMEZ5WnlBaFBUMGdkVzVrWldacGJtVmtLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZV3hzWW1GamF5QTlJR05oYkd4aVlXTnJMbUpwYm1Rb2RHaHBjMEZ5WnlrN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11Wm05eVJXRmphRkJoYVhJb1puVnVZM1JwYjI0Z0tHc3NJSFlwSUhzZ2NtVjBkWEp1SUdOaGJHeGlZV05yS0hZc0lHc3NJRjkwYUdsektUc2dmU2s3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnTHlvcUlGSjFibk1nWVNCbWRXNWpkR2x2YmlCbWIzSWdaV0ZqYUNCclpYa3RkbUZzZFdVZ2NHRnBjaXdnYVc0Z2IzSmtaWElnWm5KdmJTQnpiV0ZzYkdWemRDQjBiMXh5WEc0Z0lDQWdJQ29nSUd4aGNtZGxjM1FnYTJWNUxpQlVhR1VnWTJGc2JHSmhZMnNnWTJGdUlISmxkSFZ5YmlCN1luSmxZV3M2VW4wZ0tIZG9aWEpsSUZJZ2FYTWdZVzU1SUhaaGJIVmxYSEpjYmlBZ0lDQWdLaUFnWlhoalpYQjBJSFZ1WkdWbWFXNWxaQ2tnZEc4Z2MzUnZjQ0JwYlcxbFpHbGhkR1ZzZVNCaGJtUWdjbVYwZFhKdUlGSWdabkp2YlNCbWIzSkZZV05vVUdGcGNpNWNjbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQnZia1p2ZFc1a0lFRWdablZ1WTNScGIyNGdkR2hoZENCcGN5QmpZV3hzWldRZ1ptOXlJR1ZoWTJnZ2EyVjVMWFpoYkhWbElIQmhhWEl1SUZSb2FYTmNjbHh1SUNBZ0lDQXFJQ0FnSUNBZ0lDQm1kVzVqZEdsdmJpQmpZVzRnY21WMGRYSnVJSHRpY21WaGF6cFNmU0IwYnlCemRHOXdJR1ZoY214NUlIZHBkR2dnY21WemRXeDBJRkl1WEhKY2JpQWdJQ0FnS2lBZ0lDQWdJQ0FnVkdobElISmxZWE52YmlCMGFHRjBJSGx2ZFNCdGRYTjBJSEpsZEhWeWJpQjdZbkpsWVdzNlVuMGdhVzV6ZEdWaFpDQnZaaUJ6YVcxd2JIa2dVbHh5WEc0Z0lDQWdJQ29nSUNBZ0lDQWdJR2wwYzJWc1ppQnBjeUJtYjNJZ1kyOXVjMmx6ZEdWdVkza2dkMmwwYUNCbFpHbDBVbUZ1WjJVb0tTd2dkMmhwWTJnZ1lXeHNiM2R6WEhKY2JpQWdJQ0FnS2lBZ0lDQWdJQ0FnYlhWc2RHbHdiR1VnWVdOMGFXOXVjeXdnYm05MElHcDFjM1FnWW5KbFlXdHBibWN1WEhKY2JpQWdJQ0FnS2lCQWNHRnlZVzBnYVc1cGRHbGhiRU52ZFc1MFpYSWdWR2hwY3lCcGN5QjBhR1VnZG1Gc2RXVWdiMllnZEdobElIUm9hWEprSUdGeVozVnRaVzUwSUc5bVhISmNiaUFnSUNBZ0tpQWdJQ0FnSUNBZ1lHOXVSbTkxYm1SZ0lIUm9aU0JtYVhKemRDQjBhVzFsSUdsMElHbHpJR05oYkd4bFpDNGdWR2hsSUdOdmRXNTBaWElnYVc1amNtVmhjMlZ6WEhKY2JpQWdJQ0FnS2lBZ0lDQWdJQ0FnWW5rZ2IyNWxJR1ZoWTJnZ2RHbHRaU0JnYjI1R2IzVnVaR0FnYVhNZ1kyRnNiR1ZrTGlCRVpXWmhkV3gwSUhaaGJIVmxPaUF3WEhKY2JpQWdJQ0FnS2lCQWNtVjBkWEp1Y3lCMGFHVWdiblZ0WW1WeUlHOW1JSEJoYVhKeklITmxiblFnZEc4Z2RHaGxJR05oYkd4aVlXTnJJQ2h3YkhWeklHbHVhWFJwWVd4RGIzVnVkR1Z5TEZ4eVhHNGdJQ0FnSUNvZ0lDQWdJQ0FnSUdsbUlIbHZkU0J3Y205MmFXUmxaQ0J2Ym1VcExpQkpaaUIwYUdVZ1kyRnNiR0poWTJzZ2NtVjBkWEp1WldRZ2UySnlaV0ZyT2xKOUlIUm9aVzVjY2x4dUlDQWdJQ0FxSUNBZ0lDQWdJQ0IwYUdVZ1VpQjJZV3gxWlNCcGN5QnlaWFIxY201bFpDQnBibk4wWldGa0xpQXFMMXh5WEc0Z0lDQWdRbFJ5WldVdWNISnZkRzkwZVhCbExtWnZja1ZoWTJoUVlXbHlJRDBnWm5WdVkzUnBiMjRnS0dOaGJHeGlZV05yTENCcGJtbDBhV0ZzUTI5MWJuUmxjaWtnZTF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJzYjNjZ1BTQjBhR2x6TG0xcGJrdGxlU2dwTENCb2FXZG9JRDBnZEdocGN5NXRZWGhMWlhrb0tUdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bWIzSlNZVzVuWlNoc2IzY3NJR2hwWjJnc0lIUnlkV1VzSUdOaGJHeGlZV05yTENCcGJtbDBhV0ZzUTI5MWJuUmxjaWs3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnTHlvcVhISmNiaUFnSUNBZ0tpQkdhVzVrY3lCaElIQmhhWElnYVc0Z2RHaGxJSFJ5WldVZ1lXNWtJSEpsZEhWeWJuTWdkR2hsSUdGemMyOWphV0YwWldRZ2RtRnNkV1V1WEhKY2JpQWdJQ0FnS2lCQWNHRnlZVzBnWkdWbVlYVnNkRlpoYkhWbElHRWdkbUZzZFdVZ2RHOGdjbVYwZFhKdUlHbG1JSFJvWlNCclpYa2dkMkZ6SUc1dmRDQm1iM1Z1WkM1Y2NseHVJQ0FnSUNBcUlFQnlaWFIxY201eklIUm9aU0IyWVd4MVpTd2diM0lnWkdWbVlYVnNkRlpoYkhWbElHbG1JSFJvWlNCclpYa2dkMkZ6SUc1dmRDQm1iM1Z1WkM1Y2NseHVJQ0FnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJEYjIxd2RYUmhkR2x2Ym1Gc0lHTnZiWEJzWlhocGRIazZJRThvYkc5bklITnBlbVVwWEhKY2JpQWdJQ0FnS2k5Y2NseHVJQ0FnSUVKVWNtVmxMbkJ5YjNSdmRIbHdaUzVuWlhRZ1BTQm1kVzVqZEdsdmJpQW9hMlY1TENCa1pXWmhkV3gwVm1Gc2RXVXBJSHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWZjbTl2ZEM1blpYUW9hMlY1TENCa1pXWmhkV3gwVm1Gc2RXVXNJSFJvYVhNcE8xeHlYRzRnSUNBZ2ZUdGNjbHh1SUNBZ0lDOHFLbHh5WEc0Z0lDQWdJQ29nUVdSa2N5QnZjaUJ2ZG1WeWQzSnBkR1Z6SUdFZ2EyVjVMWFpoYkhWbElIQmhhWElnYVc0Z2RHaGxJRUlySUhSeVpXVXVYSEpjYmlBZ0lDQWdLaUJBY0dGeVlXMGdhMlY1SUhSb1pTQnJaWGtnYVhNZ2RYTmxaQ0IwYnlCa1pYUmxjbTFwYm1VZ2RHaGxJSE52Y25RZ2IzSmtaWElnYjJaY2NseHVJQ0FnSUNBcUlDQWdJQ0FnSUNCa1lYUmhJR2x1SUhSb1pTQjBjbVZsTGx4eVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUhaaGJIVmxJR1JoZEdFZ2RHOGdZWE56YjJOcFlYUmxJSGRwZEdnZ2RHaGxJR3RsZVNBb2IzQjBhVzl1WVd3cFhISmNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2IzWmxjbmR5YVhSbElGZG9aWFJvWlhJZ2RHOGdiM1psY25keWFYUmxJR0Z1SUdWNGFYTjBhVzVuSUd0bGVTMTJZV3gxWlNCd1lXbHlYSEpjYmlBZ0lDQWdLaUFnSUNBZ0lDQWdLR1JsWm1GMWJIUTZJSFJ5ZFdVcExpQkpaaUIwYUdseklHbHpJR1poYkhObElHRnVaQ0IwYUdWeVpTQnBjeUJoYmlCbGVHbHpkR2x1WjF4eVhHNGdJQ0FnSUNvZ0lDQWdJQ0FnSUd0bGVTMTJZV3gxWlNCd1lXbHlJSFJvWlc0Z2RHaHBjeUJ0WlhSb2IyUWdhR0Z6SUc1dklHVm1abVZqZEM1Y2NseHVJQ0FnSUNBcUlFQnlaWFIxY201eklIUnlkV1VnYVdZZ1lTQnVaWGNnYTJWNUxYWmhiSFZsSUhCaGFYSWdkMkZ6SUdGa1pHVmtMbHh5WEc0Z0lDQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnZiWEIxZEdGMGFXOXVZV3dnWTI5dGNHeGxlR2wwZVRvZ1R5aHNiMmNnYzJsNlpTbGNjbHh1SUNBZ0lDQXFJRTV2ZEdVNklIZG9aVzRnYjNabGNuZHlhWFJwYm1jZ1lTQndjbVYyYVc5MWN5QmxiblJ5ZVN3Z2RHaGxJR3RsZVNCcGN5QjFjR1JoZEdWa1hISmNiaUFnSUNBZ0tpQmhjeUIzWld4c0lHRnpJSFJvWlNCMllXeDFaUzRnVkdocGN5Qm9ZWE1nYm04Z1pXWm1aV04wSUhWdWJHVnpjeUIwYUdVZ2JtVjNJR3RsZVZ4eVhHNGdJQ0FnSUNvZ2FHRnpJR1JoZEdFZ2RHaGhkQ0JrYjJWeklHNXZkQ0JoWm1abFkzUWdhWFJ6SUhOdmNuUWdiM0prWlhJdVhISmNiaUFnSUNBZ0tpOWNjbHh1SUNBZ0lFSlVjbVZsTG5CeWIzUnZkSGx3WlM1elpYUWdQU0JtZFc1amRHbHZiaUFvYTJWNUxDQjJZV3gxWlN3Z2IzWmxjbmR5YVhSbEtTQjdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11WDNKdmIzUXVhWE5UYUdGeVpXUXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WDNKdmIzUWdQU0IwYUdsekxsOXliMjkwTG1Oc2IyNWxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ2RtRnlJSEpsYzNWc2RDQTlJSFJvYVhNdVgzSnZiM1F1YzJWMEtHdGxlU3dnZG1Gc2RXVXNJRzkyWlhKM2NtbDBaU3dnZEdocGN5azdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tISmxjM1ZzZENBOVBUMGdkSEoxWlNCOGZDQnlaWE4xYkhRZ1BUMDlJR1poYkhObEtWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBPMXh5WEc0Z0lDQWdJQ0FnSUM4dklGSnZiM1FnYm05a1pTQm9ZWE1nYzNCc2FYUXNJSE52SUdOeVpXRjBaU0JoSUc1bGR5QnliMjkwSUc1dlpHVXVYSEpjYmlBZ0lDQWdJQ0FnZEdocGN5NWZjbTl2ZENBOUlHNWxkeUJDVG05a1pVbHVkR1Z5Ym1Gc0tGdDBhR2x6TGw5eWIyOTBMQ0J5WlhOMWJIUmRLVHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQXZLaXBjY2x4dUlDQWdJQ0FxSUZKbGRIVnlibk1nZEhKMVpTQnBaaUIwYUdVZ2EyVjVJR1Y0YVhOMGN5QnBiaUIwYUdVZ1Fpc2dkSEpsWlN3Z1ptRnNjMlVnYVdZZ2JtOTBMbHh5WEc0Z0lDQWdJQ29nVlhObElHZGxkQ2dwSUdadmNpQmlaWE4wSUhCbGNtWnZjbTFoYm1ObE95QjFjMlVnYUdGektDa2dhV1lnZVc5MUlHNWxaV1FnZEc5Y2NseHVJQ0FnSUNBcUlHUnBjM1JwYm1kMWFYTm9JR0psZEhkbFpXNGdYQ0oxYm1SbFptbHVaV1FnZG1Gc2RXVmNJaUJoYm1RZ1hDSnJaWGtnYm05MElIQnlaWE5sYm5SY0lpNWNjbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQnJaWGtnUzJWNUlIUnZJR1JsZEdWamRGeHlYRzRnSUNBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVOdmJYQjFkR0YwYVc5dVlXd2dZMjl0Y0d4bGVHbDBlVG9nVHloc2IyY2djMmw2WlNsY2NseHVJQ0FnSUNBcUwxeHlYRzRnSUNBZ1FsUnlaV1V1Y0hKdmRHOTBlWEJsTG1oaGN5QTlJR1oxYm1OMGFXOXVJQ2hyWlhrcElIdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bWIzSlNZVzVuWlNoclpYa3NJR3RsZVN3Z2RISjFaU3dnZFc1a1pXWnBibVZrS1NBaFBUMGdNRHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0F2S2lwY2NseHVJQ0FnSUNBcUlGSmxiVzkyWlhNZ1lTQnphVzVuYkdVZ2EyVjVMWFpoYkhWbElIQmhhWElnWm5KdmJTQjBhR1VnUWlzZ2RISmxaUzVjY2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0JyWlhrZ1MyVjVJSFJ2SUdacGJtUmNjbHh1SUNBZ0lDQXFJRUJ5WlhSMWNtNXpJSFJ5ZFdVZ2FXWWdZU0J3WVdseUlIZGhjeUJtYjNWdVpDQmhibVFnY21WdGIzWmxaQ3dnWm1Gc2MyVWdiM1JvWlhKM2FYTmxMbHh5WEc0Z0lDQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnZiWEIxZEdGMGFXOXVZV3dnWTI5dGNHeGxlR2wwZVRvZ1R5aHNiMmNnYzJsNlpTbGNjbHh1SUNBZ0lDQXFMMXh5WEc0Z0lDQWdRbFJ5WldVdWNISnZkRzkwZVhCbExtUmxiR1YwWlNBOUlHWjFibU4wYVc5dUlDaHJaWGtwSUh0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVsWkdsMFVtRnVaMlVvYTJWNUxDQnJaWGtzSUhSeWRXVXNJRVJsYkdWMFpWSmhibWRsS1NBaFBUMGdNRHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0JDVkhKbFpTNXdjbTkwYjNSNWNHVXVkMmwwYUNBOUlHWjFibU4wYVc5dUlDaHJaWGtzSUhaaGJIVmxMQ0J2ZG1WeWQzSnBkR1VwSUh0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnYm5VZ1BTQjBhR2x6TG1Oc2IyNWxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1MUxuTmxkQ2hyWlhrc0lIWmhiSFZsTENCdmRtVnlkM0pwZEdVcElIeDhJRzkyWlhKM2NtbDBaU0EvSUc1MUlEb2dkR2hwY3p0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNBdktpb2dVbVYwZFhKdWN5QmhJR052Y0hrZ2IyWWdkR2hsSUhSeVpXVWdkMmwwYUNCMGFHVWdjM0JsWTJsbWFXVmtJR3RsZVMxMllXeDFaU0J3WVdseWN5QnpaWFF1SUNvdlhISmNiaUFnSUNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1ZDJsMGFGQmhhWEp6SUQwZ1puVnVZM1JwYjI0Z0tIQmhhWEp6TENCdmRtVnlkM0pwZEdVcElIdGNjbHh1SUNBZ0lDQWdJQ0IyWVhJZ2JuVWdQU0IwYUdsekxtTnNiMjVsS0NrN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHNTFMbk5sZEZCaGFYSnpLSEJoYVhKekxDQnZkbVZ5ZDNKcGRHVXBJQ0U5UFNBd0lIeDhJRzkyWlhKM2NtbDBaU0EvSUc1MUlEb2dkR2hwY3p0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNBdktpb2dVbVYwZFhKdWN5QmhJR052Y0hrZ2IyWWdkR2hsSUhSeVpXVWdkMmwwYUNCMGFHVWdjM0JsWTJsbWFXVmtJR3RsZVhNZ2NISmxjMlZ1ZEM1Y2NseHVJQ0FnSUNBcUlDQkFjR0Z5WVcwZ2EyVjVjeUJVYUdVZ2EyVjVjeUIwYnlCaFpHUXVJRWxtSUdFZ2EyVjVJR2x6SUdGc2NtVmhaSGtnY0hKbGMyVnVkQ0JwYmlCMGFHVWdkSEpsWlN4Y2NseHVJQ0FnSUNBcUlDQWdJQ0FnSUNBZ2JtVnBkR2hsY2lCMGFHVWdaWGhwYzNScGJtY2dhMlY1SUc1dmNpQjBhR1VnWlhocGMzUnBibWNnZG1Gc2RXVWdhWE1nYlc5a2FXWnBaV1F1WEhKY2JpQWdJQ0FnS2lBZ1FIQmhjbUZ0SUhKbGRIVnlibFJvYVhOSlpsVnVZMmhoYm1kbFpDQnBaaUIwY25WbExDQnlaWFIxY201eklIUm9hWE1nYVdZZ1lXeHNJR3RsZVhNZ1lXeHlaV0ZrZVZ4eVhHNGdJQ0FnSUNvZ0lHVjRhWE4wWldRdUlGQmxjbVp2Y20xaGJtTmxJRzV2ZEdVNklHUjFaU0IwYnlCMGFHVWdZWEpqYUdsMFpXTjBkWEpsSUc5bUlIUm9hWE1nWTJ4aGMzTXNJR0ZzYkZ4eVhHNGdJQ0FnSUNvZ0lHNXZaR1VvY3lrZ2JHVmhaR2x1WnlCMGJ5QmxlR2x6ZEdsdVp5QnJaWGx6SUdGeVpTQmpiRzl1WldRZ1pYWmxiaUJwWmlCMGFHVWdZMjlzYkdWamRHbHZiaUJwYzF4eVhHNGdJQ0FnSUNvZ0lIVnNkR2x0WVhSbGJIa2dkVzVqYUdGdVoyVmtMbHh5WEc0Z0lDQWdLaTljY2x4dUlDQWdJRUpVY21WbExuQnliM1J2ZEhsd1pTNTNhWFJvUzJWNWN5QTlJR1oxYm1OMGFXOXVJQ2hyWlhsekxDQnlaWFIxY201VWFHbHpTV1pWYm1Ob1lXNW5aV1FwSUh0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnYm5VZ1BTQjBhR2x6TG1Oc2IyNWxLQ2tzSUdOb1lXNW5aV1FnUFNCbVlXeHpaVHRjY2x4dUlDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHdGxlWE11YkdWdVozUm9PeUJwS3lzcFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUdOb1lXNW5aV1FnUFNCdWRTNXpaWFFvYTJWNWMxdHBYU3dnZFc1a1pXWnBibVZrTENCbVlXeHpaU2tnZkh3Z1kyaGhibWRsWkR0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVjBkWEp1VkdocGMwbG1WVzVqYUdGdVoyVmtJQ1ltSUNGamFHRnVaMlZrSUQ4Z2RHaHBjeUE2SUc1MU8xeHlYRzRnSUNBZ2ZUdGNjbHh1SUNBZ0lDOHFLaUJTWlhSMWNtNXpJR0VnWTI5d2VTQnZaaUIwYUdVZ2RISmxaU0IzYVhSb0lIUm9aU0J6Y0dWamFXWnBaV1FnYTJWNUlISmxiVzkyWldRdVhISmNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2NtVjBkWEp1VkdocGMwbG1WVzVqYUdGdVoyVmtJR2xtSUhSeWRXVXNJSEpsZEhWeWJuTWdkR2hwY3lCcFppQjBhR1VnYTJWNUlHUnBaRzRuZENCbGVHbHpkQzVjY2x4dUlDQWdJQ0FxSUNCUVpYSm1iM0p0WVc1alpTQnViM1JsT2lCa2RXVWdkRzhnZEdobElHRnlZMmhwZEdWamRIVnlaU0J2WmlCMGFHbHpJR05zWVhOekxDQnViMlJsS0hNcElHeGxZV1JwYm1kY2NseHVJQ0FnSUNBcUlDQjBieUIzYUdWeVpTQjBhR1VnYTJWNUlIZHZkV3hrSUdoaGRtVWdZbVZsYmlCemRHOXlaV1FnWVhKbElHTnNiMjVsWkNCbGRtVnVJSGRvWlc0Z2RHaGxJR3RsZVZ4eVhHNGdJQ0FnSUNvZ0lIUjFjbTV6SUc5MWRDQnViM1FnZEc4Z1pYaHBjM1FnWVc1a0lIUm9aU0JqYjJ4c1pXTjBhVzl1SUdseklIVnVZMmhoYm1kbFpDNWNjbHh1SUNBZ0lDQXFMMXh5WEc0Z0lDQWdRbFJ5WldVdWNISnZkRzkwZVhCbExuZHBkR2h2ZFhRZ1BTQm1kVzVqZEdsdmJpQW9hMlY1TENCeVpYUjFjbTVVYUdselNXWlZibU5vWVc1blpXUXBJSHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NTNhWFJvYjNWMFVtRnVaMlVvYTJWNUxDQnJaWGtzSUhSeWRXVXNJSEpsZEhWeWJsUm9hWE5KWmxWdVkyaGhibWRsWkNrN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ0x5b3FJRkpsZEhWeWJuTWdZU0JqYjNCNUlHOW1JSFJvWlNCMGNtVmxJSGRwZEdnZ2RHaGxJSE53WldOcFptbGxaQ0JyWlhseklISmxiVzkyWldRdVhISmNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2NtVjBkWEp1VkdocGMwbG1WVzVqYUdGdVoyVmtJR2xtSUhSeWRXVXNJSEpsZEhWeWJuTWdkR2hwY3lCcFppQnViMjVsSUc5bUlIUm9aU0JyWlhselhISmNiaUFnSUNBZ0tpQWdaWGhwYzNSbFpDNGdVR1Z5Wm05eWJXRnVZMlVnYm05MFpUb2daSFZsSUhSdklIUm9aU0JoY21Ob2FYUmxZM1IxY21VZ2IyWWdkR2hwY3lCamJHRnpjeXhjY2x4dUlDQWdJQ0FxSUNCdWIyUmxLSE1wSUd4bFlXUnBibWNnZEc4Z2QyaGxjbVVnZEdobElHdGxlU0IzYjNWc1pDQm9ZWFpsSUdKbFpXNGdjM1J2Y21Wa0lHRnlaU0JqYkc5dVpXUmNjbHh1SUNBZ0lDQXFJQ0JsZG1WdUlIZG9aVzRnZEdobElHdGxlU0IwZFhKdWN5QnZkWFFnYm05MElIUnZJR1Y0YVhOMExseHlYRzRnSUNBZ0lDb3ZYSEpjYmlBZ0lDQkNWSEpsWlM1d2NtOTBiM1I1Y0dVdWQybDBhRzkxZEV0bGVYTWdQU0JtZFc1amRHbHZiaUFvYTJWNWN5d2djbVYwZFhKdVZHaHBjMGxtVlc1amFHRnVaMlZrS1NCN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUc1MUlEMGdkR2hwY3k1amJHOXVaU2dwTzF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdWRTNWtaV3hsZEdWTFpYbHpLR3RsZVhNcElIeDhJQ0Z5WlhSMWNtNVVhR2x6U1daVmJtTm9ZVzVuWldRZ1B5QnVkU0E2SUhSb2FYTTdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xSUZKbGRIVnlibk1nWVNCamIzQjVJRzltSUhSb1pTQjBjbVZsSUhkcGRHZ2dkR2hsSUhOd1pXTnBabWxsWkNCeVlXNW5aU0J2WmlCclpYbHpJSEpsYlc5MlpXUXVJQ292WEhKY2JpQWdJQ0JDVkhKbFpTNXdjbTkwYjNSNWNHVXVkMmwwYUc5MWRGSmhibWRsSUQwZ1puVnVZM1JwYjI0Z0tHeHZkeXdnYUdsbmFDd2dhVzVqYkhWa1pVaHBaMmdzSUhKbGRIVnlibFJvYVhOSlpsVnVZMmhoYm1kbFpDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnVkU0E5SUhSb2FYTXVZMnh2Ym1Vb0tUdGNjbHh1SUNBZ0lDQWdJQ0JwWmlBb2JuVXVaR1ZzWlhSbFVtRnVaMlVvYkc5M0xDQm9hV2RvTENCcGJtTnNkV1JsU0dsbmFDa2dQVDA5SURBZ0ppWWdjbVYwZFhKdVZHaHBjMGxtVlc1amFHRnVaMlZrS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JuVTdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xSUZKbGRIVnlibk1nWVNCamIzQjVJRzltSUhSb1pTQjBjbVZsSUhkcGRHZ2djR0ZwY25NZ2NtVnRiM1psWkNCM2FHVnVaWFpsY2lCMGFHVWdZMkZzYkdKaFkydGNjbHh1SUNBZ0lDQXFJQ0JtZFc1amRHbHZiaUJ5WlhSMWNtNXpJR1poYkhObExpQmdkMmhsY21Vb0tXQWdhWE1nWVNCemVXNXZibmx0SUdadmNpQjBhR2x6SUcxbGRHaHZaQzRnS2k5Y2NseHVJQ0FnSUVKVWNtVmxMbkJ5YjNSdmRIbHdaUzVtYVd4MFpYSWdQU0JtZFc1amRHbHZiaUFvWTJGc2JHSmhZMnNzSUhKbGRIVnlibFJvYVhOSlpsVnVZMmhoYm1kbFpDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnVkU0E5SUhSb2FYTXVaM0psWldSNVEyeHZibVVvS1R0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnWkdWc08xeHlYRzRnSUNBZ0lDQWdJRzUxTG1Wa2FYUkJiR3dvWm5WdVkzUnBiMjRnS0dzc0lIWXNJR2twSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRmpZV3hzWW1GamF5aHJMQ0IyTENCcEtTbGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmtaV3dnUFNCRVpXeGxkR1U3WEhKY2JpQWdJQ0FnSUNBZ2ZTazdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tDRmtaV3dnSmlZZ2NtVjBkWEp1VkdocGMwbG1WVzVqYUdGdVoyVmtLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjenRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm5VN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ0x5b3FJRkpsZEhWeWJuTWdZU0JqYjNCNUlHOW1JSFJvWlNCMGNtVmxJSGRwZEdnZ1lXeHNJSFpoYkhWbGN5QmhiSFJsY21Wa0lHSjVJR0VnWTJGc2JHSmhZMnNnWm5WdVkzUnBiMjR1SUNvdlhISmNiaUFnSUNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1YldGd1ZtRnNkV1Z6SUQwZ1puVnVZM1JwYjI0Z0tHTmhiR3hpWVdOcktTQjdYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlIUnRjQ0E5SUh0OU8xeHlYRzRnSUNBZ0lDQWdJSFpoY2lCdWRTQTlJSFJvYVhNdVozSmxaV1I1UTJ4dmJtVW9LVHRjY2x4dUlDQWdJQ0FnSUNCdWRTNWxaR2wwUVd4c0tHWjFibU4wYVc5dUlDaHJMQ0IyTENCcEtTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGJYQXVkbUZzZFdVZ1BTQmpZV3hzWW1GamF5aDJMQ0JyTENCcEtTd2dkRzF3TzF4eVhHNGdJQ0FnSUNBZ0lIMHBPMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFR0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1Y21Wa2RXTmxJRDBnWm5WdVkzUnBiMjRnS0dOaGJHeGlZV05yTENCcGJtbDBhV0ZzVm1Gc2RXVXBJSHRjY2x4dUlDQWdJQ0FnSUNCMllYSWdhU0E5SURBc0lIQWdQU0JwYm1sMGFXRnNWbUZzZFdVN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUdsMElEMGdkR2hwY3k1bGJuUnlhV1Z6S0hSb2FYTXViV2x1UzJWNUtDa3NJRkpsZFhObFpFRnljbUY1S1N3Z2JtVjRkRHRjY2x4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvSVNodVpYaDBJRDBnYVhRdWJtVjRkQ2dwS1M1a2IyNWxLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQndJRDBnWTJGc2JHSmhZMnNvY0N3Z2JtVjRkQzUyWVd4MVpTd2dhU3NyTENCMGFHbHpLVHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY0R0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNBdkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMMXh5WEc0Z0lDQWdMeThnU1hSbGNtRjBiM0lnYldWMGFHOWtjeUF2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2NseHVJQ0FnSUM4cUtpQlNaWFIxY201eklHRnVJR2wwWlhKaGRHOXlJSFJvWVhRZ2NISnZkbWxrWlhNZ2FYUmxiWE1nYVc0Z2IzSmtaWElnS0dGelkyVnVaR2x1WnlCdmNtUmxjaUJwWmx4eVhHNGdJQ0FnSUNvZ0lIUm9aU0JqYjJ4c1pXTjBhVzl1SjNNZ1kyOXRjR0Z5WVhSdmNpQjFjMlZ6SUdGelkyVnVaR2x1WnlCdmNtUmxjaXdnWVhNZ2FYTWdkR2hsSUdSbFptRjFiSFF1S1Z4eVhHNGdJQ0FnSUNvZ0lFQndZWEpoYlNCc2IzZGxjM1JMWlhrZ1JtbHljM1FnYTJWNUlIUnZJR0psSUdsMFpYSmhkR1ZrTENCdmNpQjFibVJsWm1sdVpXUWdkRzhnYzNSaGNuUWdZWFJjY2x4dUlDQWdJQ0FxSUNBZ0lDQWdJQ0FnYldsdVMyVjVLQ2t1SUVsbUlIUm9aU0J6Y0dWamFXWnBaV1FnYTJWNUlHUnZaWE51SjNRZ1pYaHBjM1FnZEdobGJpQnBkR1Z5WVhScGIyNWNjbHh1SUNBZ0lDQXFJQ0FnSUNBZ0lDQWdjM1JoY25SeklHRjBJSFJvWlNCdVpYaDBJR2hwWjJobGNpQnJaWGtnS0dGalkyOXlaR2x1WnlCMGJ5QjBhR1VnWTI5dGNHRnlZWFJ2Y2lrdVhISmNiaUFnSUNBZ0tpQWdRSEJoY21GdElISmxkWE5sWkVGeWNtRjVJRTl3ZEdsdmJtRnNJR0Z5Y21GNUlIVnpaV1FnY21Wd1pXRjBaV1JzZVNCMGJ5QnpkRzl5WlNCclpYa3RkbUZzZFdWY2NseHVJQ0FnSUNBcUlDQWdJQ0FnSUNBZ2NHRnBjbk1zSUhSdklHRjJiMmxrSUdOeVpXRjBhVzVuSUdFZ2JtVjNJR0Z5Y21GNUlHOXVJR1YyWlhKNUlHbDBaWEpoZEdsdmJpNWNjbHh1SUNBZ0lDQXFMMXh5WEc0Z0lDQWdRbFJ5WldVdWNISnZkRzkwZVhCbExtVnVkSEpwWlhNZ1BTQm1kVzVqZEdsdmJpQW9iRzkzWlhOMFMyVjVMQ0J5WlhWelpXUkJjbkpoZVNrZ2UxeHlYRzRnSUNBZ0lDQWdJSFpoY2lCcGJtWnZJRDBnZEdocGN5NW1hVzVrVUdGMGFDaHNiM2RsYzNSTFpYa3BPMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHBibVp2SUQwOVBTQjFibVJsWm1sdVpXUXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCcGRHVnlZWFJ2Y2lncE8xeHlYRzRnSUNBZ0lDQWdJSFpoY2lCdWIyUmxjWFZsZFdVZ1BTQnBibVp2TG01dlpHVnhkV1YxWlN3Z2JtOWtaV2x1WkdWNElEMGdhVzVtYnk1dWIyUmxhVzVrWlhnc0lHeGxZV1lnUFNCcGJtWnZMbXhsWVdZN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUhOMFlYUmxJRDBnY21WMWMyVmtRWEp5WVhrZ0lUMDlJSFZ1WkdWbWFXNWxaQ0EvSURFZ09pQXdPMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnBJRDBnS0d4dmQyVnpkRXRsZVNBOVBUMGdkVzVrWldacGJtVmtJRDhnTFRFZ09pQnNaV0ZtTG1sdVpHVjRUMllvYkc5M1pYTjBTMlY1TENBd0xDQjBhR2x6TGw5amIyMXdZWEpsS1NBdElERXBPMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJwZEdWeVlYUnZjaWhtZFc1amRHbHZiaUFvS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUdwMWJYQTZJR1p2Y2lBb096c3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOM2FYUmphQ0FvYzNSaGRHVXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSURBNlhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2dySzJrZ1BDQnNaV0ZtTG10bGVYTXViR1Z1WjNSb0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSHNnWkc5dVpUb2dabUZzYzJVc0lIWmhiSFZsT2lCYmJHVmhaaTVyWlhselcybGRMQ0JzWldGbUxuWmhiSFZsYzF0cFhWMGdmVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRHVWdQU0F5TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElERTZYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNncksya2dQQ0JzWldGbUxtdGxlWE11YkdWdVozUm9LU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFZ6WldSQmNuSmhlVnN3WFNBOUlHeGxZV1l1YTJWNWMxdHBYU3dnY21WMWMyVmtRWEp5WVhsYk1WMGdQU0JzWldGbUxuWmhiSFZsYzF0cFhUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUI3SUdSdmJtVTZJR1poYkhObExDQjJZV3gxWlRvZ2NtVjFjMlZrUVhKeVlYa2dmVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRHRjBaU0E5SURJN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQXlPbHh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCQlpIWmhibU5sSUhSdklIUm9aU0J1WlhoMElHeGxZV1lnYm05a1pWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnNaWFpsYkNBOUlDMHhPenNwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNncksyeGxkbVZzSUQ0OUlHNXZaR1Z4ZFdWMVpTNXNaVzVuZEdncElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkR0YwWlNBOUlETTdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVWdhblZ0Y0R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2dySzI1dlpHVnBibVJsZUZ0c1pYWmxiRjBnUENCdWIyUmxjWFZsZFdWYmJHVjJaV3hkTG14bGJtZDBhQ2xjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tEc2diR1YyWld3Z1BpQXdPeUJzWlhabGJDMHRLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnViMlJsY1hWbGRXVmJiR1YyWld3Z0xTQXhYU0E5SUc1dlpHVnhkV1YxWlZ0c1pYWmxiRjFiYm05a1pXbHVaR1Y0VzJ4bGRtVnNYVjB1WTJocGJHUnlaVzQ3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnViMlJsYVc1a1pYaGJiR1YyWld3Z0xTQXhYU0E5SURBN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1ZoWmlBOUlHNXZaR1Z4ZFdWMVpWc3dYVnR1YjJSbGFXNWtaWGhiTUYxZE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBJRDBnTFRFN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFJsSUQwZ2NtVjFjMlZrUVhKeVlYa2dJVDA5SUhWdVpHVm1hVzVsWkNBL0lERWdPaUF3TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElETTZYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjdJR1J2Ym1VNklIUnlkV1VzSUhaaGJIVmxPaUIxYm1SbFptbHVaV1FnZlR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJSDBwTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUM4cUtpQlNaWFIxY201eklHRnVJR2wwWlhKaGRHOXlJSFJvWVhRZ2NISnZkbWxrWlhNZ2FYUmxiWE1nYVc0Z2NtVjJaWEp6WldRZ2IzSmtaWEl1WEhKY2JpQWdJQ0FnS2lBZ1FIQmhjbUZ0SUdocFoyaGxjM1JMWlhrZ1MyVjVJR0YwSUhkb2FXTm9JSFJ2SUhOMFlYSjBJR2wwWlhKaGRHbHVaeXdnYjNJZ2RXNWtaV1pwYm1Wa0lIUnZYSEpjYmlBZ0lDQWdLaUFnSUNBZ0lDQWdJSE4wWVhKMElHRjBJRzFoZUV0bGVTZ3BMaUJKWmlCMGFHVWdjM0JsWTJsbWFXVmtJR3RsZVNCa2IyVnpiaWQwSUdWNGFYTjBJSFJvWlc0Z2FYUmxjbUYwYVc5dVhISmNiaUFnSUNBZ0tpQWdJQ0FnSUNBZ0lITjBZWEowY3lCaGRDQjBhR1VnYm1WNGRDQnNiM2RsY2lCclpYa2dLR0ZqWTI5eVpHbHVaeUIwYnlCMGFHVWdZMjl0Y0dGeVlYUnZjaWt1WEhKY2JpQWdJQ0FnS2lBZ1FIQmhjbUZ0SUhKbGRYTmxaRUZ5Y21GNUlFOXdkR2x2Ym1Gc0lHRnljbUY1SUhWelpXUWdjbVZ3WldGMFpXUnNlU0IwYnlCemRHOXlaU0JyWlhrdGRtRnNkV1ZjY2x4dUlDQWdJQ0FxSUNBZ0lDQWdJQ0FnY0dGcGNuTXNJSFJ2SUdGMmIybGtJR055WldGMGFXNW5JR0VnYm1WM0lHRnljbUY1SUc5dUlHVjJaWEo1SUdsMFpYSmhkR2x2Ymk1Y2NseHVJQ0FnSUNBcUlDQkFjR0Z5WVcwZ2MydHBjRWhwWjJobGMzUWdTV1ptSUhSb2FYTWdabXhoWnlCcGN5QjBjblZsSUdGdVpDQjBhR1VnYUdsbmFHVnpkRXRsZVNCbGVHbHpkSE1nYVc0Z2RHaGxYSEpjYmlBZ0lDQWdLaUFnSUNBZ0lDQWdJR052Ykd4bFkzUnBiMjRzSUhSb1pTQndZV2x5SUcxaGRHTm9hVzVuSUdocFoyaGxjM1JMWlhrZ2FYTWdjMnRwY0hCbFpDd2dibTkwSUdsMFpYSmhkR1ZrTGx4eVhHNGdJQ0FnSUNvdlhISmNiaUFnSUNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1Wlc1MGNtbGxjMUpsZG1WeWMyVmtJRDBnWm5WdVkzUnBiMjRnS0docFoyaGxjM1JMWlhrc0lISmxkWE5sWkVGeWNtRjVMQ0J6YTJsd1NHbG5hR1Z6ZENrZ2UxeHlYRzRnSUNBZ0lDQWdJR2xtSUNob2FXZG9aWE4wUzJWNUlEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYUdsbmFHVnpkRXRsZVNBOUlIUm9hWE11YldGNFMyVjVLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSE5yYVhCSWFXZG9aWE4wSUQwZ2RXNWtaV1pwYm1Wa08xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hR2xuYUdWemRFdGxlU0E5UFQwZ2RXNWtaV1pwYm1Wa0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbDBaWEpoZEc5eUtDazdJQzh2SUdOdmJHeGxZM1JwYjI0Z2FYTWdaVzF3ZEhsY2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlGOWhJRDBnZEdocGN5NW1hVzVrVUdGMGFDaG9hV2RvWlhOMFMyVjVLU0I4ZkNCMGFHbHpMbVpwYm1SUVlYUm9LSFJvYVhNdWJXRjRTMlY1S0NrcExDQnViMlJsY1hWbGRXVWdQU0JmWVM1dWIyUmxjWFZsZFdVc0lHNXZaR1ZwYm1SbGVDQTlJRjloTG01dlpHVnBibVJsZUN3Z2JHVmhaaUE5SUY5aExteGxZV1k3WEhKY2JpQWdJQ0FnSUNBZ1kyaGxZMnNvSVc1dlpHVnhkV1YxWlZzd1hTQjhmQ0JzWldGbUlEMDlQU0J1YjJSbGNYVmxkV1ZiTUYxYmJtOWtaV2x1WkdWNFd6QmRYU3dnWENKM1lYUWhYQ0lwTzF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJwSUQwZ2JHVmhaaTVwYm1SbGVFOW1LR2hwWjJobGMzUkxaWGtzSURBc0lIUm9hWE11WDJOdmJYQmhjbVVwTzF4eVhHNGdJQ0FnSUNBZ0lHbG1JQ2doYzJ0cGNFaHBaMmhsYzNRZ0ppWWdhU0E4SUd4bFlXWXVhMlY1Y3k1c1pXNW5kR2dnSmlZZ2RHaHBjeTVmWTI5dGNHRnlaU2hzWldGbUxtdGxlWE5iYVYwc0lHaHBaMmhsYzNSTFpYa3BJRHc5SURBcFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUdrckt6dGNjbHh1SUNBZ0lDQWdJQ0IyWVhJZ2MzUmhkR1VnUFNCeVpYVnpaV1JCY25KaGVTQWhQVDBnZFc1a1pXWnBibVZrSUQ4Z01TQTZJREE3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdsMFpYSmhkRzl5S0daMWJtTjBhVzl1SUNncElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2FuVnRjRG9nWm05eUlDZzdPeWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzZHBkR05vSUNoemRHRjBaU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ01EcGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0MwdGFTQStQU0F3S1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIc2daRzl1WlRvZ1ptRnNjMlVzSUhaaGJIVmxPaUJiYkdWaFppNXJaWGx6VzJsZExDQnNaV0ZtTG5aaGJIVmxjMXRwWFYwZ2ZUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoZEdVZ1BTQXlPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSURFNlhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2d0TFdrZ1BqMGdNQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYxYzJWa1FYSnlZWGxiTUYwZ1BTQnNaV0ZtTG10bGVYTmJhVjBzSUhKbGRYTmxaRUZ5Y21GNVd6RmRJRDBnYkdWaFppNTJZV3gxWlhOYmFWMDdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZXlCa2IyNWxPaUJtWVd4elpTd2dkbUZzZFdVNklISmxkWE5sWkVGeWNtRjVJSDA3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkR1VnUFNBeU8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdNanBjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1FXUjJZVzVqWlNCMGJ5QjBhR1VnYm1WNGRDQnNaV0ZtSUc1dlpHVmNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdiR1YyWld3Z1BTQXRNVHM3S1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0t5dHNaWFpsYkNBK1BTQnViMlJsY1hWbGRXVXViR1Z1WjNSb0tTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoZEdVZ1BTQXpPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxJR3AxYlhBN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvTFMxdWIyUmxhVzVrWlhoYmJHVjJaV3hkSUQ0OUlEQXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNnN0lHeGxkbVZzSUQ0Z01Ec2diR1YyWld3dExTa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtOWtaWEYxWlhWbFcyeGxkbVZzSUMwZ01WMGdQU0J1YjJSbGNYVmxkV1ZiYkdWMlpXeGRXMjV2WkdWcGJtUmxlRnRzWlhabGJGMWRMbU5vYVd4a2NtVnVPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtOWtaV2x1WkdWNFcyeGxkbVZzSUMwZ01WMGdQU0J1YjJSbGNYVmxkV1ZiYkdWMlpXd2dMU0F4WFM1c1pXNW5kR2dnTFNBeE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsWVdZZ1BTQnViMlJsY1hWbGRXVmJNRjFiYm05a1pXbHVaR1Y0V3pCZFhUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhU0E5SUd4bFlXWXVhMlY1Y3k1c1pXNW5kR2c3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnY21WMWMyVmtRWEp5WVhrZ0lUMDlJSFZ1WkdWbWFXNWxaQ0EvSURFZ09pQXdPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSURNNlhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCN0lHUnZibVU2SUhSeWRXVXNJSFpoYkhWbE9pQjFibVJsWm1sdVpXUWdmVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lIMHBPMXh5WEc0Z0lDQWdmVHRjY2x4dUlDQWdJQzhxSUZWelpXUWdZbmtnWlc1MGNtbGxjeWdwSUdGdVpDQmxiblJ5YVdWelVtVjJaWEp6WldRb0tTQjBieUJ3Y21Wd1lYSmxJSFJ2SUhOMFlYSjBJR2wwWlhKaGRHbHVaeTVjY2x4dUlDQWdJQ0FxSUVsMElHUmxkbVZzYjNCeklHRWdYQ0p1YjJSbElIRjFaWFZsWENJZ1ptOXlJR1ZoWTJnZ2JtOXVMV3hsWVdZZ2JHVjJaV3dnYjJZZ2RHaGxJSFJ5WldVdVhISmNiaUFnSUNBZ0tpQk1aWFpsYkhNZ1lYSmxJRzUxYldKbGNtVmtJRndpWW05MGRHOXRMWFZ3WENJZ2MyOGdkR2hoZENCc1pYWmxiQ0F3SUdseklHRWdiR2x6ZENCdlppQnNaV0ZtWEhKY2JpQWdJQ0FnS2lCdWIyUmxjeUJtY205dElHRWdiRzkzTFd4bGRtVnNJRzV2Ymkxc1pXRm1JRzV2WkdVdUlGUm9aU0J4ZFdWMVpTQmhkQ0JoSUdkcGRtVnVJR3hsZG1Wc0lFeGNjbHh1SUNBZ0lDQXFJR052Ym5OcGMzUnpJRzltSUc1dlpHVnhkV1YxWlZ0TVhTQjNhR2xqYUNCcGN5QjBhR1VnWTJocGJHUnlaVzRnYjJZZ1lTQkNUbTlrWlVsdWRHVnlibUZzTEZ4eVhHNGdJQ0FnSUNvZ1lXNWtJRzV2WkdWcGJtUmxlRnRNWFN3Z2RHaGxJR04xY25KbGJuUWdhVzVrWlhnZ2QybDBhR2x1SUhSb1lYUWdZMmhwYkdRZ2JHbHpkQ3dnYzNWamFGeHlYRzRnSUNBZ0lDb2djM1ZqYUNCMGFHRjBJRzV2WkdWeGRXVjFaVnRNTFRGZElEMDlQU0J1YjJSbGNYVmxkV1ZiVEYxYmJtOWtaV2x1WkdWNFcweGRYUzVqYUdsc1pISmxiaTVjY2x4dUlDQWdJQ0FxSUNoSWIzZGxkbVZ5SUdsdWMybGtaU0IwYUdseklHWjFibU4wYVc5dUlIUm9aU0J2Y21SbGNpQnBjeUJ5WlhabGNuTmxaQzRwWEhKY2JpQWdJQ0FnS2k5Y2NseHVJQ0FnSUVKVWNtVmxMbkJ5YjNSdmRIbHdaUzVtYVc1a1VHRjBhQ0E5SUdaMWJtTjBhVzl1SUNoclpYa3BJSHRjY2x4dUlDQWdJQ0FnSUNCMllYSWdibVY0ZEc1dlpHVWdQU0IwYUdsekxsOXliMjkwTzF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJ1YjJSbGNYVmxkV1VzSUc1dlpHVnBibVJsZUR0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRHNXZaR1V1YVhOTVpXRm1LU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJRzV2WkdWeGRXVjFaU0E5SUVWdGNIUjVRWEp5WVhrc0lHNXZaR1ZwYm1SbGVDQTlJRVZ0Y0hSNVFYSnlZWGs3SUM4dklHRjJiMmxrSUdGc2JHOWpZWFJwYjI1elhISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnViMlJsY1hWbGRXVWdQU0JiWFN3Z2JtOWtaV2x1WkdWNElEMGdXMTA3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2RtRnlJR1FnUFNBd095QWhibVY0ZEc1dlpHVXVhWE5NWldGbU95QmtLeXNwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNXZaR1Z4ZFdWMVpWdGtYU0E5SUc1bGVIUnViMlJsTG1Ob2FXeGtjbVZ1TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtOWtaV2x1WkdWNFcyUmRJRDBnYTJWNUlEMDlQU0IxYm1SbFptbHVaV1FnUHlBd0lEb2dibVY0ZEc1dlpHVXVhVzVrWlhoUFppaHJaWGtzSURBc0lIUm9hWE11WDJOdmJYQmhjbVVwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzV2WkdWcGJtUmxlRnRrWFNBK1BTQnViMlJsY1hWbGRXVmJaRjB1YkdWdVozUm9LVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmpzZ0x5OGdabWx5YzNRZ2EyVjVJRDRnYldGNFMyVjVLQ2xjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUnViMlJsSUQwZ2JtOWtaWEYxWlhWbFcyUmRXMjV2WkdWcGJtUmxlRnRrWFYwN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYm05a1pYRjFaWFZsTG5KbGRtVnljMlVvS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYm05a1pXbHVaR1Y0TG5KbGRtVnljMlVvS1R0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSHNnYm05a1pYRjFaWFZsT2lCdWIyUmxjWFZsZFdVc0lHNXZaR1ZwYm1SbGVEb2dibTlrWldsdVpHVjRMQ0JzWldGbU9pQnVaWGgwYm05a1pTQjlPMXh5WEc0Z0lDQWdmVHRjY2x4dUlDQWdJQzhxS2x4eVhHNGdJQ0FnSUNvZ1EyOXRjSFYwWlhNZ2RHaGxJR1JwWm1abGNtVnVZMlZ6SUdKbGRIZGxaVzRnWUhSb2FYTmdJR0Z1WkNCZ2IzUm9aWEpnTGx4eVhHNGdJQ0FnSUNvZ1JtOXlJR1ZtWm1samFXVnVZM2tzSUhSb1pTQmthV1ptSUdseklISmxkSFZ5Ym1Wa0lIWnBZU0JwYm5adlkyRjBhVzl1Y3lCdlppQnpkWEJ3YkdsbFpDQm9ZVzVrYkdWeWN5NWNjbHh1SUNBZ0lDQXFJRlJvWlNCamIyMXdkWFJoZEdsdmJpQnBjeUJ2Y0hScGJXbDZaV1FnWm05eUlIUm9aU0JqWVhObElHbHVJSGRvYVdOb0lIUm9aU0IwZDI4Z2RISmxaWE1nYUdGMlpTQnNZWEpuWlNCaGJXOTFiblJ6WEhKY2JpQWdJQ0FnS2lCdlppQnphR0Z5WldRZ1pHRjBZU0FvYjJKMFlXbHVaV1FnWW5rZ1kyRnNiR2x1WnlCMGFHVWdZR05zYjI1bFlDQnZjaUJnZDJsMGFHQWdRVkJKY3lrZ1lXNWtJSGRwYkd3Z1lYWnZhV1JjY2x4dUlDQWdJQ0FxSUdGdWVTQnBkR1Z5WVhScGIyNGdiMllnYzJoaGNtVmtJSE4wWVhSbExseHlYRzRnSUNBZ0lDb2dWR2hsSUdoaGJtUnNaWEp6SUdOaGJpQmpZWFZ6WlNCamIyMXdkWFJoZEdsdmJpQjBieUJsWVhKc2VTQmxlR2wwSUdKNUlISmxkSFZ5Ym1sdVp5QjdZbkpsWVdzNklGSjlMbHh5WEc0Z0lDQWdJQ29nVG1WcGRHaGxjaUJ2WmlCMGFHVWdZMjlzYkdWamRHbHZibk1nYzJodmRXeGtJR0psSUdOb1lXNW5aV1FnWkhWeWFXNW5JSFJvWlNCamIyMXdZWEpwYzI5dUlIQnliMk5sYzNNZ0tHbHVJSGx2ZFhJZ1kyRnNiR0poWTJ0ektTd2dZWE1nZEdocGN5QnRaWFJvYjJRZ1lYTnpkVzFsY3lCMGFHVjVJSGRwYkd3Z2JtOTBJR0psSUcxMWRHRjBaV1F1WEhKY2JpQWdJQ0FnS2lCQWNHRnlZVzBnYjNSb1pYSWdWR2hsSUhSeVpXVWdkRzhnWTI5dGNIVjBaU0JoSUdScFptWWdZV2RoYVc1emRDNWNjbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQnZibXg1VkdocGN5QkRZV3hzWW1GamF5QnBiblp2YTJWa0lHWnZjaUJoYkd3Z2EyVjVjeUJ2Ym14NUlIQnlaWE5sYm5RZ2FXNGdZSFJvYVhOZ0xseHlYRzRnSUNBZ0lDb2dRSEJoY21GdElHOXViSGxQZEdobGNpQkRZV3hzWW1GamF5QnBiblp2YTJWa0lHWnZjaUJoYkd3Z2EyVjVjeUJ2Ym14NUlIQnlaWE5sYm5RZ2FXNGdZRzkwYUdWeVlDNWNjbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQmthV1ptWlhKbGJuUWdRMkZzYkdKaFkyc2dhVzUyYjJ0bFpDQm1iM0lnWVd4c0lHdGxlWE1nZDJsMGFDQmthV1ptWlhKcGJtY2dkbUZzZFdWekxseHlYRzRnSUNBZ0lDb3ZYSEpjYmlBZ0lDQkNWSEpsWlM1d2NtOTBiM1I1Y0dVdVpHbG1aa0ZuWVdsdWMzUWdQU0JtZFc1amRHbHZiaUFvYjNSb1pYSXNJRzl1YkhsVWFHbHpMQ0J2Ym14NVQzUm9aWElzSUdScFptWmxjbVZ1ZENrZ2UxeHlYRzRnSUNBZ0lDQWdJR2xtSUNodmRHaGxjaTVmWTI5dGNHRnlaU0FoUFQwZ2RHaHBjeTVmWTI5dGNHRnlaU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0pVY21WbElHTnZiWEJoY21GMGIzSnpJR0Z5WlNCdWIzUWdkR2hsSUhOaGJXVXVYQ0lwTzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVwYzBWdGNIUjVJSHg4SUc5MGFHVnlMbWx6Ulcxd2RIa3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXVhWE5GYlhCMGVTQW1KaUJ2ZEdobGNpNXBjMFZ0Y0hSNUtWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIVnVaR1ZtYVc1bFpEdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdTV1lnYjI1bElIUnlaV1VnYVhNZ1pXMXdkSGtzSUdWMlpYSjVkR2hwYm1jZ2QybHNiQ0JpWlNCaGJpQnZibXg1VkdocGN5OXZibXg1VDNSb1pYSXVYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtbHpSVzF3ZEhrcFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2IyNXNlVTkwYUdWeUlEMDlQU0IxYm1SbFptbHVaV1FnUHlCMWJtUmxabWx1WldRZ09pQkNWSEpsWlM1emRHVndWRzlGYm1Rb1FsUnlaV1V1YldGclpVUnBabVpEZFhKemIzSW9iM1JvWlhJcExDQnZibXg1VDNSb1pYSXBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2IyNXNlVlJvYVhNZ1BUMDlJSFZ1WkdWbWFXNWxaQ0EvSUhWdVpHVm1hVzVsWkNBNklFSlVjbVZsTG5OMFpYQlViMFZ1WkNoQ1ZISmxaUzV0WVd0bFJHbG1aa04xY25OdmNpaDBhR2x6S1N3Z2IyNXNlVlJvYVhNcE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNBdkx5QkRkWEp6YjNJdFltRnpaV1FnWkdsbVppQmhiR2R2Y21sMGFHMGdhWE1nWVhNZ1ptOXNiRzkzY3pwY2NseHVJQ0FnSUNBZ0lDQXZMeUF0SUZWdWRHbHNJRzVsYVhSb1pYSWdZM1Z5YzI5eUlHaGhjeUJ1WVhacFoyRjBaV1FnZEc4Z2RHaGxJR1Z1WkNCdlppQjBhR1VnZEhKbFpTd2daRzhnZEdobElHWnZiR3h2ZDJsdVp6cGNjbHh1SUNBZ0lDQWdJQ0F2THlBZ0xTQkpaaUIwYUdVZ1lIUm9hWE5nSUdOMWNuTnZjaUJwY3lCY0ltSmxhR2x1WkZ3aUlIUm9aU0JnYjNSb1pYSmdJR04xY25OdmNpQW9jM1J5YVdOMGJIa2dQQ3dnZG1saElHTnZiWEJoY21VcExDQmhaSFpoYm1ObElHbDBMbHh5WEc0Z0lDQWdJQ0FnSUM4dklDQXRJRTkwYUdWeWQybHpaU3dnWVdSMllXNWpaU0IwYUdVZ1lHOTBhR1Z5WUNCamRYSnpiM0l1WEhKY2JpQWdJQ0FnSUNBZ0x5OGdJQzBnUVc1NUlIUnBiV1VnWVNCamRYSnpiM0lnYVhNZ2MzUmxjSEJsWkN3Z2NHVnlabTl5YlNCMGFHVWdabTlzYkc5M2FXNW5PbHh5WEc0Z0lDQWdJQ0FnSUM4dklDQWdJQzBnU1dZZ1pXbDBhR1Z5SUdOMWNuTnZjaUJ3YjJsdWRITWdkRzhnWVNCclpYa3ZkbUZzZFdVZ2NHRnBjanBjY2x4dUlDQWdJQ0FnSUNBdkx5QWdJQ0FnSUMwZ1NXWWdkR2hwYzBOMWNuTnZjaUE5UFQwZ2IzUm9aWEpEZFhKemIzSWdZVzVrSUhSb1pTQjJZV3gxWlhNZ1pHbG1abVZ5TENCcGRDQnBjeUJoSUVScFptWmxjbVZ1ZEM1Y2NseHVJQ0FnSUNBZ0lDQXZMeUFnSUNBZ0lDMGdTV1lnZEdocGMwTjFjbk52Y2lBK0lHOTBhR1Z5UTNWeWMyOXlJR0Z1WkNCdmRHaGxja04xY25OdmNpQnBjeUJoZENCaElHdGxlUzkyWVd4MVpTQndZV2x5TENCcGRDQnBjeUJoYmlCUGJteDVUM1JvWlhJdVhISmNiaUFnSUNBZ0lDQWdMeThnSUNBZ0lDQXRJRWxtSUhSb2FYTkRkWEp6YjNJZ1BDQnZkR2hsY2tOMWNuTnZjaUJoYm1RZ2RHaHBjME4xY25OdmNpQnBjeUJoZENCaElHdGxlUzkyWVd4MVpTQndZV2x5TENCcGRDQnBjeUJoYmlCUGJteDVWR2hwY3lCaGN5QnNiMjVuSUdGeklIUm9aU0J0YjNOMElISmxZMlZ1ZENCY2NseHVJQ0FnSUNBZ0lDQXZMeUFnSUNBZ0lDQWdZM1Z5YzI5eUlITjBaWEFnZDJGeklDcHViM1FxSUc5MGFHVnlRM1Z5YzI5eUlHRmtkbUZ1WTJsdVp5Qm1jbTl0SUdFZ2RHbGxMaUJVYUdVZ1pYaDBjbUVnWTI5dVpHbDBhVzl1SUdGMmIybGtjeUJsY25KdmJtVnZkWE1nVDI1c2VVOTBhR1Z5SUdOaGJHeHpJRnh5WEc0Z0lDQWdJQ0FnSUM4dklDQWdJQ0FnSUNCMGFHRjBJSGR2ZFd4a0lHOWpZM1Z5SUdSMVpTQjBieUJ2ZEdobGNrTjFjbk52Y2lCaVpXbHVaeUIwYUdVZ1hDSnNaV0ZrWlhKY0lpNWNjbHh1SUNBZ0lDQWdJQ0F2THlBZ0lDQXRJRTkwYUdWeWQybHpaU3dnYVdZZ1ltOTBhQ0JqZFhKemIzSnpJSEJ2YVc1MElIUnZJRzV2WkdWekxDQmpiMjF3WVhKbElIUm9aVzB1SUVsbUlIUm9aWGtnWVhKbElHVnhkV0ZzSUdKNUlISmxabVZ5Wlc1alpTQW9jMmhoY21Wa0tTd2djMnRwY0Z4eVhHNGdJQ0FnSUNBZ0lDOHZJQ0FnSUNBZ1ltOTBhQ0JqZFhKemIzSnpJSFJ2SUhSb1pTQnVaWGgwSUc1dlpHVWdhVzRnZEdobElIZGhiR3N1WEhKY2JpQWdJQ0FnSUNBZ0x5OGdMU0JQYm1ObElHOXVaU0JqZFhKemIzSWdhR0Z6SUdacGJtbHphR1ZrSUhOMFpYQndhVzVuTENCaGJua2djbVZ0WVdsdWFXNW5JSE4wWlhCeklDaHBaaUJoYm5rcElHRnlaU0IwWVd0bGJpQmhibVFnYTJWNUwzWmhiSFZsSUhCaGFYSnpJR0Z5WlNCc2IyZG5aV1JjY2x4dUlDQWdJQ0FnSUNBdkx5QWdJR0Z6SUU5dWJIbFBkR2hsY2lBb2FXWWdiM1JvWlhKRGRYSnpiM0lnYVhNZ2MzUmxjSEJwYm1jcElHOXlJRTl1YkhsVWFHbHpJQ2hwWmlCMGFHbHpRM1Z5YzI5eUlHbHpJSE4wWlhCd2FXNW5LUzVjY2x4dUlDQWdJQ0FnSUNBdkx5QlVhR2x6SUdGc1oyOXlhWFJvYlNCbmFYWmxjeUIwYUdVZ1kzSnBkR2xqWVd3Z1ozVmhjbUZ1ZEdWbElIUm9ZWFFnWVd4c0lHeHZZMkYwYVc5dWN5QW9ZbTkwYUNCdWIyUmxjeUJoYm1RZ2EyVjVMM1poYkhWbElIQmhhWEp6S1NCcGJpQmliM1JvSUhSeVpXVnpJSFJvWVhRZ1hISmNiaUFnSUNBZ0lDQWdMeThnWVhKbElHbGtaVzUwYVdOaGJDQmllU0IyWVd4MVpTQW9ZVzVrSUhCdmMzTnBZbXg1SUdKNUlISmxabVZ5Wlc1alpTa2dkMmxzYkNCaVpTQjJhWE5wZEdWa0lDcGhkQ0IwYUdVZ2MyRnRaU0IwYVcxbEtpQmllU0IwYUdVZ1kzVnljMjl5Y3k1Y2NseHVJQ0FnSUNBZ0lDQXZMeUJVYUdseklISmxiVzkyWlhNZ2RHaGxJSEJ2YzNOcFltbHNhWFI1SUc5bUlHVnRhWFIwYVc1bklHbHVZMjl5Y21WamRDQmthV1ptY3l3Z1lYTWdkMlZzYkNCaGN5QmhiR3h2ZDJsdVp5Qm1iM0lnYzJ0cGNIQnBibWNnYzJoaGNtVmtJRzV2WkdWekxseHlYRzRnSUNBZ0lDQWdJSFpoY2lCZlkyOXRjR0Z5WlNBOUlIUm9hWE11WDJOdmJYQmhjbVU3WEhKY2JpQWdJQ0FnSUNBZ2RtRnlJSFJvYVhORGRYSnpiM0lnUFNCQ1ZISmxaUzV0WVd0bFJHbG1aa04xY25OdmNpaDBhR2x6S1R0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnYjNSb1pYSkRkWEp6YjNJZ1BTQkNWSEpsWlM1dFlXdGxSR2xtWmtOMWNuTnZjaWh2ZEdobGNpazdYSEpjYmlBZ0lDQWdJQ0FnTHk4Z1NYUWdaRzlsYzI0bmRDQnRZWFIwWlhJZ2FHOTNJSFJvYVhOVGRHVndjR1ZrVEdGemRDQnBjeUJwYm1sMGFXRnNhWHBsWkM1Y2NseHVJQ0FnSUNBZ0lDQXZMeUJUZEdWd0lHOXlaR1Z5SUdseklHOXViSGtnZFhObFpDQjNhR1Z1SUdWcGRHaGxjaUJqZFhKemIzSWdhWE1nWVhRZ1lTQnNaV0ZtTENCaGJtUWdZM1Z5YzI5eWN5QmhiSGRoZVhNZ2MzUmhjblFnWVhRZ1lTQnViMlJsTGx4eVhHNGdJQ0FnSUNBZ0lIWmhjaUIwYUdselUzVmpZMlZ6Y3lBOUlIUnlkV1VzSUc5MGFHVnlVM1ZqWTJWemN5QTlJSFJ5ZFdVc0lIQnlaWFpEZFhKemIzSlBjbVJsY2lBOUlFSlVjbVZsTG1OdmJYQmhjbVVvZEdocGMwTjFjbk52Y2l3Z2IzUm9aWEpEZFhKemIzSXNJRjlqYjIxd1lYSmxLVHRjY2x4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvZEdocGMxTjFZMk5sYzNNZ0ppWWdiM1JvWlhKVGRXTmpaWE56S1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQmpkWEp6YjNKUGNtUmxjaUE5SUVKVWNtVmxMbU52YlhCaGNtVW9kR2hwYzBOMWNuTnZjaXdnYjNSb1pYSkRkWEp6YjNJc0lGOWpiMjF3WVhKbEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSFJvYVhOTVpXRm1JRDBnZEdocGMwTjFjbk52Y2k1c1pXRm1MQ0IwYUdselNXNTBaWEp1WVd4VGNHbHVaU0E5SUhSb2FYTkRkWEp6YjNJdWFXNTBaWEp1WVd4VGNHbHVaU3dnZEdocGMweGxkbVZzU1c1a2FXTmxjeUE5SUhSb2FYTkRkWEp6YjNJdWJHVjJaV3hKYm1ScFkyVnpPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnYjNSb1pYSk1aV0ZtSUQwZ2IzUm9aWEpEZFhKemIzSXViR1ZoWml3Z2IzUm9aWEpKYm5SbGNtNWhiRk53YVc1bElEMGdiM1JvWlhKRGRYSnpiM0l1YVc1MFpYSnVZV3hUY0dsdVpTd2diM1JvWlhKTVpYWmxiRWx1WkdsalpYTWdQU0J2ZEdobGNrTjFjbk52Y2k1c1pYWmxiRWx1WkdsalpYTTdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdselRHVmhaaUI4ZkNCdmRHaGxja3hsWVdZcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUVsbUlIUm9aU0JqZFhKemIzSnpJSGRsY21VZ1lYUWdkR2hsSUhOaGJXVWdiRzlqWVhScGIyNGdiR0Z6ZENCemRHVndMQ0IwYUdWdUlIUm9aWEpsSUdseklHNXZJSGR2Y21zZ2RHOGdZbVVnWkc5dVpTNWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNod2NtVjJRM1Z5YzI5eVQzSmtaWElnSVQwOUlEQXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWTNWeWMyOXlUM0prWlhJZ1BUMDlJREFwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFJvYVhOTVpXRm1JQ1ltSUc5MGFHVnlUR1ZoWmlBbUppQmthV1ptWlhKbGJuUXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRVZ4ZFdGc0lHdGxlWE1zSUdOb1pXTnJJR1p2Y2lCdGIyUnBabWxqWVhScGIyNXpYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdkbUZzVkdocGN5QTlJSFJvYVhOTVpXRm1MblpoYkhWbGMxdDBhR2x6VEdWMlpXeEpibVJwWTJWelczUm9hWE5NWlhabGJFbHVaR2xqWlhNdWJHVnVaM1JvSUMwZ01WMWRPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSFpoYkU5MGFHVnlJRDBnYjNSb1pYSk1aV0ZtTG5aaGJIVmxjMXR2ZEdobGNreGxkbVZzU1c1a2FXTmxjMXR2ZEdobGNreGxkbVZzU1c1a2FXTmxjeTVzWlc1bmRHZ2dMU0F4WFYwN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lVOWlhbVZqZEM1cGN5aDJZV3hVYUdsekxDQjJZV3hQZEdobGNpa3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2NtVnpkV3gwSUQwZ1pHbG1abVZ5Wlc1MEtIUm9hWE5EZFhKemIzSXVZM1Z5Y21WdWRFdGxlU3dnZG1Gc1ZHaHBjeXdnZG1Gc1QzUm9aWElwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHlaWE4xYkhRZ0ppWWdjbVZ6ZFd4MExtSnlaV0ZyS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTG1KeVpXRnJPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdhV1lnS0dOMWNuTnZjazl5WkdWeUlENGdNQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QkpaaUIwYUdseklHbHpJSFJvWlNCallYTmxMQ0IzWlNCcmJtOTNJSFJvWVhRZ1pXbDBhR1Z5T2x4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QXhMaUJ2ZEdobGNrTjFjbk52Y2lCemRHVndjR1ZrSUd4aGMzUWdabkp2YlNCaElITjBZWEowYVc1bklIQnZjMmwwYVc5dUlIUm9ZWFFnZEhKaGFXeGxaQ0IwYUdselEzVnljMjl5TENCaGJtUWdhWE1nYzNScGJHd2dZbVZvYVc1a0xDQnZjbHh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlBeUxpQjBhR2x6UTNWeWMyOXlJSE4wWlhCd1pXUWdiR0Z6ZENCaGJtUWdiR1ZoY0daeWIyZG5aV1FnYjNSb1pYSkRkWEp6YjNKY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdSV2wwYUdWeUlHOW1JSFJvWlhObElHTmhjMlZ6SUdseklHRnVJRndpYjI1c2VTQnZkR2hsY2x3aVhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h2ZEdobGNreGxZV1lnSmlZZ2IyNXNlVTkwYUdWeUtTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdiM1JvWlhKV1lXd2dQU0J2ZEdobGNreGxZV1l1ZG1Gc2RXVnpXMjkwYUdWeVRHVjJaV3hKYm1ScFkyVnpXMjkwYUdWeVRHVjJaV3hKYm1ScFkyVnpMbXhsYm1kMGFDQXRJREZkWFR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCeVpYTjFiSFFnUFNCdmJteDVUM1JvWlhJb2IzUm9aWEpEZFhKemIzSXVZM1Z5Y21WdWRFdGxlU3dnYjNSb1pYSldZV3dwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGMzVnNkQ0FtSmlCeVpYTjFiSFF1WW5KbFlXc3BYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjM1ZzZEM1aWNtVmhhenRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaHZibXg1VkdocGN5a2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHaHBjMHhsWVdZZ0ppWWdjSEpsZGtOMWNuTnZjazl5WkdWeUlDRTlQU0F3S1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2RtRnNWR2hwY3lBOUlIUm9hWE5NWldGbUxuWmhiSFZsYzF0MGFHbHpUR1YyWld4SmJtUnBZMlZ6VzNSb2FYTk1aWFpsYkVsdVpHbGpaWE11YkdWdVozUm9JQzBnTVYxZE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlISmxjM1ZzZENBOUlHOXViSGxVYUdsektIUm9hWE5EZFhKemIzSXVZM1Z5Y21WdWRFdGxlU3dnZG1Gc1ZHaHBjeWs3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WemRXeDBJQ1ltSUhKbGMzVnNkQzVpY21WaGF5bGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTG1KeVpXRnJPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLQ0YwYUdselRHVmhaaUFtSmlBaGIzUm9aWEpNWldGbUlDWW1JR04xY25OdmNrOXlaR1Z5SUQwOVBTQXdLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdiR0Z6ZEZSb2FYTWdQU0IwYUdselNXNTBaWEp1WVd4VGNHbHVaUzVzWlc1bmRHZ2dMU0F4TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR3hoYzNSUGRHaGxjaUE5SUc5MGFHVnlTVzUwWlhKdVlXeFRjR2x1WlM1c1pXNW5kR2dnTFNBeE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUc1dlpHVlVhR2x6SUQwZ2RHaHBjMGx1ZEdWeWJtRnNVM0JwYm1WYmJHRnpkRlJvYVhOZFczUm9hWE5NWlhabGJFbHVaR2xqWlhOYmJHRnpkRlJvYVhOZFhUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdWIyUmxUM1JvWlhJZ1BTQnZkR2hsY2tsdWRHVnlibUZzVTNCcGJtVmJiR0Z6ZEU5MGFHVnlYVnR2ZEdobGNreGxkbVZzU1c1a2FXTmxjMXRzWVhOMFQzUm9aWEpkWFR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h1YjJSbFQzUm9aWElnUFQwOUlHNXZaR1ZVYUdsektTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISmxka04xY25OdmNrOXlaR1Z5SUQwZ01EdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpVM1ZqWTJWemN5QTlJRUpVY21WbExuTjBaWEFvZEdocGMwTjFjbk52Y2l3Z2RISjFaU2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiM1JvWlhKVGRXTmpaWE56SUQwZ1FsUnlaV1V1YzNSbGNDaHZkR2hsY2tOMWNuTnZjaXdnZEhKMVpTazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NISmxka04xY25OdmNrOXlaR1Z5SUQwZ1kzVnljMjl5VDNKa1pYSTdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqZFhKemIzSlBjbVJsY2lBOElEQXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTlRkV05qWlhOeklEMGdRbFJ5WldVdWMzUmxjQ2gwYUdselEzVnljMjl5S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzkwYUdWeVUzVmpZMlZ6Y3lBOUlFSlVjbVZsTG5OMFpYQW9iM1JvWlhKRGRYSnpiM0lwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpVM1ZqWTJWemN5QW1KaUJ2Ym14NVZHaHBjeWxjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFSlVjbVZsTG1acGJtbHphRU4xY25OdmNsZGhiR3NvZEdocGMwTjFjbk52Y2l3Z2IzUm9aWEpEZFhKemIzSXNJRjlqYjIxd1lYSmxMQ0J2Ym14NVZHaHBjeWs3WEhKY2JpQWdJQ0FnSUNBZ2FXWWdLRzkwYUdWeVUzVmpZMlZ6Y3lBbUppQnZibXg1VDNSb1pYSXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCQ1ZISmxaUzVtYVc1cGMyaERkWEp6YjNKWFlXeHJLRzkwYUdWeVEzVnljMjl5TENCMGFHbHpRM1Z5YzI5eUxDQmZZMjl0Y0dGeVpTd2diMjVzZVU5MGFHVnlLVHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0F2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2NseHVJQ0FnSUM4dklFaGxiSEJsY2lCdFpYUm9iMlJ6SUdadmNpQmthV1ptUVdkaGFXNXpkQ0F2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkwxeHlYRzRnSUNBZ1FsUnlaV1V1Wm1sdWFYTm9RM1Z5YzI5eVYyRnNheUE5SUdaMWJtTjBhVzl1SUNoamRYSnpiM0lzSUdOMWNuTnZja1pwYm1semFHVmtMQ0JqYjIxd1lYSmxTMlY1Y3l3Z1kyRnNiR0poWTJzcElIdGNjbHh1SUNBZ0lDQWdJQ0IyWVhJZ1kyOXRjR0Z5WldRZ1BTQkNWSEpsWlM1amIyMXdZWEpsS0dOMWNuTnZjaXdnWTNWeWMyOXlSbWx1YVhOb1pXUXNJR052YlhCaGNtVkxaWGx6S1R0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvWTI5dGNHRnlaV1FnUFQwOUlEQXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0NGQ1ZISmxaUzV6ZEdWd0tHTjFjbk52Y2lrcFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RXNWtaV1pwYm1Wa08xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoamIyMXdZWEpsWkNBOElEQXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMmhsWTJzb1ptRnNjMlVzSUZ3aVkzVnljMjl5SUhkaGJHc2dkR1Z5YldsdVlYUmxaQ0JsWVhKc2VWd2lLVHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlFSlVjbVZsTG5OMFpYQlViMFZ1WkNoamRYSnpiM0lzSUdOaGJHeGlZV05yS1R0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNCQ1ZISmxaUzV6ZEdWd1ZHOUZibVFnUFNCbWRXNWpkR2x2YmlBb1kzVnljMjl5TENCallXeHNZbUZqYXlrZ2UxeHlYRzRnSUNBZ0lDQWdJSFpoY2lCallXNVRkR1Z3SUQwZ2RISjFaVHRjY2x4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvWTJGdVUzUmxjQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2JHVmhaaUE5SUdOMWNuTnZjaTVzWldGbUxDQnNaWFpsYkVsdVpHbGpaWE1nUFNCamRYSnpiM0l1YkdWMlpXeEpibVJwWTJWekxDQmpkWEp5Wlc1MFMyVjVJRDBnWTNWeWMyOXlMbU4xY25KbGJuUkxaWGs3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoc1pXRm1LU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdkbUZzZFdVZ1BTQnNaV0ZtTG5aaGJIVmxjMXRzWlhabGJFbHVaR2xqWlhOYmJHVjJaV3hKYm1ScFkyVnpMbXhsYm1kMGFDQXRJREZkWFR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ5WlhOMWJIUWdQU0JqWVd4c1ltRmpheWhqZFhKeVpXNTBTMlY1TENCMllXeDFaU2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jbVZ6ZFd4MElDWW1JSEpsYzNWc2RDNWljbVZoYXlsY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6ZFd4MExtSnlaV0ZyTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYmxOMFpYQWdQU0JDVkhKbFpTNXpkR1Z3S0dOMWNuTnZjaWs3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdRbFJ5WldVdWJXRnJaVVJwWm1aRGRYSnpiM0lnUFNCbWRXNWpkR2x2YmlBb2RISmxaU2tnZTF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJmY205dmRDQTlJSFJ5WldVdVgzSnZiM1FzSUdobGFXZG9kQ0E5SUhSeVpXVXVhR1ZwWjJoME8xeHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjdJR2hsYVdkb2REb2dhR1ZwWjJoMExDQnBiblJsY201aGJGTndhVzVsT2lCYlcxOXliMjkwWFYwc0lHeGxkbVZzU1c1a2FXTmxjem9nV3pCZExDQnNaV0ZtT2lCMWJtUmxabWx1WldRc0lHTjFjbkpsYm5STFpYazZJRjl5YjI5MExtMWhlRXRsZVNncElIMDdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xWEhKY2JpQWdJQ0FnS2lCQlpIWmhibU5sY3lCMGFHVWdZM1Z5YzI5eUlIUnZJSFJvWlNCdVpYaDBJSE4wWlhBZ2FXNGdkR2hsSUhkaGJHc2diMllnYVhSeklIUnlaV1V1WEhKY2JpQWdJQ0FnS2lCRGRYSnpiM0p6SUdGeVpTQjNZV3hyWldRZ1ltRmphM2RoY21SeklHbHVJSE52Y25RZ2IzSmtaWElzSUdGeklIUm9hWE1nWVd4c2IzZHpJSFJvWlcwZ2RHOGdiR1YyWlhKaFoyVWdiV0Y0UzJWNUtDa2dhVzRnYjNKa1pYSWdkRzhnWW1VZ1kyOXRjR0Z5WldRZ2FXNGdUeWd4S1M1Y2NseHVJQ0FnSUNBcUlFQndZWEpoYlNCamRYSnpiM0lnVkdobElHTjFjbk52Y2lCMGJ5QnpkR1Z3WEhKY2JpQWdJQ0FnS2lCQWNHRnlZVzBnYzNSbGNGUnZUbTlrWlNCSlppQjBjblZsTENCMGFHVWdZM1Z5YzI5eUlIZHBiR3dnWW1VZ1lXUjJZVzVqWldRZ2RHOGdkR2hsSUc1bGVIUWdibTlrWlNBb2MydHBjSEJwYm1jZ2RtRnNkV1Z6S1Z4eVhHNGdJQ0FnSUNvZ1FISmxkSFZ5Ym5NZ2RISjFaU0JwWmlCMGFHVWdjM1JsY0NCM1lYTWdZMjl0Y0d4bGRHVmtJR0Z1WkNCbVlXeHpaU0JwWmlCMGFHVWdjM1JsY0NCM2IzVnNaQ0JvWVhabElHTmhkWE5sWkNCMGFHVWdZM1Z5YzI5eUlIUnZJRzF2ZG1VZ1ltVjViMjVrSUhSb1pTQmxibVFnYjJZZ2RHaGxJSFJ5WldVdVhISmNiaUFnSUNBZ0tpOWNjbHh1SUNBZ0lFSlVjbVZsTG5OMFpYQWdQU0JtZFc1amRHbHZiaUFvWTNWeWMyOXlMQ0J6ZEdWd1ZHOU9iMlJsS1NCN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUdsdWRHVnlibUZzVTNCcGJtVWdQU0JqZFhKemIzSXVhVzUwWlhKdVlXeFRjR2x1WlN3Z2JHVjJaV3hKYm1ScFkyVnpJRDBnWTNWeWMyOXlMbXhsZG1Wc1NXNWthV05sY3l3Z2JHVmhaaUE5SUdOMWNuTnZjaTVzWldGbU8xeHlYRzRnSUNBZ0lDQWdJR2xtSUNoemRHVndWRzlPYjJSbElEMDlQU0IwY25WbElIeDhJR3hsWVdZcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR3hsZG1Wc2MweGxibWQwYUNBOUlHeGxkbVZzU1c1a2FXTmxjeTVzWlc1bmRHZzdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRk4wWlhBZ2RHOGdkR2hsSUc1bGVIUWdibTlrWlNCdmJteDVJR2xtT2x4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlBdElGZGxJR0Z5WlNCbGVIQnNhV05wZEd4NUlHUnBjbVZqZEdWa0lIUnZJSFpwWVNCemRHVndWRzlPYjJSbExDQnZjbHh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUF0SUZSb1pYSmxJR0Z5WlNCdWJ5QnJaWGt2ZG1Gc2RXVWdjR0ZwY25NZ2JHVm1kQ0IwYnlCemRHVndJSFJ2SUdsdUlIUm9hWE1nYkdWaFpseHlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jM1JsY0ZSdlRtOWtaU0E5UFQwZ2RISjFaU0I4ZkNCc1pYWmxiRWx1WkdsalpYTmJiR1YyWld4elRHVnVaM1JvSUMwZ01WMGdQVDA5SURBcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCemNHbHVaVXhsYm1kMGFDQTlJR2x1ZEdWeWJtRnNVM0JwYm1VdWJHVnVaM1JvTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdVbTl2ZENCcGN5QnNaV0ZtWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jM0JwYm1WTVpXNW5kR2dnUFQwOUlEQXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1YyRnNheUJpWVdOcklIVndJSFJvWlNCMGNtVmxJSFZ1ZEdsc0lIZGxJR1pwYm1RZ1lTQnVaWGNnYzNWaWRISmxaU0IwYnlCa1pYTmpaVzVrSUdsdWRHOWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdWIyUmxUR1YyWld4SmJtUmxlQ0E5SUhOd2FXNWxUR1Z1WjNSb0lDMGdNVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQnNaWFpsYkVsdVpHVjRWMkZzYTBKaFkyc2dQU0J1YjJSbFRHVjJaV3hKYm1SbGVEdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGRvYVd4bElDaHNaWFpsYkVsdVpHVjRWMkZzYTBKaFkyc2dQajBnTUNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHNaWFpsYkVsdVpHbGpaWE5iYkdWMlpXeEpibVJsZUZkaGJHdENZV05yWFNBK0lEQXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHeGxkbVZzU1c1a1pYaFhZV3hyUW1GamF5QThJR3hsZG1Wc2MweGxibWQwYUNBdElERXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRkpsYlc5MlpTQnNaV0ZtSUhOMFlYUmxJR1p5YjIwZ1kzVnljMjl5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpkWEp6YjNJdWJHVmhaaUE5SUhWdVpHVm1hVzVsWkR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZG1Wc1NXNWthV05sY3k1d2IzQW9LVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QkpaaUIzWlNCM1lXeHJaV1FnZFhCM1lYSmtjeUJ3WVhOMElHRnVlU0JwYm5SbGNtNWhiQ0J1YjJSbExDQnpiR2xqWlNCMGFHVnRJRzkxZEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iR1YyWld4SmJtUmxlRmRoYkd0Q1lXTnJJRHdnYm05a1pVeGxkbVZzU1c1a1pYZ3BYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamRYSnpiM0l1YVc1MFpYSnVZV3hUY0dsdVpTQTlJR2x1ZEdWeWJtRnNVM0JwYm1VdWMyeHBZMlVvTUN3Z2JHVjJaV3hKYm1SbGVGZGhiR3RDWVdOcklDc2dNU2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklFMXZkbVVnZEc4Z2JtVjNJR2x1ZEdWeWJtRnNJRzV2WkdWY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kzVnljMjl5TG1OMWNuSmxiblJMWlhrZ1BTQnBiblJsY201aGJGTndhVzVsVzJ4bGRtVnNTVzVrWlhoWFlXeHJRbUZqYTExYkxTMXNaWFpsYkVsdVpHbGpaWE5iYkdWMlpXeEpibVJsZUZkaGJHdENZV05yWFYwdWJXRjRTMlY1S0NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYWmxiRWx1WkdWNFYyRnNhMEpoWTJzdExUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklFTjFjbk52Y2lCcGN5QnBiaUIwYUdVZ1ptRnlJR3hsWm5RZ2JHVmhaaUJ2WmlCMGFHVWdkSEpsWlN3Z2JtOGdiVzl5WlNCdWIyUmxjeUIwYnlCbGJuVnRaWEpoZEdWY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRTF2ZG1VZ2RHOGdibVYzSUd4bFlXWWdkbUZzZFdWY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUIyWVd4MVpVbHVaR1Y0SUQwZ0xTMXNaWFpsYkVsdVpHbGpaWE5iYkdWMlpXeHpUR1Z1WjNSb0lDMGdNVjA3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamRYSnpiM0l1WTNWeWNtVnVkRXRsZVNBOUlHeGxZV1l1YTJWNWMxdDJZV3gxWlVsdVpHVjRYVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdleUF2THlCRGRYSnpiM0lnWkc5bGN5QnViM1FnY0c5cGJuUWdkRzhnWVNCMllXeDFaU0JwYmlCaElHeGxZV1lzSUhOdklHMXZkbVVnWkc5M2JuZGhjbVJ6WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdVpYaDBUR1YyWld3Z1BTQnBiblJsY201aGJGTndhVzVsTG14bGJtZDBhRHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdOMWNuSmxiblJNWlhabGJDQTlJRzVsZUhSTVpYWmxiQ0F0SURFN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQnViMlJsSUQwZ2FXNTBaWEp1WVd4VGNHbHVaVnRqZFhKeVpXNTBUR1YyWld4ZFcyeGxkbVZzU1c1a2FXTmxjMXRqZFhKeVpXNTBUR1YyWld4ZFhUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzV2WkdVdWFYTk1aV0ZtS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJGYm5SbGNtbHVaeUJwYm5SdklHRWdiR1ZoWmk0Z1UyVjBJSFJvWlNCamRYSnpiM0lnZEc4Z2NHOXBiblFnWVhRZ2RHaGxJR3hoYzNRZ2EyVjVMM1poYkhWbElIQmhhWEl1WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamRYSnpiM0l1YkdWaFppQTlJRzV2WkdVN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnZG1Gc2RXVkpibVJsZUNBOUlHeGxkbVZzU1c1a2FXTmxjMXR1WlhoMFRHVjJaV3hkSUQwZ2JtOWtaUzUyWVd4MVpYTXViR1Z1WjNSb0lDMGdNVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOMWNuTnZjaTVqZFhKeVpXNTBTMlY1SUQwZ2JtOWtaUzVyWlhselczWmhiSFZsU1c1a1pYaGRPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR05vYVd4a2NtVnVJRDBnYm05a1pTNWphR2xzWkhKbGJqdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x1ZEdWeWJtRnNVM0JwYm1WYmJtVjRkRXhsZG1Wc1hTQTlJR05vYVd4a2NtVnVPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHTm9hV3hrU1c1a1pYZ2dQU0JqYUdsc1pISmxiaTVzWlc1bmRHZ2dMU0F4TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjJaV3hKYm1ScFkyVnpXMjVsZUhSTVpYWmxiRjBnUFNCamFHbHNaRWx1WkdWNE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZM1Z5YzI5eUxtTjFjbkpsYm5STFpYa2dQU0JqYUdsc1pISmxibHRqYUdsc1pFbHVaR1Y0WFM1dFlYaExaWGtvS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xWEhKY2JpQWdJQ0FnS2lCRGIyMXdZWEpsY3lCMGFHVWdkSGR2SUdOMWNuTnZjbk11SUZKbGRIVnlibk1nWVNCMllXeDFaU0JwYm1ScFkyRjBhVzVuSUhkb2FXTm9JR04xY25OdmNpQnBjeUJoYUdWaFpDQnBiaUJoSUhkaGJHc3VYSEpjYmlBZ0lDQWdLaUJPYjNSbElIUm9ZWFFnWTNWeWMyOXljeUJoY21VZ1lXUjJZVzVqWldRZ2FXNGdjbVYyWlhKelpTQnpiM0owYVc1bklHOXlaR1Z5TGx4eVhHNGdJQ0FnSUNvdlhISmNiaUFnSUNCQ1ZISmxaUzVqYjIxd1lYSmxJRDBnWm5WdVkzUnBiMjRnS0dOMWNuTnZja0VzSUdOMWNuTnZja0lzSUdOdmJYQmhjbVZMWlhsektTQjdYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlHaGxhV2RvZEVFZ1BTQmpkWEp6YjNKQkxtaGxhV2RvZEN3Z1kzVnljbVZ1ZEV0bGVVRWdQU0JqZFhKemIzSkJMbU4xY25KbGJuUkxaWGtzSUd4bGRtVnNTVzVrYVdObGMwRWdQU0JqZFhKemIzSkJMbXhsZG1Wc1NXNWthV05sY3p0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnYUdWcFoyaDBRaUE5SUdOMWNuTnZja0l1YUdWcFoyaDBMQ0JqZFhKeVpXNTBTMlY1UWlBOUlHTjFjbk52Y2tJdVkzVnljbVZ1ZEV0bGVTd2diR1YyWld4SmJtUnBZMlZ6UWlBOUlHTjFjbk52Y2tJdWJHVjJaV3hKYm1ScFkyVnpPMXh5WEc0Z0lDQWdJQ0FnSUM4dklGSmxkbVZ5YzJVZ2RHaGxJR052YlhCaGNtbHpiMjRnYjNKa1pYSXNJR0Z6SUdOMWNuTnZjbk1nWVhKbElHRmtkbUZ1WTJWa0lHbHVJSEpsZG1WeWMyVWdjMjl5ZEdsdVp5QnZjbVJsY2x4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJyWlhsRGIyMXdZWEpwYzI5dUlEMGdZMjl0Y0dGeVpVdGxlWE1vWTNWeWNtVnVkRXRsZVVJc0lHTjFjbkpsYm5STFpYbEJLVHRjY2x4dUlDQWdJQ0FnSUNCcFppQW9hMlY1UTI5dGNHRnlhWE52YmlBaFBUMGdNQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdhMlY1UTI5dGNHRnlhWE52Ymp0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnTHk4Z1RtOXliV0ZzYVhwbElHUmxjSFJvSUhaaGJIVmxjeUJ5Wld4aGRHbDJaU0IwYnlCMGFHVWdjMmh2Y25SbGMzUWdkSEpsWlM1Y2NseHVJQ0FnSUNBZ0lDQXZMeUJVYUdseklHVnVjM1Z5WlhNZ2RHaGhkQ0JqYjI1amRYSnlaVzUwSUdOMWNuTnZjaUIzWVd4cmN5QnZaaUIwY21WbGN5QnZaaUJrYVdabVpYSnBibWNnYUdWcFoyaDBjeUJqWVc0Z2NtVnNhV0ZpYkhrZ2JHRnVaQ0J2YmlCemFHRnlaV1FnYm05a1pYTWdZWFFnZEdobElITmhiV1VnZEdsdFpTNWNjbHh1SUNBZ0lDQWdJQ0F2THlCVWJ5QmhZMk52YlhCc2FYTm9JSFJvYVhNc0lHRWdZM1Z5YzI5eUlIUm9ZWFFnYVhNZ2IyNGdZVzRnYVc1MFpYSnVZV3dnYm05a1pTQmhkQ0JrWlhCMGFDQkVNU0IzYVhSb0lHMWhlRXRsZVNCWUlHbHpJR052Ym5OcFpHVnlaV1FnWENKaVpXaHBibVJjSWlCaElHTjFjbk52Y2lCdmJpQmhibHh5WEc0Z0lDQWdJQ0FnSUM4dklHbHVkR1Z5Ym1Gc0lHNXZaR1VnWVhRZ1pHVndkR2dnUkRJZ2QybDBhQ0J0WVhoTFpYa2dXU3dnZDJobGJpQkVNU0E4SUVReUxpQlVhSFZ6TENCaGJIZGhlWE1nZDJGc2EybHVaeUIwYUdVZ1kzVnljMjl5SUhSb1lYUWdhWE1nWENKaVpXaHBibVJjSWlCM2FXeHNJR0ZzYkc5M0lIUm9aU0JqZFhKemIzSmNjbHh1SUNBZ0lDQWdJQ0F2THlCaGRDQnphR0ZzYkc5M1pYSWdaR1Z3ZEdnZ0tHSjFkQ0JsY1hWaGJDQnRZWGhMWlhrcElIUnZJRndpWTJGMFkyZ2dkWEJjSWlCaGJtUWdiR0Z1WkNCdmJpQnphR0Z5WldRZ2JtOWtaWE11WEhKY2JpQWdJQ0FnSUNBZ2RtRnlJR2hsYVdkb2RFMXBiaUE5SUdobGFXZG9kRUVnUENCb1pXbG5hSFJDSUQ4Z2FHVnBaMmgwUVNBNklHaGxhV2RvZEVJN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUdSbGNIUm9RVTV2Y20xaGJHbDZaV1FnUFNCc1pYWmxiRWx1WkdsalpYTkJMbXhsYm1kMGFDQXRJQ2hvWldsbmFIUkJJQzBnYUdWcFoyaDBUV2x1S1R0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnWkdWd2RHaENUbTl5YldGc2FYcGxaQ0E5SUd4bGRtVnNTVzVrYVdObGMwSXViR1Z1WjNSb0lDMGdLR2hsYVdkb2RFSWdMU0JvWldsbmFIUk5hVzRwTzF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCa1pYQjBhRUZPYjNKdFlXeHBlbVZrSUMwZ1pHVndkR2hDVG05eWJXRnNhWHBsWkR0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNBdkx5QkZibVFnYjJZZ2FHVnNjR1Z5SUcxbGRHaHZaSE1nWm05eUlHUnBabVpCWjJGcGJuTjBJQzh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OWNjbHh1SUNBZ0lDOHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMMXh5WEc0Z0lDQWdMeW9xSUZKbGRIVnlibk1nWVNCdVpYY2dhWFJsY21GMGIzSWdabTl5SUdsMFpYSmhkR2x1WnlCMGFHVWdhMlY1Y3lCdlppQmxZV05vSUhCaGFYSWdhVzRnWVhOalpXNWthVzVuSUc5eVpHVnlMbHh5WEc0Z0lDQWdJQ29nSUVCd1lYSmhiU0JtYVhKemRFdGxlVG9nVFdsdWFXMTFiU0JyWlhrZ2RHOGdhVzVqYkhWa1pTQnBiaUIwYUdVZ2IzVjBjSFYwTGlBcUwxeHlYRzRnSUNBZ1FsUnlaV1V1Y0hKdmRHOTBlWEJsTG10bGVYTWdQU0JtZFc1amRHbHZiaUFvWm1seWMzUkxaWGtwSUh0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnYVhRZ1BTQjBhR2x6TG1WdWRISnBaWE1vWm1seWMzUkxaWGtzSUZKbGRYTmxaRUZ5Y21GNUtUdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdhWFJsY21GMGIzSW9ablZ1WTNScGIyNGdLQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2JpQTlJR2wwTG01bGVIUW9LVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c0dWRtRnNkV1VwWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdUxuWmhiSFZsSUQwZ2JpNTJZV3gxWlZzd1hUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc0N1hISmNiaUFnSUNBZ0lDQWdmU2s3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnTHlvcUlGSmxkSFZ5Ym5NZ1lTQnVaWGNnYVhSbGNtRjBiM0lnWm05eUlHbDBaWEpoZEdsdVp5QjBhR1VnZG1Gc2RXVnpJRzltSUdWaFkyZ2djR0ZwY2lCcGJpQnZjbVJsY2lCaWVTQnJaWGt1WEhKY2JpQWdJQ0FnS2lBZ1FIQmhjbUZ0SUdacGNuTjBTMlY1T2lCTmFXNXBiWFZ0SUd0bGVTQjNhRzl6WlNCaGMzTnZZMmxoZEdWa0lIWmhiSFZsSUdseklHbHVZMngxWkdWa0lHbHVJSFJvWlNCdmRYUndkWFF1SUNvdlhISmNiaUFnSUNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1ZG1Gc2RXVnpJRDBnWm5WdVkzUnBiMjRnS0dacGNuTjBTMlY1S1NCN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUdsMElEMGdkR2hwY3k1bGJuUnlhV1Z6S0dacGNuTjBTMlY1TENCU1pYVnpaV1JCY25KaGVTazdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR2wwWlhKaGRHOXlLR1oxYm1OMGFXOXVJQ2dwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHNGdQU0JwZEM1dVpYaDBLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodUxuWmhiSFZsS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JpNTJZV3gxWlNBOUlHNHVkbUZzZFdWYk1WMDdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdU8xeHlYRzRnSUNBZ0lDQWdJSDBwTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaENWSEpsWlM1d2NtOTBiM1I1Y0dVc0lGd2liV0Y0VG05a1pWTnBlbVZjSWl3Z2UxeHlYRzRnSUNBZ0lDQWdJQzh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dlhISmNiaUFnSUNBZ0lDQWdMeThnUVdSa2FYUnBiMjVoYkNCdFpYUm9iMlJ6SUM4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2NseHVJQ0FnSUNBZ0lDQXZLaW9nVW1WMGRYSnVjeUIwYUdVZ2JXRjRhVzExYlNCdWRXMWlaWElnYjJZZ1kyaHBiR1J5Wlc0dmRtRnNkV1Z6SUdKbFptOXlaU0J1YjJSbGN5QjNhV3hzSUhOd2JHbDBMaUFxTDF4eVhHNGdJQ0FnSUNBZ0lHZGxkRG9nWm5WdVkzUnBiMjRnS0NrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWZiV0Y0VG05a1pWTnBlbVU3WEhKY2JpQWdJQ0FnSUNBZ2ZTeGNjbHh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCbVlXeHpaU3hjY2x4dUlDQWdJQ0FnSUNCamIyNW1hV2QxY21GaWJHVTZJSFJ5ZFdWY2NseHVJQ0FnSUgwcE8xeHlYRzRnSUNBZ0x5b3FJRWRsZEhNZ2RHaGxJR3h2ZDJWemRDQnJaWGtnYVc0Z2RHaGxJSFJ5WldVdUlFTnZiWEJzWlhocGRIazZJRThvYkc5bklITnBlbVVwSUNvdlhISmNiaUFnSUNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1YldsdVMyVjVJRDBnWm5WdVkzUnBiMjRnS0NrZ2V5QnlaWFIxY200Z2RHaHBjeTVmY205dmRDNXRhVzVMWlhrb0tUc2dmVHRjY2x4dUlDQWdJQzhxS2lCSFpYUnpJSFJvWlNCb2FXZG9aWE4wSUd0bGVTQnBiaUIwYUdVZ2RISmxaUzRnUTI5dGNHeGxlR2wwZVRvZ1R5Z3hLU0FxTDF4eVhHNGdJQ0FnUWxSeVpXVXVjSEp2ZEc5MGVYQmxMbTFoZUV0bGVTQTlJR1oxYm1OMGFXOXVJQ2dwSUhzZ2NtVjBkWEp1SUhSb2FYTXVYM0p2YjNRdWJXRjRTMlY1S0NrN0lIMDdYSEpjYmlBZ0lDQXZLaW9nVVhWcFkydHNlU0JqYkc5dVpYTWdkR2hsSUhSeVpXVWdZbmtnYldGeWEybHVaeUIwYUdVZ2NtOXZkQ0J1YjJSbElHRnpJSE5vWVhKbFpDNWNjbHh1SUNBZ0lDQXFJQ0JDYjNSb0lHTnZjR2xsY3lCeVpXMWhhVzRnWldScGRHRmliR1V1SUZkb1pXNGdlVzkxSUcxdlpHbG1lU0JsYVhSb1pYSWdZMjl3ZVN3Z1lXNTVYSEpjYmlBZ0lDQWdLaUFnYm05a1pYTWdkR2hoZENCaGNtVWdjMmhoY21Wa0lDaHZjaUJ3YjNSbGJuUnBZV3hzZVNCemFHRnlaV1FwSUdKbGRIZGxaVzRnZEdobElIUjNiMXh5WEc0Z0lDQWdJQ29nSUdOdmNHbGxjeUJoY21VZ1kyeHZibVZrSUhOdklIUm9ZWFFnZEdobElHTm9ZVzVuWlhNZ1pHOGdibTkwSUdGbVptVmpkQ0J2ZEdobGNpQmpiM0JwWlhNdVhISmNiaUFnSUNBZ0tpQWdWR2hwY3lCcGN5QnJibTkzYmlCaGN5QmpiM0I1TFc5dUxYZHlhWFJsSUdKbGFHRjJhVzl5TENCdmNpQmNJbXhoZW5rZ1kyOXdlV2x1WjF3aUxpQXFMMXh5WEc0Z0lDQWdRbFJ5WldVdWNISnZkRzkwZVhCbExtTnNiMjVsSUQwZ1puVnVZM1JwYjI0Z0tDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYM0p2YjNRdWFYTlRhR0Z5WldRZ1BTQjBjblZsTzF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJ5WlhOMWJIUWdQU0J1WlhjZ1FsUnlaV1VvZFc1a1pXWnBibVZrTENCMGFHbHpMbDlqYjIxd1lYSmxMQ0IwYUdsekxsOXRZWGhPYjJSbFUybDZaU2s3WEhKY2JpQWdJQ0FnSUNBZ2NtVnpkV3gwTGw5eWIyOTBJRDBnZEdocGN5NWZjbTl2ZER0Y2NseHVJQ0FnSUNBZ0lDQnlaWE4xYkhRdVgzTnBlbVVnUFNCMGFHbHpMbDl6YVhwbE8xeHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE4xYkhRN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ0x5b3FJRkJsY21admNtMXpJR0VnWjNKbFpXUjVJR05zYjI1bExDQnBiVzFsWkdsaGRHVnNlU0JrZFhCc2FXTmhkR2x1WnlCaGJua2dibTlrWlhNZ2RHaGhkQ0JoY21WY2NseHVJQ0FnSUNBcUlDQnViM1FnWTNWeWNtVnVkR3g1SUcxaGNtdGxaQ0JoY3lCemFHRnlaV1FzSUdsdUlHOXlaR1Z5SUhSdklHRjJiMmxrSUcxaGNtdHBibWNnWVc1NVhISmNiaUFnSUNBZ0tpQWdZV1JrYVhScGIyNWhiQ0J1YjJSbGN5QmhjeUJ6YUdGeVpXUXVYSEpjYmlBZ0lDQWdLaUFnUUhCaGNtRnRJR1p2Y21ObElFTnNiMjVsSUdGc2JDQnViMlJsY3l3Z1pYWmxiaUJ6YUdGeVpXUWdiMjVsY3k1Y2NseHVJQ0FnSUNBcUwxeHlYRzRnSUNBZ1FsUnlaV1V1Y0hKdmRHOTBlWEJsTG1keVpXVmtlVU5zYjI1bElEMGdablZ1WTNScGIyNGdLR1p2Y21ObEtTQjdYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlISmxjM1ZzZENBOUlHNWxkeUJDVkhKbFpTaDFibVJsWm1sdVpXUXNJSFJvYVhNdVgyTnZiWEJoY21Vc0lIUm9hWE11WDIxaGVFNXZaR1ZUYVhwbEtUdGNjbHh1SUNBZ0lDQWdJQ0J5WlhOMWJIUXVYM0p2YjNRZ1BTQjBhR2x6TGw5eWIyOTBMbWR5WldWa2VVTnNiMjVsS0dadmNtTmxLVHRjY2x4dUlDQWdJQ0FnSUNCeVpYTjFiSFF1WDNOcGVtVWdQU0IwYUdsekxsOXphWHBsTzF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTjFiSFE3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnTHlvcUlFZGxkSE1nWVc0Z1lYSnlZWGtnWm1sc2JHVmtJSGRwZEdnZ2RHaGxJR052Ym5SbGJuUnpJRzltSUhSb1pTQjBjbVZsTENCemIzSjBaV1FnWW5rZ2EyVjVJQ292WEhKY2JpQWdJQ0JDVkhKbFpTNXdjbTkwYjNSNWNHVXVkRzlCY25KaGVTQTlJR1oxYm1OMGFXOXVJQ2h0WVhoTVpXNW5kR2dwSUh0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvYldGNFRHVnVaM1JvSUQwOVBTQjJiMmxrSURBcElIc2diV0Y0VEdWdVozUm9JRDBnTUhnM1JrWkdSa1pHUmpzZ2ZWeHlYRzRnSUNBZ0lDQWdJSFpoY2lCdGFXNGdQU0IwYUdsekxtMXBia3RsZVNncExDQnRZWGdnUFNCMGFHbHpMbTFoZUV0bGVTZ3BPMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHRhVzRnSVQwOUlIVnVaR1ZtYVc1bFpDbGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMlYwVW1GdVoyVW9iV2x1TENCdFlYZ3NJSFJ5ZFdVc0lHMWhlRXhsYm1kMGFDazdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRnRkTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUM4cUtpQkhaWFJ6SUdGdUlHRnljbUY1SUc5bUlHRnNiQ0JyWlhsekxDQnpiM0owWldRZ0tpOWNjbHh1SUNBZ0lFSlVjbVZsTG5CeWIzUnZkSGx3WlM1clpYbHpRWEp5WVhrZ1BTQm1kVzVqZEdsdmJpQW9LU0I3WEhKY2JpQWdJQ0FnSUNBZ2RtRnlJSEpsYzNWc2RITWdQU0JiWFR0Y2NseHVJQ0FnSUNBZ0lDQjBhR2x6TGw5eWIyOTBMbVp2Y2xKaGJtZGxLSFJvYVhNdWJXbHVTMlY1S0Nrc0lIUm9hWE11YldGNFMyVjVLQ2tzSUhSeWRXVXNJR1poYkhObExDQjBhR2x6TENBd0xDQm1kVzVqZEdsdmJpQW9heXdnZGlrZ2V5QnlaWE4xYkhSekxuQjFjMmdvYXlrN0lIMHBPMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh5WEc0Z0lDQWdmVHRjY2x4dUlDQWdJQzhxS2lCSFpYUnpJR0Z1SUdGeWNtRjVJRzltSUdGc2JDQjJZV3gxWlhNc0lITnZjblJsWkNCaWVTQnJaWGtnS2k5Y2NseHVJQ0FnSUVKVWNtVmxMbkJ5YjNSdmRIbHdaUzUyWVd4MVpYTkJjbkpoZVNBOUlHWjFibU4wYVc5dUlDZ3BJSHRjY2x4dUlDQWdJQ0FnSUNCMllYSWdjbVZ6ZFd4MGN5QTlJRnRkTzF4eVhHNGdJQ0FnSUNBZ0lIUm9hWE11WDNKdmIzUXVabTl5VW1GdVoyVW9kR2hwY3k1dGFXNUxaWGtvS1N3Z2RHaHBjeTV0WVhoTFpYa29LU3dnZEhKMVpTd2dabUZzYzJVc0lIUm9hWE1zSURBc0lHWjFibU4wYVc5dUlDaHJMQ0IyS1NCN0lISmxjM1ZzZEhNdWNIVnphQ2gyS1RzZ2ZTazdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzNWc2RITTdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xSUVkbGRITWdZU0J6ZEhKcGJtY2djbVZ3Y21WelpXNTBhVzVuSUhSb1pTQjBjbVZsSjNNZ1pHRjBZU0JpWVhObFpDQnZiaUIwYjBGeWNtRjVLQ2t1SUNvdlhISmNiaUFnSUNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1ZEc5VGRISnBibWNnUFNCbWRXNWpkR2x2YmlBb0tTQjdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWRHOUJjbkpoZVNncExuUnZVM1J5YVc1bktDazdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xSUZOMGIzSmxjeUJoSUd0bGVTMTJZV3gxWlNCd1lXbHlJRzl1YkhrZ2FXWWdkR2hsSUd0bGVTQmtiMlZ6YmlkMElHRnNjbVZoWkhrZ1pYaHBjM1FnYVc0Z2RHaGxJSFJ5WldVdVhISmNiaUFnSUNBZ0tpQkFjbVYwZFhKdWN5QjBjblZsSUdsbUlHRWdibVYzSUd0bGVTQjNZWE1nWVdSa1pXUmNjbHh1SUNBZ0lDb3ZYSEpjYmlBZ0lDQkNWSEpsWlM1d2NtOTBiM1I1Y0dVdWMyVjBTV1pPYjNSUWNtVnpaVzUwSUQwZ1puVnVZM1JwYjI0Z0tHdGxlU3dnZG1Gc2RXVXBJSHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NXpaWFFvYTJWNUxDQjJZV3gxWlN3Z1ptRnNjMlVwTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUM4cUtpQlNaWFIxY201eklIUm9aU0J1WlhoMElIQmhhWElnZDJodmMyVWdhMlY1SUdseklHeGhjbWRsY2lCMGFHRnVJSFJvWlNCemNHVmphV1pwWldRZ2EyVjVJQ2h2Y2lCMWJtUmxabWx1WldRZ2FXWWdkR2hsY21VZ2FYTWdibTl1WlNrdVhISmNiaUFnSUNBZ0tpQkpaaUJyWlhrZ1BUMDlJSFZ1WkdWbWFXNWxaQ3dnZEdocGN5Qm1kVzVqZEdsdmJpQnlaWFIxY201eklIUm9aU0JzYjNkbGMzUWdjR0ZwY2k1Y2NseHVJQ0FnSUNBcUlFQndZWEpoYlNCclpYa2dWR2hsSUd0bGVTQjBieUJ6WldGeVkyZ2dabTl5TGx4eVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUhKbGRYTmxaRUZ5Y21GNUlFOXdkR2x2Ym1Gc0lHRnljbUY1SUhWelpXUWdjbVZ3WldGMFpXUnNlU0IwYnlCemRHOXlaU0JyWlhrdGRtRnNkV1VnY0dGcGNuTXNJSFJ2WEhKY2JpQWdJQ0FnS2lCaGRtOXBaQ0JqY21WaGRHbHVaeUJoSUc1bGR5QmhjbkpoZVNCdmJpQmxkbVZ5ZVNCcGRHVnlZWFJwYjI0dVhISmNiaUFnSUNBZ0tpOWNjbHh1SUNBZ0lFSlVjbVZsTG5CeWIzUnZkSGx3WlM1dVpYaDBTR2xuYUdWeVVHRnBjaUE5SUdaMWJtTjBhVzl1SUNoclpYa3NJSEpsZFhObFpFRnljbUY1S1NCN1hISmNiaUFnSUNBZ0lDQWdjbVYxYzJWa1FYSnlZWGtnUFNCeVpYVnpaV1JCY25KaGVTQjhmQ0JiWFR0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvYTJWNUlEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzSnZiM1F1YldsdVVHRnBjaWh5WlhWelpXUkJjbkpoZVNrN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXliMjkwTG1kbGRGQmhhWEpQY2s1bGVIUklhV2RvWlhJb2EyVjVMQ0IwYUdsekxsOWpiMjF3WVhKbExDQm1ZV3h6WlN3Z2NtVjFjMlZrUVhKeVlYa3BPMXh5WEc0Z0lDQWdmVHRjY2x4dUlDQWdJQzhxS2lCU1pYUjFjbTV6SUhSb1pTQnVaWGgwSUd0bGVTQnNZWEpuWlhJZ2RHaGhiaUIwYUdVZ2MzQmxZMmxtYVdWa0lHdGxlU3dnYjNJZ2RXNWtaV1pwYm1Wa0lHbG1JSFJvWlhKbElHbHpJRzV2Ym1VdVhISmNiaUFnSUNBZ0tpQWdRV3h6Ynl3Z2JtVjRkRWhwWjJobGNrdGxlU2gxYm1SbFptbHVaV1FwSUhKbGRIVnlibk1nZEdobElHeHZkMlZ6ZENCclpYa3VYSEpjYmlBZ0lDQWdLaTljY2x4dUlDQWdJRUpVY21WbExuQnliM1J2ZEhsd1pTNXVaWGgwU0dsbmFHVnlTMlY1SUQwZ1puVnVZM1JwYjI0Z0tHdGxlU2tnZTF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJ3SUQwZ2RHaHBjeTV1WlhoMFNHbG5hR1Z5VUdGcGNpaHJaWGtzSUZKbGRYTmxaRUZ5Y21GNUtUdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjQ0FtSmlCd1d6QmRPMXh5WEc0Z0lDQWdmVHRjY2x4dUlDQWdJQzhxS2lCU1pYUjFjbTV6SUhSb1pTQnVaWGgwSUhCaGFYSWdkMmh2YzJVZ2EyVjVJR2x6SUhOdFlXeHNaWElnZEdoaGJpQjBhR1VnYzNCbFkybG1hV1ZrSUd0bGVTQW9iM0lnZFc1a1pXWnBibVZrSUdsbUlIUm9aWEpsSUdseklHNXZibVVwTGx4eVhHNGdJQ0FnSUNvZ0lFbG1JR3RsZVNBOVBUMGdkVzVrWldacGJtVmtMQ0IwYUdseklHWjFibU4wYVc5dUlISmxkSFZ5Ym5NZ2RHaGxJR2hwWjJobGMzUWdjR0ZwY2k1Y2NseHVJQ0FnSUNBcUlFQndZWEpoYlNCclpYa2dWR2hsSUd0bGVTQjBieUJ6WldGeVkyZ2dabTl5TGx4eVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUhKbGRYTmxaRUZ5Y21GNUlFOXdkR2x2Ym1Gc0lHRnljbUY1SUhWelpXUWdjbVZ3WldGMFpXUnNlU0IwYnlCemRHOXlaU0JyWlhrdGRtRnNkV1VnY0dGcGNuTXNJSFJ2WEhKY2JpQWdJQ0FnS2lBZ0lDQWdJQ0FnWVhadmFXUWdZM0psWVhScGJtY2dZU0J1WlhjZ1lYSnlZWGtnWldGamFDQjBhVzFsSUhsdmRTQmpZV3hzSUhSb2FYTWdiV1YwYUc5a0xseHlYRzRnSUNBZ0lDb3ZYSEpjYmlBZ0lDQkNWSEpsWlM1d2NtOTBiM1I1Y0dVdWJtVjRkRXh2ZDJWeVVHRnBjaUE5SUdaMWJtTjBhVzl1SUNoclpYa3NJSEpsZFhObFpFRnljbUY1S1NCN1hISmNiaUFnSUNBZ0lDQWdjbVYxYzJWa1FYSnlZWGtnUFNCeVpYVnpaV1JCY25KaGVTQjhmQ0JiWFR0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvYTJWNUlEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzSnZiM1F1YldGNFVHRnBjaWh5WlhWelpXUkJjbkpoZVNrN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXliMjkwTG1kbGRGQmhhWEpQY2s1bGVIUk1iM2RsY2loclpYa3NJSFJvYVhNdVgyTnZiWEJoY21Vc0lHWmhiSE5sTENCeVpYVnpaV1JCY25KaGVTazdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xSUZKbGRIVnlibk1nZEdobElHNWxlSFFnYTJWNUlITnRZV3hzWlhJZ2RHaGhiaUIwYUdVZ2MzQmxZMmxtYVdWa0lHdGxlU3dnYjNJZ2RXNWtaV1pwYm1Wa0lHbG1JSFJvWlhKbElHbHpJRzV2Ym1VdVhISmNiaUFnSUNBZ0tpQWdRV3h6Ynl3Z2JtVjRkRXh2ZDJWeVMyVjVLSFZ1WkdWbWFXNWxaQ2tnY21WMGRYSnVjeUIwYUdVZ2FHbG5hR1Z6ZENCclpYa3VYSEpjYmlBZ0lDQWdLaTljY2x4dUlDQWdJRUpVY21WbExuQnliM1J2ZEhsd1pTNXVaWGgwVEc5M1pYSkxaWGtnUFNCbWRXNWpkR2x2YmlBb2EyVjVLU0I3WEhKY2JpQWdJQ0FnSUNBZ2RtRnlJSEFnUFNCMGFHbHpMbTVsZUhSTWIzZGxjbEJoYVhJb2EyVjVMQ0JTWlhWelpXUkJjbkpoZVNrN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIQWdKaVlnY0Zzd1hUdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQXZLaW9nVW1WMGRYSnVjeUIwYUdVZ2EyVjVMWFpoYkhWbElIQmhhWElnWVhOemIyTnBZWFJsWkNCM2FYUm9JSFJvWlNCemRYQndiR2xsWkNCclpYa2dhV1lnYVhRZ1pYaHBjM1J6WEhKY2JpQWdJQ0FnS2lBZ2IzSWdkR2hsSUhCaGFYSWdZWE56YjJOcFlYUmxaQ0IzYVhSb0lIUm9aU0J1WlhoMElHeHZkMlZ5SUhCaGFYSWdiM1JvWlhKM2FYTmxMaUJKWmlCMGFHVnlaU0JwY3lCdWIxeHlYRzRnSUNBZ0lDb2dJRzVsZUhRZ2JHOTNaWElnY0dGcGNpd2dkVzVrWldacGJtVmtJR2x6SUhKbGRIVnlibVZrTGx4eVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUd0bGVTQlVhR1VnYTJWNUlIUnZJSE5sWVhKamFDQm1iM0l1WEhKY2JpQWdJQ0FnS2lCQWNHRnlZVzBnY21WMWMyVmtRWEp5WVhrZ1QzQjBhVzl1WVd3Z1lYSnlZWGtnZFhObFpDQnlaWEJsWVhSbFpHeDVJSFJ2SUhOMGIzSmxJR3RsZVMxMllXeDFaU0J3WVdseWN5d2dkRzljY2x4dUlDQWdJQ0FxSUNBZ0lDQWdJQ0JoZG05cFpDQmpjbVZoZEdsdVp5QmhJRzVsZHlCaGNuSmhlU0JsWVdOb0lIUnBiV1VnZVc5MUlHTmhiR3dnZEdocGN5QnRaWFJvYjJRdVhISmNiaUFnSUNBZ0tpQXFMMXh5WEc0Z0lDQWdRbFJ5WldVdWNISnZkRzkwZVhCbExtZGxkRkJoYVhKUGNrNWxlSFJNYjNkbGNpQTlJR1oxYm1OMGFXOXVJQ2hyWlhrc0lISmxkWE5sWkVGeWNtRjVLU0I3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM0p2YjNRdVoyVjBVR0ZwY2s5eVRtVjRkRXh2ZDJWeUtHdGxlU3dnZEdocGN5NWZZMjl0Y0dGeVpTd2dkSEoxWlN3Z2NtVjFjMlZrUVhKeVlYa2dmSHdnVzEwcE8xeHlYRzRnSUNBZ2ZUdGNjbHh1SUNBZ0lDOHFLaUJTWlhSMWNtNXpJSFJvWlNCclpYa3RkbUZzZFdVZ2NHRnBjaUJoYzNOdlkybGhkR1ZrSUhkcGRHZ2dkR2hsSUhOMWNIQnNhV1ZrSUd0bGVTQnBaaUJwZENCbGVHbHpkSE5jY2x4dUlDQWdJQ0FxSUNCdmNpQjBhR1VnY0dGcGNpQmhjM052WTJsaGRHVmtJSGRwZEdnZ2RHaGxJRzVsZUhRZ2JHOTNaWElnY0dGcGNpQnZkR2hsY25kcGMyVXVJRWxtSUhSb1pYSmxJR2x6SUc1dlhISmNiaUFnSUNBZ0tpQWdibVY0ZENCc2IzZGxjaUJ3WVdseUxDQjFibVJsWm1sdVpXUWdhWE1nY21WMGRYSnVaV1F1WEhKY2JpQWdJQ0FnS2lCQWNHRnlZVzBnYTJWNUlGUm9aU0JyWlhrZ2RHOGdjMlZoY21Ob0lHWnZjaTVjY2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0J5WlhWelpXUkJjbkpoZVNCUGNIUnBiMjVoYkNCaGNuSmhlU0IxYzJWa0lISmxjR1ZoZEdWa2JIa2dkRzhnYzNSdmNtVWdhMlY1TFhaaGJIVmxJSEJoYVhKekxDQjBiMXh5WEc0Z0lDQWdJQ29nSUNBZ0lDQWdJR0YyYjJsa0lHTnlaV0YwYVc1bklHRWdibVYzSUdGeWNtRjVJR1ZoWTJnZ2RHbHRaU0I1YjNVZ1kyRnNiQ0IwYUdseklHMWxkR2h2WkM1Y2NseHVJQ0FnSUNBcUlDb3ZYSEpjYmlBZ0lDQkNWSEpsWlM1d2NtOTBiM1I1Y0dVdVoyVjBVR0ZwY2s5eVRtVjRkRWhwWjJobGNpQTlJR1oxYm1OMGFXOXVJQ2hyWlhrc0lISmxkWE5sWkVGeWNtRjVLU0I3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM0p2YjNRdVoyVjBVR0ZwY2s5eVRtVjRkRWhwWjJobGNpaHJaWGtzSUhSb2FYTXVYMk52YlhCaGNtVXNJSFJ5ZFdVc0lISmxkWE5sWkVGeWNtRjVJSHg4SUZ0ZEtUdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQXZLaW9nUldScGRITWdkR2hsSUhaaGJIVmxJR0Z6YzI5amFXRjBaV1FnZDJsMGFDQmhJR3RsZVNCcGJpQjBhR1VnZEhKbFpTd2dhV1lnYVhRZ1lXeHlaV0ZrZVNCbGVHbHpkSE11WEhKY2JpQWdJQ0FnS2lCQWNtVjBkWEp1Y3lCMGNuVmxJR2xtSUhSb1pTQnJaWGtnWlhocGMzUmxaQ3dnWm1Gc2MyVWdhV1lnYm05MExseHlYRzRnSUNBZ0tpOWNjbHh1SUNBZ0lFSlVjbVZsTG5CeWIzUnZkSGx3WlM1amFHRnVaMlZKWmxCeVpYTmxiblFnUFNCbWRXNWpkR2x2YmlBb2EyVjVMQ0IyWVd4MVpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtVmthWFJTWVc1blpTaHJaWGtzSUd0bGVTd2dkSEoxWlN3Z1puVnVZM1JwYjI0Z0tHc3NJSFlwSUhzZ2NtVjBkWEp1SUNoN0lIWmhiSFZsT2lCMllXeDFaU0I5S1RzZ2ZTa2dJVDA5SURBN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ0x5b3FYSEpjYmlBZ0lDQWdLaUJDZFdsc1pITWdZVzRnWVhKeVlYa2diMllnY0dGcGNuTWdabkp2YlNCMGFHVWdjM0JsWTJsbWFXVmtJSEpoYm1kbElHOW1JR3RsZVhNc0lITnZjblJsWkNCaWVTQnJaWGt1WEhKY2JpQWdJQ0FnS2lCRllXTm9JSEpsZEhWeWJtVmtJSEJoYVhJZ2FYTWdZV3h6YnlCaGJpQmhjbkpoZVRvZ2NHRnBjbHN3WFNCcGN5QjBhR1VnYTJWNUxDQndZV2x5V3pGZElHbHpJSFJvWlNCMllXeDFaUzVjY2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0JzYjNjZ1ZHaGxJR1pwY25OMElHdGxlU0JwYmlCMGFHVWdZWEp5WVhrZ2QybHNiQ0JpWlNCbmNtVmhkR1Z5SUhSb1lXNGdiM0lnWlhGMVlXd2dkRzhnWUd4dmQyQXVYSEpjYmlBZ0lDQWdLaUJBY0dGeVlXMGdhR2xuYUNCVWFHbHpJRzFsZEdodlpDQnlaWFIxY201eklIZG9aVzRnWVNCclpYa2diR0Z5WjJWeUlIUm9ZVzRnZEdocGN5QnBjeUJ5WldGamFHVmtMbHh5WEc0Z0lDQWdJQ29nUUhCaGNtRnRJR2x1WTJ4MVpHVklhV2RvSUVsbUlIUm9aU0JnYUdsbmFHQWdhMlY1SUdseklIQnlaWE5sYm5Rc0lHbDBjeUJ3WVdseUlIZHBiR3dnWW1VZ2FXNWpiSFZrWldSY2NseHVJQ0FnSUNBcUlDQWdJQ0FnSUNCcGJpQjBhR1VnYjNWMGNIVjBJR2xtSUdGdVpDQnZibXg1SUdsbUlIUm9hWE1nY0dGeVlXMWxkR1Z5SUdseklIUnlkV1V1SUU1dmRHVTZJR2xtSUhSb1pWeHlYRzRnSUNBZ0lDb2dJQ0FnSUNBZ0lHQnNiM2RnSUd0bGVTQnBjeUJ3Y21WelpXNTBMQ0JwZENCcGN5QmhiSGRoZVhNZ2FXNWpiSFZrWldRZ2FXNGdkR2hsSUc5MWRIQjFkQzVjY2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0J0WVhoTVpXNW5kR2dnVEdWdVozUm9JR3hwYldsMExpQm5aWFJTWVc1blpTQjNhV3hzSUhOMGIzQWdjMk5oYm01cGJtY2dkR2hsSUhSeVpXVWdkMmhsYmx4eVhHNGdJQ0FnSUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHVWdZWEp5WVhrZ2NtVmhZMmhsY3lCMGFHbHpJSE5wZW1VdVhISmNiaUFnSUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTI5dGNIVjBZWFJwYjI1aGJDQmpiMjF3YkdWNGFYUjVPaUJQS0hKbGMzVnNkQzVzWlc1bmRHZ2dLeUJzYjJjZ2MybDZaU2xjY2x4dUlDQWdJQ0FxTDF4eVhHNGdJQ0FnUWxSeVpXVXVjSEp2ZEc5MGVYQmxMbWRsZEZKaGJtZGxJRDBnWm5WdVkzUnBiMjRnS0d4dmR5d2dhR2xuYUN3Z2FXNWpiSFZrWlVocFoyZ3NJRzFoZUV4bGJtZDBhQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lHbG1JQ2h0WVhoTVpXNW5kR2dnUFQwOUlIWnZhV1FnTUNrZ2V5QnRZWGhNWlc1bmRHZ2dQU0F3ZUROR1JrWkdSa1k3SUgxY2NseHVJQ0FnSUNBZ0lDQjJZWElnY21WemRXeDBjeUE5SUZ0ZE8xeHlYRzRnSUNBZ0lDQWdJSFJvYVhNdVgzSnZiM1F1Wm05eVVtRnVaMlVvYkc5M0xDQm9hV2RvTENCcGJtTnNkV1JsU0dsbmFDd2dabUZzYzJVc0lIUm9hWE1zSURBc0lHWjFibU4wYVc5dUlDaHJMQ0IyS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGMzVnNkSE11Y0hWemFDaGJheXdnZGwwcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBjeTVzWlc1bmRHZ2dQaUJ0WVhoTVpXNW5kR2dnUHlCQ2NtVmhheUE2SUhWdVpHVm1hVzVsWkR0Y2NseHVJQ0FnSUNBZ0lDQjlLVHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBjenRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0F2S2lvZ1FXUmtjeUJoYkd3Z2NHRnBjbk1nWm5KdmJTQmhJR3hwYzNRZ2IyWWdhMlY1TFhaaGJIVmxJSEJoYVhKekxseHlYRzRnSUNBZ0lDb2dRSEJoY21GdElIQmhhWEp6SUZCaGFYSnpJSFJ2SUdGa1pDQjBieUIwYUdseklIUnlaV1V1SUVsbUlIUm9aWEpsSUdGeVpTQmtkWEJzYVdOaGRHVWdhMlY1Y3l4Y2NseHVJQ0FnSUNBcUlDQWdJQ0FnSUNCc1lYUmxjaUJ3WVdseWN5QmpkWEp5Wlc1MGJIa2diM1psY25keWFYUmxJR1ZoY214cFpYSWdiMjVsY3lBb1pTNW5MaUJiV3pBc01WMHNXekFzTjExZFhISmNiaUFnSUNBZ0tpQWdJQ0FnSUNBZ1lYTnpiMk5wWVhSbGN5QXdJSGRwZEdnZ055NHBYSEpjYmlBZ0lDQWdLaUJBY0dGeVlXMGdiM1psY25keWFYUmxJRmRvWlhSb1pYSWdkRzhnYjNabGNuZHlhWFJsSUhCaGFYSnpJSFJvWVhRZ1lXeHlaV0ZrZVNCbGVHbHpkQ0FvYVdZZ1ptRnNjMlVzWEhKY2JpQWdJQ0FnS2lBZ0lDQWdJQ0FnY0dGcGNuTmJhVjBnYVhNZ2FXZHViM0psWkNCM2FHVnVJSFJvWlNCclpYa2djR0ZwY25OYmFWMWJNRjBnWVd4eVpXRmtlU0JsZUdsemRITXVLVnh5WEc0Z0lDQWdJQ29nUUhKbGRIVnlibk1nVkdobElHNTFiV0psY2lCdlppQndZV2x5Y3lCaFpHUmxaQ0IwYnlCMGFHVWdZMjlzYkdWamRHbHZiaTVjY2x4dUlDQWdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkRiMjF3ZFhSaGRHbHZibUZzSUdOdmJYQnNaWGhwZEhrNklFOG9jR0ZwY25NdWJHVnVaM1JvSUNvZ2JHOW5LSE5wZW1VZ0t5QndZV2x5Y3k1c1pXNW5kR2dwS1Z4eVhHNGdJQ0FnSUNvdlhISmNiaUFnSUNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1YzJWMFVHRnBjbk1nUFNCbWRXNWpkR2x2YmlBb2NHRnBjbk1zSUc5MlpYSjNjbWwwWlNrZ2UxeHlYRzRnSUNBZ0lDQWdJSFpoY2lCaFpHUmxaQ0E5SURBN1hISmNiaUFnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0J3WVdseWN5NXNaVzVuZEdnN0lHa3JLeWxjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXVjMlYwS0hCaGFYSnpXMmxkV3pCZExDQndZV2x5YzF0cFhWc3hYU3dnYjNabGNuZHlhWFJsS1NsY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRmtaR1ZrS3lzN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHRmtaR1ZrTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUM4cUtseHlYRzRnSUNBZ0lDb2dVMk5oYm5NZ2RHaGxJSE53WldOcFptbGxaQ0J5WVc1blpTQnZaaUJyWlhsekxDQnBiaUJoYzJObGJtUnBibWNnYjNKa1pYSWdZbmtnYTJWNUxseHlYRzRnSUNBZ0lDb2dUbTkwWlRvZ2RHaGxJR05oYkd4aVlXTnJJR0J2YmtadmRXNWtZQ0J0ZFhOMElHNXZkQ0JwYm5ObGNuUWdiM0lnY21WdGIzWmxJR2wwWlcxeklHbHVJSFJvWlZ4eVhHNGdJQ0FnSUNvZ1kyOXNiR1ZqZEdsdmJpNGdSRzlwYm1jZ2MyOGdiV0Y1SUdOaGRYTmxJR2x1WTI5eWNtVmpkQ0JrWVhSaElIUnZJR0psSUhObGJuUWdkRzhnZEdobFhISmNiaUFnSUNBZ0tpQmpZV3hzWW1GamF5QmhablJsY25kaGNtUXVYSEpjYmlBZ0lDQWdLaUJBY0dGeVlXMGdiRzkzSUZSb1pTQm1hWEp6ZENCclpYa2djMk5oYm01bFpDQjNhV3hzSUdKbElHZHlaV0YwWlhJZ2RHaGhiaUJ2Y2lCbGNYVmhiQ0IwYnlCZ2JHOTNZQzVjY2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0JvYVdkb0lGTmpZVzV1YVc1bklITjBiM0J6SUhkb1pXNGdZU0JyWlhrZ2JHRnlaMlZ5SUhSb1lXNGdkR2hwY3lCcGN5QnlaV0ZqYUdWa0xseHlYRzRnSUNBZ0lDb2dRSEJoY21GdElHbHVZMngxWkdWSWFXZG9JRWxtSUhSb1pTQmdhR2xuYUdBZ2EyVjVJR2x6SUhCeVpYTmxiblFzSUdCdmJrWnZkVzVrWUNCcGN5QmpZV3hzWldRZ1ptOXlYSEpjYmlBZ0lDQWdLaUFnSUNBZ0lDQWdkR2hoZENCbWFXNWhiQ0J3WVdseUlHbG1JR0Z1WkNCdmJteDVJR2xtSUhSb2FYTWdjR0Z5WVcxbGRHVnlJR2x6SUhSeWRXVXVYSEpjYmlBZ0lDQWdLaUJBY0dGeVlXMGdiMjVHYjNWdVpDQkJJR1oxYm1OMGFXOXVJSFJvWVhRZ2FYTWdZMkZzYkdWa0lHWnZjaUJsWVdOb0lHdGxlUzEyWVd4MVpTQndZV2x5TGlCVWFHbHpYSEpjYmlBZ0lDQWdLaUFnSUNBZ0lDQWdablZ1WTNScGIyNGdZMkZ1SUhKbGRIVnliaUI3WW5KbFlXczZVbjBnZEc4Z2MzUnZjQ0JsWVhKc2VTQjNhWFJvSUhKbGMzVnNkQ0JTTGx4eVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUdsdWFYUnBZV3hEYjNWdWRHVnlJRWx1YVhScFlXd2dkR2hwY21RZ1lYSm5kVzFsYm5RZ2IyWWdiMjVHYjNWdVpDNGdWR2hwY3lCMllXeDFaVnh5WEc0Z0lDQWdJQ29nSUNBZ0lDQWdJR2x1WTNKbFlYTmxjeUJpZVNCdmJtVWdaV0ZqYUNCMGFXMWxJR0J2YmtadmRXNWtZQ0JwY3lCallXeHNaV1F1SUVSbFptRjFiSFE2SURCY2NseHVJQ0FnSUNBcUlFQnlaWFIxY201eklGUm9aU0J1ZFcxaVpYSWdiMllnZG1Gc2RXVnpJR1p2ZFc1a0xDQnZjaUJTSUdsbUlIUm9aU0JqWVd4c1ltRmpheUJ5WlhSMWNtNWxaRnh5WEc0Z0lDQWdJQ29nSUNBZ0lDQWdJR0I3WW5KbFlXczZVbjFnSUhSdklITjBiM0FnWldGeWJIa3VYSEpjYmlBZ0lDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1EyOXRjSFYwWVhScGIyNWhiQ0JqYjIxd2JHVjRhWFI1T2lCUEtHNTFiV0psY2lCdlppQnBkR1Z0Y3lCelkyRnVibVZrSUNzZ2JHOW5JSE5wZW1VcFhISmNiaUFnSUNBZ0tpOWNjbHh1SUNBZ0lFSlVjbVZsTG5CeWIzUnZkSGx3WlM1bWIzSlNZVzVuWlNBOUlHWjFibU4wYVc5dUlDaHNiM2NzSUdocFoyZ3NJR2x1WTJ4MVpHVklhV2RvTENCdmJrWnZkVzVrTENCcGJtbDBhV0ZzUTI5MWJuUmxjaWtnZTF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJ5SUQwZ2RHaHBjeTVmY205dmRDNW1iM0pTWVc1blpTaHNiM2NzSUdocFoyZ3NJR2x1WTJ4MVpHVklhV2RvTENCbVlXeHpaU3dnZEdocGN5d2dhVzVwZEdsaGJFTnZkVzUwWlhJZ2ZId2dNQ3dnYjI1R2IzVnVaQ2s3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSNWNHVnZaaUJ5SUQwOVBTQmNJbTUxYldKbGNsd2lJRDhnY2lBNklISXVZbkpsWVdzN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ0x5b3FYSEpjYmlBZ0lDQWdLaUJUWTJGdWN5QmhibVFnY0c5MFpXNTBhV0ZzYkhrZ2JXOWthV1pwWlhNZ2RtRnNkV1Z6SUdadmNpQmhJSE4xWW5ObGNYVmxibU5sSUc5bUlHdGxlWE11WEhKY2JpQWdJQ0FnS2lCT2IzUmxPaUIwYUdVZ1kyRnNiR0poWTJzZ1lHOXVSbTkxYm1SZ0lITm9iM1ZzWkNCcFpHVmhiR3g1SUdKbElHRWdjSFZ5WlNCbWRXNWpkR2x2Ymk1Y2NseHVJQ0FnSUNBcUlDQWdVM0JsWTJacFkyRnNiSGtzSUdsMElHMTFjM1FnYm05MElHbHVjMlZ5ZENCcGRHVnRjeXdnWTJGc2JDQmpiRzl1WlNncExDQnZjaUJqYUdGdVoyVmNjbHh1SUNBZ0lDQXFJQ0FnZEdobElHTnZiR3hsWTNScGIyNGdaWGhqWlhCMElIWnBZU0J5WlhSMWNtNGdkbUZzZFdVN0lHOTFkQzF2WmkxaVlXNWtJR1ZrYVhScGJtY2diV0Y1WEhKY2JpQWdJQ0FnS2lBZ0lHTmhkWE5sSUdGdUlHVjRZMlZ3ZEdsdmJpQnZjaUJ0WVhrZ1kyRjFjMlVnYVc1amIzSnlaV04wSUdSaGRHRWdkRzhnWW1VZ2MyVnVkQ0IwYjF4eVhHNGdJQ0FnSUNvZ0lDQjBhR1VnWTJGc2JHSmhZMnNnS0dSMWNHeHBZMkYwWlNCdmNpQnRhWE56WldRZ2FYUmxiWE1wTGlCSmRDQnRkWE4wSUc1dmRDQmpZWFZ6WlNCaFhISmNiaUFnSUNBZ0tpQWdJR05zYjI1bEtDa2diMllnZEdobElHTnZiR3hsWTNScGIyNHNJRzkwYUdWeWQybHpaU0IwYUdVZ1kyeHZibVVnWTI5MWJHUWdZbVVnYlc5a2FXWnBaV1JjY2x4dUlDQWdJQ0FxSUNBZ1lua2dZMmhoYm1kbGN5QnlaWEYxWlhOMFpXUWdZbmtnZEdobElHTmhiR3hpWVdOckxseHlYRzRnSUNBZ0lDb2dRSEJoY21GdElHeHZkeUJVYUdVZ1ptbHljM1FnYTJWNUlITmpZVzV1WldRZ2QybHNiQ0JpWlNCbmNtVmhkR1Z5SUhSb1lXNGdiM0lnWlhGMVlXd2dkRzhnWUd4dmQyQXVYSEpjYmlBZ0lDQWdLaUJBY0dGeVlXMGdhR2xuYUNCVFkyRnVibWx1WnlCemRHOXdjeUIzYUdWdUlHRWdhMlY1SUd4aGNtZGxjaUIwYUdGdUlIUm9hWE1nYVhNZ2NtVmhZMmhsWkM1Y2NseHVJQ0FnSUNBcUlFQndZWEpoYlNCcGJtTnNkV1JsU0dsbmFDQkpaaUIwYUdVZ1lHaHBaMmhnSUd0bGVTQnBjeUJ3Y21WelpXNTBMQ0JnYjI1R2IzVnVaR0FnYVhNZ1kyRnNiR1ZrSUdadmNseHlYRzRnSUNBZ0lDb2dJQ0FnSUNBZ0lIUm9ZWFFnWm1sdVlXd2djR0ZwY2lCcFppQmhibVFnYjI1c2VTQnBaaUIwYUdseklIQmhjbUZ0WlhSbGNpQnBjeUIwY25WbExseHlYRzRnSUNBZ0lDb2dRSEJoY21GdElHOXVSbTkxYm1RZ1FTQm1kVzVqZEdsdmJpQjBhR0YwSUdseklHTmhiR3hsWkNCbWIzSWdaV0ZqYUNCclpYa3RkbUZzZFdVZ2NHRnBjaTRnVkdocGMxeHlYRzRnSUNBZ0lDb2dJQ0FnSUNBZ0lHWjFibU4wYVc5dUlHTmhiaUJ5WlhSMWNtNGdZSHQyWVd4MVpUcDJmV0FnZEc4Z1kyaGhibWRsSUhSb1pTQjJZV3gxWlNCaGMzTnZZMmxoZEdWa1hISmNiaUFnSUNBZ0tpQWdJQ0FnSUNBZ2QybDBhQ0IwYUdVZ1kzVnljbVZ1ZENCclpYa3NJR0I3WkdWc1pYUmxPblJ5ZFdWOVlDQjBieUJrWld4bGRHVWdkR2hsSUdOMWNuSmxiblFnY0dGcGNpeGNjbHh1SUNBZ0lDQXFJQ0FnSUNBZ0lDQmdlMkp5WldGck9sSjlZQ0IwYnlCemRHOXdJR1ZoY214NUlIZHBkR2dnY21WemRXeDBJRklzSUc5eUlHbDBJR05oYmlCeVpYUjFjbTRnYm05MGFHbHVaMXh5WEc0Z0lDQWdJQ29nSUNBZ0lDQWdJQ2gxYm1SbFptbHVaV1FnYjNJZ2UzMHBJSFJ2SUdOaGRYTmxJRzV2SUdWbVptVmpkQ0JoYm1RZ1kyOXVkR2x1ZFdVZ2FYUmxjbUYwYVc1bkxseHlYRzRnSUNBZ0lDb2dJQ0FnSUNBZ0lHQjdZbkpsWVdzNlVuMWdJR05oYmlCaVpTQmpiMjFpYVc1bFpDQjNhWFJvSUc5dVpTQnZaaUIwYUdVZ2IzUm9aWElnZEhkdklHTnZiVzFoYm1SekxseHlYRzRnSUNBZ0lDb2dJQ0FnSUNBZ0lGUm9aU0IwYUdseVpDQmhjbWQxYldWdWRDQmdZMjkxYm5SbGNtQWdhWE1nZEdobElHNTFiV0psY2lCdlppQnBkR1Z0Y3lCcGRHVnlZWFJsWkZ4eVhHNGdJQ0FnSUNvZ0lDQWdJQ0FnSUhCeVpYWnBiM1Z6YkhrN0lHbDBJR1Z4ZFdGc2N5QXdJSGRvWlc0Z1lHOXVSbTkxYm1SZ0lHbHpJR05oYkd4bFpDQjBhR1VnWm1seWMzUWdkR2x0WlM1Y2NseHVJQ0FnSUNBcUlFQnlaWFIxY201eklGUm9aU0J1ZFcxaVpYSWdiMllnZG1Gc2RXVnpJSE5qWVc1dVpXUXNJRzl5SUZJZ2FXWWdkR2hsSUdOaGJHeGlZV05ySUhKbGRIVnlibVZrWEhKY2JpQWdJQ0FnS2lBZ0lDQWdJQ0FnWUh0aWNtVmhhenBTZldBZ2RHOGdjM1J2Y0NCbFlYSnNlUzVjY2x4dUlDQWdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJseHlYRzRnSUNBZ0lDb2dJQ0JEYjIxd2RYUmhkR2x2Ym1Gc0lHTnZiWEJzWlhocGRIazZJRThvYm5WdFltVnlJRzltSUdsMFpXMXpJSE5qWVc1dVpXUWdLeUJzYjJjZ2MybDZaU2xjY2x4dUlDQWdJQ0FxSUNBZ1RtOTBaVG9nYVdZZ2RHaGxJSFJ5WldVZ2FHRnpJR0psWlc0Z1kyeHZibVZrSUhkcGRHZ2dZMnh2Ym1Vb0tTd2dZVzU1SUhOb1lYSmxaRnh5WEc0Z0lDQWdJQ29nSUNCdWIyUmxjeUJoY21VZ1kyOXdhV1ZrSUdKbFptOXlaU0JnYjI1R2IzVnVaR0FnYVhNZ1kyRnNiR1ZrTGlCVWFHbHpJSFJoYTJWeklFOG9iaWtnZEdsdFpWeHlYRzRnSUNBZ0lDb2dJQ0IzYUdWeVpTQnVJR2x6SUhCeWIzQnZjblJwYjI1aGJDQjBieUIwYUdVZ1lXMXZkVzUwSUc5bUlITm9ZWEpsWkNCa1lYUmhJSE5qWVc1dVpXUXVYSEpjYmlBZ0lDQWdLaTljY2x4dUlDQWdJRUpVY21WbExuQnliM1J2ZEhsd1pTNWxaR2wwVW1GdVoyVWdQU0JtZFc1amRHbHZiaUFvYkc5M0xDQm9hV2RvTENCcGJtTnNkV1JsU0dsbmFDd2diMjVHYjNWdVpDd2dhVzVwZEdsaGJFTnZkVzUwWlhJcElIdGNjbHh1SUNBZ0lDQWdJQ0IyWVhJZ2NtOXZkQ0E5SUhSb2FYTXVYM0p2YjNRN1hISmNiaUFnSUNBZ0lDQWdhV1lnS0hKdmIzUXVhWE5UYUdGeVpXUXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WDNKdmIzUWdQU0J5YjI5MElEMGdjbTl2ZEM1amJHOXVaU2dwTzF4eVhHNGdJQ0FnSUNBZ0lIUnllU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCeUlEMGdjbTl2ZEM1bWIzSlNZVzVuWlNoc2IzY3NJR2hwWjJnc0lHbHVZMngxWkdWSWFXZG9MQ0IwY25WbExDQjBhR2x6TENCcGJtbDBhV0ZzUTI5MWJuUmxjaUI4ZkNBd0xDQnZia1p2ZFc1a0tUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSNWNHVnZaaUJ5SUQwOVBTQmNJbTUxYldKbGNsd2lJRDhnY2lBNklISXVZbkpsWVdzN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUdacGJtRnNiSGtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2FYTlRhR0Z5WldRZ1BTQjJiMmxrSURBN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhkb2FXeGxJQ2h5YjI5MExtdGxlWE11YkdWdVozUm9JRHc5SURFZ0ppWWdJWEp2YjNRdWFYTk1aV0ZtS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBjMU5vWVhKbFpDQjhmQ0FvYVhOVGFHRnlaV1FnUFNCeWIyOTBMbWx6VTJoaGNtVmtLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM0p2YjNRZ1BTQnliMjkwSUQwZ2NtOXZkQzVyWlhsekxteGxibWQwYUNBOVBUMGdNQ0EvSUVWdGNIUjVUR1ZoWmlBNlhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY205dmRDNWphR2xzWkhKbGJsc3dYVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJKWmlCaGJua2dZVzVqWlhOMGIzSWdiMllnZEdobElHNWxkeUJ5YjI5MElIZGhjeUJ6YUdGeVpXUXNJSFJvWlNCdVpYY2djbTl2ZENCdGRYTjBJR0ZzYzI4Z1ltVWdjMmhoY21Wa1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBjMU5vWVhKbFpDa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY205dmRDNXBjMU5vWVhKbFpDQTlJSFJ5ZFdVN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xSUZOaGJXVWdZWE1nWUdWa2FYUlNZVzVuWldBZ1pYaGpaWEIwSUhSb1lYUWdkR2hsSUdOaGJHeGlZV05ySUdseklHTmhiR3hsWkNCbWIzSWdZV3hzSUhCaGFYSnpMaUFxTDF4eVhHNGdJQ0FnUWxSeVpXVXVjSEp2ZEc5MGVYQmxMbVZrYVhSQmJHd2dQU0JtZFc1amRHbHZiaUFvYjI1R2IzVnVaQ3dnYVc1cGRHbGhiRU52ZFc1MFpYSXBJSHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWxaR2wwVW1GdVoyVW9kR2hwY3k1dGFXNUxaWGtvS1N3Z2RHaHBjeTV0WVhoTFpYa29LU3dnZEhKMVpTd2diMjVHYjNWdVpDd2dhVzVwZEdsaGJFTnZkVzUwWlhJcE8xeHlYRzRnSUNBZ2ZUdGNjbHh1SUNBZ0lDOHFLbHh5WEc0Z0lDQWdJQ29nVW1WdGIzWmxjeUJoSUhKaGJtZGxJRzltSUd0bGVTMTJZV3gxWlNCd1lXbHljeUJtY205dElIUm9aU0JDS3lCMGNtVmxMbHh5WEc0Z0lDQWdJQ29nUUhCaGNtRnRJR3h2ZHlCVWFHVWdabWx5YzNRZ2EyVjVJSE5qWVc1dVpXUWdkMmxzYkNCaVpTQm5jbVZoZEdWeUlIUm9ZVzRnYjNJZ1pYRjFZV3dnZEc4Z1lHeHZkMkF1WEhKY2JpQWdJQ0FnS2lCQWNHRnlZVzBnYUdsbmFDQlRZMkZ1Ym1sdVp5QnpkRzl3Y3lCM2FHVnVJR0VnYTJWNUlHeGhjbWRsY2lCMGFHRnVJSFJvYVhNZ2FYTWdjbVZoWTJobFpDNWNjbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQnBibU5zZFdSbFNHbG5hQ0JUY0dWamFXWnBaWE1nZDJobGRHaGxjaUIwYUdVZ1lHaHBaMmhnSUd0bGVTd2dhV1lnY0hKbGMyVnVkQ3dnYVhNZ1pHVnNaWFJsWkM1Y2NseHVJQ0FnSUNBcUlFQnlaWFIxY201eklGUm9aU0J1ZFcxaVpYSWdiMllnYTJWNUxYWmhiSFZsSUhCaGFYSnpJSFJvWVhRZ2QyVnlaU0JrWld4bGRHVmtMbHh5WEc0Z0lDQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnZiWEIxZEdGMGFXOXVZV3dnWTI5dGNHeGxlR2wwZVRvZ1R5aHNiMmNnYzJsNlpTQXJJRzUxYldKbGNpQnZaaUJwZEdWdGN5QmtaV3hsZEdWa0tWeHlYRzRnSUNBZ0lDb3ZYSEpjYmlBZ0lDQkNWSEpsWlM1d2NtOTBiM1I1Y0dVdVpHVnNaWFJsVW1GdVoyVWdQU0JtZFc1amRHbHZiaUFvYkc5M0xDQm9hV2RvTENCcGJtTnNkV1JsU0dsbmFDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtVmthWFJTWVc1blpTaHNiM2NzSUdocFoyZ3NJR2x1WTJ4MVpHVklhV2RvTENCRVpXeGxkR1ZTWVc1blpTazdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeW9xSUVSbGJHVjBaWE1nWVNCelpYSnBaWE1nYjJZZ2EyVjVjeUJtY205dElIUm9aU0JqYjJ4c1pXTjBhVzl1TGlBcUwxeHlYRzRnSUNBZ1FsUnlaV1V1Y0hKdmRHOTBlWEJsTG1SbGJHVjBaVXRsZVhNZ1BTQm1kVzVqZEdsdmJpQW9hMlY1Y3lrZ2UxeHlYRzRnSUNBZ0lDQWdJR1p2Y2lBb2RtRnlJR2tnUFNBd0xDQnlJRDBnTURzZ2FTQThJR3RsZVhNdWJHVnVaM1JvT3lCcEt5c3BYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtUmxiR1YwWlNoclpYbHpXMmxkS1NsY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISXJLenRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY2p0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29RbFJ5WldVdWNISnZkRzkwZVhCbExDQmNJbWhsYVdkb2RGd2lMQ0I3WEhKY2JpQWdJQ0FnSUNBZ0x5b3FJRWRsZEhNZ2RHaGxJR2hsYVdkb2RDQnZaaUIwYUdVZ2RISmxaVG9nZEdobElHNTFiV0psY2lCdlppQnBiblJsY201aGJDQnViMlJsY3lCaVpYUjNaV1Z1SUhSb1pWeHlYRzRnSUNBZ0lDQWdJQ0FxSUNCQ1ZISmxaU0J2WW1wbFkzUWdZVzVrSUdsMGN5QnNaV0ZtSUc1dlpHVnpJQ2g2WlhKdklHbG1JSFJvWlhKbElHRnlaU0J1YnlCcGJuUmxjbTVoYkNCdWIyUmxjeWt1SUNvdlhISmNiaUFnSUNBZ0lDQWdaMlYwT2lCbWRXNWpkR2x2YmlBb0tTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ1YjJSbElEMGdkR2hwY3k1ZmNtOXZkRHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdobGFXZG9kQ0E5SUMweE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCM2FHbHNaU0FvYm05a1pTa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYUdWcFoyaDBLeXM3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdWIyUmxJRDBnYm05a1pTNXBjMHhsWVdZZ1B5QjFibVJsWm1sdVpXUWdPaUJ1YjJSbExtTm9hV3hrY21WdVd6QmRPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCb1pXbG5hSFE3WEhKY2JpQWdJQ0FnSUNBZ2ZTeGNjbHh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCbVlXeHpaU3hjY2x4dUlDQWdJQ0FnSUNCamIyNW1hV2QxY21GaWJHVTZJSFJ5ZFdWY2NseHVJQ0FnSUgwcE8xeHlYRzRnSUNBZ0x5b3FJRTFoYTJWeklIUm9aU0J2WW1wbFkzUWdjbVZoWkMxdmJteDVJSFJ2SUdWdWMzVnlaU0JwZENCcGN5QnViM1FnWVdOamFXUmxiblJoYkd4NUlHMXZaR2xtYVdWa0xseHlYRzRnSUNBZ0lDb2dJRVp5WldWNmFXNW5JR1J2WlhNZ2JtOTBJR2hoZG1VZ2RHOGdZbVVnY0dWeWJXRnVaVzUwT3lCMWJtWnlaV1Y2WlNncElISmxkbVZ5YzJWeklIUm9aU0JsWm1abFkzUXVYSEpjYmlBZ0lDQWdLaUFnVkdocGN5QnBjeUJoWTJOdmJYQnNhWE5vWldRZ1lua2djbVZ3YkdGamFXNW5JRzExZEdGMGIzSWdablZ1WTNScGIyNXpJSGRwZEdnZ1lTQm1kVzVqZEdsdmJseHlYRzRnSUNBZ0lDb2dJSFJvWVhRZ2RHaHliM2R6SUdGdUlFVnljbTl5TGlCRGIyMXdZWEpsWkNCMGJ5QjFjMmx1WnlCaElIQnliM0JsY25SNUlDaGxMbWN1SUhSb2FYTXVhWE5HY205NlpXNHBYSEpjYmlBZ0lDQWdLaUFnZEdocGN5QnBiWEJzWlcxbGJuUmhkR2x2YmlCbmFYWmxjeUJpWlhSMFpYSWdjR1Z5Wm05eWJXRnVZMlVnYVc0Z2JtOXVMV1p5YjNwbGJpQkNWSEpsWlhNdVhISmNiaUFnSUNBZ0tpOWNjbHh1SUNBZ0lFSlVjbVZsTG5CeWIzUnZkSGx3WlM1bWNtVmxlbVVnUFNCbWRXNWpkR2x2YmlBb0tTQjdYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlIUWdQU0IwYUdsek8xeHlYRzRnSUNBZ0lDQWdJQzh2SUU1dmRHVTZJR0ZzYkNCdmRHaGxjaUJ0ZFhSaGRHOXljeUIxYkhScGJXRjBaV3g1SUdOaGJHd2djMlYwS0NrZ2IzSWdaV1JwZEZKaGJtZGxLQ2tnWEhKY2JpQWdJQ0FnSUNBZ0x5OGdJQ0FnSUNBZ2MyOGdkMlVnWkc5dUozUWdibVZsWkNCMGJ5QnZkbVZ5Y21sa1pTQjBhRzl6WlNCdmRHaGxjbk11WEhKY2JpQWdJQ0FnSUNBZ2RDNWpiR1ZoY2lBOUlIUXVjMlYwSUQwZ2RDNWxaR2wwVW1GdVoyVWdQU0JtZFc1amRHbHZiaUFvS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWtGMGRHVnRjSFJsWkNCMGJ5QnRiMlJwWm5rZ1lTQm1jbTk2Wlc0Z1FsUnlaV1ZjSWlrN1hISmNiaUFnSUNBZ0lDQWdmVHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0F2S2lvZ1JXNXpkWEpsY3lCdGRYUmhkR2x2Ym5NZ1lYSmxJR0ZzYkc5M1pXUXNJSEpsZG1WeWMybHVaeUIwYUdVZ1pXWm1aV04wSUc5bUlHWnlaV1Y2WlNncExpQXFMMXh5WEc0Z0lDQWdRbFJ5WldVdWNISnZkRzkwZVhCbExuVnVabkpsWlhwbElEMGdablZ1WTNScGIyNGdLQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDOHZJRUIwY3kxcFoyNXZjbVVnWENKVWFHVWdiM0JsY21GdVpDQnZaaUJoSUNka1pXeGxkR1VuSUc5d1pYSmhkRzl5SUcxMWMzUWdZbVVnYjNCMGFXOXVZV3d1WENKY2NseHVJQ0FnSUNBZ0lDQXZMeUFnSUNBZ0lDQWdJQ0FnSUNoM2NtOXVaem9nWkdWc1pYUmxJR1J2WlhNZ2JtOTBJR0ZtWm1WamRDQjBhR1VnY0hKdmRHOTBlWEJsTGlsY2NseHVJQ0FnSUNBZ0lDQmtaV3hsZEdVZ2RHaHBjeTVqYkdWaGNqdGNjbHh1SUNBZ0lDQWdJQ0F2THlCQWRITXRhV2R1YjNKbFhISmNiaUFnSUNBZ0lDQWdaR1ZzWlhSbElIUm9hWE11YzJWME8xeHlYRzRnSUNBZ0lDQWdJQzh2SUVCMGN5MXBaMjV2Y21WY2NseHVJQ0FnSUNBZ0lDQmtaV3hsZEdVZ2RHaHBjeTVsWkdsMFVtRnVaMlU3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtFSlVjbVZsTG5CeWIzUnZkSGx3WlN3Z1hDSnBjMFp5YjNwbGJsd2lMQ0I3WEhKY2JpQWdJQ0FnSUNBZ0x5b3FJRkpsZEhWeWJuTWdkSEoxWlNCcFppQjBhR1VnZEhKbFpTQmhjSEJsWVhKeklIUnZJR0psSUdaeWIzcGxiaTRnS2k5Y2NseHVJQ0FnSUNBZ0lDQm5aWFE2SUdaMWJtTjBhVzl1SUNncElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb0oyVmthWFJTWVc1blpTY3BPMXh5WEc0Z0lDQWdJQ0FnSUgwc1hISmNiaUFnSUNBZ0lDQWdaVzUxYldWeVlXSnNaVG9nWm1Gc2MyVXNYSEpjYmlBZ0lDQWdJQ0FnWTI5dVptbG5kWEpoWW14bE9pQjBjblZsWEhKY2JpQWdJQ0I5S1R0Y2NseHVJQ0FnSUM4cUtpQlRZMkZ1Y3lCMGFHVWdkSEpsWlNCbWIzSWdjMmxuYm5NZ2IyWWdjMlZ5YVc5MWN5QmlkV2R6SUNobExtY3VJSFJvYVhNdWMybDZaU0JrYjJWemJpZDBJRzFoZEdOb1hISmNiaUFnSUNBZ0tpQWdiblZ0WW1WeUlHOW1JR1ZzWlcxbGJuUnpMQ0JwYm5SbGNtNWhiQ0J1YjJSbGN5QnViM1FnWTJGamFHbHVaeUJ0WVhnZ1pXeGxiV1Z1ZENCd2NtOXdaWEpzZVM0dUxpbGNjbHh1SUNBZ0lDQXFJQ0JEYjIxd2RYUmhkR2x2Ym1Gc0lHTnZiWEJzWlhocGRIazZJRThvYm5WdFltVnlJRzltSUc1dlpHVnpLU3dnYVM1bExpQlBLSE5wZW1VcExpQlVhR2x6SUcxbGRHaHZaRnh5WEc0Z0lDQWdJQ29nSUhOcmFYQnpJSFJvWlNCdGIzTjBJR1Y0Y0dWdWMybDJaU0IwWlhOMElDMGdkMmhsZEdobGNpQmhiR3dnYTJWNWN5QmhjbVVnYzI5eWRHVmtJQzBnWW5WMElHbDBYSEpjYmlBZ0lDQWdLaUFnWkc5bGN5QmphR1ZqYXlCMGFHRjBJRzFoZUV0bGVTZ3BJRzltSUhSb1pTQmphR2xzWkhKbGJpQnZaaUJwYm5SbGNtNWhiQ0J1YjJSbGN5QmhjbVVnYzI5eWRHVmtMaUFxTDF4eVhHNGdJQ0FnUWxSeVpXVXVjSEp2ZEc5MGVYQmxMbU5vWldOclZtRnNhV1FnUFNCbWRXNWpkR2x2YmlBb0tTQjdYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlITnBlbVVnUFNCMGFHbHpMbDl5YjI5MExtTm9aV05yVm1Gc2FXUW9NQ3dnZEdocGN5d2dNQ2s3WEhKY2JpQWdJQ0FnSUNBZ1kyaGxZMnNvYzJsNlpTQTlQVDBnZEdocGN5NXphWHBsTENCY0luTnBlbVVnYldsemJXRjBZMmc2SUdOdmRXNTBaV1FnWENJc0lITnBlbVVzSUZ3aVluVjBJSE4wYjNKbFpGd2lMQ0IwYUdsekxuTnBlbVVwTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUhKbGRIVnliaUJDVkhKbFpUdGNjbHh1ZlNncEtUdGNjbHh1Wlhod2IzSjBjeTVrWldaaGRXeDBJRDBnUWxSeVpXVTdYSEpjYmk4cUtpQkJJRlI1Y0dWVFkzSnBjSFFnYUdWc2NHVnlJR1oxYm1OMGFXOXVJSFJvWVhRZ2MybHRjR3g1SUhKbGRIVnlibk1nYVhSeklHRnlaM1Z0Wlc1MExDQjBlWEJsWkNCaGMxeHlYRzRnS2lBZ1lFbFRiM0owWldSVFpYUThTejVnSUdsbUlIUm9aU0JDVkhKbFpTQnBiWEJzWlcxbGJuUnpJR2wwTENCaGN5QnBkQ0JrYjJWeklHbG1JR0JXSUdWNGRHVnVaSE1nZFc1a1pXWnBibVZrWUM1Y2NseHVJQ29nSUVsbUlHQldZQ0JqWVc1dWIzUWdZbVVnWUhWdVpHVm1hVzVsWkdBc0lHbDBJSEpsZEhWeWJuTWdZSFZ1YTI1dmQyNWdJR2x1YzNSbFlXUXVJRTl5SUdGMElHeGxZWE4wTENCMGFHRjBYSEpjYmlBcUlDQjNZWE1nZEdobElHbHVkR1Z1ZEdsdmJpd2dZblYwSUZSNWNHVlRZM0pwY0hRZ2FYTWdZV04wYVc1bklIZGxhWEprSUdGdVpDQnRZWGtnY21WMGRYSnVJR0JKVTI5eWRHVmtVMlYwUEVzK1lGeHlYRzRnS2lBZ1pYWmxiaUJwWmlCZ1ZtQWdZMkZ1SjNRZ1ltVWdZSFZ1WkdWbWFXNWxaR0FnS0dScGMyTjFjM05wYjI0NklHSjBjbVZsTFhSNWNHVnpZM0pwY0hRZ2FYTnpkV1VnSXpFMEtTQXFMMXh5WEc1bWRXNWpkR2x2YmlCaGMxTmxkQ2hpZEhKbFpTa2dlMXh5WEc0Z0lDQWdjbVYwZFhKdUlHSjBjbVZsTzF4eVhHNTlYSEpjYm1WNGNHOXlkSE11WVhOVFpYUWdQU0JoYzFObGREdGNjbHh1YVdZZ0tGTjViV0p2YkNBbUppQlRlVzFpYjJ3dWFYUmxjbUYwYjNJcElDOHZJR2wwWlhKaGRHOXlJR2x6SUdWeGRXbDJZV3hsYm5RZ2RHOGdaVzUwY21sbGN5Z3BYSEpjYmlBZ0lDQkNWSEpsWlM1d2NtOTBiM1I1Y0dWYlUzbHRZbTlzTG1sMFpYSmhkRzl5WFNBOUlFSlVjbVZsTG5CeWIzUnZkSGx3WlM1bGJuUnlhV1Z6TzF4eVhHNUNWSEpsWlM1d2NtOTBiM1I1Y0dVdWQyaGxjbVVnUFNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1Wm1sc2RHVnlPMXh5WEc1Q1ZISmxaUzV3Y205MGIzUjVjR1V1YzJWMFVtRnVaMlVnUFNCQ1ZISmxaUzV3Y205MGIzUjVjR1V1YzJWMFVHRnBjbk03WEhKY2JrSlVjbVZsTG5CeWIzUnZkSGx3WlM1aFpHUWdQU0JDVkhKbFpTNXdjbTkwYjNSNWNHVXVjMlYwT3lBdkx5Qm1iM0lnWTI5dGNHRjBhV0pwYkdsMGVTQjNhWFJvSUVsVFpYUlRhVzVyUEVzK1hISmNibVoxYm1OMGFXOXVJR2wwWlhKaGRHOXlLRzVsZUhRcElIdGNjbHh1SUNBZ0lHbG1JQ2h1WlhoMElEMDlQU0IyYjJsa0lEQXBJSHNnYm1WNGRDQTlJQ2htZFc1amRHbHZiaUFvS1NCN0lISmxkSFZ5YmlBb2V5QmtiMjVsT2lCMGNuVmxMQ0IyWVd4MVpUb2dkVzVrWldacGJtVmtJSDBwT3lCOUtUc2dmVnh5WEc0Z0lDQWdkbUZ5SUhKbGMzVnNkQ0E5SUhzZ2JtVjRkRG9nYm1WNGRDQjlPMXh5WEc0Z0lDQWdhV1lnS0ZONWJXSnZiQ0FtSmlCVGVXMWliMnd1YVhSbGNtRjBiM0lwWEhKY2JpQWdJQ0FnSUNBZ2NtVnpkV3gwVzFONWJXSnZiQzVwZEdWeVlYUnZjbDBnUFNCbWRXNWpkR2x2YmlBb0tTQjdJSEpsZEhWeWJpQjBhR2x6T3lCOU8xeHlYRzRnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjY2x4dWZWeHlYRzR2S2lvZ1RHVmhaaUJ1YjJSbElDOGdZbUZ6WlNCamJHRnpjeTRnS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3ZYSEpjYm5aaGNpQkNUbTlrWlNBOUlDOHFLaUJBWTJ4aGMzTWdLaThnS0daMWJtTjBhVzl1SUNncElIdGNjbHh1SUNBZ0lHWjFibU4wYVc5dUlFSk9iMlJsS0d0bGVYTXNJSFpoYkhWbGN5a2dlMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHJaWGx6SUQwOVBTQjJiMmxrSURBcElIc2dhMlY1Y3lBOUlGdGRPeUI5WEhKY2JpQWdJQ0FnSUNBZ2RHaHBjeTVyWlhseklEMGdhMlY1Y3p0Y2NseHVJQ0FnSUNBZ0lDQjBhR2x6TG5aaGJIVmxjeUE5SUhaaGJIVmxjeUI4ZkNCMWJtUmxabFpoYkhNN1hISmNiaUFnSUNBZ0lDQWdkR2hwY3k1cGMxTm9ZWEpsWkNBOUlIVnVaR1ZtYVc1bFpEdGNjbHh1SUNBZ0lIMWNjbHh1SUNBZ0lFOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2hDVG05a1pTNXdjbTkwYjNSNWNHVXNJRndpYVhOTVpXRm1YQ0lzSUh0Y2NseHVJQ0FnSUNBZ0lDQm5aWFE2SUdaMWJtTjBhVzl1SUNncElIc2djbVYwZFhKdUlIUm9hWE11WTJocGJHUnlaVzRnUFQwOUlIVnVaR1ZtYVc1bFpEc2dmU3hjY2x4dUlDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2NseHVJQ0FnSUNBZ0lDQmpiMjVtYVdkMWNtRmliR1U2SUhSeWRXVmNjbHh1SUNBZ0lIMHBPMXh5WEc0Z0lDQWdMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2WEhKY2JpQWdJQ0F2THlCVGFHRnlaV1FnYldWMGFHOWtjeUF2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2NseHVJQ0FnSUVKT2IyUmxMbkJ5YjNSdmRIbHdaUzV0WVhoTFpYa2dQU0JtZFc1amRHbHZiaUFvS1NCN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YTJWNWMxdDBhR2x6TG10bGVYTXViR1Z1WjNSb0lDMGdNVjA3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnTHk4Z1NXWWdhMlY1SUc1dmRDQm1iM1Z1WkN3Z2NtVjBkWEp1Y3lCcFhtWmhhV3hZYjNJZ2QyaGxjbVVnYVNCcGN5QjBhR1VnYVc1elpYSjBhVzl1SUdsdVpHVjRMbHh5WEc0Z0lDQWdMeThnUTJGc2JHVnljeUIwYUdGMElHUnZiaWQwSUdOaGNtVWdkMmhsZEdobGNpQjBhR1Z5WlNCM1lYTWdZU0J0WVhSamFDQjNhV3hzSUhObGRDQm1ZV2xzV0c5eVBUQXVYSEpjYmlBZ0lDQkNUbTlrWlM1d2NtOTBiM1I1Y0dVdWFXNWtaWGhQWmlBOUlHWjFibU4wYVc5dUlDaHJaWGtzSUdaaGFXeFliM0lzSUdOdGNDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnJaWGx6SUQwZ2RHaHBjeTVyWlhsek8xeHlYRzRnSUNBZ0lDQWdJSFpoY2lCc2J5QTlJREFzSUdocElEMGdhMlY1Y3k1c1pXNW5kR2dzSUcxcFpDQTlJR2hwSUQ0K0lERTdYSEpjYmlBZ0lDQWdJQ0FnZDJocGJHVWdLR3h2SUR3Z2FHa3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdNZ1BTQmpiWEFvYTJWNWMxdHRhV1JkTENCclpYa3BPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWXlBOElEQXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYnlBOUlHMXBaQ0FySURFN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdhV1lnS0dNZ1BpQXdLU0F2THlCclpYa2dQQ0JyWlhselcyMXBaRjFjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdocElEMGdiV2xrTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hqSUQwOVBTQXdLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzFwWkR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCaklHbHpJRTVoVGlCdmNpQnZkR2hsY25kcGMyVWdhVzUyWVd4cFpGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0d0bGVTQTlQVDBnYTJWNUtTQXZMeUJoZENCc1pXRnpkQ0IwYUdVZ2MyVmhjbU5vSUd0bGVTQnBjeUJ1YjNRZ1RtRk9YSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUd0bGVYTXViR1Z1WjNSb08xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGNJa0pVY21WbE9pQk9ZVTRnZDJGeklIVnpaV1FnWVhNZ1lTQnJaWGxjSWlrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYldsa0lEMGdLR3h2SUNzZ2FHa3BJRDQrSURFN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ0YVdRZ1hpQm1ZV2xzV0c5eU8xeHlYRzRnSUNBZ0lDQWdJQzh2SUZWdWNtOXNiR1ZrSUhabGNuTnBiMjQ2SUdKbGJtTm9iV0Z5YTNNZ2MyaHZkeUJ6WVcxbElITndaV1ZrTENCdWIzUWdkMjl5ZEdnZ2RYTnBibWRjY2x4dUlDQWdJQ0FnSUNBdktuWmhjaUJwSUQwZ01Td2dZem9nYm5WdFltVnlJRDBnTUN3Z2MzVnRJRDBnTUR0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvYTJWNWN5NXNaVzVuZEdnZ1BqMGdOQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdhU0E5SURNN1hISmNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2EyVjVjeTVzWlc1bmRHZ2dQajBnT0NrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCcElEMGdOenRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0d0bGVYTXViR1Z1WjNSb0lENDlJREUyS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2FTQTlJREUxTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHJaWGx6TG14bGJtZDBhQ0ErUFNBek1pa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVNBOUlETXhPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHdGxlWE11YkdWdVozUm9JRDQ5SURZMEtTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdrZ1BTQXhNamM3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHa2dLejBnS0dNZ1BTQnBJRHdnYTJWNWN5NXNaVzVuZEdnZ1B5QmpiWEFvYTJWNWMxdHBYU3dnYTJWNUtTQTZJREVwSUR3Z01DQS9JRFkwSURvZ0xUWTBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRXMGdLejBnWXp0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhU0FyUFNBb1l5QTlJR2tnUENCclpYbHpMbXhsYm1kMGFDQS9JR050Y0NoclpYbHpXMmxkTENCclpYa3BJRG9nTVNrZ1BDQXdJRDhnTXpJZ09pQXRNekk3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjFiU0FyUFNCak8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVNBclBTQW9ZeUE5SUdrZ1BDQnJaWGx6TG14bGJtZDBhQ0EvSUdOdGNDaHJaWGx6VzJsZExDQnJaWGtwSURvZ01Ta2dQQ0F3SUQ4Z01UWWdPaUF0TVRZN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkVzBnS3owZ1l6dGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdhU0FyUFNBb1l5QTlJR2tnUENCclpYbHpMbXhsYm1kMGFDQS9JR050Y0NoclpYbHpXMmxkTENCclpYa3BJRG9nTVNrZ1BDQXdJRDhnT0NBNklDMDRPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE4xYlNBclBTQmpPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHa2dLejBnS0dNZ1BTQnBJRHdnYTJWNWN5NXNaVzVuZEdnZ1B5QmpiWEFvYTJWNWMxdHBYU3dnYTJWNUtTQTZJREVwSUR3Z01DQS9JRFFnT2lBdE5EdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2MzVnRJQ3M5SUdNN1hISmNiaUFnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQnBJQ3M5SUNoaklEMGdhU0E4SUd0bGVYTXViR1Z1WjNSb0lEOGdZMjF3S0d0bGVYTmJhVjBzSUd0bGVTa2dPaUF4S1NBOElEQWdQeUF5SURvZ0xUSTdYSEpjYmlBZ0lDQWdJQ0FnSUNCemRXMGdLejBnWXp0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnYVNBclBTQW9ZeUE5SUdrZ1BDQnJaWGx6TG14bGJtZDBhQ0EvSUdOdGNDaHJaWGx6VzJsZExDQnJaWGtwSURvZ01Ta2dQQ0F3SUQ4Z01TQTZJQzB4TzF4eVhHNGdJQ0FnSUNBZ0lHTWdQU0JwSUR3Z2EyVjVjeTVzWlc1bmRHZ2dQeUJqYlhBb2EyVjVjMXRwWFN3Z2EyVjVLU0E2SURFN1hISmNiaUFnSUNBZ0lDQWdjM1Z0SUNzOUlHTTdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tHTWdQQ0F3S1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FySzJrN1hISmNiaUFnSUNBZ0lDQWdJQ0JqSUQwZ2FTQThJR3RsZVhNdWJHVnVaM1JvSUQ4Z1kyMXdLR3RsZVhOYmFWMHNJR3RsZVNrZ09pQXhPMXh5WEc0Z0lDQWdJQ0FnSUNBZ2MzVnRJQ3M5SUdNN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHpkVzBnSVQwOUlITjFiU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0d0bGVTQTlQVDBnYTJWNUtTQXZMeUJoZENCc1pXRnpkQ0IwYUdVZ2MyVmhjbU5vSUd0bGVTQnBjeUJ1YjNRZ1RtRk9YSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCclpYbHpMbXhsYm1kMGFDQmVJR1poYVd4WWIzSTdYSEpjYmlBZ0lDQWdJQ0FnSUNCbGJITmxYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lrSlVjbVZsT2lCT1lVNGdkMkZ6SUhWelpXUWdZWE1nWVNCclpYbGNJaWs3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmpJRDA5UFNBd0lEOGdhU0E2SUdrZ1hpQm1ZV2xzV0c5eU95b3ZYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2NseHVJQ0FnSUM4dklFeGxZV1lnVG05a1pUb2diV2x6WXlBdkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZYSEpjYmlBZ0lDQkNUbTlrWlM1d2NtOTBiM1I1Y0dVdWJXbHVTMlY1SUQwZ1puVnVZM1JwYjI0Z0tDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtdGxlWE5iTUYwN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ1FrNXZaR1V1Y0hKdmRHOTBlWEJsTG0xcGJsQmhhWElnUFNCbWRXNWpkR2x2YmlBb2NtVjFjMlZrUVhKeVlYa3BJSHRjY2x4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1clpYbHpMbXhsYm1kMGFDQTlQVDBnTUNsY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjY2x4dUlDQWdJQ0FnSUNCeVpYVnpaV1JCY25KaGVWc3dYU0E5SUhSb2FYTXVhMlY1YzFzd1hUdGNjbHh1SUNBZ0lDQWdJQ0J5WlhWelpXUkJjbkpoZVZzeFhTQTlJSFJvYVhNdWRtRnNkV1Z6V3pCZE8xeHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWFZ6WldSQmNuSmhlVHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0JDVG05a1pTNXdjbTkwYjNSNWNHVXViV0Y0VUdGcGNpQTlJR1oxYm1OMGFXOXVJQ2h5WlhWelpXUkJjbkpoZVNrZ2UxeHlYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbXRsZVhNdWJHVnVaM1JvSUQwOVBTQXdLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RXNWtaV1pwYm1Wa08xeHlYRzRnSUNBZ0lDQWdJSFpoY2lCc1lYTjBTVzVrWlhnZ1BTQjBhR2x6TG10bGVYTXViR1Z1WjNSb0lDMGdNVHRjY2x4dUlDQWdJQ0FnSUNCeVpYVnpaV1JCY25KaGVWc3dYU0E5SUhSb2FYTXVhMlY1YzF0c1lYTjBTVzVrWlhoZE8xeHlYRzRnSUNBZ0lDQWdJSEpsZFhObFpFRnljbUY1V3pGZElEMGdkR2hwY3k1MllXeDFaWE5iYkdGemRFbHVaR1Y0WFR0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVjFjMlZrUVhKeVlYazdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdRazV2WkdVdWNISnZkRzkwZVhCbExtTnNiMjVsSUQwZ1puVnVZM1JwYjI0Z0tDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQjJJRDBnZEdocGN5NTJZV3gxWlhNN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJDVG05a1pTaDBhR2x6TG10bGVYTXVjMnhwWTJVb01Da3NJSFlnUFQwOUlIVnVaR1ZtVm1Gc2N5QS9JSFlnT2lCMkxuTnNhV05sS0RBcEtUdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQkNUbTlrWlM1d2NtOTBiM1I1Y0dVdVozSmxaV1I1UTJ4dmJtVWdQU0JtZFc1amRHbHZiaUFvWm05eVkyVXBJSHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NXBjMU5vWVhKbFpDQW1KaUFoWm05eVkyVWdQeUIwYUdseklEb2dkR2hwY3k1amJHOXVaU2dwTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUVKT2IyUmxMbkJ5YjNSdmRIbHdaUzVuWlhRZ1BTQm1kVzVqZEdsdmJpQW9hMlY1TENCa1pXWmhkV3gwVm1Gc2RXVXNJSFJ5WldVcElIdGNjbHh1SUNBZ0lDQWdJQ0IyWVhJZ2FTQTlJSFJvYVhNdWFXNWtaWGhQWmloclpYa3NJQzB4TENCMGNtVmxMbDlqYjIxd1lYSmxLVHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYVNBOElEQWdQeUJrWldaaGRXeDBWbUZzZFdVZ09pQjBhR2x6TG5aaGJIVmxjMXRwWFR0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNCQ1RtOWtaUzV3Y205MGIzUjVjR1V1WjJWMFVHRnBjazl5VG1WNGRFeHZkMlZ5SUQwZ1puVnVZM1JwYjI0Z0tHdGxlU3dnWTI5dGNHRnlaU3dnYVc1amJIVnphWFpsTENCeVpYVnpaV1JCY25KaGVTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnBJRDBnZEdocGN5NXBibVJsZUU5bUtHdGxlU3dnTFRFc0lHTnZiWEJoY21VcE8xeHlYRzRnSUNBZ0lDQWdJSFpoY2lCcGJtUmxlRTl5VEc5M1pYSWdQU0JwSUR3Z01DQS9JSDVwSUMwZ01TQTZJQ2hwYm1Oc2RYTnBkbVVnUHlCcElEb2dhU0F0SURFcE8xeHlYRzRnSUNBZ0lDQWdJR2xtSUNocGJtUmxlRTl5VEc5M1pYSWdQajBnTUNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYVnpaV1JCY25KaGVWc3dYU0E5SUhSb2FYTXVhMlY1YzF0cGJtUmxlRTl5VEc5M1pYSmRPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFZ6WldSQmNuSmhlVnN4WFNBOUlIUm9hWE11ZG1Gc2RXVnpXMmx1WkdWNFQzSk1iM2RsY2wwN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhWelpXUkJjbkpoZVR0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0JDVG05a1pTNXdjbTkwYjNSNWNHVXVaMlYwVUdGcGNrOXlUbVY0ZEVocFoyaGxjaUE5SUdaMWJtTjBhVzl1SUNoclpYa3NJR052YlhCaGNtVXNJR2x1WTJ4MWMybDJaU3dnY21WMWMyVmtRWEp5WVhrcElIdGNjbHh1SUNBZ0lDQWdJQ0IyWVhJZ2FTQTlJSFJvYVhNdWFXNWtaWGhQWmloclpYa3NJQzB4TENCamIyMXdZWEpsS1R0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnYVc1a1pYaFBja3h2ZDJWeUlEMGdhU0E4SURBZ1B5QithU0E2SUNocGJtTnNkWE5wZG1VZ1B5QnBJRG9nYVNBcklERXBPMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnJaWGx6SUQwZ2RHaHBjeTVyWlhsek8xeHlYRzRnSUNBZ0lDQWdJR2xtSUNocGJtUmxlRTl5VEc5M1pYSWdQQ0JyWlhsekxteGxibWQwYUNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYVnpaV1JCY25KaGVWc3dYU0E5SUd0bGVYTmJhVzVrWlhoUGNreHZkMlZ5WFR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMWMyVmtRWEp5WVhsYk1WMGdQU0IwYUdsekxuWmhiSFZsYzF0cGJtUmxlRTl5VEc5M1pYSmRPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVjFjMlZrUVhKeVlYazdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWJtUmxabWx1WldRN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ1FrNXZaR1V1Y0hKdmRHOTBlWEJsTG1Ob1pXTnJWbUZzYVdRZ1BTQm1kVzVqZEdsdmJpQW9aR1Z3ZEdnc0lIUnlaV1VzSUdKaGMyVkpibVJsZUNrZ2UxeHlYRzRnSUNBZ0lDQWdJSFpoY2lCclRDQTlJSFJvYVhNdWEyVjVjeTVzWlc1bmRHZ3NJSFpNSUQwZ2RHaHBjeTUyWVd4MVpYTXViR1Z1WjNSb08xeHlYRzRnSUNBZ0lDQWdJR05vWldOcktIUm9hWE11ZG1Gc2RXVnpJRDA5UFNCMWJtUmxabFpoYkhNZ1B5QnJUQ0E4UFNCMlRDQTZJR3RNSUQwOVBTQjJUQ3dnWENKclpYbHpMM1poYkhWbGN5QnNaVzVuZEdnZ2JXbHpiV0YwWTJnNklHUmxjSFJvWENJc0lHUmxjSFJvTENCY0luZHBkR2dnYkdWdVozUm9jMXdpTENCclRDd2dka3dzSUZ3aVlXNWtJR0poYzJWSmJtUmxlRndpTENCaVlYTmxTVzVrWlhncE8xeHlYRzRnSUNBZ0lDQWdJQzh2SUU1dmRHVTZJSGRsSUdSdmJpZDBJR05vWldOcklHWnZjaUJjSW01dlpHVWdkRzl2SUhOdFlXeHNYQ0lnWW1WallYVnpaU0J6YjIxbGRHbHRaWE1nWVNCdWIyUmxYSEpjYmlBZ0lDQWdJQ0FnTHk4Z1kyRnVJR3hsWjJsMGFXMWhkR1ZzZVNCb1lYWmxJSE5wZW1VZ01TNGdWR2hwY3lCdlkyTjFjbk1nYVdZZ2RHaGxjbVVnYVhNZ1lTQmlZWFJqYUNCY2NseHVJQ0FnSUNBZ0lDQXZMeUJrWld4bGRHbHZiaXdnYkdWaGRtbHVaeUJoSUc1dlpHVWdiMllnYzJsNlpTQXhMQ0JoYm1RZ2RHaGxJSE5wWW14cGJtZHpJR0Z5WlNCbWRXeHNJSE52WEhKY2JpQWdJQ0FnSUNBZ0x5OGdhWFFnWTJGdUozUWdZbVVnYldWeVoyVmtJSGRwZEdnZ1lXUnFZV05sYm5RZ2JtOWtaWE11SUVodmQyVjJaWElzSUhSb1pTQndZWEpsYm5RZ2QybHNiRnh5WEc0Z0lDQWdJQ0FnSUM4dklIWmxjbWxtZVNCMGFHRjBJSFJvWlNCaGRtVnlZV2RsSUc1dlpHVWdjMmw2WlNCcGN5QmhkQ0JzWldGemRDQm9ZV3htSUc5bUlIUm9aU0J0WVhocGJYVnRMbHh5WEc0Z0lDQWdJQ0FnSUdOb1pXTnJLR1JsY0hSb0lEMDlJREFnZkh3Z2Ewd2dQaUF3TENCY0ltVnRjSFI1SUd4bFlXWWdZWFFnWkdWd2RHaGNJaXdnWkdWd2RHZ3NJRndpWVc1a0lHSmhjMlZKYm1SbGVGd2lMQ0JpWVhObFNXNWtaWGdwTzF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCclREdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQXZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2TDF4eVhHNGdJQ0FnTHk4Z1RHVmhaaUJPYjJSbE9pQnpaWFFnSmlCdWIyUmxJSE53YkdsMGRHbHVaeUF2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OWNjbHh1SUNBZ0lFSk9iMlJsTG5CeWIzUnZkSGx3WlM1elpYUWdQU0JtZFc1amRHbHZiaUFvYTJWNUxDQjJZV3gxWlN3Z2IzWmxjbmR5YVhSbExDQjBjbVZsS1NCN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUdrZ1BTQjBhR2x6TG1sdVpHVjRUMllvYTJWNUxDQXRNU3dnZEhKbFpTNWZZMjl0Y0dGeVpTazdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tHa2dQQ0F3S1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklHdGxlU0JrYjJWeklHNXZkQ0JsZUdsemRDQjVaWFJjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdhU0E5SUg1cE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCMGNtVmxMbDl6YVhwbEt5czdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtdGxlWE11YkdWdVozUm9JRHdnZEhKbFpTNWZiV0Y0VG05a1pWTnBlbVVwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx1YzJWeWRFbHVUR1ZoWmlocExDQnJaWGtzSUhaaGJIVmxMQ0IwY21WbEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklGUm9hWE1nYkdWaFppQnViMlJsSUdseklHWjFiR3dnWVc1a0lHMTFjM1FnYzNCc2FYUmNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdVpYZFNhV2RvZEZOcFlteHBibWNnUFNCMGFHbHpMbk53YkdsMFQyWm1VbWxuYUhSVGFXUmxLQ2tzSUhSaGNtZGxkQ0E5SUhSb2FYTTdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FTQStJSFJvYVhNdWEyVjVjeTVzWlc1bmRHZ3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBJQzA5SUhSb2FYTXVhMlY1Y3k1c1pXNW5kR2c3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR0Z5WjJWMElEMGdibVYzVW1sbmFIUlRhV0pzYVc1bk8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdGeVoyVjBMbWx1YzJWeWRFbHVUR1ZoWmlocExDQnJaWGtzSUhaaGJIVmxMQ0IwY21WbEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGRTYVdkb2RGTnBZbXhwYm1jN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnWld4elpTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRXRsZVNCaGJISmxZV1I1SUdWNGFYTjBjMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYjNabGNuZHlhWFJsSUNFOVBTQm1ZV3h6WlNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0haaGJIVmxJQ0U5UFNCMWJtUmxabWx1WldRcFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXlaV2xtZVZaaGJIVmxjeWdwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdkWE4xWVd4c2VTQjBhR2x6SUdseklHRWdibTh0YjNBc0lHSjFkQ0J6YjIxbElIVnpaWEp6SUcxaGVTQjNhWE5vSUhSdklHVmthWFFnZEdobElHdGxlVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXJaWGx6VzJsZElEMGdhMlY1TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTUyWVd4MVpYTmJhVjBnUFNCMllXeDFaVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZUdGNjbHh1SUNBZ0lFSk9iMlJsTG5CeWIzUnZkSGx3WlM1eVpXbG1lVlpoYkhWbGN5QTlJR1oxYm1OMGFXOXVJQ2dwSUh0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NTJZV3gxWlhNZ1BUMDlJSFZ1WkdWbVZtRnNjeWxjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11ZG1Gc2RXVnpJRDBnZEdocGN5NTJZV3gxWlhNdWMyeHBZMlVvTUN3Z2RHaHBjeTVyWlhsekxteGxibWQwYUNrN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11ZG1Gc2RXVnpPMXh5WEc0Z0lDQWdmVHRjY2x4dUlDQWdJRUpPYjJSbExuQnliM1J2ZEhsd1pTNXBibk5sY25SSmJreGxZV1lnUFNCbWRXNWpkR2x2YmlBb2FTd2dhMlY1TENCMllXeDFaU3dnZEhKbFpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhMlY1Y3k1emNHeHBZMlVvYVN3Z01Dd2dhMlY1S1R0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NTJZV3gxWlhNZ1BUMDlJSFZ1WkdWbVZtRnNjeWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IzYUdsc1pTQW9kVzVrWldaV1lXeHpMbXhsYm1kMGFDQThJSFJ5WldVdVgyMWhlRTV2WkdWVGFYcGxLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZFc1a1pXWldZV3h6TG5CMWMyZ29kVzVrWldacGJtVmtLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0haaGJIVmxJRDA5UFNCMWJtUmxabWx1WldRcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1MllXeDFaWE1nUFNCMWJtUmxabFpoYkhNdWMyeHBZMlVvTUN3Z2RHaHBjeTVyWlhsekxteGxibWQwYUNBdElERXBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lIUm9hWE11ZG1Gc2RXVnpMbk53YkdsalpTaHBMQ0F3TENCMllXeDFaU2s3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYSEpjYmlBZ0lDQjlPMXh5WEc0Z0lDQWdRazV2WkdVdWNISnZkRzkwZVhCbExuUmhhMlZHY205dFVtbG5hSFFnUFNCbWRXNWpkR2x2YmlBb2NtaHpLU0I3WEhKY2JpQWdJQ0FnSUNBZ0x5OGdVbVZ0YVc1a1pYSTZJSEJoY21WdWRDQnViMlJsSUcxMWMzUWdkWEJrWVhSbElHbDBjeUJqYjNCNUlHOW1JR3RsZVNCbWIzSWdkR2hwY3lCdWIyUmxYSEpjYmlBZ0lDQWdJQ0FnTHk4Z1lYTnpaWEowT2lCdVpXbDBhR1Z5SUc1dlpHVWdhWE1nYzJoaGNtVmtYSEpjYmlBZ0lDQWdJQ0FnTHk4Z1lYTnpaWEowSUhKb2N5NXJaWGx6TG14bGJtZDBhQ0ErSUNodFlYaE9iMlJsVTJsNlpTOHlJQ1ltSUhSb2FYTXVhMlY1Y3k1c1pXNW5kR2c4YldGNFRtOWtaVk5wZW1VcFhISmNiaUFnSUNBZ0lDQWdkbUZ5SUhZZ1BTQjBhR2x6TG5aaGJIVmxjenRjY2x4dUlDQWdJQ0FnSUNCcFppQW9jbWh6TG5aaGJIVmxjeUE5UFQwZ2RXNWtaV1pXWVd4ektTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gySUNFOVBTQjFibVJsWmxaaGJITXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyTG5CMWMyZ29kVzVrWldacGJtVmtLVHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdaV3h6WlNCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhZZ1BTQjBhR2x6TG5KbGFXWjVWbUZzZFdWektDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIWXVjSFZ6YUNoeWFITXVkbUZzZFdWekxuTm9hV1owS0NrcE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNCMGFHbHpMbXRsZVhNdWNIVnphQ2h5YUhNdWEyVjVjeTV6YUdsbWRDZ3BLVHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0JDVG05a1pTNXdjbTkwYjNSNWNHVXVkR0ZyWlVaeWIyMU1aV1owSUQwZ1puVnVZM1JwYjI0Z0tHeG9jeWtnZTF4eVhHNGdJQ0FnSUNBZ0lDOHZJRkpsYldsdVpHVnlPaUJ3WVhKbGJuUWdibTlrWlNCdGRYTjBJSFZ3WkdGMFpTQnBkSE1nWTI5d2VTQnZaaUJyWlhrZ1ptOXlJSFJvYVhNZ2JtOWtaVnh5WEc0Z0lDQWdJQ0FnSUM4dklHRnpjMlZ5ZERvZ2JtVnBkR2hsY2lCdWIyUmxJR2x6SUhOb1lYSmxaRnh5WEc0Z0lDQWdJQ0FnSUM4dklHRnpjMlZ5ZENCeWFITXVhMlY1Y3k1c1pXNW5kR2dnUGlBb2JXRjRUbTlrWlZOcGVtVXZNaUFtSmlCMGFHbHpMbXRsZVhNdWJHVnVaM1JvUEcxaGVFNXZaR1ZUYVhwbEtWeHlYRzRnSUNBZ0lDQWdJSFpoY2lCMklEMGdkR2hwY3k1MllXeDFaWE03WEhKY2JpQWdJQ0FnSUNBZ2FXWWdLR3hvY3k1MllXeDFaWE1nUFQwOUlIVnVaR1ZtVm1Gc2N5a2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZGlBaFBUMGdkVzVrWldaV1lXeHpLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZGk1MWJuTm9hV1owS0hWdVpHVm1hVzVsWkNrN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJJRDBnZEdocGN5NXlaV2xtZVZaaGJIVmxjeWdwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IyTG5WdWMyaHBablFvYkdoekxuWmhiSFZsY3k1d2IzQW9LU2s3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJSFJvYVhNdWEyVjVjeTUxYm5Ob2FXWjBLR3hvY3k1clpYbHpMbkJ2Y0NncEtUdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQkNUbTlrWlM1d2NtOTBiM1I1Y0dVdWMzQnNhWFJQWm1aU2FXZG9kRk5wWkdVZ1BTQm1kVzVqZEdsdmJpQW9LU0I3WEhKY2JpQWdJQ0FnSUNBZ0x5OGdVbVZ0YVc1a1pYSTZJSEJoY21WdWRDQnViMlJsSUcxMWMzUWdkWEJrWVhSbElHbDBjeUJqYjNCNUlHOW1JR3RsZVNCbWIzSWdkR2hwY3lCdWIyUmxYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlHaGhiR1lnUFNCMGFHbHpMbXRsZVhNdWJHVnVaM1JvSUQ0K0lERXNJR3RsZVhNZ1BTQjBhR2x6TG10bGVYTXVjM0JzYVdObEtHaGhiR1lwTzF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUIyWVd4MVpYTWdQU0IwYUdsekxuWmhiSFZsY3lBOVBUMGdkVzVrWldaV1lXeHpJRDhnZFc1a1pXWldZV3h6SURvZ2RHaHBjeTUyWVd4MVpYTXVjM0JzYVdObEtHaGhiR1lwTzF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dRazV2WkdVb2EyVjVjeXdnZG1Gc2RXVnpLVHRjY2x4dUlDQWdJSDA3WEhKY2JpQWdJQ0F2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkwxeHlYRzRnSUNBZ0x5OGdUR1ZoWmlCT2IyUmxPaUJ6WTJGdWJtbHVaeUFtSUdSbGJHVjBhVzl1Y3lBdkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTljY2x4dUlDQWdJRUpPYjJSbExuQnliM1J2ZEhsd1pTNW1iM0pTWVc1blpTQTlJR1oxYm1OMGFXOXVJQ2hzYjNjc0lHaHBaMmdzSUdsdVkyeDFaR1ZJYVdkb0xDQmxaR2wwVFc5a1pTd2dkSEpsWlN3Z1kyOTFiblFzSUc5dVJtOTFibVFwSUh0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnWTIxd0lEMGdkSEpsWlM1ZlkyOXRjR0Z5WlR0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnYVV4dmR5d2dhVWhwWjJnN1hISmNiaUFnSUNBZ0lDQWdhV1lnS0docFoyZ2dQVDA5SUd4dmR5a2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdsdVkyeDFaR1ZJYVdkb0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHTnZkVzUwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwU0dsbmFDQTlJQ2hwVEc5M0lEMGdkR2hwY3k1cGJtUmxlRTltS0d4dmR5d2dMVEVzSUdOdGNDa3BJQ3NnTVR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbE1iM2NnUENBd0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHTnZkVzUwTzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0JsYkhObElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2FVeHZkeUE5SUhSb2FYTXVhVzVrWlhoUFppaHNiM2NzSURBc0lHTnRjQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR2xJYVdkb0lEMGdkR2hwY3k1cGJtUmxlRTltS0docFoyZ3NJQzB4TENCamJYQXBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVVocFoyZ2dQQ0F3S1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FVaHBaMmdnUFNCK2FVaHBaMmc3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2x1WTJ4MVpHVklhV2RvSUQwOVBTQjBjblZsS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FVaHBaMmdyS3p0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlHdGxlWE1nUFNCMGFHbHpMbXRsZVhNc0lIWmhiSFZsY3lBOUlIUm9hWE11ZG1Gc2RXVnpPMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHZia1p2ZFc1a0lDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlHbE1iM2M3SUdrZ1BDQnBTR2xuYURzZ2FTc3JLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdhMlY1SUQwZ2EyVjVjMXRwWFR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ5WlhOMWJIUWdQU0J2YmtadmRXNWtLR3RsZVN3Z2RtRnNkV1Z6VzJsZExDQmpiM1Z1ZENzcktUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTjFiSFFnSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hsWkdsMFRXOWtaU0E5UFQwZ2RISjFaU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hMlY1SUNFOVBTQnJaWGx6VzJsZElIeDhJSFJvYVhNdWFYTlRhR0Z5WldRZ1BUMDlJSFJ5ZFdVcFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9YQ0pDVkhKbFpTQnBiR3hsWjJGc2JIa2dZMmhoYm1kbFpDQnZjaUJqYkc5dVpXUWdhVzRnWldScGRGSmhibWRsWENJcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WemRXeDBMbVJsYkdWMFpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVyWlhsekxuTndiR2xqWlNocExDQXhLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuWmhiSFZsY3lBaFBUMGdkVzVrWldaV1lXeHpLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRtRnNkV1Z6TG5Od2JHbGpaU2hwTENBeEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSeVpXVXVYM05wZW1VdExUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdrdExUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsSWFXZG9MUzA3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2NtVnpkV3gwTG1oaGMwOTNibEJ5YjNCbGNuUjVLQ2QyWVd4MVpTY3BLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlhOYmFWMGdQU0J5WlhOMWJIUXVkbUZzZFdVN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjM1ZzZEM1aWNtVmhheUFoUFQwZ2RXNWtaV1pwYm1Wa0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUdWc2MyVmNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOTFiblFnS3owZ2FVaHBaMmdnTFNCcFRHOTNPMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJqYjNWdWREdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQXZLaW9nUVdSa2N5QmxiblJwY21VZ1kyOXVkR1Z1ZEhNZ2IyWWdjbWxuYUhRdGFHRnVaQ0J6YVdKc2FXNW5JQ2h5YUhNZ2FYTWdiR1ZtZENCMWJtTm9ZVzVuWldRcElDb3ZYSEpjYmlBZ0lDQkNUbTlrWlM1d2NtOTBiM1I1Y0dVdWJXVnlaMlZUYVdKc2FXNW5JRDBnWm5WdVkzUnBiMjRnS0hKb2N5d2dYeWtnZTF4eVhHNGdJQ0FnSUNBZ0lIUm9hWE11YTJWNWN5NXdkWE5vTG1Gd2NHeDVLSFJvYVhNdWEyVjVjeXdnY21oekxtdGxlWE1wTzF4eVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuWmhiSFZsY3lBOVBUMGdkVzVrWldaV1lXeHpLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeWFITXVkbUZzZFdWeklEMDlQU0IxYm1SbFpsWmhiSE1wWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRtRnNkV1Z6SUQwZ2RHaHBjeTUyWVd4MVpYTXVjMnhwWTJVb01Dd2dkR2hwY3k1clpYbHpMbXhsYm1kMGFDazdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lIUm9hWE11ZG1Gc2RXVnpMbkIxYzJndVlYQndiSGtvZEdocGN5NTJZV3gxWlhNc0lISm9jeTV5WldsbWVWWmhiSFZsY3lncEtUdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQnlaWFIxY200Z1FrNXZaR1U3WEhKY2JuMG9LU2s3WEhKY2JpOHFLaUJKYm5SbGNtNWhiQ0J1YjJSbElDaHViMjR0YkdWaFppQnViMlJsS1NBcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2k5Y2NseHVkbUZ5SUVKT2IyUmxTVzUwWlhKdVlXd2dQU0F2S2lvZ1FHTnNZWE56SUNvdklDaG1kVzVqZEdsdmJpQW9YM04xY0dWeUtTQjdYSEpjYmlBZ0lDQmZYMlY0ZEdWdVpITW9RazV2WkdWSmJuUmxjbTVoYkN3Z1gzTjFjR1Z5S1R0Y2NseHVJQ0FnSUM4cUtseHlYRzRnSUNBZ0lDb2dWR2hwY3lCa2IyVnpJRzV2ZENCdFlYSnJJR0JqYUdsc1pISmxibUFnWVhNZ2MyaGhjbVZrTENCemJ5QnBkQ0JwY3lCMGFHVWdjbVZ6Y0c5dWMybGlhV3hwZEhrZ2IyWWdkR2hsSUdOaGJHeGxjbHh5WEc0Z0lDQWdJQ29nZEc4Z1pXNXpkWEpsSUdOb2FXeGtjbVZ1SUdGeVpTQmxhWFJvWlhJZ2JXRnlhMlZrSUhOb1lYSmxaQ3dnYjNJZ1lYSmxiaWQwSUdsdVkyeDFaR1ZrSUdsdUlHRnViM1JvWlhJZ2RISmxaUzVjY2x4dUlDQWdJQ0FxTDF4eVhHNGdJQ0FnWm5WdVkzUnBiMjRnUWs1dlpHVkpiblJsY201aGJDaGphR2xzWkhKbGJpd2dhMlY1Y3lrZ2UxeHlYRzRnSUNBZ0lDQWdJSFpoY2lCZmRHaHBjeUE5SUhSb2FYTTdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnJaWGx6S1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUd0bGVYTWdQU0JiWFR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCamFHbHNaSEpsYmk1c1pXNW5kR2c3SUdrckt5bGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3RsZVhOYmFWMGdQU0JqYUdsc1pISmxibHRwWFM1dFlYaExaWGtvS1R0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnWDNSb2FYTWdQU0JmYzNWd1pYSXVZMkZzYkNoMGFHbHpMQ0JyWlhsektTQjhmQ0IwYUdsek8xeHlYRzRnSUNBZ0lDQWdJRjkwYUdsekxtTm9hV3hrY21WdUlEMGdZMmhwYkdSeVpXNDdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRjkwYUdsek8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUNBZ1FrNXZaR1ZKYm5SbGNtNWhiQzV3Y205MGIzUjVjR1V1WTJ4dmJtVWdQU0JtZFc1amRHbHZiaUFvS1NCN1hISmNiaUFnSUNBZ0lDQWdkbUZ5SUdOb2FXeGtjbVZ1SUQwZ2RHaHBjeTVqYUdsc1pISmxiaTV6YkdsalpTZ3dLVHRjY2x4dUlDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHTm9hV3hrY21WdUxteGxibWQwYURzZ2FTc3JLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmphR2xzWkhKbGJsdHBYUzVwYzFOb1lYSmxaQ0E5SUhSeWRXVTdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzVsZHlCQ1RtOWtaVWx1ZEdWeWJtRnNLR05vYVd4a2NtVnVMQ0IwYUdsekxtdGxlWE11YzJ4cFkyVW9NQ2twTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUVKT2IyUmxTVzUwWlhKdVlXd3VjSEp2ZEc5MGVYQmxMbWR5WldWa2VVTnNiMjVsSUQwZ1puVnVZM1JwYjI0Z0tHWnZjbU5sS1NCN1hISmNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVhWE5UYUdGeVpXUWdKaVlnSVdadmNtTmxLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjenRjY2x4dUlDQWdJQ0FnSUNCMllYSWdiblVnUFNCdVpYY2dRazV2WkdWSmJuUmxjbTVoYkNoMGFHbHpMbU5vYVd4a2NtVnVMbk5zYVdObEtEQXBMQ0IwYUdsekxtdGxlWE11YzJ4cFkyVW9NQ2twTzF4eVhHNGdJQ0FnSUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0F3T3lCcElEd2diblV1WTJocGJHUnlaVzR1YkdWdVozUm9PeUJwS3lzcFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUc1MUxtTm9hV3hrY21WdVcybGRJRDBnYm5VdVkyaHBiR1J5Wlc1YmFWMHVaM0psWldSNVEyeHZibVVvWm05eVkyVXBPMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFR0Y2NseHVJQ0FnSUgwN1hISmNiaUFnSUNCQ1RtOWtaVWx1ZEdWeWJtRnNMbkJ5YjNSdmRIbHdaUzV0YVc1TFpYa2dQU0JtZFc1amRHbHZiaUFvS1NCN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WTJocGJHUnlaVzViTUYwdWJXbHVTMlY1S0NrN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ1FrNXZaR1ZKYm5SbGNtNWhiQzV3Y205MGIzUjVjR1V1YldsdVVHRnBjaUE5SUdaMWJtTjBhVzl1SUNoeVpYVnpaV1JCY25KaGVTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtTm9hV3hrY21WdVd6QmRMbTFwYmxCaGFYSW9jbVYxYzJWa1FYSnlZWGtwTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUVKT2IyUmxTVzUwWlhKdVlXd3VjSEp2ZEc5MGVYQmxMbTFoZUZCaGFYSWdQU0JtZFc1amRHbHZiaUFvY21WMWMyVmtRWEp5WVhrcElIdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amFHbHNaSEpsYmx0MGFHbHpMbU5vYVd4a2NtVnVMbXhsYm1kMGFDQXRJREZkTG0xaGVGQmhhWElvY21WMWMyVmtRWEp5WVhrcE8xeHlYRzRnSUNBZ2ZUdGNjbHh1SUNBZ0lFSk9iMlJsU1c1MFpYSnVZV3d1Y0hKdmRHOTBlWEJsTG1kbGRDQTlJR1oxYm1OMGFXOXVJQ2hyWlhrc0lHUmxabUYxYkhSV1lXeDFaU3dnZEhKbFpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnBJRDBnZEdocGN5NXBibVJsZUU5bUtHdGxlU3dnTUN3Z2RISmxaUzVmWTI5dGNHRnlaU2tzSUdOb2FXeGtjbVZ1SUQwZ2RHaHBjeTVqYUdsc1pISmxianRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYVNBOElHTm9hV3hrY21WdUxteGxibWQwYUNBL0lHTm9hV3hrY21WdVcybGRMbWRsZENoclpYa3NJR1JsWm1GMWJIUldZV3gxWlN3Z2RISmxaU2tnT2lCMWJtUmxabWx1WldRN1hISmNiaUFnSUNCOU8xeHlYRzRnSUNBZ1FrNXZaR1ZKYm5SbGNtNWhiQzV3Y205MGIzUjVjR1V1WjJWMFVHRnBjazl5VG1WNGRFeHZkMlZ5SUQwZ1puVnVZM1JwYjI0Z0tHdGxlU3dnWTI5dGNHRnlaU3dnYVc1amJIVnphWFpsTENCeVpYVnpaV1JCY25KaGVTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnBJRDBnZEdocGN5NXBibVJsZUU5bUtHdGxlU3dnTUN3Z1kyOXRjR0Z5WlNrc0lHTm9hV3hrY21WdUlEMGdkR2hwY3k1amFHbHNaSEpsYmp0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvYVNBK1BTQmphR2xzWkhKbGJpNXNaVzVuZEdncFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtMWhlRkJoYVhJb2NtVjFjMlZrUVhKeVlYa3BPMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQnlaWE4xYkhRZ1BTQmphR2xzWkhKbGJsdHBYUzVuWlhSUVlXbHlUM0pPWlhoMFRHOTNaWElvYTJWNUxDQmpiMjF3WVhKbExDQnBibU5zZFhOcGRtVXNJSEpsZFhObFpFRnljbUY1S1R0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvY21WemRXeDBJRDA5UFNCMWJtUmxabWx1WldRZ0ppWWdhU0ErSURBcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOb2FXeGtjbVZ1VzJrZ0xTQXhYUzV0WVhoUVlXbHlLSEpsZFhObFpFRnljbUY1S1R0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzNWc2REdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQkNUbTlrWlVsdWRHVnlibUZzTG5CeWIzUnZkSGx3WlM1blpYUlFZV2x5VDNKT1pYaDBTR2xuYUdWeUlEMGdablZ1WTNScGIyNGdLR3RsZVN3Z1kyOXRjR0Z5WlN3Z2FXNWpiSFZ6YVhabExDQnlaWFZ6WldSQmNuSmhlU2tnZTF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJwSUQwZ2RHaHBjeTVwYm1SbGVFOW1LR3RsZVN3Z01Dd2dZMjl0Y0dGeVpTa3NJR05vYVd4a2NtVnVJRDBnZEdocGN5NWphR2xzWkhKbGJpd2diR1Z1WjNSb0lEMGdZMmhwYkdSeVpXNHViR1Z1WjNSb08xeHlYRzRnSUNBZ0lDQWdJR2xtSUNocElENDlJR3hsYm1kMGFDbGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWdVpHVm1hVzVsWkR0Y2NseHVJQ0FnSUNBZ0lDQjJZWElnY21WemRXeDBJRDBnWTJocGJHUnlaVzViYVYwdVoyVjBVR0ZwY2s5eVRtVjRkRWhwWjJobGNpaHJaWGtzSUdOdmJYQmhjbVVzSUdsdVkyeDFjMmwyWlN3Z2NtVjFjMlZrUVhKeVlYa3BPMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaWE4xYkhRZ1BUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlCcElEd2diR1Z1WjNSb0lDMGdNU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMmhwYkdSeVpXNWJhU0FySURGZExtMXBibEJoYVhJb2NtVjFjMlZrUVhKeVlYa3BPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUVKT2IyUmxTVzUwWlhKdVlXd3VjSEp2ZEc5MGVYQmxMbU5vWldOclZtRnNhV1FnUFNCbWRXNWpkR2x2YmlBb1pHVndkR2dzSUhSeVpXVXNJR0poYzJWSmJtUmxlQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJyVENBOUlIUm9hWE11YTJWNWN5NXNaVzVuZEdnc0lHTk1JRDBnZEdocGN5NWphR2xzWkhKbGJpNXNaVzVuZEdnN1hISmNiaUFnSUNBZ0lDQWdZMmhsWTJzb2Ewd2dQVDA5SUdOTUxDQmNJbXRsZVhNdlkyaHBiR1J5Wlc0Z2JHVnVaM1JvSUcxcGMyMWhkR05vT2lCa1pYQjBhRndpTENCa1pYQjBhQ3dnWENKc1pXNW5kR2h6WENJc0lHdE1MQ0JqVEN3Z1hDSmlZWE5sU1c1a1pYaGNJaXdnWW1GelpVbHVaR1Y0S1R0Y2NseHVJQ0FnSUNBZ0lDQmphR1ZqYXloclRDQStJREVnZkh3Z1pHVndkR2dnUGlBd0xDQmNJbWx1ZEdWeWJtRnNJRzV2WkdVZ2FHRnpJR3hsYm1kMGFGd2lMQ0JyVEN3Z1hDSmhkQ0JrWlhCMGFGd2lMQ0JrWlhCMGFDd2dYQ0ppWVhObFNXNWtaWGhjSWl3Z1ltRnpaVWx1WkdWNEtUdGNjbHh1SUNBZ0lDQWdJQ0IyWVhJZ2MybDZaU0E5SURBc0lHTWdQU0IwYUdsekxtTm9hV3hrY21WdUxDQnJJRDBnZEdocGN5NXJaWGx6TENCamFHbHNaRk5wZW1VZ1BTQXdPMXh5WEc0Z0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z1kwdzdJR2tyS3lrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCemFYcGxJQ3M5SUdOYmFWMHVZMmhsWTJ0V1lXeHBaQ2hrWlhCMGFDQXJJREVzSUhSeVpXVXNJR0poYzJWSmJtUmxlQ0FySUhOcGVtVXBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmphR2xzWkZOcGVtVWdLejBnWTF0cFhTNXJaWGx6TG14bGJtZDBhRHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMmhsWTJzb2MybDZaU0ErUFNCamFHbHNaRk5wZW1Vc0lGd2lkM1JtWENJc0lHSmhjMlZKYm1SbGVDazdJQzh2SUc1dklIZGhlU0IwYUdseklIZHBiR3dnWlhabGNpQm1ZV2xzWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR05vWldOcktHa2dQVDA5SURBZ2ZId2dZMXRwSUMwZ01WMHVZMjl1YzNSeWRXTjBiM0lnUFQwOUlHTmJhVjB1WTI5dWMzUnlkV04wYjNJc0lGd2lkSGx3WlNCdGFYTnRZWFJqYUN3Z1ltRnpaVWx1WkdWNE9sd2lMQ0JpWVhObFNXNWtaWGdwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kxdHBYUzV0WVhoTFpYa29LU0FoUFNCclcybGRLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJobFkyc29abUZzYzJVc0lGd2lhMlY1YzF0Y0lpd2dhU3dnWENKZElEMWNJaXdnYTF0cFhTd2dYQ0pwY3lCM2NtOXVaeXdnYzJodmRXeGtJR0psSUZ3aUxDQmpXMmxkTG0xaGVFdGxlU2dwTENCY0ltRjBJR1JsY0hSb1hDSXNJR1JsY0hSb0xDQmNJbUpoYzJWSmJtUmxlRndpTENCaVlYTmxTVzVrWlhncE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JU2hwSUQwOVBTQXdJSHg4SUhSeVpXVXVYMk52YlhCaGNtVW9hMXRwSUMwZ01WMHNJR3RiYVYwcElEd2dNQ2twWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamFHVmpheWhtWVd4elpTd2dYQ0p6YjNKMElIWnBiMnhoZEdsdmJpQmhkQ0JrWlhCMGFGd2lMQ0JrWlhCMGFDd2dYQ0pwYm1SbGVGd2lMQ0JwTENCY0ltdGxlWE5jSWl3Z2ExdHBJQzBnTVYwc0lHdGJhVjBwTzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0F2THlBeU1ESXdMekE0T2lCQ1ZISmxaU0JrYjJWemJpZDBJR0ZzZDJGNWN5QmhkbTlwWkNCbmNtOXpjMng1SUhWdVpHVnljMmw2WldRZ2JtOWtaWE1zWEhKY2JpQWdJQ0FnSUNBZ0x5OGdZblYwSUVGR1FVbExJSE4xWTJnZ2JtOWtaWE1nWVhKbElIQnlaWFIwZVNCb1lYSnRiR1Z6Y3l3Z2MyOGdZV05qWlhCMElIUm9aVzB1WEhKY2JpQWdJQ0FnSUNBZ2RtRnlJSFJ2YjJabGR5QTlJR05vYVd4a1UybDZaU0E5UFQwZ01Ec2dMeThnWTJocGJHUlRhWHBsSUR3Z0tIUnlaV1V1YldGNFRtOWtaVk5wZW1VZ1BqNGdNU2txWTB3N1hISmNiaUFnSUNBZ0lDQWdhV1lnS0hSdmIyWmxkeUI4ZkNCamFHbHNaRk5wZW1VZ1BpQjBjbVZsTG0xaGVFNXZaR1ZUYVhwbElDb2dZMHdwWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR05vWldOcktHWmhiSE5sTENCMGIyOW1aWGNnUHlCY0luUnZieUJtWlhkY0lpQTZJRndpZEc5dklHMWhibmxjSWl3Z1hDSmphR2xzWkhKbGJpQW9YQ0lzSUdOb2FXeGtVMmw2WlN3Z2MybDZaU3dnWENJcElHRjBJR1JsY0hSb1hDSXNJR1JsY0hSb0xDQmNJbTFoZUU1dlpHVlRhWHBsT2x3aUxDQjBjbVZsTG0xaGVFNXZaR1ZUYVhwbExDQmNJbU5vYVd4a2NtVnVMbXhsYm1kMGFEcGNJaXdnWTB3c0lGd2lZbUZ6WlVsdVpHVjRPbHdpTENCaVlYTmxTVzVrWlhncE8xeHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnphWHBsTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUM4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZYSEpjYmlBZ0lDQXZMeUJKYm5SbGNtNWhiQ0JPYjJSbE9pQnpaWFFnSmlCdWIyUmxJSE53YkdsMGRHbHVaeUF2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2TDF4eVhHNGdJQ0FnUWs1dlpHVkpiblJsY201aGJDNXdjbTkwYjNSNWNHVXVjMlYwSUQwZ1puVnVZM1JwYjI0Z0tHdGxlU3dnZG1Gc2RXVXNJRzkyWlhKM2NtbDBaU3dnZEhKbFpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQmpJRDBnZEdocGN5NWphR2xzWkhKbGJpd2diV0Y0SUQwZ2RISmxaUzVmYldGNFRtOWtaVk5wZW1Vc0lHTnRjQ0E5SUhSeVpXVXVYMk52YlhCaGNtVTdYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlHa2dQU0JOWVhSb0xtMXBiaWgwYUdsekxtbHVaR1Y0VDJZb2EyVjVMQ0F3TENCamJYQXBMQ0JqTG14bGJtZDBhQ0F0SURFcExDQmphR2xzWkNBOUlHTmJhVjA3WEhKY2JpQWdJQ0FnSUNBZ2FXWWdLR05vYVd4a0xtbHpVMmhoY21Wa0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCalcybGRJRDBnWTJocGJHUWdQU0JqYUdsc1pDNWpiRzl1WlNncE8xeHlYRzRnSUNBZ0lDQWdJR2xtSUNoamFHbHNaQzVyWlhsekxteGxibWQwYUNBK1BTQnRZWGdwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1kyaHBiR1FnYVhNZ1puVnNiRHNnYVc1elpYSjBhVzVuSUdGdWVYUm9hVzVuSUdWc2MyVWdkMmxzYkNCallYVnpaU0JoSUhOd2JHbDBMbHh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJUYUdsbWRHbHVaeUJoYmlCcGRHVnRJSFJ2SUhSb1pTQnNaV1owSUc5eUlISnBaMmgwSUhOcFlteHBibWNnYldGNUlHRjJiMmxrSUdFZ2MzQnNhWFF1WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUZkbElHTmhiaUJrYnlCaElITm9hV1owSUdsbUlIUm9aU0JoWkdwaFkyVnVkQ0J1YjJSbElHbHpJRzV2ZENCbWRXeHNJR0Z1WkNCcFppQjBhR1ZjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnWTNWeWNtVnVkQ0JyWlhrZ1kyRnVJSE4wYVd4c0lHSmxJSEJzWVdObFpDQnBiaUIwYUdVZ2MyRnRaU0J1YjJSbElHRm1kR1Z5SUhSb1pTQnphR2xtZEM1Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHOTBhR1Z5TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FTQStJREFnSmlZZ0tHOTBhR1Z5SUQwZ1kxdHBJQzBnTVYwcExtdGxlWE11YkdWdVozUm9JRHdnYldGNElDWW1JR050Y0NoamFHbHNaQzVyWlhseld6QmRMQ0JyWlhrcElEd2dNQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzkwYUdWeUxtbHpVMmhoY21Wa0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOYmFTQXRJREZkSUQwZ2IzUm9aWElnUFNCdmRHaGxjaTVqYkc5dVpTZ3BPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjNSb1pYSXVkR0ZyWlVaeWIyMVNhV2RvZENoamFHbHNaQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbXRsZVhOYmFTQXRJREZkSUQwZ2IzUm9aWEl1YldGNFMyVjVLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9LRzkwYUdWeUlEMGdZMXRwSUNzZ01WMHBJQ0U5UFNCMWJtUmxabWx1WldRZ0ppWWdiM1JvWlhJdWEyVjVjeTVzWlc1bmRHZ2dQQ0J0WVhnZ0ppWWdZMjF3S0dOb2FXeGtMbTFoZUV0bGVTZ3BMQ0JyWlhrcElEd2dNQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzkwYUdWeUxtbHpVMmhoY21Wa0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOYmFTQXJJREZkSUQwZ2IzUm9aWElnUFNCdmRHaGxjaTVqYkc5dVpTZ3BPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjNSb1pYSXVkR0ZyWlVaeWIyMU1aV1owS0dOb2FXeGtLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhMlY1YzF0cFhTQTlJR05iYVYwdWJXRjRTMlY1S0NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlISmxjM1ZzZENBOUlHTm9hV3hrTG5ObGRDaHJaWGtzSUhaaGJIVmxMQ0J2ZG1WeWQzSnBkR1VzSUhSeVpXVXBPMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaWE4xYkhRZ1BUMDlJR1poYkhObEtWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYSEpjYmlBZ0lDQWdJQ0FnZEdocGN5NXJaWGx6VzJsZElEMGdZMmhwYkdRdWJXRjRTMlY1S0NrN1hISmNiaUFnSUNBZ0lDQWdhV1lnS0hKbGMzVnNkQ0E5UFQwZ2RISjFaU2xjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEhKY2JpQWdJQ0FnSUNBZ0x5OGdWR2hsSUdOb2FXeGtJR2hoY3lCemNHeHBkQ0JoYm1RZ1lISmxjM1ZzZEdBZ2FYTWdZU0J1WlhjZ2NtbG5hSFFnWTJocGJHUXVMaTRnWkc5bGN5QnBkQ0JtYVhRL1hISmNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVhMlY1Y3k1c1pXNW5kR2dnUENCdFlYZ3BJSHNnTHk4Z2VXVnpYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YVc1elpYSjBLR2tnS3lBeExDQnlaWE4xYkhRcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ1pXeHpaU0I3SUM4dklHNXZMQ0IzWlNCdGRYTjBJSE53YkdsMElHRnNjMjljY2x4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUc1bGQxSnBaMmgwVTJsaWJHbHVaeUE5SUhSb2FYTXVjM0JzYVhSUFptWlNhV2RvZEZOcFpHVW9LU3dnZEdGeVoyVjBJRDBnZEdocGN6dGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR050Y0NoeVpYTjFiSFF1YldGNFMyVjVLQ2tzSUhSb2FYTXViV0Y0UzJWNUtDa3BJRDRnTUNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR0Z5WjJWMElEMGdibVYzVW1sbmFIUlRhV0pzYVc1bk8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhU0F0UFNCMGFHbHpMbXRsZVhNdWJHVnVaM1JvTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSFJoY21kbGRDNXBibk5sY25Rb2FTQXJJREVzSUhKbGMzVnNkQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGRTYVdkb2RGTnBZbXhwYm1jN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdmVHRjY2x4dUlDQWdJQzhxS2x4eVhHNGdJQ0FnSUNvZ1NXNXpaWEowY3lCZ1kyaHBiR1JnSUdGMElHbHVaR1Y0SUdCcFlDNWNjbHh1SUNBZ0lDQXFJRlJvYVhNZ1pHOWxjeUJ1YjNRZ2JXRnlheUJnWTJocGJHUmdJR0Z6SUhOb1lYSmxaQ3dnYzI4Z2FYUWdhWE1nZEdobElISmxjM0J2Ym5OcFltbHNhWFI1SUc5bUlIUm9aU0JqWVd4c1pYSmNjbHh1SUNBZ0lDQXFJSFJ2SUdWdWMzVnlaU0IwYUdGMElHVnBkR2hsY2lCamFHbHNaQ0JwY3lCdFlYSnJaV1FnYzJoaGNtVmtMQ0J2Y2lCcGRDQnBjeUJ1YjNRZ2FXNWpiSFZrWldRZ2FXNGdZVzV2ZEdobGNpQjBjbVZsTGx4eVhHNGdJQ0FnSUNvdlhISmNiaUFnSUNCQ1RtOWtaVWx1ZEdWeWJtRnNMbkJ5YjNSdmRIbHdaUzVwYm5ObGNuUWdQU0JtZFc1amRHbHZiaUFvYVN3Z1kyaHBiR1FwSUh0Y2NseHVJQ0FnSUNBZ0lDQjBhR2x6TG1Ob2FXeGtjbVZ1TG5Od2JHbGpaU2hwTENBd0xDQmphR2xzWkNrN1hISmNiaUFnSUNBZ0lDQWdkR2hwY3k1clpYbHpMbk53YkdsalpTaHBMQ0F3TENCamFHbHNaQzV0WVhoTFpYa29LU2s3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnTHlvcVhISmNiaUFnSUNBZ0tpQlRjR3hwZENCMGFHbHpJRzV2WkdVdVhISmNiaUFnSUNBZ0tpQk5iMlJwWm1sbGN5QjBhR2x6SUhSdklISmxiVzkyWlNCMGFHVWdjMlZqYjI1a0lHaGhiR1lnYjJZZ2RHaGxJR2wwWlcxekxDQnlaWFIxY201cGJtY2dZU0J6WlhCaGNtRjBaU0J1YjJSbElHTnZiblJoYVc1cGJtY2dkR2hsYlM1Y2NseHVJQ0FnSUNBcUwxeHlYRzRnSUNBZ1FrNXZaR1ZKYm5SbGNtNWhiQzV3Y205MGIzUjVjR1V1YzNCc2FYUlBabVpTYVdkb2RGTnBaR1VnUFNCbWRXNWpkR2x2YmlBb0tTQjdYSEpjYmlBZ0lDQWdJQ0FnTHk4Z1lYTnpaWEowSUNGMGFHbHpMbWx6VTJoaGNtVmtPMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQm9ZV3htSUQwZ2RHaHBjeTVqYUdsc1pISmxiaTVzWlc1bmRHZ2dQajRnTVR0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtVjNJRUpPYjJSbFNXNTBaWEp1WVd3b2RHaHBjeTVqYUdsc1pISmxiaTV6Y0d4cFkyVW9hR0ZzWmlrc0lIUm9hWE11YTJWNWN5NXpjR3hwWTJVb2FHRnNaaWtwTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUVKT2IyUmxTVzUwWlhKdVlXd3VjSEp2ZEc5MGVYQmxMblJoYTJWR2NtOXRVbWxuYUhRZ1BTQm1kVzVqZEdsdmJpQW9jbWh6S1NCN1hISmNiaUFnSUNBZ0lDQWdMeThnVW1WdGFXNWtaWEk2SUhCaGNtVnVkQ0J1YjJSbElHMTFjM1FnZFhCa1lYUmxJR2wwY3lCamIzQjVJRzltSUd0bGVTQm1iM0lnZEdocGN5QnViMlJsWEhKY2JpQWdJQ0FnSUNBZ0x5OGdZWE56WlhKME9pQnVaV2wwYUdWeUlHNXZaR1VnYVhNZ2MyaGhjbVZrWEhKY2JpQWdJQ0FnSUNBZ0x5OGdZWE56WlhKMElISm9jeTVyWlhsekxteGxibWQwYUNBK0lDaHRZWGhPYjJSbFUybDZaUzh5SUNZbUlIUm9hWE11YTJWNWN5NXNaVzVuZEdnOGJXRjRUbTlrWlZOcGVtVXBYSEpjYmlBZ0lDQWdJQ0FnZEdocGN5NXJaWGx6TG5CMWMyZ29jbWh6TG10bGVYTXVjMmhwWm5Rb0tTazdYSEpjYmlBZ0lDQWdJQ0FnZEdocGN5NWphR2xzWkhKbGJpNXdkWE5vS0hKb2N5NWphR2xzWkhKbGJpNXphR2xtZENncEtUdGNjbHh1SUNBZ0lIMDdYSEpjYmlBZ0lDQkNUbTlrWlVsdWRHVnlibUZzTG5CeWIzUnZkSGx3WlM1MFlXdGxSbkp2YlV4bFpuUWdQU0JtZFc1amRHbHZiaUFvYkdoektTQjdYSEpjYmlBZ0lDQWdJQ0FnTHk4Z1VtVnRhVzVrWlhJNklIQmhjbVZ1ZENCdWIyUmxJRzExYzNRZ2RYQmtZWFJsSUdsMGN5QmpiM0I1SUc5bUlHdGxlU0JtYjNJZ2RHaHBjeUJ1YjJSbFhISmNiaUFnSUNBZ0lDQWdMeThnWVhOelpYSjBPaUJ1WldsMGFHVnlJRzV2WkdVZ2FYTWdjMmhoY21Wa1hISmNiaUFnSUNBZ0lDQWdMeThnWVhOelpYSjBJSEpvY3k1clpYbHpMbXhsYm1kMGFDQStJQ2h0WVhoT2IyUmxVMmw2WlM4eUlDWW1JSFJvYVhNdWEyVjVjeTVzWlc1bmRHZzhiV0Y0VG05a1pWTnBlbVVwWEhKY2JpQWdJQ0FnSUNBZ2RHaHBjeTVyWlhsekxuVnVjMmhwWm5Rb2JHaHpMbXRsZVhNdWNHOXdLQ2twTzF4eVhHNGdJQ0FnSUNBZ0lIUm9hWE11WTJocGJHUnlaVzR1ZFc1emFHbG1kQ2hzYUhNdVkyaHBiR1J5Wlc0dWNHOXdLQ2twTzF4eVhHNGdJQ0FnZlR0Y2NseHVJQ0FnSUM4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZYSEpjYmlBZ0lDQXZMeUJKYm5SbGNtNWhiQ0JPYjJSbE9pQnpZMkZ1Ym1sdVp5QW1JR1JsYkdWMGFXOXVjeUF2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2TDF4eVhHNGdJQ0FnTHk4Z1RtOTBaVG9nWUdOdmRXNTBZQ0JwY3lCMGFHVWdibVY0ZENCMllXeDFaU0J2WmlCMGFHVWdkR2hwY21RZ1lYSm5kVzFsYm5RZ2RHOGdZRzl1Um05MWJtUmdMaUJjY2x4dUlDQWdJQzh2SUNBZ0lDQWdJRUVnYkdWaFppQnViMlJsSjNNZ1lHWnZjbEpoYm1kbFlDQm1kVzVqZEdsdmJpQnlaWFIxY201eklHRWdibVYzSUhaaGJIVmxJR1p2Y2lCMGFHbHpJR052ZFc1MFpYSXNYSEpjYmlBZ0lDQXZMeUFnSUNBZ0lDQjFibXhsYzNNZ2RHaGxJRzl3WlhKaGRHbHZiaUJwY3lCMGJ5QnpkRzl3SUdWaGNteDVMbHh5WEc0Z0lDQWdRazV2WkdWSmJuUmxjbTVoYkM1d2NtOTBiM1I1Y0dVdVptOXlVbUZ1WjJVZ1BTQm1kVzVqZEdsdmJpQW9iRzkzTENCb2FXZG9MQ0JwYm1Oc2RXUmxTR2xuYUN3Z1pXUnBkRTF2WkdVc0lIUnlaV1VzSUdOdmRXNTBMQ0J2YmtadmRXNWtLU0I3WEhKY2JpQWdJQ0FnSUNBZ2RtRnlJR050Y0NBOUlIUnlaV1V1WDJOdmJYQmhjbVU3WEhKY2JpQWdJQ0FnSUNBZ2RtRnlJR3RsZVhNZ1BTQjBhR2x6TG10bGVYTXNJR05vYVd4a2NtVnVJRDBnZEdocGN5NWphR2xzWkhKbGJqdGNjbHh1SUNBZ0lDQWdJQ0IyWVhJZ2FVeHZkeUE5SUhSb2FYTXVhVzVrWlhoUFppaHNiM2NzSURBc0lHTnRjQ2tzSUdrZ1BTQnBURzkzTzF4eVhHNGdJQ0FnSUNBZ0lIWmhjaUJwU0dsbmFDQTlJRTFoZEdndWJXbHVLR2hwWjJnZ1BUMDlJR3h2ZHlBL0lHbE1iM2NnT2lCMGFHbHpMbWx1WkdWNFQyWW9hR2xuYUN3Z01Dd2dZMjF3S1N3Z2EyVjVjeTVzWlc1bmRHZ2dMU0F4S1R0Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvSVdWa2FYUk5iMlJsS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklGTnBiWEJzWlNCallYTmxYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvT3lCcElEdzlJR2xJYVdkb095QnBLeXNwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ5WlhOMWJIUWdQU0JqYUdsc1pISmxibHRwWFM1bWIzSlNZVzVuWlNoc2IzY3NJR2hwWjJnc0lHbHVZMngxWkdWSWFXZG9MQ0JsWkdsMFRXOWtaU3dnZEhKbFpTd2dZMjkxYm5Rc0lHOXVSbTkxYm1RcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ5WlhOMWJIUWdJVDA5SUNkdWRXMWlaWEluS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE4xYkhRN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiM1Z1ZENBOUlISmxjM1ZzZER0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hwSUR3OUlHbElhV2RvS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhSeWVTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tEc2dhU0E4UFNCcFNHbG5hRHNnYVNzcktTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR05vYVd4a2NtVnVXMmxkTG1selUyaGhjbVZrS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamFHbHNaSEpsYmx0cFhTQTlJR05vYVd4a2NtVnVXMmxkTG1Oc2IyNWxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhKbGMzVnNkQ0E5SUdOb2FXeGtjbVZ1VzJsZExtWnZjbEpoYm1kbEtHeHZkeXdnYUdsbmFDd2dhVzVqYkhWa1pVaHBaMmdzSUdWa2FYUk5iMlJsTENCMGNtVmxMQ0JqYjNWdWRDd2diMjVHYjNWdVpDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdUbTkwWlRvZ2FXWWdZMmhwYkdSeVpXNWJhVjBnYVhNZ1pXMXdkSGtnZEdobGJpQnJaWGx6VzJsZFBYVnVaR1ZtYVc1bFpDNWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QWdJQ0FnSUNCVWFHbHpJR2x6SUdGdUlHbHVkbUZzYVdRZ2MzUmhkR1VzSUdKMWRDQnBkQ0JwY3lCbWFYaGxaQ0JpWld4dmR5NWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCclpYbHpXMmxkSUQwZ1kyaHBiR1J5Wlc1YmFWMHViV0Y0UzJWNUtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnlaWE4xYkhRZ0lUMDlJQ2R1ZFcxaVpYSW5LVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmRXNTBJRDBnY21WemRXeDBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1pwYm1Gc2JIa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1JHVnNaWFJwYjI1eklHMWhlU0JvWVhabElHOWpZM1Z5Y21Wa0xDQnpieUJzYjI5cklHWnZjaUJ2Y0hCdmNuUjFibWwwYVdWeklIUnZJRzFsY21kbElHNXZaR1Z6TGx4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR2hoYkdZZ1BTQjBjbVZsTGw5dFlYaE9iMlJsVTJsNlpTQStQaUF4TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2xNYjNjZ1BpQXdLVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbE1iM2N0TFR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvYVNBOUlHbElhV2RvT3lCcElENDlJR2xNYjNjN0lHa3RMU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamFHbHNaSEpsYmx0cFhTNXJaWGx6TG14bGJtZDBhQ0E4UFNCb1lXeG1LU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGphR2xzWkhKbGJsdHBYUzVyWlhsekxteGxibWQwYUNBaFBUMGdNQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1MGNubE5aWEpuWlNocExDQjBjbVZsTGw5dFlYaE9iMlJsVTJsNlpTazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQjdJQzh2SUdOb2FXeGtJR2x6SUdWdGNIUjVJU0JrWld4bGRHVWdhWFFoWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnJaWGx6TG5Od2JHbGpaU2hwTENBeEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOb2FXeGtjbVZ1TG5Od2JHbGpaU2hwTENBeEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGphR2xzWkhKbGJpNXNaVzVuZEdnZ0lUMDlJREFnSmlZZ1kyaHBiR1J5Wlc1Yk1GMHVhMlY1Y3k1c1pXNW5kR2dnUFQwOUlEQXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyaGxZMnNvWm1Gc2MyVXNJRndpWlcxd2RHbHVaWE56SUdKMVoxd2lLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOTFiblE3WEhKY2JpQWdJQ0I5TzF4eVhHNGdJQ0FnTHlvcUlFMWxjbWRsY3lCamFHbHNaQ0JwSUhkcGRHZ2dZMmhwYkdRZ2FTc3hJR2xtSUhSb1pXbHlJR052YldKcGJtVmtJSE5wZW1VZ2FYTWdibTkwSUhSdmJ5QnNZWEpuWlNBcUwxeHlYRzRnSUNBZ1FrNXZaR1ZKYm5SbGNtNWhiQzV3Y205MGIzUjVjR1V1ZEhKNVRXVnlaMlVnUFNCbWRXNWpkR2x2YmlBb2FTd2diV0Y0VTJsNlpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhaaGNpQmphR2xzWkhKbGJpQTlJSFJvYVhNdVkyaHBiR1J5Wlc0N1hISmNiaUFnSUNBZ0lDQWdhV1lnS0drZ1BqMGdNQ0FtSmlCcElDc2dNU0E4SUdOb2FXeGtjbVZ1TG14bGJtZDBhQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kyaHBiR1J5Wlc1YmFWMHVhMlY1Y3k1c1pXNW5kR2dnS3lCamFHbHNaSEpsYmx0cElDc2dNVjB1YTJWNWN5NXNaVzVuZEdnZ1BEMGdiV0Y0VTJsNlpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTm9hV3hrY21WdVcybGRMbWx6VTJoaGNtVmtLU0F2THlCamJHOXVaV1FnWVd4eVpXRmtlU0JWVGt4RlUxTWdhU0JwY3lCdmRYUnphV1JsSUhOallXNGdjbUZ1WjJWY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYUdsc1pISmxibHRwWFNBOUlHTm9hV3hrY21WdVcybGRMbU5zYjI1bEtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYUdsc1pISmxibHRwWFM1dFpYSm5aVk5wWW14cGJtY29ZMmhwYkdSeVpXNWJhU0FySURGZExDQnRZWGhUYVhwbEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05vYVd4a2NtVnVMbk53YkdsalpTaHBJQ3NnTVN3Z01TazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtdGxlWE11YzNCc2FXTmxLR2tnS3lBeExDQXhLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhMlY1YzF0cFhTQTlJR05vYVd4a2NtVnVXMmxkTG0xaGVFdGxlU2dwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh5WEc0Z0lDQWdmVHRjY2x4dUlDQWdJQzhxS2x4eVhHNGdJQ0FnSUNvZ1RXOTJaU0JqYUdsc1pISmxiaUJtY205dElHQnlhSE5nSUdsdWRHOGdkR2hwY3k1Y2NseHVJQ0FnSUNBcUlHQnlhSE5nSUcxMWMzUWdZbVVnY0dGeWRDQnZaaUIwYUdseklIUnlaV1VzSUdGdVpDQmlaU0J5WlcxdmRtVmtJR1p5YjIwZ2FYUWdZV1owWlhJZ2RHaHBjeUJqWVd4c1hISmNiaUFnSUNBZ0tpQW9iM1JvWlhKM2FYTmxJR2x6VTJoaGNtVmtJR1p2Y2lCcGRITWdZMmhwYkdSeVpXNGdZMjkxYkdRZ1ltVWdhVzVqYjNKeVpXTjBLUzVjY2x4dUlDQWdJQ0FxTDF4eVhHNGdJQ0FnUWs1dlpHVkpiblJsY201aGJDNXdjbTkwYjNSNWNHVXViV1Z5WjJWVGFXSnNhVzVuSUQwZ1puVnVZM1JwYjI0Z0tISm9jeXdnYldGNFRtOWtaVk5wZW1VcElIdGNjbHh1SUNBZ0lDQWdJQ0F2THlCaGMzTmxjblFnSVhSb2FYTXVhWE5UYUdGeVpXUTdYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlHOXNaRXhsYm1kMGFDQTlJSFJvYVhNdWEyVjVjeTVzWlc1bmRHZzdYSEpjYmlBZ0lDQWdJQ0FnZEdocGN5NXJaWGx6TG5CMWMyZ3VZWEJ3Ykhrb2RHaHBjeTVyWlhsekxDQnlhSE11YTJWNWN5azdYSEpjYmlBZ0lDQWdJQ0FnZG1GeUlISm9jME5vYVd4a2NtVnVJRDBnY21oekxtTm9hV3hrY21WdU8xeHlYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyaHBiR1J5Wlc0dWNIVnphQzVoY0hCc2VTaDBhR2x6TG1Ob2FXeGtjbVZ1TENCeWFITkRhR2xzWkhKbGJpazdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tISm9jeTVwYzFOb1lYSmxaQ0FtSmlBaGRHaHBjeTVwYzFOb1lYSmxaQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCQmJHd2dZMmhwYkdSeVpXNGdiMllnWVNCemFHRnlaV1FnYm05a1pTQmhjbVVnYVcxd2JHbGphWFJzZVNCemFHRnlaV1FzSUdGdVpDQnphVzVqWlNCMGFHVnBjaUJ1WlhkY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2NHRnlaVzUwSUdseklHNXZkQ0J6YUdGeVpXUXNJSFJvWlhrZ2JYVnpkQ0J1YjNjZ1ltVWdaWGh3YkdsamFYUnNlU0J0WVhKclpXUWdZWE1nYzJoaGNtVmtMbHh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJSEpvYzBOb2FXeGtjbVZ1TG14bGJtZDBhRHNnYVNzcktWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbWh6UTJocGJHUnlaVzViYVYwdWFYTlRhR0Z5WldRZ1BTQjBjblZsTzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0F2THlCSlppQnZkWElnWTJocGJHUnlaVzRnWVhKbElIUm9aVzF6Wld4MlpYTWdZV3h0YjNOMElHVnRjSFI1SUdSMVpTQjBieUJoSUcxaGMzTXRaR1ZzWlhSbExGeHlYRzRnSUNBZ0lDQWdJQzh2SUhSb1pYa2diV0Y1SUc1bFpXUWdkRzhnWW1VZ2JXVnlaMlZrSUhSdmJ5QW9ZblYwSUc5dWJIa2dkR2hsSUc5c1pFeGxibWQwYUMweElHRnVaQ0JwZEhOY2NseHVJQ0FnSUNBZ0lDQXZMeUJ5YVdkb2RDQnphV0pzYVc1bklITm9iM1ZzWkNCdVpXVmtJSFJvYVhNcExseHlYRzRnSUNBZ0lDQWdJSFJvYVhNdWRISjVUV1Z5WjJVb2IyeGtUR1Z1WjNSb0lDMGdNU3dnYldGNFRtOWtaVk5wZW1VcE8xeHlYRzRnSUNBZ2ZUdGNjbHh1SUNBZ0lISmxkSFZ5YmlCQ1RtOWtaVWx1ZEdWeWJtRnNPMXh5WEc1OUtFSk9iMlJsS1NrN1hISmNiaTh2SUU5d2RHbHRhWHBoZEdsdmJqb2dkR2hwY3lCaGNuSmhlU0J2WmlCZ2RXNWtaV1pwYm1Wa1lITWdhWE1nZFhObFpDQnBibk4wWldGa0lHOW1JR0VnYm05eWJXRnNYSEpjYmk4dklHRnljbUY1SUc5bUlIWmhiSFZsY3lCcGJpQnViMlJsY3lCM2FHVnlaU0JnZFc1a1pXWnBibVZrWUNCcGN5QjBhR1VnYjI1c2VTQjJZV3gxWlM1Y2NseHVMeThnU1hSeklHeGxibWQwYUNCcGN5QmxlSFJsYm1SbFpDQjBieUJ0WVhnZ2JtOWtaU0J6YVhwbElHOXVJR1pwY25OMElIVnpaVHNnYzJsdVkyVWdhWFFnWTJGdVhISmNiaTh2SUdKbElITm9ZWEpsWkNCaVpYUjNaV1Z1SUhSeVpXVnpJSGRwZEdnZ1pHbG1abVZ5Wlc1MElHMWhlR2x0ZFcxekxDQnBkSE1nYkdWdVozUm9JR05oYmlCdmJteDVYSEpjYmk4dklHbHVZM0psWVhObExDQnVaWFpsY2lCa1pXTnlaV0Z6WlM0Z1NYUnpJSFI1Y0dVZ2MyaHZkV3hrSUdKbElIVnVaR1ZtYVc1bFpGdGRJR0oxZENCemRISmhibWRsYkhsY2NseHVMeThnVkhsd1pWTmpjbWx3ZENCM2IyNG5kQ0JoYkd4dmR5QjBhR1VnWTI5dGNHRnlhWE52YmlCV1cxMGdQVDA5SUhWdVpHVm1hVzVsWkZ0ZExpQlVieUJ3Y21WMlpXNTBYSEpjYmk4dklIVnpaWEp6SUdaeWIyMGdiV0ZyYVc1bklIUm9hWE1nWVhKeVlYa2dkRzl2SUd4aGNtZGxMQ0JDVkhKbFpTQm9ZWE1nWVNCdFlYaHBiWFZ0SUc1dlpHVWdjMmw2WlM1Y2NseHVMeTljY2x4dUx5OGdSa0ZST2lCMWJtUmxabFpoYkhOYmFWMGdhWE1nWVd4eVpXRmtlU0IxYm1SbFptbHVaV1FzSUhOdklIZG9lU0JwYm1OeVpXRnpaU0IwYUdVZ1lYSnlZWGtnYzJsNlpUOWNjbHh1THk4Z1VtVmhaR2x1WnlCdmRYUnphV1JsSUhSb1pTQmliM1Z1WkhNZ2IyWWdZVzRnWVhKeVlYa2dhWE1nY21Wc1lYUnBkbVZzZVNCemJHOTNJR0psWTJGMWMyVWdhWFJjY2x4dUx5OGdhR0Z6SUhSb1pTQnphV1JsSUdWbVptVmpkQ0J2WmlCelkyRnVibWx1WnlCMGFHVWdjSEp2ZEc5MGVYQmxJR05vWVdsdUxseHlYRzUyWVhJZ2RXNWtaV1pXWVd4eklEMGdXMTA3WEhKY2JuWmhjaUJFWld4bGRHVWdQU0I3SUdSbGJHVjBaVG9nZEhKMVpTQjlMQ0JFWld4bGRHVlNZVzVuWlNBOUlHWjFibU4wYVc5dUlDZ3BJSHNnY21WMGRYSnVJRVJsYkdWMFpUc2dmVHRjY2x4dWRtRnlJRUp5WldGcklEMGdleUJpY21WaGF6b2dkSEoxWlNCOU8xeHlYRzUyWVhJZ1JXMXdkSGxNWldGbUlEMGdLR1oxYm1OMGFXOXVJQ2dwSUh0Y2NseHVJQ0FnSUhaaGNpQnVJRDBnYm1WM0lFSk9iMlJsS0NrN1hISmNiaUFnSUNCdUxtbHpVMmhoY21Wa0lEMGdkSEoxWlR0Y2NseHVJQ0FnSUhKbGRIVnliaUJ1TzF4eVhHNTlLU2dwTzF4eVhHNTJZWElnUlcxd2RIbEJjbkpoZVNBOUlGdGRPMXh5WEc1MllYSWdVbVYxYzJWa1FYSnlZWGtnUFNCYlhUc2dMeThnWVhOemRXMWxaQ0IwYUhKbFlXUXRiRzlqWVd4Y2NseHVablZ1WTNScGIyNGdZMmhsWTJzb1ptRmpkQ2tnZTF4eVhHNGdJQ0FnZG1GeUlHRnlaM01nUFNCYlhUdGNjbHh1SUNBZ0lHWnZjaUFvZG1GeUlGOXBJRDBnTVRzZ1gya2dQQ0JoY21kMWJXVnVkSE11YkdWdVozUm9PeUJmYVNzcktTQjdYSEpjYmlBZ0lDQWdJQ0FnWVhKbmMxdGZhU0F0SURGZElEMGdZWEpuZFcxbGJuUnpXMTlwWFR0Y2NseHVJQ0FnSUgxY2NseHVJQ0FnSUdsbUlDZ2habUZqZENrZ2UxeHlYRzRnSUNBZ0lDQWdJR0Z5WjNNdWRXNXphR2xtZENnblFpc2dkSEpsWlNjcE95QXZMeUJoZENCaVpXZHBibTVwYm1jZ2IyWWdiV1Z6YzJGblpWeHlYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGhjbWR6TG1wdmFXNG9KeUFuS1NrN1hISmNiaUFnSUNCOVhISmNibjFjY2x4dUx5b3FJRUVnUWxSeVpXVWdabkp2ZW1WdUlHbHVJSFJvWlNCbGJYQjBlU0J6ZEdGMFpTNGdLaTljY2x4dVpYaHdiM0owY3k1RmJYQjBlVUpVY21WbElEMGdLR1oxYm1OMGFXOXVJQ2dwSUhzZ2RtRnlJSFFnUFNCdVpYY2dRbFJ5WldVb0tUc2dkQzVtY21WbGVtVW9LVHNnY21WMGRYSnVJSFE3SUgwcEtDazdYSEpjYmlJc0lDSXZMeUIwYUdWelpTQmhjbVZ1SjNRZ2NtVmhiR3g1SUhCeWFYWmhkR1VzSUdKMWRDQnViM0lnWVhKbElIUm9aWGtnY21WaGJHeDVJSFZ6WldaMWJDQjBieUJrYjJOMWJXVnVkRnh1WEc0dktpcGNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibU5zWVhOeklFeDFlRzl1UlhKeWIzSWdaWGgwWlc1a2N5QkZjbkp2Y2lCN2ZWeHVYRzR2S2lwY2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJKYm5aaGJHbGtSR0YwWlZScGJXVkZjbkp2Y2lCbGVIUmxibVJ6SUV4MWVHOXVSWEp5YjNJZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loeVpXRnpiMjRwSUh0Y2JpQWdJQ0J6ZFhCbGNpaGdTVzUyWVd4cFpDQkVZWFJsVkdsdFpUb2dKSHR5WldGemIyNHVkRzlOWlhOellXZGxLQ2w5WUNrN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdTVzUyWVd4cFpFbHVkR1Z5ZG1Gc1JYSnliM0lnWlhoMFpXNWtjeUJNZFhodmJrVnljbTl5SUh0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvY21WaGMyOXVLU0I3WEc0Z0lDQWdjM1Z3WlhJb1lFbHVkbUZzYVdRZ1NXNTBaWEoyWVd3NklDUjdjbVZoYzI5dUxuUnZUV1Z6YzJGblpTZ3BmV0FwTzF4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFbHVkbUZzYVdSRWRYSmhkR2x2YmtWeWNtOXlJR1Y0ZEdWdVpITWdUSFY0YjI1RmNuSnZjaUI3WEc0Z0lHTnZibk4wY25WamRHOXlLSEpsWVhOdmJpa2dlMXh1SUNBZ0lITjFjR1Z5S0dCSmJuWmhiR2xrSUVSMWNtRjBhVzl1T2lBa2UzSmxZWE52Ymk1MGIwMWxjM05oWjJVb0tYMWdLVHRjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCRGIyNW1iR2xqZEdsdVoxTndaV05wWm1sallYUnBiMjVGY25KdmNpQmxlSFJsYm1SeklFeDFlRzl1UlhKeWIzSWdlMzFjYmx4dUx5b3FYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1NXNTJZV3hwWkZWdWFYUkZjbkp2Y2lCbGVIUmxibVJ6SUV4MWVHOXVSWEp5YjNJZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loMWJtbDBLU0I3WEc0Z0lDQWdjM1Z3WlhJb1lFbHVkbUZzYVdRZ2RXNXBkQ0FrZTNWdWFYUjlZQ2s3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1NXNTJZV3hwWkVGeVozVnRaVzUwUlhKeWIzSWdaWGgwWlc1a2N5Qk1kWGh2YmtWeWNtOXlJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklGcHZibVZKYzBGaWMzUnlZV04wUlhKeWIzSWdaWGgwWlc1a2N5Qk1kWGh2YmtWeWNtOXlJSHRjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc0Z0lDQWdjM1Z3WlhJb1hDSmFiMjVsSUdseklHRnVJR0ZpYzNSeVlXTjBJR05zWVhOelhDSXBPMXh1SUNCOVhHNTlYRzRpTENBaUx5b3FYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzVjYm1OdmJuTjBJRzRnUFNCY0ltNTFiV1Z5YVdOY0lpeGNiaUFnY3lBOUlGd2ljMmh2Y25SY0lpeGNiaUFnYkNBOUlGd2liRzl1WjF3aU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1JFRlVSVjlUU0U5U1ZDQTlJSHRjYmlBZ2VXVmhjam9nYml4Y2JpQWdiVzl1ZEdnNklHNHNYRzRnSUdSaGVUb2diaXhjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCRVFWUkZYMDFGUkNBOUlIdGNiaUFnZVdWaGNqb2diaXhjYmlBZ2JXOXVkR2c2SUhNc1hHNGdJR1JoZVRvZ2JpeGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JFUVZSRlgwMUZSRjlYU1ZSSVgxZEZSVXRFUVZrZ1BTQjdYRzRnSUhsbFlYSTZJRzRzWEc0Z0lHMXZiblJvT2lCekxGeHVJQ0JrWVhrNklHNHNYRzRnSUhkbFpXdGtZWGs2SUhNc1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdSRUZVUlY5R1ZVeE1JRDBnZTF4dUlDQjVaV0Z5T2lCdUxGeHVJQ0J0YjI1MGFEb2diQ3hjYmlBZ1pHRjVPaUJ1TEZ4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElFUkJWRVZmU0ZWSFJTQTlJSHRjYmlBZ2VXVmhjam9nYml4Y2JpQWdiVzl1ZEdnNklHd3NYRzRnSUdSaGVUb2diaXhjYmlBZ2QyVmxhMlJoZVRvZ2JDeGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JVU1UxRlgxTkpUVkJNUlNBOUlIdGNiaUFnYUc5MWNqb2diaXhjYmlBZ2JXbHVkWFJsT2lCdUxGeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRlJKVFVWZlYwbFVTRjlUUlVOUFRrUlRJRDBnZTF4dUlDQm9iM1Z5T2lCdUxGeHVJQ0J0YVc1MWRHVTZJRzRzWEc0Z0lITmxZMjl1WkRvZ2JpeGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JVU1UxRlgxZEpWRWhmVTBoUFVsUmZUMFpHVTBWVUlEMGdlMXh1SUNCb2IzVnlPaUJ1TEZ4dUlDQnRhVzUxZEdVNklHNHNYRzRnSUhObFkyOXVaRG9nYml4Y2JpQWdkR2x0WlZwdmJtVk9ZVzFsT2lCekxGeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRlJKVFVWZlYwbFVTRjlNVDA1SFgwOUdSbE5GVkNBOUlIdGNiaUFnYUc5MWNqb2diaXhjYmlBZ2JXbHVkWFJsT2lCdUxGeHVJQ0J6WldOdmJtUTZJRzRzWEc0Z0lIUnBiV1ZhYjI1bFRtRnRaVG9nYkN4Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQlVTVTFGWHpJMFgxTkpUVkJNUlNBOUlIdGNiaUFnYUc5MWNqb2diaXhjYmlBZ2JXbHVkWFJsT2lCdUxGeHVJQ0JvYjNWeVEzbGpiR1U2SUZ3aWFESXpYQ0lzWEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1ZFbE5SVjh5TkY5WFNWUklYMU5GUTA5T1JGTWdQU0I3WEc0Z0lHaHZkWEk2SUc0c1hHNGdJRzFwYm5WMFpUb2diaXhjYmlBZ2MyVmpiMjVrT2lCdUxGeHVJQ0JvYjNWeVEzbGpiR1U2SUZ3aWFESXpYQ0lzWEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1ZFbE5SVjh5TkY5WFNWUklYMU5JVDFKVVgwOUdSbE5GVkNBOUlIdGNiaUFnYUc5MWNqb2diaXhjYmlBZ2JXbHVkWFJsT2lCdUxGeHVJQ0J6WldOdmJtUTZJRzRzWEc0Z0lHaHZkWEpEZVdOc1pUb2dYQ0pvTWpOY0lpeGNiaUFnZEdsdFpWcHZibVZPWVcxbE9pQnpMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUZSSlRVVmZNalJmVjBsVVNGOU1UMDVIWDA5R1JsTkZWQ0E5SUh0Y2JpQWdhRzkxY2pvZ2JpeGNiaUFnYldsdWRYUmxPaUJ1TEZ4dUlDQnpaV052Ym1RNklHNHNYRzRnSUdodmRYSkRlV05zWlRvZ1hDSm9Nak5jSWl4Y2JpQWdkR2x0WlZwdmJtVk9ZVzFsT2lCc0xGeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRVJCVkVWVVNVMUZYMU5JVDFKVUlEMGdlMXh1SUNCNVpXRnlPaUJ1TEZ4dUlDQnRiMjUwYURvZ2JpeGNiaUFnWkdGNU9pQnVMRnh1SUNCb2IzVnlPaUJ1TEZ4dUlDQnRhVzUxZEdVNklHNHNYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnUkVGVVJWUkpUVVZmVTBoUFVsUmZWMGxVU0Y5VFJVTlBUa1JUSUQwZ2UxeHVJQ0I1WldGeU9pQnVMRnh1SUNCdGIyNTBhRG9nYml4Y2JpQWdaR0Y1T2lCdUxGeHVJQ0JvYjNWeU9pQnVMRnh1SUNCdGFXNTFkR1U2SUc0c1hHNGdJSE5sWTI5dVpEb2diaXhjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCRVFWUkZWRWxOUlY5TlJVUWdQU0I3WEc0Z0lIbGxZWEk2SUc0c1hHNGdJRzF2Ym5Sb09pQnpMRnh1SUNCa1lYazZJRzRzWEc0Z0lHaHZkWEk2SUc0c1hHNGdJRzFwYm5WMFpUb2diaXhjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCRVFWUkZWRWxOUlY5TlJVUmZWMGxVU0Y5VFJVTlBUa1JUSUQwZ2UxeHVJQ0I1WldGeU9pQnVMRnh1SUNCdGIyNTBhRG9nY3l4Y2JpQWdaR0Y1T2lCdUxGeHVJQ0JvYjNWeU9pQnVMRnh1SUNCdGFXNTFkR1U2SUc0c1hHNGdJSE5sWTI5dVpEb2diaXhjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCRVFWUkZWRWxOUlY5TlJVUmZWMGxVU0Y5WFJVVkxSRUZaSUQwZ2UxeHVJQ0I1WldGeU9pQnVMRnh1SUNCdGIyNTBhRG9nY3l4Y2JpQWdaR0Y1T2lCdUxGeHVJQ0IzWldWclpHRjVPaUJ6TEZ4dUlDQm9iM1Z5T2lCdUxGeHVJQ0J0YVc1MWRHVTZJRzRzWEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1JFRlVSVlJKVFVWZlJsVk1UQ0E5SUh0Y2JpQWdlV1ZoY2pvZ2JpeGNiaUFnYlc5dWRHZzZJR3dzWEc0Z0lHUmhlVG9nYml4Y2JpQWdhRzkxY2pvZ2JpeGNiaUFnYldsdWRYUmxPaUJ1TEZ4dUlDQjBhVzFsV205dVpVNWhiV1U2SUhNc1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdSRUZVUlZSSlRVVmZSbFZNVEY5WFNWUklYMU5GUTA5T1JGTWdQU0I3WEc0Z0lIbGxZWEk2SUc0c1hHNGdJRzF2Ym5Sb09pQnNMRnh1SUNCa1lYazZJRzRzWEc0Z0lHaHZkWEk2SUc0c1hHNGdJRzFwYm5WMFpUb2diaXhjYmlBZ2MyVmpiMjVrT2lCdUxGeHVJQ0IwYVcxbFdtOXVaVTVoYldVNklITXNYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnUkVGVVJWUkpUVVZmU0ZWSFJTQTlJSHRjYmlBZ2VXVmhjam9nYml4Y2JpQWdiVzl1ZEdnNklHd3NYRzRnSUdSaGVUb2diaXhjYmlBZ2QyVmxhMlJoZVRvZ2JDeGNiaUFnYUc5MWNqb2diaXhjYmlBZ2JXbHVkWFJsT2lCdUxGeHVJQ0IwYVcxbFdtOXVaVTVoYldVNklHd3NYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnUkVGVVJWUkpUVVZmU0ZWSFJWOVhTVlJJWDFORlEwOU9SRk1nUFNCN1hHNGdJSGxsWVhJNklHNHNYRzRnSUcxdmJuUm9PaUJzTEZ4dUlDQmtZWGs2SUc0c1hHNGdJSGRsWld0a1lYazZJR3dzWEc0Z0lHaHZkWEk2SUc0c1hHNGdJRzFwYm5WMFpUb2diaXhjYmlBZ2MyVmpiMjVrT2lCdUxGeHVJQ0IwYVcxbFdtOXVaVTVoYldVNklHd3NYRzU5TzF4dUlpd2dJaThxWEc0Z0lGUm9hWE1nYVhNZ2FuVnpkQ0JoSUdwMWJtc2daSEpoZDJWeUxDQmpiMjUwWVdsdWFXNW5JR0Z1ZVhSb2FXNW5JSFZ6WldRZ1lXTnliM056SUcxMWJIUnBjR3hsSUdOc1lYTnpaWE11WEc0Z0lFSmxZMkYxYzJVZ1RIVjRiMjRnYVhNZ2MyMWhiR3dvYVhOb0tTd2dkR2hwY3lCemFHOTFiR1FnYzNSaGVTQnpiV0ZzYkNCaGJtUWdkMlVnZDI5dUozUWdkMjl5Y25rZ1lXSnZkWFFnYzNCc2FYUjBhVzVuWEc0Z0lHbDBJSFZ3SUdsdWRHOHNJSE5oZVN3Z2NHRnljMmx1WjFWMGFXd3Vhbk1nWVc1a0lHSmhjMmxqVlhScGJDNXFjeUJoYm1RZ2MyOGdiMjR1SUVKMWRDQjBhR1Y1SUdGeVpTQmthWFpwWkdWa0lIVndJR0o1SUdabFlYUjFjbVVnWVhKbFlTNWNiaW92WEc1Y2JtbHRjRzl5ZENCN0lFbHVkbUZzYVdSQmNtZDFiV1Z1ZEVWeWNtOXlJSDBnWm5KdmJTQmNJaTR1TDJWeWNtOXljeTVxYzF3aU8xeHVYRzR2S2lwY2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JseHVMeThnVkZsUVJWTmNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2x6Vlc1a1pXWnBibVZrS0c4cElIdGNiaUFnY21WMGRYSnVJSFI1Y0dWdlppQnZJRDA5UFNCY0luVnVaR1ZtYVc1bFpGd2lPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FYTk9kVzFpWlhJb2J5a2dlMXh1SUNCeVpYUjFjbTRnZEhsd1pXOW1JRzhnUFQwOUlGd2liblZ0WW1WeVhDSTdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwbHVkR1ZuWlhJb2J5a2dlMXh1SUNCeVpYUjFjbTRnZEhsd1pXOW1JRzhnUFQwOUlGd2liblZ0WW1WeVhDSWdKaVlnYnlBbElERWdQVDA5SURBN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzFOMGNtbHVaeWh2S1NCN1hHNGdJSEpsZEhWeWJpQjBlWEJsYjJZZ2J5QTlQVDBnWENKemRISnBibWRjSWp0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2x6UkdGMFpTaHZLU0I3WEc0Z0lISmxkSFZ5YmlCUFltcGxZM1F1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuTG1OaGJHd29ieWtnUFQwOUlGd2lXMjlpYW1WamRDQkVZWFJsWFZ3aU8xeHVmVnh1WEc0dkx5QkRRVkJCUWtsTVNWUkpSVk5jYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdoaGMxSmxiR0YwYVhabEtDa2dlMXh1SUNCMGNua2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGVYQmxiMllnU1c1MGJDQWhQVDBnWENKMWJtUmxabWx1WldSY0lpQW1KaUFoSVVsdWRHd3VVbVZzWVhScGRtVlVhVzFsUm05eWJXRjBPMXh1SUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNCOVhHNTlYRzVjYmk4dklFOUNTa1ZEVkZNZ1FVNUVJRUZTVWtGWlUxeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdiV0Y1WW1WQmNuSmhlU2gwYUdsdVp5a2dlMXh1SUNCeVpYUjFjbTRnUVhKeVlYa3VhWE5CY25KaGVTaDBhR2x1WnlrZ1B5QjBhR2x1WnlBNklGdDBhR2x1WjEwN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJpWlhOMFFua29ZWEp5TENCaWVTd2dZMjl0Y0dGeVpTa2dlMXh1SUNCcFppQW9ZWEp5TG14bGJtZDBhQ0E5UFQwZ01Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCMWJtUmxabWx1WldRN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUdGeWNpNXlaV1IxWTJVb0tHSmxjM1FzSUc1bGVIUXBJRDArSUh0Y2JpQWdJQ0JqYjI1emRDQndZV2x5SUQwZ1cySjVLRzVsZUhRcExDQnVaWGgwWFR0Y2JpQWdJQ0JwWmlBb0lXSmxjM1FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ3WVdseU8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyOXRjR0Z5WlNoaVpYTjBXekJkTENCd1lXbHlXekJkS1NBOVBUMGdZbVZ6ZEZzd1hTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHSmxjM1E3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCd1lXbHlPMXh1SUNBZ0lIMWNiaUFnZlN3Z2JuVnNiQ2xiTVYwN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ3YVdOcktHOWlhaXdnYTJWNWN5a2dlMXh1SUNCeVpYUjFjbTRnYTJWNWN5NXlaV1IxWTJVb0tHRXNJR3NwSUQwK0lIdGNiaUFnSUNCaFcydGRJRDBnYjJKcVcydGRPMXh1SUNBZ0lISmxkSFZ5YmlCaE8xeHVJQ0I5TENCN2ZTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCb1lYTlBkMjVRY205d1pYSjBlU2h2WW1vc0lIQnliM0FwSUh0Y2JpQWdjbVYwZFhKdUlFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWFHRnpUM2R1VUhKdmNHVnlkSGt1WTJGc2JDaHZZbW9zSUhCeWIzQXBPMXh1ZlZ4dVhHNHZMeUJPVlUxQ1JWSlRJRUZPUkNCVFZGSkpUa2RUWEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGJuUmxaMlZ5UW1WMGQyVmxiaWgwYUdsdVp5d2dZbTkwZEc5dExDQjBiM0FwSUh0Y2JpQWdjbVYwZFhKdUlHbHpTVzUwWldkbGNpaDBhR2x1WnlrZ0ppWWdkR2hwYm1jZ1BqMGdZbTkwZEc5dElDWW1JSFJvYVc1bklEdzlJSFJ2Y0R0Y2JuMWNibHh1THk4Z2VDQWxJRzRnWW5WMElIUmhhMlZ6SUhSb1pTQnphV2R1SUc5bUlHNGdhVzV6ZEdWaFpDQnZaaUI0WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWm14dmIzSk5iMlFvZUN3Z2Jpa2dlMXh1SUNCeVpYUjFjbTRnZUNBdElHNGdLaUJOWVhSb0xtWnNiMjl5S0hnZ0x5QnVLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIQmhaRk4wWVhKMEtHbHVjSFYwTENCdUlEMGdNaWtnZTF4dUlDQmpiMjV6ZENCcGMwNWxaeUE5SUdsdWNIVjBJRHdnTUR0Y2JpQWdiR1YwSUhCaFpHUmxaRHRjYmlBZ2FXWWdLR2x6VG1WbktTQjdYRzRnSUNBZ2NHRmtaR1ZrSUQwZ1hDSXRYQ0lnS3lBb1hDSmNJaUFySUMxcGJuQjFkQ2t1Y0dGa1UzUmhjblFvYml3Z1hDSXdYQ0lwTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhCaFpHUmxaQ0E5SUNoY0lsd2lJQ3NnYVc1d2RYUXBMbkJoWkZOMFlYSjBLRzRzSUZ3aU1Gd2lLVHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjR0ZrWkdWa08xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY0dGeWMyVkpiblJsWjJWeUtITjBjbWx1WnlrZ2UxeHVJQ0JwWmlBb2FYTlZibVJsWm1sdVpXUW9jM1J5YVc1bktTQjhmQ0J6ZEhKcGJtY2dQVDA5SUc1MWJHd2dmSHdnYzNSeWFXNW5JRDA5UFNCY0lsd2lLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIVnVaR1ZtYVc1bFpEdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnlaWFIxY200Z2NHRnljMlZKYm5Rb2MzUnlhVzVuTENBeE1DazdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEJoY25ObFJteHZZWFJwYm1jb2MzUnlhVzVuS1NCN1hHNGdJR2xtSUNocGMxVnVaR1ZtYVc1bFpDaHpkSEpwYm1jcElIeDhJSE4wY21sdVp5QTlQVDBnYm5Wc2JDQjhmQ0J6ZEhKcGJtY2dQVDA5SUZ3aVhDSXBJSHRjYmlBZ0lDQnlaWFIxY200Z2RXNWtaV1pwYm1Wa08xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCd1lYSnpaVVpzYjJGMEtITjBjbWx1WnlrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIQmhjbk5sVFdsc2JHbHpLR1p5WVdOMGFXOXVLU0I3WEc0Z0lDOHZJRkpsZEhWeWJpQjFibVJsWm1sdVpXUWdLR2x1YzNSbFlXUWdiMllnTUNrZ2FXNGdkR2hsYzJVZ1kyRnpaWE1zSUhkb1pYSmxJR1p5WVdOMGFXOXVJR2x6SUc1dmRDQnpaWFJjYmlBZ2FXWWdLR2x6Vlc1a1pXWnBibVZrS0daeVlXTjBhVzl1S1NCOGZDQm1jbUZqZEdsdmJpQTlQVDBnYm5Wc2JDQjhmQ0JtY21GamRHbHZiaUE5UFQwZ1hDSmNJaWtnZTF4dUlDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdZMjl1YzNRZ1ppQTlJSEJoY25ObFJteHZZWFFvWENJd0xsd2lJQ3NnWm5KaFkzUnBiMjRwSUNvZ01UQXdNRHRjYmlBZ0lDQnlaWFIxY200Z1RXRjBhQzVtYkc5dmNpaG1LVHRjYmlBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY205MWJtUlVieWh1ZFcxaVpYSXNJR1JwWjJsMGN5d2dkRzkzWVhKa1dtVnlieUE5SUdaaGJITmxLU0I3WEc0Z0lHTnZibk4wSUdaaFkzUnZjaUE5SURFd0lDb3FJR1JwWjJsMGN5eGNiaUFnSUNCeWIzVnVaR1Z5SUQwZ2RHOTNZWEprV21WeWJ5QS9JRTFoZEdndWRISjFibU1nT2lCTllYUm9Mbkp2ZFc1a08xeHVJQ0J5WlhSMWNtNGdjbTkxYm1SbGNpaHVkVzFpWlhJZ0tpQm1ZV04wYjNJcElDOGdabUZqZEc5eU8xeHVmVnh1WEc0dkx5QkVRVlJGSUVKQlUwbERVMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVhOTVpXRndXV1ZoY2loNVpXRnlLU0I3WEc0Z0lISmxkSFZ5YmlCNVpXRnlJQ1VnTkNBOVBUMGdNQ0FtSmlBb2VXVmhjaUFsSURFd01DQWhQVDBnTUNCOGZDQjVaV0Z5SUNVZ05EQXdJRDA5UFNBd0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdSaGVYTkpibGxsWVhJb2VXVmhjaWtnZTF4dUlDQnlaWFIxY200Z2FYTk1aV0Z3V1dWaGNpaDVaV0Z5S1NBL0lETTJOaUE2SURNMk5UdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdSaGVYTkpiazF2Ym5Sb0tIbGxZWElzSUcxdmJuUm9LU0I3WEc0Z0lHTnZibk4wSUcxdlpFMXZiblJvSUQwZ1pteHZiM0pOYjJRb2JXOXVkR2dnTFNBeExDQXhNaWtnS3lBeExGeHVJQ0FnSUcxdlpGbGxZWElnUFNCNVpXRnlJQ3NnS0cxdmJuUm9JQzBnYlc5a1RXOXVkR2dwSUM4Z01USTdYRzVjYmlBZ2FXWWdLRzF2WkUxdmJuUm9JRDA5UFNBeUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUdselRHVmhjRmxsWVhJb2JXOWtXV1ZoY2lrZ1B5QXlPU0E2SURJNE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCYk16RXNJRzUxYkd3c0lETXhMQ0F6TUN3Z016RXNJRE13TENBek1Td2dNekVzSURNd0xDQXpNU3dnTXpBc0lETXhYVnR0YjJSTmIyNTBhQ0F0SURGZE8xeHVJQ0I5WEc1OVhHNWNiaTh2SUdOdmRtVnlkQ0JoSUdOaGJHVnVaR0Z5SUc5aWFtVmpkQ0IwYnlCaElHeHZZMkZzSUhScGJXVnpkR0Z0Y0NBb1pYQnZZMmdzSUdKMWRDQjNhWFJvSUhSb1pTQnZabVp6WlhRZ1ltRnJaV1FnYVc0cFhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2IySnFWRzlNYjJOaGJGUlRLRzlpYWlrZ2UxeHVJQ0JzWlhRZ1pDQTlJRVJoZEdVdVZWUkRLRnh1SUNBZ0lHOWlhaTU1WldGeUxGeHVJQ0FnSUc5aWFpNXRiMjUwYUNBdElERXNYRzRnSUNBZ2IySnFMbVJoZVN4Y2JpQWdJQ0J2WW1vdWFHOTFjaXhjYmlBZ0lDQnZZbW91YldsdWRYUmxMRnh1SUNBZ0lHOWlhaTV6WldOdmJtUXNYRzRnSUNBZ2IySnFMbTFwYkd4cGMyVmpiMjVrWEc0Z0lDazdYRzVjYmlBZ0x5OGdabTl5SUd4bFoyRmplU0J5WldGemIyNXpMQ0I1WldGeWN5QmlaWFIzWldWdUlEQWdZVzVrSURrNUlHRnlaU0JwYm5SbGNuQnlaWFJsWkNCaGN5QXhPVmhZT3lCeVpYWmxjblFnZEdoaGRGeHVJQ0JwWmlBb2IySnFMbmxsWVhJZ1BDQXhNREFnSmlZZ2IySnFMbmxsWVhJZ1BqMGdNQ2tnZTF4dUlDQWdJR1FnUFNCdVpYY2dSR0YwWlNoa0tUdGNiaUFnSUNCa0xuTmxkRlZVUTBaMWJHeFpaV0Z5S0dRdVoyVjBWVlJEUm5Wc2JGbGxZWElvS1NBdElERTVNREFwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUFyWkR0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSGRsWld0elNXNVhaV1ZyV1dWaGNpaDNaV1ZyV1dWaGNpa2dlMXh1SUNCamIyNXpkQ0J3TVNBOVhHNGdJQ0FnSUNBb2QyVmxhMWxsWVhJZ0sxeHVJQ0FnSUNBZ0lDQk5ZWFJvTG1ac2IyOXlLSGRsWld0WlpXRnlJQzhnTkNrZ0xWeHVJQ0FnSUNBZ0lDQk5ZWFJvTG1ac2IyOXlLSGRsWld0WlpXRnlJQzhnTVRBd0tTQXJYRzRnSUNBZ0lDQWdJRTFoZEdndVpteHZiM0lvZDJWbGExbGxZWElnTHlBME1EQXBLU0FsWEc0Z0lDQWdJQ0EzTEZ4dUlDQWdJR3hoYzNRZ1BTQjNaV1ZyV1dWaGNpQXRJREVzWEc0Z0lDQWdjRElnUFNBb2JHRnpkQ0FySUUxaGRHZ3VabXh2YjNJb2JHRnpkQ0F2SURRcElDMGdUV0YwYUM1bWJHOXZjaWhzWVhOMElDOGdNVEF3S1NBcklFMWhkR2d1Wm14dmIzSW9iR0Z6ZENBdklEUXdNQ2twSUNVZ056dGNiaUFnY21WMGRYSnVJSEF4SUQwOVBTQTBJSHg4SUhBeUlEMDlQU0F6SUQ4Z05UTWdPaUExTWp0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFZ1ZEhKMWJtTmhkR1ZaWldGeUtIbGxZWElwSUh0Y2JpQWdhV1lnS0hsbFlYSWdQaUE1T1NrZ2UxeHVJQ0FnSUhKbGRIVnliaUI1WldGeU8xeHVJQ0I5SUdWc2MyVWdjbVYwZFhKdUlIbGxZWElnUGlBMk1DQS9JREU1TURBZ0t5QjVaV0Z5SURvZ01qQXdNQ0FySUhsbFlYSTdYRzU5WEc1Y2JpOHZJRkJCVWxOSlRrZGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEJoY25ObFdtOXVaVWx1Wm04b2RITXNJRzltWm5ObGRFWnZjbTFoZEN3Z2JHOWpZV3hsTENCMGFXMWxXbTl1WlNBOUlHNTFiR3dwSUh0Y2JpQWdZMjl1YzNRZ1pHRjBaU0E5SUc1bGR5QkVZWFJsS0hSektTeGNiaUFnSUNCcGJuUnNUM0IwY3lBOUlIdGNiaUFnSUNBZ0lHaHZkWEpEZVdOc1pUb2dYQ0pvTWpOY0lpeGNiaUFnSUNBZ0lIbGxZWEk2SUZ3aWJuVnRaWEpwWTF3aUxGeHVJQ0FnSUNBZ2JXOXVkR2c2SUZ3aU1pMWthV2RwZEZ3aUxGeHVJQ0FnSUNBZ1pHRjVPaUJjSWpJdFpHbG5hWFJjSWl4Y2JpQWdJQ0FnSUdodmRYSTZJRndpTWkxa2FXZHBkRndpTEZ4dUlDQWdJQ0FnYldsdWRYUmxPaUJjSWpJdFpHbG5hWFJjSWl4Y2JpQWdJQ0I5TzF4dVhHNGdJR2xtSUNoMGFXMWxXbTl1WlNrZ2UxeHVJQ0FnSUdsdWRHeFBjSFJ6TG5ScGJXVmFiMjVsSUQwZ2RHbHRaVnB2Ym1VN1hHNGdJSDFjYmx4dUlDQmpiMjV6ZENCdGIyUnBabWxsWkNBOUlIc2dkR2x0WlZwdmJtVk9ZVzFsT2lCdlptWnpaWFJHYjNKdFlYUXNJQzR1TG1sdWRHeFBjSFJ6SUgwN1hHNWNiaUFnWTI5dWMzUWdjR0Z5YzJWa0lEMGdibVYzSUVsdWRHd3VSR0YwWlZScGJXVkdiM0p0WVhRb2JHOWpZV3hsTENCdGIyUnBabWxsWkNsY2JpQWdJQ0F1Wm05eWJXRjBWRzlRWVhKMGN5aGtZWFJsS1Z4dUlDQWdJQzVtYVc1a0tDaHRLU0E5UGlCdExuUjVjR1V1ZEc5TWIzZGxja05oYzJVb0tTQTlQVDBnWENKMGFXMWxlbTl1Wlc1aGJXVmNJaWs3WEc0Z0lISmxkSFZ5YmlCd1lYSnpaV1FnUHlCd1lYSnpaV1F1ZG1Gc2RXVWdPaUJ1ZFd4c08xeHVmVnh1WEc0dkx5QnphV2R1WldSUFptWnpaWFFvSnkwMUp5d2dKek13SnlrZ0xUNGdMVE16TUZ4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhOcFoyNWxaRTltWm5ObGRDaHZabVpJYjNWeVUzUnlMQ0J2Wm1aTmFXNTFkR1ZUZEhJcElIdGNiaUFnYkdWMElHOW1aa2h2ZFhJZ1BTQndZWEp6WlVsdWRDaHZabVpJYjNWeVUzUnlMQ0F4TUNrN1hHNWNiaUFnTHk4Z1pHOXVKM1FnZkh3Z2RHaHBjeUJpWldOaGRYTmxJSGRsSUhkaGJuUWdkRzhnY0hKbGMyVnlkbVVnTFRCY2JpQWdhV1lnS0U1MWJXSmxjaTVwYzA1aFRpaHZabVpJYjNWeUtTa2dlMXh1SUNBZ0lHOW1aa2h2ZFhJZ1BTQXdPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUWdiMlptVFdsdUlEMGdjR0Z5YzJWSmJuUW9iMlptVFdsdWRYUmxVM1J5TENBeE1Da2dmSHdnTUN4Y2JpQWdJQ0J2Wm1aTmFXNVRhV2R1WldRZ1BTQnZabVpJYjNWeUlEd2dNQ0I4ZkNCUFltcGxZM1F1YVhNb2IyWm1TRzkxY2l3Z0xUQXBJRDhnTFc5bVprMXBiaUE2SUc5bVprMXBianRjYmlBZ2NtVjBkWEp1SUc5bVpraHZkWElnS2lBMk1DQXJJRzltWmsxcGJsTnBaMjVsWkR0Y2JuMWNibHh1THk4Z1EwOUZVa05KVDA1Y2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRnpUblZ0WW1WeUtIWmhiSFZsS1NCN1hHNGdJR052Ym5OMElHNTFiV1Z5YVdOV1lXeDFaU0E5SUU1MWJXSmxjaWgyWVd4MVpTazdYRzRnSUdsbUlDaDBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlGd2lZbTl2YkdWaGJsd2lJSHg4SUhaaGJIVmxJRDA5UFNCY0lsd2lJSHg4SUU1MWJXSmxjaTVwYzA1aFRpaHVkVzFsY21salZtRnNkV1VwS1Z4dUlDQWdJSFJvY205M0lHNWxkeUJKYm5aaGJHbGtRWEpuZFcxbGJuUkZjbkp2Y2loZ1NXNTJZV3hwWkNCMWJtbDBJSFpoYkhWbElDUjdkbUZzZFdWOVlDazdYRzRnSUhKbGRIVnliaUJ1ZFcxbGNtbGpWbUZzZFdVN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNKdFlXeHBlbVZQWW1wbFkzUW9iMkpxTENCdWIzSnRZV3hwZW1WeUtTQjdYRzRnSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1FnUFNCN2ZUdGNiaUFnWm05eUlDaGpiMjV6ZENCMUlHbHVJRzlpYWlrZ2UxeHVJQ0FnSUdsbUlDaG9ZWE5QZDI1UWNtOXdaWEowZVNodlltb3NJSFVwS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IySUQwZ2IySnFXM1ZkTzF4dUlDQWdJQ0FnYVdZZ0tIWWdQVDA5SUhWdVpHVm1hVzVsWkNCOGZDQjJJRDA5UFNCdWRXeHNLU0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJRzV2Y20xaGJHbDZaV1JiYm05eWJXRnNhWHBsY2loMUtWMGdQU0JoYzA1MWJXSmxjaWgyS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzV2Y20xaGJHbDZaV1E3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm1iM0p0WVhSUFptWnpaWFFvYjJabWMyVjBMQ0JtYjNKdFlYUXBJSHRjYmlBZ1kyOXVjM1FnYUc5MWNuTWdQU0JOWVhSb0xuUnlkVzVqS0UxaGRHZ3VZV0p6S0c5bVpuTmxkQ0F2SURZd0tTa3NYRzRnSUNBZ2JXbHVkWFJsY3lBOUlFMWhkR2d1ZEhKMWJtTW9UV0YwYUM1aFluTW9iMlptYzJWMElDVWdOakFwS1N4Y2JpQWdJQ0J6YVdkdUlEMGdiMlptYzJWMElENDlJREFnUHlCY0lpdGNJaUE2SUZ3aUxWd2lPMXh1WEc0Z0lITjNhWFJqYUNBb1ptOXliV0YwS1NCN1hHNGdJQ0FnWTJGelpTQmNJbk5vYjNKMFhDSTZYRzRnSUNBZ0lDQnlaWFIxY200Z1lDUjdjMmxuYm4wa2UzQmhaRk4wWVhKMEtHaHZkWEp6TENBeUtYMDZKSHR3WVdSVGRHRnlkQ2h0YVc1MWRHVnpMQ0F5S1gxZ08xeHVJQ0FnSUdOaGMyVWdYQ0p1WVhKeWIzZGNJanBjYmlBZ0lDQWdJSEpsZEhWeWJpQmdKSHR6YVdkdWZTUjdhRzkxY25OOUpIdHRhVzUxZEdWeklENGdNQ0EvSUdBNkpIdHRhVzUxZEdWemZXQWdPaUJjSWx3aWZXQTdYRzRnSUNBZ1kyRnpaU0JjSW5SbFkyaHBaVndpT2x4dUlDQWdJQ0FnY21WMGRYSnVJR0FrZTNOcFoyNTlKSHR3WVdSVGRHRnlkQ2hvYjNWeWN5d2dNaWw5Skh0d1lXUlRkR0Z5ZENodGFXNTFkR1Z6TENBeUtYMWdPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpaGdWbUZzZFdVZ1ptOXliV0YwSUNSN1ptOXliV0YwZlNCcGN5QnZkWFFnYjJZZ2NtRnVaMlVnWm05eUlIQnliM0JsY25SNUlHWnZjbTFoZEdBcE8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBhVzFsVDJKcVpXTjBLRzlpYWlrZ2UxeHVJQ0J5WlhSMWNtNGdjR2xqYXlodlltb3NJRnRjSW1odmRYSmNJaXdnWENKdGFXNTFkR1ZjSWl3Z1hDSnpaV052Ym1SY0lpd2dYQ0p0YVd4c2FYTmxZMjl1WkZ3aVhTazdYRzU5WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JwWVc1aFVtVm5aWGdnUFZ4dUlDQXZXMEV0V21FdGVsOHJMVjE3TVN3eU5UWjlLRDg2T2o5Y1hDOWJRUzFhWVMxNk1DMDVYeXN0WFhzeExESTFObjBvUHpwY1hDOWJRUzFhWVMxNk1DMDVYeXN0WFhzeExESTFObjBwUHlrL0x6dGNiaUlzSUNKcGJYQnZjblFnS2lCaGN5QkdiM0p0WVhSeklHWnliMjBnWENJdUwyWnZjbTFoZEhNdWFuTmNJanRjYm1sdGNHOXlkQ0I3SUhCcFkyc2dmU0JtY205dElGd2lMaTkxZEdsc0xtcHpYQ0k3WEc1Y2JtWjFibU4wYVc5dUlITjBjbWx1WjJsbWVTaHZZbW9wSUh0Y2JpQWdjbVYwZFhKdUlFcFRUMDR1YzNSeWFXNW5hV1o1S0c5aWFpd2dUMkpxWldOMExtdGxlWE1vYjJKcUtTNXpiM0owS0NrcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibHh1Wlhod2IzSjBJR052Ym5OMElHMXZiblJvYzB4dmJtY2dQU0JiWEc0Z0lGd2lTbUZ1ZFdGeWVWd2lMRnh1SUNCY0lrWmxZbkoxWVhKNVhDSXNYRzRnSUZ3aVRXRnlZMmhjSWl4Y2JpQWdYQ0pCY0hKcGJGd2lMRnh1SUNCY0lrMWhlVndpTEZ4dUlDQmNJa3AxYm1WY0lpeGNiaUFnWENKS2RXeDVYQ0lzWEc0Z0lGd2lRWFZuZFhOMFhDSXNYRzRnSUZ3aVUyVndkR1Z0WW1WeVhDSXNYRzRnSUZ3aVQyTjBiMkpsY2x3aUxGeHVJQ0JjSWs1dmRtVnRZbVZ5WENJc1hHNGdJRndpUkdWalpXMWlaWEpjSWl4Y2JsMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnRiMjUwYUhOVGFHOXlkQ0E5SUZ0Y2JpQWdYQ0pLWVc1Y0lpeGNiaUFnWENKR1pXSmNJaXhjYmlBZ1hDSk5ZWEpjSWl4Y2JpQWdYQ0pCY0hKY0lpeGNiaUFnWENKTllYbGNJaXhjYmlBZ1hDSktkVzVjSWl4Y2JpQWdYQ0pLZFd4Y0lpeGNiaUFnWENKQmRXZGNJaXhjYmlBZ1hDSlRaWEJjSWl4Y2JpQWdYQ0pQWTNSY0lpeGNiaUFnWENKT2IzWmNJaXhjYmlBZ1hDSkVaV05jSWl4Y2JsMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnRiMjUwYUhOT1lYSnliM2NnUFNCYlhDSktYQ0lzSUZ3aVJsd2lMQ0JjSWsxY0lpd2dYQ0pCWENJc0lGd2lUVndpTENCY0lrcGNJaXdnWENKS1hDSXNJRndpUVZ3aUxDQmNJbE5jSWl3Z1hDSlBYQ0lzSUZ3aVRsd2lMQ0JjSWtSY0lsMDdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0YjI1MGFITW9iR1Z1WjNSb0tTQjdYRzRnSUhOM2FYUmphQ0FvYkdWdVozUm9LU0I3WEc0Z0lDQWdZMkZ6WlNCY0ltNWhjbkp2ZDF3aU9seHVJQ0FnSUNBZ2NtVjBkWEp1SUZzdUxpNXRiMjUwYUhOT1lYSnliM2RkTzF4dUlDQWdJR05oYzJVZ1hDSnphRzl5ZEZ3aU9seHVJQ0FnSUNBZ2NtVjBkWEp1SUZzdUxpNXRiMjUwYUhOVGFHOXlkRjA3WEc0Z0lDQWdZMkZ6WlNCY0lteHZibWRjSWpwY2JpQWdJQ0FnSUhKbGRIVnliaUJiTGk0dWJXOXVkR2h6VEc5dVoxMDdYRzRnSUNBZ1kyRnpaU0JjSW01MWJXVnlhV05jSWpwY2JpQWdJQ0FnSUhKbGRIVnliaUJiWENJeFhDSXNJRndpTWx3aUxDQmNJak5jSWl3Z1hDSTBYQ0lzSUZ3aU5Wd2lMQ0JjSWpaY0lpd2dYQ0kzWENJc0lGd2lPRndpTENCY0lqbGNJaXdnWENJeE1Gd2lMQ0JjSWpFeFhDSXNJRndpTVRKY0lsMDdYRzRnSUNBZ1kyRnpaU0JjSWpJdFpHbG5hWFJjSWpwY2JpQWdJQ0FnSUhKbGRIVnliaUJiWENJd01Wd2lMQ0JjSWpBeVhDSXNJRndpTUROY0lpd2dYQ0l3TkZ3aUxDQmNJakExWENJc0lGd2lNRFpjSWl3Z1hDSXdOMXdpTENCY0lqQTRYQ0lzSUZ3aU1EbGNJaXdnWENJeE1Gd2lMQ0JjSWpFeFhDSXNJRndpTVRKY0lsMDdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmpiMjV6ZENCM1pXVnJaR0Y1YzB4dmJtY2dQU0JiWEc0Z0lGd2lUVzl1WkdGNVhDSXNYRzRnSUZ3aVZIVmxjMlJoZVZ3aUxGeHVJQ0JjSWxkbFpHNWxjMlJoZVZ3aUxGeHVJQ0JjSWxSb2RYSnpaR0Y1WENJc1hHNGdJRndpUm5KcFpHRjVYQ0lzWEc0Z0lGd2lVMkYwZFhKa1lYbGNJaXhjYmlBZ1hDSlRkVzVrWVhsY0lpeGNibDA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0IzWldWclpHRjVjMU5vYjNKMElEMGdXMXdpVFc5dVhDSXNJRndpVkhWbFhDSXNJRndpVjJWa1hDSXNJRndpVkdoMVhDSXNJRndpUm5KcFhDSXNJRndpVTJGMFhDSXNJRndpVTNWdVhDSmRPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdkMlZsYTJSaGVYTk9ZWEp5YjNjZ1BTQmJYQ0pOWENJc0lGd2lWRndpTENCY0lsZGNJaXdnWENKVVhDSXNJRndpUmx3aUxDQmNJbE5jSWl3Z1hDSlRYQ0pkTzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2QyVmxhMlJoZVhNb2JHVnVaM1JvS1NCN1hHNGdJSE4zYVhSamFDQW9iR1Z1WjNSb0tTQjdYRzRnSUNBZ1kyRnpaU0JjSW01aGNuSnZkMXdpT2x4dUlDQWdJQ0FnY21WMGRYSnVJRnN1TGk1M1pXVnJaR0Y1YzA1aGNuSnZkMTA3WEc0Z0lDQWdZMkZ6WlNCY0luTm9iM0owWENJNlhHNGdJQ0FnSUNCeVpYUjFjbTRnV3k0dUxuZGxaV3RrWVhselUyaHZjblJkTzF4dUlDQWdJR05oYzJVZ1hDSnNiMjVuWENJNlhHNGdJQ0FnSUNCeVpYUjFjbTRnV3k0dUxuZGxaV3RrWVhselRHOXVaMTA3WEc0Z0lDQWdZMkZ6WlNCY0ltNTFiV1Z5YVdOY0lqcGNiaUFnSUNBZ0lISmxkSFZ5YmlCYlhDSXhYQ0lzSUZ3aU1sd2lMQ0JjSWpOY0lpd2dYQ0kwWENJc0lGd2lOVndpTENCY0lqWmNJaXdnWENJM1hDSmRPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2JXVnlhV1JwWlcxeklEMGdXMXdpUVUxY0lpd2dYQ0pRVFZ3aVhUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHVnlZWE5NYjI1bklEMGdXMXdpUW1WbWIzSmxJRU5vY21semRGd2lMQ0JjSWtGdWJtOGdSRzl0YVc1cFhDSmRPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdaWEpoYzFOb2IzSjBJRDBnVzF3aVFrTmNJaXdnWENKQlJGd2lYVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1Z5WVhOT1lYSnliM2NnUFNCYlhDSkNYQ0lzSUZ3aVFWd2lYVHRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWeVlYTW9iR1Z1WjNSb0tTQjdYRzRnSUhOM2FYUmphQ0FvYkdWdVozUm9LU0I3WEc0Z0lDQWdZMkZ6WlNCY0ltNWhjbkp2ZDF3aU9seHVJQ0FnSUNBZ2NtVjBkWEp1SUZzdUxpNWxjbUZ6VG1GeWNtOTNYVHRjYmlBZ0lDQmpZWE5sSUZ3aWMyaHZjblJjSWpwY2JpQWdJQ0FnSUhKbGRIVnliaUJiTGk0dVpYSmhjMU5vYjNKMFhUdGNiaUFnSUNCallYTmxJRndpYkc5dVoxd2lPbHh1SUNBZ0lDQWdjbVYwZFhKdUlGc3VMaTVsY21GelRHOXVaMTA3WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0WlhKcFpHbGxiVVp2Y2tSaGRHVlVhVzFsS0dSMEtTQjdYRzRnSUhKbGRIVnliaUJ0WlhKcFpHbGxiWE5iWkhRdWFHOTFjaUE4SURFeUlEOGdNQ0E2SURGZE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnZDJWbGEyUmhlVVp2Y2tSaGRHVlVhVzFsS0dSMExDQnNaVzVuZEdncElIdGNiaUFnY21WMGRYSnVJSGRsWld0a1lYbHpLR3hsYm1kMGFDbGJaSFF1ZDJWbGEyUmhlU0F0SURGZE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYlc5dWRHaEdiM0pFWVhSbFZHbHRaU2hrZEN3Z2JHVnVaM1JvS1NCN1hHNGdJSEpsZEhWeWJpQnRiMjUwYUhNb2JHVnVaM1JvS1Z0a2RDNXRiMjUwYUNBdElERmRPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pYSmhSbTl5UkdGMFpWUnBiV1VvWkhRc0lHeGxibWQwYUNrZ2UxeHVJQ0J5WlhSMWNtNGdaWEpoY3loc1pXNW5kR2dwVzJSMExubGxZWElnUENBd0lEOGdNQ0E2SURGZE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWm05eWJXRjBVbVZzWVhScGRtVlVhVzFsS0hWdWFYUXNJR052ZFc1MExDQnVkVzFsY21saklEMGdYQ0poYkhkaGVYTmNJaXdnYm1GeWNtOTNJRDBnWm1Gc2MyVXBJSHRjYmlBZ1kyOXVjM1FnZFc1cGRITWdQU0I3WEc0Z0lDQWdlV1ZoY25NNklGdGNJbmxsWVhKY0lpd2dYQ0o1Y2k1Y0lsMHNYRzRnSUNBZ2NYVmhjblJsY25NNklGdGNJbkYxWVhKMFpYSmNJaXdnWENKeGRISXVYQ0pkTEZ4dUlDQWdJRzF2Ym5Sb2N6b2dXMXdpYlc5dWRHaGNJaXdnWENKdGJ5NWNJbDBzWEc0Z0lDQWdkMlZsYTNNNklGdGNJbmRsWld0Y0lpd2dYQ0ozYXk1Y0lsMHNYRzRnSUNBZ1pHRjVjem9nVzF3aVpHRjVYQ0lzSUZ3aVpHRjVYQ0lzSUZ3aVpHRjVjMXdpWFN4Y2JpQWdJQ0JvYjNWeWN6b2dXMXdpYUc5MWNsd2lMQ0JjSW1oeUxsd2lYU3hjYmlBZ0lDQnRhVzUxZEdWek9pQmJYQ0p0YVc1MWRHVmNJaXdnWENKdGFXNHVYQ0pkTEZ4dUlDQWdJSE5sWTI5dVpITTZJRnRjSW5ObFkyOXVaRndpTENCY0luTmxZeTVjSWwwc1hHNGdJSDA3WEc1Y2JpQWdZMjl1YzNRZ2JHRnpkR0ZpYkdVZ1BTQmJYQ0pvYjNWeWMxd2lMQ0JjSW0xcGJuVjBaWE5jSWl3Z1hDSnpaV052Ym1SelhDSmRMbWx1WkdWNFQyWW9kVzVwZENrZ1BUMDlJQzB4TzF4dVhHNGdJR2xtSUNodWRXMWxjbWxqSUQwOVBTQmNJbUYxZEc5Y0lpQW1KaUJzWVhOMFlXSnNaU2tnZTF4dUlDQWdJR052Ym5OMElHbHpSR0Y1SUQwZ2RXNXBkQ0E5UFQwZ1hDSmtZWGx6WENJN1hHNGdJQ0FnYzNkcGRHTm9JQ2hqYjNWdWRDa2dlMXh1SUNBZ0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2FYTkVZWGtnUHlCY0luUnZiVzl5Y205M1hDSWdPaUJnYm1WNGRDQWtlM1Z1YVhSelczVnVhWFJkV3pCZGZXQTdYRzRnSUNBZ0lDQmpZWE5sSUMweE9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2FYTkVZWGtnUHlCY0lubGxjM1JsY21SaGVWd2lJRG9nWUd4aGMzUWdKSHQxYm1sMGMxdDFibWwwWFZzd1hYMWdPMXh1SUNBZ0lDQWdZMkZ6WlNBd09seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2FYTkVZWGtnUHlCY0luUnZaR0Y1WENJZ09pQmdkR2hwY3lBa2UzVnVhWFJ6VzNWdWFYUmRXekJkZldBN1hHNGdJQ0FnSUNCa1pXWmhkV3gwT2lBdkx5Qm1ZV3hzSUhSb2NtOTFaMmhjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JqYjI1emRDQnBjMGx1VUdGemRDQTlJRTlpYW1WamRDNXBjeWhqYjNWdWRDd2dMVEFwSUh4OElHTnZkVzUwSUR3Z01DeGNiaUFnSUNCbWJYUldZV3gxWlNBOUlFMWhkR2d1WVdKektHTnZkVzUwS1N4Y2JpQWdJQ0J6YVc1bmRXeGhjaUE5SUdadGRGWmhiSFZsSUQwOVBTQXhMRnh1SUNBZ0lHeHBiRlZ1YVhSeklEMGdkVzVwZEhOYmRXNXBkRjBzWEc0Z0lDQWdabTEwVlc1cGRDQTlJRzVoY25KdmQxeHVJQ0FnSUNBZ1B5QnphVzVuZFd4aGNseHVJQ0FnSUNBZ0lDQS9JR3hwYkZWdWFYUnpXekZkWEc0Z0lDQWdJQ0FnSURvZ2JHbHNWVzVwZEhOYk1sMGdmSHdnYkdsc1ZXNXBkSE5iTVYxY2JpQWdJQ0FnSURvZ2MybHVaM1ZzWVhKY2JpQWdJQ0FnSUQ4Z2RXNXBkSE5iZFc1cGRGMWJNRjFjYmlBZ0lDQWdJRG9nZFc1cGREdGNiaUFnY21WMGRYSnVJR2x6U1c1UVlYTjBJRDhnWUNSN1ptMTBWbUZzZFdWOUlDUjdabTEwVlc1cGRIMGdZV2R2WUNBNklHQnBiaUFrZTJadGRGWmhiSFZsZlNBa2UyWnRkRlZ1YVhSOVlEdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdadmNtMWhkRk4wY21sdVp5aHJibTkzYmtadmNtMWhkQ2tnZTF4dUlDQXZMeUIwYUdWelpTQmhiR3dnYUdGMlpTQjBhR1VnYjJabWMyVjBjeUJ5WlcxdmRtVmtJR0psWTJGMWMyVWdkMlVnWkc5dUozUWdhR0YyWlNCaFkyTmxjM01nZEc4Z2RHaGxiVnh1SUNBdkx5QjNhWFJvYjNWMElHRnNiQ0IwYUdVZ2FXNTBiQ0J6ZEhWbVppQjBhR2x6SUdseklHSmhZMnRtYVd4c2FXNW5YRzRnSUdOdmJuTjBJR1pwYkhSbGNtVmtJRDBnY0dsamF5aHJibTkzYmtadmNtMWhkQ3dnVzF4dUlDQWdJQ0FnWENKM1pXVnJaR0Y1WENJc1hHNGdJQ0FnSUNCY0ltVnlZVndpTEZ4dUlDQWdJQ0FnWENKNVpXRnlYQ0lzWEc0Z0lDQWdJQ0JjSW0xdmJuUm9YQ0lzWEc0Z0lDQWdJQ0JjSW1SaGVWd2lMRnh1SUNBZ0lDQWdYQ0pvYjNWeVhDSXNYRzRnSUNBZ0lDQmNJbTFwYm5WMFpWd2lMRnh1SUNBZ0lDQWdYQ0p6WldOdmJtUmNJaXhjYmlBZ0lDQWdJRndpZEdsdFpWcHZibVZPWVcxbFhDSXNYRzRnSUNBZ0lDQmNJbWh2ZFhKRGVXTnNaVndpTEZ4dUlDQWdJRjBwTEZ4dUlDQWdJR3RsZVNBOUlITjBjbWx1WjJsbWVTaG1hV3gwWlhKbFpDa3NYRzRnSUNBZ1pHRjBaVlJwYldWSWRXZGxJRDBnWENKRlJVVkZMQ0JNVEV4TUlHUXNJSGw1ZVhrc0lHZzZiVzBnWVZ3aU8xeHVJQ0J6ZDJsMFkyZ2dLR3RsZVNrZ2UxeHVJQ0FnSUdOaGMyVWdjM1J5YVc1bmFXWjVLRVp2Y20xaGRITXVSRUZVUlY5VFNFOVNWQ2s2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdYQ0pOTDJRdmVYbDVlVndpTzF4dUlDQWdJR05oYzJVZ2MzUnlhVzVuYVdaNUtFWnZjbTFoZEhNdVJFRlVSVjlOUlVRcE9seHVJQ0FnSUNBZ2NtVjBkWEp1SUZ3aVRFeE1JR1FzSUhsNWVYbGNJanRjYmlBZ0lDQmpZWE5sSUhOMGNtbHVaMmxtZVNoR2IzSnRZWFJ6TGtSQlZFVmZUVVZFWDFkSlZFaGZWMFZGUzBSQldTazZYRzRnSUNBZ0lDQnlaWFIxY200Z1hDSkZSVVVzSUV4TVRDQmtMQ0I1ZVhsNVhDSTdYRzRnSUNBZ1kyRnpaU0J6ZEhKcGJtZHBabmtvUm05eWJXRjBjeTVFUVZSRlgwWlZURXdwT2x4dUlDQWdJQ0FnY21WMGRYSnVJRndpVEV4TVRDQmtMQ0I1ZVhsNVhDSTdYRzRnSUNBZ1kyRnpaU0J6ZEhKcGJtZHBabmtvUm05eWJXRjBjeTVFUVZSRlgwaFZSMFVwT2x4dUlDQWdJQ0FnY21WMGRYSnVJRndpUlVWRlJTd2dURXhNVENCa0xDQjVlWGw1WENJN1hHNGdJQ0FnWTJGelpTQnpkSEpwYm1kcFpua29SbTl5YldGMGN5NVVTVTFGWDFOSlRWQk1SU2s2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdYQ0pvT20xdElHRmNJanRjYmlBZ0lDQmpZWE5sSUhOMGNtbHVaMmxtZVNoR2IzSnRZWFJ6TGxSSlRVVmZWMGxVU0Y5VFJVTlBUa1JUS1RwY2JpQWdJQ0FnSUhKbGRIVnliaUJjSW1nNmJXMDZjM01nWVZ3aU8xeHVJQ0FnSUdOaGMyVWdjM1J5YVc1bmFXWjVLRVp2Y20xaGRITXVWRWxOUlY5WFNWUklYMU5JVDFKVVgwOUdSbE5GVkNrNlhHNGdJQ0FnSUNCeVpYUjFjbTRnWENKb09tMXRJR0ZjSWp0Y2JpQWdJQ0JqWVhObElITjBjbWx1WjJsbWVTaEdiM0p0WVhSekxsUkpUVVZmVjBsVVNGOU1UMDVIWDA5R1JsTkZWQ2s2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdYQ0pvT20xdElHRmNJanRjYmlBZ0lDQmpZWE5sSUhOMGNtbHVaMmxtZVNoR2IzSnRZWFJ6TGxSSlRVVmZNalJmVTBsTlVFeEZLVHBjYmlBZ0lDQWdJSEpsZEhWeWJpQmNJa2hJT20xdFhDSTdYRzRnSUNBZ1kyRnpaU0J6ZEhKcGJtZHBabmtvUm05eWJXRjBjeTVVU1UxRlh6STBYMWRKVkVoZlUwVkRUMDVFVXlrNlhHNGdJQ0FnSUNCeVpYUjFjbTRnWENKSVNEcHRiVHB6YzF3aU8xeHVJQ0FnSUdOaGMyVWdjM1J5YVc1bmFXWjVLRVp2Y20xaGRITXVWRWxOUlY4eU5GOVhTVlJJWDFOSVQxSlVYMDlHUmxORlZDazZYRzRnSUNBZ0lDQnlaWFIxY200Z1hDSklTRHB0YlZ3aU8xeHVJQ0FnSUdOaGMyVWdjM1J5YVc1bmFXWjVLRVp2Y20xaGRITXVWRWxOUlY4eU5GOVhTVlJJWDB4UFRrZGZUMFpHVTBWVUtUcGNiaUFnSUNBZ0lISmxkSFZ5YmlCY0lraElPbTF0WENJN1hHNGdJQ0FnWTJGelpTQnpkSEpwYm1kcFpua29SbTl5YldGMGN5NUVRVlJGVkVsTlJWOVRTRTlTVkNrNlhHNGdJQ0FnSUNCeVpYUjFjbTRnWENKTkwyUXZlWGw1ZVN3Z2FEcHRiU0JoWENJN1hHNGdJQ0FnWTJGelpTQnpkSEpwYm1kcFpua29SbTl5YldGMGN5NUVRVlJGVkVsTlJWOU5SVVFwT2x4dUlDQWdJQ0FnY21WMGRYSnVJRndpVEV4TUlHUXNJSGw1ZVhrc0lHZzZiVzBnWVZ3aU8xeHVJQ0FnSUdOaGMyVWdjM1J5YVc1bmFXWjVLRVp2Y20xaGRITXVSRUZVUlZSSlRVVmZSbFZNVENrNlhHNGdJQ0FnSUNCeVpYUjFjbTRnWENKTVRFeE1JR1FzSUhsNWVYa3NJR2c2YlcwZ1lWd2lPMXh1SUNBZ0lHTmhjMlVnYzNSeWFXNW5hV1o1S0VadmNtMWhkSE11UkVGVVJWUkpUVVZmU0ZWSFJTazZYRzRnSUNBZ0lDQnlaWFIxY200Z1pHRjBaVlJwYldWSWRXZGxPMXh1SUNBZ0lHTmhjMlVnYzNSeWFXNW5hV1o1S0VadmNtMWhkSE11UkVGVVJWUkpUVVZmVTBoUFVsUmZWMGxVU0Y5VFJVTlBUa1JUS1RwY2JpQWdJQ0FnSUhKbGRIVnliaUJjSWswdlpDOTVlWGw1TENCb09tMXRPbk56SUdGY0lqdGNiaUFnSUNCallYTmxJSE4wY21sdVoybG1lU2hHYjNKdFlYUnpMa1JCVkVWVVNVMUZYMDFGUkY5WFNWUklYMU5GUTA5T1JGTXBPbHh1SUNBZ0lDQWdjbVYwZFhKdUlGd2lURXhNSUdRc0lIbDVlWGtzSUdnNmJXMDZjM01nWVZ3aU8xeHVJQ0FnSUdOaGMyVWdjM1J5YVc1bmFXWjVLRVp2Y20xaGRITXVSRUZVUlZSSlRVVmZUVVZFWDFkSlZFaGZWMFZGUzBSQldTazZYRzRnSUNBZ0lDQnlaWFIxY200Z1hDSkZSVVVzSUdRZ1RFeE1JSGw1ZVhrc0lHZzZiVzBnWVZ3aU8xeHVJQ0FnSUdOaGMyVWdjM1J5YVc1bmFXWjVLRVp2Y20xaGRITXVSRUZVUlZSSlRVVmZSbFZNVEY5WFNWUklYMU5GUTA5T1JGTXBPbHh1SUNBZ0lDQWdjbVYwZFhKdUlGd2lURXhNVENCa0xDQjVlWGw1TENCb09tMXRPbk56SUdGY0lqdGNiaUFnSUNCallYTmxJSE4wY21sdVoybG1lU2hHYjNKdFlYUnpMa1JCVkVWVVNVMUZYMGhWUjBWZlYwbFVTRjlUUlVOUFRrUlRLVHBjYmlBZ0lDQWdJSEpsZEhWeWJpQmNJa1ZGUlVVc0lFeE1URXdnWkN3Z2VYbDVlU3dnYURwdGJUcHpjeUJoWENJN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsZEhWeWJpQmtZWFJsVkdsdFpVaDFaMlU3WEc0Z0lIMWNibjFjYmlJc0lDSnBiWEJ2Y25RZ0tpQmhjeUJGYm1kc2FYTm9JR1p5YjIwZ1hDSXVMMlZ1WjJ4cGMyZ3Vhbk5jSWp0Y2JtbHRjRzl5ZENBcUlHRnpJRVp2Y20xaGRITWdabkp2YlNCY0lpNHZabTl5YldGMGN5NXFjMXdpTzF4dWFXMXdiM0owSUhzZ2NHRmtVM1JoY25RZ2ZTQm1jbTl0SUZ3aUxpOTFkR2xzTG1welhDSTdYRzVjYm1aMWJtTjBhVzl1SUhOMGNtbHVaMmxtZVZSdmEyVnVjeWh6Y0d4cGRITXNJSFJ2YTJWdVZHOVRkSEpwYm1jcElIdGNiaUFnYkdWMElITWdQU0JjSWx3aU8xeHVJQ0JtYjNJZ0tHTnZibk4wSUhSdmEyVnVJRzltSUhOd2JHbDBjeWtnZTF4dUlDQWdJR2xtSUNoMGIydGxiaTVzYVhSbGNtRnNLU0I3WEc0Z0lDQWdJQ0J6SUNzOUlIUnZhMlZ1TG5aaGJEdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnY3lBclBTQjBiMnRsYmxSdlUzUnlhVzVuS0hSdmEyVnVMblpoYkNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ6TzF4dWZWeHVYRzVqYjI1emRDQnRZV055YjFSdmEyVnVWRzlHYjNKdFlYUlBjSFJ6SUQwZ2UxeHVJQ0JFT2lCR2IzSnRZWFJ6TGtSQlZFVmZVMGhQVWxRc1hHNGdJRVJFT2lCR2IzSnRZWFJ6TGtSQlZFVmZUVVZFTEZ4dUlDQkVSRVE2SUVadmNtMWhkSE11UkVGVVJWOUdWVXhNTEZ4dUlDQkVSRVJFT2lCR2IzSnRZWFJ6TGtSQlZFVmZTRlZIUlN4Y2JpQWdkRG9nUm05eWJXRjBjeTVVU1UxRlgxTkpUVkJNUlN4Y2JpQWdkSFE2SUVadmNtMWhkSE11VkVsTlJWOVhTVlJJWDFORlEwOU9SRk1zWEc0Z0lIUjBkRG9nUm05eWJXRjBjeTVVU1UxRlgxZEpWRWhmVTBoUFVsUmZUMFpHVTBWVUxGeHVJQ0IwZEhSME9pQkdiM0p0WVhSekxsUkpUVVZmVjBsVVNGOU1UMDVIWDA5R1JsTkZWQ3hjYmlBZ1ZEb2dSbTl5YldGMGN5NVVTVTFGWHpJMFgxTkpUVkJNUlN4Y2JpQWdWRlE2SUVadmNtMWhkSE11VkVsTlJWOHlORjlYU1ZSSVgxTkZRMDlPUkZNc1hHNGdJRlJVVkRvZ1JtOXliV0YwY3k1VVNVMUZYekkwWDFkSlZFaGZVMGhQVWxSZlQwWkdVMFZVTEZ4dUlDQlVWRlJVT2lCR2IzSnRZWFJ6TGxSSlRVVmZNalJmVjBsVVNGOU1UMDVIWDA5R1JsTkZWQ3hjYmlBZ1pqb2dSbTl5YldGMGN5NUVRVlJGVkVsTlJWOVRTRTlTVkN4Y2JpQWdabVk2SUVadmNtMWhkSE11UkVGVVJWUkpUVVZmVFVWRUxGeHVJQ0JtWm1ZNklFWnZjbTFoZEhNdVJFRlVSVlJKVFVWZlJsVk1UQ3hjYmlBZ1ptWm1aam9nUm05eWJXRjBjeTVFUVZSRlZFbE5SVjlJVlVkRkxGeHVJQ0JHT2lCR2IzSnRZWFJ6TGtSQlZFVlVTVTFGWDFOSVQxSlVYMWRKVkVoZlUwVkRUMDVFVXl4Y2JpQWdSa1k2SUVadmNtMWhkSE11UkVGVVJWUkpUVVZmVFVWRVgxZEpWRWhmVTBWRFQwNUVVeXhjYmlBZ1JrWkdPaUJHYjNKdFlYUnpMa1JCVkVWVVNVMUZYMFpWVEV4ZlYwbFVTRjlUUlVOUFRrUlRMRnh1SUNCR1JrWkdPaUJHYjNKdFlYUnpMa1JCVkVWVVNVMUZYMGhWUjBWZlYwbFVTRjlUUlVOUFRrUlRMRnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRVp2Y20xaGRIUmxjaUI3WEc0Z0lITjBZWFJwWXlCamNtVmhkR1VvYkc5allXeGxMQ0J2Y0hSeklEMGdlMzBwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUVadmNtMWhkSFJsY2loc2IyTmhiR1VzSUc5d2RITXBPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJSEJoY25ObFJtOXliV0YwS0dadGRDa2dlMXh1SUNBZ0lHeGxkQ0JqZFhKeVpXNTBJRDBnYm5Wc2JDeGNiaUFnSUNBZ0lHTjFjbkpsYm5SR2RXeHNJRDBnWENKY0lpeGNiaUFnSUNBZ0lHSnlZV05yWlhSbFpDQTlJR1poYkhObE8xeHVJQ0FnSUdOdmJuTjBJSE53YkdsMGN5QTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWm0xMExteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmpJRDBnWm0xMExtTm9ZWEpCZENocEtUdGNiaUFnSUNBZ0lHbG1JQ2hqSUQwOVBTQmNJaWRjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWTNWeWNtVnVkRVoxYkd3dWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUhOd2JHbDBjeTV3ZFhOb0tIc2diR2wwWlhKaGJEb2dZbkpoWTJ0bGRHVmtMQ0IyWVd3NklHTjFjbkpsYm5SR2RXeHNJSDBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTjFjbkpsYm5RZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnSUNCamRYSnlaVzUwUm5Wc2JDQTlJRndpWENJN1hHNGdJQ0FnSUNBZ0lHSnlZV05yWlhSbFpDQTlJQ0ZpY21GamEyVjBaV1E3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dKeVlXTnJaWFJsWkNrZ2UxeHVJQ0FnSUNBZ0lDQmpkWEp5Wlc1MFJuVnNiQ0FyUFNCak8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpJRDA5UFNCamRYSnlaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lHTjFjbkpsYm5SR2RXeHNJQ3M5SUdNN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZM1Z5Y21WdWRFWjFiR3d1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSE53YkdsMGN5NXdkWE5vS0hzZ2JHbDBaWEpoYkRvZ1ptRnNjMlVzSUhaaGJEb2dZM1Z5Y21WdWRFWjFiR3dnZlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdZM1Z5Y21WdWRFWjFiR3dnUFNCak8xeHVJQ0FnSUNBZ0lDQmpkWEp5Wlc1MElEMGdZenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvWTNWeWNtVnVkRVoxYkd3dWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdjM0JzYVhSekxuQjFjMmdvZXlCc2FYUmxjbUZzT2lCaWNtRmphMlYwWldRc0lIWmhiRG9nWTNWeWNtVnVkRVoxYkd3Z2ZTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhOd2JHbDBjenRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJ0WVdOeWIxUnZhMlZ1Vkc5R2IzSnRZWFJQY0hSektIUnZhMlZ1S1NCN1hHNGdJQ0FnY21WMGRYSnVJRzFoWTNKdlZHOXJaVzVVYjBadmNtMWhkRTl3ZEhOYmRHOXJaVzVkTzF4dUlDQjlYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9iRzlqWVd4bExDQm1iM0p0WVhSUGNIUnpLU0I3WEc0Z0lDQWdkR2hwY3k1dmNIUnpJRDBnWm05eWJXRjBUM0IwY3p0Y2JpQWdJQ0IwYUdsekxteHZZeUE5SUd4dlkyRnNaVHRjYmlBZ0lDQjBhR2x6TG5ONWMzUmxiVXh2WXlBOUlHNTFiR3c3WEc0Z0lIMWNibHh1SUNCbWIzSnRZWFJYYVhSb1UzbHpkR1Z0UkdWbVlYVnNkQ2hrZEN3Z2IzQjBjeWtnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbk41YzNSbGJVeHZZeUE5UFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NXplWE4wWlcxTWIyTWdQU0IwYUdsekxteHZZeTV5WldSbFptRjFiSFJVYjFONWMzUmxiU2dwTzF4dUlDQWdJSDFjYmlBZ0lDQmpiMjV6ZENCa1ppQTlJSFJvYVhNdWMzbHpkR1Z0VEc5akxtUjBSbTl5YldGMGRHVnlLR1IwTENCN0lDNHVMblJvYVhNdWIzQjBjeXdnTGk0dWIzQjBjeUI5S1R0Y2JpQWdJQ0J5WlhSMWNtNGdaR1l1Wm05eWJXRjBLQ2s3WEc0Z0lIMWNibHh1SUNCbWIzSnRZWFJFWVhSbFZHbHRaU2hrZEN3Z2IzQjBjeUE5SUh0OUtTQjdYRzRnSUNBZ1kyOXVjM1FnWkdZZ1BTQjBhR2x6TG14dll5NWtkRVp2Y20xaGRIUmxjaWhrZEN3Z2V5QXVMaTUwYUdsekxtOXdkSE1zSUM0dUxtOXdkSE1nZlNrN1hHNGdJQ0FnY21WMGRYSnVJR1JtTG1admNtMWhkQ2dwTzF4dUlDQjlYRzVjYmlBZ1ptOXliV0YwUkdGMFpWUnBiV1ZRWVhKMGN5aGtkQ3dnYjNCMGN5QTlJSHQ5S1NCN1hHNGdJQ0FnWTI5dWMzUWdaR1lnUFNCMGFHbHpMbXh2WXk1a2RFWnZjbTFoZEhSbGNpaGtkQ3dnZXlBdUxpNTBhR2x6TG05d2RITXNJQzR1TG05d2RITWdmU2s3WEc0Z0lDQWdjbVYwZFhKdUlHUm1MbVp2Y20xaGRGUnZVR0Z5ZEhNb0tUdGNiaUFnZlZ4dVhHNGdJSEpsYzI5c2RtVmtUM0IwYVc5dWN5aGtkQ3dnYjNCMGN5QTlJSHQ5S1NCN1hHNGdJQ0FnWTI5dWMzUWdaR1lnUFNCMGFHbHpMbXh2WXk1a2RFWnZjbTFoZEhSbGNpaGtkQ3dnZXlBdUxpNTBhR2x6TG05d2RITXNJQzR1TG05d2RITWdmU2s3WEc0Z0lDQWdjbVYwZFhKdUlHUm1MbkpsYzI5c2RtVmtUM0IwYVc5dWN5Z3BPMXh1SUNCOVhHNWNiaUFnYm5WdEtHNHNJSEFnUFNBd0tTQjdYRzRnSUNBZ0x5OGdkMlVnWjJWMElITnZiV1VnY0dWeVppQnZkWFFnYjJZZ1pHOXBibWNnZEdocGN5Qm9aWEpsTENCaGJtNXZlV2x1WjJ4NVhHNGdJQ0FnYVdZZ0tIUm9hWE11YjNCMGN5NW1iM0pqWlZOcGJYQnNaU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSEJoWkZOMFlYSjBLRzRzSUhBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJRzl3ZEhNZ1BTQjdJQzR1TG5Sb2FYTXViM0IwY3lCOU8xeHVYRzRnSUNBZ2FXWWdLSEFnUGlBd0tTQjdYRzRnSUNBZ0lDQnZjSFJ6TG5CaFpGUnZJRDBnY0R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1c2IyTXViblZ0WW1WeVJtOXliV0YwZEdWeUtHOXdkSE1wTG1admNtMWhkQ2h1S1R0Y2JpQWdmVnh1WEc0Z0lHWnZjbTFoZEVSaGRHVlVhVzFsUm5KdmJWTjBjbWx1Wnloa2RDd2dabTEwS1NCN1hHNGdJQ0FnWTI5dWMzUWdhMjV2ZDI1RmJtZHNhWE5vSUQwZ2RHaHBjeTVzYjJNdWJHbHpkR2x1WjAxdlpHVW9LU0E5UFQwZ1hDSmxibHdpTEZ4dUlDQWdJQ0FnZFhObFJHRjBaVlJwYldWR2IzSnRZWFIwWlhJZ1BTQjBhR2x6TG14dll5NXZkWFJ3ZFhSRFlXeGxibVJoY2lBbUppQjBhR2x6TG14dll5NXZkWFJ3ZFhSRFlXeGxibVJoY2lBaFBUMGdYQ0puY21WbmIzSjVYQ0lzWEc0Z0lDQWdJQ0J6ZEhKcGJtY2dQU0FvYjNCMGN5d2daWGgwY21GamRDa2dQVDRnZEdocGN5NXNiMk11WlhoMGNtRmpkQ2hrZEN3Z2IzQjBjeXdnWlhoMGNtRmpkQ2tzWEc0Z0lDQWdJQ0JtYjNKdFlYUlBabVp6WlhRZ1BTQW9iM0IwY3lrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pIUXVhWE5QWm1aelpYUkdhWGhsWkNBbUppQmtkQzV2Wm1aelpYUWdQVDA5SURBZ0ppWWdiM0IwY3k1aGJHeHZkMW9wSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1hDSmFYQ0k3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1pIUXVhWE5XWVd4cFpDQS9JR1IwTG5wdmJtVXVabTl5YldGMFQyWm1jMlYwS0dSMExuUnpMQ0J2Y0hSekxtWnZjbTFoZENrZ09pQmNJbHdpTzF4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUcxbGNtbGthV1Z0SUQwZ0tDa2dQVDVjYmlBZ0lDQWdJQ0FnYTI1dmQyNUZibWRzYVhOb1hHNGdJQ0FnSUNBZ0lDQWdQeUJGYm1kc2FYTm9MbTFsY21sa2FXVnRSbTl5UkdGMFpWUnBiV1VvWkhRcFhHNGdJQ0FnSUNBZ0lDQWdPaUJ6ZEhKcGJtY29leUJvYjNWeU9pQmNJbTUxYldWeWFXTmNJaXdnYUc5MWNrTjVZMnhsT2lCY0ltZ3hNbHdpSUgwc0lGd2laR0Y1Y0dWeWFXOWtYQ0lwTEZ4dUlDQWdJQ0FnYlc5dWRHZ2dQU0FvYkdWdVozUm9MQ0J6ZEdGdVpHRnNiMjVsS1NBOVBseHVJQ0FnSUNBZ0lDQnJibTkzYmtWdVoyeHBjMmhjYmlBZ0lDQWdJQ0FnSUNBL0lFVnVaMnhwYzJndWJXOXVkR2hHYjNKRVlYUmxWR2x0WlNoa2RDd2diR1Z1WjNSb0tWeHVJQ0FnSUNBZ0lDQWdJRG9nYzNSeWFXNW5LSE4wWVc1a1lXeHZibVVnUHlCN0lHMXZiblJvT2lCc1pXNW5kR2dnZlNBNklIc2diVzl1ZEdnNklHeGxibWQwYUN3Z1pHRjVPaUJjSW01MWJXVnlhV05jSWlCOUxDQmNJbTF2Ym5Sb1hDSXBMRnh1SUNBZ0lDQWdkMlZsYTJSaGVTQTlJQ2hzWlc1bmRHZ3NJSE4wWVc1a1lXeHZibVVwSUQwK1hHNGdJQ0FnSUNBZ0lHdHViM2R1Ulc1bmJHbHphRnh1SUNBZ0lDQWdJQ0FnSUQ4Z1JXNW5iR2x6YUM1M1pXVnJaR0Y1Um05eVJHRjBaVlJwYldVb1pIUXNJR3hsYm1kMGFDbGNiaUFnSUNBZ0lDQWdJQ0E2SUhOMGNtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoYm1SaGJHOXVaU0EvSUhzZ2QyVmxhMlJoZVRvZ2JHVnVaM1JvSUgwZ09pQjdJSGRsWld0a1lYazZJR3hsYm1kMGFDd2diVzl1ZEdnNklGd2liRzl1WjF3aUxDQmtZWGs2SUZ3aWJuVnRaWEpwWTF3aUlIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lGd2lkMlZsYTJSaGVWd2lYRzRnSUNBZ0lDQWdJQ0FnSUNBcExGeHVJQ0FnSUNBZ2JXRjVZbVZOWVdOeWJ5QTlJQ2gwYjJ0bGJpa2dQVDRnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JtYjNKdFlYUlBjSFJ6SUQwZ1JtOXliV0YwZEdWeUxtMWhZM0p2Vkc5clpXNVViMFp2Y20xaGRFOXdkSE1vZEc5clpXNHBPMXh1SUNBZ0lDQWdJQ0JwWmlBb1ptOXliV0YwVDNCMGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtWnZjbTFoZEZkcGRHaFRlWE4wWlcxRVpXWmhkV3gwS0dSMExDQm1iM0p0WVhSUGNIUnpLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEc5clpXNDdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0JsY21FZ1BTQW9iR1Z1WjNSb0tTQTlQbHh1SUNBZ0lDQWdJQ0JyYm05M2JrVnVaMnhwYzJnZ1B5QkZibWRzYVhOb0xtVnlZVVp2Y2tSaGRHVlVhVzFsS0dSMExDQnNaVzVuZEdncElEb2djM1J5YVc1bktIc2daWEpoT2lCc1pXNW5kR2dnZlN3Z1hDSmxjbUZjSWlrc1hHNGdJQ0FnSUNCMGIydGxibFJ2VTNSeWFXNW5JRDBnS0hSdmEyVnVLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDOHZJRmRvWlhKbElIQnZjM05wWW14bE9pQm9kSFJ3T2k4dlkyeGtjaTUxYm1samIyUmxMbTl5Wnk5MGNtRnVjMnhoZEdsdmJpOWtZWFJsTFhScGJXVXRNUzlrWVhSbExYUnBiV1VqVkU5RExWTjBZVzVrWVd4dmJtVXRkbk11TFVadmNtMWhkQzFUZEhsc1pYTmNiaUFnSUNBZ0lDQWdjM2RwZEdOb0lDaDBiMnRsYmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUcxelhHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0lsTmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTUxYlNoa2RDNXRhV3hzYVhObFkyOXVaQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW5WY0lqcGNiaUFnSUNBZ0lDQWdJQ0F2THlCbVlXeHNjeUIwYUhKdmRXZG9YRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbE5UVTF3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWJuVnRLR1IwTG0xcGJHeHBjMlZqYjI1a0xDQXpLVHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QnpaV052Ym1SelhHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0luTmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTUxYlNoa2RDNXpaV052Ym1RcE8xeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSnpjMXdpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11Ym5WdEtHUjBMbk5sWTI5dVpDd2dNaWs3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdabkpoWTNScGIyNWhiQ0J6WldOdmJtUnpYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJblYxWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dWRXMG9UV0YwYUM1bWJHOXZjaWhrZEM1dGFXeHNhWE5sWTI5dVpDQXZJREV3S1N3Z01pazdYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJblYxZFZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWJuVnRLRTFoZEdndVpteHZiM0lvWkhRdWJXbHNiR2x6WldOdmJtUWdMeUF4TURBcEtUdGNiaUFnSUNBZ0lDQWdJQ0F2THlCdGFXNTFkR1Z6WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW0xY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtNTFiU2hrZEM1dGFXNTFkR1VwTzF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKdGJWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXViblZ0S0dSMExtMXBiblYwWlN3Z01pazdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2FHOTFjbk5jYmlBZ0lDQWdJQ0FnSUNCallYTmxJRndpYUZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWJuVnRLR1IwTG1odmRYSWdKU0F4TWlBOVBUMGdNQ0EvSURFeUlEb2daSFF1YUc5MWNpQWxJREV5S1R0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWFHaGNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTUxYlNoa2RDNW9iM1Z5SUNVZ01USWdQVDA5SURBZ1B5QXhNaUE2SUdSMExtaHZkWElnSlNBeE1pd2dNaWs3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSWtoY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtNTFiU2hrZEM1b2IzVnlLVHRjYmlBZ0lDQWdJQ0FnSUNCallYTmxJRndpU0VoY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtNTFiU2hrZEM1b2IzVnlMQ0F5S1R0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJ2Wm1aelpYUmNiaUFnSUNBZ0lDQWdJQ0JqWVhObElGd2lXbHdpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnYkdsclpTQXJObHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdadmNtMWhkRTltWm5ObGRDaDdJR1p2Y20xaGREb2dYQ0p1WVhKeWIzZGNJaXdnWVd4c2IzZGFPaUIwYUdsekxtOXdkSE11WVd4c2IzZGFJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKYVdsd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdiR2xyWlNBck1EWTZNREJjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWIzSnRZWFJQWm1aelpYUW9leUJtYjNKdFlYUTZJRndpYzJodmNuUmNJaXdnWVd4c2IzZGFPaUIwYUdsekxtOXdkSE11WVd4c2IzZGFJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKYVdscGNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJR3hwYTJVZ0t6QTJNREJjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWIzSnRZWFJQWm1aelpYUW9leUJtYjNKdFlYUTZJRndpZEdWamFHbGxYQ0lzSUdGc2JHOTNXam9nZEdocGN5NXZjSFJ6TG1Gc2JHOTNXaUI5S1R0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVdscGFXbHdpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnYkdsclpTQkZVMVJjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2RDNTZiMjVsTG05bVpuTmxkRTVoYldVb1pIUXVkSE1zSUhzZ1ptOXliV0YwT2lCY0luTm9iM0owWENJc0lHeHZZMkZzWlRvZ2RHaHBjeTVzYjJNdWJHOWpZV3hsSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSmFXbHBhV2x3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2JHbHJaU0JGWVhOMFpYSnVJRk4wWVc1a1lYSmtJRlJwYldWY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmtkQzU2YjI1bExtOW1abk5sZEU1aGJXVW9aSFF1ZEhNc0lIc2dabTl5YldGME9pQmNJbXh2Ym1kY0lpd2diRzlqWVd4bE9pQjBhR2x6TG14dll5NXNiMk5oYkdVZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2VtOXVaVnh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0o2WENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCc2FXdGxJRUZ0WlhKcFkyRXZUbVYzWDFsdmNtdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrZEM1NmIyNWxUbUZ0WlR0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJ0WlhKcFpHbGxiWE5jYmlBZ0lDQWdJQ0FnSUNCallYTmxJRndpWVZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzFsY21sa2FXVnRLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdaR0YwWlhOY2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVpGd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWelpVUmhkR1ZVYVcxbFJtOXliV0YwZEdWeUlEOGdjM1J5YVc1bktIc2daR0Y1T2lCY0ltNTFiV1Z5YVdOY0lpQjlMQ0JjSW1SaGVWd2lLU0E2SUhSb2FYTXViblZ0S0dSMExtUmhlU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1Sa1hDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZFhObFJHRjBaVlJwYldWR2IzSnRZWFIwWlhJZ1B5QnpkSEpwYm1jb2V5QmtZWGs2SUZ3aU1pMWthV2RwZEZ3aUlIMHNJRndpWkdGNVhDSXBJRG9nZEdocGN5NXVkVzBvWkhRdVpHRjVMQ0F5S1R0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUIzWldWclpHRjVjeUF0SUhOMFlXNWtZV3h2Ym1WY2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVkxd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdiR2xyWlNBeFhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dWRXMG9aSFF1ZDJWbGEyUmhlU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1Oalkxd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdiR2xyWlNBblZIVmxjeWRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCM1pXVnJaR0Y1S0Z3aWMyaHZjblJjSWl3Z2RISjFaU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1OalkyTmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJR3hwYTJVZ0oxUjFaWE5rWVhrblhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkMlZsYTJSaGVTaGNJbXh2Ym1kY0lpd2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltTmpZMk5qWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCc2FXdGxJQ2RVSjF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIZGxaV3RrWVhrb1hDSnVZWEp5YjNkY0lpd2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdMeThnZDJWbGEyUmhlWE1nTFNCbWIzSnRZWFJjYmlBZ0lDQWdJQ0FnSUNCallYTmxJRndpUlZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2JHbHJaU0F4WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV1ZFcwb1pIUXVkMlZsYTJSaGVTazdYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJa1ZGUlZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2JHbHJaU0FuVkhWbGN5ZGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIzWldWclpHRjVLRndpYzJodmNuUmNJaXdnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0pGUlVWRlhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QnNhV3RsSUNkVWRXVnpaR0Y1SjF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIZGxaV3RrWVhrb1hDSnNiMjVuWENJc0lHWmhiSE5sS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVJVVkZSVVZjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUd4cGEyVWdKMVFuWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2QyVmxhMlJoZVNoY0ltNWhjbkp2ZDF3aUxDQm1ZV3h6WlNrN1hHNGdJQ0FnSUNBZ0lDQWdMeThnYlc5dWRHaHpJQzBnYzNSaGJtUmhiRzl1WlZ4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKTVhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QnNhV3RsSURGY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjFjMlZFWVhSbFZHbHRaVVp2Y20xaGRIUmxjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQS9JSE4wY21sdVp5aDdJRzF2Ym5Sb09pQmNJbTUxYldWeWFXTmNJaXdnWkdGNU9pQmNJbTUxYldWeWFXTmNJaUI5TENCY0ltMXZiblJvWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ2RHaHBjeTV1ZFcwb1pIUXViVzl1ZEdncE8xeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSk1URndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnYkdsclpTQXdNU3dnWkc5bGMyNG5kQ0J6WldWdElIUnZJSGR2Y210Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjFjMlZFWVhSbFZHbHRaVVp2Y20xaGRIUmxjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQS9JSE4wY21sdVp5aDdJRzF2Ym5Sb09pQmNJakl0WkdsbmFYUmNJaXdnWkdGNU9pQmNJbTUxYldWeWFXTmNJaUI5TENCY0ltMXZiblJvWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ2RHaHBjeTV1ZFcwb1pIUXViVzl1ZEdnc0lESXBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0pNVEV4Y0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklHeHBhMlVnU21GdVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiVzl1ZEdnb1hDSnphRzl5ZEZ3aUxDQjBjblZsS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVRFeE1URndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnYkdsclpTQktZVzUxWVhKNVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiVzl1ZEdnb1hDSnNiMjVuWENJc0lIUnlkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKTVRFeE1URndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnYkdsclpTQktYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYlc5dWRHZ29YQ0p1WVhKeWIzZGNJaXdnZEhKMVpTazdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2JXOXVkR2h6SUMwZ1ptOXliV0YwWEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSWsxY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklHeHBhMlVnTVZ4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIVnpaVVJoZEdWVWFXMWxSbTl5YldGMGRHVnlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdjM1J5YVc1bktIc2diVzl1ZEdnNklGd2liblZ0WlhKcFkxd2lJSDBzSUZ3aWJXOXVkR2hjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lCMGFHbHpMbTUxYlNoa2RDNXRiMjUwYUNrN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0lrMU5YQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJzYVd0bElEQXhYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZFhObFJHRjBaVlJwYldWR2IzSnRZWFIwWlhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnUHlCemRISnBibWNvZXlCdGIyNTBhRG9nWENJeUxXUnBaMmwwWENJZ2ZTd2dYQ0p0YjI1MGFGd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJSFJvYVhNdWJuVnRLR1IwTG0xdmJuUm9MQ0F5S1R0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVRVMU5YQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJzYVd0bElFcGhibHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUcxdmJuUm9LRndpYzJodmNuUmNJaXdnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0pOVFUxTlhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QnNhV3RsSUVwaGJuVmhjbmxjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdGIyNTBhQ2hjSW14dmJtZGNJaXdnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0pOVFUxTlRWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdiR2xyWlNCS1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiVzl1ZEdnb1hDSnVZWEp5YjNkY0lpd2dabUZzYzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQzh2SUhsbFlYSnpYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbmxjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUd4cGEyVWdNakF4TkZ4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIVnpaVVJoZEdWVWFXMWxSbTl5YldGMGRHVnlJRDhnYzNSeWFXNW5LSHNnZVdWaGNqb2dYQ0p1ZFcxbGNtbGpYQ0lnZlN3Z1hDSjVaV0Z5WENJcElEb2dkR2hwY3k1dWRXMG9aSFF1ZVdWaGNpazdYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbmw1WENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCc2FXdGxJREUwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RYTmxSR0YwWlZScGJXVkdiM0p0WVhSMFpYSmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1B5QnpkSEpwYm1jb2V5QjVaV0Z5T2lCY0lqSXRaR2xuYVhSY0lpQjlMQ0JjSW5sbFlYSmNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdPaUIwYUdsekxtNTFiU2hrZEM1NVpXRnlMblJ2VTNSeWFXNW5LQ2t1YzJ4cFkyVW9MVElwTENBeUtUdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElGd2llWGw1ZVZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2JHbHJaU0F3TURFeVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkWE5sUkdGMFpWUnBiV1ZHYjNKdFlYUjBaWEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdQeUJ6ZEhKcGJtY29leUI1WldGeU9pQmNJbTUxYldWeWFXTmNJaUI5TENCY0lubGxZWEpjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lCMGFHbHpMbTUxYlNoa2RDNTVaV0Z5TENBMEtUdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElGd2llWGw1ZVhsNVhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QnNhV3RsSURBd01EQXhNbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWelpVUmhkR1ZVYVcxbFJtOXliV0YwZEdWeVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUQ4Z2MzUnlhVzVuS0hzZ2VXVmhjam9nWENKdWRXMWxjbWxqWENJZ2ZTd2dYQ0o1WldGeVhDSXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dkR2hwY3k1dWRXMG9aSFF1ZVdWaGNpd2dOaWs3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdaWEpoYzF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKSFhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QnNhV3RsSUVGRVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdaWEpoS0Z3aWMyaHZjblJjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0lrZEhYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJzYVd0bElFRnVibThnUkc5dGFXNXBYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWlhKaEtGd2liRzl1WjF3aUtUdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElGd2lSMGRIUjBkY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJsY21Fb1hDSnVZWEp5YjNkY0lpazdYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbXRyWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dWRXMG9aSFF1ZDJWbGExbGxZWEl1ZEc5VGRISnBibWNvS1M1emJHbGpaU2d0TWlrc0lESXBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0pyYTJ0clhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NXVkVzBvWkhRdWQyVmxhMWxsWVhJc0lEUXBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0pYWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dWRXMG9aSFF1ZDJWbGEwNTFiV0psY2lrN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0lsZFhYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV1ZFcwb1pIUXVkMlZsYTA1MWJXSmxjaXdnTWlrN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltOWNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTUxYlNoa2RDNXZjbVJwYm1Gc0tUdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElGd2liMjl2WENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dWRXMG9aSFF1YjNKa2FXNWhiQ3dnTXlrN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0luRmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJR3hwYTJVZ01WeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWJuVnRLR1IwTG5GMVlYSjBaWElwTzF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKeGNWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdiR2xyWlNBd01WeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWJuVnRLR1IwTG5GMVlYSjBaWElzSURJcE8xeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSllYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV1ZFcwb1RXRjBhQzVtYkc5dmNpaGtkQzUwY3lBdklERXdNREFwS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWVGd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXViblZ0S0dSMExuUnpLVHRjYmlBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHMWhlV0psVFdGamNtOG9kRzlyWlc0cE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1WEc0Z0lDQWdjbVYwZFhKdUlITjBjbWx1WjJsbWVWUnZhMlZ1Y3loR2IzSnRZWFIwWlhJdWNHRnljMlZHYjNKdFlYUW9abTEwS1N3Z2RHOXJaVzVVYjFOMGNtbHVaeWs3WEc0Z0lIMWNibHh1SUNCbWIzSnRZWFJFZFhKaGRHbHZia1p5YjIxVGRISnBibWNvWkhWeUxDQm1iWFFwSUh0Y2JpQWdJQ0JqYjI1emRDQjBiMnRsYmxSdlJtbGxiR1FnUFNBb2RHOXJaVzRwSUQwK0lIdGNiaUFnSUNBZ0lDQWdjM2RwZEdOb0lDaDBiMnRsYmxzd1hTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0pUWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdYQ0p0YVd4c2FYTmxZMjl1WkZ3aU8xeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSnpYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1hDSnpaV052Ym1SY0lqdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElGd2liVndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlGd2liV2x1ZFhSbFhDSTdYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbWhjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmNJbWh2ZFhKY0lqdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElGd2laRndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlGd2laR0Y1WENJN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0luZGNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCY0luZGxaV3RjSWp0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVRWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUZ3aWJXOXVkR2hjSWp0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWVWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUZ3aWVXVmhjbHdpTzF4dUlDQWdJQ0FnSUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lIUnZhMlZ1Vkc5VGRISnBibWNnUFNBb2JHbHNaSFZ5S1NBOVBpQW9kRzlyWlc0cElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdiV0Z3Y0dWa0lEMGdkRzlyWlc1VWIwWnBaV3hrS0hSdmEyVnVLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHMWhjSEJsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG01MWJTaHNhV3hrZFhJdVoyVjBLRzFoY0hCbFpDa3NJSFJ2YTJWdUxteGxibWQwYUNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUnZhMlZ1TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ2RHOXJaVzV6SUQwZ1JtOXliV0YwZEdWeUxuQmhjbk5sUm05eWJXRjBLR1p0ZENrc1hHNGdJQ0FnSUNCeVpXRnNWRzlyWlc1eklEMGdkRzlyWlc1ekxuSmxaSFZqWlNoY2JpQWdJQ0FnSUNBZ0tHWnZkVzVrTENCN0lHeHBkR1Z5WVd3c0lIWmhiQ0I5S1NBOVBpQW9iR2wwWlhKaGJDQS9JR1p2ZFc1a0lEb2dabTkxYm1RdVkyOXVZMkYwS0haaGJDa3BMRnh1SUNBZ0lDQWdJQ0JiWFZ4dUlDQWdJQ0FnS1N4Y2JpQWdJQ0FnSUdOdmJHeGhjSE5sWkNBOUlHUjFjaTV6YUdsbWRGUnZLQzR1TG5KbFlXeFViMnRsYm5NdWJXRndLSFJ2YTJWdVZHOUdhV1ZzWkNrdVptbHNkR1Z5S0NoMEtTQTlQaUIwS1NrN1hHNGdJQ0FnY21WMGRYSnVJSE4wY21sdVoybG1lVlJ2YTJWdWN5aDBiMnRsYm5Nc0lIUnZhMlZ1Vkc5VGRISnBibWNvWTI5c2JHRndjMlZrS1NrN1hHNGdJSDFjYm4xY2JpSXNJQ0psZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCSmJuWmhiR2xrSUh0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvY21WaGMyOXVMQ0JsZUhCc1lXNWhkR2x2YmlrZ2UxeHVJQ0FnSUhSb2FYTXVjbVZoYzI5dUlEMGdjbVZoYzI5dU8xeHVJQ0FnSUhSb2FYTXVaWGh3YkdGdVlYUnBiMjRnUFNCbGVIQnNZVzVoZEdsdmJqdGNiaUFnZlZ4dVhHNGdJSFJ2VFdWemMyRm5aU2dwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVsZUhCc1lXNWhkR2x2YmlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdBa2UzUm9hWE11Y21WaGMyOXVmVG9nSkh0MGFHbHpMbVY0Y0d4aGJtRjBhVzl1ZldBN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5KbFlYTnZianRjYmlBZ0lDQjlYRzRnSUgxY2JuMWNiaUlzSUNKcGJYQnZjblFnZXlCYWIyNWxTWE5CWW5OMGNtRmpkRVZ5Y205eUlIMGdabkp2YlNCY0lpNHZaWEp5YjNKekxtcHpYQ0k3WEc1Y2JpOHFLbHh1SUNvZ1FHbHVkR1Z5Wm1GalpWeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QmFiMjVsSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlNCMGVYQmxJRzltSUhwdmJtVmNiaUFnSUNvZ1FHRmljM1J5WVdOMFhHNGdJQ0FxSUVCMGVYQmxJSHR6ZEhKcGJtZDlYRzRnSUNBcUwxeHVJQ0JuWlhRZ2RIbHdaU2dwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnV205dVpVbHpRV0p6ZEhKaFkzUkZjbkp2Y2lncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlNCdVlXMWxJRzltSUhSb2FYTWdlbTl1WlM1Y2JpQWdJQ29nUUdGaWMzUnlZV04wWEc0Z0lDQXFJRUIwZVhCbElIdHpkSEpwYm1kOVhHNGdJQ0FxTDF4dUlDQm5aWFFnYm1GdFpTZ3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dXbTl1WlVselFXSnpkSEpoWTNSRmNuSnZjaWdwTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR2xoYm1GT1lXMWxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG01aGJXVTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvWlNCdlptWnpaWFFnYVhNZ2EyNXZkMjRnZEc4Z1ltVWdabWw0WldRZ1ptOXlJSFJvWlNCM2FHOXNaU0I1WldGeUxseHVJQ0FnS2lCQVlXSnpkSEpoWTNSY2JpQWdJQ29nUUhSNWNHVWdlMkp2YjJ4bFlXNTlYRzRnSUNBcUwxeHVJQ0JuWlhRZ2FYTlZibWwyWlhKellXd29LU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRnB2Ym1WSmMwRmljM1J5WVdOMFJYSnliM0lvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklIUm9aU0J2Wm1aelpYUW5jeUJqYjIxdGIyNGdibUZ0WlNBb2MzVmphQ0JoY3lCRlUxUXBJR0YwSUhSb1pTQnpjR1ZqYVdacFpXUWdkR2x0WlhOMFlXMXdYRzRnSUNBcUlFQmhZbk4wY21GamRGeHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnZEhNZ0xTQkZjRzlqYUNCdGFXeHNhWE5sWTI5dVpITWdabTl5SUhkb2FXTm9JSFJ2SUdkbGRDQjBhR1VnYm1GdFpWeHVJQ0FnS2lCQWNHRnlZVzBnZTA5aWFtVmpkSDBnYjNCMGN5QXRJRTl3ZEdsdmJuTWdkRzhnWVdabVpXTjBJSFJvWlNCbWIzSnRZWFJjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHOXdkSE11Wm05eWJXRjBJQzBnVjJoaGRDQnpkSGxzWlNCdlppQnZabVp6WlhRZ2RHOGdjbVYwZFhKdUxpQkJZMk5sY0hSeklDZHNiMjVuSnlCdmNpQW5jMmh2Y25RbkxseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYjNCMGN5NXNiMk5oYkdVZ0xTQlhhR0YwSUd4dlkyRnNaU0IwYnlCeVpYUjFjbTRnZEdobElHOW1abk5sZENCdVlXMWxJR2x1TGx4dUlDQWdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnSUNBcUwxeHVJQ0J2Wm1aelpYUk9ZVzFsS0hSekxDQnZjSFJ6S1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUZwdmJtVkpjMEZpYzNSeVlXTjBSWEp5YjNJb0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJSFJvWlNCdlptWnpaWFFuY3lCMllXeDFaU0JoY3lCaElITjBjbWx1WjF4dUlDQWdLaUJBWVdKemRISmhZM1JjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlIUnpJQzBnUlhCdlkyZ2diV2xzYkdselpXTnZibVJ6SUdadmNpQjNhR2xqYUNCMGJ5Qm5aWFFnZEdobElHOW1abk5sZEZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdabTl5YldGMElDMGdWMmhoZENCemRIbHNaU0J2WmlCdlptWnpaWFFnZEc4Z2NtVjBkWEp1TGx4dUlDQWdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdRV05qWlhCMGN5QW5ibUZ5Y205M0p5d2dKM05vYjNKMEp5d2diM0lnSjNSbFkyaHBaU2N1SUZKbGRIVnlibWx1WnlBbkt6WW5MQ0FuS3pBMk9qQXdKeXdnYjNJZ0p5c3dOakF3SnlCeVpYTndaV04wYVhabGJIbGNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDQWdLaTljYmlBZ1ptOXliV0YwVDJabWMyVjBLSFJ6TENCbWIzSnRZWFFwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnV205dVpVbHpRV0p6ZEhKaFkzUkZjbkp2Y2lncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJpQjBhR1VnYjJabWMyVjBJR2x1SUcxcGJuVjBaWE1nWm05eUlIUm9hWE1nZW05dVpTQmhkQ0IwYUdVZ2MzQmxZMmxtYVdWa0lIUnBiV1Z6ZEdGdGNDNWNiaUFnSUNvZ1FHRmljM1J5WVdOMFhHNGdJQ0FxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0IwY3lBdElFVndiMk5vSUcxcGJHeHBjMlZqYjI1a2N5Qm1iM0lnZDJocFkyZ2dkRzhnWTI5dGNIVjBaU0IwYUdVZ2IyWm1jMlYwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMWNiaUFnSUNvdlhHNGdJRzltWm5ObGRDaDBjeWtnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJhYjI1bFNYTkJZbk4wY21GamRFVnljbTl5S0NrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdUlIZG9aWFJvWlhJZ2RHaHBjeUJhYjI1bElHbHpJR1Z4ZFdGc0lIUnZJR0Z1YjNSb1pYSWdlbTl1WlZ4dUlDQWdLaUJBWVdKemRISmhZM1JjYmlBZ0lDb2dRSEJoY21GdElIdGFiMjVsZlNCdmRHaGxjbHB2Ym1VZ0xTQjBhR1VnZW05dVpTQjBieUJqYjIxd1lYSmxYRzRnSUNBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdJQ0FxTDF4dUlDQmxjWFZoYkhNb2IzUm9aWEphYjI1bEtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lGcHZibVZKYzBGaWMzUnlZV04wUlhKeWIzSW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTRnZDJobGRHaGxjaUIwYUdseklGcHZibVVnYVhNZ2RtRnNhV1F1WEc0Z0lDQXFJRUJoWW5OMGNtRmpkRnh1SUNBZ0tpQkFkSGx3WlNCN1ltOXZiR1ZoYm4xY2JpQWdJQ292WEc0Z0lHZGxkQ0JwYzFaaGJHbGtLQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJhYjI1bFNYTkJZbk4wY21GamRFVnljbTl5S0NrN1hHNGdJSDFjYm4xY2JpSXNJQ0pwYlhCdmNuUWdleUJtYjNKdFlYUlBabVp6WlhRc0lIQmhjbk5sV205dVpVbHVabThnZlNCbWNtOXRJRndpTGk0dmFXMXdiQzkxZEdsc0xtcHpYQ0k3WEc1cGJYQnZjblFnV205dVpTQm1jbTl0SUZ3aUxpNHZlbTl1WlM1cWMxd2lPMXh1WEc1c1pYUWdjMmx1WjJ4bGRHOXVJRDBnYm5Wc2JEdGNibHh1THlvcVhHNGdLaUJTWlhCeVpYTmxiblJ6SUhSb1pTQnNiMk5oYkNCNmIyNWxJR1p2Y2lCMGFHbHpJRXBoZG1GVFkzSnBjSFFnWlc1MmFYSnZibTFsYm5RdVhHNGdLaUJBYVcxd2JHVnRaVzUwY3lCN1dtOXVaWDFjYmlBcUwxeHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nVTNsemRHVnRXbTl1WlNCbGVIUmxibVJ6SUZwdmJtVWdlMXh1SUNBdktpcGNiaUFnSUNvZ1IyVjBJR0VnYzJsdVoyeGxkRzl1SUdsdWMzUmhibU5sSUc5bUlIUm9aU0JzYjJOaGJDQjZiMjVsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMU41YzNSbGJWcHZibVY5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWjJWMElHbHVjM1JoYm1ObEtDa2dlMXh1SUNBZ0lHbG1JQ2h6YVc1bmJHVjBiMjRnUFQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUhOcGJtZHNaWFJ2YmlBOUlHNWxkeUJUZVhOMFpXMWFiMjVsS0NrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnphVzVuYkdWMGIyNDdYRzRnSUgxY2JseHVJQ0F2S2lvZ1FHOTJaWEp5YVdSbElDb3FMMXh1SUNCblpYUWdkSGx3WlNncElIdGNiaUFnSUNCeVpYUjFjbTRnWENKemVYTjBaVzFjSWp0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJR2RsZENCdVlXMWxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnU1c1MGJDNUVZWFJsVkdsdFpVWnZjbTFoZENncExuSmxjMjlzZG1Wa1QzQjBhVzl1Y3lncExuUnBiV1ZhYjI1bE8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUVCdmRtVnljbWxrWlNBcUtpOWNiaUFnWjJWMElHbHpWVzVwZG1WeWMyRnNLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJRzltWm5ObGRFNWhiV1VvZEhNc0lIc2dabTl5YldGMExDQnNiMk5oYkdVZ2ZTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCd1lYSnpaVnB2Ym1WSmJtWnZLSFJ6TENCbWIzSnRZWFFzSUd4dlkyRnNaU2s3WEc0Z0lIMWNibHh1SUNBdktpb2dRRzkyWlhKeWFXUmxJQ29xTDF4dUlDQm1iM0p0WVhSUFptWnpaWFFvZEhNc0lHWnZjbTFoZENrZ2UxeHVJQ0FnSUhKbGRIVnliaUJtYjNKdFlYUlBabVp6WlhRb2RHaHBjeTV2Wm1aelpYUW9kSE1wTENCbWIzSnRZWFFwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRUJ2ZG1WeWNtbGtaU0FxS2k5Y2JpQWdiMlptYzJWMEtIUnpLU0I3WEc0Z0lDQWdjbVYwZFhKdUlDMXVaWGNnUkdGMFpTaDBjeWt1WjJWMFZHbHRaWHB2Ym1WUFptWnpaWFFvS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJR1Z4ZFdGc2N5aHZkR2hsY2xwdmJtVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2IzUm9aWEphYjI1bExuUjVjR1VnUFQwOUlGd2ljM2x6ZEdWdFhDSTdYRzRnSUgxY2JseHVJQ0F2S2lvZ1FHOTJaWEp5YVdSbElDb3FMMXh1SUNCblpYUWdhWE5XWVd4cFpDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ2ZWeHVmVnh1SWl3Z0ltbHRjRzl5ZENCN0lHWnZjbTFoZEU5bVpuTmxkQ3dnY0dGeWMyVmFiMjVsU1c1bWJ5d2dhWE5WYm1SbFptbHVaV1FzSUc5aWFsUnZURzlqWVd4VVV5QjlJR1p5YjIwZ1hDSXVMaTlwYlhCc0wzVjBhV3d1YW5OY0lqdGNibWx0Y0c5eWRDQmFiMjVsSUdaeWIyMGdYQ0l1TGk5NmIyNWxMbXB6WENJN1hHNWNibXhsZENCa2RHWkRZV05vWlNBOUlIdDlPMXh1Wm5WdVkzUnBiMjRnYldGclpVUlVSaWg2YjI1bEtTQjdYRzRnSUdsbUlDZ2haSFJtUTJGamFHVmJlbTl1WlYwcElIdGNiaUFnSUNCa2RHWkRZV05vWlZ0NmIyNWxYU0E5SUc1bGR5QkpiblJzTGtSaGRHVlVhVzFsUm05eWJXRjBLRndpWlc0dFZWTmNJaXdnZTF4dUlDQWdJQ0FnYUc5MWNqRXlPaUJtWVd4elpTeGNiaUFnSUNBZ0lIUnBiV1ZhYjI1bE9pQjZiMjVsTEZ4dUlDQWdJQ0FnZVdWaGNqb2dYQ0p1ZFcxbGNtbGpYQ0lzWEc0Z0lDQWdJQ0J0YjI1MGFEb2dYQ0l5TFdScFoybDBYQ0lzWEc0Z0lDQWdJQ0JrWVhrNklGd2lNaTFrYVdkcGRGd2lMRnh1SUNBZ0lDQWdhRzkxY2pvZ1hDSXlMV1JwWjJsMFhDSXNYRzRnSUNBZ0lDQnRhVzUxZEdVNklGd2lNaTFrYVdkcGRGd2lMRnh1SUNBZ0lDQWdjMlZqYjI1a09pQmNJakl0WkdsbmFYUmNJaXhjYmlBZ0lDQWdJR1Z5WVRvZ1hDSnphRzl5ZEZ3aUxGeHVJQ0FnSUgwcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCa2RHWkRZV05vWlZ0NmIyNWxYVHRjYm4xY2JseHVZMjl1YzNRZ2RIbHdaVlJ2VUc5eklEMGdlMXh1SUNCNVpXRnlPaUF3TEZ4dUlDQnRiMjUwYURvZ01TeGNiaUFnWkdGNU9pQXlMRnh1SUNCbGNtRTZJRE1zWEc0Z0lHaHZkWEk2SURRc1hHNGdJRzFwYm5WMFpUb2dOU3hjYmlBZ2MyVmpiMjVrT2lBMkxGeHVmVHRjYmx4dVpuVnVZM1JwYjI0Z2FHRmphM2xQWm1aelpYUW9aSFJtTENCa1lYUmxLU0I3WEc0Z0lHTnZibk4wSUdadmNtMWhkSFJsWkNBOUlHUjBaaTVtYjNKdFlYUW9aR0YwWlNrdWNtVndiR0ZqWlNndlhGeDFNakF3UlM5bkxDQmNJbHdpS1N4Y2JpQWdJQ0J3WVhKelpXUWdQU0F2S0Z4Y1pDc3BYRnd2S0Z4Y1pDc3BYRnd2S0Z4Y1pDc3BJQ2hCUkh4Q1F5a3NQeUFvWEZ4a0t5azZLRnhjWkNzcE9paGNYR1FyS1M4dVpYaGxZeWhtYjNKdFlYUjBaV1FwTEZ4dUlDQWdJRnNzSUdaTmIyNTBhQ3dnWmtSaGVTd2dabGxsWVhJc0lHWmhaRTl5UW1Nc0lHWkliM1Z5TENCbVRXbHVkWFJsTENCbVUyVmpiMjVrWFNBOUlIQmhjbk5sWkR0Y2JpQWdjbVYwZFhKdUlGdG1XV1ZoY2l3Z1prMXZiblJvTENCbVJHRjVMQ0JtWVdSUGNrSmpMQ0JtU0c5MWNpd2daazFwYm5WMFpTd2dabE5sWTI5dVpGMDdYRzU5WEc1Y2JtWjFibU4wYVc5dUlIQmhjblJ6VDJabWMyVjBLR1IwWml3Z1pHRjBaU2tnZTF4dUlDQmpiMjV6ZENCbWIzSnRZWFIwWldRZ1BTQmtkR1l1Wm05eWJXRjBWRzlRWVhKMGN5aGtZWFJsS1R0Y2JpQWdZMjl1YzNRZ1ptbHNiR1ZrSUQwZ1cxMDdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1ptOXliV0YwZEdWa0xteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdZMjl1YzNRZ2V5QjBlWEJsTENCMllXeDFaU0I5SUQwZ1ptOXliV0YwZEdWa1cybGRPMXh1SUNBZ0lHTnZibk4wSUhCdmN5QTlJSFI1Y0dWVWIxQnZjMXQwZVhCbFhUdGNibHh1SUNBZ0lHbG1JQ2gwZVhCbElEMDlQU0JjSW1WeVlWd2lLU0I3WEc0Z0lDQWdJQ0JtYVd4c1pXUmJjRzl6WFNBOUlIWmhiSFZsTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvSVdselZXNWtaV1pwYm1Wa0tIQnZjeWtwSUh0Y2JpQWdJQ0FnSUdacGJHeGxaRnR3YjNOZElEMGdjR0Z5YzJWSmJuUW9kbUZzZFdVc0lERXdLVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHWnBiR3hsWkR0Y2JuMWNibHh1YkdWMElHbGhibUZhYjI1bFEyRmphR1VnUFNCN2ZUdGNiaThxS2x4dUlDb2dRU0I2YjI1bElHbGtaVzUwYVdacFpXUWdZbmtnWVc0Z1NVRk9RU0JwWkdWdWRHbG1hV1Z5TENCc2FXdGxJRUZ0WlhKcFkyRXZUbVYzWDFsdmNtdGNiaUFxSUVCcGJYQnNaVzFsYm5SeklIdGFiMjVsZlZ4dUlDb3ZYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCSlFVNUJXbTl1WlNCbGVIUmxibVJ6SUZwdmJtVWdlMXh1SUNBdktpcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUc1aGJXVWdMU0JhYjI1bElHNWhiV1ZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdTVUZPUVZwdmJtVjlYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdZM0psWVhSbEtHNWhiV1VwSUh0Y2JpQWdJQ0JwWmlBb0lXbGhibUZhYjI1bFEyRmphR1ZiYm1GdFpWMHBJSHRjYmlBZ0lDQWdJR2xoYm1GYWIyNWxRMkZqYUdWYmJtRnRaVjBnUFNCdVpYY2dTVUZPUVZwdmJtVW9ibUZ0WlNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnBZVzVoV205dVpVTmhZMmhsVzI1aGJXVmRPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGMyVjBJR3h2WTJGc0lHTmhZMmhsY3k0Z1UyaHZkV3hrSUc5dWJIa2dZbVVnYm1WalpYTnpZWEo1SUdsdUlIUmxjM1JwYm1jZ2MyTmxibUZ5YVc5ekxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJSEpsYzJWMFEyRmphR1VvS1NCN1hHNGdJQ0FnYVdGdVlWcHZibVZEWVdOb1pTQTlJSHQ5TzF4dUlDQWdJR1IwWmtOaFkyaGxJRDBnZTMwN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9aU0J3Y205MmFXUmxaQ0J6ZEhKcGJtY2dhWE1nWVNCMllXeHBaQ0J6Y0dWamFXWnBaWEl1SUZSb2FYTWdiMjVzZVNCamFHVmphM01nZEdobElITjBjbWx1WnlkeklHWnZjbTFoZEN3Z2JtOTBJSFJvWVhRZ2RHaGxJSE53WldOcFptbGxjaUJwWkdWdWRHbG1hV1Z6SUdFZ2EyNXZkMjRnZW05dVpUc2djMlZsSUdselZtRnNhV1JhYjI1bElHWnZjaUIwYUdGMExseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnY3lBdElGUm9aU0J6ZEhKcGJtY2dkRzhnWTJobFkyc2dkbUZzYVdScGRIa2diMjVjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdTVUZPUVZwdmJtVXVhWE5XWVd4cFpGTndaV05wWm1sbGNpaGNJa0Z0WlhKcFkyRXZUbVYzWDFsdmNtdGNJaWtnTHk4OVBpQjBjblZsWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRWxCVGtGYWIyNWxMbWx6Vm1Gc2FXUlRjR1ZqYVdacFpYSW9YQ0pUY0c5eWRINStZbXh2Y25CY0lpa2dMeTg5UGlCbVlXeHpaVnh1SUNBZ0tpQkFaR1Z3Y21WallYUmxaQ0JVYUdseklHMWxkR2h2WkNCeVpYUjFjbTV6SUdaaGJITmxJR1p2Y2lCemIyMWxJSFpoYkdsa0lFbEJUa0VnYm1GdFpYTXVJRlZ6WlNCcGMxWmhiR2xrV205dVpTQnBibk4wWldGa0xseHVJQ0FnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdselZtRnNhV1JUY0dWamFXWnBaWElvY3lrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHpWbUZzYVdSYWIyNWxLSE1wTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ2QyaGxkR2hsY2lCMGFHVWdjSEp2ZG1sa1pXUWdjM1J5YVc1bklHbGtaVzUwYVdacFpYTWdZU0J5WldGc0lIcHZibVZjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIcHZibVVnTFNCVWFHVWdjM1J5YVc1bklIUnZJR05vWldOclhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVsQlRrRmFiMjVsTG1selZtRnNhV1JhYjI1bEtGd2lRVzFsY21sallTOU9aWGRmV1c5eWExd2lLU0F2THowK0lIUnlkV1ZjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdTVUZPUVZwdmJtVXVhWE5XWVd4cFpGcHZibVVvWENKR1lXNTBZWE5wWVM5RFlYTjBiR1ZjSWlrZ0x5ODlQaUJtWVd4elpWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCSlFVNUJXbTl1WlM1cGMxWmhiR2xrV205dVpTaGNJbE53YjNKMGZuNWliRzl5Y0Z3aUtTQXZMejArSUdaaGJITmxYRzRnSUNBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2FYTldZV3hwWkZwdmJtVW9lbTl1WlNrZ2UxeHVJQ0FnSUdsbUlDZ2hlbTl1WlNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lIMWNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdibVYzSUVsdWRHd3VSR0YwWlZScGJXVkdiM0p0WVhRb1hDSmxiaTFWVTF3aUxDQjdJSFJwYldWYWIyNWxPaUI2YjI1bElIMHBMbVp2Y20xaGRDZ3BPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHTnZibk4wY25WamRHOXlLRzVoYldVcElIdGNiaUFnSUNCemRYQmxjaWdwTzF4dUlDQWdJQzhxS2lCQWNISnBkbUYwWlNBcUtpOWNiaUFnSUNCMGFHbHpMbnB2Ym1WT1lXMWxJRDBnYm1GdFpUdGNiaUFnSUNBdktpb2dRSEJ5YVhaaGRHVWdLaW92WEc0Z0lDQWdkR2hwY3k1MllXeHBaQ0E5SUVsQlRrRmFiMjVsTG1selZtRnNhV1JhYjI1bEtHNWhiV1VwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRUJ2ZG1WeWNtbGtaU0FxS2k5Y2JpQWdaMlYwSUhSNWNHVW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlGd2lhV0Z1WVZ3aU8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUVCdmRtVnljbWxrWlNBcUtpOWNiaUFnWjJWMElHNWhiV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWVtOXVaVTVoYldVN1hHNGdJSDFjYmx4dUlDQXZLaW9nUUc5MlpYSnlhV1JsSUNvcUwxeHVJQ0JuWlhRZ2FYTlZibWwyWlhKellXd29LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRUJ2ZG1WeWNtbGtaU0FxS2k5Y2JpQWdiMlptYzJWMFRtRnRaU2gwY3l3Z2V5Qm1iM0p0WVhRc0lHeHZZMkZzWlNCOUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhCaGNuTmxXbTl1WlVsdVptOG9kSE1zSUdadmNtMWhkQ3dnYkc5allXeGxMQ0IwYUdsekxtNWhiV1VwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRUJ2ZG1WeWNtbGtaU0FxS2k5Y2JpQWdabTl5YldGMFQyWm1jMlYwS0hSekxDQm1iM0p0WVhRcElIdGNiaUFnSUNCeVpYUjFjbTRnWm05eWJXRjBUMlptYzJWMEtIUm9hWE11YjJabWMyVjBLSFJ6S1N3Z1ptOXliV0YwS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJRzltWm5ObGRDaDBjeWtnZTF4dUlDQWdJR052Ym5OMElHUmhkR1VnUFNCdVpYY2dSR0YwWlNoMGN5azdYRzVjYmlBZ0lDQnBaaUFvYVhOT1lVNG9aR0YwWlNrcElISmxkSFZ5YmlCT1lVNDdYRzVjYmlBZ0lDQmpiMjV6ZENCa2RHWWdQU0J0WVd0bFJGUkdLSFJvYVhNdWJtRnRaU2s3WEc0Z0lDQWdiR1YwSUZ0NVpXRnlMQ0J0YjI1MGFDd2daR0Y1TENCaFpFOXlRbU1zSUdodmRYSXNJRzFwYm5WMFpTd2djMlZqYjI1a1hTQTlJR1IwWmk1bWIzSnRZWFJVYjFCaGNuUnpYRzRnSUNBZ0lDQS9JSEJoY25SelQyWm1jMlYwS0dSMFppd2daR0YwWlNsY2JpQWdJQ0FnSURvZ2FHRmphM2xQWm1aelpYUW9aSFJtTENCa1lYUmxLVHRjYmx4dUlDQWdJR2xtSUNoaFpFOXlRbU1nUFQwOUlGd2lRa05jSWlrZ2UxeHVJQ0FnSUNBZ2VXVmhjaUE5SUMxTllYUm9MbUZpY3loNVpXRnlLU0FySURFN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1ltVmpZWFZ6WlNCM1pTZHlaU0IxYzJsdVp5Qm9iM1Z5TVRJZ1lXNWtJR2gwZEhCek9pOHZZblZuY3k1amFISnZiV2wxYlM1dmNtY3ZjQzlqYUhKdmJXbDFiUzlwYzNOMVpYTXZaR1YwWVdsc1AybGtQVEV3TWpVMU5qUW1ZMkZ1UFRJbWNUMGxNakl5TkNVelFUQXdKVEl5SlRJd1pHRjBaWFJwYldWbWIzSnRZWFJjYmlBZ0lDQmpiMjV6ZENCaFpHcDFjM1JsWkVodmRYSWdQU0JvYjNWeUlEMDlQU0F5TkNBL0lEQWdPaUJvYjNWeU8xeHVYRzRnSUNBZ1kyOXVjM1FnWVhOVlZFTWdQU0J2WW1wVWIweHZZMkZzVkZNb2UxeHVJQ0FnSUNBZ2VXVmhjaXhjYmlBZ0lDQWdJRzF2Ym5Sb0xGeHVJQ0FnSUNBZ1pHRjVMRnh1SUNBZ0lDQWdhRzkxY2pvZ1lXUnFkWE4wWldSSWIzVnlMRnh1SUNBZ0lDQWdiV2x1ZFhSbExGeHVJQ0FnSUNBZ2MyVmpiMjVrTEZ4dUlDQWdJQ0FnYldsc2JHbHpaV052Ym1RNklEQXNYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQnNaWFFnWVhOVVV5QTlJQ3RrWVhSbE8xeHVJQ0FnSUdOdmJuTjBJRzkyWlhJZ1BTQmhjMVJUSUNVZ01UQXdNRHRjYmlBZ0lDQmhjMVJUSUMwOUlHOTJaWElnUGowZ01DQS9JRzkyWlhJZ09pQXhNREF3SUNzZ2IzWmxjanRjYmlBZ0lDQnlaWFIxY200Z0tHRnpWVlJESUMwZ1lYTlVVeWtnTHlBb05qQWdLaUF4TURBd0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCQWIzWmxjbkpwWkdVZ0tpb3ZYRzRnSUdWeGRXRnNjeWh2ZEdobGNscHZibVVwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdiM1JvWlhKYWIyNWxMblI1Y0dVZ1BUMDlJRndpYVdGdVlWd2lJQ1ltSUc5MGFHVnlXbTl1WlM1dVlXMWxJRDA5UFNCMGFHbHpMbTVoYldVN1hHNGdJSDFjYmx4dUlDQXZLaW9nUUc5MlpYSnlhV1JsSUNvcUwxeHVJQ0JuWlhRZ2FYTldZV3hwWkNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NTJZV3hwWkR0Y2JpQWdmVnh1ZlZ4dUlpd2dJbWx0Y0c5eWRDQjdJR1p2Y20xaGRFOW1abk5sZEN3Z2MybG5ibVZrVDJabWMyVjBJSDBnWm5KdmJTQmNJaTR1TDJsdGNHd3ZkWFJwYkM1cWMxd2lPMXh1YVcxd2IzSjBJRnB2Ym1VZ1puSnZiU0JjSWk0dUwzcHZibVV1YW5OY0lqdGNibHh1YkdWMElITnBibWRzWlhSdmJpQTlJRzUxYkd3N1hHNWNiaThxS2x4dUlDb2dRU0I2YjI1bElIZHBkR2dnWVNCbWFYaGxaQ0J2Wm1aelpYUWdLRzFsWVc1cGJtY2dibThnUkZOVUtWeHVJQ29nUUdsdGNHeGxiV1Z1ZEhNZ2UxcHZibVY5WEc0Z0tpOWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUVacGVHVmtUMlptYzJWMFdtOXVaU0JsZUhSbGJtUnpJRnB2Ym1VZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUjJWMElHRWdjMmx1WjJ4bGRHOXVJR2x1YzNSaGJtTmxJRzltSUZWVVExeHVJQ0FnS2lCQWNtVjBkWEp1SUh0R2FYaGxaRTltWm5ObGRGcHZibVY5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWjJWMElIVjBZMGx1YzNSaGJtTmxLQ2tnZTF4dUlDQWdJR2xtSUNoemFXNW5iR1YwYjI0Z1BUMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lITnBibWRzWlhSdmJpQTlJRzVsZHlCR2FYaGxaRTltWm5ObGRGcHZibVVvTUNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnphVzVuYkdWMGIyNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJWMElHRnVJR2x1YzNSaGJtTmxJSGRwZEdnZ1lTQnpjR1ZqYVdacFpXUWdiMlptYzJWMFhHNGdJQ0FxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0J2Wm1aelpYUWdMU0JVYUdVZ2IyWm1jMlYwSUdsdUlHMXBiblYwWlhOY2JpQWdJQ29nUUhKbGRIVnliaUI3Um1sNFpXUlBabVp6WlhSYWIyNWxmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJR2x1YzNSaGJtTmxLRzltWm5ObGRDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdlptWnpaWFFnUFQwOUlEQWdQeUJHYVhobFpFOW1abk5sZEZwdmJtVXVkWFJqU1c1emRHRnVZMlVnT2lCdVpYY2dSbWw0WldSUFptWnpaWFJhYjI1bEtHOW1abk5sZENrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUdGdUlHbHVjM1JoYm1ObElHOW1JRVpwZUdWa1QyWm1jMlYwV205dVpTQm1jbTl0SUdFZ1ZWUkRJRzltWm5ObGRDQnpkSEpwYm1jc0lHeHBhMlVnWENKVlZFTXJObHdpWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnpJQzBnVkdobElHOW1abk5sZENCemRISnBibWNnZEc4Z2NHRnljMlZjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSbWw0WldSUFptWnpaWFJhYjI1bExuQmhjbk5sVTNCbFkybG1hV1Z5S0Z3aVZWUkRLelpjSWlsY2JpQWdJQ29nUUdWNFlXMXdiR1VnUm1sNFpXUlBabVp6WlhSYWIyNWxMbkJoY25ObFUzQmxZMmxtYVdWeUtGd2lWVlJES3pBMlhDSXBYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFWnBlR1ZrVDJabWMyVjBXbTl1WlM1d1lYSnpaVk53WldOcFptbGxjaWhjSWxWVVF5MDJPakF3WENJcFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBacGVHVmtUMlptYzJWMFdtOXVaWDFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJ3WVhKelpWTndaV05wWm1sbGNpaHpLU0I3WEc0Z0lDQWdhV1lnS0hNcElIdGNiaUFnSUNBZ0lHTnZibk4wSUhJZ1BTQnpMbTFoZEdOb0tDOWVkWFJqS0Q4NktGc3JMVjFjWEdSN01Td3lmU2tvUHpvNktGeGNaSHN5ZlNrcFB5ay9KQzlwS1R0Y2JpQWdJQ0FnSUdsbUlDaHlLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1JtbDRaV1JQWm1aelpYUmFiMjVsS0hOcFoyNWxaRTltWm5ObGRDaHlXekZkTENCeVd6SmRLU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUnlkV04wYjNJb2IyWm1jMlYwS1NCN1hHNGdJQ0FnYzNWd1pYSW9LVHRjYmlBZ0lDQXZLaW9nUUhCeWFYWmhkR1VnS2lvdlhHNGdJQ0FnZEdocGN5NW1hWGhsWkNBOUlHOW1abk5sZER0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJR2RsZENCMGVYQmxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQmNJbVpwZUdWa1hDSTdYRzRnSUgxY2JseHVJQ0F2S2lvZ1FHOTJaWEp5YVdSbElDb3FMMXh1SUNCblpYUWdibUZ0WlNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NW1hWGhsWkNBOVBUMGdNQ0EvSUZ3aVZWUkRYQ0lnT2lCZ1ZWUkRKSHRtYjNKdFlYUlBabVp6WlhRb2RHaHBjeTVtYVhobFpDd2dYQ0p1WVhKeWIzZGNJaWw5WUR0Y2JpQWdmVnh1WEc0Z0lHZGxkQ0JwWVc1aFRtRnRaU2dwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVtYVhobFpDQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUZ3aVJYUmpMMVZVUTF3aU8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZRVYwWXk5SFRWUWtlMlp2Y20xaGRFOW1abk5sZENndGRHaHBjeTVtYVhobFpDd2dYQ0p1WVhKeWIzZGNJaWw5WUR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpb2dRRzkyWlhKeWFXUmxJQ29xTDF4dUlDQnZabVp6WlhST1lXMWxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG01aGJXVTdYRzRnSUgxY2JseHVJQ0F2S2lvZ1FHOTJaWEp5YVdSbElDb3FMMXh1SUNCbWIzSnRZWFJQWm1aelpYUW9kSE1zSUdadmNtMWhkQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQm1iM0p0WVhSUFptWnpaWFFvZEdocGN5NW1hWGhsWkN3Z1ptOXliV0YwS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJR2RsZENCcGMxVnVhWFpsY25OaGJDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQkFiM1psY25KcFpHVWdLaW92WEc0Z0lHOW1abk5sZENncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NW1hWGhsWkR0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJR1Z4ZFdGc2N5aHZkR2hsY2xwdmJtVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2IzUm9aWEphYjI1bExuUjVjR1VnUFQwOUlGd2labWw0WldSY0lpQW1KaUJ2ZEdobGNscHZibVV1Wm1sNFpXUWdQVDA5SUhSb2FYTXVabWw0WldRN1hHNGdJSDFjYmx4dUlDQXZLaW9nUUc5MlpYSnlhV1JsSUNvcUwxeHVJQ0JuWlhRZ2FYTldZV3hwWkNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnZlZ4dWZWeHVJaXdnSW1sdGNHOXlkQ0JhYjI1bElHWnliMjBnWENJdUxpOTZiMjVsTG1welhDSTdYRzVjYmk4cUtseHVJQ29nUVNCNmIyNWxJSFJvWVhRZ1ptRnBiR1ZrSUhSdklIQmhjbk5sTGlCWmIzVWdjMmh2ZFd4a0lHNWxkbVZ5SUc1bFpXUWdkRzhnYVc1emRHRnVkR2xoZEdVZ2RHaHBjeTVjYmlBcUlFQnBiWEJzWlcxbGJuUnpJSHRhYjI1bGZWeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QkpiblpoYkdsa1dtOXVaU0JsZUhSbGJtUnpJRnB2Ym1VZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loNmIyNWxUbUZ0WlNrZ2UxeHVJQ0FnSUhOMWNHVnlLQ2s3WEc0Z0lDQWdMeW9xSUNCQWNISnBkbUYwWlNBcUwxeHVJQ0FnSUhSb2FYTXVlbTl1WlU1aGJXVWdQU0I2YjI1bFRtRnRaVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQkFiM1psY25KcFpHVWdLaW92WEc0Z0lHZGxkQ0IwZVhCbEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCY0ltbHVkbUZzYVdSY0lqdGNiaUFnZlZ4dVhHNGdJQzhxS2lCQWIzWmxjbkpwWkdVZ0tpb3ZYRzRnSUdkbGRDQnVZVzFsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxucHZibVZPWVcxbE8xeHVJQ0I5WEc1Y2JpQWdMeW9xSUVCdmRtVnljbWxrWlNBcUtpOWNiaUFnWjJWMElHbHpWVzVwZG1WeWMyRnNLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJRzltWm5ObGRFNWhiV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDFjYmx4dUlDQXZLaW9nUUc5MlpYSnlhV1JsSUNvcUwxeHVJQ0JtYjNKdFlYUlBabVp6WlhRb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUZ3aVhDSTdYRzRnSUgxY2JseHVJQ0F2S2lvZ1FHOTJaWEp5YVdSbElDb3FMMXh1SUNCdlptWnpaWFFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRTVoVGp0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJBYjNabGNuSnBaR1VnS2lvdlhHNGdJR1Z4ZFdGc2N5Z3BJSHRjYmlBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lIMWNibHh1SUNBdktpb2dRRzkyWlhKeWFXUmxJQ29xTDF4dUlDQm5aWFFnYVhOV1lXeHBaQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJSDFjYm4xY2JpSXNJQ0l2S2lwY2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JseHVhVzF3YjNKMElGcHZibVVnWm5KdmJTQmNJaTR1TDNwdmJtVXVhbk5jSWp0Y2JtbHRjRzl5ZENCSlFVNUJXbTl1WlNCbWNtOXRJRndpTGk0dmVtOXVaWE12U1VGT1FWcHZibVV1YW5OY0lqdGNibWx0Y0c5eWRDQkdhWGhsWkU5bVpuTmxkRnB2Ym1VZ1puSnZiU0JjSWk0dUwzcHZibVZ6TDJacGVHVmtUMlptYzJWMFdtOXVaUzVxYzF3aU8xeHVhVzF3YjNKMElFbHVkbUZzYVdSYWIyNWxJR1p5YjIwZ1hDSXVMaTk2YjI1bGN5OXBiblpoYkdsa1dtOXVaUzVxYzF3aU8xeHVYRzVwYlhCdmNuUWdleUJwYzFWdVpHVm1hVzVsWkN3Z2FYTlRkSEpwYm1jc0lHbHpUblZ0WW1WeUlIMGdabkp2YlNCY0lpNHZkWFJwYkM1cWMxd2lPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYm05eWJXRnNhWHBsV205dVpTaHBibkIxZEN3Z1pHVm1ZWFZzZEZwdmJtVXBJSHRjYmlBZ2JHVjBJRzltWm5ObGREdGNiaUFnYVdZZ0tHbHpWVzVrWldacGJtVmtLR2x1Y0hWMEtTQjhmQ0JwYm5CMWRDQTlQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCa1pXWmhkV3gwV205dVpUdGNiaUFnZlNCbGJITmxJR2xtSUNocGJuQjFkQ0JwYm5OMFlXNWpaVzltSUZwdmJtVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2FXNXdkWFE3WEc0Z0lIMGdaV3h6WlNCcFppQW9hWE5UZEhKcGJtY29hVzV3ZFhRcEtTQjdYRzRnSUNBZ1kyOXVjM1FnYkc5M1pYSmxaQ0E5SUdsdWNIVjBMblJ2VEc5M1pYSkRZWE5sS0NrN1hHNGdJQ0FnYVdZZ0tHeHZkMlZ5WldRZ1BUMDlJRndpYkc5allXeGNJaUI4ZkNCc2IzZGxjbVZrSUQwOVBTQmNJbk41YzNSbGJWd2lLU0J5WlhSMWNtNGdaR1ZtWVhWc2RGcHZibVU3WEc0Z0lDQWdaV3h6WlNCcFppQW9iRzkzWlhKbFpDQTlQVDBnWENKMWRHTmNJaUI4ZkNCc2IzZGxjbVZrSUQwOVBTQmNJbWR0ZEZ3aUtTQnlaWFIxY200Z1JtbDRaV1JQWm1aelpYUmFiMjVsTG5WMFkwbHVjM1JoYm1ObE8xeHVJQ0FnSUdWc2MyVWdjbVYwZFhKdUlFWnBlR1ZrVDJabWMyVjBXbTl1WlM1d1lYSnpaVk53WldOcFptbGxjaWhzYjNkbGNtVmtLU0I4ZkNCSlFVNUJXbTl1WlM1amNtVmhkR1VvYVc1d2RYUXBPMXh1SUNCOUlHVnNjMlVnYVdZZ0tHbHpUblZ0WW1WeUtHbHVjSFYwS1NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJHYVhobFpFOW1abk5sZEZwdmJtVXVhVzV6ZEdGdVkyVW9hVzV3ZFhRcE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJwYm5CMWRDQTlQVDBnWENKdlltcGxZM1JjSWlBbUppQnBibkIxZEM1dlptWnpaWFFnSmlZZ2RIbHdaVzltSUdsdWNIVjBMbTltWm5ObGRDQTlQVDBnWENKdWRXMWlaWEpjSWlrZ2UxeHVJQ0FnSUM4dklGUm9hWE1nYVhNZ1pIVnRZaXdnWW5WMElIUm9aU0JwYm5OMFlXNWpaVzltSUdOb1pXTnJJR0ZpYjNabElHUnZaWE51SjNRZ2MyVmxiU0IwYnlCeVpXRnNiSGtnZDI5eWExeHVJQ0FnSUM4dklITnZJSGRsSjNKbElHUjFZMnNnWTJobFkydHBibWNnYVhSY2JpQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkpiblpoYkdsa1dtOXVaU2hwYm5CMWRDazdYRzRnSUgxY2JuMWNiaUlzSUNKcGJYQnZjblFnVTNsemRHVnRXbTl1WlNCbWNtOXRJRndpTGk5NmIyNWxjeTl6ZVhOMFpXMWFiMjVsTG1welhDSTdYRzVwYlhCdmNuUWdTVUZPUVZwdmJtVWdabkp2YlNCY0lpNHZlbTl1WlhNdlNVRk9RVnB2Ym1VdWFuTmNJanRjYm1sdGNHOXlkQ0JNYjJOaGJHVWdabkp2YlNCY0lpNHZhVzF3YkM5c2IyTmhiR1V1YW5OY0lqdGNibHh1YVcxd2IzSjBJSHNnYm05eWJXRnNhWHBsV205dVpTQjlJR1p5YjIwZ1hDSXVMMmx0Y0d3dmVtOXVaVlYwYVd3dWFuTmNJanRjYmx4dWJHVjBJRzV2ZHlBOUlDZ3BJRDArSUVSaGRHVXVibTkzS0Nrc1hHNGdJR1JsWm1GMWJIUmFiMjVsSUQwZ1hDSnplWE4wWlcxY0lpeGNiaUFnWkdWbVlYVnNkRXh2WTJGc1pTQTlJRzUxYkd3c1hHNGdJR1JsWm1GMWJIUk9kVzFpWlhKcGJtZFRlWE4wWlcwZ1BTQnVkV3hzTEZ4dUlDQmtaV1poZFd4MFQzVjBjSFYwUTJGc1pXNWtZWElnUFNCdWRXeHNMRnh1SUNCMGFISnZkMDl1U1c1MllXeHBaRHRjYmx4dUx5b3FYRzRnS2lCVFpYUjBhVzVuY3lCamIyNTBZV2x1Y3lCemRHRjBhV01nWjJWMGRHVnljeUJoYm1RZ2MyVjBkR1Z5Y3lCMGFHRjBJR052Ym5SeWIyd2dUSFY0YjI0bmN5QnZkbVZ5WVd4c0lHSmxhR0YyYVc5eUxpQk1kWGh2YmlCcGN5QmhJSE5wYlhCc1pTQnNhV0p5WVhKNUlIZHBkR2dnWm1WM0lHOXdkR2x2Ym5Nc0lHSjFkQ0IwYUdVZ2IyNWxjeUJwZENCa2IyVnpJR2hoZG1VZ2JHbDJaU0JvWlhKbExseHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlRaWFIwYVc1bmN5QjdYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdkR2hsSUdOaGJHeGlZV05ySUdadmNpQnlaWFIxY201cGJtY2dkR2hsSUdOMWNuSmxiblFnZEdsdFpYTjBZVzF3TGx4dUlDQWdLaUJBZEhsd1pTQjdablZ1WTNScGIyNTlYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdaMlYwSUc1dmR5Z3BJSHRjYmlBZ0lDQnlaWFIxY200Z2JtOTNPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZObGRDQjBhR1VnWTJGc2JHSmhZMnNnWm05eUlISmxkSFZ5Ym1sdVp5QjBhR1VnWTNWeWNtVnVkQ0IwYVcxbGMzUmhiWEF1WEc0Z0lDQXFJRlJvWlNCbWRXNWpkR2x2YmlCemFHOTFiR1FnY21WMGRYSnVJR0VnYm5WdFltVnlMQ0IzYUdsamFDQjNhV3hzSUdKbElHbHVkR1Z5Y0hKbGRHVmtJR0Z6SUdGdUlFVndiMk5vSUcxcGJHeHBjMlZqYjI1a0lHTnZkVzUwWEc0Z0lDQXFJRUIwZVhCbElIdG1kVzVqZEdsdmJuMWNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1UyVjBkR2x1WjNNdWJtOTNJRDBnS0NrZ1BUNGdSR0YwWlM1dWIzY29LU0FySURNd01EQWdMeThnY0hKbGRHVnVaQ0JwZENCcGN5QXpJSE5sWTI5dVpITWdhVzRnZEdobElHWjFkSFZ5WlZ4dUlDQWdLaUJBWlhoaGJYQnNaU0JUWlhSMGFXNW5jeTV1YjNjZ1BTQW9LU0E5UGlBd0lDOHZJR0ZzZDJGNWN5QndjbVYwWlc1a0lHbDBKM01nU21GdUlERXNJREU1TnpBZ1lYUWdiV2xrYm1sbmFIUWdhVzRnVlZSRElIUnBiV1ZjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJ6WlhRZ2JtOTNLRzRwSUh0Y2JpQWdJQ0J1YjNjZ1BTQnVPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZObGRDQjBhR1VnWkdWbVlYVnNkQ0IwYVcxbElIcHZibVVnZEc4Z1kzSmxZWFJsSUVSaGRHVlVhVzFsY3lCcGJpNGdSRzlsY3lCdWIzUWdZV1ptWldOMElHVjRhWE4wYVc1bklHbHVjM1JoYm1ObGN5NWNiaUFnSUNvZ1ZYTmxJSFJvWlNCMllXeDFaU0JjSW5ONWMzUmxiVndpSUhSdklISmxjMlYwSUhSb2FYTWdkbUZzZFdVZ2RHOGdkR2hsSUhONWMzUmxiU2R6SUhScGJXVWdlbTl1WlM1Y2JpQWdJQ29nUUhSNWNHVWdlM04wY21sdVozMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QnpaWFFnWkdWbVlYVnNkRnB2Ym1Vb2VtOXVaU2tnZTF4dUlDQWdJR1JsWm1GMWJIUmFiMjVsSUQwZ2VtOXVaVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdkR2hsSUdSbFptRjFiSFFnZEdsdFpTQjZiMjVsSUc5aWFtVmpkQ0JqZFhKeVpXNTBiSGtnZFhObFpDQjBieUJqY21WaGRHVWdSR0YwWlZScGJXVnpMaUJFYjJWeklHNXZkQ0JoWm1abFkzUWdaWGhwYzNScGJtY2dhVzV6ZEdGdVkyVnpMbHh1SUNBZ0tpQlVhR1VnWkdWbVlYVnNkQ0IyWVd4MVpTQnBjeUIwYUdVZ2MzbHpkR1Z0SjNNZ2RHbHRaU0I2YjI1bElDaDBhR1VnYjI1bElITmxkQ0J2YmlCMGFHVWdiV0ZqYUdsdVpTQjBhR0YwSUhKMWJuTWdkR2hwY3lCamIyUmxLUzVjYmlBZ0lDb2dRSFI1Y0dVZ2UxcHZibVY5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWjJWMElHUmxabUYxYkhSYWIyNWxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQnViM0p0WVd4cGVtVmFiMjVsS0dSbFptRjFiSFJhYjI1bExDQlRlWE4wWlcxYWIyNWxMbWx1YzNSaGJtTmxLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdkR2hsSUdSbFptRjFiSFFnYkc5allXeGxJSFJ2SUdOeVpXRjBaU0JFWVhSbFZHbHRaWE1nZDJsMGFDNGdSRzlsY3lCdWIzUWdZV1ptWldOMElHVjRhWE4wYVc1bklHbHVjM1JoYm1ObGN5NWNiaUFnSUNvZ1FIUjVjR1VnZTNOMGNtbHVaMzFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhRZ1pHVm1ZWFZzZEV4dlkyRnNaU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdaR1ZtWVhWc2RFeHZZMkZzWlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRaWFFnZEdobElHUmxabUYxYkhRZ2JHOWpZV3hsSUhSdklHTnlaV0YwWlNCRVlYUmxWR2x0WlhNZ2QybDBhQzRnUkc5bGN5QnViM1FnWVdabVpXTjBJR1Y0YVhOMGFXNW5JR2x1YzNSaGJtTmxjeTVjYmlBZ0lDb2dRSFI1Y0dVZ2UzTjBjbWx1WjMxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCelpYUWdaR1ZtWVhWc2RFeHZZMkZzWlNoc2IyTmhiR1VwSUh0Y2JpQWdJQ0JrWldaaGRXeDBURzlqWVd4bElEMGdiRzlqWVd4bE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdaR1ZtWVhWc2RDQnVkVzFpWlhKcGJtY2djM2x6ZEdWdElIUnZJR055WldGMFpTQkVZWFJsVkdsdFpYTWdkMmwwYUM0Z1JHOWxjeUJ1YjNRZ1lXWm1aV04wSUdWNGFYTjBhVzVuSUdsdWMzUmhibU5sY3k1Y2JpQWdJQ29nUUhSNWNHVWdlM04wY21sdVozMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5Qm5aWFFnWkdWbVlYVnNkRTUxYldKbGNtbHVaMU41YzNSbGJTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z1pHVm1ZWFZzZEU1MWJXSmxjbWx1WjFONWMzUmxiVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFpYUWdkR2hsSUdSbFptRjFiSFFnYm5WdFltVnlhVzVuSUhONWMzUmxiU0IwYnlCamNtVmhkR1VnUkdGMFpWUnBiV1Z6SUhkcGRHZ3VJRVJ2WlhNZ2JtOTBJR0ZtWm1WamRDQmxlR2x6ZEdsdVp5QnBibk4wWVc1alpYTXVYRzRnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nYzJWMElHUmxabUYxYkhST2RXMWlaWEpwYm1kVGVYTjBaVzBvYm5WdFltVnlhVzVuVTNsemRHVnRLU0I3WEc0Z0lDQWdaR1ZtWVhWc2RFNTFiV0psY21sdVoxTjVjM1JsYlNBOUlHNTFiV0psY21sdVoxTjVjM1JsYlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElHUmxabUYxYkhRZ2IzVjBjSFYwSUdOaGJHVnVaR0Z5SUhSdklHTnlaV0YwWlNCRVlYUmxWR2x0WlhNZ2QybDBhQzRnUkc5bGN5QnViM1FnWVdabVpXTjBJR1Y0YVhOMGFXNW5JR2x1YzNSaGJtTmxjeTVjYmlBZ0lDb2dRSFI1Y0dVZ2UzTjBjbWx1WjMxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCblpYUWdaR1ZtWVhWc2RFOTFkSEIxZEVOaGJHVnVaR0Z5S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJrWldaaGRXeDBUM1YwY0hWMFEyRnNaVzVrWVhJN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVMlYwSUhSb1pTQmtaV1poZFd4MElHOTFkSEIxZENCallXeGxibVJoY2lCMGJ5QmpjbVZoZEdVZ1JHRjBaVlJwYldWeklIZHBkR2d1SUVSdlpYTWdibTkwSUdGbVptVmpkQ0JsZUdsemRHbHVaeUJwYm5OMFlXNWpaWE11WEc0Z0lDQXFJRUIwZVhCbElIdHpkSEpwYm1kOVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2MyVjBJR1JsWm1GMWJIUlBkWFJ3ZFhSRFlXeGxibVJoY2lodmRYUndkWFJEWVd4bGJtUmhjaWtnZTF4dUlDQWdJR1JsWm1GMWJIUlBkWFJ3ZFhSRFlXeGxibVJoY2lBOUlHOTFkSEIxZEVOaGJHVnVaR0Z5TzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxkQ0IzYUdWMGFHVnlJRXgxZUc5dUlIZHBiR3dnZEdoeWIzY2dkMmhsYmlCcGRDQmxibU52ZFc1MFpYSnpJR2x1ZG1Gc2FXUWdSR0YwWlZScGJXVnpMQ0JFZFhKaGRHbHZibk1zSUc5eUlFbHVkR1Z5ZG1Gc2MxeHVJQ0FnS2lCQWRIbHdaU0I3WW05dmJHVmhibjFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhRZ2RHaHliM2RQYmtsdWRtRnNhV1FvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvY205M1QyNUpiblpoYkdsa08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRk5sZENCM2FHVjBhR1Z5SUV4MWVHOXVJSGRwYkd3Z2RHaHliM2NnZDJobGJpQnBkQ0JsYm1OdmRXNTBaWEp6SUdsdWRtRnNhV1FnUkdGMFpWUnBiV1Z6TENCRWRYSmhkR2x2Ym5Nc0lHOXlJRWx1ZEdWeWRtRnNjMXh1SUNBZ0tpQkFkSGx3WlNCN1ltOXZiR1ZoYm4xY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCelpYUWdkR2h5YjNkUGJrbHVkbUZzYVdRb2RDa2dlMXh1SUNBZ0lIUm9jbTkzVDI1SmJuWmhiR2xrSUQwZ2REdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhObGRDQk1kWGh2YmlkeklHZHNiMkpoYkNCallXTm9aWE11SUZOb2IzVnNaQ0J2Ym14NUlHSmxJRzVsWTJWemMyRnllU0JwYmlCMFpYTjBhVzVuSUhOalpXNWhjbWx2Y3k1Y2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QnlaWE5sZEVOaFkyaGxjeWdwSUh0Y2JpQWdJQ0JNYjJOaGJHVXVjbVZ6WlhSRFlXTm9aU2dwTzF4dUlDQWdJRWxCVGtGYWIyNWxMbkpsYzJWMFEyRmphR1VvS1R0Y2JpQWdmVnh1ZlZ4dUlpd2dJbWx0Y0c5eWRDQjdJSEJoWkZOMFlYSjBMQ0J5YjNWdVpGUnZMQ0JvWVhOU1pXeGhkR2wyWlNCOUlHWnliMjBnWENJdUwzVjBhV3d1YW5OY0lqdGNibWx0Y0c5eWRDQXFJR0Z6SUVWdVoyeHBjMmdnWm5KdmJTQmNJaTR2Wlc1bmJHbHphQzVxYzF3aU8xeHVhVzF3YjNKMElGTmxkSFJwYm1keklHWnliMjBnWENJdUxpOXpaWFIwYVc1bmN5NXFjMXdpTzF4dWFXMXdiM0owSUVSaGRHVlVhVzFsSUdaeWIyMGdYQ0l1TGk5a1lYUmxkR2x0WlM1cWMxd2lPMXh1YVcxd2IzSjBJRWxCVGtGYWIyNWxJR1p5YjIwZ1hDSXVMaTk2YjI1bGN5OUpRVTVCV205dVpTNXFjMXdpTzF4dVhHNHZMeUIwYjJSdklDMGdjbVZ0WVhBZ1kyRmphR2x1WjF4dVhHNXNaWFFnYVc1MGJFeEdRMkZqYUdVZ1BTQjdmVHRjYm1aMWJtTjBhVzl1SUdkbGRFTmhZMmhsWkV4R0tHeHZZMU4wY21sdVp5d2diM0IwY3lBOUlIdDlLU0I3WEc0Z0lHTnZibk4wSUd0bGVTQTlJRXBUVDA0dWMzUnlhVzVuYVdaNUtGdHNiMk5UZEhKcGJtY3NJRzl3ZEhOZEtUdGNiaUFnYkdWMElHUjBaaUE5SUdsdWRHeE1Sa05oWTJobFcydGxlVjA3WEc0Z0lHbG1JQ2doWkhSbUtTQjdYRzRnSUNBZ1pIUm1JRDBnYm1WM0lFbHVkR3d1VEdsemRFWnZjbTFoZENoc2IyTlRkSEpwYm1jc0lHOXdkSE1wTzF4dUlDQWdJR2x1ZEd4TVJrTmhZMmhsVzJ0bGVWMGdQU0JrZEdZN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUdSMFpqdGNibjFjYmx4dWJHVjBJR2x1ZEd4RVZFTmhZMmhsSUQwZ2UzMDdYRzVtZFc1amRHbHZiaUJuWlhSRFlXTm9aV1JFVkVZb2JHOWpVM1J5YVc1bkxDQnZjSFJ6SUQwZ2UzMHBJSHRjYmlBZ1kyOXVjM1FnYTJWNUlEMGdTbE5QVGk1emRISnBibWRwWm5rb1cyeHZZMU4wY21sdVp5d2diM0IwYzEwcE8xeHVJQ0JzWlhRZ1pIUm1JRDBnYVc1MGJFUlVRMkZqYUdWYmEyVjVYVHRjYmlBZ2FXWWdLQ0ZrZEdZcElIdGNiaUFnSUNCa2RHWWdQU0J1WlhjZ1NXNTBiQzVFWVhSbFZHbHRaVVp2Y20xaGRDaHNiMk5UZEhKcGJtY3NJRzl3ZEhNcE8xeHVJQ0FnSUdsdWRHeEVWRU5oWTJobFcydGxlVjBnUFNCa2RHWTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHUjBaanRjYm4xY2JseHViR1YwSUdsdWRHeE9kVzFEWVdOb1pTQTlJSHQ5TzF4dVpuVnVZM1JwYjI0Z1oyVjBRMkZqYUdWa1NVNUdLR3h2WTFOMGNtbHVaeXdnYjNCMGN5QTlJSHQ5S1NCN1hHNGdJR052Ym5OMElHdGxlU0E5SUVwVFQwNHVjM1J5YVc1bmFXWjVLRnRzYjJOVGRISnBibWNzSUc5d2RITmRLVHRjYmlBZ2JHVjBJR2x1WmlBOUlHbHVkR3hPZFcxRFlXTm9aVnRyWlhsZE8xeHVJQ0JwWmlBb0lXbHVaaWtnZTF4dUlDQWdJR2x1WmlBOUlHNWxkeUJKYm5Sc0xrNTFiV0psY2tadmNtMWhkQ2hzYjJOVGRISnBibWNzSUc5d2RITXBPMXh1SUNBZ0lHbHVkR3hPZFcxRFlXTm9aVnRyWlhsZElEMGdhVzVtTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJwYm1ZN1hHNTlYRzVjYm14bGRDQnBiblJzVW1Wc1EyRmphR1VnUFNCN2ZUdGNibVoxYm1OMGFXOXVJR2RsZEVOaFkyaGxaRkpVUmloc2IyTlRkSEpwYm1jc0lHOXdkSE1nUFNCN2ZTa2dlMXh1SUNCamIyNXpkQ0I3SUdKaGMyVXNJQzR1TG1OaFkyaGxTMlY1VDNCMGN5QjlJRDBnYjNCMGN6c2dMeThnWlhoamJIVmtaU0JnWW1GelpXQWdabkp2YlNCMGFHVWdiM0IwYVc5dWMxeHVJQ0JqYjI1emRDQnJaWGtnUFNCS1UwOU9Mbk4wY21sdVoybG1lU2hiYkc5alUzUnlhVzVuTENCallXTm9aVXRsZVU5d2RITmRLVHRjYmlBZ2JHVjBJR2x1WmlBOUlHbHVkR3hTWld4RFlXTm9aVnRyWlhsZE8xeHVJQ0JwWmlBb0lXbHVaaWtnZTF4dUlDQWdJR2x1WmlBOUlHNWxkeUJKYm5Sc0xsSmxiR0YwYVhabFZHbHRaVVp2Y20xaGRDaHNiMk5UZEhKcGJtY3NJRzl3ZEhNcE8xeHVJQ0FnSUdsdWRHeFNaV3hEWVdOb1pWdHJaWGxkSUQwZ2FXNW1PMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnBibVk3WEc1OVhHNWNibXhsZENCemVYTk1iMk5oYkdWRFlXTm9aU0E5SUc1MWJHdzdYRzVtZFc1amRHbHZiaUJ6ZVhOMFpXMU1iMk5oYkdVb0tTQjdYRzRnSUdsbUlDaHplWE5NYjJOaGJHVkRZV05vWlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ6ZVhOTWIyTmhiR1ZEWVdOb1pUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnplWE5NYjJOaGJHVkRZV05vWlNBOUlHNWxkeUJKYm5Sc0xrUmhkR1ZVYVcxbFJtOXliV0YwS0NrdWNtVnpiMngyWldSUGNIUnBiMjV6S0NrdWJHOWpZV3hsTzF4dUlDQWdJSEpsZEhWeWJpQnplWE5NYjJOaGJHVkRZV05vWlR0Y2JpQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQndZWEp6WlV4dlkyRnNaVk4wY21sdVp5aHNiMk5oYkdWVGRISXBJSHRjYmlBZ0x5OGdTU0J5WldGc2JIa2dkMkZ1ZENCMGJ5QmhkbTlwWkNCM2NtbDBhVzVuSUdFZ1FrTlFJRFEzSUhCaGNuTmxjbHh1SUNBdkx5QnpaV1VzSUdVdVp5NGdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMM2R2YjI5eWJTOWlZM0F0TkRkY2JpQWdMeThnU1c1emRHVmhaQ3dnZDJVbmJHd2daRzhnZEdocGN6cGNibHh1SUNBdkx5QmhLU0JwWmlCMGFHVWdjM1J5YVc1bklHaGhjeUJ1YnlBdGRTQmxlSFJsYm5OcGIyNXpMQ0JxZFhOMElHeGxZWFpsSUdsMElHRnNiMjVsWEc0Z0lDOHZJR0lwSUdsbUlHbDBJR1J2WlhNc0lIVnpaU0JKYm5Sc0lIUnZJSEpsYzI5c2RtVWdaWFpsY25sMGFHbHVaMXh1SUNBdkx5QmpLU0JwWmlCSmJuUnNJR1poYVd4ekxDQjBjbmtnWVdkaGFXNGdkMmwwYUc5MWRDQjBhR1VnTFhWY2JseHVJQ0JqYjI1emRDQjFTVzVrWlhnZ1BTQnNiMk5oYkdWVGRISXVhVzVrWlhoUFppaGNJaTExTFZ3aUtUdGNiaUFnYVdZZ0tIVkpibVJsZUNBOVBUMGdMVEVwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdXMnh2WTJGc1pWTjBjbDA3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnYkdWMElHOXdkR2x2Ym5NN1hHNGdJQ0FnWTI5dWMzUWdjMjFoYkd4bGNpQTlJR3h2WTJGc1pWTjBjaTV6ZFdKemRISnBibWNvTUN3Z2RVbHVaR1Y0S1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2IzQjBhVzl1Y3lBOUlHZGxkRU5oWTJobFpFUlVSaWhzYjJOaGJHVlRkSElwTG5KbGMyOXNkbVZrVDNCMGFXOXVjeWdwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUc5d2RHbHZibk1nUFNCblpYUkRZV05vWldSRVZFWW9jMjFoYkd4bGNpa3VjbVZ6YjJ4MlpXUlBjSFJwYjI1ektDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnZXlCdWRXMWlaWEpwYm1kVGVYTjBaVzBzSUdOaGJHVnVaR0Z5SUgwZ1BTQnZjSFJwYjI1ek8xeHVJQ0FnSUM4dklISmxkSFZ5YmlCMGFHVWdjMjFoYkd4bGNpQnZibVVnYzI4Z2RHaGhkQ0IzWlNCallXNGdZWEJ3Wlc1a0lIUm9aU0JqWVd4bGJtUmhjaUJoYm1RZ2JuVnRZbVZ5YVc1bklHOTJaWEp5YVdSbGN5QjBieUJwZEZ4dUlDQWdJSEpsZEhWeWJpQmJjMjFoYkd4bGNpd2diblZ0WW1WeWFXNW5VM2x6ZEdWdExDQmpZV3hsYm1SaGNsMDdYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnYVc1MGJFTnZibVpwWjFOMGNtbHVaeWhzYjJOaGJHVlRkSElzSUc1MWJXSmxjbWx1WjFONWMzUmxiU3dnYjNWMGNIVjBRMkZzWlc1a1lYSXBJSHRjYmlBZ2FXWWdLRzkxZEhCMWRFTmhiR1Z1WkdGeUlIeDhJRzUxYldKbGNtbHVaMU41YzNSbGJTa2dlMXh1SUNBZ0lHeHZZMkZzWlZOMGNpQXJQU0JjSWkxMVhDSTdYRzVjYmlBZ0lDQnBaaUFvYjNWMGNIVjBRMkZzWlc1a1lYSXBJSHRjYmlBZ0lDQWdJR3h2WTJGc1pWTjBjaUFyUFNCZ0xXTmhMU1I3YjNWMGNIVjBRMkZzWlc1a1lYSjlZRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYm5WdFltVnlhVzVuVTNsemRHVnRLU0I3WEc0Z0lDQWdJQ0JzYjJOaGJHVlRkSElnS3owZ1lDMXVkUzBrZTI1MWJXSmxjbWx1WjFONWMzUmxiWDFnTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JHOWpZV3hsVTNSeU8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCc2IyTmhiR1ZUZEhJN1hHNGdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdiV0Z3VFc5dWRHaHpLR1lwSUh0Y2JpQWdZMjl1YzNRZ2JYTWdQU0JiWFR0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURFN0lHa2dQRDBnTVRJN0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElHUjBJRDBnUkdGMFpWUnBiV1V1ZFhSaktESXdNVFlzSUdrc0lERXBPMXh1SUNBZ0lHMXpMbkIxYzJnb1ppaGtkQ2twTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ0Y3p0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYldGd1YyVmxhMlJoZVhNb1ppa2dlMXh1SUNCamIyNXpkQ0J0Y3lBOUlGdGRPMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNVHNnYVNBOFBTQTNPeUJwS3lzcElIdGNiaUFnSUNCamIyNXpkQ0JrZENBOUlFUmhkR1ZVYVcxbExuVjBZeWd5TURFMkxDQXhNU3dnTVRNZ0t5QnBLVHRjYmlBZ0lDQnRjeTV3ZFhOb0tHWW9aSFFwS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYlhNN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUd4cGMzUlRkSFZtWmloc2IyTXNJR3hsYm1kMGFDd2daR1ZtWVhWc2RFOUxMQ0JsYm1kc2FYTm9SbTRzSUdsdWRHeEdiaWtnZTF4dUlDQmpiMjV6ZENCdGIyUmxJRDBnYkc5akxteHBjM1JwYm1kTmIyUmxLR1JsWm1GMWJIUlBTeWs3WEc1Y2JpQWdhV1lnS0cxdlpHVWdQVDA5SUZ3aVpYSnliM0pjSWlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0I5SUdWc2MyVWdhV1lnS0cxdlpHVWdQVDA5SUZ3aVpXNWNJaWtnZTF4dUlDQWdJSEpsZEhWeWJpQmxibWRzYVhOb1JtNG9iR1Z1WjNSb0tUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnlaWFIxY200Z2FXNTBiRVp1S0d4bGJtZDBhQ2s3WEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2MzVndjRzl5ZEhOR1lYTjBUblZ0WW1WeWN5aHNiMk1wSUh0Y2JpQWdhV1lnS0d4dll5NXVkVzFpWlhKcGJtZFRlWE4wWlcwZ0ppWWdiRzlqTG01MWJXSmxjbWx1WjFONWMzUmxiU0FoUFQwZ1hDSnNZWFJ1WENJcElIdGNiaUFnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdjbVYwZFhKdUlDaGNiaUFnSUNBZ0lHeHZZeTV1ZFcxaVpYSnBibWRUZVhOMFpXMGdQVDA5SUZ3aWJHRjBibHdpSUh4OFhHNGdJQ0FnSUNBaGJHOWpMbXh2WTJGc1pTQjhmRnh1SUNBZ0lDQWdiRzlqTG14dlkyRnNaUzV6ZEdGeWRITlhhWFJvS0Z3aVpXNWNJaWtnZkh4Y2JpQWdJQ0FnSUc1bGR5QkpiblJzTGtSaGRHVlVhVzFsUm05eWJXRjBLR3h2WXk1cGJuUnNLUzV5WlhOdmJIWmxaRTl3ZEdsdmJuTW9LUzV1ZFcxaVpYSnBibWRUZVhOMFpXMGdQVDA5SUZ3aWJHRjBibHdpWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibHh1WTJ4aGMzTWdVRzlzZVU1MWJXSmxja1p2Y20xaGRIUmxjaUI3WEc0Z0lHTnZibk4wY25WamRHOXlLR2x1ZEd3c0lHWnZjbU5sVTJsdGNHeGxMQ0J2Y0hSektTQjdYRzRnSUNBZ2RHaHBjeTV3WVdSVWJ5QTlJRzl3ZEhNdWNHRmtWRzhnZkh3Z01EdGNiaUFnSUNCMGFHbHpMbVpzYjI5eUlEMGdiM0IwY3k1bWJHOXZjaUI4ZkNCbVlXeHpaVHRjYmx4dUlDQWdJR052Ym5OMElIc2djR0ZrVkc4c0lHWnNiMjl5TENBdUxpNXZkR2hsY2s5d2RITWdmU0E5SUc5d2RITTdYRzVjYmlBZ0lDQnBaaUFvSVdadmNtTmxVMmx0Y0d4bElIeDhJRTlpYW1WamRDNXJaWGx6S0c5MGFHVnlUM0IwY3lrdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2FXNTBiRTl3ZEhNZ1BTQjdJSFZ6WlVkeWIzVndhVzVuT2lCbVlXeHpaU3dnTGk0dWIzQjBjeUI5TzF4dUlDQWdJQ0FnYVdZZ0tHOXdkSE11Y0dGa1ZHOGdQaUF3S1NCcGJuUnNUM0IwY3k1dGFXNXBiWFZ0U1c1MFpXZGxja1JwWjJsMGN5QTlJRzl3ZEhNdWNHRmtWRzg3WEc0Z0lDQWdJQ0IwYUdsekxtbHVaaUE5SUdkbGRFTmhZMmhsWkVsT1JpaHBiblJzTENCcGJuUnNUM0IwY3lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ1ptOXliV0YwS0drcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1cGJtWXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHWnBlR1ZrSUQwZ2RHaHBjeTVtYkc5dmNpQS9JRTFoZEdndVpteHZiM0lvYVNrZ09pQnBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YVc1bUxtWnZjbTFoZENobWFYaGxaQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDOHZJSFJ2SUcxaGRHTm9JSFJvWlNCaWNtOTNjMlZ5SjNNZ2JuVnRZbVZ5Wm05eWJXRjBkR1Z5SUdSbFptRjFiSFJ6WEc0Z0lDQWdJQ0JqYjI1emRDQm1hWGhsWkNBOUlIUm9hWE11Wm14dmIzSWdQeUJOWVhSb0xtWnNiMjl5S0drcElEb2djbTkxYm1SVWJ5aHBMQ0F6S1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ3WVdSVGRHRnlkQ2htYVhobFpDd2dkR2hwY3k1d1lXUlVieWs3WEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nUUhCeWFYWmhkR1ZjYmlBcUwxeHVYRzVqYkdGemN5QlFiMng1UkdGMFpVWnZjbTFoZEhSbGNpQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtHUjBMQ0JwYm5Sc0xDQnZjSFJ6S1NCN1hHNGdJQ0FnZEdocGN5NXZjSFJ6SUQwZ2IzQjBjenRjYmx4dUlDQWdJR3hsZENCNk8xeHVJQ0FnSUdsbUlDaGtkQzU2YjI1bExtbHpWVzVwZG1WeWMyRnNLU0I3WEc0Z0lDQWdJQ0F2THlCVlZFTXRPQ0J2Y2lCRmRHTXZWVlJETFRnZ1lYSmxJRzV2ZENCd1lYSjBJRzltSUhSNlpHRjBZU3dnYjI1c2VTQkZkR012UjAxVUt6Z2dZVzVrSUhSb1pTQnNhV3RsTGx4dUlDQWdJQ0FnTHk4Z1ZHaGhkQ0JwY3lCM2FIa2dabWw0WldRdGIyWm1jMlYwSUZSYUlHbHpJSE5sZENCMGJ5QjBhR0YwSUhWdWJHVnpjeUJwZENCcGN6cGNiaUFnSUNBZ0lDOHZJREV1SUZKbGNISmxjMlZ1ZEdsdVp5QnZabVp6WlhRZ01DQjNhR1Z1SUZWVVF5QnBjeUIxYzJWa0lIUnZJRzFoYVc1MFlXbHVJSEJ5WlhacGIzVnpJR0psYUdGMmFXOXlJR0Z1WkNCa2IyVnpJRzV2ZENCaVpXTnZiV1VnUjAxVUxseHVJQ0FnSUNBZ0x5OGdNaTRnVlc1emRYQndiM0owWldRZ1lua2dkR2hsSUdKeWIzZHpaWEk2WEc0Z0lDQWdJQ0F2THlBZ0lDQXRJSE52YldVZ1pHOGdibTkwSUhOMWNIQnZjblFnUlhSakwxeHVJQ0FnSUNBZ0x5OGdJQ0FnTFNBOElFVjBZeTlIVFZRdE1UUXNJRDRnUlhSakwwZE5WQ3N4TWl3Z1lXNWtJRE13TFcxcGJuVjBaU0J2Y2lBME5TMXRhVzUxZEdVZ2IyWm1jMlYwY3lCaGNtVWdibTkwSUhCaGNuUWdiMllnZEhwa1lYUmhYRzRnSUNBZ0lDQmpiMjV6ZENCbmJYUlBabVp6WlhRZ1BTQXRNU0FxSUNoa2RDNXZabVp6WlhRZ0x5QTJNQ2s3WEc0Z0lDQWdJQ0JqYjI1emRDQnZabVp6WlhSYUlEMGdaMjEwVDJabWMyVjBJRDQ5SURBZ1B5QmdSWFJqTDBkTlZDc2tlMmR0ZEU5bVpuTmxkSDFnSURvZ1lFVjBZeTlIVFZRa2UyZHRkRTltWm5ObGRIMWdPMXh1SUNBZ0lDQWdhV1lnS0dSMExtOW1abk5sZENBaFBUMGdNQ0FtSmlCSlFVNUJXbTl1WlM1amNtVmhkR1VvYjJabWMyVjBXaWt1ZG1Gc2FXUXBJSHRjYmlBZ0lDQWdJQ0FnZWlBOUlHOW1abk5sZEZvN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WkhRZ1BTQmtkRHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQzh2SUU1dmRDQmhiR3dnWm1sNFpXUXRiMlptYzJWMElIcHZibVZ6SUd4cGEyVWdSWFJqTHlzME9qTXdJR0Z5WlNCd2NtVnpaVzUwSUdsdUlIUjZaR0YwWVM1Y2JpQWdJQ0FnSUNBZ0x5OGdVMjhnZDJVZ2FHRjJaU0IwYnlCdFlXdGxJR1J2TGlCVWQyOGdZMkZ6WlhNNlhHNGdJQ0FnSUNBZ0lDOHZJREV1SUZSb1pTQm1iM0p0WVhRZ2IzQjBhVzl1Y3lCMFpXeHNJSFZ6SUhSdklITm9iM2NnZEdobElIcHZibVV1SUZkbElHTmhiaWQwSUdSdklIUm9ZWFFzSUhOdklIUm9aU0JpWlhOMFhHNGdJQ0FnSUNBZ0lDOHZJSGRsSUdOaGJpQmtieUJwY3lCbWIzSnRZWFFnZEdobElHUmhkR1VnYVc0Z1ZWUkRMbHh1SUNBZ0lDQWdJQ0F2THlBeUxpQlVhR1VnWm05eWJXRjBJRzl3ZEdsdmJuTWdaRzl1SjNRZ2RHVnNiQ0IxY3lCMGJ5QnphRzkzSUhSb1pTQjZiMjVsTGlCVWFHVnVJSGRsSUdOaGJpQmhaR3AxYzNRZ2RHaGxiVnh1SUNBZ0lDQWdJQ0F2THlCMGFHVWdkR2x0WlNCaGJtUWdkR1ZzYkNCMGFHVWdabTl5YldGMGRHVnlJSFJ2SUhOb2IzY2dhWFFnZEc4Z2RYTWdhVzRnVlZSRExDQnpieUIwYUdGMElIUm9aU0IwYVcxbElHbHpJSEpwWjJoMFhHNGdJQ0FnSUNBZ0lDOHZJR0Z1WkNCMGFHVWdZbUZrSUhwdmJtVWdaRzlsYzI0bmRDQnphRzkzSUhWd0xseHVJQ0FnSUNBZ0lDQjZJRDBnWENKVlZFTmNJanRjYmlBZ0lDQWdJQ0FnYVdZZ0tHOXdkSE11ZEdsdFpWcHZibVZPWVcxbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWtkQ0E5SUdSME8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpIUWdQU0JrZEM1dlptWnpaWFFnUFQwOUlEQWdQeUJrZENBNklFUmhkR1ZVYVcxbExtWnliMjFOYVd4c2FYTW9aSFF1ZEhNZ0t5QmtkQzV2Wm1aelpYUWdLaUEyTUNBcUlERXdNREFwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoa2RDNTZiMjVsTG5SNWNHVWdQVDA5SUZ3aWMzbHpkR1Z0WENJcElIdGNiaUFnSUNBZ0lIUm9hWE11WkhRZ1BTQmtkRHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVrZENBOUlHUjBPMXh1SUNBZ0lDQWdlaUE5SUdSMExucHZibVV1Ym1GdFpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCamIyNXpkQ0JwYm5Sc1QzQjBjeUE5SUhzZ0xpNHVkR2hwY3k1dmNIUnpJSDA3WEc0Z0lDQWdhV1lnS0hvcElIdGNiaUFnSUNBZ0lHbHVkR3hQY0hSekxuUnBiV1ZhYjI1bElEMGdlanRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTVrZEdZZ1BTQm5aWFJEWVdOb1pXUkVWRVlvYVc1MGJDd2dhVzUwYkU5d2RITXBPMXh1SUNCOVhHNWNiaUFnWm05eWJXRjBLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1SMFppNW1iM0p0WVhRb2RHaHBjeTVrZEM1MGIwcFRSR0YwWlNncEtUdGNiaUFnZlZ4dVhHNGdJR1p2Y20xaGRGUnZVR0Z5ZEhNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaSFJtTG1admNtMWhkRlJ2VUdGeWRITW9kR2hwY3k1a2RDNTBiMHBUUkdGMFpTZ3BLVHRjYmlBZ2ZWeHVYRzRnSUhKbGMyOXNkbVZrVDNCMGFXOXVjeWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1a2RHWXVjbVZ6YjJ4MlpXUlBjSFJwYjI1ektDazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvdlhHNWpiR0Z6Y3lCUWIyeDVVbVZzUm05eWJXRjBkR1Z5SUh0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYVc1MGJDd2dhWE5GYm1kc2FYTm9MQ0J2Y0hSektTQjdYRzRnSUNBZ2RHaHBjeTV2Y0hSeklEMGdleUJ6ZEhsc1pUb2dYQ0pzYjI1blhDSXNJQzR1TG05d2RITWdmVHRjYmlBZ0lDQnBaaUFvSVdselJXNW5iR2x6YUNBbUppQm9ZWE5TWld4aGRHbDJaU2dwS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbkowWmlBOUlHZGxkRU5oWTJobFpGSlVSaWhwYm5Sc0xDQnZjSFJ6S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCbWIzSnRZWFFvWTI5MWJuUXNJSFZ1YVhRcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1eWRHWXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5KMFppNW1iM0p0WVhRb1kyOTFiblFzSUhWdWFYUXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUlc1bmJHbHphQzVtYjNKdFlYUlNaV3hoZEdsMlpWUnBiV1VvZFc1cGRDd2dZMjkxYm5Rc0lIUm9hWE11YjNCMGN5NXVkVzFsY21sakxDQjBhR2x6TG05d2RITXVjM1I1YkdVZ0lUMDlJRndpYkc5dVoxd2lLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JtYjNKdFlYUlViMUJoY25SektHTnZkVzUwTENCMWJtbDBLU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVjblJtS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NXlkR1l1Wm05eWJXRjBWRzlRWVhKMGN5aGpiM1Z1ZEN3Z2RXNXBkQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCYlhUdGNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRXh2WTJGc1pTQjdYRzRnSUhOMFlYUnBZeUJtY205dFQzQjBjeWh2Y0hSektTQjdYRzRnSUNBZ2NtVjBkWEp1SUV4dlkyRnNaUzVqY21WaGRHVW9iM0IwY3k1c2IyTmhiR1VzSUc5d2RITXViblZ0WW1WeWFXNW5VM2x6ZEdWdExDQnZjSFJ6TG05MWRIQjFkRU5oYkdWdVpHRnlMQ0J2Y0hSekxtUmxabUYxYkhSVWIwVk9LVHRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJqY21WaGRHVW9iRzlqWVd4bExDQnVkVzFpWlhKcGJtZFRlWE4wWlcwc0lHOTFkSEIxZEVOaGJHVnVaR0Z5TENCa1pXWmhkV3gwVkc5RlRpQTlJR1poYkhObEtTQjdYRzRnSUNBZ1kyOXVjM1FnYzNCbFkybG1hV1ZrVEc5allXeGxJRDBnYkc5allXeGxJSHg4SUZObGRIUnBibWR6TG1SbFptRjFiSFJNYjJOaGJHVTdYRzRnSUNBZ0x5OGdkR2hsSUhONWMzUmxiU0JzYjJOaGJHVWdhWE1nZFhObFpuVnNJR1p2Y2lCb2RXMWhiaUJ5WldGa1lXSnNaU0J6ZEhKcGJtZHpJR0oxZENCaGJtNXZlV2x1WnlCbWIzSWdjR0Z5YzJsdVp5OW1iM0p0WVhSMGFXNW5JR3R1YjNkdUlHWnZjbTFoZEhOY2JpQWdJQ0JqYjI1emRDQnNiMk5oYkdWU0lEMGdjM0JsWTJsbWFXVmtURzlqWVd4bElIeDhJQ2hrWldaaGRXeDBWRzlGVGlBL0lGd2laVzR0VlZOY0lpQTZJSE41YzNSbGJVeHZZMkZzWlNncEtUdGNiaUFnSUNCamIyNXpkQ0J1ZFcxaVpYSnBibWRUZVhOMFpXMVNJRDBnYm5WdFltVnlhVzVuVTNsemRHVnRJSHg4SUZObGRIUnBibWR6TG1SbFptRjFiSFJPZFcxaVpYSnBibWRUZVhOMFpXMDdYRzRnSUNBZ1kyOXVjM1FnYjNWMGNIVjBRMkZzWlc1a1lYSlNJRDBnYjNWMGNIVjBRMkZzWlc1a1lYSWdmSHdnVTJWMGRHbHVaM011WkdWbVlYVnNkRTkxZEhCMWRFTmhiR1Z1WkdGeU8xeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1RHOWpZV3hsS0d4dlkyRnNaVklzSUc1MWJXSmxjbWx1WjFONWMzUmxiVklzSUc5MWRIQjFkRU5oYkdWdVpHRnlVaXdnYzNCbFkybG1hV1ZrVEc5allXeGxLVHRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJ5WlhObGRFTmhZMmhsS0NrZ2UxeHVJQ0FnSUhONWMweHZZMkZzWlVOaFkyaGxJRDBnYm5Wc2JEdGNiaUFnSUNCcGJuUnNSRlJEWVdOb1pTQTlJSHQ5TzF4dUlDQWdJR2x1ZEd4T2RXMURZV05vWlNBOUlIdDlPMXh1SUNBZ0lHbHVkR3hTWld4RFlXTm9aU0E5SUh0OU8xeHVJQ0I5WEc1Y2JpQWdjM1JoZEdsaklHWnliMjFQWW1wbFkzUW9leUJzYjJOaGJHVXNJRzUxYldKbGNtbHVaMU41YzNSbGJTd2diM1YwY0hWMFEyRnNaVzVrWVhJZ2ZTQTlJSHQ5S1NCN1hHNGdJQ0FnY21WMGRYSnVJRXh2WTJGc1pTNWpjbVZoZEdVb2JHOWpZV3hsTENCdWRXMWlaWEpwYm1kVGVYTjBaVzBzSUc5MWRIQjFkRU5oYkdWdVpHRnlLVHRjYmlBZ2ZWeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtHeHZZMkZzWlN3Z2JuVnRZbVZ5YVc1bkxDQnZkWFJ3ZFhSRFlXeGxibVJoY2l3Z2MzQmxZMmxtYVdWa1RHOWpZV3hsS1NCN1hHNGdJQ0FnWTI5dWMzUWdXM0JoY25ObFpFeHZZMkZzWlN3Z2NHRnljMlZrVG5WdFltVnlhVzVuVTNsemRHVnRMQ0J3WVhKelpXUlBkWFJ3ZFhSRFlXeGxibVJoY2wwZ1BTQndZWEp6WlV4dlkyRnNaVk4wY21sdVp5aHNiMk5oYkdVcE8xeHVYRzRnSUNBZ2RHaHBjeTVzYjJOaGJHVWdQU0J3WVhKelpXUk1iMk5oYkdVN1hHNGdJQ0FnZEdocGN5NXVkVzFpWlhKcGJtZFRlWE4wWlcwZ1BTQnVkVzFpWlhKcGJtY2dmSHdnY0dGeWMyVmtUblZ0WW1WeWFXNW5VM2x6ZEdWdElIeDhJRzUxYkd3N1hHNGdJQ0FnZEdocGN5NXZkWFJ3ZFhSRFlXeGxibVJoY2lBOUlHOTFkSEIxZEVOaGJHVnVaR0Z5SUh4OElIQmhjbk5sWkU5MWRIQjFkRU5oYkdWdVpHRnlJSHg4SUc1MWJHdzdYRzRnSUNBZ2RHaHBjeTVwYm5Sc0lEMGdhVzUwYkVOdmJtWnBaMU4wY21sdVp5aDBhR2x6TG14dlkyRnNaU3dnZEdocGN5NXVkVzFpWlhKcGJtZFRlWE4wWlcwc0lIUm9hWE11YjNWMGNIVjBRMkZzWlc1a1lYSXBPMXh1WEc0Z0lDQWdkR2hwY3k1M1pXVnJaR0Y1YzBOaFkyaGxJRDBnZXlCbWIzSnRZWFE2SUh0OUxDQnpkR0Z1WkdGc2IyNWxPaUI3ZlNCOU8xeHVJQ0FnSUhSb2FYTXViVzl1ZEdoelEyRmphR1VnUFNCN0lHWnZjbTFoZERvZ2UzMHNJSE4wWVc1a1lXeHZibVU2SUh0OUlIMDdYRzRnSUNBZ2RHaHBjeTV0WlhKcFpHbGxiVU5oWTJobElEMGdiblZzYkR0Y2JpQWdJQ0IwYUdsekxtVnlZVU5oWTJobElEMGdlMzA3WEc1Y2JpQWdJQ0IwYUdsekxuTndaV05wWm1sbFpFeHZZMkZzWlNBOUlITndaV05wWm1sbFpFeHZZMkZzWlR0Y2JpQWdJQ0IwYUdsekxtWmhjM1JPZFcxaVpYSnpRMkZqYUdWa0lEMGdiblZzYkR0Y2JpQWdmVnh1WEc0Z0lHZGxkQ0JtWVhOMFRuVnRZbVZ5Y3lncElIdGNiaUFnSUNCcFppQW9kR2hwY3k1bVlYTjBUblZ0WW1WeWMwTmhZMmhsWkNBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVpoYzNST2RXMWlaWEp6UTJGamFHVmtJRDBnYzNWd2NHOXlkSE5HWVhOMFRuVnRZbVZ5Y3loMGFHbHpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVtWVhOMFRuVnRZbVZ5YzBOaFkyaGxaRHRjYmlBZ2ZWeHVYRzRnSUd4cGMzUnBibWROYjJSbEtDa2dlMXh1SUNBZ0lHTnZibk4wSUdselFXTjBkV0ZzYkhsRmJpQTlJSFJvYVhNdWFYTkZibWRzYVhOb0tDazdYRzRnSUNBZ1kyOXVjM1FnYUdGelRtOVhaV2x5Wkc1bGMzTWdQVnh1SUNBZ0lDQWdLSFJvYVhNdWJuVnRZbVZ5YVc1blUzbHpkR1Z0SUQwOVBTQnVkV3hzSUh4OElIUm9hWE11Ym5WdFltVnlhVzVuVTNsemRHVnRJRDA5UFNCY0lteGhkRzVjSWlrZ0ppWmNiaUFnSUNBZ0lDaDBhR2x6TG05MWRIQjFkRU5oYkdWdVpHRnlJRDA5UFNCdWRXeHNJSHg4SUhSb2FYTXViM1YwY0hWMFEyRnNaVzVrWVhJZ1BUMDlJRndpWjNKbFoyOXllVndpS1R0Y2JpQWdJQ0J5WlhSMWNtNGdhWE5CWTNSMVlXeHNlVVZ1SUNZbUlHaGhjMDV2VjJWcGNtUnVaWE56SUQ4Z1hDSmxibHdpSURvZ1hDSnBiblJzWENJN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNoaGJIUnpLU0I3WEc0Z0lDQWdhV1lnS0NGaGJIUnpJSHg4SUU5aWFtVmpkQzVuWlhSUGQyNVFjbTl3WlhKMGVVNWhiV1Z6S0dGc2RITXBMbXhsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJNYjJOaGJHVXVZM0psWVhSbEtGeHVJQ0FnSUNBZ0lDQmhiSFJ6TG14dlkyRnNaU0I4ZkNCMGFHbHpMbk53WldOcFptbGxaRXh2WTJGc1pTeGNiaUFnSUNBZ0lDQWdZV3gwY3k1dWRXMWlaWEpwYm1kVGVYTjBaVzBnZkh3Z2RHaHBjeTV1ZFcxaVpYSnBibWRUZVhOMFpXMHNYRzRnSUNBZ0lDQWdJR0ZzZEhNdWIzVjBjSFYwUTJGc1pXNWtZWElnZkh3Z2RHaHBjeTV2ZFhSd2RYUkRZV3hsYm1SaGNpeGNiaUFnSUNBZ0lDQWdZV3gwY3k1a1pXWmhkV3gwVkc5RlRpQjhmQ0JtWVd4elpWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaV1JsWm1GMWJIUlViMFZPS0dGc2RITWdQU0I3ZlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnNiMjVsS0hzZ0xpNHVZV3gwY3l3Z1pHVm1ZWFZzZEZSdlJVNDZJSFJ5ZFdVZ2ZTazdYRzRnSUgxY2JseHVJQ0J5WldSbFptRjFiSFJVYjFONWMzUmxiU2hoYkhSeklEMGdlMzBwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amJHOXVaU2g3SUM0dUxtRnNkSE1zSUdSbFptRjFiSFJVYjBWT09pQm1ZV3h6WlNCOUtUdGNiaUFnZlZ4dVhHNGdJRzF2Ym5Sb2N5aHNaVzVuZEdnc0lHWnZjbTFoZENBOUlHWmhiSE5sTENCa1pXWmhkV3gwVDBzZ1BTQjBjblZsS1NCN1hHNGdJQ0FnY21WMGRYSnVJR3hwYzNSVGRIVm1aaWgwYUdsekxDQnNaVzVuZEdnc0lHUmxabUYxYkhSUFN5d2dSVzVuYkdsemFDNXRiMjUwYUhNc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1ZEd3Z1BTQm1iM0p0WVhRZ1B5QjdJRzF2Ym5Sb09pQnNaVzVuZEdnc0lHUmhlVG9nWENKdWRXMWxjbWxqWENJZ2ZTQTZJSHNnYlc5dWRHZzZJR3hsYm1kMGFDQjlMRnh1SUNBZ0lDQWdJQ0JtYjNKdFlYUlRkSElnUFNCbWIzSnRZWFFnUHlCY0ltWnZjbTFoZEZ3aUlEb2dYQ0p6ZEdGdVpHRnNiMjVsWENJN1hHNGdJQ0FnSUNCcFppQW9JWFJvYVhNdWJXOXVkR2h6UTJGamFHVmJabTl5YldGMFUzUnlYVnRzWlc1bmRHaGRLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViVzl1ZEdoelEyRmphR1ZiWm05eWJXRjBVM1J5WFZ0c1pXNW5kR2hkSUQwZ2JXRndUVzl1ZEdoektDaGtkQ2tnUFQ0Z2RHaHBjeTVsZUhSeVlXTjBLR1IwTENCcGJuUnNMQ0JjSW0xdmJuUm9YQ0lwS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtMXZiblJvYzBOaFkyaGxXMlp2Y20xaGRGTjBjbDFiYkdWdVozUm9YVHRjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUhkbFpXdGtZWGx6S0d4bGJtZDBhQ3dnWm05eWJXRjBJRDBnWm1Gc2MyVXNJR1JsWm1GMWJIUlBTeUE5SUhSeWRXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2JHbHpkRk4wZFdabUtIUm9hWE1zSUd4bGJtZDBhQ3dnWkdWbVlYVnNkRTlMTENCRmJtZHNhWE5vTG5kbFpXdGtZWGx6TENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnBiblJzSUQwZ1ptOXliV0YwWEc0Z0lDQWdJQ0FnSUNBZ1B5QjdJSGRsWld0a1lYazZJR3hsYm1kMGFDd2dlV1ZoY2pvZ1hDSnVkVzFsY21salhDSXNJRzF2Ym5Sb09pQmNJbXh2Ym1kY0lpd2daR0Y1T2lCY0ltNTFiV1Z5YVdOY0lpQjlYRzRnSUNBZ0lDQWdJQ0FnT2lCN0lIZGxaV3RrWVhrNklHeGxibWQwYUNCOUxGeHVJQ0FnSUNBZ0lDQm1iM0p0WVhSVGRISWdQU0JtYjNKdFlYUWdQeUJjSW1admNtMWhkRndpSURvZ1hDSnpkR0Z1WkdGc2IyNWxYQ0k3WEc0Z0lDQWdJQ0JwWmlBb0lYUm9hWE11ZDJWbGEyUmhlWE5EWVdOb1pWdG1iM0p0WVhSVGRISmRXMnhsYm1kMGFGMHBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNaV1ZyWkdGNWMwTmhZMmhsVzJadmNtMWhkRk4wY2wxYmJHVnVaM1JvWFNBOUlHMWhjRmRsWld0a1lYbHpLQ2hrZENrZ1BUNWNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtVjRkSEpoWTNRb1pIUXNJR2x1ZEd3c0lGd2lkMlZsYTJSaGVWd2lLVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWQyVmxhMlJoZVhORFlXTm9aVnRtYjNKdFlYUlRkSEpkVzJ4bGJtZDBhRjA3WEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNCdFpYSnBaR2xsYlhNb1pHVm1ZWFZzZEU5TElEMGdkSEoxWlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJzYVhOMFUzUjFabVlvWEc0Z0lDQWdJQ0IwYUdsekxGeHVJQ0FnSUNBZ2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUNBZ1pHVm1ZWFZzZEU5TExGeHVJQ0FnSUNBZ0tDa2dQVDRnUlc1bmJHbHphQzV0WlhKcFpHbGxiWE1zWEc0Z0lDQWdJQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQzh2SUVsdUlIUm9aVzl5ZVNCMGFHVnlaU0JqYjNWc1pDQmlaU0JoY21saWFYUnlZWEo1SUdSaGVTQndaWEpwYjJSekxpQlhaU2R5WlNCbmIyNXVZU0JoYzNOMWJXVWdkR2hsY21VZ1lYSmxJR1Y0WVdOMGJIa2dkSGR2WEc0Z0lDQWdJQ0FnSUM4dklHWnZjaUJCVFNCaGJtUWdVRTB1SUZSb2FYTWdhWE1nY0hKdlltRmliSGtnZDNKdmJtY3NJR0oxZENCcGRDZHpJRzFoYTJWeklIQmhjbk5wYm1jZ2QyRjVJR1ZoYzJsbGNpNWNiaUFnSUNBZ0lDQWdhV1lnS0NGMGFHbHpMbTFsY21sa2FXVnRRMkZqYUdVcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnBiblJzSUQwZ2V5Qm9iM1Z5T2lCY0ltNTFiV1Z5YVdOY0lpd2dhRzkxY2tONVkyeGxPaUJjSW1neE1sd2lJSDA3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV0WlhKcFpHbGxiVU5oWTJobElEMGdXMFJoZEdWVWFXMWxMblYwWXlneU1ERTJMQ0F4TVN3Z01UTXNJRGtwTENCRVlYUmxWR2x0WlM1MWRHTW9NakF4Tml3Z01URXNJREV6TENBeE9TbGRMbTFoY0NoY2JpQWdJQ0FnSUNBZ0lDQWdJQ2hrZENrZ1BUNGdkR2hwY3k1bGVIUnlZV04wS0dSMExDQnBiblJzTENCY0ltUmhlWEJsY21sdlpGd2lLVnh1SUNBZ0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1dFpYSnBaR2xsYlVOaFkyaGxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0JsY21GektHeGxibWQwYUN3Z1pHVm1ZWFZzZEU5TElEMGdkSEoxWlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJzYVhOMFUzUjFabVlvZEdocGN5d2diR1Z1WjNSb0xDQmtaV1poZFd4MFQwc3NJRVZ1WjJ4cGMyZ3VaWEpoY3l3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdhVzUwYkNBOUlIc2daWEpoT2lCc1pXNW5kR2dnZlR0Y2JseHVJQ0FnSUNBZ0x5OGdWR2hwY3lCcGN5QndjbTlpYkdWdFlYUnBZeTRnUkdsbVptVnlaVzUwSUdOaGJHVnVaR0Z5Y3lCaGNtVWdaMjlwYm1jZ2RHOGdaR1ZtYVc1bElHVnlZWE1nZEc5MFlXeHNlU0JrYVdabVpYSmxiblJzZVM0Z1YyaGhkQ0JKSUc1bFpXUWdhWE1nZEdobElHMXBibWx0ZFcwZ2MyVjBJRzltSUdSaGRHVnpYRzRnSUNBZ0lDQXZMeUIwYnlCa1pXWnBibWwwWld4NUlHVnVkVzFsY21GMFpTQjBhR1Z0TGx4dUlDQWdJQ0FnYVdZZ0tDRjBhR2x6TG1WeVlVTmhZMmhsVzJ4bGJtZDBhRjBwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVsY21GRFlXTm9aVnRzWlc1bmRHaGRJRDBnVzBSaGRHVlVhVzFsTG5WMFl5Z3ROREFzSURFc0lERXBMQ0JFWVhSbFZHbHRaUzUxZEdNb01qQXhOeXdnTVN3Z01TbGRMbTFoY0Nnb1pIUXBJRDArWEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVsZUhSeVlXTjBLR1IwTENCcGJuUnNMQ0JjSW1WeVlWd2lLVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWxjbUZEWVdOb1pWdHNaVzVuZEdoZE8xeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdaWGgwY21GamRDaGtkQ3dnYVc1MGJFOXdkSE1zSUdacFpXeGtLU0I3WEc0Z0lDQWdZMjl1YzNRZ1pHWWdQU0IwYUdsekxtUjBSbTl5YldGMGRHVnlLR1IwTENCcGJuUnNUM0IwY3lrc1hHNGdJQ0FnSUNCeVpYTjFiSFJ6SUQwZ1pHWXVabTl5YldGMFZHOVFZWEowY3lncExGeHVJQ0FnSUNBZ2JXRjBZMmhwYm1jZ1BTQnlaWE4xYkhSekxtWnBibVFvS0cwcElEMCtJRzB1ZEhsd1pTNTBiMHh2ZDJWeVEyRnpaU2dwSUQwOVBTQm1hV1ZzWkNrN1hHNGdJQ0FnY21WMGRYSnVJRzFoZEdOb2FXNW5JRDhnYldGMFkyaHBibWN1ZG1Gc2RXVWdPaUJ1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdiblZ0WW1WeVJtOXliV0YwZEdWeUtHOXdkSE1nUFNCN2ZTa2dlMXh1SUNBZ0lDOHZJSFJvYVhNZ1ptOXlZMlZ6YVcxd2JHVWdiM0IwYVc5dUlHbHpJRzVsZG1WeUlIVnpaV1FnS0hSb1pTQnZibXg1SUdOaGJHeGxjaUJ6YUc5eWRDMWphWEpqZFdsMGN5QnZiaUJwZEN3Z1luVjBJR2wwSUhObFpXMXpJSE5oWm1WeUlIUnZJR3hsWVhabEtWeHVJQ0FnSUM4dklDaHBiaUJqYjI1MGNtRnpkQ3dnZEdobElISmxjM1FnYjJZZ2RHaGxJR052Ym1ScGRHbHZiaUJwY3lCMWMyVmtJR2hsWVhacGJIa3BYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFiMng1VG5WdFltVnlSbTl5YldGMGRHVnlLSFJvYVhNdWFXNTBiQ3dnYjNCMGN5NW1iM0pqWlZOcGJYQnNaU0I4ZkNCMGFHbHpMbVpoYzNST2RXMWlaWEp6TENCdmNIUnpLVHRjYmlBZ2ZWeHVYRzRnSUdSMFJtOXliV0YwZEdWeUtHUjBMQ0JwYm5Sc1QzQjBjeUE5SUh0OUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFiMng1UkdGMFpVWnZjbTFoZEhSbGNpaGtkQ3dnZEdocGN5NXBiblJzTENCcGJuUnNUM0IwY3lrN1hHNGdJSDFjYmx4dUlDQnlaV3hHYjNKdFlYUjBaWElvYjNCMGN5QTlJSHQ5S1NCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWIyeDVVbVZzUm05eWJXRjBkR1Z5S0hSb2FYTXVhVzUwYkN3Z2RHaHBjeTVwYzBWdVoyeHBjMmdvS1N3Z2IzQjBjeWs3WEc0Z0lIMWNibHh1SUNCc2FYTjBSbTl5YldGMGRHVnlLRzl3ZEhNZ1BTQjdmU2tnZTF4dUlDQWdJSEpsZEhWeWJpQm5aWFJEWVdOb1pXUk1SaWgwYUdsekxtbHVkR3dzSUc5d2RITXBPMXh1SUNCOVhHNWNiaUFnYVhORmJtZHNhWE5vS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUFvWEc0Z0lDQWdJQ0IwYUdsekxteHZZMkZzWlNBOVBUMGdYQ0psYmx3aUlIeDhYRzRnSUNBZ0lDQjBhR2x6TG14dlkyRnNaUzUwYjB4dmQyVnlRMkZ6WlNncElEMDlQU0JjSW1WdUxYVnpYQ0lnZkh4Y2JpQWdJQ0FnSUc1bGR5QkpiblJzTGtSaGRHVlVhVzFsUm05eWJXRjBLSFJvYVhNdWFXNTBiQ2t1Y21WemIyeDJaV1JQY0hScGIyNXpLQ2t1Ykc5allXeGxMbk4wWVhKMGMxZHBkR2dvWENKbGJpMTFjMXdpS1Z4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCbGNYVmhiSE1vYjNSb1pYSXBJSHRjYmlBZ0lDQnlaWFIxY200Z0tGeHVJQ0FnSUNBZ2RHaHBjeTVzYjJOaGJHVWdQVDA5SUc5MGFHVnlMbXh2WTJGc1pTQW1KbHh1SUNBZ0lDQWdkR2hwY3k1dWRXMWlaWEpwYm1kVGVYTjBaVzBnUFQwOUlHOTBhR1Z5TG01MWJXSmxjbWx1WjFONWMzUmxiU0FtSmx4dUlDQWdJQ0FnZEdocGN5NXZkWFJ3ZFhSRFlXeGxibVJoY2lBOVBUMGdiM1JvWlhJdWIzVjBjSFYwUTJGc1pXNWtZWEpjYmlBZ0lDQXBPMXh1SUNCOVhHNTlYRzRpTENBaWFXMXdiM0owSUh0Y2JpQWdkVzUwY25WdVkyRjBaVmxsWVhJc1hHNGdJSE5wWjI1bFpFOW1abk5sZEN4Y2JpQWdjR0Z5YzJWSmJuUmxaMlZ5TEZ4dUlDQndZWEp6WlUxcGJHeHBjeXhjYmlBZ2FXRnVZVkpsWjJWNExGeHVJQ0JwYzFWdVpHVm1hVzVsWkN4Y2JpQWdjR0Z5YzJWR2JHOWhkR2x1WjF4dWZTQm1jbTl0SUZ3aUxpOTFkR2xzTG1welhDSTdYRzVwYlhCdmNuUWdLaUJoY3lCRmJtZHNhWE5vSUdaeWIyMGdYQ0l1TDJWdVoyeHBjMmd1YW5OY0lqdGNibWx0Y0c5eWRDQkdhWGhsWkU5bVpuTmxkRnB2Ym1VZ1puSnZiU0JjSWk0dUwzcHZibVZ6TDJacGVHVmtUMlptYzJWMFdtOXVaUzVxYzF3aU8xeHVhVzF3YjNKMElFbEJUa0ZhYjI1bElHWnliMjBnWENJdUxpOTZiMjVsY3k5SlFVNUJXbTl1WlM1cWMxd2lPMXh1WEc0dktseHVJQ29nVkdocGN5Qm1hV3hsSUdoaGJtUnNaWE1nY0dGeWMybHVaeUJtYjNJZ2QyVnNiQzF6Y0dWamFXWnBaV1FnWm05eWJXRjBjeTRnU0dWeVpTZHpJR2h2ZHlCcGRDQjNiM0pyY3pwY2JpQXFJRlIzYnlCMGFHbHVaM01nWjI4Z2FXNTBieUJ3WVhKemFXNW5PaUJoSUhKbFoyVjRJSFJ2SUcxaGRHTm9JSGRwZEdnZ1lXNWtJR0Z1SUdWNGRISmhZM1J2Y2lCMGJ5QjBZV3RsSUdGd1lYSjBJSFJvWlNCbmNtOTFjSE1nYVc0Z2RHaGxJRzFoZEdOb0xseHVJQ29nUVc0Z1pYaDBjbUZqZEc5eUlHbHpJR3AxYzNRZ1lTQm1kVzVqZEdsdmJpQjBhR0YwSUhSaGEyVnpJR0VnY21WblpYZ2diV0YwWTJnZ1lYSnlZWGtnWVc1a0lISmxkSFZ5Ym5NZ1lTQjdJSGxsWVhJNklDNHVMaXdnYlc5dWRHZzZJQzR1TGlCOUlHOWlhbVZqZEZ4dUlDb2djR0Z5YzJVb0tTQmtiMlZ6SUhSb1pTQjNiM0pySUc5bUlHVjRaV04xZEdsdVp5QjBhR1VnY21WblpYZ2dZVzVrSUdGd2NHeDVhVzVuSUhSb1pTQmxlSFJ5WVdOMGIzSXVJRWwwSUhSaGEyVnpJRzExYkhScGNHeGxJSEpsWjJWNEwyVjRkSEpoWTNSdmNpQndZV2x5Y3lCMGJ5QjBjbmtnYVc0Z2MyVnhkV1Z1WTJVdVhHNGdLaUJGZUhSeVlXTjBiM0p6SUdOaGJpQjBZV3RsSUdFZ1hDSmpkWEp6YjNKY0lpQnlaWEJ5WlhObGJuUnBibWNnZEdobElHOW1abk5sZENCcGJpQjBhR1VnYldGMFkyZ2dkRzhnYkc5dmF5QmhkQzRnVkdocGN5QnRZV3RsY3lCcGRDQmxZWE41SUhSdklHTnZiV0pwYm1VZ1pYaDBjbUZqZEc5eWN5NWNiaUFxSUdOdmJXSnBibVZGZUhSeVlXTjBiM0p6S0NrZ1pHOWxjeUIwYUdVZ2QyOXlheUJ2WmlCamIyMWlhVzVwYm1jZ2RHaGxiU3dnYTJWbGNHbHVaeUIwY21GamF5QnZaaUIwYUdVZ1kzVnljMjl5SUhSb2NtOTFaMmdnYlhWc2RHbHdiR1VnWlhoMGNtRmpkR2x2Ym5NdVhHNGdLaUJUYjIxbElHVjRkSEpoWTNScGIyNXpJR0Z5WlNCemRYQmxjaUJrZFcxaUlHRnVaQ0J6YVcxd2JHVlFZWEp6WlNCaGJtUWdabkp2YlZOMGNtbHVaM01nYUdWc2NDQkVVbGtnZEdobGJTNWNiaUFxTDF4dVhHNW1kVzVqZEdsdmJpQmpiMjFpYVc1bFVtVm5aWGhsY3lndUxpNXlaV2RsZUdWektTQjdYRzRnSUdOdmJuTjBJR1oxYkd3Z1BTQnlaV2RsZUdWekxuSmxaSFZqWlNnb1ppd2djaWtnUFQ0Z1ppQXJJSEl1YzI5MWNtTmxMQ0JjSWx3aUtUdGNiaUFnY21WMGRYSnVJRkpsWjBWNGNDaGdYaVI3Wm5Wc2JIMGtZQ2s3WEc1OVhHNWNibVoxYm1OMGFXOXVJR052YldKcGJtVkZlSFJ5WVdOMGIzSnpLQzR1TG1WNGRISmhZM1J2Y25NcElIdGNiaUFnY21WMGRYSnVJRzBnUFQ1Y2JpQWdJQ0JsZUhSeVlXTjBiM0p6WEc0Z0lDQWdJQ0F1Y21Wa2RXTmxLRnh1SUNBZ0lDQWdJQ0FvVzIxbGNtZGxaRlpoYkhNc0lHMWxjbWRsWkZwdmJtVXNJR04xY25OdmNsMHNJR1Y0S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdXM1poYkN3Z2VtOXVaU3dnYm1WNGRGMGdQU0JsZUNodExDQmpkWEp6YjNJcE8xeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmJleUF1TGk1dFpYSm5aV1JXWVd4ekxDQXVMaTUyWVd3Z2ZTd2dlbTl1WlNCOGZDQnRaWEpuWldSYWIyNWxMQ0J1WlhoMFhUdGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnVzN0OUxDQnVkV3hzTENBeFhWeHVJQ0FnSUNBZ0tWeHVJQ0FnSUNBZ0xuTnNhV05sS0RBc0lESXBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQndZWEp6WlNoekxDQXVMaTV3WVhSMFpYSnVjeWtnZTF4dUlDQnBaaUFvY3lBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnY21WMGRYSnVJRnR1ZFd4c0xDQnVkV3hzWFR0Y2JpQWdmVnh1WEc0Z0lHWnZjaUFvWTI5dWMzUWdXM0psWjJWNExDQmxlSFJ5WVdOMGIzSmRJRzltSUhCaGRIUmxjbTV6S1NCN1hHNGdJQ0FnWTI5dWMzUWdiU0E5SUhKbFoyVjRMbVY0WldNb2N5azdYRzRnSUNBZ2FXWWdLRzBwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJsZUhSeVlXTjBiM0lvYlNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJiYm5Wc2JDd2diblZzYkYwN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUhOcGJYQnNaVkJoY25ObEtDNHVMbXRsZVhNcElIdGNiaUFnY21WMGRYSnVJQ2h0WVhSamFDd2dZM1Z5YzI5eUtTQTlQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NtVjBJRDBnZTMwN1hHNGdJQ0FnYkdWMElHazdYRzVjYmlBZ0lDQm1iM0lnS0drZ1BTQXdPeUJwSUR3Z2EyVjVjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2NtVjBXMnRsZVhOYmFWMWRJRDBnY0dGeWMyVkpiblJsWjJWeUtHMWhkR05vVzJOMWNuTnZjaUFySUdsZEtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRnR5WlhRc0lHNTFiR3dzSUdOMWNuTnZjaUFySUdsZE8xeHVJQ0I5TzF4dWZWeHVYRzR2THlCSlUwOGdZVzVrSUZOUlRDQndZWEp6YVc1blhHNWpiMjV6ZENCdlptWnpaWFJTWldkbGVDQTlJQzhvUHpvb1dpbDhLRnNyTFYxY1hHUmNYR1FwS0Q4Nk9qOG9YRnhrWEZ4a0tTay9LUzg3WEc1amIyNXpkQ0JwYzI5RmVIUmxibVJsWkZwdmJtVWdQU0JnS0Q4NkpIdHZabVp6WlhSU1pXZGxlQzV6YjNWeVkyVjlQeWcvT2x4Y1hGeGJLQ1I3YVdGdVlWSmxaMlY0TG5OdmRYSmpaWDBwWEZ4Y1hGMHBQeWsvWUR0Y2JtTnZibk4wSUdsemIxUnBiV1ZDWVhObFVtVm5aWGdnUFNBdktGeGNaRnhjWkNrb1B6bzZQeWhjWEdSY1hHUXBLRDg2T2o4b1hGeGtYRnhrS1NnL09sc3VMRjBvWEZ4a2V6RXNNekI5S1NrL0tUOHBQeTg3WEc1amIyNXpkQ0JwYzI5VWFXMWxVbVZuWlhnZ1BTQlNaV2RGZUhBb1lDUjdhWE52VkdsdFpVSmhjMlZTWldkbGVDNXpiM1Z5WTJWOUpIdHBjMjlGZUhSbGJtUmxaRnB2Ym1WOVlDazdYRzVqYjI1emRDQnBjMjlVYVcxbFJYaDBaVzV6YVc5dVVtVm5aWGdnUFNCU1pXZEZlSEFvWUNnL09sUWtlMmx6YjFScGJXVlNaV2RsZUM1emIzVnlZMlY5S1Q5Z0tUdGNibU52Ym5OMElHbHpiMWx0WkZKbFoyVjRJRDBnTHloYkt5MWRYRnhrZXpaOWZGeGNaSHMwZlNrb1B6b3RQeWhjWEdSY1hHUXBLRDg2TFQ4b1hGeGtYRnhrS1NrL0tUOHZPMXh1WTI5dWMzUWdhWE52VjJWbGExSmxaMlY0SUQwZ0x5aGNYR1I3TkgwcExUOVhLRnhjWkZ4Y1pDa29Qem90UHloY1hHUXBLVDh2TzF4dVkyOXVjM1FnYVhOdlQzSmthVzVoYkZKbFoyVjRJRDBnTHloY1hHUjdOSDBwTFQ4b1hGeGtlek45S1M4N1hHNWpiMjV6ZENCbGVIUnlZV04wU1ZOUFYyVmxhMFJoZEdFZ1BTQnphVzF3YkdWUVlYSnpaU2hjSW5kbFpXdFpaV0Z5WENJc0lGd2lkMlZsYTA1MWJXSmxjbHdpTENCY0luZGxaV3RFWVhsY0lpazdYRzVqYjI1emRDQmxlSFJ5WVdOMFNWTlBUM0prYVc1aGJFUmhkR0VnUFNCemFXMXdiR1ZRWVhKelpTaGNJbmxsWVhKY0lpd2dYQ0p2Y21ScGJtRnNYQ0lwTzF4dVkyOXVjM1FnYzNGc1dXMWtVbVZuWlhnZ1BTQXZLRnhjWkhzMGZTa3RLRnhjWkZ4Y1pDa3RLRnhjWkZ4Y1pDa3ZPeUF2THlCa2RXMWlaV1F0Wkc5M2JpQjJaWEp6YVc5dUlHOW1JSFJvWlNCSlUwOGdiMjVsWEc1amIyNXpkQ0J6Y1d4VWFXMWxVbVZuWlhnZ1BTQlNaV2RGZUhBb1hHNGdJR0FrZTJsemIxUnBiV1ZDWVhObFVtVm5aWGd1YzI5MWNtTmxmU0EvS0Q4NkpIdHZabVp6WlhSU1pXZGxlQzV6YjNWeVkyVjlmQ2drZTJsaGJtRlNaV2RsZUM1emIzVnlZMlY5S1NrL1lGeHVLVHRjYm1OdmJuTjBJSE54YkZScGJXVkZlSFJsYm5OcGIyNVNaV2RsZUNBOUlGSmxaMFY0Y0NoZ0tEODZJQ1I3YzNGc1ZHbHRaVkpsWjJWNExuTnZkWEpqWlgwcFAyQXBPMXh1WEc1bWRXNWpkR2x2YmlCcGJuUW9iV0YwWTJnc0lIQnZjeXdnWm1Gc2JHSmhZMnNwSUh0Y2JpQWdZMjl1YzNRZ2JTQTlJRzFoZEdOb1czQnZjMTA3WEc0Z0lISmxkSFZ5YmlCcGMxVnVaR1ZtYVc1bFpDaHRLU0EvSUdaaGJHeGlZV05ySURvZ2NHRnljMlZKYm5SbFoyVnlLRzBwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJsZUhSeVlXTjBTVk5QV1cxa0tHMWhkR05vTENCamRYSnpiM0lwSUh0Y2JpQWdZMjl1YzNRZ2FYUmxiU0E5SUh0Y2JpQWdJQ0I1WldGeU9pQnBiblFvYldGMFkyZ3NJR04xY25OdmNpa3NYRzRnSUNBZ2JXOXVkR2c2SUdsdWRDaHRZWFJqYUN3Z1kzVnljMjl5SUNzZ01Td2dNU2tzWEc0Z0lDQWdaR0Y1T2lCcGJuUW9iV0YwWTJnc0lHTjFjbk52Y2lBcklESXNJREVwWEc0Z0lIMDdYRzVjYmlBZ2NtVjBkWEp1SUZ0cGRHVnRMQ0J1ZFd4c0xDQmpkWEp6YjNJZ0t5QXpYVHRjYm4xY2JseHVablZ1WTNScGIyNGdaWGgwY21GamRFbFRUMVJwYldVb2JXRjBZMmdzSUdOMWNuTnZjaWtnZTF4dUlDQmpiMjV6ZENCcGRHVnRJRDBnZTF4dUlDQWdJR2h2ZFhKek9pQnBiblFvYldGMFkyZ3NJR04xY25OdmNpd2dNQ2tzWEc0Z0lDQWdiV2x1ZFhSbGN6b2dhVzUwS0cxaGRHTm9MQ0JqZFhKemIzSWdLeUF4TENBd0tTeGNiaUFnSUNCelpXTnZibVJ6T2lCcGJuUW9iV0YwWTJnc0lHTjFjbk52Y2lBcklESXNJREFwTEZ4dUlDQWdJRzFwYkd4cGMyVmpiMjVrY3pvZ2NHRnljMlZOYVd4c2FYTW9iV0YwWTJoYlkzVnljMjl5SUNzZ00xMHBYRzRnSUgwN1hHNWNiaUFnY21WMGRYSnVJRnRwZEdWdExDQnVkV3hzTENCamRYSnpiM0lnS3lBMFhUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pYaDBjbUZqZEVsVFQwOW1abk5sZENodFlYUmphQ3dnWTNWeWMyOXlLU0I3WEc0Z0lHTnZibk4wSUd4dlkyRnNJRDBnSVcxaGRHTm9XMk4xY25OdmNsMGdKaVlnSVcxaGRHTm9XMk4xY25OdmNpQXJJREZkTEZ4dUlDQWdJR1oxYkd4UFptWnpaWFFnUFNCemFXZHVaV1JQWm1aelpYUW9iV0YwWTJoYlkzVnljMjl5SUNzZ01WMHNJRzFoZEdOb1cyTjFjbk52Y2lBcklESmRLU3hjYmlBZ0lDQjZiMjVsSUQwZ2JHOWpZV3dnUHlCdWRXeHNJRG9nUm1sNFpXUlBabVp6WlhSYWIyNWxMbWx1YzNSaGJtTmxLR1oxYkd4UFptWnpaWFFwTzF4dUlDQnlaWFIxY200Z1czdDlMQ0I2YjI1bExDQmpkWEp6YjNJZ0t5QXpYVHRjYm4xY2JseHVablZ1WTNScGIyNGdaWGgwY21GamRFbEJUa0ZhYjI1bEtHMWhkR05vTENCamRYSnpiM0lwSUh0Y2JpQWdZMjl1YzNRZ2VtOXVaU0E5SUcxaGRHTm9XMk4xY25OdmNsMGdQeUJKUVU1QldtOXVaUzVqY21WaGRHVW9iV0YwWTJoYlkzVnljMjl5WFNrZ09pQnVkV3hzTzF4dUlDQnlaWFIxY200Z1czdDlMQ0I2YjI1bExDQmpkWEp6YjNJZ0t5QXhYVHRjYm4xY2JseHVMeThnU1ZOUElIUnBiV1VnY0dGeWMybHVaMXh1WEc1amIyNXpkQ0JwYzI5VWFXMWxUMjVzZVNBOUlGSmxaMFY0Y0NoZ1hsUS9KSHRwYzI5VWFXMWxRbUZ6WlZKbFoyVjRMbk52ZFhKalpYMGtZQ2s3WEc1Y2JpOHZJRWxUVHlCa2RYSmhkR2x2YmlCd1lYSnphVzVuWEc1Y2JtTnZibk4wSUdsemIwUjFjbUYwYVc5dUlEMGdMMTR0UDFBb1B6b29Qem9vTFQ5Y1hHUjdNU3d5TUgwb1B6cGNYQzVjWEdSN01Td3lNSDBwUHlsWktUOG9Qem9vTFQ5Y1hHUjdNU3d5TUgwb1B6cGNYQzVjWEdSN01Td3lNSDBwUHlsTktUOG9Qem9vTFQ5Y1hHUjdNU3d5TUgwb1B6cGNYQzVjWEdSN01Td3lNSDBwUHlsWEtUOG9Qem9vTFQ5Y1hHUjdNU3d5TUgwb1B6cGNYQzVjWEdSN01Td3lNSDBwUHlsRUtUOG9QenBVS0Q4NktDMC9YRnhrZXpFc01qQjlLRDg2WEZ3dVhGeGtlekVzTWpCOUtUOHBTQ2svS0Q4NktDMC9YRnhrZXpFc01qQjlLRDg2WEZ3dVhGeGtlekVzTWpCOUtUOHBUU2svS0Q4NktDMC9YRnhrZXpFc01qQjlLU2cvT2xzdUxGMG9MVDljWEdSN01Td3lNSDBwS1Q5VEtUOHBQeWtrTHp0Y2JseHVablZ1WTNScGIyNGdaWGgwY21GamRFbFRUMFIxY21GMGFXOXVLRzFoZEdOb0tTQjdYRzRnSUdOdmJuTjBJRnRjYmlBZ0lDQnpMRnh1SUNBZ0lIbGxZWEpUZEhJc1hHNGdJQ0FnYlc5dWRHaFRkSElzWEc0Z0lDQWdkMlZsYTFOMGNpeGNiaUFnSUNCa1lYbFRkSElzWEc0Z0lDQWdhRzkxY2xOMGNpeGNiaUFnSUNCdGFXNTFkR1ZUZEhJc1hHNGdJQ0FnYzJWamIyNWtVM1J5TEZ4dUlDQWdJRzFwYkd4cGMyVmpiMjVrYzFOMGNseHVJQ0JkSUQwZ2JXRjBZMmc3WEc1Y2JpQWdZMjl1YzNRZ2FHRnpUbVZuWVhScGRtVlFjbVZtYVhnZ1BTQnpXekJkSUQwOVBTQmNJaTFjSWp0Y2JpQWdZMjl1YzNRZ2JtVm5ZWFJwZG1WVFpXTnZibVJ6SUQwZ2MyVmpiMjVrVTNSeUlDWW1JSE5sWTI5dVpGTjBjbHN3WFNBOVBUMGdYQ0l0WENJN1hHNWNiaUFnWTI5dWMzUWdiV0Y1WW1WT1pXZGhkR1VnUFNBb2JuVnRMQ0JtYjNKalpTQTlJR1poYkhObEtTQTlQbHh1SUNBZ0lHNTFiU0FoUFQwZ2RXNWtaV1pwYm1Wa0lDWW1JQ2htYjNKalpTQjhmQ0FvYm5WdElDWW1JR2hoYzA1bFoyRjBhWFpsVUhKbFptbDRLU2tnUHlBdGJuVnRJRG9nYm5WdE8xeHVYRzRnSUhKbGRIVnliaUJiWEc0Z0lDQWdlMXh1SUNBZ0lDQWdlV1ZoY25NNklHMWhlV0psVG1WbllYUmxLSEJoY25ObFJteHZZWFJwYm1jb2VXVmhjbE4wY2lrcExGeHVJQ0FnSUNBZ2JXOXVkR2h6T2lCdFlYbGlaVTVsWjJGMFpTaHdZWEp6WlVac2IyRjBhVzVuS0cxdmJuUm9VM1J5S1Nrc1hHNGdJQ0FnSUNCM1pXVnJjem9nYldGNVltVk9aV2RoZEdVb2NHRnljMlZHYkc5aGRHbHVaeWgzWldWclUzUnlLU2tzWEc0Z0lDQWdJQ0JrWVhsek9pQnRZWGxpWlU1bFoyRjBaU2h3WVhKelpVWnNiMkYwYVc1bktHUmhlVk4wY2lrcExGeHVJQ0FnSUNBZ2FHOTFjbk02SUcxaGVXSmxUbVZuWVhSbEtIQmhjbk5sUm14dllYUnBibWNvYUc5MWNsTjBjaWtwTEZ4dUlDQWdJQ0FnYldsdWRYUmxjem9nYldGNVltVk9aV2RoZEdVb2NHRnljMlZHYkc5aGRHbHVaeWh0YVc1MWRHVlRkSElwS1N4Y2JpQWdJQ0FnSUhObFkyOXVaSE02SUcxaGVXSmxUbVZuWVhSbEtIQmhjbk5sUm14dllYUnBibWNvYzJWamIyNWtVM1J5S1N3Z2MyVmpiMjVrVTNSeUlEMDlQU0JjSWkwd1hDSXBMRnh1SUNBZ0lDQWdiV2xzYkdselpXTnZibVJ6T2lCdFlYbGlaVTVsWjJGMFpTaHdZWEp6WlUxcGJHeHBjeWh0YVd4c2FYTmxZMjl1WkhOVGRISXBMQ0J1WldkaGRHbDJaVk5sWTI5dVpITXBYRzRnSUNBZ2ZWeHVJQ0JkTzF4dWZWeHVYRzR2THlCVWFHVnpaU0JoY21VZ1lTQnNhWFIwYkdVZ1luSmhhVzVrWldGa0xpQkZSRlFnS25Ob2IzVnNaQ29nZEdWc2JDQjFjeUIwYUdGMElIZGxKM0psSUdsdUxDQnpZWGtzSUVGdFpYSnBZMkV2VG1WM1gxbHZjbXRjYmk4dklHRnVaQ0J1YjNRZ2FuVnpkQ0IwYUdGMElIZGxKM0psSUdsdUlDMHlOREFnS25KcFoyaDBJRzV2ZHlvdUlFSjFkQ0J6YVc1alpTQkpJR1J2YmlkMElIUm9hVzVySUhSb1pYTmxJR0Z5WlNCMWMyVmtJSFJvWVhRZ2IyWjBaVzVjYmk4dklFa25iU0JxZFhOMElHZHZhVzVuSUhSdklHbG5ibTl5WlNCMGFHRjBYRzVqYjI1emRDQnZZbk5QWm1aelpYUnpJRDBnZTF4dUlDQkhUVlE2SURBc1hHNGdJRVZFVkRvZ0xUUWdLaUEyTUN4Y2JpQWdSVk5VT2lBdE5TQXFJRFl3TEZ4dUlDQkRSRlE2SUMwMUlDb2dOakFzWEc0Z0lFTlRWRG9nTFRZZ0tpQTJNQ3hjYmlBZ1RVUlVPaUF0TmlBcUlEWXdMRnh1SUNCTlUxUTZJQzAzSUNvZ05qQXNYRzRnSUZCRVZEb2dMVGNnS2lBMk1DeGNiaUFnVUZOVU9pQXRPQ0FxSURZd1hHNTlPMXh1WEc1bWRXNWpkR2x2YmlCbWNtOXRVM1J5YVc1bmN5aDNaV1ZyWkdGNVUzUnlMQ0I1WldGeVUzUnlMQ0J0YjI1MGFGTjBjaXdnWkdGNVUzUnlMQ0JvYjNWeVUzUnlMQ0J0YVc1MWRHVlRkSElzSUhObFkyOXVaRk4wY2lrZ2UxeHVJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQjdYRzRnSUNBZ2VXVmhjam9nZVdWaGNsTjBjaTVzWlc1bmRHZ2dQVDA5SURJZ1B5QjFiblJ5ZFc1allYUmxXV1ZoY2lod1lYSnpaVWx1ZEdWblpYSW9lV1ZoY2xOMGNpa3BJRG9nY0dGeWMyVkpiblJsWjJWeUtIbGxZWEpUZEhJcExGeHVJQ0FnSUcxdmJuUm9PaUJGYm1kc2FYTm9MbTF2Ym5Sb2MxTm9iM0owTG1sdVpHVjRUMllvYlc5dWRHaFRkSElwSUNzZ01TeGNiaUFnSUNCa1lYazZJSEJoY25ObFNXNTBaV2RsY2loa1lYbFRkSElwTEZ4dUlDQWdJR2h2ZFhJNklIQmhjbk5sU1c1MFpXZGxjaWhvYjNWeVUzUnlLU3hjYmlBZ0lDQnRhVzUxZEdVNklIQmhjbk5sU1c1MFpXZGxjaWh0YVc1MWRHVlRkSElwWEc0Z0lIMDdYRzVjYmlBZ2FXWWdLSE5sWTI5dVpGTjBjaWtnY21WemRXeDBMbk5sWTI5dVpDQTlJSEJoY25ObFNXNTBaV2RsY2loelpXTnZibVJUZEhJcE8xeHVJQ0JwWmlBb2QyVmxhMlJoZVZOMGNpa2dlMXh1SUNBZ0lISmxjM1ZzZEM1M1pXVnJaR0Y1SUQxY2JpQWdJQ0FnSUhkbFpXdGtZWGxUZEhJdWJHVnVaM1JvSUQ0Z00xeHVJQ0FnSUNBZ0lDQS9JRVZ1WjJ4cGMyZ3VkMlZsYTJSaGVYTk1iMjVuTG1sdVpHVjRUMllvZDJWbGEyUmhlVk4wY2lrZ0t5QXhYRzRnSUNBZ0lDQWdJRG9nUlc1bmJHbHphQzUzWldWclpHRjVjMU5vYjNKMExtbHVaR1Y0VDJZb2QyVmxhMlJoZVZOMGNpa2dLeUF4TzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYm4xY2JseHVMeThnVWtaRElESTRNakl2TlRNeU1seHVZMjl1YzNRZ2NtWmpNamd5TWlBOUlDOWVLRDg2S0UxdmJueFVkV1Y4VjJWa2ZGUm9kWHhHY21sOFUyRjBmRk4xYmlrc1hGeHpLVDhvWEZ4a2V6RXNNbjBwWEZ4ektFcGhibnhHWldKOFRXRnlmRUZ3Y254TllYbDhTblZ1ZkVwMWJIeEJkV2Q4VTJWd2ZFOWpkSHhPYjNaOFJHVmpLVnhjY3loY1hHUjdNaXcwZlNsY1hITW9YRnhrWEZ4a0tUb29YRnhrWEZ4a0tTZy9Pam9vWEZ4a1hGeGtLU2svWEZ4ektEODZLRlZVZkVkTlZIeGJSVU5OVUYxYlUwUmRWQ2w4S0Z0YWVsMHBmQ2cvT2loYkt5MWRYRnhrWEZ4a0tTaGNYR1JjWEdRcEtTa2tMenRjYmx4dVpuVnVZM1JwYjI0Z1pYaDBjbUZqZEZKR1F6STRNaklvYldGMFkyZ3BJSHRjYmlBZ1kyOXVjM1FnVzF4dUlDQWdJQ0FnTEZ4dUlDQWdJQ0FnZDJWbGEyUmhlVk4wY2l4Y2JpQWdJQ0FnSUdSaGVWTjBjaXhjYmlBZ0lDQWdJRzF2Ym5Sb1UzUnlMRnh1SUNBZ0lDQWdlV1ZoY2xOMGNpeGNiaUFnSUNBZ0lHaHZkWEpUZEhJc1hHNGdJQ0FnSUNCdGFXNTFkR1ZUZEhJc1hHNGdJQ0FnSUNCelpXTnZibVJUZEhJc1hHNGdJQ0FnSUNCdlluTlBabVp6WlhRc1hHNGdJQ0FnSUNCdGFXeFBabVp6WlhRc1hHNGdJQ0FnSUNCdlptWkliM1Z5VTNSeUxGeHVJQ0FnSUNBZ2IyWm1UV2x1ZFhSbFUzUnlYRzRnSUNBZ1hTQTlJRzFoZEdOb0xGeHVJQ0FnSUhKbGMzVnNkQ0E5SUdaeWIyMVRkSEpwYm1kektIZGxaV3RrWVhsVGRISXNJSGxsWVhKVGRISXNJRzF2Ym5Sb1UzUnlMQ0JrWVhsVGRISXNJR2h2ZFhKVGRISXNJRzFwYm5WMFpWTjBjaXdnYzJWamIyNWtVM1J5S1R0Y2JseHVJQ0JzWlhRZ2IyWm1jMlYwTzF4dUlDQnBaaUFvYjJKelQyWm1jMlYwS1NCN1hHNGdJQ0FnYjJabWMyVjBJRDBnYjJKelQyWm1jMlYwYzF0dlluTlBabVp6WlhSZE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0cxcGJFOW1abk5sZENrZ2UxeHVJQ0FnSUc5bVpuTmxkQ0E5SURBN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2IyWm1jMlYwSUQwZ2MybG5ibVZrVDJabWMyVjBLRzltWmtodmRYSlRkSElzSUc5bVprMXBiblYwWlZOMGNpazdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdXM0psYzNWc2RDd2dibVYzSUVacGVHVmtUMlptYzJWMFdtOXVaU2h2Wm1aelpYUXBYVHRjYm4xY2JseHVablZ1WTNScGIyNGdjSEpsY0hKdlkyVnpjMUpHUXpJNE1qSW9jeWtnZTF4dUlDQXZMeUJTWlcxdmRtVWdZMjl0YldWdWRITWdZVzVrSUdadmJHUnBibWNnZDJocGRHVnpjR0ZqWlNCaGJtUWdjbVZ3YkdGalpTQnRkV3gwYVhCc1pTMXpjR0ZqWlhNZ2QybDBhQ0JoSUhOcGJtZHNaU0J6Y0dGalpWeHVJQ0J5WlhSMWNtNGdjMXh1SUNBZ0lDNXlaWEJzWVdObEtDOWNYQ2hiWGlncFhTcGNYQ2w4VzF4Y2JseGNkRjB2Wnl3Z1hDSWdYQ0lwWEc0Z0lDQWdMbkpsY0d4aFkyVW9MeWhjWEhOY1hITXJLUzluTENCY0lpQmNJaWxjYmlBZ0lDQXVkSEpwYlNncE8xeHVmVnh1WEc0dkx5Qm9kSFJ3SUdSaGRHVmNibHh1WTI5dWMzUWdjbVpqTVRFeU15QTlJQzllS0UxdmJueFVkV1Y4VjJWa2ZGUm9kWHhHY21sOFUyRjBmRk4xYmlrc0lDaGNYR1JjWEdRcElDaEtZVzU4Um1WaWZFMWhjbnhCY0hKOFRXRjVmRXAxYm54S2RXeDhRWFZuZkZObGNIeFBZM1I4VG05MmZFUmxZeWtnS0Z4Y1pIczBmU2tnS0Z4Y1pGeGNaQ2s2S0Z4Y1pGeGNaQ2s2S0Z4Y1pGeGNaQ2tnUjAxVUpDOHNYRzRnSUhKbVl6ZzFNQ0E5SUM5ZUtFMXZibVJoZVh4VWRXVnpaR0Y1ZkZkbFpHNWxjMlJoZVh4VWFIVnljMlJoZVh4R2NtbGtZWGw4VTJGMGRYSmtZWGw4VTNWdVpHRjVLU3dnS0Z4Y1pGeGNaQ2t0S0VwaGJueEdaV0o4VFdGeWZFRndjbnhOWVhsOFNuVnVmRXAxYkh4QmRXZDhVMlZ3ZkU5amRIeE9iM1o4UkdWaktTMG9YRnhrWEZ4a0tTQW9YRnhrWEZ4a0tUb29YRnhrWEZ4a0tUb29YRnhrWEZ4a0tTQkhUVlFrTHl4Y2JpQWdZWE5qYVdrZ1BTQXZYaWhOYjI1OFZIVmxmRmRsWkh4VWFIVjhSbkpwZkZOaGRIeFRkVzRwSUNoS1lXNThSbVZpZkUxaGNueEJjSEo4VFdGNWZFcDFibnhLZFd4OFFYVm5mRk5sY0h4UFkzUjhUbTkyZkVSbFl5a2dLQ0JjWEdSOFhGeGtYRnhrS1NBb1hGeGtYRnhrS1Rvb1hGeGtYRnhrS1Rvb1hGeGtYRnhrS1NBb1hGeGtlelI5S1NRdk8xeHVYRzVtZFc1amRHbHZiaUJsZUhSeVlXTjBVa1pETVRFeU0wOXlPRFV3S0cxaGRHTm9LU0I3WEc0Z0lHTnZibk4wSUZzc0lIZGxaV3RrWVhsVGRISXNJR1JoZVZOMGNpd2diVzl1ZEdoVGRISXNJSGxsWVhKVGRISXNJR2h2ZFhKVGRISXNJRzFwYm5WMFpWTjBjaXdnYzJWamIyNWtVM1J5WFNBOUlHMWhkR05vTEZ4dUlDQWdJSEpsYzNWc2RDQTlJR1p5YjIxVGRISnBibWR6S0hkbFpXdGtZWGxUZEhJc0lIbGxZWEpUZEhJc0lHMXZiblJvVTNSeUxDQmtZWGxUZEhJc0lHaHZkWEpUZEhJc0lHMXBiblYwWlZOMGNpd2djMlZqYjI1a1UzUnlLVHRjYmlBZ2NtVjBkWEp1SUZ0eVpYTjFiSFFzSUVacGVHVmtUMlptYzJWMFdtOXVaUzUxZEdOSmJuTjBZVzVqWlYwN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdWNGRISmhZM1JCVTBOSlNTaHRZWFJqYUNrZ2UxeHVJQ0JqYjI1emRDQmJMQ0IzWldWclpHRjVVM1J5TENCdGIyNTBhRk4wY2l3Z1pHRjVVM1J5TENCb2IzVnlVM1J5TENCdGFXNTFkR1ZUZEhJc0lITmxZMjl1WkZOMGNpd2dlV1ZoY2xOMGNsMGdQU0J0WVhSamFDeGNiaUFnSUNCeVpYTjFiSFFnUFNCbWNtOXRVM1J5YVc1bmN5aDNaV1ZyWkdGNVUzUnlMQ0I1WldGeVUzUnlMQ0J0YjI1MGFGTjBjaXdnWkdGNVUzUnlMQ0JvYjNWeVUzUnlMQ0J0YVc1MWRHVlRkSElzSUhObFkyOXVaRk4wY2lrN1hHNGdJSEpsZEhWeWJpQmJjbVZ6ZFd4MExDQkdhWGhsWkU5bVpuTmxkRnB2Ym1VdWRYUmpTVzV6ZEdGdVkyVmRPMXh1ZlZ4dVhHNWpiMjV6ZENCcGMyOVpiV1JYYVhSb1ZHbHRaVVY0ZEdWdWMybHZibEpsWjJWNElEMGdZMjl0WW1sdVpWSmxaMlY0WlhNb2FYTnZXVzFrVW1WblpYZ3NJR2x6YjFScGJXVkZlSFJsYm5OcGIyNVNaV2RsZUNrN1hHNWpiMjV6ZENCcGMyOVhaV1ZyVjJsMGFGUnBiV1ZGZUhSbGJuTnBiMjVTWldkbGVDQTlJR052YldKcGJtVlNaV2RsZUdWektHbHpiMWRsWld0U1pXZGxlQ3dnYVhOdlZHbHRaVVY0ZEdWdWMybHZibEpsWjJWNEtUdGNibU52Ym5OMElHbHpiMDl5WkdsdVlXeFhhWFJvVkdsdFpVVjRkR1Z1YzJsdmJsSmxaMlY0SUQwZ1kyOXRZbWx1WlZKbFoyVjRaWE1vYVhOdlQzSmthVzVoYkZKbFoyVjRMQ0JwYzI5VWFXMWxSWGgwWlc1emFXOXVVbVZuWlhncE8xeHVZMjl1YzNRZ2FYTnZWR2x0WlVOdmJXSnBibVZrVW1WblpYZ2dQU0JqYjIxaWFXNWxVbVZuWlhobGN5aHBjMjlVYVcxbFVtVm5aWGdwTzF4dVhHNWpiMjV6ZENCbGVIUnlZV04wU1ZOUFdXMWtWR2x0WlVGdVpFOW1abk5sZENBOUlHTnZiV0pwYm1WRmVIUnlZV04wYjNKektGeHVJQ0JsZUhSeVlXTjBTVk5QV1cxa0xGeHVJQ0JsZUhSeVlXTjBTVk5QVkdsdFpTeGNiaUFnWlhoMGNtRmpkRWxUVDA5bVpuTmxkQ3hjYmlBZ1pYaDBjbUZqZEVsQlRrRmFiMjVsWEc0cE8xeHVZMjl1YzNRZ1pYaDBjbUZqZEVsVFQxZGxaV3RVYVcxbFFXNWtUMlptYzJWMElEMGdZMjl0WW1sdVpVVjRkSEpoWTNSdmNuTW9YRzRnSUdWNGRISmhZM1JKVTA5WFpXVnJSR0YwWVN4Y2JpQWdaWGgwY21GamRFbFRUMVJwYldVc1hHNGdJR1Y0ZEhKaFkzUkpVMDlQWm1aelpYUXNYRzRnSUdWNGRISmhZM1JKUVU1QldtOXVaVnh1S1R0Y2JtTnZibk4wSUdWNGRISmhZM1JKVTA5UGNtUnBibUZzUkdGMFpVRnVaRlJwYldVZ1BTQmpiMjFpYVc1bFJYaDBjbUZqZEc5eWN5aGNiaUFnWlhoMGNtRmpkRWxUVDA5eVpHbHVZV3hFWVhSaExGeHVJQ0JsZUhSeVlXTjBTVk5QVkdsdFpTeGNiaUFnWlhoMGNtRmpkRWxUVDA5bVpuTmxkQ3hjYmlBZ1pYaDBjbUZqZEVsQlRrRmFiMjVsWEc0cE8xeHVZMjl1YzNRZ1pYaDBjbUZqZEVsVFQxUnBiV1ZCYm1SUFptWnpaWFFnUFNCamIyMWlhVzVsUlhoMGNtRmpkRzl5Y3loY2JpQWdaWGgwY21GamRFbFRUMVJwYldVc1hHNGdJR1Y0ZEhKaFkzUkpVMDlQWm1aelpYUXNYRzRnSUdWNGRISmhZM1JKUVU1QldtOXVaVnh1S1R0Y2JseHVMeXBjYmlBcUlFQndjbWwyWVhSbFhHNGdLaTljYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhCaGNuTmxTVk5QUkdGMFpTaHpLU0I3WEc0Z0lISmxkSFZ5YmlCd1lYSnpaU2hjYmlBZ0lDQnpMRnh1SUNBZ0lGdHBjMjlaYldSWGFYUm9WR2x0WlVWNGRHVnVjMmx2YmxKbFoyVjRMQ0JsZUhSeVlXTjBTVk5QV1cxa1ZHbHRaVUZ1WkU5bVpuTmxkRjBzWEc0Z0lDQWdXMmx6YjFkbFpXdFhhWFJvVkdsdFpVVjRkR1Z1YzJsdmJsSmxaMlY0TENCbGVIUnlZV04wU1ZOUFYyVmxhMVJwYldWQmJtUlBabVp6WlhSZExGeHVJQ0FnSUZ0cGMyOVBjbVJwYm1Gc1YybDBhRlJwYldWRmVIUmxibk5wYjI1U1pXZGxlQ3dnWlhoMGNtRmpkRWxUVDA5eVpHbHVZV3hFWVhSbFFXNWtWR2x0WlYwc1hHNGdJQ0FnVzJsemIxUnBiV1ZEYjIxaWFXNWxaRkpsWjJWNExDQmxlSFJ5WVdOMFNWTlBWR2x0WlVGdVpFOW1abk5sZEYxY2JpQWdLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIQmhjbk5sVWtaRE1qZ3lNa1JoZEdVb2N5a2dlMXh1SUNCeVpYUjFjbTRnY0dGeWMyVW9jSEpsY0hKdlkyVnpjMUpHUXpJNE1qSW9jeWtzSUZ0eVptTXlPREl5TENCbGVIUnlZV04wVWtaRE1qZ3lNbDBwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjR0Z5YzJWSVZGUlFSR0YwWlNoektTQjdYRzRnSUhKbGRIVnliaUJ3WVhKelpTaGNiaUFnSUNCekxGeHVJQ0FnSUZ0eVptTXhNVEl6TENCbGVIUnlZV04wVWtaRE1URXlNMDl5T0RVd1hTeGNiaUFnSUNCYmNtWmpPRFV3TENCbGVIUnlZV04wVWtaRE1URXlNMDl5T0RVd1hTeGNiaUFnSUNCYllYTmphV2tzSUdWNGRISmhZM1JCVTBOSlNWMWNiaUFnS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEJoY25ObFNWTlBSSFZ5WVhScGIyNG9jeWtnZTF4dUlDQnlaWFIxY200Z2NHRnljMlVvY3l3Z1cybHpiMFIxY21GMGFXOXVMQ0JsZUhSeVlXTjBTVk5QUkhWeVlYUnBiMjVkS1R0Y2JuMWNibHh1WTI5dWMzUWdaWGgwY21GamRFbFRUMVJwYldWUGJteDVJRDBnWTI5dFltbHVaVVY0ZEhKaFkzUnZjbk1vWlhoMGNtRmpkRWxUVDFScGJXVXBPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY0dGeWMyVkpVMDlVYVcxbFQyNXNlU2h6S1NCN1hHNGdJSEpsZEhWeWJpQndZWEp6WlNoekxDQmJhWE52VkdsdFpVOXViSGtzSUdWNGRISmhZM1JKVTA5VWFXMWxUMjVzZVYwcE8xeHVmVnh1WEc1amIyNXpkQ0J6Y1d4WmJXUlhhWFJvVkdsdFpVVjRkR1Z1YzJsdmJsSmxaMlY0SUQwZ1kyOXRZbWx1WlZKbFoyVjRaWE1vYzNGc1dXMWtVbVZuWlhnc0lITnhiRlJwYldWRmVIUmxibk5wYjI1U1pXZGxlQ2s3WEc1amIyNXpkQ0J6Y1d4VWFXMWxRMjl0WW1sdVpXUlNaV2RsZUNBOUlHTnZiV0pwYm1WU1pXZGxlR1Z6S0hOeGJGUnBiV1ZTWldkbGVDazdYRzVjYm1OdmJuTjBJR1Y0ZEhKaFkzUkpVMDlVYVcxbFQyWm1jMlYwUVc1a1NVRk9RVnB2Ym1VZ1BTQmpiMjFpYVc1bFJYaDBjbUZqZEc5eWN5aGNiaUFnWlhoMGNtRmpkRWxUVDFScGJXVXNYRzRnSUdWNGRISmhZM1JKVTA5UFptWnpaWFFzWEc0Z0lHVjRkSEpoWTNSSlFVNUJXbTl1WlZ4dUtUdGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEJoY25ObFUxRk1LSE1wSUh0Y2JpQWdjbVYwZFhKdUlIQmhjbk5sS0Z4dUlDQWdJSE1zWEc0Z0lDQWdXM054YkZsdFpGZHBkR2hVYVcxbFJYaDBaVzV6YVc5dVVtVm5aWGdzSUdWNGRISmhZM1JKVTA5WmJXUlVhVzFsUVc1a1QyWm1jMlYwWFN4Y2JpQWdJQ0JiYzNGc1ZHbHRaVU52YldKcGJtVmtVbVZuWlhnc0lHVjRkSEpoWTNSSlUwOVVhVzFsVDJabWMyVjBRVzVrU1VGT1FWcHZibVZkWEc0Z0lDazdYRzU5WEc0aUxDQWlhVzF3YjNKMElIc2dTVzUyWVd4cFpFRnlaM1Z0Wlc1MFJYSnliM0lzSUVsdWRtRnNhV1JFZFhKaGRHbHZia1Z5Y205eUxDQkpiblpoYkdsa1ZXNXBkRVZ5Y205eUlIMGdabkp2YlNCY0lpNHZaWEp5YjNKekxtcHpYQ0k3WEc1cGJYQnZjblFnUm05eWJXRjBkR1Z5SUdaeWIyMGdYQ0l1TDJsdGNHd3ZabTl5YldGMGRHVnlMbXB6WENJN1hHNXBiWEJ2Y25RZ1NXNTJZV3hwWkNCbWNtOXRJRndpTGk5cGJYQnNMMmx1ZG1Gc2FXUXVhbk5jSWp0Y2JtbHRjRzl5ZENCTWIyTmhiR1VnWm5KdmJTQmNJaTR2YVcxd2JDOXNiMk5oYkdVdWFuTmNJanRjYm1sdGNHOXlkQ0I3SUhCaGNuTmxTVk5QUkhWeVlYUnBiMjRzSUhCaGNuTmxTVk5QVkdsdFpVOXViSGtnZlNCbWNtOXRJRndpTGk5cGJYQnNMM0psWjJWNFVHRnljMlZ5TG1welhDSTdYRzVwYlhCdmNuUWdlMXh1SUNCaGMwNTFiV0psY2l4Y2JpQWdhR0Z6VDNkdVVISnZjR1Z5ZEhrc1hHNGdJR2x6VG5WdFltVnlMRnh1SUNCcGMxVnVaR1ZtYVc1bFpDeGNiaUFnYm05eWJXRnNhWHBsVDJKcVpXTjBMRnh1SUNCeWIzVnVaRlJ2TEZ4dWZTQm1jbTl0SUZ3aUxpOXBiWEJzTDNWMGFXd3Vhbk5jSWp0Y2JtbHRjRzl5ZENCVFpYUjBhVzVuY3lCbWNtOXRJRndpTGk5elpYUjBhVzVuY3k1cWMxd2lPMXh1WEc1amIyNXpkQ0JKVGxaQlRFbEVJRDBnWENKSmJuWmhiR2xrSUVSMWNtRjBhVzl1WENJN1hHNWNiaTh2SUhWdWFYUWdZMjl1ZG1WeWMybHZiaUJqYjI1emRHRnVkSE5jYm1WNGNHOXlkQ0JqYjI1emRDQnNiM2RQY21SbGNrMWhkSEpwZUNBOUlIdGNiaUFnSUNCM1pXVnJjem9nZTF4dUlDQWdJQ0FnWkdGNWN6b2dOeXhjYmlBZ0lDQWdJR2h2ZFhKek9pQTNJQ29nTWpRc1hHNGdJQ0FnSUNCdGFXNTFkR1Z6T2lBM0lDb2dNalFnS2lBMk1DeGNiaUFnSUNBZ0lITmxZMjl1WkhNNklEY2dLaUF5TkNBcUlEWXdJQ29nTmpBc1hHNGdJQ0FnSUNCdGFXeHNhWE5sWTI5dVpITTZJRGNnS2lBeU5DQXFJRFl3SUNvZ05qQWdLaUF4TURBd0xGeHVJQ0FnSUgwc1hHNGdJQ0FnWkdGNWN6b2dlMXh1SUNBZ0lDQWdhRzkxY25NNklESTBMRnh1SUNBZ0lDQWdiV2x1ZFhSbGN6b2dNalFnS2lBMk1DeGNiaUFnSUNBZ0lITmxZMjl1WkhNNklESTBJQ29nTmpBZ0tpQTJNQ3hjYmlBZ0lDQWdJRzFwYkd4cGMyVmpiMjVrY3pvZ01qUWdLaUEyTUNBcUlEWXdJQ29nTVRBd01DeGNiaUFnSUNCOUxGeHVJQ0FnSUdodmRYSnpPaUI3SUcxcGJuVjBaWE02SURZd0xDQnpaV052Ym1Sek9pQTJNQ0FxSURZd0xDQnRhV3hzYVhObFkyOXVaSE02SURZd0lDb2dOakFnS2lBeE1EQXdJSDBzWEc0Z0lDQWdiV2x1ZFhSbGN6b2dleUJ6WldOdmJtUnpPaUEyTUN3Z2JXbHNiR2x6WldOdmJtUnpPaUEyTUNBcUlERXdNREFnZlN4Y2JpQWdJQ0J6WldOdmJtUnpPaUI3SUcxcGJHeHBjMlZqYjI1a2N6b2dNVEF3TUNCOUxGeHVJQ0I5TEZ4dUlDQmpZWE4xWVd4TllYUnlhWGdnUFNCN1hHNGdJQ0FnZVdWaGNuTTZJSHRjYmlBZ0lDQWdJSEYxWVhKMFpYSnpPaUEwTEZ4dUlDQWdJQ0FnYlc5dWRHaHpPaUF4TWl4Y2JpQWdJQ0FnSUhkbFpXdHpPaUExTWl4Y2JpQWdJQ0FnSUdSaGVYTTZJRE0yTlN4Y2JpQWdJQ0FnSUdodmRYSnpPaUF6TmpVZ0tpQXlOQ3hjYmlBZ0lDQWdJRzFwYm5WMFpYTTZJRE0yTlNBcUlESTBJQ29nTmpBc1hHNGdJQ0FnSUNCelpXTnZibVJ6T2lBek5qVWdLaUF5TkNBcUlEWXdJQ29nTmpBc1hHNGdJQ0FnSUNCdGFXeHNhWE5sWTI5dVpITTZJRE0yTlNBcUlESTBJQ29nTmpBZ0tpQTJNQ0FxSURFd01EQXNYRzRnSUNBZ2ZTeGNiaUFnSUNCeGRXRnlkR1Z5Y3pvZ2UxeHVJQ0FnSUNBZ2JXOXVkR2h6T2lBekxGeHVJQ0FnSUNBZ2QyVmxhM002SURFekxGeHVJQ0FnSUNBZ1pHRjVjem9nT1RFc1hHNGdJQ0FnSUNCb2IzVnljem9nT1RFZ0tpQXlOQ3hjYmlBZ0lDQWdJRzFwYm5WMFpYTTZJRGt4SUNvZ01qUWdLaUEyTUN4Y2JpQWdJQ0FnSUhObFkyOXVaSE02SURreElDb2dNalFnS2lBMk1DQXFJRFl3TEZ4dUlDQWdJQ0FnYldsc2JHbHpaV052Ym1Sek9pQTVNU0FxSURJMElDb2dOakFnS2lBMk1DQXFJREV3TURBc1hHNGdJQ0FnZlN4Y2JpQWdJQ0J0YjI1MGFITTZJSHRjYmlBZ0lDQWdJSGRsWld0ek9pQTBMRnh1SUNBZ0lDQWdaR0Y1Y3pvZ016QXNYRzRnSUNBZ0lDQm9iM1Z5Y3pvZ016QWdLaUF5TkN4Y2JpQWdJQ0FnSUcxcGJuVjBaWE02SURNd0lDb2dNalFnS2lBMk1DeGNiaUFnSUNBZ0lITmxZMjl1WkhNNklETXdJQ29nTWpRZ0tpQTJNQ0FxSURZd0xGeHVJQ0FnSUNBZ2JXbHNiR2x6WldOdmJtUnpPaUF6TUNBcUlESTBJQ29nTmpBZ0tpQTJNQ0FxSURFd01EQXNYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lDNHVMbXh2ZDA5eVpHVnlUV0YwY21sNExGeHVJQ0I5TEZ4dUlDQmtZWGx6U1c1WlpXRnlRV05qZFhKaGRHVWdQU0F4TkRZd09UY3VNQ0F2SURRd01DeGNiaUFnWkdGNWMwbHVUVzl1ZEdoQlkyTjFjbUYwWlNBOUlERTBOakE1Tnk0d0lDOGdORGd3TUN4Y2JpQWdZV05qZFhKaGRHVk5ZWFJ5YVhnZ1BTQjdYRzRnSUNBZ2VXVmhjbk02SUh0Y2JpQWdJQ0FnSUhGMVlYSjBaWEp6T2lBMExGeHVJQ0FnSUNBZ2JXOXVkR2h6T2lBeE1peGNiaUFnSUNBZ0lIZGxaV3R6T2lCa1lYbHpTVzVaWldGeVFXTmpkWEpoZEdVZ0x5QTNMRnh1SUNBZ0lDQWdaR0Y1Y3pvZ1pHRjVjMGx1V1dWaGNrRmpZM1Z5WVhSbExGeHVJQ0FnSUNBZ2FHOTFjbk02SUdSaGVYTkpibGxsWVhKQlkyTjFjbUYwWlNBcUlESTBMRnh1SUNBZ0lDQWdiV2x1ZFhSbGN6b2daR0Y1YzBsdVdXVmhja0ZqWTNWeVlYUmxJQ29nTWpRZ0tpQTJNQ3hjYmlBZ0lDQWdJSE5sWTI5dVpITTZJR1JoZVhOSmJsbGxZWEpCWTJOMWNtRjBaU0FxSURJMElDb2dOakFnS2lBMk1DeGNiaUFnSUNBZ0lHMXBiR3hwYzJWamIyNWtjem9nWkdGNWMwbHVXV1ZoY2tGalkzVnlZWFJsSUNvZ01qUWdLaUEyTUNBcUlEWXdJQ29nTVRBd01DeGNiaUFnSUNCOUxGeHVJQ0FnSUhGMVlYSjBaWEp6T2lCN1hHNGdJQ0FnSUNCdGIyNTBhSE02SURNc1hHNGdJQ0FnSUNCM1pXVnJjem9nWkdGNWMwbHVXV1ZoY2tGalkzVnlZWFJsSUM4Z01qZ3NYRzRnSUNBZ0lDQmtZWGx6T2lCa1lYbHpTVzVaWldGeVFXTmpkWEpoZEdVZ0x5QTBMRnh1SUNBZ0lDQWdhRzkxY25NNklDaGtZWGx6U1c1WlpXRnlRV05qZFhKaGRHVWdLaUF5TkNrZ0x5QTBMRnh1SUNBZ0lDQWdiV2x1ZFhSbGN6b2dLR1JoZVhOSmJsbGxZWEpCWTJOMWNtRjBaU0FxSURJMElDb2dOakFwSUM4Z05DeGNiaUFnSUNBZ0lITmxZMjl1WkhNNklDaGtZWGx6U1c1WlpXRnlRV05qZFhKaGRHVWdLaUF5TkNBcUlEWXdJQ29nTmpBcElDOGdOQ3hjYmlBZ0lDQWdJRzFwYkd4cGMyVmpiMjVrY3pvZ0tHUmhlWE5KYmxsbFlYSkJZMk4xY21GMFpTQXFJREkwSUNvZ05qQWdLaUEyTUNBcUlERXdNREFwSUM4Z05DeGNiaUFnSUNCOUxGeHVJQ0FnSUcxdmJuUm9jem9nZTF4dUlDQWdJQ0FnZDJWbGEzTTZJR1JoZVhOSmJrMXZiblJvUVdOamRYSmhkR1VnTHlBM0xGeHVJQ0FnSUNBZ1pHRjVjem9nWkdGNWMwbHVUVzl1ZEdoQlkyTjFjbUYwWlN4Y2JpQWdJQ0FnSUdodmRYSnpPaUJrWVhselNXNU5iMjUwYUVGalkzVnlZWFJsSUNvZ01qUXNYRzRnSUNBZ0lDQnRhVzUxZEdWek9pQmtZWGx6U1c1TmIyNTBhRUZqWTNWeVlYUmxJQ29nTWpRZ0tpQTJNQ3hjYmlBZ0lDQWdJSE5sWTI5dVpITTZJR1JoZVhOSmJrMXZiblJvUVdOamRYSmhkR1VnS2lBeU5DQXFJRFl3SUNvZ05qQXNYRzRnSUNBZ0lDQnRhV3hzYVhObFkyOXVaSE02SUdSaGVYTkpiazF2Ym5Sb1FXTmpkWEpoZEdVZ0tpQXlOQ0FxSURZd0lDb2dOakFnS2lBeE1EQXdMRnh1SUNBZ0lIMHNYRzRnSUNBZ0xpNHViRzkzVDNKa1pYSk5ZWFJ5YVhnc1hHNGdJSDA3WEc1Y2JpOHZJSFZ1YVhSeklHOXlaR1Z5WldRZ1lua2djMmw2WlZ4dVkyOXVjM1FnYjNKa1pYSmxaRlZ1YVhSeklEMGdXMXh1SUNCY0lubGxZWEp6WENJc1hHNGdJRndpY1hWaGNuUmxjbk5jSWl4Y2JpQWdYQ0p0YjI1MGFITmNJaXhjYmlBZ1hDSjNaV1ZyYzF3aUxGeHVJQ0JjSW1SaGVYTmNJaXhjYmlBZ1hDSm9iM1Z5YzF3aUxGeHVJQ0JjSW0xcGJuVjBaWE5jSWl4Y2JpQWdYQ0p6WldOdmJtUnpYQ0lzWEc0Z0lGd2liV2xzYkdselpXTnZibVJ6WENJc1hHNWRPMXh1WEc1amIyNXpkQ0J5WlhabGNuTmxWVzVwZEhNZ1BTQnZjbVJsY21Wa1ZXNXBkSE11YzJ4cFkyVW9NQ2t1Y21WMlpYSnpaU2dwTzF4dVhHNHZMeUJqYkc5dVpTQnlaV0ZzYkhrZ2JXVmhibk1nWENKamNtVmhkR1VnWVc1dmRHaGxjaUJwYm5OMFlXNWpaU0JxZFhOMElHeHBhMlVnZEdocGN5QnZibVVzSUdKMWRDQjNhWFJvSUhSb1pYTmxJR05vWVc1blpYTmNJbHh1Wm5WdVkzUnBiMjRnWTJ4dmJtVW9aSFZ5TENCaGJIUnpMQ0JqYkdWaGNpQTlJR1poYkhObEtTQjdYRzRnSUM4dklHUmxaWEFnYldWeVoyVWdabTl5SUhaaGJITmNiaUFnWTI5dWMzUWdZMjl1WmlBOUlIdGNiaUFnSUNCMllXeDFaWE02SUdOc1pXRnlJRDhnWVd4MGN5NTJZV3gxWlhNZ09pQjdJQzR1TG1SMWNpNTJZV3gxWlhNc0lDNHVMaWhoYkhSekxuWmhiSFZsY3lCOGZDQjdmU2tnZlN4Y2JpQWdJQ0JzYjJNNklHUjFjaTVzYjJNdVkyeHZibVVvWVd4MGN5NXNiMk1wTEZ4dUlDQWdJR052Ym5abGNuTnBiMjVCWTJOMWNtRmplVG9nWVd4MGN5NWpiMjUyWlhKemFXOXVRV05qZFhKaFkza2dmSHdnWkhWeUxtTnZiblpsY25OcGIyNUJZMk4xY21GamVTeGNiaUFnZlR0Y2JpQWdjbVYwZFhKdUlHNWxkeUJFZFhKaGRHbHZiaWhqYjI1bUtUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1lXNTBhVlJ5ZFc1aktHNHBJSHRjYmlBZ2NtVjBkWEp1SUc0Z1BDQXdJRDhnVFdGMGFDNW1iRzl2Y2lodUtTQTZJRTFoZEdndVkyVnBiQ2h1S1R0Y2JuMWNibHh1THk4Z1RrSTZJRzExZEdGMFpYTWdjR0Z5WVcxbGRHVnljMXh1Wm5WdVkzUnBiMjRnWTI5dWRtVnlkQ2h0WVhSeWFYZ3NJR1p5YjIxTllYQXNJR1p5YjIxVmJtbDBMQ0IwYjAxaGNDd2dkRzlWYm1sMEtTQjdYRzRnSUdOdmJuTjBJR052Ym5ZZ1BTQnRZWFJ5YVhoYmRHOVZibWwwWFZ0bWNtOXRWVzVwZEYwc1hHNGdJQ0FnY21GM0lEMGdabkp2YlUxaGNGdG1jbTl0Vlc1cGRGMGdMeUJqYjI1MkxGeHVJQ0FnSUhOaGJXVlRhV2R1SUQwZ1RXRjBhQzV6YVdkdUtISmhkeWtnUFQwOUlFMWhkR2d1YzJsbmJpaDBiMDFoY0Z0MGIxVnVhWFJkS1N4Y2JpQWdJQ0F2THlCdmF5d2djMjhnZEdocGN5QnBjeUIzYVd4a0xDQmlkWFFnYzJWbElIUm9aU0J0WVhSeWFYZ2dhVzRnZEdobElIUmxjM1J6WEc0Z0lDQWdZV1JrWldRZ1BWeHVJQ0FnSUNBZ0lYTmhiV1ZUYVdkdUlDWW1JSFJ2VFdGd1czUnZWVzVwZEYwZ0lUMDlJREFnSmlZZ1RXRjBhQzVoWW5Nb2NtRjNLU0E4UFNBeElEOGdZVzUwYVZSeWRXNWpLSEpoZHlrZ09pQk5ZWFJvTG5SeWRXNWpLSEpoZHlrN1hHNGdJSFJ2VFdGd1czUnZWVzVwZEYwZ0t6MGdZV1JrWldRN1hHNGdJR1p5YjIxTllYQmJabkp2YlZWdWFYUmRJQzA5SUdGa1pHVmtJQ29nWTI5dWRqdGNibjFjYmx4dUx5OGdUa0k2SUcxMWRHRjBaWE1nY0dGeVlXMWxkR1Z5YzF4dVpuVnVZM1JwYjI0Z2JtOXliV0ZzYVhwbFZtRnNkV1Z6S0cxaGRISnBlQ3dnZG1Gc2N5a2dlMXh1SUNCeVpYWmxjbk5sVlc1cGRITXVjbVZrZFdObEtDaHdjbVYyYVc5MWN5d2dZM1Z5Y21WdWRDa2dQVDRnZTF4dUlDQWdJR2xtSUNnaGFYTlZibVJsWm1sdVpXUW9kbUZzYzF0amRYSnlaVzUwWFNrcElIdGNiaUFnSUNBZ0lHbG1JQ2h3Y21WMmFXOTFjeWtnZTF4dUlDQWdJQ0FnSUNCamIyNTJaWEowS0cxaGRISnBlQ3dnZG1Gc2N5d2djSEpsZG1sdmRYTXNJSFpoYkhNc0lHTjFjbkpsYm5RcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOMWNuSmxiblE3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCd2NtVjJhVzkxY3p0Y2JpQWdJQ0I5WEc0Z0lIMHNJRzUxYkd3cE8xeHVmVnh1WEc0dktpcGNiaUFxSUVFZ1JIVnlZWFJwYjI0Z2IySnFaV04wSUhKbGNISmxjMlZ1ZEhNZ1lTQndaWEpwYjJRZ2IyWWdkR2x0WlN3Z2JHbHJaU0JjSWpJZ2JXOXVkR2h6WENJZ2IzSWdYQ0l4SUdSaGVTd2dNU0JvYjNWeVhDSXVJRU52Ym1ObGNIUjFZV3hzZVN3Z2FYUW5jeUJxZFhOMElHRWdiV0Z3SUc5bUlIVnVhWFJ6SUhSdklIUm9aV2x5SUhGMVlXNTBhWFJwWlhNc0lHRmpZMjl0Y0dGdWFXVmtJR0o1SUhOdmJXVWdZV1JrYVhScGIyNWhiQ0JqYjI1bWFXZDFjbUYwYVc5dUlHRnVaQ0J0WlhSb2IyUnpJR1p2Y2lCamNtVmhkR2x1Wnl3Z2NHRnljMmx1Wnl3Z2FXNTBaWEp5YjJkaGRHbHVaeXdnZEhKaGJuTm1iM0p0YVc1bkxDQmhibVFnWm05eWJXRjBkR2x1WnlCMGFHVnRMaUJVYUdWNUlHTmhiaUJpWlNCMWMyVmtJRzl1SUhSb1pXbHlJRzkzYmlCdmNpQnBiaUJqYjI1cWRXNWpkR2x2YmlCM2FYUm9JRzkwYUdWeUlFeDFlRzl1SUhSNWNHVnpPeUJtYjNJZ1pYaGhiWEJzWlN3Z2VXOTFJR05oYmlCMWMyVWdlMEJzYVc1cklFUmhkR1ZVYVcxbEkzQnNkWE45SUhSdklHRmtaQ0JoSUVSMWNtRjBhVzl1SUc5aWFtVmpkQ0IwYnlCaElFUmhkR1ZVYVcxbExDQndjbTlrZFdOcGJtY2dZVzV2ZEdobGNpQkVZWFJsVkdsdFpTNWNiaUFxWEc0Z0tpQklaWEpsSUdseklHRWdZbkpwWldZZ2IzWmxjblpwWlhjZ2IyWWdZMjl0Ylc5dWJIa2dkWE5sWkNCdFpYUm9iMlJ6SUdGdVpDQm5aWFIwWlhKeklHbHVJRVIxY21GMGFXOXVPbHh1SUNwY2JpQXFJQ29nS2lwRGNtVmhkR2x2YmlvcUlGUnZJR055WldGMFpTQmhJRVIxY21GMGFXOXVMQ0IxYzJVZ2UwQnNhVzVySUVSMWNtRjBhVzl1STJaeWIyMU5hV3hzYVhOOUxDQjdRR3hwYm1zZ1JIVnlZWFJwYjI0alpuSnZiVTlpYW1WamRIMHNJRzl5SUh0QWJHbHVheUJFZFhKaGRHbHZiaU5tY205dFNWTlBmUzVjYmlBcUlDb2dLaXBWYm1sMElIWmhiSFZsY3lvcUlGTmxaU0IwYUdVZ2UwQnNhVzVySUVSMWNtRjBhVzl1STNsbFlYSnpmU3dnZTBCc2FXNXJJRVIxY21GMGFXOXVJMjF2Ym5Sb2MzMHNJSHRBYkdsdWF5QkVkWEpoZEdsdmJpTjNaV1ZyYzMwc0lIdEFiR2x1YXlCRWRYSmhkR2x2YmlOa1lYbHpmU3dnZTBCc2FXNXJJRVIxY21GMGFXOXVJMmh2ZFhKemZTd2dlMEJzYVc1cklFUjFjbUYwYVc5dUkyMXBiblYwWlhOOUxDQjdRR3hwYm1zZ1JIVnlZWFJwYjI0amMyVmpiMjVrYzMwc0lIdEFiR2x1YXlCRWRYSmhkR2x2YmlOdGFXeHNhWE5sWTI5dVpITjlJR0ZqWTJWemMyOXljeTVjYmlBcUlDb2dLaXBEYjI1bWFXZDFjbUYwYVc5dUtpb2dVMlZsSUNCN1FHeHBibXNnUkhWeVlYUnBiMjRqYkc5allXeGxmU0JoYm1RZ2UwQnNhVzVySUVSMWNtRjBhVzl1STI1MWJXSmxjbWx1WjFONWMzUmxiWDBnWVdOalpYTnpiM0p6TGx4dUlDb2dLaUFxS2xSeVlXNXpabTl5YldGMGFXOXVLaW9nVkc4Z1kzSmxZWFJsSUc1bGR5QkVkWEpoZEdsdmJuTWdiM1YwSUc5bUlHOXNaQ0J2Ym1WeklIVnpaU0I3UUd4cGJtc2dSSFZ5WVhScGIyNGpjR3gxYzMwc0lIdEFiR2x1YXlCRWRYSmhkR2x2YmlOdGFXNTFjMzBzSUh0QWJHbHVheUJFZFhKaGRHbHZiaU51YjNKdFlXeHBlbVY5TENCN1FHeHBibXNnUkhWeVlYUnBiMjRqYzJWMGZTd2dlMEJzYVc1cklFUjFjbUYwYVc5dUkzSmxZMjl1Wm1sbmRYSmxmU3dnZTBCc2FXNXJJRVIxY21GMGFXOXVJM05vYVdaMFZHOTlMQ0JoYm1RZ2UwQnNhVzVySUVSMWNtRjBhVzl1STI1bFoyRjBaWDB1WEc0Z0tpQXFJQ29xVDNWMGNIVjBLaW9nVkc4Z1kyOXVkbVZ5ZENCMGFHVWdSSFZ5WVhScGIyNGdhVzUwYnlCdmRHaGxjaUJ5WlhCeVpYTmxiblJoZEdsdmJuTXNJSE5sWlNCN1FHeHBibXNnUkhWeVlYUnBiMjRqWVhOOUxDQjdRR3hwYm1zZ1JIVnlZWFJwYjI0amRHOUpVMDk5TENCN1FHeHBibXNnUkhWeVlYUnBiMjRqZEc5R2IzSnRZWFI5TENCaGJtUWdlMEJzYVc1cklFUjFjbUYwYVc5dUkzUnZTbE5QVG4xY2JpQXFYRzRnS2lCVWFHVnlaU2R6SUdGeVpTQnRiM0psSUcxbGRHaHZaSE1nWkc5amRXMWxiblJsWkNCaVpXeHZkeTRnU1c0Z1lXUmthWFJwYjI0c0lHWnZjaUJ0YjNKbElHbHVabTl5YldGMGFXOXVJRzl1SUhOMVluUnNaWElnZEc5d2FXTnpJR3hwYTJVZ2FXNTBaWEp1WVhScGIyNWhiR2w2WVhScGIyNGdZVzVrSUhaaGJHbGthWFI1TENCelpXVWdkR2hsSUdWNGRHVnlibUZzSUdSdlkzVnRaVzUwWVhScGIyNHVYRzRnS2k5Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRVIxY21GMGFXOXVJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQmpiMjV6ZEhKMVkzUnZjaWhqYjI1bWFXY3BJSHRjYmlBZ0lDQmpiMjV6ZENCaFkyTjFjbUYwWlNBOUlHTnZibVpwWnk1amIyNTJaWEp6YVc5dVFXTmpkWEpoWTNrZ1BUMDlJRndpYkc5dVozUmxjbTFjSWlCOGZDQm1ZV3h6WlR0Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCQVlXTmpaWE56SUhCeWFYWmhkR1ZjYmlBZ0lDQWdLaTljYmlBZ0lDQjBhR2x6TG5aaGJIVmxjeUE5SUdOdmJtWnBaeTUyWVd4MVpYTTdYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dRR0ZqWTJWemN5QndjbWwyWVhSbFhHNGdJQ0FnSUNvdlhHNGdJQ0FnZEdocGN5NXNiMk1nUFNCamIyNW1hV2N1Ykc5aklIeDhJRXh2WTJGc1pTNWpjbVZoZEdVb0tUdGNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkFZV05qWlhOeklIQnlhWFpoZEdWY2JpQWdJQ0FnS2k5Y2JpQWdJQ0IwYUdsekxtTnZiblpsY25OcGIyNUJZMk4xY21GamVTQTlJR0ZqWTNWeVlYUmxJRDhnWENKc2IyNW5kR1Z5YlZ3aUlEb2dYQ0pqWVhOMVlXeGNJanRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJBWVdOalpYTnpJSEJ5YVhaaGRHVmNiaUFnSUNBZ0tpOWNiaUFnSUNCMGFHbHpMbWx1ZG1Gc2FXUWdQU0JqYjI1bWFXY3VhVzUyWVd4cFpDQjhmQ0J1ZFd4c08xeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFQmhZMk5sYzNNZ2NISnBkbUYwWlZ4dUlDQWdJQ0FxTDF4dUlDQWdJSFJvYVhNdWJXRjBjbWw0SUQwZ1lXTmpkWEpoZEdVZ1B5QmhZMk4xY21GMFpVMWhkSEpwZUNBNklHTmhjM1ZoYkUxaGRISnBlRHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJBWVdOalpYTnpJSEJ5YVhaaGRHVmNiaUFnSUNBZ0tpOWNiaUFnSUNCMGFHbHpMbWx6VEhWNGIyNUVkWEpoZEdsdmJpQTlJSFJ5ZFdVN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRM0psWVhSbElFUjFjbUYwYVc5dUlHWnliMjBnWVNCdWRXMWlaWElnYjJZZ2JXbHNiR2x6WldOdmJtUnpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1kyOTFiblFnYjJZZ2JXbHNiR2x6WldOdmJtUnpYRzRnSUNBcUlFQndZWEpoYlNCN1QySnFaV04wZlNCdmNIUnpJQzBnYjNCMGFXOXVjeUJtYjNJZ2NHRnljMmx1WjF4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMjl3ZEhNdWJHOWpZV3hsUFNkbGJpMVZVeWRkSUMwZ2RHaGxJR3h2WTJGc1pTQjBieUIxYzJWY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzl3ZEhNdWJuVnRZbVZ5YVc1blUzbHpkR1Z0SUMwZ2RHaGxJRzUxYldKbGNtbHVaeUJ6ZVhOMFpXMGdkRzhnZFhObFhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JiYjNCMGN5NWpiMjUyWlhKemFXOXVRV05qZFhKaFkzazlKMk5oYzNWaGJDZGRJQzBnZEdobElHTnZiblpsY25OcGIyNGdjM2x6ZEdWdElIUnZJSFZ6WlZ4dUlDQWdLaUJBY21WMGRYSnVJSHRFZFhKaGRHbHZibjFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJtY205dFRXbHNiR2x6S0dOdmRXNTBMQ0J2Y0hSektTQjdYRzRnSUNBZ2NtVjBkWEp1SUVSMWNtRjBhVzl1TG1aeWIyMVBZbXBsWTNRb2V5QnRhV3hzYVhObFkyOXVaSE02SUdOdmRXNTBJSDBzSUc5d2RITXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOeVpXRjBaU0JoSUVSMWNtRjBhVzl1SUdaeWIyMGdZU0JLWVhaaFUyTnlhWEIwSUc5aWFtVmpkQ0IzYVhSb0lHdGxlWE1nYkdsclpTQW5lV1ZoY25NbklHRnVaQ0FuYUc5MWNuTW5MbHh1SUNBZ0tpQkpaaUIwYUdseklHOWlhbVZqZENCcGN5QmxiWEIwZVNCMGFHVnVJR0VnZW1WeWJ5QnRhV3hzYVhObFkyOXVaSE1nWkhWeVlYUnBiMjRnYVhNZ2NtVjBkWEp1WldRdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2WW1vZ0xTQjBhR1VnYjJKcVpXTjBJSFJ2SUdOeVpXRjBaU0IwYUdVZ1JHRjBaVlJwYldVZ1puSnZiVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2IySnFMbmxsWVhKelhHNGdJQ0FxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0J2WW1vdWNYVmhjblJsY25OY2JpQWdJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRzlpYWk1dGIyNTBhSE5jYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHOWlhaTUzWldWcmMxeHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnYjJKcUxtUmhlWE5jYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHOWlhaTVvYjNWeWMxeHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnYjJKcUxtMXBiblYwWlhOY2JpQWdJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRzlpYWk1elpXTnZibVJ6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnZZbW91Yldsc2JHbHpaV052Ym1SelhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0JiYjNCMGN6MWJYVjBnTFNCdmNIUnBiMjV6SUdadmNpQmpjbVZoZEdsdVp5QjBhR2x6SUVSMWNtRjBhVzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmJiM0IwY3k1c2IyTmhiR1U5SjJWdUxWVlRKMTBnTFNCMGFHVWdiRzlqWVd4bElIUnZJSFZ6WlZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiM0IwY3k1dWRXMWlaWEpwYm1kVGVYTjBaVzBnTFNCMGFHVWdiblZ0WW1WeWFXNW5JSE41YzNSbGJTQjBieUIxYzJWY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnR2Y0hSekxtTnZiblpsY25OcGIyNUJZMk4xY21GamVUMG5ZMkZ6ZFdGc0oxMGdMU0IwYUdVZ1kyOXVkbVZ5YzJsdmJpQnplWE4wWlcwZ2RHOGdkWE5sWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMFIxY21GMGFXOXVmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJR1p5YjIxUFltcGxZM1FvYjJKcUxDQnZjSFJ6SUQwZ2UzMHBJSHRjYmlBZ0lDQnBaaUFvYjJKcUlEMDlJRzUxYkd3Z2ZId2dkSGx3Wlc5bUlHOWlhaUFoUFQwZ1hDSnZZbXBsWTNSY0lpa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRWx1ZG1Gc2FXUkJjbWQxYldWdWRFVnljbTl5S0Z4dUlDQWdJQ0FnSUNCZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamREb2dZWEpuZFcxbGJuUWdaWGh3WldOMFpXUWdkRzhnWW1VZ1lXNGdiMkpxWldOMExDQm5iM1FnSkh0Y2JpQWdJQ0FnSUNBZ0lDQnZZbW9nUFQwOUlHNTFiR3dnUHlCY0ltNTFiR3hjSWlBNklIUjVjR1Z2WmlCdlltcGNiaUFnSUNBZ0lDQWdmV0JjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJFZFhKaGRHbHZiaWg3WEc0Z0lDQWdJQ0IyWVd4MVpYTTZJRzV2Y20xaGJHbDZaVTlpYW1WamRDaHZZbW9zSUVSMWNtRjBhVzl1TG01dmNtMWhiR2w2WlZWdWFYUXBMRnh1SUNBZ0lDQWdiRzlqT2lCTWIyTmhiR1V1Wm5KdmJVOWlhbVZqZENodmNIUnpLU3hjYmlBZ0lDQWdJR052Ym5abGNuTnBiMjVCWTJOMWNtRmplVG9nYjNCMGN5NWpiMjUyWlhKemFXOXVRV05qZFhKaFkza3NYRzRnSUNBZ2ZTazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxJR0VnUkhWeVlYUnBiMjRnWm5KdmJTQkVkWEpoZEdsdmJreHBhMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1QySnFaV04wSUh3Z2JuVnRZbVZ5SUh3Z1JIVnlZWFJwYjI1OUlHUjFjbUYwYVc5dVRHbHJaVnh1SUNBZ0tpQlBibVVnYjJZNlhHNGdJQ0FxSUMwZ2IySnFaV04wSUhkcGRHZ2dhMlY1Y3lCc2FXdGxJQ2Q1WldGeWN5Y2dZVzVrSUNkb2IzVnljeWN1WEc0Z0lDQXFJQzBnYm5WdFltVnlJSEpsY0hKbGMyVnVkR2x1WnlCdGFXeHNhWE5sWTI5dVpITmNiaUFnSUNvZ0xTQkVkWEpoZEdsdmJpQnBibk4wWVc1alpWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0RWRYSmhkR2x2Ym4xY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCbWNtOXRSSFZ5WVhScGIyNU1hV3RsS0dSMWNtRjBhVzl1VEdsclpTa2dlMXh1SUNBZ0lHbG1JQ2hwYzA1MWJXSmxjaWhrZFhKaGRHbHZia3hwYTJVcEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1JIVnlZWFJwYjI0dVpuSnZiVTFwYkd4cGN5aGtkWEpoZEdsdmJreHBhMlVwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvUkhWeVlYUnBiMjR1YVhORWRYSmhkR2x2Ymloa2RYSmhkR2x2Ymt4cGEyVXBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdaSFZ5WVhScGIyNU1hV3RsTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR1IxY21GMGFXOXVUR2xyWlNBOVBUMGdYQ0p2WW1wbFkzUmNJaWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRVIxY21GMGFXOXVMbVp5YjIxUFltcGxZM1FvWkhWeVlYUnBiMjVNYVd0bEtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVsdWRtRnNhV1JCY21kMWJXVnVkRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQmdWVzVyYm05M2JpQmtkWEpoZEdsdmJpQmhjbWQxYldWdWRDQWtlMlIxY21GMGFXOXVUR2xyWlgwZ2IyWWdkSGx3WlNBa2UzUjVjR1Z2WmlCa2RYSmhkR2x2Ymt4cGEyVjlZRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxJR0VnUkhWeVlYUnBiMjRnWm5KdmJTQmhiaUJKVTA4Z09EWXdNU0JrZFhKaGRHbHZiaUJ6ZEhKcGJtY3VYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFpYaDBJQzBnZEdWNGRDQjBieUJ3WVhKelpWeHVJQ0FnS2lCQWNHRnlZVzBnZTA5aWFtVmpkSDBnYjNCMGN5QXRJRzl3ZEdsdmJuTWdabTl5SUhCaGNuTnBibWRjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlGdHZjSFJ6TG14dlkyRnNaVDBuWlc0dFZWTW5YU0F0SUhSb1pTQnNiMk5oYkdVZ2RHOGdkWE5sWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnZjSFJ6TG01MWJXSmxjbWx1WjFONWMzUmxiU0F0SUhSb1pTQnVkVzFpWlhKcGJtY2djM2x6ZEdWdElIUnZJSFZ6WlZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMjl3ZEhNdVkyOXVkbVZ5YzJsdmJrRmpZM1Z5WVdONVBTZGpZWE4xWVd3blhTQXRJSFJvWlNCamIyNTJaWEp6YVc5dUlITjVjM1JsYlNCMGJ5QjFjMlZjYmlBZ0lDb2dRSE5sWlNCb2RIUndjem92TDJWdUxuZHBhMmx3WldScFlTNXZjbWN2ZDJscmFTOUpVMDlmT0RZd01TTkVkWEpoZEdsdmJuTmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JIVnlZWFJwYjI0dVpuSnZiVWxUVHlnblVETlpOazB4VnpSRVZERXlTRE13VFRWVEp5a3VkRzlQWW1wbFkzUW9LU0F2THowK0lIc2dlV1ZoY25NNklETXNJRzF2Ym5Sb2N6b2dOaXdnZDJWbGEzTTZJREVzSUdSaGVYTTZJRFFzSUdodmRYSnpPaUF4TWl3Z2JXbHVkWFJsY3pvZ016QXNJSE5sWTI5dVpITTZJRFVnZlZ4dUlDQWdLaUJBWlhoaGJYQnNaU0JFZFhKaGRHbHZiaTVtY205dFNWTlBLQ2RRVkRJelNDY3BMblJ2VDJKcVpXTjBLQ2tnTHk4OVBpQjdJR2h2ZFhKek9pQXlNeUI5WEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVIxY21GMGFXOXVMbVp5YjIxSlUwOG9KMUExV1ROTkp5a3VkRzlQWW1wbFkzUW9LU0F2THowK0lIc2dlV1ZoY25NNklEVXNJRzF2Ym5Sb2N6b2dNeUI5WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMFIxY21GMGFXOXVmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJR1p5YjIxSlUwOG9kR1Y0ZEN3Z2IzQjBjeWtnZTF4dUlDQWdJR052Ym5OMElGdHdZWEp6WldSZElEMGdjR0Z5YzJWSlUwOUVkWEpoZEdsdmJpaDBaWGgwS1R0Y2JpQWdJQ0JwWmlBb2NHRnljMlZrS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENod1lYSnpaV1FzSUc5d2RITXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUkhWeVlYUnBiMjR1YVc1MllXeHBaQ2hjSW5WdWNHRnljMkZpYkdWY0lpd2dZSFJvWlNCcGJuQjFkQ0JjSWlSN2RHVjRkSDFjSWlCallXNG5kQ0JpWlNCd1lYSnpaV1FnWVhNZ1NWTlBJRGcyTURGZ0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRM0psWVhSbElHRWdSSFZ5WVhScGIyNGdabkp2YlNCaGJpQkpVMDhnT0RZd01TQjBhVzFsSUhOMGNtbHVaeTVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUmxlSFFnTFNCMFpYaDBJSFJ2SUhCaGNuTmxYRzRnSUNBcUlFQndZWEpoYlNCN1QySnFaV04wZlNCdmNIUnpJQzBnYjNCMGFXOXVjeUJtYjNJZ2NHRnljMmx1WjF4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMjl3ZEhNdWJHOWpZV3hsUFNkbGJpMVZVeWRkSUMwZ2RHaGxJR3h2WTJGc1pTQjBieUIxYzJWY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzl3ZEhNdWJuVnRZbVZ5YVc1blUzbHpkR1Z0SUMwZ2RHaGxJRzUxYldKbGNtbHVaeUJ6ZVhOMFpXMGdkRzhnZFhObFhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JiYjNCMGN5NWpiMjUyWlhKemFXOXVRV05qZFhKaFkzazlKMk5oYzNWaGJDZGRJQzBnZEdobElHTnZiblpsY25OcGIyNGdjM2x6ZEdWdElIUnZJSFZ6WlZ4dUlDQWdLaUJBYzJWbElHaDBkSEJ6T2k4dlpXNHVkMmxyYVhCbFpHbGhMbTl5Wnk5M2FXdHBMMGxUVDE4NE5qQXhJMVJwYldWelhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSMWNtRjBhVzl1TG1aeWIyMUpVMDlVYVcxbEtDY3hNVG95TWpvek15NDBORFFuS1M1MGIwOWlhbVZqZENncElDOHZQVDRnZXlCb2IzVnljem9nTVRFc0lHMXBiblYwWlhNNklESXlMQ0J6WldOdmJtUnpPaUF6TXl3Z2JXbHNiR2x6WldOdmJtUnpPaUEwTkRRZ2ZWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRWRYSmhkR2x2Ymk1bWNtOXRTVk5QVkdsdFpTZ25NVEU2TURBbktTNTBiMDlpYW1WamRDZ3BJQzh2UFQ0Z2V5Qm9iM1Z5Y3pvZ01URXNJRzFwYm5WMFpYTTZJREFzSUhObFkyOXVaSE02SURBZ2ZWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRWRYSmhkR2x2Ymk1bWNtOXRTVk5QVkdsdFpTZ25WREV4T2pBd0p5a3VkRzlQWW1wbFkzUW9LU0F2THowK0lIc2dhRzkxY25NNklERXhMQ0J0YVc1MWRHVnpPaUF3TENCelpXTnZibVJ6T2lBd0lIMWNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JIVnlZWFJwYjI0dVpuSnZiVWxUVDFScGJXVW9KekV4TURBbktTNTBiMDlpYW1WamRDZ3BJQzh2UFQ0Z2V5Qm9iM1Z5Y3pvZ01URXNJRzFwYm5WMFpYTTZJREFzSUhObFkyOXVaSE02SURBZ2ZWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRWRYSmhkR2x2Ymk1bWNtOXRTVk5QVkdsdFpTZ25WREV4TURBbktTNTBiMDlpYW1WamRDZ3BJQzh2UFQ0Z2V5Qm9iM1Z5Y3pvZ01URXNJRzFwYm5WMFpYTTZJREFzSUhObFkyOXVaSE02SURBZ2ZWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0RWRYSmhkR2x2Ym4xY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCbWNtOXRTVk5QVkdsdFpTaDBaWGgwTENCdmNIUnpLU0I3WEc0Z0lDQWdZMjl1YzNRZ1czQmhjbk5sWkYwZ1BTQndZWEp6WlVsVFQxUnBiV1ZQYm14NUtIUmxlSFFwTzF4dUlDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJFZFhKaGRHbHZiaTVtY205dFQySnFaV04wS0hCaGNuTmxaQ3dnYjNCMGN5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJFZFhKaGRHbHZiaTVwYm5aaGJHbGtLRndpZFc1d1lYSnpZV0pzWlZ3aUxDQmdkR2hsSUdsdWNIVjBJRndpSkh0MFpYaDBmVndpSUdOaGJpZDBJR0psSUhCaGNuTmxaQ0JoY3lCSlUwOGdPRFl3TVdBcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdVZ1lXNGdhVzUyWVd4cFpDQkVkWEpoZEdsdmJpNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhKbFlYTnZiaUF0SUhOcGJYQnNaU0J6ZEhKcGJtY2diMllnZDJoNUlIUm9hWE1nWkdGMFpYUnBiV1VnYVhNZ2FXNTJZV3hwWkM0Z1UyaHZkV3hrSUc1dmRDQmpiMjUwWVdsdUlIQmhjbUZ0WlhSbGNuTWdiM0lnWVc1NWRHaHBibWNnWld4elpTQmtZWFJoTFdSbGNHVnVaR1Z1ZEZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMlY0Y0d4aGJtRjBhVzl1UFc1MWJHeGRJQzBnYkc5dVoyVnlJR1Y0Y0d4aGJtRjBhVzl1TENCdFlYa2dhVzVqYkhWa1pTQndZWEpoYldWMFpYSnpJR0Z1WkNCdmRHaGxjaUIxYzJWbWRXd2daR1ZpZFdkbmFXNW5JR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMFIxY21GMGFXOXVmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJR2x1ZG1Gc2FXUW9jbVZoYzI5dUxDQmxlSEJzWVc1aGRHbHZiaUE5SUc1MWJHd3BJSHRjYmlBZ0lDQnBaaUFvSVhKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVsdWRtRnNhV1JCY21kMWJXVnVkRVZ5Y205eUtGd2libVZsWkNCMGJ5QnpjR1ZqYVdaNUlHRWdjbVZoYzI5dUlIUm9aU0JFZFhKaGRHbHZiaUJwY3lCcGJuWmhiR2xrWENJcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJR2x1ZG1Gc2FXUWdQU0J5WldGemIyNGdhVzV6ZEdGdVkyVnZaaUJKYm5aaGJHbGtJRDhnY21WaGMyOXVJRG9nYm1WM0lFbHVkbUZzYVdRb2NtVmhjMjl1TENCbGVIQnNZVzVoZEdsdmJpazdYRzVjYmlBZ0lDQnBaaUFvVTJWMGRHbHVaM011ZEdoeWIzZFBia2x1ZG1Gc2FXUXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJKYm5aaGJHbGtSSFZ5WVhScGIyNUZjbkp2Y2locGJuWmhiR2xrS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJFZFhKaGRHbHZiaWg3SUdsdWRtRnNhV1FnZlNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2JtOXliV0ZzYVhwbFZXNXBkQ2gxYm1sMEtTQjdYRzRnSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkNBOUlIdGNiaUFnSUNBZ0lIbGxZWEk2SUZ3aWVXVmhjbk5jSWl4Y2JpQWdJQ0FnSUhsbFlYSnpPaUJjSW5sbFlYSnpYQ0lzWEc0Z0lDQWdJQ0J4ZFdGeWRHVnlPaUJjSW5GMVlYSjBaWEp6WENJc1hHNGdJQ0FnSUNCeGRXRnlkR1Z5Y3pvZ1hDSnhkV0Z5ZEdWeWMxd2lMRnh1SUNBZ0lDQWdiVzl1ZEdnNklGd2liVzl1ZEdoelhDSXNYRzRnSUNBZ0lDQnRiMjUwYUhNNklGd2liVzl1ZEdoelhDSXNYRzRnSUNBZ0lDQjNaV1ZyT2lCY0luZGxaV3R6WENJc1hHNGdJQ0FnSUNCM1pXVnJjem9nWENKM1pXVnJjMXdpTEZ4dUlDQWdJQ0FnWkdGNU9pQmNJbVJoZVhOY0lpeGNiaUFnSUNBZ0lHUmhlWE02SUZ3aVpHRjVjMXdpTEZ4dUlDQWdJQ0FnYUc5MWNqb2dYQ0pvYjNWeWMxd2lMRnh1SUNBZ0lDQWdhRzkxY25NNklGd2lhRzkxY25OY0lpeGNiaUFnSUNBZ0lHMXBiblYwWlRvZ1hDSnRhVzUxZEdWelhDSXNYRzRnSUNBZ0lDQnRhVzUxZEdWek9pQmNJbTFwYm5WMFpYTmNJaXhjYmlBZ0lDQWdJSE5sWTI5dVpEb2dYQ0p6WldOdmJtUnpYQ0lzWEc0Z0lDQWdJQ0J6WldOdmJtUnpPaUJjSW5ObFkyOXVaSE5jSWl4Y2JpQWdJQ0FnSUcxcGJHeHBjMlZqYjI1a09pQmNJbTFwYkd4cGMyVmpiMjVrYzF3aUxGeHVJQ0FnSUNBZ2JXbHNiR2x6WldOdmJtUnpPaUJjSW0xcGJHeHBjMlZqYjI1a2Mxd2lMRnh1SUNBZ0lIMWJkVzVwZENBL0lIVnVhWFF1ZEc5TWIzZGxja05oYzJVb0tTQTZJSFZ1YVhSZE8xeHVYRzRnSUNBZ2FXWWdLQ0Z1YjNKdFlXeHBlbVZrS1NCMGFISnZkeUJ1WlhjZ1NXNTJZV3hwWkZWdWFYUkZjbkp2Y2loMWJtbDBLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnViM0p0WVd4cGVtVmtPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOb1pXTnJJR2xtSUdGdUlHOWlhbVZqZENCcGN5QmhJRVIxY21GMGFXOXVMaUJYYjNKcmN5QmhZM0p2YzNNZ1kyOXVkR1Y0ZENCaWIzVnVaR0Z5YVdWelhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J2WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdhWE5FZFhKaGRHbHZiaWh2S1NCN1hHNGdJQ0FnY21WMGRYSnVJQ2h2SUNZbUlHOHVhWE5NZFhodmJrUjFjbUYwYVc5dUtTQjhmQ0JtWVd4elpUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJIWlhRZ0lIUm9aU0JzYjJOaGJHVWdiMllnWVNCRWRYSmhkR2x2Yml3Z2MzVmphQ0FuWlc0dFIwSW5YRzRnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCblpYUWdiRzlqWVd4bEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxteHZZeTVzYjJOaGJHVWdPaUJ1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdiblZ0WW1WeWFXNW5JSE41YzNSbGJTQnZaaUJoSUVSMWNtRjBhVzl1TENCemRXTm9JQ2RpWlc1bkp5NGdWR2hsSUc1MWJXSmxjbWx1WnlCemVYTjBaVzBnYVhNZ2RYTmxaQ0IzYUdWdUlHWnZjbTFoZEhScGJtY2dkR2hsSUVSMWNtRjBhVzl1WEc0Z0lDQXFYRzRnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCblpYUWdiblZ0WW1WeWFXNW5VM2x6ZEdWdEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxteHZZeTV1ZFcxaVpYSnBibWRUZVhOMFpXMGdPaUJ1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdZU0J6ZEhKcGJtY2djbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCRWRYSmhkR2x2YmlCbWIzSnRZWFIwWldRZ1lXTmpiM0prYVc1bklIUnZJSFJvWlNCemNHVmphV1pwWldRZ1ptOXliV0YwSUhOMGNtbHVaeTRnV1c5MUlHMWhlU0IxYzJVZ2RHaGxjMlVnZEc5clpXNXpPbHh1SUNBZ0tpQXFJR0JUWUNCbWIzSWdiV2xzYkdselpXTnZibVJ6WEc0Z0lDQXFJQ29nWUhOZ0lHWnZjaUJ6WldOdmJtUnpYRzRnSUNBcUlDb2dZRzFnSUdadmNpQnRhVzUxZEdWelhHNGdJQ0FxSUNvZ1lHaGdJR1p2Y2lCb2IzVnljMXh1SUNBZ0tpQXFJR0JrWUNCbWIzSWdaR0Y1YzF4dUlDQWdLaUFxSUdCM1lDQm1iM0lnZDJWbGEzTmNiaUFnSUNvZ0tpQmdUV0FnWm05eUlHMXZiblJvYzF4dUlDQWdLaUFxSUdCNVlDQm1iM0lnZVdWaGNuTmNiaUFnSUNvZ1RtOTBaWE02WEc0Z0lDQXFJQ29nUVdSa0lIQmhaR1JwYm1jZ1lua2djbVZ3WldGMGFXNW5JSFJvWlNCMGIydGxiaXdnWlM1bkxpQmNJbmw1WENJZ2NHRmtjeUIwYUdVZ2VXVmhjbk1nZEc4Z2RIZHZJR1JwWjJsMGN5d2dYQ0pvYUdob1hDSWdjR0ZrY3lCMGFHVWdhRzkxY25NZ2IzVjBJSFJ2SUdadmRYSWdaR2xuYVhSelhHNGdJQ0FxSUNvZ1ZHOXJaVzV6SUdOaGJpQmlaU0JsYzJOaGNHVmtJR0o1SUhkeVlYQndhVzVuSUhkcGRHZ2djMmx1WjJ4bElIRjFiM1JsY3k1Y2JpQWdJQ29nS2lCVWFHVWdaSFZ5WVhScGIyNGdkMmxzYkNCaVpTQmpiMjUyWlhKMFpXUWdkRzhnZEdobElITmxkQ0J2WmlCMWJtbDBjeUJwYmlCMGFHVWdabTl5YldGMElITjBjbWx1WnlCMWMybHVaeUI3UUd4cGJtc2dSSFZ5WVhScGIyNGpjMmhwWm5SVWIzMGdZVzVrSUhSb1pTQkVkWEpoZEdsdmJuTW5jeUJqYjI1MlpYSnphVzl1SUdGalkzVnlZV041SUhObGRIUnBibWN1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm1iWFFnTFNCMGFHVWdabTl5YldGMElITjBjbWx1WjF4dUlDQWdLaUJBY0dGeVlXMGdlMDlpYW1WamRIMGdiM0IwY3lBdElHOXdkR2x2Ym5OY2JpQWdJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0JiYjNCMGN5NW1iRzl2Y2oxMGNuVmxYU0F0SUdac2IyOXlJRzUxYldWeWFXTmhiQ0IyWVd4MVpYTmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJSGxsWVhKek9pQXhMQ0JrWVhsek9pQTJMQ0J6WldOdmJtUnpPaUF5SUgwcExuUnZSbTl5YldGMEtGd2llU0JrSUhOY0lpa2dMeTg5UGlCY0lqRWdOaUF5WENKY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lIbGxZWEp6T2lBeExDQmtZWGx6T2lBMkxDQnpaV052Ym1Sek9pQXlJSDBwTG5SdlJtOXliV0YwS0Z3aWVYa2daR1FnYzNOelhDSXBJQzh2UFQ0Z1hDSXdNU0F3TmlBd01ESmNJbHh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLSHNnZVdWaGNuTTZJREVzSUdSaGVYTTZJRFlzSUhObFkyOXVaSE02SURJZ2ZTa3VkRzlHYjNKdFlYUW9YQ0pOSUZOY0lpa2dMeTg5UGlCY0lqRXlJRFV4T0RRd01qQXdNRndpWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFnSUNvdlhHNGdJSFJ2Um05eWJXRjBLR1p0ZEN3Z2IzQjBjeUE5SUh0OUtTQjdYRzRnSUNBZ0x5OGdjbVYyWlhKelpTMWpiMjF3WVhRZ2MybHVZMlVnTVM0eU95QjNaU0JoYkhkaGVYTWdjbTkxYm1RZ1pHOTNiaUJ1YjNjc0lHNWxkbVZ5SUhWd0xDQmhibVFnZDJVZ1pHOGdhWFFnWW5rZ1pHVm1ZWFZzZEZ4dUlDQWdJR052Ym5OMElHWnRkRTl3ZEhNZ1BTQjdYRzRnSUNBZ0lDQXVMaTV2Y0hSekxGeHVJQ0FnSUNBZ1pteHZiM0k2SUc5d2RITXVjbTkxYm1RZ0lUMDlJR1poYkhObElDWW1JRzl3ZEhNdVpteHZiM0lnSVQwOUlHWmhiSE5sTEZ4dUlDQWdJSDA3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVhOV1lXeHBaRnh1SUNBZ0lDQWdQeUJHYjNKdFlYUjBaWEl1WTNKbFlYUmxLSFJvYVhNdWJHOWpMQ0JtYlhSUGNIUnpLUzVtYjNKdFlYUkVkWEpoZEdsdmJrWnliMjFUZEhKcGJtY29kR2hwY3l3Z1ptMTBLVnh1SUNBZ0lDQWdPaUJKVGxaQlRFbEVPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nWVNCemRISnBibWNnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnWVNCRWRYSmhkR2x2YmlCM2FYUm9JR0ZzYkNCMWJtbDBjeUJwYm1Oc2RXUmxaQzVjYmlBZ0lDb2dWRzhnYlc5a2FXWjVJR2wwY3lCaVpXaGhkbWx2Y2lCMWMyVWdkR2hsSUdCc2FYTjBVM1I1YkdWZ0lHRnVaQ0JoYm5rZ1NXNTBiQzVPZFcxaVpYSkdiM0p0WVhRZ2IzQjBhVzl1TENCMGFHOTFaMmdnWUhWdWFYUkVhWE53YkdGNVlDQnBjeUJsYzNCbFkybGhiR3g1SUhKbGJHVjJZVzUwTGx4dUlDQWdLaUJBYzJWbElHaDBkSEJ6T2k4dlpHVjJaV3h2Y0dWeUxtMXZlbWxzYkdFdWIzSm5MMlZ1TFZWVEwyUnZZM012VjJWaUwwcGhkbUZUWTNKcGNIUXZVbVZtWlhKbGJtTmxMMGRzYjJKaGJGOVBZbXBsWTNSekwwbHVkR3d2VG5WdFltVnlSbTl5YldGMFhHNGdJQ0FxSUVCd1lYSmhiU0J2Y0hSeklDMGdUMjRnYjNCMGFXOXVJRzlpYW1WamRDQjBieUJ2ZG1WeWNtbGtaU0IwYUdVZ1ptOXliV0YwZEdsdVp5NGdRV05qWlhCMGN5QjBhR1VnYzJGdFpTQnJaWGx6SUdGeklIUm9aU0J2Y0hScGIyNXpJSEJoY21GdFpYUmxjaUJ2WmlCMGFHVWdibUYwYVhabElHQkpiblF1VG5WdFltVnlSbTl5YldGMFlDQmpiMjV6ZEhKMVkzUnZjaXdnWVhNZ2QyVnNiQ0JoY3lCZ2JHbHpkRk4wZVd4bFlDNWNiaUFnSUNvZ1FHVjRZVzF3YkdWY2JpQWdJQ29nWUdCZ2FuTmNiaUFnSUNvZ2RtRnlJR1IxY2lBOUlFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUJrWVhsek9pQXhMQ0JvYjNWeWN6b2dOU3dnYldsdWRYUmxjem9nTmlCOUtWeHVJQ0FnS2lCa2RYSXVkRzlJZFcxaGJpZ3BJQzh2UFQ0Z0p6RWdaR0Y1TENBMUlHaHZkWEp6TENBMklHMXBiblYwWlhNblhHNGdJQ0FxSUdSMWNpNTBiMGgxYldGdUtIc2diR2x6ZEZOMGVXeGxPaUJjSW14dmJtZGNJaUI5S1NBdkx6MCtJQ2N4SUdSaGVTd2dOU0JvYjNWeWN5d2dZVzVrSURZZ2JXbHVkWFJsY3lkY2JpQWdJQ29nWkhWeUxuUnZTSFZ0WVc0b2V5QjFibWwwUkdsemNHeGhlVG9nWENKemFHOXlkRndpSUgwcElDOHZQVDRnSnpFZ1pHRjVMQ0ExSUdoeUxDQTJJRzFwYmlkY2JpQWdJQ29nWUdCZ1hHNGdJQ0FxTDF4dUlDQjBiMGgxYldGdUtHOXdkSE1nUFNCN2ZTa2dlMXh1SUNBZ0lHTnZibk4wSUd3Z1BTQnZjbVJsY21Wa1ZXNXBkSE5jYmlBZ0lDQWdJQzV0WVhBb0tIVnVhWFFwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RtRnNJRDBnZEdocGN5NTJZV3gxWlhOYmRXNXBkRjA3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMVZ1WkdWbWFXNWxaQ2gyWVd3cEtTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11Ykc5alhHNGdJQ0FnSUNBZ0lDQWdMbTUxYldKbGNrWnZjbTFoZEhSbGNpaDdJSE4wZVd4bE9pQmNJblZ1YVhSY0lpd2dkVzVwZEVScGMzQnNZWGs2SUZ3aWJHOXVaMXdpTENBdUxpNXZjSFJ6TENCMWJtbDBPaUIxYm1sMExuTnNhV05sS0RBc0lDMHhLU0I5S1Z4dUlDQWdJQ0FnSUNBZ0lDNW1iM0p0WVhRb2RtRnNLVHRjYmlBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0F1Wm1sc2RHVnlLQ2h1S1NBOVBpQnVLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG14dlkxeHVJQ0FnSUNBZ0xteHBjM1JHYjNKdFlYUjBaWElvZXlCMGVYQmxPaUJjSW1OdmJtcDFibU4wYVc5dVhDSXNJSE4wZVd4bE9pQnZjSFJ6TG14cGMzUlRkSGxzWlNCOGZDQmNJbTVoY25KdmQxd2lMQ0F1TGk1dmNIUnpJSDBwWEc0Z0lDQWdJQ0F1Wm05eWJXRjBLR3dwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1lTQktZWFpoVTJOeWFYQjBJRzlpYW1WamRDQjNhWFJvSUhSb2FYTWdSSFZ5WVhScGIyNG5jeUIyWVd4MVpYTXVYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUI1WldGeWN6b2dNU3dnWkdGNWN6b2dOaXdnYzJWamIyNWtjem9nTWlCOUtTNTBiMDlpYW1WamRDZ3BJQzh2UFQ0Z2V5QjVaV0Z5Y3pvZ01Td2daR0Y1Y3pvZ05pd2djMlZqYjI1a2N6b2dNaUI5WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJSFJ2VDJKcVpXTjBLQ2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVwYzFaaGJHbGtLU0J5WlhSMWNtNGdlMzA3WEc0Z0lDQWdjbVYwZFhKdUlIc2dMaTR1ZEdocGN5NTJZV3gxWlhNZ2ZUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJR0Z1SUVsVFR5QTROakF4TFdOdmJYQnNhV0Z1ZENCemRISnBibWNnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QkVkWEpoZEdsdmJpNWNiaUFnSUNvZ1FITmxaU0JvZEhSd2N6b3ZMMlZ1TG5kcGEybHdaV1JwWVM1dmNtY3ZkMmxyYVM5SlUwOWZPRFl3TVNORWRYSmhkR2x2Ym5OY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lIbGxZWEp6T2lBekxDQnpaV052Ym1Sek9pQTBOU0I5S1M1MGIwbFRUeWdwSUM4dlBUNGdKMUF6V1ZRME5WTW5YRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUJ0YjI1MGFITTZJRFFzSUhObFkyOXVaSE02SURRMUlIMHBMblJ2U1ZOUEtDa2dMeTg5UGlBblVEUk5WRFExVXlkY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lHMXZiblJvY3pvZ05TQjlLUzUwYjBsVFR5Z3BJQzh2UFQ0Z0oxQTFUU2RjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSSFZ5WVhScGIyNHVabkp2YlU5aWFtVmpkQ2g3SUcxcGJuVjBaWE02SURVZ2ZTa3VkRzlKVTA4b0tTQXZMejArSUNkUVZEVk5KMXh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLSHNnYldsc2JHbHpaV052Ym1Sek9pQTJJSDBwTG5SdlNWTlBLQ2tnTHk4OVBpQW5VRlF3TGpBd05sTW5YRzRnSUNBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQWdJQ292WEc0Z0lIUnZTVk5QS0NrZ2UxeHVJQ0FnSUM4dklIZGxJR052ZFd4a0lIVnpaU0IwYUdVZ1ptOXliV0YwZEdWeUxDQmlkWFFnZEdocGN5QnBjeUJoYmlCbFlYTnBaWElnZDJGNUlIUnZJR2RsZENCMGFHVWdiV2x1YVcxMWJTQnpkSEpwYm1kY2JpQWdJQ0JwWmlBb0lYUm9hWE11YVhOV1lXeHBaQ2tnY21WMGRYSnVJRzUxYkd3N1hHNWNiaUFnSUNCc1pYUWdjeUE5SUZ3aVVGd2lPMXh1SUNBZ0lHbG1JQ2gwYUdsekxubGxZWEp6SUNFOVBTQXdLU0J6SUNzOUlIUm9hWE11ZVdWaGNuTWdLeUJjSWxsY0lqdGNiaUFnSUNCcFppQW9kR2hwY3k1dGIyNTBhSE1nSVQwOUlEQWdmSHdnZEdocGN5NXhkV0Z5ZEdWeWN5QWhQVDBnTUNrZ2N5QXJQU0IwYUdsekxtMXZiblJvY3lBcklIUm9hWE11Y1hWaGNuUmxjbk1nS2lBeklDc2dYQ0pOWENJN1hHNGdJQ0FnYVdZZ0tIUm9hWE11ZDJWbGEzTWdJVDA5SURBcElITWdLejBnZEdocGN5NTNaV1ZyY3lBcklGd2lWMXdpTzF4dUlDQWdJR2xtSUNoMGFHbHpMbVJoZVhNZ0lUMDlJREFwSUhNZ0t6MGdkR2hwY3k1a1lYbHpJQ3NnWENKRVhDSTdYRzRnSUNBZ2FXWWdLSFJvYVhNdWFHOTFjbk1nSVQwOUlEQWdmSHdnZEdocGN5NXRhVzUxZEdWeklDRTlQU0F3SUh4OElIUm9hWE11YzJWamIyNWtjeUFoUFQwZ01DQjhmQ0IwYUdsekxtMXBiR3hwYzJWamIyNWtjeUFoUFQwZ01DbGNiaUFnSUNBZ0lITWdLejBnWENKVVhDSTdYRzRnSUNBZ2FXWWdLSFJvYVhNdWFHOTFjbk1nSVQwOUlEQXBJSE1nS3owZ2RHaHBjeTVvYjNWeWN5QXJJRndpU0Z3aU8xeHVJQ0FnSUdsbUlDaDBhR2x6TG0xcGJuVjBaWE1nSVQwOUlEQXBJSE1nS3owZ2RHaHBjeTV0YVc1MWRHVnpJQ3NnWENKTlhDSTdYRzRnSUNBZ2FXWWdLSFJvYVhNdWMyVmpiMjVrY3lBaFBUMGdNQ0I4ZkNCMGFHbHpMbTFwYkd4cGMyVmpiMjVrY3lBaFBUMGdNQ2xjYmlBZ0lDQWdJQzh2SUhSb2FYTWdkMmxzYkNCb1lXNWtiR1VnWENKbWJHOWhkR2x1WnlCd2IybHVkQ0J0WVdSdVpYTnpYQ0lnWW5rZ2NtVnRiM1pwYm1jZ1pYaDBjbUVnWkdWamFXMWhiQ0J3YkdGalpYTmNiaUFnSUNBZ0lDOHZJR2gwZEhCek9pOHZjM1JoWTJ0dmRtVnlabXh2ZHk1amIyMHZjWFZsYzNScGIyNXpMelU0T0RBd05DOXBjeTFtYkc5aGRHbHVaeTF3YjJsdWRDMXRZWFJvTFdKeWIydGxibHh1SUNBZ0lDQWdjeUFyUFNCeWIzVnVaRlJ2S0hSb2FYTXVjMlZqYjI1a2N5QXJJSFJvYVhNdWJXbHNiR2x6WldOdmJtUnpJQzhnTVRBd01Dd2dNeWtnS3lCY0lsTmNJanRjYmlBZ0lDQnBaaUFvY3lBOVBUMGdYQ0pRWENJcElITWdLejBnWENKVU1GTmNJanRjYmlBZ0lDQnlaWFIxY200Z2N6dGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJR0Z1SUVsVFR5QTROakF4TFdOdmJYQnNhV0Z1ZENCemRISnBibWNnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QkVkWEpoZEdsdmJpd2dabTl5YldGMGRHVmtJR0Z6SUdFZ2RHbHRaU0J2WmlCa1lYa3VYRzRnSUNBcUlFNXZkR1VnZEdoaGRDQjBhR2x6SUhkcGJHd2djbVYwZFhKdUlHNTFiR3dnYVdZZ2RHaGxJR1IxY21GMGFXOXVJR2x6SUdsdWRtRnNhV1FzSUc1bFoyRjBhWFpsTENCdmNpQmxjWFZoYkNCMGJ5QnZjaUJuY21WaGRHVnlJSFJvWVc0Z01qUWdhRzkxY25NdVhHNGdJQ0FxSUVCelpXVWdhSFIwY0hNNkx5OWxiaTUzYVd0cGNHVmthV0V1YjNKbkwzZHBhMmt2U1ZOUFh6ZzJNREVqVkdsdFpYTmNiaUFnSUNvZ1FIQmhjbUZ0SUh0UFltcGxZM1I5SUc5d2RITWdMU0J2Y0hScGIyNXpYRzRnSUNBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1cyOXdkSE11YzNWd2NISmxjM05OYVd4c2FYTmxZMjl1WkhNOVptRnNjMlZkSUMwZ1pYaGpiSFZrWlNCdGFXeHNhWE5sWTI5dVpITWdabkp2YlNCMGFHVWdabTl5YldGMElHbG1JSFJvWlhrbmNtVWdNRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlGdHZjSFJ6TG5OMWNIQnlaWE56VTJWamIyNWtjejFtWVd4elpWMGdMU0JsZUdOc2RXUmxJSE5sWTI5dVpITWdabkp2YlNCMGFHVWdabTl5YldGMElHbG1JSFJvWlhrbmNtVWdNRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlGdHZjSFJ6TG1sdVkyeDFaR1ZRY21WbWFYZzlabUZzYzJWZElDMGdhVzVqYkhWa1pTQjBhR1VnWUZSZ0lIQnlaV1pwZUZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMjl3ZEhNdVptOXliV0YwUFNkbGVIUmxibVJsWkNkZElDMGdZMmh2YjNObElHSmxkSGRsWlc0Z2RHaGxJR0poYzJsaklHRnVaQ0JsZUhSbGJtUmxaQ0JtYjNKdFlYUmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJR2h2ZFhKek9pQXhNU0I5S1M1MGIwbFRUMVJwYldVb0tTQXZMejArSUNjeE1Ub3dNRG93TUM0d01EQW5YRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUJvYjNWeWN6b2dNVEVnZlNrdWRHOUpVMDlVYVcxbEtIc2djM1Z3Y0hKbGMzTk5hV3hzYVhObFkyOXVaSE02SUhSeWRXVWdmU2tnTHk4OVBpQW5NVEU2TURBNk1EQW5YRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUJvYjNWeWN6b2dNVEVnZlNrdWRHOUpVMDlVYVcxbEtIc2djM1Z3Y0hKbGMzTlRaV052Ym1Sek9pQjBjblZsSUgwcElDOHZQVDRnSnpFeE9qQXdKMXh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLSHNnYUc5MWNuTTZJREV4SUgwcExuUnZTVk5QVkdsdFpTaDdJR2x1WTJ4MVpHVlFjbVZtYVhnNklIUnlkV1VnZlNrZ0x5ODlQaUFuVkRFeE9qQXdPakF3TGpBd01DZGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJR2h2ZFhKek9pQXhNU0I5S1M1MGIwbFRUMVJwYldVb2V5Qm1iM0p0WVhRNklDZGlZWE5wWXljZ2ZTa2dMeTg5UGlBbk1URXdNREF3TGpBd01DZGNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDQWdLaTljYmlBZ2RHOUpVMDlVYVcxbEtHOXdkSE1nUFNCN2ZTa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXBjMVpoYkdsa0tTQnlaWFIxY200Z2JuVnNiRHRjYmx4dUlDQWdJR052Ym5OMElHMXBiR3hwY3lBOUlIUm9hWE11ZEc5TmFXeHNhWE1vS1R0Y2JpQWdJQ0JwWmlBb2JXbHNiR2x6SUR3Z01DQjhmQ0J0YVd4c2FYTWdQajBnT0RZME1EQXdNREFwSUhKbGRIVnliaUJ1ZFd4c08xeHVYRzRnSUNBZ2IzQjBjeUE5SUh0Y2JpQWdJQ0FnSUhOMWNIQnlaWE56VFdsc2JHbHpaV052Ym1Sek9pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUhOMWNIQnlaWE56VTJWamIyNWtjem9nWm1Gc2MyVXNYRzRnSUNBZ0lDQnBibU5zZFdSbFVISmxabWw0T2lCbVlXeHpaU3hjYmlBZ0lDQWdJR1p2Y20xaGREb2dYQ0psZUhSbGJtUmxaRndpTEZ4dUlDQWdJQ0FnTGk0dWIzQjBjeXhjYmlBZ0lDQjlPMXh1WEc0Z0lDQWdZMjl1YzNRZ2RtRnNkV1VnUFNCMGFHbHpMbk5vYVdaMFZHOG9YQ0pvYjNWeWMxd2lMQ0JjSW0xcGJuVjBaWE5jSWl3Z1hDSnpaV052Ym1SelhDSXNJRndpYldsc2JHbHpaV052Ym1SelhDSXBPMXh1WEc0Z0lDQWdiR1YwSUdadGRDQTlJRzl3ZEhNdVptOXliV0YwSUQwOVBTQmNJbUpoYzJsalhDSWdQeUJjSW1ob2JXMWNJaUE2SUZ3aWFHZzZiVzFjSWp0Y2JseHVJQ0FnSUdsbUlDZ2hiM0IwY3k1emRYQndjbVZ6YzFObFkyOXVaSE1nZkh3Z2RtRnNkV1V1YzJWamIyNWtjeUFoUFQwZ01DQjhmQ0IyWVd4MVpTNXRhV3hzYVhObFkyOXVaSE1nSVQwOUlEQXBJSHRjYmlBZ0lDQWdJR1p0ZENBclBTQnZjSFJ6TG1admNtMWhkQ0E5UFQwZ1hDSmlZWE5wWTF3aUlEOGdYQ0p6YzF3aUlEb2dYQ0k2YzNOY0lqdGNiaUFnSUNBZ0lHbG1JQ2doYjNCMGN5NXpkWEJ3Y21WemMwMXBiR3hwYzJWamIyNWtjeUI4ZkNCMllXeDFaUzV0YVd4c2FYTmxZMjl1WkhNZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ1ptMTBJQ3M5SUZ3aUxsTlRVMXdpTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCemRISWdQU0IyWVd4MVpTNTBiMFp2Y20xaGRDaG1iWFFwTzF4dVhHNGdJQ0FnYVdZZ0tHOXdkSE11YVc1amJIVmtaVkJ5WldacGVDa2dlMXh1SUNBZ0lDQWdjM1J5SUQwZ1hDSlVYQ0lnS3lCemRISTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhOMGNqdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJR0Z1SUVsVFR5QTROakF4SUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdSSFZ5WVhScGIyNGdZWEJ3Y205d2NtbGhkR1VnWm05eUlIVnpaU0JwYmlCS1UwOU9MbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdJQ0FxTDF4dUlDQjBiMHBUVDA0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkRzlKVTA4b0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJR0Z1SUVsVFR5QTROakF4SUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdSSFZ5WVhScGIyNGdZWEJ3Y205d2NtbGhkR1VnWm05eUlIVnpaU0JwYmlCa1pXSjFaMmRwYm1jdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBZ0lDb3ZYRzRnSUhSdlUzUnlhVzVuS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuUnZTVk5QS0NrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmhiaUJ0YVd4c2FYTmxZMjl1WkhNZ2RtRnNkV1VnYjJZZ2RHaHBjeUJFZFhKaGRHbHZiaTVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZWeHVJQ0FnS2k5Y2JpQWdkRzlOYVd4c2FYTW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WVhNb1hDSnRhV3hzYVhObFkyOXVaSE5jSWlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmhiaUJ0YVd4c2FYTmxZMjl1WkhNZ2RtRnNkV1VnYjJZZ2RHaHBjeUJFZFhKaGRHbHZiaTRnUVd4cFlYTWdiMllnZTBCc2FXNXJJSFJ2VFdsc2JHbHpmVnh1SUNBZ0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQjJZV3gxWlU5bUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMblJ2VFdsc2JHbHpLQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRnJaU0IwYUdseklFUjFjbUYwYVc5dUlHeHZibWRsY2lCaWVTQjBhR1VnYzNCbFkybG1hV1ZrSUdGdGIzVnVkQzRnVW1WMGRYSnVJR0VnYm1WM2JIa3RZMjl1YzNSeWRXTjBaV1FnUkhWeVlYUnBiMjR1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdSSFZ5WVhScGIyNThUMkpxWldOMGZHNTFiV0psY24wZ1pIVnlZWFJwYjI0Z0xTQlVhR1VnWVcxdmRXNTBJSFJ2SUdGa1pDNGdSV2wwYUdWeUlHRWdUSFY0YjI0Z1JIVnlZWFJwYjI0c0lHRWdiblZ0WW1WeUlHOW1JRzFwYkd4cGMyVmpiMjVrY3l3Z2RHaGxJRzlpYW1WamRDQmhjbWQxYldWdWRDQjBieUJFZFhKaGRHbHZiaTVtY205dFQySnFaV04wS0NsY2JpQWdJQ29nUUhKbGRIVnliaUI3UkhWeVlYUnBiMjU5WEc0Z0lDQXFMMXh1SUNCd2JIVnpLR1IxY21GMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbWx6Vm1Gc2FXUXBJSEpsZEhWeWJpQjBhR2x6TzF4dVhHNGdJQ0FnWTI5dWMzUWdaSFZ5SUQwZ1JIVnlZWFJwYjI0dVpuSnZiVVIxY21GMGFXOXVUR2xyWlNoa2RYSmhkR2x2Ymlrc1hHNGdJQ0FnSUNCeVpYTjFiSFFnUFNCN2ZUdGNibHh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdheUJ2WmlCdmNtUmxjbVZrVlc1cGRITXBJSHRjYmlBZ0lDQWdJR2xtSUNob1lYTlBkMjVRY205d1pYSjBlU2hrZFhJdWRtRnNkV1Z6TENCcktTQjhmQ0JvWVhOUGQyNVFjbTl3WlhKMGVTaDBhR2x6TG5aaGJIVmxjeXdnYXlrcElIdGNiaUFnSUNBZ0lDQWdjbVZ6ZFd4MFcydGRJRDBnWkhWeUxtZGxkQ2hyS1NBcklIUm9hWE11WjJWMEtHc3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCamJHOXVaU2gwYUdsekxDQjdJSFpoYkhWbGN6b2djbVZ6ZFd4MElIMHNJSFJ5ZFdVcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRTFoYTJVZ2RHaHBjeUJFZFhKaGRHbHZiaUJ6YUc5eWRHVnlJR0o1SUhSb1pTQnpjR1ZqYVdacFpXUWdZVzF2ZFc1MExpQlNaWFIxY200Z1lTQnVaWGRzZVMxamIyNXpkSEoxWTNSbFpDQkVkWEpoZEdsdmJpNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0RWRYSmhkR2x2Ym54UFltcGxZM1I4Ym5WdFltVnlmU0JrZFhKaGRHbHZiaUF0SUZSb1pTQmhiVzkxYm5RZ2RHOGdjM1ZpZEhKaFkzUXVJRVZwZEdobGNpQmhJRXgxZUc5dUlFUjFjbUYwYVc5dUxDQmhJRzUxYldKbGNpQnZaaUJ0YVd4c2FYTmxZMjl1WkhNc0lIUm9aU0J2WW1wbFkzUWdZWEpuZFcxbGJuUWdkRzhnUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENncFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBSMWNtRjBhVzl1ZlZ4dUlDQWdLaTljYmlBZ2JXbHVkWE1vWkhWeVlYUnBiMjRwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YVhOV1lXeHBaQ2tnY21WMGRYSnVJSFJvYVhNN1hHNWNiaUFnSUNCamIyNXpkQ0JrZFhJZ1BTQkVkWEpoZEdsdmJpNW1jbTl0UkhWeVlYUnBiMjVNYVd0bEtHUjFjbUYwYVc5dUtUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXdiSFZ6S0dSMWNpNXVaV2RoZEdVb0tTazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJOaGJHVWdkR2hwY3lCRWRYSmhkR2x2YmlCaWVTQjBhR1VnYzNCbFkybG1hV1ZrSUdGdGIzVnVkQzRnVW1WMGRYSnVJR0VnYm1WM2JIa3RZMjl1YzNSeWRXTjBaV1FnUkhWeVlYUnBiMjR1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJR1p1SUMwZ1ZHaGxJR1oxYm1OMGFXOXVJSFJ2SUdGd2NHeDVJSFJ2SUdWaFkyZ2dkVzVwZEM0Z1FYSnBkSGtnYVhNZ01TQnZjaUF5T2lCMGFHVWdkbUZzZFdVZ2IyWWdkR2hsSUhWdWFYUWdZVzVrTENCdmNIUnBiMjVoYkd4NUxDQjBhR1VnZFc1cGRDQnVZVzFsTGlCTmRYTjBJSEpsZEhWeWJpQmhJRzUxYldKbGNpNWNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJR2h2ZFhKek9pQXhMQ0J0YVc1MWRHVnpPaUF6TUNCOUtTNXRZWEJWYm1sMGN5aDRJRDArSUhnZ0tpQXlLU0F2THowK0lIc2dhRzkxY25NNklESXNJRzFwYm5WMFpYTTZJRFl3SUgxY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lHaHZkWEp6T2lBeExDQnRhVzUxZEdWek9pQXpNQ0I5S1M1dFlYQlZibWwwY3lnb2VDd2dkU2tnUFQ0Z2RTQTlQVDBnWENKb2IzVnlYQ0lnUHlCNElDb2dNaUE2SUhncElDOHZQVDRnZXlCb2IzVnljem9nTWl3Z2JXbHVkWFJsY3pvZ016QWdmVnh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVkWEpoZEdsdmJuMWNiaUFnSUNvdlhHNGdJRzFoY0ZWdWFYUnpLR1p1S1NCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1selZtRnNhV1FwSUhKbGRIVnliaUIwYUdsek8xeHVJQ0FnSUdOdmJuTjBJSEpsYzNWc2RDQTlJSHQ5TzF4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnYXlCdlppQlBZbXBsWTNRdWEyVjVjeWgwYUdsekxuWmhiSFZsY3lrcElIdGNiaUFnSUNBZ0lISmxjM1ZzZEZ0clhTQTlJR0Z6VG5WdFltVnlLR1p1S0hSb2FYTXVkbUZzZFdWelcydGRMQ0JyS1NrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmpiRzl1WlNoMGFHbHpMQ0I3SUhaaGJIVmxjem9nY21WemRXeDBJSDBzSUhSeWRXVXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVkbGRDQjBhR1VnZG1Gc2RXVWdiMllnZFc1cGRDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhWdWFYUWdMU0JoSUhWdWFYUWdjM1ZqYUNCaGN5QW5iV2x1ZFhSbEp5QnZjaUFuWkdGNUoxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRWRYSmhkR2x2Ymk1bWNtOXRUMkpxWldOMEtIdDVaV0Z5Y3pvZ01pd2daR0Y1Y3pvZ00zMHBMbWRsZENnbmVXVmhjbk1uS1NBdkx6MCtJREpjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSSFZ5WVhScGIyNHVabkp2YlU5aWFtVmpkQ2g3ZVdWaGNuTTZJRElzSUdSaGVYTTZJRE45S1M1blpYUW9KMjF2Ym5Sb2N5Y3BJQzh2UFQ0Z01GeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRWRYSmhkR2x2Ymk1bWNtOXRUMkpxWldOMEtIdDVaV0Z5Y3pvZ01pd2daR0Y1Y3pvZ00zMHBMbWRsZENnblpHRjVjeWNwSUM4dlBUNGdNMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQm5aWFFvZFc1cGRDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpXMFIxY21GMGFXOXVMbTV2Y20xaGJHbDZaVlZ1YVhRb2RXNXBkQ2xkTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGd2lVMlYwWENJZ2RHaGxJSFpoYkhWbGN5QnZaaUJ6Y0dWamFXWnBaV1FnZFc1cGRITXVJRkpsZEhWeWJpQmhJRzVsZDJ4NUxXTnZibk4wY25WamRHVmtJRVIxY21GMGFXOXVMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2RtRnNkV1Z6SUMwZ1lTQnRZWEJ3YVc1bklHOW1JSFZ1YVhSeklIUnZJRzUxYldKbGNuTmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1pIVnlMbk5sZENoN0lIbGxZWEp6T2lBeU1ERTNJSDBwWEc0Z0lDQXFJRUJsZUdGdGNHeGxJR1IxY2k1elpYUW9leUJvYjNWeWN6b2dPQ3dnYldsdWRYUmxjem9nTXpBZ2ZTbGNiaUFnSUNvZ1FISmxkSFZ5YmlCN1JIVnlZWFJwYjI1OVhHNGdJQ0FxTDF4dUlDQnpaWFFvZG1Gc2RXVnpLU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbWx6Vm1Gc2FXUXBJSEpsZEhWeWJpQjBhR2x6TzF4dVhHNGdJQ0FnWTI5dWMzUWdiV2w0WldRZ1BTQjdJQzR1TG5Sb2FYTXVkbUZzZFdWekxDQXVMaTV1YjNKdFlXeHBlbVZQWW1wbFkzUW9kbUZzZFdWekxDQkVkWEpoZEdsdmJpNXViM0p0WVd4cGVtVlZibWwwS1NCOU8xeHVJQ0FnSUhKbGRIVnliaUJqYkc5dVpTaDBhR2x6TENCN0lIWmhiSFZsY3pvZ2JXbDRaV1FnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dYQ0pUWlhSY0lpQjBhR1VnYkc5allXeGxJR0Z1WkM5dmNpQnVkVzFpWlhKcGJtZFRlWE4wWlcwdUlDQlNaWFIxY201eklHRWdibVYzYkhrdFkyOXVjM1J5ZFdOMFpXUWdSSFZ5WVhScGIyNHVYRzRnSUNBcUlFQmxlR0Z0Y0d4bElHUjFjaTV5WldOdmJtWnBaM1Z5WlNoN0lHeHZZMkZzWlRvZ0oyVnVMVWRDSnlCOUtWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0RWRYSmhkR2x2Ym4xY2JpQWdJQ292WEc0Z0lISmxZMjl1Wm1sbmRYSmxLSHNnYkc5allXeGxMQ0J1ZFcxaVpYSnBibWRUZVhOMFpXMHNJR052Ym5abGNuTnBiMjVCWTJOMWNtRmplU0I5SUQwZ2UzMHBJSHRjYmlBZ0lDQmpiMjV6ZENCc2IyTWdQU0IwYUdsekxteHZZeTVqYkc5dVpTaDdJR3h2WTJGc1pTd2diblZ0WW1WeWFXNW5VM2x6ZEdWdElIMHBMRnh1SUNBZ0lDQWdiM0IwY3lBOUlIc2diRzlqSUgwN1hHNWNiaUFnSUNCcFppQW9ZMjl1ZG1WeWMybHZia0ZqWTNWeVlXTjVLU0I3WEc0Z0lDQWdJQ0J2Y0hSekxtTnZiblpsY25OcGIyNUJZMk4xY21GamVTQTlJR052Ym5abGNuTnBiMjVCWTJOMWNtRmplVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z1kyeHZibVVvZEdocGN5d2diM0IwY3lrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdUlIUm9aU0JzWlc1bmRHZ2diMllnZEdobElHUjFjbUYwYVc5dUlHbHVJSFJvWlNCemNHVmphV1pwWldRZ2RXNXBkQzVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIVnVhWFFnTFNCaElIVnVhWFFnYzNWamFDQmhjeUFuYldsdWRYUmxjeWNnYjNJZ0oyUmhlWE1uWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVIxY21GMGFXOXVMbVp5YjIxUFltcGxZM1FvZTNsbFlYSnpPaUF4ZlNrdVlYTW9KMlJoZVhNbktTQXZMejArSURNMk5WeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRWRYSmhkR2x2Ymk1bWNtOXRUMkpxWldOMEtIdDVaV0Z5Y3pvZ01YMHBMbUZ6S0NkdGIyNTBhSE1uS1NBdkx6MCtJREV5WEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVIxY21GMGFXOXVMbVp5YjIxUFltcGxZM1FvZTJodmRYSnpPaUEyTUgwcExtRnpLQ2RrWVhsekp5a2dMeTg5UGlBeUxqVmNiaUFnSUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlZ4dUlDQWdLaTljYmlBZ1lYTW9kVzVwZENrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHpWbUZzYVdRZ1B5QjBhR2x6TG5Ob2FXWjBWRzhvZFc1cGRDa3VaMlYwS0hWdWFYUXBJRG9nVG1GT08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsWkhWalpTQjBhR2x6SUVSMWNtRjBhVzl1SUhSdklHbDBjeUJqWVc1dmJtbGpZV3dnY21Wd2NtVnpaVzUwWVhScGIyNGdhVzRnYVhSeklHTjFjbkpsYm5RZ2RXNXBkSE11WEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVIxY21GMGFXOXVMbVp5YjIxUFltcGxZM1FvZXlCNVpXRnljem9nTWl3Z1pHRjVjem9nTlRBd01DQjlLUzV1YjNKdFlXeHBlbVVvS1M1MGIwOWlhbVZqZENncElDOHZQVDRnZXlCNVpXRnljem9nTVRVc0lHUmhlWE02SURJMU5TQjlYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUJvYjNWeWN6b2dNVElzSUcxcGJuVjBaWE02SUMwME5TQjlLUzV1YjNKdFlXeHBlbVVvS1M1MGIwOWlhbVZqZENncElDOHZQVDRnZXlCb2IzVnljem9nTVRFc0lHMXBiblYwWlhNNklERTFJSDFjYmlBZ0lDb2dRSEpsZEhWeWJpQjdSSFZ5WVhScGIyNTlYRzRnSUNBcUwxeHVJQ0J1YjNKdFlXeHBlbVVvS1NCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1selZtRnNhV1FwSUhKbGRIVnliaUIwYUdsek8xeHVJQ0FnSUdOdmJuTjBJSFpoYkhNZ1BTQjBhR2x6TG5SdlQySnFaV04wS0NrN1hHNGdJQ0FnYm05eWJXRnNhWHBsVm1Gc2RXVnpLSFJvYVhNdWJXRjBjbWw0TENCMllXeHpLVHRjYmlBZ0lDQnlaWFIxY200Z1kyeHZibVVvZEdocGN5d2dleUIyWVd4MVpYTTZJSFpoYkhNZ2ZTd2dkSEoxWlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1ZG1WeWRDQjBhR2x6SUVSMWNtRjBhVzl1SUdsdWRHOGdhWFJ6SUhKbGNISmxjMlZ1ZEdGMGFXOXVJR2x1SUdFZ1pHbG1abVZ5Wlc1MElITmxkQ0J2WmlCMWJtbDBjeTVjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSSFZ5WVhScGIyNHVabkp2YlU5aWFtVmpkQ2g3SUdodmRYSnpPaUF4TENCelpXTnZibVJ6T2lBek1DQjlLUzV6YUdsbWRGUnZLQ2R0YVc1MWRHVnpKeXdnSjIxcGJHeHBjMlZqYjI1a2N5Y3BMblJ2VDJKcVpXTjBLQ2tnTHk4OVBpQjdJRzFwYm5WMFpYTTZJRFl3TENCdGFXeHNhWE5sWTI5dVpITTZJRE13TURBd0lIMWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1JIVnlZWFJwYjI1OVhHNGdJQ0FxTDF4dUlDQnphR2xtZEZSdktDNHVMblZ1YVhSektTQjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtbHpWbUZzYVdRcElISmxkSFZ5YmlCMGFHbHpPMXh1WEc0Z0lDQWdhV1lnS0hWdWFYUnpMbXhsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RXNXBkSE1nUFNCMWJtbDBjeTV0WVhBb0tIVXBJRDArSUVSMWNtRjBhVzl1TG01dmNtMWhiR2w2WlZWdWFYUW9kU2twTzF4dVhHNGdJQ0FnWTI5dWMzUWdZblZwYkhRZ1BTQjdmU3hjYmlBZ0lDQWdJR0ZqWTNWdGRXeGhkR1ZrSUQwZ2UzMHNYRzRnSUNBZ0lDQjJZV3h6SUQwZ2RHaHBjeTUwYjA5aWFtVmpkQ2dwTzF4dUlDQWdJR3hsZENCc1lYTjBWVzVwZER0Y2JseHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2F5QnZaaUJ2Y21SbGNtVmtWVzVwZEhNcElIdGNiaUFnSUNBZ0lHbG1JQ2gxYm1sMGN5NXBibVJsZUU5bUtHc3BJRDQ5SURBcElIdGNiaUFnSUNBZ0lDQWdiR0Z6ZEZWdWFYUWdQU0JyTzF4dVhHNGdJQ0FnSUNBZ0lHeGxkQ0J2ZDI0Z1BTQXdPMXh1WEc0Z0lDQWdJQ0FnSUM4dklHRnVlWFJvYVc1bklIZGxJR2hoZG1WdUozUWdZbTlwYkdWa0lHUnZkMjRnZVdWMElITm9iM1ZzWkNCblpYUWdZbTlwYkdWa0lIUnZJSFJvYVhNZ2RXNXBkRnh1SUNBZ0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUdGcklHbHVJR0ZqWTNWdGRXeGhkR1ZrS1NCN1hHNGdJQ0FnSUNBZ0lDQWdiM2R1SUNzOUlIUm9hWE11YldGMGNtbDRXMkZyWFZ0clhTQXFJR0ZqWTNWdGRXeGhkR1ZrVzJGclhUdGNiaUFnSUNBZ0lDQWdJQ0JoWTJOMWJYVnNZWFJsWkZ0aGExMGdQU0F3TzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdMeThnY0d4MWN5QmhibmwwYUdsdVp5QjBhR0YwSjNNZ1lXeHlaV0ZrZVNCcGJpQjBhR2x6SUhWdWFYUmNiaUFnSUNBZ0lDQWdhV1lnS0dselRuVnRZbVZ5S0haaGJITmJhMTBwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdiM2R1SUNzOUlIWmhiSE5iYTEwN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBJRDBnVFdGMGFDNTBjblZ1WXlodmQyNHBPMXh1SUNBZ0lDQWdJQ0JpZFdsc2RGdHJYU0E5SUdrN1hHNGdJQ0FnSUNBZ0lHRmpZM1Z0ZFd4aGRHVmtXMnRkSUQwZ0tHOTNiaUFxSURFd01EQWdMU0JwSUNvZ01UQXdNQ2tnTHlBeE1EQXdPMXh1WEc0Z0lDQWdJQ0FnSUM4dklIQnNkWE1nWVc1NWRHaHBibWNnWm5WeWRHaGxjaUJrYjNkdUlIUm9aU0JqYUdGcGJpQjBhR0YwSUhOb2IzVnNaQ0JpWlNCeWIyeHNaV1FnZFhBZ2FXNGdkRzhnZEdocGMxeHVJQ0FnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJR1J2ZDI0Z2FXNGdkbUZzY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNodmNtUmxjbVZrVlc1cGRITXVhVzVrWlhoUFppaGtiM2R1S1NBK0lHOXlaR1Z5WldSVmJtbDBjeTVwYm1SbGVFOW1LR3NwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MlpYSjBLSFJvYVhNdWJXRjBjbWw0TENCMllXeHpMQ0JrYjNkdUxDQmlkV2xzZEN3Z2F5azdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZJRzkwYUdWeWQybHpaU3dnYTJWbGNDQnBkQ0JwYmlCMGFHVWdkMmx1WjNNZ2RHOGdZbTlwYkNCcGRDQnNZWFJsY2x4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNocGMwNTFiV0psY2loMllXeHpXMnRkS1NrZ2UxeHVJQ0FnSUNBZ0lDQmhZMk4xYlhWc1lYUmxaRnRyWFNBOUlIWmhiSE5iYTEwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1lXNTVkR2hwYm1jZ2JHVm1kRzkyWlhJZ1ltVmpiMjFsY3lCMGFHVWdaR1ZqYVcxaGJDQm1iM0lnZEdobElHeGhjM1FnZFc1cGRGeHVJQ0FnSUM4dklHeGhjM1JWYm1sMElHMTFjM1FnWW1VZ1pHVm1hVzVsWkNCemFXNWpaU0IxYm1sMGN5QnBjeUJ1YjNRZ1pXMXdkSGxjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJR3RsZVNCcGJpQmhZMk4xYlhWc1lYUmxaQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tHRmpZM1Z0ZFd4aGRHVmtXMnRsZVYwZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ1luVnBiSFJiYkdGemRGVnVhWFJkSUNzOVhHNGdJQ0FnSUNBZ0lDQWdhMlY1SUQwOVBTQnNZWE4wVlc1cGRDQS9JR0ZqWTNWdGRXeGhkR1ZrVzJ0bGVWMGdPaUJoWTJOMWJYVnNZWFJsWkZ0clpYbGRJQzhnZEdocGN5NXRZWFJ5YVhoYmJHRnpkRlZ1YVhSZFcydGxlVjA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHTnNiMjVsS0hSb2FYTXNJSHNnZG1Gc2RXVnpPaUJpZFdsc2RDQjlMQ0IwY25WbEtTNXViM0p0WVd4cGVtVW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTRnZEdobElHNWxaMkYwYVhabElHOW1JSFJvYVhNZ1JIVnlZWFJwYjI0dVhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSMWNtRjBhVzl1TG1aeWIyMVBZbXBsWTNRb2V5Qm9iM1Z5Y3pvZ01Td2djMlZqYjI1a2N6b2dNekFnZlNrdWJtVm5ZWFJsS0NrdWRHOVBZbXBsWTNRb0tTQXZMejArSUhzZ2FHOTFjbk02SUMweExDQnpaV052Ym1Sek9pQXRNekFnZlZ4dUlDQWdLaUJBY21WMGRYSnVJSHRFZFhKaGRHbHZibjFjYmlBZ0lDb3ZYRzRnSUc1bFoyRjBaU2dwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YVhOV1lXeHBaQ2tnY21WMGRYSnVJSFJvYVhNN1hHNGdJQ0FnWTI5dWMzUWdibVZuWVhSbFpDQTlJSHQ5TzF4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnYXlCdlppQlBZbXBsWTNRdWEyVjVjeWgwYUdsekxuWmhiSFZsY3lrcElIdGNiaUFnSUNBZ0lHNWxaMkYwWldSYmExMGdQU0IwYUdsekxuWmhiSFZsYzF0clhTQTlQVDBnTUNBL0lEQWdPaUF0ZEdocGN5NTJZV3gxWlhOYmExMDdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJqYkc5dVpTaDBhR2x6TENCN0lIWmhiSFZsY3pvZ2JtVm5ZWFJsWkNCOUxDQjBjblZsS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElIbGxZWEp6TGx4dUlDQWdLaUJBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0FnS2k5Y2JpQWdaMlYwSUhsbFlYSnpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1selZtRnNhV1FnUHlCMGFHbHpMblpoYkhWbGN5NTVaV0Z5Y3lCOGZDQXdJRG9nVG1GT08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdjWFZoY25SbGNuTXVYRzRnSUNBcUlFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCblpYUWdjWFZoY25SbGNuTW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVhOV1lXeHBaQ0EvSUhSb2FYTXVkbUZzZFdWekxuRjFZWEowWlhKeklIeDhJREFnT2lCT1lVNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJWMElIUm9aU0J0YjI1MGFITXVYRzRnSUNBcUlFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCblpYUWdiVzl1ZEdoektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxuWmhiSFZsY3k1dGIyNTBhSE1nZkh3Z01DQTZJRTVoVGp0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElIZGxaV3R6WEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQm5aWFFnZDJWbGEzTW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVhOV1lXeHBaQ0EvSUhSb2FYTXVkbUZzZFdWekxuZGxaV3R6SUh4OElEQWdPaUJPWVU0N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUhSb1pTQmtZWGx6TGx4dUlDQWdLaUJBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0FnS2k5Y2JpQWdaMlYwSUdSaGVYTW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVhOV1lXeHBaQ0EvSUhSb2FYTXVkbUZzZFdWekxtUmhlWE1nZkh3Z01DQTZJRTVoVGp0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElHaHZkWEp6TGx4dUlDQWdLaUJBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0FnS2k5Y2JpQWdaMlYwSUdodmRYSnpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1selZtRnNhV1FnUHlCMGFHbHpMblpoYkhWbGN5NW9iM1Z5Y3lCOGZDQXdJRG9nVG1GT08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdiV2x1ZFhSbGN5NWNiaUFnSUNvZ1FIUjVjR1VnZTI1MWJXSmxjbjFjYmlBZ0lDb3ZYRzRnSUdkbGRDQnRhVzUxZEdWektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxuWmhiSFZsY3k1dGFXNTFkR1Z6SUh4OElEQWdPaUJPWVU0N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUhSb1pTQnpaV052Ym1SekxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCblpYUWdjMlZqYjI1a2N5Z3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVwYzFaaGJHbGtJRDhnZEdocGN5NTJZV3gxWlhNdWMyVmpiMjVrY3lCOGZDQXdJRG9nVG1GT08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdiV2xzYkdselpXTnZibVJ6TGx4dUlDQWdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlYRzRnSUNBcUwxeHVJQ0JuWlhRZ2JXbHNiR2x6WldOdmJtUnpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1selZtRnNhV1FnUHlCMGFHbHpMblpoYkhWbGN5NXRhV3hzYVhObFkyOXVaSE1nZkh3Z01DQTZJRTVoVGp0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaGxJRVIxY21GMGFXOXVJR2x6SUdsdWRtRnNhV1F1SUVsdWRtRnNhV1FnWkhWeVlYUnBiMjV6SUdGeVpTQnlaWFIxY201bFpDQmllU0JrYVdabUlHOXdaWEpoZEdsdmJuTmNiaUFnSUNvZ2IyNGdhVzUyWVd4cFpDQkVZWFJsVkdsdFpYTWdiM0lnU1c1MFpYSjJZV3h6TGx4dUlDQWdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNBZ0tpOWNiaUFnWjJWMElHbHpWbUZzYVdRb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhVzUyWVd4cFpDQTlQVDBnYm5Wc2JEdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJR0Z1SUdWeWNtOXlJR052WkdVZ2FXWWdkR2hwY3lCRWRYSmhkR2x2YmlCaVpXTmhiV1VnYVc1MllXeHBaQ3dnYjNJZ2JuVnNiQ0JwWmlCMGFHVWdSSFZ5WVhScGIyNGdhWE1nZG1Gc2FXUmNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDQWdLaTljYmlBZ1oyVjBJR2x1ZG1Gc2FXUlNaV0Z6YjI0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhVzUyWVd4cFpDQS9JSFJvYVhNdWFXNTJZV3hwWkM1eVpXRnpiMjRnT2lCdWRXeHNPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nWVc0Z1pYaHdiR0Z1WVhScGIyNGdiMllnZDJoNUlIUm9hWE1nUkhWeVlYUnBiMjRnWW1WallXMWxJR2x1ZG1Gc2FXUXNJRzl5SUc1MWJHd2dhV1lnZEdobElFUjFjbUYwYVc5dUlHbHpJSFpoYkdsa1hHNGdJQ0FxSUVCMGVYQmxJSHR6ZEhKcGJtZDlYRzRnSUNBcUwxeHVJQ0JuWlhRZ2FXNTJZV3hwWkVWNGNHeGhibUYwYVc5dUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx1ZG1Gc2FXUWdQeUIwYUdsekxtbHVkbUZzYVdRdVpYaHdiR0Z1WVhScGIyNGdPaUJ1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVZ4ZFdGc2FYUjVJR05vWldOclhHNGdJQ0FxSUZSM2J5QkVkWEpoZEdsdmJuTWdZWEpsSUdWeGRXRnNJR2xtWmlCMGFHVjVJR2hoZG1VZ2RHaGxJSE5oYldVZ2RXNXBkSE1nWVc1a0lIUm9aU0J6WVcxbElIWmhiSFZsY3lCbWIzSWdaV0ZqYUNCMWJtbDBMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUjFjbUYwYVc5dWZTQnZkR2hsY2x4dUlDQWdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNBZ0tpOWNiaUFnWlhGMVlXeHpLRzkwYUdWeUtTQjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtbHpWbUZzYVdRZ2ZId2dJVzkwYUdWeUxtbHpWbUZzYVdRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvSVhSb2FYTXViRzlqTG1WeGRXRnNjeWh2ZEdobGNpNXNiMk1wS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z1pYRW9kakVzSUhZeUtTQjdYRzRnSUNBZ0lDQXZMeUJEYjI1emFXUmxjaUF3SUdGdVpDQjFibVJsWm1sdVpXUWdZWE1nWlhGMVlXeGNiaUFnSUNBZ0lHbG1JQ2gyTVNBOVBUMGdkVzVrWldacGJtVmtJSHg4SUhZeElEMDlQU0F3S1NCeVpYUjFjbTRnZGpJZ1BUMDlJSFZ1WkdWbWFXNWxaQ0I4ZkNCMk1pQTlQVDBnTUR0Y2JpQWdJQ0FnSUhKbGRIVnliaUIyTVNBOVBUMGdkakk3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0IxSUc5bUlHOXlaR1Z5WldSVmJtbDBjeWtnZTF4dUlDQWdJQ0FnYVdZZ0tDRmxjU2gwYUdsekxuWmhiSFZsYzF0MVhTd2diM1JvWlhJdWRtRnNkV1Z6VzNWZEtTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQjlYRzU5WEc0aUxDQWlhVzF3YjNKMElFUmhkR1ZVYVcxbExDQjdJR1p5YVdWdVpHeDVSR0YwWlZScGJXVWdmU0JtY205dElGd2lMaTlrWVhSbGRHbHRaUzVxYzF3aU8xeHVhVzF3YjNKMElFUjFjbUYwYVc5dUlHWnliMjBnWENJdUwyUjFjbUYwYVc5dUxtcHpYQ0k3WEc1cGJYQnZjblFnVTJWMGRHbHVaM01nWm5KdmJTQmNJaTR2YzJWMGRHbHVaM011YW5OY0lqdGNibWx0Y0c5eWRDQjdJRWx1ZG1Gc2FXUkJjbWQxYldWdWRFVnljbTl5TENCSmJuWmhiR2xrU1c1MFpYSjJZV3hGY25KdmNpQjlJR1p5YjIwZ1hDSXVMMlZ5Y205eWN5NXFjMXdpTzF4dWFXMXdiM0owSUVsdWRtRnNhV1FnWm5KdmJTQmNJaTR2YVcxd2JDOXBiblpoYkdsa0xtcHpYQ0k3WEc1Y2JtTnZibk4wSUVsT1ZrRk1TVVFnUFNCY0lrbHVkbUZzYVdRZ1NXNTBaWEoyWVd4Y0lqdGNibHh1THk4Z1kyaGxZMnR6SUdsbUlIUm9aU0J6ZEdGeWRDQnBjeUJsY1hWaGJDQjBieUJ2Y2lCaVpXWnZjbVVnZEdobElHVnVaRnh1Wm5WdVkzUnBiMjRnZG1Gc2FXUmhkR1ZUZEdGeWRFVnVaQ2h6ZEdGeWRDd2daVzVrS1NCN1hHNGdJR2xtSUNnaGMzUmhjblFnZkh3Z0lYTjBZWEowTG1selZtRnNhV1FwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdTVzUwWlhKMllXd3VhVzUyWVd4cFpDaGNJbTFwYzNOcGJtY2diM0lnYVc1MllXeHBaQ0J6ZEdGeWRGd2lLVHRjYmlBZ2ZTQmxiSE5sSUdsbUlDZ2haVzVrSUh4OElDRmxibVF1YVhOV1lXeHBaQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQkpiblJsY25aaGJDNXBiblpoYkdsa0tGd2liV2x6YzJsdVp5QnZjaUJwYm5aaGJHbGtJR1Z1WkZ3aUtUdGNiaUFnZlNCbGJITmxJR2xtSUNobGJtUWdQQ0J6ZEdGeWRDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCSmJuUmxjblpoYkM1cGJuWmhiR2xrS0Z4dUlDQWdJQ0FnWENKbGJtUWdZbVZtYjNKbElITjBZWEowWENJc1hHNGdJQ0FnSUNCZ1ZHaGxJR1Z1WkNCdlppQmhiaUJwYm5SbGNuWmhiQ0J0ZFhOMElHSmxJR0ZtZEdWeUlHbDBjeUJ6ZEdGeWRDd2dZblYwSUhsdmRTQm9ZV1FnYzNSaGNuUTlKSHR6ZEdGeWRDNTBiMGxUVHlncGZTQmhibVFnWlc1a1BTUjdaVzVrTG5SdlNWTlBLQ2w5WUZ4dUlDQWdJQ2s3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkJiaUJKYm5SbGNuWmhiQ0J2WW1wbFkzUWdjbVZ3Y21WelpXNTBjeUJoSUdoaGJHWXRiM0JsYmlCcGJuUmxjblpoYkNCdlppQjBhVzFsTENCM2FHVnlaU0JsWVdOb0lHVnVaSEJ2YVc1MElHbHpJR0VnZTBCc2FXNXJJRVJoZEdWVWFXMWxmUzRnUTI5dVkyVndkSFZoYkd4NUxDQnBkQ2R6SUdFZ1kyOXVkR0ZwYm1WeUlHWnZjaUIwYUc5elpTQjBkMjhnWlc1a2NHOXBiblJ6TENCaFkyTnZiWEJoYm1sbFpDQmllU0J0WlhSb2IyUnpJR1p2Y2lCamNtVmhkR2x1Wnl3Z2NHRnljMmx1Wnl3Z2FXNTBaWEp5YjJkaGRHbHVaeXdnWTI5dGNHRnlhVzVuTENCMGNtRnVjMlp2Y20xcGJtY3NJR0Z1WkNCbWIzSnRZWFIwYVc1bklIUm9aVzB1WEc0Z0tseHVJQ29nU0dWeVpTQnBjeUJoSUdKeWFXVm1JRzkyWlhKMmFXVjNJRzltSUhSb1pTQnRiM04wSUdOdmJXMXZibXg1SUhWelpXUWdiV1YwYUc5a2N5QmhibVFnWjJWMGRHVnljeUJwYmlCSmJuUmxjblpoYkRwY2JpQXFYRzRnS2lBcUlDb3FRM0psWVhScGIyNHFLaUJVYnlCamNtVmhkR1VnWVc0Z1NXNTBaWEoyWVd3c0lIVnpaU0I3UUd4cGJtc2dTVzUwWlhKMllXd2pabkp2YlVSaGRHVlVhVzFsYzMwc0lIdEFiR2x1YXlCSmJuUmxjblpoYkNOaFpuUmxjbjBzSUh0QWJHbHVheUJKYm5SbGNuWmhiQ05pWldadmNtVjlMQ0J2Y2lCN1FHeHBibXNnU1c1MFpYSjJZV3dqWm5KdmJVbFRUMzB1WEc0Z0tpQXFJQ29xUVdOalpYTnpiM0p6S2lvZ1ZYTmxJSHRBYkdsdWF5QkpiblJsY25aaGJDTnpkR0Z5ZEgwZ1lXNWtJSHRBYkdsdWF5QkpiblJsY25aaGJDTmxibVI5SUhSdklHZGxkQ0IwYUdVZ2MzUmhjblFnWVc1a0lHVnVaQzVjYmlBcUlDb2dLaXBKYm5SbGNuSnZaMkYwYVc5dUtpb2dWRzhnWVc1aGJIbDZaU0IwYUdVZ1NXNTBaWEoyWVd3c0lIVnpaU0I3UUd4cGJtc2dTVzUwWlhKMllXd2pZMjkxYm5SOUxDQjdRR3hwYm1zZ1NXNTBaWEoyWVd3amJHVnVaM1JvZlN3Z2UwQnNhVzVySUVsdWRHVnlkbUZzSTJoaGMxTmhiV1Y5TENCN1FHeHBibXNnU1c1MFpYSjJZV3dqWTI5dWRHRnBibk45TENCN1FHeHBibXNnU1c1MFpYSjJZV3dqYVhOQlpuUmxjbjBzSUc5eUlIdEFiR2x1YXlCSmJuUmxjblpoYkNOcGMwSmxabTl5WlgwdVhHNGdLaUFxSUNvcVZISmhibk5tYjNKdFlYUnBiMjRxS2lCVWJ5QmpjbVZoZEdVZ2IzUm9aWElnU1c1MFpYSjJZV3h6SUc5MWRDQnZaaUIwYUdseklHOXVaU3dnZFhObElIdEFiR2x1YXlCSmJuUmxjblpoYkNOelpYUjlMQ0I3UUd4cGJtc2dTVzUwWlhKMllXd2pjM0JzYVhSQmRIMHNJSHRBYkdsdWF5QkpiblJsY25aaGJDTnpjR3hwZEVKNWZTd2dlMEJzYVc1cklFbHVkR1Z5ZG1Gc0kyUnBkbWxrWlVWeGRXRnNiSGw5TENCN1FHeHBibXNnU1c1MFpYSjJZV3dqYldWeVoyVjlMQ0I3UUd4cGJtc2dTVzUwWlhKMllXd2plRzl5ZlN3Z2UwQnNhVzVySUVsdWRHVnlkbUZzSTNWdWFXOXVmU3dnZTBCc2FXNXJJRWx1ZEdWeWRtRnNJMmx1ZEdWeWMyVmpkR2x2Ym4wc0lHOXlJSHRBYkdsdWF5QkpiblJsY25aaGJDTmthV1ptWlhKbGJtTmxmUzVjYmlBcUlDb2dLaXBEYjIxd1lYSnBjMjl1S2lvZ1ZHOGdZMjl0Y0dGeVpTQjBhR2x6SUVsdWRHVnlkbUZzSUhSdklHRnViM1JvWlhJZ2IyNWxMQ0IxYzJVZ2UwQnNhVzVySUVsdWRHVnlkbUZzSTJWeGRXRnNjMzBzSUh0QWJHbHVheUJKYm5SbGNuWmhiQ052ZG1WeWJHRndjMzBzSUh0QWJHbHVheUJKYm5SbGNuWmhiQ05oWW5WMGMxTjBZWEowZlN3Z2UwQnNhVzVySUVsdWRHVnlkbUZzSTJGaWRYUnpSVzVrZlN3Z2UwQnNhVzVySUVsdWRHVnlkbUZzSTJWdVozVnNabk45WEc0Z0tpQXFJQ29xVDNWMGNIVjBLaW9nVkc4Z1kyOXVkbVZ5ZENCMGFHVWdTVzUwWlhKMllXd2dhVzUwYnlCdmRHaGxjaUJ5WlhCeVpYTmxiblJoZEdsdmJuTXNJSE5sWlNCN1FHeHBibXNnU1c1MFpYSjJZV3dqZEc5VGRISnBibWQ5TENCN1FHeHBibXNnU1c1MFpYSjJZV3dqZEc5SlUwOTlMQ0I3UUd4cGJtc2dTVzUwWlhKMllXd2pkRzlKVTA5RVlYUmxmU3dnZTBCc2FXNXJJRWx1ZEdWeWRtRnNJM1J2U1ZOUFZHbHRaWDBzSUh0QWJHbHVheUJKYm5SbGNuWmhiQ04wYjBadmNtMWhkSDBzSUdGdVpDQjdRR3hwYm1zZ1NXNTBaWEoyWVd3amRHOUVkWEpoZEdsdmJuMHVYRzRnS2k5Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRWx1ZEdWeWRtRnNJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQmpiMjV6ZEhKMVkzUnZjaWhqYjI1bWFXY3BJSHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJBWVdOalpYTnpJSEJ5YVhaaGRHVmNiaUFnSUNBZ0tpOWNiaUFnSUNCMGFHbHpMbk1nUFNCamIyNW1hV2N1YzNSaGNuUTdYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dRR0ZqWTJWemN5QndjbWwyWVhSbFhHNGdJQ0FnSUNvdlhHNGdJQ0FnZEdocGN5NWxJRDBnWTI5dVptbG5MbVZ1WkR0Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCQVlXTmpaWE56SUhCeWFYWmhkR1ZjYmlBZ0lDQWdLaTljYmlBZ0lDQjBhR2x6TG1sdWRtRnNhV1FnUFNCamIyNW1hV2N1YVc1MllXeHBaQ0I4ZkNCdWRXeHNPMXh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRUJoWTJObGMzTWdjSEpwZG1GMFpWeHVJQ0FnSUNBcUwxeHVJQ0FnSUhSb2FYTXVhWE5NZFhodmJrbHVkR1Z5ZG1Gc0lEMGdkSEoxWlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdVZ1lXNGdhVzUyWVd4cFpDQkpiblJsY25aaGJDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhKbFlYTnZiaUF0SUhOcGJYQnNaU0J6ZEhKcGJtY2diMllnZDJoNUlIUm9hWE1nU1c1MFpYSjJZV3dnYVhNZ2FXNTJZV3hwWkM0Z1UyaHZkV3hrSUc1dmRDQmpiMjUwWVdsdUlIQmhjbUZ0WlhSbGNuTWdiM0lnWVc1NWRHaHBibWNnWld4elpTQmtZWFJoTFdSbGNHVnVaR1Z1ZEZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMlY0Y0d4aGJtRjBhVzl1UFc1MWJHeGRJQzBnYkc5dVoyVnlJR1Y0Y0d4aGJtRjBhVzl1TENCdFlYa2dhVzVqYkhWa1pTQndZWEpoYldWMFpYSnpJR0Z1WkNCdmRHaGxjaUIxYzJWbWRXd2daR1ZpZFdkbmFXNW5JR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMGx1ZEdWeWRtRnNmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJR2x1ZG1Gc2FXUW9jbVZoYzI5dUxDQmxlSEJzWVc1aGRHbHZiaUE5SUc1MWJHd3BJSHRjYmlBZ0lDQnBaaUFvSVhKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVsdWRtRnNhV1JCY21kMWJXVnVkRVZ5Y205eUtGd2libVZsWkNCMGJ5QnpjR1ZqYVdaNUlHRWdjbVZoYzI5dUlIUm9aU0JKYm5SbGNuWmhiQ0JwY3lCcGJuWmhiR2xrWENJcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJR2x1ZG1Gc2FXUWdQU0J5WldGemIyNGdhVzV6ZEdGdVkyVnZaaUJKYm5aaGJHbGtJRDhnY21WaGMyOXVJRG9nYm1WM0lFbHVkbUZzYVdRb2NtVmhjMjl1TENCbGVIQnNZVzVoZEdsdmJpazdYRzVjYmlBZ0lDQnBaaUFvVTJWMGRHbHVaM011ZEdoeWIzZFBia2x1ZG1Gc2FXUXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJKYm5aaGJHbGtTVzUwWlhKMllXeEZjbkp2Y2locGJuWmhiR2xrS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJKYm5SbGNuWmhiQ2g3SUdsdWRtRnNhV1FnZlNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTnlaV0YwWlNCaGJpQkpiblJsY25aaGJDQm1jbTl0SUdFZ2MzUmhjblFnUkdGMFpWUnBiV1VnWVc1a0lHRnVJR1Z1WkNCRVlYUmxWR2x0WlM0Z1NXNWpiSFZ6YVhabElHOW1JSFJvWlNCemRHRnlkQ0JpZFhRZ2JtOTBJSFJvWlNCbGJtUXVYRzRnSUNBcUlFQndZWEpoYlNCN1JHRjBaVlJwYldWOFJHRjBaWHhQWW1wbFkzUjlJSE4wWVhKMFhHNGdJQ0FxSUVCd1lYSmhiU0I3UkdGMFpWUnBiV1Y4UkdGMFpYeFBZbXBsWTNSOUlHVnVaRnh1SUNBZ0tpQkFjbVYwZFhKdUlIdEpiblJsY25aaGJIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5Qm1jbTl0UkdGMFpWUnBiV1Z6S0hOMFlYSjBMQ0JsYm1RcElIdGNiaUFnSUNCamIyNXpkQ0JpZFdsc2RGTjBZWEowSUQwZ1puSnBaVzVrYkhsRVlYUmxWR2x0WlNoemRHRnlkQ2tzWEc0Z0lDQWdJQ0JpZFdsc2RFVnVaQ0E5SUdaeWFXVnVaR3g1UkdGMFpWUnBiV1VvWlc1a0tUdGNibHh1SUNBZ0lHTnZibk4wSUhaaGJHbGtZWFJsUlhKeWIzSWdQU0IyWVd4cFpHRjBaVk4wWVhKMFJXNWtLR0oxYVd4MFUzUmhjblFzSUdKMWFXeDBSVzVrS1R0Y2JseHVJQ0FnSUdsbUlDaDJZV3hwWkdGMFpVVnljbTl5SUQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1NXNTBaWEoyWVd3b2UxeHVJQ0FnSUNBZ0lDQnpkR0Z5ZERvZ1luVnBiSFJUZEdGeWRDeGNiaUFnSUNBZ0lDQWdaVzVrT2lCaWRXbHNkRVZ1WkN4Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkbUZzYVdSaGRHVkZjbkp2Y2p0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsSUdGdUlFbHVkR1Z5ZG1Gc0lHWnliMjBnWVNCemRHRnlkQ0JFWVhSbFZHbHRaU0JoYm1RZ1lTQkVkWEpoZEdsdmJpQjBieUJsZUhSbGJtUWdkRzh1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdSR0YwWlZScGJXVjhSR0YwWlh4UFltcGxZM1I5SUhOMFlYSjBYRzRnSUNBcUlFQndZWEpoYlNCN1JIVnlZWFJwYjI1OFQySnFaV04wZkc1MWJXSmxjbjBnWkhWeVlYUnBiMjRnTFNCMGFHVWdiR1Z1WjNSb0lHOW1JSFJvWlNCSmJuUmxjblpoYkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3U1c1MFpYSjJZV3g5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWVdaMFpYSW9jM1JoY25Rc0lHUjFjbUYwYVc5dUtTQjdYRzRnSUNBZ1kyOXVjM1FnWkhWeUlEMGdSSFZ5WVhScGIyNHVabkp2YlVSMWNtRjBhVzl1VEdsclpTaGtkWEpoZEdsdmJpa3NYRzRnSUNBZ0lDQmtkQ0E5SUdaeWFXVnVaR3g1UkdGMFpWUnBiV1VvYzNSaGNuUXBPMXh1SUNBZ0lISmxkSFZ5YmlCSmJuUmxjblpoYkM1bWNtOXRSR0YwWlZScGJXVnpLR1IwTENCa2RDNXdiSFZ6S0dSMWNpa3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOeVpXRjBaU0JoYmlCSmJuUmxjblpoYkNCbWNtOXRJR0Z1SUdWdVpDQkVZWFJsVkdsdFpTQmhibVFnWVNCRWRYSmhkR2x2YmlCMGJ5QmxlSFJsYm1RZ1ltRmphM2RoY21SeklIUnZMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUmhkR1ZVYVcxbGZFUmhkR1Y4VDJKcVpXTjBmU0JsYm1SY2JpQWdJQ29nUUhCaGNtRnRJSHRFZFhKaGRHbHZibnhQWW1wbFkzUjhiblZ0WW1WeWZTQmtkWEpoZEdsdmJpQXRJSFJvWlNCc1pXNW5kR2dnYjJZZ2RHaGxJRWx1ZEdWeWRtRnNMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdEpiblJsY25aaGJIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QmlaV1p2Y21Vb1pXNWtMQ0JrZFhKaGRHbHZiaWtnZTF4dUlDQWdJR052Ym5OMElHUjFjaUE5SUVSMWNtRjBhVzl1TG1aeWIyMUVkWEpoZEdsdmJreHBhMlVvWkhWeVlYUnBiMjRwTEZ4dUlDQWdJQ0FnWkhRZ1BTQm1jbWxsYm1Sc2VVUmhkR1ZVYVcxbEtHVnVaQ2s3WEc0Z0lDQWdjbVYwZFhKdUlFbHVkR1Z5ZG1Gc0xtWnliMjFFWVhSbFZHbHRaWE1vWkhRdWJXbHVkWE1vWkhWeUtTd2daSFFwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTnlaV0YwWlNCaGJpQkpiblJsY25aaGJDQm1jbTl0SUdGdUlFbFRUeUE0TmpBeElITjBjbWx1Wnk1Y2JpQWdJQ29nUVdOalpYQjBjeUJnUEhOMFlYSjBQaTg4Wlc1a1BtQXNJR0E4YzNSaGNuUStMenhrZFhKaGRHbHZiajVnTENCaGJtUWdZRHhrZFhKaGRHbHZiajR2UEdWdVpENWdJR1p2Y20xaGRITXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFpYaDBJQzBnZEdobElFbFRUeUJ6ZEhKcGJtY2dkRzhnY0dGeWMyVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0UFltcGxZM1I5SUZ0dmNIUnpYU0F0SUc5d2RHbHZibk1nZEc4Z2NHRnpjeUI3UUd4cGJtc2dSR0YwWlZScGJXVWpabkp2YlVsVFQzMGdZVzVrSUc5d2RHbHZibUZzYkhrZ2UwQnNhVzVySUVSMWNtRjBhVzl1STJaeWIyMUpVMDk5WEc0Z0lDQXFJRUJ6WldVZ2FIUjBjSE02THk5bGJpNTNhV3RwY0dWa2FXRXViM0puTDNkcGEya3ZTVk5QWHpnMk1ERWpWR2x0WlY5cGJuUmxjblpoYkhOY2JpQWdJQ29nUUhKbGRIVnliaUI3U1c1MFpYSjJZV3g5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWm5KdmJVbFRUeWgwWlhoMExDQnZjSFJ6S1NCN1hHNGdJQ0FnWTI5dWMzUWdXM01zSUdWZElEMGdLSFJsZUhRZ2ZId2dYQ0pjSWlrdWMzQnNhWFFvWENJdlhDSXNJRElwTzF4dUlDQWdJR2xtSUNoeklDWW1JR1VwSUh0Y2JpQWdJQ0FnSUd4bGRDQnpkR0Z5ZEN3Z2MzUmhjblJKYzFaaGJHbGtPMXh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ2MzUmhjblFnUFNCRVlYUmxWR2x0WlM1bWNtOXRTVk5QS0hNc0lHOXdkSE1wTzF4dUlDQWdJQ0FnSUNCemRHRnlkRWx6Vm1Gc2FXUWdQU0J6ZEdGeWRDNXBjMVpoYkdsa08xeHVJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0J6ZEdGeWRFbHpWbUZzYVdRZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2JHVjBJR1Z1WkN3Z1pXNWtTWE5XWVd4cFpEdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUdWdVpDQTlJRVJoZEdWVWFXMWxMbVp5YjIxSlUwOG9aU3dnYjNCMGN5azdYRzRnSUNBZ0lDQWdJR1Z1WkVselZtRnNhV1FnUFNCbGJtUXVhWE5XWVd4cFpEdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnWlc1a1NYTldZV3hwWkNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCcFppQW9jM1JoY25SSmMxWmhiR2xrSUNZbUlHVnVaRWx6Vm1Gc2FXUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRWx1ZEdWeWRtRnNMbVp5YjIxRVlYUmxWR2x0WlhNb2MzUmhjblFzSUdWdVpDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR2xtSUNoemRHRnlkRWx6Vm1Gc2FXUXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaSFZ5SUQwZ1JIVnlZWFJwYjI0dVpuSnZiVWxUVHlobExDQnZjSFJ6S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1IxY2k1cGMxWmhiR2xrS1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFbHVkR1Z5ZG1Gc0xtRm1kR1Z5S0hOMFlYSjBMQ0JrZFhJcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR1Z1WkVselZtRnNhV1FwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWkhWeUlEMGdSSFZ5WVhScGIyNHVabkp2YlVsVFR5aHpMQ0J2Y0hSektUdGNiaUFnSUNBZ0lDQWdhV1lnS0dSMWNpNXBjMVpoYkdsa0tTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRWx1ZEdWeWRtRnNMbUpsWm05eVpTaGxibVFzSUdSMWNpazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUVsdWRHVnlkbUZzTG1sdWRtRnNhV1FvWENKMWJuQmhjbk5oWW14bFhDSXNJR0IwYUdVZ2FXNXdkWFFnWENJa2UzUmxlSFI5WENJZ1kyRnVKM1FnWW1VZ2NHRnljMlZrSUdGeklFbFRUeUE0TmpBeFlDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTJobFkyc2dhV1lnWVc0Z2IySnFaV04wSUdseklHRnVJRWx1ZEdWeWRtRnNMaUJYYjNKcmN5QmhZM0p2YzNNZ1kyOXVkR1Y0ZENCaWIzVnVaR0Z5YVdWelhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J2WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdhWE5KYm5SbGNuWmhiQ2h2S1NCN1hHNGdJQ0FnY21WMGRYSnVJQ2h2SUNZbUlHOHVhWE5NZFhodmJrbHVkR1Z5ZG1Gc0tTQjhmQ0JtWVd4elpUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJSFJvWlNCemRHRnlkQ0J2WmlCMGFHVWdTVzUwWlhKMllXeGNiaUFnSUNvZ1FIUjVjR1VnZTBSaGRHVlVhVzFsZlZ4dUlDQWdLaTljYmlBZ1oyVjBJSE4wWVhKMEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxuTWdPaUJ1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdkR2hsSUdWdVpDQnZaaUIwYUdVZ1NXNTBaWEoyWVd4Y2JpQWdJQ29nUUhSNWNHVWdlMFJoZEdWVWFXMWxmVnh1SUNBZ0tpOWNiaUFnWjJWMElHVnVaQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1cGMxWmhiR2xrSUQ4Z2RHaHBjeTVsSURvZ2JuVnNiRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUhkb1pYUm9aWElnZEdocGN5QkpiblJsY25aaGJDZHpJR1Z1WkNCcGN5QmhkQ0JzWldGemRDQnBkSE1nYzNSaGNuUXNJRzFsWVc1cGJtY2dkR2hoZENCMGFHVWdTVzUwWlhKMllXd2dhWE51SjNRZ0oySmhZMnQzWVhKa2N5Y3VYRzRnSUNBcUlFQjBlWEJsSUh0aWIyOXNaV0Z1ZlZ4dUlDQWdLaTljYmlBZ1oyVjBJR2x6Vm1Gc2FXUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVc1MllXeHBaRkpsWVhOdmJpQTlQVDBnYm5Wc2JEdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJR0Z1SUdWeWNtOXlJR052WkdVZ2FXWWdkR2hwY3lCSmJuUmxjblpoYkNCcGN5QnBiblpoYkdsa0xDQnZjaUJ1ZFd4c0lHbG1JSFJvWlNCSmJuUmxjblpoYkNCcGN5QjJZV3hwWkZ4dUlDQWdLaUJBZEhsd1pTQjdjM1J5YVc1bmZWeHVJQ0FnS2k5Y2JpQWdaMlYwSUdsdWRtRnNhV1JTWldGemIyNG9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVc1MllXeHBaQ0EvSUhSb2FYTXVhVzUyWVd4cFpDNXlaV0Z6YjI0Z09pQnVkV3hzTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1lXNGdaWGh3YkdGdVlYUnBiMjRnYjJZZ2QyaDVJSFJvYVhNZ1NXNTBaWEoyWVd3Z1ltVmpZVzFsSUdsdWRtRnNhV1FzSUc5eUlHNTFiR3dnYVdZZ2RHaGxJRWx1ZEdWeWRtRnNJR2x6SUhaaGJHbGtYRzRnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCblpYUWdhVzUyWVd4cFpFVjRjR3hoYm1GMGFXOXVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1sdWRtRnNhV1FnUHlCMGFHbHpMbWx1ZG1Gc2FXUXVaWGh3YkdGdVlYUnBiMjRnT2lCdWRXeHNPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nZEdobElHeGxibWQwYUNCdlppQjBhR1VnU1c1MFpYSjJZV3dnYVc0Z2RHaGxJSE53WldOcFptbGxaQ0IxYm1sMExseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZFc1cGRDQXRJSFJvWlNCMWJtbDBJQ2h6ZFdOb0lHRnpJQ2RvYjNWeWN5Y2diM0lnSjJSaGVYTW5LU0IwYnlCeVpYUjFjbTRnZEdobElHeGxibWQwYUNCcGJpNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlZ4dUlDQWdLaTljYmlBZ2JHVnVaM1JvS0hWdWFYUWdQU0JjSW0xcGJHeHBjMlZqYjI1a2Mxd2lLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVhOV1lXeHBaQ0EvSUhSb2FYTXVkRzlFZFhKaGRHbHZiaWd1TGk1YmRXNXBkRjBwTG1kbGRDaDFibWwwS1NBNklFNWhUanRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUhSb1pTQmpiM1Z1ZENCdlppQnRhVzUxZEdWekxDQm9iM1Z5Y3l3Z1pHRjVjeXdnYlc5dWRHaHpMQ0J2Y2lCNVpXRnljeUJwYm1Oc2RXUmxaQ0JwYmlCMGFHVWdTVzUwWlhKMllXd3NJR1YyWlc0Z2FXNGdjR0Z5ZEM1Y2JpQWdJQ29nVlc1c2FXdGxJSHRBYkdsdWF5QkpiblJsY25aaGJDTnNaVzVuZEdoOUlIUm9hWE1nWTI5MWJuUnpJSE5sWTNScGIyNXpJRzltSUhSb1pTQmpZV3hsYm1SaGNpd2dibTkwSUhCbGNtbHZaSE1nYjJZZ2RHbHRaU3dnWlM1bkxpQnpjR1ZqYVdaNWFXNW5JQ2RrWVhrblhHNGdJQ0FxSUdGemEzTWdKM2RvWVhRZ1pHRjBaWE1nWVhKbElHbHVZMngxWkdWa0lHbHVJSFJvYVhNZ2FXNTBaWEoyWVd3L0p5d2dibTkwSUNkb2IzY2diV0Z1ZVNCa1lYbHpJR3h2Ym1jZ2FYTWdkR2hwY3lCcGJuUmxjblpoYkQ4blhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JiZFc1cGREMG5iV2xzYkdselpXTnZibVJ6SjEwZ0xTQjBhR1VnZFc1cGRDQnZaaUIwYVcxbElIUnZJR052ZFc1MExseHVJQ0FnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCamIzVnVkQ2gxYm1sMElEMGdYQ0p0YVd4c2FYTmxZMjl1WkhOY0lpa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXBjMVpoYkdsa0tTQnlaWFIxY200Z1RtRk9PMXh1SUNBZ0lHTnZibk4wSUhOMFlYSjBJRDBnZEdocGN5NXpkR0Z5ZEM1emRHRnlkRTltS0hWdWFYUXBMRnh1SUNBZ0lDQWdaVzVrSUQwZ2RHaHBjeTVsYm1RdWMzUmhjblJQWmloMWJtbDBLVHRjYmlBZ0lDQnlaWFIxY200Z1RXRjBhQzVtYkc5dmNpaGxibVF1WkdsbVppaHpkR0Z5ZEN3Z2RXNXBkQ2t1WjJWMEtIVnVhWFFwS1NBcklERTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVjeUIzYUdWMGFHVnlJSFJvYVhNZ1NXNTBaWEoyWVd3bmN5QnpkR0Z5ZENCaGJtUWdaVzVrSUdGeVpTQmliM1JvSUdsdUlIUm9aU0J6WVcxbElIVnVhWFFnYjJZZ2RHbHRaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RXNXBkQ0F0SUhSb1pTQjFibWwwSUc5bUlIUnBiV1VnZEc4Z1kyaGxZMnNnYzJGdFpXNWxjM01nYjI1Y2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBZ0lDb3ZYRzRnSUdoaGMxTmhiV1VvZFc1cGRDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxtbHpSVzF3ZEhrb0tTQjhmQ0IwYUdsekxtVXViV2x1ZFhNb01Ta3VhR0Z6VTJGdFpTaDBhR2x6TG5Nc0lIVnVhWFFwSURvZ1ptRnNjMlU3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1SUhkb1pYUm9aWElnZEdocGN5QkpiblJsY25aaGJDQm9ZWE1nZEdobElITmhiV1VnYzNSaGNuUWdZVzVrSUdWdVpDQkVZWFJsVkdsdFpYTXVYRzRnSUNBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdJQ0FxTDF4dUlDQnBjMFZ0Y0hSNUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbk11ZG1Gc2RXVlBaaWdwSUQwOVBTQjBhR2x6TG1VdWRtRnNkV1ZQWmlncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJpQjNhR1YwYUdWeUlIUm9hWE1nU1c1MFpYSjJZV3duY3lCemRHRnlkQ0JwY3lCaFpuUmxjaUIwYUdVZ2MzQmxZMmxtYVdWa0lFUmhkR1ZVYVcxbExseHVJQ0FnS2lCQWNHRnlZVzBnZTBSaGRHVlVhVzFsZlNCa1lYUmxWR2x0WlZ4dUlDQWdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmVnh1SUNBZ0tpOWNiaUFnYVhOQlpuUmxjaWhrWVhSbFZHbHRaU2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVwYzFaaGJHbGtLU0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWN5QStJR1JoZEdWVWFXMWxPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnliaUIzYUdWMGFHVnlJSFJvYVhNZ1NXNTBaWEoyWVd3bmN5QmxibVFnYVhNZ1ltVm1iM0psSUhSb1pTQnpjR1ZqYVdacFpXUWdSR0YwWlZScGJXVXVYRzRnSUNBcUlFQndZWEpoYlNCN1JHRjBaVlJwYldWOUlHUmhkR1ZVYVcxbFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0lDQXFMMXh1SUNCcGMwSmxabTl5WlNoa1lYUmxWR2x0WlNrZ2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1cGMxWmhiR2xrS1NCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaU0E4UFNCa1lYUmxWR2x0WlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY200Z2QyaGxkR2hsY2lCMGFHbHpJRWx1ZEdWeWRtRnNJR052Ym5SaGFXNXpJSFJvWlNCemNHVmphV1pwWldRZ1JHRjBaVlJwYldVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkdGMFpWUnBiV1Y5SUdSaGRHVlVhVzFsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnSUNBcUwxeHVJQ0JqYjI1MFlXbHVjeWhrWVhSbFZHbHRaU2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVwYzFaaGJHbGtLU0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWN5QThQU0JrWVhSbFZHbHRaU0FtSmlCMGFHbHpMbVVnUGlCa1lYUmxWR2x0WlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQmNJbE5sZEhOY0lpQjBhR1VnYzNSaGNuUWdZVzVrTDI5eUlHVnVaQ0JrWVhSbGN5NGdVbVYwZFhKdWN5QmhJRzVsZDJ4NUxXTnZibk4wY25WamRHVmtJRWx1ZEdWeWRtRnNMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2RtRnNkV1Z6SUMwZ2RHaGxJSFpoYkhWbGN5QjBieUJ6WlhSY2JpQWdJQ29nUUhCaGNtRnRJSHRFWVhSbFZHbHRaWDBnZG1Gc2RXVnpMbk4wWVhKMElDMGdkR2hsSUhOMFlYSjBhVzVuSUVSaGRHVlVhVzFsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdSR0YwWlZScGJXVjlJSFpoYkhWbGN5NWxibVFnTFNCMGFHVWdaVzVrYVc1bklFUmhkR1ZVYVcxbFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBsdWRHVnlkbUZzZlZ4dUlDQWdLaTljYmlBZ2MyVjBLSHNnYzNSaGNuUXNJR1Z1WkNCOUlEMGdlMzBwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YVhOV1lXeHBaQ2tnY21WMGRYSnVJSFJvYVhNN1hHNGdJQ0FnY21WMGRYSnVJRWx1ZEdWeWRtRnNMbVp5YjIxRVlYUmxWR2x0WlhNb2MzUmhjblFnZkh3Z2RHaHBjeTV6TENCbGJtUWdmSHdnZEdocGN5NWxLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCVGNHeHBkQ0IwYUdseklFbHVkR1Z5ZG1Gc0lHRjBJR1ZoWTJnZ2IyWWdkR2hsSUhOd1pXTnBabWxsWkNCRVlYUmxWR2x0WlhOY2JpQWdJQ29nUUhCaGNtRnRJSHN1TGk1RVlYUmxWR2x0WlgwZ1pHRjBaVlJwYldWeklDMGdkR2hsSUhWdWFYUWdiMllnZEdsdFpTQjBieUJqYjNWdWRDNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1FYSnlZWGw5WEc0Z0lDQXFMMXh1SUNCemNHeHBkRUYwS0M0dUxtUmhkR1ZVYVcxbGN5a2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXBjMVpoYkdsa0tTQnlaWFIxY200Z1cxMDdYRzRnSUNBZ1kyOXVjM1FnYzI5eWRHVmtJRDBnWkdGMFpWUnBiV1Z6WEc0Z0lDQWdJQ0FnSUM1dFlYQW9abkpwWlc1a2JIbEVZWFJsVkdsdFpTbGNiaUFnSUNBZ0lDQWdMbVpwYkhSbGNpZ29aQ2tnUFQ0Z2RHaHBjeTVqYjI1MFlXbHVjeWhrS1NsY2JpQWdJQ0FnSUNBZ0xuTnZjblFvS1N4Y2JpQWdJQ0FnSUhKbGMzVnNkSE1nUFNCYlhUdGNiaUFnSUNCc1pYUWdleUJ6SUgwZ1BTQjBhR2x6TEZ4dUlDQWdJQ0FnYVNBOUlEQTdYRzVjYmlBZ0lDQjNhR2xzWlNBb2N5QThJSFJvYVhNdVpTa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1lXUmtaV1FnUFNCemIzSjBaV1JiYVYwZ2ZId2dkR2hwY3k1bExGeHVJQ0FnSUNBZ0lDQnVaWGgwSUQwZ0syRmtaR1ZrSUQ0Z0szUm9hWE11WlNBL0lIUm9hWE11WlNBNklHRmtaR1ZrTzF4dUlDQWdJQ0FnY21WemRXeDBjeTV3ZFhOb0tFbHVkR1Z5ZG1Gc0xtWnliMjFFWVhSbFZHbHRaWE1vY3l3Z2JtVjRkQ2twTzF4dUlDQWdJQ0FnY3lBOUlHNWxlSFE3WEc0Z0lDQWdJQ0JwSUNzOUlERTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkSE03WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1UzQnNhWFFnZEdocGN5QkpiblJsY25aaGJDQnBiblJ2SUhOdFlXeHNaWElnU1c1MFpYSjJZV3h6TENCbFlXTm9JRzltSUhSb1pTQnpjR1ZqYVdacFpXUWdiR1Z1WjNSb0xseHVJQ0FnS2lCTVpXWjBJRzkyWlhJZ2RHbHRaU0JwY3lCbmNtOTFjR1ZrSUdsdWRHOGdZU0J6YldGc2JHVnlJR2x1ZEdWeWRtRnNYRzRnSUNBcUlFQndZWEpoYlNCN1JIVnlZWFJwYjI1OFQySnFaV04wZkc1MWJXSmxjbjBnWkhWeVlYUnBiMjRnTFNCVWFHVWdiR1Z1WjNSb0lHOW1JR1ZoWTJnZ2NtVnpkV3gwYVc1bklHbHVkR1Z5ZG1Gc0xseHVJQ0FnS2lCQWNtVjBkWEp1SUh0QmNuSmhlWDFjYmlBZ0lDb3ZYRzRnSUhOd2JHbDBRbmtvWkhWeVlYUnBiMjRwSUh0Y2JpQWdJQ0JqYjI1emRDQmtkWElnUFNCRWRYSmhkR2x2Ymk1bWNtOXRSSFZ5WVhScGIyNU1hV3RsS0dSMWNtRjBhVzl1S1R0Y2JseHVJQ0FnSUdsbUlDZ2hkR2hwY3k1cGMxWmhiR2xrSUh4OElDRmtkWEl1YVhOV1lXeHBaQ0I4ZkNCa2RYSXVZWE1vWENKdGFXeHNhWE5sWTI5dVpITmNJaWtnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmJYVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnZXlCeklIMGdQU0IwYUdsekxGeHVJQ0FnSUNBZ2FXUjRJRDBnTVN4Y2JpQWdJQ0FnSUc1bGVIUTdYRzVjYmlBZ0lDQmpiMjV6ZENCeVpYTjFiSFJ6SUQwZ1cxMDdYRzRnSUNBZ2QyaHBiR1VnS0hNZ1BDQjBhR2x6TG1VcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdGa1pHVmtJRDBnZEdocGN5NXpkR0Z5ZEM1d2JIVnpLR1IxY2k1dFlYQlZibWwwY3lnb2VDa2dQVDRnZUNBcUlHbGtlQ2twTzF4dUlDQWdJQ0FnYm1WNGRDQTlJQ3RoWkdSbFpDQStJQ3QwYUdsekxtVWdQeUIwYUdsekxtVWdPaUJoWkdSbFpEdGNiaUFnSUNBZ0lISmxjM1ZzZEhNdWNIVnphQ2hKYm5SbGNuWmhiQzVtY205dFJHRjBaVlJwYldWektITXNJRzVsZUhRcEtUdGNiaUFnSUNBZ0lITWdQU0J1WlhoME8xeHVJQ0FnSUNBZ2FXUjRJQ3M5SURFN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSEpsYzNWc2RITTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVTNCc2FYUWdkR2hwY3lCSmJuUmxjblpoYkNCcGJuUnZJSFJvWlNCemNHVmphV1pwWldRZ2JuVnRZbVZ5SUc5bUlITnRZV3hzWlhJZ2FXNTBaWEoyWVd4ekxseHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnYm5WdFltVnlUMlpRWVhKMGN5QXRJRlJvWlNCdWRXMWlaWElnYjJZZ1NXNTBaWEoyWVd4eklIUnZJR1JwZG1sa1pTQjBhR1VnU1c1MFpYSjJZV3dnYVc1MGJ5NWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1FYSnlZWGw5WEc0Z0lDQXFMMXh1SUNCa2FYWnBaR1ZGY1hWaGJHeDVLRzUxYldKbGNrOW1VR0Z5ZEhNcElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdWFYTldZV3hwWkNrZ2NtVjBkWEp1SUZ0ZE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuTndiR2wwUW5rb2RHaHBjeTVzWlc1bmRHZ29LU0F2SUc1MWJXSmxjazltVUdGeWRITXBMbk5zYVdObEtEQXNJRzUxYldKbGNrOW1VR0Z5ZEhNcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJpQjNhR1YwYUdWeUlIUm9hWE1nU1c1MFpYSjJZV3dnYjNabGNteGhjSE1nZDJsMGFDQjBhR1VnYzNCbFkybG1hV1ZrSUVsdWRHVnlkbUZzWEc0Z0lDQXFJRUJ3WVhKaGJTQjdTVzUwWlhKMllXeDlJRzkwYUdWeVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0lDQXFMMXh1SUNCdmRtVnliR0Z3Y3lodmRHaGxjaWtnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1VZ1BpQnZkR2hsY2k1eklDWW1JSFJvYVhNdWN5QThJRzkwYUdWeUxtVTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVJSGRvWlhSb1pYSWdkR2hwY3lCSmJuUmxjblpoYkNkeklHVnVaQ0JwY3lCaFpHcGhZMlZ1ZENCMGJ5QjBhR1VnYzNCbFkybG1hV1ZrSUVsdWRHVnlkbUZzSjNNZ2MzUmhjblF1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdTVzUwWlhKMllXeDlJRzkwYUdWeVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0lDQXFMMXh1SUNCaFluVjBjMU4wWVhKMEtHOTBhR1Z5S1NCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1selZtRnNhV1FwSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNCeVpYUjFjbTRnSzNSb2FYTXVaU0E5UFQwZ0syOTBhR1Z5TG5NN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdUlIZG9aWFJvWlhJZ2RHaHBjeUJKYm5SbGNuWmhiQ2R6SUhOMFlYSjBJR2x6SUdGa2FtRmpaVzUwSUhSdklIUm9aU0J6Y0dWamFXWnBaV1FnU1c1MFpYSjJZV3duY3lCbGJtUXVYRzRnSUNBcUlFQndZWEpoYlNCN1NXNTBaWEoyWVd4OUlHOTBhR1Z5WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnSUNBcUwxeHVJQ0JoWW5WMGMwVnVaQ2h2ZEdobGNpa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXBjMVpoYkdsa0tTQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdjbVYwZFhKdUlDdHZkR2hsY2k1bElEMDlQU0FyZEdocGN5NXpPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnliaUIzYUdWMGFHVnlJSFJvYVhNZ1NXNTBaWEoyWVd3Z1pXNW5kV3htY3lCMGFHVWdjM1JoY25RZ1lXNWtJR1Z1WkNCdlppQjBhR1VnYzNCbFkybG1hV1ZrSUVsdWRHVnlkbUZzTGx4dUlDQWdLaUJBY0dGeVlXMGdlMGx1ZEdWeWRtRnNmU0J2ZEdobGNseHVJQ0FnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlZ4dUlDQWdLaTljYmlBZ1pXNW5kV3htY3lodmRHaGxjaWtnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVwYzFaaGJHbGtLU0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWN5QThQU0J2ZEdobGNpNXpJQ1ltSUhSb2FYTXVaU0ErUFNCdmRHaGxjaTVsTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5YmlCM2FHVjBhR1Z5SUhSb2FYTWdTVzUwWlhKMllXd2dhR0Z6SUhSb1pTQnpZVzFsSUhOMFlYSjBJR0Z1WkNCbGJtUWdZWE1nZEdobElITndaV05wWm1sbFpDQkpiblJsY25aaGJDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0SmJuUmxjblpoYkgwZ2IzUm9aWEpjYmlBZ0lDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMWNiaUFnSUNvdlhHNGdJR1Z4ZFdGc2N5aHZkR2hsY2lrZ2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1cGMxWmhiR2xrSUh4OElDRnZkR2hsY2k1cGMxWmhiR2xrS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjeTVsY1hWaGJITW9iM1JvWlhJdWN5a2dKaVlnZEdocGN5NWxMbVZ4ZFdGc2N5aHZkR2hsY2k1bEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNGdZVzRnU1c1MFpYSjJZV3dnY21Wd2NtVnpaVzUwYVc1bklIUm9aU0JwYm5SbGNuTmxZM1JwYjI0Z2IyWWdkR2hwY3lCSmJuUmxjblpoYkNCaGJtUWdkR2hsSUhOd1pXTnBabWxsWkNCSmJuUmxjblpoYkM1Y2JpQWdJQ29nVTNCbFkybG1hV05oYkd4NUxDQjBhR1VnY21WemRXeDBhVzVuSUVsdWRHVnlkbUZzSUdoaGN5QjBhR1VnYldGNGFXMTFiU0J6ZEdGeWRDQjBhVzFsSUdGdVpDQjBhR1VnYldsdWFXMTFiU0JsYm1RZ2RHbHRaU0J2WmlCMGFHVWdkSGR2SUVsdWRHVnlkbUZzY3k1Y2JpQWdJQ29nVW1WMGRYSnVjeUJ1ZFd4c0lHbG1JSFJvWlNCcGJuUmxjbk5sWTNScGIyNGdhWE1nWlcxd2RIa3NJRzFsWVc1cGJtY3NJSFJvWlNCcGJuUmxjblpoYkhNZ1pHOXVKM1FnYVc1MFpYSnpaV04wTGx4dUlDQWdLaUJBY0dGeVlXMGdlMGx1ZEdWeWRtRnNmU0J2ZEdobGNseHVJQ0FnS2lCQWNtVjBkWEp1SUh0SmJuUmxjblpoYkgxY2JpQWdJQ292WEc0Z0lHbHVkR1Z5YzJWamRHbHZiaWh2ZEdobGNpa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXBjMVpoYkdsa0tTQnlaWFIxY200Z2RHaHBjenRjYmlBZ0lDQmpiMjV6ZENCeklEMGdkR2hwY3k1eklENGdiM1JvWlhJdWN5QS9JSFJvYVhNdWN5QTZJRzkwYUdWeUxuTXNYRzRnSUNBZ0lDQmxJRDBnZEdocGN5NWxJRHdnYjNSb1pYSXVaU0EvSUhSb2FYTXVaU0E2SUc5MGFHVnlMbVU3WEc1Y2JpQWdJQ0JwWmlBb2N5QStQU0JsS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRWx1ZEdWeWRtRnNMbVp5YjIxRVlYUmxWR2x0WlhNb2N5d2daU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnliaUJoYmlCSmJuUmxjblpoYkNCeVpYQnlaWE5sYm5ScGJtY2dkR2hsSUhWdWFXOXVJRzltSUhSb2FYTWdTVzUwWlhKMllXd2dZVzVrSUhSb1pTQnpjR1ZqYVdacFpXUWdTVzUwWlhKMllXd3VYRzRnSUNBcUlGTndaV05wWm1sallXeHNlU3dnZEdobElISmxjM1ZzZEdsdVp5QkpiblJsY25aaGJDQm9ZWE1nZEdobElHMXBibWx0ZFcwZ2MzUmhjblFnZEdsdFpTQmhibVFnZEdobElHMWhlR2x0ZFcwZ1pXNWtJSFJwYldVZ2IyWWdkR2hsSUhSM2J5QkpiblJsY25aaGJITXVYRzRnSUNBcUlFQndZWEpoYlNCN1NXNTBaWEoyWVd4OUlHOTBhR1Z5WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMGx1ZEdWeWRtRnNmVnh1SUNBZ0tpOWNiaUFnZFc1cGIyNG9iM1JvWlhJcElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdWFYTldZV3hwWkNrZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUNBZ1kyOXVjM1FnY3lBOUlIUm9hWE11Y3lBOElHOTBhR1Z5TG5NZ1B5QjBhR2x6TG5NZ09pQnZkR2hsY2k1ekxGeHVJQ0FnSUNBZ1pTQTlJSFJvYVhNdVpTQStJRzkwYUdWeUxtVWdQeUIwYUdsekxtVWdPaUJ2ZEdobGNpNWxPMXh1SUNBZ0lISmxkSFZ5YmlCSmJuUmxjblpoYkM1bWNtOXRSR0YwWlZScGJXVnpLSE1zSUdVcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRTFsY21kbElHRnVJR0Z5Y21GNUlHOW1JRWx1ZEdWeWRtRnNjeUJwYm5SdklHRWdaWEYxYVhaaGJHVnVkQ0J0YVc1cGJXRnNJSE5sZENCdlppQkpiblJsY25aaGJITXVYRzRnSUNBcUlFTnZiV0pwYm1WeklHOTJaWEpzWVhCd2FXNW5JR0Z1WkNCaFpHcGhZMlZ1ZENCSmJuUmxjblpoYkhNdVhHNGdJQ0FxSUVCd1lYSmhiU0I3UVhKeVlYbDlJR2x1ZEdWeWRtRnNjMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdEJjbkpoZVgxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCdFpYSm5aU2hwYm5SbGNuWmhiSE1wSUh0Y2JpQWdJQ0JqYjI1emRDQmJabTkxYm1Rc0lHWnBibUZzWFNBOUlHbHVkR1Z5ZG1Gc2MxeHVJQ0FnSUNBZ0xuTnZjblFvS0dFc0lHSXBJRDArSUdFdWN5QXRJR0l1Y3lsY2JpQWdJQ0FnSUM1eVpXUjFZMlVvWEc0Z0lDQWdJQ0FnSUNoYmMyOW1ZWElzSUdOMWNuSmxiblJkTENCcGRHVnRLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0NGamRYSnlaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdXM052Wm1GeUxDQnBkR1Z0WFR0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR04xY25KbGJuUXViM1psY214aGNITW9hWFJsYlNrZ2ZId2dZM1Z5Y21WdWRDNWhZblYwYzFOMFlYSjBLR2wwWlcwcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnVzNOdlptRnlMQ0JqZFhKeVpXNTBMblZ1YVc5dUtHbDBaVzBwWFR0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRnR6YjJaaGNpNWpiMjVqWVhRb1cyTjFjbkpsYm5SZEtTd2dhWFJsYlYwN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNCYlcxMHNJRzUxYkd4ZFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUdsbUlDaG1hVzVoYkNrZ2UxeHVJQ0FnSUNBZ1ptOTFibVF1Y0hWemFDaG1hVzVoYkNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm1iM1Z1WkR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY200Z1lXNGdZWEp5WVhrZ2IyWWdTVzUwWlhKMllXeHpJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdjM0JoYm5NZ2IyWWdkR2x0WlNCMGFHRjBJRzl1YkhrZ1lYQndaV0Z5SUdsdUlHOXVaU0J2WmlCMGFHVWdjM0JsWTJsbWFXVmtJRWx1ZEdWeWRtRnNjeTVjYmlBZ0lDb2dRSEJoY21GdElIdEJjbkpoZVgwZ2FXNTBaWEoyWVd4elhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBGeWNtRjVmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJSGh2Y2locGJuUmxjblpoYkhNcElIdGNiaUFnSUNCc1pYUWdjM1JoY25RZ1BTQnVkV3hzTEZ4dUlDQWdJQ0FnWTNWeWNtVnVkRU52ZFc1MElEMGdNRHRjYmlBZ0lDQmpiMjV6ZENCeVpYTjFiSFJ6SUQwZ1cxMHNYRzRnSUNBZ0lDQmxibVJ6SUQwZ2FXNTBaWEoyWVd4ekxtMWhjQ2dvYVNrZ1BUNGdXMXh1SUNBZ0lDQWdJQ0I3SUhScGJXVTZJR2t1Y3l3Z2RIbHdaVG9nWENKelhDSWdmU3hjYmlBZ0lDQWdJQ0FnZXlCMGFXMWxPaUJwTG1Vc0lIUjVjR1U2SUZ3aVpWd2lJSDBzWEc0Z0lDQWdJQ0JkS1N4Y2JpQWdJQ0FnSUdac1lYUjBaVzVsWkNBOUlFRnljbUY1TG5CeWIzUnZkSGx3WlM1amIyNWpZWFFvTGk0dVpXNWtjeWtzWEc0Z0lDQWdJQ0JoY25JZ1BTQm1iR0YwZEdWdVpXUXVjMjl5ZENnb1lTd2dZaWtnUFQ0Z1lTNTBhVzFsSUMwZ1lpNTBhVzFsS1R0Y2JseHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2FTQnZaaUJoY25JcElIdGNiaUFnSUNBZ0lHTjFjbkpsYm5SRGIzVnVkQ0FyUFNCcExuUjVjR1VnUFQwOUlGd2ljMXdpSUQ4Z01TQTZJQzB4TzF4dVhHNGdJQ0FnSUNCcFppQW9ZM1Z5Y21WdWRFTnZkVzUwSUQwOVBTQXhLU0I3WEc0Z0lDQWdJQ0FnSUhOMFlYSjBJRDBnYVM1MGFXMWxPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdhV1lnS0hOMFlYSjBJQ1ltSUN0emRHRnlkQ0FoUFQwZ0sya3VkR2x0WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RITXVjSFZ6YUNoSmJuUmxjblpoYkM1bWNtOXRSR0YwWlZScGJXVnpLSE4wWVhKMExDQnBMblJwYldVcEtUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUhOMFlYSjBJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnU1c1MFpYSjJZV3d1YldWeVoyVW9jbVZ6ZFd4MGN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVJR0Z1SUVsdWRHVnlkbUZzSUhKbGNISmxjMlZ1ZEdsdVp5QjBhR1VnYzNCaGJpQnZaaUIwYVcxbElHbHVJSFJvYVhNZ1NXNTBaWEoyWVd3Z2RHaGhkQ0JrYjJWemJpZDBJRzkyWlhKc1lYQWdkMmwwYUNCaGJua2diMllnZEdobElITndaV05wWm1sbFpDQkpiblJsY25aaGJITXVYRzRnSUNBcUlFQndZWEpoYlNCN0xpNHVTVzUwWlhKMllXeDlJR2x1ZEdWeWRtRnNjMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdEJjbkpoZVgxY2JpQWdJQ292WEc0Z0lHUnBabVpsY21WdVkyVW9MaTR1YVc1MFpYSjJZV3h6S1NCN1hHNGdJQ0FnY21WMGRYSnVJRWx1ZEdWeWRtRnNMbmh2Y2loYmRHaHBjMTB1WTI5dVkyRjBLR2x1ZEdWeWRtRnNjeWtwWEc0Z0lDQWdJQ0F1YldGd0tDaHBLU0E5UGlCMGFHbHpMbWx1ZEdWeWMyVmpkR2x2YmlocEtTbGNiaUFnSUNBZ0lDNW1hV3gwWlhJb0tHa3BJRDArSUdrZ0ppWWdJV2t1YVhORmJYQjBlU2dwS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHRWdjM1J5YVc1bklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nU1c1MFpYSjJZV3dnWVhCd2NtOXdjbWxoZEdVZ1ptOXlJR1JsWW5WbloybHVaeTVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ0FnS2k5Y2JpQWdkRzlUZEhKcGJtY29LU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbWx6Vm1Gc2FXUXBJSEpsZEhWeWJpQkpUbFpCVEVsRU8xeHVJQ0FnSUhKbGRIVnliaUJnV3lSN2RHaHBjeTV6TG5SdlNWTlBLQ2w5SUZ4MU1qQXhNeUFrZTNSb2FYTXVaUzUwYjBsVFR5Z3BmU2xnTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1lXNGdTVk5QSURnMk1ERXRZMjl0Y0d4cFlXNTBJSE4wY21sdVp5QnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR2x6SUVsdWRHVnlkbUZzTGx4dUlDQWdLaUJBYzJWbElHaDBkSEJ6T2k4dlpXNHVkMmxyYVhCbFpHbGhMbTl5Wnk5M2FXdHBMMGxUVDE4NE5qQXhJMVJwYldWZmFXNTBaWEoyWVd4elhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2Y0hSeklDMGdWR2hsSUhOaGJXVWdiM0IwYVc5dWN5QmhjeUI3UUd4cGJtc2dSR0YwWlZScGJXVWpkRzlKVTA5OVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBZ0lDb3ZYRzRnSUhSdlNWTlBLRzl3ZEhNcElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdWFYTldZV3hwWkNrZ2NtVjBkWEp1SUVsT1ZrRk1TVVE3WEc0Z0lDQWdjbVYwZFhKdUlHQWtlM1JvYVhNdWN5NTBiMGxUVHlodmNIUnpLWDB2Skh0MGFHbHpMbVV1ZEc5SlUwOG9iM0IwY3lsOVlEdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJR0Z1SUVsVFR5QTROakF4TFdOdmJYQnNhV0Z1ZENCemRISnBibWNnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnWkdGMFpTQnZaaUIwYUdseklFbHVkR1Z5ZG1Gc0xseHVJQ0FnS2lCVWFHVWdkR2x0WlNCamIyMXdiMjVsYm5SeklHRnlaU0JwWjI1dmNtVmtMbHh1SUNBZ0tpQkFjMlZsSUdoMGRIQnpPaTh2Wlc0dWQybHJhWEJsWkdsaExtOXlaeTkzYVd0cEwwbFRUMTg0TmpBeEkxUnBiV1ZmYVc1MFpYSjJZV3h6WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFnSUNvdlhHNGdJSFJ2U1ZOUFJHRjBaU2dwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YVhOV1lXeHBaQ2tnY21WMGRYSnVJRWxPVmtGTVNVUTdYRzRnSUNBZ2NtVjBkWEp1SUdBa2UzUm9hWE11Y3k1MGIwbFRUMFJoZEdVb0tYMHZKSHQwYUdsekxtVXVkRzlKVTA5RVlYUmxLQ2w5WUR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHRnVJRWxUVHlBNE5qQXhMV052YlhCc2FXRnVkQ0J6ZEhKcGJtY2djbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2x0WlNCdlppQjBhR2x6SUVsdWRHVnlkbUZzTGx4dUlDQWdLaUJVYUdVZ1pHRjBaU0JqYjIxd2IyNWxiblJ6SUdGeVpTQnBaMjV2Y21Wa0xseHVJQ0FnS2lCQWMyVmxJR2gwZEhCek9pOHZaVzR1ZDJscmFYQmxaR2xoTG05eVp5OTNhV3RwTDBsVFQxODROakF4STFScGJXVmZhVzUwWlhKMllXeHpYRzRnSUNBcUlFQndZWEpoYlNCN1QySnFaV04wZlNCdmNIUnpJQzBnVkdobElITmhiV1VnYjNCMGFXOXVjeUJoY3lCN1FHeHBibXNnUkdGMFpWUnBiV1VqZEc5SlUwOTlYRzRnSUNBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMxY2JpQWdJQ292WEc0Z0lIUnZTVk5QVkdsdFpTaHZjSFJ6S1NCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1selZtRnNhV1FwSUhKbGRIVnliaUJKVGxaQlRFbEVPMXh1SUNBZ0lISmxkSFZ5YmlCZ0pIdDBhR2x6TG5NdWRHOUpVMDlVYVcxbEtHOXdkSE1wZlM4a2UzUm9hWE11WlM1MGIwbFRUMVJwYldVb2IzQjBjeWw5WUR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHRWdjM1J5YVc1bklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nU1c1MFpYSjJZV3dnWm05eWJXRjBkR1ZrSUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnYzNCbFkybG1hV1ZrSUdadmNtMWhkQ0J6ZEhKcGJtY3VYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCa1lYUmxSbTl5YldGMElDMGdkR2hsSUdadmNtMWhkQ0J6ZEhKcGJtY3VJRlJvYVhNZ2MzUnlhVzVuSUdadmNtMWhkSE1nZEdobElITjBZWEowSUdGdVpDQmxibVFnZEdsdFpTNGdVMlZsSUh0QWJHbHVheUJFWVhSbFZHbHRaU04wYjBadmNtMWhkSDBnWm05eUlHUmxkR0ZwYkhNdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2Y0hSeklDMGdiM0IwYVc5dWMxeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzI5d2RITXVjMlZ3WVhKaGRHOXlJRDBnSUNjZ1hIVXlNREV6SUNkZElDMGdZU0J6WlhCaGNtRjBiM0lnZEc4Z2NHeGhZMlVnWW1WMGQyVmxiaUIwYUdVZ2MzUmhjblFnWVc1a0lHVnVaQ0J5WlhCeVpYTmxiblJoZEdsdmJuTmNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlZ4dUlDQWdLaTljYmlBZ2RHOUdiM0p0WVhRb1pHRjBaVVp2Y20xaGRDd2dleUJ6WlhCaGNtRjBiM0lnUFNCY0lpQmNkVEl3TVRNZ1hDSWdmU0E5SUh0OUtTQjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtbHpWbUZzYVdRcElISmxkSFZ5YmlCSlRsWkJURWxFTzF4dUlDQWdJSEpsZEhWeWJpQmdKSHQwYUdsekxuTXVkRzlHYjNKdFlYUW9aR0YwWlVadmNtMWhkQ2w5Skh0elpYQmhjbUYwYjNKOUpIdDBhR2x6TG1VdWRHOUdiM0p0WVhRb1pHRjBaVVp2Y20xaGRDbDlZRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTRnWVNCRWRYSmhkR2x2YmlCeVpYQnlaWE5sYm5ScGJtY2dkR2hsSUhScGJXVWdjM0JoYm01bFpDQmllU0IwYUdseklHbHVkR1Z5ZG1Gc0xseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaM3h6ZEhKcGJtZGJYWDBnVzNWdWFYUTlXeWR0YVd4c2FYTmxZMjl1WkhNblhWMGdMU0IwYUdVZ2RXNXBkQ0J2Y2lCMWJtbDBjeUFvYzNWamFDQmhjeUFuYUc5MWNuTW5JRzl5SUNka1lYbHpKeWtnZEc4Z2FXNWpiSFZrWlNCcGJpQjBhR1VnWkhWeVlYUnBiMjR1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdUMkpxWldOMGZTQnZjSFJ6SUMwZ2IzQjBhVzl1Y3lCMGFHRjBJR0ZtWm1WamRDQjBhR1VnWTNKbFlYUnBiMjRnYjJZZ2RHaGxJRVIxY21GMGFXOXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBjeTVqYjI1MlpYSnphVzl1UVdOamRYSmhZM2s5SjJOaGMzVmhiQ2RkSUMwZ2RHaGxJR052Ym5abGNuTnBiMjRnYzNsemRHVnRJSFJ2SUhWelpWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCSmJuUmxjblpoYkM1bWNtOXRSR0YwWlZScGJXVnpLR1IwTVN3Z1pIUXlLUzUwYjBSMWNtRjBhVzl1S0NrdWRHOVBZbXBsWTNRb0tTQXZMejArSUhzZ2JXbHNiR2x6WldOdmJtUnpPaUE0T0RRNE9USTFOeUI5WEc0Z0lDQXFJRUJsZUdGdGNHeGxJRWx1ZEdWeWRtRnNMbVp5YjIxRVlYUmxWR2x0WlhNb1pIUXhMQ0JrZERJcExuUnZSSFZ5WVhScGIyNG9KMlJoZVhNbktTNTBiMDlpYW1WamRDZ3BJQzh2UFQ0Z2V5QmtZWGx6T2lBeExqQXlOREU0TVRJeE5USTNOemMzTnpnZ2ZWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCSmJuUmxjblpoYkM1bWNtOXRSR0YwWlZScGJXVnpLR1IwTVN3Z1pIUXlLUzUwYjBSMWNtRjBhVzl1S0ZzbmFHOTFjbk1uTENBbmJXbHVkWFJsY3lkZEtTNTBiMDlpYW1WamRDZ3BJQzh2UFQ0Z2V5Qm9iM1Z5Y3pvZ01qUXNJRzFwYm5WMFpYTTZJRE0wTGpneU1EazFJSDFjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdTVzUwWlhKMllXd3Vabkp2YlVSaGRHVlVhVzFsY3loa2RERXNJR1IwTWlrdWRHOUVkWEpoZEdsdmJpaGJKMmh2ZFhKekp5d2dKMjFwYm5WMFpYTW5MQ0FuYzJWamIyNWtjeWRkS1M1MGIwOWlhbVZqZENncElDOHZQVDRnZXlCb2IzVnljem9nTWpRc0lHMXBiblYwWlhNNklETTBMQ0J6WldOdmJtUnpPaUEwT1M0eU5UY2dmVnh1SUNBZ0tpQkFaWGhoYlhCc1pTQkpiblJsY25aaGJDNW1jbTl0UkdGMFpWUnBiV1Z6S0dSME1Td2daSFF5S1M1MGIwUjFjbUYwYVc5dUtDZHpaV052Ym1Sekp5a3VkRzlQWW1wbFkzUW9LU0F2THowK0lIc2djMlZqYjI1a2N6b2dPRGcwT0RrdU1qVTNJSDFjYmlBZ0lDb2dRSEpsZEhWeWJpQjdSSFZ5WVhScGIyNTlYRzRnSUNBcUwxeHVJQ0IwYjBSMWNtRjBhVzl1S0hWdWFYUXNJRzl3ZEhNcElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdWFYTldZV3hwWkNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUVSMWNtRjBhVzl1TG1sdWRtRnNhV1FvZEdocGN5NXBiblpoYkdsa1VtVmhjMjl1S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WlM1a2FXWm1LSFJvYVhNdWN5d2dkVzVwZEN3Z2IzQjBjeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1VuVnVJRzFoY0VadUlHOXVJSFJvWlNCcGJuUmxjblpoYkNCemRHRnlkQ0JoYm1RZ1pXNWtMQ0J5WlhSMWNtNXBibWNnWVNCdVpYY2dTVzUwWlhKMllXd2dabkp2YlNCMGFHVWdjbVZ6ZFd4MGFXNW5JRVJoZEdWVWFXMWxjMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQnRZWEJHYmx4dUlDQWdLaUJBY21WMGRYSnVJSHRKYm5SbGNuWmhiSDFjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdTVzUwWlhKMllXd3Vabkp2YlVSaGRHVlVhVzFsY3loa2RERXNJR1IwTWlrdWJXRndSVzVrY0c5cGJuUnpLR1Z1WkhCdmFXNTBJRDArSUdWdVpIQnZhVzUwTG5SdlZWUkRLQ2twWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRWx1ZEdWeWRtRnNMbVp5YjIxRVlYUmxWR2x0WlhNb1pIUXhMQ0JrZERJcExtMWhjRVZ1WkhCdmFXNTBjeWhsYm1Sd2IybHVkQ0E5UGlCbGJtUndiMmx1ZEM1d2JIVnpLSHNnYUc5MWNuTTZJRElnZlNrcFhHNGdJQ0FxTDF4dUlDQnRZWEJGYm1Sd2IybHVkSE1vYldGd1JtNHBJSHRjYmlBZ0lDQnlaWFIxY200Z1NXNTBaWEoyWVd3dVpuSnZiVVJoZEdWVWFXMWxjeWh0WVhCR2JpaDBhR2x6TG5NcExDQnRZWEJHYmloMGFHbHpMbVVwS1R0Y2JpQWdmVnh1ZlZ4dUlpd2dJbWx0Y0c5eWRDQkVZWFJsVkdsdFpTQm1jbTl0SUZ3aUxpOWtZWFJsZEdsdFpTNXFjMXdpTzF4dWFXMXdiM0owSUZObGRIUnBibWR6SUdaeWIyMGdYQ0l1TDNObGRIUnBibWR6TG1welhDSTdYRzVwYlhCdmNuUWdURzlqWVd4bElHWnliMjBnWENJdUwybHRjR3d2Ykc5allXeGxMbXB6WENJN1hHNXBiWEJ2Y25RZ1NVRk9RVnB2Ym1VZ1puSnZiU0JjSWk0dmVtOXVaWE12U1VGT1FWcHZibVV1YW5OY0lqdGNibWx0Y0c5eWRDQjdJRzV2Y20xaGJHbDZaVnB2Ym1VZ2ZTQm1jbTl0SUZ3aUxpOXBiWEJzTDNwdmJtVlZkR2xzTG1welhDSTdYRzVjYm1sdGNHOXlkQ0I3SUdoaGMxSmxiR0YwYVhabElIMGdabkp2YlNCY0lpNHZhVzF3YkM5MWRHbHNMbXB6WENJN1hHNWNiaThxS2x4dUlDb2dWR2hsSUVsdVptOGdZMnhoYzNNZ1kyOXVkR0ZwYm5NZ2MzUmhkR2xqSUcxbGRHaHZaSE1nWm05eUlISmxkSEpwWlhacGJtY2daMlZ1WlhKaGJDQjBhVzFsSUdGdVpDQmtZWFJsSUhKbGJHRjBaV1FnWkdGMFlTNGdSbTl5SUdWNFlXMXdiR1VzSUdsMElHaGhjeUJ0WlhSb2IyUnpJR1p2Y2lCbWFXNWthVzVuSUc5MWRDQnBaaUJoSUhScGJXVWdlbTl1WlNCb1lYTWdZU0JFVTFRc0lHWnZjaUJzYVhOMGFXNW5JSFJvWlNCdGIyNTBhSE1nYVc0Z1lXNTVJSE4xY0hCdmNuUmxaQ0JzYjJOaGJHVXNJR0Z1WkNCbWIzSWdaR2x6WTI5MlpYSnBibWNnZDJocFkyZ2diMllnVEhWNGIyNGdabVZoZEhWeVpYTWdZWEpsSUdGMllXbHNZV0pzWlNCcGJpQjBhR1VnWTNWeWNtVnVkQ0JsYm5acGNtOXViV1Z1ZEM1Y2JpQXFMMXh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1NXNW1ieUI3WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY200Z2QyaGxkR2hsY2lCMGFHVWdjM0JsWTJsbWFXVmtJSHB2Ym1VZ1kyOXVkR0ZwYm5NZ1lTQkVVMVF1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZGcHZibVY5SUZ0NmIyNWxQU2RzYjJOaGJDZGRJQzBnV205dVpTQjBieUJqYUdWamF5NGdSR1ZtWVhWc2RITWdkRzhnZEdobElHVnVkbWx5YjI1dFpXNTBKM01nYkc5allXd2dlbTl1WlM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJvWVhORVUxUW9lbTl1WlNBOUlGTmxkSFJwYm1kekxtUmxabUYxYkhSYWIyNWxLU0I3WEc0Z0lDQWdZMjl1YzNRZ2NISnZkRzhnUFNCRVlYUmxWR2x0WlM1dWIzY29LUzV6WlhSYWIyNWxLSHB2Ym1VcExuTmxkQ2g3SUcxdmJuUm9PaUF4TWlCOUtUdGNibHh1SUNBZ0lISmxkSFZ5YmlBaGVtOXVaUzVwYzFWdWFYWmxjbk5oYkNBbUppQndjbTkwYnk1dlptWnpaWFFnSVQwOUlIQnliM1J2TG5ObGRDaDdJRzF2Ym5Sb09pQTJJSDBwTG05bVpuTmxkRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTRnZDJobGRHaGxjaUIwYUdVZ2MzQmxZMmxtYVdWa0lIcHZibVVnYVhNZ1lTQjJZV3hwWkNCSlFVNUJJSE53WldOcFptbGxjaTVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIcHZibVVnTFNCYWIyNWxJSFJ2SUdOb1pXTnJYRzRnSUNBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2FYTldZV3hwWkVsQlRrRmFiMjVsS0hwdmJtVXBJSHRjYmlBZ0lDQnlaWFIxY200Z1NVRk9RVnB2Ym1VdWFYTldZV3hwWkZwdmJtVW9lbTl1WlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1ZG1WeWRITWdkR2hsSUdsdWNIVjBJR2x1ZEc4Z1lTQjdRR3hwYm1zZ1dtOXVaWDBnYVc1emRHRnVZMlV1WEc0Z0lDQXFYRzRnSUNBcUlDb2dTV1lnWUdsdWNIVjBZQ0JwY3lCaGJISmxZV1I1SUdFZ1dtOXVaU0JwYm5OMFlXNWpaU3dnYVhRZ2FYTWdjbVYwZFhKdVpXUWdkVzVqYUdGdVoyVmtMbHh1SUNBZ0tpQXFJRWxtSUdCcGJuQjFkR0FnYVhNZ1lTQnpkSEpwYm1jZ1kyOXVkR0ZwYm1sdVp5QmhJSFpoYkdsa0lIUnBiV1VnZW05dVpTQnVZVzFsTENCaElGcHZibVVnYVc1emRHRnVZMlZjYmlBZ0lDb2dJQ0IzYVhSb0lIUm9ZWFFnYm1GdFpTQnBjeUJ5WlhSMWNtNWxaQzVjYmlBZ0lDb2dLaUJKWmlCZ2FXNXdkWFJnSUdseklHRWdjM1J5YVc1bklIUm9ZWFFnWkc5bGMyNG5kQ0J5WldabGNpQjBieUJoSUd0dWIzZHVJSFJwYldVZ2VtOXVaU3dnWVNCYWIyNWxYRzRnSUNBcUlDQWdhVzV6ZEdGdVkyVWdkMmwwYUNCN1FHeHBibXNnV205dVpTTnBjMVpoYkdsa2ZTQTlQU0JtWVd4elpTQnBjeUJ5WlhSMWNtNWxaQzVjYmlBZ0lDb2dLaUJKWmlCZ2FXNXdkWFFnYVhNZ1lTQnVkVzFpWlhJc0lHRWdXbTl1WlNCcGJuTjBZVzVqWlNCM2FYUm9JSFJvWlNCemNHVmphV1pwWldRZ1ptbDRaV1FnYjJabWMyVjBYRzRnSUNBcUlDQWdhVzRnYldsdWRYUmxjeUJwY3lCeVpYUjFjbTVsWkM1Y2JpQWdJQ29nS2lCSlppQmdhVzV3ZFhSZ0lHbHpJR0J1ZFd4c1lDQnZjaUJnZFc1a1pXWnBibVZrWUN3Z2RHaGxJR1JsWm1GMWJIUWdlbTl1WlNCcGN5QnlaWFIxY201bFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ4V205dVpYeHVkVzFpWlhKOUlGdHBibkIxZEYwZ0xTQjBhR1VnZG1Gc2RXVWdkRzhnWW1VZ1kyOXVkbVZ5ZEdWa1hHNGdJQ0FxSUVCeVpYUjFjbTRnZTFwdmJtVjlYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdibTl5YldGc2FYcGxXbTl1WlNocGJuQjFkQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQnViM0p0WVd4cGVtVmFiMjVsS0dsdWNIVjBMQ0JUWlhSMGFXNW5jeTVrWldaaGRXeDBXbTl1WlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdUlHRnVJR0Z5Y21GNUlHOW1JSE4wWVc1a1lXeHZibVVnYlc5dWRHZ2dibUZ0WlhNdVhHNGdJQ0FxSUVCelpXVWdhSFIwY0hNNkx5OWtaWFpsYkc5d1pYSXViVzk2YVd4c1lTNXZjbWN2Wlc0dFZWTXZaRzlqY3k5WFpXSXZTbUYyWVZOamNtbHdkQzlTWldabGNtVnVZMlV2UjJ4dlltRnNYMDlpYW1WamRITXZSR0YwWlZScGJXVkdiM0p0WVhSY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnRzWlc1bmRHZzlKMnh2Ym1jblhTQXRJSFJvWlNCc1pXNW5kR2dnYjJZZ2RHaGxJRzF2Ym5Sb0lISmxjSEpsYzJWdWRHRjBhVzl1TENCemRXTm9JR0Z6SUZ3aWJuVnRaWEpwWTF3aUxDQmNJakl0WkdsbmFYUmNJaXdnWENKdVlYSnliM2RjSWl3Z1hDSnphRzl5ZEZ3aUxDQmNJbXh2Ym1kY0lseHVJQ0FnS2lCQWNHRnlZVzBnZTA5aWFtVmpkSDBnYjNCMGN5QXRJRzl3ZEdsdmJuTmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0dmNIUnpMbXh2WTJGc1pWMGdMU0IwYUdVZ2JHOWpZV3hsSUdOdlpHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0dmNIUnpMbTUxYldKbGNtbHVaMU41YzNSbGJUMXVkV3hzWFNBdElIUm9aU0J1ZFcxaVpYSnBibWNnYzNsemRHVnRYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBjeTVzYjJOUFltbzliblZzYkYwZ0xTQmhiaUJsZUdsemRHbHVaeUJzYjJOaGJHVWdiMkpxWldOMElIUnZJSFZ6WlZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMjl3ZEhNdWIzVjBjSFYwUTJGc1pXNWtZWEk5SjJkeVpXZHZjbmtuWFNBdElIUm9aU0JqWVd4bGJtUmhjbHh1SUNBZ0tpQkFaWGhoYlhCc1pTQkpibVp2TG0xdmJuUm9jeWdwV3pCZElDOHZQVDRnSjBwaGJuVmhjbmtuWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRWx1Wm04dWJXOXVkR2h6S0NkemFHOXlkQ2NwV3pCZElDOHZQVDRnSjBwaGJpZGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1NXNW1ieTV0YjI1MGFITW9KMjUxYldWeWFXTW5LVnN3WFNBdkx6MCtJQ2N4SjF4dUlDQWdLaUJBWlhoaGJYQnNaU0JKYm1adkxtMXZiblJvY3lnbmMyaHZjblFuTENCN0lHeHZZMkZzWlRvZ0oyWnlMVU5CSnlCOUlDbGJNRjBnTHk4OVBpQW5hbUZ1ZGk0blhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVsdVptOHViVzl1ZEdoektDZHVkVzFsY21sakp5d2dleUJzYjJOaGJHVTZJQ2RoY2ljZ2ZTbGJNRjBnTHk4OVBpQW5YSFV3TmpZeEoxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCSmJtWnZMbTF2Ym5Sb2N5Z25iRzl1Wnljc0lIc2diM1YwY0hWMFEyRnNaVzVrWVhJNklDZHBjMnhoYldsakp5QjlLVnN3WFNBdkx6MCtJQ2RTWVdKcFhIVXdNa0pDSUVrblhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBGeWNtRjVmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJRzF2Ym5Sb2N5aGNiaUFnSUNCc1pXNW5kR2dnUFNCY0lteHZibWRjSWl4Y2JpQWdJQ0I3SUd4dlkyRnNaU0E5SUc1MWJHd3NJRzUxYldKbGNtbHVaMU41YzNSbGJTQTlJRzUxYkd3c0lHeHZZMDlpYWlBOUlHNTFiR3dzSUc5MWRIQjFkRU5oYkdWdVpHRnlJRDBnWENKbmNtVm5iM0o1WENJZ2ZTQTlJSHQ5WEc0Z0lDa2dlMXh1SUNBZ0lISmxkSFZ5YmlBb2JHOWpUMkpxSUh4OElFeHZZMkZzWlM1amNtVmhkR1VvYkc5allXeGxMQ0J1ZFcxaVpYSnBibWRUZVhOMFpXMHNJRzkxZEhCMWRFTmhiR1Z1WkdGeUtTa3ViVzl1ZEdoektHeGxibWQwYUNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdUlHRnVJR0Z5Y21GNUlHOW1JR1p2Y20xaGRDQnRiMjUwYUNCdVlXMWxjeTVjYmlBZ0lDb2dSbTl5YldGMElHMXZiblJvY3lCa2FXWm1aWElnWm5KdmJTQnpkR0Z1WkdGc2IyNWxJRzF2Ym5Sb2N5QnBiaUIwYUdGMElIUm9aWGtuY21VZ2JXVmhiblFnZEc4Z1lYQndaV0Z5SUc1bGVIUWdkRzhnZEdobElHUmhlU0J2WmlCMGFHVWdiVzl1ZEdndUlFbHVJSE52YldVZ2JHRnVaM1ZoWjJWekxDQjBhR0YwWEc0Z0lDQXFJR05vWVc1blpYTWdkR2hsSUhOMGNtbHVaeTVjYmlBZ0lDb2dVMlZsSUh0QWJHbHVheUJKYm1adkkyMXZiblJvYzMxY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnRzWlc1bmRHZzlKMnh2Ym1jblhTQXRJSFJvWlNCc1pXNW5kR2dnYjJZZ2RHaGxJRzF2Ym5Sb0lISmxjSEpsYzJWdWRHRjBhVzl1TENCemRXTm9JR0Z6SUZ3aWJuVnRaWEpwWTF3aUxDQmNJakl0WkdsbmFYUmNJaXdnWENKdVlYSnliM2RjSWl3Z1hDSnphRzl5ZEZ3aUxDQmNJbXh2Ym1kY0lseHVJQ0FnS2lCQWNHRnlZVzBnZTA5aWFtVmpkSDBnYjNCMGN5QXRJRzl3ZEdsdmJuTmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0dmNIUnpMbXh2WTJGc1pWMGdMU0IwYUdVZ2JHOWpZV3hsSUdOdlpHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0dmNIUnpMbTUxYldKbGNtbHVaMU41YzNSbGJUMXVkV3hzWFNBdElIUm9aU0J1ZFcxaVpYSnBibWNnYzNsemRHVnRYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBjeTVzYjJOUFltbzliblZzYkYwZ0xTQmhiaUJsZUdsemRHbHVaeUJzYjJOaGJHVWdiMkpxWldOMElIUnZJSFZ6WlZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMjl3ZEhNdWIzVjBjSFYwUTJGc1pXNWtZWEk5SjJkeVpXZHZjbmtuWFNBdElIUm9aU0JqWVd4bGJtUmhjbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdEJjbkpoZVgxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCdGIyNTBhSE5HYjNKdFlYUW9YRzRnSUNBZ2JHVnVaM1JvSUQwZ1hDSnNiMjVuWENJc1hHNGdJQ0FnZXlCc2IyTmhiR1VnUFNCdWRXeHNMQ0J1ZFcxaVpYSnBibWRUZVhOMFpXMGdQU0J1ZFd4c0xDQnNiMk5QWW1vZ1BTQnVkV3hzTENCdmRYUndkWFJEWVd4bGJtUmhjaUE5SUZ3aVozSmxaMjl5ZVZ3aUlIMGdQU0I3ZlZ4dUlDQXBJSHRjYmlBZ0lDQnlaWFIxY200Z0tHeHZZMDlpYWlCOGZDQk1iMk5oYkdVdVkzSmxZWFJsS0d4dlkyRnNaU3dnYm5WdFltVnlhVzVuVTNsemRHVnRMQ0J2ZFhSd2RYUkRZV3hsYm1SaGNpa3BMbTF2Ym5Sb2N5aHNaVzVuZEdnc0lIUnlkV1VwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5YmlCaGJpQmhjbkpoZVNCdlppQnpkR0Z1WkdGc2IyNWxJSGRsWldzZ2JtRnRaWE11WEc0Z0lDQXFJRUJ6WldVZ2FIUjBjSE02THk5a1pYWmxiRzl3WlhJdWJXOTZhV3hzWVM1dmNtY3ZaVzR0VlZNdlpHOWpjeTlYWldJdlNtRjJZVk5qY21sd2RDOVNaV1psY21WdVkyVXZSMnh2WW1Gc1gwOWlhbVZqZEhNdlJHRjBaVlJwYldWR2IzSnRZWFJjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlGdHNaVzVuZEdnOUoyeHZibWNuWFNBdElIUm9aU0JzWlc1bmRHZ2diMllnZEdobElIZGxaV3RrWVhrZ2NtVndjbVZ6Wlc1MFlYUnBiMjRzSUhOMVkyZ2dZWE1nWENKdVlYSnliM2RjSWl3Z1hDSnphRzl5ZEZ3aUxDQmNJbXh2Ym1kY0lpNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0UFltcGxZM1I5SUc5d2RITWdMU0J2Y0hScGIyNXpYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBjeTVzYjJOaGJHVmRJQzBnZEdobElHeHZZMkZzWlNCamIyUmxYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBjeTV1ZFcxaVpYSnBibWRUZVhOMFpXMDliblZzYkYwZ0xTQjBhR1VnYm5WdFltVnlhVzVuSUhONWMzUmxiVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1cyOXdkSE11Ykc5alQySnFQVzUxYkd4ZElDMGdZVzRnWlhocGMzUnBibWNnYkc5allXeGxJRzlpYW1WamRDQjBieUIxYzJWY2JpQWdJQ29nUUdWNFlXMXdiR1VnU1c1bWJ5NTNaV1ZyWkdGNWN5Z3BXekJkSUM4dlBUNGdKMDF2Ym1SaGVTZGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1NXNW1ieTUzWldWclpHRjVjeWduYzJodmNuUW5LVnN3WFNBdkx6MCtJQ2ROYjI0blhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVsdVptOHVkMlZsYTJSaGVYTW9KM05vYjNKMEp5d2dleUJzYjJOaGJHVTZJQ2RtY2kxRFFTY2dmU2xiTUYwZ0x5ODlQaUFuYkhWdUxpZGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1NXNW1ieTUzWldWclpHRjVjeWduYzJodmNuUW5MQ0I3SUd4dlkyRnNaVG9nSjJGeUp5QjlLVnN3WFNBdkx6MCtJQ2RjZFRBMk1qZGNkVEEyTkRSY2RUQTJNamRjZFRBMk1rSmNkVEEyTkRaY2RUQTJORUZjZFRBMk5EWW5YRzRnSUNBcUlFQnlaWFIxY200Z2UwRnljbUY1ZlZ4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhkbFpXdGtZWGx6S0d4bGJtZDBhQ0E5SUZ3aWJHOXVaMXdpTENCN0lHeHZZMkZzWlNBOUlHNTFiR3dzSUc1MWJXSmxjbWx1WjFONWMzUmxiU0E5SUc1MWJHd3NJR3h2WTA5aWFpQTlJRzUxYkd3Z2ZTQTlJSHQ5S1NCN1hHNGdJQ0FnY21WMGRYSnVJQ2hzYjJOUFltb2dmSHdnVEc5allXeGxMbU55WldGMFpTaHNiMk5oYkdVc0lHNTFiV0psY21sdVoxTjVjM1JsYlN3Z2JuVnNiQ2twTG5kbFpXdGtZWGx6S0d4bGJtZDBhQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1SUdGdUlHRnljbUY1SUc5bUlHWnZjbTFoZENCM1pXVnJJRzVoYldWekxseHVJQ0FnS2lCR2IzSnRZWFFnZDJWbGEyUmhlWE1nWkdsbVptVnlJR1p5YjIwZ2MzUmhibVJoYkc5dVpTQjNaV1ZyWkdGNWN5QnBiaUIwYUdGMElIUm9aWGtuY21VZ2JXVmhiblFnZEc4Z1lYQndaV0Z5SUc1bGVIUWdkRzhnYlc5eVpTQmtZWFJsSUdsdVptOXliV0YwYVc5dUxpQkpiaUJ6YjIxbElHeGhibWQxWVdkbGN5d2dkR2hoZEZ4dUlDQWdLaUJqYUdGdVoyVnpJSFJvWlNCemRISnBibWN1WEc0Z0lDQXFJRk5sWlNCN1FHeHBibXNnU1c1bWJ5TjNaV1ZyWkdGNWMzMWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0c1pXNW5kR2c5SjJ4dmJtY25YU0F0SUhSb1pTQnNaVzVuZEdnZ2IyWWdkR2hsSUcxdmJuUm9JSEpsY0hKbGMyVnVkR0YwYVc5dUxDQnpkV05vSUdGeklGd2libUZ5Y205M1hDSXNJRndpYzJodmNuUmNJaXdnWENKc2IyNW5YQ0l1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdUMkpxWldOMGZTQnZjSFJ6SUMwZ2IzQjBhVzl1YzF4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdXMjl3ZEhNdWJHOWpZV3hsUFc1MWJHeGRJQzBnZEdobElHeHZZMkZzWlNCamIyUmxYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBjeTV1ZFcxaVpYSnBibWRUZVhOMFpXMDliblZzYkYwZ0xTQjBhR1VnYm5WdFltVnlhVzVuSUhONWMzUmxiVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1cyOXdkSE11Ykc5alQySnFQVzUxYkd4ZElDMGdZVzRnWlhocGMzUnBibWNnYkc5allXeGxJRzlpYW1WamRDQjBieUIxYzJWY2JpQWdJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdkMlZsYTJSaGVYTkdiM0p0WVhRb1hHNGdJQ0FnYkdWdVozUm9JRDBnWENKc2IyNW5YQ0lzWEc0Z0lDQWdleUJzYjJOaGJHVWdQU0J1ZFd4c0xDQnVkVzFpWlhKcGJtZFRlWE4wWlcwZ1BTQnVkV3hzTENCc2IyTlBZbW9nUFNCdWRXeHNJSDBnUFNCN2ZWeHVJQ0FwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLR3h2WTA5aWFpQjhmQ0JNYjJOaGJHVXVZM0psWVhSbEtHeHZZMkZzWlN3Z2JuVnRZbVZ5YVc1blUzbHpkR1Z0TENCdWRXeHNLU2t1ZDJWbGEyUmhlWE1vYkdWdVozUm9MQ0IwY25WbEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNGdZVzRnWVhKeVlYa2diMllnYldWeWFXUnBaVzF6TGx4dUlDQWdLaUJBY0dGeVlXMGdlMDlpYW1WamRIMGdiM0IwY3lBdElHOXdkR2x2Ym5OY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnR2Y0hSekxteHZZMkZzWlYwZ0xTQjBhR1VnYkc5allXeGxJR052WkdWY2JpQWdJQ29nUUdWNFlXMXdiR1VnU1c1bWJ5NXRaWEpwWkdsbGJYTW9LU0F2THowK0lGc2dKMEZOSnl3Z0oxQk5KeUJkWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRWx1Wm04dWJXVnlhV1JwWlcxektIc2diRzlqWVd4bE9pQW5iWGtuSUgwcElDOHZQVDRnV3lBblhIVXhNREUwWEhVeE1ETTJYSFV4TURFMFhIVXhNREF3WEhVeE1ETkJKeXdnSjF4MU1UQXdRVngxTVRBeE5GeDFNVEF6TVNjZ1hWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0QmNuSmhlWDFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJ0WlhKcFpHbGxiWE1vZXlCc2IyTmhiR1VnUFNCdWRXeHNJSDBnUFNCN2ZTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCTWIyTmhiR1V1WTNKbFlYUmxLR3h2WTJGc1pTa3ViV1Z5YVdScFpXMXpLQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1SUdGdUlHRnljbUY1SUc5bUlHVnlZWE1zSUhOMVkyZ2dZWE1nV3lkQ1F5Y3NJQ2RCUkNkZExpQlVhR1VnYkc5allXeGxJR05oYmlCaVpTQnpjR1ZqYVdacFpXUXNJR0oxZENCMGFHVWdZMkZzWlc1a1lYSWdjM2x6ZEdWdElHbHpJR0ZzZDJGNWN5QkhjbVZuYjNKcFlXNHVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmJHVnVaM1JvUFNkemFHOXlkQ2RkSUMwZ2RHaGxJR3hsYm1kMGFDQnZaaUIwYUdVZ1pYSmhJSEpsY0hKbGMyVnVkR0YwYVc5dUxDQnpkV05vSUdGeklGd2ljMmh2Y25SY0lpQnZjaUJjSW14dmJtZGNJaTVjYmlBZ0lDb2dRSEJoY21GdElIdFBZbXBsWTNSOUlHOXdkSE1nTFNCdmNIUnBiMjV6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmJiM0IwY3k1c2IyTmhiR1ZkSUMwZ2RHaGxJR3h2WTJGc1pTQmpiMlJsWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRWx1Wm04dVpYSmhjeWdwSUM4dlBUNGdXeUFuUWtNbkxDQW5RVVFuSUYxY2JpQWdJQ29nUUdWNFlXMXdiR1VnU1c1bWJ5NWxjbUZ6S0Nkc2IyNW5KeWtnTHk4OVBpQmJJQ2RDWldadmNtVWdRMmh5YVhOMEp5d2dKMEZ1Ym04Z1JHOXRhVzVwSnlCZFhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVsdVptOHVaWEpoY3lnbmJHOXVaeWNzSUhzZ2JHOWpZV3hsT2lBblpuSW5JSDBwSUM4dlBUNGdXeUFuWVhaaGJuUWdTbHgxTURCRk9YTjFjeTFEYUhKcGMzUW5MQ0FuWVhCeVhIVXdNRVU0Y3lCS1hIVXdNRVU1YzNWekxVTm9jbWx6ZENjZ1hWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0QmNuSmhlWDFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJsY21GektHeGxibWQwYUNBOUlGd2ljMmh2Y25SY0lpd2dleUJzYjJOaGJHVWdQU0J1ZFd4c0lIMGdQU0I3ZlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJNYjJOaGJHVXVZM0psWVhSbEtHeHZZMkZzWlN3Z2JuVnNiQ3dnWENKbmNtVm5iM0o1WENJcExtVnlZWE1vYkdWdVozUm9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTRnZEdobElITmxkQ0J2WmlCaGRtRnBiR0ZpYkdVZ1ptVmhkSFZ5WlhNZ2FXNGdkR2hwY3lCbGJuWnBjbTl1YldWdWRDNWNiaUFnSUNvZ1UyOXRaU0JtWldGMGRYSmxjeUJ2WmlCTWRYaHZiaUJoY21VZ2JtOTBJR0YyWVdsc1lXSnNaU0JwYmlCaGJHd2daVzUyYVhKdmJtMWxiblJ6TGlCR2IzSWdaWGhoYlhCc1pTd2diMjRnYjJ4a1pYSWdZbkp2ZDNObGNuTXNJSEpsYkdGMGFYWmxJSFJwYldVZ1ptOXliV0YwZEdsdVp5QnpkWEJ3YjNKMElHbHpJRzV2ZENCaGRtRnBiR0ZpYkdVdUlGVnpaU0IwYUdseklHWjFibU4wYVc5dUlIUnZJR1pwWjNWeVpTQnZkWFFnYVdZZ2RHaGhkQ2R6SUhSb1pTQmpZWE5sTGx4dUlDQWdLaUJMWlhsek9seHVJQ0FnS2lBcUlHQnlaV3hoZEdsMlpXQTZJSGRvWlhSb1pYSWdkR2hwY3lCbGJuWnBjbTl1YldWdWRDQnpkWEJ3YjNKMGN5QnlaV3hoZEdsMlpTQjBhVzFsSUdadmNtMWhkSFJwYm1kY2JpQWdJQ29nUUdWNFlXMXdiR1VnU1c1bWJ5NW1aV0YwZFhKbGN5Z3BJQzh2UFQ0Z2V5QnlaV3hoZEdsMlpUb2dabUZzYzJVZ2ZWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWm1WaGRIVnlaWE1vS1NCN1hHNGdJQ0FnY21WMGRYSnVJSHNnY21Wc1lYUnBkbVU2SUdoaGMxSmxiR0YwYVhabEtDa2dmVHRjYmlBZ2ZWeHVmVnh1SWl3Z0ltbHRjRzl5ZENCRWRYSmhkR2x2YmlCbWNtOXRJRndpTGk0dlpIVnlZWFJwYjI0dWFuTmNJanRjYmx4dVpuVnVZM1JwYjI0Z1pHRjVSR2xtWmlobFlYSnNhV1Z5TENCc1lYUmxjaWtnZTF4dUlDQmpiMjV6ZENCMWRHTkVZWGxUZEdGeWRDQTlJQ2hrZENrZ1BUNGdaSFF1ZEc5VlZFTW9NQ3dnZXlCclpXVndURzlqWVd4VWFXMWxPaUIwY25WbElIMHBMbk4wWVhKMFQyWW9YQ0prWVhsY0lpa3VkbUZzZFdWUFppZ3BMRnh1SUNBZ0lHMXpJRDBnZFhSalJHRjVVM1JoY25Rb2JHRjBaWElwSUMwZ2RYUmpSR0Y1VTNSaGNuUW9aV0Z5YkdsbGNpazdYRzRnSUhKbGRIVnliaUJOWVhSb0xtWnNiMjl5S0VSMWNtRjBhVzl1TG1aeWIyMU5hV3hzYVhNb2JYTXBMbUZ6S0Z3aVpHRjVjMXdpS1NrN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdocFoyaFBjbVJsY2tScFptWnpLR04xY25OdmNpd2diR0YwWlhJc0lIVnVhWFJ6S1NCN1hHNGdJR052Ym5OMElHUnBabVpsY25NZ1BTQmJYRzRnSUNBZ1cxd2llV1ZoY25OY0lpd2dLR0VzSUdJcElEMCtJR0l1ZVdWaGNpQXRJR0V1ZVdWaGNsMHNYRzRnSUNBZ1cxd2ljWFZoY25SbGNuTmNJaXdnS0dFc0lHSXBJRDArSUdJdWNYVmhjblJsY2lBdElHRXVjWFZoY25SbGNsMHNYRzRnSUNBZ1cxd2liVzl1ZEdoelhDSXNJQ2hoTENCaUtTQTlQaUJpTG0xdmJuUm9JQzBnWVM1dGIyNTBhQ0FySUNoaUxubGxZWElnTFNCaExubGxZWElwSUNvZ01USmRMRnh1SUNBZ0lGdGNiaUFnSUNBZ0lGd2lkMlZsYTNOY0lpeGNiaUFnSUNBZ0lDaGhMQ0JpS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHUmhlWE1nUFNCa1lYbEVhV1ptS0dFc0lHSXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdLR1JoZVhNZ0xTQW9aR0Y1Y3lBbElEY3BLU0F2SURjN1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUYwc1hHNGdJQ0FnVzF3aVpHRjVjMXdpTENCa1lYbEVhV1ptWFN4Y2JpQWdYVHRjYmx4dUlDQmpiMjV6ZENCeVpYTjFiSFJ6SUQwZ2UzMDdYRzRnSUd4bGRDQnNiM2RsYzNSUGNtUmxjaXdnYUdsbmFGZGhkR1Z5TzF4dVhHNGdJR1p2Y2lBb1kyOXVjM1FnVzNWdWFYUXNJR1JwWm1abGNsMGdiMllnWkdsbVptVnljeWtnZTF4dUlDQWdJR2xtSUNoMWJtbDBjeTVwYm1SbGVFOW1LSFZ1YVhRcElENDlJREFwSUh0Y2JpQWdJQ0FnSUd4dmQyVnpkRTl5WkdWeUlEMGdkVzVwZER0Y2JseHVJQ0FnSUNBZ2JHVjBJR1JsYkhSaElEMGdaR2xtWm1WeUtHTjFjbk52Y2l3Z2JHRjBaWElwTzF4dUlDQWdJQ0FnYUdsbmFGZGhkR1Z5SUQwZ1kzVnljMjl5TG5Cc2RYTW9leUJiZFc1cGRGMDZJR1JsYkhSaElIMHBPMXh1WEc0Z0lDQWdJQ0JwWmlBb2FHbG5hRmRoZEdWeUlENGdiR0YwWlhJcElIdGNiaUFnSUNBZ0lDQWdZM1Z5YzI5eUlEMGdZM1Z5YzI5eUxuQnNkWE1vZXlCYmRXNXBkRjA2SUdSbGJIUmhJQzBnTVNCOUtUdGNiaUFnSUNBZ0lDQWdaR1ZzZEdFZ0xUMGdNVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR04xY25OdmNpQTlJR2hwWjJoWFlYUmxjanRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnY21WemRXeDBjMXQxYm1sMFhTQTlJR1JsYkhSaE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCYlkzVnljMjl5TENCeVpYTjFiSFJ6TENCb2FXZG9WMkYwWlhJc0lHeHZkMlZ6ZEU5eVpHVnlYVHRjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1puVnVZM1JwYjI0Z0tHVmhjbXhwWlhJc0lHeGhkR1Z5TENCMWJtbDBjeXdnYjNCMGN5a2dlMXh1SUNCc1pYUWdXMk4xY25OdmNpd2djbVZ6ZFd4MGN5d2dhR2xuYUZkaGRHVnlMQ0JzYjNkbGMzUlBjbVJsY2wwZ1BTQm9hV2RvVDNKa1pYSkVhV1ptY3lobFlYSnNhV1Z5TENCc1lYUmxjaXdnZFc1cGRITXBPMXh1WEc0Z0lHTnZibk4wSUhKbGJXRnBibWx1WjAxcGJHeHBjeUE5SUd4aGRHVnlJQzBnWTNWeWMyOXlPMXh1WEc0Z0lHTnZibk4wSUd4dmQyVnlUM0prWlhKVmJtbDBjeUE5SUhWdWFYUnpMbVpwYkhSbGNpaGNiaUFnSUNBb2RTa2dQVDRnVzF3aWFHOTFjbk5jSWl3Z1hDSnRhVzUxZEdWelhDSXNJRndpYzJWamIyNWtjMXdpTENCY0ltMXBiR3hwYzJWamIyNWtjMXdpWFM1cGJtUmxlRTltS0hVcElENDlJREJjYmlBZ0tUdGNibHh1SUNCcFppQW9iRzkzWlhKUGNtUmxjbFZ1YVhSekxteGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJR2xtSUNob2FXZG9WMkYwWlhJZ1BDQnNZWFJsY2lrZ2UxeHVJQ0FnSUNBZ2FHbG5hRmRoZEdWeUlEMGdZM1Z5YzI5eUxuQnNkWE1vZXlCYmJHOTNaWE4wVDNKa1pYSmRPaUF4SUgwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaG9hV2RvVjJGMFpYSWdJVDA5SUdOMWNuTnZjaWtnZTF4dUlDQWdJQ0FnY21WemRXeDBjMXRzYjNkbGMzUlBjbVJsY2wwZ1BTQW9jbVZ6ZFd4MGMxdHNiM2RsYzNSUGNtUmxjbDBnZkh3Z01Da2dLeUJ5WlcxaGFXNXBibWROYVd4c2FYTWdMeUFvYUdsbmFGZGhkR1Z5SUMwZ1kzVnljMjl5S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0JrZFhKaGRHbHZiaUE5SUVSMWNtRjBhVzl1TG1aeWIyMVBZbXBsWTNRb2NtVnpkV3gwY3l3Z2IzQjBjeWs3WEc1Y2JpQWdhV1lnS0d4dmQyVnlUM0prWlhKVmJtbDBjeTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnY21WMGRYSnVJRVIxY21GMGFXOXVMbVp5YjIxTmFXeHNhWE1vY21WdFlXbHVhVzVuVFdsc2JHbHpMQ0J2Y0hSektWeHVJQ0FnSUNBZ0xuTm9hV1owVkc4b0xpNHViRzkzWlhKUGNtUmxjbFZ1YVhSektWeHVJQ0FnSUNBZ0xuQnNkWE1vWkhWeVlYUnBiMjRwTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJrZFhKaGRHbHZianRjYmlBZ2ZWeHVmVnh1SWl3Z0ltTnZibk4wSUc1MWJXSmxjbWx1WjFONWMzUmxiWE1nUFNCN1hHNGdJR0Z5WVdJNklGd2lXMXhjZFRBMk5qQXRYRngxTURZMk9WMWNJaXhjYmlBZ1lYSmhZbVY0ZERvZ1hDSmJYRngxTURaR01DMWNYSFV3TmtZNVhWd2lMRnh1SUNCaVlXeHBPaUJjSWx0Y1hIVXhRalV3TFZ4Y2RURkNOVGxkWENJc1hHNGdJR0psYm1jNklGd2lXMXhjZFRBNVJUWXRYRngxTURsRlJsMWNJaXhjYmlBZ1pHVjJZVG9nWENKYlhGeDFNRGsyTmkxY1hIVXdPVFpHWFZ3aUxGeHVJQ0JtZFd4c2QybGtaVG9nWENKYlhGeDFSa1l4TUMxY1hIVkdSakU1WFZ3aUxGeHVJQ0JuZFdweU9pQmNJbHRjWEhVd1FVVTJMVnhjZFRCQlJVWmRYQ0lzWEc0Z0lHaGhibWxrWldNNklGd2lXMXgxTXpBd04zeGNkVFJGTURCOFhIVTBSVGhEZkZ4MU5FVXdPWHhjZFRVMlJFSjhYSFUwUlRrMGZGeDFOVEUyUkh4Y2RUUkZNRE44WEhVMU1UWkNmRngxTkVVMVJGMWNJaXhjYmlBZ2EyaHRjam9nWENKYlhGeDFNVGRGTUMxY1hIVXhOMFU1WFZ3aUxGeHVJQ0JyYm1SaE9pQmNJbHRjWEhVd1EwVTJMVnhjZFRCRFJVWmRYQ0lzWEc0Z0lHeGhiMjg2SUZ3aVcxeGNkVEJGUkRBdFhGeDFNRVZFT1YxY0lpeGNiaUFnYkdsdFlqb2dYQ0piWEZ4MU1UazBOaTFjWEhVeE9UUkdYVndpTEZ4dUlDQnRiSGx0T2lCY0lsdGNYSFV3UkRZMkxWeGNkVEJFTmtaZFhDSXNYRzRnSUcxdmJtYzZJRndpVzF4Y2RURTRNVEF0WEZ4MU1UZ3hPVjFjSWl4Y2JpQWdiWGx0Y2pvZ1hDSmJYRngxTVRBME1DMWNYSFV4TURRNVhWd2lMRnh1SUNCdmNubGhPaUJjSWx0Y1hIVXdRalkyTFZ4Y2RUQkNOa1pkWENJc1hHNGdJSFJoYld4a1pXTTZJRndpVzF4Y2RUQkNSVFl0WEZ4MU1FSkZSbDFjSWl4Y2JpQWdkR1ZzZFRvZ1hDSmJYRngxTUVNMk5pMWNYSFV3UXpaR1hWd2lMRnh1SUNCMGFHRnBPaUJjSWx0Y1hIVXdSVFV3TFZ4Y2RUQkZOVGxkWENJc1hHNGdJSFJwWW5RNklGd2lXMXhjZFRCR01qQXRYRngxTUVZeU9WMWNJaXhjYmlBZ2JHRjBiam9nWENKY1hGeGNaRndpTEZ4dWZUdGNibHh1WTI5dWMzUWdiblZ0WW1WeWFXNW5VM2x6ZEdWdGMxVlVSakUySUQwZ2UxeHVJQ0JoY21GaU9pQmJNVFl6TWl3Z01UWTBNVjBzWEc0Z0lHRnlZV0psZUhRNklGc3hOemMyTENBeE56ZzFYU3hjYmlBZ1ltRnNhVG9nV3pZNU9USXNJRGN3TURGZExGeHVJQ0JpWlc1bk9pQmJNalV6TkN3Z01qVTBNMTBzWEc0Z0lHUmxkbUU2SUZzeU5EQTJMQ0F5TkRFMVhTeGNiaUFnWm5Wc2JIZHBaR1U2SUZzMk5USTVOaXdnTmpVek1ETmRMRnh1SUNCbmRXcHlPaUJiTWpjNU1Dd2dNamM1T1Ywc1hHNGdJR3RvYlhJNklGczJNVEV5TENBMk1USXhYU3hjYmlBZ2EyNWtZVG9nV3pNek1ESXNJRE16TVRGZExGeHVJQ0JzWVc5dk9pQmJNemM1TWl3Z016Z3dNVjBzWEc0Z0lHeHBiV0k2SUZzMk5EY3dMQ0EyTkRjNVhTeGNiaUFnYld4NWJUb2dXek0wTXpBc0lETTBNemxkTEZ4dUlDQnRiMjVuT2lCYk5qRTJNQ3dnTmpFMk9WMHNYRzRnSUcxNWJYSTZJRnMwTVRZd0xDQTBNVFk1WFN4Y2JpQWdiM0o1WVRvZ1d6STVNVGdzSURJNU1qZGRMRnh1SUNCMFlXMXNaR1ZqT2lCYk16QTBOaXdnTXpBMU5WMHNYRzRnSUhSbGJIVTZJRnN6TVRjMExDQXpNVGd6WFN4Y2JpQWdkR2hoYVRvZ1d6TTJOalFzSURNMk56TmRMRnh1SUNCMGFXSjBPaUJiTXpnM01pd2dNemc0TVYwc1hHNTlPMXh1WEc1amIyNXpkQ0JvWVc1cFpHVmpRMmhoY25NZ1BTQnVkVzFpWlhKcGJtZFRlWE4wWlcxekxtaGhibWxrWldNdWNtVndiR0ZqWlNndlcxeGNXM3hjWEYxZEwyY3NJRndpWENJcExuTndiR2wwS0Z3aVhDSXBPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY0dGeWMyVkVhV2RwZEhNb2MzUnlLU0I3WEc0Z0lHeGxkQ0IyWVd4MVpTQTlJSEJoY25ObFNXNTBLSE4wY2l3Z01UQXBPMXh1SUNCcFppQW9hWE5PWVU0b2RtRnNkV1VwS1NCN1hHNGdJQ0FnZG1Gc2RXVWdQU0JjSWx3aU8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2MzUnlMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYjJSbElEMGdjM1J5TG1Ob1lYSkRiMlJsUVhRb2FTazdYRzVjYmlBZ0lDQWdJR2xtSUNoemRISmJhVjB1YzJWaGNtTm9LRzUxYldKbGNtbHVaMU41YzNSbGJYTXVhR0Z1YVdSbFl5a2dJVDA5SUMweEtTQjdYRzRnSUNBZ0lDQWdJSFpoYkhWbElDczlJR2hoYm1sa1pXTkRhR0Z5Y3k1cGJtUmxlRTltS0hOMGNsdHBYU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUd0bGVTQnBiaUJ1ZFcxaVpYSnBibWRUZVhOMFpXMXpWVlJHTVRZcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmJiV2x1TENCdFlYaGRJRDBnYm5WdFltVnlhVzVuVTNsemRHVnRjMVZVUmpFMlcydGxlVjA3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR052WkdVZ1BqMGdiV2x1SUNZbUlHTnZaR1VnUEQwZ2JXRjRLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlNBclBTQmpiMlJsSUMwZ2JXbHVPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjR0Z5YzJWSmJuUW9kbUZzZFdVc0lERXdLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkbUZzZFdVN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBaMmwwVW1WblpYZ29leUJ1ZFcxaVpYSnBibWRUZVhOMFpXMGdmU3dnWVhCd1pXNWtJRDBnWENKY0lpa2dlMXh1SUNCeVpYUjFjbTRnYm1WM0lGSmxaMFY0Y0NoZ0pIdHVkVzFpWlhKcGJtZFRlWE4wWlcxelcyNTFiV0psY21sdVoxTjVjM1JsYlNCOGZDQmNJbXhoZEc1Y0lsMTlKSHRoY0hCbGJtUjlZQ2s3WEc1OVhHNGlMQ0FpYVcxd2IzSjBJSHNnY0dGeWMyVk5hV3hzYVhNc0lHbHpWVzVrWldacGJtVmtMQ0IxYm5SeWRXNWpZWFJsV1dWaGNpd2djMmxuYm1Wa1QyWm1jMlYwTENCb1lYTlBkMjVRY205d1pYSjBlU0I5SUdaeWIyMGdYQ0l1TDNWMGFXd3Vhbk5jSWp0Y2JtbHRjRzl5ZENCR2IzSnRZWFIwWlhJZ1puSnZiU0JjSWk0dlptOXliV0YwZEdWeUxtcHpYQ0k3WEc1cGJYQnZjblFnUm1sNFpXUlBabVp6WlhSYWIyNWxJR1p5YjIwZ1hDSXVMaTk2YjI1bGN5OW1hWGhsWkU5bVpuTmxkRnB2Ym1VdWFuTmNJanRjYm1sdGNHOXlkQ0JKUVU1QldtOXVaU0JtY205dElGd2lMaTR2ZW05dVpYTXZTVUZPUVZwdmJtVXVhbk5jSWp0Y2JtbHRjRzl5ZENCRVlYUmxWR2x0WlNCbWNtOXRJRndpTGk0dlpHRjBaWFJwYldVdWFuTmNJanRjYm1sdGNHOXlkQ0I3SUdScFoybDBVbVZuWlhnc0lIQmhjbk5sUkdsbmFYUnpJSDBnWm5KdmJTQmNJaTR2WkdsbmFYUnpMbXB6WENJN1hHNXBiWEJ2Y25RZ2V5QkRiMjVtYkdsamRHbHVaMU53WldOcFptbGpZWFJwYjI1RmNuSnZjaUI5SUdaeWIyMGdYQ0l1TGk5bGNuSnZjbk11YW5OY0lqdGNibHh1WTI5dWMzUWdUVWxUVTBsT1IxOUdWRkFnUFNCY0ltMXBjM05wYm1jZ1NXNTBiQzVFWVhSbFZHbHRaVVp2Y20xaGRDNW1iM0p0WVhSVWIxQmhjblJ6SUhOMWNIQnZjblJjSWp0Y2JseHVablZ1WTNScGIyNGdhVzUwVlc1cGRDaHlaV2RsZUN3Z2NHOXpkQ0E5SUNocEtTQTlQaUJwS1NCN1hHNGdJSEpsZEhWeWJpQjdJSEpsWjJWNExDQmtaWE5sY2pvZ0tGdHpYU2tnUFQ0Z2NHOXpkQ2h3WVhKelpVUnBaMmwwY3loektTa2dmVHRjYm4xY2JseHVZMjl1YzNRZ1RrSlRVQ0E5SUZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb01UWXdLVHRjYm1OdmJuTjBJSE53WVdObFQzSk9RbE5RSUQwZ1lGc2dKSHRPUWxOUWZWMWdPMXh1WTI5dWMzUWdjM0JoWTJWUGNrNUNVMUJTWldkRmVIQWdQU0J1WlhjZ1VtVm5SWGh3S0hOd1lXTmxUM0pPUWxOUUxDQmNJbWRjSWlrN1hHNWNibVoxYm1OMGFXOXVJR1pwZUV4cGMzUlNaV2RsZUNoektTQjdYRzRnSUM4dklHMWhhMlVnWkc5MGN5QnZjSFJwYjI1aGJDQmhibVFnWVd4emJ5QnRZV3RsSUhSb1pXMGdiR2wwWlhKaGJGeHVJQ0F2THlCdFlXdGxJSE53WVdObElHRnVaQ0J1YjI0Z1luSmxZV3RoWW14bElITndZV05sSUdOb1lYSmhZM1JsY25NZ2FXNTBaWEpqYUdGdVoyVmhZbXhsWEc0Z0lISmxkSFZ5YmlCekxuSmxjR3hoWTJVb0wxeGNMaTluTENCY0lseGNYRnd1UDF3aUtTNXlaWEJzWVdObEtITndZV05sVDNKT1FsTlFVbVZuUlhod0xDQnpjR0ZqWlU5eVRrSlRVQ2s3WEc1OVhHNWNibVoxYm1OMGFXOXVJSE4wY21sd1NXNXpaVzV6YVhScGRtbDBhV1Z6S0hNcElIdGNiaUFnY21WMGRYSnVJSE5jYmlBZ0lDQXVjbVZ3YkdGalpTZ3ZYRnd1TDJjc0lGd2lYQ0lwSUM4dklHbG5ibTl5WlNCa2IzUnpJSFJvWVhRZ2QyVnlaU0J0WVdSbElHOXdkR2x2Ym1Gc1hHNGdJQ0FnTG5KbGNHeGhZMlVvYzNCaFkyVlBjazVDVTFCU1pXZEZlSEFzSUZ3aUlGd2lLU0F2THlCcGJuUmxjbU5vWVc1blpTQnpjR0ZqWlNCaGJtUWdibUp6Y0Z4dUlDQWdJQzUwYjB4dmQyVnlRMkZ6WlNncE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCdmJtVlBaaWh6ZEhKcGJtZHpMQ0J6ZEdGeWRFbHVaR1Y0S1NCN1hHNGdJR2xtSUNoemRISnBibWR6SUQwOVBTQnVkV3hzS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUhKbFoyVjRPaUJTWldkRmVIQW9jM1J5YVc1bmN5NXRZWEFvWm1sNFRHbHpkRkpsWjJWNEtTNXFiMmx1S0Z3aWZGd2lLU2tzWEc0Z0lDQWdJQ0JrWlhObGNqb2dLRnR6WFNrZ1BUNWNiaUFnSUNBZ0lDQWdjM1J5YVc1bmN5NW1hVzVrU1c1a1pYZ29LR2twSUQwK0lITjBjbWx3U1c1elpXNXphWFJwZG1sMGFXVnpLSE1wSUQwOVBTQnpkSEpwY0VsdWMyVnVjMmwwYVhacGRHbGxjeWhwS1NrZ0t5QnpkR0Z5ZEVsdVpHVjRMRnh1SUNBZ0lIMDdYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnYjJabWMyVjBLSEpsWjJWNExDQm5jbTkxY0hNcElIdGNiaUFnY21WMGRYSnVJSHNnY21WblpYZ3NJR1JsYzJWeU9pQW9XeXdnYUN3Z2JWMHBJRDArSUhOcFoyNWxaRTltWm5ObGRDaG9MQ0J0S1N3Z1ozSnZkWEJ6SUgwN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUhOcGJYQnNaU2h5WldkbGVDa2dlMXh1SUNCeVpYUjFjbTRnZXlCeVpXZGxlQ3dnWkdWelpYSTZJQ2hiYzEwcElEMCtJSE1nZlR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWlhOallYQmxWRzlyWlc0b2RtRnNkV1VwSUh0Y2JpQWdjbVYwZFhKdUlIWmhiSFZsTG5KbGNHeGhZMlVvTDF0Y1hDMWNYRnRjWEYxN2ZTZ3BLaXMvTGl4Y1hGeGNYRnhlSkh3alhGeHpYUzluTENCY0lseGNYRndrSmx3aUtUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2RXNXBkRVp2Y2xSdmEyVnVLSFJ2YTJWdUxDQnNiMk1wSUh0Y2JpQWdZMjl1YzNRZ2IyNWxJRDBnWkdsbmFYUlNaV2RsZUNoc2IyTXBMRnh1SUNBZ0lIUjNieUE5SUdScFoybDBVbVZuWlhnb2JHOWpMQ0JjSW5zeWZWd2lLU3hjYmlBZ0lDQjBhSEpsWlNBOUlHUnBaMmwwVW1WblpYZ29iRzlqTENCY0luc3pmVndpS1N4Y2JpQWdJQ0JtYjNWeUlEMGdaR2xuYVhSU1pXZGxlQ2hzYjJNc0lGd2llelI5WENJcExGeHVJQ0FnSUhOcGVDQTlJR1JwWjJsMFVtVm5aWGdvYkc5akxDQmNJbnMyZlZ3aUtTeGNiaUFnSUNCdmJtVlBjbFIzYnlBOUlHUnBaMmwwVW1WblpYZ29iRzlqTENCY0luc3hMREo5WENJcExGeHVJQ0FnSUc5dVpWUnZWR2h5WldVZ1BTQmthV2RwZEZKbFoyVjRLR3h2WXl3Z1hDSjdNU3d6ZlZ3aUtTeGNiaUFnSUNCdmJtVlViMU5wZUNBOUlHUnBaMmwwVW1WblpYZ29iRzlqTENCY0luc3hMRFo5WENJcExGeHVJQ0FnSUc5dVpWUnZUbWx1WlNBOUlHUnBaMmwwVW1WblpYZ29iRzlqTENCY0luc3hMRGw5WENJcExGeHVJQ0FnSUhSM2IxUnZSbTkxY2lBOUlHUnBaMmwwVW1WblpYZ29iRzlqTENCY0luc3lMRFI5WENJcExGeHVJQ0FnSUdadmRYSlViMU5wZUNBOUlHUnBaMmwwVW1WblpYZ29iRzlqTENCY0luczBMRFo5WENJcExGeHVJQ0FnSUd4cGRHVnlZV3dnUFNBb2RDa2dQVDRnS0hzZ2NtVm5aWGc2SUZKbFowVjRjQ2hsYzJOaGNHVlViMnRsYmloMExuWmhiQ2twTENCa1pYTmxjam9nS0Z0elhTa2dQVDRnY3l3Z2JHbDBaWEpoYkRvZ2RISjFaU0I5S1N4Y2JpQWdJQ0IxYm1sMFlYUmxJRDBnS0hRcElEMCtJSHRjYmlBZ0lDQWdJR2xtSUNoMGIydGxiaTVzYVhSbGNtRnNLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJzYVhSbGNtRnNLSFFwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYzNkcGRHTm9JQ2gwTG5aaGJDa2dlMXh1SUNBZ0lDQWdJQ0F2THlCbGNtRmNiaUFnSUNBZ0lDQWdZMkZ6WlNCY0lrZGNJanBjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYjI1bFQyWW9iRzlqTG1WeVlYTW9YQ0p6YUc5eWRGd2lMQ0JtWVd4elpTa3NJREFwTzF4dUlDQWdJQ0FnSUNCallYTmxJRndpUjBkY0lqcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiMjVsVDJZb2JHOWpMbVZ5WVhNb1hDSnNiMjVuWENJc0lHWmhiSE5sS1N3Z01DazdYRzRnSUNBZ0lDQWdJQzh2SUhsbFlYSnpYRzRnSUNBZ0lDQWdJR05oYzJVZ1hDSjVYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdsdWRGVnVhWFFvYjI1bFZHOVRhWGdwTzF4dUlDQWdJQ0FnSUNCallYTmxJRndpZVhsY0lqcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdhVzUwVlc1cGRDaDBkMjlVYjBadmRYSXNJSFZ1ZEhKMWJtTmhkR1ZaWldGeUtUdGNiaUFnSUNBZ0lDQWdZMkZ6WlNCY0lubDVlWGxjSWpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FXNTBWVzVwZENobWIzVnlLVHRjYmlBZ0lDQWdJQ0FnWTJGelpTQmNJbmw1ZVhsNVhDSTZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR2x1ZEZWdWFYUW9abTkxY2xSdlUybDRLVHRjYmlBZ0lDQWdJQ0FnWTJGelpTQmNJbmw1ZVhsNWVWd2lPbHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJwYm5SVmJtbDBLSE5wZUNrN1hHNGdJQ0FnSUNBZ0lDOHZJRzF2Ym5Sb2MxeHVJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVRWd2lPbHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJwYm5SVmJtbDBLRzl1WlU5eVZIZHZLVHRjYmlBZ0lDQWdJQ0FnWTJGelpTQmNJazFOWENJNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVkRlZ1YVhRb2RIZHZLVHRjYmlBZ0lDQWdJQ0FnWTJGelpTQmNJazFOVFZ3aU9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnZibVZQWmloc2IyTXViVzl1ZEdoektGd2ljMmh2Y25SY0lpd2dkSEoxWlN3Z1ptRnNjMlVwTENBeEtUdGNiaUFnSUNBZ0lDQWdZMkZ6WlNCY0lrMU5UVTFjSWpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2IyNWxUMllvYkc5akxtMXZiblJvY3loY0lteHZibWRjSWl3Z2RISjFaU3dnWm1Gc2MyVXBMQ0F4S1R0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0JjSWt4Y0lqcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdhVzUwVlc1cGRDaHZibVZQY2xSM2J5azdYRzRnSUNBZ0lDQWdJR05oYzJVZ1hDSk1URndpT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCcGJuUlZibWwwS0hSM2J5azdYRzRnSUNBZ0lDQWdJR05oYzJVZ1hDSk1URXhjSWpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2IyNWxUMllvYkc5akxtMXZiblJvY3loY0luTm9iM0owWENJc0lHWmhiSE5sTENCbVlXeHpaU2tzSURFcE8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVRFeE1URndpT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdmJtVlBaaWhzYjJNdWJXOXVkR2h6S0Z3aWJHOXVaMXdpTENCbVlXeHpaU3dnWm1Gc2MyVXBMQ0F4S1R0Y2JpQWdJQ0FnSUNBZ0x5OGdaR0YwWlhOY2JpQWdJQ0FnSUNBZ1kyRnpaU0JjSW1SY0lqcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdhVzUwVlc1cGRDaHZibVZQY2xSM2J5azdYRzRnSUNBZ0lDQWdJR05oYzJVZ1hDSmtaRndpT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCcGJuUlZibWwwS0hSM2J5azdYRzRnSUNBZ0lDQWdJQzh2SUc5eVpHbHVZV3h6WEc0Z0lDQWdJQ0FnSUdOaGMyVWdYQ0p2WENJNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVkRlZ1YVhRb2IyNWxWRzlVYUhKbFpTazdYRzRnSUNBZ0lDQWdJR05oYzJVZ1hDSnZiMjljSWpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FXNTBWVzVwZENoMGFISmxaU2s3WEc0Z0lDQWdJQ0FnSUM4dklIUnBiV1ZjYmlBZ0lDQWdJQ0FnWTJGelpTQmNJa2hJWENJNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVkRlZ1YVhRb2RIZHZLVHRjYmlBZ0lDQWdJQ0FnWTJGelpTQmNJa2hjSWpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FXNTBWVzVwZENodmJtVlBjbFIzYnlrN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnWENKb2FGd2lPbHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJwYm5SVmJtbDBLSFIzYnlrN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnWENKb1hDSTZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR2x1ZEZWdWFYUW9iMjVsVDNKVWQyOHBPMXh1SUNBZ0lDQWdJQ0JqWVhObElGd2liVzFjSWpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FXNTBWVzVwZENoMGQyOHBPMXh1SUNBZ0lDQWdJQ0JqWVhObElGd2liVndpT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCcGJuUlZibWwwS0c5dVpVOXlWSGR2S1R0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0JjSW5GY0lqcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdhVzUwVlc1cGRDaHZibVZQY2xSM2J5azdYRzRnSUNBZ0lDQWdJR05oYzJVZ1hDSnhjVndpT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCcGJuUlZibWwwS0hSM2J5azdYRzRnSUNBZ0lDQWdJR05oYzJVZ1hDSnpYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdsdWRGVnVhWFFvYjI1bFQzSlVkMjhwTzF4dUlDQWdJQ0FnSUNCallYTmxJRndpYzNOY0lqcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdhVzUwVlc1cGRDaDBkMjhwTzF4dUlDQWdJQ0FnSUNCallYTmxJRndpVTF3aU9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnBiblJWYm1sMEtHOXVaVlJ2VkdoeVpXVXBPMXh1SUNBZ0lDQWdJQ0JqWVhObElGd2lVMU5UWENJNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVkRlZ1YVhRb2RHaHlaV1VwTzF4dUlDQWdJQ0FnSUNCallYTmxJRndpZFZ3aU9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnphVzF3YkdVb2IyNWxWRzlPYVc1bEtUdGNiaUFnSUNBZ0lDQWdZMkZ6WlNCY0luVjFYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhOcGJYQnNaU2h2Ym1WUGNsUjNieWs3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdYQ0oxZFhWY0lqcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdhVzUwVlc1cGRDaHZibVVwTzF4dUlDQWdJQ0FnSUNBdkx5QnRaWEpwWkdsbGJWeHVJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVlWd2lPbHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ2Ym1WUFppaHNiMk11YldWeWFXUnBaVzF6S0Nrc0lEQXBPMXh1SUNBZ0lDQWdJQ0F2THlCM1pXVnJXV1ZoY2lBb2F5bGNiaUFnSUNBZ0lDQWdZMkZ6WlNCY0ltdHJhMnRjSWpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FXNTBWVzVwZENobWIzVnlLVHRjYmlBZ0lDQWdJQ0FnWTJGelpTQmNJbXRyWENJNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVkRlZ1YVhRb2RIZHZWRzlHYjNWeUxDQjFiblJ5ZFc1allYUmxXV1ZoY2lrN1hHNGdJQ0FnSUNBZ0lDOHZJSGRsWld0T2RXMWlaWElnS0ZjcFhHNGdJQ0FnSUNBZ0lHTmhjMlVnWENKWFhDSTZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR2x1ZEZWdWFYUW9iMjVsVDNKVWQyOHBPMXh1SUNBZ0lDQWdJQ0JqWVhObElGd2lWMWRjSWpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FXNTBWVzVwZENoMGQyOHBPMXh1SUNBZ0lDQWdJQ0F2THlCM1pXVnJaR0Y1YzF4dUlDQWdJQ0FnSUNCallYTmxJRndpUlZ3aU9seHVJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVkxd2lPbHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJwYm5SVmJtbDBLRzl1WlNrN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnWENKRlJVVmNJanBjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYjI1bFQyWW9iRzlqTG5kbFpXdGtZWGx6S0Z3aWMyaHZjblJjSWl3Z1ptRnNjMlVzSUdaaGJITmxLU3dnTVNrN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnWENKRlJVVkZYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc5dVpVOW1LR3h2WXk1M1pXVnJaR0Y1Y3loY0lteHZibWRjSWl3Z1ptRnNjMlVzSUdaaGJITmxLU3dnTVNrN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnWENKalkyTmNJanBjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYjI1bFQyWW9iRzlqTG5kbFpXdGtZWGx6S0Z3aWMyaHZjblJjSWl3Z2RISjFaU3dnWm1Gc2MyVXBMQ0F4S1R0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0JjSW1OalkyTmNJanBjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYjI1bFQyWW9iRzlqTG5kbFpXdGtZWGx6S0Z3aWJHOXVaMXdpTENCMGNuVmxMQ0JtWVd4elpTa3NJREVwTzF4dUlDQWdJQ0FnSUNBdkx5QnZabVp6WlhRdmVtOXVaVnh1SUNBZ0lDQWdJQ0JqWVhObElGd2lXbHdpT2x4dUlDQWdJQ0FnSUNCallYTmxJRndpV2xwY0lqcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiMlptYzJWMEtHNWxkeUJTWldkRmVIQW9ZQ2hiS3kxZEpIdHZibVZQY2xSM2J5NXpiM1Z5WTJWOUtTZy9Pam9vSkh0MGQyOHVjMjkxY21ObGZTa3BQMkFwTENBeUtUdGNiaUFnSUNBZ0lDQWdZMkZ6WlNCY0lscGFXbHdpT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdlptWnpaWFFvYm1WM0lGSmxaMFY0Y0NoZ0tGc3JMVjBrZTI5dVpVOXlWSGR2TG5OdmRYSmpaWDBwS0NSN2RIZHZMbk52ZFhKalpYMHBQMkFwTENBeUtUdGNiaUFnSUNBZ0lDQWdMeThnZDJVZ1pHOXVKM1FnYzNWd2NHOXlkQ0JhV2xwYUlDaFFVMVFwSUc5eUlGcGFXbHBhSUNoUVlXTnBabWxqSUZOMFlXNWtZWEprSUZScGJXVXBJR2x1SUhCaGNuTnBibWRjYmlBZ0lDQWdJQ0FnTHk4Z1ltVmpZWFZ6WlNCM1pTQmtiMjRuZENCb1lYWmxJR0Z1ZVNCM1lYa2dkRzhnWm1sbmRYSmxJRzkxZENCM2FHRjBJSFJvWlhrZ1lYSmxYRzRnSUNBZ0lDQWdJR05oYzJVZ1hDSjZYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhOcGJYQnNaU2d2VzJFdGVsOHJMUzlkZXpFc01qVTJmVDh2YVNrN1hHNGdJQ0FnSUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHeHBkR1Z5WVd3b2RDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1SUNCamIyNXpkQ0IxYm1sMElEMGdkVzVwZEdGMFpTaDBiMnRsYmlrZ2ZId2dlMXh1SUNBZ0lHbHVkbUZzYVdSU1pXRnpiMjQ2SUUxSlUxTkpUa2RmUmxSUUxGeHVJQ0I5TzF4dVhHNGdJSFZ1YVhRdWRHOXJaVzRnUFNCMGIydGxianRjYmx4dUlDQnlaWFIxY200Z2RXNXBkRHRjYm4xY2JseHVZMjl1YzNRZ2NHRnlkRlI1Y0dWVGRIbHNaVlJ2Vkc5clpXNVdZV3dnUFNCN1hHNGdJSGxsWVhJNklIdGNiaUFnSUNCY0lqSXRaR2xuYVhSY0lqb2dYQ0o1ZVZ3aUxGeHVJQ0FnSUc1MWJXVnlhV002SUZ3aWVYbDVlWGxjSWl4Y2JpQWdmU3hjYmlBZ2JXOXVkR2c2SUh0Y2JpQWdJQ0J1ZFcxbGNtbGpPaUJjSWsxY0lpeGNiaUFnSUNCY0lqSXRaR2xuYVhSY0lqb2dYQ0pOVFZ3aUxGeHVJQ0FnSUhOb2IzSjBPaUJjSWsxTlRWd2lMRnh1SUNBZ0lHeHZibWM2SUZ3aVRVMU5UVndpTEZ4dUlDQjlMRnh1SUNCa1lYazZJSHRjYmlBZ0lDQnVkVzFsY21sak9pQmNJbVJjSWl4Y2JpQWdJQ0JjSWpJdFpHbG5hWFJjSWpvZ1hDSmtaRndpTEZ4dUlDQjlMRnh1SUNCM1pXVnJaR0Y1T2lCN1hHNGdJQ0FnYzJodmNuUTZJRndpUlVWRlhDSXNYRzRnSUNBZ2JHOXVaem9nWENKRlJVVkZYQ0lzWEc0Z0lIMHNYRzRnSUdSaGVYQmxjbWx2WkRvZ1hDSmhYQ0lzWEc0Z0lHUmhlVkJsY21sdlpEb2dYQ0poWENJc1hHNGdJR2h2ZFhJNklIdGNiaUFnSUNCdWRXMWxjbWxqT2lCY0ltaGNJaXhjYmlBZ0lDQmNJakl0WkdsbmFYUmNJam9nWENKb2FGd2lMRnh1SUNCOUxGeHVJQ0J0YVc1MWRHVTZJSHRjYmlBZ0lDQnVkVzFsY21sak9pQmNJbTFjSWl4Y2JpQWdJQ0JjSWpJdFpHbG5hWFJjSWpvZ1hDSnRiVndpTEZ4dUlDQjlMRnh1SUNCelpXTnZibVE2SUh0Y2JpQWdJQ0J1ZFcxbGNtbGpPaUJjSW5OY0lpeGNiaUFnSUNCY0lqSXRaR2xuYVhSY0lqb2dYQ0p6YzF3aUxGeHVJQ0I5TEZ4dWZUdGNibHh1Wm5WdVkzUnBiMjRnZEc5clpXNUdiM0pRWVhKMEtIQmhjblFzSUd4dlkyRnNaU3dnWm05eWJXRjBUM0IwY3lrZ2UxeHVJQ0JqYjI1emRDQjdJSFI1Y0dVc0lIWmhiSFZsSUgwZ1BTQndZWEowTzF4dVhHNGdJR2xtSUNoMGVYQmxJRDA5UFNCY0lteHBkR1Z5WVd4Y0lpa2dlMXh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNCc2FYUmxjbUZzT2lCMGNuVmxMRnh1SUNBZ0lDQWdkbUZzT2lCMllXeDFaU3hjYmlBZ0lDQjlPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUWdjM1I1YkdVZ1BTQm1iM0p0WVhSUGNIUnpXM1I1Y0dWZE8xeHVYRzRnSUd4bGRDQjJZV3dnUFNCd1lYSjBWSGx3WlZOMGVXeGxWRzlVYjJ0bGJsWmhiRnQwZVhCbFhUdGNiaUFnYVdZZ0tIUjVjR1Z2WmlCMllXd2dQVDA5SUZ3aWIySnFaV04wWENJcElIdGNiaUFnSUNCMllXd2dQU0IyWVd4YmMzUjViR1ZkTzF4dUlDQjlYRzVjYmlBZ2FXWWdLSFpoYkNrZ2UxeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0JzYVhSbGNtRnNPaUJtWVd4elpTeGNiaUFnSUNBZ0lIWmhiQ3hjYmlBZ0lDQjlPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjYm4xY2JseHVablZ1WTNScGIyNGdZblZwYkdSU1pXZGxlQ2gxYm1sMGN5a2dlMXh1SUNCamIyNXpkQ0J5WlNBOUlIVnVhWFJ6TG0xaGNDZ29kU2tnUFQ0Z2RTNXlaV2RsZUNrdWNtVmtkV05sS0NobUxDQnlLU0E5UGlCZ0pIdG1mU2drZTNJdWMyOTFjbU5sZlNsZ0xDQmNJbHdpS1R0Y2JpQWdjbVYwZFhKdUlGdGdYaVI3Y21WOUpHQXNJSFZ1YVhSelhUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JXRjBZMmdvYVc1d2RYUXNJSEpsWjJWNExDQm9ZVzVrYkdWeWN5a2dlMXh1SUNCamIyNXpkQ0J0WVhSamFHVnpJRDBnYVc1d2RYUXViV0YwWTJnb2NtVm5aWGdwTzF4dVhHNGdJR2xtSUNodFlYUmphR1Z6S1NCN1hHNGdJQ0FnWTI5dWMzUWdZV3hzSUQwZ2UzMDdYRzRnSUNBZ2JHVjBJRzFoZEdOb1NXNWtaWGdnUFNBeE8xeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2FTQnBiaUJvWVc1a2JHVnljeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHaGhjMDkzYmxCeWIzQmxjblI1S0doaGJtUnNaWEp6TENCcEtTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQm9JRDBnYUdGdVpHeGxjbk5iYVYwc1hHNGdJQ0FnSUNBZ0lDQWdaM0p2ZFhCeklEMGdhQzVuY205MWNITWdQeUJvTG1keWIzVndjeUFySURFZ09pQXhPMXh1SUNBZ0lDQWdJQ0JwWmlBb0lXZ3ViR2wwWlhKaGJDQW1KaUJvTG5SdmEyVnVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXeHNXMmd1ZEc5clpXNHVkbUZzV3pCZFhTQTlJR2d1WkdWelpYSW9iV0YwWTJobGN5NXpiR2xqWlNodFlYUmphRWx1WkdWNExDQnRZWFJqYUVsdVpHVjRJQ3NnWjNKdmRYQnpLU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2JXRjBZMmhKYm1SbGVDQXJQU0JuY205MWNITTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJiYldGMFkyaGxjeXdnWVd4c1hUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnlaWFIxY200Z1cyMWhkR05vWlhNc0lIdDlYVHRjYmlBZ2ZWeHVmVnh1WEc1bWRXNWpkR2x2YmlCa1lYUmxWR2x0WlVaeWIyMU5ZWFJqYUdWektHMWhkR05vWlhNcElIdGNiaUFnWTI5dWMzUWdkRzlHYVdWc1pDQTlJQ2gwYjJ0bGJpa2dQVDRnZTF4dUlDQWdJSE4zYVhSamFDQW9kRzlyWlc0cElIdGNiaUFnSUNBZ0lHTmhjMlVnWENKVFhDSTZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmNJbTFwYkd4cGMyVmpiMjVrWENJN1hHNGdJQ0FnSUNCallYTmxJRndpYzF3aU9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1hDSnpaV052Ym1SY0lqdGNiaUFnSUNBZ0lHTmhjMlVnWENKdFhDSTZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmNJbTFwYm5WMFpWd2lPMXh1SUNBZ0lDQWdZMkZ6WlNCY0ltaGNJanBjYmlBZ0lDQWdJR05oYzJVZ1hDSklYQ0k2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJjSW1odmRYSmNJanRjYmlBZ0lDQWdJR05oYzJVZ1hDSmtYQ0k2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJjSW1SaGVWd2lPMXh1SUNBZ0lDQWdZMkZ6WlNCY0ltOWNJanBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRndpYjNKa2FXNWhiRndpTzF4dUlDQWdJQ0FnWTJGelpTQmNJa3hjSWpwY2JpQWdJQ0FnSUdOaGMyVWdYQ0pOWENJNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCY0ltMXZiblJvWENJN1hHNGdJQ0FnSUNCallYTmxJRndpZVZ3aU9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1hDSjVaV0Z5WENJN1hHNGdJQ0FnSUNCallYTmxJRndpUlZ3aU9seHVJQ0FnSUNBZ1kyRnpaU0JjSW1OY0lqcGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlGd2lkMlZsYTJSaGVWd2lPMXh1SUNBZ0lDQWdZMkZ6WlNCY0lsZGNJanBjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRndpZDJWbGEwNTFiV0psY2x3aU8xeHVJQ0FnSUNBZ1kyRnpaU0JjSW10Y0lqcGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlGd2lkMlZsYTFsbFlYSmNJanRjYmlBZ0lDQWdJR05oYzJVZ1hDSnhYQ0k2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJjSW5GMVlYSjBaWEpjSWp0Y2JpQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUgxY2JpQWdmVHRjYmx4dUlDQnNaWFFnZW05dVpTQTlJRzUxYkd3N1hHNGdJR3hsZENCemNHVmphV1pwWTA5bVpuTmxkRHRjYmlBZ2FXWWdLQ0ZwYzFWdVpHVm1hVzVsWkNodFlYUmphR1Z6TG5vcEtTQjdYRzRnSUNBZ2VtOXVaU0E5SUVsQlRrRmFiMjVsTG1OeVpXRjBaU2h0WVhSamFHVnpMbm9wTzF4dUlDQjlYRzVjYmlBZ2FXWWdLQ0ZwYzFWdVpHVm1hVzVsWkNodFlYUmphR1Z6TGxvcEtTQjdYRzRnSUNBZ2FXWWdLQ0Y2YjI1bEtTQjdYRzRnSUNBZ0lDQjZiMjVsSUQwZ2JtVjNJRVpwZUdWa1QyWm1jMlYwV205dVpTaHRZWFJqYUdWekxsb3BPMXh1SUNBZ0lIMWNiaUFnSUNCemNHVmphV1pwWTA5bVpuTmxkQ0E5SUcxaGRHTm9aWE11V2p0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2doYVhOVmJtUmxabWx1WldRb2JXRjBZMmhsY3k1eEtTa2dlMXh1SUNBZ0lHMWhkR05vWlhNdVRTQTlJQ2h0WVhSamFHVnpMbkVnTFNBeEtTQXFJRE1nS3lBeE8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0NGcGMxVnVaR1ZtYVc1bFpDaHRZWFJqYUdWekxtZ3BLU0I3WEc0Z0lDQWdhV1lnS0cxaGRHTm9aWE11YUNBOElERXlJQ1ltSUcxaGRHTm9aWE11WVNBOVBUMGdNU2tnZTF4dUlDQWdJQ0FnYldGMFkyaGxjeTVvSUNzOUlERXlPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9iV0YwWTJobGN5NW9JRDA5UFNBeE1pQW1KaUJ0WVhSamFHVnpMbUVnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJRzFoZEdOb1pYTXVhQ0E5SURBN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2FXWWdLRzFoZEdOb1pYTXVSeUE5UFQwZ01DQW1KaUJ0WVhSamFHVnpMbmtwSUh0Y2JpQWdJQ0J0WVhSamFHVnpMbmtnUFNBdGJXRjBZMmhsY3k1NU8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0NGcGMxVnVaR1ZtYVc1bFpDaHRZWFJqYUdWekxuVXBLU0I3WEc0Z0lDQWdiV0YwWTJobGN5NVRJRDBnY0dGeWMyVk5hV3hzYVhNb2JXRjBZMmhsY3k1MUtUdGNiaUFnZlZ4dVhHNGdJR052Ym5OMElIWmhiSE1nUFNCUFltcGxZM1F1YTJWNWN5aHRZWFJqYUdWektTNXlaV1IxWTJVb0tISXNJR3NwSUQwK0lIdGNiaUFnSUNCamIyNXpkQ0JtSUQwZ2RHOUdhV1ZzWkNocktUdGNiaUFnSUNCcFppQW9aaWtnZTF4dUlDQWdJQ0FnY2x0bVhTQTlJRzFoZEdOb1pYTmJhMTA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlISTdYRzRnSUgwc0lIdDlLVHRjYmx4dUlDQnlaWFIxY200Z1czWmhiSE1zSUhwdmJtVXNJSE53WldOcFptbGpUMlptYzJWMFhUdGNibjFjYmx4dWJHVjBJR1IxYlcxNVJHRjBaVlJwYldWRFlXTm9aU0E5SUc1MWJHdzdYRzVjYm1aMWJtTjBhVzl1SUdkbGRFUjFiVzE1UkdGMFpWUnBiV1VvS1NCN1hHNGdJR2xtSUNnaFpIVnRiWGxFWVhSbFZHbHRaVU5oWTJobEtTQjdYRzRnSUNBZ1pIVnRiWGxFWVhSbFZHbHRaVU5oWTJobElEMGdSR0YwWlZScGJXVXVabkp2YlUxcGJHeHBjeWd4TlRVMU5UVTFOVFUxTlRVMUtUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQmtkVzF0ZVVSaGRHVlVhVzFsUTJGamFHVTdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHMWhlV0psUlhod1lXNWtUV0ZqY205VWIydGxiaWgwYjJ0bGJpd2diRzlqWVd4bEtTQjdYRzRnSUdsbUlDaDBiMnRsYmk1c2FYUmxjbUZzS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJ2YTJWdU8xeHVJQ0I5WEc1Y2JpQWdZMjl1YzNRZ1ptOXliV0YwVDNCMGN5QTlJRVp2Y20xaGRIUmxjaTV0WVdOeWIxUnZhMlZ1Vkc5R2IzSnRZWFJQY0hSektIUnZhMlZ1TG5aaGJDazdYRzVjYmlBZ2FXWWdLQ0ZtYjNKdFlYUlBjSFJ6S1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJ2YTJWdU8xeHVJQ0I5WEc1Y2JpQWdZMjl1YzNRZ1ptOXliV0YwZEdWeUlEMGdSbTl5YldGMGRHVnlMbU55WldGMFpTaHNiMk5oYkdVc0lHWnZjbTFoZEU5d2RITXBPMXh1SUNCamIyNXpkQ0J3WVhKMGN5QTlJR1p2Y20xaGRIUmxjaTVtYjNKdFlYUkVZWFJsVkdsdFpWQmhjblJ6S0dkbGRFUjFiVzE1UkdGMFpWUnBiV1VvS1NrN1hHNWNiaUFnWTI5dWMzUWdkRzlyWlc1eklEMGdjR0Z5ZEhNdWJXRndLQ2h3S1NBOVBpQjBiMnRsYmtadmNsQmhjblFvY0N3Z2JHOWpZV3hsTENCbWIzSnRZWFJQY0hSektTazdYRzVjYmlBZ2FXWWdLSFJ2YTJWdWN5NXBibU5zZFdSbGN5aDFibVJsWm1sdVpXUXBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUnZhMlZ1TzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhSdmEyVnVjenRjYm4xY2JseHVablZ1WTNScGIyNGdaWGh3WVc1a1RXRmpjbTlVYjJ0bGJuTW9kRzlyWlc1ekxDQnNiMk5oYkdVcElIdGNiaUFnY21WMGRYSnVJRUZ5Y21GNUxuQnliM1J2ZEhsd1pTNWpiMjVqWVhRb0xpNHVkRzlyWlc1ekxtMWhjQ2dvZENrZ1BUNGdiV0Y1WW1WRmVIQmhibVJOWVdOeWIxUnZhMlZ1S0hRc0lHeHZZMkZzWlNrcEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJsZUhCc1lXbHVSbkp2YlZSdmEyVnVjeWhzYjJOaGJHVXNJR2x1Y0hWMExDQm1iM0p0WVhRcElIdGNiaUFnWTI5dWMzUWdkRzlyWlc1eklEMGdaWGh3WVc1a1RXRmpjbTlVYjJ0bGJuTW9SbTl5YldGMGRHVnlMbkJoY25ObFJtOXliV0YwS0dadmNtMWhkQ2tzSUd4dlkyRnNaU2tzWEc0Z0lDQWdkVzVwZEhNZ1BTQjBiMnRsYm5NdWJXRndLQ2gwS1NBOVBpQjFibWwwUm05eVZHOXJaVzRvZEN3Z2JHOWpZV3hsS1Nrc1hHNGdJQ0FnWkdsemNYVmhiR2xtZVdsdVoxVnVhWFFnUFNCMWJtbDBjeTVtYVc1a0tDaDBLU0E5UGlCMExtbHVkbUZzYVdSU1pXRnpiMjRwTzF4dVhHNGdJR2xtSUNoa2FYTnhkV0ZzYVdaNWFXNW5WVzVwZENrZ2UxeHVJQ0FnSUhKbGRIVnliaUI3SUdsdWNIVjBMQ0IwYjJ0bGJuTXNJR2x1ZG1Gc2FXUlNaV0Z6YjI0NklHUnBjM0YxWVd4cFpubHBibWRWYm1sMExtbHVkbUZzYVdSU1pXRnpiMjRnZlR0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCamIyNXpkQ0JiY21WblpYaFRkSEpwYm1jc0lHaGhibVJzWlhKelhTQTlJR0oxYVd4a1VtVm5aWGdvZFc1cGRITXBMRnh1SUNBZ0lDQWdjbVZuWlhnZ1BTQlNaV2RGZUhBb2NtVm5aWGhUZEhKcGJtY3NJRndpYVZ3aUtTeGNiaUFnSUNBZ0lGdHlZWGROWVhSamFHVnpMQ0J0WVhSamFHVnpYU0E5SUcxaGRHTm9LR2x1Y0hWMExDQnlaV2RsZUN3Z2FHRnVaR3hsY25NcExGeHVJQ0FnSUNBZ1czSmxjM1ZzZEN3Z2VtOXVaU3dnYzNCbFkybG1hV05QWm1aelpYUmRJRDBnYldGMFkyaGxjMXh1SUNBZ0lDQWdJQ0EvSUdSaGRHVlVhVzFsUm5KdmJVMWhkR05vWlhNb2JXRjBZMmhsY3lsY2JpQWdJQ0FnSUNBZ09pQmJiblZzYkN3Z2JuVnNiQ3dnZFc1a1pXWnBibVZrWFR0Y2JpQWdJQ0JwWmlBb2FHRnpUM2R1VUhKdmNHVnlkSGtvYldGMFkyaGxjeXdnWENKaFhDSXBJQ1ltSUdoaGMwOTNibEJ5YjNCbGNuUjVLRzFoZEdOb1pYTXNJRndpU0Z3aUtTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRU52Ym1ac2FXTjBhVzVuVTNCbFkybG1hV05oZEdsdmJrVnljbTl5S0Z4dUlDQWdJQ0FnSUNCY0lrTmhiaWQwSUdsdVkyeDFaR1VnYldWeWFXUnBaVzBnZDJobGJpQnpjR1ZqYVdaNWFXNW5JREkwTFdodmRYSWdabTl5YldGMFhDSmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUI3SUdsdWNIVjBMQ0IwYjJ0bGJuTXNJSEpsWjJWNExDQnlZWGROWVhSamFHVnpMQ0J0WVhSamFHVnpMQ0J5WlhOMWJIUXNJSHB2Ym1Vc0lITndaV05wWm1salQyWm1jMlYwSUgwN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIQmhjbk5sUm5KdmJWUnZhMlZ1Y3loc2IyTmhiR1VzSUdsdWNIVjBMQ0JtYjNKdFlYUXBJSHRjYmlBZ1kyOXVjM1FnZXlCeVpYTjFiSFFzSUhwdmJtVXNJSE53WldOcFptbGpUMlptYzJWMExDQnBiblpoYkdsa1VtVmhjMjl1SUgwZ1BTQmxlSEJzWVdsdVJuSnZiVlJ2YTJWdWN5aHNiMk5oYkdVc0lHbHVjSFYwTENCbWIzSnRZWFFwTzF4dUlDQnlaWFIxY200Z1czSmxjM1ZzZEN3Z2VtOXVaU3dnYzNCbFkybG1hV05QWm1aelpYUXNJR2x1ZG1Gc2FXUlNaV0Z6YjI1ZE8xeHVmVnh1SWl3Z0ltbHRjRzl5ZENCN1hHNGdJR2x1ZEdWblpYSkNaWFIzWldWdUxGeHVJQ0JwYzB4bFlYQlpaV0Z5TEZ4dUlDQjBhVzFsVDJKcVpXTjBMRnh1SUNCa1lYbHpTVzVaWldGeUxGeHVJQ0JrWVhselNXNU5iMjUwYUN4Y2JpQWdkMlZsYTNOSmJsZGxaV3RaWldGeUxGeHVJQ0JwYzBsdWRHVm5aWElzWEc1OUlHWnliMjBnWENJdUwzVjBhV3d1YW5OY0lqdGNibWx0Y0c5eWRDQkpiblpoYkdsa0lHWnliMjBnWENJdUwybHVkbUZzYVdRdWFuTmNJanRjYmx4dVkyOXVjM1FnYm05dVRHVmhjRXhoWkdSbGNpQTlJRnN3TENBek1Td2dOVGtzSURrd0xDQXhNakFzSURFMU1Td2dNVGd4TENBeU1USXNJREkwTXl3Z01qY3pMQ0F6TURRc0lETXpORjBzWEc0Z0lHeGxZWEJNWVdSa1pYSWdQU0JiTUN3Z016RXNJRFl3TENBNU1Td2dNVEl4TENBeE5USXNJREU0TWl3Z01qRXpMQ0F5TkRRc0lESTNOQ3dnTXpBMUxDQXpNelZkTzF4dVhHNW1kVzVqZEdsdmJpQjFibWwwVDNWMFQyWlNZVzVuWlNoMWJtbDBMQ0IyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnYm1WM0lFbHVkbUZzYVdRb1hHNGdJQ0FnWENKMWJtbDBJRzkxZENCdlppQnlZVzVuWlZ3aUxGeHVJQ0FnSUdCNWIzVWdjM0JsWTJsbWFXVmtJQ1I3ZG1Gc2RXVjlJQ2h2WmlCMGVYQmxJQ1I3ZEhsd1pXOW1JSFpoYkhWbGZTa2dZWE1nWVNBa2UzVnVhWFI5TENCM2FHbGphQ0JwY3lCcGJuWmhiR2xrWUZ4dUlDQXBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmtZWGxQWmxkbFpXc29lV1ZoY2l3Z2JXOXVkR2dzSUdSaGVTa2dlMXh1SUNCamIyNXpkQ0JrSUQwZ2JtVjNJRVJoZEdVb1JHRjBaUzVWVkVNb2VXVmhjaXdnYlc5dWRHZ2dMU0F4TENCa1lYa3BLVHRjYmx4dUlDQnBaaUFvZVdWaGNpQThJREV3TUNBbUppQjVaV0Z5SUQ0OUlEQXBJSHRjYmlBZ0lDQmtMbk5sZEZWVVEwWjFiR3haWldGeUtHUXVaMlYwVlZSRFJuVnNiRmxsWVhJb0tTQXRJREU1TURBcE8xeHVJQ0I5WEc1Y2JpQWdZMjl1YzNRZ2FuTWdQU0JrTG1kbGRGVlVRMFJoZVNncE8xeHVYRzRnSUhKbGRIVnliaUJxY3lBOVBUMGdNQ0EvSURjZ09pQnFjenRjYm4xY2JseHVablZ1WTNScGIyNGdZMjl0Y0hWMFpVOXlaR2x1WVd3b2VXVmhjaXdnYlc5dWRHZ3NJR1JoZVNrZ2UxeHVJQ0J5WlhSMWNtNGdaR0Y1SUNzZ0tHbHpUR1ZoY0ZsbFlYSW9lV1ZoY2lrZ1B5QnNaV0Z3VEdGa1pHVnlJRG9nYm05dVRHVmhjRXhoWkdSbGNpbGJiVzl1ZEdnZ0xTQXhYVHRjYm4xY2JseHVablZ1WTNScGIyNGdkVzVqYjIxd2RYUmxUM0prYVc1aGJDaDVaV0Z5TENCdmNtUnBibUZzS1NCN1hHNGdJR052Ym5OMElIUmhZbXhsSUQwZ2FYTk1aV0Z3V1dWaGNpaDVaV0Z5S1NBL0lHeGxZWEJNWVdSa1pYSWdPaUJ1YjI1TVpXRndUR0ZrWkdWeUxGeHVJQ0FnSUcxdmJuUm9NQ0E5SUhSaFlteGxMbVpwYm1SSmJtUmxlQ2dvYVNrZ1BUNGdhU0E4SUc5eVpHbHVZV3dwTEZ4dUlDQWdJR1JoZVNBOUlHOXlaR2x1WVd3Z0xTQjBZV0pzWlZ0dGIyNTBhREJkTzF4dUlDQnlaWFIxY200Z2V5QnRiMjUwYURvZ2JXOXVkR2d3SUNzZ01Td2daR0Y1SUgwN1hHNTlYRzVjYmk4cUtseHVJQ29nUUhCeWFYWmhkR1ZjYmlBcUwxeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaM0psWjI5eWFXRnVWRzlYWldWcktHZHlaV2RQWW1vcElIdGNiaUFnWTI5dWMzUWdleUI1WldGeUxDQnRiMjUwYUN3Z1pHRjVJSDBnUFNCbmNtVm5UMkpxTEZ4dUlDQWdJRzl5WkdsdVlXd2dQU0JqYjIxd2RYUmxUM0prYVc1aGJDaDVaV0Z5TENCdGIyNTBhQ3dnWkdGNUtTeGNiaUFnSUNCM1pXVnJaR0Y1SUQwZ1pHRjVUMlpYWldWcktIbGxZWElzSUcxdmJuUm9MQ0JrWVhrcE8xeHVYRzRnSUd4bGRDQjNaV1ZyVG5WdFltVnlJRDBnVFdGMGFDNW1iRzl2Y2lnb2IzSmthVzVoYkNBdElIZGxaV3RrWVhrZ0t5QXhNQ2tnTHlBM0tTeGNiaUFnSUNCM1pXVnJXV1ZoY2p0Y2JseHVJQ0JwWmlBb2QyVmxhMDUxYldKbGNpQThJREVwSUh0Y2JpQWdJQ0IzWldWcldXVmhjaUE5SUhsbFlYSWdMU0F4TzF4dUlDQWdJSGRsWld0T2RXMWlaWElnUFNCM1pXVnJjMGx1VjJWbGExbGxZWElvZDJWbGExbGxZWElwTzF4dUlDQjlJR1ZzYzJVZ2FXWWdLSGRsWld0T2RXMWlaWElnUGlCM1pXVnJjMGx1VjJWbGExbGxZWElvZVdWaGNpa3BJSHRjYmlBZ0lDQjNaV1ZyV1dWaGNpQTlJSGxsWVhJZ0t5QXhPMXh1SUNBZ0lIZGxaV3RPZFcxaVpYSWdQU0F4TzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhkbFpXdFpaV0Z5SUQwZ2VXVmhjanRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUI3SUhkbFpXdFpaV0Z5TENCM1pXVnJUblZ0WW1WeUxDQjNaV1ZyWkdGNUxDQXVMaTUwYVcxbFQySnFaV04wS0dkeVpXZFBZbW9wSUgwN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIzWldWclZHOUhjbVZuYjNKcFlXNG9kMlZsYTBSaGRHRXBJSHRjYmlBZ1kyOXVjM1FnZXlCM1pXVnJXV1ZoY2l3Z2QyVmxhMDUxYldKbGNpd2dkMlZsYTJSaGVTQjlJRDBnZDJWbGEwUmhkR0VzWEc0Z0lDQWdkMlZsYTJSaGVVOW1TbUZ1TkNBOUlHUmhlVTltVjJWbGF5aDNaV1ZyV1dWaGNpd2dNU3dnTkNrc1hHNGdJQ0FnZVdWaGNrbHVSR0Y1Y3lBOUlHUmhlWE5KYmxsbFlYSW9kMlZsYTFsbFlYSXBPMXh1WEc0Z0lHeGxkQ0J2Y21ScGJtRnNJRDBnZDJWbGEwNTFiV0psY2lBcUlEY2dLeUIzWldWclpHRjVJQzBnZDJWbGEyUmhlVTltU21GdU5DQXRJRE1zWEc0Z0lDQWdlV1ZoY2p0Y2JseHVJQ0JwWmlBb2IzSmthVzVoYkNBOElERXBJSHRjYmlBZ0lDQjVaV0Z5SUQwZ2QyVmxhMWxsWVhJZ0xTQXhPMXh1SUNBZ0lHOXlaR2x1WVd3Z0t6MGdaR0Y1YzBsdVdXVmhjaWg1WldGeUtUdGNiaUFnZlNCbGJITmxJR2xtSUNodmNtUnBibUZzSUQ0Z2VXVmhja2x1UkdGNWN5a2dlMXh1SUNBZ0lIbGxZWElnUFNCM1pXVnJXV1ZoY2lBcklERTdYRzRnSUNBZ2IzSmthVzVoYkNBdFBTQmtZWGx6U1c1WlpXRnlLSGRsWld0WlpXRnlLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0I1WldGeUlEMGdkMlZsYTFsbFlYSTdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQjdJRzF2Ym5Sb0xDQmtZWGtnZlNBOUlIVnVZMjl0Y0hWMFpVOXlaR2x1WVd3b2VXVmhjaXdnYjNKa2FXNWhiQ2s3WEc0Z0lISmxkSFZ5YmlCN0lIbGxZWElzSUcxdmJuUm9MQ0JrWVhrc0lDNHVMblJwYldWUFltcGxZM1FvZDJWbGEwUmhkR0VwSUgwN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJuY21WbmIzSnBZVzVVYjA5eVpHbHVZV3dvWjNKbFowUmhkR0VwSUh0Y2JpQWdZMjl1YzNRZ2V5QjVaV0Z5TENCdGIyNTBhQ3dnWkdGNUlIMGdQU0JuY21WblJHRjBZVHRjYmlBZ1kyOXVjM1FnYjNKa2FXNWhiQ0E5SUdOdmJYQjFkR1ZQY21ScGJtRnNLSGxsWVhJc0lHMXZiblJvTENCa1lYa3BPMXh1SUNCeVpYUjFjbTRnZXlCNVpXRnlMQ0J2Y21ScGJtRnNMQ0F1TGk1MGFXMWxUMkpxWldOMEtHZHlaV2RFWVhSaEtTQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2IzSmthVzVoYkZSdlIzSmxaMjl5YVdGdUtHOXlaR2x1WVd4RVlYUmhLU0I3WEc0Z0lHTnZibk4wSUhzZ2VXVmhjaXdnYjNKa2FXNWhiQ0I5SUQwZ2IzSmthVzVoYkVSaGRHRTdYRzRnSUdOdmJuTjBJSHNnYlc5dWRHZ3NJR1JoZVNCOUlEMGdkVzVqYjIxd2RYUmxUM0prYVc1aGJDaDVaV0Z5TENCdmNtUnBibUZzS1R0Y2JpQWdjbVYwZFhKdUlIc2dlV1ZoY2l3Z2JXOXVkR2dzSUdSaGVTd2dMaTR1ZEdsdFpVOWlhbVZqZENodmNtUnBibUZzUkdGMFlTa2dmVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHaGhjMGx1ZG1Gc2FXUlhaV1ZyUkdGMFlTaHZZbW9wSUh0Y2JpQWdZMjl1YzNRZ2RtRnNhV1JaWldGeUlEMGdhWE5KYm5SbFoyVnlLRzlpYWk1M1pXVnJXV1ZoY2lrc1hHNGdJQ0FnZG1Gc2FXUlhaV1ZySUQwZ2FXNTBaV2RsY2tKbGRIZGxaVzRvYjJKcUxuZGxaV3RPZFcxaVpYSXNJREVzSUhkbFpXdHpTVzVYWldWcldXVmhjaWh2WW1vdWQyVmxhMWxsWVhJcEtTeGNiaUFnSUNCMllXeHBaRmRsWld0a1lYa2dQU0JwYm5SbFoyVnlRbVYwZDJWbGJpaHZZbW91ZDJWbGEyUmhlU3dnTVN3Z055azdYRzVjYmlBZ2FXWWdLQ0YyWVd4cFpGbGxZWElwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkVzVwZEU5MWRFOW1VbUZ1WjJVb1hDSjNaV1ZyV1dWaGNsd2lMQ0J2WW1vdWQyVmxhMWxsWVhJcE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0NGMllXeHBaRmRsWldzcElIdGNiaUFnSUNCeVpYUjFjbTRnZFc1cGRFOTFkRTltVW1GdVoyVW9YQ0ozWldWclhDSXNJRzlpYWk1M1pXVnJLVHRjYmlBZ2ZTQmxiSE5sSUdsbUlDZ2hkbUZzYVdSWFpXVnJaR0Y1S1NCN1hHNGdJQ0FnY21WMGRYSnVJSFZ1YVhSUGRYUlBabEpoYm1kbEtGd2lkMlZsYTJSaGVWd2lMQ0J2WW1vdWQyVmxhMlJoZVNrN1hHNGdJSDBnWld4elpTQnlaWFIxY200Z1ptRnNjMlU3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm9ZWE5KYm5aaGJHbGtUM0prYVc1aGJFUmhkR0VvYjJKcUtTQjdYRzRnSUdOdmJuTjBJSFpoYkdsa1dXVmhjaUE5SUdselNXNTBaV2RsY2lodlltb3VlV1ZoY2lrc1hHNGdJQ0FnZG1Gc2FXUlBjbVJwYm1Gc0lEMGdhVzUwWldkbGNrSmxkSGRsWlc0b2IySnFMbTl5WkdsdVlXd3NJREVzSUdSaGVYTkpibGxsWVhJb2IySnFMbmxsWVhJcEtUdGNibHh1SUNCcFppQW9JWFpoYkdsa1dXVmhjaWtnZTF4dUlDQWdJSEpsZEhWeWJpQjFibWwwVDNWMFQyWlNZVzVuWlNoY0lubGxZWEpjSWl3Z2IySnFMbmxsWVhJcE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0NGMllXeHBaRTl5WkdsdVlXd3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RXNXBkRTkxZEU5bVVtRnVaMlVvWENKdmNtUnBibUZzWENJc0lHOWlhaTV2Y21ScGJtRnNLVHRjYmlBZ2ZTQmxiSE5sSUhKbGRIVnliaUJtWVd4elpUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdoaGMwbHVkbUZzYVdSSGNtVm5iM0pwWVc1RVlYUmhLRzlpYWlrZ2UxeHVJQ0JqYjI1emRDQjJZV3hwWkZsbFlYSWdQU0JwYzBsdWRHVm5aWElvYjJKcUxubGxZWElwTEZ4dUlDQWdJSFpoYkdsa1RXOXVkR2dnUFNCcGJuUmxaMlZ5UW1WMGQyVmxiaWh2WW1vdWJXOXVkR2dzSURFc0lERXlLU3hjYmlBZ0lDQjJZV3hwWkVSaGVTQTlJR2x1ZEdWblpYSkNaWFIzWldWdUtHOWlhaTVrWVhrc0lERXNJR1JoZVhOSmJrMXZiblJvS0c5aWFpNTVaV0Z5TENCdlltb3ViVzl1ZEdncEtUdGNibHh1SUNCcFppQW9JWFpoYkdsa1dXVmhjaWtnZTF4dUlDQWdJSEpsZEhWeWJpQjFibWwwVDNWMFQyWlNZVzVuWlNoY0lubGxZWEpjSWl3Z2IySnFMbmxsWVhJcE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0NGMllXeHBaRTF2Ym5Sb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhWdWFYUlBkWFJQWmxKaGJtZGxLRndpYlc5dWRHaGNJaXdnYjJKcUxtMXZiblJvS1R0Y2JpQWdmU0JsYkhObElHbG1JQ2doZG1Gc2FXUkVZWGtwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkVzVwZEU5MWRFOW1VbUZ1WjJVb1hDSmtZWGxjSWl3Z2IySnFMbVJoZVNrN1hHNGdJSDBnWld4elpTQnlaWFIxY200Z1ptRnNjMlU3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm9ZWE5KYm5aaGJHbGtWR2x0WlVSaGRHRW9iMkpxS1NCN1hHNGdJR052Ym5OMElIc2dhRzkxY2l3Z2JXbHVkWFJsTENCelpXTnZibVFzSUcxcGJHeHBjMlZqYjI1a0lIMGdQU0J2WW1vN1hHNGdJR052Ym5OMElIWmhiR2xrU0c5MWNpQTlYRzRnSUNBZ0lDQnBiblJsWjJWeVFtVjBkMlZsYmlob2IzVnlMQ0F3TENBeU15a2dmSHhjYmlBZ0lDQWdJQ2hvYjNWeUlEMDlQU0F5TkNBbUppQnRhVzUxZEdVZ1BUMDlJREFnSmlZZ2MyVmpiMjVrSUQwOVBTQXdJQ1ltSUcxcGJHeHBjMlZqYjI1a0lEMDlQU0F3S1N4Y2JpQWdJQ0IyWVd4cFpFMXBiblYwWlNBOUlHbHVkR1ZuWlhKQ1pYUjNaV1Z1S0cxcGJuVjBaU3dnTUN3Z05Ua3BMRnh1SUNBZ0lIWmhiR2xrVTJWamIyNWtJRDBnYVc1MFpXZGxja0psZEhkbFpXNG9jMlZqYjI1a0xDQXdMQ0ExT1Nrc1hHNGdJQ0FnZG1Gc2FXUk5hV3hzYVhObFkyOXVaQ0E5SUdsdWRHVm5aWEpDWlhSM1pXVnVLRzFwYkd4cGMyVmpiMjVrTENBd0xDQTVPVGtwTzF4dVhHNGdJR2xtSUNnaGRtRnNhV1JJYjNWeUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhWdWFYUlBkWFJQWmxKaGJtZGxLRndpYUc5MWNsd2lMQ0JvYjNWeUtUdGNiaUFnZlNCbGJITmxJR2xtSUNnaGRtRnNhV1JOYVc1MWRHVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2RXNXBkRTkxZEU5bVVtRnVaMlVvWENKdGFXNTFkR1ZjSWl3Z2JXbHVkWFJsS1R0Y2JpQWdmU0JsYkhObElHbG1JQ2doZG1Gc2FXUlRaV052Ym1RcElIdGNiaUFnSUNCeVpYUjFjbTRnZFc1cGRFOTFkRTltVW1GdVoyVW9YQ0p6WldOdmJtUmNJaXdnYzJWamIyNWtLVHRjYmlBZ2ZTQmxiSE5sSUdsbUlDZ2hkbUZzYVdSTmFXeHNhWE5sWTI5dVpDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMWJtbDBUM1YwVDJaU1lXNW5aU2hjSW0xcGJHeHBjMlZqYjI1a1hDSXNJRzFwYkd4cGMyVmpiMjVrS1R0Y2JpQWdmU0JsYkhObElISmxkSFZ5YmlCbVlXeHpaVHRjYm4xY2JpSXNJQ0pwYlhCdmNuUWdSSFZ5WVhScGIyNGdabkp2YlNCY0lpNHZaSFZ5WVhScGIyNHVhbk5jSWp0Y2JtbHRjRzl5ZENCSmJuUmxjblpoYkNCbWNtOXRJRndpTGk5cGJuUmxjblpoYkM1cWMxd2lPMXh1YVcxd2IzSjBJRk5sZEhScGJtZHpJR1p5YjIwZ1hDSXVMM05sZEhScGJtZHpMbXB6WENJN1hHNXBiWEJ2Y25RZ1NXNW1ieUJtY205dElGd2lMaTlwYm1adkxtcHpYQ0k3WEc1cGJYQnZjblFnUm05eWJXRjBkR1Z5SUdaeWIyMGdYQ0l1TDJsdGNHd3ZabTl5YldGMGRHVnlMbXB6WENJN1hHNXBiWEJ2Y25RZ1JtbDRaV1JQWm1aelpYUmFiMjVsSUdaeWIyMGdYQ0l1TDNwdmJtVnpMMlpwZUdWa1QyWm1jMlYwV205dVpTNXFjMXdpTzF4dWFXMXdiM0owSUV4dlkyRnNaU0JtY205dElGd2lMaTlwYlhCc0wyeHZZMkZzWlM1cWMxd2lPMXh1YVcxd2IzSjBJSHRjYmlBZ2FYTlZibVJsWm1sdVpXUXNYRzRnSUcxaGVXSmxRWEp5WVhrc1hHNGdJR2x6UkdGMFpTeGNiaUFnYVhOT2RXMWlaWElzWEc0Z0lHSmxjM1JDZVN4Y2JpQWdaR0Y1YzBsdVRXOXVkR2dzWEc0Z0lHUmhlWE5KYmxsbFlYSXNYRzRnSUdselRHVmhjRmxsWVhJc1hHNGdJSGRsWld0elNXNVhaV1ZyV1dWaGNpeGNiaUFnYm05eWJXRnNhWHBsVDJKcVpXTjBMRnh1SUNCeWIzVnVaRlJ2TEZ4dUlDQnZZbXBVYjB4dlkyRnNWRk1zWEc0Z0lIQmhaRk4wWVhKMExGeHVmU0JtY205dElGd2lMaTlwYlhCc0wzVjBhV3d1YW5OY0lqdGNibWx0Y0c5eWRDQjdJRzV2Y20xaGJHbDZaVnB2Ym1VZ2ZTQm1jbTl0SUZ3aUxpOXBiWEJzTDNwdmJtVlZkR2xzTG1welhDSTdYRzVwYlhCdmNuUWdaR2xtWmlCbWNtOXRJRndpTGk5cGJYQnNMMlJwWm1ZdWFuTmNJanRjYm1sdGNHOXlkQ0I3SUhCaGNuTmxVa1pETWpneU1rUmhkR1VzSUhCaGNuTmxTVk5QUkdGMFpTd2djR0Z5YzJWSVZGUlFSR0YwWlN3Z2NHRnljMlZUVVV3Z2ZTQm1jbTl0SUZ3aUxpOXBiWEJzTDNKbFoyVjRVR0Z5YzJWeUxtcHpYQ0k3WEc1cGJYQnZjblFnZXlCd1lYSnpaVVp5YjIxVWIydGxibk1zSUdWNGNHeGhhVzVHY205dFZHOXJaVzV6SUgwZ1puSnZiU0JjSWk0dmFXMXdiQzkwYjJ0bGJsQmhjbk5sY2k1cWMxd2lPMXh1YVcxd2IzSjBJSHRjYmlBZ1ozSmxaMjl5YVdGdVZHOVhaV1ZyTEZ4dUlDQjNaV1ZyVkc5SGNtVm5iM0pwWVc0c1hHNGdJR2R5WldkdmNtbGhibFJ2VDNKa2FXNWhiQ3hjYmlBZ2IzSmthVzVoYkZSdlIzSmxaMjl5YVdGdUxGeHVJQ0JvWVhOSmJuWmhiR2xrUjNKbFoyOXlhV0Z1UkdGMFlTeGNiaUFnYUdGelNXNTJZV3hwWkZkbFpXdEVZWFJoTEZ4dUlDQm9ZWE5KYm5aaGJHbGtUM0prYVc1aGJFUmhkR0VzWEc0Z0lHaGhjMGx1ZG1Gc2FXUlVhVzFsUkdGMFlTeGNibjBnWm5KdmJTQmNJaTR2YVcxd2JDOWpiMjUyWlhKemFXOXVjeTVxYzF3aU8xeHVhVzF3YjNKMElDb2dZWE1nUm05eWJXRjBjeUJtY205dElGd2lMaTlwYlhCc0wyWnZjbTFoZEhNdWFuTmNJanRjYm1sdGNHOXlkQ0I3WEc0Z0lFbHVkbUZzYVdSQmNtZDFiV1Z1ZEVWeWNtOXlMRnh1SUNCRGIyNW1iR2xqZEdsdVoxTndaV05wWm1sallYUnBiMjVGY25KdmNpeGNiaUFnU1c1MllXeHBaRlZ1YVhSRmNuSnZjaXhjYmlBZ1NXNTJZV3hwWkVSaGRHVlVhVzFsUlhKeWIzSXNYRzU5SUdaeWIyMGdYQ0l1TDJWeWNtOXljeTVxYzF3aU8xeHVhVzF3YjNKMElFbHVkbUZzYVdRZ1puSnZiU0JjSWk0dmFXMXdiQzlwYm5aaGJHbGtMbXB6WENJN1hHNWNibU52Ym5OMElFbE9Wa0ZNU1VRZ1BTQmNJa2x1ZG1Gc2FXUWdSR0YwWlZScGJXVmNJanRjYm1OdmJuTjBJRTFCV0Y5RVFWUkZJRDBnT0M0Mk5HVXhOVHRjYmx4dVpuVnVZM1JwYjI0Z2RXNXpkWEJ3YjNKMFpXUmFiMjVsS0hwdmJtVXBJSHRjYmlBZ2NtVjBkWEp1SUc1bGR5QkpiblpoYkdsa0tGd2lkVzV6ZFhCd2IzSjBaV1FnZW05dVpWd2lMQ0JnZEdobElIcHZibVVnWENJa2UzcHZibVV1Ym1GdFpYMWNJaUJwY3lCdWIzUWdjM1Z3Y0c5eWRHVmtZQ2s3WEc1OVhHNWNiaTh2SUhkbElHTmhZMmhsSUhkbFpXc2daR0YwWVNCdmJpQjBhR1VnUkZRZ2IySnFaV04wSUdGdVpDQjBhR2x6SUdsdWRHVnliV1ZrYVdGMFpYTWdkR2hsSUdOaFkyaGxYRzVtZFc1amRHbHZiaUJ3YjNOemFXSnNlVU5oWTJobFpGZGxaV3RFWVhSaEtHUjBLU0I3WEc0Z0lHbG1JQ2hrZEM1M1pXVnJSR0YwWVNBOVBUMGdiblZzYkNrZ2UxeHVJQ0FnSUdSMExuZGxaV3RFWVhSaElEMGdaM0psWjI5eWFXRnVWRzlYWldWcktHUjBMbU1wTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJrZEM1M1pXVnJSR0YwWVR0Y2JuMWNibHh1THk4Z1kyeHZibVVnY21WaGJHeDVJRzFsWVc1ekxDQmNJbTFoYTJVZ1lTQnVaWGNnYjJKcVpXTjBJSGRwZEdnZ2RHaGxjMlVnYlc5a2FXWnBZMkYwYVc5dWMxd2lMaUJoYkd3Z1hDSnpaWFIwWlhKelhDSWdjbVZoYkd4NUlIVnpaU0IwYUdselhHNHZMeUIwYnlCamNtVmhkR1VnWVNCdVpYY2diMkpxWldOMElIZG9hV3hsSUc5dWJIa2dZMmhoYm1kcGJtY2djMjl0WlNCdlppQjBhR1VnY0hKdmNHVnlkR2xsYzF4dVpuVnVZM1JwYjI0Z1kyeHZibVVvYVc1emRDd2dZV3gwY3lrZ2UxeHVJQ0JqYjI1emRDQmpkWEp5Wlc1MElEMGdlMXh1SUNBZ0lIUnpPaUJwYm5OMExuUnpMRnh1SUNBZ0lIcHZibVU2SUdsdWMzUXVlbTl1WlN4Y2JpQWdJQ0JqT2lCcGJuTjBMbU1zWEc0Z0lDQWdiem9nYVc1emRDNXZMRnh1SUNBZ0lHeHZZem9nYVc1emRDNXNiMk1zWEc0Z0lDQWdhVzUyWVd4cFpEb2dhVzV6ZEM1cGJuWmhiR2xrTEZ4dUlDQjlPMXh1SUNCeVpYUjFjbTRnYm1WM0lFUmhkR1ZVYVcxbEtIc2dMaTR1WTNWeWNtVnVkQ3dnTGk0dVlXeDBjeXdnYjJ4a09pQmpkWEp5Wlc1MElIMHBPMXh1ZlZ4dVhHNHZMeUJtYVc1a0lIUm9aU0J5YVdkb2RDQnZabVp6WlhRZ1lTQm5hWFpsYmlCc2IyTmhiQ0IwYVcxbExpQlVhR1VnYnlCcGJuQjFkQ0JwY3lCdmRYSWdaM1ZsYzNNc0lIZG9hV05vSUdSbGRHVnliV2x1WlhNZ2QyaHBZMmhjYmk4dklHOW1abk5sZENCM1pTZHNiQ0J3YVdOcklHbHVJR0Z0WW1sbmRXOTFjeUJqWVhObGN5QW9aUzVuTGlCMGFHVnlaU0JoY21VZ2RIZHZJRE1nUVUxeklHSXZZeUJHWVd4c1ltRmpheUJFVTFRcFhHNW1kVzVqZEdsdmJpQm1hWGhQWm1aelpYUW9iRzlqWVd4VVV5d2dieXdnZEhvcElIdGNiaUFnTHk4Z1QzVnlJRlZVUXlCMGFXMWxJR2x6SUdwMWMzUWdZU0JuZFdWemN5QmlaV05oZFhObElHOTFjaUJ2Wm1aelpYUWdhWE1nYW5WemRDQmhJR2QxWlhOelhHNGdJR3hsZENCMWRHTkhkV1Z6Y3lBOUlHeHZZMkZzVkZNZ0xTQnZJQ29nTmpBZ0tpQXhNREF3TzF4dVhHNGdJQzh2SUZSbGMzUWdkMmhsZEdobGNpQjBhR1VnZW05dVpTQnRZWFJqYUdWeklIUm9aU0J2Wm1aelpYUWdabTl5SUhSb2FYTWdkSE5jYmlBZ1kyOXVjM1FnYnpJZ1BTQjBlaTV2Wm1aelpYUW9kWFJqUjNWbGMzTXBPMXh1WEc0Z0lDOHZJRWxtSUhOdkxDQnZabVp6WlhRZ1pHbGtiaWQwSUdOb1lXNW5aU0JoYm1RZ2QyVW5jbVVnWkc5dVpWeHVJQ0JwWmlBb2J5QTlQVDBnYnpJcElIdGNiaUFnSUNCeVpYUjFjbTRnVzNWMFkwZDFaWE56TENCdlhUdGNiaUFnZlZ4dVhHNGdJQzh2SUVsbUlHNXZkQ3dnWTJoaGJtZGxJSFJvWlNCMGN5QmllU0IwYUdVZ1pHbG1abVZ5Wlc1alpTQnBiaUIwYUdVZ2IyWm1jMlYwWEc0Z0lIVjBZMGQxWlhOeklDMDlJQ2h2TWlBdElHOHBJQ29nTmpBZ0tpQXhNREF3TzF4dVhHNGdJQzh2SUVsbUlIUm9ZWFFnWjJsMlpYTWdkWE1nZEdobElHeHZZMkZzSUhScGJXVWdkMlVnZDJGdWRDd2dkMlVuY21VZ1pHOXVaVnh1SUNCamIyNXpkQ0J2TXlBOUlIUjZMbTltWm5ObGRDaDFkR05IZFdWemN5azdYRzRnSUdsbUlDaHZNaUE5UFQwZ2J6TXBJSHRjYmlBZ0lDQnlaWFIxY200Z1czVjBZMGQxWlhOekxDQnZNbDA3WEc0Z0lIMWNibHh1SUNBdkx5QkpaaUJwZENkeklHUnBabVpsY21WdWRDd2dkMlVuY21VZ2FXNGdZU0JvYjJ4bElIUnBiV1V1SUZSb1pTQnZabVp6WlhRZ2FHRnpJR05vWVc1blpXUXNJR0oxZENCMGFHVWdkMlVnWkc5dUozUWdZV1JxZFhOMElIUm9aU0IwYVcxbFhHNGdJSEpsZEhWeWJpQmJiRzlqWVd4VVV5QXRJRTFoZEdndWJXbHVLRzh5TENCdk15a2dLaUEyTUNBcUlERXdNREFzSUUxaGRHZ3ViV0Y0S0c4eUxDQnZNeWxkTzF4dWZWeHVYRzR2THlCamIyNTJaWEowSUdGdUlHVndiMk5vSUhScGJXVnpkR0Z0Y0NCcGJuUnZJR0VnWTJGc1pXNWtZWElnYjJKcVpXTjBJSGRwZEdnZ2RHaGxJR2RwZG1WdUlHOW1abk5sZEZ4dVpuVnVZM1JwYjI0Z2RITlViMDlpYWloMGN5d2diMlptYzJWMEtTQjdYRzRnSUhSeklDczlJRzltWm5ObGRDQXFJRFl3SUNvZ01UQXdNRHRjYmx4dUlDQmpiMjV6ZENCa0lEMGdibVYzSUVSaGRHVW9kSE1wTzF4dVhHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2VXVmhjam9nWkM1blpYUlZWRU5HZFd4c1dXVmhjaWdwTEZ4dUlDQWdJRzF2Ym5Sb09pQmtMbWRsZEZWVVEwMXZiblJvS0NrZ0t5QXhMRnh1SUNBZ0lHUmhlVG9nWkM1blpYUlZWRU5FWVhSbEtDa3NYRzRnSUNBZ2FHOTFjam9nWkM1blpYUlZWRU5JYjNWeWN5Z3BMRnh1SUNBZ0lHMXBiblYwWlRvZ1pDNW5aWFJWVkVOTmFXNTFkR1Z6S0Nrc1hHNGdJQ0FnYzJWamIyNWtPaUJrTG1kbGRGVlVRMU5sWTI5dVpITW9LU3hjYmlBZ0lDQnRhV3hzYVhObFkyOXVaRG9nWkM1blpYUlZWRU5OYVd4c2FYTmxZMjl1WkhNb0tTeGNiaUFnZlR0Y2JuMWNibHh1THk4Z1kyOXVkbVZ5ZENCaElHTmhiR1Z1WkdGeUlHOWlhbVZqZENCMGJ5QmhJR1Z3YjJOb0lIUnBiV1Z6ZEdGdGNGeHVablZ1WTNScGIyNGdiMkpxVkc5VVV5aHZZbW9zSUc5bVpuTmxkQ3dnZW05dVpTa2dlMXh1SUNCeVpYUjFjbTRnWm1sNFQyWm1jMlYwS0c5aWFsUnZURzlqWVd4VVV5aHZZbW9wTENCdlptWnpaWFFzSUhwdmJtVXBPMXh1ZlZ4dVhHNHZMeUJqY21WaGRHVWdZU0J1WlhjZ1JGUWdhVzV6ZEdGdVkyVWdZbmtnWVdSa2FXNW5JR0VnWkhWeVlYUnBiMjRzSUdGa2FuVnpkR2x1WnlCbWIzSWdSRk5VYzF4dVpuVnVZM1JwYjI0Z1lXUnFkWE4wVkdsdFpTaHBibk4wTENCa2RYSXBJSHRjYmlBZ1kyOXVjM1FnYjFCeVpTQTlJR2x1YzNRdWJ5eGNiaUFnSUNCNVpXRnlJRDBnYVc1emRDNWpMbmxsWVhJZ0t5Qk5ZWFJvTG5SeWRXNWpLR1IxY2k1NVpXRnljeWtzWEc0Z0lDQWdiVzl1ZEdnZ1BTQnBibk4wTG1NdWJXOXVkR2dnS3lCTllYUm9MblJ5ZFc1aktHUjFjaTV0YjI1MGFITXBJQ3NnVFdGMGFDNTBjblZ1WXloa2RYSXVjWFZoY25SbGNuTXBJQ29nTXl4Y2JpQWdJQ0JqSUQwZ2UxeHVJQ0FnSUNBZ0xpNHVhVzV6ZEM1akxGeHVJQ0FnSUNBZ2VXVmhjaXhjYmlBZ0lDQWdJRzF2Ym5Sb0xGeHVJQ0FnSUNBZ1pHRjVPbHh1SUNBZ0lDQWdJQ0JOWVhSb0xtMXBiaWhwYm5OMExtTXVaR0Y1TENCa1lYbHpTVzVOYjI1MGFDaDVaV0Z5TENCdGIyNTBhQ2twSUN0Y2JpQWdJQ0FnSUNBZ1RXRjBhQzUwY25WdVl5aGtkWEl1WkdGNWN5a2dLMXh1SUNBZ0lDQWdJQ0JOWVhSb0xuUnlkVzVqS0dSMWNpNTNaV1ZyY3lrZ0tpQTNMRnh1SUNBZ0lIMHNYRzRnSUNBZ2JXbHNiR2x6Vkc5QlpHUWdQU0JFZFhKaGRHbHZiaTVtY205dFQySnFaV04wS0h0Y2JpQWdJQ0FnSUhsbFlYSnpPaUJrZFhJdWVXVmhjbk1nTFNCTllYUm9MblJ5ZFc1aktHUjFjaTU1WldGeWN5a3NYRzRnSUNBZ0lDQnhkV0Z5ZEdWeWN6b2daSFZ5TG5GMVlYSjBaWEp6SUMwZ1RXRjBhQzUwY25WdVl5aGtkWEl1Y1hWaGNuUmxjbk1wTEZ4dUlDQWdJQ0FnYlc5dWRHaHpPaUJrZFhJdWJXOXVkR2h6SUMwZ1RXRjBhQzUwY25WdVl5aGtkWEl1Ylc5dWRHaHpLU3hjYmlBZ0lDQWdJSGRsWld0ek9pQmtkWEl1ZDJWbGEzTWdMU0JOWVhSb0xuUnlkVzVqS0dSMWNpNTNaV1ZyY3lrc1hHNGdJQ0FnSUNCa1lYbHpPaUJrZFhJdVpHRjVjeUF0SUUxaGRHZ3VkSEoxYm1Nb1pIVnlMbVJoZVhNcExGeHVJQ0FnSUNBZ2FHOTFjbk02SUdSMWNpNW9iM1Z5Y3l4Y2JpQWdJQ0FnSUcxcGJuVjBaWE02SUdSMWNpNXRhVzUxZEdWekxGeHVJQ0FnSUNBZ2MyVmpiMjVrY3pvZ1pIVnlMbk5sWTI5dVpITXNYRzRnSUNBZ0lDQnRhV3hzYVhObFkyOXVaSE02SUdSMWNpNXRhV3hzYVhObFkyOXVaSE1zWEc0Z0lDQWdmU2t1WVhNb1hDSnRhV3hzYVhObFkyOXVaSE5jSWlrc1hHNGdJQ0FnYkc5allXeFVVeUE5SUc5aWFsUnZURzlqWVd4VVV5aGpLVHRjYmx4dUlDQnNaWFFnVzNSekxDQnZYU0E5SUdacGVFOW1abk5sZENoc2IyTmhiRlJUTENCdlVISmxMQ0JwYm5OMExucHZibVVwTzF4dVhHNGdJR2xtSUNodGFXeHNhWE5VYjBGa1pDQWhQVDBnTUNrZ2UxeHVJQ0FnSUhSeklDczlJRzFwYkd4cGMxUnZRV1JrTzF4dUlDQWdJQzh2SUhSb1lYUWdZMjkxYkdRZ2FHRjJaU0JqYUdGdVoyVmtJSFJvWlNCdlptWnpaWFFnWW5rZ1oyOXBibWNnYjNabGNpQmhJRVJUVkN3Z1luVjBJSGRsSUhkaGJuUWdkRzhnYTJWbGNDQjBhR1VnZEhNZ2RHaGxJSE5oYldWY2JpQWdJQ0J2SUQwZ2FXNXpkQzU2YjI1bExtOW1abk5sZENoMGN5azdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdleUIwY3l3Z2J5QjlPMXh1ZlZ4dVhHNHZMeUJvWld4d1pYSWdkWE5sWm5Wc0lHbHVJSFIxY201cGJtY2dkR2hsSUhKbGMzVnNkSE1nYjJZZ2NHRnljMmx1WnlCcGJuUnZJSEpsWVd3Z1pHRjBaWE5jYmk4dklHSjVJR2hoYm1Sc2FXNW5JSFJvWlNCNmIyNWxJRzl3ZEdsdmJuTmNibVoxYm1OMGFXOXVJSEJoY25ObFJHRjBZVlJ2UkdGMFpWUnBiV1VvY0dGeWMyVmtMQ0J3WVhKelpXUmFiMjVsTENCdmNIUnpMQ0JtYjNKdFlYUXNJSFJsZUhRc0lITndaV05wWm1salQyWm1jMlYwS1NCN1hHNGdJR052Ym5OMElIc2djMlYwV205dVpTd2dlbTl1WlNCOUlEMGdiM0IwY3p0Y2JpQWdhV1lnS0hCaGNuTmxaQ0FtSmlCUFltcGxZM1F1YTJWNWN5aHdZWEp6WldRcExteGxibWQwYUNBaFBUMGdNQ2tnZTF4dUlDQWdJR052Ym5OMElHbHVkR1Z5Y0hKbGRHRjBhVzl1V205dVpTQTlJSEJoY25ObFpGcHZibVVnZkh3Z2VtOXVaU3hjYmlBZ0lDQWdJR2x1YzNRZ1BTQkVZWFJsVkdsdFpTNW1jbTl0VDJKcVpXTjBLSEJoY25ObFpDd2dlMXh1SUNBZ0lDQWdJQ0F1TGk1dmNIUnpMRnh1SUNBZ0lDQWdJQ0I2YjI1bE9pQnBiblJsY25CeVpYUmhkR2x2YmxwdmJtVXNYRzRnSUNBZ0lDQWdJSE53WldOcFptbGpUMlptYzJWMExGeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2NtVjBkWEp1SUhObGRGcHZibVVnUHlCcGJuTjBJRG9nYVc1emRDNXpaWFJhYjI1bEtIcHZibVVwTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJFWVhSbFZHbHRaUzVwYm5aaGJHbGtLRnh1SUNBZ0lDQWdibVYzSUVsdWRtRnNhV1FvWENKMWJuQmhjbk5oWW14bFhDSXNJR0IwYUdVZ2FXNXdkWFFnWENJa2UzUmxlSFI5WENJZ1kyRnVKM1FnWW1VZ2NHRnljMlZrSUdGeklDUjdabTl5YldGMGZXQXBYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZWeHVYRzR2THlCcFppQjViM1VnZDJGdWRDQjBieUJ2ZFhSd2RYUWdZU0IwWldOb2JtbGpZV3dnWm05eWJXRjBJQ2hsTG1jdUlGSkdReUF5T0RJeUtTd2dkR2hwY3lCb1pXeHdaWEpjYmk4dklHaGxiSEJ6SUdoaGJtUnNaU0IwYUdVZ1pHVjBZV2xzYzF4dVpuVnVZM1JwYjI0Z2RHOVVaV05vUm05eWJXRjBLR1IwTENCbWIzSnRZWFFzSUdGc2JHOTNXaUE5SUhSeWRXVXBJSHRjYmlBZ2NtVjBkWEp1SUdSMExtbHpWbUZzYVdSY2JpQWdJQ0EvSUVadmNtMWhkSFJsY2k1amNtVmhkR1VvVEc5allXeGxMbU55WldGMFpTaGNJbVZ1TFZWVFhDSXBMQ0I3WEc0Z0lDQWdJQ0FnSUdGc2JHOTNXaXhjYmlBZ0lDQWdJQ0FnWm05eVkyVlRhVzF3YkdVNklIUnlkV1VzWEc0Z0lDQWdJQ0I5S1M1bWIzSnRZWFJFWVhSbFZHbHRaVVp5YjIxVGRISnBibWNvWkhRc0lHWnZjbTFoZENsY2JpQWdJQ0E2SUc1MWJHdzdYRzU5WEc1Y2JtWjFibU4wYVc5dUlIUnZTVk5QUkdGMFpTaHZMQ0JsZUhSbGJtUmxaQ2tnZTF4dUlDQmpiMjV6ZENCc2IyNW5SbTl5YldGMElEMGdieTVqTG5sbFlYSWdQaUE1T1RrNUlIeDhJRzh1WXk1NVpXRnlJRHdnTUR0Y2JpQWdiR1YwSUdNZ1BTQmNJbHdpTzF4dUlDQnBaaUFvYkc5dVowWnZjbTFoZENBbUppQnZMbU11ZVdWaGNpQStQU0F3S1NCaklDczlJRndpSzF3aU8xeHVJQ0JqSUNzOUlIQmhaRk4wWVhKMEtHOHVZeTU1WldGeUxDQnNiMjVuUm05eWJXRjBJRDhnTmlBNklEUXBPMXh1WEc0Z0lHbG1JQ2hsZUhSbGJtUmxaQ2tnZTF4dUlDQWdJR01nS3owZ1hDSXRYQ0k3WEc0Z0lDQWdZeUFyUFNCd1lXUlRkR0Z5ZENodkxtTXViVzl1ZEdncE8xeHVJQ0FnSUdNZ0t6MGdYQ0l0WENJN1hHNGdJQ0FnWXlBclBTQndZV1JUZEdGeWRDaHZMbU11WkdGNUtUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQmpJQ3M5SUhCaFpGTjBZWEowS0c4dVl5NXRiMjUwYUNrN1hHNGdJQ0FnWXlBclBTQndZV1JUZEdGeWRDaHZMbU11WkdGNUtUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z1l6dGNibjFjYmx4dVpuVnVZM1JwYjI0Z2RHOUpVMDlVYVcxbEtGeHVJQ0J2TEZ4dUlDQmxlSFJsYm1SbFpDeGNiaUFnYzNWd2NISmxjM05UWldOdmJtUnpMRnh1SUNCemRYQndjbVZ6YzAxcGJHeHBjMlZqYjI1a2N5eGNiaUFnYVc1amJIVmtaVTltWm5ObGRDeGNiaUFnWlhoMFpXNWtaV1JhYjI1bFhHNHBJSHRjYmlBZ2JHVjBJR01nUFNCd1lXUlRkR0Z5ZENodkxtTXVhRzkxY2lrN1hHNGdJR2xtSUNobGVIUmxibVJsWkNrZ2UxeHVJQ0FnSUdNZ0t6MGdYQ0k2WENJN1hHNGdJQ0FnWXlBclBTQndZV1JUZEdGeWRDaHZMbU11YldsdWRYUmxLVHRjYmlBZ0lDQnBaaUFvYnk1akxuTmxZMjl1WkNBaFBUMGdNQ0I4ZkNBaGMzVndjSEpsYzNOVFpXTnZibVJ6S1NCN1hHNGdJQ0FnSUNCaklDczlJRndpT2x3aU8xeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElIdGNiaUFnSUNCaklDczlJSEJoWkZOMFlYSjBLRzh1WXk1dGFXNTFkR1VwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLRzh1WXk1elpXTnZibVFnSVQwOUlEQWdmSHdnSVhOMWNIQnlaWE56VTJWamIyNWtjeWtnZTF4dUlDQWdJR01nS3owZ2NHRmtVM1JoY25Rb2J5NWpMbk5sWTI5dVpDazdYRzVjYmlBZ0lDQnBaaUFvYnk1akxtMXBiR3hwYzJWamIyNWtJQ0U5UFNBd0lIeDhJQ0Z6ZFhCd2NtVnpjMDFwYkd4cGMyVmpiMjVrY3lrZ2UxeHVJQ0FnSUNBZ1l5QXJQU0JjSWk1Y0lqdGNiaUFnSUNBZ0lHTWdLejBnY0dGa1UzUmhjblFvYnk1akxtMXBiR3hwYzJWamIyNWtMQ0F6S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCcFppQW9hVzVqYkhWa1pVOW1abk5sZENrZ2UxeHVJQ0FnSUdsbUlDaHZMbWx6VDJabWMyVjBSbWw0WldRZ0ppWWdieTV2Wm1aelpYUWdQVDA5SURBZ0ppWWdJV1Y0ZEdWdVpHVmtXbTl1WlNrZ2UxeHVJQ0FnSUNBZ1l5QXJQU0JjSWxwY0lqdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHOHVieUE4SURBcElIdGNiaUFnSUNBZ0lHTWdLejBnWENJdFhDSTdYRzRnSUNBZ0lDQmpJQ3M5SUhCaFpGTjBZWEowS0UxaGRHZ3VkSEoxYm1Nb0xXOHVieUF2SURZd0tTazdYRzRnSUNBZ0lDQmpJQ3M5SUZ3aU9sd2lPMXh1SUNBZ0lDQWdZeUFyUFNCd1lXUlRkR0Z5ZENoTllYUm9MblJ5ZFc1aktDMXZMbThnSlNBMk1Da3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCaklDczlJRndpSzF3aU8xeHVJQ0FnSUNBZ1l5QXJQU0J3WVdSVGRHRnlkQ2hOWVhSb0xuUnlkVzVqS0c4dWJ5QXZJRFl3S1NrN1hHNGdJQ0FnSUNCaklDczlJRndpT2x3aU8xeHVJQ0FnSUNBZ1l5QXJQU0J3WVdSVGRHRnlkQ2hOWVhSb0xuUnlkVzVqS0c4dWJ5QWxJRFl3S1NrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2FXWWdLR1Y0ZEdWdVpHVmtXbTl1WlNrZ2UxeHVJQ0FnSUdNZ0t6MGdYQ0piWENJZ0t5QnZMbnB2Ym1VdWFXRnVZVTVoYldVZ0t5QmNJbDFjSWp0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnWXp0Y2JuMWNibHh1THk4Z1pHVm1ZWFZzZEhNZ1ptOXlJSFZ1YzNCbFkybG1hV1ZrSUhWdWFYUnpJR2x1SUhSb1pTQnpkWEJ3YjNKMFpXUWdZMkZzWlc1a1lYSnpYRzVqYjI1emRDQmtaV1poZFd4MFZXNXBkRlpoYkhWbGN5QTlJSHRjYmlBZ0lDQnRiMjUwYURvZ01TeGNiaUFnSUNCa1lYazZJREVzWEc0Z0lDQWdhRzkxY2pvZ01DeGNiaUFnSUNCdGFXNTFkR1U2SURBc1hHNGdJQ0FnYzJWamIyNWtPaUF3TEZ4dUlDQWdJRzFwYkd4cGMyVmpiMjVrT2lBd0xGeHVJQ0I5TEZ4dUlDQmtaV1poZFd4MFYyVmxhMVZ1YVhSV1lXeDFaWE1nUFNCN1hHNGdJQ0FnZDJWbGEwNTFiV0psY2pvZ01TeGNiaUFnSUNCM1pXVnJaR0Y1T2lBeExGeHVJQ0FnSUdodmRYSTZJREFzWEc0Z0lDQWdiV2x1ZFhSbE9pQXdMRnh1SUNBZ0lITmxZMjl1WkRvZ01DeGNiaUFnSUNCdGFXeHNhWE5sWTI5dVpEb2dNQ3hjYmlBZ2ZTeGNiaUFnWkdWbVlYVnNkRTl5WkdsdVlXeFZibWwwVm1Gc2RXVnpJRDBnZTF4dUlDQWdJRzl5WkdsdVlXdzZJREVzWEc0Z0lDQWdhRzkxY2pvZ01DeGNiaUFnSUNCdGFXNTFkR1U2SURBc1hHNGdJQ0FnYzJWamIyNWtPaUF3TEZ4dUlDQWdJRzFwYkd4cGMyVmpiMjVrT2lBd0xGeHVJQ0I5TzF4dVhHNHZMeUJWYm1sMGN5QnBiaUIwYUdVZ2MzVndjRzl5ZEdWa0lHTmhiR1Z1WkdGeWN5d2djMjl5ZEdWa0lHSjVJR0pwWjI1bGMzTmNibU52Ym5OMElHOXlaR1Z5WldSVmJtbDBjeUE5SUZ0Y0lubGxZWEpjSWl3Z1hDSnRiMjUwYUZ3aUxDQmNJbVJoZVZ3aUxDQmNJbWh2ZFhKY0lpd2dYQ0p0YVc1MWRHVmNJaXdnWENKelpXTnZibVJjSWl3Z1hDSnRhV3hzYVhObFkyOXVaRndpWFN4Y2JpQWdiM0prWlhKbFpGZGxaV3RWYm1sMGN5QTlJRnRjYmlBZ0lDQmNJbmRsWld0WlpXRnlYQ0lzWEc0Z0lDQWdYQ0ozWldWclRuVnRZbVZ5WENJc1hHNGdJQ0FnWENKM1pXVnJaR0Y1WENJc1hHNGdJQ0FnWENKb2IzVnlYQ0lzWEc0Z0lDQWdYQ0p0YVc1MWRHVmNJaXhjYmlBZ0lDQmNJbk5sWTI5dVpGd2lMRnh1SUNBZ0lGd2liV2xzYkdselpXTnZibVJjSWl4Y2JpQWdYU3hjYmlBZ2IzSmtaWEpsWkU5eVpHbHVZV3hWYm1sMGN5QTlJRnRjSW5sbFlYSmNJaXdnWENKdmNtUnBibUZzWENJc0lGd2lhRzkxY2x3aUxDQmNJbTFwYm5WMFpWd2lMQ0JjSW5ObFkyOXVaRndpTENCY0ltMXBiR3hwYzJWamIyNWtYQ0pkTzF4dVhHNHZMeUJ6ZEdGdVpHRnlaR2w2WlNCallYTmxJR0Z1WkNCd2JIVnlZV3hwZEhrZ2FXNGdkVzVwZEhOY2JtWjFibU4wYVc5dUlHNXZjbTFoYkdsNlpWVnVhWFFvZFc1cGRDa2dlMXh1SUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UxeHVJQ0FnSUhsbFlYSTZJRndpZVdWaGNsd2lMRnh1SUNBZ0lIbGxZWEp6T2lCY0lubGxZWEpjSWl4Y2JpQWdJQ0J0YjI1MGFEb2dYQ0p0YjI1MGFGd2lMRnh1SUNBZ0lHMXZiblJvY3pvZ1hDSnRiMjUwYUZ3aUxGeHVJQ0FnSUdSaGVUb2dYQ0prWVhsY0lpeGNiaUFnSUNCa1lYbHpPaUJjSW1SaGVWd2lMRnh1SUNBZ0lHaHZkWEk2SUZ3aWFHOTFjbHdpTEZ4dUlDQWdJR2h2ZFhKek9pQmNJbWh2ZFhKY0lpeGNiaUFnSUNCdGFXNTFkR1U2SUZ3aWJXbHVkWFJsWENJc1hHNGdJQ0FnYldsdWRYUmxjem9nWENKdGFXNTFkR1ZjSWl4Y2JpQWdJQ0J4ZFdGeWRHVnlPaUJjSW5GMVlYSjBaWEpjSWl4Y2JpQWdJQ0J4ZFdGeWRHVnljem9nWENKeGRXRnlkR1Z5WENJc1hHNGdJQ0FnYzJWamIyNWtPaUJjSW5ObFkyOXVaRndpTEZ4dUlDQWdJSE5sWTI5dVpITTZJRndpYzJWamIyNWtYQ0lzWEc0Z0lDQWdiV2xzYkdselpXTnZibVE2SUZ3aWJXbHNiR2x6WldOdmJtUmNJaXhjYmlBZ0lDQnRhV3hzYVhObFkyOXVaSE02SUZ3aWJXbHNiR2x6WldOdmJtUmNJaXhjYmlBZ0lDQjNaV1ZyWkdGNU9pQmNJbmRsWld0a1lYbGNJaXhjYmlBZ0lDQjNaV1ZyWkdGNWN6b2dYQ0ozWldWclpHRjVYQ0lzWEc0Z0lDQWdkMlZsYTI1MWJXSmxjam9nWENKM1pXVnJUblZ0WW1WeVhDSXNYRzRnSUNBZ2QyVmxhM051ZFcxaVpYSTZJRndpZDJWbGEwNTFiV0psY2x3aUxGeHVJQ0FnSUhkbFpXdHVkVzFpWlhKek9pQmNJbmRsWld0T2RXMWlaWEpjSWl4Y2JpQWdJQ0IzWldWcmVXVmhjam9nWENKM1pXVnJXV1ZoY2x3aUxGeHVJQ0FnSUhkbFpXdDVaV0Z5Y3pvZ1hDSjNaV1ZyV1dWaGNsd2lMRnh1SUNBZ0lHOXlaR2x1WVd3NklGd2liM0prYVc1aGJGd2lMRnh1SUNCOVczVnVhWFF1ZEc5TWIzZGxja05oYzJVb0tWMDdYRzVjYmlBZ2FXWWdLQ0Z1YjNKdFlXeHBlbVZrS1NCMGFISnZkeUJ1WlhjZ1NXNTJZV3hwWkZWdWFYUkZjbkp2Y2loMWJtbDBLVHRjYmx4dUlDQnlaWFIxY200Z2JtOXliV0ZzYVhwbFpEdGNibjFjYmx4dUx5OGdkR2hwY3lCcGN5QmhJR1IxYldKbFpDQmtiM2R1SUhabGNuTnBiMjRnYjJZZ1puSnZiVTlpYW1WamRDZ3BJSFJvWVhRZ2NuVnVjeUJoWW05MWRDQTJNQ1VnWm1GemRHVnlYRzR2THlCaWRYUWdaRzlsYzI0bmRDQmtieUJoYm5rZ2RtRnNhV1JoZEdsdmJpd2diV0ZyWlhNZ1lTQmlkVzVqYUNCdlppQmhjM04xYlhCMGFXOXVjeUJoWW05MWRDQjNhR0YwSUhWdWFYUnpYRzR2THlCaGNtVWdjSEpsYzJWdWRDd2dZVzVrSUhOdklHOXVMbHh1Wm5WdVkzUnBiMjRnY1hWcFkydEVWQ2h2WW1vc0lHOXdkSE1wSUh0Y2JpQWdZMjl1YzNRZ2VtOXVaU0E5SUc1dmNtMWhiR2w2WlZwdmJtVW9iM0IwY3k1NmIyNWxMQ0JUWlhSMGFXNW5jeTVrWldaaGRXeDBXbTl1WlNrc1hHNGdJQ0FnYkc5aklEMGdURzlqWVd4bExtWnliMjFQWW1wbFkzUW9iM0IwY3lrc1hHNGdJQ0FnZEhOT2IzY2dQU0JUWlhSMGFXNW5jeTV1YjNjb0tUdGNibHh1SUNCc1pYUWdkSE1zSUc4N1hHNWNiaUFnTHk4Z1lYTnpkVzFsSUhkbElHaGhkbVVnZEdobElHaHBaMmhsY2kxdmNtUmxjaUIxYm1sMGMxeHVJQ0JwWmlBb0lXbHpWVzVrWldacGJtVmtLRzlpYWk1NVpXRnlLU2tnZTF4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnZFNCdlppQnZjbVJsY21Wa1ZXNXBkSE1wSUh0Y2JpQWdJQ0FnSUdsbUlDaHBjMVZ1WkdWbWFXNWxaQ2h2WW1wYmRWMHBLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFsdDFYU0E5SUdSbFptRjFiSFJWYm1sMFZtRnNkV1Z6VzNWZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJR2x1ZG1Gc2FXUWdQU0JvWVhOSmJuWmhiR2xrUjNKbFoyOXlhV0Z1UkdGMFlTaHZZbW9wSUh4OElHaGhjMGx1ZG1Gc2FXUlVhVzFsUkdGMFlTaHZZbW9wTzF4dUlDQWdJR2xtSUNocGJuWmhiR2xrS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUkdGMFpWUnBiV1V1YVc1MllXeHBaQ2hwYm5aaGJHbGtLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCdlptWnpaWFJRY205MmFYTWdQU0I2YjI1bExtOW1abk5sZENoMGMwNXZkeWs3WEc0Z0lDQWdXM1J6TENCdlhTQTlJRzlpYWxSdlZGTW9iMkpxTENCdlptWnpaWFJRY205MmFYTXNJSHB2Ym1VcE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lIUnpJRDBnZEhOT2IzYzdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdibVYzSUVSaGRHVlVhVzFsS0hzZ2RITXNJSHB2Ym1Vc0lHeHZZeXdnYnlCOUtUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1pHbG1abEpsYkdGMGFYWmxLSE4wWVhKMExDQmxibVFzSUc5d2RITXBJSHRjYmlBZ1kyOXVjM1FnY205MWJtUWdQU0JwYzFWdVpHVm1hVzVsWkNodmNIUnpMbkp2ZFc1a0tTQS9JSFJ5ZFdVZ09pQnZjSFJ6TG5KdmRXNWtMRnh1SUNBZ0lHWnZjbTFoZENBOUlDaGpMQ0IxYm1sMEtTQTlQaUI3WEc0Z0lDQWdJQ0JqSUQwZ2NtOTFibVJVYnloakxDQnliM1Z1WkNCOGZDQnZjSFJ6TG1OaGJHVnVaR0Z5ZVNBL0lEQWdPaUF5TENCMGNuVmxLVHRjYmlBZ0lDQWdJR052Ym5OMElHWnZjbTFoZEhSbGNpQTlJR1Z1WkM1c2IyTXVZMnh2Ym1Vb2IzQjBjeWt1Y21Wc1JtOXliV0YwZEdWeUtHOXdkSE1wTzF4dUlDQWdJQ0FnY21WMGRYSnVJR1p2Y20xaGRIUmxjaTVtYjNKdFlYUW9ZeXdnZFc1cGRDazdYRzRnSUNBZ2ZTeGNiaUFnSUNCa2FXWm1aWElnUFNBb2RXNXBkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ2FXWWdLRzl3ZEhNdVkyRnNaVzVrWVhKNUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFpXNWtMbWhoYzFOaGJXVW9jM1JoY25Rc0lIVnVhWFFwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHVnVaQzV6ZEdGeWRFOW1LSFZ1YVhRcExtUnBabVlvYzNSaGNuUXVjM1JoY25SUFppaDFibWwwS1N3Z2RXNXBkQ2t1WjJWMEtIVnVhWFFwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnY21WMGRYSnVJREE3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdaVzVrTG1ScFptWW9jM1JoY25Rc0lIVnVhWFFwTG1kbGRDaDFibWwwS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TzF4dVhHNGdJR2xtSUNodmNIUnpMblZ1YVhRcElIdGNiaUFnSUNCeVpYUjFjbTRnWm05eWJXRjBLR1JwWm1abGNpaHZjSFJ6TG5WdWFYUXBMQ0J2Y0hSekxuVnVhWFFwTzF4dUlDQjlYRzVjYmlBZ1ptOXlJQ2hqYjI1emRDQjFibWwwSUc5bUlHOXdkSE11ZFc1cGRITXBJSHRjYmlBZ0lDQmpiMjV6ZENCamIzVnVkQ0E5SUdScFptWmxjaWgxYm1sMEtUdGNiaUFnSUNCcFppQW9UV0YwYUM1aFluTW9ZMjkxYm5RcElENDlJREVwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJtYjNKdFlYUW9ZMjkxYm5Rc0lIVnVhWFFwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdabTl5YldGMEtITjBZWEowSUQ0Z1pXNWtJRDhnTFRBZ09pQXdMQ0J2Y0hSekxuVnVhWFJ6VzI5d2RITXVkVzVwZEhNdWJHVnVaM1JvSUMwZ01WMHBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnNZWE4wVDNCMGN5aGhjbWRNYVhOMEtTQjdYRzRnSUd4bGRDQnZjSFJ6SUQwZ2UzMHNYRzRnSUNBZ1lYSm5jenRjYmlBZ2FXWWdLR0Z5WjB4cGMzUXViR1Z1WjNSb0lENGdNQ0FtSmlCMGVYQmxiMllnWVhKblRHbHpkRnRoY21kTWFYTjBMbXhsYm1kMGFDQXRJREZkSUQwOVBTQmNJbTlpYW1WamRGd2lLU0I3WEc0Z0lDQWdiM0IwY3lBOUlHRnlaMHhwYzNSYllYSm5UR2x6ZEM1c1pXNW5kR2dnTFNBeFhUdGNiaUFnSUNCaGNtZHpJRDBnUVhKeVlYa3Vabkp2YlNoaGNtZE1hWE4wS1M1emJHbGpaU2d3TENCaGNtZE1hWE4wTG14bGJtZDBhQ0F0SURFcE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lHRnlaM01nUFNCQmNuSmhlUzVtY205dEtHRnlaMHhwYzNRcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCYmIzQjBjeXdnWVhKbmMxMDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FTQkVZWFJsVkdsdFpTQnBjeUJoYmlCcGJXMTFkR0ZpYkdVZ1pHRjBZU0J6ZEhKMVkzUjFjbVVnY21Wd2NtVnpaVzUwYVc1bklHRWdjM0JsWTJsbWFXTWdaR0YwWlNCaGJtUWdkR2x0WlNCaGJtUWdZV05qYjIxd1lXNTVhVzVuSUcxbGRHaHZaSE11SUVsMElHTnZiblJoYVc1eklHTnNZWE56SUdGdVpDQnBibk4wWVc1alpTQnRaWFJvYjJSeklHWnZjaUJqY21WaGRHbHVaeXdnY0dGeWMybHVaeXdnYVc1MFpYSnliMmRoZEdsdVp5d2dkSEpoYm5ObWIzSnRhVzVuTENCaGJtUWdabTl5YldGMGRHbHVaeUIwYUdWdExseHVJQ3BjYmlBcUlFRWdSR0YwWlZScGJXVWdZMjl0Y0hKcGMyVnpJRzltT2x4dUlDb2dLaUJCSUhScGJXVnpkR0Z0Y0M0Z1JXRmphQ0JFWVhSbFZHbHRaU0JwYm5OMFlXNWpaU0J5WldabGNuTWdkRzhnWVNCemNHVmphV1pwWXlCdGFXeHNhWE5sWTI5dVpDQnZaaUIwYUdVZ1ZXNXBlQ0JsY0c5amFDNWNiaUFxSUNvZ1FTQjBhVzFsSUhwdmJtVXVJRVZoWTJnZ2FXNXpkR0Z1WTJVZ2FYTWdZMjl1YzJsa1pYSmxaQ0JwYmlCMGFHVWdZMjl1ZEdWNGRDQnZaaUJoSUhOd1pXTnBabWxqSUhwdmJtVWdLR0o1SUdSbFptRjFiSFFnZEdobElHeHZZMkZzSUhONWMzUmxiU2R6SUhwdmJtVXBMbHh1SUNvZ0tpQkRiMjVtYVdkMWNtRjBhVzl1SUhCeWIzQmxjblJwWlhNZ2RHaGhkQ0JsWm1abFkzUWdhRzkzSUc5MWRIQjFkQ0J6ZEhKcGJtZHpJR0Z5WlNCbWIzSnRZWFIwWldRc0lITjFZMmdnWVhNZ1lHeHZZMkZzWldBc0lHQnVkVzFpWlhKcGJtZFRlWE4wWlcxZ0xDQmhibVFnWUc5MWRIQjFkRU5oYkdWdVpHRnlZQzVjYmlBcVhHNGdLaUJJWlhKbElHbHpJR0VnWW5KcFpXWWdiM1psY25acFpYY2diMllnZEdobElHMXZjM1FnWTI5dGJXOXViSGtnZFhObFpDQm1kVzVqZEdsdmJtRnNhWFI1SUdsMElIQnliM1pwWkdWek9seHVJQ3BjYmlBcUlDb2dLaXBEY21WaGRHbHZiaW9xT2lCVWJ5QmpjbVZoZEdVZ1lTQkVZWFJsVkdsdFpTQm1jbTl0SUdsMGN5QmpiMjF3YjI1bGJuUnpMQ0IxYzJVZ2IyNWxJRzltSUdsMGN5Qm1ZV04wYjNKNUlHTnNZWE56SUcxbGRHaHZaSE02SUh0QWJHbHVheUJFWVhSbFZHbHRaU05zYjJOaGJIMHNJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTjFkR045TENCaGJtUWdLRzF2YzNRZ1pteGxlR2xpYkhrcElIdEFiR2x1YXlCRVlYUmxWR2x0WlNObWNtOXRUMkpxWldOMGZTNGdWRzhnWTNKbFlYUmxJRzl1WlNCbWNtOXRJR0VnYzNSaGJtUmhjbVFnYzNSeWFXNW5JR1p2Y20xaGRDd2dkWE5sSUh0QWJHbHVheUJFWVhSbFZHbHRaU05tY205dFNWTlBmU3dnZTBCc2FXNXJJRVJoZEdWVWFXMWxJMlp5YjIxSVZGUlFmU3dnWVc1a0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNObWNtOXRVa1pETWpneU1uMHVJRlJ2SUdOeVpXRjBaU0J2Ym1VZ1puSnZiU0JoSUdOMWMzUnZiU0J6ZEhKcGJtY2dabTl5YldGMExDQjFjMlVnZTBCc2FXNXJJRVJoZEdWVWFXMWxJMlp5YjIxR2IzSnRZWFI5TGlCVWJ5QmpjbVZoZEdVZ2IyNWxJR1p5YjIwZ1lTQnVZWFJwZG1VZ1NsTWdaR0YwWlN3Z2RYTmxJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTm1jbTl0U2xORVlYUmxmUzVjYmlBcUlDb2dLaXBIY21WbmIzSnBZVzRnWTJGc1pXNWtZWElnWVc1a0lIUnBiV1VxS2pvZ1ZHOGdaWGhoYldsdVpTQjBhR1VnUjNKbFoyOXlhV0Z1SUhCeWIzQmxjblJwWlhNZ2IyWWdZU0JFWVhSbFZHbHRaU0JwYm1ScGRtbGtkV0ZzYkhrZ0tHa3VaU0JoY3lCdmNIQnZjMlZrSUhSdklHTnZiR3hsWTNScGRtVnNlU0IwYUhKdmRXZG9JSHRBYkdsdWF5QkVZWFJsVkdsdFpTTjBiMDlpYW1WamRIMHBMQ0IxYzJVZ2RHaGxJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTjVaV0Z5ZlN3Z2UwQnNhVzVySUVSaGRHVlVhVzFsSTIxdmJuUm9mU3hjYmlBcUlIdEFiR2x1YXlCRVlYUmxWR2x0WlNOa1lYbDlMQ0I3UUd4cGJtc2dSR0YwWlZScGJXVWphRzkxY24wc0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNOdGFXNTFkR1Y5TENCN1FHeHBibXNnUkdGMFpWUnBiV1VqYzJWamIyNWtmU3dnZTBCc2FXNXJJRVJoZEdWVWFXMWxJMjFwYkd4cGMyVmpiMjVrZlNCaFkyTmxjM052Y25NdVhHNGdLaUFxSUNvcVYyVmxheUJqWVd4bGJtUmhjaW9xT2lCR2IzSWdTVk5QSUhkbFpXc2dZMkZzWlc1a1lYSWdZWFIwY21saWRYUmxjeXdnYzJWbElIUm9aU0I3UUd4cGJtc2dSR0YwWlZScGJXVWpkMlZsYTFsbFlYSjlMQ0I3UUd4cGJtc2dSR0YwWlZScGJXVWpkMlZsYTA1MWJXSmxjbjBzSUdGdVpDQjdRR3hwYm1zZ1JHRjBaVlJwYldVamQyVmxhMlJoZVgwZ1lXTmpaWE56YjNKekxseHVJQ29nS2lBcUtrTnZibVpwWjNWeVlYUnBiMjRxS2lCVFpXVWdkR2hsSUh0QWJHbHVheUJFWVhSbFZHbHRaU05zYjJOaGJHVjlJR0Z1WkNCN1FHeHBibXNnUkdGMFpWUnBiV1VqYm5WdFltVnlhVzVuVTNsemRHVnRmU0JoWTJObGMzTnZjbk11WEc0Z0tpQXFJQ29xVkhKaGJuTm1iM0p0WVhScGIyNHFLam9nVkc4Z2RISmhibk5tYjNKdElIUm9aU0JFWVhSbFZHbHRaU0JwYm5SdklHOTBhR1Z5SUVSaGRHVlVhVzFsY3l3Z2RYTmxJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTnpaWFI5TENCN1FHeHBibXNnUkdGMFpWUnBiV1VqY21WamIyNW1hV2QxY21WOUxDQjdRR3hwYm1zZ1JHRjBaVlJwYldVamMyVjBXbTl1Wlgwc0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNOelpYUk1iMk5oYkdWOUxDQjdRR3hwYm1zZ1JHRjBaVlJwYldVdWNHeDFjMzBzSUh0QWJHbHVheUJFWVhSbFZHbHRaU050YVc1MWMzMHNJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTmxibVJQWm4wc0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNOemRHRnlkRTltZlN3Z2UwQnNhVzVySUVSaGRHVlVhVzFsSTNSdlZWUkRmU3dnWVc1a0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNOMGIweHZZMkZzZlM1Y2JpQXFJQ29nS2lwUGRYUndkWFFxS2pvZ1ZHOGdZMjl1ZG1WeWRDQjBhR1VnUkdGMFpWUnBiV1VnZEc4Z2IzUm9aWElnY21Wd2NtVnpaVzUwWVhScGIyNXpMQ0IxYzJVZ2RHaGxJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTjBiMUpsYkdGMGFYWmxmU3dnZTBCc2FXNXJJRVJoZEdWVWFXMWxJM1J2VW1Wc1lYUnBkbVZEWVd4bGJtUmhjbjBzSUh0QWJHbHVheUJFWVhSbFZHbHRaU04wYjBwVFQwNTlMQ0I3UUd4cGJtc2dSR0YwWlZScGJXVWpkRzlKVTA5OUxDQjdRR3hwYm1zZ1JHRjBaVlJwYldVamRHOUlWRlJRZlN3Z2UwQnNhVzVySUVSaGRHVlVhVzFsSTNSdlQySnFaV04wZlN3Z2UwQnNhVzVySUVSaGRHVlVhVzFsSTNSdlVrWkRNamd5TW4wc0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNOMGIxTjBjbWx1WjMwc0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNOMGIweHZZMkZzWlZOMGNtbHVaMzBzSUh0QWJHbHVheUJFWVhSbFZHbHRaU04wYjBadmNtMWhkSDBzSUh0QWJHbHVheUJFWVhSbFZHbHRaU04wYjAxcGJHeHBjMzBnWVc1a0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNOMGIwcFRSR0YwWlgwdVhHNGdLbHh1SUNvZ1ZHaGxjbVVuY3lCd2JHVnVkSGtnYjNSb1pYSnpJR1J2WTNWdFpXNTBaV1FnWW1Wc2IzY3VJRWx1SUdGa1pHbDBhVzl1TENCbWIzSWdiVzl5WlNCcGJtWnZjbTFoZEdsdmJpQnZiaUJ6ZFdKMGJHVnlJSFJ2Y0dsamN5QnNhV3RsSUdsdWRHVnlibUYwYVc5dVlXeHBlbUYwYVc5dUxDQjBhVzFsSUhwdmJtVnpMQ0JoYkhSbGNtNWhkR2wyWlNCallXeGxibVJoY25Nc0lIWmhiR2xrYVhSNUxDQmhibVFnYzI4Z2IyNHNJSE5sWlNCMGFHVWdaWGgwWlhKdVlXd2daRzlqZFcxbGJuUmhkR2x2Ymk1Y2JpQXFMMXh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1JHRjBaVlJwYldVZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUdGalkyVnpjeUJ3Y21sMllYUmxYRzRnSUNBcUwxeHVJQ0JqYjI1emRISjFZM1J2Y2loamIyNW1hV2NwSUh0Y2JpQWdJQ0JqYjI1emRDQjZiMjVsSUQwZ1kyOXVabWxuTG5wdmJtVWdmSHdnVTJWMGRHbHVaM011WkdWbVlYVnNkRnB2Ym1VN1hHNWNiaUFnSUNCc1pYUWdhVzUyWVd4cFpDQTlYRzRnSUNBZ0lDQmpiMjVtYVdjdWFXNTJZV3hwWkNCOGZGeHVJQ0FnSUNBZ0tFNTFiV0psY2k1cGMwNWhUaWhqYjI1bWFXY3VkSE1wSUQ4Z2JtVjNJRWx1ZG1Gc2FXUW9YQ0pwYm5aaGJHbGtJR2x1Y0hWMFhDSXBJRG9nYm5Wc2JDa2dmSHhjYmlBZ0lDQWdJQ2doZW05dVpTNXBjMVpoYkdsa0lEOGdkVzV6ZFhCd2IzSjBaV1JhYjI1bEtIcHZibVVwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nUUdGalkyVnpjeUJ3Y21sMllYUmxYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2RHaHBjeTUwY3lBOUlHbHpWVzVrWldacGJtVmtLR052Ym1acFp5NTBjeWtnUHlCVFpYUjBhVzVuY3k1dWIzY29LU0E2SUdOdmJtWnBaeTUwY3p0Y2JseHVJQ0FnSUd4bGRDQmpJRDBnYm5Wc2JDeGNiaUFnSUNBZ0lHOGdQU0J1ZFd4c08xeHVJQ0FnSUdsbUlDZ2hhVzUyWVd4cFpDa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2RXNWphR0Z1WjJWa0lEMGdZMjl1Wm1sbkxtOXNaQ0FtSmlCamIyNW1hV2N1YjJ4a0xuUnpJRDA5UFNCMGFHbHpMblJ6SUNZbUlHTnZibVpwWnk1dmJHUXVlbTl1WlM1bGNYVmhiSE1vZW05dVpTazdYRzVjYmlBZ0lDQWdJR2xtSUNoMWJtTm9ZVzVuWldRcElIdGNiaUFnSUNBZ0lDQWdXMk1zSUc5ZElEMGdXMk52Ym1acFp5NXZiR1F1WXl3Z1kyOXVabWxuTG05c1pDNXZYVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHOTBJRDBnZW05dVpTNXZabVp6WlhRb2RHaHBjeTUwY3lrN1hHNGdJQ0FnSUNBZ0lHTWdQU0IwYzFSdlQySnFLSFJvYVhNdWRITXNJRzkwS1R0Y2JpQWdJQ0FnSUNBZ2FXNTJZV3hwWkNBOUlFNTFiV0psY2k1cGMwNWhUaWhqTG5sbFlYSXBJRDhnYm1WM0lFbHVkbUZzYVdRb1hDSnBiblpoYkdsa0lHbHVjSFYwWENJcElEb2diblZzYkR0Y2JpQWdJQ0FnSUNBZ1l5QTlJR2x1ZG1Gc2FXUWdQeUJ1ZFd4c0lEb2dZenRjYmlBZ0lDQWdJQ0FnYnlBOUlHbHVkbUZzYVdRZ1B5QnVkV3hzSURvZ2IzUTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dRR0ZqWTJWemN5QndjbWwyWVhSbFhHNGdJQ0FnSUNvdlhHNGdJQ0FnZEdocGN5NWZlbTl1WlNBOUlIcHZibVU3WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nUUdGalkyVnpjeUJ3Y21sMllYUmxYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2RHaHBjeTVzYjJNZ1BTQmpiMjVtYVdjdWJHOWpJSHg4SUV4dlkyRnNaUzVqY21WaGRHVW9LVHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJBWVdOalpYTnpJSEJ5YVhaaGRHVmNiaUFnSUNBZ0tpOWNiaUFnSUNCMGFHbHpMbWx1ZG1Gc2FXUWdQU0JwYm5aaGJHbGtPMXh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRUJoWTJObGMzTWdjSEpwZG1GMFpWeHVJQ0FnSUNBcUwxeHVJQ0FnSUhSb2FYTXVkMlZsYTBSaGRHRWdQU0J1ZFd4c08xeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFQmhZMk5sYzNNZ2NISnBkbUYwWlZ4dUlDQWdJQ0FxTDF4dUlDQWdJSFJvYVhNdVl5QTlJR003WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nUUdGalkyVnpjeUJ3Y21sMllYUmxYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2RHaHBjeTV2SUQwZ2J6dGNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkFZV05qWlhOeklIQnlhWFpoZEdWY2JpQWdJQ0FnS2k5Y2JpQWdJQ0IwYUdsekxtbHpUSFY0YjI1RVlYUmxWR2x0WlNBOUlIUnlkV1U3WEc0Z0lIMWNibHh1SUNBdkx5QkRUMDVUVkZKVlExUmNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsSUdFZ1JHRjBaVlJwYldVZ1ptOXlJSFJvWlNCamRYSnlaVzUwSUdsdWMzUmhiblFzSUdsdUlIUm9aU0J6ZVhOMFpXMG5jeUIwYVcxbElIcHZibVV1WEc0Z0lDQXFYRzRnSUNBcUlGVnpaU0JUWlhSMGFXNW5jeUIwYnlCdmRtVnljbWxrWlNCMGFHVnpaU0JrWldaaGRXeDBJSFpoYkhWbGN5QnBaaUJ1WldWa1pXUXVYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUmhkR1ZVYVcxbExtNXZkeWdwTG5SdlNWTlBLQ2tnTHk5K1BpQnViM2NnYVc0Z2RHaGxJRWxUVHlCbWIzSnRZWFJjYmlBZ0lDb2dRSEpsZEhWeWJpQjdSR0YwWlZScGJXVjlYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdibTkzS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1JHRjBaVlJwYldVb2UzMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOeVpXRjBaU0JoSUd4dlkyRnNJRVJoZEdWVWFXMWxYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCYmVXVmhjbDBnTFNCVWFHVWdZMkZzWlc1a1lYSWdlV1ZoY2k0Z1NXWWdiMjFwZEhSbFpDQW9ZWE1nYVc0c0lHTmhiR3dnWUd4dlkyRnNLQ2xnSUhkcGRHZ2dibThnWVhKbmRXMWxiblJ6S1N3Z2RHaGxJR04xY25KbGJuUWdkR2x0WlNCM2FXeHNJR0psSUhWelpXUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUZ0dGIyNTBhRDB4WFNBdElGUm9aU0J0YjI1MGFDd2dNUzFwYm1SbGVHVmtYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCYlpHRjVQVEZkSUMwZ1ZHaGxJR1JoZVNCdlppQjBhR1VnYlc5dWRHZ3NJREV0YVc1a1pYaGxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1cyaHZkWEk5TUYwZ0xTQlVhR1VnYUc5MWNpQnZaaUIwYUdVZ1pHRjVMQ0JwYmlBeU5DMW9iM1Z5SUhScGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUZ0dGFXNTFkR1U5TUYwZ0xTQlVhR1VnYldsdWRYUmxJRzltSUhSb1pTQm9iM1Z5TENCdFpXRnVhVzVuSUdFZ2JuVnRZbVZ5SUdKbGRIZGxaVzRnTUNCaGJtUWdOVGxjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdHpaV052Ym1ROU1GMGdMU0JVYUdVZ2MyVmpiMjVrSUc5bUlIUm9aU0J0YVc1MWRHVXNJRzFsWVc1cGJtY2dZU0J1ZFcxaVpYSWdZbVYwZDJWbGJpQXdJR0Z1WkNBMU9WeHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnVzIxcGJHeHBjMlZqYjI1a1BUQmRJQzBnVkdobElHMXBiR3hwYzJWamIyNWtJRzltSUhSb1pTQnpaV052Ym1Rc0lHMWxZVzVwYm1jZ1lTQnVkVzFpWlhJZ1ltVjBkMlZsYmlBd0lHRnVaQ0E1T1RsY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29LU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMMzQrSUc1dmQxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1c2IyTmhiQ2g3SUhwdmJtVTZJRndpUVcxbGNtbGpZUzlPWlhkZldXOXlhMXdpSUgwcElDQWdJQ0FnTHk5K1BpQnViM2NzSUdsdUlGVlRJR1ZoYzNRZ1kyOWhjM1FnZEdsdFpWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1c2IyTmhiQ2d5TURFM0tTQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2Zmo0Z01qQXhOeTB3TVMwd01WUXdNRG93TURvd01GeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1c2IyTmhiQ2d5TURFM0xDQXpLU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2Zmo0Z01qQXhOeTB3TXkwd01WUXdNRG93TURvd01GeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1c2IyTmhiQ2d5TURFM0xDQXpMQ0F4TWl3Z2V5QnNiMk5oYkdVNklGd2labkpjSWlCOUtTQWdJQ0FnTHk5K1BpQXlNREUzTFRBekxURXlWREF3T2pBd09qQXdMQ0IzYVhSb0lHRWdSbkpsYm1Ob0lHeHZZMkZzWlZ4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzVzYjJOaGJDZ3lNREUzTENBekxDQXhNaXdnTlNrZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZmajRnTWpBeE55MHdNeTB4TWxRd05Ub3dNRG93TUZ4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzVzYjJOaGJDZ3lNREUzTENBekxDQXhNaXdnTlN3Z2V5QjZiMjVsT2lCY0luVjBZMXdpSUgwcElDQWdMeTkrUGlBeU1ERTNMVEF6TFRFeVZEQTFPakF3T2pBd0xDQnBiaUJWVkVOY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29NakF4Tnl3Z015d2dNVElzSURVc0lEUTFLU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMMzQrSURJd01UY3RNRE10TVRKVU1EVTZORFU2TURCY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29NakF4Tnl3Z015d2dNVElzSURVc0lEUTFMQ0F4TUNrZ0lDQWdJQ0FnSUNBZ0lDQXZMMzQrSURJd01UY3RNRE10TVRKVU1EVTZORFU2TVRCY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29NakF4Tnl3Z015d2dNVElzSURVc0lEUTFMQ0F4TUN3Z056WTFLU0FnSUNBZ0lDQXZMMzQrSURJd01UY3RNRE10TVRKVU1EVTZORFU2TVRBdU56WTFYRzRnSUNBcUlFQnlaWFIxY200Z2UwUmhkR1ZVYVcxbGZWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHeHZZMkZzS0NrZ2UxeHVJQ0FnSUdOdmJuTjBJRnR2Y0hSekxDQmhjbWR6WFNBOUlHeGhjM1JQY0hSektHRnlaM1Z0Wlc1MGN5a3NYRzRnSUNBZ0lDQmJlV1ZoY2l3Z2JXOXVkR2dzSUdSaGVTd2dhRzkxY2l3Z2JXbHVkWFJsTENCelpXTnZibVFzSUcxcGJHeHBjMlZqYjI1a1hTQTlJR0Z5WjNNN1hHNGdJQ0FnY21WMGRYSnVJSEYxYVdOclJGUW9leUI1WldGeUxDQnRiMjUwYUN3Z1pHRjVMQ0JvYjNWeUxDQnRhVzUxZEdVc0lITmxZMjl1WkN3Z2JXbHNiR2x6WldOdmJtUWdmU3dnYjNCMGN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxJR0VnUkdGMFpWUnBiV1VnYVc0Z1ZWUkRYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCYmVXVmhjbDBnTFNCVWFHVWdZMkZzWlc1a1lYSWdlV1ZoY2k0Z1NXWWdiMjFwZEhSbFpDQW9ZWE1nYVc0c0lHTmhiR3dnWUhWMFl5Z3BZQ0IzYVhSb0lHNXZJR0Z5WjNWdFpXNTBjeWtzSUhSb1pTQmpkWEp5Wlc1MElIUnBiV1VnZDJsc2JDQmlaU0IxYzJWa1hHNGdJQ0FxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JiYlc5dWRHZzlNVjBnTFNCVWFHVWdiVzl1ZEdnc0lERXRhVzVrWlhobFpGeHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnVzJSaGVUMHhYU0F0SUZSb1pTQmtZWGtnYjJZZ2RHaGxJRzF2Ym5Sb1hHNGdJQ0FxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JiYUc5MWNqMHdYU0F0SUZSb1pTQm9iM1Z5SUc5bUlIUm9aU0JrWVhrc0lHbHVJREkwTFdodmRYSWdkR2x0WlZ4dUlDQWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdXMjFwYm5WMFpUMHdYU0F0SUZSb1pTQnRhVzUxZEdVZ2IyWWdkR2hsSUdodmRYSXNJRzFsWVc1cGJtY2dZU0J1ZFcxaVpYSWdZbVYwZDJWbGJpQXdJR0Z1WkNBMU9WeHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnVzNObFkyOXVaRDB3WFNBdElGUm9aU0J6WldOdmJtUWdiMllnZEdobElHMXBiblYwWlN3Z2JXVmhibWx1WnlCaElHNTFiV0psY2lCaVpYUjNaV1Z1SURBZ1lXNWtJRFU1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJiV2xzYkdselpXTnZibVE5TUYwZ0xTQlVhR1VnYldsc2JHbHpaV052Ym1RZ2IyWWdkR2hsSUhObFkyOXVaQ3dnYldWaGJtbHVaeUJoSUc1MWJXSmxjaUJpWlhSM1pXVnVJREFnWVc1a0lEazVPVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2IzQjBhVzl1Y3lBdElHTnZibVpwWjNWeVlYUnBiMjRnYjNCMGFXOXVjeUJtYjNJZ2RHaGxJRVJoZEdWVWFXMWxYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBhVzl1Y3k1c2IyTmhiR1ZkSUMwZ1lTQnNiMk5oYkdVZ2RHOGdjMlYwSUc5dUlIUm9aU0J5WlhOMWJIUnBibWNnUkdGMFpWUnBiV1VnYVc1emRHRnVZMlZjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlGdHZjSFJwYjI1ekxtOTFkSEIxZEVOaGJHVnVaR0Z5WFNBdElIUm9aU0J2ZFhSd2RYUWdZMkZzWlc1a1lYSWdkRzhnYzJWMElHOXVJSFJvWlNCeVpYTjFiSFJwYm1jZ1JHRjBaVlJwYldVZ2FXNXpkR0Z1WTJWY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnR2Y0hScGIyNXpMbTUxYldKbGNtbHVaMU41YzNSbGJWMGdMU0IwYUdVZ2JuVnRZbVZ5YVc1bklITjVjM1JsYlNCMGJ5QnpaWFFnYjI0Z2RHaGxJSEpsYzNWc2RHbHVaeUJFWVhSbFZHbHRaU0JwYm5OMFlXNWpaVnh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNTFkR01vS1NBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwzNCtJRzV2ZDF4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzUxZEdNb01qQXhOeWtnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMMzQrSURJd01UY3RNREV0TURGVU1EQTZNREE2TURCYVhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG5WMFl5Z3lNREUzTENBektTQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2Zmo0Z01qQXhOeTB3TXkwd01WUXdNRG93TURvd01GcGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWRYUmpLREl3TVRjc0lETXNJREV5S1NBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5K1BpQXlNREUzTFRBekxURXlWREF3T2pBd09qQXdXbHh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNTFkR01vTWpBeE55d2dNeXdnTVRJc0lEVXBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwzNCtJREl3TVRjdE1ETXRNVEpVTURVNk1EQTZNREJhWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMblYwWXlneU1ERTNMQ0F6TENBeE1pd2dOU3dnTkRVcElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZmajRnTWpBeE55MHdNeTB4TWxRd05UbzBOVG93TUZwY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1ZFhSaktESXdNVGNzSURNc0lERXlMQ0ExTENBME5Td2dleUJzYjJOaGJHVTZJRndpWm5KY0lpQjlLU0FnSUNBZ0lDQWdJQ0F2TDM0K0lESXdNVGN0TURNdE1USlVNRFU2TkRVNk1EQmFJSGRwZEdnZ1lTQkdjbVZ1WTJnZ2JHOWpZV3hsWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMblYwWXlneU1ERTNMQ0F6TENBeE1pd2dOU3dnTkRVc0lERXdLU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZmajRnTWpBeE55MHdNeTB4TWxRd05UbzBOVG94TUZwY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1ZFhSaktESXdNVGNzSURNc0lERXlMQ0ExTENBME5Td2dNVEFzSURjMk5Td2dleUJzYjJOaGJHVTZJRndpWm5KY0lpQjlLU0F2TDM0K0lESXdNVGN0TURNdE1USlVNRFU2TkRVNk1UQXVOelkxV2lCM2FYUm9JR0VnUm5KbGJtTm9JR3h2WTJGc1pWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0RVlYUmxWR2x0WlgxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCMWRHTW9LU0I3WEc0Z0lDQWdZMjl1YzNRZ1cyOXdkSE1zSUdGeVozTmRJRDBnYkdGemRFOXdkSE1vWVhKbmRXMWxiblJ6S1N4Y2JpQWdJQ0FnSUZ0NVpXRnlMQ0J0YjI1MGFDd2daR0Y1TENCb2IzVnlMQ0J0YVc1MWRHVXNJSE5sWTI5dVpDd2diV2xzYkdselpXTnZibVJkSUQwZ1lYSm5jenRjYmx4dUlDQWdJRzl3ZEhNdWVtOXVaU0E5SUVacGVHVmtUMlptYzJWMFdtOXVaUzUxZEdOSmJuTjBZVzVqWlR0Y2JpQWdJQ0J5WlhSMWNtNGdjWFZwWTJ0RVZDaDdJSGxsWVhJc0lHMXZiblJvTENCa1lYa3NJR2h2ZFhJc0lHMXBiblYwWlN3Z2MyVmpiMjVrTENCdGFXeHNhWE5sWTI5dVpDQjlMQ0J2Y0hSektUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEY21WaGRHVWdZU0JFWVhSbFZHbHRaU0JtY205dElHRWdTbUYyWVZOamNtbHdkQ0JFWVhSbElHOWlhbVZqZEM0Z1ZYTmxjeUIwYUdVZ1pHVm1ZWFZzZENCNmIyNWxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUmhkR1Y5SUdSaGRHVWdMU0JoSUVwaGRtRlRZM0pwY0hRZ1JHRjBaU0J2WW1wbFkzUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0UFltcGxZM1I5SUc5d2RHbHZibk1nTFNCamIyNW1hV2QxY21GMGFXOXVJRzl3ZEdsdmJuTWdabTl5SUhSb1pTQkVZWFJsVkdsdFpWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaM3hhYjI1bGZTQmJiM0IwYVc5dWN5NTZiMjVsUFNkc2IyTmhiQ2RkSUMwZ2RHaGxJSHB2Ym1VZ2RHOGdjR3hoWTJVZ2RHaGxJRVJoZEdWVWFXMWxJR2x1ZEc5Y2JpQWdJQ29nUUhKbGRIVnliaUI3UkdGMFpWUnBiV1Y5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWm5KdmJVcFRSR0YwWlNoa1lYUmxMQ0J2Y0hScGIyNXpJRDBnZTMwcElIdGNiaUFnSUNCamIyNXpkQ0IwY3lBOUlHbHpSR0YwWlNoa1lYUmxLU0EvSUdSaGRHVXVkbUZzZFdWUFppZ3BJRG9nVG1GT08xeHVJQ0FnSUdsbUlDaE9kVzFpWlhJdWFYTk9ZVTRvZEhNcEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1JHRjBaVlJwYldVdWFXNTJZV3hwWkNoY0ltbHVkbUZzYVdRZ2FXNXdkWFJjSWlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdlbTl1WlZSdlZYTmxJRDBnYm05eWJXRnNhWHBsV205dVpTaHZjSFJwYjI1ekxucHZibVVzSUZObGRIUnBibWR6TG1SbFptRjFiSFJhYjI1bEtUdGNiaUFnSUNCcFppQW9JWHB2Ym1WVWIxVnpaUzVwYzFaaGJHbGtLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSR0YwWlZScGJXVXVhVzUyWVd4cFpDaDFibk4xY0hCdmNuUmxaRnB2Ym1Vb2VtOXVaVlJ2VlhObEtTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkVZWFJsVkdsdFpTaDdYRzRnSUNBZ0lDQjBjem9nZEhNc1hHNGdJQ0FnSUNCNmIyNWxPaUI2YjI1bFZHOVZjMlVzWEc0Z0lDQWdJQ0JzYjJNNklFeHZZMkZzWlM1bWNtOXRUMkpxWldOMEtHOXdkR2x2Ym5NcExGeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU55WldGMFpTQmhJRVJoZEdWVWFXMWxJR1p5YjIwZ1lTQnVkVzFpWlhJZ2IyWWdiV2xzYkdselpXTnZibVJ6SUhOcGJtTmxJSFJvWlNCbGNHOWphQ0FvYldWaGJtbHVaeUJ6YVc1alpTQXhJRXBoYm5WaGNua2dNVGszTUNBd01Eb3dNRG93TUNCVlZFTXBMaUJWYzJWeklIUm9aU0JrWldaaGRXeDBJSHB2Ym1VdVhHNGdJQ0FxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0J0YVd4c2FYTmxZMjl1WkhNZ0xTQmhJRzUxYldKbGNpQnZaaUJ0YVd4c2FYTmxZMjl1WkhNZ2MybHVZMlVnTVRrM01DQlZWRU5jYmlBZ0lDb2dRSEJoY21GdElIdFBZbXBsWTNSOUlHOXdkR2x2Ym5NZ0xTQmpiMjVtYVdkMWNtRjBhVzl1SUc5d2RHbHZibk1nWm05eUlIUm9aU0JFWVhSbFZHbHRaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjN4YWIyNWxmU0JiYjNCMGFXOXVjeTU2YjI1bFBTZHNiMk5oYkNkZElDMGdkR2hsSUhwdmJtVWdkRzhnY0d4aFkyVWdkR2hsSUVSaGRHVlVhVzFsSUdsdWRHOWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0dmNIUnBiMjV6TG14dlkyRnNaVjBnTFNCaElHeHZZMkZzWlNCMGJ5QnpaWFFnYjI0Z2RHaGxJSEpsYzNWc2RHbHVaeUJFWVhSbFZHbHRaU0JwYm5OMFlXNWpaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2IzQjBhVzl1Y3k1dmRYUndkWFJEWVd4bGJtUmhjaUF0SUhSb1pTQnZkWFJ3ZFhRZ1kyRnNaVzVrWVhJZ2RHOGdjMlYwSUc5dUlIUm9aU0J5WlhOMWJIUnBibWNnUkdGMFpWUnBiV1VnYVc1emRHRnVZMlZjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHOXdkR2x2Ym5NdWJuVnRZbVZ5YVc1blUzbHpkR1Z0SUMwZ2RHaGxJRzUxYldKbGNtbHVaeUJ6ZVhOMFpXMGdkRzhnYzJWMElHOXVJSFJvWlNCeVpYTjFiSFJwYm1jZ1JHRjBaVlJwYldVZ2FXNXpkR0Z1WTJWY2JpQWdJQ29nUUhKbGRIVnliaUI3UkdGMFpWUnBiV1Y5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWm5KdmJVMXBiR3hwY3lodGFXeHNhWE5sWTI5dVpITXNJRzl3ZEdsdmJuTWdQU0I3ZlNrZ2UxeHVJQ0FnSUdsbUlDZ2hhWE5PZFcxaVpYSW9iV2xzYkdselpXTnZibVJ6S1NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFbHVkbUZzYVdSQmNtZDFiV1Z1ZEVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0JnWm5KdmJVMXBiR3hwY3lCeVpYRjFhWEpsY3lCaElHNTFiV1Z5YVdOaGJDQnBibkIxZEN3Z1luVjBJSEpsWTJWcGRtVmtJR0VnSkh0MGVYQmxiMllnYldsc2JHbHpaV052Ym1SemZTQjNhWFJvSUhaaGJIVmxJQ1I3Yldsc2JHbHpaV052Ym1SemZXQmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaHRhV3hzYVhObFkyOXVaSE1nUENBdFRVRllYMFJCVkVVZ2ZId2diV2xzYkdselpXTnZibVJ6SUQ0Z1RVRllYMFJCVkVVcElIdGNiaUFnSUNBZ0lDOHZJSFJvYVhNZ2FYTnVKM1FnY0dWeVptVmpkQ0JpWldOaGRYTmxJR0psWTJGMWMyVWdkMlVnWTJGdUlITjBhV3hzSUdWdVpDQjFjQ0J2ZFhRZ2IyWWdjbUZ1WjJVZ1ltVmpZWFZ6WlNCdlppQmhaR1JwZEdsdmJtRnNJSE5vYVdaMGFXNW5MQ0JpZFhRZ2FYUW5jeUJoSUhOMFlYSjBYRzRnSUNBZ0lDQnlaWFIxY200Z1JHRjBaVlJwYldVdWFXNTJZV3hwWkNoY0lsUnBiV1Z6ZEdGdGNDQnZkWFFnYjJZZ2NtRnVaMlZjSWlrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUkdGMFpWUnBiV1VvZTF4dUlDQWdJQ0FnSUNCMGN6b2diV2xzYkdselpXTnZibVJ6TEZ4dUlDQWdJQ0FnSUNCNmIyNWxPaUJ1YjNKdFlXeHBlbVZhYjI1bEtHOXdkR2x2Ym5NdWVtOXVaU3dnVTJWMGRHbHVaM011WkdWbVlYVnNkRnB2Ym1VcExGeHVJQ0FnSUNBZ0lDQnNiMk02SUV4dlkyRnNaUzVtY205dFQySnFaV04wS0c5d2RHbHZibk1wTEZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTnlaV0YwWlNCaElFUmhkR1ZVYVcxbElHWnliMjBnWVNCdWRXMWlaWElnYjJZZ2MyVmpiMjVrY3lCemFXNWpaU0IwYUdVZ1pYQnZZMmdnS0cxbFlXNXBibWNnYzJsdVkyVWdNU0JLWVc1MVlYSjVJREU1TnpBZ01EQTZNREE2TURBZ1ZWUkRLUzRnVlhObGN5QjBhR1VnWkdWbVlYVnNkQ0I2YjI1bExseHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnYzJWamIyNWtjeUF0SUdFZ2JuVnRZbVZ5SUc5bUlITmxZMjl1WkhNZ2MybHVZMlVnTVRrM01DQlZWRU5jYmlBZ0lDb2dRSEJoY21GdElIdFBZbXBsWTNSOUlHOXdkR2x2Ym5NZ0xTQmpiMjVtYVdkMWNtRjBhVzl1SUc5d2RHbHZibk1nWm05eUlIUm9aU0JFWVhSbFZHbHRaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjN4YWIyNWxmU0JiYjNCMGFXOXVjeTU2YjI1bFBTZHNiMk5oYkNkZElDMGdkR2hsSUhwdmJtVWdkRzhnY0d4aFkyVWdkR2hsSUVSaGRHVlVhVzFsSUdsdWRHOWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0dmNIUnBiMjV6TG14dlkyRnNaVjBnTFNCaElHeHZZMkZzWlNCMGJ5QnpaWFFnYjI0Z2RHaGxJSEpsYzNWc2RHbHVaeUJFWVhSbFZHbHRaU0JwYm5OMFlXNWpaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2IzQjBhVzl1Y3k1dmRYUndkWFJEWVd4bGJtUmhjaUF0SUhSb1pTQnZkWFJ3ZFhRZ1kyRnNaVzVrWVhJZ2RHOGdjMlYwSUc5dUlIUm9aU0J5WlhOMWJIUnBibWNnUkdGMFpWUnBiV1VnYVc1emRHRnVZMlZjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHOXdkR2x2Ym5NdWJuVnRZbVZ5YVc1blUzbHpkR1Z0SUMwZ2RHaGxJRzUxYldKbGNtbHVaeUJ6ZVhOMFpXMGdkRzhnYzJWMElHOXVJSFJvWlNCeVpYTjFiSFJwYm1jZ1JHRjBaVlJwYldVZ2FXNXpkR0Z1WTJWY2JpQWdJQ29nUUhKbGRIVnliaUI3UkdGMFpWUnBiV1Y5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWm5KdmJWTmxZMjl1WkhNb2MyVmpiMjVrY3l3Z2IzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lDQWdhV1lnS0NGcGMwNTFiV0psY2loelpXTnZibVJ6S1NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFbHVkbUZzYVdSQmNtZDFiV1Z1ZEVWeWNtOXlLRndpWm5KdmJWTmxZMjl1WkhNZ2NtVnhkV2x5WlhNZ1lTQnVkVzFsY21sallXd2dhVzV3ZFhSY0lpazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1JHRjBaVlJwYldVb2UxeHVJQ0FnSUNBZ0lDQjBjem9nYzJWamIyNWtjeUFxSURFd01EQXNYRzRnSUNBZ0lDQWdJSHB2Ym1VNklHNXZjbTFoYkdsNlpWcHZibVVvYjNCMGFXOXVjeTU2YjI1bExDQlRaWFIwYVc1bmN5NWtaV1poZFd4MFdtOXVaU2tzWEc0Z0lDQWdJQ0FnSUd4dll6b2dURzlqWVd4bExtWnliMjFQWW1wbFkzUW9iM0IwYVc5dWN5a3NYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxJR0VnUkdGMFpWUnBiV1VnWm5KdmJTQmhJRXBoZG1GVFkzSnBjSFFnYjJKcVpXTjBJSGRwZEdnZ2EyVjVjeUJzYVd0bElDZDVaV0Z5SnlCaGJtUWdKMmh2ZFhJbklIZHBkR2dnY21WaGMyOXVZV0pzWlNCa1pXWmhkV3gwY3k1Y2JpQWdJQ29nUUhCaGNtRnRJSHRQWW1wbFkzUjlJRzlpYWlBdElIUm9aU0J2WW1wbFkzUWdkRzhnWTNKbFlYUmxJSFJvWlNCRVlYUmxWR2x0WlNCbWNtOXRYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCdlltb3VlV1ZoY2lBdElHRWdlV1ZoY2l3Z2MzVmphQ0JoY3lBeE9UZzNYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCdlltb3ViVzl1ZEdnZ0xTQmhJRzF2Ym5Sb0xDQXhMVEV5WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnZZbW91WkdGNUlDMGdZU0JrWVhrZ2IyWWdkR2hsSUcxdmJuUm9MQ0F4TFRNeExDQmtaWEJsYm1ScGJtY2diMjRnZEdobElHMXZiblJvWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnZZbW91YjNKa2FXNWhiQ0F0SUdSaGVTQnZaaUIwYUdVZ2VXVmhjaXdnTVMwek5qVWdiM0lnTXpZMlhHNGdJQ0FxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0J2WW1vdWQyVmxhMWxsWVhJZ0xTQmhiaUJKVTA4Z2QyVmxheUI1WldGeVhHNGdJQ0FxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0J2WW1vdWQyVmxhMDUxYldKbGNpQXRJR0Z1SUVsVFR5QjNaV1ZySUc1MWJXSmxjaXdnWW1WMGQyVmxiaUF4SUdGdVpDQTFNaUJ2Y2lBMU15d2daR1Z3Wlc1a2FXNW5JRzl1SUhSb1pTQjVaV0Z5WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnZZbW91ZDJWbGEyUmhlU0F0SUdGdUlFbFRUeUIzWldWclpHRjVMQ0F4TFRjc0lIZG9aWEpsSURFZ2FYTWdUVzl1WkdGNUlHRnVaQ0EzSUdseklGTjFibVJoZVZ4dUlDQWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdiMkpxTG1odmRYSWdMU0JvYjNWeUlHOW1JSFJvWlNCa1lYa3NJREF0TWpOY2JpQWdJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRzlpYWk1dGFXNTFkR1VnTFNCdGFXNTFkR1VnYjJZZ2RHaGxJR2h2ZFhJc0lEQXROVGxjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHOWlhaTV6WldOdmJtUWdMU0J6WldOdmJtUWdiMllnZEdobElHMXBiblYwWlN3Z01DMDFPVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2IySnFMbTFwYkd4cGMyVmpiMjVrSUMwZ2JXbHNiR2x6WldOdmJtUWdiMllnZEdobElITmxZMjl1WkN3Z01DMDVPVGxjYmlBZ0lDb2dRSEJoY21GdElIdFBZbXBsWTNSOUlHOXdkSE1nTFNCdmNIUnBiMjV6SUdadmNpQmpjbVZoZEdsdVp5QjBhR2x6SUVSaGRHVlVhVzFsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZGcHZibVY5SUZ0dmNIUnpMbnB2Ym1VOUoyeHZZMkZzSjEwZ0xTQnBiblJsY25CeVpYUWdkR2hsSUc1MWJXSmxjbk1nYVc0Z2RHaGxJR052Ym5SbGVIUWdiMllnWVNCd1lYSjBhV04xYkdGeUlIcHZibVV1SUVOaGJpQjBZV3RsSUdGdWVTQjJZV3gxWlNCMFlXdGxiaUJoY3lCMGFHVWdabWx5YzNRZ1lYSm5kVzFsYm5RZ2RHOGdjMlYwV205dVpTZ3BYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBjeTVzYjJOaGJHVTlKM041YzNSbGJTZHpJR3h2WTJGc1pTZGRJQzBnWVNCc2IyTmhiR1VnZEc4Z2MyVjBJRzl1SUhSb1pTQnlaWE4xYkhScGJtY2dSR0YwWlZScGJXVWdhVzV6ZEdGdVkyVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUc5d2RITXViM1YwY0hWMFEyRnNaVzVrWVhJZ0xTQjBhR1VnYjNWMGNIVjBJR05oYkdWdVpHRnlJSFJ2SUhObGRDQnZiaUIwYUdVZ2NtVnpkV3gwYVc1bklFUmhkR1ZVYVcxbElHbHVjM1JoYm1ObFhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J2Y0hSekxtNTFiV0psY21sdVoxTjVjM1JsYlNBdElIUm9aU0J1ZFcxaVpYSnBibWNnYzNsemRHVnRJSFJ2SUhObGRDQnZiaUIwYUdVZ2NtVnpkV3gwYVc1bklFUmhkR1ZVYVcxbElHbHVjM1JoYm1ObFhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG1aeWIyMVBZbXBsWTNRb2V5QjVaV0Z5T2lBeE9UZ3lMQ0J0YjI1MGFEb2dOU3dnWkdGNU9pQXlOWDBwTG5SdlNWTlBSR0YwWlNncElDOHZQVDRnSnpFNU9ESXRNRFV0TWpVblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG1aeWIyMVBZbXBsWTNRb2V5QjVaV0Z5T2lBeE9UZ3lJSDBwTG5SdlNWTlBSR0YwWlNncElDOHZQVDRnSnpFNU9ESXRNREV0TURFblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG1aeWIyMVBZbXBsWTNRb2V5Qm9iM1Z5T2lBeE1Dd2diV2x1ZFhSbE9pQXlOaXdnYzJWamIyNWtPaUEySUgwcElDOHZmajRnZEc5a1lYa2dZWFFnTVRBNk1qWTZNRFpjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXVabkp2YlU5aWFtVmpkQ2g3SUdodmRYSTZJREV3TENCdGFXNTFkR1U2SURJMkxDQnpaV052Ym1RNklEWWdmU3dnZXlCNmIyNWxPaUFuZFhSakp5QjlLU3hjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXVabkp2YlU5aWFtVmpkQ2g3SUdodmRYSTZJREV3TENCdGFXNTFkR1U2SURJMkxDQnpaV052Ym1RNklEWWdmU3dnZXlCNmIyNWxPaUFuYkc5allXd25JSDBwWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbVp5YjIxUFltcGxZM1FvZXlCb2IzVnlPaUF4TUN3Z2JXbHVkWFJsT2lBeU5pd2djMlZqYjI1a09pQTJJSDBzSUhzZ2VtOXVaVG9nSjBGdFpYSnBZMkV2VG1WM1gxbHZjbXNuSUgwcFhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG1aeWIyMVBZbXBsWTNRb2V5QjNaV1ZyV1dWaGNqb2dNakF4Tml3Z2QyVmxhMDUxYldKbGNqb2dNaXdnZDJWbGEyUmhlVG9nTXlCOUtTNTBiMGxUVDBSaGRHVW9LU0F2THowK0lDY3lNREUyTFRBeExURXpKMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVZWFJsVkdsdFpYMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5Qm1jbTl0VDJKcVpXTjBLRzlpYWl3Z2IzQjBjeUE5SUh0OUtTQjdYRzRnSUNBZ2IySnFJRDBnYjJKcUlIeDhJSHQ5TzF4dUlDQWdJR052Ym5OMElIcHZibVZVYjFWelpTQTlJRzV2Y20xaGJHbDZaVnB2Ym1Vb2IzQjBjeTU2YjI1bExDQlRaWFIwYVc1bmN5NWtaV1poZFd4MFdtOXVaU2s3WEc0Z0lDQWdhV1lnS0NGNmIyNWxWRzlWYzJVdWFYTldZV3hwWkNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUVSaGRHVlVhVzFsTG1sdWRtRnNhV1FvZFc1emRYQndiM0owWldSYWIyNWxLSHB2Ym1WVWIxVnpaU2twTzF4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElIUnpUbTkzSUQwZ1UyVjBkR2x1WjNNdWJtOTNLQ2tzWEc0Z0lDQWdJQ0J2Wm1aelpYUlFjbTkyYVhNZ1BTQWhhWE5WYm1SbFptbHVaV1FvYjNCMGN5NXpjR1ZqYVdacFkwOW1abk5sZENsY2JpQWdJQ0FnSUNBZ1B5QnZjSFJ6TG5Od1pXTnBabWxqVDJabWMyVjBYRzRnSUNBZ0lDQWdJRG9nZW05dVpWUnZWWE5sTG05bVpuTmxkQ2gwYzA1dmR5a3NYRzRnSUNBZ0lDQnViM0p0WVd4cGVtVmtJRDBnYm05eWJXRnNhWHBsVDJKcVpXTjBLRzlpYWl3Z2JtOXliV0ZzYVhwbFZXNXBkQ2tzWEc0Z0lDQWdJQ0JqYjI1MFlXbHVjMDl5WkdsdVlXd2dQU0FoYVhOVmJtUmxabWx1WldRb2JtOXliV0ZzYVhwbFpDNXZjbVJwYm1Gc0tTeGNiaUFnSUNBZ0lHTnZiblJoYVc1elIzSmxaMjl5V1dWaGNpQTlJQ0ZwYzFWdVpHVm1hVzVsWkNodWIzSnRZV3hwZW1Wa0xubGxZWElwTEZ4dUlDQWdJQ0FnWTI5dWRHRnBibk5IY21WbmIzSk5SQ0E5SUNGcGMxVnVaR1ZtYVc1bFpDaHViM0p0WVd4cGVtVmtMbTF2Ym5Sb0tTQjhmQ0FoYVhOVmJtUmxabWx1WldRb2JtOXliV0ZzYVhwbFpDNWtZWGtwTEZ4dUlDQWdJQ0FnWTI5dWRHRnBibk5IY21WbmIzSWdQU0JqYjI1MFlXbHVjMGR5WldkdmNsbGxZWElnZkh3Z1kyOXVkR0ZwYm5OSGNtVm5iM0pOUkN4Y2JpQWdJQ0FnSUdSbFptbHVhWFJsVjJWbGEwUmxaaUE5SUc1dmNtMWhiR2w2WldRdWQyVmxhMWxsWVhJZ2ZId2dibTl5YldGc2FYcGxaQzUzWldWclRuVnRZbVZ5TEZ4dUlDQWdJQ0FnYkc5aklEMGdURzlqWVd4bExtWnliMjFQWW1wbFkzUW9iM0IwY3lrN1hHNWNiaUFnSUNBdkx5QmpZWE5sY3pwY2JpQWdJQ0F2THlCcWRYTjBJR0VnZDJWbGEyUmhlU0F0UGlCMGFHbHpJSGRsWldzbmN5QnBibk4wWVc1alpTQnZaaUIwYUdGMElIZGxaV3RrWVhrc0lHNXZJSGR2Y25KcFpYTmNiaUFnSUNBdkx5QW9aM0psWjI5eWFXRnVJR1JoZEdFZ2IzSWdiM0prYVc1aGJDa2dLeUFvZDJWbGExbGxZWElnYjNJZ2QyVmxhMDUxYldKbGNpa2dMVDRnWlhKeWIzSmNiaUFnSUNBdkx5QW9aM0psWjI5eWFXRnVJRzF2Ym5Sb0lHOXlJR1JoZVNrZ0t5QnZjbVJwYm1Gc0lDMCtJR1Z5Y205eVhHNGdJQ0FnTHk4Z2IzUm9aWEozYVhObElHcDFjM1FnZFhObElIZGxaV3R6SUc5eUlHOXlaR2x1WVd4eklHOXlJR2R5WldkdmNtbGhiaXdnWkdWd1pXNWthVzVuSUc5dUlIZG9ZWFFuY3lCemNHVmphV1pwWldSY2JseHVJQ0FnSUdsbUlDZ29ZMjl1ZEdGcGJuTkhjbVZuYjNJZ2ZId2dZMjl1ZEdGcGJuTlBjbVJwYm1Gc0tTQW1KaUJrWldacGJtbDBaVmRsWld0RVpXWXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJEYjI1bWJHbGpkR2x1WjFOd1pXTnBabWxqWVhScGIyNUZjbkp2Y2loY2JpQWdJQ0FnSUNBZ1hDSkRZVzRuZENCdGFYZ2dkMlZsYTFsbFlYSXZkMlZsYTA1MWJXSmxjaUIxYm1sMGN5QjNhWFJvSUhsbFlYSXZiVzl1ZEdndlpHRjVJRzl5SUc5eVpHbHVZV3h6WENKY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHTnZiblJoYVc1elIzSmxaMjl5VFVRZ0ppWWdZMjl1ZEdGcGJuTlBjbVJwYm1Gc0tTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dRMjl1Wm14cFkzUnBibWRUY0dWamFXWnBZMkYwYVc5dVJYSnliM0lvWENKRFlXNG5kQ0J0YVhnZ2IzSmthVzVoYkNCa1lYUmxjeUIzYVhSb0lHMXZiblJvTDJSaGVWd2lLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCMWMyVlhaV1ZyUkdGMFlTQTlJR1JsWm1sdWFYUmxWMlZsYTBSbFppQjhmQ0FvYm05eWJXRnNhWHBsWkM1M1pXVnJaR0Y1SUNZbUlDRmpiMjUwWVdsdWMwZHlaV2R2Y2lrN1hHNWNiaUFnSUNBdkx5QmpiMjVtYVdkMWNtVWdiM1Z5YzJWc2RtVnpJSFJ2SUdSbFlXd2dkMmwwYUNCbmNtVm5iM0pwWVc0Z1pHRjBaWE1nYjNJZ2QyVmxheUJ6ZEhWbVpseHVJQ0FnSUd4bGRDQjFibWwwY3l4Y2JpQWdJQ0FnSUdSbFptRjFiSFJXWVd4MVpYTXNYRzRnSUNBZ0lDQnZZbXBPYjNjZ1BTQjBjMVJ2VDJKcUtIUnpUbTkzTENCdlptWnpaWFJRY205MmFYTXBPMXh1SUNBZ0lHbG1JQ2gxYzJWWFpXVnJSR0YwWVNrZ2UxeHVJQ0FnSUNBZ2RXNXBkSE1nUFNCdmNtUmxjbVZrVjJWbGExVnVhWFJ6TzF4dUlDQWdJQ0FnWkdWbVlYVnNkRlpoYkhWbGN5QTlJR1JsWm1GMWJIUlhaV1ZyVlc1cGRGWmhiSFZsY3p0Y2JpQWdJQ0FnSUc5aWFrNXZkeUE5SUdkeVpXZHZjbWxoYmxSdlYyVmxheWh2WW1wT2IzY3BPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9ZMjl1ZEdGcGJuTlBjbVJwYm1Gc0tTQjdYRzRnSUNBZ0lDQjFibWwwY3lBOUlHOXlaR1Z5WldSUGNtUnBibUZzVlc1cGRITTdYRzRnSUNBZ0lDQmtaV1poZFd4MFZtRnNkV1Z6SUQwZ1pHVm1ZWFZzZEU5eVpHbHVZV3hWYm1sMFZtRnNkV1Z6TzF4dUlDQWdJQ0FnYjJKcVRtOTNJRDBnWjNKbFoyOXlhV0Z1Vkc5UGNtUnBibUZzS0c5aWFrNXZkeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIVnVhWFJ6SUQwZ2IzSmtaWEpsWkZWdWFYUnpPMXh1SUNBZ0lDQWdaR1ZtWVhWc2RGWmhiSFZsY3lBOUlHUmxabUYxYkhSVmJtbDBWbUZzZFdWek8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklITmxkQ0JrWldaaGRXeDBJSFpoYkhWbGN5Qm1iM0lnYldsemMybHVaeUJ6ZEhWbVpseHVJQ0FnSUd4bGRDQm1iM1Z1WkVacGNuTjBJRDBnWm1Gc2MyVTdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQjFJRzltSUhWdWFYUnpLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQjJJRDBnYm05eWJXRnNhWHBsWkZ0MVhUdGNiaUFnSUNBZ0lHbG1JQ2doYVhOVmJtUmxabWx1WldRb2Rpa3BJSHRjYmlBZ0lDQWdJQ0FnWm05MWJtUkdhWEp6ZENBOUlIUnlkV1U3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dadmRXNWtSbWx5YzNRcElIdGNiaUFnSUNBZ0lDQWdibTl5YldGc2FYcGxaRnQxWFNBOUlHUmxabUYxYkhSV1lXeDFaWE5iZFYwN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCdWIzSnRZV3hwZW1Wa1czVmRJRDBnYjJKcVRtOTNXM1ZkTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUcxaGEyVWdjM1Z5WlNCMGFHVWdkbUZzZFdWeklIZGxJR2hoZG1VZ1lYSmxJR2x1SUhKaGJtZGxYRzRnSUNBZ1kyOXVjM1FnYUdsbmFHVnlUM0prWlhKSmJuWmhiR2xrSUQwZ2RYTmxWMlZsYTBSaGRHRmNiaUFnSUNBZ0lDQWdQeUJvWVhOSmJuWmhiR2xrVjJWbGEwUmhkR0VvYm05eWJXRnNhWHBsWkNsY2JpQWdJQ0FnSUNBZ09pQmpiMjUwWVdsdWMwOXlaR2x1WVd4Y2JpQWdJQ0FnSUNBZ1B5Qm9ZWE5KYm5aaGJHbGtUM0prYVc1aGJFUmhkR0VvYm05eWJXRnNhWHBsWkNsY2JpQWdJQ0FnSUNBZ09pQm9ZWE5KYm5aaGJHbGtSM0psWjI5eWFXRnVSR0YwWVNodWIzSnRZV3hwZW1Wa0tTeGNiaUFnSUNBZ0lHbHVkbUZzYVdRZ1BTQm9hV2RvWlhKUGNtUmxja2x1ZG1Gc2FXUWdmSHdnYUdGelNXNTJZV3hwWkZScGJXVkVZWFJoS0c1dmNtMWhiR2w2WldRcE8xeHVYRzRnSUNBZ2FXWWdLR2x1ZG1Gc2FXUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQkVZWFJsVkdsdFpTNXBiblpoYkdsa0tHbHVkbUZzYVdRcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklHTnZiWEIxZEdVZ2RHaGxJR0ZqZEhWaGJDQjBhVzFsWEc0Z0lDQWdZMjl1YzNRZ1ozSmxaMjl5YVdGdUlEMGdkWE5sVjJWbGEwUmhkR0ZjYmlBZ0lDQWdJQ0FnUHlCM1pXVnJWRzlIY21WbmIzSnBZVzRvYm05eWJXRnNhWHBsWkNsY2JpQWdJQ0FnSUNBZ09pQmpiMjUwWVdsdWMwOXlaR2x1WVd4Y2JpQWdJQ0FnSUNBZ1B5QnZjbVJwYm1Gc1ZHOUhjbVZuYjNKcFlXNG9ibTl5YldGc2FYcGxaQ2xjYmlBZ0lDQWdJQ0FnT2lCdWIzSnRZV3hwZW1Wa0xGeHVJQ0FnSUNBZ1czUnpSbWx1WVd3c0lHOW1abk5sZEVacGJtRnNYU0E5SUc5aWFsUnZWRk1vWjNKbFoyOXlhV0Z1TENCdlptWnpaWFJRY205MmFYTXNJSHB2Ym1WVWIxVnpaU2tzWEc0Z0lDQWdJQ0JwYm5OMElEMGdibVYzSUVSaGRHVlVhVzFsS0h0Y2JpQWdJQ0FnSUNBZ2RITTZJSFJ6Um1sdVlXd3NYRzRnSUNBZ0lDQWdJSHB2Ym1VNklIcHZibVZVYjFWelpTeGNiaUFnSUNBZ0lDQWdiem9nYjJabWMyVjBSbWx1WVd3c1hHNGdJQ0FnSUNBZ0lHeHZZeXhjYmlBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnTHk4Z1ozSmxaMjl5YVdGdUlHUmhkR0VnS3lCM1pXVnJaR0Y1SUhObGNuWmxjeUJ2Ym14NUlIUnZJSFpoYkdsa1lYUmxYRzRnSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1F1ZDJWbGEyUmhlU0FtSmlCamIyNTBZV2x1YzBkeVpXZHZjaUFtSmlCdlltb3VkMlZsYTJSaGVTQWhQVDBnYVc1emRDNTNaV1ZyWkdGNUtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1JHRjBaVlJwYldVdWFXNTJZV3hwWkNoY2JpQWdJQ0FnSUNBZ1hDSnRhWE50WVhSamFHVmtJSGRsWld0a1lYbGNJaXhjYmlBZ0lDQWdJQ0FnWUhsdmRTQmpZVzRuZENCemNHVmphV1o1SUdKdmRHZ2dZU0IzWldWclpHRjVJRzltSUNSN2JtOXliV0ZzYVhwbFpDNTNaV1ZyWkdGNWZTQmhibVFnWVNCa1lYUmxJRzltSUNSN2FXNXpkQzUwYjBsVFR5Z3BmV0JjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHbHVjM1E3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsSUdFZ1JHRjBaVlJwYldVZ1puSnZiU0JoYmlCSlUwOGdPRFl3TVNCemRISnBibWRjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUmxlSFFnTFNCMGFHVWdTVk5QSUhOMGNtbHVaMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2IzQjBjeUF0SUc5d2RHbHZibk1nZEc4Z1lXWm1aV04wSUhSb1pTQmpjbVZoZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaM3hhYjI1bGZTQmJiM0IwY3k1NmIyNWxQU2RzYjJOaGJDZGRJQzBnZFhObElIUm9hWE1nZW05dVpTQnBaaUJ1YnlCdlptWnpaWFFnYVhNZ2MzQmxZMmxtYVdWa0lHbHVJSFJvWlNCcGJuQjFkQ0J6ZEhKcGJtY2dhWFJ6Wld4bUxpQlhhV3hzSUdGc2MyOGdZMjl1ZG1WeWRDQjBhR1VnZEdsdFpTQjBieUIwYUdseklIcHZibVZjYmlBZ0lDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQmJiM0IwY3k1elpYUmFiMjVsUFdaaGJITmxYU0F0SUc5MlpYSnlhV1JsSUhSb1pTQjZiMjVsSUhkcGRHZ2dZU0JtYVhobFpDMXZabVp6WlhRZ2VtOXVaU0J6Y0dWamFXWnBaV1FnYVc0Z2RHaGxJSE4wY21sdVp5QnBkSE5sYkdZc0lHbG1JR2wwSUhOd1pXTnBabWxsY3lCdmJtVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0dmNIUnpMbXh2WTJGc1pUMG5jM2x6ZEdWdEozTWdiRzlqWVd4bEoxMGdMU0JoSUd4dlkyRnNaU0IwYnlCelpYUWdiMjRnZEdobElISmxjM1ZzZEdsdVp5QkVZWFJsVkdsdFpTQnBibk4wWVc1alpWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzI5d2RITXViM1YwY0hWMFEyRnNaVzVrWVhKZElDMGdkR2hsSUc5MWRIQjFkQ0JqWVd4bGJtUmhjaUIwYnlCelpYUWdiMjRnZEdobElISmxjM1ZzZEdsdVp5QkVZWFJsVkdsdFpTQnBibk4wWVc1alpWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzI5d2RITXViblZ0WW1WeWFXNW5VM2x6ZEdWdFhTQXRJSFJvWlNCdWRXMWlaWEpwYm1jZ2MzbHpkR1Z0SUhSdklITmxkQ0J2YmlCMGFHVWdjbVZ6ZFd4MGFXNW5JRVJoZEdWVWFXMWxJR2x1YzNSaGJtTmxYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUmhkR1ZVYVcxbExtWnliMjFKVTA4b0p6SXdNVFl0TURVdE1qVlVNRGs2TURnNk16UXVNVEl6SnlsY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Wm5KdmJVbFRUeWduTWpBeE5pMHdOUzB5TlZRd09Ub3dPRG96TkM0eE1qTXJNRFk2TURBbktWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1bWNtOXRTVk5QS0NjeU1ERTJMVEExTFRJMVZEQTVPakE0T2pNMExqRXlNeXN3Tmpvd01DY3NJSHR6WlhSYWIyNWxPaUIwY25WbGZTbGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdVpuSnZiVWxUVHlnbk1qQXhOaTB3TlMweU5WUXdPVG93T0Rvek5DNHhNak1uTENCN2VtOXVaVG9nSjNWMFl5ZDlLVnh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNW1jbTl0U1ZOUEtDY3lNREUyTFZjd05TMDBKeWxjYmlBZ0lDb2dRSEpsZEhWeWJpQjdSR0YwWlZScGJXVjlYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdabkp2YlVsVFR5aDBaWGgwTENCdmNIUnpJRDBnZTMwcElIdGNiaUFnSUNCamIyNXpkQ0JiZG1Gc2N5d2djR0Z5YzJWa1dtOXVaVjBnUFNCd1lYSnpaVWxUVDBSaGRHVW9kR1Y0ZENrN1hHNGdJQ0FnY21WMGRYSnVJSEJoY25ObFJHRjBZVlJ2UkdGMFpWUnBiV1VvZG1Gc2N5d2djR0Z5YzJWa1dtOXVaU3dnYjNCMGN5d2dYQ0pKVTA4Z09EWXdNVndpTENCMFpYaDBLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1VnWVNCRVlYUmxWR2x0WlNCbWNtOXRJR0Z1SUZKR1F5QXlPREl5SUhOMGNtbHVaMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RHVjRkQ0F0SUhSb1pTQlNSa01nTWpneU1pQnpkSEpwYm1kY2JpQWdJQ29nUUhCaGNtRnRJSHRQWW1wbFkzUjlJRzl3ZEhNZ0xTQnZjSFJwYjI1eklIUnZJR0ZtWm1WamRDQjBhR1VnWTNKbFlYUnBiMjVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOFdtOXVaWDBnVzI5d2RITXVlbTl1WlQwbmJHOWpZV3duWFNBdElHTnZiblpsY25RZ2RHaGxJSFJwYldVZ2RHOGdkR2hwY3lCNmIyNWxMaUJUYVc1alpTQjBhR1VnYjJabWMyVjBJR2x6SUdGc2QyRjVjeUJ6Y0dWamFXWnBaV1FnYVc0Z2RHaGxJSE4wY21sdVp5QnBkSE5sYkdZc0lIUm9hWE1nYUdGeklHNXZJR1ZtWm1WamRDQnZiaUIwYUdVZ2FXNTBaWEp3Y21WMFlYUnBiMjRnYjJZZ2MzUnlhVzVuTENCdFpYSmxiSGtnZEdobElIcHZibVVnZEdobElISmxjM1ZzZEdsdVp5QkVZWFJsVkdsdFpTQnBjeUJsZUhCeVpYTnpaV1FnYVc0dVhHNGdJQ0FxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnVzI5d2RITXVjMlYwV205dVpUMW1ZV3h6WlYwZ0xTQnZkbVZ5Y21sa1pTQjBhR1VnZW05dVpTQjNhWFJvSUdFZ1ptbDRaV1F0YjJabWMyVjBJSHB2Ym1VZ2MzQmxZMmxtYVdWa0lHbHVJSFJvWlNCemRISnBibWNnYVhSelpXeG1MQ0JwWmlCcGRDQnpjR1ZqYVdacFpYTWdiMjVsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmJiM0IwY3k1c2IyTmhiR1U5SjNONWMzUmxiU2R6SUd4dlkyRnNaU2RkSUMwZ1lTQnNiMk5oYkdVZ2RHOGdjMlYwSUc5dUlIUm9aU0J5WlhOMWJIUnBibWNnUkdGMFpWUnBiV1VnYVc1emRHRnVZMlZjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHOXdkSE11YjNWMGNIVjBRMkZzWlc1a1lYSWdMU0IwYUdVZ2IzVjBjSFYwSUdOaGJHVnVaR0Z5SUhSdklITmxkQ0J2YmlCMGFHVWdjbVZ6ZFd4MGFXNW5JRVJoZEdWVWFXMWxJR2x1YzNSaGJtTmxYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdmNIUnpMbTUxYldKbGNtbHVaMU41YzNSbGJTQXRJSFJvWlNCdWRXMWlaWEpwYm1jZ2MzbHpkR1Z0SUhSdklITmxkQ0J2YmlCMGFHVWdjbVZ6ZFd4MGFXNW5JRVJoZEdWVWFXMWxJR2x1YzNSaGJtTmxYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUmhkR1ZVYVcxbExtWnliMjFTUmtNeU9ESXlLQ2N5TlNCT2IzWWdNakF4TmlBeE16b3lNem94TWlCSFRWUW5LVnh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNW1jbTl0VWtaRE1qZ3lNaWduUm5KcExDQXlOU0JPYjNZZ01qQXhOaUF4TXpveU16b3hNaUFyTURZd01DY3BYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUmhkR1ZVYVcxbExtWnliMjFTUmtNeU9ESXlLQ2N5TlNCT2IzWWdNakF4TmlBeE16b3lNeUJhSnlsY2JpQWdJQ29nUUhKbGRIVnliaUI3UkdGMFpWUnBiV1Y5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWm5KdmJWSkdRekk0TWpJb2RHVjRkQ3dnYjNCMGN5QTlJSHQ5S1NCN1hHNGdJQ0FnWTI5dWMzUWdXM1poYkhNc0lIQmhjbk5sWkZwdmJtVmRJRDBnY0dGeWMyVlNSa015T0RJeVJHRjBaU2gwWlhoMEtUdGNiaUFnSUNCeVpYUjFjbTRnY0dGeWMyVkVZWFJoVkc5RVlYUmxWR2x0WlNoMllXeHpMQ0J3WVhKelpXUmFiMjVsTENCdmNIUnpMQ0JjSWxKR1F5QXlPREl5WENJc0lIUmxlSFFwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTnlaV0YwWlNCaElFUmhkR1ZVYVcxbElHWnliMjBnWVc0Z1NGUlVVQ0JvWldGa1pYSWdaR0YwWlZ4dUlDQWdLaUJBYzJWbElHaDBkSEJ6T2k4dmQzZDNMbmN6TG05eVp5OVFjbTkwYjJOdmJITXZjbVpqTWpZeE5pOXlabU15TmpFMkxYTmxZek11YUhSdGJDTnpaV016TGpNdU1WeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEdWNGRDQXRJSFJvWlNCSVZGUlFJR2hsWVdSbGNpQmtZWFJsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdUMkpxWldOMGZTQnZjSFJ6SUMwZ2IzQjBhVzl1Y3lCMGJ5QmhabVpsWTNRZ2RHaGxJR055WldGMGFXOXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZkZwdmJtVjlJRnR2Y0hSekxucHZibVU5SjJ4dlkyRnNKMTBnTFNCamIyNTJaWEowSUhSb1pTQjBhVzFsSUhSdklIUm9hWE1nZW05dVpTNGdVMmx1WTJVZ1NGUlVVQ0JrWVhSbGN5QmhjbVVnWVd4M1lYbHpJR2x1SUZWVVF5d2dkR2hwY3lCb1lYTWdibThnWldabVpXTjBJRzl1SUhSb1pTQnBiblJsY25CeVpYUmhkR2x2YmlCdlppQnpkSEpwYm1jc0lHMWxjbVZzZVNCMGFHVWdlbTl1WlNCMGFHVWdjbVZ6ZFd4MGFXNW5JRVJoZEdWVWFXMWxJR2x6SUdWNGNISmxjM05sWkNCcGJpNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCYmIzQjBjeTV6WlhSYWIyNWxQV1poYkhObFhTQXRJRzkyWlhKeWFXUmxJSFJvWlNCNmIyNWxJSGRwZEdnZ2RHaGxJR1pwZUdWa0xXOW1abk5sZENCNmIyNWxJSE53WldOcFptbGxaQ0JwYmlCMGFHVWdjM1J5YVc1bkxpQkdiM0lnU0ZSVVVDQmtZWFJsY3l3Z2RHaHBjeUJwY3lCaGJIZGhlWE1nVlZSRExDQnpieUIwYUdseklHOXdkR2x2YmlCcGN5QmxjWFZwZG1Gc1pXNTBJSFJ2SUhObGRIUnBibWNnZEdobElHQjZiMjVsWUNCdmNIUnBiMjRnZEc4Z0ozVjBZeWNzSUdKMWRDQjBhR2x6SUc5d2RHbHZiaUJwY3lCcGJtTnNkV1JsWkNCbWIzSWdZMjl1YzJsemRHVnVZM2tnZDJsMGFDQnphVzFwYkdGeUlHMWxkR2h2WkhNdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JiYjNCMGN5NXNiMk5oYkdVOUozTjVjM1JsYlNkeklHeHZZMkZzWlNkZElDMGdZU0JzYjJOaGJHVWdkRzhnYzJWMElHOXVJSFJvWlNCeVpYTjFiSFJwYm1jZ1JHRjBaVlJwYldVZ2FXNXpkR0Z1WTJWY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzl3ZEhNdWIzVjBjSFYwUTJGc1pXNWtZWElnTFNCMGFHVWdiM1YwY0hWMElHTmhiR1Z1WkdGeUlIUnZJSE5sZENCdmJpQjBhR1VnY21WemRXeDBhVzVuSUVSaGRHVlVhVzFsSUdsdWMzUmhibU5sWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnZjSFJ6TG01MWJXSmxjbWx1WjFONWMzUmxiU0F0SUhSb1pTQnVkVzFpWlhKcGJtY2djM2x6ZEdWdElIUnZJSE5sZENCdmJpQjBhR1VnY21WemRXeDBhVzVuSUVSaGRHVlVhVzFsSUdsdWMzUmhibU5sWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbVp5YjIxSVZGUlFLQ2RUZFc0c0lEQTJJRTV2ZGlBeE9UazBJREE0T2pRNU9qTTNJRWROVkNjcFhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG1aeWIyMUlWRlJRS0NkVGRXNWtZWGtzSURBMkxVNXZkaTA1TkNBd09EbzBPVG96TnlCSFRWUW5LVnh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNW1jbTl0U0ZSVVVDZ25VM1Z1SUU1dmRpQWdOaUF3T0RvME9Ub3pOeUF4T1RrMEp5bGNiaUFnSUNvZ1FISmxkSFZ5YmlCN1JHRjBaVlJwYldWOVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1puSnZiVWhVVkZBb2RHVjRkQ3dnYjNCMGN5QTlJSHQ5S1NCN1hHNGdJQ0FnWTI5dWMzUWdXM1poYkhNc0lIQmhjbk5sWkZwdmJtVmRJRDBnY0dGeWMyVklWRlJRUkdGMFpTaDBaWGgwS1R0Y2JpQWdJQ0J5WlhSMWNtNGdjR0Z5YzJWRVlYUmhWRzlFWVhSbFZHbHRaU2gyWVd4ekxDQndZWEp6WldSYWIyNWxMQ0J2Y0hSekxDQmNJa2hVVkZCY0lpd2diM0IwY3lrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRM0psWVhSbElHRWdSR0YwWlZScGJXVWdabkp2YlNCaGJpQnBibkIxZENCemRISnBibWNnWVc1a0lHWnZjbTFoZENCemRISnBibWN1WEc0Z0lDQXFJRVJsWm1GMWJIUnpJSFJ2SUdWdUxWVlRJR2xtSUc1dklHeHZZMkZzWlNCb1lYTWdZbVZsYmlCemNHVmphV1pwWldRc0lISmxaMkZ5Wkd4bGMzTWdiMllnZEdobElITjVjM1JsYlNkeklHeHZZMkZzWlM0Z1JtOXlJR0VnZEdGaWJHVWdiMllnZEc5clpXNXpJR0Z1WkNCMGFHVnBjaUJwYm5SbGNuQnlaWFJoZEdsdmJuTXNJSE5sWlNCYmFHVnlaVjBvYUhSMGNITTZMeTl0YjIxbGJuUXVaMmwwYUhWaUxtbHZMMngxZUc5dUx5TXZjR0Z5YzJsdVp6OXBaRDEwWVdKc1pTMXZaaTEwYjJ0bGJuTXBMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RHVjRkQ0F0SUhSb1pTQnpkSEpwYm1jZ2RHOGdjR0Z5YzJWY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR1p0ZENBdElIUm9aU0JtYjNKdFlYUWdkR2hsSUhOMGNtbHVaeUJwY3lCbGVIQmxZM1JsWkNCMGJ5QmlaU0JwYmlBb2MyVmxJSFJvWlNCc2FXNXJJR0psYkc5M0lHWnZjaUIwYUdVZ1ptOXliV0YwY3lsY2JpQWdJQ29nUUhCaGNtRnRJSHRQWW1wbFkzUjlJRzl3ZEhNZ0xTQnZjSFJwYjI1eklIUnZJR0ZtWm1WamRDQjBhR1VnWTNKbFlYUnBiMjVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOFdtOXVaWDBnVzI5d2RITXVlbTl1WlQwbmJHOWpZV3duWFNBdElIVnpaU0IwYUdseklIcHZibVVnYVdZZ2JtOGdiMlptYzJWMElHbHpJSE53WldOcFptbGxaQ0JwYmlCMGFHVWdhVzV3ZFhRZ2MzUnlhVzVuSUdsMGMyVnNaaTRnVjJsc2JDQmhiSE52SUdOdmJuWmxjblFnZEdobElFUmhkR1ZVYVcxbElIUnZJSFJvYVhNZ2VtOXVaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlGdHZjSFJ6TG5ObGRGcHZibVU5Wm1Gc2MyVmRJQzBnYjNabGNuSnBaR1VnZEdobElIcHZibVVnZDJsMGFDQmhJSHB2Ym1VZ2MzQmxZMmxtYVdWa0lHbHVJSFJvWlNCemRISnBibWNnYVhSelpXeG1MQ0JwWmlCcGRDQnpjR1ZqYVdacFpYTWdiMjVsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmJiM0IwY3k1c2IyTmhiR1U5SjJWdUxWVlRKMTBnTFNCaElHeHZZMkZzWlNCemRISnBibWNnZEc4Z2RYTmxJSGRvWlc0Z2NHRnljMmx1Wnk0Z1YybHNiQ0JoYkhOdklITmxkQ0IwYUdVZ1JHRjBaVlJwYldVZ2RHOGdkR2hwY3lCc2IyTmhiR1ZjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHOXdkSE11Ym5WdFltVnlhVzVuVTNsemRHVnRJQzBnZEdobElHNTFiV0psY21sdVp5QnplWE4wWlcwZ2RHOGdkWE5sSUhkb1pXNGdjR0Z5YzJsdVp5NGdWMmxzYkNCaGJITnZJSE5sZENCMGFHVWdjbVZ6ZFd4MGFXNW5JRVJoZEdWVWFXMWxJSFJ2SUhSb2FYTWdiblZ0WW1WeWFXNW5JSE41YzNSbGJWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYjNCMGN5NXZkWFJ3ZFhSRFlXeGxibVJoY2lBdElIUm9aU0J2ZFhSd2RYUWdZMkZzWlc1a1lYSWdkRzhnYzJWMElHOXVJSFJvWlNCeVpYTjFiSFJwYm1jZ1JHRjBaVlJwYldVZ2FXNXpkR0Z1WTJWY2JpQWdJQ29nUUhKbGRIVnliaUI3UkdGMFpWUnBiV1Y5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWm5KdmJVWnZjbTFoZENoMFpYaDBMQ0JtYlhRc0lHOXdkSE1nUFNCN2ZTa2dlMXh1SUNBZ0lHbG1JQ2hwYzFWdVpHVm1hVzVsWkNoMFpYaDBLU0I4ZkNCcGMxVnVaR1ZtYVc1bFpDaG1iWFFwS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1NXNTJZV3hwWkVGeVozVnRaVzUwUlhKeWIzSW9YQ0ptY205dFJtOXliV0YwSUhKbGNYVnBjbVZ6SUdGdUlHbHVjSFYwSUhOMGNtbHVaeUJoYm1RZ1lTQm1iM0p0WVhSY0lpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnZXlCc2IyTmhiR1VnUFNCdWRXeHNMQ0J1ZFcxaVpYSnBibWRUZVhOMFpXMGdQU0J1ZFd4c0lIMGdQU0J2Y0hSekxGeHVJQ0FnSUNBZ2JHOWpZV3hsVkc5VmMyVWdQU0JNYjJOaGJHVXVabkp2YlU5d2RITW9lMXh1SUNBZ0lDQWdJQ0JzYjJOaGJHVXNYRzRnSUNBZ0lDQWdJRzUxYldKbGNtbHVaMU41YzNSbGJTeGNiaUFnSUNBZ0lDQWdaR1ZtWVhWc2RGUnZSVTQ2SUhSeWRXVXNYRzRnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJRnQyWVd4ekxDQndZWEp6WldSYWIyNWxMQ0J6Y0dWamFXWnBZMDltWm5ObGRDd2dhVzUyWVd4cFpGMGdQU0J3WVhKelpVWnliMjFVYjJ0bGJuTW9iRzlqWVd4bFZHOVZjMlVzSUhSbGVIUXNJR1p0ZENrN1hHNGdJQ0FnYVdZZ0tHbHVkbUZzYVdRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCRVlYUmxWR2x0WlM1cGJuWmhiR2xrS0dsdWRtRnNhV1FwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2NHRnljMlZFWVhSaFZHOUVZWFJsVkdsdFpTaDJZV3h6TENCd1lYSnpaV1JhYjI1bExDQnZjSFJ6TENCZ1ptOXliV0YwSUNSN1ptMTBmV0FzSUhSbGVIUXNJSE53WldOcFptbGpUMlptYzJWMEtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsY0hKbFkyRjBaV1FnZFhObElHWnliMjFHYjNKdFlYUWdhVzV6ZEdWaFpGeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHWnliMjFUZEhKcGJtY29kR1Y0ZEN3Z1ptMTBMQ0J2Y0hSeklEMGdlMzBwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdSR0YwWlZScGJXVXVabkp2YlVadmNtMWhkQ2gwWlhoMExDQm1iWFFzSUc5d2RITXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOeVpXRjBaU0JoSUVSaGRHVlVhVzFsSUdaeWIyMGdZU0JUVVV3Z1pHRjBaU3dnZEdsdFpTd2diM0lnWkdGMFpYUnBiV1ZjYmlBZ0lDb2dSR1ZtWVhWc2RITWdkRzhnWlc0dFZWTWdhV1lnYm04Z2JHOWpZV3hsSUdoaGN5QmlaV1Z1SUhOd1pXTnBabWxsWkN3Z2NtVm5ZWEprYkdWemN5QnZaaUIwYUdVZ2MzbHpkR1Z0SjNNZ2JHOWpZV3hsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBaWGgwSUMwZ2RHaGxJSE4wY21sdVp5QjBieUJ3WVhKelpWeHVJQ0FnS2lCQWNHRnlZVzBnZTA5aWFtVmpkSDBnYjNCMGN5QXRJRzl3ZEdsdmJuTWdkRzhnWVdabVpXTjBJSFJvWlNCamNtVmhkR2x2Ymx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozeGFiMjVsZlNCYmIzQjBjeTU2YjI1bFBTZHNiMk5oYkNkZElDMGdkWE5sSUhSb2FYTWdlbTl1WlNCcFppQnVieUJ2Wm1aelpYUWdhWE1nYzNCbFkybG1hV1ZrSUdsdUlIUm9aU0JwYm5CMWRDQnpkSEpwYm1jZ2FYUnpaV3htTGlCWGFXeHNJR0ZzYzI4Z1kyOXVkbVZ5ZENCMGFHVWdSR0YwWlZScGJXVWdkRzhnZEdocGN5QjZiMjVsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXMjl3ZEhNdWMyVjBXbTl1WlQxbVlXeHpaVjBnTFNCdmRtVnljbWxrWlNCMGFHVWdlbTl1WlNCM2FYUm9JR0VnZW05dVpTQnpjR1ZqYVdacFpXUWdhVzRnZEdobElITjBjbWx1WnlCcGRITmxiR1lzSUdsbUlHbDBJSE53WldOcFptbGxjeUJ2Ym1WY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnR2Y0hSekxteHZZMkZzWlQwblpXNHRWVk1uWFNBdElHRWdiRzlqWVd4bElITjBjbWx1WnlCMGJ5QjFjMlVnZDJobGJpQndZWEp6YVc1bkxpQlhhV3hzSUdGc2MyOGdjMlYwSUhSb1pTQkVZWFJsVkdsdFpTQjBieUIwYUdseklHeHZZMkZzWlZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiM0IwY3k1dWRXMWlaWEpwYm1kVGVYTjBaVzBnTFNCMGFHVWdiblZ0WW1WeWFXNW5JSE41YzNSbGJTQjBieUIxYzJVZ2QyaGxiaUJ3WVhKemFXNW5MaUJYYVd4c0lHRnNjMjhnYzJWMElIUm9aU0J5WlhOMWJIUnBibWNnUkdGMFpWUnBiV1VnZEc4Z2RHaHBjeUJ1ZFcxaVpYSnBibWNnYzNsemRHVnRYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdmNIUnpMbTkxZEhCMWRFTmhiR1Z1WkdGeUlDMGdkR2hsSUc5MWRIQjFkQ0JqWVd4bGJtUmhjaUIwYnlCelpYUWdiMjRnZEdobElISmxjM1ZzZEdsdVp5QkVZWFJsVkdsdFpTQnBibk4wWVc1alpWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1bWNtOXRVMUZNS0NjeU1ERTNMVEExTFRFMUp5bGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdVpuSnZiVk5SVENnbk1qQXhOeTB3TlMweE5TQXdPVG94TWpvek5DY3BYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUmhkR1ZVYVcxbExtWnliMjFUVVV3b0p6SXdNVGN0TURVdE1UVWdNRGs2TVRJNk16UXVNelF5SnlsY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Wm5KdmJWTlJUQ2duTWpBeE55MHdOUzB4TlNBd09Ub3hNam96TkM0ek5ESXJNRFk2TURBbktWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1bWNtOXRVMUZNS0NjeU1ERTNMVEExTFRFMUlEQTVPakV5T2pNMExqTTBNaUJCYldWeWFXTmhMMHh2YzE5QmJtZGxiR1Z6SnlsY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Wm5KdmJWTlJUQ2duTWpBeE55MHdOUzB4TlNBd09Ub3hNam96TkM0ek5ESWdRVzFsY21sallTOU1iM05mUVc1blpXeGxjeWNzSUhzZ2MyVjBXbTl1WlRvZ2RISjFaU0I5S1Z4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzVtY205dFUxRk1LQ2N5TURFM0xUQTFMVEUxSURBNU9qRXlPak0wTGpNME1pY3NJSHNnZW05dVpUb2dKMEZ0WlhKcFkyRXZURzl6WDBGdVoyVnNaWE1uSUgwcFhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG1aeWIyMVRVVXdvSnpBNU9qRXlPak0wTGpNME1pY3BYRzRnSUNBcUlFQnlaWFIxY200Z2UwUmhkR1ZVYVcxbGZWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHWnliMjFUVVV3b2RHVjRkQ3dnYjNCMGN5QTlJSHQ5S1NCN1hHNGdJQ0FnWTI5dWMzUWdXM1poYkhNc0lIQmhjbk5sWkZwdmJtVmRJRDBnY0dGeWMyVlRVVXdvZEdWNGRDazdYRzRnSUNBZ2NtVjBkWEp1SUhCaGNuTmxSR0YwWVZSdlJHRjBaVlJwYldVb2RtRnNjeXdnY0dGeWMyVmtXbTl1WlN3Z2IzQjBjeXdnWENKVFVVeGNJaXdnZEdWNGRDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxJR0Z1SUdsdWRtRnNhV1FnUkdGMFpWUnBiV1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnlaV0Z6YjI0Z0xTQnphVzF3YkdVZ2MzUnlhVzVuSUc5bUlIZG9lU0IwYUdseklFUmhkR1ZVYVcxbElHbHpJR2x1ZG1Gc2FXUXVJRk5vYjNWc1pDQnViM1FnWTI5dWRHRnBiaUJ3WVhKaGJXVjBaWEp6SUc5eUlHRnVlWFJvYVc1bklHVnNjMlVnWkdGMFlTMWtaWEJsYm1SbGJuUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUZ0bGVIQnNZVzVoZEdsdmJqMXVkV3hzWFNBdElHeHZibWRsY2lCbGVIQnNZVzVoZEdsdmJpd2diV0Y1SUdsdVkyeDFaR1VnY0dGeVlXMWxkR1Z5Y3lCaGJtUWdiM1JvWlhJZ2RYTmxablZzSUdSbFluVm5aMmx1WnlCcGJtWnZjbTFoZEdsdmJseHVJQ0FnS2lCQWNtVjBkWEp1SUh0RVlYUmxWR2x0WlgxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCcGJuWmhiR2xrS0hKbFlYTnZiaXdnWlhod2JHRnVZWFJwYjI0Z1BTQnVkV3hzS1NCN1hHNGdJQ0FnYVdZZ0tDRnlaV0Z6YjI0cElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkpiblpoYkdsa1FYSm5kVzFsYm5SRmNuSnZjaWhjSW01bFpXUWdkRzhnYzNCbFkybG1lU0JoSUhKbFlYTnZiaUIwYUdVZ1JHRjBaVlJwYldVZ2FYTWdhVzUyWVd4cFpGd2lLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCcGJuWmhiR2xrSUQwZ2NtVmhjMjl1SUdsdWMzUmhibU5sYjJZZ1NXNTJZV3hwWkNBL0lISmxZWE52YmlBNklHNWxkeUJKYm5aaGJHbGtLSEpsWVhOdmJpd2daWGh3YkdGdVlYUnBiMjRwTzF4dVhHNGdJQ0FnYVdZZ0tGTmxkSFJwYm1kekxuUm9jbTkzVDI1SmJuWmhiR2xrS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1NXNTJZV3hwWkVSaGRHVlVhVzFsUlhKeWIzSW9hVzUyWVd4cFpDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1JHRjBaVlJwYldVb2V5QnBiblpoYkdsa0lIMHBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYUdWamF5QnBaaUJoYmlCdlltcGxZM1FnYVhNZ1lXNGdhVzV6ZEdGdVkyVWdiMllnUkdGMFpWUnBiV1V1SUZkdmNtdHpJR0ZqY205emN5QmpiMjUwWlhoMElHSnZkVzVrWVhKcFpYTmNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUc5Y2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJwYzBSaGRHVlVhVzFsS0c4cElIdGNiaUFnSUNCeVpYUjFjbTRnS0c4Z0ppWWdieTVwYzB4MWVHOXVSR0YwWlZScGJXVXBJSHg4SUdaaGJITmxPMXh1SUNCOVhHNWNiaUFnTHk4Z1NVNUdUMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElIWmhiSFZsSUc5bUlIVnVhWFF1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjFibWwwSUMwZ1lTQjFibWwwSUhOMVkyZ2dZWE1nSjIxcGJuVjBaU2NnYjNJZ0oyUmhlU2RjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXViRzlqWVd3b01qQXhOeXdnTnl3Z05Da3VaMlYwS0NkdGIyNTBhQ2NwT3lBdkx6MCtJRGRjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXViRzlqWVd3b01qQXhOeXdnTnl3Z05Da3VaMlYwS0Nka1lYa25LVHNnTHk4OVBpQTBYRzRnSUNBcUlFQnlaWFIxY200Z2UyNTFiV0psY24xY2JpQWdJQ292WEc0Z0lHZGxkQ2gxYm1sMEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTmJkVzVwZEYwN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QjNhR1YwYUdWeUlIUm9aU0JFWVhSbFZHbHRaU0JwY3lCMllXeHBaQzRnU1c1MllXeHBaQ0JFWVhSbFZHbHRaWE1nYjJOamRYSWdkMmhsYmpwY2JpQWdJQ29nS2lCVWFHVWdSR0YwWlZScGJXVWdkMkZ6SUdOeVpXRjBaV1FnWm5KdmJTQnBiblpoYkdsa0lHTmhiR1Z1WkdGeUlHbHVabTl5YldGMGFXOXVMQ0J6ZFdOb0lHRnpJSFJvWlNBeE0zUm9JRzF2Ym5Sb0lHOXlJRVpsWW5KMVlYSjVJRE13WEc0Z0lDQXFJQ29nVkdobElFUmhkR1ZVYVcxbElIZGhjeUJqY21WaGRHVmtJR0o1SUdGdUlHOXdaWEpoZEdsdmJpQnZiaUJoYm05MGFHVnlJR2x1ZG1Gc2FXUWdaR0YwWlZ4dUlDQWdLaUJBZEhsd1pTQjdZbTl2YkdWaGJuMWNiaUFnSUNvdlhHNGdJR2RsZENCcGMxWmhiR2xrS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHVkbUZzYVdRZ1BUMDlJRzUxYkd3N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmhiaUJsY25KdmNpQmpiMlJsSUdsbUlIUm9hWE1nUkdGMFpWUnBiV1VnYVhNZ2FXNTJZV3hwWkN3Z2IzSWdiblZzYkNCcFppQjBhR1VnUkdGMFpWUnBiV1VnYVhNZ2RtRnNhV1JjYmlBZ0lDb2dRSFI1Y0dVZ2UzTjBjbWx1WjMxY2JpQWdJQ292WEc0Z0lHZGxkQ0JwYm5aaGJHbGtVbVZoYzI5dUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx1ZG1Gc2FXUWdQeUIwYUdsekxtbHVkbUZzYVdRdWNtVmhjMjl1SURvZ2JuVnNiRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdGdUlHVjRjR3hoYm1GMGFXOXVJRzltSUhkb2VTQjBhR2x6SUVSaGRHVlVhVzFsSUdKbFkyRnRaU0JwYm5aaGJHbGtMQ0J2Y2lCdWRXeHNJR2xtSUhSb1pTQkVZWFJsVkdsdFpTQnBjeUIyWVd4cFpGeHVJQ0FnS2lCQWRIbHdaU0I3YzNSeWFXNW5mVnh1SUNBZ0tpOWNiaUFnWjJWMElHbHVkbUZzYVdSRmVIQnNZVzVoZEdsdmJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVwYm5aaGJHbGtJRDhnZEdocGN5NXBiblpoYkdsa0xtVjRjR3hoYm1GMGFXOXVJRG9nYm5Wc2JEdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJIWlhRZ2RHaGxJR3h2WTJGc1pTQnZaaUJoSUVSaGRHVlVhVzFsTENCemRXTm9JQ2RsYmkxSFFpY3VJRlJvWlNCc2IyTmhiR1VnYVhNZ2RYTmxaQ0IzYUdWdUlHWnZjbTFoZEhScGJtY2dkR2hsSUVSaGRHVlVhVzFsWEc0Z0lDQXFYRzRnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCblpYUWdiRzlqWVd4bEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxteHZZeTVzYjJOaGJHVWdPaUJ1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdiblZ0WW1WeWFXNW5JSE41YzNSbGJTQnZaaUJoSUVSaGRHVlVhVzFsTENCemRXTm9JQ2RpWlc1bkp5NGdWR2hsSUc1MWJXSmxjbWx1WnlCemVYTjBaVzBnYVhNZ2RYTmxaQ0IzYUdWdUlHWnZjbTFoZEhScGJtY2dkR2hsSUVSaGRHVlVhVzFsWEc0Z0lDQXFYRzRnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCblpYUWdiblZ0WW1WeWFXNW5VM2x6ZEdWdEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxteHZZeTV1ZFcxaVpYSnBibWRUZVhOMFpXMGdPaUJ1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdiM1YwY0hWMElHTmhiR1Z1WkdGeUlHOW1JR0VnUkdGMFpWUnBiV1VzSUhOMVkyZ2dKMmx6YkdGdGFXTW5MaUJVYUdVZ2IzVjBjSFYwSUdOaGJHVnVaR0Z5SUdseklIVnpaV1FnZDJobGJpQm1iM0p0WVhSMGFXNW5JSFJvWlNCRVlYUmxWR2x0WlZ4dUlDQWdLbHh1SUNBZ0tpQkFkSGx3WlNCN2MzUnlhVzVuZlZ4dUlDQWdLaTljYmlBZ1oyVjBJRzkxZEhCMWRFTmhiR1Z1WkdGeUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxteHZZeTV2ZFhSd2RYUkRZV3hsYm1SaGNpQTZJRzUxYkd3N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUhSb1pTQjBhVzFsSUhwdmJtVWdZWE56YjJOcFlYUmxaQ0IzYVhSb0lIUm9hWE1nUkdGMFpWUnBiV1V1WEc0Z0lDQXFJRUIwZVhCbElIdGFiMjVsZlZ4dUlDQWdLaTljYmlBZ1oyVjBJSHB2Ym1Vb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM3B2Ym1VN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUhSb1pTQnVZVzFsSUc5bUlIUm9aU0IwYVcxbElIcHZibVV1WEc0Z0lDQXFJRUIwZVhCbElIdHpkSEpwYm1kOVhHNGdJQ0FxTDF4dUlDQm5aWFFnZW05dVpVNWhiV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWFYTldZV3hwWkNBL0lIUm9hWE11ZW05dVpTNXVZVzFsSURvZ2JuVnNiRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdkR2hsSUhsbFlYSmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJHOWpZV3dvTWpBeE55d2dOU3dnTWpVcExubGxZWElnTHk4OVBpQXlNREUzWEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQm5aWFFnZVdWaGNpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVwYzFaaGJHbGtJRDhnZEdocGN5NWpMbmxsWVhJZ09pQk9ZVTQ3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1IyVjBJSFJvWlNCeGRXRnlkR1Z5WEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbXh2WTJGc0tESXdNVGNzSURVc0lESTFLUzV4ZFdGeWRHVnlJQzh2UFQ0Z01seHVJQ0FnS2lCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNBZ0tpOWNiaUFnWjJWMElIRjFZWEowWlhJb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhWE5XWVd4cFpDQS9JRTFoZEdndVkyVnBiQ2gwYUdsekxtTXViVzl1ZEdnZ0x5QXpLU0E2SUU1aFRqdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJIWlhRZ2RHaGxJRzF2Ym5Sb0lDZ3hMVEV5S1M1Y2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29NakF4Tnl3Z05Td2dNalVwTG0xdmJuUm9JQzh2UFQ0Z05WeHVJQ0FnS2lCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNBZ0tpOWNiaUFnWjJWMElHMXZiblJvS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHpWbUZzYVdRZ1B5QjBhR2x6TG1NdWJXOXVkR2dnT2lCT1lVNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJWMElIUm9aU0JrWVhrZ2IyWWdkR2hsSUcxdmJuUm9JQ2d4TFRNd2FYTm9LUzVjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXViRzlqWVd3b01qQXhOeXdnTlN3Z01qVXBMbVJoZVNBdkx6MCtJREkxWEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQm5aWFFnWkdGNUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxtTXVaR0Y1SURvZ1RtRk9PMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVkbGRDQjBhR1VnYUc5MWNpQnZaaUIwYUdVZ1pHRjVJQ2d3TFRJektTNWNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJHOWpZV3dvTWpBeE55d2dOU3dnTWpVc0lEa3BMbWh2ZFhJZ0x5ODlQaUE1WEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQm5aWFFnYUc5MWNpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVwYzFaaGJHbGtJRDhnZEdocGN5NWpMbWh2ZFhJZ09pQk9ZVTQ3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1IyVjBJSFJvWlNCdGFXNTFkR1VnYjJZZ2RHaGxJR2h2ZFhJZ0tEQXROVGtwTGx4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzVzYjJOaGJDZ3lNREUzTENBMUxDQXlOU3dnT1N3Z016QXBMbTFwYm5WMFpTQXZMejArSURNd1hHNGdJQ0FxSUVCMGVYQmxJSHR1ZFcxaVpYSjlYRzRnSUNBcUwxeHVJQ0JuWlhRZ2JXbHVkWFJsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHpWbUZzYVdRZ1B5QjBhR2x6TG1NdWJXbHVkWFJsSURvZ1RtRk9PMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVkbGRDQjBhR1VnYzJWamIyNWtJRzltSUhSb1pTQnRhVzUxZEdVZ0tEQXROVGtwTGx4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzVzYjJOaGJDZ3lNREUzTENBMUxDQXlOU3dnT1N3Z016QXNJRFV5S1M1elpXTnZibVFnTHk4OVBpQTFNbHh1SUNBZ0tpQkFkSGx3WlNCN2JuVnRZbVZ5ZlZ4dUlDQWdLaTljYmlBZ1oyVjBJSE5sWTI5dVpDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVwYzFaaGJHbGtJRDhnZEdocGN5NWpMbk5sWTI5dVpDQTZJRTVoVGp0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElHMXBiR3hwYzJWamIyNWtJRzltSUhSb1pTQnpaV052Ym1RZ0tEQXRPVGs1S1M1Y2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29NakF4Tnl3Z05Td2dNalVzSURrc0lETXdMQ0ExTWl3Z05qVTBLUzV0YVd4c2FYTmxZMjl1WkNBdkx6MCtJRFkxTkZ4dUlDQWdLaUJBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0FnS2k5Y2JpQWdaMlYwSUcxcGJHeHBjMlZqYjI1a0tDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxtTXViV2xzYkdselpXTnZibVFnT2lCT1lVNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJWMElIUm9aU0IzWldWcklIbGxZWEpjYmlBZ0lDb2dRSE5sWlNCb2RIUndjem92TDJWdUxuZHBhMmx3WldScFlTNXZjbWN2ZDJscmFTOUpVMDlmZDJWbGExOWtZWFJsWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbXh2WTJGc0tESXdNVFFzSURFeUxDQXpNU2t1ZDJWbGExbGxZWElnTHk4OVBpQXlNREUxWEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQm5aWFFnZDJWbGExbGxZWElvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWFYTldZV3hwWkNBL0lIQnZjM05wWW14NVEyRmphR1ZrVjJWbGEwUmhkR0VvZEdocGN5a3VkMlZsYTFsbFlYSWdPaUJPWVU0N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUhSb1pTQjNaV1ZySUc1MWJXSmxjaUJ2WmlCMGFHVWdkMlZsYXlCNVpXRnlJQ2d4TFRVeWFYTm9LUzVjYmlBZ0lDb2dRSE5sWlNCb2RIUndjem92TDJWdUxuZHBhMmx3WldScFlTNXZjbWN2ZDJscmFTOUpVMDlmZDJWbGExOWtZWFJsWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbXh2WTJGc0tESXdNVGNzSURVc0lESTFLUzUzWldWclRuVnRZbVZ5SUM4dlBUNGdNakZjYmlBZ0lDb2dRSFI1Y0dVZ2UyNTFiV0psY24xY2JpQWdJQ292WEc0Z0lHZGxkQ0IzWldWclRuVnRZbVZ5S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHpWbUZzYVdRZ1B5QndiM056YVdKc2VVTmhZMmhsWkZkbFpXdEVZWFJoS0hSb2FYTXBMbmRsWld0T2RXMWlaWElnT2lCT1lVNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJWMElIUm9aU0JrWVhrZ2IyWWdkR2hsSUhkbFpXc3VYRzRnSUNBcUlERWdhWE1nVFc5dVpHRjVJR0Z1WkNBM0lHbHpJRk4xYm1SaGVWeHVJQ0FnS2lCQWMyVmxJR2gwZEhCek9pOHZaVzR1ZDJscmFYQmxaR2xoTG05eVp5OTNhV3RwTDBsVFQxOTNaV1ZyWDJSaGRHVmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJHOWpZV3dvTWpBeE5Dd2dNVEVzSURNeEtTNTNaV1ZyWkdGNUlDOHZQVDRnTkZ4dUlDQWdLaUJBZEhsd1pTQjdiblZ0WW1WeWZWeHVJQ0FnS2k5Y2JpQWdaMlYwSUhkbFpXdGtZWGtvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWFYTldZV3hwWkNBL0lIQnZjM05wWW14NVEyRmphR1ZrVjJWbGEwUmhkR0VvZEdocGN5a3VkMlZsYTJSaGVTQTZJRTVoVGp0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElHOXlaR2x1WVd3Z0tHMWxZVzVwYm1jZ2RHaGxJR1JoZVNCdlppQjBhR1VnZVdWaGNpbGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJHOWpZV3dvTWpBeE55d2dOU3dnTWpVcExtOXlaR2x1WVd3Z0x5ODlQaUF4TkRWY2JpQWdJQ29nUUhSNWNHVWdlMjUxYldKbGNueEVZWFJsVkdsdFpYMWNiaUFnSUNvdlhHNGdJR2RsZENCdmNtUnBibUZzS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHpWbUZzYVdRZ1B5Qm5jbVZuYjNKcFlXNVViMDl5WkdsdVlXd29kR2hwY3k1aktTNXZjbVJwYm1Gc0lEb2dUbUZPTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxkQ0IwYUdVZ2FIVnRZVzRnY21WaFpHRmliR1VnYzJodmNuUWdiVzl1ZEdnZ2JtRnRaU3dnYzNWamFDQmhjeUFuVDJOMEp5NWNiaUFnSUNvZ1JHVm1ZWFZzZEhNZ2RHOGdkR2hsSUhONWMzUmxiU2R6SUd4dlkyRnNaU0JwWmlCdWJ5QnNiMk5oYkdVZ2FHRnpJR0psWlc0Z2MzQmxZMmxtYVdWa1hHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRjc0lERXdMQ0F6TUNrdWJXOXVkR2hUYUc5eWRDQXZMejArSUU5amRGeHVJQ0FnS2lCQWRIbHdaU0I3YzNSeWFXNW5mVnh1SUNBZ0tpOWNiaUFnWjJWMElHMXZiblJvVTJodmNuUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVhOV1lXeHBaQ0EvSUVsdVptOHViVzl1ZEdoektGd2ljMmh2Y25SY0lpd2dleUJzYjJOUFltbzZJSFJvYVhNdWJHOWpJSDBwVzNSb2FYTXViVzl1ZEdnZ0xTQXhYU0E2SUc1MWJHdzdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJWMElIUm9aU0JvZFcxaGJpQnlaV0ZrWVdKc1pTQnNiMjVuSUcxdmJuUm9JRzVoYldVc0lITjFZMmdnWVhNZ0owOWpkRzlpWlhJbkxseHVJQ0FnS2lCRVpXWmhkV3gwY3lCMGJ5QjBhR1VnYzNsemRHVnRKM01nYkc5allXeGxJR2xtSUc1dklHeHZZMkZzWlNCb1lYTWdZbVZsYmlCemNHVmphV1pwWldSY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29NakF4Tnl3Z01UQXNJRE13S1M1dGIyNTBhRXh2Ym1jZ0x5ODlQaUJQWTNSdlltVnlYRzRnSUNBcUlFQjBlWEJsSUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCblpYUWdiVzl1ZEdoTWIyNW5LQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1selZtRnNhV1FnUHlCSmJtWnZMbTF2Ym5Sb2N5aGNJbXh2Ym1kY0lpd2dleUJzYjJOUFltbzZJSFJvYVhNdWJHOWpJSDBwVzNSb2FYTXViVzl1ZEdnZ0xTQXhYU0E2SUc1MWJHdzdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUjJWMElIUm9aU0JvZFcxaGJpQnlaV0ZrWVdKc1pTQnphRzl5ZENCM1pXVnJaR0Y1TENCemRXTm9JR0Z6SUNkTmIyNG5MbHh1SUNBZ0tpQkVaV1poZFd4MGN5QjBieUIwYUdVZ2MzbHpkR1Z0SjNNZ2JHOWpZV3hsSUdsbUlHNXZJR3h2WTJGc1pTQm9ZWE1nWW1WbGJpQnpjR1ZqYVdacFpXUmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJHOWpZV3dvTWpBeE55d2dNVEFzSURNd0tTNTNaV1ZyWkdGNVUyaHZjblFnTHk4OVBpQk5iMjVjYmlBZ0lDb2dRSFI1Y0dVZ2UzTjBjbWx1WjMxY2JpQWdJQ292WEc0Z0lHZGxkQ0IzWldWclpHRjVVMmh2Y25Rb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhWE5XWVd4cFpDQS9JRWx1Wm04dWQyVmxhMlJoZVhNb1hDSnphRzl5ZEZ3aUxDQjdJR3h2WTA5aWFqb2dkR2hwY3k1c2IyTWdmU2xiZEdocGN5NTNaV1ZyWkdGNUlDMGdNVjBnT2lCdWRXeHNPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVkbGRDQjBhR1VnYUhWdFlXNGdjbVZoWkdGaWJHVWdiRzl1WnlCM1pXVnJaR0Y1TENCemRXTm9JR0Z6SUNkTmIyNWtZWGtuTGx4dUlDQWdLaUJFWldaaGRXeDBjeUIwYnlCMGFHVWdjM2x6ZEdWdEozTWdiRzlqWVd4bElHbG1JRzV2SUd4dlkyRnNaU0JvWVhNZ1ltVmxiaUJ6Y0dWamFXWnBaV1JjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXViRzlqWVd3b01qQXhOeXdnTVRBc0lETXdLUzUzWldWclpHRjVURzl1WnlBdkx6MCtJRTF2Ym1SaGVWeHVJQ0FnS2lCQWRIbHdaU0I3YzNSeWFXNW5mVnh1SUNBZ0tpOWNiaUFnWjJWMElIZGxaV3RrWVhsTWIyNW5LQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1selZtRnNhV1FnUHlCSmJtWnZMbmRsWld0a1lYbHpLRndpYkc5dVoxd2lMQ0I3SUd4dlkwOWlham9nZEdocGN5NXNiMk1nZlNsYmRHaHBjeTUzWldWclpHRjVJQzBnTVYwZ09pQnVkV3hzTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxkQ0IwYUdVZ1ZWUkRJRzltWm5ObGRDQnZaaUIwYUdseklFUmhkR1ZVYVcxbElHbHVJRzFwYm5WMFpYTmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJtOTNLQ2t1YjJabWMyVjBJQzh2UFQ0Z0xUSTBNRnh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNTFkR01vS1M1dlptWnpaWFFnTHk4OVBpQXdYRzRnSUNBcUlFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCblpYUWdiMlptYzJWMEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUFyZEdocGN5NXZJRG9nVG1GT08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdjMmh2Y25RZ2FIVnRZVzRnYm1GdFpTQm1iM0lnZEdobElIcHZibVVuY3lCamRYSnlaVzUwSUc5bVpuTmxkQ3dnWm05eUlHVjRZVzF3YkdVZ1hDSkZVMVJjSWlCdmNpQmNJa1ZFVkZ3aUxseHVJQ0FnS2lCRVpXWmhkV3gwY3lCMGJ5QjBhR1VnYzNsemRHVnRKM01nYkc5allXeGxJR2xtSUc1dklHeHZZMkZzWlNCb1lYTWdZbVZsYmlCemNHVmphV1pwWldSY2JpQWdJQ29nUUhSNWNHVWdlM04wY21sdVozMWNiaUFnSUNvdlhHNGdJR2RsZENCdlptWnpaWFJPWVcxbFUyaHZjblFvS1NCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11YVhOV1lXeHBaQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWVtOXVaUzV2Wm1aelpYUk9ZVzFsS0hSb2FYTXVkSE1zSUh0Y2JpQWdJQ0FnSUNBZ1ptOXliV0YwT2lCY0luTm9iM0owWENJc1hHNGdJQ0FnSUNBZ0lHeHZZMkZzWlRvZ2RHaHBjeTVzYjJOaGJHVXNYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdiRzl1WnlCb2RXMWhiaUJ1WVcxbElHWnZjaUIwYUdVZ2VtOXVaU2R6SUdOMWNuSmxiblFnYjJabWMyVjBMQ0JtYjNJZ1pYaGhiWEJzWlNCY0lrVmhjM1JsY200Z1UzUmhibVJoY21RZ1ZHbHRaVndpSUc5eUlGd2lSV0Z6ZEdWeWJpQkVZWGxzYVdkb2RDQlVhVzFsWENJdVhHNGdJQ0FxSUVSbFptRjFiSFJ6SUhSdklIUm9aU0J6ZVhOMFpXMG5jeUJzYjJOaGJHVWdhV1lnYm04Z2JHOWpZV3hsSUdoaGN5QmlaV1Z1SUhOd1pXTnBabWxsWkZ4dUlDQWdLaUJBZEhsd1pTQjdjM1J5YVc1bmZWeHVJQ0FnS2k5Y2JpQWdaMlYwSUc5bVpuTmxkRTVoYldWTWIyNW5LQ2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbWx6Vm1Gc2FXUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5wdmJtVXViMlptYzJWMFRtRnRaU2gwYUdsekxuUnpMQ0I3WEc0Z0lDQWdJQ0FnSUdadmNtMWhkRG9nWENKc2IyNW5YQ0lzWEc0Z0lDQWdJQ0FnSUd4dlkyRnNaVG9nZEdocGN5NXNiMk5oYkdVc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxkQ0IzYUdWMGFHVnlJSFJvYVhNZ2VtOXVaU2R6SUc5bVpuTmxkQ0JsZG1WeUlHTm9ZVzVuWlhNc0lHRnpJR2x1SUdFZ1JGTlVMbHh1SUNBZ0tpQkFkSGx3WlNCN1ltOXZiR1ZoYm4xY2JpQWdJQ292WEc0Z0lHZGxkQ0JwYzA5bVpuTmxkRVpwZUdWa0tDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUWdQeUIwYUdsekxucHZibVV1YVhOVmJtbDJaWEp6WVd3Z09pQnVkV3hzTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxkQ0IzYUdWMGFHVnlJSFJvWlNCRVlYUmxWR2x0WlNCcGN5QnBiaUJoSUVSVFZDNWNiaUFnSUNvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5WEc0Z0lDQXFMMXh1SUNCblpYUWdhWE5KYmtSVFZDZ3BJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXBjMDltWm5ObGRFWnBlR1ZrS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUFvWEc0Z0lDQWdJQ0FnSUhSb2FYTXViMlptYzJWMElENGdkR2hwY3k1elpYUW9leUJ0YjI1MGFEb2dNU3dnWkdGNU9pQXhJSDBwTG05bVpuTmxkQ0I4ZkZ4dUlDQWdJQ0FnSUNCMGFHbHpMbTltWm5ObGRDQStJSFJvYVhNdWMyVjBLSHNnYlc5dWRHZzZJRFVnZlNrdWIyWm1jMlYwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUhSeWRXVWdhV1lnZEdocGN5QkVZWFJsVkdsdFpTQnBjeUJwYmlCaElHeGxZWEFnZVdWaGNpd2dabUZzYzJVZ2IzUm9aWEozYVhObFhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRZcExtbHpTVzVNWldGd1dXVmhjaUF2THowK0lIUnlkV1ZjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXViRzlqWVd3b01qQXhNeWt1YVhOSmJreGxZWEJaWldGeUlDOHZQVDRnWm1Gc2MyVmNiaUFnSUNvZ1FIUjVjR1VnZTJKdmIyeGxZVzU5WEc0Z0lDQXFMMXh1SUNCblpYUWdhWE5KYmt4bFlYQlpaV0Z5S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJwYzB4bFlYQlpaV0Z5S0hSb2FYTXVlV1ZoY2lrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QjBhR1VnYm5WdFltVnlJRzltSUdSaGVYTWdhVzRnZEdocGN5QkVZWFJsVkdsdFpTZHpJRzF2Ym5Sb1hHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRZc0lESXBMbVJoZVhOSmJrMXZiblJvSUM4dlBUNGdNamxjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXViRzlqWVd3b01qQXhOaXdnTXlrdVpHRjVjMGx1VFc5dWRHZ2dMeTg5UGlBek1WeHVJQ0FnS2lCQWRIbHdaU0I3Ym5WdFltVnlmVnh1SUNBZ0tpOWNiaUFnWjJWMElHUmhlWE5KYmsxdmJuUm9LQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQmtZWGx6U1c1TmIyNTBhQ2gwYUdsekxubGxZWElzSUhSb2FYTXViVzl1ZEdncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdkR2hsSUc1MWJXSmxjaUJ2WmlCa1lYbHpJR2x1SUhSb2FYTWdSR0YwWlZScGJXVW5jeUI1WldGeVhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRZcExtUmhlWE5KYmxsbFlYSWdMeTg5UGlBek5qWmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJHOWpZV3dvTWpBeE15a3VaR0Y1YzBsdVdXVmhjaUF2THowK0lETTJOVnh1SUNBZ0tpQkFkSGx3WlNCN2JuVnRZbVZ5ZlZ4dUlDQWdLaTljYmlBZ1oyVjBJR1JoZVhOSmJsbGxZWElvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWFYTldZV3hwWkNBL0lHUmhlWE5KYmxsbFlYSW9kR2hwY3k1NVpXRnlLU0E2SUU1aFRqdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJSFJvWlNCdWRXMWlaWElnYjJZZ2QyVmxhM01nYVc0Z2RHaHBjeUJFWVhSbFZHbHRaU2R6SUhsbFlYSmNiaUFnSUNvZ1FITmxaU0JvZEhSd2N6b3ZMMlZ1TG5kcGEybHdaV1JwWVM1dmNtY3ZkMmxyYVM5SlUwOWZkMlZsYTE5a1lYUmxYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUmhkR1ZVYVcxbExteHZZMkZzS0RJd01EUXBMbmRsWld0elNXNVhaV1ZyV1dWaGNpQXZMejArSURVelhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRNcExuZGxaV3R6U1c1WFpXVnJXV1ZoY2lBdkx6MCtJRFV5WEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQm5aWFFnZDJWbGEzTkpibGRsWld0WlpXRnlLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1selZtRnNhV1FnUHlCM1pXVnJjMGx1VjJWbGExbGxZWElvZEdocGN5NTNaV1ZyV1dWaGNpa2dPaUJPWVU0N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QjBhR1VnY21WemIyeDJaV1FnU1c1MGJDQnZjSFJwYjI1eklHWnZjaUIwYUdseklFUmhkR1ZVYVcxbExseHVJQ0FnS2lCVWFHbHpJR2x6SUhWelpXWjFiQ0JwYmlCMWJtUmxjbk4wWVc1a2FXNW5JSFJvWlNCaVpXaGhkbWx2Y2lCdlppQm1iM0p0WVhSMGFXNW5JRzFsZEdodlpITmNiaUFnSUNvZ1FIQmhjbUZ0SUh0UFltcGxZM1I5SUc5d2RITWdMU0IwYUdVZ2MyRnRaU0J2Y0hScGIyNXpJR0Z6SUhSdlRHOWpZV3hsVTNSeWFXNW5YRzRnSUNBcUlFQnlaWFIxY200Z2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lISmxjMjlzZG1Wa1RHOWpZV3hsVDNCMGFXOXVjeWh2Y0hSeklEMGdlMzBwSUh0Y2JpQWdJQ0JqYjI1emRDQjdJR3h2WTJGc1pTd2diblZ0WW1WeWFXNW5VM2x6ZEdWdExDQmpZV3hsYm1SaGNpQjlJRDBnUm05eWJXRjBkR1Z5TG1OeVpXRjBaU2hjYmlBZ0lDQWdJSFJvYVhNdWJHOWpMbU5zYjI1bEtHOXdkSE1wTEZ4dUlDQWdJQ0FnYjNCMGMxeHVJQ0FnSUNrdWNtVnpiMngyWldSUGNIUnBiMjV6S0hSb2FYTXBPMXh1SUNBZ0lISmxkSFZ5YmlCN0lHeHZZMkZzWlN3Z2JuVnRZbVZ5YVc1blUzbHpkR1Z0TENCdmRYUndkWFJEWVd4bGJtUmhjam9nWTJGc1pXNWtZWElnZlR0Y2JpQWdmVnh1WEc0Z0lDOHZJRlJTUVU1VFJrOVNUVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQmNJbE5sZEZ3aUlIUm9aU0JFWVhSbFZHbHRaU2R6SUhwdmJtVWdkRzhnVlZSRExpQlNaWFIxY201eklHRWdibVYzYkhrdFkyOXVjM1J5ZFdOMFpXUWdSR0YwWlZScGJXVXVYRzRnSUNBcVhHNGdJQ0FxSUVWeGRXbDJZV3hsYm5RZ2RHOGdlMEJzYVc1cklFUmhkR1ZVYVcxbEkzTmxkRnB2Ym1WOUtDZDFkR01uS1Z4dUlDQWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdXMjltWm5ObGREMHdYU0F0SUc5d2RHbHZibUZzYkhrc0lHRnVJRzltWm5ObGRDQm1jbTl0SUZWVVF5QnBiaUJ0YVc1MWRHVnpYRzRnSUNBcUlFQndZWEpoYlNCN1QySnFaV04wZlNCYmIzQjBjejE3ZlYwZ0xTQnZjSFJwYjI1eklIUnZJSEJoYzNNZ2RHOGdZSE5sZEZwdmJtVW9LV0JjYmlBZ0lDb2dRSEpsZEhWeWJpQjdSR0YwWlZScGJXVjlYRzRnSUNBcUwxeHVJQ0IwYjFWVVF5aHZabVp6WlhRZ1BTQXdMQ0J2Y0hSeklEMGdlMzBwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUmFiMjVsS0VacGVHVmtUMlptYzJWMFdtOXVaUzVwYm5OMFlXNWpaU2h2Wm1aelpYUXBMQ0J2Y0hSektUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJjSWxObGRGd2lJSFJvWlNCRVlYUmxWR2x0WlNkeklIcHZibVVnZEc4Z2RHaGxJR2h2YzNRbmN5QnNiMk5oYkNCNmIyNWxMaUJTWlhSMWNtNXpJR0VnYm1WM2JIa3RZMjl1YzNSeWRXTjBaV1FnUkdGMFpWUnBiV1V1WEc0Z0lDQXFYRzRnSUNBcUlFVnhkV2wyWVd4bGJuUWdkRzhnWUhObGRGcHZibVVvSjJ4dlkyRnNKeWxnWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMFJoZEdWVWFXMWxmVnh1SUNBZ0tpOWNiaUFnZEc5TWIyTmhiQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUmFiMjVsS0ZObGRIUnBibWR6TG1SbFptRjFiSFJhYjI1bEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJjSWxObGRGd2lJSFJvWlNCRVlYUmxWR2x0WlNkeklIcHZibVVnZEc4Z2MzQmxZMmxtYVdWa0lIcHZibVV1SUZKbGRIVnlibk1nWVNCdVpYZHNlUzFqYjI1emRISjFZM1JsWkNCRVlYUmxWR2x0WlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRbmtnWkdWbVlYVnNkQ3dnZEdobElITmxkSFJsY2lCclpXVndjeUIwYUdVZ2RXNWtaWEpzZVdsdVp5QjBhVzFsSUhSb1pTQnpZVzFsSUNoaGN5QnBiaXdnZEdobElITmhiV1VnZEdsdFpYTjBZVzF3S1N3Z1luVjBJSFJvWlNCdVpYY2dhVzV6ZEdGdVkyVWdkMmxzYkNCeVpYQnZjblFnWkdsbVptVnlaVzUwSUd4dlkyRnNJSFJwYldWeklHRnVaQ0JqYjI1emFXUmxjaUJFVTFSeklIZG9aVzRnYldGcmFXNW5JR052YlhCMWRHRjBhVzl1Y3l3Z1lYTWdkMmwwYUNCN1FHeHBibXNnUkdGMFpWUnBiV1VqY0d4MWMzMHVJRmx2ZFNCdFlYa2dkMmx6YUNCMGJ5QjFjMlVnZTBCc2FXNXJJRVJoZEdWVWFXMWxJM1J2VEc5allXeDlJR0Z1WkNCN1FHeHBibXNnUkdGMFpWUnBiV1VqZEc5VlZFTjlJSGRvYVdOb0lIQnliM1pwWkdVZ2MybHRjR3hsSUdOdmJuWmxibWxsYm1ObElIZHlZWEJ3WlhKeklHWnZjaUJqYjIxdGIyNXNlU0IxYzJWa0lIcHZibVZ6TGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozeGFiMjVsZlNCYmVtOXVaVDBuYkc5allXd25YU0F0SUdFZ2VtOXVaU0JwWkdWdWRHbG1hV1Z5TGlCQmN5QmhJSE4wY21sdVp5d2dkR2hoZENCallXNGdZbVVnWVc1NUlFbEJUa0VnZW05dVpTQnpkWEJ3YjNKMFpXUWdZbmtnZEdobElHaHZjM1FnWlc1MmFYSnZibTFsYm5Rc0lHOXlJR0VnWm1sNFpXUXRiMlptYzJWMElHNWhiV1VnYjJZZ2RHaGxJR1p2Y20wZ0oxVlVReXN6Snl3Z2IzSWdkR2hsSUhOMGNtbHVaM01nSjJ4dlkyRnNKeUJ2Y2lBbmRYUmpKeTRnV1c5MUlHMWhlU0JoYkhOdklITjFjSEJzZVNCaGJpQnBibk4wWVc1alpTQnZaaUJoSUh0QWJHbHVheUJFWVhSbFZHbHRaU05hYjI1bGZTQmpiR0Z6Y3k1Y2JpQWdJQ29nUUhCaGNtRnRJSHRQWW1wbFkzUjlJRzl3ZEhNZ0xTQnZjSFJwYjI1elhHNGdJQ0FxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnVzI5d2RITXVhMlZsY0V4dlkyRnNWR2x0WlQxbVlXeHpaVjBnTFNCSlppQjBjblZsTENCaFpHcDFjM1FnZEdobElIVnVaR1Z5YkhscGJtY2dkR2x0WlNCemJ5QjBhR0YwSUhSb1pTQnNiMk5oYkNCMGFXMWxJSE4wWVhseklIUm9aU0J6WVcxbExDQmlkWFFnYVc0Z2RHaGxJSFJoY21kbGRDQjZiMjVsTGlCWmIzVWdjMmh2ZFd4a0lISmhjbVZzZVNCdVpXVmtJSFJvYVhNdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBSaGRHVlVhVzFsZlZ4dUlDQWdLaTljYmlBZ2MyVjBXbTl1WlNoNmIyNWxMQ0I3SUd0bFpYQk1iMk5oYkZScGJXVWdQU0JtWVd4elpTd2dhMlZsY0VOaGJHVnVaR0Z5VkdsdFpTQTlJR1poYkhObElIMGdQU0I3ZlNrZ2UxeHVJQ0FnSUhwdmJtVWdQU0J1YjNKdFlXeHBlbVZhYjI1bEtIcHZibVVzSUZObGRIUnBibWR6TG1SbFptRjFiSFJhYjI1bEtUdGNiaUFnSUNCcFppQW9lbTl1WlM1bGNYVmhiSE1vZEdocGN5NTZiMjVsS1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2hlbTl1WlM1cGMxWmhiR2xrS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUkdGMFpWUnBiV1V1YVc1MllXeHBaQ2gxYm5OMWNIQnZjblJsWkZwdmJtVW9lbTl1WlNrcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JzWlhRZ2JtVjNWRk1nUFNCMGFHbHpMblJ6TzF4dUlDQWdJQ0FnYVdZZ0tHdGxaWEJNYjJOaGJGUnBiV1VnZkh3Z2EyVmxjRU5oYkdWdVpHRnlWR2x0WlNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdlptWnpaWFJIZFdWemN5QTlJSHB2Ym1VdWIyWm1jMlYwS0hSb2FYTXVkSE1wTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JoYzA5aWFpQTlJSFJvYVhNdWRHOVBZbXBsWTNRb0tUdGNiaUFnSUNBZ0lDQWdXMjVsZDFSVFhTQTlJRzlpYWxSdlZGTW9ZWE5QWW1vc0lHOW1abk5sZEVkMVpYTnpMQ0I2YjI1bEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCamJHOXVaU2gwYUdsekxDQjdJSFJ6T2lCdVpYZFVVeXdnZW05dVpTQjlLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nWENKVFpYUmNJaUIwYUdVZ2JHOWpZV3hsTENCdWRXMWlaWEpwYm1kVGVYTjBaVzBzSUc5eUlHOTFkSEIxZEVOaGJHVnVaR0Z5TGlCU1pYUjFjbTV6SUdFZ2JtVjNiSGt0WTI5dWMzUnlkV04wWldRZ1JHRjBaVlJwYldVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J3Y205d1pYSjBhV1Z6SUMwZ2RHaGxJSEJ5YjNCbGNuUnBaWE1nZEc4Z2MyVjBYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUmhkR1ZVYVcxbExteHZZMkZzS0RJd01UY3NJRFVzSURJMUtTNXlaV052Ym1acFozVnlaU2g3SUd4dlkyRnNaVG9nSjJWdUxVZENKeUI5S1Z4dUlDQWdLaUJBY21WMGRYSnVJSHRFWVhSbFZHbHRaWDFjYmlBZ0lDb3ZYRzRnSUhKbFkyOXVabWxuZFhKbEtIc2diRzlqWVd4bExDQnVkVzFpWlhKcGJtZFRlWE4wWlcwc0lHOTFkSEIxZEVOaGJHVnVaR0Z5SUgwZ1BTQjdmU2tnZTF4dUlDQWdJR052Ym5OMElHeHZZeUE5SUhSb2FYTXViRzlqTG1Oc2IyNWxLSHNnYkc5allXeGxMQ0J1ZFcxaVpYSnBibWRUZVhOMFpXMHNJRzkxZEhCMWRFTmhiR1Z1WkdGeUlIMHBPMXh1SUNBZ0lISmxkSFZ5YmlCamJHOXVaU2gwYUdsekxDQjdJR3h2WXlCOUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJjSWxObGRGd2lJSFJvWlNCc2IyTmhiR1V1SUZKbGRIVnlibk1nWVNCdVpYZHNlUzFqYjI1emRISjFZM1JsWkNCRVlYUmxWR2x0WlM1Y2JpQWdJQ29nU25WemRDQmhJR052Ym5abGJtbGxiblFnWVd4cFlYTWdabTl5SUhKbFkyOXVabWxuZFhKbEtIc2diRzlqWVd4bElIMHBYRzRnSUNBcUlFQmxlR0Z0Y0d4bElFUmhkR1ZVYVcxbExteHZZMkZzS0RJd01UY3NJRFVzSURJMUtTNXpaWFJNYjJOaGJHVW9KMlZ1TFVkQ0p5bGNiaUFnSUNvZ1FISmxkSFZ5YmlCN1JHRjBaVlJwYldWOVhHNGdJQ0FxTDF4dUlDQnpaWFJNYjJOaGJHVW9iRzlqWVd4bEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjbVZqYjI1bWFXZDFjbVVvZXlCc2IyTmhiR1VnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dYQ0pUWlhSY0lpQjBhR1VnZG1Gc2RXVnpJRzltSUhOd1pXTnBabWxsWkNCMWJtbDBjeTRnVW1WMGRYSnVjeUJoSUc1bGQyeDVMV052Ym5OMGNuVmpkR1ZrSUVSaGRHVlVhVzFsTGx4dUlDQWdLaUJaYjNVZ1kyRnVJRzl1YkhrZ2MyVjBJSFZ1YVhSeklIZHBkR2dnZEdocGN5QnRaWFJvYjJRN0lHWnZjaUJjSW5ObGRIUnBibWRjSWlCdFpYUmhaR0YwWVN3Z2MyVmxJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTnlaV052Ym1acFozVnlaWDBnWVc1a0lIdEFiR2x1YXlCRVlYUmxWR2x0WlNOelpYUmFiMjVsZlM1Y2JpQWdJQ29nUUhCaGNtRnRJSHRQWW1wbFkzUjlJSFpoYkhWbGN5QXRJR0VnYldGd2NHbHVaeUJ2WmlCMWJtbDBjeUIwYnlCdWRXMWlaWEp6WEc0Z0lDQXFJRUJsZUdGdGNHeGxJR1IwTG5ObGRDaDdJSGxsWVhJNklESXdNVGNnZlNsY2JpQWdJQ29nUUdWNFlXMXdiR1VnWkhRdWMyVjBLSHNnYUc5MWNqb2dPQ3dnYldsdWRYUmxPaUF6TUNCOUtWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCa2RDNXpaWFFvZXlCM1pXVnJaR0Y1T2lBMUlIMHBYRzRnSUNBcUlFQmxlR0Z0Y0d4bElHUjBMbk5sZENoN0lIbGxZWEk2SURJd01EVXNJRzl5WkdsdVlXdzZJREl6TkNCOUtWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0RVlYUmxWR2x0WlgxY2JpQWdJQ292WEc0Z0lITmxkQ2gyWVd4MVpYTXBJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVhWE5XWVd4cFpDa2djbVYwZFhKdUlIUm9hWE03WEc1Y2JpQWdJQ0JqYjI1emRDQnViM0p0WVd4cGVtVmtJRDBnYm05eWJXRnNhWHBsVDJKcVpXTjBLSFpoYkhWbGN5d2dibTl5YldGc2FYcGxWVzVwZENrc1hHNGdJQ0FnSUNCelpYUjBhVzVuVjJWbGExTjBkV1ptSUQxY2JpQWdJQ0FnSUNBZ0lXbHpWVzVrWldacGJtVmtLRzV2Y20xaGJHbDZaV1F1ZDJWbGExbGxZWElwSUh4OFhHNGdJQ0FnSUNBZ0lDRnBjMVZ1WkdWbWFXNWxaQ2h1YjNKdFlXeHBlbVZrTG5kbFpXdE9kVzFpWlhJcElIeDhYRzRnSUNBZ0lDQWdJQ0ZwYzFWdVpHVm1hVzVsWkNodWIzSnRZV3hwZW1Wa0xuZGxaV3RrWVhrcExGeHVJQ0FnSUNBZ1kyOXVkR0ZwYm5OUGNtUnBibUZzSUQwZ0lXbHpWVzVrWldacGJtVmtLRzV2Y20xaGJHbDZaV1F1YjNKa2FXNWhiQ2tzWEc0Z0lDQWdJQ0JqYjI1MFlXbHVjMGR5WldkdmNsbGxZWElnUFNBaGFYTlZibVJsWm1sdVpXUW9ibTl5YldGc2FYcGxaQzU1WldGeUtTeGNiaUFnSUNBZ0lHTnZiblJoYVc1elIzSmxaMjl5VFVRZ1BTQWhhWE5WYm1SbFptbHVaV1FvYm05eWJXRnNhWHBsWkM1dGIyNTBhQ2tnZkh3Z0lXbHpWVzVrWldacGJtVmtLRzV2Y20xaGJHbDZaV1F1WkdGNUtTeGNiaUFnSUNBZ0lHTnZiblJoYVc1elIzSmxaMjl5SUQwZ1kyOXVkR0ZwYm5OSGNtVm5iM0paWldGeUlIeDhJR052Ym5SaGFXNXpSM0psWjI5eVRVUXNYRzRnSUNBZ0lDQmtaV1pwYm1sMFpWZGxaV3RFWldZZ1BTQnViM0p0WVd4cGVtVmtMbmRsWld0WlpXRnlJSHg4SUc1dmNtMWhiR2w2WldRdWQyVmxhMDUxYldKbGNqdGNibHh1SUNBZ0lHbG1JQ2dvWTI5dWRHRnBibk5IY21WbmIzSWdmSHdnWTI5dWRHRnBibk5QY21ScGJtRnNLU0FtSmlCa1pXWnBibWwwWlZkbFpXdEVaV1lwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRGIyNW1iR2xqZEdsdVoxTndaV05wWm1sallYUnBiMjVGY25KdmNpaGNiaUFnSUNBZ0lDQWdYQ0pEWVc0bmRDQnRhWGdnZDJWbGExbGxZWEl2ZDJWbGEwNTFiV0psY2lCMWJtbDBjeUIzYVhSb0lIbGxZWEl2Ylc5dWRHZ3ZaR0Y1SUc5eUlHOXlaR2x1WVd4elhDSmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLR052Ym5SaGFXNXpSM0psWjI5eVRVUWdKaVlnWTI5dWRHRnBibk5QY21ScGJtRnNLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUTI5dVpteHBZM1JwYm1kVGNHVmphV1pwWTJGMGFXOXVSWEp5YjNJb1hDSkRZVzRuZENCdGFYZ2diM0prYVc1aGJDQmtZWFJsY3lCM2FYUm9JRzF2Ym5Sb0wyUmhlVndpS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JzWlhRZ2JXbDRaV1E3WEc0Z0lDQWdhV1lnS0hObGRIUnBibWRYWldWclUzUjFabVlwSUh0Y2JpQWdJQ0FnSUcxcGVHVmtJRDBnZDJWbGExUnZSM0psWjI5eWFXRnVLSHNnTGk0dVozSmxaMjl5YVdGdVZHOVhaV1ZyS0hSb2FYTXVZeWtzSUM0dUxtNXZjbTFoYkdsNlpXUWdmU2s3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2doYVhOVmJtUmxabWx1WldRb2JtOXliV0ZzYVhwbFpDNXZjbVJwYm1Gc0tTa2dlMXh1SUNBZ0lDQWdiV2w0WldRZ1BTQnZjbVJwYm1Gc1ZHOUhjbVZuYjNKcFlXNG9leUF1TGk1bmNtVm5iM0pwWVc1VWIwOXlaR2x1WVd3b2RHaHBjeTVqS1N3Z0xpNHVibTl5YldGc2FYcGxaQ0I5S1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdiV2w0WldRZ1BTQjdJQzR1TG5Sb2FYTXVkRzlQWW1wbFkzUW9LU3dnTGk0dWJtOXliV0ZzYVhwbFpDQjlPMXh1WEc0Z0lDQWdJQ0F2THlCcFppQjNaU0JrYVdSdUozUWdjMlYwSUhSb1pTQmtZWGtnWW5WMElIZGxJR1Z1WkdWa0lIVndJRzl1SUdGdUlHOTJaWEptYkc5M0lHUmhkR1VzWEc0Z0lDQWdJQ0F2THlCMWMyVWdkR2hsSUd4aGMzUWdaR0Y1SUc5bUlIUm9aU0J5YVdkb2RDQnRiMjUwYUZ4dUlDQWdJQ0FnYVdZZ0tHbHpWVzVrWldacGJtVmtLRzV2Y20xaGJHbDZaV1F1WkdGNUtTa2dlMXh1SUNBZ0lDQWdJQ0J0YVhobFpDNWtZWGtnUFNCTllYUm9MbTFwYmloa1lYbHpTVzVOYjI1MGFDaHRhWGhsWkM1NVpXRnlMQ0J0YVhobFpDNXRiMjUwYUNrc0lHMXBlR1ZrTG1SaGVTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnVzNSekxDQnZYU0E5SUc5aWFsUnZWRk1vYldsNFpXUXNJSFJvYVhNdWJ5d2dkR2hwY3k1NmIyNWxLVHRjYmlBZ0lDQnlaWFIxY200Z1kyeHZibVVvZEdocGN5d2dleUIwY3l3Z2J5QjlLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQlpHUWdZU0J3WlhKcGIyUWdiMllnZEdsdFpTQjBieUIwYUdseklFUmhkR1ZVYVcxbElHRnVaQ0J5WlhSMWNtNGdkR2hsSUhKbGMzVnNkR2x1WnlCRVlYUmxWR2x0WlZ4dUlDQWdLbHh1SUNBZ0tpQkJaR1JwYm1jZ2FHOTFjbk1zSUcxcGJuVjBaWE1zSUhObFkyOXVaSE1zSUc5eUlHMXBiR3hwYzJWamIyNWtjeUJwYm1OeVpXRnpaWE1nZEdobElIUnBiV1Z6ZEdGdGNDQmllU0IwYUdVZ2NtbG5hSFFnYm5WdFltVnlJRzltSUcxcGJHeHBjMlZqYjI1a2N5NGdRV1JrYVc1bklHUmhlWE1zSUcxdmJuUm9jeXdnYjNJZ2VXVmhjbk1nYzJocFpuUnpJSFJvWlNCallXeGxibVJoY2l3Z1lXTmpiM1Z1ZEdsdVp5Qm1iM0lnUkZOVWN5QmhibVFnYkdWaGNDQjVaV0Z5Y3lCaGJHOXVaeUIwYUdVZ2QyRjVMaUJVYUhWekxDQmdaSFF1Y0d4MWN5aDdJR2h2ZFhKek9pQXlOQ0I5S1dBZ2JXRjVJSEpsYzNWc2RDQnBiaUJoSUdScFptWmxjbVZ1ZENCMGFXMWxJSFJvWVc0Z1lHUjBMbkJzZFhNb2V5QmtZWGx6T2lBeElIMHBZQ0JwWmlCMGFHVnlaU2R6SUdFZ1JGTlVJSE5vYVdaMElHbHVJR0psZEhkbFpXNHVYRzRnSUNBcUlFQndZWEpoYlNCN1JIVnlZWFJwYjI1OFQySnFaV04wZkc1MWJXSmxjbjBnWkhWeVlYUnBiMjRnTFNCVWFHVWdZVzF2ZFc1MElIUnZJR0ZrWkM0Z1JXbDBhR1Z5SUdFZ1RIVjRiMjRnUkhWeVlYUnBiMjRzSUdFZ2JuVnRZbVZ5SUc5bUlHMXBiR3hwYzJWamIyNWtjeXdnZEdobElHOWlhbVZqZENCaGNtZDFiV1Z1ZENCMGJ5QkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLQ2xjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXVibTkzS0NrdWNHeDFjeWd4TWpNcElDOHZmajRnYVc0Z01USXpJRzFwYkd4cGMyVmpiMjVrYzF4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzV1YjNjb0tTNXdiSFZ6S0hzZ2JXbHVkWFJsY3pvZ01UVWdmU2tnTHk5K1BpQnBiaUF4TlNCdGFXNTFkR1Z6WEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbTV2ZHlncExuQnNkWE1vZXlCa1lYbHpPaUF4SUgwcElDOHZmajRnZEdocGN5QjBhVzFsSUhSdmJXOXljbTkzWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbTV2ZHlncExuQnNkWE1vZXlCa1lYbHpPaUF0TVNCOUtTQXZMMzQrSUhSb2FYTWdkR2x0WlNCNVpYTjBaWEprWVhsY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ym05M0tDa3VjR3gxY3loN0lHaHZkWEp6T2lBekxDQnRhVzUxZEdWek9pQXhNeUI5S1NBdkwzNCtJR2x1SURNZ2FISXNJREV6SUcxcGJseHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1dWIzY29LUzV3YkhWektFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUJvYjNWeWN6b2dNeXdnYldsdWRYUmxjem9nTVRNZ2ZTa3BJQzh2Zmo0Z2FXNGdNeUJvY2l3Z01UTWdiV2x1WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMFJoZEdWVWFXMWxmVnh1SUNBZ0tpOWNiaUFnY0d4MWN5aGtkWEpoZEdsdmJpa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXBjMVpoYkdsa0tTQnlaWFIxY200Z2RHaHBjenRjYmlBZ0lDQmpiMjV6ZENCa2RYSWdQU0JFZFhKaGRHbHZiaTVtY205dFJIVnlZWFJwYjI1TWFXdGxLR1IxY21GMGFXOXVLVHRjYmlBZ0lDQnlaWFIxY200Z1kyeHZibVVvZEdocGN5d2dZV1JxZFhOMFZHbHRaU2gwYUdsekxDQmtkWElwS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRkV0owY21GamRDQmhJSEJsY21sdlpDQnZaaUIwYVcxbElIUnZJSFJvYVhNZ1JHRjBaVlJwYldVZ1lXNWtJSEpsZEhWeWJpQjBhR1VnY21WemRXeDBhVzVuSUVSaGRHVlVhVzFsWEc0Z0lDQXFJRk5sWlNCN1FHeHBibXNnUkdGMFpWUnBiV1VqY0d4MWMzMWNiaUFnSUNvZ1FIQmhjbUZ0SUh0RWRYSmhkR2x2Ym54UFltcGxZM1I4Ym5WdFltVnlmU0JrZFhKaGRHbHZiaUF0SUZSb1pTQmhiVzkxYm5RZ2RHOGdjM1ZpZEhKaFkzUXVJRVZwZEdobGNpQmhJRXgxZUc5dUlFUjFjbUYwYVc5dUxDQmhJRzUxYldKbGNpQnZaaUJ0YVd4c2FYTmxZMjl1WkhNc0lIUm9aU0J2WW1wbFkzUWdZWEpuZFcxbGJuUWdkRzhnUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENncFhHNGdJQ0JBY21WMGRYSnVJSHRFWVhSbFZHbHRaWDFjYmlBZ0lDb3ZYRzRnSUcxcGJuVnpLR1IxY21GMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbWx6Vm1Gc2FXUXBJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQWdJR052Ym5OMElHUjFjaUE5SUVSMWNtRjBhVzl1TG1aeWIyMUVkWEpoZEdsdmJreHBhMlVvWkhWeVlYUnBiMjRwTG01bFoyRjBaU2dwTzF4dUlDQWdJSEpsZEhWeWJpQmpiRzl1WlNoMGFHbHpMQ0JoWkdwMWMzUlVhVzFsS0hSb2FYTXNJR1IxY2lrcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRndpVTJWMFhDSWdkR2hwY3lCRVlYUmxWR2x0WlNCMGJ5QjBhR1VnWW1WbmFXNXVhVzVuSUc5bUlHRWdkVzVwZENCdlppQjBhVzFsTGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkVzVwZENBdElGUm9aU0IxYm1sMElIUnZJR2R2SUhSdklIUm9aU0JpWldkcGJtNXBibWNnYjJZdUlFTmhiaUJpWlNBbmVXVmhjaWNzSUNkeGRXRnlkR1Z5Snl3Z0oyMXZiblJvSnl3Z0ozZGxaV3NuTENBblpHRjVKeXdnSjJodmRYSW5MQ0FuYldsdWRYUmxKeXdnSjNObFkyOXVaQ2NzSUc5eUlDZHRhV3hzYVhObFkyOXVaQ2N1WEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbXh2WTJGc0tESXdNVFFzSURNc0lETXBMbk4wWVhKMFQyWW9KMjF2Ym5Sb0p5a3VkRzlKVTA5RVlYUmxLQ2s3SUM4dlBUNGdKekl3TVRRdE1ETXRNREVuWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbXh2WTJGc0tESXdNVFFzSURNc0lETXBMbk4wWVhKMFQyWW9KM2xsWVhJbktTNTBiMGxUVDBSaGRHVW9LVHNnTHk4OVBpQW5NakF4TkMwd01TMHdNU2RjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXViRzlqWVd3b01qQXhOQ3dnTXl3Z015a3VjM1JoY25SUFppZ25kMlZsYXljcExuUnZTVk5QUkdGMFpTZ3BPeUF2THowK0lDY3lNREUwTFRBekxUQXpKeXdnZDJWbGEzTWdZV3gzWVhseklITjBZWEowSUc5dUlFMXZibVJoZVhOY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29NakF4TkN3Z015d2dNeXdnTlN3Z016QXBMbk4wWVhKMFQyWW9KMlJoZVNjcExuUnZTVk5QVkdsdFpTZ3BPeUF2THowK0lDY3dNRG93TUM0d01EQXRNRFU2TURBblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRRc0lETXNJRE1zSURVc0lETXdLUzV6ZEdGeWRFOW1LQ2RvYjNWeUp5a3VkRzlKVTA5VWFXMWxLQ2s3SUM4dlBUNGdKekExT2pBd09qQXdMakF3TUMwd05Ub3dNQ2RjYmlBZ0lDb2dRSEpsZEhWeWJpQjdSR0YwWlZScGJXVjlYRzRnSUNBcUwxeHVJQ0J6ZEdGeWRFOW1LSFZ1YVhRcElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdWFYTldZV3hwWkNrZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUNBZ1kyOXVjM1FnYnlBOUlIdDlMRnh1SUNBZ0lDQWdibTl5YldGc2FYcGxaRlZ1YVhRZ1BTQkVkWEpoZEdsdmJpNXViM0p0WVd4cGVtVlZibWwwS0hWdWFYUXBPMXh1SUNBZ0lITjNhWFJqYUNBb2JtOXliV0ZzYVhwbFpGVnVhWFFwSUh0Y2JpQWdJQ0FnSUdOaGMyVWdYQ0o1WldGeWMxd2lPbHh1SUNBZ0lDQWdJQ0J2TG0xdmJuUm9JRDBnTVR0Y2JpQWdJQ0FnSUM4dklHWmhiR3h6SUhSb2NtOTFaMmhjYmlBZ0lDQWdJR05oYzJVZ1hDSnhkV0Z5ZEdWeWMxd2lPbHh1SUNBZ0lDQWdZMkZ6WlNCY0ltMXZiblJvYzF3aU9seHVJQ0FnSUNBZ0lDQnZMbVJoZVNBOUlERTdYRzRnSUNBZ0lDQXZMeUJtWVd4c2N5QjBhSEp2ZFdkb1hHNGdJQ0FnSUNCallYTmxJRndpZDJWbGEzTmNJanBjYmlBZ0lDQWdJR05oYzJVZ1hDSmtZWGx6WENJNlhHNGdJQ0FnSUNBZ0lHOHVhRzkxY2lBOUlEQTdYRzRnSUNBZ0lDQXZMeUJtWVd4c2N5QjBhSEp2ZFdkb1hHNGdJQ0FnSUNCallYTmxJRndpYUc5MWNuTmNJanBjYmlBZ0lDQWdJQ0FnYnk1dGFXNTFkR1VnUFNBd08xeHVJQ0FnSUNBZ0x5OGdabUZzYkhNZ2RHaHliM1ZuYUZ4dUlDQWdJQ0FnWTJGelpTQmNJbTFwYm5WMFpYTmNJanBjYmlBZ0lDQWdJQ0FnYnk1elpXTnZibVFnUFNBd08xeHVJQ0FnSUNBZ0x5OGdabUZzYkhNZ2RHaHliM1ZuYUZ4dUlDQWdJQ0FnWTJGelpTQmNJbk5sWTI5dVpITmNJanBjYmlBZ0lDQWdJQ0FnYnk1dGFXeHNhWE5sWTI5dVpDQTlJREE3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNCY0ltMXBiR3hwYzJWamIyNWtjMXdpT2x4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQzh2SUc1dklHUmxabUYxYkhRc0lHbHVkbUZzYVdRZ2RXNXBkSE1nZEdoeWIzY2dhVzRnYm05eWJXRnNhWHBsVlc1cGRDZ3BYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JWYm1sMElEMDlQU0JjSW5kbFpXdHpYQ0lwSUh0Y2JpQWdJQ0FnSUc4dWQyVmxhMlJoZVNBOUlERTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JWYm1sMElEMDlQU0JjSW5GMVlYSjBaWEp6WENJcElIdGNiaUFnSUNBZ0lHTnZibk4wSUhFZ1BTQk5ZWFJvTG1ObGFXd29kR2hwY3k1dGIyNTBhQ0F2SURNcE8xeHVJQ0FnSUNBZ2J5NXRiMjUwYUNBOUlDaHhJQzBnTVNrZ0tpQXpJQ3NnTVR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUW9ieWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1hDSlRaWFJjSWlCMGFHbHpJRVJoZEdWVWFXMWxJSFJ2SUhSb1pTQmxibVFnS0cxbFlXNXBibWNnZEdobElHeGhjM1FnYldsc2JHbHpaV052Ym1RcElHOW1JR0VnZFc1cGRDQnZaaUIwYVcxbFhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IxYm1sMElDMGdWR2hsSUhWdWFYUWdkRzhnWjI4Z2RHOGdkR2hsSUdWdVpDQnZaaTRnUTJGdUlHSmxJQ2Q1WldGeUp5d2dKM0YxWVhKMFpYSW5MQ0FuYlc5dWRHZ25MQ0FuZDJWbGF5Y3NJQ2RrWVhrbkxDQW5hRzkxY2ljc0lDZHRhVzUxZEdVbkxDQW5jMlZqYjI1a0p5d2diM0lnSjIxcGJHeHBjMlZqYjI1a0p5NWNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJHOWpZV3dvTWpBeE5Dd2dNeXdnTXlrdVpXNWtUMllvSjIxdmJuUm9KeWt1ZEc5SlUwOG9LVHNnTHk4OVBpQW5NakF4TkMwd015MHpNVlF5TXpvMU9UbzFPUzQ1T1RrdE1EVTZNREFuWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbXh2WTJGc0tESXdNVFFzSURNc0lETXBMbVZ1WkU5bUtDZDVaV0Z5SnlrdWRHOUpVMDhvS1RzZ0x5ODlQaUFuTWpBeE5DMHhNaTB6TVZReU16bzFPVG8xT1M0NU9Ua3RNRFU2TURBblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRRc0lETXNJRE1wTG1WdVpFOW1LQ2QzWldWckp5a3VkRzlKVTA4b0tUc2dMeThnUFQ0Z0p6SXdNVFF0TURNdE1EbFVNak02TlRrNk5Ua3VPVGs1TFRBMU9qQXdKeXdnZDJWbGEzTWdjM1JoY25RZ2IyNGdUVzl1WkdGNWMxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1c2IyTmhiQ2d5TURFMExDQXpMQ0F6TENBMUxDQXpNQ2t1Wlc1a1QyWW9KMlJoZVNjcExuUnZTVk5QS0NrN0lDOHZQVDRnSnpJd01UUXRNRE10TUROVU1qTTZOVGs2TlRrdU9UazVMVEExT2pBd0oxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1c2IyTmhiQ2d5TURFMExDQXpMQ0F6TENBMUxDQXpNQ2t1Wlc1a1QyWW9KMmh2ZFhJbktTNTBiMGxUVHlncE95QXZMejArSUNjeU1ERTBMVEF6TFRBelZEQTFPalU1T2pVNUxqazVPUzB3TlRvd01DZGNiaUFnSUNvZ1FISmxkSFZ5YmlCN1JHRjBaVlJwYldWOVhHNGdJQ0FxTDF4dUlDQmxibVJQWmloMWJtbDBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVhOV1lXeHBaRnh1SUNBZ0lDQWdQeUIwYUdsekxuQnNkWE1vZXlCYmRXNXBkRjA2SURFZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0F1YzNSaGNuUlBaaWgxYm1sMEtWeHVJQ0FnSUNBZ0lDQWdJQzV0YVc1MWN5Z3hLVnh1SUNBZ0lDQWdPaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeThnVDFWVVVGVlVYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1lTQnpkSEpwYm1jZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJFWVhSbFZHbHRaU0JtYjNKdFlYUjBaV1FnWVdOamIzSmthVzVuSUhSdklIUm9aU0J6Y0dWamFXWnBaV1FnWm05eWJXRjBJSE4wY21sdVp5NWNiaUFnSUNvZ0tpcFpiM1VnYldGNUlHNXZkQ0IzWVc1MElIUm9hWE11S2lvZ1UyVmxJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTjBiMHh2WTJGc1pWTjBjbWx1WjMwZ1ptOXlJR0VnYlc5eVpTQm1iR1Y0YVdKc1pTQm1iM0p0WVhSMGFXNW5JSFJ2YjJ3dUlFWnZjaUJoSUhSaFlteGxJRzltSUhSdmEyVnVjeUJoYm1RZ2RHaGxhWElnYVc1MFpYSndjbVYwWVhScGIyNXpMQ0J6WldVZ1cyaGxjbVZkS0doMGRIQnpPaTh2Ylc5dFpXNTBMbWRwZEdoMVlpNXBieTlzZFhodmJpOGpMMlp2Y20xaGRIUnBibWMvYVdROWRHRmliR1V0YjJZdGRHOXJaVzV6S1M1Y2JpQWdJQ29nUkdWbVlYVnNkSE1nZEc4Z1pXNHRWVk1nYVdZZ2JtOGdiRzlqWVd4bElHaGhjeUJpWldWdUlITndaV05wWm1sbFpDd2djbVZuWVhKa2JHVnpjeUJ2WmlCMGFHVWdjM2x6ZEdWdEozTWdiRzlqWVd4bExseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnWm0xMElDMGdkR2hsSUdadmNtMWhkQ0J6ZEhKcGJtZGNiaUFnSUNvZ1FIQmhjbUZ0SUh0UFltcGxZM1I5SUc5d2RITWdMU0J2Y0hSeklIUnZJRzkyWlhKeWFXUmxJSFJvWlNCamIyNW1hV2QxY21GMGFXOXVJRzl3ZEdsdmJuTWdiMjRnZEdocGN5QkVZWFJsVkdsdFpWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1dWIzY29LUzUwYjBadmNtMWhkQ2duZVhsNWVTQk1URXdnWkdRbktTQXZMejArSUNjeU1ERTNJRUZ3Y2lBeU1pZGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJtOTNLQ2t1YzJWMFRHOWpZV3hsS0NkbWNpY3BMblJ2Um05eWJXRjBLQ2Q1ZVhsNUlFeE1UQ0JrWkNjcElDOHZQVDRnSnpJd01UY2dZWFp5TGlBeU1pZGNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJtOTNLQ2t1ZEc5R2IzSnRZWFFvSjNsNWVYa2dURXhNSUdSa0p5d2dleUJzYjJOaGJHVTZJRndpWm5KY0lpQjlLU0F2THowK0lDY3lNREUzSUdGMmNpNGdNakluWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbTV2ZHlncExuUnZSbTl5YldGMEtGd2lTRWdnSjJodmRYSnpJR0Z1WkNjZ2JXMGdKMjFwYm5WMFpYTW5YQ0lwSUM4dlBUNGdKekl3SUdodmRYSnpJR0Z1WkNBMU5TQnRhVzUxZEdWekoxeHVJQ0FnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCMGIwWnZjbTFoZENobWJYUXNJRzl3ZEhNZ1BTQjdmU2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1selZtRnNhV1JjYmlBZ0lDQWdJRDhnUm05eWJXRjBkR1Z5TG1OeVpXRjBaU2gwYUdsekxteHZZeTV5WldSbFptRjFiSFJVYjBWT0tHOXdkSE1wS1M1bWIzSnRZWFJFWVhSbFZHbHRaVVp5YjIxVGRISnBibWNvZEdocGN5d2dabTEwS1Z4dUlDQWdJQ0FnT2lCSlRsWkJURWxFTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1lTQnNiMk5oYkdsNlpXUWdjM1J5YVc1bklISmxjSEpsYzJWdWRHbHVaeUIwYUdseklHUmhkR1V1SUVGalkyVndkSE1nZEdobElITmhiV1VnYjNCMGFXOXVjeUJoY3lCMGFHVWdTVzUwYkM1RVlYUmxWR2x0WlVadmNtMWhkQ0JqYjI1emRISjFZM1J2Y2lCaGJtUWdZVzU1SUhCeVpYTmxkSE1nWkdWbWFXNWxaQ0JpZVNCTWRYaHZiaXdnYzNWamFDQmhjeUJnUkdGMFpWUnBiV1V1UkVGVVJWOUdWVXhNWUNCdmNpQmdSR0YwWlZScGJXVXVWRWxOUlY5VFNVMVFURVZnTGx4dUlDQWdLaUJVYUdVZ1pYaGhZM1FnWW1Wb1lYWnBiM0lnYjJZZ2RHaHBjeUJ0WlhSb2IyUWdhWE1nWW5KdmQzTmxjaTF6Y0dWamFXWnBZeXdnWW5WMElHbHVJR2RsYm1WeVlXd2dhWFFnZDJsc2JDQnlaWFIxY200Z1lXNGdZWEJ3Y205d2NtbGhkR1VnY21Wd2NtVnpaVzUwWVhScGIyNWNiaUFnSUNvZ2IyWWdkR2hsSUVSaGRHVlVhVzFsSUdsdUlIUm9aU0JoYzNOcFoyNWxaQ0JzYjJOaGJHVXVYRzRnSUNBcUlFUmxabUYxYkhSeklIUnZJSFJvWlNCemVYTjBaVzBuY3lCc2IyTmhiR1VnYVdZZ2JtOGdiRzlqWVd4bElHaGhjeUJpWldWdUlITndaV05wWm1sbFpGeHVJQ0FnS2lCQWMyVmxJR2gwZEhCek9pOHZaR1YyWld4dmNHVnlMbTF2ZW1sc2JHRXViM0puTDJWdUxWVlRMMlJ2WTNNdlYyVmlMMHBoZG1GVFkzSnBjSFF2VW1WbVpYSmxibU5sTDBkc2IySmhiRjlQWW1wbFkzUnpMMFJoZEdWVWFXMWxSbTl5YldGMFhHNGdJQ0FxSUVCd1lYSmhiU0JtYjNKdFlYUlBjSFJ6SUh0UFltcGxZM1I5SUMwZ1NXNTBiQzVFWVhSbFZHbHRaVVp2Y20xaGRDQmpiMjV6ZEhKMVkzUnZjaUJ2Y0hScGIyNXpJR0Z1WkNCamIyNW1hV2QxY21GMGFXOXVJRzl3ZEdsdmJuTmNiaUFnSUNvZ1FIQmhjbUZ0SUh0UFltcGxZM1I5SUc5d2RITWdMU0J2Y0hSeklIUnZJRzkyWlhKeWFXUmxJSFJvWlNCamIyNW1hV2QxY21GMGFXOXVJRzl3ZEdsdmJuTWdiMjRnZEdocGN5QkVZWFJsVkdsdFpWeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1dWIzY29LUzUwYjB4dlkyRnNaVk4wY21sdVp5Z3BPeUF2THowK0lEUXZNakF2TWpBeE4xeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1dWIzY29LUzV6WlhSTWIyTmhiR1VvSjJWdUxXZGlKeWt1ZEc5TWIyTmhiR1ZUZEhKcGJtY29LVHNnTHk4OVBpQW5NakF2TURRdk1qQXhOeWRjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXVibTkzS0NrdWRHOU1iMk5oYkdWVGRISnBibWNvZXlCc2IyTmhiR1U2SUNkbGJpMW5ZaWNnZlNrN0lDOHZQVDRnSnpJd0x6QTBMekl3TVRjblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG01dmR5Z3BMblJ2VEc5allXeGxVM1J5YVc1bktFUmhkR1ZVYVcxbExrUkJWRVZmUmxWTVRDazdJQzh2UFQ0Z0owRndjbWxzSURJd0xDQXlNREUzSjF4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzV1YjNjb0tTNTBiMHh2WTJGc1pWTjBjbWx1WnloRVlYUmxWR2x0WlM1VVNVMUZYMU5KVFZCTVJTazdJQzh2UFQ0Z0p6RXhPak15SUVGTkoxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1dWIzY29LUzUwYjB4dlkyRnNaVk4wY21sdVp5aEVZWFJsVkdsdFpTNUVRVlJGVkVsTlJWOVRTRTlTVkNrN0lDOHZQVDRnSnpRdk1qQXZNakF4Tnl3Z01URTZNeklnUVUwblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG01dmR5Z3BMblJ2VEc5allXeGxVM1J5YVc1bktIc2dkMlZsYTJSaGVUb2dKMnh2Ym1jbkxDQnRiMjUwYURvZ0oyeHZibWNuTENCa1lYazZJQ2N5TFdScFoybDBKeUI5S1RzZ0x5ODlQaUFuVkdoMWNuTmtZWGtzSUVGd2NtbHNJREl3SjF4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzV1YjNjb0tTNTBiMHh2WTJGc1pWTjBjbWx1WnloN0lIZGxaV3RrWVhrNklDZHphRzl5ZENjc0lHMXZiblJvT2lBbmMyaHZjblFuTENCa1lYazZJQ2N5TFdScFoybDBKeXdnYUc5MWNqb2dKekl0WkdsbmFYUW5MQ0J0YVc1MWRHVTZJQ2N5TFdScFoybDBKeUI5S1RzZ0x5ODlQaUFuVkdoMUxDQkJjSElnTWpBc0lERXhPakkzSUVGTkoxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1dWIzY29LUzUwYjB4dlkyRnNaVk4wY21sdVp5aDdJR2h2ZFhJNklDY3lMV1JwWjJsMEp5d2diV2x1ZFhSbE9pQW5NaTFrYVdkcGRDY3NJR2h2ZFhKRGVXTnNaVG9nSjJneU15Y2dmU2s3SUM4dlBUNGdKekV4T2pNeUoxeHVJQ0FnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0lDQXFMMXh1SUNCMGIweHZZMkZzWlZOMGNtbHVaeWhtYjNKdFlYUlBjSFJ6SUQwZ1JtOXliV0YwY3k1RVFWUkZYMU5JVDFKVUxDQnZjSFJ6SUQwZ2UzMHBJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVwYzFaaGJHbGtYRzRnSUNBZ0lDQS9JRVp2Y20xaGRIUmxjaTVqY21WaGRHVW9kR2hwY3k1c2IyTXVZMnh2Ym1Vb2IzQjBjeWtzSUdadmNtMWhkRTl3ZEhNcExtWnZjbTFoZEVSaGRHVlVhVzFsS0hSb2FYTXBYRzRnSUNBZ0lDQTZJRWxPVmtGTVNVUTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVjeUJoYmlCaGNuSmhlU0J2WmlCbWIzSnRZWFFnWENKd1lYSjBjMXdpTENCdFpXRnVhVzVuSUdsdVpHbDJhV1IxWVd3Z2RHOXJaVzV6SUdGc2IyNW5JSGRwZEdnZ2JXVjBZV1JoZEdFdUlGUm9hWE1nYVhNZ1lXeHNiM2R6SUdOaGJHeGxjbk1nZEc4Z2NHOXpkQzF3Y205alpYTnpJR2x1WkdsMmFXUjFZV3dnYzJWamRHbHZibk1nYjJZZ2RHaGxJR1p2Y20xaGRIUmxaQ0J2ZFhSd2RYUXVYRzRnSUNBcUlFUmxabUYxYkhSeklIUnZJSFJvWlNCemVYTjBaVzBuY3lCc2IyTmhiR1VnYVdZZ2JtOGdiRzlqWVd4bElHaGhjeUJpWldWdUlITndaV05wWm1sbFpGeHVJQ0FnS2lCQWMyVmxJR2gwZEhCek9pOHZaR1YyWld4dmNHVnlMbTF2ZW1sc2JHRXViM0puTDJWdUxWVlRMMlJ2WTNNdlYyVmlMMHBoZG1GVFkzSnBjSFF2VW1WbVpYSmxibU5sTDBkc2IySmhiRjlQWW1wbFkzUnpMMFJoZEdWVWFXMWxSbTl5YldGMEwyWnZjbTFoZEZSdlVHRnlkSE5jYmlBZ0lDb2dRSEJoY21GdElHOXdkSE1nZTA5aWFtVmpkSDBnTFNCSmJuUnNMa1JoZEdWVWFXMWxSbTl5YldGMElHTnZibk4wY25WamRHOXlJRzl3ZEdsdmJuTXNJSE5oYldVZ1lYTWdZSFJ2VEc5allXeGxVM1J5YVc1bllDNWNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWJtOTNLQ2t1ZEc5TWIyTmhiR1ZRWVhKMGN5Z3BPeUF2THowK0lGdGNiaUFnSUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dlBUNGdJQ0I3SUhSNWNHVTZJQ2RrWVhrbkxDQjJZV3gxWlRvZ0p6STFKeUI5TEZ4dUlDQWdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTg5UGlBZ0lIc2dkSGx3WlRvZ0oyeHBkR1Z5WVd3bkxDQjJZV3gxWlRvZ0p5OG5JSDBzWEc0Z0lDQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMejArSUNBZ2V5QjBlWEJsT2lBbmJXOXVkR2duTENCMllXeDFaVG9nSnpBMUp5QjlMRnh1SUNBZ0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5ODlQaUFnSUhzZ2RIbHdaVG9nSjJ4cGRHVnlZV3duTENCMllXeDFaVG9nSnk4bklIMHNYRzRnSUNBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx6MCtJQ0FnZXlCMGVYQmxPaUFuZVdWaGNpY3NJSFpoYkhWbE9pQW5NVGs0TWljZ2ZWeHVJQ0FnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4OVBpQmRYRzRnSUNBcUwxeHVJQ0IwYjB4dlkyRnNaVkJoY25SektHOXdkSE1nUFNCN2ZTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx6Vm1Gc2FXUmNiaUFnSUNBZ0lEOGdSbTl5YldGMGRHVnlMbU55WldGMFpTaDBhR2x6TG14dll5NWpiRzl1WlNodmNIUnpLU3dnYjNCMGN5a3VabTl5YldGMFJHRjBaVlJwYldWUVlYSjBjeWgwYUdsektWeHVJQ0FnSUNBZ09pQmJYVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdGdUlFbFRUeUE0TmpBeExXTnZiWEJzYVdGdWRDQnpkSEpwYm1jZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJFWVhSbFZHbHRaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2IzQjBjeUF0SUc5d2RHbHZibk5jYmlBZ0lDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQmJiM0IwY3k1emRYQndjbVZ6YzAxcGJHeHBjMlZqYjI1a2N6MW1ZV3h6WlYwZ0xTQmxlR05zZFdSbElHMXBiR3hwYzJWamIyNWtjeUJtY205dElIUm9aU0JtYjNKdFlYUWdhV1lnZEdobGVTZHlaU0F3WEc0Z0lDQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXMjl3ZEhNdWMzVndjSEpsYzNOVFpXTnZibVJ6UFdaaGJITmxYU0F0SUdWNFkyeDFaR1VnYzJWamIyNWtjeUJtY205dElIUm9aU0JtYjNKdFlYUWdhV1lnZEdobGVTZHlaU0F3WEc0Z0lDQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXMjl3ZEhNdWFXNWpiSFZrWlU5bVpuTmxkRDEwY25WbFhTQXRJR2x1WTJ4MVpHVWdkR2hsSUc5bVpuTmxkQ3dnYzNWamFDQmhjeUFuV2ljZ2IzSWdKeTB3TkRvd01DZGNiaUFnSUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCYmIzQjBjeTVsZUhSbGJtUmxaRnB2Ym1VOWRISjFaVjBnTFNCaFpHUWdkR2hsSUhScGJXVWdlbTl1WlNCbWIzSnRZWFFnWlhoMFpXNXphVzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmJiM0IwY3k1bWIzSnRZWFE5SjJWNGRHVnVaR1ZrSjEwZ0xTQmphRzl2YzJVZ1ltVjBkMlZsYmlCMGFHVWdZbUZ6YVdNZ1lXNWtJR1Y0ZEdWdVpHVmtJR1p2Y20xaGRGeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1MWRHTW9NVGs0TXl3Z05Td2dNalVwTG5SdlNWTlBLQ2tnTHk4OVBpQW5NVGs0TWkwd05TMHlOVlF3TURvd01Eb3dNQzR3TURCYUoxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1dWIzY29LUzUwYjBsVFR5Z3BJQzh2UFQ0Z0p6SXdNVGN0TURRdE1qSlVNakE2TkRjNk1EVXVNek0xTFRBME9qQXdKMXh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNXViM2NvS1M1MGIwbFRUeWg3SUdsdVkyeDFaR1ZQWm1aelpYUTZJR1poYkhObElIMHBJQzh2UFQ0Z0p6SXdNVGN0TURRdE1qSlVNakE2TkRjNk1EVXVNek0xSjF4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzV1YjNjb0tTNTBiMGxUVHloN0lHWnZjbTFoZERvZ0oySmhjMmxqSnlCOUtTQXZMejArSUNjeU1ERTNNRFF5TWxReU1EUTNNRFV1TXpNMUxUQTBNREFuWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFnSUNvdlhHNGdJSFJ2U1ZOUEtIdGNiaUFnSUNCbWIzSnRZWFFnUFNCY0ltVjRkR1Z1WkdWa1hDSXNYRzRnSUNBZ2MzVndjSEpsYzNOVFpXTnZibVJ6SUQwZ1ptRnNjMlVzWEc0Z0lDQWdjM1Z3Y0hKbGMzTk5hV3hzYVhObFkyOXVaSE1nUFNCbVlXeHpaU3hjYmlBZ0lDQnBibU5zZFdSbFQyWm1jMlYwSUQwZ2RISjFaU3hjYmlBZ0lDQmxlSFJsYm1SbFpGcHZibVVnUFNCbVlXeHpaU3hjYmlBZ2ZTQTlJSHQ5S1NCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1selZtRnNhV1FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJR1Y0ZENBOUlHWnZjbTFoZENBOVBUMGdYQ0psZUhSbGJtUmxaRndpTzF4dVhHNGdJQ0FnYkdWMElHTWdQU0IwYjBsVFQwUmhkR1VvZEdocGN5d2daWGgwS1R0Y2JpQWdJQ0JqSUNzOUlGd2lWRndpTzF4dUlDQWdJR01nS3owZ2RHOUpVMDlVYVcxbEtIUm9hWE1zSUdWNGRDd2djM1Z3Y0hKbGMzTlRaV052Ym1SekxDQnpkWEJ3Y21WemMwMXBiR3hwYzJWamIyNWtjeXdnYVc1amJIVmtaVTltWm5ObGRDd2daWGgwWlc1a1pXUmFiMjVsS1R0Y2JpQWdJQ0J5WlhSMWNtNGdZenRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdGdUlFbFRUeUE0TmpBeExXTnZiWEJzYVdGdWRDQnpkSEpwYm1jZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJFWVhSbFZHbHRaU2R6SUdSaGRHVWdZMjl0Y0c5dVpXNTBYRzRnSUNBcUlFQndZWEpoYlNCN1QySnFaV04wZlNCdmNIUnpJQzBnYjNCMGFXOXVjMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1cyOXdkSE11Wm05eWJXRjBQU2RsZUhSbGJtUmxaQ2RkSUMwZ1kyaHZiM05sSUdKbGRIZGxaVzRnZEdobElHSmhjMmxqSUdGdVpDQmxlSFJsYm1SbFpDQm1iM0p0WVhSY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1ZFhSaktERTVPRElzSURVc0lESTFLUzUwYjBsVFQwUmhkR1VvS1NBdkx6MCtJQ2N4T1RneUxUQTFMVEkxSjF4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzUxZEdNb01UazRNaXdnTlN3Z01qVXBMblJ2U1ZOUFJHRjBaU2g3SUdadmNtMWhkRG9nSjJKaGMybGpKeUI5S1NBdkx6MCtJQ2N4T1RneU1EVXlOU2RjYmlBZ0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ0FnS2k5Y2JpQWdkRzlKVTA5RVlYUmxLSHNnWm05eWJXRjBJRDBnWENKbGVIUmxibVJsWkZ3aUlIMGdQU0I3ZlNrZ2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1cGMxWmhiR2xrS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZEc5SlUwOUVZWFJsS0hSb2FYTXNJR1p2Y20xaGRDQTlQVDBnWENKbGVIUmxibVJsWkZ3aUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJR0Z1SUVsVFR5QTROakF4TFdOdmJYQnNhV0Z1ZENCemRISnBibWNnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QkVZWFJsVkdsdFpTZHpJSGRsWldzZ1pHRjBaVnh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNTFkR01vTVRrNE1pd2dOU3dnTWpVcExuUnZTVk5QVjJWbGEwUmhkR1VvS1NBdkx6MCtJQ2N4T1RneUxWY3lNUzB5SjF4dUlDQWdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnSUNBcUwxeHVJQ0IwYjBsVFQxZGxaV3RFWVhSbEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGIxUmxZMmhHYjNKdFlYUW9kR2hwY3l3Z1hDSnJhMnRyTFNkWEoxZFhMV05jSWlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmhiaUJKVTA4Z09EWXdNUzFqYjIxd2JHbGhiblFnYzNSeWFXNW5JSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvYVhNZ1JHRjBaVlJwYldVbmN5QjBhVzFsSUdOdmJYQnZibVZ1ZEZ4dUlDQWdLaUJBY0dGeVlXMGdlMDlpYW1WamRIMGdiM0IwY3lBdElHOXdkR2x2Ym5OY2JpQWdJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0JiYjNCMGN5NXpkWEJ3Y21WemMwMXBiR3hwYzJWamIyNWtjejFtWVd4elpWMGdMU0JsZUdOc2RXUmxJRzFwYkd4cGMyVmpiMjVrY3lCbWNtOXRJSFJvWlNCbWIzSnRZWFFnYVdZZ2RHaGxlU2R5WlNBd1hHNGdJQ0FxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnVzI5d2RITXVjM1Z3Y0hKbGMzTlRaV052Ym1SelBXWmhiSE5sWFNBdElHVjRZMngxWkdVZ2MyVmpiMjVrY3lCbWNtOXRJSFJvWlNCbWIzSnRZWFFnYVdZZ2RHaGxlU2R5WlNBd1hHNGdJQ0FxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnVzI5d2RITXVhVzVqYkhWa1pVOW1abk5sZEQxMGNuVmxYU0F0SUdsdVkyeDFaR1VnZEdobElHOW1abk5sZEN3Z2MzVmphQ0JoY3lBbldpY2diM0lnSnkwd05Eb3dNQ2RjYmlBZ0lDb2dRSEJoY21GdElIdGliMjlzWldGdWZTQmJiM0IwY3k1bGVIUmxibVJsWkZwdmJtVTlkSEoxWlYwZ0xTQmhaR1FnZEdobElIUnBiV1VnZW05dVpTQm1iM0p0WVhRZ1pYaDBaVzV6YVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnVzI5d2RITXVhVzVqYkhWa1pWQnlaV1pwZUQxbVlXeHpaVjBnTFNCcGJtTnNkV1JsSUhSb1pTQmdWR0FnY0hKbFptbDRYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBjeTVtYjNKdFlYUTlKMlY0ZEdWdVpHVmtKMTBnTFNCamFHOXZjMlVnWW1WMGQyVmxiaUIwYUdVZ1ltRnphV01nWVc1a0lHVjRkR1Z1WkdWa0lHWnZjbTFoZEZ4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzUxZEdNb0tTNXpaWFFvZXlCb2IzVnlPaUEzTENCdGFXNTFkR1U2SURNMElIMHBMblJ2U1ZOUFZHbHRaU2dwSUM4dlBUNGdKekEzT2pNME9qRTVMak0yTVZvblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG5WMFl5Z3BMbk5sZENoN0lHaHZkWEk2SURjc0lHMXBiblYwWlRvZ016UXNJSE5sWTI5dVpITTZJREFzSUcxcGJHeHBjMlZqYjI1a2N6b2dNQ0I5S1M1MGIwbFRUMVJwYldVb2V5QnpkWEJ3Y21WemMxTmxZMjl1WkhNNklIUnlkV1VnZlNrZ0x5ODlQaUFuTURjNk16UmFKMXh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNTFkR01vS1M1elpYUW9leUJvYjNWeU9pQTNMQ0J0YVc1MWRHVTZJRE0wSUgwcExuUnZTVk5QVkdsdFpTaDdJR1p2Y20xaGREb2dKMkpoYzJsakp5QjlLU0F2THowK0lDY3dOek0wTVRrdU16WXhXaWRjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXVkWFJqS0NrdWMyVjBLSHNnYUc5MWNqb2dOeXdnYldsdWRYUmxPaUF6TkNCOUtTNTBiMGxUVDFScGJXVW9leUJwYm1Oc2RXUmxVSEpsWm1sNE9pQjBjblZsSUgwcElDOHZQVDRnSjFRd056b3pORG94T1M0ek5qRmFKMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdJQ0FxTDF4dUlDQjBiMGxUVDFScGJXVW9lMXh1SUNBZ0lITjFjSEJ5WlhOelRXbHNiR2x6WldOdmJtUnpJRDBnWm1Gc2MyVXNYRzRnSUNBZ2MzVndjSEpsYzNOVFpXTnZibVJ6SUQwZ1ptRnNjMlVzWEc0Z0lDQWdhVzVqYkhWa1pVOW1abk5sZENBOUlIUnlkV1VzWEc0Z0lDQWdhVzVqYkhWa1pWQnlaV1pwZUNBOUlHWmhiSE5sTEZ4dUlDQWdJR1Y0ZEdWdVpHVmtXbTl1WlNBOUlHWmhiSE5sTEZ4dUlDQWdJR1p2Y20xaGRDQTlJRndpWlhoMFpXNWtaV1JjSWl4Y2JpQWdmU0E5SUh0OUtTQjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtbHpWbUZzYVdRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JqSUQwZ2FXNWpiSFZrWlZCeVpXWnBlQ0EvSUZ3aVZGd2lJRG9nWENKY0lqdGNiaUFnSUNCeVpYUjFjbTRnS0Z4dUlDQWdJQ0FnWXlBclhHNGdJQ0FnSUNCMGIwbFRUMVJwYldVb1hHNGdJQ0FnSUNBZ0lIUm9hWE1zWEc0Z0lDQWdJQ0FnSUdadmNtMWhkQ0E5UFQwZ1hDSmxlSFJsYm1SbFpGd2lMRnh1SUNBZ0lDQWdJQ0J6ZFhCd2NtVnpjMU5sWTI5dVpITXNYRzRnSUNBZ0lDQWdJSE4xY0hCeVpYTnpUV2xzYkdselpXTnZibVJ6TEZ4dUlDQWdJQ0FnSUNCcGJtTnNkV1JsVDJabWMyVjBMRnh1SUNBZ0lDQWdJQ0JsZUhSbGJtUmxaRnB2Ym1WY2JpQWdJQ0FnSUNsY2JpQWdJQ0FwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1lXNGdVa1pESURJNE1qSXRZMjl0Y0dGMGFXSnNaU0J6ZEhKcGJtY2djbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCRVlYUmxWR2x0WlZ4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzUxZEdNb01qQXhOQ3dnTnl3Z01UTXBMblJ2VWtaRE1qZ3lNaWdwSUM4dlBUNGdKMU4xYml3Z01UTWdTblZzSURJd01UUWdNREE2TURBNk1EQWdLekF3TURBblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRRc0lEY3NJREV6S1M1MGIxSkdRekk0TWpJb0tTQXZMejArSUNkVGRXNHNJREV6SUVwMWJDQXlNREUwSURBd09qQXdPakF3SUMwd05EQXdKMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdJQ0FxTDF4dUlDQjBiMUpHUXpJNE1qSW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUnZWR1ZqYUVadmNtMWhkQ2gwYUdsekxDQmNJa1ZGUlN3Z1pHUWdURXhNSUhsNWVYa2dTRWc2YlcwNmMzTWdXbHBhWENJc0lHWmhiSE5sS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHRWdjM1J5YVc1bklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nUkdGMFpWUnBiV1VnWVhCd2NtOXdjbWxoZEdVZ1ptOXlJSFZ6WlNCcGJpQklWRlJRSUdobFlXUmxjbk11SUZSb1pTQnZkWFJ3ZFhRZ2FYTWdZV3gzWVhseklHVjRjSEpsYzNObFpDQnBiaUJIVFZRdVhHNGdJQ0FxSUZOd1pXTnBabWxqWVd4c2VTd2dkR2hsSUhOMGNtbHVaeUJqYjI1bWIzSnRjeUIwYnlCU1JrTWdNVEV5TXk1Y2JpQWdJQ29nUUhObFpTQm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3ZVSEp2ZEc5amIyeHpMM0ptWXpJMk1UWXZjbVpqTWpZeE5pMXpaV016TG1oMGJXd2pjMlZqTXk0ekxqRmNiaUFnSUNvZ1FHVjRZVzF3YkdVZ1JHRjBaVlJwYldVdWRYUmpLREl3TVRRc0lEY3NJREV6S1M1MGIwaFVWRkFvS1NBdkx6MCtJQ2RUZFc0c0lERXpJRXAxYkNBeU1ERTBJREF3T2pBd09qQXdJRWROVkNkY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1ZFhSaktESXdNVFFzSURjc0lERXpMQ0F4T1NrdWRHOUlWRlJRS0NrZ0x5ODlQaUFuVTNWdUxDQXhNeUJLZFd3Z01qQXhOQ0F4T1Rvd01Eb3dNQ0JIVFZRblhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBZ0lDb3ZYRzRnSUhSdlNGUlVVQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkRzlVWldOb1JtOXliV0YwS0hSb2FYTXVkRzlWVkVNb0tTd2dYQ0pGUlVVc0lHUmtJRXhNVENCNWVYbDVJRWhJT20xdE9uTnpJQ2RIVFZRblhDSXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nWVNCemRISnBibWNnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QkVZWFJsVkdsdFpTQmhjSEJ5YjNCeWFXRjBaU0JtYjNJZ2RYTmxJR2x1SUZOUlRDQkVZWFJsWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMblYwWXlneU1ERTBMQ0EzTENBeE15a3VkRzlUVVV4RVlYUmxLQ2tnTHk4OVBpQW5NakF4TkMwd055MHhNeWRjYmlBZ0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZWeHVJQ0FnS2k5Y2JpQWdkRzlUVVV4RVlYUmxLQ2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVwYzFaaGJHbGtLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUnZTVk5QUkdGMFpTaDBhR2x6TENCMGNuVmxLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdFZ2MzUnlhVzVuSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb2FYTWdSR0YwWlZScGJXVWdZWEJ3Y205d2NtbGhkR1VnWm05eUlIVnpaU0JwYmlCVFVVd2dWR2x0WlZ4dUlDQWdLaUJBY0dGeVlXMGdlMDlpYW1WamRIMGdiM0IwY3lBdElHOXdkR2x2Ym5OY2JpQWdJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0JiYjNCMGN5NXBibU5zZFdSbFdtOXVaVDFtWVd4elpWMGdMU0JwYm1Oc2RXUmxJSFJvWlNCNmIyNWxMQ0J6ZFdOb0lHRnpJQ2RCYldWeWFXTmhMMDVsZDE5WmIzSnJKeTRnVDNabGNuSnBaR1Z6SUdsdVkyeDFaR1ZQWm1aelpYUXVYRzRnSUNBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1cyOXdkSE11YVc1amJIVmtaVTltWm5ObGREMTBjblZsWFNBdElHbHVZMngxWkdVZ2RHaGxJRzltWm5ObGRDd2djM1ZqYUNCaGN5QW5XaWNnYjNJZ0p5MHdORG93TUNkY2JpQWdJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0JiYjNCMGN5NXBibU5zZFdSbFQyWm1jMlYwVTNCaFkyVTlkSEoxWlYwZ0xTQnBibU5zZFdSbElIUm9aU0J6Y0dGalpTQmlaWFIzWldWdUlIUm9aU0IwYVcxbElHRnVaQ0IwYUdVZ2IyWm1jMlYwTENCemRXTm9JR0Z6SUNjd05Ub3hOVG94Tmk0ek5EVWdMVEEwT2pBd0oxeHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1MWRHTW9LUzUwYjFOUlRDZ3BJQzh2UFQ0Z0p6QTFPakUxT2pFMkxqTTBOU2RjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXVibTkzS0NrdWRHOVRVVXdvS1NBdkx6MCtJQ2N3TlRveE5Ub3hOaTR6TkRVZ0xUQTBPakF3SjF4dUlDQWdLaUJBWlhoaGJYQnNaU0JFWVhSbFZHbHRaUzV1YjNjb0tTNTBiMU5SVENoN0lHbHVZMngxWkdWUFptWnpaWFE2SUdaaGJITmxJSDBwSUM4dlBUNGdKekExT2pFMU9qRTJMak0wTlNkY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ym05M0tDa3VkRzlUVVV3b2V5QnBibU5zZFdSbFdtOXVaVG9nWm1Gc2MyVWdmU2tnTHk4OVBpQW5NRFU2TVRVNk1UWXVNelExSUVGdFpYSnBZMkV2VG1WM1gxbHZjbXNuWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMWNiaUFnSUNvdlhHNGdJSFJ2VTFGTVZHbHRaU2g3SUdsdVkyeDFaR1ZQWm1aelpYUWdQU0IwY25WbExDQnBibU5zZFdSbFdtOXVaU0E5SUdaaGJITmxMQ0JwYm1Oc2RXUmxUMlptYzJWMFUzQmhZMlVnUFNCMGNuVmxJSDBnUFNCN2ZTa2dlMXh1SUNBZ0lHeGxkQ0JtYlhRZ1BTQmNJa2hJT20xdE9uTnpMbE5UVTF3aU8xeHVYRzRnSUNBZ2FXWWdLR2x1WTJ4MVpHVmFiMjVsSUh4OElHbHVZMngxWkdWUFptWnpaWFFwSUh0Y2JpQWdJQ0FnSUdsbUlDaHBibU5zZFdSbFQyWm1jMlYwVTNCaFkyVXBJSHRjYmlBZ0lDQWdJQ0FnWm0xMElDczlJRndpSUZ3aU8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLR2x1WTJ4MVpHVmFiMjVsS1NCN1hHNGdJQ0FnSUNBZ0lHWnRkQ0FyUFNCY0lucGNJanRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvYVc1amJIVmtaVTltWm5ObGRDa2dlMXh1SUNBZ0lDQWdJQ0JtYlhRZ0t6MGdYQ0phV2x3aU8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUIwYjFSbFkyaEdiM0p0WVhRb2RHaHBjeXdnWm0xMExDQjBjblZsS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHRWdjM1J5YVc1bklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nUkdGMFpWUnBiV1VnWVhCd2NtOXdjbWxoZEdVZ1ptOXlJSFZ6WlNCcGJpQlRVVXdnUkdGMFpWUnBiV1ZjYmlBZ0lDb2dRSEJoY21GdElIdFBZbXBsWTNSOUlHOXdkSE1nTFNCdmNIUnBiMjV6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXMjl3ZEhNdWFXNWpiSFZrWlZwdmJtVTlabUZzYzJWZElDMGdhVzVqYkhWa1pTQjBhR1VnZW05dVpTd2djM1ZqYUNCaGN5QW5RVzFsY21sallTOU9aWGRmV1c5eWF5Y3VJRTkyWlhKeWFXUmxjeUJwYm1Oc2RXUmxUMlptYzJWMExseHVJQ0FnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUZ0dmNIUnpMbWx1WTJ4MVpHVlBabVp6WlhROWRISjFaVjBnTFNCcGJtTnNkV1JsSUhSb1pTQnZabVp6WlhRc0lITjFZMmdnWVhNZ0oxb25JRzl5SUNjdE1EUTZNREFuWEc0Z0lDQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXMjl3ZEhNdWFXNWpiSFZrWlU5bVpuTmxkRk53WVdObFBYUnlkV1ZkSUMwZ2FXNWpiSFZrWlNCMGFHVWdjM0JoWTJVZ1ltVjBkMlZsYmlCMGFHVWdkR2x0WlNCaGJtUWdkR2hsSUc5bVpuTmxkQ3dnYzNWamFDQmhjeUFuTURVNk1UVTZNVFl1TXpRMUlDMHdORG93TUNkY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1ZFhSaktESXdNVFFzSURjc0lERXpLUzUwYjFOUlRDZ3BJQzh2UFQ0Z0p6SXdNVFF0TURjdE1UTWdNREE2TURBNk1EQXVNREF3SUZvblhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG14dlkyRnNLREl3TVRRc0lEY3NJREV6S1M1MGIxTlJUQ2dwSUM4dlBUNGdKekl3TVRRdE1EY3RNVE1nTURBNk1EQTZNREF1TURBd0lDMHdORG93TUNkY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ykc5allXd29NakF4TkN3Z055d2dNVE1wTG5SdlUxRk1LSHNnYVc1amJIVmtaVTltWm5ObGREb2dabUZzYzJVZ2ZTa2dMeTg5UGlBbk1qQXhOQzB3TnkweE15QXdNRG93TURvd01DNHdNREFuWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbXh2WTJGc0tESXdNVFFzSURjc0lERXpLUzUwYjFOUlRDaDdJR2x1WTJ4MVpHVmFiMjVsT2lCMGNuVmxJSDBwSUM4dlBUNGdKekl3TVRRdE1EY3RNVE1nTURBNk1EQTZNREF1TURBd0lFRnRaWEpwWTJFdlRtVjNYMWx2Y21zblhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBZ0lDb3ZYRzRnSUhSdlUxRk1LRzl3ZEhNZ1BTQjdmU2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVwYzFaaGJHbGtLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdZQ1I3ZEdocGN5NTBiMU5SVEVSaGRHVW9LWDBnSkh0MGFHbHpMblJ2VTFGTVZHbHRaU2h2Y0hSektYMWdPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nWVNCemRISnBibWNnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdocGN5QkVZWFJsVkdsdFpTQmhjSEJ5YjNCeWFXRjBaU0JtYjNJZ1pHVmlkV2RuYVc1blhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzFjYmlBZ0lDb3ZYRzRnSUhSdlUzUnlhVzVuS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHpWbUZzYVdRZ1B5QjBhR2x6TG5SdlNWTlBLQ2tnT2lCSlRsWkJURWxFTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ2RHaGxJR1Z3YjJOb0lHMXBiR3hwYzJWamIyNWtjeUJ2WmlCMGFHbHpJRVJoZEdWVWFXMWxMaUJCYkdsaGN5QnZaaUI3UUd4cGJtc2dSR0YwWlZScGJXVWpkRzlOYVd4c2FYTjlYRzRnSUNBcUlFQnlaWFIxY200Z2UyNTFiV0psY24xY2JpQWdJQ292WEc0Z0lIWmhiSFZsVDJZb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkRzlOYVd4c2FYTW9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUhSb1pTQmxjRzlqYUNCdGFXeHNhWE5sWTI5dVpITWdiMllnZEdocGN5QkVZWFJsVkdsdFpTNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlZ4dUlDQWdLaTljYmlBZ2RHOU5hV3hzYVhNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhWE5XWVd4cFpDQS9JSFJvYVhNdWRITWdPaUJPWVU0N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QjBhR1VnWlhCdlkyZ2djMlZqYjI1a2N5QnZaaUIwYUdseklFUmhkR1ZVYVcxbExseHVJQ0FnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCMGIxTmxZMjl1WkhNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhWE5XWVd4cFpDQS9JSFJvYVhNdWRITWdMeUF4TURBd0lEb2dUbUZPTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ2RHaGxJR1Z3YjJOb0lITmxZMjl1WkhNZ0tHRnpJR0VnZDJodmJHVWdiblZ0WW1WeUtTQnZaaUIwYUdseklFUmhkR1ZVYVcxbExseHVJQ0FnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCMGIxVnVhWGhKYm5SbFoyVnlLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1selZtRnNhV1FnUHlCTllYUm9MbVpzYjI5eUtIUm9hWE11ZEhNZ0x5QXhNREF3S1NBNklFNWhUanRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdGdUlFbFRUeUE0TmpBeElISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9hWE1nUkdGMFpWUnBiV1VnWVhCd2NtOXdjbWxoZEdVZ1ptOXlJSFZ6WlNCcGJpQktVMDlPTGx4dUlDQWdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnSUNBcUwxeHVJQ0IwYjBwVFQwNG9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11ZEc5SlUwOG9LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdFZ1FsTlBUaUJ6WlhKcFlXeHBlbUZpYkdVZ1pYRjFhWFpoYkdWdWRDQjBieUIwYUdseklFUmhkR1ZVYVcxbExseHVJQ0FnS2lCQWNtVjBkWEp1SUh0RVlYUmxmVnh1SUNBZ0tpOWNiaUFnZEc5Q1UwOU9LQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5SdlNsTkVZWFJsS0NrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmhJRXBoZG1GVFkzSnBjSFFnYjJKcVpXTjBJSGRwZEdnZ2RHaHBjeUJFWVhSbFZHbHRaU2R6SUhsbFlYSXNJRzF2Ym5Sb0xDQmtZWGtzSUdGdVpDQnpieUJ2Ymk1Y2JpQWdJQ29nUUhCaGNtRnRJRzl3ZEhNZ0xTQnZjSFJwYjI1eklHWnZjaUJuWlc1bGNtRjBhVzVuSUhSb1pTQnZZbXBsWTNSY2JpQWdJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0JiYjNCMGN5NXBibU5zZFdSbFEyOXVabWxuUFdaaGJITmxYU0F0SUdsdVkyeDFaR1VnWTI5dVptbG5kWEpoZEdsdmJpQmhkSFJ5YVdKMWRHVnpJR2x1SUhSb1pTQnZkWFJ3ZFhSY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ym05M0tDa3VkRzlQWW1wbFkzUW9LU0F2THowK0lIc2dlV1ZoY2pvZ01qQXhOeXdnYlc5dWRHZzZJRFFzSUdSaGVUb2dNaklzSUdodmRYSTZJREl3TENCdGFXNTFkR1U2SURRNUxDQnpaV052Ym1RNklEUXlMQ0J0YVd4c2FYTmxZMjl1WkRvZ01qWTRJSDFjYmlBZ0lDb2dRSEpsZEhWeWJpQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdkRzlQWW1wbFkzUW9iM0IwY3lBOUlIdDlLU0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbWx6Vm1Gc2FXUXBJSEpsZEhWeWJpQjdmVHRjYmx4dUlDQWdJR052Ym5OMElHSmhjMlVnUFNCN0lDNHVMblJvYVhNdVl5QjlPMXh1WEc0Z0lDQWdhV1lnS0c5d2RITXVhVzVqYkhWa1pVTnZibVpwWnlrZ2UxeHVJQ0FnSUNBZ1ltRnpaUzV2ZFhSd2RYUkRZV3hsYm1SaGNpQTlJSFJvYVhNdWIzVjBjSFYwUTJGc1pXNWtZWEk3WEc0Z0lDQWdJQ0JpWVhObExtNTFiV0psY21sdVoxTjVjM1JsYlNBOUlIUm9hWE11Ykc5akxtNTFiV0psY21sdVoxTjVjM1JsYlR0Y2JpQWdJQ0FnSUdKaGMyVXViRzlqWVd4bElEMGdkR2hwY3k1c2IyTXViRzlqWVd4bE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdZbUZ6WlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHRWdTbUYyWVZOamNtbHdkQ0JFWVhSbElHVnhkV2wyWVd4bGJuUWdkRzhnZEdocGN5QkVZWFJsVkdsdFpTNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1JHRjBaWDFjYmlBZ0lDb3ZYRzRnSUhSdlNsTkVZWFJsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1JHRjBaU2gwYUdsekxtbHpWbUZzYVdRZ1B5QjBhR2x6TG5SeklEb2dUbUZPS1R0Y2JpQWdmVnh1WEc0Z0lDOHZJRU5QVFZCQlVrVmNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1SUhSb1pTQmthV1ptWlhKbGJtTmxJR0psZEhkbFpXNGdkSGR2SUVSaGRHVlVhVzFsY3lCaGN5QmhJRVIxY21GMGFXOXVMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUmhkR1ZVYVcxbGZTQnZkR2hsY2tSaGRHVlVhVzFsSUMwZ2RHaGxJRVJoZEdWVWFXMWxJSFJ2SUdOdmJYQmhjbVVnZEdocGN5QnZibVVnZEc5Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDhjM1J5YVc1blcxMTlJRnQxYm1sMFBWc25iV2xzYkdselpXTnZibVJ6SjExZElDMGdkR2hsSUhWdWFYUWdiM0lnWVhKeVlYa2diMllnZFc1cGRITWdLSE4xWTJnZ1lYTWdKMmh2ZFhKekp5QnZjaUFuWkdGNWN5Y3BJSFJ2SUdsdVkyeDFaR1VnYVc0Z2RHaGxJR1IxY21GMGFXOXVMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2IzQjBjeUF0SUc5d2RHbHZibk1nZEdoaGRDQmhabVpsWTNRZ2RHaGxJR055WldGMGFXOXVJRzltSUhSb1pTQkVkWEpoZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzI5d2RITXVZMjl1ZG1WeWMybHZia0ZqWTNWeVlXTjVQU2RqWVhOMVlXd25YU0F0SUhSb1pTQmpiMjUyWlhKemFXOXVJSE41YzNSbGJTQjBieUIxYzJWY2JpQWdJQ29nUUdWNFlXMXdiR1ZjYmlBZ0lDb2dkbUZ5SUdreElEMGdSR0YwWlZScGJXVXVabkp2YlVsVFR5Z25NVGs0TWkwd05TMHlOVlF3T1RvME5TY3BMRnh1SUNBZ0tpQWdJQ0FnYVRJZ1BTQkVZWFJsVkdsdFpTNW1jbTl0U1ZOUEtDY3hPVGd6TFRFd0xURTBWREV3T2pNd0p5azdYRzRnSUNBcUlHa3lMbVJwWm1Zb2FURXBMblJ2VDJKcVpXTjBLQ2tnTHk4OVBpQjdJRzFwYkd4cGMyVmpiMjVrY3pvZ05ETTRNRGMxTURBd01EQWdmVnh1SUNBZ0tpQnBNaTVrYVdabUtHa3hMQ0FuYUc5MWNuTW5LUzUwYjA5aWFtVmpkQ2dwSUM4dlBUNGdleUJvYjNWeWN6b2dNVEl4TmpndU56VWdmVnh1SUNBZ0tpQnBNaTVrYVdabUtHa3hMQ0JiSjIxdmJuUm9jeWNzSUNka1lYbHpKMTBwTG5SdlQySnFaV04wS0NrZ0x5ODlQaUI3SUcxdmJuUm9jem9nTVRZc0lHUmhlWE02SURFNUxqQXpNVEkxSUgxY2JpQWdJQ29nYVRJdVpHbG1aaWhwTVN3Z1d5ZHRiMjUwYUhNbkxDQW5aR0Y1Y3ljc0lDZG9iM1Z5Y3lkZEtTNTBiMDlpYW1WamRDZ3BJQzh2UFQ0Z2V5QnRiMjUwYUhNNklERTJMQ0JrWVhsek9pQXhPU3dnYUc5MWNuTTZJREF1TnpVZ2ZWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0RWRYSmhkR2x2Ym4xY2JpQWdJQ292WEc0Z0lHUnBabVlvYjNSb1pYSkVZWFJsVkdsdFpTd2dkVzVwZENBOUlGd2liV2xzYkdselpXTnZibVJ6WENJc0lHOXdkSE1nUFNCN2ZTa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXBjMVpoYkdsa0lIeDhJQ0Z2ZEdobGNrUmhkR1ZVYVcxbExtbHpWbUZzYVdRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCRWRYSmhkR2x2Ymk1cGJuWmhiR2xrS0Z3aVkzSmxZWFJsWkNCaWVTQmthV1ptYVc1bklHRnVJR2x1ZG1Gc2FXUWdSR0YwWlZScGJXVmNJaWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ1pIVnlUM0IwY3lBOUlIc2diRzlqWVd4bE9pQjBhR2x6TG14dlkyRnNaU3dnYm5WdFltVnlhVzVuVTNsemRHVnRPaUIwYUdsekxtNTFiV0psY21sdVoxTjVjM1JsYlN3Z0xpNHViM0IwY3lCOU8xeHVYRzRnSUNBZ1kyOXVjM1FnZFc1cGRITWdQU0J0WVhsaVpVRnljbUY1S0hWdWFYUXBMbTFoY0NoRWRYSmhkR2x2Ymk1dWIzSnRZV3hwZW1WVmJtbDBLU3hjYmlBZ0lDQWdJRzkwYUdWeVNYTk1ZWFJsY2lBOUlHOTBhR1Z5UkdGMFpWUnBiV1V1ZG1Gc2RXVlBaaWdwSUQ0Z2RHaHBjeTUyWVd4MVpVOW1LQ2tzWEc0Z0lDQWdJQ0JsWVhKc2FXVnlJRDBnYjNSb1pYSkpjMHhoZEdWeUlEOGdkR2hwY3lBNklHOTBhR1Z5UkdGMFpWUnBiV1VzWEc0Z0lDQWdJQ0JzWVhSbGNpQTlJRzkwYUdWeVNYTk1ZWFJsY2lBL0lHOTBhR1Z5UkdGMFpWUnBiV1VnT2lCMGFHbHpMRnh1SUNBZ0lDQWdaR2xtWm1Wa0lEMGdaR2xtWmlobFlYSnNhV1Z5TENCc1lYUmxjaXdnZFc1cGRITXNJR1IxY2s5d2RITXBPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHOTBhR1Z5U1hOTVlYUmxjaUEvSUdScFptWmxaQzV1WldkaGRHVW9LU0E2SUdScFptWmxaRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTRnZEdobElHUnBabVpsY21WdVkyVWdZbVYwZDJWbGJpQjBhR2x6SUVSaGRHVlVhVzFsSUdGdVpDQnlhV2RvZENCdWIzY3VYRzRnSUNBcUlGTmxaU0I3UUd4cGJtc2dSR0YwWlZScGJXVWpaR2xtWm4xY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDhjM1J5YVc1blcxMTlJRnQxYm1sMFBWc25iV2xzYkdselpXTnZibVJ6SjExZElDMGdkR2hsSUhWdWFYUWdiM0lnZFc1cGRITWdkVzVwZEhNZ0tITjFZMmdnWVhNZ0oyaHZkWEp6SnlCdmNpQW5aR0Y1Y3ljcElIUnZJR2x1WTJ4MVpHVWdhVzRnZEdobElHUjFjbUYwYVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2Y0hSeklDMGdiM0IwYVc5dWN5QjBhR0YwSUdGbVptVmpkQ0IwYUdVZ1kzSmxZWFJwYjI0Z2IyWWdkR2hsSUVSMWNtRjBhVzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmJiM0IwY3k1amIyNTJaWEp6YVc5dVFXTmpkWEpoWTNrOUoyTmhjM1ZoYkNkZElDMGdkR2hsSUdOdmJuWmxjbk5wYjI0Z2MzbHpkR1Z0SUhSdklIVnpaVnh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVkWEpoZEdsdmJuMWNiaUFnSUNvdlhHNGdJR1JwWm1aT2IzY29kVzVwZENBOUlGd2liV2xzYkdselpXTnZibVJ6WENJc0lHOXdkSE1nUFNCN2ZTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbVJwWm1Zb1JHRjBaVlJwYldVdWJtOTNLQ2tzSUhWdWFYUXNJRzl3ZEhNcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJpQmhiaUJKYm5SbGNuWmhiQ0J6Y0dGdWJtbHVaeUJpWlhSM1pXVnVJSFJvYVhNZ1JHRjBaVlJwYldVZ1lXNWtJR0Z1YjNSb1pYSWdSR0YwWlZScGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0RVlYUmxWR2x0WlgwZ2IzUm9aWEpFWVhSbFZHbHRaU0F0SUhSb1pTQnZkR2hsY2lCbGJtUWdjRzlwYm5RZ2IyWWdkR2hsSUVsdWRHVnlkbUZzWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMGx1ZEdWeWRtRnNmVnh1SUNBZ0tpOWNiaUFnZFc1MGFXd29iM1JvWlhKRVlYUmxWR2x0WlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtbHpWbUZzYVdRZ1B5QkpiblJsY25aaGJDNW1jbTl0UkdGMFpWUnBiV1Z6S0hSb2FYTXNJRzkwYUdWeVJHRjBaVlJwYldVcElEb2dkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY200Z2QyaGxkR2hsY2lCMGFHbHpJRVJoZEdWVWFXMWxJR2x6SUdsdUlIUm9aU0J6WVcxbElIVnVhWFFnYjJZZ2RHbHRaU0JoY3lCaGJtOTBhR1Z5SUVSaGRHVlVhVzFsTGx4dUlDQWdLaUJJYVdkb1pYSXRiM0prWlhJZ2RXNXBkSE1nYlhWemRDQmhiSE52SUdKbElHbGtaVzUwYVdOaGJDQm1iM0lnZEdocGN5Qm1kVzVqZEdsdmJpQjBieUJ5WlhSMWNtNGdZSFJ5ZFdWZ0xseHVJQ0FnS2lCT2IzUmxJSFJvWVhRZ2RHbHRaU0I2YjI1bGN5QmhjbVVnS2lwcFoyNXZjbVZrS2lvZ2FXNGdkR2hwY3lCamIyMXdZWEpwYzI5dUxDQjNhR2xqYUNCamIyMXdZWEpsY3lCMGFHVWdLaXBzYjJOaGJDb3FJR05oYkdWdVpHRnlJSFJwYldVdUlGVnpaU0I3UUd4cGJtc2dSR0YwWlZScGJXVWpjMlYwV205dVpYMGdkRzhnWTI5dWRtVnlkQ0J2Ym1VZ2IyWWdkR2hsSUdSaGRHVnpJR2xtSUc1bFpXUmxaQzVjYmlBZ0lDb2dRSEJoY21GdElIdEVZWFJsVkdsdFpYMGdiM1JvWlhKRVlYUmxWR2x0WlNBdElIUm9aU0J2ZEdobGNpQkVZWFJsVkdsdFpWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZFc1cGRDQXRJSFJvWlNCMWJtbDBJRzltSUhScGJXVWdkRzhnWTJobFkyc2djMkZ0Wlc1bGMzTWdiMjVjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXVibTkzS0NrdWFHRnpVMkZ0WlNodmRHaGxja1JVTENBblpHRjVKeWs3SUM4dmZqNGdkSEoxWlNCcFppQnZkR2hsY2tSVUlHbHpJR2x1SUhSb1pTQnpZVzFsSUdOMWNuSmxiblFnWTJGc1pXNWtZWElnWkdGNVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5WEc0Z0lDQXFMMXh1SUNCb1lYTlRZVzFsS0c5MGFHVnlSR0YwWlZScGJXVXNJSFZ1YVhRcElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdWFYTldZV3hwWkNrZ2NtVjBkWEp1SUdaaGJITmxPMXh1WEc0Z0lDQWdZMjl1YzNRZ2FXNXdkWFJOY3lBOUlHOTBhR1Z5UkdGMFpWUnBiV1V1ZG1Gc2RXVlBaaWdwTzF4dUlDQWdJR052Ym5OMElHRmthblZ6ZEdWa1ZHOWFiMjVsSUQwZ2RHaHBjeTV6WlhSYWIyNWxLRzkwYUdWeVJHRjBaVlJwYldVdWVtOXVaU3dnZXlCclpXVndURzlqWVd4VWFXMWxPaUIwY25WbElIMHBPMXh1SUNBZ0lISmxkSFZ5YmlCaFpHcDFjM1JsWkZSdldtOXVaUzV6ZEdGeWRFOW1LSFZ1YVhRcElEdzlJR2x1Y0hWMFRYTWdKaVlnYVc1d2RYUk5jeUE4UFNCaFpHcDFjM1JsWkZSdldtOXVaUzVsYm1SUFppaDFibWwwS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkZjWFZoYkdsMGVTQmphR1ZqYTF4dUlDQWdLaUJVZDI4Z1JHRjBaVlJwYldWeklHRnlaU0JsY1hWaGJDQnBabVlnZEdobGVTQnlaWEJ5WlhObGJuUWdkR2hsSUhOaGJXVWdiV2xzYkdselpXTnZibVFzSUdoaGRtVWdkR2hsSUhOaGJXVWdlbTl1WlNCaGJtUWdiRzlqWVhScGIyNHNJR0Z1WkNCaGNtVWdZbTkwYUNCMllXeHBaQzVjYmlBZ0lDb2dWRzhnWTI5dGNHRnlaU0JxZFhOMElIUm9aU0J0YVd4c2FYTmxZMjl1WkNCMllXeDFaWE1zSUhWelpTQmdLMlIwTVNBOVBUMGdLMlIwTW1BdVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkdGMFpWUnBiV1Y5SUc5MGFHVnlJQzBnZEdobElHOTBhR1Z5SUVSaGRHVlVhVzFsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlYRzRnSUNBcUwxeHVJQ0JsY1hWaGJITW9iM1JvWlhJcElIdGNiaUFnSUNCeVpYUjFjbTRnS0Z4dUlDQWdJQ0FnZEdocGN5NXBjMVpoYkdsa0lDWW1YRzRnSUNBZ0lDQnZkR2hsY2k1cGMxWmhiR2xrSUNZbVhHNGdJQ0FnSUNCMGFHbHpMblpoYkhWbFQyWW9LU0E5UFQwZ2IzUm9aWEl1ZG1Gc2RXVlBaaWdwSUNZbVhHNGdJQ0FnSUNCMGFHbHpMbnB2Ym1VdVpYRjFZV3h6S0c5MGFHVnlMbnB2Ym1VcElDWW1YRzRnSUNBZ0lDQjBhR2x6TG14dll5NWxjWFZoYkhNb2IzUm9aWEl1Ykc5aktWeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmhJSE4wY21sdVp5QnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQmhJSFJvYVhNZ2RHbHRaU0J5Wld4aGRHbDJaU0IwYnlCdWIzY3NJSE4xWTJnZ1lYTWdYQ0pwYmlCMGQyOGdaR0Y1YzF3aUxpQkRZVzRnYjI1c2VTQnBiblJsY201aGRHbHZibUZzYVhwbElHbG1JSGx2ZFhKY2JpQWdJQ29nY0d4aGRHWnZjbTBnYzNWd2NHOXlkSE1nU1c1MGJDNVNaV3hoZEdsMlpWUnBiV1ZHYjNKdFlYUXVJRkp2ZFc1a2N5QmtiM2R1SUdKNUlHUmxabUYxYkhRdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2Y0hScGIyNXpJQzBnYjNCMGFXOXVjeUIwYUdGMElHRm1abVZqZENCMGFHVWdiM1YwY0hWMFhHNGdJQ0FxSUVCd1lYSmhiU0I3UkdGMFpWUnBiV1Y5SUZ0dmNIUnBiMjV6TG1KaGMyVTlSR0YwWlZScGJXVXVibTkzS0NsZElDMGdkR2hsSUVSaGRHVlVhVzFsSUhSdklIVnpaU0JoY3lCMGFHVWdZbUZ6YVhNZ2RHOGdkMmhwWTJnZ2RHaHBjeUIwYVcxbElHbHpJR052YlhCaGNtVmtMaUJFWldaaGRXeDBjeUIwYnlCdWIzY3VYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmIzQjBhVzl1Y3k1emRIbHNaVDFjSW14dmJtZGNJbDBnTFNCMGFHVWdjM1I1YkdVZ2IyWWdkVzVwZEhNc0lHMTFjM1FnWW1VZ1hDSnNiMjVuWENJc0lGd2ljMmh2Y25SY0lpd2diM0lnWENKdVlYSnliM2RjSWx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozeHpkSEpwYm1kYlhYMGdiM0IwYVc5dWN5NTFibWwwSUMwZ2RYTmxJR0VnYzNCbFkybG1hV01nZFc1cGRDQnZjaUJoY25KaGVTQnZaaUIxYm1sMGN6c2dhV1lnYjIxcGRIUmxaQ3dnYjNJZ1lXNGdZWEp5WVhrc0lIUm9aU0J0WlhSb2IyUWdkMmxzYkNCd2FXTnJJSFJvWlNCaVpYTjBJSFZ1YVhRdUlGVnpaU0JoYmlCaGNuSmhlU0J2Y2lCdmJtVWdiMllnWENKNVpXRnljMXdpTENCY0luRjFZWEowWlhKelhDSXNJRndpYlc5dWRHaHpYQ0lzSUZ3aWQyVmxhM05jSWl3Z1hDSmtZWGx6WENJc0lGd2lhRzkxY25OY0lpd2dYQ0p0YVc1MWRHVnpYQ0lzSUc5eUlGd2ljMlZqYjI1a2Mxd2lYRzRnSUNBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1cyOXdkR2x2Ym5NdWNtOTFibVE5ZEhKMVpWMGdMU0IzYUdWMGFHVnlJSFJ2SUhKdmRXNWtJSFJvWlNCdWRXMWlaWEp6SUdsdUlIUm9aU0J2ZFhSd2RYUXVYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCYmIzQjBhVzl1Y3k1d1lXUmthVzVuUFRCZElDMGdjR0ZrWkdsdVp5QnBiaUJ0YVd4c2FYTmxZMjl1WkhNdUlGUm9hWE1nWVd4c2IzZHpJSGx2ZFNCMGJ5QnliM1Z1WkNCMWNDQjBhR1VnY21WemRXeDBJR2xtSUdsMElHWnBkSE1nYVc1emFXUmxJSFJvWlNCMGFISmxjMmh2YkdRdUlFUnZiaWQwSUhWelpTQnBiaUJqYjIxaWFXNWhkR2x2YmlCM2FYUm9JSHR5YjNWdVpEb2dabUZzYzJWOUlHSmxZMkYxYzJVZ2RHaGxJR1JsWTJsdFlXd2diM1YwY0hWMElIZHBiR3dnYVc1amJIVmtaU0IwYUdVZ2NHRmtaR2x1Wnk1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzl3ZEdsdmJuTXViRzlqWVd4bElDMGdiM1psY25KcFpHVWdkR2hsSUd4dlkyRnNaU0J2WmlCMGFHbHpJRVJoZEdWVWFXMWxYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdmNIUnBiMjV6TG01MWJXSmxjbWx1WjFONWMzUmxiU0F0SUc5MlpYSnlhV1JsSUhSb1pTQnVkVzFpWlhKcGJtZFRlWE4wWlcwZ2IyWWdkR2hwY3lCRVlYUmxWR2x0WlM0Z1ZHaGxJRWx1ZEd3Z2MzbHpkR1Z0SUcxaGVTQmphRzl2YzJVZ2JtOTBJSFJ2SUdodmJtOXlJSFJvYVhOY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ym05M0tDa3VjR3gxY3loN0lHUmhlWE02SURFZ2ZTa3VkRzlTWld4aGRHbDJaU2dwSUM4dlBUNGdYQ0pwYmlBeElHUmhlVndpWEc0Z0lDQXFJRUJsZUdGdGNHeGxJRVJoZEdWVWFXMWxMbTV2ZHlncExuTmxkRXh2WTJGc1pTaGNJbVZ6WENJcExuUnZVbVZzWVhScGRtVW9leUJrWVhsek9pQXhJSDBwSUM4dlBUNGdYQ0prWlc1MGNtOGdaR1VnTVNCa1hIVXdNRVZFWVZ3aVhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG01dmR5Z3BMbkJzZFhNb2V5QmtZWGx6T2lBeElIMHBMblJ2VW1Wc1lYUnBkbVVvZXlCc2IyTmhiR1U2SUZ3aVpuSmNJaUI5S1NBdkx6MCtJRndpWkdGdWN5QXlNeUJvWlhWeVpYTmNJbHh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNXViM2NvS1M1dGFXNTFjeWg3SUdSaGVYTTZJRElnZlNrdWRHOVNaV3hoZEdsMlpTZ3BJQzh2UFQ0Z1hDSXlJR1JoZVhNZ1lXZHZYQ0pjYmlBZ0lDb2dRR1Y0WVcxd2JHVWdSR0YwWlZScGJXVXVibTkzS0NrdWJXbHVkWE1vZXlCa1lYbHpPaUF5SUgwcExuUnZVbVZzWVhScGRtVW9leUIxYm1sME9pQmNJbWh2ZFhKelhDSWdmU2tnTHk4OVBpQmNJalE0SUdodmRYSnpJR0ZuYjF3aVhHNGdJQ0FxSUVCbGVHRnRjR3hsSUVSaGRHVlVhVzFsTG01dmR5Z3BMbTFwYm5WektIc2dhRzkxY25NNklETTJJSDBwTG5SdlVtVnNZWFJwZG1Vb2V5QnliM1Z1WkRvZ1ptRnNjMlVnZlNrZ0x5ODlQaUJjSWpFdU5TQmtZWGx6SUdGbmIxd2lYRzRnSUNBcUwxeHVJQ0IwYjFKbGJHRjBhWFpsS0c5d2RHbHZibk1nUFNCN2ZTa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NXBjMVpoYkdsa0tTQnlaWFIxY200Z2JuVnNiRHRjYmlBZ0lDQmpiMjV6ZENCaVlYTmxJRDBnYjNCMGFXOXVjeTVpWVhObElIeDhJRVJoZEdWVWFXMWxMbVp5YjIxUFltcGxZM1FvZTMwc0lIc2dlbTl1WlRvZ2RHaHBjeTU2YjI1bElIMHBMRnh1SUNBZ0lDQWdjR0ZrWkdsdVp5QTlJRzl3ZEdsdmJuTXVjR0ZrWkdsdVp5QS9JQ2gwYUdseklEd2dZbUZ6WlNBL0lDMXZjSFJwYjI1ekxuQmhaR1JwYm1jZ09pQnZjSFJwYjI1ekxuQmhaR1JwYm1jcElEb2dNRHRjYmlBZ0lDQnNaWFFnZFc1cGRITWdQU0JiWENKNVpXRnljMXdpTENCY0ltMXZiblJvYzF3aUxDQmNJbVJoZVhOY0lpd2dYQ0pvYjNWeWMxd2lMQ0JjSW0xcGJuVjBaWE5jSWl3Z1hDSnpaV052Ym1SelhDSmRPMXh1SUNBZ0lHeGxkQ0IxYm1sMElEMGdiM0IwYVc5dWN5NTFibWwwTzF4dUlDQWdJR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLRzl3ZEdsdmJuTXVkVzVwZENrcElIdGNiaUFnSUNBZ0lIVnVhWFJ6SUQwZ2IzQjBhVzl1Y3k1MWJtbDBPMXh1SUNBZ0lDQWdkVzVwZENBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR1JwWm1aU1pXeGhkR2wyWlNoaVlYTmxMQ0IwYUdsekxuQnNkWE1vY0dGa1pHbHVaeWtzSUh0Y2JpQWdJQ0FnSUM0dUxtOXdkR2x2Ym5Nc1hHNGdJQ0FnSUNCdWRXMWxjbWxqT2lCY0ltRnNkMkY1YzF3aUxGeHVJQ0FnSUNBZ2RXNXBkSE1zWEc0Z0lDQWdJQ0IxYm1sMExGeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdZU0J6ZEhKcGJtY2djbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hwY3lCa1lYUmxJSEpsYkdGMGFYWmxJSFJ2SUhSdlpHRjVMQ0J6ZFdOb0lHRnpJRndpZVdWemRHVnlaR0Y1WENJZ2IzSWdYQ0p1WlhoMElHMXZiblJvWENJdVhHNGdJQ0FxSUU5dWJIa2dhVzUwWlhKdVlYUnBiMjVoYkdsNlpYTWdiMjRnY0d4aGRHWnZjbTF6SUhSb1lYUWdjM1Z3Y0c5eWRITWdTVzUwYkM1U1pXeGhkR2wyWlZScGJXVkdiM0p0WVhRdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2Y0hScGIyNXpJQzBnYjNCMGFXOXVjeUIwYUdGMElHRm1abVZqZENCMGFHVWdiM1YwY0hWMFhHNGdJQ0FxSUVCd1lYSmhiU0I3UkdGMFpWUnBiV1Y5SUZ0dmNIUnBiMjV6TG1KaGMyVTlSR0YwWlZScGJXVXVibTkzS0NsZElDMGdkR2hsSUVSaGRHVlVhVzFsSUhSdklIVnpaU0JoY3lCMGFHVWdZbUZ6YVhNZ2RHOGdkMmhwWTJnZ2RHaHBjeUIwYVcxbElHbHpJR052YlhCaGNtVmtMaUJFWldaaGRXeDBjeUIwYnlCdWIzY3VYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdmNIUnBiMjV6TG14dlkyRnNaU0F0SUc5MlpYSnlhV1JsSUhSb1pTQnNiMk5oYkdVZ2IyWWdkR2hwY3lCRVlYUmxWR2x0WlZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiM0IwYVc5dWN5NTFibWwwSUMwZ2RYTmxJR0VnYzNCbFkybG1hV01nZFc1cGREc2dhV1lnYjIxcGRIUmxaQ3dnZEdobElHMWxkR2h2WkNCM2FXeHNJSEJwWTJzZ2RHaGxJSFZ1YVhRdUlGVnpaU0J2Ym1VZ2IyWWdYQ0o1WldGeWMxd2lMQ0JjSW5GMVlYSjBaWEp6WENJc0lGd2liVzl1ZEdoelhDSXNJRndpZDJWbGEzTmNJaXdnYjNJZ1hDSmtZWGx6WENKY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzl3ZEdsdmJuTXViblZ0WW1WeWFXNW5VM2x6ZEdWdElDMGdiM1psY25KcFpHVWdkR2hsSUc1MWJXSmxjbWx1WjFONWMzUmxiU0J2WmlCMGFHbHpJRVJoZEdWVWFXMWxMaUJVYUdVZ1NXNTBiQ0J6ZVhOMFpXMGdiV0Y1SUdOb2IyOXpaU0J1YjNRZ2RHOGdhRzl1YjNJZ2RHaHBjMXh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNXViM2NvS1M1d2JIVnpLSHNnWkdGNWN6b2dNU0I5S1M1MGIxSmxiR0YwYVhabFEyRnNaVzVrWVhJb0tTQXZMejArSUZ3aWRHOXRiM0p5YjNkY0lseHVJQ0FnS2lCQVpYaGhiWEJzWlNCRVlYUmxWR2x0WlM1dWIzY29LUzV6WlhSTWIyTmhiR1VvWENKbGMxd2lLUzV3YkhWektIc2daR0Y1Y3pvZ01TQjlLUzUwYjFKbGJHRjBhWFpsS0NrZ0x5ODlQaUJjSWx3aWJXRmNkVEF3UmpGaGJtRmNJbHh1SUNBZ0tpQkFaWGhoYlhCc1pTQkVZWFJsVkdsdFpTNXViM2NvS1M1d2JIVnpLSHNnWkdGNWN6b2dNU0I5S1M1MGIxSmxiR0YwYVhabFEyRnNaVzVrWVhJb2V5QnNiMk5oYkdVNklGd2labkpjSWlCOUtTQXZMejArSUZ3aVpHVnRZV2x1WENKY2JpQWdJQ29nUUdWNFlXMXdiR1VnUkdGMFpWUnBiV1V1Ym05M0tDa3ViV2x1ZFhNb2V5QmtZWGx6T2lBeUlIMHBMblJ2VW1Wc1lYUnBkbVZEWVd4bGJtUmhjaWdwSUM4dlBUNGdYQ0l5SUdSaGVYTWdZV2R2WENKY2JpQWdJQ292WEc0Z0lIUnZVbVZzWVhScGRtVkRZV3hsYm1SaGNpaHZjSFJwYjI1eklEMGdlMzBwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11YVhOV1lXeHBaQ2tnY21WMGRYSnVJRzUxYkd3N1hHNWNiaUFnSUNCeVpYUjFjbTRnWkdsbVpsSmxiR0YwYVhabEtHOXdkR2x2Ym5NdVltRnpaU0I4ZkNCRVlYUmxWR2x0WlM1bWNtOXRUMkpxWldOMEtIdDlMQ0I3SUhwdmJtVTZJSFJvYVhNdWVtOXVaU0I5S1N3Z2RHaHBjeXdnZTF4dUlDQWdJQ0FnTGk0dWIzQjBhVzl1Y3l4Y2JpQWdJQ0FnSUc1MWJXVnlhV002SUZ3aVlYVjBiMXdpTEZ4dUlDQWdJQ0FnZFc1cGRITTZJRnRjSW5sbFlYSnpYQ0lzSUZ3aWJXOXVkR2h6WENJc0lGd2laR0Y1YzF3aVhTeGNiaUFnSUNBZ0lHTmhiR1Z1WkdGeWVUb2dkSEoxWlN4Y2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY200Z2RHaGxJRzFwYmlCdlppQnpaWFpsY21Gc0lHUmhkR1VnZEdsdFpYTmNiaUFnSUNvZ1FIQmhjbUZ0SUhzdUxpNUVZWFJsVkdsdFpYMGdaR0YwWlZScGJXVnpJQzBnZEdobElFUmhkR1ZVYVcxbGN5Qm1jbTl0SUhkb2FXTm9JSFJ2SUdOb2IyOXpaU0IwYUdVZ2JXbHVhVzExYlZ4dUlDQWdLaUJBY21WMGRYSnVJSHRFWVhSbFZHbHRaWDBnZEdobElHMXBiaUJFWVhSbFZHbHRaU3dnYjNJZ2RXNWtaV1pwYm1Wa0lHbG1JR05oYkd4bFpDQjNhWFJvSUc1dklHRnlaM1Z0Wlc1MFhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2JXbHVLQzR1TG1SaGRHVlVhVzFsY3lrZ2UxeHVJQ0FnSUdsbUlDZ2haR0YwWlZScGJXVnpMbVYyWlhKNUtFUmhkR1ZVYVcxbExtbHpSR0YwWlZScGJXVXBLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnU1c1MllXeHBaRUZ5WjNWdFpXNTBSWEp5YjNJb1hDSnRhVzRnY21WeGRXbHlaWE1nWVd4c0lHRnlaM1Z0Wlc1MGN5QmlaU0JFWVhSbFZHbHRaWE5jSWlrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmlaWE4wUW5rb1pHRjBaVlJwYldWekxDQW9hU2tnUFQ0Z2FTNTJZV3gxWlU5bUtDa3NJRTFoZEdndWJXbHVLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTRnZEdobElHMWhlQ0J2WmlCelpYWmxjbUZzSUdSaGRHVWdkR2x0WlhOY2JpQWdJQ29nUUhCaGNtRnRJSHN1TGk1RVlYUmxWR2x0WlgwZ1pHRjBaVlJwYldWeklDMGdkR2hsSUVSaGRHVlVhVzFsY3lCbWNtOXRJSGRvYVdOb0lIUnZJR05vYjI5elpTQjBhR1VnYldGNGFXMTFiVnh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVZWFJsVkdsdFpYMGdkR2hsSUcxaGVDQkVZWFJsVkdsdFpTd2diM0lnZFc1a1pXWnBibVZrSUdsbUlHTmhiR3hsWkNCM2FYUm9JRzV2SUdGeVozVnRaVzUwWEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nYldGNEtDNHVMbVJoZEdWVWFXMWxjeWtnZTF4dUlDQWdJR2xtSUNnaFpHRjBaVlJwYldWekxtVjJaWEo1S0VSaGRHVlVhVzFsTG1selJHRjBaVlJwYldVcEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dTVzUyWVd4cFpFRnlaM1Z0Wlc1MFJYSnliM0lvWENKdFlYZ2djbVZ4ZFdseVpYTWdZV3hzSUdGeVozVnRaVzUwY3lCaVpTQkVZWFJsVkdsdFpYTmNJaWs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCaVpYTjBRbmtvWkdGMFpWUnBiV1Z6TENBb2FTa2dQVDRnYVM1MllXeDFaVTltS0Nrc0lFMWhkR2d1YldGNEtUdGNiaUFnZlZ4dVhHNGdJQzh2SUUxSlUwTmNibHh1SUNBdktpcGNiaUFnSUNvZ1JYaHdiR0ZwYmlCb2IzY2dZU0J6ZEhKcGJtY2dkMjkxYkdRZ1ltVWdjR0Z5YzJWa0lHSjVJR1p5YjIxR2IzSnRZWFFvS1Z4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdkR1Y0ZENBdElIUm9aU0J6ZEhKcGJtY2dkRzhnY0dGeWMyVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdadGRDQXRJSFJvWlNCbWIzSnRZWFFnZEdobElITjBjbWx1WnlCcGN5QmxlSEJsWTNSbFpDQjBieUJpWlNCcGJpQW9jMlZsSUdSbGMyTnlhWEIwYVc5dUtWeHVJQ0FnS2lCQWNHRnlZVzBnZTA5aWFtVmpkSDBnYjNCMGFXOXVjeUF0SUc5d2RHbHZibk1nZEdGclpXNGdZbmtnWm5KdmJVWnZjbTFoZENncFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTA5aWFtVmpkSDFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJtY205dFJtOXliV0YwUlhod2JHRnBiaWgwWlhoMExDQm1iWFFzSUc5d2RHbHZibk1nUFNCN2ZTa2dlMXh1SUNBZ0lHTnZibk4wSUhzZ2JHOWpZV3hsSUQwZ2JuVnNiQ3dnYm5WdFltVnlhVzVuVTNsemRHVnRJRDBnYm5Wc2JDQjlJRDBnYjNCMGFXOXVjeXhjYmlBZ0lDQWdJR3h2WTJGc1pWUnZWWE5sSUQwZ1RHOWpZV3hsTG1aeWIyMVBjSFJ6S0h0Y2JpQWdJQ0FnSUNBZ2JHOWpZV3hsTEZ4dUlDQWdJQ0FnSUNCdWRXMWlaWEpwYm1kVGVYTjBaVzBzWEc0Z0lDQWdJQ0FnSUdSbFptRjFiSFJVYjBWT09pQjBjblZsTEZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnY21WMGRYSnVJR1Y0Y0d4aGFXNUdjbTl0Vkc5clpXNXpLR3h2WTJGc1pWUnZWWE5sTENCMFpYaDBMQ0JtYlhRcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhCeVpXTmhkR1ZrSUhWelpTQm1jbTl0Um05eWJXRjBSWGh3YkdGcGJpQnBibk4wWldGa1hHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1puSnZiVk4wY21sdVowVjRjR3hoYVc0b2RHVjRkQ3dnWm0xMExDQnZjSFJwYjI1eklEMGdlMzBwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdSR0YwWlZScGJXVXVabkp2YlVadmNtMWhkRVY0Y0d4aGFXNG9kR1Y0ZEN3Z1ptMTBMQ0J2Y0hScGIyNXpLVHRjYmlBZ2ZWeHVYRzRnSUM4dklFWlBVazFCVkNCUVVrVlRSVlJUWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTjBiMHh2WTJGc1pWTjBjbWx1WjMwZ1ptOXliV0YwSUd4cGEyVWdNVEF2TVRRdk1UazRNMXh1SUNBZ0tpQkFkSGx3WlNCN1QySnFaV04wZlZ4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdkbGRDQkVRVlJGWDFOSVQxSlVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQkdiM0p0WVhSekxrUkJWRVZmVTBoUFVsUTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nZTBCc2FXNXJJRVJoZEdWVWFXMWxJM1J2VEc5allXeGxVM1J5YVc1bmZTQm1iM0p0WVhRZ2JHbHJaU0FuVDJOMElERTBMQ0F4T1RnekoxeHVJQ0FnS2lCQWRIbHdaU0I3VDJKcVpXTjBmVnh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJR2RsZENCRVFWUkZYMDFGUkNncElIdGNiaUFnSUNCeVpYUjFjbTRnUm05eWJXRjBjeTVFUVZSRlgwMUZSRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCN1FHeHBibXNnUkdGMFpWUnBiV1VqZEc5TWIyTmhiR1ZUZEhKcGJtZDlJR1p2Y20xaGRDQnNhV3RsSUNkR2Nta3NJRTlqZENBeE5Dd2dNVGs0TXlkY2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5Qm5aWFFnUkVGVVJWOU5SVVJmVjBsVVNGOVhSVVZMUkVGWktDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCR2IzSnRZWFJ6TGtSQlZFVmZUVVZFWDFkSlZFaGZWMFZGUzBSQldUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUI3UUd4cGJtc2dSR0YwWlZScGJXVWpkRzlNYjJOaGJHVlRkSEpwYm1kOUlHWnZjbTFoZENCc2FXdGxJQ2RQWTNSdlltVnlJREUwTENBeE9UZ3pKMXh1SUNBZ0tpQkFkSGx3WlNCN1QySnFaV04wZlZ4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdkbGRDQkVRVlJGWDBaVlRFd29LU0I3WEc0Z0lDQWdjbVYwZFhKdUlFWnZjbTFoZEhNdVJFRlVSVjlHVlV4TU8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTjBiMHh2WTJGc1pWTjBjbWx1WjMwZ1ptOXliV0YwSUd4cGEyVWdKMVIxWlhOa1lYa3NJRTlqZEc5aVpYSWdNVFFzSURFNU9ETW5YRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWjJWMElFUkJWRVZmU0ZWSFJTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z1JtOXliV0YwY3k1RVFWUkZYMGhWUjBVN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dlMEJzYVc1cklFUmhkR1ZVYVcxbEkzUnZURzlqWVd4bFUzUnlhVzVuZlNCbWIzSnRZWFFnYkdsclpTQW5NRGs2TXpBZ1FVMG5MaUJQYm14NUlERXlMV2h2ZFhJZ2FXWWdkR2hsSUd4dlkyRnNaU0JwY3k1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5Qm5aWFFnVkVsTlJWOVRTVTFRVEVVb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUVadmNtMWhkSE11VkVsTlJWOVRTVTFRVEVVN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dlMEJzYVc1cklFUmhkR1ZVYVcxbEkzUnZURzlqWVd4bFUzUnlhVzVuZlNCbWIzSnRZWFFnYkdsclpTQW5NRGs2TXpBNk1qTWdRVTBuTGlCUGJteDVJREV5TFdodmRYSWdhV1lnZEdobElHeHZZMkZzWlNCcGN5NWNiaUFnSUNvZ1FIUjVjR1VnZTA5aWFtVmpkSDFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhRZ1ZFbE5SVjlYU1ZSSVgxTkZRMDlPUkZNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUVadmNtMWhkSE11VkVsTlJWOVhTVlJJWDFORlEwOU9SRk03WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ2UwQnNhVzVySUVSaGRHVlVhVzFsSTNSdlRHOWpZV3hsVTNSeWFXNW5mU0JtYjNKdFlYUWdiR2xyWlNBbk1EazZNekE2TWpNZ1FVMGdSVVJVSnk0Z1QyNXNlU0F4TWkxb2IzVnlJR2xtSUhSb1pTQnNiMk5oYkdVZ2FYTXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWjJWMElGUkpUVVZmVjBsVVNGOVRTRTlTVkY5UFJrWlRSVlFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRVp2Y20xaGRITXVWRWxOUlY5WFNWUklYMU5JVDFKVVgwOUdSbE5GVkR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQjdRR3hwYm1zZ1JHRjBaVlJwYldVamRHOU1iMk5oYkdWVGRISnBibWQ5SUdadmNtMWhkQ0JzYVd0bElDY3dPVG96TURveU15QkJUU0JGWVhOMFpYSnVJRVJoZVd4cFoyaDBJRlJwYldVbkxpQlBibXg1SURFeUxXaHZkWElnYVdZZ2RHaGxJR3h2WTJGc1pTQnBjeTVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCblpYUWdWRWxOUlY5WFNWUklYMHhQVGtkZlQwWkdVMFZVS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJHYjNKdFlYUnpMbFJKVFVWZlYwbFVTRjlNVDA1SFgwOUdSbE5GVkR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQjdRR3hwYm1zZ1JHRjBaVlJwYldVamRHOU1iMk5oYkdWVGRISnBibWQ5SUdadmNtMWhkQ0JzYVd0bElDY3dPVG96TUNjc0lHRnNkMkY1Y3lBeU5DMW9iM1Z5TGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHZGxkQ0JVU1UxRlh6STBYMU5KVFZCTVJTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z1JtOXliV0YwY3k1VVNVMUZYekkwWDFOSlRWQk1SVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCN1FHeHBibXNnUkdGMFpWUnBiV1VqZEc5TWIyTmhiR1ZUZEhKcGJtZDlJR1p2Y20xaGRDQnNhV3RsSUNjd09Ub3pNRG95TXljc0lHRnNkMkY1Y3lBeU5DMW9iM1Z5TGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHZGxkQ0JVU1UxRlh6STBYMWRKVkVoZlUwVkRUMDVFVXlncElIdGNiaUFnSUNCeVpYUjFjbTRnUm05eWJXRjBjeTVVU1UxRlh6STBYMWRKVkVoZlUwVkRUMDVFVXp0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQjdRR3hwYm1zZ1JHRjBaVlJwYldVamRHOU1iMk5oYkdWVGRISnBibWQ5SUdadmNtMWhkQ0JzYVd0bElDY3dPVG96TURveU15QkZSRlFuTENCaGJIZGhlWE1nTWpRdGFHOTFjaTVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCblpYUWdWRWxOUlY4eU5GOVhTVlJJWDFOSVQxSlVYMDlHUmxORlZDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z1JtOXliV0YwY3k1VVNVMUZYekkwWDFkSlZFaGZVMGhQVWxSZlQwWkdVMFZVTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlIdEFiR2x1YXlCRVlYUmxWR2x0WlNOMGIweHZZMkZzWlZOMGNtbHVaMzBnWm05eWJXRjBJR3hwYTJVZ0p6QTVPak13T2pJeklFVmhjM1JsY200Z1JHRjViR2xuYUhRZ1ZHbHRaU2NzSUdGc2QyRjVjeUF5TkMxb2IzVnlMbHh1SUNBZ0tpQkFkSGx3WlNCN1QySnFaV04wZlZ4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdkbGRDQlVTVTFGWHpJMFgxZEpWRWhmVEU5T1IxOVBSa1pUUlZRb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUVadmNtMWhkSE11VkVsTlJWOHlORjlYU1ZSSVgweFBUa2RmVDBaR1UwVlVPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUh0QWJHbHVheUJFWVhSbFZHbHRaU04wYjB4dlkyRnNaVk4wY21sdVozMGdabTl5YldGMElHeHBhMlVnSnpFd0x6RTBMekU1T0RNc0lEazZNekFnUVUwbkxpQlBibXg1SURFeUxXaHZkWElnYVdZZ2RHaGxJR3h2WTJGc1pTQnBjeTVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCblpYUWdSRUZVUlZSSlRVVmZVMGhQVWxRb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUVadmNtMWhkSE11UkVGVVJWUkpUVVZmVTBoUFVsUTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nZTBCc2FXNXJJRVJoZEdWVWFXMWxJM1J2VEc5allXeGxVM1J5YVc1bmZTQm1iM0p0WVhRZ2JHbHJaU0FuTVRBdk1UUXZNVGs0TXl3Z09Ub3pNRG96TXlCQlRTY3VJRTl1YkhrZ01USXRhRzkxY2lCcFppQjBhR1VnYkc5allXeGxJR2x6TGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHZGxkQ0JFUVZSRlZFbE5SVjlUU0U5U1ZGOVhTVlJJWDFORlEwOU9SRk1vS1NCN1hHNGdJQ0FnY21WMGRYSnVJRVp2Y20xaGRITXVSRUZVUlZSSlRVVmZVMGhQVWxSZlYwbFVTRjlUUlVOUFRrUlRPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUh0QWJHbHVheUJFWVhSbFZHbHRaU04wYjB4dlkyRnNaVk4wY21sdVozMGdabTl5YldGMElHeHBhMlVnSjA5amRDQXhOQ3dnTVRrNE15d2dPVG96TUNCQlRTY3VJRTl1YkhrZ01USXRhRzkxY2lCcFppQjBhR1VnYkc5allXeGxJR2x6TGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHZGxkQ0JFUVZSRlZFbE5SVjlOUlVRb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUVadmNtMWhkSE11UkVGVVJWUkpUVVZmVFVWRU8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSHRBYkdsdWF5QkVZWFJsVkdsdFpTTjBiMHh2WTJGc1pWTjBjbWx1WjMwZ1ptOXliV0YwSUd4cGEyVWdKMDlqZENBeE5Dd2dNVGs0TXl3Z09Ub3pNRG96TXlCQlRTY3VJRTl1YkhrZ01USXRhRzkxY2lCcFppQjBhR1VnYkc5allXeGxJR2x6TGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHZGxkQ0JFUVZSRlZFbE5SVjlOUlVSZlYwbFVTRjlUUlVOUFRrUlRLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQkdiM0p0WVhSekxrUkJWRVZVU1UxRlgwMUZSRjlYU1ZSSVgxTkZRMDlPUkZNN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dlMEJzYVc1cklFUmhkR1ZVYVcxbEkzUnZURzlqWVd4bFUzUnlhVzVuZlNCbWIzSnRZWFFnYkdsclpTQW5SbkpwTENBeE5DQlBZM1FnTVRrNE15d2dPVG96TUNCQlRTY3VJRTl1YkhrZ01USXRhRzkxY2lCcFppQjBhR1VnYkc5allXeGxJR2x6TGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHZGxkQ0JFUVZSRlZFbE5SVjlOUlVSZlYwbFVTRjlYUlVWTFJFRlpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQkdiM0p0WVhSekxrUkJWRVZVU1UxRlgwMUZSRjlYU1ZSSVgxZEZSVXRFUVZrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dlMEJzYVc1cklFUmhkR1ZVYVcxbEkzUnZURzlqWVd4bFUzUnlhVzVuZlNCbWIzSnRZWFFnYkdsclpTQW5UMk4wYjJKbGNpQXhOQ3dnTVRrNE15d2dPVG96TUNCQlRTQkZSRlFuTGlCUGJteDVJREV5TFdodmRYSWdhV1lnZEdobElHeHZZMkZzWlNCcGN5NWNiaUFnSUNvZ1FIUjVjR1VnZTA5aWFtVmpkSDFjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhRZ1JFRlVSVlJKVFVWZlJsVk1UQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdSbTl5YldGMGN5NUVRVlJGVkVsTlJWOUdWVXhNTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlIdEFiR2x1YXlCRVlYUmxWR2x0WlNOMGIweHZZMkZzWlZOMGNtbHVaMzBnWm05eWJXRjBJR3hwYTJVZ0owOWpkRzlpWlhJZ01UUXNJREU1T0RNc0lEazZNekE2TXpNZ1FVMGdSVVJVSnk0Z1QyNXNlU0F4TWkxb2IzVnlJR2xtSUhSb1pTQnNiMk5oYkdVZ2FYTXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWjJWMElFUkJWRVZVU1UxRlgwWlZURXhmVjBsVVNGOVRSVU5QVGtSVEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCR2IzSnRZWFJ6TGtSQlZFVlVTVTFGWDBaVlRFeGZWMGxVU0Y5VFJVTlBUa1JUTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlIdEFiR2x1YXlCRVlYUmxWR2x0WlNOMGIweHZZMkZzWlZOMGNtbHVaMzBnWm05eWJXRjBJR3hwYTJVZ0owWnlhV1JoZVN3Z1QyTjBiMkpsY2lBeE5Dd2dNVGs0TXl3Z09Ub3pNQ0JCVFNCRllYTjBaWEp1SUVSaGVXeHBaMmgwSUZScGJXVW5MaUJQYm14NUlERXlMV2h2ZFhJZ2FXWWdkR2hsSUd4dlkyRnNaU0JwY3k1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5Qm5aWFFnUkVGVVJWUkpUVVZmU0ZWSFJTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z1JtOXliV0YwY3k1RVFWUkZWRWxOUlY5SVZVZEZPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUh0QWJHbHVheUJFWVhSbFZHbHRaU04wYjB4dlkyRnNaVk4wY21sdVozMGdabTl5YldGMElHeHBhMlVnSjBaeWFXUmhlU3dnVDJOMGIySmxjaUF4TkN3Z01UazRNeXdnT1Rvek1Eb3pNeUJCVFNCRllYTjBaWEp1SUVSaGVXeHBaMmgwSUZScGJXVW5MaUJQYm14NUlERXlMV2h2ZFhJZ2FXWWdkR2hsSUd4dlkyRnNaU0JwY3k1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5Qm5aWFFnUkVGVVJWUkpUVVZmU0ZWSFJWOVhTVlJJWDFORlEwOU9SRk1vS1NCN1hHNGdJQ0FnY21WMGRYSnVJRVp2Y20xaGRITXVSRUZVUlZSSlRVVmZTRlZIUlY5WFNWUklYMU5GUTA5T1JGTTdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1puSnBaVzVrYkhsRVlYUmxWR2x0WlNoa1lYUmxWR2x0WldsemFDa2dlMXh1SUNCcFppQW9SR0YwWlZScGJXVXVhWE5FWVhSbFZHbHRaU2hrWVhSbFZHbHRaV2x6YUNrcElIdGNiaUFnSUNCeVpYUjFjbTRnWkdGMFpWUnBiV1ZwYzJnN1hHNGdJSDBnWld4elpTQnBaaUFvWkdGMFpWUnBiV1ZwYzJnZ0ppWWdaR0YwWlZScGJXVnBjMmd1ZG1Gc2RXVlBaaUFtSmlCcGMwNTFiV0psY2loa1lYUmxWR2x0WldsemFDNTJZV3gxWlU5bUtDa3BLU0I3WEc0Z0lDQWdjbVYwZFhKdUlFUmhkR1ZVYVcxbExtWnliMjFLVTBSaGRHVW9aR0YwWlZScGJXVnBjMmdwTzF4dUlDQjlJR1ZzYzJVZ2FXWWdLR1JoZEdWVWFXMWxhWE5vSUNZbUlIUjVjR1Z2WmlCa1lYUmxWR2x0WldsemFDQTlQVDBnWENKdlltcGxZM1JjSWlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJFWVhSbFZHbHRaUzVtY205dFQySnFaV04wS0dSaGRHVlVhVzFsYVhOb0tUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dTVzUyWVd4cFpFRnlaM1Z0Wlc1MFJYSnliM0lvWEc0Z0lDQWdJQ0JnVlc1cmJtOTNiaUJrWVhSbGRHbHRaU0JoY21kMWJXVnVkRG9nSkh0a1lYUmxWR2x0WldsemFIMHNJRzltSUhSNWNHVWdKSHQwZVhCbGIyWWdaR0YwWlZScGJXVnBjMmg5WUZ4dUlDQWdJQ2s3WEc0Z0lIMWNibjFjYmlJc0lDSnBiWEJ2Y25RZ2V5QkVZWFJsVkdsdFpTd2dSSFZ5WVhScGIyNGdmU0JtY205dElGd2liSFY0YjI1Y0lqdGNibWx0Y0c5eWRDQXFJR0Z6SUZBZ1puSnZiU0JjSW5CaGNuTnBiVzF2Ymx3aU8xeHVhVzF3YjNKMElHVnRiMnBwVW1WblpYZ2dabkp2YlNCY0ltVnRiMnBwTFhKbFoyVjRYQ0k3WEc1cGJYQnZjblFnZXlCTWFXNXJJSDBnWm5KdmJTQmNJbVY0Y0hKbGMzTnBiMjR2YkdsdWExd2lPMXh1WEc0dktpb2dWR1Z6ZEMxbGJuWnBjbTl1YldWdWRDMW1jbWxsYm1Sc2VTQm1kVzVqZEdsdmJpQjNhR2xqYUNCbVpYUmphR1Z6SUhSb1pTQmpkWEp5Wlc1MElITjVjM1JsYlNCc2IyTmhiR1V1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kzVnljbVZ1ZEV4dlkyRnNaU2dwT2lCemRISnBibWNnZTF4dUlDQWdJR2xtSUNoMGVYQmxiMllnZDJsdVpHOTNJRDA5UFNCY0luVnVaR1ZtYVc1bFpGd2lLU0J5WlhSMWNtNGdYQ0psYmkxVlUxd2lPMXh1SUNBZ0lISmxkSFZ5YmlCM2FXNWtiM2N1Ym1GMmFXZGhkRzl5TG14aGJtZDFZV2RsTzF4dWZWeHVYRzR2THlCRVlYUmxMMVJwYldVZ1VtVnVaR1Z5YVc1blhHNWNiaThxS2lCT2IzSnRZV3hwZW1VZ1lTQmtkWEpoZEdsdmJpQjBieUJoYkd3Z2IyWWdkR2hsSUhCeWIzQmxjaUIxYm1sMGN5NGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNKdFlXeHBlbVZFZFhKaGRHbHZiaWhrZFhJNklFUjFjbUYwYVc5dUtTQjdYRzRnSUNBZ2FXWWdLR1IxY2lBOVBUMGdkVzVrWldacGJtVmtJSHg4SUdSMWNpQTlQVDBnYm5Wc2JDa2djbVYwZFhKdUlHUjFjanRjYmx4dUlDQWdJSEpsZEhWeWJpQmtkWEl1YzJocFpuUlVieWhjSW5sbFlYSnpYQ0lzSUZ3aWJXOXVkR2h6WENJc0lGd2lkMlZsYTNOY0lpd2dYQ0prWVhselhDSXNJRndpYUc5MWNuTmNJaXdnWENKdGFXNTFkR1Z6WENJc0lGd2ljMlZqYjI1a2Mxd2lMQ0JjSW0xcGJHeHBjMlZqYjI1a2Mxd2lLUzV1YjNKdFlXeHBlbVVvS1R0Y2JuMWNibHh1THlvcUlGTjBjbWx3SUhSb1pTQjBhVzFsSUdOdmJYQnZibVZ1ZEhNZ2IyWWdZU0JrWVhSbElIUnBiV1VnYjJKcVpXTjBMaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhOMGNtbHdWR2x0WlNoa2REb2dSR0YwWlZScGJXVXBPaUJFWVhSbFZHbHRaU0I3WEc0Z0lDQWdhV1lnS0dSMElEMDlQU0J1ZFd4c0lIeDhJR1IwSUQwOVBTQjFibVJsWm1sdVpXUXBJSEpsZEhWeWJpQmtkRHRjYmx4dUlDQWdJSEpsZEhWeWJpQkVZWFJsVkdsdFpTNW1jbTl0VDJKcVpXTjBLSHRjYmlBZ0lDQWdJQ0FnZVdWaGNqb2daSFF1ZVdWaGNpeGNiaUFnSUNBZ0lDQWdiVzl1ZEdnNklHUjBMbTF2Ym5Sb0xGeHVJQ0FnSUNBZ0lDQmtZWGs2SUdSMExtUmhlU3hjYmlBZ0lDQjlLVHRjYm4xY2JseHVMeW9xSUZSeWVTQjBieUJsZUhSeVlXTjBJR0VnV1ZsWldVMU5SRVFnWkdGMFpTQm1jbTl0SUdFZ2MzUnlhVzVuTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRkSEpoWTNSRVlYUmxLSE4wY2pvZ2MzUnlhVzVuS1RvZ1JHRjBaVlJwYldVZ2ZDQjFibVJsWm1sdVpXUWdlMXh1SUNBZ0lHeGxkQ0JrWVhSbFRXRjBZMmdnUFNBdktGeGNaSHMwZlNrdEtGeGNaSHN5ZlNrdEtGeGNaSHN5ZlNrdkxtVjRaV01vYzNSeUtUdGNiaUFnSUNCcFppQW9JV1JoZEdWTllYUmphQ2tnWkdGMFpVMWhkR05vSUQwZ0x5aGNYR1I3TkgwcEtGeGNaSHN5ZlNrb1hGeGtleko5S1M4dVpYaGxZeWh6ZEhJcE8xeHVJQ0FnSUdsbUlDaGtZWFJsVFdGMFkyZ3BJSHRjYmlBZ0lDQWdJQ0FnYkdWMElIbGxZWElnUFNCT2RXMWlaWEl1Y0dGeWMyVkpiblFvWkdGMFpVMWhkR05vV3pGZEtUdGNiaUFnSUNBZ0lDQWdiR1YwSUcxdmJuUm9JRDBnVG5WdFltVnlMbkJoY25ObFNXNTBLR1JoZEdWTllYUmphRnN5WFNrN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JrWVhrZ1BTQk9kVzFpWlhJdWNHRnljMlZKYm5Rb1pHRjBaVTFoZEdOb1d6TmRLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRVJoZEdWVWFXMWxMbVp5YjIxUFltcGxZM1FvZXlCNVpXRnlMQ0J0YjI1MGFDd2daR0Y1SUgwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc1OVhHNWNiaThxS2lCU1pXNWtaWElnWVNCRVlYUmxWR2x0WlNCcGJpQmhJRzFwYm1sdFlXd2dabTl5YldGMElIUnZJSE5oZG1VZ2MzQmhZMlV1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NtVnVaR1Z5VFdsdWFXMWhiRVJoZEdVb2RHbHRaVG9nUkdGMFpWUnBiV1VzSUdSaGRHVkdiM0p0WVhRNklITjBjbWx1Wnl3Z1pHRjBaVlJwYldWR2IzSnRZWFE2SUhOMGNtbHVaeXdnYkc5allXeGxQem9nYzNSeWFXNW5LVG9nYzNSeWFXNW5JSHRjYmlBZ0lDQXZMeUJKWmlCMGFHVnlaU0JwY3lCdWJ5QnlaV3hsZG1GdWRDQjBhVzFsSUhOd1pXTnBabWxsWkN3Z1ptRnNiQ0JpWVdOcklIUnZJR3AxYzNRZ2NtVnVaR1Z5YVc1bklIUm9aU0JrWVhSbExseHVJQ0FnSUdsbUlDaDBhVzFsTG5ObFkyOXVaQ0E5UFNBd0lDWW1JSFJwYldVdWJXbHVkWFJsSUQwOUlEQWdKaVlnZEdsdFpTNW9iM1Z5SUQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJwYldVdWRHOU1iMk5oYkNncExuUnZSbTl5YldGMEtHUmhkR1ZHYjNKdFlYUXNJSHNnYkc5allXeGxJSDBwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQjBhVzFsTG5SdlRHOWpZV3dvS1M1MGIwWnZjbTFoZENoa1lYUmxWR2x0WlVadmNtMWhkQ3dnZXlCc2IyTmhiR1VnZlNrN1hHNTlYRzVjYmk4cUtpQlNaVzVrWlhJZ1lTQmtkWEpoZEdsdmJpQnBiaUJoSUcxcGJtbHRZV3dnWm05eWJXRjBJSFJ2SUhOaGRtVWdjM0JoWTJVdUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZ1WkdWeVRXbHVhVzFoYkVSMWNtRjBhVzl1S0dSMWNqb2dSSFZ5WVhScGIyNHBPaUJ6ZEhKcGJtY2dlMXh1SUNBZ0lHUjFjaUE5SUc1dmNtMWhiR2w2WlVSMWNtRjBhVzl1S0dSMWNpazdYRzVjYmlBZ0lDQXZMeUJVVDBSUE9pQk1kWGh2YmlCa2IyVnpJRzV2ZENCb1lYWmxJRzExYkhScExXeHBibWQxWVd3dmJHOWpZV3hsTFdGM1lYSmxJR1IxY21GMGFXOXVJSEpsYm1SbGNtbHVaeTVjYmlBZ0lDQnNaWFFnY21WemRXeDBJRDBnWENKY0lqdGNiaUFnSUNCcFppQW9aSFZ5TG5sbFlYSnpLU0J5WlhOMWJIUWdLejBnWUNSN1pIVnlMbmxsWVhKemZTQjVaV0Z5Y3l3Z1lEdGNiaUFnSUNCcFppQW9aSFZ5TG0xdmJuUm9jeWtnY21WemRXeDBJQ3M5SUdBa2UyUjFjaTV0YjI1MGFITjlJRzF2Ym5Sb2N5d2dZRHRjYmlBZ0lDQnBaaUFvWkhWeUxuZGxaV3R6S1NCeVpYTjFiSFFnS3owZ1lDUjdaSFZ5TG5kbFpXdHpmU0IzWldWcmN5d2dZRHRjYmlBZ0lDQnBaaUFvWkhWeUxtUmhlWE1wSUhKbGMzVnNkQ0FyUFNCZ0pIdGtkWEl1WkdGNWMzMGdaR0Y1Y3l3Z1lEdGNiaUFnSUNCcFppQW9aSFZ5TG1odmRYSnpLU0J5WlhOMWJIUWdLejBnWUNSN1pIVnlMbWh2ZFhKemZTQm9iM1Z5Y3l3Z1lEdGNiaUFnSUNCcFppQW9aSFZ5TG0xcGJuVjBaWE1wSUhKbGMzVnNkQ0FyUFNCZ0pIdGtkWEl1YldsdWRYUmxjMzBnYldsdWRYUmxjeXdnWUR0Y2JpQWdJQ0JwWmlBb1pIVnlMbk5sWTI5dVpITXBJSEpsYzNWc2RDQXJQU0JnSkh0TllYUm9Mbkp2ZFc1a0tHUjFjaTV6WldOdmJtUnpLWDBnYzJWamIyNWtjeXdnWUR0Y2JpQWdJQ0JwWmlBb1pIVnlMbTFwYkd4cGMyVmpiMjVrY3lrZ2NtVnpkV3gwSUNzOUlHQWtlMDFoZEdndWNtOTFibVFvWkhWeUxtMXBiR3hwYzJWamIyNWtjeWw5SUcxekxDQmdPMXh1WEc0Z0lDQWdhV1lnS0hKbGMzVnNkQzVsYm1SelYybDBhQ2hjSWl3Z1hDSXBLU0J5WlhOMWJIUWdQU0J5WlhOMWJIUXVjM1ZpYzNSeWFXNW5LREFzSUhKbGMzVnNkQzVzWlc1bmRHZ2dMU0F5S1R0Y2JpQWdJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVmVnh1WEc0dkx5QlFZWFJvSUhWMGFXeHBkR2xsY3k1Y2JseHVMeW9xSUVkbGRDQjBhR1VnWm05c1pHVnlJR052Ym5SaGFXNXBibWNnZEdobElHZHBkbVZ1SUhCaGRHZ2dLR2t1WlM0c0lHeHBhMlVnWTI5dGNIVjBhVzVuSUNkd1lYUm9MeTR1SnlrdUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaMlYwVUdGeVpXNTBSbTlzWkdWeUtIQmhkR2c2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdjbVYwZFhKdUlIQmhkR2d1YzNCc2FYUW9YQ0l2WENJcExuTnNhV05sS0RBc0lDMHhLUzVxYjJsdUtGd2lMMXdpS1R0Y2JuMWNibHh1THlvcUlFZGxkQ0IwYUdVZ1ptbHNaU0J1WVcxbElHWnZjaUIwYUdVZ1ptbHNaU0J5WldabGNtVnVZMlZrSUdsdUlIUm9aU0JuYVhabGJpQndZWFJvTENCaWVTQnpkSEpwY0hCcGJtY2dkR2hsSUhCaGNtVnVkQ0JtYjJ4a1pYSnpMaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFWnBiR1ZPWVcxbEtIQmhkR2c2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdjbVYwZFhKdUlIQmhkR2d1YVc1amJIVmtaWE1vWENJdlhDSXBJRDhnY0dGMGFDNXpkV0p6ZEhKcGJtY29jR0YwYUM1c1lYTjBTVzVrWlhoUFppaGNJaTljSWlrZ0t5QXhLU0E2SUhCaGRHZzdYRzU5WEc1Y2JpOHFLaUJIWlhRZ2RHaGxJRndpZEdsMGJHVmNJaUJtYjNJZ1lTQm1hV3hsTENCaWVTQnpkSEpwY0hCcGJtY2diM1JvWlhJZ2NHRnlkSE1nYjJZZ2RHaGxJSEJoZEdnZ1lYTWdkMlZzYkNCaGN5QjBhR1VnWlhoMFpXNXphVzl1TGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRVpwYkdWVWFYUnNaU2h3WVhSb09pQnpkSEpwYm1jcE9pQnpkSEpwYm1jZ2UxeHVJQ0FnSUdsbUlDaHdZWFJvTG1sdVkyeDFaR1Z6S0Z3aUwxd2lLU2tnY0dGMGFDQTlJSEJoZEdndWMzVmljM1J5YVc1bktIQmhkR2d1YkdGemRFbHVaR1Y0VDJZb1hDSXZYQ0lwSUNzZ01TazdYRzRnSUNBZ2FXWWdLSEJoZEdndVpXNWtjMWRwZEdnb1hDSXViV1JjSWlrcElIQmhkR2dnUFNCd1lYUm9Mbk4xWW5OMGNtbHVaeWd3TENCd1lYUm9MbXhsYm1kMGFDQXRJRE1wTzF4dUlDQWdJSEpsZEhWeWJpQndZWFJvTzF4dWZWeHVYRzR2S2lvZ1IyVjBJSFJvWlNCbGVIUmxibk5wYjI0Z2IyWWdZU0JtYVd4bElHWnliMjBnZEdobElHWnBiR1VnY0dGMGFDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJuWlhSRmVIUmxibk5wYjI0b2NHRjBhRG9nYzNSeWFXNW5LVG9nYzNSeWFXNW5JSHRjYmlBZ0lDQnBaaUFvSVhCaGRHZ3VhVzVqYkhWa1pYTW9YQ0l1WENJcEtTQnlaWFIxY200Z1hDSmNJanRjYmlBZ0lDQnlaWFIxY200Z2NHRjBhQzV6ZFdKemRISnBibWNvY0dGMGFDNXNZWE4wU1c1a1pYaFBaaWhjSWk1Y0lpa2dLeUF4S1R0Y2JuMWNibHh1THk4Z1ZHRm5JR1Y0ZEhKaFkzUnBiMjR1WEc1Y2JpOHFLaUJRWVhKelpTQmhiR3dnYzNWaWRHRm5jeUJ2ZFhRZ2IyWWdkR2hsSUdkcGRtVnVJSFJoWnk0Z1NTNWxMaXdnSTJobGJHeHZMMmt2WVcwZ2QyOTFiR1FnZVdsbGJHUWdXeU5vWld4c2J5OXBMMkZ0TENBamFHVnNiRzh2YVN3Z0kyaGxiR3h2WFM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSFJ5WVdOMFUzVmlkR0ZuY3loMFlXZHpPaUJ6ZEhKcGJtY2dmQ0JKZEdWeVlXSnNaVHh6ZEhKcGJtYytLVG9nYzNSeWFXNW5XMTBnZTF4dUlDQWdJR3hsZENCeVpYTjFiSFFnUFNCYlhUdGNiaUFnSUNCbWIzSWdLR3hsZENCMFlXY2diMllnZEhsd1pXOW1JSFJoWjNNZ1BUMDlJRndpYzNSeWFXNW5YQ0lnUHlCYmRHRm5jMTBnT2lCMFlXZHpLU0I3WEc0Z0lDQWdJQ0FnSUhKbGMzVnNkQzV3ZFhOb0tIUmhaeWs3WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2gwWVdjdWFXNWpiSFZrWlhNb1hDSXZYQ0lwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwWVdjZ1BTQjBZV2N1YzNWaWMzUnlhVzVuS0RBc0lIUmhaeTVzWVhOMFNXNWtaWGhQWmloY0lpOWNJaWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZ6ZFd4MExuQjFjMmdvZEdGbktUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCeVpYTjFiSFE3WEc1OVhHNWNiaThxS2lCVGNHeHBkQ0JsWVdOb0lHSnNiMk5ySUdGdVpDQnpaV04wYVc5dUlHeHBibXNnYVc1MGJ5QjBhR1VnYjNKcFoybHVZV3dnYkdsdWF5QmhibVFnWVNCamIzSnlaWE53YjI1a2FXNW5JR1pwYkdVZ2JHbHVheTRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbGVIUnlZV04wUm1sc1pVeHBibXR6S0dWc2FXNXJjem9nVEdsdWExdGRLVG9nVEdsdWExdGRJSHRjYmlBZ0lDQmpiMjV6ZENCeVpYTjFiSFE2SUV4cGJtdGJYU0E5SUZ0ZE8xeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2JHbHVheUJ2WmlCbGJHbHVhM01wSUh0Y2JpQWdJQ0FnSUNBZ2NtVnpkV3gwTG5CMWMyZ29iR2x1YXlrN1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1ptbHNaVXhwYm1zZ1BTQnNhVzVyTG5SdlJtbHNaU2dwTzF4dUlDQWdJQ0FnSUNCcFppQW9iR2x1YXk1MGVYQmxJQ0U5SUZ3aVptbHNaVndpSUNZbUlDRnlaWE4xYkhRdVptbHVaQ2dvWlhocGMzUnBibWNwSUQwK0lHVjRhWE4wYVc1bkxtVnhkV0ZzY3lobWFXeGxUR2x1YXlrcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYTjFiSFF1Y0hWemFDaG1hV3hsVEdsdWF5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dWZWeHVYRzR2THlCVGRISnBibWNnWlhOallYQnBibWNnWVc1a0lHTmhibTl1YVdOaGJHbDZZWFJwYjI0dVhHNWNiaThxS2x4dUlDb2dSWE5qWVhCbElISmxaMlY0SUdOb1lYSmhZM1JsY25NZ2FXNGdZU0J6ZEhKcGJtY3VYRzRnS2lCVFpXVWdhSFIwY0hNNkx5OWtaWFpsYkc5d1pYSXViVzk2YVd4c1lTNXZjbWN2Wlc0dFZWTXZaRzlqY3k5WFpXSXZTbUYyWVZOamNtbHdkQzlIZFdsa1pTOVNaV2QxYkdGeVgwVjRjSEpsYzNOcGIyNXpMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pYTmpZWEJsVW1WblpYZ29jM1J5T2lCemRISnBibWNwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjM1J5TG5KbGNHeGhZMlVvTDFzdUtpcy9YaVI3ZlNncGZGdGNYRjFjWEZ4Y1hTOW5MQ0JjSWx4Y1hGd2tKbHdpS1R0Y2JuMWNibHh1WTI5dWMzUWdTRVZCUkVWU1gwTkJUazlPU1VOQlRFbGFSVkk2SUZBdVVHRnljMlZ5UEhOMGNtbHVaejRnUFNCUUxtRnNkQ2hjYmlBZ0lDQlFMbkpsWjJWNEtHNWxkeUJTWldkRmVIQW9aVzF2YW1sU1pXZGxlQ2dwTENCY0lsd2lLU2tzWEc0Z0lDQWdVQzV5WldkbGVDZ3ZXekF0T1Z4Y2NIdE1aWFIwWlhKOVh5MWRLeTkxS1N4Y2JpQWdJQ0JRTG5kb2FYUmxjM0JoWTJVdWJXRndLQ2hmS1NBOVBpQmNJaUJjSWlrc1hHNGdJQ0FnVUM1aGJua3ViV0Z3S0NoZktTQTlQaUJjSWlCY0lpbGNiaWxjYmlBZ0lDQXViV0Z1ZVNncFhHNGdJQ0FnTG0xaGNDZ29jbVZ6ZFd4MEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUXVhbTlwYmloY0lsd2lLUzV6Y0d4cGRDZ3ZYRnh6S3k4cExtcHZhVzRvWENJZ1hDSXBMblJ5YVcwb0tUdGNiaUFnSUNCOUtUdGNibHh1THlvcVhHNGdLaUJPYjNKdFlXeHBlbVZ6SUhSb1pTQjBaWGgwSUdsdUlHRWdhR1ZoWkdWeUlIUnZJR0psSUhOdmJXVjBhR2x1WnlCMGFHRjBJR2x6SUdGamRIVmhiR3g1SUd4cGJtdGhZbXhsSUhSdkxpQlVhR2x6SUcxcGJXbGpjMXh1SUNvZ2FHOTNJRTlpYzJsa2FXRnVJR1J2WlhNZ2FYUW5jeUJ1YjNKdFlXeHBlbUYwYVc5dUxDQmpiMnhzWVhCemFXNW5JSEpsY0dWaGRHVmtJSE53WVdObGN5QmhibVFnYzNSeWFYQndhVzVuSUc5MWRDQmpiMjUwY205c0lHTm9ZWEpoWTNSbGNuTXVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIzSnRZV3hwZW1WSVpXRmtaWEpHYjNKTWFXNXJLR2hsWVdSbGNqb2djM1J5YVc1bktUb2djM1J5YVc1bklIdGNiaUFnSUNCeVpYUjFjbTRnU0VWQlJFVlNYME5CVGs5T1NVTkJURWxhUlZJdWRISjVVR0Z5YzJVb2FHVmhaR1Z5S1R0Y2JuMWNibHh1THk4Z1JtRnpkQ0JsZUhSeVlXTjBhVzl1SUc5bUlHeHBibVVnY21GdVoyVnpJR1p5YjIwZ2JHRnlaMlVnY0dsbFkyVnpJRzltSUhSbGVIUXVYRzVjYmk4cUtpQlZjR1JoZEdVZ2RHaGxJR3hwYm1VZ2NtRnVaMlVnWm5KdmJTQmJjM1JoY25Rc0lHVnVaQ2tnZDJsMGFDQjBhR1VnWjJsMlpXNGdablZ1WTNScGIyNHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYkdsdVpWSmxjR3hoWTJVb2RHVjRkRG9nYzNSeWFXNW5MQ0J6ZEdGeWREb2diblZ0WW1WeUxDQmxibVE2SUc1MWJXSmxjaXdnWm5WdVl6b2dLR3hwYm1VNklITjBjbWx1WnlrZ1BUNGdjM1J5YVc1bktUb2djM1J5YVc1bklIdGNiaUFnSUNCamIyNXpkQ0JiWkdGMFlTd2diMlptYzJWMFhTQTlJR3hwYm1WVGNHRnVLSFJsZUhRc0lITjBZWEowTENCbGJtUXBPMXh1SUNBZ0lHbG1JQ2doYjJabWMyVjBLU0J5WlhSMWNtNGdkR1Y0ZER0Y2JseHVJQ0FnSUhKbGRIVnliaUFvWEc0Z0lDQWdJQ0FnSUdSaGRHRXVjM1ZpYzNSeWFXNW5LREFzSUc5bVpuTmxkQzV6ZEdGeWRDa2dLeUJtZFc1aktHUmhkR0V1YzNWaWMzUnlhVzVuS0c5bVpuTmxkQzV6ZEdGeWRDd2diMlptYzJWMExtVnVaQ2twSUNzZ1pHRjBZUzV6ZFdKemRISnBibWNvYjJabWMyVjBMbVZ1WkNsY2JpQWdJQ0FwTzF4dWZWeHVYRzR2S2lvZ1JYaDBjbUZqZENCMGFHVWdiR2x1WlhNZ2FXNGdkR2hsSUhKaGJtZGxJRnR6ZEdGeWRDd2daVzVrS1N3Z1lYTWdkMlZzYkNCaGN5QjBhR1VnWVdOMGRXRnNJRzltWm5ObGRITWdiMllnZEdobElITjBZWEowSUdGdVpDQmxibVF1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JHbHVaVk53WVc0b1hHNGdJQ0FnZEdWNGREb2djM1J5YVc1bkxGeHVJQ0FnSUhOMFlYSjBPaUJ1ZFcxaVpYSXNYRzRnSUNBZ1pXNWtPaUJ1ZFcxaVpYSmNiaWs2SUZ0emRISnBibWNzSUhzZ2MzUmhjblE2SUc1MWJXSmxjanNnWlc1a09pQnVkVzFpWlhJZ2ZTQjhJSFZ1WkdWbWFXNWxaRjBnZTF4dUlDQWdJSE4wWVhKMElEMGdUV0YwYUM1dFlYZ29jM1JoY25Rc0lEQXBPMXh1SUNBZ0lHVnVaQ0E5SUUxaGRHZ3ViV0Y0S0dWdVpDd2dNQ2s3WEc1Y2JpQWdJQ0JwWmlBb2MzUmhjblFnUGowZ1pXNWtLU0J5WlhSMWNtNGdXMXdpWENJc0lIVnVaR1ZtYVc1bFpGMDdYRzVjYmlBZ0lDQXZMeUJUZEdGeWRDQmllU0JtYVc1a2FXNW5JSFJvWlNCemRHRnlkR2x1WnlCc2FXNWxJRzltWm5ObGRDNWNiaUFnSUNCamIyNXpkQ0J6ZEdGeWRFOW1abk5sZENBOUlITnJhWEJPWlhkc2FXNWxjeWgwWlhoMExDQXdMQ0J6ZEdGeWRDazdYRzRnSUNBZ2FXWWdLSE4wWVhKMFQyWm1jMlYwSUQwOUlDMHhLU0J5WlhSMWNtNGdXMXdpWENJc0lIVnVaR1ZtYVc1bFpGMDdYRzVjYmlBZ0lDQmpiMjV6ZENCbGJtUlBabVp6WlhRZ1BTQnphMmx3VG1WM2JHbHVaWE1vZEdWNGRDd2djM1JoY25SUFptWnpaWFFzSUdWdVpDQXRJSE4wWVhKMEtUdGNiaUFnSUNCcFppQW9aVzVrVDJabWMyVjBJRDA5SUMweEtTQnlaWFIxY200Z1czUmxlSFF1YzNWaWMzUnlhVzVuS0hOMFlYSjBUMlptYzJWMEtTd2dleUJ6ZEdGeWREb2djM1JoY25SUFptWnpaWFFzSUdWdVpEb2dkR1Y0ZEM1c1pXNW5kR2dnZlYwN1hHNGdJQ0FnWld4elpTQnlaWFIxY200Z1czUmxlSFF1YzNWaWMzUnlhVzVuS0hOMFlYSjBUMlptYzJWMExDQmxibVJQWm1aelpYUWdMU0F4S1N3Z2V5QnpkR0Z5ZERvZ2MzUmhjblJQWm1aelpYUXNJR1Z1WkRvZ1pXNWtUMlptYzJWMElDMGdNU0I5WFR0Y2JuMWNibHh1THlvcUlFVjRkSEpoWTNRZ2RHaGxJR3hwYm1WeklHbHVJSFJvWlNCeVlXNW5aU0JiYzNSaGNuUXNJR1Z1WkNrdUlGTjBZWEowSUdseklHbHVZMngxYzJsMlpTd2daVzVrSUdseklHVjRZMngxYzJsMlpTNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJzYVc1bFVtRnVaMlVvZEdWNGREb2djM1J5YVc1bkxDQnpkR0Z5ZERvZ2JuVnRZbVZ5TENCbGJtUTZJRzUxYldKbGNpazZJSE4wY21sdVp5QjdYRzRnSUNBZ2NtVjBkWEp1SUd4cGJtVlRjR0Z1S0hSbGVIUXNJSE4wWVhKMExDQmxibVFwV3pCZE8xeHVmVnh1WEc0dktpb2dVMnRwY0NCN1kyOTFiblI5SUhSdmRHRnNJRzVsZDJ4cGJtVnpMQ0J5WlhSMWNtNXBibWNnZEdobElITjBZWEowSUc5bUlIUm9aU0JzYVc1bElIdGpiM1Z1ZEgwZ2JHbHVaWE1nWVdaMFpYSWdkR2hsSUdOMWNuSmxiblFnYkdsdVpTNGdTV1lnWTI5MWJuUWdhWE1nTUN3Z2RHaGxJR2x1YVhScFlXd2diMlptYzJWMElHbHpJSEpsZEhWeWJtVmtMaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhOcmFYQk9aWGRzYVc1bGN5aDBaWGgwT2lCemRISnBibWNzSUhOMFlYSjBPaUJ1ZFcxaVpYSXNJR052ZFc1ME9pQnVkVzFpWlhJcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUdsbUlDaGpiM1Z1ZENBOVBTQXdLU0J5WlhSMWNtNGdjM1JoY25RN1hHNWNiaUFnSUNCc1pYUWdjRzl6YVhScGIyNGdQU0J6ZEdGeWREdGNiaUFnSUNCM2FHbHNaU0FvWTI5MWJuUWdQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lIQnZjMmwwYVc5dUlEMGdkR1Y0ZEM1cGJtUmxlRTltS0Z3aVhGeHVYQ0lzSUhCdmMybDBhVzl1S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEJ2YzJsMGFXOXVJRDA5SUMweEtTQnlaWFIxY200Z0xURTdYRzVjYmlBZ0lDQWdJQ0FnWTI5MWJuUXRMVHRjYmlBZ0lDQWdJQ0FnY0c5emFYUnBiMjRnS3owZ01UdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnY0c5emFYUnBiMjQ3WEc1OVhHNGlMQ0FpWlhod2IzSjBJR1JsWm1GMWJIUWdLQ2tnUFQ0Z2UxeHVYSFF2THlCb2RIUndjem92TDIxMGFITXVZbVV2WlcxdmFtbGNibHgwY21WMGRYSnVJQzliSXlvd0xUbGRYRngxUmtVd1JqOWNYSFV5TUVVemZGdGNYSGhCT1Z4Y2VFRkZYRngxTWpBelExeGNkVEl3TkRsY1hIVXlNVEl5WEZ4MU1qRXpPVnhjZFRJeE9UUXRYRngxTWpFNU9WeGNkVEl4UVRsY1hIVXlNVUZCWEZ4MU1qTXhRVnhjZFRJek1VSmNYSFV5TXpJNFhGeDFNak5EUmx4Y2RUSXpSVVF0WEZ4MU1qTkZSbHhjZFRJelJqRmNYSFV5TTBZeVhGeDFNak5HT0MxY1hIVXlNMFpCWEZ4MU1qUkRNbHhjZFRJMVFVRmNYSFV5TlVGQ1hGeDFNalZDTmx4Y2RUSTFRekJjWEhVeU5VWkNYRngxTWpWR1ExeGNkVEkxUmtWY1hIVXlOakF3TFZ4Y2RUSTJNRFJjWEhVeU5qQkZYRngxTWpZeE1WeGNkVEkyTVRSY1hIVXlOakUxWEZ4MU1qWXhPRnhjZFRJMk1qQmNYSFV5TmpJeVhGeDFNall5TTF4Y2RUSTJNalpjWEhVeU5qSkJYRngxTWpZeVJWeGNkVEkyTWtaY1hIVXlOak00TFZ4Y2RUSTJNMEZjWEhVeU5qUXdYRngxTWpZME1seGNkVEkyTkRndFhGeDFNalkxTTF4Y2RUSTJOVVpjWEhVeU5qWXdYRngxTWpZMk0xeGNkVEkyTmpWY1hIVXlOalkyWEZ4MU1qWTJPRnhjZFRJMk4wSmNYSFV5TmpkRlhGeDFNalkzUmx4Y2RUSTJPVEpjWEhVeU5qazBMVnhjZFRJMk9UZGNYSFV5TmprNVhGeDFNalk1UWx4Y2RUSTJPVU5jWEhVeU5rRXdYRngxTWpaQk4xeGNkVEkyUVVGY1hIVXlOa0l3WEZ4MU1qWkNNVnhjZFRJMlFrUmNYSFV5TmtKRlhGeDFNalpETkZ4Y2RUSTJRemhjWEhVeU5rTkdYRngxTWpaRU1WeGNkVEkyUlRsY1hIVXlOa1l3TFZ4Y2RUSTJSalZjWEhVeU5rWTNYRngxTWpaR09GeGNkVEkyUmtGY1hIVXlOekF5WEZ4MU1qY3dPRnhjZFRJM01EbGNYSFV5TnpCR1hGeDFNamN4TWx4Y2RUSTNNVFJjWEhVeU56RTJYRngxTWpjeFJGeGNkVEkzTWpGY1hIVXlOek16WEZ4MU1qY3pORnhjZFRJM05EUmNYSFV5TnpRM1hGeDFNamMxTjF4Y2RUSTNOak5jWEhVeU4wRXhYRngxTWprek5GeGNkVEk1TXpWY1hIVXlRakExTFZ4Y2RUSkNNRGRjWEhVeVFqRkNYRngxTWtJeFExeGNkVEpDTlRWY1hIVXpNRE13WEZ4MU16QXpSRnhjZFRNeU9UZGNYSFV6TWprNVhWeGNkVVpGTUVZL2ZGdGNYSFV5TmpGRVhGeDFNamN3UTF4Y2RUSTNNRVJkS0Q4NlhGeDFSRGd6UTF0Y1hIVkVSa1pDTFZ4Y2RVUkdSa1pkZkZ4Y2RVWkZNRVlwUDN4YlhGeDFNamN3UVZ4Y2RUSTNNRUpkS0Q4NlhGeDFSRGd6UTF0Y1hIVkVSa1pDTFZ4Y2RVUkdSa1pkS1Q5OFcxeGNkVEl6UlRrdFhGeDFNak5GUTF4Y2RUSXpSakJjWEhVeU0wWXpYRngxTWpWR1JGeGNkVEkyT1ROY1hIVXlOa0V4WEZ4MU1qWkJRbHhjZFRJMlF6VmNYSFV5TmtORlhGeDFNalpFTkZ4Y2RUSTJSVUZjWEhVeU5rWkVYRngxTWpjd05WeGNkVEkzTWpoY1hIVXlOelJEWEZ4MU1qYzBSVnhjZFRJM05UTXRYRngxTWpjMU5WeGNkVEkzT1RVdFhGeDFNamM1TjF4Y2RUSTNRakJjWEhVeU4wSkdYRngxTWtJMU1GMThYRngxTWpaRU0xeGNkVVpGTUVZL0tEODZYRngxTWpBd1JGeGNkVVE0TTBSY1hIVkVRMEUxS1Q5OFhGeDFNalpHT1NnL09seGNkVVE0TTBOYlhGeDFSRVpHUWkxY1hIVkVSa1pHWFh4Y1hIVkdSVEJHS1Q4b1B6cGNYSFV5TURCRVcxeGNkVEkyTkRCY1hIVXlOalF5WFZ4Y2RVWkZNRVkvS1Q5OFhGeDFNamMyTkZ4Y2RVWkZNRVkvS0Q4NlhGeDFNakF3UkNnL09seGNkVVE0TTBSY1hIVkVSREkxZkZ4Y2RVUTRNMFZjWEhWRVJUYzVLU2svZkZ4Y2RVUTRNME1vUHpwYlhGeDFSRU13TkZ4Y2RVUkVOekJjWEhWRVJEY3hYRngxUkVRM1JWeGNkVVJFTjBaY1hIVkVSVEF5WEZ4MVJFVXpOMXhjZFVSR01qRmNYSFZFUmpJMExWeGNkVVJHTWtOY1hIVkVSak0yWEZ4MVJFWTNSRnhjZFVSR09UWmNYSFZFUmprM1hGeDFSRVk1T1MxY1hIVkVSamxDWEZ4MVJFWTVSVnhjZFVSR09VWmNYSFZFUmtORVhGeDFSRVpEUlZ4Y2RVUkdSRFF0WEZ4MVJFWkVSbHhjZFVSR1JqVmNYSFZFUmtZM1hWeGNkVVpGTUVZL2ZGdGNYSFZFUmpnMVhGeDFSRVpETWx4Y2RVUkdRemRkS0Q4NlhGeDFSRGd6UTF0Y1hIVkVSa1pDTFZ4Y2RVUkdSa1pkS1Q5OFcxeGNkVVJHUXpSY1hIVkVSa05CWFNnL09seGNkVVE0TTBOYlhGeDFSRVpHUWkxY1hIVkVSa1pHWFNrL0tEODZYRngxTWpBd1JGdGNYSFV5TmpRd1hGeDFNalkwTWwxY1hIVkdSVEJHUHlrL2ZGdGNYSFZFUmtOQ1hGeDFSRVpEUTEwb1B6cGNYSFZFT0RORFcxeGNkVVJHUmtJdFhGeDFSRVpHUmwxOFhGeDFSa1V3UmlrL0tEODZYRngxTWpBd1JGdGNYSFV5TmpRd1hGeDFNalkwTWwxY1hIVkdSVEJHUHlrL2ZGdGNYSFZFUTBOR1hGeDFSRVE0UlZ4Y2RVUkVPVEV0WEZ4MVJFUTVRVnhjZFVSRk1ERmNYSFZFUlRGQlhGeDFSRVV5Umx4Y2RVUkZNekl0WEZ4MVJFVXpObHhjZFVSRk16Z3RYRngxUkVVelFWeGNkVVJGTlRCY1hIVkVSVFV4WEZ4MVJFWXdNQzFjWEhWRVJqSXdYRngxUkVZeVJDMWNYSFZFUmpNMVhGeDFSRVl6TnkxY1hIVkVSalF6WEZ4MVJFWTBOUzFjWEhWRVJqUkJYRngxUkVZMFF5MWNYSFZFUmpkRFhGeDFSRVkzUlMxY1hIVkVSamcwWEZ4MVJFWTROaTFjWEhWRVJqa3pYRngxUkVaQk1DMWNYSFZFUmtNeFhGeDFSRVpETlZ4Y2RVUkdRelpjWEhWRVJrTTRYRngxUkVaRE9WeGNkVVJHUTBZdFhGeDFSRVpFTTF4Y2RVUkdSVEF0WEZ4MVJFWkdNRnhjZFVSR1JqZ3RYRngxUkVaR1JsMThYRngxUkVSRk5seGNkVVE0TTBOYlhGeDFSRVJGT0MxY1hIVkVSRVZEWEZ4MVJFUkZSVnhjZFVSRVJqRmNYSFZFUkVZeVhGeDFSRVJHTkZ4Y2RVUkVSall0WEZ4MVJFUkdRVnhjZFVSRVJrTmNYSFZFUkVaRVhGeDFSRVJHUmwxOFhGeDFSRVJGTjF4Y2RVUTRNME5iWEZ4MVJFUkZObHhjZFVSRVJUZGNYSFZFUkVVNUxWeGNkVVJFUlVaY1hIVkVSRVl4TFZ4Y2RVUkVSalJjWEhWRVJFWTJMVnhjZFVSRVJqbGNYSFZFUkVaQ1hGeDFSRVJHUTF4Y2RVUkVSa1ZjWEhWRVJFWkdYWHhjWEhWRVJFVTRYRngxUkRnelExdGNYSFZFUkVVMlhGeDFSRVJGT0Z4Y2RVUkVSVGxjWEhWRVJFVkNMVnhjZFVSRVJVVmNYSFZFUkVZd0xWeGNkVVJFUmpkY1hIVkVSRVpCTFZ4Y2RVUkVSa1pkZkZ4Y2RVUkVSVGxjWEhWRU9ETkRXMXhjZFVSRVJVRmNYSFZFUkVWRFhGeDFSRVJGUmx4Y2RVUkVSakJjWEhWRVJFWXlYRngxUkVSR05GeGNkVVJFUmtaZGZGeGNkVVJFUlVGY1hIVkVPRE5EVzF4Y2RVUkVSVFpjWEhWRVJFVTRYRngxUkVSRlFWeGNkVVJFUlVOY1hIVkVSRVZFWEZ4MVJFUkdOeTFjWEhWRVJFWkJYWHhjWEhWRVJFVkNYRngxUkRnelExdGNYSFZFUkVWRkxWeGNkVVJFUmpCY1hIVkVSRVl5WEZ4MVJFUkdORnhjZFVSRVJqZGRmRnhjZFVSRVJVTmNYSFZFT0RORFcxeGNkVVJFUlRaY1hIVkVSRVUzWEZ4MVJFUkZPUzFjWEhWRVJFVkZYRngxUkVSR01TMWNYSFZFUkVZelhGeDFSRVJHTlMxY1hIVkVSRVpCWEZ4MVJFUkdRMXhjZFVSRVJrVmRmRnhjZFVSRVJVUmNYSFZFT0RORFcxeGNkVVJFUmpCY1hIVkVSRVl5WEZ4MVJFUkdNMXhjZFVSRVJqZGNYSFZFUkVZNVhGeDFSRVJHUVYxOFhGeDFSRVJGUlZ4Y2RVUTRNME5iWEZ4MVJFUkZPQzFjWEhWRVJFVkJYRngxUkVSR01TMWNYSFZFUkVZMFhGeDFSRVJHTmkxY1hIVkVSRVk1WFh4Y1hIVkVSRVZHWEZ4MVJEZ3pRMXRjWEhWRVJFVkJYRngxUkVSR01seGNkVVJFUmpSY1hIVkVSRVkxWFh4Y1hIVkVSRVl3WEZ4MVJEZ3pRMXRjWEhWRVJFVkJYRngxUkVSRlF5MWNYSFZFUkVWRlhGeDFSRVJHTWx4Y2RVUkVSak5jWEhWRVJFWTFYRngxUkVSR04xeGNkVVJFUmtOY1hIVkVSRVpGWEZ4MVJFUkdSbDE4WEZ4MVJFUkdNVnhjZFVRNE0wTmJYRngxUkVSRk5pMWNYSFZFUkVVNFhGeDFSRVJGUlZ4Y2RVUkVSakJjWEhWRVJFWTNMVnhjZFVSRVJrSmNYSFZFUkVaRlhYeGNYSFZFUkVZeVhGeDFSRGd6UTF0Y1hIVkVSRVUyWEZ4MVJFUkZPQzFjWEhWRVJFVkVYRngxUkVSR01DMWNYSFZFUkVaR1hYeGNYSFZFUkVZelhGeDFSRGd6UTF0Y1hIVkVSRVUyWEZ4MVJFUkZPRnhjZFVSRVJVRXRYRngxUkVSRlExeGNkVVJFUlVWY1hIVkVSRVl4WEZ4MVJFUkdORnhjZFVSRVJqVmNYSFZFUkVZM1hGeDFSRVJHUVZ4Y2RVUkVSa1pkZkZ4Y2RVUkVSalJjWEhWRU9ETkRYRngxUkVSR01ueGNYSFZFUkVZMVhGeDFSRGd6UTF0Y1hIVkVSRVUyWEZ4MVJFUkZRUzFjWEhWRVJFVkVYRngxUkVSR01DMWNYSFZFUkVZelhGeDFSRVJHTnkxY1hIVkVSRVk1WEZ4MVJFUkdRMXhjZFVSRVJrVmRmRnhjZFVSRVJqWmNYSFZFT0RORFhGeDFSRVJGTm54Y1hIVkVSRVkzWEZ4MVJEZ3pRMXRjWEhWRVJFVkJYRngxUkVSR05GeGNkVVJFUmpoY1hIVkVSRVpCWEZ4MVJFUkdRMTE4WEZ4MVJFUkdPRnhjZFVRNE0wTmJYRngxUkVSRk5pMWNYSFZFUkVWQlhGeDFSRVJGUXkxY1hIVkVSRVkwWEZ4MVJFUkdOeTFjWEhWRVJFWTVYRngxUkVSR1FseGNkVVJFUmtRdFhGeDFSRVJHUmwxOFhGeDFSRVJHT1Z4Y2RVUTRNME5iWEZ4MVJFUkZObHhjZFVSRVJUaGNYSFZFUkVVNVhGeDFSRVJGUWkxY1hIVkVSRVZFWEZ4MVJFUkZSaTFjWEhWRVJFWTBYRngxUkVSR04xeGNkVVJFUmpsY1hIVkVSRVpDWEZ4MVJFUkdRMXhjZFVSRVJrWmRmRnhjZFVSRVJrRmNYSFZFT0RORFcxeGNkVVJFUlRaY1hIVkVSRVZEWEZ4MVJFUkdNbHhjZFVSRVJqTmNYSFZFUkVZNFhGeDFSRVJHUlZ4Y2RVUkVSa1pkZkZ4Y2RVUkVSa0pjWEhWRU9ETkRXMXhjZFVSRVJUWmNYSFZFUkVVNFhGeDFSRVJGUVZ4Y2RVUkVSVU5jWEhWRVJFVkZYRngxUkVSR00xeGNkVVJFUmtGZGZGeGNkVVJFUmtOY1hIVkVPRE5EVzF4Y2RVUkVSVUpjWEhWRVJFWTRYWHhjWEhWRVJFWkVYRngxUkRnelExeGNkVVJFUmpCOFhGeDFSRVJHUlZ4Y2RVUTRNME5iWEZ4MVJFUkZRVnhjZFVSRVJqbGRmRnhjZFVSRVJrWmNYSFZFT0RORFcxeGNkVVJFUlRaY1hIVkVSRVl5WEZ4MVJFUkdRMTE4WEZ4MVJFWTBOQ2cvT2x4Y2RUSXdNRVJjWEhWRU9ETkVYRngxUkVaRlFpay9mRnhjZFVSR05FSW9QenBjWEhVeU1EQkVYRngxUkRnelJGeGNkVVJHUlRrcFAzeGNYSFZFUmtNektEODZYRngxUkRnelExdGNYSFZFUmtaQ0xWeGNkVVJHUmtaZEtUOG9QenBjWEhVeU1EQkVLRDg2VzF4Y2RUSTJOREJjWEhVeU5qUXlYVnhjZFVaRk1FWS9LRDg2WEZ4MU1qQXdSRnhjZFRJM1FURmNYSFZHUlRCR1B5ay9mRnhjZFRJM1FURmNYSFZHUlRCR1B5a3BQM3hjWEhWRVJrWXpYRngxUmtVd1JqOG9QenBjWEhVeU1EQkVLRDg2WEZ4MU1qWkJOMXhjZFVaRk1FWS9mRnhjZFVRNE0wTmNYSFZFUmpBNEtTay9mRnhjZFVSR1JqUW9QenBjWEhVeU1EQkVYRngxTWpZeU1GeGNkVVpGTUVZL2ZGeGNkVVJDTkRCY1hIVkVRelkzWEZ4MVJFSTBNRnhjZFVSRE5qSmNYSFZFUWpRd0tEODZYRngxUkVNMk5WeGNkVVJDTkRCY1hIVkVRelpGWEZ4MVJFSTBNRnhjZFVSRE5qZDhYRngxUkVNM00xeGNkVVJDTkRCY1hIVkVRell6WEZ4MVJFSTBNRnhjZFVSRE56UjhYRngxUkVNM04xeGNkVVJDTkRCY1hIVkVRelpEWEZ4MVJFSTBNRnhjZFVSRE56TXBYRngxUkVJME1GeGNkVVJETjBZcFB5bDhYRngxUkRnelJDZy9PbHRjWEhWRVF6TkdYRngxUkVOR1JGeGNkVVJFTkRsY1hIVkVSRFJCWEZ4MVJFUTJSbHhjZFVSRU56QmNYSFZFUkRjelhGeDFSRVEzTmkxY1hIVkVSRGM1WEZ4MVJFUTROMXhjZFVSRU9FRXRYRngxUkVRNFJGeGNkVVJFUVRWY1hIVkVSRUU0WEZ4MVJFUkNNVnhjZFVSRVFqSmNYSFZFUkVKRFhGeDFSRVJETWkxY1hIVkVSRU0wWEZ4MVJFUkVNUzFjWEhWRVJFUXpYRngxUkVSRVF5MWNYSFZFUkVSRlhGeDFSRVJGTVZ4Y2RVUkVSVE5jWEhWRVJFVTRYRngxUkVSRlJseGNkVVJFUmpOY1hIVkVSRVpCWEZ4MVJFVkRRbHhjZFVSRlEwUXRYRngxUkVWRFJseGNkVVJGUlRBdFhGeDFSRVZGTlZ4Y2RVUkZSVGxjWEhWRVJVWXdYRngxUkVWR00xMWNYSFZHUlRCR1AzeGJYRngxUkVNME1seGNkVVJETkROY1hIVkVRelEyTFZ4Y2RVUkROVEJjWEhWRVF6WTJYRngxUkVNMk4xeGNkVVJETmtJdFhGeDFSRU0yUkZ4Y2RVUkROekpjWEhWRVF6YzBMVnhjZFVSRE56WmNYSFZFUXpjNFhGeDFSRU0zUTF4Y2RVUkRPRE5jWEhWRVF6ZzFYRngxUkVNNFJseGNkVVJET1RGY1hIVkVRMEZCWEZ4MVJFUTNRVnhjZFVSRU9UVmNYSFZFUkRrMlhGeDFSRVUwUTF4Y2RVUkZORVpjWEhWRVJVTXdYRngxUkVWRFExMG9QenBjWEhWRU9ETkRXMXhjZFVSR1JrSXRYRngxUkVaR1JsMHBQM3hiWEZ4MVJFTTJSVnhjZFVSRE56QmNYSFZFUXpjeFhGeDFSRU0zTTF4Y2RVUkROemRjWEhWRVF6Z3hYRngxUkVNNE1seGNkVVJET0RaY1hIVkVRemczWEZ4MVJFVTBOUzFjWEhWRVJUUTNYRngxUkVVMFFseGNkVVJGTkVSY1hIVkVSVFJGWEZ4MVJFVkJNMXhjZFVSRlFqUmNYSFZFUlVJMVhTZy9PbHhjZFVRNE0wTmJYRngxUkVaR1FpMWNYSFZFUmtaR1hTay9LRDg2WEZ4MU1qQXdSRnRjWEhVeU5qUXdYRngxTWpZME1sMWNYSFZHUlRCR1B5ay9mRnRjWEhWRVJEYzBYRngxUkVRNU1GMG9QenBjWEhWRU9ETkRXMXhjZFVSR1JrSXRYRngxUkVaR1JsMThYRngxUmtVd1Jpay9mRnRjWEhWRVF6QXdMVnhjZFVSRE1EZGNYSFZFUXpBNUxWeGNkVVJETVRSY1hIVkVRekUyTFZ4Y2RVUkRNalZjWEhWRVF6STNMVnhjZFVSRE0wRmNYSFZFUXpORExWeGNkVVJETTBWY1hIVkVRelF3WEZ4MVJFTTBORnhjZFVSRE5EVmNYSFZFUXpVeExWeGNkVVJETmpWY1hIVkVRelpCWEZ4MVJFTTNPUzFjWEhWRVF6ZENYRngxUkVNM1JDMWNYSFZFUXpnd1hGeDFSRU00TkZ4Y2RVUkRPRGd0WEZ4MVJFTTRSVnhjZFVSRE9UQmNYSFZFUXpreUxWeGNkVVJEUVRsY1hIVkVRMEZDTFZ4Y2RVUkRSa05jWEhWRVEwWkdMVnhjZFVSRU0wUmNYSFZFUkRSQ0xWeGNkVVJFTkVWY1hIVkVSRFV3TFZ4Y2RVUkVOamRjWEhWRVJFRTBYRngxUkVSR1FpMWNYSFZFUlRKRVhGeDFSRVV5UmkxY1hIVkVSVE0wWEZ4MVJFVXpOeTFjWEhWRVJUUXhYRngxUkVVME0xeGNkVVJGTkRSY1hIVkVSVFE0TFZ4Y2RVUkZORUZjWEhWRVJUZ3dMVnhjZFVSRlFUSmNYSFZFUlVFMExWeGNkVVJGUWpOY1hIVkVSVUkzTFZ4Y2RVUkZRa1pjWEhWRVJVTXhMVnhjZFVSRlF6VmNYSFZFUlVRd0xWeGNkVVJGUkRKY1hIVkVSVVExTFZ4Y2RVUkZSRGRjWEhWRVJVUkRMVnhjZFVSRlJFWmNYSFZFUlVWQ1hGeDFSRVZGUTF4Y2RVUkZSalF0WEZ4MVJFVkdRMXhjZFVSR1JUQXRYRngxUkVaRlFseGNkVVJHUmpCZGZGeGNkVVJETURnb1B6cGNYSFV5TURCRVhGeDFNa0l4UWlrL2ZGeGNkVVJETVRVb1B6cGNYSFV5TURCRVhGeDFSRGd6UlZ4Y2RVUkVRa0VwUDN4Y1hIVkVRekkyS0Q4NlhGeDFNakF3UkNnL09seGNkVEpDTVVKOFhGeDFSRGd6UkZ4Y2RVUkVNalVwS1Q5OFhGeDFSRU16UWlnL09seGNkVEl3TUVSY1hIVXlOelEwWEZ4MVJrVXdSajhwUDN4Y1hIVkVRelF4WEZ4MVJrVXdSajhvUHpwY1hIVXlNREJFWEZ4MVJEZ3pSRnhjZFVSRVJUaGNYSFZHUlRCR1B5ay9mRnhjZFVSRE5qZ29QenBjWEhVeU1EQkVLRDg2VzF4Y2RUSTJPVFZjWEhVeU5qazJYRngxTWpjd09GMWNYSFZHUlRCR1AzeGNYSFV5TnpZMFhGeDFSa1V3Umo5Y1hIVXlNREJFWEZ4MVJEZ3pSQ2cvT2x4Y2RVUkRPRUpjWEhVeU1EQkVYRngxUkRnelJDay9YRngxUkVNMk9IeGNYSFZFT0RORFcxeGNkVVJHTTBWY1hIVkVSamN6WEZ4MVJFWTNRMXhjZFVSR09UTmNYSFZFUmtFMFhGeDFSRVpCT0Z4Y2RVUkdSVUpjWEhWRVJrVkVYWHhjWEhWRU9ETkVLRDg2VzF4Y2RVUkROamhjWEhWRVF6WTVYVnhjZFRJd01FUmNYSFZFT0RORUtEODZYRngxUkVNMk5pZy9PbHhjZFRJd01FUmNYSFZFT0RORVhGeDFSRU0yTmlrL2ZGeGNkVVJETmpjb1B6cGNYSFV5TURCRVhGeDFSRGd6UkZ0Y1hIVkVRelkyWEZ4MVJFTTJOMTBwUHlsOFcxeGNkVVJEUWtKY1hIVkVRMEpEWEZ4MVJFUXlOMXhjZFVSRU1rTmNYSFZFUlRnd1hGeDFSRVU1TWwxOFhGeDFSRU0yTmlnL09seGNkVEl3TUVSY1hIVkVPRE5FWEZ4MVJFTTJOaWsvZkZ4Y2RVUkROamNvUHpwY1hIVXlNREJFWEZ4MVJEZ3pSRnRjWEhWRVF6WTJYRngxUkVNMk4xMHBQeWw4WEZ4MVJEZ3pSU2cvT2x0Y1hIVkVSRUZHWEZ4MVJFUkNRMXhjZFVSRVFrUmRLRDg2WEZ4MU1qQXdSRnhjZFRJM1FURmNYSFZHUlRCR1B5ay9mRnRjWEhWRVJFSXdMVnhjZFVSRVFqTmRLU2w4WEZ4MVJEZ3pReWcvT2x4Y2RVUkdSa0lvUHpwY1hIVXlNREJFS0Q4NlcxeGNkVEkyT1RWY1hIVXlOamsyWEZ4MU1qY3dPRjFjWEhWR1JUQkdQM3hjWEhVeU56WTBYRngxUmtVd1JqOWNYSFV5TURCRVhGeDFSRGd6UkNnL09seGNkVVJET0VKY1hIVXlNREJFWEZ4MVJEZ3pSQ2svWEZ4MVJFTTJPRnhjZFVRNE0wTmJYRngxUkVaR1FpMWNYSFZFUmtaR1hYeGNYSFZFT0RORFcxeGNkVVJHTTBWY1hIVkVSamN6WEZ4MVJFWTNRMXhjZFVSR09UTmNYSFZFUmtFMFhGeDFSRVpCT0Z4Y2RVUkdSVUpjWEhWRVJrVkVYWHhjWEhWRU9ETkVXMXhjZFVSRFFrSmNYSFZFUTBKRFhGeDFSRVF5TjF4Y2RVUkVNa05jWEhWRVJUZ3dYRngxUkVVNU1sMThYRngxUkRnelJTZy9PbHRjWEhWRVJFRkdYRngxUkVSQ1ExeGNkVVJFUWtSZEtEODZYRngxTWpBd1JGeGNkVEkzUVRGY1hIVkdSVEJHUHlrL2ZGdGNYSFZFUkVJd0xWeGNkVVJFUWpOZGZGeGNkVVJFTVVSY1hIVXlNREJFWEZ4MVJEZ3pSRnhjZFVSRE5qaGNYSFZFT0RORFcxeGNkVVJHUmtNdFhGeDFSRVpHUmwwcEtTay9mRnhjZFVSR1JrTW9QenBjWEhVeU1EQkVLRDg2VzF4Y2RUSTJPVFZjWEhVeU5qazJYRngxTWpjd09GMWNYSFZHUlRCR1AzeGNYSFV5TnpZMFhGeDFSa1V3Umo5Y1hIVXlNREJFWEZ4MVJEZ3pSQ2cvT2x4Y2RVUkRPRUpjWEhVeU1EQkVYRngxUkRnelJDay9YRngxUkVNMk9GeGNkVVE0TTBOYlhGeDFSRVpHUWkxY1hIVkVSa1pHWFh4Y1hIVkVPRE5EVzF4Y2RVUkdNMFZjWEhWRVJqY3pYRngxUkVZM1ExeGNkVVJHT1ROY1hIVkVSa0UwWEZ4MVJFWkJPRnhjZFVSR1JVSmNYSFZFUmtWRVhYeGNYSFZFT0RORVcxeGNkVVJEUWtKY1hIVkVRMEpEWEZ4MVJFUXlOMXhjZFVSRU1rTmNYSFZFUlRnd1hGeDFSRVU1TWwxOFhGeDFSRGd6UlNnL09sdGNYSFZFUkVGR1hGeDFSRVJDUTF4Y2RVUkVRa1JkS0Q4NlhGeDFNakF3UkZ4Y2RUSTNRVEZjWEhWR1JUQkdQeWsvZkZ0Y1hIVkVSRUl3TFZ4Y2RVUkVRak5kZkZ4Y2RVUkVNVVJjWEhVeU1EQkVYRngxUkRnelJGeGNkVVJETmpoY1hIVkVPRE5EVzF4Y2RVUkdSa0pjWEhWRVJrWkVMVnhjZFVSR1JrWmRLU2twUDN4Y1hIVkVSa1pFS0Q4NlhGeDFNakF3UkNnL09sdGNYSFV5TmprMVhGeDFNalk1Tmx4Y2RUSTNNRGhkWEZ4MVJrVXdSajk4WEZ4MU1qYzJORnhjZFVaRk1FWS9YRngxTWpBd1JGeGNkVVE0TTBRb1B6cGNYSFZFUXpoQ1hGeDFNakF3UkZ4Y2RVUTRNMFFwUDF4Y2RVUkROamhjWEhWRU9ETkRXMXhjZFVSR1JrSXRYRngxUkVaR1JsMThYRngxUkRnelExdGNYSFZFUmpORlhGeDFSRVkzTTF4Y2RVUkdOME5jWEhWRVJqa3pYRngxUkVaQk5GeGNkVVJHUVRoY1hIVkVSa1ZDWEZ4MVJFWkZSRjE4WEZ4MVJEZ3pSRnRjWEhWRVEwSkNYRngxUkVOQ1ExeGNkVVJFTWpkY1hIVkVSREpEWEZ4MVJFVTRNRnhjZFVSRk9USmRmRnhjZFVRNE0wVW9QenBiWEZ4MVJFUkJSbHhjZFVSRVFrTmNYSFZFUkVKRVhTZy9PbHhjZFRJd01FUmNYSFV5TjBFeFhGeDFSa1V3Umo4cFAzeGJYRngxUkVSQ01DMWNYSFZFUkVJelhYeGNYSFZFUkRGRVhGeDFNakF3UkZ4Y2RVUTRNMFJjWEhWRVF6WTRYRngxUkRnelExdGNYSFZFUmtaQ1hGeDFSRVpHUTF4Y2RVUkdSa1ZjWEhWRVJrWkdYU2twS1Q5OFhGeDFSRVpHUlNnL09seGNkVEl3TUVRb1B6cGJYRngxTWpZNU5WeGNkVEkyT1RaY1hIVXlOekE0WFZ4Y2RVWkZNRVkvZkZ4Y2RUSTNOalJjWEhWR1JUQkdQMXhjZFRJd01FUmNYSFZFT0RORUtEODZYRngxUkVNNFFseGNkVEl3TUVSY1hIVkVPRE5FS1Q5Y1hIVkVRelk0WEZ4MVJEZ3pRMXRjWEhWRVJrWkNMVnhjZFVSR1JrWmRmRnhjZFVRNE0wTmJYRngxUkVZelJWeGNkVVJHTnpOY1hIVkVSamREWEZ4MVJFWTVNMXhjZFVSR1FUUmNYSFZFUmtFNFhGeDFSRVpGUWx4Y2RVUkdSVVJkZkZ4Y2RVUTRNMFJiWEZ4MVJFTkNRbHhjZFVSRFFrTmNYSFZFUkRJM1hGeDFSRVF5UTF4Y2RVUkZPREJjWEhWRVJUa3lYWHhjWEhWRU9ETkZLRDg2VzF4Y2RVUkVRVVpjWEhWRVJFSkRYRngxUkVSQ1JGMG9QenBjWEhVeU1EQkVYRngxTWpkQk1WeGNkVVpGTUVZL0tUOThXMXhjZFVSRVFqQXRYRngxUkVSQ00xMThYRngxUkVReFJGeGNkVEl3TUVSY1hIVkVPRE5FWEZ4MVJFTTJPRnhjZFVRNE0wTmJYRngxUkVaR1FpMWNYSFZFUmtaRVhGeDFSRVpHUmwwcEtTay9mRnhjZFVSR1JrWW9QenBjWEhVeU1EQkVLRDg2VzF4Y2RUSTJPVFZjWEhVeU5qazJYRngxTWpjd09GMWNYSFZHUlRCR1AzeGNYSFV5TnpZMFhGeDFSa1V3Umo5Y1hIVXlNREJFWEZ4MVJEZ3pSQ2cvT2x4Y2RVUkRPRUpjWEhVeU1EQkVYRngxUkRnelJDay9YRngxUkVNMk9GeGNkVVE0TTBOYlhGeDFSRVpHUWkxY1hIVkVSa1pHWFh4Y1hIVkVPRE5EVzF4Y2RVUkdNMFZjWEhWRVJqY3pYRngxUkVZM1ExeGNkVVJHT1ROY1hIVkVSa0UwWEZ4MVJFWkJPRnhjZFVSR1JVSmNYSFZFUmtWRVhYeGNYSFZFT0RORVcxeGNkVVJEUWtKY1hIVkVRMEpEWEZ4MVJFUXlOMXhjZFVSRU1rTmNYSFZFUlRnd1hGeDFSRVU1TWwxOFhGeDFSRGd6UlNnL09sdGNYSFZFUkVGR1hGeDFSRVJDUTF4Y2RVUkVRa1JkS0Q4NlhGeDFNakF3UkZ4Y2RUSTNRVEZjWEhWR1JUQkdQeWsvZkZ0Y1hIVkVSRUl3TFZ4Y2RVUkVRak5kZkZ4Y2RVUkVNVVJjWEhVeU1EQkVYRngxUkRnelJGeGNkVVJETmpoY1hIVkVPRE5EVzF4Y2RVUkdSa0l0WEZ4MVJFWkdSVjBwS1NrL0tTay9mRnhjZFVSRE5qa29QenBjWEhVeU1EQkVLRDg2VzF4Y2RUSTJPVFZjWEhVeU5qazJYRngxTWpjd09GMWNYSFZHUlRCR1AzeGNYSFV5TnpZMFhGeDFSa1V3Umo5Y1hIVXlNREJFWEZ4MVJEZ3pSQ2cvT2x4Y2RVUkRPRUpjWEhVeU1EQkVYRngxUkRnelJDay9XMXhjZFVSRE5qaGNYSFZFUXpZNVhYeGNYSFZFT0RORFcxeGNkVVJHTTBWY1hIVkVSamN6WEZ4MVJFWTNRMXhjZFVSR09UTmNYSFZFUmtFMFhGeDFSRVpCT0Z4Y2RVUkdSVUpjWEhWRVJrVkVYWHhjWEhWRU9ETkVLRDg2VzF4Y2RVUkRRa0pjWEhWRVEwSkRYRngxUkVReU4xeGNkVVJFTWtOY1hIVkVSVGd3WEZ4MVJFVTVNbDE4WEZ4MVJFTTJOaWcvT2x4Y2RUSXdNRVJjWEhWRU9ETkVYRngxUkVNMk5pay9mRnhjZFVSRE5qY29QenBjWEhVeU1EQkVYRngxUkRnelJGdGNYSFZFUXpZMlhGeDFSRU0yTjEwcFAzeGNYSFZFUXpZNVhGeDFNakF3UkZ4Y2RVUTRNMFFvUHpwY1hIVkVRelkyS0Q4NlhGeDFNakF3UkZ4Y2RVUTRNMFJjWEhWRVF6WTJLVDk4WEZ4MVJFTTJOeWcvT2x4Y2RUSXdNRVJjWEhWRU9ETkVXMXhjZFVSRE5qWmNYSFZFUXpZM1hTay9LU2w4WEZ4MVJEZ3pSU2cvT2x0Y1hIVkVSRUZHWEZ4MVJFUkNRMXhjZFVSRVFrUmRLRDg2WEZ4MU1qQXdSRnhjZFRJM1FURmNYSFZHUlRCR1B5ay9mRnRjWEhWRVJFSXdMVnhjZFVSRVFqTmRLU2w4WEZ4MVJEZ3pReWcvT2x4Y2RVUkdSa0lvUHpwY1hIVXlNREJFS0Q4NlcxeGNkVEkyT1RWY1hIVXlOamsyWEZ4MU1qY3dPRjFjWEhWR1JUQkdQM3hjWEhVeU56WTBYRngxUmtVd1JqOWNYSFV5TURCRVhGeDFSRGd6UkNnL09sdGNYSFZFUXpZNFhGeDFSRU0yT1YxOFhGeDFSRU00UWx4Y2RUSXdNRVJjWEhWRU9ETkVXMXhjZFVSRE5qaGNYSFZFUXpZNVhTbGNYSFZFT0RORFcxeGNkVVJHUmtJdFhGeDFSRVpHUmwxOFhGeDFSRGd6UTF0Y1hIVkVSak5GWEZ4MVJFWTNNMXhjZFVSR04wTmNYSFZFUmprelhGeDFSRVpCTkZ4Y2RVUkdRVGhjWEhWRVJrVkNYRngxUkVaRlJGMThYRngxUkRnelJGdGNYSFZFUTBKQ1hGeDFSRU5DUTF4Y2RVUkVNamRjWEhWRVJESkRYRngxUkVVNE1GeGNkVVJGT1RKZGZGeGNkVVE0TTBVb1B6cGJYRngxUkVSQlJseGNkVVJFUWtOY1hIVkVSRUpFWFNnL09seGNkVEl3TUVSY1hIVXlOMEV4WEZ4MVJrVXdSajhwUDN4YlhGeDFSRVJDTUMxY1hIVkVSRUl6WFh4Y1hIVkVSREZFWEZ4MU1qQXdSRnhjZFVRNE0wUmJYRngxUkVNMk9GeGNkVVJETmpsZFhGeDFSRGd6UTF0Y1hIVkVSa1pETFZ4Y2RVUkdSa1pkS1NrcFAzeGNYSFZFUmtaREtEODZYRngxTWpBd1JDZy9PbHRjWEhVeU5qazFYRngxTWpZNU5seGNkVEkzTURoZFhGeDFSa1V3Umo5OFhGeDFNamMyTkZ4Y2RVWkZNRVkvWEZ4MU1qQXdSRnhjZFVRNE0wUW9QenBiWEZ4MVJFTTJPRnhjZFVSRE5qbGRmRnhjZFVSRE9FSmNYSFV5TURCRVhGeDFSRGd6UkZ0Y1hIVkVRelk0WEZ4MVJFTTJPVjBwWEZ4MVJEZ3pRMXRjWEhWRVJrWkNMVnhjZFVSR1JrWmRmRnhjZFVRNE0wTmJYRngxUkVZelJWeGNkVVJHTnpOY1hIVkVSamREWEZ4MVJFWTVNMXhjZFVSR1FUUmNYSFZFUmtFNFhGeDFSRVpGUWx4Y2RVUkdSVVJkZkZ4Y2RVUTRNMFJiWEZ4MVJFTkNRbHhjZFVSRFFrTmNYSFZFUkRJM1hGeDFSRVF5UTF4Y2RVUkZPREJjWEhWRVJUa3lYWHhjWEhWRU9ETkZLRDg2VzF4Y2RVUkVRVVpjWEhWRVJFSkRYRngxUkVSQ1JGMG9QenBjWEhVeU1EQkVYRngxTWpkQk1WeGNkVVpGTUVZL0tUOThXMXhjZFVSRVFqQXRYRngxUkVSQ00xMThYRngxUkVReFJGeGNkVEl3TUVSY1hIVkVPRE5FVzF4Y2RVUkROamhjWEhWRVF6WTVYVnhjZFVRNE0wTmJYRngxUkVaR1FseGNkVVJHUmtRdFhGeDFSRVpHUmwwcEtTay9mRnhjZFVSR1JrUW9QenBjWEhVeU1EQkVLRDg2VzF4Y2RUSTJPVFZjWEhVeU5qazJYRngxTWpjd09GMWNYSFZHUlRCR1AzeGNYSFV5TnpZMFhGeDFSa1V3Umo5Y1hIVXlNREJFWEZ4MVJEZ3pSQ2cvT2x0Y1hIVkVRelk0WEZ4MVJFTTJPVjE4WEZ4MVJFTTRRbHhjZFRJd01FUmNYSFZFT0RORVcxeGNkVVJETmpoY1hIVkVRelk1WFNsY1hIVkVPRE5EVzF4Y2RVUkdSa0l0WEZ4MVJFWkdSbDE4WEZ4MVJEZ3pRMXRjWEhWRVJqTkZYRngxUkVZM00xeGNkVVJHTjBOY1hIVkVSamt6WEZ4MVJFWkJORnhjZFVSR1FUaGNYSFZFUmtWQ1hGeDFSRVpGUkYxOFhGeDFSRGd6UkZ0Y1hIVkVRMEpDWEZ4MVJFTkNRMXhjZFVSRU1qZGNYSFZFUkRKRFhGeDFSRVU0TUZ4Y2RVUkZPVEpkZkZ4Y2RVUTRNMFVvUHpwYlhGeDFSRVJCUmx4Y2RVUkVRa05jWEhWRVJFSkVYU2cvT2x4Y2RUSXdNRVJjWEhVeU4wRXhYRngxUmtVd1JqOHBQM3hiWEZ4MVJFUkNNQzFjWEhWRVJFSXpYWHhjWEhWRVJERkVYRngxTWpBd1JGeGNkVVE0TTBSYlhGeDFSRU0yT0Z4Y2RVUkROamxkWEZ4MVJEZ3pRMXRjWEhWRVJrWkNYRngxUkVaR1ExeGNkVVJHUmtWY1hIVkVSa1pHWFNrcEtUOThYRngxUkVaR1JTZy9PbHhjZFRJd01FUW9QenBiWEZ4MU1qWTVOVnhjZFRJMk9UWmNYSFV5TnpBNFhWeGNkVVpGTUVZL2ZGeGNkVEkzTmpSY1hIVkdSVEJHUDF4Y2RUSXdNRVJjWEhWRU9ETkVLRDg2VzF4Y2RVUkROamhjWEhWRVF6WTVYWHhjWEhWRVF6aENYRngxTWpBd1JGeGNkVVE0TTBSYlhGeDFSRU0yT0Z4Y2RVUkROamxkS1Z4Y2RVUTRNME5iWEZ4MVJFWkdRaTFjWEhWRVJrWkdYWHhjWEhWRU9ETkRXMXhjZFVSR00wVmNYSFZFUmpjelhGeDFSRVkzUTF4Y2RVUkdPVE5jWEhWRVJrRTBYRngxUkVaQk9GeGNkVVJHUlVKY1hIVkVSa1ZFWFh4Y1hIVkVPRE5FVzF4Y2RVUkRRa0pjWEhWRVEwSkRYRngxUkVReU4xeGNkVVJFTWtOY1hIVkVSVGd3WEZ4MVJFVTVNbDE4WEZ4MVJEZ3pSU2cvT2x0Y1hIVkVSRUZHWEZ4MVJFUkNRMXhjZFVSRVFrUmRLRDg2WEZ4MU1qQXdSRnhjZFRJM1FURmNYSFZHUlRCR1B5ay9mRnRjWEhWRVJFSXdMVnhjZFVSRVFqTmRmRnhjZFVSRU1VUmNYSFV5TURCRVhGeDFSRGd6UkZ0Y1hIVkVRelk0WEZ4MVJFTTJPVjFjWEhWRU9ETkRXMXhjZFVSR1JrSXRYRngxUkVaR1JGeGNkVVJHUmtaZEtTa3BQM3hjWEhWRVJrWkdLRDg2WEZ4MU1qQXdSQ2cvT2x0Y1hIVXlOamsxWEZ4MU1qWTVObHhjZFRJM01EaGRYRngxUmtVd1JqOThYRngxTWpjMk5GeGNkVVpGTUVZL1hGeDFNakF3UkZ4Y2RVUTRNMFFvUHpwYlhGeDFSRU0yT0Z4Y2RVUkROamxkZkZ4Y2RVUkRPRUpjWEhVeU1EQkVYRngxUkRnelJGdGNYSFZFUXpZNFhGeDFSRU0yT1YwcFhGeDFSRGd6UTF0Y1hIVkVSa1pDTFZ4Y2RVUkdSa1pkZkZ4Y2RVUTRNME5iWEZ4MVJFWXpSVnhjZFVSR056TmNYSFZFUmpkRFhGeDFSRVk1TTF4Y2RVUkdRVFJjWEhWRVJrRTRYRngxUkVaRlFseGNkVVJHUlVSZGZGeGNkVVE0TTBSYlhGeDFSRU5DUWx4Y2RVUkRRa05jWEhWRVJESTNYRngxUkVReVExeGNkVVJGT0RCY1hIVkVSVGt5WFh4Y1hIVkVPRE5GS0Q4NlcxeGNkVVJFUVVaY1hIVkVSRUpEWEZ4MVJFUkNSRjBvUHpwY1hIVXlNREJFWEZ4MU1qZEJNVnhjZFVaRk1FWS9LVDk4VzF4Y2RVUkVRakF0WEZ4MVJFUkNNMTE4WEZ4MVJFUXhSRnhjZFRJd01FUmNYSFZFT0RORVcxeGNkVVJETmpoY1hIVkVRelk1WFZ4Y2RVUTRNME5iWEZ4MVJFWkdRaTFjWEhWRVJrWkZYU2twS1Q4cEtUOThYRngxUkVNMlJpZy9PbHhjZFRJd01FUmJYRngxTWpZME1GeGNkVEkyTkRKZFhGeDFSa1V3Umo4cFAzeGNYSFZFUkRjMUtEODZYRngxUkRnelExdGNYSFZFUmtaQ0xWeGNkVVJHUmtaZGZGeGNkVVpGTUVZcFB5Zy9PbHhjZFRJd01FUmJYRngxTWpZME1GeGNkVEkyTkRKZFhGeDFSa1V3Umo4cFAzeGNYSFZFUlRKRktEODZYRngxTWpBd1JGeGNkVVE0TTBSY1hIVkVRMEU0S1Q5OFhGeDFSRVV6TlNnL09seGNkVEl3TUVSY1hIVkVPRE5FWEZ4MVJFTkJRaWsvZkZ4Y2RVUkZNellvUHpwY1hIVXlNREJFWEZ4MVJEZ3pRMXhjZFVSR01rSmNYSFZHUlRCR1B5ay9mRnhjZFVSRk5ESW9QenBjWEhVeU1EQkVXMXhjZFRJeE9UUmNYSFV5TVRrMVhWeGNkVVpGTUVZL0tUOThYRngxUkVWQ05pZy9PbHhjZFVRNE0wTmJYRngxUkVaR1FpMWNYSFZFUmtaR1hTay9LRDg2WEZ4MU1qQXdSQ2cvT2x0Y1hIVXlOalF3WEZ4MU1qWTBNbDFjWEhWR1JUQkdQeWcvT2x4Y2RUSXdNRVJjWEhVeU4wRXhYRngxUmtVd1JqOHBQM3hjWEhVeU4wRXhYRngxUmtVd1JqOHBLVDhwZkZ4Y2RVUTRNMFVvUHpwYlhGeDFSRVF3UTF4Y2RVUkVNRVpjWEhWRVJERTRMVnhjZFVSRU1VWmNYSFZFUkRNd0xWeGNkVVJFTXpSY1hIVkVSRE0yWEZ4MVJFUTNOMXhjZFVSRVFqVmNYSFZFUkVJMlhGeDFSRVJDUWx4Y2RVUkVSREpjWEhWRVJFUXpYRngxUkVSRU5WeGNkVVJGUXpNdFhGeDFSRVZETlZ4Y2RVUkZSakJjWEhWRVJVWXlMVnhjZFVSRlJqaGRLRDg2WEZ4MVJEZ3pRMXRjWEhWRVJrWkNMVnhjZFVSR1JrWmRLVDk4VzF4Y2RVUkVNalpjWEhWRVJETTFYRngxUkVRek55MWNYSFZFUkRNNVhGeDFSRVF6UkZ4Y2RVUkVNMFZjWEhWRVJFSTRYRngxUkVSQ09WeGNkVVJFUTBSY1hIVkVSRU5HWEZ4MVJFUkVORnhjZFVSRVJEWXRYRngxUkVSRVJGMG9QenBjWEhWRU9ETkRXMXhjZFVSR1JrSXRYRngxUkVaR1JsMHBQeWcvT2x4Y2RUSXdNRVJiWEZ4MU1qWTBNRnhjZFRJMk5ESmRYRngxUmtVd1JqOHBQM3hiWEZ4MVJFUkVSVnhjZFVSRVJFWmRLRDg2WEZ4MU1qQXdSRnRjWEhVeU5qUXdYRngxTWpZME1sMWNYSFZHUlRCR1B5ay9mRnRjWEhWRVJEQkVYRngxUkVRd1JWeGNkVVJFTVRBdFhGeDFSRVF4TjF4Y2RVUkVNakF0WEZ4MVJFUXlOVnhjZFVSRU1qY3RYRngxUkVReVJseGNkVVJFTTBGY1hIVkVSRE5HTFZ4Y2RVUkVORFZjWEhWRVJEUTNMVnhjZFVSRU56WmNYSFZFUkRjNExWeGNkVVJFUWpSY1hIVkVSRUkzWEZ4MVJFUkNRVnhjZFVSRVFrTXRYRngxUkVSRFExeGNkVVJFUkRCY1hIVkVSRVV3TFZ4Y2RVUkVSa1pjWEhWRVJUY3dMVnhjZFVSRk4wTmNYSFZFUlRnd0xWeGNkVVJGT0RsY1hIVkVSVGhHTFZ4Y2RVUkZRekpjWEhWRVJVTTJYRngxUkVWRFJTMWNYSFZFUlVSRFhGeDFSRVZFUmkxY1hIVkVSVVU1WFh4Y1hIVkVSRE5ES0Q4NlhGeDFNakF3UkZ0Y1hIVXlOalF3WEZ4MU1qWTBNbDFjWEhWR1JUQkdQM3hjWEhWRU9ETkRXMXhjZFVSR1JrSXRYRngxUkVaR1JsMHBQM3hjWEhWRVJFTkZLRDg2WEZ4MVJEZ3pRMXRjWEhWRVJrWkNMVnhjZFVSR1JrWmRLVDhvUHpwY1hIVXlNREJFS0Q4NlcxeGNkVEkyTkRCY1hIVXlOalF5WFZ4Y2RVWkZNRVkvS0Q4NlhGeDFNakF3UkZ4Y2RUSTNRVEZjWEhWR1JUQkdQeWsvZkZ4Y2RUSTNRVEZjWEhWR1JUQkdQeWtwUDN4Y1hIVkVSRVF4S0Q4NlhGeDFNakF3UkNnL09sdGNYSFV5TmprMVhGeDFNalk1Tmx4Y2RUSTNNRGhkWEZ4MVJrVXdSajk4WEZ4MVJEZ3pRMXRjWEhWRVJqTkZYRngxUkVZM00xeGNkVVJHTjBOY1hIVkVSamcwWEZ4MVJFWTVNMXhjZFVSR1FUUmNYSFZFUmtFNFhGeDFSRVpGUWx4Y2RVUkdSVVJkZkZ4Y2RVUTRNMFJiWEZ4MVJFTkNRbHhjZFVSRFFrTmNYSFZFUkRJM1hGeDFSRVF5UTF4Y2RVUkZPREJjWEhWRVJUa3lYWHhjWEhWRU9ETkZLRDg2VzF4Y2RVUkVRVVpjWEhWRVJFSkRYRngxUkVSQ1JGMG9QenBjWEhVeU1EQkVYRngxTWpkQk1WeGNkVVpGTUVZL0tUOThXMXhjZFVSRVFqQXRYRngxUkVSQ00xMThYRngxUkVReFJGeGNkVEl3TUVSY1hIVkVPRE5GWEZ4MVJFUkVNWHhjWEhWRVJFUXhYRngxTWpBd1JGeGNkVVE0TTBWY1hIVkVSRVF5S0Q4NlhGeDFNakF3UkZ4Y2RVUTRNMFZjWEhWRVJFUXlLVDk4WEZ4MVJFUkVNaWcvT2x4Y2RUSXdNRVJjWEhWRU9ETkZYRngxUkVSRU1pay9LU2w4WEZ4MVJEZ3pReWcvT2x4Y2RVUkdSa0lvUHpwY1hIVXlNREJFS0Q4NlcxeGNkVEkyT1RWY1hIVXlOamsyWEZ4MU1qY3dPRjFjWEhWR1JUQkdQM3hjWEhVeU56WTBYRngxUmtVd1JqOWNYSFV5TURCRUtEODZYRngxUkRnelJGeGNkVVJET0VKY1hIVXlNREJFS1Q5Y1hIVkVPRE5GWEZ4MVJFUkVNVnhjZFVRNE0wTmJYRngxUkVaR1F5MWNYSFZFUmtaR1hYeGNYSFZFT0RORFcxeGNkVVJHTTBWY1hIVkVSamN6WEZ4MVJFWTNRMXhjZFVSR09EUmNYSFZFUmprelhGeDFSRVpCTkZ4Y2RVUkdRVGhjWEhWRVJrVkNYRngxUkVaRlJGMThYRngxUkRnelJGdGNYSFZFUTBKQ1hGeDFSRU5DUTF4Y2RVUkVNamRjWEhWRVJESkRYRngxUkVVNE1GeGNkVVJGT1RKZGZGeGNkVVE0TTBVb1B6cGJYRngxUkVSQlJseGNkVVJFUWtOY1hIVkVSRUpFWFNnL09seGNkVEl3TUVSY1hIVXlOMEV4WEZ4MVJrVXdSajhwUDN4YlhGeDFSRVJDTUMxY1hIVkVSRUl6WFh4Y1hIVkVSREZFWEZ4MU1qQXdSRnhjZFVRNE0wVmNYSFZFUkVReFhGeDFSRGd6UTF0Y1hIVkVSa1pDTFZ4Y2RVUkdSa1pkS1NrcFAzeGNYSFZFUmtaREtEODZYRngxTWpBd1JDZy9PbHRjWEhVeU5qazFYRngxTWpZNU5seGNkVEkzTURoZFhGeDFSa1V3Umo5OFhGeDFNamMyTkZ4Y2RVWkZNRVkvWEZ4MU1qQXdSQ2cvT2x4Y2RVUTRNMFJjWEhWRVF6aENYRngxTWpBd1JDay9YRngxUkRnelJWeGNkVVJFUkRGY1hIVkVPRE5EVzF4Y2RVUkdSa0pjWEhWRVJrWkVMVnhjZFVSR1JrWmRmRnhjZFVRNE0wTmJYRngxUkVZelJWeGNkVVJHTnpOY1hIVkVSamREWEZ4MVJFWTRORnhjZFVSR09UTmNYSFZFUmtFMFhGeDFSRVpCT0Z4Y2RVUkdSVUpjWEhWRVJrVkVYWHhjWEhWRU9ETkVXMXhjZFVSRFFrSmNYSFZFUTBKRFhGeDFSRVF5TjF4Y2RVUkVNa05jWEhWRVJUZ3dYRngxUkVVNU1sMThYRngxUkRnelJTZy9PbHRjWEhWRVJFRkdYRngxUkVSQ1ExeGNkVVJFUWtSZEtEODZYRngxTWpBd1JGeGNkVEkzUVRGY1hIVkdSVEJHUHlrL2ZGdGNYSFZFUkVJd0xWeGNkVVJFUWpOZGZGeGNkVVJFTVVSY1hIVXlNREJFWEZ4MVJEZ3pSVnhjZFVSRVJERmNYSFZFT0RORFcxeGNkVVJHUmtJdFhGeDFSRVpHUmwwcEtTay9mRnhjZFVSR1JrUW9QenBjWEhVeU1EQkVLRDg2VzF4Y2RUSTJPVFZjWEhVeU5qazJYRngxTWpjd09GMWNYSFZHUlRCR1AzeGNYSFV5TnpZMFhGeDFSa1V3Umo5Y1hIVXlNREJFS0Q4NlhGeDFSRGd6UkZ4Y2RVUkRPRUpjWEhVeU1EQkVLVDljWEhWRU9ETkZYRngxUkVSRU1WeGNkVVE0TTBOYlhGeDFSRVpHUWx4Y2RVUkdSa05jWEhWRVJrWkZYRngxUkVaR1JsMThYRngxUkRnelExdGNYSFZFUmpORlhGeDFSRVkzTTF4Y2RVUkdOME5jWEhWRVJqZzBYRngxUkVZNU0xeGNkVVJHUVRSY1hIVkVSa0U0WEZ4MVJFWkZRbHhjZFVSR1JVUmRmRnhjZFVRNE0wUmJYRngxUkVOQ1FseGNkVVJEUWtOY1hIVkVSREkzWEZ4MVJFUXlRMXhjZFVSRk9EQmNYSFZFUlRreVhYeGNYSFZFT0RORktEODZXMXhjZFVSRVFVWmNYSFZFUkVKRFhGeDFSRVJDUkYwb1B6cGNYSFV5TURCRVhGeDFNamRCTVZ4Y2RVWkZNRVkvS1Q5OFcxeGNkVVJFUWpBdFhGeDFSRVJDTTExOFhGeDFSRVF4UkZ4Y2RUSXdNRVJjWEhWRU9ETkZYRngxUkVSRU1WeGNkVVE0TTBOYlhGeDFSRVpHUWkxY1hIVkVSa1pHWFNrcEtUOThYRngxUkVaR1JTZy9PbHhjZFRJd01FUW9QenBiWEZ4MU1qWTVOVnhjZFRJMk9UWmNYSFV5TnpBNFhWeGNkVVpGTUVZL2ZGeGNkVEkzTmpSY1hIVkdSVEJHUDF4Y2RUSXdNRVFvUHpwY1hIVkVPRE5FWEZ4MVJFTTRRbHhjZFRJd01FUXBQMXhjZFVRNE0wVmNYSFZFUkVReFhGeDFSRGd6UTF0Y1hIVkVSa1pDTFZ4Y2RVUkdSa1JjWEhWRVJrWkdYWHhjWEhWRU9ETkRXMXhjZFVSR00wVmNYSFZFUmpjelhGeDFSRVkzUTF4Y2RVUkdPRFJjWEhWRVJqa3pYRngxUkVaQk5GeGNkVVJHUVRoY1hIVkVSa1ZDWEZ4MVJFWkZSRjE4WEZ4MVJEZ3pSRnRjWEhWRVEwSkNYRngxUkVOQ1ExeGNkVVJFTWpkY1hIVkVSREpEWEZ4MVJFVTRNRnhjZFVSRk9USmRmRnhjZFVRNE0wVW9QenBiWEZ4MVJFUkJSbHhjZFVSRVFrTmNYSFZFUkVKRVhTZy9PbHhjZFRJd01FUmNYSFV5TjBFeFhGeDFSa1V3Umo4cFAzeGJYRngxUkVSQ01DMWNYSFZFUkVJelhYeGNYSFZFUkRGRVhGeDFNakF3UkZ4Y2RVUTRNMFZjWEhWRVJFUXhYRngxUkRnelExdGNYSFZFUmtaQ0xWeGNkVVJHUmtaZEtTa3BQM3hjWEhWRVJrWkdLRDg2WEZ4MU1qQXdSQ2cvT2x0Y1hIVXlOamsxWEZ4MU1qWTVObHhjZFRJM01EaGRYRngxUmtVd1JqOThYRngxTWpjMk5GeGNkVVpGTUVZL1hGeDFNakF3UkNnL09seGNkVVE0TTBSY1hIVkVRemhDWEZ4MU1qQXdSQ2svWEZ4MVJEZ3pSVnhjZFVSRVJERmNYSFZFT0RORFcxeGNkVVJHUmtJdFhGeDFSRVpHUlYxOFhGeDFSRGd6UTF0Y1hIVkVSak5GWEZ4MVJFWTNNMXhjZFVSR04wTmNYSFZFUmpnMFhGeDFSRVk1TTF4Y2RVUkdRVFJjWEhWRVJrRTRYRngxUkVaRlFseGNkVVJHUlVSZGZGeGNkVVE0TTBSYlhGeDFSRU5DUWx4Y2RVUkRRa05jWEhWRVJESTNYRngxUkVReVExeGNkVVJGT0RCY1hIVkVSVGt5WFh4Y1hIVkVPRE5GS0Q4NlcxeGNkVVJFUVVaY1hIVkVSRUpEWEZ4MVJFUkNSRjBvUHpwY1hIVXlNREJFWEZ4MU1qZEJNVnhjZFVaRk1FWS9LVDk4VzF4Y2RVUkVRakF0WEZ4MVJFUkNNMTE4WEZ4MVJFUXhSRnhjZFRJd01FUmNYSFZFT0RORlhGeDFSRVJFTVZ4Y2RVUTRNME5iWEZ4MVJFWkdRaTFjWEhWRVJrWkdYU2twS1Q4cEtUOThYRngxUkVWR01TZy9PbHhjZFVRNE0wTW9QenBjWEhWRVJrWkNLRDg2WEZ4MU1qQXdSRnhjZFVRNE0wVmNYSFZFUlVZeVhGeDFSRGd6UTF0Y1hIVkVSa1pETFZ4Y2RVUkdSa1pkS1Q5OFhGeDFSRVpHUXlnL09seGNkVEl3TUVSY1hIVkVPRE5GWEZ4MVJFVkdNbHhjZFVRNE0wTmJYRngxUkVaR1FseGNkVVJHUmtRdFhGeDFSRVpHUmwwcFAzeGNYSFZFUmtaRUtEODZYRngxTWpBd1JGeGNkVVE0TTBWY1hIVkVSVVl5WEZ4MVJEZ3pRMXRjWEhWRVJrWkNYRngxUkVaR1ExeGNkVVJHUmtWY1hIVkVSa1pHWFNrL2ZGeGNkVVJHUmtVb1B6cGNYSFV5TURCRVhGeDFSRGd6UlZ4Y2RVUkZSakpjWEhWRU9ETkRXMXhjZFVSR1JrSXRYRngxUkVaR1JGeGNkVVJHUmtaZEtUOThYRngxUkVaR1JpZy9PbHhjZFRJd01FUmNYSFZFT0RORlhGeDFSRVZHTWx4Y2RVUTRNME5iWEZ4MVJFWkdRaTFjWEhWRVJrWkZYU2svS1NrL0tTOW5PMXh1ZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJuWlhSR2FXeGxWR2wwYkdVc0lHNXZjbTFoYkdsNlpVaGxZV1JsY2tadmNreHBibXNnZlNCbWNtOXRJRndpZFhScGJITXZibTl5YldGc2FYcGxjbk5jSWp0Y2JseHVMeW9xSUZSb1pTQlBZbk5wWkdsaGJpQW5iR2x1YXljc0lIVnpaV1FnWm05eUlIVnVhWEYxWld4NUlHUmxjMk55YVdKcGJtY2dZU0JtYVd4bExDQm9aV0ZrWlhJc0lHOXlJR0pzYjJOckxseHVJQ29nUUdkeWIzVndJRU52YlcxdmJpQlVlWEJsYzF4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1RHbHVheUI3WEc0Z0lDQWdMeW9xSUZSb1pTQm1hV3hsSUhCaGRHZ2dkR2hwY3lCc2FXNXJJSEJ2YVc1MGN5QjBieTRnS2k5Y2JpQWdJQ0J3ZFdKc2FXTWdjR0YwYURvZ2MzUnlhVzVuTzF4dUlDQWdJQzhxS2lCVWFHVWdaR2x6Y0d4aGVTQnVZVzFsSUdGemMyOWphV0YwWldRZ2QybDBhQ0IwYUdVZ2JHbHVheTRnS2k5Y2JpQWdJQ0J3ZFdKc2FXTWdaR2x6Y0d4aGVUODZJSE4wY21sdVp6dGNiaUFnSUNBdktpb2dWR2hsSUdKc2IyTnJJRWxFSUc5eUlHaGxZV1JsY2lCMGFHbHpJR3hwYm1zZ2NHOXBiblJ6SUhSdklIZHBkR2hwYmlCaElHWnBiR1VzSUdsbUlISmxiR1YyWVc1MExpQXFMMXh1SUNBZ0lIQjFZbXhwWXlCemRXSndZWFJvUHpvZ2MzUnlhVzVuTzF4dUlDQWdJQzhxS2lCSmN5QjBhR2x6SUd4cGJtc2dZVzRnWlcxaVpXUmtaV1FnYkdsdWF5QW9iMllnWm05eWJTQW5JVnRiYUdWc2JHOWRYU2NwUHlBcUwxeHVJQ0FnSUhCMVlteHBZeUJsYldKbFpEb2dZbTl2YkdWaGJqdGNiaUFnSUNBdktpb2dWR2hsSUhSNWNHVWdiMllnZEdocGN5QnNhVzVyTENCM2FHbGphQ0JrWlhSbGNtMXBibVZ6SUhkb1lYUWdKM04xWW5CaGRHZ25JSEpsWm1WeWN5QjBieXdnYVdZZ1lXNTVkR2hwYm1jdUlDb3ZYRzRnSUNBZ2NIVmliR2xqSUhSNWNHVTZJRndpWm1sc1pWd2lJSHdnWENKb1pXRmtaWEpjSWlCOElGd2lZbXh2WTJ0Y0lqdGNibHh1SUNBZ0lDOHFLaUJEY21WaGRHVWdZU0JzYVc1cklIUnZJR0VnYzNCbFkybG1hV01nWm1sc1pTNGdLaTljYmlBZ0lDQndkV0pzYVdNZ2MzUmhkR2xqSUdacGJHVW9jR0YwYURvZ2MzUnlhVzVuTENCbGJXSmxaRG9nWW05dmJHVmhiaUE5SUdaaGJITmxMQ0JrYVhOd2JHRjVQem9nYzNSeWFXNW5LVG9nVEdsdWF5QjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnVEdsdWF5aDdYRzRnSUNBZ0lDQWdJQ0FnSUNCd1lYUm9MRnh1SUNBZ0lDQWdJQ0FnSUNBZ1pXMWlaV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmthWE53YkdGNUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWaWNHRjBhRG9nZFc1a1pXWnBibVZrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSm1hV3hsWENJc1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJKYm1abGNpQjBhR1VnZEhsd1pTQnZaaUIwYUdVZ2JHbHVheUJtY205dElIUm9aU0JtZFd4c0lHbHVkR1Z5Ym1Gc0lHeHBibXNnY0dGMGFDNGdLaTljYmlBZ0lDQndkV0pzYVdNZ2MzUmhkR2xqSUdsdVptVnlLR3hwYm10d1lYUm9PaUJ6ZEhKcGJtY3NJR1Z0WW1Wa09pQmliMjlzWldGdUlEMGdabUZzYzJVc0lHUnBjM0JzWVhrL09pQnpkSEpwYm1jcE9pQk1hVzVySUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR3hwYm10d1lYUm9MbWx1WTJ4MVpHVnpLRndpSTE1Y0lpa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J6Y0d4cGRDQTlJR3hwYm10d1lYUm9Mbk53YkdsMEtGd2lJMTVjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdUR2x1YXk1aWJHOWpheWh6Y0d4cGRGc3dYU3dnYzNCc2FYUmJNVjBzSUdWdFltVmtMQ0JrYVhOd2JHRjVLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoc2FXNXJjR0YwYUM1cGJtTnNkV1JsY3loY0lpTmNJaWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCemNHeHBkQ0E5SUd4cGJtdHdZWFJvTG5Od2JHbDBLRndpSTF3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJNYVc1ckxtaGxZV1JsY2loemNHeHBkRnN3WFN3Z2MzQnNhWFJiTVYwc0lHVnRZbVZrTENCa2FYTndiR0Y1S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUhKbGRIVnliaUJNYVc1ckxtWnBiR1VvYkdsdWEzQmhkR2dzSUdWdFltVmtMQ0JrYVhOd2JHRjVLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaW9nUTNKbFlYUmxJR0VnYkdsdWF5QjBieUJoSUhOd1pXTnBabWxqSUdacGJHVWdZVzVrSUdobFlXUmxjaUJwYmlCMGFHRjBJR1pwYkdVdUlDb3ZYRzRnSUNBZ2NIVmliR2xqSUhOMFlYUnBZeUJvWldGa1pYSW9jR0YwYURvZ2MzUnlhVzVuTENCb1pXRmtaWEk2SUhOMGNtbHVaeXdnWlcxaVpXUS9PaUJpYjI5c1pXRnVMQ0JrYVhOd2JHRjVQem9nYzNSeWFXNW5LVG9nVEdsdWF5QjdYRzRnSUNBZ0lDQWdJQzh2SUVobFlXUmxjbk1nYm1WbFpDQjBieUJpWlNCdWIzSnRZV3hwZW1Wa0lIUnZJR0ZzY0doaExXNTFiV1Z5YVdNZ0ppQjNhWFJvSUdWNGRISmhJSE53WVdOcGJtY2djbVZ0YjNabFpDNWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJNYVc1cktIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhCaGRHZ3NYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJXSmxaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHUnBjM0JzWVhrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZFdKd1lYUm9PaUJ1YjNKdFlXeHBlbVZJWldGa1pYSkdiM0pNYVc1cktHaGxZV1JsY2lrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwZVhCbE9pQmNJbWhsWVdSbGNsd2lMRnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lvZ1EzSmxZWFJsSUdFZ2JHbHVheUIwYnlCaElITndaV05wWm1saklHWnBiR1VnWVc1a0lHSnNiMk5ySUdsdUlIUm9ZWFFnWm1sc1pTNGdLaTljYmlBZ0lDQndkV0pzYVdNZ2MzUmhkR2xqSUdKc2IyTnJLSEJoZEdnNklITjBjbWx1Wnl3Z1lteHZZMnRKWkRvZ2MzUnlhVzVuTENCbGJXSmxaRDg2SUdKdmIyeGxZVzRzSUdScGMzQnNZWGsvT2lCemRISnBibWNwT2lCTWFXNXJJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzVsZHlCTWFXNXJLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIQmhkR2dzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiV0psWkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JwYzNCc1lYa3NYRzRnSUNBZ0lDQWdJQ0FnSUNCemRXSndZWFJvT2lCaWJHOWphMGxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSmliRzlqYTF3aUxGeHVJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaW9nVEc5aFpDQmhJR3hwYm1zZ1puSnZiU0JwZENkeklISmhkeUJLVTA5T0lISmxjSEpsYzJWdWRHRjBhVzl1TGlBcUwxeHVJQ0FnSUhCMVlteHBZeUJ6ZEdGMGFXTWdabkp2YlU5aWFtVmpkQ2h2WW1wbFkzUTZJRXB6YjI1TWFXNXJLVG9nVEdsdWF5QjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnVEdsdWF5aHZZbXBsWTNRcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4cUtpQkRjbVZoZEdVZ1lTQnNhVzVySUdKNUlIQmhjbk5wYm1jZ2FYUW5jeUJwYm5SbGNtbHZjaUJ3WVhKMElDaHBibk5wWkdVZ2IyWWdkR2hsSUNkYlcxMWRKeWt1SUNvdlhHNGdJQ0FnY0hWaWJHbGpJSE4wWVhScFl5QndZWEp6WlVsdWJtVnlLSEpoZDJ4cGJtczZJSE4wY21sdVp5azZJRXhwYm1zZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnVzJ4cGJtc3NJR1JwYzNCc1lYbGRJRDBnYzNCc2FYUlBibFZ1WlhOallYQmxaRkJwY0dVb2NtRjNiR2x1YXlrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCTWFXNXJMbWx1Wm1WeUtHeHBibXNzSUdaaGJITmxMQ0JrYVhOd2JHRjVLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndjbWwyWVhSbElHTnZibk4wY25WamRHOXlLR1pwWld4a2N6b2dVR0Z5ZEdsaGJEeE1hVzVyUGlrZ2UxeHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0hSb2FYTXNJR1pwWld4a2N5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5b3FJRlZ3WkdGMFpTQjBhR2x6SUd4cGJtc2dkMmwwYUNCaElHNWxkeUJ3WVhSb0xpQXFMMXh1SUNBZ0lIQjFZbXhwWXlCM2FYUm9VR0YwYUNod1lYUm9PaUJ6ZEhKcGJtY3BPaUJNYVc1cklIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJNYVc1cktFOWlhbVZqZEM1aGMzTnBaMjRvZTMwc0lIUm9hWE1zSUhzZ2NHRjBhQ0I5S1NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcUlGSmxkSFZ5YmlCaElHNWxkeUJzYVc1cklIZG9hV05vSUhCdmFXNTBjeUIwYnlCMGFHVWdjMkZ0WlNCc2IyTmhkR2x2YmlCaWRYUWdkMmwwYUNCaElHNWxkeUJrYVhOd2JHRjVJSFpoYkhWbExpQXFMMXh1SUNBZ0lIQjFZbXhwWXlCM2FYUm9SR2x6Y0d4aGVTaGthWE53YkdGNVB6b2djM1J5YVc1bktUb2dUR2x1YXlCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dUR2x1YXloUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCMGFHbHpMQ0I3SUdScGMzQnNZWGtnZlNrcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4cUtpQlNaWFIxY200Z1lTQnVaWGNnYkdsdWF5QjNhR2xqYUNCb1lYTWdkR2hsSUdkcGRtVnVJR1Z0WW1Wa1pHVmtJSE4wWVhSMWN5NGdLaTljYmlBZ0lDQndkV0pzYVdNZ2QybDBhRVZ0WW1Wa0tHVnRZbVZrT2lCaWIyOXNaV0Z1S1RvZ1RHbHVheUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1WdFltVmtJRDA5SUdWdFltVmtLU0J5WlhSMWNtNGdkR2hwY3p0Y2JseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtVjNJRXhwYm1zb1QySnFaV04wTG1GemMybG5iaWg3ZlN3Z2RHaHBjeXdnZXlCbGJXSmxaQ0I5S1NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcUlFTnZiblpsY25RZ1lTQm1hV3hsSUd4cGJtc2dhVzUwYnlCaElHeHBibXNnZEc4Z1lTQnpjR1ZqYVdacFl5Qm9aV0ZrWlhJdUlDb3ZYRzRnSUNBZ2NIVmliR2xqSUhkcGRHaElaV0ZrWlhJb2FHVmhaR1Z5T2lCemRISnBibWNwT2lCTWFXNXJJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRXhwYm1zdWFHVmhaR1Z5S0hSb2FYTXVjR0YwYUN3Z2FHVmhaR1Z5TENCMGFHbHpMbVZ0WW1Wa0xDQjBhR2x6TG1ScGMzQnNZWGtwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCRGIyNTJaWEowSUdFZ1ptbHNaU0JzYVc1cklHbHVkRzhnWVNCc2FXNXJJSFJ2SUdFZ2MzQmxZMmxtYVdOaUlHeHZZMnN1SUNvdlhHNGdJQ0FnY0hWaWJHbGpJSGRwZEdoQ2JHOWpheWhpYkc5amF6b2djM1J5YVc1bktUb2dUR2x1YXlCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCTWFXNXJMbUpzYjJOcktIUm9hWE11Y0dGMGFDd2dZbXh2WTJzc0lIUm9hWE11WlcxaVpXUXNJSFJvYVhNdVpHbHpjR3hoZVNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcUlFTm9aV05yY3lCbWIzSWdiR2x1YXlCbGNYVmhiR2wwZVNBb2FTNWxMaXdnZEdoaGRDQjBhR1VnYkdsdWEzTWdZWEpsSUhCdmFXNTBhVzVuSUhSdklIUm9aU0J6WVcxbElHVjRZV04wSUd4dlkyRjBhVzl1S1M0Z0tpOWNiaUFnSUNCd2RXSnNhV01nWlhGMVlXeHpLRzkwYUdWeU9pQk1hVzVyS1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h2ZEdobGNpQTlQU0IxYm1SbFptbHVaV1FnZkh3Z2IzUm9aWElnUFQwZ2JuVnNiQ2tnY21WMGRYSnVJR1poYkhObE8xeHVYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5CaGRHZ2dQVDBnYjNSb1pYSXVjR0YwYUNBbUppQjBhR2x6TG5SNWNHVWdQVDBnYjNSb1pYSXVkSGx3WlNBbUppQjBhR2x6TG5OMVluQmhkR2dnUFQwZ2IzUm9aWEl1YzNWaWNHRjBhRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaW9nUTI5dWRtVnlkQ0IwYUdseklHeHBibXNnZEc4Z2FYUW5jeUJ0WVhKclpHOTNiaUJ5WlhCeVpYTmxiblJoZEdsdmJpNGdLaTljYmlBZ0lDQndkV0pzYVdNZ2RHOVRkSEpwYm1jb0tUb2djM1J5YVc1bklIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YldGeWEyUnZkMjRvS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lvZ1EyOXVkbVZ5ZENCMGFHbHpJR3hwYm1zZ2RHOGdZU0J5WVhjZ2IySnFaV04wSUhkb2FXTm9JR2x6SUhObGNtbGhiR2w2WVhScGIyNHRabkpwWlc1a2JIa3VJQ292WEc0Z0lDQWdjSFZpYkdsaklIUnZUMkpxWldOMEtDazZJRXB6YjI1TWFXNXJJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIQmhkR2c2SUhSb2FYTXVjR0YwYUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dVNklIUm9hWE11ZEhsd1pTeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVluQmhkR2c2SUhSb2FYTXVjM1ZpY0dGMGFDeGNiaUFnSUNBZ0lDQWdJQ0FnSUdScGMzQnNZWGs2SUhSb2FYTXVaR2x6Y0d4aGVTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdWdFltVmtPaUIwYUdsekxtVnRZbVZrTEZ4dUlDQWdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4cUtpQkRiMjUyWlhKMElHRnVlU0JzYVc1cklHbHVkRzhnWVNCc2FXNXJJSFJ2SUdsMGN5Qm1hV3hsTGlBcUwxeHVJQ0FnSUhCMVlteHBZeUIwYjBacGJHVW9LVG9nVEdsdWF5QjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQk1hVzVyTG1acGJHVW9kR2hwY3k1d1lYUm9MQ0IwYUdsekxtVnRZbVZrTENCMGFHbHpMbVJwYzNCc1lYa3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJEYjI1MlpYSjBJSFJvYVhNZ2JHbHVheUJwYm5SdklHRnVJR1Z0WW1Wa1pHVmtJR3hwYm1zdUlDb3ZYRzRnSUNBZ2NIVmliR2xqSUhSdlJXMWlaV1FvS1RvZ1RHbHVheUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuZHBkR2hGYldKbFpDaDBjblZsS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lvZ1EyOXVkbVZ5ZENCMGFHbHpJR3hwYm1zZ2FXNTBieUJoSUc1dmJpMWxiV0psWkdSbFpDQnNhVzVyTGlBcUwxeHVJQ0FnSUhCMVlteHBZeUJtY205dFJXMWlaV1FvS1RvZ1RHbHVheUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuZHBkR2hGYldKbFpDaG1ZV3h6WlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcUlFTnZiblpsY25RZ2RHaHBjeUJzYVc1cklIUnZJRzFoY210a2IzZHVJSE52SUdsMElHTmhiaUJpWlNCeVpXNWtaWEpsWkM0Z0tpOWNiaUFnSUNCd2RXSnNhV01nYldGeWEyUnZkMjRvS1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSEpsYzNWc2RDQTlJQ2gwYUdsekxtVnRZbVZrSUQ4Z1hDSWhYQ0lnT2lCY0lsd2lLU0FySUZ3aVcxdGNJaUFySUhSb2FYTXViMkp6YVdScFlXNU1hVzVyS0NrN1hHNGdJQ0FnSUNBZ0lISmxjM1ZzZENBclBTQmNJbnhjSWp0Y2JpQWdJQ0FnSUNBZ2NtVnpkV3gwSUNzOUlIUm9hWE11WkdsemNHeGhlVTl5UkdWbVlYVnNkQ2dwTzF4dUlDQWdJQ0FnSUNCeVpYTjFiSFFnS3owZ1hDSmRYVndpTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJQWW5SaGFXNGdkR2hsSUdScGMzQnNZWGtnWm05eUlIUm9hWE1nYkdsdWF5QnBaaUJ3Y21WelpXNTBMQ0J2Y2lCeVpYUjFjbTRnWVNCemFXMXdiR1VnWkdWbVlYVnNkQ0JrYVhOd2JHRjVMaUFxTDF4dUlDQWdJSEIxWW14cFl5QmthWE53YkdGNVQzSkVaV1poZFd4MEtDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVrYVhOd2JHRjVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVrYVhOd2JHRjVPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsYzNWc2RDQTlJR2RsZEVacGJHVlVhWFJzWlNoMGFHbHpMbkJoZEdncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZEhsd1pTQTlQU0JjSW1obFlXUmxjbHdpSUh4OElIUm9hWE11ZEhsd1pTQTlQU0JjSW1Kc2IyTnJYQ0lwSUhKbGMzVnNkQ0FyUFNCY0lpQStJRndpSUNzZ2RHaHBjeTV6ZFdKd1lYUm9PMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcUlFTnZiblpsY25RZ2RHaGxJR2x1Ym1WeUlIQmhjblFnYjJZZ2RHaGxJR3hwYm1zZ2RHOGdjMjl0WlhSb2FXNW5JSFJvWVhRZ1QySnphV1JwWVc0Z1kyRnVJRzl3Wlc0Z0x5QjFibVJsY25OMFlXNWtMaUFxTDF4dUlDQWdJSEIxWW14cFl5QnZZbk5wWkdsaGJreHBibXNvS1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWlhOallYQmxaQ0E5SUhSb2FYTXVjR0YwYUM1eVpYQnNZV05sS0Z3aWZGd2lMQ0JjSWx4Y1hGeDhYQ0lwTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1MGVYQmxJRDA5SUZ3aWFHVmhaR1Z5WENJcElISmxkSFZ5YmlCbGMyTmhjR1ZrSUNzZ1hDSWpYQ0lnS3lCMGFHbHpMbk4xWW5CaGRHZy9MbkpsY0d4aFkyVW9YQ0o4WENJc0lGd2lYRnhjWEh4Y0lpazdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMblI1Y0dVZ1BUMGdYQ0ppYkc5amExd2lLU0J5WlhSMWNtNGdaWE5qWVhCbFpDQXJJRndpSTE1Y0lpQXJJSFJvYVhNdWMzVmljR0YwYUQ4dWNtVndiR0ZqWlNoY0lueGNJaXdnWENKY1hGeGNmRndpS1R0Y2JpQWdJQ0FnSUNBZ1pXeHpaU0J5WlhSMWNtNGdaWE5qWVhCbFpEdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dWR2hsSUhOMGNtbHdjR1ZrSUc1aGJXVWdiMllnZEdobElHWnBiR1VnZEdocGN5QnNhVzVySUhCdmFXNTBjeUIwYnk0Z0tpOWNiaUFnSUNCd2RXSnNhV01nWm1sc1pVNWhiV1VvS1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdkbGRFWnBiR1ZVYVhSc1pTaDBhR2x6TG5CaGRHZ3BPMXh1SUNBZ0lIMWNibjFjYmx4dUx5b3FJRk5sY21saGJHbDZaV1FnWm05eWJTQnZaaUJoSUd4cGJtc3VYRzRnS2lCQWFHbGtaR1Z1WEc0Z0tpOWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdTbk52Ymt4cGJtc2dlMXh1SUNBZ0lDOHFLaUJVYUdVZ1ptbHNaU0J3WVhSb0lIUm9hWE1nYkdsdWF5QndiMmx1ZEhNZ2RHOHVJQ292WEc0Z0lDQWdjR0YwYURvZ2MzUnlhVzVuTzF4dUlDQWdJQzhxS2lCVWFHVWdaR2x6Y0d4aGVTQnVZVzFsSUdGemMyOWphV0YwWldRZ2QybDBhQ0IwYUdVZ2JHbHVheTRnS2k5Y2JpQWdJQ0JrYVhOd2JHRjVQem9nYzNSeWFXNW5PMXh1SUNBZ0lDOHFLaUJVYUdVZ1lteHZZMnNnU1VRZ2IzSWdhR1ZoWkdWeUlIUm9hWE1nYkdsdWF5QndiMmx1ZEhNZ2RHOGdkMmwwYUdsdUlHRWdabWxzWlN3Z2FXWWdjbVZzWlhaaGJuUXVJQ292WEc0Z0lDQWdjM1ZpY0dGMGFEODZJSE4wY21sdVp6dGNiaUFnSUNBdktpb2dTWE1nZEdocGN5QnNhVzVySUdGdUlHVnRZbVZrWkdWa0lHeHBibXNnS0c5bUlHWnZjbTBnSnlGYlcyaGxiR3h2WFYwbktUOGdLaTljYmlBZ0lDQmxiV0psWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdJQ0F2S2lvZ1ZHaGxJSFI1Y0dVZ2IyWWdkR2hwY3lCc2FXNXJMQ0IzYUdsamFDQmtaWFJsY20xcGJtVnpJSGRvWVhRZ0ozTjFZbkJoZEdnbklISmxabVZ5Y3lCMGJ5d2dhV1lnWVc1NWRHaHBibWN1SUNvdlhHNGdJQ0FnZEhsd1pUb2dYQ0ptYVd4bFhDSWdmQ0JjSW1obFlXUmxjbHdpSUh3Z1hDSmliRzlqYTF3aU8xeHVmVnh1WEc0dktpb2dVM0JzYVhRZ2IyNGdkVzVsYzJOaGNHVmtJSEJwY0dWeklHbHVJR0Z1SUdsdWJtVnlJR3hwYm1zdVhHNGdLaUJBYUdsa1pHVnVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCemNHeHBkRTl1Vlc1bGMyTmhjR1ZrVUdsd1pTaHNhVzVyT2lCemRISnBibWNwT2lCYmMzUnlhVzVuTENCemRISnBibWNnZkNCMWJtUmxabWx1WldSZElIdGNiaUFnSUNCc1pYUWdjR2x3WlNBOUlDMHhPMXh1SUNBZ0lIZG9hV3hsSUNnb2NHbHdaU0E5SUd4cGJtc3VhVzVrWlhoUFppaGNJbnhjSWl3Z2NHbHdaU0FySURFcEtTQStQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h3YVhCbElENGdNQ0FtSmlCc2FXNXJXM0JwY0dVZ0xTQXhYU0E5UFNCY0lseGNYRnhjSWlrZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCYmJHbHVheTV6ZFdKemRISnBibWNvTUN3Z2NHbHdaU2t1Y21Wd2JHRmpaU2d2WEZ4Y1hGeGNmQzluTENCY0lueGNJaWtzSUd4cGJtc3VjM1ZpYzNSeWFXNW5LSEJwY0dVZ0t5QXhLVjA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlGdHNhVzVyTG5KbGNHeGhZMlVvTDF4Y1hGeGNYSHd2Wnl3Z1hDSjhYQ0lwTENCMWJtUmxabWx1WldSZE8xeHVmVnh1SWl3Z0ltTnZibk4wSUVGTVNVRlRJRDBnVTNsdFltOXNMbVp2Y2lnbmVXRnRiQzVoYkdsaGN5Y3BPMXh1WTI5dWMzUWdSRTlESUQwZ1UzbHRZbTlzTG1admNpZ25lV0Z0YkM1a2IyTjFiV1Z1ZENjcE8xeHVZMjl1YzNRZ1RVRlFJRDBnVTNsdFltOXNMbVp2Y2lnbmVXRnRiQzV0WVhBbktUdGNibU52Ym5OMElGQkJTVklnUFNCVGVXMWliMnd1Wm05eUtDZDVZVzFzTG5CaGFYSW5LVHRjYm1OdmJuTjBJRk5EUVV4QlVpQTlJRk41YldKdmJDNW1iM0lvSjNsaGJXd3VjMk5oYkdGeUp5azdYRzVqYjI1emRDQlRSVkVnUFNCVGVXMWliMnd1Wm05eUtDZDVZVzFzTG5ObGNTY3BPMXh1WTI5dWMzUWdUazlFUlY5VVdWQkZJRDBnVTNsdFltOXNMbVp2Y2lnbmVXRnRiQzV1YjJSbExuUjVjR1VuS1R0Y2JtTnZibk4wSUdselFXeHBZWE1nUFNBb2JtOWtaU2tnUFQ0Z0lTRnViMlJsSUNZbUlIUjVjR1Z2WmlCdWIyUmxJRDA5UFNBbmIySnFaV04wSnlBbUppQnViMlJsVzA1UFJFVmZWRmxRUlYwZ1BUMDlJRUZNU1VGVE8xeHVZMjl1YzNRZ2FYTkViMk4xYldWdWRDQTlJQ2h1YjJSbEtTQTlQaUFoSVc1dlpHVWdKaVlnZEhsd1pXOW1JRzV2WkdVZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUc1dlpHVmJUazlFUlY5VVdWQkZYU0E5UFQwZ1JFOURPMXh1WTI5dWMzUWdhWE5OWVhBZ1BTQW9ibTlrWlNrZ1BUNGdJU0Z1YjJSbElDWW1JSFI1Y0dWdlppQnViMlJsSUQwOVBTQW5iMkpxWldOMEp5QW1KaUJ1YjJSbFcwNVBSRVZmVkZsUVJWMGdQVDA5SUUxQlVEdGNibU52Ym5OMElHbHpVR0ZwY2lBOUlDaHViMlJsS1NBOVBpQWhJVzV2WkdVZ0ppWWdkSGx3Wlc5bUlHNXZaR1VnUFQwOUlDZHZZbXBsWTNRbklDWW1JRzV2WkdWYlRrOUVSVjlVV1ZCRlhTQTlQVDBnVUVGSlVqdGNibU52Ym5OMElHbHpVMk5oYkdGeUlEMGdLRzV2WkdVcElEMCtJQ0VoYm05a1pTQW1KaUIwZVhCbGIyWWdibTlrWlNBOVBUMGdKMjlpYW1WamRDY2dKaVlnYm05a1pWdE9UMFJGWDFSWlVFVmRJRDA5UFNCVFEwRk1RVkk3WEc1amIyNXpkQ0JwYzFObGNTQTlJQ2h1YjJSbEtTQTlQaUFoSVc1dlpHVWdKaVlnZEhsd1pXOW1JRzV2WkdVZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUc1dlpHVmJUazlFUlY5VVdWQkZYU0E5UFQwZ1UwVlJPMXh1Wm5WdVkzUnBiMjRnYVhORGIyeHNaV04wYVc5dUtHNXZaR1VwSUh0Y2JpQWdJQ0JwWmlBb2JtOWtaU0FtSmlCMGVYQmxiMllnYm05a1pTQTlQVDBnSjI5aWFtVmpkQ2NwWEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvYm05a1pWdE9UMFJGWDFSWlVFVmRLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUUxQlVEcGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdVMFZST2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1ZlZ4dVpuVnVZM1JwYjI0Z2FYTk9iMlJsS0c1dlpHVXBJSHRjYmlBZ0lDQnBaaUFvYm05a1pTQW1KaUIwZVhCbGIyWWdibTlrWlNBOVBUMGdKMjlpYW1WamRDY3BYRzRnSUNBZ0lDQWdJSE4zYVhSamFDQW9ibTlrWlZ0T1QwUkZYMVJaVUVWZEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRUZNU1VGVE9seHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQk5RVkE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZORFFVeEJVanBjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnVTBWUk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dWZWeHVZMjl1YzNRZ2FHRnpRVzVqYUc5eUlEMGdLRzV2WkdVcElEMCtJQ2hwYzFOallXeGhjaWh1YjJSbEtTQjhmQ0JwYzBOdmJHeGxZM1JwYjI0b2JtOWtaU2twSUNZbUlDRWhibTlrWlM1aGJtTm9iM0k3WEc1Y2JtVjRjRzl5ZENCN0lFRk1TVUZUTENCRVQwTXNJRTFCVUN3Z1RrOUVSVjlVV1ZCRkxDQlFRVWxTTENCVFEwRk1RVklzSUZORlVTd2dhR0Z6UVc1amFHOXlMQ0JwYzBGc2FXRnpMQ0JwYzBOdmJHeGxZM1JwYjI0c0lHbHpSRzlqZFcxbGJuUXNJR2x6VFdGd0xDQnBjMDV2WkdVc0lHbHpVR0ZwY2l3Z2FYTlRZMkZzWVhJc0lHbHpVMlZ4SUgwN1hHNGlMQ0FpYVcxd2IzSjBJSHNnYVhORWIyTjFiV1Z1ZEN3Z2FYTk9iMlJsTENCcGMxQmhhWElzSUdselEyOXNiR1ZqZEdsdmJpd2dhWE5OWVhBc0lHbHpVMlZ4TENCcGMxTmpZV3hoY2l3Z2FYTkJiR2xoY3lCOUlHWnliMjBnSnk0dmJtOWtaWE12YVdSbGJuUnBkSGt1YW5Nbk8xeHVYRzVqYjI1emRDQkNVa1ZCU3lBOUlGTjViV0p2YkNnblluSmxZV3NnZG1semFYUW5LVHRjYm1OdmJuTjBJRk5MU1ZBZ1BTQlRlVzFpYjJ3b0ozTnJhWEFnWTJocGJHUnlaVzRuS1R0Y2JtTnZibk4wSUZKRlRVOVdSU0E5SUZONWJXSnZiQ2duY21WdGIzWmxJRzV2WkdVbktUdGNiaThxS2x4dUlDb2dRWEJ3YkhrZ1lTQjJhWE5wZEc5eUlIUnZJR0Z1SUVGVFZDQnViMlJsSUc5eUlHUnZZM1Z0Wlc1MExseHVJQ3BjYmlBcUlGZGhiR3R6SUhSb2NtOTFaMmdnZEdobElIUnlaV1VnS0dSbGNIUm9MV1pwY25OMEtTQnpkR0Z5ZEdsdVp5Qm1jbTl0SUdCdWIyUmxZQ3dnWTJGc2JHbHVaeUJoWEc0Z0tpQmdkbWx6YVhSdmNtQWdablZ1WTNScGIyNGdkMmwwYUNCMGFISmxaU0JoY21kMWJXVnVkSE02WEc0Z0tpQWdJQzBnWUd0bGVXQTZJRVp2Y2lCelpYRjFaVzVqWlNCMllXeDFaWE1nWVc1a0lHMWhjQ0JnVUdGcGNtQXNJSFJvWlNCdWIyUmxKM01nYVc1a1pYZ2dhVzRnZEdobFhHNGdLaUFnSUNBZ1kyOXNiR1ZqZEdsdmJpNGdWMmwwYUdsdUlHRWdZRkJoYVhKZ0xDQmdKMnRsZVNkZ0lHOXlJR0FuZG1Gc2RXVW5ZQ3dnWTI5eWNtVnpjRzl1WkdsdVoyeDVMbHh1SUNvZ0lDQWdJR0J1ZFd4c1lDQm1iM0lnZEdobElISnZiM1FnYm05a1pTNWNiaUFxSUNBZ0xTQmdibTlrWldBNklGUm9aU0JqZFhKeVpXNTBJRzV2WkdVdVhHNGdLaUFnSUMwZ1lIQmhkR2hnT2lCVWFHVWdZVzVqWlhOMGNua2diMllnZEdobElHTjFjbkpsYm5RZ2JtOWtaUzVjYmlBcVhHNGdLaUJVYUdVZ2NtVjBkWEp1SUhaaGJIVmxJRzltSUhSb1pTQjJhWE5wZEc5eUlHMWhlU0JpWlNCMWMyVmtJSFJ2SUdOdmJuUnliMndnZEdobElIUnlZWFpsY25OaGJEcGNiaUFxSUNBZ0xTQmdkVzVrWldacGJtVmtZQ0FvWkdWbVlYVnNkQ2s2SUVSdklHNXZkR2hwYm1jZ1lXNWtJR052Ym5ScGJuVmxYRzRnS2lBZ0lDMGdZSFpwYzJsMExsTkxTVkJnT2lCRWJ5QnViM1FnZG1semFYUWdkR2hsSUdOb2FXeGtjbVZ1SUc5bUlIUm9hWE1nYm05a1pTd2dZMjl1ZEdsdWRXVWdkMmwwYUNCdVpYaDBYRzRnS2lBZ0lDQWdjMmxpYkdsdVoxeHVJQ29nSUNBdElHQjJhWE5wZEM1Q1VrVkJTMkE2SUZSbGNtMXBibUYwWlNCMGNtRjJaWEp6WVd3Z1kyOXRjR3hsZEdWc2VWeHVJQ29nSUNBdElHQjJhWE5wZEM1U1JVMVBWa1ZnT2lCU1pXMXZkbVVnZEdobElHTjFjbkpsYm5RZ2JtOWtaU3dnZEdobGJpQmpiMjUwYVc1MVpTQjNhWFJvSUhSb1pTQnVaWGgwSUc5dVpWeHVJQ29nSUNBdElHQk9iMlJsWURvZ1VtVndiR0ZqWlNCMGFHVWdZM1Z5Y21WdWRDQnViMlJsTENCMGFHVnVJR052Ym5ScGJuVmxJR0o1SUhacGMybDBhVzVuSUdsMFhHNGdLaUFnSUMwZ1lHNTFiV0psY21BNklGZG9hV3hsSUdsMFpYSmhkR2x1WnlCMGFHVWdhWFJsYlhNZ2IyWWdZU0J6WlhGMVpXNWpaU0J2Y2lCdFlYQXNJSE5sZENCMGFHVWdhVzVrWlhoY2JpQXFJQ0FnSUNCdlppQjBhR1VnYm1WNGRDQnpkR1Z3TGlCVWFHbHpJR2x6SUhWelpXWjFiQ0JsYzNCbFkybGhiR3g1SUdsbUlIUm9aU0JwYm1SbGVDQnZaaUIwYUdVZ1kzVnljbVZ1ZEZ4dUlDb2dJQ0FnSUc1dlpHVWdhR0Z6SUdOb1lXNW5aV1F1WEc0Z0tseHVJQ29nU1dZZ1lIWnBjMmwwYjNKZ0lHbHpJR0VnYzJsdVoyeGxJR1oxYm1OMGFXOXVMQ0JwZENCM2FXeHNJR0psSUdOaGJHeGxaQ0IzYVhSb0lHRnNiQ0IyWVd4MVpYTmNiaUFxSUdWdVkyOTFiblJsY21Wa0lHbHVJSFJvWlNCMGNtVmxMQ0JwYm1Oc2RXUnBibWNnWlM1bkxpQmdiblZzYkdBZ2RtRnNkV1Z6TGlCQmJIUmxjbTVoZEdsMlpXeDVMRnh1SUNvZ2MyVndZWEpoZEdVZ2RtbHphWFJ2Y2lCbWRXNWpkR2x2Ym5NZ2JXRjVJR0psSUdSbFptbHVaV1FnWm05eUlHVmhZMmdnWUUxaGNHQXNJR0JRWVdseVlDd2dZRk5sY1dBc1hHNGdLaUJnUVd4cFlYTmdJR0Z1WkNCZ1UyTmhiR0Z5WUNCdWIyUmxMaUJVYnlCa1pXWnBibVVnZEdobElITmhiV1VnZG1semFYUnZjaUJtZFc1amRHbHZiaUJtYjNJZ2JXOXlaU0IwYUdGdVhHNGdLaUJ2Ym1VZ2JtOWtaU0IwZVhCbExDQjFjMlVnZEdobElHQkRiMnhzWldOMGFXOXVZQ0FvYldGd0lHRnVaQ0J6WlhFcExDQmdWbUZzZFdWZ0lDaHRZWEFzSUhObGNTQW1JSE5qWVd4aGNpbGNiaUFxSUdGdVpDQmdUbTlrWldBZ0tHRnNhV0Z6TENCdFlYQXNJSE5sY1NBbUlITmpZV3hoY2lrZ2RHRnlaMlYwY3k0Z1QyWWdZV3hzSUhSb1pYTmxMQ0J2Ym14NUlIUm9aU0J0YjNOMFhHNGdLaUJ6Y0dWamFXWnBZeUJrWldacGJtVmtJRzl1WlNCM2FXeHNJR0psSUhWelpXUWdabTl5SUdWaFkyZ2dibTlrWlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnZG1semFYUW9ibTlrWlN3Z2RtbHphWFJ2Y2lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFpwYzJsMGIzSmZJRDBnYVc1cGRGWnBjMmwwYjNJb2RtbHphWFJ2Y2lrN1hHNGdJQ0FnYVdZZ0tHbHpSRzlqZFcxbGJuUW9ibTlrWlNrcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1kyUWdQU0IyYVhOcGRGOG9iblZzYkN3Z2JtOWtaUzVqYjI1MFpXNTBjeXdnZG1semFYUnZjbDhzSUU5aWFtVmpkQzVtY21WbGVtVW9XMjV2WkdWZEtTazdYRzRnSUNBZ0lDQWdJR2xtSUNoalpDQTlQVDBnVWtWTlQxWkZLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtOWtaUzVqYjI1MFpXNTBjeUE5SUc1MWJHdzdYRzRnSUNBZ2ZWeHVJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdkbWx6YVhSZktHNTFiR3dzSUc1dlpHVXNJSFpwYzJsMGIzSmZMQ0JQWW1wbFkzUXVabkpsWlhwbEtGdGRLU2s3WEc1OVhHNHZMeUJYYVhSb2IzVjBJSFJvWlNCZ1lYTWdjM2x0WW05c1lDQmpZWE4wY3l3Z1ZGTWdaR1ZqYkdGeVpYTWdkR2hsYzJVZ2FXNGdkR2hsSUdCMmFYTnBkR0JjYmk4dklHNWhiV1Z6Y0dGalpTQjFjMmx1WnlCZ2RtRnlZQ3dnWW5WMElIUm9aVzRnWTI5dGNHeGhhVzV6SUdGaWIzVjBJSFJvWVhRZ1ltVmpZWFZ6WlZ4dUx5OGdZSFZ1YVhGMVpTQnplVzFpYjJ4Z0lHMTFjM1FnWW1VZ1lHTnZibk4wWUM1Y2JpOHFLaUJVWlhKdGFXNWhkR1VnZG1semFYUWdkSEpoZG1WeWMyRnNJR052YlhCc1pYUmxiSGtnS2k5Y2JuWnBjMmwwTGtKU1JVRkxJRDBnUWxKRlFVczdYRzR2S2lvZ1JHOGdibTkwSUhacGMybDBJSFJvWlNCamFHbHNaSEpsYmlCdlppQjBhR1VnWTNWeWNtVnVkQ0J1YjJSbElDb3ZYRzUyYVhOcGRDNVRTMGxRSUQwZ1UwdEpVRHRjYmk4cUtpQlNaVzF2ZG1VZ2RHaGxJR04xY25KbGJuUWdibTlrWlNBcUwxeHVkbWx6YVhRdVVrVk5UMVpGSUQwZ1VrVk5UMVpGTzF4dVpuVnVZM1JwYjI0Z2RtbHphWFJmS0d0bGVTd2dibTlrWlN3Z2RtbHphWFJ2Y2l3Z2NHRjBhQ2tnZTF4dUlDQWdJR052Ym5OMElHTjBjbXdnUFNCallXeHNWbWx6YVhSdmNpaHJaWGtzSUc1dlpHVXNJSFpwYzJsMGIzSXNJSEJoZEdncE8xeHVJQ0FnSUdsbUlDaHBjMDV2WkdVb1kzUnliQ2tnZkh3Z2FYTlFZV2x5S0dOMGNtd3BLU0I3WEc0Z0lDQWdJQ0FnSUhKbGNHeGhZMlZPYjJSbEtHdGxlU3dnY0dGMGFDd2dZM1J5YkNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMmFYTnBkRjhvYTJWNUxDQmpkSEpzTENCMmFYTnBkRzl5TENCd1lYUm9LVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpkSEpzSUNFOVBTQW5jM2x0WW05c0p5a2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2FYTkRiMnhzWldOMGFXOXVLRzV2WkdVcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCd1lYUm9JRDBnVDJKcVpXTjBMbVp5WldWNlpTaHdZWFJvTG1OdmJtTmhkQ2h1YjJSbEtTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHNXZaR1V1YVhSbGJYTXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqYVNBOUlIWnBjMmwwWHlocExDQnViMlJsTG1sMFpXMXpXMmxkTENCMmFYTnBkRzl5TENCd1lYUm9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdOcElEMDlQU0FuYm5WdFltVnlKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FTQTlJR05wSUMwZ01UdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaGphU0E5UFQwZ1FsSkZRVXNwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCQ1VrVkJTenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hqYVNBOVBUMGdVa1ZOVDFaRktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc1dlpHVXVhWFJsYlhNdWMzQnNhV05sS0drc0lERXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcElDMDlJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdhV1lnS0dselVHRnBjaWh1YjJSbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NHRjBhQ0E5SUU5aWFtVmpkQzVtY21WbGVtVW9jR0YwYUM1amIyNWpZWFFvYm05a1pTa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWTJzZ1BTQjJhWE5wZEY4b0oydGxlU2NzSUc1dlpHVXVhMlY1TENCMmFYTnBkRzl5TENCd1lYUm9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYXlBOVBUMGdRbEpGUVVzcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUVKU1JVRkxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb1kyc2dQVDA5SUZKRlRVOVdSU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1YjJSbExtdGxlU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqZGlBOUlIWnBjMmwwWHlnbmRtRnNkV1VuTENCdWIyUmxMblpoYkhWbExDQjJhWE5wZEc5eUxDQndZWFJvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamRpQTlQVDBnUWxKRlFVc3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFSlNSVUZMTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9ZM1lnUFQwOUlGSkZUVTlXUlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdWIyUmxMblpoYkhWbElEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdZM1J5YkR0Y2JuMWNiaThxS2x4dUlDb2dRWEJ3YkhrZ1lXNGdZWE41Ym1NZ2RtbHphWFJ2Y2lCMGJ5QmhiaUJCVTFRZ2JtOWtaU0J2Y2lCa2IyTjFiV1Z1ZEM1Y2JpQXFYRzRnS2lCWFlXeHJjeUIwYUhKdmRXZG9JSFJvWlNCMGNtVmxJQ2hrWlhCMGFDMW1hWEp6ZENrZ2MzUmhjblJwYm1jZ1puSnZiU0JnYm05a1pXQXNJR05oYkd4cGJtY2dZVnh1SUNvZ1lIWnBjMmwwYjNKZ0lHWjFibU4wYVc5dUlIZHBkR2dnZEdoeVpXVWdZWEpuZFcxbGJuUnpPbHh1SUNvZ0lDQXRJR0JyWlhsZ09pQkdiM0lnYzJWeGRXVnVZMlVnZG1Gc2RXVnpJR0Z1WkNCdFlYQWdZRkJoYVhKZ0xDQjBhR1VnYm05a1pTZHpJR2x1WkdWNElHbHVJSFJvWlZ4dUlDb2dJQ0FnSUdOdmJHeGxZM1JwYjI0dUlGZHBkR2hwYmlCaElHQlFZV2x5WUN3Z1lDZHJaWGtuWUNCdmNpQmdKM1poYkhWbEoyQXNJR052Y25KbGMzQnZibVJwYm1kc2VTNWNiaUFxSUNBZ0lDQmdiblZzYkdBZ1ptOXlJSFJvWlNCeWIyOTBJRzV2WkdVdVhHNGdLaUFnSUMwZ1lHNXZaR1ZnT2lCVWFHVWdZM1Z5Y21WdWRDQnViMlJsTGx4dUlDb2dJQ0F0SUdCd1lYUm9ZRG9nVkdobElHRnVZMlZ6ZEhKNUlHOW1JSFJvWlNCamRYSnlaVzUwSUc1dlpHVXVYRzRnS2x4dUlDb2dWR2hsSUhKbGRIVnliaUIyWVd4MVpTQnZaaUIwYUdVZ2RtbHphWFJ2Y2lCdFlYa2dZbVVnZFhObFpDQjBieUJqYjI1MGNtOXNJSFJvWlNCMGNtRjJaWEp6WVd3NlhHNGdLaUFnSUMwZ1lGQnliMjFwYzJWZ09pQk5kWE4wSUhKbGMyOXNkbVVnZEc4Z2IyNWxJRzltSUhSb1pTQm1iMnhzYjNkcGJtY2dkbUZzZFdWelhHNGdLaUFnSUMwZ1lIVnVaR1ZtYVc1bFpHQWdLR1JsWm1GMWJIUXBPaUJFYnlCdWIzUm9hVzVuSUdGdVpDQmpiMjUwYVc1MVpWeHVJQ29nSUNBdElHQjJhWE5wZEM1VFMwbFFZRG9nUkc4Z2JtOTBJSFpwYzJsMElIUm9aU0JqYUdsc1pISmxiaUJ2WmlCMGFHbHpJRzV2WkdVc0lHTnZiblJwYm5WbElIZHBkR2dnYm1WNGRGeHVJQ29nSUNBZ0lITnBZbXhwYm1kY2JpQXFJQ0FnTFNCZ2RtbHphWFF1UWxKRlFVdGdPaUJVWlhKdGFXNWhkR1VnZEhKaGRtVnljMkZzSUdOdmJYQnNaWFJsYkhsY2JpQXFJQ0FnTFNCZ2RtbHphWFF1VWtWTlQxWkZZRG9nVW1WdGIzWmxJSFJvWlNCamRYSnlaVzUwSUc1dlpHVXNJSFJvWlc0Z1kyOXVkR2x1ZFdVZ2QybDBhQ0IwYUdVZ2JtVjRkQ0J2Ym1WY2JpQXFJQ0FnTFNCZ1RtOWtaV0E2SUZKbGNHeGhZMlVnZEdobElHTjFjbkpsYm5RZ2JtOWtaU3dnZEdobGJpQmpiMjUwYVc1MVpTQmllU0IyYVhOcGRHbHVaeUJwZEZ4dUlDb2dJQ0F0SUdCdWRXMWlaWEpnT2lCWGFHbHNaU0JwZEdWeVlYUnBibWNnZEdobElHbDBaVzF6SUc5bUlHRWdjMlZ4ZFdWdVkyVWdiM0lnYldGd0xDQnpaWFFnZEdobElHbHVaR1Y0WEc0Z0tpQWdJQ0FnYjJZZ2RHaGxJRzVsZUhRZ2MzUmxjQzRnVkdocGN5QnBjeUIxYzJWbWRXd2daWE53WldOcFlXeHNlU0JwWmlCMGFHVWdhVzVrWlhnZ2IyWWdkR2hsSUdOMWNuSmxiblJjYmlBcUlDQWdJQ0J1YjJSbElHaGhjeUJqYUdGdVoyVmtMbHh1SUNwY2JpQXFJRWxtSUdCMmFYTnBkRzl5WUNCcGN5QmhJSE5wYm1kc1pTQm1kVzVqZEdsdmJpd2dhWFFnZDJsc2JDQmlaU0JqWVd4c1pXUWdkMmwwYUNCaGJHd2dkbUZzZFdWelhHNGdLaUJsYm1OdmRXNTBaWEpsWkNCcGJpQjBhR1VnZEhKbFpTd2dhVzVqYkhWa2FXNW5JR1V1Wnk0Z1lHNTFiR3hnSUhaaGJIVmxjeTRnUVd4MFpYSnVZWFJwZG1Wc2VTeGNiaUFxSUhObGNHRnlZWFJsSUhacGMybDBiM0lnWm5WdVkzUnBiMjV6SUcxaGVTQmlaU0JrWldacGJtVmtJR1p2Y2lCbFlXTm9JR0JOWVhCZ0xDQmdVR0ZwY21Bc0lHQlRaWEZnTEZ4dUlDb2dZRUZzYVdGellDQmhibVFnWUZOallXeGhjbUFnYm05a1pTNGdWRzhnWkdWbWFXNWxJSFJvWlNCellXMWxJSFpwYzJsMGIzSWdablZ1WTNScGIyNGdabTl5SUcxdmNtVWdkR2hoYmx4dUlDb2diMjVsSUc1dlpHVWdkSGx3WlN3Z2RYTmxJSFJvWlNCZ1EyOXNiR1ZqZEdsdmJtQWdLRzFoY0NCaGJtUWdjMlZ4S1N3Z1lGWmhiSFZsWUNBb2JXRndMQ0J6WlhFZ0ppQnpZMkZzWVhJcFhHNGdLaUJoYm1RZ1lFNXZaR1ZnSUNoaGJHbGhjeXdnYldGd0xDQnpaWEVnSmlCelkyRnNZWElwSUhSaGNtZGxkSE11SUU5bUlHRnNiQ0IwYUdWelpTd2diMjVzZVNCMGFHVWdiVzl6ZEZ4dUlDb2djM0JsWTJsbWFXTWdaR1ZtYVc1bFpDQnZibVVnZDJsc2JDQmlaU0IxYzJWa0lHWnZjaUJsWVdOb0lHNXZaR1V1WEc0Z0tpOWNibUZ6ZVc1aklHWjFibU4wYVc5dUlIWnBjMmwwUVhONWJtTW9ibTlrWlN3Z2RtbHphWFJ2Y2lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFpwYzJsMGIzSmZJRDBnYVc1cGRGWnBjMmwwYjNJb2RtbHphWFJ2Y2lrN1hHNGdJQ0FnYVdZZ0tHbHpSRzlqZFcxbGJuUW9ibTlrWlNrcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1kyUWdQU0JoZDJGcGRDQjJhWE5wZEVGemVXNWpYeWh1ZFd4c0xDQnViMlJsTG1OdmJuUmxiblJ6TENCMmFYTnBkRzl5WHl3Z1QySnFaV04wTG1aeVpXVjZaU2hiYm05a1pWMHBLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTmtJRDA5UFNCU1JVMVBWa1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnViMlJsTG1OdmJuUmxiblJ6SUQwZ2JuVnNiRHRjYmlBZ0lDQjlYRzRnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0JoZDJGcGRDQjJhWE5wZEVGemVXNWpYeWh1ZFd4c0xDQnViMlJsTENCMmFYTnBkRzl5WHl3Z1QySnFaV04wTG1aeVpXVjZaU2hiWFNrcE8xeHVmVnh1THk4Z1YybDBhRzkxZENCMGFHVWdZR0Z6SUhONWJXSnZiR0FnWTJGemRITXNJRlJUSUdSbFkyeGhjbVZ6SUhSb1pYTmxJR2x1SUhSb1pTQmdkbWx6YVhSZ1hHNHZMeUJ1WVcxbGMzQmhZMlVnZFhOcGJtY2dZSFpoY21Bc0lHSjFkQ0IwYUdWdUlHTnZiWEJzWVdsdWN5QmhZbTkxZENCMGFHRjBJR0psWTJGMWMyVmNiaTh2SUdCMWJtbHhkV1VnYzNsdFltOXNZQ0J0ZFhOMElHSmxJR0JqYjI1emRHQXVYRzR2S2lvZ1ZHVnliV2x1WVhSbElIWnBjMmwwSUhSeVlYWmxjbk5oYkNCamIyMXdiR1YwWld4NUlDb3ZYRzUyYVhOcGRFRnplVzVqTGtKU1JVRkxJRDBnUWxKRlFVczdYRzR2S2lvZ1JHOGdibTkwSUhacGMybDBJSFJvWlNCamFHbHNaSEpsYmlCdlppQjBhR1VnWTNWeWNtVnVkQ0J1YjJSbElDb3ZYRzUyYVhOcGRFRnplVzVqTGxOTFNWQWdQU0JUUzBsUU8xeHVMeW9xSUZKbGJXOTJaU0IwYUdVZ1kzVnljbVZ1ZENCdWIyUmxJQ292WEc1MmFYTnBkRUZ6ZVc1akxsSkZUVTlXUlNBOUlGSkZUVTlXUlR0Y2JtRnplVzVqSUdaMWJtTjBhVzl1SUhacGMybDBRWE41Ym1OZktHdGxlU3dnYm05a1pTd2dkbWx6YVhSdmNpd2djR0YwYUNrZ2UxeHVJQ0FnSUdOdmJuTjBJR04wY213Z1BTQmhkMkZwZENCallXeHNWbWx6YVhSdmNpaHJaWGtzSUc1dlpHVXNJSFpwYzJsMGIzSXNJSEJoZEdncE8xeHVJQ0FnSUdsbUlDaHBjMDV2WkdVb1kzUnliQ2tnZkh3Z2FYTlFZV2x5S0dOMGNtd3BLU0I3WEc0Z0lDQWdJQ0FnSUhKbGNHeGhZMlZPYjJSbEtHdGxlU3dnY0dGMGFDd2dZM1J5YkNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMmFYTnBkRUZ6ZVc1alh5aHJaWGtzSUdOMGNtd3NJSFpwYzJsMGIzSXNJSEJoZEdncE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOMGNtd2dJVDA5SUNkemVXMWliMnduS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwYzBOdmJHeGxZM1JwYjI0b2JtOWtaU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEJoZEdnZ1BTQlBZbXBsWTNRdVpuSmxaWHBsS0hCaGRHZ3VZMjl1WTJGMEtHNXZaR1VwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYm05a1pTNXBkR1Z0Y3k1c1pXNW5kR2c3SUNzcmFTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHTnBJRDBnWVhkaGFYUWdkbWx6YVhSQmMzbHVZMThvYVN3Z2JtOWtaUzVwZEdWdGMxdHBYU3dnZG1semFYUnZjaXdnY0dGMGFDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJqYVNBOVBUMGdKMjUxYldKbGNpY3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdrZ1BTQmphU0F0SURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb1kya2dQVDA5SUVKU1JVRkxLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnUWxKRlFVczdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9ZMmtnUFQwOUlGSkZUVTlXUlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1YjJSbExtbDBaVzF6TG5Od2JHbGpaU2hwTENBeEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVNBdFBTQXhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hwYzFCaGFYSW9ibTlrWlNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhCaGRHZ2dQU0JQWW1wbFkzUXVabkpsWlhwbEtIQmhkR2d1WTI5dVkyRjBLRzV2WkdVcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR05ySUQwZ1lYZGhhWFFnZG1semFYUkJjM2x1WTE4b0oydGxlU2NzSUc1dlpHVXVhMlY1TENCMmFYTnBkRzl5TENCd1lYUm9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYXlBOVBUMGdRbEpGUVVzcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUVKU1JVRkxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb1kyc2dQVDA5SUZKRlRVOVdSU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1YjJSbExtdGxlU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqZGlBOUlHRjNZV2wwSUhacGMybDBRWE41Ym1OZktDZDJZV3gxWlNjc0lHNXZaR1V1ZG1Gc2RXVXNJSFpwYzJsMGIzSXNJSEJoZEdncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTjJJRDA5UFNCQ1VrVkJTeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdRbEpGUVVzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hqZGlBOVBUMGdVa1ZOVDFaRktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNXZaR1V1ZG1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJqZEhKc08xeHVmVnh1Wm5WdVkzUnBiMjRnYVc1cGRGWnBjMmwwYjNJb2RtbHphWFJ2Y2lrZ2UxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2RtbHphWFJ2Y2lBOVBUMGdKMjlpYW1WamRDY2dKaVpjYmlBZ0lDQWdJQ0FnS0hacGMybDBiM0l1UTI5c2JHVmpkR2x2YmlCOGZDQjJhWE5wZEc5eUxrNXZaR1VnZkh3Z2RtbHphWFJ2Y2k1V1lXeDFaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUU5aWFtVmpkQzVoYzNOcFoyNG9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ1FXeHBZWE02SUhacGMybDBiM0l1VG05a1pTeGNiaUFnSUNBZ0lDQWdJQ0FnSUUxaGNEb2dkbWx6YVhSdmNpNU9iMlJsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdVMk5oYkdGeU9pQjJhWE5wZEc5eUxrNXZaR1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQlRaWEU2SUhacGMybDBiM0l1VG05a1pWeHVJQ0FnSUNBZ0lDQjlMQ0IyYVhOcGRHOXlMbFpoYkhWbElDWW1JSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lFMWhjRG9nZG1semFYUnZjaTVXWVd4MVpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUZOallXeGhjam9nZG1semFYUnZjaTVXWVd4MVpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUZObGNUb2dkbWx6YVhSdmNpNVdZV3gxWlZ4dUlDQWdJQ0FnSUNCOUxDQjJhWE5wZEc5eUxrTnZiR3hsWTNScGIyNGdKaVlnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdUV0Z3T2lCMmFYTnBkRzl5TGtOdmJHeGxZM1JwYjI0c1hHNGdJQ0FnSUNBZ0lDQWdJQ0JUWlhFNklIWnBjMmwwYjNJdVEyOXNiR1ZqZEdsdmJseHVJQ0FnSUNBZ0lDQjlMQ0IyYVhOcGRHOXlLVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhacGMybDBiM0k3WEc1OVhHNW1kVzVqZEdsdmJpQmpZV3hzVm1semFYUnZjaWhyWlhrc0lHNXZaR1VzSUhacGMybDBiM0lzSUhCaGRHZ3BJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSFpwYzJsMGIzSWdQVDA5SUNkbWRXNWpkR2x2YmljcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMmFYTnBkRzl5S0d0bGVTd2dibTlrWlN3Z2NHRjBhQ2s3WEc0Z0lDQWdhV1lnS0dselRXRndLRzV2WkdVcEtWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RtbHphWFJ2Y2k1TllYQS9MaWhyWlhrc0lHNXZaR1VzSUhCaGRHZ3BPMXh1SUNBZ0lHbG1JQ2hwYzFObGNTaHViMlJsS1NsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhacGMybDBiM0l1VTJWeFB5NG9hMlY1TENCdWIyUmxMQ0J3WVhSb0tUdGNiaUFnSUNCcFppQW9hWE5RWVdseUtHNXZaR1VwS1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZG1semFYUnZjaTVRWVdseVB5NG9hMlY1TENCdWIyUmxMQ0J3WVhSb0tUdGNiaUFnSUNCcFppQW9hWE5UWTJGc1lYSW9ibTlrWlNrcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMmFYTnBkRzl5TGxOallXeGhjajh1S0d0bGVTd2dibTlrWlN3Z2NHRjBhQ2s3WEc0Z0lDQWdhV1lnS0dselFXeHBZWE1vYm05a1pTa3BYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjJhWE5wZEc5eUxrRnNhV0Z6UHk0b2EyVjVMQ0J1YjJSbExDQndZWFJvS1R0Y2JpQWdJQ0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1ZlZ4dVpuVnVZM1JwYjI0Z2NtVndiR0ZqWlU1dlpHVW9hMlY1TENCd1lYUm9MQ0J1YjJSbEtTQjdYRzRnSUNBZ1kyOXVjM1FnY0dGeVpXNTBJRDBnY0dGMGFGdHdZWFJvTG14bGJtZDBhQ0F0SURGZE8xeHVJQ0FnSUdsbUlDaHBjME52Ykd4bFkzUnBiMjRvY0dGeVpXNTBLU2tnZTF4dUlDQWdJQ0FnSUNCd1lYSmxiblF1YVhSbGJYTmJhMlY1WFNBOUlHNXZaR1U3WEc0Z0lDQWdmVnh1SUNBZ0lHVnNjMlVnYVdZZ0tHbHpVR0ZwY2lod1lYSmxiblFwS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hyWlhrZ1BUMDlJQ2RyWlhrbktWeHVJQ0FnSUNBZ0lDQWdJQ0FnY0dGeVpXNTBMbXRsZVNBOUlHNXZaR1U3WEc0Z0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUhCaGNtVnVkQzUyWVd4MVpTQTlJRzV2WkdVN1hHNGdJQ0FnZlZ4dUlDQWdJR1ZzYzJVZ2FXWWdLR2x6Ukc5amRXMWxiblFvY0dGeVpXNTBLU2tnZTF4dUlDQWdJQ0FnSUNCd1lYSmxiblF1WTI5dWRHVnVkSE1nUFNCdWIyUmxPMXh1SUNBZ0lIMWNiaUFnSUNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjSFFnUFNCcGMwRnNhV0Z6S0hCaGNtVnVkQ2tnUHlBbllXeHBZWE1uSURvZ0ozTmpZV3hoY2ljN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1EyRnVibTkwSUhKbGNHeGhZMlVnYm05a1pTQjNhWFJvSUNSN2NIUjlJSEJoY21WdWRHQXBPMXh1SUNBZ0lIMWNibjFjYmx4dVpYaHdiM0owSUhzZ2RtbHphWFFzSUhacGMybDBRWE41Ym1NZ2ZUdGNiaUlzSUNKcGJYQnZjblFnZXlCcGMwNXZaR1VnZlNCbWNtOXRJQ2N1TGk5dWIyUmxjeTlwWkdWdWRHbDBlUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QjJhWE5wZENCOUlHWnliMjBnSnk0dUwzWnBjMmwwTG1wekp6dGNibHh1WTI5dWMzUWdaWE5qWVhCbFEyaGhjbk1nUFNCN1hHNGdJQ0FnSnlFbk9pQW5KVEl4Snl4Y2JpQWdJQ0FuTENjNklDY2xNa01uTEZ4dUlDQWdJQ2RiSnpvZ0p5VTFRaWNzWEc0Z0lDQWdKMTBuT2lBbkpUVkVKeXhjYmlBZ0lDQW5leWM2SUNjbE4wSW5MRnh1SUNBZ0lDZDlKem9nSnlVM1JDZGNibjA3WEc1amIyNXpkQ0JsYzJOaGNHVlVZV2RPWVcxbElEMGdLSFJ1S1NBOVBpQjBiaTV5WlhCc1lXTmxLQzliSVN4YlhGeGRlMzFkTDJjc0lHTm9JRDArSUdWelkyRndaVU5vWVhKelcyTm9YU2s3WEc1amJHRnpjeUJFYVhKbFkzUnBkbVZ6SUh0Y2JpQWdJQ0JqYjI1emRISjFZM1J2Y2loNVlXMXNMQ0IwWVdkektTQjdYRzRnSUNBZ0lDQWdJQzhxS2x4dUlDQWdJQ0FnSUNBZ0tpQlVhR1VnWkdseVpXTjBhWFpsY3kxbGJtUXZaRzlqTFhOMFlYSjBJRzFoY210bGNpQmdMUzB0WUM0Z1NXWWdZRzUxYkd4Z0xDQmhJRzFoY210bGNpQnRZWGtnYzNScGJHd2dZbVZjYmlBZ0lDQWdJQ0FnSUNvZ2FXNWpiSFZrWldRZ2FXNGdkR2hsSUdSdlkzVnRaVzUwSjNNZ2MzUnlhVzVuYVdacFpXUWdjbVZ3Y21WelpXNTBZWFJwYjI0dVhHNGdJQ0FnSUNBZ0lDQXFMMXh1SUNBZ0lDQWdJQ0IwYUdsekxtUnZZMU4wWVhKMElEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ0x5b3FJRlJvWlNCa2IyTXRaVzVrSUcxaGNtdGxjaUJnTGk0dVlDNGdJQ292WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaRzlqUlc1a0lEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZVdGdGJDQTlJRTlpYW1WamRDNWhjM05wWjI0b2UzMHNJRVJwY21WamRHbDJaWE11WkdWbVlYVnNkRmxoYld3c0lIbGhiV3dwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMblJoWjNNZ1BTQlBZbXBsWTNRdVlYTnphV2R1S0h0OUxDQkVhWEpsWTNScGRtVnpMbVJsWm1GMWJIUlVZV2R6TENCMFlXZHpLVHRjYmlBZ0lDQjlYRzRnSUNBZ1kyeHZibVVvS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdOdmNIa2dQU0J1WlhjZ1JHbHlaV04wYVhabGN5aDBhR2x6TG5saGJXd3NJSFJvYVhNdWRHRm5jeWs3WEc0Z0lDQWdJQ0FnSUdOdmNIa3VaRzlqVTNSaGNuUWdQU0IwYUdsekxtUnZZMU4wWVhKME8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOXdlVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dSSFZ5YVc1bklIQmhjbk5wYm1jc0lHZGxkQ0JoSUVScGNtVmpkR2wyWlhNZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJvWlNCamRYSnlaVzUwSUdSdlkzVnRaVzUwSUdGdVpGeHVJQ0FnSUNBcUlIVndaR0YwWlNCMGFHVWdjM1J5WldGdElITjBZWFJsSUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnWTNWeWNtVnVkQ0IyWlhKemFXOXVKM01nYzNCbFl5NWNiaUFnSUNBZ0tpOWNiaUFnSUNCaGRFUnZZM1Z0Wlc1MEtDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE1nUFNCdVpYY2dSR2x5WldOMGFYWmxjeWgwYUdsekxubGhiV3dzSUhSb2FYTXVkR0ZuY3lrN1hHNGdJQ0FnSUNBZ0lITjNhWFJqYUNBb2RHaHBjeTU1WVcxc0xuWmxjbk5wYjI0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKekV1TVNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVoZEU1bGVIUkViMk4xYldWdWRDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNjeExqSW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVlYUk9aWGgwUkc5amRXMWxiblFnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxubGhiV3dnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Y0Y0d4cFkybDBPaUJFYVhKbFkzUnBkbVZ6TG1SbFptRjFiSFJaWVcxc0xtVjRjR3hwWTJsMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWlhKemFXOXVPaUFuTVM0eUoxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1MFlXZHpJRDBnVDJKcVpXTjBMbUZ6YzJsbmJpaDdmU3dnUkdseVpXTjBhWFpsY3k1a1pXWmhkV3gwVkdGbmN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlISmxjenRjYmlBZ0lDQjlYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dRSEJoY21GdElHOXVSWEp5YjNJZ0xTQk5ZWGtnWW1VZ1kyRnNiR1ZrSUdWMlpXNGdhV1lnZEdobElHRmpkR2x2YmlCM1lYTWdjM1ZqWTJWemMyWjFiRnh1SUNBZ0lDQXFJRUJ5WlhSMWNtNXpJR0IwY25WbFlDQnZiaUJ6ZFdOalpYTnpYRzRnSUNBZ0lDb3ZYRzRnSUNBZ1lXUmtLR3hwYm1Vc0lHOXVSWEp5YjNJcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVZWFJPWlhoMFJHOWpkVzFsYm5RcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVlV0Z0YkNBOUlIc2daWGh3YkdsamFYUTZJRVJwY21WamRHbDJaWE11WkdWbVlYVnNkRmxoYld3dVpYaHdiR2xqYVhRc0lIWmxjbk5wYjI0NklDY3hMakVuSUgwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuUmhaM01nUFNCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCRWFYSmxZM1JwZG1WekxtUmxabUYxYkhSVVlXZHpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WVhST1pYaDBSRzlqZFcxbGJuUWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JqYjI1emRDQndZWEowY3lBOUlHeHBibVV1ZEhKcGJTZ3BMbk53YkdsMEtDOWJJRnhjZEYwckx5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElHNWhiV1VnUFNCd1lYSjBjeTV6YUdsbWRDZ3BPMXh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLRzVoYldVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKeVZVUVVjbk9pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hCaGNuUnpMbXhsYm1kMGFDQWhQVDBnTWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLREFzSUNjbFZFRkhJR1JwY21WamRHbDJaU0J6YUc5MWJHUWdZMjl1ZEdGcGJpQmxlR0ZqZEd4NUlIUjNieUJ3WVhKMGN5Y3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jR0Z5ZEhNdWJHVnVaM1JvSUR3Z01pbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdXMmhoYm1Sc1pTd2djSEpsWm1sNFhTQTlJSEJoY25Sek8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11ZEdGbmMxdG9ZVzVrYkdWZElEMGdjSEpsWm1sNE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5KVmxCVFV3bk9pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1NVlXMXNMbVY0Y0d4cFkybDBJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY0dGeWRITXViR1Z1WjNSb0lDRTlQU0F4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9NQ3dnSnlWWlFVMU1JR1JwY21WamRHbDJaU0J6YUc5MWJHUWdZMjl1ZEdGcGJpQmxlR0ZqZEd4NUlHOXVaU0J3WVhKMEp5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1czWmxjbk5wYjI1ZElEMGdjR0Z5ZEhNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFpsY25OcGIyNGdQVDA5SUNjeExqRW5JSHg4SUhabGNuTnBiMjRnUFQwOUlDY3hMakluS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWVXRnRiQzUyWlhKemFXOXVJRDBnZG1WeWMybHZianRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnBjMVpoYkdsa0lEMGdMMTVjWEdRclhGd3VYRnhrS3lRdkxuUmxjM1FvZG1WeWMybHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOXVSWEp5YjNJb05pd2dZRlZ1YzNWd2NHOXlkR1ZrSUZsQlRVd2dkbVZ5YzJsdmJpQWtlM1psY25OcGIyNTlZQ3dnYVhOV1lXeHBaQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5dVJYSnliM0lvTUN3Z1lGVnVhMjV2ZDI0Z1pHbHlaV04wYVhabElDUjdibUZ0WlgxZ0xDQjBjblZsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dVbVZ6YjJ4MlpYTWdZU0IwWVdjc0lHMWhkR05vYVc1bklHaGhibVJzWlhNZ2RHOGdkR2h2YzJVZ1pHVm1hVzVsWkNCcGJpQWxWRUZISUdScGNtVmpkR2wyWlhNdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCQWNtVjBkWEp1Y3lCU1pYTnZiSFpsWkNCMFlXY3NJSGRvYVdOb0lHMWhlU0JoYkhOdklHSmxJSFJvWlNCdWIyNHRjM0JsWTJsbWFXTWdkR0ZuSUdBbklTZGdJRzl5SUdGY2JpQWdJQ0FnS2lBZ0lHQW5JV3h2WTJGc0oyQWdkR0ZuTENCdmNpQmdiblZzYkdBZ2FXWWdkVzV5WlhOdmJIWmhZbXhsTGx4dUlDQWdJQ0FxTDF4dUlDQWdJSFJoWjA1aGJXVW9jMjkxY21ObExDQnZia1Z5Y205eUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoemIzVnlZMlVnUFQwOUlDY2hKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbklTYzdJQzh2SUc1dmJpMXpjR1ZqYVdacFl5QjBZV2RjYmlBZ0lDQWdJQ0FnYVdZZ0tITnZkWEpqWlZzd1hTQWhQVDBnSnlFbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCdmJrVnljbTl5S0dCT2IzUWdZU0IyWVd4cFpDQjBZV2M2SUNSN2MyOTFjbU5sZldBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0hOdmRYSmpaVnN4WFNBOVBUMGdKenduS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQjJaWEppWVhScGJTQTlJSE52ZFhKalpTNXpiR2xqWlNneUxDQXRNU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZG1WeVltRjBhVzBnUFQwOUlDY2hKeUI4ZkNCMlpYSmlZWFJwYlNBOVBUMGdKeUVoSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOXVSWEp5YjNJb1lGWmxjbUpoZEdsdElIUmhaM01nWVhKbGJpZDBJSEpsYzI5c2RtVmtMQ0J6YnlBa2UzTnZkWEpqWlgwZ2FYTWdhVzUyWVd4cFpDNWdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h6YjNWeVkyVmJjMjkxY21ObExteGxibWQwYUNBdElERmRJQ0U5UFNBblBpY3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpZ25WbVZ5WW1GMGFXMGdkR0ZuY3lCdGRYTjBJR1Z1WkNCM2FYUm9JR0VnUGljcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFpsY21KaGRHbHRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRnNzSUdoaGJtUnNaU3dnYzNWbVptbDRYU0E5SUhOdmRYSmpaUzV0WVhSamFDZ3ZYaWd1S2lFcEtGdGVJVjBxS1NRdmN5azdYRzRnSUNBZ0lDQWdJR2xtSUNnaGMzVm1abWw0S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpaGdWR2hsSUNSN2MyOTFjbU5sZlNCMFlXY2dhR0Z6SUc1dklITjFabVpwZUdBcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2NtVm1hWGdnUFNCMGFHbHpMblJoWjNOYmFHRnVaR3hsWFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEJ5WldacGVDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjSEpsWm1sNElDc2daR1ZqYjJSbFZWSkpRMjl0Y0c5dVpXNTBLSE4xWm1acGVDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhSamFDQW9aWEp5YjNJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtGTjBjbWx1WnlobGNuSnZjaWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2hvWVc1a2JHVWdQVDA5SUNjaEp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ6YjNWeVkyVTdJQzh2SUd4dlkyRnNJSFJoWjF4dUlDQWdJQ0FnSUNCdmJrVnljbTl5S0dCRGIzVnNaQ0J1YjNRZ2NtVnpiMngyWlNCMFlXYzZJQ1I3YzI5MWNtTmxmV0FwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnSUNCOVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNvZ1IybDJaVzRnWVNCbWRXeHNlU0J5WlhOdmJIWmxaQ0IwWVdjc0lISmxkSFZ5Ym5NZ2FYUnpJSEJ5YVc1MFlXSnNaU0J6ZEhKcGJtY2dabTl5YlN4Y2JpQWdJQ0FnS2lCMFlXdHBibWNnYVc1MGJ5QmhZMk52ZFc1MElHTjFjbkpsYm5RZ2RHRm5JSEJ5WldacGVHVnpJR0Z1WkNCa1pXWmhkV3gwY3k1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0IwWVdkVGRISnBibWNvZEdGbktTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnVzJoaGJtUnNaU3dnY0hKbFptbDRYU0J2WmlCUFltcGxZM1F1Wlc1MGNtbGxjeWgwYUdsekxuUmhaM01wS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHRm5Mbk4wWVhKMGMxZHBkR2dvY0hKbFptbDRLU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdhR0Z1Wkd4bElDc2daWE5qWVhCbFZHRm5UbUZ0WlNoMFlXY3VjM1ZpYzNSeWFXNW5LSEJ5WldacGVDNXNaVzVuZEdncEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR0ZuV3pCZElEMDlQU0FuSVNjZ1B5QjBZV2NnT2lCZ0lUd2tlM1JoWjMwK1lEdGNiaUFnSUNCOVhHNGdJQ0FnZEc5VGRISnBibWNvWkc5aktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHeHBibVZ6SUQwZ2RHaHBjeTU1WVcxc0xtVjRjR3hwWTJsMFhHNGdJQ0FnSUNBZ0lDQWdJQ0EvSUZ0Z0pWbEJUVXdnSkh0MGFHbHpMbmxoYld3dWRtVnljMmx2YmlCOGZDQW5NUzR5SjMxZ1hWeHVJQ0FnSUNBZ0lDQWdJQ0FnT2lCYlhUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RHRm5SVzUwY21sbGN5QTlJRTlpYW1WamRDNWxiblJ5YVdWektIUm9hWE11ZEdGbmN5azdYRzRnSUNBZ0lDQWdJR3hsZENCMFlXZE9ZVzFsY3p0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1J2WXlBbUppQjBZV2RGYm5SeWFXVnpMbXhsYm1kMGFDQStJREFnSmlZZ2FYTk9iMlJsS0dSdll5NWpiMjUwWlc1MGN5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhSaFozTWdQU0I3ZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpwYzJsMEtHUnZZeTVqYjI1MFpXNTBjeXdnS0Y5clpYa3NJRzV2WkdVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FYTk9iMlJsS0c1dlpHVXBJQ1ltSUc1dlpHVXVkR0ZuS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBZV2R6VzI1dlpHVXVkR0ZuWFNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUmhaMDVoYldWeklEMGdUMkpxWldOMExtdGxlWE1vZEdGbmN5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdGblRtRnRaWE1nUFNCYlhUdGNiaUFnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0JiYUdGdVpHeGxMQ0J3Y21WbWFYaGRJRzltSUhSaFowVnVkSEpwWlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaG9ZVzVrYkdVZ1BUMDlJQ2NoSVNjZ0ppWWdjSEpsWm1sNElEMDlQU0FuZEdGbk9ubGhiV3d1YjNKbkxESXdNREk2SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaFpHOWpJSHg4SUhSaFowNWhiV1Z6TG5OdmJXVW9kRzRnUFQ0Z2RHNHVjM1JoY25SelYybDBhQ2h3Y21WbWFYZ3BLU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYVc1bGN5NXdkWE5vS0dBbFZFRkhJQ1I3YUdGdVpHeGxmU0FrZTNCeVpXWnBlSDFnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JHbHVaWE11YW05cGJpZ25YRnh1SnlrN1hHNGdJQ0FnZlZ4dWZWeHVSR2x5WldOMGFYWmxjeTVrWldaaGRXeDBXV0Z0YkNBOUlIc2daWGh3YkdsamFYUTZJR1poYkhObExDQjJaWEp6YVc5dU9pQW5NUzR5SnlCOU8xeHVSR2x5WldOMGFYWmxjeTVrWldaaGRXeDBWR0ZuY3lBOUlIc2dKeUVoSnpvZ0ozUmhaenA1WVcxc0xtOXlaeXd5TURBeU9pY2dmVHRjYmx4dVpYaHdiM0owSUhzZ1JHbHlaV04wYVhabGN5QjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lHbHpVMk5oYkdGeUxDQnBjME52Ykd4bFkzUnBiMjRnZlNCbWNtOXRJQ2N1TGk5dWIyUmxjeTlwWkdWdWRHbDBlUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QjJhWE5wZENCOUlHWnliMjBnSnk0dUwzWnBjMmwwTG1wekp6dGNibHh1THlvcVhHNGdLaUJXWlhKcFpua2dkR2hoZENCMGFHVWdhVzV3ZFhRZ2MzUnlhVzVuSUdseklHRWdkbUZzYVdRZ1lXNWphRzl5TGx4dUlDcGNiaUFxSUZkcGJHd2dkR2h5YjNjZ2IyNGdaWEp5YjNKekxseHVJQ292WEc1bWRXNWpkR2x2YmlCaGJtTm9iM0pKYzFaaGJHbGtLR0Z1WTJodmNpa2dlMXh1SUNBZ0lHbG1JQ2d2VzF4Y2VEQXdMVnhjZURFNVhGeHpMRnRjWEYxN2ZWMHZMblJsYzNRb1lXNWphRzl5S1NrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCellTQTlJRXBUVDA0dWMzUnlhVzVuYVdaNUtHRnVZMmh2Y2lrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxelp5QTlJR0JCYm1Ob2IzSWdiWFZ6ZENCdWIzUWdZMjl1ZEdGcGJpQjNhR2wwWlhOd1lXTmxJRzl5SUdOdmJuUnliMndnWTJoaGNtRmpkR1Z5Y3pvZ0pIdHpZWDFnTzF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvYlhObktUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNTlYRzVtZFc1amRHbHZiaUJoYm1Ob2IzSk9ZVzFsY3loeWIyOTBLU0I3WEc0Z0lDQWdZMjl1YzNRZ1lXNWphRzl5Y3lBOUlHNWxkeUJUWlhRb0tUdGNiaUFnSUNCMmFYTnBkQ2h5YjI5MExDQjdYRzRnSUNBZ0lDQWdJRlpoYkhWbEtGOXJaWGtzSUc1dlpHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h1YjJSbExtRnVZMmh2Y2lsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGJtTm9iM0p6TG1Ga1pDaHViMlJsTG1GdVkyaHZjaWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5S1R0Y2JpQWdJQ0J5WlhSMWNtNGdZVzVqYUc5eWN6dGNibjFjYmk4cUtpQkdhVzVrSUdFZ2JtVjNJR0Z1WTJodmNpQnVZVzFsSUhkcGRHZ2dkR2hsSUdkcGRtVnVJR0J3Y21WbWFYaGdJR0Z1WkNCaElHOXVaUzFwYm1SbGVHVmtJSE4xWm1acGVDNGdLaTljYm1aMWJtTjBhVzl1SUdacGJtUk9aWGRCYm1Ob2IzSW9jSEpsWm1sNExDQmxlR05zZFdSbEtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREU3SUhSeWRXVTdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdVlXMWxJRDBnWUNSN2NISmxabWw0ZlNSN2FYMWdPMXh1SUNBZ0lDQWdJQ0JwWmlBb0lXVjRZMngxWkdVdWFHRnpLRzVoYldVcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzVoYldVN1hHNGdJQ0FnZlZ4dWZWeHVablZ1WTNScGIyNGdZM0psWVhSbFRtOWtaVUZ1WTJodmNuTW9aRzlqTENCd2NtVm1hWGdwSUh0Y2JpQWdJQ0JqYjI1emRDQmhiR2xoYzA5aWFtVmpkSE1nUFNCYlhUdGNiaUFnSUNCamIyNXpkQ0J6YjNWeVkyVlBZbXBsWTNSeklEMGdibVYzSUUxaGNDZ3BPMXh1SUNBZ0lHeGxkQ0J3Y21WMlFXNWphRzl5Y3lBOUlHNTFiR3c3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDQWdiMjVCYm1Ob2IzSTZJQ2h6YjNWeVkyVXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZzYVdGelQySnFaV04wY3k1d2RYTm9LSE52ZFhKalpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JWEJ5WlhaQmJtTm9iM0p6S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCeVpYWkJibU5vYjNKeklEMGdZVzVqYUc5eVRtRnRaWE1vWkc5aktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR0Z1WTJodmNpQTlJR1pwYm1ST1pYZEJibU5vYjNJb2NISmxabWw0TENCd2NtVjJRVzVqYUc5eWN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCd2NtVjJRVzVqYUc5eWN5NWhaR1FvWVc1amFHOXlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCaGJtTm9iM0k3WEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDOHFLbHh1SUNBZ0lDQWdJQ0FnS2lCWGFYUm9JR05wY21OMWJHRnlJSEpsWm1WeVpXNWpaWE1zSUhSb1pTQnpiM1Z5WTJVZ2JtOWtaU0JwY3lCdmJteDVJSEpsYzI5c2RtVmtJR0ZtZEdWeUlHRnNiRnh1SUNBZ0lDQWdJQ0FnS2lCdlppQnBkSE1nWTJocGJHUWdibTlrWlhNZ1lYSmxMaUJVYUdseklHbHpJSGRvZVNCaGJtTm9iM0p6SUdGeVpTQnpaWFFnYjI1c2VTQmhablJsY2lCaGJHd2diMlpjYmlBZ0lDQWdJQ0FnSUNvZ2RHaGxJRzV2WkdWeklHaGhkbVVnWW1WbGJpQmpjbVZoZEdWa0xseHVJQ0FnSUNBZ0lDQWdLaTljYmlBZ0lDQWdJQ0FnYzJWMFFXNWphRzl5Y3pvZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0J6YjNWeVkyVWdiMllnWVd4cFlYTlBZbXBsWTNSektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NtVm1JRDBnYzI5MWNtTmxUMkpxWldOMGN5NW5aWFFvYzI5MWNtTmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhKbFppQTlQVDBnSjI5aWFtVmpkQ2NnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZtTG1GdVkyaHZjaUFtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW9hWE5UWTJGc1lYSW9jbVZtTG01dlpHVXBJSHg4SUdselEyOXNiR1ZqZEdsdmJpaHlaV1l1Ym05a1pTa3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxaaTV1YjJSbExtRnVZMmh2Y2lBOUlISmxaaTVoYm1Ob2IzSTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmxjbkp2Y2lBOUlHNWxkeUJGY25KdmNpZ25SbUZwYkdWa0lIUnZJSEpsYzI5c2RtVWdjbVZ3WldGMFpXUWdiMkpxWldOMElDaDBhR2x6SUhOb2IzVnNaQ0J1YjNRZ2FHRndjR1Z1S1NjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsY25KdmNpNXpiM1Z5WTJVZ1BTQnpiM1Z5WTJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lHVnljbTl5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ2MyOTFjbU5sVDJKcVpXTjBjMXh1SUNBZ0lIMDdYRzU5WEc1Y2JtVjRjRzl5ZENCN0lHRnVZMmh2Y2tselZtRnNhV1FzSUdGdVkyaHZjazVoYldWekxDQmpjbVZoZEdWT2IyUmxRVzVqYUc5eWN5d2dabWx1WkU1bGQwRnVZMmh2Y2lCOU8xeHVJaXdnSWk4cUtseHVJQ29nUVhCd2JHbGxjeUIwYUdVZ1NsTlBUaTV3WVhKelpTQnlaWFpwZG1WeUlHRnNaMjl5YVhSb2JTQmhjeUJrWldacGJtVmtJR2x1SUhSb1pTQkZRMDFCTFRJMk1pQnpjR1ZqTEZ4dUlDb2dhVzRnYzJWamRHbHZiaUF5TkM0MUxqRXVNU0JjSWxKMWJuUnBiV1VnVTJWdFlXNTBhV056T2lCSmJuUmxjbTVoYkdsNlpVcFRUMDVRY205d1pYSjBlVndpSUc5bUlIUm9aVnh1SUNvZ01qQXlNU0JsWkdsMGFXOXVPaUJvZEhSd2N6b3ZMM1JqTXprdVpYTXZaV050WVRJMk1pOGpjMlZqTFdwemIyNHVjR0Z5YzJWY2JpQXFYRzRnS2lCSmJtTnNkV1JsY3lCbGVIUmxibk5wYjI1eklHWnZjaUJvWVc1a2JHbHVaeUJOWVhBZ1lXNWtJRk5sZENCdlltcGxZM1J6TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJoY0hCc2VWSmxkbWwyWlhJb2NtVjJhWFpsY2l3Z2IySnFMQ0JyWlhrc0lIWmhiQ2tnZTF4dUlDQWdJR2xtSUNoMllXd2dKaVlnZEhsd1pXOW1JSFpoYkNBOVBUMGdKMjlpYW1WamRDY3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tFRnljbUY1TG1selFYSnlZWGtvZG1Gc0tTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJSFpoYkM1c1pXNW5kR2c3SUdrZ1BDQnNaVzQ3SUNzcmFTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElIWXdJRDBnZG1Gc1cybGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElIWXhJRDBnWVhCd2JIbFNaWFpwZG1WeUtISmxkbWwyWlhJc0lIWmhiQ3dnVTNSeWFXNW5LR2twTENCMk1DazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRUIwZVhCbGMyTnlhWEIwTFdWemJHbHVkQzl1YnkxaGNuSmhlUzFrWld4bGRHVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZGpFZ1BUMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHVnNaWFJsSUhaaGJGdHBYVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2gyTVNBaFBUMGdkakFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhiRnRwWFNBOUlIWXhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLSFpoYkNCcGJuTjBZVzVqWlc5bUlFMWhjQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0JySUc5bUlFRnljbUY1TG1aeWIyMG9kbUZzTG10bGVYTW9LU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IyTUNBOUlIWmhiQzVuWlhRb2F5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RqRWdQU0JoY0hCc2VWSmxkbWwyWlhJb2NtVjJhWFpsY2l3Z2RtRnNMQ0JyTENCMk1DazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hZeElEMDlQU0IxYm1SbFptbHVaV1FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhiQzVrWld4bGRHVW9heWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnBaaUFvZGpFZ0lUMDlJSFl3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZV3d1YzJWMEtHc3NJSFl4S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoMllXd2dhVzV6ZEdGdVkyVnZaaUJUWlhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdadmNpQW9ZMjl1YzNRZ2RqQWdiMllnUVhKeVlYa3Vabkp2YlNoMllXd3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkakVnUFNCaGNIQnNlVkpsZG1sMlpYSW9jbVYyYVhabGNpd2dkbUZzTENCMk1Dd2dkakFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDJNU0E5UFQwZ2RXNWtaV1pwYm1Wa0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd3dVpHVnNaWFJsS0hZd0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaDJNU0FoUFQwZ2RqQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnNMbVJsYkdWMFpTaDJNQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhiQzVoWkdRb2RqRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdadmNpQW9ZMjl1YzNRZ1cyc3NJSFl3WFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3loMllXd3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkakVnUFNCaGNIQnNlVkpsZG1sMlpYSW9jbVYyYVhabGNpd2dkbUZzTENCckxDQjJNQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIWXhJRDA5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JsYkdWMFpTQjJZV3hiYTEwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2RqRWdJVDA5SUhZd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd4YmExMGdQU0IyTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2NtVjJhWFpsY2k1allXeHNLRzlpYWl3Z2EyVjVMQ0IyWVd3cE8xeHVmVnh1WEc1bGVIQnZjblFnZXlCaGNIQnNlVkpsZG1sMlpYSWdmVHRjYmlJc0lDSnBiWEJ2Y25RZ2V5Qm9ZWE5CYm1Ob2IzSWdmU0JtY205dElDY3VMMmxrWlc1MGFYUjVMbXB6Snp0Y2JseHVMeW9xWEc0Z0tpQlNaV04xY25OcGRtVnNlU0JqYjI1MlpYSjBJR0Z1ZVNCdWIyUmxJRzl5SUdsMGN5QmpiMjUwWlc1MGN5QjBieUJ1WVhScGRtVWdTbUYyWVZOamNtbHdkRnh1SUNwY2JpQXFJRUJ3WVhKaGJTQjJZV3gxWlNBdElGUm9aU0JwYm5CMWRDQjJZV3gxWlZ4dUlDb2dRSEJoY21GdElHRnlaeUF0SUVsbUlHQjJZV3gxWldBZ1pHVm1hVzVsY3lCaElHQjBiMHBUVDA0b0tXQWdiV1YwYUc5a0xDQjFjMlVnZEdocGMxeHVJQ29nSUNCaGN5QnBkSE1nWm1seWMzUWdZWEpuZFcxbGJuUmNiaUFxSUVCd1lYSmhiU0JqZEhnZ0xTQkRiMjUyWlhKemFXOXVJR052Ym5SbGVIUXNJRzl5YVdkcGJtRnNiSGtnYzJWMElHbHVJRVJ2WTNWdFpXNTBJM1J2U2xNb0tTNGdTV1pjYmlBcUlDQWdZSHNnYTJWbGNEb2dkSEoxWlNCOVlDQnBjeUJ1YjNRZ2MyVjBMQ0J2ZFhSd2RYUWdjMmh2ZFd4a0lHSmxJSE4xYVhSaFlteGxJR1p2Y2lCS1UwOU9YRzRnS2lBZ0lITjBjbWx1WjJsbWFXTmhkR2x2Ymk1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnZEc5S1V5aDJZV3gxWlN3Z1lYSm5MQ0JqZEhncElIdGNiaUFnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNXZMWFZ1YzJGbVpTMXlaWFIxY201Y2JpQWdJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2gyWVd4MVpTa3BYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjJZV3gxWlM1dFlYQW9LSFlzSUdrcElEMCtJSFJ2U2xNb2Rpd2dVM1J5YVc1bktHa3BMQ0JqZEhncEtUdGNiaUFnSUNCcFppQW9kbUZzZFdVZ0ppWWdkSGx3Wlc5bUlIWmhiSFZsTG5SdlNsTlBUaUE5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDI1dkxYVnVjMkZtWlMxallXeHNYRzRnSUNBZ0lDQWdJR2xtSUNnaFkzUjRJSHg4SUNGb1lYTkJibU5vYjNJb2RtRnNkV1VwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIWmhiSFZsTG5SdlNsTlBUaWhoY21jc0lHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JoZEdFZ1BTQjdJR0ZzYVdGelEyOTFiblE2SURBc0lHTnZkVzUwT2lBeExDQnlaWE02SUhWdVpHVm1hVzVsWkNCOU8xeHVJQ0FnSUNBZ0lDQmpkSGd1WVc1amFHOXljeTV6WlhRb2RtRnNkV1VzSUdSaGRHRXBPMXh1SUNBZ0lDQWdJQ0JqZEhndWIyNURjbVZoZEdVZ1BTQnlaWE1nUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlTNXlaWE1nUFNCeVpYTTdYRzRnSUNBZ0lDQWdJQ0FnSUNCa1pXeGxkR1VnWTNSNExtOXVRM0psWVhSbE8xeHVJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE1nUFNCMllXeDFaUzUwYjBwVFQwNG9ZWEpuTENCamRIZ3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb1kzUjRMbTl1UTNKbFlYUmxLVnh1SUNBZ0lDQWdJQ0FnSUNBZ1kzUjRMbTl1UTNKbFlYUmxLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTTdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlDZGlhV2RwYm5RbklDWW1JQ0ZqZEhnL0xtdGxaWEFwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJPZFcxaVpYSW9kbUZzZFdVcE8xeHVJQ0FnSUhKbGRIVnliaUIyWVd4MVpUdGNibjFjYmx4dVpYaHdiM0owSUhzZ2RHOUtVeUI5TzF4dUlpd2dJbWx0Y0c5eWRDQjdJR0Z3Y0d4NVVtVjJhWFpsY2lCOUlHWnliMjBnSnk0dUwyUnZZeTloY0hCc2VWSmxkbWwyWlhJdWFuTW5PMXh1YVcxd2IzSjBJSHNnVGs5RVJWOVVXVkJGTENCcGMwUnZZM1Z0Wlc1MElIMGdabkp2YlNBbkxpOXBaR1Z1ZEdsMGVTNXFjeWM3WEc1cGJYQnZjblFnZXlCMGIwcFRJSDBnWm5KdmJTQW5MaTkwYjBwVExtcHpKenRjYmx4dVkyeGhjM01nVG05a1pVSmhjMlVnZTF4dUlDQWdJR052Ym5OMGNuVmpkRzl5S0hSNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIUm9hWE1zSUU1UFJFVmZWRmxRUlN3Z2V5QjJZV3gxWlRvZ2RIbHdaU0I5S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdMeW9xSUVOeVpXRjBaU0JoSUdOdmNIa2diMllnZEdocGN5QnViMlJsTGlBZ0tpOWNiaUFnSUNCamJHOXVaU2dwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTI5d2VTQTlJRTlpYW1WamRDNWpjbVZoZEdVb1QySnFaV04wTG1kbGRGQnliM1J2ZEhsd1pVOW1LSFJvYVhNcExDQlBZbXBsWTNRdVoyVjBUM2R1VUhKdmNHVnlkSGxFWlhOamNtbHdkRzl5Y3loMGFHbHpLU2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5KaGJtZGxLVnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXdlUzV5WVc1blpTQTlJSFJvYVhNdWNtRnVaMlV1YzJ4cFkyVW9LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR052Y0hrN1hHNGdJQ0FnZlZ4dUlDQWdJQzhxS2lCQklIQnNZV2x1SUVwaGRtRlRZM0pwY0hRZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjeUJ1YjJSbExpQXFMMXh1SUNBZ0lIUnZTbE1vWkc5akxDQjdJRzFoY0VGelRXRndMQ0J0WVhoQmJHbGhjME52ZFc1MExDQnZia0Z1WTJodmNpd2djbVYyYVhabGNpQjlJRDBnZTMwcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0NGcGMwUnZZM1Z0Wlc1MEtHUnZZeWtwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RCSUdSdlkzVnRaVzUwSUdGeVozVnRaVzUwSUdseklISmxjWFZwY21Wa0p5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElHTjBlQ0E5SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0Z1WTJodmNuTTZJRzVsZHlCTllYQW9LU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHUnZZeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHdGxaWEE2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCdFlYQkJjMDFoY0RvZ2JXRndRWE5OWVhBZ1BUMDlJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WVhCTFpYbFhZWEp1WldRNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiV0Y0UVd4cFlYTkRiM1Z1ZERvZ2RIbHdaVzltSUcxaGVFRnNhV0Z6UTI5MWJuUWdQVDA5SUNkdWRXMWlaWEluSUQ4Z2JXRjRRV3hwWVhORGIzVnVkQ0E2SURFd01GeHVJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE1nUFNCMGIwcFRLSFJvYVhNc0lDY25MQ0JqZEhncE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzl1UVc1amFHOXlJRDA5UFNBblpuVnVZM1JwYjI0bktWeHVJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaGpiMjV6ZENCN0lHTnZkVzUwTENCeVpYTWdmU0J2WmlCamRIZ3VZVzVqYUc5eWN5NTJZV3gxWlhNb0tTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia0Z1WTJodmNpaHlaWE1zSUdOdmRXNTBLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFI1Y0dWdlppQnlaWFpwZG1WeUlEMDlQU0FuWm5WdVkzUnBiMjRuWEc0Z0lDQWdJQ0FnSUNBZ0lDQS9JR0Z3Y0d4NVVtVjJhWFpsY2loeVpYWnBkbVZ5TENCN0lDY25PaUJ5WlhNZ2ZTd2dKeWNzSUhKbGN5bGNiaUFnSUNBZ0lDQWdJQ0FnSURvZ2NtVnpPMXh1SUNBZ0lIMWNibjFjYmx4dVpYaHdiM0owSUhzZ1RtOWtaVUpoYzJVZ2ZUdGNiaUlzSUNKcGJYQnZjblFnZXlCaGJtTm9iM0pKYzFaaGJHbGtJSDBnWm5KdmJTQW5MaTR2Wkc5akwyRnVZMmh2Y25NdWFuTW5PMXh1YVcxd2IzSjBJSHNnZG1semFYUWdmU0JtY205dElDY3VMaTkyYVhOcGRDNXFjeWM3WEc1cGJYQnZjblFnZXlCQlRFbEJVeXdnYVhOQmJHbGhjeXdnYVhORGIyeHNaV04wYVc5dUxDQnBjMUJoYVhJZ2ZTQm1jbTl0SUNjdUwybGtaVzUwYVhSNUxtcHpKenRjYm1sdGNHOXlkQ0I3SUU1dlpHVkNZWE5sSUgwZ1puSnZiU0FuTGk5T2IyUmxMbXB6Snp0Y2JtbHRjRzl5ZENCN0lIUnZTbE1nZlNCbWNtOXRJQ2N1TDNSdlNsTXVhbk1uTzF4dVhHNWpiR0Z6Y3lCQmJHbGhjeUJsZUhSbGJtUnpJRTV2WkdWQ1lYTmxJSHRjYmlBZ0lDQmpiMjV6ZEhKMVkzUnZjaWh6YjNWeVkyVXBJSHRjYmlBZ0lDQWdJQ0FnYzNWd1pYSW9RVXhKUVZNcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5OdmRYSmpaU0E5SUhOdmRYSmpaVHRjYmlBZ0lDQWdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIUm9hWE1zSUNkMFlXY25MQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWFFvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQmJHbGhjeUJ1YjJSbGN5QmpZVzV1YjNRZ2FHRjJaU0IwWVdkekp5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lIMWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQlNaWE52YkhabElIUm9aU0IyWVd4MVpTQnZaaUIwYUdseklHRnNhV0Z6SUhkcGRHaHBiaUJnWkc5allDd2dabWx1WkdsdVp5QjBhR1VnYkdGemRGeHVJQ0FnSUNBcUlHbHVjM1JoYm1ObElHOW1JSFJvWlNCZ2MyOTFjbU5sWUNCaGJtTm9iM0lnWW1WbWIzSmxJSFJvYVhNZ2JtOWtaUzVjYmlBZ0lDQWdLaTljYmlBZ0lDQnlaWE52YkhabEtHUnZZeWtnZTF4dUlDQWdJQ0FnSUNCc1pYUWdabTkxYm1RZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQWdJSFpwYzJsMEtHUnZZeXdnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdUbTlrWlRvZ0tGOXJaWGtzSUc1dlpHVXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ibTlrWlNBOVBUMGdkR2hwY3lsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIWnBjMmwwTGtKU1JVRkxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodWIyUmxMbUZ1WTJodmNpQTlQVDBnZEdocGN5NXpiM1Z5WTJVcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1p2ZFc1a0lEMGdibTlrWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWIzVnVaRHRjYmlBZ0lDQjlYRzRnSUNBZ2RHOUtVMDlPS0Y5aGNtY3NJR04wZUNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVdOMGVDbGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUI3SUhOdmRYSmpaVG9nZEdocGN5NXpiM1Z5WTJVZ2ZUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2V5QmhibU5vYjNKekxDQmtiMk1zSUcxaGVFRnNhV0Z6UTI5MWJuUWdmU0E5SUdOMGVEdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ2RHaHBjeTV5WlhOdmJIWmxLR1J2WXlrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doYzI5MWNtTmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdGMyY2dQU0JnVlc1eVpYTnZiSFpsWkNCaGJHbGhjeUFvZEdobElHRnVZMmh2Y2lCdGRYTjBJR0psSUhObGRDQmlaV1p2Y21VZ2RHaGxJR0ZzYVdGektUb2dKSHQwYUdsekxuTnZkWEpqWlgxZ08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZKbFptVnlaVzVqWlVWeWNtOXlLRzF6WnlrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdiR1YwSUdSaGRHRWdQU0JoYm1Ob2IzSnpMbWRsZENoemIzVnlZMlVwTzF4dUlDQWdJQ0FnSUNCcFppQW9JV1JoZEdFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklGSmxjMjlzZG1VZ1lXNWphRzl5Y3lCbWIzSWdUbTlrWlM1d2NtOTBiM1I1Y0dVdWRHOUtVeWdwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBiMHBUS0hOdmRYSmpaU3dnYm5Wc2JDd2dZM1I0S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFZ1BTQmhibU5vYjNKekxtZGxkQ2h6YjNWeVkyVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4cUlHbHpkR0Z1WW5Wc0lHbG5ibTl5WlNCcFppQXFMMXh1SUNBZ0lDQWdJQ0JwWmlBb0lXUmhkR0VnZkh3Z1pHRjBZUzV5WlhNZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JYTm5JRDBnSjFSb2FYTWdjMmh2ZFd4a0lHNXZkQ0JvWVhCd1pXNDZJRUZzYVdGeklHRnVZMmh2Y2lCM1lYTWdibTkwSUhKbGMyOXNkbVZrUHljN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVW1WbVpYSmxibU5sUlhKeWIzSW9iWE5uS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnBaaUFvYldGNFFXeHBZWE5EYjNWdWRDQStQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaExtTnZkVzUwSUNzOUlERTdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9aR0YwWVM1aGJHbGhjME52ZFc1MElEMDlQU0F3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSaGRHRXVZV3hwWVhORGIzVnVkQ0E5SUdkbGRFRnNhV0Z6UTI5MWJuUW9aRzlqTENCemIzVnlZMlVzSUdGdVkyaHZjbk1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dSaGRHRXVZMjkxYm5RZ0tpQmtZWFJoTG1Gc2FXRnpRMjkxYm5RZ1BpQnRZWGhCYkdsaGMwTnZkVzUwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYlhObklEMGdKMFY0WTJWemMybDJaU0JoYkdsaGN5QmpiM1Z1ZENCcGJtUnBZMkYwWlhNZ1lTQnlaWE52ZFhKalpTQmxlR2hoZFhOMGFXOXVJR0YwZEdGamF5YzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRkpsWm1WeVpXNWpaVVZ5Y205eUtHMXpaeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1JoZEdFdWNtVnpPMXh1SUNBZ0lIMWNiaUFnSUNCMGIxTjBjbWx1WnloamRIZ3NJRjl2YmtOdmJXMWxiblFzSUY5dmJrTm9iMjF3UzJWbGNDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpjbU1nUFNCZ0tpUjdkR2hwY3k1emIzVnlZMlY5WUR0Y2JpQWdJQ0FnSUNBZ2FXWWdLR04wZUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWVc1amFHOXlTWE5XWVd4cFpDaDBhR2x6TG5OdmRYSmpaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWTNSNExtOXdkR2x2Ym5NdWRtVnlhV1o1UVd4cFlYTlBjbVJsY2lBbUppQWhZM1I0TG1GdVkyaHZjbk11YUdGektIUm9hWE11YzI5MWNtTmxLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzF6WnlBOUlHQlZibkpsYzI5c2RtVmtJR0ZzYVdGeklDaDBhR1VnWVc1amFHOXlJRzExYzNRZ1ltVWdjMlYwSUdKbFptOXlaU0IwYUdVZ1lXeHBZWE1wT2lBa2UzUm9hWE11YzI5MWNtTmxmV0E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRzF6WnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWTNSNExtbHRjR3hwWTJsMFMyVjVLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdKSHR6Y21OOUlHQTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE55WXp0Y2JpQWdJQ0I5WEc1OVhHNW1kVzVqZEdsdmJpQm5aWFJCYkdsaGMwTnZkVzUwS0dSdll5d2dibTlrWlN3Z1lXNWphRzl5Y3lrZ2UxeHVJQ0FnSUdsbUlDaHBjMEZzYVdGektHNXZaR1VwS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhOdmRYSmpaU0E5SUc1dlpHVXVjbVZ6YjJ4MlpTaGtiMk1wTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JoYm1Ob2IzSWdQU0JoYm1Ob2IzSnpJQ1ltSUhOdmRYSmpaU0FtSmlCaGJtTm9iM0p6TG1kbGRDaHpiM1Z5WTJVcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lXNWphRzl5SUQ4Z1lXNWphRzl5TG1OdmRXNTBJQ29nWVc1amFHOXlMbUZzYVdGelEyOTFiblFnT2lBd08xeHVJQ0FnSUgxY2JpQWdJQ0JsYkhObElHbG1JQ2hwYzBOdmJHeGxZM1JwYjI0b2JtOWtaU2twSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR052ZFc1MElEMGdNRHRjYmlBZ0lDQWdJQ0FnWm05eUlDaGpiMjV6ZENCcGRHVnRJRzltSUc1dlpHVXVhWFJsYlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR01nUFNCblpYUkJiR2xoYzBOdmRXNTBLR1J2WXl3Z2FYUmxiU3dnWVc1amFHOXljeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWXlBK0lHTnZkVzUwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmRXNTBJRDBnWXp0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOTFiblE3WEc0Z0lDQWdmVnh1SUNBZ0lHVnNjMlVnYVdZZ0tHbHpVR0ZwY2lodWIyUmxLU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JyWXlBOUlHZGxkRUZzYVdGelEyOTFiblFvWkc5akxDQnViMlJsTG10bGVTd2dZVzVqYUc5eWN5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElIWmpJRDBnWjJWMFFXeHBZWE5EYjNWdWRDaGtiMk1zSUc1dlpHVXVkbUZzZFdVc0lHRnVZMmh2Y25NcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1RXRjBhQzV0WVhnb2EyTXNJSFpqS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlERTdYRzU5WEc1Y2JtVjRjRzl5ZENCN0lFRnNhV0Z6SUgwN1hHNGlMQ0FpYVcxd2IzSjBJSHNnVTBOQlRFRlNJSDBnWm5KdmJTQW5MaTlwWkdWdWRHbDBlUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5Qk9iMlJsUW1GelpTQjlJR1p5YjIwZ0p5NHZUbTlrWlM1cWN5YzdYRzVwYlhCdmNuUWdleUIwYjBwVElIMGdabkp2YlNBbkxpOTBiMHBUTG1wekp6dGNibHh1WTI5dWMzUWdhWE5UWTJGc1lYSldZV3gxWlNBOUlDaDJZV3gxWlNrZ1BUNGdJWFpoYkhWbElIeDhJQ2gwZVhCbGIyWWdkbUZzZFdVZ0lUMDlJQ2RtZFc1amRHbHZiaWNnSmlZZ2RIbHdaVzltSUhaaGJIVmxJQ0U5UFNBbmIySnFaV04wSnlrN1hHNWpiR0Z6Y3lCVFkyRnNZWElnWlhoMFpXNWtjeUJPYjJSbFFtRnpaU0I3WEc0Z0lDQWdZMjl1YzNSeWRXTjBiM0lvZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnYzNWd1pYSW9VME5CVEVGU0tUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MllXeDFaU0E5SUhaaGJIVmxPMXh1SUNBZ0lIMWNiaUFnSUNCMGIwcFRUMDRvWVhKbkxDQmpkSGdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOMGVEOHVhMlZsY0NBL0lIUm9hWE11ZG1Gc2RXVWdPaUIwYjBwVEtIUm9hWE11ZG1Gc2RXVXNJR0Z5Wnl3Z1kzUjRLVHRjYmlBZ0lDQjlYRzRnSUNBZ2RHOVRkSEpwYm1jb0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQlRkSEpwYm1jb2RHaHBjeTUyWVd4MVpTazdYRzRnSUNBZ2ZWeHVmVnh1VTJOaGJHRnlMa0pNVDBOTFgwWlBURVJGUkNBOUlDZENURTlEUzE5R1QweEVSVVFuTzF4dVUyTmhiR0Z5TGtKTVQwTkxYMHhKVkVWU1FVd2dQU0FuUWt4UFEwdGZURWxVUlZKQlRDYzdYRzVUWTJGc1lYSXVVRXhCU1U0Z1BTQW5VRXhCU1U0bk8xeHVVMk5oYkdGeUxsRlZUMVJGWDBSUFZVSk1SU0E5SUNkUlZVOVVSVjlFVDFWQ1RFVW5PMXh1VTJOaGJHRnlMbEZWVDFSRlgxTkpUa2RNUlNBOUlDZFJWVTlVUlY5VFNVNUhURVVuTzF4dVhHNWxlSEJ2Y25RZ2V5QlRZMkZzWVhJc0lHbHpVMk5oYkdGeVZtRnNkV1VnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJCYkdsaGN5QjlJR1p5YjIwZ0p5NHVMMjV2WkdWekwwRnNhV0Z6TG1wekp6dGNibWx0Y0c5eWRDQjdJR2x6VG05a1pTd2dhWE5RWVdseUxDQk5RVkFzSUZORlVTd2dhWE5FYjJOMWJXVnVkQ0I5SUdaeWIyMGdKeTR1TDI1dlpHVnpMMmxrWlc1MGFYUjVMbXB6Snp0Y2JtbHRjRzl5ZENCN0lGTmpZV3hoY2lCOUlHWnliMjBnSnk0dUwyNXZaR1Z6TDFOallXeGhjaTVxY3ljN1hHNWNibU52Ym5OMElHUmxabUYxYkhSVVlXZFFjbVZtYVhnZ1BTQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZKenRjYm1aMWJtTjBhVzl1SUdacGJtUlVZV2RQWW1wbFkzUW9kbUZzZFdVc0lIUmhaMDVoYldVc0lIUmhaM01wSUh0Y2JpQWdJQ0JwWmlBb2RHRm5UbUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdFlYUmphQ0E5SUhSaFozTXVabWxzZEdWeUtIUWdQVDRnZEM1MFlXY2dQVDA5SUhSaFowNWhiV1VwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IwWVdkUFltb2dQU0J0WVhSamFDNW1hVzVrS0hRZ1BUNGdJWFF1Wm05eWJXRjBLU0EvUHlCdFlYUmphRnN3WFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0YwWVdkUFltb3BYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUZSaFp5QWtlM1JoWjA1aGJXVjlJRzV2ZENCbWIzVnVaR0FwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdGblQySnFPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEdGbmN5NW1hVzVrS0hRZ1BUNGdkQzVwWkdWdWRHbG1lVDh1S0haaGJIVmxLU0FtSmlBaGRDNW1iM0p0WVhRcE8xeHVmVnh1Wm5WdVkzUnBiMjRnWTNKbFlYUmxUbTlrWlNoMllXeDFaU3dnZEdGblRtRnRaU3dnWTNSNEtTQjdYRzRnSUNBZ2FXWWdLR2x6Ukc5amRXMWxiblFvZG1Gc2RXVXBLVnh1SUNBZ0lDQWdJQ0IyWVd4MVpTQTlJSFpoYkhWbExtTnZiblJsYm5Sek8xeHVJQ0FnSUdsbUlDaHBjMDV2WkdVb2RtRnNkV1VwS1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZG1Gc2RXVTdYRzRnSUNBZ2FXWWdLR2x6VUdGcGNpaDJZV3gxWlNrcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2JXRndJRDBnWTNSNExuTmphR1Z0WVZ0TlFWQmRMbU55WldGMFpVNXZaR1UvTGloamRIZ3VjMk5vWlcxaExDQnVkV3hzTENCamRIZ3BPMXh1SUNBZ0lDQWdJQ0J0WVhBdWFYUmxiWE11Y0hWemFDaDJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdFlYQTdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaDJZV3gxWlNCcGJuTjBZVzVqWlc5bUlGTjBjbWx1WnlCOGZGeHVJQ0FnSUNBZ0lDQjJZV3gxWlNCcGJuTjBZVzVqWlc5bUlFNTFiV0psY2lCOGZGeHVJQ0FnSUNBZ0lDQjJZV3gxWlNCcGJuTjBZVzVqWlc5bUlFSnZiMnhsWVc0Z2ZIeGNiaUFnSUNBZ0lDQWdLSFI1Y0dWdlppQkNhV2RKYm5RZ0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbUlIWmhiSFZsSUdsdWMzUmhibU5sYjJZZ1FtbG5TVzUwS1NBdkx5QnViM1FnYzNWd2NHOXlkR1ZrSUdWMlpYSjVkMmhsY21WY2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdhSFIwY0hNNkx5OTBZek01TG1WekwyVmpiV0V5TmpJdkkzTmxZeTF6WlhKcFlXeHBlbVZxYzI5dWNISnZjR1Z5ZEhsY2JpQWdJQ0FnSUNBZ2RtRnNkV1VnUFNCMllXeDFaUzUyWVd4MVpVOW1LQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUhzZ1lXeHBZWE5FZFhCc2FXTmhkR1ZQWW1wbFkzUnpMQ0J2YmtGdVkyaHZjaXdnYjI1VVlXZFBZbW9zSUhOamFHVnRZU3dnYzI5MWNtTmxUMkpxWldOMGN5QjlJRDBnWTNSNE8xeHVJQ0FnSUM4dklFUmxkR1ZqZENCa2RYQnNhV05oZEdVZ2NtVm1aWEpsYm1ObGN5QjBieUIwYUdVZ2MyRnRaU0J2WW1wbFkzUWdKaUIxYzJVZ1FXeHBZWE1nYm05a1pYTWdabTl5SUdGc2JGeHVJQ0FnSUM4dklHRm1kR1Z5SUdacGNuTjBMaUJVYUdVZ1lISmxabUFnZDNKaGNIQmxjaUJoYkd4dmQzTWdabTl5SUdOcGNtTjFiR0Z5SUhKbFptVnlaVzVqWlhNZ2RHOGdjbVZ6YjJ4MlpTNWNiaUFnSUNCc1pYUWdjbVZtSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUdsbUlDaGhiR2xoYzBSMWNHeHBZMkYwWlU5aWFtVmpkSE1nSmlZZ2RtRnNkV1VnSmlZZ2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBbmIySnFaV04wSnlrZ2UxeHVJQ0FnSUNBZ0lDQnlaV1lnUFNCemIzVnlZMlZQWW1wbFkzUnpMbWRsZENoMllXeDFaU2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaV1lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaGNtVm1MbUZ1WTJodmNpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaV1l1WVc1amFHOXlJRDBnYjI1QmJtTm9iM0lvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QkJiR2xoY3loeVpXWXVZVzVqYUc5eUtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbFppQTlJSHNnWVc1amFHOXlPaUJ1ZFd4c0xDQnViMlJsT2lCdWRXeHNJSDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpiM1Z5WTJWUFltcGxZM1J6TG5ObGRDaDJZV3gxWlN3Z2NtVm1LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvZEdGblRtRnRaVDh1YzNSaGNuUnpWMmwwYUNnbklTRW5LU2xjYmlBZ0lDQWdJQ0FnZEdGblRtRnRaU0E5SUdSbFptRjFiSFJVWVdkUWNtVm1hWGdnS3lCMFlXZE9ZVzFsTG5Oc2FXTmxLRElwTzF4dUlDQWdJR3hsZENCMFlXZFBZbW9nUFNCbWFXNWtWR0ZuVDJKcVpXTjBLSFpoYkhWbExDQjBZV2RPWVcxbExDQnpZMmhsYldFdWRHRm5jeWs3WEc0Z0lDQWdhV1lnS0NGMFlXZFBZbW9wSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFpoYkhWbElDWW1JSFI1Y0dWdlppQjJZV3gxWlM1MGIwcFRUMDRnUFQwOUlDZG1kVzVqZEdsdmJpY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQkFkSGx3WlhOamNtbHdkQzFsYzJ4cGJuUXZibTh0ZFc1ellXWmxMV05oYkd4Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbElEMGdkbUZzZFdVdWRHOUtVMDlPS0NrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0NGMllXeDFaU0I4ZkNCMGVYQmxiMllnZG1Gc2RXVWdJVDA5SUNkdlltcGxZM1FuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnViMlJsSUQwZ2JtVjNJRk5qWVd4aGNpaDJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVm1LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWmk1dWIyUmxJRDBnYm05a1pUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1YjJSbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFJoWjA5aWFpQTlYRzRnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaU0JwYm5OMFlXNWpaVzltSUUxaGNGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdjMk5vWlcxaFcwMUJVRjFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUZONWJXSnZiQzVwZEdWeVlYUnZjaUJwYmlCUFltcGxZM1FvZG1Gc2RXVXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUQ4Z2MyTm9aVzFoVzFORlVWMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lCelkyaGxiV0ZiVFVGUVhUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHOXVWR0ZuVDJKcUtTQjdYRzRnSUNBZ0lDQWdJRzl1VkdGblQySnFLSFJoWjA5aWFpazdYRzRnSUNBZ0lDQWdJR1JsYkdWMFpTQmpkSGd1YjI1VVlXZFBZbW83WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUc1dlpHVWdQU0IwWVdkUFltby9MbU55WldGMFpVNXZaR1ZjYmlBZ0lDQWdJQ0FnUHlCMFlXZFBZbW91WTNKbFlYUmxUbTlrWlNoamRIZ3VjMk5vWlcxaExDQjJZV3gxWlN3Z1kzUjRLVnh1SUNBZ0lDQWdJQ0E2SUhSNWNHVnZaaUIwWVdkUFltby9MbTV2WkdWRGJHRnpjejh1Wm5KdmJTQTlQVDBnSjJaMWJtTjBhVzl1SjF4dUlDQWdJQ0FnSUNBZ0lDQWdQeUIwWVdkUFltb3VibTlrWlVOc1lYTnpMbVp5YjIwb1kzUjRMbk5qYUdWdFlTd2dkbUZzZFdVc0lHTjBlQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lEb2dibVYzSUZOallXeGhjaWgyWVd4MVpTazdYRzRnSUNBZ2FXWWdLSFJoWjA1aGJXVXBYRzRnSUNBZ0lDQWdJRzV2WkdVdWRHRm5JRDBnZEdGblRtRnRaVHRjYmlBZ0lDQmxiSE5sSUdsbUlDZ2hkR0ZuVDJKcUxtUmxabUYxYkhRcFhHNGdJQ0FnSUNBZ0lHNXZaR1V1ZEdGbklEMGdkR0ZuVDJKcUxuUmhaenRjYmlBZ0lDQnBaaUFvY21WbUtWeHVJQ0FnSUNBZ0lDQnlaV1l1Ym05a1pTQTlJRzV2WkdVN1hHNGdJQ0FnY21WMGRYSnVJRzV2WkdVN1hHNTlYRzVjYm1WNGNHOXlkQ0I3SUdOeVpXRjBaVTV2WkdVZ2ZUdGNiaUlzSUNKcGJYQnZjblFnZXlCamNtVmhkR1ZPYjJSbElIMGdabkp2YlNBbkxpNHZaRzlqTDJOeVpXRjBaVTV2WkdVdWFuTW5PMXh1YVcxd2IzSjBJSHNnYVhOT2IyUmxMQ0JwYzFCaGFYSXNJR2x6UTI5c2JHVmpkR2x2Yml3Z2FYTlRZMkZzWVhJZ2ZTQm1jbTl0SUNjdUwybGtaVzUwYVhSNUxtcHpKenRjYm1sdGNHOXlkQ0I3SUU1dlpHVkNZWE5sSUgwZ1puSnZiU0FuTGk5T2IyUmxMbXB6Snp0Y2JseHVablZ1WTNScGIyNGdZMjlzYkdWamRHbHZia1p5YjIxUVlYUm9LSE5qYUdWdFlTd2djR0YwYUN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0JzWlhRZ2RpQTlJSFpoYkhWbE8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQndZWFJvTG14bGJtZDBhQ0F0SURFN0lHa2dQajBnTURzZ0xTMXBLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR3NnUFNCd1lYUm9XMmxkTzF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHc2dQVDA5SUNkdWRXMWlaWEluSUNZbUlFNTFiV0psY2k1cGMwbHVkR1ZuWlhJb2F5a2dKaVlnYXlBK1BTQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCaElEMGdXMTA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmhXMnRkSUQwZ2RqdGNiaUFnSUNBZ0lDQWdJQ0FnSUhZZ1BTQmhPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RpQTlJRzVsZHlCTllYQW9XMXRyTENCMlhWMHBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCamNtVmhkR1ZPYjJSbEtIWXNJSFZ1WkdWbWFXNWxaQ3dnZTF4dUlDQWdJQ0FnSUNCaGJHbGhjMFIxY0d4cFkyRjBaVTlpYW1WamRITTZJR1poYkhObExGeHVJQ0FnSUNBZ0lDQnJaV1Z3Vlc1a1pXWnBibVZrT2lCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnYjI1QmJtTm9iM0k2SUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZHaHBjeUJ6YUc5MWJHUWdibTkwSUdoaGNIQmxiaXdnY0d4bFlYTmxJSEpsY0c5eWRDQmhJR0oxWnk0bktUdGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnYzJOb1pXMWhMRnh1SUNBZ0lDQWdJQ0J6YjNWeVkyVlBZbXBsWTNSek9pQnVaWGNnVFdGd0tDbGNiaUFnSUNCOUtUdGNibjFjYmk4dklGUjVjR1VnWjNWaGNtUWdhWE1nYVc1MFpXNTBhVzl1WVd4c2VTQmhJR3hwZEhSc1pTQjNjbTl1WnlCemJ5QmhjeUIwYnlCaVpTQnRiM0psSUhWelpXWjFiQ3hjYmk4dklHRnpJR2wwSUdSdlpYTWdibTkwSUdOdmRtVnlJSFZ1ZEhsd1lXSnNaU0JsYlhCMGVTQnViMjR0YzNSeWFXNW5JR2wwWlhKaFlteGxjeUFvWlM1bkxpQmJYU2t1WEc1amIyNXpkQ0JwYzBWdGNIUjVVR0YwYUNBOUlDaHdZWFJvS1NBOVBpQndZWFJvSUQwOUlHNTFiR3dnZkh4Y2JpQWdJQ0FvZEhsd1pXOW1JSEJoZEdnZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUNFaGNHRjBhRnRUZVcxaWIyd3VhWFJsY21GMGIzSmRLQ2t1Ym1WNGRDZ3BMbVJ2Ym1VcE8xeHVZMnhoYzNNZ1EyOXNiR1ZqZEdsdmJpQmxlSFJsYm1SeklFNXZaR1ZDWVhObElIdGNiaUFnSUNCamIyNXpkSEoxWTNSdmNpaDBlWEJsTENCelkyaGxiV0VwSUh0Y2JpQWdJQ0FnSUNBZ2MzVndaWElvZEhsd1pTazdYRzRnSUNBZ0lDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMGFHbHpMQ0FuYzJOb1pXMWhKeXdnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZzZFdVNklITmphR1Z0WVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym1acFozVnlZV0pzWlRvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnVkVzFsY21GaWJHVTZJR1poYkhObExGeHVJQ0FnSUNBZ0lDQWdJQ0FnZDNKcGRHRmliR1U2SUhSeWRXVmNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRU55WldGMFpTQmhJR052Y0hrZ2IyWWdkR2hwY3lCamIyeHNaV04wYVc5dUxseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUhOamFHVnRZU0F0SUVsbUlHUmxabWx1WldRc0lHOTJaWEozY21sMFpYTWdkR2hsSUc5eWFXZHBibUZzSjNNZ2MyTm9aVzFoWEc0Z0lDQWdJQ292WEc0Z0lDQWdZMnh2Ym1Vb2MyTm9aVzFoS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdOdmNIa2dQU0JQWW1wbFkzUXVZM0psWVhSbEtFOWlhbVZqZEM1blpYUlFjbTkwYjNSNWNHVlBaaWgwYUdsektTd2dUMkpxWldOMExtZGxkRTkzYmxCeWIzQmxjblI1UkdWelkzSnBjSFJ2Y25Nb2RHaHBjeWtwTzF4dUlDQWdJQ0FnSUNCcFppQW9jMk5vWlcxaEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5d2VTNXpZMmhsYldFZ1BTQnpZMmhsYldFN1hHNGdJQ0FnSUNBZ0lHTnZjSGt1YVhSbGJYTWdQU0JqYjNCNUxtbDBaVzF6TG0xaGNDaHBkQ0E5UGlCcGMwNXZaR1VvYVhRcElIeDhJR2x6VUdGcGNpaHBkQ2tnUHlCcGRDNWpiRzl1WlNoelkyaGxiV0VwSURvZ2FYUXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV5WVc1blpTbGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmNIa3VjbUZ1WjJVZ1BTQjBhR2x6TG5KaGJtZGxMbk5zYVdObEtDazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmpiM0I1TzF4dUlDQWdJSDFjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJCWkdSeklHRWdkbUZzZFdVZ2RHOGdkR2hsSUdOdmJHeGxZM1JwYjI0dUlFWnZjaUJnSVNGdFlYQmdJR0Z1WkNCZ0lTRnZiV0Z3WUNCMGFHVWdkbUZzZFdVZ2JYVnpkRnh1SUNBZ0lDQXFJR0psSUdFZ1VHRnBjaUJwYm5OMFlXNWpaU0J2Y2lCaElHQjdJR3RsZVN3Z2RtRnNkV1VnZldBZ2IySnFaV04wTENCM2FHbGphQ0J0WVhrZ2JtOTBJR2hoZG1VZ1lTQnJaWGxjYmlBZ0lDQWdLaUIwYUdGMElHRnNjbVZoWkhrZ1pYaHBjM1J6SUdsdUlIUm9aU0J0WVhBdVhHNGdJQ0FnSUNvdlhHNGdJQ0FnWVdSa1NXNG9jR0YwYUN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x6Ulcxd2RIbFFZWFJvS0hCaGRHZ3BLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVoWkdRb2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUZ0clpYa3NJQzR1TG5KbGMzUmRJRDBnY0dGMGFEdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzV2WkdVZ1BTQjBhR2x6TG1kbGRDaHJaWGtzSUhSeWRXVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2x6UTI5c2JHVmpkR2x2YmlodWIyUmxLU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1YjJSbExtRmtaRWx1S0hKbGMzUXNJSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdhV1lnS0c1dlpHVWdQVDA5SUhWdVpHVm1hVzVsWkNBbUppQjBhR2x6TG5OamFHVnRZU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuTmxkQ2hyWlhrc0lHTnZiR3hsWTNScGIyNUdjbTl0VUdGMGFDaDBhR2x6TG5OamFHVnRZU3dnY21WemRDd2dkbUZzZFdVcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFVjRjR1ZqZEdWa0lGbEJUVXdnWTI5c2JHVmpkR2x2YmlCaGRDQWtlMnRsZVgwdUlGSmxiV0ZwYm1sdVp5QndZWFJvT2lBa2UzSmxjM1I5WUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNvZ1VtVnRiM1psY3lCaElIWmhiSFZsSUdaeWIyMGdkR2hsSUdOdmJHeGxZM1JwYjI0dVhHNGdJQ0FnSUNvZ1FISmxkSFZ5Ym5NZ1lIUnlkV1ZnSUdsbUlIUm9aU0JwZEdWdElIZGhjeUJtYjNWdVpDQmhibVFnY21WdGIzWmxaQzVjYmlBZ0lDQWdLaTljYmlBZ0lDQmtaV3hsZEdWSmJpaHdZWFJvS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUZ0clpYa3NJQzR1TG5KbGMzUmRJRDBnY0dGMGFEdGNiaUFnSUNBZ0lDQWdhV1lnS0hKbGMzUXViR1Z1WjNSb0lEMDlQU0F3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WkdWc1pYUmxLR3RsZVNrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUc1dlpHVWdQU0IwYUdsekxtZGxkQ2hyWlhrc0lIUnlkV1VwTzF4dUlDQWdJQ0FnSUNCcFppQW9hWE5EYjJ4c1pXTjBhVzl1S0c1dlpHVXBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1dlpHVXVaR1ZzWlhSbFNXNG9jbVZ6ZENrN1hHNGdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JYaHdaV04wWldRZ1dVRk5UQ0JqYjJ4c1pXTjBhVzl1SUdGMElDUjdhMlY1ZlM0Z1VtVnRZV2x1YVc1bklIQmhkR2c2SUNSN2NtVnpkSDFnS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nVW1WMGRYSnVjeUJwZEdWdElHRjBJR0JyWlhsZ0xDQnZjaUJnZFc1a1pXWnBibVZrWUNCcFppQnViM1FnWm05MWJtUXVJRUo1SUdSbFptRjFiSFFnZFc1M2NtRndjMXh1SUNBZ0lDQXFJSE5qWVd4aGNpQjJZV3gxWlhNZ1puSnZiU0IwYUdWcGNpQnpkWEp5YjNWdVpHbHVaeUJ1YjJSbE95QjBieUJrYVhOaFlteGxJSE5sZENCZ2EyVmxjRk5qWVd4aGNtQWdkRzljYmlBZ0lDQWdLaUJnZEhKMVpXQWdLR052Ykd4bFkzUnBiMjV6SUdGeVpTQmhiSGRoZVhNZ2NtVjBkWEp1WldRZ2FXNTBZV04wS1M1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0JuWlhSSmJpaHdZWFJvTENCclpXVndVMk5oYkdGeUtTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElGdHJaWGtzSUM0dUxuSmxjM1JkSUQwZ2NHRjBhRHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdibTlrWlNBOUlIUm9hWE11WjJWMEtHdGxlU3dnZEhKMVpTazdYRzRnSUNBZ0lDQWdJR2xtSUNoeVpYTjBMbXhsYm1kMGFDQTlQVDBnTUNsY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQWhhMlZsY0ZOallXeGhjaUFtSmlCcGMxTmpZV3hoY2lodWIyUmxLU0EvSUc1dlpHVXVkbUZzZFdVZ09pQnViMlJsTzF4dUlDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYVhORGIyeHNaV04wYVc5dUtHNXZaR1VwSUQ4Z2JtOWtaUzVuWlhSSmJpaHlaWE4wTENCclpXVndVMk5oYkdGeUtTQTZJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQjlYRzRnSUNBZ2FHRnpRV3hzVG5Wc2JGWmhiSFZsY3loaGJHeHZkMU5qWVd4aGNpa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1cGRHVnRjeTVsZG1WeWVTaHViMlJsSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDZ2hhWE5RWVdseUtHNXZaR1VwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzRnUFNCdWIyUmxMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2h1SUQwOUlHNTFiR3dnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBb1lXeHNiM2RUWTJGc1lYSWdKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FYTlRZMkZzWVhJb2Jpa2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JpNTJZV3gxWlNBOVBTQnVkV3hzSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0Z1TG1OdmJXMWxiblJDWldadmNtVWdKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lXNHVZMjl0YldWdWRDQW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBaGJpNTBZV2NwS1R0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFTm9aV05yY3lCcFppQjBhR1VnWTI5c2JHVmpkR2x2YmlCcGJtTnNkV1JsY3lCaElIWmhiSFZsSUhkcGRHZ2dkR2hsSUd0bGVTQmdhMlY1WUM1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0JvWVhOSmJpaHdZWFJvS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUZ0clpYa3NJQzR1TG5KbGMzUmRJRDBnY0dGMGFEdGNiaUFnSUNBZ0lDQWdhV1lnS0hKbGMzUXViR1Z1WjNSb0lEMDlQU0F3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YUdGektHdGxlU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzV2WkdVZ1BTQjBhR2x6TG1kbGRDaHJaWGtzSUhSeWRXVXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdhWE5EYjJ4c1pXTjBhVzl1S0c1dlpHVXBJRDhnYm05a1pTNW9ZWE5KYmloeVpYTjBLU0E2SUdaaGJITmxPMXh1SUNBZ0lIMWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQlRaWFJ6SUdFZ2RtRnNkV1VnYVc0Z2RHaHBjeUJqYjJ4c1pXTjBhVzl1TGlCR2IzSWdZQ0VoYzJWMFlDd2dZSFpoYkhWbFlDQnVaV1ZrY3lCMGJ5QmlaU0JoWEc0Z0lDQWdJQ29nWW05dmJHVmhiaUIwYnlCaFpHUXZjbVZ0YjNabElIUm9aU0JwZEdWdElHWnliMjBnZEdobElITmxkQzVjYmlBZ0lDQWdLaTljYmlBZ0lDQnpaWFJKYmlod1lYUm9MQ0IyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmJhMlY1TENBdUxpNXlaWE4wWFNBOUlIQmhkR2c3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaWE4wTG14bGJtZDBhQ0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV6WlhRb2EyVjVMQ0IyWVd4MVpTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J1YjJSbElEMGdkR2hwY3k1blpYUW9hMlY1TENCMGNuVmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwYzBOdmJHeGxZM1JwYjI0b2JtOWtaU2twWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm05a1pTNXpaWFJKYmloeVpYTjBMQ0IyWVd4MVpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtSUNodWIyUmxJRDA5UFNCMWJtUmxabWx1WldRZ0ppWWdkR2hwY3k1elkyaGxiV0VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXpaWFFvYTJWNUxDQmpiMnhzWldOMGFXOXVSbkp2YlZCaGRHZ29kR2hwY3k1elkyaGxiV0VzSUhKbGMzUXNJSFpoYkhWbEtTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQlpRVTFNSUdOdmJHeGxZM1JwYjI0Z1lYUWdKSHRyWlhsOUxpQlNaVzFoYVc1cGJtY2djR0YwYURvZ0pIdHlaWE4wZldBcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnZXlCRGIyeHNaV04wYVc5dUxDQmpiMnhzWldOMGFXOXVSbkp2YlZCaGRHZ3NJR2x6Ulcxd2RIbFFZWFJvSUgwN1hHNGlMQ0FpTHlvcVhHNGdLaUJUZEhKcGJtZHBabWxsY3lCaElHTnZiVzFsYm5RdVhHNGdLbHh1SUNvZ1JXMXdkSGtnWTI5dGJXVnVkQ0JzYVc1bGN5QmhjbVVnYkdWbWRDQmxiWEIwZVN4Y2JpQXFJR3hwYm1WeklHTnZibk5wYzNScGJtY2diMllnWVNCemFXNW5iR1VnYzNCaFkyVWdZWEpsSUhKbGNHeGhZMlZrSUdKNUlHQWpZQ3hjYmlBcUlHRnVaQ0JoYkd3Z2IzUm9aWElnYkdsdVpYTWdZWEpsSUhCeVpXWnBlR1ZrSUhkcGRHZ2dZU0JnSTJBdVhHNGdLaTljYm1OdmJuTjBJSE4wY21sdVoybG1lVU52YlcxbGJuUWdQU0FvYzNSeUtTQTlQaUJ6ZEhJdWNtVndiR0ZqWlNndlhpZy9JU1FwS0Q4NklDUXBQeTluYlN3Z0p5TW5LVHRjYm1aMWJtTjBhVzl1SUdsdVpHVnVkRU52YlcxbGJuUW9ZMjl0YldWdWRDd2dhVzVrWlc1MEtTQjdYRzRnSUNBZ2FXWWdLQzllWEZ4dUt5UXZMblJsYzNRb1kyOXRiV1Z1ZENrcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCamIyMXRaVzUwTG5OMVluTjBjbWx1WnlneEtUdGNiaUFnSUNCeVpYUjFjbTRnYVc1a1pXNTBJRDhnWTI5dGJXVnVkQzV5WlhCc1lXTmxLQzllS0Q4aElDb2tLUzluYlN3Z2FXNWtaVzUwS1NBNklHTnZiVzFsYm5RN1hHNTlYRzVqYjI1emRDQnNhVzVsUTI5dGJXVnVkQ0E5SUNoemRISXNJR2x1WkdWdWRDd2dZMjl0YldWdWRDa2dQVDRnYzNSeUxtVnVaSE5YYVhSb0tDZGNYRzRuS1Z4dUlDQWdJRDhnYVc1a1pXNTBRMjl0YldWdWRDaGpiMjF0Wlc1MExDQnBibVJsYm5RcFhHNGdJQ0FnT2lCamIyMXRaVzUwTG1sdVkyeDFaR1Z6S0NkY1hHNG5LVnh1SUNBZ0lDQWdJQ0EvSUNkY1hHNG5JQ3NnYVc1a1pXNTBRMjl0YldWdWRDaGpiMjF0Wlc1MExDQnBibVJsYm5RcFhHNGdJQ0FnSUNBZ0lEb2dLSE4wY2k1bGJtUnpWMmwwYUNnbklDY3BJRDhnSnljZ09pQW5JQ2NwSUNzZ1kyOXRiV1Z1ZER0Y2JseHVaWGh3YjNKMElIc2dhVzVrWlc1MFEyOXRiV1Z1ZEN3Z2JHbHVaVU52YlcxbGJuUXNJSE4wY21sdVoybG1lVU52YlcxbGJuUWdmVHRjYmlJc0lDSmpiMjV6ZENCR1QweEVYMFpNVDFjZ1BTQW5abXh2ZHljN1hHNWpiMjV6ZENCR1QweEVYMEpNVDBOTElEMGdKMkpzYjJOckp6dGNibU52Ym5OMElFWlBURVJmVVZWUFZFVkVJRDBnSjNGMWIzUmxaQ2M3WEc0dktpcGNiaUFxSUZSeWFXVnpJSFJ2SUd0bFpYQWdhVzV3ZFhRZ1lYUWdkWEFnZEc4Z1lHeHBibVZYYVdSMGFHQWdZMmhoY21GamRHVnljeXdnYzNCc2FYUjBhVzVuSUc5dWJIa2diMjRnYzNCaFkyVnpYRzRnS2lCdWIzUWdabTlzYkc5M1pXUWdZbmtnYm1WM2JHbHVaWE1nYjNJZ2MzQmhZMlZ6SUhWdWJHVnpjeUJnYlc5a1pXQWdhWE1nWUNkeGRXOTBaV1FuWUM0Z1RHbHVaWE1nWVhKbFhHNGdLaUIwWlhKdGFXNWhkR1ZrSUhkcGRHZ2dZRnhjYm1BZ1lXNWtJSE4wWVhKMFpXUWdkMmwwYUNCZ2FXNWtaVzUwWUM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWm05c1pFWnNiM2RNYVc1bGN5aDBaWGgwTENCcGJtUmxiblFzSUcxdlpHVWdQU0FuWm14dmR5Y3NJSHNnYVc1a1pXNTBRWFJUZEdGeWRDd2diR2x1WlZkcFpIUm9JRDBnT0RBc0lHMXBia052Ym5SbGJuUlhhV1IwYUNBOUlESXdMQ0J2YmtadmJHUXNJRzl1VDNabGNtWnNiM2NnZlNBOUlIdDlLU0I3WEc0Z0lDQWdhV1lnS0NGc2FXNWxWMmxrZEdnZ2ZId2diR2x1WlZkcFpIUm9JRHdnTUNsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSbGVIUTdYRzRnSUNBZ2FXWWdLR3hwYm1WWGFXUjBhQ0E4SUcxcGJrTnZiblJsYm5SWGFXUjBhQ2xjYmlBZ0lDQWdJQ0FnYldsdVEyOXVkR1Z1ZEZkcFpIUm9JRDBnTUR0Y2JpQWdJQ0JqYjI1emRDQmxibVJUZEdWd0lEMGdUV0YwYUM1dFlYZ29NU0FySUcxcGJrTnZiblJsYm5SWGFXUjBhQ3dnTVNBcklHeHBibVZYYVdSMGFDQXRJR2x1WkdWdWRDNXNaVzVuZEdncE8xeHVJQ0FnSUdsbUlDaDBaWGgwTG14bGJtZDBhQ0E4UFNCbGJtUlRkR1Z3S1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdWNGREdGNiaUFnSUNCamIyNXpkQ0JtYjJ4a2N5QTlJRnRkTzF4dUlDQWdJR052Ym5OMElHVnpZMkZ3WldSR2IyeGtjeUE5SUh0OU8xeHVJQ0FnSUd4bGRDQmxibVFnUFNCc2FXNWxWMmxrZEdnZ0xTQnBibVJsYm5RdWJHVnVaM1JvTzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnYVc1a1pXNTBRWFJUZEdGeWRDQTlQVDBnSjI1MWJXSmxjaWNwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x1WkdWdWRFRjBVM1JoY25RZ1BpQnNhVzVsVjJsa2RHZ2dMU0JOWVhSb0xtMWhlQ2d5TENCdGFXNURiMjUwWlc1MFYybGtkR2dwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdabTlzWkhNdWNIVnphQ2d3S1R0Y2JpQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUNBZ1pXNWtJRDBnYkdsdVpWZHBaSFJvSUMwZ2FXNWtaVzUwUVhSVGRHRnlkRHRjYmlBZ0lDQjlYRzRnSUNBZ2JHVjBJSE53YkdsMElEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lHeGxkQ0J3Y21WMklEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lHeGxkQ0J2ZG1WeVpteHZkeUE5SUdaaGJITmxPMXh1SUNBZ0lHeGxkQ0JwSUQwZ0xURTdYRzRnSUNBZ2JHVjBJR1Z6WTFOMFlYSjBJRDBnTFRFN1hHNGdJQ0FnYkdWMElHVnpZMFZ1WkNBOUlDMHhPMXh1SUNBZ0lHbG1JQ2h0YjJSbElEMDlQU0JHVDB4RVgwSk1UME5MS1NCN1hHNGdJQ0FnSUNBZ0lHa2dQU0JqYjI1emRXMWxUVzl5WlVsdVpHVnVkR1ZrVEdsdVpYTW9kR1Y0ZEN3Z2FTd2dhVzVrWlc1MExteGxibWQwYUNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwSUNFOVBTQXRNU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnVaQ0E5SUdrZ0t5QmxibVJUZEdWd08xeHVJQ0FnSUgxY2JpQWdJQ0JtYjNJZ0tHeGxkQ0JqYURzZ0tHTm9JRDBnZEdWNGRGc29hU0FyUFNBeEtWMHBPeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9iVzlrWlNBOVBUMGdSazlNUkY5UlZVOVVSVVFnSmlZZ1kyZ2dQVDA5SUNkY1hGeGNKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdaWE5qVTNSaGNuUWdQU0JwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjM2RwZEdOb0lDaDBaWGgwVzJrZ0t5QXhYU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKM2duT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBJQ3M5SURNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjNVbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwSUNzOUlEVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oxVW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcElDczlJRGs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHa2dLejBnTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnpZMFZ1WkNBOUlHazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tHTm9JRDA5UFNBblhGeHVKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0cxdlpHVWdQVDA5SUVaUFRFUmZRa3hQUTBzcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FTQTlJR052Ym5OMWJXVk5iM0psU1c1a1pXNTBaV1JNYVc1bGN5aDBaWGgwTENCcExDQnBibVJsYm5RdWJHVnVaM1JvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1Z1WkNBOUlHa2dLeUJwYm1SbGJuUXViR1Z1WjNSb0lDc2daVzVrVTNSbGNEdGNiaUFnSUNBZ0lDQWdJQ0FnSUhOd2JHbDBJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOb0lEMDlQU0FuSUNjZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbVYySUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISmxkaUFoUFQwZ0p5QW5JQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKbGRpQWhQVDBnSjF4Y2JpY2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3Y21WMklDRTlQU0FuWEZ4MEp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUhOd1lXTmxJSE4xY25KdmRXNWtaV1FnWW5rZ2JtOXVMWE53WVdObElHTmhiaUJpWlNCeVpYQnNZV05sWkNCM2FYUm9JRzVsZDJ4cGJtVWdLeUJwYm1SbGJuUmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdVpYaDBJRDBnZEdWNGRGdHBJQ3NnTVYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzVsZUhRZ0ppWWdibVY0ZENBaFBUMGdKeUFuSUNZbUlHNWxlSFFnSVQwOUlDZGNYRzRuSUNZbUlHNWxlSFFnSVQwOUlDZGNYSFFuS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpjR3hwZENBOUlHazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FTQStQU0JsYm1RcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYzNCc2FYUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXNaSE11Y0hWemFDaHpjR3hwZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Z1WkNBOUlITndiR2wwSUNzZ1pXNWtVM1JsY0R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM0JzYVhRZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLRzF2WkdVZ1BUMDlJRVpQVEVSZlVWVlBWRVZFS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUhkb2FYUmxMWE53WVdObElHTnZiR3hsWTNSbFpDQmhkQ0JsYm1RZ2JXRjVJSE4wY21WMFkyZ2djR0Z6ZENCc2FXNWxWMmxrZEdoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkMmhwYkdVZ0tIQnlaWFlnUFQwOUlDY2dKeUI4ZkNCd2NtVjJJRDA5UFNBblhGeDBKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKbGRpQTlJR05vTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJnZ1BTQjBaWGgwV3locElDczlJREVwWFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5MlpYSm1iRzkzSUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCQlkyTnZkVzUwSUdadmNpQnVaWGRzYVc1bElHVnpZMkZ3WlN3Z1luVjBJR1J2YmlkMElHSnlaV0ZySUhCeVpXTmxaR2x1WnlCbGMyTmhjR1ZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYWlBOUlHa2dQaUJsYzJORmJtUWdLeUF4SUQ4Z2FTQXRJRElnT2lCbGMyTlRkR0Z5ZENBdElERTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklFSmhhV3dnYjNWMElHbG1JR3hwYm1WWGFXUjBhQ0FtSUcxcGJrTnZiblJsYm5SWGFXUjBhQ0JoY21VZ2MyaHZjblJsY2lCMGFHRnVJR0Z1SUdWelkyRndaU0J6ZEhKcGJtZGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHVnpZMkZ3WldSR2IyeGtjMXRxWFNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwWlhoME8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtYjJ4a2N5NXdkWE5vS0dvcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYzJOaGNHVmtSbTlzWkhOYmFsMGdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYm1RZ1BTQnFJQ3NnWlc1a1UzUmxjRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzQnNhWFFnUFNCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZkbVZ5Wm14dmR5QTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIQnlaWFlnUFNCamFEdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHOTJaWEptYkc5M0lDWW1JRzl1VDNabGNtWnNiM2NwWEc0Z0lDQWdJQ0FnSUc5dVQzWmxjbVpzYjNjb0tUdGNiaUFnSUNCcFppQW9abTlzWkhNdWJHVnVaM1JvSUQwOVBTQXdLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR1Y0ZER0Y2JpQWdJQ0JwWmlBb2IyNUdiMnhrS1Z4dUlDQWdJQ0FnSUNCdmJrWnZiR1FvS1R0Y2JpQWdJQ0JzWlhRZ2NtVnpJRDBnZEdWNGRDNXpiR2xqWlNnd0xDQm1iMnhrYzFzd1hTazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQm1iMnhrY3k1c1pXNW5kR2c3SUNzcmFTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQm1iMnhrSUQwZ1ptOXNaSE5iYVYwN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdWdVpDQTlJR1p2YkdSelcya2dLeUF4WFNCOGZDQjBaWGgwTG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHWnZiR1FnUFQwOUlEQXBYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYTWdQU0JnWEZ4dUpIdHBibVJsYm5SOUpIdDBaWGgwTG5Oc2FXTmxLREFzSUdWdVpDbDlZRHRjYmlBZ0lDQWdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iVzlrWlNBOVBUMGdSazlNUkY5UlZVOVVSVVFnSmlZZ1pYTmpZWEJsWkVadmJHUnpXMlp2YkdSZEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjeUFyUFNCZ0pIdDBaWGgwVzJadmJHUmRmVnhjWEZ4Z08xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WeklDczlJR0JjWEc0a2UybHVaR1Z1ZEgwa2UzUmxlSFF1YzJ4cFkyVW9abTlzWkNBcklERXNJR1Z1WkNsOVlEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnY21Wek8xeHVmVnh1THlvcVhHNGdLaUJRY21WemRXMWxjeUJnYVNBcklERmdJR2x6SUdGMElIUm9aU0J6ZEdGeWRDQnZaaUJoSUd4cGJtVmNiaUFxSUVCeVpYUjFjbTV6SUdsdVpHVjRJRzltSUd4aGMzUWdibVYzYkdsdVpTQnBiaUJ0YjNKbExXbHVaR1Z1ZEdWa0lHSnNiMk5yWEc0Z0tpOWNibVoxYm1OMGFXOXVJR052Ym5OMWJXVk5iM0psU1c1a1pXNTBaV1JNYVc1bGN5aDBaWGgwTENCcExDQnBibVJsYm5RcElIdGNiaUFnSUNCc1pYUWdaVzVrSUQwZ2FUdGNiaUFnSUNCc1pYUWdjM1JoY25RZ1BTQnBJQ3NnTVR0Y2JpQWdJQ0JzWlhRZ1kyZ2dQU0IwWlhoMFczTjBZWEowWFR0Y2JpQWdJQ0IzYUdsc1pTQW9ZMmdnUFQwOUlDY2dKeUI4ZkNCamFDQTlQVDBnSjF4Y2RDY3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHa2dQQ0J6ZEdGeWRDQXJJR2x1WkdWdWRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyZ2dQU0IwWlhoMFd5c3JhVjA3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmtieUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJnZ1BTQjBaWGgwV3lzcmFWMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlIZG9hV3hsSUNoamFDQW1KaUJqYUNBaFBUMGdKMXhjYmljcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWlc1a0lEMGdhVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITjBZWEowSUQwZ2FTQXJJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmphQ0E5SUhSbGVIUmJjM1JoY25SZE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJsYm1RN1hHNTlYRzVjYm1WNGNHOXlkQ0I3SUVaUFRFUmZRa3hQUTBzc0lFWlBURVJmUmt4UFZ5d2dSazlNUkY5UlZVOVVSVVFzSUdadmJHUkdiRzkzVEdsdVpYTWdmVHRjYmlJc0lDSnBiWEJ2Y25RZ2V5QlRZMkZzWVhJZ2ZTQm1jbTl0SUNjdUxpOXViMlJsY3k5VFkyRnNZWEl1YW5Nbk8xeHVhVzF3YjNKMElIc2dabTlzWkVac2IzZE1hVzVsY3l3Z1JrOU1SRjlSVlU5VVJVUXNJRVpQVEVSZlJreFBWeXdnUms5TVJGOUNURTlEU3lCOUlHWnliMjBnSnk0dlptOXNaRVpzYjNkTWFXNWxjeTVxY3ljN1hHNWNibU52Ym5OMElHZGxkRVp2YkdSUGNIUnBiMjV6SUQwZ0tHTjBlQ3dnYVhOQ2JHOWpheWtnUFQ0Z0tIdGNiaUFnSUNCcGJtUmxiblJCZEZOMFlYSjBPaUJwYzBKc2IyTnJJRDhnWTNSNExtbHVaR1Z1ZEM1c1pXNW5kR2dnT2lCamRIZ3VhVzVrWlc1MFFYUlRkR0Z5ZEN4Y2JpQWdJQ0JzYVc1bFYybGtkR2c2SUdOMGVDNXZjSFJwYjI1ekxteHBibVZYYVdSMGFDeGNiaUFnSUNCdGFXNURiMjUwWlc1MFYybGtkR2c2SUdOMGVDNXZjSFJwYjI1ekxtMXBia052Ym5SbGJuUlhhV1IwYUZ4dWZTazdYRzR2THlCQmJITnZJR05vWldOcmN5Qm1iM0lnYkdsdVpYTWdjM1JoY25ScGJtY2dkMmwwYUNBbExDQmhjeUJ3WVhKemFXNW5JSFJvWlNCdmRYUndkWFFnWVhNZ1dVRk5UQ0F4TGpFZ2QybHNiRnh1THk4Z2NISmxjM1Z0WlNCMGFHRjBKM01nYzNSaGNuUnBibWNnWVNCdVpYY2daRzlqZFcxbGJuUXVYRzVqYjI1emRDQmpiMjUwWVdsdWMwUnZZM1Z0Wlc1MFRXRnlhMlZ5SUQwZ0tITjBjaWtnUFQ0Z0wxNG9KWHd0TFMxOFhGd3VYRnd1WEZ3dUtTOXRMblJsYzNRb2MzUnlLVHRjYm1aMWJtTjBhVzl1SUd4cGJtVk1aVzVuZEdoUGRtVnlUR2x0YVhRb2MzUnlMQ0JzYVc1bFYybGtkR2dzSUdsdVpHVnVkRXhsYm1kMGFDa2dlMXh1SUNBZ0lHbG1JQ2doYkdsdVpWZHBaSFJvSUh4OElHeHBibVZYYVdSMGFDQThJREFwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNCamIyNXpkQ0JzYVcxcGRDQTlJR3hwYm1WWGFXUjBhQ0F0SUdsdVpHVnVkRXhsYm1kMGFEdGNiaUFnSUNCamIyNXpkQ0J6ZEhKTVpXNGdQU0J6ZEhJdWJHVnVaM1JvTzF4dUlDQWdJR2xtSUNoemRISk1aVzRnUEQwZ2JHbHRhWFFwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNQ3dnYzNSaGNuUWdQU0F3T3lCcElEd2djM1J5VEdWdU95QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSE4wY2x0cFhTQTlQVDBnSjF4Y2JpY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwSUMwZ2MzUmhjblFnUGlCc2FXMXBkQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4wWVhKMElEMGdhU0FySURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2MzUnlUR1Z1SUMwZ2MzUmhjblFnUEQwZ2JHbHRhWFFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVmVnh1Wm5WdVkzUnBiMjRnWkc5MVlteGxVWFZ2ZEdWa1UzUnlhVzVuS0haaGJIVmxMQ0JqZEhncElIdGNiaUFnSUNCamIyNXpkQ0JxYzI5dUlEMGdTbE5QVGk1emRISnBibWRwWm5rb2RtRnNkV1VwTzF4dUlDQWdJR2xtSUNoamRIZ3ViM0IwYVc5dWN5NWtiM1ZpYkdWUmRXOTBaV1JCYzBwVFQwNHBYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnFjMjl1TzF4dUlDQWdJR052Ym5OMElIc2dhVzF3YkdsamFYUkxaWGtnZlNBOUlHTjBlRHRjYmlBZ0lDQmpiMjV6ZENCdGFXNU5kV3gwYVV4cGJtVk1aVzVuZEdnZ1BTQmpkSGd1YjNCMGFXOXVjeTVrYjNWaWJHVlJkVzkwWldSTmFXNU5kV3gwYVV4cGJtVk1aVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdhVzVrWlc1MElEMGdZM1I0TG1sdVpHVnVkQ0I4ZkNBb1kyOXVkR0ZwYm5ORWIyTjFiV1Z1ZEUxaGNtdGxjaWgyWVd4MVpTa2dQeUFuSUNBbklEb2dKeWNwTzF4dUlDQWdJR3hsZENCemRISWdQU0FuSnp0Y2JpQWdJQ0JzWlhRZ2MzUmhjblFnUFNBd08xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdMQ0JqYUNBOUlHcHpiMjViYVYwN0lHTm9PeUJqYUNBOUlHcHpiMjViS3l0cFhTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1kyZ2dQVDA5SUNjZ0p5QW1KaUJxYzI5dVcya2dLeUF4WFNBOVBUMGdKMXhjWEZ3bklDWW1JR3B6YjI1YmFTQXJJREpkSUQwOVBTQW5iaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUhOd1lXTmxJR0psWm05eVpTQnVaWGRzYVc1bElHNWxaV1J6SUhSdklHSmxJR1Z6WTJGd1pXUWdkRzhnYm05MElHSmxJR1p2YkdSbFpGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSeUlDczlJR3B6YjI0dWMyeHBZMlVvYzNSaGNuUXNJR2twSUNzZ0oxeGNYRndnSnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2tnS3owZ01UdGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMFlYSjBJRDBnYVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05vSUQwZ0oxeGNYRnduTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYUNBOVBUMGdKMXhjWEZ3bktWeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNkcGRHTm9JQ2hxYzI5dVcya2dLeUF4WFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjNVbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6ZEhJZ0t6MGdhbk52Ymk1emJHbGpaU2h6ZEdGeWRDd2dhU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmpiMlJsSUQwZ2FuTnZiaTV6ZFdKemRISW9hU0FySURJc0lEUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM2RwZEdOb0lDaGpiMlJsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbk1EQXdNQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wY2lBclBTQW5YRnhjWERBbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2N3TURBM0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzUnlJQ3M5SUNkY1hGeGNZU2M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0p6QXdNR0luT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6ZEhJZ0t6MGdKMXhjWEZ4Mkp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuTURBeFlpYzZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBjaUFyUFNBblhGeGNYR1VuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDY3dNRGcxSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSeUlDczlJQ2RjWEZ4Y1RpYzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSnpBd1lUQW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkSElnS3owZ0oxeGNYRnhmSnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5NakF5T0NjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMGNpQXJQU0FuWEZ4Y1hFd25PMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNjeU1ESTVKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1J5SUNzOUlDZGNYRnhjVUNjN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamIyUmxMbk4xWW5OMGNpZ3dMQ0F5S1NBOVBUMGdKekF3SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBjaUFyUFNBblhGeGNYSGduSUNzZ1kyOWtaUzV6ZFdKemRISW9NaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBjaUFyUFNCcWMyOXVMbk4xWW5OMGNpaHBMQ0EyS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdrZ0t6MGdOVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wWVhKMElEMGdhU0FySURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5iaWM2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwYlhCc2FXTnBkRXRsZVNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FuTnZibHRwSUNzZ01sMGdQVDA5SUNkY0lpY2dmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3B6YjI0dWJHVnVaM1JvSUR3Z2JXbHVUWFZzZEdsTWFXNWxUR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBJQ3M5SURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCbWIyeGthVzVuSUhkcGJHd2daV0YwSUdacGNuTjBJRzVsZDJ4cGJtVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBjaUFyUFNCcWMyOXVMbk5zYVdObEtITjBZWEowTENCcEtTQXJJQ2RjWEc1Y1hHNG5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkMmhwYkdVZ0tHcHpiMjViYVNBcklESmRJRDA5UFNBblhGeGNYQ2NnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnFjMjl1VzJrZ0t5QXpYU0E5UFQwZ0oyNG5JQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FuTnZibHRwSUNzZ05GMGdJVDA5SUNkY0lpY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRISWdLejBnSjF4Y2JpYzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVNBclBTQXlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1J5SUNzOUlHbHVaR1Z1ZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklITndZV05sSUdGbWRHVnlJRzVsZDJ4cGJtVWdibVZsWkhNZ2RHOGdZbVVnWlhOallYQmxaQ0IwYnlCdWIzUWdZbVVnWm05c1pHVmtYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYW5OdmJsdHBJQ3NnTWwwZ1BUMDlJQ2NnSnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkSElnS3owZ0oxeGNYRnduTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVNBclBTQXhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoY25RZ1BTQnBJQ3NnTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcElDczlJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhOMGNpQTlJSE4wWVhKMElEOGdjM1J5SUNzZ2FuTnZiaTV6YkdsalpTaHpkR0Z5ZENrZ09pQnFjMjl1TzF4dUlDQWdJSEpsZEhWeWJpQnBiWEJzYVdOcGRFdGxlVnh1SUNBZ0lDQWdJQ0EvSUhOMGNseHVJQ0FnSUNBZ0lDQTZJR1p2YkdSR2JHOTNUR2x1WlhNb2MzUnlMQ0JwYm1SbGJuUXNJRVpQVEVSZlVWVlBWRVZFTENCblpYUkdiMnhrVDNCMGFXOXVjeWhqZEhnc0lHWmhiSE5sS1NrN1hHNTlYRzVtZFc1amRHbHZiaUJ6YVc1bmJHVlJkVzkwWldSVGRISnBibWNvZG1Gc2RXVXNJR04wZUNrZ2UxeHVJQ0FnSUdsbUlDaGpkSGd1YjNCMGFXOXVjeTV6YVc1bmJHVlJkVzkwWlNBOVBUMGdabUZzYzJVZ2ZIeGNiaUFnSUNBZ0lDQWdLR04wZUM1cGJYQnNhV05wZEV0bGVTQW1KaUIyWVd4MVpTNXBibU5zZFdSbGN5Z25YRnh1SnlrcElIeDhYRzRnSUNBZ0lDQWdJQzliSUZ4Y2RGMWNYRzU4WEZ4dVd5QmNYSFJkTHk1MFpYTjBLSFpoYkhWbEtTQXZMeUJ6YVc1bmJHVWdjWFZ2ZEdWa0lITjBjbWx1WnlCallXNG5kQ0JvWVhabElHeGxZV1JwYm1jZ2IzSWdkSEpoYVd4cGJtY2dkMmhwZEdWemNHRmpaU0JoY205MWJtUWdibVYzYkdsdVpWeHVJQ0FnSUNsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdmRXSnNaVkYxYjNSbFpGTjBjbWx1WnloMllXeDFaU3dnWTNSNEtUdGNiaUFnSUNCamIyNXpkQ0JwYm1SbGJuUWdQU0JqZEhndWFXNWtaVzUwSUh4OElDaGpiMjUwWVdsdWMwUnZZM1Z0Wlc1MFRXRnlhMlZ5S0haaGJIVmxLU0EvSUNjZ0lDY2dPaUFuSnlrN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ1hDSW5YQ0lnS3lCMllXeDFaUzV5WlhCc1lXTmxLQzhuTDJjc0lGd2lKeWRjSWlrdWNtVndiR0ZqWlNndlhGeHVLeTluTENCZ0pDWmNYRzRrZTJsdVpHVnVkSDFnS1NBcklGd2lKMXdpTzF4dUlDQWdJSEpsZEhWeWJpQmpkSGd1YVcxd2JHbGphWFJMWlhsY2JpQWdJQ0FnSUNBZ1B5QnlaWE5jYmlBZ0lDQWdJQ0FnT2lCbWIyeGtSbXh2ZDB4cGJtVnpLSEpsY3l3Z2FXNWtaVzUwTENCR1QweEVYMFpNVDFjc0lHZGxkRVp2YkdSUGNIUnBiMjV6S0dOMGVDd2dabUZzYzJVcEtUdGNibjFjYm1aMWJtTjBhVzl1SUhGMWIzUmxaRk4wY21sdVp5aDJZV3gxWlN3Z1kzUjRLU0I3WEc0Z0lDQWdZMjl1YzNRZ2V5QnphVzVuYkdWUmRXOTBaU0I5SUQwZ1kzUjRMbTl3ZEdsdmJuTTdYRzRnSUNBZ2JHVjBJSEZ6TzF4dUlDQWdJR2xtSUNoemFXNW5iR1ZSZFc5MFpTQTlQVDBnWm1Gc2MyVXBYRzRnSUNBZ0lDQWdJSEZ6SUQwZ1pHOTFZbXhsVVhWdmRHVmtVM1J5YVc1bk8xeHVJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQm9ZWE5FYjNWaWJHVWdQU0IyWVd4MVpTNXBibU5zZFdSbGN5Z25YQ0luS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYUdGelUybHVaMnhsSUQwZ2RtRnNkV1V1YVc1amJIVmtaWE1vWENJblhDSXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb2FHRnpSRzkxWW14bElDWW1JQ0ZvWVhOVGFXNW5iR1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnhjeUE5SUhOcGJtZHNaVkYxYjNSbFpGTjBjbWx1Wnp0Y2JpQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2FHRnpVMmx1WjJ4bElDWW1JQ0ZvWVhORWIzVmliR1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnhjeUE5SUdSdmRXSnNaVkYxYjNSbFpGTjBjbWx1Wnp0Y2JpQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NYTWdQU0J6YVc1bmJHVlJkVzkwWlNBL0lITnBibWRzWlZGMWIzUmxaRk4wY21sdVp5QTZJR1J2ZFdKc1pWRjFiM1JsWkZOMGNtbHVaenRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhGektIWmhiSFZsTENCamRIZ3BPMXh1ZlZ4dUx5OGdWR2hsSUc1bFoyRjBhWFpsSUd4dmIydGlaV2hwYm1RZ1lYWnZhV1J6SUdFZ2NHOXNlVzV2YldsaGJDQnpaV0Z5WTJnc1hHNHZMeUJpZFhRZ2FYTnVKM1FnYzNWd2NHOXlkR1ZrSUhsbGRDQnZiaUJUWVdaaGNtazZJR2gwZEhCek9pOHZZMkZ1YVhWelpTNWpiMjB2YW5NdGNtVm5aWGh3TFd4dmIydGlaV2hwYm1SY2JteGxkQ0JpYkc5amEwVnVaRTVsZDJ4cGJtVnpPMXh1ZEhKNUlIdGNiaUFnSUNCaWJHOWphMFZ1WkU1bGQyeHBibVZ6SUQwZ2JtVjNJRkpsWjBWNGNDZ25LRjU4S0Q4OElWeGNiaWtwWEZ4dUt5Zy9JVnhjYm53a0tTY3NJQ2RuSnlrN1hHNTlYRzVqWVhSamFDQjdYRzRnSUNBZ1lteHZZMnRGYm1ST1pYZHNhVzVsY3lBOUlDOWNYRzRyS0Q4aFhGeHVmQ1FwTDJjN1hHNTlYRzVtZFc1amRHbHZiaUJpYkc5amExTjBjbWx1WnloN0lHTnZiVzFsYm5Rc0lIUjVjR1VzSUhaaGJIVmxJSDBzSUdOMGVDd2diMjVEYjIxdFpXNTBMQ0J2YmtOb2IyMXdTMlZsY0NrZ2UxeHVJQ0FnSUdOdmJuTjBJSHNnWW14dlkydFJkVzkwWlN3Z1kyOXRiV1Z1ZEZOMGNtbHVaeXdnYkdsdVpWZHBaSFJvSUgwZ1BTQmpkSGd1YjNCMGFXOXVjenRjYmlBZ0lDQXZMeUF4TGlCQ2JHOWpheUJqWVc0bmRDQmxibVFnYVc0Z2QyaHBkR1Z6Y0dGalpTQjFibXhsYzNNZ2RHaGxJR3hoYzNRZ2JHbHVaU0JwY3lCdWIyNHRaVzF3ZEhrdVhHNGdJQ0FnTHk4Z01pNGdVM1J5YVc1bmN5QmpiMjV6YVhOMGFXNW5JRzltSUc5dWJIa2dkMmhwZEdWemNHRmpaU0JoY21VZ1ltVnpkQ0J5Wlc1a1pYSmxaQ0JsZUhCc2FXTnBkR3g1TGx4dUlDQWdJR2xtSUNnaFlteHZZMnRSZFc5MFpTQjhmQ0F2WEZ4dVcxeGNkQ0JkS3lRdkxuUmxjM1FvZG1Gc2RXVXBJSHg4SUM5ZVhGeHpLaVF2TG5SbGMzUW9kbUZzZFdVcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnhkVzkwWldSVGRISnBibWNvZG1Gc2RXVXNJR04wZUNrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElHbHVaR1Z1ZENBOUlHTjBlQzVwYm1SbGJuUWdmSHhjYmlBZ0lDQWdJQ0FnS0dOMGVDNW1iM0pqWlVKc2IyTnJTVzVrWlc1MElIeDhJR052Ym5SaGFXNXpSRzlqZFcxbGJuUk5ZWEpyWlhJb2RtRnNkV1VwSUQ4Z0p5QWdKeUE2SUNjbktUdGNiaUFnSUNCamIyNXpkQ0JzYVhSbGNtRnNJRDBnWW14dlkydFJkVzkwWlNBOVBUMGdKMnhwZEdWeVlXd25YRzRnSUNBZ0lDQWdJRDhnZEhKMVpWeHVJQ0FnSUNBZ0lDQTZJR0pzYjJOclVYVnZkR1VnUFQwOUlDZG1iMnhrWldRbklIeDhJSFI1Y0dVZ1BUMDlJRk5qWVd4aGNpNUNURTlEUzE5R1QweEVSVVJjYmlBZ0lDQWdJQ0FnSUNBZ0lEOGdabUZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJRG9nZEhsd1pTQTlQVDBnVTJOaGJHRnlMa0pNVDBOTFgweEpWRVZTUVV4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBL0lIUnlkV1ZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNGc2FXNWxUR1Z1WjNSb1QzWmxja3hwYldsMEtIWmhiSFZsTENCc2FXNWxWMmxrZEdnc0lHbHVaR1Z1ZEM1c1pXNW5kR2dwTzF4dUlDQWdJR2xtSUNnaGRtRnNkV1VwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJzYVhSbGNtRnNJRDhnSjN4Y1hHNG5JRG9nSno1Y1hHNG5PMXh1SUNBZ0lDOHZJR1JsZEdWeWJXbHVaU0JqYUc5dGNHbHVaeUJtY205dElIZG9hWFJsYzNCaFkyVWdZWFFnZG1Gc2RXVWdaVzVrWEc0Z0lDQWdiR1YwSUdOb2IyMXdPMXh1SUNBZ0lHeGxkQ0JsYm1SVGRHRnlkRHRjYmlBZ0lDQm1iM0lnS0dWdVpGTjBZWEowSUQwZ2RtRnNkV1V1YkdWdVozUm9PeUJsYm1SVGRHRnlkQ0ErSURBN0lDMHRaVzVrVTNSaGNuUXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZMmdnUFNCMllXeDFaVnRsYm1SVGRHRnlkQ0F0SURGZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWTJnZ0lUMDlJQ2RjWEc0bklDWW1JR05vSUNFOVBTQW5YRngwSnlBbUppQmphQ0FoUFQwZ0p5QW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdmVnh1SUNBZ0lHeGxkQ0JsYm1RZ1BTQjJZV3gxWlM1emRXSnpkSEpwYm1jb1pXNWtVM1JoY25RcE8xeHVJQ0FnSUdOdmJuTjBJR1Z1WkU1c1VHOXpJRDBnWlc1a0xtbHVaR1Y0VDJZb0oxeGNiaWNwTzF4dUlDQWdJR2xtSUNobGJtUk9iRkJ2Y3lBOVBUMGdMVEVwSUh0Y2JpQWdJQ0FnSUNBZ1kyaHZiWEFnUFNBbkxTYzdJQzh2SUhOMGNtbHdYRzRnSUNBZ2ZWeHVJQ0FnSUdWc2MyVWdhV1lnS0haaGJIVmxJRDA5UFNCbGJtUWdmSHdnWlc1a1RteFFiM01nSVQwOUlHVnVaQzVzWlc1bmRHZ2dMU0F4S1NCN1hHNGdJQ0FnSUNBZ0lHTm9iMjF3SUQwZ0p5c25PeUF2THlCclpXVndYRzRnSUNBZ0lDQWdJR2xtSUNodmJrTm9iMjF3UzJWbGNDbGNiaUFnSUNBZ0lDQWdJQ0FnSUc5dVEyaHZiWEJMWldWd0tDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYUc5dGNDQTlJQ2NuT3lBdkx5QmpiR2x3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2hsYm1RcElIdGNiaUFnSUNBZ0lDQWdkbUZzZFdVZ1BTQjJZV3gxWlM1emJHbGpaU2d3TENBdFpXNWtMbXhsYm1kMGFDazdYRzRnSUNBZ0lDQWdJR2xtSUNobGJtUmJaVzVrTG14bGJtZDBhQ0F0SURGZElEMDlQU0FuWEZ4dUp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUdWdVpDQTlJR1Z1WkM1emJHbGpaU2d3TENBdE1TazdYRzRnSUNBZ0lDQWdJR1Z1WkNBOUlHVnVaQzV5WlhCc1lXTmxLR0pzYjJOclJXNWtUbVYzYkdsdVpYTXNJR0FrSmlSN2FXNWtaVzUwZldBcE8xeHVJQ0FnSUgxY2JpQWdJQ0F2THlCa1pYUmxjbTFwYm1VZ2FXNWtaVzUwSUdsdVpHbGpZWFJ2Y2lCbWNtOXRJSGRvYVhSbGMzQmhZMlVnWVhRZ2RtRnNkV1VnYzNSaGNuUmNiaUFnSUNCc1pYUWdjM1JoY25SWGFYUm9VM0JoWTJVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0JzWlhRZ2MzUmhjblJGYm1RN1hHNGdJQ0FnYkdWMElITjBZWEowVG14UWIzTWdQU0F0TVR0Y2JpQWdJQ0JtYjNJZ0tITjBZWEowUlc1a0lEMGdNRHNnYzNSaGNuUkZibVFnUENCMllXeDFaUzVzWlc1bmRHZzdJQ3NyYzNSaGNuUkZibVFwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJnZ1BTQjJZV3gxWlZ0emRHRnlkRVZ1WkYwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hqYUNBOVBUMGdKeUFuS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoY25SWGFYUm9VM0JoWTJVZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoamFDQTlQVDBnSjF4Y2JpY3BYRzRnSUNBZ0lDQWdJQ0FnSUNCemRHRnlkRTVzVUc5eklEMGdjM1JoY25SRmJtUTdYRzRnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0JzWlhRZ2MzUmhjblFnUFNCMllXeDFaUzV6ZFdKemRISnBibWNvTUN3Z2MzUmhjblJPYkZCdmN5QThJSE4wWVhKMFJXNWtJRDhnYzNSaGNuUk9iRkJ2Y3lBcklERWdPaUJ6ZEdGeWRFVnVaQ2s3WEc0Z0lDQWdhV1lnS0hOMFlYSjBLU0I3WEc0Z0lDQWdJQ0FnSUhaaGJIVmxJRDBnZG1Gc2RXVXVjM1ZpYzNSeWFXNW5LSE4wWVhKMExteGxibWQwYUNrN1hHNGdJQ0FnSUNBZ0lITjBZWEowSUQwZ2MzUmhjblF1Y21Wd2JHRmpaU2d2WEZ4dUt5OW5MQ0JnSkNZa2UybHVaR1Z1ZEgxZ0tUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdhVzVrWlc1MFUybDZaU0E5SUdsdVpHVnVkQ0EvSUNjeUp5QTZJQ2N4SnpzZ0x5OGdjbTl2ZENCcGN5QmhkQ0F0TVZ4dUlDQWdJR3hsZENCb1pXRmtaWElnUFNBb2JHbDBaWEpoYkNBL0lDZDhKeUE2SUNjK0p5a2dLeUFvYzNSaGNuUlhhWFJvVTNCaFkyVWdQeUJwYm1SbGJuUlRhWHBsSURvZ0p5Y3BJQ3NnWTJodmJYQTdYRzRnSUNBZ2FXWWdLR052YlcxbGJuUXBJSHRjYmlBZ0lDQWdJQ0FnYUdWaFpHVnlJQ3M5SUNjZ0p5QXJJR052YlcxbGJuUlRkSEpwYm1jb1kyOXRiV1Z1ZEM1eVpYQnNZV05sS0M4Z1AxdGNYSEpjWEc1ZEt5OW5MQ0FuSUNjcEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0c5dVEyOXRiV1Z1ZENsY2JpQWdJQ0FnSUNBZ0lDQWdJRzl1UTI5dGJXVnVkQ2dwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvYkdsMFpYSmhiQ2tnZTF4dUlDQWdJQ0FnSUNCMllXeDFaU0E5SUhaaGJIVmxMbkpsY0d4aFkyVW9MMXhjYmlzdlp5d2dZQ1FtSkh0cGJtUmxiblI5WUNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ0pIdG9aV0ZrWlhKOVhGeHVKSHRwYm1SbGJuUjlKSHR6ZEdGeWRIMGtlM1poYkhWbGZTUjdaVzVrZldBN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoYkhWbElEMGdkbUZzZFdWY2JpQWdJQ0FnSUNBZ0xuSmxjR3hoWTJVb0wxeGNiaXN2Wnl3Z0oxeGNiaVFtSnlsY2JpQWdJQ0FnSUNBZ0xuSmxjR3hoWTJVb0x5Zy9PbDU4WEZ4dUtTaGJYRngwSUYwdUtpa29Qem9vVzF4Y2JseGNkQ0JkS2lsY1hHNG9QeUZiWEZ4dVhGeDBJRjBwS1Q4dlp5d2dKeVF4SkRJbktTQXZMeUJ0YjNKbExXbHVaR1Z1ZEdWa0lHeHBibVZ6SUdGeVpXNG5kQ0JtYjJ4a1pXUmNiaUFnSUNBZ0lDQWdMeThnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdYaUJ0YjNKbExXbHVaQzRnWGlCbGJYQjBlU0FnSUNBZ1hpQmpZWEIwZFhKbElHNWxlSFFnWlcxd2RIa2diR2x1WlhNZ2IyNXNlU0JoZENCbGJtUWdiMllnYVc1a1pXNTBYRzRnSUNBZ0lDQWdJQzV5WlhCc1lXTmxLQzljWEc0ckwyY3NJR0FrSmlSN2FXNWtaVzUwZldBcE8xeHVJQ0FnSUdOdmJuTjBJR0p2WkhrZ1BTQm1iMnhrUm14dmQweHBibVZ6S0dBa2UzTjBZWEowZlNSN2RtRnNkV1Y5Skh0bGJtUjlZQ3dnYVc1a1pXNTBMQ0JHVDB4RVgwSk1UME5MTENCblpYUkdiMnhrVDNCMGFXOXVjeWhqZEhnc0lIUnlkV1VwS1R0Y2JpQWdJQ0J5WlhSMWNtNGdZQ1I3YUdWaFpHVnlmVnhjYmlSN2FXNWtaVzUwZlNSN1ltOWtlWDFnTzF4dWZWeHVablZ1WTNScGIyNGdjR3hoYVc1VGRISnBibWNvYVhSbGJTd2dZM1I0TENCdmJrTnZiVzFsYm5Rc0lHOXVRMmh2YlhCTFpXVndLU0I3WEc0Z0lDQWdZMjl1YzNRZ2V5QjBlWEJsTENCMllXeDFaU0I5SUQwZ2FYUmxiVHRjYmlBZ0lDQmpiMjV6ZENCN0lHRmpkSFZoYkZOMGNtbHVaeXdnYVcxd2JHbGphWFJMWlhrc0lHbHVaR1Z1ZEN3Z2FXNWtaVzUwVTNSbGNDd2dhVzVHYkc5M0lIMGdQU0JqZEhnN1hHNGdJQ0FnYVdZZ0tDaHBiWEJzYVdOcGRFdGxlU0FtSmlCMllXeDFaUzVwYm1Oc2RXUmxjeWduWEZ4dUp5a3BJSHg4WEc0Z0lDQWdJQ0FnSUNocGJrWnNiM2NnSmlZZ0wxdGJYRnhkZTMwc1hTOHVkR1Z6ZENoMllXeDFaU2twS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCeGRXOTBaV1JUZEhKcGJtY29kbUZzZFdVc0lHTjBlQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2doZG1Gc2RXVWdmSHhjYmlBZ0lDQWdJQ0FnTDE1YlhGeHVYRngwSUN4YlhGeGRlMzBqSmlvaGZENG5YQ0lsUUdCZGZGNWJQeTFkSkh4ZVd6OHRYVnNnWEZ4MFhYeGJYRnh1T2wxYklGeGNkRjE4V3lCY1hIUmRYRnh1ZkZ0Y1hHNWNYSFFnWFNOOFcxeGNibHhjZENBNlhTUXZMblJsYzNRb2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRzV2ZENCaGJHeHZkMlZrT2x4dUlDQWdJQ0FnSUNBdkx5QXRJR1Z0Y0hSNUlITjBjbWx1Wnl3Z0p5MG5JRzl5SUNjL0oxeHVJQ0FnSUNBZ0lDQXZMeUF0SUhOMFlYSjBJSGRwZEdnZ1lXNGdhVzVrYVdOaGRHOXlJR05vWVhKaFkzUmxjaUFvWlhoalpYQjBJRnMvT2kxZEtTQnZjaUF2V3o4dFhTQXZYRzRnSUNBZ0lDQWdJQzh2SUMwZ0oxeGNiaUFuTENBbk9pQW5JRzl5SUNjZ1hGeHVKeUJoYm5sM2FHVnlaVnh1SUNBZ0lDQWdJQ0F2THlBdElDY2pKeUJ1YjNRZ2NISmxZMlZrWldRZ1lua2dZU0J1YjI0dGMzQmhZMlVnWTJoaGNseHVJQ0FnSUNBZ0lDQXZMeUF0SUdWdVpDQjNhWFJvSUNjZ0p5QnZjaUFuT2lkY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdsdGNHeHBZMmwwUzJWNUlIeDhJR2x1Um14dmR5QjhmQ0FoZG1Gc2RXVXVhVzVqYkhWa1pYTW9KMXhjYmljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0EvSUhGMWIzUmxaRk4wY21sdVp5aDJZV3gxWlN3Z1kzUjRLVnh1SUNBZ0lDQWdJQ0FnSUNBZ09pQmliRzlqYTFOMGNtbHVaeWhwZEdWdExDQmpkSGdzSUc5dVEyOXRiV1Z1ZEN3Z2IyNURhRzl0Y0V0bFpYQXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9JV2x0Y0d4cFkybDBTMlY1SUNZbVhHNGdJQ0FnSUNBZ0lDRnBia1pzYjNjZ0ppWmNiaUFnSUNBZ0lDQWdkSGx3WlNBaFBUMGdVMk5oYkdGeUxsQk1RVWxPSUNZbVhHNGdJQ0FnSUNBZ0lIWmhiSFZsTG1sdVkyeDFaR1Z6S0NkY1hHNG5LU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QlhhR1Z5WlNCaGJHeHZkMlZrSUNZZ2RIbHdaU0J1YjNRZ2MyVjBJR1Y0Y0d4cFkybDBiSGtzSUhCeVpXWmxjaUJpYkc5amF5QnpkSGxzWlNCbWIzSWdiWFZzZEdsc2FXNWxJSE4wY21sdVozTmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHSnNiMk5yVTNSeWFXNW5LR2wwWlcwc0lHTjBlQ3dnYjI1RGIyMXRaVzUwTENCdmJrTm9iMjF3UzJWbGNDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaGpiMjUwWVdsdWMwUnZZM1Z0Wlc1MFRXRnlhMlZ5S0haaGJIVmxLU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9hVzVrWlc1MElEMDlQU0FuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTNSNExtWnZjbU5sUW14dlkydEpibVJsYm5RZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHSnNiMk5yVTNSeWFXNW5LR2wwWlcwc0lHTjBlQ3dnYjI1RGIyMXRaVzUwTENCdmJrTm9iMjF3UzJWbGNDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQnBaaUFvYVcxd2JHbGphWFJMWlhrZ0ppWWdhVzVrWlc1MElEMDlQU0JwYm1SbGJuUlRkR1Z3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjWFZ2ZEdWa1UzUnlhVzVuS0haaGJIVmxMQ0JqZEhncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJSE4wY2lBOUlIWmhiSFZsTG5KbGNHeGhZMlVvTDF4Y2Jpc3ZaeXdnWUNRbVhGeHVKSHRwYm1SbGJuUjlZQ2s3WEc0Z0lDQWdMeThnVm1WeWFXWjVJSFJvWVhRZ2IzVjBjSFYwSUhkcGJHd2dZbVVnY0dGeWMyVmtJR0Z6SUdFZ2MzUnlhVzVuTENCaGN5QmxMbWN1SUhCc1lXbHVJRzUxYldKbGNuTWdZVzVrWEc0Z0lDQWdMeThnWW05dmJHVmhibk1nWjJWMElIQmhjbk5sWkNCM2FYUm9JSFJvYjNObElIUjVjR1Z6SUdsdUlIWXhMaklnS0dVdVp5NGdKelF5Snl3Z0ozUnlkV1VuSUNZZ0p6QXVPV1V0TXljcExGeHVJQ0FnSUM4dklHRnVaQ0J2ZEdobGNuTWdhVzRnZGpFdU1TNWNiaUFnSUNCcFppQW9ZV04wZFdGc1UzUnlhVzVuS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhSbGMzUWdQU0FvZEdGbktTQTlQaUIwWVdjdVpHVm1ZWFZzZENBbUppQjBZV2N1ZEdGbklDRTlQU0FuZEdGbk9ubGhiV3d1YjNKbkxESXdNREk2YzNSeUp5QW1KaUIwWVdjdWRHVnpkRDh1ZEdWemRDaHpkSElwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3SUdOdmJYQmhkQ3dnZEdGbmN5QjlJRDBnWTNSNExtUnZZeTV6WTJobGJXRTdYRzRnSUNBZ0lDQWdJR2xtSUNoMFlXZHpMbk52YldVb2RHVnpkQ2tnZkh3Z1kyOXRjR0YwUHk1emIyMWxLSFJsYzNRcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEYxYjNSbFpGTjBjbWx1WnloMllXeDFaU3dnWTNSNEtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR2x0Y0d4cFkybDBTMlY1WEc0Z0lDQWdJQ0FnSUQ4Z2MzUnlYRzRnSUNBZ0lDQWdJRG9nWm05c1pFWnNiM2RNYVc1bGN5aHpkSElzSUdsdVpHVnVkQ3dnUms5TVJGOUdURTlYTENCblpYUkdiMnhrVDNCMGFXOXVjeWhqZEhnc0lHWmhiSE5sS1NrN1hHNTlYRzVtZFc1amRHbHZiaUJ6ZEhKcGJtZHBabmxUZEhKcGJtY29hWFJsYlN3Z1kzUjRMQ0J2YmtOdmJXMWxiblFzSUc5dVEyaHZiWEJMWldWd0tTQjdYRzRnSUNBZ1kyOXVjM1FnZXlCcGJYQnNhV05wZEV0bGVTd2dhVzVHYkc5M0lIMGdQU0JqZEhnN1hHNGdJQ0FnWTI5dWMzUWdjM01nUFNCMGVYQmxiMllnYVhSbGJTNTJZV3gxWlNBOVBUMGdKM04wY21sdVp5ZGNiaUFnSUNBZ0lDQWdQeUJwZEdWdFhHNGdJQ0FnSUNBZ0lEb2dUMkpxWldOMExtRnpjMmxuYmloN2ZTd2dhWFJsYlN3Z2V5QjJZV3gxWlRvZ1UzUnlhVzVuS0dsMFpXMHVkbUZzZFdVcElIMHBPMXh1SUNBZ0lHeGxkQ0I3SUhSNWNHVWdmU0E5SUdsMFpXMDdYRzRnSUNBZ2FXWWdLSFI1Y0dVZ0lUMDlJRk5qWVd4aGNpNVJWVTlVUlY5RVQxVkNURVVwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdabTl5WTJVZ1pHOTFZbXhsSUhGMWIzUmxjeUJ2YmlCamIyNTBjbTlzSUdOb1lYSmhZM1JsY25NZ0ppQjFibkJoYVhKbFpDQnpkWEp5YjJkaGRHVnpYRzRnSUNBZ0lDQWdJR2xtSUNndlcxeGNlREF3TFZ4Y2VEQTRYRng0TUdJdFhGeDRNV1pjWEhnM1ppMWNYSGc1Wmx4Y2RYdEVPREF3ZlMxY1hIVjdSRVpHUm4xZEwzVXVkR1Z6ZENoemN5NTJZV3gxWlNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0IwZVhCbElEMGdVMk5oYkdGeUxsRlZUMVJGWDBSUFZVSk1SVHRjYmlBZ0lDQjlYRzRnSUNBZ1kyOXVjM1FnWDNOMGNtbHVaMmxtZVNBOUlDaGZkSGx3WlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLRjkwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRk5qWVd4aGNpNUNURTlEUzE5R1QweEVSVVE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZOallXeGhjaTVDVEU5RFMxOU1TVlJGVWtGTU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCcGJYQnNhV05wZEV0bGVTQjhmQ0JwYmtac2IzZGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUHlCeGRXOTBaV1JUZEhKcGJtY29jM011ZG1Gc2RXVXNJR04wZUNrZ0x5OGdZbXh2WTJ0eklHRnlaU0J1YjNRZ2RtRnNhV1FnYVc1emFXUmxJR1pzYjNjZ1kyOXVkR0ZwYm1WeWMxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUdKc2IyTnJVM1J5YVc1bktITnpMQ0JqZEhnc0lHOXVRMjl0YldWdWRDd2diMjVEYUc5dGNFdGxaWEFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCVFkyRnNZWEl1VVZWUFZFVmZSRTlWUWt4Rk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2IzVmliR1ZSZFc5MFpXUlRkSEpwYm1jb2MzTXVkbUZzZFdVc0lHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZOallXeGhjaTVSVlU5VVJWOVRTVTVIVEVVNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhOcGJtZHNaVkYxYjNSbFpGTjBjbWx1WnloemN5NTJZV3gxWlN3Z1kzUjRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnVTJOaGJHRnlMbEJNUVVsT09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd2JHRnBibE4wY21sdVp5aHpjeXdnWTNSNExDQnZia052YlcxbGJuUXNJRzl1UTJodmJYQkxaV1Z3S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5TzF4dUlDQWdJR3hsZENCeVpYTWdQU0JmYzNSeWFXNW5hV1o1S0hSNWNHVXBPMXh1SUNBZ0lHbG1JQ2h5WlhNZ1BUMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2V5QmtaV1poZFd4MFMyVjVWSGx3WlN3Z1pHVm1ZWFZzZEZOMGNtbHVaMVI1Y0dVZ2ZTQTlJR04wZUM1dmNIUnBiMjV6TzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IwSUQwZ0tHbHRjR3hwWTJsMFMyVjVJQ1ltSUdSbFptRjFiSFJMWlhsVWVYQmxLU0I4ZkNCa1pXWmhkV3gwVTNSeWFXNW5WSGx3WlR0Y2JpQWdJQ0FnSUNBZ2NtVnpJRDBnWDNOMGNtbHVaMmxtZVNoMEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hKbGN5QTlQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVlc1emRYQndiM0owWldRZ1pHVm1ZWFZzZENCemRISnBibWNnZEhsd1pTQWtlM1I5WUNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnlaWE03WEc1OVhHNWNibVY0Y0c5eWRDQjdJSE4wY21sdVoybG1lVk4wY21sdVp5QjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lHRnVZMmh2Y2tselZtRnNhV1FnZlNCbWNtOXRJQ2N1TGk5a2IyTXZZVzVqYUc5eWN5NXFjeWM3WEc1cGJYQnZjblFnZXlCcGMxQmhhWElzSUdselFXeHBZWE1zSUdselRtOWtaU3dnYVhOVFkyRnNZWElzSUdselEyOXNiR1ZqZEdsdmJpQjlJR1p5YjIwZ0p5NHVMMjV2WkdWekwybGtaVzUwYVhSNUxtcHpKenRjYm1sdGNHOXlkQ0I3SUhOMGNtbHVaMmxtZVVOdmJXMWxiblFnZlNCbWNtOXRJQ2N1TDNOMGNtbHVaMmxtZVVOdmJXMWxiblF1YW5Nbk8xeHVhVzF3YjNKMElIc2djM1J5YVc1bmFXWjVVM1J5YVc1bklIMGdabkp2YlNBbkxpOXpkSEpwYm1kcFpubFRkSEpwYm1jdWFuTW5PMXh1WEc1bWRXNWpkR2x2YmlCamNtVmhkR1ZUZEhKcGJtZHBabmxEYjI1MFpYaDBLR1J2WXl3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0FnSUdOdmJuTjBJRzl3ZENBOUlFOWlhbVZqZEM1aGMzTnBaMjRvZTF4dUlDQWdJQ0FnSUNCaWJHOWphMUYxYjNSbE9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNCamIyMXRaVzUwVTNSeWFXNW5PaUJ6ZEhKcGJtZHBabmxEYjIxdFpXNTBMRnh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBTMlY1Vkhsd1pUb2diblZzYkN4Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZEZOMGNtbHVaMVI1Y0dVNklDZFFURUZKVGljc1hHNGdJQ0FnSUNBZ0lHUnBjbVZqZEdsMlpYTTZJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lHUnZkV0pzWlZGMWIzUmxaRUZ6U2xOUFRqb2dabUZzYzJVc1hHNGdJQ0FnSUNBZ0lHUnZkV0pzWlZGMWIzUmxaRTFwYmsxMWJIUnBUR2x1WlV4bGJtZDBhRG9nTkRBc1hHNGdJQ0FnSUNBZ0lHWmhiSE5sVTNSeU9pQW5abUZzYzJVbkxGeHVJQ0FnSUNBZ0lDQm1iRzkzUTI5c2JHVmpkR2x2YmxCaFpHUnBibWM2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJR2x1WkdWdWRGTmxjVG9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdiR2x1WlZkcFpIUm9PaUE0TUN4Y2JpQWdJQ0FnSUNBZ2JXbHVRMjl1ZEdWdWRGZHBaSFJvT2lBeU1DeGNiaUFnSUNBZ0lDQWdiblZzYkZOMGNqb2dKMjUxYkd3bkxGeHVJQ0FnSUNBZ0lDQnphVzF3YkdWTFpYbHpPaUJtWVd4elpTeGNiaUFnSUNBZ0lDQWdjMmx1WjJ4bFVYVnZkR1U2SUc1MWJHd3NYRzRnSUNBZ0lDQWdJSFJ5ZFdWVGRISTZJQ2QwY25WbEp5eGNiaUFnSUNBZ0lDQWdkbVZ5YVdaNVFXeHBZWE5QY21SbGNqb2dkSEoxWlZ4dUlDQWdJSDBzSUdSdll5NXpZMmhsYldFdWRHOVRkSEpwYm1kUGNIUnBiMjV6TENCdmNIUnBiMjV6S1R0Y2JpQWdJQ0JzWlhRZ2FXNUdiRzkzTzF4dUlDQWdJSE4zYVhSamFDQW9iM0IwTG1OdmJHeGxZM1JwYjI1VGRIbHNaU2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJQ2RpYkc5amF5YzZYRzRnSUNBZ0lDQWdJQ0FnSUNCcGJrWnNiM2NnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCallYTmxJQ2RtYkc5M0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdsdVJteHZkeUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lHbHVSbXh2ZHlBOUlHNTFiR3c3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lHRnVZMmh2Y25NNklHNWxkeUJUWlhRb0tTeGNiaUFnSUNBZ0lDQWdaRzlqTEZ4dUlDQWdJQ0FnSUNCbWJHOTNRMjlzYkdWamRHbHZibEJoWkdScGJtYzZJRzl3ZEM1bWJHOTNRMjlzYkdWamRHbHZibEJoWkdScGJtY2dQeUFuSUNjZ09pQW5KeXhjYmlBZ0lDQWdJQ0FnYVc1a1pXNTBPaUFuSnl4Y2JpQWdJQ0FnSUNBZ2FXNWtaVzUwVTNSbGNEb2dkSGx3Wlc5bUlHOXdkQzVwYm1SbGJuUWdQVDA5SUNkdWRXMWlaWEluSUQ4Z0p5QW5MbkpsY0dWaGRDaHZjSFF1YVc1a1pXNTBLU0E2SUNjZ0lDY3NYRzRnSUNBZ0lDQWdJR2x1Um14dmR5eGNiaUFnSUNBZ0lDQWdiM0IwYVc5dWN6b2diM0IwWEc0Z0lDQWdmVHRjYm4xY2JtWjFibU4wYVc5dUlHZGxkRlJoWjA5aWFtVmpkQ2gwWVdkekxDQnBkR1Z0S1NCN1hHNGdJQ0FnYVdZZ0tHbDBaVzB1ZEdGbktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHMWhkR05vSUQwZ2RHRm5jeTVtYVd4MFpYSW9kQ0E5UGlCMExuUmhaeUE5UFQwZ2FYUmxiUzUwWVdjcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvYldGMFkyZ3ViR1Z1WjNSb0lENGdNQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdFlYUmphQzVtYVc1a0tIUWdQVDRnZEM1bWIzSnRZWFFnUFQwOUlHbDBaVzB1Wm05eWJXRjBLU0EvUHlCdFlYUmphRnN3WFR0Y2JpQWdJQ0I5WEc0Z0lDQWdiR1YwSUhSaFowOWlhaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0JzWlhRZ2IySnFPMXh1SUNBZ0lHbG1JQ2hwYzFOallXeGhjaWhwZEdWdEtTa2dlMXh1SUNBZ0lDQWdJQ0J2WW1vZ1BTQnBkR1Z0TG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0JzWlhRZ2JXRjBZMmdnUFNCMFlXZHpMbVpwYkhSbGNpaDBJRDArSUhRdWFXUmxiblJwWm5rL0xpaHZZbW9wS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLRzFoZEdOb0xteGxibWQwYUNBK0lERXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhSbGMzUk5ZWFJqYUNBOUlHMWhkR05vTG1acGJIUmxjaWgwSUQwK0lIUXVkR1Z6ZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHVnpkRTFoZEdOb0xteGxibWQwYUNBK0lEQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiV0YwWTJnZ1BTQjBaWE4wVFdGMFkyZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZEdGblQySnFJRDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHMWhkR05vTG1acGJtUW9kQ0E5UGlCMExtWnZjbTFoZENBOVBUMGdhWFJsYlM1bWIzSnRZWFFwSUQ4L0lHMWhkR05vTG1acGJtUW9kQ0E5UGlBaGRDNW1iM0p0WVhRcE8xeHVJQ0FnSUgxY2JpQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiMkpxSUQwZ2FYUmxiVHRjYmlBZ0lDQWdJQ0FnZEdGblQySnFJRDBnZEdGbmN5NW1hVzVrS0hRZ1BUNGdkQzV1YjJSbFEyeGhjM01nSmlZZ2IySnFJR2x1YzNSaGJtTmxiMllnZEM1dWIyUmxRMnhoYzNNcE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb0lYUmhaMDlpYWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdVlXMWxJRDBnYjJKcVB5NWpiMjV6ZEhKMVkzUnZjajh1Ym1GdFpTQS9QeUIwZVhCbGIyWWdiMkpxTzF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUZSaFp5QnViM1FnY21WemIyeDJaV1FnWm05eUlDUjdibUZ0WlgwZ2RtRnNkV1ZnS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUmhaMDlpYWp0Y2JuMWNiaTh2SUc1bFpXUnpJSFJ2SUdKbElHTmhiR3hsWkNCaVpXWnZjbVVnZG1Gc2RXVWdjM1J5YVc1bmFXWnBaWElnZEc4Z1lXeHNiM2NnWm05eUlHTnBjbU4xYkdGeUlHRnVZMmh2Y2lCeVpXWnpYRzVtZFc1amRHbHZiaUJ6ZEhKcGJtZHBabmxRY205d2N5aHViMlJsTENCMFlXZFBZbW9zSUhzZ1lXNWphRzl5Y3l3Z1pHOWpJSDBwSUh0Y2JpQWdJQ0JwWmlBb0lXUnZZeTVrYVhKbFkzUnBkbVZ6S1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnSnljN1hHNGdJQ0FnWTI5dWMzUWdjSEp2Y0hNZ1BTQmJYVHRjYmlBZ0lDQmpiMjV6ZENCaGJtTm9iM0lnUFNBb2FYTlRZMkZzWVhJb2JtOWtaU2tnZkh3Z2FYTkRiMnhzWldOMGFXOXVLRzV2WkdVcEtTQW1KaUJ1YjJSbExtRnVZMmh2Y2p0Y2JpQWdJQ0JwWmlBb1lXNWphRzl5SUNZbUlHRnVZMmh2Y2tselZtRnNhV1FvWVc1amFHOXlLU2tnZTF4dUlDQWdJQ0FnSUNCaGJtTm9iM0p6TG1Ga1pDaGhibU5vYjNJcE8xeHVJQ0FnSUNBZ0lDQndjbTl3Y3k1d2RYTm9LR0FtSkh0aGJtTm9iM0o5WUNrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElIUmhaeUE5SUc1dlpHVXVkR0ZuSUQ4Z2JtOWtaUzUwWVdjZ09pQjBZV2RQWW1vdVpHVm1ZWFZzZENBL0lHNTFiR3dnT2lCMFlXZFBZbW91ZEdGbk8xeHVJQ0FnSUdsbUlDaDBZV2NwWEc0Z0lDQWdJQ0FnSUhCeWIzQnpMbkIxYzJnb1pHOWpMbVJwY21WamRHbDJaWE11ZEdGblUzUnlhVzVuS0hSaFp5a3BPMXh1SUNBZ0lISmxkSFZ5YmlCd2NtOXdjeTVxYjJsdUtDY2dKeWs3WEc1OVhHNW1kVzVqZEdsdmJpQnpkSEpwYm1kcFpua29hWFJsYlN3Z1kzUjRMQ0J2YmtOdmJXMWxiblFzSUc5dVEyaHZiWEJMWldWd0tTQjdYRzRnSUNBZ2FXWWdLR2x6VUdGcGNpaHBkR1Z0S1NsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdsMFpXMHVkRzlUZEhKcGJtY29ZM1I0TENCdmJrTnZiVzFsYm5Rc0lHOXVRMmh2YlhCTFpXVndLVHRjYmlBZ0lDQnBaaUFvYVhOQmJHbGhjeWhwZEdWdEtTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1kzUjRMbVJ2WXk1a2FYSmxZM1JwZG1WektWeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR2wwWlcwdWRHOVRkSEpwYm1jb1kzUjRLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTjBlQzV5WlhOdmJIWmxaRUZzYVdGelpYTS9MbWhoY3locGRHVnRLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRlI1Y0dWRmNuSnZjaWhnUTJGdWJtOTBJSE4wY21sdVoybG1lU0JqYVhKamRXeGhjaUJ6ZEhKMVkzUjFjbVVnZDJsMGFHOTFkQ0JoYkdsaGN5QnViMlJsYzJBcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTjBlQzV5WlhOdmJIWmxaRUZzYVdGelpYTXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZM1I0TG5KbGMyOXNkbVZrUVd4cFlYTmxjeTVoWkdRb2FYUmxiU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNSNExuSmxjMjlzZG1Wa1FXeHBZWE5sY3lBOUlHNWxkeUJUWlhRb1cybDBaVzFkS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2wwWlcwZ1BTQnBkR1Z0TG5KbGMyOXNkbVVvWTNSNExtUnZZeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdiR1YwSUhSaFowOWlhaUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0JqYjI1emRDQnViMlJsSUQwZ2FYTk9iMlJsS0dsMFpXMHBYRzRnSUNBZ0lDQWdJRDhnYVhSbGJWeHVJQ0FnSUNBZ0lDQTZJR04wZUM1a2IyTXVZM0psWVhSbFRtOWtaU2hwZEdWdExDQjdJRzl1VkdGblQySnFPaUJ2SUQwK0lDaDBZV2RQWW1vZ1BTQnZLU0I5S1R0Y2JpQWdJQ0JwWmlBb0lYUmhaMDlpYWlsY2JpQWdJQ0FnSUNBZ2RHRm5UMkpxSUQwZ1oyVjBWR0ZuVDJKcVpXTjBLR04wZUM1a2IyTXVjMk5vWlcxaExuUmhaM01zSUc1dlpHVXBPMXh1SUNBZ0lHTnZibk4wSUhCeWIzQnpJRDBnYzNSeWFXNW5hV1o1VUhKdmNITW9ibTlrWlN3Z2RHRm5UMkpxTENCamRIZ3BPMXh1SUNBZ0lHbG1JQ2h3Y205d2N5NXNaVzVuZEdnZ1BpQXdLVnh1SUNBZ0lDQWdJQ0JqZEhndWFXNWtaVzUwUVhSVGRHRnlkQ0E5SUNoamRIZ3VhVzVrWlc1MFFYUlRkR0Z5ZENBL1B5QXdLU0FySUhCeWIzQnpMbXhsYm1kMGFDQXJJREU3WEc0Z0lDQWdZMjl1YzNRZ2MzUnlJRDBnZEhsd1pXOW1JSFJoWjA5aWFpNXpkSEpwYm1kcFpua2dQVDA5SUNkbWRXNWpkR2x2YmlkY2JpQWdJQ0FnSUNBZ1B5QjBZV2RQWW1vdWMzUnlhVzVuYVdaNUtHNXZaR1VzSUdOMGVDd2diMjVEYjIxdFpXNTBMQ0J2YmtOb2IyMXdTMlZsY0NsY2JpQWdJQ0FnSUNBZ09pQnBjMU5qWVd4aGNpaHViMlJsS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdQeUJ6ZEhKcGJtZHBabmxUZEhKcGJtY29ibTlrWlN3Z1kzUjRMQ0J2YmtOdmJXMWxiblFzSUc5dVEyaHZiWEJMWldWd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnT2lCdWIyUmxMblJ2VTNSeWFXNW5LR04wZUN3Z2IyNURiMjF0Wlc1MExDQnZia05vYjIxd1MyVmxjQ2s3WEc0Z0lDQWdhV1lnS0NGd2NtOXdjeWxjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE4wY2p0Y2JpQWdJQ0J5WlhSMWNtNGdhWE5UWTJGc1lYSW9ibTlrWlNrZ2ZId2djM1J5V3pCZElEMDlQU0FuZXljZ2ZId2djM1J5V3pCZElEMDlQU0FuV3lkY2JpQWdJQ0FnSUNBZ1B5QmdKSHR3Y205d2MzMGdKSHR6ZEhKOVlGeHVJQ0FnSUNBZ0lDQTZJR0FrZTNCeWIzQnpmVnhjYmlSN1kzUjRMbWx1WkdWdWRIMGtlM04wY24xZ08xeHVmVnh1WEc1bGVIQnZjblFnZXlCamNtVmhkR1ZUZEhKcGJtZHBabmxEYjI1MFpYaDBMQ0J6ZEhKcGJtZHBabmtnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJwYzBOdmJHeGxZM1JwYjI0c0lHbHpUbTlrWlN3Z2FYTlRZMkZzWVhJc0lHbHpVMlZ4SUgwZ1puSnZiU0FuTGk0dmJtOWtaWE12YVdSbGJuUnBkSGt1YW5Nbk8xeHVhVzF3YjNKMElIc2dVMk5oYkdGeUlIMGdabkp2YlNBbkxpNHZibTlrWlhNdlUyTmhiR0Z5TG1wekp6dGNibWx0Y0c5eWRDQjdJSE4wY21sdVoybG1lU0I5SUdaeWIyMGdKeTR2YzNSeWFXNW5hV1o1TG1wekp6dGNibWx0Y0c5eWRDQjdJR3hwYm1WRGIyMXRaVzUwTENCcGJtUmxiblJEYjIxdFpXNTBJSDBnWm5KdmJTQW5MaTl6ZEhKcGJtZHBabmxEYjIxdFpXNTBMbXB6Snp0Y2JseHVablZ1WTNScGIyNGdjM1J5YVc1bmFXWjVVR0ZwY2loN0lHdGxlU3dnZG1Gc2RXVWdmU3dnWTNSNExDQnZia052YlcxbGJuUXNJRzl1UTJodmJYQkxaV1Z3S1NCN1hHNGdJQ0FnWTI5dWMzUWdleUJoYkd4T2RXeHNWbUZzZFdWekxDQmtiMk1zSUdsdVpHVnVkQ3dnYVc1a1pXNTBVM1JsY0N3Z2IzQjBhVzl1Y3pvZ2V5QmpiMjF0Wlc1MFUzUnlhVzVuTENCcGJtUmxiblJUWlhFc0lITnBiWEJzWlV0bGVYTWdmU0I5SUQwZ1kzUjRPMXh1SUNBZ0lHeGxkQ0JyWlhsRGIyMXRaVzUwSUQwZ0tHbHpUbTlrWlNoclpYa3BJQ1ltSUd0bGVTNWpiMjF0Wlc1MEtTQjhmQ0J1ZFd4c08xeHVJQ0FnSUdsbUlDaHphVzF3YkdWTFpYbHpLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHJaWGxEYjIxdFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxZHBkR2dnYzJsdGNHeGxJR3RsZVhNc0lHdGxlU0J1YjJSbGN5QmpZVzV1YjNRZ2FHRjJaU0JqYjIxdFpXNTBjeWNwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2hwYzBOdmJHeGxZM1JwYjI0b2EyVjVLU0I4ZkNBb0lXbHpUbTlrWlNoclpYa3BJQ1ltSUhSNWNHVnZaaUJyWlhrZ1BUMDlJQ2R2WW1wbFkzUW5LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JYTm5JRDBnSjFkcGRHZ2djMmx0Y0d4bElHdGxlWE1zSUdOdmJHeGxZM1JwYjI0Z1kyRnVibTkwSUdKbElIVnpaV1FnWVhNZ1lTQnJaWGtnZG1Gc2RXVW5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0cxelp5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2JHVjBJR1Y0Y0d4cFkybDBTMlY1SUQwZ0lYTnBiWEJzWlV0bGVYTWdKaVpjYmlBZ0lDQWdJQ0FnS0NGclpYa2dmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lDaHJaWGxEYjIxdFpXNTBJQ1ltSUhaaGJIVmxJRDA5SUc1MWJHd2dKaVlnSVdOMGVDNXBia1pzYjNjcElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNCcGMwTnZiR3hsWTNScGIyNG9hMlY1S1NCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnS0dselUyTmhiR0Z5S0d0bGVTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQS9JR3RsZVM1MGVYQmxJRDA5UFNCVFkyRnNZWEl1UWt4UFEwdGZSazlNUkVWRUlIeDhJR3RsZVM1MGVYQmxJRDA5UFNCVFkyRnNZWEl1UWt4UFEwdGZURWxVUlZKQlRGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dkSGx3Wlc5bUlHdGxlU0E5UFQwZ0oyOWlhbVZqZENjcEtUdGNiaUFnSUNCamRIZ2dQU0JQWW1wbFkzUXVZWE56YVdkdUtIdDlMQ0JqZEhnc0lIdGNiaUFnSUNBZ0lDQWdZV3hzVG5Wc2JGWmhiSFZsY3pvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUdsdGNHeHBZMmwwUzJWNU9pQWhaWGh3YkdsamFYUkxaWGtnSmlZZ0tITnBiWEJzWlV0bGVYTWdmSHdnSVdGc2JFNTFiR3hXWVd4MVpYTXBMRnh1SUNBZ0lDQWdJQ0JwYm1SbGJuUTZJR2x1WkdWdWRDQXJJR2x1WkdWdWRGTjBaWEJjYmlBZ0lDQjlLVHRjYmlBZ0lDQnNaWFFnYTJWNVEyOXRiV1Z1ZEVSdmJtVWdQU0JtWVd4elpUdGNiaUFnSUNCc1pYUWdZMmh2YlhCTFpXVndJRDBnWm1Gc2MyVTdYRzRnSUNBZ2JHVjBJSE4wY2lBOUlITjBjbWx1WjJsbWVTaHJaWGtzSUdOMGVDd2dLQ2tnUFQ0Z0tHdGxlVU52YlcxbGJuUkViMjVsSUQwZ2RISjFaU2tzSUNncElEMCtJQ2hqYUc5dGNFdGxaWEFnUFNCMGNuVmxLU2s3WEc0Z0lDQWdhV1lnS0NGbGVIQnNhV05wZEV0bGVTQW1KaUFoWTNSNExtbHVSbXh2ZHlBbUppQnpkSEl1YkdWdVozUm9JRDRnTVRBeU5Da2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2MybHRjR3hsUzJWNWN5bGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVjJsMGFDQnphVzF3YkdVZ2EyVjVjeXdnYzJsdVoyeGxJR3hwYm1VZ2MyTmhiR0Z5SUcxMWMzUWdibTkwSUhOd1lXNGdiVzl5WlNCMGFHRnVJREV3TWpRZ1kyaGhjbUZqZEdWeWN5Y3BPMXh1SUNBZ0lDQWdJQ0JsZUhCc2FXTnBkRXRsZVNBOUlIUnlkV1U3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2hqZEhndWFXNUdiRzkzS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hoYkd4T2RXeHNWbUZzZFdWeklIeDhJSFpoYkhWbElEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHJaWGxEYjIxdFpXNTBSRzl1WlNBbUppQnZia052YlcxbGJuUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMjVEYjIxdFpXNTBLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2MzUnlJRDA5UFNBbkp5QS9JQ2MvSnlBNklHVjRjR3hwWTJsMFMyVjVJRDhnWUQ4Z0pIdHpkSEo5WUNBNklITjBjanRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQmxiSE5sSUdsbUlDZ29ZV3hzVG5Wc2JGWmhiSFZsY3lBbUppQWhjMmx0Y0d4bFMyVjVjeWtnZkh3Z0tIWmhiSFZsSUQwOUlHNTFiR3dnSmlZZ1pYaHdiR2xqYVhSTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUhOMGNpQTlJR0EvSUNSN2MzUnlmV0E3WEc0Z0lDQWdJQ0FnSUdsbUlDaHJaWGxEYjIxdFpXNTBJQ1ltSUNGclpYbERiMjF0Wlc1MFJHOXVaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1J5SUNzOUlHeHBibVZEYjIxdFpXNTBLSE4wY2l3Z1kzUjRMbWx1WkdWdWRDd2dZMjl0YldWdWRGTjBjbWx1WnloclpYbERiMjF0Wlc1MEtTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQnBaaUFvWTJodmJYQkxaV1Z3SUNZbUlHOXVRMmh2YlhCTFpXVndLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2IyNURhRzl0Y0V0bFpYQW9LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE4wY2p0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0d0bGVVTnZiVzFsYm5SRWIyNWxLVnh1SUNBZ0lDQWdJQ0JyWlhsRGIyMXRaVzUwSUQwZ2JuVnNiRHRjYmlBZ0lDQnBaaUFvWlhod2JHbGphWFJMWlhrcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0d0bGVVTnZiVzFsYm5RcFhHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZEhJZ0t6MGdiR2x1WlVOdmJXMWxiblFvYzNSeUxDQmpkSGd1YVc1a1pXNTBMQ0JqYjIxdFpXNTBVM1J5YVc1bktHdGxlVU52YlcxbGJuUXBLVHRjYmlBZ0lDQWdJQ0FnYzNSeUlEMGdZRDhnSkh0emRISjlYRnh1Skh0cGJtUmxiblI5T21BN1hHNGdJQ0FnZlZ4dUlDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnpkSElnUFNCZ0pIdHpkSEo5T21BN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hyWlhsRGIyMXRaVzUwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjM1J5SUNzOUlHeHBibVZEYjIxdFpXNTBLSE4wY2l3Z1kzUjRMbWx1WkdWdWRDd2dZMjl0YldWdWRGTjBjbWx1WnloclpYbERiMjF0Wlc1MEtTazdYRzRnSUNBZ2ZWeHVJQ0FnSUd4bGRDQjJjMklzSUhaallpd2dkbUZzZFdWRGIyMXRaVzUwTzF4dUlDQWdJR2xtSUNocGMwNXZaR1VvZG1Gc2RXVXBLU0I3WEc0Z0lDQWdJQ0FnSUhaellpQTlJQ0VoZG1Gc2RXVXVjM0JoWTJWQ1pXWnZjbVU3WEc0Z0lDQWdJQ0FnSUhaallpQTlJSFpoYkhWbExtTnZiVzFsYm5SQ1pXWnZjbVU3WEc0Z0lDQWdJQ0FnSUhaaGJIVmxRMjl0YldWdWRDQTlJSFpoYkhWbExtTnZiVzFsYm5RN1hHNGdJQ0FnZlZ4dUlDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjJjMklnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnZG1OaUlEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2RtRnNkV1ZEYjIxdFpXNTBJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdhV1lnS0haaGJIVmxJQ1ltSUhSNWNHVnZaaUIyWVd4MVpTQTlQVDBnSjI5aWFtVmpkQ2NwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlNBOUlHUnZZeTVqY21WaGRHVk9iMlJsS0haaGJIVmxLVHRjYmlBZ0lDQjlYRzRnSUNBZ1kzUjRMbWx0Y0d4cFkybDBTMlY1SUQwZ1ptRnNjMlU3WEc0Z0lDQWdhV1lnS0NGbGVIQnNhV05wZEV0bGVTQW1KaUFoYTJWNVEyOXRiV1Z1ZENBbUppQnBjMU5qWVd4aGNpaDJZV3gxWlNrcFhHNGdJQ0FnSUNBZ0lHTjBlQzVwYm1SbGJuUkJkRk4wWVhKMElEMGdjM1J5TG14bGJtZDBhQ0FySURFN1hHNGdJQ0FnWTJodmJYQkxaV1Z3SUQwZ1ptRnNjMlU3WEc0Z0lDQWdhV1lnS0NGcGJtUmxiblJUWlhFZ0ppWmNiaUFnSUNBZ0lDQWdhVzVrWlc1MFUzUmxjQzVzWlc1bmRHZ2dQajBnTWlBbUpseHVJQ0FnSUNBZ0lDQWhZM1I0TG1sdVJteHZkeUFtSmx4dUlDQWdJQ0FnSUNBaFpYaHdiR2xqYVhSTFpYa2dKaVpjYmlBZ0lDQWdJQ0FnYVhOVFpYRW9kbUZzZFdVcElDWW1YRzRnSUNBZ0lDQWdJQ0YyWVd4MVpTNW1iRzkzSUNZbVhHNGdJQ0FnSUNBZ0lDRjJZV3gxWlM1MFlXY2dKaVpjYmlBZ0lDQWdJQ0FnSVhaaGJIVmxMbUZ1WTJodmNpa2dlMXh1SUNBZ0lDQWdJQ0F2THlCSlppQnBibVJsYm5SVFpYRWdQVDA5SUdaaGJITmxMQ0JqYjI1emFXUmxjaUFuTFNBbklHRnpJSEJoY25RZ2IyWWdhVzVrWlc1MFlYUnBiMjRnZDJobGNtVWdjRzl6YzJsaWJHVmNiaUFnSUNBZ0lDQWdZM1I0TG1sdVpHVnVkQ0E5SUdOMGVDNXBibVJsYm5RdWMzVmljM1J5YVc1bktESXBPMXh1SUNBZ0lIMWNiaUFnSUNCc1pYUWdkbUZzZFdWRGIyMXRaVzUwUkc5dVpTQTlJR1poYkhObE8xeHVJQ0FnSUdOdmJuTjBJSFpoYkhWbFUzUnlJRDBnYzNSeWFXNW5hV1o1S0haaGJIVmxMQ0JqZEhnc0lDZ3BJRDArSUNoMllXeDFaVU52YlcxbGJuUkViMjVsSUQwZ2RISjFaU2tzSUNncElEMCtJQ2hqYUc5dGNFdGxaWEFnUFNCMGNuVmxLU2s3WEc0Z0lDQWdiR1YwSUhkeklEMGdKeUFuTzF4dUlDQWdJR2xtSUNoclpYbERiMjF0Wlc1MElIeDhJSFp6WWlCOGZDQjJZMklwSUh0Y2JpQWdJQ0FnSUNBZ2QzTWdQU0IyYzJJZ1B5QW5YRnh1SnlBNklDY25PMXh1SUNBZ0lDQWdJQ0JwWmlBb2RtTmlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCamN5QTlJR052YlcxbGJuUlRkSEpwYm1jb2RtTmlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIZHpJQ3M5SUdCY1hHNGtlMmx1WkdWdWRFTnZiVzFsYm5Rb1kzTXNJR04wZUM1cGJtUmxiblFwZldBN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0haaGJIVmxVM1J5SUQwOVBTQW5KeUFtSmlBaFkzUjRMbWx1Um14dmR5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSGR6SUQwOVBTQW5YRnh1SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCM2N5QTlJQ2RjWEc1Y1hHNG5PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2QzTWdLejBnWUZ4Y2JpUjdZM1I0TG1sdVpHVnVkSDFnTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJR1ZzYzJVZ2FXWWdLQ0ZsZUhCc2FXTnBkRXRsZVNBbUppQnBjME52Ykd4bFkzUnBiMjRvZG1Gc2RXVXBLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSFp6TUNBOUlIWmhiSFZsVTNSeVd6QmRPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnViREFnUFNCMllXeDFaVk4wY2k1cGJtUmxlRTltS0NkY1hHNG5LVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhR0Z6VG1WM2JHbHVaU0E5SUc1c01DQWhQVDBnTFRFN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdac2IzY2dQU0JqZEhndWFXNUdiRzkzSUQ4L0lIWmhiSFZsTG1ac2IzY2dQejhnZG1Gc2RXVXVhWFJsYlhNdWJHVnVaM1JvSUQwOVBTQXdPMXh1SUNBZ0lDQWdJQ0JwWmlBb2FHRnpUbVYzYkdsdVpTQjhmQ0FoWm14dmR5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2hoYzFCeWIzQnpUR2x1WlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0doaGMwNWxkMnhwYm1VZ0ppWWdLSFp6TUNBOVBUMGdKeVluSUh4OElIWnpNQ0E5UFQwZ0p5RW5LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQnpjREFnUFNCMllXeDFaVk4wY2k1cGJtUmxlRTltS0NjZ0p5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0haek1DQTlQVDBnSnlZbklDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOd01DQWhQVDBnTFRFZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNBd0lEd2dibXd3SUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbFUzUnlXM053TUNBcklERmRJRDA5UFNBbklTY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzQXdJRDBnZG1Gc2RXVlRkSEl1YVc1a1pYaFBaaWduSUNjc0lITndNQ0FySURFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYzNBd0lEMDlQU0F0TVNCOGZDQnViREFnUENCemNEQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdoaGMxQnliM0J6VEdsdVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdoaGMxQnliM0J6VEdsdVpTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjNjeUE5SUdCY1hHNGtlMk4wZUM1cGJtUmxiblI5WUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JsYkhObElHbG1JQ2gyWVd4MVpWTjBjaUE5UFQwZ0p5Y2dmSHdnZG1Gc2RXVlRkSEpiTUYwZ1BUMDlJQ2RjWEc0bktTQjdYRzRnSUNBZ0lDQWdJSGR6SUQwZ0p5YzdYRzRnSUNBZ2ZWeHVJQ0FnSUhOMGNpQXJQU0IzY3lBcklIWmhiSFZsVTNSeU8xeHVJQ0FnSUdsbUlDaGpkSGd1YVc1R2JHOTNLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDJZV3gxWlVOdmJXMWxiblJFYjI1bElDWW1JRzl1UTI5dGJXVnVkQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lHOXVRMjl0YldWdWRDZ3BPMXh1SUNBZ0lIMWNiaUFnSUNCbGJITmxJR2xtSUNoMllXeDFaVU52YlcxbGJuUWdKaVlnSVhaaGJIVmxRMjl0YldWdWRFUnZibVVwSUh0Y2JpQWdJQ0FnSUNBZ2MzUnlJQ3M5SUd4cGJtVkRiMjF0Wlc1MEtITjBjaXdnWTNSNExtbHVaR1Z1ZEN3Z1kyOXRiV1Z1ZEZOMGNtbHVaeWgyWVd4MVpVTnZiVzFsYm5RcEtUdGNiaUFnSUNCOVhHNGdJQ0FnWld4elpTQnBaaUFvWTJodmJYQkxaV1Z3SUNZbUlHOXVRMmh2YlhCTFpXVndLU0I3WEc0Z0lDQWdJQ0FnSUc5dVEyaHZiWEJMWldWd0tDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ6ZEhJN1hHNTlYRzVjYm1WNGNHOXlkQ0I3SUhOMGNtbHVaMmxtZVZCaGFYSWdmVHRjYmlJc0lDSm1kVzVqZEdsdmJpQmtaV0oxWnloc2IyZE1aWFpsYkN3Z0xpNHViV1Z6YzJGblpYTXBJSHRjYmlBZ0lDQnBaaUFvYkc5blRHVjJaV3dnUFQwOUlDZGtaV0oxWnljcFhHNGdJQ0FnSUNBZ0lHTnZibk52YkdVdWJHOW5LQzR1TG0xbGMzTmhaMlZ6S1R0Y2JuMWNibVoxYm1OMGFXOXVJSGRoY200b2JHOW5UR1YyWld3c0lIZGhjbTVwYm1jcElIdGNiaUFnSUNCcFppQW9iRzluVEdWMlpXd2dQVDA5SUNka1pXSjFaeWNnZkh3Z2JHOW5UR1YyWld3Z1BUMDlJQ2QzWVhKdUp5a2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhCeWIyTmxjM01nSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltSUhCeWIyTmxjM011WlcxcGRGZGhjbTVwYm1jcFhHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205alpYTnpMbVZ0YVhSWFlYSnVhVzVuS0hkaGNtNXBibWNwTzF4dUlDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG5kaGNtNG9kMkZ5Ym1sdVp5azdYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnZXlCa1pXSjFaeXdnZDJGeWJpQjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lHbHpVMk5oYkdGeUxDQnBjMEZzYVdGekxDQnBjMU5sY1N3Z2FYTk5ZWEFnZlNCbWNtOXRJQ2N1TGk4dUxpOXViMlJsY3k5cFpHVnVkR2wwZVM1cWN5YzdYRzVwYlhCdmNuUWdleUJUWTJGc1lYSWdmU0JtY205dElDY3VMaTh1TGk5dWIyUmxjeTlUWTJGc1lYSXVhbk1uTzF4dVhHNHZMeUJKWmlCMGFHVWdkbUZzZFdVZ1lYTnpiMk5wWVhSbFpDQjNhWFJvSUdFZ2JXVnlaMlVnYTJWNUlHbHpJR0VnYzJsdVoyeGxJRzFoY0hCcGJtY2dibTlrWlN3Z1pXRmphQ0J2Wmx4dUx5OGdhWFJ6SUd0bGVTOTJZV3gxWlNCd1lXbHljeUJwY3lCcGJuTmxjblJsWkNCcGJuUnZJSFJvWlNCamRYSnlaVzUwSUcxaGNIQnBibWNzSUhWdWJHVnpjeUIwYUdVZ2EyVjVYRzR2THlCaGJISmxZV1I1SUdWNGFYTjBjeUJwYmlCcGRDNGdTV1lnZEdobElIWmhiSFZsSUdGemMyOWphV0YwWldRZ2QybDBhQ0IwYUdVZ2JXVnlaMlVnYTJWNUlHbHpJR0ZjYmk4dklITmxjWFZsYm1ObExDQjBhR1Z1SUhSb2FYTWdjMlZ4ZFdWdVkyVWdhWE1nWlhod1pXTjBaV1FnZEc4Z1kyOXVkR0ZwYmlCdFlYQndhVzVuSUc1dlpHVnpJR0Z1WkNCbFlXTm9YRzR2THlCdlppQjBhR1Z6WlNCdWIyUmxjeUJwY3lCdFpYSm5aV1FnYVc0Z2RIVnliaUJoWTJOdmNtUnBibWNnZEc4Z2FYUnpJRzl5WkdWeUlHbHVJSFJvWlNCelpYRjFaVzVqWlM1Y2JpOHZJRXRsZVhNZ2FXNGdiV0Z3Y0dsdVp5QnViMlJsY3lCbFlYSnNhV1Z5SUdsdUlIUm9aU0J6WlhGMVpXNWpaU0J2ZG1WeWNtbGtaU0JyWlhseklITndaV05wWm1sbFpDQnBibHh1THk4Z2JHRjBaWElnYldGd2NHbHVaeUJ1YjJSbGN5NGdMUzBnYUhSMGNEb3ZMM2xoYld3dWIzSm5MM1I1Y0dVdmJXVnlaMlV1YUhSdGJGeHVZMjl1YzNRZ1RVVlNSMFZmUzBWWklEMGdKenc4Snp0Y2JtTnZibk4wSUcxbGNtZGxJRDBnZTF4dUlDQWdJR2xrWlc1MGFXWjVPaUIyWVd4MVpTQTlQaUIyWVd4MVpTQTlQVDBnVFVWU1IwVmZTMFZaSUh4OFhHNGdJQ0FnSUNBZ0lDaDBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlDZHplVzFpYjJ3bklDWW1JSFpoYkhWbExtUmxjMk55YVhCMGFXOXVJRDA5UFNCTlJWSkhSVjlMUlZrcExGeHVJQ0FnSUdSbFptRjFiSFE2SUNkclpYa25MRnh1SUNBZ0lIUmhaem9nSjNSaFp6cDVZVzFzTG05eVp5d3lNREF5T20xbGNtZGxKeXhjYmlBZ0lDQjBaWE4wT2lBdlhqdzhKQzhzWEc0Z0lDQWdjbVZ6YjJ4MlpUb2dLQ2tnUFQ0Z1QySnFaV04wTG1GemMybG5iaWh1WlhjZ1UyTmhiR0Z5S0ZONWJXSnZiQ2hOUlZKSFJWOUxSVmtwS1N3Z2UxeHVJQ0FnSUNBZ0lDQmhaR1JVYjBwVFRXRndPaUJoWkdSTlpYSm5aVlJ2U2xOTllYQmNiaUFnSUNCOUtTeGNiaUFnSUNCemRISnBibWRwWm5rNklDZ3BJRDArSUUxRlVrZEZYMHRGV1Z4dWZUdGNibU52Ym5OMElHbHpUV1Z5WjJWTFpYa2dQU0FvWTNSNExDQnJaWGtwSUQwK0lDaHRaWEpuWlM1cFpHVnVkR2xtZVNoclpYa3BJSHg4WEc0Z0lDQWdLR2x6VTJOaGJHRnlLR3RsZVNrZ0ppWmNiaUFnSUNBZ0lDQWdLQ0ZyWlhrdWRIbHdaU0I4ZkNCclpYa3VkSGx3WlNBOVBUMGdVMk5oYkdGeUxsQk1RVWxPS1NBbUpseHVJQ0FnSUNBZ0lDQnRaWEpuWlM1cFpHVnVkR2xtZVNoclpYa3VkbUZzZFdVcEtTa2dKaVpjYmlBZ0lDQmpkSGcvTG1Sdll5NXpZMmhsYldFdWRHRm5jeTV6YjIxbEtIUmhaeUE5UGlCMFlXY3VkR0ZuSUQwOVBTQnRaWEpuWlM1MFlXY2dKaVlnZEdGbkxtUmxabUYxYkhRcE8xeHVablZ1WTNScGIyNGdZV1JrVFdWeVoyVlViMHBUVFdGd0tHTjBlQ3dnYldGd0xDQjJZV3gxWlNrZ2UxeHVJQ0FnSUhaaGJIVmxJRDBnWTNSNElDWW1JR2x6UVd4cFlYTW9kbUZzZFdVcElEOGdkbUZzZFdVdWNtVnpiMngyWlNoamRIZ3VaRzlqS1NBNklIWmhiSFZsTzF4dUlDQWdJR2xtSUNocGMxTmxjU2gyWVd4MVpTa3BYRzRnSUNBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnYVhRZ2IyWWdkbUZzZFdVdWFYUmxiWE1wWEc0Z0lDQWdJQ0FnSUNBZ0lDQnRaWEpuWlZaaGJIVmxLR04wZUN3Z2JXRndMQ0JwZENrN1hHNGdJQ0FnWld4elpTQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrcFhHNGdJQ0FnSUNBZ0lHWnZjaUFvWTI5dWMzUWdhWFFnYjJZZ2RtRnNkV1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnRaWEpuWlZaaGJIVmxLR04wZUN3Z2JXRndMQ0JwZENrN1hHNGdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQnRaWEpuWlZaaGJIVmxLR04wZUN3Z2JXRndMQ0IyWVd4MVpTazdYRzU5WEc1bWRXNWpkR2x2YmlCdFpYSm5aVlpoYkhWbEtHTjBlQ3dnYldGd0xDQjJZV3gxWlNrZ2UxeHVJQ0FnSUdOdmJuTjBJSE52ZFhKalpTQTlJR04wZUNBbUppQnBjMEZzYVdGektIWmhiSFZsS1NBL0lIWmhiSFZsTG5KbGMyOXNkbVVvWTNSNExtUnZZeWtnT2lCMllXeDFaVHRjYmlBZ0lDQnBaaUFvSVdselRXRndLSE52ZFhKalpTa3BYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25UV1Z5WjJVZ2MyOTFjbU5sY3lCdGRYTjBJR0psSUcxaGNITWdiM0lnYldGd0lHRnNhV0Z6WlhNbktUdGNiaUFnSUNCamIyNXpkQ0J6Y21OTllYQWdQU0J6YjNWeVkyVXVkRzlLVTA5T0tHNTFiR3dzSUdOMGVDd2dUV0Z3S1R0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUZ0clpYa3NJSFpoYkhWbFhTQnZaaUJ6Y21OTllYQXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHMWhjQ0JwYm5OMFlXNWpaVzltSUUxaGNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0Z0WVhBdWFHRnpLR3RsZVNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JXRndMbk5sZENoclpYa3NJSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2h0WVhBZ2FXNXpkR0Z1WTJWdlppQlRaWFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzFoY0M1aFpHUW9hMlY1S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDZ2hUMkpxWldOMExuQnliM1J2ZEhsd1pTNW9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLRzFoY0N3Z2EyVjVLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0cxaGNDd2dhMlY1TENCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnNkV1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZDNKcGRHRmliR1U2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaVzUxYldWeVlXSnNaVG9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjVtYVdkMWNtRmliR1U2SUhSeWRXVmNiaUFnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ0WVhBN1hHNTlYRzVjYm1WNGNHOXlkQ0I3SUdGa1pFMWxjbWRsVkc5S1UwMWhjQ3dnYVhOTlpYSm5aVXRsZVN3Z2JXVnlaMlVnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUIzWVhKdUlIMGdabkp2YlNBbkxpNHZiRzluTG1wekp6dGNibWx0Y0c5eWRDQjdJR2x6VFdWeVoyVkxaWGtzSUdGa1pFMWxjbWRsVkc5S1UwMWhjQ0I5SUdaeWIyMGdKeTR1TDNOamFHVnRZUzk1WVcxc0xURXVNUzl0WlhKblpTNXFjeWM3WEc1cGJYQnZjblFnZXlCamNtVmhkR1ZUZEhKcGJtZHBabmxEYjI1MFpYaDBJSDBnWm5KdmJTQW5MaTR2YzNSeWFXNW5hV1o1TDNOMGNtbHVaMmxtZVM1cWN5YzdYRzVwYlhCdmNuUWdleUJwYzA1dlpHVWdmU0JtY205dElDY3VMMmxrWlc1MGFYUjVMbXB6Snp0Y2JtbHRjRzl5ZENCN0lIUnZTbE1nZlNCbWNtOXRJQ2N1TDNSdlNsTXVhbk1uTzF4dVhHNW1kVzVqZEdsdmJpQmhaR1JRWVdseVZHOUtVMDFoY0NoamRIZ3NJRzFoY0N3Z2V5QnJaWGtzSUhaaGJIVmxJSDBwSUh0Y2JpQWdJQ0JwWmlBb2FYTk9iMlJsS0d0bGVTa2dKaVlnYTJWNUxtRmtaRlJ2U2xOTllYQXBYRzRnSUNBZ0lDQWdJR3RsZVM1aFpHUlViMHBUVFdGd0tHTjBlQ3dnYldGd0xDQjJZV3gxWlNrN1hHNGdJQ0FnTHk4Z1ZFOUVUem9nVTJodmRXeGtJR1J5YjNBZ2RHaHBjeUJ6Y0dWamFXRnNJR05oYzJVZ1ptOXlJR0poY21VZ1BEd2dhR0Z1Wkd4cGJtZGNiaUFnSUNCbGJITmxJR2xtSUNocGMwMWxjbWRsUzJWNUtHTjBlQ3dnYTJWNUtTbGNiaUFnSUNBZ0lDQWdZV1JrVFdWeVoyVlViMHBUVFdGd0tHTjBlQ3dnYldGd0xDQjJZV3gxWlNrN1hHNGdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHcHpTMlY1SUQwZ2RHOUtVeWhyWlhrc0lDY25MQ0JqZEhncE8xeHVJQ0FnSUNBZ0lDQnBaaUFvYldGd0lHbHVjM1JoYm1ObGIyWWdUV0Z3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WVhBdWMyVjBLR3B6UzJWNUxDQjBiMHBUS0haaGJIVmxMQ0JxYzB0bGVTd2dZM1I0S1NrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9iV0Z3SUdsdWMzUmhibU5sYjJZZ1UyVjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnRZWEF1WVdSa0tHcHpTMlY1S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElITjBjbWx1WjB0bGVTQTlJSE4wY21sdVoybG1lVXRsZVNoclpYa3NJR3B6UzJWNUxDQmpkSGdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2FuTldZV3gxWlNBOUlIUnZTbE1vZG1Gc2RXVXNJSE4wY21sdVowdGxlU3dnWTNSNEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHpkSEpwYm1kTFpYa2dhVzRnYldGd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2h0WVhBc0lITjBjbWx1WjB0bGVTd2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaVG9nYW5OV1lXeDFaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2QzSnBkR0ZpYkdVNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnVkVzFsY21GaWJHVTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym1acFozVnlZV0pzWlRvZ2RISjFaVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUcxaGNGdHpkSEpwYm1kTFpYbGRJRDBnYW5OV1lXeDFaVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JXRndPMXh1ZlZ4dVpuVnVZM1JwYjI0Z2MzUnlhVzVuYVdaNVMyVjVLR3RsZVN3Z2FuTkxaWGtzSUdOMGVDa2dlMXh1SUNBZ0lHbG1JQ2hxYzB0bGVTQTlQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlDY25PMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdhbk5MWlhrZ0lUMDlJQ2R2WW1wbFkzUW5LVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdVM1J5YVc1bktHcHpTMlY1S1R0Y2JpQWdJQ0JwWmlBb2FYTk9iMlJsS0d0bGVTa2dKaVlnWTNSNFB5NWtiMk1wSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSeVEzUjRJRDBnWTNKbFlYUmxVM1J5YVc1bmFXWjVRMjl1ZEdWNGRDaGpkSGd1Wkc5akxDQjdmU2s3WEc0Z0lDQWdJQ0FnSUhOMGNrTjBlQzVoYm1Ob2IzSnpJRDBnYm1WM0lGTmxkQ2dwTzF4dUlDQWdJQ0FnSUNCbWIzSWdLR052Ym5OMElHNXZaR1VnYjJZZ1kzUjRMbUZ1WTJodmNuTXVhMlY1Y3lncEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSeVEzUjRMbUZ1WTJodmNuTXVZV1JrS0c1dlpHVXVZVzVqYUc5eUtUdGNiaUFnSUNBZ0lDQWdjM1J5UTNSNExtbHVSbXh2ZHlBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUhOMGNrTjBlQzVwYmxOMGNtbHVaMmxtZVV0bGVTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhOMGNrdGxlU0E5SUd0bGVTNTBiMU4wY21sdVp5aHpkSEpEZEhncE8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVdOMGVDNXRZWEJMWlhsWFlYSnVaV1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCcWMyOXVVM1J5SUQwZ1NsTlBUaTV6ZEhKcGJtZHBabmtvYzNSeVMyVjVLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hxYzI5dVUzUnlMbXhsYm1kMGFDQStJRFF3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdwemIyNVRkSElnUFNCcWMyOXVVM1J5TG5OMVluTjBjbWx1Wnlnd0xDQXpOaWtnS3lBbkxpNHVYQ0luTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkMkZ5YmloamRIZ3VaRzlqTG05d2RHbHZibk11Ykc5blRHVjJaV3dzSUdCTFpYbHpJSGRwZEdnZ1kyOXNiR1ZqZEdsdmJpQjJZV3gxWlhNZ2QybHNiQ0JpWlNCemRISnBibWRwWm1sbFpDQmtkV1VnZEc4Z1NsTWdUMkpxWldOMElISmxjM1J5YVdOMGFXOXVjem9nSkh0cWMyOXVVM1J5ZlM0Z1UyVjBJRzFoY0VGelRXRndPaUIwY25WbElIUnZJSFZ6WlNCdlltcGxZM1FnYTJWNWN5NWdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTjBlQzV0WVhCTFpYbFhZWEp1WldRZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCemRISkxaWGs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCS1UwOU9Mbk4wY21sdVoybG1lU2hxYzB0bGVTazdYRzU5WEc1Y2JtVjRjRzl5ZENCN0lHRmtaRkJoYVhKVWIwcFRUV0Z3SUgwN1hHNGlMQ0FpYVcxd2IzSjBJSHNnWTNKbFlYUmxUbTlrWlNCOUlHWnliMjBnSnk0dUwyUnZZeTlqY21WaGRHVk9iMlJsTG1wekp6dGNibWx0Y0c5eWRDQjdJSE4wY21sdVoybG1lVkJoYVhJZ2ZTQm1jbTl0SUNjdUxpOXpkSEpwYm1kcFpua3ZjM1J5YVc1bmFXWjVVR0ZwY2k1cWN5YzdYRzVwYlhCdmNuUWdleUJoWkdSUVlXbHlWRzlLVTAxaGNDQjlJR1p5YjIwZ0p5NHZZV1JrVUdGcGNsUnZTbE5OWVhBdWFuTW5PMXh1YVcxd2IzSjBJSHNnVGs5RVJWOVVXVkJGTENCUVFVbFNMQ0JwYzA1dlpHVWdmU0JtY205dElDY3VMMmxrWlc1MGFYUjVMbXB6Snp0Y2JseHVablZ1WTNScGIyNGdZM0psWVhSbFVHRnBjaWhyWlhrc0lIWmhiSFZsTENCamRIZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCcklEMGdZM0psWVhSbFRtOWtaU2hyWlhrc0lIVnVaR1ZtYVc1bFpDd2dZM1I0S1R0Y2JpQWdJQ0JqYjI1emRDQjJJRDBnWTNKbFlYUmxUbTlrWlNoMllXeDFaU3dnZFc1a1pXWnBibVZrTENCamRIZ3BPMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVR0ZwY2lockxDQjJLVHRjYm4xY2JtTnNZWE56SUZCaGFYSWdlMXh1SUNBZ0lHTnZibk4wY25WamRHOXlLR3RsZVN3Z2RtRnNkV1VnUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBhR2x6TENCT1QwUkZYMVJaVUVVc0lIc2dkbUZzZFdVNklGQkJTVklnZlNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YTJWNUlEMGdhMlY1TzF4dUlDQWdJQ0FnSUNCMGFHbHpMblpoYkhWbElEMGdkbUZzZFdVN1hHNGdJQ0FnZlZ4dUlDQWdJR05zYjI1bEtITmphR1Z0WVNrZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnZXlCclpYa3NJSFpoYkhWbElIMGdQU0IwYUdsek8xeHVJQ0FnSUNBZ0lDQnBaaUFvYVhOT2IyUmxLR3RsZVNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JyWlhrZ1BTQnJaWGt1WTJ4dmJtVW9jMk5vWlcxaEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0dselRtOWtaU2gyWVd4MVpTa3BYRzRnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaU0E5SUhaaGJIVmxMbU5zYjI1bEtITmphR1Z0WVNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dVR0ZwY2loclpYa3NJSFpoYkhWbEtUdGNiaUFnSUNCOVhHNGdJQ0FnZEc5S1UwOU9LRjhzSUdOMGVDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndZV2x5SUQwZ1kzUjRQeTV0WVhCQmMwMWhjQ0EvSUc1bGR5Qk5ZWEFvS1NBNklIdDlPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZV1JrVUdGcGNsUnZTbE5OWVhBb1kzUjRMQ0J3WVdseUxDQjBhR2x6S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkRzlUZEhKcGJtY29ZM1I0TENCdmJrTnZiVzFsYm5Rc0lHOXVRMmh2YlhCTFpXVndLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJqZEhnL0xtUnZZMXh1SUNBZ0lDQWdJQ0FnSUNBZ1B5QnpkSEpwYm1kcFpubFFZV2x5S0hSb2FYTXNJR04wZUN3Z2IyNURiMjF0Wlc1MExDQnZia05vYjIxd1MyVmxjQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lEb2dTbE5QVGk1emRISnBibWRwWm5rb2RHaHBjeWs3WEc0Z0lDQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2V5QlFZV2x5TENCamNtVmhkR1ZRWVdseUlIMDdYRzRpTENBaWFXMXdiM0owSUhzZ2FYTk9iMlJsTENCcGMxQmhhWElnZlNCbWNtOXRJQ2N1TGk5dWIyUmxjeTlwWkdWdWRHbDBlUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnpkSEpwYm1kcFpua2dmU0JtY205dElDY3VMM04wY21sdVoybG1lUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnNhVzVsUTI5dGJXVnVkQ3dnYVc1a1pXNTBRMjl0YldWdWRDQjlJR1p5YjIwZ0p5NHZjM1J5YVc1bmFXWjVRMjl0YldWdWRDNXFjeWM3WEc1Y2JtWjFibU4wYVc5dUlITjBjbWx1WjJsbWVVTnZiR3hsWTNScGIyNG9ZMjlzYkdWamRHbHZiaXdnWTNSNExDQnZjSFJwYjI1ektTQjdYRzRnSUNBZ1kyOXVjM1FnWm14dmR5QTlJR04wZUM1cGJrWnNiM2NnUHo4Z1kyOXNiR1ZqZEdsdmJpNW1iRzkzTzF4dUlDQWdJR052Ym5OMElITjBjbWx1WjJsbWVTQTlJR1pzYjNjZ1B5QnpkSEpwYm1kcFpubEdiRzkzUTI5c2JHVmpkR2x2YmlBNklITjBjbWx1WjJsbWVVSnNiMk5yUTI5c2JHVmpkR2x2Ymp0Y2JpQWdJQ0J5WlhSMWNtNGdjM1J5YVc1bmFXWjVLR052Ykd4bFkzUnBiMjRzSUdOMGVDd2diM0IwYVc5dWN5azdYRzU5WEc1bWRXNWpkR2x2YmlCemRISnBibWRwWm5sQ2JHOWphME52Ykd4bFkzUnBiMjRvZXlCamIyMXRaVzUwTENCcGRHVnRjeUI5TENCamRIZ3NJSHNnWW14dlkydEpkR1Z0VUhKbFptbDRMQ0JtYkc5M1EyaGhjbk1zSUdsMFpXMUpibVJsYm5Rc0lHOXVRMmh2YlhCTFpXVndMQ0J2YmtOdmJXMWxiblFnZlNrZ2UxeHVJQ0FnSUdOdmJuTjBJSHNnYVc1a1pXNTBMQ0J2Y0hScGIyNXpPaUI3SUdOdmJXMWxiblJUZEhKcGJtY2dmU0I5SUQwZ1kzUjRPMXh1SUNBZ0lHTnZibk4wSUdsMFpXMURkSGdnUFNCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCamRIZ3NJSHNnYVc1a1pXNTBPaUJwZEdWdFNXNWtaVzUwTENCMGVYQmxPaUJ1ZFd4c0lIMHBPMXh1SUNBZ0lHeGxkQ0JqYUc5dGNFdGxaWEFnUFNCbVlXeHpaVHNnTHk4Z1pteGhaeUJtYjNJZ2RHaGxJSEJ5WldObFpHbHVaeUJ1YjJSbEozTWdjM1JoZEhWelhHNGdJQ0FnWTI5dWMzUWdiR2x1WlhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR2wwWlcxekxteGxibWQwYURzZ0t5dHBLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2wwWlcwZ1BTQnBkR1Z0YzF0cFhUdGNiaUFnSUNBZ0lDQWdiR1YwSUdOdmJXMWxiblFnUFNCdWRXeHNPMXh1SUNBZ0lDQWdJQ0JwWmlBb2FYTk9iMlJsS0dsMFpXMHBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdOb2IyMXdTMlZsY0NBbUppQnBkR1Z0TG5Od1lXTmxRbVZtYjNKbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHBibVZ6TG5CMWMyZ29KeWNwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZV1JrUTI5dGJXVnVkRUpsWm05eVpTaGpkSGdzSUd4cGJtVnpMQ0JwZEdWdExtTnZiVzFsYm5SQ1pXWnZjbVVzSUdOb2IyMXdTMlZsY0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FYUmxiUzVqYjIxdFpXNTBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052YlcxbGJuUWdQU0JwZEdWdExtTnZiVzFsYm5RN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9hWE5RWVdseUtHbDBaVzBwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnBheUE5SUdselRtOWtaU2hwZEdWdExtdGxlU2tnUHlCcGRHVnRMbXRsZVNBNklHNTFiR3c3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVdzcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdOb2IyMXdTMlZsY0NBbUppQnBheTV6Y0dGalpVSmxabTl5WlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR2x1WlhNdWNIVnphQ2duSnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1lXUmtRMjl0YldWdWRFSmxabTl5WlNoamRIZ3NJR3hwYm1WekxDQnBheTVqYjIxdFpXNTBRbVZtYjNKbExDQmphRzl0Y0V0bFpYQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR05vYjIxd1MyVmxjQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0JzWlhRZ2MzUnlJRDBnYzNSeWFXNW5hV1o1S0dsMFpXMHNJR2wwWlcxRGRIZ3NJQ2dwSUQwK0lDaGpiMjF0Wlc1MElEMGdiblZzYkNrc0lDZ3BJRDArSUNoamFHOXRjRXRsWlhBZ1BTQjBjblZsS1NrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjIxdFpXNTBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2MzUnlJQ3M5SUd4cGJtVkRiMjF0Wlc1MEtITjBjaXdnYVhSbGJVbHVaR1Z1ZEN3Z1kyOXRiV1Z1ZEZOMGNtbHVaeWhqYjIxdFpXNTBLU2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaGphRzl0Y0V0bFpYQWdKaVlnWTI5dGJXVnVkQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lHTm9iMjF3UzJWbGNDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQnNhVzVsY3k1d2RYTm9LR0pzYjJOclNYUmxiVkJ5WldacGVDQXJJSE4wY2lrN1hHNGdJQ0FnZlZ4dUlDQWdJR3hsZENCemRISTdYRzRnSUNBZ2FXWWdLR3hwYm1WekxteGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNCemRISWdQU0JtYkc5M1EyaGhjbk11YzNSaGNuUWdLeUJtYkc5M1EyaGhjbk11Wlc1a08xeHVJQ0FnSUgxY2JpQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjM1J5SUQwZ2JHbHVaWE5iTUYwN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F4T3lCcElEd2diR2x1WlhNdWJHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUd4cGJtVWdQU0JzYVc1bGMxdHBYVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITjBjaUFyUFNCc2FXNWxJRDhnWUZ4Y2JpUjdhVzVrWlc1MGZTUjdiR2x1WlgxZ0lEb2dKMXhjYmljN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHTnZiVzFsYm5RcElIdGNiaUFnSUNBZ0lDQWdjM1J5SUNzOUlDZGNYRzRuSUNzZ2FXNWtaVzUwUTI5dGJXVnVkQ2hqYjIxdFpXNTBVM1J5YVc1bktHTnZiVzFsYm5RcExDQnBibVJsYm5RcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvYjI1RGIyMXRaVzUwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdiMjVEYjIxdFpXNTBLQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHVnNjMlVnYVdZZ0tHTm9iMjF3UzJWbGNDQW1KaUJ2YmtOb2IyMXdTMlZsY0NsY2JpQWdJQ0FnSUNBZ2IyNURhRzl0Y0V0bFpYQW9LVHRjYmlBZ0lDQnlaWFIxY200Z2MzUnlPMXh1ZlZ4dVpuVnVZM1JwYjI0Z2MzUnlhVzVuYVdaNVJteHZkME52Ykd4bFkzUnBiMjRvZXlCcGRHVnRjeUI5TENCamRIZ3NJSHNnWm14dmQwTm9ZWEp6TENCcGRHVnRTVzVrWlc1MElIMHBJSHRjYmlBZ0lDQmpiMjV6ZENCN0lHbHVaR1Z1ZEN3Z2FXNWtaVzUwVTNSbGNDd2dabXh2ZDBOdmJHeGxZM1JwYjI1UVlXUmthVzVuT2lCbVkxQmhaR1JwYm1jc0lHOXdkR2x2Ym5NNklIc2dZMjl0YldWdWRGTjBjbWx1WnlCOUlIMGdQU0JqZEhnN1hHNGdJQ0FnYVhSbGJVbHVaR1Z1ZENBclBTQnBibVJsYm5SVGRHVndPMXh1SUNBZ0lHTnZibk4wSUdsMFpXMURkSGdnUFNCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCamRIZ3NJSHRjYmlBZ0lDQWdJQ0FnYVc1a1pXNTBPaUJwZEdWdFNXNWtaVzUwTEZ4dUlDQWdJQ0FnSUNCcGJrWnNiM2M2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJSFI1Y0dVNklHNTFiR3hjYmlBZ0lDQjlLVHRjYmlBZ0lDQnNaWFFnY21WeFRtVjNiR2x1WlNBOUlHWmhiSE5sTzF4dUlDQWdJR3hsZENCc2FXNWxjMEYwVm1Gc2RXVWdQU0F3TzF4dUlDQWdJR052Ym5OMElHeHBibVZ6SUQwZ1cxMDdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnBkR1Z0Y3k1c1pXNW5kR2c3SUNzcmFTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBkR1Z0SUQwZ2FYUmxiWE5iYVYwN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JqYjIxdFpXNTBJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdhV1lnS0dselRtOWtaU2hwZEdWdEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2wwWlcwdWMzQmhZMlZDWldadmNtVXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR2x1WlhNdWNIVnphQ2duSnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JoWkdSRGIyMXRaVzUwUW1WbWIzSmxLR04wZUN3Z2JHbHVaWE1zSUdsMFpXMHVZMjl0YldWdWRFSmxabTl5WlN3Z1ptRnNjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dsMFpXMHVZMjl0YldWdWRDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjF0Wlc1MElEMGdhWFJsYlM1amIyMXRaVzUwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHbHpVR0ZwY2locGRHVnRLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2FXc2dQU0JwYzA1dlpHVW9hWFJsYlM1clpYa3BJRDhnYVhSbGJTNXJaWGtnT2lCdWRXeHNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2xyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2xyTG5Od1lXTmxRbVZtYjNKbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYVc1bGN5NXdkWE5vS0NjbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhaR1JEYjIxdFpXNTBRbVZtYjNKbEtHTjBlQ3dnYkdsdVpYTXNJR2xyTG1OdmJXMWxiblJDWldadmNtVXNJR1poYkhObEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVdzdVkyOXRiV1Z1ZENsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ4VG1WM2JHbHVaU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnBkaUE5SUdselRtOWtaU2hwZEdWdExuWmhiSFZsS1NBL0lHbDBaVzB1ZG1Gc2RXVWdPaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbDJLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbDJMbU52YlcxbGJuUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJXMWxiblFnUFNCcGRpNWpiMjF0Wlc1ME8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwZGk1amIyMXRaVzUwUW1WbWIzSmxLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYRk9aWGRzYVc1bElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHbDBaVzB1ZG1Gc2RXVWdQVDBnYm5Wc2JDQW1KaUJwYXo4dVkyOXRiV1Z1ZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZiVzFsYm5RZ1BTQnBheTVqYjIxdFpXNTBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNoamIyMXRaVzUwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZ4VG1WM2JHbHVaU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJR3hsZENCemRISWdQU0J6ZEhKcGJtZHBabmtvYVhSbGJTd2dhWFJsYlVOMGVDd2dLQ2tnUFQ0Z0tHTnZiVzFsYm5RZ1BTQnVkV3hzS1NrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwSUR3Z2FYUmxiWE11YkdWdVozUm9JQzBnTVNsY2JpQWdJQ0FnSUNBZ0lDQWdJSE4wY2lBclBTQW5MQ2M3WEc0Z0lDQWdJQ0FnSUdsbUlDaGpiMjF0Wlc1MEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSeUlDczlJR3hwYm1WRGIyMXRaVzUwS0hOMGNpd2dhWFJsYlVsdVpHVnVkQ3dnWTI5dGJXVnVkRk4wY21sdVp5aGpiMjF0Wlc1MEtTazdYRzRnSUNBZ0lDQWdJR2xtSUNnaGNtVnhUbVYzYkdsdVpTQW1KaUFvYkdsdVpYTXViR1Z1WjNSb0lENGdiR2x1WlhOQmRGWmhiSFZsSUh4OElITjBjaTVwYm1Oc2RXUmxjeWduWEZ4dUp5a3BLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVnhUbVYzYkdsdVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lHeHBibVZ6TG5CMWMyZ29jM1J5S1R0Y2JpQWdJQ0FnSUNBZ2JHbHVaWE5CZEZaaGJIVmxJRDBnYkdsdVpYTXViR1Z1WjNSb08xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQjdJSE4wWVhKMExDQmxibVFnZlNBOUlHWnNiM2REYUdGeWN6dGNiaUFnSUNCcFppQW9iR2x1WlhNdWJHVnVaM1JvSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ6ZEdGeWRDQXJJR1Z1WkR0Y2JpQWdJQ0I5WEc0Z0lDQWdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doY21WeFRtVjNiR2x1WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiR1Z1SUQwZ2JHbHVaWE11Y21Wa2RXTmxLQ2h6ZFcwc0lHeHBibVVwSUQwK0lITjFiU0FySUd4cGJtVXViR1Z1WjNSb0lDc2dNaXdnTWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhGT1pYZHNhVzVsSUQwZ1kzUjRMbTl3ZEdsdmJuTXViR2x1WlZkcFpIUm9JRDRnTUNBbUppQnNaVzRnUGlCamRIZ3ViM0IwYVc5dWN5NXNhVzVsVjJsa2RHZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tISmxjVTVsZDJ4cGJtVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J6ZEhJZ1BTQnpkR0Z5ZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnYkdsdVpTQnZaaUJzYVc1bGN5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkSElnS3owZ2JHbHVaU0EvSUdCY1hHNGtlMmx1WkdWdWRGTjBaWEI5Skh0cGJtUmxiblI5Skh0c2FXNWxmV0FnT2lBblhGeHVKenRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ0pIdHpkSEo5WEZ4dUpIdHBibVJsYm5SOUpIdGxibVI5WUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdKSHR6ZEdGeWRIMGtlMlpqVUdGa1pHbHVaMzBrZTJ4cGJtVnpMbXB2YVc0b0p5QW5LWDBrZTJaalVHRmtaR2x1WjMwa2UyVnVaSDFnTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dWZWeHVablZ1WTNScGIyNGdZV1JrUTI5dGJXVnVkRUpsWm05eVpTaDdJR2x1WkdWdWRDd2diM0IwYVc5dWN6b2dleUJqYjIxdFpXNTBVM1J5YVc1bklIMGdmU3dnYkdsdVpYTXNJR052YlcxbGJuUXNJR05vYjIxd1MyVmxjQ2tnZTF4dUlDQWdJR2xtSUNoamIyMXRaVzUwSUNZbUlHTm9iMjF3UzJWbGNDbGNiaUFnSUNBZ0lDQWdZMjl0YldWdWRDQTlJR052YlcxbGJuUXVjbVZ3YkdGalpTZ3ZYbHhjYmlzdkxDQW5KeWs3WEc0Z0lDQWdhV1lnS0dOdmJXMWxiblFwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVdNZ1BTQnBibVJsYm5SRGIyMXRaVzUwS0dOdmJXMWxiblJUZEhKcGJtY29ZMjl0YldWdWRDa3NJR2x1WkdWdWRDazdYRzRnSUNBZ0lDQWdJR3hwYm1WekxuQjFjMmdvYVdNdWRISnBiVk4wWVhKMEtDa3BPeUF2THlCQmRtOXBaQ0JrYjNWaWJHVWdhVzVrWlc1MElHOXVJR1pwY25OMElHeHBibVZjYmlBZ0lDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCN0lITjBjbWx1WjJsbWVVTnZiR3hsWTNScGIyNGdmVHRjYmlJc0lDSnBiWEJ2Y25RZ2V5QnpkSEpwYm1kcFpubERiMnhzWldOMGFXOXVJSDBnWm5KdmJTQW5MaTR2YzNSeWFXNW5hV1o1TDNOMGNtbHVaMmxtZVVOdmJHeGxZM1JwYjI0dWFuTW5PMXh1YVcxd2IzSjBJSHNnWVdSa1VHRnBjbFJ2U2xOTllYQWdmU0JtY205dElDY3VMMkZrWkZCaGFYSlViMHBUVFdGd0xtcHpKenRjYm1sdGNHOXlkQ0I3SUVOdmJHeGxZM1JwYjI0Z2ZTQm1jbTl0SUNjdUwwTnZiR3hsWTNScGIyNHVhbk1uTzF4dWFXMXdiM0owSUhzZ2FYTlFZV2x5TENCcGMxTmpZV3hoY2l3Z1RVRlFJSDBnWm5KdmJTQW5MaTlwWkdWdWRHbDBlUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QlFZV2x5TENCamNtVmhkR1ZRWVdseUlIMGdabkp2YlNBbkxpOVFZV2x5TG1wekp6dGNibWx0Y0c5eWRDQjdJR2x6VTJOaGJHRnlWbUZzZFdVZ2ZTQm1jbTl0SUNjdUwxTmpZV3hoY2k1cWN5YzdYRzVjYm1aMWJtTjBhVzl1SUdacGJtUlFZV2x5S0dsMFpXMXpMQ0JyWlhrcElIdGNiaUFnSUNCamIyNXpkQ0JySUQwZ2FYTlRZMkZzWVhJb2EyVjVLU0EvSUd0bGVTNTJZV3gxWlNBNklHdGxlVHRjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJR2wwSUc5bUlHbDBaVzF6S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwYzFCaGFYSW9hWFFwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FYUXVhMlY1SUQwOVBTQnJaWGtnZkh3Z2FYUXVhMlY1SUQwOVBTQnJLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnBkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwYzFOallXeGhjaWhwZEM1clpYa3BJQ1ltSUdsMExtdGxlUzUyWVd4MVpTQTlQVDBnYXlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYVhRN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjYm4xY2JtTnNZWE56SUZsQlRVeE5ZWEFnWlhoMFpXNWtjeUJEYjJ4c1pXTjBhVzl1SUh0Y2JpQWdJQ0J6ZEdGMGFXTWdaMlYwSUhSaFowNWhiV1VvS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlBbmRHRm5PbmxoYld3dWIzSm5MREl3TURJNmJXRndKenRjYmlBZ0lDQjlYRzRnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9jMk5vWlcxaEtTQjdYRzRnSUNBZ0lDQWdJSE4xY0dWeUtFMUJVQ3dnYzJOb1pXMWhLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXBkR1Z0Y3lBOUlGdGRPMXh1SUNBZ0lIMWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkJJR2RsYm1WeWFXTWdZMjlzYkdWamRHbHZiaUJ3WVhKemFXNW5JRzFsZEdodlpDQjBhR0YwSUdOaGJpQmlaU0JsZUhSbGJtUmxaRnh1SUNBZ0lDQXFJSFJ2SUc5MGFHVnlJRzV2WkdVZ1kyeGhjM05sY3lCMGFHRjBJR2x1YUdWeWFYUWdabkp2YlNCWlFVMU1UV0Z3WEc0Z0lDQWdJQ292WEc0Z0lDQWdjM1JoZEdsaklHWnliMjBvYzJOb1pXMWhMQ0J2WW1vc0lHTjBlQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3SUd0bFpYQlZibVJsWm1sdVpXUXNJSEpsY0d4aFkyVnlJSDBnUFNCamRIZzdYRzRnSUNBZ0lDQWdJR052Ym5OMElHMWhjQ0E5SUc1bGR5QjBhR2x6S0hOamFHVnRZU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0ZrWkNBOUlDaHJaWGtzSUhaaGJIVmxLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhKbGNHeGhZMlZ5SUQwOVBTQW5ablZ1WTNScGIyNG5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbElEMGdjbVZ3YkdGalpYSXVZMkZzYkNodlltb3NJR3RsZVN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9RWEp5WVhrdWFYTkJjbkpoZVNoeVpYQnNZV05sY2lrZ0ppWWdJWEpsY0d4aFkyVnlMbWx1WTJ4MVpHVnpLR3RsZVNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0haaGJIVmxJQ0U5UFNCMWJtUmxabWx1WldRZ2ZId2dhMlZsY0ZWdVpHVm1hVzVsWkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdFlYQXVhWFJsYlhNdWNIVnphQ2hqY21WaGRHVlFZV2x5S0d0bGVTd2dkbUZzZFdVc0lHTjBlQ2twTzF4dUlDQWdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ0lDQnBaaUFvYjJKcUlHbHVjM1JoYm1ObGIyWWdUV0Z3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUZ0clpYa3NJSFpoYkhWbFhTQnZaaUJ2WW1vcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1lXUmtLR3RsZVN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHOWlhaUFtSmlCMGVYQmxiMllnYjJKcUlEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0JyWlhrZ2IyWWdUMkpxWldOMExtdGxlWE1vYjJKcUtTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhaR1FvYTJWNUxDQnZZbXBiYTJWNVhTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCelkyaGxiV0V1YzI5eWRFMWhjRVZ1ZEhKcFpYTWdQVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUcxaGNDNXBkR1Z0Y3k1emIzSjBLSE5qYUdWdFlTNXpiM0owVFdGd1JXNTBjbWxsY3lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHMWhjRHRjYmlBZ0lDQjlYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dRV1JrY3lCaElIWmhiSFZsSUhSdklIUm9aU0JqYjJ4c1pXTjBhVzl1TGx4dUlDQWdJQ0FxWEc0Z0lDQWdJQ29nUUhCaGNtRnRJRzkyWlhKM2NtbDBaU0F0SUVsbUlHNXZkQ0J6WlhRZ1lIUnlkV1ZnTENCMWMybHVaeUJoSUd0bGVTQjBhR0YwSUdseklHRnNjbVZoWkhrZ2FXNGdkR2hsWEc0Z0lDQWdJQ29nSUNCamIyeHNaV04wYVc5dUlIZHBiR3dnZEdoeWIzY3VJRTkwYUdWeWQybHpaU3dnYjNabGNuZHlhWFJsY3lCMGFHVWdjSEpsZG1sdmRYTWdkbUZzZFdVdVhHNGdJQ0FnSUNvdlhHNGdJQ0FnWVdSa0tIQmhhWElzSUc5MlpYSjNjbWwwWlNrZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnWDNCaGFYSTdYRzRnSUNBZ0lDQWdJR2xtSUNocGMxQmhhWElvY0dGcGNpa3BYRzRnSUNBZ0lDQWdJQ0FnSUNCZmNHRnBjaUE5SUhCaGFYSTdYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLQ0Z3WVdseUlIeDhJSFI1Y0dWdlppQndZV2x5SUNFOVBTQW5iMkpxWldOMEp5QjhmQ0FoS0NkclpYa25JR2x1SUhCaGFYSXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJKYmlCVWVYQmxVMk55YVhCMExDQjBhR2x6SUc1bGRtVnlJR2hoY0hCbGJuTXVYRzRnSUNBZ0lDQWdJQ0FnSUNCZmNHRnBjaUE5SUc1bGR5QlFZV2x5S0hCaGFYSXNJSEJoYVhJL0xuWmhiSFZsS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQmZjR0ZwY2lBOUlHNWxkeUJRWVdseUtIQmhhWEl1YTJWNUxDQndZV2x5TG5aaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjSEpsZGlBOUlHWnBibVJRWVdseUtIUm9hWE11YVhSbGJYTXNJRjl3WVdseUxtdGxlU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSE52Y25SRmJuUnlhV1Z6SUQwZ2RHaHBjeTV6WTJobGJXRS9Mbk52Y25STllYQkZiblJ5YVdWek8xeHVJQ0FnSUNBZ0lDQnBaaUFvY0hKbGRpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0Z2ZG1WeWQzSnBkR1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JMWlhrZ0pIdGZjR0ZwY2k1clpYbDlJR0ZzY21WaFpIa2djMlYwWUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCR2IzSWdjMk5oYkdGeWN5d2dhMlZsY0NCMGFHVWdiMnhrSUc1dlpHVWdKaUJwZEhNZ1kyOXRiV1Z1ZEhNZ1lXNWtJR0Z1WTJodmNuTmNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBjMU5qWVd4aGNpaHdjbVYyTG5aaGJIVmxLU0FtSmlCcGMxTmpZV3hoY2xaaGJIVmxLRjl3WVdseUxuWmhiSFZsS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2NtVjJMblpoYkhWbExuWmhiSFZsSUQwZ1gzQmhhWEl1ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEpsZGk1MllXeDFaU0E5SUY5d1lXbHlMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLSE52Y25SRmJuUnlhV1Z6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnBJRDBnZEdocGN5NXBkR1Z0Y3k1bWFXNWtTVzVrWlhnb2FYUmxiU0E5UGlCemIzSjBSVzUwY21sbGN5aGZjR0ZwY2l3Z2FYUmxiU2tnUENBd0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBJRDA5UFNBdE1TbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1sMFpXMXpMbkIxYzJnb1gzQmhhWElwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhWFJsYlhNdWMzQnNhV05sS0drc0lEQXNJRjl3WVdseUtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhWFJsYlhNdWNIVnphQ2hmY0dGcGNpazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ1pHVnNaWFJsS0d0bGVTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBkQ0E5SUdacGJtUlFZV2x5S0hSb2FYTXVhWFJsYlhNc0lHdGxlU2s3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hhWFFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JsYkNBOUlIUm9hWE11YVhSbGJYTXVjM0JzYVdObEtIUm9hWE11YVhSbGJYTXVhVzVrWlhoUFppaHBkQ2tzSURFcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1pHVnNMbXhsYm1kMGFDQStJREE3WEc0Z0lDQWdmVnh1SUNBZ0lHZGxkQ2hyWlhrc0lHdGxaWEJUWTJGc1lYSXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhWFFnUFNCbWFXNWtVR0ZwY2loMGFHbHpMbWwwWlcxekxDQnJaWGtwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J1YjJSbElEMGdhWFEvTG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdLQ0ZyWldWd1UyTmhiR0Z5SUNZbUlHbHpVMk5oYkdGeUtHNXZaR1VwSUQ4Z2JtOWtaUzUyWVd4MVpTQTZJRzV2WkdVcElEOC9JSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQjlYRzRnSUNBZ2FHRnpLR3RsZVNrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z0lTRm1hVzVrVUdGcGNpaDBhR2x6TG1sMFpXMXpMQ0JyWlhrcE8xeHVJQ0FnSUgxY2JpQWdJQ0J6WlhRb2EyVjVMQ0IyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtRmtaQ2h1WlhjZ1VHRnBjaWhyWlhrc0lIWmhiSFZsS1N3Z2RISjFaU2s3WEc0Z0lDQWdmVnh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQmpkSGdnTFNCRGIyNTJaWEp6YVc5dUlHTnZiblJsZUhRc0lHOXlhV2RwYm1Gc2JIa2djMlYwSUdsdUlFUnZZM1Z0Wlc1MEkzUnZTbE1vS1Z4dUlDQWdJQ0FxSUVCd1lYSmhiU0I3UTJ4aGMzTjlJRlI1Y0dVZ0xTQkpaaUJ6WlhRc0lHWnZjbU5sY3lCMGFHVWdjbVYwZFhKdVpXUWdZMjlzYkdWamRHbHZiaUIwZVhCbFhHNGdJQ0FnSUNvZ1FISmxkSFZ5Ym5NZ1NXNXpkR0Z1WTJVZ2IyWWdWSGx3WlN3Z1RXRndMQ0J2Y2lCUFltcGxZM1JjYmlBZ0lDQWdLaTljYmlBZ0lDQjBiMHBUVDA0b1h5d2dZM1I0TENCVWVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzFoY0NBOUlGUjVjR1VnUHlCdVpYY2dWSGx3WlNncElEb2dZM1I0UHk1dFlYQkJjMDFoY0NBL0lHNWxkeUJOWVhBb0tTQTZJSHQ5TzF4dUlDQWdJQ0FnSUNCcFppQW9ZM1I0UHk1dmJrTnlaV0YwWlNsY2JpQWdJQ0FnSUNBZ0lDQWdJR04wZUM1dmJrTnlaV0YwWlNodFlYQXBPMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUdsMFpXMGdiMllnZEdocGN5NXBkR1Z0Y3lsY2JpQWdJQ0FnSUNBZ0lDQWdJR0ZrWkZCaGFYSlViMHBUVFdGd0tHTjBlQ3dnYldGd0xDQnBkR1Z0S1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUcxaGNEdGNiaUFnSUNCOVhHNGdJQ0FnZEc5VGRISnBibWNvWTNSNExDQnZia052YlcxbGJuUXNJRzl1UTJodmJYQkxaV1Z3S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doWTNSNEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRXBUVDA0dWMzUnlhVzVuYVdaNUtIUm9hWE1wTzF4dUlDQWdJQ0FnSUNCbWIzSWdLR052Ym5OMElHbDBaVzBnYjJZZ2RHaHBjeTVwZEdWdGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0ZwYzFCaGFYSW9hWFJsYlNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCTllYQWdhWFJsYlhNZ2JYVnpkQ0JoYkd3Z1ltVWdjR0ZwY25NN0lHWnZkVzVrSUNSN1NsTlBUaTV6ZEhKcGJtZHBabmtvYVhSbGJTbDlJR2x1YzNSbFlXUmdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppQW9JV04wZUM1aGJHeE9kV3hzVm1Gc2RXVnpJQ1ltSUhSb2FYTXVhR0Z6UVd4c1RuVnNiRlpoYkhWbGN5aG1ZV3h6WlNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JqZEhnZ1BTQlBZbXBsWTNRdVlYTnphV2R1S0h0OUxDQmpkSGdzSUhzZ1lXeHNUblZzYkZaaGJIVmxjem9nZEhKMVpTQjlLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE4wY21sdVoybG1lVU52Ykd4bFkzUnBiMjRvZEdocGN5d2dZM1I0TENCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpYkc5amEwbDBaVzFRY21WbWFYZzZJQ2NuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdabXh2ZDBOb1lYSnpPaUI3SUhOMFlYSjBPaUFuZXljc0lHVnVaRG9nSjMwbklIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCcGRHVnRTVzVrWlc1ME9pQmpkSGd1YVc1a1pXNTBJSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnYjI1RGFHOXRjRXRsWlhBc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2YmtOdmJXMWxiblJjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdleUJaUVUxTVRXRndMQ0JtYVc1a1VHRnBjaUI5TzF4dUlpd2dJbWx0Y0c5eWRDQjdJR2x6VFdGd0lIMGdabkp2YlNBbkxpNHZMaTR2Ym05a1pYTXZhV1JsYm5ScGRIa3Vhbk1uTzF4dWFXMXdiM0owSUhzZ1dVRk5URTFoY0NCOUlHWnliMjBnSnk0dUx5NHVMMjV2WkdWekwxbEJUVXhOWVhBdWFuTW5PMXh1WEc1amIyNXpkQ0J0WVhBZ1BTQjdYRzRnSUNBZ1kyOXNiR1ZqZEdsdmJqb2dKMjFoY0Njc1hHNGdJQ0FnWkdWbVlYVnNkRG9nZEhKMVpTeGNiaUFnSUNCdWIyUmxRMnhoYzNNNklGbEJUVXhOWVhBc1hHNGdJQ0FnZEdGbk9pQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZiV0Z3Snl4Y2JpQWdJQ0J5WlhOdmJIWmxLRzFoY0N3Z2IyNUZjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVdselRXRndLRzFoY0NrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLQ2RGZUhCbFkzUmxaQ0JoSUcxaGNIQnBibWNnWm05eUlIUm9hWE1nZEdGbkp5azdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnRZWEE3WEc0Z0lDQWdmU3hjYmlBZ0lDQmpjbVZoZEdWT2IyUmxPaUFvYzJOb1pXMWhMQ0J2WW1vc0lHTjBlQ2tnUFQ0Z1dVRk5URTFoY0M1bWNtOXRLSE5qYUdWdFlTd2diMkpxTENCamRIZ3BYRzU5TzF4dVhHNWxlSEJ2Y25RZ2V5QnRZWEFnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJqY21WaGRHVk9iMlJsSUgwZ1puSnZiU0FuTGk0dlpHOWpMMk55WldGMFpVNXZaR1V1YW5Nbk8xeHVhVzF3YjNKMElIc2djM1J5YVc1bmFXWjVRMjlzYkdWamRHbHZiaUI5SUdaeWIyMGdKeTR1TDNOMGNtbHVaMmxtZVM5emRISnBibWRwWm5sRGIyeHNaV04wYVc5dUxtcHpKenRjYm1sdGNHOXlkQ0I3SUVOdmJHeGxZM1JwYjI0Z2ZTQm1jbTl0SUNjdUwwTnZiR3hsWTNScGIyNHVhbk1uTzF4dWFXMXdiM0owSUhzZ1UwVlJMQ0JwYzFOallXeGhjaUI5SUdaeWIyMGdKeTR2YVdSbGJuUnBkSGt1YW5Nbk8xeHVhVzF3YjNKMElIc2dhWE5UWTJGc1lYSldZV3gxWlNCOUlHWnliMjBnSnk0dlUyTmhiR0Z5TG1wekp6dGNibWx0Y0c5eWRDQjdJSFJ2U2xNZ2ZTQm1jbTl0SUNjdUwzUnZTbE11YW5Nbk8xeHVYRzVqYkdGemN5QlpRVTFNVTJWeElHVjRkR1Z1WkhNZ1EyOXNiR1ZqZEdsdmJpQjdYRzRnSUNBZ2MzUmhkR2xqSUdkbGRDQjBZV2RPWVcxbEtDa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdKM1JoWnpwNVlXMXNMbTl5Wnl3eU1EQXlPbk5sY1NjN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMGNuVmpkRzl5S0hOamFHVnRZU2tnZTF4dUlDQWdJQ0FnSUNCemRYQmxjaWhUUlZFc0lITmphR1Z0WVNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YVhSbGJYTWdQU0JiWFR0Y2JpQWdJQ0I5WEc0Z0lDQWdZV1JrS0haaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhWFJsYlhNdWNIVnphQ2gyWVd4MVpTazdYRzRnSUNBZ2ZWeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlGSmxiVzkyWlhNZ1lTQjJZV3gxWlNCbWNtOXRJSFJvWlNCamIyeHNaV04wYVc5dUxseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1lHdGxlV0FnYlhWemRDQmpiMjUwWVdsdUlHRWdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdZVzRnYVc1MFpXZGxjaUJtYjNJZ2RHaHBjeUIwYnlCemRXTmpaV1ZrTGx4dUlDQWdJQ0FxSUVsMElHMWhlU0JpWlNCM2NtRndjR1ZrSUdsdUlHRWdZRk5qWVd4aGNtQXVYRzRnSUNBZ0lDcGNiaUFnSUNBZ0tpQkFjbVYwZFhKdWN5QmdkSEoxWldBZ2FXWWdkR2hsSUdsMFpXMGdkMkZ6SUdadmRXNWtJR0Z1WkNCeVpXMXZkbVZrTGx4dUlDQWdJQ0FxTDF4dUlDQWdJR1JsYkdWMFpTaHJaWGtwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVdSNElEMGdZWE5KZEdWdFNXNWtaWGdvYTJWNUtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJwWkhnZ0lUMDlJQ2R1ZFcxaVpYSW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmtaV3dnUFNCMGFHbHpMbWwwWlcxekxuTndiR2xqWlNocFpIZ3NJREVwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWkdWc0xteGxibWQwYUNBK0lEQTdYRzRnSUNBZ2ZWeHVJQ0FnSUdkbGRDaHJaWGtzSUd0bFpYQlRZMkZzWVhJcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FXUjRJRDBnWVhOSmRHVnRTVzVrWlhnb2EyVjVLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCcFpIZ2dJVDA5SUNkdWRXMWlaWEluS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FYUWdQU0IwYUdsekxtbDBaVzF6VzJsa2VGMDdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQWhhMlZsY0ZOallXeGhjaUFtSmlCcGMxTmpZV3hoY2locGRDa2dQeUJwZEM1MllXeDFaU0E2SUdsME8xeHVJQ0FnSUgxY2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCRGFHVmphM01nYVdZZ2RHaGxJR052Ykd4bFkzUnBiMjRnYVc1amJIVmtaWE1nWVNCMllXeDFaU0IzYVhSb0lIUm9aU0JyWlhrZ1lHdGxlV0F1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJnYTJWNVlDQnRkWE4wSUdOdmJuUmhhVzRnWVNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCaGJpQnBiblJsWjJWeUlHWnZjaUIwYUdseklIUnZJSE4xWTJObFpXUXVYRzRnSUNBZ0lDb2dTWFFnYldGNUlHSmxJSGR5WVhCd1pXUWdhVzRnWVNCZ1UyTmhiR0Z5WUM1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0JvWVhNb2EyVjVLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2xrZUNBOUlHRnpTWFJsYlVsdVpHVjRLR3RsZVNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGVYQmxiMllnYVdSNElEMDlQU0FuYm5WdFltVnlKeUFtSmlCcFpIZ2dQQ0IwYUdsekxtbDBaVzF6TG14bGJtZDBhRHRjYmlBZ0lDQjlYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dVMlYwY3lCaElIWmhiSFZsSUdsdUlIUm9hWE1nWTI5c2JHVmpkR2x2Ymk0Z1JtOXlJR0FoSVhObGRHQXNJR0IyWVd4MVpXQWdibVZsWkhNZ2RHOGdZbVVnWVZ4dUlDQWdJQ0FxSUdKdmIyeGxZVzRnZEc4Z1lXUmtMM0psYlc5MlpTQjBhR1VnYVhSbGJTQm1jbTl0SUhSb1pTQnpaWFF1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJKWmlCZ2EyVjVZQ0JrYjJWeklHNXZkQ0JqYjI1MFlXbHVJR0VnY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnWVc0Z2FXNTBaV2RsY2l3Z2RHaHBjeUIzYVd4c0lIUm9jbTkzTGx4dUlDQWdJQ0FxSUVsMElHMWhlU0JpWlNCM2NtRndjR1ZrSUdsdUlHRWdZRk5qWVd4aGNtQXVYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2MyVjBLR3RsZVN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVdSNElEMGdZWE5KZEdWdFNXNWtaWGdvYTJWNUtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJwWkhnZ0lUMDlJQ2R1ZFcxaVpYSW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRmVIQmxZM1JsWkNCaElIWmhiR2xrSUdsdVpHVjRMQ0J1YjNRZ0pIdHJaWGw5TG1BcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2NtVjJJRDBnZEdocGN5NXBkR1Z0YzF0cFpIaGRPMXh1SUNBZ0lDQWdJQ0JwWmlBb2FYTlRZMkZzWVhJb2NISmxkaWtnSmlZZ2FYTlRZMkZzWVhKV1lXeDFaU2gyWVd4MVpTa3BYRzRnSUNBZ0lDQWdJQ0FnSUNCd2NtVjJMblpoYkhWbElEMGdkbUZzZFdVN1hHNGdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YVhSbGJYTmJhV1I0WFNBOUlIWmhiSFZsTzF4dUlDQWdJSDFjYmlBZ0lDQjBiMHBUVDA0b1h5d2dZM1I0S1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhObGNTQTlJRnRkTzF4dUlDQWdJQ0FnSUNCcFppQW9ZM1I0UHk1dmJrTnlaV0YwWlNsY2JpQWdJQ0FnSUNBZ0lDQWdJR04wZUM1dmJrTnlaV0YwWlNoelpYRXBPMXh1SUNBZ0lDQWdJQ0JzWlhRZ2FTQTlJREE3WEc0Z0lDQWdJQ0FnSUdadmNpQW9ZMjl1YzNRZ2FYUmxiU0J2WmlCMGFHbHpMbWwwWlcxektWeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWeExuQjFjMmdvZEc5S1V5aHBkR1Z0TENCVGRISnBibWNvYVNzcktTd2dZM1I0S1NrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCelpYRTdYRzRnSUNBZ2ZWeHVJQ0FnSUhSdlUzUnlhVzVuS0dOMGVDd2diMjVEYjIxdFpXNTBMQ0J2YmtOb2IyMXdTMlZsY0NrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVdOMGVDbGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJLVTA5T0xuTjBjbWx1WjJsbWVTaDBhR2x6S1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhOMGNtbHVaMmxtZVVOdmJHeGxZM1JwYjI0b2RHaHBjeXdnWTNSNExDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCaWJHOWphMGwwWlcxUWNtVm1hWGc2SUNjdElDY3NYRzRnSUNBZ0lDQWdJQ0FnSUNCbWJHOTNRMmhoY25NNklIc2djM1JoY25RNklDZGJKeXdnWlc1a09pQW5YU2NnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR2wwWlcxSmJtUmxiblE2SUNoamRIZ3VhVzVrWlc1MElIeDhJQ2NuS1NBcklDY2dJQ2NzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnZia05vYjIxd1MyVmxjQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHOXVRMjl0YldWdWRGeHVJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzRnSUNBZ2MzUmhkR2xqSUdaeWIyMG9jMk5vWlcxaExDQnZZbW9zSUdOMGVDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjdJSEpsY0d4aFkyVnlJSDBnUFNCamRIZzdYRzRnSUNBZ0lDQWdJR052Ym5OMElITmxjU0E5SUc1bGR5QjBhR2x6S0hOamFHVnRZU2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaHZZbW9nSmlZZ1UzbHRZbTlzTG1sMFpYSmhkRzl5SUdsdUlFOWlhbVZqZENodlltb3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYVNBOUlEQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcGRDQnZaaUJ2WW1vcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JSEpsY0d4aFkyVnlJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR3RsZVNBOUlHOWlhaUJwYm5OMFlXNWpaVzltSUZObGRDQS9JR2wwSURvZ1UzUnlhVzVuS0drckt5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsMElEMGdjbVZ3YkdGalpYSXVZMkZzYkNodlltb3NJR3RsZVN3Z2FYUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6WlhFdWFYUmxiWE11Y0hWemFDaGpjbVZoZEdWT2IyUmxLR2wwTENCMWJtUmxabWx1WldRc0lHTjBlQ2twTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ6WlhFN1hHNGdJQ0FnZlZ4dWZWeHVablZ1WTNScGIyNGdZWE5KZEdWdFNXNWtaWGdvYTJWNUtTQjdYRzRnSUNBZ2JHVjBJR2xrZUNBOUlHbHpVMk5oYkdGeUtHdGxlU2tnUHlCclpYa3VkbUZzZFdVZ09pQnJaWGs3WEc0Z0lDQWdhV1lnS0dsa2VDQW1KaUIwZVhCbGIyWWdhV1I0SUQwOVBTQW5jM1J5YVc1bkp5bGNiaUFnSUNBZ0lDQWdhV1I0SUQwZ1RuVnRZbVZ5S0dsa2VDazdYRzRnSUNBZ2NtVjBkWEp1SUhSNWNHVnZaaUJwWkhnZ1BUMDlJQ2R1ZFcxaVpYSW5JQ1ltSUU1MWJXSmxjaTVwYzBsdWRHVm5aWElvYVdSNEtTQW1KaUJwWkhnZ1BqMGdNRnh1SUNBZ0lDQWdJQ0EvSUdsa2VGeHVJQ0FnSUNBZ0lDQTZJRzUxYkd3N1hHNTlYRzVjYm1WNGNHOXlkQ0I3SUZsQlRVeFRaWEVnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJwYzFObGNTQjlJR1p5YjIwZ0p5NHVMeTR1TDI1dlpHVnpMMmxrWlc1MGFYUjVMbXB6Snp0Y2JtbHRjRzl5ZENCN0lGbEJUVXhUWlhFZ2ZTQm1jbTl0SUNjdUxpOHVMaTl1YjJSbGN5OVpRVTFNVTJWeExtcHpKenRjYmx4dVkyOXVjM1FnYzJWeElEMGdlMXh1SUNBZ0lHTnZiR3hsWTNScGIyNDZJQ2R6WlhFbkxGeHVJQ0FnSUdSbFptRjFiSFE2SUhSeWRXVXNYRzRnSUNBZ2JtOWtaVU5zWVhOek9pQlpRVTFNVTJWeExGeHVJQ0FnSUhSaFp6b2dKM1JoWnpwNVlXMXNMbTl5Wnl3eU1EQXlPbk5sY1Njc1hHNGdJQ0FnY21WemIyeDJaU2h6WlhFc0lHOXVSWEp5YjNJcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0NGcGMxTmxjU2h6WlhFcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnYjI1RmNuSnZjaWduUlhod1pXTjBaV1FnWVNCelpYRjFaVzVqWlNCbWIzSWdkR2hwY3lCMFlXY25LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE5sY1R0Y2JpQWdJQ0I5TEZ4dUlDQWdJR055WldGMFpVNXZaR1U2SUNoelkyaGxiV0VzSUc5aWFpd2dZM1I0S1NBOVBpQlpRVTFNVTJWeExtWnliMjBvYzJOb1pXMWhMQ0J2WW1vc0lHTjBlQ2xjYm4wN1hHNWNibVY0Y0c5eWRDQjdJSE5sY1NCOU8xeHVJaXdnSW1sdGNHOXlkQ0I3SUhOMGNtbHVaMmxtZVZOMGNtbHVaeUI5SUdaeWIyMGdKeTR1THk0dUwzTjBjbWx1WjJsbWVTOXpkSEpwYm1kcFpubFRkSEpwYm1jdWFuTW5PMXh1WEc1amIyNXpkQ0J6ZEhKcGJtY2dQU0I3WEc0Z0lDQWdhV1JsYm5ScFpuazZJSFpoYkhWbElEMCtJSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdKM04wY21sdVp5Y3NYRzRnSUNBZ1pHVm1ZWFZzZERvZ2RISjFaU3hjYmlBZ0lDQjBZV2M2SUNkMFlXYzZlV0Z0YkM1dmNtY3NNakF3TWpwemRISW5MRnh1SUNBZ0lISmxjMjlzZG1VNklITjBjaUE5UGlCemRISXNYRzRnSUNBZ2MzUnlhVzVuYVdaNUtHbDBaVzBzSUdOMGVDd2diMjVEYjIxdFpXNTBMQ0J2YmtOb2IyMXdTMlZsY0NrZ2UxeHVJQ0FnSUNBZ0lDQmpkSGdnUFNCUFltcGxZM1F1WVhOemFXZHVLSHNnWVdOMGRXRnNVM1J5YVc1bk9pQjBjblZsSUgwc0lHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ6ZEhKcGJtZHBabmxUZEhKcGJtY29hWFJsYlN3Z1kzUjRMQ0J2YmtOdmJXMWxiblFzSUc5dVEyaHZiWEJMWldWd0tUdGNiaUFnSUNCOVhHNTlPMXh1WEc1bGVIQnZjblFnZXlCemRISnBibWNnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJUWTJGc1lYSWdmU0JtY205dElDY3VMaTh1TGk5dWIyUmxjeTlUWTJGc1lYSXVhbk1uTzF4dVhHNWpiMjV6ZENCdWRXeHNWR0ZuSUQwZ2UxeHVJQ0FnSUdsa1pXNTBhV1o1T2lCMllXeDFaU0E5UGlCMllXeDFaU0E5UFNCdWRXeHNMRnh1SUNBZ0lHTnlaV0YwWlU1dlpHVTZJQ2dwSUQwK0lHNWxkeUJUWTJGc1lYSW9iblZzYkNrc1hHNGdJQ0FnWkdWbVlYVnNkRG9nZEhKMVpTeGNiaUFnSUNCMFlXYzZJQ2QwWVdjNmVXRnRiQzV2Y21jc01qQXdNanB1ZFd4c0p5eGNiaUFnSUNCMFpYTjBPaUF2WGlnL09uNThXMDV1WFhWc2JIeE9WVXhNS1Q4a0x5eGNiaUFnSUNCeVpYTnZiSFpsT2lBb0tTQTlQaUJ1WlhjZ1UyTmhiR0Z5S0c1MWJHd3BMRnh1SUNBZ0lITjBjbWx1WjJsbWVUb2dLSHNnYzI5MWNtTmxJSDBzSUdOMGVDa2dQVDRnZEhsd1pXOW1JSE52ZFhKalpTQTlQVDBnSjNOMGNtbHVaeWNnSmlZZ2JuVnNiRlJoWnk1MFpYTjBMblJsYzNRb2MyOTFjbU5sS1Z4dUlDQWdJQ0FnSUNBL0lITnZkWEpqWlZ4dUlDQWdJQ0FnSUNBNklHTjBlQzV2Y0hScGIyNXpMbTUxYkd4VGRISmNibjA3WEc1Y2JtVjRjRzl5ZENCN0lHNTFiR3hVWVdjZ2ZUdGNiaUlzSUNKcGJYQnZjblFnZXlCVFkyRnNZWElnZlNCbWNtOXRJQ2N1TGk4dUxpOXViMlJsY3k5VFkyRnNZWEl1YW5Nbk8xeHVYRzVqYjI1emRDQmliMjlzVkdGbklEMGdlMXh1SUNBZ0lHbGtaVzUwYVdaNU9pQjJZV3gxWlNBOVBpQjBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlDZGliMjlzWldGdUp5eGNiaUFnSUNCa1pXWmhkV3gwT2lCMGNuVmxMRnh1SUNBZ0lIUmhaem9nSjNSaFp6cDVZVzFzTG05eVp5d3lNREF5T21KdmIyd25MRnh1SUNBZ0lIUmxjM1E2SUM5ZUtEODZXMVIwWFhKMVpYeFVVbFZGZkZ0R1psMWhiSE5sZkVaQlRGTkZLU1F2TEZ4dUlDQWdJSEpsYzI5c2RtVTZJSE4wY2lBOVBpQnVaWGNnVTJOaGJHRnlLSE4wY2xzd1hTQTlQVDBnSjNRbklIeDhJSE4wY2xzd1hTQTlQVDBnSjFRbktTeGNiaUFnSUNCemRISnBibWRwWm5rb2V5QnpiM1Z5WTJVc0lIWmhiSFZsSUgwc0lHTjBlQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9jMjkxY21ObElDWW1JR0p2YjJ4VVlXY3VkR1Z6ZEM1MFpYTjBLSE52ZFhKalpTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOMklEMGdjMjkxY21ObFd6QmRJRDA5UFNBbmRDY2dmSHdnYzI5MWNtTmxXekJkSUQwOVBTQW5WQ2M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZG1Gc2RXVWdQVDA5SUhOMktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCemIzVnlZMlU3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhaaGJIVmxJRDhnWTNSNExtOXdkR2x2Ym5NdWRISjFaVk4wY2lBNklHTjBlQzV2Y0hScGIyNXpMbVpoYkhObFUzUnlPMXh1SUNBZ0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCN0lHSnZiMnhVWVdjZ2ZUdGNiaUlzSUNKbWRXNWpkR2x2YmlCemRISnBibWRwWm5sT2RXMWlaWElvZXlCbWIzSnRZWFFzSUcxcGJrWnlZV04wYVc5dVJHbG5hWFJ6TENCMFlXY3NJSFpoYkhWbElIMHBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuWW1sbmFXNTBKeWxjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRk4wY21sdVp5aDJZV3gxWlNrN1hHNGdJQ0FnWTI5dWMzUWdiblZ0SUQwZ2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBbmJuVnRZbVZ5SnlBL0lIWmhiSFZsSURvZ1RuVnRZbVZ5S0haaGJIVmxLVHRjYmlBZ0lDQnBaaUFvSVdselJtbHVhWFJsS0c1MWJTa3BYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnBjMDVoVGlodWRXMHBJRDhnSnk1dVlXNG5JRG9nYm5WdElEd2dNQ0EvSUNjdExtbHVaaWNnT2lBbkxtbHVaaWM3WEc0Z0lDQWdiR1YwSUc0Z1BTQktVMDlPTG5OMGNtbHVaMmxtZVNoMllXeDFaU2s3WEc0Z0lDQWdhV1lnS0NGbWIzSnRZWFFnSmlaY2JpQWdJQ0FnSUNBZ2JXbHVSbkpoWTNScGIyNUVhV2RwZEhNZ0ppWmNiaUFnSUNBZ0lDQWdLQ0YwWVdjZ2ZId2dkR0ZuSUQwOVBTQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZabXh2WVhRbktTQW1KbHh1SUNBZ0lDQWdJQ0F2WGx4Y1pDOHVkR1Z6ZENodUtTa2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2FTQTlJRzR1YVc1a1pYaFBaaWduTGljcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvYVNBOElEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHa2dQU0J1TG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHNGdLejBnSnk0bk8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR3hsZENCa0lEMGdiV2x1Um5KaFkzUnBiMjVFYVdkcGRITWdMU0FvYmk1c1pXNW5kR2dnTFNCcElDMGdNU2s3WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2hrTFMwZ1BpQXdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2JpQXJQU0FuTUNjN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnVPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2V5QnpkSEpwYm1kcFpubE9kVzFpWlhJZ2ZUdGNiaUlzSUNKcGJYQnZjblFnZXlCVFkyRnNZWElnZlNCbWNtOXRJQ2N1TGk4dUxpOXViMlJsY3k5VFkyRnNZWEl1YW5Nbk8xeHVhVzF3YjNKMElIc2djM1J5YVc1bmFXWjVUblZ0WW1WeUlIMGdabkp2YlNBbkxpNHZMaTR2YzNSeWFXNW5hV1o1TDNOMGNtbHVaMmxtZVU1MWJXSmxjaTVxY3ljN1hHNWNibU52Ym5OMElHWnNiMkYwVG1GT0lEMGdlMXh1SUNBZ0lHbGtaVzUwYVdaNU9pQjJZV3gxWlNBOVBpQjBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlDZHVkVzFpWlhJbkxGeHVJQ0FnSUdSbFptRjFiSFE2SUhSeWRXVXNYRzRnSUNBZ2RHRm5PaUFuZEdGbk9ubGhiV3d1YjNKbkxESXdNREk2Wm14dllYUW5MRnh1SUNBZ0lIUmxjM1E2SUM5ZUtEODZXeTByWFQ5Y1hDNG9QenBwYm1aOFNXNW1mRWxPUmlsOFhGd3VibUZ1ZkZ4Y0xrNWhUbnhjWEM1T1FVNHBKQzhzWEc0Z0lDQWdjbVZ6YjJ4MlpUb2djM1J5SUQwK0lITjBjaTV6YkdsalpTZ3RNeWt1ZEc5TWIzZGxja05oYzJVb0tTQTlQVDBnSjI1aGJpZGNiaUFnSUNBZ0lDQWdQeUJPWVU1Y2JpQWdJQ0FnSUNBZ09pQnpkSEpiTUYwZ1BUMDlJQ2N0SjF4dUlDQWdJQ0FnSUNBZ0lDQWdQeUJPZFcxaVpYSXVUa1ZIUVZSSlZrVmZTVTVHU1U1SlZGbGNiaUFnSUNBZ0lDQWdJQ0FnSURvZ1RuVnRZbVZ5TGxCUFUwbFVTVlpGWDBsT1JrbE9TVlJaTEZ4dUlDQWdJSE4wY21sdVoybG1lVG9nYzNSeWFXNW5hV1o1VG5WdFltVnlYRzU5TzF4dVkyOXVjM1FnWm14dllYUkZlSEFnUFNCN1hHNGdJQ0FnYVdSbGJuUnBabms2SUhaaGJIVmxJRDArSUhSNWNHVnZaaUIyWVd4MVpTQTlQVDBnSjI1MWJXSmxjaWNzWEc0Z0lDQWdaR1ZtWVhWc2REb2dkSEoxWlN4Y2JpQWdJQ0IwWVdjNklDZDBZV2M2ZVdGdGJDNXZjbWNzTWpBd01qcG1iRzloZENjc1hHNGdJQ0FnWm05eWJXRjBPaUFuUlZoUUp5eGNiaUFnSUNCMFpYTjBPaUF2WGxzdEsxMC9LRDg2WEZ3dVd6QXRPVjByZkZzd0xUbGRLeWcvT2x4Y0xsc3dMVGxkS2lrL0tWdGxSVjFiTFN0ZFAxc3dMVGxkS3lRdkxGeHVJQ0FnSUhKbGMyOXNkbVU2SUhOMGNpQTlQaUJ3WVhKelpVWnNiMkYwS0hOMGNpa3NYRzRnSUNBZ2MzUnlhVzVuYVdaNUtHNXZaR1VwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYm5WdElEMGdUblZ0WW1WeUtHNXZaR1V1ZG1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdhWE5HYVc1cGRHVW9iblZ0S1NBL0lHNTFiUzUwYjBWNGNHOXVaVzUwYVdGc0tDa2dPaUJ6ZEhKcGJtZHBabmxPZFcxaVpYSW9ibTlrWlNrN1hHNGdJQ0FnZlZ4dWZUdGNibU52Ym5OMElHWnNiMkYwSUQwZ2UxeHVJQ0FnSUdsa1pXNTBhV1o1T2lCMllXeDFaU0E5UGlCMGVYQmxiMllnZG1Gc2RXVWdQVDA5SUNkdWRXMWlaWEluTEZ4dUlDQWdJR1JsWm1GMWJIUTZJSFJ5ZFdVc1hHNGdJQ0FnZEdGbk9pQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZabXh2WVhRbkxGeHVJQ0FnSUhSbGMzUTZJQzllV3kwclhUOG9QenBjWEM1Yk1DMDVYU3Q4V3pBdE9WMHJYRnd1V3pBdE9WMHFLU1F2TEZ4dUlDQWdJSEpsYzI5c2RtVW9jM1J5S1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUc1dlpHVWdQU0J1WlhjZ1UyTmhiR0Z5S0hCaGNuTmxSbXh2WVhRb2MzUnlLU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1J2ZENBOUlITjBjaTVwYm1SbGVFOW1LQ2N1SnlrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hrYjNRZ0lUMDlJQzB4SUNZbUlITjBjbHR6ZEhJdWJHVnVaM1JvSUMwZ01WMGdQVDA5SUNjd0p5bGNiaUFnSUNBZ0lDQWdJQ0FnSUc1dlpHVXViV2x1Um5KaFkzUnBiMjVFYVdkcGRITWdQU0J6ZEhJdWJHVnVaM1JvSUMwZ1pHOTBJQzBnTVR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1dlpHVTdYRzRnSUNBZ2ZTeGNiaUFnSUNCemRISnBibWRwWm5rNklITjBjbWx1WjJsbWVVNTFiV0psY2x4dWZUdGNibHh1Wlhod2IzSjBJSHNnWm14dllYUXNJR1pzYjJGMFJYaHdMQ0JtYkc5aGRFNWhUaUI5TzF4dUlpd2dJbWx0Y0c5eWRDQjdJSE4wY21sdVoybG1lVTUxYldKbGNpQjlJR1p5YjIwZ0p5NHVMeTR1TDNOMGNtbHVaMmxtZVM5emRISnBibWRwWm5sT2RXMWlaWEl1YW5Nbk8xeHVYRzVqYjI1emRDQnBiblJKWkdWdWRHbG1lU0E5SUNoMllXeDFaU2tnUFQ0Z2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBblltbG5hVzUwSnlCOGZDQk9kVzFpWlhJdWFYTkpiblJsWjJWeUtIWmhiSFZsS1R0Y2JtTnZibk4wSUdsdWRGSmxjMjlzZG1VZ1BTQW9jM1J5TENCdlptWnpaWFFzSUhKaFpHbDRMQ0I3SUdsdWRFRnpRbWxuU1c1MElIMHBJRDArSUNocGJuUkJjMEpwWjBsdWRDQS9JRUpwWjBsdWRDaHpkSElwSURvZ2NHRnljMlZKYm5Rb2MzUnlMbk4xWW5OMGNtbHVaeWh2Wm1aelpYUXBMQ0J5WVdScGVDa3BPMXh1Wm5WdVkzUnBiMjRnYVc1MFUzUnlhVzVuYVdaNUtHNXZaR1VzSUhKaFpHbDRMQ0J3Y21WbWFYZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCN0lIWmhiSFZsSUgwZ1BTQnViMlJsTzF4dUlDQWdJR2xtSUNocGJuUkpaR1Z1ZEdsbWVTaDJZV3gxWlNrZ0ppWWdkbUZzZFdVZ1BqMGdNQ2xjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEJ5WldacGVDQXJJSFpoYkhWbExuUnZVM1J5YVc1bktISmhaR2w0S1R0Y2JpQWdJQ0J5WlhSMWNtNGdjM1J5YVc1bmFXWjVUblZ0WW1WeUtHNXZaR1VwTzF4dWZWeHVZMjl1YzNRZ2FXNTBUMk4wSUQwZ2UxeHVJQ0FnSUdsa1pXNTBhV1o1T2lCMllXeDFaU0E5UGlCcGJuUkpaR1Z1ZEdsbWVTaDJZV3gxWlNrZ0ppWWdkbUZzZFdVZ1BqMGdNQ3hjYmlBZ0lDQmtaV1poZFd4ME9pQjBjblZsTEZ4dUlDQWdJSFJoWnpvZ0ozUmhaenA1WVcxc0xtOXlaeXd5TURBeU9tbHVkQ2NzWEc0Z0lDQWdabTl5YldGME9pQW5UME5VSnl4Y2JpQWdJQ0IwWlhOME9pQXZYakJ2V3pBdE4xMHJKQzhzWEc0Z0lDQWdjbVZ6YjJ4MlpUb2dLSE4wY2l3Z1gyOXVSWEp5YjNJc0lHOXdkQ2tnUFQ0Z2FXNTBVbVZ6YjJ4MlpTaHpkSElzSURJc0lEZ3NJRzl3ZENrc1hHNGdJQ0FnYzNSeWFXNW5hV1o1T2lCdWIyUmxJRDArSUdsdWRGTjBjbWx1WjJsbWVTaHViMlJsTENBNExDQW5NRzhuS1Z4dWZUdGNibU52Ym5OMElHbHVkQ0E5SUh0Y2JpQWdJQ0JwWkdWdWRHbG1lVG9nYVc1MFNXUmxiblJwWm5rc1hHNGdJQ0FnWkdWbVlYVnNkRG9nZEhKMVpTeGNiaUFnSUNCMFlXYzZJQ2QwWVdjNmVXRnRiQzV2Y21jc01qQXdNanBwYm5RbkxGeHVJQ0FnSUhSbGMzUTZJQzllV3kwclhUOWJNQzA1WFNza0x5eGNiaUFnSUNCeVpYTnZiSFpsT2lBb2MzUnlMQ0JmYjI1RmNuSnZjaXdnYjNCMEtTQTlQaUJwYm5SU1pYTnZiSFpsS0hOMGNpd2dNQ3dnTVRBc0lHOXdkQ2tzWEc0Z0lDQWdjM1J5YVc1bmFXWjVPaUJ6ZEhKcGJtZHBabmxPZFcxaVpYSmNibjA3WEc1amIyNXpkQ0JwYm5SSVpYZ2dQU0I3WEc0Z0lDQWdhV1JsYm5ScFpuazZJSFpoYkhWbElEMCtJR2x1ZEVsa1pXNTBhV1o1S0haaGJIVmxLU0FtSmlCMllXeDFaU0ErUFNBd0xGeHVJQ0FnSUdSbFptRjFiSFE2SUhSeWRXVXNYRzRnSUNBZ2RHRm5PaUFuZEdGbk9ubGhiV3d1YjNKbkxESXdNREk2YVc1MEp5eGNiaUFnSUNCbWIzSnRZWFE2SUNkSVJWZ25MRnh1SUNBZ0lIUmxjM1E2SUM5ZU1IaGJNQzA1WVMxbVFTMUdYU3NrTHl4Y2JpQWdJQ0J5WlhOdmJIWmxPaUFvYzNSeUxDQmZiMjVGY25KdmNpd2diM0IwS1NBOVBpQnBiblJTWlhOdmJIWmxLSE4wY2l3Z01pd2dNVFlzSUc5d2RDa3NYRzRnSUNBZ2MzUnlhVzVuYVdaNU9pQnViMlJsSUQwK0lHbHVkRk4wY21sdVoybG1lU2h1YjJSbExDQXhOaXdnSnpCNEp5bGNibjA3WEc1Y2JtVjRjRzl5ZENCN0lHbHVkQ3dnYVc1MFNHVjRMQ0JwYm5SUFkzUWdmVHRjYmlJc0lDSnBiWEJ2Y25RZ2V5QnRZWEFnZlNCbWNtOXRJQ2N1TGk5amIyMXRiMjR2YldGd0xtcHpKenRjYm1sdGNHOXlkQ0I3SUc1MWJHeFVZV2NnZlNCbWNtOXRJQ2N1TGk5amIyMXRiMjR2Ym5Wc2JDNXFjeWM3WEc1cGJYQnZjblFnZXlCelpYRWdmU0JtY205dElDY3VMaTlqYjIxdGIyNHZjMlZ4TG1wekp6dGNibWx0Y0c5eWRDQjdJSE4wY21sdVp5QjlJR1p5YjIwZ0p5NHVMMk52YlcxdmJpOXpkSEpwYm1jdWFuTW5PMXh1YVcxd2IzSjBJSHNnWW05dmJGUmhaeUI5SUdaeWIyMGdKeTR2WW05dmJDNXFjeWM3WEc1cGJYQnZjblFnZXlCbWJHOWhkRTVoVGl3Z1pteHZZWFJGZUhBc0lHWnNiMkYwSUgwZ1puSnZiU0FuTGk5bWJHOWhkQzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnBiblJQWTNRc0lHbHVkQ3dnYVc1MFNHVjRJSDBnWm5KdmJTQW5MaTlwYm5RdWFuTW5PMXh1WEc1amIyNXpkQ0J6WTJobGJXRWdQU0JiWEc0Z0lDQWdiV0Z3TEZ4dUlDQWdJSE5sY1N4Y2JpQWdJQ0J6ZEhKcGJtY3NYRzRnSUNBZ2JuVnNiRlJoWnl4Y2JpQWdJQ0JpYjI5c1ZHRm5MRnh1SUNBZ0lHbHVkRTlqZEN4Y2JpQWdJQ0JwYm5Rc1hHNGdJQ0FnYVc1MFNHVjRMRnh1SUNBZ0lHWnNiMkYwVG1GT0xGeHVJQ0FnSUdac2IyRjBSWGh3TEZ4dUlDQWdJR1pzYjJGMFhHNWRPMXh1WEc1bGVIQnZjblFnZXlCelkyaGxiV0VnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJUWTJGc1lYSWdmU0JtY205dElDY3VMaTh1TGk5dWIyUmxjeTlUWTJGc1lYSXVhbk1uTzF4dWFXMXdiM0owSUhzZ2JXRndJSDBnWm5KdmJTQW5MaTR2WTI5dGJXOXVMMjFoY0M1cWN5YzdYRzVwYlhCdmNuUWdleUJ6WlhFZ2ZTQm1jbTl0SUNjdUxpOWpiMjF0YjI0dmMyVnhMbXB6Snp0Y2JseHVablZ1WTNScGIyNGdhVzUwU1dSbGJuUnBabmtvZG1Gc2RXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBblltbG5hVzUwSnlCOGZDQk9kVzFpWlhJdWFYTkpiblJsWjJWeUtIWmhiSFZsS1R0Y2JuMWNibU52Ym5OMElITjBjbWx1WjJsbWVVcFRUMDRnUFNBb2V5QjJZV3gxWlNCOUtTQTlQaUJLVTA5T0xuTjBjbWx1WjJsbWVTaDJZV3gxWlNrN1hHNWpiMjV6ZENCcWMyOXVVMk5oYkdGeWN5QTlJRnRjYmlBZ0lDQjdYRzRnSUNBZ0lDQWdJR2xrWlc1MGFXWjVPaUIyWVd4MVpTQTlQaUIwZVhCbGIyWWdkbUZzZFdVZ1BUMDlJQ2R6ZEhKcGJtY25MRnh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQjBZV2M2SUNkMFlXYzZlV0Z0YkM1dmNtY3NNakF3TWpwemRISW5MRnh1SUNBZ0lDQWdJQ0J5WlhOdmJIWmxPaUJ6ZEhJZ1BUNGdjM1J5TEZ4dUlDQWdJQ0FnSUNCemRISnBibWRwWm5rNklITjBjbWx1WjJsbWVVcFRUMDVjYmlBZ0lDQjlMRnh1SUNBZ0lIdGNiaUFnSUNBZ0lDQWdhV1JsYm5ScFpuazZJSFpoYkhWbElEMCtJSFpoYkhWbElEMDlJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lHTnlaV0YwWlU1dlpHVTZJQ2dwSUQwK0lHNWxkeUJUWTJGc1lYSW9iblZzYkNrc1hHNGdJQ0FnSUNBZ0lHUmxabUYxYkhRNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUhSaFp6b2dKM1JoWnpwNVlXMXNMbTl5Wnl3eU1EQXlPbTUxYkd3bkxGeHVJQ0FnSUNBZ0lDQjBaWE4wT2lBdlhtNTFiR3drTHl4Y2JpQWdJQ0FnSUNBZ2NtVnpiMngyWlRvZ0tDa2dQVDRnYm5Wc2JDeGNiaUFnSUNBZ0lDQWdjM1J5YVc1bmFXWjVPaUJ6ZEhKcGJtZHBabmxLVTA5T1hHNGdJQ0FnZlN4Y2JpQWdJQ0I3WEc0Z0lDQWdJQ0FnSUdsa1pXNTBhV1o1T2lCMllXeDFaU0E5UGlCMGVYQmxiMllnZG1Gc2RXVWdQVDA5SUNkaWIyOXNaV0Z1Snl4Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZERvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZEdGbk9pQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZZbTl2YkNjc1hHNGdJQ0FnSUNBZ0lIUmxjM1E2SUM5ZWRISjFaWHhtWVd4elpTUXZMRnh1SUNBZ0lDQWdJQ0J5WlhOdmJIWmxPaUJ6ZEhJZ1BUNGdjM1J5SUQwOVBTQW5kSEoxWlNjc1hHNGdJQ0FnSUNBZ0lITjBjbWx1WjJsbWVUb2djM1J5YVc1bmFXWjVTbE5QVGx4dUlDQWdJSDBzWEc0Z0lDQWdlMXh1SUNBZ0lDQWdJQ0JwWkdWdWRHbG1lVG9nYVc1MFNXUmxiblJwWm5rc1hHNGdJQ0FnSUNBZ0lHUmxabUYxYkhRNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUhSaFp6b2dKM1JoWnpwNVlXMXNMbTl5Wnl3eU1EQXlPbWx1ZENjc1hHNGdJQ0FnSUNBZ0lIUmxjM1E2SUM5ZUxUOG9Qem93ZkZzeExUbGRXekF0T1YwcUtTUXZMRnh1SUNBZ0lDQWdJQ0J5WlhOdmJIWmxPaUFvYzNSeUxDQmZiMjVGY25KdmNpd2dleUJwYm5SQmMwSnBaMGx1ZENCOUtTQTlQaUJwYm5SQmMwSnBaMGx1ZENBL0lFSnBaMGx1ZENoemRISXBJRG9nY0dGeWMyVkpiblFvYzNSeUxDQXhNQ2tzWEc0Z0lDQWdJQ0FnSUhOMGNtbHVaMmxtZVRvZ0tIc2dkbUZzZFdVZ2ZTa2dQVDRnYVc1MFNXUmxiblJwWm5rb2RtRnNkV1VwSUQ4Z2RtRnNkV1V1ZEc5VGRISnBibWNvS1NBNklFcFRUMDR1YzNSeWFXNW5hV1o1S0haaGJIVmxLVnh1SUNBZ0lIMHNYRzRnSUNBZ2UxeHVJQ0FnSUNBZ0lDQnBaR1Z1ZEdsbWVUb2dkbUZzZFdVZ1BUNGdkSGx3Wlc5bUlIWmhiSFZsSUQwOVBTQW5iblZ0WW1WeUp5eGNiaUFnSUNBZ0lDQWdaR1ZtWVhWc2REb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ2RHRm5PaUFuZEdGbk9ubGhiV3d1YjNKbkxESXdNREk2Wm14dllYUW5MRnh1SUNBZ0lDQWdJQ0IwWlhOME9pQXZYaTAvS0Q4Nk1IeGJNUzA1WFZzd0xUbGRLaWtvUHpwY1hDNWJNQzA1WFNvcFB5Zy9PbHRsUlYxYkxTdGRQMXN3TFRsZEt5ay9KQzhzWEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVU2SUhOMGNpQTlQaUJ3WVhKelpVWnNiMkYwS0hOMGNpa3NYRzRnSUNBZ0lDQWdJSE4wY21sdVoybG1lVG9nYzNSeWFXNW5hV1o1U2xOUFRseHVJQ0FnSUgxY2JsMDdYRzVqYjI1emRDQnFjMjl1UlhKeWIzSWdQU0I3WEc0Z0lDQWdaR1ZtWVhWc2REb2dkSEoxWlN4Y2JpQWdJQ0IwWVdjNklDY25MRnh1SUNBZ0lIUmxjM1E2SUM5ZUx5eGNiaUFnSUNCeVpYTnZiSFpsS0hOMGNpd2diMjVGY25KdmNpa2dlMXh1SUNBZ0lDQWdJQ0J2YmtWeWNtOXlLR0JWYm5KbGMyOXNkbVZrSUhCc1lXbHVJSE5qWVd4aGNpQWtlMHBUVDA0dWMzUnlhVzVuYVdaNUtITjBjaWw5WUNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCemRISTdYRzRnSUNBZ2ZWeHVmVHRjYm1OdmJuTjBJSE5qYUdWdFlTQTlJRnR0WVhBc0lITmxjVjB1WTI5dVkyRjBLR3B6YjI1VFkyRnNZWEp6TENCcWMyOXVSWEp5YjNJcE8xeHVYRzVsZUhCdmNuUWdleUJ6WTJobGJXRWdmVHRjYmlJc0lDSnBiWEJ2Y25RZ2V5QlRZMkZzWVhJZ2ZTQm1jbTl0SUNjdUxpOHVMaTl1YjJSbGN5OVRZMkZzWVhJdWFuTW5PMXh1YVcxd2IzSjBJSHNnYzNSeWFXNW5hV1o1VTNSeWFXNW5JSDBnWm5KdmJTQW5MaTR2TGk0dmMzUnlhVzVuYVdaNUwzTjBjbWx1WjJsbWVWTjBjbWx1Wnk1cWN5YzdYRzVjYm1OdmJuTjBJR0pwYm1GeWVTQTlJSHRjYmlBZ0lDQnBaR1Z1ZEdsbWVUb2dkbUZzZFdVZ1BUNGdkbUZzZFdVZ2FXNXpkR0Z1WTJWdlppQlZhVzUwT0VGeWNtRjVMQ0F2THlCQ2RXWm1aWElnYVc1b1pYSnBkSE1nWm5KdmJTQlZhVzUwT0VGeWNtRjVYRzRnSUNBZ1pHVm1ZWFZzZERvZ1ptRnNjMlVzWEc0Z0lDQWdkR0ZuT2lBbmRHRm5PbmxoYld3dWIzSm5MREl3TURJNlltbHVZWEo1Snl4Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCU1pYUjFjbTV6SUdFZ1FuVm1abVZ5SUdsdUlHNXZaR1VnWVc1a0lHRnVJRlZwYm5RNFFYSnlZWGtnYVc0Z1luSnZkM05sY25OY2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZSdklIVnpaU0IwYUdVZ2NtVnpkV3gwYVc1bklHSjFabVpsY2lCaGN5QmhiaUJwYldGblpTd2dlVzkxSjJ4c0lIZGhiblFnZEc4Z1pHOGdjMjl0WlhSb2FXNW5JR3hwYTJVNlhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lBZ0lHTnZibk4wSUdKc2IySWdQU0J1WlhjZ1FteHZZaWhiWW5WbVptVnlYU3dnZXlCMGVYQmxPaUFuYVcxaFoyVXZhbkJsWnljZ2ZTbGNiaUFnSUNBZ0tpQWdJR1J2WTNWdFpXNTBMbkYxWlhKNVUyVnNaV04wYjNJb0p5TndhRzkwYnljcExuTnlZeUE5SUZWU1RDNWpjbVZoZEdWUFltcGxZM1JWVWt3b1lteHZZaWxjYmlBZ0lDQWdLaTljYmlBZ0lDQnlaWE52YkhabEtITnlZeXdnYjI1RmNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlFSjFabVpsY2lBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFSjFabVpsY2k1bWNtOXRLSE55WXl3Z0oySmhjMlUyTkNjcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQmhkRzlpSUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJQYmlCSlJTQXhNU3dnWVhSdllpZ3BJR05oYmlkMElHaGhibVJzWlNCdVpYZHNhVzVsYzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MzUnlJRDBnWVhSdllpaHpjbU11Y21Wd2JHRmpaU2d2VzF4Y2JseGNjbDB2Wnl3Z0p5Y3BLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdKMVptWmxjaUE5SUc1bGR5QlZhVzUwT0VGeWNtRjVLSE4wY2k1c1pXNW5kR2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J6ZEhJdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZblZtWm1WeVcybGRJRDBnYzNSeUxtTm9ZWEpEYjJSbFFYUW9hU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1luVm1abVZ5TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpZ25WR2hwY3lCbGJuWnBjbTl1YldWdWRDQmtiMlZ6SUc1dmRDQnpkWEJ3YjNKMElISmxZV1JwYm1jZ1ltbHVZWEo1SUhSaFozTTdJR1ZwZEdobGNpQkNkV1ptWlhJZ2IzSWdZWFJ2WWlCcGN5QnlaWEYxYVhKbFpDY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhOeVl6dGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMHNYRzRnSUNBZ2MzUnlhVzVuYVdaNUtIc2dZMjl0YldWdWRDd2dkSGx3WlN3Z2RtRnNkV1VnZlN3Z1kzUjRMQ0J2YmtOdmJXMWxiblFzSUc5dVEyaHZiWEJMWldWd0tTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHSjFaaUE5SUhaaGJIVmxPeUF2THlCamFHVmphMlZrSUdWaGNteHBaWElnWW5rZ1ltbHVZWEo1TG1sa1pXNTBhV1o1S0NsY2JpQWdJQ0FnSUNBZ2JHVjBJSE4wY2p0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQkNkV1ptWlhJZ1BUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4wY2lBOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luVm1JR2x1YzNSaGJtTmxiMllnUW5WbVptVnlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUQ4Z1luVm1MblJ2VTNSeWFXNW5LQ2RpWVhObE5qUW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBNklFSjFabVpsY2k1bWNtOXRLR0oxWmk1aWRXWm1aWElwTG5SdlUzUnlhVzVuS0NkaVlYTmxOalFuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1luUnZZU0E5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSE1nUFNBbkp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1luVm1MbXhsYm1kMGFEc2dLeXRwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhNZ0t6MGdVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaU2hpZFdaYmFWMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MzUnlJRDBnWW5SdllTaHpLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZHaHBjeUJsYm5acGNtOXViV1Z1ZENCa2IyVnpJRzV2ZENCemRYQndiM0owSUhkeWFYUnBibWNnWW1sdVlYSjVJSFJoWjNNN0lHVnBkR2hsY2lCQ2RXWm1aWElnYjNJZ1luUnZZU0JwY3lCeVpYRjFhWEpsWkNjcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNnaGRIbHdaU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1VnUFNCVFkyRnNZWEl1UWt4UFEwdGZURWxVUlZKQlREdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVWdJVDA5SUZOallXeGhjaTVSVlU5VVJWOUVUMVZDVEVVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR3hwYm1WWGFXUjBhQ0E5SUUxaGRHZ3ViV0Y0S0dOMGVDNXZjSFJwYjI1ekxteHBibVZYYVdSMGFDQXRJR04wZUM1cGJtUmxiblF1YkdWdVozUm9MQ0JqZEhndWIzQjBhVzl1Y3k1dGFXNURiMjUwWlc1MFYybGtkR2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JpQTlJRTFoZEdndVkyVnBiQ2h6ZEhJdWJHVnVaM1JvSUM4Z2JHbHVaVmRwWkhSb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR3hwYm1WeklEMGdibVYzSUVGeWNtRjVLRzRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBc0lHOGdQU0F3T3lCcElEd2dianNnS3l0cExDQnZJQ3M5SUd4cGJtVlhhV1IwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHBibVZ6VzJsZElEMGdjM1J5TG5OMVluTjBjaWh2TENCc2FXNWxWMmxrZEdncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1J5SUQwZ2JHbHVaWE11YW05cGJpaDBlWEJsSUQwOVBTQlRZMkZzWVhJdVFreFBRMHRmVEVsVVJWSkJUQ0EvSUNkY1hHNG5JRG9nSnlBbktUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjM1J5YVc1bmFXWjVVM1J5YVc1bktIc2dZMjl0YldWdWRDd2dkSGx3WlN3Z2RtRnNkV1U2SUhOMGNpQjlMQ0JqZEhnc0lHOXVRMjl0YldWdWRDd2diMjVEYUc5dGNFdGxaWEFwTzF4dUlDQWdJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQjdJR0pwYm1GeWVTQjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lHbHpVMlZ4TENCcGMxQmhhWElzSUdselRXRndJSDBnWm5KdmJTQW5MaTR2TGk0dmJtOWtaWE12YVdSbGJuUnBkSGt1YW5Nbk8xeHVhVzF3YjNKMElIc2dVR0ZwY2l3Z1kzSmxZWFJsVUdGcGNpQjlJR1p5YjIwZ0p5NHVMeTR1TDI1dlpHVnpMMUJoYVhJdWFuTW5PMXh1YVcxd2IzSjBJSHNnVTJOaGJHRnlJSDBnWm5KdmJTQW5MaTR2TGk0dmJtOWtaWE12VTJOaGJHRnlMbXB6Snp0Y2JtbHRjRzl5ZENCN0lGbEJUVXhUWlhFZ2ZTQm1jbTl0SUNjdUxpOHVMaTl1YjJSbGN5OVpRVTFNVTJWeExtcHpKenRjYmx4dVpuVnVZM1JwYjI0Z2NtVnpiMngyWlZCaGFYSnpLSE5sY1N3Z2IyNUZjbkp2Y2lrZ2UxeHVJQ0FnSUdsbUlDaHBjMU5sY1NoelpYRXBLU0I3WEc0Z0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2MyVnhMbWwwWlcxekxteGxibWQwYURzZ0t5dHBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYVhSbGJTQTlJSE5sY1M1cGRHVnRjMXRwWFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocGMxQmhhWElvYVhSbGJTa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtSUNocGMwMWhjQ2hwZEdWdEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocGRHVnRMbWwwWlcxekxteGxibWQwYUNBK0lERXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5dVJYSnliM0lvSjBWaFkyZ2djR0ZwY2lCdGRYTjBJR2hoZG1VZ2FYUnpJRzkzYmlCelpYRjFaVzVqWlNCcGJtUnBZMkYwYjNJbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCd1lXbHlJRDBnYVhSbGJTNXBkR1Z0YzFzd1hTQjhmQ0J1WlhjZ1VHRnBjaWh1WlhjZ1UyTmhiR0Z5S0c1MWJHd3BLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FYUmxiUzVqYjIxdFpXNTBRbVZtYjNKbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3WVdseUxtdGxlUzVqYjIxdFpXNTBRbVZtYjNKbElEMGdjR0ZwY2k1clpYa3VZMjl0YldWdWRFSmxabTl5WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUHlCZ0pIdHBkR1Z0TG1OdmJXMWxiblJDWldadmNtVjlYRnh1Skh0d1lXbHlMbXRsZVM1amIyMXRaVzUwUW1WbWIzSmxmV0JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRG9nYVhSbGJTNWpiMjF0Wlc1MFFtVm1iM0psTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBkR1Z0TG1OdmJXMWxiblFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1kyNGdQU0J3WVdseUxuWmhiSFZsSUQ4L0lIQmhhWEl1YTJWNU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYmk1amIyMXRaVzUwSUQwZ1kyNHVZMjl0YldWdWRGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1B5QmdKSHRwZEdWdExtTnZiVzFsYm5SOVhGeHVKSHRqYmk1amIyMXRaVzUwZldCY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ2FYUmxiUzVqYjIxdFpXNTBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwZEdWdElEMGdjR0ZwY2p0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxjUzVwZEdWdGMxdHBYU0E5SUdselVHRnBjaWhwZEdWdEtTQS9JR2wwWlcwZ09pQnVaWGNnVUdGcGNpaHBkR1Z0S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lHOXVSWEp5YjNJb0owVjRjR1ZqZEdWa0lHRWdjMlZ4ZFdWdVkyVWdabTl5SUhSb2FYTWdkR0ZuSnlrN1hHNGdJQ0FnY21WMGRYSnVJSE5sY1R0Y2JuMWNibVoxYm1OMGFXOXVJR055WldGMFpWQmhhWEp6S0hOamFHVnRZU3dnYVhSbGNtRmliR1VzSUdOMGVDa2dlMXh1SUNBZ0lHTnZibk4wSUhzZ2NtVndiR0ZqWlhJZ2ZTQTlJR04wZUR0Y2JpQWdJQ0JqYjI1emRDQndZV2x5Y3lBOUlHNWxkeUJaUVUxTVUyVnhLSE5qYUdWdFlTazdYRzRnSUNBZ2NHRnBjbk11ZEdGbklEMGdKM1JoWnpwNVlXMXNMbTl5Wnl3eU1EQXlPbkJoYVhKekp6dGNiaUFnSUNCc1pYUWdhU0E5SURBN1hHNGdJQ0FnYVdZZ0tHbDBaWEpoWW14bElDWW1JRk41YldKdmJDNXBkR1Z5WVhSdmNpQnBiaUJQWW1wbFkzUW9hWFJsY21GaWJHVXBLVnh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwZENCdlppQnBkR1Z5WVdKc1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnlaWEJzWVdObGNpQTlQVDBnSjJaMWJtTjBhVzl1SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGRDQTlJSEpsY0d4aFkyVnlMbU5oYkd3b2FYUmxjbUZpYkdVc0lGTjBjbWx1WnlocEt5c3BMQ0JwZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2EyVjVMQ0IyWVd4MVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0dsMEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocGRDNXNaVzVuZEdnZ1BUMDlJRElwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMlY1SUQwZ2FYUmJNRjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhiSFZsSUQwZ2FYUmJNVjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2loZ1JYaHdaV04wWldRZ1cydGxlU3dnZG1Gc2RXVmRJSFIxY0d4bE9pQWtlMmwwZldBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9hWFFnSmlZZ2FYUWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnJaWGx6SUQwZ1QySnFaV04wTG10bGVYTW9hWFFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHJaWGx6TG14bGJtZDBhQ0E5UFQwZ01Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCclpYa2dQU0JyWlhseld6QmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaU0E5SUdsMFcydGxlVjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtHQkZlSEJsWTNSbFpDQjBkWEJzWlNCM2FYUm9JRzl1WlNCclpYa3NJRzV2ZENBa2UydGxlWE11YkdWdVozUm9mU0JyWlhsellDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMlY1SUQwZ2FYUTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0J3WVdseWN5NXBkR1Z0Y3k1d2RYTm9LR055WldGMFpWQmhhWElvYTJWNUxDQjJZV3gxWlN3Z1kzUjRLU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjR0ZwY25NN1hHNTlYRzVqYjI1emRDQndZV2x5Y3lBOUlIdGNiaUFnSUNCamIyeHNaV04wYVc5dU9pQW5jMlZ4Snl4Y2JpQWdJQ0JrWldaaGRXeDBPaUJtWVd4elpTeGNiaUFnSUNCMFlXYzZJQ2QwWVdjNmVXRnRiQzV2Y21jc01qQXdNanB3WVdseWN5Y3NYRzRnSUNBZ2NtVnpiMngyWlRvZ2NtVnpiMngyWlZCaGFYSnpMRnh1SUNBZ0lHTnlaV0YwWlU1dlpHVTZJR055WldGMFpWQmhhWEp6WEc1OU8xeHVYRzVsZUhCdmNuUWdleUJqY21WaGRHVlFZV2x5Y3l3Z2NHRnBjbk1zSUhKbGMyOXNkbVZRWVdseWN5QjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lHbHpVMk5oYkdGeUxDQnBjMUJoYVhJZ2ZTQm1jbTl0SUNjdUxpOHVMaTl1YjJSbGN5OXBaR1Z1ZEdsMGVTNXFjeWM3WEc1cGJYQnZjblFnZXlCMGIwcFRJSDBnWm5KdmJTQW5MaTR2TGk0dmJtOWtaWE12ZEc5S1V5NXFjeWM3WEc1cGJYQnZjblFnZXlCWlFVMU1UV0Z3SUgwZ1puSnZiU0FuTGk0dkxpNHZibTlrWlhNdldVRk5URTFoY0M1cWN5YzdYRzVwYlhCdmNuUWdleUJaUVUxTVUyVnhJSDBnWm5KdmJTQW5MaTR2TGk0dmJtOWtaWE12V1VGTlRGTmxjUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnlaWE52YkhabFVHRnBjbk1zSUdOeVpXRjBaVkJoYVhKeklIMGdabkp2YlNBbkxpOXdZV2x5Y3k1cWN5YzdYRzVjYm1Oc1lYTnpJRmxCVFV4UFRXRndJR1Y0ZEdWdVpITWdXVUZOVEZObGNTQjdYRzRnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc0Z0lDQWdJQ0FnSUhOMWNHVnlLQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZV1JrSUQwZ1dVRk5URTFoY0M1d2NtOTBiM1I1Y0dVdVlXUmtMbUpwYm1Rb2RHaHBjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaR1ZzWlhSbElEMGdXVUZOVEUxaGNDNXdjbTkwYjNSNWNHVXVaR1ZzWlhSbExtSnBibVFvZEdocGN5azdYRzRnSUNBZ0lDQWdJSFJvYVhNdVoyVjBJRDBnV1VGTlRFMWhjQzV3Y205MGIzUjVjR1V1WjJWMExtSnBibVFvZEdocGN5azdYRzRnSUNBZ0lDQWdJSFJvYVhNdWFHRnpJRDBnV1VGTlRFMWhjQzV3Y205MGIzUjVjR1V1YUdGekxtSnBibVFvZEdocGN5azdYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVjBJRDBnV1VGTlRFMWhjQzV3Y205MGIzUjVjR1V1YzJWMExtSnBibVFvZEdocGN5azdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRHRm5JRDBnV1VGTlRFOU5ZWEF1ZEdGbk8xeHVJQ0FnSUgxY2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCSlppQmdZM1I0WUNCcGN5Qm5hWFpsYml3Z2RHaGxJSEpsZEhWeWJpQjBlWEJsSUdseklHRmpkSFZoYkd4NUlHQk5ZWEE4ZFc1cmJtOTNiaXdnZFc1cmJtOTNiajVnTEZ4dUlDQWdJQ0FxSUdKMWRDQlVlWEJsVTJOeWFYQjBJSGR2YmlkMElHRnNiRzkzSUhkcFpHVnVhVzVuSUhSb1pTQnphV2R1WVhSMWNtVWdiMllnWVNCamFHbHNaQ0J0WlhSb2IyUXVYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2RHOUtVMDlPS0Y4c0lHTjBlQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9JV04wZUNsY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnpkWEJsY2k1MGIwcFRUMDRvWHlrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxaGNDQTlJRzVsZHlCTllYQW9LVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTjBlRDh1YjI1RGNtVmhkR1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpkSGd1YjI1RGNtVmhkR1VvYldGd0tUdGNiaUFnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0J3WVdseUlHOW1JSFJvYVhNdWFYUmxiWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCclpYa3NJSFpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbHpVR0ZwY2lod1lXbHlLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd0bGVTQTlJSFJ2U2xNb2NHRnBjaTVyWlhrc0lDY25MQ0JqZEhncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhiSFZsSUQwZ2RHOUtVeWh3WVdseUxuWmhiSFZsTENCclpYa3NJR04wZUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCclpYa2dQU0IwYjBwVEtIQmhhWElzSUNjbkxDQmpkSGdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzFoY0M1b1lYTW9hMlY1S1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjA5eVpHVnlaV1FnYldGd2N5QnRkWE4wSUc1dmRDQnBibU5zZFdSbElHUjFjR3hwWTJGMFpTQnJaWGx6SnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WVhBdWMyVjBLR3RsZVN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdFlYQTdYRzRnSUNBZ2ZWeHVJQ0FnSUhOMFlYUnBZeUJtY205dEtITmphR1Z0WVN3Z2FYUmxjbUZpYkdVc0lHTjBlQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3WVdseWN5QTlJR055WldGMFpWQmhhWEp6S0hOamFHVnRZU3dnYVhSbGNtRmliR1VzSUdOMGVDazdYRzRnSUNBZ0lDQWdJR052Ym5OMElHOXRZWEFnUFNCdVpYY2dkR2hwY3lncE8xeHVJQ0FnSUNBZ0lDQnZiV0Z3TG1sMFpXMXpJRDBnY0dGcGNuTXVhWFJsYlhNN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdmJXRndPMXh1SUNBZ0lIMWNibjFjYmxsQlRVeFBUV0Z3TG5SaFp5QTlJQ2QwWVdjNmVXRnRiQzV2Y21jc01qQXdNanB2YldGd0p6dGNibU52Ym5OMElHOXRZWEFnUFNCN1hHNGdJQ0FnWTI5c2JHVmpkR2x2YmpvZ0ozTmxjU2NzWEc0Z0lDQWdhV1JsYm5ScFpuazZJSFpoYkhWbElEMCtJSFpoYkhWbElHbHVjM1JoYm1ObGIyWWdUV0Z3TEZ4dUlDQWdJRzV2WkdWRGJHRnpjem9nV1VGTlRFOU5ZWEFzWEc0Z0lDQWdaR1ZtWVhWc2REb2dabUZzYzJVc1hHNGdJQ0FnZEdGbk9pQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZiMjFoY0Njc1hHNGdJQ0FnY21WemIyeDJaU2h6WlhFc0lHOXVSWEp5YjNJcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NHRnBjbk1nUFNCeVpYTnZiSFpsVUdGcGNuTW9jMlZ4TENCdmJrVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzJWbGJrdGxlWE1nUFNCYlhUdGNiaUFnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0I3SUd0bGVTQjlJRzltSUhCaGFYSnpMbWwwWlcxektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hWE5UWTJGc1lYSW9hMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h6WldWdVMyVjVjeTVwYm1Oc2RXUmxjeWhyWlhrdWRtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9ZRTl5WkdWeVpXUWdiV0Z3Y3lCdGRYTjBJRzV2ZENCcGJtTnNkV1JsSUdSMWNHeHBZMkYwWlNCclpYbHpPaUFrZTJ0bGVTNTJZV3gxWlgxZ0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sWlc1TFpYbHpMbkIxYzJnb2EyVjVMblpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1aGMzTnBaMjRvYm1WM0lGbEJUVXhQVFdGd0tDa3NJSEJoYVhKektUdGNiaUFnSUNCOUxGeHVJQ0FnSUdOeVpXRjBaVTV2WkdVNklDaHpZMmhsYldFc0lHbDBaWEpoWW14bExDQmpkSGdwSUQwK0lGbEJUVXhQVFdGd0xtWnliMjBvYzJOb1pXMWhMQ0JwZEdWeVlXSnNaU3dnWTNSNEtWeHVmVHRjYmx4dVpYaHdiM0owSUhzZ1dVRk5URTlOWVhBc0lHOXRZWEFnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJUWTJGc1lYSWdmU0JtY205dElDY3VMaTh1TGk5dWIyUmxjeTlUWTJGc1lYSXVhbk1uTzF4dVhHNW1kVzVqZEdsdmJpQmliMjlzVTNSeWFXNW5hV1o1S0hzZ2RtRnNkV1VzSUhOdmRYSmpaU0I5TENCamRIZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCaWIyOXNUMkpxSUQwZ2RtRnNkV1VnUHlCMGNuVmxWR0ZuSURvZ1ptRnNjMlZVWVdjN1hHNGdJQ0FnYVdZZ0tITnZkWEpqWlNBbUppQmliMjlzVDJKcUxuUmxjM1F1ZEdWemRDaHpiM1Z5WTJVcEtWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2MyOTFjbU5sTzF4dUlDQWdJSEpsZEhWeWJpQjJZV3gxWlNBL0lHTjBlQzV2Y0hScGIyNXpMblJ5ZFdWVGRISWdPaUJqZEhndWIzQjBhVzl1Y3k1bVlXeHpaVk4wY2p0Y2JuMWNibU52Ym5OMElIUnlkV1ZVWVdjZ1BTQjdYRzRnSUNBZ2FXUmxiblJwWm5rNklIWmhiSFZsSUQwK0lIWmhiSFZsSUQwOVBTQjBjblZsTEZ4dUlDQWdJR1JsWm1GMWJIUTZJSFJ5ZFdVc1hHNGdJQ0FnZEdGbk9pQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZZbTl2YkNjc1hHNGdJQ0FnZEdWemREb2dMMTRvUHpwWmZIbDhXMWw1WFdWemZGbEZVM3hiVkhSZGNuVmxmRlJTVlVWOFcwOXZYVzU4VDA0cEpDOHNYRzRnSUNBZ2NtVnpiMngyWlRvZ0tDa2dQVDRnYm1WM0lGTmpZV3hoY2loMGNuVmxLU3hjYmlBZ0lDQnpkSEpwYm1kcFpuazZJR0p2YjJ4VGRISnBibWRwWm5sY2JuMDdYRzVqYjI1emRDQm1ZV3h6WlZSaFp5QTlJSHRjYmlBZ0lDQnBaR1Z1ZEdsbWVUb2dkbUZzZFdVZ1BUNGdkbUZzZFdVZ1BUMDlJR1poYkhObExGeHVJQ0FnSUdSbFptRjFiSFE2SUhSeWRXVXNYRzRnSUNBZ2RHRm5PaUFuZEdGbk9ubGhiV3d1YjNKbkxESXdNREk2WW05dmJDY3NYRzRnSUNBZ2RHVnpkRG9nTDE0b1B6cE9mRzU4VzA1dVhXOThUazk4VzBabVhXRnNjMlY4UmtGTVUwVjhXMDl2WFdabWZFOUdSaWtrTHl4Y2JpQWdJQ0J5WlhOdmJIWmxPaUFvS1NBOVBpQnVaWGNnVTJOaGJHRnlLR1poYkhObEtTeGNiaUFnSUNCemRISnBibWRwWm5rNklHSnZiMnhUZEhKcGJtZHBabmxjYm4wN1hHNWNibVY0Y0c5eWRDQjdJR1poYkhObFZHRm5MQ0IwY25WbFZHRm5JSDA3WEc0aUxDQWlhVzF3YjNKMElIc2dVMk5oYkdGeUlIMGdabkp2YlNBbkxpNHZMaTR2Ym05a1pYTXZVMk5oYkdGeUxtcHpKenRjYm1sdGNHOXlkQ0I3SUhOMGNtbHVaMmxtZVU1MWJXSmxjaUI5SUdaeWIyMGdKeTR1THk0dUwzTjBjbWx1WjJsbWVTOXpkSEpwYm1kcFpubE9kVzFpWlhJdWFuTW5PMXh1WEc1amIyNXpkQ0JtYkc5aGRFNWhUaUE5SUh0Y2JpQWdJQ0JwWkdWdWRHbG1lVG9nZG1Gc2RXVWdQVDRnZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuYm5WdFltVnlKeXhjYmlBZ0lDQmtaV1poZFd4ME9pQjBjblZsTEZ4dUlDQWdJSFJoWnpvZ0ozUmhaenA1WVcxc0xtOXlaeXd5TURBeU9tWnNiMkYwSnl4Y2JpQWdJQ0IwWlhOME9pQXZYaWcvT2xzdEsxMC9YRnd1S0Q4NmFXNW1mRWx1Wm54SlRrWXBmRnhjTG01aGJueGNYQzVPWVU1OFhGd3VUa0ZPS1NRdkxGeHVJQ0FnSUhKbGMyOXNkbVU2SUNoemRISXBJRDArSUhOMGNpNXpiR2xqWlNndE15a3VkRzlNYjNkbGNrTmhjMlVvS1NBOVBUMGdKMjVoYmlkY2JpQWdJQ0FnSUNBZ1B5Qk9ZVTVjYmlBZ0lDQWdJQ0FnT2lCemRISmJNRjBnUFQwOUlDY3RKMXh1SUNBZ0lDQWdJQ0FnSUNBZ1B5Qk9kVzFpWlhJdVRrVkhRVlJKVmtWZlNVNUdTVTVKVkZsY2JpQWdJQ0FnSUNBZ0lDQWdJRG9nVG5WdFltVnlMbEJQVTBsVVNWWkZYMGxPUmtsT1NWUlpMRnh1SUNBZ0lITjBjbWx1WjJsbWVUb2djM1J5YVc1bmFXWjVUblZ0WW1WeVhHNTlPMXh1WTI5dWMzUWdabXh2WVhSRmVIQWdQU0I3WEc0Z0lDQWdhV1JsYm5ScFpuazZJSFpoYkhWbElEMCtJSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdKMjUxYldKbGNpY3NYRzRnSUNBZ1pHVm1ZWFZzZERvZ2RISjFaU3hjYmlBZ0lDQjBZV2M2SUNkMFlXYzZlV0Z0YkM1dmNtY3NNakF3TWpwbWJHOWhkQ2NzWEc0Z0lDQWdabTl5YldGME9pQW5SVmhRSnl4Y2JpQWdJQ0IwWlhOME9pQXZYbHN0SzEwL0tEODZXekF0T1YxYk1DMDVYMTBxS1Q4b1B6cGNYQzViTUMwNVgxMHFLVDliWlVWZFd5MHJYVDliTUMwNVhTc2tMeXhjYmlBZ0lDQnlaWE52YkhabE9pQW9jM1J5S1NBOVBpQndZWEp6WlVac2IyRjBLSE4wY2k1eVpYQnNZV05sS0M5ZkwyY3NJQ2NuS1Nrc1hHNGdJQ0FnYzNSeWFXNW5hV1o1S0c1dlpHVXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdiblZ0SUQwZ1RuVnRZbVZ5S0c1dlpHVXVkbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2FYTkdhVzVwZEdVb2JuVnRLU0EvSUc1MWJTNTBiMFY0Y0c5dVpXNTBhV0ZzS0NrZ09pQnpkSEpwYm1kcFpubE9kVzFpWlhJb2JtOWtaU2s3WEc0Z0lDQWdmVnh1ZlR0Y2JtTnZibk4wSUdac2IyRjBJRDBnZTF4dUlDQWdJR2xrWlc1MGFXWjVPaUIyWVd4MVpTQTlQaUIwZVhCbGIyWWdkbUZzZFdVZ1BUMDlJQ2R1ZFcxaVpYSW5MRnh1SUNBZ0lHUmxabUYxYkhRNklIUnlkV1VzWEc0Z0lDQWdkR0ZuT2lBbmRHRm5PbmxoYld3dWIzSm5MREl3TURJNlpteHZZWFFuTEZ4dUlDQWdJSFJsYzNRNklDOWVXeTByWFQ4b1B6cGJNQzA1WFZzd0xUbGZYU29wUDF4Y0xsc3dMVGxmWFNva0x5eGNiaUFnSUNCeVpYTnZiSFpsS0hOMGNpa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnViMlJsSUQwZ2JtVjNJRk5qWVd4aGNpaHdZWEp6WlVac2IyRjBLSE4wY2k1eVpYQnNZV05sS0M5ZkwyY3NJQ2NuS1NrcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCa2IzUWdQU0J6ZEhJdWFXNWtaWGhQWmlnbkxpY3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb1pHOTBJQ0U5UFNBdE1Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWmlBOUlITjBjaTV6ZFdKemRISnBibWNvWkc5MElDc2dNU2t1Y21Wd2JHRmpaU2d2WHk5bkxDQW5KeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWmx0bUxteGxibWQwYUNBdElERmRJRDA5UFNBbk1DY3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdibTlrWlM1dGFXNUdjbUZqZEdsdmJrUnBaMmwwY3lBOUlHWXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnViMlJsTzF4dUlDQWdJSDBzWEc0Z0lDQWdjM1J5YVc1bmFXWjVPaUJ6ZEhKcGJtZHBabmxPZFcxaVpYSmNibjA3WEc1Y2JtVjRjRzl5ZENCN0lHWnNiMkYwTENCbWJHOWhkRVY0Y0N3Z1pteHZZWFJPWVU0Z2ZUdGNiaUlzSUNKcGJYQnZjblFnZXlCemRISnBibWRwWm5sT2RXMWlaWElnZlNCbWNtOXRJQ2N1TGk4dUxpOXpkSEpwYm1kcFpua3ZjM1J5YVc1bmFXWjVUblZ0WW1WeUxtcHpKenRjYmx4dVkyOXVjM1FnYVc1MFNXUmxiblJwWm5rZ1BTQW9kbUZzZFdVcElEMCtJSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdKMkpwWjJsdWRDY2dmSHdnVG5WdFltVnlMbWx6U1c1MFpXZGxjaWgyWVd4MVpTazdYRzVtZFc1amRHbHZiaUJwYm5SU1pYTnZiSFpsS0hOMGNpd2diMlptYzJWMExDQnlZV1JwZUN3Z2V5QnBiblJCYzBKcFowbHVkQ0I5S1NCN1hHNGdJQ0FnWTI5dWMzUWdjMmxuYmlBOUlITjBjbHN3WFR0Y2JpQWdJQ0JwWmlBb2MybG5iaUE5UFQwZ0p5MG5JSHg4SUhOcFoyNGdQVDA5SUNjckp5bGNiaUFnSUNBZ0lDQWdiMlptYzJWMElDczlJREU3WEc0Z0lDQWdjM1J5SUQwZ2MzUnlMbk4xWW5OMGNtbHVaeWh2Wm1aelpYUXBMbkpsY0d4aFkyVW9MMTh2Wnl3Z0p5Y3BPMXh1SUNBZ0lHbG1JQ2hwYm5SQmMwSnBaMGx1ZENrZ2UxeHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tISmhaR2w0S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElESTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1J5SUQwZ1lEQmlKSHR6ZEhKOVlEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ09EcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkSElnUFNCZ01HOGtlM04wY24xZ08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBeE5qcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkSElnUFNCZ01IZ2tlM04wY24xZ08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUc0Z1BTQkNhV2RKYm5Rb2MzUnlLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE5wWjI0Z1BUMDlJQ2N0SnlBL0lFSnBaMGx1ZENndE1Ta2dLaUJ1SURvZ2JqdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdiaUE5SUhCaGNuTmxTVzUwS0hOMGNpd2djbUZrYVhncE8xeHVJQ0FnSUhKbGRIVnliaUJ6YVdkdUlEMDlQU0FuTFNjZ1B5QXRNU0FxSUc0Z09pQnVPMXh1ZlZ4dVpuVnVZM1JwYjI0Z2FXNTBVM1J5YVc1bmFXWjVLRzV2WkdVc0lISmhaR2w0TENCd2NtVm1hWGdwSUh0Y2JpQWdJQ0JqYjI1emRDQjdJSFpoYkhWbElIMGdQU0J1YjJSbE8xeHVJQ0FnSUdsbUlDaHBiblJKWkdWdWRHbG1lU2gyWVd4MVpTa3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM1J5SUQwZ2RtRnNkV1V1ZEc5VGRISnBibWNvY21Ga2FYZ3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdVZ1BDQXdJRDhnSnkwbklDc2djSEpsWm1sNElDc2djM1J5TG5OMVluTjBjaWd4S1NBNklIQnlaV1pwZUNBcklITjBjanRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhOMGNtbHVaMmxtZVU1MWJXSmxjaWh1YjJSbEtUdGNibjFjYm1OdmJuTjBJR2x1ZEVKcGJpQTlJSHRjYmlBZ0lDQnBaR1Z1ZEdsbWVUb2dhVzUwU1dSbGJuUnBabmtzWEc0Z0lDQWdaR1ZtWVhWc2REb2dkSEoxWlN4Y2JpQWdJQ0IwWVdjNklDZDBZV2M2ZVdGdGJDNXZjbWNzTWpBd01qcHBiblFuTEZ4dUlDQWdJR1p2Y20xaGREb2dKMEpKVGljc1hHNGdJQ0FnZEdWemREb2dMMTViTFN0ZFB6QmlXekF0TVY5ZEt5UXZMRnh1SUNBZ0lISmxjMjlzZG1VNklDaHpkSElzSUY5dmJrVnljbTl5TENCdmNIUXBJRDArSUdsdWRGSmxjMjlzZG1Vb2MzUnlMQ0F5TENBeUxDQnZjSFFwTEZ4dUlDQWdJSE4wY21sdVoybG1lVG9nYm05a1pTQTlQaUJwYm5SVGRISnBibWRwWm5rb2JtOWtaU3dnTWl3Z0p6QmlKeWxjYm4wN1hHNWpiMjV6ZENCcGJuUlBZM1FnUFNCN1hHNGdJQ0FnYVdSbGJuUnBabms2SUdsdWRFbGtaVzUwYVdaNUxGeHVJQ0FnSUdSbFptRjFiSFE2SUhSeWRXVXNYRzRnSUNBZ2RHRm5PaUFuZEdGbk9ubGhiV3d1YjNKbkxESXdNREk2YVc1MEp5eGNiaUFnSUNCbWIzSnRZWFE2SUNkUFExUW5MRnh1SUNBZ0lIUmxjM1E2SUM5ZVd5MHJYVDh3V3pBdE4xOWRLeVF2TEZ4dUlDQWdJSEpsYzI5c2RtVTZJQ2h6ZEhJc0lGOXZia1Z5Y205eUxDQnZjSFFwSUQwK0lHbHVkRkpsYzI5c2RtVW9jM1J5TENBeExDQTRMQ0J2Y0hRcExGeHVJQ0FnSUhOMGNtbHVaMmxtZVRvZ2JtOWtaU0E5UGlCcGJuUlRkSEpwYm1kcFpua29ibTlrWlN3Z09Dd2dKekFuS1Z4dWZUdGNibU52Ym5OMElHbHVkQ0E5SUh0Y2JpQWdJQ0JwWkdWdWRHbG1lVG9nYVc1MFNXUmxiblJwWm5rc1hHNGdJQ0FnWkdWbVlYVnNkRG9nZEhKMVpTeGNiaUFnSUNCMFlXYzZJQ2QwWVdjNmVXRnRiQzV2Y21jc01qQXdNanBwYm5RbkxGeHVJQ0FnSUhSbGMzUTZJQzllV3kwclhUOWJNQzA1WFZzd0xUbGZYU29rTHl4Y2JpQWdJQ0J5WlhOdmJIWmxPaUFvYzNSeUxDQmZiMjVGY25KdmNpd2diM0IwS1NBOVBpQnBiblJTWlhOdmJIWmxLSE4wY2l3Z01Dd2dNVEFzSUc5d2RDa3NYRzRnSUNBZ2MzUnlhVzVuYVdaNU9pQnpkSEpwYm1kcFpubE9kVzFpWlhKY2JuMDdYRzVqYjI1emRDQnBiblJJWlhnZ1BTQjdYRzRnSUNBZ2FXUmxiblJwWm5rNklHbHVkRWxrWlc1MGFXWjVMRnh1SUNBZ0lHUmxabUYxYkhRNklIUnlkV1VzWEc0Z0lDQWdkR0ZuT2lBbmRHRm5PbmxoYld3dWIzSm5MREl3TURJNmFXNTBKeXhjYmlBZ0lDQm1iM0p0WVhRNklDZElSVmduTEZ4dUlDQWdJSFJsYzNRNklDOWVXeTByWFQ4d2VGc3dMVGxoTFdaQkxVWmZYU3NrTHl4Y2JpQWdJQ0J5WlhOdmJIWmxPaUFvYzNSeUxDQmZiMjVGY25KdmNpd2diM0IwS1NBOVBpQnBiblJTWlhOdmJIWmxLSE4wY2l3Z01pd2dNVFlzSUc5d2RDa3NYRzRnSUNBZ2MzUnlhVzVuYVdaNU9pQnViMlJsSUQwK0lHbHVkRk4wY21sdVoybG1lU2h1YjJSbExDQXhOaXdnSnpCNEp5bGNibjA3WEc1Y2JtVjRjRzl5ZENCN0lHbHVkQ3dnYVc1MFFtbHVMQ0JwYm5SSVpYZ3NJR2x1ZEU5amRDQjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lHbHpUV0Z3TENCcGMxQmhhWElzSUdselUyTmhiR0Z5SUgwZ1puSnZiU0FuTGk0dkxpNHZibTlrWlhNdmFXUmxiblJwZEhrdWFuTW5PMXh1YVcxd2IzSjBJSHNnVUdGcGNpd2dZM0psWVhSbFVHRnBjaUI5SUdaeWIyMGdKeTR1THk0dUwyNXZaR1Z6TDFCaGFYSXVhbk1uTzF4dWFXMXdiM0owSUhzZ1dVRk5URTFoY0N3Z1ptbHVaRkJoYVhJZ2ZTQm1jbTl0SUNjdUxpOHVMaTl1YjJSbGN5OVpRVTFNVFdGd0xtcHpKenRjYmx4dVkyeGhjM01nV1VGTlRGTmxkQ0JsZUhSbGJtUnpJRmxCVFV4TllYQWdlMXh1SUNBZ0lHTnZibk4wY25WamRHOXlLSE5qYUdWdFlTa2dlMXh1SUNBZ0lDQWdJQ0J6ZFhCbGNpaHpZMmhsYldFcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5SaFp5QTlJRmxCVFV4VFpYUXVkR0ZuTzF4dUlDQWdJSDFjYmlBZ0lDQmhaR1FvYTJWNUtTQjdYRzRnSUNBZ0lDQWdJR3hsZENCd1lXbHlPMXh1SUNBZ0lDQWdJQ0JwWmlBb2FYTlFZV2x5S0d0bGVTa3BYRzRnSUNBZ0lDQWdJQ0FnSUNCd1lXbHlJRDBnYTJWNU8xeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaHJaWGtnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dWdlppQnJaWGtnUFQwOUlDZHZZbXBsWTNRbklDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBbmEyVjVKeUJwYmlCclpYa2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDZDJZV3gxWlNjZ2FXNGdhMlY1SUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0JyWlhrdWRtRnNkV1VnUFQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0FnSUNBZ0lDQndZV2x5SUQwZ2JtVjNJRkJoYVhJb2EyVjVMbXRsZVN3Z2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUhCaGFYSWdQU0J1WlhjZ1VHRnBjaWhyWlhrc0lHNTFiR3dwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3Y21WMklEMGdabWx1WkZCaGFYSW9kR2hwY3k1cGRHVnRjeXdnY0dGcGNpNXJaWGtwTzF4dUlDQWdJQ0FnSUNCcFppQW9JWEJ5WlhZcFhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtbDBaVzF6TG5CMWMyZ29jR0ZwY2lrN1hHNGdJQ0FnZlZ4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUVsbUlHQnJaV1Z3VUdGcGNtQWdhWE1nWUhSeWRXVmdMQ0J5WlhSMWNtNXpJSFJvWlNCUVlXbHlJRzFoZEdOb2FXNW5JR0JyWlhsZ0xseHVJQ0FnSUNBcUlFOTBhR1Z5ZDJselpTd2djbVYwZFhKdWN5QjBhR1VnZG1Gc2RXVWdiMllnZEdoaGRDQlFZV2x5SjNNZ2EyVjVMbHh1SUNBZ0lDQXFMMXh1SUNBZ0lHZGxkQ2hyWlhrc0lHdGxaWEJRWVdseUtTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElIQmhhWElnUFNCbWFXNWtVR0ZwY2loMGFHbHpMbWwwWlcxekxDQnJaWGtwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnSVd0bFpYQlFZV2x5SUNZbUlHbHpVR0ZwY2lod1lXbHlLVnh1SUNBZ0lDQWdJQ0FnSUNBZ1B5QnBjMU5qWVd4aGNpaHdZV2x5TG10bGVTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQS9JSEJoYVhJdWEyVjVMblpoYkhWbFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQndZV2x5TG10bGVWeHVJQ0FnSUNBZ0lDQWdJQ0FnT2lCd1lXbHlPMXh1SUNBZ0lIMWNiaUFnSUNCelpYUW9hMlY1TENCMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIWmhiSFZsSUNFOVBTQW5ZbTl2YkdWaGJpY3BYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVWNGNHVmpkR1ZrSUdKdmIyeGxZVzRnZG1Gc2RXVWdabTl5SUhObGRDaHJaWGtzSUhaaGJIVmxLU0JwYmlCaElGbEJUVXdnYzJWMExDQnViM1FnSkh0MGVYQmxiMllnZG1Gc2RXVjlZQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEJ5WlhZZ1BTQm1hVzVrVUdGcGNpaDBhR2x6TG1sMFpXMXpMQ0JyWlhrcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvY0hKbGRpQW1KaUFoZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YVhSbGJYTXVjM0JzYVdObEtIUm9hWE11YVhSbGJYTXVhVzVrWlhoUFppaHdjbVYyS1N3Z01TazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQnBaaUFvSVhCeVpYWWdKaVlnZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YVhSbGJYTXVjSFZ6YUNodVpYY2dVR0ZwY2loclpYa3BLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQjBiMHBUVDA0b1h5d2dZM1I0S1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCemRYQmxjaTUwYjBwVFQwNG9YeXdnWTNSNExDQlRaWFFwTzF4dUlDQWdJSDFjYmlBZ0lDQjBiMU4wY21sdVp5aGpkSGdzSUc5dVEyOXRiV1Z1ZEN3Z2IyNURhRzl0Y0V0bFpYQXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRmpkSGdwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1NsTlBUaTV6ZEhKcGJtZHBabmtvZEdocGN5azdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbWhoYzBGc2JFNTFiR3hXWVd4MVpYTW9kSEoxWlNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjM1Z3WlhJdWRHOVRkSEpwYm1jb1QySnFaV04wTG1GemMybG5iaWg3ZlN3Z1kzUjRMQ0I3SUdGc2JFNTFiR3hXWVd4MVpYTTZJSFJ5ZFdVZ2ZTa3NJRzl1UTI5dGJXVnVkQ3dnYjI1RGFHOXRjRXRsWlhBcE8xeHVJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxTmxkQ0JwZEdWdGN5QnRkWE4wSUdGc2JDQm9ZWFpsSUc1MWJHd2dkbUZzZFdWekp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhOMFlYUnBZeUJtY205dEtITmphR1Z0WVN3Z2FYUmxjbUZpYkdVc0lHTjBlQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3SUhKbGNHeGhZMlZ5SUgwZ1BTQmpkSGc3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSE5sZENBOUlHNWxkeUIwYUdsektITmphR1Z0WVNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwZEdWeVlXSnNaU0FtSmlCVGVXMWliMnd1YVhSbGNtRjBiM0lnYVc0Z1QySnFaV04wS0dsMFpYSmhZbXhsS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJSFpoYkhWbElHOW1JR2wwWlhKaFlteGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCeVpYQnNZV05sY2lBOVBUMGdKMloxYm1OMGFXOXVKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnNkV1VnUFNCeVpYQnNZV05sY2k1allXeHNLR2wwWlhKaFlteGxMQ0IyWVd4MVpTd2dkbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxkQzVwZEdWdGN5NXdkWE5vS0dOeVpXRjBaVkJoYVhJb2RtRnNkV1VzSUc1MWJHd3NJR04wZUNrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYzJWME8xeHVJQ0FnSUgxY2JuMWNibGxCVFV4VFpYUXVkR0ZuSUQwZ0ozUmhaenA1WVcxc0xtOXlaeXd5TURBeU9uTmxkQ2M3WEc1amIyNXpkQ0J6WlhRZ1BTQjdYRzRnSUNBZ1kyOXNiR1ZqZEdsdmJqb2dKMjFoY0Njc1hHNGdJQ0FnYVdSbGJuUnBabms2SUhaaGJIVmxJRDArSUhaaGJIVmxJR2x1YzNSaGJtTmxiMllnVTJWMExGeHVJQ0FnSUc1dlpHVkRiR0Z6Y3pvZ1dVRk5URk5sZEN4Y2JpQWdJQ0JrWldaaGRXeDBPaUJtWVd4elpTeGNiaUFnSUNCMFlXYzZJQ2QwWVdjNmVXRnRiQzV2Y21jc01qQXdNanB6WlhRbkxGeHVJQ0FnSUdOeVpXRjBaVTV2WkdVNklDaHpZMmhsYldFc0lHbDBaWEpoWW14bExDQmpkSGdwSUQwK0lGbEJUVXhUWlhRdVpuSnZiU2h6WTJobGJXRXNJR2wwWlhKaFlteGxMQ0JqZEhncExGeHVJQ0FnSUhKbGMyOXNkbVVvYldGd0xDQnZia1Z5Y205eUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNocGMwMWhjQ2h0WVhBcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iV0Z3TG1oaGMwRnNiRTUxYkd4V1lXeDFaWE1vZEhKMVpTa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1aGMzTnBaMjRvYm1WM0lGbEJUVXhUWlhRb0tTd2diV0Z3S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmJrVnljbTl5S0NkVFpYUWdhWFJsYlhNZ2JYVnpkQ0JoYkd3Z2FHRjJaU0J1ZFd4c0lIWmhiSFZsY3ljcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9KMFY0Y0dWamRHVmtJR0VnYldGd2NHbHVaeUJtYjNJZ2RHaHBjeUIwWVdjbktUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHMWhjRHRjYmlBZ0lDQjlYRzU5TzF4dVhHNWxlSEJ2Y25RZ2V5QlpRVTFNVTJWMExDQnpaWFFnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJ6ZEhKcGJtZHBabmxPZFcxaVpYSWdmU0JtY205dElDY3VMaTh1TGk5emRISnBibWRwWm5rdmMzUnlhVzVuYVdaNVRuVnRZbVZ5TG1wekp6dGNibHh1THlvcUlFbHVkR1Z5Ym1Gc0lIUjVjR1Z6SUdoaGJtUnNaU0JpYVdkcGJuUWdZWE1nYm5WdFltVnlMQ0JpWldOaGRYTmxJRlJUSUdOaGJpZDBJR1pwWjNWeVpTQnBkQ0J2ZFhRdUlDb3ZYRzVtZFc1amRHbHZiaUJ3WVhKelpWTmxlR0ZuWlhOcGJXRnNLSE4wY2l3Z1lYTkNhV2RKYm5RcElIdGNiaUFnSUNCamIyNXpkQ0J6YVdkdUlEMGdjM1J5V3pCZE8xeHVJQ0FnSUdOdmJuTjBJSEJoY25SeklEMGdjMmxuYmlBOVBUMGdKeTBuSUh4OElITnBaMjRnUFQwOUlDY3JKeUEvSUhOMGNpNXpkV0p6ZEhKcGJtY29NU2tnT2lCemRISTdYRzRnSUNBZ1kyOXVjM1FnYm5WdElEMGdLRzRwSUQwK0lHRnpRbWxuU1c1MElEOGdRbWxuU1c1MEtHNHBJRG9nVG5WdFltVnlLRzRwTzF4dUlDQWdJR052Ym5OMElISmxjeUE5SUhCaGNuUnpYRzRnSUNBZ0lDQWdJQzV5WlhCc1lXTmxLQzlmTDJjc0lDY25LVnh1SUNBZ0lDQWdJQ0F1YzNCc2FYUW9Kem9uS1Z4dUlDQWdJQ0FnSUNBdWNtVmtkV05sS0NoeVpYTXNJSEFwSUQwK0lISmxjeUFxSUc1MWJTZzJNQ2tnS3lCdWRXMG9jQ2tzSUc1MWJTZ3dLU2s3WEc0Z0lDQWdjbVYwZFhKdUlDaHphV2R1SUQwOVBTQW5MU2NnUHlCdWRXMG9MVEVwSUNvZ2NtVnpJRG9nY21WektUdGNibjFjYmk4cUtseHVJQ29nYUdob2FEcHRiVHB6Y3k1emMzTmNiaUFxWEc0Z0tpQkpiblJsY201aGJDQjBlWEJsY3lCb1lXNWtiR1VnWW1sbmFXNTBJR0Z6SUc1MWJXSmxjaXdnWW1WallYVnpaU0JVVXlCallXNG5kQ0JtYVdkMWNtVWdhWFFnYjNWMExseHVJQ292WEc1bWRXNWpkR2x2YmlCemRISnBibWRwWm5sVFpYaGhaMlZ6YVcxaGJDaHViMlJsS1NCN1hHNGdJQ0FnYkdWMElIc2dkbUZzZFdVZ2ZTQTlJRzV2WkdVN1hHNGdJQ0FnYkdWMElHNTFiU0E5SUNodUtTQTlQaUJ1TzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnZG1Gc2RXVWdQVDA5SUNkaWFXZHBiblFuS1Z4dUlDQWdJQ0FnSUNCdWRXMGdQU0J1SUQwK0lFSnBaMGx1ZENodUtUdGNiaUFnSUNCbGJITmxJR2xtSUNocGMwNWhUaWgyWVd4MVpTa2dmSHdnSVdselJtbHVhWFJsS0haaGJIVmxLU2xjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE4wY21sdVoybG1lVTUxYldKbGNpaHViMlJsS1R0Y2JpQWdJQ0JzWlhRZ2MybG5iaUE5SUNjbk8xeHVJQ0FnSUdsbUlDaDJZV3gxWlNBOElEQXBJSHRjYmlBZ0lDQWdJQ0FnYzJsbmJpQTlJQ2N0Snp0Y2JpQWdJQ0FnSUNBZ2RtRnNkV1VnS2owZ2JuVnRLQzB4S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdZMjl1YzNRZ1h6WXdJRDBnYm5WdEtEWXdLVHRjYmlBZ0lDQmpiMjV6ZENCd1lYSjBjeUE5SUZ0MllXeDFaU0FsSUY4Mk1GMDdJQzh2SUhObFkyOXVaSE1zSUdsdVkyeDFaR2x1WnlCdGMxeHVJQ0FnSUdsbUlDaDJZV3gxWlNBOElEWXdLU0I3WEc0Z0lDQWdJQ0FnSUhCaGNuUnpMblZ1YzJocFpuUW9NQ2s3SUM4dklHRjBJR3hsWVhOMElHOXVaU0E2SUdseklISmxjWFZwY21Wa1hHNGdJQ0FnZlZ4dUlDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjJZV3gxWlNBOUlDaDJZV3gxWlNBdElIQmhjblJ6V3pCZEtTQXZJRjgyTUR0Y2JpQWdJQ0FnSUNBZ2NHRnlkSE11ZFc1emFHbG1kQ2gyWVd4MVpTQWxJRjgyTUNrN0lDOHZJRzFwYm5WMFpYTmNiaUFnSUNBZ0lDQWdhV1lnS0haaGJIVmxJRDQ5SURZd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaU0E5SUNoMllXeDFaU0F0SUhCaGNuUnpXekJkS1NBdklGODJNRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIQmhjblJ6TG5WdWMyaHBablFvZG1Gc2RXVXBPeUF2THlCb2IzVnljMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlBb2MybG5iaUFyWEc0Z0lDQWdJQ0FnSUhCaGNuUnpYRzRnSUNBZ0lDQWdJQ0FnSUNBdWJXRndLRzRnUFQ0Z1UzUnlhVzVuS0c0cExuQmhaRk4wWVhKMEtESXNJQ2N3SnlrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1YW05cGJpZ25PaWNwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZNREF3TURBd1hGeGtLaVF2TENBbkp5a2dMeThnSlNBMk1DQnRZWGtnYVc1MGNtOWtkV05sSUdWeWNtOXlYRzRnSUNBZ0tUdGNibjFjYm1OdmJuTjBJR2x1ZEZScGJXVWdQU0I3WEc0Z0lDQWdhV1JsYm5ScFpuazZJSFpoYkhWbElEMCtJSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdKMkpwWjJsdWRDY2dmSHdnVG5WdFltVnlMbWx6U1c1MFpXZGxjaWgyWVd4MVpTa3NYRzRnSUNBZ1pHVm1ZWFZzZERvZ2RISjFaU3hjYmlBZ0lDQjBZV2M2SUNkMFlXYzZlV0Z0YkM1dmNtY3NNakF3TWpwcGJuUW5MRnh1SUNBZ0lHWnZjbTFoZERvZ0oxUkpUVVVuTEZ4dUlDQWdJSFJsYzNRNklDOWVXeTByWFQ5Yk1DMDVYVnN3TFRsZlhTb29Qem82V3pBdE5WMC9XekF0T1YwcEt5UXZMRnh1SUNBZ0lISmxjMjlzZG1VNklDaHpkSElzSUY5dmJrVnljbTl5TENCN0lHbHVkRUZ6UW1sblNXNTBJSDBwSUQwK0lIQmhjbk5sVTJWNFlXZGxjMmx0WVd3b2MzUnlMQ0JwYm5SQmMwSnBaMGx1ZENrc1hHNGdJQ0FnYzNSeWFXNW5hV1o1T2lCemRISnBibWRwWm5sVFpYaGhaMlZ6YVcxaGJGeHVmVHRjYm1OdmJuTjBJR1pzYjJGMFZHbHRaU0E5SUh0Y2JpQWdJQ0JwWkdWdWRHbG1lVG9nZG1Gc2RXVWdQVDRnZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuYm5WdFltVnlKeXhjYmlBZ0lDQmtaV1poZFd4ME9pQjBjblZsTEZ4dUlDQWdJSFJoWnpvZ0ozUmhaenA1WVcxc0xtOXlaeXd5TURBeU9tWnNiMkYwSnl4Y2JpQWdJQ0JtYjNKdFlYUTZJQ2RVU1UxRkp5eGNiaUFnSUNCMFpYTjBPaUF2WGxzdEsxMC9XekF0T1YxYk1DMDVYMTBxS0Q4Nk9sc3dMVFZkUDFzd0xUbGRLU3RjWEM1Yk1DMDVYMTBxSkM4c1hHNGdJQ0FnY21WemIyeDJaVG9nYzNSeUlEMCtJSEJoY25ObFUyVjRZV2RsYzJsdFlXd29jM1J5TENCbVlXeHpaU2tzWEc0Z0lDQWdjM1J5YVc1bmFXWjVPaUJ6ZEhKcGJtZHBabmxUWlhoaFoyVnphVzFoYkZ4dWZUdGNibU52Ym5OMElIUnBiV1Z6ZEdGdGNDQTlJSHRjYmlBZ0lDQnBaR1Z1ZEdsbWVUb2dkbUZzZFdVZ1BUNGdkbUZzZFdVZ2FXNXpkR0Z1WTJWdlppQkVZWFJsTEZ4dUlDQWdJR1JsWm1GMWJIUTZJSFJ5ZFdVc1hHNGdJQ0FnZEdGbk9pQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZkR2x0WlhOMFlXMXdKeXhjYmlBZ0lDQXZMeUJKWmlCMGFHVWdkR2x0WlNCNmIyNWxJR2x6SUc5dGFYUjBaV1FzSUhSb1pTQjBhVzFsYzNSaGJYQWdhWE1nWVhOemRXMWxaQ0IwYnlCaVpTQnpjR1ZqYVdacFpXUWdhVzRnVlZSRExpQlVhR1VnZEdsdFpTQndZWEowWEc0Z0lDQWdMeThnYldGNUlHSmxJRzl0YVhSMFpXUWdZV3gwYjJkbGRHaGxjaXdnY21WemRXeDBhVzVuSUdsdUlHRWdaR0YwWlNCbWIzSnRZWFF1SUVsdUlITjFZMmdnWVNCallYTmxMQ0IwYUdVZ2RHbHRaU0J3WVhKMElHbHpYRzRnSUNBZ0x5OGdZWE56ZFcxbFpDQjBieUJpWlNBd01Eb3dNRG93TUZvZ0tITjBZWEowSUc5bUlHUmhlU3dnVlZSREtTNWNiaUFnSUNCMFpYTjBPaUJTWldkRmVIQW9KMTRvV3pBdE9WMTdOSDBwTFNoYk1DMDVYWHN4TERKOUtTMG9XekF0T1YxN01Td3lmU2tuSUNzZ0x5OGdXVmxaV1MxTmJTMUVaRnh1SUNBZ0lDQWdJQ0FuS0Q4Nkp5QXJJQzh2SUhScGJXVWdhWE1nYjNCMGFXOXVZV3hjYmlBZ0lDQWdJQ0FnSnlnL09uUjhWSHhiSUZ4Y1hGeDBYU3NwSnlBcklDOHZJSFFnZkNCVUlId2dkMmhwZEdWemNHRmpaVnh1SUNBZ0lDQWdJQ0FuS0Zzd0xUbGRlekVzTW4wcE9paGJNQzA1WFhzeExESjlLVG9vV3pBdE9WMTdNU3d5ZlNoY1hGeGNMbHN3TFRsZEt5ay9LU2NnS3lBdkx5QklhRHBOYlRwVGN5Z3VjM01wUDF4dUlDQWdJQ0FnSUNBbktEODZXeUJjWEZ4Y2RGMHFLRnA4V3kwclhWc3dNVEpkUDFzd0xUbGRLRDg2T2xzd0xUbGRleko5S1Q4cEtUOG5JQ3NnTHk4Z1dpQjhJQ3MxSUh3Z0xUQXpPak13WEc0Z0lDQWdJQ0FnSUNjcFB5UW5LU3hjYmlBZ0lDQnlaWE52YkhabEtITjBjaWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J0WVhSamFDQTlJSE4wY2k1dFlYUmphQ2gwYVcxbGMzUmhiWEF1ZEdWemRDazdYRzRnSUNBZ0lDQWdJR2xtSUNnaGJXRjBZMmdwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0p5RWhkR2x0WlhOMFlXMXdJR1Y0Y0dWamRITWdZU0JrWVhSbExDQnpkR0Z5ZEdsdVp5QjNhWFJvSUhsNWVYa3RiVzB0WkdRbktUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1d5d2dlV1ZoY2l3Z2JXOXVkR2dzSUdSaGVTd2dhRzkxY2l3Z2JXbHVkWFJsTENCelpXTnZibVJkSUQwZ2JXRjBZMmd1YldGd0tFNTFiV0psY2lrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxcGJHeHBjMlZqSUQwZ2JXRjBZMmhiTjEwZ1B5Qk9kVzFpWlhJb0tHMWhkR05vV3pkZElDc2dKekF3SnlrdWMzVmljM1J5S0RFc0lETXBLU0E2SURBN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JrWVhSbElEMGdSR0YwWlM1VlZFTW9lV1ZoY2l3Z2JXOXVkR2dnTFNBeExDQmtZWGtzSUdodmRYSWdmSHdnTUN3Z2JXbHVkWFJsSUh4OElEQXNJSE5sWTI5dVpDQjhmQ0F3TENCdGFXeHNhWE5sWXlrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhSNklEMGdiV0YwWTJoYk9GMDdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVpQW1KaUIwZWlBaFBUMGdKMW9uS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1pDQTlJSEJoY25ObFUyVjRZV2RsYzJsdFlXd29kSG9zSUdaaGJITmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hOWVhSb0xtRmljeWhrS1NBOElETXdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1FnS2owZ05qQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCa1lYUmxJQzA5SURZd01EQXdJQ29nWkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtVjNJRVJoZEdVb1pHRjBaU2s3WEc0Z0lDQWdmU3hjYmlBZ0lDQnpkSEpwYm1kcFpuazZJQ2g3SUhaaGJIVmxJSDBwSUQwK0lIWmhiSFZsTG5SdlNWTlBVM1J5YVc1bktDa3VjbVZ3YkdGalpTZ3ZLQ2hVTURBNk1EQXBQem93TUNrL1hGd3VNREF3V2lRdkxDQW5KeWxjYm4wN1hHNWNibVY0Y0c5eWRDQjdJR1pzYjJGMFZHbHRaU3dnYVc1MFZHbHRaU3dnZEdsdFpYTjBZVzF3SUgwN1hHNGlMQ0FpYVcxd2IzSjBJSHNnYldGd0lIMGdabkp2YlNBbkxpNHZZMjl0Ylc5dUwyMWhjQzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnVkV3hzVkdGbklIMGdabkp2YlNBbkxpNHZZMjl0Ylc5dUwyNTFiR3d1YW5Nbk8xeHVhVzF3YjNKMElIc2djMlZ4SUgwZ1puSnZiU0FuTGk0dlkyOXRiVzl1TDNObGNTNXFjeWM3WEc1cGJYQnZjblFnZXlCemRISnBibWNnZlNCbWNtOXRJQ2N1TGk5amIyMXRiMjR2YzNSeWFXNW5MbXB6Snp0Y2JtbHRjRzl5ZENCN0lHSnBibUZ5ZVNCOUlHWnliMjBnSnk0dlltbHVZWEo1TG1wekp6dGNibWx0Y0c5eWRDQjdJSFJ5ZFdWVVlXY3NJR1poYkhObFZHRm5JSDBnWm5KdmJTQW5MaTlpYjI5c0xtcHpKenRjYm1sdGNHOXlkQ0I3SUdac2IyRjBUbUZPTENCbWJHOWhkRVY0Y0N3Z1pteHZZWFFnZlNCbWNtOXRJQ2N1TDJac2IyRjBMbXB6Snp0Y2JtbHRjRzl5ZENCN0lHbHVkRUpwYml3Z2FXNTBUMk4wTENCcGJuUXNJR2x1ZEVobGVDQjlJR1p5YjIwZ0p5NHZhVzUwTG1wekp6dGNibWx0Y0c5eWRDQjdJRzFsY21kbElIMGdabkp2YlNBbkxpOXRaWEpuWlM1cWN5YzdYRzVwYlhCdmNuUWdleUJ2YldGd0lIMGdabkp2YlNBbkxpOXZiV0Z3TG1wekp6dGNibWx0Y0c5eWRDQjdJSEJoYVhKeklIMGdabkp2YlNBbkxpOXdZV2x5Y3k1cWN5YzdYRzVwYlhCdmNuUWdleUJ6WlhRZ2ZTQm1jbTl0SUNjdUwzTmxkQzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnBiblJVYVcxbExDQm1iRzloZEZScGJXVXNJSFJwYldWemRHRnRjQ0I5SUdaeWIyMGdKeTR2ZEdsdFpYTjBZVzF3TG1wekp6dGNibHh1WTI5dWMzUWdjMk5vWlcxaElEMGdXMXh1SUNBZ0lHMWhjQ3hjYmlBZ0lDQnpaWEVzWEc0Z0lDQWdjM1J5YVc1bkxGeHVJQ0FnSUc1MWJHeFVZV2NzWEc0Z0lDQWdkSEoxWlZSaFp5eGNiaUFnSUNCbVlXeHpaVlJoWnl4Y2JpQWdJQ0JwYm5SQ2FXNHNYRzRnSUNBZ2FXNTBUMk4wTEZ4dUlDQWdJR2x1ZEN4Y2JpQWdJQ0JwYm5SSVpYZ3NYRzRnSUNBZ1pteHZZWFJPWVU0c1hHNGdJQ0FnWm14dllYUkZlSEFzWEc0Z0lDQWdabXh2WVhRc1hHNGdJQ0FnWW1sdVlYSjVMRnh1SUNBZ0lHMWxjbWRsTEZ4dUlDQWdJRzl0WVhBc1hHNGdJQ0FnY0dGcGNuTXNYRzRnSUNBZ2MyVjBMRnh1SUNBZ0lHbHVkRlJwYldVc1hHNGdJQ0FnWm14dllYUlVhVzFsTEZ4dUlDQWdJSFJwYldWemRHRnRjRnh1WFR0Y2JseHVaWGh3YjNKMElIc2djMk5vWlcxaElIMDdYRzRpTENBaWFXMXdiM0owSUhzZ2JXRndJSDBnWm5KdmJTQW5MaTlqYjIxdGIyNHZiV0Z3TG1wekp6dGNibWx0Y0c5eWRDQjdJRzUxYkd4VVlXY2dmU0JtY205dElDY3VMMk52YlcxdmJpOXVkV3hzTG1wekp6dGNibWx0Y0c5eWRDQjdJSE5sY1NCOUlHWnliMjBnSnk0dlkyOXRiVzl1TDNObGNTNXFjeWM3WEc1cGJYQnZjblFnZXlCemRISnBibWNnZlNCbWNtOXRJQ2N1TDJOdmJXMXZiaTl6ZEhKcGJtY3Vhbk1uTzF4dWFXMXdiM0owSUhzZ1ltOXZiRlJoWnlCOUlHWnliMjBnSnk0dlkyOXlaUzlpYjI5c0xtcHpKenRjYm1sdGNHOXlkQ0I3SUdac2IyRjBMQ0JtYkc5aGRFVjRjQ3dnWm14dllYUk9ZVTRnZlNCbWNtOXRJQ2N1TDJOdmNtVXZabXh2WVhRdWFuTW5PMXh1YVcxd2IzSjBJSHNnYVc1MExDQnBiblJJWlhnc0lHbHVkRTlqZENCOUlHWnliMjBnSnk0dlkyOXlaUzlwYm5RdWFuTW5PMXh1YVcxd2IzSjBJSHNnYzJOb1pXMWhJSDBnWm5KdmJTQW5MaTlqYjNKbEwzTmphR1Z0WVM1cWN5YzdYRzVwYlhCdmNuUWdleUJ6WTJobGJXRWdZWE1nYzJOb1pXMWhKREVnZlNCbWNtOXRJQ2N1TDJwemIyNHZjMk5vWlcxaExtcHpKenRjYm1sdGNHOXlkQ0I3SUdKcGJtRnllU0I5SUdaeWIyMGdKeTR2ZVdGdGJDMHhMakV2WW1sdVlYSjVMbXB6Snp0Y2JtbHRjRzl5ZENCN0lHMWxjbWRsSUgwZ1puSnZiU0FuTGk5NVlXMXNMVEV1TVM5dFpYSm5aUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnZiV0Z3SUgwZ1puSnZiU0FuTGk5NVlXMXNMVEV1TVM5dmJXRndMbXB6Snp0Y2JtbHRjRzl5ZENCN0lIQmhhWEp6SUgwZ1puSnZiU0FuTGk5NVlXMXNMVEV1TVM5d1lXbHljeTVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnpZMmhsYldFZ1lYTWdjMk5vWlcxaEpESWdmU0JtY205dElDY3VMM2xoYld3dE1TNHhMM05qYUdWdFlTNXFjeWM3WEc1cGJYQnZjblFnZXlCelpYUWdmU0JtY205dElDY3VMM2xoYld3dE1TNHhMM05sZEM1cWN5YzdYRzVwYlhCdmNuUWdleUIwYVcxbGMzUmhiWEFzSUdac2IyRjBWR2x0WlN3Z2FXNTBWR2x0WlNCOUlHWnliMjBnSnk0dmVXRnRiQzB4TGpFdmRHbHRaWE4wWVcxd0xtcHpKenRjYmx4dVkyOXVjM1FnYzJOb1pXMWhjeUE5SUc1bGR5Qk5ZWEFvVzF4dUlDQWdJRnNuWTI5eVpTY3NJSE5qYUdWdFlWMHNYRzRnSUNBZ1d5ZG1ZV2xzYzJGbVpTY3NJRnR0WVhBc0lITmxjU3dnYzNSeWFXNW5YVjBzWEc0Z0lDQWdXeWRxYzI5dUp5d2djMk5vWlcxaEpERmRMRnh1SUNBZ0lGc25lV0Z0YkRFeEp5d2djMk5vWlcxaEpESmRMRnh1SUNBZ0lGc25lV0Z0YkMweExqRW5MQ0J6WTJobGJXRWtNbDFjYmwwcE8xeHVZMjl1YzNRZ2RHRm5jMEo1VG1GdFpTQTlJSHRjYmlBZ0lDQmlhVzVoY25rc1hHNGdJQ0FnWW05dmJEb2dZbTl2YkZSaFp5eGNiaUFnSUNCbWJHOWhkQ3hjYmlBZ0lDQm1iRzloZEVWNGNDeGNiaUFnSUNCbWJHOWhkRTVoVGl4Y2JpQWdJQ0JtYkc5aGRGUnBiV1VzWEc0Z0lDQWdhVzUwTEZ4dUlDQWdJR2x1ZEVobGVDeGNiaUFnSUNCcGJuUlBZM1FzWEc0Z0lDQWdhVzUwVkdsdFpTeGNiaUFnSUNCdFlYQXNYRzRnSUNBZ2JXVnlaMlVzWEc0Z0lDQWdiblZzYkRvZ2JuVnNiRlJoWnl4Y2JpQWdJQ0J2YldGd0xGeHVJQ0FnSUhCaGFYSnpMRnh1SUNBZ0lITmxjU3hjYmlBZ0lDQnpaWFFzWEc0Z0lDQWdkR2x0WlhOMFlXMXdYRzU5TzF4dVkyOXVjM1FnWTI5eVpVdHViM2R1VkdGbmN5QTlJSHRjYmlBZ0lDQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZZbWx1WVhKNUp6b2dZbWx1WVhKNUxGeHVJQ0FnSUNkMFlXYzZlV0Z0YkM1dmNtY3NNakF3TWpwdFpYSm5aU2M2SUcxbGNtZGxMRnh1SUNBZ0lDZDBZV2M2ZVdGdGJDNXZjbWNzTWpBd01qcHZiV0Z3SnpvZ2IyMWhjQ3hjYmlBZ0lDQW5kR0ZuT25saGJXd3ViM0puTERJd01ESTZjR0ZwY25Nbk9pQndZV2x5Y3l4Y2JpQWdJQ0FuZEdGbk9ubGhiV3d1YjNKbkxESXdNREk2YzJWMEp6b2djMlYwTEZ4dUlDQWdJQ2QwWVdjNmVXRnRiQzV2Y21jc01qQXdNanAwYVcxbGMzUmhiWEFuT2lCMGFXMWxjM1JoYlhCY2JuMDdYRzVtZFc1amRHbHZiaUJuWlhSVVlXZHpLR04xYzNSdmJWUmhaM01zSUhOamFHVnRZVTVoYldVc0lHRmtaRTFsY21kbFZHRm5LU0I3WEc0Z0lDQWdZMjl1YzNRZ2MyTm9aVzFoVkdGbmN5QTlJSE5qYUdWdFlYTXVaMlYwS0hOamFHVnRZVTVoYldVcE8xeHVJQ0FnSUdsbUlDaHpZMmhsYldGVVlXZHpJQ1ltSUNGamRYTjBiMjFVWVdkektTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhaR1JOWlhKblpWUmhaeUFtSmlBaGMyTm9aVzFoVkdGbmN5NXBibU5zZFdSbGN5aHRaWEpuWlNsY2JpQWdJQ0FnSUNBZ0lDQWdJRDhnYzJOb1pXMWhWR0ZuY3k1amIyNWpZWFFvYldWeVoyVXBYRzRnSUNBZ0lDQWdJQ0FnSUNBNklITmphR1Z0WVZSaFozTXVjMnhwWTJVb0tUdGNiaUFnSUNCOVhHNGdJQ0FnYkdWMElIUmhaM01nUFNCelkyaGxiV0ZVWVdkek8xeHVJQ0FnSUdsbUlDZ2hkR0ZuY3lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaGpkWE4wYjIxVVlXZHpLU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIUmhaM01nUFNCYlhUdGNiaUFnSUNBZ0lDQWdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnJaWGx6SUQwZ1FYSnlZWGt1Wm5KdmJTaHpZMmhsYldGekxtdGxlWE1vS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdVptbHNkR1Z5S0d0bGVTQTlQaUJyWlhrZ0lUMDlJQ2Q1WVcxc01URW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzV0WVhBb2EyVjVJRDArSUVwVFQwNHVjM1J5YVc1bmFXWjVLR3RsZVNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0xtcHZhVzRvSnl3Z0p5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUZWdWEyNXZkMjRnYzJOb1pXMWhJRndpSkh0elkyaGxiV0ZPWVcxbGZWd2lPeUIxYzJVZ2IyNWxJRzltSUNSN2EyVjVjMzBnYjNJZ1pHVm1hVzVsSUdOMWMzUnZiVlJoWjNNZ1lYSnlZWGxnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2hqZFhOMGIyMVVZV2R6S1NrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJSFJoWnlCdlppQmpkWE4wYjIxVVlXZHpLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHRm5jeUE5SUhSaFozTXVZMjl1WTJGMEtIUmhaeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamRYTjBiMjFVWVdkeklEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lIUmhaM01nUFNCamRYTjBiMjFVWVdkektIUmhaM011YzJ4cFkyVW9LU2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2hoWkdSTlpYSm5aVlJoWnlsY2JpQWdJQ0FnSUNBZ2RHRm5jeUE5SUhSaFozTXVZMjl1WTJGMEtHMWxjbWRsS1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR0ZuY3k1eVpXUjFZMlVvS0hSaFozTXNJSFJoWnlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjBZV2RQWW1vZ1BTQjBlWEJsYjJZZ2RHRm5JRDA5UFNBbmMzUnlhVzVuSnlBL0lIUmhaM05DZVU1aGJXVmJkR0ZuWFNBNklIUmhaenRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRjBZV2RQWW1vcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFJoWjA1aGJXVWdQU0JLVTA5T0xuTjBjbWx1WjJsbWVTaDBZV2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2EyVjVjeUE5SUU5aWFtVmpkQzVyWlhsektIUmhaM05DZVU1aGJXVXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMbTFoY0NoclpYa2dQVDRnU2xOUFRpNXpkSEpwYm1kcFpua29hMlY1S1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdWFtOXBiaWduTENBbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVlc1cmJtOTNiaUJqZFhOMGIyMGdkR0ZuSUNSN2RHRm5UbUZ0WlgwN0lIVnpaU0J2Ym1VZ2IyWWdKSHRyWlhsemZXQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hkR0ZuY3k1cGJtTnNkV1JsY3loMFlXZFBZbW9wS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdkR0ZuY3k1d2RYTm9LSFJoWjA5aWFpazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBZV2R6TzF4dUlDQWdJSDBzSUZ0ZEtUdGNibjFjYmx4dVpYaHdiM0owSUhzZ1kyOXlaVXR1YjNkdVZHRm5jeXdnWjJWMFZHRm5jeUI5TzF4dUlpd2dJbWx0Y0c5eWRDQjdJRTFCVUN3Z1UwTkJURUZTTENCVFJWRWdmU0JtY205dElDY3VMaTl1YjJSbGN5OXBaR1Z1ZEdsMGVTNXFjeWM3WEc1cGJYQnZjblFnZXlCdFlYQWdmU0JtY205dElDY3VMMk52YlcxdmJpOXRZWEF1YW5Nbk8xeHVhVzF3YjNKMElIc2djMlZ4SUgwZ1puSnZiU0FuTGk5amIyMXRiMjR2YzJWeExtcHpKenRjYm1sdGNHOXlkQ0I3SUhOMGNtbHVaeUI5SUdaeWIyMGdKeTR2WTI5dGJXOXVMM04wY21sdVp5NXFjeWM3WEc1cGJYQnZjblFnZXlCblpYUlVZV2R6TENCamIzSmxTMjV2ZDI1VVlXZHpJSDBnWm5KdmJTQW5MaTkwWVdkekxtcHpKenRjYmx4dVkyOXVjM1FnYzI5eWRFMWhjRVZ1ZEhKcFpYTkNlVXRsZVNBOUlDaGhMQ0JpS1NBOVBpQmhMbXRsZVNBOElHSXVhMlY1SUQ4Z0xURWdPaUJoTG10bGVTQStJR0l1YTJWNUlEOGdNU0E2SURBN1hHNWpiR0Z6Y3lCVFkyaGxiV0VnZTF4dUlDQWdJR052Ym5OMGNuVmpkRzl5S0hzZ1kyOXRjR0YwTENCamRYTjBiMjFVWVdkekxDQnRaWEpuWlN3Z2NtVnpiMngyWlV0dWIzZHVWR0ZuY3l3Z2MyTm9aVzFoTENCemIzSjBUV0Z3Ulc1MGNtbGxjeXdnZEc5VGRISnBibWRFWldaaGRXeDBjeUI5S1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5dGNHRjBJRDBnUVhKeVlYa3VhWE5CY25KaGVTaGpiMjF3WVhRcFhHNGdJQ0FnSUNBZ0lDQWdJQ0EvSUdkbGRGUmhaM01vWTI5dGNHRjBMQ0FuWTI5dGNHRjBKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lEb2dZMjl0Y0dGMFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1B5Qm5aWFJVWVdkektHNTFiR3dzSUdOdmJYQmhkQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUc1MWJHdzdYRzRnSUNBZ0lDQWdJSFJvYVhNdWJtRnRaU0E5SUNoMGVYQmxiMllnYzJOb1pXMWhJRDA5UFNBbmMzUnlhVzVuSnlBbUppQnpZMmhsYldFcElIeDhJQ2RqYjNKbEp6dGNiaUFnSUNBZ0lDQWdkR2hwY3k1cmJtOTNibFJoWjNNZ1BTQnlaWE52YkhabFMyNXZkMjVVWVdkeklEOGdZMjl5WlV0dWIzZHVWR0ZuY3lBNklIdDlPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuUmhaM01nUFNCblpYUlVZV2R6S0dOMWMzUnZiVlJoWjNNc0lIUm9hWE11Ym1GdFpTd2diV1Z5WjJVcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5SdlUzUnlhVzVuVDNCMGFXOXVjeUE5SUhSdlUzUnlhVzVuUkdWbVlYVnNkSE1nUHo4Z2JuVnNiRHRjYmlBZ0lDQWdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIUm9hWE1zSUUxQlVDd2dleUIyWVd4MVpUb2diV0Z3SUgwcE8xeHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEdocGN5d2dVME5CVEVGU0xDQjdJSFpoYkhWbE9pQnpkSEpwYm1jZ2ZTazdYRzRnSUNBZ0lDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMGFHbHpMQ0JUUlZFc0lIc2dkbUZzZFdVNklITmxjU0I5S1R0Y2JpQWdJQ0FnSUNBZ0x5OGdWWE5sWkNCaWVTQmpjbVZoZEdWTllYQW9LVnh1SUNBZ0lDQWdJQ0IwYUdsekxuTnZjblJOWVhCRmJuUnlhV1Z6SUQxY2JpQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dWdlppQnpiM0owVFdGd1JXNTBjbWxsY3lBOVBUMGdKMloxYm1OMGFXOXVKMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRDhnYzI5eWRFMWhjRVZ1ZEhKcFpYTmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJSE52Y25STllYQkZiblJ5YVdWeklEMDlQU0IwY25WbFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRDhnYzI5eWRFMWhjRVZ1ZEhKcFpYTkNlVXRsZVZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJRzUxYkd3N1hHNGdJQ0FnZlZ4dUlDQWdJR05zYjI1bEtDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmpiM0I1SUQwZ1QySnFaV04wTG1OeVpXRjBaU2hUWTJobGJXRXVjSEp2ZEc5MGVYQmxMQ0JQWW1wbFkzUXVaMlYwVDNkdVVISnZjR1Z5ZEhsRVpYTmpjbWx3ZEc5eWN5aDBhR2x6S1NrN1hHNGdJQ0FnSUNBZ0lHTnZjSGt1ZEdGbmN5QTlJSFJvYVhNdWRHRm5jeTV6YkdsalpTZ3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMjl3ZVR0Y2JpQWdJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQjdJRk5qYUdWdFlTQjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lHbHpUbTlrWlNCOUlHWnliMjBnSnk0dUwyNXZaR1Z6TDJsa1pXNTBhWFI1TG1wekp6dGNibWx0Y0c5eWRDQjdJR055WldGMFpWTjBjbWx1WjJsbWVVTnZiblJsZUhRc0lITjBjbWx1WjJsbWVTQjlJR1p5YjIwZ0p5NHZjM1J5YVc1bmFXWjVMbXB6Snp0Y2JtbHRjRzl5ZENCN0lHbHVaR1Z1ZEVOdmJXMWxiblFzSUd4cGJtVkRiMjF0Wlc1MElIMGdabkp2YlNBbkxpOXpkSEpwYm1kcFpubERiMjF0Wlc1MExtcHpKenRjYmx4dVpuVnVZM1JwYjI0Z2MzUnlhVzVuYVdaNVJHOWpkVzFsYm5Rb1pHOWpMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdZMjl1YzNRZ2JHbHVaWE1nUFNCYlhUdGNiaUFnSUNCc1pYUWdhR0Z6UkdseVpXTjBhWFpsY3lBOUlHOXdkR2x2Ym5NdVpHbHlaV04wYVhabGN5QTlQVDBnZEhKMVpUdGNiaUFnSUNCcFppQW9iM0IwYVc5dWN5NWthWEpsWTNScGRtVnpJQ0U5UFNCbVlXeHpaU0FtSmlCa2IyTXVaR2x5WldOMGFYWmxjeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrYVhJZ1BTQmtiMk11WkdseVpXTjBhWFpsY3k1MGIxTjBjbWx1Wnloa2IyTXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb1pHbHlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNhVzVsY3k1d2RYTm9LR1JwY2lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JvWVhORWFYSmxZM1JwZG1WeklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaGtiMk11WkdseVpXTjBhWFpsY3k1a2IyTlRkR0Z5ZENsY2JpQWdJQ0FnSUNBZ0lDQWdJR2hoYzBScGNtVmpkR2wyWlhNZ1BTQjBjblZsTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvYUdGelJHbHlaV04wYVhabGN5bGNiaUFnSUNBZ0lDQWdiR2x1WlhNdWNIVnphQ2duTFMwdEp5azdYRzRnSUNBZ1kyOXVjM1FnWTNSNElEMGdZM0psWVhSbFUzUnlhVzVuYVdaNVEyOXVkR1Y0ZENoa2IyTXNJRzl3ZEdsdmJuTXBPMXh1SUNBZ0lHTnZibk4wSUhzZ1kyOXRiV1Z1ZEZOMGNtbHVaeUI5SUQwZ1kzUjRMbTl3ZEdsdmJuTTdYRzRnSUNBZ2FXWWdLR1J2WXk1amIyMXRaVzUwUW1WbWIzSmxLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHNhVzVsY3k1c1pXNW5kR2dnSVQwOUlERXBYRzRnSUNBZ0lDQWdJQ0FnSUNCc2FXNWxjeTUxYm5Ob2FXWjBLQ2NuS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTNNZ1BTQmpiMjF0Wlc1MFUzUnlhVzVuS0dSdll5NWpiMjF0Wlc1MFFtVm1iM0psS1R0Y2JpQWdJQ0FnSUNBZ2JHbHVaWE11ZFc1emFHbG1kQ2hwYm1SbGJuUkRiMjF0Wlc1MEtHTnpMQ0FuSnlrcE8xeHVJQ0FnSUgxY2JpQWdJQ0JzWlhRZ1kyaHZiWEJMWldWd0lEMGdabUZzYzJVN1hHNGdJQ0FnYkdWMElHTnZiblJsYm5SRGIyMXRaVzUwSUQwZ2JuVnNiRHRjYmlBZ0lDQnBaaUFvWkc5akxtTnZiblJsYm5SektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNocGMwNXZaR1VvWkc5akxtTnZiblJsYm5SektTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR1J2WXk1amIyNTBaVzUwY3k1emNHRmpaVUpsWm05eVpTQW1KaUJvWVhORWFYSmxZM1JwZG1WektWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHBibVZ6TG5CMWMyZ29KeWNwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dSdll5NWpiMjUwWlc1MGN5NWpiMjF0Wlc1MFFtVm1iM0psS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWTNNZ1BTQmpiMjF0Wlc1MFUzUnlhVzVuS0dSdll5NWpiMjUwWlc1MGN5NWpiMjF0Wlc1MFFtVm1iM0psS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2FXNWxjeTV3ZFhOb0tHbHVaR1Z1ZEVOdmJXMWxiblFvWTNNc0lDY25LU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QjBiM0F0YkdWMlpXd2dZbXh2WTJzZ2MyTmhiR0Z5Y3lCdVpXVmtJSFJ2SUdKbElHbHVaR1Z1ZEdWa0lHbG1JR1p2Ykd4dmQyVmtJR0o1SUdFZ1kyOXRiV1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZM1I0TG1admNtTmxRbXh2WTJ0SmJtUmxiblFnUFNBaElXUnZZeTVqYjIxdFpXNTBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Z1ZEVOdmJXMWxiblFnUFNCa2IyTXVZMjl1ZEdWdWRITXVZMjl0YldWdWREdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JqYjI1emRDQnZia05vYjIxd1MyVmxjQ0E5SUdOdmJuUmxiblJEYjIxdFpXNTBJRDhnZFc1a1pXWnBibVZrSURvZ0tDa2dQVDRnS0dOb2IyMXdTMlZsY0NBOUlIUnlkV1VwTzF4dUlDQWdJQ0FnSUNCc1pYUWdZbTlrZVNBOUlITjBjbWx1WjJsbWVTaGtiMk11WTI5dWRHVnVkSE1zSUdOMGVDd2dLQ2tnUFQ0Z0tHTnZiblJsYm5SRGIyMXRaVzUwSUQwZ2JuVnNiQ2tzSUc5dVEyaHZiWEJMWldWd0tUdGNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJuUmxiblJEYjIxdFpXNTBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ1ltOWtlU0FyUFNCc2FXNWxRMjl0YldWdWRDaGliMlI1TENBbkp5d2dZMjl0YldWdWRGTjBjbWx1WnloamIyNTBaVzUwUTI5dGJXVnVkQ2twTzF4dUlDQWdJQ0FnSUNCcFppQW9LR0p2WkhsYk1GMGdQVDA5SUNkOEp5QjhmQ0JpYjJSNVd6QmRJRDA5UFNBblBpY3BJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQnNhVzVsYzF0c2FXNWxjeTVzWlc1bmRHZ2dMU0F4WFNBOVBUMGdKeTB0TFNjcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklGUnZjQzFzWlhabGJDQmliRzlqYXlCelkyRnNZWEp6SUhkcGRHZ2dZU0J3Y21WalpXUnBibWNnWkc5aklHMWhjbXRsY2lCdmRXZG9kQ0IwYnlCMWMyVWdkR2hsWEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJ6WVcxbElHeHBibVVnWm05eUlIUm9aV2x5SUdobFlXUmxjaTVjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHBibVZ6VzJ4cGJtVnpMbXhsYm1kMGFDQXRJREZkSUQwZ1lDMHRMU0FrZTJKdlpIbDlZRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNCc2FXNWxjeTV3ZFhOb0tHSnZaSGtwTzF4dUlDQWdJSDFjYmlBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2JHbHVaWE11Y0hWemFDaHpkSEpwYm1kcFpua29aRzlqTG1OdmJuUmxiblJ6TENCamRIZ3BLVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLR1J2WXk1a2FYSmxZM1JwZG1WelB5NWtiMk5GYm1RcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0dSdll5NWpiMjF0Wlc1MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqY3lBOUlHTnZiVzFsYm5SVGRISnBibWNvWkc5akxtTnZiVzFsYm5RcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTnpMbWx1WTJ4MVpHVnpLQ2RjWEc0bktTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hwYm1WekxuQjFjMmdvSnk0dUxpY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hwYm1WekxuQjFjMmdvYVc1a1pXNTBRMjl0YldWdWRDaGpjeXdnSnljcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHBibVZ6TG5CMWMyZ29ZQzR1TGlBa2UyTnpmV0FwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHbHVaWE11Y0hWemFDZ25MaTR1SnlrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJR3hsZENCa1l5QTlJR1J2WXk1amIyMXRaVzUwTzF4dUlDQWdJQ0FnSUNCcFppQW9aR01nSmlZZ1kyaHZiWEJMWldWd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdNZ1BTQmtZeTV5WlhCc1lXTmxLQzllWEZ4dUt5OHNJQ2NuS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1JqS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0tDRmphRzl0Y0V0bFpYQWdmSHdnWTI5dWRHVnVkRU52YlcxbGJuUXBJQ1ltSUd4cGJtVnpXMnhwYm1WekxteGxibWQwYUNBdElERmRJQ0U5UFNBbkp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNhVzVsY3k1d2RYTm9LQ2NuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hwYm1WekxuQjFjMmdvYVc1a1pXNTBRMjl0YldWdWRDaGpiMjF0Wlc1MFUzUnlhVzVuS0dSaktTd2dKeWNwS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdiR2x1WlhNdWFtOXBiaWduWEZ4dUp5a2dLeUFuWEZ4dUp6dGNibjFjYmx4dVpYaHdiM0owSUhzZ2MzUnlhVzVuYVdaNVJHOWpkVzFsYm5RZ2ZUdGNiaUlzSUNKcGJYQnZjblFnZXlCQmJHbGhjeUI5SUdaeWIyMGdKeTR1TDI1dlpHVnpMMEZzYVdGekxtcHpKenRjYm1sdGNHOXlkQ0I3SUdselJXMXdkSGxRWVhSb0xDQmpiMnhzWldOMGFXOXVSbkp2YlZCaGRHZ2dmU0JtY205dElDY3VMaTl1YjJSbGN5OURiMnhzWldOMGFXOXVMbXB6Snp0Y2JtbHRjRzl5ZENCN0lFNVBSRVZmVkZsUVJTd2dSRTlETENCcGMwNXZaR1VzSUdselEyOXNiR1ZqZEdsdmJpd2dhWE5UWTJGc1lYSWdmU0JtY205dElDY3VMaTl1YjJSbGN5OXBaR1Z1ZEdsMGVTNXFjeWM3WEc1cGJYQnZjblFnZXlCUVlXbHlJSDBnWm5KdmJTQW5MaTR2Ym05a1pYTXZVR0ZwY2k1cWN5YzdYRzVwYlhCdmNuUWdleUIwYjBwVElIMGdabkp2YlNBbkxpNHZibTlrWlhNdmRHOUtVeTVxY3ljN1hHNXBiWEJ2Y25RZ2V5QlRZMmhsYldFZ2ZTQm1jbTl0SUNjdUxpOXpZMmhsYldFdlUyTm9aVzFoTG1wekp6dGNibWx0Y0c5eWRDQjdJSE4wY21sdVoybG1lVVJ2WTNWdFpXNTBJSDBnWm5KdmJTQW5MaTR2YzNSeWFXNW5hV1o1TDNOMGNtbHVaMmxtZVVSdlkzVnRaVzUwTG1wekp6dGNibWx0Y0c5eWRDQjdJR0Z1WTJodmNrNWhiV1Z6TENCbWFXNWtUbVYzUVc1amFHOXlMQ0JqY21WaGRHVk9iMlJsUVc1amFHOXljeUI5SUdaeWIyMGdKeTR2WVc1amFHOXljeTVxY3ljN1hHNXBiWEJ2Y25RZ2V5QmhjSEJzZVZKbGRtbDJaWElnZlNCbWNtOXRJQ2N1TDJGd2NHeDVVbVYyYVhabGNpNXFjeWM3WEc1cGJYQnZjblFnZXlCamNtVmhkR1ZPYjJSbElIMGdabkp2YlNBbkxpOWpjbVZoZEdWT2IyUmxMbXB6Snp0Y2JtbHRjRzl5ZENCN0lFUnBjbVZqZEdsMlpYTWdmU0JtY205dElDY3VMMlJwY21WamRHbDJaWE11YW5Nbk8xeHVYRzVqYkdGemN5QkViMk4xYldWdWRDQjdYRzRnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9kbUZzZFdVc0lISmxjR3hoWTJWeUxDQnZjSFJwYjI1ektTQjdYRzRnSUNBZ0lDQWdJQzhxS2lCQklHTnZiVzFsYm5RZ1ltVm1iM0psSUhSb2FYTWdSRzlqZFcxbGJuUWdLaTljYmlBZ0lDQWdJQ0FnZEdocGN5NWpiMjF0Wlc1MFFtVm1iM0psSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnTHlvcUlFRWdZMjl0YldWdWRDQnBiVzFsWkdsaGRHVnNlU0JoWm5SbGNpQjBhR2x6SUVSdlkzVnRaVzUwSUNvdlhHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5dGJXVnVkQ0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJQzhxS2lCRmNuSnZjbk1nWlc1amIzVnVkR1Z5WldRZ1pIVnlhVzVuSUhCaGNuTnBibWN1SUNvdlhHNGdJQ0FnSUNBZ0lIUm9hWE11WlhKeWIzSnpJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDOHFLaUJYWVhKdWFXNW5jeUJsYm1OdmRXNTBaWEpsWkNCa2RYSnBibWNnY0dGeWMybHVaeTRnS2k5Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzWVhKdWFXNW5jeUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEdocGN5d2dUazlFUlY5VVdWQkZMQ0I3SUhaaGJIVmxPaUJFVDBNZ2ZTazdYRzRnSUNBZ0lDQWdJR3hsZENCZmNtVndiR0ZqWlhJZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlISmxjR3hoWTJWeUlEMDlQU0FuWm5WdVkzUnBiMjRuSUh4OElFRnljbUY1TG1selFYSnlZWGtvY21Wd2JHRmpaWElwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JmY21Wd2JHRmpaWElnUFNCeVpYQnNZV05sY2p0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaHZjSFJwYjI1eklEMDlQU0IxYm1SbFptbHVaV1FnSmlZZ2NtVndiR0ZqWlhJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUc5d2RHbHZibk1nUFNCeVpYQnNZV05sY2p0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsY0d4aFkyVnlJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUc5d2RDQTlJRTlpYW1WamRDNWhjM05wWjI0b2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVc1MFFYTkNhV2RKYm5RNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdhMlZsY0ZOdmRYSmpaVlJ2YTJWdWN6b2dabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYjJkTVpYWmxiRG9nSjNkaGNtNG5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NISmxkSFI1UlhKeWIzSnpPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSeWFXTjBPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSeWFXNW5TMlY1Y3pvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjFibWx4ZFdWTFpYbHpPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1WeWMybHZiam9nSnpFdU1pZGNiaUFnSUNBZ0lDQWdmU3dnYjNCMGFXOXVjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViM0IwYVc5dWN5QTlJRzl3ZER0Y2JpQWdJQ0FnSUNBZ2JHVjBJSHNnZG1WeWMybHZiaUI5SUQwZ2IzQjBPMXh1SUNBZ0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3o4dVgyUnBjbVZqZEdsMlpYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WkdseVpXTjBhWFpsY3lBOUlHOXdkR2x2Ym5NdVgyUnBjbVZqZEdsMlpYTXVZWFJFYjJOMWJXVnVkQ2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXVaR2x5WldOMGFYWmxjeTU1WVcxc0xtVjRjR3hwWTJsMEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmxjbk5wYjI0Z1BTQjBhR2x6TG1ScGNtVmpkR2wyWlhNdWVXRnRiQzUyWlhKemFXOXVPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVaR2x5WldOMGFYWmxjeUE5SUc1bGR5QkVhWEpsWTNScGRtVnpLSHNnZG1WeWMybHZiaUI5S1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV6WlhSVFkyaGxiV0VvZG1WeWMybHZiaXdnYjNCMGFXOXVjeWs3WEc0Z0lDQWdJQ0FnSUM4dklFQjBjeTFsZUhCbFkzUXRaWEp5YjNJZ1YyVWdZMkZ1SjNRZ2NtVmhiR3g1SUd0dWIzY2dkR2hoZENCMGFHbHpJRzFoZEdOb1pYTWdRMjl1ZEdWdWRITXVYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXVkR1Z1ZEhNZ1BWeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdQVDA5SUhWdVpHVm1hVzVsWkNBL0lHNTFiR3dnT2lCMGFHbHpMbU55WldGMFpVNXZaR1VvZG1Gc2RXVXNJRjl5WlhCc1lXTmxjaXdnYjNCMGFXOXVjeWs3WEc0Z0lDQWdmVnh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRU55WldGMFpTQmhJR1JsWlhBZ1kyOXdlU0J2WmlCMGFHbHpJRVJ2WTNWdFpXNTBJR0Z1WkNCcGRITWdZMjl1ZEdWdWRITXVYRzRnSUNBZ0lDcGNiaUFnSUNBZ0tpQkRkWE4wYjIwZ1RtOWtaU0IyWVd4MVpYTWdkR2hoZENCcGJtaGxjbWwwSUdaeWIyMGdZRTlpYW1WamRHQWdjM1JwYkd3Z2NtVm1aWElnZEc4Z2RHaGxhWElnYjNKcFoybHVZV3dnYVc1emRHRnVZMlZ6TGx4dUlDQWdJQ0FxTDF4dUlDQWdJR05zYjI1bEtDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmpiM0I1SUQwZ1QySnFaV04wTG1OeVpXRjBaU2hFYjJOMWJXVnVkQzV3Y205MGIzUjVjR1VzSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRnRPVDBSRlgxUlpVRVZkT2lCN0lIWmhiSFZsT2lCRVQwTWdmVnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ1kyOXdlUzVqYjIxdFpXNTBRbVZtYjNKbElEMGdkR2hwY3k1amIyMXRaVzUwUW1WbWIzSmxPMXh1SUNBZ0lDQWdJQ0JqYjNCNUxtTnZiVzFsYm5RZ1BTQjBhR2x6TG1OdmJXMWxiblE3WEc0Z0lDQWdJQ0FnSUdOdmNIa3VaWEp5YjNKeklEMGdkR2hwY3k1bGNuSnZjbk11YzJ4cFkyVW9LVHRjYmlBZ0lDQWdJQ0FnWTI5d2VTNTNZWEp1YVc1bmN5QTlJSFJvYVhNdWQyRnlibWx1WjNNdWMyeHBZMlVvS1R0Y2JpQWdJQ0FnSUNBZ1kyOXdlUzV2Y0hScGIyNXpJRDBnVDJKcVpXTjBMbUZ6YzJsbmJpaDdmU3dnZEdocGN5NXZjSFJwYjI1ektUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVaR2x5WldOMGFYWmxjeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZjSGt1WkdseVpXTjBhWFpsY3lBOUlIUm9hWE11WkdseVpXTjBhWFpsY3k1amJHOXVaU2dwTzF4dUlDQWdJQ0FnSUNCamIzQjVMbk5qYUdWdFlTQTlJSFJvYVhNdWMyTm9aVzFoTG1Oc2IyNWxLQ2s3WEc0Z0lDQWdJQ0FnSUM4dklFQjBjeTFsZUhCbFkzUXRaWEp5YjNJZ1YyVWdZMkZ1SjNRZ2NtVmhiR3g1SUd0dWIzY2dkR2hoZENCMGFHbHpJRzFoZEdOb1pYTWdRMjl1ZEdWdWRITXVYRzRnSUNBZ0lDQWdJR052Y0hrdVkyOXVkR1Z1ZEhNZ1BTQnBjMDV2WkdVb2RHaHBjeTVqYjI1MFpXNTBjeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lEOGdkR2hwY3k1amIyNTBaVzUwY3k1amJHOXVaU2hqYjNCNUxuTmphR1Z0WVNsY2JpQWdJQ0FnSUNBZ0lDQWdJRG9nZEdocGN5NWpiMjUwWlc1MGN6dGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVjbUZ1WjJVcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjNCNUxuSmhibWRsSUQwZ2RHaHBjeTV5WVc1blpTNXpiR2xqWlNncE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOXdlVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5b3FJRUZrWkhNZ1lTQjJZV3gxWlNCMGJ5QjBhR1VnWkc5amRXMWxiblF1SUNvdlhHNGdJQ0FnWVdSa0tIWmhiSFZsS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hoYzNObGNuUkRiMnhzWldOMGFXOXVLSFJvYVhNdVkyOXVkR1Z1ZEhNcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpiMjUwWlc1MGN5NWhaR1FvZG1Gc2RXVXBPMXh1SUNBZ0lIMWNiaUFnSUNBdktpb2dRV1JrY3lCaElIWmhiSFZsSUhSdklIUm9aU0JrYjJOMWJXVnVkQzRnS2k5Y2JpQWdJQ0JoWkdSSmJpaHdZWFJvTENCMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZWE56WlhKMFEyOXNiR1ZqZEdsdmJpaDBhR2x6TG1OdmJuUmxiblJ6S1NsY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkyOXVkR1Z1ZEhNdVlXUmtTVzRvY0dGMGFDd2dkbUZzZFdVcE8xeHVJQ0FnSUgxY2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCRGNtVmhkR1VnWVNCdVpYY2dZRUZzYVdGellDQnViMlJsTENCbGJuTjFjbWx1WnlCMGFHRjBJSFJvWlNCMFlYSm5aWFFnWUc1dlpHVmdJR2hoY3lCMGFHVWdjbVZ4ZFdseVpXUWdZVzVqYUc5eUxseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1NXWWdZRzV2WkdWZ0lHRnNjbVZoWkhrZ2FHRnpJR0Z1SUdGdVkyaHZjaXdnWUc1aGJXVmdJR2x6SUdsbmJtOXlaV1F1WEc0Z0lDQWdJQ29nVDNSb1pYSjNhWE5sTENCMGFHVWdZRzV2WkdVdVlXNWphRzl5WUNCMllXeDFaU0IzYVd4c0lHSmxJSE5sZENCMGJ5QmdibUZ0WldBc1hHNGdJQ0FnSUNvZ2IzSWdhV1lnWVc0Z1lXNWphRzl5SUhkcGRHZ2dkR2hoZENCdVlXMWxJR2x6SUdGc2NtVmhaSGtnY0hKbGMyVnVkQ0JwYmlCMGFHVWdaRzlqZFcxbGJuUXNYRzRnSUNBZ0lDb2dZRzVoYldWZ0lIZHBiR3dnWW1VZ2RYTmxaQ0JoY3lCaElIQnlaV1pwZUNCbWIzSWdZU0J1WlhjZ2RXNXBjWFZsSUdGdVkyaHZjaTVjYmlBZ0lDQWdLaUJKWmlCZ2JtRnRaV0FnYVhNZ2RXNWtaV1pwYm1Wa0xDQjBhR1VnWjJWdVpYSmhkR1ZrSUdGdVkyaHZjaUIzYVd4c0lIVnpaU0FuWVNjZ1lYTWdZU0J3Y21WbWFYZ3VYRzRnSUNBZ0lDb3ZYRzRnSUNBZ1kzSmxZWFJsUVd4cFlYTW9ibTlrWlN3Z2JtRnRaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9JVzV2WkdVdVlXNWphRzl5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQndjbVYySUQwZ1lXNWphRzl5VG1GdFpYTW9kR2hwY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J1YjJSbExtRnVZMmh2Y2lBOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElFQjBlWEJsYzJOeWFYQjBMV1Z6YkdsdWRDOXdjbVZtWlhJdGJuVnNiR2x6YUMxamIyRnNaWE5qYVc1blhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lXNWhiV1VnZkh3Z2NISmxkaTVvWVhNb2JtRnRaU2tnUHlCbWFXNWtUbVYzUVc1amFHOXlLRzVoYldVZ2ZId2dKMkVuTENCd2NtVjJLU0E2SUc1aGJXVTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzVsZHlCQmJHbGhjeWh1YjJSbExtRnVZMmh2Y2lrN1hHNGdJQ0FnZlZ4dUlDQWdJR055WldGMFpVNXZaR1VvZG1Gc2RXVXNJSEpsY0d4aFkyVnlMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQmZjbVZ3YkdGalpYSWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NtVndiR0ZqWlhJZ1BUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbElEMGdjbVZ3YkdGalpYSXVZMkZzYkNoN0lDY25PaUIyWVd4MVpTQjlMQ0FuSnl3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdYM0psY0d4aFkyVnlJRDBnY21Wd2JHRmpaWEk3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2h5WlhCc1lXTmxjaWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHdGxlVlJ2VTNSeUlEMGdLSFlwSUQwK0lIUjVjR1Z2WmlCMklEMDlQU0FuYm5WdFltVnlKeUI4ZkNCMklHbHVjM1JoYm1ObGIyWWdVM1J5YVc1bklIeDhJSFlnYVc1emRHRnVZMlZ2WmlCT2RXMWlaWEk3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCaGMxTjBjaUE5SUhKbGNHeGhZMlZ5TG1acGJIUmxjaWhyWlhsVWIxTjBjaWt1YldGd0tGTjBjbWx1WnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1lYTlRkSEl1YkdWdVozUm9JRDRnTUNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYQnNZV05sY2lBOUlISmxjR3hoWTJWeUxtTnZibU5oZENoaGMxTjBjaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmZjbVZ3YkdGalpYSWdQU0J5WlhCc1lXTmxjanRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNodmNIUnBiMjV6SUQwOVBTQjFibVJsWm1sdVpXUWdKaVlnY21Wd2JHRmpaWElwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzl3ZEdsdmJuTWdQU0J5WlhCc1lXTmxjanRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxjR3hoWTJWeUlEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSHNnWVd4cFlYTkVkWEJzYVdOaGRHVlBZbXBsWTNSekxDQmhibU5vYjNKUWNtVm1hWGdzSUdac2IzY3NJR3RsWlhCVmJtUmxabWx1WldRc0lHOXVWR0ZuVDJKcUxDQjBZV2NnZlNBOUlHOXdkR2x2Ym5NZ1B6OGdlMzA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSHNnYjI1QmJtTm9iM0lzSUhObGRFRnVZMmh2Y25Nc0lITnZkWEpqWlU5aWFtVmpkSE1nZlNBOUlHTnlaV0YwWlU1dlpHVkJibU5vYjNKektIUm9hWE1zSUZ4dUlDQWdJQ0FnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwzQnlaV1psY2kxdWRXeHNhWE5vTFdOdllXeGxjMk5wYm1kY2JpQWdJQ0FnSUNBZ1lXNWphRzl5VUhKbFptbDRJSHg4SUNkaEp5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElHTjBlQ0E5SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZzYVdGelJIVndiR2xqWVhSbFQySnFaV04wY3pvZ1lXeHBZWE5FZFhCc2FXTmhkR1ZQWW1wbFkzUnpJRDgvSUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCclpXVndWVzVrWldacGJtVmtPaUJyWldWd1ZXNWtaV1pwYm1Wa0lEOC9JR1poYkhObExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYjI1QmJtTm9iM0lzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnZibFJoWjA5aWFpeGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGNHeGhZMlZ5T2lCZmNtVndiR0ZqWlhJc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6WTJobGJXRTZJSFJvYVhNdWMyTm9aVzFoTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjMjkxY21ObFQySnFaV04wYzF4dUlDQWdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdWIyUmxJRDBnWTNKbFlYUmxUbTlrWlNoMllXeDFaU3dnZEdGbkxDQmpkSGdwTzF4dUlDQWdJQ0FnSUNCcFppQW9abXh2ZHlBbUppQnBjME52Ykd4bFkzUnBiMjRvYm05a1pTa3BYRzRnSUNBZ0lDQWdJQ0FnSUNCdWIyUmxMbVpzYjNjZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNCelpYUkJibU5vYjNKektDazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnViMlJsTzF4dUlDQWdJSDFjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJEYjI1MlpYSjBJR0VnYTJWNUlHRnVaQ0JoSUhaaGJIVmxJR2x1ZEc4Z1lTQmdVR0ZwY21BZ2RYTnBibWNnZEdobElHTjFjbkpsYm5RZ2MyTm9aVzFoTEZ4dUlDQWdJQ0FxSUhKbFkzVnljMmwyWld4NUlIZHlZWEJ3YVc1bklHRnNiQ0IyWVd4MVpYTWdZWE1nWUZOallXeGhjbUFnYjNJZ1lFTnZiR3hsWTNScGIyNWdJRzV2WkdWekxseHVJQ0FnSUNBcUwxeHVJQ0FnSUdOeVpXRjBaVkJoYVhJb2EyVjVMQ0IyWVd4MVpTd2diM0IwYVc5dWN5QTlJSHQ5S1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdzZ1BTQjBhR2x6TG1OeVpXRjBaVTV2WkdVb2EyVjVMQ0J1ZFd4c0xDQnZjSFJwYjI1ektUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RpQTlJSFJvYVhNdVkzSmxZWFJsVG05a1pTaDJZV3gxWlN3Z2JuVnNiQ3dnYjNCMGFXOXVjeWs3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VHRnBjaWhyTENCMktUdGNiaUFnSUNCOVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNvZ1VtVnRiM1psY3lCaElIWmhiSFZsSUdaeWIyMGdkR2hsSUdSdlkzVnRaVzUwTGx4dUlDQWdJQ0FxSUVCeVpYUjFjbTV6SUdCMGNuVmxZQ0JwWmlCMGFHVWdhWFJsYlNCM1lYTWdabTkxYm1RZ1lXNWtJSEpsYlc5MlpXUXVYRzRnSUNBZ0lDb3ZYRzRnSUNBZ1pHVnNaWFJsS0d0bGVTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZWE56WlhKMFEyOXNiR1ZqZEdsdmJpaDBhR2x6TG1OdmJuUmxiblJ6S1NBL0lIUm9hWE11WTI5dWRHVnVkSE11WkdWc1pYUmxLR3RsZVNrZ09pQm1ZV3h6WlR0Y2JpQWdJQ0I5WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nVW1WdGIzWmxjeUJoSUhaaGJIVmxJR1p5YjIwZ2RHaGxJR1J2WTNWdFpXNTBMbHh1SUNBZ0lDQXFJRUJ5WlhSMWNtNXpJR0IwY25WbFlDQnBaaUIwYUdVZ2FYUmxiU0IzWVhNZ1ptOTFibVFnWVc1a0lISmxiVzkyWldRdVhHNGdJQ0FnSUNvdlhHNGdJQ0FnWkdWc1pYUmxTVzRvY0dGMGFDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2FYTkZiWEIwZVZCaGRHZ29jR0YwYUNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1OdmJuUmxiblJ6SUQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1FIUnpMV1Y0Y0dWamRDMWxjbkp2Y2lCUWNtVnpkVzFsWkNCcGJYQnZjM05wWW14bElHbG1JRk4wY21samRDQmxlSFJsYm1SeklHWmhiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1OdmJuUmxiblJ6SUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoYzNObGNuUkRiMnhzWldOMGFXOXVLSFJvYVhNdVkyOXVkR1Z1ZEhNcFhHNGdJQ0FnSUNBZ0lDQWdJQ0EvSUhSb2FYTXVZMjl1ZEdWdWRITXVaR1ZzWlhSbFNXNG9jR0YwYUNsY2JpQWdJQ0FnSUNBZ0lDQWdJRG9nWm1Gc2MyVTdYRzRnSUNBZ2ZWeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlGSmxkSFZ5Ym5NZ2FYUmxiU0JoZENCZ2EyVjVZQ3dnYjNJZ1lIVnVaR1ZtYVc1bFpHQWdhV1lnYm05MElHWnZkVzVrTGlCQ2VTQmtaV1poZFd4MElIVnVkM0poY0hOY2JpQWdJQ0FnS2lCelkyRnNZWElnZG1Gc2RXVnpJR1p5YjIwZ2RHaGxhWElnYzNWeWNtOTFibVJwYm1jZ2JtOWtaVHNnZEc4Z1pHbHpZV0pzWlNCelpYUWdZR3RsWlhCVFkyRnNZWEpnSUhSdlhHNGdJQ0FnSUNvZ1lIUnlkV1ZnSUNoamIyeHNaV04wYVc5dWN5QmhjbVVnWVd4M1lYbHpJSEpsZEhWeWJtVmtJR2x1ZEdGamRDa3VYRzRnSUNBZ0lDb3ZYRzRnSUNBZ1oyVjBLR3RsZVN3Z2EyVmxjRk5qWVd4aGNpa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdhWE5EYjJ4c1pXTjBhVzl1S0hSb2FYTXVZMjl1ZEdWdWRITXBYRzRnSUNBZ0lDQWdJQ0FnSUNBL0lIUm9hWE11WTI5dWRHVnVkSE11WjJWMEtHdGxlU3dnYTJWbGNGTmpZV3hoY2lsY2JpQWdJQ0FnSUNBZ0lDQWdJRG9nZFc1a1pXWnBibVZrTzF4dUlDQWdJSDFjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJTWlhSMWNtNXpJR2wwWlcwZ1lYUWdZSEJoZEdoZ0xDQnZjaUJnZFc1a1pXWnBibVZrWUNCcFppQnViM1FnWm05MWJtUXVJRUo1SUdSbFptRjFiSFFnZFc1M2NtRndjMXh1SUNBZ0lDQXFJSE5qWVd4aGNpQjJZV3gxWlhNZ1puSnZiU0IwYUdWcGNpQnpkWEp5YjNWdVpHbHVaeUJ1YjJSbE95QjBieUJrYVhOaFlteGxJSE5sZENCZ2EyVmxjRk5qWVd4aGNtQWdkRzljYmlBZ0lDQWdLaUJnZEhKMVpXQWdLR052Ykd4bFkzUnBiMjV6SUdGeVpTQmhiSGRoZVhNZ2NtVjBkWEp1WldRZ2FXNTBZV04wS1M1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0JuWlhSSmJpaHdZWFJvTENCclpXVndVMk5oYkdGeUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNocGMwVnRjSFI1VUdGMGFDaHdZWFJvS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQWhhMlZsY0ZOallXeGhjaUFtSmlCcGMxTmpZV3hoY2loMGFHbHpMbU52Ym5SbGJuUnpLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRDhnZEdocGN5NWpiMjUwWlc1MGN5NTJZV3gxWlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ2RHaHBjeTVqYjI1MFpXNTBjenRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR2x6UTI5c2JHVmpkR2x2YmloMGFHbHpMbU52Ym5SbGJuUnpLVnh1SUNBZ0lDQWdJQ0FnSUNBZ1B5QjBhR2x6TG1OdmJuUmxiblJ6TG1kbGRFbHVLSEJoZEdnc0lHdGxaWEJUWTJGc1lYSXBYRzRnSUNBZ0lDQWdJQ0FnSUNBNklIVnVaR1ZtYVc1bFpEdGNiaUFnSUNCOVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNvZ1EyaGxZMnR6SUdsbUlIUm9aU0JrYjJOMWJXVnVkQ0JwYm1Oc2RXUmxjeUJoSUhaaGJIVmxJSGRwZEdnZ2RHaGxJR3RsZVNCZ2EyVjVZQzVjYmlBZ0lDQWdLaTljYmlBZ0lDQm9ZWE1vYTJWNUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnBjME52Ykd4bFkzUnBiMjRvZEdocGN5NWpiMjUwWlc1MGN5a2dQeUIwYUdsekxtTnZiblJsYm5SekxtaGhjeWhyWlhrcElEb2dabUZzYzJVN1hHNGdJQ0FnZlZ4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUVOb1pXTnJjeUJwWmlCMGFHVWdaRzlqZFcxbGJuUWdhVzVqYkhWa1pYTWdZU0IyWVd4MVpTQmhkQ0JnY0dGMGFHQXVYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2FHRnpTVzRvY0dGMGFDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2FYTkZiWEIwZVZCaGRHZ29jR0YwYUNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amIyNTBaVzUwY3lBaFBUMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdhWE5EYjJ4c1pXTjBhVzl1S0hSb2FYTXVZMjl1ZEdWdWRITXBJRDhnZEdocGN5NWpiMjUwWlc1MGN5NW9ZWE5KYmlod1lYUm9LU0E2SUdaaGJITmxPMXh1SUNBZ0lIMWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQlRaWFJ6SUdFZ2RtRnNkV1VnYVc0Z2RHaHBjeUJrYjJOMWJXVnVkQzRnUm05eUlHQWhJWE5sZEdBc0lHQjJZV3gxWldBZ2JtVmxaSE1nZEc4Z1ltVWdZVnh1SUNBZ0lDQXFJR0p2YjJ4bFlXNGdkRzhnWVdSa0wzSmxiVzkyWlNCMGFHVWdhWFJsYlNCbWNtOXRJSFJvWlNCelpYUXVYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2MyVjBLR3RsZVN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdVkyOXVkR1Z1ZEhNZ1BUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1FIUnpMV1Y0Y0dWamRDMWxjbkp2Y2lCWFpTQmpZVzRuZENCeVpXRnNiSGtnYTI1dmR5QjBhR0YwSUhSb2FYTWdiV0YwWTJobGN5QkRiMjUwWlc1MGN5NWNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVZMjl1ZEdWdWRITWdQU0JqYjJ4c1pXTjBhVzl1Um5KdmJWQmhkR2dvZEdocGN5NXpZMmhsYldFc0lGdHJaWGxkTENCMllXeDFaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb1lYTnpaWEowUTI5c2JHVmpkR2x2YmloMGFHbHpMbU52Ym5SbGJuUnpLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amIyNTBaVzUwY3k1elpYUW9hMlY1TENCMllXeDFaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nVTJWMGN5QmhJSFpoYkhWbElHbHVJSFJvYVhNZ1pHOWpkVzFsYm5RdUlFWnZjaUJnSVNGelpYUmdMQ0JnZG1Gc2RXVmdJRzVsWldSeklIUnZJR0psSUdGY2JpQWdJQ0FnS2lCaWIyOXNaV0Z1SUhSdklHRmtaQzl5WlcxdmRtVWdkR2hsSUdsMFpXMGdabkp2YlNCMGFHVWdjMlYwTGx4dUlDQWdJQ0FxTDF4dUlDQWdJSE5sZEVsdUtIQmhkR2dzSUhaaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMFZ0Y0hSNVVHRjBhQ2h3WVhSb0tTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdRSFJ6TFdWNGNHVmpkQzFsY25KdmNpQlhaU0JqWVc0bmRDQnlaV0ZzYkhrZ2EyNXZkeUIwYUdGMElIUm9hWE1nYldGMFkyaGxjeUJEYjI1MFpXNTBjeTVjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WTI5dWRHVnVkSE1nUFNCMllXeDFaVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoMGFHbHpMbU52Ym5SbGJuUnpJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRUIwY3kxbGVIQmxZM1F0WlhKeWIzSWdWMlVnWTJGdUozUWdjbVZoYkd4NUlHdHViM2NnZEdoaGRDQjBhR2x6SUcxaGRHTm9aWE1nUTI5dWRHVnVkSE11WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1OdmJuUmxiblJ6SUQwZ1kyOXNiR1ZqZEdsdmJrWnliMjFRWVhSb0tIUm9hWE11YzJOb1pXMWhMQ0JCY25KaGVTNW1jbTl0S0hCaGRHZ3BMQ0IyWVd4MVpTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQnBaaUFvWVhOelpYSjBRMjlzYkdWamRHbHZiaWgwYUdsekxtTnZiblJsYm5SektTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVqYjI1MFpXNTBjeTV6WlhSSmJpaHdZWFJvTENCMllXeDFaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nUTJoaGJtZGxJSFJvWlNCWlFVMU1JSFpsY25OcGIyNGdZVzVrSUhOamFHVnRZU0IxYzJWa0lHSjVJSFJvWlNCa2IyTjFiV1Z1ZEM1Y2JpQWdJQ0FnS2lCQklHQnVkV3hzWUNCMlpYSnphVzl1SUdScGMyRmliR1Z6SUhOMWNIQnZjblFnWm05eUlHUnBjbVZqZEdsMlpYTXNJR1Y0Y0d4cFkybDBJSFJoWjNNc0lHRnVZMmh2Y25Nc0lHRnVaQ0JoYkdsaGMyVnpMbHh1SUNBZ0lDQXFJRWwwSUdGc2MyOGdjbVZ4ZFdseVpYTWdkR2hsSUdCelkyaGxiV0ZnSUc5d2RHbHZiaUIwYnlCaVpTQm5hWFpsYmlCaGN5QmhJR0JUWTJobGJXRmdJR2x1YzNSaGJtTmxJSFpoYkhWbExseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1QzWmxjbkpwWkdWeklHRnNiQ0J3Y21WMmFXOTFjMng1SUhObGRDQnpZMmhsYldFZ2IzQjBhVzl1Y3k1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0J6WlhSVFkyaGxiV0VvZG1WeWMybHZiaXdnYjNCMGFXOXVjeUE5SUh0OUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnZG1WeWMybHZiaUE5UFQwZ0oyNTFiV0psY2ljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0IyWlhKemFXOXVJRDBnVTNSeWFXNW5LSFpsY25OcGIyNHBPMXh1SUNBZ0lDQWdJQ0JzWlhRZ2IzQjBPMXh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLSFpsY25OcGIyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSnpFdU1TYzZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXVaR2x5WldOMGFYWmxjeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVrYVhKbFkzUnBkbVZ6TG5saGJXd3VkbVZ5YzJsdmJpQTlJQ2N4TGpFbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVrYVhKbFkzUnBkbVZ6SUQwZ2JtVjNJRVJwY21WamRHbDJaWE1vZXlCMlpYSnphVzl1T2lBbk1TNHhKeUI5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmNIUWdQU0I3SUhKbGMyOXNkbVZMYm05M2JsUmhaM002SUdaaGJITmxMQ0J6WTJobGJXRTZJQ2Q1WVcxc0xURXVNU2NnZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSnpFdU1pYzZYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2R1WlhoMEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NWthWEpsWTNScGRtVnpLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbVJwY21WamRHbDJaWE11ZVdGdGJDNTJaWEp6YVc5dUlEMGdkbVZ5YzJsdmJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WkdseVpXTjBhWFpsY3lBOUlHNWxkeUJFYVhKbFkzUnBkbVZ6S0hzZ2RtVnljMmx2YmlCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZjSFFnUFNCN0lISmxjMjlzZG1WTGJtOTNibFJoWjNNNklIUnlkV1VzSUhOamFHVnRZVG9nSjJOdmNtVW5JSDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRzUxYkd3NlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdVpHbHlaV04wYVhabGN5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdWc1pYUmxJSFJvYVhNdVpHbHlaV04wYVhabGN6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZjSFFnUFNCdWRXeHNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdWbVlYVnNkRG9nZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSE4ySUQwZ1NsTlBUaTV6ZEhKcGJtZHBabmtvZG1WeWMybHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JGZUhCbFkzUmxaQ0FuTVM0eEp5d2dKekV1TWljZ2IzSWdiblZzYkNCaGN5Qm1hWEp6ZENCaGNtZDFiV1Z1ZEN3Z1luVjBJR1p2ZFc1a09pQWtlM04yZldBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZJRTV2ZENCMWMybHVaeUJnYVc1emRHRnVZMlZ2WmlCVFkyaGxiV0ZnSUhSdklHRnNiRzkzSUdadmNpQmtkV05ySUhSNWNHbHVaMXh1SUNBZ0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1elkyaGxiV0VnYVc1emRHRnVZMlZ2WmlCUFltcGxZM1FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5OamFHVnRZU0E5SUc5d2RHbHZibk11YzJOb1pXMWhPMXh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2h2Y0hRcFhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuTmphR1Z0WVNBOUlHNWxkeUJUWTJobGJXRW9UMkpxWldOMExtRnpjMmxuYmlodmNIUXNJRzl3ZEdsdmJuTXBLVHRjYmlBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JYYVhSb0lHRWdiblZzYkNCWlFVMU1JSFpsY25OcGIyNHNJSFJvWlNCN0lITmphR1Z0WVRvZ1UyTm9aVzFoSUgwZ2IzQjBhVzl1SUdseklISmxjWFZwY21Wa1lDazdYRzRnSUNBZ2ZWeHVJQ0FnSUM4dklHcHpiMjRnSmlCcWMyOXVRWEpuSUdGeVpTQnZibXg1SUhWelpXUWdabkp2YlNCMGIwcFRUMDRvS1Z4dUlDQWdJSFJ2U2xNb2V5QnFjMjl1TENCcWMyOXVRWEpuTENCdFlYQkJjMDFoY0N3Z2JXRjRRV3hwWVhORGIzVnVkQ3dnYjI1QmJtTm9iM0lzSUhKbGRtbDJaWElnZlNBOUlIdDlLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR04wZUNBOUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdGdVkyaHZjbk02SUc1bGR5Qk5ZWEFvS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1J2WXpvZ2RHaHBjeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHdGxaWEE2SUNGcWMyOXVMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JXRndRWE5OWVhBNklHMWhjRUZ6VFdGd0lEMDlQU0IwY25WbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYldGd1MyVjVWMkZ5Ym1Wa09pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzFoZUVGc2FXRnpRMjkxYm5RNklIUjVjR1Z2WmlCdFlYaEJiR2xoYzBOdmRXNTBJRDA5UFNBbmJuVnRZbVZ5SnlBL0lHMWhlRUZzYVdGelEyOTFiblFnT2lBeE1EQmNiaUFnSUNBZ0lDQWdmVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ2RHOUtVeWgwYUdsekxtTnZiblJsYm5SekxDQnFjMjl1UVhKbklEOC9JQ2NuTENCamRIZ3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5dVFXNWphRzl5SUQwOVBTQW5ablZ1WTNScGIyNG5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQjdJR052ZFc1MExDQnlaWE1nZlNCdlppQmpkSGd1WVc1amFHOXljeTUyWVd4MVpYTW9LU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2YmtGdVkyaHZjaWh5WlhNc0lHTnZkVzUwS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSNWNHVnZaaUJ5WlhacGRtVnlJRDA5UFNBblpuVnVZM1JwYjI0blhHNGdJQ0FnSUNBZ0lDQWdJQ0EvSUdGd2NHeDVVbVYyYVhabGNpaHlaWFpwZG1WeUxDQjdJQ2NuT2lCeVpYTWdmU3dnSnljc0lISmxjeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lEb2djbVZ6TzF4dUlDQWdJSDFjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJCSUVwVFQwNGdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hsSUdSdlkzVnRaVzUwSUdCamIyNTBaVzUwYzJBdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCQWNHRnlZVzBnYW5OdmJrRnlaeUJWYzJWa0lHSjVJR0JLVTA5T0xuTjBjbWx1WjJsbWVXQWdkRzhnYVc1a2FXTmhkR1VnZEdobElHRnljbUY1SUdsdVpHVjRJRzl5WEc0Z0lDQWdJQ29nSUNCd2NtOXdaWEowZVNCdVlXMWxMbHh1SUNBZ0lDQXFMMXh1SUNBZ0lIUnZTbE5QVGlocWMyOXVRWEpuTENCdmJrRnVZMmh2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTUwYjBwVEtIc2dhbk52YmpvZ2RISjFaU3dnYW5OdmJrRnlaeXdnYldGd1FYTk5ZWEE2SUdaaGJITmxMQ0J2YmtGdVkyaHZjaUI5S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdMeW9xSUVFZ1dVRk5UQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdVZ1pHOWpkVzFsYm5RdUlDb3ZYRzRnSUNBZ2RHOVRkSEpwYm1jb2IzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1WeWNtOXljeTVzWlc1bmRHZ2dQaUF3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEViMk4xYldWdWRDQjNhWFJvSUdWeWNtOXljeUJqWVc1dWIzUWdZbVVnYzNSeWFXNW5hV1pwWldRbktUdGNiaUFnSUNBZ0lDQWdhV1lnS0NkcGJtUmxiblFuSUdsdUlHOXdkR2x2Ym5NZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNnaFRuVnRZbVZ5TG1selNXNTBaV2RsY2lodmNIUnBiMjV6TG1sdVpHVnVkQ2tnZkh3Z1RuVnRZbVZ5S0c5d2RHbHZibk11YVc1a1pXNTBLU0E4UFNBd0tTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY3lBOUlFcFRUMDR1YzNSeWFXNW5hV1o1S0c5d2RHbHZibk11YVc1a1pXNTBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1hDSnBibVJsYm5SY0lpQnZjSFJwYjI0Z2JYVnpkQ0JpWlNCaElIQnZjMmwwYVhabElHbHVkR1ZuWlhJc0lHNXZkQ0FrZTNOOVlDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE4wY21sdVoybG1lVVJ2WTNWdFpXNTBLSFJvYVhNc0lHOXdkR2x2Ym5NcE8xeHVJQ0FnSUgxY2JuMWNibVoxYm1OMGFXOXVJR0Z6YzJWeWRFTnZiR3hsWTNScGIyNG9ZMjl1ZEdWdWRITXBJSHRjYmlBZ0lDQnBaaUFvYVhORGIyeHNaV04wYVc5dUtHTnZiblJsYm5SektTbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEZlSEJsWTNSbFpDQmhJRmxCVFV3Z1kyOXNiR1ZqZEdsdmJpQmhjeUJrYjJOMWJXVnVkQ0JqYjI1MFpXNTBjeWNwTzF4dWZWeHVYRzVsZUhCdmNuUWdleUJFYjJOMWJXVnVkQ0I5TzF4dUlpd2dJbU5zWVhOeklGbEJUVXhGY25KdmNpQmxlSFJsYm1SeklFVnljbTl5SUh0Y2JpQWdJQ0JqYjI1emRISjFZM1J2Y2lodVlXMWxMQ0J3YjNNc0lHTnZaR1VzSUcxbGMzTmhaMlVwSUh0Y2JpQWdJQ0FnSUNBZ2MzVndaWElvS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV1WVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJSbElEMGdZMjlrWlR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV0WlhOellXZGxJRDBnYldWemMyRm5aVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdiM01nUFNCd2IzTTdYRzRnSUNBZ2ZWeHVmVnh1WTJ4aGMzTWdXVUZOVEZCaGNuTmxSWEp5YjNJZ1pYaDBaVzVrY3lCWlFVMU1SWEp5YjNJZ2UxeHVJQ0FnSUdOdmJuTjBjblZqZEc5eUtIQnZjeXdnWTI5a1pTd2diV1Z6YzJGblpTa2dlMXh1SUNBZ0lDQWdJQ0J6ZFhCbGNpZ25XVUZOVEZCaGNuTmxSWEp5YjNJbkxDQndiM01zSUdOdlpHVXNJRzFsYzNOaFoyVXBPMXh1SUNBZ0lIMWNibjFjYm1Oc1lYTnpJRmxCVFV4WFlYSnVhVzVuSUdWNGRHVnVaSE1nV1VGTlRFVnljbTl5SUh0Y2JpQWdJQ0JqYjI1emRISjFZM1J2Y2lod2IzTXNJR052WkdVc0lHMWxjM05oWjJVcElIdGNiaUFnSUNBZ0lDQWdjM1Z3WlhJb0oxbEJUVXhYWVhKdWFXNW5KeXdnY0c5ekxDQmpiMlJsTENCdFpYTnpZV2RsS1R0Y2JpQWdJQ0I5WEc1OVhHNWpiMjV6ZENCd2NtVjBkR2xtZVVWeWNtOXlJRDBnS0hOeVl5d2diR01wSUQwK0lDaGxjbkp2Y2lrZ1BUNGdlMXh1SUNBZ0lHbG1JQ2hsY25KdmNpNXdiM05iTUYwZ1BUMDlJQzB4S1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdaWEp5YjNJdWJHbHVaVkJ2Y3lBOUlHVnljbTl5TG5CdmN5NXRZWEFvY0c5eklEMCtJR3hqTG14cGJtVlFiM01vY0c5ektTazdYRzRnSUNBZ1kyOXVjM1FnZXlCc2FXNWxMQ0JqYjJ3Z2ZTQTlJR1Z5Y205eUxteHBibVZRYjNOYk1GMDdYRzRnSUNBZ1pYSnliM0l1YldWemMyRm5aU0FyUFNCZ0lHRjBJR3hwYm1VZ0pIdHNhVzVsZlN3Z1kyOXNkVzF1SUNSN1kyOXNmV0E3WEc0Z0lDQWdiR1YwSUdOcElEMGdZMjlzSUMwZ01UdGNiaUFnSUNCc1pYUWdiR2x1WlZOMGNpQTlJSE55WTF4dUlDQWdJQ0FnSUNBdWMzVmljM1J5YVc1bktHeGpMbXhwYm1WVGRHRnlkSE5iYkdsdVpTQXRJREZkTENCc1l5NXNhVzVsVTNSaGNuUnpXMnhwYm1WZEtWeHVJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZXMXhjYmx4Y2NsMHJKQzhzSUNjbktUdGNiaUFnSUNBdkx5QlVjbWx0SUhSdklHMWhlQ0E0TUNCamFHRnljeXdnYTJWbGNHbHVaeUJqYjJ3Z2NHOXphWFJwYjI0Z2JtVmhjaUIwYUdVZ2JXbGtaR3hsWEc0Z0lDQWdhV1lnS0dOcElENDlJRFl3SUNZbUlHeHBibVZUZEhJdWJHVnVaM1JvSUQ0Z09EQXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkSEpwYlZOMFlYSjBJRDBnVFdGMGFDNXRhVzRvWTJrZ0xTQXpPU3dnYkdsdVpWTjBjaTVzWlc1bmRHZ2dMU0EzT1NrN1hHNGdJQ0FnSUNBZ0lHeHBibVZUZEhJZ1BTQW5YSFV5TURJMkp5QXJJR3hwYm1WVGRISXVjM1ZpYzNSeWFXNW5LSFJ5YVcxVGRHRnlkQ2s3WEc0Z0lDQWdJQ0FnSUdOcElDMDlJSFJ5YVcxVGRHRnlkQ0F0SURFN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoc2FXNWxVM1J5TG14bGJtZDBhQ0ErSURnd0tWeHVJQ0FnSUNBZ0lDQnNhVzVsVTNSeUlEMGdiR2x1WlZOMGNpNXpkV0p6ZEhKcGJtY29NQ3dnTnprcElDc2dKMXgxTWpBeU5pYzdYRzRnSUNBZ0x5OGdTVzVqYkhWa1pTQndjbVYyYVc5MWN5QnNhVzVsSUdsdUlHTnZiblJsZUhRZ2FXWWdjRzlwYm5ScGJtY2dZWFFnYkdsdVpTQnpkR0Z5ZEZ4dUlDQWdJR2xtSUNoc2FXNWxJRDRnTVNBbUppQXZYaUFxSkM4dWRHVnpkQ2hzYVc1bFUzUnlMbk4xWW5OMGNtbHVaeWd3TENCamFTa3BLU0I3WEc0Z0lDQWdJQ0FnSUM4dklGSmxaMlY0Y0NCM2IyNG5kQ0J0WVhSamFDQnBaaUJ6ZEdGeWRDQnBjeUIwY21sdGJXVmtYRzRnSUNBZ0lDQWdJR3hsZENCd2NtVjJJRDBnYzNKakxuTjFZbk4wY21sdVp5aHNZeTVzYVc1bFUzUmhjblJ6VzJ4cGJtVWdMU0F5WFN3Z2JHTXViR2x1WlZOMFlYSjBjMXRzYVc1bElDMGdNVjBwTzF4dUlDQWdJQ0FnSUNCcFppQW9jSEpsZGk1c1pXNW5kR2dnUGlBNE1DbGNiaUFnSUNBZ0lDQWdJQ0FnSUhCeVpYWWdQU0J3Y21WMkxuTjFZbk4wY21sdVp5Z3dMQ0EzT1NrZ0t5QW5YSFV5TURJMlhGeHVKenRjYmlBZ0lDQWdJQ0FnYkdsdVpWTjBjaUE5SUhCeVpYWWdLeUJzYVc1bFUzUnlPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9MMXRlSUYwdkxuUmxjM1FvYkdsdVpWTjBjaWtwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR052ZFc1MElEMGdNVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaVzVrSUQwZ1pYSnliM0l1YkdsdVpWQnZjMXN4WFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1Z1WkNBbUppQmxibVF1YkdsdVpTQTlQVDBnYkdsdVpTQW1KaUJsYm1RdVkyOXNJRDRnWTI5c0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIzVnVkQ0E5SUUxaGRHZ3ViV0Y0S0RFc0lFMWhkR2d1YldsdUtHVnVaQzVqYjJ3Z0xTQmpiMndzSURnd0lDMGdZMmtwS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2IybHVkR1Z5SUQwZ0p5QW5MbkpsY0dWaGRDaGphU2tnS3lBblhpY3VjbVZ3WldGMEtHTnZkVzUwS1R0Y2JpQWdJQ0FnSUNBZ1pYSnliM0l1YldWemMyRm5aU0FyUFNCZ09seGNibHhjYmlSN2JHbHVaVk4wY24xY1hHNGtlM0J2YVc1MFpYSjlYRnh1WUR0Y2JpQWdJQ0I5WEc1OU8xeHVYRzVsZUhCdmNuUWdleUJaUVUxTVJYSnliM0lzSUZsQlRVeFFZWEp6WlVWeWNtOXlMQ0JaUVUxTVYyRnlibWx1Wnl3Z2NISmxkSFJwWm5sRmNuSnZjaUI5TzF4dUlpd2dJbVoxYm1OMGFXOXVJSEpsYzI5c2RtVlFjbTl3Y3loMGIydGxibk1zSUhzZ1pteHZkeXdnYVc1a2FXTmhkRzl5TENCdVpYaDBMQ0J2Wm1aelpYUXNJRzl1UlhKeWIzSXNJSEJoY21WdWRFbHVaR1Z1ZEN3Z2MzUmhjblJQYms1bGQyeHBibVVnZlNrZ2UxeHVJQ0FnSUd4bGRDQnpjR0ZqWlVKbFptOXlaU0E5SUdaaGJITmxPMXh1SUNBZ0lHeGxkQ0JoZEU1bGQyeHBibVVnUFNCemRHRnlkRTl1VG1WM2JHbHVaVHRjYmlBZ0lDQnNaWFFnYUdGelUzQmhZMlVnUFNCemRHRnlkRTl1VG1WM2JHbHVaVHRjYmlBZ0lDQnNaWFFnWTI5dGJXVnVkQ0E5SUNjbk8xeHVJQ0FnSUd4bGRDQmpiMjF0Wlc1MFUyVndJRDBnSnljN1hHNGdJQ0FnYkdWMElHaGhjMDVsZDJ4cGJtVWdQU0JtWVd4elpUdGNiaUFnSUNCc1pYUWdjbVZ4VTNCaFkyVWdQU0JtWVd4elpUdGNiaUFnSUNCc1pYUWdkR0ZpSUQwZ2JuVnNiRHRjYmlBZ0lDQnNaWFFnWVc1amFHOXlJRDBnYm5Wc2JEdGNiaUFnSUNCc1pYUWdkR0ZuSUQwZ2JuVnNiRHRjYmlBZ0lDQnNaWFFnYm1WM2JHbHVaVUZtZEdWeVVISnZjQ0E5SUc1MWJHdzdYRzRnSUNBZ2JHVjBJR052YlcxaElEMGdiblZzYkR0Y2JpQWdJQ0JzWlhRZ1ptOTFibVFnUFNCdWRXeHNPMXh1SUNBZ0lHeGxkQ0J6ZEdGeWRDQTlJRzUxYkd3N1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCMGIydGxiaUJ2WmlCMGIydGxibk1wSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEpsY1ZOd1lXTmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEc5clpXNHVkSGx3WlNBaFBUMGdKM053WVdObEp5QW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJ2YTJWdUxuUjVjR1VnSVQwOUlDZHVaWGRzYVc1bEp5QW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJ2YTJWdUxuUjVjR1VnSVQwOUlDZGpiMjF0WVNjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyNUZjbkp2Y2loMGIydGxiaTV2Wm1aelpYUXNJQ2ROU1ZOVFNVNUhYME5JUVZJbkxDQW5WR0ZuY3lCaGJtUWdZVzVqYUc5eWN5QnRkWE4wSUdKbElITmxjR0Z5WVhSbFpDQm1jbTl0SUhSb1pTQnVaWGgwSUhSdmEyVnVJR0o1SUhkb2FYUmxJSE53WVdObEp5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYRlRjR0ZqWlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwWVdJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaGhkRTVsZDJ4cGJtVWdKaVlnZEc5clpXNHVkSGx3WlNBaFBUMGdKMk52YlcxbGJuUW5JQ1ltSUhSdmEyVnVMblI1Y0dVZ0lUMDlJQ2R1Wlhkc2FXNWxKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5dVJYSnliM0lvZEdGaUxDQW5WRUZDWDBGVFgwbE9SRVZPVkNjc0lDZFVZV0p6SUdGeVpTQnViM1FnWVd4c2IzZGxaQ0JoY3lCcGJtUmxiblJoZEdsdmJpY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdGaUlEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tIUnZhMlZ1TG5SNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjNOd1lXTmxKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCQmRDQjBhR1VnWkc5aklHeGxkbVZzTENCMFlXSnpJR0YwSUd4cGJtVWdjM1JoY25RZ2JXRjVJR0psSUhCaGNuTmxaRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUdGeklHeGxZV1JwYm1jZ2QyaHBkR1VnYzNCaFkyVWdjbUYwYUdWeUlIUm9ZVzRnYVc1a1pXNTBZWFJwYjI0dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdTVzRnWVNCbWJHOTNJR052Ykd4bFkzUnBiMjRzSUc5dWJIa2dkR2hsSUhCaGNuTmxjaUJvWVc1a2JHVnpJR2x1WkdWdWRDNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdac2IzY2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0tHbHVaR2xqWVhSdmNpQWhQVDBnSjJSdll5MXpkR0Z5ZENjZ2ZId2dibVY0ZEQ4dWRIbHdaU0FoUFQwZ0oyWnNiM2N0WTI5c2JHVmpkR2x2YmljcElDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSdmEyVnVMbk52ZFhKalpTNXBibU5zZFdSbGN5Z25YRngwSnlrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdGaUlEMGdkRzlyWlc0N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHaGhjMU53WVdObElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJOdmJXMWxiblFuT2lCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0ZvWVhOVGNHRmpaU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyNUZjbkp2Y2loMGIydGxiaXdnSjAxSlUxTkpUa2RmUTBoQlVpY3NJQ2REYjIxdFpXNTBjeUJ0ZFhOMElHSmxJSE5sY0dGeVlYUmxaQ0JtY205dElHOTBhR1Z5SUhSdmEyVnVjeUJpZVNCM2FHbDBaU0J6Y0dGalpTQmphR0Z5WVdOMFpYSnpKeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdZMklnUFNCMGIydGxiaTV6YjNWeVkyVXVjM1ZpYzNSeWFXNW5LREVwSUh4OElDY2dKenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXTnZiVzFsYm5RcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052YlcxbGJuUWdQU0JqWWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJXMWxiblFnS3owZ1kyOXRiV1Z1ZEZObGNDQXJJR05pTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJXMWxiblJUWlhBZ1BTQW5KenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JoZEU1bGQyeHBibVVnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oyNWxkMnhwYm1Vbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hoZEU1bGQyeHBibVVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOdmJXMWxiblFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjIxdFpXNTBJQ3M5SUhSdmEyVnVMbk52ZFhKalpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzQmhZMlZDWldadmNtVWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZiVzFsYm5SVFpYQWdLejBnZEc5clpXNHVjMjkxY21ObE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRjBUbVYzYkdsdVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FHRnpUbVYzYkdsdVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR0Z1WTJodmNpQjhmQ0IwWVdjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZDJ4cGJtVkJablJsY2xCeWIzQWdQU0IwYjJ0bGJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm9ZWE5UY0dGalpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkaGJtTm9iM0luT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGhibU5vYjNJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9kRzlyWlc0c0lDZE5WVXhVU1ZCTVJWOUJUa05JVDFKVEp5d2dKMEVnYm05a1pTQmpZVzRnYUdGMlpTQmhkQ0J0YjNOMElHOXVaU0JoYm1Ob2IzSW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHOXJaVzR1YzI5MWNtTmxMbVZ1WkhOWGFYUm9LQ2M2SnlrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9kRzlyWlc0dWIyWm1jMlYwSUNzZ2RHOXJaVzR1YzI5MWNtTmxMbXhsYm1kMGFDQXRJREVzSUNkQ1FVUmZRVXhKUVZNbkxDQW5RVzVqYUc5eUlHVnVaR2x1WnlCcGJpQTZJR2x6SUdGdFltbG5kVzkxY3ljc0lIUnlkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdGdVkyaHZjaUE5SUhSdmEyVnVPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoemRHRnlkQ0E5UFQwZ2JuVnNiQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzUmhjblFnUFNCMGIydGxiaTV2Wm1aelpYUTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZWFJPWlhkc2FXNWxJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhR0Z6VTNCaFkyVWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWEZUY0dGalpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkMFlXY25PaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUmhaeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyNUZjbkp2Y2loMGIydGxiaXdnSjAxVlRGUkpVRXhGWDFSQlIxTW5MQ0FuUVNCdWIyUmxJR05oYmlCb1lYWmxJR0YwSUcxdmMzUWdiMjVsSUhSaFp5Y3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJoWnlBOUlIUnZhMlZ1TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHpkR0Z5ZENBOVBUMGdiblZzYkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoY25RZ1BTQjBiMnRsYmk1dlptWnpaWFE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWVhST1pYZHNhVzVsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYUdGelUzQmhZMlVnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhGVGNHRmpaU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUdsdVpHbGpZWFJ2Y2pwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QkRiM1ZzWkNCb1pYSmxJR2hoYm1Sc1pTQndjbVZqWldScGJtY2dZMjl0YldWdWRITWdaR2xtWm1WeVpXNTBiSGxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1lXNWphRzl5SUh4OElIUmhaeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyNUZjbkp2Y2loMGIydGxiaXdnSjBKQlJGOVFVazlRWDA5U1JFVlNKeXdnWUVGdVkyaHZjbk1nWVc1a0lIUmhaM01nYlhWemRDQmlaU0JoWm5SbGNpQjBhR1VnSkh0MGIydGxiaTV6YjNWeVkyVjlJR2x1WkdsallYUnZjbUFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaG1iM1Z1WkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpaDBiMnRsYml3Z0oxVk9SVmhRUlVOVVJVUmZWRTlMUlU0bkxDQmdWVzVsZUhCbFkzUmxaQ0FrZTNSdmEyVnVMbk52ZFhKalpYMGdhVzRnSkh0bWJHOTNJRDgvSUNkamIyeHNaV04wYVc5dUozMWdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtYjNWdVpDQTlJSFJ2YTJWdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRjBUbVYzYkdsdVpTQTlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsdVpHbGpZWFJ2Y2lBOVBUMGdKM05sY1MxcGRHVnRMV2x1WkNjZ2ZId2dhVzVrYVdOaGRHOXlJRDA5UFNBblpYaHdiR2xqYVhRdGEyVjVMV2x1WkNjN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FHRnpVM0JoWTJVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJOdmJXMWhKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1pteHZkeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWTI5dGJXRXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtIUnZhMlZ1TENBblZVNUZXRkJGUTFSRlJGOVVUMHRGVGljc0lHQlZibVY0Y0dWamRHVmtJQ3dnYVc0Z0pIdG1iRzkzZldBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjIxdFlTQTlJSFJ2YTJWdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JoZEU1bGQyeHBibVVnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FHRnpVM0JoWTJVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1pXeHpaU0JtWVd4c2RHaHliM1ZuYUZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtIUnZhMlZ1TENBblZVNUZXRkJGUTFSRlJGOVVUMHRGVGljc0lHQlZibVY0Y0dWamRHVmtJQ1I3ZEc5clpXNHVkSGx3WlgwZ2RHOXJaVzVnS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGRFNWxkMnhwYm1VZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCb1lYTlRjR0ZqWlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElHeGhjM1FnUFNCMGIydGxibk5iZEc5clpXNXpMbXhsYm1kMGFDQXRJREZkTzF4dUlDQWdJR052Ym5OMElHVnVaQ0E5SUd4aGMzUWdQeUJzWVhOMExtOW1abk5sZENBcklHeGhjM1F1YzI5MWNtTmxMbXhsYm1kMGFDQTZJRzltWm5ObGREdGNiaUFnSUNCcFppQW9jbVZ4VTNCaFkyVWdKaVpjYmlBZ0lDQWdJQ0FnYm1WNGRDQW1KbHh1SUNBZ0lDQWdJQ0J1WlhoMExuUjVjR1VnSVQwOUlDZHpjR0ZqWlNjZ0ppWmNiaUFnSUNBZ0lDQWdibVY0ZEM1MGVYQmxJQ0U5UFNBbmJtVjNiR2x1WlNjZ0ppWmNiaUFnSUNBZ0lDQWdibVY0ZEM1MGVYQmxJQ0U5UFNBblkyOXRiV0VuSUNZbVhHNGdJQ0FnSUNBZ0lDaHVaWGgwTG5SNWNHVWdJVDA5SUNkelkyRnNZWEluSUh4OElHNWxlSFF1YzI5MWNtTmxJQ0U5UFNBbkp5a3BJSHRjYmlBZ0lDQWdJQ0FnYjI1RmNuSnZjaWh1WlhoMExtOW1abk5sZEN3Z0owMUpVMU5KVGtkZlEwaEJVaWNzSUNkVVlXZHpJR0Z1WkNCaGJtTm9iM0p6SUcxMWMzUWdZbVVnYzJWd1lYSmhkR1ZrSUdaeWIyMGdkR2hsSUc1bGVIUWdkRzlyWlc0Z1lua2dkMmhwZEdVZ2MzQmhZMlVuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hSaFlpQW1KbHh1SUNBZ0lDQWdJQ0FvS0dGMFRtVjNiR2x1WlNBbUppQjBZV0l1YVc1a1pXNTBJRHc5SUhCaGNtVnVkRWx1WkdWdWRDa2dmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFEvTG5SNWNHVWdQVDA5SUNkaWJHOWpheTF0WVhBbklIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBQeTUwZVhCbElEMDlQU0FuWW14dlkyc3RjMlZ4SnlrcFhHNGdJQ0FnSUNBZ0lHOXVSWEp5YjNJb2RHRmlMQ0FuVkVGQ1gwRlRYMGxPUkVWT1ZDY3NJQ2RVWVdKeklHRnlaU0J1YjNRZ1lXeHNiM2RsWkNCaGN5QnBibVJsYm5SaGRHbHZiaWNwTzF4dUlDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJR052YlcxaExGeHVJQ0FnSUNBZ0lDQm1iM1Z1WkN4Y2JpQWdJQ0FnSUNBZ2MzQmhZMlZDWldadmNtVXNYRzRnSUNBZ0lDQWdJR052YlcxbGJuUXNYRzRnSUNBZ0lDQWdJR2hoYzA1bGQyeHBibVVzWEc0Z0lDQWdJQ0FnSUdGdVkyaHZjaXhjYmlBZ0lDQWdJQ0FnZEdGbkxGeHVJQ0FnSUNBZ0lDQnVaWGRzYVc1bFFXWjBaWEpRY205d0xGeHVJQ0FnSUNBZ0lDQmxibVFzWEc0Z0lDQWdJQ0FnSUhOMFlYSjBPaUJ6ZEdGeWRDQS9QeUJsYm1SY2JpQWdJQ0I5TzF4dWZWeHVYRzVsZUhCdmNuUWdleUJ5WlhOdmJIWmxVSEp2Y0hNZ2ZUdGNiaUlzSUNKbWRXNWpkR2x2YmlCamIyNTBZV2x1YzA1bGQyeHBibVVvYTJWNUtTQjdYRzRnSUNBZ2FXWWdLQ0ZyWlhrcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNBZ0lITjNhWFJqYUNBb2EyVjVMblI1Y0dVcElIdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbllXeHBZWE1uT2x4dUlDQWdJQ0FnSUNCallYTmxJQ2R6WTJGc1lYSW5PbHh1SUNBZ0lDQWdJQ0JqWVhObElDZGtiM1ZpYkdVdGNYVnZkR1ZrTFhOallXeGhjaWM2WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKM05wYm1kc1pTMXhkVzkwWldRdGMyTmhiR0Z5SnpwY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoclpYa3VjMjkxY21ObExtbHVZMngxWkdWektDZGNYRzRuS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHJaWGt1Wlc1a0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvWTI5dWMzUWdjM1FnYjJZZ2EyVjVMbVZ1WkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hOMExuUjVjR1VnUFQwOUlDZHVaWGRzYVc1bEp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0JqWVhObElDZG1iRzkzTFdOdmJHeGxZM1JwYjI0bk9seHVJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaGpiMjV6ZENCcGRDQnZaaUJyWlhrdWFYUmxiWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLR052Ym5OMElITjBJRzltSUdsMExuTjBZWEowS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYzNRdWRIbHdaU0E5UFQwZ0oyNWxkMnhwYm1VbktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dsMExuTmxjQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnpkQ0J2WmlCcGRDNXpaWEFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2MzUXVkSGx3WlNBOVBUMGdKMjVsZDJ4cGJtVW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYjI1MFlXbHVjMDVsZDJ4cGJtVW9hWFF1YTJWNUtTQjhmQ0JqYjI1MFlXbHVjMDVsZDJ4cGJtVW9hWFF1ZG1Gc2RXVXBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQWdJSDFjYm4xY2JseHVaWGh3YjNKMElIc2dZMjl1ZEdGcGJuTk9aWGRzYVc1bElIMDdYRzRpTENBaWFXMXdiM0owSUhzZ1kyOXVkR0ZwYm5OT1pYZHNhVzVsSUgwZ1puSnZiU0FuTGk5MWRHbHNMV052Ym5SaGFXNXpMVzVsZDJ4cGJtVXVhbk1uTzF4dVhHNW1kVzVqZEdsdmJpQm1iRzkzU1c1a1pXNTBRMmhsWTJzb2FXNWtaVzUwTENCbVl5d2diMjVGY25KdmNpa2dlMXh1SUNBZ0lHbG1JQ2htWXo4dWRIbHdaU0E5UFQwZ0oyWnNiM2N0WTI5c2JHVmpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pXNWtJRDBnWm1NdVpXNWtXekJkTzF4dUlDQWdJQ0FnSUNCcFppQW9aVzVrTG1sdVpHVnVkQ0E5UFQwZ2FXNWtaVzUwSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FvWlc1a0xuTnZkWEpqWlNBOVBUMGdKMTBuSUh4OElHVnVaQzV6YjNWeVkyVWdQVDA5SUNkOUp5a2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJoYVc1elRtVjNiR2x1WlNobVl5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUcxelp5QTlJQ2RHYkc5M0lHVnVaQ0JwYm1ScFkyRjBiM0lnYzJodmRXeGtJR0psSUcxdmNtVWdhVzVrWlc1MFpXUWdkR2hoYmlCd1lYSmxiblFuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpaGxibVFzSUNkQ1FVUmZTVTVFUlU1VUp5d2diWE5uTENCMGNuVmxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYm4xY2JseHVaWGh3YjNKMElIc2dabXh2ZDBsdVpHVnVkRU5vWldOcklIMDdYRzRpTENBaWFXMXdiM0owSUhzZ2FYTlRZMkZzWVhJZ2ZTQm1jbTl0SUNjdUxpOXViMlJsY3k5cFpHVnVkR2wwZVM1cWN5YzdYRzVjYm1aMWJtTjBhVzl1SUcxaGNFbHVZMngxWkdWektHTjBlQ3dnYVhSbGJYTXNJSE5sWVhKamFDa2dlMXh1SUNBZ0lHTnZibk4wSUhzZ2RXNXBjWFZsUzJWNWN5QjlJRDBnWTNSNExtOXdkR2x2Ym5NN1hHNGdJQ0FnYVdZZ0tIVnVhWEYxWlV0bGVYTWdQVDA5SUdaaGJITmxLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnWTI5dWMzUWdhWE5GY1hWaGJDQTlJSFI1Y0dWdlppQjFibWx4ZFdWTFpYbHpJRDA5UFNBblpuVnVZM1JwYjI0blhHNGdJQ0FnSUNBZ0lEOGdkVzVwY1hWbFMyVjVjMXh1SUNBZ0lDQWdJQ0E2SUNoaExDQmlLU0E5UGlCaElEMDlQU0JpSUh4OElDaHBjMU5qWVd4aGNpaGhLU0FtSmlCcGMxTmpZV3hoY2loaUtTQW1KaUJoTG5aaGJIVmxJRDA5UFNCaUxuWmhiSFZsS1R0Y2JpQWdJQ0J5WlhSMWNtNGdhWFJsYlhNdWMyOXRaU2h3WVdseUlEMCtJR2x6UlhGMVlXd29jR0ZwY2k1clpYa3NJSE5sWVhKamFDa3BPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2V5QnRZWEJKYm1Oc2RXUmxjeUI5TzF4dUlpd2dJbWx0Y0c5eWRDQjdJRkJoYVhJZ2ZTQm1jbTl0SUNjdUxpOXViMlJsY3k5UVlXbHlMbXB6Snp0Y2JtbHRjRzl5ZENCN0lGbEJUVXhOWVhBZ2ZTQm1jbTl0SUNjdUxpOXViMlJsY3k5WlFVMU1UV0Z3TG1wekp6dGNibWx0Y0c5eWRDQjdJSEpsYzI5c2RtVlFjbTl3Y3lCOUlHWnliMjBnSnk0dmNtVnpiMngyWlMxd2NtOXdjeTVxY3ljN1hHNXBiWEJ2Y25RZ2V5QmpiMjUwWVdsdWMwNWxkMnhwYm1VZ2ZTQm1jbTl0SUNjdUwzVjBhV3d0WTI5dWRHRnBibk10Ym1WM2JHbHVaUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5Qm1iRzkzU1c1a1pXNTBRMmhsWTJzZ2ZTQm1jbTl0SUNjdUwzVjBhV3d0Wm14dmR5MXBibVJsYm5RdFkyaGxZMnN1YW5Nbk8xeHVhVzF3YjNKMElIc2diV0Z3U1c1amJIVmtaWE1nZlNCbWNtOXRJQ2N1TDNWMGFXd3RiV0Z3TFdsdVkyeDFaR1Z6TG1wekp6dGNibHh1WTI5dWMzUWdjM1JoY25SRGIyeE5jMmNnUFNBblFXeHNJRzFoY0hCcGJtY2dhWFJsYlhNZ2JYVnpkQ0J6ZEdGeWRDQmhkQ0IwYUdVZ2MyRnRaU0JqYjJ4MWJXNG5PMXh1Wm5WdVkzUnBiMjRnY21WemIyeDJaVUpzYjJOclRXRndLSHNnWTI5dGNHOXpaVTV2WkdVc0lHTnZiWEJ2YzJWRmJYQjBlVTV2WkdVZ2ZTd2dZM1I0TENCaWJTd2diMjVGY25KdmNpd2dkR0ZuS1NCN1hHNGdJQ0FnWTI5dWMzUWdUbTlrWlVOc1lYTnpJRDBnZEdGblB5NXViMlJsUTJ4aGMzTWdQejhnV1VGTlRFMWhjRHRjYmlBZ0lDQmpiMjV6ZENCdFlYQWdQU0J1WlhjZ1RtOWtaVU5zWVhOektHTjBlQzV6WTJobGJXRXBPMXh1SUNBZ0lHbG1JQ2hqZEhndVlYUlNiMjkwS1Z4dUlDQWdJQ0FnSUNCamRIZ3VZWFJTYjI5MElEMGdabUZzYzJVN1hHNGdJQ0FnYkdWMElHOW1abk5sZENBOUlHSnRMbTltWm5ObGREdGNiaUFnSUNCc1pYUWdZMjl0YldWdWRFVnVaQ0E5SUc1MWJHdzdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmpiMnhzU1hSbGJTQnZaaUJpYlM1cGRHVnRjeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3SUhOMFlYSjBMQ0JyWlhrc0lITmxjQ3dnZG1Gc2RXVWdmU0E5SUdOdmJHeEpkR1Z0TzF4dUlDQWdJQ0FnSUNBdkx5QnJaWGtnY0hKdmNHVnlkR2xsYzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JyWlhsUWNtOXdjeUE5SUhKbGMyOXNkbVZRY205d2N5aHpkR0Z5ZEN3Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVc1a2FXTmhkRzl5T2lBblpYaHdiR2xqYVhRdGEyVjVMV2x1WkNjc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J1WlhoME9pQnJaWGtnUHo4Z2MyVndQeTViTUYwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2Wm1aelpYUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCdmJrVnljbTl5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjR0Z5Wlc1MFNXNWtaVzUwT2lCaWJTNXBibVJsYm5Rc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZEdGeWRFOXVUbVYzYkdsdVpUb2dkSEoxWlZ4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FXMXdiR2xqYVhSTFpYa2dQU0FoYTJWNVVISnZjSE11Wm05MWJtUTdYRzRnSUNBZ0lDQWdJR2xtSUNocGJYQnNhV05wZEV0bGVTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR3RsZVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hyWlhrdWRIbHdaU0E5UFQwZ0oySnNiMk5yTFhObGNTY3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5dVJYSnliM0lvYjJabWMyVjBMQ0FuUWt4UFEwdGZRVk5mU1UxUVRFbERTVlJmUzBWWkp5d2dKMEVnWW14dlkyc2djMlZ4ZFdWdVkyVWdiV0Y1SUc1dmRDQmlaU0IxYzJWa0lHRnpJR0Z1SUdsdGNHeHBZMmwwSUcxaGNDQnJaWGtuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtSUNnbmFXNWtaVzUwSnlCcGJpQnJaWGtnSmlZZ2EyVjVMbWx1WkdWdWRDQWhQVDBnWW0wdWFXNWtaVzUwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtHOW1abk5sZEN3Z0owSkJSRjlKVGtSRlRsUW5MQ0J6ZEdGeWRFTnZiRTF6WnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVd0bGVWQnliM0J6TG1GdVkyaHZjaUFtSmlBaGEyVjVVSEp2Y0hNdWRHRm5JQ1ltSUNGelpYQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjIxdFpXNTBSVzVrSUQwZ2EyVjVVSEp2Y0hNdVpXNWtPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoclpYbFFjbTl3Y3k1amIyMXRaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodFlYQXVZMjl0YldWdWRDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMWhjQzVqYjIxdFpXNTBJQ3M5SUNkY1hHNG5JQ3NnYTJWNVVISnZjSE11WTI5dGJXVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiV0Z3TG1OdmJXMWxiblFnUFNCclpYbFFjbTl3Y3k1amIyMXRaVzUwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hyWlhsUWNtOXdjeTV1Wlhkc2FXNWxRV1owWlhKUWNtOXdJSHg4SUdOdmJuUmhhVzV6VG1WM2JHbHVaU2hyWlhrcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpaHJaWGtnUHo4Z2MzUmhjblJiYzNSaGNuUXViR1Z1WjNSb0lDMGdNVjBzSUNkTlZVeFVTVXhKVGtWZlNVMVFURWxEU1ZSZlMwVlpKeXdnSjBsdGNHeHBZMmwwSUd0bGVYTWdibVZsWkNCMGJ5QmlaU0J2YmlCaElITnBibWRzWlNCc2FXNWxKeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQnBaaUFvYTJWNVVISnZjSE11Wm05MWJtUS9MbWx1WkdWdWRDQWhQVDBnWW0wdWFXNWtaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLRzltWm5ObGRDd2dKMEpCUkY5SlRrUkZUbFFuTENCemRHRnlkRU52YkUxelp5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnTHk4Z2EyVjVJSFpoYkhWbFhHNGdJQ0FnSUNBZ0lHTjBlQzVoZEV0bGVTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUd0bGVWTjBZWEowSUQwZ2EyVjVVSEp2Y0hNdVpXNWtPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnJaWGxPYjJSbElEMGdhMlY1WEc0Z0lDQWdJQ0FnSUNBZ0lDQS9JR052YlhCdmMyVk9iMlJsS0dOMGVDd2dhMlY1TENCclpYbFFjbTl3Y3l3Z2IyNUZjbkp2Y2lsY2JpQWdJQ0FnSUNBZ0lDQWdJRG9nWTI5dGNHOXpaVVZ0Y0hSNVRtOWtaU2hqZEhnc0lHdGxlVk4wWVhKMExDQnpkR0Z5ZEN3Z2JuVnNiQ3dnYTJWNVVISnZjSE1zSUc5dVJYSnliM0lwTzF4dUlDQWdJQ0FnSUNCcFppQW9ZM1I0TG5OamFHVnRZUzVqYjIxd1lYUXBYRzRnSUNBZ0lDQWdJQ0FnSUNCbWJHOTNTVzVrWlc1MFEyaGxZMnNvWW0wdWFXNWtaVzUwTENCclpYa3NJRzl1UlhKeWIzSXBPMXh1SUNBZ0lDQWdJQ0JqZEhndVlYUkxaWGtnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHMWhjRWx1WTJ4MVpHVnpLR04wZUN3Z2JXRndMbWwwWlcxekxDQnJaWGxPYjJSbEtTbGNiaUFnSUNBZ0lDQWdJQ0FnSUc5dVJYSnliM0lvYTJWNVUzUmhjblFzSUNkRVZWQk1TVU5CVkVWZlMwVlpKeXdnSjAxaGNDQnJaWGx6SUcxMWMzUWdZbVVnZFc1cGNYVmxKeWs3WEc0Z0lDQWdJQ0FnSUM4dklIWmhiSFZsSUhCeWIzQmxjblJwWlhOY2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZG1Gc2RXVlFjbTl3Y3lBOUlISmxjMjlzZG1WUWNtOXdjeWh6WlhBZ1B6OGdXMTBzSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2x1WkdsallYUnZjam9nSjIxaGNDMTJZV3gxWlMxcGJtUW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRG9nZG1Gc2RXVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCdlptWnpaWFE2SUd0bGVVNXZaR1V1Y21GdVoyVmJNbDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnY0dGeVpXNTBTVzVrWlc1ME9pQmliUzVwYm1SbGJuUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCemRHRnlkRTl1VG1WM2JHbHVaVG9nSVd0bGVTQjhmQ0JyWlhrdWRIbHdaU0E5UFQwZ0oySnNiMk5yTFhOallXeGhjaWRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lHOW1abk5sZENBOUlIWmhiSFZsVUhKdmNITXVaVzVrTzF4dUlDQWdJQ0FnSUNCcFppQW9kbUZzZFdWUWNtOXdjeTVtYjNWdVpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2x0Y0d4cFkybDBTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFpoYkhWbFB5NTBlWEJsSUQwOVBTQW5ZbXh2WTJzdGJXRndKeUFtSmlBaGRtRnNkV1ZRY205d2N5NW9ZWE5PWlhkc2FXNWxLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmJrVnljbTl5S0c5bVpuTmxkQ3dnSjBKTVQwTkxYMEZUWDBsTlVFeEpRMGxVWDB0RldTY3NJQ2RPWlhOMFpXUWdiV0Z3Y0dsdVozTWdZWEpsSUc1dmRDQmhiR3h2ZDJWa0lHbHVJR052YlhCaFkzUWdiV0Z3Y0dsdVozTW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kzUjRMbTl3ZEdsdmJuTXVjM1J5YVdOMElDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd0bGVWQnliM0J6TG5OMFlYSjBJRHdnZG1Gc2RXVlFjbTl3Y3k1bWIzVnVaQzV2Wm1aelpYUWdMU0F4TURJMEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLR3RsZVU1dlpHVXVjbUZ1WjJVc0lDZExSVmxmVDFaRlVsOHhNREkwWDBOSVFWSlRKeXdnSjFSb1pTQTZJR2x1WkdsallYUnZjaUJ0ZFhOMElHSmxJR0YwSUcxdmMzUWdNVEF5TkNCamFHRnljeUJoWm5SbGNpQjBhR1VnYzNSaGNuUWdiMllnWVc0Z2FXMXdiR2xqYVhRZ1lteHZZMnNnYldGd2NHbHVaeUJyWlhrbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUhaaGJIVmxJSFpoYkhWbFhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQjJZV3gxWlU1dlpHVWdQU0IyWVd4MVpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEOGdZMjl0Y0c5elpVNXZaR1VvWTNSNExDQjJZV3gxWlN3Z2RtRnNkV1ZRY205d2N5d2diMjVGY25KdmNpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJR052YlhCdmMyVkZiWEIwZVU1dlpHVW9ZM1I0TENCdlptWnpaWFFzSUhObGNDd2diblZzYkN3Z2RtRnNkV1ZRY205d2N5d2diMjVGY25KdmNpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZM1I0TG5OamFHVnRZUzVqYjIxd1lYUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabXh2ZDBsdVpHVnVkRU5vWldOcktHSnRMbWx1WkdWdWRDd2dkbUZzZFdVc0lHOXVSWEp5YjNJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJabWMyVjBJRDBnZG1Gc2RXVk9iMlJsTG5KaGJtZGxXekpkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NHRnBjaUE5SUc1bGR5QlFZV2x5S0d0bGVVNXZaR1VzSUhaaGJIVmxUbTlrWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kzUjRMbTl3ZEdsdmJuTXVhMlZsY0ZOdmRYSmpaVlJ2YTJWdWN5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndZV2x5TG5OeVkxUnZhMlZ1SUQwZ1kyOXNiRWwwWlcwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WVhBdWFYUmxiWE11Y0hWemFDaHdZV2x5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUd0bGVTQjNhWFJvSUc1dklIWmhiSFZsWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVcxd2JHbGphWFJMWlhrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyNUZjbkp2Y2loclpYbE9iMlJsTG5KaGJtZGxMQ0FuVFVsVFUwbE9SMTlEU0VGU0p5d2dKMGx0Y0d4cFkybDBJRzFoY0NCclpYbHpJRzVsWldRZ2RHOGdZbVVnWm05c2JHOTNaV1FnWW5rZ2JXRndJSFpoYkhWbGN5Y3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFpoYkhWbFVISnZjSE11WTI5dGJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHJaWGxPYjJSbExtTnZiVzFsYm5RcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3RsZVU1dlpHVXVZMjl0YldWdWRDQXJQU0FuWEZ4dUp5QXJJSFpoYkhWbFVISnZjSE11WTI5dGJXVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3RsZVU1dlpHVXVZMjl0YldWdWRDQTlJSFpoYkhWbFVISnZjSE11WTI5dGJXVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSEJoYVhJZ1BTQnVaWGNnVUdGcGNpaHJaWGxPYjJSbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpkSGd1YjNCMGFXOXVjeTVyWldWd1UyOTFjbU5sVkc5clpXNXpLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJoYVhJdWMzSmpWRzlyWlc0Z1BTQmpiMnhzU1hSbGJUdGNiaUFnSUNBZ0lDQWdJQ0FnSUcxaGNDNXBkR1Z0Y3k1d2RYTm9LSEJoYVhJcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaGpiMjF0Wlc1MFJXNWtJQ1ltSUdOdmJXMWxiblJGYm1RZ1BDQnZabVp6WlhRcFhHNGdJQ0FnSUNBZ0lHOXVSWEp5YjNJb1kyOXRiV1Z1ZEVWdVpDd2dKMGxOVUU5VFUwbENURVVuTENBblRXRndJR052YlcxbGJuUWdkMmwwYUNCMGNtRnBiR2x1WnlCamIyNTBaVzUwSnlrN1hHNGdJQ0FnYldGd0xuSmhibWRsSUQwZ1cySnRMbTltWm5ObGRDd2diMlptYzJWMExDQmpiMjF0Wlc1MFJXNWtJRDgvSUc5bVpuTmxkRjA3WEc0Z0lDQWdjbVYwZFhKdUlHMWhjRHRjYm4xY2JseHVaWGh3YjNKMElIc2djbVZ6YjJ4MlpVSnNiMk5yVFdGd0lIMDdYRzRpTENBaWFXMXdiM0owSUhzZ1dVRk5URk5sY1NCOUlHWnliMjBnSnk0dUwyNXZaR1Z6TDFsQlRVeFRaWEV1YW5Nbk8xeHVhVzF3YjNKMElIc2djbVZ6YjJ4MlpWQnliM0J6SUgwZ1puSnZiU0FuTGk5eVpYTnZiSFpsTFhCeWIzQnpMbXB6Snp0Y2JtbHRjRzl5ZENCN0lHWnNiM2RKYm1SbGJuUkRhR1ZqYXlCOUlHWnliMjBnSnk0dmRYUnBiQzFtYkc5M0xXbHVaR1Z1ZEMxamFHVmpheTVxY3ljN1hHNWNibVoxYm1OMGFXOXVJSEpsYzI5c2RtVkNiRzlqYTFObGNTaDdJR052YlhCdmMyVk9iMlJsTENCamIyMXdiM05sUlcxd2RIbE9iMlJsSUgwc0lHTjBlQ3dnWW5Nc0lHOXVSWEp5YjNJc0lIUmhaeWtnZTF4dUlDQWdJR052Ym5OMElFNXZaR1ZEYkdGemN5QTlJSFJoWno4dWJtOWtaVU5zWVhOeklEOC9JRmxCVFV4VFpYRTdYRzRnSUNBZ1kyOXVjM1FnYzJWeElEMGdibVYzSUU1dlpHVkRiR0Z6Y3loamRIZ3VjMk5vWlcxaEtUdGNiaUFnSUNCcFppQW9ZM1I0TG1GMFVtOXZkQ2xjYmlBZ0lDQWdJQ0FnWTNSNExtRjBVbTl2ZENBOUlHWmhiSE5sTzF4dUlDQWdJR2xtSUNoamRIZ3VZWFJMWlhrcFhHNGdJQ0FnSUNBZ0lHTjBlQzVoZEV0bGVTQTlJR1poYkhObE8xeHVJQ0FnSUd4bGRDQnZabVp6WlhRZ1BTQmljeTV2Wm1aelpYUTdYRzRnSUNBZ2JHVjBJR052YlcxbGJuUkZibVFnUFNCdWRXeHNPMXh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdleUJ6ZEdGeWRDd2dkbUZzZFdVZ2ZTQnZaaUJpY3k1cGRHVnRjeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3Y205d2N5QTlJSEpsYzI5c2RtVlFjbTl3Y3loemRHRnlkQ3dnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhVzVrYVdOaGRHOXlPaUFuYzJWeExXbDBaVzB0YVc1a0p5eGNiaUFnSUNBZ0lDQWdJQ0FnSUc1bGVIUTZJSFpoYkhWbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJabWMyVjBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2IyNUZjbkp2Y2l4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEJoY21WdWRFbHVaR1Z1ZERvZ1luTXVhVzVrWlc1MExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGNuUlBiazVsZDJ4cGJtVTZJSFJ5ZFdWY2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJR2xtSUNnaGNISnZjSE11Wm05MWJtUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h3Y205d2N5NWhibU5vYjNJZ2ZId2djSEp2Y0hNdWRHRm5JSHg4SUhaaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIWmhiSFZsSUNZbUlIWmhiSFZsTG5SNWNHVWdQVDA5SUNkaWJHOWpheTF6WlhFbktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLSEJ5YjNCekxtVnVaQ3dnSjBKQlJGOUpUa1JGVGxRbkxDQW5RV3hzSUhObGNYVmxibU5sSUdsMFpXMXpJRzExYzNRZ2MzUmhjblFnWVhRZ2RHaGxJSE5oYldVZ1kyOXNkVzF1SnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmJrVnljbTl5S0c5bVpuTmxkQ3dnSjAxSlUxTkpUa2RmUTBoQlVpY3NJQ2RUWlhGMVpXNWpaU0JwZEdWdElIZHBkR2h2ZFhRZ0xTQnBibVJwWTJGMGIzSW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052YlcxbGJuUkZibVFnUFNCd2NtOXdjeTVsYm1RN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEJ5YjNCekxtTnZiVzFsYm5RcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sY1M1amIyMXRaVzUwSUQwZ2NISnZjSE11WTI5dGJXVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JqYjI1emRDQnViMlJsSUQwZ2RtRnNkV1ZjYmlBZ0lDQWdJQ0FnSUNBZ0lEOGdZMjl0Y0c5elpVNXZaR1VvWTNSNExDQjJZV3gxWlN3Z2NISnZjSE1zSUc5dVJYSnliM0lwWEc0Z0lDQWdJQ0FnSUNBZ0lDQTZJR052YlhCdmMyVkZiWEIwZVU1dlpHVW9ZM1I0TENCd2NtOXdjeTVsYm1Rc0lITjBZWEowTENCdWRXeHNMQ0J3Y205d2N5d2diMjVGY25KdmNpazdYRzRnSUNBZ0lDQWdJR2xtSUNoamRIZ3VjMk5vWlcxaExtTnZiWEJoZENsY2JpQWdJQ0FnSUNBZ0lDQWdJR1pzYjNkSmJtUmxiblJEYUdWamF5aGljeTVwYm1SbGJuUXNJSFpoYkhWbExDQnZia1Z5Y205eUtUdGNiaUFnSUNBZ0lDQWdiMlptYzJWMElEMGdibTlrWlM1eVlXNW5aVnN5WFR0Y2JpQWdJQ0FnSUNBZ2MyVnhMbWwwWlcxekxuQjFjMmdvYm05a1pTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhObGNTNXlZVzVuWlNBOUlGdGljeTV2Wm1aelpYUXNJRzltWm5ObGRDd2dZMjl0YldWdWRFVnVaQ0EvUHlCdlptWnpaWFJkTzF4dUlDQWdJSEpsZEhWeWJpQnpaWEU3WEc1OVhHNWNibVY0Y0c5eWRDQjdJSEpsYzI5c2RtVkNiRzlqYTFObGNTQjlPMXh1SWl3Z0ltWjFibU4wYVc5dUlISmxjMjlzZG1WRmJtUW9aVzVrTENCdlptWnpaWFFzSUhKbGNWTndZV05sTENCdmJrVnljbTl5S1NCN1hHNGdJQ0FnYkdWMElHTnZiVzFsYm5RZ1BTQW5KenRjYmlBZ0lDQnBaaUFvWlc1a0tTQjdYRzRnSUNBZ0lDQWdJR3hsZENCb1lYTlRjR0ZqWlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCc1pYUWdjMlZ3SUQwZ0p5YzdYRzRnSUNBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnZEc5clpXNGdiMllnWlc1a0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0I3SUhOdmRYSmpaU3dnZEhsd1pTQjlJRDBnZEc5clpXNDdYRzRnSUNBZ0lDQWdJQ0FnSUNCemQybDBZMmdnS0hSNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHpjR0ZqWlNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2hoYzFOd1lXTmxJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblkyOXRiV1Z1ZENjNklIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjVk53WVdObElDWW1JQ0ZvWVhOVGNHRmpaU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9kRzlyWlc0c0lDZE5TVk5UU1U1SFgwTklRVkluTENBblEyOXRiV1Z1ZEhNZ2JYVnpkQ0JpWlNCelpYQmhjbUYwWldRZ1puSnZiU0J2ZEdobGNpQjBiMnRsYm5NZ1lua2dkMmhwZEdVZ2MzQmhZMlVnWTJoaGNtRmpkR1Z5Y3ljcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmpZaUE5SUhOdmRYSmpaUzV6ZFdKemRISnBibWNvTVNrZ2ZId2dKeUFuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdOdmJXMWxiblFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjIxdFpXNTBJRDBnWTJJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJXMWxiblFnS3owZ2MyVndJQ3NnWTJJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sY0NBOUlDY25PMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5ibVYzYkdsdVpTYzZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpiMjF0Wlc1MEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVndJQ3M5SUhOdmRYSmpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FHRnpVM0JoWTJVZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtIUnZhMlZ1TENBblZVNUZXRkJGUTFSRlJGOVVUMHRGVGljc0lHQlZibVY0Y0dWamRHVmtJQ1I3ZEhsd1pYMGdZWFFnYm05a1pTQmxibVJnS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZENBclBTQnpiM1Z5WTJVdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjdJR052YlcxbGJuUXNJRzltWm5ObGRDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2V5QnlaWE52YkhabFJXNWtJSDA3WEc0aUxDQWlhVzF3YjNKMElIc2dhWE5RWVdseUlIMGdabkp2YlNBbkxpNHZibTlrWlhNdmFXUmxiblJwZEhrdWFuTW5PMXh1YVcxd2IzSjBJSHNnVUdGcGNpQjlJR1p5YjIwZ0p5NHVMMjV2WkdWekwxQmhhWEl1YW5Nbk8xeHVhVzF3YjNKMElIc2dXVUZOVEUxaGNDQjlJR1p5YjIwZ0p5NHVMMjV2WkdWekwxbEJUVXhOWVhBdWFuTW5PMXh1YVcxd2IzSjBJSHNnV1VGTlRGTmxjU0I5SUdaeWIyMGdKeTR1TDI1dlpHVnpMMWxCVFV4VFpYRXVhbk1uTzF4dWFXMXdiM0owSUhzZ2NtVnpiMngyWlVWdVpDQjlJR1p5YjIwZ0p5NHZjbVZ6YjJ4MlpTMWxibVF1YW5Nbk8xeHVhVzF3YjNKMElIc2djbVZ6YjJ4MlpWQnliM0J6SUgwZ1puSnZiU0FuTGk5eVpYTnZiSFpsTFhCeWIzQnpMbXB6Snp0Y2JtbHRjRzl5ZENCN0lHTnZiblJoYVc1elRtVjNiR2x1WlNCOUlHWnliMjBnSnk0dmRYUnBiQzFqYjI1MFlXbHVjeTF1Wlhkc2FXNWxMbXB6Snp0Y2JtbHRjRzl5ZENCN0lHMWhjRWx1WTJ4MVpHVnpJSDBnWm5KdmJTQW5MaTkxZEdsc0xXMWhjQzFwYm1Oc2RXUmxjeTVxY3ljN1hHNWNibU52Ym5OMElHSnNiMk5yVFhObklEMGdKMEpzYjJOcklHTnZiR3hsWTNScGIyNXpJR0Z5WlNCdWIzUWdZV3hzYjNkbFpDQjNhWFJvYVc0Z1pteHZkeUJqYjJ4c1pXTjBhVzl1Y3ljN1hHNWpiMjV6ZENCcGMwSnNiMk5ySUQwZ0tIUnZhMlZ1S1NBOVBpQjBiMnRsYmlBbUppQW9kRzlyWlc0dWRIbHdaU0E5UFQwZ0oySnNiMk5yTFcxaGNDY2dmSHdnZEc5clpXNHVkSGx3WlNBOVBUMGdKMkpzYjJOckxYTmxjU2NwTzF4dVpuVnVZM1JwYjI0Z2NtVnpiMngyWlVac2IzZERiMnhzWldOMGFXOXVLSHNnWTI5dGNHOXpaVTV2WkdVc0lHTnZiWEJ2YzJWRmJYQjBlVTV2WkdVZ2ZTd2dZM1I0TENCbVl5d2diMjVGY25KdmNpd2dkR0ZuS1NCN1hHNGdJQ0FnWTI5dWMzUWdhWE5OWVhBZ1BTQm1ZeTV6ZEdGeWRDNXpiM1Z5WTJVZ1BUMDlJQ2Q3Snp0Y2JpQWdJQ0JqYjI1emRDQm1ZMDVoYldVZ1BTQnBjMDFoY0NBL0lDZG1iRzkzSUcxaGNDY2dPaUFuWm14dmR5QnpaWEYxWlc1alpTYzdYRzRnSUNBZ1kyOXVjM1FnVG05a1pVTnNZWE56SUQwZ0tIUmhaejh1Ym05a1pVTnNZWE56SUQ4L0lDaHBjMDFoY0NBL0lGbEJUVXhOWVhBZ09pQlpRVTFNVTJWeEtTazdYRzRnSUNBZ1kyOXVjM1FnWTI5c2JDQTlJRzVsZHlCT2IyUmxRMnhoYzNNb1kzUjRMbk5qYUdWdFlTazdYRzRnSUNBZ1kyOXNiQzVtYkc5M0lEMGdkSEoxWlR0Y2JpQWdJQ0JqYjI1emRDQmhkRkp2YjNRZ1BTQmpkSGd1WVhSU2IyOTBPMXh1SUNBZ0lHbG1JQ2hoZEZKdmIzUXBYRzRnSUNBZ0lDQWdJR04wZUM1aGRGSnZiM1FnUFNCbVlXeHpaVHRjYmlBZ0lDQnBaaUFvWTNSNExtRjBTMlY1S1Z4dUlDQWdJQ0FnSUNCamRIZ3VZWFJMWlhrZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0JzWlhRZ2IyWm1jMlYwSUQwZ1ptTXViMlptYzJWMElDc2dabU11YzNSaGNuUXVjMjkxY21ObExteGxibWQwYUR0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdaakxtbDBaVzF6TG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHTnZiR3hKZEdWdElEMGdabU11YVhSbGJYTmJhVjA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSHNnYzNSaGNuUXNJR3RsZVN3Z2MyVndMQ0IyWVd4MVpTQjlJRDBnWTI5c2JFbDBaVzA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEJ5YjNCeklEMGdjbVZ6YjJ4MlpWQnliM0J6S0hOMFlYSjBMQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQm1iRzkzT2lCbVkwNWhiV1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBibVJwWTJGMGIzSTZJQ2RsZUhCc2FXTnBkQzFyWlhrdGFXNWtKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFE2SUd0bGVTQS9QeUJ6WlhBL0xsc3dYU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZEN4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSXNYRzRnSUNBZ0lDQWdJQ0FnSUNCd1lYSmxiblJKYm1SbGJuUTZJR1pqTG1sdVpHVnVkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lITjBZWEowVDI1T1pYZHNhVzVsT2lCbVlXeHpaVnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0Z3Y205d2N5NW1iM1Z1WkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRndjbTl3Y3k1aGJtTm9iM0lnSmlZZ0lYQnliM0J6TG5SaFp5QW1KaUFoYzJWd0lDWW1JQ0YyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocElEMDlQU0F3SUNZbUlIQnliM0J6TG1OdmJXMWhLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmJrVnljbTl5S0hCeWIzQnpMbU52YlcxaExDQW5WVTVGV0ZCRlExUkZSRjlVVDB0RlRpY3NJR0JWYm1WNGNHVmpkR1ZrSUN3Z2FXNGdKSHRtWTA1aGJXVjlZQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnBaaUFvYVNBOElHWmpMbWwwWlcxekxteGxibWQwYUNBdElERXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5dVJYSnliM0lvY0hKdmNITXVjM1JoY25Rc0lDZFZUa1ZZVUVWRFZFVkVYMVJQUzBWT0p5d2dZRlZ1Wlhod1pXTjBaV1FnWlcxd2RIa2dhWFJsYlNCcGJpQWtlMlpqVG1GdFpYMWdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NISnZjSE11WTI5dGJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWTI5c2JDNWpiMjF0Wlc1MEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXNiQzVqYjIxdFpXNTBJQ3M5SUNkY1hHNG5JQ3NnY0hKdmNITXVZMjl0YldWdWREdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXNiQzVqYjIxdFpXNTBJRDBnY0hKdmNITXVZMjl0YldWdWREdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMlptYzJWMElEMGdjSEp2Y0hNdVpXNWtPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRnBjMDFoY0NBbUppQmpkSGd1YjNCMGFXOXVjeTV6ZEhKcFkzUWdKaVlnWTI5dWRHRnBibk5PWlhkc2FXNWxLR3RsZVNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyNUZjbkp2Y2loclpYa3NJQzh2SUdOb1pXTnJaV1FnWW5rZ1kyOXVkR0ZwYm5OT1pYZHNhVzVsS0NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBblRWVk1WRWxNU1U1RlgwbE5VRXhKUTBsVVgwdEZXU2NzSUNkSmJYQnNhV05wZENCclpYbHpJRzltSUdac2IzY2djMlZ4ZFdWdVkyVWdjR0ZwY25NZ2JtVmxaQ0IwYnlCaVpTQnZiaUJoSUhOcGJtZHNaU0JzYVc1bEp5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tHa2dQVDA5SURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHdjbTl3Y3k1amIyMXRZU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLSEJ5YjNCekxtTnZiVzFoTENBblZVNUZXRkJGUTFSRlJGOVVUMHRGVGljc0lHQlZibVY0Y0dWamRHVmtJQ3dnYVc0Z0pIdG1ZMDVoYldWOVlDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JWEJ5YjNCekxtTnZiVzFoS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5dVJYSnliM0lvY0hKdmNITXVjM1JoY25Rc0lDZE5TVk5UU1U1SFgwTklRVkluTENCZ1RXbHpjMmx1WnlBc0lHSmxkSGRsWlc0Z0pIdG1ZMDVoYldWOUlHbDBaVzF6WUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NISnZjSE11WTI5dGJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQndjbVYyU1hSbGJVTnZiVzFsYm5RZ1BTQW5KenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjI5d09pQm1iM0lnS0dOdmJuTjBJSE4wSUc5bUlITjBZWEowS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4zYVhSamFDQW9jM1F1ZEhsd1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblkyOXRiV0VuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5jM0JoWTJVbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWTI5dGJXVnVkQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISmxka2wwWlcxRGIyMXRaVzUwSUQwZ2MzUXVjMjkxY21ObExuTjFZbk4wY21sdVp5Z3hLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhheUJzYjI5d08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXlCc2IyOXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h3Y21WMlNYUmxiVU52YlcxbGJuUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEJ5WlhZZ1BTQmpiMnhzTG1sMFpXMXpXMk52Ykd3dWFYUmxiWE11YkdWdVozUm9JQzBnTVYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocGMxQmhhWElvY0hKbGRpa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbVYySUQwZ2NISmxkaTUyWVd4MVpTQS9QeUJ3Y21WMkxtdGxlVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEJ5WlhZdVkyOXRiV1Z1ZENsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCeVpYWXVZMjl0YldWdWRDQXJQU0FuWEZ4dUp5QXJJSEJ5WlhaSmRHVnRRMjl0YldWdWREdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISmxkaTVqYjIxdFpXNTBJRDBnY0hKbGRrbDBaVzFEYjIxdFpXNTBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2NtOXdjeTVqYjIxdFpXNTBJRDBnY0hKdmNITXVZMjl0YldWdWRDNXpkV0p6ZEhKcGJtY29jSEpsZGtsMFpXMURiMjF0Wlc1MExteGxibWQwYUNBcklERXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb0lXbHpUV0Z3SUNZbUlDRnpaWEFnSmlZZ0lYQnliM0J6TG1admRXNWtLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJwZEdWdElHbHpJR0VnZG1Gc2RXVWdhVzRnWVNCelpYRmNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklGeDFNakU1TWlCclpYa2dKaUJ6WlhBZ1lYSmxJR1Z0Y0hSNUxDQnpkR0Z5ZENCa2IyVnpJRzV2ZENCcGJtTnNkV1JsSUQ4Z2IzSWdPbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZG1Gc2RXVk9iMlJsSUQwZ2RtRnNkV1ZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0EvSUdOdmJYQnZjMlZPYjJSbEtHTjBlQ3dnZG1Gc2RXVXNJSEJ5YjNCekxDQnZia1Z5Y205eUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dZMjl0Y0c5elpVVnRjSFI1VG05a1pTaGpkSGdzSUhCeWIzQnpMbVZ1WkN3Z2MyVndMQ0J1ZFd4c0xDQndjbTl3Y3l3Z2IyNUZjbkp2Y2lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjJ4c0xtbDBaVzF6TG5CMWMyZ29kbUZzZFdWT2IyUmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZENBOUlIWmhiSFZsVG05a1pTNXlZVzVuWlZzeVhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBjMEpzYjJOcktIWmhiSFZsS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmJrVnljbTl5S0haaGJIVmxUbTlrWlM1eVlXNW5aU3dnSjBKTVQwTkxYMGxPWDBaTVQxY25MQ0JpYkc5amEwMXpaeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJwZEdWdElHbHpJR0VnYTJWNUszWmhiSFZsSUhCaGFYSmNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklHdGxlU0IyWVd4MVpWeHVJQ0FnSUNBZ0lDQWdJQ0FnWTNSNExtRjBTMlY1SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUd0bGVWTjBZWEowSUQwZ2NISnZjSE11Wlc1a08xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdhMlY1VG05a1pTQTlJR3RsZVZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUQ4Z1kyOXRjRzl6WlU1dlpHVW9ZM1I0TENCclpYa3NJSEJ5YjNCekxDQnZia1Z5Y205eUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dZMjl0Y0c5elpVVnRjSFI1VG05a1pTaGpkSGdzSUd0bGVWTjBZWEowTENCemRHRnlkQ3dnYm5Wc2JDd2djSEp2Y0hNc0lHOXVSWEp5YjNJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbHpRbXh2WTJzb2EyVjVLU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLR3RsZVU1dlpHVXVjbUZ1WjJVc0lDZENURTlEUzE5SlRsOUdURTlYSnl3Z1lteHZZMnROYzJjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTNSNExtRjBTMlY1SUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUIyWVd4MVpTQndjbTl3WlhKMGFXVnpYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpWQnliM0J6SUQwZ2NtVnpiMngyWlZCeWIzQnpLSE5sY0NBL1B5QmJYU3dnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdac2IzYzZJR1pqVG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBibVJwWTJGMGIzSTZJQ2R0WVhBdGRtRnNkV1V0YVc1a0p5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwT2lCMllXeDFaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2Wm1aelpYUTZJR3RsZVU1dlpHVXVjbUZ1WjJWYk1sMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndZWEpsYm5SSmJtUmxiblE2SUdaakxtbHVaR1Z1ZEN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRHRnlkRTl1VG1WM2JHbHVaVG9nWm1Gc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIWmhiSFZsVUhKdmNITXVabTkxYm1RcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdselRXRndJQ1ltSUNGd2NtOXdjeTVtYjNWdVpDQW1KaUJqZEhndWIzQjBhVzl1Y3k1emRISnBZM1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hObGNDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvWTI5dWMzUWdjM1FnYjJZZ2MyVndLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSE4wSUQwOVBTQjJZV3gxWlZCeWIzQnpMbVp2ZFc1a0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jM1F1ZEhsd1pTQTlQVDBnSjI1bGQyeHBibVVuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5dVJYSnliM0lvYzNRc0lDZE5WVXhVU1V4SlRrVmZTVTFRVEVsRFNWUmZTMFZaSnl3Z0owbHRjR3hwWTJsMElHdGxlWE1nYjJZZ1pteHZkeUJ6WlhGMVpXNWpaU0J3WVdseWN5QnVaV1ZrSUhSdklHSmxJRzl1SUdFZ2MybHVaMnhsSUd4cGJtVW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jSEp2Y0hNdWMzUmhjblFnUENCMllXeDFaVkJ5YjNCekxtWnZkVzVrTG05bVpuTmxkQ0F0SURFd01qUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtIWmhiSFZsVUhKdmNITXVabTkxYm1Rc0lDZExSVmxmVDFaRlVsOHhNREkwWDBOSVFWSlRKeXdnSjFSb1pTQTZJR2x1WkdsallYUnZjaUJ0ZFhOMElHSmxJR0YwSUcxdmMzUWdNVEF5TkNCamFHRnljeUJoWm5SbGNpQjBhR1VnYzNSaGNuUWdiMllnWVc0Z2FXMXdiR2xqYVhRZ1pteHZkeUJ6WlhGMVpXNWpaU0JyWlhrbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2gyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnbmMyOTFjbU5sSnlCcGJpQjJZV3gxWlNBbUppQjJZV3gxWlM1emIzVnlZMlVnSmlZZ2RtRnNkV1V1YzI5MWNtTmxXekJkSUQwOVBTQW5PaWNwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOXVSWEp5YjNJb2RtRnNkV1VzSUNkTlNWTlRTVTVIWDBOSVFWSW5MQ0JnVFdsemMybHVaeUJ6Y0dGalpTQmhablJsY2lBNklHbHVJQ1I3Wm1OT1lXMWxmV0FwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjI1RmNuSnZjaWgyWVd4MVpWQnliM0J6TG5OMFlYSjBMQ0FuVFVsVFUwbE9SMTlEU0VGU0p5d2dZRTFwYzNOcGJtY2dMQ0J2Y2lBNklHSmxkSGRsWlc0Z0pIdG1ZMDVoYldWOUlHbDBaVzF6WUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUIyWVd4MVpTQjJZV3gxWlZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1ZPYjJSbElEMGdkbUZzZFdWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBL0lHTnZiWEJ2YzJWT2IyUmxLR04wZUN3Z2RtRnNkV1VzSUhaaGJIVmxVSEp2Y0hNc0lHOXVSWEp5YjNJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ09pQjJZV3gxWlZCeWIzQnpMbVp2ZFc1a1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRDhnWTI5dGNHOXpaVVZ0Y0hSNVRtOWtaU2hqZEhnc0lIWmhiSFZsVUhKdmNITXVaVzVrTENCelpYQXNJRzUxYkd3c0lIWmhiSFZsVUhKdmNITXNJRzl1UlhKeWIzSXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gyWVd4MVpVNXZaR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hWE5DYkc5amF5aDJZV3gxWlNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9kbUZzZFdWT2IyUmxMbkpoYm1kbExDQW5Ra3hQUTB0ZlNVNWZSa3hQVnljc0lHSnNiMk5yVFhObktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLSFpoYkhWbFVISnZjSE11WTI5dGJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHJaWGxPYjJSbExtTnZiVzFsYm5RcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3RsZVU1dlpHVXVZMjl0YldWdWRDQXJQU0FuWEZ4dUp5QXJJSFpoYkhWbFVISnZjSE11WTI5dGJXVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3RsZVU1dlpHVXVZMjl0YldWdWRDQTlJSFpoYkhWbFVISnZjSE11WTI5dGJXVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSEJoYVhJZ1BTQnVaWGNnVUdGcGNpaHJaWGxPYjJSbExDQjJZV3gxWlU1dlpHVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR04wZUM1dmNIUnBiMjV6TG10bFpYQlRiM1Z5WTJWVWIydGxibk1wWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0dGcGNpNXpjbU5VYjJ0bGJpQTlJR052Ykd4SmRHVnRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2x6VFdGd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JXRndJRDBnWTI5c2JEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYldGd1NXNWpiSFZrWlhNb1kzUjRMQ0J0WVhBdWFYUmxiWE1zSUd0bGVVNXZaR1VwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtHdGxlVk4wWVhKMExDQW5SRlZRVEVsRFFWUkZYMHRGV1Njc0lDZE5ZWEFnYTJWNWN5QnRkWE4wSUdKbElIVnVhWEYxWlNjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMWhjQzVwZEdWdGN5NXdkWE5vS0hCaGFYSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JXRndJRDBnYm1WM0lGbEJUVXhOWVhBb1kzUjRMbk5qYUdWdFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiV0Z3TG1ac2IzY2dQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMWhjQzVwZEdWdGN5NXdkWE5vS0hCaGFYSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHVnVaRkpoYm1kbElEMGdLSFpoYkhWbFRtOWtaU0EvUHlCclpYbE9iMlJsS1M1eVlXNW5aVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J0WVhBdWNtRnVaMlVnUFNCYmEyVjVUbTlrWlM1eVlXNW5aVnN3WFN3Z1pXNWtVbUZ1WjJWYk1WMHNJR1Z1WkZKaGJtZGxXekpkWFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyeHNMbWwwWlcxekxuQjFjMmdvYldGd0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJRzltWm5ObGRDQTlJSFpoYkhWbFRtOWtaU0EvSUhaaGJIVmxUbTlrWlM1eVlXNW5aVnN5WFNBNklIWmhiSFZsVUhKdmNITXVaVzVrTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElHVjRjR1ZqZEdWa1JXNWtJRDBnYVhOTllYQWdQeUFuZlNjZ09pQW5YU2M3WEc0Z0lDQWdZMjl1YzNRZ1cyTmxMQ0F1TGk1bFpWMGdQU0JtWXk1bGJtUTdYRzRnSUNBZ2JHVjBJR05sVUc5eklEMGdiMlptYzJWME8xeHVJQ0FnSUdsbUlDaGpaU0FtSmlCalpTNXpiM1Z5WTJVZ1BUMDlJR1Y0Y0dWamRHVmtSVzVrS1Z4dUlDQWdJQ0FnSUNCalpWQnZjeUE5SUdObExtOW1abk5sZENBcklHTmxMbk52ZFhKalpTNXNaVzVuZEdnN1hHNGdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHNWhiV1VnUFNCbVkwNWhiV1ZiTUYwdWRHOVZjSEJsY2tOaGMyVW9LU0FySUdaalRtRnRaUzV6ZFdKemRISnBibWNvTVNrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxelp5QTlJR0YwVW05dmRGeHVJQ0FnSUNBZ0lDQWdJQ0FnUHlCZ0pIdHVZVzFsZlNCdGRYTjBJR1Z1WkNCM2FYUm9JR0VnSkh0bGVIQmxZM1JsWkVWdVpIMWdYRzRnSUNBZ0lDQWdJQ0FnSUNBNklHQWtlMjVoYldWOUlHbHVJR0pzYjJOcklHTnZiR3hsWTNScGIyNGdiWFZ6ZENCaVpTQnpkV1ptYVdOcFpXNTBiSGtnYVc1a1pXNTBaV1FnWVc1a0lHVnVaQ0IzYVhSb0lHRWdKSHRsZUhCbFkzUmxaRVZ1WkgxZ08xeHVJQ0FnSUNBZ0lDQnZia1Z5Y205eUtHOW1abk5sZEN3Z1lYUlNiMjkwSUQ4Z0owMUpVMU5KVGtkZlEwaEJVaWNnT2lBblFrRkVYMGxPUkVWT1ZDY3NJRzF6WnlrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hqWlNBbUppQmpaUzV6YjNWeVkyVXViR1Z1WjNSb0lDRTlQU0F4S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdaV1V1ZFc1emFHbG1kQ2hqWlNrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNobFpTNXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1Z1WkNBOUlISmxjMjlzZG1WRmJtUW9aV1VzSUdObFVHOXpMQ0JqZEhndWIzQjBhVzl1Y3k1emRISnBZM1FzSUc5dVJYSnliM0lwTzF4dUlDQWdJQ0FnSUNCcFppQW9aVzVrTG1OdmJXMWxiblFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamIyeHNMbU52YlcxbGJuUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjlzYkM1amIyMXRaVzUwSUNzOUlDZGNYRzRuSUNzZ1pXNWtMbU52YlcxbGJuUTdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjlzYkM1amIyMXRaVzUwSUQwZ1pXNWtMbU52YlcxbGJuUTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWTI5c2JDNXlZVzVuWlNBOUlGdG1ZeTV2Wm1aelpYUXNJR05sVUc5ekxDQmxibVF1YjJabWMyVjBYVHRjYmlBZ0lDQjlYRzRnSUNBZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdOdmJHd3VjbUZ1WjJVZ1BTQmJabU11YjJabWMyVjBMQ0JqWlZCdmN5d2dZMlZRYjNOZE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdZMjlzYkR0Y2JuMWNibHh1Wlhod2IzSjBJSHNnY21WemIyeDJaVVpzYjNkRGIyeHNaV04wYVc5dUlIMDdYRzRpTENBaWFXMXdiM0owSUhzZ2FYTk9iMlJsSUgwZ1puSnZiU0FuTGk0dmJtOWtaWE12YVdSbGJuUnBkSGt1YW5Nbk8xeHVhVzF3YjNKMElIc2dVMk5oYkdGeUlIMGdabkp2YlNBbkxpNHZibTlrWlhNdlUyTmhiR0Z5TG1wekp6dGNibWx0Y0c5eWRDQjdJRmxCVFV4TllYQWdmU0JtY205dElDY3VMaTl1YjJSbGN5OVpRVTFNVFdGd0xtcHpKenRjYm1sdGNHOXlkQ0I3SUZsQlRVeFRaWEVnZlNCbWNtOXRJQ2N1TGk5dWIyUmxjeTlaUVUxTVUyVnhMbXB6Snp0Y2JtbHRjRzl5ZENCN0lISmxjMjlzZG1WQ2JHOWphMDFoY0NCOUlHWnliMjBnSnk0dmNtVnpiMngyWlMxaWJHOWpheTF0WVhBdWFuTW5PMXh1YVcxd2IzSjBJSHNnY21WemIyeDJaVUpzYjJOclUyVnhJSDBnWm5KdmJTQW5MaTl5WlhOdmJIWmxMV0pzYjJOckxYTmxjUzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnlaWE52YkhabFJteHZkME52Ykd4bFkzUnBiMjRnZlNCbWNtOXRJQ2N1TDNKbGMyOXNkbVV0Wm14dmR5MWpiMnhzWldOMGFXOXVMbXB6Snp0Y2JseHVablZ1WTNScGIyNGdjbVZ6YjJ4MlpVTnZiR3hsWTNScGIyNG9RMDRzSUdOMGVDd2dkRzlyWlc0c0lHOXVSWEp5YjNJc0lIUmhaMDVoYldVc0lIUmhaeWtnZTF4dUlDQWdJR052Ym5OMElHTnZiR3dnUFNCMGIydGxiaTUwZVhCbElEMDlQU0FuWW14dlkyc3RiV0Z3SjF4dUlDQWdJQ0FnSUNBL0lISmxjMjlzZG1WQ2JHOWphMDFoY0NoRFRpd2dZM1I0TENCMGIydGxiaXdnYjI1RmNuSnZjaXdnZEdGbktWeHVJQ0FnSUNBZ0lDQTZJSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZGliRzlqYXkxelpYRW5YRzRnSUNBZ0lDQWdJQ0FnSUNBL0lISmxjMjlzZG1WQ2JHOWphMU5sY1NoRFRpd2dZM1I0TENCMGIydGxiaXdnYjI1RmNuSnZjaXdnZEdGbktWeHVJQ0FnSUNBZ0lDQWdJQ0FnT2lCeVpYTnZiSFpsUm14dmQwTnZiR3hsWTNScGIyNG9RMDRzSUdOMGVDd2dkRzlyWlc0c0lHOXVSWEp5YjNJc0lIUmhaeWs3WEc0Z0lDQWdZMjl1YzNRZ1EyOXNiQ0E5SUdOdmJHd3VZMjl1YzNSeWRXTjBiM0k3WEc0Z0lDQWdMeThnU1dZZ2QyVWdaMjkwSUdFZ2RHRm5UbUZ0WlNCdFlYUmphR2x1WnlCMGFHVWdZMnhoYzNNc0lHOXlJSFJvWlNCMFlXY2dibUZ0WlNCcGN5QW5JU2NzWEc0Z0lDQWdMeThnZEdobGJpQjFjMlVnZEdobElIUmhaMDVoYldVZ1puSnZiU0IwYUdVZ2JtOWtaU0JqYkdGemN5QjFjMlZrSUhSdklHTnlaV0YwWlNCcGRDNWNiaUFnSUNCcFppQW9kR0ZuVG1GdFpTQTlQVDBnSnlFbklIeDhJSFJoWjA1aGJXVWdQVDA5SUVOdmJHd3VkR0ZuVG1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0JqYjJ4c0xuUmhaeUE5SUVOdmJHd3VkR0ZuVG1GdFpUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHTnZiR3c3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2gwWVdkT1lXMWxLVnh1SUNBZ0lDQWdJQ0JqYjJ4c0xuUmhaeUE5SUhSaFowNWhiV1U3WEc0Z0lDQWdjbVYwZFhKdUlHTnZiR3c3WEc1OVhHNW1kVzVqZEdsdmJpQmpiMjF3YjNObFEyOXNiR1ZqZEdsdmJpaERUaXdnWTNSNExDQjBiMnRsYml3Z2NISnZjSE1zSUc5dVJYSnliM0lwSUh0Y2JpQWdJQ0JqYjI1emRDQjBZV2RVYjJ0bGJpQTlJSEJ5YjNCekxuUmhaenRjYmlBZ0lDQmpiMjV6ZENCMFlXZE9ZVzFsSUQwZ0lYUmhaMVJ2YTJWdVhHNGdJQ0FnSUNBZ0lEOGdiblZzYkZ4dUlDQWdJQ0FnSUNBNklHTjBlQzVrYVhKbFkzUnBkbVZ6TG5SaFowNWhiV1VvZEdGblZHOXJaVzR1YzI5MWNtTmxMQ0J0YzJjZ1BUNGdiMjVGY25KdmNpaDBZV2RVYjJ0bGJpd2dKMVJCUjE5U1JWTlBURlpGWDBaQlNVeEZSQ2NzSUcxelp5a3BPMXh1SUNBZ0lHbG1JQ2gwYjJ0bGJpNTBlWEJsSUQwOVBTQW5ZbXh2WTJzdGMyVnhKeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3SUdGdVkyaHZjaXdnYm1WM2JHbHVaVUZtZEdWeVVISnZjRG9nYm13Z2ZTQTlJSEJ5YjNCek8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCc1lYTjBVSEp2Y0NBOUlHRnVZMmh2Y2lBbUppQjBZV2RVYjJ0bGJseHVJQ0FnSUNBZ0lDQWdJQ0FnUHlCaGJtTm9iM0l1YjJabWMyVjBJRDRnZEdGblZHOXJaVzR1YjJabWMyVjBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQeUJoYm1Ob2IzSmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJSFJoWjFSdmEyVnVYRzRnSUNBZ0lDQWdJQ0FnSUNBNklDaGhibU5vYjNJZ1B6OGdkR0ZuVkc5clpXNHBPMXh1SUNBZ0lDQWdJQ0JwWmlBb2JHRnpkRkJ5YjNBZ0ppWWdLQ0Z1YkNCOGZDQnViQzV2Wm1aelpYUWdQQ0JzWVhOMFVISnZjQzV2Wm1aelpYUXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdFpYTnpZV2RsSUQwZ0owMXBjM05wYm1jZ2JtVjNiR2x1WlNCaFpuUmxjaUJpYkc5amF5QnpaWEYxWlc1alpTQndjbTl3Y3ljN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLR3hoYzNSUWNtOXdMQ0FuVFVsVFUwbE9SMTlEU0VGU0p5d2diV1Z6YzJGblpTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ1kyOXVjM1FnWlhod1ZIbHdaU0E5SUhSdmEyVnVMblI1Y0dVZ1BUMDlJQ2RpYkc5amF5MXRZWEFuWEc0Z0lDQWdJQ0FnSUQ4Z0oyMWhjQ2RjYmlBZ0lDQWdJQ0FnT2lCMGIydGxiaTUwZVhCbElEMDlQU0FuWW14dlkyc3RjMlZ4SjF4dUlDQWdJQ0FnSUNBZ0lDQWdQeUFuYzJWeEoxeHVJQ0FnSUNBZ0lDQWdJQ0FnT2lCMGIydGxiaTV6ZEdGeWRDNXpiM1Z5WTJVZ1BUMDlJQ2Q3SjF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUQ4Z0oyMWhjQ2RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNkelpYRW5PMXh1SUNBZ0lDOHZJSE5vYjNKMFkzVjBPaUJqYUdWamF5QnBaaUJwZENkeklHRWdaMlZ1WlhKcFl5QlpRVTFNVFdGd0lHOXlJRmxCVFV4VFpYRmNiaUFnSUNBdkx5QmlaV1p2Y21VZ2FuVnRjR2x1WnlCcGJuUnZJSFJvWlNCamRYTjBiMjBnZEdGbklHeHZaMmxqTGx4dUlDQWdJR2xtSUNnaGRHRm5WRzlyWlc0Z2ZIeGNiaUFnSUNBZ0lDQWdJWFJoWjA1aGJXVWdmSHhjYmlBZ0lDQWdJQ0FnZEdGblRtRnRaU0E5UFQwZ0p5RW5JSHg4WEc0Z0lDQWdJQ0FnSUNoMFlXZE9ZVzFsSUQwOVBTQlpRVTFNVFdGd0xuUmhaMDVoYldVZ0ppWWdaWGh3Vkhsd1pTQTlQVDBnSjIxaGNDY3BJSHg4WEc0Z0lDQWdJQ0FnSUNoMFlXZE9ZVzFsSUQwOVBTQlpRVTFNVTJWeExuUmhaMDVoYldVZ0ppWWdaWGh3Vkhsd1pTQTlQVDBnSjNObGNTY3BLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxRMjlzYkdWamRHbHZiaWhEVGl3Z1kzUjRMQ0IwYjJ0bGJpd2diMjVGY25KdmNpd2dkR0ZuVG1GdFpTazdYRzRnSUNBZ2ZWeHVJQ0FnSUd4bGRDQjBZV2NnUFNCamRIZ3VjMk5vWlcxaExuUmhaM011Wm1sdVpDaDBJRDArSUhRdWRHRm5JRDA5UFNCMFlXZE9ZVzFsSUNZbUlIUXVZMjlzYkdWamRHbHZiaUE5UFQwZ1pYaHdWSGx3WlNrN1hHNGdJQ0FnYVdZZ0tDRjBZV2NwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYTNRZ1BTQmpkSGd1YzJOb1pXMWhMbXR1YjNkdVZHRm5jMXQwWVdkT1lXMWxYVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHdDBJQ1ltSUd0MExtTnZiR3hsWTNScGIyNGdQVDA5SUdWNGNGUjVjR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR04wZUM1elkyaGxiV0V1ZEdGbmN5NXdkWE5vS0U5aWFtVmpkQzVoYzNOcFoyNG9lMzBzSUd0MExDQjdJR1JsWm1GMWJIUTZJR1poYkhObElIMHBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUmhaeUE5SUd0ME8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHdDBQeTVqYjJ4c1pXTjBhVzl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyNUZjbkp2Y2loMFlXZFViMnRsYml3Z0owSkJSRjlEVDB4TVJVTlVTVTlPWDFSWlVFVW5MQ0JnSkh0cmRDNTBZV2Q5SUhWelpXUWdabTl5SUNSN1pYaHdWSGx3WlgwZ1kyOXNiR1ZqZEdsdmJpd2dZblYwSUdWNGNHVmpkSE1nSkh0cmRDNWpiMnhzWldOMGFXOXVmV0FzSUhSeWRXVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpaDBZV2RVYjJ0bGJpd2dKMVJCUjE5U1JWTlBURlpGWDBaQlNVeEZSQ2NzSUdCVmJuSmxjMjlzZG1Wa0lIUmhaem9nSkh0MFlXZE9ZVzFsZldBc0lIUnlkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVZEYjJ4c1pXTjBhVzl1S0VOT0xDQmpkSGdzSUhSdmEyVnVMQ0J2YmtWeWNtOXlMQ0IwWVdkT1lXMWxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQmpiMjV6ZENCamIyeHNJRDBnY21WemIyeDJaVU52Ykd4bFkzUnBiMjRvUTA0c0lHTjBlQ3dnZEc5clpXNHNJRzl1UlhKeWIzSXNJSFJoWjA1aGJXVXNJSFJoWnlrN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ2RHRm5MbkpsYzI5c2RtVS9MaWhqYjJ4c0xDQnRjMmNnUFQ0Z2IyNUZjbkp2Y2loMFlXZFViMnRsYml3Z0oxUkJSMTlTUlZOUFRGWkZYMFpCU1V4RlJDY3NJRzF6Wnlrc0lHTjBlQzV2Y0hScGIyNXpLU0EvUHlCamIyeHNPMXh1SUNBZ0lHTnZibk4wSUc1dlpHVWdQU0JwYzA1dlpHVW9jbVZ6S1Z4dUlDQWdJQ0FnSUNBL0lISmxjMXh1SUNBZ0lDQWdJQ0E2SUc1bGR5QlRZMkZzWVhJb2NtVnpLVHRjYmlBZ0lDQnViMlJsTG5KaGJtZGxJRDBnWTI5c2JDNXlZVzVuWlR0Y2JpQWdJQ0J1YjJSbExuUmhaeUE5SUhSaFowNWhiV1U3WEc0Z0lDQWdhV1lnS0hSaFp6OHVabTl5YldGMEtWeHVJQ0FnSUNBZ0lDQnViMlJsTG1admNtMWhkQ0E5SUhSaFp5NW1iM0p0WVhRN1hHNGdJQ0FnY21WMGRYSnVJRzV2WkdVN1hHNTlYRzVjYm1WNGNHOXlkQ0I3SUdOdmJYQnZjMlZEYjJ4c1pXTjBhVzl1SUgwN1hHNGlMQ0FpYVcxd2IzSjBJSHNnVTJOaGJHRnlJSDBnWm5KdmJTQW5MaTR2Ym05a1pYTXZVMk5oYkdGeUxtcHpKenRjYmx4dVpuVnVZM1JwYjI0Z2NtVnpiMngyWlVKc2IyTnJVMk5oYkdGeUtHTjBlQ3dnYzJOaGJHRnlMQ0J2YmtWeWNtOXlLU0I3WEc0Z0lDQWdZMjl1YzNRZ2MzUmhjblFnUFNCelkyRnNZWEl1YjJabWMyVjBPMXh1SUNBZ0lHTnZibk4wSUdobFlXUmxjaUE5SUhCaGNuTmxRbXh2WTJ0VFkyRnNZWEpJWldGa1pYSW9jMk5oYkdGeUxDQmpkSGd1YjNCMGFXOXVjeTV6ZEhKcFkzUXNJRzl1UlhKeWIzSXBPMXh1SUNBZ0lHbG1JQ2doYUdWaFpHVnlLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdleUIyWVd4MVpUb2dKeWNzSUhSNWNHVTZJRzUxYkd3c0lHTnZiVzFsYm5RNklDY25MQ0J5WVc1blpUb2dXM04wWVhKMExDQnpkR0Z5ZEN3Z2MzUmhjblJkSUgwN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlNBOUlHaGxZV1JsY2k1dGIyUmxJRDA5UFNBblBpY2dQeUJUWTJGc1lYSXVRa3hQUTB0ZlJrOU1SRVZFSURvZ1UyTmhiR0Z5TGtKTVQwTkxYMHhKVkVWU1FVdzdYRzRnSUNBZ1kyOXVjM1FnYkdsdVpYTWdQU0J6WTJGc1lYSXVjMjkxY21ObElEOGdjM0JzYVhSTWFXNWxjeWh6WTJGc1lYSXVjMjkxY21ObEtTQTZJRnRkTzF4dUlDQWdJQzh2SUdSbGRHVnliV2x1WlNCMGFHVWdaVzVrSUc5bUlHTnZiblJsYm5RZ0ppQnpkR0Z5ZENCdlppQmphRzl0Y0dsdVoxeHVJQ0FnSUd4bGRDQmphRzl0Y0ZOMFlYSjBJRDBnYkdsdVpYTXViR1Z1WjNSb08xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQnNhVzVsY3k1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SURBN0lDMHRhU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JqYjI1MFpXNTBJRDBnYkdsdVpYTmJhVjFiTVYwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjI1MFpXNTBJRDA5UFNBbkp5QjhmQ0JqYjI1MFpXNTBJRDA5UFNBblhGeHlKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lHTm9iMjF3VTNSaGNuUWdQU0JwTzF4dUlDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ0x5OGdjMmh2Y25SamRYUWdabTl5SUdWdGNIUjVJR052Ym5SbGJuUnpYRzRnSUNBZ2FXWWdLR05vYjIxd1UzUmhjblFnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkbUZzZFdVZ1BTQm9aV0ZrWlhJdVkyaHZiWEFnUFQwOUlDY3JKeUFtSmlCc2FXNWxjeTVzWlc1bmRHZ2dQaUF3WEc0Z0lDQWdJQ0FnSUNBZ0lDQS9JQ2RjWEc0bkxuSmxjR1ZoZENoTllYUm9MbTFoZUNneExDQnNhVzVsY3k1c1pXNW5kR2dnTFNBeEtTbGNiaUFnSUNBZ0lDQWdJQ0FnSURvZ0p5YzdYRzRnSUNBZ0lDQWdJR3hsZENCbGJtUWdQU0J6ZEdGeWRDQXJJR2hsWVdSbGNpNXNaVzVuZEdnN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h6WTJGc1lYSXVjMjkxY21ObEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnWlc1a0lDczlJSE5qWVd4aGNpNXpiM1Z5WTJVdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZXlCMllXeDFaU3dnZEhsd1pTd2dZMjl0YldWdWREb2dhR1ZoWkdWeUxtTnZiVzFsYm5Rc0lISmhibWRsT2lCYmMzUmhjblFzSUdWdVpDd2daVzVrWFNCOU8xeHVJQ0FnSUgxY2JpQWdJQ0F2THlCbWFXNWtJSFJvWlNCcGJtUmxiblJoZEdsdmJpQnNaWFpsYkNCMGJ5QjBjbWx0SUdaeWIyMGdjM1JoY25SY2JpQWdJQ0JzWlhRZ2RISnBiVWx1WkdWdWRDQTlJSE5qWVd4aGNpNXBibVJsYm5RZ0t5Qm9aV0ZrWlhJdWFXNWtaVzUwTzF4dUlDQWdJR3hsZENCdlptWnpaWFFnUFNCelkyRnNZWEl1YjJabWMyVjBJQ3NnYUdWaFpHVnlMbXhsYm1kMGFEdGNiaUFnSUNCc1pYUWdZMjl1ZEdWdWRGTjBZWEowSUQwZ01EdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHTm9iMjF3VTNSaGNuUTdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCYmFXNWtaVzUwTENCamIyNTBaVzUwWFNBOUlHeHBibVZ6VzJsZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWTI5dWRHVnVkQ0E5UFQwZ0p5Y2dmSHdnWTI5dWRHVnVkQ0E5UFQwZ0oxeGNjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNob1pXRmtaWEl1YVc1a1pXNTBJRDA5UFNBd0lDWW1JR2x1WkdWdWRDNXNaVzVuZEdnZ1BpQjBjbWx0U1c1a1pXNTBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJ5YVcxSmJtUmxiblFnUFNCcGJtUmxiblF1YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2x1WkdWdWRDNXNaVzVuZEdnZ1BDQjBjbWx0U1c1a1pXNTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiV1Z6YzJGblpTQTlJQ2RDYkc5amF5QnpZMkZzWVhKeklIZHBkR2dnYlc5eVpTMXBibVJsYm5SbFpDQnNaV0ZrYVc1bklHVnRjSFI1SUd4cGJtVnpJRzExYzNRZ2RYTmxJR0Z1SUdWNGNHeHBZMmwwSUdsdVpHVnVkR0YwYVc5dUlHbHVaR2xqWVhSdmNpYzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpaHZabVp6WlhRZ0t5QnBibVJsYm5RdWJHVnVaM1JvTENBblRVbFRVMGxPUjE5RFNFRlNKeXdnYldWemMyRm5aU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hR1ZoWkdWeUxtbHVaR1Z1ZENBOVBUMGdNQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwY21sdFNXNWtaVzUwSUQwZ2FXNWtaVzUwTG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJsYm5SVGRHRnlkQ0E5SUdrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RISnBiVWx1WkdWdWRDQTlQVDBnTUNBbUppQWhZM1I0TG1GMFVtOXZkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzFsYzNOaFoyVWdQU0FuUW14dlkyc2djMk5oYkdGeUlIWmhiSFZsY3lCcGJpQmpiMnhzWldOMGFXOXVjeUJ0ZFhOMElHSmxJR2x1WkdWdWRHVmtKenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2YmtWeWNtOXlLRzltWm5ObGRDd2dKMEpCUkY5SlRrUkZUbFFuTENCdFpYTnpZV2RsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHOW1abk5sZENBclBTQnBibVJsYm5RdWJHVnVaM1JvSUNzZ1kyOXVkR1Z1ZEM1c1pXNW5kR2dnS3lBeE8xeHVJQ0FnSUgxY2JpQWdJQ0F2THlCcGJtTnNkV1JsSUhSeVlXbHNhVzVuSUcxdmNtVXRhVzVrWlc1MFpXUWdaVzF3ZEhrZ2JHbHVaWE1nYVc0Z1kyOXVkR1Z1ZEZ4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCc2FXNWxjeTVzWlc1bmRHZ2dMU0F4T3lCcElENDlJR05vYjIxd1UzUmhjblE3SUMwdGFTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2JHbHVaWE5iYVYxYk1GMHViR1Z1WjNSb0lENGdkSEpwYlVsdVpHVnVkQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lHTm9iMjF3VTNSaGNuUWdQU0JwSUNzZ01UdGNiaUFnSUNCOVhHNGdJQ0FnYkdWMElIWmhiSFZsSUQwZ0p5YzdYRzRnSUNBZ2JHVjBJSE5sY0NBOUlDY25PMXh1SUNBZ0lHeGxkQ0J3Y21WMlRXOXlaVWx1WkdWdWRHVmtJRDBnWm1Gc2MyVTdYRzRnSUNBZ0x5OGdiR1ZoWkdsdVp5QjNhR2wwWlhOd1lXTmxJR2x6SUd0bGNIUWdhVzUwWVdOMFhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCamIyNTBaVzUwVTNSaGNuUTdJQ3NyYVNsY2JpQWdJQ0FnSUNBZ2RtRnNkV1VnS3owZ2JHbHVaWE5iYVYxYk1GMHVjMnhwWTJVb2RISnBiVWx1WkdWdWRDa2dLeUFuWEZ4dUp6dGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdZMjl1ZEdWdWRGTjBZWEowT3lCcElEd2dZMmh2YlhCVGRHRnlkRHNnS3l0cEtTQjdYRzRnSUNBZ0lDQWdJR3hsZENCYmFXNWtaVzUwTENCamIyNTBaVzUwWFNBOUlHeHBibVZ6VzJsZE8xeHVJQ0FnSUNBZ0lDQnZabVp6WlhRZ0t6MGdhVzVrWlc1MExteGxibWQwYUNBcklHTnZiblJsYm5RdWJHVnVaM1JvSUNzZ01UdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1kzSnNaaUE5SUdOdmJuUmxiblJiWTI5dWRHVnVkQzVzWlc1bmRHZ2dMU0F4WFNBOVBUMGdKMXhjY2ljN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hqY214bUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHVnVkQ0E5SUdOdmJuUmxiblF1YzJ4cFkyVW9NQ3dnTFRFcE8xeHVJQ0FnSUNBZ0lDQXZLaUJwYzNSaGJtSjFiQ0JwWjI1dmNtVWdhV1lnWVd4eVpXRmtlU0JqWVhWbmFIUWdhVzRnYkdWNFpYSWdLaTljYmlBZ0lDQWdJQ0FnYVdZZ0tHTnZiblJsYm5RZ0ppWWdhVzVrWlc1MExteGxibWQwYUNBOElIUnlhVzFKYm1SbGJuUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOeVl5QTlJR2hsWVdSbGNpNXBibVJsYm5SY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBL0lDZGxlSEJzYVdOcGRDQnBibVJsYm5SaGRHbHZiaUJwYm1ScFkyRjBiM0luWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBblptbHljM1FnYkdsdVpTYzdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J0WlhOellXZGxJRDBnWUVKc2IyTnJJSE5qWVd4aGNpQnNhVzVsY3lCdGRYTjBJRzV2ZENCaVpTQnNaWE56SUdsdVpHVnVkR1ZrSUhSb1lXNGdkR2hsYVhJZ0pIdHpjbU45WUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9iMlptYzJWMElDMGdZMjl1ZEdWdWRDNXNaVzVuZEdnZ0xTQW9ZM0pzWmlBL0lESWdPaUF4S1N3Z0owSkJSRjlKVGtSRlRsUW5MQ0J0WlhOellXZGxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbHVaR1Z1ZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsSUQwOVBTQlRZMkZzWVhJdVFreFBRMHRmVEVsVVJWSkJUQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZzZFdVZ0t6MGdjMlZ3SUNzZ2FXNWtaVzUwTG5Oc2FXTmxLSFJ5YVcxSmJtUmxiblFwSUNzZ1kyOXVkR1Z1ZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5sY0NBOUlDZGNYRzRuTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHbHVaR1Z1ZEM1c1pXNW5kR2dnUGlCMGNtbHRTVzVrWlc1MElIeDhJR052Ym5SbGJuUmJNRjBnUFQwOUlDZGNYSFFuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCdGIzSmxMV2x1WkdWdWRHVmtJR052Ym5SbGJuUWdkMmwwYUdsdUlHRWdabTlzWkdWa0lHSnNiMk5yWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYzJWd0lEMDlQU0FuSUNjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVndJRDBnSjF4Y2JpYzdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtSUNnaGNISmxkazF2Y21WSmJtUmxiblJsWkNBbUppQnpaWEFnUFQwOUlDZGNYRzRuS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGNDQTlJQ2RjWEc1Y1hHNG5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnNkV1VnS3owZ2MyVndJQ3NnYVc1a1pXNTBMbk5zYVdObEtIUnlhVzFKYm1SbGJuUXBJQ3NnWTI5dWRHVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxjQ0E5SUNkY1hHNG5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NISmxkazF2Y21WSmJtUmxiblJsWkNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb1kyOXVkR1Z1ZENBOVBUMGdKeWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUdWdGNIUjVJR3hwYm1WY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoelpYQWdQVDA5SUNkY1hHNG5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbElDczlJQ2RjWEc0bk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxjQ0E5SUNkY1hHNG5PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnNkV1VnS3owZ2MyVndJQ3NnWTI5dWRHVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxjQ0E5SUNjZ0p6dGNiaUFnSUNBZ0lDQWdJQ0FnSUhCeVpYWk5iM0psU1c1a1pXNTBaV1FnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnpkMmwwWTJnZ0tHaGxZV1JsY2k1amFHOXRjQ2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJQ2N0SnpwY2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjckp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQmphRzl0Y0ZOMFlYSjBPeUJwSUR3Z2JHbHVaWE11YkdWdVozUm9PeUFySzJrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnNkV1VnS3owZ0oxeGNiaWNnS3lCc2FXNWxjMXRwWFZzd1hTNXpiR2xqWlNoMGNtbHRTVzVrWlc1MEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDJZV3gxWlZ0MllXeDFaUzVzWlc1bmRHZ2dMU0F4WFNBaFBUMGdKMXhjYmljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnNkV1VnS3owZ0oxeGNiaWM3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbElDczlJQ2RjWEc0bk8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQmxibVFnUFNCemRHRnlkQ0FySUdobFlXUmxjaTVzWlc1bmRHZ2dLeUJ6WTJGc1lYSXVjMjkxY21ObExteGxibWQwYUR0Y2JpQWdJQ0J5WlhSMWNtNGdleUIyWVd4MVpTd2dkSGx3WlN3Z1kyOXRiV1Z1ZERvZ2FHVmhaR1Z5TG1OdmJXMWxiblFzSUhKaGJtZGxPaUJiYzNSaGNuUXNJR1Z1WkN3Z1pXNWtYU0I5TzF4dWZWeHVablZ1WTNScGIyNGdjR0Z5YzJWQ2JHOWphMU5qWVd4aGNraGxZV1JsY2loN0lHOW1abk5sZEN3Z2NISnZjSE1nZlN3Z2MzUnlhV04wTENCdmJrVnljbTl5S1NCN1hHNGdJQ0FnTHlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUdsbUlITm9iM1ZzWkNCdWIzUWdhR0Z3Y0dWdUlDb3ZYRzRnSUNBZ2FXWWdLSEJ5YjNCeld6QmRMblI1Y0dVZ0lUMDlJQ2RpYkc5amF5MXpZMkZzWVhJdGFHVmhaR1Z5SnlrZ2UxeHVJQ0FnSUNBZ0lDQnZia1Z5Y205eUtIQnliM0J6V3pCZExDQW5TVTFRVDFOVFNVSk1SU2NzSUNkQ2JHOWpheUJ6WTJGc1lYSWdhR1ZoWkdWeUlHNXZkQ0JtYjNWdVpDY3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdJQ0I5WEc0Z0lDQWdZMjl1YzNRZ2V5QnpiM1Z5WTJVZ2ZTQTlJSEJ5YjNCeld6QmRPMXh1SUNBZ0lHTnZibk4wSUcxdlpHVWdQU0J6YjNWeVkyVmJNRjA3WEc0Z0lDQWdiR1YwSUdsdVpHVnVkQ0E5SURBN1hHNGdJQ0FnYkdWMElHTm9iMjF3SUQwZ0p5YzdYRzRnSUNBZ2JHVjBJR1Z5Y205eUlEMGdMVEU3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURFN0lHa2dQQ0J6YjNWeVkyVXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJnZ1BTQnpiM1Z5WTJWYmFWMDdYRzRnSUNBZ0lDQWdJR2xtSUNnaFkyaHZiWEFnSmlZZ0tHTm9JRDA5UFNBbkxTY2dmSHdnWTJnZ1BUMDlJQ2NySnlrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYUc5dGNDQTlJR05vTzF4dUlDQWdJQ0FnSUNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUc0Z1BTQk9kVzFpWlhJb1kyZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0ZwYm1SbGJuUWdKaVlnYmlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJtUmxiblFnUFNCdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnBaaUFvWlhKeWIzSWdQVDA5SUMweEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnljbTl5SUQwZ2IyWm1jMlYwSUNzZ2FUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCcFppQW9aWEp5YjNJZ0lUMDlJQzB4S1Z4dUlDQWdJQ0FnSUNCdmJrVnljbTl5S0dWeWNtOXlMQ0FuVlU1RldGQkZRMVJGUkY5VVQwdEZUaWNzSUdCQ2JHOWpheUJ6WTJGc1lYSWdhR1ZoWkdWeUlHbHVZMngxWkdWeklHVjRkSEpoSUdOb1lYSmhZM1JsY25NNklDUjdjMjkxY21ObGZXQXBPMXh1SUNBZ0lHeGxkQ0JvWVhOVGNHRmpaU0E5SUdaaGJITmxPMXh1SUNBZ0lHeGxkQ0JqYjIxdFpXNTBJRDBnSnljN1hHNGdJQ0FnYkdWMElHeGxibWQwYUNBOUlITnZkWEpqWlM1c1pXNW5kR2c3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURFN0lHa2dQQ0J3Y205d2N5NXNaVzVuZEdnN0lDc3JhU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IwYjJ0bGJpQTlJSEJ5YjNCelcybGRPMXh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLSFJ2YTJWdUxuUjVjR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0ozTndZV05sSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCb1lYTlRjR0ZqWlNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJtWVd4c2RHaHliM1ZuYUZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbmJtVjNiR2x1WlNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVnVaM1JvSUNzOUlIUnZhMlZ1TG5OdmRYSmpaUzVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGpiMjF0Wlc1MEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYzNSeWFXTjBJQ1ltSUNGb1lYTlRjR0ZqWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnRaWE56WVdkbElEMGdKME52YlcxbGJuUnpJRzExYzNRZ1ltVWdjMlZ3WVhKaGRHVmtJR1p5YjIwZ2IzUm9aWElnZEc5clpXNXpJR0o1SUhkb2FYUmxJSE53WVdObElHTm9ZWEpoWTNSbGNuTW5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmJrVnljbTl5S0hSdmEyVnVMQ0FuVFVsVFUwbE9SMTlEU0VGU0p5d2diV1Z6YzJGblpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsYm1kMGFDQXJQU0IwYjJ0bGJpNXpiM1Z5WTJVdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJXMWxiblFnUFNCMGIydGxiaTV6YjNWeVkyVXVjM1ZpYzNSeWFXNW5LREVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWlhKeWIzSW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9kRzlyWlc0c0lDZFZUa1ZZVUVWRFZFVkVYMVJQUzBWT0p5d2dkRzlyWlc0dWJXVnpjMkZuWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVnVaM1JvSUNzOUlIUnZhMlZ1TG5OdmRYSmpaUzVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2S2lCcGMzUmhibUoxYkNCcFoyNXZjbVVnYm1WNGRDQnphRzkxYkdRZ2JtOTBJR2hoY0hCbGJpQXFMMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pHVm1ZWFZzZERvZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUcxbGMzTmhaMlVnUFNCZ1ZXNWxlSEJsWTNSbFpDQjBiMnRsYmlCcGJpQmliRzlqYXlCelkyRnNZWElnYUdWaFpHVnlPaUFrZTNSdmEyVnVMblI1Y0dWOVlEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtIUnZhMlZ1TENBblZVNUZXRkJGUTFSRlJGOVVUMHRGVGljc0lHMWxjM05oWjJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhSeklEMGdkRzlyWlc0dWMyOTFjbU5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBjeUFtSmlCMGVYQmxiMllnZEhNZ1BUMDlJQ2R6ZEhKcGJtY25LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pXNW5kR2dnS3owZ2RITXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjdJRzF2WkdVc0lHbHVaR1Z1ZEN3Z1kyaHZiWEFzSUdOdmJXMWxiblFzSUd4bGJtZDBhQ0I5TzF4dWZWeHVMeW9xSUVCeVpYUjFjbTV6SUVGeWNtRjVJRzltSUd4cGJtVnpJSE53YkdsMElIVndJR0Z6SUdCYmFXNWtaVzUwTENCamIyNTBaVzUwWFdBZ0tpOWNibVoxYm1OMGFXOXVJSE53YkdsMFRHbHVaWE1vYzI5MWNtTmxLU0I3WEc0Z0lDQWdZMjl1YzNRZ2MzQnNhWFFnUFNCemIzVnlZMlV1YzNCc2FYUW9MMXhjYmlnZ0tpa3ZLVHRjYmlBZ0lDQmpiMjV6ZENCbWFYSnpkQ0E5SUhOd2JHbDBXekJkTzF4dUlDQWdJR052Ym5OMElHMGdQU0JtYVhKemRDNXRZWFJqYUNndlhpZ2dLaWt2S1R0Y2JpQWdJQ0JqYjI1emRDQnNhVzVsTUNBOUlHMC9MbHN4WFZ4dUlDQWdJQ0FnSUNBL0lGdHRXekZkTENCbWFYSnpkQzV6YkdsalpTaHRXekZkTG14bGJtZDBhQ2xkWEc0Z0lDQWdJQ0FnSURvZ1d5Y25MQ0JtYVhKemRGMDdYRzRnSUNBZ1kyOXVjM1FnYkdsdVpYTWdQU0JiYkdsdVpUQmRPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F4T3lCcElEd2djM0JzYVhRdWJHVnVaM1JvT3lCcElDczlJRElwWEc0Z0lDQWdJQ0FnSUd4cGJtVnpMbkIxYzJnb1czTndiR2wwVzJsZExDQnpjR3hwZEZ0cElDc2dNVjFkS1R0Y2JpQWdJQ0J5WlhSMWNtNGdiR2x1WlhNN1hHNTlYRzVjYm1WNGNHOXlkQ0I3SUhKbGMyOXNkbVZDYkc5amExTmpZV3hoY2lCOU8xeHVJaXdnSW1sdGNHOXlkQ0I3SUZOallXeGhjaUI5SUdaeWIyMGdKeTR1TDI1dlpHVnpMMU5qWVd4aGNpNXFjeWM3WEc1cGJYQnZjblFnZXlCeVpYTnZiSFpsUlc1a0lIMGdabkp2YlNBbkxpOXlaWE52YkhabExXVnVaQzVxY3ljN1hHNWNibVoxYm1OMGFXOXVJSEpsYzI5c2RtVkdiRzkzVTJOaGJHRnlLSE5qWVd4aGNpd2djM1J5YVdOMExDQnZia1Z5Y205eUtTQjdYRzRnSUNBZ1kyOXVjM1FnZXlCdlptWnpaWFFzSUhSNWNHVXNJSE52ZFhKalpTd2daVzVrSUgwZ1BTQnpZMkZzWVhJN1hHNGdJQ0FnYkdWMElGOTBlWEJsTzF4dUlDQWdJR3hsZENCMllXeDFaVHRjYmlBZ0lDQmpiMjV6ZENCZmIyNUZjbkp2Y2lBOUlDaHlaV3dzSUdOdlpHVXNJRzF6WnlrZ1BUNGdiMjVGY25KdmNpaHZabVp6WlhRZ0t5QnlaV3dzSUdOdlpHVXNJRzF6WnlrN1hHNGdJQ0FnYzNkcGRHTm9JQ2gwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJR05oYzJVZ0ozTmpZV3hoY2ljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JmZEhsd1pTQTlJRk5qWVd4aGNpNVFURUZKVGp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbElEMGdjR3hoYVc1V1lXeDFaU2h6YjNWeVkyVXNJRjl2YmtWeWNtOXlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCallYTmxJQ2R6YVc1bmJHVXRjWFZ2ZEdWa0xYTmpZV3hoY2ljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JmZEhsd1pTQTlJRk5qWVd4aGNpNVJWVTlVUlY5VFNVNUhURVU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlNBOUlITnBibWRzWlZGMWIzUmxaRlpoYkhWbEtITnZkWEpqWlN3Z1gyOXVSWEp5YjNJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJR05oYzJVZ0oyUnZkV0pzWlMxeGRXOTBaV1F0YzJOaGJHRnlKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lGOTBlWEJsSUQwZ1UyTmhiR0Z5TGxGVlQxUkZYMFJQVlVKTVJUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGJIVmxJRDBnWkc5MVlteGxVWFZ2ZEdWa1ZtRnNkV1VvYzI5MWNtTmxMQ0JmYjI1RmNuSnZjaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHNWxlSFFnYzJodmRXeGtJRzV2ZENCb1lYQndaVzRnS2k5Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9jMk5oYkdGeUxDQW5WVTVGV0ZCRlExUkZSRjlVVDB0RlRpY3NJR0JGZUhCbFkzUmxaQ0JoSUdac2IzY2djMk5oYkdGeUlIWmhiSFZsTENCaWRYUWdabTkxYm1RNklDUjdkSGx3WlgxZ0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVTZJQ2NuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSNWNHVTZJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXRiV1Z1ZERvZ0p5Y3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbUZ1WjJVNklGdHZabVp6WlhRc0lHOW1abk5sZENBcklITnZkWEpqWlM1c1pXNW5kR2dzSUc5bVpuTmxkQ0FySUhOdmRYSmpaUzVzWlc1bmRHaGRYRzRnSUNBZ0lDQWdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQjJZV3gxWlVWdVpDQTlJRzltWm5ObGRDQXJJSE52ZFhKalpTNXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdjbVVnUFNCeVpYTnZiSFpsUlc1a0tHVnVaQ3dnZG1Gc2RXVkZibVFzSUhOMGNtbGpkQ3dnYjI1RmNuSnZjaWs3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDQWdkbUZzZFdVc1hHNGdJQ0FnSUNBZ0lIUjVjR1U2SUY5MGVYQmxMRnh1SUNBZ0lDQWdJQ0JqYjIxdFpXNTBPaUJ5WlM1amIyMXRaVzUwTEZ4dUlDQWdJQ0FnSUNCeVlXNW5aVG9nVzI5bVpuTmxkQ3dnZG1Gc2RXVkZibVFzSUhKbExtOW1abk5sZEYxY2JpQWdJQ0I5TzF4dWZWeHVablZ1WTNScGIyNGdjR3hoYVc1V1lXeDFaU2h6YjNWeVkyVXNJRzl1UlhKeWIzSXBJSHRjYmlBZ0lDQnNaWFFnWW1Ga1EyaGhjaUE5SUNjbk8xeHVJQ0FnSUhOM2FYUmphQ0FvYzI5MWNtTmxXekJkS1NCN1hHNGdJQ0FnSUNBZ0lDOHFJR2x6ZEdGdVluVnNJR2xuYm05eVpTQnVaWGgwSUhOb2IzVnNaQ0J1YjNRZ2FHRndjR1Z1SUNvdlhHNGdJQ0FnSUNBZ0lHTmhjMlVnSjF4Y2RDYzZYRzRnSUNBZ0lDQWdJQ0FnSUNCaVlXUkRhR0Z5SUQwZ0oyRWdkR0ZpSUdOb1lYSmhZM1JsY2ljN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbkxDYzZYRzRnSUNBZ0lDQWdJQ0FnSUNCaVlXUkRhR0Z5SUQwZ0oyWnNiM2NnYVc1a2FXTmhkRzl5SUdOb1lYSmhZM1JsY2lBc0p6dGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0JqWVhObElDY2xKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lHSmhaRU5vWVhJZ1BTQW5aR2x5WldOMGFYWmxJR2x1WkdsallYUnZjaUJqYUdGeVlXTjBaWElnSlNjN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbmZDYzZYRzRnSUNBZ0lDQWdJR05oYzJVZ0p6NG5PaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmlZV1JEYUdGeUlEMGdZR0pzYjJOcklITmpZV3hoY2lCcGJtUnBZMkYwYjNJZ0pIdHpiM1Z5WTJWYk1GMTlZRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTmhjMlVnSjBBbk9seHVJQ0FnSUNBZ0lDQmpZWE5sSUNkZ0p6b2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1ltRmtRMmhoY2lBOUlHQnlaWE5sY25abFpDQmphR0Z5WVdOMFpYSWdKSHR6YjNWeVkyVmJNRjE5WUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaGlZV1JEYUdGeUtWeHVJQ0FnSUNBZ0lDQnZia1Z5Y205eUtEQXNJQ2RDUVVSZlUwTkJURUZTWDFOVVFWSlVKeXdnWUZCc1lXbHVJSFpoYkhWbElHTmhibTV2ZENCemRHRnlkQ0IzYVhSb0lDUjdZbUZrUTJoaGNuMWdLVHRjYmlBZ0lDQnlaWFIxY200Z1ptOXNaRXhwYm1WektITnZkWEpqWlNrN1hHNTlYRzVtZFc1amRHbHZiaUJ6YVc1bmJHVlJkVzkwWldSV1lXeDFaU2h6YjNWeVkyVXNJRzl1UlhKeWIzSXBJSHRjYmlBZ0lDQnBaaUFvYzI5MWNtTmxXM052ZFhKalpTNXNaVzVuZEdnZ0xTQXhYU0FoUFQwZ1hDSW5YQ0lnZkh3Z2MyOTFjbU5sTG14bGJtZDBhQ0E5UFQwZ01TbGNiaUFnSUNBZ0lDQWdiMjVGY25KdmNpaHpiM1Z5WTJVdWJHVnVaM1JvTENBblRVbFRVMGxPUjE5RFNFRlNKeXdnWENKTmFYTnphVzVuSUdOc2IzTnBibWNnSjNGMWIzUmxYQ0lwTzF4dUlDQWdJSEpsZEhWeWJpQm1iMnhrVEdsdVpYTW9jMjkxY21ObExuTnNhV05sS0RFc0lDMHhLU2t1Y21Wd2JHRmpaU2d2Snljdlp5d2dYQ0luWENJcE8xeHVmVnh1Wm5WdVkzUnBiMjRnWm05c1pFeHBibVZ6S0hOdmRYSmpaU2tnZTF4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUZSb1pTQnVaV2RoZEdsMlpTQnNiMjlyWW1Wb2FXNWtJR2hsY21VZ1lXNWtJR2x1SUhSb1pTQmdjbVZnSUZKbFowVjRjQ0JwY3lCMGIxeHVJQ0FnSUNBcUlIQnlaWFpsYm5RZ1kyRjFjMmx1WnlCaElIQnZiSGx1YjIxcFlXd2djMlZoY21Ob0lIUnBiV1VnYVc0Z1kyVnlkR0ZwYmlCallYTmxjeTVjYmlBZ0lDQWdLbHh1SUNBZ0lDQXFJRlJvWlNCMGNua3RZMkYwWTJnZ2FYTWdabTl5SUZOaFptRnlhU3dnZDJocFkyZ2daRzlsYzI0bmRDQnpkWEJ3YjNKMElIUm9hWE1nZVdWME9seHVJQ0FnSUNBcUlHaDBkSEJ6T2k4dlkyRnVhWFZ6WlM1amIyMHZhbk10Y21WblpYaHdMV3h2YjJ0aVpXaHBibVJjYmlBZ0lDQWdLaTljYmlBZ0lDQnNaWFFnWm1seWMzUXNJR3hwYm1VN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdabWx5YzNRZ1BTQnVaWGNnVW1WblJYaHdLQ2NvTGlvL0tTZy9QQ0ZiSUZ4Y2RGMHBXeUJjWEhSZEtseGNjajljWEc0bkxDQW5jM2tuS1R0Y2JpQWdJQ0FnSUNBZ2JHbHVaU0E5SUc1bGR5QlNaV2RGZUhBb0oxc2dYRngwWFNvb0xpby9LU2cvT2lnL1BDRmJJRnhjZEYwcFd5QmNYSFJkS2lrL1hGeHlQMXhjYmljc0lDZHplU2NwTzF4dUlDQWdJSDFjYmlBZ0lDQmpZWFJqYUNCN1hHNGdJQ0FnSUNBZ0lHWnBjbk4wSUQwZ0x5Z3VLajhwV3lCY1hIUmRLbHhjY2o5Y1hHNHZjM2s3WEc0Z0lDQWdJQ0FnSUd4cGJtVWdQU0F2V3lCY1hIUmRLaWd1S2o4cFd5QmNYSFJkS2x4Y2NqOWNYRzR2YzNrN1hHNGdJQ0FnZlZ4dUlDQWdJR3hsZENCdFlYUmphQ0E5SUdacGNuTjBMbVY0WldNb2MyOTFjbU5sS1R0Y2JpQWdJQ0JwWmlBb0lXMWhkR05vS1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYzI5MWNtTmxPMXh1SUNBZ0lHeGxkQ0J5WlhNZ1BTQnRZWFJqYUZzeFhUdGNiaUFnSUNCc1pYUWdjMlZ3SUQwZ0p5QW5PMXh1SUNBZ0lHeGxkQ0J3YjNNZ1BTQm1hWEp6ZEM1c1lYTjBTVzVrWlhnN1hHNGdJQ0FnYkdsdVpTNXNZWE4wU1c1a1pYZ2dQU0J3YjNNN1hHNGdJQ0FnZDJocGJHVWdLQ2h0WVhSamFDQTlJR3hwYm1VdVpYaGxZeWh6YjNWeVkyVXBLU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9iV0YwWTJoYk1WMGdQVDA5SUNjbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jMlZ3SUQwOVBTQW5YRnh1SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYTWdLejBnYzJWd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxjQ0E5SUNkY1hHNG5PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVnpJQ3M5SUhObGNDQXJJRzFoZEdOb1d6RmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVndJRDBnSnlBbk8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEJ2Y3lBOUlHeHBibVV1YkdGemRFbHVaR1Y0TzF4dUlDQWdJSDFjYmlBZ0lDQmpiMjV6ZENCc1lYTjBJRDBnTDFzZ1hGeDBYU29vTGlvcEwzTjVPMXh1SUNBZ0lHeGhjM1F1YkdGemRFbHVaR1Y0SUQwZ2NHOXpPMXh1SUNBZ0lHMWhkR05vSUQwZ2JHRnpkQzVsZUdWaktITnZkWEpqWlNrN1hHNGdJQ0FnY21WMGRYSnVJSEpsY3lBcklITmxjQ0FySUNodFlYUmphRDh1V3pGZElEOC9JQ2NuS1R0Y2JuMWNibVoxYm1OMGFXOXVJR1J2ZFdKc1pWRjFiM1JsWkZaaGJIVmxLSE52ZFhKalpTd2diMjVGY25KdmNpa2dlMXh1SUNBZ0lHeGxkQ0J5WlhNZ1BTQW5KenRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTVRzZ2FTQThJSE52ZFhKalpTNXNaVzVuZEdnZ0xTQXhPeUFySzJrcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1kyZ2dQU0J6YjNWeVkyVmJhVjA3WEc0Z0lDQWdJQ0FnSUdsbUlDaGphQ0E5UFQwZ0oxeGNjaWNnSmlZZ2MyOTFjbU5sVzJrZ0t5QXhYU0E5UFQwZ0oxeGNiaWNwWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lDQWdhV1lnS0dOb0lEMDlQU0FuWEZ4dUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZXlCbWIyeGtMQ0J2Wm1aelpYUWdmU0E5SUdadmJHUk9aWGRzYVc1bEtITnZkWEpqWlN3Z2FTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYTWdLejBnWm05c1pEdGNiaUFnSUNBZ0lDQWdJQ0FnSUdrZ1BTQnZabVp6WlhRN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9ZMmdnUFQwOUlDZGNYRnhjSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHNWxlSFFnUFNCemIzVnlZMlZiS3l0cFhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR05qSUQwZ1pYTmpZWEJsUTI5a1pYTmJibVY0ZEYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kyTXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ6SUNzOUlHTmpPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2JtVjRkQ0E5UFQwZ0oxeGNiaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QnphMmx3SUdWelkyRndaV1FnYm1WM2JHbHVaWE1zSUdKMWRDQnpkR2xzYkNCMGNtbHRJSFJvWlNCbWIyeHNiM2RwYm1jZ2JHbHVaVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhRZ1BTQnpiM1Z5WTJWYmFTQXJJREZkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhkb2FXeGxJQ2h1WlhoMElEMDlQU0FuSUNjZ2ZId2dibVY0ZENBOVBUMGdKMXhjZENjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhRZ1BTQnpiM1Z5WTJWYkt5dHBJQ3NnTVYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaHVaWGgwSUQwOVBTQW5YRnh5SnlBbUppQnpiM1Z5WTJWYmFTQXJJREZkSUQwOVBTQW5YRnh1SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJSE5yYVhBZ1pYTmpZWEJsWkNCRFVreEdJRzVsZDJ4cGJtVnpMQ0JpZFhRZ2MzUnBiR3dnZEhKcGJTQjBhR1VnWm05c2JHOTNhVzVuSUd4cGJtVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwSUQwZ2MyOTFjbU5sV3lzcmFTQXJJREZkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhkb2FXeGxJQ2h1WlhoMElEMDlQU0FuSUNjZ2ZId2dibVY0ZENBOVBUMGdKMXhjZENjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhRZ1BTQnpiM1Z5WTJWYkt5dHBJQ3NnTVYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaHVaWGgwSUQwOVBTQW5lQ2NnZkh3Z2JtVjRkQ0E5UFQwZ0ozVW5JSHg4SUc1bGVIUWdQVDA5SUNkVkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHeGxibWQwYUNBOUlIc2dlRG9nTWl3Z2RUb2dOQ3dnVlRvZ09DQjlXMjVsZUhSZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjeUFyUFNCd1lYSnpaVU5vWVhKRGIyUmxLSE52ZFhKalpTd2dhU0FySURFc0lHeGxibWQwYUN3Z2IyNUZjbkp2Y2lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FTQXJQU0JzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCeVlYY2dQU0J6YjNWeVkyVXVjM1ZpYzNSeUtHa2dMU0F4TENBeUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZia1Z5Y205eUtHa2dMU0F4TENBblFrRkVYMFJSWDBWVFEwRlFSU2NzSUdCSmJuWmhiR2xrSUdWelkyRndaU0J6WlhGMVpXNWpaU0FrZTNKaGQzMWdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhNZ0t6MGdjbUYzTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdhV1lnS0dOb0lEMDlQU0FuSUNjZ2ZId2dZMmdnUFQwOUlDZGNYSFFuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCMGNtbHRJSFJ5WVdsc2FXNW5JSGRvYVhSbGMzQmhZMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhkelUzUmhjblFnUFNCcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHNWxlSFFnUFNCemIzVnlZMlZiYVNBcklERmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2QyaHBiR1VnS0c1bGVIUWdQVDA5SUNjZ0p5QjhmQ0J1WlhoMElEMDlQU0FuWEZ4MEp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwSUQwZ2MyOTFjbU5sV3lzcmFTQXJJREZkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c1bGVIUWdJVDA5SUNkY1hHNG5JQ1ltSUNFb2JtVjRkQ0E5UFQwZ0oxeGNjaWNnSmlZZ2MyOTFjbU5sVzJrZ0t5QXlYU0E5UFQwZ0oxeGNiaWNwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGN5QXJQU0JwSUQ0Z2QzTlRkR0Z5ZENBL0lITnZkWEpqWlM1emJHbGpaU2gzYzFOMFlYSjBMQ0JwSUNzZ01Ta2dPaUJqYUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsY3lBclBTQmphRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvYzI5MWNtTmxXM052ZFhKalpTNXNaVzVuZEdnZ0xTQXhYU0FoUFQwZ0oxd2lKeUI4ZkNCemIzVnlZMlV1YkdWdVozUm9JRDA5UFNBeEtWeHVJQ0FnSUNBZ0lDQnZia1Z5Y205eUtITnZkWEpqWlM1c1pXNW5kR2dzSUNkTlNWTlRTVTVIWDBOSVFWSW5MQ0FuVFdsemMybHVaeUJqYkc5emFXNW5JRndpY1hWdmRHVW5LVHRjYmlBZ0lDQnlaWFIxY200Z2NtVnpPMXh1ZlZ4dUx5b3FYRzRnS2lCR2IyeGtJR0VnYzJsdVoyeGxJRzVsZDJ4cGJtVWdhVzUwYnlCaElITndZV05sTENCdGRXeDBhWEJzWlNCdVpYZHNhVzVsY3lCMGJ5Qk9JQzBnTVNCdVpYZHNhVzVsY3k1Y2JpQXFJRkJ5WlhOMWJXVnpJR0J6YjNWeVkyVmJiMlptYzJWMFhTQTlQVDBnSjF4Y2JpZGdYRzRnS2k5Y2JtWjFibU4wYVc5dUlHWnZiR1JPWlhkc2FXNWxLSE52ZFhKalpTd2diMlptYzJWMEtTQjdYRzRnSUNBZ2JHVjBJR1p2YkdRZ1BTQW5KenRjYmlBZ0lDQnNaWFFnWTJnZ1BTQnpiM1Z5WTJWYmIyWm1jMlYwSUNzZ01WMDdYRzRnSUNBZ2QyaHBiR1VnS0dOb0lEMDlQU0FuSUNjZ2ZId2dZMmdnUFQwOUlDZGNYSFFuSUh4OElHTm9JRDA5UFNBblhGeHVKeUI4ZkNCamFDQTlQVDBnSjF4Y2NpY3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTm9JRDA5UFNBblhGeHlKeUFtSmlCemIzVnlZMlZiYjJabWMyVjBJQ3NnTWwwZ0lUMDlJQ2RjWEc0bktWeHVJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJR2xtSUNoamFDQTlQVDBnSjF4Y2JpY3BYRzRnSUNBZ0lDQWdJQ0FnSUNCbWIyeGtJQ3M5SUNkY1hHNG5PMXh1SUNBZ0lDQWdJQ0J2Wm1aelpYUWdLejBnTVR0Y2JpQWdJQ0FnSUNBZ1kyZ2dQU0J6YjNWeVkyVmJiMlptYzJWMElDc2dNVjA3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2doWm05c1pDbGNiaUFnSUNBZ0lDQWdabTlzWkNBOUlDY2dKenRjYmlBZ0lDQnlaWFIxY200Z2V5Qm1iMnhrTENCdlptWnpaWFFnZlR0Y2JuMWNibU52Ym5OMElHVnpZMkZ3WlVOdlpHVnpJRDBnZTF4dUlDQWdJQ2N3SnpvZ0oxeGNNQ2NzSUM4dklHNTFiR3dnWTJoaGNtRmpkR1Z5WEc0Z0lDQWdZVG9nSjF4Y2VEQTNKeXdnTHk4Z1ltVnNiQ0JqYUdGeVlXTjBaWEpjYmlBZ0lDQmlPaUFuWEZ4aUp5d2dMeThnWW1GamEzTndZV05sWEc0Z0lDQWdaVG9nSjF4Y2VERmlKeXdnTHk4Z1pYTmpZWEJsSUdOb1lYSmhZM1JsY2x4dUlDQWdJR1k2SUNkY1hHWW5MQ0F2THlCbWIzSnRJR1psWldSY2JpQWdJQ0J1T2lBblhGeHVKeXdnTHk4Z2JHbHVaU0JtWldWa1hHNGdJQ0FnY2pvZ0oxeGNjaWNzSUM4dklHTmhjbkpwWVdkbElISmxkSFZ5Ymx4dUlDQWdJSFE2SUNkY1hIUW5MQ0F2THlCb2IzSnBlbTl1ZEdGc0lIUmhZbHh1SUNBZ0lIWTZJQ2RjWEhZbkxDQXZMeUIyWlhKMGFXTmhiQ0IwWVdKY2JpQWdJQ0JPT2lBblhGeDFNREE0TlNjc0lDOHZJRlZ1YVdOdlpHVWdibVY0ZENCc2FXNWxYRzRnSUNBZ1h6b2dKMXhjZFRBd1lUQW5MQ0F2THlCVmJtbGpiMlJsSUc1dmJpMWljbVZoYTJsdVp5QnpjR0ZqWlZ4dUlDQWdJRXc2SUNkY1hIVXlNREk0Snl3Z0x5OGdWVzVwWTI5a1pTQnNhVzVsSUhObGNHRnlZWFJ2Y2x4dUlDQWdJRkE2SUNkY1hIVXlNREk1Snl3Z0x5OGdWVzVwWTI5a1pTQndZWEpoWjNKaGNHZ2djMlZ3WVhKaGRHOXlYRzRnSUNBZ0p5QW5PaUFuSUNjc1hHNGdJQ0FnSjF3aUp6b2dKMXdpSnl4Y2JpQWdJQ0FuTHljNklDY3ZKeXhjYmlBZ0lDQW5YRnhjWENjNklDZGNYRnhjSnl4Y2JpQWdJQ0FuWEZ4MEp6b2dKMXhjZENkY2JuMDdYRzVtZFc1amRHbHZiaUJ3WVhKelpVTm9ZWEpEYjJSbEtITnZkWEpqWlN3Z2IyWm1jMlYwTENCc1pXNW5kR2dzSUc5dVJYSnliM0lwSUh0Y2JpQWdJQ0JqYjI1emRDQmpZeUE5SUhOdmRYSmpaUzV6ZFdKemRISW9iMlptYzJWMExDQnNaVzVuZEdncE8xeHVJQ0FnSUdOdmJuTjBJRzlySUQwZ1kyTXViR1Z1WjNSb0lEMDlQU0JzWlc1bmRHZ2dKaVlnTDE1Yk1DMDVZUzFtUVMxR1hTc2tMeTUwWlhOMEtHTmpLVHRjYmlBZ0lDQmpiMjV6ZENCamIyUmxJRDBnYjJzZ1B5QndZWEp6WlVsdWRDaGpZeXdnTVRZcElEb2dUbUZPTzF4dUlDQWdJR2xtSUNocGMwNWhUaWhqYjJSbEtTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlZWGNnUFNCemIzVnlZMlV1YzNWaWMzUnlLRzltWm5ObGRDQXRJRElzSUd4bGJtZDBhQ0FySURJcE8xeHVJQ0FnSUNBZ0lDQnZia1Z5Y205eUtHOW1abk5sZENBdElESXNJQ2RDUVVSZlJGRmZSVk5EUVZCRkp5d2dZRWx1ZG1Gc2FXUWdaWE5qWVhCbElITmxjWFZsYm1ObElDUjdjbUYzZldBcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtRjNPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnVTNSeWFXNW5MbVp5YjIxRGIyUmxVRzlwYm5Rb1kyOWtaU2s3WEc1OVhHNWNibVY0Y0c5eWRDQjdJSEpsYzI5c2RtVkdiRzkzVTJOaGJHRnlJSDA3WEc0aUxDQWlhVzF3YjNKMElIc2dhWE5UWTJGc1lYSXNJRk5EUVV4QlVpQjlJR1p5YjIwZ0p5NHVMMjV2WkdWekwybGtaVzUwYVhSNUxtcHpKenRjYm1sdGNHOXlkQ0I3SUZOallXeGhjaUI5SUdaeWIyMGdKeTR1TDI1dlpHVnpMMU5qWVd4aGNpNXFjeWM3WEc1cGJYQnZjblFnZXlCeVpYTnZiSFpsUW14dlkydFRZMkZzWVhJZ2ZTQm1jbTl0SUNjdUwzSmxjMjlzZG1VdFlteHZZMnN0YzJOaGJHRnlMbXB6Snp0Y2JtbHRjRzl5ZENCN0lISmxjMjlzZG1WR2JHOTNVMk5oYkdGeUlIMGdabkp2YlNBbkxpOXlaWE52YkhabExXWnNiM2N0YzJOaGJHRnlMbXB6Snp0Y2JseHVablZ1WTNScGIyNGdZMjl0Y0c5elpWTmpZV3hoY2loamRIZ3NJSFJ2YTJWdUxDQjBZV2RVYjJ0bGJpd2diMjVGY25KdmNpa2dlMXh1SUNBZ0lHTnZibk4wSUhzZ2RtRnNkV1VzSUhSNWNHVXNJR052YlcxbGJuUXNJSEpoYm1kbElIMGdQU0IwYjJ0bGJpNTBlWEJsSUQwOVBTQW5ZbXh2WTJzdGMyTmhiR0Z5SjF4dUlDQWdJQ0FnSUNBL0lISmxjMjlzZG1WQ2JHOWphMU5qWVd4aGNpaGpkSGdzSUhSdmEyVnVMQ0J2YmtWeWNtOXlLVnh1SUNBZ0lDQWdJQ0E2SUhKbGMyOXNkbVZHYkc5M1UyTmhiR0Z5S0hSdmEyVnVMQ0JqZEhndWIzQjBhVzl1Y3k1emRISnBZM1FzSUc5dVJYSnliM0lwTzF4dUlDQWdJR052Ym5OMElIUmhaMDVoYldVZ1BTQjBZV2RVYjJ0bGJseHVJQ0FnSUNBZ0lDQS9JR04wZUM1a2FYSmxZM1JwZG1WekxuUmhaMDVoYldVb2RHRm5WRzlyWlc0dWMyOTFjbU5sTENCdGMyY2dQVDRnYjI1RmNuSnZjaWgwWVdkVWIydGxiaXdnSjFSQlIxOVNSVk5QVEZaRlgwWkJTVXhGUkNjc0lHMXpaeWtwWEc0Z0lDQWdJQ0FnSURvZ2JuVnNiRHRjYmlBZ0lDQnNaWFFnZEdGbk8xeHVJQ0FnSUdsbUlDaGpkSGd1YjNCMGFXOXVjeTV6ZEhKcGJtZExaWGx6SUNZbUlHTjBlQzVoZEV0bGVTa2dlMXh1SUNBZ0lDQWdJQ0IwWVdjZ1BTQmpkSGd1YzJOb1pXMWhXMU5EUVV4QlVsMDdYRzRnSUNBZ2ZWeHVJQ0FnSUdWc2MyVWdhV1lnS0hSaFowNWhiV1VwWEc0Z0lDQWdJQ0FnSUhSaFp5QTlJR1pwYm1SVFkyRnNZWEpVWVdkQ2VVNWhiV1VvWTNSNExuTmphR1Z0WVN3Z2RtRnNkV1VzSUhSaFowNWhiV1VzSUhSaFoxUnZhMlZ1TENCdmJrVnljbTl5S1R0Y2JpQWdJQ0JsYkhObElHbG1JQ2gwYjJ0bGJpNTBlWEJsSUQwOVBTQW5jMk5oYkdGeUp5bGNiaUFnSUNBZ0lDQWdkR0ZuSUQwZ1ptbHVaRk5qWVd4aGNsUmhaMEo1VkdWemRDaGpkSGdzSUhaaGJIVmxMQ0IwYjJ0bGJpd2diMjVGY25KdmNpazdYRzRnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0IwWVdjZ1BTQmpkSGd1YzJOb1pXMWhXMU5EUVV4QlVsMDdYRzRnSUNBZ2JHVjBJSE5qWVd4aGNqdGNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE1nUFNCMFlXY3VjbVZ6YjJ4MlpTaDJZV3gxWlN3Z2JYTm5JRDArSUc5dVJYSnliM0lvZEdGblZHOXJaVzRnUHo4Z2RHOXJaVzRzSUNkVVFVZGZVa1ZUVDB4V1JWOUdRVWxNUlVRbkxDQnRjMmNwTENCamRIZ3ViM0IwYVc5dWN5azdYRzRnSUNBZ0lDQWdJSE5qWVd4aGNpQTlJR2x6VTJOaGJHRnlLSEpsY3lrZ1B5QnlaWE1nT2lCdVpYY2dVMk5oYkdGeUtISmxjeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHTmhkR05vSUNobGNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J0YzJjZ1BTQmxjbkp2Y2lCcGJuTjBZVzVqWlc5bUlFVnljbTl5SUQ4Z1pYSnliM0l1YldWemMyRm5aU0E2SUZOMGNtbHVaeWhsY25KdmNpazdYRzRnSUNBZ0lDQWdJRzl1UlhKeWIzSW9kR0ZuVkc5clpXNGdQejhnZEc5clpXNHNJQ2RVUVVkZlVrVlRUMHhXUlY5R1FVbE1SVVFuTENCdGMyY3BPMXh1SUNBZ0lDQWdJQ0J6WTJGc1lYSWdQU0J1WlhjZ1UyTmhiR0Z5S0haaGJIVmxLVHRjYmlBZ0lDQjlYRzRnSUNBZ2MyTmhiR0Z5TG5KaGJtZGxJRDBnY21GdVoyVTdYRzRnSUNBZ2MyTmhiR0Z5TG5OdmRYSmpaU0E5SUhaaGJIVmxPMXh1SUNBZ0lHbG1JQ2gwZVhCbEtWeHVJQ0FnSUNBZ0lDQnpZMkZzWVhJdWRIbHdaU0E5SUhSNWNHVTdYRzRnSUNBZ2FXWWdLSFJoWjA1aGJXVXBYRzRnSUNBZ0lDQWdJSE5qWVd4aGNpNTBZV2NnUFNCMFlXZE9ZVzFsTzF4dUlDQWdJR2xtSUNoMFlXY3VabTl5YldGMEtWeHVJQ0FnSUNBZ0lDQnpZMkZzWVhJdVptOXliV0YwSUQwZ2RHRm5MbVp2Y20xaGREdGNiaUFnSUNCcFppQW9ZMjl0YldWdWRDbGNiaUFnSUNBZ0lDQWdjMk5oYkdGeUxtTnZiVzFsYm5RZ1BTQmpiMjF0Wlc1ME8xeHVJQ0FnSUhKbGRIVnliaUJ6WTJGc1lYSTdYRzU5WEc1bWRXNWpkR2x2YmlCbWFXNWtVMk5oYkdGeVZHRm5RbmxPWVcxbEtITmphR1Z0WVN3Z2RtRnNkV1VzSUhSaFowNWhiV1VzSUhSaFoxUnZhMlZ1TENCdmJrVnljbTl5S1NCN1hHNGdJQ0FnYVdZZ0tIUmhaMDVoYldVZ1BUMDlJQ2NoSnlsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhOamFHVnRZVnRUUTBGTVFWSmRPeUF2THlCdWIyNHRjM0JsWTJsbWFXTWdkR0ZuWEc0Z0lDQWdZMjl1YzNRZ2JXRjBZMmhYYVhSb1ZHVnpkQ0E5SUZ0ZE8xeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2RHRm5JRzltSUhOamFHVnRZUzUwWVdkektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaGRHRm5MbU52Ykd4bFkzUnBiMjRnSmlZZ2RHRm5MblJoWnlBOVBUMGdkR0ZuVG1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFJoWnk1a1pXWmhkV3gwSUNZbUlIUmhaeTUwWlhOMEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMWhkR05vVjJsMGFGUmxjM1F1Y0hWemFDaDBZV2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwWVdjN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnWm05eUlDaGpiMjV6ZENCMFlXY2diMllnYldGMFkyaFhhWFJvVkdWemRDbGNiaUFnSUNBZ0lDQWdhV1lnS0hSaFp5NTBaWE4wUHk1MFpYTjBLSFpoYkhWbEtTbGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwWVdjN1hHNGdJQ0FnWTI5dWMzUWdhM1FnUFNCelkyaGxiV0V1YTI1dmQyNVVZV2R6VzNSaFowNWhiV1ZkTzF4dUlDQWdJR2xtSUNocmRDQW1KaUFoYTNRdVkyOXNiR1ZqZEdsdmJpa2dlMXh1SUNBZ0lDQWdJQ0F2THlCRmJuTjFjbVVnZEdoaGRDQjBhR1VnYTI1dmQyNGdkR0ZuSUdseklHRjJZV2xzWVdKc1pTQm1iM0lnYzNSeWFXNW5hV1o1YVc1bkxGeHVJQ0FnSUNBZ0lDQXZMeUJpZFhRZ1pHOWxjeUJ1YjNRZ1oyVjBJSFZ6WldRZ1lua2daR1ZtWVhWc2RDNWNiaUFnSUNBZ0lDQWdjMk5vWlcxaExuUmhaM011Y0hWemFDaFBZbXBsWTNRdVlYTnphV2R1S0h0OUxDQnJkQ3dnZXlCa1pXWmhkV3gwT2lCbVlXeHpaU3dnZEdWemREb2dkVzVrWldacGJtVmtJSDBwS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUd0ME8xeHVJQ0FnSUgxY2JpQWdJQ0J2YmtWeWNtOXlLSFJoWjFSdmEyVnVMQ0FuVkVGSFgxSkZVMDlNVmtWZlJrRkpURVZFSnl3Z1lGVnVjbVZ6YjJ4MlpXUWdkR0ZuT2lBa2UzUmhaMDVoYldWOVlDd2dkR0ZuVG1GdFpTQWhQVDBnSjNSaFp6cDVZVzFzTG05eVp5d3lNREF5T25OMGNpY3BPMXh1SUNBZ0lISmxkSFZ5YmlCelkyaGxiV0ZiVTBOQlRFRlNYVHRjYm4xY2JtWjFibU4wYVc5dUlHWnBibVJUWTJGc1lYSlVZV2RDZVZSbGMzUW9leUJoZEV0bGVTd2daR2x5WldOMGFYWmxjeXdnYzJOb1pXMWhJSDBzSUhaaGJIVmxMQ0IwYjJ0bGJpd2diMjVGY25KdmNpa2dlMXh1SUNBZ0lHTnZibk4wSUhSaFp5QTlJSE5qYUdWdFlTNTBZV2R6TG1acGJtUW9kR0ZuSUQwK0lDaDBZV2N1WkdWbVlYVnNkQ0E5UFQwZ2RISjFaU0I4ZkNBb1lYUkxaWGtnSmlZZ2RHRm5MbVJsWm1GMWJIUWdQVDA5SUNkclpYa25LU2tnSmlaY2JpQWdJQ0FnSUNBZ2RHRm5MblJsYzNRL0xuUmxjM1FvZG1Gc2RXVXBLU0I4ZkNCelkyaGxiV0ZiVTBOQlRFRlNYVHRjYmlBZ0lDQnBaaUFvYzJOb1pXMWhMbU52YlhCaGRDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmpiMjF3WVhRZ1BTQnpZMmhsYldFdVkyOXRjR0YwTG1acGJtUW9kR0ZuSUQwK0lIUmhaeTVrWldaaGRXeDBJQ1ltSUhSaFp5NTBaWE4wUHk1MFpYTjBLSFpoYkhWbEtTa2dQejljYmlBZ0lDQWdJQ0FnSUNBZ0lITmphR1Z0WVZ0VFEwRk1RVkpkTzF4dUlDQWdJQ0FnSUNCcFppQW9kR0ZuTG5SaFp5QWhQVDBnWTI5dGNHRjBMblJoWnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkSE1nUFNCa2FYSmxZM1JwZG1WekxuUmhaMU4wY21sdVp5aDBZV2N1ZEdGbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR056SUQwZ1pHbHlaV04wYVhabGN5NTBZV2RUZEhKcGJtY29ZMjl0Y0dGMExuUmhaeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdGMyY2dQU0JnVm1Gc2RXVWdiV0Y1SUdKbElIQmhjbk5sWkNCaGN5QmxhWFJvWlhJZ0pIdDBjMzBnYjNJZ0pIdGpjMzFnTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiMjVGY25KdmNpaDBiMnRsYml3Z0oxUkJSMTlTUlZOUFRGWkZYMFpCU1V4RlJDY3NJRzF6Wnl3Z2RISjFaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUmhaenRjYm4xY2JseHVaWGh3YjNKMElIc2dZMjl0Y0c5elpWTmpZV3hoY2lCOU8xeHVJaXdnSW1aMWJtTjBhVzl1SUdWdGNIUjVVMk5oYkdGeVVHOXphWFJwYjI0b2IyWm1jMlYwTENCaVpXWnZjbVVzSUhCdmN5a2dlMXh1SUNBZ0lHbG1JQ2hpWldadmNtVXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIQnZjeUE5UFQwZ2JuVnNiQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIQnZjeUE5SUdKbFptOXlaUzVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCd2IzTWdMU0F4T3lCcElENDlJREE3SUMwdGFTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSE4wSUQwZ1ltVm1iM0psVzJsZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNkcGRHTm9JQ2h6ZEM1MGVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5jM0JoWTJVbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJOdmJXMWxiblFuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMjVsZDJ4cGJtVW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlptWnpaWFFnTFQwZ2MzUXVjMjkxY21ObExteGxibWQwYUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCVVpXTm9ibWxqWVd4c2VTd2dZVzRnWlcxd2RIa2djMk5oYkdGeUlHbHpJR2x0YldWa2FXRjBaV3g1SUdGbWRHVnlJSFJvWlNCc1lYTjBJRzV2YmkxbGJYQjBlVnh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdibTlrWlN3Z1luVjBJR2wwSjNNZ2JXOXlaU0IxYzJWbWRXd2dkRzhnY0d4aFkyVWdhWFFnWVdaMFpYSWdZVzU1SUhkb2FYUmxjM0JoWTJVdVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZENBOUlHSmxabTl5WlZzcksybGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2QyaHBiR1VnS0hOMFB5NTBlWEJsSUQwOVBTQW5jM0JoWTJVbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMlptYzJWMElDczlJSE4wTG5OdmRYSmpaUzVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1FnUFNCaVpXWnZjbVZiS3l0cFhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ2Wm1aelpYUTdYRzU5WEc1Y2JtVjRjRzl5ZENCN0lHVnRjSFI1VTJOaGJHRnlVRzl6YVhScGIyNGdmVHRjYmlJc0lDSnBiWEJ2Y25RZ2V5QkJiR2xoY3lCOUlHWnliMjBnSnk0dUwyNXZaR1Z6TDBGc2FXRnpMbXB6Snp0Y2JtbHRjRzl5ZENCN0lHbHpVMk5oYkdGeUlIMGdabkp2YlNBbkxpNHZibTlrWlhNdmFXUmxiblJwZEhrdWFuTW5PMXh1YVcxd2IzSjBJSHNnWTI5dGNHOXpaVU52Ykd4bFkzUnBiMjRnZlNCbWNtOXRJQ2N1TDJOdmJYQnZjMlV0WTI5c2JHVmpkR2x2Ymk1cWN5YzdYRzVwYlhCdmNuUWdleUJqYjIxd2IzTmxVMk5oYkdGeUlIMGdabkp2YlNBbkxpOWpiMjF3YjNObExYTmpZV3hoY2k1cWN5YzdYRzVwYlhCdmNuUWdleUJ5WlhOdmJIWmxSVzVrSUgwZ1puSnZiU0FuTGk5eVpYTnZiSFpsTFdWdVpDNXFjeWM3WEc1cGJYQnZjblFnZXlCbGJYQjBlVk5qWVd4aGNsQnZjMmwwYVc5dUlIMGdabkp2YlNBbkxpOTFkR2xzTFdWdGNIUjVMWE5qWVd4aGNpMXdiM05wZEdsdmJpNXFjeWM3WEc1Y2JtTnZibk4wSUVOT0lEMGdleUJqYjIxd2IzTmxUbTlrWlN3Z1kyOXRjRzl6WlVWdGNIUjVUbTlrWlNCOU8xeHVablZ1WTNScGIyNGdZMjl0Y0c5elpVNXZaR1VvWTNSNExDQjBiMnRsYml3Z2NISnZjSE1zSUc5dVJYSnliM0lwSUh0Y2JpQWdJQ0JqYjI1emRDQmhkRXRsZVNBOUlHTjBlQzVoZEV0bGVUdGNiaUFnSUNCamIyNXpkQ0I3SUhOd1lXTmxRbVZtYjNKbExDQmpiMjF0Wlc1MExDQmhibU5vYjNJc0lIUmhaeUI5SUQwZ2NISnZjSE03WEc0Z0lDQWdiR1YwSUc1dlpHVTdYRzRnSUNBZ2JHVjBJR2x6VTNKalZHOXJaVzRnUFNCMGNuVmxPMXh1SUNBZ0lITjNhWFJqYUNBb2RHOXJaVzR1ZEhsd1pTa2dlMXh1SUNBZ0lDQWdJQ0JqWVhObElDZGhiR2xoY3ljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J1YjJSbElEMGdZMjl0Y0c5elpVRnNhV0Z6S0dOMGVDd2dkRzlyWlc0c0lHOXVSWEp5YjNJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHRnVZMmh2Y2lCOGZDQjBZV2NwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjI1RmNuSnZjaWgwYjJ0bGJpd2dKMEZNU1VGVFgxQlNUMUJUSnl3Z0owRnVJR0ZzYVdGeklHNXZaR1VnYlhWemRDQnViM1FnYzNCbFkybG1lU0JoYm5rZ2NISnZjR1Z5ZEdsbGN5Y3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKM05qWVd4aGNpYzZYRzRnSUNBZ0lDQWdJR05oYzJVZ0ozTnBibWRzWlMxeGRXOTBaV1F0YzJOaGJHRnlKenBjYmlBZ0lDQWdJQ0FnWTJGelpTQW5aRzkxWW14bExYRjFiM1JsWkMxelkyRnNZWEluT2x4dUlDQWdJQ0FnSUNCallYTmxJQ2RpYkc5amF5MXpZMkZzWVhJbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnYm05a1pTQTlJR052YlhCdmMyVlRZMkZzWVhJb1kzUjRMQ0IwYjJ0bGJpd2dkR0ZuTENCdmJrVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoaGJtTm9iM0lwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm05a1pTNWhibU5vYjNJZ1BTQmhibU5vYjNJdWMyOTFjbU5sTG5OMVluTjBjbWx1WnlneEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0JqWVhObElDZGliRzlqYXkxdFlYQW5PbHh1SUNBZ0lDQWdJQ0JqWVhObElDZGliRzlqYXkxelpYRW5PbHh1SUNBZ0lDQWdJQ0JqWVhObElDZG1iRzkzTFdOdmJHeGxZM1JwYjI0bk9seHVJQ0FnSUNBZ0lDQWdJQ0FnYm05a1pTQTlJR052YlhCdmMyVkRiMnhzWldOMGFXOXVLRU5PTENCamRIZ3NJSFJ2YTJWdUxDQndjbTl3Y3l3Z2IyNUZjbkp2Y2lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1lXNWphRzl5S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc1dlpHVXVZVzVqYUc5eUlEMGdZVzVqYUc5eUxuTnZkWEpqWlM1emRXSnpkSEpwYm1jb01TazdYRzRnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnWkdWbVlYVnNkRG9nZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JXVnpjMkZuWlNBOUlIUnZhMlZ1TG5SNWNHVWdQVDA5SUNkbGNuSnZjaWRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0EvSUhSdmEyVnVMbTFsYzNOaFoyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQTZJR0JWYm5OMWNIQnZjblJsWkNCMGIydGxiaUFvZEhsd1pUb2dKSHQwYjJ0bGJpNTBlWEJsZlNsZ08xeHVJQ0FnSUNBZ0lDQWdJQ0FnYjI1RmNuSnZjaWgwYjJ0bGJpd2dKMVZPUlZoUVJVTlVSVVJmVkU5TFJVNG5MQ0J0WlhOellXZGxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHNXZaR1VnUFNCamIyMXdiM05sUlcxd2RIbE9iMlJsS0dOMGVDd2dkRzlyWlc0dWIyWm1jMlYwTENCMWJtUmxabWx1WldRc0lHNTFiR3dzSUhCeWIzQnpMQ0J2YmtWeWNtOXlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbHpVM0pqVkc5clpXNGdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZVzVqYUc5eUlDWW1JRzV2WkdVdVlXNWphRzl5SUQwOVBTQW5KeWxjYmlBZ0lDQWdJQ0FnYjI1RmNuSnZjaWhoYm1Ob2IzSXNJQ2RDUVVSZlFVeEpRVk1uTENBblFXNWphRzl5SUdOaGJtNXZkQ0JpWlNCaGJpQmxiWEIwZVNCemRISnBibWNuS1R0Y2JpQWdJQ0JwWmlBb1lYUkxaWGtnSmlaY2JpQWdJQ0FnSUNBZ1kzUjRMbTl3ZEdsdmJuTXVjM1J5YVc1blMyVjVjeUFtSmx4dUlDQWdJQ0FnSUNBb0lXbHpVMk5oYkdGeUtHNXZaR1VwSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdibTlrWlM1MllXeDFaU0FoUFQwZ0ozTjBjbWx1WnljZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUNodWIyUmxMblJoWnlBbUppQnViMlJsTG5SaFp5QWhQVDBnSjNSaFp6cDVZVzFzTG05eVp5d3lNREF5T25OMGNpY3BLU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J0YzJjZ1BTQW5WMmwwYUNCemRISnBibWRMWlhsekxDQmhiR3dnYTJWNWN5QnRkWE4wSUdKbElITjBjbWx1WjNNbk8xeHVJQ0FnSUNBZ0lDQnZia1Z5Y205eUtIUmhaeUEvUHlCMGIydGxiaXdnSjA1UFRsOVRWRkpKVGtkZlMwVlpKeXdnYlhObktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tITndZV05sUW1WbWIzSmxLVnh1SUNBZ0lDQWdJQ0J1YjJSbExuTndZV05sUW1WbWIzSmxJRDBnZEhKMVpUdGNiaUFnSUNCcFppQW9ZMjl0YldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHOXJaVzR1ZEhsd1pTQTlQVDBnSjNOallXeGhjaWNnSmlZZ2RHOXJaVzR1YzI5MWNtTmxJRDA5UFNBbkp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUc1dlpHVXVZMjl0YldWdWRDQTlJR052YlcxbGJuUTdYRzRnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJRzV2WkdVdVkyOXRiV1Z1ZEVKbFptOXlaU0E5SUdOdmJXMWxiblE3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJRUIwY3kxbGVIQmxZM1F0WlhKeWIzSWdWSGx3WlNCamFHVmphMmx1WnlCdGFYTnpaWE1nYldWaGJtbHVaeUJ2WmlCcGMxTnlZMVJ2YTJWdVhHNGdJQ0FnYVdZZ0tHTjBlQzV2Y0hScGIyNXpMbXRsWlhCVGIzVnlZMlZVYjJ0bGJuTWdKaVlnYVhOVGNtTlViMnRsYmlsY2JpQWdJQ0FnSUNBZ2JtOWtaUzV6Y21OVWIydGxiaUE5SUhSdmEyVnVPMXh1SUNBZ0lISmxkSFZ5YmlCdWIyUmxPMXh1ZlZ4dVpuVnVZM1JwYjI0Z1kyOXRjRzl6WlVWdGNIUjVUbTlrWlNoamRIZ3NJRzltWm5ObGRDd2dZbVZtYjNKbExDQndiM01zSUhzZ2MzQmhZMlZDWldadmNtVXNJR052YlcxbGJuUXNJR0Z1WTJodmNpd2dkR0ZuTENCbGJtUWdmU3dnYjI1RmNuSnZjaWtnZTF4dUlDQWdJR052Ym5OMElIUnZhMlZ1SUQwZ2UxeHVJQ0FnSUNBZ0lDQjBlWEJsT2lBbmMyTmhiR0Z5Snl4Y2JpQWdJQ0FnSUNBZ2IyWm1jMlYwT2lCbGJYQjBlVk5qWVd4aGNsQnZjMmwwYVc5dUtHOW1abk5sZEN3Z1ltVm1iM0psTENCd2IzTXBMRnh1SUNBZ0lDQWdJQ0JwYm1SbGJuUTZJQzB4TEZ4dUlDQWdJQ0FnSUNCemIzVnlZMlU2SUNjblhHNGdJQ0FnZlR0Y2JpQWdJQ0JqYjI1emRDQnViMlJsSUQwZ1kyOXRjRzl6WlZOallXeGhjaWhqZEhnc0lIUnZhMlZ1TENCMFlXY3NJRzl1UlhKeWIzSXBPMXh1SUNBZ0lHbG1JQ2hoYm1Ob2IzSXBJSHRjYmlBZ0lDQWdJQ0FnYm05a1pTNWhibU5vYjNJZ1BTQmhibU5vYjNJdWMyOTFjbU5sTG5OMVluTjBjbWx1WnlneEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0c1dlpHVXVZVzVqYUc5eUlEMDlQU0FuSnlsY2JpQWdJQ0FnSUNBZ0lDQWdJRzl1UlhKeWIzSW9ZVzVqYUc5eUxDQW5Ra0ZFWDBGTVNVRlRKeXdnSjBGdVkyaHZjaUJqWVc1dWIzUWdZbVVnWVc0Z1pXMXdkSGtnYzNSeWFXNW5KeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h6Y0dGalpVSmxabTl5WlNsY2JpQWdJQ0FnSUNBZ2JtOWtaUzV6Y0dGalpVSmxabTl5WlNBOUlIUnlkV1U3WEc0Z0lDQWdhV1lnS0dOdmJXMWxiblFwSUh0Y2JpQWdJQ0FnSUNBZ2JtOWtaUzVqYjIxdFpXNTBJRDBnWTI5dGJXVnVkRHRjYmlBZ0lDQWdJQ0FnYm05a1pTNXlZVzVuWlZzeVhTQTlJR1Z1WkR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHNXZaR1U3WEc1OVhHNW1kVzVqZEdsdmJpQmpiMjF3YjNObFFXeHBZWE1vZXlCdmNIUnBiMjV6SUgwc0lIc2diMlptYzJWMExDQnpiM1Z5WTJVc0lHVnVaQ0I5TENCdmJrVnljbTl5S1NCN1hHNGdJQ0FnWTI5dWMzUWdZV3hwWVhNZ1BTQnVaWGNnUVd4cFlYTW9jMjkxY21ObExuTjFZbk4wY21sdVp5Z3hLU2s3WEc0Z0lDQWdhV1lnS0dGc2FXRnpMbk52ZFhKalpTQTlQVDBnSnljcFhHNGdJQ0FnSUNBZ0lHOXVSWEp5YjNJb2IyWm1jMlYwTENBblFrRkVYMEZNU1VGVEp5d2dKMEZzYVdGeklHTmhibTV2ZENCaVpTQmhiaUJsYlhCMGVTQnpkSEpwYm1jbktUdGNiaUFnSUNCcFppQW9ZV3hwWVhNdWMyOTFjbU5sTG1WdVpITlhhWFJvS0NjNkp5a3BYRzRnSUNBZ0lDQWdJRzl1UlhKeWIzSW9iMlptYzJWMElDc2djMjkxY21ObExteGxibWQwYUNBdElERXNJQ2RDUVVSZlFVeEpRVk1uTENBblFXeHBZWE1nWlc1a2FXNW5JR2x1SURvZ2FYTWdZVzFpYVdkMWIzVnpKeXdnZEhKMVpTazdYRzRnSUNBZ1kyOXVjM1FnZG1Gc2RXVkZibVFnUFNCdlptWnpaWFFnS3lCemIzVnlZMlV1YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhKbElEMGdjbVZ6YjJ4MlpVVnVaQ2hsYm1Rc0lIWmhiSFZsUlc1a0xDQnZjSFJwYjI1ekxuTjBjbWxqZEN3Z2IyNUZjbkp2Y2lrN1hHNGdJQ0FnWVd4cFlYTXVjbUZ1WjJVZ1BTQmJiMlptYzJWMExDQjJZV3gxWlVWdVpDd2djbVV1YjJabWMyVjBYVHRjYmlBZ0lDQnBaaUFvY21VdVkyOXRiV1Z1ZENsY2JpQWdJQ0FnSUNBZ1lXeHBZWE11WTI5dGJXVnVkQ0E5SUhKbExtTnZiVzFsYm5RN1hHNGdJQ0FnY21WMGRYSnVJR0ZzYVdGek8xeHVmVnh1WEc1bGVIQnZjblFnZXlCamIyMXdiM05sUlcxd2RIbE9iMlJsTENCamIyMXdiM05sVG05a1pTQjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lFUnZZM1Z0Wlc1MElIMGdabkp2YlNBbkxpNHZaRzlqTDBSdlkzVnRaVzUwTG1wekp6dGNibWx0Y0c5eWRDQjdJR052YlhCdmMyVk9iMlJsTENCamIyMXdiM05sUlcxd2RIbE9iMlJsSUgwZ1puSnZiU0FuTGk5amIyMXdiM05sTFc1dlpHVXVhbk1uTzF4dWFXMXdiM0owSUhzZ2NtVnpiMngyWlVWdVpDQjlJR1p5YjIwZ0p5NHZjbVZ6YjJ4MlpTMWxibVF1YW5Nbk8xeHVhVzF3YjNKMElIc2djbVZ6YjJ4MlpWQnliM0J6SUgwZ1puSnZiU0FuTGk5eVpYTnZiSFpsTFhCeWIzQnpMbXB6Snp0Y2JseHVablZ1WTNScGIyNGdZMjl0Y0c5elpVUnZZeWh2Y0hScGIyNXpMQ0JrYVhKbFkzUnBkbVZ6TENCN0lHOW1abk5sZEN3Z2MzUmhjblFzSUhaaGJIVmxMQ0JsYm1RZ2ZTd2diMjVGY25KdmNpa2dlMXh1SUNBZ0lHTnZibk4wSUc5d2RITWdQU0JQWW1wbFkzUXVZWE56YVdkdUtIc2dYMlJwY21WamRHbDJaWE02SUdScGNtVmpkR2wyWlhNZ2ZTd2diM0IwYVc5dWN5azdYRzRnSUNBZ1kyOXVjM1FnWkc5aklEMGdibVYzSUVSdlkzVnRaVzUwS0hWdVpHVm1hVzVsWkN3Z2IzQjBjeWs3WEc0Z0lDQWdZMjl1YzNRZ1kzUjRJRDBnZTF4dUlDQWdJQ0FnSUNCaGRFdGxlVG9nWm1Gc2MyVXNYRzRnSUNBZ0lDQWdJR0YwVW05dmREb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pHbHlaV04wYVhabGN6b2daRzlqTG1ScGNtVmpkR2wyWlhNc1hHNGdJQ0FnSUNBZ0lHOXdkR2x2Ym5NNklHUnZZeTV2Y0hScGIyNXpMRnh1SUNBZ0lDQWdJQ0J6WTJobGJXRTZJR1J2WXk1elkyaGxiV0ZjYmlBZ0lDQjlPMXh1SUNBZ0lHTnZibk4wSUhCeWIzQnpJRDBnY21WemIyeDJaVkJ5YjNCektITjBZWEowTENCN1hHNGdJQ0FnSUNBZ0lHbHVaR2xqWVhSdmNqb2dKMlJ2WXkxemRHRnlkQ2NzWEc0Z0lDQWdJQ0FnSUc1bGVIUTZJSFpoYkhWbElEOC9JR1Z1WkQ4dVd6QmRMRnh1SUNBZ0lDQWdJQ0J2Wm1aelpYUXNYRzRnSUNBZ0lDQWdJRzl1UlhKeWIzSXNYRzRnSUNBZ0lDQWdJSEJoY21WdWRFbHVaR1Z1ZERvZ01DeGNiaUFnSUNBZ0lDQWdjM1JoY25SUGJrNWxkMnhwYm1VNklIUnlkV1ZjYmlBZ0lDQjlLVHRjYmlBZ0lDQnBaaUFvY0hKdmNITXVabTkxYm1RcElIdGNiaUFnSUNBZ0lDQWdaRzlqTG1ScGNtVmpkR2wyWlhNdVpHOWpVM1JoY25RZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNCcFppQW9kbUZzZFdVZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNoMllXeDFaUzUwZVhCbElEMDlQU0FuWW14dlkyc3RiV0Z3SnlCOGZDQjJZV3gxWlM1MGVYQmxJRDA5UFNBbllteHZZMnN0YzJWeEp5a2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDRndjbTl3Y3k1b1lYTk9aWGRzYVc1bEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnYjI1RmNuSnZjaWh3Y205d2N5NWxibVFzSUNkTlNWTlRTVTVIWDBOSVFWSW5MQ0FuUW14dlkyc2dZMjlzYkdWamRHbHZiaUJqWVc1dWIzUWdjM1JoY25RZ2IyNGdjMkZ0WlNCc2FXNWxJSGRwZEdnZ1pHbHlaV04wYVhabGN5MWxibVFnYldGeWEyVnlKeWs3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJRUIwY3kxbGVIQmxZM1F0WlhKeWIzSWdTV1lnUTI5dWRHVnVkSE1nYVhNZ2MyVjBMQ0JzWlhRbmN5QjBjblZ6ZENCMGFHVWdkWE5sY2x4dUlDQWdJR1J2WXk1amIyNTBaVzUwY3lBOUlIWmhiSFZsWEc0Z0lDQWdJQ0FnSUQ4Z1kyOXRjRzl6WlU1dlpHVW9ZM1I0TENCMllXeDFaU3dnY0hKdmNITXNJRzl1UlhKeWIzSXBYRzRnSUNBZ0lDQWdJRG9nWTI5dGNHOXpaVVZ0Y0hSNVRtOWtaU2hqZEhnc0lIQnliM0J6TG1WdVpDd2djM1JoY25Rc0lHNTFiR3dzSUhCeWIzQnpMQ0J2YmtWeWNtOXlLVHRjYmlBZ0lDQmpiMjV6ZENCamIyNTBaVzUwUlc1a0lEMGdaRzlqTG1OdmJuUmxiblJ6TG5KaGJtZGxXekpkTzF4dUlDQWdJR052Ym5OMElISmxJRDBnY21WemIyeDJaVVZ1WkNobGJtUXNJR052Ym5SbGJuUkZibVFzSUdaaGJITmxMQ0J2YmtWeWNtOXlLVHRjYmlBZ0lDQnBaaUFvY21VdVkyOXRiV1Z1ZENsY2JpQWdJQ0FnSUNBZ1pHOWpMbU52YlcxbGJuUWdQU0J5WlM1amIyMXRaVzUwTzF4dUlDQWdJR1J2WXk1eVlXNW5aU0E5SUZ0dlptWnpaWFFzSUdOdmJuUmxiblJGYm1Rc0lISmxMbTltWm5ObGRGMDdYRzRnSUNBZ2NtVjBkWEp1SUdSdll6dGNibjFjYmx4dVpYaHdiM0owSUhzZ1kyOXRjRzl6WlVSdll5QjlPMXh1SWl3Z0ltbHRjRzl5ZENCN0lFUnBjbVZqZEdsMlpYTWdmU0JtY205dElDY3VMaTlrYjJNdlpHbHlaV04wYVhabGN5NXFjeWM3WEc1cGJYQnZjblFnZXlCRWIyTjFiV1Z1ZENCOUlHWnliMjBnSnk0dUwyUnZZeTlFYjJOMWJXVnVkQzVxY3ljN1hHNXBiWEJ2Y25RZ2V5QlpRVTFNVjJGeWJtbHVaeXdnV1VGTlRGQmhjbk5sUlhKeWIzSWdmU0JtY205dElDY3VMaTlsY25KdmNuTXVhbk1uTzF4dWFXMXdiM0owSUhzZ2FYTkRiMnhzWldOMGFXOXVMQ0JwYzFCaGFYSWdmU0JtY205dElDY3VMaTl1YjJSbGN5OXBaR1Z1ZEdsMGVTNXFjeWM3WEc1cGJYQnZjblFnZXlCamIyMXdiM05sUkc5aklIMGdabkp2YlNBbkxpOWpiMjF3YjNObExXUnZZeTVxY3ljN1hHNXBiWEJ2Y25RZ2V5QnlaWE52YkhabFJXNWtJSDBnWm5KdmJTQW5MaTl5WlhOdmJIWmxMV1Z1WkM1cWN5YzdYRzVjYm1aMWJtTjBhVzl1SUdkbGRFVnljbTl5VUc5ektITnlZeWtnZTF4dUlDQWdJR2xtSUNoMGVYQmxiMllnYzNKaklEMDlQU0FuYm5WdFltVnlKeWxjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRnR6Y21Nc0lITnlZeUFySURGZE8xeHVJQ0FnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0hOeVl5a3BYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnpjbU11YkdWdVozUm9JRDA5UFNBeUlEOGdjM0pqSURvZ1czTnlZMXN3WFN3Z2MzSmpXekZkWFR0Y2JpQWdJQ0JqYjI1emRDQjdJRzltWm5ObGRDd2djMjkxY21ObElIMGdQU0J6Y21NN1hHNGdJQ0FnY21WMGRYSnVJRnR2Wm1aelpYUXNJRzltWm5ObGRDQXJJQ2gwZVhCbGIyWWdjMjkxY21ObElEMDlQU0FuYzNSeWFXNW5KeUEvSUhOdmRYSmpaUzVzWlc1bmRHZ2dPaUF4S1YwN1hHNTlYRzVtZFc1amRHbHZiaUJ3WVhKelpWQnlaV3gxWkdVb2NISmxiSFZrWlNrZ2UxeHVJQ0FnSUd4bGRDQmpiMjF0Wlc1MElEMGdKeWM3WEc0Z0lDQWdiR1YwSUdGMFEyOXRiV1Z1ZENBOUlHWmhiSE5sTzF4dUlDQWdJR3hsZENCaFpuUmxja1Z0Y0hSNVRHbHVaU0E5SUdaaGJITmxPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djSEpsYkhWa1pTNXNaVzVuZEdnN0lDc3JhU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J6YjNWeVkyVWdQU0J3Y21Wc2RXUmxXMmxkTzF4dUlDQWdJQ0FnSUNCemQybDBZMmdnS0hOdmRYSmpaVnN3WFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5JeWM2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGJXVnVkQ0FyUFZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW9ZMjl0YldWdWRDQTlQVDBnSnljZ1B5QW5KeUE2SUdGbWRHVnlSVzF3ZEhsTWFXNWxJRDhnSjF4Y2JseGNiaWNnT2lBblhGeHVKeWtnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS0hOdmRYSmpaUzV6ZFdKemRISnBibWNvTVNrZ2ZId2dKeUFuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGRFTnZiVzFsYm5RZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdGbWRHVnlSVzF3ZEhsTWFXNWxJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDY2xKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NISmxiSFZrWlZ0cElDc2dNVjAvTGxzd1hTQWhQVDBnSnlNbktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwSUNzOUlERTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZWFJEYjIxdFpXNTBJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUZSb2FYTWdiV0Y1SUdKbElIZHliMjVuSUdGbWRHVnlJR1J2WXkxbGJtUXNJR0oxZENCcGJpQjBhR0YwSUdOaGMyVWdhWFFnWkc5bGMyNG5kQ0J0WVhSMFpYSmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdGMFEyOXRiV1Z1ZENsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZV1owWlhKRmJYQjBlVXhwYm1VZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdGMFEyOXRiV1Z1ZENBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjdJR052YlcxbGJuUXNJR0ZtZEdWeVJXMXdkSGxNYVc1bElIMDdYRzU5WEc0dktpcGNiaUFxSUVOdmJYQnZjMlVnWVNCemRISmxZVzBnYjJZZ1ExTlVJRzV2WkdWeklHbHVkRzhnWVNCemRISmxZVzBnYjJZZ1dVRk5UQ0JFYjJOMWJXVnVkSE11WEc0Z0tseHVJQ29nWUdCZ2RITmNiaUFxSUdsdGNHOXlkQ0I3SUVOdmJYQnZjMlZ5TENCUVlYSnpaWElnZlNCbWNtOXRJQ2Q1WVcxc0oxeHVJQ3BjYmlBcUlHTnZibk4wSUhOeVl6b2djM1J5YVc1bklEMGdMaTR1WEc0Z0tpQmpiMjV6ZENCMGIydGxibk1nUFNCdVpYY2dVR0Z5YzJWeUtDa3VjR0Z5YzJVb2MzSmpLVnh1SUNvZ1kyOXVjM1FnWkc5amN5QTlJRzVsZHlCRGIyMXdiM05sY2lncExtTnZiWEJ2YzJVb2RHOXJaVzV6S1Z4dUlDb2dZR0JnWEc0Z0tpOWNibU5zWVhOeklFTnZiWEJ2YzJWeUlIdGNiaUFnSUNCamIyNXpkSEoxWTNSdmNpaHZjSFJwYjI1eklEMGdlMzBwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVrYjJNZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbUYwUkdseVpXTjBhWFpsY3lBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ5Wld4MVpHVWdQU0JiWFR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVsY25KdmNuTWdQU0JiWFR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUzWVhKdWFXNW5jeUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG05dVJYSnliM0lnUFNBb2MyOTFjbU5sTENCamIyUmxMQ0J0WlhOellXZGxMQ0IzWVhKdWFXNW5LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQndiM01nUFNCblpYUkZjbkp2Y2xCdmN5aHpiM1Z5WTJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIZGhjbTVwYm1jcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTUzWVhKdWFXNW5jeTV3ZFhOb0tHNWxkeUJaUVUxTVYyRnlibWx1Wnlod2IzTXNJR052WkdVc0lHMWxjM05oWjJVcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1WeWNtOXljeTV3ZFhOb0tHNWxkeUJaUVUxTVVHRnljMlZGY25KdmNpaHdiM01zSUdOdlpHVXNJRzFsYzNOaFoyVXBLVHRjYmlBZ0lDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElFQjBlWEJsYzJOeWFYQjBMV1Z6YkdsdWRDOXdjbVZtWlhJdGJuVnNiR2x6YUMxamIyRnNaWE5qYVc1blhHNGdJQ0FnSUNBZ0lIUm9hWE11WkdseVpXTjBhWFpsY3lBOUlHNWxkeUJFYVhKbFkzUnBkbVZ6S0hzZ2RtVnljMmx2YmpvZ2IzQjBhVzl1Y3k1MlpYSnphVzl1SUh4OElDY3hMakluSUgwcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG05d2RHbHZibk1nUFNCdmNIUnBiMjV6TzF4dUlDQWdJSDFjYmlBZ0lDQmtaV052Y21GMFpTaGtiMk1zSUdGbWRHVnlSRzlqS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhzZ1kyOXRiV1Z1ZEN3Z1lXWjBaWEpGYlhCMGVVeHBibVVnZlNBOUlIQmhjbk5sVUhKbGJIVmtaU2gwYUdsekxuQnlaV3gxWkdVcE8xeHVJQ0FnSUNBZ0lDQXZMMk52Ym5OdmJHVXViRzluS0hzZ1pHTTZJR1J2WXk1amIyMXRaVzUwTENCd2NtVnNkV1JsTENCamIyMXRaVzUwSUgwcFhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjIxdFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCa1l5QTlJR1J2WXk1amIyNTBaVzUwY3p0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoaFpuUmxja1J2WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUnZZeTVqYjIxdFpXNTBJRDBnWkc5akxtTnZiVzFsYm5RZ1B5QmdKSHRrYjJNdVkyOXRiV1Z1ZEgxY1hHNGtlMk52YlcxbGJuUjlZQ0E2SUdOdmJXMWxiblE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtSUNoaFpuUmxja1Z0Y0hSNVRHbHVaU0I4ZkNCa2IyTXVaR2x5WldOMGFYWmxjeTVrYjJOVGRHRnlkQ0I4ZkNBaFpHTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrYjJNdVkyOXRiV1Z1ZEVKbFptOXlaU0E5SUdOdmJXMWxiblE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtSUNocGMwTnZiR3hsWTNScGIyNG9aR01wSUNZbUlDRmtZeTVtYkc5M0lDWW1JR1JqTG1sMFpXMXpMbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdhWFFnUFNCa1l5NXBkR1Z0YzFzd1hUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVhOUVlXbHlLR2wwS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhWFFnUFNCcGRDNXJaWGs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdZMklnUFNCcGRDNWpiMjF0Wlc1MFFtVm1iM0psTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsMExtTnZiVzFsYm5SQ1pXWnZjbVVnUFNCallpQS9JR0FrZTJOdmJXMWxiblI5WEZ4dUpIdGpZbjFnSURvZ1kyOXRiV1Z1ZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR05pSUQwZ1pHTXVZMjl0YldWdWRFSmxabTl5WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1l5NWpiMjF0Wlc1MFFtVm1iM0psSUQwZ1kySWdQeUJnSkh0amIyMXRaVzUwZlZ4Y2JpUjdZMko5WUNBNklHTnZiVzFsYm5RN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLR0ZtZEdWeVJHOWpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWNIVnphQzVoY0hCc2VTaGtiMk11WlhKeWIzSnpMQ0IwYUdsekxtVnljbTl5Y3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JCY25KaGVTNXdjbTkwYjNSNWNHVXVjSFZ6YUM1aGNIQnNlU2hrYjJNdWQyRnlibWx1WjNNc0lIUm9hWE11ZDJGeWJtbHVaM01wTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdaRzlqTG1WeWNtOXljeUE5SUhSb2FYTXVaWEp5YjNKek8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWkc5akxuZGhjbTVwYm1keklEMGdkR2hwY3k1M1lYSnVhVzVuY3p0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CeVpXeDFaR1VnUFNCYlhUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bGNuSnZjbk1nUFNCYlhUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1M1lYSnVhVzVuY3lBOUlGdGRPMXh1SUNBZ0lIMWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkRkWEp5Wlc1MElITjBjbVZoYlNCemRHRjBkWE1nYVc1bWIzSnRZWFJwYjI0dVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCTmIzTjBiSGtnZFhObFpuVnNJR0YwSUhSb1pTQmxibVFnYjJZZ2FXNXdkWFFnWm05eUlHRnVJR1Z0Y0hSNUlITjBjbVZoYlM1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0J6ZEhKbFlXMUpibVp2S0NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGJXVnVkRG9nY0dGeWMyVlFjbVZzZFdSbEtIUm9hWE11Y0hKbGJIVmtaU2t1WTI5dGJXVnVkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHUnBjbVZqZEdsMlpYTTZJSFJvYVhNdVpHbHlaV04wYVhabGN5eGNiaUFnSUNBZ0lDQWdJQ0FnSUdWeWNtOXljem9nZEdocGN5NWxjbkp2Y25Nc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IzWVhKdWFXNW5jem9nZEdocGN5NTNZWEp1YVc1bmMxeHVJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lIMWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkRiMjF3YjNObElIUnZhMlZ1Y3lCcGJuUnZJR1J2WTNWdFpXNTBjeTVjYmlBZ0lDQWdLbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQm1iM0pqWlVSdll5QXRJRWxtSUhSb1pTQnpkSEpsWVcwZ1kyOXVkR0ZwYm5NZ2JtOGdaRzlqZFcxbGJuUXNJSE4wYVd4c0lHVnRhWFFnWVNCbWFXNWhiQ0JrYjJOMWJXVnVkQ0JwYm1Oc2RXUnBibWNnWVc1NUlHTnZiVzFsYm5SeklHRnVaQ0JrYVhKbFkzUnBkbVZ6SUhSb1lYUWdkMjkxYkdRZ1ltVWdZWEJ3YkdsbFpDQjBieUJoSUhOMVluTmxjWFZsYm5RZ1pHOWpkVzFsYm5RdVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUdWdVpFOW1abk5sZENBdElGTm9iM1ZzWkNCaVpTQnpaWFFnYVdZZ1lHWnZjbU5sUkc5allDQnBjeUJoYkhOdklITmxkQ3dnZEc4Z2MyVjBJSFJvWlNCa2IyTjFiV1Z1ZENCeVlXNW5aU0JsYm1RZ1lXNWtJSFJ2SUdsdVpHbGpZWFJsSUdWeWNtOXljeUJqYjNKeVpXTjBiSGt1WEc0Z0lDQWdJQ292WEc0Z0lDQWdLbU52YlhCdmMyVW9kRzlyWlc1ekxDQm1iM0pqWlVSdll5QTlJR1poYkhObExDQmxibVJQWm1aelpYUWdQU0F0TVNrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJSFJ2YTJWdUlHOW1JSFJ2YTJWdWN5bGNiaUFnSUNBZ0lDQWdJQ0FnSUhscFpXeGtLaUIwYUdsekxtNWxlSFFvZEc5clpXNHBPMXh1SUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1bGJtUW9abTl5WTJWRWIyTXNJR1Z1WkU5bVpuTmxkQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lDOHFLaUJCWkhaaGJtTmxJSFJvWlNCamIyMXdiM05sY2lCaWVTQnZibVVnUTFOVUlIUnZhMlZ1TGlBcUwxeHVJQ0FnSUNwdVpYaDBLSFJ2YTJWdUtTQjdYRzRnSUNBZ0lDQWdJSE4zYVhSamFDQW9kRzlyWlc0dWRIbHdaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpHbHlaV04wYVhabEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1ScGNtVmpkR2wyWlhNdVlXUmtLSFJ2YTJWdUxuTnZkWEpqWlN3Z0tHOW1abk5sZEN3Z2JXVnpjMkZuWlN3Z2QyRnlibWx1WnlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3YjNNZ1BTQm5aWFJGY25KdmNsQnZjeWgwYjJ0bGJpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCdmMxc3dYU0FyUFNCdlptWnpaWFE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YjI1RmNuSnZjaWh3YjNNc0lDZENRVVJmUkVsU1JVTlVTVlpGSnl3Z2JXVnpjMkZuWlN3Z2QyRnlibWx1WnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1d2NtVnNkV1JsTG5CMWMyZ29kRzlyWlc0dWMyOTFjbU5sS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUYwUkdseVpXTjBhWFpsY3lBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RrYjJOMWJXVnVkQ2M2SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JrYjJNZ1BTQmpiMjF3YjNObFJHOWpLSFJvYVhNdWIzQjBhVzl1Y3l3Z2RHaHBjeTVrYVhKbFkzUnBkbVZ6TENCMGIydGxiaXdnZEdocGN5NXZia1Z5Y205eUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NWhkRVJwY21WamRHbDJaWE1nSmlZZ0lXUnZZeTVrYVhKbFkzUnBkbVZ6TG1SdlkxTjBZWEowS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG05dVJYSnliM0lvZEc5clpXNHNJQ2ROU1ZOVFNVNUhYME5JUVZJbkxDQW5UV2x6YzJsdVp5QmthWEpsWTNScGRtVnpMV1Z1WkM5a2IyTXRjM1JoY25RZ2FXNWthV05oZEc5eUlHeHBibVVuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbVJsWTI5eVlYUmxLR1J2WXl3Z1ptRnNjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1Sdll5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUWdkR2hwY3k1a2IyTTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1a2IyTWdQU0JrYjJNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVoZEVScGNtVmpkR2wyWlhNZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMko1ZEdVdGIzSmtaWEl0YldGeWF5YzZYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2R6Y0dGalpTYzZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGpiMjF0Wlc1MEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMjVsZDJ4cGJtVW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxiSFZrWlM1d2RYTm9LSFJ2YTJWdUxuTnZkWEpqWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkbGNuSnZjaWM2SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J0YzJjZ1BTQjBiMnRsYmk1emIzVnlZMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1B5QmdKSHQwYjJ0bGJpNXRaWE56WVdkbGZUb2dKSHRLVTA5T0xuTjBjbWx1WjJsbWVTaDBiMnRsYmk1emIzVnlZMlVwZldCY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdPaUIwYjJ0bGJpNXRaWE56WVdkbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdWeWNtOXlJRDBnYm1WM0lGbEJUVXhRWVhKelpVVnljbTl5S0dkbGRFVnljbTl5VUc5ektIUnZhMlZ1S1N3Z0oxVk9SVmhRUlVOVVJVUmZWRTlMUlU0bkxDQnRjMmNwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1GMFJHbHlaV04wYVhabGN5QjhmQ0FoZEdocGN5NWtiMk1wWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WlhKeWIzSnpMbkIxYzJnb1pYSnliM0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWtiMk11WlhKeWIzSnpMbkIxYzJnb1pYSnliM0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5aRzlqTFdWdVpDYzZJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lYUm9hWE11Wkc5aktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzF6WnlBOUlDZFZibVY0Y0dWamRHVmtJR1J2WXkxbGJtUWdkMmwwYUc5MWRDQndjbVZqWldScGJtY2daRzlqZFcxbGJuUW5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbVZ5Y205eWN5NXdkWE5vS0c1bGR5QlpRVTFNVUdGeWMyVkZjbkp2Y2loblpYUkZjbkp2Y2xCdmN5aDBiMnRsYmlrc0lDZFZUa1ZZVUVWRFZFVkVYMVJQUzBWT0p5d2diWE5uS1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1Sdll5NWthWEpsWTNScGRtVnpMbVJ2WTBWdVpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWlc1a0lEMGdjbVZ6YjJ4MlpVVnVaQ2gwYjJ0bGJpNWxibVFzSUhSdmEyVnVMbTltWm5ObGRDQXJJSFJ2YTJWdUxuTnZkWEpqWlM1c1pXNW5kR2dzSUhSb2FYTXVaRzlqTG05d2RHbHZibk11YzNSeWFXTjBMQ0IwYUdsekxtOXVSWEp5YjNJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WkdWamIzSmhkR1VvZEdocGN5NWtiMk1zSUhSeWRXVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNobGJtUXVZMjl0YldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JrWXlBOUlIUm9hWE11Wkc5akxtTnZiVzFsYm5RN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpHOWpMbU52YlcxbGJuUWdQU0JrWXlBL0lHQWtlMlJqZlZ4Y2JpUjdaVzVrTG1OdmJXMWxiblI5WUNBNklHVnVaQzVqYjIxdFpXNTBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtUnZZeTV5WVc1blpWc3lYU0E5SUdWdVpDNXZabVp6WlhRN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVaWEp5YjNKekxuQjFjMmdvYm1WM0lGbEJUVXhRWVhKelpVVnljbTl5S0dkbGRFVnljbTl5VUc5ektIUnZhMlZ1S1N3Z0oxVk9SVmhRUlVOVVJVUmZWRTlMUlU0bkxDQmdWVzV6ZFhCd2IzSjBaV1FnZEc5clpXNGdKSHQwYjJ0bGJpNTBlWEJsZldBcEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkRZV3hzSUdGMElHVnVaQ0J2WmlCcGJuQjFkQ0IwYnlCNWFXVnNaQ0JoYm5rZ2NtVnRZV2x1YVc1bklHUnZZM1Z0Wlc1MExseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUdadmNtTmxSRzlqSUMwZ1NXWWdkR2hsSUhOMGNtVmhiU0JqYjI1MFlXbHVjeUJ1YnlCa2IyTjFiV1Z1ZEN3Z2MzUnBiR3dnWlcxcGRDQmhJR1pwYm1Gc0lHUnZZM1Z0Wlc1MElHbHVZMngxWkdsdVp5QmhibmtnWTI5dGJXVnVkSE1nWVc1a0lHUnBjbVZqZEdsMlpYTWdkR2hoZENCM2IzVnNaQ0JpWlNCaGNIQnNhV1ZrSUhSdklHRWdjM1ZpYzJWeGRXVnVkQ0JrYjJOMWJXVnVkQzVjYmlBZ0lDQWdLaUJBY0dGeVlXMGdaVzVrVDJabWMyVjBJQzBnVTJodmRXeGtJR0psSUhObGRDQnBaaUJnWm05eVkyVkViMk5nSUdseklHRnNjMjhnYzJWMExDQjBieUJ6WlhRZ2RHaGxJR1J2WTNWdFpXNTBJSEpoYm1kbElHVnVaQ0JoYm1RZ2RHOGdhVzVrYVdOaGRHVWdaWEp5YjNKeklHTnZjbkpsWTNSc2VTNWNiaUFnSUNBZ0tpOWNiaUFnSUNBcVpXNWtLR1p2Y21ObFJHOWpJRDBnWm1Gc2MyVXNJR1Z1WkU5bVpuTmxkQ0E5SUMweEtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbVJ2WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWtaV052Y21GMFpTaDBhR2x6TG1Sdll5d2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDQjBhR2x6TG1Sdll6dGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVaRzlqSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNobWIzSmpaVVJ2WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiM0IwY3lBOUlFOWlhbVZqZEM1aGMzTnBaMjRvZXlCZlpHbHlaV04wYVhabGN6b2dkR2hwY3k1a2FYSmxZM1JwZG1WeklIMHNJSFJvYVhNdWIzQjBhVzl1Y3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmtiMk1nUFNCdVpYY2dSRzlqZFcxbGJuUW9kVzVrWldacGJtVmtMQ0J2Y0hSektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1GMFJHbHlaV04wYVhabGN5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG05dVJYSnliM0lvWlc1a1QyWm1jMlYwTENBblRVbFRVMGxPUjE5RFNFRlNKeXdnSjAxcGMzTnBibWNnWkdseVpXTjBhWFpsY3kxbGJtUWdhVzVrYVdOaGRHOXlJR3hwYm1VbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdSdll5NXlZVzVuWlNBOUlGc3dMQ0JsYm1SUFptWnpaWFFzSUdWdVpFOW1abk5sZEYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtUmxZMjl5WVhSbEtHUnZZeXdnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2VXbGxiR1FnWkc5ak8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnZXlCRGIyMXdiM05sY2lCOU8xeHVJaXdnSW1OdmJuTjBJRUpTUlVGTElEMGdVM2x0WW05c0tDZGljbVZoYXlCMmFYTnBkQ2NwTzF4dVkyOXVjM1FnVTB0SlVDQTlJRk41YldKdmJDZ25jMnRwY0NCamFHbHNaSEpsYmljcE8xeHVZMjl1YzNRZ1VrVk5UMVpGSUQwZ1UzbHRZbTlzS0NkeVpXMXZkbVVnYVhSbGJTY3BPMXh1THlvcVhHNGdLaUJCY0hCc2VTQmhJSFpwYzJsMGIzSWdkRzhnWVNCRFUxUWdaRzlqZFcxbGJuUWdiM0lnYVhSbGJTNWNiaUFxWEc0Z0tpQlhZV3hyY3lCMGFISnZkV2RvSUhSb1pTQjBjbVZsSUNoa1pYQjBhQzFtYVhKemRDa2djM1JoY25ScGJtY2dabkp2YlNCMGFHVWdjbTl2ZEN3Z1kyRnNiR2x1WnlCaFhHNGdLaUJnZG1semFYUnZjbUFnWm5WdVkzUnBiMjRnZDJsMGFDQjBkMjhnWVhKbmRXMWxiblJ6SUhkb1pXNGdaVzUwWlhKcGJtY2daV0ZqYUNCcGRHVnRPbHh1SUNvZ0lDQXRJR0JwZEdWdFlEb2dWR2hsSUdOMWNuSmxiblFnYVhSbGJTd2dkMmhwWTJnZ2FXNWpiSFZrWldRZ2RHaGxJR1p2Ykd4dmQybHVaeUJ0WlcxaVpYSnpPbHh1SUNvZ0lDQWdJQzBnWUhOMFlYSjBPaUJUYjNWeVkyVlViMnRsYmx0ZFlDQmNkVEl3TVRNZ1UyOTFjbU5sSUhSdmEyVnVjeUJpWldadmNtVWdkR2hsSUd0bGVTQnZjaUIyWVd4MVpTeGNiaUFxSUNBZ0lDQWdJSEJ2YzNOcFlteDVJR2x1WTJ4MVpHbHVaeUJwZEhNZ1lXNWphRzl5SUc5eUlIUmhaeTVjYmlBcUlDQWdJQ0F0SUdCclpYay9PaUJVYjJ0bGJpQjhJRzUxYkd4Z0lGeDFNakF4TXlCVFpYUWdabTl5SUhCaGFYSWdkbUZzZFdWekxpQk5ZWGtnZEdobGJpQmlaU0JnYm5Wc2JHQXNJR2xtWEc0Z0tpQWdJQ0FnSUNCMGFHVWdhMlY1SUdKbFptOXlaU0IwYUdVZ1lEcGdJSE5sY0dGeVlYUnZjaUJwY3lCbGJYQjBlUzVjYmlBcUlDQWdJQ0F0SUdCelpYQS9PaUJUYjNWeVkyVlViMnRsYmx0ZFlDQmNkVEl3TVRNZ1UyOTFjbU5sSUhSdmEyVnVjeUJpWlhSM1pXVnVJSFJvWlNCclpYa2dZVzVrSUhSb1pTQjJZV3gxWlN4Y2JpQXFJQ0FnSUNBZ0lIZG9hV05vSUhOb2IzVnNaQ0JwYm1Oc2RXUmxJSFJvWlNCZ09tQWdiV0Z3SUhaaGJIVmxJR2x1WkdsallYUnZjaUJwWmlCZ2RtRnNkV1ZnSUdseklITmxkQzVjYmlBcUlDQWdJQ0F0SUdCMllXeDFaVDg2SUZSdmEyVnVZQ0JjZFRJd01UTWdWR2hsSUhaaGJIVmxJRzltSUdFZ2MyVnhkV1Z1WTJVZ2FYUmxiU3dnYjNJZ2IyWWdZU0J0WVhBZ2NHRnBjaTVjYmlBcUlDQWdMU0JnY0dGMGFHQTZJRlJvWlNCemRHVndjeUJtY205dElIUm9aU0J5YjI5MElIUnZJSFJvWlNCamRYSnlaVzUwSUc1dlpHVXNJR0Z6SUdGdUlHRnljbUY1SUc5bVhHNGdLaUFnSUNBZ1lGc25hMlY1SnlCOElDZDJZV3gxWlNjc0lHNTFiV0psY2wxZ0lIUjFjR3hsY3k1Y2JpQXFYRzRnS2lCVWFHVWdjbVYwZFhKdUlIWmhiSFZsSUc5bUlIUm9aU0IyYVhOcGRHOXlJRzFoZVNCaVpTQjFjMlZrSUhSdklHTnZiblJ5YjJ3Z2RHaGxJSFJ5WVhabGNuTmhiRHBjYmlBcUlDQWdMU0JnZFc1a1pXWnBibVZrWUNBb1pHVm1ZWFZzZENrNklFUnZJRzV2ZEdocGJtY2dZVzVrSUdOdmJuUnBiblZsWEc0Z0tpQWdJQzBnWUhacGMybDBMbE5MU1ZCZ09pQkVieUJ1YjNRZ2RtbHphWFFnZEdobElHTm9hV3hrY21WdUlHOW1JSFJvYVhNZ2RHOXJaVzRzSUdOdmJuUnBiblZsSUhkcGRHaGNiaUFxSUNBZ0lDQWdibVY0ZENCemFXSnNhVzVuWEc0Z0tpQWdJQzBnWUhacGMybDBMa0pTUlVGTFlEb2dWR1Z5YldsdVlYUmxJSFJ5WVhabGNuTmhiQ0JqYjIxd2JHVjBaV3g1WEc0Z0tpQWdJQzBnWUhacGMybDBMbEpGVFU5V1JXQTZJRkpsYlc5MlpTQjBhR1VnWTNWeWNtVnVkQ0JwZEdWdExDQjBhR1Z1SUdOdmJuUnBiblZsSUhkcGRHZ2dkR2hsSUc1bGVIUWdiMjVsWEc0Z0tpQWdJQzBnWUc1MWJXSmxjbUE2SUZObGRDQjBhR1VnYVc1a1pYZ2diMllnZEdobElHNWxlSFFnYzNSbGNDNGdWR2hwY3lCcGN5QjFjMlZtZFd3Z1pYTndaV05wWVd4c2VTQnBabHh1SUNvZ0lDQWdJSFJvWlNCcGJtUmxlQ0J2WmlCMGFHVWdZM1Z5Y21WdWRDQjBiMnRsYmlCb1lYTWdZMmhoYm1kbFpDNWNiaUFxSUNBZ0xTQmdablZ1WTNScGIyNWdPaUJFWldacGJtVWdkR2hsSUc1bGVIUWdkbWx6YVhSdmNpQm1iM0lnZEdocGN5QnBkR1Z0TGlCQlpuUmxjaUIwYUdVZ2IzSnBaMmx1WVd4Y2JpQXFJQ0FnSUNCMmFYTnBkRzl5SUdseklHTmhiR3hsWkNCdmJpQnBkR1Z0SUdWdWRISjVMQ0J1WlhoMElIWnBjMmwwYjNKeklHRnlaU0JqWVd4c1pXUWdZV1owWlhJZ2FHRnVaR3hwYm1kY2JpQXFJQ0FnSUNCaElHNXZiaTFsYlhCMGVTQmdhMlY1WUNCaGJtUWdkMmhsYmlCbGVHbDBhVzVuSUhSb1pTQnBkR1Z0TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUIyYVhOcGRDaGpjM1FzSUhacGMybDBiM0lwSUh0Y2JpQWdJQ0JwWmlBb0ozUjVjR1VuSUdsdUlHTnpkQ0FtSmlCamMzUXVkSGx3WlNBOVBUMGdKMlJ2WTNWdFpXNTBKeWxjYmlBZ0lDQWdJQ0FnWTNOMElEMGdleUJ6ZEdGeWREb2dZM04wTG5OMFlYSjBMQ0IyWVd4MVpUb2dZM04wTG5aaGJIVmxJSDA3WEc0Z0lDQWdYM1pwYzJsMEtFOWlhbVZqZEM1bWNtVmxlbVVvVzEwcExDQmpjM1FzSUhacGMybDBiM0lwTzF4dWZWeHVMeThnVjJsMGFHOTFkQ0IwYUdVZ1lHRnpJSE41YldKdmJHQWdZMkZ6ZEhNc0lGUlRJR1JsWTJ4aGNtVnpJSFJvWlhObElHbHVJSFJvWlNCZ2RtbHphWFJnWEc0dkx5QnVZVzFsYzNCaFkyVWdkWE5wYm1jZ1lIWmhjbUFzSUdKMWRDQjBhR1Z1SUdOdmJYQnNZV2x1Y3lCaFltOTFkQ0IwYUdGMElHSmxZMkYxYzJWY2JpOHZJR0IxYm1seGRXVWdjM2x0WW05c1lDQnRkWE4wSUdKbElHQmpiMjV6ZEdBdVhHNHZLaW9nVkdWeWJXbHVZWFJsSUhacGMybDBJSFJ5WVhabGNuTmhiQ0JqYjIxd2JHVjBaV3g1SUNvdlhHNTJhWE5wZEM1Q1VrVkJTeUE5SUVKU1JVRkxPMXh1THlvcUlFUnZJRzV2ZENCMmFYTnBkQ0IwYUdVZ1kyaHBiR1J5Wlc0Z2IyWWdkR2hsSUdOMWNuSmxiblFnYVhSbGJTQXFMMXh1ZG1semFYUXVVMHRKVUNBOUlGTkxTVkE3WEc0dktpb2dVbVZ0YjNabElIUm9aU0JqZFhKeVpXNTBJR2wwWlcwZ0tpOWNiblpwYzJsMExsSkZUVTlXUlNBOUlGSkZUVTlXUlR0Y2JpOHFLaUJHYVc1a0lIUm9aU0JwZEdWdElHRjBJR0J3WVhSb1lDQm1jbTl0SUdCamMzUmdJR0Z6SUhSb1pTQnliMjkwSUNvdlhHNTJhWE5wZEM1cGRHVnRRWFJRWVhSb0lEMGdLR056ZEN3Z2NHRjBhQ2tnUFQ0Z2UxeHVJQ0FnSUd4bGRDQnBkR1Z0SUQwZ1kzTjBPMXh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdXMlpwWld4a0xDQnBibVJsZUYwZ2IyWWdjR0YwYUNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCMGIyc2dQU0JwZEdWdFB5NWJabWxsYkdSZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEc5cklDWW1JQ2RwZEdWdGN5Y2dhVzRnZEc5cktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcGRHVnRJRDBnZEc5ckxtbDBaVzF6VzJsdVpHVjRYVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZFc1a1pXWnBibVZrTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2FYUmxiVHRjYm4wN1hHNHZLaXBjYmlBcUlFZGxkQ0IwYUdVZ2FXMXRaV1JwWVhSbElIQmhjbVZ1ZENCamIyeHNaV04wYVc5dUlHOW1JSFJvWlNCcGRHVnRJR0YwSUdCd1lYUm9ZQ0JtY205dElHQmpjM1JnSUdGeklIUm9aU0J5YjI5MExseHVJQ3BjYmlBcUlGUm9jbTkzY3lCaGJpQmxjbkp2Y2lCcFppQjBhR1VnWTI5c2JHVmpkR2x2YmlCcGN5QnViM1FnWm05MWJtUXNJSGRvYVdOb0lITm9iM1ZzWkNCdVpYWmxjaUJvWVhCd1pXNGdhV1lnZEdobElHbDBaVzBnYVhSelpXeG1JR1Y0YVhOMGN5NWNiaUFxTDF4dWRtbHphWFF1Y0dGeVpXNTBRMjlzYkdWamRHbHZiaUE5SUNoamMzUXNJSEJoZEdncElEMCtJSHRjYmlBZ0lDQmpiMjV6ZENCd1lYSmxiblFnUFNCMmFYTnBkQzVwZEdWdFFYUlFZWFJvS0dOemRDd2djR0YwYUM1emJHbGpaU2d3TENBdE1Ta3BPMXh1SUNBZ0lHTnZibk4wSUdacFpXeGtJRDBnY0dGMGFGdHdZWFJvTG14bGJtZDBhQ0F0SURGZFd6QmRPMXh1SUNBZ0lHTnZibk4wSUdOdmJHd2dQU0J3WVhKbGJuUS9MbHRtYVdWc1pGMDdYRzRnSUNBZ2FXWWdLR052Ykd3Z0ppWWdKMmwwWlcxekp5QnBiaUJqYjJ4c0tWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOXNiRHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxQmhjbVZ1ZENCamIyeHNaV04wYVc5dUlHNXZkQ0JtYjNWdVpDY3BPMXh1ZlR0Y2JtWjFibU4wYVc5dUlGOTJhWE5wZENod1lYUm9MQ0JwZEdWdExDQjJhWE5wZEc5eUtTQjdYRzRnSUNBZ2JHVjBJR04wY213Z1BTQjJhWE5wZEc5eUtHbDBaVzBzSUhCaGRHZ3BPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZM1J5YkNBOVBUMGdKM041YldKdmJDY3BYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmpkSEpzTzF4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnWm1sbGJHUWdiMllnV3lkclpYa25MQ0FuZG1Gc2RXVW5YU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IwYjJ0bGJpQTlJR2wwWlcxYlptbGxiR1JkTzF4dUlDQWdJQ0FnSUNCcFppQW9kRzlyWlc0Z0ppWWdKMmwwWlcxekp5QnBiaUIwYjJ0bGJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBiMnRsYmk1cGRHVnRjeTVzWlc1bmRHZzdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOcElEMGdYM1pwYzJsMEtFOWlhbVZqZEM1bWNtVmxlbVVvY0dGMGFDNWpiMjVqWVhRb1cxdG1hV1ZzWkN3Z2FWMWRLU2tzSUhSdmEyVnVMbWwwWlcxelcybGRMQ0IyYVhOcGRHOXlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdOcElEMDlQU0FuYm5WdFltVnlKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FTQTlJR05wSUMwZ01UdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaGphU0E5UFQwZ1FsSkZRVXNwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCQ1VrVkJTenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hqYVNBOVBUMGdVa1ZOVDFaRktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSdmEyVnVMbWwwWlcxekxuTndiR2xqWlNocExDQXhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FTQXRQU0F4TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdZM1J5YkNBOVBUMGdKMloxYm1OMGFXOXVKeUFtSmlCbWFXVnNaQ0E5UFQwZ0oydGxlU2NwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNSeWJDQTlJR04wY213b2FYUmxiU3dnY0dGMGFDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSNWNHVnZaaUJqZEhKc0lEMDlQU0FuWm5WdVkzUnBiMjRuSUQ4Z1kzUnliQ2hwZEdWdExDQndZWFJvS1NBNklHTjBjbXc3WEc1OVhHNWNibVY0Y0c5eWRDQjdJSFpwYzJsMElIMDdYRzRpTENBaVpYaHdiM0owSUhzZ1kzSmxZWFJsVTJOaGJHRnlWRzlyWlc0c0lISmxjMjlzZG1WQmMxTmpZV3hoY2l3Z2MyVjBVMk5oYkdGeVZtRnNkV1VnZlNCbWNtOXRJQ2N1TDJOemRDMXpZMkZzWVhJdWFuTW5PMXh1Wlhod2IzSjBJSHNnYzNSeWFXNW5hV1o1SUgwZ1puSnZiU0FuTGk5amMzUXRjM1J5YVc1bmFXWjVMbXB6Snp0Y2JtVjRjRzl5ZENCN0lIWnBjMmwwSUgwZ1puSnZiU0FuTGk5amMzUXRkbWx6YVhRdWFuTW5PMXh1WEc0dktpb2dWR2hsSUdKNWRHVWdiM0prWlhJZ2JXRnlheUFxTDF4dVkyOXVjM1FnUWs5TklEMGdKMXhjZFh0R1JVWkdmU2M3WEc0dktpb2dVM1JoY25RZ2IyWWdaRzlqTFcxdlpHVWdLaTljYm1OdmJuTjBJRVJQUTFWTlJVNVVJRDBnSjF4Y2VEQXlKenNnTHk4Z1F6QTZJRk4wWVhKMElHOW1JRlJsZUhSY2JpOHFLaUJWYm1WNGNHVmpkR1ZrSUdWdVpDQnZaaUJtYkc5M0xXMXZaR1VnS2k5Y2JtTnZibk4wSUVaTVQxZGZSVTVFSUQwZ0oxeGNlREU0SnpzZ0x5OGdRekE2SUVOaGJtTmxiRnh1THlvcUlFNWxlSFFnZEc5clpXNGdhWE1nWVNCelkyRnNZWElnZG1Gc2RXVWdLaTljYm1OdmJuTjBJRk5EUVV4QlVpQTlJQ2RjWEhneFppYzdJQzh2SUVNd09pQlZibWwwSUZObGNHRnlZWFJ2Y2x4dUx5b3FJRUJ5WlhSMWNtNXpJR0IwY25WbFlDQnBaaUJnZEc5clpXNWdJR2x6SUdFZ1pteHZkeUJ2Y2lCaWJHOWpheUJqYjJ4c1pXTjBhVzl1SUNvdlhHNWpiMjV6ZENCcGMwTnZiR3hsWTNScGIyNGdQU0FvZEc5clpXNHBJRDArSUNFaGRHOXJaVzRnSmlZZ0oybDBaVzF6SnlCcGJpQjBiMnRsYmp0Y2JpOHFLaUJBY21WMGRYSnVjeUJnZEhKMVpXQWdhV1lnWUhSdmEyVnVZQ0JwY3lCaElHWnNiM2NnYjNJZ1lteHZZMnNnYzJOaGJHRnlPeUJ1YjNRZ1lXNGdZV3hwWVhNZ0tpOWNibU52Ym5OMElHbHpVMk5oYkdGeUlEMGdLSFJ2YTJWdUtTQTlQaUFoSVhSdmEyVnVJQ1ltWEc0Z0lDQWdLSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZHpZMkZzWVhJbklIeDhYRzRnSUNBZ0lDQWdJSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZHphVzVuYkdVdGNYVnZkR1ZrTFhOallXeGhjaWNnZkh4Y2JpQWdJQ0FnSUNBZ2RHOXJaVzR1ZEhsd1pTQTlQVDBnSjJSdmRXSnNaUzF4ZFc5MFpXUXRjMk5oYkdGeUp5QjhmRnh1SUNBZ0lDQWdJQ0IwYjJ0bGJpNTBlWEJsSUQwOVBTQW5ZbXh2WTJzdGMyTmhiR0Z5SnlrN1hHNHZLaUJwYzNSaGJtSjFiQ0JwWjI1dmNtVWdibVY0ZENBcUwxeHVMeW9xSUVkbGRDQmhJSEJ5YVc1MFlXSnNaU0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUJoSUd4bGVHVnlJSFJ2YTJWdUlDb3ZYRzVtZFc1amRHbHZiaUJ3Y21WMGRIbFViMnRsYmloMGIydGxiaWtnZTF4dUlDQWdJSE4zYVhSamFDQW9kRzlyWlc0cElIdGNiaUFnSUNBZ0lDQWdZMkZ6WlNCQ1QwMDZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnp4Q1QwMCtKenRjYmlBZ0lDQWdJQ0FnWTJGelpTQkVUME5WVFVWT1ZEcGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuUEVSUFF6NG5PMXh1SUNBZ0lDQWdJQ0JqWVhObElFWk1UMWRmUlU1RU9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2M4Umt4UFYxOUZUa1ErSnp0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0JUUTBGTVFWSTZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnp4VFEwRk1RVkkrSnp0Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQktVMDlPTG5OMGNtbHVaMmxtZVNoMGIydGxiaWs3WEc0Z0lDQWdmVnh1ZlZ4dUx5b3FJRWxrWlc1MGFXWjVJSFJvWlNCMGVYQmxJRzltSUdFZ2JHVjRaWElnZEc5clpXNHVJRTFoZVNCeVpYUjFjbTRnWUc1MWJHeGdJR1p2Y2lCMWJtdHViM2R1SUhSdmEyVnVjeTRnS2k5Y2JtWjFibU4wYVc5dUlIUnZhMlZ1Vkhsd1pTaHpiM1Z5WTJVcElIdGNiaUFnSUNCemQybDBZMmdnS0hOdmRYSmpaU2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJRUpQVFRwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5ZbmwwWlMxdmNtUmxjaTF0WVhKckp6dGNiaUFnSUNBZ0lDQWdZMkZ6WlNCRVQwTlZUVVZPVkRwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5aRzlqTFcxdlpHVW5PMXh1SUNBZ0lDQWdJQ0JqWVhObElFWk1UMWRmUlU1RU9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2RtYkc5M0xXVnljbTl5TFdWdVpDYzdYRzRnSUNBZ0lDQWdJR05oYzJVZ1UwTkJURUZTT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZHpZMkZzWVhJbk8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjdExTMG5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNka2IyTXRjM1JoY25Rbk8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjdUxpNG5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNka2IyTXRaVzVrSnp0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0FuSnpwY2JpQWdJQ0FnSUNBZ1kyRnpaU0FuWEZ4dUp6cGNiaUFnSUNBZ0lDQWdZMkZ6WlNBblhGeHlYRnh1SnpwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5ibVYzYkdsdVpTYzdYRzRnSUNBZ0lDQWdJR05oYzJVZ0p5MG5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNkelpYRXRhWFJsYlMxcGJtUW5PMXh1SUNBZ0lDQWdJQ0JqWVhObElDYy9KenBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBblpYaHdiR2xqYVhRdGEyVjVMV2x1WkNjN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSnpvbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2R0WVhBdGRtRnNkV1V0YVc1a0p6dGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbmV5YzZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSjJac2IzY3RiV0Z3TFhOMFlYSjBKenRjYmlBZ0lDQWdJQ0FnWTJGelpTQW5mU2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0oyWnNiM2N0YldGd0xXVnVaQ2M3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKMXNuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZG1iRzkzTFhObGNTMXpkR0Z5ZENjN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSjEwbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2RtYkc5M0xYTmxjUzFsYm1Rbk8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjc0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuWTI5dGJXRW5PMXh1SUNBZ0lIMWNiaUFnSUNCemQybDBZMmdnS0hOdmRYSmpaVnN3WFNrZ2UxeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjZ0p6cGNiaUFnSUNBZ0lDQWdZMkZ6WlNBblhGeDBKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbmMzQmhZMlVuTzF4dUlDQWdJQ0FnSUNCallYTmxJQ2NqSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5ZMjl0YldWdWRDYzdYRzRnSUNBZ0lDQWdJR05oYzJVZ0p5VW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNka2FYSmxZM1JwZG1VdGJHbHVaU2M3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKeW9uT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZGhiR2xoY3ljN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSnlZbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2RoYm1Ob2IzSW5PMXh1SUNBZ0lDQWdJQ0JqWVhObElDY2hKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbmRHRm5KenRjYmlBZ0lDQWdJQ0FnWTJGelpTQmNJaWRjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5jMmx1WjJ4bExYRjFiM1JsWkMxelkyRnNZWEluTzF4dUlDQWdJQ0FnSUNCallYTmxJQ2RjSWljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKMlJ2ZFdKc1pTMXhkVzkwWldRdGMyTmhiR0Z5Snp0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0FuZkNjNlhHNGdJQ0FnSUNBZ0lHTmhjMlVnSno0bk9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2RpYkc5amF5MXpZMkZzWVhJdGFHVmhaR1Z5Snp0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc1OVhHNWNibVY0Y0c5eWRDQjdJRUpQVFN3Z1JFOURWVTFGVGxRc0lFWk1UMWRmUlU1RUxDQlRRMEZNUVZJc0lHbHpRMjlzYkdWamRHbHZiaXdnYVhOVFkyRnNZWElzSUhCeVpYUjBlVlJ2YTJWdUxDQjBiMnRsYmxSNWNHVWdmVHRjYmlJc0lDSnBiWEJ2Y25RZ2V5QkNUMDBzSUVSUFExVk5SVTVVTENCR1RFOVhYMFZPUkN3Z1UwTkJURUZTSUgwZ1puSnZiU0FuTGk5amMzUXVhbk1uTzF4dVhHNHZLbHh1VTFSQlVsUWdMVDRnYzNSeVpXRnRYRzVjYm5OMGNtVmhiVnh1SUNCa2FYSmxZM1JwZG1VZ0xUNGdiR2x1WlMxbGJtUWdMVDRnYzNSeVpXRnRYRzRnSUdsdVpHVnVkQ0FySUd4cGJtVXRaVzVrSUMwK0lITjBjbVZoYlZ4dUlDQmJaV3h6WlYwZ0xUNGdiR2x1WlMxemRHRnlkRnh1WEc1c2FXNWxMV1Z1WkZ4dUlDQmpiMjF0Wlc1MElDMCtJR3hwYm1VdFpXNWtYRzRnSUc1bGQyeHBibVVnTFQ0Z0xseHVJQ0JwYm5CMWRDMWxibVFnTFQ0Z1JVNUVYRzVjYm14cGJtVXRjM1JoY25SY2JpQWdaRzlqTFhOMFlYSjBJQzArSUdSdlkxeHVJQ0JrYjJNdFpXNWtJQzArSUhOMGNtVmhiVnh1SUNCYlpXeHpaVjBnTFQ0Z2FXNWtaVzUwSUMwK0lHSnNiMk5yTFhOMFlYSjBYRzVjYm1Kc2IyTnJMWE4wWVhKMFhHNGdJSE5sY1MxcGRHVnRMWE4wWVhKMElDMCtJR0pzYjJOckxYTjBZWEowWEc0Z0lHVjRjR3hwWTJsMExXdGxlUzF6ZEdGeWRDQXRQaUJpYkc5amF5MXpkR0Z5ZEZ4dUlDQnRZWEF0ZG1Gc2RXVXRjM1JoY25RZ0xUNGdZbXh2WTJzdGMzUmhjblJjYmlBZ1cyVnNjMlZkSUMwK0lHUnZZMXh1WEc1a2IyTmNiaUFnYkdsdVpTMWxibVFnTFQ0Z2JHbHVaUzF6ZEdGeWRGeHVJQ0J6Y0dGalpYTWdMVDRnWkc5alhHNGdJR0Z1WTJodmNpQXRQaUJrYjJOY2JpQWdkR0ZuSUMwK0lHUnZZMXh1SUNCbWJHOTNMWE4wWVhKMElDMCtJR1pzYjNjZ0xUNGdaRzlqWEc0Z0lHWnNiM2N0Wlc1a0lDMCtJR1Z5Y205eUlDMCtJR1J2WTF4dUlDQnpaWEV0YVhSbGJTMXpkR0Z5ZENBdFBpQmxjbkp2Y2lBdFBpQmtiMk5jYmlBZ1pYaHdiR2xqYVhRdGEyVjVMWE4wWVhKMElDMCtJR1Z5Y205eUlDMCtJR1J2WTF4dUlDQnRZWEF0ZG1Gc2RXVXRjM1JoY25RZ0xUNGdaRzlqWEc0Z0lHRnNhV0Z6SUMwK0lHUnZZMXh1SUNCeGRXOTBaUzF6ZEdGeWRDQXRQaUJ4ZFc5MFpXUXRjMk5oYkdGeUlDMCtJR1J2WTF4dUlDQmliRzlqYXkxelkyRnNZWEl0YUdWaFpHVnlJQzArSUd4cGJtVXRaVzVrSUMwK0lHSnNiMk5yTFhOallXeGhjaWh0YVc0cElDMCtJR3hwYm1VdGMzUmhjblJjYmlBZ1cyVnNjMlZkSUMwK0lIQnNZV2x1TFhOallXeGhjaWhtWVd4elpTd2diV2x1S1NBdFBpQmtiMk5jYmx4dVpteHZkMXh1SUNCc2FXNWxMV1Z1WkNBdFBpQm1iRzkzWEc0Z0lITndZV05sY3lBdFBpQm1iRzkzWEc0Z0lHRnVZMmh2Y2lBdFBpQm1iRzkzWEc0Z0lIUmhaeUF0UGlCbWJHOTNYRzRnSUdac2IzY3RjM1JoY25RZ0xUNGdabXh2ZHlBdFBpQm1iRzkzWEc0Z0lHWnNiM2N0Wlc1a0lDMCtJQzVjYmlBZ2MyVnhMV2wwWlcwdGMzUmhjblFnTFQ0Z1pYSnliM0lnTFQ0Z1pteHZkMXh1SUNCbGVIQnNhV05wZEMxclpYa3RjM1JoY25RZ0xUNGdabXh2ZDF4dUlDQnRZWEF0ZG1Gc2RXVXRjM1JoY25RZ0xUNGdabXh2ZDF4dUlDQmhiR2xoY3lBdFBpQm1iRzkzWEc0Z0lIRjFiM1JsTFhOMFlYSjBJQzArSUhGMWIzUmxaQzF6WTJGc1lYSWdMVDRnWm14dmQxeHVJQ0JqYjIxdFlTQXRQaUJtYkc5M1hHNGdJRnRsYkhObFhTQXRQaUJ3YkdGcGJpMXpZMkZzWVhJb2RISjFaU3dnTUNrZ0xUNGdabXh2ZDF4dVhHNXhkVzkwWldRdGMyTmhiR0Z5WEc0Z0lIRjFiM1JsTFdWdVpDQXRQaUF1WEc0Z0lGdGxiSE5sWFNBdFBpQnhkVzkwWldRdGMyTmhiR0Z5WEc1Y2JtSnNiMk5yTFhOallXeGhjaWh0YVc0cFhHNGdJRzVsZDJ4cGJtVWdLeUJ3WldWcktHbHVaR1Z1ZENBOElHMXBiaWtnTFQ0Z0xseHVJQ0JiWld4elpWMGdMVDRnWW14dlkyc3RjMk5oYkdGeUtHMXBiaWxjYmx4dWNHeGhhVzR0YzJOaGJHRnlLR2x6TFdac2IzY3NJRzFwYmlsY2JpQWdjMk5oYkdGeUxXVnVaQ2hwY3kxbWJHOTNLU0F0UGlBdVhHNGdJSEJsWldzb2JtVjNiR2x1WlNBcklDaHBibVJsYm5RZ1BDQnRhVzRwS1NBdFBpQXVYRzRnSUZ0bGJITmxYU0F0UGlCd2JHRnBiaTF6WTJGc1lYSW9iV2x1S1Z4dUtpOWNibVoxYm1OMGFXOXVJR2x6Ulcxd2RIa29ZMmdwSUh0Y2JpQWdJQ0J6ZDJsMFkyZ2dLR05vS1NCN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnZFc1a1pXWnBibVZrT2x4dUlDQWdJQ0FnSUNCallYTmxJQ2NnSnpwY2JpQWdJQ0FnSUNBZ1kyRnpaU0FuWEZ4dUp6cGNiaUFnSUNBZ0lDQWdZMkZ6WlNBblhGeHlKenBjYmlBZ0lDQWdJQ0FnWTJGelpTQW5YRngwSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJSDFjYm4xY2JtTnZibk4wSUdobGVFUnBaMmwwY3lBOUlHNWxkeUJUWlhRb0p6QXhNak0wTlRZM09EbEJRa05FUlVaaFltTmtaV1luS1R0Y2JtTnZibk4wSUhSaFowTm9ZWEp6SUQwZ2JtVjNJRk5sZENoY0lqQXhNak0wTlRZM09EbEJRa05FUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldtRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNkxTTTdMejg2UUNZOUt5UmZMaUYrS2ljb0tWd2lLVHRjYm1OdmJuTjBJR1pzYjNkSmJtUnBZMkYwYjNKRGFHRnljeUE5SUc1bGR5QlRaWFFvSnl4YlhYdDlKeWs3WEc1amIyNXpkQ0JwYm5aaGJHbGtRVzVqYUc5eVEyaGhjbk1nUFNCdVpYY2dVMlYwS0NjZ0xGdGRlMzFjWEc1Y1hISmNYSFFuS1R0Y2JtTnZibk4wSUdselRtOTBRVzVqYUc5eVEyaGhjaUE5SUNoamFDa2dQVDRnSVdOb0lIeDhJR2x1ZG1Gc2FXUkJibU5vYjNKRGFHRnljeTVvWVhNb1kyZ3BPMXh1THlvcVhHNGdLaUJUY0d4cGRITWdZVzRnYVc1d2RYUWdjM1J5YVc1bklHbHVkRzhnYkdWNGFXTmhiQ0IwYjJ0bGJuTXNJR2t1WlM0Z2MyMWhiR3hsY2lCemRISnBibWR6SUhSb1lYUWdZWEpsWEc0Z0tpQmxZWE5wYkhrZ2FXUmxiblJwWm1saFlteGxJR0o1SUdCMGIydGxibk11ZEc5clpXNVVlWEJsS0NsZ0xseHVJQ3BjYmlBcUlFeGxlR2x1WnlCemRHRnlkSE1nWVd4M1lYbHpJR2x1SUdFZ1hDSnpkSEpsWVcxY0lpQmpiMjUwWlhoMExpQkpibU52YlhCc1pYUmxJR2x1Y0hWMElHMWhlU0JpWlNCaWRXWm1aWEpsWkZ4dUlDb2dkVzUwYVd3Z1lTQmpiMjF3YkdWMFpTQjBiMnRsYmlCallXNGdZbVVnWlcxcGRIUmxaQzVjYmlBcVhHNGdLaUJKYmlCaFpHUnBkR2x2YmlCMGJ5QnpiR2xqWlhNZ2IyWWdkR2hsSUc5eWFXZHBibUZzSUdsdWNIVjBMQ0IwYUdVZ1ptOXNiRzkzYVc1bklHTnZiblJ5YjJ3Z1kyaGhjbUZqZEdWeWMxeHVJQ29nYldGNUlHRnNjMjhnWW1VZ1pXMXBkSFJsWkRwY2JpQXFYRzRnS2lBdElHQmNYSGd3TW1BZ0tGTjBZWEowSUc5bUlGUmxlSFFwT2lCQklHUnZZM1Z0Wlc1MElITjBZWEowY3lCM2FYUm9JSFJvWlNCdVpYaDBJSFJ2YTJWdVhHNGdLaUF0SUdCY1hIZ3hPR0FnS0VOaGJtTmxiQ2s2SUZWdVpYaHdaV04wWldRZ1pXNWtJRzltSUdac2IzY3RiVzlrWlNBb2FXNWthV05oZEdWeklHRnVJR1Z5Y205eUtWeHVJQ29nTFNCZ1hGeDRNV1pnSUNoVmJtbDBJRk5sY0dGeVlYUnZjaWs2SUU1bGVIUWdkRzlyWlc0Z2FYTWdZU0J6WTJGc1lYSWdkbUZzZFdWY2JpQXFJQzBnWUZ4Y2RYdEdSVVpHZldBZ0tFSjVkR1VnYjNKa1pYSWdiV0Z5YXlrNklFVnRhWFIwWldRZ2MyVndZWEpoZEdWc2VTQnZkWFJ6YVdSbElHUnZZM1Z0Wlc1MGMxeHVJQ292WEc1amJHRnpjeUJNWlhobGNpQjdYRzRnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9LU0I3WEc0Z0lDQWdJQ0FnSUM4cUtseHVJQ0FnSUNBZ0lDQWdLaUJHYkdGbklHbHVaR2xqWVhScGJtY2dkMmhsZEdobGNpQjBhR1VnWlc1a0lHOW1JSFJvWlNCamRYSnlaVzUwSUdKMVptWmxjaUJ0WVhKcmN5QjBhR1VnWlc1a0lHOW1YRzRnSUNBZ0lDQWdJQ0FxSUdGc2JDQnBibkIxZEZ4dUlDQWdJQ0FnSUNBZ0tpOWNiaUFnSUNBZ0lDQWdkR2hwY3k1aGRFVnVaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0F2S2lwY2JpQWdJQ0FnSUNBZ0lDb2dSWGh3YkdsamFYUWdhVzVrWlc1MElITmxkQ0JwYmlCaWJHOWpheUJ6WTJGc1lYSWdhR1ZoWkdWeUxDQmhjeUJoYmlCdlptWnpaWFFnWm5KdmJTQjBhR1VnWTNWeWNtVnVkRnh1SUNBZ0lDQWdJQ0FnS2lCdGFXNXBiWFZ0SUdsdVpHVnVkQ3dnYzI4Z1pTNW5MaUJ6WlhRZ2RHOGdNU0JtY205dElHRWdhR1ZoWkdWeUlHQjhNaXRnTGlCVFpYUWdkRzhnTFRFZ2FXWWdibTkwWEc0Z0lDQWdJQ0FnSUNBcUlHVjRjR3hwWTJsMGJIa2djMlYwTGx4dUlDQWdJQ0FnSUNBZ0tpOWNiaUFnSUNBZ0lDQWdkR2hwY3k1aWJHOWphMU5qWVd4aGNrbHVaR1Z1ZENBOUlDMHhPMXh1SUNBZ0lDQWdJQ0F2S2lwY2JpQWdJQ0FnSUNBZ0lDb2dRbXh2WTJzZ2MyTmhiR0Z5Y3lCMGFHRjBJR2x1WTJ4MVpHVWdZU0FySUNoclpXVndLU0JqYUc5dGNHbHVaeUJwYm1ScFkyRjBiM0lnYVc0Z2RHaGxhWElnYUdWaFpHVnlYRzRnSUNBZ0lDQWdJQ0FxSUdsdVkyeDFaR1VnZEhKaGFXeHBibWNnWlcxd2RIa2diR2x1WlhNc0lIZG9hV05vSUdGeVpTQnZkR2hsY25kcGMyVWdaWGhqYkhWa1pXUWdabkp2YlNCMGFHVmNiaUFnSUNBZ0lDQWdJQ29nYzJOaGJHRnlKM01nWTI5dWRHVnVkSE11WEc0Z0lDQWdJQ0FnSUNBcUwxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1Kc2IyTnJVMk5oYkdGeVMyVmxjQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0F2S2lvZ1EzVnljbVZ1ZENCcGJuQjFkQ0FxTDF4dUlDQWdJQ0FnSUNCMGFHbHpMbUoxWm1abGNpQTlJQ2NuTzF4dUlDQWdJQ0FnSUNBdktpcGNiaUFnSUNBZ0lDQWdJQ29nUm14aFp5QnViM1JwYm1jZ2QyaGxkR2hsY2lCMGFHVWdiV0Z3SUhaaGJIVmxJR2x1WkdsallYUnZjaUE2SUdOaGJpQnBiVzFsWkdsaGRHVnNlU0JtYjJ4c2IzY2dkR2hwYzF4dUlDQWdJQ0FnSUNBZ0tpQnViMlJsSUhkcGRHaHBiaUJoSUdac2IzY2dZMjl1ZEdWNGRDNWNiaUFnSUNBZ0lDQWdJQ292WEc0Z0lDQWdJQ0FnSUhSb2FYTXVabXh2ZDB0bGVTQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQXZLaW9nUTI5MWJuUWdiMllnYzNWeWNtOTFibVJwYm1jZ1pteHZkeUJqYjJ4c1pXTjBhVzl1SUd4bGRtVnNjeTRnS2k5Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVtYkc5M1RHVjJaV3dnUFNBd08xeHVJQ0FnSUNBZ0lDQXZLaXBjYmlBZ0lDQWdJQ0FnSUNvZ1RXbHVhVzExYlNCc1pYWmxiQ0J2WmlCcGJtUmxiblJoZEdsdmJpQnlaWEYxYVhKbFpDQm1iM0lnYm1WNGRDQnNhVzVsY3lCMGJ5QmlaU0J3WVhKelpXUWdZWE1nWVZ4dUlDQWdJQ0FnSUNBZ0tpQndZWEowSUc5bUlIUm9aU0JqZFhKeVpXNTBJSE5qWVd4aGNpQjJZV3gxWlM1Y2JpQWdJQ0FnSUNBZ0lDb3ZYRzRnSUNBZ0lDQWdJSFJvYVhNdWFXNWtaVzUwVG1WNGRDQTlJREE3WEc0Z0lDQWdJQ0FnSUM4cUtpQkpibVJsYm5SaGRHbHZiaUJzWlhabGJDQnZaaUIwYUdVZ1kzVnljbVZ1ZENCc2FXNWxMaUFxTDF4dUlDQWdJQ0FnSUNCMGFHbHpMbWx1WkdWdWRGWmhiSFZsSUQwZ01EdGNiaUFnSUNBZ0lDQWdMeW9xSUZCdmMybDBhVzl1SUc5bUlIUm9aU0J1WlhoMElGeGNiaUJqYUdGeVlXTjBaWEl1SUNvdlhHNGdJQ0FnSUNBZ0lIUm9hWE11YkdsdVpVVnVaRkJ2Y3lBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUM4cUtpQlRkRzl5WlhNZ2RHaGxJSE4wWVhSbElHOW1JSFJvWlNCc1pYaGxjaUJwWmlCeVpXRmphR2x1WnlCMGFHVWdaVzVrSUc5bUlHbHVZM0J2YlhCc1pYUmxJR2x1Y0hWMElDb3ZYRzRnSUNBZ0lDQWdJSFJvYVhNdWJtVjRkQ0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJQzhxS2lCQklIQnZhVzUwWlhJZ2RHOGdZR0oxWm1abGNtQTdJSFJvWlNCamRYSnlaVzUwSUhCdmMybDBhVzl1SUc5bUlIUm9aU0JzWlhobGNpNGdLaTljYmlBZ0lDQWdJQ0FnZEdocGN5NXdiM01nUFNBd08xeHVJQ0FnSUgxY2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCSFpXNWxjbUYwWlNCWlFVMU1JSFJ2YTJWdWN5Qm1jbTl0SUhSb1pTQmdjMjkxY21ObFlDQnpkSEpwYm1jdUlFbG1JR0JwYm1OdmJYQnNaWFJsWUN4Y2JpQWdJQ0FnS2lCaElIQmhjblFnYjJZZ2RHaGxJR3hoYzNRZ2JHbHVaU0J0WVhrZ1ltVWdiR1ZtZENCaGN5QmhJR0oxWm1abGNpQm1iM0lnZEdobElHNWxlSFFnWTJGc2JDNWNiaUFnSUNBZ0tseHVJQ0FnSUNBcUlFQnlaWFIxY201eklFRWdaMlZ1WlhKaGRHOXlJRzltSUd4bGVHbGpZV3dnZEc5clpXNXpYRzRnSUNBZ0lDb3ZYRzRnSUNBZ0tteGxlQ2h6YjNWeVkyVXNJR2x1WTI5dGNHeGxkR1VnUFNCbVlXeHpaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9jMjkxY21ObEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlITnZkWEpqWlNBaFBUMGdKM04wY21sdVp5Y3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtDZHpiM1Z5WTJVZ2FYTWdibTkwSUdFZ2MzUnlhVzVuSnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtSjFabVpsY2lBOUlIUm9hWE11WW5WbVptVnlJRDhnZEdocGN5NWlkV1ptWlhJZ0t5QnpiM1Z5WTJVZ09pQnpiM1Z5WTJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxteHBibVZGYm1SUWIzTWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFJvYVhNdVlYUkZibVFnUFNBaGFXNWpiMjF3YkdWMFpUdGNiaUFnSUNBZ0lDQWdiR1YwSUc1bGVIUWdQU0IwYUdsekxtNWxlSFFnUHo4Z0ozTjBjbVZoYlNjN1hHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNodVpYaDBJQ1ltSUNocGJtTnZiWEJzWlhSbElIeDhJSFJvYVhNdWFHRnpRMmhoY25Nb01Ta3BLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkQ0E5SUhscFpXeGtLaUIwYUdsekxuQmhjbk5sVG1WNGRDaHVaWGgwS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdZWFJNYVc1bFJXNWtLQ2tnZTF4dUlDQWdJQ0FnSUNCc1pYUWdhU0E5SUhSb2FYTXVjRzl6TzF4dUlDQWdJQ0FnSUNCc1pYUWdZMmdnUFNCMGFHbHpMbUoxWm1abGNsdHBYVHRjYmlBZ0lDQWdJQ0FnZDJocGJHVWdLR05vSUQwOVBTQW5JQ2NnZkh3Z1kyZ2dQVDA5SUNkY1hIUW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyZ2dQU0IwYUdsekxtSjFabVpsY2xzcksybGRPMXh1SUNBZ0lDQWdJQ0JwWmlBb0lXTm9JSHg4SUdOb0lEMDlQU0FuSXljZ2ZId2dZMmdnUFQwOUlDZGNYRzRuS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUdsbUlDaGphQ0E5UFQwZ0oxeGNjaWNwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVpZFdabVpYSmJhU0FySURGZElEMDlQU0FuWEZ4dUp6dGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJSDFjYmlBZ0lDQmphR0Z5UVhRb2Jpa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1aWRXWm1aWEpiZEdocGN5NXdiM01nS3lCdVhUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWRHbHVkV1ZUWTJGc1lYSW9iMlptYzJWMEtTQjdYRzRnSUNBZ0lDQWdJR3hsZENCamFDQTlJSFJvYVhNdVluVm1abVZ5VzI5bVpuTmxkRjA3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1sdVpHVnVkRTVsZUhRZ1BpQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYVc1a1pXNTBJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSGRvYVd4bElDaGphQ0E5UFQwZ0p5QW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05vSUQwZ2RHaHBjeTVpZFdabVpYSmJLeXRwYm1SbGJuUWdLeUJ2Wm1aelpYUmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR05vSUQwOVBTQW5YRnh5SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUc1bGVIUWdQU0IwYUdsekxtSjFabVpsY2x0cGJtUmxiblFnS3lCdlptWnpaWFFnS3lBeFhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRDQTlQVDBnSjF4Y2JpY2dmSHdnS0NGdVpYaDBJQ1ltSUNGMGFHbHpMbUYwUlc1a0tTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzltWm5ObGRDQXJJR2x1WkdWdWRDQXJJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWTJnZ1BUMDlJQ2RjWEc0bklIeDhJR2x1WkdWdWRDQStQU0IwYUdsekxtbHVaR1Z1ZEU1bGVIUWdmSHdnS0NGamFDQW1KaUFoZEdocGN5NWhkRVZ1WkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBL0lHOW1abk5sZENBcklHbHVaR1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ0xURTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tHTm9JRDA5UFNBbkxTY2dmSHdnWTJnZ1BUMDlJQ2N1SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdaSFFnUFNCMGFHbHpMbUoxWm1abGNpNXpkV0p6ZEhJb2IyWm1jMlYwTENBektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDZ29aSFFnUFQwOUlDY3RMUzBuSUh4OElHUjBJRDA5UFNBbkxpNHVKeWtnSmlZZ2FYTkZiWEIwZVNoMGFHbHpMbUoxWm1abGNsdHZabVp6WlhRZ0t5QXpYU2twWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQzB4TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdlptWnpaWFE3WEc0Z0lDQWdmVnh1SUNBZ0lHZGxkRXhwYm1Vb0tTQjdYRzRnSUNBZ0lDQWdJR3hsZENCbGJtUWdQU0IwYUdsekxteHBibVZGYm1SUWIzTTdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnWlc1a0lDRTlQU0FuYm5WdFltVnlKeUI4ZkNBb1pXNWtJQ0U5UFNBdE1TQW1KaUJsYm1RZ1BDQjBhR2x6TG5CdmN5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnVaQ0E5SUhSb2FYTXVZblZtWm1WeUxtbHVaR1Y0VDJZb0oxeGNiaWNzSUhSb2FYTXVjRzl6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWJHbHVaVVZ1WkZCdmN5QTlJR1Z1WkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnBaaUFvWlc1a0lEMDlQU0F0TVNsY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG1GMFJXNWtJRDhnZEdocGN5NWlkV1ptWlhJdWMzVmljM1J5YVc1bktIUm9hWE11Y0c5ektTQTZJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtSjFabVpsY2x0bGJtUWdMU0F4WFNBOVBUMGdKMXhjY2ljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JsYm1RZ0xUMGdNVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVluVm1abVZ5TG5OMVluTjBjbWx1WnloMGFHbHpMbkJ2Y3l3Z1pXNWtLVHRjYmlBZ0lDQjlYRzRnSUNBZ2FHRnpRMmhoY25Nb2Jpa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1d2IzTWdLeUJ1SUR3OUlIUm9hWE11WW5WbVptVnlMbXhsYm1kMGFEdGNiaUFnSUNCOVhHNGdJQ0FnYzJWMFRtVjRkQ2h6ZEdGMFpTa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtSjFabVpsY2lBOUlIUm9hWE11WW5WbVptVnlMbk4xWW5OMGNtbHVaeWgwYUdsekxuQnZjeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUQwZ01EdGNiaUFnSUNBZ0lDQWdkR2hwY3k1c2FXNWxSVzVrVUc5eklEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV1WlhoMElEMGdjM1JoZEdVN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNBZ0lIMWNiaUFnSUNCd1pXVnJLRzRwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZblZtWm1WeUxuTjFZbk4wY2loMGFHbHpMbkJ2Y3l3Z2JpazdYRzRnSUNBZ2ZWeHVJQ0FnSUNwd1lYSnpaVTVsZUhRb2JtVjRkQ2tnZTF4dUlDQWdJQ0FnSUNCemQybDBZMmdnS0c1bGVIUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjNOMGNtVmhiU2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSGxwWld4a0tpQjBhR2x6TG5CaGNuTmxVM1J5WldGdEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RzYVc1bExYTjBZWEowSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZVdsbGJHUXFJSFJvYVhNdWNHRnljMlZNYVc1bFUzUmhjblFvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oySnNiMk5yTFhOMFlYSjBKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdlV2xsYkdRcUlIUm9hWE11Y0dGeWMyVkNiRzlqYTFOMFlYSjBLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNka2IyTW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjVhV1ZzWkNvZ2RHaHBjeTV3WVhKelpVUnZZM1Z0Wlc1MEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RtYkc5M0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2VXbGxiR1FxSUhSb2FYTXVjR0Z5YzJWR2JHOTNRMjlzYkdWamRHbHZiaWdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbmNYVnZkR1ZrTFhOallXeGhjaWM2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSGxwWld4a0tpQjBhR2x6TG5CaGNuTmxVWFZ2ZEdWa1UyTmhiR0Z5S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGliRzlqYXkxelkyRnNZWEluT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUI1YVdWc1pDb2dkR2hwY3k1d1lYSnpaVUpzYjJOclUyTmhiR0Z5S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHdiR0ZwYmkxelkyRnNZWEluT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUI1YVdWc1pDb2dkR2hwY3k1d1lYSnpaVkJzWVdsdVUyTmhiR0Z5S0NrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnS25CaGNuTmxVM1J5WldGdEtDa2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2JHbHVaU0E5SUhSb2FYTXVaMlYwVEdsdVpTZ3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb2JHbHVaU0E5UFQwZ2JuVnNiQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbk5sZEU1bGVIUW9KM04wY21WaGJTY3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb2JHbHVaVnN3WFNBOVBUMGdRazlOS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1d2RYTm9RMjkxYm5Rb01TazdYRzRnSUNBZ0lDQWdJQ0FnSUNCc2FXNWxJRDBnYkdsdVpTNXpkV0p6ZEhKcGJtY29NU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLR3hwYm1WYk1GMGdQVDA5SUNjbEp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR1JwY2tWdVpDQTlJR3hwYm1VdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdOeklEMGdiR2x1WlM1cGJtUmxlRTltS0Njakp5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCM2FHbHNaU0FvWTNNZ0lUMDlJQzB4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWTJnZ1BTQnNhVzVsVzJOeklDMGdNVjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTm9JRDA5UFNBbklDY2dmSHdnWTJnZ1BUMDlJQ2RjWEhRbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdScGNrVnVaQ0E5SUdOeklDMGdNVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamN5QTlJR3hwYm1VdWFXNWtaWGhQWmlnbkl5Y3NJR056SUNzZ01TazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZDJocGJHVWdLSFJ5ZFdVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCamFDQTlJR3hwYm1WYlpHbHlSVzVrSUMwZ01WMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOb0lEMDlQU0FuSUNjZ2ZId2dZMmdnUFQwOUlDZGNYSFFuS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmthWEpGYm1RZ0xUMGdNVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JpQTlJQ2g1YVdWc1pDb2dkR2hwY3k1d2RYTm9RMjkxYm5Rb1pHbHlSVzVrS1NrZ0t5QW9lV2xsYkdRcUlIUm9hWE11Y0hWemFGTndZV05sY3loMGNuVmxLU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV3ZFhOb1EyOTFiblFvYkdsdVpTNXNaVzVuZEdnZ0xTQnVLVHNnTHk4Z2NHOXpjMmxpYkdVZ1kyOXRiV1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1d2RYTm9UbVYzYkdsdVpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNkemRISmxZVzBuTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtRjBUR2x1WlVWdVpDZ3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCemNDQTlJSGxwWld4a0tpQjBhR2x6TG5CMWMyaFRjR0ZqWlhNb2RISjFaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV3ZFhOb1EyOTFiblFvYkdsdVpTNXNaVzVuZEdnZ0xTQnpjQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV3ZFhOb1RtVjNiR2x1WlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2R6ZEhKbFlXMG5PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhscFpXeGtJRVJQUTFWTlJVNVVPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdlV2xsYkdRcUlIUm9hWE11Y0dGeWMyVk1hVzVsVTNSaGNuUW9LVHRjYmlBZ0lDQjlYRzRnSUNBZ0tuQmhjbk5sVEdsdVpWTjBZWEowS0NrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCamFDQTlJSFJvYVhNdVkyaGhja0YwS0RBcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVdOb0lDWW1JQ0YwYUdsekxtRjBSVzVrS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YzJWMFRtVjRkQ2duYkdsdVpTMXpkR0Z5ZENjcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWTJnZ1BUMDlJQ2N0SnlCOGZDQmphQ0E5UFQwZ0p5NG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVhSb2FYTXVZWFJGYm1RZ0ppWWdJWFJvYVhNdWFHRnpRMmhoY25Nb05Da3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YzJWMFRtVjRkQ2duYkdsdVpTMXpkR0Z5ZENjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjeUE5SUhSb2FYTXVjR1ZsYXlnektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDZ29jeUE5UFQwZ0p5MHRMU2NnZkh3Z2N5QTlQVDBnSnk0dUxpY3BJQ1ltSUdselJXMXdkSGtvZEdocGN5NWphR0Z5UVhRb015a3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWNIVnphRU52ZFc1MEtETXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWFXNWtaVzUwVm1Gc2RXVWdQU0F3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhVzVrWlc1MFRtVjRkQ0E5SURBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhNZ1BUMDlJQ2N0TFMwbklEOGdKMlJ2WXljZ09pQW5jM1J5WldGdEp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjBhR2x6TG1sdVpHVnVkRlpoYkhWbElEMGdlV2xsYkdRcUlIUm9hWE11Y0hWemFGTndZV05sY3lobVlXeHpaU2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1sdVpHVnVkRTVsZUhRZ1BpQjBhR2x6TG1sdVpHVnVkRlpoYkhWbElDWW1JQ0ZwYzBWdGNIUjVLSFJvYVhNdVkyaGhja0YwS0RFcEtTbGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhVzVrWlc1MFRtVjRkQ0E5SUhSb2FYTXVhVzVrWlc1MFZtRnNkV1U3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUI1YVdWc1pDb2dkR2hwY3k1d1lYSnpaVUpzYjJOclUzUmhjblFvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdLbkJoY25ObFFteHZZMnRUZEdGeWRDZ3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdXMk5vTUN3Z1kyZ3hYU0E5SUhSb2FYTXVjR1ZsYXlneUtUdGNiaUFnSUNBZ0lDQWdhV1lnS0NGamFERWdKaVlnSVhSb2FYTXVZWFJGYm1RcFhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1elpYUk9aWGgwS0NkaWJHOWpheTF6ZEdGeWRDY3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb0tHTm9NQ0E5UFQwZ0p5MG5JSHg4SUdOb01DQTlQVDBnSno4bklIeDhJR05vTUNBOVBUMGdKem9uS1NBbUppQnBjMFZ0Y0hSNUtHTm9NU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHNGdQU0FvZVdsbGJHUXFJSFJvYVhNdWNIVnphRU52ZFc1MEtERXBLU0FySUNoNWFXVnNaQ29nZEdocGN5NXdkWE5vVTNCaFkyVnpLSFJ5ZFdVcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhVzVrWlc1MFRtVjRkQ0E5SUhSb2FYTXVhVzVrWlc1MFZtRnNkV1VnS3lBeE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXBibVJsYm5SV1lXeDFaU0FyUFNCdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSGxwWld4a0tpQjBhR2x6TG5CaGNuTmxRbXh2WTJ0VGRHRnlkQ2dwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlBblpHOWpKenRjYmlBZ0lDQjlYRzRnSUNBZ0tuQmhjbk5sUkc5amRXMWxiblFvS1NCN1hHNGdJQ0FnSUNBZ0lIbHBaV3hrS2lCMGFHbHpMbkIxYzJoVGNHRmpaWE1vZEhKMVpTazdYRzRnSUNBZ0lDQWdJR052Ym5OMElHeHBibVVnUFNCMGFHbHpMbWRsZEV4cGJtVW9LVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHeHBibVVnUFQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV6WlhST1pYaDBLQ2RrYjJNbktUdGNiaUFnSUNBZ0lDQWdiR1YwSUc0Z1BTQjVhV1ZzWkNvZ2RHaHBjeTV3ZFhOb1NXNWthV05oZEc5eWN5Z3BPMXh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLR3hwYm1WYmJsMHBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSnlNbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIbHBaV3hrS2lCMGFHbHpMbkIxYzJoRGIzVnVkQ2hzYVc1bExteGxibWQwYUNBdElHNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdabUZzYkhSb2NtOTFaMmhjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnZFc1a1pXWnBibVZrT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhscFpXeGtLaUIwYUdsekxuQjFjMmhPWlhkc2FXNWxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSGxwWld4a0tpQjBhR2x6TG5CaGNuTmxUR2x1WlZOMFlYSjBLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkN0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMXNuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhscFpXeGtLaUIwYUdsekxuQjFjMmhEYjNWdWRDZ3hLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtWnNiM2RMWlhrZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbVpzYjNkTVpYWmxiQ0E5SURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNkbWJHOTNKenRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjMwbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5YU2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2RHaHBjeUJwY3lCaGJpQmxjbkp2Y2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhscFpXeGtLaUIwYUdsekxuQjFjMmhEYjNWdWRDZ3hLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKMlJ2WXljN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDY3FKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1d2RYTm9WVzUwYVd3b2FYTk9iM1JCYm1Ob2IzSkRhR0Z5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSjJSdll5YzdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RjSWljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElGd2lKMXdpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUI1YVdWc1pDb2dkR2hwY3k1d1lYSnpaVkYxYjNSbFpGTmpZV3hoY2lncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5mQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNjK0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVJQ3M5SUhscFpXeGtLaUIwYUdsekxuQmhjbk5sUW14dlkydFRZMkZzWVhKSVpXRmtaWElvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdUlDczlJSGxwWld4a0tpQjBhR2x6TG5CMWMyaFRjR0ZqWlhNb2RISjFaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWNIVnphRU52ZFc1MEtHeHBibVV1YkdWdVozUm9JQzBnYmlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VXbGxiR1FxSUhSb2FYTXVjSFZ6YUU1bGQyeHBibVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZVdsbGJHUXFJSFJvYVhNdWNHRnljMlZDYkc5amExTmpZV3hoY2lncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdlV2xsYkdRcUlIUm9hWE11Y0dGeWMyVlFiR0ZwYmxOallXeGhjaWdwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJQ3B3WVhKelpVWnNiM2REYjJ4c1pXTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnYm13c0lITndPMXh1SUNBZ0lDQWdJQ0JzWlhRZ2FXNWtaVzUwSUQwZ0xURTdYRzRnSUNBZ0lDQWdJR1J2SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVzSUQwZ2VXbGxiR1FxSUhSb2FYTXVjSFZ6YUU1bGQyeHBibVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodWJDQStJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemNDQTlJSGxwWld4a0tpQjBhR2x6TG5CMWMyaFRjR0ZqWlhNb1ptRnNjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhVzVrWlc1MFZtRnNkV1VnUFNCcGJtUmxiblFnUFNCemNEdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITndJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lITndJQ3M5SUhscFpXeGtLaUIwYUdsekxuQjFjMmhUY0dGalpYTW9kSEoxWlNrN1hHNGdJQ0FnSUNBZ0lIMGdkMmhwYkdVZ0tHNXNJQ3NnYzNBZ1BpQXdLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdiR2x1WlNBOUlIUm9hWE11WjJWMFRHbHVaU2dwTzF4dUlDQWdJQ0FnSUNCcFppQW9iR2x1WlNBOVBUMGdiblZzYkNsY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFNWxlSFFvSjJac2IzY25LVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDaHBibVJsYm5RZ0lUMDlJQzB4SUNZbUlHbHVaR1Z1ZENBOElIUm9hWE11YVc1a1pXNTBUbVY0ZENBbUppQnNhVzVsV3pCZElDRTlQU0FuSXljcElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBb2FXNWtaVzUwSUQwOVBTQXdJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS0d4cGJtVXVjM1JoY25SelYybDBhQ2duTFMwdEp5a2dmSHdnYkdsdVpTNXpkR0Z5ZEhOWGFYUm9LQ2N1TGk0bktTa2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYzBWdGNIUjVLR3hwYm1WYk0xMHBLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnUVd4c2IzZHBibWNnWm05eUlIUm9aU0IwWlhKdGFXNWhiQ0JkSUc5eUlIMGdZWFFnZEdobElITmhiV1VnS0hKaGRHaGxjaUIwYUdGdUlHZHlaV0YwWlhJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCcGJtUmxiblFnYkdWMlpXd2dZWE1nZEdobElHbHVhWFJwWVd3Z1d5QnZjaUI3SUdseklIUmxZMmh1YVdOaGJHeDVJR2x1ZG1Gc2FXUXNJR0oxZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnWm1GcGJHbHVaeUJvWlhKbElIZHZkV3hrSUdKbElITjFjbkJ5YVhOcGJtY2dkRzhnZFhObGNuTXVYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JoZEVac2IzZEZibVJOWVhKclpYSWdQU0JwYm1SbGJuUWdQVDA5SUhSb2FYTXVhVzVrWlc1MFRtVjRkQ0F0SURFZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1ac2IzZE1aWFpsYkNBOVBUMGdNU0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNoc2FXNWxXekJkSUQwOVBTQW5YU2NnZkh3Z2JHbHVaVnN3WFNBOVBUMGdKMzBuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaFlYUkdiRzkzUlc1a1RXRnlhMlZ5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdkR2hwY3lCcGN5QmhiaUJsY25KdmNseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11Wm14dmQweGxkbVZzSUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNCR1RFOVhYMFZPUkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZVdsbGJHUXFJSFJvYVhNdWNHRnljMlZNYVc1bFUzUmhjblFvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCc1pYUWdiaUE5SURBN1hHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNoc2FXNWxXMjVkSUQwOVBTQW5MQ2NwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzRnS3owZ2VXbGxiR1FxSUhSb2FYTXVjSFZ6YUVOdmRXNTBLREVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiaUFyUFNCNWFXVnNaQ29nZEdocGN5NXdkWE5vVTNCaFkyVnpLSFJ5ZFdVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NW1iRzkzUzJWNUlEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdiaUFyUFNCNWFXVnNaQ29nZEdocGN5NXdkWE5vU1c1a2FXTmhkRzl5Y3lncE8xeHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tHeHBibVZiYmwwcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdkVzVrWldacGJtVmtPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5abXh2ZHljN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDY2pKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1d2RYTm9RMjkxYm5Rb2JHbHVaUzVzWlc1bmRHZ2dMU0J1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSjJac2IzY25PMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuZXljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGJKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1d2RYTm9RMjkxYm5Rb01TazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1bWJHOTNTMlY1SUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NW1iRzkzVEdWMlpXd2dLejBnTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSjJac2IzY25PMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuZlNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGRKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1d2RYTm9RMjkxYm5Rb01TazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1bWJHOTNTMlY1SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtWnNiM2RNWlhabGJDQXRQU0F4TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtWnNiM2RNWlhabGJDQS9JQ2RtYkc5M0p5QTZJQ2RrYjJNbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5LaWM2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWNIVnphRlZ1ZEdsc0tHbHpUbTkwUVc1amFHOXlRMmhoY2lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNkbWJHOTNKenRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjF3aUp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0luWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVtYkc5M1MyVjVJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2VXbGxiR1FxSUhSb2FYTXVjR0Z5YzJWUmRXOTBaV1JUWTJGc1lYSW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSnpvbk9pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JtVjRkQ0E5SUhSb2FYTXVZMmhoY2tGMEtERXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbVpzYjNkTFpYa2dmSHdnYVhORmJYQjBlU2h1WlhoMEtTQjhmQ0J1WlhoMElEMDlQU0FuTENjcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NW1iRzkzUzJWNUlEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGxwWld4a0tpQjBhR2x6TG5CMWMyaERiM1Z1ZENneEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWNIVnphRk53WVdObGN5aDBjblZsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZG1iRzkzSnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJtWVd4c2RHaHliM1ZuYUZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1ac2IzZExaWGtnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdlV2xsYkdRcUlIUm9hWE11Y0dGeWMyVlFiR0ZwYmxOallXeGhjaWdwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJQ3B3WVhKelpWRjFiM1JsWkZOallXeGhjaWdwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY1hWdmRHVWdQU0IwYUdsekxtTm9ZWEpCZENnd0tUdGNiaUFnSUNBZ0lDQWdiR1YwSUdWdVpDQTlJSFJvYVhNdVluVm1abVZ5TG1sdVpHVjRUMllvY1hWdmRHVXNJSFJvYVhNdWNHOXpJQ3NnTVNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h4ZFc5MFpTQTlQVDBnWENJblhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIZG9hV3hsSUNobGJtUWdJVDA5SUMweElDWW1JSFJvYVhNdVluVm1abVZ5VzJWdVpDQXJJREZkSUQwOVBTQmNJaWRjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJtUWdQU0IwYUdsekxtSjFabVpsY2k1cGJtUmxlRTltS0Z3aUoxd2lMQ0JsYm1RZ0t5QXlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJR1J2ZFdKc1pTMXhkVzkwWlZ4dUlDQWdJQ0FnSUNBZ0lDQWdkMmhwYkdVZ0tHVnVaQ0FoUFQwZ0xURXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2JpQTlJREE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZDJocGJHVWdLSFJvYVhNdVluVm1abVZ5VzJWdVpDQXRJREVnTFNCdVhTQTlQVDBnSjF4Y1hGd25LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdUlDczlJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHNGdKU0F5SUQwOVBTQXdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYm1RZ1BTQjBhR2x6TG1KMVptWmxjaTVwYm1SbGVFOW1LQ2RjSWljc0lHVnVaQ0FySURFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZJRTl1YkhrZ2JHOXZhMmx1WnlCbWIzSWdibVYzYkdsdVpYTWdkMmwwYUdsdUlIUm9aU0J4ZFc5MFpYTmNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NXSWdQU0IwYUdsekxtSjFabVpsY2k1emRXSnpkSEpwYm1jb01Dd2daVzVrS1R0Y2JpQWdJQ0FnSUNBZ2JHVjBJRzVzSUQwZ2NXSXVhVzVrWlhoUFppZ25YRnh1Snl3Z2RHaHBjeTV3YjNNcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvYm13Z0lUMDlJQzB4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IzYUdsc1pTQW9ibXdnSVQwOUlDMHhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdZM01nUFNCMGFHbHpMbU52Ym5ScGJuVmxVMk5oYkdGeUtHNXNJQ3NnTVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR056SUQwOVBTQXRNU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm13Z1BTQnhZaTVwYm1SbGVFOW1LQ2RjWEc0bkxDQmpjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ibXdnSVQwOUlDMHhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2RHaHBjeUJwY3lCaGJpQmxjbkp2Y2lCallYVnpaV1FnWW5rZ1lXNGdkVzVsZUhCbFkzUmxaQ0IxYm1sdVpHVnVkRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Z1WkNBOUlHNXNJQzBnS0hGaVcyNXNJQzBnTVYwZ1BUMDlJQ2RjWEhJbklEOGdNaUE2SURFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2hsYm1RZ1BUMDlJQzB4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lYUm9hWE11WVhSRmJtUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YzJWMFRtVjRkQ2duY1hWdmRHVmtMWE5qWVd4aGNpY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pXNWtJRDBnZEdocGN5NWlkV1ptWlhJdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIbHBaV3hrS2lCMGFHbHpMbkIxYzJoVWIwbHVaR1Y0S0dWdVpDQXJJREVzSUdaaGJITmxLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVpteHZkMHhsZG1Wc0lEOGdKMlpzYjNjbklEb2dKMlJ2WXljN1hHNGdJQ0FnZlZ4dUlDQWdJQ3B3WVhKelpVSnNiMk5yVTJOaGJHRnlTR1ZoWkdWeUtDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtSnNiMk5yVTJOaGJHRnlTVzVrWlc1MElEMGdMVEU3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZbXh2WTJ0VFkyRnNZWEpMWldWd0lEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JwSUQwZ2RHaHBjeTV3YjNNN1hHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNoMGNuVmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCamFDQTlJSFJvYVhNdVluVm1abVZ5V3lzcmFWMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZMmdnUFQwOUlDY3JKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtSnNiMk5yVTJOaGJHRnlTMlZsY0NBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaGphQ0ErSUNjd0p5QW1KaUJqYUNBOFBTQW5PU2NwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWliRzlqYTFOallXeGhja2x1WkdWdWRDQTlJRTUxYldKbGNpaGphQ2tnTFNBeE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnBaaUFvWTJnZ0lUMDlJQ2N0SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZVdsbGJHUXFJSFJvYVhNdWNIVnphRlZ1ZEdsc0tHTm9JRDArSUdselJXMXdkSGtvWTJncElIeDhJR05vSUQwOVBTQW5JeWNwTzF4dUlDQWdJSDFjYmlBZ0lDQXFjR0Z5YzJWQ2JHOWphMU5qWVd4aGNpZ3BJSHRjYmlBZ0lDQWdJQ0FnYkdWMElHNXNJRDBnZEdocGN5NXdiM01nTFNBeE95QXZMeUJ0WVhrZ1ltVWdMVEVnYVdZZ2RHaHBjeTV3YjNNZ1BUMDlJREJjYmlBZ0lDQWdJQ0FnYkdWMElHbHVaR1Z1ZENBOUlEQTdYRzRnSUNBZ0lDQWdJR3hsZENCamFEdGNiaUFnSUNBZ0lDQWdiRzl2Y0RvZ1ptOXlJQ2hzWlhRZ2FTQTlJSFJvYVhNdWNHOXpPeUFvWTJnZ1BTQjBhR2x6TG1KMVptWmxjbHRwWFNrN0lDc3JhU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjM2RwZEdOb0lDaGphQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKeUFuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBibVJsYm5RZ0t6MGdNVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5YRnh1SnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdibXdnUFNCcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm1SbGJuUWdQU0F3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RjWEhJbk9pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzVsZUhRZ1BTQjBhR2x6TG1KMVptWmxjbHRwSUNzZ01WMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDZ2hibVY0ZENBbUppQWhkR2hwY3k1aGRFVnVaQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5ObGRFNWxlSFFvSjJKc2IyTnJMWE5qWVd4aGNpY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ibVY0ZENBOVBUMGdKMXhjYmljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUM4dklHWmhiR3gwYUhKdmRXZG9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXc2diRzl2Y0R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppQW9JV05vSUNZbUlDRjBhR2x6TG1GMFJXNWtLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjMlYwVG1WNGRDZ25ZbXh2WTJzdGMyTmhiR0Z5SnlrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwYm1SbGJuUWdQajBnZEdocGN5NXBibVJsYm5ST1pYaDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NWliRzlqYTFOallXeGhja2x1WkdWdWRDQTlQVDBnTFRFcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVwYm1SbGJuUk9aWGgwSUQwZ2FXNWtaVzUwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVwYm1SbGJuUk9aWGgwSUQxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1aWJHOWphMU5qWVd4aGNrbHVaR1Z1ZENBcklDaDBhR2x6TG1sdVpHVnVkRTVsZUhRZ1BUMDlJREFnUHlBeElEb2dkR2hwY3k1cGJtUmxiblJPWlhoMEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR1J2SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqY3lBOUlIUm9hWE11WTI5dWRHbHVkV1ZUWTJGc1lYSW9ibXdnS3lBeEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWTNNZ1BUMDlJQzB4S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdWJDQTlJSFJvYVhNdVluVm1abVZ5TG1sdVpHVjRUMllvSjF4Y2JpY3NJR056S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnZDJocGJHVWdLRzVzSUNFOVBTQXRNU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm13Z1BUMDlJQzB4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0YwYUdsekxtRjBSVzVrS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV6WlhST1pYaDBLQ2RpYkc5amF5MXpZMkZzWVhJbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnViQ0E5SUhSb2FYTXVZblZtWm1WeUxteGxibWQwYUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBdkx5QlVjbUZwYkdsdVp5QnBibk4xWm1acFkybGxiblJzZVNCcGJtUmxiblJsWkNCMFlXSnpJR0Z5WlNCcGJuWmhiR2xrTGx4dUlDQWdJQ0FnSUNBdkx5QlVieUJqWVhSamFDQjBhR0YwSUdSMWNtbHVaeUJ3WVhKemFXNW5MQ0IzWlNCcGJtTnNkV1JsSUhSb1pXMGdhVzRnZEdobElHSnNiMk5ySUhOallXeGhjaUIyWVd4MVpTNWNiaUFnSUNBZ0lDQWdiR1YwSUdrZ1BTQnViQ0FySURFN1hHNGdJQ0FnSUNBZ0lHTm9JRDBnZEdocGN5NWlkV1ptWlhKYmFWMDdYRzRnSUNBZ0lDQWdJSGRvYVd4bElDaGphQ0E5UFQwZ0p5QW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyZ2dQU0IwYUdsekxtSjFabVpsY2xzcksybGRPMXh1SUNBZ0lDQWdJQ0JwWmlBb1kyZ2dQVDA5SUNkY1hIUW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjNhR2xzWlNBb1kyZ2dQVDA5SUNkY1hIUW5JSHg4SUdOb0lEMDlQU0FuSUNjZ2ZId2dZMmdnUFQwOUlDZGNYSEluSUh4OElHTm9JRDA5UFNBblhGeHVKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYUNBOUlIUm9hWE11WW5WbVptVnlXeXNyYVYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J1YkNBOUlHa2dMU0F4TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tDRjBhR2x6TG1Kc2IyTnJVMk5oYkdGeVMyVmxjQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdaRzhnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQnBJRDBnYm13Z0xTQXhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCamFDQTlJSFJvYVhNdVluVm1abVZ5VzJsZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYUNBOVBUMGdKMXhjY2ljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05vSUQwZ2RHaHBjeTVpZFdabVpYSmJMUzFwWFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JzWVhOMFEyaGhjaUE5SUdrN0lDOHZJRVJ5YjNBZ2RHaGxJR3hwYm1VZ2FXWWdiR0Z6ZENCamFHRnlJRzV2ZENCdGIzSmxJR2x1WkdWdWRHVmtYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkMmhwYkdVZ0tHTm9JRDA5UFNBbklDY3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOb0lEMGdkR2hwY3k1aWRXWm1aWEpiTFMxcFhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWTJnZ1BUMDlJQ2RjWEc0bklDWW1JR2tnUGowZ2RHaHBjeTV3YjNNZ0ppWWdhU0FySURFZ0t5QnBibVJsYm5RZ1BpQnNZWE4wUTJoaGNpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm13Z1BTQnBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUhkb2FXeGxJQ2gwY25WbEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I1YVdWc1pDQlRRMEZNUVZJN1hHNGdJQ0FnSUNBZ0lIbHBaV3hrS2lCMGFHbHpMbkIxYzJoVWIwbHVaR1Y0S0c1c0lDc2dNU3dnZEhKMVpTazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjVhV1ZzWkNvZ2RHaHBjeTV3WVhKelpVeHBibVZUZEdGeWRDZ3BPMXh1SUNBZ0lIMWNiaUFnSUNBcWNHRnljMlZRYkdGcGJsTmpZV3hoY2lncElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FXNUdiRzkzSUQwZ2RHaHBjeTVtYkc5M1RHVjJaV3dnUGlBd08xeHVJQ0FnSUNBZ0lDQnNaWFFnWlc1a0lEMGdkR2hwY3k1d2IzTWdMU0F4TzF4dUlDQWdJQ0FnSUNCc1pYUWdhU0E5SUhSb2FYTXVjRzl6SUMwZ01UdGNiaUFnSUNBZ0lDQWdiR1YwSUdOb08xeHVJQ0FnSUNBZ0lDQjNhR2xzWlNBb0tHTm9JRDBnZEdocGN5NWlkV1ptWlhKYkt5dHBYU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamFDQTlQVDBnSnpvbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JtVjRkQ0E5SUhSb2FYTXVZblZtWm1WeVcya2dLeUF4WFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hWE5GYlhCMGVTaHVaWGgwS1NCOGZDQW9hVzVHYkc5M0lDWW1JR1pzYjNkSmJtUnBZMkYwYjNKRGFHRnljeTVvWVhNb2JtVjRkQ2twS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJtUWdQU0JwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2FYTkZiWEIwZVNoamFDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2JtVjRkQ0E5SUhSb2FYTXVZblZtWm1WeVcya2dLeUF4WFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZMmdnUFQwOUlDZGNYSEluS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodVpYaDBJRDA5UFNBblhGeHVKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVNBclBTQXhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMmdnUFNBblhGeHVKenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhRZ1BTQjBhR2x6TG1KMVptWmxjbHRwSUNzZ01WMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlc1a0lEMGdhVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHNWxlSFFnUFQwOUlDY2pKeUI4ZkNBb2FXNUdiRzkzSUNZbUlHWnNiM2RKYm1ScFkyRjBiM0pEYUdGeWN5NW9ZWE1vYm1WNGRDa3BLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kyZ2dQVDA5SUNkY1hHNG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOeklEMGdkR2hwY3k1amIyNTBhVzUxWlZOallXeGhjaWhwSUNzZ01TazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpjeUE5UFQwZ0xURXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhU0E5SUUxaGRHZ3ViV0Y0S0drc0lHTnpJQzBnTWlrN0lDOHZJSFJ2SUdGa2RtRnVZMlVzSUdKMWRDQnpkR2xzYkNCaFkyTnZkVzUwSUdadmNpQW5JQ01uWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbHVSbXh2ZHlBbUppQm1iRzkzU1c1a2FXTmhkRzl5UTJoaGNuTXVhR0Z6S0dOb0tTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaVzVrSUQwZ2FUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnBaaUFvSVdOb0lDWW1JQ0YwYUdsekxtRjBSVzVrS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YzJWMFRtVjRkQ2duY0d4aGFXNHRjMk5oYkdGeUp5azdYRzRnSUNBZ0lDQWdJSGxwWld4a0lGTkRRVXhCVWp0Y2JpQWdJQ0FnSUNBZ2VXbGxiR1FxSUhSb2FYTXVjSFZ6YUZSdlNXNWtaWGdvWlc1a0lDc2dNU3dnZEhKMVpTazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnBia1pzYjNjZ1B5QW5abXh2ZHljZ09pQW5aRzlqSnp0Y2JpQWdJQ0I5WEc0Z0lDQWdLbkIxYzJoRGIzVnVkQ2h1S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h1SUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2VXbGxiR1FnZEdocGN5NWlkV1ptWlhJdWMzVmljM1J5S0hSb2FYTXVjRzl6TENCdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjRzl6SUNzOUlHNDdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYmp0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z01EdGNiaUFnSUNCOVhHNGdJQ0FnS25CMWMyaFViMGx1WkdWNEtHa3NJR0ZzYkc5M1JXMXdkSGtwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY3lBOUlIUm9hWE11WW5WbVptVnlMbk5zYVdObEtIUm9hWE11Y0c5ekxDQnBLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tITXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIbHBaV3hrSUhNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuQnZjeUFyUFNCekxteGxibWQwYUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hoYkd4dmQwVnRjSFI1S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlV2xsYkdRZ0p5YzdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQXdPMXh1SUNBZ0lIMWNiaUFnSUNBcWNIVnphRWx1WkdsallYUnZjbk1vS1NCN1hHNGdJQ0FnSUNBZ0lITjNhWFJqYUNBb2RHaHBjeTVqYUdGeVFYUW9NQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0p5RW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW9LSGxwWld4a0tpQjBhR2x6TG5CMWMyaFVZV2NvS1NrZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FvZVdsbGJHUXFJSFJvYVhNdWNIVnphRk53WVdObGN5aDBjblZsS1NrZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FvZVdsbGJHUXFJSFJvYVhNdWNIVnphRWx1WkdsallYUnZjbk1vS1NrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5KaWM2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2dvZVdsbGJHUXFJSFJvYVhNdWNIVnphRlZ1ZEdsc0tHbHpUbTkwUVc1amFHOXlRMmhoY2lrcElDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS0hscFpXeGtLaUIwYUdsekxuQjFjMmhUY0dGalpYTW9kSEoxWlNrcElDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS0hscFpXeGtLaUIwYUdsekxuQjFjMmhKYm1ScFkyRjBiM0p6S0NrcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKeTBuT2lBdkx5QjBhR2x6SUdseklHRnVJR1Z5Y205eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDYy9Kem9nTHk4Z2RHaHBjeUJwY3lCaGJpQmxjbkp2Y2lCdmRYUnphV1JsSUdac2IzY2dZMjlzYkdWamRHbHZibk5jYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSnpvbk9pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2FXNUdiRzkzSUQwZ2RHaHBjeTVtYkc5M1RHVjJaV3dnUGlBd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOb01TQTlJSFJvYVhNdVkyaGhja0YwS0RFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwYzBWdGNIUjVLR05vTVNrZ2ZId2dLR2x1Um14dmR5QW1KaUJtYkc5M1NXNWthV05oZEc5eVEyaGhjbk11YUdGektHTm9NU2twS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaGFXNUdiRzkzS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXBibVJsYm5ST1pYaDBJRDBnZEdocGN5NXBibVJsYm5SV1lXeDFaU0FySURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLSFJvYVhNdVpteHZkMHRsZVNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVabXh2ZDB0bGVTQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdLQ2g1YVdWc1pDb2dkR2hwY3k1d2RYTm9RMjkxYm5Rb01Ta3BJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2g1YVdWc1pDb2dkR2hwY3k1d2RYTm9VM0JoWTJWektIUnlkV1VwS1NBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBb2VXbGxiR1FxSUhSb2FYTXVjSFZ6YUVsdVpHbGpZWFJ2Y25Nb0tTa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdNRHRjYmlBZ0lDQjlYRzRnSUNBZ0tuQjFjMmhVWVdjb0tTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbU5vWVhKQmRDZ3hLU0E5UFQwZ0p6d25LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYVNBOUlIUm9hWE11Y0c5eklDc2dNanRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JqYUNBOUlIUm9hWE11WW5WbVptVnlXMmxkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkMmhwYkdVZ0tDRnBjMFZ0Y0hSNUtHTm9LU0FtSmlCamFDQWhQVDBnSno0bktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTm9JRDBnZEdocGN5NWlkV1ptWlhKYkt5dHBYVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCNWFXVnNaQ29nZEdocGN5NXdkWE5vVkc5SmJtUmxlQ2hqYUNBOVBUMGdKejRuSUQ4Z2FTQXJJREVnT2lCcExDQm1ZV3h6WlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2FTQTlJSFJvYVhNdWNHOXpJQ3NnTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCamFDQTlJSFJvYVhNdVluVm1abVZ5VzJsZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZDJocGJHVWdLR05vS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFJoWjBOb1lYSnpMbWhoY3loamFDa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOb0lEMGdkR2hwY3k1aWRXWm1aWEpiS3l0cFhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaGphQ0E5UFQwZ0p5VW5JQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHaGxlRVJwWjJsMGN5NW9ZWE1vZEdocGN5NWlkV1ptWlhKYmFTQXJJREZkS1NBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JvWlhoRWFXZHBkSE11YUdGektIUm9hWE11WW5WbVptVnlXMmtnS3lBeVhTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyZ2dQU0IwYUdsekxtSjFabVpsY2xzb2FTQXJQU0F6S1YwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZVdsbGJHUXFJSFJvYVhNdWNIVnphRlJ2U1c1a1pYZ29hU3dnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lDcHdkWE5vVG1WM2JHbHVaU2dwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJnZ1BTQjBhR2x6TG1KMVptWmxjbHQwYUdsekxuQnZjMTA3WEc0Z0lDQWdJQ0FnSUdsbUlDaGphQ0E5UFQwZ0oxeGNiaWNwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2VXbGxiR1FxSUhSb2FYTXVjSFZ6YUVOdmRXNTBLREVwTzF4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoamFDQTlQVDBnSjF4Y2NpY2dKaVlnZEdocGN5NWphR0Z5UVhRb01Ta2dQVDA5SUNkY1hHNG5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhscFpXeGtLaUIwYUdsekxuQjFjMmhEYjNWdWRDZ3lLVHRjYmlBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJREE3WEc0Z0lDQWdmVnh1SUNBZ0lDcHdkWE5vVTNCaFkyVnpLR0ZzYkc5M1ZHRmljeWtnZTF4dUlDQWdJQ0FnSUNCc1pYUWdhU0E5SUhSb2FYTXVjRzl6SUMwZ01UdGNiaUFnSUNBZ0lDQWdiR1YwSUdOb08xeHVJQ0FnSUNBZ0lDQmtieUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmphQ0E5SUhSb2FYTXVZblZtWm1WeVd5c3JhVjA3WEc0Z0lDQWdJQ0FnSUgwZ2QyaHBiR1VnS0dOb0lEMDlQU0FuSUNjZ2ZId2dLR0ZzYkc5M1ZHRmljeUFtSmlCamFDQTlQVDBnSjF4Y2RDY3BLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdiaUE5SUdrZ0xTQjBhR2x6TG5CdmN6dGNiaUFnSUNBZ0lDQWdhV1lnS0c0Z1BpQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNCMGFHbHpMbUoxWm1abGNpNXpkV0p6ZEhJb2RHaHBjeTV3YjNNc0lHNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV3YjNNZ1BTQnBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ1TzF4dUlDQWdJSDFjYmlBZ0lDQXFjSFZ6YUZWdWRHbHNLSFJsYzNRcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUdrZ1BTQjBhR2x6TG5CdmN6dGNiaUFnSUNBZ0lDQWdiR1YwSUdOb0lEMGdkR2hwY3k1aWRXWm1aWEpiYVYwN1hHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNnaGRHVnpkQ2hqYUNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYUNBOUlIUm9hWE11WW5WbVptVnlXeXNyYVYwN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCNWFXVnNaQ29nZEdocGN5NXdkWE5vVkc5SmJtUmxlQ2hwTENCbVlXeHpaU2s3WEc0Z0lDQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2V5Qk1aWGhsY2lCOU8xeHVJaXdnSWk4cUtseHVJQ29nVkhKaFkydHpJRzVsZDJ4cGJtVnpJR1IxY21sdVp5QndZWEp6YVc1bklHbHVJRzl5WkdWeUlIUnZJSEJ5YjNacFpHVWdZVzRnWldabWFXTnBaVzUwSUVGUVNTQm1iM0pjYmlBcUlHUmxkR1Z5YldsdWFXNW5JSFJvWlNCdmJtVXRhVzVrWlhobFpDQmdleUJzYVc1bExDQmpiMndnZldBZ2NHOXphWFJwYjI0Z1ptOXlJR0Z1ZVNCdlptWnpaWFJjYmlBcUlIZHBkR2hwYmlCMGFHVWdhVzV3ZFhRdVhHNGdLaTljYm1Oc1lYTnpJRXhwYm1WRGIzVnVkR1Z5SUh0Y2JpQWdJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1c2FXNWxVM1JoY25SeklEMGdXMTA3WEc0Z0lDQWdJQ0FnSUM4cUtseHVJQ0FnSUNBZ0lDQWdLaUJUYUc5MWJHUWdZbVVnWTJGc2JHVmtJR2x1SUdGelkyVnVaR2x1WnlCdmNtUmxjaTRnVDNSb1pYSjNhWE5sTENCallXeHNYRzRnSUNBZ0lDQWdJQ0FxSUdCc2FXNWxRMjkxYm5SbGNpNXNhVzVsVTNSaGNuUnpMbk52Y25Rb0tXQWdZbVZtYjNKbElHTmhiR3hwYm1jZ1lHeHBibVZRYjNNb0tXQXVYRzRnSUNBZ0lDQWdJQ0FxTDF4dUlDQWdJQ0FnSUNCMGFHbHpMbUZrWkU1bGQweHBibVVnUFNBb2IyWm1jMlYwS1NBOVBpQjBhR2x6TG14cGJtVlRkR0Z5ZEhNdWNIVnphQ2h2Wm1aelpYUXBPMXh1SUNBZ0lDQWdJQ0F2S2lwY2JpQWdJQ0FnSUNBZ0lDb2dVR1Z5Wm05eWJYTWdZU0JpYVc1aGNua2djMlZoY21Ob0lHRnVaQ0J5WlhSMWNtNXpJSFJvWlNBeExXbHVaR1Y0WldRZ2V5QnNhVzVsTENCamIyd2dmVnh1SUNBZ0lDQWdJQ0FnS2lCd2IzTnBkR2x2YmlCdlppQmdiMlptYzJWMFlDNGdTV1lnWUd4cGJtVWdQVDA5SURCZ0xDQmdZV1JrVG1WM1RHbHVaV0FnYUdGeklHNWxkbVZ5SUdKbFpXNWNiaUFnSUNBZ0lDQWdJQ29nWTJGc2JHVmtJRzl5SUdCdlptWnpaWFJnSUdseklHSmxabTl5WlNCMGFHVWdabWx5YzNRZ2EyNXZkMjRnYm1WM2JHbHVaUzVjYmlBZ0lDQWdJQ0FnSUNvdlhHNGdJQ0FnSUNBZ0lIUm9hWE11YkdsdVpWQnZjeUE5SUNodlptWnpaWFFwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnNiM2NnUFNBd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHaHBaMmdnUFNCMGFHbHpMbXhwYm1WVGRHRnlkSE11YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0FnSUNBZ2QyaHBiR1VnS0d4dmR5QThJR2hwWjJncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdGFXUWdQU0FvYkc5M0lDc2dhR2xuYUNrZ1BqNGdNVHNnTHk4Z1RXRjBhQzVtYkc5dmNpZ29iRzkzSUNzZ2FHbG5hQ2tnTHlBeUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxteHBibVZUZEdGeWRITmJiV2xrWFNBOElHOW1abk5sZENsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzkzSUQwZ2JXbGtJQ3NnTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdocFoyZ2dQU0J0YVdRN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXNhVzVsVTNSaGNuUnpXMnh2ZDEwZ1BUMDlJRzltWm5ObGRDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2V5QnNhVzVsT2lCc2IzY2dLeUF4TENCamIydzZJREVnZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoc2IzY2dQVDA5SURBcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhzZ2JHbHVaVG9nTUN3Z1kyOXNPaUJ2Wm1aelpYUWdmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOMFlYSjBJRDBnZEdocGN5NXNhVzVsVTNSaGNuUnpXMnh2ZHlBdElERmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhzZ2JHbHVaVG9nYkc5M0xDQmpiMnc2SUc5bVpuTmxkQ0F0SUhOMFlYSjBJQ3NnTVNCOU8xeHVJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lIMWNibjFjYmx4dVpYaHdiM0owSUhzZ1RHbHVaVU52ZFc1MFpYSWdmVHRjYmlJc0lDSnBiWEJ2Y25RZ2V5QjBiMnRsYmxSNWNHVWdmU0JtY205dElDY3VMMk56ZEM1cWN5YzdYRzVwYlhCdmNuUWdleUJNWlhobGNpQjlJR1p5YjIwZ0p5NHZiR1Y0WlhJdWFuTW5PMXh1WEc1bWRXNWpkR2x2YmlCcGJtTnNkV1JsYzFSdmEyVnVLR3hwYzNRc0lIUjVjR1VwSUh0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUd4cGMzUXViR1Z1WjNSb095QXJLMmtwWEc0Z0lDQWdJQ0FnSUdsbUlDaHNhWE4wVzJsZExuUjVjR1VnUFQwOUlIUjVjR1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc1OVhHNW1kVzVqZEdsdmJpQm1hVzVrVG05dVJXMXdkSGxKYm1SbGVDaHNhWE4wS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCc2FYTjBMbXhsYm1kMGFEc2dLeXRwS1NCN1hHNGdJQ0FnSUNBZ0lITjNhWFJqYUNBb2JHbHpkRnRwWFM1MGVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkemNHRmpaU2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkamIyMXRaVzUwSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oyNWxkMnhwYm1Vbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2FUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnTFRFN1hHNTlYRzVtZFc1amRHbHZiaUJwYzBac2IzZFViMnRsYmloMGIydGxiaWtnZTF4dUlDQWdJSE4zYVhSamFDQW9kRzlyWlc0L0xuUjVjR1VwSUh0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0FuWVd4cFlYTW5PbHh1SUNBZ0lDQWdJQ0JqWVhObElDZHpZMkZzWVhJbk9seHVJQ0FnSUNBZ0lDQmpZWE5sSUNkemFXNW5iR1V0Y1hWdmRHVmtMWE5qWVd4aGNpYzZYRzRnSUNBZ0lDQWdJR05oYzJVZ0oyUnZkV0pzWlMxeGRXOTBaV1F0YzJOaGJHRnlKenBjYmlBZ0lDQWdJQ0FnWTJGelpTQW5abXh2ZHkxamIyeHNaV04wYVc5dUp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JuMWNibVoxYm1OMGFXOXVJR2RsZEZCeVpYWlFjbTl3Y3lod1lYSmxiblFwSUh0Y2JpQWdJQ0J6ZDJsMFkyZ2dLSEJoY21WdWRDNTBlWEJsS1NCN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSjJSdlkzVnRaVzUwSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQndZWEpsYm5RdWMzUmhjblE3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKMkpzYjJOckxXMWhjQ2M2SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHbDBJRDBnY0dGeVpXNTBMbWwwWlcxelczQmhjbVZ1ZEM1cGRHVnRjeTVzWlc1bmRHZ2dMU0F4WFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnBkQzV6WlhBZ1B6OGdhWFF1YzNSaGNuUTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWTJGelpTQW5ZbXh2WTJzdGMyVnhKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1lYSmxiblF1YVhSbGJYTmJjR0Z5Wlc1MExtbDBaVzF6TG14bGJtZDBhQ0F0SURGZExuTjBZWEowTzF4dUlDQWdJQ0FnSUNBdktpQnBjM1JoYm1KMWJDQnBaMjV2Y21VZ2JtVjRkQ0J6YUc5MWJHUWdibTkwSUdoaGNIQmxiaUFxTDF4dUlDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlGdGRPMXh1SUNBZ0lIMWNibjFjYmk4cUtpQk9iM1JsT2lCTllYa2diVzlrYVdaNUlHbHVjSFYwSUdGeWNtRjVJQ292WEc1bWRXNWpkR2x2YmlCblpYUkdhWEp6ZEV0bGVWTjBZWEowVUhKdmNITW9jSEpsZGlrZ2UxeHVJQ0FnSUdsbUlDaHdjbVYyTG14bGJtZDBhQ0E5UFQwZ01DbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlGdGRPMXh1SUNBZ0lHeGxkQ0JwSUQwZ2NISmxkaTVzWlc1bmRHZzdYRzRnSUNBZ2JHOXZjRG9nZDJocGJHVWdLQzB0YVNBK1BTQXdLU0I3WEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvY0hKbGRsdHBYUzUwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RrYjJNdGMzUmhjblFuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpYaHdiR2xqYVhRdGEyVjVMV2x1WkNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHRZWEF0ZG1Gc2RXVXRhVzVrSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0ozTmxjUzFwZEdWdExXbHVaQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkdVpYZHNhVzVsSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhheUJzYjI5d08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhkb2FXeGxJQ2h3Y21WMld5c3JhVjAvTG5SNWNHVWdQVDA5SUNkemNHRmpaU2NwSUh0Y2JpQWdJQ0FnSUNBZ0x5b2diRzl2Y0NBcUwxeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjSEpsZGk1emNHeHBZMlVvYVN3Z2NISmxkaTVzWlc1bmRHZ3BPMXh1ZlZ4dVpuVnVZM1JwYjI0Z1ptbDRSbXh2ZDFObGNVbDBaVzF6S0daaktTQjdYRzRnSUNBZ2FXWWdLR1pqTG5OMFlYSjBMblI1Y0dVZ1BUMDlJQ2RtYkc5M0xYTmxjUzF6ZEdGeWRDY3BJSHRjYmlBZ0lDQWdJQ0FnWm05eUlDaGpiMjV6ZENCcGRDQnZaaUJtWXk1cGRHVnRjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dsMExuTmxjQ0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNGcGRDNTJZV3gxWlNBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDRnBibU5zZFdSbGMxUnZhMlZ1S0dsMExuTjBZWEowTENBblpYaHdiR2xqYVhRdGEyVjVMV2x1WkNjcElDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJV2x1WTJ4MVpHVnpWRzlyWlc0b2FYUXVjMlZ3TENBbmJXRndMWFpoYkhWbExXbHVaQ2NwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2wwTG10bGVTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVhRdWRtRnNkV1VnUFNCcGRDNXJaWGs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdWc1pYUmxJR2wwTG10bGVUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVhOR2JHOTNWRzlyWlc0b2FYUXVkbUZzZFdVcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBkQzUyWVd4MVpTNWxibVFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JCY25KaGVTNXdjbTkwYjNSNWNHVXVjSFZ6YUM1aGNIQnNlU2hwZEM1MllXeDFaUzVsYm1Rc0lHbDBMbk5sY0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsMExuWmhiSFZsTG1WdVpDQTlJR2wwTG5ObGNEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWNIVnphQzVoY0hCc2VTaHBkQzV6ZEdGeWRDd2dhWFF1YzJWd0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtaV3hsZEdVZ2FYUXVjMlZ3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmVnh1ZlZ4dUx5b3FYRzRnS2lCQklGbEJUVXdnWTI5dVkzSmxkR1VnYzNsdWRHRjRJSFJ5WldVZ0tFTlRWQ2tnY0dGeWMyVnlYRzRnS2x4dUlDb2dZR0JnZEhOY2JpQXFJR052Ym5OMElITnlZem9nYzNSeWFXNW5JRDBnTGk0dVhHNGdLaUJtYjNJZ0tHTnZibk4wSUhSdmEyVnVJRzltSUc1bGR5QlFZWEp6WlhJb0tTNXdZWEp6WlNoemNtTXBLU0I3WEc0Z0tpQWdJQzh2SUhSdmEyVnVPaUJVYjJ0bGJseHVJQ29nZlZ4dUlDb2dZR0JnWEc0Z0tseHVJQ29nVkc4Z2RYTmxJSFJvWlNCd1lYSnpaWElnZDJsMGFDQmhJSFZ6WlhJdGNISnZkbWxrWldRZ2JHVjRaWEk2WEc0Z0tseHVJQ29nWUdCZ2RITmNiaUFxSUdaMWJtTjBhVzl1S2lCd1lYSnpaU2h6YjNWeVkyVTZJSE4wY21sdVp5d2diR1Y0WlhJNklFeGxlR1Z5S1NCN1hHNGdLaUFnSUdOdmJuTjBJSEJoY25ObGNpQTlJRzVsZHlCUVlYSnpaWElvS1Z4dUlDb2dJQ0JtYjNJZ0tHTnZibk4wSUd4bGVHVnRaU0J2WmlCc1pYaGxjaTVzWlhnb2MyOTFjbU5sS1NsY2JpQXFJQ0FnSUNCNWFXVnNaQ29nY0dGeWMyVnlMbTVsZUhRb2JHVjRaVzFsS1Z4dUlDb2dJQ0I1YVdWc1pDb2djR0Z5YzJWeUxtVnVaQ2dwWEc0Z0tpQjlYRzRnS2x4dUlDb2dZMjl1YzNRZ2MzSmpPaUJ6ZEhKcGJtY2dQU0F1TGk1Y2JpQXFJR052Ym5OMElHeGxlR1Z5SUQwZ2JtVjNJRXhsZUdWeUtDbGNiaUFxSUdadmNpQW9ZMjl1YzNRZ2RHOXJaVzRnYjJZZ2NHRnljMlVvYzNKakxDQnNaWGhsY2lrcElIdGNiaUFxSUNBZ0x5OGdkRzlyWlc0NklGUnZhMlZ1WEc0Z0tpQjlYRzRnS2lCZ1lHQmNiaUFxTDF4dVkyeGhjM01nVUdGeWMyVnlJSHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJBY0dGeVlXMGdiMjVPWlhkTWFXNWxJQzBnU1dZZ1pHVm1hVzVsWkN3Z1kyRnNiR1ZrSUhObGNHRnlZWFJsYkhrZ2QybDBhQ0IwYUdVZ2MzUmhjblFnY0c5emFYUnBiMjRnYjJaY2JpQWdJQ0FnS2lBZ0lHVmhZMmdnYm1WM0lHeHBibVVnS0dsdUlHQndZWEp6WlNncFlDd2dhVzVqYkhWa2FXNW5JSFJvWlNCemRHRnlkQ0J2WmlCcGJuQjFkQ2t1WEc0Z0lDQWdJQ292WEc0Z0lDQWdZMjl1YzNSeWRXTjBiM0lvYjI1T1pYZE1hVzVsS1NCN1hHNGdJQ0FnSUNBZ0lDOHFLaUJKWmlCMGNuVmxMQ0J6Y0dGalpTQmhibVFnYzJWeGRXVnVZMlVnYVc1a2FXTmhkRzl5Y3lCamIzVnVkQ0JoY3lCcGJtUmxiblJoZEdsdmJpQXFMMXh1SUNBZ0lDQWdJQ0IwYUdsekxtRjBUbVYzVEdsdVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDOHFLaUJKWmlCMGNuVmxMQ0J1WlhoMElIUnZhMlZ1SUdseklHRWdjMk5oYkdGeUlIWmhiSFZsSUNvdlhHNGdJQ0FnSUNBZ0lIUm9hWE11WVhSVFkyRnNZWElnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnTHlvcUlFTjFjbkpsYm5RZ2FXNWtaVzUwWVhScGIyNGdiR1YyWld3Z0tpOWNiaUFnSUNBZ0lDQWdkR2hwY3k1cGJtUmxiblFnUFNBd08xeHVJQ0FnSUNBZ0lDQXZLaW9nUTNWeWNtVnVkQ0J2Wm1aelpYUWdjMmx1WTJVZ2RHaGxJSE4wWVhKMElHOW1JSEJoY25OcGJtY2dLaTljYmlBZ0lDQWdJQ0FnZEdocGN5NXZabVp6WlhRZ1BTQXdPMXh1SUNBZ0lDQWdJQ0F2S2lvZ1QyNGdkR2hsSUhOaGJXVWdiR2x1WlNCM2FYUm9JR0VnWW14dlkyc2diV0Z3SUd0bGVTQXFMMXh1SUNBZ0lDQWdJQ0IwYUdsekxtOXVTMlY1VEdsdVpTQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQXZLaW9nVkc5d0lHbHVaR2xqWVhSbGN5QjBhR1VnYm05a1pTQjBhR0YwSjNNZ1kzVnljbVZ1ZEd4NUlHSmxhVzVuSUdKMWFXeDBJQ292WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjM1JoWTJzZ1BTQmJYVHRjYmlBZ0lDQWdJQ0FnTHlvcUlGUm9aU0J6YjNWeVkyVWdiMllnZEdobElHTjFjbkpsYm5RZ2RHOXJaVzRzSUhObGRDQnBiaUJ3WVhKelpTZ3BJQ292WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMjkxY21ObElEMGdKeWM3WEc0Z0lDQWdJQ0FnSUM4cUtpQlVhR1VnZEhsd1pTQnZaaUIwYUdVZ1kzVnljbVZ1ZENCMGIydGxiaXdnYzJWMElHbHVJSEJoY25ObEtDa2dLaTljYmlBZ0lDQWdJQ0FnZEdocGN5NTBlWEJsSUQwZ0p5YzdYRzRnSUNBZ0lDQWdJQzh2SUUxMWMzUWdZbVVnWkdWbWFXNWxaQ0JoWm5SbGNpQmdibVY0ZENncFlGeHVJQ0FnSUNBZ0lDQjBhR2x6TG14bGVHVnlJRDBnYm1WM0lFeGxlR1Z5S0NrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YjI1T1pYZE1hVzVsSUQwZ2IyNU9aWGRNYVc1bE8xeHVJQ0FnSUgxY2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCUVlYSnpaU0JnYzI5MWNtTmxZQ0JoY3lCaElGbEJUVXdnYzNSeVpXRnRMbHh1SUNBZ0lDQXFJRWxtSUdCcGJtTnZiWEJzWlhSbFlDd2dZU0J3WVhKMElHOW1JSFJvWlNCc1lYTjBJR3hwYm1VZ2JXRjVJR0psSUd4bFpuUWdZWE1nWVNCaWRXWm1aWElnWm05eUlIUm9aU0J1WlhoMElHTmhiR3d1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJGY25KdmNuTWdZWEpsSUc1dmRDQjBhSEp2ZDI0c0lHSjFkQ0I1YVdWc1pHVmtJR0Z6SUdCN0lIUjVjR1U2SUNkbGNuSnZjaWNzSUcxbGMzTmhaMlVnZldBZ2RHOXJaVzV6TGx4dUlDQWdJQ0FxWEc0Z0lDQWdJQ29nUUhKbGRIVnlibk1nUVNCblpXNWxjbUYwYjNJZ2IyWWdkRzlyWlc1eklISmxjSEpsYzJWdWRHbHVaeUJsWVdOb0lHUnBjbVZqZEdsMlpTd2daRzlqZFcxbGJuUXNJR0Z1WkNCdmRHaGxjaUJ6ZEhKMVkzUjFjbVV1WEc0Z0lDQWdJQ292WEc0Z0lDQWdLbkJoY25ObEtITnZkWEpqWlN3Z2FXNWpiMjF3YkdWMFpTQTlJR1poYkhObEtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbTl1VG1WM1RHbHVaU0FtSmlCMGFHbHpMbTltWm5ObGRDQTlQVDBnTUNsY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWIyNU9aWGRNYVc1bEtEQXBPMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUd4bGVHVnRaU0J2WmlCMGFHbHpMbXhsZUdWeUxteGxlQ2h6YjNWeVkyVXNJR2x1WTI5dGNHeGxkR1VwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlV2xsYkdRcUlIUm9hWE11Ym1WNGRDaHNaWGhsYldVcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVdsdVkyOXRjR3hsZEdVcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1bGJtUW9LVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dRV1IyWVc1alpTQjBhR1VnY0dGeWMyVnlJR0o1SUhSb1pTQmdjMjkxY21ObFlDQnZaaUJ2Ym1VZ2JHVjRhV05oYkNCMGIydGxiaTVjYmlBZ0lDQWdLaTljYmlBZ0lDQXFibVY0ZENoemIzVnlZMlVwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV6YjNWeVkyVWdQU0J6YjNWeVkyVTdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbUYwVTJOaGJHRnlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1GMFUyTmhiR0Z5SUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV6ZEdWd0tDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbTltWm5ObGRDQXJQU0J6YjNWeVkyVXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSFI1Y0dVZ1BTQjBiMnRsYmxSNWNHVW9jMjkxY21ObEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0NGMGVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdFpYTnpZV2RsSUQwZ1lFNXZkQ0JoSUZsQlRVd2dkRzlyWlc0NklDUjdjMjkxY21ObGZXQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCNWFXVnNaQ29nZEdocGN5NXdiM0FvZXlCMGVYQmxPaUFuWlhKeWIzSW5MQ0J2Wm1aelpYUTZJSFJvYVhNdWIyWm1jMlYwTENCdFpYTnpZV2RsTENCemIzVnlZMlVnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtOW1abk5sZENBclBTQnpiM1Z5WTJVdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tIUjVjR1VnUFQwOUlDZHpZMkZzWVhJbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUYwVG1WM1RHbHVaU0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVoZEZOallXeGhjaUE5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMblI1Y0dVZ1BTQW5jMk5oYkdGeUp6dGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVkSGx3WlNBOUlIUjVjR1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV6ZEdWd0tDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCemQybDBZMmdnS0hSNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHVaWGRzYVc1bEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWhkRTVsZDB4cGJtVWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtbHVaR1Z1ZENBOUlEQTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG05dVRtVjNUR2x1WlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXViMjVPWlhkTWFXNWxLSFJvYVhNdWIyWm1jMlYwSUNzZ2MyOTFjbU5sTG14bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKM053WVdObEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11WVhST1pYZE1hVzVsSUNZbUlITnZkWEpqWlZzd1hTQTlQVDBnSnlBbktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVwYm1SbGJuUWdLejBnYzI5MWNtTmxMbXhsYm1kMGFEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpYaHdiR2xqYVhRdGEyVjVMV2x1WkNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYldGd0xYWmhiSFZsTFdsdVpDYzZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbmMyVnhMV2wwWlcwdGFXNWtKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdVlYUk9aWGRNYVc1bEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVwYm1SbGJuUWdLejBnYzI5MWNtTmxMbXhsYm1kMGFEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpHOWpMVzF2WkdVbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJac2IzY3RaWEp5YjNJdFpXNWtKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WVhST1pYZE1hVzVsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbTltWm5ObGRDQXJQU0J6YjNWeVkyVXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUM4cUtpQkRZV3hzSUdGMElHVnVaQ0J2WmlCcGJuQjFkQ0IwYnlCd2RYTm9JRzkxZENCaGJua2djbVZ0WVdsdWFXNW5JR052Ym5OMGNuVmpkR2x2Ym5NZ0tpOWNiaUFnSUNBcVpXNWtLQ2tnZTF4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvZEdocGN5NXpkR0ZqYXk1c1pXNW5kR2dnUGlBd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWNHOXdLQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHZGxkQ0J6YjNWeVkyVlViMnRsYmlncElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MzUWdQU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBlWEJsT2lCMGFHbHpMblI1Y0dVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2Wm1aelpYUTZJSFJvYVhNdWIyWm1jMlYwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdhVzVrWlc1ME9pQjBhR2x6TG1sdVpHVnVkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lITnZkWEpqWlRvZ2RHaHBjeTV6YjNWeVkyVmNiaUFnSUNBZ0lDQWdmVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSE4wTzF4dUlDQWdJSDFjYmlBZ0lDQXFjM1JsY0NncElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RHOXdJRDBnZEdocGN5NXdaV1ZyS0RFcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NTBlWEJsSUQwOVBTQW5aRzlqTFdWdVpDY2dKaVlnS0NGMGIzQWdmSHdnZEc5d0xuUjVjR1VnSVQwOUlDZGtiMk10Wlc1a0p5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIZG9hV3hsSUNoMGFHbHpMbk4wWVdOckxteGxibWQwYUNBK0lEQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlV2xsYkdRcUlIUm9hWE11Y0c5d0tDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbk4wWVdOckxuQjFjMmdvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSNWNHVTZJQ2RrYjJNdFpXNWtKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2Wm1aelpYUTZJSFJvYVhNdWIyWm1jMlYwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOdmRYSmpaVG9nZEdocGN5NXpiM1Z5WTJWY2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNnaGRHOXdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhscFpXeGtLaUIwYUdsekxuTjBjbVZoYlNncE8xeHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tIUnZjQzUwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RrYjJOMWJXVnVkQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSGxwWld4a0tpQjBhR2x6TG1SdlkzVnRaVzUwS0hSdmNDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RoYkdsaGN5YzZYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2R6WTJGc1lYSW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYzJsdVoyeGxMWEYxYjNSbFpDMXpZMkZzWVhJbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5aRzkxWW14bExYRjFiM1JsWkMxelkyRnNZWEluT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUI1YVdWc1pDb2dkR2hwY3k1elkyRnNZWElvZEc5d0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMkpzYjJOckxYTmpZV3hoY2ljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhscFpXeGtLaUIwYUdsekxtSnNiMk5yVTJOaGJHRnlLSFJ2Y0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGliRzlqYXkxdFlYQW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjVhV1ZzWkNvZ2RHaHBjeTVpYkc5amEwMWhjQ2gwYjNBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5ZbXh2WTJzdGMyVnhKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdlV2xsYkdRcUlIUm9hWE11WW14dlkydFRaWEYxWlc1alpTaDBiM0FwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpteHZkeTFqYjJ4c1pXTjBhVzl1SnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZVdsbGJHUXFJSFJvYVhNdVpteHZkME52Ykd4bFkzUnBiMjRvZEc5d0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMlJ2WXkxbGJtUW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjVhV1ZzWkNvZ2RHaHBjeTVrYjJOMWJXVnVkRVZ1WkNoMGIzQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4cUlHbHpkR0Z1WW5Wc0lHbG5ibTl5WlNCdVpYaDBJSE5vYjNWc1pDQnViM1FnYUdGd2NHVnVJQ292WEc0Z0lDQWdJQ0FnSUhscFpXeGtLaUIwYUdsekxuQnZjQ2dwTzF4dUlDQWdJSDFjYmlBZ0lDQndaV1ZyS0c0cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11YzNSaFkydGJkR2hwY3k1emRHRmpheTVzWlc1bmRHZ2dMU0J1WFR0Y2JpQWdJQ0I5WEc0Z0lDQWdLbkJ2Y0NobGNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IwYjJ0bGJpQTlJR1Z5Y205eUlEOC9JSFJvYVhNdWMzUmhZMnN1Y0c5d0tDazdYRzRnSUNBZ0lDQWdJQzhxSUdsemRHRnVZblZzSUdsbmJtOXlaU0JwWmlCemFHOTFiR1FnYm05MElHaGhjSEJsYmlBcUwxeHVJQ0FnSUNBZ0lDQnBaaUFvSVhSdmEyVnVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdFpYTnpZV2RsSUQwZ0oxUnlhV1ZrSUhSdklIQnZjQ0JoYmlCbGJYQjBlU0J6ZEdGamF5YzdYRzRnSUNBZ0lDQWdJQ0FnSUNCNWFXVnNaQ0I3SUhSNWNHVTZJQ2RsY25KdmNpY3NJRzltWm5ObGREb2dkR2hwY3k1dlptWnpaWFFzSUhOdmRYSmpaVG9nSnljc0lHMWxjM05oWjJVZ2ZUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2gwYUdsekxuTjBZV05yTG14bGJtZDBhQ0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2VXbGxiR1FnZEc5clpXNDdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IwYjNBZ1BTQjBhR2x6TG5CbFpXc29NU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEc5clpXNHVkSGx3WlNBOVBUMGdKMkpzYjJOckxYTmpZV3hoY2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJDYkc5amF5QnpZMkZzWVhKeklIVnpaU0IwYUdWcGNpQndZWEpsYm5RZ2NtRjBhR1Z5SUhSb1lXNGdhR1ZoWkdWeUlHbHVaR1Z1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSdmEyVnVMbWx1WkdWdWRDQTlJQ2RwYm1SbGJuUW5JR2x1SUhSdmNDQS9JSFJ2Y0M1cGJtUmxiblFnT2lBd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9kRzlyWlc0dWRIbHdaU0E5UFQwZ0oyWnNiM2N0WTI5c2JHVmpkR2x2YmljZ0ppWWdkRzl3TG5SNWNHVWdQVDA5SUNka2IyTjFiV1Z1ZENjcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJKWjI1dmNtVWdZV3hzSUdsdVpHVnVkQ0JtYjNJZ2RHOXdMV3hsZG1Wc0lHWnNiM2NnWTI5c2JHVmpkR2x2Ym5OY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGIydGxiaTVwYm1SbGJuUWdQU0F3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZG1iRzkzTFdOdmJHeGxZM1JwYjI0bktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnBlRVpzYjNkVFpYRkpkR1Z0Y3loMGIydGxiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tIUnZjQzUwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpHOWpkVzFsYm5Rbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYjNBdWRtRnNkV1VnUFNCMGIydGxianRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5ZbXh2WTJzdGMyTmhiR0Z5SnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkRzl3TG5CeWIzQnpMbkIxYzJnb2RHOXJaVzRwT3lBdkx5Qmxjbkp2Y2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RpYkc5amF5MXRZWEFuT2lCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHbDBJRDBnZEc5d0xtbDBaVzF6VzNSdmNDNXBkR1Z0Y3k1c1pXNW5kR2dnTFNBeFhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbDBMblpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBiM0F1YVhSbGJYTXVjSFZ6YUNoN0lITjBZWEowT2lCYlhTd2dhMlY1T2lCMGIydGxiaXdnYzJWd09pQmJYU0I5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXViMjVMWlhsTWFXNWxJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtSUNocGRDNXpaWEFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsMExuWmhiSFZsSUQwZ2RHOXJaVzQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0dsMExDQjdJR3RsZVRvZ2RHOXJaVzRzSUhObGNEb2dXMTBnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbTl1UzJWNVRHbHVaU0E5SUNGcGRDNWxlSEJzYVdOcGRFdGxlVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWW14dlkyc3RjMlZ4SnpvZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnBkQ0E5SUhSdmNDNXBkR1Z0YzF0MGIzQXVhWFJsYlhNdWJHVnVaM1JvSUMwZ01WMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBkQzUyWVd4MVpTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnZjQzVwZEdWdGN5NXdkWE5vS0hzZ2MzUmhjblE2SUZ0ZExDQjJZV3gxWlRvZ2RHOXJaVzRnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsMExuWmhiSFZsSUQwZ2RHOXJaVzQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RtYkc5M0xXTnZiR3hsWTNScGIyNG5PaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdsMElEMGdkRzl3TG1sMFpXMXpXM1J2Y0M1cGRHVnRjeTVzWlc1bmRHZ2dMU0F4WFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0NGcGRDQjhmQ0JwZEM1MllXeDFaU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJ2Y0M1cGRHVnRjeTV3ZFhOb0tIc2djM1JoY25RNklGdGRMQ0JyWlhrNklIUnZhMlZ1TENCelpYQTZJRnRkSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hwZEM1elpYQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBkQzUyWVd4MVpTQTlJSFJ2YTJWdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCUFltcGxZM1F1WVhOemFXZHVLR2wwTENCN0lHdGxlVG9nZEc5clpXNHNJSE5sY0RvZ1cxMGdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHNWxlSFFnYzJodmRXeGtJRzV2ZENCb1lYQndaVzRnS2k5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWNHOXdLSFJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnb2RHOXdMblI1Y0dVZ1BUMDlJQ2RrYjJOMWJXVnVkQ2NnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGIzQXVkSGx3WlNBOVBUMGdKMkpzYjJOckxXMWhjQ2NnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGIzQXVkSGx3WlNBOVBUMGdKMkpzYjJOckxYTmxjU2NwSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0tIUnZhMlZ1TG5SNWNHVWdQVDA5SUNkaWJHOWpheTF0WVhBbklIeDhJSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZGliRzlqYXkxelpYRW5LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR3hoYzNRZ1BTQjBiMnRsYmk1cGRHVnRjMXQwYjJ0bGJpNXBkR1Z0Y3k1c1pXNW5kR2dnTFNBeFhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYkdGemRDQW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBaGJHRnpkQzV6WlhBZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSVd4aGMzUXVkbUZzZFdVZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdGemRDNXpkR0Z5ZEM1c1pXNW5kR2dnUGlBd0lDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdacGJtUk9iMjVGYlhCMGVVbHVaR1Y0S0d4aGMzUXVjM1JoY25RcElEMDlQU0F0TVNBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FvZEc5clpXNHVhVzVrWlc1MElEMDlQU0F3SUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1lYTjBMbk4wWVhKMExtVjJaWEo1S0hOMElEMCtJSE4wTG5SNWNHVWdJVDA5SUNkamIyMXRaVzUwSnlCOGZDQnpkQzVwYm1SbGJuUWdQQ0IwYjJ0bGJpNXBibVJsYm5RcEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kRzl3TG5SNWNHVWdQVDA5SUNka2IyTjFiV1Z1ZENjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGIzQXVaVzVrSUQwZ2JHRnpkQzV6ZEdGeWREdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHOXdMbWwwWlcxekxuQjFjMmdvZXlCemRHRnlkRG9nYkdGemRDNXpkR0Z5ZENCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEc5clpXNHVhWFJsYlhNdWMzQnNhV05sS0MweExDQXhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ0tuTjBjbVZoYlNncElIdGNiaUFnSUNBZ0lDQWdjM2RwZEdOb0lDaDBhR2x6TG5SNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJScGNtVmpkR2wyWlMxc2FXNWxKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDQjdJSFI1Y0dVNklDZGthWEpsWTNScGRtVW5MQ0J2Wm1aelpYUTZJSFJvYVhNdWIyWm1jMlYwTENCemIzVnlZMlU2SUhSb2FYTXVjMjkxY21ObElIMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5ZbmwwWlMxdmNtUmxjaTF0WVhKckp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKM053WVdObEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMk52YlcxbGJuUW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYm1WM2JHbHVaU2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUWdkR2hwY3k1emIzVnlZMlZVYjJ0bGJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGtiMk10Ylc5a1pTYzZYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RrYjJNdGMzUmhjblFuT2lCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWkc5aklEMGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGVYQmxPaUFuWkc5amRXMWxiblFuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZabVp6WlhRNklIUm9hWE11YjJabWMyVjBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRHRnlkRG9nVzExY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuUjVjR1VnUFQwOUlDZGtiMk10YzNSaGNuUW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2IyTXVjM1JoY25RdWNIVnphQ2gwYUdsekxuTnZkWEpqWlZSdmEyVnVLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuTjBZV05yTG5CMWMyZ29aRzlqS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZVdsbGJHUWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RIbHdaVG9nSjJWeWNtOXlKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZERvZ2RHaHBjeTV2Wm1aelpYUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCdFpYTnpZV2RsT2lCZ1ZXNWxlSEJsWTNSbFpDQWtlM1JvYVhNdWRIbHdaWDBnZEc5clpXNGdhVzRnV1VGTlRDQnpkSEpsWVcxZ0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzI5MWNtTmxPaUIwYUdsekxuTnZkWEpqWlZ4dUlDQWdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JpQWdJQ0FxWkc5amRXMWxiblFvWkc5aktTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoa2IyTXVkbUZzZFdVcFhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdlV2xsYkdRcUlIUm9hWE11YkdsdVpVVnVaQ2hrYjJNcE8xeHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tIUm9hWE11ZEhsd1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWkc5akxYTjBZWEowSnpvZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2htYVc1a1RtOXVSVzF3ZEhsSmJtUmxlQ2hrYjJNdWMzUmhjblFwSUNFOVBTQXRNU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWMzUmxjQ2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSdll5NXpkR0Z5ZEM1d2RYTm9LSFJvYVhNdWMyOTFjbU5sVkc5clpXNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oyRnVZMmh2Y2ljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZDBZV2NuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbmMzQmhZMlVuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblkyOXRiV1Z1ZENjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHVaWGRzYVc1bEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtiMk11YzNSaGNuUXVjSFZ6YUNoMGFHbHpMbk52ZFhKalpWUnZhMlZ1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWW5ZZ1BTQjBhR2x6TG5OMFlYSjBRbXh2WTJ0V1lXeDFaU2hrYjJNcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWW5ZcFhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuTjBZV05yTG5CMWMyZ29ZbllwTzF4dUlDQWdJQ0FnSUNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIbHBaV3hrSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGVYQmxPaUFuWlhKeWIzSW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzltWm5ObGREb2dkR2hwY3k1dlptWnpaWFFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYldWemMyRm5aVG9nWUZWdVpYaHdaV04wWldRZ0pIdDBhR2x6TG5SNWNHVjlJSFJ2YTJWdUlHbHVJRmxCVFV3Z1pHOWpkVzFsYm5SZ0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITnZkWEpqWlRvZ2RHaHBjeTV6YjNWeVkyVmNiaUFnSUNBZ0lDQWdJQ0FnSUgwN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnS25OallXeGhjaWh6WTJGc1lYSXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZEhsd1pTQTlQVDBnSjIxaGNDMTJZV3gxWlMxcGJtUW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCd2NtVjJJRDBnWjJWMFVISmxkbEJ5YjNCektIUm9hWE11Y0dWbGF5Z3lLU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCemRHRnlkQ0E5SUdkbGRFWnBjbk4wUzJWNVUzUmhjblJRY205d2N5aHdjbVYyS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCelpYQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jMk5oYkdGeUxtVnVaQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGNDQTlJSE5qWVd4aGNpNWxibVE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWd0xuQjFjMmdvZEdocGN5NXpiM1Z5WTJWVWIydGxiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdWc1pYUmxJSE5qWVd4aGNpNWxibVE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZ3SUQwZ1czUm9hWE11YzI5MWNtTmxWRzlyWlc1ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiV0Z3SUQwZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1U2SUNkaWJHOWpheTF0WVhBbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZERvZ2MyTmhiR0Z5TG05bVpuTmxkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm1SbGJuUTZJSE5qWVd4aGNpNXBibVJsYm5Rc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FYUmxiWE02SUZ0N0lITjBZWEowTENCclpYazZJSE5qWVd4aGNpd2djMlZ3SUgxZFhHNGdJQ0FnSUNBZ0lDQWdJQ0I5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1dmJrdGxlVXhwYm1VZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1emRHRmphMXQwYUdsekxuTjBZV05yTG14bGJtZDBhQ0F0SURGZElEMGdiV0Z3TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lIbHBaV3hrS2lCMGFHbHpMbXhwYm1WRmJtUW9jMk5oYkdGeUtUdGNiaUFnSUNCOVhHNGdJQ0FnS21Kc2IyTnJVMk5oYkdGeUtITmpZV3hoY2lrZ2UxeHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tIUm9hWE11ZEhsd1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYzNCaFkyVW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWTI5dGJXVnVkQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkdVpYZHNhVzVsSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelkyRnNZWEl1Y0hKdmNITXVjSFZ6YUNoMGFHbHpMbk52ZFhKalpWUnZhMlZ1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkelkyRnNZWEluT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOallXeGhjaTV6YjNWeVkyVWdQU0IwYUdsekxuTnZkWEpqWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QmliRzlqYXkxelkyRnNZWElnYzI5MWNtTmxJR2x1WTJ4MVpHVnpJSFJ5WVdsc2FXNW5JRzVsZDJ4cGJtVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1GMFRtVjNUR2x1WlNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXBibVJsYm5RZ1BTQXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbTl1VG1WM1RHbHVaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYm13Z1BTQjBhR2x6TG5OdmRYSmpaUzVwYm1SbGVFOW1LQ2RjWEc0bktTQXJJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIZG9hV3hsSUNodWJDQWhQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV2Yms1bGQweHBibVVvZEdocGN5NXZabVp6WlhRZ0t5QnViQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1YkNBOUlIUm9hWE11YzI5MWNtTmxMbWx1WkdWNFQyWW9KMXhjYmljc0lHNXNLU0FySURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWNHOXdLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNBdktpQnBjM1JoYm1KMWJDQnBaMjV2Y21VZ2JtVjRkQ0J6YUc5MWJHUWdibTkwSUdoaGNIQmxiaUFxTDF4dUlDQWdJQ0FnSUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjVhV1ZzWkNvZ2RHaHBjeTV6ZEdWd0tDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ0ttSnNiMk5yVFdGd0tHMWhjQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JwZENBOUlHMWhjQzVwZEdWdGMxdHRZWEF1YVhSbGJYTXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lDQWdJQ0FnSUM4dklHbDBMbk5sY0NCcGN5QjBjblZsTFdsemFDQnBaaUJ3WVdseUlHRnNjbVZoWkhrZ2FHRnpJR3RsZVNCdmNpQTZJSE5sY0dGeVlYUnZjbHh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLSFJvYVhNdWRIbHdaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbmJtVjNiR2x1WlNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV2Ymt0bGVVeHBibVVnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FYUXVkbUZzZFdVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdaVzVrSUQwZ0oyVnVaQ2NnYVc0Z2FYUXVkbUZzZFdVZ1B5QnBkQzUyWVd4MVpTNWxibVFnT2lCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHeGhjM1FnUFNCQmNuSmhlUzVwYzBGeWNtRjVLR1Z1WkNrZ1B5QmxibVJiWlc1a0xteGxibWQwYUNBdElERmRJRG9nZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYkdGemREOHVkSGx3WlNBOVBUMGdKMk52YlcxbGJuUW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaVzVrUHk1d2RYTm9LSFJvYVhNdWMyOTFjbU5sVkc5clpXNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnRZWEF1YVhSbGJYTXVjSFZ6YUNoN0lITjBZWEowT2lCYmRHaHBjeTV6YjNWeVkyVlViMnRsYmwwZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2wwTG5ObGNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGRDNXpaWEF1Y0hWemFDaDBhR2x6TG5OdmRYSmpaVlJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2wwTG5OMFlYSjBMbkIxYzJnb2RHaHBjeTV6YjNWeVkyVlViMnRsYmlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0ozTndZV05sSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oyTnZiVzFsYm5Rbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwZEM1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnRZWEF1YVhSbGJYTXVjSFZ6YUNoN0lITjBZWEowT2lCYmRHaHBjeTV6YjNWeVkyVlViMnRsYmwwZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2wwTG5ObGNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGRDNXpaWEF1Y0hWemFDaDBhR2x6TG5OdmRYSmpaVlJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbUYwU1c1a1pXNTBaV1JEYjIxdFpXNTBLR2wwTG5OMFlYSjBMQ0J0WVhBdWFXNWtaVzUwS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY0hKbGRpQTlJRzFoY0M1cGRHVnRjMXR0WVhBdWFYUmxiWE11YkdWdVozUm9JQzBnTWwwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JsYm1RZ1BTQndjbVYyUHk1MllXeDFaVDh1Wlc1a08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRUZ5Y21GNUxtbHpRWEp5WVhrb1pXNWtLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFRnljbUY1TG5CeWIzUnZkSGx3WlM1d2RYTm9MbUZ3Y0d4NUtHVnVaQ3dnYVhRdWMzUmhjblFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnVaQzV3ZFhOb0tIUm9hWE11YzI5MWNtTmxWRzlyWlc0cE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzFoY0M1cGRHVnRjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhWFF1YzNSaGNuUXVjSFZ6YUNoMGFHbHpMbk52ZFhKalpWUnZhMlZ1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtbHVaR1Z1ZENBK1BTQnRZWEF1YVc1a1pXNTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCaGRFMWhjRWx1WkdWdWRDQTlJQ0YwYUdsekxtOXVTMlY1VEdsdVpTQW1KaUIwYUdsekxtbHVaR1Z1ZENBOVBUMGdiV0Z3TG1sdVpHVnVkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdGMFRtVjRkRWwwWlcwZ1BTQmhkRTFoY0VsdVpHVnVkQ0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNocGRDNXpaWEFnZkh3Z2FYUXVaWGh3YkdsamFYUkxaWGtwSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTUwZVhCbElDRTlQU0FuYzJWeExXbDBaVzB0YVc1a0p6dGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklFWnZjaUJsYlhCMGVTQnViMlJsY3l3Z1lYTnphV2R1SUc1bGQyeHBibVV0YzJWd1lYSmhkR1ZrSUc1dmRDQnBibVJsYm5SbFpDQmxiWEIwZVNCMGIydGxibk1nZEc4Z1ptOXNiRzkzYVc1bklHNXZaR1ZjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J6ZEdGeWRDQTlJRnRkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dGMFRtVjRkRWwwWlcwZ0ppWWdhWFF1YzJWd0lDWW1JQ0ZwZEM1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzVzSUQwZ1cxMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JwZEM1elpYQXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MzUWdQU0JwZEM1elpYQmJhVjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjNhWFJqYUNBb2MzUXVkSGx3WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYm1WM2JHbHVaU2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2Jtd3VjSFZ6YUNocEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjNOd1lXTmxKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oyTnZiVzFsYm5Rbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoemRDNXBibVJsYm5RZ1BpQnRZWEF1YVc1a1pXNTBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnViQzVzWlc1bmRHZ2dQU0F3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdWJDNXNaVzVuZEdnZ1BTQXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h1YkM1c1pXNW5kR2dnUGowZ01pbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGNuUWdQU0JwZEM1elpYQXVjM0JzYVdObEtHNXNXekZkS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lITjNhWFJqYUNBb2RHaHBjeTUwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbllXNWphRzl5SnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2QwWVdjbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1lYUk9aWGgwU1hSbGJTQjhmQ0JwZEM1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGNuUXVjSFZ6YUNoMGFHbHpMbk52ZFhKalpWUnZhMlZ1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUcxaGNDNXBkR1Z0Y3k1d2RYTm9LSHNnYzNSaGNuUWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtOXVTMlY1VEdsdVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2FYUXVjMlZ3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGRDNXpaWEF1Y0hWemFDaDBhR2x6TG5OdmRYSmpaVlJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsMExuTjBZWEowTG5CMWMyZ29kR2hwY3k1emIzVnlZMlZVYjJ0bGJpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJWNGNHeHBZMmwwTFd0bGVTMXBibVFuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSVdsMExuTmxjQ0FtSmlBaGFYUXVaWGh3YkdsamFYUkxaWGtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsMExuTjBZWEowTG5CMWMyZ29kR2hwY3k1emIzVnlZMlZVYjJ0bGJpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBkQzVsZUhCc2FXTnBkRXRsZVNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnBaaUFvWVhST1pYaDBTWFJsYlNCOGZDQnBkQzUyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoY25RdWNIVnphQ2gwYUdsekxuTnZkWEpqWlZSdmEyVnVLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzFoY0M1cGRHVnRjeTV3ZFhOb0tIc2djM1JoY25Rc0lHVjRjR3hwWTJsMFMyVjVPaUIwY25WbElIMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV6ZEdGamF5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBlWEJsT2lBbllteHZZMnN0YldGd0p5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2Wm1aelpYUTZJSFJvYVhNdWIyWm1jMlYwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVaR1Z1ZERvZ2RHaHBjeTVwYm1SbGJuUXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVhSbGJYTTZJRnQ3SUhOMFlYSjBPaUJiZEdocGN5NXpiM1Z5WTJWVWIydGxibDBzSUdWNGNHeHBZMmwwUzJWNU9pQjBjblZsSUgxZFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG05dVMyVjVUR2x1WlNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2R0WVhBdGRtRnNkV1V0YVc1a0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbDBMbVY0Y0d4cFkybDBTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JV2wwTG5ObGNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBibU5zZFdSbGMxUnZhMlZ1S0dsMExuTjBZWEowTENBbmJtVjNiR2x1WlNjcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFOWlhbVZqZEM1aGMzTnBaMjRvYVhRc0lIc2dhMlY1T2lCdWRXeHNMQ0J6WlhBNklGdDBhR2x6TG5OdmRYSmpaVlJ2YTJWdVhTQjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSE4wWVhKMElEMGdaMlYwUm1seWMzUkxaWGxUZEdGeWRGQnliM0J6S0dsMExuTjBZWEowS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXpkR0ZqYXk1d2RYTm9LSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSNWNHVTZJQ2RpYkc5amF5MXRZWEFuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyWm1jMlYwT2lCMGFHbHpMbTltWm5ObGRDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x1WkdWdWREb2dkR2hwY3k1cGJtUmxiblFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGRHVnRjem9nVzNzZ2MzUmhjblFzSUd0bGVUb2diblZzYkN3Z2MyVndPaUJiZEdocGN5NXpiM1Z5WTJWVWIydGxibDBnZlYxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9hWFF1ZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdFlYQXVhWFJsYlhNdWNIVnphQ2g3SUhOMFlYSjBPaUJiWFN3Z2EyVjVPaUJ1ZFd4c0xDQnpaWEE2SUZ0MGFHbHpMbk52ZFhKalpWUnZhMlZ1WFNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHbHVZMngxWkdWelZHOXJaVzRvYVhRdWMyVndMQ0FuYldGd0xYWmhiSFZsTFdsdVpDY3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV6ZEdGamF5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dKMkpzYjJOckxXMWhjQ2NzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzltWm5ObGREb2dkR2hwY3k1dlptWnpaWFFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x1WkdWdWREb2dkR2hwY3k1cGJtUmxiblFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2wwWlcxek9pQmJleUJ6ZEdGeWRDd2dhMlY1T2lCdWRXeHNMQ0J6WlhBNklGdDBhR2x6TG5OdmRYSmpaVlJ2YTJWdVhTQjlYVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2FYTkdiRzkzVkc5clpXNG9hWFF1YTJWNUtTQW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNGcGJtTnNkV1JsYzFSdmEyVnVLR2wwTG5ObGNDd2dKMjVsZDJ4cGJtVW5LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOMFlYSjBJRDBnWjJWMFJtbHljM1JMWlhsVGRHRnlkRkJ5YjNCektHbDBMbk4wWVhKMEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnJaWGtnUFNCcGRDNXJaWGs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzJWd0lEMGdhWFF1YzJWd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sY0M1d2RYTm9LSFJvYVhNdWMyOTFjbU5sVkc5clpXNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklFQjBjeTFsZUhCbFkzUXRaWEp5YjNJZ2RIbHdaU0JuZFdGeVpDQnBjeUIzY205dVp5Qm9aWEpsWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHVnNaWFJsSUdsMExtdGxlVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QkFkSE10Wlhod1pXTjBMV1Z5Y205eUlIUjVjR1VnWjNWaGNtUWdhWE1nZDNKdmJtY2dhR1Z5WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmxiR1YwWlNCcGRDNXpaWEE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV6ZEdGamF5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dKMkpzYjJOckxXMWhjQ2NzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzltWm5ObGREb2dkR2hwY3k1dlptWnpaWFFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x1WkdWdWREb2dkR2hwY3k1cGJtUmxiblFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2wwWlcxek9pQmJleUJ6ZEdGeWRDd2dhMlY1TENCelpYQWdmVjFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tITjBZWEowTG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCT2IzUWdZV04wZFdGc2JIa2dZWFFnYm1WNGRDQnBkR1Z0WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FYUXVjMlZ3SUQwZ2FYUXVjMlZ3TG1OdmJtTmhkQ2h6ZEdGeWRDd2dkR2hwY3k1emIzVnlZMlZVYjJ0bGJpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBkQzV6WlhBdWNIVnphQ2gwYUdsekxuTnZkWEpqWlZSdmEyVnVLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2doYVhRdWMyVndLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1QySnFaV04wTG1GemMybG5iaWhwZEN3Z2V5QnJaWGs2SUc1MWJHd3NJSE5sY0RvZ1czUm9hWE11YzI5MWNtTmxWRzlyWlc1ZElIMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9hWFF1ZG1Gc2RXVWdmSHdnWVhST1pYaDBTWFJsYlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzFoY0M1cGRHVnRjeTV3ZFhOb0tIc2djM1JoY25Rc0lHdGxlVG9nYm5Wc2JDd2djMlZ3T2lCYmRHaHBjeTV6YjNWeVkyVlViMnRsYmwwZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaHBibU5zZFdSbGMxUnZhMlZ1S0dsMExuTmxjQ3dnSjIxaGNDMTJZV3gxWlMxcGJtUW5LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YzNSaFkyc3VjSFZ6YUNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSNWNHVTZJQ2RpYkc5amF5MXRZWEFuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2Wm1aelpYUTZJSFJvYVhNdWIyWm1jMlYwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm1SbGJuUTZJSFJvYVhNdWFXNWtaVzUwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwZEdWdGN6b2dXM3NnYzNSaGNuUTZJRnRkTENCclpYazZJRzUxYkd3c0lITmxjRG9nVzNSb2FYTXVjMjkxY21ObFZHOXJaVzVkSUgxZFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwZEM1elpYQXVjSFZ6YUNoMGFHbHpMbk52ZFhKalpWUnZhMlZ1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbTl1UzJWNVRHbHVaU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGhiR2xoY3ljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYzJOaGJHRnlKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHphVzVuYkdVdGNYVnZkR1ZrTFhOallXeGhjaWM2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5aRzkxWW14bExYRjFiM1JsWkMxelkyRnNZWEluT2lCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHWnpJRDBnZEdocGN5NW1iRzkzVTJOaGJHRnlLSFJvYVhNdWRIbHdaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hoZEU1bGVIUkpkR1Z0SUh4OElHbDBMblpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnRZWEF1YVhSbGJYTXVjSFZ6YUNoN0lITjBZWEowTENCclpYazZJR1p6TENCelpYQTZJRnRkSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV2Ymt0bGVVeHBibVVnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2wwTG5ObGNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1emRHRmpheTV3ZFhOb0tHWnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFOWlhbVZqZEM1aGMzTnBaMjRvYVhRc0lIc2dhMlY1T2lCbWN5d2djMlZ3T2lCYlhTQjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWIyNUxaWGxNYVc1bElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSbFptRjFiSFE2SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1luWWdQU0IwYUdsekxuTjBZWEowUW14dlkydFdZV3gxWlNodFlYQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZbllwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGhkRTFoY0VsdVpHVnVkQ0FtSmlCaWRpNTBlWEJsSUNFOVBTQW5ZbXh2WTJzdGMyVnhKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMWhjQzVwZEdWdGN5NXdkWE5vS0hzZ2MzUmhjblFnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbk4wWVdOckxuQjFjMmdvWW5ZcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSGxwWld4a0tpQjBhR2x6TG5CdmNDZ3BPMXh1SUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1emRHVndLQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lDcGliRzlqYTFObGNYVmxibU5sS0hObGNTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBkQ0E5SUhObGNTNXBkR1Z0YzF0elpYRXVhWFJsYlhNdWJHVnVaM1JvSUMwZ01WMDdYRzRnSUNBZ0lDQWdJSE4zYVhSamFDQW9kR2hwY3k1MGVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkdVpYZHNhVzVsSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hWFF1ZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWlc1a0lEMGdKMlZ1WkNjZ2FXNGdhWFF1ZG1Gc2RXVWdQeUJwZEM1MllXeDFaUzVsYm1RZ09pQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR3hoYzNRZ1BTQkJjbkpoZVM1cGMwRnljbUY1S0dWdVpDa2dQeUJsYm1SYlpXNWtMbXhsYm1kMGFDQXRJREZkSURvZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JHRnpkRDh1ZEhsd1pTQTlQVDBnSjJOdmJXMWxiblFuS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlc1a1B5NXdkWE5vS0hSb2FYTXVjMjkxY21ObFZHOXJaVzRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6WlhFdWFYUmxiWE11Y0hWemFDaDdJSE4wWVhKME9pQmJkR2hwY3k1emIzVnlZMlZVYjJ0bGJsMGdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVhRdWMzUmhjblF1Y0hWemFDaDBhR2x6TG5OdmRYSmpaVlJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHpjR0ZqWlNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGpiMjF0Wlc1MEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVhRdWRtRnNkV1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxjUzVwZEdWdGN5NXdkWE5vS0hzZ2MzUmhjblE2SUZ0MGFHbHpMbk52ZFhKalpWUnZhMlZ1WFNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXVZWFJKYm1SbGJuUmxaRU52YlcxbGJuUW9hWFF1YzNSaGNuUXNJSE5sY1M1cGJtUmxiblFwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3Y21WMklEMGdjMlZ4TG1sMFpXMXpXM05sY1M1cGRHVnRjeTVzWlc1bmRHZ2dMU0F5WFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Z1WkNBOUlIQnlaWFkvTG5aaGJIVmxQeTVsYm1RN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9RWEp5WVhrdWFYTkJjbkpoZVNobGJtUXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5CMWMyZ3VZWEJ3Ykhrb1pXNWtMQ0JwZEM1emRHRnlkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXNWtMbkIxYzJnb2RHaHBjeTV6YjNWeVkyVlViMnRsYmlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZ4TG1sMFpXMXpMbkJ2Y0NncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBkQzV6ZEdGeWRDNXdkWE5vS0hSb2FYTXVjMjkxY21ObFZHOXJaVzRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkaGJtTm9iM0luT2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbmRHRm5KenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FYUXVkbUZzZFdVZ2ZId2dkR2hwY3k1cGJtUmxiblFnUEQwZ2MyVnhMbWx1WkdWdWRDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhWFF1YzNSaGNuUXVjSFZ6YUNoMGFHbHpMbk52ZFhKalpWUnZhMlZ1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkelpYRXRhWFJsYlMxcGJtUW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbWx1WkdWdWRDQWhQVDBnYzJWeExtbHVaR1Z1ZENsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR2wwTG5aaGJIVmxJSHg4SUdsdVkyeDFaR1Z6Vkc5clpXNG9hWFF1YzNSaGNuUXNJQ2R6WlhFdGFYUmxiUzFwYm1RbktTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWeExtbDBaVzF6TG5CMWMyZ29leUJ6ZEdGeWREb2dXM1JvYVhNdWMyOTFjbU5sVkc5clpXNWRJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVhRdWMzUmhjblF1Y0hWemFDaDBhR2x6TG5OdmRYSmpaVlJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVhVzVrWlc1MElENGdjMlZ4TG1sdVpHVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1luWWdQU0IwYUdsekxuTjBZWEowUW14dlkydFdZV3gxWlNoelpYRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR0oyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV6ZEdGamF5NXdkWE5vS0dKMktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2VXbGxiR1FxSUhSb2FYTXVjRzl3S0NrN1hHNGdJQ0FnSUNBZ0lIbHBaV3hrS2lCMGFHbHpMbk4wWlhBb0tUdGNiaUFnSUNCOVhHNGdJQ0FnS21ac2IzZERiMnhzWldOMGFXOXVLR1pqS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdsMElEMGdabU11YVhSbGJYTmJabU11YVhSbGJYTXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5SNWNHVWdQVDA5SUNkbWJHOTNMV1Z5Y205eUxXVnVaQ2NwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCMGIzQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCa2J5QjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlV2xsYkdRcUlIUm9hWE11Y0c5d0tDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkRzl3SUQwZ2RHaHBjeTV3WldWcktERXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQjNhR2xzWlNBb2RHOXdJQ1ltSUhSdmNDNTBlWEJsSUQwOVBTQW5abXh2ZHkxamIyeHNaV04wYVc5dUp5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4elpTQnBaaUFvWm1NdVpXNWtMbXhsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNkcGRHTm9JQ2gwYUdsekxuUjVjR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RqYjIxdFlTYzZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpYaHdiR2xqYVhRdGEyVjVMV2x1WkNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaGFYUWdmSHdnYVhRdWMyVndLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabU11YVhSbGJYTXVjSFZ6YUNoN0lITjBZWEowT2lCYmRHaHBjeTV6YjNWeVkyVlViMnRsYmwwZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbDBMbk4wWVhKMExuQjFjMmdvZEdocGN5NXpiM1Z5WTJWVWIydGxiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2R0WVhBdGRtRnNkV1V0YVc1a0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRnBkQ0I4ZkNCcGRDNTJZV3gxWlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdaakxtbDBaVzF6TG5CMWMyZ29leUJ6ZEdGeWREb2dXMTBzSUd0bGVUb2diblZzYkN3Z2MyVndPaUJiZEdocGN5NXpiM1Z5WTJWVWIydGxibDBnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2wwTG5ObGNDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbDBMbk5sY0M1d2RYTm9LSFJvYVhNdWMyOTFjbU5sVkc5clpXNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0dsMExDQjdJR3RsZVRvZ2JuVnNiQ3dnYzJWd09pQmJkR2hwY3k1emIzVnlZMlZVYjJ0bGJsMGdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2R6Y0dGalpTYzZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblkyOXRiV1Z1ZENjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYm1WM2JHbHVaU2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5ZVzVqYUc5eUp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkMFlXY25PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JV2wwSUh4OElHbDBMblpoYkhWbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptTXVhWFJsYlhNdWNIVnphQ2g3SUhOMFlYSjBPaUJiZEdocGN5NXpiM1Z5WTJWVWIydGxibDBnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2wwTG5ObGNDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbDBMbk5sY0M1d2RYTm9LSFJvYVhNdWMyOTFjbU5sVkc5clpXNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBkQzV6ZEdGeWRDNXdkWE5vS0hSb2FYTXVjMjkxY21ObFZHOXJaVzRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWVd4cFlYTW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0ozTmpZV3hoY2ljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYzJsdVoyeGxMWEYxYjNSbFpDMXpZMkZzWVhJbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJSdmRXSnNaUzF4ZFc5MFpXUXRjMk5oYkdGeUp6b2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JtY3lBOUlIUm9hWE11Wm14dmQxTmpZV3hoY2loMGFHbHpMblI1Y0dVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXbDBJSHg4SUdsMExuWmhiSFZsS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1NdWFYUmxiWE11Y0hWemFDaDdJSE4wWVhKME9pQmJYU3dnYTJWNU9pQm1jeXdnYzJWd09pQmJYU0I5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9hWFF1YzJWd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV6ZEdGamF5NXdkWE5vS0daektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1QySnFaV04wTG1GemMybG5iaWhwZEN3Z2V5QnJaWGs2SUdaekxDQnpaWEE2SUZ0ZElIMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMlpzYjNjdGJXRndMV1Z1WkNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWm14dmR5MXpaWEV0Wlc1a0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1NdVpXNWtMbkIxYzJnb2RHaHBjeTV6YjNWeVkyVlViMnRsYmlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHSjJJRDBnZEdocGN5NXpkR0Z5ZEVKc2IyTnJWbUZzZFdVb1ptTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHVnNjMlVnYzJodmRXeGtJRzV2ZENCb1lYQndaVzRnS2k5Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoaWRpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5OMFlXTnJMbkIxYzJnb1luWXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWNHOXdLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVdsbGJHUXFJSFJvYVhNdWMzUmxjQ2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY0dGeVpXNTBJRDBnZEdocGN5NXdaV1ZyS0RJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIQmhjbVZ1ZEM1MGVYQmxJRDA5UFNBbllteHZZMnN0YldGd0p5QW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2dvZEdocGN5NTBlWEJsSUQwOVBTQW5iV0Z3TFhaaGJIVmxMV2x1WkNjZ0ppWWdjR0Z5Wlc1MExtbHVaR1Z1ZENBOVBUMGdabU11YVc1a1pXNTBLU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW9kR2hwY3k1MGVYQmxJRDA5UFNBbmJtVjNiR2x1WlNjZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDRndZWEpsYm5RdWFYUmxiWE5iY0dGeVpXNTBMbWwwWlcxekxteGxibWQwYUNBdElERmRMbk5sY0NrcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlV2xsYkdRcUlIUm9hWE11Y0c5d0tDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlV2xsYkdRcUlIUm9hWE11YzNSbGNDZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnBaaUFvZEdocGN5NTBlWEJsSUQwOVBTQW5iV0Z3TFhaaGJIVmxMV2x1WkNjZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndZWEpsYm5RdWRIbHdaU0FoUFQwZ0oyWnNiM2N0WTI5c2JHVmpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCd2NtVjJJRDBnWjJWMFVISmxkbEJ5YjNCektIQmhjbVZ1ZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSaGNuUWdQU0JuWlhSR2FYSnpkRXRsZVZOMFlYSjBVSEp2Y0hNb2NISmxkaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1sNFJteHZkMU5sY1VsMFpXMXpLR1pqS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6WlhBZ1BTQm1ZeTVsYm1RdWMzQnNhV05sS0RFc0lHWmpMbVZ1WkM1c1pXNW5kR2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGNDNXdkWE5vS0hSb2FYTXVjMjkxY21ObFZHOXJaVzRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzFoY0NBOUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dKMkpzYjJOckxXMWhjQ2NzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZERvZ1ptTXViMlptYzJWMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm1SbGJuUTZJR1pqTG1sdVpHVnVkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FYUmxiWE02SUZ0N0lITjBZWEowTENCclpYazZJR1pqTENCelpYQWdmVjFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXViMjVMWlhsTWFXNWxJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5OMFlXTnJXM1JvYVhNdWMzUmhZMnN1YkdWdVozUm9JQzBnTVYwZ1BTQnRZWEE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I1YVdWc1pDb2dkR2hwY3k1c2FXNWxSVzVrS0daaktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JtYkc5M1UyTmhiR0Z5S0hSNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YjI1T1pYZE1hVzVsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2Jtd2dQU0IwYUdsekxuTnZkWEpqWlM1cGJtUmxlRTltS0NkY1hHNG5LU0FySURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IzYUdsc1pTQW9ibXdnSVQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtOXVUbVYzVEdsdVpTaDBhR2x6TG05bVpuTmxkQ0FySUc1c0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnViQ0E5SUhSb2FYTXVjMjkxY21ObExtbHVaR1Y0VDJZb0oxeGNiaWNzSUc1c0tTQXJJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnZabVp6WlhRNklIUm9hWE11YjJabWMyVjBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXNWtaVzUwT2lCMGFHbHpMbWx1WkdWdWRDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOdmRYSmpaVG9nZEdocGN5NXpiM1Z5WTJWY2JpQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNGdJQ0FnYzNSaGNuUkNiRzlqYTFaaGJIVmxLSEJoY21WdWRDa2dlMXh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLSFJvYVhNdWRIbHdaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbllXeHBZWE1uT2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBbmMyTmhiR0Z5SnpwY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ0ozTnBibWRzWlMxeGRXOTBaV1F0YzJOaGJHRnlKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJSdmRXSnNaUzF4ZFc5MFpXUXRjMk5oYkdGeUp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVtYkc5M1UyTmhiR0Z5S0hSb2FYTXVkSGx3WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZGliRzlqYXkxelkyRnNZWEl0YUdWaFpHVnlKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGVYQmxPaUFuWW14dlkyc3RjMk5oYkdGeUp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJabWMyVjBPaUIwYUdsekxtOW1abk5sZEN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhVzVrWlc1ME9pQjBhR2x6TG1sdVpHVnVkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISnZjSE02SUZ0MGFHbHpMbk52ZFhKalpWUnZhMlZ1WFN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMjkxY21ObE9pQW5KMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkbWJHOTNMVzFoY0MxemRHRnlkQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkbWJHOTNMWE5sY1MxemRHRnlkQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RIbHdaVG9nSjJac2IzY3RZMjlzYkdWamRHbHZiaWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZERvZ2RHaHBjeTV2Wm1aelpYUXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsdVpHVnVkRG9nZEdocGN5NXBibVJsYm5Rc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wWVhKME9pQjBhR2x6TG5OdmRYSmpaVlJ2YTJWdUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwZEdWdGN6b2dXMTBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnVaRG9nVzExY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5jMlZ4TFdsMFpXMHRhVzVrSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBlWEJsT2lBbllteHZZMnN0YzJWeEp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJabWMyVjBPaUIwYUdsekxtOW1abk5sZEN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhVzVrWlc1ME9pQjBhR2x6TG1sdVpHVnVkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FYUmxiWE02SUZ0N0lITjBZWEowT2lCYmRHaHBjeTV6YjNWeVkyVlViMnRsYmwwZ2ZWMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWlhod2JHbGphWFF0YTJWNUxXbHVaQ2M2SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbTl1UzJWNVRHbHVaU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NISmxkaUE5SUdkbGRGQnlaWFpRY205d2N5aHdZWEpsYm5RcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOMFlYSjBJRDBnWjJWMFJtbHljM1JMWlhsVGRHRnlkRkJ5YjNCektIQnlaWFlwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMFlYSjBMbkIxYzJnb2RHaHBjeTV6YjNWeVkyVlViMnRsYmlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ0oySnNiMk5yTFcxaGNDY3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5bVpuTmxkRG9nZEdocGN5NXZabVp6WlhRc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x1WkdWdWREb2dkR2hwY3k1cGJtUmxiblFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbDBaVzF6T2lCYmV5QnpkR0Z5ZEN3Z1pYaHdiR2xqYVhSTFpYazZJSFJ5ZFdVZ2ZWMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5iV0Z3TFhaaGJIVmxMV2x1WkNjNklIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG05dVMyVjVUR2x1WlNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjSEpsZGlBOUlHZGxkRkJ5WlhaUWNtOXdjeWh3WVhKbGJuUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElITjBZWEowSUQwZ1oyVjBSbWx5YzNSTFpYbFRkR0Z5ZEZCeWIzQnpLSEJ5WlhZcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dVNklDZGliRzlqYXkxdFlYQW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlptWnpaWFE2SUhSb2FYTXViMlptYzJWMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm1SbGJuUTZJSFJvYVhNdWFXNWtaVzUwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBkR1Z0Y3pvZ1czc2djM1JoY25Rc0lHdGxlVG9nYm5Wc2JDd2djMlZ3T2lCYmRHaHBjeTV6YjNWeVkyVlViMnRsYmwwZ2ZWMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQWdJSDFjYmlBZ0lDQmhkRWx1WkdWdWRHVmtRMjl0YldWdWRDaHpkR0Z5ZEN3Z2FXNWtaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuUjVjR1VnSVQwOUlDZGpiMjF0Wlc1MEp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVhVzVrWlc1MElEdzlJR2x1WkdWdWRDbGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlITjBZWEowTG1WMlpYSjVLSE4wSUQwK0lITjBMblI1Y0dVZ1BUMDlJQ2R1Wlhkc2FXNWxKeUI4ZkNCemRDNTBlWEJsSUQwOVBTQW5jM0JoWTJVbktUdGNiaUFnSUNCOVhHNGdJQ0FnS21SdlkzVnRaVzUwUlc1a0tHUnZZMFZ1WkNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NTBlWEJsSUNFOVBTQW5aRzlqTFcxdlpHVW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWkc5alJXNWtMbVZ1WkNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2IyTkZibVF1Wlc1a0xuQjFjMmdvZEdocGN5NXpiM1Z5WTJWVWIydGxiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkc5alJXNWtMbVZ1WkNBOUlGdDBhR2x6TG5OdmRYSmpaVlJ2YTJWdVhUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5SNWNHVWdQVDA5SUNkdVpYZHNhVzVsSnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNWFXVnNaQ29nZEdocGN5NXdiM0FvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0FxYkdsdVpVVnVaQ2gwYjJ0bGJpa2dlMXh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLSFJvYVhNdWRIbHdaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblkyOXRiV0VuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpHOWpMWE4wWVhKMEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMlJ2WXkxbGJtUW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWm14dmR5MXpaWEV0Wlc1a0p6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMlpzYjNjdGJXRndMV1Z1WkNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHRZWEF0ZG1Gc2RXVXRhVzVrSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNWFXVnNaQ29nZEdocGN5NXdiM0FvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNWFXVnNaQ29nZEdocGN5NXpkR1Z3S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkdVpYZHNhVzVsSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbTl1UzJWNVRHbHVaU0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdabUZzYkhSb2NtOTFaMmhjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjNOd1lXTmxKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJOdmJXMWxiblFuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJoYkd3Z2IzUm9aWElnZG1Gc2RXVnpJR0Z5WlNCbGNuSnZjbk5jYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHOXJaVzR1Wlc1a0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYjJ0bGJpNWxibVF1Y0hWemFDaDBhR2x6TG5OdmRYSmpaVlJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnZhMlZ1TG1WdVpDQTlJRnQwYUdsekxuTnZkWEpqWlZSdmEyVnVYVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTUwZVhCbElEMDlQU0FuYm1WM2JHbHVaU2NwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIbHBaV3hrS2lCMGFHbHpMbkJ2Y0NncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnZXlCUVlYSnpaWElnZlR0Y2JpSXNJQ0pwYlhCdmNuUWdleUJEYjIxd2IzTmxjaUI5SUdaeWIyMGdKeTR2WTI5dGNHOXpaUzlqYjIxd2IzTmxjaTVxY3ljN1hHNXBiWEJ2Y25RZ2V5QkViMk4xYldWdWRDQjlJR1p5YjIwZ0p5NHZaRzlqTDBSdlkzVnRaVzUwTG1wekp6dGNibWx0Y0c5eWRDQjdJSEJ5WlhSMGFXWjVSWEp5YjNJc0lGbEJUVXhRWVhKelpVVnljbTl5SUgwZ1puSnZiU0FuTGk5bGNuSnZjbk11YW5Nbk8xeHVhVzF3YjNKMElIc2dkMkZ5YmlCOUlHWnliMjBnSnk0dmJHOW5MbXB6Snp0Y2JtbHRjRzl5ZENCN0lHbHpSRzlqZFcxbGJuUWdmU0JtY205dElDY3VMMjV2WkdWekwybGtaVzUwYVhSNUxtcHpKenRjYm1sdGNHOXlkQ0I3SUV4cGJtVkRiM1Z1ZEdWeUlIMGdabkp2YlNBbkxpOXdZWEp6WlM5c2FXNWxMV052ZFc1MFpYSXVhbk1uTzF4dWFXMXdiM0owSUhzZ1VHRnljMlZ5SUgwZ1puSnZiU0FuTGk5d1lYSnpaUzl3WVhKelpYSXVhbk1uTzF4dVhHNW1kVzVqZEdsdmJpQndZWEp6WlU5d2RHbHZibk1vYjNCMGFXOXVjeWtnZTF4dUlDQWdJR052Ym5OMElIQnlaWFIwZVVWeWNtOXljeUE5SUc5d2RHbHZibk11Y0hKbGRIUjVSWEp5YjNKeklDRTlQU0JtWVd4elpUdGNiaUFnSUNCamIyNXpkQ0JzYVc1bFEyOTFiblJsY2lBOUlHOXdkR2x2Ym5NdWJHbHVaVU52ZFc1MFpYSWdmSHdnS0hCeVpYUjBlVVZ5Y205eWN5QW1KaUJ1WlhjZ1RHbHVaVU52ZFc1MFpYSW9LU2tnZkh3Z2JuVnNiRHRjYmlBZ0lDQnlaWFIxY200Z2V5QnNhVzVsUTI5MWJuUmxjaXdnY0hKbGRIUjVSWEp5YjNKeklIMDdYRzU5WEc0dktpcGNiaUFxSUZCaGNuTmxJSFJvWlNCcGJuQjFkQ0JoY3lCaElITjBjbVZoYlNCdlppQlpRVTFNSUdSdlkzVnRaVzUwY3k1Y2JpQXFYRzRnS2lCRWIyTjFiV1Z1ZEhNZ2MyaHZkV3hrSUdKbElITmxjR0Z5WVhSbFpDQm1jbTl0SUdWaFkyZ2diM1JvWlhJZ1lua2dZQzR1TG1BZ2IzSWdZQzB0TFdBZ2JXRnlhMlZ5SUd4cGJtVnpMbHh1SUNwY2JpQXFJRUJ5WlhSMWNtNXpJRWxtSUdGdUlHVnRjSFI1SUdCa2IyTnpZQ0JoY25KaGVTQnBjeUJ5WlhSMWNtNWxaQ3dnYVhRZ2QybHNiQ0JpWlNCdlppQjBlWEJsWEc0Z0tpQWdJRVZ0Y0hSNVUzUnlaV0Z0SUdGdVpDQmpiMjUwWVdsdUlHRmtaR2wwYVc5dVlXd2djM1J5WldGdElHbHVabTl5YldGMGFXOXVMaUJKYmx4dUlDb2dJQ0JVZVhCbFUyTnlhWEIwTENCNWIzVWdjMmh2ZFd4a0lIVnpaU0JnSjJWdGNIUjVKeUJwYmlCa2IyTnpZQ0JoY3lCaElIUjVjR1VnWjNWaGNtUWdabTl5SUdsMExseHVJQ292WEc1bWRXNWpkR2x2YmlCd1lYSnpaVUZzYkVSdlkzVnRaVzUwY3loemIzVnlZMlVzSUc5d2RHbHZibk1nUFNCN2ZTa2dlMXh1SUNBZ0lHTnZibk4wSUhzZ2JHbHVaVU52ZFc1MFpYSXNJSEJ5WlhSMGVVVnljbTl5Y3lCOUlEMGdjR0Z5YzJWUGNIUnBiMjV6S0c5d2RHbHZibk1wTzF4dUlDQWdJR052Ym5OMElIQmhjbk5sY2lBOUlHNWxkeUJRWVhKelpYSW9iR2x1WlVOdmRXNTBaWEkvTG1Ga1pFNWxkMHhwYm1VcE8xeHVJQ0FnSUdOdmJuTjBJR052YlhCdmMyVnlJRDBnYm1WM0lFTnZiWEJ2YzJWeUtHOXdkR2x2Ym5NcE8xeHVJQ0FnSUdOdmJuTjBJR1J2WTNNZ1BTQkJjbkpoZVM1bWNtOXRLR052YlhCdmMyVnlMbU52YlhCdmMyVW9jR0Z5YzJWeUxuQmhjbk5sS0hOdmRYSmpaU2twS1R0Y2JpQWdJQ0JwWmlBb2NISmxkSFI1UlhKeWIzSnpJQ1ltSUd4cGJtVkRiM1Z1ZEdWeUtWeHVJQ0FnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJR1J2WXlCdlppQmtiMk56S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrYjJNdVpYSnliM0p6TG1admNrVmhZMmdvY0hKbGRIUnBabmxGY25KdmNpaHpiM1Z5WTJVc0lHeHBibVZEYjNWdWRHVnlLU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmtiMk11ZDJGeWJtbHVaM011Wm05eVJXRmphQ2h3Y21WMGRHbG1lVVZ5Y205eUtITnZkWEpqWlN3Z2JHbHVaVU52ZFc1MFpYSXBLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJR2xtSUNoa2IyTnpMbXhsYm1kMGFDQStJREFwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJrYjJOek8xeHVJQ0FnSUhKbGRIVnliaUJQWW1wbFkzUXVZWE56YVdkdUtGdGRMQ0I3SUdWdGNIUjVPaUIwY25WbElIMHNJR052YlhCdmMyVnlMbk4wY21WaGJVbHVabThvS1NrN1hHNTlYRzR2S2lvZ1VHRnljMlVnWVc0Z2FXNXdkWFFnYzNSeWFXNW5JR2x1ZEc4Z1lTQnphVzVuYkdVZ1dVRk5UQzVFYjJOMWJXVnVkQ0FxTDF4dVpuVnVZM1JwYjI0Z2NHRnljMlZFYjJOMWJXVnVkQ2h6YjNWeVkyVXNJRzl3ZEdsdmJuTWdQU0I3ZlNrZ2UxeHVJQ0FnSUdOdmJuTjBJSHNnYkdsdVpVTnZkVzUwWlhJc0lIQnlaWFIwZVVWeWNtOXljeUI5SUQwZ2NHRnljMlZQY0hScGIyNXpLRzl3ZEdsdmJuTXBPMXh1SUNBZ0lHTnZibk4wSUhCaGNuTmxjaUE5SUc1bGR5QlFZWEp6WlhJb2JHbHVaVU52ZFc1MFpYSS9MbUZrWkU1bGQweHBibVVwTzF4dUlDQWdJR052Ym5OMElHTnZiWEJ2YzJWeUlEMGdibVYzSUVOdmJYQnZjMlZ5S0c5d2RHbHZibk1wTzF4dUlDQWdJQzh2SUdCa2IyTmdJR2x6SUdGc2QyRjVjeUJ6WlhRZ1lua2dZMjl0Y0c5elpTNWxibVFvZEhKMVpTa2dZWFFnZEdobElIWmxjbmtnYkdGMFpYTjBYRzRnSUNBZ2JHVjBJR1J2WXlBOUlHNTFiR3c3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JmWkc5aklHOW1JR052YlhCdmMyVnlMbU52YlhCdmMyVW9jR0Z5YzJWeUxuQmhjbk5sS0hOdmRYSmpaU2tzSUhSeWRXVXNJSE52ZFhKalpTNXNaVzVuZEdncEtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFpHOWpLVnh1SUNBZ0lDQWdJQ0FnSUNBZ1pHOWpJRDBnWDJSdll6dGNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9aRzlqTG05d2RHbHZibk11Ykc5blRHVjJaV3dnSVQwOUlDZHphV3hsYm5RbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCa2IyTXVaWEp5YjNKekxuQjFjMmdvYm1WM0lGbEJUVXhRWVhKelpVVnljbTl5S0Y5a2IyTXVjbUZ1WjJVdWMyeHBZMlVvTUN3Z01pa3NJQ2ROVlV4VVNWQk1SVjlFVDBOVEp5d2dKMU52ZFhKalpTQmpiMjUwWVdsdWN5QnRkV3gwYVhCc1pTQmtiMk4xYldWdWRITTdJSEJzWldGelpTQjFjMlVnV1VGTlRDNXdZWEp6WlVGc2JFUnZZM1Z0Wlc1MGN5Z3BKeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tIQnlaWFIwZVVWeWNtOXljeUFtSmlCc2FXNWxRMjkxYm5SbGNpa2dlMXh1SUNBZ0lDQWdJQ0JrYjJNdVpYSnliM0p6TG1admNrVmhZMmdvY0hKbGRIUnBabmxGY25KdmNpaHpiM1Z5WTJVc0lHeHBibVZEYjNWdWRHVnlLU2s3WEc0Z0lDQWdJQ0FnSUdSdll5NTNZWEp1YVc1bmN5NW1iM0pGWVdOb0tIQnlaWFIwYVdaNVJYSnliM0lvYzI5MWNtTmxMQ0JzYVc1bFEyOTFiblJsY2lrcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdaRzlqTzF4dWZWeHVablZ1WTNScGIyNGdjR0Z5YzJVb2MzSmpMQ0J5WlhacGRtVnlMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdiR1YwSUY5eVpYWnBkbVZ5SUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NtVjJhWFpsY2lBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJQ0FnSUNCZmNtVjJhWFpsY2lBOUlISmxkbWwyWlhJN1hHNGdJQ0FnZlZ4dUlDQWdJR1ZzYzJVZ2FXWWdLRzl3ZEdsdmJuTWdQVDA5SUhWdVpHVm1hVzVsWkNBbUppQnlaWFpwZG1WeUlDWW1JSFI1Y0dWdlppQnlaWFpwZG1WeUlEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnSUNCdmNIUnBiMjV6SUQwZ2NtVjJhWFpsY2p0Y2JpQWdJQ0I5WEc0Z0lDQWdZMjl1YzNRZ1pHOWpJRDBnY0dGeWMyVkViMk4xYldWdWRDaHpjbU1zSUc5d2RHbHZibk1wTzF4dUlDQWdJR2xtSUNnaFpHOWpLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdJQ0JrYjJNdWQyRnlibWx1WjNNdVptOXlSV0ZqYUNoM1lYSnVhVzVuSUQwK0lIZGhjbTRvWkc5akxtOXdkR2x2Ym5NdWJHOW5UR1YyWld3c0lIZGhjbTVwYm1jcEtUdGNiaUFnSUNCcFppQW9aRzlqTG1WeWNtOXljeTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hrYjJNdWIzQjBhVzl1Y3k1c2IyZE1aWFpsYkNBaFBUMGdKM05wYkdWdWRDY3BYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJrYjJNdVpYSnliM0p6V3pCZE8xeHVJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQmtiMk11WlhKeWIzSnpJRDBnVzEwN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmtiMk11ZEc5S1V5aFBZbXBsWTNRdVlYTnphV2R1S0hzZ2NtVjJhWFpsY2pvZ1gzSmxkbWwyWlhJZ2ZTd2diM0IwYVc5dWN5a3BPMXh1ZlZ4dVpuVnVZM1JwYjI0Z2MzUnlhVzVuYVdaNUtIWmhiSFZsTENCeVpYQnNZV05sY2l3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0FnSUd4bGRDQmZjbVZ3YkdGalpYSWdQU0J1ZFd4c08xeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NtVndiR0ZqWlhJZ1BUMDlJQ2RtZFc1amRHbHZiaWNnZkh3Z1FYSnlZWGt1YVhOQmNuSmhlU2h5WlhCc1lXTmxjaWtwSUh0Y2JpQWdJQ0FnSUNBZ1gzSmxjR3hoWTJWeUlEMGdjbVZ3YkdGalpYSTdYRzRnSUNBZ2ZWeHVJQ0FnSUdWc2MyVWdhV1lnS0c5d2RHbHZibk1nUFQwOUlIVnVaR1ZtYVc1bFpDQW1KaUJ5WlhCc1lXTmxjaWtnZTF4dUlDQWdJQ0FnSUNCdmNIUnBiMjV6SUQwZ2NtVndiR0ZqWlhJN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoMGVYQmxiMllnYjNCMGFXOXVjeUE5UFQwZ0ozTjBjbWx1WnljcFhHNGdJQ0FnSUNBZ0lHOXdkR2x2Ym5NZ1BTQnZjSFJwYjI1ekxteGxibWQwYUR0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUc5d2RHbHZibk1nUFQwOUlDZHVkVzFpWlhJbktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbHVaR1Z1ZENBOUlFMWhkR2d1Y205MWJtUW9iM0IwYVc5dWN5azdYRzRnSUNBZ0lDQWdJRzl3ZEdsdmJuTWdQU0JwYm1SbGJuUWdQQ0F4SUQ4Z2RXNWtaV1pwYm1Wa0lEb2dhVzVrWlc1MElENGdPQ0EvSUhzZ2FXNWtaVzUwT2lBNElIMGdPaUI3SUdsdVpHVnVkQ0I5TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCN0lHdGxaWEJWYm1SbFptbHVaV1FnZlNBOUlHOXdkR2x2Ym5NZ1B6OGdjbVZ3YkdGalpYSWdQejhnZTMwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doYTJWbGNGVnVaR1ZtYVc1bFpDbGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2hwYzBSdlkzVnRaVzUwS0haaGJIVmxLU0FtSmlBaFgzSmxjR3hoWTJWeUtWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RtRnNkV1V1ZEc5VGRISnBibWNvYjNCMGFXOXVjeWs3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJFYjJOMWJXVnVkQ2gyWVd4MVpTd2dYM0psY0d4aFkyVnlMQ0J2Y0hScGIyNXpLUzUwYjFOMGNtbHVaeWh2Y0hScGIyNXpLVHRjYm4xY2JseHVaWGh3YjNKMElIc2djR0Z5YzJVc0lIQmhjbk5sUVd4c1JHOWpkVzFsYm5SekxDQndZWEp6WlVSdlkzVnRaVzUwTENCemRISnBibWRwWm5rZ2ZUdGNiaUlzSUNKcGJYQnZjblFnZXlCS2MyOXVUR2x1YXl3Z1RHbHVheUI5SUdaeWIyMGdYQ0psZUhCeVpYTnphVzl1TDJ4cGJtdGNJanRjYm1sdGNHOXlkQ0I3SUdkbGRFVjRkR1Z1YzJsdmJpd2daMlYwUm1sc1pWUnBkR3hsSUgwZ1puSnZiU0JjSW5WMGFXeHpMMjV2Y20xaGJHbDZaWEp6WENJN1hHNXBiWEJ2Y25RZ2V5QkRZV05vWldSTlpYUmhaR0YwWVN3Z1JtbHNaVk4wWVhSekxDQkdjbTl1ZEUxaGRIUmxja05oWTJobElIMGdabkp2YlNCY0ltOWljMmxrYVdGdVhDSTdYRzVwYlhCdmNuUWdleUJ3WVhKelpTQmhjeUJ3WVhKelpWbGhiV3dnZlNCbWNtOXRJRndpZVdGdGJGd2lPMXh1YVcxd2IzSjBJSHRrWldaaGRXeDBJR0Z6SUVKVWNtVmxmU0JtY205dElGd2ljMjl5ZEdWa0xXSjBjbVZsWENJN1hHNXBiWEJ2Y25RZ2UxeHVJQ0FnSUVsdWJHbHVaVVpwWld4a0xGeHVJQ0FnSUVwemIyNUpibXhwYm1WR2FXVnNaQ3hjYmlBZ0lDQmhjMGx1YkdsdVpVWnBaV3hrTEZ4dUlDQWdJR1Y0ZEhKaFkzUkdkV3hzVEdsdVpVWnBaV3hrTEZ4dUlDQWdJR1Y0ZEhKaFkzUkpibXhwYm1WR2FXVnNaSE1zWEc0Z0lDQWdhbk52YmtsdWJHbHVaVVpwWld4a0xGeHVmU0JtY205dElGd2lMaTlwYm14cGJtVXRabWxsYkdSY0lqdGNibWx0Y0c5eWRDQjdYRzRnSUNBZ1NuTnZiazFoY210a2IzZHVRbXh2WTJzc1hHNGdJQ0FnU25OdmJrMWhjbXRrYjNkdVRHbHpkRUpzYjJOckxGeHVJQ0FnSUVwemIyNU5ZWEpyWkc5M2JreHBjM1JKZEdWdExGeHVJQ0FnSUVwemIyNU5ZWEpyWkc5M2JsQmhaMlVzWEc0Z0lDQWdTbk52YmsxaGNtdGtiM2R1VTJWamRHbHZiaXhjYmlBZ0lDQktjMjl1VFdGeWEyUnZkMjVVWVhOclNYUmxiU3hjYmlBZ0lDQktjMjl1VFdGeWEyUnZkMjVFWVhSaFlteHZZMnNzWEc0Z0lDQWdTbk52YmsxaGNtdGtiM2R1UTI5a1pXSnNiMk5yTEZ4dUlDQWdJRXB6YjI1R2NtOXVkRzFoZEhSbGNrVnVkSEo1TEZ4dWZTQm1jbTl0SUZ3aWFXNWtaWGd2ZEhsd1pYTXZhbk52Ymk5dFlYSnJaRzkzYmx3aU8xeHVhVzF3YjNKMElIc2dTbk52YmtOdmJuWmxjbk5wYjI0Z2ZTQm1jbTl0SUZ3aWFXNWtaWGd2ZEhsd1pYTXZhbk52Ymk5amIyMXRiMjVjSWp0Y2JtbHRjRzl5ZENCN0lGbGhiV3hEYjI1MlpYSnphVzl1SUgwZ1puSnZiU0JjSW1sdVpHVjRMM1I1Y0dWekwzbGhiV3hjSWp0Y2JtbHRjRzl5ZENCN0lHMWhjRTlpYW1WamRGWmhiSFZsY3lCOUlHWnliMjBnWENKMWRHbHNjeTlrWVhSaFhDSTdYRzVjYmk4cUtpQk5ZWFJqYUdWeklIbGhiV3dnWkdGMFlXSnNiMk5yY3l3Z2QyaHBZMmdnYzJodmR5QjFjQ0JoY3lCcGJtUmxjR1Z1WkdWdWRDQnZZbXBsWTNSeklHbHVJSFJvWlNCa1lYUmhZMjl5WlNCcGJtUmxlQzRnS2k5Y2JtTnZibk4wSUZsQlRVeGZSRUZVUVY5U1JVZEZXQ0E5SUM5Z1lHQjVZVzFzT21SaGRHRXZhVHRjYmk4cUtpQk5ZWFJqYUdWeklIUm9aU0J6ZEdGeWRDQnZaaUJoYm5rZ1kyOWtaV0pzYjJOcklHWmxibU5sTGlBcUwxeHVZMjl1YzNRZ1EwOUVSVUpNVDBOTFgwWkZUa05GWDFKRlIwVllJRDBnTDE0b1B6cGdZR0I4Zm41K0tTZ3VLaWtrTDJsdE8xeHVMeW9xSUUxaGRHTm9aWE1nYkdsemRDQnBkR1Z0Y3lBb2FXNWpiSFZrYVc1bklHbHVjMmxrWlNCMFpYaDBJR0pzYjJOcmN5a3VJQ292WEc1amIyNXpkQ0JNU1ZOVVgwbFVSVTFmVWtWSFJWZ2dQU0F2WGx0Y1hITStYU29vWEZ4a0sxeGNMbnhjWEdRclhGd3BmRnhjS253dGZGeGNLeWxjWEhNcUtGeGNXeTU3TUN3eGZWeGNYU2svWEZ4ektpZ3VLaWtrTDIxMU8xeHVYRzR2S2lwY2JpQXFJRWRwZG1WdUlIUm9aU0J5WVhjZ2MyOTFjbU5sSUdGdVpDQlBZbk5wWkdsaGJpQnRaWFJoWkdGMFlTQm1iM0lnWVNCbmFYWmxiaUJ0WVhKclpHOTNiaUJtYVd4bExGeHVJQ29nY21WMGRYSnVJR1oxYkd3Z2JXRnlhMlJ2ZDI0Z1ptbHNaU0J0WlhSaFpHRjBZUzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHMWhjbXRrYjNkdVNXMXdiM0owS0Z4dUlDQWdJSEJoZEdnNklITjBjbWx1Wnl4Y2JpQWdJQ0J0WVhKclpHOTNiam9nYzNSeWFXNW5MRnh1SUNBZ0lHMWxkR0ZrWVhSaE9pQkRZV05vWldSTlpYUmhaR0YwWVN4Y2JpQWdJQ0J6ZEdGMGN6b2dSbWxzWlZOMFlYUnpYRzRwT2lCS2MyOXVUV0Z5YTJSdmQyNVFZV2RsSUh0Y2JpQWdJQ0JqYjI1emRDQjdJR3hwYm1WekxDQnRaWFJoWkdGMFlUb2djR0ZuWlUxbGRHRmtZWFJoTENCbWNtOXVkRzFoZEhSbGNpd2djMlZqZEdsdmJuTWdmU0E5SUcxaGNtdGtiM2R1VTI5MWNtTmxTVzF3YjNKMEtIQmhkR2dzSUcxaGNtdGtiM2R1TENCdFpYUmhaR0YwWVNrN1hHNGdJQ0FnWTI5dWMzUWdjR0ZuWlNBOUlHNWxkeUJRWVdkbFJHRjBZU2h3WVhSb0xDQnpkR0YwY3l3Z2JHbHVaWE11YkdWdVozUm9MQ0J3WVdkbFRXVjBZV1JoZEdFc0lITmxZM1JwYjI1ekxDQm1jbTl1ZEcxaGRIUmxjaWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjR0ZuWlM1aWRXbHNaQ2dwTzF4dWZWeHVYRzR2S2lvZ1NXMXdiM0owSUcxaGNtdGtiM2R1SUdacGJHVWdiV1YwWVdSaGRHRXNJSEJ5YjJSMVkybHVaeUJoYkd3Z2NtVnNaWFpoYm5RZ2JXRnlhMlJ2ZDI0Z1pHRjBZUzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdFlYSnJaRzkzYmxOdmRYSmpaVWx0Y0c5eWRDaGNiaUFnSUNCd1lYUm9PaUJ6ZEhKcGJtY3NYRzRnSUNBZ2JXRnlhMlJ2ZDI0NklITjBjbWx1Wnl4Y2JpQWdJQ0J0WlhSaFpHRjBZVG9nUTJGamFHVmtUV1YwWVdSaGRHRmNiaWs2SUh0Y2JpQWdJQ0JzYVc1bGN6b2djM1J5YVc1blcxMDdYRzRnSUNBZ2JXVjBZV1JoZEdFNklFMWxkR0ZrWVhSaE8xeHVJQ0FnSUdaeWIyNTBiV0YwZEdWeVB6b2dVbVZqYjNKa1BITjBjbWx1Wnl3Z1NuTnZia1p5YjI1MGJXRjBkR1Z5Ulc1MGNuaytPMXh1SUNBZ0lITmxZM1JwYjI1ek9pQlRaV04wYVc5dVJHRjBZVnRkTzF4dWZTQjdYRzRnSUNBZ1kyOXVjM1FnWm5KdmJuUnRZWFIwWlhJNklGSmxZMjl5WkR4emRISnBibWNzSUVwemIyNUdjbTl1ZEcxaGRIUmxja1Z1ZEhKNVBpQjhJSFZ1WkdWbWFXNWxaQ0E5SUcxbGRHRmtZWFJoTG1aeWIyNTBiV0YwZEdWeVhHNGdJQ0FnSUNBZ0lEOGdjR0Z5YzJWR2NtOXVkRzFoZEhSbGNrSnNiMk5yS0cxbGRHRmtZWFJoTG1aeWIyNTBiV0YwZEdWeUtWeHVJQ0FnSUNBZ0lDQTZJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQmpiMjV6ZENCc2FXNWxjeUE5SUcxaGNtdGtiM2R1TG5Od2JHbDBLQzljWEhKY1hHNThYRnh5ZkZ4Y2JpOHBPMXh1SUNBZ0lHTnZibk4wSUcxaGNtdGtiM2R1VFdWMFlXUmhkR0VnUFNCdVpYY2dUV1YwWVdSaGRHRW9LVHRjYmlBZ0lDQmpiMjV6ZENCelpXTjBhVzl1UVhKeVlYazZJRk5sWTNScGIyNUVZWFJoVzEwZ1BTQmJYVHRjYmlBZ0lDQXZMeTh2THk4dkx5OHZMeTh2TDF4dUlDQWdJQzh2SUZObFkzUnBiMjV6SUM4dlhHNGdJQ0FnTHk4dkx5OHZMeTh2THk4dkx5OWNibHh1SUNBZ0lHTnZibk4wSUcxbGRHRm9aV0ZrYVc1bmN5QTlJRzFsZEdGa1lYUmhMbWhsWVdScGJtZHpJRDgvSUZ0ZE8xeHVJQ0FnSUcxbGRHRm9aV0ZrYVc1bmN5NXpiM0owS0NoaExDQmlLU0E5UGlCaExuQnZjMmwwYVc5dUxuTjBZWEowTG14cGJtVWdMU0JpTG5CdmMybDBhVzl1TG5OMFlYSjBMbXhwYm1VcE8xeHVYRzRnSUNBZ1kyOXVjM1FnYzJWamRHbHZibk1nUFNCdVpYY2dRbFJ5WldVOGJuVnRZbVZ5TENCVFpXTjBhVzl1UkdGMFlUNG9kVzVrWldacGJtVmtMQ0FvWVN3Z1lpa2dQVDRnWVNBdElHSXBPMXh1SUNBZ0lHWnZjaUFvYkdWMElHbHVaR1Y0SUQwZ01Ec2dhVzVrWlhnZ1BDQnRaWFJoYUdWaFpHbHVaM011YkdWdVozUm9PeUJwYm1SbGVDc3JLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1Z1ZEhKNUlEMGdiV1YwWVdobFlXUnBibWR6VzJsdVpHVjRYVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQmxiblJ5ZVM1d2IzTnBkR2x2Ymk1emRHRnlkQzVzYVc1bE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUWdQU0JwYm1SbGVDQTlQU0J0WlhSaGFHVmhaR2x1WjNNdWJHVnVaM1JvSUMwZ01TQS9JR3hwYm1WekxteGxibWQwYUNBNklHMWxkR0ZvWldGa2FXNW5jMXRwYm1SbGVDQXJJREZkTG5CdmMybDBhVzl1TG5OMFlYSjBMbXhwYm1VN1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MyVmpkR2x2YmlBOUlHNWxkeUJUWldOMGFXOXVSR0YwWVNoemRHRnlkQ3dnWlc1a0xDQmxiblJ5ZVM1b1pXRmthVzVuTENCbGJuUnllUzVzWlhabGJDd2dhVzVrWlhnZ0t5QXhLVHRjYmlBZ0lDQWdJQ0FnYzJWamRHbHZibk11YzJWMEtITjBZWEowTENCelpXTjBhVzl1S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCQlpHUWdZVzRnYVcxd2JHbGphWFFnYzJWamRHbHZiaUJtYjNJZ2RHaGxJRndpYUdWaFpHbHVaMXdpSUhObFkzUnBiMjRnYjJZZ2RHaGxJSEJoWjJVZ2FXWWdkR2hsY21VZ2FYTWdibTkwSUdGdUlHbHRiV1ZrYVdGMFpTQm9aV0ZrWlhJZ1luVjBJSFJvWlhKbElHbHpYRzRnSUNBZ0x5OGdjMjl0WlNCamIyNTBaVzUwSUdsdUlIUm9aU0JtYVd4bExpQkpaaUIwYUdWeVpTQmhjbVVnYjNSb1pYSWdjMlZqZEdsdmJuTXNJSFJvWlc0Z1oyOGdkWEFnZEc4Z2RHaGhkQ3dnYjNSb1pYSjNhWE5sTENCbmJ5Qm1iM0lnZEdobElHVnVkR2x5WlNCbWFXeGxMbHh1SUNBZ0lHbG1JQ2h6WldOMGFXOXVjeTV6YVhwbElEMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0ZsYlhCMGVXeHBibVZ6S0d4cGJtVnpMQ0F3TENCc2FXNWxjeTVzWlc1bmRHZ3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCelpXTjBhVzl1SUQwZ2JtVjNJRk5sWTNScGIyNUVZWFJoS0RBc0lHeHBibVZ6TG14bGJtZDBhQ3dnWjJWMFJtbHNaVlJwZEd4bEtIQmhkR2dwTENBeExDQXdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxZM1JwYjI1ekxuTmxkQ2d3TENCelpXTjBhVzl1S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUM4dklFWnBibVFnZEdobElITjBZWEowSUc5bUlIUm9aU0JtYVhKemRDQnpaV04wYVc5dUxseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCbWFYSnpkQ0E5SUhObFkzUnBiMjV6TG1kbGRGQmhhWEpQY2s1bGVIUklhV2RvWlhJb01Day9MbHN4WFNFaE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNobWFYSnpkQzV6ZEdGeWRDQStJREFnSmlZZ0lXVnRjSFI1YkdsdVpYTW9iR2x1WlhNc0lEQXNJR1pwY25OMExuTjBZWEowS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZqZEdsdmJpQTlJRzVsZHlCVFpXTjBhVzl1UkdGMFlTZ3dMQ0JtYVhKemRDNXpkR0Z5ZEN3Z1oyVjBSbWxzWlZScGRHeGxLSEJoZEdncExDQXhMQ0F3S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWamRHbHZibk11YzJWMEtEQXNJSE5sWTNScGIyNHBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeTh2THk4dkx5OHZMeTh2WEc0Z0lDQWdMeThnUW14dlkydHpJQzh2WEc0Z0lDQWdMeTh2THk4dkx5OHZMeTh2WEc1Y2JpQWdJQ0F2THlCQmJHd2dZbXh2WTJ0ek95QjNaU0IzYVd4c0lHRnpjMmxuYmlCMFlXZHpJR0Z1WkNCdmRHaGxjaUJ0WlhSaFpHRjBZU0IwYnlCaWJHOWphM01nWVhNZ2QyVWdaVzVqYjNWdWRHVnlJSFJvWlcwdUlFRjBJSFJvWlNCbGJtUXNJRzl1YkhrZ1lteHZZMnR6SUhSb1lYUmNiaUFnSUNBdkx5Qm9ZWFpsSUdGamRIVmhiQ0J0WlhSaFpHRjBZU0IzYVd4c0lHSmxJSE4wYjNKbFpDQjBieUJ6WVhabElHOXVJRzFsYlc5eWVTQndjbVZ6YzNWeVpTNWNiaUFnSUNCamIyNXpkQ0JpYkc5amEzTWdQU0J1WlhjZ1FsUnlaV1U4Ym5WdFltVnlMQ0JDYkc5amEwUmhkR0UrS0hWdVpHVm1hVzVsWkN3Z0tHRXNJR0lwSUQwK0lHRWdMU0JpS1R0Y2JpQWdJQ0JzWlhRZ1lteHZZMnRQY21ScGJtRnNJRDBnTVR0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUdKc2IyTnJJRzltSUcxbGRHRmtZWFJoTG5ObFkzUnBiMjV6SUh4OElGdGRLU0I3WEc0Z0lDQWdJQ0FnSUM4dklGTnJhWEFnYUdWaFpHbHVaM01nWW14dlkydHpMQ0IzWlNCb1lXNWtiR1VnZEdobGJTQnpjR1ZqYVdGc2JIa2dZWE1nYzJWamRHbHZibk11WEc0Z0lDQWdJQ0FnSUdsbUlDaGliRzlqYXk1MGVYQmxJRDA5UFNCY0ltaGxZV1JwYm1kY0lpa2dZMjl1ZEdsdWRXVTdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQmliRzlqYXk1d2IzTnBkR2x2Ymk1emRHRnlkQzVzYVc1bE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUWdQU0JpYkc5amF5NXdiM05wZEdsdmJpNWxibVF1YkdsdVpTQXJJREU3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSE4wWVhKMFRHbHVaU0E5SUd4cGJtVnpXM04wWVhKMFhUc2dMeThnZEc4Z2RYTmxJSFJ2SUdOb1pXTnJJSFJvWlNCamIyUmxZbXh2WTJzZ2RIbHdaVnh1WEc0Z0lDQWdJQ0FnSUdsbUlDaGliRzlqYXk1MGVYQmxJRDA5UFNCY0lteHBjM1JjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWW14dlkydHpMbk5sZENoemRHRnlkQ3dnYm1WM0lFeHBjM1JDYkc5amEwUmhkR0VvYzNSaGNuUXNJR1Z1WkN3Z1lteHZZMnRQY21ScGJtRnNLeXNzSUdKc2IyTnJMbWxrS1NrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZbXh2WTJzdWRIbHdaU0E5UFNCY0ltTnZaR1ZjSWlBbUppQlpRVTFNWDBSQlZFRmZVa1ZIUlZndWRHVnpkQ2h6ZEdGeWRFeHBibVVwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQjVZVzFzT2lCemRISnBibWNnUFNCc2FXNWxjMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzV6YkdsalpTaHpkR0Z5ZENBcklERXNJR1Z1WkNBdElERXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMbXB2YVc0b1hDSmNYRzVjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdWNtVndiR0ZqWlNndlhGeDBMMmR0TENCY0lpQWdYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MzQnNhWFE2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJRXB6YjI1R2NtOXVkRzFoZEhSbGNrVnVkSEo1UGlBOUlIQmhjbk5sUm5KdmJuUnRZWFIwWlhKQ2JHOWpheWh3WVhKelpWbGhiV3dvZVdGdGJDa3BPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQmliRzlqYTNNdWMyVjBLSE4wWVhKMExDQnVaWGNnUkdGMFlXSnNiMk5yUkdGMFlTaHpkR0Z5ZEN3Z1pXNWtMQ0JpYkc5amEwOXlaR2x1WVd3ckt5d2djM0JzYVhRc0lHSnNiMk5yTG1sa0tTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWW14dlkyc3VkSGx3WlNBOVBUMGdYQ0pqYjJSbFhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRU5vWldOcklHbG1JSFJvWlNCaWJHOWpheUJwY3lCbVpXNWpaV1F1WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdFlYUmphQ0E5SUhOMFlYSjBUR2x1WlM1dFlYUmphQ2hEVDBSRlFreFBRMHRmUmtWT1EwVmZVa1ZIUlZncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRnRZWFJqYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRlJvYVhNZ2FYTWdZVzRnYVc1a1pXNTBaV1F0YzNSNWJHVWdZMjlrWldKc2IyTnJMbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0pzYjJOcmN5NXpaWFFvYzNSaGNuUXNJRzVsZHlCRGIyUmxZbXh2WTJ0RVlYUmhLSE4wWVhKMExDQmxibVFzSUdKc2IyTnJUM0prYVc1aGJDc3JMQ0JiWFN3Z1hDSnBibVJsYm5SY0lpd2djM1JoY25Rc0lHVnVaQ3dnWW14dlkyc3VhV1FwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JHRnVaM1ZoWjJWeklEMGdiV0YwWTJndWJHVnVaM1JvSUQ0Z01TQW1KaUJ0WVhSamFGc3hYU0EvSUcxaGRHTm9XekZkTG5Od2JHbDBLRndpTEZ3aUtTQTZJRnRkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdKc2IyTnJjeTV6WlhRb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wWVhKMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhjZ1EyOWtaV0pzYjJOclJHRjBZU2h6ZEdGeWRDd2daVzVrTENCaWJHOWphMDl5WkdsdVlXd3JLeXdnYkdGdVozVmhaMlZ6TENCY0ltWmxibU5sWkZ3aUxDQnpkR0Z5ZENBcklERXNJR1Z1WkNBdElERXNJR0pzYjJOckxtbGtLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCaWJHOWphM011YzJWMEtITjBZWEowTENCdVpYY2dRbUZ6WlVKc2IyTnJSR0YwWVNoemRHRnlkQ3dnWlc1a0xDQmliRzlqYTA5eVpHbHVZV3dyS3l3Z1lteHZZMnN1ZEhsd1pTd2dZbXh2WTJzdWFXUXBLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUVGa1pDQmliRzlqYTNNZ2RHOGdjMlZqZEdsdmJuTXVYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmliRzlqYXlCdlppQmliRzlqYTNNdWRtRnNkV1Z6S0NrcElIdGNiaUFnSUNBZ0lDQWdiRzl2YTNWd0tHSnNiMk5yTG5OMFlYSjBMQ0J6WldOMGFXOXVjeWsvTG1Kc2IyTnJLR0pzYjJOcktUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5OHZMeTh2THk4dkwxeHVJQ0FnSUM4dklFeHBjM1J6SUM4dlhHNGdJQ0FnTHk4dkx5OHZMeTh2THk5Y2JseHVJQ0FnSUM4dklFRnNiQ0JzYVhOMElHbDBaVzF6SUdsdUlHeHBjM1J6TGlCVGRHRnlkQ0IzYVhSb0lHRWdjMmx0Y0d4bElIUnlhWFpwWVd3Z2NHRnpjeTVjYmlBZ0lDQmpiMjV6ZENCamIyNTBaVzUwVW1WblpYZ2dQU0F2WGx0Y1hIUmNYR1pjWEhZZ1hTcGJYRnd0SzF4Y0tsMWNYSE1vWEZ4YkxseGNYVnhjY3lrL0x6dGNiaUFnSUNCamIyNXpkQ0J0WVhKclpYSlNaV2RsZUNBOUlDOWVLRDQvWEZ4elB5a3FLRnhjZEh4Y1hITXBLaTluTzF4dUlDQWdJR052Ym5OMElHeHBjM1JKZEdWdGN5QTlJRzVsZHlCQ1ZISmxaVHh1ZFcxaVpYSXNJRXhwYzNSSmRHVnRSR0YwWVQ0b2RXNWtaV1pwYm1Wa0xDQW9ZU3dnWWlrZ1BUNGdZU0F0SUdJcE8xeHVYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQnNhWE4wSUc5bUlHMWxkR0ZrWVhSaExteHBjM1JKZEdWdGN5QjhmQ0JiWFNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCc2FXNWxJRDBnYkdsdVpYTmJiR2x6ZEM1d2IzTnBkR2x2Ymk1emRHRnlkQzVzYVc1bFhUdGNibHh1SUNBZ0lDQWdJQ0F2THlCVVQwUlBPaUJKYlhCc1pXMWxiblFnWm14aFp5QjNhR2xqYUNCemEybHdjeUJwYm1SbGVHbHVaeUJzYVhOMElHbDBaVzF6TGx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J0WVhSamFDQTlJR3hwYm1VdWJXRjBZMmdvVEVsVFZGOUpWRVZOWDFKRlIwVllLVHRjYmlBZ0lDQWdJQ0FnYkdWMElITjViV0p2YkNBOUlIVnVaR1ZtYVc1bFpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhSbGVIUWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUdsbUlDaHRZWFJqYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNsdFltOXNJRDBnYldGMFkyaGJNVjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBaWGgwSUQwZ2JXRjBZMmhiTTEwN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBkR1Z0SUQwZ2JtVjNJRXhwYzNSSmRHVnRSR0YwWVNoY2JpQWdJQ0FnSUNBZ0lDQWdJR3hwYzNRdWNHOXphWFJwYjI0dWMzUmhjblF1YkdsdVpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUd4cGMzUXVjRzl6YVhScGIyNHVaVzVrTG14cGJtVWdLeUF4TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiR2x6ZEM1d1lYSmxiblFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnplVzFpYjJ3c1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYVhOMExtbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JHbHpkQzUwWVhOckxGeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdWNGRGeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0JzYVhOMFNYUmxiWE11YzJWMEtHbDBaVzB1YzNSaGNuUXNJR2wwWlcwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFbHVJSFJvWlNCelpXTnZibVFnYkdsemRDQndZWE56TENCaFkzUjFZV3hzZVNCamIyNXpkSEoxWTNRZ2RHaGxJR3hwYzNRZ2FHVnBjbUZ5WTJoNUxseHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2FYUmxiU0J2WmlCc2FYTjBTWFJsYlhNdWRtRnNkV1Z6S0NrcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0dsMFpXMHVjR0Z5Wlc1MFRHbHVaU0E4SURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR3hwYzNSQ2JHOWpheUE5SUdKc2IyTnJjeTVuWlhRb0xXbDBaVzB1Y0dGeVpXNTBUR2x1WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXeHBjM1JDYkc5amF5QjhmQ0FoS0d4cGMzUkNiRzlqYXk1MGVYQmxJRDA5UFNCY0lteHBjM1JjSWlrcElHTnZiblJwYm5WbE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBb2JHbHpkRUpzYjJOcklHRnpJRXhwYzNSQ2JHOWphMFJoZEdFcExtbDBaVzF6TG5CMWMyZ29hWFJsYlNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYVhOMFNYUmxiWE11WjJWMEtHbDBaVzB1Y0dGeVpXNTBUR2x1WlNrL0xtVnNaVzFsYm5SekxuQjFjMmdvYVhSbGJTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeTh2THk4dkx5OHZYRzRnSUNBZ0x5OGdWR0ZuY3lBdkwxeHVJQ0FnSUM4dkx5OHZMeTh2THk5Y2JseHVJQ0FnSUM4dklFWnZjaUJsWVdOb0lIUmhaeXdnWVhOemFXZHVJR2wwSUhSdklIUm9aU0JoY0hCeWIzQnlhV0YwWlNCelpXTjBhVzl1SUdGdVpDQmliRzlqYXlCMGFHRjBJR2wwSUdseklHRWdjR0Z5ZENCdlppNWNiaUFnSUNCbWIzSWdLR052Ym5OMElIUmhaMlJsWmlCdlppQnRaWFJoWkdGMFlTNTBZV2R6SUQ4L0lGdGRLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSFJoWnlBOUlIUmhaMlJsWmk1MFlXY3VjM1JoY25SelYybDBhQ2hjSWlOY0lpa2dQeUIwWVdka1pXWXVkR0ZuSURvZ1hDSWpYQ0lnS3lCMFlXZGtaV1l1ZEdGbk8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCc2FXNWxJRDBnZEdGblpHVm1MbkJ2YzJsMGFXOXVMbk4wWVhKMExteHBibVU3WEc0Z0lDQWdJQ0FnSUcxaGNtdGtiM2R1VFdWMFlXUmhkR0V1ZEdGbktIUmhaeWs3WEc1Y2JpQWdJQ0FnSUNBZ2JHOXZhM1Z3S0d4cGJtVXNJSE5sWTNScGIyNXpLVDh1YldWMFlXUmhkR0V1ZEdGbktIUmhaeWs3WEc0Z0lDQWdJQ0FnSUd4dmIydDFjQ2hzYVc1bExDQmliRzlqYTNNcFB5NXRaWFJoWkdGMFlTNTBZV2NvZEdGbktUdGNiaUFnSUNBZ0lDQWdiRzl2YTNWd0tHeHBibVVzSUd4cGMzUkpkR1Z0Y3lrL0xtMWxkR0ZrWVhSaExuUmhaeWgwWVdjcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFRmtaQ0JtY205dWRHMWhkSFJsY2lCMFlXZHpMbHh1SUNBZ0lHbG1JQ2h0WlhSaFpHRjBZUzVtY205dWRHMWhkSFJsY2lrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJSEpoZDNSaFp5QnZaaUJsZUhSeVlXTjBWR0ZuY3lodFpYUmhaR0YwWVM1bWNtOXVkRzFoZEhSbGNpa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhSaFp5QTlJSEpoZDNSaFp5NXpkR0Z5ZEhOWGFYUm9LRndpSTF3aUtTQS9JSEpoZDNSaFp5QTZJRndpSTF3aUlDc2djbUYzZEdGbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYldGeWEyUnZkMjVOWlhSaFpHRjBZUzUwWVdjb2RHRm5LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2THk4dkx5OHZMeTh2WEc0Z0lDQWdMeThnVEdsdWEzTWdMeTljYmlBZ0lDQXZMeTh2THk4dkx5OHZMMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdiR2x1YTJSbFppQnZaaUJ0WlhSaFpHRjBZUzVzYVc1cmN5QS9QeUJiWFNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCc2FXNXJJRDBnVEdsdWF5NXBibVpsY2loc2FXNXJaR1ZtTG14cGJtc3BPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnNhVzVsSUQwZ2JHbHVhMlJsWmk1d2IzTnBkR2x2Ymk1emRHRnlkQzVzYVc1bE8xeHVJQ0FnSUNBZ0lDQnRZWEpyWkc5M2JrMWxkR0ZrWVhSaExteHBibXNvYkdsdWF5azdYRzVjYmlBZ0lDQWdJQ0FnYkc5dmEzVndLR3hwYm1Vc0lITmxZM1JwYjI1ektUOHViV1YwWVdSaGRHRXViR2x1YXloc2FXNXJLVHRjYmlBZ0lDQWdJQ0FnYkc5dmEzVndLR3hwYm1Vc0lHSnNiMk5yY3lrL0xtMWxkR0ZrWVhSaExteHBibXNvYkdsdWF5azdYRzRnSUNBZ0lDQWdJR3h2YjJ0MWNDaHNhVzVsTENCc2FYTjBTWFJsYlhNcFB5NXRaWFJoWkdGMFlTNXNhVzVyS0d4cGJtc3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2WEc0Z0lDQWdMeThnUm5KdmJuUnRZWFIwWlhJZ1RHbHVhM01nTHk5Y2JpQWdJQ0F2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkwxeHVYRzRnSUNBZ0x5OGdSbkp2Ym5SdFlYUjBaWElnYkdsdWEzTWdZWEpsSUc5dWJIa2dZWE56YVdkdVpXUWdkRzhnZEdobElIQmhaMlV1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JzYVc1clpHVm1JRzltSUcxbGRHRmtZWFJoTG1aeWIyNTBiV0YwZEdWeVRHbHVhM01nUHo4Z1cxMHBJSHRjYmlBZ0lDQWdJQ0FnYldGeWEyUnZkMjVOWlhSaFpHRjBZUzVzYVc1cktFeHBibXN1YVc1bVpYSW9iR2x1YTJSbFppNXNhVzVyTENCbVlXeHpaU3dnYkdsdWEyUmxaaTVrYVhOd2JHRjVWR1Y0ZENrcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk5Y2JpQWdJQ0F2THlCSmJteHBibVVnUm1sbGJHUnpJQzh2WEc0Z0lDQWdMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMMXh1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JtYVdWc1pDQnZaaUJwZEdWeVlYUmxTVzVzYVc1bFJtbGxiR1J6S0d4cGJtVnpLU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JzYVc1bElEMGdabWxsYkdRdWNHOXphWFJwYjI0dWJHbHVaVHRjYmlBZ0lDQWdJQ0FnYldGeWEyUnZkMjVOWlhSaFpHRjBZUzVwYm14cGJtVkdhV1ZzWkNobWFXVnNaQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2JHOXZhM1Z3S0d4cGJtVXNJSE5sWTNScGIyNXpLVDh1YldWMFlXUmhkR0V1YVc1c2FXNWxSbWxsYkdRb1ptbGxiR1FwTzF4dUlDQWdJQ0FnSUNCc2IyOXJkWEFvYkdsdVpTd2dZbXh2WTJ0ektUOHViV1YwWVdSaGRHRXVhVzVzYVc1bFJtbGxiR1FvWm1sbGJHUXBPMXh1SUNBZ0lDQWdJQ0JzYjI5cmRYQW9iR2x1WlN3Z2JHbHpkRWwwWlcxektUOHViV1YwWVdSaGRHRXVhVzVzYVc1bFJtbGxiR1FvWm1sbGJHUXBPMXh1SUNBZ0lIMWNiaUFnSUNCelpXTjBhVzl1UVhKeVlYa3VjSFZ6YUNndUxpNXpaV04wYVc5dWN5NTJZV3gxWlhNb0tTazdYRzRnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2JHbHVaWE1zWEc0Z0lDQWdJQ0FnSUdaeWIyNTBiV0YwZEdWeUxGeHVJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlUb2diV0Z5YTJSdmQyNU5aWFJoWkdGMFlTeGNiaUFnSUNBZ0lDQWdjMlZqZEdsdmJuTTZJSE5sWTNScGIyNUJjbkpoZVN4Y2JpQWdJQ0I5TzF4dWZWeHVMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZYRzR2THlCUVlYSnphVzVuSUVGcFpITWdMeTljYmk4dkx5OHZMeTh2THk4dkx5OHZMeTh2TDF4dVhHNHZLaW9nUTJobFkyc2dhV1lnZEdobElHZHBkbVZ1SUd4cGJtVWdjbUZ1WjJVZ2FYTWdZV3hzSUdWdGNIUjVMaUJUZEdGeWRDQnBjeUJwYm1Oc2RYTnBkbVVzSUdWdVpDQmxlR05zZFhOcGRtVXVJQ292WEc1bWRXNWpkR2x2YmlCbGJYQjBlV3hwYm1WektHeHBibVZ6T2lCemRISnBibWRiWFN3Z2MzUmhjblE2SUc1MWJXSmxjaXdnWlc1a09pQnVkVzFpWlhJcE9pQmliMjlzWldGdUlIdGNiaUFnSUNCbWIzSWdLR3hsZENCcGJtUmxlQ0E5SUhOMFlYSjBPeUJwYm1SbGVDQThJR1Z1WkRzZ2FXNWtaWGdyS3lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYkdsdVpYTmJhVzVrWlhoZExuUnlhVzBvS1NBaFBUMGdYQ0pjSWlrZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGbHBaV3hrY3lCaGJHd2dhVzVzYVc1bElHWnBaV3hrY3lCbWIzVnVaQ0JwYmlCMGFHVWdaRzlqZFcxbGJuUWdZbmtnZEhKaGRtVnljMmx1WnlCc2FXNWxJR0o1SUd4cGJtVWdkR2h5YjNWbmFDQjBhR1VnWkc5amRXMWxiblF1SUZCbGNtWnZjbTF6SUhOdmJXVWdiM0IwYVcxcGVtRjBhVzl1YzF4dUlDb2dkRzhnYzJ0cGNDQmxlSFJ5WVMxc1lYSm5aU0JzYVc1bGN5d2dZVzVrSUdOaGJpQmlaU0JrYVhOaFlteGxaQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUtpQnBkR1Z5WVhSbFNXNXNhVzVsUm1sbGJHUnpLR052Ym5SbGJuUTZJSE4wY21sdVoxdGRLVG9nUjJWdVpYSmhkRzl5UEVsdWJHbHVaVVpwWld4a1BpQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2JHbHVaVzV2SUQwZ01Ec2diR2x1Wlc1dklEd2dZMjl1ZEdWdWRDNXNaVzVuZEdnN0lHeHBibVZ1YnlzcktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHeHBibVVnUFNCamIyNTBaVzUwVzJ4cGJtVnViMTA3WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdSbUZ6ZEMxaVlXbHNiM1YwSUdadmNpQnNhVzVsY3lCMGFHRjBJR0Z5WlNCMGIyOGdiRzl1WnlCdmNpQmtieUJ1YjNRZ1kyOXVkR0ZwYmlBbk9qb25MbHh1SUNBZ0lDQWdJQ0JwWmlBb2JHbHVaUzVzWlc1bmRHZ2dQaUF6TWpjMk9DQjhmQ0FoYkdsdVpTNXBibU5zZFdSbGN5aGNJam82WENJcEtTQmpiMjUwYVc1MVpUdGNibHh1SUNBZ0lDQWdJQ0F2THlCVVQwUlBPaUJTWlMxaFpHUWdjM1Z3Y0c5eWRDQm1iM0lnZEdodmMyVWdZM1Z6ZEc5dElHVnRiMnBwSUdacFpXeGtjeUJ2YmlCMFlYTnJjeUJoYm1RZ2MybHRhV3hoY2k1Y2JpQWdJQ0FnSUNBZ2JHVjBJR2x1YkdsdVpVWnBaV3hrY3lBOUlHVjRkSEpoWTNSSmJteHBibVZHYVdWc1pITW9iR2x1WlNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hwYm14cGJtVkdhV1ZzWkhNdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FXWnBaV3hrSUc5bUlHbHViR2x1WlVacFpXeGtjeWtnZVdsbGJHUWdZWE5KYm14cGJtVkdhV1ZzWkNocFptbGxiR1FzSUd4cGJtVnVieWs3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWm5Wc2JFeHBibVVnUFNCbGVIUnlZV04wUm5Wc2JFeHBibVZHYVdWc1pDaHNhVzVsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNobWRXeHNUR2x1WlNrZ2VXbGxiR1FnWVhOSmJteHBibVZHYVdWc1pDaG1kV3hzVEdsdVpTd2diR2x1Wlc1dktUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNibjFjYmx4dUx5b3FJRlJ2Y0Mxc1pYWmxiQ0JtZFc1amRHbHZiaUIzYUdsamFDQnRZWEJ6SUdFZ1dVRk5UQ0JpYkc5amF5QXRJR2x1WTJ4MVpHbHVaeUJtY205dWRHMWhkSFJsY2lBdElHbHVkRzhnWm5KdmJuUnRZWFIwWlhJZ1pXNTBjbWxsY3k0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQndZWEp6WlVaeWIyNTBiV0YwZEdWeVFteHZZMnNvWW14dlkyczZJRkpsWTI5eVpEeHpkSEpwYm1jc0lHRnVlVDRwT2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0JLYzI5dVJuSnZiblJ0WVhSMFpYSkZiblJ5ZVQ0Z2UxeHVJQ0FnSUdOdmJuTjBJSEpsYzNWc2REb2dVbVZqYjNKa1BITjBjbWx1Wnl3Z1NuTnZia1p5YjI1MGJXRjBkR1Z5Ulc1MGNuaytJRDBnZTMwN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCclpYa2diMllnVDJKcVpXTjBMbXRsZVhNb1lteHZZMnNwS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhaaGJIVmxJRDBnWW14dlkydGJhMlY1WFR0Y2JseHVJQ0FnSUNBZ0lDQnlaWE4xYkhSYmEyVjVMblJ2VEc5M1pYSkRZWE5sS0NsZElEMGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJyWlhrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpUb2dTbk52YmtOdmJuWmxjbk5wYjI0dWFuTnZiaWhaWVcxc1EyOXVkbVZ5YzJsdmJpNXNhWFJsY21Gc0tIWmhiSFZsS1Nrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WVhjNklIWmhiSFZsTEZ4dUlDQWdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzU5WEc1Y2JpOHFLaUJHYVc1a2N5QmhiaUJsYkdWdFpXNTBJSGRvYVdOb0lHTnZiblJoYVc1eklIUm9aU0JuYVhabGJpQnNhVzVsTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHeHZiMnQxY0R4VUlHVjRkR1Z1WkhNZ2V5QnpkR0Z5ZERvZ2JuVnRZbVZ5T3lCbGJtUTZJRzUxYldKbGNpQjlQaWhzYVc1bE9pQnVkVzFpWlhJc0lIUnlaV1U2SUVKVWNtVmxQRzUxYldKbGNpd2dWRDRwT2lCVUlId2dkVzVrWldacGJtVmtJSHRjYmlBZ0lDQmpiMjV6ZENCMFlYSm5aWFFnUFNCMGNtVmxMbWRsZEZCaGFYSlBjazVsZUhSTWIzZGxjaWhzYVc1bEtUOHVXekZkTzF4dUlDQWdJR2xtSUNoMFlYSm5aWFFnSmlZZ2RHRnlaMlYwTG1WdVpDQStQU0JzYVc1bEtTQnlaWFIxY200Z2RHRnlaMlYwTzF4dVhHNGdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjYm4xY2JseHVMeW9xSUVWNGRISmhZM1FnZEdGbmN5QnBiblJsYkd4cFoyVnVkR3g1SUdaeWIyMGdabkp2Ym5SdFlYUjBaWEl1SUVoaGJtUnNaWE1nWVhKeVlYbHpMQ0J1ZFcxaVpYSnpMQ0JoYm1RZ2MzUnlhVzVuY3k0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSFJ5WVdOMFZHRm5jeWh0WlhSaFpHRjBZVG9nUm5KdmJuUk5ZWFIwWlhKRFlXTm9aU2s2SUhOMGNtbHVaMXRkSUh0Y2JpQWdJQ0JzWlhRZ2RHRm5TMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLRzFsZEdGa1lYUmhLUzVtYVd4MFpYSW9LSFFwSUQwK0lIUXVkRzlNYjNkbGNrTmhjMlVvS1NBOVBTQmNJblJoWjNOY0lpQjhmQ0IwTG5SdlRHOTNaWEpEWVhObEtDa2dQVDBnWENKMFlXZGNJaWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR0ZuUzJWNWMxeHVJQ0FnSUNBZ0lDQXViV0Z3S0NocktTQTlQaUJ6Y0d4cGRFWnliMjUwYldGMGRHVnlWR0ZuVDNKQmJHbGhjeWh0WlhSaFpHRjBZVnRyWFN3Z0wxc3NYRnh6WFNzdktTbGNiaUFnSUNBZ0lDQWdMbkpsWkhWalpTZ29jQ3dnWXlrZ1BUNGdjQzVqYjI1allYUW9ZeWtzSUZ0ZEtWeHVJQ0FnSUNBZ0lDQXViV0Z3S0NoemRISXBJRDArSUNoemRISXVjM1JoY25SelYybDBhQ2hjSWlOY0lpa2dQeUJ6ZEhJZ09pQmNJaU5jSWlBcklITjBjaWtwTzF4dWZWeHVYRzR2S2lvZ1UzQnNhWFFnWVNCbWNtOXVkRzFoZEhSbGNpQnNhWE4wSUdsdWRHOGdjMlZ3WVhKaGRHVWdaV3hsYldWdWRITTdJR2hoYm1Sc1pYTWdZV04wZFdGc0lHeHBjM1J6TENCamIyMXRZU0J6WlhCaGNtRjBaV1FnYkdsemRITXNJR0Z1WkNCemFXNW5iR1VnWld4bGJXVnVkSE11SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2MzQnNhWFJHY205dWRHMWhkSFJsY2xSaFowOXlRV3hwWVhNb1pHRjBZVG9nWVc1NUxDQnZiam9nVW1WblJYaHdLVG9nYzNSeWFXNW5XMTBnZTF4dUlDQWdJR2xtSUNoa1lYUmhJRDA5SUc1MWJHd2dmSHdnWkdGMFlTQTlQU0IxYm1SbFptbHVaV1FwSUhKbGRIVnliaUJiWFR0Y2JpQWdJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2hrWVhSaEtTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdaR0YwWVZ4dUlDQWdJQ0FnSUNBZ0lDQWdMbVpwYkhSbGNpZ29jeWtnUFQ0Z0lTRnpLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xtMWhjQ2dvY3lrZ1BUNGdjM0JzYVhSR2NtOXVkRzFoZEhSbGNsUmhaMDl5UVd4cFlYTW9jeXdnYjI0cEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG5KbFpIVmpaU2dvY0N3Z1l5a2dQVDRnY0M1amIyNWpZWFFvWXlrc0lGdGRLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJHYjNKalpTQjBieUJoSUhOMGNtbHVaeUIwYnlCb1lXNWtiR1VnYm5WdFltVnljeUJoYm1RZ2MyOGdiMjR1WEc0Z0lDQWdjbVYwZFhKdUlDaGNJbHdpSUNzZ1pHRjBZU2xjYmlBZ0lDQWdJQ0FnTG5Od2JHbDBLRzl1S1Z4dUlDQWdJQ0FnSUNBdVptbHNkR1Z5S0NoMEtTQTlQaUFoSVhRcFhHNGdJQ0FnSUNBZ0lDNXRZWEFvS0hRcElEMCtJSFF1ZEhKcGJTZ3BLVnh1SUNBZ0lDQWdJQ0F1Wm1sc2RHVnlLQ2gwS1NBOVBpQjBMbXhsYm1kMGFDQStJREFwTzF4dWZWeHVYRzR2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkwxeHVMeThnUW5WcGJHUmxjaUJWZEdsc2FYUnBaWE1nTHk5Y2JpOHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2WEc1Y2JpOHFLaUJEYjI1MmFXVnVaVzUwSUhOb1lYSmxaQ0IxZEdsc2FYUjVJR1p2Y2lCMGNtRmphMmx1WnlCdFpYUmhaR0YwWVNBdElHeHBibXR6TENCMFlXZHpMQ0JoYm1RZ2MyOGdiMjR1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nVFdWMFlXUmhkR0VnZTF4dUlDQWdJSEIxWW14cFl5QjBZV2R6T2lCVFpYUThjM1J5YVc1blBpQTlJRzVsZHlCVFpYUW9LVHRjYmlBZ0lDQndkV0pzYVdNZ2JHbHVhM002SUV4cGJtdGJYU0E5SUZ0ZE8xeHVJQ0FnSUhCMVlteHBZeUJwYm14cGJtVkdhV1ZzWkhNNklGSmxZMjl5WkR4emRISnBibWNzSUVsdWJHbHVaVVpwWld4a1BpQTlJSHQ5TzF4dVhHNGdJQ0FnTHlvcUlFRmtaQ0JoSUhSaFp5QjBieUIwYUdVZ2JXVjBZV1JoZEdFdUlDb3ZYRzRnSUNBZ2NIVmliR2xqSUhSaFp5aDBZV2M2SUhOMGNtbHVaeWtnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMblJoWjNNdVlXUmtLSFJoWnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcUlFRmtaQ0JoSUd4cGJtc2dkRzhnZEdobElHMWxkR0ZrWVhSaExpQXFMMXh1SUNBZ0lIQjFZbXhwWXlCc2FXNXJLR3hwYm1zNklFeHBibXNwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWJHbHVhM011Wm1sdVpDZ29kaWtnUFQ0Z2RpNWxjWFZoYkhNb2JHbHVheWtwS1NCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViR2x1YTNNdWNIVnphQ2hzYVc1cktUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dRV1JrSUdGdUlHbHViR2x1WlNCbWFXVnNaQ0IwYnlCMGFHVWdiV1YwWVdSaGRHRXVJQ292WEc0Z0lDQWdjSFZpYkdsaklHbHViR2x1WlVacFpXeGtLR1pwWld4a09pQkpibXhwYm1WR2FXVnNaQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JzYjNkbGNpQTlJR1pwWld4a0xtdGxlUzUwYjB4dmQyVnlRMkZ6WlNncE8xeHVJQ0FnSUNBZ0lDQnBaaUFvVDJKcVpXTjBMbXRsZVhNb2RHaHBjeTVwYm14cGJtVkdhV1ZzWkhNcExuTnZiV1VvS0d0bGVTa2dQVDRnYTJWNUxuUnZURzkzWlhKRFlYTmxLQ2tnUFQwZ2JHOTNaWElwS1NCeVpYUjFjbTQ3WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVwYm14cGJtVkdhV1ZzWkhOYmJHOTNaWEpkSUQwZ1ptbGxiR1E3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeW9xSUZKbGRIVnliaUJoSUd4cGMzUWdiMllnZFc1cGNYVmxJR0ZrWkdWa0lIUmhaM011SUNvdlhHNGdJQ0FnY0hWaWJHbGpJR1pwYm1semFGUmhaM01vS1RvZ2MzUnlhVzVuVzEwZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1FYSnlZWGt1Wm5KdmJTaDBhR2x6TG5SaFozTXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJTWlhSMWNtNGdZU0JzYVhOMElHOW1JRXBUVDA0dGMyVnlhV0ZzYVhwbFpDQnNhVzVyY3k0Z0tpOWNiaUFnSUNCd2RXSnNhV01nWm1sdWFYTm9UR2x1YTNNb0tUb2dTbk52Ymt4cGJtdGJYU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxteHBibXR6TG0xaGNDZ29iR2x1YXlrZ1BUNGdiR2x1YXk1MGIwOWlhbVZqZENncEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dVbVYwZFhKdUlHRWdiR2x6ZENCdlppQktVMDlPTFhObGNtbGhiR2w2WldRZ2FXNXNhVzVsSUdacFpXeGtjeTRnS2k5Y2JpQWdJQ0J3ZFdKc2FXTWdabWx1YVhOb1NXNXNhVzVsUm1sbGJHUnpLQ2s2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJRXB6YjI1SmJteHBibVZHYVdWc1pENGdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiV0Z3VDJKcVpXTjBWbUZzZFdWektIUm9hWE11YVc1c2FXNWxSbWxsYkdSekxDQnFjMjl1U1c1c2FXNWxSbWxsYkdRcE8xeHVJQ0FnSUgxY2JuMWNibHh1THlvcUlFTnZiblpwWlc1bGJuUWdkWFJwYkdsMGVTQm1iM0lnWTI5dWMzUnlkV04wYVc1bklIQmhaMlVnYjJKcVpXTjBjeTRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJRWVdkbFJHRjBZU0I3WEc0Z0lDQWdjSFZpYkdsaklHTnZibk4wY25WamRHOXlLRnh1SUNBZ0lDQWdJQ0J3ZFdKc2FXTWdjR0YwYURvZ2MzUnlhVzVuTEZ4dUlDQWdJQ0FnSUNCd2RXSnNhV01nYzNSaGRITTZJRVpwYkdWVGRHRjBjeXhjYmlBZ0lDQWdJQ0FnY0hWaWJHbGpJR3hsYm1kMGFEb2diblZ0WW1WeUxGeHVJQ0FnSUNBZ0lDQndkV0pzYVdNZ2JXVjBZV1JoZEdFNklFMWxkR0ZrWVhSaExGeHVJQ0FnSUNBZ0lDQndkV0pzYVdNZ2MyVmpkR2x2Ym5NNklGTmxZM1JwYjI1RVlYUmhXMTBzWEc0Z0lDQWdJQ0FnSUhCMVlteHBZeUJtY205dWRHMWhkSFJsY2o4NklGSmxZMjl5WkR4emRISnBibWNzSUVwemIyNUdjbTl1ZEcxaGRIUmxja1Z1ZEhKNVBseHVJQ0FnSUNrZ2UzMWNibHh1SUNBZ0lIQjFZbXhwWXlCaWRXbHNaQ2dwT2lCS2MyOXVUV0Z5YTJSdmQyNVFZV2RsSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1J3WVhSb09pQjBhR2x6TG5CaGRHZ3NYRzRnSUNBZ0lDQWdJQ0FnSUNBa1kzUnBiV1U2SUhSb2FYTXVjM1JoZEhNdVkzUnBiV1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWtiWFJwYldVNklIUm9hWE11YzNSaGRITXViWFJwYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrYzJsNlpUb2dkR2hwY3k1emRHRjBjeTV6YVhwbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkdWNGRHVnVjMmx2YmpvZ1oyVjBSWGgwWlc1emFXOXVLSFJvYVhNdWNHRjBhQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWtjRzl6YVhScGIyNDZJSHNnYzNSaGNuUTZJREFzSUdWdVpEb2dkR2hwY3k1c1pXNW5kR2dnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1IwWVdkek9pQjBhR2x6TG0xbGRHRmtZWFJoTG1acGJtbHphRlJoWjNNb0tTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSc2FXNXJjem9nZEdocGN5NXRaWFJoWkdGMFlTNW1hVzVwYzJoTWFXNXJjeWdwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKR2x1Wm1sbGJHUnpPaUIwYUdsekxtMWxkR0ZrWVhSaExtWnBibWx6YUVsdWJHbHVaVVpwWld4a2N5Z3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pITmxZM1JwYjI1ek9pQjBhR2x6TG5ObFkzUnBiMjV6TG0xaGNDZ29lQ2tnUFQ0Z2VDNWlkV2xzWkNncEtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSbWNtOXVkRzFoZEhSbGNqb2dkR2hwY3k1bWNtOXVkRzFoZEhSbGNpeGNiaUFnSUNBZ0lDQWdmVHRjYmlBZ0lDQjlYRzU5WEc1Y2JpOHFLaUJEYjI1MmFXVnVaVzUwSUhWMGFXeHBkSGtnWm05eUlHTnZibk4wY25WamRHbHVaeUJ0WVhKclpHOTNiaUJ6WldOMGFXOXVjeTRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJUWldOMGFXOXVSR0YwWVNCN1hHNGdJQ0FnY0hWaWJHbGpJR0pzYjJOcmN6b2dRbXh2WTJ0RVlYUmhXMTBnUFNCYlhUdGNiaUFnSUNCd2RXSnNhV01nYldWMFlXUmhkR0U2SUUxbGRHRmtZWFJoSUQwZ2JtVjNJRTFsZEdGa1lYUmhLQ2s3WEc1Y2JpQWdJQ0J3ZFdKc2FXTWdZMjl1YzNSeWRXTjBiM0lvWEc0Z0lDQWdJQ0FnSUhCMVlteHBZeUJ6ZEdGeWREb2diblZ0WW1WeUxGeHVJQ0FnSUNBZ0lDQndkV0pzYVdNZ1pXNWtPaUJ1ZFcxaVpYSXNYRzRnSUNBZ0lDQWdJSEIxWW14cFl5QjBhWFJzWlRvZ2MzUnlhVzVuTEZ4dUlDQWdJQ0FnSUNCd2RXSnNhV01nYkdWMlpXdzZJRzUxYldKbGNpeGNiaUFnSUNBZ0lDQWdjSFZpYkdsaklHOXlaR2x1WVd3NklHNTFiV0psY2x4dUlDQWdJQ2tnZTMxY2JseHVJQ0FnSUhCMVlteHBZeUJpYkc5amF5aGliRzlqYXpvZ1FteHZZMnRFWVhSaEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdVlteHZZMnR6TG5CMWMyZ29ZbXh2WTJzcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhCMVlteHBZeUJpZFdsc1pDZ3BPaUJLYzI5dVRXRnlhMlJ2ZDI1VFpXTjBhVzl1SUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1IwYVhSc1pUb2dkR2hwY3k1MGFYUnNaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnZjbVJwYm1Gc09pQjBhR2x6TG05eVpHbHVZV3dzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWtiR1YyWld3NklIUm9hWE11YkdWMlpXd3NYRzRnSUNBZ0lDQWdJQ0FnSUNBa2RHRm5jem9nZEdocGN5NXRaWFJoWkdGMFlTNW1hVzVwYzJoVVlXZHpLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWthVzVtYVdWc1pITTZJSFJvYVhNdWJXVjBZV1JoZEdFdVptbHVhWE5vU1c1c2FXNWxSbWxsYkdSektDa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBa2JHbHVhM002SUhSb2FYTXViV1YwWVdSaGRHRXVabWx1YVhOb1RHbHVhM01vS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1J3YjNOcGRHbHZiam9nZXlCemRHRnlkRG9nZEdocGN5NXpkR0Z5ZEN3Z1pXNWtPaUIwYUdsekxtVnVaQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKR0pzYjJOcmN6b2dkR2hwY3k1aWJHOWphM011YldGd0tDaGliRzlqYXlrZ1BUNGdZbXh2WTJzdVluVnBiR1FvS1Nrc1hHNGdJQ0FnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVmVnh1WEc0dktpb2dRMjl1YzNSeWRXTjBjeUJ0WVhKclpHOTNiaUJzYVhOMElHSnNiMk5yY3lCemNHVmphV1pwWTJGc2JIa3VJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdUR2x6ZEVKc2IyTnJSR0YwWVNCN1hHNGdJQ0FnY0hWaWJHbGpJSFI1Y0dVNklITjBjbWx1WnlBOUlGd2liR2x6ZEZ3aU8xeHVJQ0FnSUhCMVlteHBZeUJ0WlhSaFpHRjBZVG9nVFdWMFlXUmhkR0VnUFNCdVpYY2dUV1YwWVdSaGRHRW9LVHRjYmlBZ0lDQndkV0pzYVdNZ2FYUmxiWE02SUV4cGMzUkpkR1Z0UkdGMFlWdGRJRDBnVzEwN1hHNWNiaUFnSUNCd2RXSnNhV01nWTI5dWMzUnlkV04wYjNJb2NIVmliR2xqSUhOMFlYSjBPaUJ1ZFcxaVpYSXNJSEIxWW14cFl5QmxibVE2SUc1MWJXSmxjaXdnY0hWaWJHbGpJRzl5WkdsdVlXdzZJRzUxYldKbGNpd2djSFZpYkdsaklHSnNiMk5yU1dRL09pQnpkSEpwYm1jcElIdDlYRzVjYmlBZ0lDQndkV0pzYVdNZ1luVnBiR1FvS1RvZ1NuTnZiazFoY210a2IzZHVUR2x6ZEVKc2IyTnJJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnZjbVJwYm1Gc09pQjBhR2x6TG05eVpHbHVZV3dzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWtjRzl6YVhScGIyNDZJSHNnYzNSaGNuUTZJSFJvYVhNdWMzUmhjblFzSUdWdVpEb2dkR2hwY3k1bGJtUWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnBibVpwWld4a2N6b2dkR2hwY3k1dFpYUmhaR0YwWVM1bWFXNXBjMmhKYm14cGJtVkdhV1ZzWkhNb0tTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSMFlXZHpPaUIwYUdsekxtMWxkR0ZrWVhSaExtWnBibWx6YUZSaFozTW9LU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnNhVzVyY3pvZ2RHaHBjeTV0WlhSaFpHRjBZUzVtYVc1cGMyaE1hVzVyY3lncExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkhSNWNHVTZJRndpYkdsemRGd2lMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pHSnNiMk5yU1dRNklIUm9hWE11WW14dlkydEpaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDUmxiR1Z0Wlc1MGN6b2dkR2hwY3k1cGRHVnRjeTV0WVhBb0tHbDBaVzBwSUQwK0lHbDBaVzB1WW5WcGJHUW9LU2tzWEc0Z0lDQWdJQ0FnSUgwN1hHNGdJQ0FnZlZ4dWZWeHVYRzR2S2lvZ1EyOXVjM1J5ZFdOMGN5QnRZWEpyWkc5M2JpQmpiMlJsWW14dlkydHpJSE53WldOcFptbGpZV3hzZVM0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCRGIyUmxZbXh2WTJ0RVlYUmhJSHRjYmlBZ0lDQndkV0pzYVdNZ2RIbHdaVG9nYzNSeWFXNW5JRDBnWENKamIyUmxZbXh2WTJ0Y0lqdGNiaUFnSUNCd2RXSnNhV01nYldWMFlXUmhkR0U2SUUxbGRHRmtZWFJoSUQwZ2JtVjNJRTFsZEdGa1lYUmhLQ2s3WEc1Y2JpQWdJQ0J3ZFdKc2FXTWdZMjl1YzNSeWRXTjBiM0lvWEc0Z0lDQWdJQ0FnSUhCMVlteHBZeUJ6ZEdGeWREb2diblZ0WW1WeUxGeHVJQ0FnSUNBZ0lDQndkV0pzYVdNZ1pXNWtPaUJ1ZFcxaVpYSXNYRzRnSUNBZ0lDQWdJSEIxWW14cFl5QnZjbVJwYm1Gc09pQnVkVzFpWlhJc1hHNGdJQ0FnSUNBZ0lIQjFZbXhwWXlCc1lXNW5kV0ZuWlhNNklITjBjbWx1WjF0ZExGeHVJQ0FnSUNBZ0lDQndkV0pzYVdNZ2MzUjViR1U2SUZ3aWFXNWtaVzUwWENJZ2ZDQmNJbVpsYm1ObFpGd2lMRnh1SUNBZ0lDQWdJQ0J3ZFdKc2FXTWdZMjl1ZEdWdWRGTjBZWEowT2lCdWRXMWlaWElzWEc0Z0lDQWdJQ0FnSUhCMVlteHBZeUJqYjI1MFpXNTBSVzVrT2lCdWRXMWlaWElzWEc0Z0lDQWdJQ0FnSUhCMVlteHBZeUJpYkc5amEwbGtQem9nYzNSeWFXNW5YRzRnSUNBZ0tTQjdmVnh1WEc0Z0lDQWdjSFZpYkdsaklHSjFhV3hrS0NrNklFcHpiMjVOWVhKclpHOTNia052WkdWaWJHOWpheUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWtkSGx3WlRvZ1hDSmpiMlJsWW14dlkydGNJaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnZjbVJwYm1Gc09pQjBhR2x6TG05eVpHbHVZV3dzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWtjRzl6YVhScGIyNDZJSHNnYzNSaGNuUTZJSFJvYVhNdWMzUmhjblFzSUdWdVpEb2dkR2hwY3k1bGJtUWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnBibVpwWld4a2N6b2dkR2hwY3k1dFpYUmhaR0YwWVM1bWFXNXBjMmhKYm14cGJtVkdhV1ZzWkhNb0tTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSMFlXZHpPaUIwYUdsekxtMWxkR0ZrWVhSaExtWnBibWx6YUZSaFozTW9LU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnNhVzVyY3pvZ2RHaHBjeTV0WlhSaFpHRjBZUzVtYVc1cGMyaE1hVzVyY3lncExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkdKc2IyTnJTV1E2SUhSb2FYTXVZbXh2WTJ0SlpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSc1lXNW5kV0ZuWlhNNklIUm9hWE11YkdGdVozVmhaMlZ6TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKSE4wZVd4bE9pQjBhR2x6TG5OMGVXeGxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pHTnZiblJsYm5SUWIzTnBkR2x2YmpvZ2V5QnpkR0Z5ZERvZ2RHaHBjeTVqYjI1MFpXNTBVM1JoY25Rc0lHVnVaRG9nZEdocGN5NWpiMjUwWlc1MFJXNWtJSDBzWEc0Z0lDQWdJQ0FnSUgwN1hHNGdJQ0FnZlZ4dWZWeHVYRzR2S2lvZ1EyOXVjM1J5ZFdOMGN5QnRZWEpyWkc5M2JpQmtZWFJoWW14dlkydHpJSE53WldOcFptbGpZV3hzZVM0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCRVlYUmhZbXh2WTJ0RVlYUmhJSHRjYmlBZ0lDQndkV0pzYVdNZ2RIbHdaVG9nYzNSeWFXNW5JRDBnWENKa1lYUmhZbXh2WTJ0Y0lqdGNiaUFnSUNCd2RXSnNhV01nYldWMFlXUmhkR0U2SUUxbGRHRmtZWFJoSUQwZ2JtVjNJRTFsZEdGa1lYUmhLQ2s3WEc1Y2JpQWdJQ0J3ZFdKc2FXTWdZMjl1YzNSeWRXTjBiM0lvWEc0Z0lDQWdJQ0FnSUhCMVlteHBZeUJ6ZEdGeWREb2diblZ0WW1WeUxGeHVJQ0FnSUNBZ0lDQndkV0pzYVdNZ1pXNWtPaUJ1ZFcxaVpYSXNYRzRnSUNBZ0lDQWdJSEIxWW14cFl5QnZjbVJwYm1Gc09pQnVkVzFpWlhJc1hHNGdJQ0FnSUNBZ0lIQjFZbXhwWXlCa1lYUmhPaUJTWldOdmNtUThjM1J5YVc1bkxDQktjMjl1Um5KdmJuUnRZWFIwWlhKRmJuUnllVDRzWEc0Z0lDQWdJQ0FnSUhCMVlteHBZeUJpYkc5amEwbGtQem9nYzNSeWFXNW5YRzRnSUNBZ0tTQjdmVnh1WEc0Z0lDQWdjSFZpYkdsaklHSjFhV3hrS0NrNklFcHpiMjVOWVhKclpHOTNia1JoZEdGaWJHOWpheUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWtkSGx3WlRvZ1hDSmtZWFJoWW14dlkydGNJaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnZjbVJwYm1Gc09pQjBhR2x6TG05eVpHbHVZV3dzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWtjRzl6YVhScGIyNDZJSHNnYzNSaGNuUTZJSFJvYVhNdWMzUmhjblFzSUdWdVpEb2dkR2hwY3k1bGJtUWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnBibVpwWld4a2N6b2dkR2hwY3k1dFpYUmhaR0YwWVM1bWFXNXBjMmhKYm14cGJtVkdhV1ZzWkhNb0tTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSMFlXZHpPaUIwYUdsekxtMWxkR0ZrWVhSaExtWnBibWx6YUZSaFozTW9LU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnNhVzVyY3pvZ2RHaHBjeTV0WlhSaFpHRjBZUzVtYVc1cGMyaE1hVzVyY3lncExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkdKc2IyTnJTV1E2SUhSb2FYTXVZbXh2WTJ0SlpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSa1lYUmhPaUIwYUdsekxtUmhkR0VzWEc0Z0lDQWdJQ0FnSUgwN1hHNGdJQ0FnZlZ4dWZWeHVYRzR2S2lvZ1FtRnpaU0JpYkc5amF5QnRaWFJoWkdGMFlTQjFjMlZrSUdadmNpQnViMjR0YzNCbFkybG1hV01nWW14dlkydHpMaUFxTDF4dVpYaHdiM0owSUdOc1lYTnpJRUpoYzJWQ2JHOWphMFJoZEdFZ2UxeHVJQ0FnSUhCMVlteHBZeUJ0WlhSaFpHRjBZVG9nVFdWMFlXUmhkR0VnUFNCdVpYY2dUV1YwWVdSaGRHRW9LVHRjYmx4dUlDQWdJSEIxWW14cFl5QmpiMjV6ZEhKMVkzUnZjaWhjYmlBZ0lDQWdJQ0FnY0hWaWJHbGpJSE4wWVhKME9pQnVkVzFpWlhJc1hHNGdJQ0FnSUNBZ0lIQjFZbXhwWXlCbGJtUTZJRzUxYldKbGNpeGNiaUFnSUNBZ0lDQWdjSFZpYkdsaklHOXlaR2x1WVd3NklHNTFiV0psY2l4Y2JpQWdJQ0FnSUNBZ2NIVmliR2xqSUhSNWNHVTZJSE4wY21sdVp5eGNiaUFnSUNBZ0lDQWdjSFZpYkdsaklHSnNiMk5yU1dRL09pQnpkSEpwYm1kY2JpQWdJQ0FwSUh0OVhHNWNiaUFnSUNCd2RXSnNhV01nWW5WcGJHUW9LVG9nU25OdmJrMWhjbXRrYjNkdVFteHZZMnNnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdKSFI1Y0dVNklIUm9hWE11ZEhsd1pTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSdmNtUnBibUZzT2lCMGFHbHpMbTl5WkdsdVlXd3NYRzRnSUNBZ0lDQWdJQ0FnSUNBa2NHOXphWFJwYjI0NklIc2djM1JoY25RNklIUm9hWE11YzNSaGNuUXNJR1Z1WkRvZ2RHaHBjeTVsYm1RZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNScGJtWnBaV3hrY3pvZ2RHaHBjeTV0WlhSaFpHRjBZUzVtYVc1cGMyaEpibXhwYm1WR2FXVnNaSE1vS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1IwWVdkek9pQjBhR2x6TG0xbGRHRmtZWFJoTG1acGJtbHphRlJoWjNNb0tTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNSc2FXNXJjem9nZEdocGN5NXRaWFJoWkdGMFlTNW1hVzVwYzJoTWFXNXJjeWdwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKR0pzYjJOclNXUTZJSFJvYVhNdVlteHZZMnRKWkN4Y2JpQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0IwZVhCbElFSnNiMk5yUkdGMFlTQTlJRXhwYzNSQ2JHOWphMFJoZEdFZ2ZDQkRiMlJsWW14dlkydEVZWFJoSUh3Z1JHRjBZV0pzYjJOclJHRjBZU0I4SUVKaGMyVkNiRzlqYTBSaGRHRTdYRzVjYmk4cUtpQlZkR2xzYVhSNUlHWnZjaUJqYjI1emRISjFZM1JwYm1jZ2JXRnlhMlJ2ZDI0Z2JHbHpkQ0JwZEdWdGN5NGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5Qk1hWE4wU1hSbGJVUmhkR0VnZTF4dUlDQWdJSEIxWW14cFl5QnRaWFJoWkdGMFlUb2dUV1YwWVdSaGRHRWdQU0J1WlhjZ1RXVjBZV1JoZEdFb0tUdGNiaUFnSUNCd2RXSnNhV01nWld4bGJXVnVkSE02SUV4cGMzUkpkR1Z0UkdGMFlWdGRJRDBnVzEwN1hHNGdJQ0FnY0hWaWJHbGpJR052Ym5OMGNuVmpkRzl5S0Z4dUlDQWdJQ0FnSUNCd2RXSnNhV01nYzNSaGNuUTZJRzUxYldKbGNpeGNiaUFnSUNBZ0lDQWdjSFZpYkdsaklHVnVaRG9nYm5WdFltVnlMRnh1SUNBZ0lDQWdJQ0J3ZFdKc2FXTWdjR0Z5Wlc1MFRHbHVaVG9nYm5WdFltVnlMRnh1SUNBZ0lDQWdJQ0J3ZFdKc2FXTWdjM2x0WW05c1B6b2djM1J5YVc1bkxGeHVJQ0FnSUNBZ0lDQndkV0pzYVdNZ1lteHZZMnRKWkQ4NklITjBjbWx1Wnl4Y2JpQWdJQ0FnSUNBZ2NIVmliR2xqSUhOMFlYUjFjejg2SUhOMGNtbHVaeXhjYmlBZ0lDQWdJQ0FnY0hWaWJHbGpJSFJsZUhRL09pQnpkSEpwYm1kY2JpQWdJQ0FwSUh0OVhHNWNiaUFnSUNCd2RXSnNhV01nWW5WcGJHUW9LVG9nU25OdmJrMWhjbXRrYjNkdVRHbHpkRWwwWlcwZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSkhCaGNtVnVkRXhwYm1VNklIUm9hWE11Y0dGeVpXNTBUR2x1WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1J3YjNOcGRHbHZiam9nZXlCemRHRnlkRG9nZEdocGN5NXpkR0Z5ZEN3Z1pXNWtPaUIwYUdsekxtVnVaQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKR0pzYjJOclNXUTZJSFJvYVhNdVlteHZZMnRKWkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1JsYkdWdFpXNTBjem9nZEdocGN5NWxiR1Z0Wlc1MGN5NXRZWEFvS0dWc1pXMWxiblFwSUQwK0lHVnNaVzFsYm5RdVluVnBiR1FvS1Nrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrZEhsd1pUb2dkR2hwY3k1emRHRjBkWE1nUHlCY0luUmhjMnRjSWlBNklGd2liR2x6ZEZ3aUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkdsdVptbGxiR1J6T2lCMGFHbHpMbTFsZEdGa1lYUmhMbVpwYm1semFFbHViR2x1WlVacFpXeGtjeWdwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKSFJoWjNNNklIUm9hWE11YldWMFlXUmhkR0V1Wm1sdWFYTm9WR0ZuY3lncExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkd4cGJtdHpPaUIwYUdsekxtMWxkR0ZrWVhSaExtWnBibWx6YUV4cGJtdHpLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWtjM1JoZEhWek9pQjBhR2x6TG5OMFlYUjFjeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDUnplVzFpYjJ3NklIUm9hWE11YzNsdFltOXNMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pIUmxlSFE2SUhSb2FYTXVkR1Y0ZEN4Y2JpQWdJQ0FnSUNBZ2ZTQmhjeUJLYzI5dVRXRnlhMlJ2ZDI1VVlYTnJTWFJsYlR0Y2JpQWdJQ0I5WEc1OVhHNGlMQ0FpYVcxd2IzSjBJSHNnVEdsdWF5QjlJR1p5YjIwZ1hDSmxlSEJ5WlhOemFXOXVMMnhwYm10Y0lqdGNibWx0Y0c5eWRDQjdJRVJoZEdWVWFXMWxMQ0JFZFhKaGRHbHZiaUI5SUdaeWIyMGdYQ0pzZFhodmJsd2lPMXh1YVcxd2IzSjBJQ29nWVhNZ1VDQm1jbTl0SUZ3aWNHRnljMmx0Ylc5dVhDSTdYRzVwYlhCdmNuUWdlMXh1SUNBZ0lFSnBibUZ5ZVU5d0xGeHVJQ0FnSUVWNGNISmxjM05wYjI0c1hHNGdJQ0FnUlhod2NtVnpjMmx2Ym5Nc1hHNGdJQ0FnVEdGdFltUmhSWGh3Y21WemMybHZiaXhjYmlBZ0lDQk1hWE4wUlhod2NtVnpjMmx2Yml4Y2JpQWdJQ0JNYVhSbGNtRnNSWGh3Y21WemMybHZiaXhjYmlBZ0lDQlBZbXBsWTNSRmVIQnlaWE56YVc5dUxGeHVJQ0FnSUZaaGNtbGhZbXhsUlhod2NtVnpjMmx2Yml4Y2JuMGdabkp2YlNCY0lpNHZaWGh3Y21WemMybHZibHdpTzF4dWFXMXdiM0owSUdWdGIycHBVbVZuWlhnZ1puSnZiU0JjSW1WdGIycHBMWEpsWjJWNFhDSTdYRzVwYlhCdmNuUWdlMXh1SUNBZ0lFbHVaR1Y0UTJocGJHUlBaaXhjYmlBZ0lDQkpibVJsZUZCaGRHZ3NYRzRnSUNBZ1NXNWtaWGhKWkN4Y2JpQWdJQ0JKYm1SbGVFNXZkQ3hjYmlBZ0lDQkpibVJsZUZCaGNtVnVkRTltTEZ4dUlDQWdJRWx1WkdWNFVYVmxjbmtzWEc0Z0lDQWdTVzVrWlhoVVlXZG5aV1FzWEc0Z0lDQWdTVzVrWlhoVWVYQmxaQ3hjYmlBZ0lDQkpibVJsZUV4cGJtdGxaQ3hjYmlBZ0lDQkpibVJsZUVacFpXeGtMRnh1SUNBZ0lFbHVaR1Y0Ulhod2NtVnpjMmx2Yml4Y2JuMGdabkp2YlNCY0ltbHVaR1Y0TDNSNWNHVnpMMmx1WkdWNExYRjFaWEo1WENJN1hHNXBiWEJ2Y25RZ2V5QnViM0p0WVd4cGVtVkVkWEpoZEdsdmJpQjlJR1p5YjIwZ1hDSjFkR2xzY3k5dWIzSnRZV3hwZW1WeWMxd2lPMXh1YVcxd2IzSjBJSHNnVEdsMFpYSmhiQ0I5SUdaeWIyMGdYQ0psZUhCeVpYTnphVzl1TDJ4cGRHVnlZV3hjSWp0Y2JseHVMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dlhHNHZMeUJRWVhKemFXNW5JRkJ5YVcxcGRHbDJaWE1nTHk5Y2JpOHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2TDF4dVhHNHZLaW9nVUhKcGJXbDBhWFpsSUhCaGNuTnBibWNnWm05eUlHTnZiVzF2Ym14NUlITmxaVzRnZEhsd1pYTXVJQ292WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUZCeWFXMXBkR2wyWlhOTVlXNW5kV0ZuWlNCN1hHNGdJQ0FnYm5WdFltVnlPaUJ1ZFcxaVpYSTdYRzRnSUNBZ2MzUnlhVzVuT2lCemRISnBibWM3WEc0Z0lDQWdaWE5qWVhCbFEyaGhjbUZqZEdWeU9pQnpkSEpwYm1jN1hHNGdJQ0FnWW05dmJEb2dZbTl2YkdWaGJqdGNiaUFnSUNCMFlXYzZJSE4wY21sdVp6dGNiaUFnSUNCcFpHVnVkR2xtYVdWeU9pQnpkSEpwYm1jN1hHNGdJQ0FnYkdsdWF6b2dUR2x1YXp0Y2JpQWdJQ0JsYldKbFpFeHBibXM2SUV4cGJtczdYRzRnSUNBZ2NtOXZkRVJoZEdVNklFUmhkR1ZVYVcxbE8xeHVJQ0FnSUdSaGRHVlRhRzl5ZEdoaGJtUTZJR3RsZVc5bUlIUjVjR1Z2WmlCRVFWUkZYMU5JVDFKVVNFRk9SRk03WEc0Z0lDQWdaR0YwWlRvZ1JHRjBaVlJwYldVN1hHNGdJQ0FnWkdGMFpWQnNkWE02SUVSaGRHVlVhVzFsTzF4dUlDQWdJR1IxY21GMGFXOXVWSGx3WlRvZ2EyVjViMllnZEhsd1pXOW1JRVJWVWtGVVNVOU9YMVJaVUVWVE8xeHVJQ0FnSUdSMWNtRjBhVzl1T2lCRWRYSmhkR2x2Ymp0Y2JpQWdJQ0J5WVhkT2RXeHNPaUJ6ZEhKcGJtYzdYRzVjYmlBZ0lDQmlhVzVoY25sUWJIVnpUV2x1ZFhNNklFSnBibUZ5ZVU5d08xeHVJQ0FnSUdKcGJtRnllVTExYkVScGRqb2dRbWx1WVhKNVQzQTdYRzRnSUNBZ1ltbHVZWEo1UTI5dGNHRnlaVTl3T2lCQ2FXNWhjbmxQY0R0Y2JpQWdJQ0JpYVc1aGNubEJibVJQY0RvZ1FtbHVZWEo1VDNBN1hHNGdJQ0FnWW1sdVlYSjVUM0pQY0RvZ1FtbHVZWEo1VDNBN1hHNWNiaUFnSUNBdkx5Qk1hWFJsY21Gc0lHWnBaV3hrSUhCaGNuTnBibWNnWm05eUlHbHVaMlZ6ZEdsdVp5QnBibXhwYm1VZ1ptbGxiR1J6SUdGdVpDQm1jbTl1ZEcxaGRIUmxjaTVjYmlBZ0lDQmhkRzl0U1c1c2FXNWxSbWxsYkdRNklFeHBkR1Z5WVd3N1hHNGdJQ0FnYVc1c2FXNWxSbWxsYkdSTWFYTjBPaUJNYVhSbGNtRnNXMTA3WEc0Z0lDQWdhVzVzYVc1bFJtbGxiR1E2SUV4cGRHVnlZV3c3WEc1OVhHNWNiaThxS2lCSmJYQnNaVzFsYm5SaGRHbHZibk1nWm05eUlHMWhibmtnY0hKcGJXbDBhWFpsY3k0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCUVVrbE5TVlJKVmtWVElEMGdVQzVqY21WaGRHVk1ZVzVuZFdGblpUeFFjbWx0YVhScGRtVnpUR0Z1WjNWaFoyVStLSHRjYmlBZ0lDQnVkVzFpWlhJNklDaGZLU0E5UGx4dUlDQWdJQ0FnSUNCUUxuSmxaMlY0Y0NndkxUOWJNQzA1WFNzb1hGd3VXekF0T1YwcktUOHZLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xtMWhjQ2dvYzNSeUtTQTlQaUJPZFcxaVpYSXVjR0Z5YzJWR2JHOWhkQ2h6ZEhJcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG1SbGMyTW9YQ0p1ZFcxaVpYSmNJaWtzWEc1Y2JpQWdJQ0F2THlCQklIRjFiM1JsTFhOMWNuSnZkVzVrWldRZ2MzUnlhVzVuSUhkb2FXTm9JSE4xY0hCdmNuUnpJR1Z6WTJGd1pTQmphR0Z5WVdOMFpYSnpJQ2duWEZ3bktTNWNiaUFnSUNCemRISnBibWM2SUNoeEtTQTlQbHh1SUNBZ0lDQWdJQ0JRTG5OMGNtbHVaeWduWENJbktWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG5Sb1pXNG9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdVQzVoYkhRb2NTNWxjMk5oY0dWRGFHRnlZV04wWlhJc0lGQXVibTl1WlU5bUtDZGNJbHhjWEZ3bktTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTG1GMFRHVmhjM1FvTUNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMbTFoY0Nnb1kyaGhjbk1wSUQwK0lHTm9ZWEp6TG1wdmFXNG9YQ0pjSWlrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXVjMnRwY0NoUUxuTjBjbWx1WnlnblhDSW5LU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDNWtaWE5qS0Z3aWMzUnlhVzVuWENJcExGeHVYRzRnSUNBZ1pYTmpZWEJsUTJoaGNtRmpkR1Z5T2lBb1h5a2dQVDVjYmlBZ0lDQWdJQ0FnVUM1emRISnBibWNvWENKY1hGeGNYQ0lwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXVkR2hsYmloUUxtRnVlU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDNXRZWEFvS0dWelkyRndaV1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJKWmlCM1pTQmhjbVVnWlhOallYQnBibWNnWVNCaVlXTnJjMnhoYzJnZ2IzSWdZU0J4ZFc5MFpTd2djR0Z6Y3lCcGJpQnZiaUJwYmlCbGMyTmhjR1ZrSUdadmNtMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWlhOallYQmxaQ0E5UFQwZ0oxd2lKeWtnY21WMGRYSnVJQ2RjSWljN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR1Z6WTJGd1pXUWdQVDA5SUZ3aVhGeGNYRndpS1NCeVpYUjFjbTRnWENKY1hGeGNYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnlaWFIxY200Z1hDSmNYRnhjWENJZ0t5QmxjMk5oY0dWa08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrc1hHNWNiaUFnSUNBdkx5QkJJR0p2YjJ4bFlXNGdkSEoxWlM5bVlXeHpaU0IyWVd4MVpTNWNiaUFnSUNCaWIyOXNPaUFvWHlrZ1BUNWNiaUFnSUNBZ0lDQWdVQzV5WldkbGVIQW9MM1J5ZFdWOFptRnNjMlY4VkhKMVpYeEdZV3h6WlM4cFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1YldGd0tDaHpkSElwSUQwK0lITjBjaTUwYjB4dmQyVnlRMkZ6WlNncElEMDlJRndpZEhKMVpWd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xtUmxjMk1vWENKaWIyOXNaV0Z1WENJcExGeHVYRzRnSUNBZ0x5OGdRU0IwWVdjZ2IyWWdkR2hsSUdadmNtMGdKeU56ZEhWbVppOW9aV3hzYnkxMGFHVnlaU2N1WEc0Z0lDQWdkR0ZuT2lBb1h5a2dQVDVjYmlBZ0lDQWdJQ0FnVUM1elpYRk5ZWEFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQlFMbk4wY21sdVp5aGNJaU5jSWlrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JRTG1Gc2RDaFFMbkpsWjJWNGNDZ3ZXMTVjWEhVeU1EQXdMVnhjZFRJd05rWmNYSFV5UlRBd0xWeGNkVEpGTjBZbklWd2lJeVFsSmlncEtpc3NMam83UEQwK1AwQmVZSHQ4Zlg1Y1hGdGNYRjFjWEZ4Y1hGeHpYUzhwTG1SbGMyTW9YQ0owWlhoMFhDSXBLUzV0WVc1NUtDa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBb2MzUmhjblFzSUhKbGMzUXBJRDArSUhOMFlYSjBJQ3NnY21WemRDNXFiMmx1S0Z3aVhDSXBYRzRnSUNBZ0lDQWdJQ2t1WkdWell5aGNJblJoWjF3aUtTeGNibHh1SUNBZ0lDOHZJRUVnZG1GeWFXRmliR1VnYVdSbGJuUnBabWxsY2l3Z2QyaHBZMmdnYVhNZ1lXeHdhR0Z1ZFcxbGNtbGpJR0Z1WkNCdGRYTjBJSE4wWVhKMElIZHBkR2dnWVNCc1pYUjBaWElnYjNJdUxpNGdaVzF2YW1rdVhHNGdJQ0FnYVdSbGJuUnBabWxsY2pvZ0tGOHBJRDArWEc0Z0lDQWdJQ0FnSUZBdWMyVnhUV0Z3S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdVQzVoYkhRb1VDNXlaV2RsZUhBb0wxdGNYSEI3VEdWMGRHVnlmU1JkTDNVcExDQlFMbkpsWjJWNGNDaEZUVTlLU1Y5U1JVZEZXQ2t1WkdWell5aGNJblJsZUhSY0lpa3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1VDNWhiSFFvVUM1eVpXZGxlSEFvTDFzd0xUbGNYSEI3VEdWMGRHVnlmU1JmTFYwdmRTa3NJRkF1Y21WblpYaHdLRVZOVDBwSlgxSkZSMFZZS1M1a1pYTmpLRndpZEdWNGRGd2lLU2t1YldGdWVTZ3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0tHWnBjbk4wTENCeVpYTjBLU0E5UGlCbWFYSnpkQ0FySUhKbGMzUXVhbTlwYmloY0lsd2lLVnh1SUNBZ0lDQWdJQ0FwTG1SbGMyTW9YQ0oyWVhKcFlXSnNaVndpS1N4Y2JseHVJQ0FnSUM4dklFRnVJRTlpYzJsa2FXRnVJR3hwYm1zZ2IyWWdkR2hsSUdadmNtMGdXMXM4YkdsdWF6NWRYUzVjYmlBZ0lDQnNhVzVyT2lBb1h5a2dQVDVjYmlBZ0lDQWdJQ0FnVUM1eVpXZGxlSEFvTDF4Y1cxeGNXeWhiWGx4Y1cxeGNYVjBxUHlsY1hGMWNYRjB2ZFN3Z01TbGNiaUFnSUNBZ0lDQWdJQ0FnSUM1dFlYQW9LR3hwYm10SmJtNWxjaWtnUFQ0Z1RHbHVheTV3WVhKelpVbHVibVZ5S0d4cGJtdEpibTVsY2lrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1WkdWell5aGNJbVpwYkdVZ2JHbHVhMXdpS1N4Y2JseHVJQ0FnSUM4dklFRnVJR1Z0WW1Wa1pHRmliR1VnYkdsdWF5QjNhR2xqYUNCallXNGdjM1JoY25RZ2QybDBhQ0FuSVNjdUlGUm9hWE1nYjNabGNteGhjSE1nZDJsMGFDQjBhR1VnYm05eWJXRnNJRzVsWjJGMGFXOXVJRzl3WlhKaGRHOXlMQ0J6YnlCcGRDQnBjeUJ2Ym14NVhHNGdJQ0FnTHk4Z2NISnZkbWxrWldRZ1ptOXlJRzFsZEdGa1lYUmhJSEJoY25OcGJtY3VYRzRnSUNBZ1pXMWlaV1JNYVc1ck9pQW9jU2tnUFQ1Y2JpQWdJQ0FnSUNBZ1VDNXpaWEZOWVhBb1VDNXpkSEpwYm1jb1hDSWhYQ0lwTG1GMFRXOXpkQ2d4S1N3Z2NTNXNhVzVyTENBb2NDd2diQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIQXViR1Z1WjNSb0lENGdNQ2tnYkM1bGJXSmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYkR0Y2JpQWdJQ0FnSUNBZ2ZTa3VaR1Z6WXloY0ltWnBiR1VnYkdsdWExd2lLU3hjYmx4dUlDQWdJQzh2SUVKcGJtRnllU0J3YkhWeklHOXlJRzFwYm5WeklHOXdaWEpoZEc5eUxseHVJQ0FnSUdKcGJtRnllVkJzZFhOTmFXNTFjem9nS0Y4cElEMCtYRzRnSUNBZ0lDQWdJRkF1Y21WblpYaHdLQzljWEN0OExTOHBYRzRnSUNBZ0lDQWdJQ0FnSUNBdWJXRndLQ2h6ZEhJcElEMCtJSE4wY2lCaGN5QkNhVzVoY25sUGNDbGNiaUFnSUNBZ0lDQWdJQ0FnSUM1a1pYTmpLRndpSnlzbklHOXlJQ2N0SjF3aUtTeGNibHh1SUNBZ0lDOHZJRUpwYm1GeWVTQjBhVzFsY3lCdmNpQmthWFpwWkdVZ2IzQmxjbUYwYjNJdVhHNGdJQ0FnWW1sdVlYSjVUWFZzUkdsMk9pQW9YeWtnUFQ1Y2JpQWdJQ0FnSUNBZ1VDNXlaV2RsZUhBb0wxeGNLbnhjWEM5OEpTOHBYRzRnSUNBZ0lDQWdJQ0FnSUNBdWJXRndLQ2h6ZEhJcElEMCtJSE4wY2lCaGN5QkNhVzVoY25sUGNDbGNiaUFnSUNBZ0lDQWdJQ0FnSUM1a1pYTmpLRndpSnlvbklHOXlJQ2N2SnlCdmNpQW5KU2RjSWlrc1hHNWNiaUFnSUNBdkx5QkNhVzVoY25rZ1kyOXRjR0Z5YVhOdmJpQnZjR1Z5WVhSdmNpNWNiaUFnSUNCaWFXNWhjbmxEYjIxd1lYSmxUM0E2SUNoZktTQTlQbHh1SUNBZ0lDQWdJQ0JRTG5KbFoyVjRjQ2d2UGoxOFBEMThJVDE4UG53OGZEMHZLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xtMWhjQ2dvYzNSeUtTQTlQaUJ6ZEhJZ1lYTWdRbWx1WVhKNVQzQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBdVpHVnpZeWhjSWljK1BTY2diM0lnSnp3OUp5QnZjaUFuSVQwbklHOXlJQ2M5SnlCdmNpQW5QaWNnYjNJZ0p6d25YQ0lwTEZ4dVhHNGdJQ0FnTHk4Z1FtbHVZWEo1SUdKdmIyeGxZVzRnWTI5dFltbHVZWFJwYjI0Z2IzQmxjbUYwYjNJdVhHNGdJQ0FnWW1sdVlYSjVRVzVrVDNBNklDaGZLU0E5UGx4dUlDQWdJQ0FnSUNCUUxuSmxaMlY0Y0NndllXNWtmQ1l2YVNsY2JpQWdJQ0FnSUNBZ0lDQWdJQzV0WVhBb0tGOXpkSElwSUQwK0lGd2lKbHdpSUdGeklFSnBibUZ5ZVU5d0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG1SbGMyTW9YQ0luWVc1a0oxd2lLU3hjYmlBZ0lDQmlhVzVoY25sUGNrOXdPaUFvWHlrZ1BUNWNiaUFnSUNBZ0lDQWdVQzV5WldkbGVIQW9MMjl5ZkZ4Y2ZDOXBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xtMWhjQ2dvWDNOMGNpa2dQVDRnWENKOFhDSWdZWE1nUW1sdVlYSjVUM0FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXVaR1Z6WXloY0lpZHZjaWRjSWlrc1hHNWNiaUFnSUNBdkx5QkJJR1JoZEdVZ2QyaHBZMmdnWTJGdUlHSmxJRmxaV1ZrdFRVMWJMVVJFVkVoSU9tMXRPbk56WFM1Y2JpQWdJQ0J5YjI5MFJHRjBaVG9nS0Y4cElEMCtYRzRnSUNBZ0lDQWdJRkF1YzJWeFRXRndLRkF1Y21WblpYaHdLQzljWEdSN05IMHZLU3dnVUM1emRISnBibWNvWENJdFhDSXBMQ0JRTG5KbFoyVjRjQ2d2WEZ4a2V6SjlMeWtzSUNoNVpXRnlMQ0JmTENCdGIyNTBhQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRVJoZEdWVWFXMWxMbVp5YjIxUFltcGxZM1FvZXlCNVpXRnlPaUJPZFcxaVpYSXVjR0Z5YzJWSmJuUW9lV1ZoY2lrc0lHMXZiblJvT2lCT2RXMWlaWEl1Y0dGeWMyVkpiblFvYlc5dWRHZ3BJSDBwTzF4dUlDQWdJQ0FnSUNCOUtTNWtaWE5qS0Z3aVpHRjBaU0JwYmlCbWIzSnRZWFFnV1ZsWldTMU5UVnN0UkVSVVNFZ3RUVTB0VTFNdVRWTmRYQ0lwTEZ4dUlDQWdJR1JoZEdWVGFHOXlkR2hoYm1RNklDaGZLU0E5UGx4dUlDQWdJQ0FnSUNCUUxtRnNkQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDNHVMazlpYW1WamRDNXJaWGx6S0VSQlZFVmZVMGhQVWxSSVFVNUVVeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F1YzI5eWRDZ29ZU3dnWWlrZ1BUNGdZaTVzWlc1bmRHZ2dMU0JoTG14bGJtZDBhQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F1YldGd0tGQXVjM1J5YVc1bktWeHVJQ0FnSUNBZ0lDQXBJR0Z6SUZBdVVHRnljMlZ5UEd0bGVXOW1JSFI1Y0dWdlppQkVRVlJGWDFOSVQxSlVTRUZPUkZNK0xGeHVJQ0FnSUdSaGRHVTZJQ2h4S1NBOVBseHVJQ0FnSUNBZ0lDQmphR0ZwYms5d2REeEVZWFJsVkdsdFpUNG9YRzRnSUNBZ0lDQWdJQ0FnSUNCeExuSnZiM1JFWVhSbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnS0hsdE9pQkVZWFJsVkdsdFpTa2dQVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JRTG5ObGNVMWhjQ2hRTG5OMGNtbHVaeWhjSWkxY0lpa3NJRkF1Y21WblpYaHdLQzljWEdSN01uMHZLU3dnS0Y4c0lHUmhlU2tnUFQ0Z2VXMHVjMlYwS0hzZ1pHRjVPaUJPZFcxaVpYSXVjR0Z5YzJWSmJuUW9aR0Y1S1NCOUtTa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBb2VXMWtPaUJFWVhSbFZHbHRaU2tnUFQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCUUxuTmxjVTFoY0NoUUxuTjBjbWx1WnloY0lsUmNJaWtzSUZBdWNtVm5aWGh3S0M5Y1hHUjdNbjB2S1N3Z0tGOHNJR2h2ZFhJcElEMCtJSGx0WkM1elpYUW9leUJvYjNWeU9pQk9kVzFpWlhJdWNHRnljMlZKYm5Rb2FHOTFjaWtnZlNrcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnS0hsdFpHZzZJRVJoZEdWVWFXMWxLU0E5UGx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUZBdWMyVnhUV0Z3S0ZBdWMzUnlhVzVuS0Z3aU9sd2lLU3dnVUM1eVpXZGxlSEFvTDF4Y1pIc3lmUzhwTENBb1h5d2diV2x1ZFhSbEtTQTlQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNWJXUm9Mbk5sZENoN0lHMXBiblYwWlRvZ1RuVnRZbVZ5TG5CaGNuTmxTVzUwS0cxcGJuVjBaU2tnZlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnS0hsdFpHaHRPaUJFWVhSbFZHbHRaU2tnUFQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCUUxuTmxjVTFoY0NoUUxuTjBjbWx1WnloY0lqcGNJaWtzSUZBdWNtVm5aWGh3S0M5Y1hHUjdNbjB2S1N3Z0tGOHNJSE5sWTI5dVpDa2dQVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VXMWthRzB1YzJWMEtIc2djMlZqYjI1a09pQk9kVzFpWlhJdWNHRnljMlZKYm5Rb2MyVmpiMjVrS1NCOUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBb2VXMWthRzF6T2lCRVlYUmxWR2x0WlNrZ1BUNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQlFMbUZzZENoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdVQzV6WlhGTllYQW9VQzV6ZEhKcGJtY29YQ0l1WENJcExDQlFMbkpsWjJWNGNDZ3ZYRnhrZXpOOUx5a3NJQ2hmTENCdGFXeHNhWE5sWTI5dVpDa2dQVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGx0WkdodGN5NXpaWFFvZXlCdGFXeHNhWE5sWTI5dVpEb2dUblZ0WW1WeUxuQmhjbk5sU1c1MEtHMXBiR3hwYzJWamIyNWtLU0I5S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCUUxuTjFZMk5sWldRb2VXMWthRzF6S1NBdkx5QndZWE56WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2hrZERvZ1JHRjBaVlJwYldVcElEMCtYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdVQzVoYkhRb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRkF1YzJWeFRXRndLRkF1YzNSeWFXNW5LRndpSzF3aUtTNXZjaWhRTG5OMGNtbHVaeWhjSWkxY0lpa3BMQ0JRTG5KbFoyVjRjQ2d2WEZ4a2V6RXNNbjBvT2x4Y1pIc3lmU2svTHlrc0lDaHdiU3dnYUhJcElEMCtYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtkQzV6WlhSYWIyNWxLRndpVlZSRFhDSWdLeUJ3YlNBcklHaHlMQ0I3SUd0bFpYQk1iMk5oYkZScGJXVTZJSFJ5ZFdVZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdVQzV6WlhGTllYQW9VQzV6ZEhKcGJtY29YQ0phWENJcExDQW9LU0E5UGlCa2RDNXpaWFJhYjI1bEtGd2lkWFJqWENJc0lIc2dhMlZsY0V4dlkyRnNWR2x0WlRvZ2RISjFaU0I5S1Nrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRkF1YzJWeFRXRndLRkF1YzNSeWFXNW5LRndpVzF3aUtTd2dVQzV5WldkbGVIQW9MMXN3TFRsQkxWcGhMWG9yTFZ4Y0wxMHJMM1VwTENCUUxuTjBjbWx1WnloY0lsMWNJaWtzSUNoZllTd2dlbTl1WlN3Z1gySXBJRDArWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrZEM1elpYUmFiMjVsS0hwdmJtVXNJSHNnYTJWbGNFeHZZMkZzVkdsdFpUb2dkSEoxWlNCOUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS1Z4dUlDQWdJQ0FnSUNBcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1WVhOelpYSjBLQ2hrZERvZ1JHRjBaVlJwYldVcElEMCtJR1IwTG1selZtRnNhV1FzSUZ3aWRtRnNhV1FnWkdGMFpWd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xtUmxjMk1vWENKa1lYUmxJR2x1SUdadmNtMWhkQ0JaV1ZsWkxVMU5XeTFFUkZSSVNDMU5UUzFUVXk1TlUxMWNJaWtzWEc1Y2JpQWdJQ0F2THlCQklHUmhkR1VzSUhCc2RYTWdkbUZ5YVc5MWN5QnphRzl5ZEdoaGJtUWdkR2x0WlhNZ2IyWWdaR0Y1SUdsMElHTnZkV3hrSUdKbExseHVJQ0FnSUdSaGRHVlFiSFZ6T2lBb2NTa2dQVDVjYmlBZ0lDQWdJQ0FnVUM1aGJIUThSR0YwWlZScGJXVStLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NTNWtZWFJsVTJodmNuUm9ZVzVrTG0xaGNDZ29aQ2tnUFQ0Z1JFRlVSVjlUU0U5U1ZFaEJUa1JUVzJSZEtDa3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NTNWtZWFJsWEc0Z0lDQWdJQ0FnSUNrdVpHVnpZeWhjSW1SaGRHVWdhVzRnWm05eWJXRjBJRmxaV1ZrdFRVMWJMVVJFVkVoSUxVMU5MVk5UTGsxVFhTQnZjaUJwYmlCemFHOXlkR2hoYm1SY0lpa3NYRzVjYmlBZ0lDQXZMeUJCSUdSMWNtRjBhVzl1SUc5bUlIUnBiV1V1WEc0Z0lDQWdaSFZ5WVhScGIyNVVlWEJsT2lBb1h5a2dQVDVjYmlBZ0lDQWdJQ0FnVUM1aGJIUW9YRzRnSUNBZ0lDQWdJQ0FnSUNBdUxpNVBZbXBsWTNRdWEyVjVjeWhFVlZKQlZFbFBUbDlVV1ZCRlV5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjMjl5ZENnb1lTd2dZaWtnUFQ0Z1lpNXNaVzVuZEdnZ0xTQmhMbXhsYm1kMGFDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXViV0Z3S0ZBdWMzUnlhVzVuS1Z4dUlDQWdJQ0FnSUNBcElHRnpJRkF1VUdGeWMyVnlQR3RsZVc5bUlIUjVjR1Z2WmlCRVZWSkJWRWxQVGw5VVdWQkZVejRzWEc0Z0lDQWdaSFZ5WVhScGIyNDZJQ2h4S1NBOVBseHVJQ0FnSUNBZ0lDQlFMbk5sY1UxaGNDaHhMbTUxYldKbGNpd2dVQzV2Y0hSWGFHbDBaWE53WVdObExDQnhMbVIxY21GMGFXOXVWSGx3WlN3Z0tHTnZkVzUwTENCZkxDQjBLU0E5UGx4dUlDQWdJQ0FnSUNBZ0lDQWdSRlZTUVZSSlQwNWZWRmxRUlZOYmRGMHViV0Z3Vlc1cGRITW9LSGdwSUQwK0lIZ2dLaUJqYjNWdWRDbGNiaUFnSUNBZ0lDQWdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xuTmxjRUo1TVNoUUxuTjBjbWx1WnloY0lpeGNJaWt1ZEhKcGJTaFFMbTl3ZEZkb2FYUmxjM0JoWTJVcExtOXlLRkF1YjNCMFYyaHBkR1Z6Y0dGalpTa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBdWJXRndLQ2hrZFhKaGRHbHZibk1wSUQwK0lHUjFjbUYwYVc5dWN5NXlaV1IxWTJVb0tIQXNJR01wSUQwK0lIQXVjR3gxY3loaktTa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBdVpHVnpZeWhjSW1SMWNtRjBhVzl1SUd4cGEyVWdOR2h5TW0xcGJsd2lLU3hjYmx4dUlDQWdJQzh2SUVFZ2NtRjNJRzUxYkd3Z2RtRnNkV1V1WEc0Z0lDQWdjbUYzVG5Wc2JEb2dLRjhwSUQwK0lGQXVjM1J5YVc1bktGd2liblZzYkZ3aUtTeGNibHh1SUNBZ0lDOHZJRWx1YkdsdVpTQm1hV1ZzWkNCMllXeDFaU0J3WVhKemFXNW5MbHh1SUNBZ0lHRjBiMjFKYm14cGJtVkdhV1ZzWkRvZ0tIRXBJRDArWEc0Z0lDQWdJQ0FnSUZBdVlXeDBLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NTNWtZWFJsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjUzVrZFhKaGRHbHZiaTV0WVhBb0tHUXBJRDArSUc1dmNtMWhiR2w2WlVSMWNtRjBhVzl1S0dRcEtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUhFdWMzUnlhVzVuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjUzUwWVdjc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J4TG1WdFltVmtUR2x1YXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEV1WW05dmJDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhFdWJuVnRZbVZ5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjUzV5WVhkT2RXeHNYRzRnSUNBZ0lDQWdJQ2tzWEc0Z0lDQWdhVzVzYVc1bFJtbGxiR1JNYVhOME9pQW9jU2tnUFQ0Z2NTNWhkRzl0U1c1c2FXNWxSbWxsYkdRdWMyVndRbmtvVUM1emRISnBibWNvWENJc1hDSXBMblJ5YVcwb1VDNXZjSFJYYUdsMFpYTndZV05sS1M1c2IyOXJZV2hsWVdRb2NTNWhkRzl0U1c1c2FXNWxSbWxsYkdRcEtTeGNiaUFnSUNCcGJteHBibVZHYVdWc1pEb2dLSEVwSUQwK1hHNGdJQ0FnSUNBZ0lGQXVZV3gwS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdVQzV6WlhGTllYQW9jUzVoZEc5dFNXNXNhVzVsUm1sbGJHUXNJRkF1YzNSeWFXNW5LRndpTEZ3aUtTNTBjbWx0S0ZBdWIzQjBWMmhwZEdWemNHRmpaU2tzSUhFdWFXNXNhVzVsUm1sbGJHUk1hWE4wTENBb1ppd2dYM01zSUd3cElEMCtYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdXMlpkTG1OdmJtTmhkQ2hzS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIRXVZWFJ2YlVsdWJHbHVaVVpwWld4a1hHNGdJQ0FnSUNBZ0lDa3NYRzU5S1R0Y2JseHVMeW9xSUVWdGIycHBJSEpsWjJWNExDQnpkSEp3Y0dsdVp5QmhibmtnY21WblpYZ2dabXhoWjNNZ2FYUWdhR0Z6TGlBcUwxeHVZMjl1YzNRZ1JVMVBTa2xmVWtWSFJWZ2dQU0J1WlhjZ1VtVm5SWGh3S0dWdGIycHBVbVZuWlhnb0tTd2dYQ0pjSWlrN1hHNWNiaThxS2lCUWNtOTJhV1JsY3lCaElHeHZiMnQxY0NCMFlXSnNaU0JtYjNJZ2RXNXBkQ0JrZFhKaGRHbHZibk1nYjJZZ2RHaGxJR2RwZG1WdUlIUjVjR1V1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnUkZWU1FWUkpUMDVmVkZsUVJWTWdQU0I3WEc0Z0lDQWdlV1ZoY2pvZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJSGxsWVhKek9pQXhJSDBwTEZ4dUlDQWdJSGxsWVhKek9pQkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLSHNnZVdWaGNuTTZJREVnZlNrc1hHNGdJQ0FnZVhJNklFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUI1WldGeWN6b2dNU0I5S1N4Y2JpQWdJQ0I1Y25NNklFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUI1WldGeWN6b2dNU0I5S1N4Y2JseHVJQ0FnSUcxdmJuUm9PaUJFZFhKaGRHbHZiaTVtY205dFQySnFaV04wS0hzZ2JXOXVkR2h6T2lBeElIMHBMRnh1SUNBZ0lHMXZiblJvY3pvZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJRzF2Ym5Sb2N6b2dNU0I5S1N4Y2JpQWdJQ0J0YnpvZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJRzF2Ym5Sb2N6b2dNU0I5S1N4Y2JpQWdJQ0J0YjNNNklFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUJ0YjI1MGFITTZJREVnZlNrc1hHNWNiaUFnSUNCM1pXVnJPaUJFZFhKaGRHbHZiaTVtY205dFQySnFaV04wS0hzZ2QyVmxhM002SURFZ2ZTa3NYRzRnSUNBZ2QyVmxhM002SUVSMWNtRjBhVzl1TG1aeWIyMVBZbXBsWTNRb2V5QjNaV1ZyY3pvZ01TQjlLU3hjYmlBZ0lDQjNhem9nUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lIZGxaV3R6T2lBeElIMHBMRnh1SUNBZ0lIZHJjem9nUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lIZGxaV3R6T2lBeElIMHBMRnh1SUNBZ0lIYzZJRVIxY21GMGFXOXVMbVp5YjIxUFltcGxZM1FvZXlCM1pXVnJjem9nTVNCOUtTeGNibHh1SUNBZ0lHUmhlVG9nUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lHUmhlWE02SURFZ2ZTa3NYRzRnSUNBZ1pHRjVjem9nUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lHUmhlWE02SURFZ2ZTa3NYRzRnSUNBZ1pEb2dSSFZ5WVhScGIyNHVabkp2YlU5aWFtVmpkQ2g3SUdSaGVYTTZJREVnZlNrc1hHNWNiaUFnSUNCb2IzVnlPaUJFZFhKaGRHbHZiaTVtY205dFQySnFaV04wS0hzZ2FHOTFjbk02SURFZ2ZTa3NYRzRnSUNBZ2FHOTFjbk02SUVSMWNtRjBhVzl1TG1aeWIyMVBZbXBsWTNRb2V5Qm9iM1Z5Y3pvZ01TQjlLU3hjYmlBZ0lDQm9jam9nUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lHaHZkWEp6T2lBeElIMHBMRnh1SUNBZ0lHaHljem9nUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lHaHZkWEp6T2lBeElIMHBMRnh1SUNBZ0lHZzZJRVIxY21GMGFXOXVMbVp5YjIxUFltcGxZM1FvZXlCb2IzVnljem9nTVNCOUtTeGNibHh1SUNBZ0lHMXBiblYwWlRvZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJRzFwYm5WMFpYTTZJREVnZlNrc1hHNGdJQ0FnYldsdWRYUmxjem9nUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lHMXBiblYwWlhNNklERWdmU2tzWEc0Z0lDQWdiV2x1T2lCRWRYSmhkR2x2Ymk1bWNtOXRUMkpxWldOMEtIc2diV2x1ZFhSbGN6b2dNU0I5S1N4Y2JpQWdJQ0J0YVc1ek9pQkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLSHNnYldsdWRYUmxjem9nTVNCOUtTeGNiaUFnSUNCdE9pQkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLSHNnYldsdWRYUmxjem9nTVNCOUtTeGNibHh1SUNBZ0lITmxZMjl1WkRvZ1JIVnlZWFJwYjI0dVpuSnZiVTlpYW1WamRDaDdJSE5sWTI5dVpITTZJREVnZlNrc1hHNGdJQ0FnYzJWamIyNWtjem9nUkhWeVlYUnBiMjR1Wm5KdmJVOWlhbVZqZENoN0lITmxZMjl1WkhNNklERWdmU2tzWEc0Z0lDQWdjMlZqT2lCRWRYSmhkR2x2Ymk1bWNtOXRUMkpxWldOMEtIc2djMlZqYjI1a2N6b2dNU0I5S1N4Y2JpQWdJQ0J6WldOek9pQkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLSHNnYzJWamIyNWtjem9nTVNCOUtTeGNiaUFnSUNCek9pQkVkWEpoZEdsdmJpNW1jbTl0VDJKcVpXTjBLSHNnYzJWamIyNWtjem9nTVNCOUtTeGNibjA3WEc1Y2JpOHFLaUJUYUc5eWRHaGhibVFnWm05eUlHTnZiVzF2YmlCa1lYUmxjeUFvY21Wc1lYUnBkbVVnZEc4Z2NtbG5hSFFnYm05M0tTNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQkVRVlJGWDFOSVQxSlVTRUZPUkZNZ1BTQjdYRzRnSUNBZ2JtOTNPaUFvS1NBOVBpQkVZWFJsVkdsdFpTNXNiMk5oYkNncExGeHVJQ0FnSUhSdlpHRjVPaUFvS1NBOVBpQkVZWFJsVkdsdFpTNXNiMk5oYkNncExuTjBZWEowVDJZb1hDSmtZWGxjSWlrc1hHNGdJQ0FnZVdWemRHVnlaR0Y1T2lBb0tTQTlQbHh1SUNBZ0lDQWdJQ0JFWVhSbFZHbHRaUzVzYjJOaGJDZ3BYRzRnSUNBZ0lDQWdJQ0FnSUNBdWMzUmhjblJQWmloY0ltUmhlVndpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdMbTFwYm5WektFUjFjbUYwYVc5dUxtWnliMjFQWW1wbFkzUW9leUJrWVhsek9pQXhJSDBwS1N4Y2JpQWdJQ0IwYjIxdmNuSnZkem9nS0NrZ1BUNWNiaUFnSUNBZ0lDQWdSR0YwWlZScGJXVXViRzlqWVd3b0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG5OMFlYSjBUMllvWENKa1lYbGNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDNXdiSFZ6S0VSMWNtRjBhVzl1TG1aeWIyMVBZbXBsWTNRb2V5QmtZWGx6T2lBeElIMHBLU3hjYmlBZ0lDQnpiM2M2SUNncElEMCtJRVJoZEdWVWFXMWxMbXh2WTJGc0tDa3VjM1JoY25SUFppaGNJbmRsWld0Y0lpa3NYRzRnSUNBZ1hDSnpkR0Z5ZEMxdlppMTNaV1ZyWENJNklDZ3BJRDArSUVSaGRHVlVhVzFsTG14dlkyRnNLQ2t1YzNSaGNuUlBaaWhjSW5kbFpXdGNJaWtzWEc0Z0lDQWdaVzkzT2lBb0tTQTlQaUJFWVhSbFZHbHRaUzVzYjJOaGJDZ3BMbVZ1WkU5bUtGd2lkMlZsYTF3aUtTeGNiaUFnSUNCY0ltVnVaQzF2WmkxM1pXVnJYQ0k2SUNncElEMCtJRVJoZEdWVWFXMWxMbXh2WTJGc0tDa3VaVzVrVDJZb1hDSjNaV1ZyWENJcExGeHVJQ0FnSUhOdmVUb2dLQ2tnUFQ0Z1JHRjBaVlJwYldVdWJHOWpZV3dvS1M1emRHRnlkRTltS0Z3aWVXVmhjbHdpS1N4Y2JpQWdJQ0JjSW5OMFlYSjBMVzltTFhsbFlYSmNJam9nS0NrZ1BUNGdSR0YwWlZScGJXVXViRzlqWVd3b0tTNXpkR0Z5ZEU5bUtGd2llV1ZoY2x3aUtTeGNiaUFnSUNCbGIzazZJQ2dwSUQwK0lFUmhkR1ZVYVcxbExteHZZMkZzS0NrdVpXNWtUMllvWENKNVpXRnlYQ0lwTEZ4dUlDQWdJRndpWlc1a0xXOW1MWGxsWVhKY0lqb2dLQ2tnUFQ0Z1JHRjBaVlJwYldVdWJHOWpZV3dvS1M1bGJtUlBaaWhjSW5sbFlYSmNJaWtzWEc0Z0lDQWdjMjl0T2lBb0tTQTlQaUJFWVhSbFZHbHRaUzVzYjJOaGJDZ3BMbk4wWVhKMFQyWW9YQ0p0YjI1MGFGd2lLU3hjYmlBZ0lDQmNJbk4wWVhKMExXOW1MVzF2Ym5Sb1hDSTZJQ2dwSUQwK0lFUmhkR1ZVYVcxbExteHZZMkZzS0NrdWMzUmhjblJQWmloY0ltMXZiblJvWENJcExGeHVJQ0FnSUdWdmJUb2dLQ2tnUFQ0Z1JHRjBaVlJwYldVdWJHOWpZV3dvS1M1bGJtUlBaaWhjSW0xdmJuUm9YQ0lwTEZ4dUlDQWdJRndpWlc1a0xXOW1MVzF2Ym5Sb1hDSTZJQ2dwSUQwK0lFUmhkR1ZVYVcxbExteHZZMkZzS0NrdVpXNWtUMllvWENKdGIyNTBhRndpS1N4Y2JuMDdYRzVjYmk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTljYmk4dklFVjRjSEpsYzNOcGIyNGdUR0Z1WjNWaFoyVWdMeTljYmk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTljYmx4dVpYaHdiM0owSUhSNWNHVWdVRzl6ZEdacGVFWnlZV2R0Wlc1MElEMWNiaUFnSUNCOElIc2dkSGx3WlRvZ1hDSmtiM1JjSWpzZ1pYaHdjam9nYzNSeWFXNW5JSDFjYmlBZ0lDQjhJSHNnZEhsd1pUb2dYQ0pwYm1SbGVGd2lPeUJsZUhCeU9pQkZlSEJ5WlhOemFXOXVJSDFjYmlBZ0lDQjhJSHNnZEhsd1pUb2dYQ0ptZFc1amRHbHZibHdpT3lCbGVIQnljem9nUlhod2NtVnpjMmx2Ymx0ZElIMDdYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUlhod2NtVnpjMmx2Ymt4aGJtZDFZV2RsSUh0Y2JpQWdJQ0IyWVhKcFlXSnNaVG9nVm1GeWFXRmliR1ZGZUhCeVpYTnphVzl1TzF4dUlDQWdJRzUxYldKbGNqb2dUR2wwWlhKaGJFVjRjSEpsYzNOcGIyNDdYRzRnSUNBZ1ltOXZiRG9nVEdsMFpYSmhiRVY0Y0hKbGMzTnBiMjQ3WEc0Z0lDQWdjM1J5YVc1bk9pQk1hWFJsY21Gc1JYaHdjbVZ6YzJsdmJqdGNiaUFnSUNCa1lYUmxPaUJNYVhSbGNtRnNSWGh3Y21WemMybHZianRjYmlBZ0lDQmtkWEpoZEdsdmJqb2dUR2wwWlhKaGJFVjRjSEpsYzNOcGIyNDdYRzRnSUNBZ2JHbHVhem9nVEdsMFpYSmhiRVY0Y0hKbGMzTnBiMjQ3WEc0Z0lDQWdiblZzYkRvZ1RHbDBaWEpoYkVWNGNISmxjM05wYjI0N1hHNWNiaUFnSUNCc2FYTjBPaUJNYVhOMFJYaHdjbVZ6YzJsdmJqdGNiaUFnSUNCdlltcGxZM1E2SUU5aWFtVmpkRVY0Y0hKbGMzTnBiMjQ3WEc1Y2JpQWdJQ0J1WldkaGRHVmtPaUJGZUhCeVpYTnphVzl1TzF4dUlDQWdJR0YwYjIwNklFVjRjSEpsYzNOcGIyNDdYRzRnSUNBZ2FXNWtaWGc2SUVWNGNISmxjM05wYjI0N1hHNGdJQ0FnYkdGdFltUmhPaUJNWVcxaVpHRkZlSEJ5WlhOemFXOXVPMXh1WEc0Z0lDQWdMeThnVUc5emRHWnBlQ0J3WVhKelpYSnpJR1p2Y2lCbWRXNWpkR2x2YmlCallXeHNjeUFtSUhSb1pTQnNhV3RsTGx4dUlDQWdJR1J2ZEZCdmMzUm1hWGc2SUZCdmMzUm1hWGhHY21GbmJXVnVkRHRjYmlBZ0lDQnBibVJsZUZCdmMzUm1hWGc2SUZCdmMzUm1hWGhHY21GbmJXVnVkRHRjYmlBZ0lDQm1kVzVqZEdsdmJsQnZjM1JtYVhnNklGQnZjM1JtYVhoR2NtRm5iV1Z1ZER0Y2JseHVJQ0FnSUM4dklFSnBibUZ5ZVNCdmNDQndZWEp6WlhKekxseHVJQ0FnSUdKcGJtRnllVTExYkVScGRqb2dSWGh3Y21WemMybHZianRjYmlBZ0lDQmlhVzVoY25sUWJIVnpUV2x1ZFhNNklFVjRjSEpsYzNOcGIyNDdYRzRnSUNBZ1ltbHVZWEo1UTI5dGNHRnlaVG9nUlhod2NtVnpjMmx2Ymp0Y2JpQWdJQ0JpYVc1aGNubENiMjlzWldGdU9pQkZlSEJ5WlhOemFXOXVPMXh1SUNBZ0lHSnBibUZ5ZVU5d09pQkZlSEJ5WlhOemFXOXVPMXh1SUNBZ0lIQmhjbVZ1Y3pvZ1JYaHdjbVZ6YzJsdmJqdGNiaUFnSUNCbGVIQnlaWE56YVc5dU9pQkZlSEJ5WlhOemFXOXVPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGQmhjbk5sSUdadmNpQjBhR1VnWkdGMFlXTnZjbVVnWlhod2NtVnpjMmx2YmlCc1lXNW5kV0ZuWlN3Z2QyaHBZMmdnY0hKdmRtbGtaWE1nYzJsdGNHeGxJR0Z1WkNCMllXZDFaV3g1SUVwVExXeHZiMnRwYm1jZ1kyOXRjSFYwWVhScGIyNHVYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JGV0ZCU1JWTlRTVTlPSUQwZ1VDNWpjbVZoZEdWTVlXNW5kV0ZuWlR4RmVIQnlaWE56YVc5dVRHRnVaM1ZoWjJVK0tIdGNiaUFnSUNBdkx5QkdhV1ZzWkNCd1lYSnphVzVuTGx4dUlDQWdJSFpoY21saFlteGxPaUFvWHlrZ1BUNGdVRkpKVFVsVVNWWkZVeTVwWkdWdWRHbG1hV1Z5TG0xaGNDaEZlSEJ5WlhOemFXOXVjeTUyWVhKcFlXSnNaU2t1WkdWell5aGNJblpoY21saFlteGxYQ0lwTEZ4dUlDQWdJRzUxYldKbGNqb2dLRjhwSUQwK0lGQlNTVTFKVkVsV1JWTXViblZ0WW1WeUxtMWhjQ2hGZUhCeVpYTnphVzl1Y3k1c2FYUmxjbUZzS1M1a1pYTmpLRndpYm5WdFltVnlYQ0lwTEZ4dUlDQWdJSE4wY21sdVp6b2dLRjhwSUQwK0lGQlNTVTFKVkVsV1JWTXVjM1J5YVc1bkxtMWhjQ2hGZUhCeVpYTnphVzl1Y3k1c2FYUmxjbUZzS1M1a1pYTmpLRndpYzNSeWFXNW5YQ0lwTEZ4dUlDQWdJR0p2YjJ3NklDaGZLU0E5UGlCUVVrbE5TVlJKVmtWVExtSnZiMnd1YldGd0tFVjRjSEpsYzNOcGIyNXpMbXhwZEdWeVlXd3BMbVJsYzJNb1hDSmliMjlzWldGdVhDSXBMRnh1SUNBZ0lHUmhkR1U2SUNoZktTQTlQbHh1SUNBZ0lDQWdJQ0JqY21WaGRHVkdkVzVqZEdsdmJpaGNJbVJoZEdWY0lpd2dVRkpKVFVsVVNWWkZVeTVrWVhSbFVHeDFjeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDNXRZWEFvS0Z0ZlpuVnVZeXdnWkdGMFpWMHBJRDArSUVWNGNISmxjM05wYjI1ekxteHBkR1Z5WVd3b1pHRjBaU2twWEc0Z0lDQWdJQ0FnSUNBZ0lDQXVaR1Z6WXloY0ltUmhkR1ZjSWlrc1hHNGdJQ0FnWkhWeVlYUnBiMjQ2SUNoZktTQTlQbHh1SUNBZ0lDQWdJQ0JqY21WaGRHVkdkVzVqZEdsdmJpaGNJbVIxY2x3aUxDQlFVa2xOU1ZSSlZrVlRMbVIxY21GMGFXOXVLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xtMWhjQ2dvVzE5bWRXNWpMQ0JrZFhKZEtTQTlQaUJGZUhCeVpYTnphVzl1Y3k1c2FYUmxjbUZzS0dSMWNpa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBdVpHVnpZeWhjSW1SMWNtRjBhVzl1WENJcExGeHVJQ0FnSUc1MWJHdzZJQ2hmS1NBOVBpQlFVa2xOU1ZSSlZrVlRMbkpoZDA1MWJHd3ViV0Z3S0NoZktTQTlQaUJGZUhCeVpYTnphVzl1Y3k1T1ZVeE1LU3hjYmlBZ0lDQnNhVzVyT2lBb1h5a2dQVDRnVUZKSlRVbFVTVlpGVXk1c2FXNXJMbTFoY0NoRmVIQnlaWE56YVc5dWN5NXNhWFJsY21Gc0tTeGNiaUFnSUNCc2FYTjBPaUFvY1NrZ1BUNWNiaUFnSUNBZ0lDQWdjUzVsZUhCeVpYTnphVzl1WEc0Z0lDQWdJQ0FnSUNBZ0lDQXVjMlZ3UW5rb1VDNXpkSEpwYm1jb1hDSXNYQ0lwTG5SeWFXMG9VQzV2Y0hSWGFHbDBaWE53WVdObEtTbGNiaUFnSUNBZ0lDQWdJQ0FnSUM1M2NtRndLRkF1YzNSeWFXNW5LRndpVzF3aUtTNXphMmx3S0ZBdWIzQjBWMmhwZEdWemNHRmpaU2tzSUZBdWIzQjBWMmhwZEdWemNHRmpaUzUwYUdWdUtGQXVjM1J5YVc1bktGd2lYVndpS1NrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1YldGd0tDaHNLU0E5UGlCRmVIQnlaWE56YVc5dWN5NXNhWE4wS0d3cEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG1SbGMyTW9YQ0pzYVhOMFhDSXBMRnh1SUNBZ0lHOWlhbVZqZERvZ0tIRXBJRDArWEc0Z0lDQWdJQ0FnSUZBdWMyVnhUV0Z3S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdVRkpKVFVsVVNWWkZVeTVwWkdWdWRHbG1hV1Z5TG05eUtGQlNTVTFKVkVsV1JWTXVjM1J5YVc1bktTeGNiaUFnSUNBZ0lDQWdJQ0FnSUZBdWMzUnlhVzVuS0Z3aU9sd2lLUzUwY21sdEtGQXViM0IwVjJocGRHVnpjR0ZqWlNrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J4TG1WNGNISmxjM05wYjI0c1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvYm1GdFpTd2dYM05sY0N3Z2RtRnNkV1VwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2V5QnVZVzFsTENCMllXeDFaU0I5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXVjMlZ3UW5rb1VDNXpkSEpwYm1jb1hDSXNYQ0lwTG5SeWFXMG9VQzV2Y0hSWGFHbDBaWE53WVdObEtTbGNiaUFnSUNBZ0lDQWdJQ0FnSUM1M2NtRndLRkF1YzNSeWFXNW5LRndpZTF3aUtTNXphMmx3S0ZBdWIzQjBWMmhwZEdWemNHRmpaU2tzSUZBdWIzQjBWMmhwZEdWemNHRmpaUzUwYUdWdUtGQXVjM1J5YVc1bktGd2lmVndpS1NrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1YldGd0tDaDJZV3h6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGN6b2dVbVZqYjNKa1BITjBjbWx1Wnl3Z1JYaHdjbVZ6YzJsdmJqNGdQU0I3ZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLR3hsZENCbGJuUnllU0J2WmlCMllXeHpLU0J5WlhOYlpXNTBjbmt1Ym1GdFpWMGdQU0JsYm5SeWVTNTJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnUlhod2NtVnpjMmx2Ym5NdWIySnFaV04wS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG1SbGMyTW9YQ0p2WW1wbFkzUWdLQ2Q3SUdFNklERXNJR0k2SURJZ2ZTY3BYQ0lwTEZ4dVhHNGdJQ0FnWVhSdmJUb2dLSEVwSUQwK1hHNGdJQ0FnSUNBZ0lGQXVZV3gwS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnVUd4aFkyVWdaVzFpWldRZ2JHbHVhM01nWVdKdmRtVWdibVZuWVhSbFpDQm1hV1ZzWkhNZ1lYTWdkR2hsZVNCaGNtVWdkR2hsSUhOd1pXTnBZV3dnY0dGeWMyVnlJR05oYzJVZ0p5RmJXM1JvYVc1blhWMG5JR0Z1WkNCaGNtVWdaMlZ1WlhKaGJHeDVJSFZ1WVcxaWFXZHBiM1Z6TGx4dUlDQWdJQ0FnSUNBZ0lDQWdVRkpKVFVsVVNWWkZVeTVsYldKbFpFeHBibXN1YldGd0tDaHNLU0E5UGlCRmVIQnlaWE56YVc5dWN5NXNhWFJsY21Gc0tHd3BLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIRXVibVZuWVhSbFpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhFdWJHbHVheXhjYmlBZ0lDQWdJQ0FnSUNBZ0lIRXViR2x6ZEN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEV1YjJKcVpXTjBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NTNXNZVzFpWkdFc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J4TG5CaGNtVnVjeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lIRXVZbTl2YkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEV1Ym5WdFltVnlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NTNXpkSEpwYm1jc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J4TG1SaGRHVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCeExtUjFjbUYwYVc5dUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnY1M1dWRXeHNMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NTNTJZWEpwWVdKc1pWeHVJQ0FnSUNBZ0lDQXBMRnh1SUNBZ0lHbHVaR1Y0T2lBb2NTa2dQVDVjYmlBZ0lDQWdJQ0FnVUM1elpYRk5ZWEFvY1M1aGRHOXRMQ0JRTG1Gc2RDaHhMbVJ2ZEZCdmMzUm1hWGdzSUhFdWFXNWtaWGhRYjNOMFptbDRMQ0J4TG1aMWJtTjBhVzl1VUc5emRHWnBlQ2t1YldGdWVTZ3BMQ0FvYjJKcUxDQndiM04wWm1sNFpYTXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCeVpYTjFiSFFnUFNCdlltbzdYRzRnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLR3hsZENCd2IzTjBJRzltSUhCdmMzUm1hWGhsY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjNhWFJqYUNBb2NHOXpkQzUwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0prYjNSY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjM1ZzZENBOUlFVjRjSEpsYzNOcGIyNXpMbWx1WkdWNEtISmxjM1ZzZEN3Z1JYaHdjbVZ6YzJsdmJuTXViR2wwWlhKaGJDaHdiM04wTG1WNGNISXBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElGd2lhVzVrWlhoY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjM1ZzZENBOUlFVjRjSEpsYzNOcGIyNXpMbWx1WkdWNEtISmxjM1ZzZEN3Z2NHOXpkQzVsZUhCeUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVpuVnVZM1JwYjI1Y0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjM1ZzZENBOUlFVjRjSEpsYzNOcGIyNXpMbVoxYm1Nb2NtVnpkV3gwTENCd2IzTjBMbVY0Y0hKektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjM1ZzZER0Y2JpQWdJQ0FnSUNBZ2ZTa3NYRzRnSUNBZ2JtVm5ZWFJsWkRvZ0tIRXBJRDArSUZBdWMyVnhUV0Z3S0ZBdWMzUnlhVzVuS0Z3aUlWd2lLU3dnY1M1cGJtUmxlQ3dnS0Y4c0lHWnBaV3hrS1NBOVBpQkZlSEJ5WlhOemFXOXVjeTV1WldkaGRHVW9abWxsYkdRcEtTNWtaWE5qS0Z3aWJtVm5ZWFJsWkNCbWFXVnNaRndpS1N4Y2JpQWdJQ0J3WVhKbGJuTTZJQ2h4S1NBOVBpQnhMbVY0Y0hKbGMzTnBiMjR1ZEhKcGJTaFFMbTl3ZEZkb2FYUmxjM0JoWTJVcExuZHlZWEFvVUM1emRISnBibWNvWENJb1hDSXBMQ0JRTG5OMGNtbHVaeWhjSWlsY0lpa3BMRnh1SUNBZ0lHeGhiV0prWVRvZ0tIRXBJRDArWEc0Z0lDQWdJQ0FnSUZBdWMyVnhUV0Z3S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdVRkpKVFVsVVNWWkZVeTVwWkdWdWRHbG1hV1Z5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTG5ObGNFSjVLRkF1YzNSeWFXNW5LRndpTEZ3aUtTNTBjbWx0S0ZBdWIzQjBWMmhwZEdWemNHRmpaU2twWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTG5keVlYQW9VQzV6ZEhKcGJtY29YQ0lvWENJcExuUnlhVzBvVUM1dmNIUlhhR2wwWlhOd1lXTmxLU3dnVUM1emRISnBibWNvWENJcFhDSXBMblJ5YVcwb1VDNXZjSFJYYUdsMFpYTndZV05sS1Nrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JRTG5OMGNtbHVaeWhjSWowK1hDSXBMblJ5YVcwb1VDNXZjSFJYYUdsMFpYTndZV05sS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEV1Wlhod2NtVnpjMmx2Yml4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2hwWkdWdWRDd2dYMmxuYm05eVpTd2dkbUZzZFdVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdleUIwZVhCbE9pQmNJbXhoYldKa1lWd2lMQ0JoY21kMWJXVnVkSE02SUdsa1pXNTBMQ0IyWVd4MVpTQjlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXBMRnh1WEc0Z0lDQWdaRzkwVUc5emRHWnBlRG9nS0hFcElEMCtJRkF1YzJWeFRXRndLRkF1YzNSeWFXNW5LRndpTGx3aUtTd2dVRkpKVFVsVVNWWkZVeTVwWkdWdWRHbG1hV1Z5TENBb1h5d2daWGh3Y2lrZ1BUNGdLSHNnZEhsd1pUb2dYQ0prYjNSY0lpd2daWGh3Y2lCOUtTa3NYRzRnSUNBZ2FXNWtaWGhRYjNOMFptbDRPaUFvY1NrZ1BUNWNiaUFnSUNBZ0lDQWdVQzV6WlhGTllYQW9YRzRnSUNBZ0lDQWdJQ0FnSUNCUUxuTjBjbWx1WnloY0lsdGNJaWtzWEc0Z0lDQWdJQ0FnSUNBZ0lDQlFMbTl3ZEZkb2FYUmxjM0JoWTJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J4TG1WNGNISmxjM05wYjI0c1hHNGdJQ0FnSUNBZ0lDQWdJQ0JRTG05d2RGZG9hWFJsYzNCaFkyVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCUUxuTjBjbWx1WnloY0lsMWNJaWtzWEc0Z0lDQWdJQ0FnSUNBZ0lDQW9YeXdnWHpJc0lHVjRjSElzSUY4ekxDQmZOQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCN0lIUjVjR1U2SUZ3aWFXNWtaWGhjSWl3Z1pYaHdjaUI5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FwTEZ4dUlDQWdJR1oxYm1OMGFXOXVVRzl6ZEdacGVEb2dLSEVwSUQwK1hHNGdJQ0FnSUNBZ0lGQXVjMlZ4VFdGd0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnVUM1emRISnBibWNvWENJb1hDSXBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1VDNXZjSFJYYUdsMFpYTndZV05sTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjUzVsZUhCeVpYTnphVzl1TG5ObGNFSjVLRkF1YzNSeWFXNW5LRndpTEZ3aUtTNTBjbWx0S0ZBdWIzQjBWMmhwZEdWemNHRmpaU2twTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdVQzV2Y0hSWGFHbDBaWE53WVdObExGeHVJQ0FnSUNBZ0lDQWdJQ0FnVUM1emRISnBibWNvWENJcFhDSXBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0tGOHNJRjh4TENCbGVIQnljeXdnWHpJc0lGOHpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhzZ2RIbHdaVG9nWENKbWRXNWpkR2x2Ymx3aUxDQmxlSEJ5Y3lCOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBcExGeHVYRzRnSUNBZ0x5OGdWR2hsSUhCeVpXTmxaR1Z1WTJVZ2FHbGxjbUZ5WTJoNUlHOW1JRzl3WlhKaGRHOXljeUF0SUcxMWJIUnBjR3g1TDJScGRtbGtaU3dnWVdSa0wzTjFZblJ5WVdOMExDQmpiMjF3WVhKbExDQmhibVFnZEdobGJpQmliMjlzWldGdUlHOXdaWEpoZEdsdmJuTXVYRzRnSUNBZ1ltbHVZWEo1VFhWc1JHbDJPaUFvY1NrZ1BUNGdZM0psWVhSbFFtbHVZWEo1VUdGeWMyVnlLSEV1YVc1a1pYZ3NJRkJTU1UxSlZFbFdSVk11WW1sdVlYSjVUWFZzUkdsMkxDQkZlSEJ5WlhOemFXOXVjeTVpYVc1aGNubFBjQ2tzWEc0Z0lDQWdZbWx1WVhKNVVHeDFjMDFwYm5Wek9pQW9jU2tnUFQ0Z1kzSmxZWFJsUW1sdVlYSjVVR0Z5YzJWeUtIRXVZbWx1WVhKNVRYVnNSR2wyTENCUVVrbE5TVlJKVmtWVExtSnBibUZ5ZVZCc2RYTk5hVzUxY3l3Z1JYaHdjbVZ6YzJsdmJuTXVZbWx1WVhKNVQzQXBMRnh1SUNBZ0lHSnBibUZ5ZVVOdmJYQmhjbVU2SUNoeEtTQTlQaUJqY21WaGRHVkNhVzVoY25sUVlYSnpaWElvY1M1aWFXNWhjbmxRYkhWelRXbHVkWE1zSUZCU1NVMUpWRWxXUlZNdVltbHVZWEo1UTI5dGNHRnlaVTl3TENCRmVIQnlaWE56YVc5dWN5NWlhVzVoY25sUGNDa3NYRzRnSUNBZ1ltbHVZWEo1UW05dmJHVmhiam9nS0hFcElEMCtYRzRnSUNBZ0lDQWdJR055WldGMFpVSnBibUZ5ZVZCaGNuTmxjaWh4TG1KcGJtRnllVU52YlhCaGNtVXNJRkJTU1UxSlZFbFdSVk11WW1sdVlYSjVRVzVrVDNBdWIzSW9VRkpKVFVsVVNWWkZVeTVpYVc1aGNubFBjazl3S1N3Z1JYaHdjbVZ6YzJsdmJuTXVZbWx1WVhKNVQzQXBMRnh1SUNBZ0lHSnBibUZ5ZVU5d09pQW9jU2tnUFQ0Z2NTNWlhVzVoY25sQ2IyOXNaV0Z1TEZ4dVhHNGdJQ0FnWlhod2NtVnpjMmx2YmpvZ0tIRXBJRDArSUhFdVltbHVZWEo1VDNBc1hHNTlLVHRjYmx4dUx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OWNiaTh2SUZGMVpYSjVJRXhoYm1kMVlXZGxJQzh2WEc0dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkwxeHVYRzR2S2lvZ1UzVndjRzl5ZEdWa0lIUjVjR1Z6SUdsdUlIUm9aU0JuY21GdGJXRnlJR1p2Y2lCcGJtUmxlQ0J4ZFdWeWFXVnpMaUFxTDF4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCUmRXVnllVXhoYm1kMVlXZGxJSHRjYmlBZ0lDQnhkV1Z5ZVZSaFp6b2dTVzVrWlhoVVlXZG5aV1E3WEc0Z0lDQWdjWFZsY25sSlpEb2dTVzVrWlhoSlpEdGNiaUFnSUNCeGRXVnllVlI1Y0dVNklFbHVaR1Y0Vkhsd1pXUTdYRzRnSUNBZ2NYVmxjbmxRWVhSb09pQkpibVJsZUZCaGRHZzdYRzRnSUNBZ2NYVmxjbmxRWVhKbGJuUlBaam9nU1c1a1pYaFFZWEpsYm5SUFpqdGNiaUFnSUNCeGRXVnllVU5vYVd4a1QyWTZJRWx1WkdWNFEyaHBiR1JQWmp0Y2JpQWdJQ0J4ZFdWeWVWTnBiWEJzWlV4cGJtdGxaRG9nU1c1a1pYaE1hVzVyWldRN1hHNGdJQ0FnY1hWbGNubE1hVzVyWldRNklFbHVaR1Y0VEdsdWEyVmtPMXh1SUNBZ0lIRjFaWEo1UlhocGMzUnpPaUJKYm1SbGVFWnBaV3hrTzF4dUlDQWdJSEYxWlhKNVVYVnZkR1ZrUlhod2NtVnpjMmx2YmpvZ1NXNWtaWGhGZUhCeVpYTnphVzl1TzF4dUlDQWdJSEYxWlhKNVVtRjNSWGh3Y21WemMybHZiam9nU1c1a1pYaEZlSEJ5WlhOemFXOXVPMXh1SUNBZ0lIRjFaWEo1VG1WbllYUmxPaUJKYm1SbGVFNXZkRHRjYmlBZ0lDQnhkV1Z5ZVZCaGNtVnVjem9nU1c1a1pYaFJkV1Z5ZVR0Y2JpQWdJQ0J4ZFdWeWVVRjBiMjA2SUVsdVpHVjRVWFZsY25rN1hHNGdJQ0FnY1hWbGNubEJibVJ6T2lCSmJtUmxlRkYxWlhKNU8xeHVJQ0FnSUhGMVpYSjVUM0p6T2lCSmJtUmxlRkYxWlhKNU8xeHVJQ0FnSUhGMVpYSjVPaUJKYm1SbGVGRjFaWEo1TzF4dWZWeHVYRzR2S2lwY2JpQXFJRkJoY25ObGNpQm1iM0lnZEdobElIRjFaWEo1SUd4aGJtZDFZV2RsTGlCRWFXUWdTU0J5WldGc2JIa2dibVZsWkNCaElIRjFaWEo1SUd4aGJtZDFZV2RsSUdsdWMzUmxZV1FnYjJZZ2FuVnpkQ0JoSUdKbGRIUmxjaUJWU1Q4Z1VISnZZbUZpYkhrZ2JtOTBMbHh1SUNvZ1FuVjBJSEYxWlhKNUlHeGhibWQxWVdkbGN5QmhjbVVnWm5WdUlHWnZjaUIwYUdVZ2QyaHZiR1VnWm1GdGFXeDVJR0Z1WkNCaGRDQnpiMjFsSUhCdmFXNTBJSGx2ZFNCblpYUWdjMjhnZFhObFpDQjBieUIzY21sMGFXNW5JSFJvWlcwZ2RHaGhkRnh1SUNvZ2VXOTFJR1J2YmlkMElITjBiM0FnZEc4Z2RHaHBibXNnYVdZZ2VXOTFJQ3B1WldWa0tpQjBieUIzY21sMFpTQjBhR1Z0SUdGdWVXMXZjbVV1SUVsMEozTWdaMjl2WkNCMGVYQnBibWNnY0hKaFkzUnBZMlVnWm05eUlHVjJaWEo1YjI1bExseHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdVVlZGVWxrZ1BTQlFMbU55WldGMFpVeGhibWQxWVdkbFBGRjFaWEo1VEdGdVozVmhaMlUrS0h0Y2JpQWdJQ0J4ZFdWeWVWUmhaem9nS0Y4cElEMCtJRkJTU1UxSlZFbFdSVk11ZEdGbkxtMWhjQ2dvZG1Gc2RXVXBJRDArSUNoN0lIUjVjR1U2SUZ3aWRHRm5aMlZrWENJc0lIWmhiSFZsSUgwcEtTeGNiaUFnSUNCeGRXVnllVWxrT2lBb1h5a2dQVDRnWTNKbFlYUmxSblZ1WTNScGIyNG9YQ0pwWkZ3aUxDQlFVa2xOU1ZSSlZrVlRMbk4wY21sdVp5a3ViV0Z3S0NoYlh5d2dhV1JkS1NBOVBpQW9leUIwZVhCbE9pQmNJbWxrWENJc0lIWmhiSFZsT2lCcFpDQjlLU2tzWEc0Z0lDQWdjWFZsY25sVWVYQmxPaUFvWHlrZ1BUNWNiaUFnSUNBZ0lDQWdVQzV6ZEhKcGJtY29YQ0pBWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1ZEdobGJpaFFVa2xOU1ZSSlZrVlRMbWxrWlc1MGFXWnBaWElwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXViV0Z3S0NoMllXeDFaU2tnUFQ0Z0tIc2dkSGx3WlRvZ1hDSjBlWEJsWkZ3aUxDQjJZV3gxWlRvZ2RtRnNkV1VnZlNrcExGeHVYRzRnSUNBZ2NYVmxjbmxRWVhSb09pQW9YeWtnUFQ1Y2JpQWdJQ0FnSUNBZ1kzSmxZWFJsUm5WdVkzUnBiMjRvVUM1eVpXZGxlSEFvTDJVL2NHRjBhQzlwS1M1a1pYTmpLRndpVzJWZGNHRjBhRndpS1N3Z1VGSkpUVWxVU1ZaRlV5NXpkSEpwYm1jcExtMWhjQ2dvVzJaMWJtTXNJSEJoZEdoZEtTQTlQaUFvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSndZWFJvWENJc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpUb2djR0YwYUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1Y0WVdOME9pQm1kVzVqTG5SdlRHOTNaWEpEWVhObEtDa2dQVDA5SUZ3aVpYQmhkR2hjSWl4Y2JpQWdJQ0FnSUNBZ2ZTa3BMRnh1WEc0Z0lDQWdjWFZsY25sUVlYSmxiblJQWmpvZ0tIRXBJRDArWEc0Z0lDQWdJQ0FnSUdOeVpXRjBaVVoxYm1OMGFXOXVLRkF1Y21WblpYaHdLQzl3WVhKbGJuUnZabnh6ZFhCbGNuUnlaV1V2YVNrdVpHVnpZeWhjSW5CaGNtVnVkRzltWENJcExDQnhMbkYxWlhKNUtTNXRZWEFvS0Z0bWRXNWpMQ0JqYUdsc1pISmxibDBwSUQwK0lDaDdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGVYQmxPaUJjSW5CaGNtVnVkQzF2Wmx3aUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJocGJHUnlaVzRzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBibU5zZFhOcGRtVTZJR1oxYm1NdWRHOU1iM2RsY2tOaGMyVW9LU0E5UFQwZ1hDSnpkWEJsY25SeVpXVmNJaXhjYmlBZ0lDQWdJQ0FnZlNrcExGeHVJQ0FnSUhGMVpYSjVRMmhwYkdSUFpqb2dLSEVwSUQwK1hHNGdJQ0FnSUNBZ0lHTnlaV0YwWlVaMWJtTjBhVzl1S0ZBdWNtVm5aWGh3S0M5amFHbHNaRzltZkhOMVluUnlaV1V2YVNrdVpHVnpZeWhjSW1Ob2FXeGtiMlpjSWlrc0lIRXVjWFZsY25rcExtMWhjQ2dvVzJaMWJtTXNJSEJoY21WdWRITmRLU0E5UGlBb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dYQ0pqYUdsc1pDMXZabHdpTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjR0Z5Wlc1MGN5eGNiaUFnSUNBZ0lDQWdJQ0FnSUdsdVkyeDFjMmwyWlRvZ1puVnVZeTUwYjB4dmQyVnlRMkZ6WlNncElEMDlQU0JjSW5OMVluUnlaV1ZjSWl4Y2JpQWdJQ0FnSUNBZ2ZTa3BMRnh1SUNBZ0lIRjFaWEo1VTJsdGNHeGxUR2x1YTJWa09pQW9YeWtnUFQ1Y2JpQWdJQ0FnSUNBZ1VGSkpUVWxVU1ZaRlV5NXNhVzVyTG0xaGNDZ29iR2x1YXlrZ1BUNGdLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1U2SUZ3aWJHbHVhMlZrWENJc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6YjNWeVkyVTZJSHNnZEhsd1pUb2dYQ0pzYVc1clhDSXNJSFpoYkhWbE9pQnNhVzVySUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrYVhKbFkzUnBiMjQ2SUZ3aWFXNWpiMjFwYm1kY0lpeGNiaUFnSUNBZ0lDQWdmU2twTEZ4dUlDQWdJSEYxWlhKNVRHbHVhMlZrT2lBb2NTa2dQVDVjYmlBZ0lDQWdJQ0FnWTNKbFlYUmxSblZ1WTNScGIyNG9VQzV5WldkbGVIQW9MMnhwYm10emRHOThiR2x1YTJWa1puSnZiWHhqYjI1dVpXTjBaV1F2YVNrdVpHVnpZeWhjSW1OdmJtNWxZM1JsWkZ3aUtTd2djUzV4ZFdWeWVTa3ViV0Z3S0NoYlpuVnVZeXdnYzI5MWNtTmxYU2tnUFQ0Z0tIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSNWNHVTZJRndpYkdsdWEyVmtYQ0lzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnpiM1Z5WTJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrYVhKbFkzUnBiMjQ2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm5WdVl5NTBiMHh2ZDJWeVEyRnpaU2dwSUQwOUlGd2liR2x1YTNOMGIxd2lJRDhnWENKcGJtTnZiV2x1WjF3aUlEb2dablZ1WXk1MGIweHZkMlZ5UTJGelpTZ3BJRDA5SUZ3aWJHbHVhMlZrWm5KdmJWd2lJRDhnWENKdmRYUm5iMmx1WjF3aUlEb2dYQ0ppYjNSb1hDSXNYRzRnSUNBZ0lDQWdJSDBwS1N4Y2JpQWdJQ0J4ZFdWeWVVVjRhWE4wY3pvZ0tGOHBJRDArWEc0Z0lDQWdJQ0FnSUdOeVpXRjBaVVoxYm1OMGFXOXVLRkF1Y21WblpYaHdLQzlsZUdsemRITXZhU2t1WkdWell5aGNJbVY0YVhOMGMxd2lLU3dnVUZKSlRVbFVTVlpGVXk1cFpHVnVkR2xtYVdWeUxtOXlLRkJTU1UxSlZFbFdSVk11YzNSeWFXNW5LU2t1YldGd0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnS0Z0ZlpuVnVZeXdnYVdSbGJuUmRLU0E5UGlBb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1U2SUZ3aVptbGxiR1JjSWl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaVG9nYVdSbGJuUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ0lDQXBMRnh1SUNBZ0lIRjFaWEo1VVhWdmRHVmtSWGh3Y21WemMybHZiam9nS0hFcElEMCtYRzRnSUNBZ0lDQWdJR055WldGMFpVWjFibU4wYVc5dUtGQXVjbVZuWlhod0tDOWxlSEJ5TDJrcExtUmxjMk1vWENKbGVIQnlYQ0lwTENCRldGQlNSVk5UU1U5T0xtVjRjSEpsYzNOcGIyNHBMbTFoY0Nnb1cxOHNJR1Y0Y0hKZEtTQTlQaUFvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSmxlSEJ5WlhOemFXOXVYQ0lzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmxlSEJ5WlhOemFXOXVPaUJsZUhCeUxGeHVJQ0FnSUNBZ0lDQjlLU2tzWEc0Z0lDQWdjWFZsY25sU1lYZEZlSEJ5WlhOemFXOXVPaUFvY1NrZ1BUNGdSVmhRVWtWVFUwbFBUaTVpYVc1aGNubERiMjF3WVhKbExtMWhjQ2dvWlhod2Npa2dQVDRnS0hzZ2RIbHdaVG9nWENKbGVIQnlaWE56YVc5dVhDSXNJR1Y0Y0hKbGMzTnBiMjQ2SUdWNGNISWdmU2twTEZ4dVhHNGdJQ0FnY1hWbGNubFFZWEpsYm5NNklDaHhLU0E5UGlCeExuRjFaWEo1TG5SeWFXMG9VQzV2Y0hSWGFHbDBaWE53WVdObEtTNTNjbUZ3S0ZBdWMzUnlhVzVuS0Z3aUtGd2lLU3dnVUM1emRISnBibWNvWENJcFhDSXBLU3hjYmlBZ0lDQnhkV1Z5ZVU1bFoyRjBaVG9nS0hFcElEMCtYRzRnSUNBZ0lDQWdJRkF1YzNSeWFXNW5LRndpSVZ3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG5OcmFYQW9VQzV2Y0hSWGFHbDBaWE53WVdObEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnTG5Sb1pXNG9jUzV4ZFdWeWVVRjBiMjBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXViV0Z3S0NoMllXeDFaU2tnUFQ0Z0tIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBlWEJsT2lCY0ltNXZkRndpTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc1pXMWxiblE2SUhaaGJIVmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTa3BMRnh1SUNBZ0lIRjFaWEo1UVhSdmJUb2dLSEVwSUQwK1hHNGdJQ0FnSUNBZ0lGQXVZV3gwUEVsdVpHVjRVWFZsY25rK0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnY1M1eGRXVnllVkJoY21WdWN5eGNiaUFnSUNBZ0lDQWdJQ0FnSUhFdWNYVmxjbmxPWldkaGRHVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCeExuRjFaWEo1VTJsdGNHeGxUR2x1YTJWa0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnY1M1eGRXVnllVlJoWnl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEV1Y1hWbGNubFVlWEJsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjUzV4ZFdWeWVVbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NTNXhkV1Z5ZVVWNGFYTjBjeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lIRXVjWFZsY25sRGFHbHNaRTltTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjUzV4ZFdWeWVWQmhjbVZ1ZEU5bUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnY1M1eGRXVnllVXhwYm10bFpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhFdWNYVmxjbmxRWVhSb0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnY1M1eGRXVnllVkYxYjNSbFpFVjRjSEpsYzNOcGIyNHNYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QkZlSEJ5WlhOemFXOXVjeUJoY21VZ1pYTnpaVzUwYVdGc2JIa2dkR2hsSUZ3aVkyRjBZMmd0WVd4c1hDSWdiMllnYjNSb1pYSjNhWE5sSUhWdWNHRnljMlZoWW14bElIUmxjbTF6TENCemJ5QjBhR1Y1SUhOb2IzVnNaQ0JuYnlCaFluTnZiSFYwWlNCc1lYTjBMbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NTNXhkV1Z5ZVZKaGQwVjRjSEpsYzNOcGIyNWNiaUFnSUNBZ0lDQWdLU3hjYmlBZ0lDQnhkV1Z5ZVVGdVpITTZJQ2h4S1NBOVBseHVJQ0FnSUNBZ0lDQmpjbVZoZEdWQ2FXNWhjbmxRWVhKelpYSW9jUzV4ZFdWeWVVRjBiMjBzSUZCU1NVMUpWRWxXUlZNdVltbHVZWEo1UVc1a1QzQXNJQ2hzWldaMExDQmZiM0FzSUhKcFoyaDBLU0E5UGlBb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dYQ0poYm1SY0lpeGNiaUFnSUNBZ0lDQWdJQ0FnSUdWc1pXMWxiblJ6T2lCYmJHVm1kQ3dnY21sbmFIUmRMRnh1SUNBZ0lDQWdJQ0I5S1Nrc1hHNGdJQ0FnY1hWbGNubFBjbk02SUNoeEtTQTlQbHh1SUNBZ0lDQWdJQ0JqY21WaGRHVkNhVzVoY25sUVlYSnpaWElvY1M1eGRXVnllVUZ1WkhNc0lGQlNTVTFKVkVsV1JWTXVZbWx1WVhKNVQzSlBjQ3dnS0d4bFpuUXNJRjl2Y0N3Z2NtbG5hSFFwSUQwK0lDaDdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGVYQmxPaUJjSW05eVhDSXNYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJHVnRaVzUwY3pvZ1cyeGxablFzSUhKcFoyaDBYU3hjYmlBZ0lDQWdJQ0FnZlNrcExGeHVJQ0FnSUhGMVpYSjVPaUFvY1NrZ1BUNGdjUzV4ZFdWeWVVOXljeTUwY21sdEtGQXViM0IwVjJocGRHVnpjR0ZqWlNrc1hHNTlLVHRjYmx4dUx5b3FJRkpsZEhWeWJpQmhJRzVsZHlCd1lYSnpaWElnZDJocFkyZ2daWGhsWTNWMFpYTWdkR2hsSUhWdVpHVnliSGxwYm1jZ2NHRnljMlZ5SUdGdVpDQnlaWFIxY201eklHbDBKM01nY21GM0lITjBjbWx1WnlCeVpYQnlaWE5sYm5SaGRHbHZiaTRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCallYQjBkWEpsVW1GM1BGUStLR0poYzJVNklGQXVVR0Z5YzJWeVBGUStLVG9nVUM1UVlYSnpaWEk4VzFRc0lITjBjbWx1WjEwK0lIdGNiaUFnSUNCeVpYUjFjbTRnVUM1amRYTjBiMjBvS0Y5emRXTmpaWE56TENCZlptRnBiSFZ5WlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdLR2x1Y0hWMExDQnBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpkV3gwSUQwZ0tHSmhjMlVnWVhNZ1lXNTVLUzVmS0dsdWNIVjBMQ0JwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaGNtVnpkV3gwTG5OMFlYUjFjeWtnY21WMGRYSnVJSEpsYzNWc2REdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUU5aWFtVmpkQzVoYzNOcFoyNG9lMzBzSUhKbGMzVnNkQ3dnZXlCMllXeDFaVG9nVzNKbGMzVnNkQzUyWVd4MVpTd2dhVzV3ZFhRdWMzVmljM1J5YVc1bktHa3NJSEpsYzNWc2RDNXBibVJsZUNsZElIMHBPMXh1SUNBZ0lDQWdJQ0I5TzF4dUlDQWdJSDBwTzF4dWZWeHVYRzR2S2lvZ1EzSmxZWFJsSUdFZ2JHVm1kQzFoYzNOdlkybGhkR2wyWlNCaWFXNWhjbmtnY0dGeWMyVnlJSGRvYVdOb0lIQmhjbk5sY3lCMGFHVWdaMmwyWlc0Z2MzVmlMV1ZzWlcxbGJuUWdZVzVrSUhObGNHRnlZWFJ2Y2k0Z1NHRnVaR3hsY3lCM2FHbDBaWE53WVdObExpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR055WldGMFpVSnBibUZ5ZVZCaGNuTmxjanhVTENCVlBpaGNiaUFnSUNCamFHbHNaRG9nVUM1UVlYSnpaWEk4VkQ0c1hHNGdJQ0FnYzJWd09pQlFMbEJoY25ObGNqeFZQaXhjYmlBZ0lDQmpiMjFpYVc1bE9pQW9ZVG9nVkN3Z1lqb2dWU3dnWXpvZ1ZDa2dQVDRnVkZ4dUtUb2dVQzVRWVhKelpYSThWRDRnZTF4dUlDQWdJSEpsZEhWeWJpQlFMbk5sY1UxaGNDaGphR2xzWkN3Z1VDNXpaWEVvVUM1dmNIUlhhR2wwWlhOd1lXTmxMQ0J6WlhBc0lGQXViM0IwVjJocGRHVnpjR0ZqWlN3Z1kyaHBiR1FwTG0xaGJua29LU3dnS0dacGNuTjBMQ0J5WlhOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaWE4wTG14bGJtZDBhQ0E5UFNBd0tTQnlaWFIxY200Z1ptbHljM1E3WEc1Y2JpQWdJQ0FnSUNBZ2JHVjBJRzV2WkdVZ1BTQmpiMjFpYVc1bEtHWnBjbk4wTENCeVpYTjBXekJkV3pGZExDQnlaWE4wV3pCZFd6TmRLVHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVc1a1pYZ2dQU0F4T3lCcGJtUmxlQ0E4SUhKbGMzUXViR1Z1WjNSb095QnBibVJsZUNzcktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCdWIyUmxJRDBnWTI5dFltbHVaU2h1YjJSbExDQnlaWE4wVzJsdVpHVjRYVnN4WFN3Z2NtVnpkRnRwYm1SbGVGMWJNMTBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdWIyUmxPMXh1SUNBZ0lIMHBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlNCaElIQmhjbk5sY2lCM2FHbGphQ0J3WVhKelpYTWdYRnc4Wm5WdVkzUnBiMjVjWEQ0b1hGdzhZWEpuYzF4Y1Bpa3VYRzRnS2lBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTnlaV0YwWlVaMWJtTjBhVzl1UEZRK0tHWjFibU02SUhOMGNtbHVaeUI4SUZBdVVHRnljMlZ5UEhOMGNtbHVaejRzSUdGeVozTTZJRkF1VUdGeWMyVnlQRlErS1RvZ1VDNVFZWEp6WlhJOFczTjBjbWx1Wnl3Z1ZGMCtJSHRjYmlBZ0lDQmpiMjV6ZENCeVpXRnNSblZ1WXlBOUlIUjVjR1Z2WmlCbWRXNWpJRDA5UFNCY0luTjBjbWx1WjF3aUlEOGdVQzV6ZEhKcGJtY29ablZ1WXlrZ09pQm1kVzVqTzF4dUlDQWdJSEpsZEhWeWJpQlFMbk5sY1UxaGNDaGNiaUFnSUNBZ0lDQWdjbVZoYkVaMWJtTXVjMnRwY0NoUUxtOXdkRmRvYVhSbGMzQmhZMlVwTEZ4dUlDQWdJQ0FnSUNCaGNtZHpMblJ5YVcwb1VDNXZjSFJYYUdsMFpYTndZV05sS1M1M2NtRndLRkF1YzNSeWFXNW5LRndpS0Z3aUtTd2dVQzV6ZEhKcGJtY29YQ0lwWENJcEtTeGNiaUFnSUNBZ0lDQWdLR1lzSUdFcElEMCtJRnRtTENCaFhWeHVJQ0FnSUNrN1hHNTlYRzVjYmk4cUtpQkRhR0ZwYm5NZ1lTQnNhWE4wSUc5bUlIQmhjbk5sY25NN0lIUm9aU0JtYVhKemRDQnZibVVnYlhWemRDQnpkV05qWldWa0xDQmlkWFFnWm05c2JHOTNhVzVuSUc5dVpYTWdiV0Y1SUdaaGFXd2dkMmwwYUc5MWRDQm1ZV2xzYVc1bklIUm9aU0J2ZG1WeVlXeHNJSEJoY25ObExpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR05vWVdsdVQzQjBQRlErS0dKaGMyVTZJRkF1VUdGeWMyVnlQRlErTENBdUxpNW1kVzVqY3pvZ0tDaHlPaUJVS1NBOVBpQlFMbEJoY25ObGNqeFVQaWxiWFNrNklGQXVVR0Z5YzJWeVBGUStJSHRjYmlBZ0lDQnlaWFIxY200Z1VDNWpkWE4wYjIwb0tGOXpkV05qWlhOekxDQmZabUZwYkhWeVpTa2dQVDRnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnS0dsdWNIVjBMQ0JwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6ZFd4MElEMGdLR0poYzJVZ1lYTWdZVzU1S1M1ZktHbHVjSFYwTENCcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDZ2hjbVZ6ZFd4MExuTjBZWFIxY3lrZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoc1pYUWdablZ1WXlCdlppQm1kVzVqY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J1WlhoMElEMGdLR1oxYm1Nb2NtVnpkV3gwTG5aaGJIVmxJR0Z6SUZRcElHRnpJR0Z1ZVNrdVh5aHBibkIxZEN3Z2NtVnpkV3gwTG1sdVpHVjRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXNWxlSFF1YzNSaGRIVnpLU0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ6ZFd4MElEMGdibVY0ZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjM1ZzZER0Y2JpQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNCOUtUdGNibjFjYmlJc0lDSXZLaXBjYmlBcUlFQnRiMlIxYkdVZ1pYaHdjbVZ6YzJsdmJuTmNiaUFxTDF4dWFXMXdiM0owSUhzZ1JHRjBaVlJwYldVc0lFUjFjbUYwYVc5dUlIMGdabkp2YlNCY0lteDFlRzl1WENJN1hHNXBiWEJ2Y25RZ2V5Qk1hVzVySUgwZ1puSnZiU0JjSW1WNGNISmxjM05wYjI0dmJHbHVhMXdpTzF4dWFXMXdiM0owSUhzZ2NtVnVaR1Z5VFdsdWFXMWhiRVJoZEdVc0lISmxibVJsY2sxcGJtbHRZV3hFZFhKaGRHbHZiaUI5SUdaeWIyMGdYQ0oxZEdsc2N5OXViM0p0WVd4cGVtVnljMXdpTzF4dVhHNHZMeUJTWlMxbGVIQnZjblJ6SUc5bUlIVnpaV1oxYkNCblpXNWxjbWxqSUhSNWNHVnpMbHh1Wlhod2IzSjBJSHNnVEdsdWF5QjlPMXh1WEc0dktpb2dVMmh2Y25Sb1lXNWtJR1p2Y2lCaElHMWhjSEJwYm1jZ1puSnZiU0JyWlhseklIUnZJSFpoYkhWbGN5NGdLaTljYm1WNGNHOXlkQ0IwZVhCbElFUmhkR0ZQWW1wbFkzUWdQU0JTWldOdmNtUThjM1J5YVc1bkxDQmhibmsrTzF4dUx5b3FJRlJvWlNCc2FYUmxjbUZzSUhSNWNHVnpJSE4xY0hCdmNuUmxaQ0JpZVNCMGFHVWdjWFZsY25rZ1pXNW5hVzVsTGlBcUwxeHVaWGh3YjNKMElIUjVjR1VnVEdsMFpYSmhiRlI1Y0dVZ1BWeHVJQ0FnSUh3Z1hDSmliMjlzWldGdVhDSmNiaUFnSUNCOElGd2liblZ0WW1WeVhDSmNiaUFnSUNCOElGd2ljM1J5YVc1blhDSmNiaUFnSUNCOElGd2laR0YwWlZ3aVhHNGdJQ0FnZkNCY0ltUjFjbUYwYVc5dVhDSmNiaUFnSUNCOElGd2liR2x1YTF3aVhHNGdJQ0FnZkNCY0ltRnljbUY1WENKY2JpQWdJQ0I4SUZ3aWIySnFaV04wWENKY2JpQWdJQ0I4SUZ3aVpuVnVZM1JwYjI1Y0lseHVJQ0FnSUh3Z1hDSnVkV3hzWENJN1hHNHZLaW9nVkdobElISmhkeUIyWVd4MVpYTWdkR2hoZENCaElHeHBkR1Z5WVd3Z1kyRnVJSFJoYTJVZ2IyNHVJQ292WEc1bGVIQnZjblFnZEhsd1pTQk1hWFJsY21Gc0lEMWNiaUFnSUNCOElHSnZiMnhsWVc1Y2JpQWdJQ0I4SUc1MWJXSmxjbHh1SUNBZ0lId2djM1J5YVc1blhHNGdJQ0FnZkNCRVlYUmxWR2x0WlZ4dUlDQWdJSHdnUkhWeVlYUnBiMjVjYmlBZ0lDQjhJRXhwYm10Y2JpQWdJQ0I4SUVGeWNtRjVQRXhwZEdWeVlXdytYRzRnSUNBZ2ZDQkVZWFJoVDJKcVpXTjBYRzRnSUNBZ2ZDQkdkVzVqZEdsdmJseHVJQ0FnSUh3Z2JuVnNiRHRjYmx4dUx5b3FJRTFoY0hNZ2RHaGxJSE4wY21sdVp5QjBlWEJsSUhSdklHbDBKM01nWlhoMFpYSnVZV3dzSUVGUVNTMW1ZV05wYm1jZ2NtVndjbVZ6Wlc1MFlYUnBiMjR1SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JNYVhSbGNtRnNVbVZ3Y2p4VUlHVjRkR1Z1WkhNZ1RHbDBaWEpoYkZSNWNHVStJRDBnVkNCbGVIUmxibVJ6SUZ3aVltOXZiR1ZoYmx3aVhHNGdJQ0FnUHlCaWIyOXNaV0Z1WEc0Z0lDQWdPaUJVSUdWNGRHVnVaSE1nWENKdWRXMWlaWEpjSWx4dUlDQWdJRDhnYm5WdFltVnlYRzRnSUNBZ09pQlVJR1Y0ZEdWdVpITWdYQ0p6ZEhKcGJtZGNJbHh1SUNBZ0lEOGdjM1J5YVc1blhHNGdJQ0FnT2lCVUlHVjRkR1Z1WkhNZ1hDSmtkWEpoZEdsdmJsd2lYRzRnSUNBZ1B5QkVkWEpoZEdsdmJseHVJQ0FnSURvZ1ZDQmxlSFJsYm1SeklGd2laR0YwWlZ3aVhHNGdJQ0FnUHlCRVlYUmxWR2x0WlZ4dUlDQWdJRG9nVkNCbGVIUmxibVJ6SUZ3aWJuVnNiRndpWEc0Z0lDQWdQeUJ1ZFd4c1hHNGdJQ0FnT2lCVUlHVjRkR1Z1WkhNZ1hDSnNhVzVyWENKY2JpQWdJQ0EvSUV4cGJtdGNiaUFnSUNBNklGUWdaWGgwWlc1a2N5QmNJbUZ5Y21GNVhDSmNiaUFnSUNBL0lFRnljbUY1UEV4cGRHVnlZV3crWEc0Z0lDQWdPaUJVSUdWNGRHVnVaSE1nWENKdlltcGxZM1JjSWx4dUlDQWdJRDhnUkdGMFlVOWlhbVZqZEZ4dUlDQWdJRG9nVkNCbGVIUmxibVJ6SUZ3aVpuVnVZM1JwYjI1Y0lseHVJQ0FnSUQ4Z1JuVnVZM1JwYjI1Y2JpQWdJQ0E2SUdGdWVUdGNibHh1THlvcUlFRWdkM0poY0hCbFpDQnNhWFJsY21Gc0lIWmhiSFZsSUhkb2FXTm9JR05oYmlCaVpTQnpkMmwwWTJobFpDQnZiaTRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRmR5WVhCd1pXUk1hWFJsY21Gc0lEMWNiaUFnSUNCOElFeHBkR1Z5WVd4WGNtRndjR1Z5UEZ3aWMzUnlhVzVuWENJK1hHNGdJQ0FnZkNCTWFYUmxjbUZzVjNKaGNIQmxjanhjSW01MWJXSmxjbHdpUGx4dUlDQWdJSHdnVEdsMFpYSmhiRmR5WVhCd1pYSThYQ0ppYjI5c1pXRnVYQ0krWEc0Z0lDQWdmQ0JNYVhSbGNtRnNWM0poY0hCbGNqeGNJbVJoZEdWY0lqNWNiaUFnSUNCOElFeHBkR1Z5WVd4WGNtRndjR1Z5UEZ3aVpIVnlZWFJwYjI1Y0lqNWNiaUFnSUNCOElFeHBkR1Z5WVd4WGNtRndjR1Z5UEZ3aWJHbHVhMXdpUGx4dUlDQWdJSHdnVEdsMFpYSmhiRmR5WVhCd1pYSThYQ0poY25KaGVWd2lQbHh1SUNBZ0lId2dUR2wwWlhKaGJGZHlZWEJ3WlhJOFhDSnZZbXBsWTNSY0lqNWNiaUFnSUNCOElFeHBkR1Z5WVd4WGNtRndjR1Z5UEZ3aVpuVnVZM1JwYjI1Y0lqNWNiaUFnSUNCOElFeHBkR1Z5WVd4WGNtRndjR1Z5UEZ3aWJuVnNiRndpUGp0Y2JseHVMeW9xSUVOdmJXSnBibVZ6SUdFZ2RHVjRkSFZoYkNCMGVYQmxJR0Z1WkNCMllXeDFaVHNnY0hKcGJXRnlhV3g1SUhWelpXWjFiQ0JtYjNJZ2MzZHBkR05vYVc1bklHOXVMbHh1SUNvZ1FHaHBaR1JsYmx4dUlDb3ZYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRXhwZEdWeVlXeFhjbUZ3Y0dWeVBGUWdaWGgwWlc1a2N5Qk1hWFJsY21Gc1ZIbHdaVDRnZTF4dUlDQWdJSFI1Y0dVNklGUTdYRzRnSUNBZ2RtRnNkV1U2SUV4cGRHVnlZV3hTWlhCeVBGUStPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFQm9hV1JrWlc1Y2JpQXFJQ0JWZEdsc2FYUjVJR3hwWW5KaGNua2dabTl5SUdoaGJtUnNhVzVuSUd4cGRHVnlZV3dnZG1Gc2RXVnpMaUFxTDF4dVpYaHdiM0owSUc1aGJXVnpjR0ZqWlNCTWFYUmxjbUZzY3lCN1hHNGdJQ0FnTHlvcUlGTmxkSFJwYm1keklIVnpaV1FnZDJobGJpQm1iM0p0WVhSMGFXNW5JR3hwZEdWeVlXd2dkbUZzZFdWeklIUnZJSFJsZUhRdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdsdWRHVnlabUZqWlNCVWIxTjBjbWx1WjFObGRIUnBibWR6SUh0Y2JpQWdJQ0FnSUNBZ0x5b3FJRmRvWVhRZ1lTQnVkV3hzSUhkcGJHd2djbVZ1WkdWeUlHRnpMaUFxTDF4dUlDQWdJQ0FnSUNCdWRXeHNVbVZ3Y21WelpXNTBZWFJwYjI0NklITjBjbWx1Wnp0Y2JseHVJQ0FnSUNBZ0lDQXZLaW9nUkdGMFpTQm1iM0p0WVhRdUlDb3ZYRzRnSUNBZ0lDQWdJR1JoZEdWR2IzSnRZWFE2SUhOMGNtbHVaenRjYmx4dUlDQWdJQ0FnSUNBdktpb2dSR0YwWlMxMGFXMWxJR1p2Y20xaGRDNGdLaTljYmlBZ0lDQWdJQ0FnWkdGMFpWUnBiV1ZHYjNKdFlYUTZJSE4wY21sdVp6dGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dVMkZ1WlN3Z1JXNW5iR2x6YUMxaVlYTmxaQ0JrWldaaGRXeDBjeUJtYjNJZ1pHRjBaU0JtYjNKdFlYUnpMaUFxTDF4dUlDQWdJR1Y0Y0c5eWRDQmpiMjV6ZENCRVJVWkJWVXhVWDFSUFgxTlVVa2xPUnpvZ1ZHOVRkSEpwYm1kVFpYUjBhVzVuY3lBOUlIdGNiaUFnSUNBZ0lDQWdiblZzYkZKbGNISmxjMlZ1ZEdGMGFXOXVPaUJjSWkxY0lpeGNibHh1SUNBZ0lDQWdJQ0JrWVhSbFJtOXliV0YwT2lCY0lrMU5UVTBnWkdRc0lIbDVlWGxjSWl4Y2JpQWdJQ0FnSUNBZ1pHRjBaVlJwYldWR2IzSnRZWFE2SUZ3aWFEcHRiU0JoSUMwZ1RVMU5UU0JrWkN3Z2VYbDVlVndpTEZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0F2S2lvZ1EyOXVkbVZ5ZENCaGJpQmhjbUpwZEhKaGNua2dkbUZzZFdVZ2FXNTBieUJoSUhKbFlYTnZibUZpYkdVc0lFMWhjbXRrYjNkdUxXWnlhV1Z1Wkd4NUlITjBjbWx1WnlCcFppQndiM056YVdKc1pTNGdLaTljYmlBZ0lDQmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2RHOVRkSEpwYm1jb1hHNGdJQ0FnSUNBZ0lHWnBaV3hrT2lCaGJua3NYRzRnSUNBZ0lDQWdJSE5sZEhScGJtYzZJRlJ2VTNSeWFXNW5VMlYwZEdsdVozTWdQU0JFUlVaQlZVeFVYMVJQWDFOVVVrbE9SeXhjYmlBZ0lDQWdJQ0FnY21WamRYSnphWFpsT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlZjYmlBZ0lDQXBPaUJ6ZEhKcGJtY2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2QzSmhjSEJsWkNBOUlIZHlZWEJXWVd4MVpTaG1hV1ZzWkNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doZDNKaGNIQmxaQ2tnY21WMGRYSnVJSE5sZEhScGJtY3ViblZzYkZKbGNISmxjMlZ1ZEdGMGFXOXVPMXh1WEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvZDNKaGNIQmxaQzUwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRndpYm5Wc2JGd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnpaWFIwYVc1bkxtNTFiR3hTWlhCeVpYTmxiblJoZEdsdmJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0p6ZEhKcGJtZGNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkM0poY0hCbFpDNTJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSnVkVzFpWlhKY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0ppYjI5c1pXRnVYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRndpWENJZ0t5QjNjbUZ3Y0dWa0xuWmhiSFZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0lteHBibXRjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZDNKaGNIQmxaQzUyWVd4MVpTNXRZWEpyWkc5M2JpZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1aMWJtTjBhVzl1WENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUZ3aVBHWjFibU4wYVc5dVBsd2lPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1GeWNtRjVYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlGd2lYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxZM1Z5YzJsMlpTa2djbVZ6ZFd4MElDczlJRndpVzF3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjM1ZzZENBclBTQjNjbUZ3Y0dWa0xuWmhiSFZsTG0xaGNDZ29aaWtnUFQ0Z2RHOVRkSEpwYm1jb1ppd2djMlYwZEdsdVp5d2dkSEoxWlNrcExtcHZhVzRvWENJc0lGd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVmpkWEp6YVhabEtTQnlaWE4xYkhRZ0t6MGdYQ0pkWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKdlltcGxZM1JjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmNJbnNnWENJZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JQWW1wbFkzUXVaVzUwY21sbGN5aDNjbUZ3Y0dWa0xuWmhiSFZsS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTG0xaGNDZ29aU2tnUFQ0Z1pWc3dYU0FySUZ3aU9pQmNJaUFySUhSdlUzUnlhVzVuS0dWYk1WMHNJSE5sZEhScGJtY3NJSFJ5ZFdVcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0xtcHZhVzRvWENJc0lGd2lLU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lGd2lJSDFjSWx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElGd2laR0YwWlZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXNWtaWEpOYVc1cGJXRnNSR0YwWlNoM2NtRndjR1ZrTG5aaGJIVmxMQ0J6WlhSMGFXNW5MbVJoZEdWR2IzSnRZWFFzSUhObGRIUnBibWN1WkdGMFpWUnBiV1ZHYjNKdFlYUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1SMWNtRjBhVzl1WENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGJtUmxjazFwYm1sdFlXeEVkWEpoZEdsdmJpaDNjbUZ3Y0dWa0xuWmhiSFZsS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4cUtpQlhjbUZ3SUdFZ2JHbDBaWEpoYkNCMllXeDFaU0J6YnlCNWIzVWdZMkZ1SUhOM2FYUmphQ0J2YmlCcGRDQmxZWE5wYkhrdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUhkeVlYQldZV3gxWlNoMllXdzZJRXhwZEdWeVlXd3BPaUJYY21Gd2NHVmtUR2wwWlhKaGJDQjhJSFZ1WkdWbWFXNWxaQ0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMDUxYkd3b2RtRnNLU2tnY21WMGRYSnVJSHNnZEhsd1pUb2dYQ0p1ZFd4c1hDSXNJSFpoYkhWbE9pQjJZV3dnZlR0Y2JpQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2FYTk9kVzFpWlhJb2RtRnNLU2tnY21WMGRYSnVJSHNnZEhsd1pUb2dYQ0p1ZFcxaVpYSmNJaXdnZG1Gc2RXVTZJSFpoYkNCOU8xeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaHBjMU4wY21sdVp5aDJZV3dwS1NCeVpYUjFjbTRnZXlCMGVYQmxPaUJjSW5OMGNtbHVaMXdpTENCMllXeDFaVG9nZG1Gc0lIMDdYRzRnSUNBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2x6UW05dmJHVmhiaWgyWVd3cEtTQnlaWFIxY200Z2V5QjBlWEJsT2lCY0ltSnZiMnhsWVc1Y0lpd2dkbUZzZFdVNklIWmhiQ0I5TzF4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNocGMwUjFjbUYwYVc5dUtIWmhiQ2twSUhKbGRIVnliaUI3SUhSNWNHVTZJRndpWkhWeVlYUnBiMjVjSWl3Z2RtRnNkV1U2SUhaaGJDQjlPMXh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hwYzBSaGRHVW9kbUZzS1NrZ2NtVjBkWEp1SUhzZ2RIbHdaVG9nWENKa1lYUmxYQ0lzSUhaaGJIVmxPaUIyWVd3Z2ZUdGNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9hWE5CY25KaGVTaDJZV3dwS1NCeVpYUjFjbTRnZXlCMGVYQmxPaUJjSW1GeWNtRjVYQ0lzSUhaaGJIVmxPaUIyWVd3Z2ZUdGNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9hWE5NYVc1cktIWmhiQ2twSUhKbGRIVnliaUI3SUhSNWNHVTZJRndpYkdsdWExd2lMQ0IyWVd4MVpUb2dkbUZzSUgwN1hHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHbHpSblZ1WTNScGIyNG9kbUZzS1NrZ2NtVjBkWEp1SUhzZ2RIbHdaVG9nWENKbWRXNWpkR2x2Ymx3aUxDQjJZV3gxWlRvZ2RtRnNJSDA3WEc0Z0lDQWdJQ0FnSUdWc2MyVWdhV1lnS0dselQySnFaV04wS0haaGJDa3BJSEpsZEhWeWJpQjdJSFI1Y0dVNklGd2liMkpxWldOMFhDSXNJSFpoYkhWbE9pQjJZV3dnZlR0Y2JpQWdJQ0FnSUNBZ1pXeHpaU0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJTWldOMWNuTnBkbVZzZVNCdFlYQWdZMjl0Y0d4bGVDQnZZbXBsWTNSeklHRjBJSFJvWlNCc1pXRjJaWE11SUNvdlhHNGdJQ0FnWlhod2IzSjBJR1oxYm1OMGFXOXVJRzFoY0V4bFlYWmxjeWgyWVd3NklFeHBkR1Z5WVd3c0lHWjFibU02SUNoME9pQk1hWFJsY21Gc0tTQTlQaUJNYVhSbGNtRnNLVG9nVEdsMFpYSmhiQ0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMDlpYW1WamRDaDJZV3dwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpkV3gwT2lCRVlYUmhUMkpxWldOMElEMGdlMzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQmJhMlY1TENCMllXeDFaVjBnYjJZZ1QySnFaV04wTG1WdWRISnBaWE1vZG1Gc0tTa2djbVZ6ZFd4MFcydGxlVjBnUFNCdFlYQk1aV0YyWlhNb2RtRnNkV1VzSUdaMWJtTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNocGMwRnljbUY1S0haaGJDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J5WlhOMWJIUTZJRXhwZEdWeVlXeGJYU0E5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnZG1Gc2RXVWdiMllnZG1Gc0tTQnlaWE4xYkhRdWNIVnphQ2h0WVhCTVpXRjJaWE1vZG1Gc2RXVXNJR1oxYm1NcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWm5WdVl5aDJZV3dwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcUlFTm9aV05ySUdsbUlIUjNieUJoY21KcGRISmhjbmtnYkdsMFpYSmhiSE1nWVhKbElHVnhkV0ZzTGlBcUwxeHVJQ0FnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJsY1hWaGJITW9abWx5YzNRNklFeHBkR1Z5WVd3Z2ZDQjFibVJsWm1sdVpXUXNJSE5sWTI5dVpEb2dUR2wwWlhKaGJDQjhJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWTI5dGNHRnlaU2htYVhKemRDd2djMlZqYjI1a0tTQTlQU0F3TzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCRGIyMXdZWEpsSUhSM2J5QmhjbUpwZEhKaGNua2dTbUYyWVZOamNtbHdkQ0IyWVd4MVpYTXVJRkJ5YjJSMVkyVnpJR0VnZEc5MFlXd2diM0prWlhKcGJtY2diM1psY2lCQlRsa2djRzl6YzJsaWJHVWdaR0YwWVdOdmNtVWdkbUZzZFdVdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUdOdmJYQmhjbVVvWEc0Z0lDQWdJQ0FnSUhaaGJERTZJRXhwZEdWeVlXd2dmQ0IxYm1SbFptbHVaV1FzWEc0Z0lDQWdJQ0FnSUhaaGJESTZJRXhwZEdWeVlXd2dmQ0IxYm1SbFptbHVaV1FzWEc0Z0lDQWdJQ0FnSUd4cGJtdE9iM0p0WVd4cGVtVnlQem9nS0d4cGJtczZJSE4wY21sdVp5a2dQVDRnYzNSeWFXNW5YRzRnSUNBZ0tUb2diblZ0WW1WeUlIdGNiaUFnSUNBZ0lDQWdMeThnVW1WbVpYSmxibU5sSUdWeGRXRnNhWFI1SUMwZ2MyaHZjblFnWTJseVkzVnBkQzVjYmlBZ0lDQWdJQ0FnYVdZZ0tIWmhiREVnUFQwOUlIWmhiRElwSUhKbGRIVnliaUF3TzF4dVhHNGdJQ0FnSUNBZ0lDOHZJRWhoYm1Sc1pTQjFibVJsWm1sdVpXUXZiblZzYkhNZ1ptbHljM1F1WEc0Z0lDQWdJQ0FnSUdsbUlDaDJZV3d4SUQwOVBTQjFibVJsWm1sdVpXUXBJSFpoYkRFZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnSUNCcFppQW9kbUZzTWlBOVBUMGdkVzVrWldacGJtVmtLU0IyWVd3eUlEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFpoYkRFZ1BUMDlJRzUxYkd3Z0ppWWdkbUZzTWlBOVBUMGdiblZzYkNrZ2NtVjBkWEp1SURBN1hHNGdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tIWmhiREVnUFQwOUlHNTFiR3dwSUhKbGRIVnliaUF0TVR0Y2JpQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb2RtRnNNaUE5UFQwZ2JuVnNiQ2tnY21WMGRYSnVJREU3WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdRU0J1YjI0dGJuVnNiQ0IyWVd4MVpTQnViM2NnZDJocFkyZ2dkMlVnWTJGdUlIZHlZWEFnSmlCamIyMXdZWEpsSUc5dUxseHVJQ0FnSUNBZ0lDQnNaWFFnZDNKaGNERWdQU0IzY21Gd1ZtRnNkV1VvZG1Gc01TazdYRzRnSUNBZ0lDQWdJR3hsZENCM2NtRndNaUE5SUhkeVlYQldZV3gxWlNoMllXd3lLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9kM0poY0RFZ1BUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlCM2NtRndNaUE5UFQwZ2RXNWtaV1pwYm1Wa0tTQnlaWFIxY200Z01EdGNiaUFnSUNBZ0lDQWdaV3h6WlNCcFppQW9kM0poY0RFZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnY21WMGRYSnVJQzB4TzF4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoM2NtRndNaUE5UFQwZ2RXNWtaV1pwYm1Wa0tTQnlaWFIxY200Z01UdGNibHh1SUNBZ0lDQWdJQ0F2THlCVGFHOXlkQzFqYVhKamRXbDBJRzl1SUdScFptWmxjbVZ1ZENCMGVYQmxjeUJ2Y2lCdmJpQnlaV1psY21WdVkyVWdaWEYxWVd4cGRIa3VYRzRnSUNBZ0lDQWdJR2xtSUNoM2NtRndNUzUwZVhCbElDRTlJSGR5WVhBeUxuUjVjR1VwSUhKbGRIVnliaUIzY21Gd01TNTBlWEJsTG14dlkyRnNaVU52YlhCaGNtVW9kM0poY0RJdWRIbHdaU2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaDNjbUZ3TVM1MllXeDFaU0E5UFQwZ2QzSmhjREl1ZG1Gc2RXVXBJSEpsZEhWeWJpQXdPMXh1WEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvZDNKaGNERXVkSGx3WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbk4wY21sdVoxd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjNjbUZ3TVM1MllXeDFaUzVzYjJOaGJHVkRiMjF3WVhKbEtIZHlZWEF5TG5aaGJIVmxJR0Z6SUhOMGNtbHVaeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWJuVnRZbVZ5WENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSGR5WVhBeExuWmhiSFZsSUR3Z0tIZHlZWEF5TG5aaGJIVmxJR0Z6SUc1MWJXSmxjaWtwSUhKbGRIVnliaUF0TVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtSUNoM2NtRndNUzUyWVd4MVpTQTlQU0FvZDNKaGNESXVkbUZzZFdVZ1lYTWdiblZ0WW1WeUtTa2djbVYwZFhKdUlEQTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlERTdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRndpYm5Wc2JGd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1KdmIyeGxZVzVjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kM0poY0RFdWRtRnNkV1VnUFQwZ2QzSmhjREl1ZG1Gc2RXVXBJSEpsZEhWeWJpQXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2NtVjBkWEp1SUhkeVlYQXhMblpoYkhWbElEOGdNU0E2SUMweE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbXhwYm10Y0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYkdsdWF6RWdQU0IzY21Gd01TNTJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdiR2x1YXpJZ1BTQjNjbUZ3TWk1MllXeDFaU0JoY3lCTWFXNXJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdWIzSnRZV3hwZW1VZ1BTQnNhVzVyVG05eWJXRnNhWHBsY2lBL1B5QW9LSGc2SUhOMGNtbHVaeWtnUFQ0Z2VDazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCWFpTQmpZVzRuZENCamIyMXdZWEpsSUdKNUlHWnBiR1VnYm1GdFpTQnZjaUJrYVhOd2JHRjVMQ0J6YVc1alpTQjBhR0YwSUhkdmRXeGtJR0p5WldGcklHeHBibXNnWlhGMVlXeHBkSGt1SUVOdmJYQmhjbVVnWW5rZ2NHRjBhQzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NHRjBhRU52YlhCaGNtVWdQU0J1YjNKdFlXeHBlbVVvYkdsdWF6RXVjR0YwYUNrdWJHOWpZV3hsUTI5dGNHRnlaU2h1YjNKdFlXeHBlbVVvYkdsdWF6SXVjR0YwYUNrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h3WVhSb1EyOXRjR0Z5WlNBaFBTQXdLU0J5WlhSMWNtNGdjR0YwYUVOdmJYQmhjbVU3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QlVhR1Z1SUdOdmJYQmhjbVVnWW5rZ2RIbHdaUzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2RIbHdaVU52YlhCaGNtVWdQU0JzYVc1ck1TNTBlWEJsTG14dlkyRnNaVU52YlhCaGNtVW9iR2x1YXpJdWRIbHdaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1ZEYjIxd1lYSmxJQ0U5SURBcElISmxkSFZ5YmlCMGVYQmxRMjl0Y0dGeVpUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUZSb1pXNGdZMjl0Y0dGeVpTQmllU0J6ZFdKd1lYUm9JR1Y0YVhOMFpXNWpaUzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JHbHVhekV1YzNWaWNHRjBhQ0FtSmlBaGJHbHVhekl1YzNWaWNHRjBhQ2tnY21WMGRYSnVJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRnNhVzVyTVM1emRXSndZWFJvSUNZbUlHeHBibXN5TG5OMVluQmhkR2dwSUhKbGRIVnliaUF0TVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JV3hwYm1zeExuTjFZbkJoZEdnZ0ppWWdJV3hwYm1zeUxuTjFZbkJoZEdncElISmxkSFZ5YmlBd08xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVTJsdVkyVWdZbTkwYUNCb1lYWmxJR0VnYzNWaWNHRjBhQ3dnWTI5dGNHRnlaU0JpZVNCemRXSndZWFJvTGx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFvYkdsdWF6RXVjM1ZpY0dGMGFDQS9QeUJjSWx3aUtTNXNiMk5oYkdWRGIyMXdZWEpsS0d4cGJtc3lMbk4xWW5CaGRHZ2dQejhnWENKY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRndpWkdGMFpWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjNjbUZ3TVM1MllXeDFaU0E4SUNoM2NtRndNaTUyWVd4MVpTQmhjeUJFWVhSbFZHbHRaU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1B5QXRNVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBNklIZHlZWEF4TG5aaGJIVmxMbVZ4ZFdGc2N5aDNjbUZ3TWk1MllXeDFaU0JoY3lCRVlYUmxWR2x0WlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQeUF3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEb2dNVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKa2RYSmhkR2x2Ymx3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCM2NtRndNUzUyWVd4MVpTQThJQ2gzY21Gd01pNTJZV3gxWlNCaGN5QkVkWEpoZEdsdmJpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUHlBdE1WeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUhkeVlYQXhMblpoYkhWbExtVnhkV0ZzY3loM2NtRndNaTUyWVd4MVpTQmhjeUJFZFhKaGRHbHZiaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1B5QXdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ01UdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0poY25KaGVWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCbU1TQTlJSGR5WVhBeExuWmhiSFZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQm1NaUE5SUhkeVlYQXlMblpoYkhWbElHRnpJR0Z1ZVZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHbHVaR1Y0SUQwZ01Ec2dhVzVrWlhnZ1BDQk5ZWFJvTG0xcGJpaG1NUzVzWlc1bmRHZ3NJR1l5TG14bGJtZDBhQ2s3SUdsdVpHVjRLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdOdmJYQWdQU0JqYjIxd1lYSmxLR1l4VzJsdVpHVjRYU3dnWmpKYmFXNWtaWGhkS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOdmJYQWdJVDBnTUNrZ2NtVjBkWEp1SUdOdmJYQTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQm1NUzVzWlc1bmRHZ2dMU0JtTWk1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWIySnFaV04wWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJRzh4SUQwZ2QzSmhjREV1ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUc4eUlEMGdkM0poY0RJdWRtRnNkV1VnWVhNZ1VtVmpiM0prUEhOMGNtbHVaeXdnWVc1NVBqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYXpFZ1BTQkJjbkpoZVM1bWNtOXRLRTlpYW1WamRDNXJaWGx6S0c4eEtTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdzeUlEMGdRWEp5WVhrdVpuSnZiU2hQWW1wbFkzUXVhMlY1Y3lodk1pa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3N4TG5OdmNuUW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JyTWk1emIzSjBLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdhMlY1UTI5dGNHRnlaU0E5SUdOdmJYQmhjbVVvYXpFc0lHc3lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2EyVjVRMjl0Y0dGeVpTQWhQU0F3S1NCeVpYUjFjbTRnYTJWNVEyOXRjR0Z5WlR0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHdGxlU0J2WmlCck1Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdZMjl0Y0NBOUlHTnZiWEJoY21Vb2J6RmJhMlY1WFN3Z2J6SmJhMlY1WFNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamIyMXdJQ0U5SURBcElISmxkSFZ5YmlCamIyMXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUF3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltWjFibU4wYVc5dVhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlEQTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaW9nUm1sdVpDQjBhR1VnWTI5eWNtVnpjRzl1WkdsdVp5QmtZWFJoWTI5eVpTQjBlWEJsSUdadmNpQmhiaUJoY21KcGRISmhjbmtnZG1Gc2RXVXVJQ292WEc0Z0lDQWdaWGh3YjNKMElHWjFibU4wYVc5dUlIUjVjR1ZQWmloMllXdzZJR0Z1ZVNrNklFeHBkR1Z5WVd4VWVYQmxJSHdnZFc1a1pXWnBibVZrSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhkeVlYQldZV3gxWlNoMllXd3BQeTUwZVhCbE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4cUtpQkVaWFJsY20xcGJtVWdhV1lnZEdobElHZHBkbVZ1SUhaaGJIVmxJR2x6SUZ3aWRISjFkR2g1WENJZ0tHa3VaUzRzSUdseklHNXZiaTF1ZFd4c0lHRnVaQ0JvWVhNZ1pHRjBZU0JwYmlCcGRDa3VJQ292WEc0Z0lDQWdaWGh3YjNKMElHWjFibU4wYVc5dUlHbHpWSEoxZEdoNUtHWnBaV3hrT2lCTWFYUmxjbUZzS1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0IzY21Gd2NHVmtJRDBnZDNKaGNGWmhiSFZsS0dacFpXeGtLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRjNjbUZ3Y0dWa0tTQnlaWFIxY200Z1ptRnNjMlU3WEc1Y2JpQWdJQ0FnSUNBZ2MzZHBkR05vSUNoM2NtRndjR1ZrTG5SNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKdWRXMWlaWEpjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZDNKaGNIQmxaQzUyWVd4MVpTQWhQU0F3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0luTjBjbWx1WjF3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCM2NtRndjR1ZrTG5aaGJIVmxMbXhsYm1kMGFDQStJREE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVltOXZiR1ZoYmx3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCM2NtRndjR1ZrTG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW14cGJtdGNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdJU0YzY21Gd2NHVmtMblpoYkhWbExuQmhkR2c3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVpHRjBaVndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIzY21Gd2NHVmtMblpoYkhWbExuUnZUV2xzYkdsektDa2dJVDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSmtkWEpoZEdsdmJsd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjNjbUZ3Y0dWa0xuWmhiSFZsTG1GektGd2ljMlZqYjI1a2Mxd2lLU0FoUFNBd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbTlpYW1WamRGd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQlBZbXBsWTNRdWEyVjVjeWgzY21Gd2NHVmtMblpoYkhWbEtTNXNaVzVuZEdnZ1BpQXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1GeWNtRjVYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSGR5WVhCd1pXUXVkbUZzZFdVdWJHVnVaM1JvSUQ0Z01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0p1ZFd4c1hDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltWjFibU4wYVc5dVhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lvZ1JHVmxjQ0JqYjNCNUlHRWdabWxsYkdRdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUdSbFpYQkRiM0I1UEZRZ1pYaDBaVzVrY3lCTWFYUmxjbUZzUGlobWFXVnNaRG9nVkNrNklGUWdlMXh1SUNBZ0lDQWdJQ0JwWmlBb1ptbGxiR1FnUFQwOUlHNTFiR3dnZkh3Z1ptbGxiR1FnUFQwOUlIVnVaR1ZtYVc1bFpDa2djbVYwZFhKdUlHWnBaV3hrTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hNYVhSbGNtRnNjeTVwYzBGeWNtRjVLR1pwWld4a0tTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNoYlhTQmhjeUJNYVhSbGNtRnNXMTBwTG1OdmJtTmhkQ2htYVdWc1pDNXRZWEFvS0hZcElEMCtJR1JsWlhCRGIzQjVLSFlwS1NrZ1lYTWdWRHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoTWFYUmxjbUZzY3k1cGMwOWlhbVZqZENobWFXVnNaQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCeVpYTjFiSFE2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJRXhwZEdWeVlXdytJRDBnZTMwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JiYTJWNUxDQjJZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1ptbGxiR1FwS1NCeVpYTjFiSFJiYTJWNVhTQTlJR1JsWlhCRGIzQjVLSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUWdZWE1nVkR0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQm1hV1ZzWkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4cUtpQkVaWFJsY20xcGJtVWdhV1lnZEdobElIWmhiSFZsSUdseklHRWdjM1J5YVc1bkxpQXFMMXh1SUNBZ0lHVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMxTjBjbWx1WnloMllXdzZJR0Z1ZVNrNklIWmhiQ0JwY3lCemRISnBibWNnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhsd1pXOW1JSFpoYkNBOVBTQmNJbk4wY21sdVoxd2lPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJFWlhSbGNtMXBibVVnYVdZZ2RHaGxJSFpoYkhWbElHbHpJR0VnYm5WdFltVnlMaUFxTDF4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMDUxYldKbGNpaDJZV3c2SUdGdWVTazZJSFpoYkNCcGN5QnVkVzFpWlhJZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RIbHdaVzltSUhaaGJDQTlQU0JjSW01MWJXSmxjbHdpTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCRVpYUmxjbTFwYm1VZ2FXWWdkR2hsSUhaaGJIVmxJR2x6SUdFZ1pHRjBaUzRnS2k5Y2JpQWdJQ0JsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5FWVhSbEtIWmhiRG9nWVc1NUtUb2dkbUZzSUdseklFUmhkR1ZVYVcxbElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIWmhiQ0JwYm5OMFlXNWpaVzltSUVSaGRHVlVhVzFsTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCRVpYUmxjbTFwYm1VZ2FXWWdkR2hsSUhaaGJIVmxJR2x6SUdFZ1pIVnlZWFJwYjI0dUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUdselJIVnlZWFJwYjI0b2RtRnNPaUJoYm5rcE9pQjJZV3dnYVhNZ1JIVnlZWFJwYjI0Z2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RtRnNJR2x1YzNSaGJtTmxiMllnUkhWeVlYUnBiMjQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeW9xSUVSbGRHVnliV2x1WlNCcFppQjBhR1VnZG1Gc2RXVWdhWE1nYm5Wc2JDQnZjaUIxYm1SbFptbHVaV1F1SUNvdlhHNGdJQ0FnWlhod2IzSjBJR1oxYm1OMGFXOXVJR2x6VG5Wc2JDaDJZV3c2SUdGdWVTazZJSFpoYkNCcGN5QnVkV3hzSUh3Z2RXNWtaV1pwYm1Wa0lIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIWmhiQ0E5UFQwZ2JuVnNiQ0I4ZkNCMllXd2dQVDA5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lvZ1JHVjBaWEp0YVc1bElHbG1JSFJvWlNCMllXeDFaU0JwY3lCaGJpQmhjbkpoZVM0Z0tpOWNiaUFnSUNCbGVIQnZjblFnWm5WdVkzUnBiMjRnYVhOQmNuSmhlU2gyWVd3NklHRnVlU2s2SUhaaGJDQnBjeUJoYm5sYlhTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQkJjbkpoZVM1cGMwRnljbUY1S0haaGJDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5b3FJRVJsZEdWeWJXbHVaU0JwWmlCMGFHVWdkbUZzZFdVZ2FYTWdZU0JpYjI5c1pXRnVMaUFxTDF4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMEp2YjJ4bFlXNG9kbUZzT2lCaGJua3BPaUIyWVd3Z2FYTWdZbTl2YkdWaGJpQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBlWEJsYjJZZ2RtRnNJRDA5UFNCY0ltSnZiMnhsWVc1Y0lqdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dSR1YwWlhKdGFXNWxJR2xtSUhSb1pTQjJZV3gxWlNCcGN5QmhJR3hwYm1zdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUdselRHbHVheWgyWVd3NklHRnVlU2s2SUhaaGJDQnBjeUJNYVc1cklIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIWmhiQ0JwYm5OMFlXNWpaVzltSUV4cGJtczdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5b3FJRU5vWldOcmN5QnBaaUIwYUdVZ1oybDJaVzRnZG1Gc2RXVWdhWE1nWVc0Z2IySnFaV04wSUNoaGJtUWdibTkwSUdGdWVTQnZkR2hsY2lCa1lYUmhZMjl5WlMxeVpXTnZaMjVwZW1Wa0lHOWlhbVZqZEMxc2FXdGxJSFI1Y0dVcExpQXFMMXh1SUNBZ0lHVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwOWlhbVZqZENoMllXdzZJR0Z1ZVNrNklIWmhiQ0JwY3lCU1pXTnZjbVE4YzNSeWFXNW5MQ0JoYm5rK0lIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlDaGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGJDQWhQVDBnZFc1a1pXWnBibVZrSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdkbUZzSUQwOUlGd2liMkpxWldOMFhDSWdKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDRnBjMEZ5Y21GNUtIWmhiQ2tnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0ZwYzBSMWNtRjBhVzl1S0haaGJDa2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDRnBjMFJoZEdVb2RtRnNLU0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdJV2x6VEdsdWF5aDJZV3dwSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FoYVhOT2RXeHNLSFpoYkNsY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dSR1YwWlhKdGFXNWxjeUJwWmlCMGFHVWdaMmwyWlc0Z2RtRnNkV1VnYVhNZ1lTQnFZWFpoYzJOeWFYQjBJR1oxYm1OMGFXOXVMaUFxTDF4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMFoxYm1OMGFXOXVLSFpoYkRvZ1lXNTVLVG9nZG1Gc0lHbHpJRVoxYm1OMGFXOXVJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFI1Y0dWdlppQjJZV3dnUFQwZ1hDSm1kVzVqZEdsdmJsd2lPMXh1SUNBZ0lIMWNibjFjYmx4dUx5b3FJRUVnWjNKdmRYQnBibWNnYjI0Z1lTQjBlWEJsSUhkb2FXTm9JSE4xY0hCdmNuUnpJSEpsWTNWeWMybDJaV3g1TFc1bGMzUmxaQ0JuY205MWNITXVYRzRnS2lCQVozSnZkWEFnUTI5dGJXOXVJRlI1Y0dWelhHNGdLaTljYm1WNGNHOXlkQ0IwZVhCbElFZHliM1Z3Uld4bGJXVnVkRHhVUGlBOUlIc2dhMlY1T2lCTWFYUmxjbUZzT3lCeWIzZHpPaUJIY205MWNHbHVaenhVUGlCOU8xeHVMeW9xWEc0Z0tpQkJJR2R5YjNWd2FXNW5MQ0IzYUdsamFDQmpZVzRnWW1VZ1pXbDBhR1Z5T2x4dUlDb2dMU0JoYmlCaGNuSmhlU0J2WmlCbGJHVnRaVzUwY3lCdlppQjBlWEJsSUdCVVlDd2diM0pjYmlBcUlDMGdZVzRnWVhKeVlYa2diMllnZTBCc2FXNXJJRWR5YjNWd1pXeGxiV1Z1ZEgxelhHNGdLbHh1SUNvZ1FHZHliM1Z3SUVOdmJXMXZiaUJVZVhCbGMxeHVJQ292WEc1bGVIQnZjblFnZEhsd1pTQkhjbTkxY0dsdVp6eFVQaUE5SUZSYlhTQjhJRWR5YjNWd1JXeGxiV1Z1ZER4VVBsdGRPMXh1THlvcVhHNGdLaUJBYUdsa1pHVnVYRzRnS2k5Y2JtVjRjRzl5ZENCdVlXMWxjM0JoWTJVZ1IzSnZkWEJwYm1keklIdGNiaUFnSUNBdktpb2dSR1YwWlhKdGFXNWxjeUJwWmlCMGFHVWdaMmwyWlc0Z1ozSnZkWEFnWlc1MGNua2dhWE1nWVNCemRHRnVaR0ZzYjI1bElIWmhiSFZsTENCdmNpQmhJR2R5YjNWd2FXNW5JRzltSUhOMVlpMWxiblJ5YVdWekxpQXFMMXh1SUNBZ0lHVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwVnNaVzFsYm5SSGNtOTFjRHhVUGlobGJuUnllVG9nWVc1NUtUb2daVzUwY25rZ2FYTWdSM0p2ZFhCRmJHVnRaVzUwUEZRK0lIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlFeHBkR1Z5WVd4ekxtbHpUMkpxWldOMEtHVnVkSEo1S1NBbUppQlBZbXBsWTNRdWEyVjVjeWhsYm5SeWVTa3ViR1Z1WjNSb0lEMDlJRElnSmlZZ1hDSnJaWGxjSWlCcGJpQmxiblJ5ZVNBbUppQmNJbkp2ZDNOY0lpQnBiaUJsYm5SeWVUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dSR1YwWlhKdGFXNWxjeUJwWmlCMGFHVWdaMmwyWlc0Z1lYSnlZWGtnYVhNZ1lTQm5jbTkxY0dsdVp5QmhjbkpoZVM0Z0tpOWNiaUFnSUNCbGVIQnZjblFnWm5WdVkzUnBiMjRnYVhOSGNtOTFjR2x1Wnp4VVBpaGxiblJ5ZVRvZ1IzSnZkWEJwYm1jOFZENHBPaUJsYm5SeWVTQnBjeUJIY205MWNFVnNaVzFsYm5ROFZENWJYU0I3WEc0Z0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdWc1pXMWxiblFnYjJZZ1pXNTBjbmtwSUdsbUlDZ2hhWE5GYkdWdFpXNTBSM0p2ZFhBb1pXeGxiV1Z1ZENrcElISmxkSFZ5YmlCbVlXeHpaVHRjYmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dSR1YwWlhKdGFXNWxjeUJwWmlCMGFHVWdaMmwyWlc0Z1lYSnlZWGtnYVhNZ1lTQnNaV0ZtSUdGdVpDQm9ZWE1nYm04Z2MzVmlaM0p2ZFhCcGJtZHpMaUFxTDF4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMHhsWVdZOFZENG9aVzUwY25rNklFZHliM1Z3YVc1blBGUStLVG9nWlc1MGNua2dhWE1nVkZ0ZElIdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdaV3hsYldWdWRDQnZaaUJsYm5SeWVTa2dhV1lnS0dselJXeGxiV1Z1ZEVkeWIzVndLR1ZzWlcxbGJuUXBLU0J5WlhSMWNtNGdabUZzYzJVN1hHNWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeW9xSUVOdmRXNTBJSFJvWlNCMGIzUmhiQ0J1ZFcxaVpYSWdiMllnWld4bGJXVnVkSE1nYVc0Z1lTQnlaV04xY25OcGRtVWdaM0p2ZFhCcGJtY3VJQ292WEc0Z0lDQWdaWGh3YjNKMElHWjFibU4wYVc5dUlHTnZkVzUwUEZRK0tHVnNaVzFsYm5Sek9pQkhjbTkxY0dsdVp6eFVQaUI4SUVkeWIzVndSV3hsYldWdWREeFVQaWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMFZzWlcxbGJuUkhjbTkxY0NobGJHVnRaVzUwY3lrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJqYjNWdWRDaGxiR1Z0Wlc1MGN5NXliM2R6S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHBjMGR5YjNWd2FXNW5LR1ZzWlcxbGJuUnpLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGMzVnNkQ0E5SURBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0J6ZFdKbmNtOTFjQ0J2WmlCbGJHVnRaVzUwY3lrZ2NtVnpkV3gwSUNzOUlHTnZkVzUwS0hOMVltZHliM1Z3TG5KdmQzTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbGJHVnRaVzUwY3k1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lvZ1VtVmpkWEp6YVhabGJIa2djMnhwWTJVZ1lTQm5jbTkxY0dsdVp5d2djSEpsYzJWeWRtbHVaeUIwYUdVZ1ozSnZkWEFnYzNSeWRXTjBkWEpsSUhSb1lYUWdZMjl1ZEdGcGJuTWdaV3hsYldWdWRITWdXM04wWVhKMExpNHVaVzVrS1M0Z0tpOWNiaUFnSUNCbGVIQnZjblFnWm5WdVkzUnBiMjRnYzJ4cFkyVThWRDRvWld4bGJXVnVkSE02SUVkeWIzVndhVzVuUEZRK0xDQnpkR0Z5ZERvZ2JuVnRZbVZ5TENCbGJtUTZJRzUxYldKbGNpazZJRWR5YjNWd2FXNW5QRlErSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1Z1WkNBOFBTQnpkR0Z5ZENrZ2NtVjBkWEp1SUZ0ZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvYVhOTVpXRm1LR1ZzWlcxbGJuUnpLU2tnY21WMGRYSnVJR1ZzWlcxbGJuUnpMbk5zYVdObEtITjBZWEowTENCbGJtUXBPMXh1WEc0Z0lDQWdJQ0FnSUM4dklFWnBibVFnZEdobElHWnBjbk4wSUdkeWIzVndJSFJvWVhRZ1kyOXVkR0ZwYm5NZ2FXNWtaWGdnWUhOMFlYSjBZQzVjYmlBZ0lDQWdJQ0FnYkdWMElHbHVaR1Y0SUQwZ01DeGNiaUFnSUNBZ0lDQWdJQ0FnSUhObFpXNGdQU0F3TzF4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvYVc1a1pYZ2dQQ0JsYkdWdFpXNTBjeTVzWlc1bmRHZ2dKaVlnYzJWbGJpQXJJR052ZFc1MEtHVnNaVzFsYm5SelcybHVaR1Y0WFNrZ1BEMGdjM1JoY25RcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhObFpXNGdLejBnWTI5MWJuUW9aV3hsYldWdWRITmJhVzVrWlhoZEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsdVpHVjRLeXM3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQXZMeUJ6ZEdGeWRDQjNZWE1nWjNKbFlYUmxjaUIwYUdGdUlIUm9aU0JsYm5ScGNtVWdiR1Z1WjNSb0lHOW1JSFJvWlNCbmNtOTFjR2x1WjNNdVhHNGdJQ0FnSUNBZ0lHbG1JQ2hwYm1SbGVDQStQU0JsYkdWdFpXNTBjeTVzWlc1bmRHZ3BJSEpsZEhWeWJpQmJYVHRjYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J5WlhOMWJIUTZJSHNnYTJWNU9pQk1hWFJsY21Gc095QnliM2R6T2lCSGNtOTFjR2x1Wnp4VVBpQjlXMTBnUFNCYlhUdGNiaUFnSUNBZ0lDQWdkMmhwYkdVZ0tHbHVaR1Y0SUR3Z1pXeGxiV1Z1ZEhNdWJHVnVaM1JvSUNZbUlITmxaVzRnUENCbGJtUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdkeWIzVndJRDBnWld4bGJXVnVkSE5iYVc1a1pYaGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWjNKdmRYQlRhWHBsSUQwZ1kyOTFiblFvWjNKdmRYQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWjNKdmRYQlRkR0Z5ZENBOUlFMWhkR2d1YldGNEtITmxaVzRzSUhOMFlYSjBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdkeWIzVndSVzVrSUQwZ1RXRjBhQzV0YVc0b1ozSnZkWEJUYVhwbElDc2djMlZsYml3Z1pXNWtLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZ6ZFd4MExuQjFjMmdvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd0bGVUb2daM0p2ZFhBdWEyVjVMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEp2ZDNNNklITnNhV05sS0dkeWIzVndMbkp2ZDNNc0lHZHliM1Z3VTNSaGNuUWdMU0J6WldWdUxDQm5jbTkxY0VWdVpDQXRJSE5sWlc0cExGeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhObFpXNGdLejBnWjNKdmRYQlRhWHBsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhVzVrWlhnckt6dGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzRnSUNBZ2ZWeHVmVnh1SWl3Z0lpOHFLbHh1SUNvZ1FHMXZaSFZzWlNCaGNHbGNiaUFxTDF4dUx5b3FYRzRnS2lBZ1JuVnVZM1JwYjI1aGJDQnlaWFIxY200Z2RIbHdaU0JtYjNJZ1pYSnliM0lnYUdGdVpHeHBibWN1WEc0Z0tpQkFhR2xrWkdWdVhHNGdLaUFxTDF4dVpYaHdiM0owSUdOc1lYTnpJRk4xWTJObGMzTThWQ3dnUlQ0Z2UxeHVJQ0FnSUhCMVlteHBZeUJ6ZFdOalpYTnpablZzT2lCMGNuVmxPMXh1WEc0Z0lDQWdjSFZpYkdsaklHTnZibk4wY25WamRHOXlLSEIxWW14cFl5QjJZV3gxWlRvZ1ZDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuTjFZMk5sYzNObWRXd2dQU0IwY25WbE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhCMVlteHBZeUJ0WVhBOFZUNG9aam9nS0dFNklGUXBJRDArSUZVcE9pQlNaWE4xYkhROFZTd2dSVDRnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGTjFZMk5sYzNNb1ppaDBhR2x6TG5aaGJIVmxLU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjSFZpYkdsaklHWnNZWFJOWVhBOFZUNG9aam9nS0dFNklGUXBJRDArSUZKbGMzVnNkRHhWTENCRlBpazZJRkpsYzNWc2REeFZMQ0JGUGlCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbUtIUm9hWE11ZG1Gc2RXVXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIQjFZbXhwWXlCdFlYQkZjbkk4VlQ0b1pqb2dLR1U2SUVVcElEMCtJRlVwT2lCU1pYTjFiSFE4VkN3Z1ZUNGdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3lCaGN5QmhibmtnWVhNZ1VtVnpkV3gwUEZRc0lGVStPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIQjFZbXhwWXlCaWFXMWhjRHhVTWl3Z1JUSStLSE4xWTJNNklDaGhPaUJVS1NBOVBpQlVNaXdnWDJaaGFXdzZJQ2hpT2lCRktTQTlQaUJGTWlrNklGSmxjM1ZzZER4VU1pd2dSVEkrSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXViV0Z3S0hOMVkyTXBJR0Z6SUdGdWVUdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2RXSnNhV01nYjNKRmJITmxLRjkyWVd4MVpUb2dWQ2s2SUZRZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTUyWVd4MVpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2RXSnNhV01nWTJGemREeFZQaWdwT2lCU1pYTjFiSFE4VlN3Z1JUNGdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3lCaGN5Qmhibms3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjSFZpYkdsaklHOXlSV3h6WlZSb2NtOTNLRjl0WlhOellXZGxQem9nS0dVNklFVXBJRDArSUhOMGNtbHVaeWs2SUZRZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTUyWVd4MVpUdGNiaUFnSUNCOVhHNTlYRzVjYmk4cUtpQkdkVzVqZEdsdmJtRnNJSEpsZEhWeWJpQjBlWEJsSUdadmNpQmxjbkp2Y2lCb1lXNWtiR2x1Wnk1Y2JpQXFJRUJvYVdSa1pXNWNiaUFxTDF4dVpYaHdiM0owSUdOc1lYTnpJRVpoYVd4MWNtVThWQ3dnUlQ0Z2UxeHVJQ0FnSUhCMVlteHBZeUJ6ZFdOalpYTnpablZzT2lCbVlXeHpaVHRjYmx4dUlDQWdJSEIxWW14cFl5QmpiMjV6ZEhKMVkzUnZjaWh3ZFdKc2FXTWdaWEp5YjNJNklFVXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXpkV05qWlhOelpuVnNJRDBnWm1Gc2MyVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NIVmliR2xqSUcxaGNEeFZQaWhmWmpvZ0tHRTZJRlFwSUQwK0lGVXBPaUJTWlhOMWJIUThWU3dnUlQ0Z2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeUJoY3lCaGJua2dZWE1nUm1GcGJIVnlaVHhWTENCRlBqdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2RXSnNhV01nWm14aGRFMWhjRHhWUGloZlpqb2dLR0U2SUZRcElEMCtJRkpsYzNWc2REeFZMQ0JGUGlrNklGSmxjM1ZzZER4VkxDQkZQaUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdseklHRnpJR0Z1ZVNCaGN5QkdZV2xzZFhKbFBGVXNJRVUrTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEIxWW14cFl5QnRZWEJGY25JOFZUNG9aam9nS0dVNklFVXBJRDArSUZVcE9pQlNaWE4xYkhROFZDd2dWVDRnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lFWmhhV3gxY21Vb1ppaDBhR2x6TG1WeWNtOXlLU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjSFZpYkdsaklHSnBiV0Z3UEZReUxDQkZNajRvWDNOMVkyTTZJQ2hoT2lCVUtTQTlQaUJVTWl3Z1ptRnBiRG9nS0dJNklFVXBJRDArSUVVeUtUb2dVbVZ6ZFd4MFBGUXlMQ0JGTWo0Z2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV0WVhCRmNuSW9abUZwYkNrZ1lYTWdZVzU1TzF4dUlDQWdJSDFjYmx4dUlDQWdJSEIxWW14cFl5QnZja1ZzYzJVb2RtRnNkV1U2SUZRcE9pQlVJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFpoYkhWbE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhCMVlteHBZeUJqWVhOMFBGVStLQ2s2SUZKbGMzVnNkRHhWTENCRlBpQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6SUdGeklHRnVlVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndkV0pzYVdNZ2IzSkZiSE5sVkdoeWIzY29iV1Z6YzJGblpUODZJQ2hsT2lCRktTQTlQaUJ6ZEhKcGJtY3BPaUJVSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLRzFsYzNOaFoyVXBJSFJvY205M0lHNWxkeUJGY25KdmNpaHRaWE56WVdkbEtIUm9hWE11WlhKeWIzSXBLVHRjYmlBZ0lDQWdJQ0FnWld4elpTQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hDSmNJaUFySUhSb2FYTXVaWEp5YjNJcE8xeHVJQ0FnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJCSUcxdmJtRmthV01nY21WemRXeDBJSFI1Y0dVZ2QyaHBZMmdnYzNSdmNtVnpJR1ZwZEdobGNpQmNJbk4xWTJObGMzTmNJaUJ2Y2lCY0ltWmhhV3gxY21WY0lpNGdRVzRnWVd4MFpYSnVZWFJwZG1VZ2FHRnVaR3hwYm1jZ1pYaGpaWEIwYVc5dVlXd2dZbVZvWVhacGIzSmNiaUFxSUdKNUlIVnphVzVuSUhSb1pTQnlaWFIxY200Z2RtRnNkV1VnYVc1emRHVmhaQ0J2WmlCaGJpQmxlR05sY0hScGIyNHVYRzRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRkpsYzNWc2REeFVMQ0JGUGlBOUlGTjFZMk5sYzNNOFZDd2dSVDRnZkNCR1lXbHNkWEpsUEZRc0lFVStPMXh1WEc0dktpcGNiaUFxSUVCb2FXUmtaVzVjYmlBcUlFMXZibUZrYVdNZ0oxSmxjM1ZzZENjZ2RIbHdaU0IzYUdsamFDQmxibU5oY0hOMWJHRjBaWE1nZDJobGRHaGxjaUJoSUhCeWIyTmxaSFZ5WlNCemRXTmpaV1ZrWldRZ2IzSWdabUZwYkdWa0xDQmhjeUIzWld4c0lHRnpJR2wwSjNNZ2NtVjBkWEp1SUhaaGJIVmxMbHh1SUNvdlhHNWxlSEJ2Y25RZ2JtRnRaWE53WVdObElGSmxjM1ZzZENCN1hHNGdJQ0FnTHlvcUlFTnZibk4wY25WamRDQmhJRzVsZHlCemRXTmpaWE56SUhKbGMzVnNkQ0IzY21Gd2NHbHVaeUIwYUdVZ1oybDJaVzRnZG1Gc2RXVXVJQ292WEc0Z0lDQWdaWGh3YjNKMElHWjFibU4wYVc5dUlITjFZMk5sYzNNOFZDd2dSVDRvZG1Gc2RXVTZJRlFwT2lCU1pYTjFiSFE4VkN3Z1JUNGdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdibVYzSUZOMVkyTmxjM01vZG1Gc2RXVXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJEYjI1emRISjFZM1FnWVNCdVpYY2dabUZwYkhWeVpTQjJZV3gxWlNCM2NtRndjR2x1WnlCMGFHVWdaMmwyWlc0Z1pYSnliM0l1SUNvdlhHNGdJQ0FnWlhod2IzSjBJR1oxYm1OMGFXOXVJR1poYVd4MWNtVThWQ3dnUlQ0b1pYSnliM0k2SUVVcE9pQlNaWE4xYkhROFZDd2dSVDRnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lFWmhhV3gxY21Vb1pYSnliM0lwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCS2IybHVJSFIzYnlCeVpYTjFiSFJ6SUhkcGRHZ2dZU0JpYVMxbWRXNWpkR2x2YmlCaGJtUWdjbVYwZFhKdUlHRWdibVYzSUhKbGMzVnNkQzRnS2k5Y2JpQWdJQ0JsZUhCdmNuUWdablZ1WTNScGIyNGdabXhoZEUxaGNESThWREVzSUZReUxDQlBMQ0JGUGloY2JpQWdJQ0FnSUNBZ1ptbHljM1E2SUZKbGMzVnNkRHhVTVN3Z1JUNHNYRzRnSUNBZ0lDQWdJSE5sWTI5dVpEb2dVbVZ6ZFd4MFBGUXlMQ0JGUGl4Y2JpQWdJQ0FnSUNBZ1pqb2dLR0U2SUZReExDQmlPaUJVTWlrZ1BUNGdVbVZ6ZFd4MFBFOHNJRVUrWEc0Z0lDQWdLVG9nVW1WemRXeDBQRThzSUVVK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0dacGNuTjBMbk4xWTJObGMzTm1kV3dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoelpXTnZibVF1YzNWalkyVnpjMloxYkNrZ2NtVjBkWEp1SUdZb1ptbHljM1F1ZG1Gc2RXVXNJSE5sWTI5dVpDNTJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JsYkhObElISmxkSFZ5YmlCbVlXbHNkWEpsS0hObFkyOXVaQzVsY25KdmNpazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWm1GcGJIVnlaU2htYVhKemRDNWxjbkp2Y2lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dTbTlwYmlCMGQyOGdjbVZ6ZFd4MGN5QjNhWFJvSUdFZ1lta3RablZ1WTNScGIyNGdZVzVrSUhKbGRIVnliaUJoSUc1bGR5QnlaWE4xYkhRdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUcxaGNESThWREVzSUZReUxDQlBMQ0JGUGloY2JpQWdJQ0FnSUNBZ1ptbHljM1E2SUZKbGMzVnNkRHhVTVN3Z1JUNHNYRzRnSUNBZ0lDQWdJSE5sWTI5dVpEb2dVbVZ6ZFd4MFBGUXlMQ0JGUGl4Y2JpQWdJQ0FnSUNBZ1pqb2dLR0U2SUZReExDQmlPaUJVTWlrZ1BUNGdUMXh1SUNBZ0lDazZJRkpsYzNWc2REeFBMQ0JGUGlCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWJHRjBUV0Z3TWlobWFYSnpkQ3dnYzJWamIyNWtMQ0FvWVN3Z1lpa2dQVDRnYzNWalkyVnpjeWhtS0dFc0lHSXBLU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeW9xSUUxaGNDQmhJR1poYVd4aFlteGxJR1oxYm1OMGFXOXVJRzkyWlhJZ1lXeHNJR1ZzWlcxbGJuUnpJR2x1SUhSb1pTQnNhWE4wTENCeVpYUjFjbTVwYm1jZ1pXRnliSGtnYjI0Z1ptRnBiSFZ5WlM0Z0tpOWNiaUFnSUNCbGVIQnZjblFnWm5WdVkzUnBiMjRnYldGd1FXeHNQRlFzSUU4c0lFVStLR2x1Y0hWME9pQkpkR1Z5WVdKc1pUeFVQaXdnWm5WdVl6b2dLR2x1Y0hWME9pQlVLU0E5UGlCU1pYTjFiSFE4VHl3Z1JUNHBPaUJTWlhOMWJIUThUMXRkTENCRlBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElISmxjM1ZzZERvZ1QxdGRJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvWTI5dWMzUWdaV3hsYldWdWRDQnZaaUJwYm5CMWRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYjNWMGNIVjBJRDBnWm5WdVl5aGxiR1Z0Wlc1MEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDZ2hiM1YwY0hWMExuTjFZMk5sYzNObWRXd3BJSEpsZEhWeWJpQnZkWFJ3ZFhRdVkyRnpkQ2dwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOMWJIUXVjSFZ6YUNodmRYUndkWFF1ZG1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUZKbGMzVnNkQzV6ZFdOalpYTnpLSEpsYzNWc2RDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5b3FJRU5oZEdOb0lHRnVlU0JsY25KdmNuTWdhVzRnWVNCallXeHNMQ0J5WlhSMWNtNXBibWNnWVNCeVpYTjFiSFFnYVc1emRHVmhaQzRnS2k5Y2JpQWdJQ0JsZUhCdmNuUWdablZ1WTNScGIyNGdkSEo1YVc1blBGUStLR05oYkd3NklDZ3BJRDArSUZRcE9pQlNaWE4xYkhROFZDd2dSWEp5YjNJK0lIdGNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQlNaWE4xYkhRdWMzVmpZMlZ6Y3loallXeHNLQ2twTzF4dUlDQWdJQ0FnSUNCOUlHTmhkR05vSUNobGNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlGSmxjM1ZzZEM1bVlXbHNkWEpsS0dWeWNtOXlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCRGIyNTJaWEowSUdFZ2NISnZiV2x6WlNCM2FHbGphQ0J0WVhrZ2RHaHliM2NnYVc1MGJ5QmhJSEJ5YjIxcGMyVWdkMmhwWTJnZ2NtVjBkWEp1Y3lCaElISmxjM1ZzZENCdlppQjBhR1VnYzNWalkyVnpjMloxYkNCMllXeDFaU0J2Y2lCaGJpQmxjbkp2Y2k0Z0tpOWNiaUFnSUNCbGVIQnZjblFnWVhONWJtTWdablZ1WTNScGIyNGdZWE41Ym1NOFZENG9jSEp2YldselpUb2dVSEp2YldselpUeFVQaWs2SUZCeWIyMXBjMlU4VW1WemRXeDBQRlFzSUVWeWNtOXlQajRnZTF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUZKbGMzVnNkQzV6ZFdOalpYTnpLR0YzWVdsMElIQnliMjFwYzJVcE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRkpsYzNWc2RDNW1ZV2xzZFhKbEtHVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JuMWNiaUlzSUNKcGJYQnZjblFnZXlCU1pYTjFiSFFnZlNCbWNtOXRJRndpWVhCcEwzSmxjM1ZzZEZ3aU8xeHVYRzR2S2lvZ1UzUmhkR2xqSUhObGRDQmxiR1Z0Wlc1MElIZG9hV05vSUcxaGRHTm9aWE1nWlhabGNubDBhR2x1Wnk0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUVWMlpYSjVkR2hwYm1jZ1BTQjdJSFI1Y0dVNklGd2laWFpsY25sMGFHbHVaMXdpSUgwN1hHNHZLaW9nVTNSaGRHbGpJSE5sZENCbGJHVnRaVzUwSUhkb2FXTm9JRzFoZEdOb1pYTWdibTkwYUdsdVp5NGdLaTljYm1WNGNHOXlkQ0IwZVhCbElFNXZkR2hwYm1jZ1BTQjdJSFI1Y0dVNklGd2libTkwYUdsdVoxd2lJSDA3WEc0dktpb2dVMlYwSUhkb2FXTm9JRzFoZEdOb1pYTWdkR2hsSUc1bFoyRjBhVzl1SUc5bUlHRWdjMlYwTGlBcUwxeHVaWGh3YjNKMElIUjVjR1VnVG1WbllYUmxaRHhVUGlBOUlIc2dkSGx3WlRvZ1hDSnVaV2RoZEdWa1hDSTdJSFpoYkhWbE9pQlRaWFE4VkQ0Z2ZUdGNiaThxS2lCVFpYUWdkMmhwWTJnZ2JXRjBZMmhsY3lCaGJpQmhZM1IxWVd3Z2MyVjBJRzltSUhaaGJIVmxjeTRnSUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JCZEc5dFBGUStJRDBnZXlCMGVYQmxPaUJjSW1GMGIyMWNJanNnZG1Gc2RXVTZJRk5sZER4VVBpQjlPMXh1WEc0dktpb2dRV0p6ZEhKaFkzUWdabWxzZEdWeUlIUjVjR1VnZDJocFkyZ2djbVZ3Y21WelpXNTBjeUIwYUdVZ2NtVnpkV3gwY3lCdlppQmhjSEJzZVdsdVp5Qm1hV3gwWlhJZ2IzQmxjbUYwYVc5dWN5QjBieUIwYUdVZ1pHRjBZU0J6ZEc5eVpTNGdLaTljYm1WNGNHOXlkQ0IwZVhCbElFWnBiSFJsY2p4VVBpQTlJRVYyWlhKNWRHaHBibWNnZkNCT2IzUm9hVzVuSUh3Z1FYUnZiVHhVUGlCOElFNWxaMkYwWldROFZENDdYRzVjYmk4cUtpQlZkR2xzYVhSNUlHWjFibU4wYVc5dWN5Qm1iM0lnWldabWFXTnBaVzUwYkhrZ2IzQmxjbUYwYVc1bklHOXVJR1pwYkhSbGNuTXVJQ292WEc1bGVIQnZjblFnYm1GdFpYTndZV05sSUVacGJIUmxjbk1nZTF4dUlDQWdJQzhxS2lCVGRHRjBhV01nWm1sc2RHVnlJSGRvYVdOb0lHMWhkR05vWlhNZ1pYWmxjbmwwYUdsdVp5NGdLaTljYmlBZ0lDQmxlSEJ2Y25RZ1kyOXVjM1FnUlZaRlVsbFVTRWxPUnpvZ1JYWmxjbmwwYUdsdVp5QTlJSHNnZEhsd1pUb2dYQ0psZG1WeWVYUm9hVzVuWENJZ2ZUdGNiaUFnSUNBdktpb2dVM1JoZEdsaklHWnBiSFJsY2lCM2FHbGphQ0J0WVhSamFHVnpJRzV2ZEdocGJtY3VJQ292WEc0Z0lDQWdaWGh3YjNKMElHTnZibk4wSUU1UFZFaEpUa2M2SUU1dmRHaHBibWNnUFNCN0lIUjVjR1U2SUZ3aWJtOTBhR2x1WjF3aUlIMDdYRzRnSUNBZ0x5b3FJRVZ0Y0hSNUlITmxkQ0JqYjI1emRHRnVkQzRnS2k5Y2JpQWdJQ0JsZUhCdmNuUWdZMjl1YzNRZ1JVMVFWRmxmVTBWVU9pQlRaWFE4WVc1NVBpQTlJRzVsZHlCVFpYUW9LVHRjYmx4dUlDQWdJQzhxS2lCRGIyNXpkSEoxWTNRZ1lTQnVaWGNnWVhSdmJTQm1hV3gwWlhJdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUdGMGIyMDhWRDRvYzJWME9pQlRaWFE4VkQ0cE9pQkdhV3gwWlhJOFZENGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb2MyVjBMbk5wZW1VZ1BUMGdNQ2tnY21WMGRYSnVJRTVQVkVoSlRrYzdYRzVjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSHNnZEhsd1pUb2dYQ0poZEc5dFhDSXNJSFpoYkhWbE9pQnpaWFFnZlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lvZ1EyOXVjM1J5ZFdOMElHRWdabWxzZEdWeUlIUm9ZWFFnYldGMFkyaGxjeUJsZG1WeWVYUm9hVzVuSUc5eUlHNXZkR2hwYm1jdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUdOdmJuTjBZVzUwUEZRK0tIWmhiSFZsT2lCaWIyOXNaV0Z1S1RvZ1JtbHNkR1Z5UEZRK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0haaGJIVmxLU0J5WlhSMWNtNGdSVlpGVWxsVVNFbE9SenRjYmlBZ0lDQWdJQ0FnWld4elpTQnlaWFIxY200Z1RrOVVTRWxPUnp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2S2lvZ1EyOXVjM1J5ZFdOMElHRWdibVYzSUdGMGIyMGdabWxzZEdWeUlIZG9hV05vSUdseklFNVBWRWhKVGtjZ2FXWWdjMlYwSUdseklIVnVaR1ZtYVc1bFpDNGdLaTljYmlBZ0lDQmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JuVnNiR0ZpYkdWQmRHOXRQRlErS0hObGREb2dVMlYwUEZRK0lId2dkVzVrWldacGJtVmtLVG9nUm1sc2RHVnlQRlErSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhObGRDQWhQVDBnZFc1a1pXWnBibVZrSUQ4Z1lYUnZiU2h6WlhRcElEb2dUazlVU0VsT1J6dGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dRMjl1YzNSeWRXTjBJR0VnYm1WbllYUmxaQ0JoZEc5dElHWnBiSFJsY2k0Z0tpOWNiaUFnSUNCbGVIQnZjblFnWm5WdVkzUnBiMjRnYm1WbllYUmxaRHhVUGloelpYUTZJRk5sZER4VVBpazZJRVpwYkhSbGNqeFVQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaHpaWFF1YzJsNlpTQTlQU0F3S1NCeVpYUjFjbTRnUlZaRlVsbFVTRWxPUnp0Y2JseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2V5QjBlWEJsT2lCY0ltNWxaMkYwWldSY0lpd2dkbUZzZFdVNklITmxkQ0I5TzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCUWNtOWtkV05sY3lCMGFHVWdibVZuWVhScGIyNGdiMllnWVNCbWFXeDBaWEl1SUNvdlhHNGdJQ0FnWlhod2IzSjBJR1oxYm1OMGFXOXVJRzVsWjJGMFpUeFVQaWhtYVd4MFpYSTZJRVpwYkhSbGNqeFVQaWs2SUVacGJIUmxjanhVUGlCN1hHNGdJQ0FnSUNBZ0lITjNhWFJqYUNBb1ptbHNkR1Z5TG5SNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKbGRtVnllWFJvYVc1blhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFNVBWRWhKVGtjN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElGd2libTkwYUdsdVoxd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQkZWa1ZTV1ZSSVNVNUhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1GMGIyMWNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdibVZuWVhSbFpDaG1hV3gwWlhJdWRtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltNWxaMkYwWldSY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lYUnZiU2htYVd4MFpYSXVkbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5b3FJRVJsZEdWeWJXbHVaU0JwWmlCMGFHVWdaMmwyWlc0Z1ptbHNkR1Z5SUdseklHUmxabWx1YVhScGRtVnNlU0JqZFhKeVpXNTBiSGtnWlcxd2RIa3VJQ292WEc0Z0lDQWdaWGh3YjNKMElHWjFibU4wYVc5dUlHVnRjSFI1UEZRK0tHWnBiSFJsY2pvZ1JtbHNkR1Z5UEZRK0tUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ0lDQWdJSE4zYVhSamFDQW9abWxzZEdWeUxuUjVjR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSmxkbVZ5ZVhSb2FXNW5YQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbTVsWjJGMFpXUmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElGd2lZWFJ2YlZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWFXeDBaWEl1ZG1Gc2RXVXVjMmw2WlNBOVBTQXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW01dmRHaHBibWRjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJTWlhOdmJIWmxJR0VnZEc5d0xXeGxkbVZzSUdacGJIUmxjaUIzYVhSb0lIUm9aU0J6WlhRZ2IyWWdZV3hzSUdGMllXbHNZV0pzWlNCdlltcGxZM1J6TGlBcUwxeHVJQ0FnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ5WlhOdmJIWmxQRlErS0dacGJIUmxjam9nUm1sc2RHVnlQRlErTENCbGRtVnllWFJvYVc1bk9pQlRaWFE4VkQ0cE9pQlRaWFE4VkQ0Z2UxeHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tHWnBiSFJsY2k1MGVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aVpYWmxjbmwwYUdsdVoxd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmxkbVZ5ZVhSb2FXNW5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW01dmRHaHBibWRjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnUlUxUVZGbGZVMFZVTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltRjBiMjFjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWm1sc2RHVnlMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbTVsWjJGMFpXUmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMlYwU1c1MFpYSnpaV04wVG1WbllYUnBiMjRvWlhabGNubDBhR2x1Wnl3Z1ptbHNkR1Z5TG5aaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCSmJuUmxjbk5sWTNRZ1lXNGdhWFJsY21GaWJHVWdiMllnWm1sc2RHVnljeTRnS2k5Y2JpQWdJQ0JsZUhCdmNuUWdablZ1WTNScGIyNGdhVzUwWlhKelpXTjBQRlErS0dWc1pXMWxiblJ6T2lCSmRHVnlZV0pzWlR4R2FXeDBaWEk4VkQ0K0tUb2dSbWxzZEdWeVBGUStJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR3hoZW5sSmJuUmxjbk5sWTNRb1pXeGxiV1Z1ZEhNc0lDaDRLU0E5UGlCNEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dTVzUwWlhKelpXTjBJR1pwYkhSbGNuTWdiR0Y2YVd4NUxDQnphRzl5ZEMxamFYSmpkV2wwYVc1bklHbG1JSFJvWlNCcGJuUmxjbk5sWTNScGIyNGdkMjkxYkdRZ2NISnZaSFZqWlNCT1QxUklTVTVITGlBcUwxeHVJQ0FnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJzWVhwNVNXNTBaWEp6WldOMFBFa3NJRlErS0Z4dUlDQWdJQ0FnSUNCbGJHVnRaVzUwY3pvZ1NYUmxjbUZpYkdVOFNUNHNYRzRnSUNBZ0lDQWdJSEJ5YjJSMVkyVTZJQ2hwYm5CMWREb2dTU2tnUFQ0Z1JtbHNkR1Z5UEZRK0lId2dkVzVrWldacGJtVmtYRzRnSUNBZ0tUb2dSbWxzZEdWeVBGUStJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR3hoZW5sR1lXbHNZV0pzWlVsdWRHVnljMlZqZEdsdmJpaGxiR1Z0Wlc1MGN5d2dLSGdwSUQwK0lGSmxjM1ZzZEM1emRXTmpaWE56S0hCeWIyUjFZMlVvZUNrcEtTNXZja1ZzYzJWVWFISnZkeWdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCSmJuUmxjbk5sWTNRZ1ptbHNkR1Z5Y3lCc1lYcHBiSGtzSUhOb2IzSjBMV05wY21OMWFYUnBibWNnYVdZZ2RHaGxJR2x1ZEdWeWMyVmpkR2x2YmlCM2IzVnNaQ0J3Y205a2RXTmxJRTVQVkVoSlRrY3VJQ292WEc0Z0lDQWdaWGh3YjNKMElHWjFibU4wYVc5dUlHeGhlbmxHWVdsc1lXSnNaVWx1ZEdWeWMyVmpkR2x2Ymp4SkxDQlVMQ0JGUGloY2JpQWdJQ0FnSUNBZ1pXeGxiV1Z1ZEhNNklFbDBaWEpoWW14bFBFaytMRnh1SUNBZ0lDQWdJQ0J3Y205a2RXTmxPaUFvYVc1d2RYUTZJRWtwSUQwK0lGSmxjM1ZzZER4R2FXeDBaWEk4VkQ0Z2ZDQjFibVJsWm1sdVpXUXNJRVUrWEc0Z0lDQWdLVG9nVW1WemRXeDBQRVpwYkhSbGNqeFVQaXdnUlQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCaGRHOXRjem9nVTJWMFBGUStXMTBnUFNCYlhUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2JtVm5ZWFJwYjI1ek9pQlRaWFE4VkQ1YlhTQTlJRnRkTzF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCbGJHVnRaVzUwSUc5bUlHVnNaVzFsYm5SektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J0WVhsaVpVWnBiSFJsY2lBOUlIQnliMlIxWTJVb1pXeGxiV1Z1ZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXMWhlV0psUm1sc2RHVnlMbk4xWTJObGMzTm1kV3dwSUhKbGRIVnliaUJ0WVhsaVpVWnBiSFJsY2k1allYTjBLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHWnBiSFJsY2lBOUlHMWhlV0psUm1sc2RHVnlMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHWnBiSFJsY2lBOVBUMGdkVzVrWldacGJtVmtLU0JqYjI1MGFXNTFaVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnUlcxd2RIa2dabWxzZEdWeWN5QjNhV3hzSUhCeWIyUjFZMlVnWVc0Z1pXMXdkSGtnYVc1MFpYSnpaV04wYVc5dUxseHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHVnRjSFI1S0dacGJIUmxjaWtwSUhKbGRIVnliaUJTWlhOMWJIUXVjM1ZqWTJWemN5aE9UMVJJU1U1SEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklFVldSVkpaVkVoSlRrY2dabWxzZEdWeWN5QmhjbVVnY21Wa2RXNWtZVzUwSUdsdUlFRk9SSE1zSUhOcmFYQWdkR2hsYlM1Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNobWFXeDBaWEl1ZEhsd1pTQTlQVDBnWENKbGRtVnllWFJvYVc1blhDSXBJR052Ym5ScGJuVmxPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJYYVd4c0lHOXViSGtnWW1VZ2JHVm1kQ0IzYVhSb0lHRjBiMjF6SUc5eUlHNWxaMkYwYVc5dWN5NWNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaG1hV3gwWlhJdWRIbHdaU0E5UFNCY0ltRjBiMjFjSWlrZ1lYUnZiWE11Y0hWemFDaG1hV3gwWlhJdWRtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppQW9abWxzZEdWeUxuUjVjR1VnUFQwZ1hDSnVaV2RoZEdWa1hDSXBJRzVsWjJGMGFXOXVjeTV3ZFhOb0tHWnBiSFJsY2k1MllXeDFaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQXZMeUJYWlNCemRHRnlkQ0IzYVhSb0lITnZiV1YwYUdsdVp5QnZaaUIwYUdVZ1ptOXliU0JoSUNZbUlHSWdKaVlnSVdNZ0ppWWdJV1F1WEc0Z0lDQWdJQ0FnSUM4dklFbG1JRzV2SUhSbGNtMXpMQ0IwYUdWdUlHVjJaWEo1ZEdocGJtY2dkMkZ6SUVWV1JWSlpWRWhKVGtjZ2MyOGdjbVYwZFhKdUlIUm9ZWFF1WEc0Z0lDQWdJQ0FnSUM4dklFbG1JRzl1YkhrZ1lYUnZiWE1zSUdwMWMzUWdhVzUwWlhKelpXTjBJSFJvWlcwZ0tHRWdKaVlnWWlrdVhHNGdJQ0FnSUNBZ0lDOHZJRWxtSUc5dWJIa2dibVZuWVhScGIyNXpMQ0IwYUdWdUlISmxkM0pwZEdVZ0lXTWdKaVlnSVdRZ1BUNGdJU2hqSUh4OElHUXBJR0Z1WkNCeVpYUjFjbTRnYm1WbllYUmxaQ2hqSUh4OElHUXBMbHh1SUNBZ0lDQWdJQ0F2THlCSlppQmliM1JvTENCamIyMXdkWFJsSUhnZ1BTQW9ZU0FtSmlCaUtTQmhibVFnZVNBOUlDaGpJSHg4SUdRcExDQmhibVFnZEdobGJpQmpiMjF3ZFhSbElIZ2dKaVlnSVhrdVhHNWNiaUFnSUNBZ0lDQWdhV1lnS0dGMGIyMXpMbXhsYm1kMGFDQTlQU0F3SUNZbUlHNWxaMkYwYVc5dWN5NXNaVzVuZEdnZ1BUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlGSmxjM1ZzZEM1emRXTmpaWE56S0VWV1JWSlpWRWhKVGtjcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR0YwYjIxekxteGxibWQwYUNBK0lEQWdKaVlnYm1WbllYUnBiMjV6TG14bGJtZDBhQ0E5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnVW1WemRXeDBMbk4xWTJObGMzTW9ZWFJ2YlNoelpYUkpiblJsY25ObFkzUW9ZWFJ2YlhNcEtTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWVhSdmJYTXViR1Z1WjNSb0lEMDlJREFnSmlZZ2JtVm5ZWFJwYjI1ekxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCU1pYTjFiSFF1YzNWalkyVnpjeWh1WldkaGRHVmtLSE5sZEZWdWFXOXVLRzVsWjJGMGFXOXVjeWtwS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQlNaWE4xYkhRdWMzVmpZMlZ6Y3loR2FXeDBaWEp6TG1GMGIyMG9jMlYwU1c1MFpYSnpaV04wVG1WbllYUnBiMjRvYzJWMFNXNTBaWEp6WldOMEtHRjBiMjF6S1N3Z2MyVjBWVzVwYjI0b2JtVm5ZWFJwYjI1ektTa3BLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCVmJtbHZiaUJtYVd4MFpYSnpMQ0J3Y205a2RXTnBibWNnWVNCemFXNW5iR1VnY21WemRXeDBJR1pwYkhSbGNpNGdLaTljYmlBZ0lDQmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2RXNXBiMjQ4VkQ0b1ptbHNkR1Z5Y3pvZ1NYUmxjbUZpYkdVOFJtbHNkR1Z5UEZRK1BpazZJRVpwYkhSbGNqeFVQaUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJzWVhwNVZXNXBiMjRvWm1sc2RHVnljeXdnS0hncElEMCtJSGdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzhxS2lCVmJtbHZiaUJtYVd4MFpYSnpJR3hoZW1sc2VTd2djMmh2Y25RdFkybHlZM1ZwZEdsdVp5QnBaaUIwYUdVZ2RXNXBiMjRnZDI5MWJHUWdjSEp2WkhWalpTQkZWa1ZTV1ZSSVNVNUhMaUFxTDF4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnNZWHA1Vlc1cGIyNDhTU3dnVkQ0b1pXeGxiV1Z1ZEhNNklFbDBaWEpoWW14bFBFaytMQ0J3Y205a2RXTmxPaUFvYVc1d2RYUTZJRWtwSUQwK0lFWnBiSFJsY2p4VVBpQjhJSFZ1WkdWbWFXNWxaQ2s2SUVacGJIUmxjanhVUGlCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCc1lYcDVSbUZwYkdGaWJHVlZibWx2YmlobGJHVnRaVzUwY3l3Z0tIZ3BJRDArSUZKbGMzVnNkQzV6ZFdOalpYTnpLSEJ5YjJSMVkyVW9lQ2twS1M1dmNrVnNjMlZVYUhKdmR5Z3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJWYm1sdmJpQm1hV3gwWlhKeklHeGhlbWxzZVN3Z2MyaHZjblF0WTJseVkzVnBkR2x1WnlCcFppQjBhR1VnZFc1cGIyNGdkMjkxYkdRZ2NISnZaSFZqWlNCRlZrVlNXVlJJU1U1SExpQXFMMXh1SUNBZ0lHVjRjRzl5ZENCbWRXNWpkR2x2YmlCc1lYcDVSbUZwYkdGaWJHVlZibWx2Ymp4SkxDQlVMQ0JGUGloY2JpQWdJQ0FnSUNBZ1pXeGxiV1Z1ZEhNNklFbDBaWEpoWW14bFBFaytMRnh1SUNBZ0lDQWdJQ0J3Y205a2RXTmxPaUFvYVc1d2RYUTZJRWtwSUQwK0lGSmxjM1ZzZER4R2FXeDBaWEk4VkQ0Z2ZDQjFibVJsWm1sdVpXUXNJRVUrWEc0Z0lDQWdLVG9nVW1WemRXeDBQRVpwYkhSbGNqeFVQaXdnUlQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCaGRHOXRjem9nVTJWMFBGUStXMTBnUFNCYlhUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2JtVm5ZWFJwYjI1ek9pQlRaWFE4VkQ1YlhTQTlJRnRkTzF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCbGJHVnRaVzUwSUc5bUlHVnNaVzFsYm5SektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J0WVhsaVpVWnBiSFJsY2lBOUlIQnliMlIxWTJVb1pXeGxiV1Z1ZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXMWhlV0psUm1sc2RHVnlMbk4xWTJObGMzTm1kV3dwSUhKbGRIVnliaUJ0WVhsaVpVWnBiSFJsY2k1allYTjBLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHWnBiSFJsY2lBOUlHMWhlV0psUm1sc2RHVnlMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHWnBiSFJsY2lBOVBUMGdkVzVrWldacGJtVmtLU0JqYjI1MGFXNTFaVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnUlZaRlVsbFVTRWxPUnlCbWFXeDBaWEp6SUhkcGJHd2djSEp2WkhWalpTQmxkbVZ5ZVhSb2FXNW5JR0ZzZDJGNWN5NWNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaG1hV3gwWlhJdWRIbHdaU0E5UFQwZ1hDSmxkbVZ5ZVhSb2FXNW5YQ0lwSUhKbGRIVnliaUJTWlhOMWJIUXVjM1ZqWTJWemN5aEZWa1ZTV1ZSSVNVNUhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRVZ0Y0hSNUlHWnBiSFJsY25NZ1lYSmxJSEpsWkhWdVpHRnVkQzVjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hsYlhCMGVTaG1hV3gwWlhJcEtTQmpiMjUwYVc1MVpUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdWMmxzYkNCdmJteDVJR0psSUd4bFpuUWdkMmwwYUNCaGRHOXRjeUJ2Y2lCdVpXZGhkR2x2Ym5NdVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1ptbHNkR1Z5TG5SNWNHVWdQVDBnWENKaGRHOXRYQ0lwSUdGMGIyMXpMbkIxYzJnb1ptbHNkR1Z5TG5aaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnYVdZZ0tHWnBiSFJsY2k1MGVYQmxJRDA5SUZ3aWJtVm5ZWFJsWkZ3aUtTQnVaV2RoZEdsdmJuTXVjSFZ6YUNobWFXeDBaWEl1ZG1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdUM0lnYVhNZ1lTQmlhWFFnYUdGeVpHVnlJSFJvWVc0Z1FVNUVJSE5wYm1ObElIbHZkU0JqWVc0Z1pXNWtJSFZ3SUhkcGRHZ2djMk5sYm1GeWFXOXpJR3hwYTJVZ1lTQjhmQ0FoWWl3Z2QyaHBZMmdnWVhKbFhHNGdJQ0FnSUNBZ0lDOHZJRzV2ZENCamIyMXdkWFJoWW14bElHUnBjbVZqZEd4NUxpQkliM2RsZG1WeUxDQjNaU0JqWVc0Z1pHOGdZbTl2YkdWaGJpQnNiMmRwWXlCMGJ5QmhiSGRoZVhNZ2NISnZaSFZqWlNCaElITnBibWRzWlZ4dUlDQWdJQ0FnSUNBdkx5QnpaWFF1WEc0Z0lDQWdJQ0FnSUM4dklFbG1JRzV2ZEdocGJtY2dQVDRnYm05MGFHbHVaeXdnYm04Z2JtOXVMV1Z0Y0hSNUlHWnBiSFJsY25NdVhHNGdJQ0FnSUNBZ0lDOHZJRWxtSUdGMGIyMXpJR0oxZENCdWJ5QnVaV2RoZEdsdmJuTWdLR0VnZkh3Z1lpQjhmQ0JqS1NBOVBpQmpiMjF3ZFhSbElIVnVhVzl1TGx4dUlDQWdJQ0FnSUNBdkx5QkpaaUJ1WldkaGRHbHZibk1nWW5WMElHNXZJR0YwYjIxeklDZ2hZU0I4ZkNBaFlpQjhmQ0FoWXlrZ1BUNGdjbVYzY21sMFpTQmhjeUFoS0dFZ0ppWWdZaUFtSmlCaktTNWNiaUFnSUNBZ0lDQWdMeThnU1dZZ1ltOTBhRG9nS0dFZ2ZId2dZaUI4ZkNBaFl5QjhmQ0FoWkNrZ1BUNGdZMjl0WW1sdVpTQmxZV05vSUhCaGNuUWdhVzUwYnlBb1lTQjhmQ0JpS1NCOGZDQW9JV01nZkh3Z0lXUXBJRDArSUNoaElIeDhJR0lwSUh4OElDRW9ZeUFtSmlCa0tTQTlQaUJsSUh4OElDRm1JRDArSUNFb0lXVWdKaVlnWmlrZ2QyaHBZMmhjYmlBZ0lDQWdJQ0FnTHk4Z1kyRnVJR0psSUdOdmJYQjFkR1ZrSUhWemFXNW5JR2x1ZEdWeWMyVmpkR2x2YmlCc2IyZHBZeTVjYmx4dUlDQWdJQ0FnSUNCcFppQW9ZWFJ2YlhNdWJHVnVaM1JvSUQwOUlEQWdKaVlnYm1WbllYUnBiMjV6TG14bGJtZDBhQ0E5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnVW1WemRXeDBMbk4xWTJObGMzTW9UazlVU0VsT1J5azdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWVhSdmJYTXViR1Z1WjNSb0lENGdNQ0FtSmlCdVpXZGhkR2x2Ym5NdWJHVnVaM1JvSUQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCU1pYTjFiSFF1YzNWalkyVnpjeWhHYVd4MFpYSnpMbUYwYjIwb2MyVjBWVzVwYjI0b1lYUnZiWE1wS1NrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZWFJ2YlhNdWJHVnVaM1JvSUQwOUlEQWdKaVlnYm1WbllYUnBiMjV6TG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJTWlhOMWJIUXVjM1ZqWTJWemN5aEdhV3gwWlhKekxtNWxaMkYwWldRb2MyVjBTVzUwWlhKelpXTjBLRzVsWjJGMGFXOXVjeWtwS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQlNaWE4xYkhRdWMzVmpZMlZ6Y3lodVpXZGhkR1ZrS0hObGRFbHVkR1Z5YzJWamRFNWxaMkYwYVc5dUtITmxkRWx1ZEdWeWMyVmpkQ2h1WldkaGRHbHZibk1wTENCelpYUlZibWx2YmloaGRHOXRjeWtwS1NrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdktpb2dSV1ptYVdOcFpXNTBiSGtnWTI5dGNIVjBaU0IwYUdVZ2FXNTBaWEp6WldOMGFXOXVJRzltSUhObGRITXVJQ292WEc0Z0lDQWdaWGh3YjNKMElHWjFibU4wYVc5dUlITmxkRWx1ZEdWeWMyVmpkRHhVUGloelpYUnpPaUJUWlhROFZENWJYU2s2SUZObGREeFVQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaHpaWFJ6TG14bGJtZDBhQ0E5UFNBd0tTQnlaWFIxY200Z2JtVjNJRk5sZENncE8xeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaHpaWFJ6TG14bGJtZDBhQ0E5UFNBeEtTQnlaWFIxY200Z2MyVjBjMXN3WFR0Y2JseHVJQ0FnSUNBZ0lDQXZMeUJUYjNKMElHSjVJSE5wZW1VZ1lXNWtJR052YldKcGJtVWdjMjFoYkd4bGMzUWdZVzVrSUd4aGNtZGxjM1FnYzJWMElISmxjR1ZoZEdWa2JIa3VYRzRnSUNBZ0lDQWdJR3hsZENCemIzSjBaV1FnUFNBb1cxMGdZWE1nVTJWMFBGUStXMTBwTG1OdmJtTmhkQ2h6WlhSektTNXpiM0owS0NoaExDQmlLU0E5UGlCaExuTnBlbVVnTFNCaUxuTnBlbVVwTzF4dVhHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNoemIzSjBaV1F1YkdWdVozUm9JRDRnTVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjbVZ6ZFd4MElEMGdibVYzSUZObGREeFVQaWdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JHRnlaMlZ6ZENBOUlITnZjblJsWkM1d2IzQW9LU0U3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR1ZzWlcxbGJuUWdiMllnYzI5eWRHVmtXekJkS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR3hoY21kbGMzUXVhR0Z6S0dWc1pXMWxiblFwS1NCeVpYTjFiSFF1WVdSa0tHVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6YjNKMFpXUmJNRjBnUFNCeVpYTjFiSFE3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2MyOXlkR1ZrV3pCZE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4cUtpQkZabVpwWTJsbGJuUnNlU0JqYjIxd2RYUmxJSFJvWlNCMWJtbHZiaUJ2WmlCelpYUnpMaUFxTDF4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnpaWFJWYm1sdmJqeFVQaWh6WlhSek9pQlRaWFE4VkQ1YlhTazZJRk5sZER4VVBpQjdYRzRnSUNBZ0lDQWdJR2xtSUNoelpYUnpMbXhsYm1kMGFDQTlQU0F3S1NCeVpYUjFjbTRnYm1WM0lGTmxkQ2dwTzF4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoelpYUnpMbXhsYm1kMGFDQTlQU0F4S1NCeVpYUjFjbTRnYzJWMGMxc3dYVHRjYmx4dUlDQWdJQ0FnSUNBdkx5QkpKMjBnYm05MElITjFjbVVnYVdZZ2RHaGxjbVVnYVhNZ1lXNTVJSFZ6WldaMWJDQnZjSFJwYldsNllYUnBiMjRnWm05eUlITmxkQ0IxYm1sdmJuTXNJSE52SUdwMWMzUWdZV1JrSUhSb1pXMGdZV3hzSUVrZ1ozVmxjM011WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsYzNWc2RDQTlJRzVsZHlCVFpYUThWRDRvS1R0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnpaWFFnYjJZZ2MyVjBjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0JsYkdWdFpXNTBJRzltSUhObGRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RDNWhaR1FvWld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHFLaUJGWm1acFkybGxiblJzZVNCamIyMXdkWFJsSUdGMGIyMGdKaVlnSVc1bFoyRjBaV1F1SUNvdlhHNGdJQ0FnWlhod2IzSjBJR1oxYm1OMGFXOXVJSE5sZEVsdWRHVnljMlZqZEU1bFoyRjBhVzl1UEZRK0tHRjBiMjA2SUZObGREeFVQaXdnYm1WbllYUmxaRG9nVTJWMFBGUStLVG9nVTJWMFBGUStJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHRjBiMjB1YzJsNlpTQStJRzVsWjJGMFpXUXVjMmw2WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1ZFOUVUem9nVjI5MWJHUWdZbVVnYm1salpTQjBieUJoZG05cFpDQjBhR1VnWTI5d2VTd2djMmx1WTJVZ1NTZHRJRzV2ZENCemRYSmxJR2wwSjNNZ1lXNTVJR1poYzNSbGNpQjNhWFJvSUhSb1pTQmpiM0I1TGx4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NtVnpkV3gwSUQwZ2JtVjNJRk5sZENoaGRHOXRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHVnNaVzFsYm5RZ2IyWWdibVZuWVhSbFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RDNWtaV3hsZEdVb1pXeGxiV1Z1ZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE4xYkhRN1hHNGdJQ0FnSUNBZ0lIMGdMeW9nWVhSdmJTNXphWHBsSUR3Z2JtVm5ZWFJwYjI0dWMybDZaU0FxTHlCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhKbGMzVnNkQ0E5SUc1bGR5QlRaWFE4VkQ0b0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdWc1pXMWxiblFnYjJZZ1lYUnZiU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHVaV2RoZEdWa0xtaGhjeWhsYkdWdFpXNTBLU2tnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WemRXeDBMbUZrWkNobGJHVnRaVzUwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjM1ZzZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JuMWNiaUlzSUNKcGJYQnZjblFnZXlCTWFYUmxjbUZzTENCTWFYUmxjbUZzY3lCOUlHWnliMjBnWENKbGVIQnlaWE56YVc5dUwyeHBkR1Z5WVd4Y0lqdGNibWx0Y0c5eWRDQjdJRVpwYkhSbGNuTWdmU0JtY205dElGd2lMaTltYVd4MFpYSnpYQ0k3WEc1Y2JpOHFLaUJEYjIxd1lYSnBjMjl1SUc5d1pYSmhkRzl5Y3lCM2FHbGphQ0I1YVdWc1pDQjBjblZsTDJaaGJITmxMaUFxTDF4dVpYaHdiM0owSUhSNWNHVWdRMjl0Y0dGeVpVOXdJRDBnWENJK1hDSWdmQ0JjSWo0OVhDSWdmQ0JjSWp3OVhDSWdmQ0JjSWp4Y0lpQjhJRndpUFZ3aUlId2dYQ0loUFZ3aU8xeHVMeW9xSUVGeWFYUm9iV1YwYVdNZ2IzQmxjbUYwYjNKeklIZG9hV05vSUhscFpXeGtJRzUxYldKbGNuTWdZVzVrSUc5MGFHVnlJSFpoYkhWbGN5NGdLaTljYm1WNGNHOXlkQ0IwZVhCbElFRnlhWFJvYldWMGFXTlBjQ0E5SUZ3aUsxd2lJSHdnWENJdFhDSWdmQ0JjSWlwY0lpQjhJRndpTDF3aUlId2dYQ0lsWENJZ2ZDQmNJaVpjSWlCOElGd2lmRndpTzF4dUx5b3FJRWx1WkdWNElHRWdkbUZzZFdVZ2FXNTBieUJoYm05MGFHVnlJSFpoYkhWbExpQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1RHOW5hV05oYkU5d0lEMGdYQ0pwYm1SbGVGd2lPMXh1THlvcUlFRnNiQ0IyWVd4cFpDQmlhVzVoY25rZ2IzQmxjbUYwYjNKekxpQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1FtbHVZWEo1VDNBZ1BTQkRiMjF3WVhKbFQzQWdmQ0JCY21sMGFHMWxkR2xqVDNBZ2ZDQk1iMmRwWTJGc1QzQTdYRzVjYm1WNGNHOXlkQ0IwZVhCbElFVjRjSEpsYzNOcGIyNGdQVnh1SUNBZ0lId2dUR2wwWlhKaGJFVjRjSEpsYzNOcGIyNWNiaUFnSUNCOElGWmhjbWxoWW14bFJYaHdjbVZ6YzJsdmJseHVJQ0FnSUh3Z1RHbHpkRVY0Y0hKbGMzTnBiMjVjYmlBZ0lDQjhJRTlpYW1WamRFVjRjSEpsYzNOcGIyNWNiaUFnSUNCOElFSnBibUZ5ZVU5d1JYaHdjbVZ6YzJsdmJseHVJQ0FnSUh3Z1JuVnVZM1JwYjI1RmVIQnlaWE56YVc5dVhHNGdJQ0FnZkNCTVlXMWlaR0ZGZUhCeVpYTnphVzl1WEc0Z0lDQWdmQ0JPWldkaGRHVmtSWGh3Y21WemMybHZianRjYmx4dUx5b3FJRXhwZEdWeVlXd2djbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdjMjl0WlNCbWFXVnNaQ0IwZVhCbExpQXFMMXh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JNYVhSbGNtRnNSWGh3Y21WemMybHZiaUI3WEc0Z0lDQWdkSGx3WlRvZ1hDSnNhWFJsY21Gc1hDSTdYRzRnSUNBZ2RtRnNkV1U2SUV4cGRHVnlZV3c3WEc1OVhHNWNiaThxS2lCQklIWmhjbWxoWW14bElHWnBaV3hrSUdadmNpQmhJSFpoY21saFlteGxJSGRwZEdnZ1lTQm5hWFpsYmlCdVlXMWxMaUFxTDF4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCV1lYSnBZV0pzWlVWNGNISmxjM05wYjI0Z2UxeHVJQ0FnSUhSNWNHVTZJRndpZG1GeWFXRmliR1ZjSWp0Y2JpQWdJQ0J1WVcxbE9pQnpkSEpwYm1jN1hHNTlYRzVjYmk4cUtpQkJJR3hwYzNRZ2JHbDBaWEpoYkN3Z2QyaHBZMmdnYVhNZ1lXNGdiM0prWlhKbFpDQmpiMnhzWldOMGFXOXVJRzltSUdacFpXeGtjeTRnS2k5Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1RHbHpkRVY0Y0hKbGMzTnBiMjRnZTF4dUlDQWdJSFI1Y0dVNklGd2liR2x6ZEZ3aU8xeHVJQ0FnSUhaaGJIVmxjem9nUlhod2NtVnpjMmx2Ymx0ZE8xeHVmVnh1WEc0dktpb2dRVzRnYjJKcVpXTjBJR3hwZEdWeVlXd3NJSGRvYVdOb0lHbHpJR0VnYldGd2NHbHVaeUJ2WmlCdVlXMWxJSFJ2SUdacFpXeGtMaUFxTDF4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCUFltcGxZM1JGZUhCeVpYTnphVzl1SUh0Y2JpQWdJQ0IwZVhCbE9pQmNJbTlpYW1WamRGd2lPMXh1SUNBZ0lIWmhiSFZsY3pvZ1VtVmpiM0prUEhOMGNtbHVaeXdnUlhod2NtVnpjMmx2Ymo0N1hHNTlYRzVjYmk4cUtpQkJJR0pwYm1GeWVTQnZjR1Z5WVhSdmNpQmxlSEJ5WlhOemFXOXVJSGRvYVdOb0lHTnZiV0pwYm1WeklIUjNieUJ6ZFdKdWIyUmxjeUJ6YjIxbGFHOTNMaUFxTDF4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCQ2FXNWhjbmxQY0VWNGNISmxjM05wYjI0Z2UxeHVJQ0FnSUhSNWNHVTZJRndpWW1sdVlYSjViM0JjSWp0Y2JpQWdJQ0JzWldaME9pQkZlSEJ5WlhOemFXOXVPMXh1SUNBZ0lISnBaMmgwT2lCRmVIQnlaWE56YVc5dU8xeHVJQ0FnSUc5d09pQkNhVzVoY25sUGNEdGNibjFjYmx4dUx5b3FJRUVnWm5WdVkzUnBiMjRnWlhod2NtVnpjMmx2YmlCM2FHbGphQ0JqWVd4c2N5QmhJR1oxYm1OMGFXOXVJRzl1SURBZ2IzSWdiVzl5WlNCaGNtZDFiV1Z1ZEhNdUlDb3ZYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRVoxYm1OMGFXOXVSWGh3Y21WemMybHZiaUI3WEc0Z0lDQWdkSGx3WlRvZ1hDSm1kVzVqZEdsdmJsd2lPMXh1SUNBZ0lDOHFLaUJGYVhSb1pYSWdkR2hsSUc1aGJXVWdiMllnZEdobElHWjFibU4wYVc5dUlHSmxhVzVuSUdOaGJHeGxaQ0J2Y2lCaElFWjFibU4wYVc5dUlHOWlhbVZqZEM0Z0tpOWNiaUFnSUNCbWRXNWpPaUJGZUhCeVpYTnphVzl1TzF4dUlDQWdJQzhxS2lCVWFHVWdiR2x6ZENCdlppQmhjbWQxYldWdWRITWdZbVZwYm1jZ2NHRnpjMlZrSUhSdklIUm9aU0JtZFc1amRHbHZiaTRnS2k5Y2JpQWdJQ0JoY21kMWJXVnVkSE02SUVWNGNISmxjM05wYjI1YlhUdGNibjFjYmx4dUx5b3FJRUZ1SUdsdWJHbHVaU0JtZFc1amRHbHZiaUJoWTJObGNIUnBibWNnYjI1bElHOXlJRzF2Y21VZ1lYSm5kVzFsYm5SeklHRnVaQ0J3Y205a2RXTnBibWNnWVNCMllXeDFaUzRnS2k5Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1RHRnRZbVJoUlhod2NtVnpjMmx2YmlCN1hHNGdJQ0FnZEhsd1pUb2dYQ0pzWVcxaVpHRmNJanRjYmlBZ0lDQXZLaW9nUVc0Z2IzSmtaWEpsWkNCc2FYTjBJRzltSUc1aGJXVmtJR0Z5WjNWdFpXNTBjeTRnS2k5Y2JpQWdJQ0JoY21kMWJXVnVkSE02SUhOMGNtbHVaMXRkTzF4dUlDQWdJQzhxS2lCVWFHVWdabWxsYkdRZ2QyaHBZMmdnZDJsc2JDQmlaU0JsZG1Gc2RXRjBaV1FnZFhOcGJtY2dkR2hsSUdGeVozVnRaVzUwY3lCcGJpQmpiMjUwWlhoMExpQXFMMXh1SUNBZ0lIWmhiSFZsT2lCRmVIQnlaWE56YVc5dU8xeHVmVnh1WEc0dktpb2dRVzRnWlhod2NtVnpjMmx2YmlCM2FHbGphQ0J1WldkaGRHVnpJSFJvWlNCMllXeDFaU0J2WmlCMGFHVWdiM0pwWjJsdVlXd2dabWxsYkdRdUlDb3ZYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRTVsWjJGMFpXUkZlSEJ5WlhOemFXOXVJSHRjYmlBZ0lDQjBlWEJsT2lCY0ltNWxaMkYwWldSY0lqdGNibHh1SUNBZ0lDOHFLaUJVYUdVZ1kyaHBiR1FnWm1sbGJHUWdkRzhnYm1WbllYUmxMaUFxTDF4dUlDQWdJR05vYVd4a09pQkZlSEJ5WlhOemFXOXVPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2JtRnRaWE53WVdObElFVjRjSEpsYzNOcGIyNXpJSHRjYmlBZ0lDQXZLaW9nVkdobElHbHRjR3hwWTJsMElHWnBaV3hrSUhKbFptVnlaVzVqYVc1bklIUm9aU0JqZFhKeVpXNTBJR1pwWld4a0xpQXFMMXh1SUNBZ0lHVjRjRzl5ZENCamIyNXpkQ0JTVDFjNklITjBjbWx1WnlBOUlGd2lKSEp2ZDF3aU8xeHVYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUhaaGNtbGhZbXhsS0c1aGJXVTZJSE4wY21sdVp5azZJRlpoY21saFlteGxSWGh3Y21WemMybHZiaUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUI3SUhSNWNHVTZJRndpZG1GeWFXRmliR1ZjSWl3Z2JtRnRaU0I5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnNhWFJsY21Gc0tIWmhiSFZsT2lCTWFYUmxjbUZzS1RvZ1RHbDBaWEpoYkVWNGNISmxjM05wYjI0Z2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2V5QjBlWEJsT2lCY0lteHBkR1Z5WVd4Y0lpd2dkbUZzZFdVZ2ZUdGNiaUFnSUNCOVhHNWNiaUFnSUNCbGVIQnZjblFnWm5WdVkzUnBiMjRnWW1sdVlYSjVUM0FvYkdWbWREb2dSWGh3Y21WemMybHZiaXdnYjNBNklFSnBibUZ5ZVU5d0xDQnlhV2RvZERvZ1JYaHdjbVZ6YzJsdmJpazZJRVY0Y0hKbGMzTnBiMjRnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZXlCMGVYQmxPaUJjSW1KcGJtRnllVzl3WENJc0lHeGxablFzSUc5d0xDQnlhV2RvZENCOUlHRnpJRUpwYm1GeWVVOXdSWGh3Y21WemMybHZianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FXNWtaWGdvYjJKcU9pQkZlSEJ5WlhOemFXOXVMQ0JwYm1SbGVEb2dSWGh3Y21WemMybHZiaWs2SUVWNGNISmxjM05wYjI0Z2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2V5QjBlWEJsT2lCY0ltSnBibUZ5ZVc5d1hDSXNJR3hsWm5RNklHOWlhaXdnY21sbmFIUTZJR2x1WkdWNExDQnZjRG9nWENKcGJtUmxlRndpSUgwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHlvcUlFTnZiblpsY25SeklHRWdjM1J5YVc1bklHbHVJR1J2ZEMxdWIzUmhkR2x2YmkxbWIzSnRZWFFnYVc1MGJ5QmhJSFpoY21saFlteGxJSGRvYVdOb0lHbHVaR1Y0WlhNdUlDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUdsdVpHVjRWbUZ5YVdGaWJHVW9ibUZ0WlRvZ2MzUnlhVzVuS1RvZ1JYaHdjbVZ6YzJsdmJpQjdYRzRnSUNBZ0lDQWdJR3hsZENCd1lYSjBjeUE5SUc1aGJXVXVjM0JzYVhRb1hDSXVYQ0lwTzF4dUlDQWdJQ0FnSUNCc1pYUWdjbVZ6ZFd4ME9pQkZlSEJ5WlhOemFXOXVJRDBnUlhod2NtVnpjMmx2Ym5NdWRtRnlhV0ZpYkdVb2NHRnlkSE5iTUYwcE8xeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBibVJsZUNBOUlERTdJR2x1WkdWNElEd2djR0Z5ZEhNdWJHVnVaM1JvT3lCcGJtUmxlQ3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOMWJIUWdQU0JGZUhCeVpYTnphVzl1Y3k1cGJtUmxlQ2h5WlhOMWJIUXNJRVY0Y0hKbGMzTnBiMjV6TG14cGRHVnlZV3dvY0dGeWRITmJhVzVrWlhoZEtTazdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHVjRjRzl5ZENCbWRXNWpkR2x2YmlCc1lXMWlaR0VvWVhKbmN6b2djM1J5YVc1blcxMHNJSFpoYkhWbE9pQkZlSEJ5WlhOemFXOXVLVG9nVEdGdFltUmhSWGh3Y21WemMybHZiaUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUI3SUhSNWNHVTZJRndpYkdGdFltUmhYQ0lzSUdGeVozVnRaVzUwY3pvZ1lYSm5jeXdnZG1Gc2RXVWdmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1puVnVZeWhtZFc1ak9pQkZlSEJ5WlhOemFXOXVMQ0JoY21kek9pQkZlSEJ5WlhOemFXOXVXMTBwT2lCR2RXNWpkR2x2YmtWNGNISmxjM05wYjI0Z2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2V5QjBlWEJsT2lCY0ltWjFibU4wYVc5dVhDSXNJR1oxYm1Nc0lHRnlaM1Z0Wlc1MGN6b2dZWEpuY3lCOU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJzYVhOMEtIWmhiSFZsY3pvZ1JYaHdjbVZ6YzJsdmJsdGRLVG9nVEdsemRFVjRjSEpsYzNOcGIyNGdlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdleUIwZVhCbE9pQmNJbXhwYzNSY0lpd2dkbUZzZFdWeklIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUc5aWFtVmpkQ2gyWVd4MVpYTTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lFVjRjSEpsYzNOcGIyNCtLVG9nVDJKcVpXTjBSWGh3Y21WemMybHZiaUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUI3SUhSNWNHVTZJRndpYjJKcVpXTjBYQ0lzSUhaaGJIVmxjeUI5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQnVaV2RoZEdVb1kyaHBiR1E2SUVWNGNISmxjM05wYjI0cE9pQk9aV2RoZEdWa1JYaHdjbVZ6YzJsdmJpQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjdJSFI1Y0dVNklGd2libVZuWVhSbFpGd2lMQ0JqYUdsc1pDQjlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMwTnZiWEJoY21WUGNDaHZjRG9nUW1sdVlYSjVUM0FwT2lCdmNDQnBjeUJEYjIxd1lYSmxUM0FnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjNBZ1BUMGdYQ0k4UFZ3aUlIeDhJRzl3SUQwOUlGd2lQRndpSUh4OElHOXdJRDA5SUZ3aVBsd2lJSHg4SUc5d0lEMDlJRndpUGoxY0lpQjhmQ0J2Y0NBOVBTQmNJaUU5WENJZ2ZId2diM0FnUFQwZ1hDSTlYQ0k3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeW9xSUZKbGRIVnlibk1nWVNCelpYUWdiMllnWVd4c0lIVnVZbTkxYm1RZ2RtRnlhV0ZpYkdWeklDaHBMbVV1TENCMllYSnBZV0pzWlhNZ2JtOTBJSEJ5YjNacFpHVmtJR0o1SUdCeWIzZGdMQ0JzWVcxaVpHRnpMQ0J2Y2lCemFXMXBiR0Z5TGlrZ0tpOWNiaUFnSUNCbGVIQnZjblFnWm5WdVkzUnBiMjRnZFc1aWIzVnVaRlpoY21saFlteGxjeWhsZUhCeU9pQkZlSEJ5WlhOemFXOXVMQ0JpYjNWdVpEb2dVMlYwUEhOMGNtbHVaejRnUFNCdVpYY2dVMlYwS0Z0U1QxZGRLU2s2SUZObGREeHpkSEpwYm1jK0lIdGNiaUFnSUNBZ0lDQWdjM2RwZEdOb0lDaGxlSEJ5TG5SNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKaWFXNWhjbmx2Y0Z3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRk53WldOcFlXd2dZMkZ6WlNCZ2NtOTNXMXdpTGk0dUxsd2lYV0F1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsZUhCeUxtOXdJRDA5UFNCY0ltbHVaR1Y0WENJZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhod2NpNXNaV1owTG5SNWNHVWdQVDBnWENKMllYSnBZV0pzWlZ3aUlDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWNGNISXViR1ZtZEM1dVlXMWxJRDA5SUZKUFZ5QW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGVIQnlMbkpwWjJoMExuUjVjR1VnUFQwZ1hDSnNhWFJsY21Gc1hDSWdKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1RHbDBaWEpoYkhNdWFYTlRkSEpwYm1jb1pYaHdjaTV5YVdkb2RDNTJZV3gxWlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHSnZkVzVrTG1oaGN5aGxlSEJ5TG5KcFoyaDBMblpoYkhWbEtTa2djbVYwZFhKdUlHNWxkeUJUWlhRb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnlaWFIxY200Z2JtVjNJRk5sZENoYlpYaHdjaTV5YVdkb2RDNTJZV3gxWlYwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUU5MGFHVnlkMmx6WlNCcWRYTjBJR05vWldOcklHeGxablFnWVc1a0lISnBaMmgwTGx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJHYVd4MFpYSnpMbk5sZEZWdWFXOXVLRnQxYm1KdmRXNWtWbUZ5YVdGaWJHVnpLR1Y0Y0hJdWJHVm1kQ3dnWW05MWJtUXBMQ0IxYm1KdmRXNWtWbUZ5YVdGaWJHVnpLR1Y0Y0hJdWNtbG5hSFFzSUdKdmRXNWtLVjBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltWjFibU4wYVc5dVhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFWnBiSFJsY25NdWMyVjBWVzVwYjI0b1pYaHdjaTVoY21kMWJXVnVkSE11YldGd0tDaGhLU0E5UGlCMWJtSnZkVzVrVm1GeWFXRmliR1Z6S0dFc0lHSnZkVzVrS1NrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbXhoYldKa1lWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHNWxkMEp2ZFc1a0lEMGdZbTkxYm1RZ1B6OGdibVYzSUZObGRDZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnWVhKbklHOW1JR1Y0Y0hJdVlYSm5kVzFsYm5SektTQnVaWGRDYjNWdVpDNWhaR1FvWVhKbktUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjFibUp2ZFc1a1ZtRnlhV0ZpYkdWektHVjRjSEl1ZG1Gc2RXVXNJRzVsZDBKdmRXNWtLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKc2FYTjBYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRVpwYkhSbGNuTXVjMlYwVlc1cGIyNG9aWGh3Y2k1MllXeDFaWE11YldGd0tDaDJLU0E5UGlCMWJtSnZkVzVrVm1GeWFXRmliR1Z6S0hZc0lHSnZkVzVrS1NrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbTVsWjJGMFpXUmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkVzVpYjNWdVpGWmhjbWxoWW14bGN5aGxlSEJ5TG1Ob2FXeGtMQ0JpYjNWdVpDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRndpYjJKcVpXTjBYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRVpwYkhSbGNuTXVjMlYwVlc1cGIyNG9UMkpxWldOMExuWmhiSFZsY3lobGVIQnlMblpoYkhWbGN5a3ViV0Z3S0NoMktTQTlQaUIxYm1KdmRXNWtWbUZ5YVdGaWJHVnpLSFlzSUdKdmRXNWtLU2twTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0luWmhjbWxoWW14bFhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dKdmRXNWtJQ1ltSUdKdmRXNWtMbWhoY3lobGVIQnlMbTVoYldVcEtTQnlaWFIxY200Z2JtVjNJRk5sZENncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnY21WMGRYSnVJRzVsZHlCVFpYUW9XMlY0Y0hJdWJtRnRaVjBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0lteHBkR1Z5WVd4Y0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtVjNJRk5sZENncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5b3FJRkpsYm1SbGNpQmhiaUJsZUhCeVpYTnphVzl1SUdGeklHRWdjM1J5YVc1bkxpQXFMMXh1SUNBZ0lHVjRjRzl5ZENCbWRXNWpkR2x2YmlCMGIxTjBjbWx1WnlobGVIQnlPaUJGZUhCeVpYTnphVzl1S1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0FnSUNBZ2MzZHBkR05vSUNobGVIQnlMblI1Y0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0ppYVc1aGNubHZjRndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGxlSEJ5TG05d0lEMDlQU0JjSW1sdVpHVjRYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQWtlM1J2VTNSeWFXNW5LR1Y0Y0hJdWJHVm1kQ2w5V3lSN2RHOVRkSEpwYm1jb1pYaHdjaTV5YVdkb2RDbDlYV0E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdBa2UzUnZVM1J5YVc1bktHVjRjSEl1YkdWbWRDbDlJQ1I3Wlhod2NpNXZjSDBnSkh0MGIxTjBjbWx1WnlobGVIQnlMbkpwWjJoMEtYMWdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1aMWJtTjBhVzl1WENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdBa2UzUnZVM1J5YVc1bktHVjRjSEl1Wm5WdVl5bDlLQ1I3Wlhod2NpNWhjbWQxYldWdWRITXViV0Z3S0hSdlUzUnlhVzVuS1M1cWIybHVLRndpTENCY0lpbDlLV0E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWJHRnRZbVJoWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdBb0pIdGxlSEJ5TG1GeVozVnRaVzUwY3k1cWIybHVLRndpTENCY0lpbDlLU0E5UGlBa2UzUnZVM1J5YVc1bktHVjRjSEl1ZG1Gc2RXVXBmV0E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWJHbHpkRndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJnV3lSN1pYaHdjaTUyWVd4MVpYTXViV0Z3S0hSdlUzUnlhVzVuS1M1cWIybHVLRndpTENCY0lpbDlYV0E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWJtVm5ZWFJsWkZ3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ0lTUjdkRzlUZEhKcGJtY29aWGh3Y2k1amFHbHNaQ2w5WUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSnZZbXBsWTNSY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lIc2tlMDlpYW1WamRDNWxiblJ5YVdWektHVjRjSEl1ZG1Gc2RXVnpLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdWJXRndLQ2hiYXl3Z2RsMHBJRDArSUdBa2UydDlPaUFrZTNSdlUzUnlhVzVuS0hZcGZXQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM1cWIybHVLRndpTENCY0lpbDlmV0E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWRtRnlhV0ZpYkdWY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pYaHdjaTV1WVcxbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbXhwZEdWeVlXeGNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQjNjbUZ3Y0dWa0lEMGdUR2wwWlhKaGJITXVkM0poY0ZaaGJIVmxLR1Y0Y0hJdWRtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDZ2hkM0poY0hCbFpDa2djbVYwZFhKdUlGd2liblZzYkZ3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjNhWFJqYUNBb2QzSmhjSEJsWkM1MGVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKemRISnBibWRjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJnWENJa2UzZHlZWEJ3WldRdWRtRnNkV1Y5WENKZ08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFeHBkR1Z5WVd4ekxuUnZVM1J5YVc1bktIZHlZWEJ3WldRdWRtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdWNGNHOXlkQ0JqYjI1emRDQk9WVXhNSUQwZ1JYaHdjbVZ6YzJsdmJuTXViR2wwWlhKaGJDaHVkV3hzS1R0Y2JuMWNiaUlzSUNJdktpb2dVR0Z5YzJVZ2FXNXNhVzVsSUdacFpXeGtjeUJoYm1RZ2IzUm9aWElnWlcxaVpXUmtaV1FnYldWMFlXUmhkR0VnYVc0Z1lTQnNhVzVsTGlBcUwxeHVYRzVwYlhCdmNuUWdleUJRVWtsTlNWUkpWa1ZUSUgwZ1puSnZiU0JjSW1WNGNISmxjM05wYjI0dmNHRnljMlZ5WENJN1hHNXBiWEJ2Y25RZ2V5Qk1hWFJsY21Gc0lIMGdabkp2YlNCY0ltVjRjSEpsYzNOcGIyNHZiR2wwWlhKaGJGd2lPMXh1YVcxd2IzSjBJQ29nWVhNZ1VDQm1jbTl0SUZ3aWNHRnljMmx0Ylc5dVhDSTdYRzVwYlhCdmNuUWdaVzF2YW1sU1pXZGxlQ0JtY205dElGd2laVzF2YW1rdGNtVm5aWGhjSWp0Y2JtbHRjRzl5ZENCN0lFcHpiMjVEYjI1MlpYSnphVzl1TENCS2MyOXVUR2wwWlhKaGJDQjlJR1p5YjIwZ1hDSnBibVJsZUM5MGVYQmxjeTlxYzI5dUwyTnZiVzF2Ymx3aU8xeHVYRzR2S2lvZ1FTQndZWEp6WldRZ2FXNXNhVzVsSUdacFpXeGtJR1p5YjIwZ1lTQnpjR1ZqYVdacFl5QnNhVzVsTGlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQk1iMk5oYkVsdWJHbHVaVVpwWld4a0lIdGNiaUFnSUNBdktpb2dWR2hsSUhKaGR5QndZWEp6WldRZ2EyVjVMaUFxTDF4dUlDQWdJR3RsZVRvZ2MzUnlhVzVuTzF4dUlDQWdJQzhxS2lCVWFHVWdjbUYzSUhaaGJIVmxJRzltSUhSb1pTQm1hV1ZzWkM0Z0tpOWNiaUFnSUNCMllXeDFaVG9nYzNSeWFXNW5PMXh1SUNBZ0lDOHFLaUJVYUdVZ2MzUmhjblFnWTI5c2RXMXVJRzltSUhSb1pTQm1hV1ZzWkM0Z0tpOWNiaUFnSUNCemRHRnlkRG9nYm5WdFltVnlPMXh1SUNBZ0lDOHFLaUJVYUdVZ2MzUmhjblFnWTI5c2RXMXVJRzltSUhSb1pTQXFkbUZzZFdVcUlHWnZjaUIwYUdVZ1ptbGxiR1F1SUNvdlhHNGdJQ0FnYzNSaGNuUldZV3gxWlRvZ2JuVnRZbVZ5TzF4dUlDQWdJQzhxS2lCVWFHVWdaVzVrSUdOdmJIVnRiaUJ2WmlCMGFHVWdabWxsYkdRdUlDb3ZYRzRnSUNBZ1pXNWtPaUJ1ZFcxaVpYSTdYRzRnSUNBZ0x5b3FJRWxtSUhSb2FYTWdhVzVzYVc1bElHWnBaV3hrSUhkaGN5QmtaV1pwYm1Wa0lIWnBZU0JoSUhkeVlYQndhVzVuSUNnbld5Y2diM0lnSnlnbklHOXlJQ2RzYVc1ckp5a3NJSFJvWlc0Z2RHaGxJSGR5WVhCd2FXNW5JSFJvWVhRZ2QyRnpJSFZ6WldRdUlDb3ZYRzRnSUNBZ2QzSmhjSEJwYm1jL09pQnpkSEpwYm1jN1hHNTlYRzVjYmk4cUtpQkdkV3hzSUdsdWJHbHVaU0JtYVdWc1pDQnRaWFJoWkdGMFlTQm1iM0lnWVc0Z2IySnFaV04wTGlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkpibXhwYm1WR2FXVnNaQ0I3WEc0Z0lDQWdMeW9xSUZSb1pTQmhZM1IxWVd3Z2EyVjVJR1JsYzJOeWFXSnBibWNnZEdobElHbHViR2x1WlNCbWFXVnNaQzRnS2k5Y2JpQWdJQ0JyWlhrNklITjBjbWx1Wnp0Y2JpQWdJQ0F2S2lvZ1ZHaGxJSEpoZHlCMllXeDFaU0J2WmlCMGFHVWdhVzVzYVc1bElHWnBaV3hrTGlBcUwxeHVJQ0FnSUhKaGR6b2djM1J5YVc1bk8xeHVJQ0FnSUM4cUtpQlVhR1VnY0dGeWMyVmtJSFpoYkhWbExpQXFMMXh1SUNBZ0lIWmhiSFZsT2lCTWFYUmxjbUZzTzF4dUlDQWdJQzhxS2lCR2RXeHNJSEJ2YzJsMGFXOXVJR2x1Wm05eWJXRjBhVzl1SUdadmNpQjNhR1Z5WlNCMGFHVWdhVzVzYVc1bElHWnBaV3hrSUdseklHeHZZMkYwWldRZ2FXNGdkR2hsSUdSdlkzVnRaVzUwTGlBcUwxeHVJQ0FnSUhCdmMybDBhVzl1T2lCN1hHNGdJQ0FnSUNBZ0lDOHFLaUJVYUdVZ2JHbHVaU0J1ZFcxaVpYSWdkR2hsSUdsdWJHbHVaU0JtYVdWc1pDQmhjSEJsWVhKeklHOXVMaUFxTDF4dUlDQWdJQ0FnSUNCc2FXNWxPaUJ1ZFcxaVpYSTdYRzRnSUNBZ0lDQWdJQzhxS2lCVWFHVWdjM1JoY25RZ1kyOXNkVzF1SUc5bUlIUm9aU0JtYVdWc1pDNGdLaTljYmlBZ0lDQWdJQ0FnYzNSaGNuUTZJRzUxYldKbGNqdGNiaUFnSUNBZ0lDQWdMeW9xSUZSb1pTQnpkR0Z5ZENCamIyeDFiVzRnYjJZZ2RHaGxJQ3AyWVd4MVpTb2dabTl5SUhSb1pTQm1hV1ZzWkM0Z1NXMXRaV1JwWVhSbGJIa2dZV1owWlhJZ2RHaGxJQ2M2T2ljdUlDb3ZYRzRnSUNBZ0lDQWdJSE4wWVhKMFZtRnNkV1U2SUc1MWJXSmxjanRjYmlBZ0lDQWdJQ0FnTHlvcUlGUm9aU0JsYm1RZ1kyOXNkVzF1SUc5bUlIUm9aU0JtYVdWc1pDNGdLaTljYmlBZ0lDQWdJQ0FnWlc1a09pQnVkVzFpWlhJN1hHNGdJQ0FnZlR0Y2JpQWdJQ0F2S2lvZ1NXWWdkR2hwY3lCcGJteHBibVVnWm1sbGJHUWdkMkZ6SUdSbFptbHVaV1FnZG1saElHRWdkM0poY0hCcGJtY2dLQ2RiSnlCdmNpQW5LQ2NnYjNJZ0oyeHBibXNuS1N3Z2RHaGxiaUIwYUdVZ2QzSmhjSEJwYm1jZ2RHaGhkQ0IzWVhNZ2RYTmxaQzRnS2k5Y2JpQWdJQ0IzY21Gd2NHbHVaejg2SUhOMGNtbHVaenRjYm4xY2JseHVMeW9xSUVwVFQwNHNJSE5sY21saGJHbDZZV0pzWlNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCaGJpQnBibXhwYm1VZ1ptbGxiR1F1SUNvdlhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFcHpiMjVKYm14cGJtVkdhV1ZzWkNCN1hHNGdJQ0FnTHlvcUlGUm9aU0JoWTNSMVlXd2dhMlY1SUdSbGMyTnlhV0pwYm1jZ2RHaGxJR2x1YkdsdVpTQm1hV1ZzWkM0Z0tpOWNiaUFnSUNCclpYazZJSE4wY21sdVp6dGNiaUFnSUNBdktpb2dWR2hsSUhKaGR5QjJZV3gxWlNCdlppQjBhR1VnYVc1c2FXNWxJR1pwWld4a0xpQXFMMXh1SUNBZ0lISmhkem9nYzNSeWFXNW5PMXh1SUNBZ0lDOHFLaUJVYUdVZ2NHRnljMlZrSUhaaGJIVmxMaUFxTDF4dUlDQWdJSFpoYkhWbE9pQktjMjl1VEdsMFpYSmhiRHRjYmlBZ0lDQXZLaW9nUm5Wc2JDQndiM05wZEdsdmJpQnBibVp2Y20xaGRHbHZiaUJtYjNJZ2QyaGxjbVVnZEdobElHbHViR2x1WlNCbWFXVnNaQ0JwY3lCc2IyTmhkR1ZrSUdsdUlIUm9aU0JrYjJOMWJXVnVkQzRnS2k5Y2JpQWdJQ0J3YjNOcGRHbHZiam9nZTF4dUlDQWdJQ0FnSUNBdktpb2dWR2hsSUd4cGJtVWdiblZ0WW1WeUlIUm9aU0JwYm14cGJtVWdabWxsYkdRZ1lYQndaV0Z5Y3lCdmJpNGdLaTljYmlBZ0lDQWdJQ0FnYkdsdVpUb2diblZ0WW1WeU8xeHVJQ0FnSUNBZ0lDQXZLaW9nVkdobElITjBZWEowSUdOdmJIVnRiaUJ2WmlCMGFHVWdabWxsYkdRdUlDb3ZYRzRnSUNBZ0lDQWdJSE4wWVhKME9pQnVkVzFpWlhJN1hHNGdJQ0FnSUNBZ0lDOHFLaUJVYUdVZ2MzUmhjblFnWTI5c2RXMXVJRzltSUhSb1pTQXFkbUZzZFdVcUlHWnZjaUIwYUdVZ1ptbGxiR1F1SUVsdGJXVmthV0YwWld4NUlHRm1kR1Z5SUhSb1pTQW5Pam9uTGlBcUwxeHVJQ0FnSUNBZ0lDQnpkR0Z5ZEZaaGJIVmxPaUJ1ZFcxaVpYSTdYRzRnSUNBZ0lDQWdJQzhxS2lCVWFHVWdaVzVrSUdOdmJIVnRiaUJ2WmlCMGFHVWdabWxsYkdRdUlDb3ZYRzRnSUNBZ0lDQWdJR1Z1WkRvZ2JuVnRZbVZ5TzF4dUlDQWdJSDA3WEc0Z0lDQWdMeW9xSUVsbUlIUm9hWE1nYVc1c2FXNWxJR1pwWld4a0lIZGhjeUJrWldacGJtVmtJSFpwWVNCaElIZHlZWEJ3YVc1bklDZ25XeWNnYjNJZ0p5Z25JRzl5SUNkc2FXNXJKeWtzSUhSb1pXNGdkR2hsSUhkeVlYQndhVzVuSUhSb1lYUWdkMkZ6SUhWelpXUXVJQ292WEc0Z0lDQWdkM0poY0hCcGJtYy9PaUJ6ZEhKcGJtYzdYRzU5WEc1Y2JpOHFLaUJEYjI1MlpYSjBJR0Z1SUdsdWJHbHVaU0JtYVdWc1pDQjBieUJoSUVwVFQwNGdabTl5YldGMExpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR3B6YjI1SmJteHBibVZHYVdWc1pDaG1hV1ZzWkRvZ1NXNXNhVzVsUm1sbGJHUXBPaUJLYzI5dVNXNXNhVzVsUm1sbGJHUWdlMXh1SUNBZ0lISmxkSFZ5YmlCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCbWFXVnNaQ3dnZXlCMllXeDFaVG9nU25OdmJrTnZiblpsY25OcGIyNHVhbk52YmlobWFXVnNaQzUyWVd4MVpTa2dmU2s3WEc1OVhHNWNiaThxS2lCRGIyNTJaWEowSUdFZ1NsTlBUaUJwYm14cGJtVWdabWxsYkdRZ1ltRmpheUIwYnlCaElISmxaM1ZzWVhJZ1ptbGxiR1F1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2RtRnNkV1ZKYm14cGJtVkdhV1ZzWkNobWFXVnNaRG9nU25OdmJrbHViR2x1WlVacFpXeGtLVG9nU1c1c2FXNWxSbWxsYkdRZ2UxeHVJQ0FnSUhKbGRIVnliaUJQWW1wbFkzUXVZWE56YVdkdUtIdDlMQ0JtYVdWc1pDd2dleUIyWVd4MVpUb2dTbk52YmtOdmJuWmxjbk5wYjI0dWRtRnNkV1VvWm1sbGJHUXVkbUZzZFdVcElIMHBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1lYTkpibXhwYm1WR2FXVnNaQ2hzYjJOaGJEb2dURzlqWVd4SmJteHBibVZHYVdWc1pDd2diR2x1Wlc1dk9pQnVkVzFpWlhJcE9pQkpibXhwYm1WR2FXVnNaRHRjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoYzBsdWJHbHVaVVpwWld4a0tHeHZZMkZzT2lCTWIyTmhiRWx1YkdsdVpVWnBaV3hrVzEwc0lHeHBibVZ1YnpvZ2JuVnRZbVZ5S1RvZ1NXNXNhVzVsUm1sbGJHUmJYVHRjYmk4cUtpQkRiMjUyWlhKMElHRWdiRzlqWVd3Z2FXNXNhVzVsSUdacFpXeGtJR2x1ZEc4Z1lTQm1kV3hzSUdsdWJHbHVaU0JtYVdWc1pDQmllU0J3WlhKbWIzSnRhVzVuSUhCaGNuTnBibWNnWVc1a0lHRmtaR2x1WnlCMGFHVWdZMjl5Y21WamRDQnNhVzVsSUc1MWJXSmxjaTRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaGMwbHViR2x1WlVacFpXeGtLRnh1SUNBZ0lHeHZZMkZzT2lCTWIyTmhiRWx1YkdsdVpVWnBaV3hrSUh3Z1RHOWpZV3hKYm14cGJtVkdhV1ZzWkZ0ZExGeHVJQ0FnSUd4cGJtVnViem9nYm5WdFltVnlYRzRwT2lCSmJteHBibVZHYVdWc1pDQjhJRWx1YkdsdVpVWnBaV3hrVzEwZ2UxeHVJQ0FnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0d4dlkyRnNLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYkc5allXd3ViV0Z3S0NobUtTQTlQaUJoYzBsdWJHbHVaVVpwWld4a0tHWXNJR3hwYm1WdWJ5a3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lHdGxlVG9nYkc5allXd3VhMlY1TEZ4dUlDQWdJQ0FnSUNCeVlYYzZJR3h2WTJGc0xuWmhiSFZsTEZ4dUlDQWdJQ0FnSUNCMllXeDFaVG9nY0dGeWMyVkpibXhwYm1WV1lXeDFaU2hzYjJOaGJDNTJZV3gxWlNrc1hHNGdJQ0FnSUNBZ0lIQnZjMmwwYVc5dU9pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc2FXNWxPaUJzYVc1bGJtOHNYRzRnSUNBZ0lDQWdJQ0FnSUNCemRHRnlkRG9nYkc5allXd3VjM1JoY25Rc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZEdGeWRGWmhiSFZsT2lCc2IyTmhiQzV6ZEdGeWRGWmhiSFZsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaVzVrT2lCc2IyTmhiQzVsYm1Rc1hHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJSGR5WVhCd2FXNW5PaUJzYjJOaGJDNTNjbUZ3Y0dsdVp5eGNiaUFnSUNCOU8xeHVmVnh1WEc0dktpb2dWR2hsSUhkeVlYQndaWElnWTJoaGNtRmpkR1Z5Y3lCMGFHRjBJR05oYmlCaVpTQjFjMlZrSUhSdklHUmxabWx1WlNCaGJpQnBibXhwYm1VZ1ptbGxiR1F1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnU1U1TVNVNUZYMFpKUlV4RVgxZFNRVkJRUlZKVE9pQlNaV0ZrYjI1c2VUeFNaV052Y21ROGMzUnlhVzVuTENCemRISnBibWMrUGlBOUlFOWlhbVZqZEM1bWNtVmxlbVVvZTF4dUlDQWdJRndpVzF3aU9pQmNJbDFjSWl4Y2JpQWdJQ0JjSWloY0lqb2dYQ0lwWENJc1hHNTlLVHRjYmx4dUx5b3FYRzRnS2lCR2FXNWtJR0VnYldGMFkyaHBibWNnWTJ4dmMybHVaeUJpY21GamEyVjBJSFJvWVhRZ2IyTmpkWEp6SUdGMElHOXlJR0ZtZEdWeUlHQnpkR0Z5ZEdBc0lISmxjM0JsWTNScGJtY2dibVZ6ZEdsdVp5QmhibVFnWlhOallYQmxjeTRnU1dZZ1ptOTFibVFzWEc0Z0tpQnlaWFIxY201eklIUm9aU0IyWVd4MVpTQmpiMjUwWVdsdVpXUWdkMmwwYUdsdUlHRnVaQ0IwYUdVZ2MzUnlhVzVuSUdsdVpHVjRJR0ZtZEdWeUlIUm9aU0JsYm1RZ2IyWWdkR2hsSUhaaGJIVmxMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQm1hVzVrUTJ4dmMybHVaeWhjYmlBZ0lDQnNhVzVsT2lCemRISnBibWNzWEc0Z0lDQWdjM1JoY25RNklHNTFiV0psY2l4Y2JpQWdJQ0J2Y0dWdU9pQnpkSEpwYm1jc1hHNGdJQ0FnWTJ4dmMyVTZJSE4wY21sdVoxeHVLVG9nZXlCMllXeDFaVG9nYzNSeWFXNW5PeUJsYm1SSmJtUmxlRG9nYm5WdFltVnlJSDBnZkNCMWJtUmxabWx1WldRZ2UxeHVJQ0FnSUd4bGRDQnVaWE4wYVc1bklEMGdNRHRjYmlBZ0lDQnNaWFFnWlhOallYQmxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lHWnZjaUFvYkdWMElHbHVaR1Y0SUQwZ2MzUmhjblE3SUdsdVpHVjRJRHdnYkdsdVpTNXNaVzVuZEdnN0lHbHVaR1Y0S3lzcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUdOb1lYSWdQU0JzYVc1bExtTm9ZWEpCZENocGJtUmxlQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdRV3hzYjNkeklHWnZjaUJrYjNWaWJHVWdaWE5qWVhCbGN5QnNhV3RsSUNkY1hGeGNKeUIwYnlCaVpTQnlaVzVrWlhKbFpDQnViM0p0WVd4c2VTNWNiaUFnSUNBZ0lDQWdhV1lnS0dOb1lYSWdQVDBnWENKY1hGeGNYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1Z6WTJGd1pXUWdQU0FoWlhOallYQmxaRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnTHk4Z1NXWWdaWE5qWVhCbFpDd2dhV2R1YjNKbElIUm9aU0J1WlhoMElHTm9ZWEpoWTNSbGNpQm1iM0lnWTI5dGNIVjBhVzVuSUc1bGMzUnBibWNzSUhKbFoyRnlaR3hsYzNNZ2IyWWdkMmhoZENCcGRDQnBjeTVjYmlBZ0lDQWdJQ0FnYVdZZ0tHVnpZMkZ3WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWelkyRndaV1FnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHTm9ZWElnUFQwZ2IzQmxiaWtnYm1WemRHbHVaeXNyTzF4dUlDQWdJQ0FnSUNCbGJITmxJR2xtSUNoamFHRnlJRDA5SUdOc2IzTmxLU0J1WlhOMGFXNW5MUzA3WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdUMjVzZVNCdlkyTjFjbk1nYVdZZ2QyVWdZWEpsSUc5dUlHRWdZMnh2YzJVZ1kyaGhjbUZqZEdWeUlHRnVaQ0IwY21obGNtVWdhWE1nYm04Z2JXOXlaU0J1WlhOMGFXNW5MbHh1SUNBZ0lDQWdJQ0JwWmlBb2JtVnpkR2x1WnlBOElEQXBJSEpsZEhWeWJpQjdJSFpoYkhWbE9pQnNhVzVsTG5OMVluTjBjbWx1WnloemRHRnlkQ3dnYVc1a1pYZ3BMblJ5YVcwb0tTd2daVzVrU1c1a1pYZzZJR2x1WkdWNElDc2dNU0I5TzF4dVhHNGdJQ0FnSUNBZ0lHVnpZMkZ3WldRZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1ZlZ4dVhHNHZLaW9nUm1sdVpDQjBhR1VnSnpvNkp5QnpaWEJoY21GMGIzSWdhVzRnWVc0Z2FXNXNhVzVsSUdacFpXeGtMaUFxTDF4dVpuVnVZM1JwYjI0Z1ptbHVaRk5sY0dGeVlYUnZjaWhzYVc1bE9pQnpkSEpwYm1jc0lITjBZWEowT2lCdWRXMWlaWElwT2lCN0lHdGxlVG9nYzNSeWFXNW5PeUIyWVd4MVpVbHVaR1Y0T2lCdWRXMWlaWElnZlNCOElIVnVaR1ZtYVc1bFpDQjdYRzRnSUNBZ2JHVjBJSE5sY0NBOUlHeHBibVV1YVc1a1pYaFBaaWhjSWpvNlhDSXNJSE4wWVhKMEtUdGNiaUFnSUNCcFppQW9jMlZ3SUR3Z01Da2djbVYwZFhKdUlIVnVaR1ZtYVc1bFpEdGNibHh1SUNBZ0lISmxkSFZ5YmlCN0lHdGxlVG9nYkdsdVpTNXpkV0p6ZEhKcGJtY29jM1JoY25Rc0lITmxjQ2t1ZEhKcGJTZ3BMQ0IyWVd4MVpVbHVaR1Y0T2lCelpYQWdLeUF5SUgwN1hHNTlYRzVjYmk4cUtpQlVjbmtnZEc4Z1kyOXRjR3hsZEdWc2VTQndZWEp6WlNCaGJpQnBibXhwYm1VZ1ptbGxiR1FnYzNSaGNuUnBibWNnWVhRZ2RHaGxJR2RwZG1WdUlIQnZjMmwwYVc5dUxpQkJjM04xYldWeklHQnpkR0Z5ZEdBZ2FYTWdiMjRnWVNCM2NtRndjR2x1WnlCamFHRnlZV04wWlhJdUlDb3ZYRzVtZFc1amRHbHZiaUJtYVc1a1UzQmxZMmxtYVdOSmJteHBibVZHYVdWc1pDaHNhVzVsT2lCemRISnBibWNzSUhOMFlYSjBPaUJ1ZFcxaVpYSXBPaUJNYjJOaGJFbHViR2x1WlVacFpXeGtJSHdnZFc1a1pXWnBibVZrSUh0Y2JpQWdJQ0JzWlhRZ2IzQmxiaUE5SUd4cGJtVXVZMmhoY2tGMEtITjBZWEowS1R0Y2JseHVJQ0FnSUd4bGRDQnJaWGtnUFNCbWFXNWtVMlZ3WVhKaGRHOXlLR3hwYm1Vc0lITjBZWEowSUNzZ01TazdYRzRnSUNBZ2FXWWdLR3RsZVNBOVBUMGdkVzVrWldacGJtVmtLU0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1WEc0Z0lDQWdMeThnUm1GcGJDQjBhR1VnYldGMFkyZ2dhV1lnZDJVZ1ptbHVaQ0JoYm5rZ2MyVndZWEpoZEc5eUlHTm9ZWEpoWTNSbGNuTWdLRzV2ZENCaGJHeHZkMlZrSUdsdUlHdGxlWE1wTGx4dUlDQWdJR1p2Y2lBb2JHVjBJSE5sY0NCdlppQlBZbXBsWTNRdWEyVjVjeWhKVGt4SlRrVmZSa2xGVEVSZlYxSkJVRkJGVWxNcExtTnZibU5oZENoUFltcGxZM1F1ZG1Gc2RXVnpLRWxPVEVsT1JWOUdTVVZNUkY5WFVrRlFVRVZTVXlrcEtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoclpYa3VhMlY1TG1sdVkyeDFaR1Z6S0hObGNDa3BJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2JHVjBJSFpoYkhWbElEMGdabWx1WkVOc2IzTnBibWNvYkdsdVpTd2dhMlY1TG5aaGJIVmxTVzVrWlhnc0lHOXdaVzRzSUVsT1RFbE9SVjlHU1VWTVJGOVhVa0ZRVUVWU1UxdHZjR1Z1WFNrN1hHNGdJQ0FnYVdZZ0tIWmhiSFZsSUQwOVBTQjFibVJsWm1sdVpXUXBJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzVjYmlBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ0lDQnJaWGs2SUd0bGVTNXJaWGtzWEc0Z0lDQWdJQ0FnSUhaaGJIVmxPaUIyWVd4MVpTNTJZV3gxWlN4Y2JpQWdJQ0FnSUNBZ2MzUmhjblE2SUhOMFlYSjBMRnh1SUNBZ0lDQWdJQ0J6ZEdGeWRGWmhiSFZsT2lCclpYa3VkbUZzZFdWSmJtUmxlQ3hjYmlBZ0lDQWdJQ0FnWlc1a09pQjJZV3gxWlM1bGJtUkpibVJsZUN4Y2JpQWdJQ0FnSUNBZ2QzSmhjSEJwYm1jNklHOXdaVzRzWEc0Z0lDQWdmVHRjYm4xY2JseHVMeW9xSUZCaGNuTmxJR0VnZEdWNGRIVmhiQ0JwYm14cGJtVWdabWxsYkdRZ2RtRnNkV1VnYVc1MGJ5QnpiMjFsZEdocGJtY2dkMlVnWTJGdUlIZHZjbXNnZDJsMGFDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ3WVhKelpVbHViR2x1WlZaaGJIVmxLSFpoYkhWbE9pQnpkSEpwYm1jcE9pQk1hWFJsY21Gc0lIdGNiaUFnSUNBdkx5QkZiWEIwZVNCcGJteHBibVVnZG1Gc2RXVnpJQ2hwTG1VdUxDQnVieUIwWlhoMEtTQnphRzkxYkdRZ2JXRndJSFJ2SUc1MWJHd2dkRzhnYldGMFkyZ2diRzl1WnkxMFpYSnRJRVJoZEdGMmFXVjNJSE5sYldGdWRHbGpjeTVjYmlBZ0lDQXZMeUJPZFd4c0lHbHpJR0ZzYzI4Z1lTQnRiM0psSUhWdWFYWmxjbk5oYkNCMGVYQmxJSFJ2SUdSbFlXd2dkMmwwYUNCMGFHRnVJSE4wY21sdVozTXNJSE5wYm1ObElHRnNiQ0JtZFc1amRHbHZibk1nWVdOalpYQjBJRzUxYkd4ekxseHVJQ0FnSUdsbUlDaDJZV3gxWlM1MGNtbHRLQ2tnUFQwZ1hDSmNJaWtnY21WMGRYSnVJRzUxYkd3N1hHNWNiaUFnSUNBdkx5QlVhR1VnYzNSeWFYQndaV1FnYkdsMFpYSmhiQ0JtYVdWc1pDQndZWEp6WlhJZ2RXNWtaWEp6ZEdGdVpITWdZV3hzSUc5bUlIUm9aU0J1YjI0dFlYSnlZWGt2Ym05dUxXOWlhbVZqZENCbWFXVnNaSE1nWVc1a0lHTmhiaUJ3WVhKelpTQjBhR1Z0SUdadmNpQjFjeTVjYmlBZ0lDQXZMeUJKYm14cGJtVWdabWxsYkdRZ2IySnFaV04wY3lCaGNtVWdibTkwSUdOMWNuSmxiblJzZVNCemRYQndiM0owWldRN0lHbHViR2x1WlNCaGNuSmhlU0J2WW1wbFkzUnpJR2hoZG1VZ2RHOGdZbVVnYUdGdVpHeGxaQ0JpZVNCMGFHVWdjR0Z5YzJWeVhHNGdJQ0FnTHk4Z2MyVndZWEpoZEdWc2VTNWNiaUFnSUNCc1pYUWdhVzVzYVc1bElEMGdVRkpKVFVsVVNWWkZVeTVwYm14cGJtVkdhV1ZzWkM1d1lYSnpaU2gyWVd4MVpTazdYRzRnSUNBZ2FXWWdLR2x1YkdsdVpTNXpkR0YwZFhNcElISmxkSFZ5YmlCcGJteHBibVV1ZG1Gc2RXVTdYRzRnSUNBZ1pXeHpaU0J5WlhSMWNtNGdkbUZzZFdVN1hHNTlYRzVjYmk4cUtpQkZlSFJ5WVdOMGN5QnBibXhwYm1VZ1ptbGxiR1J6SUc5bUlIUm9aU0JtYjNKdElDZGJhMlY1T2pvZ2RtRnNkV1ZkSnlCbWNtOXRJR0VnYkdsdVpTQnZaaUIwWlhoMExpQlVhR2x6SUdseklHUnZibVVnYVc0Z1lTQnlaV3hoZEdsMlpXeDVYRzRnS2lCY0luSnZZblZ6ZEZ3aUlIZGhlU0IwYnlCaGRtOXBaQ0JtWVdsc2FXNW5JR1IxWlNCMGJ5QmlZV1FnYm1WemRHbHVaeUJ2Y2lCdmRHaGxjaUJwYm5SbGNtWmxjbWx1WnlCTllYSnJaRzkzYmlCemVXMWliMnh6T2x4dUlDcGNiaUFxSUMwZ1RHOXZheUJtYjNJZ1lXNTVJSGR5WVhCd1pYSnpJQ2duV3ljZ1lXNWtJQ2NvSnlrZ2FXNGdkR2hsSUd4cGJtVXNJSFJ5ZVdsdVp5QjBieUJ3WVhKelpTQjNhR0YwWlhabGNpQmpiMjFsY3lCaFpuUmxjaUJwZENCaGN5QmhiaUJwYm14cGJtVWdhMlY1T2pvdVhHNGdLaUF0SUVsbUlITjFZMk5sYzNObWRXd3NJSE5qWVc0Z2RXNTBhV3dnZVc5MUlHWnBibVFnWVNCdFlYUmphR2x1WnlCbGJtUWdZbkpoWTJ0bGRDd2dZVzVrSUhCaGNuTmxJSGRvWVhSbGRtVnlJSEpsYldGcGJuTWdZWE1nWVc0Z2FXNXNhVzVsSUhaaGJIVmxMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pYaDBjbUZqZEVsdWJHbHVaVVpwWld4a2N5aHNhVzVsT2lCemRISnBibWNzSUdsdVkyeDFaR1ZVWVhOclJtbGxiR1J6T2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlVwT2lCTWIyTmhiRWx1YkdsdVpVWnBaV3hrVzEwZ2UxeHVJQ0FnSUd4bGRDQm1hV1ZzWkhNNklFeHZZMkZzU1c1c2FXNWxSbWxsYkdSYlhTQTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2JHVjBJSGR5WVhCd1pYSWdiMllnVDJKcVpXTjBMbXRsZVhNb1NVNU1TVTVGWDBaSlJVeEVYMWRTUVZCUVJWSlRLU2tnZTF4dUlDQWdJQ0FnSUNCc1pYUWdabTkxYm1SSmJtUmxlQ0E5SUd4cGJtVXVhVzVrWlhoUFppaDNjbUZ3Y0dWeUtUdGNiaUFnSUNBZ0lDQWdkMmhwYkdVZ0tHWnZkVzVrU1c1a1pYZ2dQajBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElIQmhjbk5sWkVacFpXeGtJRDBnWm1sdVpGTndaV05wWm1salNXNXNhVzVsUm1sbGJHUW9iR2x1WlN3Z1ptOTFibVJKYm1SbGVDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JWEJoY25ObFpFWnBaV3hrS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOTFibVJKYm1SbGVDQTlJR3hwYm1VdWFXNWtaWGhQWmloM2NtRndjR1Z5TENCbWIzVnVaRWx1WkdWNElDc2dNU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lHWnBaV3hrY3k1d2RYTm9LSEJoY25ObFpFWnBaV3hrS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1p2ZFc1a1NXNWtaWGdnUFNCc2FXNWxMbWx1WkdWNFQyWW9kM0poY0hCbGNpd2djR0Z5YzJWa1JtbGxiR1F1Wlc1a0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hwYm1Oc2RXUmxWR0Z6YTBacFpXeGtjeWtnWm1sbGJHUnpJRDBnWm1sbGJHUnpMbU52Ym1OaGRDaGxlSFJ5WVdOMFUzQmxZMmxoYkZSaGMydEdhV1ZzWkhNb2JHbHVaU2twTzF4dVhHNGdJQ0FnWm1sbGJHUnpMbk52Y25Rb0tHRXNJR0lwSUQwK0lHRXVjM1JoY25RZ0xTQmlMbk4wWVhKMEtUdGNibHh1SUNBZ0lHeGxkQ0JtYVd4MFpYSmxaRVpwWld4a2N6b2dURzlqWVd4SmJteHBibVZHYVdWc1pGdGRJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCbWFXVnNaSE11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0drZ1BUMGdNQ0I4ZkNCbWFXeDBaWEpsWkVacFpXeGtjMXRtYVd4MFpYSmxaRVpwWld4a2N5NXNaVzVuZEdnZ0xTQXhYUzVsYm1RZ1BDQm1hV1ZzWkhOYmFWMHVjM1JoY25RcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdacGJIUmxjbVZrUm1sbGJHUnpMbkIxYzJnb1ptbGxiR1J6VzJsZEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWm1sc2RHVnlaV1JHYVdWc1pITTdYRzU5WEc1Y2JpOHFLaUJXWVd4cFpHRjBaWE1nZEdoaGRDQmhJSEpoZHlCbWFXVnNaQ0J1WVcxbElHaGhjeUJoSUhaaGJHbGtJR1p2Y20wdUlDb3ZYRzVqYjI1emRDQkdWVXhNWDB4SlRrVmZTMFZaWDFCQlVsUTZJRkF1VUdGeWMyVnlQSE4wY21sdVp6NGdQU0JRTG1Gc2RDaGNiaUFnSUNCUUxuSmxaMlY0Y0NodVpYY2dVbVZuUlhod0tHVnRiMnBwVW1WblpYZ29LU3dnWENKMVhDSXBLU3hjYmlBZ0lDQlFMbkpsWjJWNGNDZ3ZXekF0T1Z4Y2NIdE1aWFIwWlhKOVhGeDNYRnh6WHk4dFhTc3ZkU2xjYmlsY2JpQWdJQ0F1YldGdWVTZ3BYRzRnSUNBZ0xtMWhjQ2dvY0dGeWRITXBJRDArSUhCaGNuUnpMbXB2YVc0b1hDSmNJaWtwTzF4dVhHNWpiMjV6ZENCR1ZVeE1YMHhKVGtWZlMwVlpYMUJCVWxORlVqb2dVQzVRWVhKelpYSThjM1J5YVc1blBpQTlJRkF1Y21WblpYaHdLQzliWGpBdE9WeGNkMXhjY0h0TVpYUjBaWEo5WFNvdmRTbGNiaUFnSUNBdWRHaGxiaWhHVlV4TVgweEpUa1ZmUzBWWlgxQkJVbFFwWEc0Z0lDQWdMbk5yYVhBb1VDNXlaV2RsZUhBb0wxdGZYRndxZm1CZEtpOTFLU2s3WEc1Y2JpOHFLaUJCZEhSbGJYQjBJSFJ2SUdWNGRISmhZM1FnWVNCbWRXeHNMV3hwYm1VZ1ptbGxiR1FnS0V0bGVUbzZJRlpoYkhWbElHTnZibk4xYldsdVp5QjBhR1VnWlc1MGFYSmxJR052Ym5SbGJuUWdiR2x1WlNrdUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaWGgwY21GamRFWjFiR3hNYVc1bFJtbGxiR1FvZEdWNGREb2djM1J5YVc1bktUb2dURzlqWVd4SmJteHBibVZHYVdWc1pDQjhJSFZ1WkdWbWFXNWxaQ0I3WEc0Z0lDQWdiR1YwSUhObGNDQTlJR1pwYm1SVFpYQmhjbUYwYjNJb2RHVjRkQ3dnTUNrN1hHNGdJQ0FnYVdZZ0tDRnpaWEFwSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc1Y2JpQWdJQ0F2THlCWFpTQnVaV1ZrSUhSdklIQnZjM1F0Y0hKdlkyVnpjeUIwYUdVZ2EyVjVJSFJ2SUdSeWIzQWdkVzV1WldObGMzTmhjbmtnYjNCbGJtbHVaeUJoYm01dmRHRjBhVzl1Y3lCaGN5QjNaV3hzSUdGelhHNGdJQ0FnTHk4Z1pISnZjQ0J6ZFhKeWIzVnVaR2x1WnlCTllYSnJaRzkzYmk1Y2JpQWdJQ0JzWlhRZ2NtVmhiRXRsZVNBOUlFWlZURXhmVEVsT1JWOUxSVmxmVUVGU1UwVlNMbkJoY25ObEtITmxjQzVyWlhrcE8xeHVJQ0FnSUdsbUlDZ2hjbVZoYkV0bGVTNXpkR0YwZFhNcElISmxkSFZ5YmlCMWJtUmxabWx1WldRN1hHNWNiaUFnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNCclpYazZJSEpsWVd4TFpYa3VkbUZzZFdVc1hHNGdJQ0FnSUNBZ0lIWmhiSFZsT2lCMFpYaDBMbk4xWW5OMGNtbHVaeWh6WlhBdWRtRnNkV1ZKYm1SbGVDa3VkSEpwYlNncExGeHVJQ0FnSUNBZ0lDQnpkR0Z5ZERvZ01DeGNiaUFnSUNBZ0lDQWdjM1JoY25SV1lXeDFaVG9nYzJWd0xuWmhiSFZsU1c1a1pYZ3NYRzRnSUNBZ0lDQWdJR1Z1WkRvZ2RHVjRkQzVzWlc1bmRHZ3NYRzRnSUNBZ2ZUdGNibjFjYmx4dVpYaHdiM0owSUdOdmJuTjBJRU5TUlVGVVJVUmZSRUZVUlY5U1JVZEZXQ0E5SUM5Y1hIVjdNamM1TlgxY1hITXFLRnhjWkhzMGZTMWNYR1I3TW4wdFhGeGtleko5S1M5MU8xeHVaWGh3YjNKMElHTnZibk4wSUVSVlJWOUVRVlJGWDFKRlIwVllJRDBnTHlnL09seGNkWHN4UmpSRE5YMThYRngxZXpGR05FTTJmWHhjWEhWN01VWTFSRE45WEZ4MWUwWkZNRVo5UHlsY1hITXFLRnhjWkhzMGZTMWNYR1I3TW4wdFhGeGtleko5S1M5MU8xeHVaWGh3YjNKMElHTnZibk4wSUVSUFRrVmZSRUZVUlY5U1JVZEZXQ0E5SUM5Y1hIVjdNamN3TlgxY1hITXFLRnhjWkhzMGZTMWNYR1I3TW4wdFhGeGtleko5S1M5MU8xeHVaWGh3YjNKMElHTnZibk4wSUZORFNFVkVWVXhGUkY5RVFWUkZYMUpGUjBWWUlEMGdMMXRjWEhWN01qTkdNMzFjWEhWN01qTXhRbjFkWEZ4ektpaGNYR1I3TkgwdFhGeGtleko5TFZ4Y1pIc3lmU2t2ZFR0Y2JtVjRjRzl5ZENCamIyNXpkQ0JUVkVGU1ZGOUVRVlJGWDFKRlIwVllJRDBnTDF4Y2RYc3hSalpGUW4xY1hITXFLRnhjWkhzMGZTMWNYR1I3TW4wdFhGeGtleko5S1M5MU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1JVMVBTa2xmVWtWSFJWaEZVeUE5SUZ0Y2JpQWdJQ0I3SUhKbFoyVjRPaUJEVWtWQlZFVkVYMFJCVkVWZlVrVkhSVmdzSUd0bGVUb2dYQ0pqY21WaGRHVmtYQ0lnZlN4Y2JpQWdJQ0I3SUhKbFoyVjRPaUJUVkVGU1ZGOUVRVlJGWDFKRlIwVllMQ0JyWlhrNklGd2ljM1JoY25SY0lpQjlMRnh1SUNBZ0lIc2djbVZuWlhnNklGTkRTRVZFVlV4RlJGOUVRVlJGWDFKRlIwVllMQ0JyWlhrNklGd2ljMk5vWldSMWJHVmtYQ0lnZlN4Y2JpQWdJQ0I3SUhKbFoyVjRPaUJFVlVWZlJFRlVSVjlTUlVkRldDd2dhMlY1T2lCY0ltUjFaVndpSUgwc1hHNGdJQ0FnZXlCeVpXZGxlRG9nUkU5T1JWOUVRVlJGWDFKRlIwVllMQ0JyWlhrNklGd2lZMjl0Y0d4bGRHbHZibHdpSUgwc1hHNWRPMXh1WEc0dktpb2dVR0Z5YzJVZ2MzQmxZMmxoYkNCamIyMXdiR1YwWldRdlpIVmxMMlJ2Ym1VZ2RHRnpheUJtYVdWc1pITWdkMmhwWTJnZ1lYSmxJRzFoY210bFpDQjJhV0VnWlcxdmFta3VJQ292WEc1bWRXNWpkR2x2YmlCbGVIUnlZV04wVTNCbFkybGhiRlJoYzJ0R2FXVnNaSE1vYkdsdVpUb2djM1J5YVc1bktUb2dURzlqWVd4SmJteHBibVZHYVdWc1pGdGRJSHRjYmlBZ0lDQnNaWFFnY21WemRXeDBjem9nVEc5allXeEpibXhwYm1WR2FXVnNaRnRkSUQwZ1cxMDdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQjdJSEpsWjJWNExDQnJaWGtnZlNCdlppQkZUVTlLU1Y5U1JVZEZXRVZUS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxaGRHTm9JRDBnY21WblpYZ3VaWGhsWXloc2FXNWxLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnRZWFJqYUNrZ1kyOXVkR2x1ZFdVN1hHNWNiaUFnSUNBZ0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3RsZVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbE9pQnRZWFJqYUZzeFhTeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMFlYSjBPaUJ0WVhSamFDNXBibVJsZUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4wWVhKMFZtRnNkV1U2SUcxaGRHTm9MbWx1WkdWNElDc2dNU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnVaRG9nYldGMFkyZ3VhVzVrWlhnZ0t5QnRZWFJqYUZzd1hTNXNaVzVuZEdnc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IzY21Gd2NHbHVaem9nWENKbGJXOXFhUzF6YUc5eWRHaGhibVJjSWl4Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkSE03WEc1OVhHNWNiaThxS2lCVFpYUnpJRzl5SUhKbGNHeGhZMlZ6SUhSb1pTQjJZV3gxWlNCdlppQmhiaUJwYm14cGJtVWdabWxsYkdRN0lHbG1JSFJvWlNCMllXeDFaU0JwY3lBbmRXNWtaV1pwYm1Wa0p5d2daR1ZzWlhSbGN5QjBhR1VnYTJWNUxpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSE5sZEVsdWJHbHVaVVpwWld4a0tITnZkWEpqWlRvZ2MzUnlhVzVuTENCclpYazZJSE4wY21sdVp5d2dkbUZzZFdVL09pQnpkSEpwYm1jcE9pQnpkSEpwYm1jZ2UxeHVJQ0FnSUd4bGRDQmxlR2x6ZEdsdVp5QTlJR1Y0ZEhKaFkzUkpibXhwYm1WR2FXVnNaSE1vYzI5MWNtTmxLVHRjYmlBZ0lDQnNaWFFnWlhocGMzUnBibWRMWlhseklEMGdaWGhwYzNScGJtY3VabWxzZEdWeUtDaG1LU0E5UGlCbUxtdGxlU0E5UFNCclpYa3BPMXh1WEc0Z0lDQWdMeThnUkc5dUozUWdaRzhnWVc1NWRHaHBibWNnYVdZZ2RHaGxjbVVnWVhKbElHUjFjR3hwWTJGMFpTQnJaWGx6SUU5U0lIUm9aU0JyWlhrZ1lXeHlaV0ZrZVNCa2IyVnpiaWQwSUdWNGFYTjBMbHh1SUNBZ0lHbG1JQ2hsZUdsemRHbHVaMHRsZVhNdWJHVnVaM1JvSUQ0Z01pQjhmQ0FvWlhocGMzUnBibWRMWlhsekxteGxibWQwYUNBOVBTQXdJQ1ltSUNGMllXeDFaU2twSUhKbGRIVnliaUJ6YjNWeVkyVTdYRzRnSUNBZ2JHVjBJR1Y0YVhOMGFXNW5TMlY1SUQwZ1pYaHBjM1JwYm1kTFpYbHpXekJkTzF4dVhHNGdJQ0FnYkdWMElHRnVibTkwWVhScGIyNGdQU0IyWVd4MVpTQS9JR0JiSkh0clpYbDlPam9nSkh0MllXeDFaWDFkWUNBNklGd2lYQ0k3WEc0Z0lDQWdhV1lnS0dWNGFYTjBhVzVuUzJWNUtTQjdYRzRnSUNBZ0lDQWdJR3hsZENCd2NtVm1hWGdnUFNCemIzVnlZMlV1YzNWaWMzUnlhVzVuS0RBc0lHVjRhWE4wYVc1blMyVjVMbk4wWVhKMEtUdGNiaUFnSUNBZ0lDQWdiR1YwSUhOMVptWnBlQ0E5SUhOdmRYSmpaUzV6ZFdKemRISnBibWNvWlhocGMzUnBibWRMWlhrdVpXNWtLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9ZVzV1YjNSaGRHbHZiaWtnY21WMGRYSnVJR0FrZTNCeVpXWnBlSDBrZTJGdWJtOTBZWFJwYjI1OUpIdHpkV1ptYVhoOVlEdGNiaUFnSUNBZ0lDQWdaV3h6WlNCeVpYUjFjbTRnWUNSN2NISmxabWw0ZlNSN2MzVm1abWw0TG5SeWFXMVRkR0Z5ZENncGZXQTdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGhibTV2ZEdGMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJnSkh0emIzVnlZMlV1ZEhKcGJVVnVaQ2dwZlNBa2UyRnVibTkwWVhScGIyNTlZRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2MyOTFjbU5sTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMlYwUlcxdmFtbFRhRzl5ZEdoaGJtUkRiMjF3YkdWMGFXOXVSbWxsYkdRb2MyOTFjbU5sT2lCemRISnBibWNzSUhaaGJIVmxQem9nYzNSeWFXNW5LVG9nYzNSeWFXNW5JSHRjYmlBZ0lDQmpiMjV6ZENCbGVHbHpkR2x1WnlBOUlHVjRkSEpoWTNSSmJteHBibVZHYVdWc1pITW9jMjkxY21ObExDQjBjblZsS1R0Y2JpQWdJQ0JqYjI1emRDQmxlR2x6ZEdsdVowdGxlWE1nUFNCbGVHbHpkR2x1Wnk1bWFXeDBaWElvS0dZcElEMCtJR1l1YTJWNUlEMDlQU0JjSW1OdmJYQnNaWFJwYjI1Y0lpQW1KaUJtTG5keVlYQndhVzVuSUQwOVBTQmNJbVZ0YjJwcExYTm9iM0owYUdGdVpGd2lLVHRjYmx4dUlDQWdJQzh2SUVSdmJpZDBJR1J2SUdGdWVYUm9hVzVuSUdsbUlIUm9aWEpsSUdGeVpTQmtkWEJzYVdOaGRHVWdhMlY1Y3lCUFVpQjBhR1VnYTJWNUlHRnNjbVZoWkhrZ1pHOWxjMjRuZENCbGVHbHpkQzVjYmlBZ0lDQnBaaUFvWlhocGMzUnBibWRMWlhsekxteGxibWQwYUNBK0lESWdmSHdnS0dWNGFYTjBhVzVuUzJWNWN5NXNaVzVuZEdnZ1BUMGdNQ0FtSmlBaGRtRnNkV1VwS1NCeVpYUjFjbTRnYzI5MWNtTmxPMXh1WEc0Z0lDQWdMeW9nVG04Z2QzSmhjSEJsY2l3Z1lXUmtJRzkzYmlCemNHRmphVzVuSUdGMElITjBZWEowSUNvdlhHNGdJQ0FnWTI5dWMzUWdZVzV1YjNSaGRHbHZiaUE5SUhaaGJIVmxJRDhnWUNCY2RUSTNNRFVnSkh0MllXeDFaWDFnSURvZ1hDSmNJanRjYmlBZ0lDQnNaWFFnWlhocGMzUnBibWRMWlhrZ1BTQmxlR2x6ZEdsdVowdGxlWE5iTUYwN1hHNGdJQ0FnYVdZZ0tHVjRhWE4wYVc1blMyVjVLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEJ5WldacGVDQTlJSE52ZFhKalpTNXpkV0p6ZEhKcGJtY29NQ3dnWlhocGMzUnBibWRMWlhrdWMzUmhjblFwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J6ZFdabWFYZ2dQU0J6YjNWeVkyVXVjM1ZpYzNSeWFXNW5LR1Y0YVhOMGFXNW5TMlY1TG1WdVpDazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmdKSHR3Y21WbWFYZ3VkSEpwYlVWdVpDZ3BmU1I3WVc1dWIzUmhkR2x2Ym4wa2UzTjFabVpwZUgxZ08xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJnSkh0emIzVnlZMlV1ZEhKcGJVVnVaQ2dwZlNSN1lXNXViM1JoZEdsdmJuMWdPMXh1SUNBZ0lIMWNibjFjYmlJc0lDSXZLaW9nVFdGd0lIUm9aU0IyWVd4MVpYTWdiMllnWVc0Z2IySnFaV04wTENCeVpYUjFjbTVwYm1jZ1lTQnVaWGNnYjJKcVpXTjBMaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUcxaGNFOWlhbVZqZEZaaGJIVmxjenhXTENCVlBpaHZZbXBsWTNRNklGSmxZMjl5WkR4emRISnBibWNzSUZZK0xDQm1kVzVqT2lBb2VEb2dWaWtnUFQ0Z1ZTazZJRkpsWTI5eVpEeHpkSEpwYm1jc0lGVStJSHRjYmlBZ0lDQmpiMjV6ZENCeVpYTjFiSFE2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJRlUrSUQwZ2UzMDdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmJhMlY1TENCMllXeDFaVjBnYjJZZ1QySnFaV04wTG1WdWRISnBaWE1vYjJKcVpXTjBLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYTjFiSFJiYTJWNVhTQTlJR1oxYm1Nb2RtRnNkV1VwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQnlaWE4xYkhRN1hHNTlYRzRpTENBaWFXMXdiM0owSUhzZ1RHbHVheXdnU25OdmJreHBibXNnZlNCbWNtOXRJRndpWlhod2NtVnpjMmx2Ymk5c2FXNXJYQ0k3WEc1cGJYQnZjblFnZXlCTWFYUmxjbUZzTENCTWFYUmxjbUZzY3lCOUlHWnliMjBnWENKbGVIQnlaWE56YVc5dUwyeHBkR1Z5WVd4Y0lqdGNibWx0Y0c5eWRDQjdJRVJoZEdWVWFXMWxMQ0JFZFhKaGRHbHZiaUI5SUdaeWIyMGdYQ0pzZFhodmJsd2lPMXh1YVcxd2IzSjBJSHNnYldGd1QySnFaV04wVm1Gc2RXVnpJSDBnWm5KdmJTQmNJblYwYVd4ekwyUmhkR0ZjSWp0Y2JseHVMeW9xSUVwVFQwNHRjMlZ5YVdGc2FYcGxaQ0JsY1hWcGRtRnNaVzUwY3lCbWIzSWdiR2wwWlhKaGJITXVJQ292WEc1bGVIQnZjblFnZEhsd1pTQktjMjl1VEdsMFpYSmhiQ0E5WEc0Z0lDQWdmQ0JpYjI5c1pXRnVYRzRnSUNBZ2ZDQnVkVzFpWlhKY2JpQWdJQ0I4SUhOMGNtbHVaMXh1SUNBZ0lId2dleUFrWDNSNWNHVTZJRndpWkdGMFpWd2lPeUIyWVd4MVpUb2djM1J5YVc1bklIMWNiaUFnSUNCOElIc2dKRjkwZVhCbE9pQmNJbVIxY21GMGFXOXVYQ0k3SUhaaGJIVmxPaUJ6ZEhKcGJtY2dmVnh1SUNBZ0lId2dleUFrWDNSNWNHVTZJRndpYkdsdWExd2lPeUIyWVd4MVpUb2dTbk52Ymt4cGJtc2dmVnh1SUNBZ0lId2dRWEp5WVhrOFNuTnZia3hwZEdWeVlXdytYRzRnSUNBZ2ZDQlNaV052Y21ROGMzUnlhVzVuTENCaGJuaytYRzRnSUNBZ2ZDQnVkV3hzTzF4dVhHNWxlSEJ2Y25RZ2JtRnRaWE53WVdObElFcHpiMjVEYjI1MlpYSnphVzl1SUh0Y2JpQWdJQ0JsZUhCdmNuUWdZMjl1YzNRZ1RrOVBVRjlPVDFKTlFVeEpXa1ZTT2lBb2FXNXdkWFE2SUV4cGRHVnlZV3dwSUQwK0lFeHBkR1Z5WVd3Z1BTQW9hVzV3ZFhRcElEMCtJR2x1Y0hWME8xeHVYRzRnSUNBZ0x5b3FJRU52Ym5abGNuUWdZU0JzYVhSbGNtRnNJSFpoYkhWbElIUnZJR0VnYzJGbVpTd2djR1Z5YzJsemRHVnVkQ0JLVTA5T0lHVnhkV2wyWVd4bGJuUXVJQ292WEc0Z0lDQWdaWGh3YjNKMElHWjFibU4wYVc5dUlHcHpiMjRvYkdsMFpYSmhiRG9nVEdsMFpYSmhiQ2s2SUVwemIyNU1hWFJsY21Gc0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2QzSmhjSEJsWkNBOUlFeHBkR1Z5WVd4ekxuZHlZWEJXWVd4MVpTaHNhWFJsY21Gc0tUdGNiaUFnSUNBZ0lDQWdhV1lnS0NGM2NtRndjR1ZrS1NCeVpYUjFjbTRnYm5Wc2JEdGNibHh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLSGR5WVhCd1pXUS9MblI1Y0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0poY25KaGVWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjNjbUZ3Y0dWa0xuWmhiSFZsTG0xaGNDaEtjMjl1UTI5dWRtVnljMmx2Ymk1cWMyOXVLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKdlltcGxZM1JjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYldGd1QySnFaV04wVm1Gc2RXVnpLSGR5WVhCd1pXUXVkbUZzZFdVc0lFcHpiMjVEYjI1MlpYSnphVzl1TG1wemIyNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1SaGRHVmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdleUFrWDNSNWNHVTZJRndpWkdGMFpWd2lMQ0IyWVd4MVpUb2dkM0poY0hCbFpDNTJZV3gxWlM1MGIwbFRUeWg3SUdsdVkyeDFaR1ZQWm1aelpYUTZJSFJ5ZFdVZ2ZTa2dmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKc2FXNXJYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSHNnSkY5MGVYQmxPaUJjSW14cGJtdGNJaXdnZG1Gc2RXVTZJSGR5WVhCd1pXUXVkbUZzZFdVdWRHOVBZbXBsWTNRb0tTQjlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1SMWNtRjBhVzl1WENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhzZ0pGOTBlWEJsT2lCY0ltUjFjbUYwYVc5dVhDSXNJSFpoYkhWbE9pQjNjbUZ3Y0dWa0xuWmhiSFZsTG5SdlNWTlBLQ2tnZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSmliMjlzWldGdVhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRndpYm5WdFltVnlYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWMzUnlhVzVuWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhkeVlYQndaV1F1ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRndpWm5WdVkzUnBiMjVjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSnVkV3hzWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJEYjI1MlpYSjBJR0VnU2xOUFRpQnNhWFJsY21Gc0lIUnZJR2wwSjNNZ1kyOXljbVZ6Y0c5dVpHbHVaeUJvZVdSeVlYUmxaQ0IyWVd4MVpTd2diM0IwYVc5dVlXeHNlU0JoY0hCc2VXbHVaMXh1SUNBZ0lDQXFJR0VnYm05eWJXRnNhWHBoZEdsdmJpQnpkR1Z3SUhSdklIUm9aU0J5WlhOMWJIUnBibWNnZG1Gc2RXVWdZVzVrSUdGdWVTQnNhWFJsY21Gc2N5QmpiMjUwWVdsdVpXUWdkMmwwYUdsdUlHbDBYRzRnSUNBZ0lDb2dLSE4xWTJnZ1lYTWdhV1lnZEdobElHeHBkR1Z5WVd3Z2FYTWdZU0JzYVhOMElHOXlJRzlpYW1WamRDa3VYRzRnSUNBZ0lDb3ZYRzRnSUNBZ1pYaHdiM0owSUdaMWJtTjBhVzl1SUhaaGJIVmxLR3B6YjI0NklFcHpiMjVNYVhSbGNtRnNMQ0J1YjNKdFlXeHBlbVZ5T2lBb2FXNXdkWFE2SUV4cGRHVnlZV3dwSUQwK0lFeHBkR1Z5WVd3Z1BTQk9UMDlRWDA1UFVrMUJURWxhUlZJcE9pQk1hWFJsY21Gc0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0dwemIyNGdQVDA5SUc1MWJHd2dmSHdnYW5OdmJpQTlQVDBnZFc1a1pXWnBibVZrS1NCeVpYUjFjbTRnYm5Wc2JEdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2hxYzI5dUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1dmNtMWhiR2w2WlhJb2FuTnZiaTV0WVhBb0tHbHVjSFYwS1NBOVBpQktjMjl1UTI5dWRtVnljMmx2Ymk1MllXeDFaU2hwYm5CMWRDd2dibTl5YldGc2FYcGxjaWtwS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ2FuTnZiaUE5UFQwZ1hDSnZZbXBsWTNSY0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0VvWENJa1gzUjVjR1ZjSWlCcGJpQnFjMjl1S1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYldGd1QySnFaV04wVm1Gc2RXVnpLR3B6YjI0c0lDaDJLU0E5UGlCS2MyOXVRMjl1ZG1WeWMybHZiaTUyWVd4MVpTaDJJR0Z6SUVwemIyNU1hWFJsY21Gc0xDQnViM0p0WVd4cGVtVnlLU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElIUjVjR1VnUFNCcWMyOXVXMXdpSkY5MGVYQmxYQ0pkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjM2RwZEdOb0lDaDBlWEJsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1SaGRHVmNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1dmNtMWhiR2w2WlhJb1JHRjBaVlJwYldVdVpuSnZiVWxUVHlocWMyOXVMblpoYkhWbExDQjdJSE5sZEZwdmJtVTZJSFJ5ZFdVZ2ZTa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSmtkWEpoZEdsdmJsd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsY2loRWRYSmhkR2x2Ymk1bWNtOXRTVk5QS0dwemIyNHVkbUZzZFdVcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSUZ3aWJHbHVhMXdpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtOXliV0ZzYVhwbGNpaE1hVzVyTG1aeWIyMVBZbXBsWTNRb2FuTnZiaTUyWVd4MVpTa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVlc1eVpXTnZaMjVwZW1Wa0lITmxjbWxoYkdsNlpXUWdkSGx3WlNBbkpIdDBlWEJsZlNjaFlDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0F2THlCUWNtbHRhWFJwZG1VZ2RIbHdaU3dnY21WMGRYSnVJR0Z6SUdsekxseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtOXliV0ZzYVhwbGNpaHFjMjl1SUdGeklFeHBkR1Z5WVd3cE8xeHVJQ0FnSUgxY2JuMWNiaUlzSUNJdktpcGNiaUFxSUVCdGIyUjFiR1VnYVc1a1pYaGhZbXhsYzF4dUlDb3ZYRzR2S2lvZ1ZYUnBiR2wwYVdWeklHWnZjaUJqYjI1MlpYSjBhVzVuSUd4cGRHVnlZV3dnZEhsd1pYTWdkRzhnWVc1a0lHWnliMjBnZEdobGFYSWdXVUZOVENCbWNtOXVkRzFoZEhSbGNpQnlaWEJ5WlhObGJuUmhkR2x2Ymk0Z0tpOWNibHh1YVcxd2IzSjBJSHNnVEdsMFpYSmhiQ3dnVEdsMFpYSmhiSE1nZlNCbWNtOXRJRndpWlhod2NtVnpjMmx2Ymk5c2FYUmxjbUZzWENJN1hHNXBiWEJ2Y25RZ2V5QlFVa2xOU1ZSSlZrVlRJSDBnWm5KdmJTQmNJbVY0Y0hKbGMzTnBiMjR2Y0dGeWMyVnlYQ0k3WEc1cGJYQnZjblFnZXlCRVlYUmxWR2x0WlNCOUlHWnliMjBnWENKc2RYaHZibHdpTzF4dWFXMXdiM0owSUhzZ2JXRndUMkpxWldOMFZtRnNkV1Z6SUgwZ1puSnZiU0JjSW5WMGFXeHpMMlJoZEdGY0lqdGNibHh1THlvcUlGbEJUVXd0Wm5KcFpXNWtiSGtnY21Wd2NtVnpaVzUwWVhScGIyNGdabTl5SUdFZ2JHbDBaWEpoYkM0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUZsaGJXeE1hWFJsY21Gc0lEMGdjM1J5YVc1bklId2diblZ0WW1WeUlId2dZbTl2YkdWaGJpQjhJRzUxYkd3Z2ZDQlNaV052Y21ROGMzUnlhVzVuTENCaGJuaytJSHdnUVhKeVlYazhXV0Z0YkV4cGRHVnlZV3crTzF4dUx5b3FYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFMMXh1Wlhod2IzSjBJRzVoYldWemNHRmpaU0JaWVcxc1EyOXVkbVZ5YzJsdmJpQjdYRzRnSUNBZ0x5b3FJRU52Ym5abGNuUWdZU0JzYVhSbGNtRnNJR2x1ZEc4Z1lTQjVZVzFzSUdaeWFXVnVaR3g1SUhKbGNISmxjMlZ1ZEdGMGFXOXVMaUFxTDF4dUlDQWdJR1Y0Y0c5eWRDQm1kVzVqZEdsdmJpQjVZVzFzS0haaGJIVmxPaUJNYVhSbGNtRnNLVG9nV1dGdGJFeHBkR1Z5WVd3Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCM2NtRndjR1ZrSUQwZ1RHbDBaWEpoYkhNdWQzSmhjRlpoYkhWbEtHeHBkR1Z5WVd3cE8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVhkeVlYQndaV1FwSUhKbGRIVnliaUJ1ZFd4c08xeHVYRzRnSUNBZ0lDQWdJSE4zYVhSamFDQW9kM0poY0hCbFpDNTBlWEJsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElGd2ljM1J5YVc1blhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJRndpWW05dmJHVmhibHdpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltNTFiR3hjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSnVkVzFpWlhKY0lqcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2QzSmhjSEJsWkM1MllXeDFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKaGNuSmhlVndpT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIzY21Gd2NHVmtMblpoYkhWbExtMWhjQ2g1WVcxc0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0prWVhSbFhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIZHlZWEJ3WldRdWRtRnNkV1V1ZEc5SlUwOG9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKa2RYSmhkR2x2Ymx3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCM2NtRndjR1ZrTG5aaGJIVmxMblJ2U0hWdFlXNG9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKbWRXNWpkR2x2Ymx3aU9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW14cGJtdGNJanBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkM0poY0hCbFpDNTJZV3gxWlM1dFlYSnJaRzkzYmlncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbTlpYW1WamRGd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnRZWEJQWW1wbFkzUldZV3gxWlhNb2QzSmhjSEJsWkM1MllXeDFaU3dnZVdGdGJDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZLaW9nVW1WamRYSnphWFpsYkhrZ1kyOXVkbVZ5ZENCaElGbEJUVXdnYkdsMFpYSmhiQ0JwYm5SdklHRWdjbVZuZFd4aGNpQnNhWFJsY21Gc0lIWmhiSFZsTGlBcUwxeHVJQ0FnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJzYVhSbGNtRnNLSFpoYkhWbE9pQlpZVzFzVEdsMFpYSmhiQ2s2SUV4cGRHVnlZV3dnZTF4dUlDQWdJQ0FnSUNCcFppQW9kbUZzZFdVZ1BUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3Wlc5bUlIWmhiSFZsSUQwOVBTQmNJbTlpYW1WamRGd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WemRXeDBJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ1kyaHBiR1FnYjJZZ2RtRnNkV1VnWVhNZ1FYSnlZWGs4WVc1NVBpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYTjFiSFF1Y0hWemFDaHNhWFJsY21Gc0tHTm9hV3hrS1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjM1ZzZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvZG1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJFWVhSbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdSaGRHVlFZWEp6WlNBOUlFUmhkR1ZVYVcxbExtWnliMjFLVTBSaGRHVW9kbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa1lYUmxVR0Z5YzJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdlltcGxZM1FnUFNCMllXeDFaU0JoY3lCU1pXTnZjbVE4YzNSeWFXNW5MQ0JoYm5rK08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J5WlhOMWJIUTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lFeHBkR1Z5WVd3K0lEMGdlMzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYTJWNUlHbHVJRzlpYW1WamRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYTjFiSFJiYTJWNVhTQTlJR3hwZEdWeVlXd29iMkpxWldOMFcydGxlVjBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTjFiSFE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JSFpoYkhWbElEMDlQU0JjSW01MWJXSmxjbHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdVN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3Wlc5bUlIWmhiSFZsSUQwOVBTQmNJbUp2YjJ4bFlXNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIWmhiSFZsTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCMllXeDFaU0E5UFQwZ1hDSnpkSEpwYm1kY0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR1JoZEdWUVlYSnpaU0E5SUZCU1NVMUpWRWxXUlZNdVpHRjBaUzV3WVhKelpTaDJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1pHRjBaVkJoY25ObExuTjBZWFIxY3lrZ2NtVjBkWEp1SUdSaGRHVlFZWEp6WlM1MllXeDFaVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdSMWNtRjBhVzl1VUdGeWMyVWdQU0JRVWtsTlNWUkpWa1ZUTG1SMWNtRjBhVzl1TG5CaGNuTmxLSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaGtkWEpoZEdsdmJsQmhjbk5sTG5OMFlYUjFjeWtnY21WMGRYSnVJR1IxY21GMGFXOXVVR0Z5YzJVdWRtRnNkV1U3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCc2FXNXJVR0Z5YzJVZ1BTQlFVa2xOU1ZSSlZrVlRMbXhwYm1zdWNHRnljMlVvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR3hwYm10UVlYSnpaUzV6ZEdGMGRYTXBJSEpsZEhWeWJpQnNhVzVyVUdGeWMyVXVkbUZzZFdVN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIyWVd4MVpUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUM4dklFSmhZMnQxY0NCcFppQjNaU0JrYjI0bmRDQjFibVJsY25OMFlXNWtJSFJvWlNCMGVYQmxMbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdJQ0I5WEc1OVhHNGlMQ0FpYVcxd2IzSjBJSHNnUm1sc1pWTjBZWFJ6SUgwZ1puSnZiU0JjSW05aWMybGthV0Z1WENJN1hHNXBiWEJ2Y25RZ2V5QnBkR1Z5WVhSbFNXNXNhVzVsUm1sbGJHUnpMQ0J0WVhKclpHOTNibE52ZFhKalpVbHRjRzl5ZEN3Z1RXVjBZV1JoZEdFc0lGTmxZM1JwYjI1RVlYUmhJSDBnWm5KdmJTQmNJaTR2YldGeWEyUnZkMjVjSWp0Y2JtbHRjRzl5ZENCN0lFcHpiMjVHY205dWRHMWhkSFJsY2tWdWRISjVJSDBnWm5KdmJTQmNJbWx1WkdWNEwzUjVjR1Z6TDJwemIyNHZiV0Z5YTJSdmQyNWNJanRjYm1sdGNHOXlkQ0I3WEc0Z0lDQWdRMkZ1ZG1GelRXVjBZV1JoZEdGSmJtUmxlQ3hjYmlBZ0lDQktjMjl1UW1GelpVTmhiblpoYzBOaGNtUXNYRzRnSUNBZ1NuTnZia05oYm5aaGN5eGNiaUFnSUNCS2MyOXVRMkZ1ZG1GelEyRnlaQ3hjYmlBZ0lDQktjMjl1UTJGdWRtRnpSbWxzWlVOaGNtUXNYRzRnSUNBZ1NuTnZia05oYm5aaGMxUmxlSFJEWVhKa0xGeHVJQ0FnSUVwemIyNURZVzUyWVhOWFpXSkRZWEprTEZ4dWZTQm1jbTl0SUZ3aWFXNWtaWGd2ZEhsd1pYTXZhbk52Ymk5allXNTJZWE5jSWp0Y2JtbHRjRzl5ZENCN0lFTmhiblpoYzBacGJHVkVZWFJoTENCRFlXNTJZWE5NYVc1clJHRjBZU3dnUTJGdWRtRnpWR1Y0ZEVSaGRHRXNJRU5oYm5aaGMwUmhkR0VnWVhNZ1NVTmhiblpoY3lCOUlHWnliMjBnWENKdlluTnBaR2xoYmk5allXNTJZWE5jSWp0Y2JtbHRjRzl5ZENCN0lFeHBibXNnZlNCbWNtOXRJRndpWlhod2NtVnpjMmx2Ymk5c2FXNXJYQ0k3WEc1Y2JpOHFLaUJKYlhCdmNuUWdZU0JqWVc1MllYTWdabWxzWlNCMWMybHVaeUIwYUdVZ1kyRnVkbUZ6SUcxbGRHRmtZWFJoTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTmhiblpoYzBsdGNHOXlkQ2hjYmlBZ0lDQndZWFJvT2lCemRISnBibWNzWEc0Z0lDQWdjMjkxY21ObE9pQnpkSEpwYm1jc1hHNGdJQ0FnYVc1a1pYZzZJRU5oYm5aaGMwMWxkR0ZrWVhSaFNXNWtaWGhiWENKemRISnBibWRjSWwwc1hHNGdJQ0FnYzNSaGRITTZJRVpwYkdWVGRHRjBjMXh1S1RvZ1NuTnZia05oYm5aaGN5QjdYRzRnSUNBZ1kyOXVjM1FnWTJGdWRtRnpJRDBnYm1WM0lFTmhiblpoYzBSaGRHRW9jR0YwYUN3Z2MzUmhkSE1wTzF4dUlDQWdJR052Ym5OMElIQmhjbk5sWkNBOUlFcFRUMDR1Y0dGeWMyVW9jMjkxY21ObEtTQmhjeUJKUTJGdWRtRnpPMXh1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JqSUc5bUlIQmhjbk5sWkM1dWIyUmxjeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZeTUwZVhCbElEMDlJRndpWjNKdmRYQmNJaWtnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0FnSUdsbUlDaGpMblI1Y0dVZ1BUMGdYQ0owWlhoMFhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhzZ1puSnZiblJ0WVhSMFpYSXNJRzFsZEdGa1lYUmhMQ0JzYVc1bGN5d2djMlZqZEdsdmJuTWdmU0E5SUcxaGNtdGtiM2R1VTI5MWNtTmxTVzF3YjNKMEtIQmhkR2dzSUdNdWRHVjRkQ3dnYVc1a1pYZ3VZMkZqYUdWelcyTXVhV1JkS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHTmhjbVFnUFNCdVpYY2dRMkZ1ZG1GelEyRnlaRVJoZEdFb2NHRjBhQ3dnWXk1cFpDd2dZeXdnWm5KdmJuUnRZWFIwWlhJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWamRHbHZibk11Wm05eVJXRmphQ2dvYVNrZ1BUNGdZMkZ5WkM1elpXTjBhVzl1S0drcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGJuWmhjeTVqWVhKa0tHTmhjbVFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0IwWVdjZ2FXNGdiV1YwWVdSaGRHRXVkR0ZuY3lrZ1kyRnVkbUZ6TG0xbGRHRmtZWFJoTG5SaFp5aDBZV2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoamIyNXpkQ0JzYVc1cklHOW1JRzFsZEdGa1lYUmhMbXhwYm10eklEOC9JRnRkS1NCallXNTJZWE11YldWMFlXUmhkR0V1YkdsdWF5aHNhVzVyS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnWm1sbGJHUWdiMllnYVhSbGNtRjBaVWx1YkdsdVpVWnBaV3hrY3loc2FXNWxjeWtwSUdOaGJuWmhjeTV0WlhSaFpHRjBZUzVwYm14cGJtVkdhV1ZzWkNobWFXVnNaQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCallYSmtJRDBnYm1WM0lFTmhiblpoYzBOaGNtUkVZWFJoS0hCaGRHZ3NJR011YVdRc0lHTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnVkbUZ6TG1OaGNtUW9ZMkZ5WkNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnWTJGdWRtRnpMbUoxYVd4a0tDazdYRzU5WEc1Y2JpOHFLaUJOWlhSaFpHRjBZU0JtYjNJZ1lTQnpjR1ZqYVdacFl5QmpZVzUyWVhNZ1kyRnlaQzRnS2k5Y2JtRmljM1J5WVdOMElHTnNZWE56SUVGaWMzUnlZV04wUTJGdWRtRnpRMkZ5WkVSaGRHRWdlMXh1SUNBZ0lIQjFZbXhwWXlCdFpYUmhaR0YwWVRvZ1RXVjBZV1JoZEdFZ1BTQnVaWGNnVFdWMFlXUmhkR0VvS1R0Y2JseHVJQ0FnSUhCMVlteHBZeUJqYjI1emRISjFZM1J2Y2loY2JpQWdJQ0FnSUNBZ2NIVmliR2xqSUhCaGRHZzZJSE4wY21sdVp5eGNiaUFnSUNBZ0lDQWdjSFZpYkdsaklHbGtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ0lDQWdJSEJ5YjNSbFkzUmxaQ0J1YjJSbFNuTnZiam9nUTJGdWRtRnpWR1Y0ZEVSaGRHRWdmQ0JEWVc1MllYTk1hVzVyUkdGMFlTQjhJRU5oYm5aaGMwWnBiR1ZFWVhSaFhHNGdJQ0FnS1NCN2ZWeHVYRzRnSUNBZ2NIVmliR2xqSUdKMWFXeGtLQ2s2SUVwemIyNUNZWE5sUTJGdWRtRnpRMkZ5WkNCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrWm1sc1pUb2dkR2hwY3k1d1lYUm9MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pHbGtPaUIwYUdsekxtbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pIQnZjMmwwYVc5dU9pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlRG9nZEdocGN5NXViMlJsU25OdmJpNTRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGs2SUhSb2FYTXVibTlrWlVwemIyNHVlU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBa1pHbHRaVzV6YVc5dWN6b2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGRwWkhSb09pQjBhR2x6TG01dlpHVktjMjl1TG5kcFpIUm9MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2hsYVdkb2REb2dkR2hwY3k1dWIyUmxTbk52Ymk1b1pXbG5hSFFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pHTnZiRzl5T2lCMGFHbHpMbTV2WkdWS2MyOXVMbU52Ykc5eUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkd4cGJtczZJRXhwYm1zdVptbHNaU2gwYUdsekxuQmhkR2dwTG5kcGRHaENiRzlqYXloMGFHbHpMbWxrS1M1MGIwOWlhbVZqZENncExGeHVJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lIMWNibjFjYmx4dUx5b3FJRTFsZEdGa1lYUmhJR1p2Y2lCaElITndaV05wWm1saklHTmhjbVFnYVc0Z1lTQmpZVzUyWVhNZ2RtbGxkeTRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJEWVc1MllYTkRZWEprUkdGMFlTQmxlSFJsYm1SeklFRmljM1J5WVdOMFEyRnVkbUZ6UTJGeVpFUmhkR0VnZTF4dUlDQWdJSEIxWW14cFl5QnpaV04wYVc5dWN6b2dVMlZqZEdsdmJrUmhkR0ZiWFNBOUlGdGRPMXh1SUNBZ0lIQjFZbXhwWXlCamIyNXpkSEoxWTNSdmNpaGNiaUFnSUNBZ0lDQWdjSFZpYkdsaklIQmhkR2c2SUhOMGNtbHVaeXhjYmlBZ0lDQWdJQ0FnY0hWaWJHbGpJR2xrT2lCemRISnBibWNzWEc0Z0lDQWdJQ0FnSUhCeWIzUmxZM1JsWkNCdWIyUmxTbk52YmpvZ1EyRnVkbUZ6VkdWNGRFUmhkR0VnZkNCRFlXNTJZWE5NYVc1clJHRjBZU0I4SUVOaGJuWmhjMFpwYkdWRVlYUmhMRnh1SUNBZ0lDQWdJQ0J3ZFdKc2FXTWdabkp2Ym5SdFlYUjBaWEkvT2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0JLYzI5dVJuSnZiblJ0WVhSMFpYSkZiblJ5ZVQ1Y2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUNBZ2MzVndaWElvY0dGMGFDd2dhV1FzSUc1dlpHVktjMjl1S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J3ZFdKc2FXTWdjMlZqZEdsdmJpaHpaV04wYVc5dU9pQlRaV04wYVc5dVJHRjBZU2s2SUZObFkzUnBiMjVFWVhSaElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1elpXTjBhVzl1Y3k1d2RYTm9LSE5sWTNScGIyNHBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMlZqZEdsdmJqdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2RXSnNhV01nWW5WcGJHUW9LVG9nU25OdmJrTmhiblpoYzBOaGNtUWdlMXh1SUNBZ0lDQWdJQ0J6ZDJsMFkyZ2dLSFJvYVhNdWJtOWtaVXB6YjI0dWRIbHdaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0luUmxlSFJjSWpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVMaTRvYzNWd1pYSXVZblZwYkdRb0tTQmhjeUJLYzI5dVFtRnpaVU5oYm5aaGMwTmhjbVFwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWthVzVtYVdWc1pITTZJSFJvYVhNdWJXVjBZV1JoZEdFdVptbHVhWE5vU1c1c2FXNWxSbWxsYkdSektDa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSbWNtOXVkRzFoZEhSbGNqb2dkR2hwY3k1bWNtOXVkRzFoZEhSbGNpeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkhObFkzUnBiMjV6T2lCMGFHbHpMbk5sWTNScGIyNXpMbTFoY0Nnb2VDa2dQVDRnZUM1aWRXbHNaQ2dwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSFJoWjNNNklIUm9hWE11YldWMFlXUmhkR0V1Wm1sdWFYTm9WR0ZuY3lncExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FrYkdsdWEzTTZJSFJvYVhNdWJXVjBZV1JoZEdFdVptbHVhWE5vVEdsdWEzTW9LU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pIUjVjR1U2SUZ3aWRHVjRkQzFqWVhKa1hDSXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSamIyeHZjam9nZEdocGN5NXViMlJsU25OdmJpNWpiMnh2Y2l4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHRnpJRXB6YjI1RFlXNTJZWE5VWlhoMFEyRnlaRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKbWFXeGxYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0xpNHVjM1Z3WlhJdVluVnBiR1FvS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKR3hwYm10bFpFWnBiR1U2SUhSb2FYTXVibTlrWlVwemIyNHVabWxzWlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHRnpJRXB6YjI1RFlXNTJZWE5HYVd4bFEyRnlaRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKc2FXNXJYQ0k2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0xpNHVjM1Z3WlhJdVluVnBiR1FvS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSFZ5YkRvZ2RHaHBjeTV1YjJSbFNuTnZiaTUxY213c1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmhjeUJLYzI5dVEyRnVkbUZ6VjJWaVEyRnlaRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJSEpsZEhWeWJpQnVaWGRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYm4xY2JseHVMeW9xSUUxbGRHRmtZWFJoSUdadmNpQjBhR1VnZDJodmJHVWdZMkZ1ZG1GeklIQmhaMlVnWVhNZ1lTQjNhRzlzWlM0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCRFlXNTJZWE5FWVhSaElIdGNiaUFnSUNCd2RXSnNhV01nWTJGeVpITTZJRU5oYm5aaGMwTmhjbVJFWVhSaFcxMGdQU0JiWFR0Y2JpQWdJQ0J3ZFdKc2FXTWdiV1YwWVdSaGRHRTZJRTFsZEdGa1lYUmhJRDBnYm1WM0lFMWxkR0ZrWVhSaEtDazdYRzVjYmlBZ0lDQndkV0pzYVdNZ1kyOXVjM1J5ZFdOMGIzSW9jSFZpYkdsaklIQmhkR2c2SUhOMGNtbHVaeXdnY0hWaWJHbGpJSE4wWVhSek9pQkdhV3hsVTNSaGRITXBJSHQ5WEc1Y2JpQWdJQ0J3ZFdKc2FXTWdZMkZ5WkNoa09pQkRZVzUyWVhORFlYSmtSR0YwWVNrNklFTmhiblpoYzBOaGNtUkVZWFJoSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqWVhKa2N5NXdkWE5vS0dRcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1pEdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2RXSnNhV01nWW5WcGJHUW9LVG9nU25OdmJrTmhiblpoY3lCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrWTJGeVpITTZJSFJvYVhNdVkyRnlaSE11YldGd0tDaDRLU0E5UGlCNExtSjFhV3hrS0NrcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkdOMGFXMWxPaUIwYUdsekxuTjBZWFJ6TG1OMGFXMWxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pHMTBhVzFsT2lCMGFHbHpMbk4wWVhSekxtMTBhVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKR2x1Wm1sbGJHUnpPaUIwYUdsekxtMWxkR0ZrWVhSaExtWnBibWx6YUVsdWJHbHVaVVpwWld4a2N5Z3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0pHeHBibXR6T2lCMGFHbHpMbTFsZEdGa1lYUmhMbVpwYm1semFFeHBibXR6S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrZEdGbmN6b2dkR2hwY3k1dFpYUmhaR0YwWVM1bWFXNXBjMmhVWVdkektDa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBa2NHRjBhRG9nZEdocGN5NXdZWFJvTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKSE5wZW1VNklIUm9hWE11YzNSaGRITXVjMmw2WlN4Y2JpQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNTlYRzRpTENBaWFXMXdiM0owSUhzZ1kyRnVkbUZ6U1cxd2IzSjBJSDBnWm5KdmJTQmNJbWx1WkdWNEwybHRjRzl5ZEM5allXNTJZWE5jSWp0Y2JtbHRjRzl5ZENCN0lHMWhjbXRrYjNkdVNXMXdiM0owSUgwZ1puSnZiU0JjSW1sdVpHVjRMMmx0Y0c5eWRDOXRZWEpyWkc5M2Jsd2lPMXh1YVcxd2IzSjBJSHNnUTJGdWRtRnpTVzF3YjNKMFVtVnpkV3gwTENCSmJYQnZjblJEYjIxdFlXNWtMQ0JOWVhKclpHOTNia2x0Y0c5eWRGSmxjM1ZzZENCOUlHWnliMjBnWENKcGJtUmxlQzkzWldJdGQyOXlhMlZ5TDIxbGMzTmhaMlZjSWp0Y2JseHVMeW9xSUZkbFlpQjNiM0pyWlhJZ1pXNTBjbmtnY0c5cGJuUWdabTl5SUdsdGNHOXlkR2x1Wnk0Z0tpOWNibTl1YldWemMyRm5aU0E5SUdGemVXNWpJQ2hsZG1WdWRDa2dQVDRnZTF4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxbGMzTmhaMlVnUFNCbGRtVnVkQzVrWVhSaElHRnpJRWx0Y0c5eWRFTnZiVzFoYm1RN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0cxbGMzTmhaMlV1ZEhsd1pTQTlQVDBnWENKdFlYSnJaRzkzYmx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J0WVhKclpHOTNiaUE5SUcxaGNtdGtiM2R1U1cxd2IzSjBLRzFsYzNOaFoyVXVjR0YwYUN3Z2JXVnpjMkZuWlM1amIyNTBaVzUwY3l3Z2JXVnpjMkZuWlM1dFpYUmhaR0YwWVN3Z2JXVnpjMkZuWlM1emRHRjBLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdjRzl6ZEUxbGMzTmhaMlVvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSNWNHVTZJRndpYldGeWEyUnZkMjVjSWl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYTjFiSFE2SUcxaGNtdGtiM2R1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JoY3lCTllYSnJaRzkzYmtsdGNHOXlkRkpsYzNWc2RDazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvYldWemMyRm5aUzUwZVhCbElEMDlQU0JjSW1OaGJuWmhjMXdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmpZVzUyWVhNZ1BTQmpZVzUyWVhOSmJYQnZjblFvYldWemMyRm5aUzV3WVhSb0xDQnRaWE56WVdkbExtTnZiblJsYm5SekxDQnRaWE56WVdkbExtbHVaR1Y0TENCdFpYTnpZV2RsTG5OMFlYUXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQndiM04wVFdWemMyRm5aU2g3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dYQ0pqWVc1MllYTmNJaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhOMWJIUTZJR05oYm5aaGN5eGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1lYTWdRMkZ1ZG1GelNXMXdiM0owVW1WemRXeDBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIQnZjM1JOWlhOellXZGxLSHNnSkdWeWNtOXlPaUJjSWxWdWMzVndjRzl5ZEdWa0lHbHRjRzl5ZENCdFpYUm9iMlF1WENJZ2ZTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0dCRVlYUmhZMjl5WlNCSmJtUmxlR1Z5SUdaaGFXeGxaQ0IwYnlCcGJtUmxlQ0FrZTJWMlpXNTBMbVJoZEdFdWNHRjBhSDA2SUNSN1pYSnliM0o5WUNrN1hHNGdJQ0FnSUNBZ0lIQnZjM1JOWlhOellXZGxLSHNnSkdWeWNtOXlPaUJsY25KdmNpNXRaWE56WVdkbElIMHBPMXh1SUNBZ0lIMWNibjA3WEc0aVhTd0tJQ0FpYldGd2NHbHVaM01pT2lBaU1HcEVRVUZCTEVsQlFVRkJMRWRCUVVGRExFZEJRVUVzUTBGQlFVTXNSMEZCUVVNc1MwRkJRU3hGUVVGRExGTkJRVk1zUlVGQlJVTXNSVUZCUlN4RFFVRlhMRTlCUVU5R0xFbEJRV3BDTEZWQlFXOURMRTlCUVU5RExFbEJRV3BDTEZOQlFYZENRU3hIUVVGUExGRkJRVkZETEVWQlFVVXNSVUZCWXl4UFFVRlBMRkZCUVc1Q0xGbEJRVEpDTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1JVRkJSVUVzUTBGQlF5eEZRVUZaTEU5QlFVOUdMRWxCUVdwQ0xGTkJRWGxDUVN4SFFVRlJMRlZCUVZWRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEZWQlFWVkJMRVZCUVVVc1EwRkJReXhIUVVGbExFOUJRVThzVFVGQmNFSXNXVUZCZVVJc1MwRkJTMFlzUjBGQlN5eFZRVUZWTEVOQlFVTXNUMEZCVHl4VFFVRlRMRVZCUVVVc1EwRkJReXhKUVVGSlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4VFFVRlRReXhGUVVGRlF5eEZRVUZGTEVOQlFVTXNSMEZCUjBZc1JVRkJSVVVzUTBGQlF5eEZRVUZGTEU5QlFVOUdMRVZCUVVWRkxFTkJRVU1zUlVGQlJTeFJRVUZSTEVsQlFVbERMRVZCUVVWSUxFVkJRVVZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVWQkxFVkJRVVVzUlVGQlJTeEhRVUZITEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUVVVc1QwRkJUeXhGUVVGRlFTeERRVUZETEVWQlFVVXNTMEZCUzBNc1JVRkJSU3hSUVVGUlFTeEZRVUZGUVN4RlFVRkZMRkZCUVZGR0xFTkJRVU1zUlVGQlJVVXNSVUZCUlN4RlFVRkZMRWRCUVVkQkxFVkJRVVVzVDBGQlR5eERRVUZETEU5QlFVOUdMRVZCUVVVc1JVRkJSU3hGUVVGRlFTeEZRVUZGTEVWQlFVVkVMRVZCUVVWRExFVkJRVVVzUlVGQlJTeFRRVUZUUnl4RlFVRkZTaXhGUVVGRlJTeEZRVUZGTEVOQlFVTkVMRVZCUVVVc1JVRkJSVWNzUlVGQlJVb3NRMEZCUXl4SFFVRkhMRTlCUVU4c1pVRkJaVWtzUlVGQlJVb3NSVUZCUlN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhYUVVGWExFZEJRVWNzU1VGQlNVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVVFzUlVGQlJTeEZRVUZGTEZOQlFWTkhMRVZCUVVVc1EwRkJReXhQUVVGUExHVkJRV1ZCTEVWQlFVVXNZVUZCWVN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJVZ3NSVUZCUlN4RlFVRkZMRk5CUVZOSExFVkJRVVVzUTBGQlF5eEpRVUZKU2l4RlFVRkZTU3hIUVVGSFFTeEZRVUZGTEZkQlFWY3NWVUZCVlN4RFFVRkRMRTlCUVU5QkxFVkJRVVVzVDBGQlR5eEZRVUZGTEZWQlFWVXNRMEZCUXl4UFFVRlBRU3hEUVVGRExFVkJRVVVzVDBGQlQwZ3NSVUZCUlN4RlFVRkZSQ3hGUVVGRkxFbEJRVWxCTEVOQlFVTXNSVUZCUlVFc1EwRkJReXhGUVVGRlF5eEZRVUZGTEVWQlFVVXNVMEZCVTBjc1JVRkJSVW9zUlVGQlJTeERRVUZETEU5QlFVOHNUMEZCVHl4VlFVRlZMR1ZCUVdVc1MwRkJTMGtzUlVGQlJVb3NRMEZCUXl4RFFVRkRMRVZCUVVWRExFVkJRVVVzUlVGQlJTeEhRVUZIUVN4RlFVRkZRU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4VFFVRlRMRVZCUVVWRUxFVkJRVVZETEVWQlFVVXNRMEZCUXl4aFFVRmhMRk5CUVZORExFVkJRVVZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1owSkJRV2RDUml4SFFVRkhMRTlCUVU4c1NVRkJTVUVzUlVGQlJVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1JVRkJSVUVzUTBGQlF5eERRVUZETEVsQlFVbEVMRVZCUVVWRUxFVkJRVVVzVlVGQlZTeFRRVUZUUnl4RlFVRkZSQ3hGUVVGRlNpeEZRVUZGTEVOQlFVTXNVVUZCVVVNc1JVRkJSU3hGUVVGRlFTeEZRVUZGUnl4RlFVRkZTQ3hKUVVGSlJDeEZRVUZGUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVFN5eEZRVUZGUml4RlFVRkZTaXhGUVVGRlF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4VFFVRlRSeXhGUVVGRlNpeEZRVUZGTEVOQlFVTkxMRVZCUVVWTUxFVkJRVVVzVDBGQlR5eFRRVUZUUXl4RlFVRkZMRU5CUVVOSExFVkJRVVZLTEVWQlFVVkRMRU5CUVVNc1JVRkJSVUVzUlVGQlJVUXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxGTkJRVk5ETEVWQlFVVkRMRVZCUVVWRExFVkJRVVVzUTBGQlEwZ3NSVUZCUlVrc1JVRkJSVW9zUlVGQlJVTXNSVUZCUlVNc1JVRkJSVU1zUTBGQlF5eERRVUZETEVWQlFVVkdMRU5CUVVNc1JVRkJSVVFzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlVrc1JVRkJSVW9zUlVGQlJTeERRVUZETEU5QlFVOU5MRVZCUVVVc1UwRkJVMDRzUlVGQlJVTXNSVUZCUlVNc1JVRkJSVU1zUlVGQlJTeERRVUZETEU5QlFVOUlMRVZCUVVVc1QwRkJUeXhEUVVGRFNTeEZRVUZGU0N4RlFVRkZReXhGUVVGRlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRlNDeERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRUeXhGUVVGRlNDeEZRVUZGU2l4RlFVRkZMRU5CUVVNc1NVRkJTVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4SlFVRkpSQ3hEUVVGRExFVkJRVVVzVDBGQlQwc3NSVUZCUlVRc1JVRkJSU3hWUVVGVkxFTkJRVU1zU1VGQlNVRXNSVUZCUlVnc1JVRkJSU3hEUVVGRExFVkJRVVZCTEVWQlFVVXNSMEZCUnl4SFFVRkhSeXhGUVVGRlNDeEZRVUZGTEVsQlFVbEhMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeFRRVUZUUVN4RlFVRkZMRU5CUVVNc1NVRkJTVW9zUlVGQlJVMHNSVUZCUlN4VFFVRlRSaXhGUVVGRlNpeEZRVUZGUXl4SFFVRkZReXhIUVVGRkxFTkJRVU1zVDBGQlQwVXNSVUZCUlN4UFFVRlBTQ3hMUVVGSlF5eEhRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRXRCUVVzc1EwRkJRMFlzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4aFFVRmhMRU5CUVVNc1JVRkJSVVVzUjBGQlJTeGhRVUZoUkN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJVY3NRMEZCUXl4RlFVRkZMRTlCUVU4c1QwRkJUeXhMUVVGTExFVkJRVVVzVTBGQlUwRXNSVUZCUlN4RFFVRkRMRTlCUVU5QkxFZEJRVWNzUlVGQlJTeFJRVUZSTEVOQlFVTXNSVUZCUlVvc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJVTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVZCTEVOQlFVTXNRMEZCUXl4VFFVRlRUeXhIUVVGSExFTkJRVU1zVDBGQmJVSXNUMEZCVHl4UlFVRndRaXhYUVVFd1FpeERRVUZETEZOQlFWTkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU5FTEVWQlFVVXNSVUZCUlN4TlFVRk5MRWxCUVVrc1RVRkJUU3dyUmtGQkswWXNRMEZCUXl4RFFVRkRMRk5CUVZORkxFVkJRVVZPTEVWQlFVVXNRMEZCUTBzc1JVRkJSU3hGUVVGRkxFbEJRVWxVTEVWQlFVVk5MRVZCUVVVc1UwRkJVMFlzUlVGQlJVb3NSVUZCUlN4RFFVRkRMRTlCUVU5SkxFVkJRVVZLTEVOQlFVTXNSVUZCUlN4RlFVRkZTU3hEUVVGRExFVkJRVVVzUjBGQlIwb3NSVUZCUlN4SFFVRkhMRVZCUVVVc1RVRkJUU3hKUVVGSkxFMUJRVTBzWVVGQllVa3NSVUZCUlN4TFFVRkxMRWxCUVVrc1JVRkJSU3hsUVVGbFNpeEZRVUZGTERKRlFVRXlSU3hGUVVGRkxFbEJRVWxETEVWQlFVVkZMRVZCUVVWSUxFVkJRVVVzUlVGQlJVc3NSMEZCUjBvc1JVRkJSU3hUUVVGVFJ5eEZRVUZGTEVOQlFVTXNUMEZCVDBFc1JVRkJSU3hGUVVGRkxFVkJRVVZGTEVWQlFVVXNVMEZCVTBZc1JVRkJSVW9zUlVGQlJTeERRVUZETEU5QlFVOUpMRWxCUVVsSUxFVkJRVVZFTEVOQlFVTXNSVUZCUlVFc1JVRkJSVWtzUlVGQlJTeEZRVUZGTEV0QlFVdEJMRU5CUVVNc1IwRkJSeXhIUVVGSFF5eEZRVUZGTEUxQlFVMHNTVUZCU1N4TlFVRk5RU3hGUVVGRkxEQkVRVUV3UkN4RlFVRkZMRTlCUVU4c1NVRkJTVWdzUlVGQlJTeFRRVUZUUml4RlFVRkZReXhGUVVGRkxFTkJRVU1zU1VGQlNVTXNSVUZCUlVNc1JVRkJSVVlzUlVGQlJTeFBRVUZQUXl4RlFVRkZSaXhGUVVGRkxFOUJRVTlYTEVWQlFVVldMRVZCUVVWRkxFVkJRVVVzVTBGQlV5eEZRVUZGTEZGQlFWRXNSVUZCUlZNc1JVRkJSVllzUlVGQlJVa3NSVUZCUlN4VFFVRlRSaXhIUVVGRlNpeEhRVUZGTEVOQlFVTXNTVUZCU1VNc1IwRkJSVTBzUlVGQlJWQXNSMEZCUlVrc1IwRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEV0QlFVdEJMRWRCUVVVc1MwRkJTeXhQUVVGUFNDeEhRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpRU3hIUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1NVRkJTVVFzUlVGQlJTeE5RVUZOUXl4RlFVRkZReXhEUVVGRExFTkJRVU1zUlVGQlJVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUVXl4RlFVRkZWQ3hGUVVGRlNpeEZRVUZGTEVOQlFVTXNUMEZCVHl4SlFVRkpSU3hGUVVGRkxGTkJRVk5FTEVWQlFVVkRMRVZCUVVVc1EwRkJReXhQUVVGUFR5eEZRVUZGTEVWQlFVVlFMRVZCUVVWR0xFVkJRVVZETEVWQlFVVXNUMEZCVDFVc1JVRkJSVlFzUlVGQlJVWXNSVUZCUlN4alFVRmpTU3hEUVVGRExFVkJRVVZSTEVWQlFVVldMRVZCUVVWR0xFVkJRVVZETEVWQlFVVXNUVUZCVFVNc1JVRkJSVUVzUlVGQlJVWXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlUyTXNSVUZCUlZZc1JVRkJSVW9zUlVGQlJTeERRVUZETEVkQlFXRXNUMEZCVDBNc1JVRkJSVVFzU1VGQmJrSXNWVUZCZFVJc1MwRkJTeXhOUVVGTlF5eERRVUZETEVsQlFVbEJMRWRCUVVkRUxFVkJRVVVzUjBGQlIwRXNSVUZCUlN4RlFVRkZMRTFCUVUwc1NVRkJTU3hOUVVGTlNTeEZRVUZGTERKRFFVRXlReXhGUVVGRkxFbEJRVWxJTEVOQlFVTXNRMEZCUXl4VFFVRlRZeXhGUVVGRldDeEZRVUZGTEVOQlFVTXNUMEZCVDFVc1JVRkJSU3hUUVVGVFZpeERRVUZETEVWQlFVVlRMRVZCUVVVc1ZVRkJWVlFzUlVGQlJTeEpRVUZKUVN4RFFVRkRMRVZCUVVVc1NVRkJTU3hUUVVGVFNpeEZRVUZGTEVOQlFVTXNUMEZCVDBFc1JVRkJSU3hYUVVGWExFVkJRVVZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVFdTeEZRVUZGV2l4RlFVRkZMRU5CUVVNc1QwRkJUMVVzUlVGQlJTeFRRVUZUVml4RFFVRkRMRVZCUVVWVExFVkJRVVVzVlVGQlZWUXNSVUZCUlN4SlFVRkpRU3hEUVVGRExFVkJRVVVzU1VGQlNTeFRRVUZUU2l4RlFVRkZMRU5CUVVNc1QwRkJUMEVzUlVGQlJTeFhRVUZYTEVWQlFVVkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUWVN4RlFVRkZZaXhGUVVGRkxFTkJRVU1zVDBGQlQxVXNSVUZCUlN4UlFVRlJWaXhEUVVGRExFVkJRVVZUTEVWQlFVVXNVMEZCVTFRc1JVRkJSU3hKUVVGSlFTeERRVUZETEVWQlFVVXNTVUZCU1N4VFFVRlRTaXhGUVVGRkxFTkJRVU1zVDBGQlQwRXNSVUZCUlN4VlFVRlZMRVZCUVVWSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRZeXhGUVVGRlpDeEZRVUZGTEVOQlFVTXNUMEZCVDFVc1JVRkJSU3hSUVVGUlZpeERRVUZETEVWQlFVVlRMRVZCUVVVc1UwRkJVMVFzUlVGQlJTeEpRVUZKUVN4RFFVRkRMRVZCUVVVc1NVRkJTU3hUUVVGVFNpeEZRVUZGTEVOQlFVTXNUMEZCVDBFc1JVRkJSU3hWUVVGVkxFVkJRVVZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVFpTeEZRVUZGWml4RlFVRkZMRU5CUVVNc1QwRkJUMEVzWVVGQllVWXNRMEZCUXl4RFFVRkRMRk5CUVZOclFpeEZRVUZGYUVJc1JVRkJSU3hEUVVGRExFMUJRWGxDTEVOQlFVTXNSVUZCUlN4VFFVRlRMRXRCUVV0QkxFTkJRVU1zU1VGQmNrTXNaMEpCUVhORExFTkJRVU1zVTBGQlUybENMRVZCUVVWcVFpeEZRVUZGTEVOQlFVTXNUMEZCVDBrc1JVRkJSU3hIUVVGSExFOUJRVThzVTBGQlUwb3NRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVMUVzUlVGQlJWSXNSVUZCUlVvc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFVrc1JVRkJSU3hOUVVGTlNpeEZRVUZGTEZOQlFWTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlUxY3NSVUZCUlZBc1JVRkJSVW9zUlVGQlJTeERRVUZETEU5QlFVOXZRaXhGUVVGRmNFSXNRMEZCUXl4SlFVRkpRU3hGUVVGRkxFTkJRVU5CTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFZEJRVWNzVFVGQlRTeExRVUZMTEZOQlFWTkpMRVZCUVVVc1UwRkJVMG9zUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVTNOQ0xFVkJRVVZzUWl4RlFVRkZTaXhGUVVGRkxFTkJRV2RDTEVkQlFWb3NRMEZCUTBFc1IwRkJZMGtzUlVGQlJTeFRRVUZUU2l4RlFVRkZMRk5CUVZNc1QwRkJUMGtzUlVGQlJTeEpRVUZKU0N4RlFVRkZSeXhGUVVGRkxGZEJRVmRLTEVWQlFVVXNVMEZCVXl4VFFVRlRTU3hGUVVGRlNpeEZRVUZGTEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNc1IwRkJXVVVzUlVGQlJTeGxRVUZZTEU5QlFYZENMRTlCUVU5QkxFVkJRVVVzWVVGQllTeEpRVUZKUlN4SFFVRmxMRTlCUVU4c1MwRkJjRUlzV1VGQmQwSXNUMEZCVDBZc1JVRkJSU3hoUVVGaFJTeEhRVUZGUVN4RlFVRkRMRVZCUVVVc1IwRkJSeXhOUVVGTkxFdEJRVXNzUTBGQlF5eFJRVUZSU0N4RlFVRkZMRWxCUVVrc1NVRkJTVWNzUTBGQlF5eEZRVUZGUkN4RlFVRkZMRVZCUVVWQkxFVkJRVVZJTEVWQlFVVXNUMEZCVDBjc1NVRkJTVVlzUlVGQlJTeEpRVUZKUkN4RlFVRkZSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKUlN4RlFVRkZMRTFCUVUwc1MwRkJTMG9zUTBGQlF5eEZRVUZGTEU5QlFVOUpMRVZCUVVVc1MwRkJTeXhGUVVGRlFTeERRVUZETEVOQlFVTXNVVUZCVVVNc1IwRkJSU3hEUVVGRExFVkJRVVZwUWl4SFFVRkZMRVZCUVVWQkxFZEJRVVZ1UWl4RlFVRkZMRTlCUVU5dFFpeExRVUZKYWtJc1IwRkJSVVlzUlVGQlJXMUNMRVZCUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzVVVGQlVXaENMRWRCUVVVc1JVRkJSVUVzUjBGQlJWQXNSVUZCUlN4UFFVRlBUeXhMUVVGSlJDeEhRVUZGVGl4RlFVRkZUeXhGUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVsQlFVbERMRWRCUVVVc1EwRkJReXhGUVVGRkxGRkJRVkZETEUxQlFVdElMRWxCUVVjc1EwRkJReXhIUVVGSExHVkJRV1VzUzBGQlMwRXNSMEZCUlVjc1JVRkJReXhIUVVGSFJDeEhRVUZGTEV0QlFVdERMRVZCUVVNc1JVRkJSU3hQUVVGUFJDeEhRVUZGTEV0QlFVc3NSVUZCUlVFc1JVRkJReXhGUVVGRlNpeEZRVUZGTEZOQlFWTktMRVZCUVVVc1VVRkJVU3hGUVVGRlFTeEZRVUZGTEZOQlFWTXNUVUZCVFN4RFFVRkRMRTlCUVU5SkxFVkJRVVVzVDBGQlR5eE5RVUZOUVN4RlFVRkZMRTFCUVUwc1RVRkJUVUVzUlVGQlJTeE5RVUZOTEZOQlFWTktMRVZCUVVVc1UwRkJVeXhUUVVGVFF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpkVUlzUlVGQlJTeERRVUZETEVWQlFVVXNVMEZCVTBNc1JVRkJSWEpDTEVWQlFVVktMRVZCUVVVc1EwRkJReXhIUVVGSGNVSXNSVUZCUldwQ0xFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNUMEZCVDBvc1JVRkJSU3hMUVVGTExFZEJRVWNzVDBGQlR5eEZRVUZGTEVWQlFVVkpMRXRCUVV0dlFpeEpRVUZKUVN4RlFVRkZjRUlzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4UlFVRlJTQ3hGUVVGRmRVSXNSVUZCUlhCQ0xFTkJRVU1zUlVGQlJVWXNSVUZCUlN4RlFVRkZReXhGUVVGRkxFVkJRVVZGTEVWQlFVVXNSVUZCUlVNc1JVRkJSVTRzUlVGQlJVMHNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSMEVzUzBGQlMwd3NSVUZCUlN4RFFVRkRReXhGUVVGRlJDeEZRVUZGU3l4RFFVRkRMRVZCUVVVc1MwRkJVMFFzU1VGQlNpeEpRVUZSUVN4RlFVRkZTaXhGUVVGRlN5eERRVUZETEVWQlFVVXNWMEZCVnl4TFFVRkxMRVZCUVZOR0xFVkJRVVVzVDBGQlQwVXNRMEZCUXl4SlFVRnFRanRCUVVGQkxFZEJRVEpDUml4RlFVRkZMRTlCUVU5RkxFTkJRVU1zU1VGQmFrSXNUVUZCTWtKR0xFVkJRVVVzVDBGQlQwVXNSVUZCUlN4RFFVRkRMRWxCUVc1Q08wRkJRVUVzUzBGQmQwSklMRWxCUVZGRkxFbEJRVW9zU1VGQlVVRXNSVUZCUlVNc1JVRkJSU3hKUVVGSlFTeEhRVUZITEVOQlFVTXNTVUZCU1dsQ0xFVkJRVVZ5UWl4RlFVRkZReXhGUVVGRlNTeEhRVUZGVUN4RlFVRkZTeXhGUVVGRkxFOUJRVTlLTEVWQlFVVkVMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXQxUWl4RlFVRkZMRlZCUVZWc1FpeERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBUQ3hGUVVGRkxFdEJRVXQxUWl4RlFVRkZMRVZCUVVVc1QwRkJUMmhDTEVkQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVMjFDTEVWQlFVVjBRaXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZEWlN4RlFVRkZaaXhEUVVGRExFVkJRVVVzVFVGQlRTeEpRVUZKTEUxQlFVMHNhVUpCUVdsQ1FTeERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRkVUlzUlVGQlJYWkNMRVZCUVVWS0xFVkJRVVVzUTBGQlF5eFBRVUZuUWl4UFFVRlBTU3hIUVVGcVFpeFRRVUZ0UWtFc1JVRkJSU3hQUVVGUFNpeERRVUZETEVWQlFVVkpMRVZCUVVWS0xFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTTBRaXhIUVVGRmVFSXNSVUZCUlN4RFFVRkRMRWRCUVdFc1QwRkJUMEVzUjBGQmFrSXNVMEZCYlVJc1RVRkJUU3hKUVVGSkxFMUJRVTBzYVVKQlFXbENRU3hEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUZVVJc1IwRkJSWHBDTEVWQlFVVXNRMEZCUXl4SFFVRmxMRTlCUVU5QkxFZEJRVzVDTEZkQlFYRkNMRTFCUVUwc1NVRkJTU3hOUVVGTkxHMUNRVUZ0UWtFc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV6QkNMRVZCUVVVeFFpeEZRVUZGTEVOQlFVTXNSMEZCWVN4UFFVRlBRU3hIUVVGcVFpeFRRVUZ0UWl4TlFVRk5MRWxCUVVrc1RVRkJUU3hwUWtGQmFVSkJMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWt5UWl4RlFVRkZMRVZCUVVWRExFVkJRVVVzUlVGQlJVTXNSMEZCUlN4RlFVRkZReXhIUVVGRkxFVkJRVVZFTEVkQlFVVkZMRWRCUVVVc1JVRkJSVVlzUjBGQlJVY3NSMEZCUlN4TFFVRkxMRk5CUVZORExFZEJRVVZxUXl4RlFVRkZTaXhGUVVGRkxFTkJRVU1zVDBGQlR5eEpRVUZKTEUxQlFVMUJMRVZCUVVVc1EwRkJReXhGUVVGRkxFdEJRVXRKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRk5CUVZOclF5eEhRVUZGYkVNc1JVRkJSVW9zUlVGQlJVTXNSVUZCUlN4RFFVRkRMRWxCUVVsRExFVkJRVVZHTEVWQlFVVkpMRVZCUVVVc1QwRkJUeXhQUVVGUFJpeEhRVUZITEVWQlFVVkZMRVZCUVVWcFF5eEhRVUZGY0VNc1JVRkJSVU1zUTBGQlF5eEZRVUZGUlN4RFFVRkRMRU5CUVVNc1UwRkJVMjFETEVkQlFVVnVReXhGUVVGRlNpeEZRVUZGUXl4RlFVRkZReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVdEZMRVZCUVVWS0xFVkJRVVVzUlVGQlJVa3NSVUZCUlVvc1JVRkJSU3hGUVVGRkxFZEJRVWRKTEVWQlFVVklMRVZCUVVWRExFVkJRVVZCTEVWQlFVVkZMRVZCUVVWSUxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTjFReXhIUVVGRmNFTXNSVUZCUlVvc1JVRkJSU3hEUVVGRExFbEJRVWxETEVWQlFVVkRMRVZCUVVWRExFVkJRVVZGTEVWQlFVVkZMRVZCUVVWRExFVkJRVVZTTEVWQlFVVXNUVUZCVFZNc1IwRkJSVVFzUlVGQlJTeFBRVUZQUlN4SFFVRkZMRVZCUVVVc1IwRkJSMFFzUzBGQlNVd3NSVUZCUlN4UFFVRlBMRTFCUVUwc01rSkJRVEpDTEVkQlFVZHBRaXhGUVVGRmFrSXNRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTVk1zUjBGQlJVb3NSMEZCUlVFc1IwRkJSWGRDTEVkQlFVVnVRaXhIUVVGRlRDeEhRVUZGU1N4SFFVRkZSU3hIUVVGRmQwSXNSMEZCUlRGQ0xFZEJRVVZ4UWl4SFFVRkZReXhIUVVGRlJpeEhRVUZGTjBJc1JVRkJSU3hOUVVGTkxFVkJRVVZaTEVkQlFVVXNSVUZCUlN4VFFVRlRXaXhIUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEZOQlFWTkJMRWRCUVVVc1EwRkJReXhQUVVGUGEwTXNSMEZCUld4RExFZEJRVVVzVTBGQlV5eEZRVUZGTEVWQlFVVXNSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSVUVzUlVGQlF5eERRVUZETEVWQlFVVXNVMEZCVTBFc1IwRkJSVW9zUjBGQlJTeERRVUZETEVsQlFVbERMRWRCUVVWSExFZEJRVVVzVDBGQlQwWXNSMEZCUlN4RFFVRkRMRVZCUVVWRExFZEJRVVVzUlVGQlJTeEhRVUZIUml4SlFVRkhSQ3hIUVVGRkxFMUJRVTBzUTBGQlEwa3NSMEZCUlN4TlFVRk5MRU5CUVVNc1JVRkJSU3hSUVVGUlF5eEhRVUZGTEVWQlFVVkJMRWRCUVVWS0xFZEJRVVZKTEV0QlFVbElMRWRCUVVWRExFVkJRVU1zUjBGQlIwUXNSMEZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRlFTeEhRVUZGUXl4RlFVRkRMRVZCUVVVc1MwRkJTME1zUjBGQlJVTXNSVUZCUXl4RFFVRkRMRWRCUVVkQkxFZEJRVVVzUjBGQlIwd3NTVUZCUnl4SFFVRkhSeXhMUVVGSkxFOUJRVTlFTEVWQlFVTXNSVUZCUlVVc1JVRkJSU3hOUVVGTlZ5eEhRVUZGTEV0QlFVdEJMRWRCUVVVc1JVRkJSU3hGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMYTBJc1JVRkJReXhEUVVGRExFVkJRVVUxUWl4RlFVRkZMRk5CUVZORUxFZEJRVVVzUTBGQlF5eFBRVUZYUVN4SFFVRkZMRTlCUVU0c1IwRkJaMEpCTEVkQlFVVXNTMEZCVGl4RlFVRlRMRU5CUVVNc1MwRkJTMEVzUjBGQlJTeExRVUZMTEVkQlFVZEJMRWRCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUzBGQlMwRXNSMEZCUlN4TFFVRkxOa0lzUjBGQlJTeEhRVUZITEV0QlFVc3NUVUZCVFRkQ0xFZEJRVVVzUjBGQlJ6WkNMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVVZzUWl4RlFVRkRMRVZCUVVWaUxFVkJRVVZYTEVkQlFVVnZRaXhIUVVGRmFFTXNSVUZCUlN4RlFVRkZZU3hIUVVGRlFTeEpRVUZITEVsQlFVbGlMRWRCUVVjc1IwRkJSMU1zUjBGQlJTeEZRVUZGVUN4RlFVRkZMRVZCUVVVc1UwRkJVME1zUjBGQlJTeERRVUZETEU5QlFVOUJMRWRCUVVVc1VVRkJVU3hGUVVGRlFTeEhRVUZGTEV0QlFVc3NSMEZCUnl4RlFVRkZRU3hIUVVGRkxFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNTMEZCU3l4SFFVRkhMRVZCUVVVc1MwRkJTMEVzUjBGQlJTeE5RVUZOTEVOQlFVTXNSVUZCUlN4TFFVRkxMRWRCUVVjc1EwRkJReXhGUVVGRldTeEZRVUZETEVkQlFVZFVMRWRCUVVjc1IwRkJSMFlzUlVGQlJTeEhRVUZITEVWQlFVVkJMRVZCUVVVc1IwRkJSeXhGUVVGRlFTeEZRVUZGTEV0QlFVc3NVMEZCVXl4RlFVRkZMRVZCUVVVc1VVRkJVU3hKUVVGSlJTeEZRVUZGTEVWQlFVVXNTMEZCU3l4RFFVRkRMRWxCUVVsVkxFZEJRVVZpTEVWQlFVVXNUVUZCVFN4NVFrRkJlVUlzUlVGQlJVZ3NSVUZCUlU4c1JVRkJSU3hQUVVGUExFVkJRVVZPTEVWQlFVVk5MRVZCUVVVc1MwRkJTeXhGUVVGRlNDeEZRVUZGYTBNc1IwRkJSWEpETEVWQlFVVTJRaXhGUVVGRlF5eEZRVUZGWml4SFFVRkZMRTFCUVUwc1JVRkJSV1FzUlVGQlJXTXNSMEZCUlN4TlFVRk5XaXhGUVVGRkxFdEJRVXRCTEVWQlFVVXNSVUZCUlN4RlFVRkZSU3hGUVVGRlJpeEZRVUZGTEVkQlFVY3NVMEZCVXl4RlFVRkZMRTFCUVUwc1EwRkJReXhKUVVGSllTeEhRVUZGYUVJc1JVRkJSVWNzUlVGQlJTeExRVUZMTEU5QlFVOW5RaXhGUVVGRmFrSXNRMEZCUXl4SlFVRkpSeXhIUVVGSExFZEJRVWRHTEVWQlFVVXNSMEZCUnl4RlFVRkZRU3hGUVVGRkxFZEJRVWNzUlVGQlJVRXNSVUZCUlN4TFFVRkxMRk5CUVZNc1JVRkJSU3hGUVVGRkxGRkJRVkVzU1VGQlNVVXNSVUZCUlN4SFFVRkhSQ3hGUVVGRkxGTkJRVk5PTEVkQlFVVkZMRWRCUVVWRExFZEJRVVVzUTBGQlF5eEpRVUZKUnl4SFFVRkZhVUlzUjBGQlJYQkNMRXRCUVVsbExFZEJRVVZXTEVkQlFVVmxMRWRCUVVVc1MwRkJTMkVzUjBGQlJTeFBRVUZQT1VJc1IwRkJSV1VzUlVGQlJXcENMRU5CUVVNc1JVRkJSV3RETEVsQlFVY3NSMEZCUjJwRExFVkJRVVVzUzBGQlMwWXNTMEZCU1N4VFFVRlRMRVZCUVVVc1JVRkJSVWtzUlVGQlJTeEhRVUZITEVWQlFVVXJRaXhKUVVGSGFrTXNSVUZCUlN4TFFVRkxSaXhIUVVGRkxFZEJRVWNzVTBGQlV5eEZRVUZGU1N4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzVDBGQlQxQXNSMEZCUlN4RFFVRkRVU3hIUVVGRlJpeEhRVUZGTEUxQlFVMUtMRVZCUVVNc1JVRkJSWEZDTEVkQlFVVXNRMEZCUTJFc1IwRkJSVU1zUjBGQlJTeEpRVUZKT1VJc1EwRkJReXhGUVVGRkxFMUJRVTByUWl4SFFVRkZMRWRCUVVkeVF5eEZRVUZGTEVkQlFVY3NSVUZCUlc5RExFZEJRVVVzU1VGQlNUTkNMRVZCUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZVQ3hEUVVGRExFVkJRVVVzUzBGQlN6dEJRVUZCTEVOQlFVa3NRMEZCUXl4RFFVRkRMRk5CUVZOelF5eEhRVUZGY2tNc1JVRkJSVW9zUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVRkJMRVZCUVVzc2NVSkJRWEZDY1VNc1IwRkJSU3hKUVVGSkxFVkJRVVVzUlVGQlJUdEJRVUZCTzBGQlFVRXNSVUZCVDBjc1IwRkJSWEJETEVWQlFVVktMRU5CUVVNc1JVRkJSVHRCUVVGQk8wRkJRVUVzUjBGQlVVTXNSVUZCUlVRc1JVRkJSU3hUUVVGaFF5eEZRVUZGTEZOQlFVNHNSVUZCWVR0QlFVRkJPMEZCUVVFc1JVRkJaMEpCTEVWQlFVVXNRMEZCUXl4RlFVRkZPMEZCUVVFN1FVRkJRU3hGUVVGelEwRXNSVUZCUlN4TFFVRkxMRWxCUVVrc1IwRkJSenRCUVVGQkxFTkJRVWtzUlVGQlJTeExRVUZMTEVWQlFVVXNSVUZCUlN4SlFVRkpRU3hEUVVGRExFTkJRVU1zVTBGQlUzbERMRWRCUVVWMFF5eEZRVUZGTEVOQlFVTXNUMEZCWjBKQkxFVkJRVVVzVVVGQldDeFBRVUZwUWtFc1JVRkJSU3hOUVVGTkxFTkJRVU5CTEVWQlFVVXNUMEZCVHl4SlFVRkpMRWRCUVVkQkxFVkJRVVVzVjBGQlZ5eEpRVUZKTEVkQlFVZEJMRVZCUVVVc1ZVRkJWU3hKUVVGSkxFZEJRVWRCTEVWQlFVVXNVVUZCVVN4SlFVRkpMRWRCUVVkQkxFVkJRVVVzVDBGQlR5eEpRVUZKTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGRExGTkJRVk4xUXl4SlFVRkhMRU5CUVVNc1VVRkJVWFpETEVWQlFVVXNRMEZCUXl4RlFVRkZMRTFCUVUwc1MwRkJTeXhUUVVGVExFVkJRVVZLTEVWQlFVVkpMRVZCUVVVc1QwRkJUMGdzUlVGQlJTeEZRVUZGUVN4RlFVRkZSQ3hGUVVGRlF5eEhRVUZITEVWQlFVVjVRaXhGUVVGRmRFSXNSVUZCUlVnc1EwRkJReXhEUVVGRExFVkJRVVVzVDBGQlQwTXNSVUZCUlN4VFFVRlRSQ3hGUVVGRlF5eEZRVUZGTEVOQlFVTXNVVUZCVVVNc1JVRkJSVVVzUlVGQlJTeEpRVUZKTEUxQlFVMU1MRU5CUVVNc1JVRkJSVTBzUlVGQlJTeEZRVUZGUVN4RlFVRkZUaXhGUVVGRlRTeEhRVUZITEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVWSUxFVkJRVVZ0UWl4RlFVRkZiRUlzUlVGQlJVVXNRMEZCUXl4RlFVRkZMRVZCUVVWTUxFVkJRVVZETEVOQlFVTXNSVUZCUlVNc1EwRkJReXhIUVVGSExFOUJRVThzVDBGQlQwRXNSVUZCUlVVc1JVRkJSVU1zUTBGQlF5eEZRVUZGU0N4RlFVRkZMRTFCUVUxRUxFVkJRVVZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRTlCUVU5dFFpeEZRVUZGVml4RlFVRkZWaXhGUVVGRlJ5eERRVUZETEVWQlFVVkdMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUZVVNc1NVRkJSeXhEUVVGRExFbEJRVWw0UXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hOUVVGTkxFdEJRVXNzVTBGQlV5eEZRVUZGTEVkQlFVOUJMRVZCUVVVc1UwRkJUaXhGUVVGaExFMUJRVTBzU1VGQlNTeE5RVUZOTEc5RFFVRnZReXhGUVVGRkxFbEJRVWxLTEVWQlFVVkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFOUJRVTk1UWl4SFFVRkZOMElzUTBGQlF5eEZRVUZGTWtNc1IwRkJSU3hOUVVGTkxFdEJRVXQyUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hUUVVGVFFTeEZRVUZGTEVOQlFVTXNUMEZCVDBvc1JVRkJSU3hOUVVGTkxFdEJRVXRKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVGVVTXNTVUZCUnl4RFFVRkRMRWxCUVVsNlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TlFVRk5MRXRCUVVzc1UwRkJVeXhGUVVGRlNpeEZRVUZGU1N4RlFVRkZMRTlCUVU4c1IwRkJUMG9zU1VGQlNpeEZRVUZOTEU5QlFVODRReXhIUVVGRkxHbENRVUZwUWl4RlFVRkZMRkZCUVZFM1F5eEZRVUZGTEVWQlFVVkJMRVZCUVVWRUxFVkJRVVZETEVkQlFVY3NSVUZCUlhsQ0xFVkJRVVYwUWl4RlFVRkZTQ3hEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQUXl4RlFVRkZMRk5CUVZOR0xFVkJRVVZETEVWQlFVVXNRMEZCUXl4UlFVRlJReXhGUVVGRlF5eEZRVUZGTEVWQlFVVkJMRVZCUVVWRExFVkJRVVVzVDBGQlQwUXNSMEZCUnl4RlFVRkZMRWxCUVVsRUxFVkJRVVZ2UWl4RlFVRkZiRUlzUlVGQlJVUXNRMEZCUXl4RlFVRkZMRVZCUVVWSUxFVkJRVVZETEVOQlFVTXNSVUZCUlVNc1EwRkJReXhIUVVGSExFOUJRVThzVDBGQlQwRXNSVUZCUlN4UFFVRlBRU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTTJReXhIUVVGRk0wTXNSVUZCUlVvc1JVRkJSU3hEUVVGRExFOUJRVTluUkN4SFFVRkZOVU1zUlVGQlJVb3NRMEZCUXl4RlFVRkZMRWRCUVVkcFJDeEhRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVFJDeEhRVUZGTlVNc1JVRkJSVW9zUlVGQlJTeERRVUZETEU5QlFVOHdRaXhGUVVGRmRFSXNRMEZCUXl4RlFVRkZjMElzUlVGQlJURkNMRU5CUVVNc1JVRkJSVFJETEVkQlFVVjRReXhGUVVGRlNpeEZRVUZGTEV0QlFVdEpMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzVTBGQlUwRXNSVUZCUlVvc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlEwa3NRMEZCUXl4RlFVRkZMRTlCUVU5S0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRhMFFzUjBGQlJUbERMRVZCUVVVc1EwRkJRekJDTEVWQlFVVXhRaXhEUVVGRExFVkJRVVVzU1VGQlNVb3NSVUZCUlN4SlFVRkpTU3hGUVVGRkxFbEJRVWtzVDBGQlQwWXNSVUZCUlN4VFFVRlRSQ3hGUVVGRlF5eEZRVUZGTEVOQlFVTXNTVUZCU1VNc1JVRkJSVVFzUlVGQlJVVXNSVUZCUlN4UFFVRlBReXhGUVVGRlNpeEZRVUZGTEUxQlFVMURMRVZCUVVWRExFTkJRVU1zUlVGQlJTeFBRVUZQUlN4SlFVRkpSQ3hGUVVGRlVTeEZRVUZGVkN4RlFVRkZSU3hEUVVGRExFVkJRVVZOTEVWQlFVVlVMRVZCUVVWR0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRiVVFzUjBGQlJTOURMRVZCUVVWS0xFVkJRVVVzUlVGQlJTeFRRVUZUU1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhGUVVGRlFTeGhRVUZoTEZGQlFWRXNUVUZCVFN4SlFVRkpMRTFCUVUwc2FVSkJRV2xDUVN4RFFVRkRMRVZCUVVVc1VVRkJVVW9zUlVGQlJUQkRMRWRCUVVWMFF5eERRVUZETEVWQlFVVklMRVZCUVVVc1JVRkJSVUVzUlVGQlJVUXNSVUZCUlN4UFFVRlBReXhKUVVGSkxFTkJRVU1zU1VGQlNVTXNSVUZCUlVZc1JVRkJSU3hQUVVGUFF5eERRVUZETEVWQlFVVXNSMEZCVTBNc1NVRkJUaXhMUVVGbFFTeEpRVUZPTEV0QlFXVkJMRWxCUVU0c1MwRkJaVUVzU1VGQlRpeEpRVUZSTEUxQlFVMHNTVUZCU1N4TlFVRk5MRFJDUVVFMFFrRXNSVUZCUlN4TlFVRk5SU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZGUVN4RFFVRkRMRVZCUVVVc1ZVRkJWU3hSUVVGUkxFVkJRVVYzUWl4SFFVRkZOVUlzUTBGQlF5eEZRVUZGUVN4RlFVRkZMRVZCUVVVc1NVRkJTVU1zUlVGQlJTeFRRVUZUUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhQUVVGUExFOUJRVTlCTEVWQlFVVXNUMEZCVHl4SlFVRkpjME1zUjBGQlJYUkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVZCTEVOQlFVTXNSVUZCUlVRc1JVRkJSU3hIUVVGSFF5eEZRVUZGTEU5QlFVOUdMRVZCUVVVc1UwRkJVMFVzUlVGQlJVWXNSVUZCUlN4RFFVRkRMRWxCUVVsSExFVkJRVVZLTEVWQlFVVXNTMEZCUzBjc1JVRkJSU3hOUVVGTlJpeERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZIVEN4SFFVRkhRU3hIUVVGSFN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4SlFVRkpReXhGUVVGRlJDeEZRVUZGTEVOQlFVTXNSVUZCUld0Q0xFZEJRVVZzUWl4RlFVRkZUQ3hEUVVGRExFVkJRVVVzVDBGQlQxa3NSVUZCUlZZc1JVRkJSVWtzUlVGQlJTeFBRVUZQYVVJc1JVRkJReXhEUVVGRExFTkJRVU1zVDBGQlQxb3NSVUZCUlZRc1JVRkJSU3d5UWtGQk1rSkhMRVZCUVVVc1QwRkJUeXhSUVVGUlJpeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBVU3hGUVVGRlZDeEZRVUZGUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV6aERMRWRCUVVVM1F5eEZRVUZGTEVOQlFVTXNUMEZCVDBZc1JVRkJSU3hUUVVGVFJpeEZRVUZGUXl4RlFVRkZMRU5CUVVNc1QwRkJUMWNzUlVGQlJWZ3NSVUZCUlVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXdReXhIUVVGRk1VTXNSVUZCUlN4RFFVRkRMRTlCUVU5R0xFVkJRVVVzVTBGQlUwWXNSVUZCUlVNc1JVRkJSU3hEUVVGRExFOUJRVTlWTEVWQlFVVldMRVZCUVVWSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRaMFFzUjBGQlJXaEVMRVZCUVVVc1EwRkJReXhIUVVGSFpTeEZRVUZGWml4RFFVRkRMRVZCUVVVc1QwRkJUMFlzUlVGQlJTeFRRVUZUUml4RlFVRkZReXhGUVVGRkxFTkJRVU1zU1VGQlNVTXNSVUZCUlVVc1JVRkJSU3hGUVVGRlNpeEZRVUZGUXl4RFFVRkRMRVZCUVVVc1QwRkJUME1zUlVGQlJTeE5RVUZOUkN4RlFVRkZReXhGUVVGRkxFMUJRVTBzUjBGQlIwRXNRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJZU3hQUVVGUFJTeEhRVUZxUWl4VFFVRnRRaXhQUVVGUFowUXNSMEZCUlVZc1IwRkJSVGxETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVkQkxHRkJRV0VzVDBGQlR5eFBRVUZQWjBRc1IwRkJSVVFzUjBGQlJTOURMRU5CUVVNc1EwRkJReXhGUVVGRkxFMUJRVTBzU1VGQlNTeE5RVUZOTEc5RFFVRnZRMEVzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVTJsRUxFZEJRVVZxUkN4RlFVRkZMRU5CUVVNc1QwRkJUM05DTEVWQlFVVjBRaXhEUVVGRExFVkJRVVZHTEVWQlFVVXNVMEZCVTBZc1JVRkJSVU1zUlVGQlJTeERRVUZETEVsQlFVbERMRVZCUVVWRkxFVkJRVVVzUlVGQlJVb3NSVUZCUlVNc1EwRkJReXhGUVVGRlJTeEZRVUZGU0N4RlFVRkZMRTFCUVUxRExFVkJRVVZETEVWQlFVVXNTMEZCU3l4RlFVRkZMRTlCUVU5QkxFVkJRVVVzVDBGQlQxTXNSVUZCUlZZc1JVRkJSU3hSUVVGUlJTeEZRVUZGTEVkQlFVY3NSVUZCUlZNc1JVRkJSVmdzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVM0ZFTEVkQlFVZHNSQ3hGUVVGRkxFTkJRVU1zVDBGQlQzbENMRWRCUVVWNlFpeERRVUZETEVWQlFVVkdMRVZCUVVVc1UwRkJVMFlzUlVGQlJVTXNSVUZCUlN4RFFVRkRMRWxCUVVsRExFVkJRVVY1UWl4RlFVRkZNMElzUlVGQlJVTXNRMEZCUXl4RlFVRkZMRTlCUVU5QkxFVkJRVVZFTEVWQlFVVXNVVUZCVVVrc1JVRkJSVVlzUTBGQlF5eEZRVUZGVlN4RlFVRkZXQ3hGUVVGRkxFVkJRVVZETEVOQlFVTXNSVUZCUlZNc1JVRkJSVllzUlVGQlJTdzJRa0ZCTmtKSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRiVVFzUjBGQlIyNUVMRVZCUVVWS0xFVkJRVVVzUTBGQlF5eFZRVUZWTEU5QlFVOHNTVUZCU1VFc1JVRkJSVWtzUlVGQlJVRXNSVUZCUlN4UlFVRlJMRWxCUVVsSUxFVkJRVVZETEVWQlFVVXNVMEZCVTBVc1JVRkJSVVlzUlVGQlJTeERRVUZETEU5QlFVOUVMRVZCUVVVc1JVRkJSVVFzUlVGQlJTeEZRVUZGTEVWQlFVVkRMRVZCUVVVc1JVRkJSVWNzUlVGQlJVWXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hQUVVGUFJTeEZRVUZGU0N4RlFVRkZMRXRCUVV0SExFTkJRVU1zUlVGQlJVZ3NRMEZCUXl4RFFVRkRMRk5CUVZOMVJDeEpRVUZKTEVOQlFVTXNUMEZCVDFZc1IwRkJSU3h2UWtGQmIwSXNRMEZCUXl4RFFVRkRNME1zUlVGQlJTeE5RVUZOTEZOQlFWTkRMRVZCUVVVc1EwRkJReXhIUVVGaExFOUJRVTlCTEVkQlFXcENMRlZCUVc5Q0xFTkJRVU5wUWl4RlFVRkZha0lzUTBGQlF5eEZRVUZGTEUxQlFVMHNTVUZCU1N4TlFVRk5MQ3RFUVVFclJDeEZRVUZGTEVsQlFVbEtMRVZCUVVWRExFVkJRVVVzUzBGQlN5eExRVUZMZDBRc1JVRkJSU3hGUVVGRkxFVkJRVVZ5UkN4RlFVRkZMRU5CUVVNc1JVRkJSU3hQUVVGUFNpeEZRVUZGUXl4RlFVRkZMRTlCUVU4c1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRVRXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRYZENMRVZCUVVWeVFpeEZRVUZGU0N4RlFVRkZMRkZCUVZFc1JVRkJSU3hUUVVGVFFTeEZRVUZGTEZGQlFWRXNSVUZCUlN4UFFVRlBkVUlzUlVGQlJYQkNMRU5CUVVNc1JVRkJSVW9zUTBGQlF5eEZRVUZGUnl4RlFVRkZMRk5CUVZNc1UwRkJVME1zUlVGQlJTeERRVUZETEVsQlFVbEtMRVZCUVVVc1MwRkJTeXhOUVVGTlNTeERRVUZETEVWQlFVVXNSMEZCUjBvc1JVRkJSU3hQUVVGUExFOUJRVTlCTEVWQlFVVXNUVUZCVFN4SlFVRkpReXhGUVVGRmQwTXNSMEZCUlhKRExFVkJRVVZLTEVOQlFVTXNSVUZCUlVVc1JVRkJSU3hKUVVGSkxFMUJRVTFFTEVOQlFVTXNSVUZCUlN4TlFVRk5ReXhGUVVGRkxFdEJRVXNzYVVKQlFXbENRU3hGUVVGRkxFOUJRVTlHTEVWQlFVVkZMRU5CUVVNc1JVRkJSVU1zUlVGQlJTeFBRVUZQTEZOQlFWTkRMRVZCUVVWS0xFVkJRVVVzUTBGQlF5eFBRVUZQTEV0QlFVc3NUVUZCVFN4VFFVRlRReXhGUVVGRkxFTkJRVU1zVDBGQlQwY3NSVUZCUlVnc1EwRkJReXhGUVVGRlowUXNSMEZCUldoRUxFTkJRVU1zUlVGQlJUWkRMRWRCUVVVNVF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVWSExFVkJRVVVzUjBGQlJ5eFRRVUZUUXl4RlFVRkZMRU5CUVVNc1QwRkJUM2xETEVkQlFVVXNTMEZCUzNwRExFTkJRVU1zUTBGQlF5eEZRVUZGUkN4RlFVRkZMRXRCUVVzc1UwRkJVME1zUlVGQlJTeERRVUZETEU5QlFVOHNTMEZCU3l4TFFVRkxRU3hGUVVGRlFTeERRVUZETEVOQlFVTXNSVUZCUlVRc1JVRkJSU3hMUVVGTExGTkJRVk5ETEVWQlFVVktMRVZCUVVVc1EwRkJReXhQUVVGUE5FTXNSMEZCUlhoRExFVkJRVVVzUzBGQlMwb3NSVUZCUlN4VFFVRlRTU3hGUVVGRlNpeEZRVUZGTEVOQlFVTXNUMEZCVDBFc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJVY3NSVUZCUlN4TFFVRkxMRk5CUVZORExFVkJRVVVzUTBGQlF5eFBRVUZQUVN4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRlJDeEZRVUZGTEV0QlFVc3NVMEZCVTBNc1JVRkJSU3hEUVVGRExFOUJRVTl6UWl4RlFVRkZkRUlzUTBGQlF5eEZRVUZGZFVNc1IwRkJSU3hMUVVGTGRrTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1UwRkJVMEVzUlVGQlJTeERRVUZETEU5QlFVOUJMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGUkN4RlFVRkZMRXRCUVVzc1ZVRkJWU3hEUVVGRExFbEJRVWxETEVWQlFVVXNTMEZCU3l4UFFVRlBSaXhGUVVGRkxGTkJRVk5HTEVWQlFVVkRMRVZCUVVVc1EwRkJReXhSUVVGUlF5eEZRVUZGTEVOQlFVTXNSVUZCUlVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUjBGQlJ5eEZRVUZGUVN4RlFVRkZiVUlzUlVGQlJXeENMRVZCUVVVc1JVRkJSVW9zUlVGQlJVTXNRMEZCUXl4RlFVRkZSU3hEUVVGRExFZEJRVWNzVDBGQlR5eFBRVUZQYlVJc1JVRkJSVllzUlVGQlJWZ3NSVUZCUlVNc1EwRkJReXhGUVVGRlF5eERRVUZETEVWQlFVVXNSMEZCUjBZc1NVRkJTVVVzUlVGQlJTeE5RVUZOTEUxQlFVMHNTVUZCU1N4TlFVRk5MR2RKUVVGblNTeEZRVUZGUml4RlFVRkZSU3hGUVVGRkxFMUJRVTFFTEVWQlFVVXNTMEZCUzBNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlVFc1JVRkJSU3hSUVVGUkxGTkJRVk5ETEVWQlFVVXNRMEZCUXl4UFFVRlBNRUlzUlVGQlJURkNMRU5CUVVNc1JVRkJSU3hMUVVGTExFbEJRVWtzVTBGQlUwb3NSVUZCUlN4RFFVRkRMRWRCUVVjc1UwRkJVMGtzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUTJkQ0xFVkJRVVZvUWl4RFFVRkRMRVZCUVVVc1RVRkJUU3hKUVVGSkxFMUJRVTBzYVVKQlFXbENRU3hEUVVGRExFTkJRVU1zUlVGQlJVb3NRMEZCUXl4RlFVRkZRU3hGUVVGRkxFOUJRVThzUTBGQlF6aENMRVZCUVVVNVFpeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRkZCUVZGRExFVkJRVVZFTEVWQlFVVXNRMEZCUXl4RlFVRkZSU3hGUVVGRkxFVkJRVVZCTEVWQlFVVkdMRVZCUVVVc1QwRkJUMFVzU1VGQlNUUkNMRVZCUVVVNVFpeEZRVUZGUlN4RFFVRkRMRU5CUVVNc1JVRkJSVVFzUjBGQlIwY3NSVUZCUlVvc1JVRkJSVVVzUTBGQlF5eEZRVUZGTEU5QlFVOUVMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVkZMRVZCUVVVc1NVRkJTU3hWUVVGVkxFTkJRVU1zVDBGQlR5eExRVUZMTEZGQlFWRXNSVUZCUlN4RFFVRkRMRVZCUVVWQkxFVkJRVVVzVFVGQlRTeFRRVUZUUXl4RlFVRkZTaXhGUVVGRkxFTkJRVU1zU1VGQlNVTXNSVUZCUlN4TFFVRkxMRTlCUVU4c1ZVRkJWU3hQUVVGUExFbEJRVWxFTEVWQlFVVkpMRWRCUVVkM1FpeEhRVUZGZUVJc1EwRkJReXhGUVVGRmQwSXNSMEZCUlRWQ0xFTkJRVU1zUlVGQlJVVXNSVUZCUlN4VFFVRlRRU3hGUVVGRlF5eEZRVUZGTEVOQlFVTXNVVUZCVVVVc1JVRkJSU3hEUVVGRExFVkJRVVZETEVWQlFVVXNUMEZCVDJsQ0xFVkJRVVVzVDBGQlQyaENMRWRCUVVVc1JVRkJSVUVzUjBGQlJVZ3NSVUZCUlVjc1NVRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlIyZENMRVZCUVVWRUxFVkJRVVZvUWl4RlFVRkZUQ3hGUVVGRkxFVkJRVVZETEVWQlFVVkRMRU5CUVVNc1JVRkJSVzlDTEVOQlFVTXNSVUZCUlN4RFFVRkRha0lzUlVGQlJTeFBRVUZQTEU5QlFVOXBRaXhGUVVGRmNFSXNSVUZCUlVjc1JVRkJSU3hOUVVGTlJDeEZRVUZGTEV0QlFVdERMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUzBGQlMwTXNSMEZCUlZBc1NVRkJTWFZDTEVWQlFVVkVMRVZCUVVWb1FpeEZRVUZGVEN4RlFVRkZMRVZCUVVWRExFVkJRVVZETEVOQlFVTXNSVUZCUlc5Q0xFTkJRVU1zUlVGQlJXcENMRVZCUVVVc1VVRkJVVU1zU1VGQlJ5eEZRVUZGU2l4RlFVRkZSeXhGUVVGRkxFMUJRVTFFTEVWQlFVVXNTMEZCUzBNc1JVRkJSU3hMUVVGTExFVkJRVVVzVDBGQlQyZENMRVZCUVVWV0xFVkJRVVZVTEVWQlFVVkZMRU5CUVVNc1JVRkJSV3RDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSWEJDTEVWQlFVVXNUMEZCVHl4VFFVRlRReXhGUVVGRkxFTkJRVU1zVDBGQlR5eExRVUZMTEVsQlFVa3NWVUZCVlN4RFFVRkRMRTlCUVU5QkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVkVMRVZCUVVVc1QwRkJUeXhUUVVGVFF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4TFFVRkxMRTFCUVUwc1JVRkJSVUVzUTBGQlF5eERRVUZETEVWQlFVVkVMRVZCUVVVc1VVRkJVU3hUUVVGVFF5eEZRVUZGTEVOQlFVTXNUMEZCVDNkRExFZEJRVVVzUzBGQlN5eE5RVUZOZUVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUzBGQlN5eEZRVUZGTEZOQlFWTkJMRVZCUVVWS0xFVkJRVVVzUTBGQlF5eFBRVUZQU1N4RlFVRkZMRTlCUVU5S0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlVjc1JVRkJSU3hKUVVGSkxGTkJRVk5ETEVWQlFVVXNRMEZCUTNsQ0xFZEJRVVY2UWl4RFFVRkRMRVZCUVVVc1NVRkJTVW9zUlVGQlJTeExRVUZMTEU5QlFVOUZMRVZCUVVVc1UwRkJVMFFzUlVGQlJVTXNSVUZCUlN4RFFVRkRMRWxCUVVsRExFVkJRVVZJTEVWQlFVVXNSVUZCUlVNc1JVRkJSVU1zUTBGQlF5eEZRVUZGTEU5QlFVOURMRVZCUVVVc1QwRkJUMjFDTEVWQlFVVldMRVZCUVVWVUxFVkJRVVVzVFVGQlRVTXNSVUZCUlVRc1JVRkJSU3hMUVVGTExFTkJRVU1zUlVGQlJVRXNRMEZCUXl4RlFVRkZRU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGUVN4RlFVRkZMRlZCUVZVc1UwRkJVME1zUlVGQlJTeERRVUZEZVVJc1IwRkJSWHBDTEVOQlFVTXNSVUZCUlN4SlFVRkpTaXhGUVVGRkxFdEJRVXNzVDBGQlQwVXNSVUZCUlN4VFFVRlRSQ3hGUVVGRlF5eEZRVUZGTEVOQlFVTXNTVUZCU1VNc1JVRkJSVWdzUlVGQlJTeE5RVUZOU1N4RlFVRkZTQ3hGUVVGRkxFMUJRVTFETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1QwRkJUME1zUlVGQlJTeFBRVUZQVXl4RlFVRkZWaXhGUVVGRlJDeEZRVUZGTEU5QlFVOUZMRVZCUVVVc1MwRkJTeXhGUVVGRlFTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZRU3hGUVVGRkxFOUJRVThzVTBGQlUwTXNSVUZCUlVvc1JVRkJSU3hEUVVGRExFOUJRVTgyUWl4SFFVRkZla0lzUTBGQlF5eEZRVUZGZVVJc1IwRkJSVGRDTEVOQlFVTXNSVUZCUlN4TFFVRkxMRlZCUVZWSkxFTkJRVU1zUlVGQlJTeEpRVUZKU2l4RFFVRkRMRU5CUVVNc1JVRkJSVWNzUlVGQlJTeExRVUZMTEZOQlFWTkRMRVZCUVVVc1EwRkJReXhQUVVGUGRVTXNSMEZCUlN4TFFVRkxka01zUTBGQlF5eEZRVUZGTEVsQlFVa3NVMEZCVTBFc1JVRkJSU3hEUVVGRExFOUJRVTlCTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRlJDeEZRVUZGTEV0QlFVc3NWVUZCVlN4RFFVRkRMRTlCUVU5NVF5eEhRVUZGWXl4SFFVRkhMRXRCUVV0QkxFZEJRVWNzVTBGQlUzUkVMRVZCUVVWS0xFVkJRVVZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUVWNzUlVGQlJTeE5RVUZOU2l4RlFVRkZMRWxCUVVsRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlVVc1JVRkJSU3hMUVVGTExGTkJRVk5ETEVWQlFVVXNRMEZCUXl4UFFVRlBkME1zUjBGQlJXTXNSMEZCUnl4TFFVRkxRU3hIUVVGSExGTkJRVk14UkN4RlFVRkZReXhGUVVGRlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVV0RkxFVkJRVVVzVFVGQlRVZ3NSVUZCUlN4TlFVRk5SQ3hGUVVGRkxFbEJRVWxGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVU1zUlVGQlJTeE5RVUZOTEZOQlFWTkRMRVZCUVVVc1EwRkJReXhQUVVGUE1rTXNSMEZCUlN4TFFVRkxNME1zUTBGQlF5eERRVUZETEVWQlFVVkVMRVZCUVVVc1QwRkJUeXhUUVVGVFF5eEZRVUZGTEVOQlFVTXNUMEZCVHpSRExFZEJRVVVzUzBGQlN6VkRMRU5CUVVNc1EwRkJReXhGUVVGRlJDeEZRVUZGTEZWQlFWVXNVMEZCVTBNc1JVRkJSU3hEUVVGRExFOUJRVThzUzBGQlN5eExRVUZMWjBRc1IwRkJSV2hFTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVWRUxFVkJRVVVzWTBGQll5eFRRVUZUUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhMUVVGTExFdEJRVXRwUkN4SFFVRkZha1FzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlVRc1JVRkJSU3hMUVVGTExGTkJRVk5ETEVWQlFVVXNRMEZCUTJkQ0xFVkJRVVZvUWl4RFFVRkRMRWxCUVVsQkxFVkJRVVVzUTBGQlEwRXNRMEZCUXl4SFFVRkhMRWxCUVVsS0xFVkJRVVVzUzBGQlN5eFBRVUZQUlN4RlFVRkZMRk5CUVZORUxFVkJRVVZETEVWQlFVVXNRMEZCUXl4SlFVRkpReXhGUVVGRlNDeEZRVUZGTEVWQlFVVkRMRVZCUVVWRExFTkJRVU1zUlVGQlJTeFBRVUZQUXl4RlFVRkZMRk5CUVZOQkxFVkJRVVVzVTBGQlUwTXNSMEZCUjBRc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJVRXNSVUZCUlN4VFFVRlRMRk5CUVZORExFVkJRVVVzUTBGQlF5eFBRVUZQTEV0QlFVc3NSMEZCUnpaRExFZEJRVVUzUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRlJDeEZRVUZGTEVkQlFVY3NVMEZCVTBNc1JVRkJSU3hEUVVGRExFOUJRVTkzUXl4SFFVRkZlRU1zUlVGQlJTeExRVUZMTEZOQlFWTkJMRVZCUVVWS0xFVkJRVVVzUTBGQlF5eFBRVUZQU1N4RlFVRkZTaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVkhMRVZCUVVVc1RVRkJUU3hUUVVGVFF5eEZRVUZGTEVOQlFVTXNTVUZCU1Vvc1JVRkJSU3hMUVVGTExFOUJRVTlGTEVWQlFVVXNVMEZCVTBRc1JVRkJSVU1zUlVGQlJTeERRVUZETEVsQlFVbERMRVZCUVVWSUxFVkJRVVVzUlVGQlJVTXNSVUZCUlVNc1EwRkJReXhGUVVGRkxFOUJRVTlETEVWQlFVVXNUMEZCVDIxQ0xFVkJRVVZzUWl4RlFVRkZSQ3hGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGUml4RlFVRkZSU3hGUVVGRkxFdEJRVXNzUlVGQlJVRXNRMEZCUXl4RlFVRkZRU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGUVN4RlFVRkZMRTlCUVU5QkxFVkJRVVVzUjBGQlIwRXNSVUZCUlN4TlFVRk5jVVFzUjBGQlIzSkVMRVZCUVVVc1IwRkJSemhETEVkQlFVVTVReXhGUVVGRkxHbENRVUZwUWl4RlFVRkZRU3hGUVVGRkxFZEJRVWRCTEVWQlFVVXNiMEpCUVc5Q0xFVkJRVVZCTEVWQlFVVXNUVUZCVFVFc1JVRkJSU3h4UWtGQmNVSXNSVUZCUlVFc1JVRkJSU3hQUVVGUFFTeEZRVUZGTEc5Q1FVRnZRaXhGUVVGRlFTeEZRVUZGTEUxQlFVMUJMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVkJMRVZCUVVVc1IwRkJSMEVzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSVUVzUlVGQlJTeEpRVUZKTEVsQlFVbDFSQ3hIUVVGSGVFUXNSVUZCUlN4VFFVRlRSU3hGUVVGRlNpeEZRVUZGTEVOQlFVTXNUMEZCVDFrc1JVRkJSVm9zUlVGQlJYbENMRVZCUVVWeVFpeEZRVUZGU2l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVV5UkN4SFFVRkhla1FzUlVGQlJTeFRRVUZUUlN4RlFVRkZTaXhGUVVGRkxFTkJRVU1zVDBGQlQwRXNSMEZCUjBrc1JVRkJSU3hQUVVGUFR5eEZRVUZGV0N4RlFVRkZMRzlDUVVGdlFpeEZRVUZGV1N4RlFVRkZXaXhGUVVGRkxFVkJRVVV5UWl4RlFVRkZka0lzUlVGQlJVb3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk5FUXNSMEZCUnpGRUxFVkJRVVVzVTBGQlUwVXNSVUZCUlVvc1JVRkJSU3hEUVVGRExFOUJRVTlaTEVWQlFVVlNMRVZCUVVVc1QwRkJUMEVzUlVGQlJTeE5RVUZOU2l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVY1UkN4SFFVRkhka1FzUlVGQlJTeFRRVUZUUlN4RlFVRkZTaXhGUVVGRkxFTkJRVU1zVDBGQlQwRXNSVUZCUlVrc1JVRkJSU3hQUVVGUFR5eEZRVUZGV0N4RlFVRkZMRXRCUVVzc1JVRkJSVmtzUlVGQlJWb3NSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRk5rUXNSMEZCUjFZc1IwRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eFRRVUZUTEVWQlFVVlhMRWRCUVVkWUxFZEJRVVVzVVVGQlVTeEZRVUZGTEV0QlFVc3NhVUpCUVdsQ0xFVkJRVVZaTEVkQlFVZGFMRWRCUVVVc1VVRkJVU3hGUVVGRkxFdEJRVXNzVlVGQlZTeEZRVUZGWVN4SFFVRkhZaXhIUVVGRkxGTkJRVk1zUlVGQlJTeExRVUZMTEd0Q1FVRnJRaXhGUVVGRll5eEhRVUZIWkN4SFFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExIRkNRVUZ4UWl4RlFVRkZaU3hIUVVGSFppeEhRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRmxCUVZrc1JVRkJSV2RDTEVkQlFVZHFRaXhIUVVGRkxFbEJRVWtzUlVGQlJXdENMRWRCUVVkc1FpeEhRVUZGTzBGQlFVRXNRMEZCU1N4RlFVRkZiVUlzUjBGQlIyNUNMRWRCUVVVN1FVRkJRU3hEUVVGTkxFVkJRVVZ2UWl4SFFVRkhla0lzUjBGQlJYZENMRWRCUVVkRUxFZEJRVWRFTEVWQlFVVXNSVUZCUlN4TFFVRkxMRk5CUVZNc1JVRkJSVWtzUjBGQlJ6RkNMRWRCUVVWNVFpeEhRVUZIWWl4RlFVRkZMRVZCUVVWMlJDeEZRVUZGTEVsQlFVa3dSQ3hIUVVGSE1VUXNSVUZCUlN4SlFVRkpNa01zUjBGQlJUTkRMRVZCUVVVc1NVRkJTWGxFTEVkQlFVZDZSQ3hGUVVGRkxFZEJRVWRwUlN4SFFVRkhha1VzUlVGQlJTeGxRVUZsTEZOQlFWTkZMRVZCUVVVc1EwRkJReXhKUVVGSlNpeEZRVUZGTEVOQlFVTXNSVUZCUlN4UlFVRlJReXhMUVVGTFJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4bFFVRmxMRXRCUVV0QkxFVkJRVVZJTEVOQlFVTXNSMEZCUnl4VFFVRlRRU3hGUVVGRkxFTkJRVU5FTEVWQlFVVkRMRU5CUVVNc1JVRkJSWE5FTEVkQlFVY3NWVUZCVlN4RFFVRkRMRTlCUVU5dVJDeEZRVUZGU0N4RFFVRkRMRVZCUVVWRUxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlVNc1EwRkJReXhGUVVGRkxFOUJRVTlFTEVOQlFVTXNSVUZCUlVVc1JVRkJSU3hMUVVGTGJVVXNSMEZCUjI1RkxFVkJRVVVzVDBGQlR5eFRRVUZUUlN4RlFVRkZMRU5CUVVNc1QwRkJUMFlzUlVGQlJVVXNSVUZCUlZFc1JVRkJSVVFzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlZRc1JVRkJSU3hOUVVGTk1rUXNSMEZCUnpORUxFVkJRVVVzVDBGQlR6UkVMRWRCUVVjMVJDeEZRVUZGTEUxQlFVMXpSQ3hIUVVGSGRFUXNSVUZCUlN4SlFVRkpjVVVzUjBGQlIzSkZMRVZCUVVVc1NVRkJTWFZFTEVkQlFVZDJSQ3hGUVVGRkxFdEJRVXMwUXl4SFFVRkZOVU1zUlVGQlJTeFpRVUZaZFVNc1IwRkJSWFpETEVWQlFVVXNUVUZCVFhkRUxFZEJRVWQ0UkN4RlFVRkZMRk5CUVZOcFFpeEZRVUZGYWtJc1JVRkJSU3hMUVVGTGNVUXNSMEZCUjNKRUxFVkJRVVVzVDBGQlR6WkVMRWRCUVVjM1JDeEZRVUZGTEZGQlFWRTRSQ3hIUVVGSE9VUXNSVUZCUlN4SFFVRkhhMFVzUjBGQlIyeEZMRVZCUVVVc1ZVRkJWV3RFTEVkQlFVVnNSQ3hGUVVGRkxGbEJRVmxUTEVWQlFVVlVMRVZCUVVVc1dVRkJXVlVzUlVGQlJWWXNSVUZCUlN4UlFVRlJiMFVzUjBGQlIzQkZMRVZCUVVVc1QwRkJUeXhUUVVGVFJTeEZRVUZGTEVOQlFVTXNUMEZCVDJ0RUxFZEJRVWNzVTBGQlUzUkVMRVZCUVVVc1EwRkJReXhQUVVGUFNTeEZRVUZGTEZGQlFWRktMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEZsQlFWbEpMRVZCUVVVc1IwRkJSeXhEUVVGRExFVkJRVVZHTEVWQlFVVXNZMEZCWTIxRUxFZEJRVVZ1UkN4RlFVRkZMRWRCUVVjclF5eEhRVUZGTDBNc1JVRkJSU3hOUVVGTkxGTkJRVk5GTEVWQlFVVXNRMEZCUXl4UlFVRlJTaXhGUVVGRlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4RlFVRkZTQ3hGUVVGRkxFVkJRVVZCTEVWQlFVVkVMRVZCUVVVc1QwRkJUME1zU1VGQlNVUXNSVUZCUlVNc1EwRkJReXhGUVVGRkxFbEJRVWxFTEVWQlFVVkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFOUJRVTl4UkN4SFFVRkhMRk5CUVZOMFJDeEZRVUZGTEVOQlFVTXNUMEZCVDBrc1JVRkJSU3hSUVVGUlNpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTMEVzUTBGQlF5eERRVUZETEVWQlFVVkZMRVZCUVVVc1kwRkJZeXRFTEVkQlFVY3ZSQ3hGUVVGRkxFOUJRVTlCTEVWQlFVVkJMRVZCUVVVc1RVRkJUU3hUUVVGVFJTeEZRVUZGU2l4RlFVRkZMRU5CUVVNc1QwRkJUM05FTEVkQlFVY3NVMEZCVTNKRUxFVkJRVVVzUTBGQlF5eFBRVUZQUnl4SFFVRkhTQ3hIUVVGSFFTeEhRVUZIUkN4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTFNTeEZRVUZGTEVsQlFVbEtMRU5CUVVNc1EwRkJReXhGUVVGRlJTeEZRVUZGTEUxQlFVMXBSQ3hIUVVGRmFrUXNSVUZCUlN4UFFVRlBhVVFzUjBGQlJXcEVMRVZCUVVVc1RVRkJUVFpETEVkQlFVVTNReXhGUVVGRkxFOUJRVTg0UXl4SFFVRkZPVU1zUlVGQlJTeEpRVUZKZVVNc1IwRkJSWHBETEVWQlFVVXNUMEZCVHpCRExFZEJRVVV4UXl4RlFVRkZMRTlCUVU4c1ZVRkJWU3hEUVVGRExGRkJRVkZGTEVWQlFVVktMRVZCUVVVc1EwRkJReXhGUVVGRlF5eEZRVUZGTEVWQlFVVkZMRWRCUVVkRExFVkJRVVVzVlVGQlZTeE5RVUZOTEZWQlFWVXNUVUZCVFN4TFFVRkxRU3hEUVVGRExFZEJRVWRETEVWQlFVVkdMRVZCUVVVc1QwRkJUMGNzUlVGQlJTeEZRVUZGUVN4RlFVRkZSQ3hGUVVGRlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkphVUlzUlVGQlJYQkNMRVZCUVVWSExFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTmhMRVZCUVVWSkxFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVZElMRVZCUVVWSExFTkJRVU1zUjBGQlQwRXNSVUZCUlN4VFFVRk9MRWRCUVhkQ0xFOUJRVTlCTEVWQlFVVXNRMEZCUXl4SFFVRndRaXhWUVVGMVFrb3NSVUZCUlVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVbG9RaXhGUVVGRlowSXNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhQUVVGUExGVkJRVlVzWlVGQlpTeExRVUZMZGtJc1JVRkJSVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNTVUZCU1N4TlFVRk5MSGxDUVVGNVFrRXNRMEZCUXl4RlFVRkZVQ3hGUVVGRlR5eERRVUZETEVWQlFVVXNSMEZCUjA0c1NVRkJTU3hSUVVGUkxFTkJRVU1zVFVGQlRTeEpRVUZKTEUxQlFVMHNiVVZCUVcxRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVOUJMRWxCUVVvc1JVRkJUU3hOUVVGTkxFbEJRVWtzVFVGQlRTeHpSRUZCYzBRc1JVRkJSU3hQUVVGUFF5eEZRVUZGTEZOQlFWTkZMRWRCUVVWS0xFZEJRVVVzUTBGQlF5eFJRVUZSUXl4SFFVRkZReXhIUVVGRkxFTkJRVU1zUlVGQlJVa3NSMEZCUlN4RlFVRkZRU3hIUVVGRlJDeEZRVUZGUXl4SlFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSmFVSXNSMEZCUldoQ0xFZEJRVVVzUjBGQlIyRXNSVUZCUldwQ0xFVkJRVVZITEVWQlFVTXNRMEZCUXl4SFFVRkhhVUlzUjBGQlJYQkNMRVZCUVVWSExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVkRMRWRCUVVWS0xFVkJRVVZITEVWQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVscFFpeEhRVUZGTEV0QlFVdG9RaXhIUVVGRlNpeEZRVUZGUnl4RlFVRkRMRWRCUVVjc1JVRkJSVXdzUjBGQlJYRkNMRVZCUVVWbUxFZEJRVVVzUlVGQlJVZ3NSMEZCUlVvc1JVRkJReXhGUVVGRlF5eEZRVUZETEVkQlFVY3NUMEZCVHl4UFFVRlBRU3hIUVVGRmMwSXNTMEZCU1hKQ0xFZEJRVVZ4UWl4RlFVRkRMRVZCUVVWMFFpeEhRVUZGTEU5QlFVOUVMRWRCUVVWRExFZEJRVVVzUzBGQlN5eERRVUZETEU5QlFVOXhRaXhGUVVGRlZpeEZRVUZGV2l4SFFVRkZSU3hGUVVGRExFVkJRVVZFTEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVU1zUlVGQlJTeFBRVUZQWjBRc1IwRkJSV2hFTEVWQlFVVXNVVUZCVVN0RExFZEJRVVV2UXl4RlFVRkZMRlZCUVZVc1UwRkJVMFVzUlVGQlJTeERRVUZETEU5QlFVOTVRaXhIUVVGRmVrSXNRMEZCUXl4RlFVRkZSaXhGUVVGRkxGTkJRVk5HTEVWQlFVVkRMRVZCUVVVc1EwRkJReXhSUVVGUlF5eEZRVUZGUkN4RlFVRkZReXhGUVVGRlJpeEZRVUZGTEZGQlFWRkpMRVZCUVVWMVFpeEZRVUZGTTBJc1JVRkJSVVVzUTBGQlF5eERRVUZETEVkQlFVZEJMRWxCUVVrc1QwRkJUMVVzUlVGQlJWWXNSVUZCUlVZc1JVRkJSU3hOUVVGTlF5eEZRVUZGUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJVRXNSVUZCUlN4TFFVRkxiMFFzUjBGQlIzQkVMRVZCUVVVc1YwRkJWMmRGTEVkQlFVZG9SU3hGUVVGRkxHOUNRVUZ2UWl4RlFVRkZjMFFzUjBGQlIzUkVMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVXJReXhIUVVGRkwwTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1QwRkJUMUVzUlVGQlJTeFZRVUZWTEZOQlFWTk9MRVZCUVVVc1EwRkJRMHNzUlVGQlJTeEZRVUZGTEVsQlFVbFVMRVZCUVVVc1EwRkJReXhGUVVGRlF5eEZRVUZGTEVWQlFVVkRMRVZCUVVVc1JVRkJSU3hUUVVGVFJTeEZRVUZGTEVOQlFVTXNSMEZCUjJkQ0xFVkJRVVZvUWl4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSlJpeEZRVUZGUlN4RlFVRkZMRWRCUVU5R0xFVkJRVVVzVTBGQlRpeEZRVUZoTEUxQlFVMHNTVUZCU1N4TlFVRk5MRWxCUVVsQkxFVkJRVVVzUzBGQlN5eEpRVUZKTEVWQlFVVXNiME5CUVc5RFFTeEZRVUZGTEUxQlFVMHNSVUZCUlN4SFFVRkhORUlzUlVGQlJUVkNMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVV3UWl4SFFVRkZNVUlzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4UFFVRlBMRlZCUVZVc1pVRkJaU3hMUVVGTFJpeEZRVUZGUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFMUJRVTBzU1VGQlNTeE5RVUZOTEN0Q1FVRXJRa0VzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4UFFVRlBSaXhGUVVGRlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVkRUxFbEJRVWxETEVOQlFVTXNRMEZCUXl4UFFVRlBNRUlzUjBGQlJYaENMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXRCTEVOQlFVTXNRMEZCUXl4RlFVRkZRU3hEUVVGRExFVkJRVVVzUjBGQlIwZ3NSVUZCUlN4RlFVRkZMRTFCUVUwc1NVRkJTU3hOUVVGTkxHMUVRVUZ0UkVjc1JVRkJSU3hMUVVGTExFbEJRVWtzUlVGQlJTeEhRVUZITEVWQlFVVXNTVUZCU1VRc1JVRkJSU3hGUVVGRkxGTkJRVk5ETEVWQlFVVXNRMEZCUXl4UFFVRlBRU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGUml4RFFVRkRMRVZCUVVVc1QwRkJUMUVzUlVGQlJTeEZRVUZGTEZOQlFWTk9MRVZCUVVVc1EwRkJReXhQUVVGUFFTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZSaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEZOQlFWTkZMRVZCUVVVc1EwRkJReXhQUVVGUFJTeEZRVUZGTEZOQlFWTkdMRVZCUVVWS0xFVkJRVVVzUTBGQlF5eFBRVUZqUVN4RlFVRkZMRU5CUVVNc1NVRkJWaXhQUVVGalNTeEZRVUZGU2l4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRlFTeEZRVUZGTEVOQlFVTXNSMEZCUjBrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEZOQlFWTktMRVZCUVVWRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTkVMRVZCUVVWSkxFVkJRVVZJTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVWRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1UwRkJVME1zUlVGQlJTeERRVUZETEVkQlFVZExMRVZCUVVVc1JVRkJSVzFDTEVkQlFVVjRRaXhEUVVGRExFVkJRVVZCTEVWQlFVVXNTVUZCU1N4TlFVRk5MRWxCUVVrc1RVRkJUU3gzUTBGQmQwTkJMRVZCUVVVc1RVRkJUVUVzUlVGQlJTeFRRVUZUTEVWQlFVVXNSVUZCUlN3d1EwRkJNRU1zUlVGQlJTeEpRVUZKU2l4SFFVRkhTU3hGUVVGRkxFZEJRVWNzUzBGQlN5eFBRVUZQUVN4RlFVRkZMRk5CUVZNc1JVRkJSU3hGUVVGRkxFOUJRVTlHTEVWQlFVVXNVMEZCVTBRc1JVRkJSVU1zUlVGQlJTeERRVUZETEVsQlFVbERMRVZCUVVWM1FpeEZRVUZGTVVJc1JVRkJSVU1zUTBGQlF5eEZRVUZGTEU5QlFVOURMRWxCUVVsRExFVkJRVVZSTEVWQlFVVldMRVZCUVVVc1JVRkJSVU1zUTBGQlF5eEZRVUZGVVN4RlFVRkZWQ3hGUVVGRlJpeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1QwRkJUeXhUUVVGVFNTeEZRVUZGTEVOQlFVTXNUMEZCVDFNc1JVRkJSU3hUUVVGVFZDeERRVUZETEVWQlFVVXNTVUZCU1N4VFFVRlRRU3hGUVVGRkxFTkJRVU1zVDBGQlR5eFBRVUZQTEV0QlFVdEJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeGpRVUZqTEZOQlFWTkJMRVZCUVVWS0xFVkJRVVVzUTBGQlF5eFBRVUZQWVN4RlFVRkZMRk5CUVZOaUxFTkJRVU1zUlVGQlJTeEpRVUZKTEZOQlFWTkJMRVZCUVVVc1EwRkJReXhQUVVGUFFTeEZRVUZGTEZOQlFWTkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQVnl4RlFVRkZMRkZCUVZGQkxFVkJRVVVzUTBGQlF5eEZRVUZGTEZOQlFWTkJMRVZCUVVVc1EwRkJReXhGUVVGRkxGTkJRVk5CTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU5RExFVkJRVVVzVVVGQlVVRXNSVUZCUlN4RFFVRkRMRVZCUVVVc1UwRkJVMEVzUlVGQlJTeERRVUZETEVWQlFVVXNVMEZCVTBFc1JVRkJSU3hEUVVGRExFVkJRVVVzVFVGQlRVTXNSVUZCUlN4UFFVRlBRU3hGUVVGRkxFTkJRVU1zUlVGQlJTeFJRVUZSUVN4RlFVRkZMRU5CUVVNc1JVRkJSU3hSUVVGUlFTeEZRVUZGTEVOQlFVTXNSVUZCUlN4TlFVRk5ReXhGUVVGRkxFOUJRVTlCTEVWQlFVVXNRMEZCUXl4RlFVRkZMRkZCUVZGQkxFVkJRVVVzUTBGQlF5eEZRVUZGTEZGQlFWRkJMRVZCUVVVc1EwRkJReXhGUVVGRkxGRkJRVkZNTEVWQlFVVXNWVUZCVlN4RFFVRkRMRVZCUVVVc1NVRkJTU3hUUVVGVFZDeEZRVUZGTEVOQlFVTXNUMEZCVDBFc1JVRkJSU3haUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVZNc1JVRkJSU3hWUVVGVkxFTkJRVU1zUlVGQlJTeEpRVUZKTEZOQlFWTlVMRVZCUVVVc1EwRkJReXhQUVVGUFFTeEZRVUZGTEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hUUVVGVFV5eEZRVUZGTEZkQlFWY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1UwRkJVMVFzUlVGQlJTeERRVUZETEU5QlFVOUJMRVZCUVVVc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEZOQlFWTlRMRVZCUVVVc1YwRkJWeXhEUVVGRExFVkJRVVVzU1VGQlNTeFRRVUZUVkN4RlFVRkZMRU5CUVVNc1QwRkJUMEVzUlVGQlJTeGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxGRkJRVkZHTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUTBFek1tUXNTVUZCUVhORkxFZEJRVUZETEVkQlFVRkRMRWxCUVVFc1kwRkRRU3hKUVVGSlF5eEhRVUZoUkN4SlFVRlJRU3hIUVVGTExGZEJRV1VzVlVGQldTeERRVU55UkN4SlFVRkpSU3hGUVVGblFpeFRRVUZWUXl4RlFVRkhReXhGUVVGSExFTkJRMmhETEU5QlFVRkdMRVZCUVdkQ0xFOUJRVThzWjBKQlEyeENMRU5CUVVVc1ZVRkJWeXhEUVVGRExFTkJRVVVzV1VGQllTeFBRVUZUTEZOQlFWVkRMRVZCUVVkRExFVkJRVWNzUTBGQlJVUXNSVUZCUlN4VlFVRlpReXhEUVVGSExFZEJRekZGTEZOQlFWVkVMRVZCUVVkRExFVkJRVWNzUTBGQlJTeFJRVUZUUXl4TFFVRkxSQ3hGUVVGUExFOUJRVThzVlVGQlZTeGxRVUZsTEV0QlFVdEJMRVZCUVVkRExFTkJRVU1zU1VGQlIwWXNSVUZCUlVVc1EwRkJReXhGUVVGSlJDeEZRVUZGUXl4RFFVRkRMRVZCUVVjc1JVRkROMFpJTEVWQlFXTkRMRVZCUVVkRExFTkJRVU1zUTBGRE4wSXNSVUZEUVN4UFFVRlBMRk5CUVZWRUxFVkJRVWRETEVWQlFVY3NRMEZEYmtJc1IwRkJTU3hQUVVGUFFTeEhRVUZOTEZsQlFXTkJMRWxCUVUwc1MwRkRha01zVFVGQlRTeEpRVUZKTEZWQlFWVXNkVUpCUVhsQ0xFOUJRVTlCTEVOQlFVTXNSVUZCU1N3clFrRkJLMElzUlVGRE5VWkdMRVZCUVdORExFVkJRVWRETEVOQlFVTXNSVUZEYkVJc1UwRkJVMFVzUjBGQlN5eERRVUZGTEV0QlFVc3NXVUZCWTBnc1EwRkJSeXhEUVVOMFEwRXNSVUZCUlN4VlFVRlpReXhKUVVGTkxFdEJRVThzVDBGQlR5eFBRVUZQUVN4RFFVRkRMRWRCUVV0RkxFVkJRVWNzVlVGQldVWXNSVUZCUlN4VlFVRlhMRWxCUVVsRkxFVkJRMjVHTEVOQlEwb3NSVUZCUnl4RlFVTklMRTlCUVU4c1pVRkJaVTRzUjBGQlV5eGhRVUZqTEVOQlFVVXNUVUZCVHl4RlFVRkxMRU5CUVVNc1JVRkROVVJCTEVkQlFWRXNWMEZCWVVFc1IwRkJVU3hOUVVGUlFTeEhRVUZSTEdsQ1FVRnRRa0VzUjBGQlVTeHJRa0ZCYjBJc1QwRlpOVVlzVTBGQlUwOHNSMEZCYTBKRExFVkJRVWRLTEVWQlFVY3NRMEZMTjBJc1IwRkJTU3hQUVVGUExGTkJRVk5KTEVOQlFVTXNSMEZCU3l4UFFVRlBMRk5CUVZOS0xFTkJRVU1zUlVGRGRrTXNUMEZCVDBrc1JVRkJTVW9zUlVGSlppeEpRVUZKU3l4RlFVRkxMRTlCUVU5RUxFVkJRMXBGTEVWQlFVc3NUMEZCVDA0c1JVRkRhRUlzUjBGQlNVc3NTVUZCVDBNc1JVRkRVQ3hQUVVGUFJDeEZRVUZMUXl4RlFVRkxMRWRCUVVzc1JVRkZNVUlzUjBGQlNVUXNTVUZCVHl4VFFVRlZMRU5CUldwQ0xFZEJRVWxFTEVsQlFVMHNTMEZEVGl4UFFVRlBTaXhKUVVGTkxFdEJRVThzUlVGQlNTeEhRVU4yUWl4SFFVRkpRU3hKUVVGTkxFdEJRMWdzVFVGQlR5eEhRVTFZTEVkQlRFRkpMRVZCUVVsQkxFVkJRVVVzVVVGQlVTeEZRVU5rU2l4RlFVRkpRU3hGUVVGRkxGRkJRVkVzUlVGRFpFc3NSVUZCU3l4UFFVRlBSQ3hGUVVOYVJTeEZRVUZMTEU5QlFVOU9MRVZCUlZKTExFbEJRVTlETEVWQlExQXNUMEZCVDBRc1JVRkJTME1zUlVGQlN5eEhRVUZMTEVOQlJUbENMRU5CUjBFc1QwRkJTVVlzUlVGQlNVb3NSVUZEUnl4SFFVTlFTU3hGUVVGSlNpeEZRVU5ITEVWQlExQkpMRWxCUVUxS0xFVkJRME1zUlVGRlVDeFBRVUZQTEUxQlFVMUpMRU5CUVVNc1JVRkRVQ3hQUVVGUExFMUJRVTFLTEVOQlFVTXNSVUZCU1N4RlFVRkpMRWRCUTNoQ0xFOUJRVThzVFVGQlRVRXNRMEZCUXl4RlFVTmFMRVZCUlVvc1RVRkJUU3hSUVVGUlNTeERRVUZETEVWQlFVa3NSVUZCU1N4UFFVRlBMRWRCUTNwRExFTkJRMEZTTEVkQlFWRXNhMEpCUVc5Q1R5eEhRVVUxUWl4VFFVRlRTU3hIUVVGcFFrZ3NSVUZCUjBvc1JVRkJSeXhEUVVNMVFpeFBRVUZQU1N4RlFVRkpTaXhGUVVGSkxFVkJRVWxKTEVWQlFVbEtMRVZCUVVrc1IwRkJTeXhEUVVOd1F5eERRVU5CU2l4SFFVRlJMR2xDUVVGdFFsY3NSMEZyUlROQ0xFbEJRVWxETEVkQlFYVkNMRlZCUVZrc1EwRlRia01zVTBGQlUwRXNSVUZCVFVNc1JVRkJVME1zUlVGQlUwTXNSVUZCWVN4RFFVTXhReXhMUVVGTExFMUJRVkZETEVkQlEySXNTMEZCU3l4TlFVRlJMRVZCUTJJc1MwRkJTeXhoUVVGbFJDeEhRVUZsTEVWQlFVa3NTMEZCU3l4SlFVRkpRU3hGUVVGaExFZEJRVWNzUlVGQlNTeEhRVU53UlN4TFFVRkxMRk5CUVZkRUxFZEJRVmRRTEVkQlEzWkNUU3hIUVVOQkxFdEJRVXNzVTBGQlUwRXNRMEZCVHl4RFFVTTNRaXhEUVVOQkxHTkJRVThzWlVGQlpVUXNSVUZCVFN4VlFVRlhMRTlCUVZFc1EwRkpNME1zU1VGQlN5eFZRVUZaTEVOQlFVVXNUMEZCVHl4TFFVRkxMRXRCUVU4c1JVRkRkRU1zVjBGQldTeEhRVU5hTEdGQlFXTXNSVUZEYkVJc1EwRkJReXhGUVVORUxFOUJRVThzWlVGQlpVRXNSVUZCVFN4VlFVRlhMRk5CUVZVc1EwRkZOME1zU1VGQlN5eFZRVUZaTEVOQlFVVXNUMEZCVHl4TFFVRkxMRXRCUVU4c1JVRkRkRU1zVjBGQldTeEhRVU5hTEdGQlFXTXNSVUZEYkVJc1EwRkJReXhGUVVORUxFOUJRVThzWlVGQlpVRXNSVUZCVFN4VlFVRlhMRlZCUVZjc1EwRkZPVU1zU1VGQlN5eFZRVUZaTEVOQlFVVXNUMEZCVHl4TFFVRkxMRkZCUVZVc1EwRkJSeXhGUVVNMVF5eFhRVUZaTEVkQlExb3NZVUZCWXl4RlFVTnNRaXhEUVVGRExFVkJSVVJCTEVWQlFVMHNWVUZCVlN4TlFVRlJMRlZCUVZrc1EwRkRhRU1zUzBGQlN5eE5RVUZSU1N4SFFVTmlMRXRCUVVzc1RVRkJVU3hEUVVOcVFpeEZRVk5CU2l4RlFVRk5MRlZCUVZVc1VVRkJWU3hUUVVGVlN5eEZRVUZWUXl4RlFVRlRMRU5CUTI1RUxFbEJRVWxETEVWQlFWRXNTMEZEV2l4UFFVRkpSQ3hKUVVGWkxGTkJRMXBFTEVWQlFWZEJMRVZCUVZNc1MwRkJTME1zUTBGQlR5eEhRVU0zUWl4TFFVRkxMRmxCUVZrc1UwRkJWVVVzUlVGQlIwTXNSVUZCUnl4RFFVRkZMRTlCUVU5S0xFVkJRVk5KTEVWQlFVZEVMRVZCUVVkRUxFTkJRVXNzUTBGQlJ5eERRVUZETEVOQlF6ZEZMRVZCWlVGUUxFVkJRVTBzVlVGQlZTeFpRVUZqTEZOQlFWVkxMRVZCUVZWTExFVkJRV2RDTEVOQlF6bEVMRWxCUVVsRExFVkJRVTBzUzBGQlN5eFBRVUZQTEVWQlFVZERMRVZCUVU4c1MwRkJTeXhQUVVGUExFVkJRelZETEU5QlFVOHNTMEZCU3l4VFFVRlRSQ3hGUVVGTFF5eEZRVUZOTEVkQlFVMVFMRVZCUVZWTExFTkJRV01zUTBGRGJFVXNSVUZQUVZZc1JVRkJUU3hWUVVGVkxFbEJRVTBzVTBGQlZXRXNSVUZCUzBNc1JVRkJZeXhEUVVNdlF5eFBRVUZQTEV0QlFVc3NUVUZCVFN4SlFVRkpSQ3hGUVVGTFF5eEZRVUZqTEVsQlFVa3NRMEZEYWtRc1JVRmxRV1FzUlVGQlRTeFZRVUZWTEVsQlFVMHNVMEZCVldFc1JVRkJTMFVzUlVGQlQwTXNSVUZCVnl4RFFVTXZReXhMUVVGTExFMUJRVTBzVjBGRFdDeExRVUZMTEUxQlFWRXNTMEZCU3l4TlFVRk5MRTFCUVUwc1IwRkRiRU1zU1VGQlNVTXNSVUZCVXl4TFFVRkxMRTFCUVUwc1NVRkJTVW9zUlVGQlMwVXNSVUZCVDBNc1JVRkJWeXhKUVVGSkxFVkJRM1pFTEU5QlFVbERMRWxCUVZjc1NVRkJVVUVzU1VGQlZ5eEhRVU4yUWtFc1IwRkZXQ3hMUVVGTExFMUJRVkVzU1VGQlNVTXNSMEZCWXl4RFFVRkRMRXRCUVVzc1RVRkJUMFFzUTBGQlRTeERRVUZETEVWQlF6VkRMRWRCUTFnc1JVRlJRV3BDTEVWQlFVMHNWVUZCVlN4SlFVRk5MRk5CUVZWaExFVkJRVXNzUTBGRGFrTXNUMEZCVHl4TFFVRkxMRk5CUVZOQkxFVkJRVXRCTEVWQlFVc3NSMEZCVFN4TlFVRlRMRWxCUVUwc1EwRkRlRVFzUlVGUFFXSXNSVUZCVFN4VlFVRlZMRTlCUVZNc1UwRkJWV0VzUlVGQlN5eERRVU53UXl4UFFVRlBMRXRCUVVzc1ZVRkJWVUVzUlVGQlMwRXNSVUZCU3l4SFFVRk5UU3hGUVVGWExFbEJRVTBzUTBGRE0wUXNSVUZEUVc1Q0xFVkJRVTBzVlVGQlZTeExRVUZQTEZOQlFWVmhMRVZCUVV0RkxFVkJRVTlETEVWQlFWY3NRMEZEY0VRc1NVRkJTVWtzUlVGQlN5eExRVUZMTEUxQlFVMHNSVUZEY0VJc1QwRkJUMEVzUlVGQlJ5eEpRVUZKVUN4RlFVRkxSU3hGUVVGUFF5eERRVUZUTEVkQlFVdEJMRVZCUVZsSkxFVkJRVXNzU1VGRE4wUXNSVUZGUVhCQ0xFVkJRVTBzVlVGQlZTeFZRVUZaTEZOQlFWVnhRaXhGUVVGUFRDeEZRVUZYTEVOQlEzQkVMRWxCUVVsSkxFVkJRVXNzUzBGQlN5eE5RVUZOTEVWQlEzQkNMRTlCUVU5QkxFVkJRVWNzVTBGQlUwTXNSVUZCVDB3c1EwRkJVeXhKUVVGTkxFZEJRVXRCTEVWQlFWbEpMRVZCUVVzc1NVRkRia1VzUlVGVFFYQkNMRVZCUVUwc1ZVRkJWU3hUUVVGWExGTkJRVlZ6UWl4RlFVRk5ReXhGUVVGMVFpeERRVVU1UkN4UlFVUkpTQ3hGUVVGTExFdEJRVXNzVFVGQlRTeEZRVUZIU1N4RlFVRlZMRWRCUTNoQ0xFVkJRVWtzUlVGQlJ5eEZRVUZKUml4RlFVRkxMRTlCUVZFc1NVRkROMEpGTEVWQlFWVktMRVZCUVVjc1NVRkJTVVVzUlVGQlN5eERRVUZETEVWQlFVY3NUMEZCVnl4RlFVRkxMRWRCUVV0RkxFVkJRMjVFTEU5QlFVOUVMRWRCUVhsQ0xFTkJRVU5ETEVWQlFWVXNTMEZCVDBvc1EwRkRkRVFzUlVGUFFYQkNMRVZCUVUwc1ZVRkJWU3hSUVVGVkxGTkJRVlZoTEVWQlFVdFZMRVZCUVhWQ0xFTkJRelZFTEU5QlFVOHNTMEZCU3l4aFFVRmhWaXhGUVVGTFFTeEZRVUZMTEVkQlFVMVZMRU5CUVhGQ0xFTkJRMnhGTEVWQlQwRjJRaXhGUVVGTkxGVkJRVlVzV1VGQll5eFRRVUZWYzBJc1JVRkJUVU1zUlVGQmRVSXNRMEZEYWtVc1NVRkJTVWdzUlVGQlN5eExRVUZMTEUxQlFVMHNSVUZEY0VJc1QwRkJUMEVzUlVGQlJ5eFhRVUZYUlN4RFFVRkpMRWRCUVVzc1EwRkJRME1zUlVGQmQwSklMRVZCUVVzc1NVRkRhRVVzUlVGRlFYQkNMRVZCUVUwc1ZVRkJWU3hoUVVGbExGTkJRVlZYTEVWQlFVdERMRVZCUVUxaExFVkJRV0ZHTEVWQlFYVkNMRU5CUTNCR0xFbEJRVWxJTEVWQlFVc3NTMEZCU3l4TlFVRk5MRVZCUTNCQ0xFOUJRVWxCTEVWQlFVY3NXVUZCV1ZRc1JVRkJTME1zUlVGQlRXRXNRMEZCVnl4SlFVRk5MRWRCUVV0R0xFVkJRM3BETEV0QlEwcElMRU5CUTFnc1JVRkhRWEJDTEVWQlFVMHNWVUZCVlN4UFFVRlRMRk5CUVZWTExFVkJRVlZyUWl4RlFVRjFRaXhEUVVOb1JTeEpRVUZKU0N4RlFVRkxMRXRCUVVzc1dVRkJXU3hGUVVOMFFrMHNSVUZMU2l4UFFVcEJUaXhGUVVGSExGRkJRVkVzVTBGQlZWb3NSVUZCUjBNc1JVRkJSMnRDTEVWQlFVY3NRMEZETVVJc1IwRkJTU3hEUVVGRGRFSXNSVUZCVTBjc1JVRkJSME1zUlVGQlIydENMRU5CUVVNc1JVRkRha0lzVDBGQlQwUXNSVUZCVFVVc1JVRkRja0lzUTBGQlF5eEZRVU5ITEVOQlFVTkdMRWRCUVU5SUxFVkJRMFFzUzBGRFNrZ3NRMEZEV0N4RlFVVkJjRUlzUlVGQlRTeFZRVUZWTEZWQlFWa3NVMEZCVlVzc1JVRkJWU3hEUVVNMVF5eEpRVUZKZDBJc1JVRkJUU3hEUVVGRExFVkJRMUJVTEVWQlFVc3NTMEZCU3l4WlFVRlpMRVZCUXpGQ0xFOUJRVUZCTEVWQlFVY3NVVUZCVVN4VFFVRlZXaXhGUVVGSFF5eEZRVUZIYTBJc1JVRkJSeXhEUVVNeFFpeFBRVUZQUlN4RlFVRkpMRTFCUVZGNFFpeEZRVUZUU1N4RlFVRkhSQ3hGUVVGSGJVSXNRMEZCUXl4RlFVRkhSU3hEUVVNeFF5eERRVUZETEVWQlEwMVVMRU5CUTFnc1JVRkRRWEJDTEVWQlFVMHNWVUZCVlN4UFFVRlRMRk5CUVZWTExFVkJRVlY1UWl4RlFVRmpMRU5CUjNaRUxGRkJSa2xJTEVWQlFVa3NSVUZCUjJ4RExFVkJRVWx4UXl4RlFVTllReXhGUVVGTExFdEJRVXNzVVVGQlVTeExRVUZMTEU5QlFVOHNSVUZCUjBNc1JVRkJWeXhGUVVGSFF5eEZRVU0xUXl4RlFVRkZRU3hGUVVGUFJpeEZRVUZITEV0QlFVc3NSMEZCUnl4TlFVTjJRblJETEVWQlFVbFpMRVZCUVZOYUxFVkJRVWQzUXl4RlFVRkxMRTFCUVU5T0xFbEJRVXNzU1VGQlNTeEZRVU42UXl4UFFVRlBiRU1zUTBGRFdDeEZRVmRCVHl4RlFVRk5MRlZCUVZVc1VVRkJWU3hUUVVGVmEwTXNSVUZCVjBNc1JVRkJZU3hEUVVONFJDeEpRVUZKUXl4RlFVRlBMRXRCUVVzc1UwRkJVMFlzUTBGQlV5eEZRVU5zUXl4SFFVRkpSU3hKUVVGVExFOUJRMVFzVDBGQlQwTXNSMEZCVXl4RlFVTndRaXhKUVVGSlF5eEZRVUZaUml4RlFVRkxMRlZCUVZkSExFVkJRVmxJTEVWQlFVc3NWVUZCVjBrc1JVRkJUMG9zUlVGQlN5eExRVU53UlVzc1JVRkJVVTRzU1VGQlowSXNUMEZCV1N4RlFVRkpMRVZCUTNoRFVpeEZRVUZMVHl4SlFVRmpMRTlCUVZrc1IwRkJTMDBzUlVGQlN5eFJRVUZSVGl4RlFVRlhMRVZCUVVjc1MwRkJTeXhSUVVGUkxFVkJRVWtzUlVGRGNFWXNUMEZCVDBjc1IwRkJVeXhWUVVGWkxFTkJRM2hDU3l4RlFVRk5MRTlCUTBZc1QwRkJVVVFzUlVGQlR5eERRVU5ZTEVsQlFVc3NSMEZEUkN4SFFVRkpMRVZCUVVWa0xFVkJRVWxoTEVWQlFVc3NTMEZCU3l4UFFVTm9RaXhOUVVGUExFTkJRVVVzUzBGQlRTeEhRVUZQTEUxQlFVOHNRMEZCUTBFc1JVRkJTeXhMUVVGTFlpeERRVUZETEVWQlFVZGhMRVZCUVVzc1QwRkJUMklzUTBGQlF5eERRVUZETEVOQlFVVXNSVUZEYUVWakxFVkJRVkVzUlVGRFVpeFRRVU5LTEVsQlFVc3NSMEZEUkN4SFFVRkpMRVZCUVVWa0xFVkJRVWxoTEVWQlFVc3NTMEZCU3l4UFFVTm9RaXhQUVVGQlRDeEZRVUZaTEVOQlFVTXNSVUZCU1Vzc1JVRkJTeXhMUVVGTFlpeERRVUZETEVWQlFVZFJMRVZCUVZrc1EwRkJReXhGUVVGSlN5eEZRVUZMTEU5QlFVOWlMRU5CUVVNc1JVRkRkRVFzUTBGQlJTeExRVUZOTEVkQlFVOHNUVUZCVDFFc1EwRkJXU3hGUVVVM1EwMHNSVUZCVVN4RlFVTmFMRWxCUVVzc1IwRkZSQ3hSUVVGVFJTeEZRVUZSTEV0QlFVMHNRMEZEYmtJc1IwRkJTU3hGUVVGRlFTeEhRVUZUVEN4RlFVRlZMRTlCUVZFc1EwRkROMEpITEVWQlFWRXNSVUZEVWl4VFFVRlRReXhEUVVOaUxFTkJRMEVzUjBGQlNTeEZRVUZGU0N4RlFVRlZTU3hEUVVGTExFVkJRVWxNTEVWQlFWVkxMRU5CUVVzc1JVRkJSU3hQUVVOMFF5eExRVU5TTEVOQlEwRXNTMEZCVDBFc1JVRkJVU3hGUVVGSFFTeEpRVU5rVEN4RlFVRlZTeXhGUVVGUkxFTkJRVU1zUlVGQlNVd3NSVUZCVlVzc1EwRkJTeXhGUVVGRlNpeEZRVUZWU1N4RFFVRkxMRU5CUVVNc1JVRkJSU3hUUVVNeFJFb3NSVUZCVlVrc1JVRkJVU3hEUVVGRExFVkJRVWtzUlVGRk0wSklMRVZCUVU5R0xFVkJRVlVzUTBGQlF5eEZRVUZGUXl4RlFVRlZMRU5CUVVNc1EwRkJReXhGUVVOb1Exb3NSVUZCU1N4SFFVTktZeXhGUVVGUlRpeEpRVUZuUWl4UFFVRlpMRVZCUVVrc1JVRkRlRU1zVTBGRFNpeEpRVUZMTEVkQlEwUXNUVUZCVHl4RFFVRkZMRXRCUVUwc1IwRkJUU3hOUVVGUExFMUJRVlVzUTBGRE9VTXNRMEZGVWl4RFFVRkRMRU5CUTB3c1JVRlZRVzVETEVWQlFVMHNWVUZCVlN4blFrRkJhMElzVTBGQlZUUkRMRVZCUVZsVUxFVkJRV0ZWTEVWQlFXRXNRMEZET1VVc1IwRkJTVVFzU1VGQlpTeFRRVU5tUVN4RlFVRmhMRXRCUVVzc1QwRkJUeXhGUVVONlFrTXNSVUZCWXl4UFFVTldSQ3hKUVVGbExGRkJRMllzVDBGQlQxQXNSMEZCVXl4RlFVVjRRaXhKUVVGSlV5eEZRVUZMTEV0QlFVc3NVMEZCVTBZc1EwRkJWU3hIUVVGTExFdEJRVXNzVTBGQlV5eExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkhUaXhGUVVGWlVTeEZRVUZITEZWQlFWZFFMRVZCUVZsUExFVkJRVWNzVlVGQlYwNHNSVUZCVDAwc1JVRkJSeXhMUVVOc1NVTXNSMEZCVFN4RFFVRkRWQ3hGUVVGVkxFTkJRVU1zUjBGQlMwVXNTVUZCVTBZc1JVRkJWU3hEUVVGRExFVkJRVVZETEVWQlFWVXNRMEZCUXl4RFFVRkRMRVZCUVVjc1RVRkJUU3hGUVVOc1JTeEpRVUZKV2l4RlFVRkpZU3hGUVVGTExGRkJRVkZKTEVWQlFWa3NSVUZCUnl4TFFVRkxMRkZCUVZFc1JVRkROME1zUTBGQlEwTXNSMEZCWld4Q0xFVkJRVWxoTEVWQlFVc3NTMEZCU3l4UlFVRlZMRXRCUVVzc1UwRkJVMEVzUlVGQlN5eExRVUZMWWl4RFFVRkRMRVZCUVVkcFFpeERRVUZWTEVkQlFVc3NSMEZEYmtacVFpeEpRVU5LTEVsQlFVbGpMRVZCUVZGT0xFbEJRV2RDTEU5QlFWa3NSVUZCU1N4RlFVTTFReXhQUVVGUFJTeEhRVUZUTEZWQlFWa3NRMEZEZUVKTExFVkJRVTBzVDBGRFJpeFBRVUZSUkN4RlFVRlBMRU5CUTFnc1NVRkJTeXhIUVVORUxFZEJRVWtzUlVGQlJXUXNSMEZCU3l4RlFVTlFMRTFCUVU4c1EwRkJSU3hMUVVGTkxFZEJRVThzVFVGQlR5eERRVUZEWVN4RlFVRkxMRXRCUVV0aUxFTkJRVU1zUlVGQlIyRXNSVUZCU3l4UFFVRlBZaXhEUVVGRExFTkJRVU1zUTBGQlJTeEZRVU5vUldNc1JVRkJVU3hGUVVOU0xGTkJRMG9zU1VGQlN5eEhRVU5FTEVkQlFVa3NSVUZCUldRc1IwRkJTeXhGUVVOUUxFOUJRVUZSTEVWQlFWa3NRMEZCUXl4RlFVRkpTeXhGUVVGTExFdEJRVXRpTEVOQlFVTXNSVUZCUjFFc1JVRkJXU3hEUVVGRExFVkJRVWxMTEVWQlFVc3NUMEZCVDJJc1EwRkJReXhGUVVOMFJDeERRVUZGTEV0QlFVMHNSMEZCVHl4TlFVRlBVU3hEUVVGWkxFVkJSVGREVFN4RlFVRlJMRVZCUTFvc1NVRkJTeXhIUVVWRUxGRkJRVk5GTEVWQlFWRXNTMEZCVFN4RFFVTnVRaXhIUVVGSkxFVkJRVVZCTEVkQlFWTk1MRVZCUVZVc1QwRkJVU3hEUVVNM1FrY3NSVUZCVVN4RlFVTlNMRk5CUVZORExFTkJRMklzUTBGRFFTeEhRVUZKTEVWQlFVVklMRVZCUVZWSkxFTkJRVXNzUjBGQlN5eEZRVU4wUWl4TFFVTlNMRU5CUTBFc1MwRkJUMEVzUlVGQlVTeEZRVUZIUVN4SlFVTmtUQ3hGUVVGVlN5eEZRVUZSTEVOQlFVTXNSVUZCU1V3c1JVRkJWVXNzUTBGQlN5eEZRVUZGU2l4RlFVRlZTU3hEUVVGTExFTkJRVU1zUlVGQlJTeFRRVU14UkVvc1JVRkJWVWtzUlVGQlVTeERRVUZETEVWQlFVbE1MRVZCUVZWTExFVkJRVkVzUTBGQlF5eEZRVUZGTEU5QlFWTXNSVUZGZWtSSUxFVkJRVTlHTEVWQlFWVXNRMEZCUXl4RlFVRkZReXhGUVVGVkxFTkJRVU1zUTBGQlF5eEZRVU5vUTFvc1JVRkJTV0VzUlVGQlN5eExRVUZMTEU5QlEyUkRMRVZCUVZGT0xFbEJRV2RDTEU5QlFWa3NSVUZCU1N4RlFVTjRReXhUUVVOS0xFbEJRVXNzUjBGRFJDeE5RVUZQTEVOQlFVVXNTMEZCVFN4SFFVRk5MRTFCUVU4c1RVRkJWU3hEUVVNNVF5eERRVVZTTEVOQlFVTXNRMEZEVEN4RlFWVkJia01zUlVGQlRTeFZRVUZWTEZOQlFWY3NVMEZCVldFc1JVRkJTeXhEUVVOMFF5eEpRVUZKYlVNc1JVRkJWeXhMUVVGTExFMUJRMmhDVml4RlFVRlhReXhGUVVObUxFZEJRVWxUTEVWQlFWTXNUMEZEVkZZc1JVRkJXVmNzUjBGQldWWXNSVUZCV1ZVc1QwRkZia01zUTBGRFJGZ3NSVUZCV1N4RFFVRkRMRVZCUVVkRExFVkJRVmtzUTBGQlF5eEZRVU0zUWl4UlFVRlRhRVFzUlVGQlNTeEZRVUZITEVOQlFVTjVSQ3hGUVVGVExFOUJRVkY2UkN4SlFVRkxMRU5CUjI1RExFZEJSa0VyUXl4RlFVRlZMME1zUTBGQlF5eEZRVUZKZVVRc1JVRkJVeXhUUVVONFFsUXNSVUZCVldoRUxFTkJRVU1zUlVGQlNYTkNMRWxCUVZFc1QwRkJXU3hGUVVGSmJVTXNSVUZCVXl4UlFVRlJia01zUlVGQlN5eEZRVUZITEV0QlFVc3NVVUZCVVN4RlFVTjZSVEJDTEVWQlFWVm9SQ3hEUVVGRExFZEJRVXNyUXl4RlFVRlZMME1zUTBGQlF5eEZRVUZGTEU5QlF6ZENMRTlCUTBwNVJDeEZRVUZYVml4RlFVRlZMME1zUTBGQlF5eEZRVUZGWjBRc1JVRkJWV2hFTEVOQlFVTXNRMEZCUXl4RFFVTjRReXhEUVVOQkswTXNSVUZCVlN4UlFVRlJMRVZCUTJ4Q1F5eEZRVUZWTEZGQlFWRXNRMEZEZEVJc1EwRkRRU3hOUVVGUExFTkJRVVVzVlVGQlYwUXNSVUZCVnl4VlFVRlhReXhGUVVGWExFdEJRVTFUTEVOQlFWTXNRMEZEZUVVc1JVRmpRV2hFTEVWQlFVMHNWVUZCVlN4WlFVRmpMRk5CUVZWclJDeEZRVUZQUXl4RlFVRlZReXhGUVVGWFF5eEZRVUZYTEVOQlF6TkZMRWRCUVVsSUxFVkJRVTBzVjBGQllTeExRVUZMTEZOQlEzaENMRTFCUVUwc1NVRkJTU3hOUVVGTkxHOURRVUZ2UXl4RlFVVjRSQ3hIUVVGSkxFdEJRVXNzVTBGQlYwRXNSVUZCVFN4UlFVTjBRaXhQUVVGSkxFdEJRVXNzVTBGQlYwRXNSVUZCVFN4UlFVTjBRaXhQUVVWQkxFdEJRVXNzVVVGRFJVVXNTVUZCWXl4UFFVRlpMRTlCUVZsd1JDeEZRVUZOTEZWQlFWVkJMRVZCUVUwc1pVRkJaV3RFTEVOQlFVc3NSVUZCUjBVc1EwRkJVeXhGUVVOb1IwUXNTVUZCWVN4UFFVRlpMRTlCUVZsdVJDeEZRVUZOTEZWQlFWVkJMRVZCUVUwc1pVRkJaU3hKUVVGSkxFVkJRVWR0UkN4RFFVRlJMRVZCTUVKd1J5eFJRVTVKUnl4RlFVRlhMRXRCUVVzc1UwRkRhRUpETEVWQlFXRjJSQ3hGUVVGTkxHVkJRV1VzU1VGQlNTeEZRVU4wUTNkRUxFVkJRV040UkN4RlFVRk5MR1ZCUVdWclJDeERRVUZMTEVWQlIzaERUeXhGUVVGakxFZEJRVTFETEVWQlFXVXNSMEZCVFVNc1JVRkJhMEl6UkN4RlFVRk5MRkZCUVZGMVJDeEZRVUZaUXl4RlFVRmhSaXhEUVVGUkxFVkJRM1pIUnl4SFFVRmxReXhIUVVGakxFTkJRMmhETEVsQlFVbEZMRVZCUVdNMVJDeEZRVUZOTEZGQlFWRjFSQ3hGUVVGWlF5eEZRVUZoUml4RFFVRlJMRVZCUXpkRVR5eEZRVUZYVGl4RlFVRlhMRXRCUVUxUExFVkJRVzlDVUN4RlFVRlhMR05CUVdWUkxFVkJRVzFDVWl4RlFVRlhMR0ZCUTNoSFV5eEZRVUZaVWl4RlFVRlpMRXRCUVUxVExFVkJRWEZDVkN4RlFVRlpMR05CUVdWVkxFVkJRVzlDVml4RlFVRlpMR0ZCUTJ4SUxFZEJRVWxMTEVkQlFWbEhMRWRCUlZvc1IwRkJTVXdzU1VGQmIwSXNSMEZEY0VJc1IwRkJTVU1zU1VGQlowSXNSMEZEYUVJc1IwRkJTVU1zUjBGQldVY3NSMEZCWVZnc1JVRkJWeXhEUVVWd1F5eEpRVUZKWXl4RlFVRlZUaXhGUVVGVExFOUJRVTlGTEVWQlFXbENRU3hGUVVGcFFpeFBRVUZUTEVOQlFVTXNRMEZCUXl4RlFVTjJSVXNzUlVGQlYwb3NSVUZCVlN4UFFVRlBSU3hGUVVGclFrRXNSVUZCYTBJc1QwRkJVeXhEUVVGRExFTkJRVU1zUlVGREwwVXNSMEZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSME1zUlVGQlUwTXNRMEZCVVN4RlFVRkhMRU5CUXk5Q0xFbEJRVWx1UkN4RlFVRlRiME1zUlVGQlZVVXNSVUZCVnl4WFFVRlpXU3hGUVVGVFF5eERRVUZSTEVWQlF5OUVMRWRCUVVsdVJDeEhRVUZWUVN4RlFVRlBMRTFCUTJwQ0xFOUJRVTlCTEVWQlFVOHNTMEZEZEVJc1EwRkRTaXhWUVVWTE1rTXNSVUZCWXl4SFFVdHVRaXhIUVVGSlNTeEhRVUZoV2l4RlFVRlhMRU5CUTNoQ0xFbEJRVWxwUWl4RlFVRlhUQ3hGUVVGVkxFOUJRVTlGTEVWQlFXdENRU3hGUVVGclFpeFBRVUZUTEVOQlFVTXNRMEZCUXl4RlFVTXpSV3BFTEVWQlFWTnRReXhGUVVGVlNTeEZRVUZaTEZkQlFWbGhMRU5CUVZFc1JVRkRka1FzUjBGQlNYQkVMRWRCUVZWQkxFVkJRVThzVFVGRGFrSXNUMEZCVDBFc1JVRkJUeXhMUVVOMFFpeFZRVVZMYTBNc1IwRkRSRlVzUjBGQldVWXNTVUZCYjBJc1JVRkJSeXhEUVVOdVF5eEpRVUZKVVN4RlFVRlZUaXhGUVVGVExFOUJRVTlGTEVWQlFXbENRU3hGUVVGcFFpeFBRVUZUTEVOQlFVTXNRMEZCUXl4RlFVTjJSVGxETEVWQlFWTnJReXhGUVVGVFNTeEZRVUZYTEZkQlFWbFpMRU5CUVU4c1JVRkRjRVFzUjBGQlNXeEVMRWRCUVZWQkxFVkJRVThzVFVGRGFrSXNUMEZCVDBFc1JVRkJUeXhMUVVOMFFpeFhRVWxJTEVOQlFVTTBReXhIUVVGWkxFTkJRVU5ITEVkQlFXRktMRWxCUVdkQ0xFVkJRVWNzUTBGRGJrUXNTVUZCU1ZVc1JVRkJWMUlzUlVGQmEwSXNUMEZCVXl4RlFVTjBRMU1zUlVGQldVNHNSVUZCYlVJc1QwRkJVeXhGUVVONFEwOHNSVUZCVjFZc1JVRkJhMEpSTEVOQlFWRXNSVUZCUlZBc1JVRkJhVUpQTEVOQlFWRXNRMEZCUXl4RlFVTnFSVWNzUlVGQldWSXNSVUZCYlVKTkxFTkJRVk1zUlVGQlJVd3NSVUZCYTBKTExFTkJRVk1zUTBGQlF5eEZRVU14UlN4SFFVRkpSU3hKUVVGalJDeEZRVUZWTEVOQlEzaENZaXhGUVVGclFpeEZRVU5zUWtZc1JVRkJZM3BFTEVWQlFVMHNTMEZCUzNWRUxFVkJRVmtzUlVGQlNTeEZRVU42UTBjc1JVRkJaVEZFTEVWQlFVMHNTMEZCUzNkRUxFVkJRV0VzUlVGQlNTeEZRVU16UXl4UlFVTktMRU5CUTBvc1EwRkRRVWNzUlVGQmEwSkRMRVZCUTJSQkxFVkJRV01zUlVGRFpFZ3NSVUZCWTNwRUxFVkJRVTBzUzBGQlMzVkVMRU5CUVZVc1JVRkhia05ITEVWQlFXVXhSQ3hGUVVGTkxFdEJRVXQzUkN4RFFVRlhMRU5CUlRkRExFTkJRMEVzUjBGQlNVTXNSMEZCWlU0c1JVRkRaaXhQUVVGUGJrUXNSVUZCVFN4cFFrRkJhVUoxUkN4RlFVRlpReXhGUVVGaFJpeEZRVUZWU0N4RFFVRlJMRVZCUXpkRkxFZEJRVWxQTEVkQlFXZENUaXhGUVVOb1FpeFBRVUZQY0VRc1JVRkJUU3hwUWtGQmFVSjNSQ3hGUVVGaFJDeEZRVUZaUkN4RlFVRlZSaXhEUVVGVExFTkJRMnhHTEVWQlIwRndSQ3hGUVVGTkxHbENRVUZ0UWl4VFFVRlZNRVVzUlVGQlVVTXNSVUZCWjBKRExFVkJRV0YyUlN4RlFVRlZMRU5CUXpsRkxFbEJRVWwzUlN4RlFVRlhOMFVzUlVGQlRTeFJRVUZSTUVVc1JVRkJVVU1zUlVGQlowSkRMRU5CUVZjc1JVRkRhRVVzUjBGQlNVTXNTVUZCWVN4SFFVTmlMRWRCUVVrc1EwRkJRemRGTEVWQlFVMHNTMEZCU3pCRkxFTkJRVTBzUlVGRGJFSXNXVUZGUTBjc1JVRkJWeXhIUVVOb1FqbENMRWRCUVUwc1IwRkJUeXc0UWtGQk9FSXNSVUZGTDBNc1QwRkJUeTlETEVWQlFVMHNWVUZCVlRCRkxFVkJRVkZ5UlN4RFFVRlJMRU5CUXpORExFVkJRMEZNTEVWQlFVMHNWVUZCV1N4VFFVRlZNRVVzUlVGQlVYSkZMRVZCUVZVc1EwRkZNVU1zVVVGRVNYbEZMRVZCUVZVc1IwRkRVRUVzUjBGQlV5eERRVU5hTEVsQlFVbDBReXhGUVVGUGEwTXNSVUZCVHl4TFFVRk5TeXhGUVVGbFRDeEZRVUZQTEdGQlFXTk5MRVZCUVdGT0xFVkJRVThzVjBGRGFFWXNSMEZCU1d4RExFVkJRVTBzUTBGRFRpeEpRVUZKZWtJc1JVRkJVWGxDTEVWQlFVc3NUMEZCVDNWRExFVkJRV0ZCTEVWQlFXRXNUMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkRla1E1UkN4RlFVRlRXaXhGUVVGVE1rVXNSVUZCV1dwRkxFTkJRVXNzUlVGRGRrTXNSMEZCU1VVc1IwRkJWVUVzUlVGQlR5eE5RVU5xUWl4UFFVRlBRU3hGUVVGUExFdEJRM1JDTEVOQlEwRTJSQ3hGUVVGVk9VVXNSVUZCVFN4TFFVRkxNRVVzUTBGQlRTeERRVU12UWl4RFFVVktMRVZCUTBFeFJTeEZRVUZOTEdWQlFXbENMRk5CUVZWcFJpeEZRVUZOTEVOQlEyNURMRWxCUVVsRExFVkJRVkZFTEVWQlFVc3NUVUZCVDBVc1JVRkJVMFlzUlVGQlN5eFBRVU4wUXl4TlFVRlBMRU5CUVVVc1QwRkJVVVVzUlVGQlVTeGpRVUZsTEVOQlFVTXNRMEZCUTBRc1EwRkJTeXhEUVVGRExFVkJRVWNzWVVGQll5eERRVUZETEVOQlFVTXNSVUZCUnl4TFFVRk5MRTlCUVZjc1YwRkJXVUVzUlVGQlRTeFBRVUZQTEVOQlFVVXNRMEZEZEVnc1JVRlJRV3hHTEVWQlFVMHNTMEZCVHl4VFFVRlZNRVVzUlVGQlVWVXNSVUZCV1N4RFFVTjJReXhKUVVGSlF5eEZRVUZuUWxnc1JVRkJUeXhqUVVGbFN5eEZRVUZsVEN4RlFVRlBMR0ZCUVdOc1F5eEZRVUZQYTBNc1JVRkJUeXhMUVVNMVJpeEhRVUZKVlN4SlFVRmxMRWxCUVZFMVF5eEZRVUZOTEVOQlF6ZENMRWxCUVVrNFF5eEZRVUZsVUN4RlFVRmhMRTlCU1doRExFZEJRVWxMTEVsQlFXVXNTVUZCVVV3c1JVRkJZVThzUlVGQlpTeERRVUZETEVsQlFVMHNSVUZCUnl4RFFVTTNSQ3hKUVVGSlF5eEZRVUZqUml4RlFVRmpMRTlCUldoRExFZEJRVWxGTEVsQlFXZENMRVZCUTJoQ0xFMUJRVThzUjBGSldDeFJRVVpKUXl4RlFVRnBRa1FzUlVGQll5eEZRVU12UWtVc1JVRkJjVUpFTEVWQlEyeENReXhIUVVGelFpeEhRVUZITEVOQlF6VkNMRWRCUVVsV0xFVkJRV0ZWTEVOQlFXdENMRVZCUVVrc1JVRkRia01zVDBGQlNVRXNSVUZCY1VKSUxFVkJRV1VzU1VGRmNFTmFMRVZCUVU4c1MwRkJUeXhQUVVOa1N5eEZRVUZoTEVsQlFVa3NSMEZIYWtKVkxFVkJRWEZDUkN4SlFVTnlRbVFzUlVGQlR5eGpRVUZuUWxjc1JVRkJZeXhOUVVGTkxFVkJRVWRKTEVWQlFYRkNMRU5CUVVNc1IwRkZlRVZtTEVWQlFVOHNWMEZCWVZjc1JVRkJZMGtzUTBGQmEwSXNSVUZCUlN4RlFVRkZWaXhGUVVGaFZTeERRVUZyUWl4RFFVRkRMRVZCUVVVc1QwRkJUeXhGUVVNeFJpeEhRVVZZUVN4SFFVTktMRU5CUlVFc1RVRkJUeXhGUVVOWUxFdEJRMHNzUTBGRlJDeEpRVUZKUXl4RlFVRmhMRVZCUVVWWUxFVkJRV0ZQTEVWQlFXVXNRMEZCUXl4RlFVTm9SQ3hQUVVGQldpeEZRVUZQTEZkQlFXRnNReXhGUVVGTExFdEJRVXRyUkN4RFFVRlZMRVZCUTJwRExFVkJRMWdzUTBGRFNpeExRVU5MTEVOQlEwUXNTVUZCU1VNc1JVRkJXVTRzUlVGQll5eFBRVU14UWs4c1JVRkJaVVFzUlVGQldTeEZRVU16UWtVc1JVRkJUMUlzUlVGQlkwOHNRMEZCV1N4RlFVRkZZaXhGUVVGaFlTeERRVUZaTEVOQlFVTXNSVUZEYWtVc1IwRkJTVU1zUlVGQlN5eFBRVUZSTEVOQlJXSnVRaXhGUVVGUExFdEJRVTl0UWl4RlFVTmtMRWxCUVVsSUxFVkJRV0ZZTEVWQlFXRlpMRU5CUVZNc1JVRkJTVVVzUlVGQlN5eFBRVUZQTEU5QlFWTXNSVUZEYUVWdVFpeEZRVUZQTEZkQlFXRnRRaXhGUVVGTExFdEJRVXRJTEVOQlFWVXNRMEZETlVNc1MwRkRTeXhEUVVORUxFbEJRVWxKTEVWQlFWZEVMRVZCUVVzc1UwRkRjRUpTTEVWQlFXTk5MRU5CUVZNc1JVRkJTVWNzUlVGRE0wSXNTVUZCU1VNc1JVRkJZVVFzUlVGQlV5eFBRVUZUTEVWQlEyNURaaXhGUVVGaFdTeERRVUZUTEVWQlFVbEpMRVZCUXpGQ2NrSXNSVUZCVHl4WFFVRmhiMElzUlVGQlUwTXNRMEZCVlN4RlFVRkZMRTlCUVU4c1EwRkRjRVFzUTBGRFFTeE5RVUZQTEVWQlExZ3NRMEZEU2l4RlFVdEJMMFlzUlVGQlRTeFJRVUZWTEZOQlFWVm5SeXhGUVVGVFF5eEZRVUZUY2tJc1JVRkJZU3hEUVVOeVJDeEpRVUZKYzBJc1JVRkJWVVlzUlVGQlVTeFBRVUZSUnl4RlFVRmpTQ3hGUVVGUkxGZEJRVmxKTEVWQlFXZENTaXhGUVVGUkxHRkJRM0JHU3l4RlFVRlZTaXhGUVVGUkxFOUJRVkZMTEVWQlFXTk1MRVZCUVZFc1YwRkJXVTBzUlVGQlowSk9MRVZCUVZFc1lVRkZjRVpQTEVWQlFXZENOVUlzUlVGQldUQkNMRVZCUVdGSUxFTkJRVmNzUlVGRGVFUXNSMEZCU1Vzc1NVRkJhMElzUlVGRGJFSXNUMEZCVDBFc1JVRlBXQ3hKUVVGSlF5eEZRVUZaVUN4RlFVRlZSeXhGUVVGVlNDeEZRVUZWUnl4RlFVTXhRMHNzUlVGQmJVSk9MRVZCUVdNc1VVRkJWVVlzUlVGQlZVOHNSMEZEY2tSRkxFVkJRVzFDU2l4RlFVRmpMRkZCUVZWR0xFVkJRVlZKTEVkQlEzcEVMRTlCUVU5RExFVkJRVzFDUXl4RFFVTTVRaXhGUVV0Qk0wY3NSVUZCVFN4VlFVRlZMRXRCUVU4c1UwRkJWVFJITEVWQlFWVXNRMEZEZGtNc1NVRkJTVGRGTEVWQlFVc3NTMEZCU3l4UlFVRlJOa1VzUlVGQlZUVkZMRVZCUVZjc1JVRkRNME1zVDBGQlQwc3NSMEZCVXl4VlFVRlpMRU5CUTNoQ0xFbEJRVWwzUlN4RlFVRkpPVVVzUlVGQlJ5eExRVUZMTEVWQlEyaENMRTlCUVVrNFJTeEZRVUZGTEZGQlEwWkJMRVZCUVVVc1RVRkJVVUVzUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZEYUVKQkxFTkJRMWdzUTBGQlF5eERRVU5NTEVWQlIwRTNSeXhGUVVGTkxGVkJRVlVzVDBGQlV5eFRRVUZWTkVjc1JVRkJWU3hEUVVONlF5eEpRVUZKTjBVc1JVRkJTeXhMUVVGTExGRkJRVkUyUlN4RlFVRlZOVVVzUlVGQlZ5eEZRVU16UXl4UFFVRlBTeXhIUVVGVExGVkJRVmtzUTBGRGVFSXNTVUZCU1hkRkxFVkJRVWs1UlN4RlFVRkhMRXRCUVVzc1JVRkRhRUlzVDBGQlNUaEZMRVZCUVVVc1VVRkRSa0VzUlVGQlJTeE5RVUZSUVN4RlFVRkZMRTFCUVUwc1EwRkJReXhIUVVOb1FrRXNRMEZEV0N4RFFVRkRMRU5CUTB3c1JVRkRRU3hQUVVGUExHVkJRV1UzUnl4RlFVRk5MRlZCUVZjc1kwRkJaU3hEUVVsc1JDeEpRVUZMTEZWQlFWa3NRMEZEWWl4UFFVRlBMRXRCUVVzc1dVRkRhRUlzUlVGRFFTeFhRVUZaTEVkQlExb3NZVUZCWXl4RlFVTnNRaXhEUVVGRExFVkJSVVJCTEVWQlFVMHNWVUZCVlN4UFFVRlRMRlZCUVZrc1EwRkJSU3hQUVVGUExFdEJRVXNzVFVGQlRTeFBRVUZQTEVOQlFVY3NSVUZGYmtWQkxFVkJRVTBzVlVGQlZTeFBRVUZUTEZWQlFWa3NRMEZCUlN4UFFVRlBMRXRCUVVzc1RVRkJUU3hQUVVGUExFTkJRVWNzUlVGTmJrVkJMRVZCUVUwc1ZVRkJWU3hOUVVGUkxGVkJRVmtzUTBGRGFFTXNTMEZCU3l4TlFVRk5MRk5CUVZjc1IwRkRkRUlzU1VGQlNXbENMRVZCUVZNc1NVRkJTV3BDTEVWQlFVMHNUMEZCVnl4TFFVRkxMRk5CUVZVc1MwRkJTeXhaUVVGWkxFVkJRMnhGTEU5QlFVRnBRaXhGUVVGUExFMUJRVkVzUzBGQlN5eE5RVU53UWtFc1JVRkJUeXhOUVVGUkxFdEJRVXNzVFVGRFlrRXNRMEZEV0N4RlFVMUJha0lzUlVGQlRTeFZRVUZWTEZsQlFXTXNVMEZCVlRoSExFVkJRVThzUTBGRE0wTXNTVUZCU1RkR0xFVkJRVk1zU1VGQlNXcENMRVZCUVUwc1QwRkJWeXhMUVVGTExGTkJRVlVzUzBGQlN5eFpRVUZaTEVWQlEyeEZMRTlCUVVGcFFpeEZRVUZQTEUxQlFWRXNTMEZCU3l4TlFVRk5MRmxCUVZrMlJpeERRVUZMTEVWQlF6TkROMFlzUlVGQlR5eE5RVUZSTEV0QlFVc3NUVUZEWWtFc1EwRkRXQ3hGUVVWQmFrSXNSVUZCVFN4VlFVRlZMRkZCUVZVc1UwRkJWU3RITEVWQlFWY3NRMEZEZGtOQkxFbEJRV01zVTBGQlZVRXNSVUZCV1N4WlFVTjRReXhKUVVGSlF5eEZRVUZOTEV0QlFVc3NUMEZCVHl4RlFVRkhReXhGUVVGTkxFdEJRVXNzVDBGQlR5eEZRVU16UXl4UFFVRkpSQ3hKUVVGUkxFOUJRMFFzUzBGQlN5eFRRVUZUUVN4RlFVRkxReXhGUVVGTExFZEJRVTFHTEVOQlFWTXNSVUZETTBNc1EwRkJReXhEUVVOYUxFVkJSVUV2Unl4RlFVRk5MRlZCUVZVc1ZVRkJXU3hWUVVGWkxFTkJRM0JETEVsQlFVbHJTQ3hGUVVGVkxFTkJRVU1zUlVGRFppeFpRVUZMTEUxQlFVMHNVMEZCVXl4TFFVRkxMRTlCUVU4c1JVRkJSeXhMUVVGTExFOUJRVThzUlVGQlJ5eEhRVUZOTEVkQlFVOHNTMEZCVFN4RlFVRkhMRk5CUVZVeFJ5eEZRVUZIUXl4RlFVRkhMRU5CUVVWNVJ5eEZRVUZSTEV0QlFVc3hSeXhEUVVGRExFTkJRVWNzUTBGQlF5eEZRVU55UnpCSExFTkJRMWdzUlVGRlFXeElMRVZCUVUwc1ZVRkJWU3haUVVGakxGVkJRVmtzUTBGRGRFTXNTVUZCU1d0SUxFVkJRVlVzUTBGQlF5eEZRVU5tTEZsQlFVc3NUVUZCVFN4VFFVRlRMRXRCUVVzc1QwRkJUeXhGUVVGSExFdEJRVXNzVDBGQlR5eEZRVUZITEVkQlFVMHNSMEZCVHl4TFFVRk5MRVZCUVVjc1UwRkJWVEZITEVWQlFVZERMRVZCUVVjc1EwRkJSWGxITEVWQlFWRXNTMEZCUzNwSExFTkJRVU1zUTBGQlJ5eERRVUZETEVWQlEzSkhlVWNzUTBGRFdDeEZRVVZCYkVnc1JVRkJUU3hWUVVGVkxGTkJRVmNzVlVGQldTeERRVU51UXl4UFFVRlBMRXRCUVVzc1VVRkJVU3hGUVVGRkxGTkJRVk1zUTBGRGJrTXNSVUZKUVVFc1JVRkJUU3hWUVVGVkxHZENRVUZyUWl4VFFVRlZZU3hGUVVGTFJTeEZRVUZQTEVOQlEzQkVMRTlCUVU4c1MwRkJTeXhKUVVGSlJpeEZRVUZMUlN4RlFVRlBMRVZCUVVzc1EwRkRja01zUlVGUFFXWXNSVUZCVFN4VlFVRlZMR1ZCUVdsQ0xGTkJRVlZoTEVWQlFVdHpRaXhGUVVGaExFTkJSWHBFTEU5QlJFRkJMRVZCUVdOQkxFZEJRV1VzUTBGQlF5eEZRVU14UW5SQ0xFbEJRVkVzVDBGRFJDeExRVUZMTEUxQlFVMHNVVUZCVVhOQ0xFTkJRVmNzUlVGRmJFTXNTMEZCU3l4TlFVRk5MRzlDUVVGdlFuUkNMRVZCUVVzc1MwRkJTeXhUUVVGVkxFZEJRVTl6UWl4RFFVRlhMRU5CUTJoR0xFVkJTVUZ1UXl4RlFVRk5MRlZCUVZVc1kwRkJaMElzVTBGQlZXRXNSVUZCU3l4RFFVTXpReXhKUVVGSmNFSXNSVUZCU1N4TFFVRkxMR1ZCUVdWdlFpeEZRVUZMYlVJc1JVRkJWeXhGUVVNMVF5eFBRVUZQZGtNc1IwRkJTMEVzUlVGQlJTeERRVUZETEVOQlEyNUNMRVZCVDBGUExFVkJRVTBzVlVGQlZTeGpRVUZuUWl4VFFVRlZZU3hGUVVGTGMwSXNSVUZCWVN4RFFVVjRSQ3hQUVVSQlFTeEZRVUZqUVN4SFFVRmxMRU5CUVVNc1JVRkRNVUowUWl4SlFVRlJMRTlCUTBRc1MwRkJTeXhOUVVGTkxGRkJRVkZ6UWl4RFFVRlhMRVZCUld4RExFdEJRVXNzVFVGQlRTeHRRa0ZCYlVKMFFpeEZRVUZMTEV0QlFVc3NVMEZCVlN4SFFVRlBjMElzUTBGQlZ5eERRVU12UlN4RlFVbEJia01zUlVGQlRTeFZRVUZWTEdGQlFXVXNVMEZCVldFc1JVRkJTeXhEUVVNeFF5eEpRVUZKY0VJc1JVRkJTU3hMUVVGTExHTkJRV052UWl4RlFVRkxiVUlzUlVGQlZ5eEZRVU16UXl4UFFVRlBka01zUjBGQlMwRXNSVUZCUlN4RFFVRkRMRU5CUTI1Q0xFVkJVVUZQTEVWQlFVMHNWVUZCVlN4dFFrRkJjVUlzVTBGQlZXRXNSVUZCUzNOQ0xFVkJRV0VzUTBGRE4wUXNUMEZCVHl4TFFVRkxMRTFCUVUwc2JVSkJRVzFDZEVJc1JVRkJTeXhMUVVGTExGTkJRVlVzUjBGQlRYTkNMRWRCUVdVc1EwRkJReXhEUVVGRExFTkJRM0JHTEVWQlVVRnVReXhGUVVGTkxGVkJRVlVzYjBKQlFYTkNMRk5CUVZWaExFVkJRVXR6UWl4RlFVRmhMRU5CUXpsRUxFOUJRVThzUzBGQlN5eE5RVUZOTEc5Q1FVRnZRblJDTEVWQlFVc3NTMEZCU3l4VFFVRlZMRWRCUVUxelFpeEhRVUZsTEVOQlFVTXNRMEZCUXl4RFFVTnlSaXhGUVVsQmJrTXNSVUZCVFN4VlFVRlZMR2RDUVVGclFpeFRRVUZWWVN4RlFVRkxSU3hGUVVGUExFTkJRM0JFTEU5QlFVOHNTMEZCU3l4VlFVRlZSaXhGUVVGTFFTeEZRVUZMTEVkQlFVMHNVMEZCVlV3c1JVRkJSME1zUlVGQlJ5eERRVUZGTEUxQlFWRXNRMEZCUlN4TlFVRlBUU3hEUVVGTkxFTkJRVWtzUTBGQlF5eEpRVUZOTEVOQlF6bEdMRVZCWVVGbUxFVkJRVTBzVlVGQlZTeFRRVUZYTEZOQlFWVlhMRVZCUVV0RExFVkJRVTFoTEVWQlFXRnpSaXhGUVVGWExFTkJRMmhGUVN4SlFVRmpMRk5CUVZWQkxFVkJRVmtzVlVGRGVFTXNTVUZCU1Vjc1JVRkJWU3hEUVVGRExFVkJRMllzV1VGQlN5eE5RVUZOTEZOQlFWTjJSeXhGUVVGTFF5eEZRVUZOWVN4RlFVRmhMRWRCUVU4c1MwRkJUU3hGUVVGSExGTkJRVlZxUWl4RlFVRkhReXhGUVVGSExFTkJRM2hGTEU5QlFVRjVSeXhGUVVGUkxFdEJRVXNzUTBGQlF6RkhMRVZCUVVkRExFTkJRVU1zUTBGQlF5eEZRVU5hZVVjc1JVRkJVU3hQUVVGVFNDeEZRVUZaU1N4SFFVRlJMRTFCUTJoRUxFTkJRVU1zUlVGRFRVUXNRMEZEV0N4RlFWVkJiRWdzUlVGQlRTeFZRVUZWTEZOQlFWY3NVMEZCVlhGQ0xFVkJRVTlNTEVWQlFWY3NRMEZGYmtRc1VVRkVTVzlITEVWQlFWRXNSVUZEU0hwR0xFVkJRVWtzUlVGQlIwRXNSVUZCU1U0c1JVRkJUU3hQUVVGUlRTeEpRVU14UWl4TFFVRkxMRWxCUVVsT0xFVkJRVTFOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVkT0xFVkJRVTFOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVkWUxFTkJRVk1zUjBGRE5VTnZSeXhKUVVOU0xFOUJRVTlCTEVOQlExZ3NSVUZyUWtGd1NDeEZRVUZOTEZWQlFWVXNVMEZCVnl4VFFVRlZWeXhGUVVGTFF5eEZRVUZOWVN4RlFVRmhORVlzUlVGQlV6TkhMRVZCUVdkQ0xFTkJRMnhHTEVsQlFVazBSeXhGUVVGSkxFdEJRVXNzVFVGQlRTeFRRVUZUTTBjc1JVRkJTME1zUlVGQlRXRXNSVUZCWVN4SFFVRlBMRXRCUVUxbUxFZEJRV3RDTEVWQlFVY3lSeXhEUVVGUExFVkJRemRHTEU5QlFVOHNUMEZCVDBNc1IwRkJUU3hUUVVGWFFTeEZRVUZKUVN4RlFVRkZMRXRCUTNwRExFVkJPRUpCZEVnc1JVRkJUU3hWUVVGVkxGVkJRVmtzVTBGQlZWY3NSVUZCUzBNc1JVRkJUV0VzUlVGQllUUkdMRVZCUVZNelJ5eEZRVUZuUWl4RFFVTnVSaXhKUVVGSk5rY3NSVUZCVHl4TFFVRkxMRTFCUTFwQkxFVkJRVXNzVjBGRFRDeExRVUZMTEUxQlFWRkJMRVZCUVU5QkxFVkJRVXNzVFVGQlRTeEhRVU51UXl4SFFVRkpMRU5CUTBFc1NVRkJTVVFzUlVGQlNVTXNSVUZCU3l4VFFVRlROVWNzUlVGQlMwTXNSVUZCVFdFc1JVRkJZU3hIUVVGTkxFdEJRVTFtTEVkQlFXdENMRVZCUVVjeVJ5eERRVUZQTEVWQlEzUkdMRTlCUVU4c1QwRkJUME1zUjBGQlRTeFRRVUZYUVN4RlFVRkpRU3hGUVVGRkxFdEJRM3BETEZGQlEwRXNRMEZGU1N4UlFVUkpSU3hGUVVGWExFOUJRMUpFTEVWQlFVc3NTMEZCU3l4UlFVRlZMRWRCUVVzc1EwRkJRMEVzUlVGQlN5eFJRVU5zUTBNc1NVRkJZVUVzUlVGQlYwUXNSVUZCU3l4VlFVTTNRaXhMUVVGTExFMUJRVkZCTEVWQlFVOUJMRVZCUVVzc1MwRkJTeXhUUVVGWExFVkJRVWx1U0N4SFFVTjZRMjFJTEVWQlFVc3NVMEZCVXl4RFFVRkRMRVZCUjI1Q1F5eEpRVU5CUkN4RlFVRkxMRk5CUVZjc1IwRkZlRUlzUTBGRFNpeEZRVVZCZGtnc1JVRkJUU3hWUVVGVkxGRkJRVlVzVTBGQlZYRklMRVZCUVZNelJ5eEZRVUZuUWl4RFFVTjZSQ3hQUVVGUExFdEJRVXNzVlVGQlZTeExRVUZMTEU5QlFVOHNSVUZCUnl4TFFVRkxMRTlCUVU4c1JVRkJSeXhIUVVGTk1rY3NSVUZCVXpOSExFTkJRV01zUTBGRGNrWXNSVUZUUVZZc1JVRkJUU3hWUVVGVkxGbEJRV01zVTBGQlZWY3NSVUZCUzBNc1JVRkJUV0VzUlVGQllTeERRVU0xUkN4UFFVRlBMRXRCUVVzc1ZVRkJWV1FzUlVGQlMwTXNSVUZCVFdFc1JVRkJZVTRzUlVGQlZ5eERRVU0zUkN4RlFVVkJia0lzUlVGQlRTeFZRVUZWTEZkQlFXRXNVMEZCVlhOQ0xFVkJRVTBzUTBGRGVrTXNVVUZCVTBzc1JVRkJTU3hGUVVGSExFVkJRVWtzUlVGQlIwRXNSVUZCU1V3c1JVRkJTeXhQUVVGUlN5eEpRVU5vUXl4TFFVRkxMRTlCUVU5TUxFVkJRVXRMTEVOQlFVTXNRMEZCUXl4SFFVTnVRaXhKUVVOU0xFOUJRVThzUTBGRFdDeEZRVU5CTEU5QlFVOHNaVUZCWlROQ0xFVkJRVTBzVlVGQlZ5eFRRVUZWTEVOQlJ6ZERMRWxCUVVzc1ZVRkJXU3hEUVVkaUxGRkJSa2syUml4RlFVRlBMRXRCUVVzc1RVRkRXbFlzUlVGQlV5eEhRVU5PVlN4SFFVTklWaXhKUVVOQlZTeEZRVUZQUVN4RlFVRkxMRTlCUVZNc1QwRkJXVUVzUlVGQlN5eFRRVUZUTEVOQlFVTXNSVUZGY0VRc1QwRkJUMVlzUTBGRFdDeEZRVU5CTEZkQlFWa3NSMEZEV2l4aFFVRmpMRVZCUTJ4Q0xFTkJRVU1zUlVGUFJHNUdMRVZCUVUwc1ZVRkJWU3hQUVVGVExGVkJRVmtzUTBGRGFrTXNTVUZCU1hsSUxFVkJRVWtzUzBGSFVrRXNSVUZCUlN4TlFVRlJRU3hGUVVGRkxFbEJRVTFCTEVWQlFVVXNWVUZCV1N4VlFVRlpMRU5CUTNoRExFMUJRVTBzU1VGQlNTeE5RVUZOTEc5RFFVRnZReXhEUVVONFJDeERRVU5LTEVWQlJVRjZTQ3hGUVVGTkxGVkJRVlVzVTBGQlZ5eFZRVUZaTEVOQlIyNURMRTlCUVU4c1MwRkJTeXhOUVVWYUxFOUJRVThzUzBGQlN5eEpRVVZhTEU5QlFVOHNTMEZCU3l4VFFVTm9RaXhGUVVOQkxFOUJRVThzWlVGQlpVRXNSVUZCVFN4VlFVRlhMRmRCUVZrc1EwRkZMME1zU1VGQlN5eFZRVUZaTEVOQlEySXNUMEZCVHl4TFFVRkxMR1ZCUVdVc1YwRkJWeXhEUVVNeFF5eEZRVU5CTEZkQlFWa3NSMEZEV2l4aFFVRmpMRVZCUTJ4Q0xFTkJRVU1zUlVGTlJFRXNSVUZCVFN4VlFVRlZMRmRCUVdFc1ZVRkJXU3hEUVVOeVF5eEpRVUZKTUVnc1JVRkJUeXhMUVVGTExFMUJRVTBzVjBGQlZ5eEZRVUZITEV0QlFVMHNRMEZCUXl4RlFVTXpRek5GTEVkQlFVMHlSU3hKUVVGVExFdEJRVXNzUzBGQlRTd3dRa0ZCTWtKQkxFVkJRVTBzWVVGQll5eExRVUZMTEVsQlFVa3NRMEZEZEVZc1JVRkRUekZJTEVOQlExZ3NSVUZCUlN4RlFVTkdXaXhIUVVGUkxGRkJRVlZaTEVkQlRXeENMRk5CUVZNeVNDeEhRVUZOUXl4RlFVRlBMRU5CUTJ4Q0xFOUJRVTlCTEVOQlExZ3NRMEZEUVhoSkxFZEJRVkVzVFVGQlVYVkpMRWRCUTFvc1VVRkJWU3hQUVVGUExGZEJRMnBDTTBnc1IwRkJUU3hWUVVGVkxFOUJRVThzVVVGQlVTeEZRVUZKUVN4SFFVRk5MRlZCUVZVc1UwRkRka1JCTEVkQlFVMHNWVUZCVlN4TlFVRlJRU3hIUVVGTkxGVkJRVlVzVDBGRGVFTkJMRWRCUVUwc1ZVRkJWU3hUUVVGWFFTeEhRVUZOTEZWQlFWVXNVMEZETTBOQkxFZEJRVTBzVlVGQlZTeEpRVUZOUVN4SFFVRk5MRlZCUVZVc1NVRkRkRU1zVTBGQlUzRkRMRWRCUVZOS0xFVkJRVTBzUTBGRGFFSkJMRWxCUVZNc1UwRkJWVUVzUlVGQlVTeFZRVUZaTEVOQlFVVXNUVUZCVVN4RFFVRkZMRXRCUVUwc1IwRkJUU3hOUVVGUExFMUJRVlVzUTBGQlNTeEhRVU40Uml4SlFVRkphRUlzUlVGQlV5eERRVUZGTEV0QlFVMW5RaXhEUVVGTExFVkJRekZDTEU5QlFVa3NVVUZCVlN4UFFVRlBMRmRCUTJwQ2FFSXNSVUZCVHl4UFFVRlBMRkZCUVZFc1JVRkJTU3hWUVVGWkxFTkJRVVVzVDBGQlR5eEpRVUZOTEVkQlEyeEVRU3hEUVVOWUxFTkJSVUVzU1VGQlNUUkhMRWRCUVhWQ0xGVkJRVmtzUTBGRGJrTXNVMEZCVTBFc1JVRkJUWFpITEVWQlFVMTNSeXhGUVVGUkxFTkJRM0pDZUVjc1NVRkJVeXhUUVVGVlFTeEZRVUZQTEVOQlFVTXNSMEZETDBJc1MwRkJTeXhMUVVGUFFTeEZRVU5hTEV0QlFVc3NUMEZCVTNkSExFZEJRVlZETEVkQlEzaENMRXRCUVVzc1UwRkJWeXhOUVVOd1FpeERRVU5CTEdOQlFVOHNaVUZCWlVZc1JVRkJUU3hWUVVGWExGTkJRVlVzUTBGRE4wTXNTVUZCU3l4VlFVRlpMRU5CUVVVc1QwRkJUeXhMUVVGTExGZEJRV0VzVFVGQlZ5eEZRVU4yUkN4WFFVRlpMRWRCUTFvc1lVRkJZeXhGUVVOc1FpeERRVUZETEVWQlIwUkJMRVZCUVUwc1ZVRkJWU3hQUVVGVExGVkJRVmtzUTBGRGFrTXNUMEZCVHl4TFFVRkxMRXRCUVVzc1MwRkJTeXhMUVVGTExFOUJRVk1zUTBGQlF5eERRVU42UXl4RlFVZEJRU3hGUVVGTkxGVkJRVlVzVVVGQlZTeFRRVUZWYUVnc1JVRkJTMjFJTEVWQlFWTkRMRVZCUVVzc1EwRkhia1FzVVVGR1NUTkhMRVZCUVU4c1MwRkJTeXhMUVVOYU5FY3NSVUZCU3l4RlFVRkhReXhGUVVGTE4wY3NSVUZCU3l4UFFVRlJPRWNzUlVGQlRVUXNSMEZCVFN4RlFVTnVRMFFzUlVGQlMwTXNSMEZCU1N4RFFVTmFMRWxCUVVsRkxFVkJRVWxLTEVWQlFVa3pSeXhGUVVGTE9FY3NRMEZCUnl4RlFVRkhka2dzUTBGQlJ5eEZRVU14UWl4SFFVRkpkMGdzUlVGQlNTeEZRVU5LU0N4RlFVRkxSU3hGUVVGTkxGVkJRMDVETEVWQlFVa3NSVUZEVkVZc1JVRkJTME1zVFVGRFNpeEpRVUZKUXl4SlFVRk5MRVZCUTFnc1QwRkJUMFFzUlVGSFVDeEhRVUZKZGtnc1NVRkJVVUVzUlVGRFVpeFBRVUZQVXl4RlFVRkxMRTlCUlZvc1RVRkJUU3hKUVVGSkxFMUJRVTBzT0VKQlFUaENMRVZCUlhSRU9FY3NSVUZCVDBZc1JVRkJTME1zUjBGQlR5eERRVU4yUWl4RFFVTkJMRTlCUVU5RExFVkJRVTFLTEVOQk5rTnFRaXhGUVVkQlNDeEZRVUZOTEZWQlFWVXNUMEZCVXl4VlFVRlpMRU5CUTJwRExFOUJRVThzUzBGQlN5eExRVUZMTEVOQlFVTXNRMEZEZEVJc1JVRkRRVUVzUlVGQlRTeFZRVUZWTEZGQlFWVXNVMEZCVlRGR0xFVkJRV0VzUTBGRE4wTXNSMEZCU1N4TFFVRkxMRXRCUVVzc1UwRkJWeXhGUVVWNlFpeFBRVUZCUVN4RlFVRlpMRU5CUVVNc1JVRkJTU3hMUVVGTExFdEJRVXNzUTBGQlF5eEZRVU0xUWtFc1JVRkJXU3hEUVVGRExFVkJRVWtzUzBGQlN5eFBRVUZQTEVOQlFVTXNSVUZEZGtKQkxFTkJRMWdzUlVGRFFUQkdMRVZCUVUwc1ZVRkJWU3hSUVVGVkxGTkJRVlV4Uml4RlFVRmhMRU5CUXpkRExFZEJRVWtzUzBGQlN5eExRVUZMTEZOQlFWY3NSVUZGZWtJc1MwRkJTVzFITEVWQlFWa3NTMEZCU3l4TFFVRkxMRTlCUVZNc1JVRkRia01zVDBGQlFXNUhMRVZCUVZrc1EwRkJReXhGUVVGSkxFdEJRVXNzUzBGQlMyMUhMRU5CUVZNc1JVRkRjRU51Unl4RlFVRlpMRU5CUVVNc1JVRkJTU3hMUVVGTExFOUJRVTl0Unl4RFFVRlRMRVZCUXk5Q2JrY3NSVUZEV0N4RlFVTkJNRVlzUlVGQlRTeFZRVUZWTEUxQlFWRXNWVUZCV1N4RFFVTm9ReXhKUVVGSmNFZ3NSVUZCU1N4TFFVRkxMRTlCUTJJc1QwRkJUeXhKUVVGSmIwZ3NSVUZCVFN4TFFVRkxMRXRCUVVzc1RVRkJUU3hEUVVGRExFVkJRVWR3U0N4SlFVRk5jMGdzUjBGQldYUklMRVZCUVVsQkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZEZWtVc1JVRkRRVzlJTEVWQlFVMHNWVUZCVlN4WlFVRmpMRk5CUVZWbUxFVkJRVThzUTBGRE0wTXNUMEZCVHl4TFFVRkxMRlZCUVZrc1EwRkJRMEVzUlVGQlVTeExRVUZQTEV0QlFVc3NUVUZCVFN4RFFVTjJSQ3hGUVVOQlpTeEZRVUZOTEZWQlFWVXNTVUZCVFN4VFFVRlZhRWdzUlVGQlMwTXNSVUZCWTIxRkxFVkJRVTBzUTBGRGNrUXNTVUZCU1hSRUxFVkJRVWtzUzBGQlN5eFJRVUZSWkN4RlFVRkxMRWRCUVVsdlJTeEZRVUZMTEZGQlFWRXNSVUZETTBNc1QwRkJUM1JFTEVWQlFVa3NSVUZCU1dJc1JVRkJaU3hMUVVGTExFOUJRVTloTEVOQlFVTXNRMEZETDBNc1JVRkRRV3RITEVWQlFVMHNWVUZCVlN4dFFrRkJjVUlzVTBGQlZXaElMRVZCUVV0WUxFVkJRVk54U1N4RlFVRlhjRWNzUlVGQllTeERRVU5xUml4SlFVRkpMRVZCUVVrc1MwRkJTeXhSUVVGUmRFSXNSVUZCU3l4SFFVRkpXQ3hEUVVGUExFVkJRMnBEYzBrc1JVRkJaU3hGUVVGSkxFVkJRVWtzUTBGQlF5eEZRVUZKTEVWQlFVdEVMRVZCUVZrc1JVRkJTU3hGUVVGSkxFVkJRM3BFTEVkQlFVbERMRWRCUVdkQ0xFVkJRMmhDTEU5QlFVRnlSeXhGUVVGWkxFTkJRVU1zUlVGQlNTeExRVUZMTEV0QlFVdHhSeXhEUVVGWkxFVkJRM1pEY2tjc1JVRkJXU3hEUVVGRExFVkJRVWtzUzBGQlN5eFBRVUZQY1Vjc1EwRkJXU3hGUVVOc1EzSkhMRU5CUjJZc1JVRkRRVEJHTEVWQlFVMHNWVUZCVlN4dlFrRkJjMElzVTBGQlZXaElMRVZCUVV0WUxFVkJRVk54U1N4RlFVRlhjRWNzUlVGQllTeERRVU5zUml4SlFVRkpMRVZCUVVrc1MwRkJTeXhSUVVGUmRFSXNSVUZCU3l4SFFVRkpXQ3hEUVVGUExFVkJRMnBEYzBrc1JVRkJaU3hGUVVGSkxFVkJRVWtzUTBGQlF5eEZRVUZMUkN4RlFVRlpMRVZCUVVrc1JVRkJTU3hGUVVOcVJHcElMRVZCUVU4c1MwRkJTeXhMUVVOb1FpeEhRVUZKYTBnc1JVRkJaV3hJTEVWQlFVc3NUMEZEY0VJc1QwRkJRV0VzUlVGQldTeERRVUZETEVWQlFVbGlMRVZCUVV0clNDeERRVUZaTEVWQlEyeERja2NzUlVGQldTeERRVUZETEVWQlFVa3NTMEZCU3l4UFFVRlBjVWNzUTBGQldTeEZRVU5zUTNKSExFTkJSMllzUlVGRFFUQkdMRVZCUVUwc1ZVRkJWU3hYUVVGaExGTkJRVlZaTEVWQlFVOTRSQ3hGUVVGTmVVUXNSVUZCVnl4RFFVTXpSQ3hKUVVGSlF5eEZRVUZMTEV0QlFVc3NTMEZCU3l4UFFVRlJReXhGUVVGTExFdEJRVXNzVDBGQlR5eFBRVU0xUXl4UFFVRkJOMFlzUjBGQlRTeExRVUZMTEZOQlFWZG5SaXhIUVVGWldTeEhRVUZOUXl4RlFVRkxSQ3hKUVVGUFF5eEZRVUZKTEhGRFFVRnpRMGdzUlVGQlR5eGxRVUZuUWtVc1JVRkJTVU1zUlVGQlNTeG5Ra0ZCYVVKR0xFTkJRVk1zUlVGTmRrb3pSaXhIUVVGTk1FWXNSMEZCVXl4SFFVRkxSU3hGUVVGTExFVkJRVWNzYzBKQlFYVkNSaXhGUVVGUExHZENRVUZwUWtNc1EwRkJVeXhGUVVNM1JVTXNRMEZEV0N4RlFVZEJaQ3hGUVVGTkxGVkJRVlVzU1VGQlRTeFRRVUZWYUVnc1JVRkJTMFVzUlVGQlQwTXNSVUZCVjJsRkxFVkJRVTBzUTBGRGVrUXNTVUZCU1N4RlFVRkpMRXRCUVVzc1VVRkJVWEJGTEVWQlFVc3NSMEZCU1c5RkxFVkJRVXNzVVVGQlVTeEZRVU16UXl4SFFVRkpMRVZCUVVrc1JVRkJSeXhEUVVsUUxFZEJSa0VzUlVGQlNTeERRVUZETEVWQlEweEJMRVZCUVVzc1VVRkRSQ3hMUVVGTExFdEJRVXNzVDBGQlUwRXNSVUZCU3l4aFFVTjRRaXhQUVVGUExFdEJRVXNzWVVGQllTeEZRVUZIY0VVc1JVRkJTMFVzUlVGQlQydEZMRU5CUVVrc1JVRkpOVU1zU1VGQlNUUkVMRVZCUVd0Q0xFdEJRVXNzYTBKQlFXdENMRVZCUVVkRExFVkJRVk1zUzBGRGVrUXNUMEZCU1N4RlFVRkpMRXRCUVVzc1MwRkJTeXhUUVVOa0xFZEJRVXNzUzBGQlN5eExRVUZMTEU5QlEyWkJMRVZCUVZORUxFZEJSV0pETEVWQlFVOHNZVUZCWVN4RlFVRkhha2tzUlVGQlMwVXNSVUZCVDJ0RkxFTkJRVWtzUlVGRGFFTTBSQ3hEUVVWbUxFdEJSMGtzVVVGQlNUZElMRWxCUVdNc1MwRkRWa1FzU1VGQlZTeFJRVU5XTEV0QlFVc3NXVUZCV1N4RlFVVnlRaXhMUVVGTExFdEJRVXNzUTBGQlF5eEZRVUZKUml4RlFVTm1MRXRCUVVzc1QwRkJUeXhEUVVGRExFVkJRVWxGTEVkQlJXUXNSVUZGWml4RlFVTkJPRWNzUlVGQlRTeFZRVUZWTEZsQlFXTXNWVUZCV1N4RFFVTjBReXhQUVVGSkxFdEJRVXNzVTBGQlYwVXNSMEZEVkN4TFFVRkxMRTlCUVZNc1MwRkJTeXhQUVVGUExFMUJRVTBzUlVGQlJ5eExRVUZMTEV0QlFVc3NUVUZCVFN4RlFVTjJSQ3hMUVVGTExFMUJRMmhDTEVWQlEwRkdMRVZCUVUwc1ZVRkJWU3hoUVVGbExGTkJRVlZzUnl4RlFVRkhaQ3hGUVVGTFJTeEZRVUZQYTBVc1JVRkJUU3hEUVVVeFJDeEhRVVJCTEV0QlFVc3NTMEZCU3l4UFFVRlBkRVFzUlVGQlJ5eEZRVUZIWkN4RFFVRkhMRVZCUTNSQ0xFdEJRVXNzVTBGQlYydElMRWRCUVZjc1EwRkRNMElzUzBGQlQwRXNSMEZCVlN4UFFVRlRPVU1zUlVGQlN5eGpRVU16UWpoRExFZEJRVlVzUzBGQlN5eE5RVUZUTEVWQlF6VkNMRWRCUVVsb1NDeEpRVUZWTEU5QlExWXNUVUZCVHl4SFFVZFFMRXRCUVVzc1QwRkJVMmRJTEVkQlFWVXNUVUZCVFN4RlFVRkhMRXRCUVVzc1MwRkJTeXhQUVVGVExFTkJRVU1zUTBGRk4wUXNRMEZEUVN4WlFVRkxMRTlCUVU4c1QwRkJUM0JITEVWQlFVY3NSVUZCUjFvc1EwRkJTeXhGUVVOMlFpeEZRVU5ZTEVWQlEwRTRSeXhGUVVGTkxGVkJRVlVzWTBGQlowSXNVMEZCVld0Q0xFVkJRVXNzUTBGSk0wTXNTVUZCU1hSSkxFVkJRVWtzUzBGQlN5eFBRVU5VYzBrc1JVRkJTU3hUUVVGWGFFSXNSMEZEV0hSSUxFbEJRVTF6U0N4SlFVTk9kRWdzUlVGQlJTeExRVUZMTEUxQlFWTXNSMEZIY0VKQkxFVkJRVWtzUzBGQlN5eFpRVUZaTEVWQlEzSkNRU3hGUVVGRkxFdEJRVXR6U1N4RlFVRkpMRTlCUVU4c1RVRkJUU3hEUVVGRExFZEJSVGRDTEV0QlFVc3NTMEZCU3l4TFFVRkxRU3hGUVVGSkxFdEJRVXNzVFVGQlRTeERRVUZETEVOQlEyNURMRVZCUTBGc1FpeEZRVUZOTEZWQlFWVXNZVUZCWlN4VFFVRlZiVUlzUlVGQlN5eERRVWt4UXl4SlFVRkpka2tzUlVGQlNTeExRVUZMTEU5QlExUjFTU3hGUVVGSkxGTkJRVmRxUWl4SFFVTllkRWdzU1VGQlRYTklMRWxCUTA1MFNDeEZRVUZGTEZGQlFWRXNUVUZCVXl4SFFVZDJRa0VzUlVGQlNTeExRVUZMTEZsQlFWa3NSVUZEY2tKQkxFVkJRVVVzVVVGQlVYVkpMRVZCUVVrc1QwRkJUeXhKUVVGSkxFTkJRVU1zUjBGRk9VSXNTMEZCU3l4TFFVRkxMRkZCUVZGQkxFVkJRVWtzUzBGQlN5eEpRVUZKTEVOQlFVTXNRMEZEY0VNc1JVRkRRVzVDTEVWQlFVMHNWVUZCVlN4clFrRkJiMElzVlVGQldTeERRVVUxUXl4SlFVRkpiMElzUlVGQlR5eExRVUZMTEV0QlFVc3NVVUZCVlN4RlFVRkhNMGdzUlVGQlR5eExRVUZMTEV0QlFVc3NUMEZCVHpKSUxFTkJRVWtzUlVGRE1VUnVRaXhGUVVGVExFdEJRVXNzVTBGQlYwTXNSMEZCV1VFc1IwRkJXU3hMUVVGTExFOUJRVThzVDBGQlQydENMRU5CUVVrc1JVRkROVVVzVDBGQlR5eEpRVUZKY0VJc1JVRkJUWFpITEVWQlFVMTNSeXhEUVVGTkxFTkJRMnBETEVWQlIwRkVMRVZCUVUwc1ZVRkJWU3hUUVVGWExGTkJRVlZzU0N4RlFVRkxReXhGUVVGTllTeEZRVUZoZVVnc1JVRkJWV3BGTEVWQlFVMXJSU3hGUVVGUE9VSXNSVUZCVXl4RFFVTjZSaXhKUVVGSldTeEZRVUZOYUVRc1JVRkJTeXhUUVVOWWJVVXNSVUZCVFVNc1JVRkRWaXhIUVVGSmVra3NTVUZCVTBRc1IwRkpWQ3hIUVVoSkxFTkJRVU5qTEVsQlJVdzBTQ3hIUVVGVFJDeEZRVUZQTEV0QlFVc3NVVUZCVVhwSkxFVkJRVXNzUjBGQlNYTklMRU5CUVVjc1IwRkJTeXhGUVVNeFEyMUNMRVZCUVU4c1IwRkRVQ3hQUVVGUFJDeFBRVWRZUXl4RlFVRlBMRXRCUVVzc1VVRkJVWHBKTEVWQlFVc3NSVUZCUjNOSUxFTkJRVWNzUlVGREwwSnZRaXhGUVVGUkxFdEJRVXNzVVVGQlVYcEpMRVZCUVUwc1IwRkJTWEZJTEVOQlFVY3NSVUZET1VKdlFpeEZRVUZSTEVWQlExSkJMRVZCUVZFc1EwRkJRMEVzUlVGRFNqVklMRWxCUVdkQ0xFbEJRM0pDTkVnc1NVRkZVaXhKUVVGSkwwZ3NSVUZCVHl4TFFVRkxMRXRCUVUxM1J5eEZRVUZUTEV0QlFVc3NUMEZEY0VNc1IwRkJTVlFzU1VGQldTeFBRVU5hTEZGQlFWTXhSaXhGUVVGSmVVZ3NSVUZCVFhwSUxFVkJRVWt3U0N4RlFVRlBNVWdzU1VGQlN5eERRVU12UWl4SlFVRkpaQ3hGUVVGTlV5eEZRVUZMU3l4RFFVRkRMRVZCUTFwV0xFVkJRVk52Unl4RlFVRlJlRWNzUlVGQlMybElMRVZCUVU5dVJ5eERRVUZETEVWQlFVZDNTQ3hIUVVGUExFVkJRelZETEVkQlFVbHNTU3hKUVVGWExFOUJRVmNzUTBGRGRFSXNSMEZCU1dsSkxFbEJRV0VzUjBGQlRTeERRVU51UWl4SFFVRkpja2tzU1VGQlVWTXNSVUZCUzBzc1EwRkJReXhIUVVGTExFdEJRVXNzVjBGQllTeEhRVU55UXl4TlFVRk5MRWxCUVVrc1RVRkJUU3huUkVGQlowUXNSVUZEYUVWV0xFVkJRVThzVVVGRFVDeExRVUZMTEV0QlFVc3NUMEZCVDFVc1JVRkJSeXhEUVVGRExFVkJRMnBDTEV0QlFVc3NVMEZCVjI5SExFbEJRMmhDTEV0QlFVc3NUMEZCVHl4UFFVRlBjRWNzUlVGQlJ5eERRVUZETEVWQlF6TkNjMFFzUlVGQlN5eFJRVU5NZEVRc1NVRkRRVEJJTEV0QlJVdHdTU3hGUVVGUExHVkJRV1VzVDBGQlR5eEpRVU5zUXpaSExFVkJRVTl1Unl4RFFVRkRMRVZCUVVsV0xFVkJRVThzVFVGRk0wSXNRMEZEUVN4SFFVRkpRU3hGUVVGUExGRkJRVlVzVDBGRGFrSXNUMEZCVDBFc1EwRkRaaXhEUVVOS0xFMUJSMEZyU1N4SFFVRlRSU3hGUVVGUlJDeEZRVU55UWl4UFFVRlBSQ3hEUVVOWUxFVkJSVUYwUWl4RlFVRk5MRlZCUVZVc1lVRkJaU3hUUVVGVmEwSXNSVUZCUzA4c1JVRkJSeXhEUVVVM1F5eEhRVVJCTEV0QlFVc3NTMEZCU3l4TFFVRkxMRTFCUVUwc1MwRkJTeXhMUVVGTlVDeEZRVUZKTEVsQlFVa3NSVUZEY0VNc1MwRkJTeXhUUVVGWGFFSXNSMEZCVnl4RFFVTXpRaXhIUVVGSlowSXNSVUZCU1N4VFFVRlhhRUlzUjBGRFppeFBRVU5LTEV0QlFVc3NUMEZCVXl4TFFVRkxMRTlCUVU4c1RVRkJUU3hGUVVGSExFdEJRVXNzUzBGQlN5eE5RVUZOTEVOQlEzWkVMRU5CUTBFc1MwRkJTeXhQUVVGUExFdEJRVXNzVFVGQlRTeExRVUZMTEU5QlFWRm5RaXhGUVVGSkxGbEJRVmtzUTBGQlF5eERRVU42UkN4RlFVTlBiRUlzUTBGRFdDeEZRVUZGTEVWQlJVVXpSeXhIUVVFclFpeFRRVUZWY1Vrc1JVRkJVU3hEUVVOcVJHeExMRWRCUVZVMlFpeEZRVUZsY1Vrc1EwRkJUU3hGUVVzdlFpeFRRVUZUY2trc1JVRkJZelJGTEVWQlFWVjRSU3hGUVVGTkxFTkJRMjVETEVsQlFVbG1MRVZCUVZFc1MwRkRXaXhIUVVGSkxFTkJRVU5sTEVWQlFVMHNRMEZEVUVFc1JVRkJUeXhEUVVGRExFVkJRMUlzVVVGQlV5eEZRVUZKTEVWQlFVY3NSVUZCU1hkRkxFVkJRVk1zVDBGQlVTeEpRVU5xUTNoRkxFVkJRVXNzUTBGQlF5eEZRVUZKZDBVc1JVRkJVeXhEUVVGRExFVkJRVVVzVDBGQlR5eERRVU55UXl4RFFVTkJMRTlCUVVGMlJpeEZRVUZSWjBvc1JVRkJUeXhMUVVGTExFdEJRVTFxU1N4RFFVRkpMRWRCUVVzc1MwRkRia05tTEVWQlFVMHNVMEZCVjNWR0xFVkJRMVoyUml4RFFVTllMRU5CUTBFc1QwRkJRVmNzUlVGQll5eFZRVUZWTEUxQlFWRXNWVUZCV1N4RFFVVjRReXhSUVVSSk5FVXNSVUZCVnl4TFFVRkxMRk5CUVZNc1RVRkJUU3hEUVVGRExFVkJRek5DYmtVc1JVRkJTU3hGUVVGSFFTeEZRVUZKYlVVc1JVRkJVeXhQUVVGUmJrVXNTVUZEYWtOdFJTeEZRVUZUYmtVc1EwRkJReXhGUVVGRkxGTkJRVmNzUjBGRE0wSXNUMEZCVHl4SlFVRkpWQ3hGUVVGak5FVXNSVUZCVlN4TFFVRkxMRXRCUVVzc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGRGVrUXNSVUZEUVRWRkxFVkJRV01zVlVGQlZTeFpRVUZqTEZOQlFWVTBSaXhGUVVGUExFTkJRMjVFTEVkQlFVa3NTMEZCU3l4VlFVRlpMRU5CUVVOQkxFVkJRMnhDTEU5QlFVOHNTMEZGV0N4UlFVUkpNVVlzUlVGQlN5eEpRVUZKUml4RlFVRmpMRXRCUVVzc1UwRkJVeXhOUVVGTkxFTkJRVU1zUlVGQlJ5eExRVUZMTEV0QlFVc3NUVUZCVFN4RFFVRkRMRU5CUVVNc1JVRkROVVJUTEVWQlFVa3NSVUZCUjBFc1JVRkJTVkFzUlVGQlJ5eFRRVUZUTEU5QlFWRlBMRWxCUTNCRFVDeEZRVUZITEZOQlFWTlBMRU5CUVVNc1JVRkJTVkFzUlVGQlJ5eFRRVUZUVHl4RFFVRkRMRVZCUVVVc1dVRkJXVzFHTEVOQlFVc3NSVUZEY2tRc1QwRkJUekZHTEVOQlExZ3NSVUZEUVVZc1JVRkJZeXhWUVVGVkxFOUJRVk1zVlVGQldTeERRVU42UXl4UFFVRlBMRXRCUVVzc1UwRkJVeXhEUVVGRExFVkJRVVVzVDBGQlR5eERRVU51UXl4RlFVTkJRU3hGUVVGakxGVkJRVlVzVVVGQlZTeFRRVUZWYVVJc1JVRkJZU3hEUVVOeVJDeFBRVUZQTEV0QlFVc3NVMEZCVXl4RFFVRkRMRVZCUVVVc1VVRkJVVUVzUTBGQlZ5eERRVU12UXl4RlFVTkJha0lzUlVGQll5eFZRVUZWTEZGQlFWVXNVMEZCVldsQ0xFVkJRV0VzUTBGRGNrUXNUMEZCVHl4TFFVRkxMRk5CUVZNc1MwRkJTeXhUUVVGVExFOUJRVk1zUTBGQlF5eEZRVUZGTEZGQlFWRkJMRU5CUVZjc1EwRkRkRVVzUlVGRFFXcENMRVZCUVdNc1ZVRkJWU3hKUVVGTkxGTkJRVlZNTEVWQlFVdERMRVZCUVdOdFJTeEZRVUZOTEVOQlF6ZEVMRWxCUVVrc1JVRkJTU3hMUVVGTExGRkJRVkZ3UlN4RlFVRkxMRVZCUVVkdlJTeEZRVUZMTEZGQlFWRXNSVUZCUjJFc1JVRkJWeXhMUVVGTExGTkJRemRFTEU5QlFVOHNSVUZCU1VFc1JVRkJVeXhQUVVGVFFTeEZRVUZUTEVOQlFVTXNSVUZCUlN4SlFVRkpha1lzUlVGQlMwTXNSVUZCWTIxRkxFTkJRVWtzUlVGQlNTeE5RVU0xUlN4RlFVTkJMMFFzUlVGQll5eFZRVUZWTEcxQ1FVRnhRaXhUUVVGVlRDeEZRVUZMV0N4RlFVRlRjVWtzUlVGQlYzQkhMRVZCUVdFc1EwRkRla1lzU1VGQlNWSXNSVUZCU1N4TFFVRkxMRkZCUVZGa0xFVkJRVXNzUlVGQlIxZ3NRMEZCVHl4RlFVRkhORVlzUlVGQlZ5eExRVUZMTEZOQlEzWkVMRWRCUVVsdVJTeEhRVUZMYlVVc1JVRkJVeXhQUVVOa0xFOUJRVThzUzBGQlN5eFJRVUZSTTBRc1EwRkJWeXhGUVVOdVF5eEpRVUZKYkVJc1JVRkJVelpGTEVWQlFWTnVSU3hEUVVGRExFVkJRVVVzYlVKQlFXMUNaQ3hGUVVGTFdDeEZRVUZUY1Vrc1JVRkJWM0JITEVOQlFWY3NSVUZEYUVZc1QwRkJTV3hDTEVsQlFWY3NVVUZCWVZVc1JVRkJTU3hGUVVOeVFtMUZMRVZCUVZOdVJTeEZRVUZKTEVOQlFVTXNSVUZCUlN4UlFVRlJVU3hEUVVGWExFVkJSWFpEYkVJc1EwRkRXQ3hGUVVOQlF5eEZRVUZqTEZWQlFWVXNiMEpCUVhOQ0xGTkJRVlZNTEVWQlFVdFlMRVZCUVZOeFNTeEZRVUZYY0Vjc1JVRkJZU3hEUVVNeFJpeEpRVUZKVWl4RlFVRkpMRXRCUVVzc1VVRkJVV1FzUlVGQlN5eEZRVUZIV0N4RFFVRlBMRVZCUVVjMFJpeEZRVUZYTEV0QlFVc3NVMEZCVlRCRUxFVkJRVk14UkN4RlFVRlRMRTlCUTI1R0xFZEJRVWtzUlVGQlFXNUZMRWRCUVVzMlNDeEhRVVZVTEV0QlFVbDJTU3hGUVVGVE5rVXNSVUZCVTI1RkxFTkJRVU1zUlVGQlJTeHZRa0ZCYjBKa0xFVkJRVXRZTEVWQlFWTnhTU3hGUVVGWGNFY3NRMEZCVnl4RlFVTnFSaXhQUVVGSmJFSXNTVUZCVnl4UlFVRmhWU3hGUVVGSk5rZ3NSVUZCVXl4RlFVTTVRakZFTEVWQlFWTnVSU3hGUVVGSkxFTkJRVU1zUlVGQlJTeFJRVUZSVVN4RFFVRlhMRVZCUlhaRGJFSXNSVUZEV0N4RlFVTkJReXhGUVVGakxGVkJRVlVzVjBGQllTeFRRVUZWZFVnc1JVRkJUM2hFTEVWQlFVMTVSQ3hGUVVGWExFTkJRMjVGTEVsQlFVbERMRVZCUVVzc1MwRkJTeXhMUVVGTExFOUJRVkZqTEVWQlFVc3NTMEZCU3l4VFFVRlRMRTlCUXpsRE1VY3NSMEZCVFRSR0xFbEJRVTlqTEVWQlFVa3NkVU5CUVhkRGFFSXNSVUZCVHl4VlFVRlhSU3hGUVVGSll5eEZRVUZKTEZsQlFXRm1MRU5CUVZNc1JVRkRla2N6Uml4SFFVRk5ORVlzUlVGQlN5eEhRVUZMUml4RlFVRlJMRVZCUVVjc01rSkJRVFJDUlN4RlFVRkpMRmRCUVZsR0xFVkJRVThzV1VGQllVTXNRMEZCVXl4RlFVVndSeXhSUVVSSmFFSXNSVUZCVHl4RlFVRkhWeXhGUVVGSkxFdEJRVXNzVTBGQlZUZElMRVZCUVVrc1MwRkJTeXhMUVVGTmEwb3NSVUZCV1N4RlFVTnVSQzlJTEVWQlFVa3NSVUZCUjBFc1JVRkJTVGhJTEVWQlFVazVTQ3hKUVVOd1FpdEdMRWRCUVZGWExFVkJRVVV4Unl4RFFVRkRMRVZCUVVVc1YwRkJWemhITEVWQlFWRXNSVUZCUjNoRUxFVkJRVTE1UkN4RlFVRlphRUlzUTBGQlNTeEZRVU42UkdkRExFZEJRV0Z5UWl4RlFVRkZNVWNzUTBGQlF5eEZRVUZGTEV0QlFVc3NUMEZEZGtKdlFpeEhRVUZOTWtVc1IwRkJVV2RETEVWQlFWY3NUVUZCVDJoQ0xFTkJRVk1zUlVGRGVrTXpSaXhIUVVGTmNFSXNTVUZCVFN4SFFVRkxNRWNzUlVGQlJURkhMRVZCUVVrc1EwRkJReXhGUVVGRkxHTkJRV2RDTUVjc1JVRkJSVEZITEVOQlFVTXNSVUZCUlN4WlFVRmhMRFJDUVVFMlFpdEhMRU5CUVZNc1JVRkRPVVpNTEVWQlFVVXhSeXhEUVVGRExFVkJRVVVzVDBGQlR5eEhRVUZMYmtJc1JVRkJSVzFDTEVOQlFVTXNSMEZEY0VKdlFpeEhRVUZOTEVkQlFVOHNVVUZCVTNCQ0xFVkJRVWNzVFVGQlQyNUNMRVZCUVVWdFFpeERRVUZETEVWQlFVY3NkVUpCUVhkQ01FY3NSVUZCUlRGSExFTkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVY3NWMEZCV1RoSExFVkJRVThzV1VGQllVTXNRMEZCVXl4RlFVTndTQzlITEVsQlFVMHNSMEZCUzNORUxFVkJRVXNzVTBGQlUzcEZMRVZCUVVWdFFpeEZRVUZKTEVOQlFVTXNSVUZCUjI1Q0xFVkJRVVZ0UWl4RFFVRkRMRU5CUVVNc1JVRkJTU3hIUVVNM1EyOUNMRWRCUVUwc1IwRkJUeXd3UWtGQk1rSXdSaXhGUVVGUExGRkJRVk01Unl4RlFVRkhMRTlCUVZGdVFpeEZRVUZGYlVJc1JVRkJTU3hEUVVGRExFVkJRVWR1UWl4RlFVRkZiVUlzUTBGQlF5eERRVUZETEVWQlNYcEdMRWxCUVVsblNTeEZRVUZUUkN4SlFVRmpMRVZCUXpOQ0xFOUJRVWxETEVkQlFWVkVMRVZCUVZsNlJTeEZRVUZMTEZsQlFXTjNSU3hKUVVONlF6RkhMRWRCUVUwc1IwRkJUelJITEVWQlFWTXNWVUZCV1N4WFFVRlpMR0ZCUVdORUxFVkJRVmRvUXl4RlFVRk5MR0ZCUVdObExFVkJRVThzWlVGQlowSjRSQ3hGUVVGTExGbEJRV0VzYlVKQlFXOUNkMFVzUlVGQlNTeGhRVUZqWml4RFFVRlRMRVZCUTJoTWFFSXNRMEZEV0N4RlFVZEJlRWNzUlVGQll5eFZRVUZWTEVsQlFVMHNVMEZCVlV3c1JVRkJTMFVzUlVGQlQwTXNSVUZCVjJsRkxFVkJRVTBzUTBGRGFrVXNTVUZCU1c5RUxFVkJRVWtzUzBGQlN5eFRRVUZWY0VJc1JVRkJUV2hETEVWQlFVc3NZVUZCWTJkRUxFVkJRVTFvUkN4RlFVRkxMRk5CUTNaRWRFUXNSVUZCU1N4TFFVRkxMRWxCUVVrc1MwRkJTeXhSUVVGUlpDeEZRVUZMTEVWQlFVZHZTQ3hEUVVGSExFVkJRVWRKTEVWQlFVVXNUMEZCVXl4RFFVRkRMRVZCUVVkMVFpeEZRVUZSZGtJc1JVRkJSVEZITEVOQlFVTXNSVUZIZEVVc1IwRkdTV2xKTEVWQlFVMHNWMEZEVG5aQ0xFVkJRVVV4Unl4RFFVRkRMRVZCUVVscFNTeEZRVUZSUVN4RlFVRk5MRTFCUVUwc1IwRkRNMEpCTEVWQlFVMHNTMEZCU3l4UlFVRlZNME1zUlVGQlN5eERRVXN4UWl4SlFVRkpMMFFzUlVGRFFYWkNMRVZCUVVrc1NVRkJUWFZDTEVWQlFWRnRSaXhGUVVGRk1VY3NSVUZCU1N4RFFVRkRMRWRCUVVjc1MwRkJTeXhQUVVGVGMwWXNSMEZCVDJkQ0xFVkJRVWt5UWl4RlFVRk5MRXRCUVVzc1EwRkJReXhGUVVGSEwwa3NRMEZCUnl4RlFVRkpMRWRCUTNaRmNVTXNSVUZCVFN4WFFVTk9iVVlzUlVGQlJURkhMRVZCUVVrc1EwRkJReXhGUVVGSmRVSXNSVUZCVVVFc1JVRkJUU3hOUVVGTkxFZEJRMjVEUVN4RlFVRk5MR05CUVdNd1J5eERRVUZMTEVWQlEzcENMRXRCUVVzc1MwRkJTMnBKTEVWQlFVa3NRMEZCUXl4RlFVRkpkVUlzUlVGQlRTeFBRVUZQTEVsQlJURkNRU3hGUVVGUmJVWXNSVUZCUlRGSExFVkJRVWtzUTBGQlF5eExRVUZQTEZGQlFXRjFRaXhGUVVGTkxFdEJRVXNzVDBGQlV5dEVMRWRCUVU5blFpeEZRVUZKTWtJc1JVRkJUU3hQUVVGUExFVkJRVWN2U1N4RFFVRkhMRVZCUVVrc1NVRkRNMFp4UXl4RlFVRk5MRmRCUTA1dFJpeEZRVUZGTVVjc1JVRkJTU3hEUVVGRExFVkJRVWwxUWl4RlFVRlJRU3hGUVVGTkxFMUJRVTBzUjBGRGJrTkJMRVZCUVUwc1lVRkJZVEJITEVOQlFVc3NSVUZEZUVJc1MwRkJTeXhMUVVGTGFra3NRMEZCUXl4RlFVRkpNRWNzUlVGQlJURkhMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJSVzVETEVOQlEwRXNTVUZCU1ZZc1JVRkJVekpKTEVWQlFVMHNTVUZCU1M5SkxFVkJRVXRGTEVWQlFVOURMRVZCUVZkcFJTeERRVUZKTEVWQlEyeEVMRWRCUVVsb1JTeEpRVUZYTEVkQlExZ3NUVUZCVHl4SFFVVllMRWRCUkVFc1MwRkJTeXhMUVVGTFZTeERRVUZETEVWQlFVbHBTU3hGUVVGTkxFOUJRVThzUlVGRGVFSXpTU3hKUVVGWExFZEJRMWdzVFVGQlR5eEhRVVZZTEVkQlFVa3NTMEZCU3l4TFFVRkxMRTlCUVZOblJ5eEZRVU51UWl4WlFVRkxMRTlCUVU5MFJpeEZRVUZKTEVWQlFVZFdMRU5CUVUwc1JVRkRiRUlzUjBGSFVDeEpRVUZKTkVnc1JVRkJhMElzUzBGQlN5eHJRa0ZCYTBJc1JVRkJSME1zUlVGQlV5eExRVU42UkN4UFFVRkpZaXhGUVVGSmFFZ3NSVUZCVHl4UFFVRlBMRVZCUVVjc1MwRkJTeXhQUVVGUExFTkJRVU1zUlVGQlNTeEpRVU4wUXpaSUxFVkJRVk5FTEVWQlExUnNTQ3hIUVVGTExFdEJRVXNzUzBGQlN5eFJRVVZ1UW0xSUxFVkJRVThzVDBGQlQyNUlMRVZCUVVrc1JVRkJSMVlzUTBGQlRTeEZRVU53UWpSSUxFTkJSV1lzUlVGTlFUTklMRVZCUVdNc1ZVRkJWU3hQUVVGVExGTkJRVlZUTEVWQlFVZHBTU3hGUVVGUExFTkJRMnBFTEV0QlFVc3NVMEZCVXl4UFFVRlBha2tzUlVGQlJ5eEZRVUZIYVVrc1EwRkJTeXhGUVVOb1F5eExRVUZMTEV0QlFVc3NUMEZCVDJwSkxFVkJRVWNzUlVGQlIybEpMRVZCUVUwc1QwRkJUeXhEUVVGRExFTkJRM3BETEVWQlMwRXhTU3hGUVVGakxGVkJRVlVzYTBKQlFXOUNMRlZCUVZrc1EwRkZjRVFzU1VGQlNTdElMRVZCUVU4c1MwRkJTeXhUUVVGVExGRkJRVlVzUlVGRGJrTXNUMEZCVHl4SlFVRkpMMGdzUlVGQll5eExRVUZMTEZOQlFWTXNUMEZCVHl0SUxFTkJRVWtzUlVGQlJ5eExRVUZMTEV0QlFVc3NUMEZCVDBFc1EwRkJTU3hEUVVGRExFTkJReTlGTEVWQlEwRXZTQ3hGUVVGakxGVkJRVlVzWTBGQlowSXNVMEZCVlRaSUxFVkJRVXNzUTBGSmJrUXNTMEZCU3l4TFFVRkxMRXRCUVV0QkxFVkJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVTXNSVUZETDBJc1MwRkJTeXhUUVVGVExFdEJRVXRCTEVWQlFVa3NVMEZCVXl4TlFVRk5MRU5CUVVNc1EwRkRNME1zUlVGRFFUZElMRVZCUVdNc1ZVRkJWU3hoUVVGbExGTkJRVlU0U0N4RlFVRkxMRU5CU1d4RUxFdEJRVXNzUzBGQlN5eFJRVUZSUVN4RlFVRkpMRXRCUVVzc1NVRkJTU3hEUVVGRExFVkJRMmhETEV0QlFVc3NVMEZCVXl4UlFVRlJRU3hGUVVGSkxGTkJRVk1zU1VGQlNTeERRVUZETEVOQlF6VkRMRVZCVFVFNVNDeEZRVUZqTEZWQlFWVXNVMEZCVnl4VFFVRlZVQ3hGUVVGTFF5eEZRVUZOWVN4RlFVRmhlVWdzUlVGQlZXcEZMRVZCUVUxclJTeEZRVUZQT1VJc1JVRkJVeXhEUVVOcVJ5eEpRVUZKV1N4RlFVRk5hRVFzUlVGQlN5eFRRVU5ZTTBRc1JVRkJUeXhMUVVGTExFdEJRVTEzUlN4RlFVRlhMRXRCUVVzc1UwRkRiRU56UkN4RlFVRlBMRXRCUVVzc1VVRkJVWHBKTEVWQlFVc3NSVUZCUjNOSUxFTkJRVWNzUlVGQlIzUkhMRVZCUVVsNVNDeEZRVU4wUTBNc1JVRkJVU3hMUVVGTExFbEJRVWw2U1N4SlFVRlRSQ3hGUVVGTmVVa3NSVUZCVHl4TFFVRkxMRkZCUVZGNFNTeEZRVUZOTEVWQlFVZHhTQ3hEUVVGSExFVkJRVWN6Unl4RlFVRkxMRTlCUVZNc1EwRkJReXhGUVVOMFJpeEhRVUZMTkVnc1IwRlRRU3hIUVVGSmRrZ3NSMEZCU3pCSUxFVkJRMVlzUjBGQlNTeERRVU5CTEV0QlFVOHhTQ3hIUVVGTE1FZ3NSVUZCVHpGSUxFbEJRVXNzUTBGRGFFSnRSU3hGUVVGVGJrVXNRMEZCUXl4RlFVRkZMRmRCUTFwdFJTeEZRVUZUYmtVc1EwRkJReXhGUVVGSmJVVXNSVUZCVTI1RkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVkQlEzQkRMRWxCUVVsV0xFVkJRVk0yUlN4RlFVRlRia1VzUTBGQlF5eEZRVUZGTEZOQlFWTm9RaXhGUVVGTFF5eEZRVUZOWVN4RlFVRmhlVWdzUlVGQlZXcEZMRVZCUVUxclJTeEZRVUZQT1VJc1EwRkJUeXhGUVVsNFJpeEhRVVJCTDBZc1JVRkJTMHNzUTBGQlF5eEZRVUZKYlVVc1JVRkJVMjVGTEVOQlFVTXNSVUZCUlN4UFFVRlBMRVZCUTNwQ0xFOUJRVTlXTEVkQlFWY3NVMEZEYkVJc1QwRkJUMEVzUlVGRFdHdEpMRVZCUVZGc1NTeERRVU5hTEVOQlEwb3NVVUZEUVN4RFFVVkpMRWxCUVVsblNTeEZRVUZQYUVVc1JVRkJTeXhqUVVGblFpeEZRVWRvUXl4SlFVWkpiVVVzUlVGQlR5eEhRVU5RUVN4SlFVTkRla2dzUlVGQlNUQklMRVZCUVU4eFNDeEhRVUZMZVVnc1JVRkJUWHBJTEVsQlEyNUNiVVVzUlVGQlUyNUZMRU5CUVVNc1JVRkJSU3hMUVVGTExGRkJRVlZ6U0N4SlFVTjJRbTVFTEVWQlFWTnVSU3hEUVVGRExFVkJRVVVzUzBGQlN5eFRRVUZYTEVWQlF6VkNMRXRCUVVzc1UwRkJVMEVzUlVGQlIzTkVMRVZCUVVzc1dVRkJXU3hIUVVkc1F6TkVMRVZCUVVzc1QwRkJUMHNzUlVGQlJ5eERRVUZETEVWQlEyaENiVVVzUlVGQlV5eFBRVUZQYmtVc1JVRkJSeXhEUVVGRExFbEJTVFZDYlVVc1JVRkJVeXhUUVVGWExFZEJRVXRCTEVWQlFWTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1UwRkJWeXhIUVVOeVJDOURMRWRCUVUwc1IwRkJUeXhsUVVGbExFTkJRM0JETEUxQmRrTkJMRTFCUVU5d1FpeEhRVUZMTUVnc1JVRkJUekZJTEVsQlFVc3NRMEZEY0VJc1NVRkJTVllzUlVGQlV6WkZMRVZCUVZOdVJTeERRVUZETEVWQlFVVXNVMEZCVTJoQ0xFVkJRVXRETEVWQlFVMWhMRVZCUVdGNVNDeEZRVUZWYWtVc1JVRkJUV3RGTEVWQlFVODVRaXhEUVVGUExFVkJRM2hHTEVkQlFVa3NUMEZCVDNCSExFZEJRVmNzVTBGRGJFSXNUMEZCVDBFc1JVRkRXR3RKTEVWQlFWRnNTU3hEUVVOYUxFTkJiME5LTEU5QlFVOXJTU3hEUVVOWUxFVkJSVUZxU1N4RlFVRmpMRlZCUVZVc1UwRkJWeXhUUVVGVlV5eEZRVUZIYTBrc1JVRkJVeXhEUVVOeVJDeEpRVUZKTDBRc1JVRkJWeXhMUVVGTExGTkJRM0JDTEU5QlFVbHVSU3hIUVVGTExFZEJRVXRCTEVWQlFVa3NSVUZCU1cxRkxFVkJRVk1zVVVGRGRrSkJMRVZCUVZOdVJTeERRVUZETEVWQlFVVXNTMEZCU3l4UFFVRlRiVVVzUlVGQlUyNUZMRVZCUVVrc1EwRkJReXhGUVVGRkxFdEJRVXNzVVVGQlZXdEpMRWRCUTNKRUwwUXNSVUZCVTI1RkxFTkJRVU1zUlVGQlJTeFhRVU5hYlVVc1JVRkJVMjVGTEVOQlFVTXNSVUZCU1cxRkxFVkJRVk51UlN4RFFVRkRMRVZCUVVVc1RVRkJUU3hIUVVOd1EyMUZMRVZCUVZOdVJTeERRVUZETEVWQlFVVXNZVUZCWVcxRkxFVkJRVk51UlN4RlFVRkpMRU5CUVVNc1JVRkJSMnRKTEVOQlFVOHNSVUZEYWtRdlJDeEZRVUZUTEU5QlFVOXVSU3hGUVVGSkxFVkJRVWNzUTBGQlF5eEZRVU40UWl4TFFVRkxMRXRCUVVzc1QwRkJUMEVzUlVGQlNTeEZRVUZITEVOQlFVTXNSVUZEZWtJc1MwRkJTeXhMUVVGTFFTeERRVUZETEVWQlFVbHRSU3hGUVVGVGJrVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkRNMElzU1VGSFVpeEZRVU5ZTEVWQlRVRlVMRVZCUVdNc1ZVRkJWU3hoUVVGbExGTkJRVlUyU0N4RlFVRkxOVWtzUlVGQllTeERRVVV2UkN4SlFVRkpNa29zUlVGQldTeExRVUZMTEV0QlFVc3NUMEZETVVJc1MwRkJTeXhMUVVGTExFdEJRVXNzVFVGQlRTeExRVUZMTEV0QlFVMW1MRVZCUVVrc1NVRkJTU3hGUVVONFF5eEpRVUZKWjBJc1JVRkJZMmhDTEVWQlFVa3NVMEZGZEVJc1IwRkVRU3hMUVVGTExGTkJRVk1zUzBGQlN5eE5RVUZOTEV0QlFVc3NVMEZCVldkQ0xFTkJRVmNzUlVGREwwTm9RaXhGUVVGSkxGVkJRVmtzUTBGQlF5eExRVUZMTEZOQlIzUkNMRkZCUVZOd1NDeEZRVUZKTEVWQlFVZEJMRVZCUVVsdlNTeEZRVUZaTEU5QlFWRndTU3hKUVVOd1EyOUpMRVZCUVZsd1NTeERRVUZETEVWQlFVVXNVMEZCVnl4SFFVdHNReXhMUVVGTExGTkJRVk50U1N4RlFVRlpMRVZCUVVjelNpeERRVUZYTEVOQlF6VkRMRVZCUTA5bExFTkJRMWdzUlVGQlJUSkhMRVZCUVVzc1JVRlpTRVVzUjBGQldTeERRVUZETEVWQlEySnVSeXhIUVVGVExFTkJRVVVzVDBGQlVTeEZRVUZMTEVWQlFVZFVMRWRCUVdNc1ZVRkJXU3hEUVVGRkxFOUJRVTlUTEVWQlFWRXNSVUZEZEVWMVJpeEhRVUZSTEVOQlFVVXNUVUZCVHl4RlFVRkxMRVZCUTNSQ0wwY3NSMEZCWVN4VlFVRlpMRU5CUTNwQ0xFbEJRVWtzUlVGQlNTeEpRVUZKZVVnc1IwRkRXaXhUUVVGRkxGTkJRVmNzUjBGRFRpeERRVU5ZTEVWQlFVY3NSVUZEUXpWRkxFZEJRV0VzUTBGQlF5eEZRVU5rYWtJc1IwRkJZeXhEUVVGRExFVkJRMjVDTEZOQlFWTmxMRWRCUVUxcFNDeEZRVUZOTEVOQlJXcENMRkZCUkVsRExFVkJRVThzUTBGQlF5eEZRVU5JUXl4RlFVRkxMRVZCUVVkQkxFVkJRVXNzVlVGQlZTeFBRVUZSUVN4SlFVTndRMFFzUlVGQlMwTXNSVUZCU3l4RFFVRkRMRVZCUVVrc1ZVRkJWVUVzUTBGQlJTeEZRVVV2UWl4SFFVRkpMRU5CUVVOR0xFVkJRMFFzVFVGQlFVTXNSVUZCU3l4UlFVRlJMRk5CUVZNc1JVRkRhRUlzU1VGQlNTeE5RVUZOUVN4RlFVRkxMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJSWFJETEVOQlJVRTNTeXhIUVVGUkxGZEJRV01zVlVGQldTeERRVUZGTEVsQlFVbHhTU3hGUVVGSkxFbEJRVWw2U0N4SFFVRlRMRTlCUVVGNVNDeEZRVUZGTEU5QlFVOHNSVUZCVlVFc1EwRkJSeXhGUVVGSExFbERkSEJFYkVZc1NVRkJUVEJETEVkQlFVNHNZMEZCZVVJc1MwRkJUU3hEUVVGRExFVkJTMjVDUXl4SFFVRk9MR05CUVcxRFJDeEZRVUZYTEVOQlEyNUVMRmxCUVZsRkxFVkJRVkVzUTBGRGJFSXNUVUZCVFN4eFFrRkJjVUpCTEVWQlFVOHNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkRha1FzUTBGRFJpeEZRVXRoUXl4SFFVRk9MR05CUVcxRFNDeEZRVUZYTEVOQlEyNUVMRmxCUVZsRkxFVkJRVkVzUTBGRGJFSXNUVUZCVFN4eFFrRkJjVUpCTEVWQlFVOHNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkRha1FzUTBGRFJpeEZRVXRoUlN4SFFVRk9MR05CUVcxRFNpeEZRVUZYTEVOQlEyNUVMRmxCUVZsRkxFVkJRVkVzUTBGRGJFSXNUVUZCVFN4eFFrRkJjVUpCTEVWQlFVOHNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkRha1FzUTBGRFJpeEZRVXRoUnl4SFFVRk9MR05CUVRSRFRDeEZRVUZYTEVOQlFVTXNSVUZMYkVSTkxFZEJRVTRzWTBGQkswSk9MRVZCUVZjc1EwRkRMME1zV1VGQldVOHNSVUZCVFN4RFFVTm9RaXhOUVVGTkxHZENRVUZuUWtFc1EwRkJTU3hGUVVGRkxFTkJRemxDTEVOQlEwWXNSVUZMWVVNc1IwRkJUaXhqUVVGdFExSXNSVUZCVnl4RFFVRkRMRVZCUzNwRFV5eEhRVUZPTEdOQlFXdERWQ3hGUVVGWExFTkJRMnhFTEdGQlFXTXNRMEZEV2l4TlFVRk5MREpDUVVFeVFpeERRVU51UXl4RFFVTkdMRVZEZUVSQkxFbEJRVTFWTEVWQlFVa3NWVUZEVWtNc1IwRkJTU3hSUVVOS1F5eEhRVUZKTEU5QlJVOURMRWRCUVdFc1EwRkRlRUlzUzBGQlRVZ3NSVUZEVGl4TlFVRlBRU3hGUVVOUUxFbEJRVXRCTEVOQlExQXNSVUZGWVVrc1IwRkJWeXhEUVVOMFFpeExRVUZOU2l4RlFVTk9MRTFCUVU5RExFZEJRMUFzU1VGQlMwUXNRMEZEVUN4RlFVVmhTeXhIUVVGM1FpeERRVU51UXl4TFFVRk5UQ3hGUVVOT0xFMUJRVTlETEVkQlExQXNTVUZCUzBRc1JVRkRUQ3hSUVVGVFF5eEZRVU5ZTEVWQlJXRkxMRWRCUVZrc1EwRkRka0lzUzBGQlRVNHNSVUZEVGl4TlFVRlBSU3hIUVVOUUxFbEJRVXRHTEVOQlExQXNSVUZGWVU4c1IwRkJXU3hEUVVOMlFpeExRVUZOVUN4RlFVTk9MRTFCUVU5RkxFZEJRMUFzU1VGQlMwWXNSVUZEVEN4UlFVRlRSU3hGUVVOWUxFVkJSV0ZOTEVkQlFXTXNRMEZEZWtJc1MwRkJUVklzUlVGRFRpeFBRVUZSUVN4RFFVTldMRVZCUldGVExFZEJRVzlDTEVOQlF5OUNMRXRCUVUxVUxFVkJRMDRzVDBGQlVVRXNSVUZEVWl4UFFVRlJRU3hEUVVOV0xFVkJSV0ZWTEVkQlFYbENMRU5CUTNCRExFdEJRVTFXTEVWQlEwNHNUMEZCVVVFc1JVRkRVaXhQUVVGUlFTeEZRVU5TTEdGQlFXTkRMRVZCUTJoQ0xFVkJSV0ZWTEVkQlFYZENMRU5CUTI1RExFdEJRVTFZTEVWQlEwNHNUMEZCVVVFc1JVRkRVaXhQUVVGUlFTeEZRVU5TTEdGQlFXTkZMRVZCUTJoQ0xFVkJSV0ZWTEVkQlFXbENMRU5CUXpWQ0xFdEJRVTFhTEVWQlEwNHNUMEZCVVVFc1JVRkRVaXhWUVVGWExFdEJRMklzUlVGRllXRXNSMEZCZFVJc1EwRkRiRU1zUzBGQlRXSXNSVUZEVGl4UFFVRlJRU3hGUVVOU0xFOUJRVkZCTEVWQlExSXNWVUZCVnl4TFFVTmlMRVZCUldGakxFZEJRVFJDTEVOQlEzWkRMRXRCUVUxa0xFVkJRMDRzVDBGQlVVRXNSVUZEVWl4UFFVRlJRU3hGUVVOU0xGVkJRVmNzVFVGRFdDeGhRVUZqUXl4RlFVTm9RaXhGUVVWaFl5eEhRVUV5UWl4RFFVTjBReXhMUVVGTlppeEZRVU5PTEU5QlFWRkJMRVZCUTFJc1QwRkJVVUVzUlVGRFVpeFZRVUZYTEUxQlExZ3NZVUZCWTBVc1JVRkRhRUlzUlVGRllXTXNSMEZCYVVJc1EwRkROVUlzUzBGQlRXaENMRVZCUTA0c1RVRkJUMEVzUlVGRFVDeEpRVUZMUVN4RlFVTk1MRXRCUVUxQkxFVkJRMDRzVDBGQlVVRXNRMEZEVml4RlFVVmhhVUlzUjBGQk9FSXNRMEZEZWtNc1MwRkJUV3BDTEVWQlEwNHNUVUZCVDBFc1JVRkRVQ3hKUVVGTFFTeEZRVU5NTEV0QlFVMUJMRVZCUTA0c1QwRkJVVUVzUlVGRFVpeFBRVUZSUVN4RFFVTldMRVZCUldGclFpeEhRVUZsTEVOQlF6RkNMRXRCUVUxc1FpeEZRVU5PTEUxQlFVOURMRWRCUTFBc1NVRkJTMFFzUlVGRFRDeExRVUZOUVN4RlFVTk9MRTlCUVZGQkxFTkJRMVlzUlVGRllXMUNMRWRCUVRSQ0xFTkJRM1pETEV0QlFVMXVRaXhGUVVOT0xFMUJRVTlETEVkQlExQXNTVUZCUzBRc1JVRkRUQ3hMUVVGTlFTeEZRVU5PTEU5QlFWRkJMRVZCUTFJc1QwRkJVVUVzUTBGRFZpeEZRVVZoYjBJc1IwRkJORUlzUTBGRGRrTXNTMEZCVFhCQ0xFVkJRMDRzVFVGQlQwTXNSMEZEVUN4SlFVRkxSQ3hGUVVOTUxGRkJRVk5ETEVkQlExUXNTMEZCVFVRc1JVRkRUaXhQUVVGUlFTeERRVU5XTEVWQlJXRnhRaXhIUVVGblFpeERRVU16UWl4TFFVRk5ja0lzUlVGRFRpeE5RVUZQUlN4SFFVTlFMRWxCUVV0R0xFVkJRMHdzUzBGQlRVRXNSVUZEVGl4UFFVRlJRU3hGUVVOU0xHRkJRV05ETEVWQlEyaENMRVZCUldGeFFpeEhRVUUyUWl4RFFVTjRReXhMUVVGTmRFSXNSVUZEVGl4TlFVRlBSU3hIUVVOUUxFbEJRVXRHTEVWQlEwd3NTMEZCVFVFc1JVRkRUaXhQUVVGUlFTeEZRVU5TTEU5QlFWRkJMRVZCUTFJc1lVRkJZME1zUlVGRGFFSXNSVUZGWVhOQ0xFZEJRV2RDTEVOQlF6TkNMRXRCUVUxMlFpeEZRVU5PTEUxQlFVOUZMRWRCUTFBc1NVRkJTMFlzUlVGRFRDeFJRVUZUUlN4SFFVTlVMRXRCUVUxR0xFVkJRMDRzVDBGQlVVRXNSVUZEVWl4aFFVRmpSU3hGUVVOb1FpeEZRVVZoYzBJc1IwRkJOa0lzUTBGRGVFTXNTMEZCVFhoQ0xFVkJRMDRzVFVGQlQwVXNSMEZEVUN4SlFVRkxSaXhGUVVOTUxGRkJRVk5GTEVkQlExUXNTMEZCVFVZc1JVRkRUaXhQUVVGUlFTeEZRVU5TTEU5QlFWRkJMRVZCUTFJc1lVRkJZMFVzUlVGRGFFSXNSVU5xUzA4c1UwRkJVM1ZDTEVWQlFWbERMRVZCUVVjc1EwRkROMElzVDBGQlR5eFBRVUZQUVN4SFFVRk5MRmRCUTNSQ0xFTkJSVThzVTBGQlUwTXNSMEZCVTBRc1JVRkJSeXhEUVVNeFFpeFBRVUZQTEU5QlFVOUJMRWRCUVUwc1VVRkRkRUlzUTBGRlR5eFRRVUZUUlN4SFFVRlZSaXhGUVVGSExFTkJRek5DTEU5QlFVOHNUMEZCVDBFc1IwRkJUU3hWUVVGWlFTeEZRVUZKTEVsQlFVMHNRMEZETlVNc1EwRkZUeXhUUVVGVFJ5eEhRVUZUU0N4RlFVRkhMRU5CUXpGQ0xFOUJRVThzVDBGQlQwRXNSMEZCVFN4UlFVTjBRaXhEUVVWUExGTkJRVk5KTEVkQlFVOUtMRVZCUVVjc1EwRkRlRUlzVDBGQlR5eFBRVUZQTEZWQlFWVXNVMEZCVXl4TFFVRkxRU3hEUVVGRExFbEJRVTBzWlVGREwwTXNRMEZKVHl4VFFVRlRTeXhKUVVGakxFTkJRelZDTEVkQlFVa3NRMEZEUml4UFFVRlBMRTlCUVU4c1RVRkJVeXhoUVVGbExFTkJRVU1zUTBGQlF5eExRVUZMTEd0Q1FVTXZReXhQUVVGVFF5eEZRVUZITEVOQlExWXNUVUZCVHl4RlFVTlVMRU5CUTBZc1EwRkpUeXhUUVVGVFF5eEhRVUZYUXl4RlFVRlBMRU5CUTJoRExFOUJRVThzVFVGQlRTeFJRVUZSUVN4RFFVRkxMRVZCUVVsQkxFVkJRVkVzUTBGQlEwRXNRMEZCU3l4RFFVTTVReXhEUVVWUExGTkJRVk5ETEVkQlFVOURMRVZCUVV0RExFVkJRVWxETEVWQlFWTXNRMEZEZGtNc1IwRkJTVVlzUlVGQlNTeFRRVUZYTEVWQlIyNUNMRTlCUVU5QkxFVkJRVWtzVDBGQlR5eERRVUZEUnl4RlFVRk5ReXhKUVVGVExFTkJRMmhETEVsQlFVMURMRVZCUVU4c1EwRkJRMG9zUlVGQlIwY3NRMEZCU1N4RlFVRkhRU3hEUVVGSkxFVkJRelZDTEU5QlFVdEVMRWRCUlUxRUxFVkJRVkZETEVWQlFVc3NRMEZCUXl4RlFVRkhSU3hGUVVGTExFTkJRVU1zUTBGQlF5eEpRVUZOUml4RlFVRkxMRU5CUVVNc1JVRkRkRU5CTEVWQlJrRkZMRU5CVFZnc1JVRkJSeXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVU5hTEVOQlJVOHNVMEZCVTBNc1IwRkJTME1zUlVGQlMwTXNSVUZCVFN4RFFVTTVRaXhQUVVGUFFTeEZRVUZMTEU5QlFVOHNRMEZCUTBNc1JVRkJSME1zUzBGRGNrSkVMRVZCUVVWRExFTkJRVU1zUlVGQlNVZ3NSVUZCU1Vjc1EwRkJReXhGUVVOTVJDeEhRVU5PTEVOQlFVTXNRMEZCUXl4RFFVTlFMRU5CUlU4c1UwRkJVMFVzUjBGQlpVb3NSVUZCUzBzc1JVRkJUU3hEUVVONFF5eFBRVUZQTEU5QlFVOHNWVUZCVlN4bFFVRmxMRXRCUVV0TUxFVkJRVXRMTEVOQlFVa3NRMEZEZGtRc1EwRkpUeXhUUVVGVFF5eEhRVUZsWml4RlFVRlBaMElzUlVGQlVVTXNSVUZCU3l4RFFVTnFSQ3hQUVVGUGRrSXNSMEZCVlUwc1EwRkJTeXhIUVVGTFFTeEhRVUZUWjBJc1IwRkJWV2hDTEVkQlFWTnBRaXhEUVVONlJDeERRVWRQTEZOQlFWTkRMRWRCUVZORExFVkJRVWRETEVWQlFVY3NRMEZETjBJc1QwRkJUMFFzUlVGQlNVTXNSVUZCU1N4TFFVRkxMRTFCUVUxRUxFVkJRVWxETEVOQlFVTXNRMEZEYWtNc1EwRkZUeXhUUVVGVFF5eEhRVUZUUXl4RlFVRlBSaXhGUVVGSkxFVkJRVWNzUTBGRGNrTXNTVUZCVFVjc1JVRkJVVVFzUlVGQlVTeEZRVU5zUWtVc1JVRkRTaXhQUVVGSlJDeEZRVU5HUXl4RlFVRlRMRXRCUVU4c1IwRkJTeXhEUVVGRFJpeEhRVUZQTEZOQlFWTkdMRVZCUVVjc1IwRkJSeXhGUVVVMVEwa3NSMEZCVlN4SFFVRkxSaXhIUVVGUExGTkJRVk5HTEVWQlFVY3NSMEZCUnl4RlFVVm9RMGtzUTBGRFZDeERRVVZQTEZOQlFWTkRMRWRCUVdGRExFVkJRVkVzUTBGRGJrTXNSMEZCU1N4RlFVRkJia01zUlVGQldXMURMRU5CUVUwc1IwRkJTMEVzU1VGQlZ5eE5RVUZSUVN4SlFVRlhMRWxCUjNaRUxFOUJRVThzVTBGQlUwRXNSVUZCVVN4RlFVRkZMRU5CUlRsQ0xFTkJSVThzVTBGQlUwTXNSMEZCWTBRc1JVRkJVU3hEUVVOd1F5eEhRVUZKTEVWQlFVRnVReXhGUVVGWmJVTXNRMEZCVFN4SFFVRkxRU3hKUVVGWExFMUJRVkZCTEVsQlFWY3NTVUZIZGtRc1QwRkJUeXhYUVVGWFFTeERRVUZOTEVOQlJUVkNMRU5CUlU4c1UwRkJVMFVzUjBGQldVTXNSVUZCVlN4RFFVVndReXhIUVVGSkxFVkJRVUYwUXl4RlFVRlpjME1zUTBGQlVTeEhRVUZMUVN4SlFVRmhMRTFCUVZGQkxFbEJRV0VzU1VGRmVFUXNRMEZEVEN4SlFVRk5ReXhGUVVGSkxGZEJRVmNzUzBGQlQwUXNRMEZCVVN4RlFVRkpMRWxCUTNoRExFOUJRVThzUzBGQlN5eE5RVUZOUXl4RFFVRkRMRU5CUTNKQ0xFTkJRMFlzUTBGRlR5eFRRVUZUUXl4SFFVRlJReXhGUVVGUlF5eEZRVUZSUXl4RlFVRmhMRWRCUVU4c1EwRkRNVVFzU1VGQlRVTXNSVUZCVXl4SlFVRk5SaXhGUVVWeVFpeFBRVVJaUXl4RlFVRmhMRXRCUVVzc1RVRkJVU3hMUVVGTExFOUJRelZDUml4RlFVRlRSeXhEUVVGTkxFVkJRVWxCTEVOQlEzQkRMRU5CU1U4c1UwRkJVME1zUjBGQlYwTXNSVUZCVFN4RFFVTXZRaXhQUVVGUFFTeEZRVUZQTEVsQlFVMHNTVUZCVFVFc1JVRkJUeXhOUVVGUkxFZEJRVXRCTEVWQlFVOHNUVUZCVVN4RlFVTXZSQ3hEUVVWUExGTkJRVk5ETEVkQlFWZEVMRVZCUVUwc1EwRkRMMElzVDBGQlQwUXNSMEZCVjBNc1EwRkJTU3hGUVVGSkxFbEJRVTBzUjBGRGJFTXNRMEZGVHl4VFFVRlRSU3hIUVVGWlJpeEZRVUZOUnl4RlFVRlBMRU5CUTNaRExFbEJRVTFETEVWQlFWZDJRaXhIUVVGVGMwSXNSVUZCVVN4RlFVRkhMRVZCUVVVc1JVRkJTU3hGUVVONlEwVXNSVUZCVlV3c1IwRkJVVWNzUlVGQlVVTXNSMEZCV1N4SFFVVjRReXhQUVVGSlFTeEpRVUZoTEVWQlExSk1MRWRCUVZkTkxFTkJRVThzUlVGQlNTeEhRVUZMTEVkQlJUTkNMRU5CUVVNc1IwRkJTU3hMUVVGTkxFZEJRVWtzUjBGQlNTeEhRVUZKTEVkQlFVa3NSMEZCU1N4SFFVRkpMRWRCUVVrc1IwRkJTU3hIUVVGSkxFVkJRVVVzUlVGQlJVUXNSVUZCVnl4RFFVRkRMRU5CUlRGRkxFTkJSMDhzVTBGQlUwVXNSMEZCWVd4RExFVkJRVXNzUTBGRGFFTXNTVUZCU1cxRExFVkJRVWtzUzBGQlN5eEpRVU5ZYmtNc1JVRkJTU3hMUVVOS1FTeEZRVUZKTEUxQlFWRXNSVUZEV2tFc1JVRkJTU3hKUVVOS1FTeEZRVUZKTEV0QlEwcEJMRVZCUVVrc1QwRkRTa0VzUlVGQlNTeFBRVU5LUVN4RlFVRkpMRmRCUTA0c1JVRkhRU3hQUVVGSlFTeEZRVUZKTEV0QlFVOHNTMEZCVDBFc1JVRkJTU3hOUVVGUkxFbEJRMmhEYlVNc1JVRkJTU3hKUVVGSkxFdEJRVXRCTEVOQlFVTXNSVUZEWkVFc1JVRkJSU3hsUVVGbFFTeEZRVUZGTEdWQlFXVXNSVUZCU1N4SlFVRkpMRWRCUlhKRExFTkJRVU5CTEVOQlExWXNRMEZGVHl4VFFVRlRReXhIUVVGblFrTXNSVUZCVlN4RFFVTjRReXhKUVVGTlF5eEhRVU5FUkN4RlFVTkRMRXRCUVVzc1RVRkJUVUVzUlVGQlZ5eERRVUZETEVWQlEzWkNMRXRCUVVzc1RVRkJUVUVzUlVGQlZ5eEhRVUZITEVWQlEzcENMRXRCUVVzc1RVRkJUVUVzUlVGQlZ5eEhRVUZITEVkQlF6TkNMRVZCUTBaRkxFVkJRVTlHTEVWQlFWY3NSVUZEYkVKSExFZEJRVTFFTEVWQlFVOHNTMEZCU3l4TlFVRk5RU3hGUVVGUExFTkJRVU1zUlVGQlNTeExRVUZMTEUxQlFVMUJMRVZCUVU4c1IwRkJSeXhGUVVGSkxFdEJRVXNzVFVGQlRVRXNSVUZCVHl4SFFVRkhMRWRCUVVzc1JVRkRla1lzVDBGQlQwUXNTVUZCVHl4SFFVRkxSU3hKUVVGUExFVkJRVWtzUjBGQlN5eEZRVU55UXl4RFFVVlBMRk5CUVZORExFZEJRV1ZpTEVWQlFVMHNRMEZEYmtNc1QwRkJTVUVzUlVGQlR5eEhRVU5HUVN4RlFVTkxRU3hGUVVGUExFZEJRVXNzUzBGQlQwRXNSVUZCVHl4SlFVRlBRU3hEUVVOcVJDeERRVWxQTEZOQlFWTmpMRWRCUVdORExFVkJRVWxETEVWQlFXTkRMRVZCUVZGRExFVkJRVmNzUzBGQlRTeERRVU4yUlN4SlFVRk5ReXhGUVVGUExFbEJRVWtzUzBGQlMwb3NRMEZCUlN4RlFVTjBRa3NzUlVGQlZ5eERRVU5VTEZWQlFWY3NUVUZEV0N4TFFVRk5MRlZCUTA0c1RVRkJUeXhWUVVOUUxFbEJRVXNzVlVGRFRDeExRVUZOTEZWQlEwNHNUMEZCVVN4VFFVTldMRVZCUlVWR0xFbEJRMFpGTEVWQlFWTXNVMEZCVjBZc1IwRkhkRUlzU1VGQlRVY3NSVUZCVjBNc1JVRkJRU3hEUVVGRkxHRkJRV05PTEVkQlFXbENTU3hIUVVVMVEwY3NSVUZCVXl4SlFVRkpMRXRCUVVzc1pVRkJaVTRzUlVGQlVVa3NRMEZCVVN4RlFVTndSQ3hqUVVGalJpeERRVUZKTEVWQlEyeENMRXRCUVUxTExFZEJRVTFCTEVWQlFVVXNTMEZCU3l4WlFVRlpMRWxCUVUwc1kwRkJZeXhGUVVOMFJDeFBRVUZQUkN4RlFVRlRRU3hGUVVGUExFMUJRVkVzU1VGRGFrTXNRMEZIVHl4VFFVRlRSU3hIUVVGaFF5eEZRVUZaUXl4RlFVRmpMRU5CUTNKRUxFbEJRVWxETEVWQlFWVXNVMEZCVTBZc1JVRkJXU3hGUVVGRkxFVkJSMnBETEU5QlFVOHNUVUZCVFVVc1EwRkJUeXhKUVVOMFFrRXNSVUZCVlN4SFFVZGFMRWxCUVUxRExFVkJRVk1zVTBGQlUwWXNSVUZCWXl4RlFVRkZMRWRCUVVzc1JVRkRNME5ITEVWQlFXVkdMRVZCUVZVc1IwRkJTeXhQUVVGUExFZEJRVWRCTEVWQlFWTXNSVUZCUlN4RlFVRkpMRU5CUVVORExFVkJRVk5CTEVWQlEyNUZMRTlCUVU5RUxFVkJRVlVzUjBGQlMwVXNRMEZEZUVJc1EwRkpUeXhUUVVGVFF5eEhRVUZUUXl4RlFVRlBMRU5CUXpsQ0xFbEJRVTFETEVWQlFXVXNUMEZCVDBRc1EwRkJTeXhGUVVOcVF5eEhRVUZKTEU5QlFVOUJMRWRCUVZVc1YwRkJZVUVzU1VGQlZTeEpRVUZOTEU5QlFVOHNUVUZCVFVNc1EwRkJXU3hGUVVONlJTeE5RVUZOTEVsQlFVbERMRWRCUVhGQ0xITkNRVUZ6UWtZc1EwRkJTeXhGUVVGRkxFVkJRemxFTEU5QlFVOURMRU5CUTFRc1EwRkZUeXhUUVVGVFJTeEhRVUZuUWk5RUxFVkJRVXRuUlN4RlFVRlpMRU5CUXk5RExFbEJRVTFETEVWQlFXRXNRMEZCUXl4RlFVTndRaXhSUVVGWFF5eExRVUZMYkVVc1JVRkRaQ3hIUVVGSlNTeEhRVUZsU2l4RlFVRkxhMFVzUTBGQlF5eEZRVUZITEVOQlF6RkNMRWxCUVUxRExFVkJRVWx1UlN4RlFVRkphMFVzUTBGQlF5eEZRVU5tTEVkQlFYVkNReXhIUVVGTkxFdEJRVTBzVTBGRGJrTkdMRVZCUVZkRUxFVkJRVmRGTEVOQlFVTXNRMEZCUXl4RlFVRkpVQ3hIUVVGVFVTeERRVUZETEVOQlEzaERMRU5CUlVZc1QwRkJUMFlzUTBGRFZDeERRVVZQTEZOQlFWTkhMRWRCUVdGRExFVkJRVkZETEVWQlFWRXNRMEZETTBNc1NVRkJUVU1zUlVGQlVTeExRVUZMTEUxQlFVMHNTMEZCU3l4SlFVRkpSaXhGUVVGVExFVkJRVVVzUTBGQlF5eEZRVU0xUTBjc1JVRkJWU3hMUVVGTExFMUJRVTBzUzBGQlN5eEpRVUZKU0N4RlFVRlRMRVZCUVVVc1EwRkJReXhGUVVNeFEwa3NSVUZCVDBvc1IwRkJWU3hGUVVGSkxFbEJRVTBzU1VGRk4wSXNUMEZCVVVNc1JVRkJVU3hEUVVOa0xFbEJRVXNzVVVGRFNDeE5RVUZQTEVkQlFVZEhMRU5CUVVrc1IwRkJSemRFTEVkQlFWTXlSQ3hGUVVGUExFTkJRVU1zUTBGQlF5eEpRVUZKTTBRc1IwRkJVelJFTEVWQlFWTXNRMEZCUXl4RFFVRkRMRWRCUXpkRUxFbEJRVXNzVTBGRFNDeE5RVUZQTEVkQlFVZERMRU5CUVVrc1IwRkJSMFlzUTBGQlN5eEhRVUZIUXl4RlFVRlZMRVZCUVVrc1NVRkJTVUVzUTBGQlR5eEhRVUZMTEVWQlFVVXNSMEZETTBRc1NVRkJTeXhUUVVOSUxFMUJRVThzUjBGQlIwTXNRMEZCU1N4SFFVRkhOMFFzUjBGQlV6SkVMRVZCUVU4c1EwRkJReXhEUVVGRExFZEJRVWN6UkN4SFFVRlRORVFzUlVGQlV5eERRVUZETEVOQlFVTXNSMEZETlVRc1VVRkRSU3hOUVVGTkxFbEJRVWtzVjBGQlZ5eG5Ra0ZCWjBKR0xFTkJRVTBzYzBOQlFYTkRMRU5CUTNKR0xFTkJRMFlzUTBGRlR5eFRRVUZUU1N4SFFVRlhNVVVzUlVGQlN5eERRVU01UWl4UFFVRlBSQ3hIUVVGTFF5eEZRVUZMTEVOQlFVTXNUMEZCVVN4VFFVRlZMRk5CUVZVc1lVRkJZU3hEUVVGRExFTkJRemxFTEVOQlJVOHNTVUZCVFRKRkxFZEJRMWdzSzBWRGNsRkxMRWxCUVUxRExFZEJRV0VzUTBGRGVFSXNWVUZEUVN4WFFVTkJMRkZCUTBFc1VVRkRRU3hOUVVOQkxFOUJRMEVzVDBGRFFTeFRRVU5CTEZsQlEwRXNWVUZEUVN4WFFVTkJMRlZCUTBZc1JVRkZZVU1zUjBGQll5eERRVU42UWl4TlFVTkJMRTFCUTBFc1RVRkRRU3hOUVVOQkxFMUJRMEVzVFVGRFFTeE5RVU5CTEUxQlEwRXNUVUZEUVN4TlFVTkJMRTFCUTBFc1MwRkRSaXhGUVVWaFF5eEhRVUZsTEVOQlFVTXNTVUZCU3l4SlFVRkxMRWxCUVVzc1NVRkJTeXhKUVVGTExFbEJRVXNzU1VGQlN5eEpRVUZMTEVsQlFVc3NTVUZCU3l4SlFVRkxMRWRCUVVjc1JVRkZhRVlzVTBGQlUwTXNSMEZCVDBNc1JVRkJVU3hEUVVNM1FpeFBRVUZSUVN4RlFVRlJMRU5CUTJRc1NVRkJTeXhUUVVOSUxFMUJRVThzUTBGQlF5eEhRVUZIUml4RlFVRlpMRVZCUTNwQ0xFbEJRVXNzVVVGRFNDeE5RVUZQTEVOQlFVTXNSMEZCUjBRc1JVRkJWeXhGUVVONFFpeEpRVUZMTEU5QlEwZ3NUVUZCVHl4RFFVRkRMRWRCUVVkRUxFVkJRVlVzUlVGRGRrSXNTVUZCU3l4VlFVTklMRTFCUVU4c1EwRkJReXhKUVVGTExFbEJRVXNzU1VGQlN5eEpRVUZMTEVsQlFVc3NTVUZCU3l4SlFVRkxMRWxCUVVzc1NVRkJTeXhMUVVGTkxFdEJRVTBzU1VGQlNTeEZRVU4yUlN4SlFVRkxMRlZCUTBnc1RVRkJUeXhEUVVGRExFdEJRVTBzUzBGQlRTeExRVUZOTEV0QlFVMHNTMEZCVFN4TFFVRk5MRXRCUVUwc1MwRkJUU3hMUVVGTkxFdEJRVTBzUzBGQlRTeEpRVUZKTEVWQlEyaEdMRkZCUTBVc1QwRkJUeXhKUVVOWUxFTkJRMFlzUTBGRlR5eEpRVUZOU3l4SFFVRmxMRU5CUXpGQ0xGTkJRMEVzVlVGRFFTeFpRVU5CTEZkQlEwRXNVMEZEUVN4WFFVTkJMRkZCUTBZc1JVRkZZVU1zUjBGQlowSXNRMEZCUXl4TlFVRlBMRTFCUVU4c1RVRkJUeXhOUVVGUExFMUJRVThzVFVGQlR5eExRVUZMTEVWQlJXaEZReXhIUVVGcFFpeERRVUZETEVsQlFVc3NTVUZCU3l4SlFVRkxMRWxCUVVzc1NVRkJTeXhKUVVGTExFZEJRVWNzUlVGRmVrUXNVMEZCVTBNc1IwRkJVMG9zUlVGQlVTeERRVU12UWl4UFFVRlJRU3hGUVVGUkxFTkJRMlFzU1VGQlN5eFRRVU5JTEUxQlFVOHNRMEZCUXl4SFFVRkhSeXhGUVVGakxFVkJRek5DTEVsQlFVc3NVVUZEU0N4TlFVRlBMRU5CUVVNc1IwRkJSMFFzUlVGQllTeEZRVU14UWl4SlFVRkxMRTlCUTBnc1RVRkJUeXhEUVVGRExFZEJRVWRFTEVWQlFWa3NSVUZEZWtJc1NVRkJTeXhWUVVOSUxFMUJRVThzUTBGQlF5eEpRVUZMTEVsQlFVc3NTVUZCU3l4SlFVRkxMRWxCUVVzc1NVRkJTeXhIUVVGSExFVkJRek5ETEZGQlEwVXNUMEZCVHl4SlFVTllMRU5CUTBZc1EwRkZUeXhKUVVGTlNTeEhRVUZaTEVOQlFVTXNTMEZCVFN4SlFVRkpMRVZCUlhaQ1F5eEhRVUZYTEVOQlFVTXNaMEpCUVdsQ0xHRkJRV0VzUlVGRk1VTkRMRWRCUVZrc1EwRkJReXhMUVVGTkxFbEJRVWtzUlVGRmRrSkRMRWRCUVdFc1EwRkJReXhKUVVGTExFZEJRVWNzUlVGRk5VSXNVMEZCVTBNc1IwRkJTMVFzUlVGQlVTeERRVU16UWl4UFFVRlJRU3hGUVVGUkxFTkJRMlFzU1VGQlN5eFRRVU5JTEUxQlFVOHNRMEZCUXl4SFFVRkhVU3hGUVVGVkxFVkJRM1pDTEVsQlFVc3NVVUZEU0N4TlFVRlBMRU5CUVVNc1IwRkJSMFFzUlVGQlV5eEZRVU4wUWl4SlFVRkxMRTlCUTBnc1RVRkJUeXhEUVVGRExFZEJRVWRFTEVWQlFWRXNSVUZEY2tJc1VVRkRSU3hQUVVGUExFbEJRMWdzUTBGRFJpeERRVVZQTEZOQlFWTkpMRWRCUVc5Q1F5eEZRVUZKTEVOQlEzUkRMRTlCUVU5T0xFZEJRVlZOTEVWQlFVY3NTMEZCVHl4SFFVRkxMRVZCUVVrc1EwRkJReXhEUVVOMlF5eERRVVZQTEZOQlFWTkRMRWRCUVcxQ1JDeEZRVUZKV0N4RlFVRlJMRU5CUXpkRExFOUJRVTlKTEVkQlFWTktMRU5CUVUwc1JVRkJSVmNzUlVGQlJ5eFJRVUZWTEVOQlFVTXNRMEZEZUVNc1EwRkZUeXhUUVVGVFJTeEhRVUZwUWtZc1JVRkJTVmdzUlVGQlVTeERRVU16UXl4UFFVRlBSQ3hIUVVGUFF5eERRVUZOTEVWQlFVVlhMRVZCUVVjc1RVRkJVU3hEUVVGRExFTkJRM0JETEVOQlJVOHNVMEZCVTBjc1IwRkJaVWdzUlVGQlNWZ3NSVUZCVVN4RFFVTjZReXhQUVVGUFV5eEhRVUZMVkN4RFFVRk5MRVZCUVVWWExFVkJRVWNzUzBGQlR5eEZRVUZKTEVWQlFVa3NRMEZCUXl4RFFVTjZReXhEUVVWUExGTkJRVk5KTEVkQlFXMUNReXhGUVVGTlF5eEZRVUZQUXl4RlFVRlZMRk5CUVZWRExFVkJRVk1zUjBGQlR5eERRVU5zUml4SlFVRk5ReXhGUVVGUkxFTkJRMW9zVFVGQlR5eERRVUZETEU5QlFWRXNTMEZCU3l4RlFVTnlRaXhUUVVGVkxFTkJRVU1zVlVGQlZ5eE5RVUZOTEVWQlF6VkNMRTlCUVZFc1EwRkJReXhSUVVGVExFdEJRVXNzUlVGRGRrSXNUVUZCVHl4RFFVRkRMRTlCUVZFc1MwRkJTeXhGUVVOeVFpeExRVUZOTEVOQlFVTXNUVUZCVHl4TlFVRlBMRTFCUVUwc1JVRkRNMElzVFVGQlR5eERRVUZETEU5QlFWRXNTMEZCU3l4RlFVTnlRaXhSUVVGVExFTkJRVU1zVTBGQlZTeE5RVUZOTEVWQlF6RkNMRkZCUVZNc1EwRkJReXhUUVVGVkxFMUJRVTBzUTBGRE5VSXNSVUZGVFVNc1JVRkJWeXhEUVVGRExGRkJRVk1zVlVGQlZ5eFRRVUZUTEVWQlFVVXNVVUZCVVV3c1EwRkJTU3hKUVVGTkxFZEJSVzVGTEVkQlFVbEZMRWxCUVZrc1VVRkJWVWNzUlVGQlZTeERRVU5zUXl4SlFVRk5ReXhGUVVGUlRpeEpRVUZUTEU5QlEzWkNMRTlCUVZGRExFVkJRVThzUTBGRFlpeEpRVUZMTEVkQlEwZ3NUMEZCVDBzc1JVRkJVU3hYUVVGaExGRkJRVkZHTEVWQlFVMUtMRU5CUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGRGNFUXNTVUZCU3l4SFFVTklMRTlCUVU5TkxFVkJRVkVzV1VGQll5eFJRVUZSUml4RlFVRk5TaXhEUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETEVkQlEzSkVMRWxCUVVzc1IwRkRTQ3hQUVVGUFRTeEZRVUZSTEZGQlFWVXNVVUZCVVVZc1JVRkJUVW9zUTBGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVTnFSQ3hSUVVOR0xFTkJRMFlzUTBGRlFTeEpRVUZOVHl4RlFVRlhMRTlCUVU4c1IwRkJSMDRzUlVGQlR5eEZRVUZGTEVkQlFVdEJMRVZCUVZFc1JVRkRMME5QTEVWQlFWY3NTMEZCU3l4SlFVRkpVQ3hEUVVGTExFVkJRM3BDVVN4RlFVRlhSQ3hKUVVGaExFVkJRM2hDUlN4RlFVRlhUaXhGUVVGTlNpeERRVUZKTEVWQlEzSkNWeXhGUVVGVlVpeEZRVU5PVFN4RlFVTkZReXhGUVVGVExFTkJRVU1zUlVGRFZrRXNSVUZCVXl4RFFVRkRMRWRCUVV0QkxFVkJRVk1zUTBGQlF5eEZRVU16UWtRc1JVRkRRVXdzUlVGQlRVb3NRMEZCU1N4RlFVRkZMRU5CUVVNc1JVRkRZa0VzUlVGRFRpeFBRVUZQVHl4RlFVRlhMRWRCUVVkRExFTkJRVkVzU1VGQlNVY3NRMEZCVHl4UFFVRlRMRTFCUVUxSUxFTkJRVkVzU1VGQlNVY3NRMEZCVHl4RlFVTTFSU3hEUTJwTFFTeFRRVUZUUXl4SFFVRm5Ra01zUlVGQlVVTXNSVUZCWlN4RFFVTTVReXhKUVVGSlF5eEZRVUZKTEVkQlExSXNVVUZCVjBNc1MwRkJVMGdzUlVGRFpFY3NSVUZCVFN4UlFVTlNSQ3hIUVVGTFF5eEZRVUZOTEVsQlJWaEVMRWRCUVV0RUxFVkJRV05GTEVWQlFVMHNSMEZCUnl4RlFVZG9ReXhQUVVGUFJDeERRVU5VTEVOQlJVRXNTVUZCVFVVc1IwRkJlVUlzUTBGRE4wSXNSVUZCVjBNc1IwRkRXQ3hIUVVGWlF5eEhRVU5hTEVsQlFXRkRMRWRCUTJJc1MwRkJZME1zUjBGRFpDeEZRVUZYUXl4SFFVTllMRWRCUVZsRExFZEJRMW9zU1VGQllVTXNSMEZEWWl4TFFVRmpReXhIUVVOa0xFVkJRVmRETEVkQlExZ3NSMEZCV1VNc1IwRkRXaXhKUVVGaFF5eEhRVU5pTEV0QlFXTkRMRWRCUTJRc1JVRkJWME1zUjBGRFdDeEhRVUZaUXl4SFFVTmFMRWxCUVdGRExFZEJRMklzUzBGQlkwTXNSMEZEWkN4RlFVRlhReXhIUVVOWUxFZEJRVmxETEVkQlExb3NTVUZCWVVNc1IwRkRZaXhMUVVGalF5eEZRVU5vUWl4RlFVMXhRa01zUjBGQmNrSXNUVUZCY1VKRExFTkJRVlVzUTBGRE4wSXNUMEZCVHl4UFFVRlBReXhGUVVGUlF5eEZRVUZQTEVOQlFVTXNSVUZCUnl4RFFVTXZRaXhQUVVGUExFbEJRVWxHTEVWQlFWVkRMRVZCUVZGRExFTkJRVWtzUTBGRGJrTXNRMEZGUVN4UFFVRlBMRmxCUVZsRExFVkJRVXNzUTBGRGRFSXNTVUZCU1VNc1JVRkJWU3hMUVVOYVF5eEZRVUZqTEVkQlEyUkRMRVZCUVZrc1IwRkRVbWhETEVWQlFWTXNRMEZCUXl4RlFVTm9RaXhSUVVGVGFVTXNSVUZCU1N4RlFVRkhRU3hGUVVGSlNpeEZRVUZKTEU5QlFWRkpMRWxCUVVzc1EwRkRia01zU1VGQlRVTXNSVUZCU1V3c1JVRkJTU3hQUVVGUFNTeERRVUZETEVWQlEyeENReXhKUVVGTkxFdEJRMHBJTEVWQlFWa3NUMEZCVXl4SFFVTjJRaTlDTEVWQlFVOHNTMEZCU3l4RFFVRkZMRkZCUVZOblF5eEZRVUZYTEVsQlFVdEVMRU5CUVZrc1EwRkJReXhGUVVWMFJFUXNSVUZCVlN4TFFVTldReXhGUVVGakxFZEJRMlJETEVWQlFWa3NRMEZCUTBFc1IwRkRTa0VzUjBGRlFVVXNTVUZCVFVvc1JVRkVaa01zUjBGQlpVY3NSMEZKV0Vnc1JVRkJXU3hQUVVGVExFZEJRM1pDTDBJc1JVRkJUeXhMUVVGTExFTkJRVVVzVVVGQlV5eEhRVUZQTEVsQlFVc3JRaXhEUVVGWkxFTkJRVU1zUlVGRmJFUkJMRVZCUVdOSExFVkJRMlJLTEVWQlFWVkpMRVZCUldRc1EwRkZRU3hQUVVGSlNDeEZRVUZaTEU5QlFWTXNSMEZEZGtJdlFpeEZRVUZQTEV0QlFVc3NRMEZCUlN4UlFVRlRaME1zUlVGQlZ5eEpRVUZMUkN4RFFVRlpMRU5CUVVNc1JVRkhMME12UWl4RFFVTlVMRU5CUlVFc1QwRkJUeXgxUWtGQmRVSkhMRVZCUVU4c1EwRkRia01zVDBGQlQwTXNSMEZCZFVKRUxFTkJRVXNzUTBGRGNrTXNRMEZGUVN4WlFVRlpkMElzUlVGQlVWRXNSVUZCV1N4RFFVTTVRaXhMUVVGTExFdEJRVTlCTEVWQlExb3NTMEZCU3l4SlFVRk5VaXhGUVVOWUxFdEJRVXNzVlVGQldTeEpRVU51UWl4RFFVVkJMSGRDUVVGM1FsTXNSVUZCU1ZJc1JVRkJUU3hEUVVOb1F5eFBRVUZKTEV0QlFVc3NXVUZCWXl4UFFVTnlRaXhMUVVGTExGVkJRVmtzUzBGQlN5eEpRVUZKTEd0Q1FVRnJRaXhIUVVWdVF5eExRVUZMTEZWQlFWVXNXVUZCV1ZFc1JVRkJTVU1zU1VGQlFTeEhRVUZMTEV0QlFVc3NUVUZCVTFRc1JVRkJUU3hGUVVONlJDeFBRVUZQTEVOQlEyNUNMRU5CUlVFc1pVRkJaVkVzUlVGQlNWSXNSVUZCVHl4RFFVRkRMRVZCUVVjc1EwRkZOVUlzVDBGRVZ5eExRVUZMTEVsQlFVa3NXVUZCV1ZFc1JVRkJTVU1zU1VGQlFTeEhRVUZMTEV0QlFVc3NUVUZCVTFRc1JVRkJUU3hGUVVOdVJDeFBRVUZQTEVOQlEyNUNMRU5CUlVFc2IwSkJRVzlDVVN4RlFVRkpVaXhGUVVGUExFTkJRVU1zUlVGQlJ5eERRVVZxUXl4UFFVUlhMRXRCUVVzc1NVRkJTU3haUVVGWlVTeEZRVUZKUXl4SlFVRkJMRWRCUVVzc1MwRkJTeXhOUVVGVFZDeEZRVUZOTEVWQlEyNUVMR05CUVdNc1EwRkRNVUlzUTBGRlFTeG5Ra0ZCWjBKUkxFVkJRVWxTTEVWQlFVOHNRMEZCUXl4RlFVRkhMRU5CUlRkQ0xFOUJSRmNzUzBGQlN5eEpRVUZKTEZsQlFWbFJMRVZCUVVsRExFbEJRVUVzUjBGQlN5eExRVUZMTEUxQlFWTlVMRVZCUVUwc1JVRkRia1FzWjBKQlFXZENMRU5CUXpWQ0xFTkJSVUVzU1VGQlNWVXNSVUZCUjBNc1JVRkJTU3hGUVVGSExFTkJSVm9zUjBGQlNTeExRVUZMTEV0QlFVc3NXVUZEV2l4UFFVRlBReXhIUVVGVFJpeEZRVUZIUXl4RFFVRkRMRVZCUjNSQ0xFbEJRVTFZTEVWQlFVOVRMRVZCUVVFc1IwRkJTeXhMUVVGTExFMUJSWFpDTEU5QlFVbEZMRVZCUVVrc1NVRkRUbGdzUlVGQlN5eE5RVUZSVnl4SFFVZFNMRXRCUVVzc1NVRkJTU3huUWtGQlowSllMRU5CUVVrc1JVRkJSU3hQUVVGUFZTeERRVUZETEVOQlEyaEVMRU5CUlVFc2VVSkJRWGxDUml4RlFVRkpVQ3hGUVVGTExFTkJRMmhETEVsQlFVMVpMRVZCUVdVc1MwRkJTeXhKUVVGSkxGbEJRVmtzU1VGQlRTeExRVU01UTBNc1JVRkJkVUlzUzBGQlN5eEpRVUZKTEdkQ1FVRnJRaXhMUVVGTExFbEJRVWtzYVVKQlFXMUNMRlZCUXpsRlF5eEZRVUZUTEVOQlFVTm1MRVZCUVUxblFpeEpRVUZaTEV0QlFVc3NTVUZCU1N4UlFVRlJVaXhGUVVGSlVpeEZRVUZOWjBJc1EwRkJUeXhGUVVNNVJFTXNSVUZCWjBKcVFpeEhRVU5XVVN4RlFVRkhMR1ZCUVdsQ1FTeEZRVUZITEZOQlFWY3NSMEZCUzFJc1JVRkJTeXhQUVVOMlF5eEpRVWRHVVN4RlFVRkhMRkZCUVZWQkxFVkJRVWNzUzBGQlN5eGhRVUZoUVN4RlFVRkhMRWRCUVVsU0xFVkJRVXNzVFVGQlRTeEZRVUZKTEVkQlJXcEZhMElzUlVGQlZ5eEpRVU5VVEN4RlFVTlpUU3hIUVVGdlFsZ3NRMEZCUlN4RlFVTTVRazhzUlVGQlR5eERRVUZGTEV0QlFVMHNWVUZCVnl4VlFVRlhMRXRCUVUwc1JVRkJSeXhYUVVGWExFVkJReTlFU3l4RlFVRlJMRU5CUVVORExFVkJRVkZETEVsQlEyWlVMRVZCUTFsVkxFZEJRV2xDWml4RlFVRkpZU3hEUVVGTkxFVkJRMjVEVGl4RlFVRlBUeXhGUVVGaExFTkJRVVVzVFVGQlQwUXNRMEZCVHl4RlFVRkpMRU5CUVVVc1RVRkJUMEVzUlVGQlVTeEpRVUZMTEZOQlFWVXNSVUZCUnl4UFFVRlBMRVZCUTNoR1J5eEZRVUZWTEVOQlFVTklMRVZCUVZGRExFbEJRMnBDVkN4RlFVTlpXU3hIUVVGdFFtcENMRVZCUVVsaExFTkJRVTBzUlVGRGNrTk9MRVZCUTBWUExFVkJRV0VzUTBGQlJTeFJRVUZUUkN4RFFVRlBMRVZCUVVrc1EwRkJSU3hSUVVGVFFTeEZRVUZSTEUxQlFVOHNUMEZCVVN4SlFVRkxMRk5CUVZVc1JVRkRjRVlzVTBGRFJpeEZRVU5PU3l4RlFVRmpia1FzUjBGQlZTeERRVU4wUWl4SlFVRk5aME1zUlVGQllWUXNSVUZCVlN4MVFrRkJkVUoyUWl4RFFVRkxMRVZCUTNwRUxFOUJRVWxuUXl4RlFVTkxMRXRCUVVzc2QwSkJRWGRDUXl4RlFVRkpSQ3hEUVVGVkxFVkJSVE5EYUVNc1EwRkZXQ3hGUVVOQmIwUXNSVUZCVDA0c1IwRkRURklzUlVGQmRVSmxMRWRCUVdWd1FpeEZRVUZKWVN4RFFVRk5MRVZCUVVsT0xFVkJRVThzUTBGQlJTeEpRVUZMVFN4RFFVRlBMRVZCUVVjc1MwRkJTeXhGUVVOdVJtaEVMRVZCUVdsQ1JTeEhRVUZWTEVOQlJYcENMRTlCUVZGQkxFVkJRVThzUTBGRllpeEpRVUZMTEVsQlEwZ3NUMEZCVHl4TFFVRkxMRWxCUVVscFF5eEZRVUZITEZkQlFWY3NSVUZEYUVNc1NVRkJTeXhKUVVWTUxFbEJRVXNzVFVGRFNDeFBRVUZQTEV0QlFVc3NTVUZCU1VFc1JVRkJSeXhaUVVGaExFTkJRVU1zUlVGRmJrTXNTVUZCU3l4SlFVTklMRTlCUVU4c1MwRkJTeXhKUVVGSlFTeEZRVUZITEUxQlFVMHNSVUZETTBJc1NVRkJTeXhMUVVOSUxFOUJRVThzUzBGQlN5eEpRVUZKUVN4RlFVRkhMRTlCUVZFc1EwRkJReXhGUVVVNVFpeEpRVUZMTEV0QlEwZ3NUMEZCVHl4TFFVRkxMRWxCUVVrc1MwRkJTeXhOUVVGTlFTeEZRVUZITEZsQlFXTXNSVUZCUlN4RlFVRkhMRU5CUVVNc1JVRkRjRVFzU1VGQlN5eE5RVU5JTEU5QlFVOHNTMEZCU3l4SlFVRkpMRXRCUVVzc1RVRkJUVUVzUlVGQlJ5eFpRVUZqTEVkQlFVY3NRMEZCUXl4RlFVVnNSQ3hKUVVGTExFbEJRMGdzVDBGQlR5eExRVUZMTEVsQlFVbEJMRVZCUVVjc1RVRkJUU3hGUVVNelFpeEpRVUZMTEV0QlEwZ3NUMEZCVHl4TFFVRkxMRWxCUVVsQkxFVkJRVWNzVDBGQlVTeERRVUZETEVWQlJUbENMRWxCUVVzc1NVRkRTQ3hQUVVGUExFdEJRVXNzU1VGQlNVRXNSVUZCUnl4TFFVRlBMRXRCUVU4c1JVRkJTU3hIUVVGTFFTeEZRVUZITEV0QlFVOHNSVUZCUlN4RlFVTjRSQ3hKUVVGTExFdEJRMGdzVDBGQlR5eExRVUZMTEVsQlFVbEJMRVZCUVVjc1MwRkJUeXhMUVVGUExFVkJRVWtzUjBGQlMwRXNSVUZCUnl4TFFVRlBMRWRCUVVrc1EwRkJReXhGUVVNelJDeEpRVUZMTEVsQlEwZ3NUMEZCVHl4TFFVRkxMRWxCUVVsQkxFVkJRVWNzU1VGQlNTeEZRVU42UWl4SlFVRkxMRXRCUTBnc1QwRkJUeXhMUVVGTExFbEJRVWxCTEVWQlFVY3NTMEZCVFN4RFFVRkRMRVZCUlRWQ0xFbEJRVXNzU1VGRlNDeFBRVUZQVXl4RlFVRmhMRU5CUVVVc1QwRkJVU3hUUVVGVkxFOUJRVkVzUzBGQlN5eExRVUZMTEUxQlFVOHNRMEZCUXl4RlFVTndSU3hKUVVGTExFdEJSVWdzVDBGQlQwRXNSVUZCWVN4RFFVRkZMRTlCUVZFc1VVRkJVeXhQUVVGUkxFdEJRVXNzUzBGQlN5eE5RVUZQTEVOQlFVTXNSVUZEYmtVc1NVRkJTeXhOUVVWSUxFOUJRVTlCTEVWQlFXRXNRMEZCUlN4UFFVRlJMRk5CUVZVc1QwRkJVU3hMUVVGTExFdEJRVXNzVFVGQlR5eERRVUZETEVWQlEzQkZMRWxCUVVzc1QwRkZTQ3hQUVVGUFZDeEZRVUZITEV0QlFVc3NWMEZCVjBFc1JVRkJSeXhIUVVGSkxFTkJRVVVzVDBGQlVTeFJRVUZUTEU5QlFWRXNTMEZCU3l4SlFVRkpMRTFCUVU4c1EwRkJReXhGUVVNdlJTeEpRVUZMTEZGQlJVZ3NUMEZCVDBFc1JVRkJSeXhMUVVGTExGZEJRVmRCTEVWQlFVY3NSMEZCU1N4RFFVRkZMRTlCUVZFc1QwRkJVU3hQUVVGUkxFdEJRVXNzU1VGQlNTeE5RVUZQTEVOQlFVTXNSVUZGT1VVc1NVRkJTeXhKUVVWSUxFOUJRVTlCTEVWQlFVY3NVMEZGV2l4SlFVRkxMRWxCUTBnc1QwRkJUMVVzUlVGQlV5eEZRVVZzUWl4SlFVRkxMRWxCUTBnc1QwRkJUMG9zUlVGQmRVSkRMRVZCUVU4c1EwRkJSU3hKUVVGTExGTkJRVlVzUlVGQlJ5eExRVUZMTEVWQlFVa3NTMEZCU3l4SlFVRkpVQ3hGUVVGSExFZEJRVWNzUlVGRGJrWXNTVUZCU3l4TFFVTklMRTlCUVU5TkxFVkJRWFZDUXl4RlFVRlBMRU5CUVVVc1NVRkJTeXhUUVVGVkxFVkJRVWNzUzBGQlN5eEZRVUZKTEV0QlFVc3NTVUZCU1ZBc1JVRkJSeXhKUVVGTExFTkJRVU1zUlVGRmRFWXNTVUZCU3l4SlFVVklMRTlCUVU4c1MwRkJTeXhKUVVGSlFTeEZRVUZITEU5QlFVOHNSVUZETlVJc1NVRkJTeXhOUVVWSUxFOUJRVTluUWl4RlFVRlJMRkZCUVZNc1JVRkJTU3hGUVVNNVFpeEpRVUZMTEU5QlJVZ3NUMEZCVDBFc1JVRkJVU3hQUVVGUkxFVkJRVWtzUlVGRE4wSXNTVUZCU3l4UlFVVklMRTlCUVU5QkxFVkJRVkVzVTBGQlZTeEZRVUZKTEVWQlJTOUNMRWxCUVVzc1NVRkZTQ3hQUVVGUExFdEJRVXNzU1VGQlNXaENMRVZCUVVjc1QwRkJUeXhGUVVNMVFpeEpRVUZMTEUxQlJVZ3NUMEZCVDJkQ0xFVkJRVkVzVVVGQlV5eEZRVUZMTEVWQlF5OUNMRWxCUVVzc1QwRkZTQ3hQUVVGUFFTeEZRVUZSTEU5QlFWRXNSVUZCU3l4RlFVTTVRaXhKUVVGTExGRkJSVWdzVDBGQlQwRXNSVUZCVVN4VFFVRlZMRVZCUVVzc1JVRkZhRU1zU1VGQlN5eEpRVVZJTEU5QlFVOVdMRVZCUTBoRExFVkJRVThzUTBGQlJTeE5RVUZQTEZWQlFWY3NTVUZCU3l4VFFVRlZMRVZCUVVjc1QwRkJUeXhGUVVOd1JDeExRVUZMTEVsQlFVbFFMRVZCUVVjc1MwRkJTeXhGUVVOMlFpeEpRVUZMTEV0QlJVZ3NUMEZCVDAwc1JVRkRTRU1zUlVGQlR5eERRVUZGTEUxQlFVOHNWVUZCVnl4SlFVRkxMRk5CUVZVc1JVRkJSeXhQUVVGUExFVkJRM0JFTEV0QlFVc3NTVUZCU1ZBc1JVRkJSeXhOUVVGUExFTkJRVU1zUlVGRE1VSXNTVUZCU3l4TlFVVklMRTlCUVU5WkxFVkJRVTBzVVVGQlV5eEZRVUZKTEVWQlF6VkNMRWxCUVVzc1QwRkZTQ3hQUVVGUFFTeEZRVUZOTEU5QlFWRXNSVUZCU1N4RlFVTXpRaXhKUVVGTExGRkJSVWdzVDBGQlQwRXNSVUZCVFN4VFFVRlZMRVZCUVVrc1JVRkZOMElzU1VGQlN5eEpRVVZJTEU5QlFVOU9MRVZCUTBoRExFVkJRVThzUTBGQlJTeE5RVUZQTEZOQlFWVXNSVUZCUnl4UFFVRlBMRVZCUTNCRExFdEJRVXNzU1VGQlNWQXNSVUZCUnl4TFFVRkxMRVZCUTNaQ0xFbEJRVXNzUzBGRlNDeFBRVUZQVFN4RlFVTklReXhGUVVGUExFTkJRVVVzVFVGQlR5eFRRVUZWTEVWQlFVY3NUMEZCVHl4RlFVTndReXhMUVVGTExFbEJRVWxRTEVWQlFVY3NUVUZCVHl4RFFVRkRMRVZCUXpGQ0xFbEJRVXNzVFVGRlNDeFBRVUZQV1N4RlFVRk5MRkZCUVZNc1JVRkJTeXhGUVVNM1FpeEpRVUZMTEU5QlJVZ3NUMEZCVDBFc1JVRkJUU3hQUVVGUkxFVkJRVXNzUlVGRE5VSXNTVUZCU3l4UlFVVklMRTlCUVU5QkxFVkJRVTBzVTBGQlZTeEZRVUZMTEVWQlJUbENMRWxCUVVzc1NVRkZTQ3hQUVVGUFRpeEZRVUYxUWtNc1JVRkJUeXhEUVVGRkxFdEJRVTBzVTBGQlZTeEZRVUZITEUxQlFVMHNSVUZCU1N4TFFVRkxMRWxCUVVsUUxFVkJRVWNzU1VGQlNTeEZRVU4wUml4SlFVRkxMRXRCUlVnc1QwRkJUMDBzUlVGRFNFTXNSVUZCVHl4RFFVRkZMRXRCUVUwc1UwRkJWU3hGUVVGSExFMUJRVTBzUlVGRGJFTXNTMEZCU3l4SlFVRkpVQ3hGUVVGSExFdEJRVXNzVTBGQlV5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RlFVRkhMRU5CUVVNc1JVRkRPVU1zU1VGQlN5eFBRVVZJTEU5QlFVOU5MRVZCUTBoRExFVkJRVThzUTBGQlJTeExRVUZOTEZOQlFWVXNSVUZCUnl4TlFVRk5MRVZCUTJ4RExFdEJRVXNzU1VGQlNWQXNSVUZCUnl4TFFVRk5MRU5CUVVNc1JVRkRla0lzU1VGQlN5eFRRVVZJTEU5QlFVOU5MRVZCUTBoRExFVkJRVThzUTBGQlJTeExRVUZOTEZOQlFWVXNSVUZCUnl4TlFVRk5MRVZCUTJ4RExFdEJRVXNzU1VGQlNWQXNSVUZCUnl4TFFVRk5MRU5CUVVNc1JVRkZla0lzU1VGQlN5eEpRVVZJTEU5QlFVOXRRaXhGUVVGSkxFOUJRVThzUlVGRGNFSXNTVUZCU3l4TFFVVklMRTlCUVU5QkxFVkJRVWtzVFVGQlRTeEZRVU51UWl4SlFVRkxMRkZCUTBnc1QwRkJUMEVzUlVGQlNTeFJRVUZSTEVWQlEzSkNMRWxCUVVzc1MwRkRTQ3hQUVVGUExFdEJRVXNzU1VGQlNXNUNMRVZCUVVjc1UwRkJVeXhUUVVGVExFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVY3NRMEZCUXl4RlFVTnlSQ3hKUVVGTExFOUJRMGdzVDBGQlR5eExRVUZMTEVsQlFVbEJMRVZCUVVjc1UwRkJWU3hEUVVGRExFVkJRMmhETEVsQlFVc3NTVUZEU0N4UFFVRlBMRXRCUVVzc1NVRkJTVUVzUlVGQlJ5eFZRVUZWTEVWQlF5OUNMRWxCUVVzc1MwRkRTQ3hQUVVGUExFdEJRVXNzU1VGQlNVRXNSVUZCUnl4WFFVRlpMRU5CUVVNc1JVRkRiRU1zU1VGQlN5eEpRVU5JTEU5QlFVOHNTMEZCU3l4SlFVRkpRU3hGUVVGSExFOUJRVThzUlVGRE5VSXNTVUZCU3l4TlFVTklMRTlCUVU4c1MwRkJTeXhKUVVGSlFTeEZRVUZITEZGQlFWTXNRMEZCUXl4RlFVTXZRaXhKUVVGTExFbEJSVWdzVDBGQlR5eExRVUZMTEVsQlFVbEJMRVZCUVVjc1QwRkJUeXhGUVVNMVFpeEpRVUZMTEV0QlJVZ3NUMEZCVHl4TFFVRkxMRWxCUVVsQkxFVkJRVWNzVVVGQlV5eERRVUZETEVWQlF5OUNMRWxCUVVzc1NVRkRTQ3hQUVVGUExFdEJRVXNzU1VGQlNTeExRVUZMTEUxQlFVMUJMRVZCUVVjc1IwRkJTeXhIUVVGSkxFTkJRVU1zUlVGRE1VTXNTVUZCU3l4SlFVTklMRTlCUVU4c1MwRkJTeXhKUVVGSlFTeEZRVUZITEVWQlFVVXNSVUZEZGtJc1VVRkRSU3hQUVVGUGEwSXNSVUZCVjI1RUxFTkJRVXNzUTBGRE0wSXNRMEZEUml4RlFVVkdMRTlCUVU5S0xFZEJRV2RDTWtJc1JVRkJWU3haUVVGWlJ5eERRVUZITEVWQlFVYzFRaXhEUVVGaExFTkJRMnhGTEVOQlJVRXNlVUpCUVhsQ2QwUXNSVUZCU3pWQ0xFVkJRVXNzUTBGRGFrTXNTVUZCVFRaQ0xFVkJRV2RDZGtRc1IwRkJWU3hEUVVNMVFpeFBRVUZSUVN4RlFVRk5MRU5CUVVNc1JVRkJSeXhEUVVOb1FpeEpRVUZMTEVsQlEwZ3NUVUZCVHl4alFVTlVMRWxCUVVzc1NVRkRTQ3hOUVVGUExGTkJRMVFzU1VGQlN5eEpRVU5JTEUxQlFVOHNVMEZEVkN4SlFVRkxMRWxCUTBnc1RVRkJUeXhQUVVOVUxFbEJRVXNzU1VGRFNDeE5RVUZQTEUxQlExUXNTVUZCU3l4SlFVTklMRTFCUVU4c1QwRkRWQ3hKUVVGTExFbEJRMGdzVFVGQlR5eFJRVU5VTEVsQlFVc3NTVUZEU0N4TlFVRlBMRTlCUTFRc1VVRkRSU3hQUVVGUExFbEJRMWdzUTBGRFJpeEZRVU5CUml4RlFVRnBRakJFTEVkQlFWbDRSQ3hIUVVGVkxFTkJRM0pETEVsQlFVMTVSQ3hGUVVGVFJpeEZRVUZoZGtRc1EwRkJTeXhGUVVOcVF5eFBRVUZKZVVRc1JVRkRTeXhMUVVGTExFbEJRVWxFTEVWQlFVOHNTVUZCU1VNc1EwRkJUU3hGUVVGSGVrUXNSVUZCVFN4TlFVRk5MRVZCUlhwRFFTeERRVVZZTEVWQlEwRXdSQ3hGUVVGVGJrTXNSVUZCVlN4WlFVRlpSeXhEUVVGSExFVkJRMnhEYVVNc1JVRkJZVVFzUlVGQlR5eFBRVU5zUWl4RFFVRkRSU3hGUVVGUExFTkJRVVVzVVVGQlFVTXNSVUZCVXl4SlFVRkJReXhEUVVGSkxFbEJRVTlFTEVWQlFWVkVMRVZCUVZGQkxFVkJRVTBzVDBGQlQwVXNRMEZCUnl4RlFVTm9SU3hEUVVGRExFTkJRMGdzUlVGRFFVTXNSVUZCV1ZRc1JVRkJTU3hSUVVGUkxFZEJRVWRMTEVWQlFWY3NTVUZCU1Vvc1EwRkJXU3hGUVVGRkxFOUJRVkZUTEVkQlFVMUJMRU5CUVVNc1EwRkJReXhGUVVNeFJTeFBRVUZQY0VVc1IwRkJaMEk0UkN4RlFVRlJOVVFzUlVGQlkybEZMRU5CUVZNc1EwRkJReXhEUVVONlJDeERRVU5HTEVWRGRsbEJMRWxCUVhGQ1JTeEhRVUZ5UWl4TFFVRTJRaXhEUVVNelFpeFpRVUZaUXl4RlFVRlJReXhGUVVGaExFTkJReTlDTEV0QlFVc3NUMEZCVTBRc1JVRkRaQ3hMUVVGTExGbEJRV05ETEVOQlEzSkNMRU5CUlVFc1YwRkJXU3hEUVVOV0xFOUJRVWtzUzBGQlN5eFpRVU5CTEVkQlFVY3NTMEZCU3l4TlFVRk5MRXRCUVVzc1MwRkJTeXhYUVVGWExFZEJSVzVETEV0QlFVc3NUVUZGYUVJc1EwRkRSaXhGUTFKQkxFbEJRWEZDUXl4SFFVRnlRaXhMUVVFd1FpeERRVTE0UWl4SlFVRkpMRTFCUVU4c1EwRkRWQ3hOUVVGTkxFbEJRVWxETEVWQlExb3NRMEZQUVN4SlFVRkpMRTFCUVU4c1EwRkRWQ3hOUVVGTkxFbEJRVWxCTEVWQlExb3NRMEZGUVN4SlFVRkpMRlZCUVZjc1EwRkRZaXhQUVVGUExFdEJRVXNzU1VGRFpDeERRVTlCTEVsQlFVa3NZVUZCWXl4RFFVTm9RaXhOUVVGTkxFbEJRVWxCTEVWQlExb3NRMEZYUVN4WFFVRlhReXhGUVVGSlF5eEZRVUZOTEVOQlEyNUNMRTFCUVUwc1NVRkJTVVlzUlVGRFdpeERRVlZCTEdGQlFXRkRMRVZCUVVsRkxFVkJRVkVzUTBGRGRrSXNUVUZCVFN4SlFVRkpTQ3hGUVVOYUxFTkJVVUVzVDBGQlQwTXNSVUZCU1N4RFFVTlVMRTFCUVUwc1NVRkJTVVFzUlVGRFdpeERRVkZCTEU5QlFVOUpMRVZCUVZjc1EwRkRhRUlzVFVGQlRTeEpRVUZKU2l4RlFVTmFMRU5CVDBFc1NVRkJTU3hUUVVGVkxFTkJRMW9zVFVGQlRTeEpRVUZKUVN4RlFVTmFMRU5CUTBZc1JVTjJSa0VzU1VGQlNVc3NSMEZCV1N4TFFVMUxReXhIUVVGeVFpeE5RVUZ4UWtNc1ZVRkJiVUpETEVWQlFVc3NRMEZMTTBNc1YwRkJWeXhWUVVGWExFTkJRM0JDTEU5QlFVbElMRXRCUVdNc1QwRkRhRUpCTEVkQlFWa3NTVUZCU1VVc1IwRkZXRVlzUlVGRFZDeERRVWRCTEVsQlFVa3NUVUZCVHl4RFFVTlVMRTFCUVU4c1VVRkRWQ3hEUVVkQkxFbEJRVWtzVFVGQlR5eERRVU5VTEU5QlFVOHNTVUZCU1N4TFFVRkxMR1ZCUVdVc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4UlFVTnlSQ3hEUVVkQkxFbEJRVWtzWVVGQll5eERRVU5vUWl4TlFVRlBMRVZCUTFRc1EwRkhRU3hYUVVGWFNTeEZRVUZKTEVOQlFVVXNUMEZCUVVNc1JVRkJVU3hQUVVGQlF5eERRVUZQTEVWQlFVY3NRMEZEYWtNc1QwRkJUME1zUjBGQlkwZ3NSVUZCU1VNc1JVRkJVVU1zUTBGQlRTeERRVU42UXl4RFFVZEJMR0ZCUVdGR0xFVkJRVWxETEVWQlFWRXNRMEZEZGtJc1QwRkJUMGNzUjBGQllTeExRVUZMTEU5QlFVOUtMRU5CUVVVc1JVRkJSME1zUTBGQlRTeERRVU0zUXl4RFFVZEJMRTlCUVU5RUxFVkJRVWtzUTBGRFZDeE5RVUZQTEVOQlFVTXNTVUZCU1N4TFFVRkxRU3hEUVVGRkxFVkJRVVVzYTBKQlFXdENMRU5CUTNwRExFTkJSMEVzVDBGQlQwc3NSVUZCVnl4RFFVTm9RaXhQUVVGUFFTeEZRVUZWTEU5QlFWTXNVVUZETlVJc1EwRkhRU3hKUVVGSkxGTkJRVlVzUTBGRFdpeE5RVUZQTEVWQlExUXNRMEZEUml4RlEzcEVRU3hKUVVGSlF5eEhRVUZYTEVOQlFVTXNSVUZEYUVJc1UwRkJVME1zUjBGQlVVTXNSVUZCVFN4RFFVTnlRaXhQUVVGTFJpeEhRVUZUUlN4RFFVRkpMRWxCUTJoQ1JpeEhRVUZUUlN4RFFVRkpMRVZCUVVrc1NVRkJTU3hMUVVGTExHVkJRV1VzVVVGQlV5eERRVU5vUkN4UFFVRlJMRWRCUTFJc1UwRkJWVUVzUlVGRFZpeExRVUZOTEZWQlEwNHNUVUZCVHl4VlFVTlFMRWxCUVVzc1ZVRkRUQ3hMUVVGTkxGVkJRMDRzVDBGQlVTeFZRVU5TTEU5QlFWRXNWVUZEVWl4SlFVRkxMRTlCUTFBc1EwRkJReXhIUVVWSlJpeEhRVUZUUlN4RFFVRkpMRU5CUTNSQ0xFTkJSVUVzU1VGQlRVTXNSMEZCV1N4RFFVTm9RaXhMUVVGTkxFVkJRMDRzVFVGQlR5eEZRVU5RTEVsQlFVc3NSVUZEVEN4SlFVRkxMRVZCUTB3c1MwRkJUU3hGUVVOT0xFOUJRVkVzUlVGRFVpeFBRVUZSTEVOQlExWXNSVUZGUVN4VFFVRlRReXhIUVVGWlF5eEZRVUZMUXl4RlFVRk5MRU5CUXpsQ0xFbEJRVTFETEVWQlFWbEdMRVZCUVVrc1QwRkJUME1zUTBGQlNTeEZRVUZGTEZGQlFWRXNWVUZCVnl4RlFVRkZMRVZCUTNSRVJTeEZRVUZUTEd0RVFVRnJSQ3hMUVVGTFJDeERRVUZUTEVWQlEzcEZMRU5CUVVNc1EwRkJSVVVzUlVGQlVVTXNSVUZCVFVNc1JVRkJUME1zUlVGQlUwTXNSVUZCVDBNc1JVRkJVME1zUTBGQlR5eEZRVUZKVUN4RlFVTTVSQ3hOUVVGUExFTkJRVU5ITEVWQlFVOUdMRVZCUVZGRExFVkJRVTFGTEVWQlFWTkRMRVZCUVU5RExFVkJRVk5ETEVOQlFVOHNRMEZETDBRc1EwRkZRU3hUUVVGVFF5eEhRVUZaV0N4RlFVRkxReXhGUVVGTkxFTkJRemxDTEVsQlFVMURMRVZCUVZsR0xFVkJRVWtzWTBGQlkwTXNRMEZCU1N4RlFVTnNRMWNzUlVGQlV5eERRVUZETEVWQlEyaENMRkZCUVZORExFVkJRVWtzUlVGQlIwRXNSVUZCU1Znc1JVRkJWU3hQUVVGUlZ5eEpRVUZMTEVOQlEzcERMRWRCUVUwc1EwRkJSU3hMUVVGQlF5eEZRVUZOTEUxQlFVRkRMRU5CUVUwc1JVRkJTV0lzUlVGQlZWY3NRMEZCUXl4RlFVTTNRa2NzUlVGQlRXeENMRWRCUVZWblFpeERRVUZKTEVWQlJYUkNRU3hKUVVGVExFMUJRMWhHTEVWQlFVOUpMRU5CUVVjc1JVRkJTVVFzUlVGRFNrVXNSVUZCV1VRc1EwRkJSeXhKUVVONlFrb3NSVUZCVDBrc1EwRkJSeXhGUVVGSkxGTkJRVk5FTEVWQlFVOHNSVUZCUlN4RlFVVndReXhEUVVOQkxFOUJRVTlJTEVOQlExUXNRMEZGUVN4SlFVRkpUU3hIUVVGblFpeERRVUZETEVWQlMwRkRMRWRCUVhKQ0xFMUJRWEZDUXl4VlFVRnBRa01zUlVGQlN5eERRVXQ2UXl4UFFVRlBMRTlCUVU5RExFVkJRVTBzUTBGRGJFSXNUMEZCUzBvc1IwRkJZMGtzUTBGQlNTeEpRVU55UWtvc1IwRkJZMGtzUTBGQlNTeEZRVUZKTEVsQlFVbEdMRVZCUVZORkxFTkJRVWtzUjBGRmJFTktMRWRCUVdOSkxFTkJRVWtzUTBGRE0wSXNRMEZOUVN4UFFVRlBMRmxCUVdFc1EwRkRiRUpLTEVkQlFXZENMRU5CUVVNc1JVRkRha0oyUWl4SFFVRlhMRU5CUVVNc1EwRkRaQ3hEUVZWQkxFOUJRVThzYVVKQlFXbENORUlzUlVGQlJ5eERRVU42UWl4UFFVRlBMRXRCUVVzc1dVRkJXVUVzUTBGQlF5eERRVU16UWl4RFFWVkJMRTlCUVU4c1dVRkJXVEZDTEVWQlFVMHNRMEZEZGtJc1IwRkJTU3hEUVVGRFFTeEZRVU5JTEUxQlFVOHNSMEZGVkN4SFFVRkpMRU5CUTBZc1YwRkJTU3hMUVVGTExHVkJRV1VzVVVGQlV5eERRVUZGTEZOQlFWVkJMRU5CUVVzc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGRGNrUXNSVUZEVkN4UFFVRlRNa0lzUlVGQlJ5eERRVU5XTEUxQlFVOHNSVUZEVkN4RFFVTkdMRU5CUlVFc1dVRkJXVVlzUlVGQlRTeERRVU5vUWl4TlFVRk5MRVZCUlU0c1MwRkJTeXhUUVVGWFFTeEZRVVZvUWl4TFFVRkxMRTFCUVZGR0xFVkJRVk1zV1VGQldVVXNRMEZCU1N4RFFVTjRReXhEUVVkQkxFbEJRVWtzVFVGQlR5eERRVU5VTEUxQlFVOHNUVUZEVkN4RFFVZEJMRWxCUVVrc1RVRkJUeXhEUVVOVUxFOUJRVThzUzBGQlN5eFJRVU5rTEVOQlIwRXNTVUZCU1N4aFFVRmpMRU5CUTJoQ0xFMUJRVThzUlVGRFZDeERRVWRCTEZkQlFWZEhMRVZCUVVrc1EwRkJSU3hQUVVGQlF5eEZRVUZSTEU5QlFVRkRMRU5CUVU4c1JVRkJSeXhEUVVOcVF5eFBRVUZQUXl4SFFVRmpTQ3hGUVVGSlF5eEZRVUZSUXl4RlFVRlJMRXRCUVVzc1NVRkJTU3hEUVVOd1JDeERRVWRCTEdGQlFXRkdMRVZCUVVsRExFVkJRVkVzUTBGRGRrSXNUMEZCVDBjc1IwRkJZU3hMUVVGTExFOUJRVTlLTEVOQlFVVXNSVUZCUjBNc1EwRkJUU3hEUVVNM1F5eERRVWRCTEU5QlFVOUVMRVZCUVVrc1EwRkRWQ3hKUVVGTmVFSXNSVUZCVHl4SlFVRkpMRXRCUVV0M1FpeERRVUZGTEVWQlJYaENMRWRCUVVrc1RVRkJUWGhDTEVOQlFVa3NSVUZCUnl4TlFVRlBMRXRCUlhoQ0xFbEJRVTFFTEVWQlFVMUtMRWRCUVZFc1MwRkJTeXhKUVVGSkxFVkJRM3BDTEVOQlFVTnJReXhGUVVGTlF5eEZRVUZQUXl4RlFVRkxReXhGUVVGUlF5eEZRVUZOUXl4RlFVRlJReXhEUVVGTkxFVkJRVWx3UXl4RlFVRkpMR05CUTNaRVZ5eEhRVUZaV0N4RlFVRkxReXhEUVVGSkxFVkJRM0pDUml4SFFVRlpReXhGUVVGTFF5eERRVUZKTEVWQlJYSkNaME1zU1VGQlZ5eFBRVU5pU0N4RlFVRlBMRU5CUVVNc1MwRkJTeXhKUVVGSlFTeERRVUZKTEVWQlFVa3NSMEZOTTBJc1NVRkJUVThzUlVGQlVVTXNSMEZCWVN4RFFVTjZRaXhMUVVGQlVpeEZRVU5CTEUxQlFVRkRMRVZCUTBFc1NVRkJRVU1zUlVGRFFTeExRVTV0UWtVc1NVRkJVeXhIUVVGTExFVkJRVWxCTEVWQlQzSkRMRTlCUVVGRExFVkJRMEVzVDBGQlFVTXNSVUZEUVN4WlFVRmhMRU5CUTJZc1EwRkJReXhGUVVWSFJ5eEZRVUZQTEVOQlFVTjBReXhGUVVOT2RVTXNSVUZCVDBRc1JVRkJUeXhKUVVOd1FpeFBRVUZCUVN4SFFVRlJReXhIUVVGUkxFVkJRVWxCTEVWQlFVOHNTVUZCVDBFc1IwRkRNVUpJTEVWQlFWRkZMRWxCUVZNc1IwRkJTeXhKUVVOb1F5eERRVWRCTEU5QlFVOUZMRVZCUVZjc1EwRkRhRUlzVDBGQlQwRXNSVUZCVlN4UFFVRlRMRkZCUVZWQkxFVkJRVlVzVDBGQlV5eExRVUZMTEVsQlF6bEVMRU5CUjBFc1NVRkJTU3hUUVVGVkxFTkJRMW9zVDBGQlR5eExRVUZMTEV0QlEyUXNRMEZEUml4RlEzcE1RU3hKUVVGSlF5eEhRVUZaTEV0QlRVdERMRWRCUVhKQ0xFMUJRWEZDUXl4VlFVRjNRa01zUlVGQlN5eERRVXRvUkN4WFFVRlhMR0ZCUVdNc1EwRkRka0lzVDBGQlNVZ3NTMEZCWXl4UFFVTm9Ra0VzUjBGQldTeEpRVUZKUlN4RlFVRm5RaXhEUVVGRExFZEJSVFZDUml4RlFVTlVMRU5CVDBFc1QwRkJUeXhUUVVGVFNTeEZRVUZSTEVOQlEzUkNMRTlCUVU5QkxFbEJRVmNzUlVGQlNVWXNSVUZCWjBJc1dVRkJZeXhKUVVGSlFTeEZRVUZuUWtVc1EwRkJUU3hEUVVOb1JpeERRVlZCTEU5QlFVOHNaVUZCWlVNc1JVRkJSeXhEUVVOMlFpeEhRVUZKUVN4RlFVRkhMRU5CUTB3c1NVRkJUVU1zUlVGQlNVUXNSVUZCUlN4TlFVRk5MSFZEUVVGMVF5eEZRVU42UkN4SFFVRkpReXhGUVVOR0xFOUJRVThzU1VGQlNVb3NSVUZCWjBKTExFZEJRV0ZFTEVWQlFVVXNRMEZCUXl4RlFVRkhRU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlJYWkVMRU5CUTBFc1QwRkJUeXhKUVVOVUxFTkJSVUVzV1VGQldVWXNSVUZCVVN4RFFVTnNRaXhOUVVGTkxFVkJSVTRzUzBGQlN5eE5RVUZSUVN4RFFVTm1MRU5CUjBFc1NVRkJTU3hOUVVGUExFTkJRMVFzVFVGQlR5eFBRVU5VTEVOQlIwRXNTVUZCU1N4TlFVRlBMRU5CUTFRc1QwRkJUeXhMUVVGTExGRkJRVlVzUlVGQlNTeE5RVUZSTEUxQlFVMUpMRWRCUVdFc1MwRkJTeXhOUVVGUExGRkJRVkVzUTBGQlF5eEZRVU0xUlN4RFFVVkJMRWxCUVVrc1ZVRkJWeXhEUVVOaUxFOUJRVWtzUzBGQlN5eFJRVUZWTEVWQlExWXNWVUZGUVN4VlFVRlZRU3hIUVVGaExFTkJRVU1zUzBGQlN5eE5RVUZQTEZGQlFWRXNRMEZCUXl4RlFVVjRSQ3hEUVVkQkxGbEJRV0VzUTBGRFdDeFBRVUZQTEV0QlFVc3NTVUZEWkN4RFFVZEJMR0ZCUVdGRExFVkJRVWxETEVWQlFWRXNRMEZEZGtJc1QwRkJUMFlzUjBGQllTeExRVUZMTEUxQlFVOUZMRU5CUVUwc1EwRkRlRU1zUTBGSFFTeEpRVUZKTEdGQlFXTXNRMEZEYUVJc1RVRkJUeXhGUVVOVUxFTkJSMEVzVVVGQlV5eERRVU5RTEU5QlFVOHNTMEZCU3l4TFFVTmtMRU5CUjBFc1QwRkJUME1zUlVGQlZ5eERRVU5vUWl4UFFVRlBRU3hGUVVGVkxFOUJRVk1zVTBGQlYwRXNSVUZCVlN4UlFVRlZMRXRCUVVzc1MwRkRhRVVzUTBGSFFTeEpRVUZKTEZOQlFWVXNRMEZEV2l4TlFVRlBMRVZCUTFRc1EwRkRSaXhGUXk5R1FTeEpRVUZ4UWtNc1IwRkJja0lzWTBGQmVVTkRMRVZCUVVzc1EwRkROVU1zV1VGQldVTXNSVUZCVlN4RFFVTndRaXhOUVVGTkxFVkJSVTRzUzBGQlN5eFRRVUZYUVN4RFFVTnNRaXhEUVVkQkxFbEJRVWtzVFVGQlR5eERRVU5VTEUxQlFVOHNVMEZEVkN4RFFVZEJMRWxCUVVrc1RVRkJUeXhEUVVOVUxFOUJRVThzUzBGQlN5eFJRVU5rTEVOQlIwRXNTVUZCU1N4aFFVRmpMRU5CUTJoQ0xFMUJRVThzUlVGRFZDeERRVWRCTEZsQlFXRXNRMEZEV0N4UFFVRlBMRWxCUTFRc1EwRkhRU3hqUVVGbExFTkJRMklzVFVGQlR5eEZRVU5VTEVOQlIwRXNVVUZCVXl4RFFVTlFMRTFCUVU4c1NVRkRWQ3hEUVVkQkxGRkJRVk1zUTBGRFVDeE5RVUZQTEVWQlExUXNRMEZIUVN4SlFVRkpMRk5CUVZVc1EwRkRXaXhOUVVGUExFVkJRMVFzUTBGRFJpeEZRM3BEVHl4VFFVRlRReXhIUVVGalF5eEZRVUZQUXl4RlFVRmhMRU5CUTJoRUxFbEJRVWxETEVWQlEwb3NSMEZCU1VNc1JVRkJXVWdzUTBGQlN5eEhRVUZMUVN4SlFVRlZMRXRCUTJ4RExFOUJRVTlETEVWQlEwWXNSMEZCU1VRc1lVRkJhVUpKTEVkQlF6RkNMRTlCUVU5S0xFVkJRMFlzUjBGQlNVc3NSMEZCVTB3c1EwRkJTeXhGUVVGSExFTkJRekZDTEVsQlFVMU5MRVZCUVZWT0xFVkJRVTBzV1VGQldTeEZRVU5zUXl4UFFVRkpUU3hKUVVGWkxGTkJRVmRCTEVsQlFWa3NVMEZCYVVKTUxFVkJReTlEU3l4SlFVRlpMRTlCUVZOQkxFbEJRVmtzVFVGQlkwTXNSMEZCWjBJc1dVRkROVVJCTEVkQlFXZENMR1ZCUVdWRUxFTkJRVThzUjBGQlMwVXNSMEZCVXl4UFFVRlBVaXhEUVVGTExFTkJRemxGTEV0QlFVOHNVVUZCU1ZNc1IwRkJVMVFzUTBGQlN5eEZRVU5vUWs4c1IwRkJaMElzVTBGQlUxQXNRMEZCU3l4RlFVTTFRaXhQUVVGUFFTeEhRVUZWTEZWQlFWbEJMRVZCUVUwc1VVRkJWU3hQUVVGUFFTeEZRVUZOTEZGQlFWY3NVMEZIZGtWQkxFVkJSVUVzU1VGQlNWVXNSMEZCV1ZZc1EwRkJTeXhEUVVWb1F5eERRM3BDUVN4SlFVRkpWeXhIUVVGTkxFbEJRVTBzUzBGQlN5eEpRVUZKTEVWQlEzWkNReXhIUVVGakxGTkJRMlJETEVkQlFXZENMRXRCUTJoQ1F5eEhRVUY1UWl4TFFVTjZRa01zUjBGQmQwSXNTMEZEZUVKRExFZEJTMjFDUXl4RlFVRnlRaXhMUVVFNFFpeERRVXMxUWl4WFFVRlhMRXRCUVUwc1EwRkRaaXhQUVVGUFRpeEZRVU5VTEVOQlUwRXNWMEZCVnl4SlFVRkpUeXhGUVVGSExFTkJRMmhDVUN4SFFVRk5UeXhEUVVOU0xFTkJUMEVzVjBGQlZ5eFpRVUZaUXl4RlFVRk5MRU5CUXpOQ1VDeEhRVUZqVHl4RFFVTm9RaXhEUVU5QkxGZEJRVmNzWVVGQll5eERRVU4yUWl4UFFVRlBReXhIUVVGalVpeEhRVUZoVXl4SFFVRlhMRkZCUVZFc1EwRkRka1FzUTBGTlFTeFhRVUZYTEdWQlFXZENMRU5CUTNwQ0xFOUJRVTlTTEVWQlExUXNRMEZOUVN4WFFVRlhMR05CUVdOVExFVkJRVkVzUTBGREwwSlVMRWRCUVdkQ1V5eERRVU5zUWl4RFFVMUJMRmRCUVZjc2QwSkJRWGxDTEVOQlEyeERMRTlCUVU5U0xFVkJRMVFzUTBGTlFTeFhRVUZYTEhWQ1FVRjFRbE1zUlVGQmFVSXNRMEZEYWtSVUxFZEJRWGxDVXl4RFFVTXpRaXhEUVUxQkxGZEJRVmNzZFVKQlFYZENMRU5CUTJwRExFOUJRVTlTTEVWQlExUXNRMEZOUVN4WFFVRlhMSE5DUVVGelFsTXNSVUZCWjBJc1EwRkRMME5VTEVkQlFYZENVeXhEUVVNeFFpeERRVTFCTEZkQlFWY3NaMEpCUVdsQ0xFTkJRekZDTEU5QlFVOVNMRVZCUTFRc1EwRk5RU3hYUVVGWExHVkJRV1ZUTEVWQlFVY3NRMEZETTBKVUxFZEJRV2xDVXl4RFFVTnVRaXhEUVUxQkxFOUJRVThzWVVGQll5eERRVU51UWtNc1IwRkJUeXhYUVVGWExFVkJRMnhDUXl4SFFVRlRMRmRCUVZjc1EwRkRkRUlzUTBGRFJpeEZRM1JJUVN4SlFVRkpReXhIUVVGakxFTkJRVU1zUlVGRGJrSXNVMEZCVTBNc1IwRkJXVU1zUlVGQlYwTXNSVUZCVHl4RFFVRkRMRVZCUVVjc1EwRkRla01zU1VGQlRVTXNSVUZCVFN4TFFVRkxMRlZCUVZVc1EwRkJRMFlzUlVGQlYwTXNRMEZCU1N4RFFVRkRMRVZCUTNoRFJTeEZRVUZOVEN4SFFVRlpTU3hEUVVGSExFVkJRM3BDTEU5QlFVdERMRWxCUTBoQkxFVkJRVTBzU1VGQlNTeExRVUZMTEZkQlFWZElMRVZCUVZkRExFTkJRVWtzUlVGRGVrTklMRWRCUVZsSkxFTkJRVWNzUlVGQlNVTXNSMEZGWkVFc1EwRkRWQ3hEUVVWQkxFbEJRVWxETEVkQlFXTXNRMEZCUXl4RlFVTnVRaXhUUVVGVFF5eEhRVUZoVEN4RlFVRlhReXhGUVVGUExFTkJRVU1zUlVGQlJ5eERRVU14UXl4SlFVRk5ReXhGUVVGTkxFdEJRVXNzVlVGQlZTeERRVUZEUml4RlFVRlhReXhEUVVGSkxFTkJRVU1zUlVGRGVFTkZMRVZCUVUxRExFZEJRVmxHTEVOQlFVY3NSVUZEZWtJc1QwRkJTME1zU1VGRFNFRXNSVUZCVFN4SlFVRkpMRXRCUVVzc1pVRkJaVWdzUlVGQlYwTXNRMEZCU1N4RlFVTTNRMGNzUjBGQldVWXNRMEZCUnl4RlFVRkpReXhIUVVWa1FTeERRVU5VTEVOQlJVRXNTVUZCU1Vjc1IwRkJaU3hEUVVGRExFVkJRM0JDTEZOQlFWTkRMRWRCUVdGUUxFVkJRVmRETEVWQlFVOHNRMEZCUXl4RlFVRkhMRU5CUXpGRExFbEJRVTFETEVWQlFVMHNTMEZCU3l4VlFVRlZMRU5CUVVOR0xFVkJRVmRETEVOQlFVa3NRMEZCUXl4RlFVTjRRMDhzUlVGQlRVWXNSMEZCWVVvc1EwRkJSeXhGUVVNeFFpeFBRVUZMVFN4SlFVTklRU3hGUVVGTkxFbEJRVWtzUzBGQlN5eGhRVUZoVWl4RlFVRlhReXhEUVVGSkxFVkJRek5EU3l4SFFVRmhTaXhEUVVGSExFVkJRVWxOTEVkQlJXWkJMRU5CUTFRc1EwRkZRU3hKUVVGSlF5eEhRVUZsTEVOQlFVTXNSVUZEY0VJc1UwRkJVME1zUjBGQllWWXNSVUZCVjBNc1JVRkJUeXhEUVVGRExFVkJRVWNzUTBGRE1VTXNTVUZCYTBOVkxFVkJRVUZXTEVWQlFURkNMRTFCUVVGWExFTkJNME5XTEVWQk1rTnZRMFFzUlVGQmFrSkZMRVZCUVVGRExFZEJRV2xDU0N4RlFVRnFRaXhEUVVGVUxGTkJRMFpVTEVWQlFVMHNTMEZCU3l4VlFVRlZMRU5CUVVOR0xFVkJRVmRoTEVOQlFWa3NRMEZCUXl4RlFVTm9SRXdzUlVGQlRVTXNSMEZCWVZBc1EwRkJSeXhGUVVNeFFpeFBRVUZMVFN4SlFVTklRU3hGUVVGTkxFbEJRVWtzUzBGQlN5eHRRa0ZCYlVKU0xFVkJRVmRETEVOQlFVa3NSVUZEYWtSUkxFZEJRV0ZRTEVOQlFVY3NSVUZCU1Uwc1IwRkZaa0VzUTBGRFZDeERRVVZCTEVsQlFVbFBMRWRCUVdsQ0xFdEJRM0pDTEZOQlFWTkRMRWxCUVdVc1EwRkRkRUlzVDBGQlNVUXNTMEZIUmtFc1IwRkJhVUlzU1VGQlNTeExRVUZMTEdWQlFXVXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeFBRVU4wUkVFc1IwRkZXQ3hEUVVWQkxGTkJRVk5GTEVkQlFXdENReXhGUVVGWExFTkJVM0JETEVsQlFVMURMRVZCUVZORUxFVkJRVlVzVVVGQlVTeExRVUZMTEVWQlEzUkRMRWRCUVVsRExFbEJRVmNzUjBGRFlpeE5RVUZQTEVOQlFVTkVMRU5CUVZNc1JVRkRXaXhEUVVOTUxFbEJRVWxGTEVWQlEwVkRMRVZCUVZWSUxFVkJRVlVzVlVGQlZTeEZRVUZIUXl4RFFVRk5MRVZCUXpkRExFZEJRVWtzUTBGRFJrTXNSVUZCVldZc1IwRkJZV0VzUTBGQlV5eEZRVUZGTEdkQ1FVRm5RaXhEUVVOd1JDeFBRVUZUU1N4RlFVRkhMRU5CUTFaR0xFVkJRVlZtTEVkQlFXRm5RaXhEUVVGUExFVkJRVVVzWjBKQlFXZENMRU5CUTJ4RUxFTkJSVUVzUjBGQlRTeERRVUZGTEdkQ1FVRkJSU3hGUVVGcFFpeFRRVUZCUXl4RFFVRlRMRVZCUVVsS0xFVkJSWFJETEUxQlFVOHNRMEZCUTBNc1JVRkJVMFVzUlVGQmFVSkRMRU5CUVZFc1EwRkROVU1zUTBGRFJpeERRVVZCTEZOQlFWTkRMRWRCUVdsQ1VDeEZRVUZYU3l4RlFVRnBRa2NzUlVGQlowSXNRMEZEY0VVc1QwRkJTVUVzUjBGQmEwSklMRXRCUTNCQ1RDeEhRVUZoTEV0QlJWUlJMRWxCUTBaU0xFZEJRV0VzVDBGQlQxRXNRMEZCWXl4SlFVZG9RMGdzU1VGRFJrd3NSMEZCWVN4UFFVRlBTeXhEUVVGbExFdEJSVGxDVEN4RFFVbFlMRU5CUlVFc1UwRkJVMU1zUjBGQlZVTXNSVUZCUnl4RFFVTndRaXhKUVVGTlF5eEZRVUZMTEVOQlFVTXNSVUZEV2l4UlFVRlRReXhGUVVGSkxFVkJRVWRCTEVkQlFVc3NSMEZCU1VFc1NVRkJTeXhEUVVNMVFpeEpRVUZOUXl4RlFVRkxReXhGUVVGVExFbEJRVWtzUzBGQlRVWXNSVUZCUnl4RFFVRkRMRVZCUTJ4RFJDeEZRVUZITEV0QlFVdEVMRVZCUVVWSExFTkJRVVVzUTBGQlF5eERRVU5tTEVOQlEwRXNUMEZCVDBZc1EwRkRWQ3hEUVVWQkxGTkJRVk5KTEVkQlFWbE1MRVZCUVVjc1EwRkRkRUlzU1VGQlRVTXNSVUZCU3l4RFFVRkRMRVZCUTFvc1VVRkJVME1zUlVGQlNTeEZRVUZIUVN4SFFVRkxMRVZCUVVkQkxFbEJRVXNzUTBGRE0wSXNTVUZCVFVNc1JVRkJTME1zUlVGQlV5eEpRVUZKTEV0QlFVMHNSMEZCU1N4SFFVRkxSaXhEUVVGRExFVkJRM2hEUkN4RlFVRkhMRXRCUVV0RUxFVkJRVVZITEVOQlFVVXNRMEZCUXl4RFFVTm1MRU5CUTBFc1QwRkJUMFlzUTBGRFZDeERRVVZCTEZOQlFWTkxMRWRCUVZWRExFVkJRVXRETEVWQlFWRkRMRVZCUVZkRExFVkJRVmRETEVWQlFWRXNRMEZETlVRc1NVRkJUVU1zUlVGQlQwd3NSVUZCU1N4WlFVRlpSU3hEUVVGVExFVkJSWFJETEU5QlFVbEhMRWxCUVZNc1VVRkRTaXhMUVVORlFTeEpRVUZUTEV0QlExaEdMRVZCUVZWR0xFTkJRVTBzUlVGRmFFSkhMRVZCUVU5SUxFTkJRVTBzUTBGRmVFSXNRMEZGUVN4VFFVRlRTeXhIUVVGdlFrNHNSVUZCU3l4RFFVTm9ReXhQUVVGSlFTeEZRVUZKTEdsQ1FVRnRRa0VzUlVGQlNTeHJRa0ZCYjBJc1QwRkRNVU1zUjBGSFRFRXNSVUZCU1N4clFrRkJiMElzVVVGRGVFSXNRMEZCUTBFc1JVRkJTU3hSUVVOTVFTeEZRVUZKTEU5QlFVOHNWMEZCVnl4SlFVRkpMRWRCUXpGQ0xFbEJRVWtzUzBGQlN5eGxRVUZsUVN4RlFVRkpMRWxCUVVrc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4clFrRkJiMElzVFVGSE9VVXNRMEZOUVN4SlFVRk5UeXhIUVVGT0xFdEJRVEJDTEVOQlEzaENMRmxCUVZsRExFVkJRVTFETEVWQlFXRXpReXhGUVVGTkxFTkJRMjVETEV0QlFVc3NUVUZCVVVFc1JVRkJTeXhQUVVGVExFVkJRek5DTEV0QlFVc3NUVUZCVVVFc1JVRkJTeXhQUVVGVExFZEJSVE5DTEVsQlFYVkRWU3hGUVVGQlZpeEZRVUV2UWl4UFFVRkJORU1zUlVGQlR5eE5RVUZCUXl4RFFTOUtia0lzUlVFclNqSkRia01zUlVGQlpHOURMRVZCUVVGcVF5eEhRVUZqU0N4RlFVRmtMRU5CUVdwQ0xGRkJRVThzVlVGRlppeEhRVUZKTEVOQlFVTnBReXhIUVVGbExFOUJRVThzUzBGQlMwY3NRMEZCVXl4RlFVRkZMRTlCUVZNc1JVRkJSeXhEUVVOeVJDeEpRVUZOUXl4RlFVRlhReXhGUVVGQkxFTkJRVVVzV1VGQllTeEpRVUZWYUVRc1IwRkRkRU5CTEVWQlFVc3NUVUZCVVN4SlFVRkhLME1zUlVGQlV5eHhRa0ZCZFVJdlF5eEZRVUZMTEU5QlEzcEVMRXRCUVVzc1NVRkJUVTBzUjBGQllXOURMRVZCUVUxTExFTkJRVkVzUTBGRGVFTXNRMEZEUml4RFFVVkJMRTlCUVU5c1FpeEZRVUZITEVOQlExSXNSMEZCU1N4TFFVRkxMRWxCUVVzc1EwRkRXaXhKUVVGTmIwSXNSVUZCVVN4TFFVRkxMRTFCUVZFc1MwRkJTeXhOUVVGTmNFSXNRMEZCUXl4RlFVRkpRU3hGUVVNelF5eFBRVUZQTEV0QlFVc3NTVUZCU1N4UFFVRlBiMElzUTBGQlN5eERRVU01UWl4TFFVRlBMRU5CUlV3c1NVRkJUVUVzUlVGQlVTeExRVUZMTEUxQlFWRXNTMEZCU3l4TlFVRk5jRUlzUTBGQlF5eEZRVUZKY1VJc1IwRkJVWEpDTEVWQlFVY3NRMEZCUXl4RlFVTjJSQ3hQUVVGUGMwSXNSMEZCVTBZc1JVRkJUeXhMUVVGTExFdEJRVXNzUTBGRGJrTXNRMEZEUml4RFFVTkdMRVZCVFUxSExFZEJRVTRzUzBGQmQwSXNRMEZEZEVJc1dVRkJXWFJDTEVWQlFVbFpMRVZCUVUweFF5eEZRVUZOTEVOQlF6RkNMRXRCUVVzc1MwRkJUMEVzUlVGRldpeEpRVUZKY1VRc1JVRkRTaXhIUVVGSmRrSXNSVUZCUnl4TFFVRkxMRmxCUVdFc1EwRlBka0lzU1VGQlRYZENMRVZCUVZrc1NVRkJUWGhDTEVWQlFVY3NUMEZCVXl4SlFVTTVRbmxDTEVWQlFWVkVMRWRCUVdFc1JVRkJTU3hYUVVGWFFTeERRVUZUTEVkQlFVc3NWVUZCVlVFc1EwRkJVeXhIUVVONlJYaENMRVZCUVVjc1UwRkJWeXhIUVVGTE1FSXNSMEZCVXl4UFFVRlBSQ3hEUVVGUExFVkJRVVVzVDBGRE9VTkdMRVZCUVVsRkxFVkJRMG9zUzBGQlN5eEhRVUZMZWtJc1NVRlRWblZDTEVWQlFVa3NUVUZEUVhKRUxFVkJRVXNzWVVGRFVDeExRVUZMTEVkQlFVczRRaXhGUVVWV0xFdEJRVXNzUjBGQlMwRXNSVUZCUnl4VFFVRlhMRVZCUVVsQkxFVkJRVXRETEVWQlFWTXNWMEZCVjBRc1JVRkJSeXhIUVVGTFFTeEZRVUZITEU5QlFWTXNSMEZCU3l4SFFVRkpMRVZCUjNoR0xFMUJRVmRCTEVWQlFVY3NTMEZCU3l4UFFVRlRMRk5CUXpGQ0xFdEJRVXNzUjBGQlMwRXNSMEZGVml4TFFVRkxMRWRCUVV0QkxFVkJRMVoxUWl4RlFVRkpka0lzUlVGQlJ5eExRVUZMTEUxQlIyUXNTVUZCVFdsQ0xFVkJRVmRETEVWQlFVRXNSMEZCU3l4TFFVRkxMRTFCUTNaQ1N5eEpRVU5HVGl4RlFVRlRMRk5CUVZkTkxFZEJSWFJDTEV0QlFVc3NTVUZCVFdwRUxFZEJRV0Z6UXl4RlFVRk5TeXhEUVVGUkxFTkJRM2hETEVOQlJVRXNVVUZCVXl4RFFVTlFMRTlCUVU4c1MwRkJTeXhKUVVGSkxFOUJRVThzUzBGQlN5eEhRVUZITEZOQlFWTXNRMEZCUXl4RFFVTXpReXhEUVVWQkxHVkJRV2RDTEVOQlEyUXNUMEZCVHl4TFFVRkxMRWxCUVVrc1kwRkJZeXhMUVVGTExFZEJRVWNzVTBGQlV5eERRVUZETEVOQlEyeEVMRU5CUlVFc2FVSkJRV3RDTEVOQlEyaENMRTlCUVU4c1MwRkJTeXhKUVVGSkxHZENRVUZuUWl4RFFVTnNReXhEUVVOR0xFVkJTMDFWTEVkQlFVNHNTMEZCZFVJc1EwRkRja0lzV1VGQldXWXNSVUZCVFdkQ0xFVkJRVmN4UkN4RlFVRk5MRU5CUTJwRExFdEJRVXNzUzBGQlQyZEVMRVZCUVVFc1EwRkJSU3hOUVVGUExGRkJRVmRvUkN4SFFVTTFRaXhEUVVGRE1FUXNSMEZCWVVNc1IwRkJXU3hKUVVNMVFpeExRVUZMTEVsQlFVMXNSQ3hIUVVGaGFVTXNSVUZCVFRGRExFTkJRVWtzUlVGRmRFTXNRMEZGUVN4UFFVRlBORVFzUlVGQlQwTXNSVUZCVFN4RFFVTnNRaXhQUVVGSkxFdEJRVXNzU1VGRFFTeExRVUZMTEVsQlFVa3NUMEZCVDBRc1JVRkJUME1zUTBGQlNTeEZRVVZ1UWtNc1IwRkJiVUpFTEVWQlFVMUVMRVZCUVU4c1MwRkJTeXhMUVVGTExGRkJRVk1zUzBGQlN5eExRVUZMTEZGQlFWVXNUVUZCVFN4RFFVVm9SeXhEUVVWQkxHTkJRV05CTEVWQlFVOURMRVZCUVUwc1EwRkRla0lzVDBGQlNTeExRVUZMTEVsQlEwRXNTMEZCU3l4SlFVRkpMR05CUVdORUxFVkJRVTlETEVOQlFVa3NSVUZGYkVNc1EwRkJReXhEUVVWYUxFTkJRMFlzUlVGTmNVSkZMRWRCUVhKQ0xFMUJRWEZDUXl4RFFVRlBMRU5CUXpGQ0xFOUJRVThzVTBGQlUyaEZMRVZCUVUwc1EwRkRjRUlzVDBGQlQyZEZMRVZCUVU4c1QwRkJUMmhGTEVWQlFVc3NUMEZCVVVFc1JVRkJTeXhuUWtGQmFVSkJMRVZCUVVzc1pVRkJaMEpCTEVWQlFVc3NWMEZCVnl4RFFVTXZSaXhEUVVWQkxFOUJRVThzVDBGQlQybEZMRVZCUVZFelF5eEZRVUZwUWtjc1JVRkJaMEo1UXl4RlFVRmpMRWRCUVU4c1EwRkRNVVVzU1VGQlRVTXNSVUZCYTBKR0xFZEJRVlZITEVWQlFWTXNZMEZGY2tORExFVkJRVlZHTEVsQlFXOUNSQ3hGUVVGakxGRkJRVlZ1UkN4SFFVRmhMRWRCUTI1RmRVUXNSVUZCYlVKb1JDeEhRVUZ0UWpoRExFVkJRVk1zZFVKQlF5OURSeXhGUVVGclFqbERMRWRCUVd0Q01rTXNSVUZCVXl4elFrRkRia1FzVDBGQlR5eEpRVUZKU2l4RlFVRlBTeXhGUVVGVFF5eEZRVUZyUWtNc1JVRkJhVUpLTEVOQlFXVXNRMEZETDBVc1EwRkZRU3hQUVVGUExGbEJRV0VzUTBGRGJFSnlSQ3hIUVVGcFFpeExRVU5xUWxnc1IwRkJZeXhEUVVGRExFVkJRMlpGTEVkQlFXVXNRMEZCUXl4RlFVTm9Ra2NzUjBGQlpTeERRVUZETEVOQlEyeENMRU5CUlVFc1QwRkJUeXhYUVVGWExFTkJRVVVzVDBGQlFYbEVMRVZCUVZFc1owSkJRVUV6UXl4RlFVRnBRaXhsUVVGQlJ5eERRVUZsTEVWQlFVa3NRMEZCUXl4RlFVRkhMRU5CUTJ4RkxFOUJRVTkxUXl4RlFVRlBMRTlCUVU5RExFVkJRVkV6UXl4RlFVRnBRa2NzUTBGQll5eERRVU01UkN4RFFVVkJMRmxCUVZsM1F5eEZRVUZSVHl4RlFVRlhMME1zUlVGQlowSXdReXhGUVVGcFFpeERRVU01UkN4SFFVRk5MRU5CUVVOTkxFVkJRV05ETEVWQlFYVkNReXhEUVVGdlFpeEZRVUZKTTBRc1IwRkJhMEpwUkN4RFFVRk5MRVZCUlRWR0xFdEJRVXNzVDBGQlUxRXNSVUZEWkN4TFFVRkxMR2RDUVVGclFrUXNSMEZCWVVVc1IwRkJlVUlzUzBGRE4wUXNTMEZCU3l4bFFVRnBRbXBFTEVkQlFXdENhMFFzUjBGQmQwSXNTMEZEYUVVc1MwRkJTeXhMUVVGUGJrUXNSMEZCYVVJc1MwRkJTeXhQUVVGUkxFdEJRVXNzWjBKQlFXbENMRXRCUVVzc1kwRkJZeXhGUVVWdVJpeExRVUZMTEdOQlFXZENMRU5CUVVVc1QwRkJVU3hEUVVGRExFVkJRVWNzVjBGQldTeERRVUZETEVOQlFVVXNSVUZEYkVRc1MwRkJTeXhaUVVGakxFTkJRVVVzVDBGQlVTeERRVUZETEVWQlFVY3NWMEZCV1N4RFFVRkRMRU5CUVVVc1JVRkRhRVFzUzBGQlN5eGpRVUZuUWl4TFFVTnlRaXhMUVVGTExGTkJRVmNzUTBGQlF5eEZRVVZxUWl4TFFVRkxMR2RDUVVGclFqSkRMRVZCUTNaQ0xFdEJRVXNzYTBKQlFXOUNMRWxCUXpOQ0xFTkJSVUVzU1VGQlNTeGhRVUZqTEVOQlEyaENMRTlCUVVrc1MwRkJTeXh0UWtGQmNVSXNUMEZETlVJc1MwRkJTeXhyUWtGQmIwSXpRaXhIUVVGdlFpeEpRVUZKTEVkQlJ6VkRMRXRCUVVzc2FVSkJRMlFzUTBGRlFTeGhRVUZqTEVOQlExb3NTVUZCVFc5RExFVkJRV1VzUzBGQlN5eFZRVUZWTEVWQlF6bENReXhIUVVOSUxFdEJRVXNzYTBKQlFXOUNMRTFCUVZFc1MwRkJTeXhyUWtGQmIwSXNWVUZETVVRc1MwRkJTeXhwUWtGQmJVSXNUVUZCVVN4TFFVRkxMR2xDUVVGdFFpeFhRVU16UkN4UFFVRlBSQ3hIUVVGblFrTXNSVUZCYVVJc1MwRkJUeXhOUVVOcVJDeERRVVZCTEUxQlFVMURMRVZCUVUwc1EwRkRWaXhOUVVGSkxFTkJRVU5CTEVkQlFWRXNUMEZCVHl4dlFrRkJiMEpCTEVOQlFVa3NSVUZCUlN4VFFVRlhMRVZCUTJoRUxFdEJSVUZrTEVWQlFVOHNUMEZEV21Nc1JVRkJTeXhSUVVGVkxFdEJRVXNzWjBKQlEzQkNRU3hGUVVGTExHbENRVUZ0UWl4TFFVRkxMR2RDUVVNM1FrRXNSVUZCU3l4blFrRkJhMElzUzBGQlN5eGxRVU0xUWtFc1JVRkJTeXhoUVVGbExFVkJRM1JDTEVOQlJVb3NRMEZGUVN4alFVRmpRU3hGUVVGUExFTkJRVU1zUlVGQlJ5eERRVU4yUWl4UFFVRlBMRXRCUVVzc1RVRkJUVU1zUjBGQlFTOUNMRVZCUVVFc1IwRkJTemhDTEVkQlFVd3NRMEZCVnl4WlFVRmhMRVZCUVVzc1JVRkJReXhEUVVOc1JDeERRVVZCTEd0Q1FVRnJRa0VzUlVGQlR5eERRVUZETEVWQlFVY3NRMEZETTBJc1QwRkJUeXhMUVVGTExFMUJRVTFETEVkQlFVRXZRaXhGUVVGQkxFZEJRVXM0UWl4SFFVRk1MRU5CUVZjc1dVRkJZU3hGUVVGTkxFVkJRVU1zUTBGRGJrUXNRMEZGUVN4UFFVRlBNME1zUlVGQlVUWkRMRVZCUVZNc1IwRkJUelZETEVWQlFWa3NSMEZCVFN4RFFVTXZReXhQUVVGUFNDeEhRVUZWTEV0QlFVMUZMRVZCUVZGRExFVkJRVzFDTmtNc1IwRkJVU3hKUVVGTkxFTkJRemxFTEVsQlFVMTJReXhGUVVGUGMwTXNSVUZCVXl4RFFVRkZMRTFCUVU4M1F5eEZRVUZSTEVsQlFVc3NVMEZCVlN4RlFVRkpMRU5CUVVVc1RVRkJUMEVzUTBGQlR5eEZRVU40UlN0RExFVkJRVmxHTEVWQlFWTXNVMEZCVnl4aFFVTnNReXhQUVVGTExFdEJRVXNzV1VGQldVVXNRMEZCVXl4RlFVRkZMME1zUTBGQlRTeEpRVU55UXl4TFFVRkxMRmxCUVZrclF5eERRVUZUTEVWQlFVVXZReXhEUVVGTkxFVkJRVWxVTEVkQlFWZEpMRWRCUVU4c1MwRkJTeXhSUVVGUlFTeEZRVUZKV1N4RlFVRk5MRTlCUVU4c1EwRkJReXhIUVVWc1JpeExRVUZMTEZsQlFWbDNReXhEUVVGVExFVkJRVVV2UXl4RFFVRk5MRU5CUXpORExFTkJRVU1zUTBGRFNDeERRVVZCTEZOQlFWTkJMRVZCUVZFMlF5eEZRVUZUTEVkQlFVODFReXhGUVVGWkxFZEJRVTBzUTBGRGFrUXNUMEZCVDBnc1IwRkJWU3hMUVVGTlJTeEZRVUZSUXl4RlFVRnRRaXRETEVkQlFWVXNTVUZCVFN4RFFVTm9SU3hKUVVGTmVrTXNSVUZCVDNORExFVkJRMUFzUTBGQlJTeFJRVUZUTjBNc1JVRkJVU3hMUVVGTkxGVkJRVmNzVFVGQlR5eFBRVUZSTEVsQlFVc3NVMEZCVlN4RlFVTnNSU3hEUVVGRkxGRkJRVk5CTEVOQlFVOHNSVUZEZEVJclF5eEZRVUZaUml4RlFVRlRMRk5CUVZjc1lVRkRiRU1zVDBGQlN5eExRVUZMTEdOQlFXTkZMRU5CUVZNc1JVRkJSUzlETEVOQlFVMHNTVUZEZGtNc1MwRkJTeXhqUVVGakswTXNRMEZCVXl4RlFVRkZMME1zUTBGQlRTeEZRVUZKU0N4SFFVRmhSaXhIUVVOdVJDeExRVUZMTEZGQlFWRkJMRVZCUVVsWkxFVkJRVTBzVTBGQlV5eERRVU5zUXl4SFFVVkxMRXRCUVVzc1kwRkJZM2RETEVOQlFWTXNSVUZCUlM5RExFTkJRVTBzUTBGRE4wTXNRMEZCUXl4RFFVTklMRU5CUlVFc1ZVRkJWVU1zUlVGQldTeEhRVUZOTEVOQlF6RkNMRTlCUVU5SUxFZEJRMHdzUzBGRFFTeFBRVU5CUnl4RlFVTkJMRWxCUVdOblJDeEhRVU5rTEVsQlFVMHNRMEZIU2l4SFFVRkpMRU5CUVVNc1MwRkJTeXhqUVVGbExFTkJRM1pDTEVsQlFVMHhReXhGUVVGUExFTkJRVVVzUzBGQlRTeFZRVUZYTEZWQlFWY3NTMEZCVFN4RlFVTnFSQ3hMUVVGTExHTkJRV2RDTEVOQlFVTllMRVZCUVZNc1NVRkJTU3hMUVVGTkxFZEJRVWtzUjBGQlNTeERRVUZETEVWQlFVZEJMRVZCUVZNc1NVRkJTU3hMUVVGTkxFZEJRVWtzUjBGQlNTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVTnNSa1FzUjBGQlR5eExRVUZMTEZGQlFWRkJMRVZCUVVsWkxFVkJRVTBzVjBGQlZ5eERRVU0xUXl4RFFVTkdMRU5CUlVFc1QwRkJUeXhMUVVGTExHRkJRMlFzUTBGRFJpeERRVU5HTEVOQlJVRXNTMEZCUzFBc1JVRkJVVU1zUlVGQldTeEhRVUZOTEVOQlF6ZENMRTlCUVU5SUxFZEJRVlVzUzBGQlRVVXNSVUZCVVVNc1JVRkJiVUpwUkN4SFFVRk5MRWxCUVUwc1EwRkROVVFzU1VGQlRUTkRMRVZCUVU4c1EwRkJSU3hKUVVGTFVDeERRVUZQTEVWQlNUTkNMRTlCUVVzc1MwRkJTeXhUUVVGVFFTeERRVUZOTEVsQlEzWkNMRXRCUVVzc1UwRkJVMEVzUTBGQlRTeEZRVUZKTEVOQlFVTktMRVZCUVZNc1NVRkJTU3hKUVVGTExFVkJRVWNzUTBGQlF5eEZRVUZIUVN4RlFVRlRMRWxCUVVrc1MwRkJUU3hGUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVdEVMRWRCUXk5RkxFdEJRVXNzVVVGQlVVRXNSVUZCU1Zrc1JVRkJUU3hMUVVGTExFTkJRemxDTEVkQlIwc3NTMEZCU3l4VFFVRlRVQ3hEUVVGTkxFTkJRemRDTEVOQlFVTXNRMEZEU0N4RFFVVkJMRkZCUVZGTUxFVkJRVWxwUWl4RlFVRlZkVU1zUlVGQlR5eERRVU16UWl4SlFVRk5ReXhGUVVGTExFdEJRVXNzV1VGQldYcEVMRVZCUVVscFFpeERRVUZSTEVWQlEzUkRlVU1zUlVGQlZVUXNSVUZCUnl4alFVRmpMRVZCUXpOQ1JTeEZRVUZYUkN4RlFVRlJMRXRCUVUxRkxFZEJRVTFCTEVWQlFVVXNTMEZCU3l4WlFVRlpMRWxCUVUxS0xFTkJRVXNzUlVGREwwUXNUMEZCVDBjc1JVRkJWMEVzUlVGQlV5eE5RVUZSTEVsQlEzSkRMRU5CUlVFc1owSkJRV2RDZWtZc1JVRkJUeXhEUVVGRExFVkJRVWNzUTBGSGVrSXNUMEZCVHl4SlFVRkplVU1zUjBGQmIwSXNTMEZCU3l4TFFVRk5la01zUlVGQlN5eGhRVUZsTEV0QlFVc3NXVUZCWVVFc1EwRkJTU3hEUVVOMFJpeERRVVZCTEZsQlFWazRRaXhGUVVGSmFVSXNSVUZCVnl4RFFVRkRMRVZCUVVjc1EwRkROMElzVDBGQlR5eEpRVUZKU3l4SFFVRnJRblJDTEVWQlFVa3NTMEZCU3l4TFFVRk5hVUlzUTBGQlVTeERRVU4wUkN4RFFVVkJMR0ZCUVdFdlF5eEZRVUZQTEVOQlFVTXNSVUZCUnl4RFFVTjBRaXhQUVVGUExFbEJRVWw1UkN4SFFVRnBRaXhMUVVGTExFdEJRVTBzUzBGQlN5eFZRVUZWTEVWQlFVZDZSQ3hEUVVGSkxFTkJReTlFTEVOQlJVRXNZMEZCWTBFc1JVRkJUeXhEUVVGRExFVkJRVWNzUTBGRGRrSXNUMEZCVDBZc1IwRkJXU3hMUVVGTExFdEJRVTFGTEVOQlFVa3NRMEZEY0VNc1EwRkZRU3hYUVVGWkxFTkJRMVlzVDBGRFJTeExRVUZMTEZOQlFWY3NUVUZEYUVJc1MwRkJTeXhQUVVGUExGbEJRVmtzU1VGQlRTeFRRVU01UWl4SlFVRkpMRXRCUVVzc1pVRkJaU3hMUVVGTExFbEJRVWtzUlVGQlJTeG5Ra0ZCWjBJc1JVRkJSU3hQUVVGUExGZEJRVmNzVDBGQlR5eERRVVZzUml4RFFVVkJMRTlCUVU4eVJpeEZRVUZQTEVOQlExb3NUMEZEUlN4TFFVRkxMRk5CUVZkQkxFVkJRVTBzVVVGRGRFSXNTMEZCU3l4clFrRkJiMEpCTEVWQlFVMHNhVUpCUXk5Q0xFdEJRVXNzYVVKQlFXMUNRU3hGUVVGTkxHTkJSV3hETEVOQlEwWXNSVU5zWWtFc1UwRkJVME1zVFVGQmEwSkRMRVZCUVZNc1EwRkRiRU1zU1VGQlRVTXNSVUZCVDBRc1JVRkJVU3hQUVVGUExFTkJRVU5GTEVWQlFVY3NTVUZCVFVFc1JVRkJTU3hGUVVGRkxFOUJRVkVzUlVGQlJTeEZRVU4wUkN4UFFVRlBMRTlCUVU4c1NVRkJTVVFzUTBGQlNTeEhRVUZITEVOQlF6TkNMRU5CUlVFc1UwRkJVMFVzVFVGQmNVSkRMRVZCUVZrc1EwRkRlRU1zVDBGQlQwTXNSMEZEVEVRc1JVRkRSeXhQUVVORExFTkJRVU1zUTBGQlEwVXNSVUZCV1VNc1JVRkJXVU1zUTBGQlRTeEZRVUZIUXl4SlFVRlBMRU5CUTNoRExFZEJRVTBzUTBGQlEwTXNSVUZCUzBNc1JVRkJUVU1zUTBGQlNTeEZRVUZKU0N4RlFVRkhTaXhGUVVGSFJ5eERRVUZOTEVWQlEzUkRMRTFCUVU4c1EwRkJRMHNzU1VGQlFTeEhRVUZMVUN4SFFVRmxTU3hIUVVGUFF5eEhRVUZSU2l4RlFVRlpTeXhEUVVGSkxFTkJRemRFTEVWQlEwRXNRMEZCUXl4RFFVRkRMRVZCUVVjc1MwRkJUU3hEUVVGRExFTkJRMlFzUlVGRFF5eE5RVUZOTEVWQlFVY3NRMEZCUXl4RFFVTnFRaXhEUVVWQkxGTkJRVk5GTEVkQlFVMURMRXRCUVUxRExFVkJRVlVzUTBGRE4wSXNSMEZCU1VRc1IwRkJTeXhMUVVOUUxFMUJRVThzUTBGQlF5eExRVUZOTEVsQlFVa3NSVUZIY0VJc1QwRkJWeXhEUVVGRFJTeEZRVUZQUXl4RFFVRlRMRWxCUVV0R0xFVkJRVlVzUTBGRGVrTXNTVUZCVFZnc1JVRkJTVmtzUlVGQlRTeExRVUZMUml4RFFVRkRMRVZCUTNSQ0xFZEJRVWxXTEVWQlEwWXNUMEZCVDJFc1JVRkJWV0lzUTBGQlF5eERRVVYwUWl4RFFVTkJMRTFCUVU4c1EwRkJReXhMUVVGTkxFbEJRVWtzUTBGRGNFSXNRMEZGUVN4VFFVRlRZeXhOUVVGbFF5eEZRVUZOTEVOQlF6VkNMRTFCUVU4c1EwRkJRME1zUlVGQlQySXNTVUZCVnl4RFFVTjRRaXhKUVVGTll5eEZRVUZOTEVOQlFVTXNSVUZEVkVNc1JVRkZTaXhKUVVGTFFTeEZRVUZKTEVWQlFVZEJMRVZCUVVsSUxFVkJRVXNzVDBGQlVVY3NTVUZETTBKRUxFVkJRVWxHTEVWQlFVdEhMRU5CUVVNc1EwRkJReXhGUVVGSlF5eEhRVUZoU0N4RlFVRk5ZaXhGUVVGVFpTeERRVUZETEVOQlFVTXNSVUZGTDBNc1RVRkJUeXhEUVVGRFJDeEZRVUZMTEV0QlFVMWtMRVZCUVZObExFTkJRVU1zUTBGREwwSXNRMEZEUml4RFFVZEJMRWxCUVUxRkxFZEJRV01zYTBOQlEyUkRMRWRCUVd0Q0xFMUJRVTFFTEVkQlFWa3NUVUZCVFN4WFFVRlhSU3hIUVVGVkxFMUJRVTBzVjBGRGNrVkRMRWRCUVcxQ0xITkVRVU51UWtNc1IwRkJaU3hQUVVGUExFZEJRVWRFTEVkQlFXbENMRTFCUVUwc1IwRkJSMFlzUlVGQlpTeEZRVUZGTEVWQlEzQkZTU3hIUVVGM1FpeFBRVUZQTEU5QlFVOUVMRWRCUVdFc1RVRkJUU3hKUVVGSkxFVkJRemRFUlN4SFFVRmpMRGhEUVVOa1F5eEhRVUZsTERoQ1FVTm1ReXhIUVVGclFpeHRRa0ZEYkVKRExFZEJRWEZDWml4SFFVRlpMRmRCUVZrc1lVRkJZeXhUUVVGVExFVkJRM0JGWjBJc1IwRkJkMEpvUWl4SFFVRlpMRTlCUVZFc1UwRkJVeXhGUVVOeVJHbENMRWRCUVdNc2QwSkJRMlJETEVkQlFXVXNUMEZEYmtJc1IwRkJSMVFzUjBGQmFVSXNUVUZCVFN4UlFVRlJTQ3hIUVVGWkxFMUJRVTBzUzBGQlMwVXNSMEZCVlN4TlFVRk5MRXRCUXpORkxFVkJRMDFYTEVkQlFYZENMRTlCUVU4c1QwRkJUMFFzUjBGQllTeE5RVUZOTEVsQlFVa3NSVUZGYmtVc1UwRkJVMFVzUjBGQlNXeENMRVZCUVU5dFFpeEZRVUZMUXl4RlFVRlZMRU5CUTJwRExFbEJRVTF3UXl4RlFVRkpaMElzUlVGQlRXMUNMRU5CUVVjc1JVRkRia0lzVDBGQlQwVXNSVUZCV1hKRExFTkJRVU1zUlVGQlNXOURMRVZCUVZkcVFpeEhRVUZoYmtJc1EwRkJReXhEUVVOdVJDeERRVVZCTEZOQlFWTnpReXhIUVVGamRFSXNSVUZCVDJJc1JVRkJVU3hEUVU5d1F5eE5RVUZQTEVOQlRrMHNRMEZEV0N4TFFVRk5LMElzUjBGQlNXeENMRVZCUVU5aUxFTkJRVTBzUlVGRGRrSXNUVUZCVHl0Q0xFZEJRVWxzUWl4RlFVRlBZaXhGUVVGVExFVkJRVWNzUTBGQlF5eEZRVU12UWl4SlFVRkxLMElzUjBGQlNXeENMRVZCUVU5aUxFVkJRVk1zUlVGQlJ5eERRVUZETEVOQlF5OUNMRVZCUldNc1MwRkJUVUVzUlVGQlV5eERRVUZETEVOQlEyaERMRU5CUlVFc1UwRkJVMjlETEVkQlFXVjJRaXhGUVVGUFlpeEZRVUZSTEVOQlVYSkRMRTFCUVU4c1EwRlFUU3hEUVVOWUxFMUJRVThyUWl4SFFVRkpiRUlzUlVGQlQySXNSVUZCVVN4RFFVRkRMRVZCUXpOQ0xGRkJRVk1yUWl4SFFVRkpiRUlzUlVGQlQySXNSVUZCVXl4RlFVRkhMRU5CUVVNc1JVRkRha01zVVVGQlV5dENMRWRCUVVsc1FpeEZRVUZQWWl4RlFVRlRMRVZCUVVjc1EwRkJReXhGUVVOcVF5eGhRVUZqY1VNc1IwRkJXWGhDTEVWQlFVMWlMRVZCUVZNc1EwRkJReXhEUVVGRExFTkJRemRETEVWQlJXTXNTMEZCVFVFc1JVRkJVeXhEUVVGRExFTkJRMmhETEVOQlJVRXNVMEZCVTNORExFZEJRV2xDZWtJc1JVRkJUMklzUlVGQlVTeERRVU4yUXl4SlFVRk5kVU1zUlVGQlVTeERRVUZETVVJc1JVRkJUV0lzUTBGQlRTeEhRVUZMTEVOQlFVTmhMRVZCUVUxaUxFVkJRVk1zUTBGQlF5eEZRVU12UTNkRExFVkJRV0ZETEVkQlFXRTFRaXhGUVVGTllpeEZRVUZUTEVOQlFVTXNSVUZCUjJFc1JVRkJUV0lzUlVGQlV5eERRVUZETEVOQlFVTXNSVUZET1VSSExFVkJRVTl2UXl4RlFVRlJMRXRCUVU5SExFZEJRV2RDTEZOQlFWTkdMRU5CUVZVc1JVRkRNMFFzVFVGQlR5eERRVUZETEVOQlFVTXNSVUZCUjNKRExFVkJRVTFJTEVWQlFWTXNRMEZCUXl4RFFVTTVRaXhEUVVWQkxGTkJRVk15UXl4SFFVRm5RamxDTEVWQlFVOWlMRVZCUVZFc1EwRkRkRU1zU1VGQlRVY3NSVUZCVDFVc1JVRkJUV0lzUTBGQlRTeEZRVUZKTkVNc1IwRkJVeXhQUVVGUEwwSXNSVUZCVFdJc1EwRkJUU3hEUVVGRExFVkJRVWtzUzBGRE9VUXNUVUZCVHl4RFFVRkRMRU5CUVVNc1JVRkJSMGNzUlVGQlRVZ3NSVUZCVXl4RFFVRkRMRU5CUXpsQ0xFTkJTVUVzU1VGQlRUWkRMRWRCUVdNc1QwRkJUeXhOUVVGTmVrSXNSMEZCYVVJc1RVRkJUU3hIUVVGSExFVkJTWEpFTUVJc1IwRkJZeXdyVUVGRmNFSXNVMEZCVTBNc1IwRkJiVUpzUXl4RlFVRlBMRU5CUTJwRExFZEJRVTBzUTBGRFNrNHNSVUZEUVhsRExFVkJRMEZETEVWQlEwRkRMRVZCUTBGRExFVkJRMEZETEVWQlEwRkRMRVZCUTBGRExFVkJRMEZETEVOQlEwWXNSVUZCU1RGRExFVkJSVVV5UXl4RlFVRnZRbXBFTEVWQlFVVXNRMEZCUXl4SlFVRk5MRWxCUXpkQ2EwUXNSVUZCYTBKSUxFZEJRV0ZCTEVWQlFWVXNRMEZCUXl4SlFVRk5MRWxCUldoRVNTeEZRVUZqTEVOQlFVTkRMRVZCUVV0RExFVkJRVkVzUzBGRGFFTkVMRWxCUVZFc1UwRkJZME1zUjBGQlZVUXNSMEZCVDBnc1IwRkJjMElzUTBGQlEwY3NSVUZCVFVFc1JVRkZkRVVzVFVGQlR5eERRVU5NTEVOQlEwVXNUVUZCVDBRc1JVRkJXVWNzUjBGQlkySXNRMEZCVHl4RFFVRkRMRVZCUTNwRExFOUJRVkZWTEVWQlFWbEhMRWRCUVdOYUxFTkJRVkVzUTBGQlF5eEZRVU16UXl4TlFVRlBVeXhGUVVGWlJ5eEhRVUZqV0N4RFFVRlBMRU5CUVVNc1JVRkRla01zUzBGQlRWRXNSVUZCV1Vjc1IwRkJZMVlzUTBGQlRTeERRVUZETEVWQlEzWkRMRTFCUVU5UExFVkJRVmxITEVkQlFXTlVMRU5CUVU4c1EwRkJReXhGUVVONlF5eFJRVUZUVFN4RlFVRlpSeXhIUVVGalVpeERRVUZUTEVOQlFVTXNSVUZETjBNc1VVRkJVMHNzUlVGQldVY3NSMEZCWTFBc1EwRkJVeXhGUVVGSFFTeEpRVUZqTEVsQlFVa3NSVUZEYWtVc1lVRkJZMGtzUlVGQldYSkNMRWRCUVZsclFpeERRVUZsTEVWQlFVZEZMRU5CUVdVc1EwRkRla1VzUTBGRFJpeERRVU5HTEVOQlMwRXNTVUZCVFVzc1IwRkJZU3hEUVVOcVFpeEpRVUZMTEVWQlEwd3NTVUZCU3l4SFFVRkxMRWRCUTFZc1NVRkJTeXhIUVVGTExFZEJRMVlzU1VGQlN5eEhRVUZMTEVkQlExWXNTVUZCU3l4SFFVRkxMRWRCUTFZc1NVRkJTeXhIUVVGTExFZEJRMVlzU1VGQlN5eEhRVUZMTEVkQlExWXNTVUZCU3l4SFFVRkxMRWRCUTFZc1NVRkJTeXhIUVVGTExFVkJRMW9zUlVGRlFTeFRRVUZUUXl4SFFVRlpReXhGUVVGWmFFSXNSVUZCVTBNc1JVRkJWVVVzUlVGQlVVTXNSVUZCVTBNc1JVRkJWME1zUlVGQlZ5eERRVU42Uml4SlFVRk5WeXhGUVVGVExFTkJRMklzUzBGQlRXcENMRVZCUVZFc1UwRkJWeXhGUVVGSmEwSXNSMEZCWld4RUxFZEJRV0ZuUXl4RFFVRlBMRU5CUVVNc1JVRkJTV2hETEVkQlFXRm5ReXhEUVVGUExFVkJRM3BHTEUxQlFXVnRRaXhIUVVGWkxGRkJRVkZzUWl4RFFVRlJMRVZCUVVrc1JVRkRMME1zU1VGQlMycERMRWRCUVdGdFF5eERRVUZOTEVWQlEzaENMRXRCUVUxdVF5eEhRVUZoYjBNc1EwRkJUeXhGUVVNeFFpeFBRVUZSY0VNc1IwRkJZWEZETEVOQlFWTXNRMEZEYUVNc1JVRkZRU3hQUVVGSlF5eEpRVUZYVnl4RlFVRlBMRTlCUVZOcVJDeEhRVUZoYzBNc1EwRkJVeXhIUVVOcVJGVXNTVUZEUmtNc1JVRkJUeXhSUVVOTVJDeEZRVUZYTEU5QlFWTXNSVUZEVWtrc1IwRkJZU3hSUVVGUlNpeERRVUZWTEVWQlFVa3NSVUZEYmtOTExFZEJRV01zVVVGQlVVd3NRMEZCVlN4RlFVRkpMRWRCUnpkRFF5eERRVU5VTEVOQlIwRXNTVUZCVFVzc1IwRkJWU3hyVFVGRmFFSXNVMEZCVTBNc1IwRkJaVEZFTEVWQlFVOHNRMEZETjBJc1IwRkJUU3hEUVVOR0xFTkJRMEZ0UkN4RlFVTkJZaXhGUVVOQlJpeEZRVU5CUkN4RlFVTkJTU3hGUVVOQlF5eEZRVU5CUXl4RlFVTkJhMElzUlVGRFFVTXNSVUZEUVVNc1JVRkRRVU1zUTBGRFJpeEZRVUZKT1VRc1JVRkRTbTlFTEVWQlFWTkdMRWRCUVZsRExFVkJRVmxvUWl4RlFVRlRReXhGUVVGVlJTeEZRVUZSUXl4RlFVRlRReXhGUVVGWFF5eERRVUZUTEVWQlJYWkdjMElzUlVGRFNpeFBRVUZKU2l4RlFVTkdTU3hGUVVGVFpDeEhRVUZYVlN4RFFVRlRMRVZCUTNCQ1F5eEZRVU5VUnl4RlFVRlRMRVZCUlZSQkxFVkJRVk51UXl4SFFVRmhhVU1zUlVGQldVTXNRMEZCV1N4RlFVZDZReXhEUVVGRFZpeEZRVUZSTEVsQlFVbDJRaXhIUVVGblFtdERMRU5CUVUwc1EwRkJReXhEUVVNM1F5eERRVVZCTEZOQlFWTkRMRWRCUVd0Q2RFVXNSVUZCUnl4RFFVVTFRaXhQUVVGUFFTeEZRVU5LTEZGQlFWRXNjVUpCUVhOQ0xFZEJRVWNzUlVGRGFrTXNVVUZCVVN4WFFVRlpMRWRCUVVjc1JVRkRka0lzUzBGQlN5eERRVU5XTEVOQlNVRXNTVUZCVFhWRkxFZEJRVlVzTmtoQlEyUkRMRWRCUVZNc2VVcEJRMVJETEVkQlFWRXNORWhCUlZZc1UwRkJVME1zUjBGQmIwSndSU3hGUVVGUExFTkJRMnhETEVkQlFVMHNRMEZCUXl4RFFVRkZiVVFzUlVGQldXSXNSVUZCVVVZc1JVRkJWVVFzUlVGQlUwa3NSVUZCVTBNc1JVRkJWME1zUTBGQlV5eEZRVUZKZWtNc1JVRkZha1lzVFVGQlR5eERRVVJKYTBRc1IwRkJXVU1zUlVGQldXaENMRVZCUVZORExFVkJRVlZGTEVWQlFWRkRMRVZCUVZORExFVkJRVmRETEVOQlFWTXNSVUZETTBWYUxFZEJRV2RDTEZkQlFWY3NRMEZETjBNc1EwRkZRU3hUUVVGVGQwTXNSMEZCWVhKRkxFVkJRVThzUTBGRE0wSXNSMEZCVFN4RFFVRkRMRU5CUVVWdFJDeEZRVUZaWml4RlFVRlZSU3hGUVVGUlF5eEZRVUZUUXl4RlFVRlhReXhGUVVGWFRpeERRVUZQTEVWQlFVbHVReXhGUVVWcVJpeE5RVUZQTEVOQlJFbHJSQ3hIUVVGWlF5eEZRVUZaYUVJc1JVRkJVME1zUlVGQlZVVXNSVUZCVVVNc1JVRkJVME1zUlVGQlYwTXNRMEZCVXl4RlFVTXpSVm9zUjBGQlowSXNWMEZCVnl4RFFVTTNReXhEUVVWQkxFbEJRVTE1UXl4SFFVRXJRalZHTEVkQlFXVm5ReXhIUVVGaFJDeEZRVUZ4UWl4RlFVTm9SamhFTEVkQlFXZEROMFlzUjBGQlpXbERMRWRCUVdOR0xFVkJRWEZDTEVWQlEyeEdLMFFzUjBGQmJVTTVSaXhIUVVGbGEwTXNSMEZCYVVKSUxFVkJRWEZDTEVWQlEzaEdaMFVzUjBGQmRVSXZSaXhIUVVGbE9FSXNSVUZCV1N4RlFVVnNSR3RGTEVkQlFUWkNOVVlzUjBGRGFrTjNReXhIUVVOQlF5eEhRVU5CUlN4SFFVTkJTeXhGUVVOR0xFVkJRMDAyUXl4SFFVRTRRamRHTEVkQlEyeERLMElzUjBGRFFWVXNSMEZEUVVVc1IwRkRRVXNzUlVGRFJpeEZRVU5OT0VNc1IwRkJLMEk1Uml4SFFVTnVRMmRETEVkQlEwRlRMRWRCUTBGRkxFZEJRMEZMTEVWQlEwWXNSVUZEVFN0RExFZEJRVEJDTDBZc1IwRkRPVUo1UXl4SFFVTkJSU3hIUVVOQlN5eEZRVU5HTEVWQlRVOHNVMEZCVTJkRUxFZEJRV0Z3Uml4RlFVRkhMRU5CUXpsQ0xFOUJRVTlFTEVkQlEweERMRVZCUTBFc1EwRkJRelJGTEVkQlFUaENTU3hGUVVFd1FpeEZRVU42UkN4RFFVRkRTQ3hIUVVFclFra3NSVUZCTWtJc1JVRkRNMFFzUTBGQlEwZ3NSMEZCYTBOSkxFVkJRVFJDTEVWQlF5OUVMRU5CUVVOSUxFZEJRWE5DU1N4RlFVRjFRaXhEUVVOb1JDeERRVU5HTEVOQlJVOHNVMEZCVTBVc1IwRkJhVUp5Uml4RlFVRkhMRU5CUTJ4RExFOUJRVTlFTEVkQlFVMTFSU3hIUVVGclFuUkZMRU5CUVVNc1JVRkJSeXhEUVVGREswUXNSMEZCVTBNc1JVRkJZeXhEUVVGRExFTkJRemxFTEVOQlJVOHNVMEZCVTNOQ0xFZEJRV04wUml4RlFVRkhMRU5CUXk5Q0xFOUJRVTlFTEVkQlEweERMRVZCUTBFc1EwRkJRM1ZGTEVkQlFWTkhMRVZCUVcxQ0xFVkJRemRDTEVOQlFVTkdMRWRCUVZGRkxFVkJRVzFDTEVWQlF6VkNMRU5CUVVORUxFZEJRVTlGTEVWQlFWa3NRMEZEZEVJc1EwRkRSaXhEUVVWUExGTkJRVk5aTEVkQlFXbENka1lzUlVGQlJ5eERRVU5zUXl4UFFVRlBSQ3hIUVVGTlF5eEZRVUZITEVOQlFVTjFReXhIUVVGaFF5eEZRVUZyUWl4RFFVRkRMRU5CUTI1RUxFTkJSVUVzU1VGQlRXZEVMRWRCUVhGQ2NFY3NSMEZCYTBKNVF5eEZRVUZqTEVWQlJYQkVMRk5CUVZNMFJDeEhRVUZwUW5wR0xFVkJRVWNzUTBGRGJFTXNUMEZCVDBRc1IwRkJUVU1zUlVGQlJ5eERRVUZEYzBNc1IwRkJZV3RFTEVWQlFXdENMRU5CUVVNc1EwRkRia1FzUTBGRlFTeEpRVUZOUlN4SFFVRXJRakZITEVkQlFXVnhReXhIUVVGaFJTeEZRVUZ4UWl4RlFVTm9SbTlGTEVkQlFYVkNNMGNzUjBGQlpYTkRMRVZCUVZrc1JVRkZiRVJ6UlN4SFFVRnJRM2hITEVkQlEzUkRlVU1zUjBGRFFVVXNSMEZEUVVzc1JVRkRSaXhGUVVWUExGTkJRVk41UkN4SFFVRlROMFlzUlVGQlJ5eERRVU14UWl4UFFVRlBSQ3hIUVVOTVF5eEZRVU5CTEVOQlFVTXdSaXhIUVVFNFFsWXNSVUZCTUVJc1JVRkRla1FzUTBGQlExY3NSMEZCYzBKRExFVkJRU3RDTEVOQlEzaEVMRU5CUTBZc1EwTnNWVUVzU1VGQlRVVXNSMEZCVlN4dFFrRkhTRU1zUjBGQmFVSXNRMEZETVVJc1RVRkJUeXhEUVVOTUxFdEJRVTBzUlVGRFRpeE5RVUZQTEVWQlFVa3NSMEZEV0N4UlFVRlRMRVZCUVVrc1IwRkJTeXhIUVVOc1FpeFJRVUZUTEVWQlFVa3NSMEZCU3l4SFFVRkxMRWRCUTNaQ0xHRkJRV01zUlVGQlNTeEhRVUZMTEVkQlFVc3NSMEZCU3l4SFFVTnVReXhGUVVOQkxFdEJRVTBzUTBGRFNpeE5RVUZQTEVkQlExQXNVVUZCVXl4SFFVRkxMRWRCUTJRc1VVRkJVeXhIUVVGTExFZEJRVXNzUjBGRGJrSXNZVUZCWXl4SFFVRkxMRWRCUVVzc1IwRkJTeXhIUVVNdlFpeEZRVU5CTEUxQlFVOHNRMEZCUlN4UlFVRlRMRWRCUVVrc1VVRkJVeXhIUVVGTExFZEJRVWtzWVVGQll5eEhRVUZMTEVkQlFVc3NSMEZCU3l4RlFVTnlSU3hSUVVGVExFTkJRVVVzVVVGQlV5eEhRVUZKTEdGQlFXTXNSMEZCU3l4SFFVRkxMRVZCUTJoRUxGRkJRVk1zUTBGQlJTeGhRVUZqTEVkQlFVc3NRMEZEYUVNc1JVRkRRVU1zUjBGQlpVTXNSVUZCUVN4RFFVTmlMRTFCUVU4c1EwRkRUQ3hUUVVGVkxFVkJRMVlzVDBGQlVTeEhRVU5TTEUxQlFVOHNSMEZEVUN4TFFVRk5MRWxCUTA0c1RVRkJUeXhKUVVGTkxFZEJRMklzVVVGQlV5eEpRVUZOTEVkQlFVc3NSMEZEY0VJc1VVRkJVeXhKUVVGTkxFZEJRVXNzUjBGQlN5eEhRVU42UWl4aFFVRmpMRWxCUVUwc1IwRkJTeXhIUVVGTExFZEJRVXNzUjBGRGNrTXNSVUZEUVN4VFFVRlZMRU5CUTFJc1QwRkJVU3hGUVVOU0xFMUJRVThzUjBGRFVDeExRVUZOTEVkQlEwNHNUVUZCVHl4SFFVRkxMRWRCUTFvc1VVRkJVeXhIUVVGTExFZEJRVXNzUjBGRGJrSXNVVUZCVXl4SFFVRkxMRWRCUVVzc1IwRkJTeXhIUVVONFFpeGhRVUZqTEVkQlFVc3NSMEZCU3l4SFFVRkxMRWRCUVVzc1IwRkRjRU1zUlVGRFFTeFBRVUZSTEVOQlEwNHNUVUZCVHl4RlFVTlFMRXRCUVUwc1IwRkRUaXhOUVVGUExFZEJRVXNzUjBGRFdpeFJRVUZUTEVkQlFVc3NSMEZCU3l4SFFVTnVRaXhSUVVGVExFZEJRVXNzUjBGQlN5eEhRVUZMTEVkQlEzaENMR0ZCUVdNc1IwRkJTeXhIUVVGTExFZEJRVXNzUjBGQlN5eEhRVU53UXl4SFFVVkhSaXhKUVVWTVJ5eEhRVUZ4UWl4UFFVRlhMRWxCUTJoRFF5eEhRVUZ6UWl4UFFVRlhMRXRCUTJwRFF5eEhRVUZwUWtnc1JVRkJRU3hEUVVObUxFMUJRVThzUTBGRFRDeFRRVUZWTEVWQlExWXNUMEZCVVN4SFFVTlNMRTFCUVU5RExFZEJRWEZDTEVWQlF6VkNMRXRCUVUxQkxFZEJRMDRzVFVGQlQwRXNSMEZCY1VJc1IwRkROVUlzVVVGQlUwRXNSMEZCY1VJc1IwRkJTeXhIUVVOdVF5eFJRVUZUUVN4SFFVRnhRaXhIUVVGTExFZEJRVXNzUjBGRGVFTXNZVUZCWTBFc1IwRkJjVUlzUjBGQlN5eEhRVUZMTEVkQlFVc3NSMEZEY0VRc1JVRkRRU3hUUVVGVkxFTkJRMUlzVDBGQlVTeEZRVU5TTEUxQlFVOUJMRWRCUVhGQ0xFZEJRelZDTEV0QlFVMUJMRWRCUVhGQ0xFVkJRek5DTEUxQlFWRkJMRWRCUVhGQ0xFZEJRVTBzUlVGRGJrTXNVVUZCVlVFc1IwRkJjVUlzUjBGQlN5eEhRVUZOTEVWQlF6RkRMRkZCUVZWQkxFZEJRWEZDTEVkQlFVc3NSMEZCU3l4SFFVRk5MRVZCUXk5RExHRkJRV1ZCTEVkQlFYRkNMRWRCUVVzc1IwRkJTeXhIUVVGTExFbEJRVkVzUTBGRE4wUXNSVUZEUVN4UFFVRlJMRU5CUTA0c1RVRkJUME1zUjBGQmMwSXNSVUZETjBJc1MwRkJUVUVzUjBGRFRpeE5RVUZQUVN4SFFVRnpRaXhIUVVNM1FpeFJRVUZUUVN4SFFVRnpRaXhIUVVGTExFZEJRM0JETEZGQlFWTkJMRWRCUVhOQ0xFZEJRVXNzUjBGQlN5eEhRVU42UXl4aFFVRmpRU3hIUVVGelFpeEhRVUZMTEVkQlFVc3NSMEZCU3l4SFFVTnlSQ3hIUVVOSFNpeEpRVWxFVFN4SFFVRmxMRU5CUTI1Q0xGRkJRMEVzVjBGRFFTeFRRVU5CTEZGQlEwRXNUMEZEUVN4UlFVTkJMRlZCUTBFc1ZVRkRRU3hqUVVOR0xFVkJSVTFETEVkQlFXVkVMRWRCUVdFc1RVRkJUU3hEUVVGRExFVkJRVVVzVVVGQlVTeEZRVWR1UkN4VFFVRlRSU3hIUVVGTlF5eEZRVUZMUXl4RlFVRk5ReXhGUVVGUkxFZEJRVThzUTBGRmRrTXNTVUZCVFVNc1JVRkJUeXhEUVVOWUxFOUJRVkZFTEVWQlFWRkVMRVZCUVVzc1QwRkJVMUlzU1VGQlFTeEhRVUZMVHl4RlFVRkpMRkZCUVZsRExFVkJRVXNzVVVGQlZTeERRVUZETEVkQlEyNUZMRWxCUVV0RUxFVkJRVWtzU1VGQlNTeE5RVUZOUXl4RlFVRkxMRWRCUVVjc1JVRkRNMElzYlVKQlFXOUNRU3hGUVVGTExHOUNRVUZ6UWtRc1JVRkJTU3hyUWtGRGNrUXNSVUZEUVN4UFFVRlBMRWxCUVVsSkxFVkJRVk5FTEVOQlFVa3NRMEZETVVJc1EwRkZRU3hUUVVGVFJTeEhRVUZWTEVWQlFVY3NRMEZEY0VJc1QwRkJUeXhGUVVGSkxFVkJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVTXNSVUZCU1N4TFFVRkxMRXRCUVVzc1EwRkJReXhEUVVNMVF5eERRVWRCTEZOQlFWTkRMRWRCUVZGRExFVkJRVkZETEVWQlFWTkRMRVZCUVZWRExFVkJRVTlETEVWQlFWRXNRMEZEZWtRc1NVRkJUVU1zUlVGQlQwd3NSVUZCVDBrc1EwRkJUU3hGUVVGRlJpeERRVUZSTEVWQlEyeERTU3hGUVVGTlRDeEZRVUZSUXl4RFFVRlJMRVZCUVVsSExFVkJRekZDUlN4RlFVRlhMRXRCUVVzc1MwRkJTMFFzUTBGQlJ5eEpRVUZOTEV0QlFVc3NTMEZCUzBnc1JVRkJUVU1zUTBGQlRTeERRVUZETEVWQlJYSkVTU3hGUVVORkxFTkJRVU5FTEVkQlFWbEtMRVZCUVUxRExFTkJRVTBzU1VGQlRTeEhRVUZMTEV0QlFVc3NTVUZCU1VVc1EwRkJSeXhIUVVGTExFVkJRVWxTTEVkQlFWVlJMRU5CUVVjc1JVRkJTU3hMUVVGTExFMUJRVTFCTEVOQlFVY3NSVUZETlVaSUxFVkJRVTFETEVOQlFVMHNSMEZCUzBrc1JVRkRha0pRTEVWQlFWRkRMRU5CUVZFc1IwRkJTMDBzUlVGQlVVZ3NRMEZETDBJc1EwRkhRU3hUUVVGVFNTeEhRVUZuUWxRc1JVRkJVVlVzUlVGQlRTeERRVU55UTI1Q0xFZEJRV0VzVDBGQlR5eERRVUZEYjBJc1JVRkJWVU1zU1VGRGVFSkRMRVZCUVZsSUxFVkJRVXRGTEVOQlFVOHNRMEZCUXl4RlFVMXlRa1FzUjBGTVNFRXNSMEZEUmxvc1IwRkJVVU1zUlVGQlVWVXNSVUZCVFVNc1JVRkJWVVFzUlVGQlRVVXNRMEZCVHl4RlFVVjRRMEVzUjBGSlVpeEpRVUZKTEVOQlExUXNRMEZsUVN4SlFVRnhRbVlzUlVGQmNrSXNUVUZCY1VKcFFpeERRVUZUTEVOQlNUVkNMRmxCUVZsRExFVkJRVkVzUTBGRGJFSXNTVUZCVFVNc1JVRkJWMFFzUlVGQlR5eHhRa0ZCZFVJc1dVRkJZeXhIUVVrM1JDeExRVUZMTEU5QlFWTkJMRVZCUVU4c1QwRkpja0lzUzBGQlN5eEpRVUZOUVN4RlFVRlBMRXRCUVU5RkxFZEJRVThzVDBGQlR5eEZRVWwyUXl4TFFVRkxMRzFDUVVGeFFrUXNSVUZCVnl4WFFVRmhMRk5CU1d4RUxFdEJRVXNzVVVGQlZVUXNSVUZCVHl4VFFVRlhMRXRCU1dwRExFdEJRVXNzVDBGQlUwTXNSVUZCVnpOQ0xFZEJRV2xDU2l4SFFVa3hReXhMUVVGTExHZENRVUZyUWl4RlFVTjZRaXhEUVZkQkxFOUJRVThzVjBGQlYybERMRVZCUVU5RExFVkJRVTBzUTBGRE4wSXNUMEZCVDB3c1JVRkJVeXhYUVVGWExFTkJRVVVzWVVGQlkwa3NRMEZCVFN4RlFVRkhReXhEUVVGSkxFTkJRekZFTEVOQmNVSkJMRTlCUVU4c1YwRkJWME1zUlVGQlMwUXNSVUZCVHl4RFFVRkRMRVZCUVVjc1EwRkRhRU1zUjBGQlNVTXNSMEZCVHl4TlFVRlJMRTlCUVU5QkxFZEJRVkVzVTBGRGFFTXNUVUZCVFN4SlFVRkpReXhIUVVOU0xDdEVRVU5GUkN4SlFVRlJMRXRCUVU4c1QwRkJVeXhQUVVGUFFTeERRVU5xUXl4RlFVTkdMRVZCUjBZc1QwRkJUeXhKUVVGSlRpeEZRVUZUTEVOQlEyeENMRTlCUVZGUkxFZEJRV2RDUml4RlFVRkxUaXhGUVVGVExHRkJRV0VzUlVGRGJrUXNTVUZCUzBjc1IwRkJUeXhYUVVGWFJTeERRVUZKTEVWQlF6TkNMRzFDUVVGdlFrRXNSVUZCU3l4clFrRkRNMElzUTBGQlF5eERRVU5JTEVOQldVRXNUMEZCVHl4cFFrRkJhVUpKTEVWQlFXTXNRMEZEY0VNc1IwRkJTVU1zUjBGQlUwUXNRMEZCV1N4RlFVTjJRaXhQUVVGUFZDeEZRVUZUTEZkQlFWZFRMRU5CUVZrc1JVRkRiRU1zUjBGQlNWUXNSVUZCVXl4WFFVRlhVeXhEUVVGWkxFVkJRM3BETEU5QlFVOUJMRVZCUTBZc1IwRkJTU3hQUVVGUFFTeEhRVUZwUWl4VFFVTnFReXhQUVVGUFZDeEZRVUZUTEZkQlFWZFRMRU5CUVZrc1JVRkZka01zVFVGQlRTeEpRVUZKUml4SFFVTlNMRFpDUVVFMlFrVXNRMEZCV1N4WlFVRlpMRTlCUVU5QkxFTkJRVmtzUlVGRE1VVXNRMEZGU2l4RFFXVkJMRTlCUVU4c1VVRkJVVVVzUlVGQlRVNHNSVUZCVFN4RFFVTjZRaXhIUVVGTkxFTkJRVU5QTEVOQlFVMHNSVUZCU1VNc1IwRkJhVUpHTEVOQlFVa3NSVUZEZEVNc1QwRkJTVU1zUlVGRFMxb3NSVUZCVXl4WFFVRlhXU3hGUVVGUlVDeERRVUZKTEVWQlJXaERUQ3hGUVVGVExGRkJRVkVzWVVGQll5eGpRVUZqVnl4RFFVRkpMQ3RDUVVFclFpeERRVVV6Uml4RFFXbENRU3hQUVVGUExGbEJRVmxCTEVWQlFVMU9MRVZCUVUwc1EwRkROMElzUjBGQlRTeERRVUZEVHl4RFFVRk5MRVZCUVVsRkxFZEJRV2xDU0N4RFFVRkpMRVZCUTNSRExFOUJRVWxETEVWQlEwdGFMRVZCUVZNc1YwRkJWMWtzUlVGQlVWQXNRMEZCU1N4RlFVVm9RMHdzUlVGQlV5eFJRVUZSTEdGQlFXTXNZMEZCWTFjc1EwRkJTU3dyUWtGQkswSXNRMEZGTTBZc1EwRlJRU3hQUVVGUExGRkJRVkZKTEVWQlFWRkRMRVZCUVdNc1MwRkJUU3hEUVVONlF5eEhRVUZKTEVOQlFVTkVMRVZCUTBnc1RVRkJUU3hKUVVGSlVpeEhRVUZ4UWl4clJFRkJhMFFzUlVGSGJrWXNTVUZCVFZVc1JVRkJWVVlzWVVGQmEwSkhMRWRCUVZWSUxFVkJRVk1zU1VGQlNVY3NSMEZCVVVnc1JVRkJVVU1zUTBGQlZ5eEZRVVZ3Uml4SFFVRkpSeXhGUVVGVExHVkJRMWdzVFVGQlRTeEpRVUZKUXl4SFFVRnhRa2dzUTBGQlR5eEZRVVYwUXl4UFFVRlBMRWxCUVVscVFpeEZRVUZUTEVOQlFVVXNVVUZCUVdsQ0xFTkJRVkVzUTBGQlF5eERRVVZ1UXl4RFFVdEJMRTlCUVU4c1kwRkJZMGtzUlVGQlRTeERRVU42UWl4SlFVRk5ReXhGUVVGaExFTkJRMnBDTEV0QlFVMHNVVUZEVGl4TlFVRlBMRkZCUTFBc1VVRkJVeXhYUVVOVUxGTkJRVlVzVjBGRFZpeE5RVUZQTEZOQlExQXNUMEZCVVN4VFFVTlNMRXRCUVUwc1VVRkRUaXhOUVVGUExGRkJRMUFzU1VGQlN5eFBRVU5NTEV0QlFVMHNUMEZEVGl4TFFVRk5MRkZCUTA0c1RVRkJUeXhSUVVOUUxFOUJRVkVzVlVGRFVpeFJRVUZUTEZWQlExUXNUMEZCVVN4VlFVTlNMRkZCUVZNc1ZVRkRWQ3haUVVGaExHVkJRMklzWVVGQll5eGpRVU5vUWl4RlFVRkZSQ3hIUVVGUFFTeEZRVUZMTEZsQlFWa3NRMEZCVVN4RlFVVnNReXhIUVVGSkxFTkJRVU5ETEVWQlFWa3NUVUZCVFN4SlFVRkpReXhIUVVGcFFrWXNRMEZCU1N4RlFVVm9SQ3hQUVVGUFF5eERRVU5VTEVOQlQwRXNUMEZCVHl4WFFVRlhSU3hGUVVGSExFTkJRMjVDTEU5QlFWRkJMRWRCUVV0QkxFVkJRVVVzYVVKQlFXOUNMRVZCUTNKRExFTkJUVUVzU1VGQlNTeFJRVUZUTEVOQlExZ3NUMEZCVHl4TFFVRkxMRkZCUVZVc1MwRkJTeXhKUVVGSkxFOUJRVk1zU1VGRE1VTXNRMEZQUVN4SlFVRkpMR2xDUVVGclFpeERRVU53UWl4UFFVRlBMRXRCUVVzc1VVRkJWU3hMUVVGTExFbEJRVWtzWjBKQlFXdENMRWxCUTI1RUxFTkJkMEpCTEZOQlFWTkRMRVZCUVV0d1FpeEZRVUZQTEVOQlFVTXNSVUZCUnl4RFFVVjJRaXhKUVVGTmNVSXNSVUZCVlVNc1IwRkJRWFpFTEVWQlFVRXNSMEZEV0dsRExFZEJSRmNzUTBGRlpDeE5RVUZQUVN4RlFVRkxMRkZCUVZVc1NVRkJVMEVzUlVGQlN5eFJRVUZWTEVWQlEyaEVMRWRCUTBFc1QwRkJUeXhMUVVGTExGRkJRMUoxUWl4SFFVRlZMRTlCUVU4c1MwRkJTeXhKUVVGTFJpeERRVUZQTEVWQlFVVXNlVUpCUVhsQ0xFdEJRVTFFTEVOQlFVY3NSVUZEZEVWNFJDeEZRVU5PTEVOQlpVRXNVVUZCVVc5RExFVkJRVThzUTBGQlF5eEZRVUZITEVOQlEycENMRWxCUVUxM1FpeEZRVUZKY2tRc1IwRkRVQ3hKUVVGTE5rTXNSMEZCVXl4RFFVTmlMRWxCUVUxVExFVkJRVTBzUzBGQlN5eFBRVUZQVkN4RFFVRkpMRVZCUXpWQ0xFOUJRVWwwUWl4RlFVRlpLMElzUTBGQlJ5eEZRVU5XTEV0QlJVWXNTMEZCU3l4SlFVTlVMR2RDUVVGblFrZ3NSMEZCUVhaRUxFVkJRVUVzUTBGQlJTeE5RVUZQTEU5QlFWRXNXVUZCWVN4UlFVRlhhVU1zUjBGQmVrTXNRMEZCSzBNc1MwRkJUV2RDTEVWQlFVc3NUVUZCVFN4RlFVRkhMRVZCUVVVc1EwRkJSU3hGUVVGRExFVkJRM2hHTEU5QlFVOVRMRU5CUVVjc1EwRkRaaXhEUVVGRExFVkJRMEVzVDBGQlVVTXNSMEZCVFVFc1EwRkJReXhGUVVWc1FpeFBRVUZQTEV0QlFVc3NTVUZEVkN4alFVRmpNMFFzUlVGQlFTeERRVUZGTEV0QlFVMHNZMEZCWlN4TlFVRlBhVU1zUlVGQlN5eFhRVUZoTEZWQlFXRkJMRVZCUVUwc1JVRkRha1lzVDBGQlQzZENMRU5CUVVNc1EwRkRZaXhEUVU5QkxGVkJRVmNzUTBGRFZDeFBRVUZMTEV0QlFVc3NVVUZEU0hwRUxFVkJRVUVzUjBGQlN5eExRVUZMTEZGQlJGTXNRMEZCUXl4RFFVVTNRaXhEUVZsQkxFOUJRVkVzUTBGRlRpeEhRVUZKTEVOQlFVTXNTMEZCU3l4UlFVRlRMRTlCUVU4c1MwRkZNVUlzU1VGQlNUUkVMRVZCUVVrc1NVRkRVaXhQUVVGSkxFdEJRVXNzVVVGQlZTeEpRVUZIUVN4SFFVRkxMRXRCUVVzc1RVRkJVU3hOUVVOd1F5eExRVUZMTEZOQlFWY3NSMEZCU3l4TFFVRkxMRmRCUVdFc1MwRkJSMEVzUjBGQlN5eExRVUZMTEU5QlFWTXNTMEZCU3l4VFFVRlhMRVZCUVVrc1MwRkRha1lzUzBGQlN5eFJRVUZWTEVsQlFVZEJMRWRCUVVzc1MwRkJTeXhOUVVGUkxFdEJRM0JETEV0QlFVc3NUMEZCVXl4SlFVRkhRU3hIUVVGTExFdEJRVXNzUzBGQlR5eE5RVU5zUXl4TFFVRkxMRkZCUVZVc1IwRkJTeXhMUVVGTExGVkJRVmtzUjBGQlN5eExRVUZMTEZWQlFWa3NSMEZCU3l4TFFVRkxMR1ZCUVdsQ0xFdEJRM2hHUVN4SFFVRkxMRXRCUTBnc1MwRkJTeXhSUVVGVkxFbEJRVWRCTEVkQlFVc3NTMEZCU3l4TlFVRlJMRXRCUTNCRExFdEJRVXNzVlVGQldTeEpRVUZIUVN4SFFVRkxMRXRCUVVzc1VVRkJWU3hOUVVONFF5eExRVUZMTEZWQlFWa3NSMEZCU3l4TFFVRkxMR1ZCUVdsQ0xFdEJSemxEUVN4SFFVRkxReXhIUVVGUkxFdEJRVXNzVVVGQlZTeExRVUZMTEdGQlFXVXNTVUZCVFN4RFFVRkRMRVZCUVVrc1MwRkRla1JFTEVsQlFVMHNUVUZCUzBFc1IwRkJTeXhQUVVOaVFTeERRVU5VTEVOQmEwSkJMRlZCUVZVelFpeEZRVUZQTEVOQlFVTXNSVUZCUnl4RFFVTnVRaXhIUVVGSkxFTkJRVU1zUzBGQlN5eFJRVUZUTEU5QlFVOHNTMEZGTVVJc1NVRkJUVFpDTEVWQlFWTXNTMEZCU3l4VFFVRlRMRVZCUXpkQ0xFZEJRVWxCTEVWQlFWTXNSMEZCUzBFc1IwRkJWU3hOUVVGVkxFOUJRVThzUzBGRk4wTTNRaXhGUVVGUGFrTXNSVUZCUVN4RFFVTk1MSEZDUVVGelFpeEhRVU4wUWl4blFrRkJhVUlzUjBGRGFrSXNZMEZCWlN4SFFVTm1MRTlCUVZFc1dVRkRUR2xETEVkQlIwd3NTVUZCVFRoQ0xFVkJRVkVzUzBGQlN5eFJRVUZSTEZGQlFWTXNWVUZCVnl4VlFVRlhMR05CUVdNc1JVRkZjRVZXTEVWQlFVMXdRaXhGUVVGTExGTkJRVmNzVVVGQlZTeFBRVUZUTEZOQlJYcERMRU5CUVVOQkxFVkJRVXNzYVVKQlFXMUNPRUlzUlVGQlRTeFZRVUZaTEVkQlFVdEJMRVZCUVUwc1pVRkJhVUlzUzBGRGVrVldMRWRCUVU5d1FpeEZRVUZMTEZOQlFWY3NVVUZCVlN4TFFVRlBMRTlCUTNCRExFTkJRVU5CTEVWQlFVc3NjMEpCUVhkQ09FSXNSVUZCVFN4bFFVRnBRaXhMUVVOMlJGWXNSMEZCVHl4VFFVbFlMRWxCUVVsWExFVkJRVTFFTEVWQlFVMHNVMEZCVTFZc1EwRkJSeXhGUVVVMVFpeFBRVUZKY0VJc1JVRkJTeXhuUWtGRFVDdENMRVZCUVUwc1NVRkJUVUVzUjBGSFVFRXNRMEZEVkN4RFFVMUJMRkZCUVZNc1EwRkRVQ3hQUVVGUExFdEJRVXNzVFVGQlRTeERRVU53UWl4RFFVMUJMRlZCUVZjc1EwRkRWQ3hQUVVGUExFdEJRVXNzVFVGQlRTeERRVU53UWl4RFFVMUJMRlZCUVZjc1EwRkRWQ3hQUVVGUExFdEJRVXNzUjBGQlJ5eGpRVUZqTEVOQlF5OUNMRU5CVFVFc1UwRkJWU3hEUVVOU0xFOUJRVThzUzBGQlN5eFRRVUZUTEVOQlEzWkNMRU5CVDBFc1MwRkJTME1zUlVGQlZTeERRVU5pTEVkQlFVa3NRMEZCUXl4TFFVRkxMRkZCUVZNc1QwRkJUeXhMUVVVeFFpeEpRVUZOTVVRc1JVRkJUWEZDTEVWQlFWTXNhVUpCUVdsQ2NVTXNRMEZCVVN4RlFVTTFRME1zUlVGQlV5eERRVUZETEVWQlJWb3NVVUZCVjBNc1MwRkJTeTlFTEVsQlExWm5SU3hIUVVGbE4wUXNSVUZCU1N4UFFVRlJORVFzUTBGQlF5eEhRVUZMUXl4SFFVRmxMRXRCUVVzc1QwRkJVVVFzUTBGQlF5eExRVU5vUlVRc1JVRkJUME1zUTBGQlF5eEZRVUZKTlVRc1JVRkJTU3hKUVVGSk5FUXNRMEZCUXl4RlFVRkpMRXRCUVVzc1NVRkJTVUVzUTBGQlF5eEhRVWwyUXl4UFFVRlBOMFFzUjBGQlRTeExRVUZOTEVOQlFVVXNUMEZCVVRSRUxFTkJRVThzUlVGQlJ5eEZRVUZKTEVOQlF6ZERMRU5CVDBFc1RVRkJUVVFzUlVGQlZTeERRVU5rTEVkQlFVa3NRMEZCUXl4TFFVRkxMRkZCUVZNc1QwRkJUeXhMUVVVeFFpeEpRVUZOTVVRc1JVRkJUWEZDTEVWQlFWTXNhVUpCUVdsQ2NVTXNRMEZCVVN4RlFVTTVReXhQUVVGUExFdEJRVXNzUzBGQlN6RkVMRVZCUVVrc1QwRkJUeXhEUVVGRExFTkJReTlDTEVOQlUwRXNVMEZCVXpoRUxFVkJRVWtzUTBGRFdDeEhRVUZKTEVOQlFVTXNTMEZCU3l4UlFVRlRMRTlCUVU4c1MwRkRNVUlzU1VGQlRVZ3NSVUZCVXl4RFFVRkRMRVZCUTJoQ0xGRkJRVmRETEV0QlFVc3NUMEZCVHl4TFFVRkxMRXRCUVVzc1RVRkJUU3hGUVVOeVEwUXNSVUZCVDBNc1EwRkJReXhGUVVGSlJ5eEhRVUZUUkN4RlFVRkhMRXRCUVVzc1QwRkJUMFlzUTBGQlF5eEZRVUZIUVN4RFFVRkRMRU5CUVVNc1JVRkZOVU1zVDBGQlR6ZEVMRWRCUVUwc1MwRkJUU3hEUVVGRkxFOUJRVkUwUkN4RFFVRlBMRVZCUVVjc1JVRkJTU3hEUVVNM1F5eERRVlZCTEVsQlFVbHFRaXhGUVVGTkxFTkJRMUlzVDBGQlR5eExRVUZMY2tJc1JVRkJVeXhqUVVGamNVSXNRMEZCU1N4RFFVRkRMRU5CUXpGRExFTkJVMEVzU1VGQlNYTkNMRVZCUVZFc1EwRkRWaXhIUVVGSkxFTkJRVU1zUzBGQlN5eFJRVUZUTEU5QlFVOHNTMEZGTVVJc1NVRkJUVU1zUlVGQlVYaEZMRWxCUVVFc1IwRkJTeXhMUVVGTExGRkJRVmR2UXl4SFFVRm5RbTFETEVWQlFWRXpReXhGUVVGVExHRkJRV0VzUjBGRGFrWXNUMEZCVDNSQ0xFZEJRVTBzUzBGQlRTeERRVUZGTEU5QlFWRnJSU3hEUVVGTkxFTkJRVU1zUTBGRGRFTXNRMEZQUVN4WlFVRlpMRU5CUVVVc1QwRkJRVU1zUlVGQlVTeG5Ra0ZCUVVNc1JVRkJhVUlzYlVKQlFVRkRMRU5CUVcxQ0xFVkJRVWtzUTBGQlF5eEZRVUZITEVOQlEyaEZMRWxCUVUxRExFVkJRVTBzUzBGQlN5eEpRVUZKTEUxQlFVMHNRMEZCUlN4UFFVRkJTQ3hGUVVGUkxHZENRVUZCUXl4RFFVRm5RaXhEUVVGRExFVkJRM0JFZWtNc1JVRkJUeXhEUVVGRkxFbEJRVUV5UXl4RFFVRkpMRVZCUldZc1QwRkJTVVFzU1VGRFJqRkRMRVZCUVVzc2JVSkJRWEZDTUVNc1IwRkhja0p5UlN4SFFVRk5MRXRCUVUweVFpeERRVUZKTEVOQlEzcENMRU5CVlVFc1IwRkJSMmRDTEVWQlFVMHNRMEZEVUN4UFFVRlBMRXRCUVVzc1VVRkJWU3hMUVVGTExGRkJRVkZCTEVOQlFVa3NSVUZCUlN4SlFVRkpRU3hEUVVGSkxFVkJRVWtzUjBGRGRrUXNRMEZSUVN4WFFVRlpMRU5CUTFZc1IwRkJTU3hEUVVGRExFdEJRVXNzVVVGQlV5eFBRVUZQTEV0QlF6RkNMRWxCUVUxNlFpeEZRVUZQTEV0QlFVc3NVMEZCVXl4RlFVTXpRaXhQUVVGQlJDeEhRVUZuUWl4TFFVRkxMRTlCUVZGRExFTkJRVWtzUlVGRE1VSnNRaXhIUVVGTkxFdEJRVTBzUTBGQlJTeFBRVUZSYTBJc1EwRkJTeXhGUVVGSExFVkJRVWtzUTBGRE0wTXNRMEZQUVN4WFFVRlhjVVFzUlVGQlR5eERRVU5vUWl4SFFVRkpMRU5CUVVNc1MwRkJTeXhSUVVGVExFOUJRVThzUzBGRk1VSXNSMEZCU1VFc1JVRkJUU3hUUVVGWExFVkJRMjVDTEU5QlFVOHNTMEZIVkVFc1JVRkJVVUVzUlVGQlRTeEpRVUZMUXl4SFFVRk5iRVFzUlVGQlV5eGpRVUZqYTBRc1EwRkJReXhEUVVGRExFVkJSV3hFTEVsQlFVMURMRVZCUVZFc1EwRkJReXhGUVVOaVF5eEZRVUZqTEVOQlFVTXNSVUZEWm5oRUxFVkJRVThzUzBGQlN5eFRRVUZUTEVWQlEyNUNlVVFzUlVGRlNpeFJRVUZYWkN4TFFVRkxMMFFzUjBGRFpDeEhRVUZKZVVVc1JVRkJUU3hSUVVGUlZpeERRVUZETEVkQlFVc3NSVUZCUnl4RFFVTjZRbU1zUlVGQlYyUXNSVUZGV0N4SlFVRkpaU3hGUVVGTkxFVkJSMVlzVVVGQlYwTXNTMEZCVFVnc1JVRkRaa1VzUjBGQlR5eExRVUZMTEU5QlFVOURMRU5CUVVVc1JVRkJSV2hDTEVOQlFVTXNSVUZCU1dFc1JVRkJXVWNzUTBGQlJTeEZRVU14UTBnc1JVRkJXVWNzUTBGQlJTeEZRVUZKTEVWQlNXaENOME1zUjBGQlUyUXNSVUZCU3pKRExFTkJRVU1zUTBGQlF5eEpRVU5zUW1Vc1IwRkJUekZFTEVWQlFVc3lReXhEUVVGRExFZEJSMllzU1VGQlRXbENMRVZCUVVrc1MwRkJTeXhOUVVGTlJpeERRVUZITEVWQlEzaENTQ3hGUVVGTldpeERRVUZETEVWQlFVbHBRaXhGUVVOWVNpeEZRVUZaWWl4RFFVRkRMRWRCUVV0bExFVkJRVTBzU1VGQlQwVXNSVUZCU1N4TFFVRlJMRWxCUnpORExGRkJRVmRETEV0QlFWRTNSQ3hGUVVOaWNFSXNSMEZCWVN4UlFVRlJhVVlzUTBGQlNTeEZRVUZKYWtZc1IwRkJZU3hSUVVGUkswUXNRMEZCUXl4SFFVTnlSSFJFTEVkQlFWRXNTMEZCU3l4UFFVRlJWeXhGUVVGTk5rUXNSVUZCVFU0c1JVRkJUMW9zUTBGQlF5eERRVWt2UXl4TlFVRlhOMElzUjBGQlUyUXNSVUZCU3pKRExFTkJRVU1zUTBGQlF5eEpRVU42UW1Fc1JVRkJXV0lzUTBGQlF5eEZRVUZKTTBNc1JVRkJTekpETEVOQlFVTXNSMEZOTTBJc1VVRkJWMjFDTEV0QlFVOU9MRVZCUTFwQkxFVkJRVmxOTEVOQlFVY3NTVUZCVFN4SlFVTjJRbEFzUlVGQlRVVXNRMEZCVVN4SFFVTmFTeXhKUVVGUlRDeEZRVUZYUkN4RlFVRlpUU3hEUVVGSExFVkJRVWxPTEVWQlFWbE5MRU5CUVVjc1JVRkJTU3hMUVVGTExFOUJRVTlNTEVOQlFWRXNSVUZCUlVzc1EwRkJSeXhIUVVsNFJpeFBRVUZQYUVZc1IwRkJUU3hMUVVGTkxFTkJRVVVzVDBGQlVYbEZMRU5CUVUwc1JVRkJSeXhGUVVGSkxFVkJRVVVzVlVGQlZTeERRVU40UkN4RFFVOUJMRkZCUVZNc1EwRkRVQ3hIUVVGSkxFTkJRVU1zUzBGQlN5eFJRVUZUTEU5QlFVOHNTMEZETVVJc1NVRkJUVkVzUlVGQlZTeERRVUZETEVWQlEycENMRkZCUVZkd1FpeExRVUZMTEU5QlFVOHNTMEZCU3l4TFFVRkxMRTFCUVUwc1JVRkRja052UWl4RlFVRlJjRUlzUTBGQlF5eEZRVUZKTEV0QlFVc3NUMEZCVDBFc1EwRkJReXhKUVVGTkxFVkJRVWtzUlVGQlNTeERRVUZETEV0QlFVc3NUMEZCVDBFc1EwRkJReXhGUVVWNFJDeFBRVUZQTjBRc1IwRkJUU3hMUVVGTkxFTkJRVVVzVDBGQlVXbEdMRU5CUVZFc1JVRkJSeXhGUVVGSkxFTkJRemxETEVOQlRVRXNTVUZCU1N4UFFVRlJMRU5CUTFZc1QwRkJUeXhMUVVGTExGRkJRVlVzUzBGQlN5eFBRVUZQTEU5QlFWTXNSVUZCU1N4SFFVTnFSQ3hEUVUxQkxFbEJRVWtzVlVGQlZ5eERRVU5pTEU5QlFVOHNTMEZCU3l4UlFVRlZMRXRCUVVzc1QwRkJUeXhWUVVGWkxFVkJRVWtzUjBGRGNFUXNRMEZOUVN4SlFVRkpMRkZCUVZNc1EwRkRXQ3hQUVVGUExFdEJRVXNzVVVGQlZTeExRVUZMTEU5QlFVOHNVVUZCVlN4RlFVRkpMRWRCUTJ4RUxFTkJUVUVzU1VGQlNTeFBRVUZSTEVOQlExWXNUMEZCVHl4TFFVRkxMRkZCUVZVc1MwRkJTeXhQUVVGUExFOUJRVk1zUlVGQlNTeEhRVU5xUkN4RFFVMUJMRWxCUVVrc1RVRkJUeXhEUVVOVUxFOUJRVThzUzBGQlN5eFJRVUZWTEV0QlFVc3NUMEZCVHl4TlFVRlJMRVZCUVVrc1IwRkRhRVFzUTBGTlFTeEpRVUZKTEU5QlFWRXNRMEZEVml4UFFVRlBMRXRCUVVzc1VVRkJWU3hMUVVGTExFOUJRVThzVDBGQlV5eEZRVUZKTEVkQlEycEVMRU5CVFVFc1NVRkJTU3hUUVVGVkxFTkJRMW9zVDBGQlR5eExRVUZMTEZGQlFWVXNTMEZCU3l4UFFVRlBMRk5CUVZjc1JVRkJTU3hIUVVOdVJDeERRVTFCTEVsQlFVa3NVMEZCVlN4RFFVTmFMRTlCUVU4c1MwRkJTeXhSUVVGVkxFdEJRVXNzVDBGQlR5eFRRVUZYTEVWQlFVa3NSMEZEYmtRc1EwRk5RU3hKUVVGSkxHTkJRV1VzUTBGRGFrSXNUMEZCVHl4TFFVRkxMRkZCUVZVc1MwRkJTeXhQUVVGUExHTkJRV2RDTEVWQlFVa3NSMEZEZUVRc1EwRlBRU3hKUVVGSkxGTkJRVlVzUTBGRFdpeFBRVUZQTEV0QlFVc3NWVUZCV1N4SlFVTXhRaXhEUVUxQkxFbEJRVWtzWlVGQlowSXNRMEZEYkVJc1QwRkJUeXhMUVVGTExGRkJRVlVzUzBGQlN5eFJRVUZSTEU5QlFWTXNTVUZET1VNc1EwRk5RU3hKUVVGSkxHOUNRVUZ4UWl4RFFVTjJRaXhQUVVGUExFdEJRVXNzVVVGQlZTeExRVUZMTEZGQlFWRXNXVUZCWXl4SlFVTnVSQ3hEUVZGQkxFOUJRVTlETEVWQlFVOHNRMEZMV2l4SFFVcEpMRU5CUVVNc1MwRkJTeXhUUVVGWExFTkJRVU5CTEVWQlFVMHNVMEZKZUVJc1EwRkJReXhMUVVGTExFbEJRVWtzVDBGQlQwRXNSVUZCVFN4SFFVRkhMRVZCUXpWQ0xFMUJRVThzUjBGSFZDeFRRVUZUUXl4RlFVRkhReXhGUVVGSlF5eEZRVUZKTEVOQlJXeENMRTlCUVVsRUxFbEJRVThzVVVGQllVRXNTVUZCVHl4RlFVRlZReXhKUVVGUExGRkJRV0ZCTEVsQlFVOHNSVUZETjBSRUxFbEJRVTlETEVOQlEyaENMRU5CUlVFc1VVRkJWMklzUzBGQlN6RkZMRWRCUTJRc1IwRkJTU3hEUVVGRGNVWXNSVUZCUnl4TFFVRkxMRTlCUVU5WUxFTkJRVU1zUlVGQlIxVXNSVUZCVFN4UFFVRlBWaXhEUVVGRExFTkJRVU1zUlVGRGNrTXNUVUZCVHl4SFFVZFlMRTFCUVU4c1JVRkRWQ3hEUVVOR0xFVkRPVE5DUVN4SlFVRk5ZeXhIUVVGVkxHMUNRVWRvUWl4VFFVRlRReXhIUVVGcFFrTXNSVUZCVDBNc1JVRkJTeXhEUVVOd1F5eE5RVUZKTEVOQlFVTkVMRWRCUVZNc1EwRkJRMEVzUlVGQlRTeFJRVU5hUlN4SFFVRlRMRkZCUVZFc01FSkJRVEJDTEVWQlEzcERMRU5CUVVORUxFZEJRVThzUTBGQlEwRXNSVUZCU1N4UlFVTm1ReXhIUVVGVExGRkJRVkVzZDBKQlFYZENMRVZCUTNaRFJDeEZRVUZOUkN4RlFVTlNSU3hIUVVGVExGRkJRMlFzYlVKQlEwRXNjVVZCUVhGRlJpeEZRVUZOTEUxQlFVMHNRMEZCUXl4WlFVRlpReXhGUVVGSkxFMUJRVTBzUTBGQlF5eEZRVU16Unl4RlFVVlBMRWxCUlZnc1EwRmpRU3hKUVVGeFFrTXNSMEZCY2tJc1RVRkJjVUpETEVOQlFWTXNRMEZKTlVJc1dVRkJXVU1zUlVGQlVTeERRVWxzUWl4TFFVRkxMRVZCUVVsQkxFVkJRVThzVFVGSmFFSXNTMEZCU3l4RlFVRkpRU3hGUVVGUExFbEJTV2hDTEV0QlFVc3NVVUZCVlVFc1JVRkJUeXhUUVVGWExFdEJTV3BETEV0QlFVc3NaMEpCUVd0Q0xFVkJRM3BDTEVOQlVVRXNUMEZCVHl4UlFVRlJReXhGUVVGUlF5eEZRVUZqTEV0QlFVMHNRMEZEZWtNc1IwRkJTU3hEUVVGRFJDeEZRVU5JTEUxQlFVMHNTVUZCU1VVc1IwRkJjVUlzYTBSQlFXdEVMRVZCUjI1R0xFbEJRVTFETEVWQlFWVklMR0ZCUVd0Q1NTeEhRVUZWU2l4RlFVRlRMRWxCUVVsSkxFZEJRVkZLTEVWQlFWRkRMRU5CUVZjc1JVRkZjRVlzUjBGQlNVa3NSVUZCVXl4bFFVTllMRTFCUVUwc1NVRkJTVU1zUjBGQmNVSklMRU5CUVU4c1JVRkZkRU1zVDBGQlR5eEpRVUZKVEN4RlFVRlRMRU5CUVVVc1VVRkJRVXNzUTBGQlVTeERRVUZETEVOQlJXNURMRU5CVVVFc1QwRkJUeXhqUVVGalVpeEZRVUZQUXl4RlFVRkxMRU5CUXk5Q0xFbEJRVTFYTEVWQlFXRkRMRWRCUVdsQ1lpeERRVUZMTEVWQlEzWkRZeXhGUVVGWFJDeEhRVUZwUWxvc1EwRkJSeXhGUVVVelFtTXNSVUZCWjBKb1FpeEhRVUZwUW1Fc1JVRkJXVVVzUTBGQlVTeEZRVVV6UkN4UFFVRkpReXhIUVVGcFFpeExRVU5hTEVsQlFVbGFMRVZCUVZNc1EwRkRiRUlzVFVGQlQxTXNSVUZEVUN4SlFVRkxSU3hEUVVOUUxFTkJRVU1zUlVGRlRVTXNRMEZGV0N4RFFWRkJMRTlCUVU4c1RVRkJUV1lzUlVGQlQyZENMRVZCUVZVc1EwRkROVUlzU1VGQlRVTXNSVUZCVFVNc1JVRkJVeXhwUWtGQmFVSkdMRU5CUVZFc1JVRkROVU5ITEVWQlFVdE9MRWRCUVdsQ1lpeERRVUZMTEVWQlF6ZENMRTlCUVU5SExFVkJRVk1zWTBGQlkyZENMRVZCUVVsQkxFVkJRVWNzUzBGQlMwWXNRMEZCUnl4RFFVRkRMRU5CUTJoRUxFTkJVVUVzVDBGQlR5eFBRVUZQYUVJc1JVRkJTMlVzUlVGQlZTeERRVU16UWl4SlFVRk5ReXhGUVVGTlF5eEZRVUZUTEdsQ1FVRnBRa1lzUTBGQlVTeEZRVU0xUTBjc1JVRkJTMDRzUjBGQmFVSmFMRU5CUVVjc1JVRkRNMElzVDBGQlQwVXNSVUZCVXl4alFVRmpaMElzUlVGQlJ5eE5RVUZOUml4RFFVRkhMRVZCUVVkRkxFTkJRVVVzUTBGRGFrUXNRMEZWUVN4UFFVRlBMRkZCUVZGRExFVkJRVTFETEVWQlFVMHNRMEZEZWtJc1IwRkJUU3hEUVVGRFF5eEZRVUZIUXl4RFFVRkRMRWRCUVV0SUxFZEJRVkVzU1VGQlNTeE5RVUZOTEVsQlFVc3NRMEZCUXl4RlFVTjRReXhIUVVGSlJTeEhRVUZMUXl4RlFVRkhMRU5CUTFZc1NVRkJTWFpDTEVWQlFVOTNRaXhGUVVOWUxFZEJRVWtzUTBGRFJuaENMRVZCUVZGNVFpeEZRVUZUTEZGQlFWRklMRVZCUVVkRUxFTkJRVWtzUlVGRGFFTkhMRVZCUVdWNFFpeEZRVUZOTEU5QlEzWkNMRTlCUVZOMVFpeEZRVUZITEVOQlExWkRMRVZCUVdVc1JVRkRha0lzUTBGRlFTeEpRVUZKZGtJc1JVRkJTM2xDTEVWQlExUXNSMEZCU1N4RFFVTkdla0lzUlVGQlRYZENMRVZCUVZNc1VVRkJVVVlzUlVGQlIwWXNRMEZCU1N4RlFVTTVRa3NzUlVGQllYcENMRVZCUVVrc1QwRkRia0lzVDBGQlUzTkNMRVZCUVVjc1EwRkRWa2NzUlVGQllTeEZRVU5tTEVOQlJVRXNSMEZCU1VZc1IwRkJaMEpGTEVWQlEyeENMRTlCUVU5MlFpeEZRVUZUTEdOQlFXTklMRVZCUVU5RExFTkJRVWNzUlVGSE1VTXNSMEZCU1hWQ0xFVkJRV01zUTBGRGFFSXNTVUZCVFZBc1JVRkJUVU1zUlVGQlV5eFJRVUZSU3l4RlFVRkhSaXhEUVVGSkxFVkJRM0JETEVkQlFVbEtMRVZCUVVrc1VVRkRUaXhQUVVGUFpDeEZRVUZUTEUxQlFVMUlMRVZCUVU5cFFpeERRVUZITEVOQlJYQkRMRk5CUVZkVExFVkJRVmtzUTBGRGNrSXNTVUZCVFZRc1JVRkJUVU1zUlVGQlV5eFJRVUZSU1N4RlFVRkhSQ3hEUVVGSkxFVkJRM0JETEVkQlFVbEtMRVZCUVVrc1VVRkRUaXhQUVVGUFpDeEZRVUZUTEU5QlFVOUdMRVZCUVV0blFpeERRVUZITEVOQlJXNURMRU5CUTBZc1EwRkRRU3hQUVVGUFpDeEZRVUZUTEZGQlFWRXNZVUZCWXl4alFVRmphVUlzUTBGQlNTd3JRa0ZCSzBJc1EwRkRla1lzUTBGUFFTeFBRVUZQTEZkQlFWZFBMRVZCUVVjc1EwRkRia0lzVDBGQlVVRXNSMEZCUzBFc1JVRkJSU3hwUWtGQmIwSXNSVUZEY2tNc1EwRk5RU3hKUVVGSkxFOUJRVkVzUTBGRFZpeFBRVUZQTEV0QlFVc3NVVUZCVlN4TFFVRkxMRVZCUVVrc1NVRkRha01zUTBGTlFTeEpRVUZKTEV0QlFVMHNRMEZEVWl4UFFVRlBMRXRCUVVzc1VVRkJWU3hMUVVGTExFVkJRVWtzU1VGRGFrTXNRMEZOUVN4SlFVRkpMRk5CUVZVc1EwRkRXaXhQUVVGUExFdEJRVXNzWjBKQlFXdENMRWxCUTJoRExFTkJUVUVzU1VGQlNTeGxRVUZuUWl4RFFVTnNRaXhQUVVGUExFdEJRVXNzVVVGQlZTeExRVUZMTEZGQlFWRXNUMEZCVXl4SlFVTTVReXhEUVUxQkxFbEJRVWtzYjBKQlFYRkNMRU5CUTNaQ0xFOUJRVThzUzBGQlN5eFJRVUZWTEV0QlFVc3NVVUZCVVN4WlFVRmpMRWxCUTI1RUxFTkJUMEVzVDBGQlQwTXNSVUZCVHl4bFFVRm5RaXhEUVVNMVFpeFBRVUZQTEV0QlFVc3NVVUZCVlN4TFFVRkxMRmRCUVdWQkxFTkJRVXNzUlVGQlJTeEpRVUZKUVN4RFFVRkpMRVZCUVVrc1IwRkRMMFFzUTBGVFFTeE5RVUZOUVN4RlFVRlBMR1ZCUVdkQ0xFTkJRek5DTEVkQlFVa3NRMEZCUXl4TFFVRkxMRkZCUVZNc1RVRkJUeXhMUVVNeFFpeEpRVUZOTlVJc1JVRkJVU3hMUVVGTExFMUJRVTBzVVVGQlVUUkNMRU5CUVVrc1JVRkRia016UWl4RlFVRk5MRXRCUVVzc1NVRkJTU3hSUVVGUk1rSXNRMEZCU1N4RlFVTTNRaXhQUVVGUExFdEJRVXNzVFVGQlRUTkNMRVZCUVVrc1MwRkJTMFFzUlVGQlR6UkNMRU5CUVVrc1JVRkJSU3hKUVVGSlFTeERRVUZKTEVOQlFVTXNSVUZCU1N4RFFVTjJSQ3hEUVU5QkxGRkJRVkZCTEVWQlFVMHNRMEZEV2l4UFFVRlBMRXRCUVVzc1VVRkJWU3hMUVVGTExGRkJRVkVzUjBGQlN5eExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRMRVZCUVVVc1VVRkJVU3hMUVVGTExFVkJRVWRCTEVOQlFVa3NSVUZCU1N4RlFVTnNSaXhEUVUxQkxGTkJRVlVzUTBGRFVpeFBRVUZQTEV0QlFVc3NSVUZCUlN4UlFVRlJMRWxCUVUwc1MwRkJTeXhGUVVGRkxGRkJRVkVzUTBGRE4wTXNRMEZQUVN4UlFVRlJReXhGUVVGVkxFTkJRMmhDTEU5QlFVc3NTMEZCU3l4UlFVTklMRXRCUVVzc1JVRkJTVUVzUlVGRVZTeEZRVVUxUWl4RFFVOUJMRk5CUVZOQkxFVkJRVlVzUTBGRGFrSXNUMEZCU3l4TFFVRkxMRkZCUTBnc1MwRkJTeXhIUVVGTFFTeEZRVVJUTEVWQlJUVkNMRU5CVDBFc1UwRkJVMEVzUlVGQlZTeERRVU5xUWl4UFFVRkxMRXRCUVVzc1VVRkRTQ3hMUVVGTExFZEJRVXRCTEVkQlFWa3NTMEZCU3l4RlFVRkpRU3hGUVVSYUxFVkJSVFZDTEVOQlUwRXNTVUZCU1N4RFFVRkZMRTFCUVVFM1FpeEZRVUZQTEVsQlFVRkRMRU5CUVVrc1JVRkJTU3hEUVVGRExFVkJRVWNzUTBGRGRrSXNUMEZCU3l4TFFVRkxMRkZCUTBoRkxFVkJRVk1zWTBGQlkwZ3NSMEZCVXl4TFFVRkxMRVZCUVVkRExFZEJRVThzUzBGQlN5eERRVUZETEVWQlJHeERMRWxCUlRWQ0xFTkJUMEVzVjBGQlZ6WkNMRVZCUVZjc1EwRkRjRUlzUjBGQlNTeERRVUZETEV0QlFVc3NVVUZCVXl4TlFVRlBMRU5CUVVNc1JVRkRNMElzU1VGQlRVTXNSVUZCVTBRc1JVRkRWaXhKUVVGSmFrSXNSVUZCWjBJc1JVRkRjRUlzVDBGQlVXMUNMRWRCUVUwc1MwRkJTeXhUUVVGVFFTeERRVUZETEVOQlFVTXNSVUZET1VJc1MwRkJTeXhGUVVOU1F5eEZRVUZWTEVOQlFVTXNSVUZEVkN4RFFVRkZMRU5CUVVVc1JVRkJTU3hMUVVOV0xFVkJRVWtzUlVGRlRpeExRVUZQTEVWQlFVa3NTMEZCU3l4SFFVRkhMRU5CUTJwQ0xFbEJRVTFETEVWQlFWRklMRVZCUVU4c1EwRkJReXhIUVVGTExFdEJRVXNzUlVGRE9VSkpMRVZCUVU4c1EwRkJRMFFzUlVGQlVTeERRVUZETEV0QlFVc3NSVUZCU1N4TFFVRkxMRVZCUVVsQkxFVkJRM0pEUkN4RlFVRlJMRXRCUVVzNVFpeEZRVUZUTEdOQlFXTXNSVUZCUjJkRExFTkJRVWtzUTBGQlF5eEZRVU0xUXl4RlFVRkpRU3hGUVVOS0xFZEJRVXNzUTBGRFVDeERRVVZCTEU5QlFVOUdMRU5CUTFRc1EwRlJRU3hSUVVGUmFrSXNSVUZCVlN4RFFVTm9RaXhKUVVGTlF5eEZRVUZOUXl4RlFVRlRMR2xDUVVGcFFrWXNRMEZCVVN4RlFVVTVReXhIUVVGSkxFTkJRVU1zUzBGQlN5eFRRVUZYTEVOQlFVTkRMRVZCUVVrc1UwRkJWMEVzUlVGQlNTeEhRVUZITEdOQlFXTXNTVUZCVFN4RlFVTTVSQ3hOUVVGUExFTkJRVU1zUlVGSFZpeEhRVUZKTEVOQlFVVXNSVUZCUVVzc1EwRkJSU3hGUVVGSkxFdEJRMVpqTEVWQlFVMHNSVUZEVGtRc1JVRkZTVVlzUlVGQlZTeERRVUZETEVWQlEycENMRXRCUVU5WUxFVkJRVWtzUzBGQlN5eEhRVUZITEVOQlEycENMRWxCUVUxWkxFVkJRVkVzUzBGQlN5eE5RVUZOTEV0QlFVdHFRaXhGUVVGSkxGTkJRVlZ2UWl4SFFVRk5RU3hGUVVGSlJDeERRVUZITEVOQlFVTXNSVUZETVVSRUxFVkJRVThzUTBGQlEwUXNSVUZCVVN4RFFVRkRMRXRCUVVzc1JVRkJTU3hMUVVGTExFVkJRVWxCTEVWQlEyNURSQ3hGUVVGUkxFdEJRVXM1UWl4RlFVRlRMR05CUVdOdFFpeEZRVUZIWVN4RFFVRkpMRU5CUVVNc1JVRkROVU5pTEVWQlFVbGhMRVZCUTBwRExFZEJRVThzUTBGRFZDeERRVVZCTEU5QlFVOUlMRU5CUTFRc1EwRlBRU3hqUVVGalN5eEZRVUZsTEVOQlF6TkNMRTlCUVVzc1MwRkJTeXhSUVVOSUxFdEJRVXNzVVVGQlVTeExRVUZMTEU5QlFVOHNSVUZCU1VFc1EwRkJZU3hGUVVGRkxFMUJRVTBzUlVGQlIwRXNRMEZCWVN4RlFVUXZReXhEUVVGRExFTkJSVGRDTEVOQlQwRXNVMEZCVTBNc1JVRkJUeXhEUVVOa0xFOUJRVThzUzBGQlN5eEZRVUZKUVN4RlFVRk5MRWRCUVVzc1MwRkJTeXhGUVVGSlFTeEZRVUZOTEVOQlF6VkRMRU5CVDBFc1YwRkJWMEVzUlVGQlR5eERRVU5vUWl4UFFVRkxMRXRCUVVzc1VVRkRTQ3hEUVVGRExFdEJRVXNzUjBGQlRTeERRVUZEUVN4RlFVRk5MRVZCUkVFc1JVRkZOVUlzUTBGUFFTeFRRVUZUUVN4RlFVRlBMRU5CUTJRc1QwRkJTeXhMUVVGTExGRkJRMGdzUTBGQlEwRXNSVUZCVFN4SFFVRk5MRU5CUVVNc1MwRkJTeXhGUVVSQkxFVkJSVFZDTEVOQlQwRXNVVUZCVVVFc1JVRkJUeXhEUVVOaUxFOUJRVXNzUzBGQlN5eFJRVU5JTEV0QlFVc3NSMEZCUzBFc1JVRkJUU3hIUVVGTExFdEJRVXNzUjBGQlMwRXNSVUZCVFN4RlFVUnNRaXhGUVVVMVFpeERRVTlCTEU5QlFVOUJMRVZCUVU4c1EwRkRXaXhOUVVGSkxFTkJRVU1zUzBGQlN5eFRRVUZYTEVOQlFVTkJMRVZCUVUwc1VVRkRia0lzUjBGSFJpeExRVUZMTEVWQlFVVXNUMEZCVDBFc1JVRkJUU3hEUVVGRExFZEJRVXNzUzBGQlN5eEZRVUZGTEU5QlFVOUJMRVZCUVUwc1EwRkJReXhEUVVONFJDeERRVk5CTEdGQlFXRkJMRVZCUVU4c1EwRkRiRUlzUjBGQlNTeERRVUZETEV0QlFVc3NVVUZCVXl4UFFVRlBMRXRCUXpGQ0xFbEJRVTFxUWl4RlFVRkpMRXRCUVVzc1JVRkJTV2xDTEVWQlFVMHNSVUZCU1N4TFFVRkxMRVZCUVVsQkxFVkJRVTBzUlVGRE1VTm9RaXhGUVVGSkxFdEJRVXNzUlVGQlNXZENMRVZCUVUwc1JVRkJTU3hMUVVGTExFVkJRVWxCTEVWQlFVMHNSVUZGZUVNc1QwRkJTV3BDTEVkQlFVdERMRVZCUTBFc1MwRkZRWEJDTEVWQlFWTXNZMEZCWTIxQ0xFVkJRVWRETEVOQlFVTXNRMEZGZEVNc1EwRlJRU3hOUVVGTlowSXNSVUZCVHl4RFFVTllMRWRCUVVrc1EwRkJReXhMUVVGTExGRkJRVk1zVDBGQlR5eExRVU14UWl4SlFVRk5ha0lzUlVGQlNTeExRVUZMTEVWQlFVbHBRaXhGUVVGTkxFVkJRVWtzUzBGQlN5eEZRVUZKUVN4RlFVRk5MRVZCUXpGRGFFSXNSVUZCU1N4TFFVRkxMRVZCUVVsblFpeEZRVUZOTEVWQlFVa3NTMEZCU3l4RlFVRkpRU3hGUVVGTkxFVkJRM2hETEU5QlFVOXdReXhGUVVGVExHTkJRV050UWl4RlFVRkhReXhEUVVGRExFTkJRM0JETEVOQlVVRXNUMEZCVHl4TlFVRk5hVUlzUlVGQlZ5eERRVU4wUWl4SFFVRk5MRU5CUVVORExFVkJRVTlETEVOQlFVc3NSVUZCU1VZc1JVRkRjRUlzUzBGQlN5eERRVUZEUnl4RlFVRkhReXhKUVVGTlJDeEZRVUZGTEVWQlFVbERMRVZCUVVVc1EwRkJReXhGUVVONFFpeFBRVU5ETEVOQlFVTXNRMEZCUTBNc1JVRkJUME1zUTBGQlR5eEZRVUZIUXl4SlFVTmFSQ3hGUVVWTlFTeEZRVUZSTEZOQlFWTkRMRU5CUVVrc1IwRkJTMFFzUlVGQlVTeFhRVUZYUXl4RFFVRkpMRVZCUTI1RUxFTkJRVU5HTEVWQlFVOURMRVZCUVZFc1RVRkJUVU1zUTBGQlNTeERRVUZETEVWQlJUTkNMRU5CUVVOR0xFVkJRVTBzVDBGQlR5eERRVUZEUXl4RFFVRlBMRU5CUVVNc1JVRkJSME1zUTBGQlNTeEZRVW81UWl4RFFVRkRSaXhGUVVGUFJTeERRVUZKTEVWQlQzWkNMRU5CUVVNc1EwRkJReXhGUVVGSExFbEJRVWtzUTBGRFdDeEZRVU5HTEU5QlFVbE1MRWRCUTBaRUxFVkJRVTBzUzBGQlMwTXNRMEZCU3l4RlFVVllSQ3hEUVVOVUxFTkJUMEVzVDBGQlR5eEpRVUZKUkN4RlFVRlhMRU5CUTNCQ0xFbEJRVWw0UXl4RlFVRlJMRXRCUTFablJDeEZRVUZsTEVWQlExaG1MRVZCUVZVc1EwRkJReXhGUVVObVowSXNSVUZCVDFRc1JVRkJWU3hKUVVGTFZTeEhRVUZOTEVOQlF6RkNMRU5CUVVVc1MwRkJUVUVzUlVGQlJTeEZRVUZITEV0QlFVMHNSMEZCU1N4RlFVTjJRaXhEUVVGRkxFdEJRVTFCTEVWQlFVVXNSVUZCUnl4TFFVRk5MRWRCUVVrc1EwRkRla0lzUTBGQlF5eEZRVU5FUXl4RlFVRlpMRTFCUVUwc1ZVRkJWU3hQUVVGUExFZEJRVWRHTEVOQlFVa3NSVUZETVVOSExFVkJRVTFFTEVWQlFWVXNTMEZCU3l4RFFVRkRVaXhGUVVGSFF5eEpRVUZOUkN4RlFVRkZMRXRCUVU5RExFVkJRVVVzU1VGQlNTeEZRVVZvUkN4UlFVRlhUU3hMUVVGTFJTeEZRVU5rU2l4SFFVRm5Ra1VzUlVGQlJTeFBRVUZUTEVsQlFVMHNSVUZCU1N4SFFVVnFRMFlzU1VGQmFVSXNSVUZEYmtKb1JDeEZRVUZSYTBRc1JVRkJSU3hOUVVWT2JFUXNSMEZCVXl4RFFVRkRRU3hIUVVGVkxFTkJRVU5yUkN4RlFVRkZMRTFCUTNwQ2FrSXNSVUZCVVN4TFFVRkxPVUlzUlVGQlV5eGpRVUZqU0N4RlFVRlBhMFFzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZIY0VSc1JDeEZRVUZSTEUxQlNWb3NUMEZCVDBjc1JVRkJVeXhOUVVGTk9FSXNRMEZCVHl4RFFVTXZRaXhEUVU5QkxHTkJRV05QTEVWQlFWY3NRMEZEZGtJc1QwRkJUM0pETEVWQlFWTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hQUVVGUGNVTXNRMEZCVXl4RFFVRkRMRVZCUTNwRExFbEJRVXRWTEVkQlFVMHNTMEZCU3l4aFFVRmhRU3hEUVVGRExFTkJRVU1zUlVGREwwSXNUMEZCVVVFc1IwRkJUVUVzUjBGQlN5eERRVUZEUVN4RlFVRkZMRkZCUVZFc1EwRkJReXhEUVVOd1F5eERRVTFCTEZWQlFWY3NRMEZEVkN4UFFVRkxMRXRCUVVzc1VVRkRTQ3hKUVVGSkxFdEJRVXNzUlVGQlJTeE5RVUZOTEVOQlFVTXNWMEZCVFN4TFFVRkxMRVZCUVVVc1RVRkJUU3hEUVVGRExFbEJSRzVDY0VRc1JVRkZOVUlzUTBGUlFTeE5RVUZOZFVJc1JVRkJUU3hEUVVOV0xFOUJRVXNzUzBGQlN5eFJRVU5JTEVkQlFVY3NTMEZCU3l4RlFVRkZMRTFCUVUxQkxFTkJRVWtzUTBGQlF5eEpRVUZKTEV0QlFVc3NSVUZCUlN4TlFVRk5RU3hEUVVGSkxFTkJRVU1zUjBGRWVFSjJRaXhGUVVVMVFpeERRVkZCTEZkQlFWa3NRMEZEVml4UFFVRkxMRXRCUVVzc1VVRkRTQ3hIUVVGSExFdEJRVXNzUlVGQlJTeFZRVUZWTEVOQlFVTXNTVUZCU1N4TFFVRkxMRVZCUVVVc1ZVRkJWU3hEUVVGRExFZEJSSGhDUVN4RlFVVTFRaXhEUVZOQkxGVkJRVlYxUWl4RlFVRk5MRU5CUTJRc1QwRkJTeXhMUVVGTExGRkJRMGdzUjBGQlJ5eExRVUZMTEVWQlFVVXNWVUZCVlVFc1EwRkJTU3hEUVVGRExFbEJRVWtzUzBGQlN5eEZRVUZGTEZWQlFWVkJMRU5CUVVrc1EwRkJReXhIUVVSb1EzWkNMRVZCUlRWQ0xFTkJVMEVzVTBGQlUzVkVMRVZCUVZrc1EwRkJSU3hWUVVGQlF5eEZRVUZaTEZWQlFVMHNSVUZCU1N4RFFVRkRMRVZCUVVjc1EwRkRMME1zVDBGQlN5eExRVUZMTEZGQlEwZ3NSMEZCUnl4TFFVRkxMRVZCUVVVc1UwRkJVMFFzUTBGQlZTeERRVUZETEVkQlFVZERMRU5CUVZNc1IwRkJSeXhMUVVGTExFVkJRVVVzVTBGQlUwUXNRMEZCVlN4RFFVRkRMRWRCUkhKRWRrUXNSVUZGTlVJc1EwRmpRU3hYUVVGWE9FSXNSVUZCVFZBc1JVRkJUU3hEUVVOeVFpeFBRVUZMTEV0QlFVc3NVVUZIU0N4TFFVRkxMRVZCUVVVc1MwRkJTeXhMUVVGTExFVkJRVWRQTEVWQlFVMVFMRU5CUVVrc1JVRkdOVUpJTEVWQlFWTXNVVUZCVVN4TFFVRkxMR0ZCUVdFc1EwRkhPVU1zUTBGVFFTeGhRVUZoY1VNc1JVRkJUeXhEUVVOc1FpeFBRVUZQY0VRc1JVRkJVeXhqUVVGamIwUXNSVUZCVFN4TFFVRkxMRU5CUVVNc1JVRkJSMEVzUlVGQlRTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVTTFSQ3hEUVVOR0xFVkRibXhDUVN4SlFVRnhRa01zUjBGQmNrSXNTMEZCTUVJc1EwRk5lRUlzVDBGQlR5eFBRVUZQUXl4RlFVRlBReXhGUVVGVExGbEJRV0VzUTBGRGVrTXNTVUZCVFVNc1JVRkJVVU1zUlVGQlV5eEpRVUZKTEVWQlFVVXNVVUZCVVVnc1EwRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlJTeE5RVUZQTEVWQlFVY3NRMEZCUXl4RlFVVTFSQ3hOUVVGUExFTkJRVU5CTEVWQlFVc3NZVUZCWlVVc1JVRkJUU3hUUVVGWFFTeEZRVUZOTEVsQlFVa3NRMEZCUlN4TlFVRlBMRU5CUVVVc1EwRkJReXhGUVVGRkxFMUJRM1pGTEVOQlQwRXNUMEZCVHl4blFrRkJaMEpHTEVWQlFVMHNRMEZETTBJc1QwRkJUMGtzUjBGQlV5eFpRVUZaU2l4RFFVRkpMRU5CUTJ4RExFTkJaMEpCTEU5QlFVOHNZMEZCWTBzc1JVRkJUeXhEUVVNeFFpeFBRVUZQUXl4SFFVRmpSQ3hGUVVGUFNpeEZRVUZUTEZkQlFWY3NRMEZEYkVRc1EwRnRRa0VzVDBGQlR5eFBRVU5NVFN4RlFVRlRMRTlCUTFRc1EwRkJSU3hQUVVGQlF5eEZRVUZUTEV0QlFVMHNaMEpCUVVGRExFVkJRV3RDTEV0QlFVMHNUMEZCUVVNc1JVRkJVeXhMUVVGTkxHVkJRVUZETEVWQlFXbENMRk5CUVZVc1JVRkJTU3hEUVVGRExFVkJRM2hHTEVOQlEwRXNUMEZCVVVRc1IwRkJWVVVzUjBGQlR5eFBRVUZQU2l4RlFVRlJReXhGUVVGcFFrVXNRMEZCWXl4SFFVRkhMRTlCUVU5S0xFTkJRVTBzUTBGRGVrWXNRMEZsUVN4UFFVRlBMR0ZCUTB4QkxFVkJRVk1zVDBGRFZDeERRVUZGTEU5QlFVRkRMRVZCUVZNc1MwRkJUU3huUWtGQlFVTXNSVUZCYTBJc1MwRkJUU3hQUVVGQlF5eEZRVUZUTEV0QlFVMHNaVUZCUVVNc1JVRkJhVUlzVTBGQlZTeEZRVUZKTEVOQlFVTXNSVUZEZUVZc1EwRkRRU3hQUVVGUlJDeEhRVUZWUlN4SFFVRlBMRTlCUVU5S0xFVkJRVkZETEVWQlFXbENSU3hEUVVGakxFZEJRVWNzVDBGQlQwb3NSVUZCVVN4RlFVRkpMRU5CUXk5R0xFTkJaMEpCTEU5QlFVOHNVMEZCVTBFc1JVRkJVeXhQUVVGUkxFTkJRVVVzVDBGQlFVTXNSVUZCVXl4TFFVRk5MR2RDUVVGQlF5eEZRVUZyUWl4TFFVRk5MRTlCUVVGRExFVkJRVk1zU1VGQlN5eEZRVUZKTEVOQlFVTXNSVUZCUnl4RFFVTTVSaXhQUVVGUlFTeEhRVUZWUlN4SFFVRlBMRTlCUVU5S0xFVkJRVkZETEVWQlFXbENMRWxCUVVrc1IwRkJSeXhUUVVGVFJpeERRVUZOTEVOQlEycEdMRU5CWTBFc1QwRkJUeXhsUVVOTVFTeEZRVUZUTEU5QlExUXNRMEZCUlN4UFFVRkJReXhGUVVGVExFdEJRVTBzWjBKQlFVRkRMRVZCUVd0Q0xFdEJRVTBzVDBGQlFVTXNSVUZCVXl4SlFVRkxMRVZCUVVrc1EwRkJReXhGUVVNMVJDeERRVU5CTEU5QlFWRkJMRWRCUVZWRkxFZEJRVThzVDBGQlQwb3NSVUZCVVVNc1JVRkJhVUlzU1VGQlNTeEhRVUZITEZOQlFWTkdMRVZCUVZFc1JVRkJTU3hEUVVOMlJpeERRVlZCTEU5QlFVOHNWVUZCVlN4RFFVRkZMRTlCUVVGRExFVkJRVk1zU1VGQlN5eEZRVUZKTEVOQlFVTXNSVUZCUnl4RFFVTjJReXhQUVVGUFNTeEhRVUZQTEU5QlFVOUtMRU5CUVUwc1JVRkJSU3hWUVVGVkxFTkJRM3BETEVOQldVRXNUMEZCVHl4TFFVRkxSQ3hGUVVGVExGRkJRVk1zUTBGQlJTeFBRVUZCUXl4RlFVRlRMRWxCUVVzc1JVRkJTU3hEUVVGRExFVkJRVWNzUTBGRGNFUXNUMEZCVDBrc1IwRkJUeXhQUVVGUFNpeEZRVUZSTEV0QlFVMHNVMEZCVXl4RlFVRkZMRXRCUVV0RUxFTkJRVTBzUTBGRE0wUXNRMEZWUVN4UFFVRlBMRlZCUVZjc1EwRkRhRUlzVFVGQlR5eERRVUZGTEZOQlFWVk5MRWRCUVZrc1EwRkJSU3hEUVVOdVF5eERRVU5HTEVWRGRFdEJMRk5CUVZORExFZEJRVkZETEVWQlFWTkRMRVZCUVU4c1EwRkRMMElzU1VGQlRVTXNSVUZCWlVNc1IwRkJUMEVzUlVGQlJ5eE5RVUZOTEVWQlFVY3NRMEZCUlN4alFVRmxMRVZCUVVzc1EwRkJReXhGUVVGRkxGRkJRVkVzUzBGQlN5eEZRVUZGTEZGQlFWRXNSVUZEZEVaRExFVkJRVXRHTEVWQlFWbEVMRU5CUVVzc1JVRkJTVU1zUlVGQldVWXNRMEZCVHl4RlFVTXZReXhQUVVGUExFdEJRVXNzVFVGQlRVc3NSVUZCVXl4WFFVRlhSQ3hEUVVGRkxFVkJRVVVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZEZEVRc1EwRkZRU3hUUVVGVFJTeEhRVUZsUXl4RlFVRlJUaXhGUVVGUFR5eEZRVUZQTEVOQlF6VkRMRWxCUVUxRExFVkJRVlVzUTBGRFpDeERRVUZETEZGQlFWTXNRMEZCUXl4RlFVRkhReXhKUVVGTlFTeEZRVUZGTEV0QlFVOHNSVUZCUlN4SlFVRkpMRVZCUTI1RExFTkJRVU1zVjBGQldTeERRVUZETEVWQlFVZEJMRWxCUVUxQkxFVkJRVVVzVVVGQlZTeEZRVUZGTEU5QlFVOHNSVUZETlVNc1EwRkJReXhUUVVGVkxFTkJRVU1zUlVGQlIwRXNTVUZCVFVFc1JVRkJSU3hOUVVGUkxFVkJRVVVzVDBGQlUwRXNSVUZCUlN4TFFVRlBMRVZCUVVVc1RVRkJVU3hGUVVGRkxFVkJReTlFTEVOQlEwVXNVVUZEUVN4RFFVRkRMRVZCUVVkQkxFbEJRVTBzUTBGRFVpeEpRVUZOUXl4RlFVRlBXaXhIUVVGUkxFVkJRVWRYTEVOQlFVTXNSVUZEZWtJc1QwRkJVVU1zUlVGQlVVRXNSVUZCVHl4SFFVRk5MRU5CUXk5Q0xFTkJRMFlzUlVGRFFTeERRVUZETEU5QlFWRmFMRVZCUVU4c1EwRkRiRUlzUlVGRlRXRXNSVUZCVlN4RFFVRkRMRVZCUTJKRExFVkJRV0ZETEVWQlJXcENMRTlCUVZjc1EwRkJRME1zUlVGQlRVTXNRMEZCVFN4SlFVRkxVQ3hGUVVNelFpeEhRVUZKUkN4RlFVRk5MRkZCUVZGUExFTkJRVWtzUjBGQlN5eEZRVUZITEVOQlF6VkNSaXhGUVVGalJTeEZRVVZrTEVsQlFVbEZMRVZCUVZGRUxFVkJRVTlVTEVWQlFWRk9MRU5CUVVzc1JVRkRhRU5oTEVWQlFWbFFMRVZCUVU4c1MwRkJTeXhEUVVGRkxFTkJRVU5STEVOQlFVa3NSVUZCUjBVc1EwRkJUU3hEUVVGRExFVkJSWEpEU0N4RlFVRlpZaXhIUVVOa1RTeEZRVUZUUVN4RlFVRlBMRXRCUVVzc1EwRkJSU3hEUVVGRFVTeERRVUZKTEVWQlFVZEZMRVZCUVZFc1EwRkJSU3hEUVVGRExFVkJRekZEUVN4SFFVRlRMRWRCUlZSV0xFVkJRVk5QTEVWQlIxaEdMRVZCUVZGSExFTkJRVWtzUlVGQlNVVXNRMEZEYkVJc1EwRkhSaXhOUVVGUExFTkJRVU5XTEVWQlFWRkxMRVZCUVZORkxFVkJRVmRFTEVOQlFWY3NRMEZEYWtRc1EwRkZaU3hUUVVGU1N5eEhRVUZyUW14Q0xFVkJRVk5ETEVWQlFVOVBMRVZCUVU5WExFVkJRVTBzUTBGRGNFUXNSMEZCU1N4RFFVRkRXaXhGUVVGUlN5eEZRVUZUUlN4RlFVRlhSQ3hEUVVGWExFVkJRVWxRTEVkQlFXVk9MRVZCUVZORExFVkJRVTlQTEVOQlFVc3NSVUZGT1VWWkxFVkJRV3RDYmtJc1JVRkJVVTBzUlVGRk1VSmpMRVZCUVd0Q1lpeEZRVUZOTEU5QlF6TkNZeXhIUVVGTkxFTkJRVU1zVVVGQlV5eFZRVUZYTEZWQlFWY3NZMEZCWXl4RlFVRkZMRkZCUVZGQkxFTkJRVU1zUjBGQlN5eERRVU4yUlN4RlFVVkpSQ3hGUVVGblFpeFRRVUZYTEVsQlEzcENVQ3hGUVVGWllpeEpRVU5rWVN4RlFVRlpVQ3hGUVVGUExFdEJRVXNzUTBGQlJTeERRVUZEVFN4RFFVRlhMRVZCUVVjc1EwRkJSU3hEUVVGRExFZEJSekZEUXl4SlFVRmpVQ3hKUVVOb1Frc3NSVUZCVVVNc1EwRkJWeXhIUVVGTFJDeEZRVUZSUXl4RFFVRlhMRWRCUVVzc1IwRkJTMDhzUjBGQmJVSk9MRVZCUVZsUUxFdEJTWGhHTEVsQlFVMW5RaXhGUVVGWGJFSXNSVUZCVXl4WFFVRlhUeXhGUVVGVFR5eERRVUZKTEVWQlJXeEVMRTlCUVVsRkxFVkJRV2RDTEU5QlFWTXNSVUZEY0VKb1FpeEZRVUZUTEZkQlFWZGxMRVZCUVdsQ1JDeERRVUZKTEVWQlF6ZERMRkZCUVZFc1IwRkJSMFVzUTBGQlpTeEZRVU14UWl4TFFVRkxSU3hEUVVGUkxFVkJSVlJCTEVOQlJWZ3NRME16UlVFc1NVRkJUVU1zUjBGQmJVSXNRMEZEZGtJc1MwRkJUU3hyUWtGRFRpeFJRVUZUTEd0Q1FVTlVMRXRCUVUwc2EwSkJRMDRzUzBGQlRTeHJRa0ZEVGl4TFFVRk5MR3RDUVVOT0xGTkJRVlVzYTBKQlExWXNTMEZCVFN4clFrRkRUaXhSUVVGVExEQkZRVU5VTEV0QlFVMHNhMEpCUTA0c1MwRkJUU3hyUWtGRFRpeExRVUZOTEd0Q1FVTk9MRXRCUVUwc2EwSkJRMDRzUzBGQlRTeHJRa0ZEVGl4TFFVRk5MR3RDUVVOT0xFdEJRVTBzYTBKQlEwNHNTMEZCVFN4clFrRkRUaXhSUVVGVExHdENRVU5VTEV0QlFVMHNhMEpCUTA0c1MwRkJUU3hyUWtGRFRpeExRVUZOTEd0Q1FVTk9MRXRCUVUwc1MwRkRVaXhGUVVWTlF5eEhRVUYzUWl4RFFVTTFRaXhMUVVGTkxFTkJRVU1zUzBGQlRTeEpRVUZKTEVWQlEycENMRkZCUVZNc1EwRkJReXhMUVVGTkxFbEJRVWtzUlVGRGNFSXNTMEZCVFN4RFFVRkRMRXRCUVUwc1NVRkJTU3hGUVVOcVFpeExRVUZOTEVOQlFVTXNTMEZCVFN4SlFVRkpMRVZCUTJwQ0xFdEJRVTBzUTBGQlF5eExRVUZOTEVsQlFVa3NSVUZEYWtJc1UwRkJWU3hEUVVGRExFMUJRVThzUzBGQlN5eEZRVU4yUWl4TFFVRk5MRU5CUVVNc1MwRkJUU3hKUVVGSkxFVkJRMnBDTEV0QlFVMHNRMEZCUXl4TFFVRk5MRWxCUVVrc1JVRkRha0lzUzBGQlRTeERRVUZETEV0QlFVMHNTVUZCU1N4RlFVTnFRaXhMUVVGTkxFTkJRVU1zUzBGQlRTeEpRVUZKTEVWQlEycENMRXRCUVUwc1EwRkJReXhMUVVGTkxFbEJRVWtzUlVGRGFrSXNTMEZCVFN4RFFVRkRMRXRCUVUwc1NVRkJTU3hGUVVOcVFpeExRVUZOTEVOQlFVTXNTMEZCVFN4SlFVRkpMRVZCUTJwQ0xFdEJRVTBzUTBGQlF5eExRVUZOTEVsQlFVa3NSVUZEYWtJc1MwRkJUU3hEUVVGRExFdEJRVTBzU1VGQlNTeEZRVU5xUWl4UlFVRlRMRU5CUVVNc1MwRkJUU3hKUVVGSkxFVkJRM0JDTEV0QlFVMHNRMEZCUXl4TFFVRk5MRWxCUVVrc1JVRkRha0lzUzBGQlRTeERRVUZETEV0QlFVMHNTVUZCU1N4RlFVTnFRaXhMUVVGTkxFTkJRVU1zUzBGQlRTeEpRVUZKTEVOQlEyNUNMRVZCUlUxRExFZEJRV1ZHTEVkQlFXbENMRkZCUVZFc1VVRkJVU3hYUVVGWkxFVkJRVVVzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZGZGtVc1UwRkJVMGNzUjBGQldVTXNSVUZCU3l4RFFVTXZRaXhKUVVGSlF5eEZRVUZSTEZOQlFWTkVMRVZCUVVzc1JVRkJSU3hGUVVNMVFpeEhRVUZKTEUxQlFVMURMRU5CUVVzc1JVRkJSeXhEUVVOb1FrRXNSVUZCVVN4SFFVTlNMRkZCUVZORExFVkJRVWtzUlVGQlIwRXNSVUZCU1VZc1JVRkJTU3hQUVVGUlJTeEpRVUZMTEVOQlEyNURMRWxCUVUxRExFVkJRVTlJTEVWQlFVa3NWMEZCVjBVc1EwRkJReXhGUVVVM1FpeEhRVUZKUml4RlFVRkpSU3hEUVVGRExFVkJRVVVzVDBGQlQwNHNSMEZCYVVJc1QwRkJUeXhKUVVGTkxFZEJRemxEU3l4SFFVRlRTQ3hIUVVGaExGRkJRVkZGTEVWQlFVbEZMRU5CUVVNc1EwRkJReXhOUVVWd1F5eFRRVUZYUlN4TFFVRlBVQ3hIUVVGMVFpeERRVU4yUXl4SFFVRk5MRU5CUVVOUkxFVkJRVXRETEVOQlFVY3NSVUZCU1ZRc1IwRkJjMEpQTEVOQlFVY3NSVUZEZUVORUxFZEJRVkZGTEVkQlFVOUdMRWRCUVZGSExFbEJRM3BDVEN4SFFVRlRSU3hGUVVGUFJTeEZRVVZ3UWl4RFFVVktMRU5CUTBFc1QwRkJUeXhUUVVGVFNpeEZRVUZQTEVWQlFVVXNRMEZETTBJc1MwRkRSU3hSUVVGUFFTeERRVVZZTEVOQlJVOHNVMEZCVTAwc1IwRkJWeXhEUVVGRkxHZENRVUZCUXl4RFFVRm5RaXhGUVVGSFF5eEZRVUZUTEVkQlFVa3NRMEZETTBRc1QwRkJUeXhKUVVGSkxFOUJRVThzUjBGQlIySXNSMEZCYVVKWkxFZEJRVzFDTEUxQlFVMHNRMEZCUXl4SFFVRkhReXhEUVVGTkxFVkJRVVVzUTBGRE4wVXNRME5zUlVFc1NVRkJUVU1zUjBGQll5eHZSRUZGY0VJc1UwRkJVME1zUlVGQlVVTXNSVUZCVDBNc1JVRkJVVU1zUjBGQlRVRXNSVUZCUnl4RFFVTjJReXhOUVVGUExFTkJRVVVzVFVGQlFVWXNSVUZCVHl4TlFVRlBMRU5CUVVNc1EwRkJRMGNzUTBGQlF5eEpRVUZOUml4RlFVRkxSeXhIUVVGWlJDeERRVUZETEVOQlFVTXNRMEZCUlN4RFFVTjJSQ3hEUVVWQkxFbEJRVTFGTEVkQlFVOHNUMEZEVUVNc1IwRkJZeXhMUVVGTFJDeEZRVUZKTEVsQlEzWkNSU3hIUVVGdlFpeEpRVUZKTEU5QlFVOUVMRWRCUVdFc1IwRkJSeXhGUVVWeVJDeFRRVUZUUlN4SFFVRmhUQ3hGUVVGSExFTkJSM1pDTEU5QlFVOUJMRVZCUVVVc1VVRkJVU3hOUVVGUExFMUJRVTBzUlVGQlJTeFJRVUZSU1N4SFFVRnRRa1FzUlVGQlZ5eERRVU40UlN4RFFVVkJMRk5CUVZOSExFZEJRWEZDVGl4RlFVRkhMRU5CUXk5Q0xFOUJRVTlCTEVWQlEwb3NVVUZCVVN4TlFVRlBMRVZCUVVVc1JVRkRha0lzVVVGQlVVa3NSMEZCYlVJc1IwRkJSeXhGUVVNNVFpeFpRVUZaTEVOQlEycENMRU5CUlVFc1UwRkJVMGNzUjBGQlRVTXNSVUZCVTBNc1JVRkJXU3hEUVVOc1F5eFBRVUZKUkN4SlFVRlpMRXRCUTFBc1MwRkZRU3hEUVVOTUxFMUJRVThzVDBGQlQwRXNSVUZCVVN4SlFVRkpTQ3hGUVVGWkxFVkJRVVVzUzBGQlN5eEhRVUZITEVOQlFVTXNSVUZEYWtRc1RVRkJUeXhEUVVGRExFTkJRVU5NTEVOQlFVTXNTVUZEVWxFc1JVRkJVU3hWUVVGWFZDeEhRVUZOVHl4SFFVRnhRazRzUTBGQlF5eEpRVUZOVFN4SFFVRnhRbEFzUTBGQlF5eERRVUZETEVWQlFVbFZMRU5CUTNCR0xFTkJSVW9zUTBGRlFTeFRRVUZUUXl4SFFVRlBZaXhGUVVGUFl5eEZRVUZSTEVOQlF6ZENMRTFCUVU4c1EwRkJSU3hOUVVGQlpDeEZRVUZQTEUxQlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVWbExFVkJRVWRETEVOQlFVTXNTVUZCVFVNc1IwRkJZVVlzUlVGQlIwTXNRMEZCUXl4RlFVRkhMRTlCUVVGR0xFTkJRVThzUTBGRGJFVXNRMEZGUVN4VFFVRlRTU3hIUVVGUGJFSXNSVUZCVHl4RFFVTnlRaXhOUVVGUExFTkJRVVVzVFVGQlFVRXNSVUZCVHl4TlFVRlBMRU5CUVVNc1EwRkJRMGNzUTBGQlF5eEpRVUZOUVN4RFFVRkZMRU5CUTNCRExFTkJSVUVzVTBGQlUyZENMRWRCUVZsRExFVkJRVThzUTBGRE1VSXNUMEZCVDBFc1JVRkJUU3hSUVVGUkxEaENRVUVyUWl4TlFVRk5MRU5CUXpWRUxFTkJSVUVzVTBGQlUwTXNSMEZCWVVNc1JVRkJUME1zUlVGQlN5eERRVU5vUXl4SlFVRk5ReXhGUVVGTlF5eEhRVUZYUml4RFFVRkhMRVZCUTNoQ1J5eEZRVUZOUkN4SFFVRlhSaXhGUVVGTExFdEJRVXNzUlVGRE0wSkpMRVZCUVZGR0xFZEJRVmRHTEVWQlFVc3NTMEZCU3l4RlFVTTNRa3NzUlVGQlQwZ3NSMEZCVjBZc1JVRkJTeXhMUVVGTExFVkJRelZDVFN4RlFVRk5TaXhIUVVGWFJpeEZRVUZMTEV0QlFVc3NSVUZETTBKUExFVkJRVmRNTEVkQlFWZEdMRVZCUVVzc1QwRkJUeXhGUVVOc1ExRXNSVUZCWVU0c1IwRkJWMFlzUlVGQlN5eFBRVUZQTEVWQlEzQkRVeXhGUVVGWFVDeEhRVUZYUml4RlFVRkxMRTlCUVU4c1JVRkRiRU5WTEVWQlFWbFNMRWRCUVZkR0xFVkJRVXNzVDBGQlR5eEZRVU51UTFjc1JVRkJXVlFzUjBGQlYwWXNSVUZCU3l4UFFVRlBMRVZCUTI1RFdTeEZRVUZaVml4SFFVRlhSaXhGUVVGTExFOUJRVThzUlVGRGJrTmhMRVZCUVZkRExFbEJRVThzUTBGQlJTeE5RVUZQTEU5QlFVOXNRaXhIUVVGWmEwSXNSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSeXhOUVVGUExFTkJRVU1zUTBGQlEyeERMRU5CUVVNc1NVRkJUVUVzUlVGQlJ5eFJRVUZUTEVWQlFVc3NSMEYzU0hCR2JVTXNSMEYyU0U5RUxFZEJRVTBzUTBGRFppeEhRVUZKWml4RlFVRk5MRkZCUTFJc1QwRkJUMk1zUlVGQlVVTXNRMEZCUXl4RlFVVnNRaXhQUVVGUlFTeEZRVUZGTEVsQlFVc3NRMEZGWWl4SlFVRkxMRWxCUTBnc1QwRkJUek5DTEVkQlFVMWhMRVZCUVVrc1MwRkJTeXhSUVVGVExFVkJRVXNzUlVGQlJ5eERRVUZETEVWQlF6RkRMRWxCUVVzc1MwRkRTQ3hQUVVGUFlpeEhRVUZOWVN4RlFVRkpMRXRCUVVzc1QwRkJVU3hGUVVGTExFVkJRVWNzUTBGQlF5eEZRVVY2UXl4SlFVRkxMRWxCUTBnc1QwRkJUM2hDTEVWQlFWRnBReXhEUVVGUkxFVkJRM3BDTEVsQlFVc3NTMEZEU0N4UFFVRlBha01zUlVGQlVXMURMRVZCUVZkTExFVkJRV01zUlVGRE1VTXNTVUZCU3l4UFFVTklMRTlCUVU5NFF5eEZRVUZSTmtJc1EwRkJTU3hGUVVOeVFpeEpRVUZMTEZGQlEwZ3NUMEZCVHpkQ0xFVkJRVkZ2UXl4RFFVRlRMRVZCUXpGQ0xFbEJRVXNzVTBGRFNDeFBRVUZQY0VNc1JVRkJVVGhDTEVOQlFVY3NSVUZGY0VJc1NVRkJTeXhKUVVOSUxFOUJRVTg1UWl4RlFVRlJLMElzUTBGQlVTeEZRVU42UWl4SlFVRkxMRXRCUTBnc1QwRkJUeTlDTEVWQlFWRXlRaXhEUVVGSExFVkJRM0JDTEVsQlFVc3NUVUZEU0N4UFFVRlBhRUlzUjBGQlRXRXNSVUZCU1N4UFFVRlBMRkZCUVZNc1IwRkJUU3hGUVVGTExFVkJRVWNzUTBGQlF5eEZRVU5zUkN4SlFVRkxMRTlCUTBnc1QwRkJUMklzUjBGQlRXRXNSVUZCU1N4UFFVRlBMRTlCUVZFc1IwRkJUU3hGUVVGTExFVkJRVWNzUTBGQlF5eEZRVU5xUkN4SlFVRkxMRWxCUTBnc1QwRkJUM2hDTEVWQlFWRXJRaXhEUVVGUkxFVkJRM3BDTEVsQlFVc3NTMEZEU0N4UFFVRlBMMElzUlVGQlVUSkNMRU5CUVVjc1JVRkRjRUlzU1VGQlN5eE5RVU5JTEU5QlFVOW9RaXhIUVVGTllTeEZRVUZKTEU5QlFVOHNVVUZCVXl4SFFVRlBMRVZCUVVzc1JVRkJSeXhEUVVGRExFVkJRMjVFTEVsQlFVc3NUMEZEU0N4UFFVRlBZaXhIUVVGTllTeEZRVUZKTEU5QlFVOHNUMEZCVVN4SFFVRlBMRVZCUVVzc1JVRkJSeXhEUVVGRExFVkJSV3hFTEVsQlFVc3NTVUZEU0N4UFFVRlBlRUlzUlVGQlVTdENMRU5CUVZFc1JVRkRla0lzU1VGQlN5eExRVU5JTEU5QlFVOHZRaXhGUVVGUk1rSXNRMEZCUnl4RlFVVndRaXhKUVVGTExFbEJRMGdzVDBGQlR6TkNMRVZCUVZGblF5eERRVUZWTEVWQlF6TkNMRWxCUVVzc1RVRkRTQ3hQUVVGUGFFTXNSVUZCVVRSQ0xFTkJRVXNzUlVGRmRFSXNTVUZCU3l4TFFVTklMRTlCUVU4MVFpeEZRVUZSTWtJc1EwRkJSeXhGUVVOd1FpeEpRVUZMTEVsQlEwZ3NUMEZCVHpOQ0xFVkJRVkVyUWl4RFFVRlJMRVZCUTNwQ0xFbEJRVXNzUzBGRFNDeFBRVUZQTDBJc1JVRkJVVEpDTEVOQlFVY3NSVUZEY0VJc1NVRkJTeXhKUVVOSUxFOUJRVTh6UWl4RlFVRlJLMElzUTBGQlVTeEZRVU42UWl4SlFVRkxMRXRCUTBnc1QwRkJUeTlDTEVWQlFWRXlRaXhEUVVGSExFVkJRM0JDTEVsQlFVc3NTVUZEU0N4UFFVRlBNMElzUlVGQlVTdENMRU5CUVZFc1JVRkRla0lzU1VGQlN5eEpRVU5JTEU5QlFVOHZRaXhGUVVGUkswSXNRMEZCVVN4RlFVTjZRaXhKUVVGTExFdEJRMGdzVDBGQlR5OUNMRVZCUVZFeVFpeERRVUZITEVWQlEzQkNMRWxCUVVzc1NVRkRTQ3hQUVVGUE0wSXNSVUZCVVN0Q0xFTkJRVkVzUlVGRGVrSXNTVUZCU3l4TFFVTklMRTlCUVU4dlFpeEZRVUZSTWtJc1EwRkJSeXhGUVVOd1FpeEpRVUZMTEVsQlEwZ3NUMEZCVHpOQ0xFVkJRVkZuUXl4RFFVRlZMRVZCUXpOQ0xFbEJRVXNzVFVGRFNDeFBRVUZQYUVNc1JVRkJVVFJDTEVOQlFVc3NSVUZEZEVJc1NVRkJTeXhKUVVOSUxFOUJRVTlVTEVkQlFVOWxMRU5CUVZNc1JVRkRla0lzU1VGQlN5eExRVU5JTEU5QlFVOW1MRWRCUVU5WkxFTkJRVkVzUlVGRGVFSXNTVUZCU3l4TlFVTklMRTlCUVU4dlFpeEZRVUZSZVVJc1EwRkJSeXhGUVVWd1FpeEpRVUZMTEVsQlEwZ3NUMEZCVDJRc1IwRkJUV0VzUlVGQlNTeFZRVUZWTEVWQlFVY3NRMEZCUXl4RlFVVnFReXhKUVVGTExFOUJRMGdzVDBGQlQzaENMRVZCUVZFMlFpeERRVUZKTEVWQlEzSkNMRWxCUVVzc1MwRkRTQ3hQUVVGUE4wSXNSVUZCVVcxRExFVkJRVmRMTEVWQlFXTXNSVUZGTVVNc1NVRkJTeXhKUVVOSUxFOUJRVTk0UXl4RlFVRlJLMElzUTBGQlVTeEZRVU42UWl4SlFVRkxMRXRCUTBnc1QwRkJUeTlDTEVWQlFWRXlRaXhEUVVGSExFVkJSWEJDTEVsQlFVc3NTVUZEVEN4SlFVRkxMRWxCUTBnc1QwRkJUek5DTEVWQlFWRjVRaXhEUVVGSExFVkJRM0JDTEVsQlFVc3NUVUZEU0N4UFFVRlBaQ3hIUVVGTllTeEZRVUZKTEZOQlFWTXNVVUZCVXl4SFFVRlBMRVZCUVVzc1JVRkJSeXhEUVVGRExFVkJRM0pFTEVsQlFVc3NUMEZEU0N4UFFVRlBZaXhIUVVGTllTeEZRVUZKTEZOQlFWTXNUMEZCVVN4SFFVRlBMRVZCUVVzc1JVRkJSeXhEUVVGRExFVkJRM0JFTEVsQlFVc3NUVUZEU0N4UFFVRlBZaXhIUVVGTllTeEZRVUZKTEZOQlFWTXNVVUZCVXl4SFFVRk5MRVZCUVVzc1JVRkJSeXhEUVVGRExFVkJRM0JFTEVsQlFVc3NUMEZEU0N4UFFVRlBZaXhIUVVGTllTeEZRVUZKTEZOQlFWTXNUMEZCVVN4SFFVRk5MRVZCUVVzc1JVRkJSeXhEUVVGRExFVkJSVzVFTEVsQlFVc3NTVUZEVEN4SlFVRkxMRXRCUTBnc1QwRkJUMVlzUjBGQlR5eEpRVUZKTEU5QlFVOHNVVUZCVVdsQ0xFVkJRVk1zVFVGQlRTeFRRVUZUU2l4RlFVRkpMRTFCUVUwc1MwRkJTeXhGUVVGSExFTkJRVU1zUlVGRE9VVXNTVUZCU3l4TlFVTklMRTlCUVU5aUxFZEJRVThzU1VGQlNTeFBRVUZQTEZGQlFWRnBRaXhGUVVGVExFMUJRVTBzUzBGQlMwb3NSVUZCU1N4TlFVRk5MRWxCUVVrc1JVRkJSeXhEUVVGRExFVkJSM3BGTEVsQlFVc3NTVUZEU0N4UFFVRlBVaXhIUVVGUExHOUNRVUZ2UWl4RlFVTndReXhSUVVORkxFOUJRVTlyUWl4RlFVRlJReXhEUVVGRExFTkJRM0JDTEVOQlEwWXNSMEZGYlVKbUxFTkJRVXNzUjBGQlN5eERRVU0zUWl4alFVRmxlRUlzUlVGRGFrSXNSVUZGUVN4UFFVRkJkME1zUlVGQlN5eE5RVUZSYUVJc1JVRkZUbWRDTEVOQlExUXNRMEZGUVN4SlFVRk5SU3hIUVVFd1FpeERRVU01UWl4TFFVRk5MRU5CUTBvc1ZVRkJWeXhMUVVOWUxGRkJRVk1zVDBGRFdDeEZRVU5CTEUxQlFVOHNRMEZEVEN4UlFVRlRMRWxCUTFRc1ZVRkJWeXhMUVVOWUxFMUJRVThzVFVGRFVDeExRVUZOTEUxQlExSXNSVUZEUVN4SlFVRkxMRU5CUTBnc1VVRkJVeXhKUVVOVUxGVkJRVmNzU1VGRFlpeEZRVU5CTEZGQlFWTXNRMEZEVUN4TlFVRlBMRTFCUTFBc1MwRkJUU3hOUVVOU0xFVkJRMEVzVlVGQlZ5eEpRVU5ZTEZWQlFWY3NTVUZEV0N4TFFVRk5MRU5CUTBvc1VVRkJVeXhKUVVOVUxGVkJRVmNzU1VGRFlpeEZRVU5CTEU5QlFWRXNRMEZEVGl4UlFVRlRMRWxCUTFRc1ZVRkJWeXhKUVVOaUxFVkJRMEVzVDBGQlVTeERRVU5PTEZGQlFWTXNTVUZEVkN4VlFVRlhMRWxCUTJJc1EwRkRSaXhGUVVWQkxGTkJRVk5ETEVkQlFXRkRMRVZCUVUxRExFVkJRVkZETEVWQlFWa3NRMEZET1VNc1IwRkJUU3hEUVVGRkxFdEJRVUZETEVWQlFVMHNUVUZCUVhwQ0xFTkJRVTBzUlVGQlNYTkNMRVZCUlhoQ0xFZEJRVWxITEVsQlFWTXNWVUZEV0N4TlFVRlBMRU5CUTB3c1VVRkJVeXhIUVVOVUxFbEJRVXQ2UWl4RFFVTlFMRVZCUjBZc1NVRkJUVEJDTEVWQlFWRkdMRVZCUVZkRExFTkJRVWtzUlVGRmVrSkZMRVZCUVUxUUxFZEJRWGRDU3l4RFFVRkpMRVZCUzNSRExFZEJTa2tzVDBGQlQwVXNSMEZCVVN4WFFVTnFRa0VzUlVGQlRVRXNSVUZCU1VRc1EwRkJTeXhIUVVkaVF5eEZRVU5HTEUxQlFVOHNRMEZEVEN4UlFVRlRMRWRCUTFRc1NVRkJRVUVzUTBGRFJpeERRVWxLTEVOQlJVRXNVMEZCVTBNc1IwRkJWME1zUlVGQlR5eERRVVY2UWl4TlFVRlBMRU5CUVVNc1NVRkVSMEVzUlVGQlRTeEpRVUZMUXl4SFFVRk5RU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFBRVUZQTEVOQlFVTkRMRVZCUVVjc1NVRkJUU3hIUVVGSFFTeERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRWxCUVVzc1JVRkJSU3hEUVVNdlJDeEpRVUZMUml4RFFVRkxMRU5CUXpGQ0xFTkJSVUVzVTBGQlUwY3NSMEZCVFVNc1JVRkJUM0pFTEVWQlFVOXpSQ3hGUVVGVkxFTkJRM0pETEVsQlFVMURMRVZCUVZWR0xFVkJRVTBzVFVGQlRYSkVMRU5CUVVzc1JVRkZha01zUjBGQlNYVkVMRVZCUVZNc1EwRkRXQ3hKUVVGTlF5eEZRVUZOTEVOQlFVTXNSVUZEVkVNc1JVRkJZU3hGUVVOcVFpeFJRVUZYZGtRc1MwRkJTMjlFTEVWQlEyUXNSMEZCU1Vrc1IwRkJaVW9zUlVGQlZYQkVMRU5CUVVNc1JVRkJSeXhEUVVNdlFpeEpRVUZOWVN4RlFVRkpkVU1zUlVGQlUzQkVMRU5CUVVNc1JVRkRiRUpaTEVWQlFWTkRMRVZCUVVVc1QwRkJVMEVzUlVGQlJTeFBRVUZUTEVWQlFVa3NSVUZEYWtNc1EwRkJRMEVzUlVGQlJTeFRRVUZYUVN4RlFVRkZMRkZCUTJ4Q2VVTXNSVUZCU1hwRExFVkJRVVVzVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkpRU3hGUVVGRkxFMUJRVTEzUXl4RlFVRlJMRTFCUVUxRkxFVkJRVmxCTEVWQlFXRXpReXhEUVVGTkxFTkJRVU1zUjBGRk9VVXlReXhIUVVGak0wTXNRMEZEYUVJc1EwRkZSaXhOUVVGUExFTkJRVU41UXl4RlFVRlRReXhEUVVGSExFTkJRM1JDTEV0QlEwVXNUMEZCVHl4RFFVRkRSQ3hGUVVGVExFTkJRVU1zUTBGQlF5eERRVVYyUWl4RFFVVkJMRk5CUVZOSkxFZEJRVzlDU2l4RlFVRlRMRU5CUTNCRExFbEJRVTFMTEVWQlFWZDBReXhIUVVGVkxFTkJRM3BDTEU5QlFWRkJMRVZCUVU4c1EwRkRZaXhKUVVGTExFbEJRMGdzVFVGQlR5eGpRVU5VTEVsQlFVc3NTVUZEU0N4TlFVRlBMRk5CUTFRc1NVRkJTeXhKUVVOSUxFMUJRVThzVTBGRFZDeEpRVUZMTEVsQlEwd3NTVUZCU3l4SlFVTklMRTFCUVU4c1QwRkRWQ3hKUVVGTExFbEJRMGdzVFVGQlR5eE5RVU5VTEVsQlFVc3NTVUZEU0N4TlFVRlBMRlZCUTFRc1NVRkJTeXhKUVVOTUxFbEJRVXNzU1VGRFNDeE5RVUZQTEZGQlExUXNTVUZCU3l4SlFVTklMRTFCUVU4c1QwRkRWQ3hKUVVGTExFbEJRMHdzU1VGQlN5eEpRVU5JTEUxQlFVOHNWVUZEVkN4SlFVRkxMRWxCUTBnc1RVRkJUeXhoUVVOVUxFbEJRVXNzU1VGRFNDeE5RVUZQTEZkQlExUXNTVUZCU3l4SlFVTklMRTFCUVU4c1ZVRkRWQ3hSUVVORkxFOUJRVThzU1VGRFdDeERRVU5HTEVWQlJVbDFReXhGUVVGUExFdEJRMUJETEVWQlEwb3NUMEZCUzBNc1JVRkJXVklzUlVGQlVTeERRVUZETEVsQlEzaENUU3hGUVVGUFJ5eEhRVUZUTEU5QlFVOVVMRVZCUVZFc1EwRkJReXhIUVVjM1FsRXNSVUZCV1ZJc1JVRkJVU3hEUVVGRExFbEJRMjVDVFN4SlFVTklRU3hGUVVGUExFbEJRVWxKTEVkQlFXZENWaXhGUVVGUkxFTkJRVU1zUjBGRmRFTlBMRVZCUVdsQ1VDeEZRVUZSTEVkQlIzUkNVU3hGUVVGWlVpeEZRVUZSTEVOQlFVTXNTVUZEZUVKQkxFVkJRVkVzUjBGQlMwRXNSVUZCVVN4RlFVRkpMRWRCUVVzc1JVRkJTU3hIUVVjdlFsRXNSVUZCV1ZJc1JVRkJVU3hEUVVGRExFbEJRM0JDUVN4RlFVRlJMRVZCUVVrc1NVRkJUVUVzUlVGQlVTeEpRVUZOTEVWQlEyeERRU3hGUVVGUkxFZEJRVXNzUjBGRFNrRXNSVUZCVVN4SlFVRk5MRWxCUVUxQkxFVkJRVkVzU1VGQlRTeEpRVU16UTBFc1JVRkJVU3hGUVVGSkxFbEJTVnBCTEVWQlFWRXNTVUZCVFN4SFFVRkxRU3hGUVVGUkxFbEJRemRDUVN4RlFVRlJMRVZCUVVrc1EwRkJRMEVzUlVGQlVTeEhRVWRzUWxFc1JVRkJXVklzUlVGQlVTeERRVUZETEVsQlEzaENRU3hGUVVGUkxFVkJRVWxYTEVkQlFWbFlMRVZCUVZFc1EwRkJReXhIUVZrMVFpeERRVlJOTEU5QlFVOHNTMEZCUzBFc1EwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlExa3NSVUZCUjBNc1NVRkJUU3hEUVVOcVJDeEpRVUZOYWtJc1JVRkJTVk1zUlVGQlVWRXNRMEZCUXl4RlFVTnVRaXhQUVVGSmFrSXNTVUZEUm1kQ0xFVkJRVVZvUWl4RFFVRkRMRVZCUVVsSkxFVkJRVkZoTEVOQlFVTXNSMEZIV0VRc1EwRkRWQ3hGUVVGSExFTkJRVU1zUTBGQlF5eEZRVVZUVGl4RlFVRk5ReXhEUVVGakxFTkJRM0JETEVOQlJVRXNTVUZCU1U4c1IwRkJjVUlzUzBGRmVrSXNVMEZCVTBNc1NVRkJiVUlzUTBGRE1VSXNUMEZCUzBRc1MwRkRTRUVzUjBGQmNVSkZMRVZCUVZNc1YwRkJWeXhoUVVGaExFZEJSMnBFUml4RlFVTlVMRU5CUlVFc1UwRkJVMGNzUjBGQmMwSnNSQ3hGUVVGUGNVSXNSVUZCVVN4RFFVTTFReXhIUVVGSmNrSXNSVUZCVFN4UlFVTlNMRTlCUVU5QkxFVkJSMVFzU1VGQlRYTkNMRVZCUVdFMlFpeEhRVUZWTEhWQ1FVRjFRbTVFTEVWQlFVMHNSMEZCUnl4RlFVVTNSQ3hIUVVGSkxFTkJRVU56UWl4RlFVTklMRTlCUVU5MFFpeEZRVTFVTEVsQlFVMXZSQ3hGUVVoWlJDeEhRVUZWTEU5QlFVODVRaXhGUVVGUlF5eERRVUZWTEVWQlF6ZENMRzlDUVVGdlFqQkNMRWRCUVdsQ0xFTkJRVU1zUlVGRmVrTXNTVUZCUzBzc1IwRkJUV3hETEVkQlFXRnJReXhGUVVGSGFFTXNSVUZCVVVNc1EwRkJWU3hEUVVGRExFVkJSVzVGTEU5QlFVazRRaXhGUVVGUExGTkJRVk1zVFVGQlV5eEZRVU53UW5CRUxFVkJSMFp2UkN4RFFVTlVMRU5CUlVFc1UwRkJVMFVzUjBGQmEwSkdMRVZCUVZFdlFpeEZRVUZSTEVOQlEzcERMRTlCUVU4c1RVRkJUU3hWUVVGVkxFOUJRVThzUjBGQlJ5dENMRVZCUVU4c1NVRkJTeXhIUVVGTlJpeEhRVUZ6UWl4RlFVRkhOMElzUTBGQlRTeERRVUZETEVOQlFVTXNRMEZEZEVZc1EwRk5UeXhUUVVGVGEwTXNSMEZCYTBKc1F5eEZRVUZSVlN4RlFVRlBlVUlzUlVGQlVTeERRVU4yUkN4SlFVRk5TaXhGUVVGVFJTeEhRVUZyUWtnc1IwRkJWU3haUVVGWlN5eERRVUZOTEVWQlFVZHVReXhEUVVGTkxFVkJRM0JGVFN4RlFVRlJlVUlzUlVGQlR5eEpRVUZMY2tNc1IwRkJUV2hDTEVkQlFXRm5RaXhGUVVGSFRTeERRVUZOTEVOQlFVTXNSVUZEYWtSdlF5eEZRVUZ2UWpsQ0xFVkJRVTBzUzBGQlRWb3NSMEZCVFVFc1JVRkJSU3hoUVVGaExFVkJSWFpFTEVkQlFVa3dReXhGUVVOR0xFMUJRVThzUTBGQlJTeE5RVUZCTVVJc1JVRkJUeXhQUVVGQmNVSXNSVUZCVVN4alFVRmxTeXhGUVVGclFpeGhRVUZqTEVWQlEyeEZMRU5CUTB3c1IwRkJUU3hEUVVGRFF5eEZRVUZoTVVJc1EwRkJVU3hGUVVGSlRpeEhRVUZYUXl4RFFVRkxMRVZCUXpsRGFrUXNSVUZCVVN4UFFVRlBaMFlzUlVGQllTeEhRVUZITEVWQlF5OUNMRU5CUVVORExFVkJRVmt4UWl4RFFVRlBMRVZCUVVsSUxFZEJRVTFETEVWQlFVOXlSQ3hGUVVGUGMwUXNRMEZCVVN4RlFVTndSQ3hEUVVGRE5FSXNSVUZCVVhKQ0xFVkJRVTFETEVOQlFXTXNSVUZCU1ZBc1JVRkROMEpKTEVkQlFXOUNTaXhEUVVGUExFVkJRek5DTEVOQlFVTXNTMEZCVFN4TFFVRk5MRTFCUVZNc1JVRkROVUlzUjBGQlNVY3NSMEZCWlVnc1JVRkJVeXhIUVVGSExFZEJRVXRITEVkQlFXVklMRVZCUVZNc1IwRkJSeXhGUVVNM1JDeE5RVUZOTEVsQlFVazBRaXhIUVVOU0xIVkVRVU5HTEVWQlJVWXNUVUZCVHl4RFFVRkZMRTFCUVVFNVFpeEZRVUZQTEU5QlFVRnhRaXhGUVVGUkxFMUJRVUV4UlN4RlFVRlBMRmRCUVVGcFJpeEZRVUZaTEZGQlFVRXhRaXhGUVVGVExFOUJRVUV5UWl4RlFVRlJMRXRCUVVGeVFpeEZRVUZOTEdWQlFVRkRMRU5CUVdVc1EwRkRia1lzUTBGRFJpeERRVVZQTEZOQlFWTnpRaXhIUVVGblFucERMRVZCUVZGVkxFVkJRVTk1UWl4RlFVRlJMRU5CUTNKRUxFZEJRVTBzUTBGQlJTeFBRVUZCU1N4RlFVRlJMRXRCUVVGeVFpeEZRVUZOTEdWQlFVRkRMRVZCUVdkQ0xHTkJRVUYxUWl4RFFVRmpMRVZCUVVsU0xFZEJRV3RDYkVNc1JVRkJVVlVzUlVGQlQzbENMRU5CUVUwc1JVRkRMMFlzVFVGQlR5eERRVUZEU1N4RlFVRlJja0lzUlVGQlRVTXNSVUZCWjBKMVFpeERRVUZoTEVOQlEzSkVMRU5EY21GQkxFbEJRVTFETEVkQlFXZENMRU5CUVVNc1JVRkJSeXhIUVVGSkxFZEJRVWtzUjBGQlNTeEpRVUZMTEVsQlFVc3NTVUZCU3l4SlFVRkxMRWxCUVVzc1NVRkJTeXhKUVVGTExFZEJRVWNzUlVGRE1VVkRMRWRCUVdFc1EwRkJReXhGUVVGSExFZEJRVWtzUjBGQlNTeEhRVUZKTEVsQlFVc3NTVUZCU3l4SlFVRkxMRWxCUVVzc1NVRkJTeXhKUVVGTExFbEJRVXNzUjBGQlJ5eEZRVVZ5UlN4VFFVRlRReXhIUVVGbFF5eEZRVUZOUXl4RlFVRlBMRU5CUTI1RExFOUJRVThzU1VGQlNVTXNSMEZEVkN4dlFrRkRRU3hwUWtGQmFVSkVMRU5CUVVzc1lVRkJZU3hQUVVGUFFTeERRVUZMTEZWQlFWVkVMRU5CUVVrc2IwSkJReTlFTEVOQlEwWXNRMEZGUVN4VFFVRlRSeXhIUVVGVlF5eEZRVUZOUXl4RlFVRlBReXhGUVVGTExFTkJRMjVETEVsQlFVMURMRVZCUVVrc1NVRkJTU3hMUVVGTExFdEJRVXNzU1VGQlNVZ3NSVUZCVFVNc1JVRkJVU3hGUVVGSFF5eERRVUZITEVOQlFVTXNSVUZGTjBOR0xFVkJRVThzUzBGQlQwRXNSMEZCVVN4SFFVTjRRa2NzUlVGQlJTeGxRVUZsUVN4RlFVRkZMR1ZCUVdVc1JVRkJTU3hKUVVGSkxFVkJSelZETEVsQlFVMURMRVZCUVV0RUxFVkJRVVVzVlVGQlZTeEZRVVYyUWl4UFFVRlBReXhKUVVGUExFVkJRVWtzUlVGQlNVRXNRMEZEZUVJc1EwRkZRU3hUUVVGVFF5eEhRVUZsVEN4RlFVRk5ReXhGUVVGUFF5eEZRVUZMTEVOQlEzaERMRTlCUVU5QkxFZEJRVTlKTEVkQlFWZE9MRU5CUVVrc1JVRkJTVTRzUjBGQllVUXNTVUZCWlZFc1JVRkJVU3hEUVVGRExFTkJRM2hGTEVOQlJVRXNVMEZCVTAwc1IwRkJhVUpRTEVWQlFVMVJMRVZCUVZNc1EwRkRka01zU1VGQlRVTXNSVUZCVVVnc1IwRkJWMDRzUTBGQlNTeEZRVUZKVGl4SFFVRmhSQ3hIUVVNMVEybENMRVZCUVZORUxFVkJRVTBzVlVGQlZ5eEhRVUZOTEVWQlFVbEVMRU5CUVU4c1JVRkRNME5PTEVWQlFVMU5MRVZCUVZWRExFVkJRVTFETEVOQlFVMHNSVUZET1VJc1RVRkJUeXhEUVVGRkxFMUJRVTlCTEVWQlFWTXNSVUZCUnl4SlFVRkJVaXhEUVVGSkxFTkJRMnhETEVOQlRVOHNVMEZCVTFNc1IwRkJaMEpETEVWQlFWTXNRMEZEZGtNc1IwRkJUU3hEUVVGRkxFdEJRVUZhTEVWQlFVMHNUVUZCUVVNc1JVRkJUeXhKUVVGQlF5eERRVUZKTEVWQlFVbFZMRVZCUXpOQ1NpeEZRVUZWU0N4SFFVRmxUQ3hGUVVGTlF5eEZRVUZQUXl4RFFVRkhMRVZCUTNwRFZ5eEZRVUZWWkN4SFFVRlZReXhGUVVGTlF5eEZRVUZQUXl4RFFVRkhMRVZCUld4RFdTeEZRVUZoTEV0QlFVc3NUMEZCVDA0c1JVRkJWVXNzUlVGQlZTeEpRVUZOTEVOQlFVTXNSVUZEZEVSRkxFVkJSVVlzVDBGQlNVUXNSVUZCWVN4SFFVTm1ReXhGUVVGWFppeEZRVUZQTEVWQlEyeENZeXhGUVVGaFJTeEhRVUZuUWtRc1EwRkJVU3hIUVVNMVFrUXNSVUZCWVVVc1IwRkJaMEpvUWl4RFFVRkpMRWRCUXpGRFpTeEZRVUZYWml4RlFVRlBMRVZCUTJ4Q1l5eEZRVUZoTEVkQlJXSkRMRVZCUVZkbUxFVkJSMDVwUWl4RlFVRkJMRU5CUVVVc1UwRkJRVVlzUlVGQlZTeFhRVUZCUkN4RlFVRlpMRkZCUVVGRUxFZEJRVmxMTEVkQlFWZE9MRU5CUVU4c1JVRkRMMFFzUTBGRlR5eFRRVUZUVHl4SFFVRm5Ra01zUlVGQlZTeERRVU40UXl4SFFVRk5MRU5CUVVVc1UwRkJRVXdzUlVGQlZTeFhRVUZCUkN4RlFVRlpMRkZCUVVGRUxFTkJRVkVzUlVGQlNVOHNSVUZEZUVORExFVkJRV2RDZEVJc1IwRkJWV2RDTEVWQlFWVXNSVUZCUnl4RFFVRkRMRVZCUTNoRFR5eEZRVUZoUXl4SFFVRlhVaXhEUVVGUkxFVkJSVGxDVUN4RlFVRlZUU3hGUVVGaExFVkJRVWxFTEVWQlFWVlJMRVZCUVdkQ0xFVkJRM1pFY2tJc1JVRkZSVkVzUlVGQlZTeEhRVU5hVWl4RlFVRlBaU3hGUVVGWExFVkJRMnhDVUN4SFFVRlhaU3hIUVVGWGRrSXNRMEZCU1N4SFFVTnFRbEVzUlVGQlZXTXNSMEZEYmtKMFFpeEZRVUZQWlN4RlFVRlhMRVZCUTJ4Q1VDeEhRVUZYWlN4SFFVRlhVaXhEUVVGUkxFZEJSVGxDWml4RlFVRlBaU3hGUVVkVUxFZEJRVTBzUTBGQlJTeE5RVUZCWkN4RlFVRlBMRWxCUVVGRExFTkJRVWtzUlVGQlNVc3NSMEZCYVVKUUxFVkJRVTFSTEVOQlFVOHNSVUZEY2tRc1QwRkJUMU1zUlVGQlFTeERRVUZGTEV0QlFVRnFRaXhGUVVGTkxFMUJRVUZETEVWQlFVOHNTVUZCUVVNc1IwRkJVV2RDTEVkQlFWZEZMRU5CUVZFc1JVRkRia1FzUTBGRlR5eFRRVUZUU1N4SFFVRnRRa01zUlVGQlZTeERRVU16UXl4SFFVRk5MRU5CUVVVc1MwRkJRWHBDTEVWQlFVMHNUVUZCUVVNc1JVRkJUeXhKUVVGQlF5eERRVUZKTEVWQlFVbDFRaXhGUVVOMlFtcENMRVZCUVZWSUxFZEJRV1ZNTEVWQlFVMURMRVZCUVU5RExFTkJRVWNzUlVGREwwTXNUMEZCVDJVc1JVRkJRU3hEUVVGRkxFdEJRVUZxUWl4RlFVRk5MRkZCUVVGUkxFZEJRVmxWTEVkQlFWZFBMRU5CUVZFc1JVRkRhRVFzUTBGRlR5eFRRVUZUUXl4SFFVRnRRa01zUlVGQllTeERRVU01UXl4SFFVRk5MRU5CUVVVc1MwRkJRVE5DTEVWQlFVMHNVVUZCUVZFc1EwRkJVU3hGUVVGSmJVSXNSVUZEY0VJc1EwRkJSU3hOUVVGQk1VSXNSVUZCVHl4SlFVRkJReXhEUVVGSkxFVkJRVWxMTEVkQlFXbENVQ3hGUVVGTlVTeERRVUZQTEVWQlEzSkVMRTlCUVU5VExFVkJRVUVzUTBGQlJTeExRVUZCYWtJc1JVRkJUU3hOUVVGQlF5eEZRVUZQTEVsQlFVRkRMRWRCUVZGblFpeEhRVUZYVXl4RFFVRlhMRVZCUTNSRUxFTkJSVThzVTBGQlUwTXNSMEZCYlVKRExFVkJRVXNzUTBGRGRFTXNTVUZCVFVNc1JVRkJXVU1zUjBGQlZVWXNSVUZCU1N4UlFVRlJMRVZCUTNSRFJ5eEZRVUZaUXl4SFFVRmxTaXhGUVVGSkxGZEJRVmtzUlVGQlIySXNSMEZCWjBKaExFVkJRVWtzVVVGQlVTeERRVUZETEVWQlF6TkZTeXhGUVVGbFJDeEhRVUZsU2l4RlFVRkpMRkZCUVZNc1JVRkJSeXhEUVVGRExFVkJSV3BFTEU5QlFVdERMRVZCUlU5RkxFVkJSVUZGTEVWQlJVVXNSMEZFVEhaRExFZEJRV1VzVlVGQlYydERMRVZCUVVrc1QwRkJUeXhGUVVaeVEyeERMRWRCUVdVc1QwRkJVV3RETEVWQlFVa3NTVUZCU1N4RlFVWXZRbXhETEVkQlFXVXNWMEZCV1d0RExFVkJRVWtzVVVGQlVTeERRVTFzUkN4RFFVVlBMRk5CUVZOTkxFZEJRWE5DVGl4RlFVRkxMRU5CUTNwRExFbEJRVTFETEVWQlFWbERMRWRCUVZWR0xFVkJRVWtzU1VGQlNTeEZRVU5zUTA4c1JVRkJaVWdzUjBGQlpVb3NSVUZCU1N4UlFVRlRMRVZCUVVkT0xFZEJRVmROTEVWQlFVa3NTVUZCU1N4RFFVRkRMRVZCUlhCRkxFOUJRVXRETEVWQlJVOU5MRVZCUlVVc1IwRkVUSHBETEVkQlFXVXNWVUZCVjJ0RExFVkJRVWtzVDBGQlR5eEZRVVp5UTJ4RExFZEJRV1VzVDBGQlVXdERMRVZCUVVrc1NVRkJTU3hEUVVreFF5eERRVVZQTEZOQlFWTlJMRWRCUVhkQ1VpeEZRVUZMTEVOQlF6TkRMRWxCUVUxRExFVkJRVmxETEVkQlFWVkdMRVZCUVVrc1NVRkJTU3hGUVVOc1ExTXNSVUZCWVV3c1IwRkJaVW9zUlVGQlNTeE5RVUZQTEVWQlFVY3NSVUZCUlN4RlFVTTFRMVVzUlVGQlYwNHNSMEZCWlVvc1JVRkJTU3hKUVVGTExFVkJRVWRYTEVkQlFWbFlMRVZCUVVrc1MwRkJUVUVzUlVGQlNTeExRVUZMTEVOQlFVTXNSVUZGZUVVc1QwRkJTME1zUlVGRlQxRXNSVUZGUVVNc1JVRkZSU3hIUVVSTU5VTXNSMEZCWlN4TlFVRlBhME1zUlVGQlNTeEhRVUZITEVWQlJqZENiRU1zUjBGQlpTeFJRVUZUYTBNc1JVRkJTU3hMUVVGTExFVkJSbXBEYkVNc1IwRkJaU3hQUVVGUmEwTXNSVUZCU1N4SlFVRkpMRU5CVFRGRExFTkJSVThzVTBGQlUxa3NSMEZCYlVKYUxFVkJRVXNzUTBGRGRFTXNSMEZCVFN4RFFVRkZMRXRCUVVGaExFVkJRVTBzVDBGQlFVTXNSVUZCVVN4UFFVRkJReXhGUVVGUkxGbEJRVUZETEVOQlFWa3NSVUZCU1doQ0xFVkJRM2hEYVVJc1JVRkRSbUlzUjBGQlpWTXNSVUZCVFN4RlFVRkhMRVZCUVVVc1IwRkRla0pCTEVsQlFWTXNTVUZCVFVNc1NVRkJWeXhIUVVGTFF5eEpRVUZYTEVkQlFVdERMRWxCUVdkQ0xFVkJRMnhGUlN4RlFVRmpaQ3hIUVVGbFZTeEZRVUZSTEVWQlFVY3NSVUZCUlN4RlFVTXhRMHNzUlVGQlkyWXNSMEZCWlZjc1JVRkJVU3hGUVVGSExFVkJRVVVzUlVGRE1VTkxMRVZCUVcxQ2FFSXNSMEZCWlZrc1JVRkJZU3hGUVVGSExFZEJRVWNzUlVGRmRrUXNUMEZCUzBNc1JVRkZUME1zUlVGRlFVTXNSVUZGUVVNc1JVRkZSU3hIUVVSTWRFUXNSMEZCWlN4alFVRmxhMFFzUTBGQlZ5eEZRVVo2UTJ4RUxFZEJRV1VzVTBGQlZXbEVMRU5CUVUwc1JVRkdMMEpxUkN4SFFVRmxMRk5CUVZWblJDeERRVUZOTEVWQlJpOUNhRVFzUjBGQlpTeFBRVUZSSzBNc1EwRkJTU3hEUVZGMFF5eERRMjVJUVN4SlFVRk5VU3hIUVVGVkxHMUNRVU5XUXl4SFFVRlhMRTlCUldwQ0xGTkJRVk5ETEVkQlFXZENReXhGUVVGTkxFTkJRemRDTEU5QlFVOHNTVUZCU1VNc1IwRkJVU3h0UWtGQmIwSXNZVUZCWVVRc1JVRkJTeXhKUVVGSkxHOUNRVUZ2UWl4RFFVTnVSaXhEUVVkQkxGTkJRVk5GTEVkQlFYVkNReXhGUVVGSkxFTkJRMnhETEU5QlFVbEJMRVZCUVVjc1YwRkJZU3hQUVVOc1FrRXNSVUZCUnl4VFFVRlhReXhIUVVGblFrUXNSVUZCUnl4RFFVRkRMRWRCUlRkQ1FTeEZRVUZITEZGQlExb3NRMEZKUVN4VFFVRlRSU3hIUVVGTlF5eEZRVUZOUXl4RlFVRk5MRU5CUTNwQ0xFbEJRVTFETEVWQlFWVXNRMEZEWkN4SFFVRkpSaXhGUVVGTExFZEJRMVFzUzBGQlRVRXNSVUZCU3l4TFFVTllMRVZCUVVkQkxFVkJRVXNzUlVGRFVpeEZRVUZIUVN4RlFVRkxMRVZCUTFJc1NVRkJTMEVzUlVGQlN5eEpRVU5XTEZGQlFWTkJMRVZCUVVzc1QwRkRhRUlzUlVGRFFTeFBRVUZQTEVsQlFVbEhMRVZCUVZORExFZEJRVUZETEVsQlFVRXNSMEZCUzBnc1IwRkJXVVFzUjBGQmFrSXNRMEZCZFVJc1NVRkJTME1zUTBGQlVTeEZRVUZETEVOQlF6TkVMRU5CU1VFc1UwRkJVMGtzUjBGQlZVTXNSVUZCVTBNc1JVRkJSME1zUlVGQlNTeERRVVZxUXl4SlFVRkpReXhGUVVGWFNDeEZRVUZWUXl4RlFVRkpMRWRCUVVzc1NVRkhOVUpITEVWQlFVdEdMRVZCUVVjc1QwRkJUME1zUTBGQlVTeEZRVWMzUWl4SFFVRkpSaXhKUVVGTlJ5eEZRVU5TTEUxQlFVOHNRMEZCUTBRc1JVRkJWVVlzUTBGQlF5eEZRVWx5UWtVc1NVRkJZVU1zUlVGQlMwZ3NSMEZCU3l4SFFVRkxMRWxCUnpWQ0xFbEJRVTFKTEVWQlFVdElMRVZCUVVjc1QwRkJUME1zUTBGQlVTeEZRVU0zUWl4UFFVRkpReXhKUVVGUFF5eEZRVU5HTEVOQlFVTkdMRVZCUVZWRExFTkJRVVVzUlVGSlppeERRVUZEU2l4RlFVRlZMRXRCUVVzc1NVRkJTVWtzUlVGQlNVTXNRMEZCUlN4RlFVRkpMRWRCUVVzc1NVRkJUU3hMUVVGTExFbEJRVWxFTEVWQlFVbERMRU5CUVVVc1EwRkJReXhEUVVOc1JTeERRVWRCTEZOQlFWTkRMRWRCUVZGRExFVkJRVWxETEVWQlFWRXNRMEZETTBKRUxFZEJRVTFETEVWQlFWTXNSMEZCU3l4SlFVVndRaXhKUVVGTlF5eEZRVUZKTEVsQlFVa3NTMEZCUzBZc1EwRkJSU3hGUVVWeVFpeE5RVUZQTEVOQlEwd3NTMEZCVFVVc1JVRkJSU3hsUVVGbExFVkJRM1pDTEUxQlFVOUJMRVZCUVVVc1dVRkJXU3hGUVVGSkxFVkJRM3BDTEVsQlFVdEJMRVZCUVVVc1YwRkJWeXhGUVVOc1FpeExRVUZOUVN4RlFVRkZMRmxCUVZrc1JVRkRjRUlzVDBGQlVVRXNSVUZCUlN4alFVRmpMRVZCUTNoQ0xFOUJRVkZCTEVWQlFVVXNZMEZCWXl4RlFVTjRRaXhaUVVGaFFTeEZRVUZGTEcxQ1FVRnRRaXhEUVVOd1F5eERRVU5HTEVOQlIwRXNVMEZCVTBNc1IwRkJVVU1zUlVGQlMwZ3NSVUZCVVhKQ0xFVkJRVTBzUTBGRGJFTXNUMEZCVDFrc1IwRkJWV0VzUjBGQllVUXNRMEZCUnl4RlFVRkhTQ3hGUVVGUmNrSXNRMEZCU1N4RFFVTnNSQ3hEUVVkQkxGTkJRVk13UWl4SFFVRlhjRUlzUlVGQlRYRkNMRVZCUVVzc1EwRkROMElzU1VGQlRVTXNSVUZCVDNSQ0xFVkJRVXNzUlVGRGFFSjFRaXhGUVVGUGRrSXNSVUZCU3l4RlFVRkZMRXRCUVU4c1MwRkJTeXhOUVVGTmNVSXNSVUZCU1N4TFFVRkxMRVZCUTNwRFJ5eEZRVUZSZUVJc1JVRkJTeXhGUVVGRkxFMUJRVkVzUzBGQlN5eE5RVUZOY1VJc1JVRkJTU3hOUVVGTkxFVkJRVWtzUzBGQlN5eE5RVUZOUVN4RlFVRkpMRkZCUVZFc1JVRkJTU3hGUVVNelJVa3NSVUZCU1hKQ0xFZEJRVUZETEVWQlFVRXNSMEZEUTB3c1JVRkJTeXhIUVVST0xFTkJSVVlzUzBGQlFYVkNMRVZCUTBFc1RVRkJRVU1zUlVGRFFTeEpRVU5GTEV0QlFVc3NTVUZCU1hoQ0xFVkJRVXNzUlVGQlJTeEpRVUZMTUVJc1IwRkJXVWdzUlVGQlRVTXNRMEZCU3l4RFFVRkRMRVZCUXpkRExFdEJRVXNzVFVGQlRVZ3NSVUZCU1N4SlFVRkpMRVZCUTI1Q0xFdEJRVXNzVFVGQlRVRXNSVUZCU1N4TFFVRkxMRVZCUVVrc1EwRkROVUlzUjBGRFFVMHNSVUZCWTBNc1JVRkJVeXhYUVVGWExFTkJRMmhETEUxQlFVOVFMRVZCUVVrc1RVRkJVU3hMUVVGTExFMUJRVTFCTEVWQlFVa3NTMEZCU3l4RlFVTjJReXhUUVVGVlFTeEZRVUZKTEZOQlFWY3NTMEZCU3l4TlFVRk5RU3hGUVVGSkxGRkJRVkVzUlVGRGFFUXNUMEZCVVVFc1JVRkJTU3hQUVVGVExFdEJRVXNzVFVGQlRVRXNSVUZCU1N4TlFVRk5MRVZCUXpGRExFMUJRVTlCTEVWQlFVa3NUVUZCVVN4TFFVRkxMRTFCUVUxQkxFVkJRVWtzUzBGQlN5eEZRVU4yUXl4TFFVRk5RU3hGUVVGSkxFdEJRVThzUzBGQlN5eE5RVUZOUVN4RlFVRkpMRWxCUVVrc1JVRkRjRU1zVFVGQlQwRXNSVUZCU1N4TlFVTllMRkZCUVZOQkxFVkJRVWtzVVVGRFlpeFJRVUZUUVN4RlFVRkpMRkZCUTJJc1lVRkJZMEVzUlVGQlNTeFpRVU53UWl4RFFVRkRMRVZCUVVVc1IwRkJSeXhqUVVGakxFVkJRM0JDWkN4RlFVRlZXU3hIUVVGaFRTeERRVUZETEVWQlJYUkNMRU5CUVVOWUxFVkJRVWxPTEVOQlFVTXNSVUZCU1VZc1IwRkJWVU1zUlVGQlUyVXNSVUZCVFhSQ0xFVkJRVXNzU1VGQlNTeEZRVVZvUkN4UFFVRkpNa0lzU1VGQlowSXNTVUZEYkVKaUxFZEJRVTFoTEVWQlJVNXVRaXhGUVVGSlVpeEZRVUZMTEV0QlFVc3NUMEZCVDJNc1EwRkJSU3hIUVVkc1FpeERRVUZGTEVkQlFVRkJMRVZCUVVrc1JVRkJRVTRzUTBGQlJTeERRVU5xUWl4RFFVbEJMRk5CUVZOeFFpeEhRVUZ2UWtNc1JVRkJVVU1zUlVGQldVTXNSVUZCVFVNc1JVRkJVVU1zUlVGQlRVTXNSVUZCWjBJc1EwRkRia1lzUjBGQlRTeERRVUZGTEZGQlFVRkRMRVZCUVZNc1MwRkJRVEZETEVOQlFVc3NSVUZCU1hORExFVkJRekZDTEVkQlFVbEdMRWRCUVZVc1QwRkJUeXhMUVVGTFFTeERRVUZOTEVWQlFVVXNVMEZCVnl4RlFVRkhMRU5CUXpsRExFbEJRVTFQTEVWQlFYRkNUaXhIUVVGamNrTXNSVUZEZGtOTkxFVkJRVTlITEVWQlFWTXNWMEZCVnpKQ0xFVkJRVkV4UWl4SFFVRkJReXhGUVVGQkxFZEJRemxDTWtJc1IwRkVPRUlzUTBGRmFrTXNTMEZCVFVzc1JVRkRUaXhsUVVGQlJpeERRVU5HTEVWQlFVTXNSVUZEU0N4UFFVRlBReXhGUVVGVmNFTXNSVUZCVDBFc1JVRkJTeXhSUVVGUlRpeERRVUZKTEVOQlF6TkRMRXRCUTBVc1VVRkJUMU1zUlVGQlV5eFJRVU5rTEVsQlFVbFNMRWRCUVZFc1lVRkJZeXhqUVVGamRVTXNRMEZCU1N4M1FrRkJkMEpFTEVOQlFVMHNSVUZCUlN4RFFVTTVSU3hEUVVWS0xFTkJTVUVzVTBGQlUwc3NSMEZCWVhwRExFVkJRVWx2UXl4RlFVRlJUU3hGUVVGVExFZEJRVTBzUTBGREwwTXNUMEZCVHpGRExFVkJRVWNzVVVGRFRqSkRMRWRCUVZVc1QwRkJUME1zUjBGQlR5eFBRVUZQTEU5QlFVOHNSVUZCUnl4RFFVTjJReXhQUVVGQlJpeEZRVU5CTEZsQlFXRXNSVUZEWml4RFFVRkRMRVZCUVVVc2VVSkJRWGxDTVVNc1JVRkJTVzlETEVOQlFVMHNSVUZEZEVNc1NVRkRUaXhEUVVWQkxGTkJRVk5UTEVkQlFWVnNReXhGUVVGSGJVTXNSVUZCVlN4RFFVTTVRaXhKUVVGTlF5eEZRVUZoY0VNc1JVRkJSU3hGUVVGRkxFdEJRVThzVFVGQlVVRXNSVUZCUlN4RlFVRkZMRXRCUVU4c1JVRkROME5wUWl4RlFVRkpMRWRCUTFJc1QwRkJTVzFDTEVkQlFXTndReXhGUVVGRkxFVkJRVVVzVFVGQlVTeEpRVUZIYVVJc1IwRkJTeXhMUVVOMFEwRXNSMEZCUzI5Q0xFZEJRVk55UXl4RlFVRkZMRVZCUVVVc1MwRkJUVzlETEVWQlFXRXNSVUZCU1N4RFFVRkRMRVZCUlhSRFJDeEhRVU5HYkVJc1IwRkJTeXhKUVVOTVFTeEhRVUZMYjBJc1IwRkJVM0pETEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUTNaQ2FVSXNSMEZCU3l4SlFVTk1RU3hIUVVGTGIwSXNSMEZCVTNKRExFVkJRVVVzUlVGQlJTeEhRVUZITEVsQlJYSkNhVUlzUjBGQlMyOUNMRWRCUVZOeVF5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVTjJRbWxDTEVkQlFVdHZRaXhIUVVGVGNrTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1IwRkZhRUpwUWl4RFFVTlVMRU5CUlVFc1UwRkJVM0ZDTEVkQlExQjBReXhGUVVOQmJVTXNSVUZEUVVrc1JVRkRRVU1zUlVGRFFVTXNSVUZEUVVNc1JVRkRRU3hEUVVOQkxFbEJRVWw2UWl4RlFVRkpiMElzUjBGQlUzSkRMRVZCUVVVc1JVRkJSU3hKUVVGSkxFVkJRM3BDTEU5QlFVbHRReXhIUVVOR2JFSXNSMEZCU3l4SlFVTk1RU3hIUVVGTGIwSXNSMEZCVTNKRExFVkJRVVVzUlVGQlJTeE5RVUZOTEVkQlEzQkNRU3hGUVVGRkxFVkJRVVVzVTBGQlZ5eEhRVUZMTEVOQlFVTjFReXhMUVVOMlFuUkNMRWRCUVVzc1RVRkhVRUVzUjBGQlMyOUNMRWRCUVZOeVF5eEZRVUZGTEVWQlFVVXNUVUZCVFN4SFFVZDBRa0VzUlVGQlJTeEZRVUZGTEZOQlFWY3NSMEZCU3l4RFFVRkRkVU1zUzBGRGRrSjBRaXhIUVVGTGIwSXNSMEZCVTNKRExFVkJRVVVzUlVGQlJTeE5RVUZOTEVkQlJYQkNRU3hGUVVGRkxFVkJRVVVzWTBGQlowSXNSMEZCU3l4RFFVRkRkME1zUzBGRE5VSjJRaXhIUVVGTExFbEJRMHhCTEVkQlFVdHZRaXhIUVVGVGNrTXNSVUZCUlN4RlFVRkZMRmxCUVdFc1EwRkJReXhKUVVsb1EzbERMRWxCUTBWNlF5eEZRVUZGTEdWQlFXbENRU3hGUVVGRkxGTkJRVmNzUjBGQlN5eERRVUZETUVNc1JVRkRlRU42UWl4SFFVRkxMRWxCUTBscVFpeEZRVUZGTEVWQlFVa3NSMEZEWm1sQ0xFZEJRVXNzU1VGRFRFRXNSMEZCUzI5Q0xFZEJRVk1zUzBGQlN5eE5RVUZOTEVOQlFVTnlReXhGUVVGRkxFVkJRVWtzUlVGQlJTeERRVUZETEVWQlEyNURhVUlzUjBGQlN5eEpRVU5NUVN4SFFVRkxiMElzUjBGQlV5eExRVUZMTEUxQlFVMHNRMEZCUTNKRExFVkJRVVVzUlVGQlNTeEZRVUZGTEVOQlFVTXNTVUZGYmtOcFFpeEhRVUZMTEVsQlEweEJMRWRCUVV0dlFpeEhRVUZUTEV0QlFVc3NUVUZCVFhKRExFVkJRVVVzUlVGQlNTeEZRVUZGTEVOQlFVTXNSVUZEYkVOcFFpeEhRVUZMTEVsQlEweEJMRWRCUVV0dlFpeEhRVUZUTEV0QlFVc3NUVUZCVFhKRExFVkJRVVVzUlVGQlNTeEZRVUZGTEVOQlFVTXNTVUZKYkVNd1F5eEpRVU5HZWtJc1IwRkJTeXhKUVVGTmFrSXNSVUZCUlN4TFFVRkxMRk5CUVZjc1MwRkZlRUpwUWl4RFFVTlVMRU5CUjBFc1NVRkJUVEJDTEVkQlFXOUNMRU5CUTNSQ0xFMUJRVThzUlVGRFVDeEpRVUZMTEVWQlEwd3NTMEZCVFN4RlFVTk9MRTlCUVZFc1JVRkRVaXhQUVVGUkxFVkJRMUlzV1VGQllTeERRVU5tTEVWQlEwRkRMRWRCUVhkQ0xFTkJRM1JDTEZkQlFWa3NSVUZEV2l4UlFVRlRMRVZCUTFRc1MwRkJUU3hGUVVOT0xFOUJRVkVzUlVGRFVpeFBRVUZSTEVWQlExSXNXVUZCWVN4RFFVTm1MRVZCUTBGRExFZEJRVEpDTEVOQlEzcENMRkZCUVZNc1JVRkRWQ3hMUVVGTkxFVkJRMDRzVDBGQlVTeEZRVU5TTEU5QlFWRXNSVUZEVWl4WlFVRmhMRU5CUTJZc1JVRkhTVU1zUjBGQlpTeERRVUZETEU5QlFWRXNVVUZCVXl4TlFVRlBMRTlCUVZFc1UwRkJWU3hUUVVGVkxHRkJRV0VzUlVGRGNrWkRMRWRCUVcxQ0xFTkJRMnBDTEZkQlEwRXNZVUZEUVN4VlFVTkJMRTlCUTBFc1UwRkRRU3hUUVVOQkxHRkJRMFlzUlVGRFFVTXNSMEZCYzBJc1EwRkJReXhQUVVGUkxGVkJRVmNzVDBGQlVTeFRRVUZWTEZOQlFWVXNZVUZCWVN4RlFVZHlSaXhUUVVGVFF5eEhRVUZqUXl4RlFVRk5MRU5CUXpOQ0xFbEJRVTFETEVWQlFXRXNRMEZEYWtJc1MwRkJUU3hQUVVOT0xFMUJRVThzVDBGRFVDeE5RVUZQTEZGQlExQXNUMEZCVVN4UlFVTlNMRWxCUVVzc1RVRkRUQ3hMUVVGTkxFMUJRMDRzUzBGQlRTeFBRVU5PTEUxQlFVOHNUMEZEVUN4UFFVRlJMRk5CUTFJc1VVRkJVeXhUUVVOVUxGRkJRVk1zVlVGRFZDeFRRVUZWTEZWQlExWXNUMEZCVVN4VFFVTlNMRkZCUVZNc1UwRkRWQ3haUVVGaExHTkJRMklzWVVGQll5eGpRVU5rTEZGQlFWTXNWVUZEVkN4VFFVRlZMRlZCUTFZc1YwRkJXU3hoUVVOYUxGbEJRV0VzWVVGRFlpeFpRVUZoTEdGQlEySXNVMEZCVlN4WFFVTldMRlZCUVZjc1YwRkRXQ3hSUVVGVExGTkJRMWdzUlVGQlJVUXNSVUZCU3l4WlFVRlpMRU5CUVVNc1JVRkZjRUlzUjBGQlNTeERRVUZEUXl4RlFVRlpMRTFCUVUwc1NVRkJTVU1zUjBGQmFVSkdMRU5CUVVrc1JVRkZhRVFzVDBGQlQwTXNRMEZEVkN4RFFVdEJMRk5CUVZORkxFZEJRVkV6UXl4RlFVRkxZeXhGUVVGTkxFTkJRekZDTEVsQlFVMTBReXhGUVVGUGIwVXNSMEZCWXpsQ0xFVkJRVXNzUzBGQlRTdENMRVZCUVZNc1YwRkJWeXhGUVVONFJFTXNSVUZCVFhaQ0xFZEJRVThzVjBGQlYxUXNRMEZCU1N4RlFVTTFRbWxETEVWQlFWRkdMRVZCUVZNc1NVRkJTU3hGUVVWdVFtcEVMRVZCUVVrc1JVRkhVaXhIUVVGTGIwUXNSVUZCV1doRUxFVkJRVWtzU1VGQlNTeEZRV1YyUWtvc1JVRkJTMjFFTEUxQlpuRkNMRU5CUXpGQ0xGRkJRVmRGTEV0QlFVdGlMRWRCUTFaWkxFVkJRVmxvUkN4RlFVRkphVVFzUTBGQlF5eERRVUZETEVsQlEzQkNha1FzUlVGQlNXbEVMRU5CUVVNc1JVRkJTV2hDTEVkQlFXdENaMElzUTBGQlF5eEhRVWxvUXl4SlFVRk5ReXhGUVVGVlF5eEhRVUYzUW01RUxFTkJRVWNzUjBGQlMyOUVMRWRCUVcxQ2NFUXNRMEZCUnl4RlFVTjBSU3hIUVVGSmEwUXNSVUZEUml4UFFVRlBha1VzUlVGQlV5eFJRVUZSYVVVc1EwRkJUeXhGUVVkcVF5eEpRVUZOUnl4RlFVRmxOMFVzUlVGQlN5eFBRVUZQZFVVc1EwRkJTeXhGUVVOMFF5eERRVUZEYmtRc1JVRkJTU3hEUVVGRExFVkJRVWxITEVkQlFWRkRMRVZCUVV0eFJDeEZRVUZqTjBVc1EwRkJTU3hEUVVNelF5eERRVWxCTEU5QlFVOHNTVUZCU1ZNc1JVRkJVeXhEUVVGRkxFZEJRVUZYTEVWQlFVa3NTMEZCUVhCQ0xFVkJRVTBzU1VGQlFYTkZMRVZCUVVzc1EwRkJSU3hEUVVGRExFTkJRekZETEVOQlJVRXNVMEZCVTFFc1IwRkJZVU1zUlVGQlQwTXNSVUZCU3pGRExFVkJRVTBzUTBGRGRFTXNTVUZCVFRKRExFVkJRVkZVTEVWQlFWbHNReXhGUVVGTExFdEJRVXNzUlVGQlNTeEhRVUZQUVN4RlFVRkxMRTFCUTJ4RVF5eEZRVUZUTEVOQlFVTlNMRVZCUVVkcFF5eExRVU5ZYWtNc1JVRkJTVzFFTEVkQlFWRnVSQ3hGUVVGSGEwUXNSMEZCVXpORExFVkJRVXNzVlVGQldTeEZRVUZKTEVWQlFVY3NSVUZCU1N4RlFVTnNRekJETEVWQlFVa3NTVUZCU1N4TlFVRk5NVU1zUTBGQlNTeEZRVUZGTEdGQlFXRkJMRU5CUVVrc1JVRkRkRU1zVDBGQlQxQXNSVUZCUjJsRExFTkJRVWtzUjBGRmFrTnRRaXhGUVVGVmJrSXNSMEZEU2pGQ0xFVkJRVXNzVlVGRFJqQkRMRVZCUVVrc1VVRkJVVVFzUlVGQlQyWXNRMEZCU1N4RlFVVmtMRVZCUkV4blFpeEZRVUZKTEZGQlFWRm9RaXhEUVVGSkxFVkJRVVVzUzBGQlMyVXNSVUZCVFN4UlFVRlJaaXhEUVVGSkxFVkJRVWRCTEVOQlFVa3NSVUZCUlN4SlFVRkpRU3hEUVVGSkxFVkJSelZFWjBJc1JVRkJTU3hMUVVGTFJDeEZRVUZQWml4RFFVRkpMRVZCUVVVc1NVRkJTVUVzUTBGQlNTeEZRVWt6UXl4SFFVRkpNVUlzUlVGQlN5eExRVU5RTEU5QlFVOURMRVZCUVU4MFF5eEZRVUZQTjBNc1JVRkJTeXhKUVVGSkxFVkJRVWRCTEVWQlFVc3NTVUZCU1N4RlFVYzFReXhSUVVGWE1FSXNTMEZCVVRGQ0xFVkJRVXNzVFVGQlR5eERRVU0zUWl4SlFVRk5PRU1zUlVGQlVVUXNSVUZCVDI1Q0xFTkJRVWtzUlVGRGVrSXNSMEZCU1N4TFFVRkxMRWxCUVVsdlFpeERRVUZMTEVkQlFVc3NSVUZEY2tJc1QwRkJUemRETEVWQlFVODJReXhGUVVGUGNFSXNRMEZCU1N4RFFVVTNRaXhEUVVOQkxFOUJRVTk2UWl4RlFVRlBkME1zUlVGQlVVTXNSVUZCVFN4SFFVRkxMRVZCUVVjeFF5eEZRVUZMTEUxQlFVMUJMRVZCUVVzc1RVRkJUU3hQUVVGVExFTkJRVU1zUTBGQlF5eERRVU4yUlN4RFFVVkJMRk5CUVZNclF5eEhRVUZUUXl4RlFVRlRMRU5CUTNwQ0xFbEJRVWxvUkN4RlFVRlBMRU5CUVVNc1JVRkRWbWxFTEVWQlEwWXNUMEZCU1VRc1JVRkJVU3hQUVVGVExFZEJRVXNzVDBGQlQwRXNSVUZCVVVFc1JVRkJVU3hQUVVGVExFTkJRVU1zUjBGQlRTeFZRVU12UkdoRUxFVkJRVTluUkN4RlFVRlJRU3hGUVVGUkxFOUJRVk1zUTBGQlF5eEZRVU5xUTBNc1JVRkJUeXhOUVVGTkxFdEJRVXRFTEVOQlFVOHNSVUZCUlN4TlFVRk5MRVZCUVVkQkxFVkJRVkVzVDBGQlV5eERRVUZETEVkQlJYUkVReXhGUVVGUExFMUJRVTBzUzBGQlMwUXNRMEZCVHl4RlFVVndRaXhEUVVGRGFFUXNSVUZCVFdsRUxFTkJRVWtzUTBGRGNFSXNRMEZ6UWtFc1NVRkJjVUk1UlN4RlFVRnlRaXhOUVVGeFFpdEZMRU5CUVZNc1EwRkpOVUlzV1VGQldVTXNSVUZCVVN4RFFVTnNRaXhKUVVGTmVrWXNSVUZCVDNsR0xFVkJRVThzVFVGQlVYQkNMRVZCUVZNc1dVRkZha05MTEVWQlEwWmxMRVZCUVU4c1ZVRkRUaXhQUVVGUExFMUJRVTFCTEVWQlFVOHNSVUZCUlN4RlFVRkpMRWxCUVVsNFJpeEhRVUZSTEdWQlFXVXNSVUZCU1N4UlFVTjRSRVFzUlVGQlN5eFJRVUZyUXl4TFFVRjRRa1FzUjBGQlowSkRMRU5CUVVrc1IwRkpka01zUzBGQlN5eEhRVUZMZDBVc1JVRkJXV2xDTEVWQlFVOHNSVUZCUlN4RlFVRkpjRUlzUlVGQlV5eEpRVUZKTEVWQlFVbHZRaXhGUVVGUExFZEJSVE5FTEVsQlFVa3hSQ3hGUVVGSkxFdEJRMDVxUWl4RlFVRkpMRXRCUTA0c1IwRkJTU3hEUVVGRE5FUXNSVUZIU0N4SFFVWnJRbVVzUlVGQlR5eExRVUZQUVN4RlFVRlBMRWxCUVVrc1MwRkJUeXhMUVVGTExFbEJRVTFCTEVWQlFVOHNTVUZCU1N4TFFVRkxMRTlCUVU5NlJpeERRVUZKTEVWQlIzUkdMRU5CUVVNclFpeEZRVUZIYWtJc1EwRkJReXhGUVVGSkxFTkJRVU15UlN4RlFVRlBMRWxCUVVrc1JVRkJSMEVzUlVGQlR5eEpRVUZKTEVOQlFVTXNUVUZETDBJc1EwRkRUQ3hKUVVGTlF5eEZRVUZMTVVZc1JVRkJTeXhQUVVGUExFdEJRVXNzUlVGQlJTeEZRVU01UWl0Q0xFVkJRVWxhTEVkQlFWRXNTMEZCU3l4SFFVRkpkVVVzUTBGQlJTeEZRVU4yUW1oQ0xFVkJRVlVzVDBGQlR5eE5RVUZOTTBNc1JVRkJSU3hKUVVGSkxFVkJRVWtzU1VGQlNUbENMRWRCUVZFc1pVRkJaU3hGUVVGSkxFdEJRMmhGT0VJc1JVRkJTVEpETEVWQlFWVXNTMEZCVHpORExFVkJRM0pDYWtJc1JVRkJTVFJFTEVWQlFWVXNTMEZCVDJkQ0xFTkJRM1pDTEVOQlRVWXNTMEZCU3l4TlFVRlJNVVlzUlVGSllpeExRVUZMTEVsQlFVMTVSaXhGUVVGUExFdEJRVTh4UXl4SFFVRlBMRTlCUVU4c1JVRkpka01zUzBGQlN5eFJRVUZWTWtJc1JVRkpaaXhMUVVGTExGTkJRVmNzUzBGSmFFSXNTMEZCU3l4RlFVRkpNME1zUlVGSlZDeExRVUZMTEVWQlFVbHFRaXhGUVVsVUxFdEJRVXNzWjBKQlFXdENMRVZCUTNwQ0xFTkJWMEVzVDBGQlR5eExRVUZOTEVOQlExZ3NUMEZCVHl4SlFVRkpNRVVzUlVGQlV5eERRVUZETEVOQlFVTXNRMEZEZUVJc1EwRjFRa0VzVDBGQlR5eFBRVUZSTEVOQlEySXNSMEZCVFN4RFFVRkRiRVFzUlVGQlRXbEVMRU5CUVVrc1JVRkJTVVlzUjBGQlV5eFRRVUZUTEVWQlEzSkRMRU5CUVVONFJDeEZRVUZOUXl4RlFVRlBOa1FzUlVGQlMwTXNSVUZCVFVNc1JVRkJVVU1zUlVGQlVVTXNRMEZCVnl4RlFVRkpVaXhGUVVNeFJDeFBRVUZQY0VJc1IwRkJVU3hEUVVGRkxFdEJRVUYwUXl4RlFVRk5MRTFCUVVGRExFVkJRVThzU1VGQlFUWkVMRVZCUVVzc1MwRkJRVU1zUlVGQlRTeFBRVUZCUXl4RlFVRlJMRTlCUVVGRExFVkJRVkVzV1VGQlFVTXNRMEZCV1N4RlFVRkhla1FzUTBGQlNTeERRVU01UlN4RFFUQkNRU3hQUVVGUExFdEJRVTBzUTBGRFdDeEhRVUZOTEVOQlFVTkJMRVZCUVUxcFJDeERRVUZKTEVWQlFVbEdMRWRCUVZNc1UwRkJVeXhGUVVOeVF5eERRVUZEZUVRc1JVRkJUVU1zUlVGQlR6WkVMRVZCUVV0RExFVkJRVTFETEVWQlFWRkRMRVZCUVZGRExFTkJRVmNzUlVGQlNWSXNSVUZGTVVRc1QwRkJRV3BFTEVWQlFVc3NTMEZCVHpCRUxFZEJRV2RDTEZsQlEzSkNOMElzUjBGQlVTeERRVUZGTEV0QlFVRjBReXhGUVVGTkxFMUJRVUZETEVWQlFVOHNTVUZCUVRaRUxFVkJRVXNzUzBGQlFVTXNSVUZCVFN4UFFVRkJReXhGUVVGUkxFOUJRVUZETEVWQlFWRXNXVUZCUVVNc1EwRkJXU3hGUVVGSGVrUXNRMEZCU1N4RFFVTTVSU3hEUVZOQkxFOUJRVThzVjBGQlZ6SkVMRVZCUVUxRExFVkJRVlVzUTBGQlF5eEZRVUZITEVOQlEzQkRMRWxCUVUwNVJTeEZRVUZMSzBVc1IwRkJUMFlzUTBGQlNTeEZRVUZKUVN4RlFVRkxMRkZCUVZFc1JVRkJTU3hKUVVNelF5eEhRVUZKTEU5QlFVOHNUVUZCVFRkRkxFTkJRVVVzUlVGRGFrSXNUMEZCVDI5RkxFVkJRVk1zVVVGQlVTeGxRVUZsTEVWQlIzcERMRWxCUVUxWkxFVkJRVmxvUXl4SFFVRmpPRUlzUlVGQlVTeExRVUZOTjBJc1JVRkJVeXhYUVVGWExFVkJRMnhGTEU5QlFVc3JRaXhGUVVGVkxGRkJTVklzU1VGQlNWb3NSVUZCVXl4RFFVTnNRaXhIUVVGSmNFVXNSVUZEU2l4TFFVRk5aMFlzUlVGRFRpeEpRVUZMY2tRc1IwRkJUeXhYUVVGWGJVUXNRMEZCVHl4RFFVTm9ReXhEUVVGRExFVkJVRkZXTEVWQlFWTXNVVUZCVVhwR0xFZEJRV2RDY1Vjc1EwRkJVeXhEUVVGRExFTkJVWFJFTEVOQldVRXNUMEZCVHl4WFFVRlhReXhGUVVGalNDeEZRVUZWTEVOQlFVTXNSVUZCUnl4RFFVTTFReXhIUVVGTFNTeEhRVUZUUkN4RFFVRlpMRVZCU1c1Q0xFOUJRVWxCTEVWQlFXVXNRMEZCUTNaSExFbEJRVmwxUnl4RlFVRmxka2NzUjBGRk4wTXdSaXhGUVVGVExGRkJRVkVzZDBKQlFYZENMRVZCUlhwRExFbEJRVWxCTEVWQlFWTXNRMEZEYkVJc1IwRkJTV0VzUlVGRFNpeExRVUZOYWtNc1IwRkJZemhDTEVWQlFWRXNTMEZCVFRkQ0xFVkJRVk1zVjBGQlZ5eEZRVU4wUkN4SlFVRkxkRUlzUjBGQlR5eFhRVUZYYlVRc1EwRkJUeXhEUVVOb1F5eERRVUZETEVWQldFUXNUVUZCVFN4SlFVRkpTeXhIUVVOU0xIbEVRVUY1UkN4UFFVRlBSaXhEUVVGWkxHVkJRV1ZCTEVOQlFWa3NSVUZEZWtjc1EwRlhTaXhEUVZsQkxFOUJRVThzV1VGQldVY3NSVUZCVTA0c1JVRkJWU3hEUVVGRExFVkJRVWNzUTBGRGVFTXNSMEZCUzBrc1IwRkJVMFVzUTBGQlR5eEZRVWR1UWl4UFFVRlBMRWxCUVVsb1FpeEZRVUZUTEVOQlEyeENMRWRCUVVsblFpeEZRVUZWTEVsQlEyUXNTMEZCVFhCRExFZEJRV000UWl4RlFVRlJMRXRCUVUwM1FpeEZRVUZUTEZkQlFWY3NSVUZEZEVRc1NVRkJTM1JDTEVkQlFVOHNWMEZCVjIxRUxFTkJRVThzUTBGRGFFTXNRMEZCUXl4RlFVNUVMRTFCUVUwc1NVRkJTVXNzUjBGQmNVSXNkME5CUVhkRExFTkJVVE5GTEVOQk9FSkJMRTlCUVU4c1YwRkJWeTlGTEVWQlFVdGpMRVZCUVU4c1EwRkJReXhGUVVGSExFTkJRMmhEWkN4RlFVRk5RU3hIUVVGUExFTkJRVU1zUlVGRFpDeEpRVUZOTkVVc1JVRkJXV2hETEVkQlFXTTVRaXhGUVVGTExFdEJRVTByUWl4RlFVRlRMRmRCUVZjc1JVRkRMMFFzUjBGQlNTeERRVUZESzBJc1JVRkJWU3hSUVVOaUxFOUJRVTlhTEVWQlFWTXNVVUZCVVhwR0xFZEJRV2RDY1Vjc1EwRkJVeXhEUVVGRExFVkJSM0JFTEVsQlFVMDNRaXhGUVVGUlJpeEZRVUZUTEVsQlFVa3NSVUZEZWtKUkxFVkJRV2RDVEN4RlFVRlpiRU1zUlVGQlN5eGpRVUZqTEVWQlJUTkRPRVFzUlVGQlZTeFBRVUZQTjBJc1EwRkJTeXhGUVVSMFFtcERMRVZCUVVzc1pVRkZWREpDTEVWQlFXRjNReXhIUVVGblFtcEdMRVZCUVV0MVF5eEZRVUZoTEVWQlF5OURNa01zUlVGQmEwSXNRMEZCUTJ4RExFVkJRVmxRTEVWQlFWY3NUMEZCVHl4RlFVTnFSREJETEVWQlFYRkNMRU5CUVVOdVF5eEZRVUZaVUN4RlFVRlhMRWxCUVVrc1JVRkRha1F5UXl4RlFVRnRRaXhEUVVGRGNFTXNSVUZCV1ZBc1JVRkJWeXhMUVVGTExFZEJRVXNzUTBGQlEwOHNSVUZCV1ZBc1JVRkJWeXhIUVVGSExFVkJRMmhHTkVNc1JVRkJhVUpHTEVkQlFYTkNReXhGUVVOMlEwVXNSVUZCYTBJM1F5eEZRVUZYTEZWQlFWbEJMRVZCUVZjc1YwRkRjRVJMTEVWQlFVMTJRaXhIUVVGUExGZEJRVmRVTEVOQlFVa3NSVUZST1VJc1NVRkJTM1ZGTEVkQlFXdENTQ3hKUVVGdlFra3NSVUZEZWtNc1RVRkJUU3hKUVVGSlF5eEhRVU5TTEhGRlFVTkdMRVZCUjBZc1IwRkJTVWdzUjBGQmIwSkdMRVZCUTNSQ0xFMUJRVTBzU1VGQlNVc3NSMEZCT0VJc2QwTkJRWGRETEVWQlIyeEdMRWxCUVUxRExFVkJRV05HTEVkQlFXOUNOME1zUlVGQlZ5eFRRVUZYTEVOQlFVTTBReXhGUVVjelJFa3NSVUZEUmtNc1JVRkRRVU1zUlVGQlUyaEhMRWRCUVZGdlJDeEZRVUZQVFN4RFFVRlpMRVZCUTJ4RGJVTXNSMEZEUmtNc1JVRkJVWEJFTEVkQlExSnhSQ3hGUVVGblFuaEVMRWRCUTJoQ2VVUXNSVUZCVXk5SExFZEJRV2RDSzBjc1EwRkJUU3hIUVVOMFFsUXNSMEZEVkU4c1JVRkJVVzVFTEVkQlExSnZSQ3hGUVVGblFuWkVMRWRCUTJoQ2QwUXNSVUZCVTBNc1IwRkJiVUpFTEVOQlFVMHNTVUZGYkVOR0xFVkJRVkZ5UkN4SFFVTlNjMFFzUlVGQlowSjZSQ3hKUVVsc1FpeEpRVUZKTkVRc1JVRkJZU3hIUVVOcVFpeFJRVUZYTlVNc1MwRkJTM2RETEVWQlFVOHNRMEZEY2tJc1NVRkJUVXNzUlVGQlNYSkVMRVZCUVZkUkxFTkJRVU1zUlVGRGFrSkVMRVZCUVZrNFF5eERRVUZETEVWQlJWQkVMRVZCUTFSd1JDeEZRVUZYVVN4RFFVRkRMRVZCUVVsNVF5eEZRVUZqZWtNc1EwRkJReXhGUVVVdlFsSXNSVUZCVjFFc1EwRkJReXhGUVVGSk1FTXNSVUZCVHpGRExFTkJRVU1zUlVGS2VFSTBReXhGUVVGaExFVkJUV3BDTEVOQlIwRXNTVUZCVFVVc1JVRkJjVUpRTEVWQlEzSkNVU3hIUVVGdFFuWkVMRU5CUVZVc1JVRkROMEo1UXl4RlFVTkJaU3hIUVVGelFuaEVMRU5CUVZVc1JVRkRhRU5WTEVkQlFYZENWaXhEUVVGVkxFVkJRM1JEVXl4RlFVRlZOa01zUjBGQmMwSXpReXhIUVVGdFFsZ3NRMEZCVlN4RlFVVXZSQ3hIUVVGSlV5eEZRVU5HTEU5QlFVOWpMRVZCUVZNc1VVRkJVV1FzUTBGQlR5eEZRVWxxUXl4SlFVRk5aMFFzUlVGQldWWXNSVUZEV2xjc1IwRkJaMEl4UkN4RFFVRlZMRVZCUXpGQ2VVTXNSVUZEUVd0Q0xFZEJRVzFDTTBRc1EwRkJWU3hGUVVNM1FrRXNSVUZEU2l4RFFVRkRORVFzUlVGQlUwTXNRMEZCVnl4RlFVRkpka2NzUjBGQlVXMUhMRVZCUVZjM1F5eEZRVUZqZFVJc1EwRkJVeXhGUVVOdVJUbEdMRVZCUVU4c1NVRkJTV3RHTEVWQlFWTXNRMEZEYkVJc1IwRkJTWEZETEVWQlEwb3NTMEZCVFhwQ0xFVkJRMDRzUlVGQlJ6QkNMRVZCUTBnc1NVRkJRWGhFTEVOQlEwWXNRMEZCUXl4RlFVZElMRTlCUVVsTUxFVkJRVmNzVTBGQlZ6UkRMRWRCUVd0Q2NrWXNSVUZCU1N4VlFVRlpiRUlzUlVGQlN5eFJRVU40Ukd0R0xFVkJRVk1zVVVGRFpDeHhRa0ZEUVN4MVEwRkJkVU4yUWl4RlFVRlhMRTlCUVU4c2EwSkJRV3RDTTBRc1JVRkJTeXhOUVVGTkxFTkJRVU1zUlVGRGVrWXNSVUZIUzBFc1EwRkRWQ3hEUVd0Q1FTeFBRVUZQTEZGQlFWRnJReXhGUVVGTlJpeEZRVUZQTEVOQlFVTXNSVUZCUnl4RFFVTTVRaXhIUVVGTkxFTkJRVU41Uml4RlFVRk5NVVlzUTBGQlZTeEZRVUZKTWtZc1IwRkJZWGhHTEVOQlFVa3NSVUZETlVNc1QwRkJUMHdzUjBGQmIwSTBSaXhGUVVGTk1VWXNSVUZCV1VNc1JVRkJUU3hYUVVGWlJTeERRVUZKTEVOQlEzSkZMRU5CWjBKQkxFOUJRVThzV1VGQldVRXNSVUZCVFVZc1JVRkJUeXhEUVVGRExFVkJRVWNzUTBGRGJFTXNSMEZCVFN4RFFVRkRlVVlzUlVGQlRURkdMRU5CUVZVc1JVRkJTVFJHTEVkQlFXbENla1lzUTBGQlNTeEZRVU5vUkN4UFFVRlBUQ3hIUVVGdlFqUkdMRVZCUVUweFJpeEZRVUZaUXl4RlFVRk5MRmRCUVZsRkxFTkJRVWtzUTBGRGNrVXNRMEZwUWtFc1QwRkJUeXhUUVVGVFFTeEZRVUZOUml4RlFVRlBMRU5CUVVNc1JVRkJSeXhEUVVNdlFpeEhRVUZOTEVOQlFVTjVSaXhGUVVGTk1VWXNRMEZCVlN4RlFVRkpOa1lzUjBGQll6RkdMRU5CUVVrc1JVRkROME1zVDBGQlQwd3NSMEZCYjBJMFJpeEZRVUZOTVVZc1JVRkJXVU1zUlVGQlRTeFBRVUZSUVN4RFFVRkpMRU5CUTJwRkxFTkJaVUVzVDBGQlR5eFhRVUZYUlN4RlFVRk5Na1lzUlVGQlN6ZEdMRVZCUVU4c1EwRkJReXhGUVVGSExFTkJRM1JETEVkQlFVbHJReXhGUVVGWmFFTXNRMEZCU1N4SFFVRkxaME1zUlVGQldUSkVMRU5CUVVjc1JVRkRkRU1zVFVGQlRTeEpRVUZKTlVJc1IwRkJjVUlzYTBSQlFXdEVMRVZCUjI1R0xFZEJRVTBzUTBGQlJTeFBRVUZCTmtJc1JVRkJVeXhMUVVGTkxHZENRVUZCUXl4RlFVRnJRaXhKUVVGTExFVkJRVWt2Uml4RlFVTm9SR2RITEVWQlFXTjJSaXhIUVVGUExGTkJRVk1zUTBGRE5VSXNUMEZCUVhGR0xFVkJRMEVzWjBKQlFVRkRMRVZCUTBFc1dVRkJZU3hGUVVObUxFTkJRVU1zUlVGRFJDeERRVUZEVGl4RlFVRk5NVVlzUlVGQldVa3NSVUZCWjBKcFF5eERRVUZQTEVWQlFVazJSQ3hIUVVGblFrUXNSVUZCWVRsR0xFVkJRVTB5Uml4RFFVRkhMRVZCUTNSR0xFOUJRVWw2UkN4RlFVTkxZeXhGUVVGVExGRkJRVkZrTEVOQlFVOHNSVUZGZUVKMlF5eEhRVUZ2UWpSR0xFVkJRVTB4Uml4RlFVRlpReXhGUVVGTkxGVkJRVlUyUml4RFFVRkhMRWRCUVVrelJpeEZRVUZOUXl4RFFVRmpMRU5CUlRWR0xFTkJTMEVzVDBGQlR5eFhRVUZYUkN4RlFVRk5Na1lzUlVGQlN6ZEdMRVZCUVU4c1EwRkJReXhGUVVGSExFTkJRM1JETEU5QlFVOXJSQ3hGUVVGVExGZEJRVmRvUkN4RlFVRk5Na1lzUlVGQlN6ZEdMRU5CUVVrc1EwRkROVU1zUTBGelFrRXNUMEZCVHl4UlFVRlJSU3hGUVVGTlJpeEZRVUZQTEVOQlFVTXNSVUZCUnl4RFFVTTVRaXhIUVVGTkxFTkJRVU41Uml4RlFVRk5NVVlzUTBGQlZTeEZRVUZKYlVjc1IwRkJVMmhITEVOQlFVa3NSVUZEZUVNc1QwRkJUMHdzUjBGQmIwSTBSaXhGUVVGTk1VWXNSVUZCV1VNc1JVRkJUU3hOUVVGUFJTeERRVUZKTEVOQlEyaEZMRU5CVVVFc1QwRkJUeXhSUVVGUmFVY3NSVUZCVVVNc1JVRkJZeXhMUVVGTkxFTkJRM3BETEVkQlFVa3NRMEZCUTBRc1JVRkRTQ3hOUVVGTkxFbEJRVWxzUXl4SFFVRnhRaXhyUkVGQmEwUXNSVUZIYmtZc1NVRkJUVGRDTEVWQlFWVXJSQ3hoUVVGclFuaEpMRWRCUVZWM1NTeEZRVUZUTEVsQlFVbDRTU3hIUVVGUmQwa3NSVUZCVVVNc1EwRkJWeXhGUVVWd1JpeEhRVUZKY2tVc1JVRkJVeXhsUVVOWUxFMUJRVTBzU1VGQlNYTkZMRWRCUVhGQ2FrVXNRMEZCVHl4RlFVVjBReXhQUVVGUExFbEJRVWxqTEVWQlFWTXNRMEZCUlN4UlFVRkJaQ3hEUVVGUkxFTkJRVU1zUTBGRmJrTXNRMEZQUVN4UFFVRlBMRmRCUVZjMVJDeEZRVUZITEVOQlEyNUNMRTlCUVZGQkxFZEJRVXRCTEVWQlFVVXNhVUpCUVc5Q0xFVkJRM0pETEVOQlYwRXNTVUZCU1d0RUxFVkJRVTBzUTBGRFVpeFBRVUZQTEV0QlFVdEJMRU5CUVVrc1EwRkRiRUlzUTBGUlFTeEpRVUZKTEZOQlFWVXNRMEZEV2l4UFFVRlBMRXRCUVVzc1ZVRkJXU3hKUVVNeFFpeERRVTFCTEVsQlFVa3NaVUZCWjBJc1EwRkRiRUlzVDBGQlR5eExRVUZMTEZGQlFWVXNTMEZCU3l4UlFVRlJMRTlCUVZNc1NVRkRPVU1zUTBGTlFTeEpRVUZKTEc5Q1FVRnhRaXhEUVVOMlFpeFBRVUZQTEV0QlFVc3NVVUZCVlN4TFFVRkxMRkZCUVZFc1dVRkJZeXhKUVVOdVJDeERRVTlCTEVsQlFVa3NVVUZCVXl4RFFVTllMRTlCUVU4c1MwRkJTeXhSUVVGVkxFdEJRVXNzU1VGQlNTeFBRVUZUTEVsQlF6RkRMRU5CVDBFc1NVRkJTU3hwUWtGQmEwSXNRMEZEY0VJc1QwRkJUeXhMUVVGTExGRkJRVlVzUzBGQlN5eEpRVUZKTEdkQ1FVRnJRaXhKUVVOdVJDeERRVTlCTEVsQlFVa3NaMEpCUVdsQ0xFTkJRMjVDTEU5QlFVOHNTMEZCU3l4UlFVRlZMRXRCUVVzc1NVRkJTU3hsUVVGcFFpeEpRVU5zUkN4RFFVMUJMRWxCUVVrc1RVRkJUeXhEUVVOVUxFOUJRVThzUzBGQlN5eExRVU5rTEVOQlRVRXNTVUZCU1N4VlFVRlhMRU5CUTJJc1QwRkJUeXhMUVVGTExGRkJRVlVzUzBGQlN5eExRVUZMTEV0QlFVOHNTVUZEZWtNc1EwRlBRU3hKUVVGSkxFMUJRVThzUTBGRFZDeFBRVUZQTEV0QlFVc3NVVUZCVlN4TFFVRkxMRVZCUVVVc1MwRkJUeXhIUVVOMFF5eERRVTlCTEVsQlFVa3NVMEZCVlN4RFFVTmFMRTlCUVU4c1MwRkJTeXhSUVVGVkxFdEJRVXNzUzBGQlN5eExRVUZMTEVWQlFVVXNUVUZCVVN4RFFVRkRMRVZCUVVrc1IwRkRkRVFzUTBGUFFTeEpRVUZKTEU5QlFWRXNRMEZEVml4UFFVRlBMRXRCUVVzc1VVRkJWU3hMUVVGTExFVkJRVVVzVFVGQlVTeEhRVU4yUXl4RFFVOUJMRWxCUVVrc1MwRkJUU3hEUVVOU0xFOUJRVThzUzBGQlN5eFJRVUZWTEV0QlFVc3NSVUZCUlN4SlFVRk5MRWRCUTNKRExFTkJUMEVzU1VGQlNTeE5RVUZQTEVOQlExUXNUMEZCVHl4TFFVRkxMRkZCUVZVc1MwRkJTeXhGUVVGRkxFdEJRVThzUjBGRGRFTXNRMEZQUVN4SlFVRkpMRkZCUVZNc1EwRkRXQ3hQUVVGUExFdEJRVXNzVVVGQlZTeExRVUZMTEVWQlFVVXNUMEZCVXl4SFFVTjRReXhEUVU5QkxFbEJRVWtzVVVGQlV5eERRVU5ZTEU5QlFVOHNTMEZCU3l4UlFVRlZMRXRCUVVzc1JVRkJSU3hQUVVGVExFZEJRM2hETEVOQlQwRXNTVUZCU1N4aFFVRmpMRU5CUTJoQ0xFOUJRVThzUzBGQlN5eFJRVUZWTEV0QlFVc3NSVUZCUlN4WlFVRmpMRWRCUXpkRExFTkJVVUVzU1VGQlNTeFZRVUZYTEVOQlEySXNUMEZCVHl4TFFVRkxMRkZCUVZVNVJDeEhRVUYxUWl4SlFVRkpMRVZCUVVVc1UwRkJWeXhIUVVOb1JTeERRVkZCTEVsQlFVa3NXVUZCWVN4RFFVTm1MRTlCUVU4c1MwRkJTeXhSUVVGVlFTeEhRVUYxUWl4SlFVRkpMRVZCUVVVc1YwRkJZU3hIUVVOc1JTeERRVk5CTEVsQlFVa3NVMEZCVlN4RFFVTmFMRTlCUVU4c1MwRkJTeXhSUVVGVlFTeEhRVUYxUWl4SlFVRkpMRVZCUVVVc1VVRkJWU3hIUVVNdlJDeERRVTlCTEVsQlFVa3NVMEZCVlN4RFFVTmFMRTlCUVU4c1MwRkJTeXhSUVVGVmEwZ3NSMEZCYlVJc1MwRkJTeXhEUVVGRExFVkJRVVVzVVVGQlZTeEhRVU0zUkN4RFFWRkJMRWxCUVVrc1dVRkJZU3hEUVVObUxFOUJRVThzUzBGQlN5eFJRVUZWZDBJc1IwRkJTeXhQUVVGUExGRkJRVk1zUTBGQlJTeFBRVUZSTEV0QlFVc3NSMEZCU1N4RFFVRkRMRVZCUVVVc1MwRkJTeXhOUVVGUkxFTkJRVU1zUlVGQlNTeEpRVU55Uml4RFFWRkJMRWxCUVVrc1YwRkJXU3hEUVVOa0xFOUJRVThzUzBGQlN5eFJRVUZWUVN4SFFVRkxMRTlCUVU4c1QwRkJVU3hEUVVGRkxFOUJRVkVzUzBGQlN5eEhRVUZKTEVOQlFVTXNSVUZCUlN4TFFVRkxMRTFCUVZFc1EwRkJReXhGUVVGSkxFbEJRM0JHTEVOQlVVRXNTVUZCU1N4alFVRmxMRU5CUTJwQ0xFOUJRVThzUzBGQlN5eFJRVUZWUVN4SFFVRkxMRk5CUVZNc1VVRkJVeXhEUVVGRkxFOUJRVkVzUzBGQlN5eEhRVUZKTEVOQlFVTXNSVUZCUlN4TFFVRkxMRkZCUVZVc1EwRkJReXhGUVVGSkxFbEJRM3BHTEVOQlVVRXNTVUZCU1N4aFFVRmpMRU5CUTJoQ0xFOUJRVThzUzBGQlN5eFJRVUZWUVN4SFFVRkxMRk5CUVZNc1QwRkJVU3hEUVVGRkxFOUJRVkVzUzBGQlN5eEhRVUZKTEVOQlFVTXNSVUZCUlN4TFFVRkxMRkZCUVZVc1EwRkJReXhGUVVGSkxFbEJRM2hHTEVOQlVVRXNTVUZCU1N4UlFVRlRMRU5CUTFnc1QwRkJUeXhMUVVGTExGRkJRVlVzUTBGQlF5eExRVUZMTEVWQlFVa3NSMEZEYkVNc1EwRlBRU3hKUVVGSkxHbENRVUZyUWl4RFFVTndRaXhQUVVGSkxFdEJRVXNzVVVGRFFTeExRVUZMTEV0QlFVc3NWMEZCVnl4TFFVRkxMRWRCUVVrc1EwRkRia01zVDBGQlVTeFJRVU5TTEU5QlFWRXNTMEZCU3l4TlFVTm1MRU5CUVVNc1JVRkZUU3hKUVVWWUxFTkJUMEVzU1VGQlNTeG5Ra0ZCYVVJc1EwRkRia0lzVDBGQlNTeExRVUZMTEZGQlEwRXNTMEZCU3l4TFFVRkxMRmRCUVZjc1MwRkJTeXhIUVVGSkxFTkJRMjVETEU5QlFWRXNUMEZEVWl4UFFVRlJMRXRCUVVzc1RVRkRaaXhEUVVGRExFVkJSVTBzU1VGRldDeERRVTFCTEVsQlFVa3NaVUZCWjBJc1EwRkRiRUlzVDBGQlR5eExRVUZMTEZGQlFWVXNTMEZCU3l4TFFVRkxMRmxCUVdNc1NVRkRhRVFzUTBGTlFTeEpRVUZKTEZOQlFWVXNRMEZEV2l4UFFVRkpMRXRCUVVzc1kwRkRRU3hIUVVkTUxFdEJRVXNzVDBGQlV5eExRVUZMTEVsQlFVa3NRMEZCUlN4TlFVRlBMRVZCUVVjc1NVRkJTeXhEUVVGRkxFTkJRVU1zUlVGQlJTeFJRVU0zUXl4TFFVRkxMRTlCUVZNc1MwRkJTeXhKUVVGSkxFTkJRVVVzVFVGQlR5eERRVUZGTEVOQlFVTXNSVUZCUlN4TlFVY3pReXhEUVZGQkxFbEJRVWtzWTBGQlpTeERRVU5xUWl4UFFVRlBReXhIUVVGWExFdEJRVXNzU1VGQlNTeERRVU0zUWl4RFFWRkJMRWxCUVVrc1lVRkJZeXhEUVVOb1FpeFBRVUZQTjBjc1IwRkJXU3hMUVVGTExFdEJRVTBzUzBGQlN5eExRVUZMTEVOQlF6RkRMRU5CVVVFc1NVRkJTU3haUVVGaExFTkJRMllzVDBGQlR5eExRVUZMTEZGQlFWVTRSeXhIUVVGWExFdEJRVXNzU1VGQlNTeEZRVUZKTEVkQlEyaEVMRU5CVTBFc1NVRkJTU3hwUWtGQmEwSXNRMEZEY0VJc1QwRkJUeXhMUVVGTExGRkJRVlZETEVkQlFXZENMRXRCUVVzc1VVRkJVU3hGUVVGSkxFZEJRM3BFTEVOQlVVRXNjMEpCUVhOQ2VrY3NSVUZCVHl4RFFVRkRMRVZCUVVjc1EwRkRMMElzUjBGQlRTeERRVUZGTEU5QlFVRTRSaXhGUVVGUkxHZENRVUZCUXl4RlFVRnBRaXhUUVVGQlZ5eERRVUZUTEVWQlFVbHNSeXhIUVVGVkxFOUJRM1JFTEV0QlFVc3NTVUZCU1N4TlFVRk5VaXhEUVVGSkxFVkJRMjVDUVN4RFFVTkdMRVZCUVVVc1owSkJRV2RDTEVsQlFVa3NSVUZEZEVJc1RVRkJUeXhEUVVGRkxFOUJRVUU0Uml4RlFVRlJMR2RDUVVGQlF5eEZRVUZwUWl4bFFVRm5RbGNzUTBGQlV5eERRVU0zUkN4RFFWbEJMRTFCUVUwelNDeEZRVUZUTEVWQlFVZHBRaXhGUVVGUExFTkJRVU1zUlVGQlJ5eERRVU16UWl4UFFVRlBMRXRCUVVzc1VVRkJVVEJFTEVkQlFXZENMRk5CUVZNelJTeERRVUZOTEVWQlFVZHBRaXhEUVVGSkxFTkJRelZFTEVOQlVVRXNVMEZCVlN4RFFVTlNMRTlCUVU4c1MwRkJTeXhSUVVGUkswSXNSVUZCVXl4WFFVRlhMRU5CUXpGRExFTkJWMEVzVVVGQlVYSkZMRVZCUVUwc1EwRkJSU3hqUVVGQmFVb3NSVUZCWjBJc1IwRkJUeXhwUWtGQlFVTXNSVUZCYlVJc1JVRkJUU3hGUVVGSkxFTkJRVU1zUlVGQlJ5eERRVVYwUlN4SFFVUkJiRW9zUlVGQlQyOUZMRWRCUVdOd1JTeEZRVUZOY1VVc1JVRkJVeXhYUVVGWExFVkJRek5EY2tVc1JVRkJTeXhQUVVGUExFdEJRVXNzU1VGQlNTeEZRVU4yUWl4UFFVRlBMRXRCUTBZc1IwRkJTMEVzUlVGQlN5eFJRVVZXTEVOQlEwd3NTVUZCU1cxS0xFVkJRVkVzUzBGQlN5eEhRVU5xUWl4SFFVRkpSaXhIUVVGcFFrTXNSVUZCYTBJc1EwRkRja01zU1VGQlRVVXNSVUZCWTNCS0xFVkJRVXNzVDBGQlR5eExRVUZMTEVWQlFVVXNSVUZEYWtOeFNpeEZRVUZSTEV0QlFVc3NVMEZCVXl4RlFVTTFRaXhEUVVGRFJpeERRVUZMTEVWQlFVazFTQ3hIUVVGUk9FZ3NSVUZCVDBRc1JVRkJZWEJLTEVOQlFVa3NRMEZETlVNc1EwRkRRU3hQUVVGUFN5eEhRVUZOTEV0QlFVMHNRMEZCUlN4SFFVRkpPRWtzUlVGQlR5eExRVUZCYmtvc1EwRkJTeXhEUVVGRExFTkJRM2hETEV0QlZFVXNVVUZCVDNkR0xFVkJRVk1zVVVGQlVYcEdMRWRCUVdkQ1F5eERRVUZKTEVOQlFVTXNRMEZWYWtRc1EwRlJRU3haUVVGWkxFTkJRVVVzVDBGQlFXOUpMRVZCUVZFc1owSkJRVUZETEVWQlFXbENMR1ZCUVVGcFFpeERRVUZsTEVWQlFVa3NRMEZCUXl4RlFVRkhMRU5CUXpWRUxFbEJRVTFvUml4RlFVRk5MRXRCUVVzc1NVRkJTU3hOUVVGTkxFTkJRVVVzVDBGQlFUaEVMRVZCUVZFc1owSkJRVUZETEVWQlFXbENMR1ZCUVVGcFFpeERRVUZsTEVOQlFVTXNSVUZEZEVVc1QwRkJUMnBLTEVkQlFVMHNTMEZCVFN4RFFVRkZMRWxCUVVGcFJTeERRVUZKTEVOQlFVTXNRMEZETlVJc1EwRlJRU3hWUVVGVk9FUXNSVUZCVVN4RFFVTm9RaXhQUVVGUExFdEJRVXNzV1VGQldTeERRVUZGTEU5QlFVRkJMRU5CUVU4c1EwRkJReXhEUVVOd1F5eERRVmxCTEVsQlFVbHRRaXhGUVVGUkxFTkJRMVlzUjBGQlNTeERRVUZETEV0QlFVc3NVVUZCVXl4UFFVRlBMRXRCUlRGQ0xFbEJRVTEwUml4RlFVRmhkME1zUjBGQlowSTRReXhGUVVGUmVFWXNSVUZCWVN4RlFVTjBSSGxHTEVWQlEwVXNRMEZCUTJoR0xFVkJRVmxRTEVWQlFWY3NVVUZCVVN4SFFVTm9ReXhEUVVGRFR5eEZRVUZaVUN4RlFVRlhMRlZCUVZVc1IwRkRiRU1zUTBGQlEwOHNSVUZCV1ZBc1JVRkJWeXhQUVVGUExFVkJRMnBEZVVNc1JVRkJhMElzUTBGQlEyeERMRVZCUVZsUUxFVkJRVmNzVDBGQlR5eEZRVU5xUkRCRExFVkJRWEZDTEVOQlFVTnVReXhGUVVGWlVDeEZRVUZYTEVsQlFVa3NSVUZEYWtReVF5eEZRVUZ0UWl4RFFVRkRjRU1zUlVGQldWQXNSVUZCVnl4TFFVRkxMRWRCUVVzc1EwRkJRMDhzUlVGQldWQXNSVUZCVnl4SFFVRkhMRVZCUTJoR05FTXNSVUZCYVVKR0xFZEJRWE5DUXl4RlFVTjJRMFVzUlVGQmEwSTNReXhGUVVGWExGVkJRVmxCTEVWQlFWY3NWMEZGZEVRc1NVRkJTelJETEVkQlFXdENTQ3hKUVVGdlFra3NSVUZEZWtNc1RVRkJUU3hKUVVGSlF5eEhRVU5TTEhGRlFVTkdMRVZCUjBZc1IwRkJTVWdzUjBGQmIwSkdMRVZCUTNSQ0xFMUJRVTBzU1VGQlNVc3NSMEZCT0VJc2QwTkJRWGRETEVWQlIyeEdMRWxCUVVrd1F5eEZRVU5CUkN4RlFVTkdReXhGUVVGUk9VSXNSMEZCWjBKb1NDeEpRVUZCTEVkQlFVdFFMRWRCUVdkQ0xFdEJRVXNzUTBGQlF5eEhRVUZOTmtRc1JVRkJXU3hGUVVNelJFOHNSVUZCV1ZBc1JVRkJWeXhQUVVGUExFZEJSM2hEZDBZc1JVRkJVVGxKTEVsQlFVRXNSMEZCU3l4TFFVRkxMRk5CUVZNc1IwRkJUWE5FTEVkQlNUZENUeXhGUVVGWlVDeEZRVUZYTEVkQlFVY3NTVUZETlVKM1JpeEZRVUZOTEVsQlFVMHNTMEZCU3l4SlFVRkpla2dzUjBGQldYbElMRVZCUVUwc1MwRkJUVUVzUlVGQlRTeExRVUZMTEVWQlFVZEJMRVZCUVUwc1IwRkJSeXhKUVZCMFJVRXNSVUZCVVRkQ0xFZEJRVzFDYWtnc1NVRkJRU3hIUVVGTGVVY3NSMEZCYlVJc1MwRkJTeXhEUVVGRExFZEJRVTF1UkN4RlFVRlpMRVZCVnpkRkxFZEJRVTBzUTBGQlF6ZERMRVZCUVVsT0xFTkJRVU1zUlVGQlNWTXNSMEZCVVd0SkxFVkJRVThzUzBGQlN5eEZRVUZITEV0QlFVc3NTVUZCU1N4RlFVTm9SQ3hQUVVGUGNFb3NSMEZCVFN4TFFVRk5MRU5CUVVVc1IwRkJRV1VzUlVGQlNTeEZRVUZCVGl4RFFVRkZMRU5CUVVNc1EwRkRPVUlzUTBGbFFTeExRVUZMTkVrc1JVRkJWU3hEUVVOaUxFZEJRVWtzUTBGQlF5eExRVUZMTEZGQlFWTXNUMEZCVHl4TFFVTXhRaXhKUVVGTkwwZ3NSVUZCVFU4c1JVRkJVeXhwUWtGQmFVSjNTQ3hEUVVGUkxFVkJRemxETEU5QlFVOXlTaXhIUVVGTkxFdEJRVTF4UWl4SFFVRlhMRXRCUVUxRExFTkJRVWNzUTBGQlF5eERRVU14UXl4RFFWRkJMRTFCUVUwclNDeEZRVUZWTEVOQlEyUXNSMEZCU1N4RFFVRkRMRXRCUVVzc1VVRkJVeXhQUVVGUExFdEJRekZDTEVsQlFVMHZTQ3hGUVVGTlR5eEZRVUZUTEdsQ1FVRnBRbmRJTEVOQlFWRXNSVUZCUlN4UFFVRlBMRVZCUTNaRUxFOUJRVTl5U2l4SFFVRk5MRXRCUVUxeFFpeEhRVUZYTEV0QlFVMURMRU5CUVVjc1EwRkJReXhEUVVNeFF5eERRVmxCTEZGQlFWRnhReXhGUVVGTkxFTkJRMW9zUjBGQlNTeERRVUZETEV0QlFVc3NVVUZCVXl4UFFVRlBMRXRCUXpGQ0xFbEJRVTFzUkN4RlFVRkpMRU5CUVVNc1JVRkRWRFpKTEVWQlFXbENla2dzUlVGQlV5eGpRVUZqT0VJc1EwRkJTU3hGUVVNNVF5eFBRVUZSTWtZc1JVRkJaMElzUTBGRGRFSXNTVUZCU3l4UlFVTklOMGtzUlVGQlJTeE5RVUZSTEVWQlJWb3NTVUZCU3l4WFFVTk1MRWxCUVVzc1UwRkRTRUVzUlVGQlJTeEpRVUZOTEVWQlJWWXNTVUZCU3l4UlFVTk1MRWxCUVVzc1QwRkRTRUVzUlVGQlJTeExRVUZQTEVWQlJWZ3NTVUZCU3l4UlFVTklRU3hGUVVGRkxFOUJRVk1zUlVGRllpeEpRVUZMTEZWQlEwaEJMRVZCUVVVc1QwRkJVeXhGUVVWaUxFbEJRVXNzVlVGRFNFRXNSVUZCUlN4WlFVRmpMRVZCUTJoQ0xFMUJRMFlzU1VGQlN5eGxRVU5JTEV0QlJVb3NRMEZOUVN4SFFVcEpOa2tzU1VGQmJVSXNWVUZEY2tJM1NTeEZRVUZGTEZGQlFWVXNSMEZIVmpaSkxFbEJRVzFDTEZkQlFWa3NRMEZEYWtNc1NVRkJUVU1zUlVGQlNTeExRVUZMTEV0QlFVc3NTMEZCU3l4TlFVRlJMRU5CUVVNc1JVRkRiRU01U1N4RlFVRkZMRTlCUVZNNFNTeEZRVUZKTEVkQlFVc3NSVUZCU1N4RFFVTXhRaXhEUVVWQkxFOUJRVThzUzBGQlN5eEpRVUZKT1Vrc1EwRkJReXhEUVVOdVFpeERRVmxCTEUxQlFVMXJSQ3hGUVVGTkxFTkJRMVlzVDBGQlR5eExRVUZMTEZGQlExSXNTMEZCU3l4TFFVRkxMRU5CUVVVc1EwRkJRMEVzUTBGQlNTeEZRVUZITEVOQlFVVXNRMEZCUXl4RlFVTndRaXhSUVVGUlFTeERRVUZKTEVWQlExb3NUVUZCVFN4RFFVRkRMRVZCUTFZc1NVRkRUaXhEUVdkQ1FTeFRRVUZUYlVVc1JVRkJTemRHTEVWQlFVOHNRMEZCUXl4RlFVRkhMRU5CUTNaQ0xFOUJRVThzUzBGQlN5eFJRVU5TVVN4SFFVRlZMRTlCUVU4c1MwRkJTeXhKUVVGSkxHTkJRV05TTEVOQlFVa3NRMEZCUXl4RlFVRkZMSGxDUVVGNVFpeExRVUZOTmtZc1EwRkJSeXhGUVVOcVJuUkpMRVZCUTA0c1EwRnhRa0VzWlVGQlpXZExMRVZCUVhGQ1F5eEhRVUZaZUVnc1JVRkJUeXhEUVVGRExFVkJRVWNzUTBGRGVrUXNUMEZCVHl4TFFVRkxMRkZCUTFKUkxFZEJRVlVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFZJc1EwRkJTU3hGUVVGSGRVZ3NRMEZCVlN4RlFVRkZMR1ZCUVdVc1NVRkJTU3hGUVVOMFJXaExMRVZCUTA0c1EwRmxRU3hqUVVGamVVTXNSVUZCVHl4RFFVRkRMRVZCUVVjc1EwRkRka0lzVDBGQlR5eExRVUZMTEZGQlExSlJMRWRCUVZVc1QwRkJUeXhMUVVGTExFbEJRVWtzVFVGQlRWSXNRMEZCU1N4RlFVRkhRU3hEUVVGSkxFVkJRVVVzYjBKQlFXOUNMRWxCUVVrc1JVRkRja1VzUTBGQlF5eERRVU5RTEVOQlowSkJMRTFCUVUwc1EwRkRTaXhQUVVGQlF5eEZRVUZUTEZkQlExUXNaMEpCUVVGakxFVkJRV3RDTEVkQlEyeENMSEZDUVVGQlF5eEZRVUYxUWl4SFFVTjJRaXhqUVVGQlF5eEZRVUZuUWl4SFFVTm9RaXhoUVVGQlF5eEZRVUZsTEVWQlEycENMRVZCUVVrc1EwRkJReXhGUVVGSExFTkJRMDRzUjBGQlNTeERRVUZETEV0QlFVc3NVVUZEVWl4UFFVRlBMRXRCUjFRc1NVRkJUWFZITEVWQlFVMTRTQ3hKUVVGWExGZEJSVzVDVWl4RlFVRkphVUlzUjBGQlZTeExRVUZOSzBjc1EwRkJSeXhGUVVNelFpeFBRVUZCYUVrc1IwRkJTeXhKUVVOTVFTeEhRVUZMY1VJc1IwRkJWU3hMUVVGTk1rY3NSVUZCU3pGSExFVkJRV2xDUXl4RlFVRnpRa01zUlVGQlpVTXNRMEZCV1N4RlFVTnlSbnBDTEVOQlExUXNRMEZWUVN4VlFVRlZMRU5CUVVVc1QwRkJRVkVzUlVGQlV5eFZRVUZYTEVWQlFVa3NRMEZCUXl4RlFVRkhMRU5CUTNSRExFOUJRVXNzUzBGQlN5eFJRVWxJVXl4SFFVRlZMRXRCUVUxVUxFbEJRVmNzVlVGQlZTeEZRVWh1UXl4SlFVbFlMRU5CVDBFc1pVRkJaMElzUTBGRFpDeFBRVUZQU3l4SFFVRmhMRXRCUVUwc1kwRkJZeXhEUVVNeFF5eERRV2xDUVN4VlFVRlZMRU5CUTFJc2NVSkJRVUZWTEVWQlFYVkNMRWRCUTNaQ0xHZENRVUZCUkN4RlFVRnJRaXhIUVVOc1FpeGpRVUZCUlN4RlFVRm5RaXhIUVVOb1FpeGpRVUZCZVVjc1JVRkJaMElzUjBGRGFFSXNZVUZCUVhoSExFVkJRV1VzUjBGRFppeFBRVUZCYWtJc1JVRkJVeXhWUVVOWUxFVkJRVWtzUTBGQlF5eEZRVUZITEVOQlEwNHNUMEZCU3l4TFFVRkxMRk5CU1VaNVNDeEZRVUZuUWl4SlFVRk5MRWxCUnpWQ05VY3NSMEZEUlN4TFFVTkJZaXhKUVVGWExGZEJRMWhqTEVWQlEwRkRMRVZCUTBGRExFVkJRMEZETEVOQlEwWXNSVUZpVHl4SlFXVllMRU5CVVVFc1YwRkJXU3hEUVVOV0xFOUJRVTlhTEVkQlFXRXNTMEZCVFN4blEwRkJhVU1zUlVGQlN5eERRVU5zUlN4RFFWVkJMRkZCUVZNc1EwRkRVQ3hQUVVGUFFTeEhRVUZoTEV0QlFVc3NUVUZCVFN4RlFVRkhMR2xEUVVGcFF5eERRVU55UlN4RFFVOUJMRmRCUVZrc1EwRkRWaXhQUVVGTExFdEJRVXNzVVVGSFNFa3NSMEZCVlN4TFFVRk5MRVZCUVVrc1JVRkdiRUlzU1VGSFdDeERRV05CTEZWQlFWVXNRMEZCUlN4alFVRkJUeXhGUVVGblFpeEhRVUZOTEZsQlFVRXdSeXhGUVVGakxFZEJRVThzYlVKQlFVRkRMRVZCUVhGQ0xFVkJRVXNzUlVGQlNTeERRVUZETEVWQlFVY3NRMEZEZGtZc1NVRkJTUzlDTEVWQlFVMHNaVUZGVml4UFFVRkpPRUlzUjBGQlpURkhMRXRCUTJJeVJ5eEpRVU5HTDBJc1IwRkJUeXhMUVVWTU9FSXNSVUZEUmpsQ0xFZEJRVThzU1VGRFJUVkZMRWxCUTFRMFJTeEhRVUZQTEU5QlNVcDJSaXhIUVVGaExFdEJRVTExUml4RlFVRkxMRVZCUVVrc1EwRkRja01zUTBGalFTeE5RVUZOTjBZc1JVRkJUeXhEUVVGRExFVkJRVWNzUTBGRFppeFBRVUZMTEV0QlFVc3NVVUZKU0N4SFFVRkhMRXRCUVVzc1ZVRkJWU3hEUVVGRExFbEJRVWtzUzBGQlN5eFZRVUZWUVN4RFFVRkpMRU5CUVVNc1IwRklla01zU1VGSldDeERRVTFCTEZWQlFWY3NRMEZEVkN4UFFVRlBMRXRCUVVzc1VVRkJWU3hMUVVGTExFMUJRVTBzUlVGQlNYcERMRVZCUTNaRExFTkJUVUVzVTBGQlZTeERRVU5TTEU5QlFVOHNTMEZCU3l4VFFVRlRMRU5CUTNaQ0xFTkJUVUVzVlVGQlZ5eERRVU5VTEU5QlFVOHNTMEZCU3l4UlFVRlZMRXRCUVVzc1IwRkJTeXhIUVVOc1F5eERRVTFCTEZkQlFWa3NRMEZEVml4UFFVRlBMRXRCUVVzc1VVRkJWU3hMUVVGTExFZEJRVXNzU1VGQlR5eEhRVU42UXl4RFFVMUJMR1ZCUVdkQ0xFTkJRMlFzVDBGQlR5eExRVUZMTEZGQlFWVXNTMEZCU3l4TlFVRk5MRXRCUVVzc1IwRkJTeXhIUVVGSkxFVkJRVWtzUjBGRGNrUXNRMEZOUVN4UlFVRlRMRU5CUTFBc1QwRkJUeXhMUVVGTExFMUJRVTBzUTBGRGNFSXNRMEZOUVN4UlFVRlRMRU5CUTFBc1QwRkJUeXhMUVVGTExGTkJRVk1zUTBGRGRrSXNRMEZUUVN4VFFVRlRlVU1zUlVGQlR5eERRVUZETEVWQlFVY3NRMEZEYkVJc1IwRkJTU3hEUVVGRExFdEJRVXNzVVVGQlV5eE5RVUZQTEVOQlFVTXNSVUZGTTBJc1NVRkJUVFpJTEVWQlFVOTRTaXhGUVVGQkxFZEJRVXNzUzBGQlN5eEhRVVYyUWl4UFFVRkpNa0lzUlVGQlN5eG5Ra0ZEVURaSUxFVkJRVXNzWlVGQmFVSXNTMEZCU3l4bFFVTXpRa0VzUlVGQlN5eG5Ra0ZCYTBJc1MwRkJTeXhKUVVGSkxHZENRVU5vUTBFc1JVRkJTeXhQUVVGVExFdEJRVXNzU1VGQlNTeFJRVVZzUWtFc1EwRkRWQ3hEUVUxQkxGVkJRVmNzUTBGRFZDeFBRVUZQTEVsQlFVa3NTMEZCU3l4TFFVRkxMRkZCUVZVc1MwRkJTeXhIUVVGTExFZEJRVWNzUTBGRE9VTXNRMEZ0UWtFc1MwRkJTME1zUlVGQlpYQkhMRVZCUVU4c1pVRkJaMEl4UWl4RlFVRlBMRU5CUVVNc1JVRkJSeXhEUVVOd1JDeEhRVUZKTEVOQlFVTXNTMEZCU3l4VFFVRlhMRU5CUVVNNFNDeEZRVUZqTEZGQlEyeERMRTlCUVU5c1NTeEZRVUZUTEZGQlFWRXNkME5CUVhkRExFVkJSMnhGTEVsQlFVMXRTU3hGUVVGVk1Vb3NSVUZCUVN4RFFVRkZMRTlCUVZFc1MwRkJTeXhQUVVGUkxHZENRVUZwUWl4TFFVRkxMR2xDUVVGdlFqSkNMRWRCUlRORk1rVXNSVUZCVVhGRUxFZEJRVmQwUnl4RFFVRkpMRVZCUVVVc1NVRkJTVGxDTEVWQlFWTXNZVUZCWVN4RlFVTjJSSEZKTEVWQlFXVklMRVZCUVdNc1VVRkJVU3hGUVVGSkxFdEJRVXNzVVVGQlVTeEZRVU4wUkVrc1JVRkJWVVFzUlVGQlpTeExRVUZQU0N4RlFVTm9RMHNzUlVGQlVVWXNSVUZCWlVnc1JVRkJaMElzUzBGRGRrTk5MRVZCUVZORExFZEJRVXRJTEVWQlFWTkRMRVZCUVU5NFJDeEZRVUZQYjBRc1EwRkJUeXhGUVVVNVF5eFBRVUZQUlN4RlFVRmxSeXhGUVVGUExFOUJRVThzUlVGQlNVRXNRMEZETVVNc1EwRlZRU3hSUVVGUk1VY3NSVUZCVHl4bFFVRm5RakZDTEVWQlFVOHNRMEZCUXl4RlFVRkhMRU5CUTNoRExFOUJRVThzUzBGQlN5eExRVUZMYTBRc1JVRkJVeXhKUVVGSkxFVkJRVWQ0UWl4RlFVRk5NVUlzUTBGQlNTeERRVU0zUXl4RFFVOUJMRTFCUVUwNFNDeEZRVUZsTEVOQlEyNUNMRTlCUVU4c1MwRkJTeXhSUVVGVlVTeEhRVUZUTEdOQlFXTXNTMEZCVFZJc1EwRkJZU3hGUVVGSkxFbEJRM1JGTEVOQlYwRXNVVUZCVVVFc1JVRkJaWEJITEVWQlFVMHNRMEZETTBJc1IwRkJTU3hEUVVGRExFdEJRVXNzVVVGQlV5eE5RVUZQTEVkQlJURkNMRWxCUVUwMlJ5eEZRVUZWVkN4RlFVRmpMRkZCUVZFc1JVRkRhRU5WTEVWQlFXbENMRXRCUVVzc1VVRkJVVllzUlVGQll5eExRVUZOTEVOQlFVVXNZMEZCWlN4RlFVRkxMRU5CUVVNc1JVRkRMMFVzVDBGQlQxVXNSVUZCWlN4UlFVRlJPVWNzUTBGQlNTeEhRVUZMTmtjc1IwRkJWMEVzUjBGQlYwTXNSVUZCWlN4TlFVRk5PVWNzUTBGQlNTeERRVU40Uml4RFFWTkJMRTlCUVU4clJ5eEZRVUZQTEVOQlExb3NUMEZEUlN4TFFVRkxMRk5CUTB4QkxFVkJRVTBzVTBGRFRpeExRVUZMTEZGQlFWRXNTVUZCVFVFc1JVRkJUU3hSUVVGUkxFZEJRMnBETEV0QlFVc3NTMEZCU3l4UFFVRlBRU3hGUVVGTkxFbEJRVWtzUjBGRE0wSXNTMEZCU3l4SlFVRkpMRTlCUVU5QkxFVkJRVTBzUjBGQlJ5eERRVVUzUWl4RFFXOUNRU3hYUVVGWE4wVXNSVUZCVlN4RFFVRkRMRVZCUVVjc1EwRkRka0lzUjBGQlNTeERRVUZETEV0QlFVc3NVVUZCVXl4UFFVRlBMRXRCUXpGQ0xFbEJRVTFwUlN4RlFVRlBha1VzUlVGQlVTeE5RVUZSVml4RlFVRlRMRmRCUVZjc1EwRkJReXhGUVVGSExFTkJRVVVzUzBGQlRTeExRVUZMTEVsQlFVc3NRMEZCUXl4RlFVTjBSWGRHTEVWQlFWVTVSU3hGUVVGUkxGRkJRVmNzUzBGQlQybEZMRVZCUVU4c1EwRkJRMnBGTEVWQlFWRXNVVUZCVlVFc1JVRkJVU3hSUVVGWExFVkJReTlGWlN4RlFVRlJMRU5CUVVNc1VVRkJVeXhUUVVGVkxFOUJRVkVzVVVGQlV5eFZRVUZYTEZOQlFWTXNSVUZEYWtWcVJDeEZRVUZQYTBNc1JVRkJVU3hMUVVOdVFpeFBRVUZKTEUxQlFVMHNVVUZCVVVFc1JVRkJVU3hKUVVGSkxFbEJRelZDWlN4RlFVRlJaaXhGUVVGUkxFdEJRMmhDYkVNc1JVRkJUeXhSUVVWR1l5eEhRVUZoY1VZc1JVRkJUU3hMUVVGTExFdEJRVXRoTEVOQlFVOHNSVUZCUjNSTExFZEJRVUZETEVWQlFVRXNSMEZEZWtOMVJpeEhRVVI1UXl4RFFVVTFReXhSUVVGVExGTkJRMVFzVFVGQlFXVXNSVUZEUVN4TFFVRkJha1FzUTBGRFJpeEZRVUZETEVOQlEwZ3NRMEZsUVN4dFFrRkJiVUpyUXl4RlFVRlZMRU5CUVVNc1JVRkJSeXhEUVVNdlFpeFBRVUZMTEV0QlFVc3NVVUZGU0hCQ0xFZEJRV0Z2UWl4RlFVRlJMRTFCUVZGV0xFVkJRVk1zVjBGQlZ5eERRVUZETEVWQlFVY3NRMEZCUlN4TFFVRk5MRXRCUVVzc1NVRkJTeXhEUVVGRExFVkJRVWNzUzBGQlRUbEZMRWRCUVVGRExFVkJRVUVzUjBGRGJrWjFSaXhIUVVSdFJpeERRVVYwUml4UlFVRlRMRTlCUTFRc1RVRkJUeXhEUVVGRExGRkJRVk1zVTBGQlZTeE5RVUZOTEVWQlEycERMRlZCUVZjc1JVRkRZaXhGUVVGRExFVkJVSGxDTEVsQlVUVkNMRU5CVDBFc1QwRkJUeXhQUVVGUEswVXNSVUZCVnl4RFFVTjJRaXhIUVVGSkxFTkJRVU5CTEVWQlFWVXNUVUZCVFhwR0xFVkJRVk1zVlVGQlZTeEZRVU4wUXl4TlFVRk5MRWxCUVVsbExFZEJRWEZDTEhsRFFVRjVReXhGUVVVeFJTeFBRVUZQTWtVc1IwRkJUMFFzUlVGQldVVXNSMEZCVFVFc1JVRkJSU3hSUVVGUkxFVkJRVWNzUzBGQlN5eEhRVUZITEVOQlEzWkVMRU5CVDBFc1QwRkJUeXhQUVVGUFJpeEZRVUZYTEVOQlEzWkNMRWRCUVVrc1EwRkJRMEVzUlVGQlZTeE5RVUZOZWtZc1JVRkJVeXhWUVVGVkxFVkJRM1JETEUxQlFVMHNTVUZCU1dVc1IwRkJjVUlzZVVOQlFYbERMRVZCUlRGRkxFOUJRVTh5UlN4SFFVRlBSQ3hGUVVGWlJTeEhRVUZOUVN4RlFVRkZMRkZCUVZFc1JVRkJSeXhMUVVGTExFZEJRVWNzUTBGRGRrUXNRMEZYUVN4UFFVRlBMR3RDUVVGclFqTkpMRVZCUVUweVJpeEZRVUZMYWtNc1JVRkJWU3hEUVVGRExFVkJRVWNzUTBGRGFFUXNSMEZCVFN4RFFVRkZMRTlCUVVGclF5eEZRVUZUTEV0QlFVMHNaMEpCUVVGRExFVkJRV3RDTEVsQlFVc3NSVUZCU1c1RExFVkJRMmhFYjBNc1JVRkJZM1pHTEVkQlFVOHNVMEZCVXl4RFFVTTFRaXhQUVVGQmNVWXNSVUZEUVN4blFrRkJRVU1zUlVGRFFTeFpRVUZoTEVWQlEyWXNRMEZCUXl4RlFVTklMRTlCUVU4clF5eEhRVUZyUWpsRExFVkJRV0U1Uml4RlFVRk5Na1lzUTBGQlJ5eERRVU5xUkN4RFFVdEJMRTlCUVU4c2EwSkJRV3RDTTBZc1JVRkJUVEpHTEVWQlFVdHFReXhGUVVGVkxFTkJRVU1zUlVGQlJ5eERRVU5vUkN4UFFVRlBWaXhGUVVGVExHdENRVUZyUW1oRUxFVkJRVTB5Uml4RlFVRkxha01zUTBGQlR5eERRVU4wUkN4RFFWRkJMRmRCUVZjc1dVRkJZU3hEUVVOMFFpeFBRVUZsTkVRc1JVRkRha0lzUTBGTlFTeFhRVUZYTEZWQlFWY3NRMEZEY0VJc1QwRkJaWFZDTEVWQlEycENMRU5CVFVFc1YwRkJWeXgxUWtGQmQwSXNRMEZEYWtNc1QwRkJaVU1zUlVGRGFrSXNRMEZOUVN4WFFVRlhMRmRCUVZrc1EwRkRja0lzVDBGQlpVTXNSVUZEYWtJc1EwRk5RU3hYUVVGWExGZEJRVmtzUTBGRGNrSXNUMEZCWlVNc1JVRkRha0lzUTBGTlFTeFhRVUZYTEdGQlFXTXNRMEZEZGtJc1QwRkJaVU1zUlVGRGFrSXNRMEZOUVN4WFFVRlhMRzFDUVVGdlFpeERRVU0zUWl4UFFVRmxReXhGUVVOcVFpeERRVTFCTEZkQlFWY3NkMEpCUVhsQ0xFTkJRMnhETEU5QlFXVkRMRVZCUTJwQ0xFTkJUVUVzVjBGQlZ5eDFRa0ZCZDBJc1EwRkRha01zVDBGQlpVTXNSVUZEYWtJc1EwRk5RU3hYUVVGWExHZENRVUZwUWl4RFFVTXhRaXhQUVVGbFF5eEZRVU5xUWl4RFFVMUJMRmRCUVZjc2MwSkJRWFZDTEVOQlEyaERMRTlCUVdWRExFVkJRMnBDTEVOQlRVRXNWMEZCVnl3eVFrRkJORUlzUTBGRGNrTXNUMEZCWlVNc1JVRkRha0lzUTBGTlFTeFhRVUZYTERCQ1FVRXlRaXhEUVVOd1F5eFBRVUZsUXl4RlFVTnFRaXhEUVUxQkxGZEJRVmNzWjBKQlFXbENMRU5CUXpGQ0xFOUJRV1ZETEVWQlEycENMRU5CVFVFc1YwRkJWeXcyUWtGQk9FSXNRMEZEZGtNc1QwRkJaVU1zUlVGRGFrSXNRMEZOUVN4WFFVRlhMR05CUVdVc1EwRkRlRUlzVDBGQlpVTXNSVUZEYWtJc1EwRk5RU3hYUVVGWExESkNRVUUwUWl4RFFVTnlReXhQUVVGbFF5eEZRVU5xUWl4RFFVMUJMRmRCUVZjc01rSkJRVFJDTEVOQlEzSkRMRTlCUVdWRExFVkJRMnBDTEVOQlRVRXNWMEZCVnl4bFFVRm5RaXhEUVVONlFpeFBRVUZsUXl4RlFVTnFRaXhEUVUxQkxGZEJRVmNzTkVKQlFUWkNMRU5CUTNSRExFOUJRV1ZETEVWQlEycENMRU5CVFVFc1YwRkJWeXhsUVVGblFpeERRVU42UWl4UFFVRmxReXhGUVVOcVFpeERRVTFCTEZkQlFWY3NORUpCUVRaQ0xFTkJRM1JETEU5QlFXVkRMRVZCUTJwQ0xFTkJRMFlzUlVGTFR5eFRRVUZUUXl4SFFVRnBRa01zUlVGQllTeERRVU0xUXl4SFFVRkpiRTBzUlVGQlV5eFhRVUZYYTAwc1EwRkJWeXhGUVVOcVF5eFBRVUZQUVN4RlFVTkdMRWRCUVVsQkxFZEJRV1ZCTEVWQlFWa3NVMEZCVjNKSExFZEJRVk54Unl4RlFVRlpMRkZCUVZFc1EwRkJReXhGUVVNM1JTeFBRVUZQYkUwc1JVRkJVeXhYUVVGWGEwMHNRMEZCVnl4RlFVTnFReXhIUVVGSlFTeEhRVUZsTEU5QlFVOUJMRWRCUVdkQ0xGTkJReTlETEU5QlFVOXNUU3hGUVVGVExGZEJRVmRyVFN4RFFVRlhMRVZCUlhSRExFMUJRVTBzU1VGQlNYQkhMRWRCUTFJc09FSkJRVGhDYjBjc1EwRkJWeXhoUVVGaExFOUJRVTlCTEVOQlFWY3NSVUZETVVVc1EwRkZTaXhEUXpGeFJVRXNTVUZCUVVNc1IwRkJiVUlzVTBORWJrSXNTVUZCVDBNc1IwRkJVU3hKUVVWUUxESm5Xa1JaUkN4VFFVRlRReXhIUVVGclFrTXNSVUZCWlN4RFFVTTNReXhQUVVGNVFrRXNSMEZCVVN4TFFVRmhRU3hGUVVWMlEwRXNSVUZCU1N4UlFVRlJMRkZCUVZNc1UwRkJWU3hSUVVGVExFOUJRVkVzVVVGQlV5eFZRVUZYTEZWQlFWY3NZMEZCWXl4RlFVRkZMRlZCUVZVc1EwRkRjRWdzUTBFMFFrOHNVMEZCVTBNc1IwRkJhMEpETEVWQlFXZENReXhGUVVGdlFrTXNSVUZCZDBKRExFVkJRWGxDTEVOQlJXNUlMRTlCUVVsSUxFVkJRVXNzVVVGQlZTeEhRVUZMUVN4RlFVRkxMRkZCUVZVc1IwRkJTMEVzUlVGQlN5eE5RVUZSTEVWQlF6bERRU3hGUVVGTExGRkJRVkVzUlVGQlJTeFRRVUZUUXl4RlFVRlpMRU5CUVVVc1QwRkJRVVVzUTBGQlR5eERRVUZETEVWQlIyeEVTQ3hGUVVGTExGRkJRVkVzUlVGQlJTeFRRVUZUUlN4RlFVRm5RaXhEUVVGRkxFOUJRVUZETEVOQlFVOHNRMEZCUXl4RFFVTTNSQ3hEUVVkUExGTkJRVk5ETEVkQlFYTkNReXhGUVVGMVFpeERRVU42UkVFc1JVRkJUVU1zUjBGQmEwSkVMRU5CUVVjc1JVRkhNMElzU1VGQlNVVXNSVUZCVXl4SFFVTmlMRTlCUVVsR0xFVkJRVWtzVVVGQlQwVXNSMEZCVlN4SFFVRkhSaXhGUVVGSkxFdEJRVXNzV1VGRGFrTkJMRVZCUVVrc1UwRkJVVVVzUjBGQlZTeEhRVUZIUml4RlFVRkpMRTFCUVUwc1lVRkRia05CTEVWQlFVa3NVVUZCVDBVc1IwRkJWU3hIUVVGSFJpeEZRVUZKTEV0QlFVc3NXVUZEYWtOQkxFVkJRVWtzVDBGQlRVVXNSMEZCVlN4SFFVRkhSaXhGUVVGSkxFbEJRVWtzVjBGREwwSkJMRVZCUVVrc1VVRkJUMFVzUjBGQlZTeEhRVUZIUml4RlFVRkpMRXRCUVVzc1dVRkRha05CTEVWQlFVa3NWVUZCVTBVc1IwRkJWU3hIUVVGSFJpeEZRVUZKTEU5QlFVOHNZMEZEY2tOQkxFVkJRVWtzVlVGQlUwVXNSMEZCVlN4SFFVRkhMRXRCUVVzc1RVRkJUVVlzUlVGQlNTeFBRVUZQTEVOQlFVTXNZMEZEYWtSQkxFVkJRVWtzWlVGQlkwVXNSMEZCVlN4SFFVRkhMRXRCUVVzc1RVRkJUVVlzUlVGQlNTeFpRVUZaTEVOQlFVTXNVMEZGTTBSRkxFVkJRVThzVTBGQlV5eEpRVUZKTEVsQlFVZEJMRVZCUVZOQkxFVkJRVThzVlVGQlZTeEZRVUZIUVN4RlFVRlBMRTlCUVZNc1EwRkJReXhIUVVOc1JVRXNRMEZEV0N4RFFXVlBMRk5CUVZORExFZEJRV0ZETEVWQlFYTkNMRU5CUXk5RExFOUJRVWxCTEVWQlFVc3NVMEZCVXl4SFFVRkhMRWxCUVVkQkxFVkJRVTlCTEVWQlFVc3NWVUZCVlVFc1JVRkJTeXhaUVVGWkxFZEJRVWNzUlVGQlNTeERRVUZETEVkQlEyNUZRU3hGUVVGTExGTkJRVk1zUzBGQlN5eEpRVUZIUVN4RlFVRlBRU3hGUVVGTExGVkJRVlVzUlVGQlIwRXNSVUZCU3l4UFFVRlRMRU5CUVVNc1IwRkRNMFJCTEVOQlExZ3NRMEZIVHl4VFFVRlRReXhIUVVGaFJDeEZRVUZ6UWl4RFFVTXZReXhQUVVGTFFTeEZRVUZMTEZOQlFWTXNSMEZCUnl4RlFVTm1RU3hGUVVGTExGVkJRVlZCTEVWQlFVc3NXVUZCV1N4SFFVRkhMRVZCUVVrc1EwRkJReXhGUVVSbUxFVkJSWEJETEVOQk1rTkJMRWxCUVUxRkxFZEJRVEpETEU5QlF6TkRMRk5CUVUwc1NVRkJTU3hQUVVGUFF5eEhRVUZYTEVWQlFVY3NSVUZCUlN4RFFVRkRMRVZCUTJ4RExGTkJRVTBzY1VKQlFYRkNMRVZCUXpOQ0xHTkJRVmNzU1VGQlMwTXNSMEZCVFN4SFFVRkhMRVZCUTNwQ0xFOUJRVWtzU1VGQlMwRXNSMEZCVFN4SFFVRkhMRU5CUTNoQ0xFVkJRMHNzUzBGQlN5eEZRVU5NTEVsQlFVdERMRWRCUTB0QkxFVkJRVThzUzBGQlN5eEZRVUZGTEVWQlFVVXNUVUZCVFN4TFFVRkxMRVZCUVVVc1MwRkJTeXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVU4wUkN4RlFVMUZMRk5CUVZORExFZEJRWFZDUXl4RlFVRjNRaXhEUVVNelJDeFBRVUZQVEN4SFFVRnhRaXhUUVVGVFN5eERRVUZOTEVOQlF5OURMRU5GZUVwUExFbEJRVTFETEVkQlFVNHNUVUZCVFVNc1EwRkJTeXhEUVdGa0xFOUJRV01zUzBGQlMwTXNSVUZCWTBNc1JVRkJhVUlzUjBGQlQwTXNSVUZCZDBJc1EwRkROMFVzVDBGQlR5eEpRVUZKU0N4RlFVRkxMRU5CUTFvc1MwRkJRVU1zUlVGRFFTeE5RVUZCUXl4RlFVTkJMRkZCUVVGRExFVkJRMEVzVVVGQlV5eFBRVU5VTEV0QlFVMHNUVUZEVml4RFFVRkRMRU5CUTB3c1EwRkhRU3hQUVVGakxFMUJRVTFETEVWQlFXdENSaXhGUVVGcFFpeEhRVUZQUXl4RlFVRjNRaXhEUVVOc1JpeEhRVUZKUXl4RlFVRlRMRk5CUVZNc1NVRkJTU3hGUVVGSExFTkJRM3BDTEVsQlFVbERMRVZCUVZGRUxFVkJRVk1zVFVGQlRTeEpRVUZKTEVWQlF5OUNMRTlCUVU5S0xFVkJRVXNzVFVGQlRVc3NSVUZCVFN4RFFVRkRMRVZCUVVkQkxFVkJRVTBzUTBGQlF5eEZRVUZIU0N4RlFVRlBReXhEUVVGUExFTkJRM2hFTEZOQlFWZERMRVZCUVZNc1UwRkJVeXhIUVVGSExFVkJRVWNzUTBGREwwSXNTVUZCU1VNc1JVRkJVVVFzUlVGQlV5eE5RVUZOTEVkQlFVY3NSVUZET1VJc1QwRkJUMG9zUlVGQlN5eFBRVUZQU3l4RlFVRk5MRU5CUVVNc1JVRkJSMEVzUlVGQlRTeERRVUZETEVWQlFVZElMRVZCUVU5RExFTkJRVThzUTBGRGVrUXNTMEZCVHl4UlFVRlBTQ3hGUVVGTExFdEJRVXRKTEVWQlFWVkdMRVZCUVU5RExFTkJRVThzUTBGRGNFUXNRMEZIUVN4UFFVRmpMRTlCUVU5R0xFVkJRV05MTEVWQlFXZENTaXhGUVVGcFFrTXNSVUZCZDBJc1EwRkZlRVlzVDBGQlR5eEpRVUZKU0N4RlFVRkxMRU5CUTFvc1MwRkJRVU1zUlVGRFFTeE5RVUZCUXl4RlFVTkJMRkZCUVVGRExFVkJRMEVzVVVGQlUwa3NSMEZCZFVKRUxFTkJRVTBzUlVGRGRFTXNTMEZCVFN4UlFVTldMRU5CUVVNc1EwRkRUQ3hEUVVkQkxFOUJRV01zVFVGQlRVd3NSVUZCWTA4c1JVRkJhVUpPTEVWQlFXbENReXhGUVVGM1FpeERRVU40Uml4UFFVRlBMRWxCUVVsSUxFVkJRVXNzUTBGRFdpeExRVUZCUXl4RlFVTkJMRTFCUVVGRExFVkJRMEVzVVVGQlFVTXNSVUZEUVN4UlFVRlRTeXhGUVVOVUxFdEJRVTBzVDBGRFZpeERRVUZETEVOQlEwd3NRMEZIUVN4UFFVRmpMRmRCUVZkRExFVkJRWGRDTEVOQlF6ZERMRTlCUVU4c1NVRkJTVlFzUlVGQlMxTXNRMEZCVFN4RFFVTXhRaXhEUVVkQkxFOUJRV01zVjBGQlYwTXNSVUZCZFVJc1EwRkROVU1zUjBGQlNTeERRVUZEUXl4RlFVRk5VaXhEUVVGUExFVkJRVWxUTEVkQlFYRkNSaXhEUVVGUExFVkJRMnhFTEU5QlFVOVdMRVZCUVVzc1RVRkJUVmNzUlVGQlRTeEhRVUZQVWl4RFFVRlBMRU5CUXpGRExFTkJSVkVzV1VGQldWVXNSVUZCZFVJc1EwRkRka01zVDBGQlR5eFBRVUZQTEV0QlFVMUJMRU5CUVUwc1EwRkRPVUlzUTBGSFR5eFRRVUZUV2l4RlFVRnZRaXhEUVVOb1F5eFBRVUZQTEVsQlFVbEVMRVZCUVVzc1QwRkJUeXhQUVVGUExFTkJRVU1zUlVGQlJ5eExRVUZOTEVOQlFVVXNTMEZCUVVNc1EwRkJTeXhEUVVGRExFTkJRVU1zUTBGRGNrUXNRMEZIVHl4WlFVRlpSU3hGUVVGM1FpeERRVU4yUXl4UFFVRlBMRWxCUVVsSUxFVkJRVXNzVDBGQlR5eFBRVUZQTEVOQlFVTXNSVUZCUnl4TFFVRk5MRU5CUVVVc1VVRkJRVWNzUTBGQlVTeERRVUZETEVOQlFVTXNRMEZEZUVRc1EwRkhUeXhWUVVGVlJDeEZRVUZ6UWl4RFFVTnVReXhQUVVGSkxFdEJRVXNzVDBGQlUwRXNSVUZCWXl4TFFVVjZRaXhKUVVGSlJpeEZRVUZMTEU5QlFVOHNUMEZCVHl4RFFVRkRMRVZCUVVjc1MwRkJUU3hEUVVGRkxFMUJRVUZGTEVOQlFVMHNRMEZCUXl4RFFVRkRMRU5CUTNSRUxFTkJSMDhzVjBGQlYwa3NSVUZCYzBJc1EwRkRjRU1zVDBGQlQwNHNSVUZCU3l4UFFVRlBMRXRCUVVzc1MwRkJUVTBzUlVGQlVTeExRVUZMTEUxQlFVOHNTMEZCU3l4UFFVRlBMRU5CUTJ4RkxFTkJSMDhzVlVGQlZWRXNSVUZCY1VJc1EwRkRiRU1zVDBGQlQyUXNSVUZCU3l4TlFVRk5MRXRCUVVzc1MwRkJUV01zUlVGQlR5eExRVUZMTEUxQlFVOHNTMEZCU3l4UFFVRlBMRU5CUTJoRkxFTkJSMDhzVDBGQlQwTXNSVUZCYzBJc1EwRkRhRU1zVDBGQlNVRXNSMEZCVXl4TlFVRmhRU3hIUVVGVExFdEJRV0VzUjBGRmVrTXNTMEZCU3l4TlFVRlJRU3hGUVVGTkxFMUJRVkVzUzBGQlN5eE5RVUZSUVN4RlFVRk5MRTFCUVZFc1MwRkJTeXhUUVVGWFFTeEZRVUZOTEU5QlEzWkdMRU5CUjA4c1ZVRkJiVUlzUTBGRGRFSXNUMEZCVHl4TFFVRkxMRk5CUVZNc1EwRkRla0lzUTBGSFR5eFZRVUZ4UWl4RFFVTjRRaXhOUVVGUExFTkJRMGdzUzBGQlRTeExRVUZMTEV0QlExZ3NTMEZCVFN4TFFVRkxMRXRCUTFnc1VVRkJVeXhMUVVGTExGRkJRMlFzVVVGQlV5eExRVUZMTEZGQlEyUXNUVUZCVHl4TFFVRkxMRXRCUTJoQ0xFTkJRMG9zUTBGSFR5eFJRVUZsTEVOQlEyeENMRTlCUVU5bUxFVkJRVXNzUzBGQlN5eExRVUZMTEV0QlFVMHNTMEZCU3l4TlFVRlBMRXRCUVVzc1QwRkJUeXhEUVVONFJDeERRVWRQTEZOQlFXZENMRU5CUTI1Q0xFOUJRVThzUzBGQlN5eFZRVUZWTEVWQlFVa3NRMEZET1VJc1EwRkhUeXhYUVVGclFpeERRVU55UWl4UFFVRlBMRXRCUVVzc1ZVRkJWU3hGUVVGTExFTkJReTlDTEVOQlIwOHNWVUZCYlVJc1EwRkRkRUlzU1VGQlNXZENMRWRCUVZVc1MwRkJTeXhOUVVGUkxFbEJRVTBzU1VGQlRTeExRVUZQTEV0QlFVc3NZVUZCWVN4RlFVTm9SU3hQUVVGQlFTeEhRVUZWTEVsQlExWkJMRWRCUVZVc1MwRkJTeXhwUWtGQmFVSXNSVUZEYUVOQkxFZEJRVlVzUzBGRFNFRXNRMEZEV0N4RFFVZFBMR3RDUVVGdFFpeERRVU4wUWl4SFFVRkpMRXRCUVVzc1VVRkRUQ3hQUVVGUExFdEJRVXNzVVVGRFZDeERRVU5JTEVsQlFVbEJMRVZCUVZORExFZEJRV0VzUzBGQlN5eEpRVUZKTEVWQlEyNURMRTlCUVVrc1MwRkJTeXhOUVVGUkxGVkJRVmtzUzBGQlN5eE5RVUZSTEZkQlFWTkVMRWRCUVZVc1RVRkJVU3hMUVVGTExGTkJSVzVGUVN4RFFVTllMRU5CUTBvc1EwRkhUeXhqUVVGMVFpeERRWEJMYkVNc1NVRkJRVVVzUlVGQlFVTXNSVUZ4UzFFc1NVRkJUVU1zUlVGQlZTeExRVUZMTEV0QlFVc3NVVUZCVVN4SlFVRkxMRXRCUVVzc1JVRkROVU1zVDBGQlNTeExRVUZMTEUxQlFWRXNVMEZCYVVKQkxFVkJRVlVzVFVGQlRVWXNSVUZCUVN4TFFVRkxMRlZCUVV3c1dVRkJRVUVzUlVGQll5eFJRVUZSTEVsQlFVc3NVVUZEZWtVc1MwRkJTeXhOUVVGUkxGRkJRV2RDUlN4RlFVRlZMRTlCUVU5RUxFVkJRVUVzUzBGQlN5eFZRVUZNTEZsQlFVRkJMRVZCUVdNc1VVRkJVU3hKUVVGTExGRkJRMnBGUXl4RFFVTm9RaXhEUVVkUExGVkJRVzFDTEVOQlEzUkNMRTlCUVU5SUxFZEJRV0VzUzBGQlN5eEpRVUZKTEVOQlEycERMRU5CUTBvc1JVRnhRazhzVTBGQlUwd3NSMEZCY1VKRUxFVkJRVFJETEVOQlF6ZEZMRWxCUVVsVkxFVkJRVThzUjBGRFdDeE5RVUZSUVN4RlFVRlBWaXhGUVVGTExGRkJRVkVzU1VGQlMxVXNSVUZCVHl4RFFVRkRMRWxCUVUwc1IwRkRNME1zUjBGQlNTeEZRVUZCUVN4RlFVRlBMRWRCUVV0V0xFVkJRVXRWTEVWQlFVOHNRMEZCUXl4SFFVRkxMRTFCUTJ4RExFMUJRVThzUTBGQlExWXNSVUZCU3l4VlFVRlZMRVZCUVVkVkxFTkJRVWtzUlVGQlJTeFJRVUZSTEZGQlFWTXNSMEZCUnl4RlFVRkhWaXhGUVVGTExGVkJRVlZWTEVWQlFVOHNRMEZCUXl4RFFVRkRMRVZCUjI1R0xFMUJRVThzUTBGQlExWXNSVUZCU3l4UlFVRlJMRkZCUVZNc1IwRkJSeXhGUVVGSExFMUJRVk1zUTBGRGFrUXNRME0xVFVFc1NVRkJUVmNzUjBGQlVTeFBRVUZQTEVsQlFVa3NXVUZCV1N4RlFVTXZRa01zUjBGQlRTeFBRVUZQTEVsQlFVa3NaVUZCWlN4RlFVTm9RME1zUjBGQlRTeFBRVUZQTEVsQlFVa3NWVUZCVlN4RlFVTXpRa01zUjBGQlR5eFBRVUZQTEVsQlFVa3NWMEZCVnl4RlFVTTNRa01zUjBGQlV5eFBRVUZQTEVsQlFVa3NZVUZCWVN4RlFVTnFRME1zUjBGQlRTeFBRVUZQTEVsQlFVa3NWVUZCVlN4RlFVTXpRa01zUjBGQldTeFBRVUZQTEVsQlFVa3NaMEpCUVdkQ0xFVkJRM1pEUXl4SFFVRlhReXhIUVVGVExFTkJRVU1zUTBGQlEwRXNSMEZCVVN4UFFVRlBRU3hIUVVGVExGVkJRVmxCTEVWQlFVdEdMRVZCUVZNc1NVRkJUVTRzUjBGRE9VVlRMRWRCUVdORUxFZEJRVk1zUTBGQlF5eERRVUZEUVN4SFFVRlJMRTlCUVU5QkxFZEJRVk1zVlVGQldVRXNSVUZCUzBZc1JVRkJVeXhKUVVGTlRDeEhRVU5xUmxNc1IwRkJVMFlzUjBGQlV5eERRVUZETEVOQlFVTkJMRWRCUVZFc1QwRkJUMEVzUjBGQlV5eFZRVUZaUVN4RlFVRkxSaXhGUVVGVExFbEJRVTFLTEVkQlF6VkZVeXhGUVVGVlNDeEhRVUZUTEVOQlFVTXNRMEZCUTBFc1IwRkJVU3hQUVVGUFFTeEhRVUZUTEZWQlFWbEJMRVZCUVV0R0xFVkJRVk1zU1VGQlRVZ3NSMEZETjBWVExFVkJRVmxLTEVkQlFWTXNRMEZCUXl4RFFVRkRRU3hIUVVGUkxFOUJRVTlCTEVkQlFWTXNWVUZCV1VFc1JVRkJTMFlzUlVGQlV5eEpRVUZOUml4SFFVTXZSVk1zUjBGQlUwd3NSMEZCVXl4RFFVRkRMRU5CUVVOQkxFZEJRVkVzVDBGQlQwRXNSMEZCVXl4VlFVRlpRU3hGUVVGTFJpeEZRVUZUTEVsQlFVMUVMRWRCUTJ4R0xGTkJRVk5UTEVWQlFXRk9MRVZCUVUwc1EwRkRlRUlzUjBGQlNVRXNSMEZCVVN4UFFVRlBRU3hIUVVGVExGTkJRM2hDTEU5QlFWRkJMRVZCUVV0R0xFVkJRVk1zUlVGQlJ5eERRVU55UWl4TFFVRkxTaXhIUVVOTUxFdEJRVXRITEVkQlEwUXNUVUZCVHl4RlFVTm1MRU5CUTBvc1RVRkJUeXhGUVVOWUxFTkJRMEVzVTBGQlUxVXNSVUZCVDFBc1JVRkJUU3hEUVVOc1FpeEhRVUZKUVN4SFFVRlJMRTlCUVU5QkxFZEJRVk1zVTBGRGVFSXNUMEZCVVVFc1JVRkJTMFlzUlVGQlV5eEZRVUZITEVOQlEzSkNMRXRCUVV0T0xFZEJRMHdzUzBGQlMwVXNSMEZEVEN4TFFVRkxSU3hIUVVOTUxFdEJRVXRETEVkQlEwUXNUVUZCVHl4RlFVTm1MRU5CUTBvc1RVRkJUeXhGUVVOWUxFTkJRMEVzU1VGQlRWY3NSMEZCWVZJc1NVRkJWVWtzUlVGQlUwb3NRMEZCU1N4SFFVRkxUU3hGUVVGaFRpeERRVUZKTEVsQlFVMHNRMEZCUXl4RFFVRkRRU3hGUVVGTExFOURMMEkzUlN4SlFVRk5VeXhIUVVGUkxFOUJRVThzWVVGQllTeEZRVU0xUWtNc1IwRkJUeXhQUVVGUExHVkJRV1VzUlVGRE4wSkRMRWRCUVZNc1QwRkJUeXhoUVVGaExFVkJLMEp1UXl4VFFVRlRReXhIUVVGTlF5eEZRVUZOUXl4RlFVRlRMRU5CUXpGQ0xFbEJRVTFETEVWQlFWZERMRWRCUVZsR0xFTkJRVThzUlVGRGFFTkhMRWRCUVZkS0xFTkJRVWtzUlVGRFNrc3NSMEZCVHl4TFFVRk5UQ3hGUVVGTExGTkJRVlZGTEVWQlFWVXNUMEZCVHl4UFFVRlBMRU5CUVVOR0xFTkJRVWtzUTBGQlF5eERRVUZETEVsQlF6TkVSaXhMUVVOUVJTeEZRVUZMTEZOQlFWY3NUVUZIY0VKTExFZEJRVThzUzBGQlRVd3NSVUZCVFVVc1JVRkJWU3hQUVVGUExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZEZEVRc1EwRkxRVWdzUjBGQlRTeE5RVUZSU0N4SFFVVmtSeXhIUVVGTkxFdEJRVTlHTEVkQlJXSkZMRWRCUVUwc1QwRkJVMFFzUjBGRFppeFRRVUZUVHl4SFFVRlBReXhGUVVGTFRpeEZRVUZOUXl4RlFVRlRUU3hGUVVGTkxFTkJRM1JETEVsQlFVMURMRVZCUVU5RExFZEJRVmxJTEVWQlFVdE9MRVZCUVUxRExFVkJRVk5OTEVOQlFVa3NSVUZEYWtRc1IwRkJTVWNzUlVGQlQwWXNRMEZCU1N4SFFVRkxSeXhGUVVGUFNDeERRVUZKTEVWQlF6TkNMRTlCUVVGSkxFZEJRVmxPTEVWQlFVdERMRVZCUVUxRExFTkJRVWtzUlVGRGNFSklMRWRCUVU5RExFVkJRVXRGTEVWQlFVMVFMRVZCUVZOTkxFTkJRVWtzUlVGRk1VTXNSMEZCU1N4UFFVRlBReXhIUVVGVExGVkJRMmhDTEVkQlFVbExMRVZCUVdGaUxFTkJRVWtzUlVGQlJ5eERRVU53UWs4c1JVRkJUeXhQUVVGUExFOUJRVTlCTEVWQlFVc3NUMEZCVDFBc1EwRkJTU3hEUVVGRExFVkJRM1JETEZGQlFWTXNSVUZCU1N4RlFVRkhMRVZCUVVsQkxFVkJRVXNzVFVGQlRTeFBRVUZSTEVWQlFVVXNSVUZCUnl4RFFVTjRReXhKUVVGTll5eEZRVUZMVkN4SFFVRlBMRVZCUVVkTUxFVkJRVXNzVFVGQlRTeERRVUZETEVWQlFVZERMRVZCUVZOTkxFTkJRVWtzUlVGRGFrUXNSMEZCU1N4UFFVRlBUeXhIUVVGUExGTkJRMlFzUlVGQlNVRXNSVUZCU3l4TlFVTlNMRWxCUVVsQkxFbEJRVTlzUWl4SFFVTmFMRTlCUVU5QkxFZEJRMFpyUWl4SlFVRlBhRUlzUzBGRFdrVXNSVUZCU3l4TlFVRk5MRTlCUVU4c1JVRkJSeXhEUVVGRExFVkJRM1JDTEVkQlFVc3NSMEZGWWl4RFFVTktMRk5CUTFOWExFVkJRVTlZTEVOQlFVa3NSVUZCUnl4RFFVTnVRazhzUlVGQlR5eFBRVUZQTEU5QlFVOUJMRVZCUVVzc1QwRkJUMUFzUTBGQlNTeERRVUZETEVWQlEzUkRMRWxCUVUxbExFVkJRVXRXTEVkQlFVOHNUVUZCVDB3c1JVRkJTeXhKUVVGTFF5eEZRVUZUVFN4RFFVRkpMRVZCUTJoRUxFZEJRVWxSTEVsQlFVOXVRaXhIUVVOUUxFOUJRVTlCTEVkQlEwWnRRaXhKUVVGUGFrSXNTMEZEV2tVc1JVRkJTeXhKUVVGTkxFMUJRMllzU1VGQlRXZENMRVZCUVV0WUxFZEJRVThzVVVGQlUwd3NSVUZCU3l4TlFVRlBReXhGUVVGVFRTeERRVUZKTEVWQlEzQkVMRWRCUVVsVExFbEJRVTl3UWl4SFFVTlFMRTlCUVU5QkxFZEJRMFp2UWl4SlFVRlBiRUlzUzBGRFdrVXNSVUZCU3l4TlFVRlJMRXRCUTNKQ0xFVkJSVW9zVDBGQlQxRXNRMEZEV0N4RFFXZERRU3hsUVVGbFV5eEhRVUZYYWtJc1JVRkJUVU1zUlVGQlV5eERRVU55UXl4SlFVRk5ReXhGUVVGWFF5eEhRVUZaUml4RFFVRlBMRVZCUTJoRFJ5eEhRVUZYU2l4RFFVRkpMRVZCUTBvc1RVRkJUV3RDTEVkQlFWa3NTMEZCVFd4Q0xFVkJRVXNzVTBGQlZVVXNSVUZCVlN4UFFVRlBMRTlCUVU4c1EwRkJRMFlzUTBGQlNTeERRVUZETEVOQlFVTXNTVUZEZEVWR0xFdEJRMUJGTEVWQlFVc3NVMEZCVnl4TlFVZHdRaXhOUVVGTmEwSXNSMEZCV1N4TFFVRk5iRUlzUlVGQlRVVXNSVUZCVlN4UFFVRlBMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUTBGRGFrVXNRMEZMUVdVc1IwRkJWeXhOUVVGUmNrSXNSMEZGYmtKeFFpeEhRVUZYTEV0QlFVOXdRaXhIUVVWc1FtOUNMRWRCUVZjc1QwRkJVMjVDTEVkQlEzQkNMR1ZCUVdWdlFpeEhRVUZaV2l4RlFVRkxUaXhGUVVGTlF5eEZRVUZUVFN4RlFVRk5MRU5CUTJwRUxFbEJRVTFETEVWQlFVOHNUVUZCVFVNc1IwRkJXVWdzUlVGQlMwNHNSVUZCVFVNc1JVRkJVMDBzUTBGQlNTeEZRVU4yUkN4SFFVRkpSeXhGUVVGUFJpeERRVUZKTEVkQlFVdEhMRVZCUVU5SUxFTkJRVWtzUlVGRE0wSXNUMEZCUVVrc1IwRkJXVTRzUlVGQlMwTXNSVUZCVFVNc1EwRkJTU3hGUVVOd1FsVXNSMEZCV1Zvc1JVRkJTMFVzUlVGQlRWQXNSVUZCVTAwc1EwRkJTU3hGUVVVdlF5eEhRVUZKTEU5QlFVOURMRWRCUVZNc1ZVRkRhRUlzUjBGQlNVc3NSVUZCWVdJc1EwRkJTU3hGUVVGSExFTkJRM0JDVHl4RlFVRlBMRTlCUVU4c1QwRkJUMEVzUlVGQlN5eFBRVUZQVUN4RFFVRkpMRU5CUVVNc1JVRkRkRU1zVVVGQlV5eEZRVUZKTEVWQlFVY3NSVUZCU1VFc1JVRkJTeXhOUVVGTkxFOUJRVkVzUlVGQlJTeEZRVUZITEVOQlEzaERMRWxCUVUxakxFVkJRVXNzVFVGQlRVa3NSMEZCV1N4RlFVRkhiRUlzUlVGQlN5eE5RVUZOTEVOQlFVTXNSVUZCUjBNc1JVRkJVMDBzUTBGQlNTeEZRVU0xUkN4SFFVRkpMRTlCUVU5UExFZEJRVThzVTBGRFpDeEZRVUZKUVN4RlFVRkxMRTFCUTFJc1NVRkJTVUVzU1VGQlQyeENMRWRCUTFvc1QwRkJUMEVzUjBGRFJtdENMRWxCUVU5b1FpeExRVU5hUlN4RlFVRkxMRTFCUVUwc1QwRkJUeXhGUVVGSExFTkJRVU1zUlVGRGRFSXNSMEZCU3l4SFFVVmlMRU5CUTBvc1UwRkRVMWNzUlVGQlQxZ3NRMEZCU1N4RlFVRkhMRU5CUTI1Q1R5eEZRVUZQTEU5QlFVOHNUMEZCVDBFc1JVRkJTeXhQUVVGUFVDeERRVUZKTEVOQlFVTXNSVUZEZEVNc1NVRkJUV1VzUlVGQlN5eE5RVUZOUnl4SFFVRlpMRTFCUVU5c1FpeEZRVUZMTEVsQlFVdERMRVZCUVZOTkxFTkJRVWtzUlVGRE0wUXNSMEZCU1ZFc1NVRkJUMjVDTEVkQlExQXNUMEZCVDBFc1IwRkRSbTFDTEVsQlFVOXFRaXhMUVVOYVJTeEZRVUZMTEVsQlFVMHNUVUZEWml4SlFVRk5aMElzUlVGQlN5eE5RVUZOUlN4SFFVRlpMRkZCUVZOc1FpeEZRVUZMTEUxQlFVOURMRVZCUVZOTkxFTkJRVWtzUlVGREwwUXNSMEZCU1ZNc1NVRkJUM0JDTEVkQlExQXNUMEZCVDBFc1IwRkRSbTlDTEVsQlFVOXNRaXhMUVVOYVJTeEZRVUZMTEUxQlFWRXNTMEZEY2tJc1JVRkZTaXhQUVVGUFVTeERRVU5ZTEVOQlEwRXNVMEZCVTB3c1IwRkJXVVlzUlVGQlV5eERRVU14UWl4UFFVRkpMRTlCUVU5QkxFZEJRVmtzVjBGRGJFSkJMRVZCUVZFc1dVRkJZMEVzUlVGQlVTeE5RVUZSUVN4RlFVRlJMRTlCUTNoRExFOUJRVThzVDBGQlR5eERRVU5xUWl4TlFVRlBRU3hGUVVGUkxFdEJRMllzU1VGQlMwRXNSVUZCVVN4TFFVTmlMRTlCUVZGQkxFVkJRVkVzUzBGRGFFSXNTVUZCUzBFc1JVRkJVU3hKUVVOcVFpeEZRVUZIUVN4RlFVRlJMRTlCUVZNc1EwRkRhRUlzU1VGQlMwRXNSVUZCVVN4TlFVTmlMRTlCUVZGQkxFVkJRVkVzVFVGRGFFSXNTVUZCUzBFc1JVRkJVU3hMUVVOcVFpeEZRVUZIUVN4RlFVRlJMRmxCUVdNc1EwRkRja0lzU1VGQlMwRXNSVUZCVVN4WFFVTmlMRWxCUVV0QkxFVkJRVkVzVlVGRGFrSXNSVUZCUjBFc1EwRkJUeXhGUVVWUVFTeERRVU5ZTEVOQlEwRXNVMEZCVTFFc1IwRkJXVWdzUlVGQlMwNHNSVUZCVFVNc1JVRkJVMDBzUlVGQlRTeERRWEpOTDBNc1NVRkJRVmtzUlVGQlFVTXNSVUZCUVVNc1JVRkJRVU1zUlVGQlFVTXNSVUZ6VFVrc1IwRkJTU3hQUVVGUGRFSXNSMEZCV1N4WFFVTnVRaXhQUVVGUFFTeEZRVUZSU3l4RlFVRkxUaXhGUVVGTlR5eERRVUZKTEVWQlEyeERMRWRCUVVscFFpeEhRVUZOZUVJc1EwRkJTU3hGUVVOV0xFOUJRVTl0UWl4RlFVRkJiRUlzUlVGQlVTeE5RVUZTTEZsQlFVRnJRaXhGUVVGQkxFdEJRVUZzUWl4RlFVRmpTeXhGUVVGTFRpeEZRVUZOVHl4SFFVTndReXhIUVVGSmEwSXNSMEZCVFhwQ0xFTkJRVWtzUlVGRFZpeFBRVUZQYjBJc1JVRkJRVzVDTEVWQlFWRXNUVUZCVWl4WlFVRkJiVUlzUlVGQlFTeExRVUZCYmtJc1JVRkJZMHNzUlVGQlMwNHNSVUZCVFU4c1IwRkRjRU1zUjBGQlNVa3NSVUZCVDFnc1EwRkJTU3hGUVVOWUxFOUJRVTl4UWl4RlFVRkJjRUlzUlVGQlVTeFBRVUZTTEZsQlFVRnZRaXhGUVVGQkxFdEJRVUZ3UWl4RlFVRmxTeXhGUVVGTFRpeEZRVUZOVHl4SFFVTnlReXhIUVVGSmJVSXNSVUZCVXpGQ0xFTkJRVWtzUlVGRFlpeFBRVUZQYzBJc1JVRkJRWEpDTEVWQlFWRXNVMEZCVWl4WlFVRkJjVUlzUlVGQlFTeExRVUZCY2tJc1JVRkJhVUpMTEVWQlFVdE9MRVZCUVUxUExFZEJRM1pETEVkQlFVbHZRaXhIUVVGUk0wSXNRMEZCU1N4RlFVTmFMRTlCUVU5MVFpeEZRVUZCZEVJc1JVRkJVU3hSUVVGU0xGbEJRVUZ6UWl4RlFVRkJMRXRCUVVGMFFpeEZRVUZuUWtzc1JVRkJTMDRzUlVGQlRVOHNSVUZGTVVNc1EwRkRRU3hUUVVGVFN5eEhRVUZaVGl4RlFVRkxReXhGUVVGTlVDeEZRVUZOTEVOQlEyeERMRWxCUVUwMFFpeEZRVUZUY2tJc1JVRkJTMEVzUlVGQlN5eFBRVUZUTEVOQlFVTXNSVUZEYmtNc1IwRkJTVTBzUlVGQllXVXNRMEZCVFN4RlFVTnVRa0VzUlVGQlR5eE5RVUZOZEVJc1EwRkJSeXhGUVVGSlRpeFZRVVZtVnl4RlFVRlBhVUlzUTBGQlRTeEZRVU5rZEVJc1NVRkJVU3hOUVVOU2MwSXNSVUZCVHl4SlFVRk5OVUlzUlVGRllqUkNMRVZCUVU4c1RVRkJVVFZDTEZWQlJXUkpMRWRCUVZkM1FpeERRVUZOTEVWQlEzUkNRU3hGUVVGUExGTkJRVmMxUWl4TlFVVnFRaXhEUVVORUxFbEJRVTAyUWl4RlFVRkxSaXhIUVVGUlF5eERRVUZOTEVWQlFVa3NVVUZCVlN4VFFVTjJReXhOUVVGTkxFbEJRVWtzVFVGQlRTdzBRa0ZCTkVKRExFTkJRVVVzVTBGQlV5eERRVU16UkN4RFFVTktMRU5EYms5QkxFbEJRVTFETEVkQlFXTXNRMEZEYUVJc1NVRkJTeXhOUVVOTUxFbEJRVXNzVFVGRFRDeEpRVUZMTEUxQlEwd3NTVUZCU3l4TlFVTk1MRWxCUVVzc1RVRkRUQ3hKUVVGTExFdEJRMVFzUlVGRFRVTXNSMEZCYVVKRExFZEJRVTlCTEVWQlFVY3NVVUZCVVN4aFFVRmpReXhIUVVGTlNDeEhRVUZaUnl4RFFVRkZMRU5CUVVNc1JVRkRkRVZETEVkQlFVNHNUVUZCVFVNc1EwRkJWeXhEUVVOaUxGbEJRVmxETEVWQlFVMURMRVZCUVUwc1EwRkxjRUlzUzBGQlN5eFRRVUZYTEV0QlJXaENMRXRCUVVzc1QwRkJVeXhIUVVOa0xFdEJRVXNzUzBGQlR5eFBRVUZQTEU5QlFVOHNRMEZCUXl4RlFVRkhSaXhGUVVGWExGbEJRV0ZETEVOQlFVa3NSVUZETVVRc1MwRkJTeXhMUVVGUExFOUJRVThzVDBGQlR5eERRVUZETEVWQlFVZEVMRVZCUVZjc1dVRkJZVVVzUTBGQlNTeERRVU01UkN4RFFVTkJMRTlCUVZFc1EwRkRTaXhKUVVGTlF5eEZRVUZQTEVsQlFVbElMRVZCUVZjc1MwRkJTeXhMUVVGTkxFdEJRVXNzU1VGQlNTeEZRVU5vUkN4UFFVRkJSeXhGUVVGTExGTkJRVmNzUzBGQlN5eFRRVU5rUVN4RFFVTllMRU5CUzBFc1dVRkJZU3hEUVVOVUxFbEJRVTFETEVWQlFVMHNTVUZCU1Vvc1JVRkJWeXhMUVVGTExFdEJRVTBzUzBGQlN5eEpRVUZKTEVWQlF5OURMRTlCUVZFc1MwRkJTeXhMUVVGTExGRkJRVk1zUTBGRGRrSXNTVUZCU3l4TlFVTkVMRXRCUVVzc1pVRkJhVUlzUjBGRGRFSXNUVUZEU2l4SlFVRkxMRTFCUTBRc1MwRkJTeXhsUVVGcFFpeEhRVU4wUWl4TFFVRkxMRXRCUVU4c1EwRkRVaXhUUVVGVlFTeEZRVUZYTEZsQlFWa3NVMEZEYWtNc1VVRkJVeXhMUVVOaUxFVkJRMEVzUzBGQlN5eExRVUZQTEU5QlFVOHNUMEZCVHl4RFFVRkRMRVZCUVVkQkxFVkJRVmNzVjBGQlZ5eEZRVU53UkN4TFFVTlNMRU5CUTBFc1QwRkJUMGtzUTBGRFdDeERRVXRCTEVsQlFVbERMRVZCUVUxRExFVkJRVk1zUTBGRFdDeExRVUZMTEdsQ1FVTk1MRXRCUVVzc1MwRkJUeXhEUVVGRkxGTkJRVlZPTEVWQlFWY3NXVUZCV1N4VFFVRlZMRkZCUVZNc1MwRkJUU3hGUVVONFJTeExRVUZMTEV0QlFVOHNUMEZCVHl4UFFVRlBMRU5CUVVNc1JVRkJSMEVzUlVGQlZ5eFhRVUZYTEVWQlEzQkVMRXRCUVVzc1pVRkJhVUlzU1VGRk1VSXNTVUZCVFU4c1JVRkJVVVlzUlVGQlN5eExRVUZMTEVWQlFVVXNUVUZCVFN4UlFVRlJMRVZCUTJ4RFJ5eEZRVUZQUkN4RlFVRk5MRTFCUVUwc1JVRkRla0lzVDBGQlVVTXNSVUZCVFN4RFFVTldMRWxCUVVzc1QwRkJVU3hEUVVOVUxFZEJRVWxFTEVWQlFVMHNVMEZCVnl4SlFVTnFRa1FzUlVGQlVTeEZRVUZITEdsRVFVRnBSQ3hGUVVONFJFTXNSVUZCVFN4UFFVRlRMRWRCUTJZc1RVRkJUeXhIUVVWbUxFZEJRVTBzUTBGQlEwVXNSVUZCVVVNc1EwRkJUU3hGUVVGSlNDeEZRVU42UWl4WlFVRkxMRXRCUVV0RkxFTkJRVTBzUlVGQlNVTXNSVUZEWWl4RlFVTllMRU5CUTBFc1NVRkJTeXhSUVVGVExFTkJSVllzUjBGRVFTeExRVUZMTEV0QlFVc3NVMEZCVnl4SFFVTnFRa2dzUlVGQlRTeFRRVUZYTEVWQlEycENMRTlCUVVGRUxFVkJRVkVzUlVGQlJ5eHBSRUZCYVVRc1JVRkRja1FzUjBGRldDeEhRVUZOTEVOQlFVTkxMRU5CUVU4c1JVRkJTVW9zUlVGRGJFSXNSMEZCU1Vrc1NVRkJXU3hQUVVGVFFTeEpRVUZaTEUxQlEycERMRmxCUVVzc1MwRkJTeXhSUVVGVlFTeEZRVU5pTEVkQlJVNHNRMEZEUkN4SlFVRk5ReXhGUVVGVkxHRkJRV0VzUzBGQlMwUXNRMEZCVHl4RlFVTjZReXhQUVVGQlRDeEZRVUZSTEVWQlFVY3NORUpCUVRSQ1N5eERRVUZQTEVkQlFVbERMRU5CUVU4c1JVRkRiRVFzUlVGRFdDeERRVU5LTEVOQlEwRXNVVUZEU1N4UFFVRkJUaXhGUVVGUkxFVkJRVWNzY1VKQlFYRkNSU3hEUVVGSkxFZEJRVWtzUlVGQlNTeEZRVU55UXl4RlFVTm1MRU5CUTBvc1EwRlBRU3hSUVVGUlN5eEZRVUZSVUN4RlFVRlRMRU5CUTNKQ0xFZEJRVWxQTEVsQlFWY3NTVUZEV0N4TlFVRlBMRWxCUTFnc1IwRkJTVUVzUlVGQlR5eERRVUZETEVsQlFVMHNTVUZEWkN4UFFVRkJVQ3hGUVVGUkxHOUNRVUZ2UWs4c1EwRkJUU3hGUVVGRkxFVkJRemRDTEV0QlJWZ3NSMEZCU1VFc1JVRkJUeXhEUVVGRExFbEJRVTBzU1VGQlN5eERRVU51UWl4SlFVRk5ReXhGUVVGWFJDeEZRVUZQTEUxQlFVMHNSVUZCUnl4RlFVRkZMRVZCUTI1RExFOUJRVWxETEVsQlFXRXNTMEZCVDBFc1NVRkJZU3hOUVVOcVExSXNSVUZCVVN4eFEwRkJjVU5QTEVOQlFVMHNZMEZCWXl4RlFVTXhSQ3hQUVVWUVFTeEZRVUZQUVN4RlFVRlBMRTlCUVZNc1EwRkJReXhKUVVGTkxFdEJRemxDVUN4RlFVRlJMR2xEUVVGcFF5eEZRVU4wUTFFc1JVRkRXQ3hEUVVOQkxFZEJRVTBzUTBGQlF5eERRVUZGVEN4RlFVRlJUU3hEUVVGTkxFVkJRVWxHTEVWQlFVOHNUVUZCVFN4WFFVRkRMR2xDUVVGbExFZEJRVU1zUjBGRGNFUkZMRWRCUTBSVUxFVkJRVkVzVDBGQlQwOHNRMEZCVFN4dlFrRkJiMElzUlVGRE4wTXNTVUZCVFVnc1JVRkJVeXhMUVVGTExFdEJRVXRFTEVOQlFVMHNSVUZETDBJc1IwRkJTVU1zUlVGRFFTeEhRVUZKTEVOQlEwRXNUMEZCVDBFc1JVRkJVeXh0UWtGQmJVSkxMRU5CUVUwc1EwRkROME1zVDBGRFQwTXNSVUZCVHl4RFFVTldMRTlCUVVGV0xFVkJRVkVzVDBGQlQxVXNRMEZCU3l4RFFVRkRMRVZCUTJRc1NVRkRXQ3hEUVVWS0xFOUJRVWxRTEVsQlFWY3NTVUZEU2trc1IwRkRXRkFzUlVGQlVTd3dRa0ZCTUVKUExFTkJRVTBzUlVGQlJTeEZRVU51UXl4TFFVTllMRU5CUzBFc1ZVRkJWVWtzUlVGQlN5eERRVU5ZTEU5QlFWY3NRMEZCUTFJc1JVRkJVVU1zUTBGQlRTeEpRVUZMTEU5QlFVOHNVVUZCVVN4TFFVRkxMRWxCUVVrc1JVRkRia1FzUjBGQlNVOHNSVUZCU1N4WFFVRlhVQ3hEUVVGTkxFVkJRM0pDTEU5QlFVOUVMRVZCUVZOaUxFZEJRV054UWl4RlFVRkpMRlZCUVZWUUxFVkJRVThzVFVGQlRTeERRVUZETEVWQlJXeEZMRTlCUVU5UExFVkJRVWtzUTBGQlF5eEpRVUZOTEVsQlFVMUJMRVZCUVUwc1MwRkJTMEVzUTBGQlJ5eEhRVU14UXl4RFFVTkJMRk5CUVZORExFVkJRVXNzUTBGRFZpeEpRVUZOUXl4RlFVRlJMRXRCUVVzc1MwRkJTeXhUUVVOc1FpeERRVUZETEZOQlFWTXNTMEZCU3l4TFFVRkxMRk5CUVZjc1MwRkJTeXhGUVVGRkxFVkJRM1JETEVOQlFVTXNSVUZEUkVNc1JVRkJZU3hQUVVGUExGRkJRVkVzUzBGQlN5eEpRVUZKTEVWQlEzWkRReXhGUVVOS0xFZEJRVWxJTEVkQlFVOUZMRVZCUVZjc1QwRkJVeXhIUVVGTFJTeEZRVUZQU2l4RlFVRkpMRkZCUVZFc1JVRkJSeXhEUVVOMFJDeEpRVUZOYUVJc1JVRkJUeXhEUVVGRExFVkJRMlJ4UWl4SFFVRk5UQ3hGUVVGSkxGTkJRVlVzUTBGQlEwMHNSVUZCVFVNc1NVRkJVeXhEUVVNMVFrZ3NSVUZCVDBjc1EwRkJTU3hIUVVGTFFTeEZRVUZMTEUxQlEzSkNka0lzUlVGQlMzVkNMRVZCUVVzc1IwRkJSeXhGUVVGSkxFZEJRM3BDTEVOQlFVTXNSVUZEUkVvc1JVRkJWeXhQUVVGUExFdEJRVXR1UWl4RFFVRkpMRU5CUXk5Q0xFMUJSVWx0UWl4RlFVRlhMRU5CUVVNc1JVRkRhRUlzVDBGQlZ5eERRVUZEV2l4RlFVRlJReXhEUVVGTkxFbEJRVXRWTEVWQlEzWkNXQ3hKUVVGWExFMUJRVkZETEVsQlFWY3NkVUpCUlRsQ0xFTkJRVU5STEVkQlFVOUhMRVZCUVZNc1MwRkJTM2hDTEVkQlFVMUJMRVZCUVVjc1YwRkJWMkVzUTBGQlRTeERRVUZETEVsQlEycEVVeXhGUVVGTkxFdEJRVXNzVVVGQlVWWXNRMEZCVFN4SlFVRkpReXhEUVVGTkxFVkJRVVVzUlVGRk4wTXNUMEZCVDFNc1JVRkJUU3hMUVVGTE8wRkJRVUVzUTBGQlNTeERRVU14UWl4RFFVTktMRVZCUTBGd1FpeEhRVUZYTEZsQlFXTXNRMEZCUlN4VFFVRlZMRWRCUVU4c1VVRkJVeXhMUVVGTkxFVkJRek5FUVN4SFFVRlhMRmxCUVdNc1EwRkJSU3hMUVVGTkxHOUNRVUZ4UWl4RlEzSkxkRVFzVTBGQlV6SkNMRWRCUVdORExFVkJRVkVzUTBGRE0wSXNSMEZCU1N4elFrRkJjMElzUzBGQlMwRXNRMEZCVFN4RlFVRkhMRU5CUlhCRExFbEJRVTFETEVWQlFVMHNOa1JCUkVRc1MwRkJTeXhWUVVGVlJDeERRVUZOTEVOQlF6SkRMRWRCUXpORkxFMUJRVTBzU1VGQlNTeE5RVUZOUXl4RFFVRkhMRU5CUTNaQ0xFTkJRMEVzVFVGQlR5eEZRVU5ZTEVOQlEwRXNVMEZCVTBNc1IwRkJXVU1zUlVGQlRTeERRVU4yUWl4SlFVRk5ReXhGUVVGVkxFbEJRVWtzU1VGRGNFSXNUMEZCUVVNc1IwRkJUVVlzUlVGQlRTeERRVU5TTEUxQlFVMUhMRVZCUVUxRExFVkJRVTBzUTBGRFZrRXNSVUZCU3l4UlFVTk1TQ3hGUVVGUkxFbEJRVWxITEVWQlFVc3NUVUZCVFN4RFFVTXZRaXhEUVVOS0xFTkJRVU1zUlVGRFRVZ3NRMEZEV0N4RFFVVkJMRk5CUVZOSkxFZEJRV05ETEVWQlFWRkRMRVZCUVZNc1EwRkRjRU1zVVVGQlUwTXNSVUZCU1N4SFFVRlRMRVZCUVVWQkxFVkJRVWNzUTBGRGRrSXNTVUZCVFVNc1JVRkJUeXhIUVVGSFNDeERRVUZOTEVkQlFVZEZMRU5CUVVNc1IwRkRNVUlzUjBGQlNTeERRVUZEUkN4RlFVRlJMRWxCUVVsRkxFTkJRVWtzUlVGRGFrSXNUMEZCVDBFc1EwRkRaaXhEUVVOS0xFTkJRMEVzVTBGQlUwTXNSMEZCYTBKRExFVkJRVXRNTEVWQlFWRXNRMEZEY0VNc1NVRkJUVTBzUlVGQlpTeERRVUZETEVWQlEyaENReXhGUVVGblFpeEpRVUZKTEVsQlEzUkNReXhGUVVGakxFdEJRMnhDTEUxQlFVOHNRMEZEU0N4VFFVRlhReXhIUVVGWExFTkJRMnhDU0N4RlFVRmhMRXRCUVV0SExFTkJRVTBzUlVGRGJrSkVMRWxCUTBSQkxFVkJRV05tTEVkQlFWbFpMRU5CUVVjc1IwRkRha01zU1VGQlRXUXNSVUZCVTFFc1IwRkJZME1zUlVGQlVWRXNRMEZCVnl4RlFVTm9SQ3hQUVVGQlFTeEZRVUZaTEVsQlFVbHFRaXhEUVVGTkxFVkJRMlpCTEVOQlExZ3NSVUZOUVN4WFFVRlpMRWxCUVUwc1EwRkRaQ3hSUVVGWGEwSXNTMEZCVlVnc1JVRkJZeXhEUVVNdlFpeEpRVUZOU1N4RlFVRk5TQ3hGUVVGakxFbEJRVWxGTEVOQlFVMHNSVUZEY0VNc1IwRkJTU3hQUVVGUFF5eEhRVUZSTEZWQlEyWkJMRVZCUVVrc1UwRkRTRU1zUlVGQlUwUXNSVUZCU1N4SlFVRkpMRWRCUVV0RkxFVkJRV0ZHTEVWQlFVa3NTVUZCU1N4SFFVTTFRMEVzUlVGQlNTeExRVUZMTEU5QlFWTkJMRVZCUVVrc1YwRkZja0lzUTBGRFJDeEpRVUZOUnl4RlFVRlJMRWxCUVVrc1RVRkJUU3cwUkVGQk5FUXNSVUZEY0VZc1RVRkJRVUVzUlVGQlRTeFBRVUZUU2l4RlFVTlVTU3hEUVVOV0xFTkJRMG9zUTBGRFNpeEZRVU5CTEdOQlFVRk9MRU5CUTBvc1EwRkRTaXhEUXpsRVFTeFRRVUZUVHl4SFFVRmhReXhGUVVGVFF5eEZRVUZMUXl4RlFVRkxReXhGUVVGTExFTkJRekZETEVkQlFVbEJMRWRCUVU4c1QwRkJUMEVzUjBGQlVTeFRRVU4wUWl4SFFVRkpMRTFCUVUwc1VVRkJVVUVzUTBGQlJ5eEZRVU5xUWl4UlFVRlRReXhGUVVGSkxFVkJRVWRETEVWQlFVMUdMRVZCUVVrc1QwRkJVVU1zUlVGQlNVTXNSVUZCU3l4RlFVRkZSQ3hGUVVGSExFTkJRelZETEVsQlFVMUZMRVZCUVV0SUxFVkJRVWxETEVOQlFVTXNSVUZEVmtjc1JVRkJTMUlzUjBGQllVTXNSVUZCVTBjc1JVRkJTeXhQUVVGUFF5eERRVUZETEVWQlFVZEZMRU5CUVVVc1JVRkZMME5ETEVsQlFVOHNUMEZEVUN4UFFVRlBTaXhGUVVGSlF5eERRVUZETEVWQlExQkhMRWxCUVU5RUxFbEJRMXBJTEVWQlFVbERMRU5CUVVNc1JVRkJTVWNzUlVGRGFrSXNVMEZGUzBvc1lVRkJaU3hKUVVOd1FpeFJRVUZYU3l4TFFVRkxMRTFCUVUwc1MwRkJTMHdzUlVGQlNTeExRVUZMTEVOQlFVTXNSVUZCUnl4RFFVTndReXhKUVVGTlJ5eEZRVUZMU0N4RlFVRkpMRWxCUVVsTExFTkJRVU1zUlVGRFpFUXNSVUZCUzFJc1IwRkJZVU1zUlVGQlUwY3NSVUZCUzBzc1JVRkJSMFlzUTBGQlJTeEZRVU4yUTBNc1NVRkJUeXhQUVVOUVNpeEZRVUZKTEU5QlFVOUxMRU5CUVVNc1JVRkRVRVFzU1VGQlQwUXNSMEZEV2tnc1JVRkJTU3hKUVVGSlN5eEZRVUZIUkN4RFFVRkZMRU5CUTNKQ0xGTkJSVXRLTEdGQlFXVXNTVUZEY0VJc1VVRkJWMGNzUzBGQlRTeE5RVUZOTEV0QlFVdElMRU5CUVVjc1JVRkJSeXhEUVVNNVFpeEpRVUZOU1N4RlFVRkxVaXhIUVVGaFF5eEZRVUZUUnl4RlFVRkxSeXhGUVVGSlFTeERRVUZGTEVWQlEzaERReXhKUVVGUExFOUJRMUJLTEVWQlFVa3NUMEZCVDBjc1EwRkJSU3hGUVVOU1F5eEpRVUZQUkN4SlFVTmFTQ3hGUVVGSkxFOUJRVTlITEVOQlFVVXNSVUZEWWtnc1JVRkJTU3hKUVVGSlNTeERRVUZGTEVWQlJXeENMRXRCUjBFc1VVRkJWeXhEUVVGRFF5eEZRVUZIUml4RFFVRkZMRWxCUVVzc1QwRkJUeXhSUVVGUlNDeERRVUZITEVWQlFVY3NRMEZEZGtNc1NVRkJUVWtzUlVGQlMxSXNSMEZCWVVNc1JVRkJVMGNzUlVGQlMwc3NSVUZCUjBZc1EwRkJSU3hGUVVOMlEwTXNTVUZCVHl4UFFVTlFMRTlCUVU5S0xFVkJRVWxMTEVOQlFVTXNSVUZEVUVRc1NVRkJUMFFzU1VGRFdrZ3NSVUZCU1Vzc1EwRkJReXhGUVVGSlJDeEZRVU5xUWl4RFFVZFNMRTlCUVU5UUxFVkJRVkVzUzBGQlMwTXNSVUZCUzBNc1JVRkJTME1zUTBGQlJ5eERRVU55UXl4RFEzaERRU3hUUVVGVFRTeEhRVUZMUXl4RlFVRlBReXhGUVVGTFF5eEZRVUZMTEVOQlJUTkNMRWRCUVVrc1RVRkJUU3hSUVVGUlJpeERRVUZMTEVWQlEyNUNMRTlCUVU5QkxFVkJRVTBzU1VGQlNTeERRVUZEUnl4RlFVRkhReXhKUVVGTlRDeEhRVUZMU1N4RlFVRkhMRTlCUVU5RExFTkJRVU1zUlVGQlIwWXNRMEZCUnl4RFFVRkRMRVZCUTNSRUxFZEJRVWxHTEVkQlFWTXNUMEZCVDBFc1JVRkJUU3hSUVVGWExGZEJRVmtzUTBGRk4wTXNSMEZCU1N4RFFVRkRSU3hIUVVGUExFTkJRVU5ITEVkQlFWVk1MRU5CUVVzc1JVRkRlRUlzVDBGQlQwRXNSVUZCVFN4UFFVRlBReXhGUVVGTFF5eERRVUZITEVWQlEyaERMRWxCUVUxSkxFVkJRVThzUTBGQlJTeFhRVUZaTEVWQlFVY3NUVUZCVHl4RlFVRkhMRWxCUVVzc1RVRkJWU3hGUVVOMlJFb3NSVUZCU1N4UlFVRlJMRWxCUVVsR0xFVkJRVTlOTEVOQlFVa3NSVUZETTBKS0xFVkJRVWtzVTBGQlYwc3NSMEZCVHl4RFFVTnNRa1FzUlVGQlN5eEpRVUZOUXl4RlFVTllMRTlCUVU5TUxFVkJRVWtzVVVGRFppeEZRVU5CTEVsQlFVMUxMRVZCUVUxUUxFVkJRVTBzVDBGQlQwTXNSVUZCUzBNc1EwRkJSeXhGUVVOcVF5eFBRVUZKUVN4RlFVRkpMRlZCUTBwQkxFVkJRVWtzVTBGQlUwc3NRMEZCUnl4RlFVTmlRU3hEUVVOWUxFTkJRMEVzVDBGQlNTeFBRVUZQVUN4SFFVRlZMRlZCUVZrc1JVRkJRMFVzUjBGQlFTeE5RVUZCUVN4RlFVRkxMRTFCUXpWQ0xFOUJRVTlHTEVOQlFVc3NSVUZEYUVKQkxFTkJRMWdzUTBNNVFrRXNTVUZCVFZFc1IwRkJUaXhMUVVGbExFTkJRMWdzV1VGQldVTXNSVUZCVFN4RFFVTmtMRTlCUVU4c1pVRkJaU3hMUVVGTlF5eEhRVUZYTEVOQlFVVXNUVUZCVDBRc1EwRkJTeXhEUVVGRExFTkJRekZFTEVOQlJVRXNUMEZCVVN4RFFVTktMRWxCUVUxRkxFVkJRVThzVDBGQlR5eFBRVUZQTEU5QlFVOHNaVUZCWlN4SlFVRkpMRVZCUVVjc1QwRkJUeXd3UWtGQk1FSXNTVUZCU1N4RFFVRkRMRVZCUXpsR0xFOUJRVWtzUzBGQlN5eFJRVU5NUVN4RlFVRkxMRTFCUVZFc1MwRkJTeXhOUVVGTkxFMUJRVTBzUjBGRE0wSkJMRU5CUTFnc1EwRkZRU3hMUVVGTFF5eEZRVUZMTEVOQlFVVXNVMEZCUVVNc1JVRkJWU3hqUVVGQlF5eEZRVUZsTEZOQlFVRkRMRVZCUVZVc1VVRkJRVU1zUTBGQlVTeEZRVUZKTEVOQlFVTXNSVUZCUnl4RFFVTXpSQ3hIUVVGSkxFTkJRVU5ETEVkQlFWZE1MRU5CUVVjc1JVRkRaaXhOUVVGTkxFbEJRVWtzVlVGQlZTeHBRMEZCYVVNc1JVRkRla1FzU1VGQlRVMHNSVUZCVFN4RFFVTlNMRkZCUVZNc1NVRkJTU3hKUVVOaUxFbEJRVUZPTEVWQlEwRXNTMEZCVFN4SFFVTk9MRk5CUVZWRExFbEJRV0VzUjBGRGRrSXNZVUZCWXl4SFFVTmtMR05CUVdVc1QwRkJUME1zUjBGQmEwSXNVMEZCVjBFc1JVRkJaMElzUjBGRGRrVXNSVUZEVFVzc1JVRkJUVU1zUjBGQlN5eExRVUZOTEVkQlFVbEdMRU5CUVVjc1JVRkRPVUlzUjBGQlNTeFBRVUZQU0N4SFFVRmhMRmRCUTNCQ0xFOUJRVmNzUTBGQlJTeE5RVUZCVFN4RlFVRlBMRWxCUVVGR0xFTkJRVWtzU1VGQlMwUXNSVUZCU1N4UlFVRlJMRTlCUVU4c1JVRkROVU5JTEVWQlFWTkpMRVZCUVV0RkxFTkJRVXNzUlVGRE0wSXNUMEZCVHl4UFFVRlBUQ3hIUVVGWkxGZEJRM0JDVFN4SFFVRmhUaXhGUVVGVExFTkJRVVVzUjBGQlNVY3NRMEZCU1N4RlFVRkhMRWRCUVVsQkxFTkJRVWNzUlVGRE1VTkJMRU5CUTFZc1EwRkRTaXhGUXpkQ1FTeEpRVUZOU1N4SFFVRk9MR05CUVc5Q1F5eEZRVUZUTEVOQlEzcENMRmxCUVZsRExFVkJRVkVzUTBGRGFFSXNUVUZCVFVNc1JVRkJTeXhGUVVOWUxFdEJRVXNzVDBGQlUwUXNSVUZEWkN4UFFVRlBMR1ZCUVdVc1MwRkJUU3hOUVVGUExFTkJReTlDTEV0QlFVMHNRMEZEUml4TlFVRk5MRWxCUVVrc1RVRkJUU3c0UWtGQk9FSXNRMEZEYkVRc1EwRkRTaXhEUVVGRExFTkJRMHdzUTBGTFFTeFJRVUZSUlN4RlFVRkxMRU5CUTFRc1NVRkJTVU1zUlVGRFNpeFBRVUZCUXl4SFFVRk5SaXhGUVVGTExFTkJRMUFzUzBGQlRTeERRVUZEUnl4RlFVRk5ReXhKUVVGVExFTkJRMnhDTEVkQlFVbEJMRWxCUVZNc1MwRkRWQ3hQUVVGUFJpeEhRVUZOTEUxQlEySkZMRVZCUVVzc1UwRkJWeXhMUVVGTExGTkJRM0pDU0N4RlFVRlJSeXhGUVVOb1FpeERRVU5LTEVOQlFVTXNSVUZEVFVnc1EwRkRXQ3hEUVVOQkxFOUJRVTlKTEVWQlFVMURMRVZCUVVzc1EwRkRaQ3hIUVVGSkxFTkJRVU5CTEVWQlEwUXNUVUZCVHl4RFFVRkZMRTlCUVZFc1MwRkJTeXhOUVVGUExFVkJRMnBETEVkQlFVMHNRMEZCUlN4UlFVRkJReXhGUVVGVExFbEJRVUZRTEVWQlFVc3NZMEZCUVZFc1EwRkJZeXhGUVVGSlJpeEZRVU5zUTFJc1JVRkJVeXhMUVVGTExGRkJRVkZGTEVOQlFVY3NSVUZETDBJc1IwRkJTU3hEUVVGRFJpeEZRVUZSTEVOQlExUXNTVUZCVFZjc1JVRkJUU3dyUkVGQkswUXNTMEZCU3l4TlFVRk5MRWRCUTNSR0xFMUJRVTBzU1VGQlNTeGxRVUZsUVN4RFFVRkhMRU5CUTJoRExFTkJRMEVzU1VGQlNVTXNSVUZCVDBnc1JVRkJVU3hKUVVGSlZDeERRVUZOTEVWQlR6ZENMRWRCVGt0WkxFbEJSVVJETEVkQlFVdGlMRVZCUVZFc1MwRkJUVkVzUTBGQlJ5eEZRVU4wUWtrc1JVRkJUMGdzUlVGQlVTeEpRVUZKVkN4RFFVRk5MRWRCUjNwQ0xFTkJRVU5aTEVkQlFWRkJMRVZCUVVzc1RVRkJVU3hQUVVGWExFTkJRMnBETEVsQlFVMUVMRVZCUVUwc2VVUkJRMW9zVFVGQlRTeEpRVUZKTEdWQlFXVkJMRU5CUVVjc1EwRkRhRU1zUTBGRFFTeEhRVUZKUkN4SFFVRnBRaXhKUVVOcVFrVXNSVUZCU3l4UFFVRlRMRVZCUTFaQkxFVkJRVXNzWVVGQlpTeEpRVU53UWtFc1JVRkJTeXhYUVVGaFJTeEhRVUZqV2l4RlFVRkxSaXhGUVVGUlV5eERRVUZQTEVkQlEzQkVSeXhGUVVGTExFMUJRVkZCTEVWQlFVc3NWMEZCWVVZc1IwRkJaU3hEUVVNNVF5eEpRVUZOUXl4RlFVRk5MQ3RFUVVOYUxFMUJRVTBzU1VGQlNTeGxRVUZsUVN4RFFVRkhMRU5CUTJoRExFTkJSVW9zVDBGQlQwTXNSVUZCU3l4SFFVTm9RaXhEUVVOQkxGTkJRVk5LTEVWQlFVdFBMRVZCUVZsRExFVkJRV01zUTBGRGNFTXNTVUZCVFVNc1JVRkJUU3hKUVVGSkxFdEJRVXNzVFVGQlRTeEhRVU16UWl4SFFVRkpWQ3hGUVVGTExFTkJSVXdzUjBGRVFWVXNSMEZCWXl4TFFVRkxMRTFCUVUwc1JVRkRja0pXTEVWQlFVa3NVVUZCVVN4clFrRkJiMElzUTBGQlEwRXNSVUZCU1N4UlFVRlJMRWxCUVVrc1MwRkJTeXhOUVVGTkxFVkJRVWNzUTBGREwwUXNTVUZCVFVjc1JVRkJUU3dyUkVGQkswUXNTMEZCU3l4TlFVRk5MRWRCUTNSR0xFMUJRVTBzU1VGQlNTeE5RVUZOUVN4RFFVRkhMRU5CUTNaQ0xFTkJRMEVzUjBGQlNVZ3NSVUZCU1N4WlFVTktMRTFCUVU4c1IwRkJSMU1zUTBGQlJ5eEhRVU55UWl4RFFVTkJMRTlCUVU5QkxFTkJRMWdzUTBGRFNpeEZRVU5CTEZOQlFWTklMRWRCUVdOYUxFVkJRVXRKTEVWQlFVMUhMRVZCUVZNc1EwRkRka01zUjBGQlNWVXNSMEZCVVdJc1EwRkJTU3hGUVVGSExFTkJRMllzU1VGQlRVNHNSVUZCVTAwc1JVRkJTeXhSUVVGUlNpeERRVUZITEVWQlEzcENhMElzUlVGQlUxZ3NSMEZCVjFRc1IwRkJWVk1zUlVGQlVTeEpRVUZKVkN4RFFVRk5MRVZCUTNSRUxFOUJRVTl2UWl4RlFVRlRRU3hGUVVGUExFMUJRVkZCTEVWQlFVOHNWMEZCWVN4RFFVTjJSQ3hUUVVOVFF5eEZRVUZoWml4RFFVRkpMRVZCUVVjc1EwRkRla0lzU1VGQlNXZENMRVZCUVZFc1JVRkRXaXhSUVVGWFF5eExRVUZSYWtJc1JVRkJTeXhOUVVGUExFTkJRek5DTEVsQlFVMXJRaXhGUVVGSlZpeEhRVUZqV2l4RlFVRkxjVUlzUlVGQlRXUXNRMEZCVHl4RlFVTjBRMlVzUlVGQlNVWXNTVUZEU2tFc1JVRkJVVVVzUlVGRGFFSXNRMEZEUVN4UFFVRlBSaXhEUVVOWUxGTkJRMU5ITEVWQlFVOXVRaXhEUVVGSkxFVkJRVWNzUTBGRGJrSXNTVUZCVFc5Q0xFVkJRVXRhTEVkQlFXTmFMRVZCUVV0SkxFVkJRVXNzU1VGQlMwY3NRMEZCVHl4RlFVTjZRMnRDTEVWQlFVdGlMRWRCUVdOYUxFVkJRVXRKTEVWQlFVc3NUVUZCVDBjc1EwRkJUeXhGUVVOcVJDeFBRVUZQTEV0QlFVc3NTVUZCU1dsQ0xFVkJRVWxETEVOQlFVVXNRMEZETVVJc1EwRkRRU3hOUVVGUExFVkJRMWdzUTBNNVJrRXNTVUZCVFVNc1IwRkJhVUpETEVkQlFWVXNRMEZCUTBFc1IwRkJWU3hQUVVGUFFTeEhRVUZWTEZsQlFXTXNUMEZCVDBFc1IwRkJWU3hUUVVOMFJrTXNSVUZCVGl4alFVRnhRa01zUlVGQlV5eERRVU14UWl4WlFVRlpSaXhGUVVGUExFTkJRMllzVFVGQlRVY3NSVUZCVFN4RlFVTmFMRXRCUVVzc1RVRkJVVWdzUTBGRGFrSXNRMEZEUVN4UFFVRlBTU3hGUVVGTFF5eEZRVUZMTEVOQlEySXNUMEZCVDBFc1IwRkJRU3hOUVVGQlFTeEZRVUZMTEV0QlFVOHNTMEZCU3l4TlFVRlJReXhIUVVGTExFdEJRVXNzVFVGQlQwWXNSVUZCUzBNc1EwRkJSeXhEUVVNM1JDeERRVU5CTEZWQlFWY3NRMEZEVUN4UFFVRlBMRTlCUVU4c1MwRkJTeXhMUVVGTExFTkJRelZDTEVOQlEwb3NSVUZEUVVvc1JVRkJUeXhoUVVGbExHVkJRM1JDUVN4RlFVRlBMR05CUVdkQ0xHZENRVU4yUWtFc1JVRkJUeXhOUVVGUkxGRkJRMlpCTEVWQlFVOHNZVUZCWlN4bFFVTjBRa0VzUlVGQlR5eGhRVUZsTEdWRGFrSjBRaXhKUVVGTlRTeEhRVUZ0UWl4eFFrRkRla0lzVTBGQlUwTXNSMEZCWTBNc1JVRkJUME1zUlVGQlUwTXNSVUZCVFN4RFFVdzNReXhKUVVGQlF5eEZRVTFKTEVkQlFVbEdMRVZCUVZNc1EwRkRWQ3hKUVVGTlJ5eEZRVUZSUml4RlFVRkxMRTlCUVU5SExFZEJRVXRCTEVWQlFVVXNUVUZCVVVvc1EwRkJUeXhGUVVNeFEwc3NSMEZCVTBnc1JVRkJRVU1zUlVGQlRTeExRVUZMUXl4SFFVRkxMRU5CUVVOQkxFVkJRVVVzVFVGQlRTeEpRVUY2UWl4TFFVRkJSaXhGUVVFNFFrTXNSVUZCVFN4RFFVRkRMRVZCUTNCRUxFZEJRVWtzUTBGQlEwVXNSVUZEUkN4TlFVRk5MRWxCUVVrc1RVRkJUU3hQUVVGUFRDeERRVUZQTEZsQlFWa3NSVUZET1VNc1QwRkJUMHNzUTBGRFdDeERRVU5CTEU5QlFVOUtMRVZCUVVzc1MwRkJTMGNzUjBGQlJTeERRV0oyUWl4SlFVRkJSaXhGUVdFd1FpeFJRVUZCUVN4RlFVRkJSU3hGUVVGRkxGZEJRVVlzV1VGQlFVWXNSVUZCUVN4TFFVRkJSU3hGUVVGaFRDeExRVUZWTEVOQlFVTkxMRVZCUVVVc1QwRkJUU3hEUVVNeFJDeERRVU5CTEZOQlFWTkZMRWRCUVZkUUxFVkJRVTlETEVWQlFWTlBMRVZCUVVzc1EwRm1la01zU1VGQlFVd3NSVUZCUVUwc1JVRkJRVU1zUlVGclFra3NSMEZHU1VNc1IwRkJWMWdzUTBGQlN5eEpRVU5vUWtFc1JVRkJVVUVzUlVGQlRTeFZRVU5rV1N4RlFVRlBXaXhEUVVGTExFVkJRMW9zVDBGQlQwRXNSVUZEV0N4SFFVRkpZU3hGUVVGUFlpeERRVUZMTEVWQlFVY3NRMEZEWml4SlFVRk5ZeXhIUVVGTlRDeEhRVUZCVGl4RlFVRkJTeXhGUVVGSkxFOUJRVTlQTEVWQlFVY3NSMEZCUlN4aFFVRm9RaXhaUVVGQlRpeEZRVUZCTEV0QlFVRk9MRVZCUVRaQ1N5eEZRVUZKTEU5QlFWRXNTMEZCVFVFc1IwRkRNMFFzVDBGQlFVMHNSVUZCU1N4TlFVRk5MRXRCUVV0a0xFTkJRVXNzUlVGRFltTXNRMEZEV0N4RlFVTkpaQ3hoUVVGcFFpeFJRVU5xUWtFc1lVRkJhVUlzVVVGRGFrSkJMR0ZCUVdsQ0xGTkJRMmhDTEU5QlFVOHNVVUZCVnl4aFFVRmxRU3hoUVVGcFFpeFZRVWR1UkVFc1JVRkJVVUVzUlVGQlRTeFJRVUZSTEVkQlJURkNMRWRCUVUwc1EwRkJSU3h6UWtGQlFXZENMRVZCUVhWQ0xGTkJRVUZETEVWQlFWVXNVMEZCUVVNc1JVRkJWU3hQUVVGQlF5eEZRVUZSTEdOQlFVRkRMRU5CUVdNc1JVRkJTVm9zUlVGSGVrVmhMRVZCUTBvc1IwRkJTVXdzUjBGQmVVSm9RaXhIUVVGVExFOUJRVTlCTEVkQlFWVXNVMEZCVlN4RFFVVTNSQ3hIUVVSQmNVSXNSVUZCVFVRc1JVRkJZeXhKUVVGSmNFSXNRMEZCU3l4RlFVTjZRbkZDTEVWQlEwRXNUMEZCUzBFc1JVRkJTU3hUUVVOTVFTeEZRVUZKTEU5QlFWTktMRVZCUVZOcVFpeERRVUZMTEVkQlEzaENMRWxCUVVselFpeEhRVUZOUkN4RlFVRkpMRTFCUVUwc1JVRkhNMEpCTEVWQlFVMHNRMEZCUlN4UFFVRlJMRXRCUVUwc1MwRkJUU3hKUVVGTExFVkJRMnBEUkN4RlFVRmpMRWxCUVVsd1FpeEZRVUZQY1VJc1EwRkJSeXhEUVVWd1F5eERRVU5KY0VJc1IwRkJRU3hOUVVGQlFTeEZRVUZUTEZkQlFWY3NVVUZEY0VKQkxFVkJRVlZJTEVkQlFXMUNSeXhGUVVGUkxFMUJRVTBzUTBGQlF5eEhRVU5vUkN4SlFVRkpTeXhGUVVGVFVDeEhRVUZqUXl4RlFVRlBReXhGUVVGVGEwSXNSVUZCVHl4SlFVRkpMRVZCUTNSRUxFZEJRVWtzUTBGQlEySXNSVUZCVVN4RFFVdFVMRWRCU2tsT0xFZEJRVk1zVDBGQlQwRXNSVUZCVFN4UlFVRlhMR0ZCUldwRFFTeEZRVUZSUVN4RlFVRk5MRTlCUVU4c1IwRkZja0lzUTBGQlEwRXNSMEZCVXl4UFFVRlBRU3hIUVVGVkxGTkJRVlVzUTBGRGNrTXNTVUZCVFhWQ0xFVkJRVThzU1VGQlNVTXNSVUZCVDNoQ0xFTkJRVXNzUlVGRE4wSXNUMEZCU1hGQ0xFbEJRMEZCTEVWQlFVa3NTMEZCVDBVc1IwRkRVa0VzUTBGRFdDeERRVU5CYWtJc1JVRkRTVTRzWVVGQmFVSXNTVUZEV0cxQ0xFVkJRVTlLTEVWQlFVY3NSVUZEVml4UFFVRlBMRmxCUVZrc1QwRkJUMllzUTBGQlN5eEZRVU16UW0xQ0xFVkJRVTlOTEVWQlFVY3NSVUZEVms0c1JVRkJUMG9zUlVGQlJ5eERRVU0xUWl4RFFVTkpSeXhKUVVOQlFTeEZRVUZUV2l4RFFVRk5MRVZCUTJZc1QwRkJUMFVzUlVGQlNTeFZRVVZtTEVsQlFVMWxMRVZCUVU5cVFpeEhRVUZCTEUxQlFVRkJMRVZCUVZFc1YwRkRaa0VzUlVGQlR5eFhRVUZYUlN4RlFVRkpMRTlCUVZGU0xFVkJRVTlSTEVOQlFVY3NSVUZEZUVNc1VVRkJUMFVzUlVGQlFVb3NSMEZCUVN4WlFVRkJRU3hGUVVGUkxGbEJRVklzV1VGQlFVa3NSVUZCYlVJc1QwRkJVeXhYUVVNdlFrb3NSVUZCVHl4VlFVRlZMRXRCUVV0RkxFVkJRVWtzVDBGQlVWSXNSVUZCVDFFc1EwRkJSeXhGUVVNMVF5eEpRVUZKWjBJc1JVRkJUM2hDTEVOQlFVc3NSVUZETVVJc1QwRkJTVU1zUlVGRFFYTkNMRVZCUVVzc1NVRkJUWFJDTEVWQlEweExMRVZCUVU4c1ZVRkRZbWxDTEVWQlFVc3NTVUZCVFdwQ0xFVkJRVThzUzBGRGJFSmxMRWxCUTBGQkxFVkJRVWtzUzBGQlQwVXNSMEZEVWtFc1EwRkRXQ3hEUTJ4R1FTeFRRVUZUUnl4SFFVRnRRa01zUlVGQlVVTXNSVUZCVFVNc1JVRkJUeXhEUVVNM1F5eEpRVUZKUXl4RlFVRkpSQ3hGUVVOU0xGRkJRVk5GTEVWQlFVbElMRVZCUVVzc1QwRkJVeXhGUVVGSFJ5eEhRVUZMTEVWQlFVY3NSVUZCUlVFc1JVRkJSeXhEUVVOMlF5eEpRVUZOUXl4RlFVRkpTaXhGUVVGTFJ5eERRVUZETEVWQlEyaENMRWRCUVVrc1QwRkJUME1zUjBGQlRTeFZRVUZaTEU5QlFVOHNWVUZCVlVFc1EwRkJReXhIUVVGTFFTeEhRVUZMTEVWQlFVY3NRMEZEZUVRc1NVRkJUVU1zUlVGQlNTeERRVUZETEVWQlExaEJMRVZCUVVWRUxFTkJRVU1zUlVGQlNVWXNSVUZEVUVFc1JVRkJTVWNzUTBGRFVpeE5RVVZKU0N4RlFVRkpMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU5GTEVWQlFVZEdMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJSVFZDTEVOQlEwRXNUMEZCVDBrc1IwRkJWMG9zUlVGQlJ5eFBRVUZYTEVOQlF6VkNMSE5DUVVGMVFpeEhRVU4yUWl4alFVRmxMRWRCUTJZc1UwRkJWU3hKUVVGTkxFTkJRMW9zVFVGQlRTeEpRVUZKTEUxQlFVMHNPRU5CUVRoRExFTkJRMnhGTEVWQlEwRXNUMEZCUVVnc1JVRkRRU3hqUVVGbExFbEJRVWtzUjBGRGRrSXNRMEZCUXl4RFFVTk1MRU5CUjBFc1NVRkJUVkVzUjBGQlpWQXNSMEZCVTBFc1IwRkJVU3hOUVVOcVF5eFBRVUZQUVN4SFFVRlRMRlZCUVZrc1EwRkJReXhEUVVGRFFTeEZRVUZMTEU5QlFVOHNVVUZCVVN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxFdEJRelZFVVN4SFFVRk9MR05CUVhsQ1F5eEZRVUZUTEVOQlF6bENMRmxCUVZsRExFVkJRVTFZTEVWQlFWRXNRMEZEZEVJc1RVRkJUVmNzUTBGQlNTeEZRVU5XTEU5QlFVOHNaVUZCWlN4TFFVRk5MRk5CUVZVc1EwRkRiRU1zVFVGQlQxZ3NSVUZEVUN4aFFVRmpMRWRCUTJRc1YwRkJXU3hIUVVOYUxGTkJRVlVzUlVGRFpDeERRVUZETEVOQlEwd3NRMEZOUVN4TlFVRk5RU3hGUVVGUkxFTkJRMVlzU1VGQlRWa3NSVUZCVHl4UFFVRlBMRTlCUVU4c1QwRkJUeXhsUVVGbExFbEJRVWtzUlVGQlJ5eFBRVUZQTERCQ1FVRXdRaXhKUVVGSkxFTkJRVU1zUlVGRE9VWXNUMEZCU1Zvc1NVRkRRVmtzUlVGQlN5eFBRVUZUV2l4SFFVTnNRbGtzUlVGQlN5eE5RVUZSUVN4RlFVRkxMRTFCUVUwc1NVRkJTVU1zUjBGQlRVTXNSVUZCVDBRc1EwRkJSU3hIUVVGTFJTeEZRVUZQUml4RFFVRkZMRVZCUVVsQkxFVkJRVWNzVFVGQlRXSXNRMEZCVFN4RlFVRkpZU3hEUVVGRkxFVkJRemxGTEV0QlFVc3NVVUZEVEVRc1JVRkJTeXhOUVVGUkxFdEJRVXNzVFVGQlRTeE5RVUZOTEVkQlF6TkNRU3hEUVVOWUxFTkJUVUVzVFVGQlRWZ3NSVUZCVFVNc1JVRkJUeXhEUVVObUxFZEJRVWxOTEVkQlFWbFFMRU5CUVVrc1JVRkRhRUlzUzBGQlN5eEpRVUZKUXl4RFFVRkxMRTFCUTJJc1EwRkRSQ3hIUVVGTkxFTkJRVU5qTEVWQlFVc3NSMEZCUjBNc1EwRkJTU3hGUVVGSmFFSXNSVUZEYWtKcFFpeEZRVUZQTEV0QlFVc3NTVUZCU1VZc1JVRkJTeXhGUVVGSkxFVkJReTlDTEVkQlFVbEhMRVZCUVdGRUxFTkJRVWtzUlVGRGFrSkJMRVZCUVVzc1RVRkJUVVFzUlVGQlRXWXNRMEZCU3l4VlFVTnFRbWRDTEVsQlFWTXNVVUZCWVN4TFFVRkxMRTlCUTJoRExFdEJRVXNzU1VGQlNVWXNSVUZCUzJwQ0xFZEJRVzFDTEV0QlFVc3NUMEZCVVd0Q0xFVkJRVTFtTEVOQlFVc3NRMEZCUXl4TlFVVXhSQ3hQUVVGTkxFbEJRVWtzVFVGQlRTd3JRa0ZCSzBKakxFTkJRVWNzY1VKQlFYRkNReXhEUVVGSkxFVkJRVVVzUTBGRGNrWXNRMEZEU2l4RFFVdEJMRk5CUVZOb1FpeEZRVUZOTEVOQlExZ3NSMEZCVFN4RFFVRkRaU3hGUVVGTExFZEJRVWRETEVOQlFVa3NSVUZCU1doQ0xFVkJRM1pDTEVkQlFVbG5RaXhGUVVGTExGTkJRVmNzUlVGRGFFSXNUMEZCVHl4TFFVRkxMRTlCUVU5RUxFTkJRVWNzUlVGRE1VSXNTVUZCVFVVc1JVRkJUeXhMUVVGTExFbEJRVWxHTEVWQlFVc3NSVUZCU1N4RlFVTXZRaXhIUVVGSlJ5eEZRVUZoUkN4RFFVRkpMRVZCUTJwQ0xFOUJRVTlCTEVWQlFVc3NVMEZCVTBRc1EwRkJTU3hGUVVWNlFpeE5RVUZOTEVsQlFVa3NUVUZCVFN3clFrRkJLMEpFTEVOQlFVY3NjVUpCUVhGQ1F5eERRVUZKTEVWQlFVVXNRMEZEY2tZc1EwRk5RU3hOUVVGTmFFSXNSVUZCVFcxQ0xFVkJRVmtzUTBGRGNFSXNSMEZCVFN4RFFVRkRTaXhGUVVGTExFZEJRVWRETEVOQlFVa3NSVUZCU1doQ0xFVkJRMnBDYVVJc1JVRkJUeXhMUVVGTExFbEJRVWxHTEVWQlFVc3NSVUZCU1N4RlFVTXZRaXhQUVVGSlF5eEZRVUZMTEZOQlFWY3NSVUZEVkN4RFFVRkRSeXhIUVVGalF5eEZRVUZUU0N4RFFVRkpMRVZCUVVsQkxFVkJRVXNzVFVGQlVVRXNSVUZGTjBORExFVkJRV0ZFTEVOQlFVa3NSVUZCU1VFc1JVRkJTeXhOUVVGTlJDeEZRVUZOUnl4RFFVRlZMRVZCUVVrc1RVRkRia1VzUTBGRFFTeHBRa0ZCYVVKRkxFVkJRV0VzUTBGRE1VSXNUMEZCVHl4TFFVRkxMRTFCUVUwc1RVRkJUVW9zUjBGQlVTeERRVU0xUWl4SFFVRkpMRU5CUVVOSUxFVkJRVTlITEVOQlFVa3NSVUZEV2l4TlFVRlBMRWRCUTFnc1NVRkJUVXNzUlVGQlNVd3NSVUZCU3l4TlFVTm1MRTlCUVZGTExFZEJRVXNzVFVGRFVrUXNSMEZEUjBRc1JVRkJVMFVzUTBGQlF5eEhRVU5XUVN4RlFVRkZMRTlCUVZNc1RVRkRXQ3hEUVVGRFFTeEZRVUZGTEdWQlEwZ3NRMEZCUTBFc1JVRkJSU3hUUVVOSUxFTkJRVU5CTEVWQlFVVXNSMEZEWml4RFFVRkRMRU5CUTB3c1EwRkpRU3hOUVVGTmRFSXNSVUZCVFN4RFFVTlNMRWRCUVUwc1EwRkJRMlVzUlVGQlN5eEhRVUZIUXl4RFFVRkpMRVZCUVVsb1FpeEZRVU4yUWl4SFFVRkpaMElzUlVGQlN5eFRRVUZYTEVWQlEyaENMRTlCUVU4c1MwRkJTeXhKUVVGSlJDeERRVUZITEVWQlEzWkNMRWxCUVUxRkxFVkJRVThzUzBGQlN5eEpRVUZKUml4RlFVRkxMRVZCUVVrc1JVRkRMMElzVDBGQlQwY3NSVUZCWVVRc1EwRkJTU3hGUVVGSlFTeEZRVUZMTEUxQlFVMUVMRU5CUVVrc1JVRkJTU3hGUVVOdVJDeERRVXRCTEUxQlFVMW9RaXhGUVVGTlF5eEZRVUZQTEVOQlEyWXNSMEZCVFN4RFFVRkRZeXhGUVVGTExFZEJRVWRETEVOQlFVa3NSVUZCU1doQ0xFVkJRM1pDTEVkQlFVbG5RaXhGUVVGTExGTkJRVmNzUlVGRGFFSXNTMEZCU3l4SlFVRkpSQ3hGUVVGTFpDeERRVUZMTEUxQlJXeENMRU5CUTBRc1NVRkJUV2RDTEVWQlFVOHNTMEZCU3l4SlFVRkpSaXhGUVVGTExFVkJRVWtzUlVGREwwSXNSMEZCU1Vjc1JVRkJZVVFzUTBGQlNTeEZRVU5xUWtFc1JVRkJTeXhOUVVGTlJDeEZRVUZOWml4RFFVRkxMRlZCUTJwQ1owSXNTVUZCVXl4UlFVRmhMRXRCUVVzc1QwRkRhRU1zUzBGQlN5eEpRVUZKUml4RlFVRkxha0lzUjBGQmJVSXNTMEZCU3l4UFFVRlJhMElzUlVGQlRXWXNRMEZCU3l4RFFVRkRMRTFCUlRGRUxFOUJRVTBzU1VGQlNTeE5RVUZOTEN0Q1FVRXJRbU1zUTBGQlJ5eHhRa0ZCY1VKRExFTkJRVWtzUlVGQlJTeERRVU55Uml4RFFVTktMRU5CUTBvc1JVTjZTVUVzU1VGQlRVOHNSMEZCYjBKRExFZEJRVkZCTEVWQlFVa3NVVUZCVVN4clFrRkJiVUlzUjBGQlJ5eEZRVU53UlN4VFFVRlRReXhIUVVGalF5eEZRVUZUUXl4RlFVRlJMRU5CUTNCRExFMUJRVWtzVVVGQlVTeExRVUZMUkN4RFFVRlBMRVZCUTJKQkxFVkJRVkVzVlVGQlZTeERRVUZETEVWQlEzWkNReXhGUVVGVFJDeEZRVUZSTEZGQlFWRXNZVUZCWTBNc1EwRkJUU3hGUVVGSlJDeERRVU0xUkN4RFFVTkJMRWxCUVUxRkxFZEJRV01zUTBGQlEwb3NSVUZCUzBjc1JVRkJVVVFzU1VGQldVWXNSVUZCU1N4VFFVRlRPMEZCUVVFc1EwRkJTU3hGUVVONlJFTXNSMEZCWTBNc1JVRkJVME1zUTBGQlRTeEZRVU0zUWtRc1JVRkJVU3hUUVVGVE8wRkJRVUVzUTBGQlNTeEZRVU5xUWp0QlFVRkJMRVZCUVU5RUxFZEJRV05ETEVWQlFWTkRMRU5CUVUwc1IwRkRia05JTEVWQlFVa3NVMEZCVXl4SFFVRkhMRVZCUVVrc1IwRkJTeXhMUVVGUFJTeEZRMnBDTTBNc1NVRkJUVWNzUjBGQldTeFBRVU5hUXl4SFFVRmhMRkZCUTJKRExFZEJRV01zVTBGTmNFSXNVMEZCVTBNc1IwRkJZME1zUlVGQlRVTXNSVUZCVVVNc1JVRkJUeXhQUVVGUkxFTkJRVVVzWTBGQlFVTXNSVUZCWlN4VlFVRkJReXhGUVVGWkxFZEJRVWtzWjBKQlFVRkRMRVZCUVd0Q0xFZEJRVWtzVDBGQlFVTXNSVUZCVVN4WFFVRkJReXhEUVVGWExFVkJRVWtzUTBGQlF5eEZRVUZITEVOQlEyeEpMRWRCUVVrc1EwRkJRMGdzUjBGQllVRXNSVUZCV1N4RlFVTXhRaXhQUVVGUFNpeEZRVU5RU1N4RlFVRlpReXhKUVVOYVFTeEZRVUZyUWl4SFFVTjBRaXhKUVVGTlJ5eEZRVUZWTEV0QlFVc3NTVUZCU1N4RlFVRkpTQ3hGUVVGcFFpeEZRVUZKUkN4RlFVRlpTQ3hGUVVGUExFMUJRVTBzUlVGRE0wVXNSMEZCU1VRc1JVRkJTeXhSUVVGVlVTeEZRVU5tTEU5QlFVOVNMRVZCUTFnc1NVRkJUVk1zUlVGQlVTeERRVUZETEVWQlExUkRMRVZCUVdVc1EwRkJReXhGUVVOc1FrTXNSVUZCVFZBc1JVRkJXVWdzUlVGQlR5eFBRVU42UWl4UFFVRlBSU3hIUVVGclFpeFhRVU55UWtFc1JVRkJaMEpETEVWQlFWa3NTMEZCU3l4SlFVRkpMRVZCUVVkRExFTkJRV1VzUlVGRGRrUkpMRVZCUVUwc1MwRkJTeXhEUVVGRExFVkJSVnBGTEVWQlFVMVFMRVZCUVZsRUxFZEJSVEZDTEVsQlFVbFRMRVZCUTBGRExFVkJRMEZETEVWQlFWY3NSMEZEV0VNc1JVRkJTU3hIUVVOS1F5eEZRVUZYTEVkQlExaERMRVZCUVZNc1IwRkRWR1lzU1VGQlUwd3NTMEZEVkd0Q0xFVkJRVWxITEVkQlFYbENiRUlzUlVGQlRXVXNSVUZCUjJRc1JVRkJUeXhOUVVGTkxFVkJReTlEWXl4SlFVRk5MRXRCUTA1S0xFVkJRVTFKTEVWQlFVbFFMRWxCUld4Q0xGRkJRVk5YTEVWQlFVdEJMRVZCUVV0dVFpeEZRVUZOWlN4SFFVRkxMRU5CUVVVc1IwRkJTeXhEUVVOcVF5eEhRVUZKWWl4SlFVRlRTaXhKUVVGbGNVSXNTVUZCVHl4TFFVRk5MRU5CUlhKRExFOUJSRUZJTEVWQlFWZEVMRVZCUTBobUxFVkJRVXRsTEVWQlFVa3NRMEZCUXl4RlFVRkhMRU5CUTJwQ0xFbEJRVXNzU1VGRFJFRXNSMEZCU3l4RlFVTk1MRTFCUTBvc1NVRkJTeXhKUVVORVFTeEhRVUZMTEVWQlEwd3NUVUZEU2l4SlFVRkxMRWxCUTBSQkxFZEJRVXNzUlVGRFRDeE5RVU5LTEZGQlEwbEJMRWRCUVVzc1EwRkRZaXhEUVVOQlJTeEZRVUZUUml4RFFVTmlMRU5CUTBFc1IwRkJTVWtzU1VGQlR6dEJRVUZCTEVWQlEwaHFRaXhKUVVGVFRDeExRVU5VYTBJc1JVRkJTVWNzUjBGQmVVSnNRaXhGUVVGTlpTeEZRVUZIWkN4RlFVRlBMRTFCUVUwc1IwRkRka1JWTEVWQlFVMUpMRVZCUVVsa0xFVkJRVThzVDBGQlUwOHNSVUZETVVKSkxFVkJRVkVzVjBGRlVDeERRVU5FTEVkQlFVbFBMRWxCUVU4c1MwRkRVRTRzUjBGRFFVRXNTVUZCVXl4TFFVTlVRU3hKUVVGVE8wRkJRVUVzUjBGRFZFRXNTVUZCVXl4SlFVRk5MRU5CUldZc1NVRkJUVThzUlVGQlQzQkNMRVZCUVV0bExFVkJRVWtzUTBGQlF5eEZRVU51UWtzc1IwRkJVVUVzU1VGQlV5eExRVUZQUVN4SlFVRlRPMEZCUVVFc1IwRkJVVUVzU1VGQlV5eE5RVU5zUkZJc1JVRkJVVWNzUlVGRGFFSXNRMEZEUVN4SFFVRkpRU3hIUVVGTFNpeEZRVU5NTEVkQlFVbERMRVZCUTBGSUxFVkJRVTBzUzBGQlMwY3NRMEZCU3l4RlFVTm9Ra1FzUlVGQlRVTXNSVUZCVVVvc1JVRkRaRWtzUlVGQlVTeGxRVVZJVml4SlFVRlRTaXhIUVVGaExFTkJSVE5DTEV0QlFVOWxMRWxCUVZNc1MwRkJUMEVzU1VGQlV5eExRVU0xUWtFc1JVRkJUMDBzUlVGRFVFRXNSVUZCUzI1Q0xFVkJRVTFsTEVkQlFVc3NRMEZCUlN4RlFVTnNRa1FzUlVGQlZ5eEhRVWRtTEVsQlFVMVBMRVZCUVVsT0xFVkJRVWxGTEVWQlFWTXNSVUZCU1VZc1JVRkJTU3hGUVVGSlF5eEZRVUZYTEVWQlJUbERMRWRCUVVsT0xFVkJRV0ZYTEVOQlFVTXNSVUZEWkN4UFFVRlBja0lzUlVGRFdGTXNSVUZCVFN4TFFVRkxXU3hEUVVGRExFVkJRMXBZTEVWQlFXRlhMRU5CUVVNc1JVRkJTU3hIUVVOc1FsWXNSVUZCVFZVc1JVRkJTV0lzUlVGRFZra3NSVUZCVVN4TlFVTmFMRTFCUlVsRkxFVkJRVmNzUlVGSGRrSXNRMEZEUVVRc1JVRkJUMDBzUTBGRFdDeERRVWRCTEVkQlJrbE1MRWRCUVZsUUxFZEJRMXBCTEVWQlFWY3NSVUZEV0VVc1JVRkJUU3hUUVVGWExFVkJRMnBDTEU5QlFVOVVMRVZCUTFCTkxFZEJRMEZCTEVWQlFVOHNSVUZEV0N4SlFVRkpaMElzUlVGQlRYUkNMRVZCUVVzc1RVRkJUU3hGUVVGSFV5eEZRVUZOTEVOQlFVTXNRMEZCUXl4RlFVTm9ReXhSUVVGVFRTeEZRVUZKTEVWQlFVZEJMRVZCUVVsT0xFVkJRVTBzVDBGQlVTeEZRVUZGVFN4RlFVRkhMRU5CUTI1RExFbEJRVTFSTEVWQlFVOWtMRVZCUVUxTkxFTkJRVU1zUlVGRFpFb3NSVUZCVFVZc1JVRkJUVTBzUlVGQlNTeERRVUZETEVkQlFVdG1MRVZCUVVzc1QwRkROMEoxUWl4SlFVRlRMRVZCUTFSRUxFVkJRVTA3UVVGQlFTeEZRVUZMY2tJc1EwRkJUU3hIUVVGSFJDeEZRVUZMTEUxQlFVMHNSVUZCUjFjc1EwRkJSeXhEUVVGRExFbEJSV3hEVkN4SlFVRlRTaXhKUVVGbFdTeEZRVUZoWVN4RFFVRkpMRWxCUTNwRFJDeEhRVUZQTEVkQlFVZDBRaXhGUVVGTGRVSXNRMEZCU1N4RFFVRkRMRTFCUTNoQ1JDeEhRVUZQTzBGQlFVRXNSVUZCUzNKQ0xFTkJRVTBzUjBGQlIwUXNSVUZCU3l4TlFVRk5kVUlzUlVGQlR5eEZRVUZIV2l4RFFVRkhMRU5CUVVNc1IwRkZkRVFzUTBGRFFTeFBRVUZQVnl4RFFVTllMRU5CUzBFc1UwRkJVMG9zUjBGQmVVSnNRaXhGUVVGTlpTeEZRVUZIWkN4RlFVRlJMRU5CUXk5RExFbEJRVWxWTEVWQlFVMUpMRVZCUTA1VExFVkJRVkZVTEVWQlFVa3NSVUZEV2trc1JVRkJTMjVDTEVWQlFVdDNRaXhEUVVGTExFVkJRMjVDTEV0QlFVOU1MRWxCUVU4c1MwRkJUMEVzU1VGQlR5eExRVU40UWl4SFFVRkpTaXhGUVVGSlV5eEZRVUZSZGtJc1JVRkRXbXRDTEVWQlFVdHVRaXhGUVVGTExFVkJRVVZsTEVOQlFVTXNUVUZGV2l4RFFVTkVMRWRCUTBsSkxFVkJRVXR1UWl4RlFVRkxMRVZCUVVWbExFTkJRVU1zVVVGRFVra3NSMEZCVFVFc1NVRkJUenRCUVVGQkxFZEJRM1JDVWl4RlFVRk5TU3hGUVVOT1V5eEZRVUZSVkN4RlFVRkpMRVZCUTFwSkxFVkJRVXR1UWl4RlFVRkxkMElzUTBGQlN5eERRVU51UWl4RFFVVktMRTlCUVU5aUxFTkJRMWdzUTBNMVNVRXNTVUZCVFdNc1IwRkJhVUlzUTBGQlEwTXNSVUZCUzBNc1MwRkJZU3hEUVVOMFF5eGpRVUZsUVN4RlFVRlZSQ3hGUVVGSkxFOUJRVThzVDBGQlUwRXNSVUZCU1N4alFVTnFSQ3hWUVVGWFFTeEZRVUZKTEZGQlFWRXNWVUZEZGtJc1owSkJRV2xDUVN4RlFVRkpMRkZCUVZFc1pVRkRha01zUjBGSFRVVXNSMEZCTUVKRExFZEJRVkVzYlVKQlFXMUNMRXRCUVV0QkxFTkJRVWNzUlVGRGJrVXNVMEZCVTBNc1IwRkJiMEpFTEVWQlFVdEZMRVZCUVZkRExFVkJRV01zUTBGRGRrUXNSMEZCU1N4RFFVRkRSQ3hIUVVGaFFTeEZRVUZaTEVWQlF6RkNMRTFCUVU4c1IwRkRXQ3hKUVVGTlJTeEZRVUZSUml4RlFVRlpReXhGUVVOd1FrVXNSVUZCVTB3c1JVRkJTU3hQUVVOdVFpeEhRVUZKU3l4SFFVRlZSQ3hGUVVOV0xFMUJRVThzUjBGRFdDeFJRVUZUTEVWQlFVa3NSVUZCUjBVc1JVRkJVU3hGUVVGSExFVkJRVWxFTEVWQlFWRXNSVUZCUlN4RlFVTnlReXhIUVVGSlRDeEZRVUZKTEVOQlFVTXNTVUZCVFR0QlFVRkJMRVZCUVUwc1EwRkRha0lzUjBGQlNTeEZRVUZKVFN4RlFVRlJSaXhGUVVOYUxFMUJRVThzUjBGRldDeEhRVVJCUlN4RlFVRlJMRVZCUVVrc1JVRkRVa1FzUlVGQlUwTXNSMEZCVTBZc1JVRkRiRUlzVFVGQlR5eEZRVU5tTEVOQlJVb3NUVUZCVHl4RlFVTllMRU5CUTBFc1UwRkJVMGNzUjBGQmJVSkRMRVZCUVU5WUxFVkJRVXNzUTBGRGNFTXNTVUZCVFZrc1JVRkJUeXhMUVVGTExGVkJRVlZFTEVOQlFVc3NSVUZEYWtNc1IwRkJTVmdzUlVGQlNTeFJRVUZSTEcxQ1FVTmFMRTlCUVU5WkxFVkJRMWdzUjBGQlRTeERRVUZGTEZsQlFVRkRMRU5CUVZrc1JVRkJTV0lzUlVGRGJFSmpMRVZCUVhGQ1pDeEZRVUZKTEZGQlFWRXNLMEpCUTJwRFpTeEZRVUZUWml4RlFVRkpMRk5CUVZkRkxFZEJRWFZDVXl4RFFVRkxMRVZCUVVrc1MwRkJUeXhKUVVOcVJWSXNSVUZCVFN4SFFVTk9UU3hGUVVGUkxFVkJRMW9zVVVGQlUwOHNSVUZCU1N4RlFVRkhReXhGUVVGTFRDeEZRVUZMU1N4RFFVRkRMRVZCUVVkRExFVkJRVWxCTEVWQlFVdE1MRVZCUVVzc1JVRkJSVWtzUTBGQlF5eEZRVkV6UXl4SFFWQkpReXhKUVVGUExFdEJRVTlNTEVWQlFVdEpMRVZCUVVrc1EwRkJReXhKUVVGTkxFMUJRVkZLTEVWQlFVdEpMRVZCUVVrc1EwRkJReXhKUVVGTkxFMUJSWFJFWWl4SFFVRlBVeXhGUVVGTExFMUJRVTFJTEVWQlFVOVBMRU5CUVVNc1JVRkJTU3hOUVVNNVFrRXNSMEZCU3l4RlFVTk1VQ3hGUVVGUlR5eEZRVU5TUXl4RlFVRkxMRTFCUlV4QkxFbEJRVThzUzBGRFVDeFBRVUZSVEN4RlFVRkxTU3hGUVVGSkxFTkJRVU1zUlVGQlJ5eERRVU5xUWl4SlFVRkxMRWxCUTBRc1EwRkRTV0lzUjBGQlQxTXNSVUZCU3l4TlFVRk5TQ3hGUVVGUFR5eERRVUZETEVWQlF6RkNMRWxCUVUxRkxFVkJRVTlPTEVWQlFVc3NUMEZCVDBrc1JVRkJTU3hGUVVGSExFTkJRVU1zUlVGRGFrTXNUMEZCVVVVc1JVRkJUU3hEUVVOV0xFbEJRVXNzVDBGRFJHWXNSMEZCVHl4TlFVTlFMRTFCUTBvc1NVRkJTeXhQUVVORVFTeEhRVUZQTEUxQlExQXNUVUZEU2l4SlFVRkxMRTlCUTBSQkxFZEJRVThzVFVGRFVDeE5RVU5LTEVsQlFVc3NUMEZEUkVFc1IwRkJUeXhOUVVOUUxFMUJRMG9zU1VGQlN5eFBRVU5FUVN4SFFVRlBMRTFCUTFBc1RVRkRTaXhKUVVGTExFOUJRMFJCTEVkQlFVOHNUVUZEVUN4TlFVTktMRWxCUVVzc1QwRkRSRUVzUjBGQlR5eE5RVU5RTEUxQlEwb3NTVUZCU3l4UFFVTkVRU3hIUVVGUExFMUJRMUFzVFVGRFNpeFJRVU5SWlN4RlFVRkxMRTlCUVU4c1JVRkJSeXhEUVVGRExFbEJRVTBzUzBGRGRFSm1MRWRCUVU4c1RVRkJVV1VzUlVGQlN5eFBRVUZQTEVOQlFVTXNSVUZGTlVKbUxFZEJRVTlUTEVWQlFVc3NUMEZCVDBrc1JVRkJSeXhEUVVGRExFTkJRMjVETEVOQlEwRkJMRWRCUVVzc1JVRkRURkFzUlVGQlVVOHNSVUZCU1N4RFFVTm9RaXhEUVVOQkxFMUJRMG9zU1VGQlN5eEpRVU5FTEVkQlFVbElMRWRCUTBGRUxFVkJRVXRKTEVWQlFVa3NRMEZCUXl4SlFVRk5MRXRCUTJoQ1NpeEZRVUZMTEU5QlFWTkZMRVZCUTJSRkxFZEJRVXNzVFVGRlNpeERRVWRFTEVsQlJFRmlMRWRCUVU5VExFVkJRVXNzVFVGQlRVZ3NSVUZCVDA4c1EwRkJReXhGUVVGSk8wRkJRVUU3UVVGQlFTeEZRVU4yUWtvc1JVRkJTMGtzUlVGQlNTeERRVUZETEVsQlFVMHNUVUZEYmtKS0xFVkJRVXRKTEVWQlFVa3NRMEZCUXl4SlFVRk5MRXRCUTJoQ1NpeEZRVUZMU1N4RlFVRkpMRU5CUVVNc1NVRkJUU3hMUVVOb1FtSXNSMEZCVHp0QlFVRkJMRVZCUTFCaExFZEJRVXNzUlVGRlZHSXNSMEZCVDFrc1JVRkZTRWdzUlVGQlMwa3NSVUZCU1N4RFFVRkRMRWxCUVUwc1RVRkRhRUppTEVkQlFVOHNUVUZEV0dFc1IwRkJTeXhGUVVOTVVDeEZRVUZSVHl4RlFVRkpMRU5CUTJoQ0xFTkJRMEVzVFVGRFNpeFJRVU5KUVN4SFFVRkxMRU5CUTJJc1EwRkZVaXhQUVVGQllpeEZRVUZOVFN4RlFVRlJUaXhGUVVGTlV5eEZRVUZMTEUxQlFVMUlMRU5CUVVzc1JVRkJTVWNzUlVGRGFrTkRMRVZCUTBSV0xFVkJRMEZuUWl4SFFVRmphRUlzUlVGQlMxa3NSVUZCVVVzc1IwRkJZWEpDTEVkQlFXVkRMRVZCUVVzc1JVRkJTeXhEUVVGRExFTkJRelZGTEVOQlEwRXNVMEZCVTNGQ0xFZEJRVzFDVml4RlFVRlBXQ3hGUVVGTExFTkJRM0JETEVkQlFVbEJMRVZCUVVrc1VVRkJVU3hqUVVGblFpeEpRVU16UWtFc1JVRkJTU3hoUVVGbFZ5eEZRVUZOTEZOQlFWTTdRVUZCUVN4RFFVRkpMRWRCUTNaRExHdENRVUZyUWl4TFFVRkxRU3hEUVVGTExFVkJSVFZDTEU5QlFVOUVMRWRCUVcxQ1F5eEZRVUZQV0N4RFFVRkhMRVZCUTNoRExFbEJRVTFsTEVWQlFWTm1MRVZCUVVrc1UwRkJWMFVzUjBGQmRVSlRMRU5CUVVzc1JVRkJTU3hMUVVGUExFbEJReTlFVnl4RlFVRk5MRWxCUVUxWUxFVkJRVTBzVVVGQlVTeExRVUZOTEVsQlFVa3NSVUZCUlN4UlFVRlJMRTlCUVZFN1FVRkJRU3hGUVVGUFNTeERRVUZOTEVWQlFVVXNSVUZCU1N4SlFVTXZSU3hQUVVGUFppeEZRVUZKTEZsQlEweHpRaXhGUVVOQlNDeEhRVUZqUnl4RlFVRkxVQ3hGUVVGUlVTeEhRVUZYZUVJc1IwRkJaVU1zUlVGQlN5eEZRVUZMTEVOQlFVTXNRMEZETVVVc1EwRkRRU3hUUVVGVGQwSXNSMEZCWVdJc1JVRkJUMWdzUlVGQlN5eERRVU01UWl4SFFVRk5MRU5CUVVVc1dVRkJRWGxDTEVOQlFWa3NSVUZCU1hwQ0xFVkJRVWtzVVVGRGVFSXdRaXhGUVVOS0xFZEJRVWxFTEVsQlFXZENMRWRCUTJoQ1F5eEZRVUZMYUVJc1QwRkRTaXhEUVVORUxFbEJRVTFwUWl4RlFVRlphRUlzUlVGQlRTeFRRVUZUTEVkQlFVY3NSVUZET1VKcFFpeEZRVUZaYWtJc1JVRkJUU3hUUVVGVExFZEJRVWNzUlVGRGFFTm5RaXhIUVVGaExFTkJRVU5ETEVWQlEyUkdMRVZCUVV0TUxFZEJRMEZQTEVkQlFXRXNRMEZCUTBRc1JVRkRia0pFTEVWQlFVdG9RaXhIUVVWTVowSXNSVUZCUzBRc1JVRkJZMG9zUjBGQmNVSllMRVZCUTJoRUxFTkJRMEVzVDBGQlQyZENMRVZCUVVkbUxFVkJRVTlZTEVOQlFVY3NRMEZEZUVJc1EwRkhRU3hKUVVGSk5rSXNSMEZEU2l4SFFVRkpMRU5CUTBGQkxFZEJRVzFDTEVsQlFVa3NUMEZCVHp0QlFVRkJPMEZCUVVFN1FVRkJRU3hMUVVFd1FpeEhRVUZITEVOQlF5OUVMRTlCUTAxRExFVkJRVUVzUTBGRFJrUXNSMEZCYlVJc1kwRkRka0lzUTBGRFFTeFRRVUZUUlN4SFFVRlpMRU5CUVVVc1VVRkJRVU1zUlVGQlV5eExRVUZCUXl4RlFVRk5MRTFCUVVGMFFpeERRVUZOTEVWQlFVZFlMRVZCUVV0clF5eEZRVUZYUXl4RlFVRmhMRU5CUTNoRkxFZEJRVTBzUTBGQlJTeFhRVUZCUXl4RlFVRlpMR05CUVVGRExFVkJRV1VzVlVGQlFXaERMRU5CUVZVc1JVRkJTVXdzUlVGQlNTeFJRVWR5UkN4SFFVRkpMRU5CUVVOdlF5eEhRVUZqTEZsQlFWa3NTMEZCUzNwQ0xFTkJRVXNzUjBGQlN5eFJRVUZSTEV0QlFVdEJMRU5CUVVzc1JVRkROVVFzVDBGQlQyRXNSMEZCWVdJc1JVRkJUMWdzUTBGQlJ5eEZRVVZzUXl4SlFVRk5aU3hGUVVGVFppeEZRVUZKTEZOQlEyUkJMRVZCUVVrc2EwSkJRVzlDUlN4SFFVRjFRbE1zUTBGQlN5eEZRVUZKTEV0QlFVOHNTVUZET1VReVFpeEZRVUZWUml4SlFVRmxMRlZCUTNwQ0xFZEJRMEZCTEVsQlFXVXNWVUZCV1Vnc1NVRkJVMDBzUlVGQlR5eGhRVU4yUXl4SFFVTkJUaXhKUVVGVFRTeEZRVUZQTEdOQlExb3NSMEZEUVN4RFFVRkRia01zUjBGQmIwSlBMRVZCUVU5T0xFVkJRVmRWTEVWQlFVOHNUVUZCVFN4RlFVTnNSU3hIUVVGSkxFTkJRVU5LTEVWQlEwUXNUMEZCVHpKQ0xFVkJRVlU3UVVGQlFTeEZRVUZSTzBGQlFVRXNSVUZGTjBJc1NVRkJTVVVzUlVGRFFVTXNSVUZEU2l4SlFVRkxRU3hGUVVGWE9VSXNSVUZCVFN4UFFVRlJPRUlzUlVGQlZ5eEZRVUZITEVWQlFVVkJMRVZCUVZVc1EwRkRjRVFzU1VGQlRYaENMRVZCUVV0T0xFVkJRVTA0UWl4RlFVRlhMRU5CUVVNc1JVRkROMElzUjBGQlNYaENMRWxCUVU4N1FVRkJRU3hIUVVGUlFTeEpRVUZQTEV0QlFWRkJMRWxCUVU4c1NVRkRja01zUzBGRFVpeERRVU5CTEVsQlFVbDVRaXhGUVVGTkwwSXNSVUZCVFN4VlFVRlZPRUlzUTBGQlVTeEZRVU0xUWtVc1JVRkJWMFFzUlVGQlNTeFJRVUZSTzBGQlFVRXNRMEZCU1N4RlFVTTNRa01zU1VGQllTeEhRVU5pU0N4RlFVRlJMRWxCUlVnM1FpeEpRVUZWSzBJc1IwRkJUME1zU1VGQllVUXNSVUZCU1N4UFFVRlRMRWRCUTJoRVJpeEZRVUZSTEVsQlEwcE1MRWRCUTBGQkxFVkJRVmtzUjBGSGFFSkxMRVZCUVZFc1IwRkZVa1VzU1VGRFFTOUNMRVZCUVZGQkxFVkJRVTBzVFVGQlRTeEZRVUZITEVOQlFVTXJRaXhGUVVGSkxFMUJRVTBzUlVGRE9VSkJMRVZCUVVsQkxFVkJRVWtzVDBGQlV5eERRVUZETEVsQlFVMDdRVUZCUVN4SlFVTjRRa0VzUlVGQlRVRXNSVUZCU1N4TlFVRk5MRVZCUVVjc1JVRkJSU3hIUVVONlFrRXNSVUZCVFVFc1JVRkJTU3hSUVVGUllpeEhRVUZyUWl4TFFVRkxaQ3hEUVVGTkxFVkJRVVVzUjBGSGNrUXNTVUZCU1RaQ0xFVkJRV2xDTEVkQlEycENReXhGUVVOQlF5eEZRVUZoTEVkQlEycENMRWxCUVV0RUxFVkJRVmNzUlVGQlIwRXNSVUZCVjJ4RExFVkJRVTBzVDBGQlVTeEZRVUZGYTBNc1JVRkJWU3hEUVVOd1JDeEpRVUZOTlVJc1JVRkJTMDRzUlVGQlRXdERMRU5CUVZFc1JVRkRla0lzUjBGQlNUVkNMRWxCUVU4c1NVRkRVREpDTEVWQlFXbENMRmRCUTFvelFpeEpRVUZQTzBGQlFVRXNSVUZEV2paQ0xFVkJRV0ZFTEUxQlJXSXNUVUZEVWl4RFFVTkJMRWxCUVVsd1F5eEZRVUZSUlN4RlFVRk5MRlZCUVZVc1JVRkJSMjFETEVWQlFXRkVMRVZCUVZkRExFVkJRV0VzUlVGQlNVUXNRMEZCVVN4RlFVTTFSWEJETEVsQlEwRkZMRVZCUVZGQkxFVkJRVTBzVlVGQlZVWXNSVUZCVFN4TlFVRk5MRVZCUTNCRFFTeEZRVUZSUVN4RlFVRk5MRkZCUVZFc1QwRkJVU3hMUVVGTFRTeERRVUZOTEVWQlFVVXNSMEZITDBNc1NVRkJTV2RETEVkQlFWVlVMRVZCUVZVc1NVRkJUU3hOUVVGUlRTeEZRVVJ1UWpkQ0xFVkJRVk1zU1VGQlRTeEpRVU5yUXl4SlFVRk5lVUlzUlVGTk1VVXNSMEZNU1ZJc1NVRkRRV1VzUjBGQlZTeEpRVUZOVml4RlFVRmpUQ3hGUVVGUkxGRkJRVkVzWVVGQll5eEhRVUZITEVOQlFVTXNSVUZETlVSRkxFZEJRMEZCTEVWQlFWVXNSMEZGWkVrc1JVRkRRU3hQUVVGQk0wSXNSVUZCVVVFc1JVRkJUU3hSUVVGUkxFOUJRVkVzUzBGQlMwa3NRMEZCVFN4RlFVRkZMRVZCUTNCRExFZEJRVWRuUXl4RFFVRk5PMEZCUVVFc1JVRkJTMmhETEVOQlFVMHNSMEZCUjA0c1EwRkJTeXhIUVVGSFJTeERRVUZMTEVkQlFVY3JRaXhEUVVGSExFZEJSWEpFTDBJc1JVRkJVVUVzUlVGRFNDeFJRVUZSTEU5QlFWRTdRVUZCUVN4SFFVRk5MRVZCUTNSQ0xGRkJRVkVzYVVSQlFXdEVMRTFCUVUwc1JVRkZhRVVzVVVGQlVTeFBRVUZSTEV0QlFVdEpMRU5CUVUwc1JVRkJSU3hGUVVOc1F5eEpRVUZOYVVNc1JVRkJUemRDTEVkQlFXTXNSMEZCUjFZc1EwRkJTeXhIUVVGSFJTeERRVUZMTEVkQlFVY3JRaXhEUVVGSExFZEJRVWt6UWl4RlFVRlJhME1zUjBGQldXeEVMRWRCUVdWRExFVkJRVXNzUlVGQlNTeERRVUZETEVWQlEyeEhMRTFCUVU4c1IwRkJSeXRETEVOQlFVMDdRVUZCUVN4RlFVRkxhRU1zUTBGQlRTeEhRVUZIYVVNc1EwRkJTU3hGUVVOMFF5eERRVU5CTEZOQlFWTkZMRWRCUVZsRExFVkJRVTF1UkN4RlFVRkxhME1zUlVGQlYwTXNSVUZCWVN4RFFVTndSQ3hIUVVGTkxFTkJRVVVzUzBGQlFVWXNSVUZCVFN4TlFVRkJkRUlzUTBGQlRTeEZRVUZKZDBNc1JVRkRiRUlzUTBGQlJTeGhRVUZCUXl4RlFVRmpMRmxCUVVGMlF5eEZRVUZoTEU5QlFVRkZMRVZCUVZFc1YwRkJRWE5ETEVWQlFWa3NUMEZCUVVNc1EwRkJUeXhGUVVGSmRFUXNSVUZEYkVVc1IwRkJTMkVzUjBGQlpVWXNSVUZCVFN4VFFVRlRPMEZCUVVFc1EwRkJTU3hIUVVOc1F6SkRMRWRCUVZVc1YwRkJWeXhMUVVGTE0wTXNRMEZCU3l4RlFVTm9ReXhQUVVGUFlTeEhRVUZoWWl4RlFVRlBXQ3hEUVVGSExFVkJSV3hETEVkQlFVa3NRMEZCUTFjc1IwRkRSQ3h2UmtGQmIwWXNTMEZCUzBFc1EwRkJTeXhGUVU4NVJpeFBRVUZQUlN4SFFVRmxlVU1zUjBGQlZTeERRVUZETTBNc1JVRkJUU3hUUVVGVE8wRkJRVUVzUTBGQlNTeEZRVU01UTJFc1IwRkJZV0lzUlVGQlQxZ3NRMEZCUnl4RlFVTjJRaXRDTEVkQlFWbHZRaXhGUVVGTmJrUXNSVUZCUzJ0RExFVkJRVmRETEVOQlFWY3NSVUZGZGtRc1IwRkJTU3hEUVVGRGRFSXNSMEZEUkN4RFFVRkRlVU1zUjBGRFJISkNMRWxCUVZOTkxFVkJRVThzVDBGRGFFSTFRaXhGUVVGTkxGTkJRVk03UVVGQlFTeERRVUZKTEVWQlJXNUNMRTlCUVU5dlFpeEhRVUZaYjBJc1JVRkJUVzVFTEVWQlFVdHJReXhGUVVGWFF5eERRVUZYTEVWQlJYaEVMRWRCUVVscVF5eEhRVUYxUWxNc1EwRkJTeXhGUVVGSExFTkJReTlDTEVkQlFVbEpMRWxCUVZjc1IwRkRXQ3hQUVVGQlppeEZRVUZKTEdsQ1FVRnRRaXhIUVVOb1FpdENMRWRCUVZsdlFpeEZRVUZOYmtRc1JVRkJTMnRETEVWQlFWZERMRU5CUVZjc1JVRkZia1FzUjBGQlNYUkNMRWRCUVdWRkxFbEJRVmR6UXl4RlFVTXZRaXhQUVVGUE4wSXNSMEZCWVdJc1JVRkJUMWdzUTBGQlJ5eERRVVYwUXl4RFFVTkJMRWxCUVUxSExFVkJRVTFSTEVWQlFVMHNVVUZCVVN4UFFVRlJPMEZCUVVFc1JVRkJUMGtzUTBGQlRTeEZRVUZGTEVWQlNXcEVMRWRCUVVseFF5eEZRVUZqTEVOQlEyUXNTVUZCVFVjc1JVRkJVVU1zUjBGQlN5eERRWFpTTTBJc1NVRkJRVU1zUlVGMVVqaENMRTlCUVVGRUxFVkJRVWtzVTBGQlYwRXNSVUZCU1N4TlFVRlJMREpDUVVFeVFrTXNSVUZCUVVRc1JVRkJTU3hQUVVGS0xGbEJRVUZETEVWQlFWVXNTMEZCUzNSRUxFdEJRM0pHTEVOQlFVVXNUMEZCUVhWRUxFVkJRVkVzUzBGQlFVTXNRMEZCU3l4RlFVRkpNMFFzUlVGQlNTeEpRVUZKTEU5QlEycERMRWRCUVVreVJDeEZRVUZMTEV0QlFVdEtMRU5CUVVrc1IwRkJTMGNzUjBGQlFTeE5RVUZCUVN4RlFVRlJMRXRCUVV0SUxFZEJRMmhETEU5QlFVOHZRaXhIUVVGaFlpeEZRVUZQV0N4RFFVRkhMRU5CUTNSRExFTkJRMEVzVDBGQlQyRXNSVUZEUkZZc1JVRkRRV2RDTEVkQlFXTm9RaXhGUVVGTFdTeEZRVUZSVVN4SFFVRlhlRUlzUjBGQlpVTXNSVUZCU3l4RlFVRkxMRU5CUVVNc1EwRkRNVVVzUTBGRFFTeFRRVUZUTkVRc1IwRkJaMEpVTEVWQlFVMXVSQ3hGUVVGTGEwTXNSVUZCVjBNc1JVRkJZU3hEUVVONFJDeEhRVUZOTEVOQlFVVXNXVUZCUVhSQ0xFVkJRV0VzVDBGQlFYbERMRU5CUVU4c1JVRkJTWFJFTEVWQlF6RkNOa1FzUlVGQlN5eFBRVUZQVml4RlFVRkxMRTlCUVZVc1UwRkRNMEpCTEVWQlEwRXNUMEZCVHl4UFFVRlBMRU5CUVVNc1JVRkJSMEVzUlVGQlRTeERRVUZGTEUxQlFVOHNUMEZCVDBFc1JVRkJTeXhMUVVGTExFTkJRVVVzUTBGQlF5eEZRVU4yUkN4RFFVRkZMRXRCUVVGc1FpeERRVUZMTEVWQlFVbHJRaXhGUVVOWWJFSXNTVUZCVTAwc1JVRkJUeXhqUVVWYUxHdEVRVUZyUkN4TFFVRkxjMElzUlVGQlJ5eExRVUZMTEVsQlF5OUVOVUlzUlVGQlQwMHNSVUZCVHl4alFVVjBRaXhKUVVGTmRVSXNSVUZCWTBNc1IwRkJWU3hEUVVNeFFpeFBRVUZSUVN4RlFVRlBMRU5CUTFnc1MwRkJTM2hDTEVWQlFVOHNZVUZEV2l4TFFVRkxRU3hGUVVGUExHTkJRMUlzVDBGQlR6RkNMRWRCUVdWNVF5eEZRVU5vUWpsQ0xFZEJRV0Z4UXl4RlFVRkhMRTFCUVU4M1JDeERRVUZITEVWQlF6RkNLMElzUjBGQldUaENMRVZCUVVrM1JDeEZRVUZMYTBNc1JVRkJWME1zUTBGQlZ5eEZRVU55UkN4TFFVRkxTU3hGUVVGUExHRkJRMUlzVDBGQlR6ZENMRWRCUVcxQ2JVUXNSVUZCUnl4TlFVRlBOMFFzUTBGQlJ5eEZRVU16UXl4TFFVRkxkVU1zUlVGQlR5eGhRVU5TTEU5QlFVOXNRaXhIUVVGdFFuZERMRVZCUVVjc1RVRkJUemRFTEVOQlFVY3NSVUZETTBNc1MwRkJTM1ZETEVWQlFVOHNUVUZEVWl4UFFVRlBWeXhIUVVGWlZ5eEZRVUZKTjBRc1JVRkJTMnRETEVWQlFWZERMRU5CUVZjc1JVRkRkRVFzVVVGRFNTeFBRVUZQTEVsQlEyWXNRMEZEU2l4RlFVTkpZaXhGUVVGTmQwTXNSVUZCVnpkQ0xFTkJRVWtzUlVGRGVrSXNSMEZCU1Znc1NVRkJVU3hMUVVGTkxFTkJRMlFzUjBGQlRTeERRVUZGTEdWQlFVRXdReXhGUVVGblFpeHJRa0ZCUVVNc1EwRkJhMElzUlVGQlNXcEZMRVZCUVVrc1VVRkROVU5yUlN4RlFVRkxja1FzUjBGQlpXMUVMRWRCUVcxQ1F5eEZRVVUzUXl4SFFVUkJNME1zUlVGQlRYZERMRVZCUVZkSkxFTkJRVU1zUlVGRFpEVkRMRWxCUVZFc1MwRkRVaXhOUVVGTkxFbEJRVWtzVFVGQlRTeHRRMEZCYlVNMFF5eERRVUZETEVWQlFVVXNRMEZET1VRc1EwRkRRU3hQUVVGUE5VTXNRMEZEV0N4RFEyaFZRU3hUUVVGVE5rTXNSMEZCZFVKRExFVkJRVXRETEVWQlFWTXNRMEZETVVNc1NVRkJUVU1zUlVGQlRTeFBRVUZQTEU5QlFVOHNRMEZEZEVJc1YwRkJXU3hIUVVOYUxHTkJRV1ZETEVkQlEyWXNaVUZCWjBJc1MwRkRhRUlzYTBKQlFXMUNMRkZCUTI1Q0xGZEJRVmtzUzBGRFdpeHRRa0ZCYjBJc1IwRkRjRUlzSzBKQlFXZERMRWRCUTJoRExGTkJRVlVzVVVGRFZpeHpRa0ZCZFVJc1IwRkRka0lzVlVGQlZ5eEhRVU5ZTEZWQlFWY3NSMEZEV0N4blFrRkJhVUlzUjBGRGFrSXNVVUZCVXl4UFFVTlVMRmRCUVZrc1IwRkRXaXhaUVVGaExFdEJRMklzVVVGQlV5eFBRVU5VTEdsQ1FVRnJRaXhGUVVOMFFpeEZRVUZIU0N4RlFVRkpMRTlCUVU4c1owSkJRV2xDUXl4RFFVRlBMRVZCUTJ4RFJ5eEZRVU5LTEU5QlFWRkdMRVZCUVVrc1owSkJRV2xDTEVOQlEzcENMRWxCUVVzc1VVRkRSRVVzUlVGQlV5eEhRVU5VTEUxQlEwb3NTVUZCU3l4UFFVTkVRU3hGUVVGVExFZEJRMVFzVFVGRFNpeFJRVU5KUVN4RlFVRlRMRWxCUTJwQ0xFTkJRMEVzVFVGQlR5eERRVU5JTEZGQlFWTXNTVUZCU1N4SlFVTmlMRWxCUVVGS0xFVkJRMEVzYzBKQlFYVkNSU3hGUVVGSkxITkNRVUYzUWl4SlFVRk5MRWRCUTNwRUxFOUJRVkVzUjBGRFVpeFhRVUZaTEU5QlFVOUJMRVZCUVVrc1VVRkJWeXhUUVVGWExFbEJRVWtzVDBGQlQwRXNSVUZCU1N4TlFVRk5MRVZCUVVrc1MwRkRkRVVzVDBGQlFVVXNSVUZEUVN4UlFVRlRSaXhEUVVOaUxFTkJRMG9zUTBGRFFTeFRRVUZUUnl4SFFVRmhReXhGUVVGTlF5eEZRVUZOTEVOQk9VTnNReXhKUVVGQlF5eEZRVUZCUXl4RlFVRkJReXhGUVVGQlF5eEZRU3REU1N4SFFVRkpTaXhGUVVGTExFbEJRVXNzUTBGRFZpeEpRVUZOU3l4RlFVRlJUaXhGUVVGTExFOUJRVTlQTEVkQlFVdEJMRVZCUVVVc1RVRkJVVTRzUlVGQlN5eEhRVUZITEVWQlEycEVMRWRCUVVsTExFVkJRVTBzVDBGQlV5eEZRVU5tTEU5QlFVOUtMRVZCUVVGSkxFVkJRVTBzUzBGQlMwTXNSMEZCUzBFc1JVRkJSU3hUUVVGWFRpeEZRVUZMTEUxQlFVMHNTVUZCZUVNc1MwRkJRVU1zUlVGQk5rTkpMRVZCUVUwc1EwRkJReXhEUVVOdVJTeERRVU5CTEVsQlFVbEZMRVZCUTBGRExFVkJRMG9zUjBGQlNVTXNSVUZCVTFRc1EwRkJTU3hGUVVGSExFTkJRMmhDVVN4RlFVRk5VaXhGUVVGTExFMUJRMWdzU1VGQlNVc3NSVUZCVVU0c1JVRkJTeXhQUVVGUFR5eEhRVUZGTEVOQmVFUnNReXhKUVVGQlRDeEZRWGRFY1VNc1QwRkJRVUVzUlVGQlFVc3NSVUZCUlN4WFFVRkdMRmxCUVVGTUxFVkJRVUVzUzBGQlFVc3NSVUZCWVVVc1IwRkJTU3hGUVVNNVF5eEhRVUZKU0N4RlFVRk5MRTlCUVZNc1JVRkJSeXhEUVVOc1FpeEpRVUZOU3l4RlFVRlpUQ3hGUVVGTkxFOUJRVTlETEVkQlFVdEJMRVZCUVVVc1NVRkJTU3hGUVVOMFEwa3NSVUZCVlN4UFFVRlRMRWxCUTI1Q1RDeEZRVUZSU3l4RlFVTm9RaXhEUVVOQlNDeEhRVU5KVEN4RlFVRkJSeXhGUVVGTkxFdEJRVXRETEVkQlFVdEJMRVZCUVVVc1UwRkJWMDRzUlVGQlN5eE5RVUZOTEVsQlFYaERMRXRCUVVGRkxFVkJRVFpEUnl4RlFVRk5MRXRCUVV0RExFZEJRVXNzUTBGQlEwRXNSVUZCUlN4TlFVRk5MRU5CUXpsRkxFMUJSVWxGTEVWQlFVMVNMRVZCUTA1UExFVkJRVk5TTEVWQlFVc3NTMEZCUzA4c1IwRkJTMEVzUlVGQlJTeFhRVUZoUlN4aFFVRmxSaXhGUVVGRkxGTkJRVk1zUlVGRmNrVXNSMEZCU1N4RFFVRkRReXhGUVVGUkxFTkJRMVFzU1VGQlRVa3NSMEZCVDFBc1IwRkJRVVFzUlVGQlFVc3NSMEZCUVN4WlFVRkJRU3hGUVVGTExHTkJRVXdzV1VGQlFVd3NSVUZCYTBJc1QwRkJiRUlzUzBGQlFVTXNSVUZCTUVJc1QwRkJUMGtzUlVGRE9VTXNUVUZCVFN4SlFVRkpMRTFCUVUwc2QwSkJRWGRDUnl4RFFVRkpMRkZCUVZFc1EwRkRlRVFzUTBGRFFTeFBRVUZQU2l4RFFVTllMRU5CUlVFc1UwRkJVMHNzUjBGQlpVTXNSVUZCVFU0c1JVRkJVU3hEUVVGRkxGRkJRVUZQTEVWQlFWTXNTVUZCUVhKQ0xFTkJRVWtzUlVGQlJ5eERRVU53UkN4SFFVRkpMRU5CUVVOQkxFVkJRVWtzVjBGRFRDeE5RVUZQTEVkQlExZ3NTVUZCVFhOQ0xFVkJRVkVzUTBGQlF5eEZRVU5VUXl4SFFVRlZVQ3hGUVVGVFNTeERRVUZKTEVkQlFVdEpMRVZCUVdGS0xFTkJRVWtzU1VGQlRVRXNSVUZCU3l4UFFVTXhSRWNzUjBGQlZVVXNSMEZCWTBZc1EwRkJUU3hKUVVNNVFrWXNSVUZCVVN4SlFVRkpSU3hEUVVGTkxFVkJRMnhDUkN4RlFVRk5MRXRCUVVzc1NVRkJTVU1zUTBGQlRTeEZRVUZGTEVkQlJUTkNMRWxCUVUxSExFVkJRVTFPTEVWQlFVc3NTVUZCVFVFc1JVRkJTeXhKUVVGTlRpeEZRVUZQTEZGQlFWVXNTMEZCVDBFc1JVRkJUeXhKUVVOcVJTeFBRVUZKV1N4SFFVTkJTaXhGUVVGTkxFdEJRVXQwUWl4RlFVRkpMRmRCUVZjc1ZVRkJWVEJDTEVOQlFVY3NRMEZCUXl4RlFVTnlRMG9zUlVGQlRTeExRVUZMTEVkQlFVY3NRMEZEZWtJc1EwRkRRU3hUUVVGVFN5eEhRVUZWY0VJc1JVRkJUWEZDTEVWQlFVdERMRVZCUVZkRExFVkJRV0VzUTBFeFJuUkVMRWxCUVVGMFFpeEZRVUZCUXl4RlFUSkdTU3hIUVVGSmMwSXNSVUZCVDNoQ0xFTkJRVWtzUlVGRFdDeFBRVUZQUVN4RlFVRkxMRk5CUVZOeFFpeEZRVUZMUXl4RlFVRlhReXhEUVVGWExFVkJRM0JFTEVkQlFVbEZMRWRCUVZGNlFpeERRVUZKTEVWQlFVY3NRMEZEWml4SFFVRkpjVUlzUlVGQlNTeEpRVUZKTEZkQlExSXNUMEZCVDNKQ0xFVkJRVXNzVTBGQlUzRkNMRU5CUVVjc1JVRkROVUlzU1VGQlNYQkNMRVZCUVVGdlFpeEZRVUZKTEd0Q1FVRktMRTFCUVVGd1FpeEZRVUZ4UWl4SlFVRkpSQ3hIUVVONlFpeE5RVUZOTEVsQlFVa3NWVUZCVlN4NVJFRkJlVVFzUlVGSGVrVnhRaXhGUVVGSkxHZENRVU5LUVN4RlFVRkpMR2RDUVVGblFpeEpRVUZKY2tJc1EwRkJTU3hGUVVVMVFuRkNMRVZCUVVrc1owSkJRV3RDTEVsQlFVa3NTVUZCU1N4RFFVRkRja0lzUTBGQlNTeERRVUZETEVWQlEzaERRU3hGUVVGUFFTeEZRVUZMTEZGQlFWRnhRaXhGUVVGSkxFZEJRVWNzUTBGRmJrTXNRMEZEUVN4SlFVRkpaQ3hGUVVORlRTeEZRVUZQWVN4RlFVRlBNVUlzUTBGQlNTeEZRVU5zUWtFc1JVRkRRWEZDTEVWQlFVa3NTVUZCU1N4WFFVRlhja0lzUlVGQlRTeERRVUZGTEZOQlFWVXlRaXhIUVVGTmNFSXNSVUZCVTI5Q0xFTkJRVWNzUTBGQlF5eEZRVU42UkhCQ0xFbEJRMFJCTEVWQlFWTlVMRWRCUVdGMVFpeEZRVUZKTEVsQlFVa3NUMEZCVHl4TFFVRk5VaXhEUVVGSkxFZEJRMjVFTEVsQlFVMUZMRVZCUVZGSUxFZEJRV1ZETEVWQlFVMU9MRVZCUVZGakxFTkJRVWNzUlVGRE1VTk9MRVZCUVUwc1QwRkJVeXhKUVVObVRTeEZRVUZKTEdkQ1FVRnBRbTVDTEVWQlFVRnRRaXhGUVVGSkxHZENRVUZLTEV0QlFVRnVRaXhGUVVGeFFpeEhRVUZMWVN4RlFVRk5MRTlCUVZNc1IwRkRiRVVzU1VGQlRXRXNSVUZCVFN4UFFVRlBja0lzUlVGQlR5eFhRVUZqTEZkQlEyeERRU3hGUVVGUExGVkJRVlZOTEVWQlFVMVJMRVZCUVV0RExFVkJRVmRETEVOQlFWY3NSVUZEYkVSa0xFVkJRVk5KTEVOQlFVa3NSVUZEVkdkQ0xFZEJRV2RDYUVJc1JVRkJUVkVzUlVGQlMwTXNSVUZCVjBNc1EwRkJWeXhGUVVOcVJGWXNSVUZCU3l4VFFVRlRVU3hGUVVGTFF5eEZRVUZYUXl4RFFVRlhMRVZCUTI1RUxFOUJRVXRTTEVWQlJVVk9MRVZCUVZOSkxFTkJRVWtzUjBGQlMyVXNSVUZCU1N4RFFVRkRMRWxCUVUwc1MwRkJUMEVzUlVGQlNTeERRVUZETEVsQlFVMHNTVUZEYUVRc1IwRkJSMklzUTBGQlN5eEpRVUZKWVN4RFFVRkhMRWRCUTJZc1IwRkJSMklzUTBGQlN6dEJRVUZCTEVWQlFVdE5MRVZCUVVrc1RVRkJUU3hIUVVGSFR5eERRVUZITEVkQlNIaENRU3hEUVVsbUxFTkRla2hCTEZOQlFWTkZMRWRCUVdNc1EwRkJSU3hKUVVGQlF5eEZRVUZMTEUxQlFVRkRMRU5CUVUwc1JVRkJSME1zUlVGQlMwTXNSVUZCVjBNc1JVRkJZU3hEUVV4d1JTeEpRVUZCUXl4RlFVRkJReXhGUVUxSkxFZEJRVTBzUTBGQlJTeGpRVUZCUXl4RlFVRmxMRWxCUVVGRExFVkJRVXNzVDBGQlFVTXNSVUZCVVN4WFFVRkJReXhGUVVGWkxGRkJRVk1zUTBGQlJTeGpRVUZCUXl4RlFVRmxMRlZCUVVGRExFVkJRVmNzVjBGQlFVTXNRMEZCVnl4RFFVRkZMRVZCUVVsWUxFVkJRMnhIV1N4RlFVRmpReXhGUVVGUFppeERRVUZITEVkQlFVdEJMRVZCUVVrc1UwRkJXU3hMUVVOcVJDeEhRVUZKWVN4RlFVRlpMRU5CUTFvc1IwRkJTVU1zUlVGRFFTeE5RVUZOTEVsQlFVa3NUVUZCVFN4clJFRkJhMFFzUlVGRmRFVXNSMEZCU1VVc1JVRkJZV2hDTEVOQlFVY3NSMEZCVFN4RFFVRkRaU3hGUVVGUFppeERRVUZITEVkQlFVc3NUMEZCVDBFc1IwRkJVU3hUUVVGWExFTkJRMmhGTEVsQlFVMXBRaXhGUVVGTkxEWkVRVU5hTEUxQlFVMHNTVUZCU1N4TlFVRk5RU3hEUVVGSExFTkJRM1pDTEVOQlEwb3NRMEZEUVN4SlFVRkpReXhGUVVGakxFTkJRVU5NTEVsQlEyUXNRMEZCUTJJc1IwRkRSMk1zUjBGQlkySXNSMEZCVXl4TlFVRlJMRU5CUVVORExFVkJRVWtzVVVGRGNrTmpMRVZCUVdGb1FpeERRVUZITEVsQlEyWnRRaXhGUVVGVGJrSXNRMEZCUnl4RlFVTlFRU3hGUVVGSkxFOUJRVk52UWl4RlFVRlBMR05CUVdkQ2NFSXNSVUZCU1N4UFFVRlRiMElzUlVGQlR5eGpRVU40UkN4UFFVRlBjRUlzUjBGQlVTeFhRVU0zUWtVc1JVRkJUU3hQUVVGUExFOUJRVThzUTBGQlF5eEZRVUZIUVN4RlFVRkxMRU5CUTNwQ0xHTkJRV1VzUjBGRFppeFpRVUZoTEVOQlFVTm5RaXhKUVVGblFrd3NSMEZCWXl4RFFVRkRUaXhIUVVNM1F5eFBRVUZSUlN4RlFVRlRReXhEUVVOeVFpeERRVUZETEVWQlEwUXNTVUZCU1Zjc1JVRkJhVUlzUjBGRGFrSkRMRVZCUVZrc1IwRkRXa01zUlVGQlRVTXNSMEZCVlhoQ0xFVkJRVXRGTEVWQlFVc3NTVUZCVDIxQ0xFVkJRV2xDTEVkQlFVOHNTVUZCVDBNc1JVRkJXU3hGUVVGTExFVkJRM0pHTEVkQlFVa3NRMEZCUTBvc1IwRkJaU3hEUVVGRGFFSXNSVUZCU1N4UlFVRlZjVUlzUlVGQlNTeFBRVUZUTEV0QlFVMHNRMEZEYkVRc1IwRkJTVllzUlVGRFFTeE5RVUZOTEVsQlFVa3NUVUZCVFN3NFJVRkJPRVVzUlVGRGJFZExMRVZCUVdNc1JVRkRiRUlzUTBGRFFTeEhRVUZKYUVJc1JVRkJTU3hSUVVOS0xFZEJRVWxMTEVkQlFXbENUaXhIUVVGVExFdEJRekZDTEU5QlFVbHZRaXhIUVVGclFteENMRWRCUTJ4Q1FTeEZRVUZWTEVWQlExQnZRaXhKUVVGUkxFZEJRVXNzU1VGQlRVd3NSVUZCWXl4TFFVRkxTeXhEUVVGSExFZEJRVXRCTEZWQlIyNUVhRUlzUjBGQmFVSXNRMEZCUTAwc1IwRkJaMEphTEVkQlFWTXNUVUZCVVdsQ0xFVkJRM3BFTEU5QlFVRkxMRVZCUVUwc1MwRkJTMEVzUTBGQlJ5eEhRVU5XVkN4SFFVRmpMRU5CUVVOUExFVkJRMlpGTEVkQlFVOUZMRWRCUVZsR0xFVkJRVXR5UWl4RlFVRkpMRTlCUVZGVExFVkJRV05ITEVOQlFWVXNRMEZCUXl4RlFVVjRSRkVzUjBGQllXeENMRWRCUTJ4Q1FTeEZRVUZaTEVWQlExUnRRaXhGUVVWUVJpeEpRVU5CVUN4RlFVRmhMRTFCUTJKSkxFZEJRMGxLTEVsQlEwRlRMRWRCUVU5RkxFZEJRVmxHTEVWQlFVdHlRaXhGUVVGSkxFOUJRVkZUTEVWQlFXTkhMRU5CUVZVc1EwRkJReXhIUVVOcVJWTXNSVUZCVFN4TFFVRkxRU3hEUVVGSE8wRkJRVUVzUlVGQlMyUXNRMEZCVFN4TlFVZDZRbU1zUlVGQlRTeEhRVUZIUVN4RFFVRkhMRWxCUTFKVUxFbEJRMEZUTEVkQlFVOUZMRWRCUVZsR0xFVkJRVXR5UWl4RlFVRkpMRTlCUVZGVExFVkJRV05ITEVOQlFWVXNRMEZCUXl4SlFVVnlSU3hKUVVGSldTeEZRVUZMUXl4RlFVRkxReXhGUVVOV1lpeEZRVUZQWkN4RFFVRkxMRWRCUTFwNVFpeEZRVUZOTEVOQlFVTXNRMEZCUTNwQ0xFVkJRVTBzV1VGRFpEQkNMRVZCUVUweFFpeEZRVUZOTEdOQlExb3lRaXhGUVVGbE0wSXNSVUZCVFN4VlFVZHlRbmxDTEVWQlFVMHNSMEZEVGtNc1JVRkJUU3hMUVVOT1F5eEZRVUZsTEV0QlExZ3pRaXhIUVVGVExFOUJRVTlCTEVkQlFWVXNWMEZETVVKQkxFVkJRVkZQTEVWQlFVa3NWMEZCVjFBc1EwRkJTeXhKUVVWd1EwTXNSVUZCU1N4WlFVRmpMRWRCUTJRc1EwRkJRMmRDTEVkQlFXVXNRMEZCUTBvc1IwRkJZMHNzUlVGQlUyeENMRU5CUVVzc1NVRkROME5ETEVWQlFVa3NZMEZCWjBKeFFpeEZRVUZKTEU5QlFWTXNSMEZEY2tORUxFVkJRVmtzUjBGRFVpeERRVUZEVml4SFFVTkVSaXhGUVVGWExGRkJRVlVzUjBGRGNrSXNRMEZCUTFJc1JVRkJTU3hSUVVOTUxFTkJRVU5uUWl4SFFVTkVWeXhIUVVGTk5VSXNRMEZCU3l4SFFVTllMRU5CUVVOQkxFVkJRVTBzVFVGRFVDeERRVUZEUVN4RlFVRk5MRXRCUTFBc1EwRkJRMEVzUlVGQlRTeFRRVVZRUXl4RlFVRkpMRTlCUVZOQkxFVkJRVWtzVDBGQlR5eFZRVUZWTEVOQlFVTXNSMEZGZGtNc1NVRkJTVFJDTEVWQlFXMUNMRWRCUTJwQ1F5eEZRVUZYVUN4SFFVRlZka0lzUlVGQlQwTXNSVUZCU3l4SlFVRlBORUlzUlVGQmJVSXNSMEZCVHl4SlFVRlBVaXhGUVVGWkxFVkJRVXNzUlVGRE5VWlZMRVZCUVVzc1NVRkRWQ3hIUVVGSmJFSXNSMEZCWTFrc1IwRkJUME1zUlVGQlN5eERRVVV4UWl4SFFVUkJTeXhGUVVGTFRpeEZRVUZOTzBGQlFVRXNSVUZCVHl4SFFVTmtReXhGUVVGTExFTkJRMHdzU1VGQlRVMHNSVUZCUzNSQ0xFVkJRV05uUWl4RFFVRkhMRVZCUXpWQ1N5eEhRVUZOTzBGQlFVRXNSVUZCUzBVc1IwRkJZMFFzUlVGQlNTOUNMRVZCUVVrc1RVRkJUU3hEUVVGRExFVkJRelZETEVOQlEwazJRaXhKUVVGaExFbEJRVTBzUTBGQlF6ZENMRVZCUVVrc1QwRkRjRUk0UWl4SlFVRlBPMEZCUVVFc1NVRkRVRUVzUlVGQlN6dEJRVUZCTzBGQlFVRXNSMEZIVkVFc1IwRkJUVHRCUVVGQkxFVkJRVXM1UWl4RlFVRkpMRTFCUVUwc1JVRkZOMElzVTBGRFV5eERRVUZEWjBJc1IwRkJaVVlzUlVGQllXWXNRMEZCU3l4RlFVRkhMRU5CUXpGRExFbEJRVTFyUXl4RlFVRk5TaXhGUVVGVExFTkJRVU1zUlVGRGFFSkxMRVZCUVUxTUxFVkJRVk1zVVVGQlVUdEJRVUZCTEVOQlFVa3NSVUZETTBKTkxFVkJRV0ZFTEVsQlFWRXNSMEZEY2tKRkxFbEJRVTlvUXl4SFFVRkJSQ3hGUVVGQlNDeEZRVUZKTEZOQlFVb3NTMEZCUVVjc1JVRkJZMG9zUlVGQlRTeFBRVUZ3UWl4TFFVRkJTeXhGUVVFMFFrd3NSVUZCVFN4TlFVRk5MRk5CUVZjc1JVRkRhRVVzUjBGQlNXOURMRWRCUVdNc1EwRkJRME1zUjBGQlRTeERRVU55UWl4SlFVRkpReXhIUVVGbExFZEJRMjVDTEVkQlFVbEdMRWxCUVdWR0xFbEJRVkVzUzBGQlQwRXNTVUZCVVN4TFFVRk5MRU5CUXpWRExFbEJRVWxMTEVWQlFVMVVMRVZCUVZNc1VVRkJVU3hIUVVGSExFVkJRekZDU1N4SlFVRlJMRXRCUTFKTExFbEJRVkVzU1VGRFVrRXNSVUZCVFVvc1IwRkRUa3dzUlVGQlUxTXNSVUZCVFN4RFFVRkRMRWxCUVUwc1RVRkRkRUpCTEVWQlFVMVVMRVZCUVZNc1VVRkJVU3hKUVVGTFV5eEZRVUZOTEVOQlFVTXNTVUZGYmtOQkxFbEJRVkVzU1VGQlRVb3NSVUZCVFVrc1MwRkRjRUpFTEVkQlFXVXNSMEZEZGtJc1EwRkRTMEVzUzBGRFJGQXNSVUZCU3p0QlFVRkJMRVZCUVVzNVFpeEZRVUZKTEUxQlFVMHNSMEZETlVJc1EwRkRTaXhOUVVOVE5rSXNTVUZCWVN4SlFVRk5RU3hGUVVGVExFTkJRVU1zU1VGQlRUdEJRVUZCTEV0QlEzaERReXhGUVVGTExFbEJSVlFzVDBGQlFWUXNSMEZCVDFNc1JVRkJTMFFzUlVGRFVqZENMRVZCUVVrc1QwRkRRVFJDTEVkQlFXOUNNMElzUjBGRGNFSkJMRVZCUVZVc1JVRkZWSGxDTEVkQlFXZENMRU5CUVVORkxFVkJRM1JDVUN4SFFVRlBSU3hIUVVGWlJpeEZRVUZMY2tJc1JVRkJTU3hQUVVGUlV5eEZRVUZqYVVJc1EwRkJXU3hEUVVGRExFVkJSVEZFVGl4SFFVRmhiRUlzUjBGRGJFSkJMRVZCUVZrc1JVRkZWRzFDTEVOQlExZ3NRME12U1VFc1UwRkJVMnRDTEVkQlFVdERMRVZCUVZWRExFVkJRVk1zUlVGRGVrSkVMRWxCUVdFc1UwRkJWMEVzU1VGQllTeFZRVU5xUXl4UFFVRlBMRk5CUVZrc1lVRkJaU3hSUVVGUkxGbEJRekZETEZGQlFWRXNXVUZCV1VNc1EwRkJUeXhGUVVVelFpeFJRVUZSTEV0QlFVdEJMRU5CUVU4c1JVRkZhRU1zUTBORVFTeEpRVUZOUXl4SFFVRlpMRXRCUTFwRExFZEJRVkVzUTBGRFZpeFRRVUZWUXl4SFFVRlRRU3hKUVVGVlJpeEpRVU40UWl4UFFVRlBSU3hIUVVGVkxGVkJRVmxCTEVWQlFVMHNZMEZCWjBKR0xFZEJRM2hFTEZGQlFWTXNUVUZEVkN4SlFVRkxMREJDUVVOTUxFdEJRVTBzVDBGRFRpeFJRVUZUTEVsQlFVMHNUMEZCVHl4UFFVRlBMRWxCUVVsSExFVkJRVThzVDBGQlQwZ3NSVUZCVXl4RFFVRkRMRVZCUVVjc1EwRkRlRVFzVjBGQldVa3NSVUZEYUVJc1EwRkJReXhGUVVORUxGVkJRVmNzU1VGQlRVb3NSVUZEY2tJc1JVRkRUVXNzUjBGQllTeERRVUZEUXl4RlFVRkxReXhMUVVGVFRpeEhRVUZOTEZOQlFWTk5MRU5CUVVjc1IwRkRMME5ETEVWQlFWTkVMRU5CUVVjc1NVRkRVaXhEUVVGRFFTeEZRVUZKTEUxQlFWRkJMRVZCUVVrc1QwRkJVMG9zUlVGQlR5eFJRVU5zUTBZc1IwRkJUU3hUUVVGVFRTeEZRVUZKTEV0QlFVc3NTMEZETlVKRUxFZEJRVUVzV1VGQlFVRXNSVUZCU3l4SlFVRkpMRTlCUVU4c1MwRkJTeXhMUVVGTFJ5eEhRVUZQUVN4RlFVRkpMRTFCUVZGU0xFZEJRVTBzUzBGQlQxRXNSVUZCU1N4VlFVTnNSU3hUUVVGVFRDeEhRVUZuUWtVc1JVRkJTMGtzUlVGQlMxSXNSVUZCVHl4RFFVVjBReXhIUVVSQlFTeEZRVUZSU1N4SFFVRlBTeXhIUVVGUlZDeERRVUZMTEVWQlFVbEJMRVZCUVUwc1VVRkJVVWtzUlVGQlNTeEhRVUZITEVWQlFVbEtMRVZCUTNKRVZTeEhRVUZOVml4RFFVRkxMRVZCUTFnc1VVRkJWMWNzUzBGQlRWZ3NSVUZCVFN4TlFVTnVRbGtzUjBGQlYxSXNSVUZCUzBrc1JVRkJTMGNzUTBGQlJTeFZRVU4wUWl4TlFVRk5MRkZCUVZGWUxFTkJRVXNzUlVGRGVFSXNVVUZCVjFjc1MwRkJUVmdzUlVGRFlsa3NSMEZCVjFJc1JVRkJTMGtzUlVGQlMwY3NRMEZCUlN4UFFVVXpRa01zUjBGQlYxSXNSVUZCUzBrc1JVRkJTMUlzUTBGQlN5eERRVU5zUXl4RFFVTkJMRk5CUVZOWkxFZEJRVmRTTEVWQlFVdEpMRVZCUVV0U0xFVkJRVThzUTBGRGFrTXNTVUZCVFdFc1JVRkJVMVFzUjBGQlQwc3NSMEZCVVZRc1EwRkJTeXhGUVVGSlFTeEZRVUZOTEZGQlFWRkpMRVZCUVVrc1IwRkJSeXhGUVVGSlNpeEZRVU5vUlN4SFFVRkpMRU5CUVVOakxFZEJRVTFFTEVOQlFVMHNSVUZEWWl4TlFVRk5MRWxCUVVrc1RVRkJUU3d5UTBGQk1rTXNSVUZETDBRc1NVRkJUVVVzUlVGQlUwWXNSVUZCVHl4UFFVRlBMRXRCUVUxVUxFVkJRVXNzUjBGQlJ5eEZRVU16UXl4UFFVRlhMRU5CUVVORExFVkJRVXRNTEVOQlFVc3NTVUZCUzJVc1JVRkRia0pRTEdGQlFXVXNTVUZEVmtFc1JVRkJTU3hKUVVGSlNDeERRVUZITEVkQlExcEhMRVZCUVVrc1NVRkJTVWdzUlVGQlMwd3NRMEZCU3l4RlFVVnFRbEVzWVVGQlpTeEpRVU53UWtFc1JVRkJTU3hKUVVGSlNDeERRVUZITEVWQlJVd3NUMEZCVHl4VlFVRlZMR1ZCUVdVc1MwRkJTMGNzUlVGQlMwZ3NRMEZCUnl4SFFVTnVSQ3hQUVVGUExHVkJRV1ZITEVWQlFVdElMRVZCUVVzc1EwRkROVUlzVFVGQlFVd3NSVUZEUVN4VFFVRlZMRWRCUTFZc1YwRkJXU3hIUVVOYUxHRkJRV01zUlVGRGJFSXNRMEZCUXl4RlFVZFVMRTlCUVU5UkxFTkJRMWdzUTBOMlJFRXNVMEZCVTFFc1IwRkJaVU1zUlVGQlMwTXNSVUZCU3l4RFFVRkZMRWxCUVVGRExFVkJRVXNzVFVGQlFVTXNRMEZCVFN4RlFVRkhMRU5CUXpsRExFZEJRVWxETEVWQlFVOUdMRU5CUVVjc1IwRkJTMEVzUlVGQlNTeFhRVU51UWtFc1JVRkJTU3hYUVVGWFJpeEZRVUZMUXl4RlFVRkxSU3hEUVVGTExGVkJSWHBDUlN4SFFVRlhUQ3hGUVVGTFJTeERRVUZITEVWQlEzaENTU3hIUVVGblFrNHNSVUZCUzBNc1JVRkJTMFVzUTBGQlN5eE5RVU01UWl4RFFVTkVMRWxCUVUxSkxFVkJRVkZETEVkQlFVdE9MRVZCUVVzc1IwRkJTVVlzUTBGQlJ5eEZRVU12UWl4SFFVRkpReXhoUVVGbExFbEJRMlpCTEVWQlFVa3NTVUZCU1Uwc1JVRkJUME1zUjBGQlMwd3NSVUZCVDBrc1JVRkJUMUFzUTBGQlJ5eERRVUZETEZWQlJXcERReXhoUVVGbExFbEJRM0JDUVN4RlFVRkpMRWxCUVVsTkxFTkJRVXNzVFVGRldpeERRVU5FTEVsQlFVMUZMRVZCUVZsRExFZEJRV0ZTTEVWQlFVdExMRVZCUVU5UUxFTkJRVWNzUlVGRGVFTlhMRVZCUVZWSUxFZEJRVXRNTEVWQlFVOU5MRVZCUVZkVUxFTkJRVWNzUlVGRGRFTlRMRXRCUVdGU0xFVkJRMklzVDBGQlR5eGxRVUZsUVN4RlFVRkxVU3hGUVVGWExFTkJRMnhETEUxQlFVOUZMRVZCUTFBc1UwRkJWU3hIUVVOV0xGZEJRVmtzUjBGRFdpeGhRVUZqTEVWQlEyeENMRU5CUVVNc1JVRkZSRllzUlVGQlNWRXNRMEZCVXl4RlFVRkpSU3hEUVVONlFpeERRVU5LTEVOQlEwRXNUMEZCVDFZc1EwRkRXQ3hEUVVOQkxGTkJRVk5UTEVkQlFXRlNMRVZCUVV0TExFVkJRVTlRTEVWQlFVc3NRMEZEYmtNc1IwRkJTVThzU1VGQlZTeExRVU5XTEUxQlFVOHNSMEZEV0N4SFFVRkpMRTlCUVU5QkxFZEJRVlVzVTBGRGFrSXNUMEZCVHl4UFFVRlBRU3hEUVVGTExFVkJRM1pDTEVkQlFVbElMRVZCUVU5R0xFTkJRVWNzU1VGQlMwWXNSMEZCUVN4TlFVRkJRU3hGUVVGTExFdEJRVXNzUTBGRGVrSXNTVUZCVFZrc1JVRkJVME1zUjBGQmRVSmlMRVZCUVVrc1NVRkJTeXhEUVVGRExFTkJRVU1zUlVGRGFrUlpMRVZCUVU4c1VVRkJWU3hKUVVGSkxFbEJRM0pDTEZGQlFWZEZMRXRCUVZGa0xFVkJRVWtzVVVGQlVTeExRVUZMTEVWQlEyaERXU3hGUVVGUExGRkJRVkVzU1VGQlNVVXNSVUZCU3l4TlFVRk5MRVZCUTJ4RFJpeEZRVUZQTEU5QlFWTXNSMEZEYUVKQkxFVkJRVThzWlVGQmFVSXNSMEZEZUVJc1NVRkJUVWNzUlVGQlUySXNSVUZCU1N4VFFVRlRWU3hEUVVGTkxFVkJRMnhETEVkQlFVa3NRMEZCUTFvc1JVRkJTU3hoUVVGakxFTkJRMjVDTEVsQlFVbG5RaXhGUVVGVkxFdEJRVXNzVlVGQlZVUXNRMEZCVFN4RlFVTXZRa01zUlVGQlVTeFBRVUZUTEV0QlEycENRU3hGUVVGVlFTeEZRVUZSTEZWQlFWVXNSVUZCUnl4RlFVRkZMRVZCUVVrc1VVRkRla05ETEVkQlFVdHFRaXhGUVVGSkxFbEJRVWtzVVVGQlVTeFRRVUZWTEd0R1FVRnJSbWRDTEVOQlFVOHNNRU5CUVRCRExFVkJRMnhMYUVJc1JVRkJTU3hoUVVGbExFVkJRM1pDTEVOQlEwRXNUMEZCVDJVc1EwRkRXQ3hEUVVOQkxFOUJRVThzUzBGQlN5eFZRVUZWVWl4RFFVRkxMRU5CUXk5Q0xFTkRkRVJCTEZOQlFWTlhMRWRCUVZkRExFVkJRVXRETEVWQlFVOURMRVZCUVVzc1EwRkRha01zU1VGQlRVTXNSVUZCU1VNc1IwRkJWMG9zUlVGQlN5eFBRVUZYUlN4RFFVRkhMRVZCUTJ4RFJ5eEZRVUZKUkN4SFFVRlhTQ3hGUVVGUExFOUJRVmRETEVOQlFVY3NSVUZETVVNc1QwRkJUeXhKUVVGSlNTeEhRVUZMU0N4RlFVRkhSU3hEUVVGRExFTkJRM2hDTEVOQlEwRXNTVUZCVFVNc1IwRkJUaXhOUVVGTlF5eERRVUZMTEVOQlExQXNXVUZCV1ZBc1JVRkJTME1zUlVGQlVTeExRVUZOTEVOQlF6TkNMRTlCUVU4c1pVRkJaU3hMUVVGTlR5eEhRVUZYTEVOQlFVVXNUVUZCVDBNc1JVRkJTeXhEUVVGRExFVkJRM1JFTEV0QlFVc3NTVUZCVFZRc1JVRkRXQ3hMUVVGTExFMUJRVkZETEVOQlEycENMRU5CUTBFc1RVRkJUVk1zUlVGQlVTeERRVU5XTEVkQlFVa3NRMEZCUlN4SlFVRkJWaXhGUVVGTExFMUJRVUZETEVOQlFVMHNSVUZCU1N4TFFVTnlRaXhQUVVGSlZTeEZRVUZQV0N4RFFVRkhMRWxCUTFaQkxFVkJRVTFCTEVWQlFVa3NUVUZCVFZVc1EwRkJUU3hIUVVOMFFrTXNSVUZCVDFZc1EwRkJTeXhKUVVOYVFTeEZRVUZSUVN4RlFVRk5MRTFCUVUxVExFTkJRVTBzUjBGRGRrSXNTVUZCU1Vnc1JVRkJTMUFzUlVGQlMwTXNRMEZCU3l4RFFVTTVRaXhEUVVOQkxFOUJRVTlYTEVWQlFVZFdMRVZCUVVzc1EwRkRXQ3hKUVVGTlZ5eEZRVUZQV0N4SFFVRkJMRTFCUVVGQkxFVkJRVXNzVTBGQlZ5eEpRVUZKTEVsQlFWRXNRMEZCUXl4RlFVTXhReXhQUVVGUFdTeEhRVUZsV2l4RlFVRkxWeXhGUVVGTkxFbEJRVWtzUTBGRGVrTXNRMEZEUVN4VFFVRlRXQ3hGUVVGTFlTeEZRVUZYUXl4RlFVRmhMRU5CUTJ4RExFOUJRVTlrTEVkQlFVRXNUVUZCUVVFc1JVRkJTeXhKUVVOT1pTeEhRVUZqTEV0QlFVMW1MRVZCUVV0aExFVkJRVmRETEVOQlFWY3NSVUZETDBNc1MwRkJTeXhWUVVGVkxFbEJRVWtzUTBGRE4wSXNRMEZEU2l4RlF6ZENRU3hUUVVGVFJTeEhRVUZ2UWtNc1JVRkJXVU1zUlVGQlMwTXNSVUZCVXl4RFFVcDJSQ3hKUVVGQlF5eEZRVTlKTEZOQlJtRkJMRVZCUVVGR0xFVkJRVWtzVTBGQlNpeExRVUZCUlN4RlFVRmpTQ3hGUVVGWExFMUJRMkpKTEVkQlFUQkNReXhKUVVOc1Ewd3NSVUZCV1VNc1JVRkJTME1zUTBGQlR5eERRVU0zUXl4RFFVTkJMRk5CUVZOSExFZEJRWGxDTEVOQlFVVXNVVUZCUVVNc1JVRkJVeXhOUVVGQlF5eERRVUZOTEVWQlFVZE9MRVZCUVVzc1EwRkJSU3huUWtGQlFVOHNSVUZCYVVJc1ZVRkJRVU1zUlVGQlZ5eFhRVUZCUXl4RlFVRlpMRmxCUVVGRExFVkJRV0VzVlVGQlFVTXNRMEZCVlN4RlFVRkhMRU5CUXpOSUxFZEJRVTBzUTBGQlJTeFBRVUZCUXl4RlFVRlJMRkZCUVZNc1EwRkJSU3hqUVVGQlF5eERRVUZqTEVOQlFVVXNSVUZCU1dJc1JVRkRla05qTEVWQlFWVXNUMEZCVHl4UFFVRlBMRU5CUVVNc1JVRkJSMlFzUlVGQlN5eERRVUZGTEU5QlFWRlRMRVZCUVZrc1MwRkJUU3hKUVVGTExFTkJRVU1zUlVGRGNrVk5MRVZCUVZrc1IwRkRWa01zUlVGQlVTeERRVUZETEVWQlEyWXNVVUZCVTBNc1JVRkJTU3hGUVVGSFFTeEZRVUZKV0N4RlFVRk5MRTlCUVZFc1JVRkJSVmNzUlVGQlJ5eERRVU51UXl4SlFVRk5ReXhGUVVGUFdpeEZRVUZOVnl4RFFVRkRMRVZCUTJoQ1dpeEZRVUZWTEV0QlEyUXNSMEZCU1dNc1JVRkJUMFFzUTBGQlNTeEZRVU5RTEVOQlFVTklMRWRCUVdGSExFVkJRVXNzWVVGRGJrSkdMRVZCUVUwc1MwRkJTeXhGUVVGRkxFVkJRMnBDU1N4SFFVRnBRbkJDTEVWQlFVdG5RaXhGUVVGUFJTeEZRVUZMTEdOQlFXVklMRU5CUVZNc1JVRkRkRVJITEVWQlFVc3NWVUZEVEdJc1JVRkJWV0VzUlVGQlN5eHBRa0ZGWkVjc1JVRkJUMGdzUTBGQlNTeEZRVUZITEVOQlEyNUNMRWxCUVUxSkxFVkJRVXRJTEVWQlFVOUVMRVZCUVVzc1IwRkJSeXhGUVVGSlFTeEZRVUZMTEVsQlFVMHNTMEZEY2tOSkxFbEJRMGtzUTBGQlExQXNSMEZCWVU4c1JVRkJSeXhoUVVOcVFrNHNSVUZCVFN4TFFVRkxMRVZCUVVVc1JVRkRha0pKTEVkQlFXbENjRUlzUlVGQlMyZENMRVZCUVU5TkxFVkJRVWNzWTBGQlpWQXNRMEZCVXl4RlFVVm9SU3hEUVVOQlFTeEZRVUZaTEVkQlExb3NTVUZCU1ZFc1JVRkJUVU1zUjBGQlZVNHNSVUZCVFVvc1JVRkJVeXhKUVVGUFZDeEZRVUZWTEV0QlFVOHNTVUZCVDFVc1JVRkJXU3hGUVVGTExFVkJReTlGVml4SlFVTkJhMElzUjBGQlQwVXNSMEZCV1VZc1JVRkJTMlFzUlVGQldVa3NSVUZCWTFJc1EwRkJUeXhEUVVGRExFZEJRekZFVlN4SFFVRmhWaXhKUVVOaVZTeEZRVUZaTEVsQlEyaENReXhGUVVGTkxFdEJRVXRVTEVWQlFXdENaMElzUTBGQlJ5eERRVU53UXl4RFFVTkJMRWxCUVVsQkxFVkJRMG9zUjBGQlNWQXNSVUZCVFN4VFFVRlhMRVZCUTJwQ1R5eEZRVUZOWml4RlFVRlZMRTFCUVZGQkxFVkJRVlVzVVVGRmFrTXNRMEZEUkdVc1JVRkJUVkFzUlVGQlRTeERRVUZETEVWQlEySXNVVUZCVTBNc1JVRkJTU3hGUVVGSFFTeEZRVUZKUkN4RlFVRk5MRTlCUVZFc1JVRkJSVU1zUlVGQlJ5eERRVU51UXl4SlFVRk5VeXhGUVVGUFZpeEZRVUZOUXl4RFFVRkRMRVZCUTNCQ1RTeEhRVUZQUnl4RlFVRlBPMEZCUVVFc1JVRkJTMlFzUTBGQlRTeEhRVUZIWXl4RFFVRkpMRWRCUVVzN1FVRkJRU3hEUVVONlF5eERRVU5LTEVOQlEwRXNUMEZCU1hKQ0xFZEJRMEZyUWl4SFFVRlBPMEZCUVVFc1JVRkJUMGtzUjBGQlkyUXNSVUZCWTFJc1EwRkJUeXhGUVVGSFR5eERRVUZOTEVWQlEzUkVSQ3hIUVVOQlFTeEZRVUZWTEVkQlJWUkpMRWRCUVdGTUxFZEJRMnhDUVN4RlFVRlpMRVZCUTFSaExFTkJRMWdzUTBGRFFTeFRRVUZUY0VJc1IwRkJkMElzUTBGQlJTeE5RVUZCUnl4RFFVRk5MRVZCUVVkT0xFVkJRVXNzUTBGQlJTeFZRVUZCVVN4RlFVRlhMRmRCUVVGRExFTkJRVmNzUlVGQlJ5eERRVU40UlN4SFFVRk5MRU5CUVVVc1QwRkJRVWNzUlVGQlVTeFhRVUZCWjBJc1JVRkJXU3h6UWtGQmRVSkRMRVZCUVZjc1VVRkJVeXhEUVVGRkxHTkJRVUZvUWl4RFFVRmpMRU5CUVVVc1JVRkJTV0lzUlVGRE4wWlRMRWRCUVdOdFFpeEZRVU5rTEVsQlFVMWtMRVZCUVZVc1QwRkJUeXhQUVVGUExFTkJRVU1zUlVGQlIyUXNSVUZCU3l4RFFVTnVReXhQUVVGUlV5eEZRVU5TTEU5QlFWRXNSMEZEVWl4TFFVRk5MRWxCUTFZc1EwRkJReXhGUVVOSGNVSXNSVUZCWVN4SFFVTmlReXhGUVVGbExFVkJRMkptTEVWQlFWRXNRMEZCUXl4RlFVTm1MRkZCUVZORExFVkJRVWtzUlVGQlIwRXNSVUZCU1Znc1JVRkJUU3hQUVVGUkxFVkJRVVZYTEVWQlFVY3NRMEZEYmtNc1NVRkJUVU1zUlVGQlQxb3NSVUZCVFZjc1EwRkJReXhGUVVOb1Fsb3NSVUZCVlN4TFFVTmtMRWRCUVVsakxFVkJRVTlFTEVOQlFVa3NSVUZEVUVFc1JVRkJTeXhoUVVOTVJpeEZRVUZOTEV0QlFVc3NSVUZCUlN4RlFVTnFRa2tzUjBGQmFVSndRaXhGUVVGTFowSXNSVUZCVDBVc1JVRkJTeXhqUVVGbExFVkJRVXNzUlVGRGJFUkJMRVZCUVVzc1ZVRkRUR0lzUlVGQlZXRXNSVUZCU3l4cFFrRkZaRWNzUlVGQlQwZ3NRMEZCU1N4RlFVRkhMRU5CUTI1Q0xFbEJRVTFKTEVWQlFVdElMRVZCUVU5RUxFVkJRVXNzUjBGQlJ5eEZRVUZKUVN4RlFVRkxMRWxCUVUwc1MwRkRja05KTEVsQlEwbEJMRVZCUVVjc1lVRkRTRTRzUlVGQlRTeExRVUZMTEVWQlFVVXNSVUZEYWtKSkxFZEJRV2xDY0VJc1JVRkJTMmRDTEVWQlFVOU5MRVZCUVVjc1kwRkJaU3hGUVVGTExFVkJRMmhFUVN4RlFVRkhMRlZCUTBoUkxFVkJRV0VzUzBGRmNrSXNTVUZCVFVVc1JVRkJTMklzUlVGQlQwUXNSVUZCU3l4TFFVRkxMRVZCUVVsQkxFVkJRVXNzVFVGQlVTeExRVU42UTJNc1IwRkRTVUVzUlVGQlJ5eFZRVU5JTTBJc1JVRkJWVEpDTEVWQlFVY3NVMEZEWWtFc1JVRkJSeXhuUWtGRFNFWXNSVUZCWVN4TFFVVmFXaXhGUVVGTExFOUJRVk1zVDBGQlVVa3NSMEZCUVN4TlFVRkJRU3hGUVVGSkxGZEJReTlDYWtJc1JVRkJWV2xDTEVWQlFVY3NVVUZGY2tJc1EwRkRTV3BDTEVsQlEwRjVRaXhGUVVGaExFbEJRMnBDTEVsQlFVbFFMRVZCUVUxRExFZEJRVlZPTEVWQlFVMUtMRVZCUVZNc1NVRkJUMVFzUlVGQlZTeEpRVUZMTEVWQlEzSkVXU3hGUVVGSldDeEZRVUZOTEU5QlFWTXNTVUZEYmtKcFFpeEhRVUZQTEV0QlExQnNRaXhKUVVOQmEwSXNSMEZCVDBVc1IwRkJXVVlzUlVGQlMyUXNSVUZCV1Vrc1JVRkJZMUlzUTBGQlR5eERRVUZETEVkQlF6RkVMRU5CUVVONVFpeEpRVUZsWkN4RlFVRk5MRTlCUVZObExFZEJRV2RDVWl4RlFVRkpMRk5CUVZNN1FVRkJRU3hEUVVGSkxFdEJRMmhGVHl4RlFVRmhMRWxCUTJwQ1pDeEZRVUZOTEV0QlFVdFBMRU5CUVVjc1JVRkRaRkVzUlVGQlpXWXNSVUZCVFN4TlFVTjZRaXhEUVVOQkxFZEJRVTBzUTBGQlJTeE5RVUZCYVVJc1JVRkJUeXhKUVVGQlF5eERRVUZKTEVWQlFVa3hRaXhGUVVOMlFpeEhRVUZKVVN4RlFVRk5MRk5CUVZjc1JVRkRha0lzVDBGQlQybENMRVZCUVZGRExFVkJSMllzUjBGQlNTeERRVUZEU2l4RlFVRlpMRU5CUTJJc1NVRkJUVXNzUlVGQlRXNUNMRVZCUVUwc1QwRkJUeXhEUVVGRGIwSXNSVUZCUzFZc1NVRkJVMVVzUlVGQlRWWXNSVUZCU3l4UFFVRlRMRVZCUVVjc1EwRkJReXhGUVVOb1JVa3NSVUZCWVRsQ0xFVkJRVWtzVVVGQlVTeFZRVUZaTEVkQlFVdHRReXhGUVVGTmJrTXNSVUZCU1N4UlFVRlJMRk5CUTJoRkxFTkJRMEVzUjBGQlNUaENMRVZCUVZrc1EwRkRXaXhKUVVGSlVDeEZRVUZOVlN4RlFVTldMRkZCUVZkUUxFdEJRVkZXTEVWQlEyWlBMRWRCUVU5SExFVkJRVTg3UVVGQlFTeEZRVUZMUlN4RFFVRlZMRWRCUVVkb1FpeERRVUZOTEVkQlFVZGpMRU5CUVVrc1IwRkJTenRCUVVGQkxFVkJRM1JFTEUxQlFVOHNSMEZCUjBnc1EwRkJSenRCUVVGQkxFVkJRVXRZTEVOQlFVMHNSMEZCUjNOQ0xFTkJRVWNzUlVGRGJFTXNTMEZGU1N4UFFVRlBMRWRCUVVkRUxFTkJRVXNzUjBGQlIwb3NRMEZCVXl4SFFVRkhZaXhGUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVkQlFVZGhMRU5CUVZNc1IwRkJSMHNzUTBGQlJ5eEZRVWN6UlN4RFFVTkJMRk5CUVZOa0xFZEJRV2xDTEVOQlFVVXNUMEZCUVZJc1JVRkJVU3hSUVVGVExFTkJRVVVzWTBGQlFVTXNRMEZCWXl4RFFVRkZMRVZCUVVkSExFVkJRVTlZTEVWQlFWTlZMRVZCUVZjc1EwRkhla1lzUjBGR1NWWXNSMEZCVjFVc1NVRkRXRllzUlVGQlZVRXNSVUZCVVN4UlFVRlJMRTlCUVZFc1JVRkJSU3hIUVVOd1EwRXNSVUZCVXl4RFFVTlVMRWxCUVUxblF5eEZRVUZMVml4SFFVRmpaQ3hGUVVGalVpeERRVUZQTEVWQlFVZFBMRU5CUVUwc1JVRkRka1JKTEVWQlFVMHNTMEZCUzNGQ0xFVkJRVWNzVlVGQlZTeERRVUZETEVOQlF6ZENMRU5CUTBvc1EwTnlTVUVzVTBGQlUwTXNSMEZCVTBNc1JVRkJUME1zUlVGQlN5eERRVU14UWl4SlFVRk5ReXhGUVVGSlF5eEZRVUZUUml4RFFVRkhMRVZCUVVsQkxFVkJRVWtzVFVGQlVVRXNSVUZEZEVNc1VVRkJWMGNzUzBGQlRVb3NSVUZEWWl4SFFVRkpTeXhGUVVGUFJDeERRVUZGTEVsQlEweEJMRVZCUVVjc1RVRkJVVWdzUjBGQlQwY3NSVUZCUnl4TlFVRlJSaXhIUVVVM1FrTXNSVUZCVTBNc1JVRkJSeXhIUVVGSExFZEJRVXRCTEVWQlFVY3NTVUZCU1N4UlFVRlZSaXhIUVVOeVF5eFBRVUZQUlN4RFFVbDJRaXhEUVVOQkxFbEJRVTFGTEVkQlFVNHNZMEZCYzBKRExFVkJRVmNzUTBGRE4wSXNWMEZCVnl4VFFVRlZMRU5CUTJwQ0xFMUJRVThzZFVKQlExZ3NRMEZEUVN4WlFVRlpReXhGUVVGUkxFTkJRMmhDTEUxQlFVMURMRWRCUVV0RUxFTkJRVTBzUlVGRGFrSXNTMEZCU3l4TlFVRlJMRU5CUVVNc1EwRkRiRUlzUTBGTFFTeFBRVUZQTEV0QlFVdEJMRVZCUVZGRkxFVkJRVXRETEVWQlFVc3NRMEZETVVJc1IwRkJUU3hEUVVGRkxHTkJRVUZETEVWQlFXVXNVMEZCUVVNc1EwRkJVeXhGUVVGSlJpeEZRVU01UWtjc1JVRkJUU3hKUVVGSkxFdEJRVXRPTEVOQlFVMHNSVUZEY2tKUExFVkJRVTBzUTBGQlEyUXNSVUZCUzJVc1NVRkJWU3hEUVVONFFpeEhRVUZKTEU5QlFVOUlMRWRCUVdFc1YwRkRjRUpITEVWQlFWRklMRVZCUVZNc1MwRkJTMGdzUlVGQlMxUXNSVUZCUzJVc1EwRkJTeXhWUVVOb1F5eE5RVUZOTEZGQlFWRklMRU5CUVZFc1IwRkJTeXhEUVVGRFFTeEZRVUZUTEZOQlFWTmFMRU5CUVVjc1JVRkRkRVFzVVVGRFFXVXNTVUZCVlN4UlFVRmhTaXhKUVVOMlFrVXNSVUZCU1N4TlFVRk5MRXRCUVV0SExFZEJRVmRvUWl4RlFVRkxaU3hGUVVGUFRDeERRVUZITEVOQlFVTXNRMEZEYkVRc1JVRkRRU3hIUVVGSlJDeGhRVUZsTEVsQlEyWXNUMEZCVnl4RFFVRkRWQ3hGUVVGTFpTeERRVUZMTEVsQlFVdE9MRVZCUTNaQ1N5eEZRVUZKWkN4RlFVRkxaU3hEUVVGTExGVkJSV0pPTEVkQlFVOHNUMEZCVDBFc1IwRkJVU3hUUVVNelFpeFJRVUZYVkN4TFFVRlBMRTlCUVU4c1MwRkJTMU1zUTBGQlJ5eEZRVU0zUWtzc1JVRkJTV1FzUlVGQlMxTXNSVUZCU1ZRc1EwRkJSeXhEUVVGRExFVkJSWHBDTEU5QlFVa3NUMEZCVDA4c1JVRkJUeXhuUWtGQmJVSXNXVUZEYWtOTkxFVkJRVWtzVFVGQlRTeExRVUZMVGl4RlFVRlBMR05CUVdNc1JVRkZha05OTEVOQlExZ3NRMEZQUVN4SlFVRkpTU3hGUVVGTlF5eEZRVUZYTEVOQk4wUjZRaXhKUVVGQlF5eEZRVGhFVVN4SlFVRkpReXhGUVVOQmFFSXNSVUZCVDJFc1EwRkJTU3hGUVVOWVJ5eEZRVUZSU0N4RlFVTklMRU5CUVVOQkxFZEJRVkVzVDBGQlQwRXNSMEZCVXl4VlFVRlpMRVZCUVVVc1VVRkJVMEVzUjBGRmNrUkhMRVZCUVZFc1NVRkJTVU1zUjBGQlMwb3NSVUZCVFVFc1IwRkJRU3haUVVGQlFTeEZRVUZOTEV0QlFVc3NSVUZIYkVOSExFVkJRVkVzU1VGQlNVTXNSMEZCUzBvc1JVRkJTeXhKUVVGTFFTeEZRVUZMTEV0QlFVc3NSVUZEZWtNc1NVRkJUVXNzUlVGQlQzaENMRWRCUVZNc1MwRkJTeXhOUVVGUGMwSXNSVUZCVFN4SFFVRkhMRVZCUTNKRFJ5eEhRVUZqU2l4RlFVRkJMRXRCUVVzc1UwRkJUQ3haUVVGQlFTeEZRVUZoTEdWQlEycERMRWRCUVVsSExFVkJRVTBzUTBGRFRpeEhRVUZKTEVOQlFVTktMRVZCUTBRc1RVRkJUU3hKUVVGSkxFMUJRVTBzVDBGQlQwVXNSVUZCVFN4SFFVRkhMR05CUVdNc1JVRkZPVU5zUWl4RlFVRlRiMElzUlVGQlN5eExRVUZMTEVkQlFVdEZMRWRCUVdOS0xFVkJRVTBzUzBGQlN5eEZRVU5xUkVVc1JVRkJTeXhOUVVGTkxFMUJRVkZHTEVWQlFVMHNUVUZGZWtKRkxFVkJRVXNzVFVGQlVVWXNSVUZCVFN4TFFVTXpRaXhUUVVOVFJ5eEZRVUZoTEVOQlEyeENMRWxCUVUxRkxFVkJRVWtzUzBGQlN5eE5RVUZOTEZWQlFWVkRMRWRCUVZGSUxFVkJRVmxJTEVWQlFVOU5MRU5CUVVrc1JVRkJTU3hEUVVGRExFVkJReTlFUkN4SlFVRk5MRWRCUTA0c1MwRkJTeXhOUVVGTkxFdEJRVXRNTEVOQlFVc3NSVUZGY2tJc1MwRkJTeXhOUVVGTkxFOUJRVTlMTEVWQlFVY3NSVUZCUjB3c1EwRkJTeXhEUVVOeVF5eE5RVVZKTEV0QlFVc3NUVUZCVFN4TFFVRkxRU3hEUVVGTExFTkJSVGRDTEVOQlEwRXNUMEZCVDNCQ0xFVkJRVXNzUTBGRFVpeEpRVUZOUnl4RlFVRkxUQ3hIUVVGVExFdEJRVXNzVFVGQlQwVXNRMEZCUnl4RlFVTnVReXhQUVVGTFJ5eEZRVVZQTEV0QlFVc3NUVUZCVFN4UFFVRlBMRXRCUVVzc1RVRkJUU3hSUVVGUlFTeERRVUZGTEVWQlFVY3NRMEZCUXl4RlFVTTFReXhQUVVGVExFVkJSbFFzUlVGSFppeERRVU5CTEVsQlFVbElMRVZCUVVzeVFpeEZRVUZaTEVOQmNFZDZRaXhKUVVGQlVpeEZRWEZIVVN4SlFVRk5hRUlzUlVGQlMwd3NSMEZCVXl4TFFVRkxMRTFCUVU5RkxFTkJRVWNzUlVGRE4wSTBRaXhGUVVGUGVrSXNSMEZCUVN4WlFVRkJRU3hGUVVGSkxFMUJRMnBDTEU5QlFWRm5RaXhGUVVGQkxFTkJRVU5STEVkQlFXTjZRaXhGUVVGVE1FSXNRMEZCU1N4RlFVRkpRU3hGUVVGTExFMUJRVkZCTEVsQlFUZERMRXRCUVVGVUxFVkJRWE5FTEUxQlEyeEZMRU5CUTBFc1NVRkJTVzVDTEVWQlFVc3NRMEZEVEN4TlFVRlBMRU5CUVVNc1EwRkJRMFlzUjBGQlV5eExRVUZMTEUxQlFVOUZMRU5CUVVjc1EwRkRja01zUTBGRFFTeEpRVUZKUVN4RlFVRkxaU3hGUVVGUExFTkJRMW9zUzBGQlN5eEpRVUZKTEVsQlFVbE5MRWRCUVV0eVFpeEZRVUZMWlN4RFFVRkxMRVZCUVVjc1JVRkJTU3hEUVVOMlF5eERRVTFCTEU5QlFVOWpMRVZCUVVkdVFpeEZRVUZMYjBJc1JVRkJUU3hEUVVOcVFpeEpRVUZOYWtJc1JVRkJUV2xDTEVWQlFVOHNTVUZCU1VFc1JVRkJVM0JDTEVkQlFVRXNUVUZCUVVFc1JVRkJTeXhUUVVGWExFbEJRVWtzU1VGQlVTeERRVUZETEVWQlEzcEVRU3hIUVVGQkxFMUJRVUZCTEVWQlFVc3NWVUZEVEVFc1JVRkJTU3hUUVVGVFJ5eERRVUZITEVWQlEzQkNMRkZCUVZkaExFdEJRVkVzUzBGQlN5eE5RVU53UWtzc1IwRkJaWEpDTEVWQlFVdEhMRVZCUVV0aExFTkJRVWtzUlVGRGFrTXNUMEZCVDJJc1EwRkRXQ3hEUVVOQkxGTkJRVk5JTEVWQlFVdHpRaXhGUVVGWFF5eEZRVUZoTEVOQlEyeERMRWRCUVVrc1EwRkJRM1pDTEVWQlEwUXNUMEZCVHl4TFFVRkxMRlZCUVZVc1NVRkJTU3hGUVVNNVFpeFJRVUZYWjBJc1MwRkJVU3hMUVVGTExFMUJRM0JDTEVkQlFVa3NRMEZCUTNSQ0xFVkJRVTl6UWl4RFFVRkpMRVZCUTFvc1RVRkJUU3hKUVVGSkxFMUJRVTBzYzBOQlFYTkRMRXRCUVVzc1ZVRkJWVUVzUTBGQlNTeERRVUZETEZWQlFWVXNSVUZGTlVZc1RVRkJTU3hEUVVGRGFFSXNSVUZCU1N4bFFVRnBRaXhMUVVGTExHbENRVUZwUWl4RlFVRkxMRWxCUTJwRVFTeEZRVUZOTEU5QlFVOHNUMEZCVHl4RFFVRkRMRVZCUVVkQkxFVkJRVXNzUTBGQlJTeGpRVUZsTEVWQlFVc3NRMEZCUXl4SFFVTnFSSGRDTEVkQlFXOUNMRXRCUVUxNFFpeEZRVUZMTEVOQlEyeERMR2RDUVVGcFFpeEhRVU5xUWl4VlFVRlhMRU5CUVVVc1RVRkJUeXhKUVVGTExFbEJRVXNzUjBGQlNTeEZRVU5zUXl4WFFVRlpRU3hGUVVGSkxGRkJRVlVzUjBGRE1VSXNXVUZCUVhWQ0xFVkJRMEVzVlVGQlFVUXNRMEZEU2l4RFFVRkRMRU5CUTB3c1EwRkRTaXhGUXpGSlFTeEpRVUZOUnl4SFFVRk5MRU5CUTFJc1YwRkJXU3hOUVVOYUxGRkJRVk1zUjBGRFZDeFZRVUZYUXl4SFFVTllMRWxCUVVzc2QwSkJRMHdzVVVGQlVVUXNSVUZCUzBVc1JVRkJVeXhEUVVOc1FpeFBRVUZMUXl4SFFVRk5TQ3hEUVVGSExFZEJRMVpGTEVWQlFWRXNhVU5CUVdsRExFVkJRM1JEUml4RFFVTllMRVZCUTBFc1YwRkJXU3hEUVVGRFNTeEZRVUZSUXl4RlFVRkxReXhKUVVGUlRDeEhRVUZSTEV0QlFVdEhMRVZCUVZGRExFVkJRVXRETEVOQlFVY3NRMEZEYmtVc1JVTlFRU3hKUVVGTlF5eEhRVUZPTEdOQlFYTkNReXhGUVVGWExFTkJRemRDTEZkQlFWY3NVMEZCVlN4RFFVTnFRaXhOUVVGUExIVkNRVU5ZTEVOQlEwRXNXVUZCV1VNc1JVRkJVU3hEUVVOb1FpeE5RVUZOUXl4SFFVRkxSQ3hEUVVGTkxFVkJRMnBDTEV0QlFVc3NUVUZCVVN4RFFVRkRMRU5CUTJ4Q0xFTkJRMEVzU1VGQlNVVXNSVUZCVHl4RFFVTlFMRXRCUVVzc1RVRkJUU3hMUVVGTFFTeERRVUZMTEVOQlEzcENMRU5CVTBFc1QwRkJUME1zUlVGQlN5eERRVU5TTEVsQlFVMURMRVZCUVUxRExFZEJRVmxHTEVOQlFVY3NSVUZETTBJc1QwRkJTU3hQUVVGUFF5eEhRVUZSTEZOQlExSXNSMEZEUXl4TFFVRkxMRTFCUVUwc1QwRkJUMEVzUlVGQlN5eERRVUZETEVWQlEzcENMRTlCUVZNc1EwRkRlRUlzUTBGRFFTeEpRVUZKUkN4RlFVRkxSeXhGUVVGWkxFTkJRMnBDTEVsQlFVMUdMRVZCUVUxRExFZEJRVmxHTEVOQlFVY3NSVUZETTBJc1IwRkJTU3hQUVVGUFF5eEhRVUZSTEZOQlEyWXNUMEZEU2l4SlFVRk5SeXhGUVVGTExFdEJRVXNzVFVGQlRVZ3NRMEZCUnl4RlFVTjZRaXhOUVVGUExFTkJRVU5GTEVkQlFXTkZMRVZCUVZORUxFTkJRVVVzUlVGQlNVRXNSVUZCUnl4TlFVRlJRU3hEUVVOd1JDeERRVTlCTEVsQlFVbEtMRVZCUVVzc1EwRkRUQ3hKUVVGTlF5eEZRVUZOUXl4SFFVRlpSaXhEUVVGSExFVkJRek5DTEU5QlFVOHNUMEZCVDBNc1IwRkJVU3hWUVVGWlFTeEZRVUZOTEV0QlFVc3NUVUZCVFN4TlFVTjJSQ3hEUVZGQkxFbEJRVWxFTEVWQlFVdEVMRVZCUVU4c1EwRkRXaXhKUVVGTlJTeEZRVUZOUXl4SFFVRlpSaXhEUVVGSExFVkJRek5DTEVkQlFVa3NUMEZCVDBNc1IwRkJVU3hUUVVObUxFMUJRVTBzU1VGQlNTeE5RVUZOTEN0Q1FVRXJRa1FzUTBGQlJ5eEhRVUZITEVWQlEzcEVMRWxCUVUxTkxFVkJRVThzUzBGQlN5eE5RVUZOVEN4RFFVRkhMRVZCUTNaQ1NTeEZRVUZUUXl4RFFVRkpMRWRCUVV0RExFZEJRV05TTEVOQlFVc3NSVUZEY2tOUExFVkJRVXNzVFVGQlVWQXNSVUZGWWl4TFFVRkxMRTFCUVUxRkxFTkJRVWNzUlVGQlNVWXNRMEZETVVJc1EwRkRRU3hQUVVGUFV5eEZRVUZIUXl4RlFVRkxMRU5CUTFnc1NVRkJUVU1zUlVGQlRTeERRVUZETEVWQlExUkVMRWRCUVVFc1RVRkJRVUVzUlVGQlN5eFZRVU5NUVN4RlFVRkpMRk5CUVZORExFTkJRVWNzUlVGRGNFSXNTVUZCU1VNc1JVRkJTU3hGUVVOU0xGRkJRVmRETEV0QlFWRXNTMEZCU3l4TlFVTndRa1lzUlVGQlNTeExRVUZMUnl4SFFVRkxSQ3hGUVVGTkxFOUJRVTlFTEVkQlFVY3NSVUZCUjBZc1EwRkJSeXhEUVVGRExFVkJRM3BETEU5QlFVOURMRU5CUTFnc1EwRkRRU3hUUVVGVFJDeEZRVUZMU3l4RlFVRlhReXhGUVVGaExFTkJRMnhETEU5QlFVdE9MRVZCUlVWUExFZEJRVzlDTEV0QlFVMVFMRVZCUVVzc1EwRkRiRU1zWjBKQlFXbENMRXRCUTJwQ0xGVkJRVmNzUTBGQlJTeE5RVUZQTEVsQlFVc3NTVUZCU3l4SFFVRkpMRVZCUTJ4RExGbEJRV0ZCTEVWQlFVa3NVVUZCVlN4SlFVRk5MRXRCUTJwRExGbEJRVUZOTEVWQlEwRXNWVUZCUVVRc1EwRkRTaXhEUVVGRExFVkJVRlVzUzBGQlN5eFZRVUZWTEVsQlFVa3NRMEZSYkVNc1EwRkRRU3hQUVVGUExFdEJRVXRxUWl4RlFVRlJiMElzUlVGQlMxSXNSVUZCU3l4RFFVTXhRaXhIUVVGTkxFTkJRVVVzVTBGQlFWTXNRMEZCVXl4RlFVRkpWQ3hGUVVObVF5eEZRVUZOTEVsQlFVa3NTMEZCUzJJc1EwRkJUU3hGUVVNelFpeEhRVUZKYjBJc1IwRkJUeXhQUVVGUExGbEJRVmtzVDBGQlQwRXNRMEZCUnl4RlFVRkhMRU5CUTNaRExFbEJRVWxPTEVWQlFVa3NSVUZEVWl4UlFVRlRVQ3hMUVVGTllTeEZRVUZMTEVOQlEyaENMRWRCUVVrc1QwRkJUME1zUjBGQllTeFhRVUZaTEVOQlEyaERMRWxCUVUxc1FpeEZRVUZOYVVJc1lVRkJaU3hKUVVGTllpeEZRVUZMTEU5QlFVOVBMRWRCUVVjc1JVRkRhRVJRTEVWQlFVdGpMRVZCUVZNc1MwRkJTMFFzUlVGQlMycENMRVZCUVV0SkxFTkJRVVVzUTBGRGJrTXNRMEZEUVUwc1JVRkJTU3hOUVVGTkxFdEJRVXRUTEVkQlFWZG1MRVZCUVVrc1QwRkJWMHNzUTBGQlJ5eERRVUZETEVOQlEycEVMRU5CUTBvc1EwRkRRU3hQUVVGUFF5eERRVU5ZTEVOQlEwb3NSVUZEUVN4VFFVRlRVaXhIUVVGWlJpeEZRVUZMTEVOQlEzUkNMRWxCUVVsRExFVkJRVTFKTEVWQlFWTk1MRU5CUVVjc1JVRkJTVUVzUlVGQlNTeE5RVUZSUVN4RlFVTjBReXhQUVVGSlF5eEhRVUZQTEU5QlFVOUJMRWRCUVZFc1YwRkRkRUpCTEVWQlFVMHNUMEZCVDBFc1EwRkJSeXhIUVVOaUxFOUJRVTlCTEVkQlFWRXNWVUZCV1N4UFFVRlBMRlZCUVZWQkxFTkJRVWNzUjBGQlMwRXNSMEZCVHl4RlFVTTFSRUVzUlVGRFFTeEpRVU5XTEVORE0wZEJMRWxCUVUxdFFpeEhRVUZOTEVOQlExSXNWMEZCV1N4TlFVTmFMRkZCUVZNc1IwRkRWQ3hWUVVGWFF5eEhRVU5ZTEVsQlFVc3NkMEpCUTB3c1VVRkJVVVFzUlVGQlMwVXNSVUZCVXl4RFFVTnNRaXhQUVVGTFF5eEhRVUZOU0N4RFFVRkhMRWRCUTFaRkxFVkJRVkVzYTBOQlFXdERMRVZCUTNaRFJpeERRVU5ZTEVWQlEwRXNWMEZCV1N4RFFVRkRTU3hGUVVGUlF5eEZRVUZMUXl4SlFVRlJUQ3hIUVVGUkxFdEJRVXRITEVWQlFWRkRMRVZCUVV0RExFTkJRVWNzUTBGRGJrVXNSVU5hUVN4SlFVRk5ReXhIUVVGVExFTkJRMWdzVTBGQlZVTXNSMEZCVXl4UFFVRlBRU3hIUVVGVkxGTkJRM0JETEZGQlFWTXNSMEZEVkN4SlFVRkxMSGRDUVVOTUxGRkJRVk5ETEVkQlFVOUJMRVZCUTJoQ0xGVkJRVlZETEVWQlFVMURMRVZCUVV0RExFVkJRVmRETEVWQlFXRXNRMEZEZWtNc1QwRkJRVVlzUlVGQlRTeFBRVUZQTEU5QlFVOHNRMEZCUlN4aFFVRmpMRVZCUVVzc1JVRkJSMEVzUTBGQlJ5eEZRVU40UTBjc1IwRkJaMEpLTEVWQlFVMURMRVZCUVV0RExFVkJRVmRETEVOQlFWY3NRMEZETlVRc1EwRkRTaXhGUTFSQkxFbEJRVTFGTEVkQlFWVXNRMEZEV2l4VFFVRlZReXhIUVVGVFFTeEhRVUZUTEV0QlF6VkNMRmRCUVZrc1NVRkJUU3hKUVVGSlF5eEZRVUZQTEVsQlFVa3NSVUZEYWtNc1VVRkJVeXhIUVVOVUxFbEJRVXNzZVVKQlEwd3NTMEZCVFN4M1FrRkRUaXhSUVVGVExFbEJRVTBzU1VGQlNVRXNSVUZCVHl4SlFVRkpMRVZCUXpsQ0xGVkJRVmNzUTBGQlF5eERRVUZGTEU5QlFVRkRMRU5CUVU4c1JVRkJSME1zU1VGQlVTeFBRVUZQUkN4SFFVRlhMRlZCUVZsSUxFZEJRVkVzUzBGQlN5eExRVUZMUnl4RFFVRk5MRVZCUTJoR1FTeEZRVU5CUXl4RlFVRkpMRkZCUVZFc1QwRkRkRUlzUlVOV1FTeEpRVUZOUXl4SFFVRlZMRU5CUTFvc1UwRkJWVU1zUjBGQlV5eFBRVUZQUVN4SFFVRlZMRlZCUTNCRExGRkJRVk1zUjBGRFZDeEpRVUZMTEhsQ1FVTk1MRXRCUVUwc2IwTkJRMDRzVVVGQlUwTXNSMEZCVHl4SlFVRkpReXhGUVVGUFJDeEZRVUZKTEVOQlFVTXNTVUZCVFN4TFFVRlBRU3hGUVVGSkxFTkJRVU1zU1VGQlRTeEhRVUZITEVWQlF6TkVMRlZCUVZVc1EwRkJSU3hQUVVGQlJTeEZRVUZSTEUxQlFVRklMRU5CUVUwc1JVRkJSMGtzUlVGQlN5eERRVU01UWl4SFFVRkpSQ3hIUVVGVlNpeEhRVUZSTEV0QlFVc3NTMEZCUzBrc1EwRkJUU3hGUVVGSExFTkJRM0pETEVsQlFVMUZMRVZCUVV0R0xFVkJRVThzUTBGQlF5eEpRVUZOTEV0QlFVOUJMRVZCUVU4c1EwRkJReXhKUVVGTkxFbEJRemxETEVkQlFVbElMRWxCUVZWTExFVkJRMVlzVDBGQlQwWXNRMEZEWml4RFFVTkJMRTlCUVU5SUxFVkJRVkZKTEVWQlFVa3NVVUZCVVN4UlFVRlZRU3hGUVVGSkxGRkJRVkVzVVVGRGNrUXNRMEZEU2l4RlEyaENRU3hUUVVGVFJTeEhRVUZuUWl4RFFVRkZMRTlCUVVGRExFVkJRVkVzYTBKQlFVRkRMRVZCUVcxQ0xFbEJRVUZETEVWQlFVc3NUVUZCUVVNc1EwRkJUU3hGUVVGSExFTkJRMmhGTEVkQlFVa3NUMEZCVDBFc1IwRkJWU3hUUVVOcVFpeFBRVUZQTEU5QlFVOUJMRU5CUVVzc1JVRkRka0lzU1VGQlRVTXNSVUZCVFN4UFFVRlBSQ3hIUVVGVkxGTkJRVmRCTEVWQlFWRXNUMEZCVDBFc1EwRkJTeXhGUVVNMVJDeEhRVUZKTEVOQlFVTXNVMEZCVTBNc1EwRkJSeXhGUVVOaUxFOUJRVThzVFVGQlRVRXNRMEZCUnl4RlFVRkpMRTlCUVZOQkxFVkJRVTBzUlVGQlNTeFJRVUZWTEU5QlEzSkVMRWxCUVVsRExFVkJRVWtzUzBGQlN5eFZRVUZWUml4RFFVRkxMRVZCUXpWQ0xFZEJRVWtzUTBGQlEwZ3NSMEZEUkVNc1NVRkRReXhEUVVGRFF5eEhRVUZQUVN4SlFVRlJMRFJDUVVOcVFpeE5RVUZOTEV0QlFVdEhMRU5CUVVNc1JVRkJSeXhEUVVObUxFbEJRVWxETEVWQlFVbEVMRVZCUVVVc1VVRkJVU3hIUVVGSExFVkJRMnBDUXl4RlFVRkpMRWxCUTBwQkxFVkJRVWxFTEVWQlFVVXNUMEZEVGtFc1IwRkJTeXhMUVVWVUxFbEJRVWxGTEVWQlFVbE9MRWRCUVhGQ1NTeEZRVUZGTEU5QlFWTkRMRVZCUVVrc1IwRkROVU1zUzBGQlQwTXNTMEZCVFN4SFFVTlVSaXhIUVVGTExFZEJRMklzUTBGRFFTeFBRVUZQUVN4RFFVTllMRU5EYkVKQkxFbEJRVTFITEVkQlFWY3NRMEZEWWl4VFFVRlZReXhIUVVGVExFOUJRVTlCTEVkQlFWVXNVMEZEY0VNc1VVRkJVeXhIUVVOVUxFbEJRVXNzTUVKQlEwd3NTMEZCVFN4cFJFRkRUaXhSUVVGVFF5eEhRVUZQUVN4RlFVRkpMRTFCUVUwc1JVRkJSU3hGUVVGRkxGbEJRVmtzU1VGQlRTeE5RVU14UXl4SlFVTkJRU3hGUVVGSkxFTkJRVU1zU1VGQlRTeEpRVU5RTEU5QlFVOHNhMEpCUTFBc1QwRkJUeXhyUWtGRGFrSXNWVUZCVjBNc1JVRkRaaXhGUVVOTlF5eEhRVUZYTEVOQlEySXNVMEZCVlVnc1IwRkJVeXhQUVVGUFFTeEhRVUZWTEZOQlEzQkRMRkZCUVZNc1IwRkRWQ3hKUVVGTExEQkNRVU5NTEU5QlFWRXNUVUZEVWl4TFFVRk5MSGxFUVVOT0xGRkJRVk5ETEVkQlFVOHNWMEZCVjBFc1EwRkJSeXhGUVVNNVFpeFZRVUZWUnl4RlFVRk5MRU5CUTFvc1NVRkJUVU1zUlVGQlRTeFBRVUZQUkN4RlFVRkxMRXRCUVVzc1JVRkROMElzVDBGQlR5eFRRVUZUUXl4RFFVRkhMRVZCUVVsQkxFVkJRVWtzWTBGQll5eEZRVUZKU0N4SFFVRm5Ra1VzUTBGQlNTeERRVU55UlN4RFFVTktMRVZCUTAxRkxFZEJRVkVzUTBGRFZpeFRRVUZWVGl4SFFVRlRMRTlCUVU5QkxFZEJRVlVzVTBGRGNFTXNVVUZCVXl4SFFVTlVMRWxCUVVzc01FSkJRMHdzUzBGQlRTeHhRMEZEVGl4UlFVRlJReXhGUVVGTExFTkJRMVFzU1VGQlRVY3NSVUZCVHl4SlFVRkpSeXhGUVVGUExGZEJRVmRPTEVOQlFVY3NRMEZCUXl4RlFVTnFRMDhzUlVGQlRWQXNSVUZCU1N4UlFVRlJMRWRCUVVjc1JVRkRNMElzVDBGQlNVOHNTVUZCVVN4SlFVRk5VQ3hGUVVGSlFTeEZRVUZKTEU5QlFWTXNRMEZCUXl4SlFVRk5MRTFCUTNSRFJ5eEZRVUZMTEd0Q1FVRnZRa2dzUlVGQlNTeFBRVUZUVHl4RlFVRk5MRWRCUTNwRFNpeERRVU5ZTEVWQlEwRXNWVUZCVjBZc1JVRkRaaXhGUTNSRFFTeEpRVUZOVHl4SFFVRmxReXhIUVVGVkxFOUJRVTlCTEVkQlFWVXNWVUZCV1N4UFFVRlBMRlZCUVZWQkxFTkJRVXNzUlVGRE5VVkRMRWRCUVdFc1EwRkJRME1zUlVGQlMwTXNSVUZCVVVNc1JVRkJUeXhEUVVGRkxGbEJRVUZETEVOQlFWa3NTVUZCVDBFc1JVRkJZeXhQUVVGUFNDeERRVUZITEVWQlFVa3NVMEZCVTBFc1JVRkJTU3hWUVVGVlF5eERRVUZOTEVWQlFVZERMRU5CUVVzc1JVRkRPVWdzVTBGQlUwVXNSMEZCWVVNc1JVRkJUVWdzUlVGQlQwa3NSVUZCVVN4RFFVTjJReXhIUVVGTkxFTkJRVVVzVFVGQlFWSXNRMEZCVFN4RlFVRkpUeXhGUVVOc1FpeFBRVUZKVWl4SFFVRlpReXhEUVVGTExFZEJRVXRCTEVkQlFWTXNSVUZEZUVKUkxFVkJRVk5TTEVWQlFVMHNVMEZCVTBrc1EwRkJTeXhGUVVOcVEwc3NSMEZCWjBKR0xFTkJRVWtzUTBGREwwSXNRMEZEUVN4SlFVRk5SeXhIUVVGVExFTkJRMWdzVTBGQlZWWXNSMEZCVTBRc1IwRkJXVU1zUTBGQlN5eEhRVUZMUVN4SFFVRlRMRVZCUTJ4RUxGRkJRVk1zUjBGRFZDeEpRVUZMTEhkQ1FVTk1MRTlCUVZFc1RVRkRVaXhMUVVGTkxHRkJRMDRzVVVGQlV5eERRVUZEUlN4RlFVRkxVeXhGUVVGVlF5eEpRVUZSV0N4SFFVRlhReXhGUVVGTExFVkJRVWNzUlVGQlIxVXNRMEZCUnl4RlFVTXhSQ3hWUVVGWFRDeEhRVUZSUkN4SFFVRmhReXhGUVVGTkxFVkJRVWNzU1VGQlNTeERRVU5xUkN4RlFVTk5UU3hIUVVGTkxFTkJRMUlzVTBGQlZXUXNSMEZEVml4UlFVRlRMRWRCUTFRc1NVRkJTeXgzUWtGRFRDeExRVUZOTEdkQ1FVTk9MRkZCUVZNc1EwRkJRMGNzUlVGQlMxTXNSVUZCVlVNc1NVRkJVVmdzUjBGQlYwTXNSVUZCU3l4RlFVRkhMRWRCUVVsVkxFTkJRVWNzUlVGRE0wUXNWVUZCVjBnc1JVRkRaaXhGUVVOTlN5eEhRVUZUTEVOQlExZ3NVMEZCVldRc1IwRkJVMFFzUjBGQldVTXNRMEZCU3l4SFFVRkxRU3hIUVVGVExFVkJRMnhFTEZGQlFWTXNSMEZEVkN4SlFVRkxMSGRDUVVOTUxFOUJRVkVzVFVGRFVpeExRVUZOTEcxQ1FVTk9MRkZCUVZNc1EwRkJRMFVzUlVGQlMxTXNSVUZCVlVNc1NVRkJVVmdzUjBGQlYwTXNSVUZCU3l4RlFVRkhMRWRCUVVsVkxFTkJRVWNzUlVGRE0wUXNWVUZCVjB3c1IwRkJVVVFzUjBGQllVTXNSVUZCVFN4SFFVRkpMRWxCUVVrc1EwRkRiRVFzUlVNelFrRXNTVUZCVFZFc1IwRkJVeXhEUVVOWVF5eEhRVU5CUXl4SFFVTkJReXhIUVVOQlF5eEhRVU5CUXl4SFFVTkJReXhIUVVOQlF5eEhRVU5CUXl4SFFVTkJReXhIUVVOQlF5eEhRVU5CUXl4RlFVTktMRVZEYUVKQkxGTkJRVk5ETEVkQlFWbERMRVZCUVU4c1EwRkRlRUlzVDBGQlR5eFBRVUZQUVN4SFFVRlZMRlZCUVZrc1QwRkJUeXhWUVVGVlFTeERRVUZMTEVOQlF6bEVMRU5CUTBFc1NVRkJUVU1zUjBGQlowSXNRMEZCUXl4RFFVRkZMRTFCUVVGRUxFTkJRVTBzU1VGQlRTeExRVUZMTEZWQlFWVkJMRU5CUVVzc1JVRkRia1JGTEVkQlFXTXNRMEZEYUVJc1EwRkRTU3hUUVVGVlJpeEhRVUZUTEU5QlFVOUJMRWRCUVZVc1UwRkRjRU1zVVVGQlV5eEhRVU5VTEVsQlFVc3NkMEpCUTB3c1VVRkJVMGNzUjBGQlQwRXNSVUZEYUVJc1ZVRkJWMFlzUlVGRFppeEZRVU5CTEVOQlEwa3NVMEZCVlVRc1IwRkJVMEVzUjBGQlV5eExRVU0xUWl4WFFVRlpMRWxCUVUwc1NVRkJTVWtzUlVGQlR5eEpRVUZKTEVWQlEycERMRkZCUVZNc1IwRkRWQ3hKUVVGTExIbENRVU5NTEV0QlFVMHNVMEZEVGl4UlFVRlRMRWxCUVUwc1MwRkRaaXhWUVVGWFNDeEZRVU5tTEVWQlEwRXNRMEZEU1N4VFFVRlZSQ3hIUVVGVExFOUJRVTlCTEVkQlFWVXNWVUZEY0VNc1VVRkJVeXhIUVVOVUxFbEJRVXNzZVVKQlEwd3NTMEZCVFN4bFFVTk9MRkZCUVZOSExFZEJRVTlCTEVsQlFWRXNUMEZEZUVJc1ZVRkJWMFlzUlVGRFppeEZRVU5CTEVOQlEwa3NVMEZCVlVZc1IwRkRWaXhSUVVGVExFZEJRMVFzU1VGQlN5eDNRa0ZEVEN4TFFVRk5MSGRDUVVOT0xGRkJRVk1zUTBGQlEwa3NSVUZCUzBVc1JVRkJWU3hEUVVGRkxGbEJRVUZETEVOQlFWa3NTVUZCVFVFc1JVRkJZeXhQUVVGUFNDeERRVUZITEVWQlFVa3NVMEZCVTBFc1JVRkJTeXhGUVVGRkxFVkJRM3BHTEZWQlFWY3NRMEZCUXl4RFFVRkZMRTFCUVVGSUxFTkJRVTBzU1VGQlRVUXNSMEZCV1VNc1EwRkJTeXhGUVVGSlFTeEZRVUZOTEZOQlFWTXNSVUZCU1N4TFFVRkxMRlZCUVZWQkxFTkJRVXNzUTBGRE1VWXNSVUZEUVN4RFFVTkpMRk5CUVZWQkxFZEJRVk1zVDBGQlQwRXNSMEZCVlN4VFFVTndReXhSUVVGVExFZEJRMVFzU1VGQlN5d3dRa0ZEVEN4TFFVRk5MSGxFUVVOT0xGRkJRVk5ITEVkQlFVOHNWMEZCVjBFc1EwRkJSeXhGUVVNNVFpeFZRVUZYUml4RlFVTm1MRU5CUTBvc1JVRkRUVTBzUjBGQldTeERRVU5rTEZGQlFWTXNSMEZEVkN4SlFVRkxMRWRCUTB3c1MwRkJUU3hKUVVOT0xGRkJRVkZLTEVWQlFVdExMRVZCUVZNc1EwRkRiRUlzVDBGQlFVRXNSVUZCVVN3eVFrRkJNa0lzUzBGQlN5eFZRVUZWVEN4RFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVOcVJFRXNRMEZEV0N4RFFVTktMRVZCUTAxTkxFZEJRVk1zUTBGQlEwTXNSMEZCUzBNc1JVRkJSeXhGUVVGRkxFOUJRVTlVTEVkQlFXRkxMRVZCUVZNc1JVTjRSSFpFTEVsQlFVMUxMRWRCUVZNc1EwRkRXQ3hUUVVGVlF5eEhRVUZUUVN4aFFVRnBRaXhYUVVOd1F5eFJRVUZUTEVkQlExUXNTVUZCU3l3eVFrRlRUQ3hSUVVGUlF5eEZRVUZMUXl4RlFVRlRMRU5CUTJ4Q0xFZEJRVWtzVDBGQlR5eFJRVUZYTEZkQlEyeENMRTlCUVU4c1QwRkJUeXhMUVVGTFJDeEZRVUZMTEZGQlFWRXNSVUZGTDBJc1IwRkJTU3hQUVVGUExFMUJRVk1zVjBGQldTeERRVVZxUXl4SlFVRk5SU3hGUVVGTkxFdEJRVXRHTEVWQlFVa3NVVUZCVVN4VlFVRlhMRVZCUVVVc1EwRkJReXhGUVVOeVEwY3NSVUZCVXl4SlFVRkpMRmRCUVZkRUxFVkJRVWtzVFVGQlRTeEZRVU40UXl4UlFVRlRSU3hGUVVGSkxFVkJRVWRCTEVWQlFVbEdMRVZCUVVrc1QwRkJVU3hGUVVGRlJTeEZRVU01UWtRc1JVRkJUME1zUTBGQlF5eEZRVUZKUml4RlFVRkpMRmRCUVZkRkxFTkJRVU1zUlVGRGFFTXNUMEZCVDBRc1EwRkRXQ3hMUVVWSkxGRkJRVUZHTEVWQlFWRXNNRVpCUVRCR0xFVkJRek5HUkN4RFFVVm1MRVZCUTBFc1ZVRkJWU3hEUVVGRkxGRkJRVUZMTEVWQlFWTXNTMEZCUVVNc1JVRkJUU3hOUVVGQlVDeERRVUZOTEVWQlFVZFJMRVZCUVV0RExFVkJRVmRETEVWQlFXRXNRMEZETjBRc1NVRkJUVU1zUlVGQlRWZ3NSVUZEVWtjc1JVRkRTaXhIUVVGSkxFOUJRVThzVVVGQlZ5eFhRVU5zUWtFc1JVRkRTVkVzWVVGQlpTeFBRVU5VUVN4RlFVRkpMRk5CUVZNc1VVRkJVU3hGUVVOeVFpeFBRVUZQTEV0QlFVdEJMRVZCUVVrc1RVRkJUU3hGUVVGRkxGTkJRVk1zVVVGQlVTeFZRVVU1UXl4UFFVRlBMRTFCUVZNc1YwRkJXU3hEUVVOcVF5eEpRVUZKUXl4RlFVRkpMRWRCUTFJc1VVRkJVMUFzUlVGQlNTeEZRVUZIUVN4RlFVRkpUU3hGUVVGSkxFOUJRVkVzUlVGQlJVNHNSVUZET1VKUExFZEJRVXNzVDBGQlR5eGhRVUZoUkN4RlFVRkpUaXhEUVVGRExFTkJRVU1zUlVGRGJrTkdMRVZCUVUwc1MwRkJTMU1zUTBGQlF5eERRVU5vUWl4TFFVVkpMRTlCUVUwc1NVRkJTU3hOUVVGTkxEQkdRVUV3Uml4RlFVazVSeXhIUVVaTFRDeEpRVU5FUVN4RlFVRlBUU3hGUVVGUExHVkJRMlJPTEVsQlFWTk5MRVZCUVU4c1lVRkJZeXhEUVVNNVFpeEpRVUZOUXl4RlFVRlpMRXRCUVVzc1NVRkJTVTRzUlVGQlNTeFJRVUZSTEZWQlFWbEJMRVZCUVVrc1QwRkJUeXhQUVVGUlFTeEZRVUZKTEZGQlFWRXNaVUZCWlN4RlFVTXpSazhzUlVGQlNTeExRVUZMTEV0QlFVdGFMRVZCUVVrc1QwRkJVMWNzUTBGQlV5eEZRVU53UTBVc1JVRkJVU3hKUVVGSkxFMUJRVTFFTEVOQlFVTXNSVUZEZWtJc1VVRkJVMVlzUlVGQlNTeEZRVUZIV1N4RlFVRkpMRVZCUVVkYUxFVkJRVWxWTEVWQlFVY3NSVUZCUlZZc1JVRkJSMWtzUjBGQlMwZ3NSVUZEY0VORkxFVkJRVTFZTEVOQlFVTXNSVUZCU1VZc1JVRkJTU3hQUVVGUFl5eEZRVUZIU0N4RFFVRlRMRVZCUlhSRFdDeEZRVUZOWVN4RlFVRk5MRXRCUVV0VUxFbEJRVk5OTEVWQlFVOHNZMEZCWjBJN1FVRkJRU3hGUVVGUExFZEJRVWNzUTBGREwwUXNRMEZEUVN4UFFVRlBTeXhIUVVGblFpeERRVUZGTEZGQlFVRmFMRVZCUVZNc1MwRkJRVU1zUlVGQlRTeE5RVUZQU2l4RFFVRkpMRVZCUVVkTExFVkJRVXRETEVWQlFWZERMRU5CUVZjc1EwRkRja1lzUTBGRFNpeEZRekZFUVN4VFFVRlRVeXhIUVVGaFF5eEZRVUZMUXl4RlFVRlRMRU5CVEhCRExFbEJRVUZETEVWQlRVa3NSMEZCU1VNc1IwRkJUVWdzUTBGQlJ5eEZRVU5VTEZGQlFWTkpMRVZCUVVrc1JVRkJSMEVzUlVGQlNVb3NSVUZCU1N4TlFVRk5MRTlCUVZFc1JVRkJSVWtzUlVGQlJ5eERRVU4yUXl4SlFVRkpReXhGUVVGUFRDeEZRVUZKTEUxQlFVMUpMRU5CUVVNc1JVRkRkRUlzUjBGQlNTeERRVUZCUlN4RlFVRlBSQ3hEUVVGSkxFVkJSVllzU1VGQlNVVXNSMEZCVFVZc1EwRkJTU3hGUVVGSExFTkJRMlJCTEVWQlFVc3NUVUZCVFN4UFFVRlRMRWRCUTNCQ1NpeEZRVUZSTEdkRVFVRm5SQ3hGUVVNMVJDeEpRVUZOVHl4RlFVRlBTQ3hGUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZMTEVsQlFVbEpMRWRCUVVzc1NVRkJTVU1zUlVGQlR5eEpRVUZKTEVOQlFVTXNSVUZMZGtRc1IwRktTVXdzUlVGQlN5eG5Ra0ZEVEVjc1JVRkJTeXhKUVVGSkxHTkJRV2RDUVN4RlFVRkxMRWxCUVVrc1kwRkROVUlzUjBGQlIwZ3NSVUZCU3l4aFFVRmhPMEZCUVVFc1JVRkJTMGNzUlVGQlN5eEpRVUZKTEdGQlFXRXNSMEZEYUVSSUxFVkJRVXNzWlVGRFdFRXNSVUZCU3l4UlFVRlRMRU5CUTJRc1NVRkJUVTBzUjBGQlMxUXNSVUZCUVUwc1JVRkJTeXhSUVVGTUxFdEJRVUZPTEVWQlFXTk5MRVZCUVVzc1NVRkRPVUpITEVWQlFVY3NVVUZCVlVFc1JVRkJSeXhSUVVOV0xFZEJRVWRPTEVWQlFVc3NUMEZCVHp0QlFVRkJMRVZCUVV0TkxFVkJRVWNzVDBGQlR5eEhRVU01UWs0c1JVRkJTeXhQUVVObUxFTkJRMEZCTEVWQlFVOUhMRU5CUTFnc1EwRkRRVklzUlVGQlNTeE5RVUZOU1N4RFFVRkRMRVZCUVVsRkxFVkJRVTlFTEVOQlFVa3NSVUZCU1VFc1JVRkJUeXhKUVVGSlNTeEhRVUZMU2l4RFFVRkpMRVZCUTNSRUxFMUJSMEZLTEVWQlFWRXNhME5CUVd0RExFVkJRemxETEU5QlFVOUVMRU5CUTFnc1EwRkRRU3hUUVVGVFdTeEhRVUZaUXl4RlFVRlJReXhGUVVGVlF5eEZRVUZMTEVOQlEzaERMRWRCUVUwc1EwRkJSU3hUUVVGQlF5eERRVUZUTEVWQlFVbEVMRVZCUTJaRkxFVkJRVkVzU1VGQlNVTXNSMEZCVVV3c1EwRkJUU3hGUVVOb1Ewa3NSVUZCVFN4SlFVRk5MREJDUVVOYUxFbEJRVWtzUlVGQlNTeEZRVU5TTEVkQlFVbElMRWRCUVZrc1QwRkJUeXhaUVVGWkxFOUJRVTlCTEVOQlFWRXNSVUZET1VNc1VVRkJVMHNzUzBGQlRVd3NSVUZCVlN4RFFVTnFRaXhQUVVGUFJTeEhRVUZoTEdGQlEzQkNSeXhGUVVGTFNDeEZRVUZUTEV0QlFVdEdMRVZCUVZVc1QwRkJUeXhIUVVGSExFVkJRVWRMTEVOQlFVVXNSMEZEYUVRc1NVRkJTVU1zUlVGQlMwTXNSVUZEVkN4SFFVRkpMRTFCUVUwc1VVRkJVVVlzUTBGQlJTeEZRVU5vUWl4SFFVRkpRU3hGUVVGSExGTkJRVmNzUlVGRFpFTXNSVUZCVFVRc1JVRkJSeXhEUVVGRExFVkJRMVpGTEVWQlFWRkdMRVZCUVVjc1EwRkJReXhOUVVkYUxFOUJRVTBzU1VGQlNTeFZRVUZWTEdkRFFVRm5RMEVzUTBGQlJTeEZRVUZGTEZWQlJYWkVRU3hIUVVGTlFTeGhRVUZqTEU5QlFWRXNRMEZEYWtNc1NVRkJUVWNzUlVGQlR5eFBRVUZQTEV0QlFVdElMRU5CUVVVc1JVRkRNMElzUjBGQlNVY3NSVUZCU3l4VFFVRlhMRVZCUTJoQ1JpeEZRVUZOUlN4RlFVRkxMRU5CUVVNc1JVRkRXa1FzUlVGQlVVWXNSVUZCUjBNc1EwRkJSeXhOUVVka0xFOUJRVTBzU1VGQlNTeFZRVUZWTEc5RFFVRnZRMFVzUlVGQlN5eE5RVUZOTEU5QlFVOHNRMEZGYkVZc1RVRkZTVVlzUlVGQlRVUXNSVUZGVmtZc1JVRkJUU3hOUVVGTkxFdEJRVXROTEVkQlFWZElMRVZCUVV0RExFVkJRVTlPTEVOQlFVY3NRMEZCUXl4RFFVTm9SQ3hEUVVOS0xFOUJRVTlGTEVOQlExZ3NRMEZEUVN4SlFVRk5RU3hIUVVGUkxFTkJRMVlzVjBGQldTeE5RVU5hTEZGQlFWTXNSMEZEVkN4SlFVRkxMREJDUVVOTUxGRkJRVk5zUWl4SFFVTlVMRmRCUVZsaExFVkJRMmhDTEVWRGNrVkJMRWxCUVUxWkxFZEJRVTRzVFVGQlRVTXNWVUZCYVVKRExFVkJRVkVzUTBGRE0wSXNZVUZCWXl4RFFVTldMRTFCUVUwc1JVRkRUaXhMUVVGTExFbEJRVTFETEVkQlFWRXNWVUZCVlN4SlFVRkpMRXRCUVVzc1NVRkJTU3hGUVVNeFF5eExRVUZMTEU5QlFWTkJMRWRCUVZFc1ZVRkJWU3hQUVVGUExFdEJRVXNzU1VGQlNTeEZRVU5vUkN4TFFVRkxMRWxCUVUxQkxFZEJRVkVzVlVGQlZTeEpRVUZKTEV0QlFVc3NTVUZCU1N4RlFVTXhReXhMUVVGTExFbEJRVTFCTEVkQlFWRXNWVUZCVlN4SlFVRkpMRXRCUVVzc1NVRkJTU3hGUVVNeFF5eExRVUZMTEVsQlFVMUJMRWRCUVZFc1ZVRkJWU3hKUVVGSkxFdEJRVXNzU1VGQlNTeEZRVU14UXl4TFFVRkxMRWxCUVUxR0xFVkJRVk1zUjBGRGVFSXNRMEZMUVN4UFFVRlBSeXhGUVVGSFF5eEZRVUZMTEVOQlExZ3NSMEZCU1N4RFFVRkRRU3hGUVVORUxFOUJRVThzVFVGQlRTeFBRVUZQUkN4RFFVRkRMRVZCUTNwQ0xFbEJRVTFGTEVWQlFVMHNTVUZCU1N4SlFVTmFSQ3hIUVVGQkxFMUJRVUZCTEVWQlFVc3NWVUZEVEVFc1JVRkJTU3hUUVVGVFF5eERRVUZITEVWQlEzQkNMRkZCUVZkRExFdEJRVkVzUzBGQlN5eE5RVUZQTEVOQlF6TkNMRWxCUVVsRExFVkJRVXRETEVWQlVWUXNSMEZRU1VNc1JVRkJUMGdzUTBGQlNTeEhRVU5ZUXl4RlFVRk5SeXhIUVVGTFNpeEZRVUZMTEVsQlFVc3NSMEZCU1VZc1EwRkJSeXhGUVVNMVFra3NSVUZCVVVVc1IwRkJTMG9zUlVGQlN5eE5RVUZQUXl4RlFVRkxTQ3hEUVVGSExFZEJSMnBEUnl4RlFVRk5SeXhIUVVGTFNpeEZRVUZOTEVkQlFVbEdMRU5CUVVjc1JVRkZlRUpETEVWQlFVa3NTVUZCU1VVc1EwRkJSeXhGUVVOWUxFMUJRVTBzU1VGQlNTeE5RVUZOTERoRFFVRTRReXhGUVVOc1JVWXNSVUZCU1N4SlFVRkpSU3hGUVVGTFF5eERRVUZMTEVOQlEzUkNMRU5CUTBFc1QwRkJUMGdzUTBGRFdDeERRVU5CTEU5QlFVOHNTMEZCUzAwc1JVRkJVVU1zUlVGQlZWSXNSVUZCU3l4RFFVTXZRaXhKUVVGTlV5eEZRVUZSUXl4SFFVRlpTQ3hGUVVGUlF5eEZRVUZWVWl4RFFVRkhMRVZCUTNwRFZ5eEZRVUZQTEVsQlFVa3NTMEZEYWtJc1QwRkJRVUVzUlVGQlN5eE5RVUZSUml4RlFVRk5MRTFCUTFwRkxFTkJRMWdzUTBGRFNpeEZRVU5CYUVJc1IwRkJVeXhKUVVGTkxIbENRVU5tTEVsQlFVMW5RaXhIUVVGUExFTkJRMVFzVjBGQldTeE5RVU5hTEZOQlFWVlFMRWRCUVZOQkxHRkJRV2xDTEVsQlEzQkRMRlZCUVZkVUxFZEJRMWdzVVVGQlV5eEhRVU5VTEVsQlFVc3NlVUpCUTB3c1VVRkJVV2xDTEVWQlFVdERMRVZCUVZNc1EwRkRiRUlzU1VGQlRVb3NSVUZCVVVzc1IwRkJZVVlzUlVGQlMwTXNRMEZCVHl4RlFVTnFRMFVzUlVGQlZ5eERRVUZETEVWQlEyeENMRTlCUVZjc1EwRkJSU3hKUVVGQldpeERRVUZKTEVsQlFVdE5MRVZCUVUwc1RVRkRjRUpQTEVWQlFWTmlMRU5CUVVjc1NVRkRVbGtzUlVGQlV5eFRRVUZUV2l4RlFVRkpMRXRCUVVzc1JVRkRNMEpWTEVWQlFWRXNhVVJCUVdsRVZpeEZRVUZKTEV0QlFVc3NSVUZCUlN4RlFVZHdSVmtzUlVGQlV5eExRVUZMV2l4RlFVRkpMRXRCUVVzc1IwRkpia01zVDBGQlR5eFBRVUZQTEU5QlFVOHNTVUZCU1ZJc1IwRkJXV01zUTBGQlN5eERRVU01UXl4RlFVTkJMRmRCUVZrc1EwRkJRMFlzUlVGQlVVTXNSVUZCVlZJc1NVRkJVVXdzUjBGQlV5eExRVUZMV1N4RlFVRlJReXhGUVVGVlVpeERRVUZITEVOQlF6bEZMRVZEY2tWQkxGTkJRVk5wUWl4SFFVRmpMRU5CUVVVc1RVRkJRVU1zUlVGQlR5eFBRVUZCUXl4RFFVRlBMRVZCUVVkRExFVkJRVXNzUTBGRk0wTXNUMEZCU1VRc1NVRkVXVVFzUlVGQlVVY3NSMEZCVlVNc1NVRkRXaXhMUVVGTExFdEJRVXRJTEVOQlFVMHNSVUZETTBKQkxFVkJRMHBFTEVWQlFWRkZMRVZCUVVrc1VVRkJVU3hSUVVGVlFTeEZRVUZKTEZGQlFWRXNVVUZEY2tRc1EwRkRRU3hKUVVGTlF5eEhRVUZWTEVOQlExb3NVMEZCVlVnc1IwRkJVMEVzU1VGQlZTeEhRVU0zUWl4UlFVRlRMRWRCUTFRc1NVRkJTeXg1UWtGRFRDeExRVUZOTERaRFFVTk9MRkZCUVZNc1NVRkJUU3hKUVVGSlN5eEZRVUZQTEVWQlFVa3NSVUZET1VJc1ZVRkJWMDRzUlVGRFppeEZRVU5OU3l4SFFVRlhMRU5CUTJJc1UwRkJWVW9zUjBGQlUwRXNTVUZCVlN4SFFVTTNRaXhSUVVGVExFZEJRMVFzU1VGQlN5eDVRa0ZEVEN4TFFVRk5MQ3REUVVOT0xGRkJRVk1zU1VGQlRTeEpRVUZKU3l4RlFVRlBMRVZCUVVzc1JVRkRMMElzVlVGQlYwNHNSVUZEWml4RlEzQkNRU3hKUVVGTlR5eEhRVUZYTEVOQlEySXNVMEZCVlVNc1IwRkJVeXhQUVVGUFFTeEhRVUZWTEZOQlEzQkRMRkZCUVZNc1IwRkRWQ3hKUVVGTExEQkNRVU5NTEV0QlFVMHNhVVJCUTA0c1VVRkJWVU1zUjBGQlVVRXNSVUZCU1N4TlFVRk5MRVZCUVVVc1JVRkJSU3haUVVGWkxFbEJRVTBzVFVGRE5VTXNTVUZEUVVFc1JVRkJTU3hEUVVGRExFbEJRVTBzU1VGRFVDeFBRVUZQTEd0Q1FVTlFMRTlCUVU4c2EwSkJRMnBDTEZWQlFWZERMRVZCUTJZc1JVRkRUVU1zUjBGQlZ5eERRVU5pTEZOQlFWVklMRWRCUVZNc1QwRkJUMEVzUjBGQlZTeFRRVU53UXl4UlFVRlRMRWRCUTFRc1NVRkJTeXd3UWtGRFRDeFBRVUZSTEUxQlExSXNTMEZCVFN4M1JFRkRUaXhSUVVGVlF5eEhRVUZSTEZkQlFWZEJMRVZCUVVrc1VVRkJVU3hMUVVGTkxFVkJRVVVzUTBGQlF5eEZRVU5zUkN4VlFVRlZSeXhGUVVGTkxFTkJRMW9zU1VGQlRVTXNSVUZCVFN4UFFVRlBSQ3hGUVVGTExFdEJRVXNzUlVGRE4wSXNUMEZCVHl4VFFVRlRReXhEUVVGSExFVkJRVWxCTEVWQlFVa3NZMEZCWXl4RlFVRkpTQ3hIUVVGblFrVXNRMEZCU1N4RFFVTnlSU3hEUVVOS0xFVkJRMDFGTEVkQlFWRXNRMEZEVml4VFFVRlZUaXhIUVVGVExFOUJRVTlCTEVkQlFWVXNVMEZEY0VNc1VVRkJVeXhIUVVOVUxFbEJRVXNzTUVKQlEwd3NTMEZCVFN4dlEwRkRUaXhSUVVGUlF5eEZRVUZMTEVOQlExUXNTVUZCVFVjc1JVRkJUeXhKUVVGSlJ5eEZRVUZQTEZkQlFWZE9MRVZCUVVrc1VVRkJVU3hMUVVGTkxFVkJRVVVzUTBGQlF5eERRVUZETEVWQlEyNUVUeXhGUVVGTlVDeEZRVUZKTEZGQlFWRXNSMEZCUnl4RlFVTXpRaXhIUVVGSlR5eEpRVUZSTEVkQlFVa3NRMEZEV2l4SlFVRk5ReXhGUVVGSlVpeEZRVUZKTEZWQlFWVlBMRVZCUVUwc1EwRkJReXhGUVVGRkxGRkJRVkVzUzBGQlRTeEZRVUZGTEVWQlF6ZERReXhGUVVGRlFTeEZRVUZGTEU5QlFWTXNRMEZCUXl4SlFVRk5MRTFCUTNCQ1RDeEZRVUZMTEd0Q1FVRnZRa3NzUlVGQlJTeFBRVU51UXl4RFFVTkJMRTlCUVU5TUxFTkJRMWdzUlVGRFFTeFZRVUZYUml4RlFVTm1MRVZEZWtOQkxFbEJRVTFSTEVkQlFXVkRMRWRCUVZVc1QwRkJUMEVzUjBGQlZTeFZRVUZaTEU5QlFVOHNWVUZCVlVFc1EwRkJTeXhGUVVOc1JpeFRRVUZUUXl4SFFVRlhReXhGUVVGTFF5eEZRVUZSUXl4RlFVRlBMRU5CUVVVc1dVRkJRVU1zUTBGQldTeEZRVUZITEVOQlEzSkVMRWxCUVUxRExFVkJRVTlLTEVWQlFVa3NRMEZCUXl4RlFVbHNRaXhKUVVoSlNTeEpRVUZUTEV0QlFVOUJMRWxCUVZNc1QwRkRla0pJTEVkQlFWVXNSMEZEWkVRc1JVRkJUVUVzUlVGQlNTeFZRVUZWUXl4RFFVRk5MRVZCUVVVc1VVRkJVU3hMUVVGTkxFVkJRVVVzUlVGRGVFTkZMRVZCUVdFc1EwRkRZaXhQUVVGUlJDeEZRVUZQTEVOQlExZ3NTVUZCU3l4SFFVTkVSaXhGUVVGTkxFdEJRVXRCTEVOQlFVY3NSMEZEWkN4TlFVTktMRWxCUVVzc1IwRkRSRUVzUlVGQlRTeExRVUZMUVN4RFFVRkhMRWRCUTJRc1RVRkRTaXhKUVVGTExFbEJRMFJCTEVWQlFVMHNTMEZCUzBFc1EwRkJSeXhIUVVOa0xFdEJRMUlzUTBGRFFTeEpRVUZOU3l4RlFVRkpMRTlCUVU5TUxFTkJRVWNzUlVGRGNFSXNUMEZCVDBrc1NVRkJVeXhKUVVGTkxFOUJRVThzUlVGQlJTeEZRVUZKUXl4RlFVRkpRU3hEUVVNelF5eERRVU5CTEVsQlFVMUJMRVZCUVVrc1UwRkJVMHdzUlVGQlMwVXNRMEZCU3l4RlFVTTNRaXhQUVVGUFJTeEpRVUZUTEVsQlFVMHNSMEZCUzBNc1JVRkJTVUVzUTBGRGJrTXNRMEZEUVN4VFFVRlRReXhIUVVGaFF5eEZRVUZOVEN4RlFVRlBUU3hGUVVGUkxFTkJRM1pETEVkQlFVMHNRMEZCUlN4TlFVRkJWaXhEUVVGTkxFVkJRVWxUTEVWQlEyeENMRWRCUVVsV0xFZEJRVmxETEVOQlFVc3NSVUZCUnl4RFFVTndRaXhKUVVGTlJTeEZRVUZOUml4RlFVRk5MRk5CUVZOSkxFTkJRVXNzUlVGRGFFTXNUMEZCVDBvc1JVRkJVU3hGUVVGSkxFbEJRVTFWTEVWQlFWTlNMRVZCUVVrc1QwRkJUeXhEUVVGRExFVkJRVWxSTEVWQlFWTlNMRU5CUXk5RUxFTkJRMEVzVDBGQlQxTXNSMEZCWjBKR0xFTkJRVWtzUTBGREwwSXNRMEZEUVN4SlFVRk5SeXhIUVVGVExFTkJRMWdzVTBGQlZXSXNSMEZEVml4UlFVRlRMRWRCUTFRc1NVRkJTeXgzUWtGRFRDeFBRVUZSTEUxQlExSXNTMEZCVFN4dFFrRkRUaXhSUVVGVExFTkJRVU5ITEVWQlFVdFhMRVZCUVZWRExFbEJRVkZpTEVkQlFWZERMRVZCUVVzc1JVRkJSeXhGUVVGSFdTeERRVUZITEVWQlF6RkVMRlZCUVZkTUxFZEJRVkZFTEVkQlFXRkRMRVZCUVUwc1JVRkJSeXhKUVVGSkxFTkJRMnBFTEVWQlEwMU5MRWRCUVZNc1EwRkRXQ3hUUVVGVmFFSXNSMEZEVml4UlFVRlRMRWRCUTFRc1NVRkJTeXgzUWtGRFRDeFBRVUZSTEUxQlExSXNTMEZCVFN4clFrRkRUaXhSUVVGVExFTkJRVU5ITEVWQlFVdFhMRVZCUVZWRExFbEJRVkZpTEVkQlFWZERMRVZCUVVzc1JVRkJSeXhGUVVGSFdTeERRVUZITEVWQlF6RkVMRlZCUVZkTUxFZEJRVkZFTEVkQlFXRkRMRVZCUVUwc1JVRkJSeXhIUVVGSExFTkJRMmhFTEVWQlEwMVBMRWRCUVUwc1EwRkRVaXhUUVVGVmFrSXNSMEZEVml4UlFVRlRMRWRCUTFRc1NVRkJTeXgzUWtGRFRDeExRVUZOTEhOQ1FVTk9MRkZCUVZNc1EwRkJRMGNzUlVGQlMxY3NSVUZCVlVNc1NVRkJVV0lzUjBGQlYwTXNSVUZCU3l4RlFVRkhMRWRCUVVsWkxFTkJRVWNzUlVGRE0wUXNWVUZCVjBnc1JVRkRaaXhGUVVOTlRTeEhRVUZUTEVOQlExZ3NVMEZCVld4Q0xFZEJRMVlzVVVGQlV5eEhRVU5VTEVsQlFVc3NkMEpCUTB3c1QwRkJVU3hOUVVOU0xFdEJRVTBzZVVKQlEwNHNVVUZCVXl4RFFVRkRSeXhGUVVGTFZ5eEZRVUZWUXl4SlFVRlJZaXhIUVVGWFF5eEZRVUZMTEVWQlFVY3NSMEZCU1Zrc1EwRkJSeXhGUVVNelJDeFZRVUZYVEN4SFFVRlJSQ3hIUVVGaFF5eEZRVUZOTEVkQlFVa3NTVUZCU1N4RFFVTnNSQ3hGUTJoRlFTeEpRVUZOVXl4SFFVRk9MRTFCUVUxRExGVkJRV2RDUXl4RlFVRlJMRU5CUXpGQ0xGbEJRVmxETEVWQlFWRXNRMEZEYUVJc1RVRkJUVUVzUTBGQlRTeEZRVU5hTEV0QlFVc3NTVUZCVFVZc1JVRkJVU3hIUVVOMlFpeERRVU5CTEVsQlFVbEhMRVZCUVVzc1EwRkRUQ3hKUVVGSlF5eEZRVU5CUXl4RlFVRlBSaXhEUVVGSExFVkJRMVpETEVWQlFVOUVMRVZCUTBaQkxFZEJRMHdzVDBGQlQwRXNSMEZCVVN4VlFVTm1MRkZCUVZOQkxFZEJRMVFzVlVGQlYwRXNSMEZEV0VFc1JVRkJTU3hSUVVGVkxFdEJRMlJETEVWQlFVOHNTVUZCU1VVc1IwRkJTMGdzUlVGQlNTeEpRVUZMTEVsQlFVa3NSVUZGTjBKRExFVkJRVThzU1VGQlNVVXNSMEZCUzBnc1JVRkJTeXhKUVVGSkxFVkJRMmhDU1N4SFFVRlRMRXRCUVVzc1RVRkJUMGdzUlVGQlN5eEhRVUZITEVkQlJYUkRMRXRCUVVzc1RVRkJUU3hMUVVGTFFTeERRVUZKTEVOQlF6VkNMRU5CUzBFc1NVRkJTVVFzUlVGQlMwc3NSVUZCVlN4RFFVTm1MRWxCUVUxS0xFVkJRVTlITEVkQlFWTXNTMEZCU3l4TlFVRlBTaXhEUVVGSExFVkJRM0pETEUxQlFVOHNRMEZCUTBzc1IwRkJXVWdzUlVGQlQwUXNRMEZCU1N4RlFVTjZRa3NzUlVGQlUwd3NSVUZCU3l4SFFVRkhMRVZCUTJKQkxFVkJRVXNzU1VGQlNTeE5RVU5VUVN4RlFVRkxMRWxCUTFSQkxFTkJRMVlzUTBGRFFTeEpRVUZKUkN4RlFVRkxUeXhGUVVGUExFTkJRMW9zUjBGQlNTeFBRVUZQUVN4SFFVRlZMRlZCUTJwQ0xFMUJRVTBzU1VGQlNTeE5RVUZOTEdsRlFVRnBSU3hQUVVGUFFTeERRVUZMTEVWQlFVVXNSVUZEYmtjc1NVRkJUVU1zUlVGQlQwb3NSMEZCVXl4TFFVRkxMRTFCUVU5S0xFTkJRVWNzUlVGRGFrTlJMRWRCUVZFc1EwRkJRMFFzUlVGRFZDeExRVUZMTEUxQlFVMHNUMEZCVHl4TFFVRkxMRTFCUVUwc1VVRkJVVU1zUTBGQlNTeEZRVUZITEVOQlFVTXNSVUZGZUVNc1EwRkJRMEVzUjBGQlVVUXNSMEZEWkN4TFFVRkxMRTFCUVUwc1MwRkJTeXhKUVVGSlNpeEhRVUZMU0N4RFFVRkhMRU5CUVVNc1EwRkZja01zUTBGRFFTeFBRVUZQVXl4RlFVRkhReXhGUVVGTExFTkJRMWdzVDBGQlR5eE5RVUZOTEU5QlFVOUVMRVZCUVVkRExFVkJRVXNzUjBGQlJ5eERRVU51UXl4RFFVTkJMRk5CUVZOQkxFVkJRVXRETEVWQlFWZERMRVZCUVdFc1EwRkRiRU1zUjBGQlNTeERRVUZEUml4RlFVTkVMRTlCUVU4c1MwRkJTeXhWUVVGVkxFbEJRVWtzUlVGRE9VSXNSMEZCU1N4TFFVRkxMR2xDUVVGcFFpeEZRVUZKTEVWQlF6RkNMRTlCUVU4c1RVRkJUU3hUUVVGVExFOUJRVThzVDBGQlR5eERRVUZETEVWQlFVZEJMRVZCUVVzc1EwRkJSU3hqUVVGbExFVkJRVXNzUTBGQlF5eEZRVUZIUXl4RlFVRlhReXhEUVVGWExFVkJSVGRHTEUxQlFVMHNTVUZCU1N4TlFVRk5MSEZEUVVGeFF5eERRVU0zUkN4RFFVTkJMRTlCUVU4c1MwRkJTMklzUlVGQlVXTXNSVUZCVlVnc1JVRkJTeXhEUVVNdlFpeEhRVUZOTEVOQlFVVXNVMEZCUVVrc1EwRkJVeXhGUVVGSlNpeEZRVU5tU3l4RlFVRk5MRWxCUVVrc1MwRkJTMmhDTEVOQlFVMHNSVUZETTBJc1IwRkJTV01zUjBGQldTeFBRVUZQTEZsQlFWa3NUMEZCVDBFc1EwRkJVU3hGUVVNNVF5eFJRVUZUVGl4TFFVRlRUU3hGUVVOV0xFOUJRVTlETEVkQlFXRXNZVUZEY0VKUUxFVkJRVkZQTEVWQlFWTXNTMEZCUzBRc1JVRkJWVTRzUlVGQlQwRXNRMEZCU3l4SFFVTm9SRkVzUlVGQlNTeE5RVUZOTEV0QlFVdERMRWRCUVZkVUxFVkJRVThzUzBGQlRVY3NRMEZCUnl4RFFVRkRMRVZCUlc1RUxFOUJRVTlMTEVOQlExZ3NRMEZEU2l4RlFVTkJia0lzUjBGQlVTeEpRVUZOTEhkQ1FVTmtMRWxCUVUxdFFpeEhRVUZOTEVOQlExSXNWMEZCV1N4TlFVTmFMRk5CUVZWU0xFZEJRVk5CTEdGQlFXbENMRWxCUTNCRExGVkJRVmRZTEVkQlExZ3NVVUZCVXl4SFFVTlVMRWxCUVVzc2QwSkJRMHdzVjBGQldTeERRVUZEUnl4RlFVRlJZeXhGUVVGVlNDeEpRVUZSWkN4SFFVRlJMRXRCUVV0SExFVkJRVkZqTEVWQlFWVklMRU5CUVVjc1JVRkRla1VzVVVGQlVVOHNSVUZCUzBNc1JVRkJVeXhEUVVOc1FpeEhRVUZKUXl4SFFVRk5SaXhEUVVGSExFVkJRVWNzUTBGRFdpeEhRVUZKUVN4RlFVRkpMR2xDUVVGcFFpeEZRVUZKTEVWQlEzcENMRTlCUVU4c1QwRkJUeXhQUVVGUExFbEJRVWx5UWl4SFFVRlhjVUlzUTBGQlJ5eEZRVVYyUTBNc1JVRkJVU3h4UTBGQmNVTXNRMEZEY2tRc1RVRkZTVUVzUlVGQlVTeHBRMEZCYVVNc1JVRkROME1zVDBGQlQwUXNRMEZEV0N4RFFVTktMRVZEZGtaQkxGTkJRVk5ITEVkQlFXbENReXhGUVVGTFF5eEZRVUZWTEVOQlEzSkRMRWxCUVUxRExFVkJRVTlHTEVWQlFVa3NRMEZCUXl4RlFVTmFSeXhGUVVGUlJDeEpRVUZUTEV0QlFVOUJMRWxCUVZNc1NVRkJUVVlzUlVGQlNTeFZRVUZWTEVOQlFVTXNSVUZCU1VFc1JVRkRNVVJKTEVWQlFVOURMRWRCUVUxS0xFVkJRVmNzVDBGQlQwa3NRMEZCUXl4RlFVRkpMRTlCUVU5QkxFTkJRVU1zUlVGRE5VTkRMRVZCUVUxSUxFVkJRMUFzVVVGQlVTeExRVUZOTEVWQlFVVXNSVUZEYUVJc1RVRkJUU3hIUVVGSExFVkJRMVFzVDBGQlR5eERRVUZEUnl4RlFVRkxReXhKUVVGTlJDeEZRVUZOUml4RlFVRkpMRVZCUVVVc1JVRkJTVUVzUlVGQlNVY3NRMEZCUXl4RlFVRkhTQ3hGUVVGSkxFTkJRVU1zUTBGQlF5eEZRVU4wUkN4UFFVRlJSaXhKUVVGVExFbEJRVTFGTEVWQlFVa3NSVUZCUlN4RlFVRkpSU3hGUVVGTlFTeERRVU16UXl4RFFVMUJMRk5CUVZORkxFZEJRWEZDUXl4RlFVRk5MRU5CUTJoRExFZEJRVWtzUTBGQlJTeE5RVUZCUXl4RFFVRk5MRVZCUVVsRUxFVkJRMXBNTEVWQlFVOURMRWRCUVUxQkxFVkJRMnBDTEVkQlFVa3NUMEZCVDBzc1IwRkJWU3hUUVVOcVFrNHNSVUZCVFVNc1IwRkJTeXhQUVVGUFFTeERRVUZETEZWQlEyUXNUVUZCVFVzc1EwRkJTeXhIUVVGTExFTkJRVU1zVTBGQlUwRXNRMEZCU3l4RlFVTndReXhQUVVGUFF5eEhRVUZuUWtZc1EwRkJTU3hGUVVNdlFpeEpRVUZKVUN4RlFVRlBMRWRCUTFCUkxFVkJRVkVzU1VGRFVsSXNSVUZCVHl4SlFVTlFVU3hIUVVGVFRpeEZRVUZKTEVWQlFVVXNSMEZGYmtJc1NVRkJUVkVzUlVGQlRWSXNSVUZCU1N4RlFVRkZMRVZCUTFwRUxFVkJRVkVzUTBGQlEwOHNSVUZCVVVVc1EwRkJSeXhGUVVNeFFpeFBRVUZKUml4RlFVRlJMRWRCUTFKUUxFVkJRVTBzVVVGQlVTeERRVUZETEVkQlIyWlBMRWRCUVZOQkxFVkJRVkZRTEVWQlFVMHNRMEZCUXl4SFFVRkxVeXhGUVVNM1FsUXNSVUZCVFN4UlFVRlJUeXhGUVVGUlJTeERRVUZITEVWQlEzSkNSaXhIUVVGVExFdEJRMVJCTEVkQlFWTkJMRVZCUVZGUUxFVkJRVTBzUTBGQlF5eEhRVUZMVXl4RlFVTTNRbFFzUlVGQlRTeFJRVUZSVHl4RFFVRkxMRWxCUjI1Q1VpeEZRVU5LUXl4RlFVTkxMRWxCUVVsRkxFZEJRVXNzVDBGQlQwRXNRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSeXhIUVVGSExFTkJRVU1zUlVGRGJrTXNTMEZCU3l4SFFVRkhMRVZCUTFJc1VVRkJVU3hoUVVGakxFVkJRVVVzUTBGRmNrTXNRMEZEUVN4SlFVRk5VU3hIUVVGVkxFTkJRMW9zVTBGQlZVZ3NSMEZCVXl4UFFVRlBRU3hIUVVGVkxGVkJRVmtzVDBGQlR5eFZRVUZWUVN4RFFVRkxMRVZCUTNSRkxGRkJRVk1zUjBGRFZDeEpRVUZMTEhkQ1FVTk1MRTlCUVZFc1QwRkRVaXhMUVVGTkxIVkRRVU5PTEZGQlFWTXNRMEZCUTFZc1JVRkJTMk1zUlVGQlZTeERRVUZGTEZsQlFVRkRMRU5CUVZrc1NVRkJUV2hDTEVkQlFXbENReXhGUVVGTFpTeERRVUZYTEVWQlF6bEZMRlZCUVZkUUxFVkJRMllzUlVGRFRWRXNSMEZCV1N4RFFVTmtMRk5CUVZWT0xFZEJRVk1zVDBGQlQwRXNSMEZCVlN4VFFVTndReXhSUVVGVExFZEJRMVFzU1VGQlN5d3dRa0ZEVEN4UFFVRlJMRTlCUTFJc1MwRkJUU3huUkVGRFRpeFJRVUZUVml4SFFVRlBSQ3hIUVVGcFFrTXNSVUZCU3l4RlFVRkxMRVZCUXpORExGVkJRVmRSTEVWQlEyWXNSVUZEVFZNc1IwRkJXU3hEUVVOa0xGTkJRVlZRTEVkQlFWTkJMR0ZCUVdsQ0xFdEJRM0JETEZGQlFWTXNSMEZEVkN4SlFVRkxMRGhDUVVsTUxFdEJRVTBzVDBGQlR5d3lTa0ZMU2l4RlFVTlVMRkZCUVZGV0xFVkJRVXNzUTBGRFZDeEpRVUZOYTBJc1JVRkJVV3hDTEVWQlFVa3NUVUZCVFdsQ0xFZEJRVlVzU1VGQlNTeEZRVU4wUXl4SFFVRkpMRU5CUVVORExFVkJRMFFzVFVGQlRTeEpRVUZKTEUxQlFVMHNjMFJCUVhORUxFVkJRekZGTEVkQlFVMHNRMEZCUXl4RFFVRkZReXhGUVVGTlF5eEZRVUZQUXl4RlFVRkxReXhGUVVGTlF5eEZRVUZSUXl4RFFVRk5MRVZCUVVsT0xFVkJRVTBzU1VGQlNTeE5RVUZOTEVWQlF6ZEVUeXhGUVVGWFVDeEZRVUZOTEVOQlFVTXNSVUZCU1N4UlFVRlJRU3hGUVVGTkxFTkJRVU1zUlVGQlNTeE5RVUZOTEU5QlFVOHNSVUZCUnl4RFFVRkRMRU5CUVVNc1JVRkJTU3hGUVVOcVJWRXNSVUZCVHl4TFFVRkxMRWxCUVVsUUxFVkJRVTFETEVWQlFWRXNSVUZCUjBNc1JVRkJTME1zUjBGQlVTeEZRVUZIUXl4SFFVRlZMRVZCUVVkRExFZEJRVlVzUlVGQlIwTXNRMEZCVVN4RlFVTnFSa1VzUlVGQlMxUXNSVUZCVFN4RFFVRkRMRVZCUTJ4Q0xFZEJRVWxUTEVkQlFVMUJMRWxCUVU4c1NVRkJTeXhEUVVOc1FpeEpRVUZKTEVWQlFVazFRaXhIUVVGcFFqUkNMRVZCUVVrc1JVRkJTeXhGUVVNNVFpeExRVUZMTEVsQlFVa3NRMEZCUXl4RlFVRkpMRXRCUTJRc1IwRkJTeXhKUVVOVVJDeEhRVUZSTEVsQlFWRXNRMEZEY0VJc1EwRkRRU3hQUVVGUExFbEJRVWtzUzBGQlMwRXNRMEZCU1N4RFFVTjRRaXhGUVVOQkxGVkJRVmNzUTBGQlF5eERRVUZGTEUxQlFVRm9RaXhEUVVGTkxFbEJRVTFCTEVWQlFVMHNXVUZCV1N4RlFVRkZMRkZCUVZFc2VVSkJRVEJDTEVWQlFVVXNRMEZEZEVZc1JVTndSa0VzU1VGQlRXdENMRWRCUVZNc1EwRkRXRU1zUjBGRFFVTXNSMEZEUVVNc1IwRkRRVU1zUjBGRFFVTXNSMEZEUVVNc1IwRkRRVU1zUjBGRFFVTXNSMEZEUVVNc1IwRkRRVU1zUjBGRFFVTXNSMEZEUVVNc1IwRkRRVU1zUjBGRFFVTXNSMEZEUVVNc1IwRkRRVU1zUjBGRFFVTXNSMEZEUVVNc1IwRkRRVU1zUjBGRFFVTXNSMEZEUVVNc1JVRkRTaXhGUTI1Q1FTeEpRVUZOUXl4SFFVRlZMRWxCUVVrc1NVRkJTU3hEUVVOd1FpeERRVUZETEU5QlFWRkRMRVZCUVUwc1JVRkRaaXhEUVVGRExGZEJRVmtzUTBGQlEwTXNSMEZCUzBNc1IwRkJTME1zUlVGQlRTeERRVUZETEVWQlF5OUNMRU5CUVVNc1QwRkJVVWdzUlVGQlVTeEZRVU5xUWl4RFFVRkRMRk5CUVZWQkxFVkJRVkVzUlVGRGJrSXNRMEZCUXl4WFFVRlpRU3hGUVVGUkxFTkJRM3BDTEVOQlFVTXNSVUZEUzBrc1IwRkJZU3hEUVVObUxFOUJRVUZETEVkQlEwRXNTMEZCVFVNc1IwRkRUaXhOUVVGQlF5eEhRVU5CTEZOQlFVRkRMRWRCUTBFc1UwRkJRVU1zUjBGRFFTeFZRVUZCUXl4SFFVTkJMRWxCUVVGRExFZEJRMEVzVDBGQlFVTXNSMEZEUVN4UFFVRkJReXhIUVVOQkxGRkJRVUZETEVkQlEwRXNTVUZCUVdJc1IwRkRRU3hOUVVGQll5eEhRVU5CTEV0QlFVMURMRWRCUTA0c1MwRkJRVU1zUjBGRFFTeE5RVUZCUXl4SFFVTkJMRWxCUVVGb1FpeEhRVU5CTEVsQlFVRnBRaXhIUVVOQkxGVkJRVUZETEVWQlEwb3NSVUZEVFVNc1IwRkJaMElzUTBGRGJFSXNNa0pCUVRSQ2FFSXNSMEZETlVJc01FSkJRVEpDVlN4SFFVTXpRaXg1UWtGQk1FSkZMRWRCUXpGQ0xEQkNRVUV5UWtNc1IwRkRNMElzZDBKQlFYbENReXhIUVVONlFpdzRRa0ZCSzBKRExFVkJRMjVETEVWQlEwRXNVMEZCVTBVc1IwRkJVVU1zUlVGQldVTXNSVUZCV1VNc1JVRkJZU3hEUVVOc1JDeEpRVUZOUXl4RlFVRmhNMElzUjBGQlVTeEpRVUZKZVVJc1EwRkJWU3hGUVVONlF5eEhRVUZKUlN4SFFVRmpMRU5CUVVOSUxFVkJRMllzVDBGQlQwVXNSMEZCWlN4RFFVRkRReXhGUVVGWExGTkJRVk5ZTEVWQlFVc3NSVUZETVVOWExFVkJRVmNzVDBGQlQxZ3NSVUZCU3l4RlFVTjJRbGNzUlVGQlZ5eE5RVUZOTEVWQlJUTkNMRWxCUVVsRExFVkJRVTlFTEVWQlExZ3NSMEZCU1N4RFFVRkRReXhGUVVORUxFZEJRVWtzVFVGQlRTeFJRVUZSU2l4RFFVRlZMRVZCUTNoQ1NTeEZRVUZQTEVOQlFVTXNUVUZEVUN4RFFVTkVMRWxCUVUxRExFVkJRVThzVFVGQlRTeExRVUZMTjBJc1IwRkJVU3hMUVVGTExFTkJRVU1zUlVGRGFrTXNUMEZCVHpoQ0xFZEJRVTlCTEVsQlFWRXNVVUZCVVN4RlFVTTVRaXhKUVVGSlFTeEhRVUZQTEV0QlFVc3NWVUZCVlVFc1EwRkJSeXhEUVVGRExFVkJRemxDTEV0QlFVc3NTVUZCU1N4RlFVTmtMRTFCUVUwc1NVRkJTU3hOUVVGTkxHMUNRVUZ0UWt3c1EwRkJWU3hwUWtGQmFVSkpMRU5CUVVrc05rSkJRVFpDTEVOQlEyNUhMRU5CUlVvc1IwRkJTU3hOUVVGTkxGRkJRVkZNTEVOQlFWVXNSVUZEZUVJc1VVRkJWMDhzUzBGQlQxQXNSVUZEWkVrc1JVRkJUMEVzUlVGQlN5eFBRVUZQUnl4RFFVRkhMRTlCUlhKQ0xFOUJRVTlRTEVkQlFXVXNZVUZETTBKSkxFVkJRVTlLTEVWQlFWZEpMRVZCUVVzc1RVRkJUU3hEUVVGRExFZEJSV3hETEU5QlFVbEdMRWxCUTBGRkxFVkJRVTlCTEVWQlFVc3NUMEZCVDFvc1JVRkJTeXhIUVVOeVFsa3NSVUZCU3l4UFFVRlBMRU5CUVVOQkxFVkJRVTFITEVsQlFWRXNRMEZET1VJc1NVRkJUVU1zUlVGQlV5eFBRVUZQUkN4SFFVRlJMRk5CUVZjeFFpeEhRVUZYTUVJc1EwRkJSeXhGUVVGSlFTeEZRVU16UkN4SFFVRkpMRU5CUVVORExFVkJRVkVzUTBGRFZDeEpRVUZOUXl4RlFVRlZMRXRCUVVzc1ZVRkJWVVlzUTBGQlJ5eEZRVU0xUWtZc1JVRkJUeXhQUVVGUExFdEJRVXQ0UWl4RlFVRlZMRVZCUXpsQ0xFbEJRVWw1UWl4SFFVRlBMRXRCUVVzc1ZVRkJWVUVzUTBGQlJ5eERRVUZETEVWQlF6bENMRXRCUVVzc1NVRkJTU3hGUVVOa0xFMUJRVTBzU1VGQlNTeE5RVUZOTEhOQ1FVRnpRa2NzUTBGQlR5eG5Ra0ZCWjBKS0xFTkJRVWtzUlVGQlJTeERRVU4yUlN4RFFVTkJMRTlCUVV0RUxFVkJRVXNzVTBGQlUwa3NRMEZCVFN4SFFVTnlRa29zUlVGQlN5eExRVUZMU1N4RFFVRk5MRVZCUTJKS0xFTkJRMWdzUlVGQlJ5eERRVUZETEVOQlFVTXNRMEZEVkN4RFEzWkdRU3hKUVVGTlRTeEhRVUZ6UWl4RFFVRkRReXhGUVVGSFF5eEpRVUZOUkN4RlFVRkZMRWxCUVUxRExFVkJRVVVzU1VGQlRTeEhRVUZMUkN4RlFVRkZMRWxCUVUxRExFVkJRVVVzU1VGQlRTeEZRVUZKTEVWQlEzcEZReXhIUVVGT0xFMUJRVTFETEVOQlFVOHNRMEZEVkN4WlFVRlpMRU5CUVVVc1QwRkJRVU1zUlVGQlVTeFhRVUZCUXl4RlFVRlpMRTFCUVVGRExFVkJRVThzYVVKQlFVRkRMRVZCUVd0Q0xFOUJRVUZETEVWQlFWRXNaVUZCUVVNc1JVRkJaMElzYVVKQlFVRkRMRU5CUVdsQ0xFVkJRVWNzUTBGRGJrY3NTMEZCU3l4UFFVRlRMRTFCUVUwc1VVRkJVVTRzUTBGQlRTeEZRVU0xUWs4c1IwRkJVVkFzUlVGQlVTeFJRVUZSTEVWQlEzaENRU3hGUVVOSlR5eEhRVUZSTEV0QlFVMVFMRU5CUVUwc1JVRkRjRUlzUzBGRFZpeExRVUZMTEV0QlFWRXNUMEZCVDBrc1IwRkJWeXhWUVVGWlFTeEhRVUZYTEU5QlEzUkVMRXRCUVVzc1ZVRkJXVVFzUlVGQmJVSkxMRWRCUVdkQ0xFTkJRVU1zUlVGRGNrUXNTMEZCU3l4TFFVRlBSQ3hIUVVGUlRpeEZRVUZaTEV0QlFVc3NTMEZCVFVNc1EwRkJTeXhGUVVOb1JDeExRVUZMTEdkQ1FVRnJRa2tzUjBGQlFTeExRVUZCUVN4RlFVRnZRaXhMUVVNelF5eFBRVUZQTEdWQlFXVXNTMEZCVFVjc1IwRkJTeXhEUVVGRkxFMUJRVTlETEVWQlFVa3NRMEZCUXl4RlFVTXZReXhQUVVGUExHVkJRV1VzUzBGQlRVTXNSMEZCVVN4RFFVRkZMRTFCUVU5RExFVkJRVThzUTBGQlF5eEZRVU55UkN4UFFVRlBMR1ZCUVdVc1MwRkJUVU1zUjBGQlN5eERRVUZGTEUxQlFVOURMRVZCUVVrc1EwRkJReXhGUVVVdlF5eExRVUZMTEdWQlEwUXNUMEZCVDFRc1IwRkJiVUlzVjBGRGNFSkJMRVZCUTBGQkxFbEJRVzFDTEVkQlEyWldMRWRCUTBFc1NVRkRiRUlzUTBGRFFTeFBRVUZSTEVOQlEwb3NTVUZCVFc5Q0xFVkJRVThzVDBGQlR5eFBRVUZQYUVJc1JVRkJUeXhWUVVGWExFOUJRVThzTUVKQlFUQkNMRWxCUVVrc1EwRkJReXhGUVVOdVJpeFBRVUZCWjBJc1JVRkJTeXhMUVVGUExFdEJRVXNzUzBGQlN5eE5RVUZOTEVWQlEzSkNRU3hEUVVOWUxFTkJRMG9zUlVNNVFrRXNVMEZCVTBNc1IwRkJhMEpETEVWQlFVdERMRVZCUVZNc1EwRktla01zU1VGQlFVTXNSVUZMU1N4SlFVRk5ReXhGUVVGUkxFTkJRVU1zUlVGRFdFTXNSVUZCWjBKSUxFVkJRVkVzWVVGQlpTeEhRVU16UXl4SFFVRkpRU3hGUVVGUkxHRkJRV1VzU1VGQlUwUXNSVUZCU1N4WFFVRlpMRU5CUTJoRUxFbEJRVTFMTEVWQlFVMU1MRVZCUVVrc1YwRkJWeXhUUVVGVFFTeERRVUZITEVWQlEyNURTeXhIUVVOQlJpeEZRVUZOTEV0QlFVdEZMRU5CUVVjc1JVRkRaRVFzUlVGQlowSXNTVUZGV0Vvc1JVRkJTU3hYUVVGWExGZEJRM0JDU1N4RlFVRm5RaXhIUVVONFFpeERRVU5KUVN4SFFVTkJSQ3hGUVVGTkxFdEJRVXNzUzBGQlN5eEZRVU53UWl4SlFVRk5SeXhGUVVGTlF5eEhRVUYxUWxBc1JVRkJTME1zUTBGQlR5eEZRVU42UXl4RFFVRkZMR05CUVVGUExFTkJRV01zUlVGQlNVWXNSVUZCU1N4UlFVTTVRaXhIUVVGSlRpeEZRVUZKTEdOQlFXVXNRMEZEWmtjc1JVRkJUU3hUUVVGWExFZEJRMnBDUVN4RlFVRk5MRkZCUVZFc1JVRkJSU3hGUVVOd1FpeEpRVUZOVFN4RlFVRkxSQ3hGUVVGalVpeEZRVUZKTEdGQlFXRXNSVUZETVVOSExFVkJRVTBzVVVGQlVVOHNSMEZCWTBRc1JVRkJTU3hGUVVGRkxFTkJRVU1zUTBGRGRrTXNRMEZEUVN4SlFVRkpSU3hGUVVGWkxFZEJRMXBETEVWQlFXbENMRXRCUTNKQ0xFZEJRVWxhTEVWQlFVa3NVMEZCVlN4RFFVTmtMRWRCUVVsaExFVkJRVTlpTEVWQlFVa3NVVUZCVVN4RlFVRkhMRU5CUjNSQ0xFZEJSa2xCTEVWQlFVa3NVMEZCVXl4aFFVRmxTU3hIUVVNMVFrUXNSVUZCVFN4TFFVRkxMRVZCUVVVc1JVRkRZa2dzUlVGQlNTeFRRVUZUTEdOQlFXVXNRMEZETlVJc1NVRkJUVk1zUlVGQlMwUXNSVUZCWTFJc1JVRkJTU3hUUVVGVExHRkJRV0VzUlVGRGJrUkhMRVZCUVUwc1MwRkJTMDhzUjBGQlkwUXNSVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkRjRU1zUTBGRlFVZ3NSVUZCU1N4cFFrRkJiVUlzUTBGQlF5eERRVUZEVGl4RlFVRkpMRkZCUXpkQ1dTeEZRVUZwUWxvc1JVRkJTU3hUUVVGVExFOUJRMnhETEVOQlEwRXNTVUZCVFdNc1JVRkJZMFlzUlVGQmFVSXNUMEZCV1N4SlFVRlBSQ3hGUVVGWkxFZEJRMmhGU1N4RlFVRlBReXhIUVVGVmFFSXNSVUZCU1N4VFFVRlZUU3hGUVVGTExFbEJRVTlOTEVWQlFXbENMRXRCUVU5RkxFTkJRVmNzUlVGRE9VVkdMRWxCUTBGSExFZEJRVkZGTEVkQlFWbEdMRVZCUVUwc1IwRkJTVkFzUlVGQlkwa3NRMEZCWXl4RFFVRkRMRWxCUXpGRVJ5eEZRVUZMTEVOQlFVTXNTVUZCVFN4TFFVRlBRU3hGUVVGTExFTkJRVU1zU1VGQlRTeE5RVU5vUTFvc1JVRkJUVUVzUlVGQlRTeFBRVUZUTEVOQlFVTXNTVUZCVFN4TlFVYzFRa0VzUlVGQlRVRXNSVUZCVFN4UFFVRlRMRU5CUVVNc1JVRkJTU3hQUVVGUFdTeERRVUZKTEVkQlIzSkRXaXhGUVVGTkxFdEJRVXRaTEVOQlFVa3NRMEZEZGtJc1RVRkZTVm9zUlVGQlRTeExRVUZMWVN4SFFVRlZhRUlzUlVGQlNTeFRRVUZWVFN4RFFVRkhMRU5CUVVNc1JVRkZNME1zU1VGQlNVb3NSVUZCUVVZc1JVRkJTU3hoUVVGS0xFMUJRVUZGTEVWQlFXZENMRTlCUTJoQ0xFZEJRVWxHTEVWQlFVa3NVVUZCVXl4RFFVTmlMRWxCUVUxVExFVkJRVXRFTEVWQlFXTlNMRVZCUVVrc1QwRkJUeXhGUVVOb1ExTXNSVUZCUnl4VFFVRlRPMEZCUVVFc1EwRkJTU3hIUVVOb1FrNHNSVUZCVFN4TFFVRkxMRXRCUVVzc1JVRkRhRUpCTEVWQlFVMHNTMEZCUzA4c1IwRkJZMFFzUlVGQlNTeEZRVUZGTEVOQlFVTXNSMEZIYUVOT0xFVkJRVTBzUzBGQlN5eFBRVUZQVFN4RFFVRkZMRVZCUVVVc1EwRkZPVUlzVFVGRlNVNHNSVUZCVFN4TFFVRkxMRXRCUVVzc1RVRkhia0lzUTBGRFJDeEpRVUZKWlN4RlFVRkxiRUlzUlVGQlNTeFJRVU5VYTBJc1IwRkJUVkFzU1VGRFRrOHNSVUZCUzBFc1JVRkJSeXhSUVVGUkxFOUJRVkVzUlVGQlJTeEhRVU14UWtFc1MwRkRTeXhEUVVGRFVDeEhRVUZoUXl4SlFVRnRRbFFzUlVGQlRVRXNSVUZCVFN4UFFVRlRMRU5CUVVNc1NVRkJUU3hKUVVNNVJFRXNSVUZCVFN4TFFVRkxMRVZCUVVVc1JVRkRha0pCTEVWQlFVMHNTMEZCUzA4c1IwRkJZMFlzUlVGQlkxVXNRMEZCUlN4RlFVRkhMRVZCUVVVc1EwRkJReXhGUVVWMlJDeERRVU5CTEU5QlFVOW1MRVZCUVUwc1MwRkJTenRCUVVGQkxFTkJRVWtzUlVGQlNUdEJRVUZCTEVOQlF6bENMRU5EZEVWQkxFbEJRVTFuUWl4SFFVRk9MRTFCUVUxRExFTkJRVk1zUTBGRFdDeFpRVUZaUXl4RlFVRlBReXhGUVVGVlF5eEZRVUZUTEVOQlJXeERMRXRCUVVzc1kwRkJaMElzUzBGRmNrSXNTMEZCU3l4UlFVRlZMRXRCUldZc1MwRkJTeXhQUVVGVExFTkJRVU1zUlVGRlppeExRVUZMTEZOQlFWY3NRMEZCUXl4RlFVTnFRaXhQUVVGUExHVkJRV1VzUzBGQlRVTXNSMEZCVnl4RFFVRkZMRTFCUVU5RExFVkJRVWtzUTBGQlF5eEZRVU55UkN4SlFVRkpReXhGUVVGWkxFdEJRMW9zVDBGQlQwb3NSMEZCWVN4WlFVRmpMRTFCUVUwc1VVRkJVVUVzUTBGQlVTeEZRVU40UkVrc1JVRkJXVW9zUlVGRlVFTXNTVUZCV1N4UlFVRmhSQ3hKUVVNNVFrTXNSVUZCVlVRc1JVRkRWa0VzUlVGQlZ5eFJRVVZtTEVsQlFVMUxMRVZCUVUwc1QwRkJUeXhQUVVGUExFTkJRM1JDTEZsQlFXRXNSMEZEWWl4cFFrRkJhMElzUjBGRGJFSXNVMEZCVlN4UFFVTldMR0ZCUVdNc1IwRkRaQ3hQUVVGUkxFZEJRMUlzVjBGQldTeEhRVU5hTEZkQlFWa3NSMEZEV2l4UlFVRlRMRXRCUTJJc1JVRkJSMG9zUTBGQlR5eEZRVU5XTEV0QlFVc3NVVUZCVlVrc1JVRkRaaXhIUVVGSkxFTkJRVVVzVVVGQlFVTXNRMEZCVVN4RlFVRkpSQ3hGUVVOa1NpeEhRVUZCTEUxQlFVRkJMRVZCUVZNc1lVRkRWQ3hMUVVGTExGZEJRV0ZCTEVWQlFWRXNXVUZCV1N4WFFVRlhMRVZCUXpkRExFdEJRVXNzVjBGQlZ5eExRVUZMTEZkQlEzSkNTeXhGUVVGVkxFdEJRVXNzVjBGQlZ5eExRVUZMTEZWQlIyNURMRXRCUVVzc1YwRkJZU3hKUVVGSlF5eEhRVUZYTEVOQlFVVXNVVUZCUVVRc1EwRkJVU3hEUVVGRExFVkJRMmhFTEV0QlFVc3NWVUZCVlVFc1JVRkJVMHdzUTBGQlR5eEZRVVV2UWl4TFFVRkxMRk5CUTBSR0xFbEJRVlVzVDBGQldTeExRVUZQTEV0QlFVc3NWMEZCVjBFc1JVRkJUMHNzUlVGQlYwZ3NRMEZCVHl4RFFVTTVSU3hEUVUxQkxFOUJRVkVzUTBGRFNpeEpRVUZOVHl4RlFVRlBMRTlCUVU4c1QwRkJUMVlzUlVGQlV5eFZRVUZYTEVOQlF6TkRMRU5CUVVOSkxFVkJRVk1zUlVGQlJ5eERRVUZGTEUxQlFVOURMRVZCUVVrc1EwRkRPVUlzUTBGQlF5eEZRVU5FTEU5QlFVRkxMRVZCUVVzc1kwRkJaMElzUzBGQlN5eGpRVU14UWtFc1JVRkJTeXhSUVVGVkxFdEJRVXNzVVVGRGNFSkJMRVZCUVVzc1QwRkJVeXhMUVVGTExFOUJRVThzVFVGQlRTeEZRVU5vUTBFc1JVRkJTeXhUUVVGWExFdEJRVXNzVTBGQlV5eE5RVUZOTEVWQlEzQkRRU3hGUVVGTExGRkJRVlVzVDBGQlR5eFBRVUZQTEVOQlFVTXNSVUZCUnl4TFFVRkxMRTlCUVU4c1JVRkRla01zUzBGQlN5eGhRVU5NUVN4RlFVRkxMRmRCUVdFc1MwRkJTeXhYUVVGWExFMUJRVTBzUjBGRE5VTkJMRVZCUVVzc1QwRkJVeXhMUVVGTExFOUJRVThzVFVGQlRTeEZRVVZvUTBFc1JVRkJTeXhUUVVGWFF5eEZRVUZQTEV0QlFVc3NVVUZCVVN4RlFVTTVRaXhMUVVGTExGTkJRVk1zVFVGQlRVUXNSVUZCU3l4TlFVRk5MRVZCUXk5Q0xFdEJRVXNzVTBGRFVDeExRVUZMTEZGQlEweEJMRVZCUVVzc1RVRkJVU3hMUVVGTExFMUJRVTBzVFVGQlRTeEhRVU16UWtFc1EwRkRXQ3hEUVVWQkxFbEJRVWxVTEVWQlFVOHNRMEZEU0Zjc1IwRkJhVUlzUzBGQlN5eFJRVUZSTEVkQlF6bENMRXRCUVVzc1UwRkJVeXhKUVVGSldDeERRVUZMTEVOQlF5OUNMRU5CUlVFc1RVRkJUVmtzUlVGQlRWb3NSVUZCVHl4RFFVTllWeXhIUVVGcFFpeExRVUZMTEZGQlFWRXNSMEZET1VJc1MwRkJTeXhUUVVGVExFMUJRVTFETEVWQlFVMWFMRU5CUVVzc1EwRkRka01zUTBGVlFTeFpRVUZaWVN4RlFVRk5ReXhGUVVGTkxFTkJRM0JDTEVkQlFVa3NRMEZCUTBRc1JVRkJTeXhQUVVGUkxFTkJRMlFzU1VGQlRVVXNSVUZCVDBNc1IwRkJXU3hKUVVGSkxFVkJRemRDU0N4RlFVRkxMRTlCUlVRc1EwRkJRME1zUjBGQlVVTXNSVUZCU3l4SlFVRkpSQ3hEUVVGSkxFVkJRVWxITEVkQlFXTklMRWRCUVZFc1NVRkJTME1zUTBGQlNTeEZRVUZKUkN4RFFVTnlSU3hEUVVOQkxFOUJRVThzU1VGQlNVa3NSMEZCVFV3c1JVRkJTeXhOUVVGTkxFTkJRMmhETEVOQlEwRXNWMEZCVjJJc1JVRkJUME1zUlVGQlZVTXNSVUZCVXl4RFFVTnFReXhKUVVGSlJ5eEZRVU5LTEVkQlFVa3NUMEZCVDBvc1IwRkJZU3hYUVVOd1FrUXNSVUZCVVVNc1JVRkJVeXhMUVVGTExFTkJRVVVzUjBGQlNVUXNRMEZCVFN4RlFVRkhMRWRCUVVsQkxFTkJRVXNzUlVGRE9VTkxMRVZCUVZsS0xGVkJSVkFzVFVGQlRTeFJRVUZSUVN4RFFVRlJMRVZCUVVjc1EwRkRPVUlzU1VGQlRXdENMRVZCUVZsRExFZEJRVTBzVDBGQlQwRXNSMEZCVFN4VlFVRlpRU3hoUVVGaExGRkJRVlZCTEdGQlFXRXNUMEZETDBWRExFVkJRVkZ3UWl4RlFVRlRMRTlCUVU5clFpeERRVUZSTEVWQlFVVXNTVUZCU1N4TlFVRk5MRVZCUXpsRFJTeEZRVUZOTEU5QlFWTXNTVUZEWm5CQ0xFVkJRVmRCTEVWQlFWTXNUMEZCVDI5Q0xFTkJRVXNzUjBGRGNFTm9RaXhGUVVGWlNpeERRVU5vUWl4TlFVTlRReXhKUVVGWkxGRkJRV0ZFTEVsQlF6bENReXhGUVVGVlJDeEZRVU5XUVN4RlFVRlhMRkZCUldZc1IwRkJUU3hEUVVGRkxITkNRVUZCY1VJc1JVRkJkVUlzWVVGQlFVTXNSVUZCWXl4TFFVRkJReXhGUVVGTkxHTkJRVUZETEVWQlFXVXNVMEZCUVVNc1JVRkJWU3hKUVVGQlF5eERRVUZKTEVWQlFVbDZRaXhIUVVGQkxFdEJRVUZCTEVWQlFWY3NRMEZCUXl4RlFVTXhSaXhEUVVGRkxGTkJRVUV3UWl4RlFVRlZMRmRCUVVGRExFVkJRVmtzWTBGQlFVTXNRMEZCWXl4RlFVRkpReXhIUVVGclFpeExRVVZzUlZJc1IwRkJaMElzUjBGQlJ5eEZRVU5pVXl4RlFVRk5MRU5CUTFJc2MwSkJRWFZDVml4SFFVRkJMRXRCUVVGQkxFVkJRWGxDTEVkQlEyaEVMR05CUVdWSExFZEJRVUVzUzBGQlFVRXNSVUZCYVVJc1IwRkRhRU1zVTBGQlFVY3NSVUZEUVN4VFFVRkJSaXhGUVVOQkxGTkJRVlZ5UWl4RlFVTldMRTlCUVZFc1MwRkJTeXhQUVVOaUxHTkJRVUY1UWl4RFFVTktMRVZCUTAxcVFpeEZRVUZQYjBJc1IwRkJWMnBETEVWQlFVOHlRaXhGUVVGTFN5eERRVUZITEVWQlEzWkRMRTlCUVVsU0xFZEJRVkZWTEVWQlFXRnlRaXhEUVVGSkxFbEJRM3BDUVN4RlFVRkxMRXRCUVU4c1NVRkRhRUpuUWl4RlFVRlhMRVZCUTBwb1FpeERRVU5ZTEVOQlMwRXNWMEZCVjNOQ0xFVkJRVXR1UXl4RlFVRlBSU3hGUVVGVkxFTkJRVU1zUlVGQlJ5eERRVU5xUXl4SlFVRk5hME1zUlVGQlNTeExRVUZMTEZkQlFWZEVMRVZCUVVzc1MwRkJUV3BETEVOQlFVOHNSVUZEZEVOclFpeEZRVUZKTEV0QlFVc3NWMEZCVjNCQ0xFVkJRVThzUzBGQlRVVXNRMEZCVHl4RlFVTTVReXhQUVVGUExFbEJRVWx0UXl4SFFVRkxSQ3hGUVVGSGFFSXNRMEZCUXl4RFFVTjRRaXhEUVV0QkxFOUJRVTlsTEVWQlFVc3NRMEZEVWl4UFFVRlBlRUlzUjBGQmFVSXNTMEZCU3l4UlFVRlJMRVZCUVVrc1MwRkJTeXhUUVVGVExFOUJRVTkzUWl4RFFVRkhMRVZCUVVrc1JVRkRla1VzUTBGTFFTeFRRVUZUZGtJc1JVRkJUU3hEUVVOWUxFOUJRVWt3UWl4SFFVRlpNVUlzUTBGQlNTeEZRVU5hTEV0QlFVc3NWVUZCV1N4TFFVTldMRWxCUlZnc1MwRkJTeXhUUVVGWExFdEJRMVFzU1VGRlNrUXNSMEZCYVVJc1MwRkJTeXhSUVVGUkxFVkJReTlDTEV0QlFVc3NVMEZCVXl4VFFVRlRReXhEUVVGSkxFVkJRek5DTEVWQlExWXNRMEZOUVN4SlFVRkpkVUlzUlVGQlMwa3NSVUZCV1N4RFFVTnFRaXhQUVVGUFRDeEZRVUZoTEV0QlFVc3NVVUZCVVN4RlFVTXpRaXhMUVVGTExGTkJRVk1zU1VGQlNVTXNSVUZCUzBrc1EwRkJWU3hGUVVOcVF5eE5RVU5XTEVOQlRVRXNUVUZCVFROQ0xFVkJRVTB5UWl4RlFVRlpMRU5CUTNCQ0xFOUJRVWxFTEVkQlFWa3hRaXhEUVVGSkxFVkJRMVFzUTBGQlF6SkNMRWRCUVdORExFVkJRVk1zUzBGQlN5eFJRVUZSTEVWQlEzUkRMRXRCUVVzc1UwRkJVeXhOUVVOa0xFdEJRVXNzVTBGRFVrNHNSVUZCWVN4TFFVRkxMRkZCUVZFc1JVRkRNMElzUzBGQlN5eFRRVUZUTEUxQlFVMTBRaXhGUVVGTk1rSXNRMEZCVlN4RlFVTndReXhOUVVOV0xFTkJTVUVzU1VGQlNVb3NSVUZCU3l4RFFVTk1MRTlCUVU5RUxFVkJRV0VzUzBGQlN5eFJRVUZSTEVWQlFVa3NTMEZCU3l4VFFVRlRMRWxCUVVsRExFTkJRVWNzUlVGQlNTeEZRVU5zUlN4RFFVbEJMRTFCUVUxMlFpeEZRVUZOTEVOQlExSXNUMEZCU1RCQ0xFZEJRVmt4UWl4RFFVRkpMRVZCUTFRc1MwRkJTeXhYUVVGaExFOUJRM1JDYzBJc1JVRkJZU3hMUVVGTExGRkJRVkVzUlVGQlNTeExRVUZMTEZOQlFWTXNUVUZCVFhSQ0xFTkJRVWtzUlVGQlNTeEZRVU55UlN4RFFVdEJMRWxCUVVsMVFpeEZRVUZMYmtNc1JVRkJUeXhEUVVOU0xFdEJRVXNzVlVGQldTeExRVVZxUWl4TFFVRkxMRk5CUVZkNVF5eEhRVUZ0UWl4TFFVRkxMRTlCUVZFc1EwRkJRMDRzUTBGQlJ5eEZRVUZIYmtNc1EwRkJTeXhGUVVWMlJGY3NSMEZCYVVJc1MwRkJTeXhSUVVGUkxFZEJRMjVETEV0QlFVc3NVMEZCVXl4SlFVRkpkMElzUlVGQlMyNURMRU5CUVVzc1EwRkZjRU1zUTBGTFFTeE5RVUZOV1N4RlFVRk5XaXhGUVVGUExFTkJRMWh6UXl4SFFVRlpNVUlzUTBGQlNTeEZRVVZvUWl4TFFVRkxMRk5CUVZkYUxFVkJSVmdzUzBGQlN5eFZRVUZaTEV0QlJYUkNMRXRCUVVzc1UwRkJWM2xETEVkQlFXMUNMRXRCUVVzc1QwRkJVU3hOUVVGTkxFdEJRVXMzUWl4RFFVRkpMRVZCUVVkYUxFTkJRVXNzUlVGRmJFVlhMRWRCUVdsQ0xFdEJRVXNzVVVGQlVTeEhRVU51UXl4TFFVRkxMRk5CUVZNc1RVRkJUVU1zUlVGQlRWb3NRMEZCU3l4RFFVVjJReXhEUVZGQkxGVkJRVlZQTEVWQlFWTk1MRVZCUVZVc1EwRkJReXhGUVVGSExFTkJRM3BDTEU5QlFVOUxMRWRCUVZrc1YwRkRia0pCTEVWQlFWVXNUMEZCVDBFc1EwRkJUeXhIUVVNMVFpeEpRVUZKUkN4RlFVTktMRTlCUVZGRExFVkJRVk1zUTBGRFlpeEpRVUZMTEUxQlEwY3NTMEZCU3l4WFFVTk1MRXRCUVVzc1YwRkJWeXhMUVVGTExGRkJRVlVzVFVGRkwwSXNTMEZCU3l4WFFVRmhMRWxCUVVsRExFZEJRVmNzUTBGQlJTeFJRVUZUTEV0QlFVMHNRMEZCUXl4RlFVTjJSRVlzUlVGQlRTeERRVUZGTEdsQ1FVRnJRaXhIUVVGUExFOUJRVkVzVlVGQlZ5eEZRVU53UkN4TlFVTktMRWxCUVVzc1RVRkRUQ3hKUVVGTExFOUJRMGNzUzBGQlN5eFhRVU5NTEV0QlFVc3NWMEZCVnl4TFFVRkxMRkZCUVZWRExFVkJSUzlDTEV0QlFVc3NWMEZCWVN4SlFVRkpReXhIUVVGWExFTkJRVVVzVVVGQlFVUXNRMEZCVVN4RFFVRkRMRVZCUTJoRVJDeEZRVUZOTEVOQlFVVXNhVUpCUVd0Q0xFZEJRVTBzVDBGQlVTeE5RVUZQTEVWQlF5OURMRTFCUTBvc1MwRkJTeXhMUVVOSExFdEJRVXNzV1VGRFRDeFBRVUZQTEV0QlFVc3NWMEZEYUVKQkxFVkJRVTBzUzBGRFRpeE5RVU5LTEZGQlFWTXNRMEZEVEN4SlFVRk5iME1zUlVGQlN5eExRVUZMTEZWQlFWVnVReXhEUVVGUExFVkJRMnBETEUxQlFVMHNTVUZCU1N4TlFVRk5MQ3RFUVVFclJHMURMRU5CUVVVc1JVRkJSU3hEUVVOMlJpeERRVU5LTEVOQlJVRXNSMEZCU1hoRExFVkJRVkVzYTBKQlFXdENMRTlCUXpGQ0xFdEJRVXNzVDBGQlUwRXNSVUZCVVN4bFFVTnFRa2tzUlVGRFRDeExRVUZMTEU5QlFWTXNTVUZCU1hGRExFZEJRVThzVDBGQlR5eFBRVUZQY2tNc1JVRkJTMG9zUTBGQlR5eERRVUZETEUxQlJYQkVMRTlCUVUwc1NVRkJTU3hOUVVGTkxIRkZRVUZ4UlN4RFFVTTNSaXhEUVVWQkxFdEJRVXNzUTBGQlJTeExRVUZCTUVNc1JVRkJUU3hSUVVGQlF5eEZRVUZUTEZOQlFVRkRMRVZCUVZVc1kwRkJRVU1zUlVGQlpTeFRRVUZCYmtJc1JVRkJWU3hSUVVGQmIwSXNRMEZCVVN4RlFVRkpMRU5CUVVNc1JVRkJSeXhEUVVOeVJTeEpRVUZOYUVJc1JVRkJUU3hEUVVOU0xGRkJRVk1zU1VGQlNTeEpRVU5pTEVsQlFVc3NTMEZEVEN4TFFVRk5MRU5CUVVOWkxFVkJRMUFzVTBGQlZVVXNTVUZCWVN4SFFVTjJRaXhoUVVGakxFZEJRMlFzWTBGQlpTeFBRVUZQUXl4SFFVRnJRaXhUUVVGWFFTeEZRVUZuUWl4SFFVTjJSU3hGUVVOTlJTeEZRVUZOUXl4SFFVRkxMRXRCUVVzc1UwRkJWVXdzUjBGQlFTeExRVUZCUVN4RlFVRlhMRWRCUVVsaUxFTkJRVWNzUlVGRGJFUXNSMEZCU1N4UFFVRlBTaXhIUVVGaExGZEJRM0JDTEU5QlFWY3NRMEZCUlN4TlFVRkJkVUlzUlVGQlR5eEpRVUZCUml4RFFVRkpMRWxCUVV0cVFpeEZRVUZKTEZGQlFWRXNUMEZCVHl4RlFVTTFRMG9zUlVGQlUzRkNMRVZCUVV0RkxFTkJRVXNzUlVGRE0wSXNUMEZCVHl4UFFVRlBTQ3hIUVVGWkxGZEJRM0JDU1N4SFFVRmhTaXhGUVVGVExFTkJRVVVzUjBGQlNVTXNRMEZCU1N4RlFVRkhMRWRCUVVsQkxFTkJRVWNzUlVGRE1VTkJMRU5CUTFZc1EwRlBRU3hQUVVGUFNpeEZRVUZUYWtJc1JVRkJWU3hEUVVOMFFpeFBRVUZQTEV0QlFVc3NTMEZCU3l4RFFVRkZMRXRCUVUwc1IwRkJUU3hSUVVGQmFVSXNSVUZCVXl4VFFVRlZMRWRCUVU4c1UwRkJRV3BDTEVOQlFWTXNRMEZCUXl4RFFVTjJSU3hEUVVWQkxGTkJRVk14UWl4RlFVRlZMRU5CUVVNc1JVRkJSeXhEUVVOdVFpeEhRVUZKTEV0QlFVc3NUMEZCVHl4UFFVRlRMRVZCUTNKQ0xFMUJRVTBzU1VGQlNTeE5RVUZOTERSRFFVRTBReXhGUVVOb1JTeEhRVUZKTEZkQlFWbEJMRWxCUTFnc1EwRkJReXhQUVVGUExGVkJRVlZCTEVWQlFWRXNUVUZCVFN4SFFVRkxMRTlCUVU5QkxFVkJRVkVzVFVGQlRTeEhRVUZMTEVkQlFVa3NRMEZEY0VVc1NVRkJUVzFFTEVWQlFVa3NTMEZCU3l4VlFVRlZia1FzUlVGQlVTeE5RVUZOTEVWQlEzWkRMRTFCUVUwc1NVRkJTU3hOUVVGTkxHMUVRVUZ0UkcxRUxFTkJRVU1zUlVGQlJTeERRVU14UlN4RFFVTkJMRTlCUVU5RExFZEJRV3RDTEV0QlFVMXdSQ3hEUVVGUExFTkJRekZETEVOQlEwb3NSVUZEUVN4VFFVRlRVeXhIUVVGcFFqUkRMRVZCUVZVc1EwRkRhRU1zUjBGQlNYSkNMRVZCUVdGeFFpeERRVUZSTEVWQlEzSkNMRTFCUVU4c1IwRkRXQ3hOUVVGTkxFbEJRVWtzVFVGQlRTeHBSRUZCYVVRc1EwRkRja1VzUTBNMVZVRXNTVUZCVFVNc1IwRkJUaXhqUVVGM1FpeExRVUZOTEVOQlF6RkNMRmxCUVZsRExFVkJRVTFETEVWQlFVdERMRVZCUVUxRExFVkJRVk1zUTBGRGJFTXNUVUZCVFN4RlFVTk9MRXRCUVVzc1MwRkJUMGdzUlVGRFdpeExRVUZMTEV0QlFVOUZMRVZCUTFvc1MwRkJTeXhSUVVGVlF5eEZRVU5tTEV0QlFVc3NTVUZCVFVZc1EwRkRaaXhEUVVOS0xFVkJRMDFITEVkQlFVNHNZMEZCTmtKTUxFVkJRVlVzUTBGRGJrTXNXVUZCV1VVc1JVRkJTME1zUlVGQlRVTXNSVUZCVXl4RFFVTTFRaXhOUVVGTkxHbENRVUZyUWtZc1JVRkJTME1zUlVGQlRVTXNRMEZCVHl4RFFVTTVReXhEUVVOS0xFVkJRMDFGTEVkQlFVNHNZMEZCTUVKT0xFVkJRVlVzUTBGRGFFTXNXVUZCV1VVc1JVRkJTME1zUlVGQlRVTXNSVUZCVXl4RFFVTTFRaXhOUVVGTkxHTkJRV1ZHTEVWQlFVdERMRVZCUVUxRExFTkJRVThzUTBGRE0wTXNRMEZEU2l4RlFVTk5SeXhIUVVGblFpeERRVUZEUXl4RlFVRkxReXhKUVVGUlF5eEhRVUZWTEVOQlF6RkRMRWRCUVVsQkxFVkJRVTBzU1VGQlNTeERRVUZETEVsQlFVMHNSMEZEYWtJc1QwRkRTa0VzUlVGQlRTeFJRVUZWUVN4RlFVRk5MRWxCUVVrc1NVRkJTVklzUjBGQlQwOHNSVUZCUnl4UlFVRlJVQ3hEUVVGSExFTkJRVU1zUlVGRGNFUXNSMEZCVFN4RFFVRkZMRXRCUVVGVExFVkJRVTBzU1VGQlFVTXNRMEZCU1N4RlFVRkpSaXhGUVVGTkxGRkJRVkVzUTBGQlF5eEZRVU55UTBFc1JVRkJUU3hUUVVGWExGbEJRVmxETEVOQlFVa3NXVUZCV1VNc1EwRkJSeXhIUVVOb1JDeEpRVUZKUXl4RlFVRkxSQ3hGUVVGTkxFVkJRMWhGTEVWQlFWVk9MRVZCUTFRc1ZVRkJWVU1zUlVGQlJ5eFhRVUZYUlN4RlFVRlBMRU5CUVVNc1JVRkJSMFlzUlVGQlJ5eFhRVUZYUlN4RFFVRkpMRU5CUVVNc1JVRkRkRVFzVVVGQlVTeFhRVUZaTEVWQlFVVXNSVUZGTTBJc1IwRkJTVVVzUjBGQlRTeEpRVUZOUXl4RlFVRlJMRTlCUVZNc1IwRkJTU3hEUVVOcVF5eEpRVUZOUXl4RlFVRlpMRXRCUVVzc1NVRkJTVVlzUlVGQlN5eEhRVUZKUXl4RlFVRlJMRTlCUVZNc1JVRkJSU3hGUVVOMlJFRXNSVUZCVlN4VFFVRk5RU3hGUVVGUkxGVkJRVlZETEVOQlFWTXNSVUZETTBOR0xFZEJRVTFGTEVWQlFWa3NRMEZEZEVJc1EwRkpRU3hIUVVoSlJDeEZRVUZSTEU5QlFWTXNTMEZEYWtKQkxFVkJRVlZCTEVWQlFWRXNWVUZCVlN4RlFVRkhMRVZCUVVVc1JVRkJTU3hWUVVWeVEwZ3NSVUZCVHl4SFFVRkxMRTlCUVU4c1MwRkJTMGNzUlVGQlVTeFZRVUZWTEVWQlFVZEVMRU5CUVVVc1EwRkJReXhGUVVGSExFTkJSVzVFTEVsQlFVbEhMRVZCUVU5U0xFVkJRVWtzVlVGQlZVTXNSVUZCUnl4WFFVRlhSU3hGUVVGUExFTkJRVU1zUlVGQlIwWXNSVUZCUnl4WFFVRlhSU3hGUVVGUExFTkJRVU1zUTBGQlF5eEZRVU55UlVzc1JVRkJTeXhQUVVGVExFdEJRMlJCTEVWQlFVOUJMRVZCUVVzc1ZVRkJWU3hGUVVGSExFVkJRVVVzUlVGQlNUdEJRVUZCTEVkQlEyNURSaXhGUVVGVlJTeEZRVUZQUml4RFFVTnlRaXhEUVVOQkxFZEJRVWtzVDBGQlR5eExRVUZMUVN4RFFVRlBMRVZCUVVjc1EwRkRkRUlzU1VGQlNVY3NSVUZCVVN4RlFVTk9ReXhGUVVGTlVpeEZRVUZOTEZGQlFWRXNRMEZCUXl4RlFVTjJRbEVzUjBGQlQwRXNSVUZCU1N4UFFVRlRVQ3hIUVVGUlR5eEZRVUZKTEVsQlFVMU9MRWxCUTNSRFN5eEZRVUZSTEV0QlFVc3NTVUZCU1N4RlFVRkhMRXRCUVVzc1NVRkJTVU1zUlVGQlNTeEpRVUZOVGl4RlFVRkxMRWRCUVV0RExFTkJRVVVzUTBGQlF5eEhRVVY0UkN4SlFVRk5UU3hGUVVGVkxFbEJRVWtzVDBGQlQwNHNRMEZCUlN4RlFVRkpMRWxCUVVrc1QwRkJUMGtzUTBGQlN5eEZRVU5xUkZBc1JVRkJUU3hUUVVGWE8wRkJRVUU3UVVGQlFTeEZRVUZSU1N4RFFVRlBPMEZCUVVFc1JVRkJTMHNzUTBGQlR6dEJRVUZCTEVOQlEyaEVMRU5CUTBvc1JVTjBSRUVzVTBGQlUwTXNSMEZCWVVNc1JVRkJVU3hEUVVGRkxFdEJRVUZETEVWQlFVMHNWVUZCUVVNc1JVRkJWeXhMUVVGQlF5eEZRVUZOTEU5QlFVRkRMRVZCUVZFc1VVRkJRVU1zUlVGQlV5eGhRVUZCUXl4RlFVRmpMR1ZCUVVGRExFTkJRV1VzUlVGQlJ5eERRVU53Unl4SlFVRkpReXhGUVVGakxFZEJRMlJETEVWQlFWbEdMRVZCUTFwSExFVkJRVmRJTEVWQlExaEpMRVZCUVZVc1IwRkRWa01zUlVGQllTeEhRVU5pUXl4RlFVRmhMRWRCUTJKRExFVkJRVmNzUjBGRFdFTXNSVUZCVFN4TFFVTk9ReXhGUVVGVExFdEJRMVJETEVWQlFVMHNTMEZEVGtNc1JVRkJiVUlzUzBGRGJrSkRMRVZCUVZFc1MwRkRVa01zUlVGQlVTeExRVU5TUXl4RlFVRlJMRXRCUTFvc1VVRkJWME1zUzBGQlUzUkNMRVZCWTJoQ0xFOUJZa2xqTEVsQlEwbFJMRVZCUVUwc1QwRkJVeXhUUVVObVFTeEZRVUZOTEU5QlFWTXNWMEZEWmtFc1JVRkJUU3hQUVVGVExGTkJRMlpxUWl4RlFVRlJhVUlzUlVGQlRTeFBRVUZSTEdWQlFXZENMSFZGUVVGMVJTeEZRVU5xU0ZJc1JVRkJWeXhKUVVWWVF5eEpRVU5KVGl4SFFVRmhZU3hGUVVGTkxFOUJRVk1zVjBGQllVRXNSVUZCVFN4UFFVRlRMRmRCUTNoRWFrSXNSVUZCVVZVc1JVRkJTeXhuUWtGQmFVSXNjVU5CUVhGRExFVkJSWFpGUVN4RlFVRk5MRTFCUlVaUExFVkJRVTBzUzBGQlRTeERRVU5vUWl4SlFVRkxMRkZCU1Vjc1EwRkJRM0pDTEVsQlEwRkRMRWxCUVdNc1kwRkJaVU1zUjBGQlFTeFpRVUZCUVN4RlFVRk5MRkZCUVZNc2IwSkJRemREYlVJc1JVRkJUU3hQUVVGUExGTkJRVk1zUjBGQlNTeEpRVU14UWxBc1JVRkJUVThzUjBGRlZsb3NSVUZCVnl4SFFVTllMRTFCUTBvc1NVRkJTeXhWUVVGWExFTkJRMUJCTEVkQlEwUk1MRVZCUVZGcFFpeEZRVUZQTEdWQlFXZENMSGRGUVVGM1JTeEZRVU16Unl4SlFVRk5ReXhGUVVGTFJDeEZRVUZOTEU5QlFVOHNWVUZCVlN4RFFVRkRMRWRCUVVzc1NVRkRia05ZTEVWQlIwUkJMRWRCUVZkRExFVkJRV0ZYTEVWQlJuaENXaXhGUVVGVldTeEZRVWRrV0N4RlFVRmhMRWRCUTJKSUxFVkJRVmtzUjBGRFdpeExRVU5LTEVOQlEwRXNTVUZCU3l4VlFVTkhRU3hGUVVOSlJTeEZRVU5CUVN4SFFVRlhWeXhGUVVGTkxFOUJSV3BDWkN4RlFVRmpMRWRCUjJ4Q1NTeEhRVUZqVlN4RlFVRk5MRTlCUTNoQ1lpeEZRVUZaTEVkQlExcEpMRVZCUVdFc1NVRkRWRWNzUjBGQlZVTXNTMEZEVmtNc1JVRkJiVUpKTEVkQlEzWkNXaXhGUVVGWExFZEJRMWdzVFVGRFNpeEpRVUZMTEZOQlEwZE5MRWRCUTBGWUxFVkJRVkZwUWl4RlFVRlBMRzFDUVVGdlFpeHZRMEZCYjBNc1JVRkRka1ZCTEVWQlFVMHNUMEZCVHl4VFFVRlRMRWRCUVVjc1IwRkRla0pxUWl4RlFVRlJhVUlzUlVGQlRTeFBRVUZUUVN4RlFVRk5MRTlCUVU4c1QwRkJVeXhGUVVGSExGbEJRV0VzYTBOQlFXMURMRVZCUVVrc1JVRkRlRWRPTEVWQlFWTk5MRVZCUTB4RUxFbEJRVlVzVDBGRFZrRXNSVUZCVVVNc1JVRkJUU3hSUVVOc1FtSXNSVUZCV1N4SFFVTmFReXhGUVVGWExFZEJRMWhKTEVWQlFWY3NSMEZEV0N4TlFVTktMRWxCUVVzc1RVRkJUeXhEUVVOS1J5eEhRVU5CV2l4RlFVRlJhVUlzUlVGQlR5eG5Ra0ZCYVVJc2FVTkJRV2xETEVWQlEzSkZUQ3hGUVVGTlN5eEZRVU5HUkN4SlFVRlZMRTlCUTFaQkxFVkJRVkZETEVWQlFVMHNVVUZEYkVKaUxFVkJRVmtzUjBGRFdrTXNSVUZCVnl4SFFVTllTU3hGUVVGWExFZEJRMWdzUzBGRFNpeERRVU5CTEV0QlFVdGFMRWRCUlVkakxFZEJRVlZETEVsQlExWmFMRVZCUVZGcFFpeEZRVUZQTEdsQ1FVRnJRaXh6UTBGQmMwTkJMRVZCUVUwc1RVRkJUU3haUVVGWkxFVkJReTlHUml4SFFVTkJaaXhGUVVGUmFVSXNSVUZCVHl4dFFrRkJiMElzWTBGQlkwRXNSVUZCVFN4TlFVRk5MRTlCUVU5eVFpeEhRVUZCTEV0QlFVRkJMRVZCUVZFc1dVRkJXU3hGUVVGRkxFVkJRemxHYlVJc1JVRkJVVVVzUlVGRFVtSXNSVUZEU1ZBc1NVRkJZeXhuUWtGQmEwSkJMRWxCUVdNc2JVSkJRMnhFVVN4RlFVRlhMRWRCUTFnc1RVRkRTaXhKUVVGTExGRkJRMFFzUjBGQlNWUXNSVUZCVFN4RFFVTkdhMElzUjBGRFFXUXNSVUZCVVdsQ0xFVkJRVThzYlVKQlFXOUNMRzFDUVVGdFFuSkNMRU5CUVVrc1JVRkJSU3hGUVVOb1JXdENMRVZCUVZGSExFVkJRMUppTEVWQlFWa3NSMEZEV2tNc1JVRkJWeXhIUVVOWUxFdEJRMG9zUTBGRlNpeFJRVU5KVEN4RlFVRlJhVUlzUlVGQlR5eHRRa0ZCYjBJc1kwRkJZMEVzUlVGQlRTeEpRVUZKTEZGQlFWRXNSVUZEYmtWaUxFVkJRVmtzUjBGRFdrTXNSVUZCVnl4RlFVTnVRaXhEUVVWS0xFbEJRVTFqTEVWQlFVOTRRaXhGUVVGUFFTeEZRVUZQTEU5QlFWTXNRMEZCUXl4RlFVTXZRbmxDTEVWQlFVMUVMRVZCUVU5QkxFVkJRVXNzVDBGQlUwRXNSVUZCU3l4UFFVRlBMRTlCUVZOd1FpeEZRVU4wUkN4UFFVRkpWU3hIUVVOQldDeEhRVU5CUVN4RlFVRkxMRTlCUVZNc1UwRkRaRUVzUlVGQlN5eFBRVUZUTEZkQlEyUkJMRVZCUVVzc1QwRkJVeXhWUVVOaVFTeEZRVUZMTEU5QlFWTXNWVUZCV1VFc1JVRkJTeXhUUVVGWExFdEJRek5EUlN4RlFVRlJSaXhGUVVGTExFOUJRVkVzWlVGQlowSXNkVVZCUVhWRkxFVkJSVFZIV1N4SlFVTkZUaXhIUVVGaFRTeEZRVUZKTEZGQlFWVlVMRWxCUTNwQ1NDeEhRVUZCTEZsQlFVRkJMRVZCUVUwc1VVRkJVeXhqUVVObVFTeEhRVUZCTEZsQlFVRkJMRVZCUVUwc1VVRkJVeXhqUVVOdVFrVXNSVUZCVVZVc1JVRkJTeXhuUWtGQmFVSXNjVU5CUVhGRExFVkJRMmhGTEVOQlEwZ3NUVUZCUVVrc1JVRkRRU3hOUVVGQlF5eEZRVU5CTEZsQlFVRmFMRVZCUTBFc1VVRkJRVWNzUlVGRFFTeFhRVUZCUlN4RlFVTkJMRTlCUVVGSExFVkJRMEVzU1VGQlFVTXNSVUZEUVN4cFFrRkJRVU1zUlVGRFFTeEpRVUZCVHl4RlFVTkJMRTFCUVU5S0xFZEJRVUVzUzBGQlFVRXNSVUZCVTBrc1EwRkRjRUlzUTBGRFNpeERRMnBLUVN4VFFVRlRReXhIUVVGblFrTXNSVUZCU3l4RFFVTXhRaXhIUVVGSkxFTkJRVU5CTEVWQlEwUXNUMEZCVHl4TFFVTllMRTlCUVZGQkxFVkJRVWtzUzBGQlRTeERRVU5rTEVsQlFVc3NVVUZEVEN4SlFVRkxMRk5CUTB3c1NVRkJTeXgxUWtGRFRDeEpRVUZMTEhWQ1FVTkVMRWRCUVVsQkxFVkJRVWtzVDBGQlR5eFRRVUZUTzBGQlFVRXNRMEZCU1N4RlFVTjRRaXhOUVVGUExFZEJRMWdzUjBGQlNVRXNSVUZCU1N4TFFVTktMRkZCUVZkRExFdEJRVTFFTEVWQlFVa3NTVUZEYWtJc1IwRkJTVU1zUlVGQlJ5eFBRVUZUTEZWQlExb3NUVUZCVHl4SFFVTnVRaXhOUVVGUExFZEJRMWdzU1VGQlN5eHJRa0ZEUkN4UlFVRlhReXhMUVVGTlJpeEZRVUZKTEUxQlFVOHNRMEZEZUVJc1VVRkJWME1zUzBGQlRVTXNSVUZCUnl4TlFVTm9RaXhIUVVGSlJDeEZRVUZITEU5QlFWTXNWVUZEV2l4TlFVRlBMRWRCUTJZc1IwRkJTVU1zUlVGQlJ5eExRVU5JTEZGQlFWZEVMRXRCUVUxRExFVkJRVWNzU1VGRGFFSXNSMEZCU1VRc1JVRkJSeXhQUVVGVExGVkJRMW9zVFVGQlR5eEhRVU51UWl4SFFVRkpSaXhIUVVGblFrY3NSVUZCUnl4SFFVRkhMRWRCUVV0SUxFZEJRV2RDUnl4RlFVRkhMRXRCUVVzc1JVRkRia1FzVFVGQlR5eEZRVU5tTEVOQlEwRXNUVUZCVHl4SFFVTllMRkZCUTBrc1RVRkJUeXhGUVVObUxFTkJRMG9zUTBNM1FrRXNVMEZCVTBNc1IwRkJaMEpETEVWQlFWRkRMRVZCUVVsRExFVkJRVk1zUTBGRE1VTXNTVUZCU1VRc1IwRkJRU3haUVVGQlFTeEZRVUZKTEZGQlFWTXNhMEpCUVcxQ0xFTkJRMmhETEVsQlFVMUZMRVZCUVUxR0xFVkJRVWNzU1VGQlNTeERRVUZETEVWQlEyaENSU3hGUVVGSkxGTkJRVmRJTEVsQlEyUkhMRVZCUVVrc1UwRkJWeXhMUVVGUFFTeEZRVUZKTEZOQlFWY3NUVUZEZEVORExFZEJRV2RDU0N4RFFVRkZMRWRCUld4Q1F5eEZRVUZSUXl4RlFVRkxMR0ZCUkVRc2VVUkJRMjlDTEVWQlFVa3NRMEZGTlVNc1EwRkRTaXhEUTFaQkxGTkJRVk5GTEVkQlFWbERMRVZCUVV0RExFVkJRVTlETEVWQlFWRXNRMEZEY2tNc1IwRkJUU3hEUVVGRkxGZEJRVUZETEVOQlFWY3NSVUZCU1Vnc1JVRkJTU3hSUVVNelFpeEhRVUZKUnl4SlFVRmxMRWRCUTJZc1RVRkJUeXhIUVVOWUxFbEJRVTFETEVWQlFWVXNUMEZCVDBRc1IwRkJaU3hYUVVOb1EwRXNSVUZEUVN4RFFVRkRSU3hGUVVGSFF5eEpRVUZOUkN4SlFVRk5ReXhIUVVGTlF5eEZRVUZUUml4RFFVRkRMRWRCUVV0RkxFVkJRVk5FTEVOQlFVTXNSMEZCUzBRc1JVRkJSU3hSUVVGVlF5eEZRVUZGTEUxQlEzaEZMRTlCUVU5TUxFVkJRVTBzUzBGQlMwOHNSMEZCVVVvc1JVRkJVVWtzUlVGQlN5eEpRVUZMVGl4RFFVRk5MRU5CUVVNc1EwRkRka1FzUTBOSVFTeEpRVUZOVHl4SFFVRmpMR3RFUVVOd1FpeFRRVUZUUXl4SFFVRm5RaXhEUVVGRkxGbEJRVUZETEVWQlFXRXNhVUpCUVVGRExFTkJRV2xDTEVWQlFVZERMRVZCUVV0RExFVkJRVWxETEVWQlFWTkRMRVZCUVVzc1EwRlNia1lzU1VGQlFVTXNSVUZCUVVNc1JVRlRTU3hKUVVGTlF5eEhRVUZaUml4RlFVRkJSQ3hIUVVGQkxGbEJRVUZCTEVWQlFVc3NXVUZCVEN4TFFVRkJReXhGUVVGclFrY3NSMEZET1VKRExFVkJRVTBzU1VGQlNVWXNSVUZCVlU0c1JVRkJTU3hOUVVGTkxFVkJRMmhEUVN4RlFVRkpMRk5CUTBwQkxFVkJRVWtzVDBGQlV5eEpRVU5xUWl4SlFVRkpVeXhGUVVGVFVpeEZRVUZITEU5QlExcFRMRVZCUVdFc1MwRkRha0lzVVVGQlYwTXNTMEZCV1ZZc1JVRkJSeXhOUVVGUExFTkJRemRDTEVkQlFVMHNRMEZCUlN4TlFVRkJWeXhGUVVGUExFbEJRVUZETEVWQlFVc3NTVUZCUVVNc1JVRkJTeXhOUVVGQlF5eERRVUZOTEVWQlFVbEtMRVZCUlRkQ1N5eEZRVUZYUXl4SFFVRmhUQ3hGUVVGUExFTkJRMnBETEZWQlFWY3NiVUpCUTFnc1MwRkJUVU1zUjBGQlFTeExRVUZCUVN4RlFVRlBReXhIUVVGQkxGbEJRVUZCTEVWQlFVMHNSMEZEYmtJc1QwRkJRVXdzUlVGRFFTeFJRVUZCVUN4RlFVTkJMR0ZCUVdORUxFVkJRVWNzVDBGRGFrSXNaVUZCWjBJc1JVRkRjRUlzUTBGQlF5eEZRVU5MYVVJc1JVRkJZeXhEUVVGRFJpeEZRVUZUTEUxQlF6bENMRWRCUVVsRkxFVkJRV0VzUTBGUFlpeEhRVTVKVEN4SlFVTkpRU3hGUVVGSkxFOUJRVk1zV1VGRFlsZ3NSVUZCVVU4c1JVRkJVU3gzUWtGQmVVSXNlVVJCUVhsRUxFVkJRemRHTEZkQlFWbEpMRWRCUVU5QkxFVkJRVWtzVTBGQlYxb3NSVUZCUnl4UlFVTXhRME1zUlVGQlVVOHNSVUZCVVN4aFFVRmpZaXhGUVVGWExFZEJSVGRETEVOQlFVTnZRaXhGUVVGVExGRkJRVlVzUTBGQlEwRXNSVUZCVXl4TFFVRlBMRU5CUVVOR0xFVkJRVXNzUTBGRE0wTktMRVZCUVdGTkxFVkJRVk1zU1VGRGJFSkJMRVZCUVZNc1ZVRkRURklzUlVGQlNTeFJRVU5LUVN4RlFVRkpMRk5CUVZjN1FVRkJRU3hGUVVGUFVTeEZRVUZUTEZGQlJTOUNVaXhGUVVGSkxGRkJRVlZSTEVWQlFWTXNVMEZGTDBJc1VVRkRTaXhGUVVOSlFTeEZRVUZUTEd0Q1FVRnZRa2NzUjBGQlowSk9MRU5CUVVjc1NVRkRhRVJZTEVWQlFWRlhMRWRCUVVFc1MwRkJRVUVzUlVGQlQwUXNSVUZCVFVFc1JVRkJUU3hQUVVGVExFTkJRVU1zUlVGQlJ5eDVRa0ZCTUVJc01rTkJRVEpETEVOQlJYSklMRTlCUTFOUUxFVkJRVUZYTEVWQlFWTXNVVUZCVkN4WlFVRkJXQ3hGUVVGblFpeFZRVUZYU2l4RlFVRkhMRkZCUTI1RFF5eEZRVUZSVHl4RlFVRlJMR0ZCUVdOaUxFVkJRVmNzUlVGSE4wTkpMRVZCUVVrc1RVRkJVU3hIUVVOYUxFbEJRVTF2UWl4RlFVRlhTaXhGUVVGVExFbEJRM0JDU3l4RlFVRlZVaXhGUVVOV1ppeEZRVUZaUlN4RlFVRkxZU3hGUVVGTFJ5eEZRVUZWWkN4RFFVRlBMRVZCUTNaRFNDeEZRVUZwUWtNc1JVRkJTMjlDTEVWQlFWVlNMRVZCUVU4c1MwRkJUVWtzUlVGQlZXUXNRMEZCVHl4RlFVTm9SVVlzUlVGQlNTeFBRVUZQTEZGQlExaHpRaXhIUVVGblFuSkNMRVZCUVVjc1QwRkJVVmtzUlVGQlMxZ3NRMEZCVHl4RlFVTXpRMFlzUlVGQlNTeE5RVUZSTEVkQlExSjFRaXhIUVVGWmRrSXNSVUZCUzFFc1JVRkJTU3hOUVVGUFlTeERRVUZQTEVkQlEyNURia0lzUlVGQlVXdENMRVZCUVZVc1owSkJRV2xDTEhsQ1FVRjVRaXhGUVVWb1JTeEpRVUZOU1N4RlFVRmhVQ3hIUVVGaFNDeEhRVUZCTEV0QlFVRkJMRVZCUVU4c1EwRkJReXhGUVVGSExFTkJRM1pETEZWQlFWY3NaMEpCUTFnc1MwRkJUVU1zUlVGRFRpeFBRVUZSVFN4RlFVRlJMRTFCUVUwc1EwRkJReXhGUVVOMlFpeFJRVUZCYmtJc1JVRkRRU3hoUVVGalJDeEZRVUZITEU5QlEycENMR1ZCUVdkQ0xFTkJRVU5aTEVkQlFVOUJMRVZCUVVrc1QwRkJVeXhqUVVONlF5eERRVUZETEVWQlJVUXNSMEZFUVVvc1JVRkJVMlVzUlVGQlZ5eEpRVU5vUWtFc1JVRkJWeXhOUVVGUExFTkJRMlJPTEV0QlEwbElMRWRCUVVFc1dVRkJRVUVzUlVGQlR5eFJRVUZUTEdGQlFXVXNRMEZCUTFNc1JVRkJWeXhaUVVNelEzUkNMRVZCUVZGUExFVkJRVkVzZDBKQlFYbENMSEZFUVVGeFJDeEZRVU01UmxRc1JVRkJTU3hSUVVGUkxGRkJRMXBuUWl4RlFVRlRMRTFCUVZGUkxFVkJRVmNzVFVGQlRTeFBRVUZUTEUxQlF6TkRkRUlzUlVGQlVXMUNMRVZCUVZFc1RVRkJUeXh6UWtGQmRVSXNOa1pCUVRaR0xFZEJSMjVLTEVsQlFVMUpMRVZCUVZsV0xFVkJRMXBxUWl4RlFVRlpSU3hGUVVGTFpTeEZRVUZQVXl4RlFVRlpkRUlzUTBGQlR5eEZRVU16UTBnc1JVRkJhVUpETEVWQlFVdFRMRVZCUVZGTExFVkJRVXNzUzBGQlRWVXNSVUZCV1hSQ0xFTkJRVThzUlVGRE9VUkdMRVZCUVVrc1QwRkJUeXhSUVVOWWMwSXNSMEZCWjBKeVFpeEZRVUZITEU5QlFWRmpMRVZCUVU5aUxFTkJRVThzUlVGRE4wTlBMRVZCUVZOblFpeEZRVUZWTEUxQlFVMHNRMEZCUXl4RlFVTXhRaXhKUVVGTlF5eEZRVUZQTEVsQlFVbERMRWRCUVV0T0xFVkJRVk5KTEVOQlFWTXNSVUZEY0VONlFpeEZRVUZKTEZGQlFWRXNiVUpCUTFvd1FpeEZRVUZMTEZOQlFWZG1MRWRCUTNCQ1NDeEZRVUZKTEUxQlFVMHNTMEZCUzJ0Q0xFTkJRVWtzUTBGRGRrSXNTMEZEU3l4RFFVVkhVaXhIUVVOQmFFSXNSVUZCVVcxQ0xFVkJRVkVzVFVGQlR5eGxRVUZuUWl4eFJFRkJjVVFzUlVGRE5VWkhMRVZCUVZjc1ZVRkRVRWdzUlVGQlVTeFJRVU5TUVN4RlFVRlJMRk5CUVZjN1FVRkJRU3hGUVVGUFJ5eEZRVUZYTEZGQlJYSkRTQ3hGUVVGUkxGRkJRVlZITEVWQlFWY3NVMEZGY2tNc1NVRkJUVVVzUlVGQlR5eEpRVUZKUXl4SFFVRkxUaXhEUVVGUExFVkJRM3BDY2tJc1JVRkJTU3hSUVVGUkxHMUNRVU5hTUVJc1JVRkJTeXhUUVVGWFppeEhRVU53UWtnc1JVRkJTU3hOUVVGTkxFdEJRVXRyUWl4RFFVRkpMRU5CUTNaQ0xFTkJRMG9zUTBGRFFTeFBRVUZKYUVJc1IwRkJZMEVzUlVGQllVUXNSMEZETTBKUUxFVkJRVkZSTEVWQlFWa3NZVUZCWXl4dFEwRkJiVU1zUlVGRGVrVkdMRVZCUVVrc1RVRkJVU3hEUVVGRFVDeEZRVUZITEU5QlFWRlJMRVZCUVZGRExFZEJRVUVzUzBGQlFVRXNSVUZCWTBRc1EwRkJUU3hGUVVNM1EwUXNRMEZEV0N4RFF6VkhRU3hUUVVGVGIwSXNSMEZCWjBJc1EwRkJSU3haUVVGQlF5eEZRVUZoTEdsQ1FVRkJReXhEUVVGcFFpeEZRVUZIUXl4RlFVRkxReXhGUVVGSlF5eEZRVUZUUXl4RlFVRkxMRU5CU201R0xFbEJRVUZETEVWQlMwa3NTVUZCVFVNc1IwRkJXVVFzUlVGQlFVUXNSMEZCUVN4WlFVRkJRU3hGUVVGTExGbEJRVXdzUzBGQlFVTXNSVUZCYTBKRkxFZEJRemxDUXl4RlFVRk5MRWxCUVVsR0xFVkJRVlZNTEVWQlFVa3NUVUZCVFN4RlFVTm9RMEVzUlVGQlNTeFRRVU5LUVN4RlFVRkpMRTlCUVZNc1NVRkRZa0VzUlVGQlNTeFJRVU5LUVN4RlFVRkpMRTFCUVZFc1NVRkRhRUlzU1VGQlNWRXNSVUZCVTFBc1JVRkJSeXhQUVVOYVVTeEZRVUZoTEV0QlEycENMRTlCUVZjc1EwRkJSU3hOUVVGQlF5eEZRVUZQTEUxQlFVRkRMRU5CUVUwc1NVRkJTMVlzUlVGQlJ5eE5RVUZQTEVOQlEzSkRMRWxCUVUxWExFVkJRVkZETEVkQlFXRklMRVZCUVU4c1EwRkRPVUlzVlVGQlZ5eGxRVU5ZTEV0QlFVMURMRVZCUTA0c1QwRkJRVWdzUlVGRFFTeFJRVUZCVGl4RlFVTkJMR0ZCUVdORUxFVkJRVWNzVDBGRGFrSXNaVUZCWjBJc1JVRkRjRUlzUTBGQlF5eEZRVU5FTEVkQlFVa3NRMEZCUTFjc1JVRkJUU3hOUVVOUUxFZEJRVWxCTEVWQlFVMHNVVUZCVlVFc1JVRkJUU3hMUVVGUFJDeEZRVU42UWtFc1IwRkJVMEVzUlVGQlRTeFBRVUZUTEZsQlEzaENWQ3hGUVVGUlZTeEZRVUZOTEVsQlFVc3NZVUZCWXl4clJFRkJhMFFzUlVGRmJrWldMRVZCUVZGTkxFVkJRVkVzWlVGQlowSXNiVU5CUVcxRExFMUJSWFJGTEVOQlEwUkRMRVZCUVdGSExFVkJRVTBzU1VGRFprRXNSVUZCVFN4VlFVTk9UQ3hGUVVGSkxGRkJRVlZMTEVWQlFVMHNVMEZEZUVJc1VVRkRTaXhEUVVWS0xFbEJRVTFGTEVWQlFVOUlMRVZCUTFCaUxFVkJRVmxGTEVWQlFVdFhMRVZCUVU5RExFVkJRVTlXTEVOQlFVOHNSVUZEZEVOSUxFVkJRV2xDUXl4RlFVRkxXU3hGUVVGTkxFbEJRVXRHTEVWQlFVOHNTMEZCVFVVc1JVRkJUMVlzUTBGQlR5eEZRVU01UkVZc1JVRkJTU3hQUVVGUExGRkJRMWhsTEVkQlFXZENaQ3hGUVVGSExFOUJRVkZWTEVWQlFVOVVMRU5CUVU4c1JVRkROME5OTEVWQlFWTk5MRVZCUVVzc1RVRkJUU3hEUVVGRExFVkJRM0pDVUN4RlFVRkpMRTFCUVUwc1MwRkJTMDhzUTBGQlNTeERRVU4yUWl4RFFVTkJMRTlCUVVGUUxFVkJRVWtzVFVGQlVTeERRVUZEVGl4RlFVRkhMRTlCUVZGUExFVkJRVkZETEVkQlFVRXNTMEZCUVVFc1JVRkJZMFFzUTBGQlRTeEZRVU0zUTBRc1EwRkRXQ3hEUXpsRFFTeFRRVUZUVXl4SFFVRlhReXhGUVVGTFF5eEZRVUZSUXl4RlFVRlZReXhGUVVGVExFTkJRMmhFTEVsQlFVbERMRVZCUVZVc1IwRkRaQ3hIUVVGSlNpeEZRVUZMTEVOQlEwd3NTVUZCU1Vzc1JVRkJWeXhIUVVOWVF5eEZRVUZOTEVkQlExWXNVVUZCVjBNc1MwRkJVMUFzUlVGQlN5eERRVU55UWl4SFFVRk5MRU5CUVVVc1QwRkJRVkVzUlVGQlVTeExRVUZCUXl4RFFVRkxMRVZCUVVsR0xFVkJRM3BDTEU5QlFWRkZMRVZCUVUwc1EwRkRWaXhKUVVGTExGRkJRMFJLTEVWQlFWY3NSMEZEV0N4TlFVTktMRWxCUVVzc1ZVRkJWeXhEUVVOU1NDeEhRVUZaTEVOQlFVTkhMRWRCUTJKR0xFVkJRVkZKTEVWQlFVOHNaVUZCWjBJc2QwVkJRWGRGTEVWQlF6TkhMRWxCUVUxSExFVkJRVXRHTEVWQlFVOHNWVUZCVlN4RFFVRkRMRWRCUVVzc1NVRkROMEpLTEVWQlIwUkJMRWRCUVZkRkxFVkJRVTFKTEVWQlJtcENUaXhGUVVGVlRTeEZRVWRrU2l4RlFVRk5MRWRCUTA0c1MwRkRTaXhEUVVOQkxFbEJRVXNzVlVGRFIwWXNTVUZEUVVVc1IwRkJUMFVzUjBGRFdFZ3NSVUZCVnl4SFFVTllMRTFCUTBvc1VVRkRTVVlzUlVGQlVVa3NSVUZCVHl4dFFrRkJiMElzWTBGQlkwVXNRMEZCU1N4alFVRmpMRU5CUXpORkxFTkJRMEZTTEVkQlFWVlBMRVZCUVU4c1RVRkRja0lzUTBGRFNpeERRVU5CTEUxQlFVOHNRMEZCUlN4UlFVRkJTaXhGUVVGVExFOUJRVUZJTEVOQlFVOHNRMEZETjBJc1EwTjZRa0VzU1VGQlRWVXNSMEZCVnl3MFJFRkRXRU1zUjBGQlYwTXNSMEZCVlVFc1NVRkJWVUVzUlVGQlRTeFBRVUZUTEdGQlFXVkJMRVZCUVUwc1QwRkJVeXhoUVVOc1JpeFRRVUZUUXl4SFFVRnpRaXhEUVVGRkxGbEJRVUZETEVWQlFXRXNhVUpCUVVGRExFTkJRV2xDTEVWQlFVZERMRVZCUVV0RExFVkJRVWxETEVWQlFWTkRMRVZCUVVzc1EwRllla1lzU1VGQlFVTXNSVUZCUVVNc1JVRlpTU3hKUVVGTlF5eEZRVUZSVEN4RlFVRkhMRTFCUVUwc1UwRkJWeXhKUVVNMVFrMHNSVUZCVTBRc1JVRkJVU3hYUVVGaExHZENRVU01UWtVc1IwRkJZVW9zUlVGQlFVUXNSMEZCUVN4WlFVRkJRU3hGUVVGTExGbEJRVXdzUzBGQlFVTXNSVUZCYlVKRkxFVkJRVkZITEVkQlFWVkRMRWRCUTJ4RVF5eEZRVUZQTEVsQlFVbElMRVZCUVZWU0xFVkJRVWtzVFVGQlRTeEZRVU55UTFjc1JVRkJTeXhMUVVGUExFZEJRMW9zU1VGQlRVTXNSVUZCVTFvc1JVRkJTU3hQUVVObVdTeEpRVU5CV2l4RlFVRkpMRTlCUVZNc1NVRkRZa0VzUlVGQlNTeFJRVU5LUVN4RlFVRkpMRTFCUVZFc1NVRkRhRUlzU1VGQlNXRXNSVUZCVTFvc1JVRkJSeXhQUVVGVFFTeEZRVUZITEUxQlFVMHNUMEZCVHl4UFFVTjZReXhSUVVGVFlTeEZRVUZKTEVWQlFVZEJMRVZCUVVsaUxFVkJRVWNzVFVGQlRTeFBRVUZSTEVWQlFVVmhMRVZCUVVjc1EwRkRkRU1zU1VGQlRVTXNSVUZCVjJRc1JVRkJSeXhOUVVGTllTeERRVUZETEVWQlEzSkNMRU5CUVVVc1RVRkJRVVVzUlVGQlR5eEpRVUZCUXl4RlFVRkxMRWxCUVVGRExFVkJRVXNzVFVGQlFVTXNRMEZCVFN4RlFVRkpTaXhGUVVNM1Frc3NSVUZCVVVNc1IwRkJZVXdzUlVGQlR5eERRVU01UWl4TFFVRk5WQ3hGUVVOT0xGVkJRVmNzYlVKQlExZ3NTMEZCVFZVc1IwRkJRU3hMUVVGQlFTeEZRVUZQUXl4SFFVRkJMRmxCUVVGQkxFVkJRVTBzUjBGRGJrSXNUMEZCUVV3c1JVRkRRU3hSUVVGQldDeEZRVU5CTEdGQlFXTkVMRVZCUVVjc1QwRkRha0lzWlVGQlowSXNSVUZEY0VJc1EwRkJReXhGUVVORUxFZEJRVWtzUTBGQlEyMUNMRVZCUVUwc1RVRkJUeXhEUVVOa0xFZEJRVWtzUTBGQlEwRXNSVUZCVFN4UlFVRlZMRU5CUVVOQkxFVkJRVTBzUzBGQlR5eERRVUZEUml4SFFVRlBMRU5CUVVORExFVkJRVThzUTBGRE0wTk1MRWxCUVUwc1IwRkJTMDBzUlVGQlRTeE5RVU5xUW14Q0xFVkJRVkZyUWl4RlFVRk5MRTFCUVU4c2JVSkJRVzlDTEcxQ1FVRnRRbUlzUTBGQlRTeEZRVUZGTEVWQlF5OUVUeXhGUVVGSllpeEZRVUZITEUxQlFVMHNUMEZCVXl4SFFVTXpRa01zUlVGQlVXdENMRVZCUVUwc1RVRkJUeXh0UWtGQmIwSXNORUpCUVRSQ1lpeERRVUZOTEVWQlFVVXNSVUZETjBWaExFVkJRVTBzVlVGRFJsUXNSVUZCU3l4UlFVTk1RU3hGUVVGTExGTkJRVmM3UVVGQlFTeEZRVUZQVXl4RlFVRk5MRkZCUlRkQ1ZDeEZRVUZMTEZGQlFWVlRMRVZCUVUwc1UwRkZOMEpRTEVWQlFWTlBMRVZCUVUwc1NVRkRaaXhSUVVOS0xFTkJRMGtzUTBGQlEyUXNSMEZCVTA0c1JVRkJTU3hSUVVGUkxGRkJRVlZ6UWl4SFFVRm5Ra3dzUTBGQlJ5eEhRVU51UkdZc1JVRkJVV1VzUlVGRFVpeDVRa0ZCTUVJc2EwVkJRV3RGTEVOQlEzQkhMRU5CUTBFc1IwRkJTVWdzU1VGQlRTeEZRVU5HVFN4RlFVRk5MRTlCUTA1c1FpeEZRVUZSYTBJc1JVRkJUU3hOUVVGUExHMUNRVUZ2UWl4dFFrRkJiVUppTEVOQlFVMHNSVUZCUlN4VlFVZHVSV0VzUlVGQlRTeFBRVU5RYkVJc1JVRkJVV3RDTEVWQlFVMHNUVUZCVHl4bFFVRm5RaXh4UWtGQmNVSmlMRU5CUVUwc1VVRkJVU3hGUVVONFJXRXNSVUZCVFN4UlFVRlRMRU5CUTJZc1NVRkJTVWNzUlVGQmEwSXNSMEZEZEVKRExFVkJRVTBzVVVGQlYwTXNTMEZCVFZRc1JVRkRia0lzVDBGQlVWTXNSVUZCUnl4TFFVRk5MRU5CUTJJc1NVRkJTeXhSUVVOTUxFbEJRVXNzVVVGRFJDeE5RVU5LTEVsQlFVc3NWVUZEUkVZc1JVRkJhMEpGTEVWQlFVY3NUMEZCVHl4VlFVRlZMRU5CUVVNc1JVRkRka01zVFVGQlRVUXNSVUZEVml4UlFVTkpMRTFCUVUxQkxFTkJRMlFzUTBGRlNpeEhRVUZKUkN4RlFVRnBRaXhEUVVOcVFpeEpRVUZKUnl4RlFVRlBaaXhGUVVGTExFMUJRVTFCTEVWQlFVc3NUVUZCVFN4UFFVRlRMRU5CUVVNc1JVRkRka05uUWl4RlFVRlBSQ3hEUVVGSkxFbEJRMWhCTEVkQlFVOXlRaXhGUVVGQmNVSXNSVUZCU3l4UlFVRk1MRXRCUVVGeVFpeEZRVUZqY1VJc1JVRkJTeXhMUVVNeFFrRXNSVUZCU3l4UlFVTk1RU3hGUVVGTExGTkJRVmM3UVVGQlFTeEZRVUZQU0N4RlFVVjJRa2NzUlVGQlN5eFJRVUZWU0N4RlFVTnVRa2dzUlVGQlRTeFJRVUZWUVN4RlFVRk5MRkZCUVZFc1ZVRkJWVWNzUlVGQlowSXNUMEZCVXl4RFFVRkRMRU5CUTNSRkxFTkJRMG9zUTBGRlNpeEhRVUZKTEVOQlFVTnFRaXhIUVVGVExFTkJRVU5aTEVkQlFVOHNRMEZCUTBVc1JVRkJUU3hOUVVGUExFTkJSMmhETEVsQlFVMVJMRVZCUVZsVUxFVkJRMXB5UWl4RlFVRlpSU3hGUVVGTGJVSXNSVUZCVDBNc1JVRkJUMnhDTEVOQlFVOHNSVUZEZEVOSUxFVkJRV2xDUXl4RlFVRkxiMElzUlVGQlRTeEpRVUZMUml4RlFVRkxMRXRCUVUxRkxFVkJRVTlzUWl4RFFVRlBMRVZCUTJoRlV5eEZRVUZMTEUxQlFVMHNTMEZCUzJsQ0xFTkJRVk1zUlVGRGVrSm1MRVZCUVZObExFVkJRVlVzVFVGQlRTeERRVUZETEVWQlEzUkNha01zUjBGQlVYZENMRU5CUVVzc1IwRkRZbXBDTEVWQlFWRXdRaXhGUVVGVkxFMUJRVThzWjBKQlFXbENiRU1zUlVGQlVTeERRVU14UkN4TFFVTkxMRU5CUjBSTkxFVkJRVWtzVFVGQlVTeEhRVU5hTEVsQlFVMDJRaXhGUVVGWFZDeEZRVUZOTEVsQlEycENWU3hGUVVGVllpeEZRVU5XYmtJc1JVRkJXVVVzUlVGQlMybENMRVZCUVV0SExFVkJRVTlzUWl4RFFVRlBMRVZCUTNCRFNDeEZRVUZwUWtNc1JVRkJTelpDTEVWQlFWVmlMRVZCUVU4c1MwRkJUVWtzUlVGQlQyeENMRU5CUVU4c1JVRkROMFJRTEVkQlFWRnpRaXhEUVVGSExFZEJRMWhtTEVWQlFWRTBRaXhGUVVGUkxFMUJRVThzWjBKQlFXbENjRU1zUlVGQlVTeEZRVU53UkUwc1JVRkJTU3hOUVVGUkxFZEJSVm9zU1VGQlRTdENMRVZCUVdGV0xFZEJRV0ZJTEVkQlFVRXNTMEZCUVVFc1JVRkJUeXhEUVVGRExFVkJRVWNzUTBGRGRrTXNTMEZCVFZnc1JVRkRUaXhWUVVGWExHZENRVU5ZTEV0QlFVMVpMRVZCUTA0c1QwRkJVVmNzUlVGQlVTeE5RVUZOTEVOQlFVTXNSVUZEZGtJc1VVRkJRVFZDTEVWQlEwRXNZVUZCWTBRc1JVRkJSeXhQUVVOcVFpeGxRVUZuUWl4RlFVTndRaXhEUVVGRExFVkJRMFFzUjBGQlNUaENMRVZCUVZjc1QwRkRXQ3hIUVVGSkxFTkJRVU42UWl4SFFVRlRMRU5CUVVOakxFVkJRVTBzVDBGQlUzQkNMRVZCUVVrc1VVRkJVU3hQUVVGUkxFTkJRemxETEVkQlFVbHJRaXhGUVVOQkxGRkJRVmRQTEV0QlFVMVFMRVZCUVVzc1EwRkRiRUlzUjBGQlNVOHNTVUZCVDAwc1JVRkJWeXhOUVVOc1FpeE5RVU5LTEVkQlFVbE9MRVZCUVVjc1QwRkJVeXhWUVVGWExFTkJRM1pDZGtJc1JVRkJVWFZDTEVWQlFVa3NlVUpCUVRCQ0xHdEZRVUZyUlN4RlFVTjRSeXhMUVVOS0xFTkJRMG9zUTBGRFFVd3NSVUZCVFN4TlFVRlJWeXhGUVVGWExFMUJRVTBzVDBGQlV5eE5RVU40UXpkQ0xFVkJRVkUyUWl4RlFVRlhMRTFCUVU4c2MwSkJRWFZDTERaR1FVRTJSaXhEUVVOMFNpeFBRVVZMV2l4SlFVTkVMRmRCUVZsQkxFZEJRVk5CTEVWQlFVMHNVVUZCVlVFc1JVRkJUU3hQUVVGUExFTkJRVU1zU1VGQlRTeEpRVU42UkdwQ0xFVkJRVkZwUWl4RlFVRlBMR1ZCUVdkQ0xEUkNRVUUwUWxvc1EwRkJUU3hGUVVGRkxFVkJSVzVGVEN4RlFVRlJOa0lzUlVGQlZ5eE5RVUZQTEdWQlFXZENMREJDUVVFd1FuaENMRU5CUVUwc1VVRkJVU3hIUVVjeFJpeEpRVUZOY1VJc1IwRkJXVlFzUlVGRFduSkNMRVZCUVZsRkxFVkJRVXR0UWl4RlFVRlBXU3hGUVVGWk4wSXNRMEZCVHl4RlFVTXpRelpDTEVWQlFWY3NUVUZEVUdoRExFVkJRV2xDUXl4RlFVRkxLMElzUlVGQlZ5eEpRVUZMWWl4RlFVRkxMRXRCUVUxaExFVkJRVmszUWl4RFFVRlBMRVZCUTNCRkxFdEJRMDR3UWl4SFFVTkpha01zUjBGQlVYZENMRU5CUVVzc1IwRkRZbXBDTEVWQlFWRXdRaXhIUVVGVkxFMUJRVThzWjBKQlFXbENiRU1zUlVGQlVTeEZRVVZxUkhGRExFVkJRVmNzVlVGRFdrUXNSVUZCVVN4UlFVTlNRU3hGUVVGUkxGTkJRVmM3UVVGQlFTeEZRVUZQUXl4RlFVRlhMRkZCUlhKRFJDeEZRVUZSTEZGQlFWVkRMRVZCUVZjc1UwRkZja01zU1VGQlRVTXNSMEZCVHl4SlFVRkpReXhIUVVGTFNDeEZRVUZUUml4RlFVRlRMRVZCUjNoRExFZEJSa2sxUWl4RlFVRkpMRkZCUVZFc2JVSkJRMXBuUXl4SFFVRkxMRk5CUVZkcVFpeEhRVU5vUWxRc1JVRkJUeXhEUVVOUUxFbEJRVTAwUWl4RlFVRk5ka0lzUlVGRFVuZENMRWRCUVZsdVF5eEZRVUZMYTBNc1JVRkJTU3hOUVVGUFNpeERRVUZQTEVkQlEyNUROVUlzUlVGQlVUSkNMRVZCUVZVc1owSkJRV2xDTEhsQ1FVRjVRaXhGUVVOb1JVc3NSVUZCU1N4TlFVRk5MRXRCUVV0R0xFVkJRVWtzUTBGRGRrSXNTMEZEU3l4RFFVTkVMRWxCUVUxRkxFVkJRVTBzU1VGQlNYcENMRWRCUVZGVUxFVkJRVWtzVFVGQlRTeEZRVU5zUTJ0RExFVkJRVWtzUzBGQlR5eEhRVU5ZUVN4RlFVRkpMRTFCUVUwc1MwRkJTMFlzUlVGQlNTeEZRVU51UWl4SlFVRk5TU3hIUVVGWlVpeEpRVUZCTEV0QlFVRkJMRWRCUVdGRkxFZEJRVk1zVFVGRGVFTkpMRVZCUVVrc1RVRkJVU3hEUVVGRFNpeEZRVUZSTEUxQlFVMHNRMEZCUXl4RlFVRkhUU3hGUVVGVExFTkJRVU1zUlVGQlIwRXNSVUZCVXl4RFFVRkRMRU5CUVVNc1JVRkRka1I2UWl4RlFVRkxMRTFCUVUwc1MwRkJTM1ZDTEVOQlFVY3NRMEZEZGtJc1EwRkRRWEpDTEVWQlFWTmxMRWRCUVZsQkxFZEJRVlVzVFVGQlRTeERRVUZETEVWQlFVbEhMRVZCUVZjc1IwRkRla1FzUTBGRFNpeERRVU5CTEVsQlFVMU5MRVZCUVdNdlFpeEZRVUZSTEVsQlFVMHNTVUZETlVJc1EwRkJRMmRETEVWQlFVa3NSMEZCUjBNc1EwRkJSU3hGUVVGSmRFTXNSVUZCUnl4SlFVTnVRblZETEVWQlFWRXpRaXhGUVVOYUxFZEJRVWw1UWl4SFFVRk5RU3hGUVVGSExGTkJRVmRFTEVWQlEzQkNSeXhGUVVGUlJpeEZRVUZITEU5QlFWTkJMRVZCUVVjc1QwRkJUeXhYUVVNM1FpeERRVU5FTEVsQlFVMUhMRVZCUVU5c1F5eEZRVUZQTEVOQlFVTXNSVUZCUlN4WlFVRlpMRVZCUVVsQkxFVkJRVThzVlVGQlZTeERRVUZETEVWQlEyNUViVU1zUlVGQlRUbENMRVZCUTA0c1IwRkJSelpDTEVOQlFVa3NiMEpCUVc5Q1NpeERRVUZYTEVkQlEzUkRMRWRCUVVkSkxFTkJRVWtzY1VWQlFYRkZTaXhEUVVGWExFZEJRemRHYmtNc1JVRkJVVmNzUlVGQlVVUXNSVUZCVXl4bFFVRnBRaXhoUVVGak9FSXNRMEZCUnl4RlFVTjJSRW9zUjBGQlRVRXNSVUZCUnl4UFFVRlBMRk5CUVZjc1IwRkRNMEpETEVWQlFVY3NVVUZCVVVRc1EwRkJSU3hEUVVOeVFpeERRVU5CTEVkQlFVbERMRVZCUVVjc1QwRkJVeXhGUVVGSExFTkJRMllzU1VGQlRVa3NSVUZCVFVNc1IwRkJWMHdzUlVGQlNVTXNSVUZCVDNoRExFVkJRVWtzVVVGQlVTeFBRVUZSUlN4RFFVRlBMRVZCUTNwRWVVTXNSVUZCU1N4VlFVTkJhRU1zUlVGQlN5eFJRVU5NUVN4RlFVRkxMRk5CUVZjN1FVRkJRU3hGUVVGUFowTXNSVUZCU1N4UlFVVXpRbWhETEVWQlFVc3NVVUZCVldkRExFVkJRVWtzVTBGRk0wSm9ReXhGUVVGTExFMUJRVkVzUTBGQlExWXNSVUZCUnl4UFFVRlJkVU1zUlVGQlQwY3NSVUZCU1N4TlFVRk5MRU5CUXpsRExFMUJSVWxvUXl4RlFVRkxMRTFCUVZFc1EwRkJRMVlzUlVGQlJ5eFBRVUZSZFVNc1JVRkJUMEVzUTBGQlN5eEZRVVY2UXl4UFFVRlBOMElzUTBGRFdDeERRM0JOUVN4VFFVRlRhME1zUjBGQmEwSkRMRVZCUVVsRExFVkJRVXRETEVWQlFVOURMRVZCUVZORExFVkJRVk5ETEVWQlFVc3NRMEZET1VRc1NVRkJUVU1zUlVGQlQwb3NSVUZCVFN4UFFVRlRMRmxCUTNSQ1N5eEhRVUZuUWxBc1JVRkJTVU1zUlVGQlMwTXNSVUZCVDBNc1JVRkJVMFVzUTBGQlJ5eEZRVU0xUTBnc1JVRkJUU3hQUVVGVExGbEJRMWhOTEVkQlFXZENVaXhGUVVGSlF5eEZRVUZMUXl4RlFVRlBReXhGUVVGVFJTeERRVUZITEVWQlF6VkRTU3hIUVVGelFsUXNSVUZCU1VNc1JVRkJTME1zUlVGQlQwTXNSVUZCVTBVc1EwRkJSeXhGUVVOMFJFc3NSVUZCVDBvc1JVRkJTeXhaUVVkc1FpeFBRVUZKUml4SlFVRlpMRXRCUVU5QkxFbEJRVmxOTEVWQlFVc3NVMEZEY0VOS0xFVkJRVXNzU1VGQlRVa3NSVUZCU3l4UlFVTlVTaXhKUVVWUVJpeEpRVU5CUlN4RlFVRkxMRWxCUVUxR0xFZEJRMUpGTEVWQlExZ3NRMEZEUVN4VFFVRlRTeXhIUVVGclFsZ3NSVUZCU1VNc1JVRkJTME1zUlVGQlQxVXNSVUZCVDFRc1JVRkJVeXhEUVhwQ00wUXNTVUZCUVZVc1JVRkJRVU1zUlVFd1Fra3NTVUZCVFVNc1JVRkJWMGdzUlVGQlRTeEpRVU5xUWxJc1JVRkJWMWNzUlVGRldHUXNSVUZCU1N4WFFVRlhMRkZCUVZGakxFVkJRVk1zVDBGQlVVTXNSMEZCVDJJc1JVRkJVVmtzUlVGQlZTeHhRa0ZCYzBKRExFTkJRVWNzUTBGQlF5eEZRVVF6Uml4TFFVVk9MRWRCUVVsa0xFVkJRVTBzVDBGQlV5eFpRVUZoTEVOQlF6VkNMRWRCUVUwc1EwRkJSU3hQUVVGQlpTeEZRVUZSTEdsQ1FVRnJRa01zUTBGQlJ5eEZRVUZKVGl4RlFVTnVRMDhzUlVGQlYwWXNSMEZCVlVZc1JVRkRja0pGTEVWQlFVOHNUMEZCVTBZc1JVRkJVeXhQUVVOeVFrVXNSVUZEUVVZc1JVRkRTRVVzUjBGQlFTeExRVUZCUVN4RlFVRlZSaXhGUVVOaVNTeEpRVUZoTEVOQlFVTkVMRWRCUVUxQkxFVkJRVWNzVDBGQlUwTXNSVUZCVXl4VFFVVjZRMmhDTEVWQlFWRm5RaXhGUVVGVkxHVkJSRVlzTkVOQlEzbENMRU5CUldwRUxFTkJRMEVzU1VGQlRVTXNSVUZCVld4Q0xFVkJRVTBzVDBGQlV5eFpRVU42UWl4TlFVTkJRU3hGUVVGTkxFOUJRVk1zV1VGRFdDeE5RVU5CUVN4RlFVRk5MRTFCUVUwc1UwRkJWeXhKUVVOdVFpeE5RVU5CTEUxQlIyUXNSMEZCU1N4RFFVRkRZU3hIUVVORUxFTkJRVU5ZTEVkQlEwUkJMRWxCUVZrc1MwRkRXRUVzU1VGQldXbENMRWRCUVZFc1UwRkJWMFFzU1VGQldTeFBRVU16UTJoQ0xFbEJRVmxyUWl4SFFVRlJMRk5CUVZkR0xFbEJRVmtzVFVGRE5VTXNUMEZCVDNKQ0xFZEJRV3RDUXl4RlFVRkpReXhGUVVGTFF5eEZRVUZQUXl4RlFVRlRReXhEUVVGUExFVkJSVGRFTEVsQlFVbERMRVZCUVUxS0xFVkJRVWtzVDBGQlR5eExRVUZMTEV0QlFVdHpRaXhIUVVGTFFTeEZRVUZGTEUxQlFWRnVRaXhIUVVGWGJVSXNSVUZCUlN4aFFVRmxTQ3hEUVVGUExFVkJRMnBHTEVkQlFVa3NRMEZCUTJZc1JVRkJTeXhEUVVOT0xFbEJRVTF0UWl4RlFVRkxka0lzUlVGQlNTeFBRVUZQTEZWQlFWVkhMRU5CUVU4c1JVRkRka01zUjBGQlNXOUNMRWRCUVUxQkxFVkJRVWNzWVVGQlpVb3NSVUZEZUVKdVFpeEZRVUZKTEU5QlFVOHNTMEZCU3l4TFFVRkxMRTlCUVU4c1QwRkJUeXhEUVVGRExFVkJRVWQxUWl4RlFVRkpMRU5CUVVVc1VVRkJVeXhGUVVGTkxFTkJRVU1zUTBGQlF5eEZRVU01Ukc1Q0xFVkJRVTF0UWl4TlFVZE9MRkZCUVVsQkxFZEJRVUVzVFVGQlFVRXNSVUZCU1N4WFFVTktja0lzUlVGQlVWa3NSVUZCVlN4elFrRkJkVUlzUjBGQlIxTXNSVUZCUnl4SFFVRkhMR0ZCUVdGS0xFTkJRVThzTkVKQlFUUkNTU3hGUVVGSExGVkJRVlVzUjBGQlNTeEZRVUZKTEVWQlIzWklja0lzUlVGQlVWa3NSVUZCVlN4eFFrRkJjMElzYlVKQlFXMUNXQ3hEUVVGUExFZEJRVWtzUlVGQlNTeEZRVVYyUlV3c1IwRkJhMEpETEVWQlFVbERMRVZCUVV0RExFVkJRVTlETEVWQlFWTkRMRU5CUVU4c1EwRkZha1VzUTBGRFFTeEpRVUZOUlN4RlFVRlBVQ3hIUVVGclFrTXNSVUZCU1VNc1JVRkJTME1zUlVGQlQwTXNSVUZCVTBNc1JVRkJVME1zUTBGQlJ5eEZRVU01Ukc5Q0xFZEJRVTFZTEVkQlFVRkVMRVZCUVVGU0xFVkJRVWtzVlVGQlNpeFpRVUZCVVN4RlFVRkJMRXRCUVVGU0xFVkJRV05ETEVWQlFVMVZMRWRCUVU5aUxFVkJRVkZaTEVWQlFWVXNjVUpCUVhOQ1F5eERRVUZITEVWQlFVZG1MRVZCUVVrc1YwRkJOMFVzUzBGQlFXRXNSVUZCZVVaU0xFVkJReTlHYjBJc1JVRkJUME1zUlVGQlQwWXNRMEZCUnl4RlFVTnFRa0VzUlVGRFFTeEpRVUZKUnl4RlFVRlBTQ3hEUVVGSExFVkJRM0JDTEU5QlFVRkRMRVZCUVVzc1RVRkJVWEJDTEVWQlFVc3NUVUZEYkVKdlFpeEZRVUZMTEVsQlFVMTBRaXhGUVVOUVF5eEhRVUZCTEUxQlFVRkJMRVZCUVVzc1UwRkRUSEZDTEVWQlFVc3NUMEZCVTNKQ0xFVkJRVWtzVVVGRFpuRkNMRU5CUTFnc1EwTnVSa0VzVTBGQlUwY3NSMEZCYlVKRExFVkJRVXRETEVWQlFWRkRMRVZCUVZNc1EwRkRPVU1zU1VGQlRVTXNSVUZCVVVZc1JVRkJUeXhQUVVObVJ5eEZRVUZUUXl4SFFVRjFRa29zUlVGQlVVUXNSVUZCU1N4UlFVRlJMRTlCUVZGRkxFTkJRVThzUlVGRGVrVXNSMEZCU1N4RFFVRkRSU3hGUVVORUxFMUJRVThzUTBGQlJTeE5RVUZQTEVkQlFVa3NTMEZCVFN4TFFVRk5MRkZCUVZNc1IwRkJTU3hOUVVGUExFTkJRVU5FTEVWQlFVOUJMRVZCUVU5QkxFTkJRVXNzUTBGQlJTeEZRVU01UlN4SlFVRk5SeXhGUVVGUFJpeEZRVUZQTEU5QlFWTXNTVUZCVFVjc1JVRkJUeXhoUVVGbFFTeEZRVUZQTEdOQlF6RkVReXhGUVVGUlVDeEZRVUZQTEU5QlFWTlJMRWRCUVZkU0xFVkJRVThzVFVGQlRTeEZRVUZKTEVOQlFVTXNSVUZGZGtSVExFVkJRV0ZHTEVWQlFVMHNUMEZEZGtJc1VVRkJVMGNzUlVGQlNVZ3NSVUZCVFN4UFFVRlRMRVZCUVVkSExFZEJRVXNzUlVGQlJ5eEZRVUZGUVN4RlFVRkhMRU5CUTNoRExFbEJRVTFETEVWQlFWVktMRVZCUVUxSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlF6RkNMRWRCUVVsRExFbEJRVmtzU1VGQlRVRXNTVUZCV1N4TFFVTTVRa1lzUlVGQllVTXNUVUZGWWl4TlFVTlNMRU5CUlVFc1IwRkJTVVFzU1VGQlpTeEZRVUZITEVOQlEyeENMRWxCUVUxSExFVkJRVkZVTEVWQlFVOHNVVUZCVlN4TFFVRlBTU3hGUVVGTkxFOUJRVk1zUlVGREwwTTdRVUZCUVN4RlFVRkxMRTlCUVU4c1MwRkJTeXhKUVVGSkxFVkJRVWRCTEVWQlFVMHNUMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkRla01zUjBGRFJrMHNSVUZCVFZnc1JVRkJVVU1zUlVGQlR5eFBRVU42UWl4UFFVRkpTQ3hGUVVGUExGTkJRMUJoTEVkQlFVOWlMRVZCUVU4c1QwRkJUeXhSUVVOc1FpeERRVUZGTEUxQlFVRlpMRVZCUVU4c1MwRkJRVkFzUlVGQlRTeFJRVUZUUml4RlFVRlBMRkZCUVZNc1RVRkJUeXhEUVVGRFJDeEZRVUZQVnl4RlFVRkxRU3hEUVVGSExFTkJRVVVzUTBGRE5VVXNRMEZGUVN4SlFVRkpReXhGUVVGaFpDeEZRVUZQTEU5QlFWTkhMRVZCUVU4c1QwRkRjRU5aTEVWQlFWTm1MRVZCUVU4c1QwRkJVMGNzUlVGQlR5eFBRVU5vUTJFc1JVRkJaU3hGUVVOdVFpeFJRVUZUVGl4RlFVRkpMRVZCUVVkQkxFVkJRVWxFTEVWQlFWa3NSVUZCUlVNc1JVRkJSeXhEUVVOcVF5eEhRVUZOTEVOQlFVTlBMRVZCUVZGT0xFTkJRVThzUlVGQlNVb3NSVUZCVFVjc1EwRkJReXhGUVVOcVF5eEhRVUZKUXl4SlFVRlpMRWxCUVUxQkxFbEJRVmtzUzBGRE1VSlNMRVZCUVU4c1UwRkJWeXhIUVVGTFl5eEZRVUZQTEU5QlFWTklMRWxCUTNaRFFTeEZRVUZoUnl4RlFVRlBMRmxCUlhaQ0xFTkJRMGRCTEVWQlFVOHNUMEZCVTBnc1IwRkZhRUppTEVWQlFWRmpMRVZCUVZORkxFVkJRVThzVDBGQlVTeGxRVVJvUWl4cFIwRkRkVU1zUlVGRmRrUmtMRVZCUVU4c1UwRkJWeXhKUVVOc1FsY3NSVUZCWVVjc1JVRkJUeXhSUVVONFFrUXNSVUZCWlU0c1JVRkRXRWtzU1VGQlpTeEhRVUZMTEVOQlFVTm1MRVZCUVVrc1VVRkZla0pGTEVWQlFWRmpMRVZCUVZFc1lVRkVRU3h4UkVGRGNVSXNSVUZGZWtNc1MwRkRTaXhEUVVOQlFTeEhRVUZWUlN4RlFVRlBMRTlCUVZOT0xFVkJRVkVzVDBGQlV5eERRVU12UXl4RFFVVkJMRkZCUVZORUxFVkJRVWxJTEVWQlFVMHNUMEZCVXl4RlFVRkhSeXhIUVVGTFJDeEZRVUZaTEVWQlFVVkRMRVZCUXpGRFNDeEZRVUZOUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVk5KTEVsQlEzSkNUQ3hGUVVGaFF5eEZRVUZKTEVkQlJYcENMRWxCUVVsRkxFVkJRVkVzUjBGRFVrMHNSVUZCVFN4SFFVTk9ReXhGUVVGdFFpeEhRVVYyUWl4UlFVRlRWQ3hGUVVGSkxFVkJRVWRCTEVWQlFVbE5MRVZCUVdNc1JVRkJSVTRzUlVGRGFFTkZMRWRCUVZOTUxFVkJRVTFITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1RVRkJUVWtzUTBGQlZTeEZRVUZKTzBGQlFVRXNSVUZETjBNc1VVRkJVMG9zUlVGQlNVMHNSVUZCWTA0c1JVRkJTVVFzUlVGQldTeEZRVUZGUXl4RlFVRkhMRU5CUXpWRExFZEJRVWtzUTBGQlEwOHNSVUZCVVU0c1EwRkJUeXhGUVVGSlNpeEZRVUZOUnl4RFFVRkRMRVZCUXk5Q1N5eEhRVUZWUlN4RlFVRlBMRTlCUVZOT0xFVkJRVkVzVDBGQlV5eEZRVU16UXl4SlFVRk5VeXhGUVVGUFZDeEZRVUZSUVN4RlFVRlJMRTlCUVZNc1EwRkJReXhKUVVGTkxFdEJTVGRETEVkQlNFbFRMRWxCUTBGVUxFVkJRVlZCTEVWQlFWRXNUVUZCVFN4RlFVRkhMRVZCUVVVc1IwRkZOMEpCTEVkQlFWZE5MRVZCUVU4c1QwRkJVMGdzUlVGQldTeERRVWwyUXl4SlFVRk5UeXhGUVVGVkxESkVRVWhLYkVJc1JVRkJUeXhQUVVOaUxHbERRVU5CTEZsQlEzZEZMRWRCUXpsRlJpeEZRVUZSWXl4RlFVRlRTaXhGUVVGUkxGRkJRVlZUTEVWQlFVOHNSVUZCU1N4SFFVRkpMR0ZCUVdORExFTkJRVThzUlVGRGRrVktMRVZCUVZNc1JVRkRZaXhEUVVOSldpeEpRVUZUUXl4RlFVRlBMR1ZCUTJoQ1RTeEhRVUZUVFN4RlFVRk5SQ3hGUVVGUExFMUJRVTFJTEVOQlFWVXNSVUZCU1Vnc1JVRkRNVU5QTEVWQlFVMDdRVUZCUVN4SFFVVkVSQ3hGUVVGUExFOUJRVk5JTEVkQlFXTklMRVZCUVZFc1EwRkJReXhKUVVGTkxFdEJSVGxEVHl4SlFVRlJMRWxCUTFKQkxFVkJRVTA3UVVGQlFTeEZRVU5FTEVOQlFVTkRMRWRCUVc5Q1JDeEpRVUZSTzBGQlFVRXNTVUZEYkVOQkxFVkJRVTA3UVVGQlFUdEJRVUZCTEVkQlExWk9MRWRCUVZOTkxFVkJRVTFFTEVWQlFVOHNUVUZCVFVnc1EwRkJWU3hGUVVGSlNDeEZRVU14UTA4c1JVRkJUVHRCUVVGQkxFVkJRMDVETEVWQlFXMUNMRWxCUldSU0xFbEJRVmtzUjBGRllrOHNTVUZCVVR0QlFVRkJMRVZCUTFKT0xFZEJRVk03UVVGQlFTeEZRVVZVVFN4RlFVRk5PMEZCUVVFc1IwRkhWazRzUjBGQlUwMHNSVUZCVFZBc1JVRkRaazhzUlVGQlRTeEpRVU5PUXl4RlFVRnRRaXhIUVVVelFpeERRVU5CTEU5QlFWRm9RaXhGUVVGUExFMUJRVThzUTBGRGJFSXNTVUZCU3l4SlFVTkVMRTFCUTBvc1NVRkJTeXhKUVVORUxGRkJRVk5QTEVWQlFVbEVMRVZCUVZsRExFVkJRVWxJTEVWQlFVMHNUMEZCVVN4RlFVRkZSeXhGUVVONlEwVXNSMEZCVXp0QlFVRkJMRVZCUVU5TUxFVkJRVTFITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1RVRkJUVWtzUTBGQlZTeEZRVU0xUTBZc1JVRkJUVUVzUlVGQlRTeFBRVUZUTEVOQlFVTXNTVUZCVFR0QlFVRkJMRWxCUXpWQ1FTeEhRVUZUTzBGQlFVRXNSMEZEWWl4TlFVTktMRkZCUTBsQkxFZEJRVk03UVVGQlFTeERRVU5xUWl4RFFVTkJMRWxCUVUxRExFVkJRVTFZTEVWQlFWRkRMRVZCUVU4c1QwRkJVMGdzUlVGQlR5eFBRVUZQTEU5QlEyeEVMRTFCUVU4c1EwRkJSU3hOUVVGQldTeEZRVUZQTEV0QlFVRlFMRVZCUVUwc1VVRkJVMFlzUlVGQlR5eFJRVUZUTEUxQlFVOHNRMEZCUTBRc1JVRkJUMWNzUlVGQlMwRXNRMEZCUnl4RFFVRkZMRU5CUXpWRkxFTkJRMEVzVTBGQlUxUXNSMEZCZFVJc1EwRkJSU3hQUVVGQlZ5eEZRVUZSTEUxQlFVRlBMRU5CUVUwc1JVRkJSME1zUlVGQlVYUkNMRVZCUVZNc1EwRkZhRVVzUjBGQlNYRkNMRVZCUVUwc1EwRkJReXhGUVVGRkxFOUJRVk1zYzBKQlEyeENMRTlCUVVGeVFpeEZRVUZSY1VJc1JVRkJUU3hEUVVGRExFVkJRVWNzWVVGQll5d3JRa0ZCSzBJc1JVRkRlRVFzUzBGRldDeEhRVUZOTEVOQlFVVXNUMEZCUVVVc1EwRkJUeXhGUVVGSlJpeEZRVUZOTEVOQlFVTXNSVUZEY0VKSExFVkJRVTlFTEVWQlFVOHNRMEZCUXl4RlFVTnFRbEFzUlVGQlV5eEZRVU5VVXl4RlFVRlJMRWRCUTFKRExFVkJRVkVzUjBGRFdpeFJRVUZUYWtJc1JVRkJTU3hGUVVGSFFTeEZRVUZKWXl4RlFVRlBMRTlCUVZFc1JVRkJSV1FzUlVGQlJ5eERRVU53UXl4SlFVRk5hMElzUlVGQlMwb3NSVUZCVDJRc1EwRkJReXhGUVVOdVFpeEhRVUZKTEVOQlFVTm5RaXhKUVVGVlJTeEpRVUZQTEV0QlFVOUJMRWxCUVU4c1MwRkRhRU5HTEVWQlFWRkZMRTFCUTFBc1EwRkRSQ3hKUVVGTlF5eEZRVUZKTEU5QlFVOUVMRU5CUVVVc1JVRkRaaXhEUVVGRFdDeEhRVUZWV1N4RlFVTllXaXhGUVVGVFdTeEZRVU5LUml4SlFVRlZMRXRCUTJaQkxFVkJRVkZhTEVWQlFWTk1MRVZCUTNwQ0xFTkJRMG9zUTBGRFNXbENMRWxCUVZVc1NVRkRWakZDTEVWQlFWRXdRaXhGUVVGUExHMUNRVUZ2UWl4clJFRkJhMFJJTEVOQlFVMHNSVUZCUlN4RlFVTnFSeXhKUVVGSlRTeEZRVUZYTEVkQlExaERMRVZCUVZVc1IwRkRWa01zUlVGQlUxSXNSVUZCVHl4UFFVTndRaXhSUVVGVFpDeEZRVUZKTEVWQlFVZEJMRVZCUVVsWkxFVkJRVTBzVDBGQlVTeEZRVUZGV2l4RlFVRkhMRU5CUTI1RExFbEJRVTExUWl4RlFVRlJXQ3hGUVVGTldpeERRVUZETEVWQlEzSkNMRTlCUVZGMVFpeEZRVUZOTEV0QlFVMHNRMEZEYUVJc1NVRkJTeXhSUVVORVNDeEZRVUZYTEVkQlJXWXNTVUZCU3l4VlFVTkVSU3hIUVVGVlF5eEZRVUZOTEU5QlFVOHNUMEZEZGtJc1RVRkRTaXhKUVVGTExGVkJRMGRXTEVkQlFWVXNRMEZCUTA4c1IwRkZXRGRDTEVWQlFWRm5ReXhGUVVGUExHVkJSRU1zZDBWQlEzTkNMRVZCUlRGRFJDeEhRVUZWUXl4RlFVRk5MRTlCUVU4c1QwRkRka0pHTEVWQlFWVkZMRVZCUVUwc1QwRkJUeXhWUVVGVkxFTkJRVU1zUlVGRGJFTXNUVUZEU2l4SlFVRkxMRkZCUTBSb1F5eEZRVUZSWjBNc1JVRkJUeXh0UWtGQmIwSkJMRVZCUVUwc1QwRkJUeXhGUVVOb1JFUXNSMEZCVlVNc1JVRkJUU3hQUVVGUExFOUJRM1pDTEUxQlJVb3NVVUZCVXl4RFFVTk1MRWxCUVUxYUxFVkJRVlVzTkVOQlFUUkRXU3hGUVVGTkxFbEJRVWtzUjBGRGRFVm9ReXhGUVVGUlowTXNSVUZCVHl4dFFrRkJiMEphTEVOQlFVOHNSVUZETVVNc1NVRkJUV0VzUlVGQlMwUXNSVUZCVFN4UFFVTmlReXhIUVVGTkxFOUJRVTlCTEVkQlFVOHNWMEZEY0VKR0xFZEJRVlZGTEVWQlFVY3NUMEZEY2tJc1EwRkRTaXhEUVVOS0xFTkJRMEVzVFVGQlR5eERRVUZGTEV0QlFVRlVMRVZCUVUwc1QwRkJRVklzUlVGQlVTeE5RVUZCVXl4RlFVRlBMRkZCUVVGTExFVkJRVk1zVDBGQlFVTXNRMEZCVHl4RFFVTnNSQ3hEUVVWQkxGTkJRVk40UWl4SFFVRlhaMElzUlVGQlVTeERRVU40UWl4SlFVRk5WeXhGUVVGUldDeEZRVUZQTEUxQlFVMHNVVUZCVVN4RlFVTTNRbGtzUlVGQlVVUXNSVUZCVFN4RFFVRkRMRVZCUTJaRkxFVkJRVWxFTEVWQlFVMHNUVUZCVFN4UFFVRlBMRVZCU1haQ04wSXNSVUZCVVN4RFFVaEJPRUlzUjBGQlFTeE5RVUZCUVN4RlFVRkpMRWRCUTFvc1EwRkJRMEVzUlVGQlJTeERRVUZETEVWQlFVZEVMRVZCUVUwc1RVRkJUVU1zUlVGQlJTeERRVUZETEVWQlFVVXNUVUZCVFN4RFFVRkRMRVZCUXk5Q0xFTkJRVU1zUjBGQlNVUXNRMEZCU3l4RFFVTkpMRVZCUTNCQ0xGRkJRVk14UWl4RlFVRkpMRVZCUVVkQkxFVkJRVWw1UWl4RlFVRk5MRTlCUVZGNlFpeEhRVUZMTEVWQlEyNURTQ3hGUVVGTkxFdEJRVXNzUTBGQlF6UkNMRVZCUVUxNlFpeERRVUZETEVWQlFVZDVRaXhGUVVGTmVrSXNSVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVOMlF5eFBRVUZQU0N4RFFVTllMRU5EYUUxQkxGTkJRVk1yUWl4SFFVRnJRa01zUlVGQlVVTXNSVUZCVVVNc1JVRkJVeXhEUVVOb1JDeEhRVUZOTEVOQlFVVXNUMEZCUVVNc1JVRkJVU3hMUVVGQlF5eEZRVUZOTEU5QlFVRkRMRVZCUVZFc1NVRkJRVU1zUTBGQlNTeEZRVUZKVGl4RlFVTnNRMDhzUlVGRFFVTXNSVUZEUlVNc1JVRkJWeXhEUVVGRFF5eEZRVUZMUXl4RlFVRk5ReXhKUVVGUlZpeEZRVUZSUXl4RlFVRlRUeXhGUVVGTFF5eEZRVUZOUXl4RFFVRkhMRVZCUTNCRkxFOUJRVkZTTEVWQlFVMHNRMEZEVml4SlFVRkxMRk5CUTBSSExFVkJRVkZOTEVWQlFVOHNUVUZEWmt3c1JVRkJVVTBzUjBGQlYxUXNSVUZCVVVrc1EwRkJVU3hGUVVOdVF5eE5RVU5LTEVsQlFVc3NkVUpCUTBSR0xFVkJRVkZOTEVWQlFVOHNZVUZEWmt3c1JVRkJVVThzUjBGQmEwSldMRVZCUVZGSkxFTkJRVkVzUlVGRE1VTXNUVUZEU2l4SlFVRkxMSFZDUVVORVJpeEZRVUZSVFN4RlFVRlBMR0ZCUTJaTUxFVkJRVkZSTEVkQlFXdENXQ3hGUVVGUlNTeERRVUZSTEVWQlF6RkRMRTFCUlVvc1VVRkRTU3hQUVVGQlVDeEZRVUZSUml4RlFVRlJMRzFDUVVGdlFpdzBRMEZCTkVOSkxFTkJRVWtzUlVGQlJTeEZRVU12UlN4RFFVTklMRTFCUVU4c1IwRkRVQ3hMUVVGTkxFdEJRMDRzVVVGQlV5eEhRVU5VTEUxQlFVOHNRMEZCUTBRc1JVRkJVVUVzUlVGQlUwVXNSVUZCVHl4UFFVRlJSaXhGUVVGVFJTeEZRVUZQTEUxQlFVMHNRMEZEYkVVc1EwRkRVaXhEUVVOQkxFbEJRVTFaTEVWQlFWZGtMRVZCUVZORkxFVkJRVThzVDBGRE0wSmhMRVZCUVV0RExFZEJRVmRpTEVWQlFVdFhMRVZCUVZWb1FpeEZRVUZSUXl4RFFVRlBMRVZCUTNCRUxFMUJRVThzUTBGRFNDeE5RVUZCVFN4RlFVTkJMRXRCUVUxRUxFVkJRMDRzVVVGQlUxY3NSVUZCUnl4UlFVTmFMRTFCUVU4c1EwRkJRMllzUlVGQlVXTXNSVUZCVlVNc1JVRkJSeXhOUVVGTkxFTkJRM1pETEVOQlEwb3NRMEZEUVN4VFFVRlRTaXhIUVVGWFZDeEZRVUZSU0N4RlFVRlRMRU5CUTJwRExFbEJRVWxyUWl4RlFVRlZMRWRCUTJRc1QwRkJVV1lzUlVGQlR5eERRVUZETEVWQlFVY3NRMEZGWml4SlFVRkxMRWxCUTBSbExFVkJRVlVzYTBKQlExWXNUVUZEU2l4SlFVRkxMRWxCUTBSQkxFVkJRVlVzTmtKQlExWXNUVUZEU2l4SlFVRkxMRWxCUTBSQkxFVkJRVlVzYTBOQlExWXNUVUZEU2l4SlFVRkxMRWxCUTB3c1NVRkJTeXhKUVVGTExFTkJRMDVCTEVWQlFWVXNNRUpCUVRCQ1ppeEZRVUZQTEVOQlFVTXNRMEZCUXl4SFFVTTNReXhMUVVOS0xFTkJRMEVzU1VGQlN5eEpRVU5NTEVsQlFVc3NTVUZCU3l4RFFVTk9aU3hGUVVGVkxITkNRVUZ6UW1Zc1JVRkJUeXhEUVVGRExFTkJRVU1zUjBGRGVrTXNTMEZEU2l4RFFVTktMRU5CUTBFc1QwRkJTV1VzUjBGRFFXeENMRVZCUVZFc1JVRkJSeXh0UWtGQmIwSXNhVU5CUVdsRGEwSXNRMEZCVHl4RlFVRkZMRVZCUTNSRlF5eEhRVUZWYUVJc1EwRkJUU3hEUVVNelFpeERRVU5CTEZOQlFWTlZMRWRCUVd0Q1ZpeEZRVUZSU0N4RlFVRlRMRU5CUTNoRExFOUJRVWxITEVWQlFVOUJMRVZCUVU4c1QwRkJVeXhEUVVGRExFbEJRVTBzUzBGQlQwRXNSVUZCVHl4VFFVRlhMRWxCUTNaRVNDeEZRVUZSUnl4RlFVRlBMRTlCUVZFc1pVRkJaMElzZDBKQlFYZENMRVZCUXpWRVowSXNSMEZCVldoQ0xFVkJRVThzVFVGQlRTeEZRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRkZCUVZFc1RVRkJUeXhIUVVGSExFTkJRelZFTEVOQlEwRXNVMEZCVTJkQ0xFZEJRVlZvUWl4RlFVRlJMRU5CZWtVelFpeEpRVUZCYVVJc1JVRnBSa2tzU1VGQlNVTXNSVUZCVDBNc1JVRkRXQ3hIUVVGSkxFTkJRMEZFTEVWQlFWRXNTVUZCU1N4UFFVRlBPMEZCUVVFc1JVRkJPRUlzU1VGQlNTeEZRVU55UkVNc1JVRkJUeXhKUVVGSkxFOUJRVTg3UVVGQlFTeEZRVUY1UXl4SlFVRkpMRU5CUTI1RkxFOUJRMDFETEVWQlFVRXNRMEZEUmtZc1JVRkJVU3hYUVVGRExITkNRVUZwUWl4SlFVRkZMRVZCUXpWQ1F5eEZRVUZQTEZkQlFVTXNOa0pCUVhWQ0xFbEJRVVVzUTBGRGNrTXNRMEZEUVN4SlFVRkpSU3hGUVVGUlNDeEZRVUZOTEV0QlFVdHNRaXhEUVVGTkxFVkJRemRDTEVkQlFVa3NRMEZCUTNGQ0xFVkJRMFFzVDBGQlQzSkNMRVZCUTFnc1NVRkJTWE5DTEVWQlFVMUVMRVZCUVUwc1EwRkJReXhGUVVOaVJTeEZRVUZOTEVsQlEwNURMRVZCUVUxT0xFVkJRVTBzVlVGRmFFSXNTVUZFUVVNc1JVRkJTeXhWUVVGWlN5eEZRVU5VU0N4RlFVRlJSaXhGUVVGTExFdEJRVXR1UWl4RFFVRk5MRWRCUTNoQ2NVSXNSVUZCVFN4RFFVRkRMRWxCUVUwc1IwRkRWRVVzU1VGQlVUdEJRVUZCTEVWQlExSkVMRWRCUVU5RExFVkJSVkJCTEVWQlFVMDdRVUZCUVN4SFFVZFdSQ3hIUVVGUFF5eEZRVUZOUml4RlFVRk5MRU5CUVVNc1JVRkRjRUpGTEVWQlFVMHNTMEZGVmtNc1JVRkJUVXdzUlVGQlN5eFZRVVZtTEVsQlFVMU5MRVZCUVU4c1YwRkJReXhqUVVGWExFbEJRVVVzUlVGRE0wSXNUMEZCUVVFc1JVRkJTeXhWUVVGWlJDeEZRVU5xUWtnc1JVRkJVVWtzUlVGQlN5eExRVUZMZWtJc1EwRkJUU3hGUVVOcVFuTkNMRVZCUVUxRExFbEJRVTlPTEVWQlFVRkpMRWRCUVVFc1dVRkJRVUVzUlVGQlVTeExRVUZTTEV0QlFVRktMRVZCUVdNc1IwRkRkRU1zUTBGRFFTeFRRVUZUVGl4SFFVRnJRbGdzUlVGQlVVZ3NSVUZCVXl4RFFVTjRReXhKUVVGSmVVSXNSVUZCVFN4SFFVTldMRkZCUVZOSkxFVkJRVWtzUlVGQlIwRXNSVUZCU1RGQ0xFVkJRVThzVDBGQlV5eEZRVUZITEVWQlFVVXdRaXhGUVVGSExFTkJRM2hETEVsQlFVMURMRVZCUVVzelFpeEZRVUZQTUVJc1EwRkJReXhGUVVOdVFpeEhRVUZKTEVWQlFVRkRMRWxCUVU4c1RVRkJVVE5DTEVWQlFVOHdRaXhGUVVGSkxFTkJRVU1zU1VGQlRUdEJRVUZCTEVkQlJYSkRMRWRCUVVsRExFbEJRVTg3UVVGQlFTeEZRVUZOTEVOQlEySXNSMEZCVFN4RFFVRkZMRXRCUVVGRExFVkJRVTBzVDBGQlFUbENMRU5CUVU4c1JVRkJTU3RDTEVkQlFWazNRaXhGUVVGUk1FSXNRMEZCUXl4RlFVTTVRMG9zUjBGQlQwMHNSVUZEVUVZc1JVRkJTVFZDTEVOQlExSXNVMEZEVXpaQ0xFbEJRVThzUzBGQlRTeERRVU5zUWl4SlFVRkpSeXhGUVVGUE9VSXNSVUZCVHl4RlFVRkZNRUlzUTBGQlF5eEZRVU5tU3l4RlFVRkxReXhIUVVGWlJpeERRVUZKTEVWQlF6TkNMRWRCUVVsRExFVkJRMEZVTEVkQlFVOVRMRlZCUTBaRUxFbEJRVk03UVVGQlFTeEZRVWRrTEVsQlJFRkJMRVZCUVU4NVFpeEZRVUZQTUVJc1JVRkJTU3hEUVVGRExFVkJRMXBKTEVsQlFWTXNTMEZCVDBFc1NVRkJVeXhMUVVNMVFrRXNSVUZCVHpsQ0xFVkJRVThzUlVGQlJUQkNMRVZCUVVrc1EwRkJReXhWUVVWd1Fra3NTVUZCVXl4TlFVRlJPVUlzUlVGQlR6QkNMRVZCUVVrc1EwRkJReXhKUVVGTk8wRkJRVUVzUlVGSGVFTXNTVUZFUVVrc1JVRkJUemxDTEVWQlFVOHNSVUZCUlRCQ0xFVkJRVWtzUTBGQlF5eEZRVU5rU1N4SlFVRlRMRXRCUVU5QkxFbEJRVk1zUzBGRE5VSkJMRVZCUVU4NVFpeEZRVUZQTEVWQlFVVXdRaXhGUVVGSkxFTkJRVU1zVlVGRmNFSkpMRWxCUVZNc1MwRkJUMEVzU1VGQlV5eExRVUZQUVN4SlFVRlRMRWxCUVVzc1EwRkRia1FzU1VGQlRVY3NSVUZCVXl4RFFVRkZMRVZCUVVjc1JVRkJSeXhGUVVGSExFVkJRVWNzUlVGQlJ5eERRVUZGTEVWQlFVVklMRU5CUVVrc1JVRkRlRU5TTEVkQlFVOVpMRWRCUVdOc1F5eEZRVUZSTUVJc1JVRkJTU3hGUVVGSFR5eEZRVUZSY0VNc1EwRkJUeXhGUVVOdVJEWkNMRWRCUVV0UExFTkJRMVFzUzBGRFN5eERRVU5FTEVsQlFVMUZMRVZCUVUxdVF5eEZRVUZQTEU5QlFVOHdRaXhGUVVGSkxFVkJRVWNzUTBGQlF5eEZRVU5zUXpkQ0xFVkJRVkUyUWl4RlFVRkpMRVZCUVVjc1owSkJRV2xDTERKQ1FVRXlRbE1zUTBGQlJ5eEZRVUZGTEVWQlEyaEZZaXhIUVVGUFlTeERRVU5ZTEVOQlEwb3NVMEZEVTFJc1NVRkJUeXhMUVVGUFFTeEpRVUZQTEVsQlFVMHNRMEZGYUVNc1NVRkJUVk1zUlVGQlZWWXNSVUZEV2trc1JVRkJUemxDTEVWQlFVOHdRaXhGUVVGSkxFTkJRVU1zUlVGRGRrSXNTMEZCVDBrc1NVRkJVeXhMUVVGUFFTeEpRVUZUTEV0QlF6VkNRU3hGUVVGUE9VSXNSVUZCVHl4RlFVRkZNRUlzUlVGQlNTeERRVUZETEVWQlEzSkNTU3hKUVVGVE8wRkJRVUVzUjBGQlVTeEZRVUZGUVN4SlFVRlRMRTFCUVZFNVFpeEZRVUZQTUVJc1JVRkJTU3hEUVVGRExFbEJRVTA3UVVGQlFTeExRVU4wUkVvc1IwRkJUMGtzUlVGQlNWVXNSVUZCVlhCRExFVkJRVThzVFVGQlRXOURMRVZCUVZOV0xFVkJRVWtzUTBGQlF5eEZRVUZKUXl4RlFVTTFSQ3hOUVVWSlRDeEhRVUZQU3l4RFFVVm1MRU5CUTBFc1QwRkJTVE5DTEVWQlFVOUJMRVZCUVU4c1QwRkJVeXhEUVVGRExFbEJRVTBzUzBGQlQwRXNSVUZCVHl4VFFVRlhMRWxCUTNaRVNDeEZRVUZSUnl4RlFVRlBMRTlCUVZFc1pVRkJaMElzZDBKQlFYZENMRVZCUXpWRWMwSXNRMEZEV0N4RFFVdEJMRk5CUVZOUExFZEJRVmszUWl4RlFVRlJSaXhGUVVGUkxFTkJRMnBETEVsQlFVazRRaXhGUVVGUExFZEJRMUJFTEVWQlFVc3pRaXhGUVVGUFJpeEZRVUZUTEVOQlFVTXNSVUZETVVJc1RVRkJUelpDTEVsQlFVOHNTMEZCVDBFc1NVRkJUeXhMUVVGUlFTeEpRVUZQTzBGQlFVRXNSMEZCVVVFc1NVRkJUeXhQUVVOc1JDeEZRVUZCUVN4SlFVRlBMRTFCUVZFelFpeEZRVUZQUml4RlFVRlRMRU5CUVVNc1NVRkJUVHRCUVVGQkxFbEJSWFJETmtJc1NVRkJUenRCUVVGQkxFbEJRMUJETEVkQlFWRTdRVUZCUVN4SFFVTmFPVUlzUjBGQlZTeEZRVU5XTmtJc1JVRkJTek5DTEVWQlFVOUdMRVZCUVZNc1EwRkJReXhGUVVVeFFpeFBRVUZMT0VJc1NVRkRSRUVzUlVGQlR5eExRVU5LTEVOQlFVVXNTMEZCUVVFc1JVRkJUU3hQUVVGQk9VSXNRMEZCVHl4RFFVTXhRaXhEUVVOQkxFbEJRVTFyUXl4SFFVRmpMRU5CUTJoQ0xFVkJRVXNzUzBGRFRDeEZRVUZITEU5QlEwZ3NSVUZCUnl4TFFVTklMRVZCUVVjc1QwRkRTQ3hGUVVGSExFdEJRMGdzUlVGQlJ6dEJRVUZCTEVWQlEwZ3NSVUZCUnl4TFFVTklMRVZCUVVjc1NVRkRTQ3hGUVVGSExFdEJRMGdzUlVGQlJ5eFBRVU5JTEVWQlFVY3NUMEZEU0N4RlFVRkhMRk5CUTBnc1JVRkJSeXhUUVVOSUxFbEJRVXNzU1VGRFRDeEpRVUZMTEVsQlEwd3NTVUZCU3l4SlFVTk1MRXRCUVUwc1MwRkRUaXhKUVVGTkxFZEJRMVlzUlVGRFFTeFRRVUZUUlN4SFFVRmpiRU1zUlVGQlVVWXNSVUZCVVcxRExFVkJRVkZ3UXl4RlFVRlRMRU5CUTNCRUxFbEJRVTFyUXl4RlFVRkxMMElzUlVGQlR5eFBRVUZQUml4RlFVRlJiVU1zUTBGQlRTeEZRVVZxUXpOQ0xFVkJSRXQ1UWl4RlFVRkhMRk5CUVZkRkxFZEJRVlVzYVVKQlFXbENMRXRCUVV0R0xFTkJRVVVzUlVGRGVrTXNVMEZCVTBFc1JVRkJTU3hGUVVGRkxFVkJRVWtzU1VGRGNrTXNSMEZCU1N4TlFVRk5la0lzUTBGQlNTeEZRVUZITEVOQlEySXNTVUZCVFRaQ0xFVkJRVTF1UXl4RlFVRlBMRTlCUVU5R0xFVkJRVk1zUlVGQlIyMURMRVZCUVZNc1EwRkJReXhGUVVOb1JDeFBRVUZCY0VNc1JVRkJVVU1zUlVGQlV5eEZRVUZITEdkQ1FVRnBRaXd5UWtGQk1rSnhReXhEUVVGSExFVkJRVVVzUlVGRE9VUkJMRU5CUTFnc1EwRkRRU3hQUVVGUExFOUJRVThzWTBGQll6ZENMRU5CUVVrc1EwRkRjRU1zUTBOMlRrRXNVMEZCVXl0Q0xFZEJRV05ETEVWQlFVdERMRVZCUVU5RExFVkJRVlZETEVWQlFWTXNRMEZEYkVRc1IwRkJUU3hEUVVGRkxFMUJRVUZETEVWQlFVOHNTMEZCUVVNc1JVRkJUU3hSUVVGQlF5eEZRVUZUTEUxQlFVRkRMRU5CUVUwc1JVRkJTVTRzUlVGQlRTeFBRVUZUTEdWQlEycEVUeXhIUVVGdFFsSXNSVUZCUzBNc1JVRkJUMFVzUTBGQlR5eEZRVU4wUTAwc1IwRkJhMEpTTEVWQlFVOUVMRVZCUVVrc1VVRkJVU3hQUVVGUlJ5eERRVUZQTEVWQlEzQkVUeXhGUVVGVlVpeEZRVU5XUml4RlFVRkpMRmRCUVZjc1VVRkJVVVVzUlVGQlV5eFBRVUZSVXl4SFFVRlBVaXhGUVVGUlJDeEZRVUZWTEhGQ1FVRnpRbE1zUTBGQlJ5eERRVUZETEVWQlF6TkdMRXRCUTBaRExFVkJRMEZhTEVWQlFVa3NVVUZCVVN4WlFVRmpRU3hGUVVGSkxFMUJRemxDV1N4RlFVRk5XaXhGUVVGSkxFOUJRVTloTEVWQlFVMHNSVUZGYkVKSUxFVkJRMHhGTEVWQlFVMUZMRWRCUVc5Q1pDeEZRVUZKTEU5QlFWRkpMRVZCUVU5TkxFVkJRVk5TTEVWQlFWVkRMRU5CUVU4c1JVRkRiRVZHTEVWQlFVMHNUMEZCVXl4VFFVTndRbGNzUlVGQlRVY3NSMEZCYjBKbUxFVkJRVXRKTEVWQlFVOUlMRVZCUVU5RkxFTkJRVThzUlVGRmNFUlRMRVZCUVUxYUxFVkJRVWtzVDBGQlQyRXNSVUZCVFN4RlFVTXpRaXhKUVVGSlJ5eEZRVU5LTEVkQlFVa3NRMEZEUVN4SlFVRk5ReXhGUVVGTlRDeEZRVUZKTEZGQlFWRlNMRVZCUVU5UExFZEJRVTlTTEVWQlFWRkVMRWRCUVVFc1MwRkJRVUVzUlVGQldVUXNSVUZCVHl4eFFrRkJjMEpWTEVOQlFVY3NSVUZCUjFnc1JVRkJTU3hQUVVGUExFVkJRM2hIWjBJc1JVRkJVMFVzUlVGQlUwUXNRMEZCUnl4RlFVRkpRU3hGUVVGTkxFbEJRVWxGTEVWQlFVOUdMRU5CUVVjc1EwRkRha1FzVDBGRFQwY3NSVUZCVHl4RFFVTldMRWxCUVUxVUxFVkJRVTFUTEdGQlFXbENMRTFCUVZGQkxFVkJRVTBzVVVGQlZTeFBRVUZQUVN4RFFVRkxMRVZCUTJwRmFrSXNSVUZCVVVRc1IwRkJRU3hMUVVGQlFTeEZRVUZaUkN4RlFVRlBMSEZDUVVGelFsVXNRMEZCUnl4RlFVTndSRXNzUlVGQlV5eEpRVUZKUnl4RlFVRlBaaXhEUVVGTExFTkJRemRDTEVOQlEwRXNUMEZCUVZrc1JVRkJUeXhOUVVGUlZDeEZRVU5tVXl4RlFVRlBMRTlCUVZOYUxFVkJRMXBETEVsQlEwRlhMRVZCUVU4c1MwRkJUMWdzUjBGRFpFc3NTVUZEUVUwc1JVRkJUeXhKUVVGTlRpeEhRVU5pUlN4RlFVRkpMRk5CUTBwSkxFVkJRVThzVDBGQlUwb3NSVUZCU1N4UlFVTndRazRzU1VGRFFWVXNSVUZCVHl4UlFVRlZWaXhIUVVOa1ZTeERRVU5ZTEVOQlEwRXNVMEZCVTBZc1IwRkJiMEpQTEVWQlFWRnFRaXhGUVVGUFRTeEZRVUZUVWl4RlFVRlZReXhGUVVGVExFTkJOVU40UlN4SlFVRkJiVUlzUlVFMlEwa3NSMEZCU1Zvc1NVRkJXU3hKUVVOYUxFOUJRVTlYTEVWQlFVOVNMRVZCUVUwc1JVRkRlRUlzU1VGQlRWVXNSVUZCWjBJc1EwRkJReXhGUVVOMlFpeFJRVUZYV0N4TFFVRlBVeXhGUVVGUExFdEJRM0pDTEVkQlFVa3NRMEZCUTFRc1JVRkJTU3haUVVGalFTeEZRVUZKTEUxQlFWRkdMRVZCUXk5Q0xFZEJRVWxGTEVWQlFVa3NVMEZCVjBFc1JVRkJTU3hMUVVOdVFsY3NSVUZCWXl4TFFVRkxXQ3hEUVVGSExFMUJSWFJDTEZGQlFVOUJMRVZCUjI1Q0xGRkJRVmRCTEV0QlFVOVhMRVZCUTJRc1NVRkJTVVFzUlVGQlFWWXNSVUZCU1N4UFFVRktMRTFCUVVGVkxFVkJRVlVzUzBGQlMyeENMRWRCUTJZc1QwRkJUMUVzUlVGRFppeEpRVUZOV1N4RlFVRkxTQ3hGUVVGUExGVkJRVlZZTEVOQlFVOHNSVUZEYmtNc1QwRkJTV01zUjBGQlRTeERRVUZEUVN4RlFVRkhMRmxCUjFaSUxFVkJRVThzUzBGQlN5eExRVUZMTEU5QlFVOHNUMEZCVHl4RFFVRkRMRVZCUVVkSExFVkJRVWtzUTBGQlJTeFJRVUZUTEVkQlFVOHNTMEZCVFN4TlFVRlZMRU5CUVVNc1EwRkJReXhGUVVOd1JVRXNTVUZGV0hKQ0xFVkJRVkZFTEVWQlFWVXNjVUpCUVhOQ0xHMUNRVUZ0UWxFc1EwRkJUeXhIUVVGSlFTeEpRVUZaTEhWQ1FVRjFRaXhGUVVOc1IxY3NSVUZCVDFJc1JVRkJUU3hGUVVONFFpeERRVU5CTEZOQlFWTkZMRWRCUVc5Q0xFTkJRVVVzVFVGQlFWVXNSVUZCVHl4WFFVRkJReXhGUVVGWkxFOUJRVUZNTEVOQlFVOHNSVUZCUjJwQ0xFVkJRVTlJTEVWQlFVOUZMRVZCUVZNc1EwRnlSVzVHTEVsQlFVRnRRaXhGUVhORlNTeEpRVUZOVml4RlFVRk5VeXhGUVVGUExFdEJRVXNzUzBGQlMxUXNSMEZCU1N4RFFYUkZja01zU1VGQlFWVXNSVUZ6UlhsRExFOUJRVUZXTEVWQlFVa3NWVUZCV1N4SlFVRlRZU3hIUVVGVFlpeEZRVUZKTEZWQlFWa3NWVUZEYmtaVkxFVkJRVUZXTEVWQlFVa3NUMEZCU2l4WlFVRkJWU3hGUVVGVkxFdEJRVXRzUWl4SlFVRk5MRWRCUVV0cFFpeEZRVUZQVWl4RlFVRk5MRVZCUXpORExFZEJRVWxSTEVWQlFVOHNUMEZCVVN4RFFVTm1MRWxCUVUxTkxFZEJRVk5NTEVWQlFVRkVMRVZCUVU4c1QwRkJUeXhMUVVGTFZDeEhRVUZKTEVOQmVrVTVReXhKUVVGQlZTeEZRWGxGYVVRc1QwRkJRVllzUlVGQlNTeFhRVUZYVlN4RlFVRkJWaXhGUVVGSkxFOUJRVW9zV1VGQlFWVXNSVUZCVlN4TFFVRkxiRUlzU1VGQlRTeEpRVUU1UkN4TFFVRkJhMElzUlVGRFdFUXNSVUZCVDFJc1JVRkJUU3hGUVVOcVFpeEhRVUZKUkN4RlFVRkpMRTFCUVZGbExFVkJRVThzU1VGQlN5eERRVU40UWl4SlFVRk5ReXhGUVVGTFJpeEZRVUZYTEZWQlFWVmtMRVZCUVVrc1IwRkJSeXhGUVVOcVEybENMRVZCUVV0SUxFVkJRVmNzVlVGQlZVTXNSVUZCVHl4SFFVRkhMRVZCUTNCRGFFSXNSVUZCVFN4cFEwRkJhVU5wUWl4RFFVRkZMRTlCUVU5RExFTkJRVVVzUjBGRGVFUXhRaXhGUVVGUlJpeEZRVUZQTEhGQ1FVRnpRbFVzUlVGQlN5eEZRVUZKTEVOQlEyeEVMRU5CUTBvc1EwRkRRU3hQUVVGUFF5eERRVU5ZTEVORGJrWkJMRk5CUVZOclFpeEhRVUZ2UWtNc1JVRkJVVU1zUlVGQlVVTXNSVUZCU3l4RFFVTTVReXhIUVVGSlJDeEZRVUZSTEVOQlEwcERMRWxCUVZFc1QwRkRVa0VzUlVGQlRVUXNSVUZCVHl4UlFVTnFRaXhSUVVGVFJTeEZRVUZKUkN4RlFVRk5MRVZCUVVkRExFZEJRVXNzUlVGQlJ5eEZRVUZGUVN4RlFVRkhMRU5CUXk5Q0xFbEJRVWxETEVWQlFVdElMRVZCUVU5RkxFTkJRVU1zUlVGRGFrSXNUMEZCVVVNc1JVRkJSeXhMUVVGTkxFTkJRMklzU1VGQlN5eFJRVU5NTEVsQlFVc3NWVUZEVEN4SlFVRkxMRlZCUTBSS0xFZEJRVlZKTEVWQlFVY3NUMEZCVHl4UFFVTndRaXhSUVVOU0xFTkJTVUVzU1VGRVFVRXNSVUZCUzBnc1JVRkJUeXhGUVVGRlJTeERRVUZETEVkQlExSkRMRWRCUVVFc1dVRkJRVUVzUlVGQlNTeFJRVUZUTEZOQlEyaENTaXhIUVVGVlNTeEZRVUZITEU5QlFVOHNUMEZEY0VKQkxFVkJRVXRJTEVWQlFVOHNSVUZCUlVVc1EwRkJReXhGUVVWdVFpeExRVU5LTEVOQlEwb3NRMEZEUVN4UFFVRlBTQ3hEUVVOWUxFTkRha0pCTEVsQlFVMUxMRWRCUVVzc1EwRkJSU3haUVVGQlF5eEhRVUZoTEdsQ1FVRkJReXhGUVVGcFFpeEZRVU16UXl4VFFVRlRSQ3hIUVVGWlJTeEZRVUZMUXl4RlFVRlBReXhGUVVGUFF5eEZRVUZUTEVOQlF6ZERMRWxCUVUxRExFVkJRVkZLTEVWQlFVa3NUVUZEV2l4RFFVRkZMRmxCUVVGTExFVkJRV0VzVVVGQlFVTXNSVUZCVXl4UFFVRkJReXhGUVVGUkxFbEJRVUZETEVOQlFVa3NSVUZCU1U0c1JVRkRNVU5QTEVWQlEwRkRMRVZCUVdFc1IwRkRha0lzVDBGQlVWUXNSVUZCVFN4TFFVRk5MRU5CUTJoQ0xFbEJRVXNzVVVGRFJGRXNSVUZCVDBVc1IwRkJZVmdzUlVGQlMwTXNSVUZCVDBVc1EwRkJUeXhIUVVOdVEwa3NSMEZCVlVNc1NVRkRWa3dzUlVGQlVVWXNSVUZCVHl4alFVRmxMQ3REUVVFclF5eEZRVU5xUml4TlFVTktMRWxCUVVzc1UwRkRUQ3hKUVVGTExIVkNRVU5NTEVsQlFVc3NkVUpCUTB3c1NVRkJTeXhsUVVORVVTeEZRVUZQUnl4SFFVRmpXaXhGUVVGTFF5eEZRVUZQVHl4RlFVRkxUQ3hEUVVGUExFVkJRM3BEU1N4SlFVTkJSU3hGUVVGTExFOUJRVk5HTEVWQlFVOHNUMEZCVHl4VlFVRlZMRU5CUVVNc1IwRkRNME1zVFVGRFNpeEpRVUZMTEZsQlEwd3NTVUZCU3l4WlFVTk1MRWxCUVVzc2EwSkJRMFJGTEVWQlFVOUpMRWRCUVd0Q2FFSXNSMEZCU1Vjc1JVRkJTME1zUlVGQlQwTXNSVUZCVDBNc1EwRkJUeXhGUVVOdVJFa3NTVUZEUVVVc1JVRkJTeXhQUVVGVFJpeEZRVUZQTEU5QlFVOHNWVUZCVlN4RFFVRkRMRWRCUXpORExFMUJRMG9zVVVGQlV5eERRVU5NTEVsQlFVMVBMRVZCUVZWaUxFVkJRVTBzVDBGQlV5eFJRVU42UWtFc1JVRkJUU3hSUVVOT0xEUkNRVUUwUWtFc1JVRkJUU3hKUVVGSkxFbEJRelZEUlN4RlFVRlJSaXhGUVVGUExHMUNRVUZ2UW1Fc1EwRkJUeXhGUVVNeFEwd3NSVUZCVDFZc1IwRkJhVUpETEVWQlFVdERMRVZCUVUwc1QwRkJVU3hQUVVGWExFdEJRVTFETEVWQlFVOURMRU5CUVU4c1JVRkRNVVZQTEVWQlFXRXNSVUZEYWtJc1EwRkRTaXhEUVVOQkxFOUJRVWxJTEVkQlFWVkZMRVZCUVVzc1UwRkJWeXhKUVVNeFFrNHNSVUZCVVVrc1JVRkJVU3haUVVGaExHdERRVUZyUXl4RlFVTXZSRWdzUjBGRFFVb3NSVUZCU1N4UlFVRlJMR0ZCUTFnc1EwRkJRMlVzUlVGQlUwNHNRMEZCU1N4SFFVTllMRTlCUVU5QkxFVkJRVXNzVDBGQlZTeFZRVU55UWtFc1JVRkJTeXhMUVVGUFFTeEZRVUZMTEUxQlFWRXNNRUpCUlRsQ1RpeEZRVUZSU3l4SFFVRkJMRXRCUVVGQkxFVkJRVTlRTEVWQlFVOHNhVUpCUkZZc01rTkJReXRDTEVWQlJUTkRTU3hKUVVOQlNTeEZRVUZMTEZsQlFXTXNTVUZEYmtKSUxFbEJRMGxNTEVWQlFVMHNUMEZCVXl4VlFVRlpRU3hGUVVGTkxGTkJRVmNzUjBGRE5VTlJMRVZCUVVzc1VVRkJWVWdzUlVGRlprY3NSVUZCU3l4alFVRm5Ra2dzUjBGSGVrSk9MRVZCUVVrc1VVRkJVU3hyUWtGQmIwSlZMRWxCUTJoRFJDeEZRVUZMTEZOQlFWZFNMRWRCUTJKUkxFTkJRMWdzUTBGRFFTeFRRVUZUVml4SFFVRnBRa01zUlVGQlMyZENMRVZCUVZGRExFVkJRVkZETEVWQlFVc3NRMEZCUlN4WlFVRkJZaXhGUVVGaExGRkJRVUZETEVWQlFWTXNUMEZCUVVNc1JVRkJVU3hKUVVGQlF5eEZRVUZMTEVsQlFVRlhMRU5CUVVrc1JVRkJSMmhDTEVWQlFWTXNRMEZEY2tjc1NVRkJUVVlzUlVGQlVTeERRVU5XTEV0QlFVMHNVMEZEVGl4UFFVRlJiVUlzUjBGQmIwSktMRVZCUVZGRExFVkJRVkZETEVOQlFVY3NSVUZETDBNc1QwRkJVU3hIUVVOU0xFOUJRVkVzUlVGRFdpeEZRVU5OVkN4RlFVRlBSeXhIUVVGaldpeEZRVUZMUXl4RlFVRlBUeXhGUVVGTFRDeERRVUZQTEVWQlEyNUVMRTlCUVVsSkxFbEJRMEZGTEVWQlFVc3NUMEZCVTBZc1JVRkJUeXhQUVVGUExGVkJRVlVzUTBGQlF5eEZRVU51UTBVc1JVRkJTeXhUUVVGWExFbEJRMmhDVGl4RlFVRlJTU3hGUVVGUkxGbEJRV0VzYTBOQlFXdERMRWRCUlc1RlJpeEpRVU5CU1N4RlFVRkxMRmxCUVdNc1NVRkRia0pJTEVsQlEwRkhMRVZCUVVzc1VVRkJWVWdzUlVGRFprY3NSVUZCU3l4TlFVRk5MRU5CUVVNc1JVRkJTVlVzUjBGRllsWXNRMEZEV0N4RFFVTkJMRk5CUVZORkxFZEJRV0VzUTBGQlJTeFJRVUZCVlN4RFFVRlJMRVZCUVVjc1EwRkJSU3hQUVVGQlRDeEZRVUZSTEU5QlFVRk5MRVZCUVZFc1NVRkJRVWdzUTBGQlNTeEZRVUZIYUVJc1JVRkJVeXhEUVVOcVJTeEpRVUZOYjBJc1JVRkJVU3hKUVVGSlF5eEhRVUZOUml4RlFVRlBMRlZCUVZVc1EwRkJReXhEUVVGRExFVkJRM1pEUXl4RlFVRk5MRk5CUVZjc1NVRkRha0p3UWl4RlFVRlJZU3hGUVVGUkxGbEJRV0VzYVVOQlFXbERMRVZCUXpsRVR5eEZRVUZOTEU5QlFVOHNVMEZCVXl4SFFVRkhMRWRCUTNwQ2NFSXNSVUZCVVdFc1JVRkJVMDBzUlVGQlR5eFBRVUZUTEVWQlFVY3NXVUZCWVN4cFEwRkJhME1zUlVGQlNTeEZRVU16Uml4SlFVRk5SeXhGUVVGWFZDeEZRVUZUVFN4RlFVRlBMRTlCUXpOQ1NTeEZRVUZMUXl4SFFVRlhVaXhGUVVGTFRTeEZRVUZWU2l4RlFVRlJMRTlCUVZGc1FpeERRVUZQTEVWQlF6VkVMRTlCUVVGdlFpeEZRVUZOTEUxQlFWRXNRMEZCUTFBc1JVRkJVVk1zUlVGQlZVTXNSVUZCUnl4TlFVRk5MRVZCUTNSRFFTeEZRVUZITEZWQlEwaElMRVZCUVUwc1VVRkJWVWNzUlVGQlJ5eFRRVU5vUWtnc1EwRkRXQ3hEUXpsR1FTeFRRVUZUU3l4SFFVRlhReXhGUVVGVFF5eEZRVUZaTEVOQlFVVXNUMEZCUVVNc1JVRkJVU3hOUVVGQlF5eEZRVUZQTEUxQlFVRkRMRVZCUVU4c1NVRkJRVU1zUTBGQlNTeEZRVUZIUXl4RlFVRlRMRU5CUXpkRkxFbEJRVTFETEVWQlFVOHNUMEZCVHl4UFFVRlBMRU5CUVVVc1dVRkJZVTRzUTBGQlZ5eEZRVUZIUkN4RFFVRlBMRVZCUTNwRVVTeEZRVUZOTEVsQlFVbERMRWRCUVZNc1QwRkJWMFlzUTBGQlNTeEZRVU5zUTBjc1JVRkJUU3hEUVVOU0xFMUJRVThzUjBGRFVDeFBRVUZSTEVkQlExSXNWMEZCV1VZc1JVRkJTU3hYUVVOb1FpeFJRVUZUUVN4RlFVRkpMRkZCUTJJc1QwRkJVVUVzUlVGQlNTeE5RVU5vUWl4RlFVTk5SeXhGUVVGUlF5eEhRVUZoVkN4RlFVRlBMRU5CUXpsQ0xGVkJRVmNzV1VGRFdDeExRVUZOUXl4SFFVRkJMRXRCUVVGQkxFVkJRVk5ETEVkQlFVRXNXVUZCUVVFc1JVRkJUU3hIUVVOeVFpeFBRVUZCU0N4RlFVTkJMRkZCUVVGSkxFVkJRMEVzWVVGQll5eEZRVU5rTEdWQlFXZENMRVZCUTNCQ0xFTkJRVU1zUlVGRFIwc3NSVUZCVFN4UlFVTk9TQ3hGUVVGSkxGZEJRVmNzVTBGQlZ5eEhRVU4wUWtvc1NVRkRRMEVzUlVGQlRTeFBRVUZUTEdGQlFXVkJMRVZCUVUwc1QwRkJVeXhqUVVNNVF5eERRVUZEVHl4RlFVRk5MRmxCUTFCTUxFVkJRVkZMTEVWQlFVMHNTVUZCU3l4bFFVRm5RaXgxUlVGQmRVVXNSMEZIYkVoSUxFVkJRVWtzVTBGQlYwb3NSVUZEVkZNc1IwRkJXVWdzUlVGQlMwNHNSVUZCVDA4c1JVRkJUMHdzUTBGQlR5eEZRVU4wUTFFc1IwRkJhVUpLTEVWQlFVdERMRVZCUVUwc1NVRkJTMUlzUlVGQlR5eExRVUZOVVN4RlFVRlBUQ3hEUVVGUExFVkJRMnhGTEVsQlFVMVRMRVZCUVdGUUxFVkJRVWtzVTBGQlV5eE5RVUZOTEVOQlFVTXNSVUZEYWtOUkxFVkJRVXRETEVkQlFWZGFMRVZCUVV0VkxFVkJRVmtzUjBGQlQxUXNRMEZCVHl4RlFVTnlSQ3hQUVVGSlZTeEZRVUZITEZWQlEwaFNMRVZCUVVrc1VVRkJWVkVzUlVGQlJ5eFRRVU55UWxJc1JVRkJTU3hOUVVGUkxFTkJRVU5PTEVWQlFWRmhMRVZCUVZsRExFVkJRVWNzVFVGQlRTeEZRVU51UTFJc1EwRkRXQ3hEUTJwRFFTeFRRVUZUVlN4SFFVRlpReXhGUVVGTExFTkJRM1JDTEVkQlFVa3NUMEZCVDBFc1IwRkJVU3hUUVVObUxFMUJRVThzUTBGQlEwRXNSVUZCUzBFc1JVRkJUU3hEUVVGRExFVkJRM2hDTEVkQlFVa3NUVUZCVFN4UlFVRlJRU3hEUVVGSExFVkJRMnBDTEU5QlFVOUJMRVZCUVVrc1UwRkJWeXhGUVVGSlFTeEZRVUZOTEVOQlFVTkJMRVZCUVVrc1EwRkJReXhGUVVGSFFTeEZRVUZKTEVOQlFVTXNRMEZCUXl4RlFVTnVSQ3hIUVVGTkxFTkJRVVVzVDBGQlFVTXNSVUZCVVN4UFFVRkJReXhEUVVGUExFVkJRVWxHTEVWQlF6TkNMRTFCUVU4c1EwRkJRME1zUlVGQlVVRXNSMEZCVlN4UFFVRlBReXhIUVVGWExGTkJRVmRCTEVWQlFVOHNUMEZCVXl4RlFVRkZMRU5CUXpkRkxFTkJRMEVzVTBGQlUwTXNSMEZCWVVNc1JVRkJVeXhEUVdZdlFpeEpRVUZCUXl4RlFXZENTU3hKUVVGSlF5eEZRVUZWTEVkQlExWkRMRVZCUVZrc1IwRkRXa01zUlVGQmFVSXNSMEZEY2tJc1VVRkJVeXhGUVVGSkxFVkJRVWNzUlVGQlNVb3NSVUZCVVN4UFFVRlJMRVZCUVVVc1JVRkJSeXhEUVVOeVF5eEpRVUZOUml4RlFVRlRSU3hGUVVGUkxFTkJRVU1zUlVGRGVFSXNUMEZCVVVZc1JVRkJUeXhEUVVGRExFVkJRVWNzUTBGRFppeEpRVUZMTEVsQlEwUkpMRWxCUTB0QkxFbEJRVmtzUjBGQlN5eEhRVUZMUlN4RlFVRnBRanRCUVVGQk8wRkJRVUVzUlVGQlV6dEJRVUZCTEVsQlF6VkRUaXhGUVVGUExGVkJRVlVzUTBGQlF5eEhRVUZMTEV0QlEyaERTeXhGUVVGWkxFZEJRMXBETEVWQlFXbENMRWRCUTJwQ0xFMUJRMG9zU1VGQlN5eE5RVU5IU0N4RlFVRkJSQ3hGUVVGUkxFVkJRVWtzUTBGQlF5eEpRVUZpTEZsQlFVRkRMRVZCUVdsQ0xFMUJRVThzVFVGRGVFSXNSMEZCU3l4SFFVTlVSU3hGUVVGWkxFZEJRMW9zVFVGRFNpeFJRVVZUUVN4SlFVTkVReXhGUVVGcFFpeEpRVU55UWtRc1JVRkJXU3hGUVVOd1FpeERRVU5LTEVOQlEwRXNUVUZCVHl4RFFVRkZMRkZCUVVGRUxFVkJRVk1zWlVGQlFVVXNRMEZCWlN4RFFVTnlReXhEUVZsQkxFbEJRVTFETEVkQlFVNHNTMEZCWlN4RFFVTllMRmxCUVZsRExFVkJRVlVzUTBGQlF5eEZRVUZITEVOQlEzUkNMRXRCUVVzc1NVRkJUU3hMUVVOWUxFdEJRVXNzWVVGQlpTeEhRVU53UWl4TFFVRkxMRkZCUVZVc1EwRkJReXhGUVVOb1FpeExRVUZMTEU5QlFWTXNRMEZCUXl4RlFVTm1MRXRCUVVzc1UwRkJWeXhEUVVGRExFVkJRMnBDTEV0QlFVc3NVVUZCVlN4RFFVRkRVaXhGUVVGUlV5eEZRVUZOUXl4RlFVRlRReXhKUVVGWkxFTkJReTlETEVsQlFVMURMRVZCUVUxbUxFZEJRVmxITEVOQlFVMHNSVUZETVVKWExFVkJRMEVzUzBGQlN5eFRRVUZUTEV0QlFVc3NTVUZCU1VVc1IwRkJXVVFzUlVGQlMwZ3NSVUZCVFVNc1EwRkJUeXhEUVVGRExFVkJSWFJFTEV0QlFVc3NUMEZCVHl4TFFVRkxMRWxCUVVsSkxFZEJRV1ZHTEVWQlFVdElMRVZCUVUxRExFTkJRVThzUTBGQlF5eERRVU12UkN4RlFVVkJMRXRCUVVzc1YwRkJZU3hKUVVGSlN5eEhRVUZYTEVOQlFVVXNVVUZCVTFBc1JVRkJVU3hUUVVGWExFdEJRVTBzUTBGQlF5eEZRVU4wUlN4TFFVRkxMRkZCUVZWQkxFTkJRMjVDTEVOQlEwRXNVMEZCVTFFc1JVRkJTME1zUlVGQlZTeERRVU53UWl4SFFVRk5MRU5CUVVVc1VVRkJRV0lzUlVGQlV5eGxRVUZCUlN4RFFVRmxMRVZCUVVsTUxFZEJRV0VzUzBGQlN5eFBRVUZQTEVWQlJUZEVMRWRCUVVsSExFVkJRVk1zUTBGRFZDeEpRVUZOWXl4RlFVRkxSaXhGUVVGSkxGTkJRMllzUjBGQlNVTXNSVUZEUVVRc1JVRkJTU3hSUVVGVlFTeEZRVUZKTEZGQlFWVXNSMEZCUjBFc1JVRkJTU3hQUVVGUE8wRkJRVUVzUlVGQlMxb3NRMEZCVHl4SFFVRkxRU3hWUVVWMFJFVXNSMEZCYTBKVkxFVkJRVWtzVjBGQlZ5eFZRVUZaTEVOQlFVTkZMRVZCUTI1RVJpeEZRVUZKTEdOQlFXZENXaXhWUVVWbVpTeEZRVUZoUkN4RFFVRkZMRWRCUVVzc1EwRkJRMEVzUlVGQlJ5eE5RVUZSUVN4RlFVRkhMRTFCUVUwc1QwRkJVeXhGUVVGSExFTkJRekZFTEVsQlFVbEZMRVZCUVV0R0xFVkJRVWNzVFVGQlRTeERRVUZETEVWQlEyWkhMRVZCUVU5RUxFTkJRVVVzU1VGRFZFRXNSVUZCUzBFc1JVRkJSeXhMUVVOYUxFbEJRVTFGTEVWQlFVdEdMRVZCUVVjc1kwRkRaRUVzUlVGQlJ5eGpRVUZuUWtVc1JVRkJTeXhIUVVGSGJFSXNRMEZCVHp0QlFVRkJMRVZCUVV0clFpeERRVUZGTEVkQlFVdHNRaXhEUVVOc1JDeExRVU5MTEVOQlEwUXNTVUZCVFd0Q0xFVkJRVXRLTEVWQlFVY3NZMEZEWkVFc1JVRkJSeXhqUVVGblFra3NSVUZCU3l4SFFVRkhiRUlzUTBGQlR6dEJRVUZCTEVWQlFVdHJRaXhEUVVGRkxFZEJRVXRzUWl4RFFVTnNSQ3hEUVVOS0xFTkJRMGxoTEVkQlEwRXNUVUZCVFN4VlFVRlZMRXRCUVVzc1RVRkJUVVFzUlVGQlNTeFBRVUZSTEV0QlFVc3NUVUZCVFN4RlFVTnNSQ3hOUVVGTkxGVkJRVlVzUzBGQlN5eE5RVUZOUVN4RlFVRkpMRk5CUVZVc1MwRkJTeXhSUVVGUkxFbEJSM1JFUVN4RlFVRkpMRTlCUVZNc1MwRkJTeXhQUVVOc1FrRXNSVUZCU1N4VFFVRlhMRXRCUVVzc1ZVRkZlRUlzUzBGQlN5eFJRVUZWTEVOQlFVTXNSVUZEYUVJc1MwRkJTeXhQUVVGVExFTkJRVU1zUlVGRFppeExRVUZMTEZOQlFWY3NRMEZCUXl4RFFVTnlRaXhEUVUxQkxGbEJRV0VzUTBGRFZDeE5RVUZQTEVOQlEwZ3NVVUZCVTJZc1IwRkJZU3hMUVVGTExFOUJRVThzUlVGQlJTeFJRVU53UXl4WFFVRlpMRXRCUVVzc1YwRkRha0lzVDBGQlVTeExRVUZMTEU5QlEySXNVMEZCVlN4TFFVRkxMRkZCUTI1Q0xFTkJRMG9zUTBGUFFTeERRVUZETEZGQlFWRnpRaXhGUVVGUlF5eEZRVUZYTEVkQlFVOURMRVZCUVZrc1IwRkJTU3hEUVVNdlF5eFJRVUZYUXl4TFFVRlRTQ3hGUVVOb1FpeE5RVUZCU1N4RlFVRlBMRXRCUVVzc1MwRkJTMFFzUTBGQlN5eEhRVU14UWl4TlFVRkJReXhGUVVGUExFdEJRVXNzU1VGQlNVZ3NSVUZCVlVNc1EwRkJVeXhGUVVOMlF5eERRVVZCTEVOQlFVTXNTMEZCUzBNc1JVRkJUeXhEUVVOVUxFOUJRVkZCTEVWQlFVMHNTMEZCVFN4RFFVTm9RaXhKUVVGTExGbEJRMFFzUzBGQlN5eFhRVUZYTEVsQlFVbEJMRVZCUVUwc1QwRkJVU3hEUVVGRE0wSXNSVUZCVVZjc1JVRkJVME1zU1VGQldTeERRVU0xUkN4SlFVRk5ReXhGUVVGTlppeEhRVUZaTmtJc1EwRkJTeXhGUVVNM1FtUXNSVUZCU1N4RFFVRkRMRWRCUVV0aUxFVkJRMVlzUzBGQlN5eFJRVUZSWVN4RlFVRkxMR2RDUVVGcFFrWXNSVUZCVTBNc1EwRkJUeXhEUVVOMlJDeERRVUZETEVWQlEwUXNTMEZCU3l4UlFVRlJMRXRCUVV0bExFVkJRVTBzVFVGQlRTeEZRVU01UWl4TFFVRkxMR0ZCUVdVc1IwRkRjRUlzVFVGRFNpeEpRVUZMTEZkQlFWa3NRMEZEWWl4SlFVRk5WaXhGUVVGTldTeEhRVUZYTEV0QlFVc3NVVUZCVXl4TFFVRkxMRmRCUVZsR0xFVkJRVThzUzBGQlN5eFBRVUZQTEVWQlEzSkZMRXRCUVVzc1kwRkJaMElzUTBGQlExWXNSVUZCU1N4WFFVRlhMRlZCUTNKRExFdEJRVXNzVVVGQlVWVXNSVUZCVHl4bFFVRm5RaXhwUkVGQmFVUXNSVUZEZWtZc1MwRkJTeXhUUVVGVFZpeEZRVUZMTEVWQlFVc3NSVUZEY0VJc1MwRkJTeXhOUVVOTUxFMUJRVTBzUzBGQlN5eExRVU5tTEV0QlFVc3NTVUZCVFVFc1JVRkRXQ3hMUVVGTExHRkJRV1VzUjBGRGNFSXNTMEZEU2l4RFFVTkJMRWxCUVVzc2EwSkJRMHdzU1VGQlN5eFJRVU5FTEUxQlEwb3NTVUZCU3l4VlFVTk1MRWxCUVVzc1ZVRkRSQ3hMUVVGTExGRkJRVkVzUzBGQlMxVXNSVUZCVFN4TlFVRk5MRVZCUXpsQ0xFMUJRMG9zU1VGQlN5eFJRVUZUTEVOQlExWXNTVUZCVFVjc1JVRkJUVWdzUlVGQlRTeFBRVU5hTEVkQlFVZEJMRVZCUVUwc1QwRkJUeXhMUVVGTExFdEJRVXNzVlVGQlZVRXNSVUZCVFN4TlFVRk5MRU5CUVVNc1IwRkRha1JCTEVWQlFVMHNVVUZEVGtrc1JVRkJVU3hKUVVGSmFFSXNSMEZCWldwQ0xFZEJRVmsyUWl4RFFVRkxMRVZCUVVjc2JVSkJRVzlDUnl4RFFVRkhMRVZCUTNoRkxFdEJRVXNzWTBGQlowSXNRMEZCUXl4TFFVRkxMRWxCUXpOQ0xFdEJRVXNzVDBGQlR5eExRVUZMUXl4RFFVRkxMRVZCUlhSQ0xFdEJRVXNzU1VGQlNTeFBRVUZQTEV0QlFVdEJMRU5CUVVzc1JVRkRPVUlzUzBGRFNpeERRVU5CTEVsQlFVc3NWVUZCVnl4RFFVTmFMRWRCUVVrc1EwRkJReXhMUVVGTExFbEJRVXNzUTBGRFdDeEpRVUZOUkN4RlFVRk5MR2RFUVVOYUxFdEJRVXNzVDBGQlR5eExRVUZMTEVsQlFVbG1MRWRCUVdWcVFpeEhRVUZaTmtJc1EwRkJTeXhGUVVGSExHMUNRVUZ2UWtjc1EwRkJSeXhEUVVGRExFVkJRMmhHTEV0QlEwb3NRMEZEUVN4TFFVRkxMRWxCUVVrc1YwRkJWeXhQUVVGVExFZEJRemRDTEVsQlFVMUZMRVZCUVUxRExFZEJRVmRPTEVWQlFVMHNTVUZCUzBFc1JVRkJUU3hQUVVGVFFTeEZRVUZOTEU5QlFVOHNUMEZCVVN4TFFVRkxMRWxCUVVrc1VVRkJVU3hQUVVGUkxFdEJRVXNzVDBGQlR5eEZRVVV6Unl4SFFVUkJMRXRCUVVzc1UwRkJVeXhMUVVGTExFbEJRVXNzUlVGQlNTeEZRVU40UWtzc1JVRkJTU3hSUVVGVExFTkJRMklzU1VGQlRXSXNSVUZCU3l4TFFVRkxMRWxCUVVrc1VVRkRjRUlzUzBGQlN5eEpRVUZKTEZGQlFWVkJMRVZCUVVzc1IwRkJSMEVzUTBGQlJUdEJRVUZCTEVWQlFVdGhMRVZCUVVrc1QwRkJUeXhIUVVGTFFTeEZRVUZKTEU5QlF6RkVMRU5CUTBFc1MwRkJTeXhKUVVGSkxFMUJRVTBzUTBGQlF5eEZRVUZKUVN4RlFVRkpMRTlCUTNoQ0xFdEJRMG9zUTBGRFFTeFJRVU5KTEV0QlFVc3NUMEZCVHl4TFFVRkxMRWxCUVVscVFpeEhRVUZsYWtJc1IwRkJXVFpDTEVOQlFVc3NSVUZCUnl4dFFrRkJiMElzY1VKQlFYRkNRU3hGUVVGTkxFbEJRVWtzUlVGQlJTeERRVUZETEVOQlEzUklMRU5CUTBvc1EwRlBRU3hEUVVGRExFbEJRVWxHTEVWQlFWY3NSMEZCVDBNc1JVRkJXU3hIUVVGSkxFTkJRMjVETEVkQlFVa3NTMEZCU3l4SlFVTk1MRXRCUVVzc1UwRkJVeXhMUVVGTExFbEJRVXNzUlVGQlNTeEZRVU0xUWl4TlFVRk5MRXRCUVVzc1NVRkRXQ3hMUVVGTExFbEJRVTBzWVVGRlRrUXNSVUZCVlN4RFFVTm1MRWxCUVUxVExFVkJRVThzVDBGQlR5eFBRVUZQTEVOQlFVVXNXVUZCWVN4TFFVRkxMRlZCUVZjc1JVRkJSeXhMUVVGTExFOUJRVThzUlVGRGJrVnFRaXhGUVVGTkxFbEJRVWxyUWl4SFFVRlRMRTlCUVZkRUxFTkJRVWtzUlVGRGNFTXNTMEZCU3l4alFVTk1MRXRCUVVzc1VVRkJVVklzUlVGQlZ5eGxRVUZuUWl4MVEwRkJkVU1zUlVGRGJrWlVMRVZCUVVrc1RVRkJVU3hEUVVGRExFVkJRVWRUTEVWQlFWZEJMRU5CUVZNc1JVRkRjRU1zUzBGQlN5eFRRVUZUVkN4RlFVRkxMRVZCUVVzc1JVRkRlRUlzVFVGQlRVRXNRMEZEVml4RFFVTktMRU5CUTBvc1JVTjBUa0VzU1VGQlRXMUNMRWRCUVZFc1QwRkJUeXhoUVVGaExFVkJRelZDUXl4SFFVRlBMRTlCUVU4c1pVRkJaU3hGUVVNM1FrTXNSMEZCVXl4UFFVRlBMR0ZCUVdFc1JVRTJRbTVETEZOQlFWTkRMRWRCUVUxRExFVkJRVXRETEVWQlFWTXNRMEZEY2tJc1UwRkJWVVFzUjBGQlQwRXNSVUZCU1N4UFFVRlRMR0ZCUXpsQ1FTeEZRVUZOTEVOQlFVVXNUVUZCVDBFc1JVRkJTU3hOUVVGUExFMUJRVTlCTEVWQlFVa3NTMEZCVFN4SFFVTXZRMFVzUjBGQlR5eFBRVUZQTEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVkR0xFVkJRVXRETEVOQlFVOHNRMEZETVVNc1EwRkxRVVlzUjBGQlRTeE5RVUZSU0N4SFFVVmtSeXhIUVVGTkxFdEJRVTlHTEVkQlJXSkZMRWRCUVUwc1QwRkJVMFFzUjBGRlprTXNSMEZCVFN4WFFVRmhMRU5CUVVORExFVkJRVXRITEVsQlFWTXNRMEZET1VJc1NVRkJTVU1zUlVGQlQwb3NSVUZEV0N4UFFVRlhMRU5CUVVOTExFVkJRVTlETEVOQlFVc3NTVUZCUzBnc1JVRkJUU3hEUVVNdlFpeEpRVUZOU1N4RlFVRk5TQ3hIUVVGQkxGbEJRVUZCTEVWQlFVOURMRWRCUTI1Q0xFZEJRVWxGTEVkQlFVOHNWVUZCVjBFc1JVRkRiRUpJTEVWQlFVOUhMRVZCUVVrc1RVRkJUVVFzUTBGQlN5eE5RVWQwUWl4UFFVTlNMRU5CUTBFc1QwRkJUMFlzUTBGRFdDeEZRVTFCVEN4SFFVRk5MR2xDUVVGdFFpeERRVUZEUXl4RlFVRkxSeXhKUVVGVExFTkJRM0JETEVsQlFVMUxMRVZCUVZOVUxFZEJRVTBzVjBGQlYwTXNSVUZCUzBjc1JVRkJTeXhOUVVGTkxFVkJRVWNzUlVGQlJTeERRVUZETEVWQlEyaEVSU3hGUVVGUlJpeEZRVUZMUVN4RlFVRkxMRTlCUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGREwwSk5MRVZCUVU5RUxFZEJRVUVzV1VGQlFVRXNSVUZCVTBnc1IwRkRkRUlzUjBGQlNVa3NSMEZCVVN4VlFVRlhRU3hGUVVOdVFpeFBRVUZQUVN4RlFVTllMRTFCUVUwc1NVRkJTU3hOUVVGTkxEWkNRVUUyUWl4RFFVTnFSQ3hGUVVOQkxGTkJRVk5RTEVkQlFVOURMRVZCUVUxRExFVkJRVTFJTEVWQlFWTXNRMEZEYWtNc1NVRkJTVk1zUlVGQlQxUXNSVUZCVVVjc1JVRkJUVVFzUTBGQlNTeEZRVU0zUWl4SFFVRkpMRTlCUVU5UExFZEJRVk1zVTBGRGFFSXNUMEZCVDBFc1JVRkRXQ3hSUVVGWFRDeEpRVUZUTEVOQlFVTXNUVUZCVHl4UFFVRlBMRVZCUVVjc1EwRkRiRU1zU1VGQlRVMHNSVUZCVVZBc1JVRkJTME1zUTBGQlN5eEZRVU40UWl4SFFVRkpUU3hIUVVGVExGVkJRVmRCTEVWQlFVOHNRMEZETTBJc1VVRkJVME1zUlVGQlNTeEZRVUZIUVN4RlFVRkpSQ3hGUVVGTkxFMUJRVTBzVDBGQlVTeEZRVUZGUXl4RlFVRkhMRU5CUTNwRExFbEJRVTFETEVWQlFVdFlMRWRCUVU4c1QwRkJUeXhQUVVGUFF5eEZRVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRSU3hGUVVGUFR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVkRUxFVkJRVTBzVFVGQlRVTXNRMEZCUXl4RlFVRkhXQ3hEUVVGUExFVkJRMjVHTEVkQlFVa3NUMEZCVDFrc1IwRkJUeXhUUVVOa1JDeEZRVUZKUXl4RlFVRkxMRTFCUTFJc1NVRkJTVUVzU1VGQlQycENMRWRCUTFvc1QwRkJUMEVzUjBGRFJtbENMRWxCUVU5bUxFdEJRMXBoTEVWQlFVMHNUVUZCVFN4UFFVRlBReXhGUVVGSExFTkJRVU1zUlVGRGRrSkJMRWRCUVVzc1IwRkZZaXhEUVVOSkxFOUJRVTlHTEVkQlFWTXNXVUZCWTB3c1NVRkJWU3hSUVVONFEwc3NSVUZCVDBFc1JVRkJTMDRzUlVGQlRVUXNRMEZCU1N4RlFVTTVRaXhEUVVOS0xFTkJRMEVzVDBGQlR5eFBRVUZQVHl4SFFVRlRMRmRCUVdGQkxFVkJRVXRPTEVWQlFVMUVMRU5CUVVrc1JVRkJTVThzUTBGRE0wUXNRME42UmtFc1NVRkJUVWtzUjBGQlRTeFRRVVZPUXl4SFFVRlhMRWxCUlZoRExFZEJRVmNzU1VGRldFTXNSMEZCVXl4SlFUQkNaaXhUUVVGVFF5eEhRVUZWUXl4RlFVRlJMRU5CUTNaQ0xFOUJRVkZCTEVWQlFWRXNRMEZEV2l4TFFVRkxReXhIUVVORUxFMUJRVThzYTBKQlExZ3NTMEZCUzBNc1IwRkRSQ3hOUVVGUExGZEJRMWdzUzBGQlMwTXNSMEZEUkN4TlFVRlBMR2xDUVVOWUxFdEJRVXRETEVkQlEwUXNUVUZCVHl4VFFVTllMRWxCUVVzc1RVRkRSQ3hOUVVGUExGbEJRMWdzU1VGQlN5eE5RVU5FTEUxQlFVOHNWVUZEV0N4SlFVRkxMRWRCUTB3c1NVRkJTenRCUVVGQkxFVkJRMHdzU1VGQlN6dEJRVUZCTEVWQlEwUXNUVUZCVHl4VlFVTllMRWxCUVVzc1NVRkRSQ3hOUVVGUExHVkJRMWdzU1VGQlN5eEpRVU5FTEUxQlFVOHNiVUpCUTFnc1NVRkJTeXhKUVVORUxFMUJRVThzWjBKQlExZ3NTVUZCU3l4SlFVTkVMRTFCUVU4c2FVSkJRMWdzU1VGQlN5eEpRVU5FTEUxQlFVOHNaVUZEV0N4SlFVRkxMRWxCUTBRc1RVRkJUeXhwUWtGRFdDeEpRVUZMTEVsQlEwUXNUVUZCVHl4bFFVTllMRWxCUVVzc1NVRkRSQ3hOUVVGUExFOUJRMllzUTBGRFFTeFBRVUZSU2l4RlFVRlBMRU5CUVVNc1JVRkJSeXhEUVVObUxFbEJRVXNzU1VGRFRDeEpRVUZMTEVsQlEwUXNUVUZCVHl4UlFVTllMRWxCUVVzc1NVRkRSQ3hOUVVGUExGVkJRMWdzU1VGQlN5eEpRVU5FTEUxQlFVOHNhVUpCUTFnc1NVRkJTeXhKUVVORUxFMUJRVThzVVVGRFdDeEpRVUZMTEVsQlEwUXNUVUZCVHl4VFFVTllMRWxCUVVzc1NVRkRSQ3hOUVVGUExFMUJRMWdzU1VGQlN5eEpRVU5FTEUxQlFVOHNkVUpCUTFnc1NVRkJTeXhKUVVORUxFMUJRVThzZFVKQlExZ3NTVUZCU3l4SlFVTk1MRWxCUVVzc1NVRkRSQ3hOUVVGUExIRkNRVU5tTEVOQlEwRXNUMEZCVHl4SlFVTllMRU5ETVVKQkxGTkJRVk5MTEVkQlFWRkRMRVZCUVVrc1EwRkRha0lzVDBGQlVVRXNSVUZCU1N4RFFVTlNMRXRCUVVzc1QwRkRUQ3hKUVVGTExFbEJRMHdzU1VGQlN6dEJRVUZCTEVWQlEwd3NTVUZCU3l4TFFVTk1MRWxCUVVzc1NVRkRSQ3hOUVVGUExFZEJRMWdzVVVGRFNTeE5RVUZQTEVWQlEyWXNRMEZEU2l4RFFVTkJMRWxCUVUxRExFZEJRVmtzU1VGQlNTeEpRVUZKTEhkQ1FVRjNRaXhGUVVNMVEwTXNSMEZCVnl4SlFVRkpMRWxCUVVrc2JVWkJRVzFHTEVWQlEzUkhReXhIUVVGeFFpeEpRVUZKTEVsQlFVa3NUMEZCVHl4RlFVTndRME1zUjBGQmNVSXNTVUZCU1N4SlFVRkpPMEZCUVVFc1NVRkJZeXhGUVVNelEwTXNSMEZCYlVKTUxFZEJRVThzUTBGQlEwRXNSMEZCVFVrc1IwRkJiVUlzU1VGQlNVb3NRMEZCUlN4RlFXZENNVVJOTEVkQlFVNHNTMEZCV1N4RFFVTlNMR0ZCUVdNc1EwRkxWaXhMUVVGTExFMUJRVkVzUjBGTllpeExRVUZMTEd0Q1FVRnZRaXhIUVUxNlFpeExRVUZMTEdkQ1FVRnJRaXhIUVVWMlFpeExRVUZMTEU5QlFWTXNSMEZMWkN4TFFVRkxMRkZCUVZVc1IwRkZaaXhMUVVGTExGVkJRVmtzUlVGTGFrSXNTMEZCU3l4WFFVRmhMRVZCUld4Q0xFdEJRVXNzV1VGQll5eEZRVVZ1UWl4TFFVRkxMRmRCUVdFc1MwRkZiRUlzUzBGQlN5eExRVUZQTEV0QlJWb3NTMEZCU3l4SlFVRk5MRU5CUTJZc1EwRlBRU3hEUVVGRExFbEJRVWxETEVWQlFWRkRMRVZCUVdFc1IwRkJUeXhEUVhKS2NrTXNTVUZCUVVNc1JVRnpTbEVzUjBGQlNVWXNSVUZCVVN4RFFVTlNMRWRCUVVrc1QwRkJUMEVzUjBGQlZ5eFRRVU5zUWl4TlFVRk5MRlZCUVZVc2QwSkJRWGRDTEVWQlF6VkRMRXRCUVVzc1QwRkJVeXhMUVVGTExFOUJRVk1zUzBGQlN5eFBRVUZUUVN4RlFVRlRRU3hGUVVOdVJDeExRVUZMTEZkQlFXRXNTVUZEZEVJc1EwRkRRU3hMUVVGTExFMUJRVkVzUTBGQlEwTXNSVUZEWkN4SlFVRkpSU3hIUVVGUFJDeEZRVUZCTEV0QlFVc3NUMEZCVEN4TFFVRkJRU3hGUVVGaExGTkJRM2hDTEV0QlFVOURMRWxCUVZOR0xFZEJRV01zUzBGQlN5eFRRVUZUTEVOQlFVTXNTVUZEZWtORkxFVkJRVThzVFVGQlFVTXNSVUZCVHl4TFFVRkxMRlZCUVZWRUxFTkJRVWtzUlVGRGVrTXNRMEZEUVN4WFFVRlpMRU5CUTFJc1NVRkJTVVVzUlVGQlNTeExRVUZMTEVsQlExUmFMRVZCUVVzc1MwRkJTeXhQUVVGUFdTeERRVUZETEVWQlEzUkNMRXRCUVU5YUxFbEJRVThzUzBGQlQwRXNTVUZCVHl4TFFVTjRRa0VzUlVGQlN5eExRVUZMTEU5QlFVOHNSVUZCUlZrc1EwRkJReXhGUVVONFFpeE5RVUZKTEVOQlFVTmFMRWRCUVUxQkxFbEJRVThzUzBGQlQwRXNTVUZCVHp0QlFVRkJMRVZCUTNKQ0xFZEJRMUJCTEVsQlFVOHNTMEZEUVN4TFFVRkxMRTlCUVU5WkxFVkJRVWtzUTBGQlF5eEpRVUZOTzBGQlFVRXNSVUZETTBJc1JVRkRXQ3hEUVVOQkxFOUJRVTlETEVWQlFVY3NRMEZEVGl4UFFVRlBMRXRCUVVzc1QwRkJUeXhMUVVGTExFbEJRVTFCTEVOQlFVTXNRMEZEYmtNc1EwRkRRU3hsUVVGbFF5eEZRVUZSTEVOQlEyNUNMRWxCUVVsa0xFVkJRVXNzUzBGQlN5eFBRVUZQWXl4RFFVRk5MRVZCUXpOQ0xFZEJRVWtzUzBGQlN5eFhRVUZoTEVWQlFVY3NRMEZEY2tJc1NVRkJTVU1zUlVGQlV5eEZRVU5pTEV0QlFVOW1MRWxCUVU4c1MwRkRWa0VzUlVGQlN5eExRVUZMTEU5QlFVOHNSVUZCUldVc1JVRkJVMFFzUTBGQlRTeEZRVU4wUXl4SFFVRkpaQ3hKUVVGUExFdEJRVTBzUTBGRFlpeEpRVUZOVlN4RlFVRlBMRXRCUVVzc1QwRkJUMHNzUlVGQlUwUXNSVUZCVXl4RFFVRkRMRVZCUXpWRExFZEJRVWxLTEVsQlFWTTdRVUZCUVN4SFFVRlRMRU5CUVVOQkxFZEJRVkVzUTBGQlF5eExRVUZMTEUxQlEycERMRTlCUVU5SkxFVkJRVk5ETEVWQlFWTXNRMEZEYWtNc1EwRkRRU3hQUVVGUFppeEpRVUZQTzBGQlFVRXNSMEZCVVdVc1IwRkJWU3hMUVVGTExGbEJRV1VzUTBGQlEyWXNSMEZCVFN4RFFVRkRMRXRCUVVzc1RVRkRNMFJqTEVWQlFWTkRMRVZCUTFRc1JVRkRWaXhEUVVOQkxFZEJRVWxtTEVsQlFVOHNTMEZCVDBFc1NVRkJUeXhKUVVGTExFTkJRekZDTEVsQlFVMW5RaXhGUVVGTExFdEJRVXNzVDBGQlR5eFBRVUZQUml4RlFVRlJMRU5CUVVNc1JVRkRka01zU1VGQlMwVXNTVUZCVHl4UFFVRlRRU3hKUVVGUExGRkJRVlZxUWl4SFFVRlJMRXRCUVVzc1QwRkJUMlVzUlVGQlV5eERRVUZETEVOQlFVTXNSVUZEYWtVc1RVRkJUeXhGUVVObUxFTkJRMEVzVDBGQlQwRXNRMEZEV0N4RFFVTkJMRk5CUVZVc1EwRkRUaXhKUVVGSlJ5eEZRVUZOTEV0QlFVc3NWMEZMWml4UFFVcEpMRTlCUVU5QkxFZEJRVkVzVlVGQllVRXNTVUZCVVN4SlFVRk5RU3hGUVVGTkxFdEJRVXNzVDBGRGNrUkJMRVZCUVUwc1MwRkJTeXhQUVVGUExGRkJRVkU3UVVGQlFTeEZRVUZOTEV0QlFVc3NSMEZCUnl4RlFVTjRReXhMUVVGTExGZEJRV0ZCTEVkQlJXeENRU3hKUVVGUkxFZEJRMFFzUzBGQlN5eE5RVUZSTEV0QlFVc3NUMEZCVHl4VlFVRlZMRXRCUVVzc1IwRkJSeXhGUVVGSkxFMUJRM1JFTEV0QlFVc3NUMEZCVDBFc1JVRkJUU3hEUVVGRExFbEJRVTBzVDBGRGVrSkJMRWRCUVU4c1IwRkRTaXhMUVVGTExFOUJRVThzVlVGQlZTeExRVUZMTEVsQlFVdEJMRU5CUVVjc1JVRkRPVU1zUTBGRFFTeFRRVUZUU2l4RlFVRkhMRU5CUTFJc1QwRkJUeXhMUVVGTExFbEJRVTFCTEVkQlFVc3NTMEZCU3l4UFFVRlBMRTFCUTNaRExFTkJRMEVzVVVGQlVVc3NSVUZCVHl4RFFVTllMRmxCUVVzc1QwRkJVeXhMUVVGTExFOUJRVThzVlVGQlZTeExRVUZMTEVkQlFVY3NSVUZETlVNc1MwRkJTeXhKUVVGTkxFVkJRMWdzUzBGQlN5eFhRVUZoTEV0QlEyeENMRXRCUVVzc1MwRkJUMEVzUlVGRFRDeEpRVU5ZTEVOQlEwRXNTMEZCUzB3c1JVRkJSeXhEUVVOS0xFOUJRVThzUzBGQlN5eFBRVUZQTEU5QlFVOHNTMEZCU3l4SlFVRkxRU3hEUVVGRExFTkJRM3BETEVOQlEwRXNRMEZCUXl4VlFVRlZTQ3hGUVVGTkxFTkJRMklzVDBGQlVVRXNSVUZCVFN4RFFVTldMRWxCUVVzc1UwRkRSQ3hQUVVGUExFMUJRVUZETEVWQlFVOHNTMEZCU3l4WlFVRlpMRWRCUTI1RExFbEJRVXNzWVVGRFJDeFBRVUZQTEUxQlFVRkJMRVZCUVU4c1MwRkJTeXhsUVVGbExFZEJRM1JETEVsQlFVc3NZMEZEUkN4UFFVRlBMRTFCUVVGQkxFVkJRVThzUzBGQlN5eG5Ra0ZCWjBJc1IwRkRka01zU1VGQlN5eE5RVU5FTEU5QlFVOHNUVUZCUVVFc1JVRkJUeXhMUVVGTExHTkJRV01zUjBGRGNrTXNTVUZCU3l4UFFVTkVMRTlCUVU4c1RVRkJRVUVzUlVGQlR5eExRVUZMTEc5Q1FVRnZRaXhIUVVNelF5eEpRVUZMTEdkQ1FVTkVMRTlCUVU4c1RVRkJRVUVzUlVGQlR5eExRVUZMTEd0Q1FVRnJRaXhIUVVONlF5eEpRVUZMTEdWQlEwUXNUMEZCVHl4TlFVRkJRU3hGUVVGUExFdEJRVXNzYVVKQlFXbENMRWRCUTNoRExFbEJRVXNzWlVGRFJDeFBRVUZQTEUxQlFVRkJMRVZCUVU4c1MwRkJTeXhwUWtGQmFVSXNSVUZETlVNc1EwRkRTaXhEUVVOQkxFTkJRVU1zWVVGQll5eERRVU5ZTEVsQlFVbFJMRVZCUVU4c1MwRkJTeXhSUVVGUkxFVkJRM2hDTEVkQlFVbEJMRWxCUVZNc1MwRkRWQ3hQUVVGUExFdEJRVXNzVVVGQlVTeFJRVUZSTEVWQlMyaERMRWRCU2tsQkxFVkJRVXNzUTBGQlF5eEpRVUZOUXl4TFFVTmFMRTFCUVVGVUxFVkJRVThzUzBGQlN5eFZRVUZWTEVOQlFVTXNSMEZEZGtKUkxFVkJRVTlCTEVWQlFVc3NWVUZCVlN4RFFVRkRMRWRCUlhaQ1FTeEZRVUZMTEVOQlFVTXNTVUZCVFN4SlFVRkxMRU5CUTJwQ0xFbEJRVWxGTEVWQlFWTkdMRVZCUVVzc1QwRkRaRWNzUlVGQlMwZ3NSVUZCU3l4UlFVRlJMRWRCUVVjc1JVRkRla0lzUzBGQlQwY3NTVUZCVHl4SlFVRkpMRU5CUTJRc1NVRkJUWFJDTEVWQlFVdHRRaXhGUVVGTFJ5eEZRVUZMTEVOQlFVTXNSVUZEZEVJc1IwRkJTWFJDTEVsQlFVOHNTMEZCVDBFc1NVRkJUeXhKUVVGTkxFTkJRek5DY1VJc1JVRkJVME1zUlVGQlN5eEZRVU5rTEV0QlEwb3NUVUZGU1VFc1JVRkJTMGdzUlVGQlN5eFJRVUZSTEVsQlFVdEhMRVZCUVVzc1EwRkJReXhEUVVWeVF5eERRVU5CTEU5QlFXRXNRMEZEVkN4SlFVRk5kRUlzUlVGQlMyMUNMRVZCUVV0RkxFVkJRVk1zUTBGQlF5eEZRVU14UWl4SFFVRkpja0lzU1VGQlR5eExRVUZQUVN4SlFVRlBMRWxCUTNKQ2NVSXNSMEZCVlN4TlFVVldMRTFCUTFJc1EwRkRRU3hKUVVGTlVpeEhRVUZMTEUxQlFVRkdMRVZCUVU4c1MwRkJTeXhWUVVGVlZTeERRVUZOTEV0QlFVMHNUVUZCUVZZc1JVRkJUeXhMUVVGTExGZEJRVmNzUlVGQlNTeEpRVU40UlN4aFFVRkJRU3hGUVVGUExFdEJRVXNzVlVGQlZWRXNSVUZCU3l4UFFVRlRUaXhEUVVGRExFZEJRM0pETEV0QlFVc3NXVUZCV1N4RlFVTldMRkZCUTFnc1EwRkRRU3hIUVVGSkxFdEJRVXNzVlVGQlZTeEZRVUZITEVOQlEyeENMRWxCUVUxVkxFVkJRVXNzVFVGQlFWb3NSVUZCVHl4TFFVRkxMRmRCUVZjc1JVRkJTU3hIUVVOMFF5eGhRVUZCUVN4RlFVRlBMRXRCUVVzc1ZVRkJWVkVzUlVGQlN5eFBRVUZUU1N4RFFVRkZMRWRCUTNSRExFMUJRVUZhTEVWQlFVOHNTMEZCU3l4WlFVRlpMRWRCUTJwQ0xGRkJRMWdzUTBGRFFTeGhRVUZOWVN4SFFVTkRMRTFCUVVGaUxFVkJRVThzUzBGQlN5eGxRVUZsTEVWQlEzUkRMRU5CUTBFc1EwRkJReXhuUWtGQmFVSXNRMEZEWkN4SlFVRk5XQ3hGUVVGTExFdEJRVXNzVDBGQlR5eERRVUZETEVWQlEzaENMRWRCUVVrc1EwRkJRMEVzUjBGQlRTeERRVUZETEV0QlFVc3NUVUZEWWl4UFFVRlBMRXRCUVVzc1VVRkJVU3haUVVGWkxFVkJRM0JETEVkQlFVbEJMRWxCUVU4c1MwRkJUMEVzU1VGQlR5eEpRVUZMTEVOQlF6RkNMRWRCUVVrc1EwRkJReXhMUVVGTExFOUJRVk1zUTBGQlF5eExRVUZMTEZOQlFWTXNRMEZCUXl4RlFVTXZRaXhQUVVGUExFdEJRVXNzVVVGQlVTeFpRVUZaTEVWQlEzQkRMRWxCUVUxNVFpeEZRVUZKTEV0QlFVc3NTMEZCU3l4RFFVRkRMRVZCUTNKQ0xFbEJRVXRCTEVsQlFVMHNUMEZCVTBFc1NVRkJUU3hSUVVGVk1VSXNSMEZCVVN4TFFVRkxMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRM1JFTEdGQlFVRlpMRVZCUVU4c1MwRkJTeXhWUVVGVkxFTkJRVU1zUjBGRGRrSXNTMEZCU3l4WlFVRmpMRVZCUTI1Q0xFdEJRVXNzVjBGQllTeEZRVU5ZWXl4SlFVRk5MRTFCUVZFc1RVRkJVU3hSUVVWeVF5eERRVU5CTEZsQlFVc3NXVUZCWXl4TlFVRkJaQ3hGUVVGUExFdEJRVXNzVjBGQlZ5eEZRVUZMTEVkQlF6TkRMRXRCUVVzc1YwRkJZU3hMUVVGTExHRkJRV1VzUTBGQlExb3NSMEZCVVN4TFFVRkxMRTlCUVU4c1EwRkJReXhEUVVGRExFbEJRemRFTEV0QlFVc3NWMEZCWVN4TFFVRkxMR0ZCUTNCQ0xFMUJRVUZaTEVWQlFVOHNTMEZCU3l4blFrRkJaMElzUlVGRGRrTXNRMEZEUVN4RFFVRkRMR2xDUVVGclFpeERRVU5tTEVkQlFVMHNRMEZCUTJVc1JVRkJTME1zUTBGQlJ5eEZRVUZKTEV0QlFVc3NTMEZCU3l4RFFVRkRMRVZCUXpsQ0xFZEJRVWtzUTBGQlEwRXNSMEZCVHl4RFFVRkRMRXRCUVVzc1RVRkRaQ3hQUVVGUExFdEJRVXNzVVVGQlVTeGhRVUZoTEVWQlEzSkRMRWxCUVV0RUxFbEJRVkVzUzBGQlQwRXNTVUZCVVN4TFFVRlBRU3hKUVVGUkxFMUJRVkV6UWl4SFFVRlJORUlzUTBGQlJ5eEZRVUZITEVOQlF6ZEVMRWxCUVUxa0xFZEJRVXNzVFVGQlFVWXNSVUZCVHl4TFFVRkxMRlZCUVZVc1EwRkJReXhMUVVGTkxFMUJRVUZCTEVWQlFVOHNTMEZCU3l4WFFVRlhMRVZCUVVrc1NVRkRia1VzV1VGQlN5eFhRVUZoTEV0QlFVc3NXVUZCWXl4RlFVTnlReXhMUVVGTExHRkJRV1ZGTEVWQlEySXNUVUZCUVVZc1JVRkJUeXhMUVVGTExHZENRVUZuUWl4RlFVTjJReXhEUVVOQkxFMUJRVThzUzBGRFdDeERRVU5CTEVOQlFVTXNaVUZCWjBJc1EwRkRZaXhOUVVGQlFTeEZRVUZQTEV0QlFVc3NWMEZCVnl4RlFVRkpMRWRCUXpOQ0xFbEJRVTFSTEVWQlFVOHNTMEZCU3l4UlFVRlJMRVZCUXpGQ0xFZEJRVWxCTEVsQlFWTXNTMEZEVkN4UFFVRlBMRXRCUVVzc1VVRkJVU3hMUVVGTExFVkJRemRDTEVsQlFVbE9MRVZCUVVrc1RVRkJRVVlzUlVGQlR5eExRVUZMTEdWQlFXVXNSMEZEYmtNc1QwRkJVVkVzUlVGQlMwNHNRMEZCUXl4RlFVRkhMRU5CUTJJc1NVRkJTeXhKUVVORUxFMUJRVUZHTEVWQlFVOHNTMEZCU3l4VlFVRlZVU3hGUVVGTExFOUJRVk5PTEVOQlFVTXNSMEZGZWtNc1MwRkJTeXhQUVVORUxHRkJRVUZHTEVWQlFVOHNTMEZCU3l4WlFVRlpMRWRCUTJwQ0xFMUJRVUZCTEVWQlFVOHNTMEZCU3l4bFFVRmxMRWRCUTNSRExFbEJRVXNzU1VGRFRDeEpRVUZMTEVsQlEwUXNZVUZCUVVFc1JVRkJUeXhMUVVGTExGVkJRVlVzUTBGQlF5eEhRVU4yUWl4TFFVRkxMRkZCUVZVc1IwRkRaaXhMUVVGTExGVkJRVmtzUlVGRFZpeFBRVU5ZTEVsQlFVc3NTVUZEVEN4SlFVRkxMRWxCUlVRc1lVRkJRVUVzUlVGQlR5eExRVUZMTEZWQlFWVXNRMEZCUXl4SFFVTm9RaXhOUVVOWUxFbEJRVXNzU1VGRFJDeGhRVUZCUVN4RlFVRlBMRXRCUVVzc1ZVRkJWVTRzUlVGQlpTeEhRVU01UWl4TlFVTllMRWxCUVVzc1NVRkRUQ3hKUVVGTExFbEJRMFFzVDBGQlR5eE5RVUZCVFN4RlFVRlBMRXRCUVVzc2EwSkJRV3RDTEVkQlEzcERMRWxCUVVzc1NVRkRUQ3hKUVVGTExFbEJRMFFzVDBGQlFVVXNSMEZCU3l4TlFVRkJSaXhGUVVGUExFdEJRVXNzZFVKQlFYVkNMRWRCUTNoRFJTeEhRVUZMTEUxQlFVRkdMRVZCUVU4c1MwRkJTeXhYUVVGWExFVkJRVWtzUjBGRGFFTXNUVUZCUVVFc1JVRkJUeXhMUVVGTExGVkJRVlZSTEVWQlFVc3NUMEZCVTA0c1EwRkJReXhIUVVOeVF5eE5RVUZCUml4RlFVRlBMRXRCUVVzc1dVRkJXU3hIUVVOcVFpeE5RVUZCUVN4RlFVRlBMRXRCUVVzc2FVSkJRV2xDTEVkQlEzaERMRkZCUTBrc1QwRkJUeXhOUVVGQlFTeEZRVUZQTEV0QlFVc3NhVUpCUVdsQ0xFVkJRelZETEVOQlEwb3NRMEZEUVN4RFFVRkRMSEZDUVVGelFpeERRVU51UWl4SlFVRkphVUlzUlVGQlNVd3NSVUZEU2xJc1JVRkJVeXhIUVVOaUxFZEJRMGxoTEVWQlFVc3NUVUZCUVdwQ0xFVkJRVThzUzBGQlN5eFpRVUZaTEVkQlEzcENhVUlzUlVGQlN5eEhRVU5NVEN4RlFVRkxMRTFCUVVGYUxFVkJRVThzUzBGQlN5eFhRVUZYTEVWQlFVc3NSMEZEYWtNc1MwRkJTeXhaUVVGalNTeEZRVUZUVVN4SFFVYzFRa0VzUlVGQlN5eEZRVVZVUVN4SFFVRk5MRTFCUVVGYUxFVkJRVThzUzBGQlN5eFhRVUZYTEVWQlFVa3NVMEZETlVKcFFpeEZRVUZMVEN4RlFVRkxMRWRCUTI1Q0xFbEJRVTFLTEVWQlFVOHNTMEZCU3l4UlFVRlJMRVZCUXpGQ0xFZEJRVWxCTEVsQlFWTXNTMEZEVkN4UFFVRlBMRXRCUVVzc1VVRkJVU3hOUVVGTkxFVkJRemxDTEVsQlFVdEtMRWxCUVZjc1NVRkJUVUVzUlVGQlV5eExRVUZMTEZsQlFXTkpMRVZCUVVzc1EwRkJReXhKUVVGTkxFdEJRM3BFU2l4SlFVRlhMRWxCUTFCSkxFVkJRVXNzVjBGQlZ5eExRVUZMTEVkQlFVdEJMRVZCUVVzc1YwRkJWeXhMUVVGTExFbEJRMmhFY0VJc1IwRkJVVzlDTEVWQlFVc3NRMEZCUXl4RFFVRkRMRWxCVDJZc1JVRkliMEpLTEVsQlFWY3NTMEZCU3l4WFFVRmhMRWRCUTJwRUxFdEJRVXNzV1VGQll5eEpRVU5zUWtrc1JVRkJTeXhEUVVGRExFbEJRVTBzUzBGQlQwRXNSVUZCU3l4RFFVRkRMRWxCUVUwc1RVRkhhRU1zV1VGQlN5eFZRVUZaTEVWQlEycENMRTFCUVUxVkxFZEJRME1zVFVGQlFXeENMRVZCUVU4c1MwRkJTeXhsUVVGbExFZEJSekZETEVsQlFVbEZMRVZCUVVrc1JVRkRVaXhMUVVGUFRTeEZRVUZMVGl4RFFVRkRMRWxCUVUwc1MwRkRaa0VzUjBGQlN5eE5RVUZCUml4RlFVRlBMRXRCUVVzc1ZVRkJWU3hEUVVGRExFZEJRelZDUlN4SFFVRkxMRTFCUVVGR0xFVkJRVThzUzBGQlN5eFhRVUZYTEVWQlFVa3NSMEZEYUVNc1MwRkJTeXhSUVVGVkxFZEJSMjVDTEU5QlJFRkZMRWRCUVVzc1RVRkJRVVlzUlVGQlR5eExRVUZMTEdWQlFXVXNSMEZEZUVKUkxFVkJRVXRPTEVOQlFVTXNSVUZCUnl4RFFVTmlMRXRCUVVzc1QwRkRSQ3hOUVVGUExFOUJRMWdzU1VGQlN5eEpRVU5FTEdGQlFVRkdMRVZCUVU4c1MwRkJTeXhWUVVGVlVTeEZRVUZMTEU5QlFWTk9MRU5CUVVNc1IwRkRPVUlzVDBGRFdDeEpRVUZMTEVsQlEwd3NTVUZCU3l4SlFVTkVMR0ZCUVVGR0xFVkJRVThzUzBGQlN5eFZRVUZWTEVOQlFVTXNSMEZEZGtJc1MwRkJTeXhSUVVGVkxFZEJRMllzUzBGQlN5eFhRVUZoTEVWQlExZ3NUMEZEV0N4SlFVRkxMRWxCUTB3c1NVRkJTeXhKUVVORUxHRkJRVUZCTEVWQlFVOHNTMEZCU3l4VlFVRlZMRU5CUVVNc1IwRkRka0lzUzBGQlN5eFJRVUZWTEVkQlEyWXNTMEZCU3l4WFFVRmhMRVZCUTFnc1MwRkJTeXhWUVVGWkxFOUJRVk1zVFVGRGNrTXNTVUZCU3l4SlFVTkVMR0ZCUVVGQkxFVkJRVThzUzBGQlN5eFZRVUZWVGl4RlFVRmxMRWRCUXpsQ0xFOUJRMWdzU1VGQlN5eEpRVU5NTEVsQlFVc3NTVUZEUkN4WlFVRkxMRkZCUVZVc1IwRkRVaXhOUVVGQlRTeEZRVUZQTEV0QlFVc3NhMEpCUVd0Q0xFZEJRM3BETEVsQlFVc3NTVUZCU3l4RFFVTk9MRWxCUVUxRUxFVkJRVThzUzBGQlN5eFBRVUZQTEVOQlFVTXNSVUZETVVJc1IwRkJTU3hMUVVGTExGTkJRVmRZTEVkQlFWRlhMRU5CUVVrc1IwRkJTMEVzU1VGQlV5eEpRVU14UXl4WlFVRkxMRkZCUVZVc1IwRkRaaXhOUVVGQlF5eEZRVUZQTEV0QlFVc3NWVUZCVlN4RFFVRkRMRWRCUTNaQ0xFMUJRVUZCTEVWQlFVOHNTMEZCU3l4WFFVRlhMRVZCUVVrc1IwRkRjRUlzVFVGRlppeERRVVZCTEZGQlEwa3NXVUZCU3l4UlFVRlZMRWRCUTFJc1RVRkJRVUVzUlVGQlR5eExRVUZMTEdsQ1FVRnBRaXhGUVVNMVF5eERRVU5LTEVOQlEwRXNRMEZCUXl4dFFrRkJiMElzUTBGRGFrSXNTVUZCVFcxQ0xFVkJRVkVzUzBGQlN5eFBRVUZQTEVOQlFVTXNSVUZEZGtKaUxFVkJRVTBzUzBGQlN5eFBRVUZQTEZGQlFWRmhMRVZCUVU4c1MwRkJTeXhKUVVGTkxFTkJRVU1zUlVGRGFrUXNSMEZCU1VFc1NVRkJWU3hKUVVOV0xFdEJRVTlpTEVsQlFWRXNTVUZCVFN4TFFVRkxMRTlCUVU5QkxFVkJRVTBzUTBGQlF5eEpRVUZOTEV0QlF6RkRRU3hGUVVGTkxFdEJRVXNzVDBGQlR5eFJRVUZSTEVsQlFVdEJMRVZCUVUwc1EwRkJReXhOUVVreFF5eE5RVUZQUVN4SlFVRlJMRWxCUVVrc1EwRkRaaXhKUVVGSlNpeEZRVUZKTEVWQlExSXNTMEZCVHl4TFFVRkxMRTlCUVU5SkxFVkJRVTBzUlVGQlNVb3NRMEZCUXl4SlFVRk5MRTFCUTJoRFFTeEhRVUZMTEVWQlExUXNSMEZCU1VFc1JVRkJTU3hKUVVGTkxFVkJRMVlzVFVGRFNra3NSVUZCVFN4TFFVRkxMRTlCUVU4c1VVRkJVU3hKUVVGTFFTeEZRVUZOTEVOQlFVTXNRMEZETVVNc1EwRkhTaXhKUVVGTll5eEZRVUZMTEV0QlFVc3NUMEZCVHl4VlFVRlZMRVZCUVVka0xFTkJRVWNzUlVGRGJrTlhMRVZCUVV0SExFVkJRVWNzVVVGQlVUdEJRVUZCTEVWQlFVMHNTMEZCU3l4SFFVRkhMRVZCUTJ4RExFZEJRVWxJTEVsQlFVOHNSMEZCU1N4RFFVTllMRXRCUVU5QkxFbEJRVThzU1VGQlNTeERRVU5rTEVsQlFVMU9MRVZCUVVzc1MwRkJTeXhsUVVGbFRTeEZRVUZMTEVOQlFVTXNSVUZEY2tNc1IwRkJTVTRzU1VGQlR5eEhRVU5RTEUxQlEwcE5MRVZCUVV0SExFVkJRVWNzVVVGQlVUdEJRVUZCTEVWQlFVMVVMRU5CUVVVc1EwRkROVUlzUTBGRFNVMHNTVUZCVHl4TFFVVlFXQ3hGUVVGTlZ5eEhRVUZOUnl4RlFVRkhTQ3hGUVVGTExFTkJRVU1zU1VGQlRTeExRVUZQTEVWQlFVa3NSMEZGT1VNc1EwRkRRU3hIUVVGSldDeEpRVUZSTEVkQlFVa3NRMEZEV2l4SFFVRkpMRU5CUVVNc1MwRkJTeXhOUVVOT0xFOUJRVThzUzBGQlN5eFJRVUZSTEdWQlFXVXNSVUZEZGtOQkxFVkJRVTBzUzBGQlN5eFBRVUZQTEUxQlEzUkNMRU5CUTBFc1lVRkJRVTRzUlVGQlR5eExRVUZMTEZsQlFWbE5MRVZCUVUwc1JVRkJSeXhGUVVGTExFZEJReTlDTEV0QlFVc3NWVUZCV1N4UFFVRlRMRXRCUTNKRExFTkJRMEVzUTBGQlF5eDNRa0ZCZVVJc1EwRkRkRUlzUzBGQlN5eHJRa0ZCYjBJc1IwRkRla0lzUzBGQlN5eG5Ra0ZCYTBJc1IwRkRka0lzU1VGQlNVd3NSVUZCU1N4TFFVRkxMRWxCUTJJc1QwRkJZU3hEUVVOVUxFbEJRVTFhTEVWQlFVc3NTMEZCU3l4UFFVRlBMRVZCUVVWWkxFTkJRVU1zUlVGRE1VSXNSMEZCU1Zvc1NVRkJUeXhKUVVOUUxFdEJRVXNzWjBKQlFXdENMRmRCUTJ4Q1FTeEZRVUZMTEV0QlFVOUJMRWRCUVUwc1NVRkRka0lzUzBGQlN5eHJRa0ZCYjBJc1QwRkJUMEVzUTBGQlJTeEZRVUZKTEZWQlEycERRU3hKUVVGUExFbEJRMW9zUzBGRFVpeERRVU5CTEU5QlFVOHNUVUZCUVZjc1JVRkJUeXhMUVVGTExGVkJRVlZZTEVkQlFVMUVMRWRCUVZGRExFTkJRVVVzUjBGQlMwRXNTVUZCVHl4SFFVRkhMRVZCUTJoRkxFTkJRMEVzUTBGQlF5eHJRa0ZCYlVJc1EwRkRhRUlzU1VGQlNUUkNMRVZCUVVzc1MwRkJTeXhKUVVGTkxFVkJRMmhDWWl4RlFVRlRMRVZCUTFSbUxFVkJRMHBuUXl4RlFVRk5MRkZCUVZNc1JVRkJTU3hMUVVGTExFbEJRVTFvUXl4RlFVRkxMRXRCUVVzc1QwRkJUeXhEUVVGRExFVkJRVWtzUlVGQlJTeEZRVU5zUkN4UFFVRlJRU3hGUVVGSkxFTkJRMUlzU1VGQlN5eEpRVU5FWlN4SFFVRlZMRVZCUTFZc1RVRkRTaXhKUVVGTE8wRkJRVUVzUlVGRFJHRXNSVUZCU3l4RlFVTk1ZaXhGUVVGVExFVkJRMVFzVFVGRFNpeEpRVUZMTEV0QlFVMHNRMEZEVUN4SlFVRk5UQ3hGUVVGUExFdEJRVXNzVDBGQlR5eEZRVUZKTEVOQlFVTXNSVUZET1VJc1IwRkJTU3hEUVVGRFFTeEhRVUZSTEVOQlFVTXNTMEZCU3l4TlFVTm1MRTlCUVU4c1MwRkJTeXhSUVVGUkxHTkJRV01zUlVGRGRFTXNSMEZCU1VFc1NVRkJVenRCUVVGQkxFVkJRMVFzUzBGRFVpeERRVU5CTEZGQlEwa3NUVUZCVFhOQ0xFTkJRMlFzUTBGRlNpeEhRVUZKTEVOQlFVTm9ReXhIUVVGTkxFTkJRVU1zUzBGQlN5eE5RVU5pTEU5QlFVOHNTMEZCU3l4UlFVRlJMR05CUVdNc1JVRkRkRU1zUjBGQlNXVXNSMEZCVlN4TFFVRkxMRmRCUVZrc1EwRkRka0lzUzBGQlN5eHZRa0ZCYzBJc1IwRkRNMElzUzBGQlN5eFhRVUZoUVN4RlFVVnNRaXhMUVVGTExGZEJRMFFzUzBGQlN5eHRRa0ZCY1VJc1MwRkJTeXhoUVVGbExFVkJRVWtzUlVGQlNTeExRVUZMTEZsQlJXNUZMRVZCUVVjc1EwRkRReXhKUVVGTlR5eEZRVUZMTEV0QlFVc3NaVUZCWlUwc1JVRkJTeXhEUVVGRExFVkJRM0pETEVkQlFVbE9MRWxCUVU4c1IwRkRVQ3hOUVVOS1RTeEZRVUZMTEV0QlFVc3NUMEZCVHl4UlFVRlJPMEZCUVVFc1JVRkJUVTRzUTBGQlJTeERRVU55UXl4UFFVRlRUU3hKUVVGUExFbEJRMmhDTEVkQlFVbEJMRWxCUVU4c1IwRkJTU3hEUVVOWUxFZEJRVWtzUTBGQlF5eExRVUZMTEUxQlEwNHNUMEZCVHl4TFFVRkxMRkZCUVZFc1kwRkJZeXhGUVVOMFEwRXNSVUZCU3l4TFFVRkxMRTlCUVU4c1RVRkRja0lzUTBGRFNpeERRVWRCTEVsQlFVbG9RaXhGUVVGSlowSXNSVUZCU3l4RlFVVmlMRWxCUkVFMVFpeEZRVUZMTEV0QlFVc3NUMEZCVDFrc1EwRkJReXhGUVVOWVdpeEpRVUZQTEV0QlExWkJMRVZCUVVzc1MwRkJTeXhQUVVGUExFVkJRVVZaTEVOQlFVTXNSVUZEZUVJc1IwRkJTVm9zU1VGQlR5eEpRVUZOTEVOQlEySXNTMEZCVDBFc1NVRkJUeXhMUVVGUlFTeEpRVUZQTEV0QlFVOUJMRWxCUVU4c1RVRkJVVUVzU1VGQlR6dEJRVUZCTEVkQlEzUkVRU3hGUVVGTExFdEJRVXNzVDBGQlR5eEZRVUZGV1N4RFFVRkRMRVZCUTNoQ1owSXNSVUZCUzJoQ0xFVkJRVWtzUTBGRFlpeFRRVU5UTEVOQlFVTXNTMEZCU3l4blFrRkRXQ3hGUVVGSExFTkJRME1zU1VGQlNTeEZRVUZKWjBJc1JVRkJTeXhGUVVOVU5VSXNSVUZCU3l4TFFVRkxMRTlCUVU4c1EwRkJReXhGUVVOc1FrRXNTVUZCVHl4UFFVTlFRU3hGUVVGTExFdEJRVXNzVDBGQlR5eEZRVUZGTEVOQlFVTXNSMEZEZUVJc1NVRkJUV2xETEVWQlFWY3NSVUZEYWtJc1MwRkJUMnBETEVsQlFVOHNTMEZEVmtFc1JVRkJTeXhMUVVGTExFOUJRVThzUlVGQlJTeERRVUZETEVWQlEzaENMRWRCUVVsQkxFbEJRVTg3UVVGQlFTeEhRVUZSTEVkQlFVc3NTMEZCU3l4TFFVRlBMRVZCUVVrc1JVRkJTV1VzUlVGQlUydENMRVZCUTJwRVRDeEZRVUZMTEUxQlJVd3NUVUZEVWl4UFFVRlRMRWxCUldJc1lVRkJUVTBzUjBGRFRpeE5RVUZCZGtJc1JVRkJUeXhMUVVGTExGbEJRVmxwUWl4RlFVRkxMRVZCUVVjc1JVRkJTU3hIUVVNM1FpeE5RVUZCYWtJc1JVRkJUeXhMUVVGTExHVkJRV1VzUlVGRGRFTXNRMEZEUVN4RFFVRkRMR3RDUVVGdFFpeERRVU5vUWl4SlFVRk5kMElzUlVGQlV5eExRVUZMTEZWQlFWa3NSVUZETlVKc1FpeEZRVUZOTEV0QlFVc3NTVUZCVFN4RlFVTnFRa3dzUlVGQlNTeExRVUZMTEVsQlFVMHNSVUZEWmxvc1JVRkRTaXhMUVVGUlFTeEZRVUZMTEV0QlFVc3NUMEZCVHl4RlFVRkZXU3hEUVVGRExFZEJRM2hDTEVkQlFVbGFMRWxCUVU4c1NVRkJTeXhEUVVOYUxFbEJRVTFWTEVWQlFVOHNTMEZCU3l4UFFVRlBSU3hGUVVGSkxFTkJRVU1zUlVGRE9VSXNSMEZCU1dJc1IwRkJVVmNzUTBGQlNTeEhRVUZOZVVJc1IwRkJWV2hETEVkQlFXMUNMRWxCUVVsUExFTkJRVWtzUlVGRGRrUXNUVUZEU2s4c1JVRkJUVXdzUTBGRFZpeFRRVU5UWWl4SFFVRlJReXhEUVVGRkxFVkJRVWNzUTBGRGJFSXNTVUZCU1ZVc1JVRkJUeXhMUVVGTExFOUJRVTlGTEVWQlFVa3NRMEZCUXl4RlFWVTFRaXhIUVZSSldpeEpRVUZQTEU5QlEwaFZMRWxCUVZNN1FVRkJRU3hIUVVOVVJTeEhRVUZMTEVWQlEweGFMRVZCUVVzN1FVRkJRU3hGUVVOTVZTeEZRVUZQTEV0QlFVc3NUMEZCVDBVc1JVRkJTU3hEUVVGRExFZEJSM2hDU3l4RlFVRk5UQ3hIUVVWV1JpeEpRVUZUTEV0QlFWRjVRaXhIUVVGVmFFTXNSMEZCYlVJc1NVRkJTVThzUTBGQlNTeEZRVU4wUkN4TlFVTktMRWRCUVVsV0xFbEJRVTg3UVVGQlFTeEZRVUZOTEVOQlEySXNTVUZCVFhOQ0xFVkJRVXNzUzBGQlN5eGxRVUZsVml4RlFVRkpMRU5CUVVNc1JVRkRjRU1zUjBGQlNWVXNTVUZCVHl4SFFVTlFMRTFCUTBwV0xFVkJRVWtzUzBGQlN5eEpRVUZKUVN4RlFVRkhWU3hGUVVGTExFTkJRVU1zUTBGRE1VSXNRMEZEU2l4TFFVTkxMRU5CUTBRc1IwRkJTV0VzUjBGQlZXaERMRWRCUVcxQ0xFbEJRVWxJTEVOQlFVVXNSVUZEYmtNc1RVRkRTbWxDTEVWQlFVMU1MRU5CUTFZc1EwRkZTaXhOUVVGSkxFTkJRVU5hTEVkQlFVMHNRMEZCUXl4TFFVRkxMRTFCUTA0c1MwRkJTeXhSUVVGUkxHTkJRV01zUjBGRGRFTXNUVUZCVFd0RExFZEJRMDRzVFVGQlFYWkNMRVZCUVU4c1MwRkJTeXhaUVVGWlRTeEZRVUZOTEVWQlFVY3NSVUZCU1N4SFFVTTVRbXRDTEVWQlFWTXNUMEZCVXl4TlFVTTNRaXhEUVVOQkxFTkJRVU1zVlVGQlZYUkNMRVZCUVVjc1EwRkRWaXhQUVVGSlFTeEZRVUZKTEVkQlEwb3NUVUZCVFN4TFFVRkxMRTlCUVU4c1QwRkJUeXhMUVVGTExFbEJRVXRCTEVOQlFVTXNSVUZEY0VNc1MwRkJTeXhMUVVGUFFTeEZRVU5NUVN4SFFVVktMRU5CUTFnc1EwRkRRU3hEUVVGRExGbEJRVmxFTEVWQlFVZDNRaXhGUVVGWkxFTkJRM2hDTEVsQlFVMVlMRVZCUVVrc1MwRkJTeXhQUVVGUExFMUJRVTBzUzBGQlN5eEpRVUZMWWl4RFFVRkRMRVZCUTNaRExFOUJRVWxoTEVkQlEwRXNUVUZCVFVFc1JVRkRUaXhMUVVGTExFdEJRVTlCTEVWQlFVVXNUMEZEVUVFc1JVRkJSU3hUUVVWS1Z5eEpRVU5NTEV0QlFVMHNTVUZEU0N4RlFVTllMRU5CUTBFc1EwRkJReXhuUWtGQmFVSXNRMEZEWkN4UFFVRlJMRXRCUVVzc1QwRkJUeXhEUVVGRExFVkJRVWNzUTBGRGNFSXNTVUZCU3l4SlFVTkVMRTlCUVZNc1RVRkJRWHBDTEVWQlFVOHNTMEZCU3l4UlFVRlJMRXRCUTNoQ0xFMUJRVUZCTEVWQlFVOHNTMEZCU3l4WFFVRlhMRVZCUVVrc1MwRkRNMElzVFVGQlFVRXNSVUZCVHl4TFFVRkxMR1ZCUVdVc1NVRkRjRU1zU1VGQlN5eEpRVU5FTEU5QlFWTXNUVUZCUVVFc1JVRkJUeXhMUVVGTExGVkJRVlZPTEVWQlFXVXNTMEZEZWtNc1RVRkJRVTBzUlVGQlR5eExRVUZMTEZkQlFWY3NSVUZCU1N4TFFVTXpRaXhOUVVGQlFTeEZRVUZQTEV0QlFVc3NaVUZCWlN4SlFVTndReXhKUVVGTExFbEJRMHdzU1VGQlN5eEpRVU5NTEVsQlFVc3NTVUZCU3l4RFFVTk9MRWxCUVUxM1FpeEZRVUZUTEV0QlFVc3NWVUZCV1N4RlFVTXhRbElzUlVGQlRTeExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVTjZRaXhIUVVGSk5VSXNSMEZCVVRSQ0xFTkJRVWNzUjBGQlRWRXNSMEZCVldoRExFZEJRVzFDTEVsQlFVbDNRaXhEUVVGSExFVkJRM0pFTEU5QlFVdFJMRVZCUlVrc1MwRkJTeXhWUVVOV0xFdEJRVXNzVVVGQlZTeEpRVVptTEV0QlFVc3NWMEZCWVN4TFFVRkxMRmxCUVdNc1IwRkhhRU1zVFVGQlFYaENMRVZCUVU4c1MwRkJTeXhWUVVGVkxFTkJRVU1zUzBGRE0wSXNUVUZCUVVFc1JVRkJUeXhMUVVGTExGZEJRVmNzUlVGQlNTeExRVU16UWl4TlFVRkJRU3hGUVVGUExFdEJRVXNzWlVGQlpTeEhRVVY0UXl4RFFVTktMRU5CUTBFc1RVRkJUeXhGUVVOWUxFTkJRMEVzUTBGQlF5eFRRVUZWTEVOQlExQXNSMEZCU1N4TFFVRkxMRTlCUVU4c1EwRkJReXhKUVVGTkxFbEJRVXNzUTBGRGVFSXNTVUZCU1VNc1JVRkJTU3hMUVVGTExFbEJRVTBzUlVGRFpsb3NSVUZCU3l4TFFVRkxMRTlCUVU5WkxFTkJRVU1zUlVGRGRFSXNTMEZCVHl4RFFVRkRZaXhIUVVGUlF5eERRVUZGTEVkQlFVdEJMRWxCUVU4c1MwRkRNVUpCTEVWQlFVc3NTMEZCU3l4UFFVRlBMRVZCUVVWWkxFTkJRVU1zUlVGRGVFSXNUMEZCVHl4TlFVRkJSQ3hGUVVGUExFdEJRVXNzV1VGQldWZ3NTVUZCVHl4SlFVRk5XU3hGUVVGSkxFVkJRVWxCTEVWQlFVY3NSVUZCU3l4RlFVTm9SU3hMUVVOTExFTkJRMFFzU1VGQlNVRXNSVUZCU1N4TFFVRkxMRWxCUVUwc1JVRkRabG9zUlVGQlN5eExRVUZMTEU5QlFVOVpMRU5CUVVNc1JVRkRkRUlzUzBGQlQxb3NSMEZEU0N4SFFVRkpSU3hIUVVGVExFbEJRVWxHTEVOQlFVVXNSVUZEWmtFc1JVRkJTeXhMUVVGTExFOUJRVThzUlVGQlJWa3NRMEZCUXl4VlFVTm1XaXhKUVVGUExFdEJRMXBETEVkQlFWVXNTVUZCU1N4TFFVRkxMRTlCUVU5WExFVkJRVWtzUTBGQlF5eERRVUZETEVkQlEyaERXQ3hIUVVGVkxFbEJRVWtzUzBGQlN5eFBRVUZQVnl4RlFVRkpMRU5CUVVNc1EwRkJReXhGUVVOb1Exb3NSVUZCU3l4TFFVRkxMRTlCUVZGWkxFZEJRVXNzUTBGQlJTeE5RVWQ2UWl4UFFVVlNMRTlCUVU4c1RVRkJRVVFzUlVGQlR5eExRVUZMTEZsQlFWbERMRVZCUVVjc1JVRkJTeXhGUVVNelF5eERRVU5LTEVOQlEwRXNRMEZCUXl4aFFVRmpMRU5CUTFnc1NVRkJUVm9zUlVGQlN5eExRVUZMTEU5QlFVOHNTMEZCU3l4SFFVRkhMRVZCUXk5Q0xFOUJRVWxCTEVsQlFVODdRVUZCUVN4RlFVTkJMRTFCUVVGWExFVkJRVThzUzBGQlN5eFZRVUZWTEVOQlFVTXNSMEZEZWtKWUxFbEJRVThzVFVGQlVTeExRVUZMTEU5QlFVOHNRMEZCUXl4SlFVRk5PMEZCUVVFc1JVRkRhRU1zVFVGQlFWY3NSVUZCVHl4TFFVRkxMRlZCUVZVc1EwRkJReXhIUVVWMlFpeERRVU5tTEVOQlEwRXNRMEZCUXl4WFFVRlhNRUlzUlVGQlZ5eERRVU51UWl4SlFVRkpla0lzUlVGQlNTeExRVUZMTEVsQlFVMHNSVUZEWmxvc1JVRkRTaXhIUVVOSlFTeEZRVUZMTEV0QlFVc3NUMEZCVHl4RlFVRkZXU3hEUVVGRExGRkJRMlphTEVsQlFVOHNTMEZCVVhGRExFZEJRV0Z5UXl4SlFVRlBMRXRCUXpWRExFbEJRVTFoTEVWQlFVbEVMRVZCUVVrc1MwRkJTeXhKUVVOdVFpeFBRVUZKUXl4RlFVRkpMRWxCUTBvc1RVRkJUU3hMUVVGTExFOUJRVThzVDBGQlR5eExRVUZMTEVsQlFVdEJMRU5CUVVNc1JVRkRjRU1zUzBGQlN5eEpRVUZOUkN4SFFVVlNReXhEUVVOWUxFTkJRMEVzUTBGQlF5eFZRVUZWZVVJc1JVRkJUU3hEUVVOaUxFbEJRVWt4UWl4RlFVRkpMRXRCUVVzc1NVRkRWRm9zUlVGQlN5eExRVUZMTEU5QlFVOVpMRU5CUVVNc1JVRkRkRUlzUzBGQlR5eERRVUZETUVJc1JVRkJTM1JETEVOQlFVVXNSMEZEV0VFc1JVRkJTeXhMUVVGTExFOUJRVThzUlVGQlJWa3NRMEZCUXl4RlFVTjRRaXhQUVVGUExFMUJRVUZFTEVWQlFVOHNTMEZCU3l4WlFVRlpReXhGUVVGSExFVkJRVXNzUlVGRE0wTXNRMEZEU2l4RlEzSnpRa0VzU1VGQlRUSkNMRWRCUVU0c1MwRkJhMElzUTBGRFpDeGhRVUZqTEVOQlExWXNTMEZCU3l4WFFVRmhMRU5CUVVNc1JVRkxia0lzUzBGQlN5eFhRVUZqUXl4SFFVRlhMRXRCUVVzc1YwRkJWeXhMUVVGTFFTeERRVUZOTEVWQlRYcEVMRXRCUVVzc1VVRkJWMEVzUjBGQlZ5eERRVU4yUWl4SlFVRkpReXhGUVVGTkxFVkJRMDVETEVWQlFVOHNTMEZCU3l4WFFVRlhMRTlCUXpOQ0xFdEJRVTlFTEVWQlFVMURMRWRCUVUwc1EwRkRaaXhKUVVGTlF5eEZRVUZQUml4RlFVRk5ReXhIUVVGVExFVkJRM2hDTEV0QlFVc3NWMEZCVjBNc1EwRkJSeXhGUVVGSlNDeEZRVU4yUWtNc1JVRkJUVVVzUlVGQlRTeEZRVVZhUkN4RlFVRlBReXhEUVVObUxFTkJRMEVzUjBGQlNTeExRVUZMTEZkQlFWZEdMRU5CUVVjc1NVRkJUVVFzUlVGRGVrSXNUVUZCVHl4RFFVRkZMRXRCUVUxRExFVkJRVTBzUlVGQlJ5eEpRVUZMTEVOQlFVVXNSVUZEYmtNc1IwRkJTVUVzU1VGQlVTeEZRVU5TTEUxQlFVOHNRMEZCUlN4TFFVRk5MRVZCUVVjc1NVRkJTMFFzUTBGQlR5eEZRVU5zUXl4SlFVRk5TU3hGUVVGUkxFdEJRVXNzVjBGQlYwZ3NSVUZCVFN4RFFVRkRMRVZCUTNKRExFMUJRVThzUTBGQlJTeExRVUZOUVN4RlFVRkxMRWxCUVV0RUxFVkJRVk5KTEVWQlFWRXNRMEZCUlN4RFFVTm9SQ3hEUVVOS0xFTkJRMG9zUlVOcVEwRXNVMEZCVTBNc1IwRkJZME1zUlVGQlRVTXNSVUZCVFN4RFFVTXZRaXhSUVVGVFF5eEZRVUZKTEVWQlFVZEJMRVZCUVVsR0xFVkJRVXNzVDBGQlVTeEZRVUZGUlN4RlFVTXZRaXhIUVVGSlJpeEZRVUZMUlN4RFFVRkRMRVZCUVVVc1QwRkJVMFFzUlVGRGFrSXNUVUZCVHl4SFFVTm1MRTFCUVU4c1JVRkRXQ3hEUVVOQkxGTkJRVk5GTEVkQlFXdENTQ3hGUVVGTkxFTkJRemRDTEZGQlFWTkZMRVZCUVVrc1JVRkJSMEVzUlVGQlNVWXNSVUZCU3l4UFFVRlJMRVZCUVVWRkxFVkJReTlDTEU5QlFWRkdMRVZCUVV0RkxFTkJRVU1zUlVGQlJTeExRVUZOTEVOQlEyeENMRWxCUVVzc1VVRkRUQ3hKUVVGTExGVkJRMHdzU1VGQlN5eFZRVU5FTEUxQlEwb3NVVUZEU1N4UFFVRlBRU3hEUVVObUxFTkJSVW9zVFVGQlR5eEZRVU5ZTEVOQlEwRXNVMEZCVTBVc1IwRkJXVU1zUlVGQlR5eERRVU40UWl4UFFVRlJRU3hIUVVGQkxGbEJRVUZCTEVWQlFVOHNTMEZCVFN4RFFVTnFRaXhKUVVGTExGRkJRMHdzU1VGQlN5eFRRVU5NTEVsQlFVc3NkVUpCUTB3c1NVRkJTeXgxUWtGRFRDeEpRVUZMTEd0Q1FVTkVMRTFCUVU4c1IwRkRXQ3hSUVVOSkxFMUJRVThzUlVGRFppeERRVU5LTEVOQlEwRXNVMEZCVTBNc1IwRkJZVU1zUlVGQlVTeERRV3hET1VJc1NVRkJRVU1zUlVGdFEwa3NUMEZCVVVRc1JVRkJUeXhMUVVGTkxFTkJRMnBDTEVsQlFVc3NWMEZEUkN4UFFVRlBRU3hGUVVGUExFMUJRMnhDTEVsQlFVc3NXVUZCWVN4RFFVTmtMRWxCUVUxRkxFVkJRVXRHTEVWQlFVOHNUVUZCVFVFc1JVRkJUeXhOUVVGTkxFOUJRVk1zUTBGQlF5eEZRVU12UXl4UFFVRlBReXhGUVVGQlF5eEZRVUZITEUxQlFVZ3NTMEZCUVVRc1JVRkJWVU1zUlVGQlJ5eExRVU40UWl4RFFVTkJMRWxCUVVzc1dVRkRSQ3hQUVVGUFJpeEZRVUZQTEUxQlFVMUJMRVZCUVU4c1RVRkJUU3hQUVVGVExFTkJRVU1zUlVGQlJTeE5RVVZxUkN4UlFVTkpMRTFCUVU4c1EwRkJReXhEUVVOb1FpeERRVU5LTEVOQlJVRXNVMEZCVTBjc1IwRkJjMEpETEVWQlFVMHNRMEZzUkhKRExFbEJRVUZJTEVWQmJVUkpMRWRCUVVsSExFVkJRVXNzVTBGQlZ5eEZRVU5vUWl4TlFVRlBMRU5CUVVNc1JVRkRXaXhKUVVGSlZDeEZRVUZKVXl4RlFVRkxMRTlCUTJKRExFVkJRVTBzUzBGQlR5eEZRVUZGVml4SFFVRkxMRWRCUTJoQ0xFOUJRVkZUTEVWQlFVdFVMRU5CUVVNc1JVRkJSU3hMUVVGTkxFTkJRMnhDTEVsQlFVc3NXVUZEVEN4SlFVRkxMRzFDUVVOTUxFbEJRVXNzWjBKQlEwd3NTVUZCU3l4bFFVTk1MRWxCUVVzc1ZVRkRSQ3hOUVVGTlZTeERRVU5rTEVOQlJVb3NUMEZCVDBvc1JVRkJRVWNzUlVGQlN5eEZRVUZGVkN4RFFVRkRMRWxCUVZJc1dVRkJRVTBzUlVGQlZ5eFJRVUZUTEZOQlFWTXNRMEZIY0VNc1QwRkJUMGNzUlVGQlN5eFBRVUZQVkN4RlFVRkhVeXhGUVVGTExFMUJRVTBzUTBGRGNrTXNRMEZEUVN4VFFVRlRSU3hIUVVGblFrTXNSVUZCU1N4RFFVTjZRaXhIUVVGSlFTeEZRVUZITEUxQlFVMHNUMEZCVXl4cFFrRkRiRUlzVVVGQlYwd3NTMEZCVFVzc1JVRkJSeXhOUVVOYVRDeEZRVUZITEV0QlEwZ3NRMEZCUTBFc1JVRkJSeXhQUVVOS0xFTkJRVU5XTEVkQlFXTlZMRVZCUVVjc1RVRkJUeXhyUWtGQmEwSXNSMEZETTBNc1EwRkJRMVlzUjBGQlkxVXNSVUZCUnl4SlFVRkxMR1ZCUVdVc1NVRkRiRU5CTEVWQlFVY3NUVUZEU0VFc1JVRkJSeXhOUVVGUlFTeEZRVUZITEV0QlEyeENMRTlCUVU5QkxFVkJRVWNzU1VGRFRrd3NSMEZCV1Vzc1JVRkJSeXhMUVVGTExFVkJRMmhDUVN4RlFVRkhMRTFCUVUwc1NVRkRWQ3hOUVVGTkxGVkJRVlVzUzBGQlN5eE5RVUZOUVN4RlFVRkhMRTFCUVUwc1NVRkJTMEVzUlVGQlJ5eEhRVUZITEVWQlJTOURRU3hGUVVGSExFMUJRVTBzU1VGQlRVRXNSVUZCUnl4SlFVZDBRaXhOUVVGTkxGVkJRVlVzUzBGQlN5eE5RVUZOUVN4RlFVRkhMRTFCUVU5QkxFVkJRVWNzUjBGQlJ5eEZRVU12UXl4UFFVRlBRU3hGUVVGSExFbEJTVEZDTEVOQk5FSkJMRWxCUVUxTkxFZEJRVTRzUzBGQllTeERRVXRVTEZsQlFWbERMRVZCUVZjc1EwRkZia0lzUzBGQlN5eFZRVUZaTEVkQlJXcENMRXRCUVVzc1UwRkJWeXhIUVVWb1FpeExRVUZMTEU5QlFWTXNSVUZGWkN4TFFVRkxMRTlCUVZNc1JVRkZaQ3hMUVVGTExGVkJRVmtzUjBGRmFrSXNTMEZCU3l4TlFVRlJMRU5CUVVNc1JVRkZaQ3hMUVVGTExFOUJRVk1zUjBGRlpDeExRVUZMTEV0QlFVOHNSMEZGV2l4TFFVRkxMRTFCUVZFc1NVRkJTVU1zUjBGRGFrSXNTMEZCU3l4VlFVRlpSQ3hEUVVOeVFpeERRVk5CTEVOQlFVTXNUVUZCVFVVc1JVRkJVVU1zUlVGQllTeEhRVUZQTEVOQlF6TkNMRXRCUVVzc1YwRkJZU3hMUVVGTExGTkJRVmNzUjBGRGJFTXNTMEZCU3l4VlFVRlZMRU5CUVVNc1JVRkRjRUlzVVVGQlYwTXNTMEZCVlN4TFFVRkxMRTFCUVUwc1NVRkJTVVlzUlVGQlVVTXNRMEZCVlN4RlFVTnNSQ3hOUVVGQlJTeEZRVUZQTEV0QlFVc3NTMEZCUzBRc1EwRkJUU3hIUVVOMFFrUXNTVUZEUkN4TlFVRkJSU3hGUVVGUExFdEJRVXNzU1VGQlNTeEhRVU40UWl4RFFVbEJMRU5CUVVNc1MwRkJTMGdzUlVGQlVTeERRVVZXTEVkQlJFRXNTMEZCU3l4UFFVRlRRU3hGUVVOV0xFdEJRVXNzVTBGQlZTeERRVU5tTEV0QlFVc3NVMEZCVnl4SFFVTm9RaXhOUVVGQlJ5eEZRVUZQTEV0QlFVc3NTMEZCU3l4SFFVTnFRaXhMUVVGTExGRkJRVlZJTEVWQlFVOHNUMEZEZEVJc1RVRkRTaXhEUVVOQkxFbEJRVTFxUWl4RlFVRlBjVUlzUjBGQlZVb3NRMEZCVFN4RlFVTTNRaXhIUVVGTGFrSXNSVUZMUVN4SFFVRkpRU3hKUVVGVExGTkJRMlFzUzBGQlN5eFZRVUZaTEVkQlEycENMRXRCUVVzc1UwRkJWeXhIUVVOb1FpeExRVUZMTEV0QlFVOHNZVUZGV0N4RFFVZEVMRTlCUmtFc1MwRkJTeXhMUVVGUFFTeEZRVU5hTEUxQlFVRnZRaXhGUVVGUExFdEJRVXNzUzBGQlN5eEhRVU5VY0VJc1JVRkJUU3hEUVVOV0xFbEJRVXNzVlVGRFJDeExRVUZMTEZWQlFWa3NSMEZEYWtJc1MwRkJTeXhQUVVGVExFVkJRMVlzUzBGQlN5eFhRVU5NTEV0QlFVc3NWVUZCVlN4TFFVRkxMRTlCUVZOcFFpeEZRVUZQTEUxQlFVMHNSVUZET1VNc1RVRkRTaXhKUVVGTExGRkJRMGNzUzBGQlN5eFhRVUZoUVN4RlFVRlBMRU5CUVVNc1NVRkJUU3hOUVVOb1F5eExRVUZMTEZGQlFWVkJMRVZCUVU4c1VVRkRNVUlzVFVGRFNpeEpRVUZMTEcxQ1FVTk1MRWxCUVVzc1owSkJRMHdzU1VGQlN5eGxRVU5ITEV0QlFVc3NXVUZEVEN4TFFVRkxMRkZCUVZWQkxFVkJRVThzVVVGRE1VSXNUVUZEU2l4SlFVRkxMRmRCUTB3c1NVRkJTeXhwUWtGRFJDeFBRVU5LTEZGQlEwa3NTMEZCU3l4VlFVRlpMRVZCUTNwQ0xFTkJRMEVzUzBGQlN5eFJRVUZWUVN4RlFVRlBMRTFCUXpGQ0xFdEJja05YTEVOQlExQXNTVUZCVFVzc1JVRkJWU3h4UWtGQmNVSk1MRU5CUVUwc1IwRkRNME1zVFVGQlFVY3NSVUZCVHl4TFFVRkxMRWxCUVVrc1EwRkJSU3hMUVVGTkxGRkJRVk1zVDBGQlVTeExRVUZMTEU5QlFWRXNVVUZCUVVVc1JVRkJVeXhQUVVGQlRDeERRVUZQTEVOQlFVTXNSMEZEZGtVc1MwRkJTeXhSUVVGVlFTeEZRVUZQTEUxQlF6RkNMRU5CYTBOS0xFTkJSVUVzUTBGQlF5eExRVUZOTEVOQlEwZ3NTMEZCVHl4TFFVRkxMRTFCUVUwc1QwRkJVeXhIUVVOMlFpeE5RVUZCUnl4RlFVRlBMRXRCUVVzc1NVRkJTU3hGUVVONFFpeERRVU5CTEVsQlFVa3NZVUZCWXl4RFFVOWtMRTFCVGxjc1EwRkRVQ3hMUVVGTkxFdEJRVXNzUzBGRFdDeFBRVUZSTEV0QlFVc3NUMEZEWWl4UFFVRlJMRXRCUVVzc1QwRkRZaXhQUVVGUkxFdEJRVXNzVFVGRGFrSXNRMEZGU2l4RFFVTkJMRU5CUVVNc1RVRkJUeXhEUVVOS0xFbEJRVTFITEVWQlFVMHNTMEZCU3l4TFFVRkxMRU5CUVVNc1JVRkRka0lzUjBGQlNTeExRVUZMTEU5QlFWTXNXVUZCWXl4RFFVRkRRU3hIUVVGUFFTeEZRVUZKTEU5QlFWTXNWMEZCV1N4RFFVTTNSQ3hMUVVGUExFdEJRVXNzVFVGQlRTeFBRVUZUTEVkQlEzWkNMRTFCUVVGSUxFVkJRVThzUzBGQlN5eEpRVUZKTEVkQlEzQkNMRXRCUVVzc1RVRkJUU3hMUVVGTExFTkJRMW9zUzBGQlRTeFZRVU5PTEU5QlFWRXNTMEZCU3l4UFFVTmlMRTlCUVZFc1MwRkJTeXhOUVVOcVFpeERRVUZETEVWQlEwUXNUVUZEU2l4RFFVTkJMRWRCUVVrc1EwRkJRMGNzUlVGRFJDeFBRVUZQTEUxQlFVRklMRVZCUVU4c1MwRkJTeXhQUVVGUExFZEJRemxDTEU5QlFWRkhMRVZCUVVrc1MwRkJUU3hEUVVOa0xFbEJRVXNzVjBGRFJDeFBRVUZQTEUxQlFVRklMRVZCUVU4c1MwRkJTeXhUUVVGVFJ5eERRVUZITEVkQlEyNURMRWxCUVVzc1VVRkRUQ3hKUVVGTExGTkJRMHdzU1VGQlN5eDFRa0ZEVEN4SlFVRkxMSFZDUVVORUxFOUJRVThzVFVGQlFVZ3NSVUZCVHl4TFFVRkxMRTlCUVU5SExFTkJRVWNzUjBGRGFrTXNTVUZCU3l4bFFVTkVMRTlCUVU4c1RVRkJRVWdzUlVGQlR5eExRVUZMTEZsQlFWbEhMRU5CUVVjc1IwRkRkRU1zU1VGQlN5eFpRVU5FTEU5QlFVOHNUVUZCUVVnc1JVRkJUeXhMUVVGTExGTkJRVk5ITEVOQlFVY3NSMEZEYmtNc1NVRkJTeXhaUVVORUxFOUJRVThzVFVGQlFVZ3NSVUZCVHl4TFFVRkxMR05CUVdOSExFTkJRVWNzUjBGRGVFTXNTVUZCU3l4clFrRkRSQ3hQUVVGUExFMUJRVUZJTEVWQlFVOHNTMEZCU3l4bFFVRmxSeXhEUVVGSExFZEJRM3BETEVsQlFVc3NWVUZEUkN4UFFVRlBMRTFCUVVGSUxFVkJRVThzUzBGQlN5eFpRVUZaUnl4RFFVRkhMRVZCUXpGRExFTkJSVUVzVFVGQlFVZ3NSVUZCVHl4TFFVRkxMRWxCUVVrc1JVRkRjRUlzUTBGRFFTeExRVUZMU1N4RlFVRkhMRU5CUTBvc1QwRkJUeXhMUVVGTExFMUJRVTBzUzBGQlN5eE5RVUZOTEU5QlFWTkJMRU5CUVVNc1EwRkRNME1zUTBGRFFTeERRVUZETEVsQlFVbERMRVZCUVU4c1EwRkRVaXhKUVVGTmNrSXNSVUZCVVhGQ0xFZEJRVUVzUzBGQlFVRXNSVUZCVXl4TFFVRkxMRTFCUVUwc1NVRkJTU3hGUVVWMFF5eEhRVUZKTEVOQlFVTnlRaXhGUVVWRUxFdEJRVTBzUTBGQlJTeExRVUZOTEZGQlFWTXNUMEZCVVN4TFFVRkxMRTlCUVZFc1QwRkJVU3hIUVVGSkxGRkJSSGhETERaQ1FVTm5SQ3hWUVVVelJDeExRVUZMTEUxQlFVMHNVMEZCVnl4RlFVTXpRaXhOUVVGTlFTeE5RVVZNTEVOQlEwUXNTVUZCVFcxQ0xFVkJRVTBzUzBGQlN5eExRVUZMTEVOQlFVTXNSVUZYZGtJc1QwRldTVzVDTEVWQlFVMHNUMEZCVXl4bFFVVm1RU3hGUVVGTkxFOUJRVk1zVjBGQldXMUNMRVZCUVUxQkxFVkJRVWtzVDBGQlV5eEZRVVY2UTI1Q0xFVkJRVTBzVDBGQlV5eHRRa0ZCY1VKdFFpeEZRVUZKTEU5QlFWTXNZVUZGZEVSdVFpeEZRVUZOTEU5QlFWTXNSMEZGWmtFc1JVRkJUU3hQUVVGVExHMUNRVU5tVVN4SFFVRm5RbElzUTBGQlN5eEZRVU5xUW0xQ0xFVkJRVWtzUzBGQlRTeERRVU5rTEVsQlFVc3NWMEZEUkVFc1JVRkJTU3hOUVVGUmJrSXNSVUZEV2l4TlFVTktMRWxCUVVzc1pVRkRSRzFDTEVWQlFVa3NUVUZCVFN4TFFVRkxia0lzUTBGQlN5eEZRVU53UWl4TlFVTktMRWxCUVVzc1dVRkJZU3hEUVVOa0xFbEJRVTFKTEVWQlFVdGxMRVZCUVVrc1RVRkJUVUVzUlVGQlNTeE5RVUZOTEU5QlFWTXNRMEZCUXl4RlFVTjZReXhIUVVGSlppeEZRVUZITEUxQlFVOHNRMEZEVm1Vc1JVRkJTU3hOUVVGTkxFdEJRVXNzUTBGQlJTeE5RVUZQTEVOQlFVTXNSVUZCUnl4SlFVRkxia0lzUlVGQlR5eEpRVUZMTEVOQlFVTXNRMEZCUlN4RFFVRkRMRVZCUTJwRUxFdEJRVXNzVlVGQldTeEhRVU5xUWl4TlFVTktMRk5CUTFOSkxFVkJRVWNzU1VGRFVrRXNSVUZCUnl4TlFVRlJTaXhOUVVWV0xFTkJRMFFzVDBGQlR5eFBRVUZQU1N4RlFVRkpMRU5CUVVVc1NVRkJTMG9zUlVGQlR5eEpRVUZMTEVOQlFVTXNRMEZCUlN4RFFVRkRMRVZCUTNwRExFdEJRVXNzVlVGQldTeERRVUZEU1N4RlFVRkhMRmxCUTNKQ0xFMUJRMG9zUTBGRFFTeExRVU5LTEVOQlEwRXNTVUZCU3l4WlFVRmhMRU5CUTJRc1NVRkJUVUVzUlVGQlMyVXNSVUZCU1N4TlFVRk5RU3hGUVVGSkxFMUJRVTBzVDBGQlV5eERRVUZETEVWQlEzSkRaaXhGUVVGSExFMUJRMGhsTEVWQlFVa3NUVUZCVFN4TFFVRkxMRU5CUVVVc1RVRkJUeXhEUVVGRExFVkJRVWNzVFVGQlQyNUNMRU5CUVUwc1EwRkJReXhGUVVVeFEwa3NSVUZCUnl4TlFVRlJTaXhGUVVObUxFdEJRMG9zUTBGRFFTeEpRVUZMTEd0Q1FVRnRRaXhEUVVOd1FpeEpRVUZOU1N4RlFVRkxaU3hGUVVGSkxFMUJRVTFCTEVWQlFVa3NUVUZCVFN4UFFVRlRMRU5CUVVNc1JVRkRja01zUTBGQlEyWXNSMEZCVFVFc1JVRkJSeXhOUVVOV1pTeEZRVUZKTEUxQlFVMHNTMEZCU3l4RFFVRkZMRTFCUVU4c1EwRkJReXhGUVVGSExFbEJRVXR1UWl4RlFVRlBMRWxCUVVzc1EwRkJReXhEUVVGRkxFTkJRVU1zUlVGRE5VTkpMRVZCUVVjc1NVRkRVa0VzUlVGQlJ5eE5RVUZSU2l4RlFVVllMRTlCUVU4c1QwRkJUMGtzUlVGQlNTeERRVUZGTEVsQlFVdEtMRVZCUVU4c1NVRkJTeXhEUVVGRExFTkJRVVVzUTBGQlF5eEZRVU0zUXl4TlFVTktMRU5CUlVFc1VVRkRTU3hOUVVGQlowSXNSVUZCVHl4TFFVRkxMRWxCUVVrc1IwRkRhRUlzVFVGQlFVRXNSVUZCVHl4TFFVRkxMRWxCUVVsb1FpeERRVUZMTEVWQlF6ZENMRU5CUTBFc1NVRkJTMjFDTEVWQlFVa3NUMEZCVXl4WlFVTmtRU3hGUVVGSkxFOUJRVk1zWVVGRFlrRXNSVUZCU1N4UFFVRlRMR1ZCUTFwdVFpeEZRVUZOTEU5QlFWTXNZVUZCWlVFc1JVRkJUU3hQUVVGVExHRkJRV01zUTBGRE5VUXNTVUZCVFhOQ0xFVkJRVTkwUWl4RlFVRk5MRTFCUVUxQkxFVkJRVTBzVFVGQlRTeFBRVUZUTEVOQlFVTXNSVUZETTBOelFpeEhRVU5CTEVOQlFVTkJMRVZCUVVzc1MwRkRUaXhEUVVGRFFTeEZRVUZMTEU5QlEwNUJMRVZCUVVzc1RVRkJUU3hQUVVGVExFZEJRM0JDZUVJc1IwRkJhMEozUWl4RlFVRkxMRXRCUVVzc1NVRkJUU3hMUVVOcVEzUkNMRVZCUVUwc1UwRkJWeXhIUVVOa2MwSXNSVUZCU3l4TlFVRk5MRTFCUVUxRExFZEJRVTFCTEVWQlFVY3NUMEZCVXl4WFFVRmhRU3hGUVVGSExFOUJRVk4yUWl4RlFVRk5MRTFCUVUwc1MwRkRlRVZ0UWl4RlFVRkpMRTlCUVZNc1YwRkRZa0VzUlVGQlNTeEpRVUZOUnl4RlFVRkxMRTFCUldaSUxFVkJRVWtzVFVGQlRTeExRVUZMTEVOQlFVVXNUVUZCVDBjc1JVRkJTeXhMUVVGTkxFTkJRVU1zUlVGRGVFTjBRaXhGUVVGTkxFMUJRVTBzVDBGQlR5eEhRVUZKTEVOQlFVTXNSVUZGYUVNc1EwRkRTaXhEUVVOS0xFTkJRMEVzUTBGQlF5eFJRVUZUTEVOQlEwNHNUMEZCVVN4TFFVRkxMRXRCUVUwc1EwRkRaaXhKUVVGTExHbENRVU5FTEV0QlFVMHNRMEZCUlN4TFFVRk5MRmxCUVdFc1QwRkJVU3hMUVVGTExFOUJRVkVzVDBGQlVTeExRVUZMTEUxQlFVOHNSVUZEY0VVc1QwRkRTaXhKUVVGTExHdENRVU5NTEVsQlFVc3NVVUZEVEN4SlFVRkxMRlZCUTB3c1NVRkJTeXhWUVVORUxFMUJRVTBzUzBGQlN5eFpRVU5ZTEU5QlEwb3NTVUZCU3l4WFFVTk1MRWxCUVVzc1dVRkJZU3hEUVVOa0xFbEJRVTEzUWl4RlFVRk5MRU5CUTFJc1MwRkJUU3hYUVVOT0xFOUJRVkVzUzBGQlN5eFBRVU5pTEUxQlFVOHNRMEZCUXl4RFFVTmFMRVZCUTBrc1MwRkJTeXhQUVVGVExHRkJRMlJCTEVWQlFVa3NUVUZCVFN4TFFVRkxMRXRCUVVzc1YwRkJWeXhGUVVOdVF5eExRVUZMTEUxQlFVMHNTMEZCUzBFc1EwRkJSeXhGUVVOdVFpeE5RVU5LTEVOQlEwb3NRMEZEUVN4TFFVRk5MRU5CUTBZc1MwRkJUU3hSUVVOT0xFOUJRVkVzUzBGQlN5eFBRVU5pTEZGQlFWTXNZMEZCWXl4TFFVRkxMRWxCUVVrc2QwSkJRMmhETEU5QlFWRXNTMEZCU3l4TlFVTnFRaXhEUVVOS0xFTkJRMEVzUTBGQlF5eFRRVUZUUVN4RlFVRkxMRU5CUTFnc1IwRkJTVUVzUlVGQlNTeE5RVU5LTEU5QlFVOHNUVUZCUVZJc1JVRkJUeXhMUVVGTExGRkJRVkZSTEVOQlFVY3NSMEZEYkVNc1QwRkJVU3hMUVVGTExFdEJRVTBzUTBGRFppeEpRVUZMTEZsQlFXRXNRMEZEVmpGQ0xFZEJRV3RDTUVJc1JVRkJTU3hMUVVGTExFbEJRVTBzU1VGRGFrTXNUVUZCUVZJc1JVRkJUeXhMUVVGTExFbEJRVWtzUjBGRGFFSXNUVUZCUVVFc1JVRkJUeXhMUVVGTExFdEJRVXNzU1VGSGFrSlJMRVZCUVVrc1RVRkJUU3hMUVVGTExFdEJRVXNzVjBGQlZ5eEZRVU51UXl4TlFVTktMRU5CUTBFc1NVRkJTeXhUUVVOTUxFbEJRVXNzVFVGRFRDeEpRVUZMTEZGQlEwd3NTVUZCU3l4VlFVTk1MRWxCUVVzc1ZVRkRSRUVzUlVGQlNTeE5RVUZOTEV0QlFVc3NTMEZCU3l4WFFVRlhMRVZCUXk5Q0xFMUJRMUlzUTBGRFFTeEpRVUZOUXl4RlFVRkxMRXRCUVVzc1owSkJRV2RDUkN4RFFVRkhMRVZCUXk5Q1F5eEZRVU5CTEV0QlFVc3NUVUZCVFN4TFFVRkxRU3hEUVVGRkxFVkJSV3hDTEV0QlFVMHNRMEZEUml4TFFVRk5MRkZCUTA0c1QwRkJVU3hMUVVGTExFOUJRMklzVVVGQlV5eGpRVUZqTEV0QlFVc3NTVUZCU1N3d1FrRkRhRU1zVDBGQlVTeExRVUZMTEUxQlEycENMRU5CUlZJc1EwRkRRU3hEUVVGRExFOUJRVTlETEVWQlFWRXNRMEZEV2l4SFFVRkpMRXRCUVVzc1QwRkJVeXhuUWtGQmFVSXNRMEZETDBJc1NVRkJUWEJDTEVWQlFVOU1MRWRCUVdFc1MwRkJTeXhMUVVGTExFTkJRVU1zUTBGQlF5eEZRVU5vUXpCQ0xFVkJRVkYwUWl4SFFVRnpRa01zUTBGQlNTeEZRVU53UTNOQ0xFVkJRMEZHTEVWQlFVOHNTMEZEVUVVc1JVRkJUVVlzUlVGQlR5eEpRVU5pUlN4RlFVRkpMRXRCUVVzc1MwRkJTeXhYUVVGWExFVkJRM3BDTEU5QlFVOUdMRVZCUVU4c1MwRkhaRVVzUlVGQlRTeERRVUZETEV0QlFVc3NWMEZCVnl4RlFVTXpRaXhKUVVGTlF5eEZRVUZOTEVOQlExSXNTMEZCVFN4WlFVTk9MRTlCUVZGSUxFVkJRVThzVDBGRFppeFBRVUZSUVN4RlFVRlBMRTlCUTJZc1RVRkJUeXhEUVVGRExFTkJRVVVzVFVGQlFVTXNSVUZCVHl4SlFVRkxSQ3hGUVVGUkxFbEJRVUZGTEVOQlFVa3NRMEZCUXl4RFFVTjJReXhGUVVOQkxFdEJRVXNzVlVGQldTeEhRVU5xUWl4TFFVRkxMRTFCUVUwc1MwRkJTeXhOUVVGTkxFOUJRVk1zUTBGQlF5eEZRVUZKUXl4RFFVTjRReXhOUVVWSkxFMUJRVUZpTEVWQlFVOHNTMEZCU3l4UlFVRlJWU3hEUVVGTkxFVkJRMnhETEVOQlEwRXNRMEZCUXl4WlFVRlpRU3hGUVVGUkxFTkJRMnBDTEU5QlFWRXNTMEZCU3l4TFFVRk5MRU5CUTJZc1NVRkJTeXhSUVVOTUxFbEJRVXNzVlVGRFRDeEpRVUZMTEZWQlEwUkJMRVZCUVU4c1RVRkJUU3hMUVVGTExFdEJRVXNzVjBGQlZ5eEZRVU5zUXl4UFFVTktMRWxCUVVzc1UwRkxSQ3hIUVVwQlFTeEZRVUZQTEU5QlFWTXNTMEZCU3l4UFFVVnlRaXhMUVVGTExGVkJRVmtzUjBGRGFrSXNTMEZCU3l4UFFVRlRMRVZCUTFZc1MwRkJTeXhWUVVGWExFTkJRMmhDTEVsQlFVbEpMRVZCUVVzc1MwRkJTeXhQUVVGUExGRkJRVkU3UVVGQlFTeERRVUZKTEVWQlFVa3NSVUZEY2tNc1MwRkJUMEVzU1VGQlR5eEhRVU5XTEV0QlFVc3NWVUZCVlN4TFFVRkxMRTlCUVZOQkxFTkJRVVVzUlVGREwwSkJMRVZCUVVzc1MwRkJTeXhQUVVGUExGRkJRVkU3UVVGQlFTeEZRVUZOUVN4RFFVRkZMRVZCUVVrc1EwRkZOME1zUTBGRFFTeE5RVUZCWkN4RlFVRlBMRXRCUVVzc1NVRkJTU3hIUVVOb1FpeE5RVVZLTEZGQlEwa3NUVUZCUVVFc1JVRkJUeXhMUVVGTExFbEJRVWtzUjBGRGFFSXNUVUZCUVVFc1JVRkJUeXhMUVVGTExFdEJRVXNzUlVGRGVrSXNRMEZEU2l4RFFVTkJMRU5CUVVNc1UwRkJVMkVzUlVGQlN5eERRWFJrYmtJc1NVRkJRVEZDTEVWQmRXUlJMRWxCUVUxRExFVkJRVXQ1UWl4RlFVRkpMRTFCUVUxQkxFVkJRVWtzVFVGQlRTeFBRVUZUTEVOQlFVTXNSVUZGZWtNc1QwRkJVU3hMUVVGTExFdEJRVTBzUTBGRFppeEpRVUZMTEZWQlJVUXNSMEZFUVN4TFFVRkxMRlZCUVZrc1IwRkRZbnBDTEVWQlFVY3NUVUZCVHl4RFFVTldMRWxCUVUweVFpeEZRVUZOTEZGQlFWTXpRaXhGUVVGSExFMUJRVkZCTEVWQlFVY3NUVUZCVFN4SlFVRk5MRTlCUTNwRGEwSXNSVUZCVHl4TlFVRk5MRkZCUVZGVExFTkJRVWNzUlVGQlNVRXNSVUZCU1VFc1JVRkJTU3hQUVVGVExFTkJRVU1zUlVGQlNTeFJRVU53UkZRc1IwRkJRU3haUVVGQlFTeEZRVUZOTEZGQlFWTXNWVUZEWmxNc1IwRkJRU3hOUVVGQlFTeEZRVUZMTEV0QlFVc3NTMEZCU3l4aFFVVm1SaXhGUVVGSkxFMUJRVTBzUzBGQlN5eERRVUZGTEUxQlFVOHNRMEZCUXl4TFFVRkxMRmRCUVZjc1EwRkJSU3hEUVVGRExFTkJRM0JFTEUxQlExTjZRaXhGUVVGSExFbEJRMUpCTEVWQlFVY3NTVUZCU1N4TFFVRkxMRXRCUVVzc1YwRkJWeXhGUVVjMVFrRXNSVUZCUnl4TlFVRk5MRXRCUVVzc1MwRkJTeXhYUVVGWExFVkJSV3hETEU5QlEwb3NTVUZCU3l4UlFVTk1MRWxCUVVzc1ZVRkRSQ3hIUVVGSlFTeEZRVUZITEUxQlEwaDVRaXhGUVVGSkxFMUJRVTBzUzBGQlN5eERRVUZGTEUxQlFVOHNRMEZCUXl4TFFVRkxMRmRCUVZjc1EwRkJSU3hEUVVGRExGVkJSWFpEZWtJc1JVRkJSeXhKUVVOU1FTeEZRVUZITEVsQlFVa3NTMEZCU3l4TFFVRkxMRmRCUVZjc1RVRkZNMElzUTBGRFJDeEhRVUZKTEV0QlFVc3NhMEpCUVd0Q1FTeEZRVUZITEUxQlFVOTVRaXhGUVVGSkxFMUJRVTBzUlVGQlJ5eERRVU01UXl4SlFVRk5ka0lzUlVGQlQzVkNMRVZCUVVrc1RVRkJUVUVzUlVGQlNTeE5RVUZOTEU5QlFWTXNRMEZCUXl4RlFVTnlRMFVzUjBGQlRUVkNMRVZCUVVGSExFZEJRVUVzV1VGQlFVRXNSVUZCVFN4UlFVRk9MRmxCUVVGSUxFVkJRV0VzU1VGRGVrSXNSMEZCU1N4TlFVRk5MRkZCUVZFMFFpeERRVUZITEVWQlFVY3NRMEZEY0VJc1RVRkJUU3hWUVVGVkxFdEJRVXNzVFVGQlRVRXNSVUZCU3pOQ0xFVkJRVWNzUzBGQlN5eEZRVU40UXpKQ0xFVkJRVWtzUzBGQlN5eExRVUZMTEZkQlFWY3NSVUZEZWtKR0xFVkJRVWtzVFVGQlRTeEpRVUZKTEVWQlEyUXNUVUZEU2l4RFFVTktMRU5CUTBGNlFpeEZRVUZITEUxQlFVMHNTMEZCU3l4TFFVRkxMRmRCUVZjc1EwRkRiRU1zUTBGRFFTeE5RVU5TTEVOQlEwRXNSMEZCU1N4TFFVRkxMRkZCUVZWNVFpeEZRVUZKTEU5QlFWRXNRMEZETTBJc1NVRkJUVWNzUlVGQll5eERRVUZETEV0QlFVc3NWMEZCWVN4TFFVRkxMRk5CUVZkSUxFVkJRVWtzVDBGRGNrUkpMRVZCUVdGRUxFbEJRMlExUWl4RlFVRkhMRXRCUVU5QkxFVkJRVWNzWTBGRFpDeExRVUZMTEU5QlFWTXNaVUZGWkhWQ0xFVkJRVkVzUTBGQlF5eEZRVU5pTEVkQlFVbE5MRWRCUVdNM1FpeEZRVUZITEV0QlFVOHNRMEZCUTBFc1JVRkJSeXhOUVVGUExFTkJRMjVETEVsQlFVMHdRaXhGUVVGTExFTkJRVU1zUlVGRFdpeFJRVUZUYWtNc1JVRkJTU3hGUVVGSFFTeEZRVUZKVHl4RlFVRkhMRWxCUVVrc1QwRkJVU3hGUVVGRlVDeEZRVUZITEVOQlEzQkRMRWxCUVUwd1FpeEZRVUZMYmtJc1JVRkJSeXhKUVVGSlVDeERRVUZETEVWQlEyNUNMRTlCUVZFd1FpeEZRVUZITEV0QlFVMHNRMEZEWWl4SlFVRkxMRlZCUTBSUExFVkJRVWNzUzBGQlMycERMRU5CUVVNc1JVRkRWQ3hOUVVOS0xFbEJRVXNzVVVGRFJDeE5RVU5LTEVsQlFVc3NWVUZEUnpCQ0xFVkJRVWNzVDBGQlUwMHNSVUZCU1N4VFFVTm9Ra01zUlVGQlJ5eFBRVUZUTEVkQlEyaENMRTFCUTBvc1VVRkRTVUVzUlVGQlJ5eFBRVUZUTEVOQlEzQkNMRU5CUTBvc1EwRkRTVUVzUlVGQlJ5eFJRVUZWTEVsQlEySklMRVZCUVZGMlFpeEZRVUZITEVsQlFVa3NUMEZCVHpCQ0xFVkJRVWNzUTBGQlF5eERRVUZETEVWQlEyNURMRU5CUTBFc1QwRkJVU3hMUVVGTExFdEJRVTBzUTBGRFppeEpRVUZMTEZOQlEwd3NTVUZCU3l4TlFVTkhSeXhIUVVGak4wSXNSVUZCUnl4UFFVTnFRblZDTEVWQlFVMHNTMEZCU3l4TFFVRkxMRmRCUVZjc1JVRkRNMEpGTEVWQlFVa3NUVUZCVFN4TFFVRkxMRU5CUVVVc1RVRkJRVVlzUTBGQlRTeERRVUZETEVWQlEzaENMRXRCUVVzc1ZVRkJXU3hKUVVWYWRrSXNSVUZCUnl4SlFVTlNRU3hGUVVGSExFbEJRVWtzUzBGQlN5eExRVUZMTEZkQlFWY3NSVUZITlVKQkxFVkJRVWNzVFVGQlRTeExRVUZMTEV0QlFVc3NWMEZCVnl4RlFVVnNReXhQUVVOS0xFbEJRVXNzYlVKQlEwY3NRMEZCUTBFc1JVRkJSeXhMUVVGUExFTkJRVU5CTEVWQlFVY3NZVUZEWmtFc1JVRkJSeXhOUVVGTkxFdEJRVXNzUzBGQlN5eFhRVUZYTEVWQlF6bENRU3hGUVVGSExGbEJRV01zU1VGRldqWkNMRWRCUVdNM1FpeEZRVUZITEU5QlEzUkNkVUlzUlVGQlRTeExRVUZMTEV0QlFVc3NWMEZCVnl4RlFVTXpRa1VzUlVGQlNTeE5RVUZOTEV0QlFVc3NRMEZCUlN4TlFVRkJSaXhGUVVGUExGbEJRV0VzUlVGQlN5eERRVUZETEVkQlJ6TkRMRXRCUVVzc1RVRkJUU3hMUVVGTExFTkJRMW9zUzBGQlRTeFpRVU5PTEU5QlFWRXNTMEZCU3l4UFFVTmlMRTlCUVZFc1MwRkJTeXhQUVVOaUxFMUJRVThzUTBGQlF5eERRVUZGTEUxQlFVOHNRMEZCUXl4TFFVRkxMRmRCUVZjc1JVRkJSeXhaUVVGaExFVkJRVXNzUTBGQlF5eERRVU0xUkN4RFFVRkRMRVZCUlV3c1MwRkJTeXhWUVVGWkxFZEJRMnBDTEU5QlEwb3NTVUZCU3l4blFrRkRSQ3hIUVVGSmRrSXNSVUZCUnl4WlFVTklMRWRCUVV0QkxFVkJRVWNzU1VGalNDeEhRVUZKUVN4RlFVRkhMRTFCUTFKNVFpeEZRVUZKTEUxQlFVMHNTMEZCU3l4RFFVRkZMRTFCUVU4c1EwRkJReXhGUVVGSExFbEJRVXNzUzBGQlRTeEpRVUZMTEVOQlFVTXNTMEZCU3l4WFFVRlhMRU5CUVVVc1EwRkJReXhWUVVVelJHNURMRWRCUVdOVkxFVkJRVWNzU1VGQlN5eGxRVUZsTEVWQlF6RkRMRXRCUVVzc1RVRkJUU3hMUVVGTExFTkJRMW9zUzBGQlRTeFpRVU5PTEU5QlFWRXNTMEZCU3l4UFFVTmlMRTlCUVZFc1MwRkJTeXhQUVVOaUxFMUJRVThzUTBGQlF5eERRVUZGTEUxQlFVRjFRaXhGUVVGUExFbEJRVXNzUzBGQlRTeEpRVUZMTEVOQlFVTXNTMEZCU3l4WFFVRlhMRU5CUVVVc1EwRkJReXhEUVVONlJDeERRVUZETEZWQlJVazFRaXhIUVVGWlN5eEZRVUZITEVkQlFVY3NSMEZEZGtJc1EwRkJRMVlzUjBGQlkxVXNSVUZCUnl4SlFVRkxMRk5CUVZNc1JVRkJSeXhEUVVOdVF5eEpRVUZOZFVJc1JVRkJVWFJDTEVkQlFYTkNSQ3hGUVVGSExFdEJRVXNzUlVGRGRFTTRRaXhGUVVGTk9VSXNSVUZCUnl4SlFVTlVkMElzUlVGQlRYaENMRVZCUVVjc1NVRkRabmRDTEVWQlFVa3NTMEZCU3l4TFFVRkxMRmRCUVZjc1JVRkZla0lzVDBGQlQzaENMRVZCUVVjc1NVRkZWaXhQUVVGUFFTeEZRVUZITEVsQlExWXNTMEZCU3l4TlFVRk5MRXRCUVVzc1EwRkRXaXhMUVVGTkxGbEJRMDRzVDBGQlVTeExRVUZMTEU5QlEySXNUMEZCVVN4TFFVRkxMRTlCUTJJc1RVRkJUeXhEUVVGRExFTkJRVVVzVFVGQlFYVkNMRVZCUVU4c1NVRkJRVThzUlVGQlN5eEpRVUZCVGl4RFFVRkpMRU5CUVVNc1EwRkRMMElzUTBGQlF5eERRVU5NTEUxQlExTkVMRVZCUVUwc1QwRkJVeXhGUVVWd1FuWkNMRVZCUVVjc1NVRkJUVUVzUlVGQlJ5eEpRVUZKTEU5QlFVOTFRaXhGUVVGUExFdEJRVXNzVjBGQlZ5eEZRVWM1UTNaQ0xFVkJRVWNzU1VGQlNTeExRVUZMTEV0QlFVc3NWMEZCVnl4VlFUbERlRUpXTEVkQlFXTlZMRVZCUVVjc1RVRkJUeXhUUVVGVExFVkJRMnBETEU5QlFVOHNUMEZCVDBFc1JVRkJTU3hEUVVGRkxFbEJRVXNzUzBGQlRTeEpRVUZMTEVOQlFVTXNTMEZCU3l4WFFVRlhMRU5CUVVVc1EwRkJReXhOUVVWMlJDeERRVU5FTEVsQlFVMTFRaXhGUVVGUmRFSXNSMEZCYzBKRUxFVkJRVWNzUzBGQlN5eEZRVU0xUXl4TFFVRkxMRTFCUVUwc1MwRkJTeXhEUVVOYUxFdEJRVTBzV1VGRFRpeFBRVUZSTEV0QlFVc3NUMEZEWWl4UFFVRlJMRXRCUVVzc1QwRkRZaXhOUVVGUExFTkJRVU1zUTBGQlJTeE5RVUZCZFVJc1JVRkJUeXhKUVVGTExFdEJRVTBzU1VGQlN5eERRVUZETEV0QlFVc3NWMEZCVnl4RFFVRkZMRU5CUVVNc1EwRkRla1FzUTBGQlF5eERRVU5NTEUxQmRVTkRka0lzUlVGQlJ5eEpRVWREUVN4RlFVRkhMRTlCUVZNMlFpeEZRVU5xUWtvc1JVRkJTU3hOUVVGTkxFdEJRVXNzUTBGQlJTeE5RVUZCUml4RlFVRlBMRWxCUVVzc1MwRkJUU3hKUVVGTExFTkJRVU1zUzBGQlN5eFhRVUZYTEVOQlFVVXNRMEZCUXl4RlFVVjJSR3BETEVkQlFXTlZMRVZCUVVjc1NVRkJTeXhsUVVGbExFVkJRekZETEV0QlFVc3NUVUZCVFN4TFFVRkxMRU5CUTFvc1MwRkJUU3haUVVOT0xFOUJRVkVzUzBGQlN5eFBRVU5pTEU5QlFWRXNTMEZCU3l4UFFVTmlMRTFCUVU4c1EwRkJReXhEUVVGRkxFMUJRVThzUTBGQlF5eEZRVUZITEVsQlFVc3NTMEZCVFN4SlFVRkxMRU5CUVVNc1MwRkJTeXhYUVVGWExFTkJRVVVzUTBGQlF5eERRVU0zUkN4RFFVRkRMRVZCUjBSQkxFVkJRVWNzU1VGQlNTeExRVUZMTEV0QlFVc3NWMEZCVnl4RlFXUTFRaXhQUVVGUExFOUJRVTlCTEVWQlFVa3NRMEZCUlN4SlFVRkxMRXRCUVUwc1NVRkJTeXhEUVVGRExFdEJRVXNzVjBGQlZ5eERRVUZGTEVOQlFVTXNSVUZwUW1oRkxFdEJRVXNzVlVGQldTeEhRVU5xUWl4UFFVTktMRWxCUVVzc1VVRkRUQ3hKUVVGTExGTkJRMHdzU1VGQlN5eDFRa0ZEVEN4SlFVRkxMSFZDUVVGM1FpeERRVU42UWl4SlFVRk5LMElzUlVGQlN5eExRVUZMTEZkQlFWY3NTMEZCU3l4SlFVRkpMRVZCUTJoRFJpeEhRVUZqTjBJc1JVRkJSeXhQUVVOcVFubENMRVZCUVVrc1RVRkJUU3hMUVVGTExFTkJRVVVzVFVGQlFVWXNSVUZCVHl4SlFVRkxVU3hGUVVGSkxFbEJRVXNzUTBGQlF5eERRVUZGTEVOQlFVTXNSVUZETVVNc1MwRkJTeXhWUVVGWkxFbEJSVm92UWl4RlFVRkhMRWxCUTFJc1MwRkJTeXhOUVVGTkxFdEJRVXNyUWl4RFFVRkZMRWRCUjJ4Q0xFOUJRVThzVDBGQlR5OUNMRVZCUVVrc1EwRkJSU3hKUVVGTEswSXNSVUZCU1N4SlFVRkxMRU5CUVVNc1EwRkJSU3hEUVVGRExFVkJRM1JETEV0QlFVc3NWVUZCV1N4SlFVVnlRaXhOUVVOS0xFTkJRMEVzVVVGQlV5eERRVU5NTEVsQlFVMVdMRVZCUVVzc1MwRkJTeXhuUWtGQlowSkpMRU5CUVVjc1JVRkRia01zUjBGQlNVb3NSVUZCU1N4RFFVTkJUeXhIUVVGbFVDeEZRVUZITEU5QlFWTXNZVUZETTBKSkxFVkJRVWtzVFVGQlRTeExRVUZMTEVOQlFVVXNUVUZCUVVZc1EwRkJUU3hEUVVGRExFVkJSVFZDTEV0QlFVc3NUVUZCVFN4TFFVRkxSaXhEUVVGRkxFVkJRMnhDTEUxQlEwb3NRMEZEU2l4RFFVTktMRU5CUTBvc1EwRkRRU3hOUVVGQlZDeEZRVUZQTEV0QlFVc3NTVUZCU1N4SFFVTm9RaXhOUVVGQlFTeEZRVUZQTEV0QlFVc3NTMEZCU3l4RlFVTnlRaXhEUVVOQkxFTkJRVU1zWTBGQlkyOUNMRVZCUVVzc1EwRXhjVUo0UWl4SlFVRkJha01zUlVFeWNVSlJMRWxCUVUxRExFVkJRVXRuUXl4RlFVRkpMRTFCUVUxQkxFVkJRVWtzVFVGQlRTeFBRVUZUTEVOQlFVTXNSVUZEZWtNc1QwRkJVU3hMUVVGTExFdEJRVTBzUTBGRFppeEpRVUZMTEZWQlEwUXNSMEZCU1doRExFVkJRVWNzVFVGQlR5eERRVU5XTEVsQlFVMHlRaXhGUVVGTkxGRkJRVk16UWl4RlFVRkhMRTFCUVZGQkxFVkJRVWNzVFVGQlRTeEpRVUZOTEU5QlEzcERhMElzUlVGQlR5eE5RVUZOTEZGQlFWRlRMRU5CUVVjc1JVRkJTVUVzUlVGQlNVRXNSVUZCU1N4UFFVRlRMRU5CUVVNc1JVRkJTU3hSUVVOd1JGUXNSMEZCUVN4WlFVRkJRU3hGUVVGTkxGRkJRVk1zVlVGRFpsTXNSMEZCUVN4TlFVRkJRU3hGUVVGTExFdEJRVXNzUzBGQlN5eGhRVVZtU3l4RlFVRkpMRTFCUVUwc1MwRkJTeXhEUVVGRkxFMUJRVThzUTBGQlF5eExRVUZMTEZkQlFWY3NRMEZCUlN4RFFVRkRMRU5CUTNCRUxFMUJSVWxvUXl4RlFVRkhMRTFCUVUwc1MwRkJTeXhMUVVGTExGZEJRVmNzUlVGRGJFTXNUMEZEU2l4SlFVRkxMRkZCUTB3c1NVRkJTeXhWUVVORUxFZEJRVWxCTEVWQlFVY3NUVUZEU0dkRExFVkJRVWtzVFVGQlRTeExRVUZMTEVOQlFVVXNUVUZCVHl4RFFVRkRMRXRCUVVzc1YwRkJWeXhEUVVGRkxFTkJRVU1zVFVGRE0wTXNRMEZEUkN4SFFVRkpMRXRCUVVzc2EwSkJRV3RDYUVNc1JVRkJSeXhOUVVGUFowTXNSVUZCU1N4TlFVRk5MRVZCUVVjc1EwRkRPVU1zU1VGQlRUbENMRVZCUVU4NFFpeEZRVUZKTEUxQlFVMUJMRVZCUVVrc1RVRkJUU3hQUVVGVExFTkJRVU1zUlVGRGNrTk1MRWRCUVUwMVFpeEZRVUZCUnl4SFFVRkJMRmxCUVVGQkxFVkJRVTBzVVVGQlRpeFpRVUZCU0N4RlFVRmhMRWxCUTNwQ0xFZEJRVWtzVFVGQlRTeFJRVUZSTkVJc1EwRkJSeXhGUVVGSExFTkJRM0JDTEUxQlFVMHNWVUZCVlN4TFFVRkxMRTFCUVUxQkxFVkJRVXN6UWl4RlFVRkhMRXRCUVVzc1JVRkRlRU15UWl4RlFVRkpMRXRCUVVzc1MwRkJTeXhYUVVGWExFVkJRM3BDU3l4RlFVRkpMRTFCUVUwc1NVRkJTU3hGUVVOa0xFMUJRMG9zUTBGRFNpeERRVU5CYUVNc1JVRkJSeXhOUVVGTkxFdEJRVXNzUzBGQlN5eFhRVUZYTEVOQlEyeERMRU5CUTBFc1QwRkRTaXhKUVVGTExGTkJRMHdzU1VGQlN5eE5RVU5FTEVkQlFVbEJMRVZCUVVjc1QwRkJVeXhMUVVGTExGRkJRVlZuUXl4RlFVRkpMRTlCUXk5Q0xFMUJRMHBvUXl4RlFVRkhMRTFCUVUwc1MwRkJTeXhMUVVGTExGZEJRVmNzUlVGRE9VSXNUMEZEU2l4SlFVRkxMR1ZCUTBRc1IwRkJTU3hMUVVGTExGTkJRVmRuUXl4RlFVRkpMRTlCUTNCQ0xFMUJRMEZvUXl4RlFVRkhMRTlCUVZOV0xFZEJRV05WTEVWQlFVY3NUVUZCVHl4alFVRmpMRVZCUTJ4RVowTXNSVUZCU1N4TlFVRk5MRXRCUVVzc1EwRkJSU3hOUVVGUExFTkJRVU1zUzBGQlN5eFhRVUZYTEVOQlFVVXNRMEZCUXl4RlFVVTFRMmhETEVWQlFVY3NUVUZCVFN4TFFVRkxMRXRCUVVzc1YwRkJWeXhGUVVOc1F5eE5RVU5TTEVOQlEwRXNSMEZCU1N4TFFVRkxMRTlCUVZOblF5eEZRVUZKTEU5QlFWRXNRMEZETVVJc1NVRkJUVmdzUlVGQlN5eExRVUZMTEdkQ1FVRm5RbGNzUTBGQlJ5eEZRVU51UXl4SFFVRkpXQ3hGUVVGSkxFTkJRMG9zUzBGQlN5eE5RVUZOTEV0QlFVdEJMRU5CUVVVc1JVRkRiRUlzVFVGRFNpeERRVU5LTEVOQlEwRXNUVUZCUVZRc1JVRkJUeXhMUVVGTExFbEJRVWtzUjBGRGFFSXNUVUZCUVVFc1JVRkJUeXhMUVVGTExFdEJRVXNzUlVGRGNrSXNRMEZEUVN4RFFVRkRMR1ZCUVdWUUxFVkJRVWtzUTBGRGFFSXNTVUZCVFV3c1JVRkJTMHNzUlVGQlJ5eE5RVUZOUVN4RlFVRkhMRTFCUVUwc1QwRkJVeXhEUVVGRExFVkJRM1pETEVkQlFVa3NTMEZCU3l4UFFVRlRMR2xDUVVGclFpeERRVU5vUXl4SlFVRkpWU3hGUVVOS0xFZEJRMGtzVFVGQlFVZ3NSVUZCVHl4TFFVRkxMRWxCUVVrc1IwRkRhRUpITEVWQlFVMHNTMEZCU3l4TFFVRkxMRU5CUVVNc1VVRkRXa0VzUjBGQlQwRXNSVUZCU1N4UFFVRlRMR3RDUVVOcVF5eFRRVU5UVml4RlFVRkhMRWxCUVVrc1UwRkJWeXhGUVVGSExFTkJRekZDTEU5QlFWRXNTMEZCU3l4TFFVRk5MRU5CUTJZc1NVRkJTeXhSUVVOTUxFbEJRVXNzYlVKQlEwY3NRMEZCUTB3c1IwRkJUVUVzUlVGQlJ5eEpRVU5XU3l4RlFVRkhMRTFCUVUwc1MwRkJTeXhEUVVGRkxFMUJRVThzUTBGQlF5eExRVUZMTEZkQlFWY3NRMEZCUlN4RFFVRkRMRVZCUlRORFRDeEZRVUZITEUxQlFVMHNTMEZCU3l4TFFVRkxMRmRCUVZjc1JVRkRiRU1zVDBGRFNpeEpRVUZMTEdkQ1FVTkhMRU5CUVVOQkxFZEJRVTFCTEVWQlFVY3NUVUZEVmtzc1JVRkJSeXhOUVVGTkxFdEJRVXNzUTBGQlJTeE5RVUZQTEVOQlFVTXNSVUZCUnl4SlFVRkxMRXRCUVUwc1NVRkJTeXhEUVVGRExFdEJRVXNzVjBGQlZ5eERRVUZGTEVOQlFVTXNSVUZETVVSTUxFVkJRVWNzU1VGRFVrRXNSVUZCUnl4SlFVRkpMRXRCUVVzc1MwRkJTeXhYUVVGWExFVkJSVFZDTEU5QlFVOHNUMEZCVDBFc1JVRkJTU3hEUVVGRkxFbEJRVXNzUzBGQlRTeEpRVUZMTEVOQlFVTXNTMEZCU3l4WFFVRlhMRU5CUVVVc1EwRkJReXhGUVVNMVJDeFBRVU5LTEVsQlFVc3NVVUZEVEN4SlFVRkxMRlZCUTB3c1NVRkJTeXhWUVVOTUxFbEJRVXNzVTBGRFRDeEpRVUZMTEUxQlEwY3NRMEZCUTBFc1IwRkJUVUVzUlVGQlJ5eE5RVU5XU3l4RlFVRkhMRTFCUVUwc1MwRkJTeXhEUVVGRkxFMUJRVThzUTBGQlF5eExRVUZMTEZkQlFWY3NRMEZCUlN4RFFVRkRMRVZCUTNSRFRDeEZRVUZITEVsQlExSkJMRVZCUVVjc1NVRkJTU3hMUVVGTExFdEJRVXNzVjBGQlZ5eEZRVVUxUWtFc1JVRkJSeXhOUVVGTkxFdEJRVXNzUzBGQlN5eFhRVUZYTEVWQlEyeERMRTlCUTBvc1NVRkJTeXhSUVVOTUxFbEJRVXNzVTBGRFRDeEpRVUZMTEhWQ1FVTk1MRWxCUVVzc2RVSkJRWGRDTEVOQlEzcENMRWxCUVUwclFpeEZRVUZMTEV0QlFVc3NWMEZCVnl4TFFVRkxMRWxCUVVrc1JVRkRhRU1zUTBGQlF5OUNMRWRCUVUxQkxFVkJRVWNzVFVGRFZrc3NSVUZCUnl4TlFVRk5MRXRCUVVzc1EwRkJSU3hOUVVGUExFTkJRVU1zUlVGQlJ5eEpRVUZMTUVJc1JVRkJTU3hKUVVGTExFTkJRVU1zUTBGQlJTeERRVUZETEVWQlEzaERMMElzUlVGQlJ5eEpRVU5TTEV0QlFVc3NUVUZCVFN4TFFVRkxLMElzUTBGQlJTeEZRVVZzUWl4UFFVRlBMRTlCUVU4dlFpeEZRVUZKTEVOQlFVVXNTVUZCU3l0Q0xFVkJRVWtzU1VGQlN5eERRVUZETEVOQlFVVXNRMEZCUXl4RlFVTXhReXhOUVVOS0xFTkJRMEVzU1VGQlN5eGxRVU5NTEVsQlFVc3NaVUZEUkRGQ0xFVkJRVWNzU1VGQlNTeExRVUZMTEV0QlFVc3NWMEZCVnl4RlFVTTFRaXhOUVVOU0xFTkJRMEVzU1VGQlRXZENMRVZCUVVzc1MwRkJTeXhuUWtGQlowSm9RaXhEUVVGRkxFVkJSVGxDWjBJc1JVRkRRU3hMUVVGTExFMUJRVTBzUzBGQlMwRXNRMEZCUlN4SFFVVnNRaXhOUVVGQlZDeEZRVUZQTEV0QlFVc3NTVUZCU1N4SFFVTm9RaXhOUVVGQlFTeEZRVUZQTEV0QlFVc3NTMEZCU3l4SFFVVjZRaXhMUVVOTExFTkJRMFFzU1VGQlRXUXNSVUZCVXl4TFFVRkxMRXRCUVVzc1EwRkJReXhGUVVNeFFpeEhRVUZKUVN4RlFVRlBMRTlCUVZNc1kwRkRaQ3hMUVVGTExFOUJRVk1zYVVKQlFXMUNRU3hGUVVGUExGTkJRVmRQTEVWQlFVY3NVVUZEYmtRc1MwRkJTeXhQUVVGVExGZEJRMWdzUTBGQlExQXNSVUZCVHl4TlFVRk5RU3hGUVVGUExFMUJRVTBzVDBGQlV5eERRVUZETEVWQlFVVXNTMEZETDBNc1RVRkJRV01zUlVGQlR5eExRVUZMTEVsQlFVa3NSMEZEYUVJc1RVRkJRVUVzUlVGQlR5eExRVUZMTEV0QlFVc3NWMEZGV2l4TFFVRkxMRTlCUVZNc2FVSkJRMjVDWkN4RlFVRlBMRTlCUVZNc2EwSkJRVzFDTEVOQlEyNURMRWxCUVUxSkxFVkJRVTlNTEVkQlFXRkRMRU5CUVUwc1JVRkRNVUo1UWl4RlFVRlJkRUlzUjBGQmMwSkRMRU5CUVVrc1JVRkRlRU5GTEVkQlFXZENReXhEUVVGRkxFVkJRMnhDTEVsQlFVMXRRaXhGUVVGTmJrSXNSVUZCUnl4SlFVRkpMRTlCUVU4c1JVRkJSMEVzUlVGQlJ5eEpRVUZKTEUxQlFVMHNSVUZETVVOdFFpeEZRVUZKTEV0QlFVc3NTMEZCU3l4WFFVRlhMRVZCUTNwQ0xFbEJRVTFETEVWQlFVMHNRMEZEVWl4TFFVRk5MRmxCUTA0c1QwRkJVWEJDTEVWQlFVY3NUMEZEV0N4UFFVRlJRU3hGUVVGSExFOUJRMWdzVFVGQlR5eERRVUZETEVOQlFVVXNUVUZCUVd0Q0xFVkJRVThzU1VGQlMyeENMRVZCUVVrc1NVRkJRVzFDTEVOQlFVa3NRMEZCUXl4RFFVTnVReXhGUVVOQkxFdEJRVXNzVlVGQldTeEhRVU5xUWl4TFFVRkxMRTFCUVUwc1MwRkJTeXhOUVVGTkxFOUJRVk1zUTBGQlF5eEZRVUZKUXl4RFFVTjRReXhOUVVWSkxFMUJRVUZpTEVWQlFVOHNTMEZCU3l4UlFVRlJVQ3hEUVVGRkxFVkJSVGxDTEVOQlEwb3NRMEZEUVN4WFFVRlhZaXhGUVVGTkxFTkJRMklzUjBGQlNTeExRVUZMTEZWQlFWY3NRMEZEYUVJc1NVRkJTV3RETEVWQlFVc3NTMEZCU3l4UFFVRlBMRkZCUVZFN1FVRkJRU3hEUVVGSkxFVkJRVWtzUlVGRGNrTXNTMEZCVDBFc1NVRkJUeXhIUVVOV0xFdEJRVXNzVlVGQlZTeExRVUZMTEU5QlFWTkJMRU5CUVVVc1JVRkRMMEpCTEVWQlFVc3NTMEZCU3l4UFFVRlBMRkZCUVZFN1FVRkJRU3hGUVVGTlFTeERRVUZGTEVWQlFVa3NRMEZGTjBNc1EwRkRRU3hOUVVGUExFTkJRMGdzUzBGQlFXeERMRVZCUTBFc1QwRkJVU3hMUVVGTExFOUJRMklzVDBGQlVTeExRVUZMTEU5QlEySXNUMEZCVVN4TFFVRkxMRTFCUTJwQ0xFTkJRMG9zUTBGRFFTeG5Ra0ZCWjBKTkxFVkJRVkVzUTBGRGNFSXNUMEZCVVN4TFFVRkxMRXRCUVUwc1EwRkRaaXhKUVVGTExGRkJRMHdzU1VGQlN5eFRRVU5NTEVsQlFVc3NkVUpCUTB3c1NVRkJTeXgxUWtGRFJDeFBRVUZQTEV0QlFVc3NWMEZCVnl4TFFVRkxMRWxCUVVrc1JVRkRjRU1zU1VGQlN5eHpRa0ZEUkN4TlFVRlBMRU5CUTBnc1MwRkJUU3hsUVVOT0xFOUJRVkVzUzBGQlN5eFBRVU5pTEU5QlFWRXNTMEZCU3l4UFFVTmlMRTFCUVU4c1EwRkJReXhMUVVGTExGZEJRVmNzUlVGRGVFSXNUMEZCVVN4RlFVTmFMRVZCUTBvc1NVRkJTeXhwUWtGRFRDeEpRVUZMTEdsQ1FVTkVMRTFCUVU4c1EwRkRTQ3hMUVVGTkxHdENRVU5PTEU5QlFWRXNTMEZCU3l4UFFVTmlMRTlCUVZFc1MwRkJTeXhQUVVOaUxFMUJRVThzUzBGQlN5eFpRVU5hTEUxQlFVOHNRMEZCUXl4RlFVTlNMRWxCUVVzc1EwRkJReXhEUVVOV0xFVkJRMG9zU1VGQlN5eGxRVU5FTEUxQlFVOHNRMEZEU0N4TFFVRk5MRmxCUTA0c1QwRkJVU3hMUVVGTExFOUJRMklzVDBGQlVTeExRVUZMTEU5QlEySXNUVUZCVHl4RFFVRkRMRU5CUVVVc1RVRkJUeXhEUVVGRExFdEJRVXNzVjBGQlZ5eERRVUZGTEVOQlFVTXNRMEZEZWtNc1JVRkRTaXhKUVVGTExHMUNRVUZ2UWl4RFFVTnlRaXhMUVVGTExGVkJRVmtzUjBGRGFrSXNTVUZCVFVrc1JVRkJUMHdzUjBGQllVTXNRMEZCVFN4RlFVTXhRbmxDTEVWQlFWRjBRaXhIUVVGelFrTXNRMEZCU1N4RlFVTjRReXhQUVVGQmNVSXNSVUZCVFN4TFFVRkxMRXRCUVVzc1YwRkJWeXhGUVVOd1FpeERRVU5JTEV0QlFVMHNXVUZEVGl4UFFVRlJMRXRCUVVzc1QwRkRZaXhQUVVGUkxFdEJRVXNzVDBGRFlpeE5RVUZQTEVOQlFVTXNRMEZCUlN4TlFVRkJRU3hGUVVGUExGbEJRV0VzUlVGQlN5eERRVUZETEVOQlEzaERMRU5CUTBvc1EwRkRRU3hKUVVGTExHZENRVUZwUWl4RFFVTnNRaXhMUVVGTExGVkJRVmtzUjBGRGFrSXNTVUZCVFhKQ0xFVkJRVTlNTEVkQlFXRkRMRU5CUVUwc1JVRkRNVUo1UWl4RlFVRlJkRUlzUjBGQmMwSkRMRU5CUVVrc1JVRkRlRU1zVFVGQlR5eERRVU5JTEV0QlFVMHNXVUZEVGl4UFFVRlJMRXRCUVVzc1QwRkRZaXhQUVVGUkxFdEJRVXNzVDBGRFlpeE5RVUZQTEVOQlFVTXNRMEZCUlN4TlFVRkJjVUlzUlVGQlR5eEpRVUZMTEV0QlFVMHNTVUZCU3l4RFFVRkRMRXRCUVVzc1YwRkJWeXhEUVVGRkxFTkJRVU1zUTBGRGVrUXNRMEZEU2l4RFFVTktMRU5CUTBFc1QwRkJUeXhKUVVOWUxFTkJRMEVzYTBKQlFXdENRU3hGUVVGUFZTeEZRVUZSTEVOQlJ6ZENMRTlCUmtrc1MwRkJTeXhQUVVGVExGZEJSV1FzUzBGQlN5eFJRVUZWUVN4RlFVTlNMRWRCUTBwV0xFVkJRVTBzVFVGQlRVb3NSMEZCVFVFc1JVRkJSeXhQUVVGVExGZEJRV0ZCTEVWQlFVY3NUMEZCVXl4UFFVRlBMRU5CUTNwRkxFTkJRMEVzUTBGQlF5eFpRVUZaWlN4RlFVRlJMRU5CUTJJc1MwRkJTeXhQUVVGVExHRkJRMVpCTEVWQlFVOHNTVUZEVUVFc1JVRkJUeXhKUVVGSkxFdEJRVXNzUzBGQlN5eFhRVUZYTEVWQlJXaERRU3hGUVVGUExFbEJRVTBzUTBGQlF5eExRVUZMTEZkQlFWY3NSVUZET1VJc1MwRkJTeXhQUVVGVExGbEJRMlFzVFVGQlFYUkNMRVZCUVU4c1MwRkJTeXhKUVVGSkxFbEJSVFZDTEVOQlEwRXNRMEZCUXl4UlFVRlJhRUlzUlVGQlR5eERRVU5hTEU5QlFWRXNTMEZCU3l4TFFVRk5MRU5CUTJZc1NVRkJTeXhSUVVOTUxFbEJRVXNzV1VGRFRDeEpRVUZMTEZWQlEwd3NTVUZCU3l4bFFVTk1MRWxCUVVzc1pVRkRUQ3hKUVVGTExHZENRVU5FTEUxQlFVRm5RaXhGUVVGUExFdEJRVXNzU1VGQlNTeEhRVU5vUWl4TlFVRkJRU3hGUVVGUExFdEJRVXNzUzBGQlN5eEhRVU5xUWl4TlFVTktMRWxCUVVzc1ZVRkRSQ3hMUVVGTExGVkJRVmtzUjBGRmNrSXNTVUZCU3l4UlFVTk1MRWxCUVVzc1ZVRkRUQ3hSUVVWUmFFSXNSVUZCVFN4SlFVTk9RU3hGUVVGTkxFbEJRVWtzUzBGQlN5eExRVUZMTEZkQlFWY3NSVUZGTDBKQkxFVkJRVTBzU1VGQlRTeERRVUZETEV0QlFVc3NWMEZCVnl4RlFVTTNRaXhMUVVGTExFOUJRVk1zV1VGRFpDeE5RVUZCWjBJc1JVRkJUeXhMUVVGTExFbEJRVWtzUjBGRE5VSXNRMEZEU2l4RFFVTktMRVZETHpaQ1FTeFRRVUZUZFVJc1IwRkJZVU1zUlVGQlV5eERRVU16UWl4SlFVRk5ReXhGUVVGbFJDeEZRVUZSTEdWQlFXbENMRWRCUlRsRExFMUJRVThzUTBGQlJTeFpRVVJYUVN4RlFVRlJMR0ZCUVdkQ1F5eEhRVUZuUWl4SlFVRkpReXhKUVVGclFpeExRVU0xUkN4aFFVRkJSQ3hEUVVGaExFTkJRM1pETEVOQmVVSkJMRk5CUVZORkxFZEJRV05ETEVWQlFWRkRMRVZCUVZVc1EwRkJReXhGUVVGSExFTkJRM3BETEVkQlFVMHNRMEZCUlN4WlFVRkJReXhGUVVGaExHRkJRVUZETEVOQlFXRXNSVUZCU1VNc1IwRkJZVWdzUTBGQlR5eEZRVU53UkVrc1JVRkJVeXhKUVVGSlF5eEhRVUZQU2l4SFFVRkJMRmxCUVVGQkxFVkJRV0VzVlVGQlZTeEZRVU16UTBzc1JVRkJWeXhKUVVGSlF5eEhRVUZUVUN4RFFVRlBMRVZCUldwRFVTeEZRVUZOTEV0QlExWXNVVUZCVjBNc1MwRkJVVWdzUlVGQlV5eFJRVUZSUml4RlFVRlBMRTFCUVUxTUxFTkJRVTBzUlVGQlJ5eEhRVUZOUVN4RlFVRlBMRTFCUVUwc1JVRkRla1VzUjBGQlNTeERRVUZEVXl4RlFVTkVRU3hGUVVGTlF5eFZRVU5FUkN4RlFVRkpMRkZCUVZFc1YwRkJZU3hUUVVGVkxFTkJRM2hEUVN4RlFVRkpMRTlCUVU4c1MwRkJTeXhKUVVGSlJTeEhRVUZsUkN4RlFVRkxMRTFCUVUwc1RVRkJUU3hGUVVGSExFTkJRVU1zUlVGQlJ5eG5Ra0ZCYVVJc2VVVkJRWGxGTEVOQlFVTXNSVUZEZEVvc1MwRkRTaXhEUVVWS0xFOUJRVWxRTEVkQlFXZENSQ3hKUVVOb1FrOHNSVUZCU1N4UFFVRlBMRkZCUVZGSExFZEJRV05hTEVWQlFWRkZMRU5CUVZjc1EwRkJReXhGUVVOeVJFOHNSVUZCU1N4VFFVRlRMRkZCUVZGSExFZEJRV05hTEVWQlFWRkZMRU5CUVZjc1EwRkJReXhIUVVWd1JFOHNRMEZEV0N4RFFVTkJMRk5CUVZOSkxFZEJRVTFETEVWQlFVdERMRVZCUVZOa0xFVkJRVk1zUTBGRGJFTXNTVUZCU1dVc1JVRkRRU3hQUVVGUFJDeEhRVUZaTEZkQlEyNUNReXhGUVVGWFJDeEZRVVZPWkN4SlFVRlpMRkZCUVdGakxFZEJRVmNzVDBGQlQwRXNSMEZCV1N4WFFVTTFSR1FzUlVGQlZXTXNSMEZGWkN4SlFVRk5UaXhGUVVGTlZpeEhRVUZqWlN4RlFVRkxZaXhEUVVGUExFVkJRM1JETEVkQlFVa3NRMEZCUTFFc1JVRkRSQ3hQUVVGUExFdEJSVmdzUjBGRVFVRXNSVUZCU1N4VFFVRlRMRkZCUVZGUkxFZEJRVmRETEVkQlFVdFVMRVZCUVVrc1VVRkJVU3hUUVVGVlVTeERRVUZQTEVOQlFVTXNSVUZETDBSU0xFVkJRVWtzVDBGQlR5eFBRVUZUTEVWQlFVY3NRMEZEZGtJc1IwRkJTVUVzUlVGQlNTeFJRVUZSTEZkQlFXRXNVMEZEZWtJc1RVRkJUVUVzUlVGQlNTeFBRVUZQTEVOQlFVTXNSVUZGYkVKQkxFVkJRVWtzVDBGQlV5eERRVUZETEVOQlEzUkNMRU5CUTBFc1QwRkJUMEVzUlVGQlNTeExRVUZMTEU5QlFVOHNUMEZCVHl4RFFVRkZMRkZCUVZOUExFTkJRVk1zUlVGQlIyWXNRMEZCVHl4RFFVRkRMRU5CUTJwRkxFTkRlRVZCTEVsQlFVRnJRaXhIUVVFclFpeFRRMFl2UWl4SlFVRkJReXhGUVVGdFFpeFRRMnRHV2l4SlFVRlZReXhQUVVGV0xFTkJZMVZCTEVWQlFVRXNhMEpCUVhORExFTkJReTlETEcxQ1FVRnZRaXhKUVVWd1FpeFhRVUZaTEdkQ1FVTmFMR1ZCUVdkQ0xIZENRVU53UWl4RlFVZFBMRk5CUVZORExFVkJRMXBETEVWQlEwRkRMRVZCUVRSQ1NDeEZRVUZCTEd0Q1FVTTFRa2tzUlVGQmNVSXNSMEZEWml4RFFVTk9MRWxCUVVsRExFVkJRVlZETEVWQlFWVktMRU5CUVVzc1JVRkROMElzUjBGQlNTeERRVUZEUnl4RlFVRlRMRTlCUVU5R0xFVkJRVkVzYlVKQlJUZENMRTlCUVZGRkxFVkJRVkVzUzBGQlRTeERRVU5zUWl4SlFVRkxMRTlCUTBRc1QwRkJUMFlzUlVGQlVTeHRRa0ZEYmtJc1NVRkJTeXhUUVVORUxFOUJRVTlGTEVWQlFWRXNUVUZEYmtJc1NVRkJTeXhUUVVOTUxFbEJRVXNzVlVGRFJDeE5RVUZQTEVkQlFVdEJMRVZCUVZFc1RVRkRlRUlzU1VGQlN5eFBRVU5FTEU5QlFVOUJMRVZCUVZFc1RVRkJUU3hUUVVGVExFVkJRMnhETEVsQlFVc3NWMEZEUkN4TlFVRlBMR0ZCUTFnc1NVRkJTeXhSUVVORUxFbEJRVWxGTEVWQlFWTXNSMEZEWWl4UFFVRkpTQ3hKUVVGWFJ5eEhRVUZWTEV0QlEzcENRU3hIUVVGVlJpeEZRVUZSTEUxQlFVMHNTVUZCUzBjc1IwRkJUVkFzUlVGQlUwOHNSVUZCUjB3c1JVRkJVeXhGUVVGSkxFTkJRVU1zUlVGQlJTeExRVUZMTEVsQlFVa3NSVUZEY0VWRExFbEJRVmRITEVkQlFWVXNTMEZEYkVKQkxFVkJRMWdzU1VGQlN5eFRRVU5FTEUxQlEwa3NTMEZEUVN4UFFVRlBMRkZCUVZGR0xFVkJRVkVzUzBGQlN5eEZRVU4yUWl4SlFVRkxTU3hIUVVGTlFTeEZRVUZGTEVOQlFVTXNSVUZCU1N4TFFVRlBVaXhGUVVGVFVTeEZRVUZGTEVOQlFVTXNSVUZCUjA0c1JVRkJVeXhGUVVGSkxFTkJRVU1zUlVGRGRFUXNTMEZCU3l4SlFVRkpMRVZCUTJRc1MwRkZVaXhKUVVGTExFOUJRMFFzVDBGQlQwOHNSMEZCYTBKTUxFVkJRVkVzVFVGQlQwWXNSVUZCVVN4WFFVRlpRU3hGUVVGUkxHTkJRV01zUlVGRGRFWXNTVUZCU3l4WFFVTkVMRTlCUVU5UkxFZEJRWE5DVGl4RlFVRlJMRXRCUVVzc1EwRkRiRVFzUTBGRFNpeERRWFpEVDB3c1JVRkJVeXhUUVVGQlF5eEZRVEJEVkN4VFFVRlRTeXhGUVVGVlRTeEZRVUV3UXl4RFFVTm9SU3hQUVVGSlF5eEZRVUZQUkN4RFFVRkhMRVZCUVZVc1EwRkJSU3hMUVVGTkxFOUJRVkVzVFVGQlQwRXNRMEZCU1N4RlFVTXhRMFVzUlVGQlUwWXNRMEZCUnl4RlFVRlZMRU5CUVVVc1MwRkJUU3hUUVVGVkxFMUJRVTlCTEVOQlFVa3NSVUZEYmtSSExFVkJRVk5JTEVOQlFVY3NSVUZCVlN4RFFVRkZMRXRCUVUwc1UwRkJWU3hOUVVGUFFTeERRVUZKTEVWQlEyNUVTU3hGUVVGVlNpeERRVUZITEVWQlFWVXNRMEZCUlN4TFFVRk5MRlZCUVZjc1RVRkJUMEVzUTBGQlNTeEZRVU55UkVzc1JVRkJWMHdzUTBGQlJ5eEZRVUZWTEVOQlFVVXNTMEZCVFN4WFFVRlpMRTFCUVU5QkxFTkJRVWtzUlVGRGRrUk5MRVZCUVU5T0xFTkJRVWNzUlVGQlZTeERRVUZGTEV0QlFVMHNUMEZCVVN4TlFVRlBRU3hEUVVGSkxFVkJReTlEVHl4RlFVRlJVQ3hEUVVGSExFVkJRVlVzUTBGQlJTeExRVUZOTEZGQlFWTXNUVUZCVDBFc1EwRkJTU3hGUVVOcVJGRXNSVUZCVDFJc1EwRkJSeXhGUVVGVkxFTkJRVVVzUzBGQlRTeFBRVUZSTEUxQlFVOUJMRU5CUVVrc1JVRkRMME5UTEVWQlFWZFVMRU5CUVVjc1JVRkJWU3hEUVVGRkxFdEJRVTBzVjBGQldTeE5RVUZQUVN4RFFVRkpMRVZCUTNaRVZTeEZRVUZUVml4RFFVRkhMRVZCUVZVc1EwRkJSU3hMUVVGTkxGTkJRVlVzVFVGQlQwRXNRMEZCU1N4RlFVTjJSQ3hOUVVOVUxFTkJXazlhTEVWQlFWTXNWVUZCUVUwc1JVRmxWQ3hUUVVGVGFVSXNSVUZCVlZnc1JVRkJZMWtzUlVGQmQwTXNRMEZETlVVc1IwRkJTVVlzUlVGQlUxWXNRMEZCUnl4RlFVRkhMRU5CUTJZc1NVRkJTVXdzUlVGQmNVSXNRMEZCUXl4RlFVTXhRaXhQUVVGVExFTkJRVU5yUWl4RlFVRkxReXhEUVVGTExFbEJRVXNzVDBGQlR5eFJRVUZSWkN4RFFVRkhMRVZCUVVkTUxFVkJRVTlyUWl4RFFVRkhMRVZCUVVsR0xFVkJRVlZITEVWQlFVOUdMRU5CUVVrc1JVRkRha1lzVDBGQlQycENMRU5CUTFnc1UwRkJWMWtzUlVGQlVWQXNRMEZCUnl4RlFVRkhMRU5CUTNKQ0xFbEJRVWxNTEVWQlFXOUNMRU5CUVVNc1JVRkRla0lzVVVGQlUyMUNMRXRCUVZOa0xFVkJRVXRNTEVWQlFVOHNTMEZCUzJkQ0xFVkJRVlZITEVWQlFVOUdMRU5CUVVrc1EwRkJReXhGUVVONlJDeFBRVUZQYWtJc1EwRkRXQ3hMUVVOSkxGRkJRVTlwUWl4RlFVRkxXaXhEUVVGSExFTkJSWFpDTEVOQldrOWFMRVZCUVZNc1ZVRkJRWFZDTEVWQlpWUXNVMEZCVTBrc1JVRkJUME1zUlVGQk5FSkRMRVZCUVRaQ0xFTkJRelZGTEU5QlFVOURMRVZCUVZGR0xFVkJRVTlETEVOQlFVMHNSMEZCU3l4RFFVTnlReXhEUVVaUE4wSXNSVUZCVXl4UFFVRkJNa0lzUlVGTFZDeFRRVUZUUnl4RlFVTmFReXhGUVVOQlF5eEZRVU5CUXl4RlFVTk5MRU5CTTB4a0xFbEJRVUZETEVWQlFVRkRMRVZCYTAxUkxFZEJURWxLTEVsQlFWTkRMRWxCUjFSRUxFbEJRVk1zVTBGQlYwRXNSVUZCVHl4TlFVTXpRa01zU1VGQlV5eFRRVUZYUVN4RlFVRlBMRTFCUXpOQ1JDeEpRVUZUTEUxQlFWRkRMRWxCUVZNc1RVRkJUU3hOUVVGUExFZEJRM1JETEVkQlFVbEVMRWxCUVZNc1MwRkJUU3hOUVVGUExFZEJRekZDTEVkQlFVbERMRWxCUVZNc1MwRkJUU3hOUVVGUExFZEJSeTlDTEVsQlFVbEpMRVZCUVZFNVFpeEZRVUZWZVVJc1EwRkJTU3hGUVVOMFFrMHNSVUZCVVM5Q0xFVkJRVlV3UWl4RFFVRkpMRVZCUlRGQ0xFZEJRVWxKTEVsQlFWVXNVVUZCWVVNc1NVRkJWU3hQUVVGWExFMUJRVThzUjBGRGJFUXNSMEZCU1VRc1NVRkJWU3hQUVVGWExFMUJRVThzUjBGRGFFTXNSMEZCU1VNc1NVRkJWU3hQUVVGWExFMUJRVThzUjBGSGNrTXNSMEZCU1VRc1JVRkJUU3hOUVVGUlF5eEZRVUZOTEV0QlFVMHNUMEZCVDBRc1JVRkJUU3hMUVVGTExHTkJRV05ETEVWQlFVMHNTVUZCU1N4RlFVTjRSU3hIUVVGSlJDeEZRVUZOTEZGQlFWVkRMRVZCUVUwc1RVRkJUeXhOUVVGUExFZEJSWGhETEU5QlFWRkVMRVZCUVUwc1MwRkJUU3hEUVVOb1FpeEpRVUZMTEZOQlEwUXNUMEZCVDBFc1JVRkJUU3hOUVVGTkxHTkJRV05ETEVWQlFVMHNTMEZCWlN4RlFVTXhSQ3hKUVVGTExGTkJRMFFzVDBGQlNVUXNSVUZCVFN4TlFVRlRReXhGUVVGTkxFMUJRWGxDTEVkQlEzcERSQ3hGUVVGTkxFOUJRVlZETEVWQlFVMHNUVUZCZVVJc1JVRkRha1FzUlVGRFdDeEpRVUZMTEU5QlEwUXNUVUZCVHl4SFFVTllMRWxCUVVzc1ZVRkRSQ3hQUVVGSlJDeEZRVUZOTEU5QlFWTkRMRVZCUVUwc1RVRkJZeXhGUVVNelFrUXNSVUZCVFN4TlFVRlJMRVZCUVVrc1IwRkRiRU1zU1VGQlN5eFBRVU5FTEVsQlFVbEZMRVZCUVZGR0xFVkJRVTBzVFVGRFpFY3NSMEZCVVVZc1JVRkJUU3hOUVVOa1J5eEhRVUZaVUN4SFFVRkJMRXRCUVVGQkxFVkJRVzlDVVN4SlFVRmpRU3hIUVVjNVEwTXNSVUZCWTBZc1IwRkJWVVlzUlVGQlRTeEpRVUZKTEVWQlFVVXNZMEZCWTBVc1IwRkJWVVFzUjBGQlRTeEpRVUZKTEVOQlFVTXNSVUZETTBVc1IwRkJTVWNzUjBGQlpTeEZRVUZITEU5QlFVOUJMRVZCUnpkQ0xFbEJRVWxETEVWQlFXTk1MRVZCUVUwc1MwRkJTeXhqUVVGalF5eEhRVUZOTEVsQlFVa3NSVUZEY2tRc1QwRkJTVWtzUjBGQlpTeEZRVUZWUVN4RlFVZDZRa3dzUlVGQlRTeFRRVUZYTEVOQlFVTkRMRWRCUVUwc1VVRkJaMElzUlVGRGVFTXNRMEZCUTBRc1JVRkJUU3hUUVVGWFF5eEhRVUZOTEZGQlFXZENMRWRCUTNoRExFTkJRVU5FTEVWQlFVMHNVMEZCVnl4RFFVRkRReXhIUVVGTkxGRkJRV2RDTEVsQlIzSkRUQ3hGUVVGQlNTeEZRVUZOTEZWQlFVNHNTMEZCUVVvc1JVRkJhVUlzU1VGQlNTeGxRVUZqUXl4RlFVRkJTU3hIUVVGTkxGVkJRVTRzUzBGQlFVb3NSVUZCYVVJc1JVRkJSU3hGUVVOc1JTeEpRVUZMTEU5QlEwUXNUMEZCVDBNc1JVRkJUU3hOUVVGVFF5eEZRVUZOTEUxQlEzUkNMRWRCUTBGRUxFVkJRVTBzVFVGQlRTeFBRVUZQUXl4RlFVRk5MRXRCUVdsQ0xFVkJRekZETEVWQlEwRXNSVUZEVml4SlFVRkxMRmRCUTBRc1QwRkJUMFFzUlVGQlRTeE5RVUZUUXl4RlFVRk5MRTFCUTNSQ0xFZEJRMEZFTEVWQlFVMHNUVUZCVFN4UFFVRlBReXhGUVVGTkxFdEJRV2xDTEVWQlF6RkRMRVZCUTBFc1JVRkRWaXhKUVVGTExGRkJRMFFzU1VGQlNVOHNSVUZCUzFJc1JVRkJUU3hOUVVOWVV5eEhRVUZMVWl4RlFVRk5MRTFCUTJZc1VVRkJVMU1zUjBGQlVTeEZRVUZIUVN4SFFVRlJMRXRCUVVzc1NVRkJTVVlzUlVGQlJ5eFBRVUZSUXl4SFFVRkhMRTFCUVUwc1JVRkJSME1zUzBGQlV5eERRVU5xUlN4SlFVRkpReXhIUVVGUGFrSXNSVUZCVVdNc1JVRkJSMFVzUlVGQlN5eEZRVUZIUkN4SFFVRkhReXhGUVVGTExFTkJRVU1zUlVGRGRrTXNSMEZCU1VNc1NVRkJVU3hGUVVGSExFOUJRVTlCTEVWQlF6RkNMRU5CUTBFc1QwRkJUMGdzUlVGQlJ5eFBRVUZUUXl4SFFVRkhMRTlCUXpGQ0xFbEJRVXNzVTBGRFJDeEpRVUZKUnl4SFFVRkxXaXhGUVVGTkxFMUJRMWhoTEVkQlFVdGFMRVZCUVUwc1RVRkRXR0VzUjBGQlN5eE5RVUZOTEV0QlFVc3NUMEZCVHl4TFFVRkxSaXhGUVVGRkxFTkJRVU1zUlVGREwwSkhMRWRCUVVzc1RVRkJUU3hMUVVGTExFOUJRVThzUzBGQlMwWXNSVUZCUlN4RFFVRkRMRVZCUTI1RFF5eEhRVUZITEV0QlFVc3NSVUZEVWtNc1IwRkJSeXhMUVVGTExFVkJSVklzU1VGQlNVTXNSMEZCWVhSQ0xFVkJRVkZ2UWl4SFFVRkpReXhGUVVGRkxFVkJReTlDTEVkQlFVbERMRWxCUVdNc1JVRkJSeXhQUVVGUFFTeEhRVVUxUWl4UlFVRlRNMElzVFVGQlQzbENMRWRCUVVrc1EwRkRhRUlzU1VGQlNVZ3NSMEZCVDJwQ0xFVkJRVkZyUWl4SFFVRkhka0lzUlVGQlJ5eEZRVUZIZDBJc1IwRkJSM2hDTEVWQlFVY3NRMEZCUXl4RlFVTnVReXhIUVVGSmMwSXNTVUZCVVN4RlFVRkhMRTlCUVU5QkxFVkJRekZDTEVOQlJVRXNUVUZCVHl4SFFVTllMRWxCUVVzc1YwRkRSQ3hOUVVGUExFVkJRMllzUTBGRFNpeERRVzVIVHk5RExFVkJRVk1zVVVGQlFUaENMRVZCYzBkVUxGTkJRVk4xUWl4RlFVRlBla01zUlVGQmJVTXNRMEUzVWpsRUxFbEJRVUZ6UWl4RlFUaFNVU3hQUVVGUFFTeEZRVUZCTlVJc1JVRkJWVTBzUTBGQlJ5eEpRVUZpTEZsQlFVRnpRaXhGUVVGblFpeEpRVU16UWl4RFFVWlBiRU1zUlVGQlV5eFBRVUZCY1VRc1JVRkxWQ3hUUVVGVFF5eEZRVUZUY0VRc1JVRkJlVUlzUTBGRE9VTXNTVUZCU1Vjc1JVRkJWVU1zUlVGQlZVb3NRMEZCU3l4RlFVTTNRaXhIUVVGSkxFTkJRVU5ITEVWQlFWTXNUVUZCVHl4SFFVVnlRaXhQUVVGUlFTeEZRVUZSTEV0QlFVMHNRMEZEYkVJc1NVRkJTeXhUUVVORUxFOUJRVTlCTEVWQlFWRXNUMEZCVXl4RlFVTTFRaXhKUVVGTExGTkJRMFFzVDBGQlQwRXNSVUZCVVN4TlFVRk5MRTlCUVZNc1JVRkRiRU1zU1VGQlN5eFZRVU5FTEU5QlFVOUJMRVZCUVZFc1RVRkRia0lzU1VGQlN5eFBRVU5FTEUxQlFVOHNRMEZCUXl4RFFVRkRRU3hGUVVGUkxFMUJRVTBzUzBGRE0wSXNTVUZCU3l4UFFVTkVMRTlCUVU5QkxFVkJRVkVzVFVGQlRTeFRRVUZUTEVkQlFVc3NSVUZEZGtNc1NVRkJTeXhYUVVORUxFOUJRVTlCTEVWQlFWRXNUVUZCVFN4SFFVRkhMRk5CUVZNc1IwRkJTeXhGUVVNeFF5eEpRVUZMTEZOQlEwUXNUMEZCVHl4UFFVRlBMRXRCUVV0QkxFVkJRVkVzUzBGQlN5eEZRVUZGTEU5QlFWTXNSVUZETDBNc1NVRkJTeXhSUVVORUxFOUJRVTlCTEVWQlFWRXNUVUZCVFN4UFFVRlRMRVZCUTJ4RExFbEJRVXNzVDBGRFJDeE5RVUZQTEVkQlExZ3NTVUZCU3l4WFFVTkVMRTFCUVU4c1JVRkRaaXhEUVVOS0xFTkJNVUpQVEN4RlFVRlRMRk5CUVVGelJDeEZRVFpDVkN4VFFVRlRReXhGUVVFMFFuSkVMRVZCUVdFc1EwRkRja1FzUjBGQlNVRXNSMEZCVlN4TFFVRTJRaXhQUVVGUFFTeEZRVVZzUkN4SFFVRkpSaXhGUVVGVExGRkJRVkZGTEVOQlFVc3NSVUZEZEVJc1RVRkJVU3hEUVVGRExFVkJRV2RDTEU5QlFVOUJMRVZCUVUwc1NVRkJTM05FTEVkQlFVMUVMRVZCUVZORExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlF6RkVMRWRCUVVsNFJDeEZRVUZUTEZOQlFWTkZMRU5CUVVzc1JVRkJSeXhEUVVOcVF5eEpRVUZKU3l4RlFVRnJReXhEUVVGRExFVkJRM1pETEU5QlFWTXNRMEZCUTJ0Q0xFVkJRVXRETEVOQlFVc3NTVUZCU3l4UFFVRlBMRkZCUVZGNFFpeERRVUZMTEVWQlFVZExMRVZCUVU5clFpeERRVUZITEVWQlFVazRRaXhGUVVGVE4wSXNRMEZCU3l4RlFVTTFSU3hQUVVGUGJrSXNRMEZEV0N4TFFVTkpMRkZCUVU5TUxFTkJSV1lzUTBGYVQwWXNSVUZCVXl4VFFVRkJkVVFzUlVGbFZDeFRRVUZUZUVNc1JVRkJVMGdzUlVGQmVVSXNRMEZET1VNc1QwRkJUeXhQUVVGUFFTeEhRVUZQTEZGQlEzcENMRU5CUms5YUxFVkJRVk1zVTBGQlFXVXNSVUZMVkN4VFFVRlRSQ3hGUVVGVFJpeEZRVUY1UWl4RFFVTTVReXhQUVVGUExFOUJRVTlCTEVkQlFVOHNVVUZEZWtJc1EwRkdUMW9zUlVGQlV5eFRRVUZCWXl4RlFVdFVMRk5CUVZOSkxFVkJRVTlPTEVWQlFUSkNMRU5CUXpsRExFOUJRVTlCTEdGQlFXVTJReXhEUVVNeFFpeERRVVpQZWtRc1JVRkJVeXhQUVVGQmEwSXNSVUZMVkN4VFFVRlRSQ3hGUVVGWFRDeEZRVUV5UWl4RFFVTnNSQ3hQUVVGUFFTeGhRVUZsT0VNc1EwRkRNVUlzUTBGR1R6RkVMRVZCUVZNc1YwRkJRV2xDTEVWQlMxUXNVMEZCVTBvc1JVRkJUMFFzUlVGQmJVTXNRMEZEZEVRc1QwRkJUMEVzUjBGQlVTeEpRVU51UWl4RFFVWlBXaXhGUVVGVExFOUJRVUZoTEVWQlMxUXNVMEZCVTAwc1JVRkJVVkFzUlVGQmQwSXNRMEZETlVNc1QwRkJUeXhOUVVGTkxGRkJRVkZCTEVOQlFVY3NRMEZETlVJc1EwRkdUMW9zUlVGQlV5eFJRVUZCYlVJc1JVRkxWQ3hUUVVGVFNDeEZRVUZWU2l4RlFVRXdRaXhEUVVOb1JDeFBRVUZQTEU5QlFVOUJMRWRCUVZFc1UwRkRNVUlzUTBGR1Qxb3NSVUZCVXl4VlFVRkJaMElzUlVGTFZDeFRRVUZUU1N4RlFVRlBVaXhGUVVGMVFpeERRVU14UXl4UFFVRlBRU3hoUVVGbEswTXNSVUZETVVJc1EwRkdUek5FTEVWQlFWTXNUMEZCUVc5Q0xFVkJTMVFzVTBGQlUwVXNSVUZCVTFZc1JVRkJjME1zUTBGRE0wUXNUMEZEU1VFc1NVRkJVU3hSUVVOU0xFOUJRVTlCTEVkQlFVOHNWVUZEWkN4RFFVRkRUeXhGUVVGUlVDeERRVUZITEVkQlExb3NRMEZCUTBzc1JVRkJWMHdzUTBGQlJ5eEhRVU5tTEVOQlFVTk5MRVZCUVU5T0xFTkJRVWNzUjBGRFdDeERRVUZEVVN4RlFVRlBVaXhEUVVGSExFZEJRMWdzUTBGQlEwTXNSVUZCVDBRc1EwRkJSeXhEUVVWdVFpeERRVlpQV2l4RlFVRlRMRk5CUVVGelFpeEZRV0ZVTEZOQlFWTkVMRVZCUVZkVUxFVkJRVEpDTEVOQlEyeEVMRTlCUVU4c1QwRkJUMEVzUjBGQlR5eFZRVU42UWl4RFFVWlBXaXhGUVVGVExGZEJRVUZ4UWl4SlFTOVRTSEpDTEZGQlFVRXNTMEZ0VlZZc1NVRkJWVFJFTEU5QlFWWXNRMEZGU1N4VFFVRlRReXhGUVVGclFrTXNSVUZCYzBNc1EwRkRjRVVzVDBGQlR6bEVMRWRCUVZNc1UwRkJVemhFTEVOQlFVc3NSMEZCU3l4UFFVRlBMRXRCUVV0QkxFTkJRVXNzUlVGQlJTeFJRVUZWTEVkQlFVc3NVVUZCVTBFc1IwRkJVeXhUUVVGVlFTeERRVU55Unl4RFFVWlBSaXhGUVVGVExHVkJRVUZETEVWQlMxUXNVMEZCVTBVc1JVRkJZMFFzUlVGQlowUXNRMEZETVVVc1VVRkJVMFVzUzBGQlYwWXNSVUZCVHl4SFFVRkpMRU5CUVVORUxFVkJRV1ZITEVOQlFVOHNSVUZCUnl4TlFVRlBMRWRCUldoRkxFMUJRVThzUlVGRFdDeERRVXBQU2l4RlFVRlRMRmRCUVVGSExFVkJUMVFzVTBGQlUwVXNSVUZCVlVnc1JVRkJhME1zUTBGRGVFUXNVVUZCVTBVc1MwRkJWMFlzUlVGQlR5eEhRVUZKUkN4RlFVRmxSeXhEUVVGUExFVkJRVWNzVFVGQlR5eEhRVVV2UkN4TlFVRlBMRVZCUTFnc1EwRktUMG9zUlVGQlV5eFBRVUZCU3l4RlFVOVVMRk5CUVZORExFVkJRVk5ETEVWQlFXbEVMRU5CUTNSRkxFZEJRVWxPTEVWQlFXVk5MRU5CUVZFc1JVRkRka0lzVDBGQlQwUXNSVUZCVFVNc1JVRkJVeXhKUVVGSkxFVkJRM1pDTEVkQlFVbEtMRVZCUVZkSkxFTkJRVkVzUlVGQlJ5eERRVU0zUWl4SlFVRkpOVVFzUlVGQlV5eEZRVU5pTEZGQlFWTTJSQ3hMUVVGWlJDeEZRVUZWTlVRc1IwRkJWVEpFTEVWQlFVMUZMRVZCUVZNc1NVRkJTU3hGUVVNMVJDeFBRVUZQTjBRc1EwRkRXQ3hMUVVOSkxGRkJRVTgwUkN4RlFVRlRMRTFCUlhoQ0xFTkJWazlRTEVWQlFWTXNUVUZCUVUwc1JVRmhWQ3hUUVVGVFJ5eEZRVUZUUml4RlFVRjFRa2NzUlVGQlpVTXNSVUZCTUVJc1EwRkRja1lzUjBGQlNVRXNSMEZCVDBRc1JVRkJUeXhOUVVGUExFTkJRVU1zUlVGRE1VSXNSMEZCU1V3c1JVRkJUMFVzUTBGQlVTeEZRVUZITEU5QlFVOUJMRVZCUVZNc1RVRkJUVWNzUlVGQlQwTXNRMEZCUnl4RlFVZDBSQ3hKUVVGSmVrSXNSVUZCVVN4RlFVTlNNRUlzUlVGQlR5eEZRVU5ZTEV0QlFVOHhRaXhGUVVGUmNVSXNSVUZCVXl4UlFVRlZTeXhGUVVGUFRpeEZRVUZOUXl4RlFVRlRja0lzUTBGQlN5eERRVUZETEVkQlFVdDNRaXhIUVVNdlJFVXNSMEZCVVU0c1JVRkJUVU1zUlVGQlUzSkNMRU5CUVVzc1EwRkJReXhGUVVNM1FrRXNTVUZKU2l4SFFVRkpRU3hIUVVGVGNVSXNSVUZCVXl4UFFVRlJMRTFCUVU4c1EwRkJReXhGUVVWMFF5eEpRVUZOTlVRc1JVRkJaMFFzUTBGQlF5eEZRVU4yUkN4TFFVRlBkVU1zUlVGQlVYRkNMRVZCUVZNc1VVRkJWVXNzUlVGQlQwUXNSMEZCU3l4RFFVTXhReXhKUVVGTlJTeEZRVUZSVGl4RlFVRlRja0lzUTBGQlN5eEZRVU4wUWpSQ0xFVkJRVmxTTEVWQlFVMVBMRU5CUVVzc1JVRkRka0pGTEVWQlFXRXNTMEZCU3l4SlFVRkpTQ3hGUVVGTlJpeERRVUZMTEVWQlEycERUU3hGUVVGWExFdEJRVXNzU1VGQlNVWXNSVUZCV1VZc1JVRkJUVVFzUTBGQlJ5eEZRVVV2UTJoRkxFVkJRVThzUzBGQlN5eERRVU5TTEVsQlFVdHJSU3hGUVVGTkxFbEJRMWdzUzBGQlRVb3NSVUZCVFVrc1JVRkJUU3hMUVVGTlJTeEZRVUZoU0N4RlFVRk5TU3hGUVVGWFNpeERRVUZKTEVOQlF6bEVMRU5CUVVNc1JVRkZSRUVzUjBGQlVVVXNSVUZEVWpWQ0xFZEJRMG9zUTBGRlFTeFBRVUZQZGtNc1EwRkRXQ3hEUVdoRFQzRkVMRVZCUVZNc1RVRkJRVk1zU1VGc1EwaFVMRkZCUVVFc1MwTm9XbFlzU1VGQlRXbENMRWRCUVU0c1RVRkJUVU1zUTBGQll5eERRVWRvUWl4WlFVRnRRa01zUlVGQlZTeERRVUZXTEZkQlFVRkJMRVZCUTNSQ0xFdEJRVXNzVjBGQllTeEZRVU4wUWl4RFFVVlBMRWxCUVU5RExFVkJRVGhDTEVOQlEzaERMRTlCUVU4c1NVRkJTVVlzUlVGQlVVVXNSVUZCUlN4TFFVRkxMRXRCUVVzc1EwRkJReXhEUVVOd1F5eERRVVZQTEZGQlFWZEJMRVZCUVhsRExFTkJRM1pFTEU5QlFVOUJMRVZCUVVVc1MwRkJTeXhMUVVGTExFTkJRM1pDTEVOQlJVOHNUMEZCVlVFc1JVRkJPRUlzUTBGRE0wTXNUMEZCVHl4SlFVTllMRU5CUlU4c1RVRkJZME1zUlVGQmIwSkRMRVZCUVhGRExFTkJRekZGTEU5QlFVOHNTMEZCU3l4SlFVRkpSQ3hEUVVGSkxFTkJRM2hDTEVOQlJVOHNUMEZCVDBVc1JVRkJZeXhEUVVONFFpeFBRVUZQTEV0QlFVc3NTMEZEYUVJc1EwRkZUeXhOUVVGM1FpeERRVU16UWl4UFFVRlBMRWxCUTFnc1EwRkZUeXhaUVVGWlF5eEZRVUZuUXl4RFFVTXZReXhQUVVGUExFdEJRVXNzUzBGRGFFSXNRMEZEU2l4RlFVdGhReXhIUVVGT0xFMUJRVTFETEVOQlFXTXNRMEZIYUVJc1dVRkJiVUpETEVWQlFWVXNRMEZCVml4WFFVRkJRU3hGUVVOMFFpeExRVUZMTEZkQlFXRXNSVUZEZEVJc1EwRkZUeXhKUVVGUFF5eEZRVUVyUWl4RFFVTjZReXhQUVVGUExFbEJRMWdzUTBGRlR5eFJRVUZYUVN4RlFVRXdReXhEUVVONFJDeFBRVUZQTEVsQlExZ3NRMEZGVHl4UFFVRlZVaXhGUVVFNFFpeERRVU16UXl4UFFVRlBMRWxCUVVsTkxFVkJRVkZPTEVWQlFVVXNTMEZCU3l4TFFVRkxMRU5CUVVNc1EwRkRjRU1zUTBGRlR5eE5RVUZqVXl4RlFVRnhRa01zUlVGQmIwTXNRMEZETVVVc1QwRkJUeXhMUVVGTExFOUJRVTlCTEVOQlFVa3NRMEZETTBJc1EwRkZUeXhQUVVGUFdDeEZRVUZoTEVOQlEzWkNMRTlCUVU5QkxFTkJRMWdzUTBGRlR5eE5RVUYzUWl4RFFVTXpRaXhQUVVGUExFbEJRMWdzUTBGRlR5eFpRVUZaV1N4RlFVRXJRaXhEUVVNNVF5eE5RVUZKUVN4RlFVRmxMRWxCUVVrc1RVRkJUVUVzUlVGQlVTeExRVUZMTEV0QlFVc3NRMEZCUXl4RlFVTnlReXhKUVVGSkxFMUJRVTBzUjBGQlN5eExRVUZMTEV0QlFVc3NRMEZEZUVNc1EwRkRTaXhGUVZscFFrTXNUMEZCVml4RFFVVkpMRk5CUVZORExFVkJRV05rTEVWQlFYZENMRU5CUTJ4RUxFOUJRVThzU1VGQlNVWXNSMEZCVVVVc1EwRkJTeXhEUVVNMVFpeERRVVpQWVN4RlFVRlRMRkZCUVVGRExFVkJTMVFzVTBGQlUwTXNSVUZCWTFBc1JVRkJkMElzUTBGRGJFUXNUMEZCVHl4SlFVRkpSaXhIUVVGUlJTeERRVUZMTEVOQlF6VkNMRU5CUms5TExFVkJRVk1zVVVGQlFVVXNSVUZMVkN4VFFVRlRReXhGUVVOYVF5eEZRVU5CUXl4RlFVTkJMRVZCUTFrc1EwRkRXaXhQUVVGSlJDeEZRVUZOTEZkQlEwWkRMRVZCUVU4c1YwRkJiVUlzUlVGQlJVUXNSVUZCVFN4TlFVRlBReXhGUVVGUExFdEJRVXNzUlVGRE4wTklMRVZCUVZGSExFVkJRVThzUzBGQlN5eEZRVVY2UWtnc1JVRkJVVVVzUlVGQlRTeExRVUZMTEVOQlJXeERMRU5CV0U5S0xFVkJRVk1zVTBGQlFVY3NSVUZqVkN4VFFVRlRSeXhGUVVOYVJpeEZRVU5CUXl4RlFVTkJMRVZCUTFrc1EwRkRXaXhQUVVGUFJpeEZRVUZUUXl4RlFVRlBReXhGUVVGUkxFTkJRVU5GTEVWQlFVZERMRWxCUVUxUUxFVkJRVkVzUlVGQlJVMHNSVUZCUjBNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGRE4wUXNRMEZPVDFJc1JVRkJVeXhMUVVGQlRTeEZRVk5VTEZOQlFWTkhMRVZCUVdkQ1F5eEZRVUZ2UWtNc1JVRkJhMFFzUTBGRGJFY3NTVUZCVFVNc1JVRkJZeXhEUVVGRExFVkJRM0pDTEZGQlFWZERMRXRCUVZkSUxFVkJRVThzUTBGRGVrSXNTVUZCVFVrc1JVRkJVMGdzUlVGQlMwVXNRMEZCVHl4RlFVTXpRaXhIUVVGSkxFTkJRVU5ETEVWQlFVOHNWMEZCV1N4UFFVRlBRU3hGUVVGUExFdEJRVXNzUlVGRk0wTkdMRVZCUVU4c1MwRkJTMFVzUlVGQlR5eExRVUZMTEVOQlF6VkNMRU5CUlVFc1QwRkJUMlFzUlVGQlR5eFJRVUZSV1N4RFFVRk5MRU5CUTJoRExFTkJWazlhTEVWQlFWTXNUMEZCUVZNc1JVRmhWQ3hUUVVGVFRTeEZRVUZWUXl4RlFVRnBReXhEUVVOMlJDeEhRVUZKTEVOQlEwRXNUMEZCVDJoQ0xFVkJRVThzVVVGQlVXZENMRVZCUVVzc1EwRkJReXhEUVVOb1F5eFBRVUZUY2tJc1JVRkJUeXhEUVVOYUxFOUJRVTlMTEVWQlFVOHNVVUZCVVV3c1EwRkJTeXhEUVVNdlFpeERRVU5LTEVOQlRrOUxMRVZCUVZNc1QwRkJRV1VzUlVGVGFFSXNaVUZCYzBKRkxFVkJRVk5ETEVWQlFXZEVMRU5CUXpORkxFZEJRVWtzUTBGRFFTeFBRVUZQYkVJc1JVRkJUeXhSUVVGUkxFMUJRVTFyUWl4RFFVRlBMRU5CUTNaRExFOUJRVk4yUWl4RlFVRlBMRU5CUTFvc1QwRkJUMHNzUlVGQlR5eFJRVUZSVEN4RFFVRkxMRU5CUXk5Q0xFTkJRMG9zUTBGT1FVc3NSVUZCYzBJc1RVRkJRV2xDTEVsQmVrUlVha0lzVVVGQlFTeExRemxGVml4SlFVRlZiVUlzVDBGQlZpeERRVVZWUVN4RlFVRkJMRmRCUVhsQ0xFTkJRVVVzUzBGQlRTeFpRVUZoTEVWQlJUbERRU3hGUVVGQkxGRkJRVzFDTEVOQlFVVXNTMEZCVFN4VFFVRlZMRVZCUlhKRFFTeEZRVUZCTEZWQlFYTkNMRWxCUVVrc1NVRkhhRU1zVTBGQlUwTXNSVUZCVVVNc1JVRkJkMElzUTBGRE5VTXNUMEZCU1VFc1JVRkJTU3hOUVVGUkxFVkJRVlZHTEVWQlFVRXNVVUZGYmtJc1EwRkJSU3hMUVVGTkxFOUJRVkVzVFVGQlQwVXNRMEZCU1N4RFFVTjBReXhEUVVwUFJpeEZRVUZUTEV0QlFVRkRMRVZCVDFRc1UwRkJVMFVzUlVGQldVTXNSVUZCTWtJc1EwRkRia1FzVDBGQlNVRXNSVUZCWTBvc1JVRkJRU3hYUVVOT1FTeEZRVUZCTEU5QlEyaENMRU5CU0U5QkxFVkJRVk1zVTBGQlFVY3NSVUZOVkN4VFFVRlRSU3hGUVVGblFrZ3NSVUZCYjBNc1EwRkRhRVVzVDBGQlQwRXNTVUZCVVN4UFFVRlpSQ3hGUVVGTFF5eERRVUZITEVWQlFVbEdMRVZCUVVFc1QwRkRNME1zUTBGR1QwRXNSVUZCVXl4aFFVRkJTeXhGUVV0VUxGTkJRVk5ETEVWQlFWZEtMRVZCUVhkQ0xFTkJReTlETEU5QlFVbEJMRVZCUVVrc1RVRkJVU3hGUVVGVlJpeEZRVUZCTEZkQlJXNUNMRU5CUVVVc1MwRkJUU3hWUVVGWExFMUJRVTlGTEVOQlFVa3NRMEZEZWtNc1EwRktUMFlzUlVGQlV5eFJRVUZCVFN4RlFVOVVMRk5CUVZORExFVkJRVlZETEVWQlFUaENMRU5CUTNCRUxFOUJRVkZCTEVWQlFVOHNTMEZCVFN4RFFVTnFRaXhKUVVGTExHRkJRMFFzVDBGQlQxSXNSVUZCUVN4UlFVTllMRWxCUVVzc1ZVRkRSQ3hQUVVGUFFTeEZRVUZCTEZkQlExZ3NTVUZCU3l4UFFVTkVMRTlCUVU5TkxFVkJRVkZGTEVWQlFVOHNTMEZCU3l4RlFVTXZRaXhKUVVGTExGVkJRMFFzVDBGQlQxQXNSVUZCUzA4c1JVRkJUeXhMUVVGTExFTkJRMmhETEVOQlEwb3NRMEZZVDFJc1JVRkJVeXhQUVVGQlR5eEZRV05VTEZOQlFWTkZMRVZCUVZORUxFVkJRVFJDTEVOQlEycEVMRTlCUVZGQkxFVkJRVThzUzBGQlRTeERRVU5xUWl4SlFVRkxMR0ZCUTBRc1RVRkJUeXhIUVVOWUxFbEJRVXNzVlVGRFJDeE5RVUZQTEVkQlExZ3NTVUZCU3l4UFFVTkVMRTlCUVU5QkxFVkJRVThzVFVGQlRTeE5RVUZSTEVWQlEyaERMRWxCUVVzc1ZVRkRSQ3hOUVVGUExFVkJRMllzUTBGRFNpeERRVmhQVWl4RlFVRlRMRTFCUVVGVExFVkJZMVFzVTBGQlUwTXNSVUZCVjBZc1JVRkJiVUpITEVWQlFUUkNMRU5CUTNSRkxFOUJRVkZJTEVWQlFVOHNTMEZCVFN4RFFVTnFRaXhKUVVGTExHRkJRMFFzVDBGQlQwY3NSVUZEV0N4SlFVRkxMRlZCUTBRc1QwRkJUMWdzUlVGQlFTeFZRVU5ZTEVsQlFVc3NUMEZEUkN4UFFVRlBVU3hGUVVGUExFMUJRMnhDTEVsQlFVc3NWVUZEUkN4UFFVRlBTU3hGUVVGeFFrUXNSVUZCV1Vnc1JVRkJUeXhMUVVGTExFTkJRelZFTEVOQlEwb3NRMEZZVDFJc1JVRkJVeXhSUVVGQlZTeEZRV05VTEZOQlFWTkhMRVZCUVdGRExFVkJRVEJETEVOQlEyNUZMRTlCUVU5RExFVkJRV05FTEVWQlFWZEZMRWRCUVUxQkxFTkJRVU1zUTBGRE0wTXNRMEZHVDJoQ0xFVkJRVk1zVlVGQlFXRXNSVUZMVkN4VFFVRlRSU3hGUVVOYVJDeEZRVU5CUnl4RlFVTlRMRU5CUTFRc1QwRkJUME1zUlVGQmVVSktMRVZCUVZkRkxFZEJRVTFITEVkQlFVOHNVVUZCVVVZc1JVRkJVVVFzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4WlFVRlpMRU5CUXpkR0xFTkJURTlvUWl4RlFVRlRMR05CUVVGbExFVkJVVlFzVTBGQlUwY3NSVUZEV2tvc1JVRkRRVWNzUlVGRGIwSXNRMEZEY0VJc1NVRkJUVWNzUlVGQmEwSXNRMEZCUXl4RlFVTnVRa01zUlVGQmMwSXNRMEZCUXl4RlFVTTNRaXhSUVVGVFF5eExRVUZYVWl4RlFVRlZMRU5CUXpGQ0xFbEJRVTFUTEVWQlFXTk9MRVZCUVZGTExFTkJRVThzUlVGRGJrTXNSMEZCU1N4RFFVRkRReXhGUVVGWkxGZEJRVmtzVDBGQlQwRXNSVUZCV1N4TFFVRkxMRVZCUlhKRUxFbEJRVTFtTEVWQlFWTmxMRVZCUVZrc1RVRkRNMElzUjBGQlNXWXNTVUZCVnl4UFFVZG1MRWxCUVVsRExFVkJRVTFFTEVOQlFVMHNSVUZCUnl4UFFVRlBWeXhIUVVGUExGRkJRVkZ1UWl4RlFVRkJMRTlCUVU4c1JVRkZOVU5STEVWQlFVOHNUMEZCVXl4bFFVZG9Ra0VzUlVGQlR5eE5RVUZSTEU5QlFWRlpMRVZCUVUwc1MwRkJTMW9zUlVGQlR5eExRVUZMTEVWQlEzcERRU3hGUVVGUExFMUJRVkVzVjBGQlYyRXNSVUZCVlN4TFFVRkxZaXhGUVVGUExFdEJRVXNzUjBGRGJFVXNRMEZSUVN4UFFVRkpXU3hGUVVGTkxGRkJRVlVzUjBGQlMwTXNSVUZCVlN4UlFVRlZMRVZCUTJ4RFJpeEhRVUZQTEZGQlFWRnVRaXhGUVVGQkxGVkJRVlVzUlVGRGVrSnZRaXhGUVVGTkxFOUJRVk1zUjBGQlMwTXNSVUZCVlN4UlFVRlZMRVZCUTNoRFJpeEhRVUZQTEZGQlFWRnNRaXhGUVVGTGRVSXNSVUZCWVVvc1EwRkJTeXhEUVVGRExFTkJRVU1zUlVGRGVFTkJMRVZCUVUwc1VVRkJWU3hIUVVGTFF5eEZRVUZWTEU5QlFWTXNSVUZEZUVOR0xFZEJRVThzVVVGQlVXSXNSVUZCVVcxQ0xFVkJRVk5LTEVOQlFWTXNRMEZCUXl4RFFVRkRMRVZCUlRORFJpeEhRVUZQTEZGQlFWRnVRaXhGUVVGUkxFdEJRVXRaTEVWQlFYRkNXU3hGUVVGaFNpeERRVUZMTEVWQlFVZExMRVZCUVZOS0xFTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZGTVVjc1EwRjBRMDl5UWl4RlFVRlRMSGxDUVVGQmEwSXNSVUY1UTFRc1UwRkJVMUVzUlVGQlUwTXNSVUZCZVVNc1EwRkRPVVFzVDBGQlQwTXNSVUZCVlVRc1JVRkJWVmdzUjBGQlRVRXNRMEZCUXl4RFFVTjBReXhEUVVaUGFFSXNSVUZCVXl4TlFVRkJNRUlzUlVGTFZDeFRRVUZUUlN4RlFVRm5RbVFzUlVGQmRVSkhMRVZCUVhsRUxFTkJRelZITEU5QlFVOVpMRVZCUVd0Q1ppeEZRVUZYUlN4SFFVRk5SeXhIUVVGUExGRkJRVkZHTEVWQlFWRkVMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzV1VGQldTeERRVU4wUml4RFFVWlBhRUlzUlVGQlV5eFZRVUZCTkVJc1JVRkxWQ3hUUVVGVFF5eEZRVU5hWml4RlFVTkJSeXhGUVVOdlFpeERRVU53UWl4SlFVRk5SeXhGUVVGclFpeERRVUZETEVWQlEyNUNReXhGUVVGelFpeERRVUZETEVWQlF6ZENMRkZCUVZORExFdEJRVmRTTEVWQlFWVXNRMEZETVVJc1NVRkJUVk1zUlVGQlkwNHNSVUZCVVVzc1EwRkJUeXhGUVVOdVF5eEhRVUZKTEVOQlFVTkRMRVZCUVZrc1YwRkJXU3hQUVVGUFFTeEZRVUZaTEV0QlFVc3NSVUZGY2tRc1NVRkJUV1lzUlVGQlUyVXNSVUZCV1N4TlFVTXpRaXhIUVVGSlppeEpRVUZYTEU5QlIyWXNTVUZCU1VFc1JVRkJUeXhQUVVGVExHRkJRV01zVDBGQlQxY3NSMEZCVHl4UlFVRlJia0lzUlVGQlFTeFZRVUZWTEVWQlJUbEVVeXhGUVVGTlJDeERRVUZOTEVsQlIxcEJMRVZCUVU4c1RVRkJVU3hQUVVGUldTeEZRVUZOTEV0QlFVdGFMRVZCUVU4c1MwRkJTeXhGUVVONlEwRXNSVUZCVHl4TlFVRlJMRmRCUVZkaExFVkJRVlVzUzBGQlMySXNSVUZCVHl4TFFVRkxMRWRCUTJ4RkxFTkJWMEVzVDBGQlNWa3NSVUZCVFN4UlFVRlZMRWRCUVV0RExFVkJRVlVzVVVGQlZTeEZRVU5zUTBZc1IwRkJUeXhSUVVGUmJrSXNSVUZCUVN4UFFVRlBMRVZCUTNSQ2IwSXNSVUZCVFN4UFFVRlRMRWRCUVV0RExFVkJRVlVzVVVGQlZTeEZRVU40UTBZc1IwRkJUeXhSUVVGUmJrSXNSVUZCVVN4TFFVRkxlVUlzUlVGQlUwd3NRMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkROVU5CTEVWQlFVMHNVVUZCVlN4SFFVRkxReXhGUVVGVkxFOUJRVk1zUlVGRGVFTkdMRWRCUVU4c1VVRkJVVzVDTEVWQlFWRXNVVUZCVVhkQ0xFVkJRV0ZJTEVOQlFWTXNRMEZCUXl4RFFVRkRMRVZCUlhaRVJpeEhRVUZQTEZGQlFWRmlMRVZCUVZGTkxFVkJRWEZDV1N4RlFVRmhTQ3hEUVVGVExFVkJRVWRKTEVWQlFWTk1MRU5CUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGRmNrY3NRMEY2UTA5d1FpeEZRVUZUTEd0Q1FVRkJOa0lzUlVFMFExUXNVMEZCVTB3c1JVRkJaMEpOTEVWQlFYZENMRU5CUTNCRUxFZEJRVWxCTEVWQlFVc3NVVUZCVlN4RlFVRkhMRTlCUVU4c1NVRkJTU3hKUVVNMVFpeEhRVUZKUVN4RlFVRkxMRkZCUVZVc1JVRkJSeXhQUVVGUFFTeEZRVUZMTEVOQlFVTXNSVUZIZUVNc1NVRkJTVU1zUlVGQlZTeERRVUZETEVWQlFXVXNUMEZCVDBRc1EwRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlEwVXNSVUZCUjBNc1NVRkJUVVFzUlVGQlJTeExRVUZQUXl4RlFVRkZMRWxCUVVrc1JVRkZla1VzUzBGQlQwWXNSVUZCVHl4UFFVRlRMRWRCUVVjc1EwRkRkRUlzU1VGQlRVY3NSVUZCVXl4SlFVRkpMRWxCUTJKRExFVkJRVlZLTEVWQlFVOHNTVUZCU1N4RlFVVXpRaXhSUVVGVFZDeExRVUZYVXl4RlFVRlBMRU5CUVVNc1JVRkRjRUpKTEVWQlFWRXNTVUZCU1dJc1EwRkJUeXhIUVVGSFdTeEZRVUZQTEVsQlFVbGFMRU5CUVU4c1JVRkhhRVJUTEVWQlFVOHNRMEZCUXl4RlFVRkpSeXhEUVVOb1FpeERRVVZCTEU5QlFVOUlMRVZCUVU4c1EwRkJReXhEUVVOdVFpeERRVzVDVHk5Q0xFVkJRVk1zWVVGQlFYZENMRVZCYzBKVUxGTkJRVk5ETEVWQlFWbExMRVZCUVhkQ0xFTkJRMmhFTEVkQlFVbEJMRVZCUVVzc1VVRkJWU3hGUVVGSExFOUJRVThzU1VGQlNTeEpRVU0xUWl4SFFVRkpRU3hGUVVGTExGRkJRVlVzUlVGQlJ5eFBRVUZQUVN4RlFVRkxMRU5CUVVNc1JVRkhlRU1zU1VGQlRVa3NSVUZCVXl4SlFVRkpMRWxCUTI1Q0xGRkJRVmRvUXl4TFFVRlBORUlzUlVGRFpDeFJRVUZYVWl4TFFVRlhjRUlzUlVGRGJFSm5ReXhGUVVGUExFbEJRVWxhTEVOQlFVOHNSVUZKTVVJc1QwRkJUMWtzUTBGRFdDeERRV0pQYkVNc1JVRkJVeXhUUVVGQmVVSXNSVUZuUWxRc1UwRkJVMklzUlVGQmQwSllMRVZCUVdOTExFVkJRWGxDTEVOQlF6TkZMRWRCUVVsTUxFVkJRVXNzUzBGQlQwc3NSVUZCVVN4TFFVRk5MRU5CUlRGQ0xFbEJRVTAwUWl4RlFVRlRMRWxCUVVrc1NVRkJTV3BETEVOQlFVa3NSVUZETTBJc1VVRkJVM0ZDTEV0QlFWZG9RaXhGUVVOb1FqUkNMRVZCUVU4c1QwRkJUMW9zUTBGQlR5eEZRVWQ2UWl4UFFVRlBXU3hEUVVOWUxFdEJRWFZETEVOQlEyNURMRWxCUVUxQkxFVkJRVk1zU1VGQlNTeEpRVU51UWl4UlFVRlRXaXhMUVVGWGNrSXNSVUZEV2tzc1JVRkJVU3hKUVVGSlowSXNRMEZCVHl4SFFVTjJRbGtzUlVGQlR5eEpRVUZKV2l4RFFVRlBMRVZCUjNSQ0xFOUJRVTlaTEVOQlExZ3NRMEZEU2l4RFFXeENUMnhETEVWQlFWTXNjVUpCUVVGWkxFbEJPVTVJV2l4UlFVRkJMRXREYVVWV0xFbEJRVlZ2UXl4UFFVRldMRU5CUlZWQkxFVkJRVUVzU1VGQll5eFBRVVZ3UWl4VFFVRlRReXhGUVVGVFF5eEZRVUZyUXl4RFFVTjJSQ3hOUVVGUExFTkJRVVVzUzBGQlRTeFhRVUZaTEV0QlFVRkJMRU5CUVVzc1EwRkRjRU1zUTBGR1QwWXNSVUZCVXl4VFFVRkJReXhGUVVsVUxGTkJRVk5GTEVWQlFWRkRMRVZCUVcxRExFTkJRM1pFTEUxQlFVOHNRMEZCUlN4TFFVRk5MRlZCUVZjc1RVRkJRVUVzUTBGQlRTeERRVU53UXl4RFFVWlBTaXhGUVVGVExGRkJRVUZITEVWQlNWUXNVMEZCVTBVc1JVRkJVME1zUlVGQmEwSkRMRVZCUVdORExFVkJRU3RDTEVOQlEzQkdMRTFCUVU4c1EwRkJSU3hMUVVGTkxGZEJRVmtzUzBGQlFVWXNSVUZCVFN4SFFVRkJReXhGUVVGSkxFMUJRVUZETEVOQlFVMHNRMEZETDBNc1EwRkdUMUlzUlVGQlV5eFRRVUZCU3l4RlFVbFVMRk5CUVZOSkxFVkJRVTFETEVWQlFXbENSQ3hGUVVFclFpeERRVU5zUlN4TlFVRlBMRU5CUVVVc1MwRkJUU3hYUVVGWkxFdEJRVTFETEVWQlFVc3NUVUZCVDBRc1JVRkJUeXhIUVVGSkxFOUJRVkVzUTBGRGNFVXNRMEZHVDFRc1JVRkJVeXhOUVVGQlV5eEZRVXRVTEZOQlFWTkZMRVZCUVdOVUxFVkJRVEJDTEVOQlEzQkVMRWxCUVVsVkxFVkJRVkZXTEVWQlFVc3NUVUZCVFN4SFFVRkhMRVZCUTNSQ1Z5eEZRVUZ4UW1Jc1JVRkJXU3hUUVVGVFdTeEZRVUZOTEVOQlFVTXNRMEZCUXl4RlFVTjBSQ3hSUVVGVFNDeEZRVUZSTEVWQlFVZEJMRVZCUVZGSExFVkJRVTBzVDBGQlVVZ3NTVUZEZEVOSkxFVkJRVk5pTEVWQlFWa3NUVUZCVFdFc1JVRkJVV0lzUlVGQldTeFJRVUZSV1N4RlFVRk5TQ3hEUVVGTExFTkJRVU1zUTBGQlF5eEZRVWQ0UlN4UFFVRlBTU3hEUVVOWUxFTkJVazlpTEVWQlFWTXNZMEZCUVZjc1JVRlZWQ3hUUVVGVFJ5eEZRVUZQUXl4RlFVRm5RbGdzUlVGQmNVTXNRMEZEZUVVc1RVRkJUeXhEUVVGRkxFdEJRVTBzVTBGQlZTeFZRVUZYVnl4RlFVRk5MRTFCUVVGWUxFTkJRVTBzUTBGRGNFUXNRMEZHVDBvc1JVRkJVeXhQUVVGQll5eEZRVWxVTEZOQlFWTkZMRVZCUVV0QkxFVkJRV3RDUkN4RlFVRjNReXhEUVVNelJTeE5RVUZQTEVOQlFVVXNTMEZCVFN4WFFVRlpMRXRCUVVGRExFVkJRVTBzVlVGQlYwUXNRMEZCU3l4RFFVTnlSQ3hEUVVaUFppeEZRVUZUTEV0QlFVRm5RaXhGUVVsVUxGTkJRVk5ETEVWQlFVdERMRVZCUVhORExFTkJRM1pFTEUxQlFVOHNRMEZCUlN4TFFVRk5MRTlCUVZFc1QwRkJRVUVzUTBGQlR5eERRVU5zUXl4RFFVWlBiRUlzUlVGQlV5eExRVUZCYVVJc1JVRkpWQ3hUUVVGVFJTeEZRVUZQUkN4RlFVRnpSQ3hEUVVONlJTeE5RVUZQTEVOQlFVVXNTMEZCVFN4VFFVRlZMRTlCUVVGQkxFTkJRVThzUTBGRGNFTXNRMEZHVDJ4Q0xFVkJRVk1zVDBGQlFXMUNMRVZCU1ZRc1UwRkJVME1zUlVGQlQwTXNSVUZCYzBNc1EwRkRla1FzVFVGQlR5eERRVUZGTEV0QlFVMHNWVUZCVnl4TlFVRkJRU3hEUVVGTkxFTkJRM0JETEVOQlJrOXlRaXhGUVVGVExFOUJRVUZ2UWl4RlFVbFVMRk5CUVZORkxFVkJRVmxtTEVWQlFTdENMRU5CUTNaRUxFOUJRVTlCTEVkQlFVMHNUVUZCVVVFc1IwRkJUU3hMUVVGUFFTeEhRVUZOTEV0QlFVOUJMRWRCUVUwc1RVRkJVVUVzUjBGQlRTeE5RVUZSUVN4SFFVRk5MRWRCUTNKR0xFTkJSazlRTEVWQlFWTXNXVUZCUVhOQ0xFVkJTMVFzVTBGQlUwTXNSVUZCYVVKRExFVkJRV3RDUXl4RlFVRnhRaXhKUVVGSkxFbEJRVWtzUTBGQlEzcENMRVZCUVVFc1IwRkJSeXhEUVVGRExFVkJRV2RDTEVOQlEycEhMRTlCUVZGM1FpeEZRVUZMTEV0QlFVMHNRMEZEWml4SlFVRkxMRmRCUlVRc1QwRkRTVUVzUlVGQlN5eExRVUZQTEZOQlExcEJMRVZCUVVzc1MwRkJTeXhOUVVGUkxGbEJRMnhDUVN4RlFVRkxMRXRCUVVzc1RVRkJVWGhDTEVWQlFVRXNTMEZEYkVKM1FpeEZRVUZMTEUxQlFVMHNUVUZCVVN4WFFVTnVRa1VzUjBGQlV5eFRRVUZUUml4RlFVRkxMRTFCUVUwc1MwRkJTeXhGUVVVNVFrTXNSVUZCVFN4SlFVRkpSQ3hGUVVGTExFMUJRVTBzUzBGQlN5eEZRVUZWTEVsQlFVa3NTVUZEYUVNc1NVRkJTU3hKUVVGSkxFTkJRVU5CTEVWQlFVc3NUVUZCVFN4TFFVRkxMRU5CUVVNc1JVRkpia05ITEVkQlFWRXNVMEZCVXl4RFFVRkRTaXhGUVVGcFFrTXNSVUZCU3l4TFFVRk5ReXhEUVVGTExFVkJRVWRHTEVWQlFXbENReXhGUVVGTExFMUJRVTlETEVOQlFVc3NRMEZCUXl4RFFVRkRMRVZCUTNKSExFbEJRVXNzVjBGRFJDeFBRVUZQUlN4SFFVRlJMRk5CUVZOSUxFVkJRVXNzVlVGQlZTeEpRVUZMU1N4SFFVRk5UQ3hGUVVGcFFrc3NSVUZCUjBnc1EwRkJTeXhEUVVGRExFTkJRVU1zUlVGRGFrWXNTVUZCU3l4VFFVTkVMRWxCUVUxSkxFVkJRVmRLTEVkQlFVRXNTMEZCUVVFc1JVRkJVeXhKUVVGSkxFbEJRemxDTEZGQlFWZExMRXRCUVU5T0xFVkJRVXNzVlVGQlYwc3NSVUZCVXl4SlFVRkpReXhEUVVGSExFVkJSV3hFTEU5QlFVOVFMRVZCUVdsQ1F5eEZRVUZMTEUxQlFVOUxMRU5CUVZFc1JVRkRhRVFzU1VGQlN5eFBRVU5FTEU5QlFVOUdMRWRCUVZFc1UwRkJVMGdzUlVGQlN5eFBRVUZQTEVsQlFVdFBMRWRCUVUxU0xFVkJRV2xDVVN4RlFVRkhUaXhEUVVGTExFTkJRVU1zUTBGQlF5eEZRVU01UlN4SlFVRkxMRlZCUTBRc1QwRkJUMFlzUlVGQmFVSkRMRVZCUVVzc1RVRkJUME1zUTBGQlN5eEZRVU0zUXl4SlFVRkxMRk5CUTBRc1QwRkJUMFVzUjBGQlVTeFRRVUZUTEU5QlFVOHNUMEZCVDBnc1JVRkJTeXhOUVVGTkxFVkJRVVVzU1VGQlMwOHNSMEZCVFZJc1JVRkJhVUpSTEVWQlFVZE9MRU5CUVVzc1EwRkJReXhEUVVGRExFVkJRemRHTEVsQlFVc3NWMEZEUkN4UFFVRkpRU3hIUVVGVFFTeEZRVUZOTEVsQlFVbEVMRVZCUVVzc1NVRkJTU3hGUVVGVkxFbEJRVWtzU1VGRGJFTXNTVUZCU1N4SlFVRkpMRU5CUVVOQkxFVkJRVXNzU1VGQlNTeERRVUZETEVWQlEyNURMRWxCUVVzc1ZVRkRSQ3hQUVVGUExFbEJRVWtzUjBGRGJrSXNRMEZEU2l4RFFYQkRUM2hDTEVWQlFWTXNhVUpCUVVGMVFpeEZRWFZEVkN4VFFVRlRVeXhGUVVGVFVpeEZRVUV3UWl4RFFVTXZReXhQUVVGUlFTeEZRVUZMTEV0QlFVMHNRMEZEWml4SlFVRkxMRmRCUTBRc1QwRkJTVUVzUlVGQlN5eExRVUZQTEZGQlEwd3NSMEZCUjFFc1JVRkJVMUlzUlVGQlN5eEpRVUZKTEVOQlFVTXNTVUZCU1ZFc1JVRkJVMUlzUlVGQlN5eExRVUZMTEVOQlFVTXNTVUZIYkVRc1IwRkJSMUVzUlVGQlUxSXNSVUZCU3l4SlFVRkpMRU5CUVVNc1NVRkJTVUVzUlVGQlN5eEZRVUZGTEVsQlFVbFJMRVZCUVZOU0xFVkJRVXNzUzBGQlN5eERRVUZETEVkQlEzQkZMRWxCUVVzc1YwRkRSQ3hOUVVGUExFZEJRVWRSTEVWQlFWTlNMRVZCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWxCTEVWQlFVc3NWVUZCVlN4SlFVRkpVU3hEUVVGUkxFVkJRVVVzUzBGQlN5eEpRVUZKTEVOQlFVTXNTVUZETlVVc1NVRkJTeXhUUVVORUxFMUJRVThzU1VGQlNWSXNSVUZCU3l4VlFVRlZMRXRCUVVzc1NVRkJTU3hEUVVGRExGRkJRVkZSTEVWQlFWTlNMRVZCUVVzc1MwRkJTeXhEUVVGRExFZEJRM0JGTEVsQlFVc3NUMEZEUkN4TlFVRlBMRWxCUVVsQkxFVkJRVXNzVDBGQlR5eEpRVUZKVVN4RFFVRlJMRVZCUVVVc1MwRkJTeXhKUVVGSkxFTkJRVU1zU1VGRGJrUXNTVUZCU3l4VlFVTkVMRTFCUVU4c1NVRkJTVUVzUlVGQlUxSXNSVUZCU3l4TFFVRkxMRU5CUVVNc1IwRkRia01zU1VGQlN5eFRRVU5FTEUxQlFVOHNTVUZCU1N4UFFVRlBMRkZCUVZGQkxFVkJRVXNzVFVGQlRTeEZRVU5vUXl4SlFVRkpMRU5CUVVNc1EwRkJRMU1zUlVGQlIwWXNRMEZCUXl4SlFVRk5MRWRCUVVkRkxFTkJRVU1zUzBGQlMwUXNSVUZCVTBRc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGRGRFTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1NVRkRia0lzU1VGQlN5eFhRVU5FTEU5QlFVOVFMRVZCUVVzc1MwRkRhRUlzU1VGQlN5eFZRVU5FTEVsQlFVMVZMRVZCUVZWU0xFZEJRVk1zVlVGQlZVWXNSVUZCU3l4TFFVRkxMRVZCUXpkRExFZEJRVWtzUTBGQlExVXNSVUZCVXl4TlFVRlBMRTlCUTNKQ0xFOUJRVkZCTEVWQlFWRXNTMEZCVFN4RFFVTnNRaXhKUVVGTExGTkJRMFFzVFVGQlR5eEpRVUZKUVN4RlFVRlJMRXRCUVVzc1NVRkROVUlzVVVGRFNTeFBRVUZQVWl4SFFVRlRMRk5CUVZOUkxFVkJRVkVzUzBGQlN5eERRVU01UXl4RFFVTlNMRU5CUTBvc1EwRm9RMDlzUXl4RlFVRlRMRk5CUVVGblF5eEZRV3REU0doRExFVkJRVUVzUzBGQlQwRXNSVUZCV1N4UlFVRlJMRWxCUVVrc1NVRnFTUzlDUVN4UlFVRkJMRXRLWmxZc1NVRkJUVzFETEVWQlFXVXNhVUpCUVcxRExFTkJRek5FTEU5QlFWTkRMRWRCUTBnc1UwRkJUeXh4UWtGQmNVSXNSVUZEZWtJc1NVRkJTME1zUjBGQlVTeFBRVUZQTEZkQlFWZEJMRU5CUVVjc1EwRkJReXhGUVVOdVF5eExRVUZMTEZGQlFWRXNSVUZIZEVJc1QwRkJVME1zUjBGRFNDeFRRVUZQTEVkQlFVY3NSVUZEVUN4TFFVTkxMRTFCUVVsQkxFVkJRVVVzWjBKQlFXMUNMRk5CUVU4c1MwRkJTeXhEUVVGRExFVkJRMjVETEZGQlFWRXNRMEZCUXl4RlFVTlVMRWxCUVV0RExFZEJRVlZCTEVWQlFVMHNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkRkRU1zUlVGRFF5eExRVUZQTEZOQlFVOHNSMEZCUnl4RFFVRkRMRVZCUTJ4Q0xFdEJRVXNzVVVGQlVTeEZRVVYwUWl4blFrRkJhMEpJTEVkQlExb3NVMEZCVHl4SlFVRkpMRVZCUTFJc1MwRkJUeXhMUVVGSExFVkJRMVlzU1VGQlMwa3NSMEZGUlVFc1NVRkJXU3hKUVVGWkxFbEJRM2hDUVN4SlFVRlpMRXRCUVdFc1MwRkRha0lzUzBGQlQwRXNRMEZEZEVJc1JVRkhWQ3hMUVVGUFNpeEhRVU5FTEZOQlFVOHNkVUpCUVhWQ0xFVkJRek5DTEVsQlFVdERMRWRCUVZGQkxFVkJRVWtzV1VGQldTeEhRVUZMTEUxQlFVMHNSVUZEZUVNc1MwRkJTeXhUUVVGVExFVkJSM1pDTEVsQlFVMUVMRWRCUTBFc1UwRkRTU3hUUVVGUExFZEJRVWNzUlVGRFZpeE5RVUZOTEZOQlFVOHNhVVZCUVdsRkxFVkJRVVVzUzBGQlN5eE5RVUZOTEVOQlFVTXNSVUZCUlN4TFFVRkxMRVZCUTNKSExFTkJRVU5MTEVWQlFVOURMRWxCUVZORUxFVkJRVkZETEVWQlFVc3NTMEZCU3l4RlFVRkZMRU5CUTNwRExFVkJRVVVzUzBGQlN5eExRVUZMTEVWQlIyaENMRmRCUVdGT0xFZEJRMUFzVTBGRFNTeE5RVUZOTEZOQlFVOHNaMEpCUVdkQ0xFVkJRVXNzVTBGQlQwOHNSVUZCVnl4RlFVRkZMRXRCUVVzc1RVRkJUU3hEUVVGRExFVkJRMnhGTEUxQlFVMHNVMEZCVHl4eFFrRkJjVUlzUlVGQlN5eFRRVUZQUVN4RlFVRlhMRVZCUVVVc1MwRkJTeXhOUVVGTkxFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlEyaEdMRU5CUVVORExFVkJRVTlHTEVsQlFWTkZMRVZCUVZGR0xFVkJRVXNzUzBGQlN5eEZRVUZGTEVOQlEzcERMRVZCUVVVc1MwRkJTeXhWUVVGVkxFVkJSM0pDTEV0QlFVOU9MRWRCUTBRc1UwRkJUeXgxUWtGQmQwSXNRMEZCUXl4RlFVTTNRaXhKUVVGTFV5eEhRVUZqUXl4SFFVRkxMRmRCUVZkRUxFTkJRVk1zUTBGQlF5eEZRVU0zUXl4TFFVRkxMRmRCUVZjc1JVRkpla0lzVlVGQldWQXNSMEZEVGl4VFFVRlRMRk5CUVU4c1IwRkJSeXhGUVVGRkxFOUJRVThzUTBGQlF5eEZRVUZIUVN4RlFVRkZMRXRCUVUwc1EwRkJRMU1zUlVGQlIwTXNTMEZEZEVORUxFVkJRVVVzVDBGQlV5eEpRVUZIUXl4RlFVRkZMRTFCUVZFc1NVRkRja0pCTEVWQlExWXNSVUZCUlN4TFFVRkxMRmRCUVZjc1JVRkhka0lzWjBKQlFXdENXaXhIUVVOYUxGTkJRVThzVFVGQlRTeEZRVU5XTEVsQlFVdERMRWRCUVZGQkxFTkJRV1VzUlVGRE5VSXNTMEZCU3l4WlFVRlpMRVZCUnpGQ0xHRkJRV1ZFTEVkQlExUXNVMEZCVHl4VFFVRlRMRVZCUTJJc1NVRkJTME1zUjBGQlVVRXNRMEZCWlN4RlFVTTFRaXhMUVVGTExHMUNRVUZ0UWl4RlFVZHFReXhuUWtGQmEwSkVMRWRCUTFvc1UwRkJUeXhuUWtGQlowSXNSVUZEY0VJc1NVRkJTME1zUjBGQlVVRXNRMEZCWlN4RlFVTTFRaXhMUVVGTExESkRRVUV5UXl4RlFVZDZSQ3haUVVGalJDeEhRVU5TTEZOQlFVOHNVVUZCVVN4RlFVTmFMRWxCUVV0aExFZEJRVk1zUjBGQlpTeEZRVU0zUWl4TFFVRkxMRTlCUVU4c1JVRkRja0lzVjBGQllXSXNSMEZEVUN4VFFVRlBMRkZCUVZFc1JVRkRXaXhKUVVGTFlTeEhRVUZUTEVkQlFXVXNSVUZETjBJc1MwRkJTeXhOUVVGTkxFVkJSM0JDTEZOQlFWZGlMRWRCUTB3c1UwRkJVeXhUUVVGUExFOUJRVThzUlVGQlN5eFRRVUZQTEVkQlFVY3NSVUZCU3l4VFFVRlBMRTlCUVU4c1JVRkJSeXhEUVVGRFl5eEZRVUZOWkN4RlFVRkhaU3hKUVVNM1JFTXNSVUZCVXl4WFFVRlhMRU5CUVVVc1MwRkJUU3hQUVVGUExGTkJRVk5HTEVOQlFVa3NSVUZCUnl4TlFVRlBMRTlCUVU4c1UwRkJVME1zUTBGQlN5eERRVUZGTEVOQlFVTXNRMEZETlVZc1JVRkJSU3hMUVVGTExIbERRVUY1UXl4RlFVTnlSQ3hqUVVGblFtWXNSMEZEVml4TlFVTkZMRWRCUVVjc1QwRkJUeXhMUVVGTGFVSXNSVUZCWlN4RlFVTjZRaXhMUVVGTExFTkJRVU5ETEVWQlFVZERMRWxCUVUxQkxFVkJRVVVzVDBGQlUwUXNSVUZCUlN4TlFVRk5MRVZCUTJ4RExFbEJRVTBzVVVGQlRTeERRVU55UWl4RlFVTktMRXRCUVU5b1FpeEhRVU5JYTBJc1IwRkRTV3hDTEVWQlFVVXNVMEZEUkcxQ0xFZEJRMHNzVTBGQlV5eFRRVUZQTEVkQlFVY3NSVUZCU3l4VFFVRlBMRTlCUVU4c1JVRkJSeXhEUVVGRGNrSXNSVUZCUjNOQ0xFbEJRVkZFTEVWQlFVY3NTVUZCU1N4RFFVRkZMRWxCUVVzc1QwRkJUeXhUUVVGVFF5eERRVUZITEVOQlFVVXNRMEZCUXl4RFFVRkRMRVZCUXk5R1F5eEhRVU5MTEZOQlFWTXNVMEZCVHl4SFFVRkhMRVZCUVVzc1UwRkJUeXhQUVVGUExFVkJRVWNzUTBGQlEzWkNMRVZCUVVkM1FpeEpRVUZUUkN4RlFVRkpMRWxCUVVrc1EwRkJSU3hMUVVGTkxFOUJRVThzVTBGQlUwTXNRMEZCU1N4RFFVRkZMRU5CUVVNc1EwRkJReXhGUVVOdVIwTXNSMEZEU3l4VFFVRlRMRk5CUVU4c1IwRkJSeXhGUVVGTExGTkJRVThzVDBGQlR5eEZRVUZITEVOQlFVTjZRaXhGUVVGSE1FSXNTVUZETTBORUxFVkJRVXNzU1VGQlNTeERRVUZGTEU5QlFWRXNUMEZCVHl4VFFVRlRReXhEUVVGTkxFTkJRVVVzUTBGQlF5eERRVU5vUkN4RlFVTklReXhIUVVOTExGTkJRVk1zVTBGQlR5eEhRVUZITEVWQlFVc3NVMEZCVHl4UFFVRlBMRVZCUVVjc1EwRkJRek5DTEVWQlFVYzBRaXhKUVVNelEwUXNSVUZCVFN4SlFVRkpMRU5CUVVVc1QwRkJVU3hQUVVGUExGTkJRVk5ETEVOQlFVMHNRMEZCUlN4RFFVRkRMRU5CUTJwRUxFVkJRMGhETEVkQlEwc3NUVUZEU1N4VFFVRlRMRk5CUVU4c1IwRkJSeXhGUVVGTExGTkJRVThzVDBGQlR5eEZRVUZITEVOQlFVTTNRaXhGUVVGSE9FSXNTVUZETTBORUxFVkJRVThzU1VGQlNTeERRVUZGTEZsQlFXRXNUMEZCVHl4VFFVRlRReXhEUVVGWExFTkJRVVVzUTBGQlF5eERRVU0xUkN4RlFVTkZMRlZCUVZGRUxFTkJRVTBzUTBGRGNFSXNSVUZEU0VVc1IwRkRTeXhOUVVOSkxGTkJRVk1zVTBGQlR5eEhRVUZITEVWQlFVVXNSMEZCU3l4VFFVRlBMRWRCUVVjc1EwRkJReXhGUVVGTExGTkJRVThzYTBKQlFXdENMRVZCUVVjc1EwRkJRME1zUlVGQlNVTXNTVUZEZWtWR0xFVkJRVWNzVVVGQlVTeE5RVUZSUXl4RlFVRkxReXhGUVVGSkxFTkJRVVVzWTBGQlpTeEZRVUZMTEVOQlFVTXNRMEZEZGtRc1JVRkRSU3hUUVVGVExGTkJRVThzUjBGQlJ5eEZRVUZITEVsQlFVMUdMRVZCUVVjc1VVRkJVU3hOUVVGUExFTkJRVVVzWTBGQlpTeEZRVUZMTEVOQlFVTXNRMEZCUXl4RlFVTjBSU3hUUVVGVExGTkJRVThzUjBGQlJ5eEZRVUZMTEZOQlFVOHNiVUpCUVcxQ0xFVkJRVXNzVTBGQlR5eEhRVUZITEVWQlFVY3NRMEZCUTBjc1JVRkJTVU1zUlVGQlRVTXNTVUZETjBWTUxFVkJRVWNzVVVGQlVVa3NSVUZCVFN4RFFVRkZMR05CUVdVc1JVRkJTeXhEUVVGRExFTkJRelZETEVOQlEwb3NRMEZEVWl4RlFVTkxMRTlCUVZGS0xFZEJRV2xDUVN4RlFVRkhMRkZCUVZNc1dVRkJXU3hGUVVOcVJDeExRVUZMTEhsRFFVRjVReXhGUVVkMlJDeFRRVUZYTjBJc1IwRkRUQ3hOUVVORlFTeEZRVUZGTEdOQlFXTXNTVUZCUzIxRExFZEJRVTF3UWl4SFFVRm5RbTlDTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUXk5RGJrTXNSVUZCUlN4SlFVTk9MRVZCUVVVc1MwRkJTeXg1UkVGQmVVUXNSVUZIY0VVc1lVRkJaVVlzUjBGRFZDeE5RVU5GTEVkQlFVY3NUMEZCVHl4TFFVRkxjME1zUlVGQll5eEZRVU40UWl4TFFVRkxMRU5CUVVOd1FpeEZRVUZIUXl4SlFVRk5RU3hGUVVGRkxFOUJRVk5FTEVWQlFVVXNUVUZCVFN4RlFVTnNReXhKUVVGTkxGRkJRVTBzUTBGRGNrSXNSVUZEU2l4VFFVRlhhRUlzUjBGRFRDeFRRVUZQUVN4RlFVRkZMRTlCUVZVc1owSkJRV1ZCTEVWQlFVVXNZVUZCWXl4RFFVRkRjVU1zUlVGQlQzWkRMRVZCUVVkM1F5eEpRVU16UkVZc1IwRkJaVVVzUTBGQlF5eEZRVUZGTEZOQlFWVkRMRWRCUVUxQkxFVkJRVWxHTEVOQlFVc3NRMEZETDBNc1JVRkRTeXhQUVVGVExGTkJRVThzUjBGQlJ5eEZRVUZGTEV0QlFVOHNaVUZCWVN4RlFVRkZMRWRCUVVzc1pVRkJZU3hEUVVGRExFVkJRemxFTEVsQlFVdEhMRWRCUVdOQkxFVkJRVlVzVDBGQlR5eERRVUZETDBJc1JVRkJSMmRETEVsQlFVMW9ReXhGUVVGRkxFdEJRVXRuUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVONFJDeExRVUZMTEhWQ1FVRjFRaXhGUVVkeVF5eFJRVUZWTTBNc1IwRkJVU3hUUVVGUExFMUJRVTBzUlVGSEwwSXNaMEpCUVd0Q1JTeEhRVU5hTEUxQlEwVkJMRVZCUVVVc1MwRkRSa0VzUlVGQlJTeFRRVUZUTEVsQlFVdHRReXhIUVVGTlR5eEhRVUZyUWxBc1EwRkJReXhEUVVGRExFVkJRekZEYmtNc1JVRkJSU3hQUVVOR1FTeEZRVUZGTEVsQlEwWkJMRVZCUVVVc1ZVRkRSa0VzUlVGQlJTeExRVU5HUVN4RlFVRkZMRTlCUTBaQkxFVkJRVVVzVDBGRFRpeEZRVU5LTEdkQ1FVRnJRa0VzUjBGQlRVRXNSVUZCUlN4blFrRkJaMElzVFVGQlVTeFRRVUZQTEVkQlFVY3NSVUZCUlN4TFFVRlBMR1ZCUVdFc1JVRkJSU3hWUVVGVlFTeEZRVUZGTEdWQlFXVXNRMEZCUXl4RlFVTm9TQ3haUVVGalFTeEhRVU5TTEUxQlEwa3NVMEZCVDBFc1JVRkJSU3huUWtGQmJVSXNVMEZCVHl4SFFVRkhMRVZCUVVVc1MwRkJUeXhsUVVGaExFVkJRVWRCTEVWQlFVVXNaMEpCUVdsQ0xFTkJRVU15UXl4RlFVRkhReXhGUVVGSmJFTXNTVUZEZUVZc1EwRkJRMmxETEVOQlFVTXNSVUZCUlN4UFFVRlBha01zUTBGQlF5eERRVU5vUWl4RlFVTkJWaXhGUVVGRkxHVkJRMDRzUTBGRFVpeERRVUZETEVWQlIwdExMRWRCUVdNc1NVRkJTU3hQUVVGUGQwTXNSMEZCVnl4RlFVRkhMRVZCUVVVc1JVRkhiRU5VTEVkQlFXbENMRU5CUXpGQ0xFdEJRVTFWTEVWQlFWTXNWMEZCVnl4RFFVRkZMRTFCUVU4c1EwRkJSU3hEUVVGRExFVkJRM1JETEUxQlFVOUJMRVZCUVZNc1YwRkJWeXhEUVVGRkxFMUJRVThzUTBGQlJTeERRVUZETEVWQlEzWkRMRWRCUVVsQkxFVkJRVk1zVjBGQlZ5eERRVUZGTEUxQlFVOHNRMEZCUlN4RFFVRkRMRVZCUTNCRExFbEJRVXRCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRTFCUVU4c1EwRkJSU3hEUVVGRExFVkJSWEpETEUxQlFVOUJMRVZCUVZNc1YwRkJWeXhEUVVGRkxFOUJRVkVzUTBGQlJTeERRVUZETEVWQlEzaERMRTlCUVZGQkxFVkJRVk1zVjBGQlZ5eERRVUZGTEU5QlFWRXNRMEZCUlN4RFFVRkRMRVZCUTNwRExFZEJRVWxCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRTlCUVZFc1EwRkJSU3hEUVVGRExFVkJRM0pETEVsQlFVdEJMRVZCUVZNc1YwRkJWeXhEUVVGRkxFOUJRVkVzUTBGQlJTeERRVUZETEVWQlJYUkRMRXRCUVUxQkxFVkJRVk1zVjBGQlZ5eERRVUZGTEUxQlFVOHNRMEZCUlN4RFFVRkRMRVZCUTNSRExFMUJRVTlCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRTFCUVU4c1EwRkJSU3hEUVVGRExFVkJRM1pETEVkQlFVbEJMRVZCUVZNc1YwRkJWeXhEUVVGRkxFMUJRVThzUTBGQlJTeERRVUZETEVWQlEzQkRMRWxCUVV0QkxFVkJRVk1zVjBGQlZ5eERRVUZGTEUxQlFVOHNRMEZCUlN4RFFVRkRMRVZCUTNKRExFVkJRVWRCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRTFCUVU4c1EwRkJSU3hEUVVGRExFVkJSVzVETEVsQlFVdEJMRVZCUVZNc1YwRkJWeXhEUVVGRkxFdEJRVTBzUTBGQlJTeERRVUZETEVWQlEzQkRMRXRCUVUxQkxFVkJRVk1zVjBGQlZ5eERRVUZGTEV0QlFVMHNRMEZCUlN4RFFVRkRMRVZCUTNKRExFVkJRVWRCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRXRCUVUwc1EwRkJSU3hEUVVGRExFVkJSV3hETEV0QlFVMUJMRVZCUVZNc1YwRkJWeXhEUVVGRkxFMUJRVThzUTBGQlJTeERRVUZETEVWQlEzUkRMRTFCUVU5QkxFVkJRVk1zVjBGQlZ5eERRVUZGTEUxQlFVOHNRMEZCUlN4RFFVRkRMRVZCUTNaRExFZEJRVWxCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRTFCUVU4c1EwRkJSU3hEUVVGRExFVkJRM0JETEVsQlFVdEJMRVZCUVZNc1YwRkJWeXhEUVVGRkxFMUJRVThzUTBGQlJTeERRVUZETEVWQlEzSkRMRVZCUVVkQkxFVkJRVk1zVjBGQlZ5eERRVUZGTEUxQlFVOHNRMEZCUlN4RFFVRkRMRVZCUlc1RExFOUJRVkZCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRkZCUVZNc1EwRkJSU3hEUVVGRExFVkJRekZETEZGQlFWTkJMRVZCUVZNc1YwRkJWeXhEUVVGRkxGRkJRVk1zUTBGQlJTeERRVUZETEVWQlF6TkRMRWxCUVV0QkxFVkJRVk1zVjBGQlZ5eERRVUZGTEZGQlFWTXNRMEZCUlN4RFFVRkRMRVZCUTNaRExFdEJRVTFCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRkZCUVZNc1EwRkJSU3hEUVVGRExFVkJRM2hETEVWQlFVZEJMRVZCUVZNc1YwRkJWeXhEUVVGRkxGRkJRVk1zUTBGQlJTeERRVUZETEVWQlJYSkRMRTlCUVZGQkxFVkJRVk1zVjBGQlZ5eERRVUZGTEZGQlFWTXNRMEZCUlN4RFFVRkRMRVZCUXpGRExGRkJRVk5CTEVWQlFWTXNWMEZCVnl4RFFVRkZMRkZCUVZNc1EwRkJSU3hEUVVGRExFVkJRek5ETEVsQlFVdEJMRVZCUVZNc1YwRkJWeXhEUVVGRkxGRkJRVk1zUTBGQlJTeERRVUZETEVWQlEzWkRMRXRCUVUxQkxFVkJRVk1zVjBGQlZ5eERRVUZGTEZGQlFWTXNRMEZCUlN4RFFVRkRMRVZCUTNoRExFVkJRVWRCTEVWQlFWTXNWMEZCVnl4RFFVRkZMRkZCUVZNc1EwRkJSU3hEUVVGRExFTkJRM3BETEVWQlIyRXZRaXhIUVVGclFpeERRVU16UWl4SlFVRkxMRWxCUVUxRUxFVkJRVk1zVFVGQlRTeEZRVU14UWl4TlFVRlBMRWxCUVUxQkxFVkJRVk1zVFVGQlRTeEZRVUZGTEZGQlFWRXNTMEZCU3l4RlFVTXpReXhWUVVGWExFbEJRMUJCTEVWQlFWTXNUVUZCVFN4RlFVTldMRkZCUVZFc1MwRkJTeXhGUVVOaUxFMUJRVTFuUXl4RlFVRlRMRmRCUVZjc1EwRkJSU3hMUVVGTkxFTkJRVVVzUTBGQlF5eERRVUZETEVWQlF5OURMRk5CUVZVc1NVRkRUbWhETEVWQlFWTXNUVUZCVFN4RlFVTldMRkZCUVZFc1MwRkJTeXhGUVVOaUxFdEJRVXRuUXl4RlFVRlRMRmRCUVZjc1EwRkJSU3hMUVVGTkxFTkJRVVVzUTBGQlF5eERRVUZETEVWQlF6bERMRWxCUVVzc1NVRkJUV2hETEVWQlFWTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1RVRkJUU3hGUVVNeFF5eG5Ra0ZCYVVJc1NVRkJUVUVzUlVGQlV5eE5RVUZOTEVWQlFVVXNVVUZCVVN4TlFVRk5MRVZCUTNSRUxFbEJRVXNzU1VGQlRVRXNSVUZCVXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hOUVVGTkxFVkJRM2hETEdOQlFXVXNTVUZCVFVFc1JVRkJVeXhOUVVGTkxFVkJRVVVzVFVGQlRTeE5RVUZOTEVWQlEyeEVMRWxCUVVzc1NVRkJUVUVzUlVGQlV5eE5RVUZOTEVWQlFVVXNVVUZCVVN4TlFVRk5MRVZCUXpGRExHZENRVUZwUWl4SlFVRk5RU3hGUVVGVExFMUJRVTBzUlVGQlJTeFJRVUZSTEUxQlFVMHNSVUZEZEVRc1NVRkJTeXhKUVVGTlFTeEZRVUZUTEUxQlFVMHNSVUZCUlN4TlFVRk5MRTFCUVUwc1JVRkRlRU1zWTBGQlpTeEpRVUZOUVN4RlFVRlRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFMUJRVTBzUlVGRGJFUXNTVUZCU3l4SlFVRk5RU3hGUVVGVExFMUJRVTBzUlVGQlJTeFJRVUZSTEU5QlFVOHNSVUZETTBNc2FVSkJRV3RDTEVsQlFVMUJMRVZCUVZNc1RVRkJUU3hGUVVGRkxGRkJRVkVzVDBGQlR5eEZRVU40UkN4SlFVRkxMRWxCUVUxQkxFVkJRVk1zVFVGQlRTeEZRVUZGTEUxQlFVMHNUMEZCVHl4RlFVTjZReXhsUVVGblFpeEpRVUZOUVN4RlFVRlRMRTFCUVUwc1JVRkJSU3hOUVVGTkxFOUJRVThzUTBGRGVFUXNSVUVyUTJGcFF5eEhRVUZsTEdsQ1FVRnRReXhEUVVVelJDeFRRVUZYYWtRc1IwRkJUVVFzUlVGQlZ5eFhRVUZYTEVsQlFVbHRSQ3hIUVVGWkxGRkJRVkVzUlVGQlJTeExRVUZMTEZWQlFWVXNSVUZEYUVZc1QwRkJVMnhFTEVkQlFVMUVMRVZCUVZjc1QwRkJUeXhKUVVGSmJVUXNSMEZCV1N4UFFVRlBMRVZCUVVVc1MwRkJTeXhSUVVGUkxFVkJRM1pGTEU5QlFWTnNSQ3hIUVVGTlJDeEZRVUZYTEU5QlFVOHNTVUZCU1cxRUxFZEJRVmtzVDBGQlR5eEZRVUZGTEV0QlFVc3NVVUZCVVN4RlFVTjJSU3hMUVVGUGJFUXNSMEZCVFVRc1JVRkJWeXhMUVVGTExFbEJRVWx0UkN4SFFVRlpMRTlCUVU4c1JVRkJSU3hMUVVGTExGTkJRVk1zUlVGRGNFVXNTMEZCVDJ4RUxFZEJRMGh0UkN4SFFVRmxMRTlCUVZGd1JDeEZRVUZYTEZGQlFWRXNSVUZEY2tNc1NVRkJTU3hEUVVGRExFTkJRVU54UkN4RlFVRlBReXhEUVVGSkxFbEJRVTFJTEVkQlFWa3NVVUZCVVVjc1EwRkJTU3hEUVVGRExFVkJRMmhFTEV0QlFVc3NUVUZCVFN4RlFVTndRaXhUUVVGWGNrUXNSMEZEVUcxRUxFZEJRV1VzVFVGQlQzQkVMRVZCUVZjc1VVRkJVU3hGUVVOd1F5eEpRVUZKTEVOQlFVTXNRMEZCUTNGRUxFVkJRVTlGTEVOQlFVY3NTVUZCVFVvc1IwRkJXU3hSUVVGUlNTeERRVUZITEVOQlFVTXNSVUZET1VNc1MwRkJTeXhWUVVGVkxFVkJRM2hDTEV0QlFVOTBSQ3hIUVVGTlJDeEZRVUZYTEZGQlFWRXNTVUZCUzBNc1IwRkJUV3RFTEVkQlFWa3NTVUZCU1N4RlFVTXpSQ3hMUVVGUGJFUXNSMEZCVFVRc1JVRkJWeXhMUVVGTExFbEJRVWx0UkN4SFFVRlpMRTlCUVU4c1JVRkRjRVFzUzBGQlQyaEVMRWRCUTBoQkxFVkJRVVVzVjBGRFJ5eE5RVUZSTEZOQlFVOHNSMEZCUnl4RlFVRkZMRXRCUVU4c1pVRkJZU3hEUVVGRExFVkJRM3BETEV0QlFVOHNVMEZCVHl4SFFVRkhMRVZCUVVVc1MwRkJUeXhsUVVGaExFVkJRVXNzWjBKQlFXTXNTMEZCVHl4VFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRemRGTEVsQlFVdFZMRWRCUVUxelF5eEhRVUZaTEV0QlFVdDBReXhEUVVGRExFTkJRVU1zUlVGRE9VSXNTMEZCU3l4TlFVRk5MRVZCUTNCQ0xFOUJRVk5XTEVkQlEwZ3NVMEZEUlVnc1JVRkJWeXhYUVVGWExFZEJRVWRCTEVWQlFWY3NUVUZCVFN4RlFVTjRReXhUUVVGUExFZEJRVWNzUlVGQlJTeExRVUZQTEdWQlFXRXNSVUZEYkVOSExFVkJRVVVzVjBGRFJpeERRVUZEY1VRc1JVRkJUVU1zUlVGQlRVTXNTMEZEUml4RFFVRkZMRXRCUVVGR0xFVkJRVTBzVFVGQlFVVXNRMEZCVFN4RlFVVTNRaXhGUVVOTExFMUJRVkVzVTBGQlR5eEhRVUZITEVWQlFVVXNTMEZCVHl4bFFVRmhMRU5CUVVNc1JVRkRla01zUzBGQlR5eFRRVUZQTEVkQlFVY3NSVUZCUlN4TFFVRlBMR1ZCUVdFc1JVRkJTeXhuUWtGQll5eExRVUZQTEZOQlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkROMFVzU1VGQlMwTXNSMEZCVXl4RFFVTllMRWxCUVVsRExFVkJRV3RETEVOQlFVTXNSVUZEZGtNc1VVRkJVME1zUzBGQlUwWXNSVUZCVFVNc1JVRkJTVU1zUlVGQlRTeEpRVUZKTEVWQlFVbEJMRVZCUVUwc1RVRkRhRVFzVDBGQlQxWXNSMEZCV1N4UFFVRlBVeXhEUVVGSExFTkJRMnBETEVOQlFVTXNSVUZEUVN4TFFVRkxMREpDUVVFeVFpeEZRVVY2UXl4TFFVRlBla1FzUjBGRFJDeE5RVVZGU0N4RlFVRlhMRlZCUVZVc1NVRkJTMkVzUjBGQlRYTkRMRWRCUVZrc1VVRkJVWFJETEVOQlFVTXNRMEZCUXl4RlFVTjBSRllzUlVGQlJTeFJRVU5HUVN4RlFVRkZMRXRCUTBaQkxFVkJRVVVzUzBGRFJrRXNSVUZCUlN4UFFVTkdRU3hGUVVGRkxFOUJRMFpCTEVWQlFVVXNUMEZEUmtFc1JVRkJSU3hMUVVOR1FTeEZRVUZGTEU5QlEwWkJMRVZCUVVVc1QwRkRSa0VzUlVGQlJTeExRVU5HUVN4RlFVRkZMRk5CUTBaQkxFVkJRVVVzUzBGRFJrRXNSVUZCUlN4UlFVTk9MRVZCUTBvc1RVRkJVVUVzUjBGRFJpeFRRVUZQUVN4RlFVRkZMRXRCUVZFc1RVRkJTVUVzUlVGQlJTeFhRVUZaUVN4RlFVRkZMR0ZCUVdOQkxFVkJRVVVzWlVGQlpTeEZRVUZGTEV0QlFVc3NSVUZCUnl4RFFVRkRNa1FzUlVGQlMwTXNTVUZCWXl4RFFVTm9SeXhKUVVGSlF5eEZRVUZUUml4RlFVTmlMRkZCUVZOSExFdEJRVkZHTEVWQlEySXNUMEZCVVVVc1JVRkJTeXhMUVVGTkxFTkJRMllzU1VGQlN5eE5RVU5FUkN4RlFVRlRZaXhIUVVGWkxFMUJRVTFoTEVWQlFWRmlMRWRCUVZrc1VVRkJVV01zUlVGQlN5eEpRVUZKTEVOQlFVTXNSVUZEYWtVc1RVRkRTaXhKUVVGTExGRkJRMFJFTEVWQlFWTmlMRWRCUVZrc1RVRkJUV0VzUlVGQlVVTXNSVUZCU3l4SlFVRkpMRVZCUXpWRExFMUJRMG9zU1VGQlN5eFhRVU5FUkN4RlFVRlRZaXhIUVVGWkxFdEJRVXRoTEVWQlFWRkRMRVZCUVVzc1MwRkJTeXhGUVVNMVF5eExRVU5TTEVOQlIwb3NUMEZCVDBRc1EwRkRXQ3hEUVVGRExFVkJRMHdzVVVGQlZUZEVMRWRCUVZFc1UwRkJVeXhUUVVGUExFZEJRVWNzUlVGQlIwRXNSVUZCUlN4TlFVRlBMRU5CUVVOR0xFVkJRVWRwUlN4SlFVRlZaaXhIUVVGWkxFOUJRVTlsTEVOQlFVc3NRMEZCUXl4RlFVRkZMRXRCUVVzc1pVRkJaU3hGUVVNNVJ5eFBRVUZUTDBRc1IwRkJUVUVzUlVGQlJTeFhRVUZYTEV0QlFVOHNaVUZCWVN4RlFVRkZMRXRCUVU4c1UwRkJUeXhIUVVGSExFVkJRVXNzVTBGQlR5eEhRVUZITEVOQlFVTXNSVUZEYmtZc1QwRkJVMEVzUjBGRFNDeFRRVU5GU0N4RlFVRlhMRmRCUTA0c1RVRkJVU3hUUVVGUExFZEJRVWNzUlVGQlJTeExRVUZQTEdWQlFXRXNRMEZCUXl4RlFVTjZReXhMUVVGUExGTkJRVThzUjBGQlJ5eEZRVUZGTEV0QlFVOHNaVUZCWVN4RlFVRkxMRk5CUVU4c1IwRkJSeXhGUVVGRkxFdEJRVThzWlVGQllTeERRVUZETEVWQlEyaEdMRk5CUVU4c1NVRkJTU3hGUVVGRkxFdEJRVThzWlVGQllTeEZRVU51UTBjc1JVRkJSU3hYUVVOR0xFTkJRVU5uUlN4RlFVRlBReXhGUVVGVFZpeExRVU5PTEVOQlFVVXNTMEZCVFN4VFFVRlZMRlZCUVZkVExFVkJRVThzVFVGQlFWUXNRMEZCVFN4RlFVVjZSQ3hGUVVWS0xGZEJRV0YyUkN4SFFVRlJMRk5CUVZNc1UwRkJUeXhIUVVGSExFVkJRVWRJTEVWQlFWY3NWMEZCV1N4RFFVRkRReXhGUVVGSGIwVXNTMEZCVlN4RFFVRkZMRXRCUVUwc1RVRkJUeXhMUVVGQlFTeERRVUZMTEVWQlFVVXNSVUZEZEVjc1lVRkJaV3hGTEVkQlExUXNVMEZEU1N4VFFVRlBMRWRCUVVjc1JVRkRWaXhuUWtGRFJrRXNSVUZCUlN4WFFVTkJMR2RDUVVOQkxGTkJRVThzUjBGQlJ5eEZRVU5hTEVOQlFVTkdMRVZCUVVkeFJTeEZRVUZKUkN4RlFVRk5SU3hGUVVGSlF5eExRVU5RTEVOQlFVVXNTMEZCVFN4UlFVRlRMRXRCUVVGSUxFTkJRVXNzUlVGRmNrTXNSVUZEU2l4blFrRkJhMEpzUlN4SFFVTmFMRk5CUTBrc1UwRkJUeXhIUVVGSExFVkJRMVlzWjBKQlEwWkJMRVZCUVVVc1YwRkJWeXhOUVVGUkxGTkJRVThzUjBGQlJ5eEZRVUZGTEV0QlFVOHNaVUZCWVN4RFFVRkRMRVZCUTNCRUxHZENRVU5CTEZOQlFVOHNSMEZCUnl4RlFVTmFMRU5CUVVOR0xFVkJRVWQzUlN4RlFVRkpReXhGUVVGUFNpeEZRVUZKUXl4TFFVTlNMRU5CUVVVc1MwRkJUU3hYUVVGWkxFMUJRVUZITEVOQlFVMHNSVUZGZWtNc1JVRkhTaXhoUVVGbGRrVXNSMEZCVFhkRkxFZEJRVzFDZUVVc1JVRkJSU3hOUVVGUFNDeEZRVUZYTEdGQlFXTnRSQ3hIUVVGWkxGRkJRVkVzUlVGRE9VWXNaMEpCUVd0Q2FFUXNSMEZCVFhkRkxFZEJRVzFDZUVVc1JVRkJSU3hoUVVGalNDeEZRVUZYTEdkQ1FVRnBRbTFFTEVkQlFWa3NVVUZCVVN4RlFVTXpSeXhqUVVGblFtaEVMRWRCUVUxM1JTeEhRVUZ0UW5oRkxFVkJRVVVzWjBKQlFXbENTQ3hGUVVGWExHZENRVUZwUW0xRUxFZEJRVmtzVVVGQlVTeEZRVU0xUnl4alFVRm5RbWhFTEVkQlExcDNSU3hIUVVGdFFuaEZMRVZCUVVVc1kwRkJaVWdzUlVGQlZ5eFpRVUZaTEVkQlFVZEJMRVZCUVZjc1ZVRkJWU3hGUVVGSGJVUXNSMEZCV1N4UlFVRlJMRVZCUXpsSExGTkJRVmRvUkN4SFFVRk5RU3hGUVVGRkxHTkJSVzVDTEZkQlFXRkJMRWRCUVUxQkxFVkJRVVVzVVVGRGVrSXNRMEZCUXl4RlFXZERXWGxGTEVkQlFWVXNhVUpCUVRoQ0xFTkJRMnBFTEZOQlFWY3pSU3hIUVVGTlJDeEZRVUZYTEVsQlFVa3NTVUZCU3pCRUxFbEJRVmNzUTBGQlJTeExRVUZOTEZOQlFWVXNUVUZCUVVFc1EwRkJUU3hGUVVGRkxFVkJRekZGTEZGQlFWVjZSQ3hIUVVGTmJVUXNSMEZCWlN4TFFVRk5jRVFzUlVGQlZ5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVORExFVkJRVWMwUlN4RFFVRkZMRXRCUVU4c1EwRkJSU3hMUVVGTkxFdEJRVTBzVFVGQlQwRXNRMEZCUnl4RlFVRkZMRVZCUTNCSExGVkJRVmsxUlN4SFFVTk9MRk5CUVU4c1IwRkJSeXhGUVVOUUxFdEJRVXRFTEVWQlFWY3NWVUZCVlN4RlFVTXhRaXhKUVVGTE1FUXNTVUZCVnl4RFFVRkZMRXRCUVUwc1VVRkJVeXhOUVVGUFFTeERRVUZOTEVWQlFVVXNSVUZGZWtRc1ZVRkJXWHBFTEVkQlExSnRSQ3hIUVVGcFFpeFRRVUZQTEZOQlFWTXNSVUZCUlN4TFFVRkxMRk5CUVZNc1JVRkJSM0JFTEVWQlFWY3NUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE9FVXNSVUZCVFVNc1EwRkJTU3hMUVVGUExFTkJRekZHTEV0QlFVMHNUMEZEVGl4TlFVRlBRU3hGUVVOUUxFMUJRVTlFTEVWQlFVc3NXVUZCV1N4SlFVRk5MRTlCUTJ4RExFVkJRVVVzUlVGRlRpeGpRVUZuUWpORkxFZEJRMXBwUkN4SFFVRnBRaXhUUVVGUExIRkNRVUZ4UWl4RlFVRkZMRXRCUVVzc1ZVRkJWU3hGUVVGSGFrUXNSVUZCUlN4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU15UlN4RlFVRk5SU3hEUVVGUkxFdEJRVThzUTBGRGFrY3NTMEZCVFN4WlFVTk9MRk5CUVVGQkxFVkJRMEVzVlVGQlYwWXNSVUZCU3l4WlFVRlpMRWxCUVUwc1YwRkRkRU1zUlVGQlJTeEZRVU5PTEdGQlFXVXpSU3hIUVVOWWFVUXNSMEZCYVVJc1UwRkJUeXhyUWtGQmEwSXNSVUZCUlN4TFFVRkxMRk5CUVZNc1JVRkJSMnBFTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE1rVXNSVUZCVFVjc1EwRkJUeXhMUVVGUExFTkJRelZHTEV0QlFVMHNWMEZEVGl4UlFVRkJRU3hGUVVOQkxGVkJRVmRJTEVWQlFVc3NXVUZCV1N4SlFVRk5MRk5CUTNSRExFVkJRVVVzUlVGRFRpeHJRa0ZCYjBJM1JTeEhRVU5vUWtRc1JVRkJWeXhMUVVGTExFbEJRVXRyUml4SlFVRlZMRU5CUXpOQ0xFdEJRVTBzVTBGRFRpeFBRVUZSTEVOQlFVVXNTMEZCVFN4UFFVRlJMRTFCUVU5QkxFTkJRVXNzUlVGRGNFTXNWVUZCVnl4VlFVTm1MRVZCUVVVc1JVRkRUaXhaUVVGakwwVXNSMEZEVm1sRUxFZEJRV2xDTEZOQlFVOHNLMEpCUVN0Q0xFVkJRVVVzUzBGQlN5eFhRVUZYTEVWQlFVZHFSQ3hGUVVGRkxFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXpKRkxFVkJRVTFMTEVOQlFVMHNTMEZCVHl4RFFVTXhSeXhMUVVGTkxGTkJRMDRzVDBGQlFVRXNSVUZEUVN4VlFVTkpUQ3hGUVVGTExGbEJRVmtzUjBGQlN5eFZRVUZaTEZkQlFXRkJMRVZCUVVzc1dVRkJXU3hIUVVGTExHRkJRV1VzVjBGQllTeE5RVU42Unl4RlFVRkZMRVZCUTA0c1dVRkJZemRGTEVkQlExWnRSQ3hIUVVGcFFpeFRRVUZQTEZOQlFWTXNSVUZCUlN4TFFVRkxMRkZCUVZFc1JVRkJSM0JFTEVWQlFWY3NWMEZCVnl4SFFVRkhRU3hGUVVGWExFMUJRVTBzUTBGQlF5eEZRVUZGTEVsQlF6VkdMRU5CUVVNc1EwRkJRM0ZFTEVWQlFVOWpMRU5CUVVzc1MwRkJUeXhEUVVOcVFpeExRVUZOTEZGQlEwNHNUVUZCVDBFc1EwRkRXQ3hGUVVOS0xFVkJRMG9zYzBKQlFYZENhRVVzUjBGRGNFSnBSQ3hIUVVGcFFpeFRRVUZQTEU5QlFVOHNSVUZCUlN4TFFVRkxMRTFCUVUwc1JVRkJSMFlzUjBGQlZ5eFZRVUZWTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVOcVJDeEZRVUZIYjBVc1EwRkJTU3hMUVVGUExFTkJRM1JHTEV0QlFVMHNZVUZEVGl4WFFVRlpRU3hEUVVOb1FpeEZRVUZGTEVWQlEwNHNiVUpCUVhGQ2JFVXNSMEZCVFN0RExFZEJRVmNzWTBGQll5eEpRVUZMYlVJc1NVRkJWU3hEUVVGRkxFdEJRVTBzWVVGQll5eFhRVUZaUVN4RFFVRkxMRVZCUVVVc1JVRkZOVWNzV1VGQlkyeEZMRWRCUVUxQkxFVkJRVVVzVFVGQlRTeExRVUZQTEdWQlFXRXNSVUZCUlN4TFFVRlBMRk5CUVU4c1IwRkJSeXhGUVVGTExGTkJRVThzUjBGQlJ5eERRVUZETEVWQlEyNUdMRmxCUVdOQkxFZEJRMUlzVTBGQlR5eEhRVUZITEVWQlExQXNTMEZCVHl4bFFVRmhMRVZCUTNCQ0xFdEJRVXRCTEVWQlFVVXNVMEZCVXl4RlFVTm9RaXhKUVVGTGRVUXNTVUZCVnl4RFFVTmlMRXRCUVUwc1RVRkRUaXhSUVVGVFFTeERRVU5pTEVWQlFVVXNSVUZEVml4VlFVRlpka1FzUjBGRFRpeE5RVU5GUVN4RlFVRkZMRmxCUTBaQkxFVkJRVVVzV1VGRFJrRXNSVUZCUlN4clFrRkRSa0VzUlVGQlJTeFRRVU5HUVN4RlFVRkZMRlZCUTBaQkxFVkJRVVVzVVVGRFJrRXNSVUZCUlN4WlFVTkdRU3hGUVVGRkxHRkJRMFpCTEVWQlFVVXNZMEZEUmtFc1JVRkJSU3haUVVOR1FTeEZRVUZGTEZWQlEwWkJMRVZCUVVVc2MwSkJSVVpCTEVWQlFVVXNhMEpCUTA0c1JVRkRTaXhWUVVGWlFTeEhRVU5TZDBVc1IwRkJiVUo0UlN4RlFVRkZMRlZCUVZkSUxFVkJRVmNzV1VGQllTeERRVUZEYjBZc1JVRkJUVU1zUlVGQlMwTXNTMEZCVnl4RFFVTXpSU3hMUVVGTkxFMUJRMDRzVTBGQlZTeERRVUZEUml4RlFVRk5SU3hEUVVGTExFTkJRekZDTEVWQlFVVXNSVUZEVGl4VFFVRlhia1lzUjBGRFVIZEZMRWRCUVcxQ2VFVXNSVUZCUlN4VlFVRlhTQ3hGUVVGWExGZEJRVmtzUTBGQlEyOUdMRVZCUVUxRExFVkJRVXRETEV0QlFWY3NRMEZETVVVc1MwRkJUU3hMUVVOT0xGTkJRVlVzUTBGQlEwWXNSVUZCVFVVc1EwRkJTeXhEUVVNeFFpeEZRVUZGTEVWQlEwNHNUVUZCVVc1R0xFZEJRVTFCTEVWQlFVVXNVMEZCVXl4TFFVRlBMR1ZCUVdFc1EwRkRha1FzUTBGQlF5eEZRV1ZOTEZOQlFWTnZSaXhIUVVOYVF5eEZRVU5CUXl4RlFVTkJReXhGUVVOWExFTkJRMWdzVDBGQlV5eFRRVUZQUml4RlFVRlRMRTFCUVUwc1owSkJRV1ZETEVWQlFVOHNaMEpCUVdWRUxFTkJRVXNzUlVGQlJTeExRVUZMTEVWQlFVY3NRMEZCUTBjc1JVRkJUME1zU1VGQlV5eERRVU5vUnl4SFFVRkpRU3hGUVVGTExGRkJRVlVzUlVGQlJ5eFBRVUZQUkN4RlFVVTNRaXhKUVVGSlJTeEZRVUZQU0N4RlFVRlJReXhGUVVGUFF5eEZRVUZMTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVkQkxFVkJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVTm9SQ3hSUVVGVFJTeEZRVUZSTEVWQlFVZEJMRVZCUVZGR0xFVkJRVXNzVDBGQlVVVXNTVUZEY2tORUxFVkJRVTlJTEVWQlFWRkhMRVZCUVUxRUxFVkJRVXRGTEVOQlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVkR0xFVkJRVXRGTEVOQlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkZka1FzVDBGQlQwUXNRMEZEV0N4RFFVRkRMRU5CUTB3c1EwRkxUeXhUUVVGVFJTeEhRVUZyUWtNc1JVRkJhVU5ETEVWQlFUQkRMRU5CUTNwSExFbEJRVTFETEVWQlFWY3NUMEZCVDBZc1IwRkJVeXhUUVVGaExGTkJRVTlCTEVOQlFVa3NSVUZCU1VFc1JVRkROMFFzVDBGQlV5eFRRVU5NUlN4RlFVRlRMRXRCUVU4c1pVRkJZU3hGUVVNM1FrUXNSVUZCU3l4TFFVRlBMR1ZCUVdFc1JVRkJSU3hMUVVGUExGTkJRVThzUjBGQlJ5eEZRVUZMTEZOQlFVOHNSMEZCUnl4RFFVRkRMRVZCUXpWRUxFTkJRVU5GTEVWQlFVZERMRWxCUVUwc1EwRkJRMFFzUlVGQlIwTXNRMEZCUXl4RFFVTnVRaXhEUVVOS0xFTkJSMDhzVTBGQlUwTXNSMEZCV1VNc1MwRkJjMEpETEVWQlFTdERMRU5CUXpkR0xFOUJRVk1zVTBGQlR5eERRVUZEUXl4RlFVRlZReXhKUVVOb1FpeERRVUZEUXl4RlFVRlBMRWxCUVUwc1EwRkRha0lzU1VGQlNVTXNSVUZCVlV3c1JVRkJZU3hGUVVGRlNTeEZRVUZQTEVOQlFVTXNSVUZEY2tNc1IwRkJTU3hEUVVGRFF5eEZRVUZQTEU5QlFWRXNUMEZCVDBFc1JVRkZNMElzVVVGQlUxZ3NTMEZCVVU4c1JVRkJUeXhEUVVOd1FpeEpRVUZKU3l4RlFVRlJXaXhGUVVGTFZ5eEZRVUZQTEV0QlFWVXNSVUZCVlN4RlFVRkZSQ3hGUVVGUFF5eEZRVUZQTEV0QlFVc3NSVUZEYWtVc1IwRkJTU3hEUVVGRFF5eEZRVUZMTEU5QlFWRXNUMEZCVDBRc1JVRkZla0pCTEVWQlFWTkRMRU5CUTJJc1EwRkZRU3hQUVVGUFJDeERRVU5ZTEVOQlEwZ3NRMEZEVEN4RFN6VndRa0VzU1VGQlFVVXNSMEZCYlVJc1UwTklXaXhUUVVGVFF5eEhRVUZ6UWtNc1JVRkJNa0pETEVWQlFYTkRMRU5CUTI1SExFbEJRVTFETEVWQlFUUkNMRU5CUVVNc1JVRkRia01zVDBGQlZ5eERRVUZEUXl4RlFVRkxReXhEUVVGTExFbEJRVXNzVDBGQlR5eFJRVUZSU2l4RFFVRk5MRVZCUXpWRFJTeEZRVUZQUXl4RFFVRkhMRVZCUVVsR0xFVkJRVXRITEVOQlFVc3NSVUZITlVJc1QwRkJUMFlzUTBGRFdDeERRMU5QTEVsQlFWVkhMRTlCUVZZc1EwRkRWVUVzUlVGQlFTeG5Ra0ZCWjBSRExFZEJRVlZCTEVWQlIyaEZMRk5CUVZORExFVkJRVXRETEVWQlFTdENMRU5CUTJoRUxFbEJRVTFETEVWQlFWVkRMRWRCUVZNc1ZVRkJWVVlzUTBGQlR5eEZRVU14UXl4SFFVRkpMRU5CUVVORExFVkJRVk1zVDBGQlR5eExRVVZ5UWl4UFFVRlJRU3hIUVVGQkxGbEJRVUZCTEVWQlFWTXNTMEZCVFN4RFFVTnVRaXhKUVVGTExGRkJRMFFzVDBGQlQwRXNSVUZCVVN4TlFVRk5MRWxCUVVsS0xFVkJRV1VzU1VGQlNTeEZRVU5vUkN4SlFVRkxMRk5CUTBRc1QwRkJUMDBzUjBGQlowSkdMRVZCUVZFc1RVRkJUMG9zUlVGQlpTeEpRVUZKTEVWQlF6ZEVMRWxCUVVzc1QwRkRSQ3hOUVVGUExFTkJRVVVzVDBGQlVTeFBRVUZSTEUxQlFVOUpMRVZCUVZFc1RVRkJUU3hOUVVGTkxFTkJRVVVzWTBGQlpTeEZRVUZMTEVOQlFVTXNRMEZCUlN4RlFVTnFSaXhKUVVGTExFOUJRMFFzVFVGQlR5eERRVUZGTEU5QlFWRXNUMEZCVVN4TlFVRlBRU3hGUVVGUkxFMUJRVTBzVTBGQlV5eERRVUZGTEVWQlF6ZEVMRWxCUVVzc1YwRkRSQ3hOUVVGUExFTkJRVVVzVDBGQlVTeFhRVUZaTEUxQlFVOUJMRVZCUVZFc1RVRkJUU3hOUVVGTkxFTkJRVVVzUlVGRE9VUXNTVUZCU3l4VlFVTk1MRWxCUVVzc1UwRkRUQ3hKUVVGTExGTkJRMFFzVDBGQlQwRXNSVUZCVVN4TlFVTnVRaXhKUVVGTExGZEJRMHdzU1VGQlN5eFBRVU5FTEU5QlFVOHNTVUZEWml4RFFVTktMRU5CZGtKUFNpeEZRVUZUTEV0QlFVRkZMRVZCT0VKVUxGTkJRVk5MTEVWQlFVMU1MRVZCUVcxQ1RTeEZRVUV3UTFJc1JVRkJRU3huUWtGQk1FSXNRMEZEZWtjc1IwRkJTVVVzUjBGQlV5eExRVUUwUWl4UFFVRlBMRXRCUldoRUxFZEJRVWtzVFVGQlRTeFJRVUZSUVN4RFFVRkpMRVZCUTJ4Q0xFOUJRVTlOTEVWQlFWZE9MRVZCUVVzc1NVRkJTMFFzUjBGQlZVUXNSVUZCWlN4TlFVRk5ReXhGUVVGUFR5eERRVUZWTEVOQlFVTXNRMEZCUXl4RlFVTXpSU3hIUVVGSkxFOUJRVTlPTEVkQlFWTXNVMEZCVlN4RFFVTnFReXhIUVVGSkxFVkJRVVVzVjBGQldVRXNSMEZEWkN4UFFVRlBTU3hIUVVGblFrb3NSVUZCVDA4c1IwRkJUVlFzUlVGQlpTeE5RVUZOVXl4RlFVRnJRa1FzUTBGQlZTeERRVUZETEVWQlJURkdMRWxCUVUxRkxFVkJRVTlTTEVWQlFVc3NUMEZEYkVJc1QwRkJVVkVzUlVGQlRTeERRVU5XTEVsQlFVc3NUMEZEUkN4UFFVRlBSaXhGUVVGWFJ5eEZRVUZUTEZGQlFWRlVMRVZCUVVzc1RVRkJUeXhEUVVGRkxGRkJRVk1zUlVGQlN5eERRVUZETEVOQlFVTXNSVUZEY2tVc1NVRkJTeXhYUVVORUxFOUJRVTlOTEVWQlFWZEpMRVZCUVZNc1VVRkJVVllzUlVGQlN5eExRVUZMTEVOQlFVTXNSVUZEYkVRc1NVRkJTeXhQUVVORUxFOUJRVTlOTEVWQlFWZExMRWRCUVVzc1YwRkJWMWdzUlVGQlN5eExRVUZMTEVOQlFVTXNSVUZEYWtRc1VVRkRTU3hOUVVGTkxFbEJRVWtzVFVGQlRTeHBRMEZCYVVOUkxFTkJRVWtzU1VGQlNTeERRVU5xUlN4RFFVTktMRU5CUjBFc1QwRkJUMFlzUlVGQlYwNHNRMEZCWlN4RFFVTnlReXhEUVhoQ1QwWXNSVUZCVXl4TlFVRkJUeXhKUVd4RFNGQXNVVUZCUVN4TFJuTkVWaXhUUVVGVFl5eEhRVUZuUWtNc1JVRkJjVU1zUTBGRGFrVXNUMEZCVHl4UFFVRlBMRTlCUVU4c1EwRkJReXhGUVVGSFFTeEZRVUZQTEVOQlFVVXNUVUZCVDBNc1IwRkJaU3hMUVVGTFJDeEZRVUZOTEV0QlFVc3NRMEZCUlN4RFFVRkRMRU5CUXk5RkxFTkJWVThzVTBGQlUwVXNSMEZEV2tNc1JVRkRRVU1zUlVGRE1rSXNRMEZETTBJc1QwRkJTU3hOUVVGTkxGRkJRVkZFTEVOQlFVc3NSVUZEV2tFc1JVRkJUU3hKUVVGTFJTeEhRVUZOU0N4SFFVRmpSeXhGUVVGSFJDeERRVUZOTEVOQlFVTXNSVUZITjBNc1EwRkRTQ3hKUVVGTFJDeEZRVUZOTEVsQlExZ3NTVUZCUzBFc1JVRkJUU3hOUVVOWUxFMUJRVTlITEVkQlFXbENTQ3hGUVVGTkxFdEJRVXNzUlVGRGJrTXNVMEZCVlN4RFFVTk9MRXRCUVUxRExFVkJRMDRzVFVGQlQwUXNSVUZCVFN4TlFVTmlMRmRCUVZsQkxFVkJRVTBzVjBGRGJFSXNTVUZCUzBFc1JVRkJUU3hIUVVObUxFVkJRMEVzVTBGQlZVRXNSVUZCVFN4UlFVTndRaXhEUVVOS0xFTkJSMDhzU1VGQlRVa3NSMEZCTUVRc1QwRkJUeXhQUVVGUExFTkJRMnBHTEVsQlFVc3NTVUZEVEN4SlFVRkxMRWRCUTFRc1EwRkJReXhGUVUxRUxGTkJRVk5ETEVkQlEweERMRVZCUTBGRExFVkJRMEZETEVWQlEwRkRMRVZCUXl0RExFTkJReTlETEVsQlFVbERMRVZCUVZVc1JVRkRWa01zUlVGQlZTeEhRVU5rTEZGQlFWTkRMRVZCUVZGTUxFVkJRVTlMTEVWQlFWRk9MRVZCUVVzc1QwRkJVVTBzU1VGQlV5eERRVU5zUkN4SlFVRkpReXhGUVVGUFVDeEZRVUZMTEU5QlFVOU5MRU5CUVVzc1JVRkhOVUlzUjBGQlNVTXNSMEZCVVN4TFFVRk5MRU5CUTJSR0xFVkJRVlVzUTBGQlEwRXNSVUZEV0N4UlFVTktMRU5CUjBFc1IwRkJTVUVzUlVGQlV5eERRVU5VUVN4RlFVRlZMRWRCUTFZc1VVRkRTaXhEUVUxQkxFZEJTa2xGTEVkQlFWRk1MRVZCUVUxRkxFbEJRMVJITEVkQlFWRktMRWRCUVU5RExFbEJSM0JDUVN4RlFVRlZMRVZCUVVjc1RVRkJUeXhEUVVGRkxFMUJRVTlLTEVWQlFVc3NWVUZCVlVNc1JVRkJUMHNzUTBGQlN5eEZRVUZGTEV0QlFVc3NSVUZCUnl4VFFVRlZRU3hGUVVGUkxFTkJRVVVzUlVGRk1VWkVMRVZCUVZVc1JVRkRaQ3hEUVVkS0xFTkJSMEVzVTBGQlUwY3NSMEZCWTFJc1JVRkJZME1zUlVGQlowVXNRMEZEYWtjc1NVRkJTVkVzUlVGQlRWUXNSVUZCU3l4UlFVRlJMRXRCUVUxRExFTkJRVXNzUlVGRGJFTXNSMEZCU1N4RlFVRkJVU3hGUVVGTkxFZEJSVllzVFVGQlR5eERRVUZGTEVsQlFVdFVMRVZCUVVzc1ZVRkJWVU1zUlVGQlQxRXNRMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSeXhYUVVGWlFTeEZRVUZOTEVOQlFVVXNRMEZEZWtVc1EwRkhRU3hUUVVGVFF5eEhRVUYzUWxZc1JVRkJZME1zUlVGQk5rTXNRMEZEZUVZc1NVRkJTVU1zUlVGQlQwWXNSVUZCU3l4UFFVRlBReXhEUVVGTExFVkJSWGhDVlN4RlFVRk5TQ3hIUVVGalVpeEZRVUZOUXl4RlFVRlJMRU5CUVVNc1JVRkRka01zUjBGQlNWVXNTVUZCVVN4UFFVRlhMRTlCUjNaQ0xGRkJRVk5HTEV0QlFVOHNUMEZCVHl4TFFVRkxXQ3hGUVVGeFFpeEZRVUZGTEU5QlFVOHNUMEZCVHl4UFFVRlBRU3hGUVVGeFFpeERRVUZETEVWQlF6RkdMRWRCUVVsaExFVkJRVWtzU1VGQlNTeFRRVUZUUml4RFFVRkhMRVZCUVVjc1QwRkhMMElzU1VGQlNVY3NSVUZCVVdJc1IwRkJXVU1zUlVGQlRWY3NSVUZCU1N4WFFVRlpWQ3hGUVVGTlNpeEhRVUZ6UWtrc1EwRkJTU3hEUVVGRExFVkJReTlGTEVkQlFVbFZMRWxCUVZVc1QwRkZaQ3hOUVVGUExFTkJRMGdzU1VGQlMwUXNSVUZCU1N4SlFVTlVMRTFCUVU5RExFVkJRVTBzVFVGRFlpeE5RVUZQV0N4RlFVTlFMRmRCUVZsVkxFVkJRVWtzVjBGRGFFSXNTVUZCUzBNc1JVRkJUU3hUUVVOWUxGTkJRVlZXTEVOQlEyUXNRMEZEU2l4RFFVZFBMRk5CUVZOTUxFZEJRV2xDWlN4RlFVRjNRaXhEUVVkeVJDeEhRVUZKUVN4RlFVRk5MRXRCUVVzc1IwRkJTeXhIUVVGSkxFOUJRVThzUzBGTEwwSXNTVUZCU1VNc1JVRkJVME1zUlVGQlZ5eFpRVUZaTEUxQlFVMUdMRU5CUVVzc1JVRkRMME1zVDBGQlNVTXNSVUZCVHl4UFFVRmxRU3hGUVVGUExFMUJRM0pDUkN4RFFVTm9RaXhEUVZGUExGTkJRVk5ITEVkQlFXOUNaaXhGUVVGalowSXNSVUZCTmtJc1IwRkJNa0lzUTBGRGRFY3NTVUZCU1VNc1JVRkJOa0lzUTBGQlF5eEZRVU5zUXl4UlFVRlRReXhMUVVGWExFOUJRVThzUzBGQlMzQkNMRVZCUVhGQ0xFVkJRVWNzUTBGRGNFUXNTVUZCU1hGQ0xFVkJRV0Z1UWl4RlFVRkxMRkZCUVZGclFpeERRVUZQTEVWQlEzSkRMRXRCUVU5RExFZEJRV01zUjBGQlJ5eERRVU53UWl4SlFVRkpReXhGUVVGalZpeEhRVUYzUWxZc1JVRkJUVzFDTEVOQlFWVXNSVUZETVVRc1IwRkJTU3hEUVVGRFF5eEZRVUZoTEVOQlEyUkVMRVZCUVdGdVFpeEZRVUZMTEZGQlFWRnJRaXhGUVVGVFF5eEZRVUZoTEVOQlFVTXNSVUZEYWtRc1VVRkRTaXhEUVVWQlJpeEZRVUZQTEV0QlFVdEhMRU5CUVZjc1JVRkRka0pFTEVWQlFXRnVRaXhGUVVGTExGRkJRVkZyUWl4RlFVRlRSU3hGUVVGWkxFZEJRVWNzUTBGRGRFUXNRMEZEU2l4RFFVVkpTaXhKUVVGdFFrTXNSVUZCVTBFc1JVRkJUeXhQUVVGUFNTeEhRVUY1UW5KQ0xFTkJRVWtzUTBGQlF5eEhRVVUxUldsQ0xFVkJRVThzUzBGQlN5eERRVUZEU3l4RlFVRkhReXhKUVVGTlJDeEZRVUZGTEUxQlFWRkRMRVZCUVVVc1MwRkJTeXhGUVVWMlF5eEpRVUZKUXl4RlFVRnhReXhEUVVGRExFVkJRekZETEZGQlFWTkRMRVZCUVVrc1JVRkJSMEVzUlVGQlNWSXNSVUZCVHl4UFFVRlJVU3hMUVVNelFrRXNSMEZCU3l4SFFVRkxSQ3hGUVVGbFFTeEZRVUZsTEU5QlFWTXNRMEZCUXl4RlFVRkZMRWxCUVUxUUxFVkJRVTlSTEVOQlFVTXNSVUZCUlN4UlFVTndSVVFzUlVGQlpTeExRVUZMVUN4RlFVRlBVU3hEUVVGRExFTkJRVU1zUlVGSGNrTXNUMEZCVDBRc1EwRkRXQ3hEUVVkQkxFbEJRVTFGTEVkQlFYbERMRTlCUTNwRExGVkJRVThzU1VGQlNTeFBRVUZQUXl4SFFVRlhMRVZCUVVjc1IwRkJSeXhEUVVGRExFVkJRM0JETEZWQlFVOHNNRUpCUVRCQ0xFTkJRM1pETEVWQlEwc3NTMEZCU3l4RlFVTk1MRWxCUVV0RExFZEJRVlZCTEVWQlFVMHNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkZOVUpETEVkQlFUSkRMRlZCUVU4c2MwSkJRWE5DTEVWQlEzcEZMRXRCUVV0SUxFVkJRV3RDTEVWQlEzWkNMRXRCUVU4c1ZVRkJUeXhYUVVGWExFTkJRVU1zUlVGSGVFSXNVMEZCVTBrc1IwRkJjVUpETEVWQlFUUkRMRU5CUXpkRkxFbEJRVWwwUWl4RlFVRk5SQ3hIUVVGamRVSXNSVUZCVFN4RFFVRkRMRVZCUXk5Q0xFZEJRVWtzUTBGQlEzUkNMRVZCUVVzc1QwRkpWaXhKUVVGSmRVSXNSVUZCVlVnc1IwRkJjVUlzVFVGQlRYQkNMRVZCUVVrc1IwRkJSeXhGUVVOb1JDeEhRVUZMZFVJc1JVRkJVU3hQUVVWaUxFMUJRVThzUTBGRFNDeEpRVUZMUVN4RlFVRlJMRTFCUTJJc1RVRkJUMFFzUlVGQlN5eFZRVUZWZEVJc1JVRkJTU3hWUVVGVkxFVkJRVVVzUzBGQlN5eEZRVU16UXl4TlFVRlBMRVZCUTFBc1YwRkJXVUVzUlVGQlNTeFhRVU5vUWl4SlFVRkxjMElzUlVGQlN5eE5RVU5rTEVOQlEwb3NRMEZGVHl4SlFVRk5SU3hIUVVGeFFpeHJRMEZEY2tKRExFZEJRV2xDTEc5RlFVTnFRa01zUjBGQmEwSXNhME5CUTJ4Q1F5eEhRVUYxUWl3MFEwRkRka0pETEVkQlFXMUNMRzFEUVVWdVFrTXNSMEZCWjBJc1EwRkRla0lzUTBGQlJTeE5RVUZQVEN4SFFVRnZRaXhKUVVGTExGTkJRVlVzUlVGRE5VTXNRMEZCUlN4TlFVRlBTU3hIUVVGclFpeEpRVUZMTEU5QlFWRXNSVUZEZUVNc1EwRkJSU3hOUVVGUFJDeEhRVUZ6UWl4SlFVRkxMRmRCUVZrc1JVRkRhRVFzUTBGQlJTeE5RVUZQUml4SFFVRm5RaXhKUVVGTExFdEJRVTBzUlVGRGNFTXNRMEZCUlN4TlFVRlBReXhIUVVGcFFpeEpRVUZMTEZsQlFXRXNRMEZEYUVRc1JVRkhRU3hUUVVGVFpDeEhRVUY1UW5KQ0xFVkJRV3RETEVOQlEyaEZMRWxCUVVsMVF5eEZRVUU0UWl4RFFVRkRMRVZCUlc1RExFOUJRVk1zUTBGQlJTeE5RVUZCUXl4RlFVRlBMRWxCUVVFM1FpeERRVUZKTEVsQlFVc3lRaXhIUVVGbExFTkJRM1JETEVsQlFVMUhMRVZCUVZGRUxFVkJRVTBzUzBGQlMzaERMRU5CUVVrc1JVRkRlRUo1UXl4SFFVVk1SaXhGUVVGUkxFdEJRVXNzUTBGRFZDeEpRVUZCTlVJc1JVRkRRU3hOUVVGUE9FSXNSVUZCVFN4RFFVRkRMRVZCUTJRc1RVRkJUMEVzUlVGQlRTeE5RVU5pTEZkQlFWbEJMRVZCUVUwc1RVRkJVU3hGUVVNeFFpeEpRVUZMUVN4RlFVRk5MRTFCUVZGQkxFVkJRVTBzUTBGQlF5eEZRVUZGTEU5QlF6VkNMRk5CUVZVc2FVSkJRMlFzUTBGQlF5eERRVU5NTEVOQlJVRXNUMEZCVDBZc1EwRkRXQ3hEUjNwU1R5eEpRVUZWUnl4UFFVRldMRU5CUlVrc1UwRkJVME1zUlVGQlMwTXNSVUZCTmtJc1EwRkRPVU1zU1VGQlRVTXNSVUZCVlVNc1IwRkJVeXhWUVVGVlF5eERRVUZQTEVWQlF6RkRMRWRCUVVrc1EwRkJRMFlzUlVGQlV5eFBRVUZQTEV0QlJYSkNMRTlCUVZGQkxFVkJRVkVzUzBGQlRTeERRVU5zUWl4SlFVRkxMRk5CUTB3c1NVRkJTeXhWUVVOTUxFbEJRVXNzVDBGRFRDeEpRVUZMTEZOQlEwUXNUMEZCVDBFc1JVRkJVU3hOUVVOdVFpeEpRVUZMTEZGQlEwUXNUMEZCVDBFc1JVRkJVU3hOUVVGTkxFbEJRVWxHTEVOQlFVa3NSVUZEYWtNc1NVRkJTeXhQUVVORUxFOUJRVTlGTEVWQlFWRXNUVUZCVFN4TlFVRk5MRVZCUXk5Q0xFbEJRVXNzVjBGRFJDeFBRVUZQUVN4RlFVRlJMRTFCUVUwc1VVRkJVU3hGUVVOcVF5eEpRVUZMTEZkQlEwUXNUMEZCVHl4TFFVTllMRWxCUVVzc1QwRkRSQ3hQUVVGUFFTeEZRVUZSTEUxQlFVMHNVMEZCVXl4RlFVTnNReXhKUVVGTExGTkJRMFFzVDBGQlQwY3NSMEZCWjBKSUxFVkJRVkVzVFVGQlQwWXNRMEZCU1N4RFFVTnNSQ3hEUVVOS0xFTkJka0pQUkN4RlFVRlRMRXRCUVVGRExFVkJNRUpVTEZOQlFWTkpMRVZCUVZGSUxFVkJRVFpDTEVOQlEycEVMRWRCUVVsQkxFZEJRVk1zUzBGRFZDeFBRVUZQTEV0QlEwb3NSMEZCU1N4UFFVRlBRU3hIUVVGVkxGTkJRM2hDTEVkQlFVa3NUVUZCVFN4UlFVRlJRU3hEUVVGTExFVkJRVWNzUTBGRGRFSXNTVUZCU1Vzc1JVRkJVeXhEUVVGRExFVkJRMlFzVVVGQlUwTXNTMEZCVTA0c1JVRkRaRXNzUlVGQlR5eExRVUZMUml4RlFVRlJSeXhEUVVGTExFTkJRVU1zUlVGSE9VSXNUMEZCVDBRc1EwRkRXQ3hMUVVGUExFbEJRVWxNTEdGQlFXbENMRXRCUlhoQ0xFOUJSR2RDVHl4RlFVRlRMRmRCUVZkUUxFTkJRVXNzUlVGRmRFTXNRMEZEU0N4SlFVRkpVU3hGUVVGVFVpeEZRVU5VU3l4RlFVRnJReXhEUVVGRExFVkJRM1pETEZGQlFWTkpMRXRCUVU5RUxFVkJRMXBJTEVWQlFVOUpMRU5CUVVjc1JVRkJTVTRzUlVGQlVVc3NSVUZCVDBNc1EwRkJSeXhEUVVGRExFVkJSM0pETEU5QlFVOUtMRU5CUTFnc1RVRkRSeXhKUVVGSkxFOUJRVTlNTEVkQlFWVXNVMEZEZUVJc1QwRkJUMEVzUlVGRFNpeEhRVUZKTEU5QlFVOUJMRWRCUVZVc1ZVRkRlRUlzVDBGQlQwRXNSVUZEU2l4SFFVRkpMRTlCUVU5QkxFZEJRVlVzVTBGQlZTeERRVU5zUXl4SlFVRkpWU3hGUVVGWlF5eEZRVUZYTEV0QlFVc3NUVUZCVFZnc1EwRkJTeXhGUVVNelF5eEhRVUZKVlN4RlFVRlZMRTlCUVZFc1QwRkJUMEVzUlVGQlZTeE5RVVYyUXl4SlFVRkpSU3hGUVVGblFrUXNSVUZCVnl4VFFVRlRMRTFCUVUxWUxFTkJRVXNzUlVGRGJrUXNSMEZCU1Zrc1JVRkJZeXhQUVVGUkxFOUJRVTlCTEVWQlFXTXNUVUZGTDBNc1NVRkJTVU1zUlVGQldVWXNSVUZCVnl4TFFVRkxMRTFCUVUxWUxFTkJRVXNzUlVGRE0wTXNUMEZCU1dFc1JVRkJWU3hQUVVGbFFTeEZRVUZWTEUxQlJXaERZaXhEUVVOWUxFVkJSMEVzVDBGQlR5eEpRVU5ZTEVOQk1VTlBSaXhGUVVGVExGRkJRVUZMTEVsQk5VSklUQ3hSUVVGQkxFdFVZMnBDTEVsQlFVMW5RaXhIUVVGclFpeG5Ra0ZGYkVKRExFZEJRWGRDTEhOQ1FVVjRRa01zUjBGQmEwSXNlVVJCVFdwQ0xGTkJRVk5ETEVkQlExcERMRVZCUTBGRExFVkJRMEZETEVWQlEwRkRMRVZCUTJkQ0xFTkJRMmhDTEVkQlFVMHNRMEZCUlN4TlFVRkJReXhGUVVGUExGTkJRVlZETEVWQlFXTXNXVUZCUVVNc1JVRkJZU3hUUVVGQlF5eERRVUZUTEVWQlFVbERMRWRCUVhGQ1VpeEZRVUZOUXl4RlFVRlZReXhEUVVGUkxFVkJSemxITEU5QlJtRXNTVUZCU1U4c1IwRkJVMVFzUlVGQlRVY3NSVUZCVDBNc1JVRkJUU3hQUVVGUlF5eEZRVUZqUlN4RlFVRlZSQ3hEUVVGWExFVkJSVFZGTEUxQlFVMHNRMEZEZEVJc1EwRkhUeXhUUVVGVFJTeEhRVU5hVWl4RlFVTkJReXhGUVVOQlF5eEZRVTFHTEVOQk4wUkdMRWxCUVVGUkxFVkJRVUZETEVWQlFVRkRMRVZCUVVGRExFVkJRVUZETEVWQlFVRkRMRVZCUVVGRExFVkJRVUZETEVWQlFVRkRMRVZCUVVGRExFVkJRVUZETEVWQlFVRkRMRVZCUVVGRExFVkJRVUZETEVWQlFVRkRMRWRCUVVGRExFZEJPRVJKTEVsQlFVMXVRaXhGUVVGblJVb3NSVUZCVXl4WlFVTjZSWGRDTEVkQlFYTkNlRUlzUlVGQlV5eFhRVUZYTEVWQlF6RkRMRTlCUTBGRkxFVkJRVkZJTEVWQlFWTXNUVUZCVFN4WlFVRlpMRVZCUTI1RE1FSXNSVUZCYlVJc1NVRkJTVU1zUjBGRGRrSkRMRVZCUVRoQ0xFTkJRVU1zUlVGTEwwSkRMRWRCUVdWd1FpeEZRVUZCVWl4RlFVRlRMRmRCUVZRc1MwRkJRVkVzUlVGQmNVSXNRMEZCUXl4RlFVTXpRMjlDTEVWQlFXRXNTMEZCU3l4RFFVRkRReXhGUVVGSFF5eEpRVUZOUkN4RlFVRkZMRk5CUVZNc1RVRkJUU3hMUVVGUFF5eEZRVUZGTEZOQlFWTXNUVUZCVFN4SlFVRkpMRVZCUlhwRkxFbEJRVTE2UWl4RlFVRlhMRWxCUVVrc1IwRkJRVEJDTEZGQlFUSkNMRTlCUVZjc1EwRkJRMFlzUlVGQlIwTXNTVUZCVFVRc1JVRkJTVU1zUTBGQlF5eEZRVU14UlN4UlFVRlRSU3hGUVVGUkxFVkJRVWRCTEVWQlFWRktMRVZCUVdFc1QwRkJVVWtzU1VGQlV5eERRVU4wUkN4SlFVRk5ReXhGUVVGUlRDeEZRVUZoU1N4RFFVRkxMRVZCUXpGQ1JTeEZRVUZSUkN4RlFVRk5MRk5CUVZNc1RVRkJUU3hMUVVNM1FrVXNSMEZCVFVnc1IwRkJVMG9zUlVGQllTeFBRVUZUTEVWQlFVa3hRaXhGUVVGTkxFOUJRVk13UWl4RlFVRmhTU3hGUVVGUkxFTkJRVU1zUlVGQlJTeFRRVUZUTEUxQlFVMHNTMEZGTDBaSkxFZEJRVlVzU1VGQlNVTXNSMEZCV1Vnc1JVRkJUME1zUjBGQlMwWXNSVUZCVFN4UlFVRlRRU3hGUVVGTkxFMUJRVTlFTEVWQlFWRXNRMEZCUXl4RlFVTnFSak5DTEVWQlFWTXNTVUZCU1RaQ0xFVkJRVTlGTEVWQlFVOHNRMEZETDBJc1EwRkpRU3hIUVVGSkwwSXNSVUZCVXl4TlFVRlJMRWRCUTJwQ0xFZEJRVWtzUTBGQlEybERMRWRCUVZkd1F5eEZRVUZQTEVWQlFVZEJMRVZCUVUwc1RVRkJUU3hGUVVGSExFTkJRM0pETEVsQlFVMXJReXhGUVVGVkxFbEJRVWxETEVkQlFWa3NSVUZCUjI1RExFVkJRVTBzVDBGQlVYRkRMRWRCUVdGNlF5eERRVUZKTEVWQlFVY3NSVUZCUnl4RFFVRkRMRVZCUTNwRlR5eEZRVUZUTEVsQlFVa3NSVUZCUnl0Q0xFTkJRVThzUTBGRE0wSXNUVUZEUnl4RFFVVklMRWxCUVUxSkxFZEJRVkV2UWl4RlFVRkJTaXhGUVVGVExHOUNRVUZ2UWl4RFFVRkRMRWxCUVRsQ0xGbEJRVUZKTEVWQlFXdERMRWRCUldoRUxFZEJRVWtyUWl4RlFVRk5MRTFCUVZFc1IwRkJTeXhEUVVGRFJpeEhRVUZYY0VNc1JVRkJUeXhGUVVGSGMwTXNSVUZCVFN4TFFVRkxMRVZCUVVjc1EwRkRka1FzU1VGQlRVb3NSVUZCVlN4SlFVRkpReXhIUVVGWkxFVkJRVWRITEVWQlFVMHNUVUZCVDBRc1IwRkJZWHBETEVOQlFVa3NSVUZCUnl4RlFVRkhMRU5CUVVNc1JVRkZlRVZQTEVWQlFWTXNTVUZCU1N4RlFVRkhLMElzUTBGQlR5eERRVU16UWl4RFFVTktMRU5CVVVFc1NVRkJUVXNzUlVGQlV5eEpRVUZKTEVkQlFVRldMRkZCUVhsQ0xFOUJRVmNzUTBGQlEwWXNSVUZCUjBNc1NVRkJUVVFzUlVGQlNVTXNRMEZCUXl4RlFVTnNSVmtzUlVGQlpTeEZRVU51UWl4UlFVRlhReXhMUVVGVE0wTXNSVUZCVXl4VlFVRlpMRU5CUVVNc1JVRkJSeXhEUVVWNlF5eEhRVUZKTWtNc1JVRkJUU3hQUVVGVExGVkJRVmNzVTBGRk9VSXNTVUZCVFZRc1JVRkJVVk1zUlVGQlRTeFRRVUZUTEUxQlFVMHNTMEZETjBKU0xFVkJRVTFSTEVWQlFVMHNVMEZCVXl4SlFVRkpMRXRCUVU4c1JVRkRhRU5ETEVkQlFWa3hReXhGUVVGTlowTXNRMEZCU3l4RlFVVTNRaXhIUVVGSlV5eEZRVUZOTEU5QlFWTXNUMEZEWmtZc1JVRkJUeXhKUVVGSlVDeEZRVUZQTEVsQlFVbFhMRWRCUVdOWUxFVkJRVTlETEVWQlFVdFBMRWxCUVdkQ1F5eEZRVUZOTEVWQlFVVXNRMEZCUXl4VlFVTnNSVUVzUlVGQlRTeE5RVUZSTEZGQlFWVnFSQ3hIUVVGblFpeExRVUZMYTBRc1JVRkJVeXhGUVVGSExFTkJRMmhGTEVsQlFVMUZMRWRCUVdVMVF5eEZRVU5vUWl4TlFVRk5aME1zUlVGQlVTeEZRVUZIUXl4RlFVRk5MRU5CUVVNc1JVRkRlRUlzUzBGQlN6dEJRVUZCTEVOQlFVa3NSVUZEVkN4UlFVRlJMRTlCUVZFc1NVRkJTU3hGUVVOdVFsa3NSMEZCT0VOMlFpeEhRVUZ6UW5kQ0xFZEJRVlZHTEVWQlFVa3NRMEZCUXl4RlFVVjZSa3dzUlVGQlR5eEpRVUZKVUN4RlFVRlBMRWxCUVVsbExFZEJRV05tTEVWQlFVOURMRVZCUVV0UExFbEJRV2RDU3l4SFFVRlBTaXhGUVVGTkxFVkJRVVVzUTBGQlF5eERRVU53Uml4VFFVRlhRU3hGUVVGTkxFOUJRVk1zVDBGQlVTeERRVVU1UWl4SlFVRk5UeXhIUVVGUlRpeEhRVUZWTEUxQlFVMXFSQ3hGUVVGeFFpeEZRVU51UkN4SFFVRkpMRU5CUVVOMVJDeEhRVVZFVkN4RlFVRlBMRWxCUVVsUUxFVkJRVThzU1VGQlNXbENMRWRCUVdOcVFpeEZRVUZQUXl4RlFVRkxUeXhKUVVGblFpeERRVUZETEVWQlFVY3NVMEZCVlZJc1JVRkJUME1zUlVGQlMxRXNSVUZCVFN4RlFVRkZMRU5CUVVNc1RVRkRhRWNzUTBGRFNDeEpRVUZOVXl4SFFVRlpSaXhIUVVGTkxFOUJRVk1zUjBGQlMwRXNSMEZCVFN4RFFVRkRMRVZCUVVsQkxFZEJRVTBzUTBGQlF5eEZRVUZGTEUxQlFVMHNSMEZCUnl4RlFVRkpMRU5CUVVNc1JVRkRlRVZVTEVWQlFVOHNTVUZEU0ZBc1JVRkRRU3hKUVVGSmFVSXNSMEZCWTJwQ0xFVkJRVTlETEVWQlFVdFBMRWxCUVdkQ1ZTeEhRVUZYTEZOQlFWVnNRaXhGUVVGUkxFVkJRVWRETEVWQlFVMHNSVUZCUjFFc1JVRkJUU3hGUVVGRkxFTkJRMjVITEVOQlEwb3NRMEZEU2l4TlFVTkpSaXhGUVVGUExFbEJRVWxRTEVWQlFVOHNTVUZCU1cxQ0xFZEJRV051UWl4RlFVRlBReXhGUVVGTFR5eEpRVUZuUWtNc1JVRkJUU3hMUVVGTlFTeEZRVUZOTEVWQlFVVXNRMEZCUXl4RFFVVTNSaXhEUVVkQkxGRkJRVmRCTEV0QlFWTkdMRVZCUVU4c1QwRkJUeXhIUVVNNVFpOUNMRVZCUVVFMFF5eEhRVUZQV0N4RlFVRk5MRTFCUVU5MFF5eERRVUZSTEVsQlFUVkNMRTFCUVVGTExFVkJRU3RDTEUxQlFVMXBReXhIUVZGNlF5eEpRVUZOV1N4RlFVRmxMR2xEUVVObVF5eEZRVUZqTEhGQ1FVTmtReXhGUVVGWkxFbEJRVWtzUjBGQlFURkNMRkZCUVRSQ0xFOUJRVmNzUTBGQlEwWXNSVUZCUjBNc1NVRkJUVVFzUlVGQlNVTXNRMEZCUXl4RlFVVTFSU3hSUVVGWE5FSXNTMEZCVVRGRUxFVkJRVk1zVjBGQllTeERRVUZETEVWQlFVY3NRMEZKZWtNc1NVRkJUV3RFTEVWQlNFOW9SQ3hGUVVGTmQwUXNSVUZCU3l4VFFVRlRMRTFCUVUwc1NVRkJTU3hGUVVkNFFpeE5RVUZOT1VRc1JVRkJaU3hGUVVOd1F5dEVMRWRCUTBGRExFZEJRMEZXTEVsQlEwRlRMRWRCUVZOVUxFVkJRVTBzUTBGQlF5eEZRVU5vUWxVc1IwRkJUMVlzUlVGQlRTeERRVUZETEVkQlIyeENMRWxCUVUxWExFZEJRVThzU1VGQlNVTXNSMEZEWWtvc1JVRkJTeXhUUVVGVExFMUJRVTBzUzBGRGNFSkJMRVZCUVVzc1UwRkJVeXhKUVVGSkxFdEJRVThzUlVGRGVrSkJMRVZCUVVzc1QwRkRURU1zUjBGRFFVUXNSVUZCU3l4SFFVTk1RU3hGUVVGTExFdEJRMHhGTEVWQlEwb3NSVUZEUVVnc1JVRkJWU3hKUVVGSlNTeEhRVUZMTEUxQlFVOUJMRVZCUVVrc1EwRkRiRU1zUTBGSFFTeFJRVUZYUVN4TFFVRlJTaXhGUVVGVkxFOUJRVThzUlVGRGFFTXNSMEZCU1Vrc1JVRkJTeXhYUVVGaExFVkJRVWNzUTBGRGNrSXNTVUZCVFVVc1JVRkJXWFJDTEVWQlFVOHNTVUZCU1N4RFFVRkRiMElzUlVGQlN5eFZRVUZWTEVWQlF6ZERMRWRCUVVrc1EwRkJRMFVzUjBGQlpVRXNSVUZCVlN4UFFVRlRMRTlCUVZNc1UwRkZMME5CTEVWQlFUUkNMRTFCUVUwc1MwRkJTMFlzUTBGQlNTeERRVU5vUkN4TlFVTkpiRVFzUlVGQlFUaERMRVZCUVZVc1NVRkJTVWtzUlVGQlN5eFZRVUZWTEVsQlFUZENMRTFCUVVGc1JDeEZRVUZuUXl4VFFVRlRMRXRCUVV0clJDeEhRVk4wUkN4UlFVRlhSeXhMUVVGVmNFUXNSVUZCUVZvc1JVRkJVeXhQUVVGVUxFdEJRVUZaTEVWQlFXbENMRU5CUVVNc1JVRkJSeXhEUVVOMFF5eEpRVUZOY1VRc1JVRkJUVVFzUlVGQlR5eEpRVUZKTEZkQlFWY3NSMEZCUnl4RlFVRkpRU3hGUVVGUExFbEJRVTBzU1VGQlRVRXNSVUZCVHl4SlFVTTNSRVVzUlVGQlQwWXNSVUZCVHl4VFFVRlRMRTFCUVUwc1MwRkRia04yUXl4RlFVRnBRaXhKUVVGSmQwTXNRMEZCUnl4SFFVVjRRbkJFTEVWQlFVRjVReXhIUVVGUFdTeEZRVUZOTjBRc1EwRkJVU3hKUVVGeVFpeE5RVUZCVVN4RlFVRjNRaXhUUVVGVExFbEJRVWx2UkN4SlFVTnlRMjVFTEVWQlFVRjNReXhIUVVGUFdTeEZRVUZOZWtJc1EwRkJUU3hKUVVGdVFpeE5RVUZCTTBJc1JVRkJjMElzVTBGQlV5eEpRVUZKYlVRc1NVRkRia05zUkN4RlFVRkJkVU1zUjBGQlQxa3NSVUZCVFZRc1EwRkJVeXhKUVVGMFFpeE5RVUZCTVVNc1JVRkJlVUlzVTBGQlV5eEpRVUZKYTBRc1JVRkRNVU1zUTBGSFFTeEhRVUZKYWtVc1JVRkJVeXhaUVVOVUxGRkJRVmR0UlN4TFFVRlZReXhIUVVGWmNFVXNSVUZCVXl4WFFVRlhMRVZCUVVjc1EwRkRjRVFzU1VGQlRXbEZMRVZCUVUxRkxFVkJRVThzVjBGQlZ5eEhRVUZITEVWQlFVbEJMRVZCUVZNc1NVRkJUVUVzUlVGRGNFUXhReXhGUVVGcFFpeEpRVUZKZDBNc1EwRkJSeXhEUVVNMVFpeERRVTlLTEZGQlFWTkpMRXRCUVZkeVJDeEZRVUZCYUVJc1JVRkJVeXhSUVVGVUxFdEJRVUZuUWl4RlFVRnJRaXhEUVVGRExFVkJRVWNzUTBGRGRFTXNTVUZCVFhORUxFVkJRVTlETEVkQlFVc3NUVUZCVFVZc1JVRkJVU3hKUVVGSkxFVkJRemxDU0N4RlFVRlBSeXhGUVVGUkxGTkJRVk1zVFVGQlRTeExRVU53UXpWRExFVkJRV2xDTEV0QlFVczJReXhEUVVGSkxFZEJSVEZDY2tRc1JVRkJRWEZETEVkQlFVOVpMRVZCUVUwM1JDeERRVUZSTEVsQlFYSkNMRTFCUVVGWkxFVkJRWGRDTEZOQlFWTXNTMEZCUzNGRUxFbEJRM1JEY0VRc1JVRkJRVzlETEVkQlFVOVpMRVZCUVUxNlFpeERRVUZOTEVsQlFXNUNMRTFCUVVGMlFpeEZRVUZ6UWl4VFFVRlRMRXRCUVV0dlJDeEpRVU53UTI1RUxFVkJRVUZ0UXl4SFFVRlBXU3hGUVVGTlZDeERRVUZUTEVsQlFYUkNMRTFCUVVGMFF5eEZRVUY1UWl4VFFVRlRMRXRCUVV0dFJDeEZRVU16UXl4RFFVOUJMRkZCUVZkRUxFdEJRVmRxUkN4RlFVRkJjRUlzUlVGQlV5eHRRa0ZCVkN4TFFVRkJiMElzUlVGQk5rSXNRMEZCUXl4RlFVTm9SRXNzUlVGQmFVSXNTMEZCU3poRExFZEJRVXNzVFVGQlRVWXNSVUZCVVN4TFFVRk5MRWRCUVU5QkxFVkJRVkVzVjBGQlZ5eERRVUZETEVWQlR6bEZMRkZCUVZkSExFdEJRVk5ETEVkQlFXOUNka1VzUTBGQlN5eEZRVUZITEVOQlF6VkRMRWxCUVUxblJTeEZRVUZQVFN4RlFVRk5MRk5CUVZNc1MwRkROVUl2UXl4RlFVRnBRaXhaUVVGWkswTXNRMEZCU3l4SFFVVnNRMjVFTEVWQlFVRnBReXhIUVVGUFdTeEZRVUZOTjBRc1EwRkJVU3hKUVVGeVFpeE5RVUZCWjBJc1JVRkJkMElzVTBGQlV5eFpRVUZaYlVRc1NVRkROME5zUkN4SFFVRkJaME1zUjBGQlQxa3NSVUZCVFhwQ0xFTkJRVTBzU1VGQmJrSXNUVUZCUVc1Q0xFZEJRWE5DTEZOQlFWTXNXVUZCV1d0RUxFbEJRek5EYWtRc1IwRkJRU3RDTEVkQlFVOVpMRVZCUVUxVUxFTkJRVk1zU1VGQmRFSXNUVUZCUVd4RExFZEJRWGxDTEZOQlFWTXNXVUZCV1dsRUxFVkJRMnhFTEVOQlEwRXNUMEZCUVRkRExFVkJRV0VzUzBGQlN5eEhRVUZIZEVJc1JVRkJVeXhQUVVGUExFTkJRVU1zUlVGREwwSXNRMEZEU0N4TlFVRkJTQ3hGUVVOQkxGbEJRVUZGTEVWQlEwRXNVMEZCVlhGQ0xFVkJRMVlzVTBGQlZVVXNRMEZEWkN4RFFVTktMRU5CVFVFc1UwRkJVMWNzUjBGQlYzQkRMRVZCUVdsQ1owTXNSVUZCWlVNc1JVRkJjMElzUTBGRGRFVXNVVUZCVTBnc1JVRkJVVVVzUlVGQlQwWXNSVUZCVVVjc1JVRkJTMGdzU1VGRGFrTXNSMEZCU1RsQ0xFVkJRVTA0UWl4RFFVRkxMRVZCUVVVc1MwRkJTeXhKUVVGTkxFZEJRVWtzVFVGQlR5eEhRVWN6UXl4TlFVRlBMRVZCUTFnc1EwRk5UeXhUUVVGVmVVTXNSMEZCYjBKRExFVkJRVEpETEVOQlF6VkZMRkZCUVZORExFVkJRVk1zUlVGQlIwRXNSVUZCVTBRc1JVRkJVU3hQUVVGUlF5eEpRVUZWTEVOQlEzQkVMRWxCUVUxVUxFVkJRVTlSTEVWQlFWRkRMRU5CUVUwc1JVRkhNMElzUjBGQlNWUXNSVUZCU3l4UFFVRlRMRTlCUVZNc1EwRkJRMEVzUlVGQlN5eFRRVUZUTEVsQlFVa3NSVUZCUnl4VFFVZHFSQ3hKUVVGSlZTeEZRVUZsUXl4SFFVRnZRbGdzUTBGQlNTeEZRVU16UXl4SFFVRkpWU3hGUVVGaExFOUJRVk1zUlVGRGRFSXNVVUZCVTBVc1MwRkJWVVlzUlVGQll5eE5RVUZOUnl4SFFVRmpSQ3hGUVVGUlNDeERRVUZOTEUxQlEyaEZMRU5CUTBnc1NVRkJTVXNzUlVGQlYwTXNSMEZCY1VKbUxFTkJRVWtzUlVGRGNFTmpMRWxCUVZVc1RVRkJUVVFzUjBGQlkwTXNSVUZCVlV3c1EwRkJUU3hGUVVOMFJDeERRVU5LTEVOQlEwb3NRMEZIVHl4VFFVRlRia1FzUjBGQmMwSnRRaXhGUVVGclJTeERRVU53Unl4SlFVRk5kVU1zUlVGQkswTXNRMEZCUXl4RlFVTjBSQ3hSUVVGWFF5eExRVUZQTEU5QlFVOHNTMEZCUzNoRExFTkJRVXNzUlVGQlJ5eERRVU5zUXl4SlFVRk5lVU1zUlVGQlVYcERMRVZCUVUxM1F5eERRVUZITEVWQlJYWkNSQ3hGUVVGUFF5eEZRVUZKTEZsQlFWa3NRMEZCUXl4RlFVRkpMRU5CUTNoQ0xFbEJRVXRCTEVWQlEwd3NUVUZCVDBVc1IwRkJaU3hMUVVGTFF5eEhRVUZsTEZGQlFWRkdMRU5CUVVzc1EwRkJReXhGUVVONFJDeEpRVUZMUVN4RFFVTlVMRU5CUTBvc1EwRkZRU3hQUVVGUFJpeERRVU5ZTEVOQlIwOHNVMEZCVXpWQ0xFZEJRV2xFV1N4RlFVRmpjVUlzUlVGQmRVTXNRMEV6VkhSSUxFbEJRVUV2UlN4RlFUUlVTU3hKUVVGTlowWXNSMEZCVTJoR0xFVkJRVUVyUlN4RlFVRkxMRzFDUVVGdFFuSkNMRU5CUVVrc1NVRkJOVUlzV1VGQlFURkVMRVZCUVdkRExFZEJReTlETEVkQlFVbG5SaXhIUVVGVlFTeEZRVUZQTEV0QlFVOTBRaXhGUVVGTkxFOUJRVTl6UWl4RFFVYzNReXhEUVVkUExGTkJRVk53UWl4SFFVRlpjRVVzUlVGQmMwTXNRMEZIT1VRc1QwRkdZeXhQUVVGUExFdEJRVXRCTEVOQlFWRXNSVUZCUlN4UFFVRlJMRWRCUVUwc1JVRkJSU3haUVVGWkxFZEJRVXNzVVVGQlZTeEZRVUZGTEZsQlFWa3NSMEZCU3l4TFFVRkxMRVZCUjJ4SExFbEJRVXQ1Uml4SFFVRk5ReXhIUVVFeVFqRkdMRVZCUVZONVJpeERRVUZETEVWQlFVY3NVVUZCVVN4RFFVRkRMRVZCUXpWRUxFOUJRVThzUTBGQlEwVXNSVUZCUjBNc1NVRkJUVVFzUlVGQlJTeFBRVUZQUXl4RFFVRkRMRVZCUVVjc1EwRkJReXhEUVVGRExFVkJRMmhETEVsQlFVdERMRWRCUVZOQkxFVkJRVWtzVjBGQlZ5eEhRVUZITEVWQlFVbEJMRVZCUVUwc1NVRkJUVUVzUTBGQlNTeERRVU0zUkN4RFFVZFBMRk5CUVZOSUxFZEJRVEpDU1N4RlFVRlhReXhGUVVGelFpeERRVU40UlN4UFFVRkpSQ3hIUVVGUkxFMUJRVkZCTEVkQlFWRXNTMEZCYTBJc1EwRkJReXhGUVVNelF5eE5RVUZOTEZGQlFWRkJMRU5CUVVrc1JVRkRXRUVzUlVGRFJpeFBRVUZSUlN4SFFVRk5MRU5CUVVNc1EwRkJRMEVzUTBGQlF5eEZRVU5xUWl4SlFVRkxRU3hIUVVGTlRpeEhRVUV5UWswc1JVRkJSMFFzUTBGQlJTeERRVUZETEVWQlF6VkRMRTlCUVU4c1EwRkJRMG9zUlVGQlIwTXNTVUZCVFVRc1JVRkJSU3hQUVVGUFF5eERRVUZETEVWQlFVY3NRMEZCUXl4RFFVRkRMRWRCU1dwRExFZEJRVXRGTEVkQlExSXNUVUZCVFVNc1EwRkJSU3hGUVVOU0xFOUJRVkVzUjBGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVTnFRaXhKUVVGTExFZEJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNSVUZEYmtJc1QwRkJVU3hIUVVGTkxFVkJRVVVzVDBGQlV5eERRVUZETEVOQlEyNURMRU5CVDA4c1NVRkJUWEpGTEVkQlFVNHNTMEZCWlN4RFFVRm1MR05CUTBnc1MwRkJUeXhMUVVGdlFpeEpRVUZKTEVsQlF5OUNMRXRCUVU4c1RVRkJaMElzUTBGQlF5eEZRVU40UWl4TFFVRlBMR0ZCUVRSRExFTkJRVU1zUlVGSE4wTXNTVUZCU1hWRExFVkJRV0VzUTBGRGNFSXNTMEZCU3l4TFFVRkxMRWxCUVVsQkxFTkJRVWNzUTBGRGNrSXNRMEZIVHl4TFFVRkxTeXhGUVVGWkxFTkJRMmhDTEV0QlFVc3NUVUZCVFN4TFFVRk5Na0lzUjBGQlRVRXNSVUZCUlN4UFFVRlBNMElzUTBGQlNTeERRVUZETEVkQlEzcERMRXRCUVVzc1RVRkJUU3hMUVVGTFFTeERRVUZKTEVOQlEzaENMRU5CUjA4c1dVRkJXVVVzUlVGQmIwSXNRMEZEYmtNc1NVRkJUVEJDTEVWQlFWRXhRaXhGUVVGTkxFbEJRVWtzV1VGQldTeEZRVU5vUXl4UFFVRlBMRXRCUVVzc1MwRkJTeXhaUVVGWkxFVkJRVVVzUzBGQlRWY3NSMEZCVVVFc1JVRkJTU3haUVVGWkxFZEJRVXRsTEVOQlFVc3NTVUZGTTBVc1MwRkJTeXhoUVVGaFFTeERRVUZMTEVWQlFVa3hRaXhGUVVNdlFpeERRVWRQTEZsQlFYVkNMRU5CUXpGQ0xFOUJRVThzVFVGQlRTeExRVUZMTEV0QlFVc3NTVUZCU1N4RFFVTXZRaXhEUVVkUExHRkJRVEJDTEVOQlF6ZENMRTlCUVU4c1MwRkJTeXhOUVVGTkxFbEJRVXRHTEVkQlFWTkJMRVZCUVVzc1UwRkJVeXhEUVVGRExFTkJRMjVFTEVOQlIwOHNiMEpCUVhORUxFTkJRM3BFTEU5QlFVODJRaXhIUVVGblFpeExRVUZMTEdGQlFXTkRMRVZCUVdVc1EwRkROMFFzUTBGRFNpeEZRVWRoTjBZc1IwRkJUaXhMUVVGbExFTkJRMWdzV1VGRFNWUXNSVUZEUVVjc1JVRkRRVzlITEVWQlEwRnlSeXhGUVVOQlN5eEZRVU5CUkN4RlFVTlVMRU5CVGxNc1ZVRkJRVTRzUlVGRFFTeFhRVUZCUnl4RlFVTkJMRmxCUVVGdlJ5eEZRVU5CTEdOQlFVRnlSeXhGUVVOQkxHTkJRVUZMTEVWQlEwRXNhVUpCUVVGRUxFTkJRMUlzUTBGRlNTeFBRVUV3UWl4RFFVTTNRaXhOUVVGUExFTkJRMGdzVFVGQlR5eExRVUZMTEV0QlExb3NUMEZCVVN4TFFVRkxMRTFCUVUwc1RVRkRia0lzVDBGQlVTeExRVUZMTEUxQlFVMHNUVUZEYmtJc1RVRkJUeXhMUVVGTExFMUJRVTBzUzBGRGJFSXNWMEZCV1d0SExFZEJRV0VzUzBGQlN5eEpRVUZKTEVWQlEyeERMRlZCUVZjc1EwRkJSU3hOUVVGUExFVkJRVWNzU1VGQlN5eExRVUZMTEUxQlFVOHNSVUZEZUVNc1RVRkJUeXhMUVVGTExGTkJRVk1zVjBGQlZ5eEZRVU5vUXl4UFFVRlJMRXRCUVVzc1UwRkJVeXhaUVVGWkxFVkJRMnhETEZWQlFWY3NTMEZCU3l4VFFVRlRMRzFDUVVGdFFpeEZRVU0xUXl4VlFVRlhMRXRCUVVzc1UwRkJVeXhKUVVGTFF5eEhRVUZOUVN4RlFVRkZMRTFCUVUwc1EwRkJReXhGUVVNM1F5eGhRVUZqTEV0QlFVc3NWMEZEZGtJc1EwRkRTaXhEUVVOS0xFVkJSMkZzUlN4SFFVRk9MRXRCUVd0Q0xFTkJTV1FzV1VGRFNVZ3NSVUZEUVVNc1JVRkRRWEZGTEVWQlEwRkRMRVZCUTBGRExFVkJRMVFzUTBGTVV5eFhRVUZCZUVVc1JVRkRRU3hUUVVGQlF5eEZRVU5CTEZkQlFVRnhSU3hGUVVOQkxGZEJRVUZETEVWQlEwRXNZVUZCUVVNc1JVRlNXQ3hMUVVGUExFOUJRWE5DTEVOQlFVTXNSVUZET1VJc1MwRkJUeXhUUVVGeFFpeEpRVUZKYUVZc1JVRlJOMElzUTBGRlNTeE5RVUZOYVVJc1JVRkJhMElzUTBGRE0wSXNTMEZCU3l4UFFVRlBMRXRCUVV0QkxFTkJRVXNzUTBGRE1VSXNRMEZGVHl4UFFVRTJRaXhEUVVOb1F5eE5RVUZQTEVOQlEwZ3NUMEZCVVN4TFFVRkxMRTFCUTJJc1UwRkJWU3hMUVVGTExGRkJRMllzVDBGQlVTeExRVUZMTEUxQlEySXNUVUZCVHl4TFFVRkxMRk5CUVZNc1YwRkJWeXhGUVVOb1F5eFZRVUZYTEV0QlFVc3NVMEZCVXl4dFFrRkJiVUlzUlVGRE5VTXNUMEZCVVN4TFFVRkxMRk5CUVZNc1dVRkJXU3hGUVVOc1F5eFZRVUZYTEVOQlFVVXNUVUZCVHl4TFFVRkxMRTFCUVU4c1NVRkJTeXhMUVVGTExFZEJRVWtzUlVGRE9VTXNVVUZCVXl4TFFVRkxMRTlCUVU4c1NVRkJTMEVzUjBGQlZVRXNSVUZCVFN4TlFVRk5MRU5CUVVNc1EwRkRja1FzUTBGRFNpeERRVU5LTEVWQlIyRkZMRWRCUVU0c1MwRkJiMElzUTBGTGFFSXNXVUZCYlVKWUxFVkJRWE5DUXl4RlFVRnZRblZGTEVWQlFYZENReXhGUVVGclFpeERRVUZ3Uml4WFFVRkJla1VzUlVGQmMwSXNVMEZCUVVNc1JVRkJiMElzWVVGQlFYVkZMRVZCUVhkQ0xHRkJRVUZETEVWQlNqVkdMRXRCUVU4c1MwRkJaU3hQUVVOMFFpeExRVUZQTEZOQlFYRkNMRWxCUVVscVJpeEhRVU5vUXl4TFFVRlBMRTFCUVhkQ0xFTkJRVU1zUTBGRkswVXNRMEZGZUVjc1QwRkJLMElzUTBGRGJFTXNUVUZCVHl4RFFVTklMRk5CUVZVc1MwRkJTeXhSUVVObUxGVkJRVmNzUTBGQlJTeE5RVUZQTEV0QlFVc3NUVUZCVHl4SlFVRkxMRXRCUVVzc1IwRkJTU3hGUVVNNVF5eFZRVUZYTEV0QlFVc3NVMEZCVXl4dFFrRkJiVUlzUlVGRE5VTXNUVUZCVHl4TFFVRkxMRk5CUVZNc1YwRkJWeXhGUVVOb1F5eFBRVUZSTEV0QlFVc3NVMEZCVXl4WlFVRlpMRVZCUTJ4RExFMUJRVThzVDBGRFVDeFRRVUZWTEV0QlFVc3NVVUZEWml4VlFVRlhMRXRCUVVzc1RVRkJUU3hKUVVGTGJVTXNSMEZCVTBFc1JVRkJTeXhOUVVGTkxFTkJRVU1zUTBGRGNFUXNRMEZEU2l4RFFVTktMRVZCUjJGV0xFZEJRVTRzUzBGQmIwSXNRMEZKYUVJc1dVRkRTV3BDTEVWQlEwRkRMRVZCUTBGMVJTeEZRVU5CZEVRc1JVRkRRWGRFTEVWQlEwRkRMRVZCUTBGRExFVkJRMEZJTEVWQlExUXNRMEZTVXl4WFFVRkJla1VzUlVGRFFTeFRRVUZCUXl4RlFVTkJMR0ZCUVVGMVJTeEZRVU5CTEdWQlFVRjBSQ3hGUVVOQkxGZEJRVUYzUkN4RlFVTkJMR3RDUVVGQlF5eEZRVU5CTEdkQ1FVRkJReXhGUVVOQkxHRkJRVUZJTEVWQldGZ3NTMEZCVHl4TFFVRmxMRmxCUTNSQ0xFdEJRVThzVTBGQmNVSXNTVUZCU1dwR0xFVkJWemRDTEVOQlJVa3NUMEZCSzBJc1EwRkRiRU1zVFVGQlR5eERRVU5JTEUxQlFVOHNXVUZEVUN4VFFVRlZMRXRCUVVzc1VVRkRaaXhWUVVGWExFTkJRVVVzVFVGQlR5eExRVUZMTEUxQlFVOHNTVUZCU3l4TFFVRkxMRWRCUVVrc1JVRkRPVU1zVlVGQlZ5eExRVUZMTEZOQlFWTXNiVUpCUVcxQ0xFVkJRelZETEUxQlFVOHNTMEZCU3l4VFFVRlRMRmRCUVZjc1JVRkRhRU1zVDBGQlVTeExRVUZMTEZOQlFWTXNXVUZCV1N4RlFVTnNReXhUUVVGVkxFdEJRVXNzVVVGRFppeFhRVUZaTEV0QlFVc3NWVUZEYWtJc1QwRkJVU3hMUVVGTExFMUJRMklzYVVKQlFXdENMRU5CUVVVc1RVRkJUeXhMUVVGTExHRkJRV01zU1VGQlN5eExRVUZMTEZWQlFWY3NRMEZEZGtVc1EwRkRTaXhEUVVOS0xFVkJSMkYxUWl4SFFVRk9MRXRCUVc5Q0xFTkJTV2hDTEZsQlEwbG1MRVZCUTBGRExFVkJRMEYxUlN4RlFVTkJXaXhGUVVOQllTeEZRVU5VTEVOQlRGTXNWMEZCUVhwRkxFVkJRMEVzVTBGQlFVTXNSVUZEUVN4aFFVRkJkVVVzUlVGRFFTeFZRVUZCV2l4RlFVTkJMR0ZCUVVGaExFVkJVbGdzUzBGQlR5eExRVUZsTEZsQlEzUkNMRXRCUVU4c1UwRkJjVUlzU1VGQlNXcEdMRVZCVVRkQ0xFTkJSVWtzVDBGQkswSXNRMEZEYkVNc1RVRkJUeXhEUVVOSUxFMUJRVThzV1VGRFVDeFRRVUZWTEV0QlFVc3NVVUZEWml4VlFVRlhMRU5CUVVVc1RVRkJUeXhMUVVGTExFMUJRVThzU1VGQlN5eExRVUZMTEVkQlFVa3NSVUZET1VNc1ZVRkJWeXhMUVVGTExGTkJRVk1zYlVKQlFXMUNMRVZCUXpWRExFMUJRVThzUzBGQlN5eFRRVUZUTEZkQlFWY3NSVUZEYUVNc1QwRkJVU3hMUVVGTExGTkJRVk1zV1VGQldTeEZRVU5zUXl4VFFVRlZMRXRCUVVzc1VVRkRaaXhOUVVGUExFdEJRVXNzU1VGRGFFSXNRMEZEU2l4RFFVTktMRVZCUjJFeVFpeEhRVUZPTEV0QlFXOUNMRU5CUjJoQ0xGbEJRMGx1UWl4RlFVTkJReXhGUVVOQmRVVXNSVUZEUVVzc1JVRkRRVW9zUlVGRFZDeERRVXhUTEZkQlFVRjZSU3hGUVVOQkxGTkJRVUZETEVWQlEwRXNZVUZCUVhWRkxFVkJRMEVzVlVGQlFVc3NSVUZEUVN4aFFVRkJTaXhGUVZCWUxFdEJRVThzVTBGQmNVSXNTVUZCU1dwR0xFVkJVVGRDTEVOQlJVa3NUMEZCTWtJc1EwRkRPVUlzVFVGQlR5eERRVU5JTEUxQlFVOHNTMEZCU3l4TFFVTmFMRk5CUVZVc1MwRkJTeXhSUVVObUxGVkJRVmNzUTBGQlJTeE5RVUZQTEV0QlFVc3NUVUZCVHl4SlFVRkxMRXRCUVVzc1IwRkJTU3hGUVVNNVF5eFZRVUZYTEV0QlFVc3NVMEZCVXl4dFFrRkJiVUlzUlVGRE5VTXNUVUZCVHl4TFFVRkxMRk5CUVZNc1YwRkJWeXhGUVVOb1F5eFBRVUZSTEV0QlFVc3NVMEZCVXl4WlFVRlpMRVZCUTJ4RExGTkJRVlVzUzBGQlN5eFBRVU51UWl4RFFVTktMRU5CUTBvc1JVRkxZVzlETEVkQlFVNHNTMEZCYlVJc1EwRkhaaXhaUVVOSk5VSXNSVUZEUVVNc1JVRkRRVFpGTEVWQlEwRnlSQ3hGUVVOQlowUXNSVUZEUVUwc1JVRkRRWEpFTEVWQlExUXNRMEZRVXl4WFFVRkJNVUlzUlVGRFFTeFRRVUZCUXl4RlFVTkJMR2RDUVVGQk5rVXNSVUZEUVN4WlFVRkJja1FzUlVGRFFTeGhRVUZCWjBRc1JVRkRRU3haUVVGQlRTeEZRVU5CTEZWQlFVRnlSQ3hGUVZSWUxFdEJRVThzVTBGQmNVSXNTVUZCU1d4RExFZEJRMmhETEV0QlFVOHNVMEZCTWtJc1EwRkJReXhEUVZOb1F5eERRVVZKTEU5QlFUaENMRU5CUTJwRExFMUJRVThzUTBGRFNDeFpRVUZoTEV0QlFVc3NWMEZEYkVJc1ZVRkJWeXhEUVVGRkxFMUJRVThzUzBGQlN5eE5RVUZQTEVsQlFVc3NTMEZCU3l4SFFVRkpMRVZCUXpsRExGTkJRVlVzUzBGQlN5eFJRVU5tTEZWQlFWY3NTMEZCU3l4VFFVRlRMRWxCUVV0M1JpeEhRVUZaUVN4RlFVRlJMRTFCUVUwc1EwRkJReXhGUVVONlJDeE5RVUZQTEV0QlFVc3NUMEZCVXl4UFFVRlRMRTlCUXpsQ0xGVkJRVmNzUzBGQlN5eFRRVUZUTEcxQ1FVRnRRaXhGUVVNMVF5eE5RVUZQTEV0QlFVc3NVMEZCVXl4WFFVRlhMRVZCUTJoRExFOUJRVkVzUzBGQlN5eFRRVUZUTEZsQlFWa3NSVUZEYkVNc1VVRkJVeXhMUVVGTExFOUJRMlFzVVVGQlV5eExRVUZMTEU5QlEyUXNUVUZCVHl4TFFVRkxMRWxCUTJoQ0xFTkJRMG9zUTBGRFNpeEZWUzlxUWs4c1UwRkJVME1zUjBGRFdrTXNSVUZEUVVNc1JVRkRRVU1zUlVGRFFVTXNSVUZEVlN4RFFYSkNaQ3hKUVVGQlF5eEZRWE5DU1N4SlFVRk5ReXhGUVVGVExFbEJRVWxETEVkQlFWZE9MRVZCUVUxSExFTkJRVXNzUlVGRGJrTkpMRVZCUVZNc1MwRkJTeXhOUVVGTlRpeERRVUZOTEVWQlJXaERMRkZCUVZkUExFdEJRVXRFTEVWQlFVOHNUVUZEYmtJc1IwRkJTVU1zUlVGQlJTeE5RVUZSTEZGQlEyUXNSMEZCU1VFc1JVRkJSU3hOUVVGUkxFOUJRVkVzUTBGRGJFSXNSMEZCVFN4RFFVRkZMRmxCUVVGRExFVkJRV0VzVTBGQlFVTXNSVUZCVlN4TlFVRkJReXhGUVVGUExGTkJRVUZETEVOQlFWTXNSVUZCU1VNc1IwRkJjVUppTEVWQlFVMVJMRVZCUVVVc1MwRkJUVTRzUlVGQlRTeFBRVUZQVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVOc1IwMHNSVUZCVHl4SlFVRkpReXhIUVVGbFppeEZRVUZOVVN4RlFVRkZMRWRCUVVsQkxFVkJRVWRETEVOQlFWY3NSVUZETVVSSExFVkJRVk1zVVVGQlUwa3NSMEZCVFVZc1JVRkJTeXhSUVVGUlJTeERRVUZETEVOQlFVTXNSVUZEZGtOWUxFVkJRVThzUzBGQlMxTXNRMEZCU1N4RlFVTm9RaXhSUVVGWFJ5eExRVUZQVUN4RlFVRlRMRXRCUVUxTUxFVkJRVThzVTBGQlV5eEpRVUZKV1N4RFFVRkhMRVZCUTNoRUxGRkJRVmRETEV0QlFWRmtMRVZCUVVGTkxFVkJRVk1zVVVGQlZDeExRVUZCVGl4RlFVRnJRaXhEUVVGRExFVkJRVWRETEVWQlFVOHNVMEZCVXl4TFFVRkxZU3hEUVVGSkxFVkJRMnhGTEZGQlFWZERMRXRCUVZORExFZEJRVzlDVkN4RFFVRkxMRVZCUVVkT0xFVkJRVThzVTBGQlV5eFpRVUZaWXl4RFFVRkxMRU5CUTNKR0xFdEJRVThzUTBGRFNDeEpRVUZOVEN4RlFVRlBMRWxCUVVsRExFZEJRV1ZtTEVWQlFVMVJMRVZCUVVVc1IwRkJTVUVzUTBGQlF5eEZRVU0zUTBnc1JVRkJUeXhMUVVGTFV5eERRVUZKTEVOQlEzQkNMRU5CUjBvc1QwRkJUMVFzUlVGQlR5eE5RVUZOTEVOQlEzaENMRU5CUjBFc1NVRkJaV2RDTEVkQlFXWXNTMEZCYzBNc1EwRkhNMElzV1VGRFNYSkNMRVZCUTBGelFpeEZRVU5IUXl4RlFVTmFMRU5CU0ZNc1ZVRkJRWFpDTEVWQlEwRXNVVUZCUVhOQ0xFVkJRMGNzWTBGQlFVTXNSVUZNWkN4TFFVRlBMRk5CUVhGQ0xFbEJRVWxETEVWQlRUZENMRU5CUlVrc1QwRkJORUlzUTBGREwwSXNUVUZCVHl4RFFVTklMRTFCUVU4c1MwRkJTeXhMUVVOYUxFbEJRVXNzUzBGQlN5eEhRVU5XTEZWQlFWY3NRMEZEVUN4RlFVRkhMRXRCUVVzc1UwRkJVeXhGUVVOcVFpeEZRVUZITEV0QlFVc3NVMEZCVXl4RFFVTnlRaXhGUVVOQkxGbEJRV0VzUTBGRFZDeE5RVUZQTEV0QlFVc3NVMEZCVXl4TlFVTnlRaXhQUVVGUkxFdEJRVXNzVTBGQlV5eE5RVU14UWl4RlFVTkJMRTlCUVZFc1MwRkJTeXhUUVVGVExFMUJRM1JDTEUxQlFVOURMRWRCUVVzc1MwRkJTeXhMUVVGTExFbEJRVWtzUlVGQlJTeFZRVUZWTEV0QlFVc3NSVUZCUlN4RlFVRkZMRk5CUVZNc1EwRkROVVFzUTBGRFNpeERRVU5LTEVWQlIyRldMRWRCUVU0c1kwRkJOa0pOTEVWQlFYVkNMRU5CUldoRUxGbEJRMGx5UWl4RlFVTkJjMElzUlVGRFIwTXNSVUZEU0dRc1JVRkRWQ3hEUVVORkxFMUJRVTFVTEVWQlFVMXpRaXhGUVVGSlF5eERRVUZSTEVWQlRHcENMRlZCUVVGMlFpeEZRVU5CTEZGQlFVRnpRaXhGUVVOSExHTkJRVUZETEVWQlEwZ3NhVUpCUVVGa0xFVkJURmdzUzBGQlR5eFRRVUV3UWl4RFFVRkRMRU5CVVd4RExFTkJSVThzVVVGQlVXbENMRVZCUVcxRExFTkJRemxETEZsQlFVc3NVMEZCVXl4TFFVRkxRU3hEUVVGUExFVkJRMjVDUVN4RFFVTllMRU5CUlU4c1QwRkJkMElzUTBGRE0wSXNUMEZCVVN4TFFVRkxMRk5CUVZNc1MwRkJUU3hEUVVONFFpeEpRVUZMTEU5QlEwUXNUMEZCVDBNc1IwRkJRVU1zUlVGQlFTeEhRVU5ETEUxQlFVMHNUVUZCVFN4SFFVUmlMRU5CUlVnc1ZVRkJWeXhMUVVGTExGTkJRVk1zYlVKQlFXMUNMRVZCUXpWRExHRkJRV01zUzBGQlN5eFpRVU51UWl4VlFVRlhMRXRCUVVzc1UwRkJVeXhKUVVGTFF5eEhRVUZOUVN4RlFVRkZMRTFCUVUwc1EwRkJReXhGUVVNM1F5eE5RVUZQTEV0QlFVc3NVMEZCVXl4WFFVRlhMRVZCUTJoRExFOUJRVkVzUzBGQlN5eFRRVUZUTEZsQlFWa3NSVUZEYkVNc1RVRkJUeXhaUVVOUUxFOUJRVkVzUzBGQlN5eFRRVUZUTEV0QlF6RkNMRWRCUTBvc1NVRkJTeXhQUVVORUxFOUJRVTlHTEVkQlFVRkRMRVZCUVVFc1IwRkRRU3hOUVVGTkxFMUJRVTBzUjBGRVdpeERRVVZJTEZsQlFXRXNTMEZCU3l4VFFVRlRMRWxCUXk5Q0xFZEJRMG9zU1VGQlN5eFBRVU5FTEU5QlFVOUVMRWRCUVVGRExFVkJRVUVzUjBGRFFTeE5RVUZOTEUxQlFVMHNSMEZFV2l4RFFVVklMRXRCUVUwc1MwRkJTeXhUUVVGVExFZEJRM2hDTEVWQlJWSXNRMEZEU2l4RFFVTktMRVZCUjJGMFFpeEhRVUZPTEV0QlFXbENMRU5CU1dJc1dVRkJiVUpPTEVWQlFYRkNSeXhGUVVGclFpeERRVUYyUXl4VlFVRkJTQ3hGUVVGeFFpeFhRVUZCUnl4RlFVZ3ZReXhMUVVGUExFMUJRVEJDTEVOQlFVTXNSVUZEYkVNc1MwRkJUeXhUUVVGeFFpeEpRVUZKY1VJc1JVRkZhME1zUTBGRk0wUXNTMEZCUzAwc1JVRkJiVU1zUTBGRE0wTXNXVUZCU3l4TlFVRk5MRXRCUVV0QkxFTkJRVU1zUlVGRFZrRXNRMEZEV0N4RFFVVlBMRTlCUVc5Q0xFTkJRM1pDTEUxQlFVOHNRMEZEU0N4UFFVRlJMRXRCUVVzc1RVRkJUU3hKUVVGTFJDeEhRVUZOUVN4RlFVRkZMRTFCUVUwc1EwRkJReXhGUVVOMlF5eFBRVUZSTEV0QlFVc3NUVUZCVFN4TlFVTnVRaXhQUVVGUkxFdEJRVXNzVFVGQlRTeE5RVU51UWl4VlFVRlhMRXRCUVVzc1UwRkJVeXh0UWtGQmJVSXNSVUZETlVNc1QwRkJVU3hMUVVGTExGTkJRVk1zV1VGQldTeEZRVU5zUXl4TlFVRlBMRXRCUVVzc1UwRkJVeXhYUVVGWExFVkJRMmhETEUxQlFVOHNTMEZCU3l4TFFVTmFMRTFCUVU4c1MwRkJTeXhOUVVGTkxFbEJRM1JDTEVOQlEwb3NRMEZEU2l4RlEzaEpRU3hWUVVGWkxFMUJRVTlGTEVkQlFWVXNRMEZEZWtJc1IwRkJTU3hEUVVOQkxFbEJRVTFETEVWQlFWVkVMRVZCUVUwc1MwRkZkRUlzUjBGQlNVTXNSVUZCVVN4UFFVRlRMRmRCUVZrc1EwRkROMElzU1VGQlRVTXNSVUZCVjBNc1IwRkJaVVlzUlVGQlVTeExRVUZOUVN4RlFVRlJMRk5CUVZWQkxFVkJRVkVzVTBGQlZVRXNSVUZCVVN4SlFVRkpMRVZCUlRsR0xGbEJRVmtzUTBGRFVpeExRVUZOTEZkQlEwNHNUMEZCVVVNc1EwRkRXaXhEUVVGNVFpeERRVU0zUWl4VFFVRlhSQ3hGUVVGUkxFOUJRVk1zVTBGQlZTeERRVU5zUXl4SlFVRk5SeXhGUVVGVFF5eEhRVUZoU2l4RlFVRlJMRXRCUVUxQkxFVkJRVkVzVTBGQlZVRXNSVUZCVVN4TlFVRlBRU3hGUVVGUkxFbEJRVWtzUlVGRmRrWXNXVUZCV1N4RFFVTlNMRXRCUVUwc1UwRkRUaXhQUVVGUlJ5eERRVU5hTEVOQlFYVkNMRU5CUXpOQ0xFMUJRMGtzV1VGQldTeERRVUZGTEU5QlFWRXNORUpCUVRaQ0xFTkJRVU1zUTBGRk5VUXNUMEZCVTBVc1JVRkJUeXhEUVVOYUxGRkJRVkVzVFVGQlRTeHZRMEZCYjBOT0xFVkJRVTBzUzBGQlN5eEpRVUZKTEV0QlFVdE5MRU5CUVVzc1JVRkJSU3hGUVVNM1JTeFpRVUZaTEVOQlFVVXNUMEZCVVVFc1JVRkJUU3hQUVVGUkxFTkJRVU1zUTBGRGVrTXNRMEZEU2lJc0NpQWdJbTVoYldWeklqb2dXeUp5WlhGMWFYSmxYM0JoY25OcGJXMXZibDkxYldSZmJXbHVJaXdnSWw5ZlkyOXRiVzl1U2xOTmFXNGlMQ0FpWlhod2IzSjBjeUlzSUNKdGIyUjFiR1VpTENBaWRDSXNJQ0p5SWl3Z0ltVWlMQ0FpZFNJc0lDSnVJaXdnSW04aUxDQWlhU0lzSUNKbUlpd2dJbU1pTENBaWN5SXNJQ0pzSWl3Z0luZ2lMQ0FpWWlJc0lDSm9JaXdnSW5BaUxDQWlaQ0lzSUNKMklpd2dJbWNpTENBaWJTSXNJQ0o1SWl3Z0lrVWlMQ0FpZHlJc0lDSkNJaXdnSW1FaUxDQWlhaUlzSUNKVElpd2dJbDhpTENBaVRDSXNJQ0pQSWl3Z0ltc2lMQ0FpVUNJc0lDSnhJaXdnSWtFaUxDQWlTU0lzSUNKR0lpd2dJazBpTENBaWVpSXNJQ0pTSWl3Z0lsVWlMQ0FpVnlJc0lDSkVJaXdnSWs0aUxDQWlSeUlzSUNKRElpd2dJa29pTENBaVZDSXNJQ0paSWl3Z0lsWWlMQ0FpU0NJc0lDSllJaXdnSWtzaUxDQWlVU0lzSUNKYUlpd2dJaVFpTENBaWJtNGlMQ0FpZEc0aUxDQWljbTRpTENBaVlXNGlMQ0FpWlc0aUxDQWlkVzRpTENBaWIyNGlMQ0FpWm00aUxDQWlZMjRpTENBaWMyNGlMQ0FpYkc0aUxDQWlhRzRpTENBaWNHNGlMQ0FpWkc0aUxDQWlkbTRpTENBaVoyNGlMQ0FpYlc0aUxDQWllVzRpTENBaWNtVnhkV2x5WlY5aVgzUnlaV1VpTENBaVgxOWpiMjF0YjI1S1UwMXBiaUlzSUNKbGVIQnZjblJ6SWl3Z0lsOWZaWGgwWlc1a2N5SXNJQ0psZUhSbGJtUlRkR0YwYVdOeklpd2dJbVFpTENBaVlpSXNJQ0p3SWl3Z0lsOWZJaXdnSW1SbFptRjFiSFJEYjIxd1lYSmhkRzl5SWl3Z0ltRWlMQ0FpZEdFaUxDQWlkR0lpTENBaWMybHRjR3hsUTI5dGNHRnlZWFJ2Y2lJc0lDSkNWSEpsWlNJc0lDSmxiblJ5YVdWeklpd2dJbU52YlhCaGNtVWlMQ0FpYldGNFRtOWtaVk5wZW1VaUxDQWlSVzF3ZEhsTVpXRm1JaXdnSW1OaGJHeGlZV05ySWl3Z0luUm9hWE5CY21jaUxDQWlYM1JvYVhNaUxDQWlheUlzSUNKMklpd2dJbWx1YVhScFlXeERiM1Z1ZEdWeUlpd2dJbXh2ZHlJc0lDSm9hV2RvSWl3Z0ltdGxlU0lzSUNKa1pXWmhkV3gwVm1Gc2RXVWlMQ0FpZG1Gc2RXVWlMQ0FpYjNabGNuZHlhWFJsSWl3Z0luSmxjM1ZzZENJc0lDSkNUbTlrWlVsdWRHVnlibUZzSWl3Z0lrUmxiR1YwWlZKaGJtZGxJaXdnSW01MUlpd2dJbkJoYVhKeklpd2dJbXRsZVhNaUxDQWljbVYwZFhKdVZHaHBjMGxtVlc1amFHRnVaMlZrSWl3Z0ltTm9ZVzVuWldRaUxDQWlhVzVqYkhWa1pVaHBaMmdpTENBaVpHVnNJaXdnSW1raUxDQWlSR1ZzWlhSbElpd2dJblJ0Y0NJc0lDSnBibWwwYVdGc1ZtRnNkV1VpTENBaWFYUWlMQ0FpVW1WMWMyVmtRWEp5WVhraUxDQWlibVY0ZENJc0lDSnNiM2RsYzNSTFpYa2lMQ0FpY21WMWMyVmtRWEp5WVhraUxDQWlhVzVtYnlJc0lDSnBkR1Z5WVhSdmNpSXNJQ0p1YjJSbGNYVmxkV1VpTENBaWJtOWtaV2x1WkdWNElpd2dJbXhsWVdZaUxDQWljM1JoZEdVaUxDQWlhblZ0Y0NJc0lDSnNaWFpsYkNJc0lDSm9hV2RvWlhOMFMyVjVJaXdnSW5OcmFYQklhV2RvWlhOMElpd2dJbDloSWl3Z0ltTm9aV05ySWl3Z0ltNWxlSFJ1YjJSbElpd2dJa1Z0Y0hSNVFYSnlZWGtpTENBaWIzUm9aWElpTENBaWIyNXNlVlJvYVhNaUxDQWliMjVzZVU5MGFHVnlJaXdnSW1ScFptWmxjbVZ1ZENJc0lDSmZZMjl0Y0dGeVpTSXNJQ0owYUdselEzVnljMjl5SWl3Z0ltOTBhR1Z5UTNWeWMyOXlJaXdnSW5Sb2FYTlRkV05qWlhOeklpd2dJbTkwYUdWeVUzVmpZMlZ6Y3lJc0lDSndjbVYyUTNWeWMyOXlUM0prWlhJaUxDQWlZM1Z5YzI5eVQzSmtaWElpTENBaWRHaHBjMHhsWVdZaUxDQWlkR2hwYzBsdWRHVnlibUZzVTNCcGJtVWlMQ0FpZEdocGMweGxkbVZzU1c1a2FXTmxjeUlzSUNKdmRHaGxja3hsWVdZaUxDQWliM1JvWlhKSmJuUmxjbTVoYkZOd2FXNWxJaXdnSW05MGFHVnlUR1YyWld4SmJtUnBZMlZ6SWl3Z0luWmhiRlJvYVhNaUxDQWlkbUZzVDNSb1pYSWlMQ0FpYjNSb1pYSldZV3dpTENBaWJHRnpkRlJvYVhNaUxDQWliR0Z6ZEU5MGFHVnlJaXdnSW01dlpHVlVhR2x6SWl3Z0ltNXZaR1ZQZEdobGNpSXNJQ0pqZFhKemIzSWlMQ0FpWTNWeWMyOXlSbWx1YVhOb1pXUWlMQ0FpWTI5dGNHRnlaVXRsZVhNaUxDQWlZMjl0Y0dGeVpXUWlMQ0FpWTJGdVUzUmxjQ0lzSUNKc1pYWmxiRWx1WkdsalpYTWlMQ0FpWTNWeWNtVnVkRXRsZVNJc0lDSjBjbVZsSWl3Z0lsOXliMjkwSWl3Z0ltaGxhV2RvZENJc0lDSnpkR1Z3Vkc5T2IyUmxJaXdnSW1sdWRHVnlibUZzVTNCcGJtVWlMQ0FpYkdWMlpXeHpUR1Z1WjNSb0lpd2dJbk53YVc1bFRHVnVaM1JvSWl3Z0ltNXZaR1ZNWlhabGJFbHVaR1Y0SWl3Z0lteGxkbVZzU1c1a1pYaFhZV3hyUW1GamF5SXNJQ0oyWVd4MVpVbHVaR1Y0SWl3Z0ltNWxlSFJNWlhabGJDSXNJQ0pqZFhKeVpXNTBUR1YyWld3aUxDQWlibTlrWlNJc0lDSmphR2xzWkhKbGJpSXNJQ0pqYUdsc1pFbHVaR1Y0SWl3Z0ltTjFjbk52Y2tFaUxDQWlZM1Z5YzI5eVFpSXNJQ0pvWldsbmFIUkJJaXdnSW1OMWNuSmxiblJMWlhsQklpd2dJbXhsZG1Wc1NXNWthV05sYzBFaUxDQWlhR1ZwWjJoMFFpSXNJQ0pqZFhKeVpXNTBTMlY1UWlJc0lDSnNaWFpsYkVsdVpHbGpaWE5DSWl3Z0ltdGxlVU52YlhCaGNtbHpiMjRpTENBaWFHVnBaMmgwVFdsdUlpd2dJbVJsY0hSb1FVNXZjbTFoYkdsNlpXUWlMQ0FpWkdWd2RHaENUbTl5YldGc2FYcGxaQ0lzSUNKbWFYSnpkRXRsZVNJc0lDSnVJaXdnSW1admNtTmxJaXdnSW0xaGVFeGxibWQwYUNJc0lDSnRhVzRpTENBaWJXRjRJaXdnSW5KbGMzVnNkSE1pTENBaVFuSmxZV3NpTENBaVlXUmtaV1FpTENBaWIyNUdiM1Z1WkNJc0lDSnlJaXdnSW5KdmIzUWlMQ0FpYVhOVGFHRnlaV1FpTENBaWRDSXNJQ0p6YVhwbElpd2dJbUZ6VTJWMElpd2dJbUowY21WbElpd2dJa0pPYjJSbElpd2dJblpoYkhWbGN5SXNJQ0oxYm1SbFpsWmhiSE1pTENBaVptRnBiRmh2Y2lJc0lDSmpiWEFpTENBaWJHOGlMQ0FpYUdraUxDQWliV2xrSWl3Z0ltTWlMQ0FpYkdGemRFbHVaR1Y0SWl3Z0ltbHVZMngxYzJsMlpTSXNJQ0pwYm1SbGVFOXlURzkzWlhJaUxDQWlaR1Z3ZEdnaUxDQWlZbUZ6WlVsdVpHVjRJaXdnSW10TUlpd2dJblpNSWl3Z0ltNWxkMUpwWjJoMFUybGliR2x1WnlJc0lDSjBZWEpuWlhRaUxDQWljbWh6SWl3Z0lteG9jeUlzSUNKb1lXeG1JaXdnSW1Wa2FYUk5iMlJsSWl3Z0ltTnZkVzUwSWl3Z0ltbE1iM2NpTENBaWFVaHBaMmdpTENBaVh5SXNJQ0pmYzNWd1pYSWlMQ0FpYkdWdVozUm9JaXdnSW1OTUlpd2dJbU5vYVd4a1UybDZaU0lzSUNKMGIyOW1aWGNpTENBaVkyaHBiR1FpTENBaWJXRjRVMmw2WlNJc0lDSnZiR1JNWlc1bmRHZ2lMQ0FpY21oelEyaHBiR1J5Wlc0aUxDQWlabUZqZENJc0lDSmhjbWR6SWl3Z0lsOXBJaXdnSWt4MWVHOXVSWEp5YjNJaUxDQWlTVzUyWVd4cFpFUmhkR1ZVYVcxbFJYSnliM0lpTENBaWNtVmhjMjl1SWl3Z0lrbHVkbUZzYVdSSmJuUmxjblpoYkVWeWNtOXlJaXdnSWtsdWRtRnNhV1JFZFhKaGRHbHZia1Z5Y205eUlpd2dJa052Ym1ac2FXTjBhVzVuVTNCbFkybG1hV05oZEdsdmJrVnljbTl5SWl3Z0lrbHVkbUZzYVdSVmJtbDBSWEp5YjNJaUxDQWlkVzVwZENJc0lDSkpiblpoYkdsa1FYSm5kVzFsYm5SRmNuSnZjaUlzSUNKYWIyNWxTWE5CWW5OMGNtRmpkRVZ5Y205eUlpd2dJbTRpTENBaWN5SXNJQ0pzSWl3Z0lrUkJWRVZmVTBoUFVsUWlMQ0FpUkVGVVJWOU5SVVFpTENBaVJFRlVSVjlOUlVSZlYwbFVTRjlYUlVWTFJFRlpJaXdnSWtSQlZFVmZSbFZNVENJc0lDSkVRVlJGWDBoVlIwVWlMQ0FpVkVsTlJWOVRTVTFRVEVVaUxDQWlWRWxOUlY5WFNWUklYMU5GUTA5T1JGTWlMQ0FpVkVsTlJWOVhTVlJJWDFOSVQxSlVYMDlHUmxORlZDSXNJQ0pVU1UxRlgxZEpWRWhmVEU5T1IxOVBSa1pUUlZRaUxDQWlWRWxOUlY4eU5GOVRTVTFRVEVVaUxDQWlWRWxOUlY4eU5GOVhTVlJJWDFORlEwOU9SRk1pTENBaVZFbE5SVjh5TkY5WFNWUklYMU5JVDFKVVgwOUdSbE5GVkNJc0lDSlVTVTFGWHpJMFgxZEpWRWhmVEU5T1IxOVBSa1pUUlZRaUxDQWlSRUZVUlZSSlRVVmZVMGhQVWxRaUxDQWlSRUZVUlZSSlRVVmZVMGhQVWxSZlYwbFVTRjlUUlVOUFRrUlRJaXdnSWtSQlZFVlVTVTFGWDAxRlJDSXNJQ0pFUVZSRlZFbE5SVjlOUlVSZlYwbFVTRjlUUlVOUFRrUlRJaXdnSWtSQlZFVlVTVTFGWDAxRlJGOVhTVlJJWDFkRlJVdEVRVmtpTENBaVJFRlVSVlJKVFVWZlJsVk1UQ0lzSUNKRVFWUkZWRWxOUlY5R1ZVeE1YMWRKVkVoZlUwVkRUMDVFVXlJc0lDSkVRVlJGVkVsTlJWOUlWVWRGSWl3Z0lrUkJWRVZVU1UxRlgwaFZSMFZmVjBsVVNGOVRSVU5QVGtSVElpd2dJbWx6Vlc1a1pXWnBibVZrSWl3Z0ltOGlMQ0FpYVhOT2RXMWlaWElpTENBaWFYTkpiblJsWjJWeUlpd2dJbWx6VTNSeWFXNW5JaXdnSW1selJHRjBaU0lzSUNKb1lYTlNaV3hoZEdsMlpTSXNJQ0psSWl3Z0ltMWhlV0psUVhKeVlYa2lMQ0FpZEdocGJtY2lMQ0FpWW1WemRFSjVJaXdnSW1GeWNpSXNJQ0ppZVNJc0lDSmpiMjF3WVhKbElpd2dJbUpsYzNRaUxDQWlibVY0ZENJc0lDSndZV2x5SWl3Z0luQnBZMnNpTENBaWIySnFJaXdnSW10bGVYTWlMQ0FpWVNJc0lDSnJJaXdnSW1oaGMwOTNibEJ5YjNCbGNuUjVJaXdnSW5CeWIzQWlMQ0FpYVc1MFpXZGxja0psZEhkbFpXNGlMQ0FpWW05MGRHOXRJaXdnSW5SdmNDSXNJQ0ptYkc5dmNrMXZaQ0lzSUNKNElpd2dJbTRpTENBaWNHRmtVM1JoY25RaUxDQWlhVzV3ZFhRaUxDQWlhWE5PWldjaUxDQWljR0ZrWkdWa0lpd2dJbkJoY25ObFNXNTBaV2RsY2lJc0lDSnpkSEpwYm1jaUxDQWljR0Z5YzJWR2JHOWhkR2x1WnlJc0lDSndZWEp6WlUxcGJHeHBjeUlzSUNKbWNtRmpkR2x2YmlJc0lDSm1JaXdnSW5KdmRXNWtWRzhpTENBaWJuVnRZbVZ5SWl3Z0ltUnBaMmwwY3lJc0lDSjBiM2RoY21SYVpYSnZJaXdnSW1aaFkzUnZjaUlzSUNKcGMweGxZWEJaWldGeUlpd2dJbmxsWVhJaUxDQWlaR0Y1YzBsdVdXVmhjaUlzSUNKa1lYbHpTVzVOYjI1MGFDSXNJQ0p0YjI1MGFDSXNJQ0p0YjJSTmIyNTBhQ0lzSUNKdGIyUlpaV0Z5SWl3Z0ltOWlhbFJ2VEc5allXeFVVeUlzSUNKa0lpd2dJbmRsWld0elNXNVhaV1ZyV1dWaGNpSXNJQ0ozWldWcldXVmhjaUlzSUNKd01TSXNJQ0pzWVhOMElpd2dJbkF5SWl3Z0luVnVkSEoxYm1OaGRHVlpaV0Z5SWl3Z0luQmhjbk5sV205dVpVbHVabThpTENBaWRITWlMQ0FpYjJabWMyVjBSbTl5YldGMElpd2dJbXh2WTJGc1pTSXNJQ0owYVcxbFdtOXVaU0lzSUNKa1lYUmxJaXdnSW1sdWRHeFBjSFJ6SWl3Z0ltMXZaR2xtYVdWa0lpd2dJbDlmYzNCeVpXRmtWbUZzZFdWeklpd2dJbkJoY25ObFpDSXNJQ0p0SWl3Z0luTnBaMjVsWkU5bVpuTmxkQ0lzSUNKdlptWkliM1Z5VTNSeUlpd2dJbTltWmsxcGJuVjBaVk4wY2lJc0lDSnZabVpJYjNWeUlpd2dJbTltWmsxcGJpSXNJQ0p2Wm1aTmFXNVRhV2R1WldRaUxDQWlZWE5PZFcxaVpYSWlMQ0FpZG1Gc2RXVWlMQ0FpYm5WdFpYSnBZMVpoYkhWbElpd2dJa2x1ZG1Gc2FXUkJjbWQxYldWdWRFVnljbTl5SWl3Z0ltNXZjbTFoYkdsNlpVOWlhbVZqZENJc0lDSnViM0p0WVd4cGVtVnlJaXdnSW01dmNtMWhiR2w2WldRaUxDQWlkU0lzSUNKMklpd2dJbVp2Y20xaGRFOW1abk5sZENJc0lDSnZabVp6WlhRaUxDQWlabTl5YldGMElpd2dJbWh2ZFhKeklpd2dJbTFwYm5WMFpYTWlMQ0FpYzJsbmJpSXNJQ0owYVcxbFQySnFaV04wSWl3Z0ltbGhibUZTWldkbGVDSXNJQ0p0YjI1MGFITk1iMjVuSWl3Z0ltMXZiblJvYzFOb2IzSjBJaXdnSW0xdmJuUm9jMDVoY25KdmR5SXNJQ0p0YjI1MGFITWlMQ0FpYkdWdVozUm9JaXdnSW5kbFpXdGtZWGx6VEc5dVp5SXNJQ0ozWldWclpHRjVjMU5vYjNKMElpd2dJbmRsWld0a1lYbHpUbUZ5Y205M0lpd2dJbmRsWld0a1lYbHpJaXdnSW0xbGNtbGthV1Z0Y3lJc0lDSmxjbUZ6VEc5dVp5SXNJQ0psY21GelUyaHZjblFpTENBaVpYSmhjMDVoY25KdmR5SXNJQ0psY21Geklpd2dJbTFsY21sa2FXVnRSbTl5UkdGMFpWUnBiV1VpTENBaVpIUWlMQ0FpZDJWbGEyUmhlVVp2Y2tSaGRHVlVhVzFsSWl3Z0ltMXZiblJvUm05eVJHRjBaVlJwYldVaUxDQWlaWEpoUm05eVJHRjBaVlJwYldVaUxDQWlabTl5YldGMFVtVnNZWFJwZG1WVWFXMWxJaXdnSW5WdWFYUWlMQ0FpWTI5MWJuUWlMQ0FpYm5WdFpYSnBZeUlzSUNKdVlYSnliM2NpTENBaWRXNXBkSE1pTENBaWJHRnpkR0ZpYkdVaUxDQWlhWE5FWVhraUxDQWlhWE5KYmxCaGMzUWlMQ0FpWm0xMFZtRnNkV1VpTENBaWMybHVaM1ZzWVhJaUxDQWliR2xzVlc1cGRITWlMQ0FpWm0xMFZXNXBkQ0lzSUNKemRISnBibWRwWm5sVWIydGxibk1pTENBaWMzQnNhWFJ6SWl3Z0luUnZhMlZ1Vkc5VGRISnBibWNpTENBaWN5SXNJQ0owYjJ0bGJpSXNJQ0p0WVdOeWIxUnZhMlZ1Vkc5R2IzSnRZWFJQY0hSeklpd2dJa1JCVkVWZlUwaFBVbFFpTENBaVJFRlVSVjlOUlVRaUxDQWlSRUZVUlY5R1ZVeE1JaXdnSWtSQlZFVmZTRlZIUlNJc0lDSlVTVTFGWDFOSlRWQk1SU0lzSUNKVVNVMUZYMWRKVkVoZlUwVkRUMDVFVXlJc0lDSlVTVTFGWDFkSlZFaGZVMGhQVWxSZlQwWkdVMFZVSWl3Z0lsUkpUVVZmVjBsVVNGOU1UMDVIWDA5R1JsTkZWQ0lzSUNKVVNVMUZYekkwWDFOSlRWQk1SU0lzSUNKVVNVMUZYekkwWDFkSlZFaGZVMFZEVDA1RVV5SXNJQ0pVU1UxRlh6STBYMWRKVkVoZlUwaFBVbFJmVDBaR1UwVlVJaXdnSWxSSlRVVmZNalJmVjBsVVNGOU1UMDVIWDA5R1JsTkZWQ0lzSUNKRVFWUkZWRWxOUlY5VFNFOVNWQ0lzSUNKRVFWUkZWRWxOUlY5TlJVUWlMQ0FpUkVGVVJWUkpUVVZmUmxWTVRDSXNJQ0pFUVZSRlZFbE5SVjlJVlVkRklpd2dJa1JCVkVWVVNVMUZYMU5JVDFKVVgxZEpWRWhmVTBWRFQwNUVVeUlzSUNKRVFWUkZWRWxOUlY5TlJVUmZWMGxVU0Y5VFJVTlBUa1JUSWl3Z0lrUkJWRVZVU1UxRlgwWlZURXhmVjBsVVNGOVRSVU5QVGtSVElpd2dJa1JCVkVWVVNVMUZYMGhWUjBWZlYwbFVTRjlUUlVOUFRrUlRJaXdnSWtadmNtMWhkSFJsY2lJc0lDSmZSbTl5YldGMGRHVnlJaXdnSW14dlkyRnNaU0lzSUNKdmNIUnpJaXdnSW1adGRDSXNJQ0pqZFhKeVpXNTBJaXdnSW1OMWNuSmxiblJHZFd4c0lpd2dJbUp5WVdOclpYUmxaQ0lzSUNKcElpd2dJbU1pTENBaVptOXliV0YwVDNCMGN5SXNJQ0prZENJc0lDSmZYM053Y21WaFpGWmhiSFZsY3lJc0lDSnVJaXdnSW5BaUxDQWljR0ZrVTNSaGNuUWlMQ0FpYTI1dmQyNUZibWRzYVhOb0lpd2dJblZ6WlVSaGRHVlVhVzFsUm05eWJXRjBkR1Z5SWl3Z0luTjBjbWx1WnlJc0lDSmxlSFJ5WVdOMElpd2dJbVp2Y20xaGRFOW1abk5sZENJc0lDSnRaWEpwWkdsbGJTSXNJQ0p0WlhKcFpHbGxiVVp2Y2tSaGRHVlVhVzFsSWl3Z0ltMXZiblJvSWl3Z0lteGxibWQwYUNJc0lDSnpkR0Z1WkdGc2IyNWxJaXdnSW0xdmJuUm9SbTl5UkdGMFpWUnBiV1VpTENBaWQyVmxhMlJoZVNJc0lDSjNaV1ZyWkdGNVJtOXlSR0YwWlZScGJXVWlMQ0FpYldGNVltVk5ZV055YnlJc0lDSmxjbUVpTENBaVpYSmhSbTl5UkdGMFpWUnBiV1VpTENBaVpIVnlJaXdnSW5SdmEyVnVWRzlHYVdWc1pDSXNJQ0pzYVd4a2RYSWlMQ0FpYldGd2NHVmtJaXdnSW5SdmEyVnVjeUlzSUNKeVpXRnNWRzlyWlc1eklpd2dJbVp2ZFc1a0lpd2dJbXhwZEdWeVlXd2lMQ0FpZG1Gc0lpd2dJbU52Ykd4aGNITmxaQ0lzSUNKMElpd2dJa2x1ZG1Gc2FXUWlMQ0FpY21WaGMyOXVJaXdnSW1WNGNHeGhibUYwYVc5dUlpd2dJbHB2Ym1VaUxDQWlXbTl1WlVselFXSnpkSEpoWTNSRmNuSnZjaUlzSUNKMGN5SXNJQ0p2Y0hSeklpd2dJbVp2Y20xaGRDSXNJQ0p2ZEdobGNscHZibVVpTENBaWMybHVaMnhsZEc5dUlpd2dJbE41YzNSbGJWcHZibVVpTENBaVgxTjVjM1JsYlZwdmJtVWlMQ0FpV205dVpTSXNJQ0owY3lJc0lDSm1iM0p0WVhRaUxDQWliRzlqWVd4bElpd2dJbkJoY25ObFdtOXVaVWx1Wm04aUxDQWlabTl5YldGMFQyWm1jMlYwSWl3Z0ltOTBhR1Z5V205dVpTSXNJQ0prZEdaRFlXTm9aU0lzSUNKdFlXdGxSRlJHSWl3Z0lucHZibVVpTENBaWRIbHdaVlJ2VUc5eklpd2dJbWhoWTJ0NVQyWm1jMlYwSWl3Z0ltUjBaaUlzSUNKa1lYUmxJaXdnSW1admNtMWhkSFJsWkNJc0lDSndZWEp6WldRaUxDQWlaazF2Ym5Sb0lpd2dJbVpFWVhraUxDQWlabGxsWVhJaUxDQWlabUZrVDNKQ1l5SXNJQ0ptU0c5MWNpSXNJQ0ptVFdsdWRYUmxJaXdnSW1aVFpXTnZibVFpTENBaWNHRnlkSE5QWm1aelpYUWlMQ0FpWm1sc2JHVmtJaXdnSW1raUxDQWlkSGx3WlNJc0lDSjJZV3gxWlNJc0lDSndiM01pTENBaWFYTlZibVJsWm1sdVpXUWlMQ0FpYVdGdVlWcHZibVZEWVdOb1pTSXNJQ0pKUVU1QldtOXVaU0lzSUNKZlNVRk9RVnB2Ym1VaUxDQWlXbTl1WlNJc0lDSnVZVzFsSWl3Z0luTWlMQ0FpWlNJc0lDSjBjeUlzSUNKbWIzSnRZWFFpTENBaWJHOWpZV3hsSWl3Z0luQmhjbk5sV205dVpVbHVabThpTENBaVptOXliV0YwVDJabWMyVjBJaXdnSW5sbFlYSWlMQ0FpYlc5dWRHZ2lMQ0FpWkdGNUlpd2dJbUZrVDNKQ1l5SXNJQ0pvYjNWeUlpd2dJbTFwYm5WMFpTSXNJQ0p6WldOdmJtUWlMQ0FpWVhOVlZFTWlMQ0FpYjJKcVZHOU1iMk5oYkZSVElpd2dJbUZ6VkZNaUxDQWliM1psY2lJc0lDSnZkR2hsY2xwdmJtVWlMQ0FpYzJsdVoyeGxkRzl1SWl3Z0lrWnBlR1ZrVDJabWMyVjBXbTl1WlNJc0lDSmZSbWw0WldSUFptWnpaWFJhYjI1bElpd2dJbHB2Ym1VaUxDQWliMlptYzJWMElpd2dJbk1pTENBaWNpSXNJQ0p6YVdkdVpXUlBabVp6WlhRaUxDQWlabTl5YldGMFQyWm1jMlYwSWl3Z0luUnpJaXdnSW1admNtMWhkQ0lzSUNKdmRHaGxjbHB2Ym1VaUxDQWlTVzUyWVd4cFpGcHZibVVpTENBaVdtOXVaU0lzSUNKNmIyNWxUbUZ0WlNJc0lDSnViM0p0WVd4cGVtVmFiMjVsSWl3Z0ltbHVjSFYwSWl3Z0ltUmxabUYxYkhSYWIyNWxJaXdnSW05bVpuTmxkQ0lzSUNKcGMxVnVaR1ZtYVc1bFpDSXNJQ0phYjI1bElpd2dJbWx6VTNSeWFXNW5JaXdnSW14dmQyVnlaV1FpTENBaVJtbDRaV1JQWm1aelpYUmFiMjVsSWl3Z0lrbEJUa0ZhYjI1bElpd2dJbWx6VG5WdFltVnlJaXdnSWtsdWRtRnNhV1JhYjI1bElpd2dJbTV2ZHlJc0lDSmtaV1poZFd4MFdtOXVaU0lzSUNKa1pXWmhkV3gwVEc5allXeGxJaXdnSW1SbFptRjFiSFJPZFcxaVpYSnBibWRUZVhOMFpXMGlMQ0FpWkdWbVlYVnNkRTkxZEhCMWRFTmhiR1Z1WkdGeUlpd2dJblJvY205M1QyNUpiblpoYkdsa0lpd2dJbE5sZEhScGJtZHpJaXdnSW00aUxDQWllbTl1WlNJc0lDSnViM0p0WVd4cGVtVmFiMjVsSWl3Z0lsTjVjM1JsYlZwdmJtVWlMQ0FpYkc5allXeGxJaXdnSW01MWJXSmxjbWx1WjFONWMzUmxiU0lzSUNKdmRYUndkWFJEWVd4bGJtUmhjaUlzSUNKMElpd2dJa3h2WTJGc1pTSXNJQ0pKUVU1QldtOXVaU0lzSUNKcGJuUnNURVpEWVdOb1pTSXNJQ0puWlhSRFlXTm9aV1JNUmlJc0lDSnNiMk5UZEhKcGJtY2lMQ0FpYjNCMGN5SXNJQ0pyWlhraUxDQWlaSFJtSWl3Z0ltbHVkR3hFVkVOaFkyaGxJaXdnSW1kbGRFTmhZMmhsWkVSVVJpSXNJQ0pwYm5Sc1RuVnRRMkZqYUdVaUxDQWlaMlYwUTJGamFHVmtTVTVHSWl3Z0ltbHVaaUlzSUNKcGJuUnNVbVZzUTJGamFHVWlMQ0FpWjJWMFEyRmphR1ZrVWxSR0lpd2dJbDloSWl3Z0ltSmhjMlVpTENBaVkyRmphR1ZMWlhsUGNIUnpJaXdnSWw5ZmIySnFVbVZ6ZENJc0lDSnplWE5NYjJOaGJHVkRZV05vWlNJc0lDSnplWE4wWlcxTWIyTmhiR1VpTENBaWNHRnljMlZNYjJOaGJHVlRkSEpwYm1jaUxDQWliRzlqWVd4bFUzUnlJaXdnSW5WSmJtUmxlQ0lzSUNKdmNIUnBiMjV6SWl3Z0luTnRZV3hzWlhJaUxDQWlaU0lzSUNKdWRXMWlaWEpwYm1kVGVYTjBaVzBpTENBaVkyRnNaVzVrWVhJaUxDQWlhVzUwYkVOdmJtWnBaMU4wY21sdVp5SXNJQ0p2ZFhSd2RYUkRZV3hsYm1SaGNpSXNJQ0p0WVhCTmIyNTBhSE1pTENBaVppSXNJQ0p0Y3lJc0lDSnBJaXdnSW1SMElpd2dJa1JoZEdWVWFXMWxJaXdnSW0xaGNGZGxaV3RrWVhseklpd2dJbXhwYzNSVGRIVm1aaUlzSUNKc2IyTWlMQ0FpYkdWdVozUm9JaXdnSW1SbFptRjFiSFJQU3lJc0lDSmxibWRzYVhOb1JtNGlMQ0FpYVc1MGJFWnVJaXdnSW0xdlpHVWlMQ0FpYzNWd2NHOXlkSE5HWVhOMFRuVnRZbVZ5Y3lJc0lDSlFiMng1VG5WdFltVnlSbTl5YldGMGRHVnlJaXdnSW1sdWRHd2lMQ0FpWm05eVkyVlRhVzF3YkdVaUxDQWljR0ZrVkc4aUxDQWlabXh2YjNJaUxDQWliM1JvWlhKUGNIUnpJaXdnSW1sdWRHeFBjSFJ6SWl3Z0lsOWZjM0J5WldGa1ZtRnNkV1Z6SWl3Z0ltWnBlR1ZrSWl3Z0luSnZkVzVrVkc4aUxDQWljR0ZrVTNSaGNuUWlMQ0FpVUc5c2VVUmhkR1ZHYjNKdFlYUjBaWElpTENBaWVpSXNJQ0puYlhSUFptWnpaWFFpTENBaWIyWm1jMlYwV2lJc0lDSkpRVTVCV205dVpTSXNJQ0pRYjJ4NVVtVnNSbTl5YldGMGRHVnlJaXdnSW1selJXNW5iR2x6YUNJc0lDSm9ZWE5TWld4aGRHbDJaU0lzSUNKamIzVnVkQ0lzSUNKMWJtbDBJaXdnSW1admNtMWhkRkpsYkdGMGFYWmxWR2x0WlNJc0lDSk1iMk5oYkdVaUxDQWlYMHh2WTJGc1pTSXNJQ0pzYjJOaGJHVWlMQ0FpWkdWbVlYVnNkRlJ2UlU0aUxDQWljM0JsWTJsbWFXVmtURzlqWVd4bElpd2dJbE5sZEhScGJtZHpJaXdnSW14dlkyRnNaVklpTENBaWJuVnRZbVZ5YVc1blUzbHpkR1Z0VWlJc0lDSnZkWFJ3ZFhSRFlXeGxibVJoY2xJaUxDQWliblZ0WW1WeWFXNW5JaXdnSW5CaGNuTmxaRXh2WTJGc1pTSXNJQ0p3WVhKelpXUk9kVzFpWlhKcGJtZFRlWE4wWlcwaUxDQWljR0Z5YzJWa1QzVjBjSFYwUTJGc1pXNWtZWElpTENBaWFYTkJZM1IxWVd4c2VVVnVJaXdnSW1oaGMwNXZWMlZwY21SdVpYTnpJaXdnSW1Gc2RITWlMQ0FpWDE5emNISmxZV1JRY205d2N5SXNJQ0ptYjNKdFlYUWlMQ0FpYlc5dWRHaHpJaXdnSW1admNtMWhkRk4wY2lJc0lDSjNaV1ZyWkdGNWN5SXNJQ0p0WlhKcFpHbGxiWE1pTENBaVpYSmhjeUlzSUNKbWFXVnNaQ0lzSUNKa1ppSXNJQ0p5WlhOMWJIUnpJaXdnSW0xaGRHTm9hVzVuSWl3Z0ltMGlMQ0FpYjNSb1pYSWlMQ0FpWTI5dFltbHVaVkpsWjJWNFpYTWlMQ0FpY21WblpYaGxjeUlzSUNKbWRXeHNJaXdnSW1ZaUxDQWlZMjl0WW1sdVpVVjRkSEpoWTNSdmNuTWlMQ0FpWlhoMGNtRmpkRzl5Y3lJc0lDSnRJaXdnSW0xbGNtZGxaRlpoYkhNaUxDQWliV1Z5WjJWa1dtOXVaU0lzSUNKamRYSnpiM0lpTENBaVpYZ2lMQ0FpZG1Gc0lpd2dJbnB2Ym1VaUxDQWlibVY0ZENJc0lDSmZYM053Y21WaFpGWmhiSFZsY3lJc0lDSndZWEp6WlNJc0lDSnpJaXdnSW5CaGRIUmxjbTV6SWl3Z0luSmxaMlY0SWl3Z0ltVjRkSEpoWTNSdmNpSXNJQ0p6YVcxd2JHVlFZWEp6WlNJc0lDSnJaWGx6SWl3Z0ltMWhkR05vSWl3Z0luSmxkQ0lzSUNKcElpd2dJbkJoY25ObFNXNTBaV2RsY2lJc0lDSnZabVp6WlhSU1pXZGxlQ0lzSUNKcGMyOUZlSFJsYm1SbFpGcHZibVVpTENBaWFXRnVZVkpsWjJWNElpd2dJbWx6YjFScGJXVkNZWE5sVW1WblpYZ2lMQ0FpYVhOdlZHbHRaVkpsWjJWNElpd2dJbWx6YjFScGJXVkZlSFJsYm5OcGIyNVNaV2RsZUNJc0lDSnBjMjlaYldSU1pXZGxlQ0lzSUNKcGMyOVhaV1ZyVW1WblpYZ2lMQ0FpYVhOdlQzSmthVzVoYkZKbFoyVjRJaXdnSW1WNGRISmhZM1JKVTA5WFpXVnJSR0YwWVNJc0lDSmxlSFJ5WVdOMFNWTlBUM0prYVc1aGJFUmhkR0VpTENBaWMzRnNXVzFrVW1WblpYZ2lMQ0FpYzNGc1ZHbHRaVkpsWjJWNElpd2dJbk54YkZScGJXVkZlSFJsYm5OcGIyNVNaV2RsZUNJc0lDSnBiblFpTENBaWNHOXpJaXdnSW1aaGJHeGlZV05ySWl3Z0ltbHpWVzVrWldacGJtVmtJaXdnSW1WNGRISmhZM1JKVTA5WmJXUWlMQ0FpWlhoMGNtRmpkRWxUVDFScGJXVWlMQ0FpY0dGeWMyVk5hV3hzYVhNaUxDQWlaWGgwY21GamRFbFRUMDltWm5ObGRDSXNJQ0pzYjJOaGJDSXNJQ0ptZFd4c1QyWm1jMlYwSWl3Z0luTnBaMjVsWkU5bVpuTmxkQ0lzSUNKR2FYaGxaRTltWm5ObGRGcHZibVVpTENBaVpYaDBjbUZqZEVsQlRrRmFiMjVsSWl3Z0lrbEJUa0ZhYjI1bElpd2dJbWx6YjFScGJXVlBibXg1SWl3Z0ltbHpiMFIxY21GMGFXOXVJaXdnSW1WNGRISmhZM1JKVTA5RWRYSmhkR2x2YmlJc0lDSjVaV0Z5VTNSeUlpd2dJbTF2Ym5Sb1UzUnlJaXdnSW5kbFpXdFRkSElpTENBaVpHRjVVM1J5SWl3Z0ltaHZkWEpUZEhJaUxDQWliV2x1ZFhSbFUzUnlJaXdnSW5ObFkyOXVaRk4wY2lJc0lDSnRhV3hzYVhObFkyOXVaSE5UZEhJaUxDQWlhR0Z6VG1WbllYUnBkbVZRY21WbWFYZ2lMQ0FpYm1WbllYUnBkbVZUWldOdmJtUnpJaXdnSW0xaGVXSmxUbVZuWVhSbElpd2dJbTUxYlNJc0lDSm1iM0pqWlNJc0lDSndZWEp6WlVac2IyRjBhVzVuSWl3Z0ltOWljMDltWm5ObGRITWlMQ0FpWm5KdmJWTjBjbWx1WjNNaUxDQWlkMlZsYTJSaGVWTjBjaUlzSUNKeVpYTjFiSFFpTENBaWRXNTBjblZ1WTJGMFpWbGxZWElpTENBaWJXOXVkR2h6VTJodmNuUWlMQ0FpZDJWbGEyUmhlWE5NYjI1bklpd2dJbmRsWld0a1lYbHpVMmh2Y25RaUxDQWljbVpqTWpneU1pSXNJQ0psZUhSeVlXTjBVa1pETWpneU1pSXNJQ0p2WW5OUFptWnpaWFFpTENBaWJXbHNUMlptYzJWMElpd2dJbTltWmtodmRYSlRkSElpTENBaWIyWm1UV2x1ZFhSbFUzUnlJaXdnSW05bVpuTmxkQ0lzSUNKd2NtVndjbTlqWlhOelVrWkRNamd5TWlJc0lDSnlabU14TVRJeklpd2dJbkptWXpnMU1DSXNJQ0poYzJOcGFTSXNJQ0psZUhSeVlXTjBVa1pETVRFeU0wOXlPRFV3SWl3Z0ltVjRkSEpoWTNSQlUwTkpTU0lzSUNKcGMyOVpiV1JYYVhSb1ZHbHRaVVY0ZEdWdWMybHZibEpsWjJWNElpd2dJbWx6YjFkbFpXdFhhWFJvVkdsdFpVVjRkR1Z1YzJsdmJsSmxaMlY0SWl3Z0ltbHpiMDl5WkdsdVlXeFhhWFJvVkdsdFpVVjRkR1Z1YzJsdmJsSmxaMlY0SWl3Z0ltbHpiMVJwYldWRGIyMWlhVzVsWkZKbFoyVjRJaXdnSW1WNGRISmhZM1JKVTA5WmJXUlVhVzFsUVc1a1QyWm1jMlYwSWl3Z0ltVjRkSEpoWTNSSlUwOVhaV1ZyVkdsdFpVRnVaRTltWm5ObGRDSXNJQ0psZUhSeVlXTjBTVk5QVDNKa2FXNWhiRVJoZEdWQmJtUlVhVzFsSWl3Z0ltVjRkSEpoWTNSSlUwOVVhVzFsUVc1a1QyWm1jMlYwSWl3Z0luQmhjbk5sU1ZOUFJHRjBaU0lzSUNKd1lYSnpaVkpHUXpJNE1qSkVZWFJsSWl3Z0luQmhjbk5sU0ZSVVVFUmhkR1VpTENBaWNHRnljMlZKVTA5RWRYSmhkR2x2YmlJc0lDSmxlSFJ5WVdOMFNWTlBWR2x0WlU5dWJIa2lMQ0FpY0dGeWMyVkpVMDlVYVcxbFQyNXNlU0lzSUNKemNXeFpiV1JYYVhSb1ZHbHRaVVY0ZEdWdWMybHZibEpsWjJWNElpd2dJbk54YkZScGJXVkRiMjFpYVc1bFpGSmxaMlY0SWl3Z0ltVjRkSEpoWTNSSlUwOVVhVzFsVDJabWMyVjBRVzVrU1VGT1FWcHZibVVpTENBaWNHRnljMlZUVVV3aUxDQWlTVTVXUVV4SlJDSXNJQ0pzYjNkUGNtUmxjazFoZEhKcGVDSXNJQ0pqWVhOMVlXeE5ZWFJ5YVhnaUxDQWlYMTl6Y0hKbFlXUldZV3gxWlhNaUxDQWlaR0Y1YzBsdVdXVmhja0ZqWTNWeVlYUmxJaXdnSW1SaGVYTkpiazF2Ym5Sb1FXTmpkWEpoZEdVaUxDQWlZV05qZFhKaGRHVk5ZWFJ5YVhnaUxDQWliM0prWlhKbFpGVnVhWFJ6SWl3Z0luSmxkbVZ5YzJWVmJtbDBjeUlzSUNKamJHOXVaU0lzSUNKa2RYSWlMQ0FpWVd4MGN5SXNJQ0pqYkdWaGNpSXNJQ0pqYjI1bUlpd2dJa1IxY21GMGFXOXVJaXdnSW1GdWRHbFVjblZ1WXlJc0lDSmpiMjUyWlhKMElpd2dJbTFoZEhKcGVDSXNJQ0ptY205dFRXRndJaXdnSW1aeWIyMVZibWwwSWl3Z0luUnZUV0Z3SWl3Z0luUnZWVzVwZENJc0lDSmpiMjUySWl3Z0luSmhkeUlzSUNKellXMWxVMmxuYmlJc0lDSmhaR1JsWkNJc0lDSnViM0p0WVd4cGVtVldZV3gxWlhNaUxDQWlkbUZzY3lJc0lDSndjbVYyYVc5MWN5SXNJQ0pqZFhKeVpXNTBJaXdnSW1selZXNWtaV1pwYm1Wa0lpd2dJbDlFZFhKaGRHbHZiaUlzSUNKamIyNW1hV2NpTENBaVlXTmpkWEpoZEdVaUxDQWlURzlqWVd4bElpd2dJbU52ZFc1MElpd2dJbTl3ZEhNaUxDQWliMkpxSWl3Z0lrbHVkbUZzYVdSQmNtZDFiV1Z1ZEVWeWNtOXlJaXdnSW01dmNtMWhiR2w2WlU5aWFtVmpkQ0lzSUNKa2RYSmhkR2x2Ymt4cGEyVWlMQ0FpYVhOT2RXMWlaWElpTENBaWRHVjRkQ0lzSUNKd1lYSnpaV1FpTENBaWNHRnljMlZKVTA5RWRYSmhkR2x2YmlJc0lDSndZWEp6WlVsVFQxUnBiV1ZQYm14NUlpd2dJbkpsWVhOdmJpSXNJQ0psZUhCc1lXNWhkR2x2YmlJc0lDSnBiblpoYkdsa0lpd2dJa2x1ZG1Gc2FXUWlMQ0FpVTJWMGRHbHVaM01pTENBaVNXNTJZV3hwWkVSMWNtRjBhVzl1UlhKeWIzSWlMQ0FpZFc1cGRDSXNJQ0p1YjNKdFlXeHBlbVZrSWl3Z0lrbHVkbUZzYVdSVmJtbDBSWEp5YjNJaUxDQWlieUlzSUNKbWJYUWlMQ0FpWm0xMFQzQjBjeUlzSUNKZlgzTndjbVZoWkZCeWIzQnpJaXdnSWtadmNtMWhkSFJsY2lJc0lDSnNJaXdnSW5aaGJDSXNJQ0p1SWl3Z0luTWlMQ0FpY205MWJtUlVieUlzSUNKdGFXeHNhWE1pTENBaWRtRnNkV1VpTENBaWMzUnlJaXdnSW1SMWNtRjBhVzl1SWl3Z0luSmxjM1ZzZENJc0lDSnJJaXdnSW1oaGMwOTNibEJ5YjNCbGNuUjVJaXdnSW1adUlpd2dJbUZ6VG5WdFltVnlJaXdnSW5aaGJIVmxjeUlzSUNKdGFYaGxaQ0lzSUNKc2IyTmhiR1VpTENBaWJuVnRZbVZ5YVc1blUzbHpkR1Z0SWl3Z0ltTnZiblpsY25OcGIyNUJZMk4xY21GamVTSXNJQ0pzYjJNaUxDQWlkVzVwZEhNaUxDQWlkU0lzSUNKaWRXbHNkQ0lzSUNKaFkyTjFiWFZzWVhSbFpDSXNJQ0pzWVhOMFZXNXBkQ0lzSUNKdmQyNGlMQ0FpWVdzaUxDQWlhU0lzSUNKa2IzZHVJaXdnSW10bGVTSXNJQ0p1WldkaGRHVmtJaXdnSW05MGFHVnlJaXdnSW1WeElpd2dJbll4SWl3Z0luWXlJaXdnSWtsT1ZrRk1TVVFpTENBaWRtRnNhV1JoZEdWVGRHRnlkRVZ1WkNJc0lDSnpkR0Z5ZENJc0lDSmxibVFpTENBaVNXNTBaWEoyWVd3aUxDQWlYMGx1ZEdWeWRtRnNJaXdnSW1OdmJtWnBaeUlzSUNKeVpXRnpiMjRpTENBaVpYaHdiR0Z1WVhScGIyNGlMQ0FpU1c1MllXeHBaRUZ5WjNWdFpXNTBSWEp5YjNJaUxDQWlhVzUyWVd4cFpDSXNJQ0pKYm5aaGJHbGtJaXdnSWxObGRIUnBibWR6SWl3Z0lrbHVkbUZzYVdSSmJuUmxjblpoYkVWeWNtOXlJaXdnSW1KMWFXeDBVM1JoY25RaUxDQWlabkpwWlc1a2JIbEVZWFJsVkdsdFpTSXNJQ0ppZFdsc2RFVnVaQ0lzSUNKMllXeHBaR0YwWlVWeWNtOXlJaXdnSW1SMWNtRjBhVzl1SWl3Z0ltUjFjaUlzSUNKRWRYSmhkR2x2YmlJc0lDSmtkQ0lzSUNKMFpYaDBJaXdnSW05d2RITWlMQ0FpY3lJc0lDSmxJaXdnSW5OMFlYSjBTWE5XWVd4cFpDSXNJQ0pFWVhSbFZHbHRaU0lzSUNKbGJtUkpjMVpoYkdsa0lpd2dJbThpTENBaWRXNXBkQ0lzSUNKa1lYUmxWR2x0WlNJc0lDSmtZWFJsVkdsdFpYTWlMQ0FpYzI5eWRHVmtJaXdnSW1RaUxDQWljbVZ6ZFd4MGN5SXNJQ0poWkdSbFpDSXNJQ0p1WlhoMElpd2dJbWxrZUNJc0lDSjRJaXdnSW01MWJXSmxjazltVUdGeWRITWlMQ0FpYjNSb1pYSWlMQ0FpYVc1MFpYSjJZV3h6SWl3Z0ltWnZkVzVrSWl3Z0ltWnBibUZzSWl3Z0ltRWlMQ0FpWWlJc0lDSnpiMlpoY2lJc0lDSmpkWEp5Wlc1MElpd2dJbWwwWlcwaUxDQWlZM1Z5Y21WdWRFTnZkVzUwSWl3Z0ltVnVaSE1pTENBaWFTSXNJQ0ptYkdGMGRHVnVaV1FpTENBaVlYSnlJaXdnSW1SaGRHVkdiM0p0WVhRaUxDQWljMlZ3WVhKaGRHOXlJaXdnSW0xaGNFWnVJaXdnSWtsdVptOGlMQ0FpZW05dVpTSXNJQ0pUWlhSMGFXNW5jeUlzSUNKd2NtOTBieUlzSUNKRVlYUmxWR2x0WlNJc0lDSkpRVTVCV205dVpTSXNJQ0pwYm5CMWRDSXNJQ0p1YjNKdFlXeHBlbVZhYjI1bElpd2dJbXhsYm1kMGFDSXNJQ0pzYjJOaGJHVWlMQ0FpYm5WdFltVnlhVzVuVTNsemRHVnRJaXdnSW14dlkwOWlhaUlzSUNKdmRYUndkWFJEWVd4bGJtUmhjaUlzSUNKTWIyTmhiR1VpTENBaWFHRnpVbVZzWVhScGRtVWlMQ0FpWkdGNVJHbG1aaUlzSUNKbFlYSnNhV1Z5SWl3Z0lteGhkR1Z5SWl3Z0luVjBZMFJoZVZOMFlYSjBJaXdnSW1SMElpd2dJbTF6SWl3Z0lrUjFjbUYwYVc5dUlpd2dJbWhwWjJoUGNtUmxja1JwWm1aeklpd2dJbU4xY25OdmNpSXNJQ0oxYm1sMGN5SXNJQ0prYVdabVpYSnpJaXdnSW1JaUxDQWlaR0Y1Y3lJc0lDSnlaWE4xYkhSeklpd2dJbXh2ZDJWemRFOXlaR1Z5SWl3Z0ltaHBaMmhYWVhSbGNpSXNJQ0oxYm1sMElpd2dJbVJwWm1abGNpSXNJQ0prWld4MFlTSXNJQ0prYVdabVgyUmxabUYxYkhRaUxDQWliM0IwY3lJc0lDSnlaVzFoYVc1cGJtZE5hV3hzYVhNaUxDQWliRzkzWlhKUGNtUmxjbFZ1YVhSeklpd2dJblVpTENBaVpIVnlZWFJwYjI0aUxDQWliblZ0WW1WeWFXNW5VM2x6ZEdWdGN5SXNJQ0p1ZFcxaVpYSnBibWRUZVhOMFpXMXpWVlJHTVRZaUxDQWlhR0Z1YVdSbFkwTm9ZWEp6SWl3Z0luQmhjbk5sUkdsbmFYUnpJaXdnSW5OMGNpSXNJQ0oyWVd4MVpTSXNJQ0pwSWl3Z0ltTnZaR1VpTENBaWEyVjVJaXdnSW0xcGJpSXNJQ0p0WVhnaUxDQWlaR2xuYVhSU1pXZGxlQ0lzSUNKdWRXMWlaWEpwYm1kVGVYTjBaVzBpTENBaVlYQndaVzVrSWl3Z0lrMUpVMU5KVGtkZlJsUlFJaXdnSW1sdWRGVnVhWFFpTENBaWNtVm5aWGdpTENBaWNHOXpkQ0lzSUNKcElpd2dJbk1pTENBaWNHRnljMlZFYVdkcGRITWlMQ0FpVGtKVFVDSXNJQ0p6Y0dGalpVOXlUa0pUVUNJc0lDSnpjR0ZqWlU5eVRrSlRVRkpsWjBWNGNDSXNJQ0ptYVhoTWFYTjBVbVZuWlhnaUxDQWljM1J5YVhCSmJuTmxibk5wZEdsMmFYUnBaWE1pTENBaWIyNWxUMllpTENBaWMzUnlhVzVuY3lJc0lDSnpkR0Z5ZEVsdVpHVjRJaXdnSW05bVpuTmxkQ0lzSUNKbmNtOTFjSE1pTENBaWFDSXNJQ0p0SWl3Z0luTnBaMjVsWkU5bVpuTmxkQ0lzSUNKemFXMXdiR1VpTENBaVpYTmpZWEJsVkc5clpXNGlMQ0FpZG1Gc2RXVWlMQ0FpZFc1cGRFWnZjbFJ2YTJWdUlpd2dJblJ2YTJWdUlpd2dJbXh2WXlJc0lDSnZibVVpTENBaVpHbG5hWFJTWldkbGVDSXNJQ0owZDI4aUxDQWlkR2h5WldVaUxDQWlabTkxY2lJc0lDSnphWGdpTENBaWIyNWxUM0pVZDI4aUxDQWliMjVsVkc5VWFISmxaU0lzSUNKdmJtVlViMU5wZUNJc0lDSnZibVZVYjA1cGJtVWlMQ0FpZEhkdlZHOUdiM1Z5SWl3Z0ltWnZkWEpVYjFOcGVDSXNJQ0pzYVhSbGNtRnNJaXdnSW5RaUxDQWlkVzVwZENJc0lDSjFiblJ5ZFc1allYUmxXV1ZoY2lJc0lDSndZWEowVkhsd1pWTjBlV3hsVkc5VWIydGxibFpoYkNJc0lDSjBiMnRsYmtadmNsQmhjblFpTENBaWNHRnlkQ0lzSUNKc2IyTmhiR1VpTENBaVptOXliV0YwVDNCMGN5SXNJQ0owZVhCbElpd2dJbk4wZVd4bElpd2dJblpoYkNJc0lDSmlkV2xzWkZKbFoyVjRJaXdnSW5WdWFYUnpJaXdnSW5VaUxDQWlaaUlzSUNKdFlYUmphQ0lzSUNKcGJuQjFkQ0lzSUNKb1lXNWtiR1Z5Y3lJc0lDSnRZWFJqYUdWeklpd2dJbUZzYkNJc0lDSnRZWFJqYUVsdVpHVjRJaXdnSW1oaGMwOTNibEJ5YjNCbGNuUjVJaXdnSW1SaGRHVlVhVzFsUm5KdmJVMWhkR05vWlhNaUxDQWlkRzlHYVdWc1pDSXNJQ0o2YjI1bElpd2dJbk53WldOcFptbGpUMlptYzJWMElpd2dJbWx6Vlc1a1pXWnBibVZrSWl3Z0lrbEJUa0ZhYjI1bElpd2dJa1pwZUdWa1QyWm1jMlYwV205dVpTSXNJQ0p3WVhKelpVMXBiR3hwY3lJc0lDSnlJaXdnSW1zaUxDQWlaSFZ0YlhsRVlYUmxWR2x0WlVOaFkyaGxJaXdnSW1kbGRFUjFiVzE1UkdGMFpWUnBiV1VpTENBaVJHRjBaVlJwYldVaUxDQWliV0Y1WW1WRmVIQmhibVJOWVdOeWIxUnZhMlZ1SWl3Z0lrWnZjbTFoZEhSbGNpSXNJQ0owYjJ0bGJuTWlMQ0FpY0NJc0lDSmxlSEJoYm1STllXTnliMVJ2YTJWdWN5SXNJQ0psZUhCc1lXbHVSbkp2YlZSdmEyVnVjeUlzSUNKbWIzSnRZWFFpTENBaVpHbHpjWFZoYkdsbWVXbHVaMVZ1YVhRaUxDQWljbVZuWlhoVGRISnBibWNpTENBaWNtRjNUV0YwWTJobGN5SXNJQ0p5WlhOMWJIUWlMQ0FpUTI5dVpteHBZM1JwYm1kVGNHVmphV1pwWTJGMGFXOXVSWEp5YjNJaUxDQWljR0Z5YzJWR2NtOXRWRzlyWlc1eklpd2dJbWx1ZG1Gc2FXUlNaV0Z6YjI0aUxDQWlibTl1VEdWaGNFeGhaR1JsY2lJc0lDSnNaV0Z3VEdGa1pHVnlJaXdnSW5WdWFYUlBkWFJQWmxKaGJtZGxJaXdnSW5WdWFYUWlMQ0FpZG1Gc2RXVWlMQ0FpU1c1MllXeHBaQ0lzSUNKa1lYbFBabGRsWldzaUxDQWllV1ZoY2lJc0lDSnRiMjUwYUNJc0lDSmtZWGtpTENBaVpDSXNJQ0pxY3lJc0lDSmpiMjF3ZFhSbFQzSmthVzVoYkNJc0lDSnBjMHhsWVhCWlpXRnlJaXdnSW5WdVkyOXRjSFYwWlU5eVpHbHVZV3dpTENBaWIzSmthVzVoYkNJc0lDSjBZV0pzWlNJc0lDSnRiMjUwYURBaUxDQWlaM0psWjI5eWFXRnVWRzlYWldWcklpd2dJbWR5WldkUFltb2lMQ0FpZDJWbGEyUmhlU0lzSUNKM1pXVnJUblZ0WW1WeUlpd2dJbmRsWld0WlpXRnlJaXdnSW5kbFpXdHpTVzVYWldWcldXVmhjaUlzSUNKZlgzTndjbVZoWkZaaGJIVmxjeUlzSUNKMGFXMWxUMkpxWldOMElpd2dJbmRsWld0VWIwZHlaV2R2Y21saGJpSXNJQ0ozWldWclJHRjBZU0lzSUNKM1pXVnJaR0Y1VDJaS1lXNDBJaXdnSW5sbFlYSkpia1JoZVhNaUxDQWlaR0Y1YzBsdVdXVmhjaUlzSUNKbmNtVm5iM0pwWVc1VWIwOXlaR2x1WVd3aUxDQWlaM0psWjBSaGRHRWlMQ0FpYjNKa2FXNWhiRlJ2UjNKbFoyOXlhV0Z1SWl3Z0ltOXlaR2x1WVd4RVlYUmhJaXdnSW1oaGMwbHVkbUZzYVdSWFpXVnJSR0YwWVNJc0lDSnZZbW9pTENBaWRtRnNhV1JaWldGeUlpd2dJbWx6U1c1MFpXZGxjaUlzSUNKMllXeHBaRmRsWldzaUxDQWlhVzUwWldkbGNrSmxkSGRsWlc0aUxDQWlkbUZzYVdSWFpXVnJaR0Y1SWl3Z0ltaGhjMGx1ZG1Gc2FXUlBjbVJwYm1Gc1JHRjBZU0lzSUNKMllXeHBaRTl5WkdsdVlXd2lMQ0FpYUdGelNXNTJZV3hwWkVkeVpXZHZjbWxoYmtSaGRHRWlMQ0FpZG1Gc2FXUk5iMjUwYUNJc0lDSjJZV3hwWkVSaGVTSXNJQ0prWVhselNXNU5iMjUwYUNJc0lDSm9ZWE5KYm5aaGJHbGtWR2x0WlVSaGRHRWlMQ0FpYUc5MWNpSXNJQ0p0YVc1MWRHVWlMQ0FpYzJWamIyNWtJaXdnSW0xcGJHeHBjMlZqYjI1a0lpd2dJblpoYkdsa1NHOTFjaUlzSUNKMllXeHBaRTFwYm5WMFpTSXNJQ0oyWVd4cFpGTmxZMjl1WkNJc0lDSjJZV3hwWkUxcGJHeHBjMlZqYjI1a0lpd2dJa2xPVmtGTVNVUWlMQ0FpVFVGWVgwUkJWRVVpTENBaWRXNXpkWEJ3YjNKMFpXUmFiMjVsSWl3Z0lucHZibVVpTENBaVNXNTJZV3hwWkNJc0lDSndiM056YVdKc2VVTmhZMmhsWkZkbFpXdEVZWFJoSWl3Z0ltUjBJaXdnSW1keVpXZHZjbWxoYmxSdlYyVmxheUlzSUNKamJHOXVaU0lzSUNKcGJuTjBJaXdnSW1Gc2RITWlMQ0FpWTNWeWNtVnVkQ0lzSUNKRVlYUmxWR2x0WlNJc0lDSmZYM053Y21WaFpGQnliM0J6SWl3Z0lsOWZjM0J5WldGa1ZtRnNkV1Z6SWl3Z0ltWnBlRTltWm5ObGRDSXNJQ0pzYjJOaGJGUlRJaXdnSW04aUxDQWlkSG9pTENBaWRYUmpSM1ZsYzNNaUxDQWlieklpTENBaWJ6TWlMQ0FpZEhOVWIwOWlhaUlzSUNKMGN5SXNJQ0p2Wm1aelpYUWlMQ0FpWkNJc0lDSnZZbXBVYjFSVElpd2dJbTlpYWlJc0lDSnZZbXBVYjB4dlkyRnNWRk1pTENBaVlXUnFkWE4wVkdsdFpTSXNJQ0prZFhJaUxDQWliMUJ5WlNJc0lDSjVaV0Z5SWl3Z0ltMXZiblJvSWl3Z0ltTWlMQ0FpWkdGNWMwbHVUVzl1ZEdnaUxDQWliV2xzYkdselZHOUJaR1FpTENBaVJIVnlZWFJwYjI0aUxDQWljR0Z5YzJWRVlYUmhWRzlFWVhSbFZHbHRaU0lzSUNKd1lYSnpaV1FpTENBaWNHRnljMlZrV205dVpTSXNJQ0p2Y0hSeklpd2dJbVp2Y20xaGRDSXNJQ0owWlhoMElpd2dJbk53WldOcFptbGpUMlptYzJWMElpd2dJbk5sZEZwdmJtVWlMQ0FpYVc1MFpYSndjbVYwWVhScGIyNWFiMjVsSWl3Z0luUnZWR1ZqYUVadmNtMWhkQ0lzSUNKaGJHeHZkMW9pTENBaVJtOXliV0YwZEdWeUlpd2dJa3h2WTJGc1pTSXNJQ0owYjBsVFQwUmhkR1VpTENBaVpYaDBaVzVrWldRaUxDQWliRzl1WjBadmNtMWhkQ0lzSUNKd1lXUlRkR0Z5ZENJc0lDSjBiMGxUVDFScGJXVWlMQ0FpYzNWd2NISmxjM05UWldOdmJtUnpJaXdnSW5OMWNIQnlaWE56VFdsc2JHbHpaV052Ym1Seklpd2dJbWx1WTJ4MVpHVlBabVp6WlhRaUxDQWlaWGgwWlc1a1pXUmFiMjVsSWl3Z0ltUmxabUYxYkhSVmJtbDBWbUZzZFdWeklpd2dJbVJsWm1GMWJIUlhaV1ZyVlc1cGRGWmhiSFZsY3lJc0lDSmtaV1poZFd4MFQzSmthVzVoYkZWdWFYUldZV3gxWlhNaUxDQWliM0prWlhKbFpGVnVhWFJ6SWl3Z0ltOXlaR1Z5WldSWFpXVnJWVzVwZEhNaUxDQWliM0prWlhKbFpFOXlaR2x1WVd4VmJtbDBjeUlzSUNKdWIzSnRZV3hwZW1WVmJtbDBJaXdnSW5WdWFYUWlMQ0FpYm05eWJXRnNhWHBsWkNJc0lDSkpiblpoYkdsa1ZXNXBkRVZ5Y205eUlpd2dJbkYxYVdOclJGUWlMQ0FpYm05eWJXRnNhWHBsV205dVpTSXNJQ0pUWlhSMGFXNW5jeUlzSUNKc2IyTWlMQ0FpZEhOT2IzY2lMQ0FpYVhOVmJtUmxabWx1WldRaUxDQWlkU0lzSUNKcGJuWmhiR2xrSWl3Z0ltaGhjMGx1ZG1Gc2FXUkhjbVZuYjNKcFlXNUVZWFJoSWl3Z0ltaGhjMGx1ZG1Gc2FXUlVhVzFsUkdGMFlTSXNJQ0p2Wm1aelpYUlFjbTkyYVhNaUxDQWlaR2xtWmxKbGJHRjBhWFpsSWl3Z0luTjBZWEowSWl3Z0ltVnVaQ0lzSUNKeWIzVnVaQ0lzSUNKeWIzVnVaRlJ2SWl3Z0ltUnBabVpsY2lJc0lDSmpiM1Z1ZENJc0lDSnNZWE4wVDNCMGN5SXNJQ0poY21kTWFYTjBJaXdnSW1GeVozTWlMQ0FpWDBSaGRHVlVhVzFsSWl3Z0ltTnZibVpwWnlJc0lDSnZkQ0lzSUNKa1lYa2lMQ0FpYUc5MWNpSXNJQ0p0YVc1MWRHVWlMQ0FpYzJWamIyNWtJaXdnSW0xcGJHeHBjMlZqYjI1a0lpd2dJa1pwZUdWa1QyWm1jMlYwV205dVpTSXNJQ0prWVhSbElpd2dJbTl3ZEdsdmJuTWlMQ0FpYVhORVlYUmxJaXdnSW5wdmJtVlViMVZ6WlNJc0lDSnRhV3hzYVhObFkyOXVaSE1pTENBaWFYTk9kVzFpWlhJaUxDQWlTVzUyWVd4cFpFRnlaM1Z0Wlc1MFJYSnliM0lpTENBaWMyVmpiMjVrY3lJc0lDSnViM0p0WVd4cGVtVlBZbXBsWTNRaUxDQWlZMjl1ZEdGcGJuTlBjbVJwYm1Gc0lpd2dJbU52Ym5SaGFXNXpSM0psWjI5eVdXVmhjaUlzSUNKamIyNTBZV2x1YzBkeVpXZHZjazFFSWl3Z0ltTnZiblJoYVc1elIzSmxaMjl5SWl3Z0ltUmxabWx1YVhSbFYyVmxhMFJsWmlJc0lDSkRiMjVtYkdsamRHbHVaMU53WldOcFptbGpZWFJwYjI1RmNuSnZjaUlzSUNKMWMyVlhaV1ZyUkdGMFlTSXNJQ0oxYm1sMGN5SXNJQ0prWldaaGRXeDBWbUZzZFdWeklpd2dJbTlpYWs1dmR5SXNJQ0puY21WbmIzSnBZVzVVYjA5eVpHbHVZV3dpTENBaVptOTFibVJHYVhKemRDSXNJQ0oySWl3Z0ltaHBaMmhsY2s5eVpHVnlTVzUyWVd4cFpDSXNJQ0pvWVhOSmJuWmhiR2xrVjJWbGEwUmhkR0VpTENBaWFHRnpTVzUyWVd4cFpFOXlaR2x1WVd4RVlYUmhJaXdnSW1keVpXZHZjbWxoYmlJc0lDSjNaV1ZyVkc5SGNtVm5iM0pwWVc0aUxDQWliM0prYVc1aGJGUnZSM0psWjI5eWFXRnVJaXdnSW5SelJtbHVZV3dpTENBaWIyWm1jMlYwUm1sdVlXd2lMQ0FpZG1Gc2N5SXNJQ0p3WVhKelpVbFRUMFJoZEdVaUxDQWljR0Z5YzJWU1JrTXlPREl5UkdGMFpTSXNJQ0p3WVhKelpVaFVWRkJFWVhSbElpd2dJbVp0ZENJc0lDSnNiMk5oYkdVaUxDQWliblZ0WW1WeWFXNW5VM2x6ZEdWdElpd2dJbXh2WTJGc1pWUnZWWE5sSWl3Z0luQmhjbk5sUm5KdmJWUnZhMlZ1Y3lJc0lDSndZWEp6WlZOUlRDSXNJQ0p5WldGemIyNGlMQ0FpWlhod2JHRnVZWFJwYjI0aUxDQWlTVzUyWVd4cFpFUmhkR1ZVYVcxbFJYSnliM0lpTENBaVNXNW1ieUlzSUNKcGMweGxZWEJaWldGeUlpd2dJbVJoZVhOSmJsbGxZWElpTENBaWQyVmxhM05KYmxkbFpXdFpaV0Z5SWl3Z0ltTmhiR1Z1WkdGeUlpd2dJbXRsWlhCTWIyTmhiRlJwYldVaUxDQWlhMlZsY0VOaGJHVnVaR0Z5VkdsdFpTSXNJQ0p1WlhkVVV5SXNJQ0p2Wm1aelpYUkhkV1Z6Y3lJc0lDSmhjMDlpYWlJc0lDSnZkWFJ3ZFhSRFlXeGxibVJoY2lJc0lDSjJZV3gxWlhNaUxDQWljMlYwZEdsdVoxZGxaV3RUZEhWbVppSXNJQ0p0YVhobFpDSXNJQ0prZFhKaGRHbHZiaUlzSUNKdWIzSnRZV3hwZW1Wa1ZXNXBkQ0lzSUNKeElpd2dJbVp2Y20xaGRFOXdkSE1pTENBaVJFRlVSVjlUU0U5U1ZDSXNJQ0psZUhRaUxDQWlhVzVqYkhWa1pWQnlaV1pwZUNJc0lDSnBibU5zZFdSbFdtOXVaU0lzSUNKcGJtTnNkV1JsVDJabWMyVjBVM0JoWTJVaUxDQWlZbUZ6WlNJc0lDSnZkR2hsY2tSaGRHVlVhVzFsSWl3Z0ltUjFjazl3ZEhNaUxDQWliV0Y1WW1WQmNuSmhlU0lzSUNKdmRHaGxja2x6VEdGMFpYSWlMQ0FpWldGeWJHbGxjaUlzSUNKc1lYUmxjaUlzSUNKa2FXWm1aV1FpTENBaVpHbG1abDlrWldaaGRXeDBJaXdnSWtsdWRHVnlkbUZzSWl3Z0ltbHVjSFYwVFhNaUxDQWlZV1JxZFhOMFpXUlViMXB2Ym1VaUxDQWliM1JvWlhJaUxDQWljR0ZrWkdsdVp5SXNJQ0prWVhSbFZHbHRaWE1pTENBaVltVnpkRUo1SWl3Z0lta2lMQ0FpWlhod2JHRnBia1p5YjIxVWIydGxibk1pTENBaVJFRlVSVjlOUlVRaUxDQWlSRUZVUlY5TlJVUmZWMGxVU0Y5WFJVVkxSRUZaSWl3Z0lrUkJWRVZmUmxWTVRDSXNJQ0pFUVZSRlgwaFZSMFVpTENBaVZFbE5SVjlUU1UxUVRFVWlMQ0FpVkVsTlJWOVhTVlJJWDFORlEwOU9SRk1pTENBaVZFbE5SVjlYU1ZSSVgxTklUMUpVWDA5R1JsTkZWQ0lzSUNKVVNVMUZYMWRKVkVoZlRFOU9SMTlQUmtaVFJWUWlMQ0FpVkVsTlJWOHlORjlUU1UxUVRFVWlMQ0FpVkVsTlJWOHlORjlYU1ZSSVgxTkZRMDlPUkZNaUxDQWlWRWxOUlY4eU5GOVhTVlJJWDFOSVQxSlVYMDlHUmxORlZDSXNJQ0pVU1UxRlh6STBYMWRKVkVoZlRFOU9SMTlQUmtaVFJWUWlMQ0FpUkVGVVJWUkpUVVZmVTBoUFVsUWlMQ0FpUkVGVVJWUkpUVVZmVTBoUFVsUmZWMGxVU0Y5VFJVTlBUa1JUSWl3Z0lrUkJWRVZVU1UxRlgwMUZSQ0lzSUNKRVFWUkZWRWxOUlY5TlJVUmZWMGxVU0Y5VFJVTlBUa1JUSWl3Z0lrUkJWRVZVU1UxRlgwMUZSRjlYU1ZSSVgxZEZSVXRFUVZraUxDQWlSRUZVUlZSSlRVVmZSbFZNVENJc0lDSkVRVlJGVkVsTlJWOUdWVXhNWDFkSlZFaGZVMFZEVDA1RVV5SXNJQ0pFUVZSRlZFbE5SVjlJVlVkRklpd2dJa1JCVkVWVVNVMUZYMGhWUjBWZlYwbFVTRjlUUlVOUFRrUlRJaXdnSW1aeWFXVnVaR3g1UkdGMFpWUnBiV1VpTENBaVpHRjBaVlJwYldWcGMyZ2lMQ0FpVUNJc0lDSmxiVzlxYVY5eVpXZGxlRjlrWldaaGRXeDBJaXdnSW01dmNtMWhiR2w2WlVSMWNtRjBhVzl1SWl3Z0ltUjFjaUlzSUNKeVpXNWtaWEpOYVc1cGJXRnNSR0YwWlNJc0lDSjBhVzFsSWl3Z0ltUmhkR1ZHYjNKdFlYUWlMQ0FpWkdGMFpWUnBiV1ZHYjNKdFlYUWlMQ0FpYkc5allXeGxJaXdnSW5KbGJtUmxjazFwYm1sdFlXeEVkWEpoZEdsdmJpSXNJQ0prZFhJaUxDQWlibTl5YldGc2FYcGxSSFZ5WVhScGIyNGlMQ0FpY21WemRXeDBJaXdnSW1kbGRFWnBiR1ZVYVhSc1pTSXNJQ0p3WVhSb0lpd2dJbWRsZEVWNGRHVnVjMmx2YmlJc0lDSklSVUZFUlZKZlEwRk9UMDVKUTBGTVNWcEZVaUlzSUNKbGJXOXFhVjl5WldkbGVGOWtaV1poZFd4MElpd2dJbDhpTENBaWNtVnpkV3gwSWl3Z0ltNXZjbTFoYkdsNlpVaGxZV1JsY2tadmNreHBibXNpTENBaWFHVmhaR1Z5SWl3Z0lreHBibXNpTENBaVgweHBibXNpTENBaWNHRjBhQ0lzSUNKbGJXSmxaQ0lzSUNKa2FYTndiR0Y1SWl3Z0lteHBibXR3WVhSb0lpd2dJbk53YkdsMElpd2dJbWhsWVdSbGNpSXNJQ0p1YjNKdFlXeHBlbVZJWldGa1pYSkdiM0pNYVc1cklpd2dJbUpzYjJOclNXUWlMQ0FpYjJKcVpXTjBJaXdnSW5KaGQyeHBibXNpTENBaWJHbHVheUlzSUNKemNHeHBkRTl1Vlc1bGMyTmhjR1ZrVUdsd1pTSXNJQ0ptYVdWc1pITWlMQ0FpWW14dlkyc2lMQ0FpYjNSb1pYSWlMQ0FpY21WemRXeDBJaXdnSW1kbGRFWnBiR1ZVYVhSc1pTSXNJQ0pmWVNJc0lDSmZZaUlzSUNKbGMyTmhjR1ZrSWl3Z0luQnBjR1VpTENBaVFVeEpRVk1pTENBaVJFOURJaXdnSWsxQlVDSXNJQ0pRUVVsU0lpd2dJbE5EUVV4QlVpSXNJQ0pUUlZFaUxDQWlUazlFUlY5VVdWQkZJaXdnSW1selFXeHBZWE1pTENBaWJtOWtaU0lzSUNKcGMwUnZZM1Z0Wlc1MElpd2dJbWx6VFdGd0lpd2dJbWx6VUdGcGNpSXNJQ0pwYzFOallXeGhjaUlzSUNKcGMxTmxjU0lzSUNKcGMwTnZiR3hsWTNScGIyNGlMQ0FpYVhOT2IyUmxJaXdnSW1oaGMwRnVZMmh2Y2lJc0lDSkNVa1ZCU3lJc0lDSlRTMGxRSWl3Z0lsSkZUVTlXUlNJc0lDSjJhWE5wZENJc0lDSnViMlJsSWl3Z0luWnBjMmwwYjNJaUxDQWlkbWx6YVhSdmNsOGlMQ0FpYVc1cGRGWnBjMmwwYjNJaUxDQWlhWE5FYjJOMWJXVnVkQ0lzSUNKMmFYTnBkRjhpTENBaWEyVjVJaXdnSW5CaGRHZ2lMQ0FpWTNSeWJDSXNJQ0pqWVd4c1ZtbHphWFJ2Y2lJc0lDSnBjMDV2WkdVaUxDQWlhWE5RWVdseUlpd2dJbkpsY0d4aFkyVk9iMlJsSWl3Z0ltbHpRMjlzYkdWamRHbHZiaUlzSUNKamFTSXNJQ0pqYXlJc0lDSmpkaUlzSUNKMmFYTnBkRUZ6ZVc1aklpd2dJblpwYzJsMFFYTjVibU5mSWl3Z0lsOWhJaXdnSWw5aUlpd2dJbDlqSWl3Z0lsOWtJaXdnSWw5bElpd2dJbWx6VFdGd0lpd2dJbWx6VTJWeElpd2dJbWx6VTJOaGJHRnlJaXdnSW1selFXeHBZWE1pTENBaWNHRnlaVzUwSWl3Z0luQjBJaXdnSW1WelkyRndaVU5vWVhKeklpd2dJbVZ6WTJGd1pWUmhaMDVoYldVaUxDQWlkRzRpTENBaVkyZ2lMQ0FpUkdseVpXTjBhWFpsY3lJc0lDSmZSR2x5WldOMGFYWmxjeUlzSUNKNVlXMXNJaXdnSW5SaFozTWlMQ0FpWTI5d2VTSXNJQ0p5WlhNaUxDQWliR2x1WlNJc0lDSnZia1Z5Y205eUlpd2dJbkJoY25Seklpd2dJbTVoYldVaUxDQWlhR0Z1Wkd4bElpd2dJbkJ5WldacGVDSXNJQ0oyWlhKemFXOXVJaXdnSW1selZtRnNhV1FpTENBaWMyOTFjbU5sSWl3Z0luWmxjbUpoZEdsdElpd2dJbk4xWm1acGVDSXNJQ0psY25KdmNpSXNJQ0owWVdjaUxDQWlaRzlqSWl3Z0lteHBibVZ6SWl3Z0luUmhaMFZ1ZEhKcFpYTWlMQ0FpZEdGblRtRnRaWE1pTENBaWFYTk9iMlJsSWl3Z0luWnBjMmwwSWl3Z0lsOXJaWGtpTENBaWJtOWtaU0lzSUNKaGJtTm9iM0pKYzFaaGJHbGtJaXdnSW1GdVkyaHZjaUlzSUNKdGMyY2lMQ0FpWVc1amFHOXlUbUZ0WlhNaUxDQWljbTl2ZENJc0lDSmhibU5vYjNKeklpd2dJblpwYzJsMElpd2dJbDlyWlhraUxDQWlibTlrWlNJc0lDSm1hVzVrVG1WM1FXNWphRzl5SWl3Z0luQnlaV1pwZUNJc0lDSmxlR05zZFdSbElpd2dJbWtpTENBaWJtRnRaU0lzSUNKamNtVmhkR1ZPYjJSbFFXNWphRzl5Y3lJc0lDSmtiMk1pTENBaVlXeHBZWE5QWW1wbFkzUnpJaXdnSW5OdmRYSmpaVTlpYW1WamRITWlMQ0FpY0hKbGRrRnVZMmh2Y25NaUxDQWljMjkxY21ObElpd2dJbkpsWmlJc0lDSnBjMU5qWVd4aGNpSXNJQ0pwYzBOdmJHeGxZM1JwYjI0aUxDQWlaWEp5YjNJaUxDQWlZWEJ3YkhsU1pYWnBkbVZ5SWl3Z0luSmxkbWwyWlhJaUxDQWliMkpxSWl3Z0ltdGxlU0lzSUNKMllXd2lMQ0FpYVNJc0lDSnNaVzRpTENBaWRqQWlMQ0FpZGpFaUxDQWlheUlzSUNKMGIwcFRJaXdnSW5aaGJIVmxJaXdnSW1GeVp5SXNJQ0pqZEhnaUxDQWlkaUlzSUNKcElpd2dJbWhoYzBGdVkyaHZjaUlzSUNKa1lYUmhJaXdnSW5KbGN5SXNJQ0pPYjJSbFFtRnpaU0lzSUNKMGVYQmxJaXdnSWs1UFJFVmZWRmxRUlNJc0lDSmpiM0I1SWl3Z0ltUnZZeUlzSUNKdFlYQkJjMDFoY0NJc0lDSnRZWGhCYkdsaGMwTnZkVzUwSWl3Z0ltOXVRVzVqYUc5eUlpd2dJbkpsZG1sMlpYSWlMQ0FpYVhORWIyTjFiV1Z1ZENJc0lDSmpkSGdpTENBaWNtVnpJaXdnSW5SdlNsTWlMQ0FpWTI5MWJuUWlMQ0FpWVhCd2JIbFNaWFpwZG1WeUlpd2dJa0ZzYVdGeklpd2dJazV2WkdWQ1lYTmxJaXdnSW5OdmRYSmpaU0lzSUNKQlRFbEJVeUlzSUNKa2IyTWlMQ0FpWm05MWJtUWlMQ0FpZG1semFYUWlMQ0FpWDJ0bGVTSXNJQ0p1YjJSbElpd2dJbDloY21jaUxDQWlZM1I0SWl3Z0ltRnVZMmh2Y25NaUxDQWliV0Y0UVd4cFlYTkRiM1Z1ZENJc0lDSnRjMmNpTENBaVpHRjBZU0lzSUNKMGIwcFRJaXdnSW1kbGRFRnNhV0Z6UTI5MWJuUWlMQ0FpWDI5dVEyOXRiV1Z1ZENJc0lDSmZiMjVEYUc5dGNFdGxaWEFpTENBaWMzSmpJaXdnSW1GdVkyaHZja2x6Vm1Gc2FXUWlMQ0FpYVhOQmJHbGhjeUlzSUNKaGJtTm9iM0lpTENBaWFYTkRiMnhzWldOMGFXOXVJaXdnSW1OdmRXNTBJaXdnSW1sMFpXMGlMQ0FpWXlJc0lDSnBjMUJoYVhJaUxDQWlhMk1pTENBaWRtTWlMQ0FpYVhOVFkyRnNZWEpXWVd4MVpTSXNJQ0oyWVd4MVpTSXNJQ0pUWTJGc1lYSWlMQ0FpVG05a1pVSmhjMlVpTENBaVUwTkJURUZTSWl3Z0ltRnlaeUlzSUNKamRIZ2lMQ0FpZEc5S1V5SXNJQ0prWldaaGRXeDBWR0ZuVUhKbFptbDRJaXdnSW1acGJtUlVZV2RQWW1wbFkzUWlMQ0FpZG1Gc2RXVWlMQ0FpZEdGblRtRnRaU0lzSUNKMFlXZHpJaXdnSWw5aElpd2dJbTFoZEdOb0lpd2dJblFpTENBaWRHRm5UMkpxSWl3Z0ltTnlaV0YwWlU1dlpHVWlMQ0FpWTNSNElpd2dJbDlpSWl3Z0lsOWpJaXdnSW1selJHOWpkVzFsYm5RaUxDQWlhWE5PYjJSbElpd2dJbWx6VUdGcGNpSXNJQ0p0WVhBaUxDQWlUVUZRSWl3Z0ltRnNhV0Z6UkhWd2JHbGpZWFJsVDJKcVpXTjBjeUlzSUNKdmJrRnVZMmh2Y2lJc0lDSnZibFJoWjA5aWFpSXNJQ0p6WTJobGJXRWlMQ0FpYzI5MWNtTmxUMkpxWldOMGN5SXNJQ0p5WldZaUxDQWlRV3hwWVhNaUxDQWlibTlrWlNJc0lDSlRZMkZzWVhJaUxDQWlVMFZSSWl3Z0ltTnZiR3hsWTNScGIyNUdjbTl0VUdGMGFDSXNJQ0p6WTJobGJXRWlMQ0FpY0dGMGFDSXNJQ0oyWVd4MVpTSXNJQ0oySWl3Z0lta2lMQ0FpYXlJc0lDSmhJaXdnSW1OeVpXRjBaVTV2WkdVaUxDQWlhWE5GYlhCMGVWQmhkR2dpTENBaVEyOXNiR1ZqZEdsdmJpSXNJQ0pPYjJSbFFtRnpaU0lzSUNKMGVYQmxJaXdnSW1OdmNIa2lMQ0FpYVhRaUxDQWlhWE5PYjJSbElpd2dJbWx6VUdGcGNpSXNJQ0pyWlhraUxDQWljbVZ6ZENJc0lDSnViMlJsSWl3Z0ltbHpRMjlzYkdWamRHbHZiaUlzSUNKclpXVndVMk5oYkdGeUlpd2dJbWx6VTJOaGJHRnlJaXdnSW1Gc2JHOTNVMk5oYkdGeUlpd2dJbTRpTENBaWMzUnlhVzVuYVdaNVEyOXRiV1Z1ZENJc0lDSnpkSElpTENBaWFXNWtaVzUwUTI5dGJXVnVkQ0lzSUNKamIyMXRaVzUwSWl3Z0ltbHVaR1Z1ZENJc0lDSnNhVzVsUTI5dGJXVnVkQ0lzSUNKR1QweEVYMFpNVDFjaUxDQWlSazlNUkY5Q1RFOURTeUlzSUNKR1QweEVYMUZWVDFSRlJDSXNJQ0ptYjJ4a1JteHZkMHhwYm1Weklpd2dJblJsZUhRaUxDQWlhVzVrWlc1MElpd2dJbTF2WkdVaUxDQWlhVzVrWlc1MFFYUlRkR0Z5ZENJc0lDSnNhVzVsVjJsa2RHZ2lMQ0FpYldsdVEyOXVkR1Z1ZEZkcFpIUm9JaXdnSW05dVJtOXNaQ0lzSUNKdmJrOTJaWEptYkc5M0lpd2dJbVZ1WkZOMFpYQWlMQ0FpWm05c1pITWlMQ0FpWlhOallYQmxaRVp2YkdSeklpd2dJbVZ1WkNJc0lDSnpjR3hwZENJc0lDSndjbVYySWl3Z0ltOTJaWEptYkc5M0lpd2dJbWtpTENBaVpYTmpVM1JoY25RaUxDQWlaWE5qUlc1a0lpd2dJbU52Ym5OMWJXVk5iM0psU1c1a1pXNTBaV1JNYVc1bGN5SXNJQ0pqYUNJc0lDSnVaWGgwSWl3Z0ltb2lMQ0FpY21Weklpd2dJbVp2YkdRaUxDQWljM1JoY25RaUxDQWlaMlYwUm05c1pFOXdkR2x2Ym5NaUxDQWlZM1I0SWl3Z0ltbHpRbXh2WTJzaUxDQWlZMjl1ZEdGcGJuTkViMk4xYldWdWRFMWhjbXRsY2lJc0lDSnpkSElpTENBaWJHbHVaVXhsYm1kMGFFOTJaWEpNYVcxcGRDSXNJQ0pzYVc1bFYybGtkR2dpTENBaWFXNWtaVzUwVEdWdVozUm9JaXdnSW14cGJXbDBJaXdnSW5OMGNreGxiaUlzSUNKemRHRnlkQ0lzSUNKa2IzVmliR1ZSZFc5MFpXUlRkSEpwYm1jaUxDQWlkbUZzZFdVaUxDQWlhbk52YmlJc0lDSnBiWEJzYVdOcGRFdGxlU0lzSUNKdGFXNU5kV3gwYVV4cGJtVk1aVzVuZEdnaUxDQWlhVzVrWlc1MElpd2dJbWtpTENBaVkyZ2lMQ0FpWTI5a1pTSXNJQ0ptYjJ4a1JteHZkMHhwYm1Weklpd2dJa1pQVEVSZlVWVlBWRVZFSWl3Z0luTnBibWRzWlZGMWIzUmxaRk4wY21sdVp5SXNJQ0p5WlhNaUxDQWlSazlNUkY5R1RFOVhJaXdnSW5GMWIzUmxaRk4wY21sdVp5SXNJQ0p6YVc1bmJHVlJkVzkwWlNJc0lDSnhjeUlzSUNKb1lYTkViM1ZpYkdVaUxDQWlhR0Z6VTJsdVoyeGxJaXdnSW1Kc2IyTnJSVzVrVG1WM2JHbHVaWE1pTENBaVpTSXNJQ0ppYkc5amExTjBjbWx1WnlJc0lDSmpiMjF0Wlc1MElpd2dJblI1Y0dVaUxDQWliMjVEYjIxdFpXNTBJaXdnSW05dVEyaHZiWEJMWldWd0lpd2dJbUpzYjJOclVYVnZkR1VpTENBaVkyOXRiV1Z1ZEZOMGNtbHVaeUlzSUNKc2FYUmxjbUZzSWl3Z0lsTmpZV3hoY2lJc0lDSmphRzl0Y0NJc0lDSmxibVJUZEdGeWRDSXNJQ0psYm1RaUxDQWlaVzVrVG14UWIzTWlMQ0FpYzNSaGNuUlhhWFJvVTNCaFkyVWlMQ0FpYzNSaGNuUkZibVFpTENBaWMzUmhjblJPYkZCdmN5SXNJQ0pvWldGa1pYSWlMQ0FpWW05a2VTSXNJQ0pHVDB4RVgwSk1UME5MSWl3Z0luQnNZV2x1VTNSeWFXNW5JaXdnSW1sMFpXMGlMQ0FpWVdOMGRXRnNVM1J5YVc1bklpd2dJbWx1WkdWdWRGTjBaWEFpTENBaWFXNUdiRzkzSWl3Z0luUmxjM1FpTENBaWRHRm5JaXdnSWw5aElpd2dJbU52YlhCaGRDSXNJQ0owWVdkeklpd2dJbk4wY21sdVoybG1lVk4wY21sdVp5SXNJQ0p6Y3lJc0lDSmZjM1J5YVc1bmFXWjVJaXdnSWw5MGVYQmxJaXdnSW1SbFptRjFiSFJMWlhsVWVYQmxJaXdnSW1SbFptRjFiSFJUZEhKcGJtZFVlWEJsSWl3Z0luUWlMQ0FpWTNKbFlYUmxVM1J5YVc1bmFXWjVRMjl1ZEdWNGRDSXNJQ0prYjJNaUxDQWliM0IwYVc5dWN5SXNJQ0p2Y0hRaUxDQWljM1J5YVc1bmFXWjVRMjl0YldWdWRDSXNJQ0pwYmtac2IzY2lMQ0FpWjJWMFZHRm5UMkpxWldOMElpd2dJblJoWjNNaUxDQWlhWFJsYlNJc0lDSmZZU0lzSUNKZllpSXNJQ0pmWXlJc0lDSmZaQ0lzSUNKdFlYUmphQ0lzSUNKMElpd2dJblJoWjA5aWFpSXNJQ0p2WW1vaUxDQWlhWE5UWTJGc1lYSWlMQ0FpZEdWemRFMWhkR05vSWl3Z0ltNWhiV1VpTENBaWMzUnlhVzVuYVdaNVVISnZjSE1pTENBaWJtOWtaU0lzSUNKaGJtTm9iM0p6SWl3Z0luQnliM0J6SWl3Z0ltRnVZMmh2Y2lJc0lDSnBjME52Ykd4bFkzUnBiMjRpTENBaVlXNWphRzl5U1hOV1lXeHBaQ0lzSUNKMFlXY2lMQ0FpYzNSeWFXNW5hV1o1SWl3Z0ltTjBlQ0lzSUNKdmJrTnZiVzFsYm5RaUxDQWliMjVEYUc5dGNFdGxaWEFpTENBaWFYTlFZV2x5SWl3Z0ltbHpRV3hwWVhNaUxDQWlhWE5PYjJSbElpd2dJbThpTENBaWMzUnlJaXdnSW5OMGNtbHVaMmxtZVZOMGNtbHVaeUlzSUNKemRISnBibWRwWm5sUVlXbHlJaXdnSW10bGVTSXNJQ0oyWVd4MVpTSXNJQ0pqZEhnaUxDQWliMjVEYjIxdFpXNTBJaXdnSW05dVEyaHZiWEJMWldWd0lpd2dJbDloSWl3Z0lsOWlJaXdnSW1Gc2JFNTFiR3hXWVd4MVpYTWlMQ0FpWkc5aklpd2dJbWx1WkdWdWRDSXNJQ0pwYm1SbGJuUlRkR1Z3SWl3Z0ltTnZiVzFsYm5SVGRISnBibWNpTENBaWFXNWtaVzUwVTJWeElpd2dJbk5wYlhCc1pVdGxlWE1pTENBaWEyVjVRMjl0YldWdWRDSXNJQ0pwYzA1dlpHVWlMQ0FpYVhORGIyeHNaV04wYVc5dUlpd2dJbTF6WnlJc0lDSmxlSEJzYVdOcGRFdGxlU0lzSUNKcGMxTmpZV3hoY2lJc0lDSlRZMkZzWVhJaUxDQWlhMlY1UTI5dGJXVnVkRVJ2Ym1VaUxDQWlZMmh2YlhCTFpXVndJaXdnSW5OMGNpSXNJQ0p6ZEhKcGJtZHBabmtpTENBaWJHbHVaVU52YlcxbGJuUWlMQ0FpZG5OaUlpd2dJblpqWWlJc0lDSjJZV3gxWlVOdmJXMWxiblFpTENBaWFYTlRaWEVpTENBaWRtRnNkV1ZEYjIxdFpXNTBSRzl1WlNJc0lDSjJZV3gxWlZOMGNpSXNJQ0ozY3lJc0lDSmpjeUlzSUNKcGJtUmxiblJEYjIxdFpXNTBJaXdnSW5aek1DSXNJQ0p1YkRBaUxDQWlhR0Z6VG1WM2JHbHVaU0lzSUNKbWJHOTNJaXdnSW1oaGMxQnliM0J6VEdsdVpTSXNJQ0p6Y0RBaUxDQWlkMkZ5YmlJc0lDSnNiMmRNWlhabGJDSXNJQ0ozWVhKdWFXNW5JaXdnSWsxRlVrZEZYMHRGV1NJc0lDSnRaWEpuWlNJc0lDSjJZV3gxWlNJc0lDSlRZMkZzWVhJaUxDQWlZV1JrVFdWeVoyVlViMHBUVFdGd0lpd2dJbWx6VFdWeVoyVkxaWGtpTENBaVkzUjRJaXdnSW10bGVTSXNJQ0pwYzFOallXeGhjaUlzSUNKMFlXY2lMQ0FpYldGd0lpd2dJbWx6UVd4cFlYTWlMQ0FpYVhOVFpYRWlMQ0FpYVhRaUxDQWliV1Z5WjJWV1lXeDFaU0lzSUNKemIzVnlZMlVpTENBaWFYTk5ZWEFpTENBaWMzSmpUV0Z3SWl3Z0ltRmtaRkJoYVhKVWIwcFRUV0Z3SWl3Z0ltTjBlQ0lzSUNKdFlYQWlMQ0FpYTJWNUlpd2dJblpoYkhWbElpd2dJbWx6VG05a1pTSXNJQ0pwYzAxbGNtZGxTMlY1SWl3Z0ltRmtaRTFsY21kbFZHOUtVMDFoY0NJc0lDSnFjMHRsZVNJc0lDSjBiMHBUSWl3Z0luTjBjbWx1WjB0bGVTSXNJQ0p6ZEhKcGJtZHBabmxMWlhraUxDQWlhbk5XWVd4MVpTSXNJQ0p6ZEhKRGRIZ2lMQ0FpWTNKbFlYUmxVM1J5YVc1bmFXWjVRMjl1ZEdWNGRDSXNJQ0p1YjJSbElpd2dJbk4wY2t0bGVTSXNJQ0pxYzI5dVUzUnlJaXdnSW5kaGNtNGlMQ0FpWTNKbFlYUmxVR0ZwY2lJc0lDSnJaWGtpTENBaWRtRnNkV1VpTENBaVkzUjRJaXdnSW1zaUxDQWlZM0psWVhSbFRtOWtaU0lzSUNKMklpd2dJbEJoYVhJaUxDQWlYMUJoYVhJaUxDQWlUazlFUlY5VVdWQkZJaXdnSWxCQlNWSWlMQ0FpYzJOb1pXMWhJaXdnSW1selRtOWtaU0lzSUNKZklpd2dJbkJoYVhJaUxDQWlZV1JrVUdGcGNsUnZTbE5OWVhBaUxDQWliMjVEYjIxdFpXNTBJaXdnSW05dVEyaHZiWEJMWldWd0lpd2dJbk4wY21sdVoybG1lVkJoYVhJaUxDQWljM1J5YVc1bmFXWjVRMjlzYkdWamRHbHZiaUlzSUNKamIyeHNaV04wYVc5dUlpd2dJbU4wZUNJc0lDSnZjSFJwYjI1eklpd2dJbDloSWl3Z0luTjBjbWx1WjJsbWVVWnNiM2REYjJ4c1pXTjBhVzl1SWl3Z0luTjBjbWx1WjJsbWVVSnNiMk5yUTI5c2JHVmpkR2x2YmlJc0lDSmpiMjF0Wlc1MElpd2dJbWwwWlcxeklpd2dJbUpzYjJOclNYUmxiVkJ5WldacGVDSXNJQ0ptYkc5M1EyaGhjbk1pTENBaWFYUmxiVWx1WkdWdWRDSXNJQ0p2YmtOb2IyMXdTMlZsY0NJc0lDSnZia052YlcxbGJuUWlMQ0FpYVc1a1pXNTBJaXdnSW1OdmJXMWxiblJUZEhKcGJtY2lMQ0FpYVhSbGJVTjBlQ0lzSUNKamFHOXRjRXRsWlhBaUxDQWliR2x1WlhNaUxDQWlhU0lzSUNKcGRHVnRJaXdnSW1selRtOWtaU0lzSUNKaFpHUkRiMjF0Wlc1MFFtVm1iM0psSWl3Z0ltbHpVR0ZwY2lJc0lDSnBheUlzSUNKemRISWlMQ0FpYzNSeWFXNW5hV1o1SWl3Z0lteHBibVZEYjIxdFpXNTBJaXdnSW14cGJtVWlMQ0FpYVc1a1pXNTBRMjl0YldWdWRDSXNJQ0pwYm1SbGJuUlRkR1Z3SWl3Z0ltWmpVR0ZrWkdsdVp5SXNJQ0p5WlhGT1pYZHNhVzVsSWl3Z0lteHBibVZ6UVhSV1lXeDFaU0lzSUNKcGRpSXNJQ0p6ZEdGeWRDSXNJQ0psYm1RaUxDQWliR1Z1SWl3Z0luTjFiU0lzSUNKcFl5SXNJQ0ptYVc1a1VHRnBjaUlzSUNKcGRHVnRjeUlzSUNKclpYa2lMQ0FpYXlJc0lDSnBjMU5qWVd4aGNpSXNJQ0pwZENJc0lDSnBjMUJoYVhJaUxDQWlXVUZOVEUxaGNDSXNJQ0pEYjJ4c1pXTjBhVzl1SWl3Z0luTmphR1Z0WVNJc0lDSk5RVkFpTENBaWIySnFJaXdnSW1OMGVDSXNJQ0pyWldWd1ZXNWtaV1pwYm1Wa0lpd2dJbkpsY0d4aFkyVnlJaXdnSW0xaGNDSXNJQ0poWkdRaUxDQWlkbUZzZFdVaUxDQWlZM0psWVhSbFVHRnBjaUlzSUNKd1lXbHlJaXdnSW05MlpYSjNjbWwwWlNJc0lDSmZZU0lzSUNKZmNHRnBjaUlzSUNKUVlXbHlJaXdnSW5CeVpYWWlMQ0FpYzI5eWRFVnVkSEpwWlhNaUxDQWlhWE5UWTJGc1lYSldZV3gxWlNJc0lDSnBJaXdnSW1sMFpXMGlMQ0FpYTJWbGNGTmpZV3hoY2lJc0lDSnViMlJsSWl3Z0lsOGlMQ0FpVkhsd1pTSXNJQ0poWkdSUVlXbHlWRzlLVTAxaGNDSXNJQ0p2YmtOdmJXMWxiblFpTENBaWIyNURhRzl0Y0V0bFpYQWlMQ0FpYzNSeWFXNW5hV1o1UTI5c2JHVmpkR2x2YmlJc0lDSnRZWEFpTENBaVdVRk5URTFoY0NJc0lDSnZia1Z5Y205eUlpd2dJbWx6VFdGd0lpd2dJbk5qYUdWdFlTSXNJQ0p2WW1vaUxDQWlZM1I0SWl3Z0lsbEJUVXhUWlhFaUxDQWlRMjlzYkdWamRHbHZiaUlzSUNKelkyaGxiV0VpTENBaVUwVlJJaXdnSW5aaGJIVmxJaXdnSW10bGVTSXNJQ0pwWkhnaUxDQWlZWE5KZEdWdFNXNWtaWGdpTENBaWEyVmxjRk5qWVd4aGNpSXNJQ0pwZENJc0lDSnBjMU5qWVd4aGNpSXNJQ0p3Y21WMklpd2dJbWx6VTJOaGJHRnlWbUZzZFdVaUxDQWlYeUlzSUNKamRIZ2lMQ0FpYzJWeElpd2dJbWtpTENBaWFYUmxiU0lzSUNKMGIwcFRJaXdnSW05dVEyOXRiV1Z1ZENJc0lDSnZia05vYjIxd1MyVmxjQ0lzSUNKemRISnBibWRwWm5sRGIyeHNaV04wYVc5dUlpd2dJbTlpYWlJc0lDSnlaWEJzWVdObGNpSXNJQ0pqY21WaGRHVk9iMlJsSWl3Z0luTmxjU0lzSUNKWlFVMU1VMlZ4SWl3Z0ltOXVSWEp5YjNJaUxDQWlhWE5UWlhFaUxDQWljMk5vWlcxaElpd2dJbTlpYWlJc0lDSmpkSGdpTENBaWMzUnlhVzVuSWl3Z0luWmhiSFZsSWl3Z0luTjBjaUlzSUNKcGRHVnRJaXdnSW1OMGVDSXNJQ0p2YmtOdmJXMWxiblFpTENBaWIyNURhRzl0Y0V0bFpYQWlMQ0FpYzNSeWFXNW5hV1o1VTNSeWFXNW5JaXdnSW01MWJHeFVZV2NpTENBaWRtRnNkV1VpTENBaVUyTmhiR0Z5SWl3Z0luTnZkWEpqWlNJc0lDSmpkSGdpTENBaVltOXZiRlJoWnlJc0lDSjJZV3gxWlNJc0lDSnpkSElpTENBaVUyTmhiR0Z5SWl3Z0luTnZkWEpqWlNJc0lDSmpkSGdpTENBaWMzWWlMQ0FpYzNSeWFXNW5hV1o1VG5WdFltVnlJaXdnSW1admNtMWhkQ0lzSUNKdGFXNUdjbUZqZEdsdmJrUnBaMmwwY3lJc0lDSjBZV2NpTENBaWRtRnNkV1VpTENBaWJuVnRJaXdnSW00aUxDQWlhU0lzSUNKa0lpd2dJbVpzYjJGMFRtRk9JaXdnSW5aaGJIVmxJaXdnSW5OMGNpSXNJQ0p6ZEhKcGJtZHBabmxPZFcxaVpYSWlMQ0FpWm14dllYUkZlSEFpTENBaWJtOWtaU0lzSUNKdWRXMGlMQ0FpWm14dllYUWlMQ0FpVTJOaGJHRnlJaXdnSW1SdmRDSXNJQ0pwYm5SSlpHVnVkR2xtZVNJc0lDSjJZV3gxWlNJc0lDSnBiblJTWlhOdmJIWmxJaXdnSW5OMGNpSXNJQ0p2Wm1aelpYUWlMQ0FpY21Ga2FYZ2lMQ0FpYVc1MFFYTkNhV2RKYm5RaUxDQWlhVzUwVTNSeWFXNW5hV1o1SWl3Z0ltNXZaR1VpTENBaWNISmxabWw0SWl3Z0luTjBjbWx1WjJsbWVVNTFiV0psY2lJc0lDSnBiblJQWTNRaUxDQWlYMjl1UlhKeWIzSWlMQ0FpYjNCMElpd2dJbWx1ZENJc0lDSnBiblJJWlhnaUxDQWljMk5vWlcxaElpd2dJbTFoY0NJc0lDSnpaWEVpTENBaWMzUnlhVzVuSWl3Z0ltNTFiR3hVWVdjaUxDQWlZbTl2YkZSaFp5SXNJQ0pwYm5SUFkzUWlMQ0FpYVc1MElpd2dJbWx1ZEVobGVDSXNJQ0ptYkc5aGRFNWhUaUlzSUNKbWJHOWhkRVY0Y0NJc0lDSm1iRzloZENJc0lDSnBiblJKWkdWdWRHbG1lU0lzSUNKMllXeDFaU0lzSUNKemRISnBibWRwWm5sS1UwOU9JaXdnSW1wemIyNVRZMkZzWVhKeklpd2dJbk4wY2lJc0lDSlRZMkZzWVhJaUxDQWlYMjl1UlhKeWIzSWlMQ0FpYVc1MFFYTkNhV2RKYm5RaUxDQWlhbk52YmtWeWNtOXlJaXdnSW05dVJYSnliM0lpTENBaWMyTm9aVzFoSWl3Z0ltMWhjQ0lzSUNKelpYRWlMQ0FpWW1sdVlYSjVJaXdnSW5aaGJIVmxJaXdnSW5OeVl5SXNJQ0p2YmtWeWNtOXlJaXdnSW5OMGNpSXNJQ0ppZFdabVpYSWlMQ0FpYVNJc0lDSmpiMjF0Wlc1MElpd2dJblI1Y0dVaUxDQWlZM1I0SWl3Z0ltOXVRMjl0YldWdWRDSXNJQ0p2YmtOb2IyMXdTMlZsY0NJc0lDSmlkV1lpTENBaWN5SXNJQ0pUWTJGc1lYSWlMQ0FpYkdsdVpWZHBaSFJvSWl3Z0ltNGlMQ0FpYkdsdVpYTWlMQ0FpYnlJc0lDSnpkSEpwYm1kcFpubFRkSEpwYm1jaUxDQWljbVZ6YjJ4MlpWQmhhWEp6SWl3Z0luTmxjU0lzSUNKdmJrVnljbTl5SWl3Z0lsOWhJaXdnSW1selUyVnhJaXdnSW1raUxDQWlhWFJsYlNJc0lDSnBjMUJoYVhJaUxDQWlhWE5OWVhBaUxDQWljR0ZwY2lJc0lDSlFZV2x5SWl3Z0lsTmpZV3hoY2lJc0lDSmpiaUlzSUNKamNtVmhkR1ZRWVdseWN5SXNJQ0p6WTJobGJXRWlMQ0FpYVhSbGNtRmliR1VpTENBaVkzUjRJaXdnSW5KbGNHeGhZMlZ5SWl3Z0luQmhhWEp6SWl3Z0lsbEJUVXhUWlhFaUxDQWlhWFFpTENBaWEyVjVJaXdnSW5aaGJIVmxJaXdnSW10bGVYTWlMQ0FpWTNKbFlYUmxVR0ZwY2lJc0lDSlpRVTFNVDAxaGNDSXNJQ0pmV1VGTlRFOU5ZWEFpTENBaVdVRk5URk5sY1NJc0lDSlpRVTFNVFdGd0lpd2dJbDhpTENBaVkzUjRJaXdnSW0xaGNDSXNJQ0p3WVdseUlpd2dJbXRsZVNJc0lDSjJZV3gxWlNJc0lDSnBjMUJoYVhJaUxDQWlkRzlLVXlJc0lDSnpZMmhsYldFaUxDQWlhWFJsY21GaWJHVWlMQ0FpY0dGcGNuTWlMQ0FpWTNKbFlYUmxVR0ZwY25NaUxDQWliMjFoY0NJc0lDSnpaWEVpTENBaWIyNUZjbkp2Y2lJc0lDSnlaWE52YkhabFVHRnBjbk1pTENBaWMyVmxia3RsZVhNaUxDQWlhWE5UWTJGc1lYSWlMQ0FpWW05dmJGTjBjbWx1WjJsbWVTSXNJQ0oyWVd4MVpTSXNJQ0p6YjNWeVkyVWlMQ0FpWTNSNElpd2dJblJ5ZFdWVVlXY2lMQ0FpWm1Gc2MyVlVZV2NpTENBaVUyTmhiR0Z5SWl3Z0ltWnNiMkYwVG1GT0lpd2dJblpoYkhWbElpd2dJbk4wY2lJc0lDSnpkSEpwYm1kcFpubE9kVzFpWlhJaUxDQWlabXh2WVhSRmVIQWlMQ0FpYm05a1pTSXNJQ0p1ZFcwaUxDQWlabXh2WVhRaUxDQWlVMk5oYkdGeUlpd2dJbVJ2ZENJc0lDSm1JaXdnSW1sdWRFbGtaVzUwYVdaNUlpd2dJblpoYkhWbElpd2dJbWx1ZEZKbGMyOXNkbVVpTENBaWMzUnlJaXdnSW05bVpuTmxkQ0lzSUNKeVlXUnBlQ0lzSUNKcGJuUkJjMEpwWjBsdWRDSXNJQ0p6YVdkdUlpd2dJbTRpTENBaWFXNTBVM1J5YVc1bmFXWjVJaXdnSW01dlpHVWlMQ0FpY0hKbFptbDRJaXdnSW5OMGNtbHVaMmxtZVU1MWJXSmxjaUlzSUNKcGJuUkNhVzRpTENBaVgyOXVSWEp5YjNJaUxDQWliM0IwSWl3Z0ltbHVkRTlqZENJc0lDSnBiblFpTENBaWFXNTBTR1Y0SWl3Z0lsbEJUVXhUWlhRaUxDQWlYMWxCVFV4VFpYUWlMQ0FpV1VGTlRFMWhjQ0lzSUNKelkyaGxiV0VpTENBaWEyVjVJaXdnSW5CaGFYSWlMQ0FpYVhOUVlXbHlJaXdnSWxCaGFYSWlMQ0FpWm1sdVpGQmhhWElpTENBaWEyVmxjRkJoYVhJaUxDQWlhWE5UWTJGc1lYSWlMQ0FpZG1Gc2RXVWlMQ0FpY0hKbGRpSXNJQ0pmSWl3Z0ltTjBlQ0lzSUNKdmJrTnZiVzFsYm5RaUxDQWliMjVEYUc5dGNFdGxaWEFpTENBaWFYUmxjbUZpYkdVaUxDQWljbVZ3YkdGalpYSWlMQ0FpYzJWMElpd2dJbU55WldGMFpWQmhhWElpTENBaWJXRndJaXdnSW05dVJYSnliM0lpTENBaWFYTk5ZWEFpTENBaWNHRnljMlZUWlhoaFoyVnphVzFoYkNJc0lDSnpkSElpTENBaVlYTkNhV2RKYm5RaUxDQWljMmxuYmlJc0lDSndZWEowY3lJc0lDSnVkVzBpTENBaWJpSXNJQ0p5WlhNaUxDQWljQ0lzSUNKemRISnBibWRwWm5sVFpYaGhaMlZ6YVcxaGJDSXNJQ0p1YjJSbElpd2dJblpoYkhWbElpd2dJbk4wY21sdVoybG1lVTUxYldKbGNpSXNJQ0pmTmpBaUxDQWlhVzUwVkdsdFpTSXNJQ0pmYjI1RmNuSnZjaUlzSUNKcGJuUkJjMEpwWjBsdWRDSXNJQ0ptYkc5aGRGUnBiV1VpTENBaWRHbHRaWE4wWVcxd0lpd2dJbTFoZEdOb0lpd2dJbmxsWVhJaUxDQWliVzl1ZEdnaUxDQWlaR0Y1SWl3Z0ltaHZkWElpTENBaWJXbHVkWFJsSWl3Z0luTmxZMjl1WkNJc0lDSnRhV3hzYVhObFl5SXNJQ0prWVhSbElpd2dJblI2SWl3Z0luTmphR1Z0WVNJc0lDSnRZWEFpTENBaWMyVnhJaXdnSW5OMGNtbHVaeUlzSUNKdWRXeHNWR0ZuSWl3Z0luUnlkV1ZVWVdjaUxDQWlabUZzYzJWVVlXY2lMQ0FpYVc1MFFtbHVJaXdnSW1sdWRFOWpkQ0lzSUNKcGJuUWlMQ0FpYVc1MFNHVjRJaXdnSW1ac2IyRjBUbUZPSWl3Z0ltWnNiMkYwUlhod0lpd2dJbVpzYjJGMElpd2dJbUpwYm1GeWVTSXNJQ0p0WlhKblpTSXNJQ0p2YldGd0lpd2dJbkJoYVhKeklpd2dJbk5sZENJc0lDSnBiblJVYVcxbElpd2dJbVpzYjJGMFZHbHRaU0lzSUNKMGFXMWxjM1JoYlhBaUxDQWljMk5vWlcxaGN5SXNJQ0p6WTJobGJXRWlMQ0FpYldGd0lpd2dJbk5sY1NJc0lDSnpkSEpwYm1jaUxDQWlkR0ZuYzBKNVRtRnRaU0lzSUNKaWFXNWhjbmtpTENBaVltOXZiRlJoWnlJc0lDSm1iRzloZENJc0lDSm1iRzloZEVWNGNDSXNJQ0ptYkc5aGRFNWhUaUlzSUNKbWJHOWhkRlJwYldVaUxDQWlhVzUwSWl3Z0ltbHVkRWhsZUNJc0lDSnBiblJQWTNRaUxDQWlhVzUwVkdsdFpTSXNJQ0p0WlhKblpTSXNJQ0p1ZFd4c1ZHRm5JaXdnSW05dFlYQWlMQ0FpY0dGcGNuTWlMQ0FpYzJWMElpd2dJblJwYldWemRHRnRjQ0lzSUNKamIzSmxTMjV2ZDI1VVlXZHpJaXdnSW1kbGRGUmhaM01pTENBaVkzVnpkRzl0VkdGbmN5SXNJQ0p6WTJobGJXRk9ZVzFsSWl3Z0ltRmtaRTFsY21kbFZHRm5JaXdnSW5OamFHVnRZVlJoWjNNaUxDQWlkR0ZuY3lJc0lDSnJaWGx6SWl3Z0ltdGxlU0lzSUNKMFlXY2lMQ0FpZEdGblQySnFJaXdnSW5SaFowNWhiV1VpTENBaWMyOXlkRTFoY0VWdWRISnBaWE5DZVV0bGVTSXNJQ0poSWl3Z0ltSWlMQ0FpVTJOb1pXMWhJaXdnSWw5VFkyaGxiV0VpTENBaVkyOXRjR0YwSWl3Z0ltTjFjM1J2YlZSaFozTWlMQ0FpYldWeVoyVWlMQ0FpY21WemIyeDJaVXR1YjNkdVZHRm5jeUlzSUNKelkyaGxiV0VpTENBaWMyOXlkRTFoY0VWdWRISnBaWE1pTENBaWRHOVRkSEpwYm1kRVpXWmhkV3gwY3lJc0lDSm5aWFJVWVdkeklpd2dJbU52Y21WTGJtOTNibFJoWjNNaUxDQWlUVUZRSWl3Z0ltMWhjQ0lzSUNKVFEwRk1RVklpTENBaWMzUnlhVzVuSWl3Z0lsTkZVU0lzSUNKelpYRWlMQ0FpWTI5d2VTSXNJQ0p6ZEhKcGJtZHBabmxFYjJOMWJXVnVkQ0lzSUNKa2IyTWlMQ0FpYjNCMGFXOXVjeUlzSUNKZllTSXNJQ0pzYVc1bGN5SXNJQ0pvWVhORWFYSmxZM1JwZG1Weklpd2dJbVJwY2lJc0lDSmpkSGdpTENBaVkzSmxZWFJsVTNSeWFXNW5hV1o1UTI5dWRHVjRkQ0lzSUNKamIyMXRaVzUwVTNSeWFXNW5JaXdnSW1Oeklpd2dJbWx1WkdWdWRFTnZiVzFsYm5RaUxDQWlZMmh2YlhCTFpXVndJaXdnSW1OdmJuUmxiblJEYjIxdFpXNTBJaXdnSW1selRtOWtaU0lzSUNKdmJrTm9iMjF3UzJWbGNDSXNJQ0ppYjJSNUlpd2dJbk4wY21sdVoybG1lU0lzSUNKc2FXNWxRMjl0YldWdWRDSXNJQ0prWXlJc0lDSkViMk4xYldWdWRDSXNJQ0pmUkc5amRXMWxiblFpTENBaWRtRnNkV1VpTENBaWNtVndiR0ZqWlhJaUxDQWliM0IwYVc5dWN5SXNJQ0pPVDBSRlgxUlpVRVVpTENBaVJFOURJaXdnSWw5eVpYQnNZV05sY2lJc0lDSnZjSFFpTENBaWRtVnljMmx2YmlJc0lDSkVhWEpsWTNScGRtVnpJaXdnSW1OdmNIa2lMQ0FpYVhOT2IyUmxJaXdnSW1GemMyVnlkRU52Ykd4bFkzUnBiMjRpTENBaWNHRjBhQ0lzSUNKdWIyUmxJaXdnSW01aGJXVWlMQ0FpY0hKbGRpSXNJQ0poYm1Ob2IzSk9ZVzFsY3lJc0lDSm1hVzVrVG1WM1FXNWphRzl5SWl3Z0lrRnNhV0Z6SWl3Z0ltdGxlVlJ2VTNSeUlpd2dJbllpTENBaVlYTlRkSElpTENBaVlXeHBZWE5FZFhCc2FXTmhkR1ZQWW1wbFkzUnpJaXdnSW1GdVkyaHZjbEJ5WldacGVDSXNJQ0ptYkc5M0lpd2dJbXRsWlhCVmJtUmxabWx1WldRaUxDQWliMjVVWVdkUFltb2lMQ0FpZEdGbklpd2dJbTl1UVc1amFHOXlJaXdnSW5ObGRFRnVZMmh2Y25NaUxDQWljMjkxY21ObFQySnFaV04wY3lJc0lDSmpjbVZoZEdWT2IyUmxRVzVqYUc5eWN5SXNJQ0pqZEhnaUxDQWlZM0psWVhSbFRtOWtaU0lzSUNKcGMwTnZiR3hsWTNScGIyNGlMQ0FpYTJWNUlpd2dJbXNpTENBaVVHRnBjaUlzSUNKcGMwVnRjSFI1VUdGMGFDSXNJQ0pyWldWd1UyTmhiR0Z5SWl3Z0ltbHpVMk5oYkdGeUlpd2dJbU52Ykd4bFkzUnBiMjVHY205dFVHRjBhQ0lzSUNKemRpSXNJQ0pUWTJobGJXRWlMQ0FpYW5OdmJpSXNJQ0pxYzI5dVFYSm5JaXdnSW0xaGNFRnpUV0Z3SWl3Z0ltMWhlRUZzYVdGelEyOTFiblFpTENBaWNtVjJhWFpsY2lJc0lDSnlaWE1pTENBaWRHOUtVeUlzSUNKamIzVnVkQ0lzSUNKaGNIQnNlVkpsZG1sMlpYSWlMQ0FpY3lJc0lDSnpkSEpwYm1kcFpubEViMk4xYldWdWRDSXNJQ0pqYjI1MFpXNTBjeUlzSUNKWlFVMU1SWEp5YjNJaUxDQWlibUZ0WlNJc0lDSndiM01pTENBaVkyOWtaU0lzSUNKdFpYTnpZV2RsSWl3Z0lsbEJUVXhRWVhKelpVVnljbTl5SWl3Z0lsbEJUVXhYWVhKdWFXNW5JaXdnSW5CeVpYUjBhV1o1UlhKeWIzSWlMQ0FpYzNKaklpd2dJbXhqSWl3Z0ltVnljbTl5SWl3Z0lteHBibVVpTENBaVkyOXNJaXdnSW1OcElpd2dJbXhwYm1WVGRISWlMQ0FpZEhKcGJWTjBZWEowSWl3Z0luQnlaWFlpTENBaVkyOTFiblFpTENBaVpXNWtJaXdnSW5CdmFXNTBaWElpTENBaWNtVnpiMngyWlZCeWIzQnpJaXdnSW5SdmEyVnVjeUlzSUNKbWJHOTNJaXdnSW1sdVpHbGpZWFJ2Y2lJc0lDSnVaWGgwSWl3Z0ltOW1abk5sZENJc0lDSnZia1Z5Y205eUlpd2dJbkJoY21WdWRFbHVaR1Z1ZENJc0lDSnpkR0Z5ZEU5dVRtVjNiR2x1WlNJc0lDSnpjR0ZqWlVKbFptOXlaU0lzSUNKaGRFNWxkMnhwYm1VaUxDQWlhR0Z6VTNCaFkyVWlMQ0FpWTI5dGJXVnVkQ0lzSUNKamIyMXRaVzUwVTJWd0lpd2dJbWhoYzA1bGQyeHBibVVpTENBaWNtVnhVM0JoWTJVaUxDQWlkR0ZpSWl3Z0ltRnVZMmh2Y2lJc0lDSjBZV2NpTENBaWJtVjNiR2x1WlVGbWRHVnlVSEp2Y0NJc0lDSmpiMjF0WVNJc0lDSm1iM1Z1WkNJc0lDSnpkR0Z5ZENJc0lDSjBiMnRsYmlJc0lDSmpZaUlzSUNKc1lYTjBJaXdnSW1WdVpDSXNJQ0pqYjI1MFlXbHVjMDVsZDJ4cGJtVWlMQ0FpYTJWNUlpd2dJbk4wSWl3Z0ltbDBJaXdnSW1ac2IzZEpibVJsYm5SRGFHVmpheUlzSUNKcGJtUmxiblFpTENBaVptTWlMQ0FpYjI1RmNuSnZjaUlzSUNKbGJtUWlMQ0FpWTI5dWRHRnBibk5PWlhkc2FXNWxJaXdnSW0xaGNFbHVZMngxWkdWeklpd2dJbU4wZUNJc0lDSnBkR1Z0Y3lJc0lDSnpaV0Z5WTJnaUxDQWlkVzVwY1hWbFMyVjVjeUlzSUNKcGMwVnhkV0ZzSWl3Z0ltRWlMQ0FpWWlJc0lDSnBjMU5qWVd4aGNpSXNJQ0p3WVdseUlpd2dJbk4wWVhKMFEyOXNUWE5uSWl3Z0luSmxjMjlzZG1WQ2JHOWphMDFoY0NJc0lDSmpiMjF3YjNObFRtOWtaU0lzSUNKamIyMXdiM05sUlcxd2RIbE9iMlJsSWl3Z0ltTjBlQ0lzSUNKaWJTSXNJQ0p2YmtWeWNtOXlJaXdnSW5SaFp5SXNJQ0pmWVNJc0lDSmZZaUlzSUNKT2IyUmxRMnhoYzNNaUxDQWlXVUZOVEUxaGNDSXNJQ0p0WVhBaUxDQWliMlptYzJWMElpd2dJbU52YlcxbGJuUkZibVFpTENBaVkyOXNiRWwwWlcwaUxDQWljM1JoY25RaUxDQWlhMlY1SWl3Z0luTmxjQ0lzSUNKMllXeDFaU0lzSUNKclpYbFFjbTl3Y3lJc0lDSnlaWE52YkhabFVISnZjSE1pTENBaWFXMXdiR2xqYVhSTFpYa2lMQ0FpWTI5dWRHRnBibk5PWlhkc2FXNWxJaXdnSW10bGVWTjBZWEowSWl3Z0ltdGxlVTV2WkdVaUxDQWlabXh2ZDBsdVpHVnVkRU5vWldOcklpd2dJbTFoY0VsdVkyeDFaR1Z6SWl3Z0luWmhiSFZsVUhKdmNITWlMQ0FpZG1Gc2RXVk9iMlJsSWl3Z0luQmhhWElpTENBaVVHRnBjaUlzSUNKeVpYTnZiSFpsUW14dlkydFRaWEVpTENBaVkyOXRjRzl6WlU1dlpHVWlMQ0FpWTI5dGNHOXpaVVZ0Y0hSNVRtOWtaU0lzSUNKamRIZ2lMQ0FpWW5NaUxDQWliMjVGY25KdmNpSXNJQ0owWVdjaUxDQWlYMkVpTENBaVRtOWtaVU5zWVhOeklpd2dJbGxCVFV4VFpYRWlMQ0FpYzJWeElpd2dJbTltWm5ObGRDSXNJQ0pqYjIxdFpXNTBSVzVrSWl3Z0luTjBZWEowSWl3Z0luWmhiSFZsSWl3Z0luQnliM0J6SWl3Z0luSmxjMjlzZG1WUWNtOXdjeUlzSUNKdWIyUmxJaXdnSW1ac2IzZEpibVJsYm5SRGFHVmpheUlzSUNKeVpYTnZiSFpsUlc1a0lpd2dJbVZ1WkNJc0lDSnZabVp6WlhRaUxDQWljbVZ4VTNCaFkyVWlMQ0FpYjI1RmNuSnZjaUlzSUNKamIyMXRaVzUwSWl3Z0ltaGhjMU53WVdObElpd2dJbk5sY0NJc0lDSjBiMnRsYmlJc0lDSnpiM1Z5WTJVaUxDQWlkSGx3WlNJc0lDSmpZaUlzSUNKaWJHOWphMDF6WnlJc0lDSnBjMEpzYjJOcklpd2dJblJ2YTJWdUlpd2dJbkpsYzI5c2RtVkdiRzkzUTI5c2JHVmpkR2x2YmlJc0lDSmpiMjF3YjNObFRtOWtaU0lzSUNKamIyMXdiM05sUlcxd2RIbE9iMlJsSWl3Z0ltTjBlQ0lzSUNKbVl5SXNJQ0p2YmtWeWNtOXlJaXdnSW5SaFp5SXNJQ0pmWVNJc0lDSmZZaUlzSUNKcGMwMWhjQ0lzSUNKbVkwNWhiV1VpTENBaVRtOWtaVU5zWVhOeklpd2dJbGxCVFV4TllYQWlMQ0FpV1VGTlRGTmxjU0lzSUNKamIyeHNJaXdnSW1GMFVtOXZkQ0lzSUNKdlptWnpaWFFpTENBaWFTSXNJQ0pqYjJ4c1NYUmxiU0lzSUNKemRHRnlkQ0lzSUNKclpYa2lMQ0FpYzJWd0lpd2dJblpoYkhWbElpd2dJbkJ5YjNCeklpd2dJbkpsYzI5c2RtVlFjbTl3Y3lJc0lDSmpiMjUwWVdsdWMwNWxkMnhwYm1VaUxDQWljSEpsZGtsMFpXMURiMjF0Wlc1MElpd2dJbXh2YjNBaUxDQWljM1FpTENBaWNISmxkaUlzSUNKcGMxQmhhWElpTENBaWRtRnNkV1ZPYjJSbElpd2dJbXRsZVZOMFlYSjBJaXdnSW10bGVVNXZaR1VpTENBaWRtRnNkV1ZRY205d2N5SXNJQ0p3WVdseUlpd2dJbEJoYVhJaUxDQWliV0Z3SWl3Z0ltMWhjRWx1WTJ4MVpHVnpJaXdnSW1WdVpGSmhibWRsSWl3Z0ltVjRjR1ZqZEdWa1JXNWtJaXdnSW1ObElpd2dJbVZsSWl3Z0ltTmxVRzl6SWl3Z0ltNWhiV1VpTENBaWJYTm5JaXdnSW1WdVpDSXNJQ0p5WlhOdmJIWmxSVzVrSWl3Z0luSmxjMjlzZG1WRGIyeHNaV04wYVc5dUlpd2dJa05PSWl3Z0ltTjBlQ0lzSUNKMGIydGxiaUlzSUNKdmJrVnljbTl5SWl3Z0luUmhaMDVoYldVaUxDQWlkR0ZuSWl3Z0ltTnZiR3dpTENBaWNtVnpiMngyWlVKc2IyTnJUV0Z3SWl3Z0luSmxjMjlzZG1WQ2JHOWphMU5sY1NJc0lDSnlaWE52YkhabFJteHZkME52Ykd4bFkzUnBiMjRpTENBaVEyOXNiQ0lzSUNKamIyMXdiM05sUTI5c2JHVmpkR2x2YmlJc0lDSndjbTl3Y3lJc0lDSmZZU0lzSUNKZllpSXNJQ0owWVdkVWIydGxiaUlzSUNKdGMyY2lMQ0FpWVc1amFHOXlJaXdnSW01c0lpd2dJbXhoYzNSUWNtOXdJaXdnSW1WNGNGUjVjR1VpTENBaVdVRk5URTFoY0NJc0lDSlpRVTFNVTJWeElpd2dJblFpTENBaWEzUWlMQ0FpY21Weklpd2dJbTV2WkdVaUxDQWlhWE5PYjJSbElpd2dJbE5qWVd4aGNpSXNJQ0p5WlhOdmJIWmxRbXh2WTJ0VFkyRnNZWElpTENBaVkzUjRJaXdnSW5OallXeGhjaUlzSUNKdmJrVnljbTl5SWl3Z0luTjBZWEowSWl3Z0ltaGxZV1JsY2lJc0lDSndZWEp6WlVKc2IyTnJVMk5oYkdGeVNHVmhaR1Z5SWl3Z0luUjVjR1VpTENBaVUyTmhiR0Z5SWl3Z0lteHBibVZ6SWl3Z0luTndiR2wwVEdsdVpYTWlMQ0FpWTJodmJYQlRkR0Z5ZENJc0lDSnBJaXdnSW1OdmJuUmxiblFpTENBaWRtRnNkV1VpTENBaVpXNWtJaXdnSW5SeWFXMUpibVJsYm5RaUxDQWliMlptYzJWMElpd2dJbU52Ym5SbGJuUlRkR0Z5ZENJc0lDSnBibVJsYm5RaUxDQWljMlZ3SWl3Z0luQnlaWFpOYjNKbFNXNWtaVzUwWldRaUxDQWlZM0pzWmlJc0lDSnRaWE56WVdkbElpd2dJbkJ5YjNCeklpd2dJbk4wY21samRDSXNJQ0p6YjNWeVkyVWlMQ0FpYlc5a1pTSXNJQ0pqYUc5dGNDSXNJQ0psY25KdmNpSXNJQ0pqYUNJc0lDSnVJaXdnSW1oaGMxTndZV05sSWl3Z0ltTnZiVzFsYm5RaUxDQWliR1Z1WjNSb0lpd2dJblJ2YTJWdUlpd2dJblJ6SWl3Z0luTndiR2wwSWl3Z0ltWnBjbk4wSWl3Z0ltMGlMQ0FpY21WemIyeDJaVVpzYjNkVFkyRnNZWElpTENBaWMyTmhiR0Z5SWl3Z0luTjBjbWxqZENJc0lDSnZia1Z5Y205eUlpd2dJbTltWm5ObGRDSXNJQ0owZVhCbElpd2dJbk52ZFhKalpTSXNJQ0psYm1RaUxDQWlYM1I1Y0dVaUxDQWlkbUZzZFdVaUxDQWlYMjl1UlhKeWIzSWlMQ0FpY21Wc0lpd2dJbU52WkdVaUxDQWliWE5uSWl3Z0lsTmpZV3hoY2lJc0lDSndiR0ZwYmxaaGJIVmxJaXdnSW5OcGJtZHNaVkYxYjNSbFpGWmhiSFZsSWl3Z0ltUnZkV0pzWlZGMWIzUmxaRlpoYkhWbElpd2dJblpoYkhWbFJXNWtJaXdnSW5KbElpd2dJbkpsYzI5c2RtVkZibVFpTENBaVltRmtRMmhoY2lJc0lDSm1iMnhrVEdsdVpYTWlMQ0FpWDJFaUxDQWlabWx5YzNRaUxDQWliR2x1WlNJc0lDSmxJaXdnSW0xaGRHTm9JaXdnSW5KbGN5SXNJQ0p6WlhBaUxDQWljRzl6SWl3Z0lteGhjM1FpTENBaWFTSXNJQ0pqYUNJc0lDSm1iMnhrSWl3Z0ltWnZiR1JPWlhkc2FXNWxJaXdnSW01bGVIUWlMQ0FpWTJNaUxDQWlaWE5qWVhCbFEyOWtaWE1pTENBaWJHVnVaM1JvSWl3Z0luQmhjbk5sUTJoaGNrTnZaR1VpTENBaWNtRjNJaXdnSW5kelUzUmhjblFpTENBaVkyOXRjRzl6WlZOallXeGhjaUlzSUNKamRIZ2lMQ0FpZEc5clpXNGlMQ0FpZEdGblZHOXJaVzRpTENBaWIyNUZjbkp2Y2lJc0lDSjJZV3gxWlNJc0lDSjBlWEJsSWl3Z0ltTnZiVzFsYm5RaUxDQWljbUZ1WjJVaUxDQWljbVZ6YjJ4MlpVSnNiMk5yVTJOaGJHRnlJaXdnSW5KbGMyOXNkbVZHYkc5M1UyTmhiR0Z5SWl3Z0luUmhaMDVoYldVaUxDQWliWE5uSWl3Z0luUmhaeUlzSUNKVFEwRk1RVklpTENBaVptbHVaRk5qWVd4aGNsUmhaMEo1VG1GdFpTSXNJQ0ptYVc1a1UyTmhiR0Z5VkdGblFubFVaWE4wSWl3Z0luTmpZV3hoY2lJc0lDSnlaWE1pTENBaWFYTlRZMkZzWVhJaUxDQWlVMk5oYkdGeUlpd2dJbVZ5Y205eUlpd2dJbk5qYUdWdFlTSXNJQ0pmWVNJc0lDSnRZWFJqYUZkcGRHaFVaWE4wSWl3Z0ltdDBJaXdnSW1GMFMyVjVJaXdnSW1ScGNtVmpkR2wyWlhNaUxDQWlZMjl0Y0dGMElpd2dJblJ6SWl3Z0ltTnpJaXdnSW1WdGNIUjVVMk5oYkdGeVVHOXphWFJwYjI0aUxDQWliMlptYzJWMElpd2dJbUpsWm05eVpTSXNJQ0p3YjNNaUxDQWlhU0lzSUNKemRDSXNJQ0pEVGlJc0lDSmpiMjF3YjNObFRtOWtaU0lzSUNKamIyMXdiM05sUlcxd2RIbE9iMlJsSWl3Z0ltTjBlQ0lzSUNKMGIydGxiaUlzSUNKd2NtOXdjeUlzSUNKdmJrVnljbTl5SWl3Z0ltRjBTMlY1SWl3Z0luTndZV05sUW1WbWIzSmxJaXdnSW1OdmJXMWxiblFpTENBaVlXNWphRzl5SWl3Z0luUmhaeUlzSUNKdWIyUmxJaXdnSW1selUzSmpWRzlyWlc0aUxDQWlZMjl0Y0c5elpVRnNhV0Z6SWl3Z0ltTnZiWEJ2YzJWVFkyRnNZWElpTENBaVkyOXRjRzl6WlVOdmJHeGxZM1JwYjI0aUxDQWliV1Z6YzJGblpTSXNJQ0pwYzFOallXeGhjaUlzSUNKdlptWnpaWFFpTENBaVltVm1iM0psSWl3Z0luQnZjeUlzSUNKbGJtUWlMQ0FpWlcxd2RIbFRZMkZzWVhKUWIzTnBkR2x2YmlJc0lDSnZjSFJwYjI1eklpd2dJbk52ZFhKalpTSXNJQ0poYkdsaGN5SXNJQ0pCYkdsaGN5SXNJQ0oyWVd4MVpVVnVaQ0lzSUNKeVpTSXNJQ0p5WlhOdmJIWmxSVzVrSWl3Z0ltTnZiWEJ2YzJWRWIyTWlMQ0FpYjNCMGFXOXVjeUlzSUNKa2FYSmxZM1JwZG1Weklpd2dJbTltWm5ObGRDSXNJQ0p6ZEdGeWRDSXNJQ0oyWVd4MVpTSXNJQ0psYm1RaUxDQWliMjVGY25KdmNpSXNJQ0p2Y0hSeklpd2dJbVJ2WXlJc0lDSkViMk4xYldWdWRDSXNJQ0pqZEhnaUxDQWljSEp2Y0hNaUxDQWljbVZ6YjJ4MlpWQnliM0J6SWl3Z0ltTnZiWEJ2YzJWT2IyUmxJaXdnSW1OdmJYQnZjMlZGYlhCMGVVNXZaR1VpTENBaVkyOXVkR1Z1ZEVWdVpDSXNJQ0p5WlNJc0lDSnlaWE52YkhabFJXNWtJaXdnSW1kbGRFVnljbTl5VUc5eklpd2dJbk55WXlJc0lDSnZabVp6WlhRaUxDQWljMjkxY21ObElpd2dJbkJoY25ObFVISmxiSFZrWlNJc0lDSndjbVZzZFdSbElpd2dJbDloSWl3Z0ltTnZiVzFsYm5RaUxDQWlZWFJEYjIxdFpXNTBJaXdnSW1GbWRHVnlSVzF3ZEhsTWFXNWxJaXdnSWtOdmJYQnZjMlZ5SWl3Z0ltOXdkR2x2Ym5NaUxDQWlZMjlrWlNJc0lDSnRaWE56WVdkbElpd2dJbmRoY201cGJtY2lMQ0FpY0c5eklpd2dJbGxCVFV4WFlYSnVhVzVuSWl3Z0lsbEJUVXhRWVhKelpVVnljbTl5SWl3Z0lrUnBjbVZqZEdsMlpYTWlMQ0FpWkc5aklpd2dJbUZtZEdWeVJHOWpJaXdnSW1Saklpd2dJbWx6UTI5c2JHVmpkR2x2YmlJc0lDSnBkQ0lzSUNKcGMxQmhhWElpTENBaVkySWlMQ0FpZEc5clpXNXpJaXdnSW1admNtTmxSRzlqSWl3Z0ltVnVaRTltWm5ObGRDSXNJQ0owYjJ0bGJpSXNJQ0pmWDNscFpXeGtVM1JoY2lJc0lDSmpiMjF3YjNObFJHOWpJaXdnSW0xelp5SXNJQ0psY25KdmNpSXNJQ0psYm1RaUxDQWljbVZ6YjJ4MlpVVnVaQ0lzSUNKdmNIUnpJaXdnSWtSdlkzVnRaVzUwSWl3Z0lrSlNSVUZMSWl3Z0lsTkxTVkFpTENBaVVrVk5UMVpGSWl3Z0luWnBjMmwwSWl3Z0ltTnpkQ0lzSUNKMmFYTnBkRzl5SWl3Z0lsOTJhWE5wZENJc0lDSndZWFJvSWl3Z0ltbDBaVzBpTENBaVptbGxiR1FpTENBaWFXNWtaWGdpTENBaWRHOXJJaXdnSW5CaGNtVnVkQ0lzSUNKamIyeHNJaXdnSW1OMGNtd2lMQ0FpZEc5clpXNGlMQ0FpYVNJc0lDSmphU0lzSUNKQ1QwMGlMQ0FpUkU5RFZVMUZUbFFpTENBaVJreFBWMTlGVGtRaUxDQWlVME5CVEVGU0lpd2dJblJ2YTJWdVZIbHdaU0lzSUNKemIzVnlZMlVpTENBaVFrOU5JaXdnSWtSUFExVk5SVTVVSWl3Z0lrWk1UMWRmUlU1RUlpd2dJbE5EUVV4QlVpSXNJQ0pwYzBWdGNIUjVJaXdnSW1Ob0lpd2dJbWhsZUVScFoybDBjeUlzSUNKMFlXZERhR0Z5Y3lJc0lDSm1iRzkzU1c1a2FXTmhkRzl5UTJoaGNuTWlMQ0FpYVc1MllXeHBaRUZ1WTJodmNrTm9ZWEp6SWl3Z0ltbHpUbTkwUVc1amFHOXlRMmhoY2lJc0lDSk1aWGhsY2lJc0lDSnpiM1Z5WTJVaUxDQWlhVzVqYjIxd2JHVjBaU0lzSUNKZllTSXNJQ0p1WlhoMElpd2dJbDlmZVdsbGJHUlRkR0Z5SWl3Z0lta2lMQ0FpYmlJc0lDSnZabVp6WlhRaUxDQWlhVzVrWlc1MElpd2dJbVIwSWl3Z0ltVnVaQ0lzSUNKemRHRjBaU0lzSUNKc2FXNWxJaXdnSWtKUFRTSXNJQ0prYVhKRmJtUWlMQ0FpWTNNaUxDQWljM0FpTENBaVJFOURWVTFGVGxRaUxDQWljeUlzSUNKamFEQWlMQ0FpWTJneElpd2dJbTVzSWl3Z0lrWk1UMWRmUlU1RUlpd2dJbkYxYjNSbElpd2dJbkZpSWl3Z0lteHZiM0FpTENBaWJHRnpkRU5vWVhJaUxDQWlVME5CVEVGU0lpd2dJbWx1Um14dmR5SXNJQ0poYkd4dmQwVnRjSFI1SWl3Z0ltRnNiRzkzVkdGaWN5SXNJQ0owWlhOMElpd2dJa3hwYm1WRGIzVnVkR1Z5SWl3Z0ltOW1abk5sZENJc0lDSnNiM2NpTENBaWFHbG5hQ0lzSUNKdGFXUWlMQ0FpYzNSaGNuUWlMQ0FpYVc1amJIVmtaWE5VYjJ0bGJpSXNJQ0pzYVhOMElpd2dJblI1Y0dVaUxDQWlhU0lzSUNKbWFXNWtUbTl1Ulcxd2RIbEpibVJsZUNJc0lDSnBjMFpzYjNkVWIydGxiaUlzSUNKMGIydGxiaUlzSUNKblpYUlFjbVYyVUhKdmNITWlMQ0FpY0dGeVpXNTBJaXdnSWw5aElpd2dJbWwwSWl3Z0ltZGxkRVpwY25OMFMyVjVVM1JoY25SUWNtOXdjeUlzSUNKd2NtVjJJaXdnSW14dmIzQWlMQ0FpWm1sNFJteHZkMU5sY1VsMFpXMXpJaXdnSW1aaklpd2dJbEJoY25ObGNpSXNJQ0p2Yms1bGQweHBibVVpTENBaVRHVjRaWElpTENBaWMyOTFjbU5sSWl3Z0ltbHVZMjl0Y0d4bGRHVWlMQ0FpYkdWNFpXMWxJaXdnSWw5ZmVXbGxiR1JUZEdGeUlpd2dJblJ2YTJWdVZIbHdaU0lzSUNKdFpYTnpZV2RsSWl3Z0luUnZjQ0lzSUNKdUlpd2dJbVZ5Y205eUlpd2dJbXhoYzNRaUxDQWljM1FpTENBaVpHOWpJaXdnSW1KMklpd2dJbk5qWVd4aGNpSXNJQ0p6ZEdGeWRDSXNJQ0p6WlhBaUxDQWliV0Z3SWl3Z0ltNXNJaXdnSW1WdVpDSXNJQ0poZEUxaGNFbHVaR1Z1ZENJc0lDSmhkRTVsZUhSSmRHVnRJaXdnSW10bGVTSXNJQ0ptY3lJc0lDSnpaWEVpTENBaWFXNWtaVzUwSWl3Z0ltUnZZMFZ1WkNJc0lDSndZWEp6WlU5d2RHbHZibk1pTENBaWIzQjBhVzl1Y3lJc0lDSndjbVYwZEhsRmNuSnZjbk1pTENBaVRHbHVaVU52ZFc1MFpYSWlMQ0FpY0dGeWMyVkViMk4xYldWdWRDSXNJQ0p6YjNWeVkyVWlMQ0FpYjNCMGFXOXVjeUlzSUNKc2FXNWxRMjkxYm5SbGNpSXNJQ0p3Y21WMGRIbEZjbkp2Y25NaUxDQWljR0Z5YzJWUGNIUnBiMjV6SWl3Z0luQmhjbk5sY2lJc0lDSlFZWEp6WlhJaUxDQWlZMjl0Y0c5elpYSWlMQ0FpUTI5dGNHOXpaWElpTENBaVpHOWpJaXdnSWw5a2IyTWlMQ0FpV1VGTlRGQmhjbk5sUlhKeWIzSWlMQ0FpY0hKbGRIUnBabmxGY25KdmNpSXNJQ0p3WVhKelpTSXNJQ0p6Y21NaUxDQWljbVYyYVhabGNpSXNJQ0pmY21WMmFYWmxjaUlzSUNKM1lYSnVhVzVuSWl3Z0luZGhjbTRpTENBaWFXMXdiM0owWDNOdmNuUmxaRjlpZEhKbFpTSXNJQ0pRSWl3Z0lreHBkR1Z5WVd4eklpd2dJblJ2VTNSeWFXNW5JaXdnSW1acFpXeGtJaXdnSW5ObGRIUnBibWNpTENBaWNtVmpkWEp6YVhabElpd2dJbmR5WVhCd1pXUWlMQ0FpZDNKaGNGWmhiSFZsSWl3Z0luSmxjM1ZzZENJc0lDSm1JaXdnSW1VaUxDQWljbVZ1WkdWeVRXbHVhVzFoYkVSaGRHVWlMQ0FpY21WdVpHVnlUV2x1YVcxaGJFUjFjbUYwYVc5dUlpd2dJblpoYkNJc0lDSnBjMDUxYkd3aUxDQWlhWE5PZFcxaVpYSWlMQ0FpYVhOVGRISnBibWNpTENBaWFYTkNiMjlzWldGdUlpd2dJbWx6UkhWeVlYUnBiMjRpTENBaWFYTkVZWFJsSWl3Z0ltbHpRWEp5WVhraUxDQWlhWE5NYVc1cklpd2dJbWx6Um5WdVkzUnBiMjRpTENBaWFYTlBZbXBsWTNRaUxDQWliV0Z3VEdWaGRtVnpJaXdnSW1aMWJtTWlMQ0FpYTJWNUlpd2dJblpoYkhWbElpd2dJbVZ4ZFdGc2N5SXNJQ0ptYVhKemRDSXNJQ0p6WldOdmJtUWlMQ0FpWTI5dGNHRnlaU0lzSUNKMllXd3hJaXdnSW5aaGJESWlMQ0FpYkdsdWEwNXZjbTFoYkdsNlpYSWlMQ0FpWDJFaUxDQWlYMklpTENBaWQzSmhjREVpTENBaWQzSmhjRElpTENBaWJHbHVhekVpTENBaWJHbHVheklpTENBaWJtOXliV0ZzYVhwbElpd2dJbmdpTENBaWNHRjBhRU52YlhCaGNtVWlMQ0FpZEhsd1pVTnZiWEJoY21VaUxDQWlaakVpTENBaVpqSWlMQ0FpYVc1a1pYZ2lMQ0FpWTI5dGNDSXNJQ0p2TVNJc0lDSnZNaUlzSUNKck1TSXNJQ0pyTWlJc0lDSnJaWGxEYjIxd1lYSmxJaXdnSW5SNWNHVlBaaUlzSUNKcGMxUnlkWFJvZVNJc0lDSmtaV1Z3UTI5d2VTSXNJQ0oySWl3Z0lrUmhkR1ZVYVcxbElpd2dJa1IxY21GMGFXOXVJaXdnSWt4cGJtc2lMQ0FpUjNKdmRYQnBibWR6SWl3Z0ltbHpSV3hsYldWdWRFZHliM1Z3SWl3Z0ltVnVkSEo1SWl3Z0ltbHpSM0p2ZFhCcGJtY2lMQ0FpWld4bGJXVnVkQ0lzSUNKcGMweGxZV1lpTENBaVkyOTFiblFpTENBaVpXeGxiV1Z1ZEhNaUxDQWljM1ZpWjNKdmRYQWlMQ0FpYzJ4cFkyVWlMQ0FpYzNSaGNuUWlMQ0FpWlc1a0lpd2dJbk5sWlc0aUxDQWlaM0p2ZFhBaUxDQWlaM0p2ZFhCVGFYcGxJaXdnSW1keWIzVndVM1JoY25RaUxDQWlaM0p2ZFhCRmJtUWlMQ0FpVTNWalkyVnpjeUlzSUNKZlUzVmpZMlZ6Y3lJc0lDSjJZV3gxWlNJc0lDSm1JaXdnSW5OMVkyTWlMQ0FpWDJaaGFXd2lMQ0FpWDNaaGJIVmxJaXdnSWw5dFpYTnpZV2RsSWl3Z0lrWmhhV3gxY21VaUxDQWlYMFpoYVd4MWNtVWlMQ0FpWlhKeWIzSWlMQ0FpWDJZaUxDQWlYM04xWTJNaUxDQWlabUZwYkNJc0lDSnRaWE56WVdkbElpd2dJbEpsYzNWc2RDSXNJQ0p6ZFdOalpYTnpJaXdnSW1aaGFXeDFjbVVpTENBaVpteGhkRTFoY0RJaUxDQWlabWx5YzNRaUxDQWljMlZqYjI1a0lpd2dJbTFoY0RJaUxDQWlZU0lzSUNKaUlpd2dJbTFoY0VGc2JDSXNJQ0pwYm5CMWRDSXNJQ0ptZFc1aklpd2dJbkpsYzNWc2RDSXNJQ0psYkdWdFpXNTBJaXdnSW05MWRIQjFkQ0lzSUNKMGNubHBibWNpTENBaVkyRnNiQ0lzSUNKaGMzbHVZeUlzSUNKd2NtOXRhWE5sSWl3Z0lrWnBiSFJsY25NaUxDQWlZWFJ2YlNJc0lDSnpaWFFpTENBaVkyOXVjM1JoYm5RaUxDQWlkbUZzZFdVaUxDQWliblZzYkdGaWJHVkJkRzl0SWl3Z0ltNWxaMkYwWldRaUxDQWlibVZuWVhSbElpd2dJbVpwYkhSbGNpSXNJQ0psYlhCMGVTSXNJQ0p5WlhOdmJIWmxJaXdnSW1WMlpYSjVkR2hwYm1jaUxDQWljMlYwU1c1MFpYSnpaV04wVG1WbllYUnBiMjRpTENBaWFXNTBaWEp6WldOMElpd2dJbVZzWlcxbGJuUnpJaXdnSW14aGVubEpiblJsY25ObFkzUWlMQ0FpZUNJc0lDSndjbTlrZFdObElpd2dJbXhoZW5sR1lXbHNZV0pzWlVsdWRHVnljMlZqZEdsdmJpSXNJQ0pTWlhOMWJIUWlMQ0FpWVhSdmJYTWlMQ0FpYm1WbllYUnBiMjV6SWl3Z0ltVnNaVzFsYm5RaUxDQWliV0Y1WW1WR2FXeDBaWElpTENBaWMyVjBTVzUwWlhKelpXTjBJaXdnSW5ObGRGVnVhVzl1SWl3Z0luVnVhVzl1SWl3Z0ltWnBiSFJsY25NaUxDQWliR0Y2ZVZWdWFXOXVJaXdnSW14aGVubEdZV2xzWVdKc1pWVnVhVzl1SWl3Z0luTmxkSE1pTENBaWMyOXlkR1ZrSWl3Z0ltRWlMQ0FpWWlJc0lDSnlaWE4xYkhRaUxDQWliR0Z5WjJWemRDSXNJQ0pGZUhCeVpYTnphVzl1Y3lJc0lDSjJZWEpwWVdKc1pTSXNJQ0p1WVcxbElpd2dJbXhwZEdWeVlXd2lMQ0FpZG1Gc2RXVWlMQ0FpWW1sdVlYSjVUM0FpTENBaWJHVm1kQ0lzSUNKdmNDSXNJQ0p5YVdkb2RDSXNJQ0pwYm1SbGVDSXNJQ0p2WW1vaUxDQWlhVzVrWlhoV1lYSnBZV0pzWlNJc0lDSndZWEowY3lJc0lDSnlaWE4xYkhRaUxDQWliR0Z0WW1SaElpd2dJbUZ5WjNNaUxDQWlablZ1WXlJc0lDSnNhWE4wSWl3Z0luWmhiSFZsY3lJc0lDSnZZbXBsWTNRaUxDQWlibVZuWVhSbElpd2dJbU5vYVd4a0lpd2dJbWx6UTI5dGNHRnlaVTl3SWl3Z0luVnVZbTkxYm1SV1lYSnBZV0pzWlhNaUxDQWlaWGh3Y2lJc0lDSmliM1Z1WkNJc0lDSk1hWFJsY21Gc2N5SXNJQ0pHYVd4MFpYSnpJaXdnSW1FaUxDQWlibVYzUW05MWJtUWlMQ0FpWVhKbklpd2dJbllpTENBaWRHOVRkSEpwYm1jaUxDQWlheUlzSUNKM2NtRndjR1ZrSWl3Z0lsQlNTVTFKVkVsV1JWTWlMQ0FpWHlJc0lDSnpkSElpTENBaWNTSXNJQ0pqYUdGeWN5SXNJQ0psYzJOaGNHVmtJaXdnSW5OMFlYSjBJaXdnSW5KbGMzUWlMQ0FpUlUxUFNrbGZVa1ZIUlZnaUxDQWlabWx5YzNRaUxDQWliR2x1YTBsdWJtVnlJaXdnSWt4cGJtc2lMQ0FpY0NJc0lDSnNJaXdnSWw5emRISWlMQ0FpZVdWaGNpSXNJQ0p0YjI1MGFDSXNJQ0pFWVhSbFZHbHRaU0lzSUNKRVFWUkZYMU5JVDFKVVNFRk9SRk1pTENBaVlTSXNJQ0ppSWl3Z0ltTm9ZV2x1VDNCMElpd2dJbmx0SWl3Z0ltUmhlU0lzSUNKNWJXUWlMQ0FpYUc5MWNpSXNJQ0o1YldSb0lpd2dJbTFwYm5WMFpTSXNJQ0o1YldSb2JTSXNJQ0p6WldOdmJtUWlMQ0FpZVcxa2FHMXpJaXdnSW0xcGJHeHBjMlZqYjI1a0lpd2dJbVIwSWl3Z0luQnRJaXdnSW1oeUlpd2dJbDloSWl3Z0lucHZibVVpTENBaVgySWlMQ0FpWkNJc0lDSkVWVkpCVkVsUFRsOVVXVkJGVXlJc0lDSmpiM1Z1ZENJc0lDSjBJaXdnSW5naUxDQWlaSFZ5WVhScGIyNXpJaXdnSW1NaUxDQWlibTl5YldGc2FYcGxSSFZ5WVhScGIyNGlMQ0FpWmlJc0lDSmZjeUlzSUNKbGJXOXFhVjl5WldkbGVGOWtaV1poZFd4MElpd2dJa1IxY21GMGFXOXVJaXdnSWtWWVVGSkZVMU5KVDA0aUxDQWlSWGh3Y21WemMybHZibk1pTENBaVkzSmxZWFJsUm5WdVkzUnBiMjRpTENBaVgyWjFibU1pTENBaVpHRjBaU0lzSUNKa2RYSWlMQ0FpYm1GdFpTSXNJQ0pmYzJWd0lpd2dJblpoYkhWbElpd2dJblpoYkhNaUxDQWljbVZ6SWl3Z0ltVnVkSEo1SWl3Z0ltOWlhaUlzSUNKd2IzTjBabWw0WlhNaUxDQWljbVZ6ZFd4MElpd2dJbkJ2YzNRaUxDQWlabWxsYkdRaUxDQWlhV1JsYm5RaUxDQWlYMmxuYm05eVpTSXNJQ0psZUhCeUlpd2dJbDh5SWl3Z0lsOHpJaXdnSWw4MElpd2dJbDh4SWl3Z0ltVjRjSEp6SWl3Z0ltTnlaV0YwWlVKcGJtRnllVkJoY25ObGNpSXNJQ0pSVlVWU1dTSXNJQ0pwWkNJc0lDSm1kVzVqSWl3Z0luQmhkR2dpTENBaVkyaHBiR1J5Wlc0aUxDQWljR0Z5Wlc1MGN5SXNJQ0pzYVc1cklpd2dJbk52ZFhKalpTSXNJQ0pzWldaMElpd2dJbDl2Y0NJc0lDSnlhV2RvZENJc0lDSmpjbVZoZEdWQ2FXNWhjbmxRWVhKelpYSWlMQ0FpWTJocGJHUWlMQ0FpYzJWd0lpd2dJbU52YldKcGJtVWlMQ0FpWm1seWMzUWlMQ0FpY21WemRDSXNJQ0p1YjJSbElpd2dJbWx1WkdWNElpd2dJbU55WldGMFpVWjFibU4wYVc5dUlpd2dJbVoxYm1NaUxDQWlZWEpuY3lJc0lDSnlaV0ZzUm5WdVl5SXNJQ0ptSWl3Z0ltRWlMQ0FpWTJoaGFXNVBjSFFpTENBaVltRnpaU0lzSUNKbWRXNWpjeUlzSUNKZmMzVmpZMlZ6Y3lJc0lDSmZabUZwYkhWeVpTSXNJQ0pwYm5CMWRDSXNJQ0p5WlhOMWJIUWlMQ0FpYm1WNGRDSXNJQ0pRSWl3Z0ltMWhjRTlpYW1WamRGWmhiSFZsY3lJc0lDSnZZbXBsWTNRaUxDQWlablZ1WXlJc0lDSnlaWE4xYkhRaUxDQWlhMlY1SWl3Z0luWmhiSFZsSWl3Z0lrcHpiMjVEYjI1MlpYSnphVzl1SWl3Z0ltbHVjSFYwSWl3Z0ltcHpiMjRpTENBaWJHbDBaWEpoYkNJc0lDSjNjbUZ3Y0dWa0lpd2dJa3hwZEdWeVlXeHpJaXdnSW0xaGNFOWlhbVZqZEZaaGJIVmxjeUlzSUNKMllXeDFaU0lzSUNKdWIzSnRZV3hwZW1WeUlpd2dJbllpTENBaWRIbHdaU0lzSUNKRVlYUmxWR2x0WlNJc0lDSkVkWEpoZEdsdmJpSXNJQ0pNYVc1cklpd2dJbXB6YjI1SmJteHBibVZHYVdWc1pDSXNJQ0ptYVdWc1pDSXNJQ0pLYzI5dVEyOXVkbVZ5YzJsdmJpSXNJQ0poYzBsdWJHbHVaVVpwWld4a0lpd2dJbXh2WTJGc0lpd2dJbXhwYm1WdWJ5SXNJQ0ptSWl3Z0luQmhjbk5sU1c1c2FXNWxWbUZzZFdVaUxDQWlTVTVNU1U1RlgwWkpSVXhFWDFkU1FWQlFSVkpUSWl3Z0ltWnBibVJEYkc5emFXNW5JaXdnSW14cGJtVWlMQ0FpYzNSaGNuUWlMQ0FpYjNCbGJpSXNJQ0pqYkc5elpTSXNJQ0p1WlhOMGFXNW5JaXdnSW1WelkyRndaV1FpTENBaWFXNWtaWGdpTENBaVkyaGhjaUlzSUNKbWFXNWtVMlZ3WVhKaGRHOXlJaXdnSW5ObGNDSXNJQ0ptYVc1a1UzQmxZMmxtYVdOSmJteHBibVZHYVdWc1pDSXNJQ0pyWlhraUxDQWlkbUZzZFdVaUxDQWlhVzVzYVc1bElpd2dJbEJTU1UxSlZFbFdSVk1pTENBaVpYaDBjbUZqZEVsdWJHbHVaVVpwWld4a2N5SXNJQ0pwYm1Oc2RXUmxWR0Z6YTBacFpXeGtjeUlzSUNKbWFXVnNaSE1pTENBaWQzSmhjSEJsY2lJc0lDSm1iM1Z1WkVsdVpHVjRJaXdnSW5CaGNuTmxaRVpwWld4a0lpd2dJbVY0ZEhKaFkzUlRjR1ZqYVdGc1ZHRnphMFpwWld4a2N5SXNJQ0poSWl3Z0ltSWlMQ0FpWm1sc2RHVnlaV1JHYVdWc1pITWlMQ0FpYVNJc0lDSkdWVXhNWDB4SlRrVmZTMFZaWDFCQlVsUWlMQ0FpWlcxdmFtbGZjbVZuWlhoZlpHVm1ZWFZzZENJc0lDSndZWEowY3lJc0lDSkdWVXhNWDB4SlRrVmZTMFZaWDFCQlVsTkZVaUlzSUNKbGVIUnlZV04wUm5Wc2JFeHBibVZHYVdWc1pDSXNJQ0owWlhoMElpd2dJbkpsWVd4TFpYa2lMQ0FpUTFKRlFWUkZSRjlFUVZSRlgxSkZSMFZZSWl3Z0lrUlZSVjlFUVZSRlgxSkZSMFZZSWl3Z0lrUlBUa1ZmUkVGVVJWOVNSVWRGV0NJc0lDSlRRMGhGUkZWTVJVUmZSRUZVUlY5U1JVZEZXQ0lzSUNKVFZFRlNWRjlFUVZSRlgxSkZSMFZZSWl3Z0lrVk5UMHBKWDFKRlIwVllSVk1pTENBaWNtVnpkV3gwY3lJc0lDSnlaV2RsZUNJc0lDSnRZWFJqYUNJc0lDSlpZVzFzUTI5dWRtVnljMmx2YmlJc0lDSjVZVzFzSWl3Z0luWmhiSFZsSWl3Z0luZHlZWEJ3WldRaUxDQWlUR2wwWlhKaGJITWlMQ0FpYkdsMFpYSmhiQ0lzSUNKdFlYQlBZbXBsWTNSV1lXeDFaWE1pTENBaWNtVnpkV3gwSWl3Z0ltTm9hV3hrSWl3Z0lrUmhkR1ZVYVcxbElpd2dJbTlpYW1WamRDSXNJQ0pyWlhraUxDQWlaR0YwWlZCaGNuTmxJaXdnSWxCU1NVMUpWRWxXUlZNaUxDQWlaSFZ5WVhScGIyNVFZWEp6WlNJc0lDSnNhVzVyVUdGeWMyVWlMQ0FpV1VGTlRGOUVRVlJCWDFKRlIwVllJaXdnSWtOUFJFVkNURTlEUzE5R1JVNURSVjlTUlVkRldDSXNJQ0pNU1ZOVVgwbFVSVTFmVWtWSFJWZ2lMQ0FpYldGeWEyUnZkMjVKYlhCdmNuUWlMQ0FpY0dGMGFDSXNJQ0p0WVhKclpHOTNiaUlzSUNKdFpYUmhaR0YwWVNJc0lDSnpkR0YwY3lJc0lDSnNhVzVsY3lJc0lDSndZV2RsVFdWMFlXUmhkR0VpTENBaVpuSnZiblJ0WVhSMFpYSWlMQ0FpYzJWamRHbHZibk1pTENBaWJXRnlhMlJ2ZDI1VGIzVnlZMlZKYlhCdmNuUWlMQ0FpVUdGblpVUmhkR0VpTENBaVgyRWlMQ0FpWDJJaUxDQWlYMk1pTENBaVgyUWlMQ0FpWDJVaUxDQWlYMllpTENBaVgyY2lMQ0FpWDJnaUxDQWlYMmtpTENBaVgyb2lMQ0FpWDJzaUxDQWlYMndpTENBaVgyMGlMQ0FpWDI0aUxDQWlYMjhpTENBaVgzQWlMQ0FpY0dGeWMyVkdjbTl1ZEcxaGRIUmxja0pzYjJOcklpd2dJbTFoY210a2IzZHVUV1YwWVdSaGRHRWlMQ0FpVFdWMFlXUmhkR0VpTENBaWMyVmpkR2x2YmtGeWNtRjVJaXdnSW0xbGRHRm9aV0ZrYVc1bmN5SXNJQ0poSWl3Z0ltSWlMQ0FpUWxSeVpXVWlMQ0FpYVc1a1pYZ2lMQ0FpWlc1MGNua2lMQ0FpYzNSaGNuUWlMQ0FpWlc1a0lpd2dJbk5sWTNScGIyNGlMQ0FpVTJWamRHbHZia1JoZEdFaUxDQWlaVzF3ZEhsc2FXNWxjeUlzSUNKblpYUkdhV3hsVkdsMGJHVWlMQ0FpWm1seWMzUWlMQ0FpWW14dlkydHpJaXdnSW1Kc2IyTnJUM0prYVc1aGJDSXNJQ0ppYkc5amF5SXNJQ0p6ZEdGeWRFeHBibVVpTENBaVRHbHpkRUpzYjJOclJHRjBZU0lzSUNKNVlXMXNJaXdnSW5Od2JHbDBJaXdnSW5CaGNuTmxJaXdnSWtSaGRHRmliRzlqYTBSaGRHRWlMQ0FpYldGMFkyZ2lMQ0FpUTI5a1pXSnNiMk5yUkdGMFlTSXNJQ0pzWVc1bmRXRm5aWE1pTENBaVFtRnpaVUpzYjJOclJHRjBZU0lzSUNKc2IyOXJkWEFpTENBaVkyOXVkR1Z1ZEZKbFoyVjRJaXdnSW0xaGNtdGxjbEpsWjJWNElpd2dJbXhwYzNSSmRHVnRjeUlzSUNKc2FYTjBJaXdnSW5ONWJXSnZiQ0lzSUNKMFpYaDBJaXdnSW1sMFpXMGlMQ0FpVEdsemRFbDBaVzFFWVhSaElpd2dJbXhwYzNSQ2JHOWpheUlzSUNKMFlXZGtaV1lpTENBaWRHRm5JaXdnSW14cGJtVWlMQ0FpY21GM2RHRm5JaXdnSW1WNGRISmhZM1JVWVdkeklpd2dJbXhwYm10a1pXWWlMQ0FpYkdsdWF5SXNJQ0pNYVc1cklpd2dJbVpwWld4a0lpd2dJbWwwWlhKaGRHVkpibXhwYm1WR2FXVnNaSE1pTENBaVkyOXVkR1Z1ZENJc0lDSnNhVzVsYm04aUxDQWlhVzVzYVc1bFJtbGxiR1J6SWl3Z0ltVjRkSEpoWTNSSmJteHBibVZHYVdWc1pITWlMQ0FpYVdacFpXeGtJaXdnSW1GelNXNXNhVzVsUm1sbGJHUWlMQ0FpWm5Wc2JFeHBibVVpTENBaVpYaDBjbUZqZEVaMWJHeE1hVzVsUm1sbGJHUWlMQ0FpY21WemRXeDBJaXdnSW10bGVTSXNJQ0oyWVd4MVpTSXNJQ0pLYzI5dVEyOXVkbVZ5YzJsdmJpSXNJQ0paWVcxc1EyOXVkbVZ5YzJsdmJpSXNJQ0owY21WbElpd2dJblJoY21kbGRDSXNJQ0pySWl3Z0luTndiR2wwUm5KdmJuUnRZWFIwWlhKVVlXZFBja0ZzYVdGeklpd2dJbkFpTENBaVl5SXNJQ0p6ZEhJaUxDQWlaR0YwWVNJc0lDSnZiaUlzSUNKeklpd2dJbllpTENBaWJHOTNaWElpTENBaWJXRndUMkpxWldOMFZtRnNkV1Z6SWl3Z0ltcHpiMjVKYm14cGJtVkdhV1ZzWkNJc0lDSnNaVzVuZEdnaUxDQWlaMlYwUlhoMFpXNXphVzl1SWl3Z0luZ2lMQ0FpZEdsMGJHVWlMQ0FpYkdWMlpXd2lMQ0FpYjNKa2FXNWhiQ0lzSUNKaWJHOWphMGxrSWl3Z0luTjBlV3hsSWl3Z0ltTnZiblJsYm5SVGRHRnlkQ0lzSUNKamIyNTBaVzUwUlc1a0lpd2dJblI1Y0dVaUxDQWljR0Z5Wlc1MFRHbHVaU0lzSUNKemRHRjBkWE1pTENBaVpXeGxiV1Z1ZENJc0lDSmpZVzUyWVhOSmJYQnZjblFpTENBaWNHRjBhQ0lzSUNKemIzVnlZMlVpTENBaWFXNWtaWGdpTENBaWMzUmhkSE1pTENBaVgyRWlMQ0FpWTJGdWRtRnpJaXdnSWtOaGJuWmhjMFJoZEdFaUxDQWljR0Z5YzJWa0lpd2dJbU1pTENBaVpuSnZiblJ0WVhSMFpYSWlMQ0FpYldWMFlXUmhkR0VpTENBaWJHbHVaWE1pTENBaWMyVmpkR2x2Ym5NaUxDQWliV0Z5YTJSdmQyNVRiM1Z5WTJWSmJYQnZjblFpTENBaVkyRnlaQ0lzSUNKRFlXNTJZWE5EWVhKa1JHRjBZU0lzSUNKcElpd2dJblJoWnlJc0lDSnNhVzVySWl3Z0ltWnBaV3hrSWl3Z0ltbDBaWEpoZEdWSmJteHBibVZHYVdWc1pITWlMQ0FpUVdKemRISmhZM1JEWVc1MllYTkRZWEprUkdGMFlTSXNJQ0pwWkNJc0lDSnViMlJsU25OdmJpSXNJQ0pOWlhSaFpHRjBZU0lzSUNKTWFXNXJJaXdnSW5ObFkzUnBiMjRpTENBaVgxOXpjSEpsWVdSUWNtOXdjeUlzSUNKZlgzTndjbVZoWkZaaGJIVmxjeUlzSUNKNElpd2dJbVFpTENBaVpYWmxiblFpTENBaWJXVnpjMkZuWlNJc0lDSnRZWEpyWkc5M2JpSXNJQ0p0WVhKclpHOTNia2x0Y0c5eWRDSXNJQ0pqWVc1MllYTWlMQ0FpWTJGdWRtRnpTVzF3YjNKMElpd2dJbVZ5Y205eUlsMEtmUW89XFxuXCIpO1xufVxuIiwgIi8qKiBDb250cm9scyBhbmQgY3JlYXRlcyBEYXRhdmlldyBmaWxlIGltcG9ydGVycywgYWxsb3dpbmcgZm9yIGFzeW5jaHJvbm91cyBsb2FkaW5nIGFuZCBwYXJzaW5nIG9mIGZpbGVzLiAqL1xuXG5pbXBvcnQgSW1wb3J0V29ya2VyIGZyb20gXCJpbmRleC93ZWItd29ya2VyL2ltcG9ydGVyLndvcmtlclwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBGaWxlTWFuYWdlciwgTWV0YWRhdGFDYWNoZSwgVEZpbGUsIFZhdWx0IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBDYW52YXNJbXBvcnQsIE1hcmtkb3duSW1wb3J0IH0gZnJvbSBcImluZGV4L3dlYi13b3JrZXIvbWVzc2FnZVwiO1xuaW1wb3J0IHsgRGVmZXJyZWQsIGRlZmVycmVkIH0gZnJvbSBcInV0aWxzL2RlZmVycmVkXCI7XG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIkBkYXRhc3RydWN0dXJlcy1qcy9xdWV1ZVwiO1xuXG4vKiogU2V0dGluZ3MgZm9yIHRocm90dGxpbmcgaW1wb3J0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRUaHJvdHRsZSB7XG4gICAgLyoqIFRoZSBudW1iZXIgb2Ygd29ya2VycyB0byB1c2UgZm9yIGltcG9ydHMuICovXG4gICAgd29ya2VyczogbnVtYmVyO1xuICAgIC8qKiBBIG51bWJlciBiZXR3ZWVuIDAuMSBhbmQgMSB3aGljaCBpbmRpY2F0ZXMgdG90YWwgY3B1IHV0aWxpemF0aW9uIHRhcmdldDsgMC4xIG1lYW5zIHNwZW5kIDEwJSBvZiB0aW1lICAqL1xuICAgIHV0aWxpemF0aW9uOiBudW1iZXI7XG59XG5cbi8qKiBEZWZhdWx0IHRocm90dGxlIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USFJPVFRMRTogSW1wb3J0VGhyb3R0bGUgPSB7XG4gICAgd29ya2VyczogMixcbiAgICB1dGlsaXphdGlvbjogMC43NSxcbn07XG5cbi8qKiBNdWx0aS10aHJlYWRlZCBmaWxlIHBhcnNlciB3aGljaCBkZWJvdW5jZXMgcmFwaWQgZmlsZSByZXF1ZXN0cyBhdXRvbWF0aWNhbGx5LiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVJbXBvcnRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyogQmFja2dyb3VuZCB3b3JrZXJzIHdoaWNoIGRvIHRoZSBhY3R1YWwgZmlsZSBwYXJzaW5nLiAqL1xuICAgIHdvcmtlcnM6IE1hcDxudW1iZXIsIFBvb2xXb3JrZXI+O1xuICAgIC8qKiBUaGUgbmV4dCB3b3JrZXIgSUQgdG8gaGFuZCBvdXQuICovXG4gICAgbmV4dFdvcmtlcklkOiBudW1iZXI7XG4gICAgLyoqIElmIHRydWUsIHRoZSBpbXBvcnRlciBpcyBub3cgaW5hY3RpdmUgYW5kIHdpbGwgbm90IHByb2Nlc3MgZnVydGhlciBmaWxlcy4gKi9cbiAgICBzaHV0ZG93bjogYm9vbGVhbjtcblxuICAgIC8qKiBMaXN0IG9mIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBxdWV1ZWQgZm9yIGEgcmVsb2FkLiAqL1xuICAgIHF1ZXVlOiBRdWV1ZTxbVEZpbGUsIERlZmVycmVkPGFueT5dPjtcbiAgICAvKiogT3V0c3RhbmRpbmcgbG9hZHMgaW5kZXhlZCBieSBwYXRoLiAqL1xuICAgIG91dHN0YW5kaW5nOiBNYXA8c3RyaW5nLCBQcm9taXNlPGFueT4+O1xuICAgIC8qKiBUaHJvdHRsZSBzZXR0aW5ncy4gKi9cbiAgICB0aHJvdHRsZTogKCkgPT4gSW1wb3J0VGhyb3R0bGU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB2YXVsdDogVmF1bHQsXG4gICAgICAgIHB1YmxpYyBmaWxlTWFuYWdlcjogRmlsZU1hbmFnZXIsXG4gICAgICAgIHB1YmxpYyBtZXRhZGF0YUNhY2hlOiBNZXRhZGF0YUNhY2hlLFxuICAgICAgICB0aHJvdHRsZT86ICgpID0+IEltcG9ydFRocm90dGxlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMud29ya2VycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5zaHV0ZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5leHRXb3JrZXJJZCA9IDA7XG4gICAgICAgIHRoaXMudGhyb3R0bGUgPSB0aHJvdHRsZSA/PyAoKCkgPT4gREVGQVVMVF9USFJPVFRMRSk7XG5cbiAgICAgICAgdGhpcy5xdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuICAgICAgICB0aGlzLm91dHN0YW5kaW5nID0gbmV3IE1hcCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXVlIHRoZSBnaXZlbiBmaWxlIGZvciBpbXBvcnRpbmcuIE11bHRpcGxlIGltcG9ydCByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgZmlsZSBpbiBhIHNob3J0IHRpbWUgcGVyaW9kIHdpbGwgYmUgZGUtYm91bmNlZFxuICAgICAqIGFuZCBhbGwgYmUgcmVzb2x2ZWQgYnkgYSBzaW5nbGUgYWN0dWFsIGZpbGUgcmVsb2FkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbXBvcnQ8VD4oZmlsZTogVEZpbGUpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgLy8gRGUtYm91bmNlIHJlcGVhdGVkIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBmaWxlLlxuICAgICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm91dHN0YW5kaW5nLmdldChmaWxlLnBhdGgpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgICAgICBsZXQgcHJvbWlzZSA9IGRlZmVycmVkPFQ+KCk7XG5cbiAgICAgICAgdGhpcy5vdXRzdGFuZGluZy5zZXQoZmlsZS5wYXRoLCBwcm9taXNlKTtcbiAgICAgICAgdGhpcy5xdWV1ZS5lbnF1ZXVlKFtmaWxlLCBwcm9taXNlXSk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqIFJlc2V0IGFueSBhY3RpdmUgdGhyb3R0bGVzIG9uIHRoZSBpbXBvcnRlciAoc3VjaCBhcyBpZiB0aGUgdXRpbGl6YXRpb24gY2hhbmdlcykuICovXG4gICAgcHVibGljIHVudGhyb3R0bGUoKSB7XG4gICAgICAgIGZvciAobGV0IHdvcmtlciBvZiB0aGlzLndvcmtlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IERhdGUubm93KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUG9sbCBmcm9tIHRoZSBxdWV1ZSBhbmQgZXhlY3V0ZSBpZiB0aGVyZSBpcyBhbiBhdmFpbGFibGUgd29ya2VyLiAqL1xuICAgIHByaXZhdGUgYXN5bmMgc2NoZWR1bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXVlLnNpemUoKSA9PSAwIHx8IHRoaXMuc2h1dGRvd24pIHJldHVybjtcblxuICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLmF2YWlsYWJsZVdvcmtlcigpO1xuICAgICAgICBpZiAoIXdvcmtlcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IFtmaWxlLCBwcm9taXNlXSA9IHRoaXMucXVldWUuZGVxdWV1ZSgpITtcbiAgICAgICAgd29ya2VyLmFjdGl2ZSA9IFtmaWxlLCBwcm9taXNlLCBEYXRlLm5vdygpXTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3dpdGNoIChmaWxlLmV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXJrZG93blwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJtZFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdGhpcy52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXIhLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm1hcmtkb3duXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0OiBmaWxlLnN0YXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKSxcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBNYXJrZG93bkltcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFwiY2FudmFzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBhd2FpdCB0aGlzLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlciEud29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2FudmFzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0OiBmaWxlLnN0YXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5maWxlTWFuYWdlci5saW5rVXBkYXRlcnMuY2FudmFzLmNhbnZhcy5pbmRleC5pbmRleFtmaWxlLnBhdGhdLFxuICAgICAgICAgICAgICAgICAgICB9IGFzIENhbnZhc0ltcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWNvcmU6IEJhY2tncm91bmQgZmlsZSByZWxvYWRpbmcgZmFpbGVkLiBcIiArIGV4KTtcblxuICAgICAgICAgICAgLy8gTWVzc2FnZSBmYWlsZWQsIHJlbGVhc2UgdGhpcyB3b3JrZXIuXG4gICAgICAgICAgICB3b3JrZXIuYWN0aXZlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZpbmlzaCB0aGUgcGFyc2luZyBvZiBhIGZpbGUsIHBvdGVudGlhbGx5IHF1ZXVlaW5nIGEgbmV3IGZpbGUuICovXG4gICAgcHJpdmF0ZSBmaW5pc2god29ya2VyOiBQb29sV29ya2VyLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgaWYgKCF3b3JrZXIuYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFjb3JlOiBSZWNlaXZlZCBhIHN0YWxlIHdvcmtlciBtZXNzYWdlLiBJZ25vcmluZy5cIiwgZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbZmlsZSwgcHJvbWlzZSwgc3RhcnRdID0gd29ya2VyLmFjdGl2ZSE7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwcm9taXNlcyB0byBsZXQgdXNlcnMga25vdyB0aGlzIGZpbGUgaGFzIGZpbmlzaGVkLlxuICAgICAgICBpZiAoXCIkZXJyb3JcIiBpbiBkYXRhKSBwcm9taXNlLnJlamVjdChkYXRhW1wiJGVycm9yXCJdKTtcbiAgICAgICAgZWxzZSBwcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGZpbGUgZnJvbSBvdXRzdGFuZGluZy5cbiAgICAgICAgdGhpcy5vdXRzdGFuZGluZy5kZWxldGUoZmlsZS5wYXRoKTtcblxuICAgICAgICAvLyBSZW1vdmUgdGhpcyB3b3JrZXIgaWYgd2UgYXJlIG92ZXIgY2FwYWNpdHkuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgbm90aWZ5IHRoZSBxdWV1ZSB0aGlzIGZpbGUgaXMgYXZhaWxhYmxlIGZvciBuZXcgd29yay5cbiAgICAgICAgaWYgKHRoaXMud29ya2Vycy5zaXplID4gdGhpcy50aHJvdHRsZSgpLndvcmtlcnMpIHtcbiAgICAgICAgICAgIHRoaXMud29ya2Vycy5kZWxldGUod29ya2VyLmlkKTtcbiAgICAgICAgICAgIHRlcm1pbmF0ZSh3b3JrZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IHRocm90dGxlID0gTWF0aC5tYXgoMC4xLCB0aGlzLnRocm90dGxlKCkudXRpbGl6YXRpb24pIC0gMS4wO1xuICAgICAgICAgICAgY29uc3QgZGVsYXkgPSAobm93IC0gc3RhcnQpICogdGhyb3R0bGU7XG5cbiAgICAgICAgICAgIHdvcmtlci5hY3RpdmUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmIChkZWxheSA8PSAxZS0xMCkge1xuICAgICAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IG5vdztcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdvcmtlci5hdmFpbGFibGVBdCA9IG5vdyArIGRlbGF5O1xuXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogSSdtIHByZXR0eSBzdXJlIHRoaXMgd2lsbCBnYXJhdW50ZWUgdGhhdCB0aGlzIGV4ZWN1dGVzIEFGVEVSIGRlbGF5IG1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICAvLyBzbyB0aGlzIHNob3VsZCBiZSBmaW5lOyBpZiBpdCdzIG5vdCwgd2UnbGwgaGF2ZSB0byBzd2FwIHRvIGFuIGV4dGVybmFsIHRpbWVvdXQgbG9vcFxuICAgICAgICAgICAgICAgIC8vIHdoaWNoIGluZmluaXRlbHkgcmVzY2hlZHVsZXMgaXRzZWxmIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBleGVjdXRpb24gdGltZS5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuc2NoZWR1bGUuYmluZCh0aGlzKSwgZGVsYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9idGFpbiBhbiBhdmFpbGFibGUgd29ya2VyLCByZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG9uZSBkb2VzIG5vdCBleGlzdC4gKi9cbiAgICBwcml2YXRlIGF2YWlsYWJsZVdvcmtlcigpOiBQb29sV29ya2VyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZm9yIChsZXQgd29ya2VyIG9mIHRoaXMud29ya2Vycy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKCF3b3JrZXIuYWN0aXZlICYmIHdvcmtlci5hdmFpbGFibGVBdCA8PSBub3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBhIG5ldyB3b3JrZXIgaWYgd2UgY2FuLlxuICAgICAgICBpZiAodGhpcy53b3JrZXJzLnNpemUgPCB0aGlzLnRocm90dGxlKCkud29ya2Vycykge1xuICAgICAgICAgICAgbGV0IHdvcmtlciA9IHRoaXMubmV3V29ya2VyKCk7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMuc2V0KHdvcmtlci5pZCwgd29ya2VyKTtcbiAgICAgICAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYSBuZXcgd29ya2VyIGJvdW5kIHRvIHRoaXMgaW1wb3J0ZXIuICovXG4gICAgcHJpdmF0ZSBuZXdXb3JrZXIoKTogUG9vbFdvcmtlciB7XG4gICAgICAgIGxldCB3b3JrZXI6IFBvb2xXb3JrZXIgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5uZXh0V29ya2VySWQrKyxcbiAgICAgICAgICAgIGF2YWlsYWJsZUF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgd29ya2VyOiBuZXcgSW1wb3J0V29ya2VyKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgd29ya2VyLndvcmtlci5vbm1lc3NhZ2UgPSAoZXZ0KSA9PiB0aGlzLmZpbmlzaCh3b3JrZXIsIGV2dC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIHdvcmtlcjtcbiAgICB9XG5cbiAgICAvKiogUmVqZWN0IGFsbCBvdXRzdGFuZGluZyBwcm9taXNlcyBhbmQgY2xvc2UgYWxsIHdvcmtlcnMgb24gY2xvc2UuICovXG4gICAgcHVibGljIG9udW5sb2FkKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCB3b3JrZXIgb2YgdGhpcy53b3JrZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB0ZXJtaW5hdGUod29ya2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICghdGhpcy5xdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtfZmlsZSwgcHJvbWlzZV0gPSB0aGlzLnF1ZXVlLnBvcCgpITtcbiAgICAgICAgICAgIHByb21pc2UucmVqZWN0KFwiVGVybWluYXRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2h1dGRvd24gPSB0cnVlO1xuICAgIH1cbn1cblxuLyoqIEEgd29ya2VyIGluIHRoZSBwb29sIG9mIGV4ZWN1dGluZyB3b3JrZXJzLiAqL1xuaW50ZXJmYWNlIFBvb2xXb3JrZXIge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhpcyB3b3JrZXIuICovXG4gICAgaWQ6IG51bWJlcjtcbiAgICAvKiogVGhlIHJhdyB1bmRlcmx5aW5nIHdvcmtlci4gKi9cbiAgICB3b3JrZXI6IFdvcmtlcjtcbiAgICAvKiogVU5JWCB0aW1lIGluZGljYXRpbmcgdGhlIG5leHQgdGltZSB0aGlzIHdvcmtlciBpcyBhdmFpbGFibGUgZm9yIGV4ZWN1dGlvbiBhY2NvcmRpbmcgdG8gdGFyZ2V0IHV0aWxpemF0aW9uLiAqL1xuICAgIGF2YWlsYWJsZUF0OiBudW1iZXI7XG4gICAgLyoqIFRoZSBhY3RpdmUgcHJvbWlzZSB0aGlzIHdvcmtlciBpcyB3b3JraW5nIG9uLCBpZiBhbnkuICovXG4gICAgYWN0aXZlPzogW1RGaWxlLCBEZWZlcnJlZDxhbnk+LCBudW1iZXJdO1xufVxuXG4vKiogVGVybWluYXRlIGEgcG9vbCB3b3JrZXIuICovXG5mdW5jdGlvbiB0ZXJtaW5hdGUod29ya2VyOiBQb29sV29ya2VyKSB7XG4gICAgd29ya2VyLndvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgIGlmICh3b3JrZXIuYWN0aXZlKSB3b3JrZXIuYWN0aXZlWzFdLnJlamVjdChcIlRlcm1pbmF0ZWRcIik7XG4gICAgd29ya2VyLmFjdGl2ZSA9IHVuZGVmaW5lZDtcbn1cbiIsICJpbXBvcnQgeyBkZWZlcnJlZCwgRGVmZXJyZWQgfSBmcm9tIFwidXRpbHMvZGVmZXJyZWRcIjtcbmltcG9ydCB7IERhdGFzdG9yZSwgU3Vic3RvcmVyIH0gZnJvbSBcImluZGV4L2RhdGFzdG9yZVwiO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlQ2FjaGUgfSBmcm9tIFwiaW5kZXgvcGVyc2lzdGVyXCI7XG5pbXBvcnQgeyBJbmRleGFibGUsIElOREVYQUJMRV9FWFRFTlNJT05TIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgRmlsZUltcG9ydGVyLCBJbXBvcnRUaHJvdHRsZSB9IGZyb20gXCJpbmRleC93ZWItd29ya2VyL2ltcG9ydGVyXCI7XG5pbXBvcnQgeyBJbXBvcnRSZXN1bHQgfSBmcm9tIFwiaW5kZXgvd2ViLXdvcmtlci9tZXNzYWdlXCI7XG5pbXBvcnQgeyBBcHAsIENvbXBvbmVudCwgRXZlbnRSZWYsIEV2ZW50cywgTWV0YWRhdGFDYWNoZSwgVEFic3RyYWN0RmlsZSwgVEZpbGUsIFZhdWx0IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gXCJzZXR0aW5nc1wiO1xuaW1wb3J0IHsgTWFya2Rvd25MaXN0QmxvY2ssIE1hcmtkb3duTGlzdEl0ZW0sIE1hcmtkb3duUGFnZSB9IGZyb20gXCIuL3R5cGVzL21hcmtkb3duXCI7XG5pbXBvcnQgeyBHZW5lcmljRmlsZSB9IGZyb20gXCIuL3R5cGVzL2ZpbGVzXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgRW1iZWRRdWV1ZSB9IGZyb20gXCIuL2VtYmVkLXF1ZXVlXCI7XG5pbXBvcnQgeyBKc29uTWFya2Rvd25QYWdlIH0gZnJvbSBcIi4vdHlwZXMvanNvbi9tYXJrZG93blwiO1xuaW1wb3J0IHsgQ2FudmFzLCBDYW52YXNUZXh0Q2FyZCB9IGZyb20gXCIuL3R5cGVzL2NhbnZhc1wiO1xuXG4vKiogQ2VudHJhbCBBUEkgb2JqZWN0OyBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBldmVudHMsIGRlYm91bmNpbmcsIGFuZCBhY2Nlc3MgdG8gZGF0YWNvcmUgZnVuY3Rpb25hbGl0eS4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhY29yZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyoqIEFjY2VzcyB0byB0aGUgb2JzaWRpYW4gdmF1bHQuICovXG4gICAgdmF1bHQ6IFZhdWx0O1xuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyLShtYXJrZG93biktZmlsZSBtZXRhZGF0YS4gKi9cbiAgICBtZXRhZGF0YUNhY2hlOiBNZXRhZGF0YUNhY2hlO1xuICAgIC8qKiBEYXRhY29yZSBldmVudHMsIG1haW5seSB1c2VkIHRvIHVwZGF0ZSBkb3duc3RyZWFtIHZpZXdzLiBUaGlzIG9iamVjdCBpcyBzaGFkb3dlZCBieSB0aGUgRGF0YWNvcmUgb2JqZWN0IGl0c2VsZi4gKi9cbiAgICBldmVudHM6IEV2ZW50cztcblxuICAgIC8qKiBJbi1tZW1vcnkgaW5kZXggb3ZlciBhbGwgc3RvcmVkIG1ldGFkYXRhLiAqL1xuICAgIGRhdGFzdG9yZTogRGF0YXN0b3JlO1xuICAgIC8qKiBBc3luY2hyb25vdXMgbXVsdGktdGhyZWFkZWQgZmlsZSBpbXBvcnRlciB3aXRoIHRocm90dGxpbmcuICovXG4gICAgaW1wb3J0ZXI6IEZpbGVJbXBvcnRlcjtcbiAgICAvKiogUXVldWUgb2YgYXN5bmNocm9ub3VzIHJlYWQgcmVxdWVzdHM7IGVuc3VyZXMgd2UgbGltaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgZmlsZSBsb2Fkcy4gKi9cbiAgICByZWFkczogRW1iZWRRdWV1ZTtcbiAgICAvKiogTG9jYWwtc3RvcmFnZSBiYWNrZWQgY2FjaGUgb2YgbWV0YWRhdGEgb2JqZWN0cy4gKi9cbiAgICBwZXJzaXN0ZXI6IExvY2FsU3RvcmFnZUNhY2hlO1xuICAgIC8qKiBPbmx5IHNldCB3aGVuIGRhdGFjb3JlIGlzIGluIHRoZSBtaWRzdCBvZiBpbml0aWFsaXphdGlvbjsgdHJhY2tzIGN1cnJlbnQgcHJvZ3Jlc3MuICovXG4gICAgaW5pdGlhbGl6ZXI/OiBEYXRhY29yZUluaXRpYWxpemVyO1xuICAgIC8qKiBJZiB0cnVlLCBkYXRhY29yZSBpcyBmdWxseSBoeWRyYXRlZCBhbmQgYWxsIGZpbGVzIGhhdmUgYmVlbiBpbmRleGVkLiAqL1xuICAgIGluaXRpYWxpemVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGFwcDogQXBwLCBwdWJsaWMgdmVyc2lvbjogc3RyaW5nLCBwdWJsaWMgc2V0dGluZ3M6IFNldHRpbmdzKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy52YXVsdCA9IGFwcC52YXVsdDtcbiAgICAgICAgdGhpcy5tZXRhZGF0YUNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGU7XG4gICAgICAgIHRoaXMucGVyc2lzdGVyID0gbmV3IExvY2FsU3RvcmFnZUNhY2hlKFwicHJpbWFyeVwiLCB2ZXJzaW9uKTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG5cbiAgICAgICAgdGhpcy5kYXRhc3RvcmUgPSBuZXcgRGF0YXN0b3JlKGFwcC52YXVsdCwgYXBwLm1ldGFkYXRhQ2FjaGUsIHNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICAgICAgICAodGhpcy5pbXBvcnRlciA9IG5ldyBGaWxlSW1wb3J0ZXIoYXBwLnZhdWx0LCBhcHAuZmlsZU1hbmFnZXIsIGFwcC5tZXRhZGF0YUNhY2hlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2Vyczogc2V0dGluZ3MuaW1wb3J0ZXJOdW1UaHJlYWRzLFxuICAgICAgICAgICAgICAgICAgICB1dGlsaXphdGlvbjogTWF0aC5tYXgoMC4xLCBNYXRoLm1pbigxLjAsIHNldHRpbmdzLmltcG9ydGVyVXRpbGl6YXRpb24pKSxcbiAgICAgICAgICAgICAgICB9IGFzIEltcG9ydFRocm90dGxlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVE9ETyAoYmxhY2tzbWl0aGd1KTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIGVtYmVkIHF1ZXVlIGNvbmN1cnJlbmN5LlxuICAgICAgICB0aGlzLmFkZENoaWxkKCh0aGlzLnJlYWRzID0gbmV3IEVtYmVkUXVldWUoYXBwLnZhdWx0LCAoKSA9PiA4KSkpO1xuICAgIH1cblxuICAgIC8qKiBPYnRhaW4gdGhlIGN1cnJlbnQgaW5kZXggcmV2aXNpb24sIGZvciBkZXRlcm1pbmluZyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZC4gKi9cbiAgICBnZXQgcmV2aXNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzdG9yZS5yZXZpc2lvbjtcbiAgICB9XG5cbiAgICAvKiogSW5pdGlhbGl6ZSBkYXRhY29yZSBieSBzY2FubmluZyBwZXJzaXN0ZWQgY2FjaGVzIGFuZCBhbGwgYXZhaWxhYmxlIGZpbGVzLCBhbmQgcXVldWVpbmcgcGFyc2VzIGFzIG5lZWRlZC4gKi9cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICAvLyBNZXRhZGF0YSBjYWNoZSBoYW5kbGVzIG1hcmtkb3duIGZpbGUgdXBkYXRlcy5cbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMubWV0YWRhdGFDYWNoZS5vbihcInJlc29sdmVcIiwgKGZpbGUpID0+IHRoaXMucmVsb2FkKGZpbGUpKSk7XG5cbiAgICAgICAgLy8gUmVuYW1lcyBkbyBub3Qgc2V0IG9mZiB0aGUgbWV0YWRhdGEgY2FjaGU7IGNhdGNoIHRoZXNlIGV4cGxpY2l0bHkuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLnZhdWx0Lm9uKFwicmVuYW1lXCIsIHRoaXMucmVuYW1lLCB0aGlzKSk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGdlbmVyaWMgZmlsZSBjcmVhdGVzIGFuZCB1cGRhdGVzOyByZXNvbHZlIGdlbmVyYWxseSBvbmx5IGFwcGxpZXMgdG8gbWFya2Rvd24gZmlsZXNcbiAgICAgICAgLy8gYnV0IHdlIGRvIGtlZXAgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYWxsIGZpbGVzLlxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoXG4gICAgICAgICAgICB0aGlzLnZhdWx0Lm9uKFwiY3JlYXRlXCIsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlZCBieSB0aGUgbWV0YWRhdGEgY2FjaGUuXG4gICAgICAgICAgICAgICAgaWYgKElOREVYQUJMRV9FWFRFTlNJT05TLmhhcyhmaWxlLmV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoZmlsZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudChcbiAgICAgICAgICAgIHRoaXMudmF1bHQub24oXCJtb2RpZnlcIiwgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGVkIGJ5IHRoZSBtZXRhZGF0YSBjYWNoZS5cbiAgICAgICAgICAgICAgICBpZiAoSU5ERVhBQkxFX0VYVEVOU0lPTlMuaGFzKGZpbGUuZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZChmaWxlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRmlsZSBjcmVhdGlvbiBkb2VzIGNhdXNlIGEgbWV0YWRhdGEgY2hhbmdlLCBidXQgZGVsZXRlcyBkbyBub3QuIENsZWFyIHRoZSBjYWNoZXMgZm9yIHRoaXMuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudChcbiAgICAgICAgICAgIHRoaXMudmF1bHQub24oXCJkZWxldGVcIiwgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXN0b3JlLmRlbGV0ZShmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pbmRleCgpO1xuICAgIH1cblxuICAgIC8qKiBTdGFydHMgdGhlIGJhY2tncm91bmQgaW5pdGlhbGl6ZXIuICovXG4gICAgaW5kZXgoKSB7XG4gICAgICAgIC8vIEFzeW5jaHJvbm91c2x5IGluaXRpYWxpemUgYWN0dWFsIGNvbnRlbnQgaW4gdGhlIGJhY2tncm91bmQgdXNpbmcgYSBsaWZlY3ljbGUtcmVzcGVjdGluZyBvYmplY3QuXG4gICAgICAgIGNvbnN0IGluaXQgPSAodGhpcy5pbml0aWFsaXplciA9IG5ldyBEYXRhY29yZUluaXRpYWxpemVyKHRoaXMpKTtcbiAgICAgICAgaW5pdC5maW5pc2hlZCgpLnRoZW4oKHN0YXRzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGluaXQpO1xuXG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvblNlY3MgPSAoc3RhdHMuZHVyYXRpb25NcyAvIDEwMDAuMCkudG9GaXhlZCgzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGBEYXRhY29yZTogSW1wb3J0ZWQgYWxsIGZpbGVzIGluIHRoZSB2YXVsdCBpbiAke2R1cmF0aW9uU2Vjc31zIGAgK1xuICAgICAgICAgICAgICAgICAgICBgKCR7c3RhdHMuaW1wb3J0ZWR9IGltcG9ydGVkLCAke3N0YXRzLmNhY2hlZH0gY2FjaGVkLCAke3N0YXRzLnNraXBwZWR9IHNraXBwZWQpLmBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YXN0b3JlLnRvdWNoKCk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJ1cGRhdGVcIiwgdGhpcy5yZXZpc2lvbik7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJpbml0aWFsaXplZFwiKTtcblxuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGRvY3VtZW50cyB3aGljaCBubyBsb25nZXIgZXhpc3QgaW4gdGhlIHZhdWx0LlxuICAgICAgICAgICAgLy8gVE9ETzogSSB0aGluayB0aGlzIG1heSByYWNlIHdpdGggb3RoZXIgY29uY3VycmVudCBvcGVyYXRpb25zLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyBtYXkgbmVlZCB0byBoYXBwZW4gYXQgdGhlIHN0YXJ0IG9mIGluaXQgYW5kIG5vdCBhdCB0aGUgZW5kLlxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbGVzID0gdGhpcy52YXVsdC5nZXRGaWxlcygpLm1hcCgoZmlsZSkgPT4gZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVyXG4gICAgICAgICAgICAgICAgLnN5bmNocm9uaXplKGN1cnJlbnRGaWxlcylcbiAgICAgICAgICAgICAgICAudGhlbigoY2xlYXJlZCkgPT4gY29uc29sZS5sb2coYERhdGFjb3JlOiBkcm9wcGVkICR7Y2xlYXJlZC5zaXplfSBvdXQtb2YtZGF0ZSBmaWxlIG1ldGFkYXRhIGJsb2Nrcy5gKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoaW5pdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5hbWUoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlbGV0ZSB0aGUgZmlsZSBhdCB0aGUgb2xkIHBhdGgsIHRoZW4gcmVxdWVzdCBhIHJlbG9hZCBhdCB0aGUgbmV3IHBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgbGVzcyBvcHRpbWFsIHRoYW4gd2hhdCBjYW4gcHJvYmFibHkgYmUgZG9uZSwgYnV0IHBhdGhzIGFyZSB1c2VkIGluIGEgYnVuY2ggb2YgcGxhY2VzXG4gICAgICAgIC8vIChmb3Igc2VjdGlvbnMsIHRhc2tzLCBldGMgdG8gcmVmZXIgdG8gdGhlaXIgcGFyZW50IGZpbGUpIGFuZCBpdCByZXF1aXJlcyBzb21lIGZpbmVzc2UgdG8gZml4LlxuICAgICAgICB0aGlzLmRhdGFzdG9yZS5kZWxldGUob2xkUGF0aCk7XG4gICAgICAgIHRoaXMucmVsb2FkKGZpbGUpO1xuXG4gICAgICAgIC8vIFRPRE86IEZvciBjb3JyZWN0bmVzcywgcHJvYmFibHkgaGF2ZSB0byBlaXRoZXIgZml4IGxpbmtzIGluIGFsbCBsaW5rZWQgZmlsZXMgT1JcbiAgICAgICAgLy8ganVzdCBzdG9wIG5vcm1hbGl6aW5nIGxpbmtzIGluIHRoZSBzdG9yZS5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgZmlsZSBmcm9tIHRoZSBPYnNpZGlhbiBjYWNoZSBlZmZpY2llbnRseSwgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHJlcXVlc3QgYW5kIGRlYm91bmNpbmdcbiAgICAgKiBtdWx0aXBsZSByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgZmlsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgcmVhZChmaWxlOiBURmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRzLnJlYWQoZmlsZSk7XG4gICAgfVxuXG4gICAgLyoqIFF1ZXVlIGEgZmlsZSBmb3IgcmVsb2FkaW5nOyB0aGlzIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgaW4gdGhlIGJhY2tncm91bmQgYW5kIG1heSB0YWtlIGEgZmV3IHNlY29uZHMuICovXG4gICAgcHVibGljIGFzeW5jIHJlbG9hZChmaWxlOiBURmlsZSk6IFByb21pc2U8SW5kZXhhYmxlPiB7XG4gICAgICAgIC8vIEZpbHRlciBmaWxlcyBieSBmaWxlIGV4dGVuc2lvbnMuXG4gICAgICAgIGlmICghSU5ERVhBQkxFX0VYVEVOU0lPTlMuaGFzKGZpbGUuZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEdlbmVyaWNGaWxlKFxuICAgICAgICAgICAgICAgIGZpbGUucGF0aCxcbiAgICAgICAgICAgICAgICBEYXRlVGltZS5mcm9tTWlsbGlzKGZpbGUuc3RhdC5jdGltZSksXG4gICAgICAgICAgICAgICAgRGF0ZVRpbWUuZnJvbU1pbGxpcyhmaWxlLnN0YXQubXRpbWUpLFxuICAgICAgICAgICAgICAgIGZpbGUuc3RhdC5zaXplXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFzdG9yZS5zdG9yZShyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaW1wb3J0ZXIuaW1wb3J0PEltcG9ydFJlc3VsdD4oZmlsZSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGltcG9ydCBmaWxlICcke2ZpbGUubmFtZX06ICR7cmVzdWx0LiRlcnJvcn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQudHlwZSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgZmlsZSBhbmQgbm9ybWFsaXplIG1ldGFkYXRhIGZyb20gaXQuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBNYXJrZG93blBhZ2UuZnJvbShyZXN1bHQucmVzdWx0LCAobGluaykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJwYXRoID0gdGhpcy5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KGxpbmsucGF0aCwgcmVzdWx0LnJlc3VsdC4kcGF0aCEpO1xuICAgICAgICAgICAgICAgIGlmIChycGF0aCkgcmV0dXJuIGxpbmsud2l0aFBhdGgocnBhdGgucGF0aCk7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gbGluaztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBTdG9yZSBpdCByZWN1cnNpdmVseSBpbnRvIHRoZSBkYXRhc3RvcmUgZm9yIHF1ZXJ5aW5nLlxuICAgICAgICAgICAgdGhpcy5zdG9yZU1hcmtkb3duKHBhcnNlZCk7XG5cbiAgICAgICAgICAgIC8vIFdyaXRlIGl0IHRvIHRoZSBmaWxlIGNhY2hlIGZvciBmYXN0ZXIgbG9hZHMgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVyLnN0b3JlRmlsZShwYXJzZWQuJHBhdGgsIHBhcnNlZC5qc29uKCkpO1xuXG4gICAgICAgICAgICAvLyBBbmQgZmluYWxseSB0cmlnZ2VyIGFuIHVwZGF0ZS5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInVwZGF0ZVwiLCB0aGlzLnJldmlzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnR5cGUgPT09IFwiY2FudmFzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IENhbnZhcy5mcm9tKHJlc3VsdC5yZXN1bHQsIChsaW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnBhdGggPSB0aGlzLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGluay5wYXRoLCByZXN1bHQucmVzdWx0LiRwYXRoISk7XG4gICAgICAgICAgICAgICAgaWYgKHJwYXRoKSByZXR1cm4gbGluay53aXRoUGF0aChycGF0aC5wYXRoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBsaW5rO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlQ2FudmFzKHBhcnNlZCk7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3Rlci5zdG9yZUZpbGUocGFyc2VkLiRwYXRoLCBwYXJzZWQuanNvbigpKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInVwZGF0ZVwiLCB0aGlzLnJldmlzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvdW50ZXJlZCB1bnJlY29nbml6ZWQgaW1wb3J0IHJlc3VsdCB0eXBlOiBcIiArIChyZXN1bHQgYXMgYW55KS50eXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcmVDYW52YXMoZGF0YTogQ2FudmFzKSB7XG4gICAgICAgIHRoaXMuZGF0YXN0b3JlLnN0b3JlKGRhdGEsIChvYmplY3QsIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICBzdG9yZShvYmplY3QuJGNhcmRzLCAoY2FyZCwgc3RvcmUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FyZCBpbnN0YW5jZW9mIENhbnZhc1RleHRDYXJkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlKGNhcmQuJHNlY3Rpb25zLCAoc2VjdGlvbiwgc3RvcmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlKHNlY3Rpb24uJGJsb2NrcywgKGJsb2NrLCBzdG9yZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jayBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZSBzdG9yZSBmdW5jdGlvbiBmb3Igc3RvcmluZyBsaXN0IGhlaXJhcmNoaWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yZVJlYzogU3Vic3RvcmVyPE1hcmtkb3duTGlzdEl0ZW0+ID0gKGl0ZW0sIHN0b3JlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUoaXRlbS4kZWxlbWVudHMsIHN0b3JlUmVjKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZShibG9jay4kZWxlbWVudHMsIHN0b3JlUmVjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBTdG9yZSBhIG1hcmtkb3duIGRvY3VtZW50LiAqL1xuICAgIHB1YmxpYyBzdG9yZU1hcmtkb3duKGRhdGE6IE1hcmtkb3duUGFnZSkge1xuICAgICAgICB0aGlzLmRhdGFzdG9yZS5zdG9yZShkYXRhLCAob2JqZWN0LCBzdG9yZSkgPT4ge1xuICAgICAgICAgICAgc3RvcmUob2JqZWN0LiRzZWN0aW9ucywgKHNlY3Rpb24sIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUoc2VjdGlvbi4kYmxvY2tzLCAoYmxvY2ssIHN0b3JlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9jayBpbnN0YW5jZW9mIE1hcmtkb3duTGlzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWN1cnNpdmUgc3RvcmUgZnVuY3Rpb24gZm9yIHN0b3JpbmcgbGlzdCBoZWlyYXJjaGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlUmVjOiBTdWJzdG9yZXI8TWFya2Rvd25MaXN0SXRlbT4gPSAoaXRlbSwgc3RvcmUpID0+IHN0b3JlKGl0ZW0uJGVsZW1lbnRzLCBzdG9yZVJlYyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlKGJsb2NrLiRlbGVtZW50cywgc3RvcmVSZWMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRXZlbnQgcHJvcG9nYXRpb24uXG5cbiAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIHRoZSBpbmRleCB1cGRhdGVzIHRvIGEgbmV3IHJldmlzaW9uLiBUaGlzIGlzIHRoZSBicm9hZGVzdCBwb3NzaWJsZSBkYXRhY29yZSBldmVudC4gKi9cbiAgICBwdWJsaWMgb24oZXZ0OiBcInVwZGF0ZVwiLCBjYWxsYmFjazogKHJldmlzaW9uOiBudW1iZXIpID0+IGFueSwgY29udGV4dD86IGFueSk6IEV2ZW50UmVmO1xuICAgIHB1YmxpYyBvbihldnQ6IFwiaW5pdGlhbGl6ZWRcIiwgY2FsbGJhY2s6ICgpID0+IGFueSwgY29udGV4dD86IGFueSk6IEV2ZW50UmVmO1xuXG4gICAgb24oZXZ0OiBzdHJpbmcsIGNhbGxiYWNrOiAoLi4uZGF0YTogYW55KSA9PiBhbnksIGNvbnRleHQ/OiBhbnkpOiBFdmVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5vbihldnQsIGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogVW5zdWJzY3JpYmUgZnJvbSBhbiBldmVudCB1c2luZyB0aGUgZXZlbnQgYW5kIG9yaWdpbmFsIGNhbGxiYWNrLiAqL1xuICAgIG9mZihldnQ6IHN0cmluZywgY2FsbGJhY2s6ICguLi5kYXRhOiBhbnkpID0+IGFueSkge1xuICAgICAgICB0aGlzLmV2ZW50cy5vZmYoZXZ0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqIFVuc3Vic2NyaWJlIGZyb20gYW4gZXZlbnQgdXNpbmcgdGhlIGV2ZW50IHJlZmVyZW5jZS4gICovXG4gICAgb2ZmcmVmKHJlZjogRXZlbnRSZWYpIHtcbiAgICAgICAgdGhpcy5ldmVudHMub2ZmcmVmKHJlZik7XG4gICAgfVxuXG4gICAgLyoqIFRyaWdnZXIgYW4gdXBkYXRlIGV2ZW50LiAqL1xuICAgIHByaXZhdGUgdHJpZ2dlcihldnQ6IFwidXBkYXRlXCIsIHJldmlzaW9uOiBudW1iZXIpOiB2b2lkO1xuICAgIC8qKiBUcmlnZ2VyIGFuIGluaXRpYWxpemF0aW9uIGV2ZW50LiAqL1xuICAgIHByaXZhdGUgdHJpZ2dlcihldnQ6IFwiaW5pdGlhbGl6ZWRcIik6IHZvaWQ7XG5cbiAgICAvKiogVHJpZ2dlciBhbiBldmVudC4gKi9cbiAgICBwcml2YXRlIHRyaWdnZXIoZXZ0OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzLnRyaWdnZXIoZXZ0LCAuLi5hcmdzKTtcbiAgICB9XG59XG5cbi8qKiBMaWZlY3ljbGUtcmVzcGVjdGluZyBmaWxlIHF1ZXVlIHdoaWNoIHdpbGwgaW1wb3J0IGZpbGVzLCByZWFkaW5nIHRoZW0gZnJvbSB0aGUgZmlsZSBjYWNoZSBpZiBuZWVkZWQuICovXG5leHBvcnQgY2xhc3MgRGF0YWNvcmVJbml0aWFsaXplciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgLyoqIE51bWJlciBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnMgdGhlIGluaXRpYWxpemVyIHdpbGwgcGVyZm9ybS4gKi9cbiAgICBzdGF0aWMgQkFUQ0hfU0laRTogbnVtYmVyID0gODtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpbml0aWFsaXplciBzaG91bGQgY29udGludWUgdG8gcnVuLiAqL1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcblxuICAgIC8qKiBRdWV1ZSBvZiBmaWxlcyB0byBzdGlsbCBpbXBvcnQuICovXG4gICAgcXVldWU6IFRGaWxlW107XG4gICAgLyoqIFRoZSBmaWxlcyBhY3RpdmVseSBiZWluZyBpbXBvcnRlZC4gKi9cbiAgICBjdXJyZW50OiBURmlsZVtdO1xuICAgIC8qKiBEZWZlcnJlZCBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gaW1wb3J0aW5nIGlzIGRvbmUuICovXG4gICAgZG9uZTogRGVmZXJyZWQ8SW5pdGlhbGl6YXRpb25TdGF0cz47XG5cbiAgICAvKiogVGhlIHRvdGFsIG51bWJlciBvZiB0YXJnZXQgZmlsZXMgdG8gaW1wb3J0LiAqL1xuICAgIHRhcmdldFRvdGFsOiBudW1iZXI7XG4gICAgLyoqIFRoZSB0aW1lIHRoYXQgaW5pdCBzdGFydGVkIGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgICBzdGFydDogbnVtYmVyO1xuICAgIC8qKiBUb3RhbCBudW1iZXIgb2YgZmlsZXMgdG8gaW1wb3J0LiAqL1xuICAgIGZpbGVzOiBudW1iZXI7XG4gICAgLyoqIFRvdGFsIG51bWJlciBvZiBpbXBvcnRlZCBmaWxlcyBzbyBmYXIuICovXG4gICAgaW5pdGlhbGl6ZWQ6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGltcG9ydGVkIGZpbGVzLiAqL1xuICAgIGltcG9ydGVkOiBudW1iZXI7XG4gICAgLyoqIFRvdGFsIG51bWJlciBvZiBza2lwcGVkIGZpbGVzLiAqL1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGNhY2hlZCBmaWxlcy4gKi9cbiAgICBjYWNoZWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjb3JlOiBEYXRhY29yZSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLmNvcmUudmF1bHQuZ2V0RmlsZXMoKTtcbiAgICAgICAgdGhpcy50YXJnZXRUb3RhbCA9IHRoaXMucXVldWUubGVuZ3RoO1xuICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5xdWV1ZS5sZW5ndGg7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5kb25lID0gZGVmZXJyZWQoKTtcblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdGhpcy5pbXBvcnRlZCA9IHRoaXMuc2tpcHBlZCA9IHRoaXMuY2FjaGVkID0gMDtcbiAgICB9XG5cbiAgICBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIC8vIFF1ZXVlIEJBVENIX1NJWkUgZWxlbWVudHMgZnJvbSB0aGUgcXVldWUgdG8gaW1wb3J0LlxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5ydW5OZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzLiAqL1xuICAgIGZpbmlzaGVkKCk6IFByb21pc2U8SW5pdGlhbGl6YXRpb25TdGF0cz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb25lO1xuICAgIH1cblxuICAgIC8qKiBDYW5jZWwgaW5pdGlhbGl6YXRpb24uICovXG4gICAgb251bmxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZG9uZS5yZWplY3QoXCJJbml0aWFsaXphdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBjb21wbGV0aW5nLlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBQb2xsIGZvciBhbm90aGVyIHRhc2sgdG8gZXhlY3V0ZSBmcm9tIHRoZSBxdWV1ZS4gKi9cbiAgICBwcml2YXRlIHJ1bk5leHQoKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgbWF4IG51bWJlciBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnMgYWxyZWFkeSBydW5uaW5nLlxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlIHx8IHRoaXMuY3VycmVudC5sZW5ndGggPj0gRGF0YWNvcmVJbml0aWFsaXplci5CQVRDSF9TSVpFKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgdG8gZXhlY3V0ZSBhbm90aGVyLlxuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5xdWV1ZS5wb3AoKTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudC5wdXNoKG5leHQpO1xuICAgICAgICAgICAgdGhpcy5pbml0KG5leHQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVSZXN1bHQobmV4dCwgcmVzdWx0KSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVSZXN1bHQobmV4dCwgcmVzdWx0KSk7XG5cbiAgICAgICAgICAgIHRoaXMucnVuTmV4dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFuZXh0ICYmIHRoaXMuY3VycmVudC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gQWxsIHdvcmsgaXMgZG9uZSwgcmVzb2x2ZS5cbiAgICAgICAgICAgIHRoaXMuZG9uZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydCxcbiAgICAgICAgICAgICAgICBmaWxlczogdGhpcy5maWxlcyxcbiAgICAgICAgICAgICAgICBpbXBvcnRlZDogdGhpcy5pbXBvcnRlZCxcbiAgICAgICAgICAgICAgICBza2lwcGVkOiB0aGlzLnNraXBwZWQsXG4gICAgICAgICAgICAgICAgY2FjaGVkOiB0aGlzLmNhY2hlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFByb2Nlc3MgdGhlIHJlc3VsdCBvZiBhbiBpbml0aWFsaXphdGlvbiBhbmQgcXVldWUgbW9yZSBydW5zLiAqL1xuICAgIHByaXZhdGUgaGFuZGxlUmVzdWx0KGZpbGU6IFRGaWxlLCByZXN1bHQ6IEluaXRpYWxpemF0aW9uUmVzdWx0KSB7XG4gICAgICAgIHRoaXMuY3VycmVudC5yZW1vdmUoZmlsZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQrKztcblxuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJza2lwcGVkXCIpIHRoaXMuc2tpcHBlZCsrO1xuICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImltcG9ydGVkXCIpIHRoaXMuaW1wb3J0ZWQrKztcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJjYWNoZWRcIikgdGhpcy5jYWNoZWQrKztcblxuICAgICAgICAvLyBRdWV1ZSBtb3JlIGpvYnMgZm9yIHByb2Nlc3NpbmcuXG4gICAgICAgIHRoaXMucnVuTmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBJbml0aWFsaXplIGEgc3BlY2lmaWMgZmlsZS4gKi9cbiAgICBwcml2YXRlIGFzeW5jIGluaXQoZmlsZTogVEZpbGUpOiBQcm9taXNlPEluaXRpYWxpemF0aW9uUmVzdWx0PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgbG9hZGluZyBtYXJrZG93biBmaWxlcyBmcm9tIGNhY2hlLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gYXdhaXQgdGhpcy5jb3JlLnBlcnNpc3Rlci5sb2FkRmlsZShmaWxlLnBhdGgpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQudGltZSA+PSBmaWxlLnN0YXQubXRpbWUgJiYgY2FjaGVkLnZlcnNpb24gPT0gdGhpcy5jb3JlLnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5leHRlbnNpb24gPT09IFwibWRcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gTWFya2Rvd25QYWdlLmZyb20oY2FjaGVkLmRhdGEgYXMgSnNvbk1hcmtkb3duUGFnZSwgKGxpbmspID0+IGxpbmspO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcmUuc3RvcmVNYXJrZG93bihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImNhY2hlZFwiIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEb2VzIG5vdCBtYXRjaCBhbiBleGlzdGluZyBpbXBvcnQgdHlwZSwganVzdCByZWxvYWQgbm9ybWFsbHkuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcmUucmVsb2FkKGZpbGUpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImltcG9ydGVkXCIgfTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWNvcmU6IEZhaWxlZCB0byBpbXBvcnQgZmlsZTogXCIsIGV4KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogXCJza2lwcGVkXCIgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIFN0YXRpc3RpY3MgYWJvdXQgYSBzdWNjZXNzZnVsIHZhdWx0IGluaXRpYWxpemF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXphdGlvblN0YXRzIHtcbiAgICAvKiogSG93IGxvbmcgaW5pdGlhbGl6YXRvbiB0b29rIGluIG1pbGlzZWNvbmRzLiAqL1xuICAgIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgICAvKiogVG90YWwgbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2VyZSBpbXBvcnRlZCAqL1xuICAgIGZpbGVzOiBudW1iZXI7XG4gICAgLyoqIFRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCB3ZXJlIGxvYWRlZCBhbmQgaW1wb3J0ZWQgdmlhIGJhY2tncm91bmQgd29ya2Vycy4gKi9cbiAgICBpbXBvcnRlZDogbnVtYmVyO1xuICAgIC8qKiBUaGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2VyZSBza2lwcGVkIGR1ZSB0byBubyBsb25nZXIgZXhpc3Rpbmcgb3Igbm90IGJlaW5nIHJlYWR5LiAqL1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICAvKiogVGhlIG51bWJlciBvZiBmaWxlcyBsb2FkZWQgZnJvbSB0aGUgSW5kZXhlZERCIGNhY2hlLiAqL1xuICAgIGNhY2hlZDogbnVtYmVyO1xufVxuXG4vKiogVGhlIHJlc3VsdCBvZiBpbml0aWFsaXppbmcgYSBmaWxlLiAqL1xuaW50ZXJmYWNlIEluaXRpYWxpemF0aW9uUmVzdWx0IHtcbiAgICBzdGF0dXM6IFwic2tpcHBlZFwiIHwgXCJpbXBvcnRlZFwiIHwgXCJjYWNoZWRcIjtcbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcImV4cHJlc3Npb24vbGlua1wiO1xuaW1wb3J0IHsgRklMRV9UWVBFLCBGaWxlLCBJbmRleGFibGUsIExJTktBQkxFX1RZUEUsIExpbmthYmxlIH0gZnJvbSBcIi4vaW5kZXhhYmxlXCI7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgRXh0cmFjdG9ycywgRklFTERCRUFSSU5HX1RZUEUsIEZpZWxkRXh0cmFjdG9yLCBGaWVsZGJlYXJpbmcgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgTGl0ZXJhbCB9IGZyb20gXCJleHByZXNzaW9uL2xpdGVyYWxcIjtcblxuLyoqIERhdGFjb3JlIHJlcHJlc2VudGF0aW9uIG9mIGEgZ2VuZXJpYyBmaWxlIHdpdGggbm8gYWRkaXRpb25hbCBwYXJzaW5nLiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNGaWxlIGltcGxlbWVudHMgRmlsZSwgSW5kZXhhYmxlLCBGaWVsZGJlYXJpbmcsIExpbmthYmxlIHtcbiAgICBzdGF0aWMgVFlQRVM6IHN0cmluZ1tdID0gW0ZJTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEUsIExJTktBQkxFX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IEdlbmVyaWNGaWxlLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJGaWxlXCI7XG5cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgY3JlYXRlZC4gKi9cbiAgICAkY3RpbWU6IERhdGVUaW1lO1xuICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgbW9kaWZpZWQuICovXG4gICAgJG10aW1lOiBEYXRlVGltZTtcbiAgICAvKiogT2JzaWRpYW4tcHJvdmlkZWQgc2l6ZSBvZiB0aGlzIHBhZ2UgaW4gYnl0ZXMuICovXG4gICAgJHNpemU6IG51bWJlcjtcbiAgICAvKiogVGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICAkZXh0ZW5zaW9uOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogc3RyaW5nLCBjdGltZTogRGF0ZVRpbWUsIG10aW1lOiBEYXRlVGltZSwgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuJHBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLiRjdGltZSA9IGN0aW1lO1xuICAgICAgICB0aGlzLiRtdGltZSA9IG10aW1lO1xuICAgICAgICB0aGlzLiRzaXplID0gc2l6ZTtcblxuICAgICAgICBjb25zdCBsYXN0RG90ID0gcGF0aC5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgICAgIHRoaXMuJGV4dGVuc2lvbiA9IGxhc3REb3QgPCAwID8gXCJcIiA6IHBhdGguc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcbiAgICB9XG5cbiAgICBnZXQgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gR2VuZXJpY0ZpbGUuRklFTERfREVGKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWVsZChrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gR2VuZXJpY0ZpbGUuRklFTERfREVGKHRoaXMsIGtleSk/LlswXTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkLiAqL1xuICAgIHB1YmxpYyB2YWx1ZShrZXk6IHN0cmluZyk6IExpdGVyYWwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZChrZXkpPy52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogVW5pcXVlIElEIGZvciB0aGlzIG9iamVjdC4gKi9cbiAgICBnZXQgJGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZmlsZSBmb3IgdGhlIGZpbGUgaXMgdGhlIGZpbGUuICovXG4gICAgZ2V0ICRmaWxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIC8qKiBBIGxpbmsgdG8gdGhlIGZpbGUuICovXG4gICAgZ2V0ICRsaW5rKCk6IExpbmsge1xuICAgICAgICByZXR1cm4gTGluay5maWxlKHRoaXMuJHBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIEZJRUxEX0RFRjogRmllbGRFeHRyYWN0b3I8R2VuZXJpY0ZpbGU+ID0gRXh0cmFjdG9ycy5pbnRyaW5zaWNzKCk7XG59XG4iLCAiaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiQGRhdGFzdHJ1Y3R1cmVzLWpzL3F1ZXVlXCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiYXBpL3Jlc3VsdFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBURmlsZSwgVmF1bHQgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IERlZmVycmVkLCBkZWZlcnJlZCB9IGZyb20gXCJ1dGlscy9kZWZlcnJlZFwiO1xuXG4vKiogUXVldWVzIHVwIGxvYWRzIG9mIGZpbGVzIHRvIHJlZHVjZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBsb2Fkcy4gKi9cbmV4cG9ydCBjbGFzcyBFbWJlZFF1ZXVlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICAvKiogU2V0IG9mIHBlbmRpbmcgbG9hZHMuICovXG4gICAgcHJpdmF0ZSBxdWV1ZTogUXVldWU8VEZpbGU+ID0gbmV3IFF1ZXVlKCk7XG4gICAgLyoqIFNldCBvZiBwcm9taXNlcyB3YWl0aW5nIG9uIGVhY2ggcGF0aC4gKi9cbiAgICBwcml2YXRlIHByb21pc2VzOiBNYXA8c3RyaW5nLCBEZWZlcnJlZDxzdHJpbmc+W10+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBBY3RpdmUgc2V0IG9mIGxvYWRzLiAqL1xuICAgIHByaXZhdGUgYWN0aXZlOiBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBJZiB0cnVlLCBwcmV2ZW50IGFueSBmdXJ0aGVyIGxvYWRzLiAqL1xuICAgIHByaXZhdGUgc2h1dGRvd246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgdmF1bHQ6IFZhdWx0LCBwdWJsaWMgY29uY3VycmVuY3k6ICgpID0+IG51bWJlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIGEgZmlsZSBhc3luY2hyb25vdXNseSwgY29udHJvbGxpbmcgY29uY3VycmVuY3kgdG8gcHJldmVudCB0b28gbWFueSBmaWxlcyBiZWluZyBsb2FkZWQgc2ltdWx0YW5lb3VzbHkuICovXG4gICAgcHVibGljIGFzeW5jIHJlYWQoZmlsZTogVEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy5zaHV0ZG93bikgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiRW1iZWQgcXVldWUgaXMgc2h1dGRvd24uXCIpO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBkZWZlcnJlZDxzdHJpbmc+KCk7XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlbid0IGFscmVhZHkgaW4gdGhlIHF1ZXVlLCBhZGQgb3Vyc2VsdmVzIHRvIHF1ZXVlLiBPdGhlcndpc2UganVzdCBhcHBlbmQgb3V0c2VsZnMgdG8gdGhlIGludGVyZXN0ZWQgd2F0Y2hlciBmb3IgdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoIXRoaXMucHJvbWlzZXMuaGFzKGZpbGUucGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMucXVldWUucHVzaChmaWxlKTtcbiAgICAgICAgICAgIHRoaXMucHJvbWlzZXMuc2V0KGZpbGUucGF0aCwgW3Byb21pc2VdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvbWlzZXMuZ2V0KGZpbGUucGF0aCkhLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIC8qKiBTY2hlZHVsZSBtb3JlIGxvYWRzIGZyb20gdGhlIHF1ZXVlIGludG8gdGhlIGFjdGl2ZSBzZXQgaWYgdGhlcmUgaXMgYXZhaWxhYmxlIHNwYWNlLiAqL1xuICAgIHByaXZhdGUgc2NoZWR1bGUoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmFjdGl2ZS5zaXplIDwgdGhpcy5jb25jdXJyZW5jeSgpICYmIHRoaXMucXVldWUuc2l6ZSgpID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMucXVldWUucG9wKCkhO1xuXG4gICAgICAgICAgICBjb25zdCByZWFkID0gdGhpcy52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KGZpbGUucGF0aCwgcmVhZCk7XG5cbiAgICAgICAgICAgIHJlYWQudGhlbigoY29udGVudCkgPT4gdGhpcy5maW5pc2goZmlsZSwgUmVzdWx0LnN1Y2Nlc3MoY29udGVudCkpKS5jYXRjaCgoZXJyb3IpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2goZmlsZSwgUmVzdWx0LmZhaWx1cmUoZXJyb3IpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDb21tdW5pY2F0ZSB0aGUgcmVzdWx0IG9mIGEgbG9hZGVkIGZpbGUgYW5kIHRoZW4gc2NoZWR1bGUgbW9yZSBmaWxlcyB0byBiZSBsb2FkZWQuICovXG4gICAgcHJpdmF0ZSBmaW5pc2goZmlsZTogVEZpbGUsIHJlc3VsdDogUmVzdWx0PHN0cmluZywgYW55Pikge1xuICAgICAgICB0aGlzLmFjdGl2ZS5kZWxldGUoZmlsZS5wYXRoKTtcblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMucHJvbWlzZXMuZ2V0KGZpbGUucGF0aCkgPz8gW107XG4gICAgICAgIHRoaXMucHJvbWlzZXMuZGVsZXRlKGZpbGUucGF0aCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzZnVsKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlc29sdmUocmVzdWx0LnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlamVjdChyZXN1bHQuZXJyb3IpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICB9XG5cbiAgICAvKiogQ2FuY2VsbCBhbGwgb3V0c3RhbmRpbmcgbG9hZHMgb24gdW5sb2FkLiAqL1xuICAgIHB1YmxpYyBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVqZWN0IGFsbCBvdXRzdGFuZGluZyBsb2Fkcy5cbiAgICAgICAgZm9yIChjb25zdCBwcm9taXNlcyBvZiB0aGlzLnByb21pc2VzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5mb3JFYWNoKChwcm9taXNlKSA9PiBwcm9taXNlLnJlamVjdChcIkVtYmVkIHF1ZXVlIGlzIHNodXR0aW5nIGRvd24uXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2h1dGRvd24gPSB0cnVlO1xuICAgIH1cbn1cbiIsICIvKipcbiAqIEBtb2R1bGUgaW5kZXhhYmxlc1xuICovXG5pbXBvcnQgeyBFeHRyYWN0b3JzLCBGaWVsZCwgRmllbGRiZWFyaW5nLCBGSUVMREJFQVJJTkdfVFlQRSwgRmllbGRFeHRyYWN0b3IgfSBmcm9tIFwiZXhwcmVzc2lvbi9maWVsZFwiO1xuaW1wb3J0IHsgRklMRV9UWVBFLCBJbmRleGFibGUsIExpbmthYmxlLCBMSU5LQUJMRV9UWVBFLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIFRBR0dBQkxFX1RZUEUgfSBmcm9tIFwiLi9pbmRleGFibGVcIjtcbmltcG9ydCB7XG4gICAgQ2FyZERpbWVuc2lvbnMsXG4gICAgQ2FyZFBvcyxcbiAgICBKc29uQmFzZUNhbnZhc0NhcmQsXG4gICAgSnNvbkNhbnZhcyxcbiAgICBKc29uQ2FudmFzQ2FyZCxcbiAgICBKc29uQ2FudmFzRmlsZUNhcmQsXG4gICAgSnNvbkNhbnZhc1RleHRDYXJkLFxuICAgIEpzb25DYW52YXNXZWJDYXJkLFxufSBmcm9tIFwiLi9qc29uL2NhbnZhc1wiO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiZXhwcmVzc2lvbi9saW5rXCI7XG5pbXBvcnQge1xuICAgIEZyb250bWF0dGVyRW50cnksXG4gICAgTGlua05vcm1hbGl6ZXIsXG4gICAgTWFya2Rvd25TZWN0aW9uLFxuICAgIE5PT1BfTk9STUFMSVpFUixcbiAgICBub3JtYWxpemVMaW5rcyxcbiAgICB2YWx1ZUZyb250bWF0dGVyRW50cnksXG59IGZyb20gXCIuL21hcmtkb3duXCI7XG5pbXBvcnQgeyBJbmxpbmVGaWVsZCB9IGZyb20gXCJpbmRleC9pbXBvcnQvaW5saW5lLWZpZWxkXCI7XG5pbXBvcnQgeyBGaWxlIH0gZnJvbSBcImluZGV4L3R5cGVzL2luZGV4YWJsZVwiO1xuaW1wb3J0IHsgbWFwT2JqZWN0VmFsdWVzIH0gZnJvbSBcInV0aWxzL2RhdGFcIjtcblxuLyoqIEEgY2FudmFzIGZpbGUsIGNvbnNpc3Rpbmcgb2YgYSBzZXQgb2YgY2FudmFzIGNhcmRzLiAqL1xuZXhwb3J0IGNsYXNzIENhbnZhcyBpbXBsZW1lbnRzIExpbmthYmxlLCBGaWxlLCBMaW5rYmVhcmluZywgVGFnZ2FibGUsIEluZGV4YWJsZSwgRmllbGRiZWFyaW5nIHtcbiAgICBzdGF0aWMgVFlQRVMgPSBbRklMRV9UWVBFLCBcImNhbnZhc1wiLCBUQUdHQUJMRV9UWVBFLCBMSU5LQUJMRV9UWVBFLCBGSUVMREJFQVJJTkdfVFlQRV07XG5cbiAgICAkdHlwZXM6IHN0cmluZ1tdID0gQ2FudmFzLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJDYW52YXNcIjtcblxuICAgICRjdGltZTogRGF0ZVRpbWU7XG4gICAgJG10aW1lOiBEYXRlVGltZTtcblxuICAgICRleHRlbnNpb246IHN0cmluZyA9IFwiY2FudmFzXCI7XG5cbiAgICBnZXQgJGZpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIGdldCAkaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwYXRoO1xuICAgIH1cblxuICAgIGdldCAkbGluaygpIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZSh0aGlzLiRwYXRoKTtcbiAgICB9XG5cbiAgICAkcGF0aDogc3RyaW5nO1xuICAgICRjYXJkczogQmFzZUNhbnZhc0NhcmRbXSA9IFtdO1xuICAgICRzaXplOiBudW1iZXIgPSAwO1xuICAgICR0YWdzOiBzdHJpbmdbXTtcbiAgICAkbGlua3M6IExpbmtbXTtcbiAgICAkaW5maWVsZHM6IFJlY29yZDxzdHJpbmcsIElubGluZUZpZWxkPjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxDYW52YXM+KSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxuXG4gICAgZ2V0IGZpZWxkcygpOiBGaWVsZFtdIHtcbiAgICAgICAgcmV0dXJuIENhbnZhcy5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gQ2FudmFzLkZJRUxEX0RFRih0aGlzLCBrZXkpPy5bMF07XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbkNhbnZhcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkY2FyZHM6IHRoaXMuJGNhcmRzLm1hcCgoeCkgPT4geC5qc29uKCkpIGFzIEpzb25DYW52YXNDYXJkW10sXG4gICAgICAgICAgICAkY3RpbWU6IHRoaXMuJGN0aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkbXRpbWU6IHRoaXMuJG10aW1lLnRvTWlsbGlzKCksXG4gICAgICAgICAgICAkc2l6ZTogdGhpcy4kc2l6ZSxcbiAgICAgICAgICAgICRsaW5rczogdGhpcy4kbGlua3MsXG4gICAgICAgICAgICAkcGF0aDogdGhpcy4kcGF0aCxcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkdGFnczogdGhpcy4kdGFncyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25DYW52YXMsIG5vcm1hbGl6ZXI6IExpbmtOb3JtYWxpemVyID0gTk9PUF9OT1JNQUxJWkVSKTogQ2FudmFzIHtcbiAgICAgICAgY29uc3QgY2FyZHMgPSByYXcuJGNhcmRzXG4gICAgICAgICAgICAubWFwKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzLiR0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0LWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNUZXh0Q2FyZC5mcm9tKHMsIHJhdy4kcGF0aCwgbm9ybWFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmaWxlLWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNGaWxlQ2FyZC5mcm9tKHMpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwid2ViLWNhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW52YXNXZWJDYXJkLmZyb20ocywgcmF3LiRwYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCk6IHggaXMgQ2FudmFzVGV4dENhcmQgPT4gISF4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW52YXMoe1xuICAgICAgICAgICAgJGNhcmRzOiBjYXJkcyxcbiAgICAgICAgICAgICRjdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJGN0aW1lKSxcbiAgICAgICAgICAgICRtdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhyYXcuJG10aW1lKSxcbiAgICAgICAgICAgICRzaXplOiByYXcuJHNpemUsXG4gICAgICAgICAgICAkZXh0ZW5zaW9uOiBcImNhbnZhc1wiLFxuICAgICAgICAgICAgJHBhdGg6IHJhdy4kcGF0aCxcbiAgICAgICAgICAgICRsaW5rczogcmF3LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkaW5maWVsZHM6IHJhdy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkdGFnczogcmF3LiR0YWdzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzdGF0aWMgRklFTERfREVGOiBGaWVsZEV4dHJhY3RvcjxDYW52YXM+ID0gRXh0cmFjdG9ycy5tZXJnZShcbiAgICAgICAgRXh0cmFjdG9ycy5pbmxpbmVGaWVsZHMoKGYpID0+IGYuJGluZmllbGRzKSxcbiAgICAgICAgRXh0cmFjdG9ycy5pbnRyaW5zaWNzKClcbiAgICApO1xufVxuXG4vKiogQWxsIHN1cHBvcnRlZCBjYW52YXMgY2FyZCB0eXBlcy4gKi9cbmV4cG9ydCB0eXBlIENhbnZhc0NhcmQgPSBDYW52YXNUZXh0Q2FyZCB8IENhbnZhc0ZpbGVDYXJkIHwgQ2FudmFzV2ViQ2FyZDtcblxuLyoqIFNoYXJlZCBtZXRhZGF0YSBmb3IgYWxsIGNhbnZhcyBjYXJkcy4gKi9cbmFic3RyYWN0IGNsYXNzIEJhc2VDYW52YXNDYXJkIGltcGxlbWVudHMgSW5kZXhhYmxlLCBMaW5rYWJsZSB7XG4gICAgYWJzdHJhY3QgJHR5cGVzOiBzdHJpbmdbXTtcbiAgICBhYnN0cmFjdCAkdHlwZW5hbWU6IHN0cmluZztcbiAgICBhYnN0cmFjdCByZWFkb25seSAkdHlwZTogc3RyaW5nO1xuXG4gICAgJHJldmlzaW9uPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICRpZDogc3RyaW5nO1xuICAgICRwb3NpdGlvbjogQ2FyZFBvcztcbiAgICAkZGltZW5zaW9uczogQ2FyZERpbWVuc2lvbnM7XG4gICAgJHBhcmVudD86IEluZGV4YWJsZTtcbiAgICAkZmlsZTogc3RyaW5nO1xuICAgICRjb2xvcj86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBQYXJ0aWFsPEJhc2VDYW52YXNDYXJkPikge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xuICAgIH1cblxuICAgIGdldCAkbGluaygpOiBMaW5rIHtcbiAgICAgICAgcmV0dXJuIExpbmsuZmlsZSh0aGlzLiRmaWxlKS53aXRoQmxvY2sodGhpcy4kaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25CYXNlQ2FudmFzQ2FyZCB7XG4gICAgICAgIGNvbnN0IHsgJGlkLCAkcG9zaXRpb24sICRjb2xvciwgJGRpbWVuc2lvbnMsICRmaWxlLCAkbGluayB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpZCxcbiAgICAgICAgICAgICRwb3NpdGlvbixcbiAgICAgICAgICAgICRjb2xvcixcbiAgICAgICAgICAgICRkaW1lbnNpb25zLFxuICAgICAgICAgICAgJGZpbGUsXG4gICAgICAgICAgICAkbGluazogJGxpbmsudG9PYmplY3QoKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8qKiBDYW52YXMgY2FyZCB3aXRoIG1hcmtkb3duIHRleHQgaW4gaXQuICovXG5leHBvcnQgY2xhc3MgQ2FudmFzVGV4dENhcmQgZXh0ZW5kcyBCYXNlQ2FudmFzQ2FyZCBpbXBsZW1lbnRzIExpbmtiZWFyaW5nLCBUYWdnYWJsZSwgSW5kZXhhYmxlLCBGaWVsZGJlYXJpbmcge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcImNhbnZhcy1jYXJkXCIsIFwibWFya2Rvd25cIiwgXCJjYW52YXMtdGV4dC1jYXJkXCIsIFRBR0dBQkxFX1RZUEUsIExJTktBQkxFX1RZUEUsIEZJRUxEQkVBUklOR19UWVBFXTtcblxuICAgICR0eXBlczogc3RyaW5nW10gPSBDYW52YXNUZXh0Q2FyZC5UWVBFUztcbiAgICAkdHlwZW5hbWU6IHN0cmluZyA9IFwiVGV4dCBDYXJkXCI7XG4gICAgJHR5cGU6IHN0cmluZyA9IFwiY2FudmFzLWNhcmRcIjtcbiAgICAkaWQ6IHN0cmluZztcblxuICAgICRmaWxlOiBzdHJpbmc7XG4gICAgJGxpbmtzOiBMaW5rW107XG4gICAgJHRhZ3M6IHN0cmluZ1tdO1xuICAgICR0aXRsZTogc3RyaW5nO1xuICAgICRwYXJlbnQ/OiBJbmRleGFibGU7XG4gICAgJHJldmlzaW9uPzogbnVtYmVyO1xuICAgICRpbmZpZWxkczogUmVjb3JkPHN0cmluZywgSW5saW5lRmllbGQ+O1xuICAgICRmcm9udG1hdHRlcj86IFJlY29yZDxzdHJpbmcsIEZyb250bWF0dGVyRW50cnk+O1xuXG4gICAgJGRpbWVuc2lvbnM6IENhcmREaW1lbnNpb25zO1xuICAgICRzZWN0aW9uczogTWFya2Rvd25TZWN0aW9uW107XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8Q2FudmFzVGV4dENhcmQ+KSB7XG4gICAgICAgIHN1cGVyKGluaXQpO1xuICAgIH1cblxuICAgIGdldCBmaWVsZHMoKTogRmllbGRbXSB7XG4gICAgICAgIHJldHVybiBDYW52YXNUZXh0Q2FyZC5GSUVMRF9ERUYodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpZWxkKGtleTogc3RyaW5nKTogRmllbGQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gQ2FudmFzVGV4dENhcmQuRklFTERfREVGKHRoaXMsIGtleSk/LlswXTtcbiAgICB9XG5cbiAgICBwdWJsaWMganNvbigpOiBKc29uQ2FudmFzVGV4dENhcmQge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICRpbmZpZWxkczogdGhpcy4kaW5maWVsZHMsXG4gICAgICAgICAgICAkbGlua3M6IHRoaXMuJGxpbmtzLFxuICAgICAgICAgICAgJHRhZ3M6IHRoaXMuJHRhZ3MsXG4gICAgICAgICAgICAkdHlwZTogXCJ0ZXh0LWNhcmRcIixcbiAgICAgICAgICAgICRzZWN0aW9uczogdGhpcy4kc2VjdGlvbnMubWFwKChhKSA9PiBhLmpzb24oKSksXG4gICAgICAgIH0pIGFzIEpzb25DYW52YXNUZXh0Q2FyZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbShyYXc6IEpzb25DYW52YXNUZXh0Q2FyZCwgZmlsZTogc3RyaW5nLCBub3JtYWxpemVyOiBMaW5rTm9ybWFsaXplciA9IE5PT1BfTk9STUFMSVpFUikge1xuICAgICAgICBsZXQgJHNlY3Rpb25zID0gcmF3LiRzZWN0aW9ucy5tYXAoKHMpID0+IE1hcmtkb3duU2VjdGlvbi5mcm9tKHMsIGZpbGUsIG5vcm1hbGl6ZXIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW52YXNUZXh0Q2FyZCh7XG4gICAgICAgICAgICAkZmlsZTogZmlsZSxcbiAgICAgICAgICAgICRpZDogcmF3LiRpZCxcbiAgICAgICAgICAgICRzZWN0aW9ucyxcbiAgICAgICAgICAgICRsaW5rczogcmF3LiRsaW5rcy5tYXAoKGwpID0+IG5vcm1hbGl6ZXIoTGluay5mcm9tT2JqZWN0KGwpKSksXG4gICAgICAgICAgICAkZGltZW5zaW9uczogcmF3LiRkaW1lbnNpb25zLFxuICAgICAgICAgICAgJHBvc2l0aW9uOiByYXcuJHBvc2l0aW9uLFxuICAgICAgICAgICAgJGZyb250bWF0dGVyOiByYXcuJGZyb250bWF0dGVyXG4gICAgICAgICAgICAgICAgPyBtYXBPYmplY3RWYWx1ZXMocmF3LiRmcm9udG1hdHRlciwgKGZtKSA9PiBub3JtYWxpemVMaW5rcyh2YWx1ZUZyb250bWF0dGVyRW50cnkoZm0pLCBub3JtYWxpemVyKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICRpbmZpZWxkczogcmF3LiRpbmZpZWxkcyxcbiAgICAgICAgICAgICR0YWdzOiByYXcuJHRhZ3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBGSUVMRF9ERUY6IEZpZWxkRXh0cmFjdG9yPENhbnZhc1RleHRDYXJkPiA9IEV4dHJhY3RvcnMubWVyZ2UoXG4gICAgICAgIEV4dHJhY3RvcnMuaW50cmluc2ljcygpLFxuICAgICAgICBFeHRyYWN0b3JzLmlubGluZUZpZWxkcygoZikgPT4gZi4kaW5maWVsZHMpLFxuICAgICAgICBFeHRyYWN0b3JzLmZyb250bWF0dGVyKChmKSA9PiBmLiRmcm9udG1hdHRlcilcbiAgICApO1xufVxuXG4vKiogQ2FudmFzIGNhcmQgdGhhdCBpcyBqdXN0IGEgZmlsZSBlbWJlZGRpbmcuICovXG5leHBvcnQgY2xhc3MgQ2FudmFzRmlsZUNhcmQgZXh0ZW5kcyBCYXNlQ2FudmFzQ2FyZCBpbXBsZW1lbnRzIEluZGV4YWJsZSB7XG4gICAgc3RhdGljIFRZUEVTID0gW1wiY2FudmFzLWNhcmRcIiwgXCJtYXJrZG93blwiLCBcImNhbnZhcy1maWxlLWNhcmRcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IENhbnZhc1RleHRDYXJkLlRZUEVTO1xuICAgICR0eXBlbmFtZTogc3RyaW5nID0gXCJGaWxlIENhcmRcIjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdDogUGFydGlhbDxDYW52YXNGaWxlQ2FyZD4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgJHR5cGU6IHN0cmluZyA9IFwiZmlsZS1jYXJkXCI7XG4gICAgJGxpbmtlZEZpbGU6IHN0cmluZztcblxuICAgIHB1YmxpYyBqc29uKCk6IEpzb25DYW52YXNGaWxlQ2FyZCB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN1cGVyLmpzb24oKSwge1xuICAgICAgICAgICAgJGxpbmtlZEZpbGU6IHRoaXMuJGxpbmtlZEZpbGUsXG4gICAgICAgICAgICAkdHlwZTogXCJmaWxlLWNhcmRcIixcbiAgICAgICAgfSkgYXMgSnNvbkNhbnZhc0ZpbGVDYXJkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbkNhbnZhc0ZpbGVDYXJkKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FudmFzRmlsZUNhcmQoe1xuICAgICAgICAgICAgJGZpbGU6IHJhdy4kZmlsZSxcbiAgICAgICAgICAgICRpZDogcmF3LiRpZCxcbiAgICAgICAgICAgICRwb3NpdGlvbjogcmF3LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRkaW1lbnNpb25zOiByYXcuJGRpbWVuc2lvbnMsXG4gICAgICAgICAgICAkbGlua2VkRmlsZTogcmF3LiRsaW5rZWRGaWxlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW52YXNXZWJDYXJkIGV4dGVuZHMgQmFzZUNhbnZhc0NhcmQgaW1wbGVtZW50cyBJbmRleGFibGUge1xuICAgIHN0YXRpYyBUWVBFUyA9IFtcImNhbnZhcy1jYXJkXCIsIFwibWFya2Rvd25cIiwgXCJjYW52YXMtd2ViLWNhcmRcIiwgVEFHR0FCTEVfVFlQRSwgTElOS0FCTEVfVFlQRSwgRklFTERCRUFSSU5HX1RZUEVdO1xuXG4gICAgJHR5cGVzOiBzdHJpbmdbXSA9IENhbnZhc1RleHRDYXJkLlRZUEVTO1xuICAgIHJlYWRvbmx5ICR0eXBlOiBzdHJpbmcgPSBcIndlYi1jYXJkXCI7XG4gICAgJHR5cGVuYW1lOiBzdHJpbmcgPSBcIldlYiBDYXJkXCI7XG5cbiAgICAkdXJsOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXQ6IFBhcnRpYWw8Q2FudmFzV2ViQ2FyZD4pIHtcbiAgICAgICAgc3VwZXIoaW5pdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGpzb24oKTogSnNvbkNhbnZhc1dlYkNhcmQge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXBlci5qc29uKCksIHtcbiAgICAgICAgICAgICR1cmw6IHRoaXMuJHVybCxcbiAgICAgICAgICAgICR0eXBlOiBcIndlYi1jYXJkXCIsXG4gICAgICAgIH0pIGFzIEpzb25DYW52YXNXZWJDYXJkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHJhdzogSnNvbkNhbnZhc1dlYkNhcmQsIGZpbGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IENhbnZhc1dlYkNhcmQoe1xuICAgICAgICAgICAgJGRpbWVuc2lvbnM6IHJhdy4kZGltZW5zaW9ucyxcbiAgICAgICAgICAgICRwb3NpdGlvbjogcmF3LiRwb3NpdGlvbixcbiAgICAgICAgICAgICRmaWxlOiBmaWxlLFxuICAgICAgICAgICAgJGlkOiByYXcuJGlkLFxuICAgICAgICAgICAgJHVybDogcmF3LiR1cmwsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsICIvKiogQWxsIGRhdGFjb3JlIHNldHRpbmdzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5ncyB7XG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB0aGUgaW1wb3J0ZXIgd2lsbCB1c2UgZm9yIGltcG9ydGluZy4gKi9cbiAgICBpbXBvcnRlck51bVRocmVhZHM6IG51bWJlcjtcbiAgICAvKiogVGhlIENQVSB1dGlsaXphdGlvbiAoYmV0d2VlbiAwLjEgYW5kIDEuMCkgdGhhdCBpbXBvcnRlciB0aHJlYWRzIHNob3VsZCB1c2UuICovXG4gICAgaW1wb3J0ZXJVdGlsaXphdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqIEFyZSBKUyB2aWV3cyBlbmFibGVkPyAqL1xuICAgIGVuYWJsZUpzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB2aWV3cyBhcmUgcGFnZWQgYnkgZGVmYXVsdC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLFxuICAgICAqIHNpbmNlIHNob3dpbmcgaHVuZHJlZHMgb3IgdGhvdXNhbmRzIG9mIHJlc3VsdHMgY2FuIGJlIGZhaXJseSBzbG93IVxuICAgICAqL1xuICAgIGRlZmF1bHRQYWdpbmdFbmFibGVkOiBib29sZWFuO1xuICAgIC8qKiBEZWZhdWx0IHBhZ2luZyBzaXplIGZvciBhbGwgdmlld3MgKG51bWJlciBvZiBlbnRyaWVzIHBlciBwYWdlLikgKi9cbiAgICBkZWZhdWx0UGFnZVNpemU6IG51bWJlcjtcbiAgICAvKiogSWYgc2V0LCB2aWV3cyB3aWxsIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSB2aWV3IG9uIHBhZ2UgY2hhbmdlcy4gKi9cbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2U6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIGRlcHRoIHRoYXQgb2JqZWN0cyB3aWxsIGJlIHJlbmRlcmVkIHRvIChpLmUuLCBob3cgbWFueSBsZXZlbHMgb2Ygc3VicHJvcGVydGllc1xuICAgICAqIHdpbGwgYmUgcmVuZGVyZWQgYnkgZGVmYXVsdCkuIFRoaXMgYXZvaWRzIGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8gc2VsZiByZWZlcmVudGlhbCBvYmplY3RzXG4gICAgICogYW5kIGFsc28gZW5zdXJlcyB0aGF0IHJlbmRlcmluZyBvYmplY3RzIGlzIGFjY2VwdGFibHkgcGVyZm9ybWFudC5cbiAgICAgKi9cbiAgICBtYXhSZWN1cnNpdmVSZW5kZXJEZXB0aDogbnVtYmVyO1xuXG4gICAgLyoqIFRoZSBkZWZhdWx0IGZvcm1hdCB0aGF0IGRhdGVzIGFyZSByZW5kZXJlZCBpbiAodXNpbmcgbHV4b24ncyBtb21lbnQtbGlrZSBmb3JtYXR0aW5nKS4gKi9cbiAgICBkZWZhdWx0RGF0ZUZvcm1hdDogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGVmYXVsdCBmb3JtYXQgdGhhdCBkYXRlLXRpbWVzIGFyZSByZW5kZXJlZCBpbiAodXNpbmcgbHV4b25zIG1vbWVudC1saWtlIGZvcm1hdHRpbmcpLiAqL1xuICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdDogc3RyaW5nO1xuICAgIC8qKiBNYXJrZG93biB0ZXh0IGZvciBob3cgdG8gcmVuZGVyIG51bGwgdmFsdWVzIGluIHRhYmxlcyBvciBzaW1pbGFyLiAqL1xuICAgIHJlbmRlck51bGxBczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaW5kZXggaW5saW5lIGZpZWxkcyBieSBkZWZhdWx0LiBJbmxpbmUgZmllbGQgcGFyc2luZyByZXF1aXJlcyBhIGZ1bGwgc2NhbiBvZiB0aGUgZG9jdW1lbnQsIHdoaWNoIGNhbiBtYWtlIGluZGV4aW5nIHRha2UgMi0zeCBsb25nZXIuICovXG4gICAgaW5kZXhJbmxpbmVGaWVsZHM6IGJvb2xlYW47XG5cbiAgICAvKiogV2hldGhlciB0byBpbmRleCBsaXN0IGFuZCB0YXNrIGl0ZW0gdGV4dCBhbmQgc3RhdGVzLiBJbmRleGluZyBsaXN0cyAmIHRhc2tzIHJlcXVpcmVzIHNvbWUgYWRkaXRpb25hbCByZWdleCBwYXJzaW5nIHdoaWNoIG1ha2VzIGluZGV4aW5nIG1vZGVzdGx5IHNsb3dlci4gKi9cbiAgICBpbmRleExpc3RJdGVtczogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGNoZWNrIHRhc2sgaXRlbXMgb2ZmIHJlY3Vyc2l2ZWx5IGluIGRhdGFjb3JlIHZpZXdzICovXG4gICAgcmVjdXJzaXZlVGFza0NvbXBsZXRpb246IGJvb2xlYW47XG5cbiAgICAvKiogTmFtZSBvZiB0aGUgaW5saW5lIGZpZWxkIGluIHdoaWNoIHRvIHN0b3JlIGNvbXBsZXRpb24gZGF0ZS90aW1lICovXG4gICAgdGFza0NvbXBsZXRpb25UZXh0OiBzdHJpbmc7XG5cbiAgICAvKiogSWYgZW5hYmxlZCwgYXV0b21hdGljIGNvbXBsZXRpb25zIHdpbGwgdXNlIGVtb2ppIHNob3J0aGFuZCBcdTI3MDUgWVlZWS1NTS1ERCBpbnN0ZWFkIG9mIFtjb21wbGV0aW9uOjogZGF0ZV0uICovXG4gICAgdGFza0NvbXBsZXRpb25Vc2VFbW9qaVNob3J0aGFuZDogYm9vbGVhbjtcbn1cblxuLyoqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwbHVnaW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogUmVhZG9ubHk8U2V0dGluZ3M+ID0gT2JqZWN0LmZyZWV6ZTxTZXR0aW5ncz4oe1xuICAgIGltcG9ydGVyTnVtVGhyZWFkczogMixcbiAgICBpbXBvcnRlclV0aWxpemF0aW9uOiAwLjc1LFxuXG4gICAgZW5hYmxlSnM6IGZhbHNlLFxuXG4gICAgZGVmYXVsdFBhZ2luZ0VuYWJsZWQ6IHRydWUsXG4gICAgZGVmYXVsdFBhZ2VTaXplOiA1MCxcbiAgICBzY3JvbGxPblBhZ2VDaGFuZ2U6IGZhbHNlLFxuXG4gICAgbWF4UmVjdXJzaXZlUmVuZGVyRGVwdGg6IDUsXG5cbiAgICBkZWZhdWx0RGF0ZUZvcm1hdDogXCJNTU1NIGRkLCB5eXl5XCIsXG4gICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0OiBcImg6bW0gYSAtIE1NTU0gZGQsIHl5eXlcIixcblxuICAgIHJlbmRlck51bGxBczogXCItXCIsXG5cbiAgICBpbmRleElubGluZUZpZWxkczogdHJ1ZSxcbiAgICBpbmRleExpc3RJdGVtczogdHJ1ZSxcbiAgICByZWN1cnNpdmVUYXNrQ29tcGxldGlvbjogZmFsc2UsXG4gICAgdGFza0NvbXBsZXRpb25UZXh0OiBcImNvbXBsZXRlZEF0XCIsXG4gICAgdGFza0NvbXBsZXRpb25Vc2VFbW9qaVNob3J0aGFuZDogZmFsc2UsXG59KTtcbiIsICJpbXBvcnQgeyBkZWJvdW5jZSwgSXRlbVZpZXcsIE1hcmtkb3duUmVuZGVyQ2hpbGQsIE1lbnUsIFZpZXdTdGF0ZVJlc3VsdCwgV29ya3NwYWNlTGVhZiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgU2NyaXB0TGFuZ3VhZ2UgfSBmcm9tIFwidXRpbHMvamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YWNvcmVKU1JlbmRlcmVyLCBSZWFjdFJlbmRlcmVyIH0gZnJvbSBcIi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YWNvcmVMb2NhbEFwaSB9IGZyb20gXCJhcGkvbG9jYWwtYXBpXCI7XG5pbXBvcnQgeyBEYXRhY29yZUFwaSB9IGZyb20gXCJhcGkvYXBpXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgR3JvdXAsIFN0YWNrIH0gZnJvbSBcImFwaS91aS9sYXlvdXRcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IFRleHRib3gsIFZhbmlsbGFTZWxlY3QgfSBmcm9tIFwiYXBpL3VpL2Jhc2ljc1wiO1xuaW1wb3J0IHsgdXNlSW5kZXhVcGRhdGVzIH0gZnJvbSBcIi4vaG9va3NcIjtcbmltcG9ydCB7IERBVEFDT1JFX0NPTlRFWFQsIEVycm9yTWVzc2FnZSB9IGZyb20gXCIuL21hcmtkb3duXCI7XG5pbXBvcnQgU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3RcIjtcblxuLyoqIEtleSBmb3IgZGF0YWNvcmUgSlMgcXVlcnkgdmlld3MuICovXG5leHBvcnQgY29uc3QgVklFV19UWVBFX0RBVEFDT1JFSlMgPSBcImRhdGFjb3JlanMtdmlld1wiO1xuXG4vKiogU3RvcmVzIHRoZSBjdXJyZW50IE9ic2lkaWFuIHZpZXcgb2JqZWN0LCBzbyBpdCBjYW4gYmUgbWFuaXB1bGF0ZWQgZnJvbSByZWFjdC4gKi9cbmNvbnN0IENVU1RPTV9WSUVXX0NPTlRFWFQgPSBjcmVhdGVDb250ZXh0PERhdGFjb3JlUXVlcnlWaWV3Pih1bmRlZmluZWQhKTtcblxuLyoqIFByb3ZpZGVzIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgZGF0YWNvcmUgdmlldyBwYW5lLiAqL1xuZnVuY3Rpb24gRGF0YWNvcmVWaWV3U2V0dGluZ3MoKSB7XG4gICAgY29uc3QgdmlldyA9IHVzZUNvbnRleHQoQ1VTVE9NX1ZJRVdfQ09OVEVYVCkgYXMgRGF0YWNvcmVRdWVyeVZpZXc7XG4gICAgY29uc3Qgc2V0Vmlld1N0YXRlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gZGVib3VuY2UoKHN0YXRlOiBQYXJ0aWFsPERhdGFjb3JlVmlld1N0YXRlPikgPT4gdmlldy5zZXRTdGF0ZShzdGF0ZSwgeyBoaXN0b3J5OiBmYWxzZSB9KSwgNTAwKSxcbiAgICAgICAgW3ZpZXddXG4gICAgKTtcblxuICAgIGNvbnN0IFtsb2NhbFN0YXRlLCBzZXRMb2NhbFN0YXRlXSA9IHVzZVN0YXRlKHZpZXcuZ2V0U3RhdGUoKSk7XG4gICAgY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHN0YXRlOiBQYXJ0aWFsPERhdGFjb3JlVmlld1N0YXRlPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluYWxTdGF0ZSA9IHsgLi4ubG9jYWxTdGF0ZSwgLi4uc3RhdGUgfTtcbiAgICAgICAgICAgIC8vIE5vdCBkZWJvdW5jZWQuXG4gICAgICAgICAgICBzZXRMb2NhbFN0YXRlKGZpbmFsU3RhdGUpO1xuXG4gICAgICAgICAgICAvLyBEZWJvdW5jZWQuXG4gICAgICAgICAgICBzZXRWaWV3U3RhdGUoZmluYWxTdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFtsb2NhbFN0YXRlLCBzZXRMb2NhbFN0YXRlLCB2aWV3XVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8U3RhY2sgYWxpZ249XCJzdHJldGNoXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZS1pY29uXCIgc3R5bGU9XCJhbGlnbi1zZWxmOiBzdGFydFwiIG9uQ2xpY2s9eygpID0+IHZpZXcudmlldyhcInNjcmlwdFwiKX0+XG4gICAgICAgICAgICAgICAge0JBQ0tfQlVUVE9OfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8R3JvdXAganVzdGlmeT1cInNwYWNlLWJldHdlZW5cIiBhbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoNj5WaWV3IFRpdGxlPC9oNj5cbiAgICAgICAgICAgICAgICA8VGV4dGJveFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZpZXcuZ2V0U3RhdGUoKS50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTdGF0ZSh7IHRpdGxlOiBlLmN1cnJlbnRUYXJnZXQudmFsdWUgYXMgc3RyaW5nIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgPEdyb3VwIGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+VmlldyBUeXBlPC9oNj5cbiAgICAgICAgICAgICAgICA8VmFuaWxsYVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZpZXcuZ2V0U3RhdGUoKS5zb3VyY2VUeXBlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtMQU5HVUFHRV9PUFRJT05TfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bG9jYWxTdGF0ZS5zb3VyY2VUeXBlfVxuICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsocykgPT4gc2V0U3RhdGUoeyBzb3VyY2VUeXBlOiBzIGFzIFNjcmlwdExhbmd1YWdlIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgPEdyb3VwIGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+U2NyaXB0L1ZpZXcgc291cmNlPC9oNj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgcmVzaXplOiBcInZlcnRpY2FsXCIsIG1pbldpZHRoOiBcIjc1JVwiLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiIH19XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17bG9jYWxTdGF0ZS5zY3JpcHR9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtsb2NhbFN0YXRlLnNjcmlwdH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTdGF0ZSh7IHNjcmlwdDogZS5jdXJyZW50VGFyZ2V0LnZhbHVlIGFzIHN0cmluZyB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgICAgIDxHcm91cCBqdXN0aWZ5PVwic3BhY2UtYmV0d2VlblwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPFN0YWNrPlxuICAgICAgICAgICAgICAgICAgICA8aDY+Q3VycmVudCBGaWxlPC9oNj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlRoZSBwYXRoIHJldHVybmVkIGJ5IGZ1bmN0aW9ucyBsaWtlIGB1c2VDdXJyZW50UGF0aGAgaW4gdGhpcyB2aWV3PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L1N0YWNrPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWluV2lkdGg6IFwiNTAlXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxDdXJyZW50RmlsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2xvY2FsU3RhdGUuY3VycmVudEZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHNldFN0YXRlKHsgY3VycmVudEZpbGU6IHYgfSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICA8L1N0YWNrPlxuICAgICk7XG59XG5cbi8qKiBSZWFjdCBjb21wb25lbnQgZm9yIGFzeW5jaHJvbm91c2x5IHNob3dpbmcgdGhlIGFjdGl2ZSBzZXQgb2YgY3VycmVudCBmaWxlcyB0byBzZWxlY3Qgb25lIGZyb20uICovXG5mdW5jdGlvbiBDdXJyZW50RmlsZVNlbGVjdG9yKHtcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgb25DaGFuZ2UsXG59OiB7XG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbn0pIHtcbiAgICBjb25zdCBjb3JlID0gdXNlQ29udGV4dChEQVRBQ09SRV9DT05URVhUKTtcbiAgICBjb25zdCByZXZpc2lvbiA9IHVzZUluZGV4VXBkYXRlcyhjb3JlLCB7IGRlYm91bmNlOiAyMDAwIH0pO1xuXG4gICAgLy8gQ2FjaGVkIGxpc3Qgb2YgcmVsZXZhbnQgZmlsZXMsIHdoaWNoIGlzIG9ubHkgcmVjb21wdXRlZCBvbiB2YXVsdCBjaGFuZ2VzLlxuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvcmUudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpLm1hcCgoZikgPT4gKHsgbGFiZWw6IGYucGF0aCwgdmFsdWU6IGYucGF0aCB9KSk7XG4gICAgfSwgW3JldmlzaW9uXSk7XG5cbiAgICBjb25zdCBkZWZhdWx0T3B0aW9uID0gZGVmYXVsdFZhbHVlXG4gICAgICAgID8geyBsYWJlbDogXCJObyBmaWxlXCIsIHZhbHVlOiB1bmRlZmluZWQgfVxuICAgICAgICA6IHsgbGFiZWw6IGRlZmF1bHRWYWx1ZSwgdmFsdWU6IGRlZmF1bHRWYWx1ZSB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIGNsYXNzTmFtZVByZWZpeD1cImRhdGFjb3JlLXNlbGVjdGFibGVcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0T3B0aW9ufVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhudiwgX2FtKSA9PiBvbkNoYW5nZShudj8udmFsdWUpfVxuICAgICAgICAgICAgdW5zdHlsZWRcbiAgICAgICAgLz5cbiAgICApO1xufVxuXG4vKiogU2VsZWN0YWJsZSBvcHRpb25zIGZvciBwaWNraW5nIHdoaWNoIGxhbmd1YWdlIHRvIGV4ZWN1dGUgdGhlIHNjcmlwdCBpbi4gKi9cbmNvbnN0IExBTkdVQUdFX09QVElPTlM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IFNjcmlwdExhbmd1YWdlIH1bXSA9IFtcbiAgICB7IGxhYmVsOiBcIkphdmFzY3JpcHRcIiwgdmFsdWU6IFwianNcIiB9LFxuICAgIHsgbGFiZWw6IFwiVHlwZXNjcmlwdFwiLCB2YWx1ZTogXCJ0c1wiIH0sXG4gICAgeyBsYWJlbDogXCJKYXZhc2NyaXB0IChKU1gpXCIsIHZhbHVlOiBcImpzeFwiIH0sXG4gICAgeyBsYWJlbDogXCJUeXBlc2NyaXB0IEpTWFwiLCB2YWx1ZTogXCJ0c3hcIiB9LFxuXTtcblxuLyoqIFNWRyBiYWNrIGJ1dHRvbiBzaG93biB0byBleGl0IHRoZSBzZXR0aW5ncyB2aWV3LiAqL1xuY29uc3QgQkFDS19CVVRUT04gPSAoXG4gICAgPHN2Z1xuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIGNsYXNzPVwic3ZnLWljb24gbHVjaWRlLWFycm93LWxlZnRcIlxuICAgID5cbiAgICAgICAgPHBhdGggZD1cIm0xMiAxOS03LTcgNy03XCI+PC9wYXRoPlxuICAgICAgICA8cGF0aCBkPVwiTTE5IDEySDVcIj48L3BhdGg+XG4gICAgPC9zdmc+XG4pO1xuXG4vKiogU3RhdGUgZm9yIHRoZSBkYXRhY29yZSB2aWV3IHBhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFjb3JlVmlld1N0YXRlIHtcbiAgICAvKiogQ3VzdG9tIHRpdGxlIGZvciB0aGUgdmlldyBwYW5lLiAqL1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIC8qKiBMYW5ndWFnZSB0aGF0IHRoZSBzY3JpcHQgd2lsbCBiZSBleGVjdXRlZCBpbi4gKi9cbiAgICBzb3VyY2VUeXBlPzogU2NyaXB0TGFuZ3VhZ2U7XG4gICAgLyoqIElmIGRlZmluZWQsIHRoZSBmaWxlIHRoZSB2aWV3IHdpbGwgYmUgcmVsYXRpdmUgdG8uICovXG4gICAgY3VycmVudEZpbGU/OiBzdHJpbmc7XG4gICAgLyoqIENvbnRlbnRzIG9mIHRoZSBzY3JpcHQuICovXG4gICAgc2NyaXB0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgY3VycmVudCB2aWV3OyBkZWZhdWx0cyB0byAnc2V0dGluZ3MnIGZvciBpbml0aWFsaXphdGlvbi4gKi9cbiAgICB2aWV3PzogXCJzZXR0aW5nc1wiIHwgXCJzY3JpcHRcIjtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFjb3JlUXVlcnlWaWV3IGV4dGVuZHMgSXRlbVZpZXcge1xuICAgIC8qKiBJbnRlcm5hbCBjdXJyZW50IHN0YXRlIG9mIHRoZSB2aWV3OyBjYW4gYmUgbW9kaWZpZWQgYnkgc2V0U3RhdGUuICovXG4gICAgcHVibGljIGludGVybmFsU3RhdGU6IERhdGFjb3JlVmlld1N0YXRlID0ge1xuICAgICAgICB0aXRsZTogXCJOZXcgdmlld1wiLFxuICAgICAgICBzY3JpcHQ6IFwiXCIsXG4gICAgICAgIHNvdXJjZVR5cGU6IFwianNcIixcbiAgICAgICAgdmlldzogXCJzZXR0aW5nc1wiLFxuICAgIH07XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgYWN0aXZlIHZpZXcgLSBlaXRoZXIgdGhlIHNldHRpbmdzIHZpZXcgKi9cbiAgICBwcml2YXRlIGFjdGl2ZVZpZXc6IE1hcmtkb3duUmVuZGVyQ2hpbGQ7XG4gICAgcHJpdmF0ZSBhY3RpdmVWaWV3VHlwZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IobGVhZjogV29ya3NwYWNlTGVhZiwgcHVibGljIGFwaTogRGF0YWNvcmVBcGkpIHtcbiAgICAgICAgc3VwZXIobGVhZik7XG4gICAgICAgIHRoaXMucmVyZW5kZXIoKTtcbiAgICB9XG5cbiAgICAvKiogU2hvdWxkIGFsd2F5cyBiZSBWSUVXX1RZUEVfREFUQUNPUkVKUy4gKi9cbiAgICBnZXRWaWV3VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gVklFV19UWVBFX0RBVEFDT1JFSlM7XG4gICAgfVxuXG4gICAgLyoqIFRleHQgc2hvd24gaW4gdGhlIHRpdGxlIHdpbmRvdy4gKi9cbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pbnRlcm5hbFN0YXRlLnRpdGxlfSAoRGF0YWNvcmVKUylgO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIHRoaXMuY29udGVudEVsLmFkZENsYXNzKFwibWFya2Rvd24tcmVuZGVyZWRcIik7XG4gICAgICAgIHRoaXMucmVyZW5kZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb251bmxvYWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcpIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICB9XG5cbiAgICAvKiogU3luY2hyb25pemVzIHRoZSBzY3JlZW4gc3RhdGUgdG8gcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudCBpbnRlcm5hbCBzdGF0ZS4gKi9cbiAgICByZXJlbmRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sZWFmLnRhYkhlYWRlcklubmVyVGl0bGVFbC50ZXh0Q29udGVudCA9IHRoaXMudGl0bGVFbC50ZXh0Q29udGVudCA9IHRoaXMuZ2V0RGlzcGxheVRleHQoKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlld1R5cGUgPT0gdGhpcy5pbnRlcm5hbFN0YXRlLnZpZXcpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3KSB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsU3RhdGUudmlldyA9PT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdUeXBlID0gXCJzZXR0aW5nc1wiO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gbmV3IFJlYWN0UmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgdGhpcy5hcGkuY29yZSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRFbCxcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIDxDVVNUT01fVklFV19DT05URVhULlByb3ZpZGVyIHZhbHVlPXt0aGlzfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEYXRhY29yZVZpZXdTZXR0aW5ncyAvPlxuICAgICAgICAgICAgICAgICAgICA8L0NVU1RPTV9WSUVXX0NPTlRFWFQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIGEgc2NyaXB0LCB0cnkgdG8gZXhlY3V0ZSBpdDsgb3RoZXJ3aXNlLCBzaG93IGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLlxuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3VHlwZSA9IFwic2NyaXB0XCI7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFN0YXRlLnNjcmlwdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IG5ldyBEYXRhY29yZUpTUmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBEYXRhY29yZUxvY2FsQXBpKHRoaXMuYXBpLCB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudEVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXRlLnNjcmlwdCB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuc291cmNlVHlwZSB8fCBcImpzXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBuZXcgUmVhY3RSZW5kZXJlcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpLmNvcmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudEVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU3RhdGUuY3VycmVudEZpbGUgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPENVU1RPTV9WSUVXX0NPTlRFWFQuUHJvdmlkZXIgdmFsdWU9e3RoaXN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvck1lc3NhZ2UgbWVzc2FnZT1cIk5vIHNjcmlwdCBkZWZpbmVkIGZvciB0aGlzIHZpZXcuXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ1VTVE9NX1ZJRVdfQ09OVEVYVC5Qcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENoaWxkKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFN0YXRlO1xuICAgIH1cblxuICAgIC8qKiBVcGRhdGUgdGhlIHN0YXRlIG9mIHRoaXMgdmlldyB3aXRoIG5ldyBtZXRhZGF0YS4gR2VuZXJhbGx5IGNvbnRyb2xsZWQgYnkgdGhlIHNldHRpbmdzIHBhbmUuICovXG4gICAgcHVibGljIGFzeW5jIHNldFN0YXRlKHN0YXRlOiBEYXRhY29yZVZpZXdTdGF0ZSwgX3Jlc3VsdDogVmlld1N0YXRlUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLnJlcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgLyoqIFN3YXAgdGhlIGFjdGl2ZSB2aWV3LiAqL1xuICAgIHB1YmxpYyB2aWV3KG1vZGU6IFwic2V0dGluZ3NcIiB8IFwic2NyaXB0XCIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXRlLnZpZXcgPSBtb2RlO1xuICAgICAgICB0aGlzLnJlcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uT3BlbigpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgICAvKiogSGFuZGxlIGZvciByaWdodCBjbGljayBtZW51cy4gKi9cbiAgICBwdWJsaWMgb25QYW5lTWVudShtZW51OiBNZW51LCBzb3VyY2U6IFwibW9yZS1vcHRpb25zXCIgfCBcInRhYi1oZWFkZXJcIiB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoc291cmNlID09PSBcIm1vcmUtb3B0aW9uc1wiKSB7XG4gICAgICAgICAgICBtZW51LmFkZEl0ZW0oKGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgaXQuc2V0SWNvbihcInNldHRpbmdzXCIpO1xuICAgICAgICAgICAgICAgIGl0LnNldFRpdGxlKFwiQ29uZmlndXJlIFZpZXdcIik7XG4gICAgICAgICAgICAgICAgaXQub25DbGljaygoZSkgPT4gdGhpcy52aWV3KFwic2V0dGluZ3NcIikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgRGF0YWNvcmUgfSBmcm9tIFwiaW5kZXgvZGF0YWNvcmVcIjtcbmltcG9ydCB7IHVzZUluZGV4VXBkYXRlcyB9IGZyb20gXCJ1aS9ob29rc1wiO1xuXG4vKiogUmVuZGVyIGEgaGVscGZ1bCBzdGF0dXMgaW5kaWNhdG9yIGluIHRoZSBzdGF0dXMgYmFyIG9mIGhvdyB0aGUgaW1wb3J0IGlzIGdvaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEluZGV4U3RhdHVzQmFyKHsgZGF0YWNvcmUgfTogeyBkYXRhY29yZTogRGF0YWNvcmUgfSkge1xuICAgIHVzZUluZGV4VXBkYXRlcyhkYXRhY29yZSwgeyBkZWJvdW5jZTogMjUwIH0pO1xuXG4gICAgLy8gV2hlbmV2ZXIgdGhlIHZpZXcgdXBkYXRlcywgZmlndXJlIG91dCB3aGF0IHN0YXRlIHdlIGFyZSBpbiBiYXNlZCBvbiBpZiBhbiBpbml0aWFsaXplciBpcyBwcmVzZW50LlxuICAgIGlmIChkYXRhY29yZS5pbml0aWFsaXplcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgU2Nhbm5pbmcge2RhdGFjb3JlLmluaXRpYWxpemVyLmluaXRpYWxpemVkfSBvZiB7ZGF0YWNvcmUuaW5pdGlhbGl6ZXIuZmlsZXN9IGZpbGVzXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChkYXRhY29yZS5pbXBvcnRlci5xdWV1ZS5zaXplKCkgPiAwKSB7XG4gICAgICAgIHJldHVybiA8c3Bhbj5VcGRhdGluZyB7ZGF0YWNvcmUuaW1wb3J0ZXIucXVldWUuc2l6ZSgpfSBmaWxlczwvc3Bhbj47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDxzcGFuPntkYXRhY29yZS5kYXRhc3RvcmUuc2l6ZX0gb2JqZWN0czwvc3Bhbj47XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw0Q0FBQUEsVUFBQUMsU0FBQTtBQUFBO0FBRUEsYUFBU0MsV0FBVSxRQUFRO0FBQ3pCLFVBQUksRUFBRSxnQkFBZ0JBLGFBQVk7QUFDaEMsZUFBTyxJQUFJQSxXQUFVLE1BQU07QUFBQSxNQUM3QjtBQUNBLFdBQUssSUFBSTtBQUFBLElBQ1g7QUFFQSxRQUFJQyxLQUFJRCxXQUFVO0FBRWxCLGFBQVMsTUFBTUUsSUFBR0MsSUFBRztBQUNuQixVQUFJQyxLQUFJO0FBQ1IsV0FBS0EsSUFBR0EsS0FBSUYsSUFBR0UsTUFBSztBQUNsQixRQUFBRCxHQUFFQyxFQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0Y7QUFFQSxhQUFTLFFBQVFELElBQUcsS0FBSztBQUN2QixZQUFNLElBQUksUUFBUSxTQUFTQyxJQUFHO0FBQzVCLFFBQUFELEdBQUUsSUFBSUMsRUFBQyxHQUFHQSxJQUFHLEdBQUc7QUFBQSxNQUNsQixDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVNDLFFBQU9GLElBQUcsTUFBTSxLQUFLO0FBQzVCLGNBQVEsU0FBUyxNQUFNQyxJQUFHRSxNQUFLO0FBQzdCLGVBQU9ILEdBQUUsTUFBTSxNQUFNQyxJQUFHRSxJQUFHO0FBQUEsTUFDN0IsR0FBRyxHQUFHO0FBQ04sYUFBTztBQUFBLElBQ1Q7QUFFQSxhQUFTLElBQUlILElBQUcsS0FBSztBQUNuQixhQUFPRTtBQUFBLFFBQ0wsU0FBUyxLQUFLLE1BQU1ELElBQUdHLElBQUc7QUFDeEIsaUJBQU8sSUFBSSxPQUFPLENBQUNKLEdBQUUsTUFBTUMsSUFBR0csRUFBQyxDQUFDLENBQUM7QUFBQSxRQUNuQztBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0Q7QUFBQSxNQUNGO0FBQUEs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O0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FBQUEsUUFDVCxLQUFLLFVBQVU7QUFDYixpQkFBTztBQUFBLFFBQ1QsS0FBSyxVQUFVO0FBQ2IsaUJBQU87QUFBQSxRQUNULEtBQUssVUFBVTtBQUNiLGlCQUFPO0FB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S0FBSyxJQUFJO0FBQzFELFlBQU0sT0FBTztBQUFJLE1BQUFBLFdBQVVBLFdBQVUsTUFBTSxJQUFJLElBQUksSUFBSTtBQUN2RCxZQUFNLE1BQU07QUFBSSxNQUFBQSxXQUFVQSxXQUFVLEtBQUssSUFBSSxHQUFHLElBQUk7QUFDcEQsWUFBTSxRQUFRO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxPQUFPLElBQUksS0FBSyxJQUFJO0FBQzFELFlBQU0sU0FBUztBQUFJLE1BQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxZQUFNLFNBQVM7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsWUFBTSxTQUFTO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFlBQU0sU0FBUztBQUFJLE1BQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxZQUFNLFNBQVM7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsWUFBTSxTQUFTO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFlBQU0sU0FBUztBQUFJLE1BQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxZQUFNLFNBQVM7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsWUFBTSxTQUFTO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzdELFlBQU0sU0FBUztBQUFJLE1BQUFBLFdBQVVBLFdBQVUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM3RCxZQUFNLFFBQVE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLE9BQU8sSUFBSSxLQUFLLElBQUk7QUFDMUQsWUFBTSxZQUFZO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxXQUFXLElBQUksU0FBUyxJQUFJO0FBQ3RFLFlBQU0sV0FBVztBQUFJLE1BQUFBLFdBQVVBLFdBQVUsVUFBVSxJQUFJLFFBQVEsSUFBSTtBQUNuRSxZQUFNLFdBQVc7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFVBQVUsSUFBSSxRQUFRLElBQUk7QUFDbkUsWUFBTSxjQUFjO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxhQUFhLElBQUksV0FBVyxJQUFJO0FBQzVFLFlBQU0sZUFBZTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsY0FBYyxJQUFJLFlBQVksSUFBSTtBQUMvRSxZQUFNLFNBQVM7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFDN0QsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLG9CQUFvQjtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsbUJBQW1CLElBQUksaUJBQWlCLElBQUk7QUFDOUYsWUFBTSxZQUFZO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxXQUFXLElBQUksU0FBUyxJQUFJO0FBQ3RFLFlBQU0scUJBQXFCO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxvQkFBb0IsSUFBSSxrQkFBa0IsSUFBSTtBQUNqRyxZQUFNQyxTQUFRO0FBQUksTUFBQUQsV0FBVUEsV0FBVSxPQUFPLElBQUlDLE1BQUssSUFBSTtBQUMxRCxZQUFNLGFBQWE7QUFBSSxNQUFBRCxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxjQUFjO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxhQUFhLElBQUksV0FBVyxJQUFJO0FBQzVFLFlBQU0sYUFBYTtBQUFJLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUN6RSxZQUFNLGFBQWE7QUFBSSxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDekUsWUFBTSxhQUFhO0FBQUksTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQ3pFLFlBQU0sYUFBYTtBQUFLLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxZQUFNLGFBQWE7QUFBSyxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsWUFBTSxhQUFhO0FBQUssTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFlBQU0sYUFBYTtBQUFLLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxZQUFNLGFBQWE7QUFBSyxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsWUFBTSxhQUFhO0FBQUssTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFlBQU0sYUFBYTtBQUFLLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxZQUFNLGFBQWE7QUFBSyxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsWUFBTSxhQUFhO0FBQUssTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFlBQU0sYUFBYTtBQUFLLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxZQUFNLGFBQWE7QUFBSyxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsWUFBTSxhQUFhO0FBQUssTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFlBQU0sYUFBYTtBQUFLLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxZQUFNLGFBQWE7QUFBSyxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsWUFBTSxhQUFhO0FBQUssTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFlBQU0sYUFBYTtBQUFLLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxZQUFNLGFBQWE7QUFBSyxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsWUFBTSxhQUFhO0FBQUssTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFlBQU0sYUFBYTtBQUFLLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxZQUFNLGFBQWE7QUFBSyxNQUFBQSxXQUFVQSxXQUFVLFlBQVksSUFBSSxVQUFVLElBQUk7QUFDMUUsWUFBTSxhQUFhO0FBQUssTUFBQUEsV0FBVUEsV0FBVSxZQUFZLElBQUksVUFBVSxJQUFJO0FBQzFFLFlBQU0sYUFBYTtBQUFLLE1BQUFBLFdBQVVBLFdBQVUsWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUMxRSxZQUFN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LE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFeEc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekc7QUFBQSxNQUFJO0FBQUEsTUFBSztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekcsVUFBVSxrQkFBa0IsYUFBYTtBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUVoSjtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RyxVQUFVLGtCQUFrQixhQUFhO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRWhKLFVBQVUsa0JBQWtCLE9BQU87QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSztBQUFBO0FBQUEsTUFFNUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekcsVUFBVSxrQkFBa0IsV0FBVztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUvSSxVQUFVLGtCQUFrQixZQUFZO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRS9JO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXpHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXpHLFVBQVUsa0JBQWtCLFVBQVU7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFN0k7QUFBQSxNQUFJO0FBQUEsTUFBSztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFekcsVUFBVSxrQkFBa0IsVUFBVTtBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU3STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RztBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV4RyxPQUFPLFVBQVUsVUFBVSxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXhJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRS9HO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUs7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTNHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFLO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXhHLE9BQU8sVUFBVSxTQUFTLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFdkk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFVBQVUsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV4STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixXQUFXO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTlJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxVQUFVLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFeEk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFNUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFVBQVUsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixnQkFBZ0I7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFbko7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLGFBQWEsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUzSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU1RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUVoSDtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsYUFBYSxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTNJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLFlBQVk7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFL0k7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFlBQVksS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsV0FBVyxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXhJLE9BQU8sVUFBVSxPQUFPLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFckk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFOUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFNBQVMsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV2STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixTQUFTO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTVJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTVHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxXQUFXLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFM0ksVUFBVSxrQkFBa0IsWUFBWTtBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUvSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsWUFBWSxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRWxIO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxVQUFVLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFeEk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFlBQVksS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsUUFBUSxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXRJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLFNBQVM7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFNUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLGFBQWEsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUzSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU1RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixRQUFRO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTNJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLFdBQVc7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFOUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFL0csT0FBTyxVQUFVLE9BQU8sS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUVySTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU1RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixlQUFlO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRWxKO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxXQUFXLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFeEksT0FBTyxVQUFVLE9BQU8sS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUzSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixVQUFVO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTdJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxlQUFlLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFN0k7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUcsVUFBVSxrQkFBa0IsY0FBYztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUVqSixVQUFVLGtCQUFrQixPQUFPO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLFVBQVU7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFN0k7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFFBQVEsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV0STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU1RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixXQUFXO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTlJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLFdBQVc7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFOUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFOUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUcsVUFBVSxrQkFBa0IsY0FBYztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUVqSjtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsUUFBUSxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXRJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxTQUFTLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFdkk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFaEgsVUFBVSxrQkFBa0IsT0FBTztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixXQUFXO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTlJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLFFBQVE7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFM0k7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUcsVUFBVSxrQkFBa0IsYUFBYTtBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUVoSjtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU1RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU1RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixZQUFZO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRS9JO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTVHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLGNBQWM7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFakosVUFBVSxrQkFBa0IsVUFBVTtBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU3STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixXQUFXO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTlJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTlHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLGFBQWE7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFaEo7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUcsVUFBVSxrQkFBa0IsWUFBWTtBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUvSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsV0FBVyxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXpJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQTtBQUFBLE1BRXBIO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLGNBQWM7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFako7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUcsVUFBVSxrQkFBa0IsUUFBUTtBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUzSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixXQUFXO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTlJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxVQUFVLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFeEk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFdBQVcsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV6STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRyxVQUFVLGtCQUFrQixXQUFXO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTlJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQTtBQUFBLE1BRTlHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTVHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxTQUFTLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFdkk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFVBQVUsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV4STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUE7QUFBQSxNQUU1RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsU0FBUyxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXRJLE9BQU8sVUFBVSxRQUFRLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFdEk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUcsVUFBVSxrQkFBa0IsU0FBUztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU5STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsV0FBVyxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXpJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTVHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHLFVBQVUsa0JBQWtCLFdBQVc7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFOUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUcsVUFBVSxrQkFBa0IsVUFBVTtBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU3STtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUU1RztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsUUFBUSxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXRJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE9BRXpHLE9BQU8sVUFBVSxTQUFTLEtBQUs7QUFBQSxNQUFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFdkk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFNUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsTUFFMUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQU07QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBO0FBQUEsT0FFekcsT0FBTyxVQUFVLFVBQVUsS0FBSztBQUFBLE1BQUc7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUV4STtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxNQUUxRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUE7QUFBQSxPQUV6RyxPQUFPLFVBQVUsU0FBUyxLQUFLO0FBQUEsTUFBRztBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRXZJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFNO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQTtBQUFBLE1BRTFHO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBTTtBQUFBLE1BQUk7QUFBQSxNQUFJO0FBQUEsTUFBSTtBQUFBLE1BQUk7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R0FBRztBQUFBLE1BQ1YsQ0FBQyxRQUFRLE1BQVE7QUFBQSxNQUNqQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsTUFDakIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsT0FBTyxNQUFRO0FBQUEsTUFDaEIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFFBQVEsTUFBUTtBQUFBLE1BQ2pCLENBQUMsT0FBTyxNQUFRO0FBQUEsTUFDaEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxNQUNqQixDQUFDLFFBQVEsTUFBUTtBQUFBLE1BQ2pCLENBQUMsU0FBUyxNQUFRO0FBQUEsTUFDbEIsQ0FBQyxPQUFPLE1BQVE7QUFBQSxNQUNoQixDQUFDLE9BQU8sTUFBUTtBQUFBLE1BQ2hCLENBQUMsT0FBTyxNQUFRO0FBQUEsTUFDaEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxNQUNqQixDQUFDLE9BQU8sTUFBUTtBQUFBLE1BQ2hCLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxNQUNqQixDQUFDLFFBQVEsTUFBUTtBQUFBLE1BQ2pCLENBQUMsU0FBUyxNQUFRO0FBQUEsTUFDbEIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLE1BQ2pCLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLE1BQ2pCLENBQUMsUUFBUSxNQUFRO0FBQUEsTUFDakIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxNQUNqQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsU0FBUyxNQUFRO0FBQUEsTUFDbEIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLE1BQ2pCLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsTUFDakIsQ0FBQyxPQUFPLE1BQVE7QUFBQSxNQUNoQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxNQUNqQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsTUFDbEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxNQUNqQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsTUFDbEIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsUUFBUSxNQUFRO0FBQUEsTUFDakIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsU0FBUyxNQUFRO0FBQUEsTUFDbEIsQ0FBQyxRQUFRLE1BQVE7QUFBQSxNQUNqQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFFBQVEsTUFBUTtBQUFBLE1BQ2pCLENBQUMsT0FBTyxNQUFRO0FBQUEsTUFDaEIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxTQUFTLE1BQVE7QUFBQSxNQUNsQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsUUFBUSxNQUFRO0FBQUEsTUFDakIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFVBQVUsTUFBUTtBQUFBLE1BQ25CLENBQUMsVUFBVSxNQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsTUFDakIsQ0FBQyxVQUFVLE1BQVE7QUFBQSxNQUNuQixDQUFDLFNBQVMsTUFBUTtBQUFBLE1BQ2xCLENBQUMsUUFBUSxNQUFRO0FBQUEsTUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxNQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLE1BQ2xCLENBQUMsVUFBVSxRQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxNQUNqQixDQUFDLFNB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QUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsVUFBVSxRQUFRO0FBQUEsTUFDbkIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUNuQixDQUFDLFNBQVMsUUFBUTtBQUFBLE1BQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUNuQixDQUFDLFVBQVUsUUFBUTtBQUFBLE1BQ25CLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxNQUNsQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxXQUFXLFFBQVE7QUFBQSxNQUNwQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxNQUNqQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxNQUNsQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxNQUNqQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUNuQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxNQUNsQixDQUFDLFNBQVMsUUFBUTtBQUFBLE1BQ2xCLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxNQUNsQixDQUFDLE1BQU0sUUFBUTtBQUFBLE1BQ2YsQ0FBQyxRQUFRLFFBQVE7QUFBQSxNQUNqQixDQUFDLE9BQU8sUUFBUTtBQUFBLE1BQ2hCLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUNuQixDQUFDLFNBQVMsUUFBUTtBQUFBLE1BQ2xCLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxNQUNsQixDQUFDLE9BQU8sUUFBUTtBQUFBLE1BQ2hCLENBQUMsT0FBTyxRQUFRO0FBQUEsTUFDaEIsQ0FBQyxNQUFNLFFBQVE7QUFBQSxNQUNmLENBQUMsT0FBTyxRQUFRO0FBQUEsTUFDaEIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxNQUNoQixDQUFDLE9BQU8sUUFBUTtBQUFBLE1BQ2hCLENBQUMsVUFBVSxRQUFRO0FBQUEsTUFDbkIsQ0FBQyxPQUFPLFFBQVE7QUFBQSxNQUNoQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxNQUFNLFFBQVE7QUFBQSxNQUNmLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxNQUFNLFFBQVE7QUFBQSxNQUNmLENBQUMsTUFBTSxRQUFRO0FBQUEsTUFDZixDQUFDLE9BQU8sUUFBUTtBQUFBLE1BQ2hCLENBQUMsT0FBTyxRQUFRO0FBQUEsTUFDaEIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxNQUNqQixDQUFDLFFBQVEsUUFBUTtBQUFBLE1BQ2pCLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxTQUFTLFFBQVE7QUFBQSxNQUNsQixDQUFDLFVBQVUsUUFBUTtBQUFBLE1BQ25CLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxRQUFRLFFBQVE7QUFBQSxNQUNqQixDQUFDLFNBQVMsUUFBUTtBQUFBLE1BQ2xCLENBQUMsU0FBUyxRQUFRO0FBQUEsTUFDbEIsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUNuQixDQUFDLFVBQVUsUUFBUTtBQUFBLE1BQ25CLENBQUMsUUFBUSxRQUFRO0FBQUEsTUFDakIsQ0FBQyxR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TTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUNSO0FBRUEsSUFBTSx3QkFBd0I7QUFBQSxFQUM1QixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsU0FBUyxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ3BCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLFVBQVUsQ0FBQyxPQUFPLEtBQUs7QUFBQSxFQUN2QixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDakIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixTQUFTLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDcEIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLEVBQ2pCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNqQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQ25CO0FBRUEsSUFBTSxl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U0FBUyxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFBQSxFQUV0QyxNQUFNLFNBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQUEsRUFDdEMsT0FBTyxTQUFTLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQ3ZDLElBQUksU0FBUyxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFBQSxFQUNwQyxLQUFLLFNBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQUEsRUFDckMsR0FBRyxTQUFTLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBRW5DLEtBQUssU0FBUyxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFBQSxFQUNwQyxNQUFNLFNBQVMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQUEsRUFDckMsR0FBRyxTQUFTLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUFBLEVBRWxDLE1BQU0sU0FBUyxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFBQSxFQUN0QyxPQUFPLFNBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQUEsRUFDdkMsSUFBSSxTQUFTLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQ3BDLEtBQUssU0FBUyxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFBQSxFQUNyQyxHQUFHLFNBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQUEsRUFFbkMsUUFBUSxTQUFTLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUFBLEVBQzFDLFNBQVMsU0FBUyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFBQSxFQUMzQyxLQUFLLFNBQVMsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQUEsRUFDdkMsTUFBTSxTQUFTLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUFBLEVBQ3hDLEdBQUcsU0FBUyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFBQSxFQUVyQyxRQUFRLFNBQVMsV0FBVyxFQUFFLFNBQVMsRUFBRSxD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QSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsR0FBRztBQUFBLEVBQ0QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLEdBQUc7QUFBQSxFQUNELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxHQUFHO0FBQUEsRUFDRCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsQ0FBQztBQUNELElBQUksZUFBZSxJQUFJLE9BQU8sTUFBTSxXQUFXLElBQUksU0FBVUksSUFBRztBQUM5RCxTQUFPQSxHQUFFO0FBQ1gsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssR0FBRztBQUN0QixJQUFJLGtCQUFrQixDQUFDO0FBQ3ZCLEtBQVNDLEtBQUksR0FBR0EsS0FBSSxXQUFXLFFBQVFBLE1BQUs7QUFDdEMsY0FBWSxXQUFXQSxFQUFDO0FBQzVCLE9BQVNDLEtBQUksR0FBR0EsS0FBSSxVQUFVLFFBQVEsUUFBUUEsTUFBSztBQUNqRCxvQkFBZ0IsVUFBVSxRQUFRQSxFQUFDLENBQUMsSUFBSSxVQUFVO0FBQUEsRUFDcEQ7QUFDRjtBQUpNO0FBQ0ssSUFBQUE7QUFGRixJQUFBRDtBQU1ULElBQUksa0JBQWtCLFNBQVNFLGlCQUFnQixLQUFLO0FBQ2xELFNBQU8sSUFBSSxRQUFRLGNBQWMsU0FBVUMsUUFBTztBQUNoRCxXQUFPLGdCQUFnQkEsTUFBSztBQUFBLEVBQzlCLENBQUM7QUFDSDtBQUVBLElBQUksc0NBQWtDLG1CQUFBQyxTQUFXLGVBQWU7QUFDaEUsSUFBSSxhQUFhLFNBQVNDLFlBQVcsS0FBSztBQUN4QyxTQUFPLElBQUksUUFBUSxjQUFjLEVBQUU7QUFDckM7QUFDQSxJQUFJLG1CQUFtQixTQUFTQyxrQkFBaUIsUUFBUTtBQUN2RCxTQUFPLEdBQUcsT0FBTyxPQUFPLE9BQU8sR0FBRyxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQ3pEO0FBQ0EsSUFBSSxlQUFlLFNBQVNDLGNBQWFDLFNBQVE7QUFDL0MsU0FBTyxTQUFVLFFBQVEsVUFBVTtBQUVqQyxRQUFJLE9BQU8sS0FBSyxVQUFXLFFBQU87QUFDbEMsUUFBSSx3QkFBd0IsZUFBYztBQUFBLE1BQ3RDLFlBQVk7QUFBQSxNQUNaLGVBQWU7QUFBQSxNQUNmLFdBQVc7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxJQUNiLEdBQUdBLE9BQU0sR0FDVCxhQUFhLHNCQUFzQixZQUNuQyxnQkFBZ0Isc0JBQXNCLGVBQ3RDQyxhQUFZLHNCQUFzQixXQUNsQ0MsUUFBTyxzQkFBc0IsTUFDN0IsWUFBWSxzQkFBc0I7QUFDcEMsUUFBSSxRQUFRQSxRQUFPLFdBQVcsUUFBUSxJQUFJO0FBQzFDLFFBQUksWUFBWUEsUUFBTyxXQUFXRCxXQUFVLE1BQU0sQ0FBQyxJQUFJQSxXQUFVLE1BQU07QUFDdkUsUUFBSSxZQUFZO0FBQ2QsY0FBUSxNQUFNLFlBQVk7QUFDMUIsa0JBQVksVUFBVSxZQUFZO0FBQUEsSUFDcEM7QUFDQSxRQUFJLGVBQWU7QUFDakIsY0FBUSxnQ0FBZ0MsS0FBSztBQUM3QyxrQkFBWSxnQkFBZ0IsU0FBUztBQUFBLElBQ3ZDO0FBQ0EsV0FBTyxjQUFjLFVBQVUsVUFBVSxPQUFPLEdBQUcsTUFBTSxNQUFNLE1BQU0sUUFBUSxVQUFVLFFBQVEsS0FBSyxJQUFJO0FBQUEsRUFDMUc7QUFDRjtBQUVBLElBQUlFLGFBQVksQ0FBQyxVQUFVO0FBQzNCLFNBQVMsV0FBV0MsT0FBTTtBQUN4QixNQUFJLFdBQVdBLE1BQUssVUFDbEIsUUFBUSx5QkFBeUJBLE9BQU1ELFVBQVM7QUFFbEQsTUFBSSxnQkFBZ0IsWUFBWSxPQUFPLFlBQVksTUFBTSxTQUFTLFFBQVEsUUFBUTtBQUNsRixTQUFPLElBQUksU0FBUyxTQUFTO0FBQUEsSUFDM0IsS0FBSztBQUFBLEVBQ1AsR0FBRyxlQUFlO0FBQUEsSUFDaEIsS0FBa0Isb0JBQUk7QUFBQSxNQUNwQixPQUFPO0FBQUE7QUFBQSxNQUVQLFlBQVk7QUFBQSxNQUNaLFFBQVE7QUFBQTtBQUFBLE1BRVIsWUFBWTtBQUFBLE1BQ1osVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBO0FBQUEsTUFFVCxPQUFPO0FBQUE7QUFBQSxNQUVQLE9BQU87QUFBQTtBQUFBLE1BRVAsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1YsV0FBVztBQUFBLElBQ2IsR0FBRyxRQUFRLElBQUksYUFBYSxlQUFlLEtBQUssc0JBQXNCLFFBQVEsSUFBSSxhQUFhLGVBQWUsS0FBSyw2MURBQTYxRDtBQUFBLEVBQ2w5RCxDQUFDLENBQUM7QUFDSjtBQUVBLElBQUksZUFBZSxTQUFTRSxjQUFhLE9BQU87QUFDOUMsTUFBSSxNQUFNLFdBQVksT0FBTSxlQUFlO0FBQzNDLFFBQU0sZ0JBQWdCO0FBQ3hCO0FBQ0EsU0FBUyxpQkFBaUJELE9BQU07QUFDOUIsTUFBSSxZQUFZQSxNQUFLLFdBQ25CLGlCQUFpQkEsTUFBSyxnQkFDdEIsZ0JBQWdCQSxNQUFLLGVBQ3JCLGNBQWNBLE1BQUssYUFDbkIsYUFBYUEsTUFBSztBQUNwQixNQUFJLFdBQVdFLEdBQU8sS0FBSztBQUMzQixNQUFJLFFBQVFBLEdBQU8sS0FBSztBQUN4QixNQUFJLGFBQWFBLEdBQU8sQ0FBQztBQUN6QixNQUFJLGVBQWVBLEdBQU8sSUFBSTtBQUM5QixNQUFJLG1CQUFtQkMsR0FBWSxTQUFVLE9BQU8sT0FBTztBQUN6RCxRQUFJLGFBQWEsWUFBWSxLQUFNO0FBQ25DLFFBQUksd0JBQXdCLGFBQWEsU0FDdkMsWUFBWSxzQkFBc0IsV0FDbEMsZUFBZSxzQkFBc0IsY0FDckMsZUFBZSxzQkFBc0I7QUFDdkMsUUFBSSxTQUFTLGFBQWE7QUFDMUIsUUFBSSxrQkFBa0IsUUFBUTtBQUM5QixRQUFJLGtCQUFrQixlQUFlLGVBQWU7QUFDcEQsUUFBSSxxQkFBcUI7QUFHekIsUUFBSSxrQkFBa0IsU0FBUyxTQUFTLFNBQVM7QUFDL0MsVUFBSSxjQUFlLGVBQWMsS0FBSztBQUN0QyxlQUFTLFVBQVU7QUFBQSxJQUNyQjtBQUNBLFFBQUksbUJBQW1CLE1BQU0sU0FBUztBQUNwQyxVQUFJLFdBQVksWUFBVyxLQUFLO0FBQ2hDLFlBQU0sVUFBVTtBQUFBLElBQ2xCO0FBR0EsUUFBSSxtQkFBbUIsUUFBUSxpQkFBaUI7QUFDOUMsVUFBSSxrQkFBa0IsQ0FBQyxTQUFTLFNBQVM7QUFDdkMsdUJBQWUsS0FBSztBQUFBLE1BQ3RCO0FBQ0EsYUFBTyxZQUFZO0FBQ25CLDJCQUFxQjtBQUNyQixlQUFTLFVBQVU7QUFBQSxJQUdyQixXQUFXLENBQUMsbUJBQW1CLENBQUMsUUFBUSxXQUFXO0FBQ2pELFVBQUksZUFBZSxDQUFDLE1BQU0sU0FBUztBQUNqQyxvQkFBWSxLQUFLO0FBQUEsTUFDbkI7QUFDQSxhQUFPLFlBQVk7QUFDbkIsMkJBQXFCO0FBQ3JCLFlBQU0sVUFBVTtBQUFBLElBQ2xCO0FBR0EsUUFBSSxvQkFBb0I7QUFDdEIsbUJBQWEsS0FBSztBQUFBLElBQ3BCO0FBQUEsRUFDRixHQUFHLENBQUMsZ0JBQWdCLGVBQWUsYUFBYSxVQUFVLENBQUM7QUFDM0QsTUFBSSxVQUFVQSxHQUFZLFNBQVUsT0FBTztBQUN6QyxxQkFBaUIsT0FBTyxNQUFNLE1BQU07QUFBQSxFQUN0QyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7QUFDckIsTUFBSSxlQUFlQSxHQUFZLFNBQVUsT0FBTztBQUU5QyxlQUFXLFVBQVUsTUFBTSxlQUFlLENBQUMsRUFBRTtBQUFBLEVBQy9DLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsTUFBSSxjQUFjQSxHQUFZLFNBQVUsT0FBTztBQUM3QyxRQUFJLFNBQVMsV0FBVyxVQUFVLE1BQU0sZUFBZSxDQUFDLEVBQUU7QUFDMUQscUJBQWlCLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztBQUNyQixNQUFJLGlCQUFpQkEsR0FBWSxTQUFVLElBQUk7QUFFN0MsUUFBSSxDQUFDLEdBQUk7QUFDVCxRQUFJLGFBQWEsd0JBQXdCO0FBQUEsTUFDdkMsU0FBUztBQUFBLElBQ1gsSUFBSTtBQUNKLE9BQUcsaUJBQWlCLFNBQVMsU0FBUyxVQUFVO0FBQ2hELE9BQUcsaUJBQWlCLGNBQWMsY0FBYyxVQUFVO0FBQzFELE9BQUcsaUJBQWlCLGFBQWEsYUFBYSxVQUFVO0FBQUEsRUFDMUQsR0FBRyxDQUFDLGFBQWEsY0FBYyxPQUFPLENBQUM7QUFDdkMsTUFBSSxnQkFBZ0JBLEdBQVksU0FBVSxJQUFJO0FBRTVDLFFBQUksQ0FBQyxHQUFJO0FBQ1QsT0FBRyxvQkFBb0IsU0FBUyxTQUFTLEtBQUs7QUFDOUMsT0FBRyxvQkFBb0IsY0FBYyxjQUFjLEtBQUs7QUFDeEQsT0FBRyxvQkFBb0IsYUFBYSxhQUFhLEtBQUs7QUFBQSxFQUN4RCxHQUFHLENBQUMsYUFBYSxjQUFjLE9BQU8sQ0FBQztBQUN2QyxFQUFBQyxHQUFVLFdBQVk7QUFDcEIsUUFBSSxDQUFDLFVBQVc7QUFDaEIsUUFBSSxVQUFVLGFBQWE7QUFDM0IsbUJBQWUsT0FBTztBQUN0QixXQUFPLFdBQVk7QUFDakIsb0JBQWMsT0FBTztBQUFBLElBQ3ZCO0FBQUEsRUFDRixHQUFHLENBQUMsV0FBVyxnQkFBZ0IsYUFBYSxDQUFDO0FBQzdDLFNBQU8sU0FBVSxTQUFTO0FBQ3hCLGlCQUFhLFVBQVU7QUFBQSxFQUN6QjtBQUNGO0FBRUEsSUFBSSxhQUFhLENBQUMsYUFBYSxVQUFVLFlBQVksZ0JBQWdCLFVBQVU7QUFDL0UsSUFBSSxjQUFjO0FBQUEsRUFDaEIsV0FBVztBQUFBO0FBQUEsRUFFWCxVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQ1Y7QUFDQSxTQUFTLGlCQUFpQkMsSUFBRztBQUMzQixNQUFJQSxHQUFFLFdBQVksQ0FBQUEsR0FBRSxlQUFlO0FBQ3JDO0FBQ0EsU0FBUyxlQUFlQSxJQUFHO0FBQ3pCLEVBQUFBLEdBQUUsZ0JBQWdCO0FBQ3BCO0FBQ0EsU0FBUyx1QkFBdUI7QUFDOUIsTUFBSSxNQUFNLEtBQUs7QUFDZixNQUFJLGNBQWMsS0FBSztBQUN2QixNQUFJLGdCQUFnQixNQUFNLEtBQUs7QUFDL0IsTUFBSSxRQUFRLEdBQUc7QUFDYixTQUFLLFlBQVk7QUFBQSxFQUNuQixXQUFXLGtCQUFrQixhQUFhO0FBQ3hDLFNBQUssWUFBWSxNQUFNO0FBQUEsRUFDekI7QUFDRjtBQUlBLFNBQVMsZ0JBQWdCO0FBQ3ZCLFNBQU8sa0JBQWtCLFVBQVUsVUFBVTtBQUMvQztBQUNBLElBQUksWUFBWSxDQUFDLEVBQUUsT0FBTyxXQUFXLGVBQWUsT0FBTyxZQUFZLE9BQU8sU0FBUztBQUN2RixJQUFJLG9CQUFvQjtBQUN4QixJQUFJLGtCQUFrQjtBQUFBLEVBQ3BCLFNBQVM7QUFBQSxFQUNULFNBQVM7QUFDWDtBQUNBLFNBQVMsY0FBY0wsT0FBTTtBQUMzQixNQUFJLFlBQVlBLE1BQUssV0FDbkIsd0JBQXdCQSxNQUFLLHNCQUM3Qix1QkFBdUIsMEJBQTBCLFNBQVMsT0FBTztBQUNuRSxNQUFJLGlCQUFpQkUsR0FBTyxDQUFDLENBQUM7QUFDOUIsTUFBSSxlQUFlQSxHQUFPLElBQUk7QUFDOUIsTUFBSSxnQkFBZ0JDLEdBQVksU0FBVSxtQkFBbUI7QUFDM0QsUUFBSSxDQUFDLFVBQVc7QUFDaEIsUUFBSSxTQUFTLFNBQVM7QUFDdEIsUUFBSSxjQUFjLFVBQVUsT0FBTztBQUNuQyxRQUFJLHNCQUFzQjtBQUV4QixpQkFBVyxRQUFRLFNBQVUsS0FBSztBQUNoQyxZQUFJLE1BQU0sZUFBZSxZQUFZLEdBQUc7QUFDeEMsdUJBQWUsUUFBUSxHQUFHLElBQUk7QUFBQSxNQUNoQyxDQUFDO0FBQUEsSUFDSDtBQUdBLFFBQUksd0JBQXdCLG9CQUFvQixHQUFHO0FBQ2pELFVBQUksaUJBQWlCLFNBQVMsZUFBZSxRQUFRLGNBQWMsRUFBRSxLQUFLO0FBQzFFLFVBQUksY0FBYyxTQUFTLE9BQU8sU0FBUyxLQUFLLGNBQWM7QUFDOUQsVUFBSSxrQkFBa0IsT0FBTyxhQUFhLGNBQWMsa0JBQWtCO0FBQzFFLGFBQU8sS0FBSyxXQUFXLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDOUMsWUFBSSxNQUFNLFlBQVksR0FBRztBQUN6QixZQUFJLGFBQWE7QUFDZixzQkFBWSxHQUFHLElBQUk7QUFBQSxRQUNyQjtBQUFBLE1BQ0YsQ0FBQztBQUNELFVBQUksYUFBYTtBQUNmLG9CQUFZLGVBQWUsR0FBRyxPQUFPLGlCQUFpQixJQUFJO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBR0EsUUFBSSxVQUFVLGNBQWMsR0FBRztBQUU3QixhQUFPLGlCQUFpQixhQUFhLGtCQUFrQixlQUFlO0FBR3RFLFVBQUksbUJBQW1CO0FBQ3JCLDBCQUFrQixpQkFBaUIsY0FBYyxzQkFBc0IsZUFBZTtBQUN0RiwwQkFBa0IsaUJBQWlCLGFBQWEsZ0JBQWdCLGVBQWU7QUFBQSxNQUNqRjtBQUFBLElBQ0Y7QUFHQSx5QkFBcUI7QUFBQSxFQUN2QixHQUFHLENBQUMsb0JBQW9CLENBQUM7QUFDekIsTUFBSSxtQkFBbUJBLEdBQVksU0FBVSxtQkFBbUI7QUFDOUQsUUFBSSxDQUFDLFVBQVc7QUFDaEIsUUFBSSxTQUFTLFNBQVM7QUFDdEIsUUFBSSxjQUFjLFVBQVUsT0FBTztBQUduQyx3QkFBb0IsS0FBSyxJQUFJLG9CQUFvQixHQUFHLENBQUM7QUFHckQsUUFBSSx3QkFBd0Isb0JBQW9CLEdBQUc7QUFDakQsaUJBQVcsUUFBUSxTQUFVLEtBQUs7QUFDaEMsWUFBSSxNQUFNLGVBQWUsUUFBUSxHQUFHO0FBQ3BDLFlBQUksYUFBYTtBQUNmLHNCQUFZLEdBQUcsSUFBSTtBQUFBLFFBQ3JCO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUdBLFFBQUksVUFBVSxjQUFjLEdBQUc7QUFDN0IsYUFBTyxvQkFBb0IsYUFBYSxrQkFBa0IsZUFBZTtBQUN6RSxVQUFJLG1CQUFtQjtBQUNyQiwwQkFBa0Isb0JBQW9CLGNBQWMsc0JBQXNCLGVBQWU7QUFDekYsMEJBQWtCLG9CQUFvQixhQUFhLGdCQUFnQixlQUFlO0FBQUEsTUFDcEY7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHLENBQUMsb0JBQW9CLENBQUM7QUFDekIsRUFBQUMsR0FBVSxXQUFZO0FBQ3BCLFFBQUksQ0FBQyxVQUFXO0FBQ2hCLFFBQUksVUFBVSxhQUFhO0FBQzNCLGtCQUFjLE9BQU87QUFDckIsV0FBTyxXQUFZO0FBQ2pCLHVCQUFpQixPQUFPO0FBQUEsSUFDMUI7QUFBQSxFQUNGLEdBQUcsQ0FBQyxXQUFXLGVBQWUsZ0JBQWdCLENBQUM7QUFDL0MsU0FBTyxTQUFVLFNBQVM7QUFDeEIsaUJBQWEsVUFBVTtBQUFBLEVBQ3pCO0FBQ0Y7QUFFQSxTQUFTLHFDQUFxQztBQUFFLFNBQU87QUFBbU87QUFDMVIsSUFBSSxrQkFBa0IsU0FBU0UsaUJBQWdCLE9BQU87QUFDcEQsTUFBSSxVQUFVLE1BQU07QUFDcEIsU0FBTyxRQUFRLGNBQWMsaUJBQWlCLFFBQVEsY0FBYyxjQUFjLEtBQUs7QUFDekY7QUFDQSxJQUFJLFVBQVUsUUFBUSxJQUFJLGFBQWEsZUFBZTtBQUFBLEVBQ3BELE1BQU07QUFBQSxFQUNOLFFBQVE7QUFDVixJQUFJO0FBQUEsRUFDRixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixLQUFLO0FBQUEsRUFDTCxVQUFVO0FBQ1o7QUFDQSxTQUFTLGNBQWNOLE9BQU07QUFDM0IsTUFBSSxXQUFXQSxNQUFLLFVBQ2xCLGNBQWNBLE1BQUssYUFDbkIsc0JBQXNCQSxNQUFLLGdCQUMzQixpQkFBaUIsd0JBQXdCLFNBQVMsT0FBTyxxQkFDekQsaUJBQWlCQSxNQUFLLGdCQUN0QixnQkFBZ0JBLE1BQUssZUFDckIsY0FBY0EsTUFBSyxhQUNuQixhQUFhQSxNQUFLO0FBQ3BCLE1BQUkseUJBQXlCLGlCQUFpQjtBQUFBLElBQzVDLFdBQVc7QUFBQSxJQUNYO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0QsTUFBSSxzQkFBc0IsY0FBYztBQUFBLElBQ3RDLFdBQVc7QUFBQSxFQUNiLENBQUM7QUFDRCxNQUFJLFlBQVksU0FBU08sV0FBVSxTQUFTO0FBQzFDLDJCQUF1QixPQUFPO0FBQzlCLHdCQUFvQixPQUFPO0FBQUEsRUFDN0I7QUFDQSxTQUFPLElBQUksR0FBVSxNQUFNLGVBQWUsSUFBSSxPQUFPO0FBQUEsSUFDbkQsU0FBUztBQUFBLElBQ1QsS0FBSztBQUFBLEVBQ1AsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO0FBQ3pCO0FBRUEsU0FBU0Msb0NBQW1DO0FBQUUsU0FBTztBQUFtTztBQUN4UixJQUFJQyxTQUFRLFFBQVEsSUFBSSxhQUFhLGVBQWU7QUFBQSxFQUNsRCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQ1YsSUFBSTtBQUFBLEVBQ0YsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsS0FBSztBQUFBLEVBQ0wsVUFBVUQ7QUFDWjtBQUNBLElBQUksZ0JBQWdCLFNBQVNFLGVBQWNWLE9BQU07QUFDL0MsTUFBSSxPQUFPQSxNQUFLLE1BQ2RXLFdBQVVYLE1BQUs7QUFDakIsU0FBTyxJQUFJLFNBQVM7QUFBQSxJQUNsQixVQUFVO0FBQUEsSUFDVjtBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsZUFBZTtBQUFBLElBQ2YsU0FBU1c7QUFBQSxJQUNULEtBQUtGO0FBQUEsSUFHTCxPQUFPO0FBQUEsSUFDUCxVQUFVLFNBQVNHLFlBQVc7QUFBQSxJQUFDO0FBQUEsRUFDakMsQ0FBQztBQUNIO0FBQ0EsSUFBSSxrQkFBa0I7QUFJdEIsU0FBUyxhQUFhLElBQUk7QUFDeEIsTUFBSTtBQUNKLFNBQU8sT0FBTyxXQUFXLGVBQWUsT0FBTyxhQUFhLE9BQU8sR0FBRyxPQUFPLHdCQUF3QixPQUFPLFVBQVUsZUFBZSxPQUFPLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0IsYUFBYSxPQUFPLFVBQVUsUUFBUSxJQUFJO0FBQ2xRO0FBQ0EsU0FBUyxXQUFXO0FBQ2xCLFNBQU8sYUFBYSxVQUFVO0FBQ2hDO0FBQ0EsU0FBUyxRQUFRO0FBQ2YsU0FBTyxhQUFhLE9BQU87QUFDN0I7QUFDQSxTQUFTLFNBQVM7QUFDaEIsU0FBTyxhQUFhLFFBQVE7QUFBQSxFQUU1QixNQUFNLEtBQUssVUFBVSxpQkFBaUI7QUFDeEM7QUFDQSxTQUFTLFFBQVE7QUFDZixTQUFPLFNBQVMsS0FBSyxPQUFPO0FBQzlCO0FBQ0EsU0FBUyxnQkFBZ0I7QUFDdkIsU0FBTyxNQUFNLEtBQUssTUFBTTtBQUMxQjtBQUVBLElBQUksbUJBQW1CLFNBQVNDLGtCQUFpQixPQUFPO0FBQ3RELFNBQU8sTUFBTTtBQUNmO0FBQ0EsSUFBSSxtQkFBbUIsU0FBUyxlQUFlLFFBQVE7QUFDckQsU0FBTyxPQUFPO0FBQ2hCO0FBQ0EsSUFBSSxtQkFBbUIsU0FBUyxlQUFlLFFBQVE7QUFDckQsU0FBTyxPQUFPO0FBQ2hCO0FBQ0EsSUFBSSxtQkFBbUIsU0FBUzlCLGtCQUFpQixRQUFRO0FBQ3ZELFNBQU8sQ0FBQyxDQUFDLE9BQU87QUFDbEI7QUFFQSxJQUFJLGdCQUFnQjtBQUFBLEVBQ2xCLGdCQUFnQjtBQUFBLEVBQ2hCLFdBQVc7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULG1CQUFtQjtBQUFBLEVBQ25CLE9BQU87QUFBQSxFQUNQLGNBQWM7QUFBQSxFQUNkLHFCQUFxQjtBQUFBLEVBQ3JCLG9CQUFvQjtBQUFBLEVBQ3BCLE9BQU87QUFBQSxFQUNQLGtCQUFrQjtBQUFBLEVBQ2xCLGdCQUFnQjtBQUFBLEVBQ2hCLE1BQU07QUFBQSxFQUNOLFVBQVU7QUFBQSxFQUNWLFlBQVk7QUFBQSxFQUNaLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLGtCQUFrQjtBQUFBLEVBQ2xCLGtCQUFrQjtBQUFBLEVBQ2xCLFFBQVE7QUFBQSxFQUNSLGFBQWE7QUFBQSxFQUNiLGFBQWErQjtBQUFBLEVBQ2IsZ0JBQWdCO0FBQ2xCO0FBdUJBLElBQUksU0FBUztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUNiO0FBQ0EsSUFBSSxlQUFlO0FBRW5CLElBQUksV0FBVztBQUVmLElBQUksZ0JBQWdCO0FBRXBCLElBQUksYUFBYSxXQUFXO0FBQzVCLElBQUksVUFBVTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBQ0EsSUFBSSxlQUFlO0FBQUEsRUFDakI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBRUEsSUFBSSxlQUFlO0FBQUEsRUFDakIsYUFBYTtBQUFBLEVBQ2IsdUJBQXVCO0FBQUEsRUFDdkIsbUJBQW1CLGVBQWU7QUFBQSxFQUNsQyxtQkFBbUIsQ0FBQyxlQUFlO0FBQUEsRUFDbkMsWUFBWSxDQUFDO0FBQUEsRUFDYixtQkFBbUI7QUFBQSxFQUNuQixtQkFBbUI7QUFBQSxFQUNuQixZQUFZLENBQUM7QUFBQSxFQUNiLDBCQUEwQjtBQUFBLEVBQzFCLG1CQUFtQjtBQUFBLEVBQ25CLGNBQWMsYUFBYTtBQUFBLEVBQzNCO0FBQUEsRUFDQSxnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxjQUFjO0FBQUEsRUFDZDtBQUFBLEVBQ0EsZ0JBQWdCLFNBQVMsaUJBQWlCO0FBQ3hDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixlQUFlO0FBQUEsRUFDZixjQUFjO0FBQUEsRUFDZCx1QkFBdUI7QUFBQSxFQUN2QiwwQkFBMEIsQ0FBQyxlQUFlO0FBQUEsRUFDMUMsa0JBQWtCLFNBQVMsbUJBQW1CO0FBQzVDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxpQkFBaUI7QUFBQSxFQUNqQixpQkFBaUI7QUFBQSxFQUNqQixTQUFTLENBQUM7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLGFBQWE7QUFBQSxFQUNiLG9CQUFvQixTQUFTLG1CQUFtQkMsT0FBTTtBQUNwRCxRQUFJLFFBQVFBLE1BQUs7QUFDakIsV0FBTyxHQUFHLE9BQU8sT0FBTyxTQUFTLEVBQUUsT0FBTyxVQUFVLElBQUksTUFBTSxJQUFJLFlBQVk7QUFBQSxFQUNoRjtBQUFBLEVBQ0EsUUFBUSxDQUFDO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixpQkFBaUI7QUFBQSxFQUNqQixVQUFVO0FBQ1o7QUFDQSxTQUFTLG9CQUFvQixPQUFPLFFBQVEsYUFBYSxPQUFPO0FBQzlELE1BQUksYUFBYSxrQkFBa0IsT0FBTyxRQUFRLFdBQVc7QUFDN0QsTUFBSSxhQUFhLGtCQUFrQixPQUFPLFFBQVEsV0FBVztBQUM3RCxNQUFJLFFBQVFDLGdCQUFlLE9BQU8sTUFBTTtBQUN4QyxNQUFJLFFBQVFDLGdCQUFlLE9BQU8sTUFBTTtBQUN4QyxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFDQSxTQUFTLHdCQUF3QixPQUFPLGFBQWE7QUFDbkQsU0FBTyxNQUFNLFFBQVEsSUFBSSxTQUFVLGVBQWUsb0JBQW9CO0FBQ3BFLFFBQUksYUFBYSxlQUFlO0FBQzlCLFVBQUkscUJBQXFCLGNBQWMsUUFBUSxJQUFJLFNBQVUsUUFBUSxhQUFhO0FBQ2hGLGVBQU8sb0JBQW9CLE9BQU8sUUFBUSxhQUFhLFdBQVc7QUFBQSxNQUNwRSxDQUFDLEVBQUUsT0FBTyxTQUFVQyxvQkFBbUI7QUFDckMsZUFBTyxZQUFZLE9BQU9BLGtCQUFpQjtBQUFBLE1BQzdDLENBQUM7QUFDRCxhQUFPLG1CQUFtQixTQUFTLElBQUk7QUFBQSxRQUNyQyxNQUFNO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsTUFDVCxJQUFJO0FBQUEsSUFDTjtBQUNBLFFBQUksb0JBQW9CLG9CQUFvQixPQUFPLGVBQWUsYUFBYSxrQkFBa0I7QUFDakcsV0FBTyxZQUFZLE9BQU8saUJBQWlCLElBQUksb0JBQW9CO0FBQUEsRUFDckUsQ0FBQyxFQUFFLE9BQU8sVUFBVTtBQUN0QjtBQUNBLFNBQVMsNENBQTRDLG9CQUFvQjtBQUN2RSxTQUFPLG1CQUFtQixPQUFPLFNBQVUsb0JBQW9CLG1CQUFtQjtBQUNoRixRQUFJLGtCQUFrQixTQUFTLFNBQVM7QUFDdEMseUJBQW1CLEtBQUssTUFBTSxvQkFBb0IsbUJBQW1CLGtCQUFrQixRQUFRLElBQUksU0FBVSxRQUFRO0FBQ25ILGVBQU8sT0FBTztBQUFBLE1BQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDTCxPQUFPO0FBQ0wseUJBQW1CLEtBQUssa0JBQWtCLElBQUk7QUFBQSxJQUNoRDtBQUNBLFdBQU87QUFBQSxFQUNULEdBQUcsQ0FBQyxDQUFDO0FBQ1A7QUFDQSxTQUFTLDZCQUE2QixvQkFBb0IsVUFBVTtBQUNsRSxTQUFPLG1CQUFtQixPQUFPLFNBQVUsb0JBQW9CLG1CQUFtQjtBQUNoRixRQUFJLGtCQUFrQixTQUFTLFNBQVM7QUFDdEMseUJBQW1CLEtBQUssTUFBTSxvQkFBb0IsbUJBQW1CLGtCQUFrQixRQUFRLElBQUksU0FBVSxRQUFRO0FBQ25ILGVBQU87QUFBQSxVQUNMLE1BQU0sT0FBTztBQUFBLFVBQ2IsSUFBSSxHQUFHLE9BQU8sVUFBVSxHQUFHLEVBQUUsT0FBTyxrQkFBa0IsT0FBTyxHQUFHLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFBQSxRQUN2RjtBQUFBLE1BQ0YsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUNMLE9BQU87QUFDTCx5QkFBbUIsS0FBSztBQUFBLFFBQ3RCLE1BQU0sa0JBQWtCO0FBQUEsUUFDeEIsSUFBSSxHQUFHLE9BQU8sVUFBVSxHQUFHLEVBQUUsT0FBTyxrQkFBa0IsS0FBSztBQUFBLE1BQzdELENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTztBQUFBLEVBQ1QsR0FBRyxDQUFDLENBQUM7QUFDUDtBQUNBLFNBQVMsc0JBQXNCLE9BQU8sYUFBYTtBQUNqRCxTQUFPLDRDQUE0Qyx3QkFBd0IsT0FBTyxXQUFXLENBQUM7QUFDaEc7QUFDQSxTQUFTLFlBQVksT0FBTyxtQkFBbUI7QUFDN0MsTUFBSSxvQkFBb0IsTUFBTSxZQUM1QixhQUFhLHNCQUFzQixTQUFTLEtBQUs7QUFDbkQsTUFBSSxPQUFPLGtCQUFrQixNQUMzQixhQUFhLGtCQUFrQixZQUMvQixRQUFRLGtCQUFrQixPQUMxQixRQUFRLGtCQUFrQjtBQUM1QixVQUFRLENBQUMsMEJBQTBCLEtBQUssS0FBSyxDQUFDLGVBQWUsY0FBYyxPQUFPO0FBQUEsSUFDaEY7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsR0FBRyxVQUFVO0FBQ2Y7QUFDQSxTQUFTLG9CQUFvQixPQUFPLGlCQUFpQjtBQUNuRCxNQUFJLGVBQWUsTUFBTSxjQUN2QixrQkFBa0IsTUFBTTtBQUMxQixNQUFJLG1CQUFtQixnQkFBZ0IsUUFBUSxZQUFZO0FBQzNELE1BQUksbUJBQW1CLElBQUk7QUFDekIsUUFBSSxtQkFBbUIsZ0JBQWdCLFFBQVEsWUFBWTtBQUMzRCxRQUFJLG1CQUFtQixJQUFJO0FBRXpCLGFBQU87QUFBQSxJQUNULFdBQVcsbUJBQW1CLGdCQUFnQixRQUFRO0FBR3BELGFBQU8sZ0JBQWdCLGdCQUFnQjtBQUFBLElBQ3pDO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUNBLFNBQVMscUJBQXFCLE9BQU9DLFVBQVM7QUFDNUMsTUFBSSxvQkFBb0IsTUFBTTtBQUM5QixTQUFPLHFCQUFxQkEsU0FBUSxRQUFRLGlCQUFpQixJQUFJLEtBQUssb0JBQW9CQSxTQUFRLENBQUM7QUFDckc7QUFDQSxJQUFJLHFCQUFxQixTQUFTQyxvQkFBbUIseUJBQXlCLGVBQWU7QUFDM0YsTUFBSTtBQUNKLE1BQUksbUJBQW1CLHdCQUF3Qix3QkFBd0IsS0FBSyxTQUFVLFFBQVE7QUFDNUYsV0FBTyxPQUFPLFNBQVM7QUFBQSxFQUN6QixDQUFDLE9BQU8sUUFBUSwwQkFBMEIsU0FBUyxTQUFTLHNCQUFzQjtBQUNsRixTQUFPLG1CQUFtQjtBQUM1QjtBQUNBLElBQUlKLGtCQUFpQixTQUFTQSxnQkFBZSxPQUFPLE1BQU07QUFDeEQsU0FBTyxNQUFNLGVBQWUsSUFBSTtBQUNsQztBQUNBLElBQUlDLGtCQUFpQixTQUFTQSxnQkFBZSxPQUFPLE1BQU07QUFDeEQsU0FBTyxNQUFNLGVBQWUsSUFBSTtBQUNsQztBQUNBLFNBQVMsa0JBQWtCLE9BQU8sUUFBUSxhQUFhO0FBQ3JELFNBQU8sT0FBTyxNQUFNLHFCQUFxQixhQUFhLE1BQU0saUJBQWlCLFFBQVEsV0FBVyxJQUFJO0FBQ3RHO0FBQ0EsU0FBUyxrQkFBa0IsT0FBTyxRQUFRLGFBQWE7QUFDckQsTUFBSSxZQUFZLFFBQVEsTUFBTSxJQUFJLEdBQUksUUFBTztBQUM3QyxNQUFJLE9BQU8sTUFBTSxxQkFBcUIsWUFBWTtBQUNoRCxXQUFPLE1BQU0saUJBQWlCLFFBQVEsV0FBVztBQUFBLEVBQ25EO0FBQ0EsTUFBSSxZQUFZQSxnQkFBZSxPQUFPLE1BQU07QUFDNUMsU0FBTyxZQUFZLEtBQUssU0FBVUksSUFBRztBQUNuQyxXQUFPSixnQkFBZSxPQUFPSSxFQUFDLE1BQU07QUFBQSxFQUN0QyxDQUFDO0FBQ0g7QUFDQSxTQUFTLGNBQWMsT0FBTyxRQUFRLFlBQVk7QUFDaEQsU0FBTyxNQUFNLGVBQWUsTUFBTSxhQUFhLFFBQVEsVUFBVSxJQUFJO0FBQ3ZFO0FBQ0EsSUFBSSw0QkFBNEIsU0FBU0MsMkJBQTBCLE9BQU87QUFDeEUsTUFBSSxzQkFBc0IsTUFBTSxxQkFDOUIsVUFBVSxNQUFNO0FBQ2xCLE1BQUksd0JBQXdCLE9BQVcsUUFBTztBQUM5QyxTQUFPO0FBQ1Q7QUFDQSxJQUFJLGFBQWE7QUFDakIsSUFBSSxTQUFzQix5QkFBVSxZQUFZO0FBQzlDLFlBQVVDLFNBQVEsVUFBVTtBQUM1QixNQUFJLFNBQVMsYUFBYUEsT0FBTTtBQVloQyxXQUFTQSxRQUFPLFFBQVE7QUFDdEIsUUFBSTtBQUNKLG9CQUFnQixNQUFNQSxPQUFNO0FBQzVCLFlBQVEsT0FBTyxLQUFLLE1BQU0sTUFBTTtBQUNoQyxVQUFNLFFBQVE7QUFBQSxNQUNaLGVBQWU7QUFBQSxNQUNmLGVBQWU7QUFBQSxNQUNmLGlCQUFpQjtBQUFBLE1BQ2pCLHlCQUF5QixDQUFDO0FBQUEsTUFDMUIsY0FBYztBQUFBLE1BQ2QsZUFBZTtBQUFBLE1BQ2YsV0FBVztBQUFBLE1BQ1gsYUFBYSxDQUFDO0FBQUEsTUFDZCx5QkFBeUI7QUFBQSxNQUN6QixnQkFBZ0I7QUFBQSxNQUNoQiwwQkFBMEI7QUFBQSxNQUMxQixXQUFXO0FBQUEsTUFDWCxnQkFBZ0I7QUFBQSxJQUNsQjtBQUNBLFVBQU0sbUJBQW1CO0FBQ3pCLFVBQU0sY0FBYztBQUNwQixVQUFNLGNBQWM7QUFDcEIsVUFBTSxnQkFBZ0I7QUFDdEIsVUFBTSxnQkFBZ0I7QUFDdEIsVUFBTSxpQkFBaUI7QUFDdkIsVUFBTSxnQ0FBZ0M7QUFDdEMsVUFBTSxpQkFBaUI7QUFDdkIsVUFBTSxnQkFBZ0IsY0FBYztBQUNwQyxVQUFNLGFBQWE7QUFDbkIsVUFBTSxnQkFBZ0IsU0FBVSxLQUFLO0FBQ25DLFlBQU0sYUFBYTtBQUFBLElBQ3JCO0FBQ0EsVUFBTSxtQkFBbUI7QUFDekIsVUFBTSxzQkFBc0IsU0FBVSxLQUFLO0FBQ3pDLFlBQU0sbUJBQW1CO0FBQUEsSUFDM0I7QUFDQSxVQUFNLGNBQWM7QUFDcEIsVUFBTSxpQkFBaUIsU0FBVSxLQUFLO0FBQ3BDLFlBQU0sY0FBYztBQUFBLElBQ3RCO0FBQ0EsVUFBTSxXQUFXO0FBQ2pCLFVBQU0sY0FBYyxTQUFVLEtBQUs7QUFDakMsWUFBTSxXQUFXO0FBQUEsSUFDbkI7QUFDQSxVQUFNLFFBQVEsTUFBTTtBQUNwQixVQUFNLE9BQU8sTUFBTTtBQUNuQixVQUFNLFdBQVcsU0FBVSxVQUFVLFlBQVk7QUFDL0MsVUFBSSxjQUFjLE1BQU0sT0FDdEJDLFlBQVcsWUFBWSxVQUN2QixPQUFPLFlBQVk7QUFDckIsaUJBQVcsT0FBTztBQUNsQixZQUFNLGFBQWEsVUFBVSxVQUFVO0FBQ3ZDLE1BQUFBLFVBQVMsVUFBVSxVQUFVO0FBQUEsSUFDL0I7QUFDQSxVQUFNLFdBQVcsU0FBVSxVQUFVLFFBQVEsUUFBUTtBQUNuRCxVQUFJLGVBQWUsTUFBTSxPQUN2QixvQkFBb0IsYUFBYSxtQkFDakMsVUFBVSxhQUFhLFNBQ3ZCLGFBQWEsYUFBYTtBQUM1QixZQUFNLGNBQWMsSUFBSTtBQUFBLFFBQ3RCLFFBQVE7QUFBQSxRQUNSLGdCQUFnQjtBQUFBLE1BQ2xCLENBQUM7QUFDRCxVQUFJLG1CQUFtQjtBQUNyQixjQUFNLFNBQVM7QUFBQSxVQUNiLDBCQUEwQixDQUFDO0FBQUEsUUFDN0IsQ0FBQztBQUNELGNBQU0sWUFBWTtBQUFBLE1BQ3BCO0FBRUEsWUFBTSxTQUFTO0FBQUEsUUFDYix5QkFBeUI7QUFBQSxNQUMzQixDQUFDO0FBQ0QsWUFBTSxTQUFTLFVBQVU7QUFBQSxRQUN2QjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQ0EsVUFBTSxlQUFlLFNBQVUsVUFBVTtBQUN2QyxVQUFJLGVBQWUsTUFBTSxPQUN2QixvQkFBb0IsYUFBYSxtQkFDakMsVUFBVSxhQUFhLFNBQ3ZCLE9BQU8sYUFBYTtBQUN0QixVQUFJLGNBQWMsTUFBTSxNQUFNO0FBQzlCLFVBQUksYUFBYSxXQUFXLE1BQU0saUJBQWlCLFVBQVUsV0FBVztBQUN4RSxVQUFJLGFBQWEsTUFBTSxpQkFBaUIsVUFBVSxXQUFXO0FBQzdELFVBQUksWUFBWTtBQUNkLFlBQUksWUFBWSxNQUFNLGVBQWUsUUFBUTtBQUM3QyxjQUFNLFNBQVMsa0JBQWtCLFlBQVksT0FBTyxTQUFVSCxJQUFHO0FBQy9ELGlCQUFPLE1BQU0sZUFBZUEsRUFBQyxNQUFNO0FBQUEsUUFDckMsQ0FBQyxDQUFDLEdBQUcsbUJBQW1CLFFBQVE7QUFBQSxNQUNsQyxXQUFXLENBQUMsWUFBWTtBQUV0QixZQUFJLFNBQVM7QUFDWCxnQkFBTSxTQUFTLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxtQkFBbUIsV0FBVyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxpQkFBaUIsUUFBUTtBQUFBLFFBQ3JILE9BQU87QUFDTCxnQkFBTSxTQUFTLG1CQUFtQixRQUFRLEdBQUcsZUFBZTtBQUFBLFFBQzlEO0FBQUEsTUFDRixPQUFPO0FBQ0wsY0FBTSxhQUFhLG1CQUFtQixRQUFRLEdBQUc7QUFBQSxVQUMvQyxRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsVUFDUjtBQUFBLFFBQ0YsQ0FBQztBQUNEO0FBQUEsTUFDRjtBQUNBLFVBQUksbUJBQW1CO0FBQ3JCLGNBQU0sVUFBVTtBQUFBLE1BQ2xCO0FBQUEsSUFDRjtBQUNBLFVBQU0sY0FBYyxTQUFVLGNBQWM7QUFDMUMsVUFBSSxVQUFVLE1BQU0sTUFBTTtBQUMxQixVQUFJLGNBQWMsTUFBTSxNQUFNO0FBQzlCLFVBQUksWUFBWSxNQUFNLGVBQWUsWUFBWTtBQUNqRCxVQUFJLGdCQUFnQixZQUFZLE9BQU8sU0FBVUEsSUFBRztBQUNsRCxlQUFPLE1BQU0sZUFBZUEsRUFBQyxNQUFNO0FBQUEsTUFDckMsQ0FBQztBQUNELFVBQUksV0FBVyxhQUFhLFNBQVMsZUFBZSxjQUFjLENBQUMsS0FBSyxJQUFJO0FBQzVFLFlBQU0sU0FBUyxVQUFVO0FBQUEsUUFDdkIsUUFBUTtBQUFBLFFBQ1I7QUFBQSxNQUNGLENBQUM7QUFDRCxZQUFNLFdBQVc7QUFBQSxJQUNuQjtBQUNBLFVBQU0sYUFBYSxXQUFZO0FBQzdCLFVBQUksY0FBYyxNQUFNLE1BQU07QUFDOUIsWUFBTSxTQUFTLGFBQWEsTUFBTSxNQUFNLFNBQVMsQ0FBQyxHQUFHLElBQUksR0FBRztBQUFBLFFBQzFELFFBQVE7QUFBQSxRQUNSLGVBQWU7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDSDtBQUNBLFVBQU0sV0FBVyxXQUFZO0FBQzNCLFVBQUksVUFBVSxNQUFNLE1BQU07QUFDMUIsVUFBSSxjQUFjLE1BQU0sTUFBTTtBQUM5QixVQUFJLG9CQUFvQixZQUFZLFlBQVksU0FBUyxDQUFDO0FBQzFELFVBQUksZ0JBQWdCLFlBQVksTUFBTSxHQUFHLFlBQVksU0FBUyxDQUFDO0FBQy9ELFVBQUksV0FBVyxhQUFhLFNBQVMsZUFBZSxjQUFjLENBQUMsS0FBSyxJQUFJO0FBQzVFLFVBQUksbUJBQW1CO0FBQ3JCLGNBQU0sU0FBUyxVQUFVO0FBQUEsVUFDdkIsUUFBUTtBQUFBLFVBQ1IsY0FBYztBQUFBLFFBQ2hCLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUNBLFVBQU0scUJBQXFCLFNBQVUsZUFBZTtBQUNsRCxhQUFPLG1CQUFtQixNQUFNLE1BQU0seUJBQXlCLGFBQWE7QUFBQSxJQUM5RTtBQUNBLFVBQU0sNkJBQTZCLFdBQVk7QUFDN0MsYUFBTyw2QkFBNkIsd0JBQXdCLE1BQU0sT0FBTyxNQUFNLE1BQU0sV0FBVyxHQUFHLE1BQU0sYUFBYSxRQUFRLENBQUM7QUFBQSxJQUNqSTtBQUNBLFVBQU0sV0FBVyxXQUFZO0FBQzNCLGFBQU8sTUFBTSxNQUFNO0FBQUEsSUFDckI7QUFDQSxVQUFNLEtBQUssV0FBWTtBQUNyQixlQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDdkYsYUFBSyxJQUFJLElBQUksVUFBVSxJQUFJO0FBQUEsTUFDN0I7QUFDQSxhQUFPLFdBQVcsTUFBTSxRQUFRLENBQUMsTUFBTSxNQUFNLGVBQWUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLElBQzVFO0FBQ0EsVUFBTSxpQkFBaUIsU0FBVSxNQUFNO0FBQ3JDLGFBQU9MLGdCQUFlLE1BQU0sT0FBTyxJQUFJO0FBQUEsSUFDekM7QUFDQSxVQUFNLGlCQUFpQixTQUFVLE1BQU07QUFDckMsYUFBT0MsZ0JBQWUsTUFBTSxPQUFPLElBQUk7QUFBQSxJQUN6QztBQUNBLFVBQU0sWUFBWSxTQUFVLEtBQUssT0FBTztBQUN0QyxVQUFJLFdBQVcsTUFBTSxNQUFNO0FBQzNCLFVBQUksT0FBTyxjQUFjLEdBQUcsRUFBRSxPQUFPLFFBQVE7QUFDN0MsV0FBSyxZQUFZO0FBQ2pCLFVBQUlRLFVBQVMsTUFBTSxNQUFNLE9BQU8sR0FBRztBQUNuQyxhQUFPQSxVQUFTQSxRQUFPLE1BQU0sS0FBSyxJQUFJO0FBQUEsSUFDeEM7QUFDQSxVQUFNLGdCQUFnQixTQUFVLEtBQUssT0FBTztBQUMxQyxVQUFJLHVCQUF1QjtBQUMzQixjQUFRLHlCQUF5Qix5QkFBeUIsTUFBTSxNQUFNLFlBQVksR0FBRyxPQUFPLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0IsS0FBSyx3QkFBd0IsS0FBSztBQUFBLElBQzFNO0FBQ0EsVUFBTSxlQUFlLFNBQVUsU0FBUztBQUN0QyxhQUFPLEdBQUcsT0FBTyxNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxPQUFPLE9BQU87QUFBQSxJQUNsRTtBQUNBLFVBQU0sZ0JBQWdCLFdBQVk7QUFDaEMsYUFBTyxrQkFBa0IsTUFBTSxLQUFLO0FBQUEsSUFDdEM7QUFDQSxVQUFNLDBCQUEwQixXQUFZO0FBQzFDLGFBQU8sd0JBQXdCLE1BQU0sT0FBTyxNQUFNLE1BQU0sV0FBVztBQUFBLElBQ3JFO0FBQ0EsVUFBTSx3QkFBd0IsV0FBWTtBQUN4QyxhQUFPLE1BQU0sTUFBTSxhQUFhLE1BQU0sd0JBQXdCLElBQUksQ0FBQztBQUFBLElBQ3JFO0FBQ0EsVUFBTSx3QkFBd0IsV0FBWTtBQUN4QyxhQUFPLDRDQUE0QyxNQUFNLHdCQUF3QixDQUFDO0FBQUEsSUFDcEY7QUFDQSxVQUFNLHNCQUFzQixXQUFZO0FBQ3RDLGFBQU8sTUFBTSxNQUFNLGFBQWEsTUFBTSxzQkFBc0IsSUFBSSxDQUFDO0FBQUEsSUFDbkU7QUFDQSxVQUFNLGVBQWUsU0FBVSxPQUFPLFlBQVk7QUFDaEQsWUFBTSxTQUFTO0FBQUEsUUFDYixlQUFlLGVBQWM7QUFBQSxVQUMzQjtBQUFBLFFBQ0YsR0FBRyxVQUFVO0FBQUEsTUFDZixDQUFDO0FBQUEsSUFDSDtBQUNBLFVBQU0sa0JBQWtCLFNBQVUsT0FBTztBQUN2QyxVQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCO0FBQUEsTUFDRjtBQUNBLFlBQU0sZ0JBQWdCO0FBQ3RCLFlBQU0sZUFBZTtBQUNyQixZQUFNLFdBQVc7QUFBQSxJQUNuQjtBQUNBLFVBQU0sa0JBQWtCLFNBQVUsT0FBTztBQUN2QyxZQUFNLG1CQUFtQjtBQUFBLElBQzNCO0FBQ0EsVUFBTSxxQkFBcUIsU0FBVSxPQUFPO0FBRTFDLFVBQUksTUFBTSxrQkFBa0I7QUFDMUI7QUFBQSxNQUNGO0FBQ0EsVUFBSSxrQkFBa0IsTUFBTSxNQUFNO0FBQ2xDLFVBQUksQ0FBQyxNQUFNLE1BQU0sV0FBVztBQUMxQixZQUFJLGlCQUFpQjtBQUNuQixnQkFBTSxpQkFBaUI7QUFBQSxRQUN6QjtBQUNBLGNBQU0sV0FBVztBQUFBLE1BQ25CLFdBQVcsQ0FBQyxNQUFNLE1BQU0sWUFBWTtBQUNsQyxZQUFJLGlCQUFpQjtBQUNuQixnQkFBTSxTQUFTLE9BQU87QUFBQSxRQUN4QjtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUksTUFBTSxPQUFPLFlBQVksV0FBVyxNQUFNLE9BQU8sWUFBWSxZQUFZO0FBQzNFLGdCQUFNLFlBQVk7QUFBQSxRQUNwQjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLE1BQU0sT0FBTyxZQUFZLFdBQVcsTUFBTSxPQUFPLFlBQVksWUFBWTtBQUMzRSxjQUFNLGVBQWU7QUFBQSxNQUN2QjtBQUFBLElBQ0Y7QUFDQSxVQUFNLCtCQUErQixTQUFVLE9BQU87QUFFcEQsVUFBSSxTQUFTLE1BQU0sU0FBUyxlQUFlLE1BQU0sV0FBVyxHQUFHO0FBQzdEO0FBQUEsTUFDRjtBQUNBLFVBQUksTUFBTSxNQUFNLFdBQVk7QUFDNUIsVUFBSSxlQUFlLE1BQU0sT0FDdkIsVUFBVSxhQUFhLFNBQ3ZCLGFBQWEsYUFBYTtBQUM1QixZQUFNLFdBQVc7QUFDakIsVUFBSSxZQUFZO0FBQ2QsY0FBTSxTQUFTO0FBQUEsVUFDYiwwQkFBMEIsQ0FBQztBQUFBLFFBQzdCLENBQUM7QUFDRCxjQUFNLFlBQVk7QUFBQSxNQUNwQixPQUFPO0FBQ0wsY0FBTSxTQUFTLE9BQU87QUFBQSxNQUN4QjtBQUNBLFlBQU0sZUFBZTtBQUFBLElBQ3ZCO0FBQ0EsVUFBTSw0QkFBNEIsU0FBVSxPQUFPO0FBRWpELFVBQUksU0FBUyxNQUFNLFNBQVMsZUFBZSxNQUFNLFdBQVcsR0FBRztBQUM3RDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFdBQVc7QUFDakIsWUFBTSxlQUFlO0FBQ3JCLFlBQU0saUJBQWlCO0FBQ3ZCLFVBQUksTUFBTSxTQUFTLFlBQVk7QUFDN0IsY0FBTSxXQUFXO0FBQUEsTUFDbkIsT0FBTztBQUNMLG1CQUFXLFdBQVk7QUFDckIsaUJBQU8sTUFBTSxXQUFXO0FBQUEsUUFDMUIsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFXLFNBQVUsT0FBTztBQUNoQyxVQUFJLE9BQU8sTUFBTSxNQUFNLHNCQUFzQixXQUFXO0FBQ3RELFlBQUksTUFBTSxrQkFBa0IsZUFBZSxrQkFBa0IsTUFBTSxNQUFNLEdBQUc7QUFDMUUsZ0JBQU0sTUFBTSxZQUFZO0FBQUEsUUFDMUI7QUFBQSxNQUNGLFdBQVcsT0FBTyxNQUFNLE1BQU0sc0JBQXNCLFlBQVk7QUFDOUQsWUFBSSxNQUFNLE1BQU0sa0JBQWtCLEtBQUssR0FBRztBQUN4QyxnQkFBTSxNQUFNLFlBQVk7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsVUFBTSxxQkFBcUIsV0FBWTtBQUNyQyxZQUFNLGNBQWM7QUFBQSxJQUN0QjtBQUNBLFVBQU0sbUJBQW1CLFdBQVk7QUFDbkMsWUFBTSxjQUFjO0FBQUEsSUFDdEI7QUFDQSxVQUFNLGVBQWUsU0FBVUMsUUFBTztBQUNwQyxVQUFJLFVBQVVBLE9BQU07QUFDcEIsVUFBSSxRQUFRLFdBQVcsUUFBUSxLQUFLLENBQUM7QUFDckMsVUFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLE1BQ0Y7QUFDQSxZQUFNLGdCQUFnQixNQUFNO0FBQzVCLFlBQU0sZ0JBQWdCLE1BQU07QUFDNUIsWUFBTSxpQkFBaUI7QUFBQSxJQUN6QjtBQUNBLFVBQU0sY0FBYyxTQUFVLE9BQU87QUFDbkMsVUFBSSxVQUFVLE1BQU07QUFDcEIsVUFBSSxRQUFRLFdBQVcsUUFBUSxLQUFLLENBQUM7QUFDckMsVUFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLFNBQVMsS0FBSyxJQUFJLE1BQU0sVUFBVSxNQUFNLGFBQWE7QUFDekQsVUFBSSxTQUFTLEtBQUssSUFBSSxNQUFNLFVBQVUsTUFBTSxhQUFhO0FBQ3pELFVBQUksZ0JBQWdCO0FBQ3BCLFlBQU0saUJBQWlCLFNBQVMsaUJBQWlCLFNBQVM7QUFBQSxJQUM1RDtBQUNBLFVBQU0sYUFBYSxTQUFVLE9BQU87QUFDbEMsVUFBSSxNQUFNLGVBQWdCO0FBSzFCLFVBQUksTUFBTSxjQUFjLENBQUMsTUFBTSxXQUFXLFNBQVMsTUFBTSxNQUFNLEtBQUssTUFBTSxlQUFlLENBQUMsTUFBTSxZQUFZLFNBQVMsTUFBTSxNQUFNLEdBQUc7QUFDbEksY0FBTSxVQUFVO0FBQUEsTUFDbEI7QUFHQSxZQUFNLGdCQUFnQjtBQUN0QixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQ0EsVUFBTSxvQkFBb0IsU0FBVSxPQUFPO0FBQ3pDLFVBQUksTUFBTSxlQUFnQjtBQUMxQixZQUFNLG1CQUFtQixLQUFLO0FBQUEsSUFDaEM7QUFDQSxVQUFNLDJCQUEyQixTQUFVLE9BQU87QUFDaEQsVUFBSSxNQUFNLGVBQWdCO0FBQzFCLFlBQU0sMEJBQTBCLEtBQUs7QUFBQSxJQUN2QztBQUNBLFVBQU0sOEJBQThCLFNBQVUsT0FBTztBQUNuRCxVQUFJLE1BQU0sZUFBZ0I7QUFDMUIsWUFBTSw2QkFBNkIsS0FBSztBQUFBLElBQzFDO0FBQ0EsVUFBTSxvQkFBb0IsU0FBVSxPQUFPO0FBQ3pDLFVBQUksaUJBQWlCLE1BQU0sTUFBTTtBQUNqQyxVQUFJLGFBQWEsTUFBTSxjQUFjO0FBQ3JDLFlBQU0sU0FBUztBQUFBLFFBQ2IsMEJBQTBCO0FBQUEsTUFDNUIsQ0FBQztBQUNELFlBQU0sY0FBYyxZQUFZO0FBQUEsUUFDOUIsUUFBUTtBQUFBLFFBQ1I7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLENBQUMsTUFBTSxNQUFNLFlBQVk7QUFDM0IsY0FBTSxXQUFXO0FBQUEsTUFDbkI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxlQUFlLFNBQVUsT0FBTztBQUNwQyxVQUFJLE1BQU0sTUFBTSxTQUFTO0FBQ3ZCLGNBQU0sTUFBTSxRQUFRLEtBQUs7QUFBQSxNQUMzQjtBQUNBLFlBQU0sU0FBUztBQUFBLFFBQ2IsMEJBQTBCO0FBQUEsUUFDMUIsV0FBVztBQUFBLE1BQ2IsQ0FBQztBQUNELFVBQUksTUFBTSxrQkFBa0IsTUFBTSxNQUFNLGlCQUFpQjtBQUN2RCxjQUFNLFNBQVMsT0FBTztBQUFBLE1BQ3hCO0FBQ0EsWUFBTSxpQkFBaUI7QUFBQSxJQUN6QjtBQUNBLFVBQU0sY0FBYyxTQUFVLE9BQU87QUFDbkMsVUFBSSxpQkFBaUIsTUFBTSxNQUFNO0FBQ2pDLFVBQUksTUFBTSxlQUFlLE1BQU0sWUFBWSxTQUFTLFNBQVMsYUFBYSxHQUFHO0FBQzNFLGNBQU0sU0FBUyxNQUFNO0FBQ3JCO0FBQUEsTUFDRjtBQUNBLFVBQUksTUFBTSxNQUFNLFFBQVE7QUFDdEIsY0FBTSxNQUFNLE9BQU8sS0FBSztBQUFBLE1BQzFCO0FBQ0EsWUFBTSxjQUFjLElBQUk7QUFBQSxRQUN0QixRQUFRO0FBQUEsUUFDUjtBQUFBLE1BQ0YsQ0FBQztBQUNELFlBQU0sWUFBWTtBQUNsQixZQUFNLFNBQVM7QUFBQSxRQUNiLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxNQUNiLENBQUM7QUFBQSxJQUNIO0FBQ0EsVUFBTSxnQkFBZ0IsU0FBVSxlQUFlO0FBQzdDLFVBQUksTUFBTSxvQkFBb0IsTUFBTSxNQUFNLGtCQUFrQixlQUFlO0FBQ3pFO0FBQUEsTUFDRjtBQUNBLFVBQUlQLFdBQVUsTUFBTSxvQkFBb0I7QUFDeEMsVUFBSSxxQkFBcUJBLFNBQVEsUUFBUSxhQUFhO0FBQ3RELFlBQU0sU0FBUztBQUFBLFFBQ2I7QUFBQSxRQUNBLGlCQUFpQixxQkFBcUIsS0FBSyxNQUFNLG1CQUFtQixhQUFhLElBQUk7QUFBQSxNQUN2RixDQUFDO0FBQUEsSUFDSDtBQUNBLFVBQU0sNEJBQTRCLFdBQVk7QUFDNUMsYUFBTywwQkFBMEIsTUFBTSxLQUFLO0FBQUEsSUFDOUM7QUFDQSxVQUFNLG9CQUFvQixTQUFVUSxJQUFHO0FBQ3JDLE1BQUFBLEdBQUUsZUFBZTtBQUNqQixNQUFBQSxHQUFFLGdCQUFnQjtBQUNsQixZQUFNLE1BQU07QUFBQSxJQUNkO0FBQ0EsVUFBTSxZQUFZLFNBQVUsT0FBTztBQUNqQyxVQUFJLGVBQWUsTUFBTSxPQUN2QixVQUFVLGFBQWEsU0FDdkIsd0JBQXdCLGFBQWEsdUJBQ3JDLG9CQUFvQixhQUFhLG1CQUNqQyxhQUFhLGFBQWEsWUFDMUIsY0FBYyxhQUFhLGFBQzNCLGFBQWEsYUFBYSxZQUMxQixhQUFhLGFBQWEsWUFDMUIsWUFBWSxhQUFhLFdBQ3pCLGtCQUFrQixhQUFhLGlCQUMvQixrQkFBa0IsYUFBYTtBQUNqQyxVQUFJLGNBQWMsTUFBTSxPQUN0QixnQkFBZ0IsWUFBWSxlQUM1QixlQUFlLFlBQVksY0FDM0IsY0FBYyxZQUFZO0FBQzVCLFVBQUksV0FBWTtBQUNoQixVQUFJLE9BQU8sY0FBYyxZQUFZO0FBQ25DLGtCQUFVLEtBQUs7QUFDZixZQUFJLE1BQU0sa0JBQWtCO0FBQzFCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFHQSxZQUFNLG1CQUFtQjtBQUN6QixjQUFRLE1BQU0sS0FBSztBQUFBLFFBQ2pCLEtBQUs7QUFDSCxjQUFJLENBQUMsV0FBVyxXQUFZO0FBQzVCLGdCQUFNLFdBQVcsVUFBVTtBQUMzQjtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksQ0FBQyxXQUFXLFdBQVk7QUFDNUIsZ0JBQU0sV0FBVyxNQUFNO0FBQ3ZCO0FBQUEsUUFDRixLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsY0FBSSxXQUFZO0FBQ2hCLGNBQUksY0FBYztBQUNoQixrQkFBTSxZQUFZLFlBQVk7QUFBQSxVQUNoQyxPQUFPO0FBQ0wsZ0JBQUksQ0FBQyxzQkFBdUI7QUFDNUIsZ0JBQUksU0FBUztBQUNYLG9CQUFNLFNBQVM7QUFBQSxZQUNqQixXQUFXLGFBQWE7QUFDdEIsb0JBQU0sV0FBVztBQUFBLFlBQ25CO0FBQUEsVUFDRjtBQUNBO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxNQUFNLFlBQWE7QUFDdkIsY0FBSSxNQUFNLFlBQVksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUM7QUFBQTtBQUFBLFVBRzFELG1CQUFtQixNQUFNLGlCQUFpQixlQUFlLFdBQVcsR0FBRztBQUNyRTtBQUFBLFVBQ0Y7QUFDQSxnQkFBTSxhQUFhLGFBQWE7QUFDaEM7QUFBQSxRQUNGLEtBQUs7QUFDSCxjQUFJLE1BQU0sWUFBWSxLQUFLO0FBR3pCO0FBQUEsVUFDRjtBQUNBLGNBQUksWUFBWTtBQUNkLGdCQUFJLENBQUMsY0FBZTtBQUNwQixnQkFBSSxNQUFNLFlBQWE7QUFDdkIsa0JBQU0sYUFBYSxhQUFhO0FBQ2hDO0FBQUEsVUFDRjtBQUNBO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxZQUFZO0FBQ2Qsa0JBQU0sU0FBUztBQUFBLGNBQ2IsMEJBQTBCO0FBQUEsWUFDNUIsQ0FBQztBQUNELGtCQUFNLGNBQWMsSUFBSTtBQUFBLGNBQ3RCLFFBQVE7QUFBQSxjQUNSLGdCQUFnQjtBQUFBLFlBQ2xCLENBQUM7QUFDRCxrQkFBTSxZQUFZO0FBQUEsVUFDcEIsV0FBVyxlQUFlLG1CQUFtQjtBQUMzQyxrQkFBTSxXQUFXO0FBQUEsVUFDbkI7QUFDQTtBQUFBLFFBQ0YsS0FBSztBQUVILGNBQUksWUFBWTtBQUNkO0FBQUEsVUFDRjtBQUNBLGNBQUksQ0FBQyxZQUFZO0FBQ2Ysa0JBQU0sU0FBUyxPQUFPO0FBQ3RCO0FBQUEsVUFDRjtBQUNBLGNBQUksQ0FBQyxjQUFlO0FBQ3BCLGdCQUFNLGFBQWEsYUFBYTtBQUNoQztBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksWUFBWTtBQUNkLGtCQUFNLFlBQVksSUFBSTtBQUFBLFVBQ3hCLE9BQU87QUFDTCxrQkFBTSxTQUFTLE1BQU07QUFBQSxVQUN2QjtBQUNBO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxZQUFZO0FBQ2Qsa0JBQU0sWUFBWSxNQUFNO0FBQUEsVUFDMUIsT0FBTztBQUNMLGtCQUFNLFNBQVMsT0FBTztBQUFBLFVBQ3hCO0FBQ0E7QUFBQSxRQUNGLEtBQUs7QUFDSCxjQUFJLENBQUMsV0FBWTtBQUNqQixnQkFBTSxZQUFZLFFBQVE7QUFDMUI7QUFBQSxRQUNGLEtBQUs7QUFDSCxjQUFJLENBQUMsV0FBWTtBQUNqQixnQkFBTSxZQUFZLFVBQVU7QUFDNUI7QUFBQSxRQUNGLEtBQUs7QUFDSCxjQUFJLENBQUMsV0FBWTtBQUNqQixnQkFBTSxZQUFZLE9BQU87QUFDekI7QUFBQSxRQUNGLEtBQUs7QUFDSCxjQUFJLENBQUMsV0FBWTtBQUNqQixnQkFBTSxZQUFZLE1BQU07QUFDeEI7QUFBQSxRQUNGO0FBQ0U7QUFBQSxNQUNKO0FBQ0EsWUFBTSxlQUFlO0FBQUEsSUFDdkI7QUFDQSxVQUFNLE1BQU0saUJBQWlCLG1CQUFtQixNQUFNLE1BQU0sY0FBYyxFQUFFO0FBQzVFLFVBQU0sTUFBTSxjQUFjLFdBQVcsT0FBTyxLQUFLO0FBRWpELFFBQUksT0FBTyxjQUFjLE1BQU0sTUFBTSxZQUFZLFFBQVE7QUFDdkQsVUFBSSwwQkFBMEIsTUFBTSwyQkFBMkI7QUFDL0QsVUFBSSxtQkFBbUIsTUFBTSxzQkFBc0I7QUFDbkQsVUFBSSxjQUFjLGlCQUFpQixRQUFRLE1BQU0sTUFBTSxZQUFZLENBQUMsQ0FBQztBQUNyRSxZQUFNLE1BQU0sMEJBQTBCO0FBQ3RDLFlBQU0sTUFBTSxnQkFBZ0IsaUJBQWlCLFdBQVc7QUFDeEQsWUFBTSxNQUFNLGtCQUFrQixtQkFBbUIseUJBQXlCLGlCQUFpQixXQUFXLENBQUM7QUFBQSxJQUN6RztBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0EsZUFBYUosU0FBUSxDQUFDO0FBQUEsSUFDcEIsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLG9CQUFvQjtBQUNsQyxXQUFLLDBCQUEwQjtBQUMvQixXQUFLLHNCQUFzQjtBQUMzQixVQUFJLEtBQUssTUFBTSxxQkFBcUIsWUFBWSxTQUFTLGtCQUFrQjtBQUV6RSxpQkFBUyxpQkFBaUIsVUFBVSxLQUFLLFVBQVUsSUFBSTtBQUFBLE1BQ3pEO0FBQ0EsVUFBSSxLQUFLLE1BQU0sV0FBVztBQUN4QixhQUFLLFdBQVc7QUFBQSxNQUNsQjtBQUdBLFVBQUksS0FBSyxNQUFNLGNBQWMsS0FBSyxNQUFNLGlCQUFpQixLQUFLLGVBQWUsS0FBSyxrQkFBa0I7QUFDbEcsdUJBQWUsS0FBSyxhQUFhLEtBQUssZ0JBQWdCO0FBQUEsTUFDeEQ7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsbUJBQW1CLFdBQVc7QUFDNUMsVUFBSSxlQUFlLEtBQUssT0FDdEIsYUFBYSxhQUFhLFlBQzFCLGFBQWEsYUFBYTtBQUM1QixVQUFJLFlBQVksS0FBSyxNQUFNO0FBQzNCO0FBQUE7QUFBQSxRQUVBLGFBQWEsQ0FBQyxjQUFjLFVBQVU7QUFBQSxRQUV0QyxhQUFhLGNBQWMsQ0FBQyxVQUFVO0FBQUEsUUFBWTtBQUNoRCxhQUFLLFdBQVc7QUFBQSxNQUNsQjtBQUNBLFVBQUksYUFBYSxjQUFjLENBQUMsVUFBVSxZQUFZO0FBR3BELGFBQUssU0FBUztBQUFBLFVBQ1osV0FBVztBQUFBLFFBQ2IsR0FBRyxLQUFLLFdBQVc7QUFBQSxNQUNyQixXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsVUFBVSxjQUFjLEtBQUssYUFBYSxTQUFTLGVBQWU7QUFHeEcsYUFBSyxTQUFTO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFDYixDQUFDO0FBQUEsTUFDSDtBQUdBLFVBQUksS0FBSyxlQUFlLEtBQUssb0JBQW9CLEtBQUssK0JBQStCO0FBQ25GLHVCQUFlLEtBQUssYUFBYSxLQUFLLGdCQUFnQjtBQUN0RCxhQUFLLGdDQUFnQztBQUFBLE1BQ3ZDO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLHVCQUF1QjtBQUNyQyxXQUFLLHlCQUF5QjtBQUM5QixXQUFLLHFCQUFxQjtBQUMxQixlQUFTLG9CQUFvQixVQUFVLEtBQUssVUFBVSxJQUFJO0FBQUEsSUFDNUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxhQUFhO0FBQzNCLFdBQUssTUFBTSxXQUFXO0FBQUEsSUFDeEI7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxjQUFjO0FBQzVCLFdBQUssY0FBYyxJQUFJO0FBQUEsUUFDckIsUUFBUTtBQUFBLFFBQ1IsZ0JBQWdCLEtBQUssTUFBTTtBQUFBLE1BQzdCLENBQUM7QUFDRCxXQUFLLE1BQU0sWUFBWTtBQUFBLElBQ3pCO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsY0FBYyxVQUFVLFlBQVk7QUFDbEQsV0FBSyxNQUFNLGNBQWMsVUFBVSxVQUFVO0FBQUEsSUFDL0M7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxhQUFhO0FBQzNCLFVBQUksQ0FBQyxLQUFLLFNBQVU7QUFDcEIsV0FBSyxTQUFTLE1BQU07QUFBQSxJQUN0QjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLFlBQVk7QUFDMUIsVUFBSSxDQUFDLEtBQUssU0FBVTtBQUNwQixXQUFLLFNBQVMsS0FBSztBQUFBLElBQ3JCO0FBQUE7QUFBQSxFQUdGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxTQUFTLGFBQWE7QUFDcEMsVUFBSSxTQUFTO0FBQ2IsVUFBSSxlQUFlLEtBQUssT0FDdEIsY0FBYyxhQUFhLGFBQzNCLFlBQVksYUFBYTtBQUMzQixVQUFJLG1CQUFtQixLQUFLLHNCQUFzQjtBQUNsRCxVQUFJLGNBQWMsZ0JBQWdCLFVBQVUsSUFBSSxpQkFBaUIsU0FBUztBQUMxRSxVQUFJLENBQUMsS0FBSyxNQUFNLFNBQVM7QUFDdkIsWUFBSSxnQkFBZ0IsaUJBQWlCLFFBQVEsWUFBWSxDQUFDLENBQUM7QUFDM0QsWUFBSSxnQkFBZ0IsSUFBSTtBQUN0Qix3QkFBYztBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUdBLFdBQUssZ0NBQWdDLEVBQUUsYUFBYSxLQUFLO0FBQ3pELFdBQUssU0FBUztBQUFBLFFBQ1osMEJBQTBCO0FBQUEsUUFDMUIsY0FBYztBQUFBLFFBQ2QsZUFBZSxpQkFBaUIsV0FBVztBQUFBLFFBQzNDLGlCQUFpQixLQUFLLG1CQUFtQixpQkFBaUIsV0FBVyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxXQUFZO0FBQ2IsZUFBTyxPQUFPLFdBQVc7QUFBQSxNQUMzQixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLFdBQVcsV0FBVztBQUNwQyxVQUFJLGVBQWUsS0FBSyxPQUN0QixjQUFjLGFBQWEsYUFDM0IsZUFBZSxhQUFhO0FBRzlCLFVBQUksQ0FBQyxLQUFLLE1BQU0sUUFBUztBQUN6QixXQUFLLFNBQVM7QUFBQSxRQUNaLGVBQWU7QUFBQSxNQUNqQixDQUFDO0FBQ0QsVUFBSSxlQUFlLFlBQVksUUFBUSxZQUFZO0FBQ25ELFVBQUksQ0FBQyxjQUFjO0FBQ2pCLHVCQUFlO0FBQUEsTUFDakI7QUFDQSxVQUFJLFlBQVksWUFBWSxTQUFTO0FBQ3JDLFVBQUksWUFBWTtBQUNoQixVQUFJLENBQUMsWUFBWSxPQUFRO0FBQ3pCLGNBQVEsV0FBVztBQUFBLFFBQ2pCLEtBQUs7QUFDSCxjQUFJLGlCQUFpQixHQUFHO0FBRXRCLHdCQUFZO0FBQUEsVUFDZCxXQUFXLGlCQUFpQixJQUFJO0FBRTlCLHdCQUFZO0FBQUEsVUFDZCxPQUFPO0FBQ0wsd0JBQVksZUFBZTtBQUFBLFVBQzdCO0FBQ0E7QUFBQSxRQUNGLEtBQUs7QUFDSCxjQUFJLGVBQWUsTUFBTSxlQUFlLFdBQVc7QUFDakQsd0JBQVksZUFBZTtBQUFBLFVBQzdCO0FBQ0E7QUFBQSxNQUNKO0FBQ0EsV0FBSyxTQUFTO0FBQUEsUUFDWixlQUFlLGNBQWM7QUFBQSxRQUM3QixjQUFjLFlBQVksU0FBUztBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsY0FBYztBQUM1QixVQUFJLFlBQVksVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSTtBQUNwRixVQUFJLFdBQVcsS0FBSyxNQUFNO0FBQzFCLFVBQUksZ0JBQWdCLEtBQUssTUFBTTtBQUMvQixVQUFJSixXQUFVLEtBQUssb0JBQW9CO0FBQ3ZDLFVBQUksQ0FBQ0EsU0FBUSxPQUFRO0FBQ3JCLFVBQUksWUFBWTtBQUNoQixVQUFJLGVBQWVBLFNBQVEsUUFBUSxhQUFhO0FBQ2hELFVBQUksQ0FBQyxlQUFlO0FBQ2xCLHVCQUFlO0FBQUEsTUFDakI7QUFDQSxVQUFJLGNBQWMsTUFBTTtBQUN0QixvQkFBWSxlQUFlLElBQUksZUFBZSxJQUFJQSxTQUFRLFNBQVM7QUFBQSxNQUNyRSxXQUFXLGNBQWMsUUFBUTtBQUMvQixxQkFBYSxlQUFlLEtBQUtBLFNBQVE7QUFBQSxNQUMzQyxXQUFXLGNBQWMsVUFBVTtBQUNqQyxvQkFBWSxlQUFlO0FBQzNCLFlBQUksWUFBWSxFQUFHLGFBQVk7QUFBQSxNQUNqQyxXQUFXLGNBQWMsWUFBWTtBQUNuQyxvQkFBWSxlQUFlO0FBQzNCLFlBQUksWUFBWUEsU0FBUSxTQUFTLEVBQUcsYUFBWUEsU0FBUSxTQUFTO0FBQUEsTUFDbkUsV0FBVyxjQUFjLFFBQVE7QUFDL0Isb0JBQVlBLFNBQVEsU0FBUztBQUFBLE1BQy9CO0FBQ0EsV0FBSyxnQ0FBZ0M7QUFDckMsV0FBSyxTQUFTO0FBQUEsUUFDWixlQUFlQSxTQUFRLFNBQVM7QUFBQSxRQUNoQyxjQUFjO0FBQUEsUUFDZCxpQkFBaUIsS0FBSyxtQkFBbUJBLFNBQVEsU0FBUyxDQUFDO0FBQUEsTUFDN0QsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLQSxTQUFTLFdBQVc7QUFFbEIsWUFBSSxDQUFDLEtBQUssTUFBTSxPQUFPO0FBQ3JCLGlCQUFPO0FBQUEsUUFDVDtBQUlBLFlBQUksT0FBTyxLQUFLLE1BQU0sVUFBVSxZQUFZO0FBQzFDLGlCQUFPLEtBQUssTUFBTSxNQUFNLFlBQVk7QUFBQSxRQUN0QztBQUdBLGVBQU8sZUFBYyxlQUFjLENBQUMsR0FBRyxZQUFZLEdBQUcsS0FBSyxNQUFNLEtBQUs7QUFBQSxNQUN4RTtBQUFBO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsaUJBQWlCO0FBQy9CLFVBQUksYUFBYSxLQUFLLFlBQ3BCLEtBQUssS0FBSyxJQUNWLFlBQVksS0FBSyxXQUNqQixnQkFBZ0IsS0FBSyxlQUNyQixXQUFXLEtBQUssVUFDaEIsZUFBZSxLQUFLLGNBQ3BCLFdBQVcsS0FBSyxVQUNoQixRQUFRLEtBQUs7QUFDZixVQUFJLFVBQVUsTUFBTSxTQUNsQixRQUFRLE1BQU0sT0FDZEEsV0FBVSxNQUFNO0FBQ2xCLFVBQUksV0FBVyxLQUFLLFNBQVM7QUFDN0IsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFTQTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLGFBQWE7QUFBQSxRQUNiO0FBQUEsUUFDQSxPQUFPLEtBQUssU0FBUztBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLFdBQVc7QUFDekIsVUFBSSxjQUFjLEtBQUssTUFBTTtBQUM3QixhQUFPLFlBQVksU0FBUztBQUFBLElBQzlCO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsYUFBYTtBQUMzQixhQUFPLENBQUMsQ0FBQyxLQUFLLG9CQUFvQixFQUFFO0FBQUEsSUFDdEM7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxjQUFjO0FBQzVCLFVBQUksZUFBZSxLQUFLLE9BQ3RCUyxlQUFjLGFBQWEsYUFDM0IsVUFBVSxhQUFhO0FBSXpCLFVBQUlBLGlCQUFnQixPQUFXLFFBQU87QUFDdEMsYUFBT0E7QUFBQSxJQUNUO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVNDLGtCQUFpQixRQUFRLGFBQWE7QUFDcEQsYUFBTyxrQkFBa0IsS0FBSyxPQUFPLFFBQVEsV0FBVztBQUFBLElBQzFEO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsaUJBQWlCLFFBQVEsYUFBYTtBQUNwRCxhQUFPLGtCQUFrQixLQUFLLE9BQU8sUUFBUSxXQUFXO0FBQUEsSUFDMUQ7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyxhQUFhLFFBQVEsWUFBWTtBQUMvQyxhQUFPLGNBQWMsS0FBSyxPQUFPLFFBQVEsVUFBVTtBQUFBLElBQ3JEO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsa0JBQWtCLE1BQU0sU0FBUztBQUMvQyxVQUFJLE9BQU8sS0FBSyxNQUFNLHNCQUFzQixZQUFZO0FBQ3RELFlBQUksY0FBYyxLQUFLLE1BQU07QUFDN0IsWUFBSSxlQUFlLEtBQUssTUFBTTtBQUM5QixlQUFPLEtBQUssTUFBTSxrQkFBa0IsTUFBTTtBQUFBLFVBQ3hDO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWixhQUFhO0FBQUEsUUFDZixDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsZUFBTyxLQUFLLGVBQWUsSUFBSTtBQUFBLE1BQ2pDO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTQyxrQkFBaUIsTUFBTTtBQUNyQyxhQUFPLEtBQUssTUFBTSxpQkFBaUIsSUFBSTtBQUFBLElBQ3pDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS0EsU0FBUyw0QkFBNEI7QUFDbkMsWUFBSSxZQUFZLFNBQVMsa0JBQWtCO0FBQ3pDLG1CQUFTLGlCQUFpQixvQkFBb0IsS0FBSyxvQkFBb0IsS0FBSztBQUM1RSxtQkFBUyxpQkFBaUIsa0JBQWtCLEtBQUssa0JBQWtCLEtBQUs7QUFBQSxRQUMxRTtBQUFBLE1BQ0Y7QUFBQTtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLDJCQUEyQjtBQUN6QyxVQUFJLFlBQVksU0FBUyxxQkFBcUI7QUFDNUMsaUJBQVMsb0JBQW9CLG9CQUFvQixLQUFLLGtCQUFrQjtBQUN4RSxpQkFBUyxvQkFBb0Isa0JBQWtCLEtBQUssZ0JBQWdCO0FBQUEsTUFDdEU7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS0EsU0FBUyx3QkFBd0I7QUFDL0IsWUFBSSxZQUFZLFNBQVMsa0JBQWtCO0FBQ3pDLG1CQUFTLGlCQUFpQixjQUFjLEtBQUssY0FBYyxLQUFLO0FBQ2hFLG1CQUFTLGlCQUFpQixhQUFhLEtBQUssYUFBYSxLQUFLO0FBQzlELG1CQUFTLGlCQUFpQixZQUFZLEtBQUssWUFBWSxLQUFLO0FBQUEsUUFDOUQ7QUFBQSxNQUNGO0FBQUE7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsVUFBSSxZQUFZLFNBQVMscUJBQXFCO0FBQzVDLGlCQUFTLG9CQUFvQixjQUFjLEtBQUssWUFBWTtBQUM1RCxpQkFBUyxvQkFBb0IsYUFBYSxLQUFLLFdBQVc7QUFDMUQsaUJBQVMsb0JBQW9CLFlBQVksS0FBSyxVQUFVO0FBQUEsTUFDMUQ7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTDtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSUEsU0FBUyxjQUFjO0FBQ3JCLFlBQUksZUFBZSxLQUFLLE9BQ3RCLGFBQWEsYUFBYSxZQUMxQixlQUFlLGFBQWEsY0FDNUIsVUFBVSxhQUFhLFNBQ3ZCLGFBQWEsYUFBYSxZQUMxQixXQUFXLGFBQWEsVUFDeEIsT0FBTyxhQUFhLE1BQ3BCLGFBQWEsYUFBYSxZQUMxQixXQUFXLGFBQWE7QUFDMUIsWUFBSSxzQkFBc0IsS0FBSyxjQUFjLEdBQzNDQyxTQUFRLG9CQUFvQjtBQUM5QixZQUFJLGVBQWUsS0FBSyxPQUN0QixnQkFBZ0IsYUFBYSxlQUM3QixnQkFBZ0IsYUFBYTtBQUMvQixZQUFJLGNBQWMsS0FBSztBQUN2QixZQUFJLEtBQUssV0FBVyxLQUFLLGFBQWEsT0FBTztBQUc3QyxZQUFJLGlCQUFpQixlQUFjLGVBQWMsZUFBYztBQUFBLFVBQzdELHFCQUFxQjtBQUFBLFVBQ3JCLGlCQUFpQjtBQUFBLFVBQ2pCLGlCQUFpQjtBQUFBLFVBQ2pCLHFCQUFxQixLQUFLLE1BQU0sbUJBQW1CO0FBQUEsVUFDbkQsZ0JBQWdCLEtBQUssTUFBTSxjQUFjO0FBQUEsVUFDekMsY0FBYyxLQUFLLE1BQU0sWUFBWTtBQUFBLFVBQ3JDLG1CQUFtQixLQUFLLE1BQU0saUJBQWlCO0FBQUEsVUFDL0MsaUJBQWlCO0FBQUEsVUFDakIsTUFBTTtBQUFBLFVBQ04seUJBQXlCLEtBQUssZ0JBQWdCLFNBQVksS0FBSyxNQUFNLG1CQUFtQjtBQUFBLFFBQzFGLEdBQUcsY0FBYztBQUFBLFVBQ2YsaUJBQWlCLEtBQUssYUFBYSxTQUFTO0FBQUEsUUFDOUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO0FBQUEsVUFDbkIsaUJBQWlCO0FBQUEsUUFDbkIsQ0FBQyxHQUFHLEtBQUssU0FBUyxLQUFLLGtCQUFrQixRQUFRLGtCQUFrQixTQUFTLFNBQVMsY0FBYyxZQUFZLHlCQUF5QjtBQUFBLFVBQ3RJLG9CQUFvQixLQUFLLGFBQWEsYUFBYTtBQUFBLFFBQ3JELElBQUk7QUFBQSxVQUNGLG9CQUFvQixLQUFLLGFBQWEsYUFBYTtBQUFBLFFBQ3JELENBQUM7QUFDRCxZQUFJLENBQUMsY0FBYztBQUVqQixpQkFBb0IsZ0JBQU0sRUFBYyxZQUFZLFNBQVM7QUFBQSxZQUMzRDtBQUFBLFlBQ0EsVUFBVSxLQUFLO0FBQUEsWUFDZixRQUFRLEtBQUs7QUFBQSxZQUNiLFVBQVU7QUFBQSxZQUNWLFNBQVMsS0FBSztBQUFBLFlBQ2QsVUFBVTtBQUFBLFlBQ1Y7QUFBQSxZQUNBLFdBQVc7QUFBQSxZQUNYO0FBQUEsWUFDQSxPQUFPO0FBQUEsVUFDVCxHQUFHLGNBQWMsQ0FBQztBQUFBLFFBQ3BCO0FBQ0EsZUFBb0IsZ0JBQU0sRUFBY0EsUUFBTyxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsVUFDdkUsZ0JBQWdCO0FBQUEsVUFDaEIsY0FBYztBQUFBLFVBQ2QsYUFBYTtBQUFBLFVBQ2I7QUFBQSxVQUNBLFVBQVUsS0FBSztBQUFBLFVBQ2Y7QUFBQSxVQUNBLFVBQVU7QUFBQSxVQUNWLFFBQVEsS0FBSztBQUFBLFVBQ2IsVUFBVSxLQUFLO0FBQUEsVUFDZixTQUFTLEtBQUs7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaO0FBQUEsVUFDQTtBQUFBLFVBQ0EsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFFBQ1QsR0FBRyxjQUFjLENBQUM7QUFBQSxNQUNwQjtBQUFBO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsMkJBQTJCO0FBQ3pDLFVBQUksU0FBUztBQUNiLFVBQUksdUJBQXVCLEtBQUssY0FBYyxHQUM1Q0MsY0FBYSxxQkFBcUIsWUFDbENDLHVCQUFzQixxQkFBcUIscUJBQzNDQyxtQkFBa0IscUJBQXFCLGlCQUN2Q0Msb0JBQW1CLHFCQUFxQixrQkFDeENDLGVBQWMscUJBQXFCLGFBQ25DQyxlQUFjLHFCQUFxQjtBQUNyQyxVQUFJLGNBQWMsS0FBSztBQUN2QixVQUFJLGVBQWUsS0FBSyxPQUN0QiwyQkFBMkIsYUFBYSwwQkFDeEMsYUFBYSxhQUFhLFlBQzFCLFVBQVUsYUFBYSxTQUN2QixhQUFhLGFBQWEsWUFDMUIsY0FBYyxhQUFhO0FBQzdCLFVBQUksZUFBZSxLQUFLLE9BQ3RCLGNBQWMsYUFBYSxhQUMzQixlQUFlLGFBQWEsY0FDNUIsWUFBWSxhQUFhO0FBQzNCLFVBQUksQ0FBQyxLQUFLLFNBQVMsS0FBSyxDQUFDLDBCQUEwQjtBQUNqRCxlQUFPLGFBQWEsT0FBb0IsZ0JBQU0sRUFBY0EsY0FBYSxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsVUFDakcsS0FBSztBQUFBLFVBQ0w7QUFBQSxVQUNBO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDVixJQUFJLEtBQUssYUFBYSxhQUFhO0FBQUEsVUFDckM7QUFBQSxRQUNGLENBQUMsR0FBRyxXQUFXO0FBQUEsTUFDakI7QUFDQSxVQUFJLFNBQVM7QUFDWCxlQUFPLFlBQVksSUFBSSxTQUFVLEtBQUssT0FBTztBQUMzQyxjQUFJLGtCQUFrQixRQUFRO0FBQzlCLGNBQUksTUFBTSxHQUFHLE9BQU8sT0FBTyxlQUFlLEdBQUcsR0FBRyxHQUFHLEVBQUUsT0FBTyxPQUFPLGVBQWUsR0FBRyxDQUFDO0FBQ3RGLGlCQUFvQixnQkFBTSxFQUFjTCxhQUFZLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxZQUM1RSxZQUFZO0FBQUEsY0FDVixXQUFXQztBQUFBLGNBQ1gsT0FBT0M7QUFBQSxjQUNQLFFBQVFDO0FBQUEsWUFDVjtBQUFBLFlBQ0EsV0FBVztBQUFBLFlBQ1g7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsYUFBYTtBQUFBLGNBQ1gsU0FBUyxTQUFTLFVBQVU7QUFDMUIsdUJBQU8sT0FBTyxZQUFZLEdBQUc7QUFBQSxjQUMvQjtBQUFBLGNBQ0EsWUFBWSxTQUFTLGFBQWE7QUFDaEMsdUJBQU8sT0FBTyxZQUFZLEdBQUc7QUFBQSxjQUMvQjtBQUFBLGNBQ0EsYUFBYSxTQUFTLFlBQVlSLElBQUc7QUFDbkMsZ0JBQUFBLEdBQUUsZUFBZTtBQUFBLGNBQ25CO0FBQUEsWUFDRjtBQUFBLFlBQ0EsTUFBTTtBQUFBLFVBQ1IsQ0FBQyxHQUFHLE9BQU8sa0JBQWtCLEtBQUssT0FBTyxDQUFDO0FBQUEsUUFDNUMsQ0FBQztBQUFBLE1BQ0g7QUFDQSxVQUFJLFlBQVk7QUFDZCxlQUFPO0FBQUEsTUFDVDtBQUNBLFVBQUksY0FBYyxZQUFZLENBQUM7QUFDL0IsYUFBb0IsZ0JBQU0sRUFBY1MsY0FBYSxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsUUFDN0UsTUFBTTtBQUFBLFFBQ047QUFBQSxNQUNGLENBQUMsR0FBRyxLQUFLLGtCQUFrQixhQUFhLE9BQU8sQ0FBQztBQUFBLElBQ2xEO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsdUJBQXVCO0FBQ3JDLFVBQUksdUJBQXVCLEtBQUssY0FBYyxHQUM1Q0Usa0JBQWlCLHFCQUFxQjtBQUN4QyxVQUFJLGNBQWMsS0FBSztBQUN2QixVQUFJLGdCQUFnQixLQUFLLE9BQ3ZCLGFBQWEsY0FBYyxZQUMzQixZQUFZLGNBQWM7QUFDNUIsVUFBSSxZQUFZLEtBQUssTUFBTTtBQUMzQixVQUFJLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQ0EsbUJBQWtCLGNBQWMsQ0FBQyxLQUFLLFNBQVMsS0FBSyxXQUFXO0FBQ3pGLGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSSxhQUFhO0FBQUEsUUFDZixhQUFhLEtBQUs7QUFBQSxRQUNsQixZQUFZLEtBQUs7QUFBQSxRQUNqQixlQUFlO0FBQUEsTUFDakI7QUFDQSxhQUFvQixnQkFBTSxFQUFjQSxpQkFBZ0IsU0FBUyxDQUFDLEdBQUcsYUFBYTtBQUFBLFFBQ2hGO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQyxDQUFDO0FBQUEsSUFDSjtBQUFBLEVBQ0YsR0FBRztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsT0FBTyxTQUFTLHlCQUF5QjtBQUN2QyxVQUFJLHVCQUF1QixLQUFLLGNBQWMsR0FDNUNDLG9CQUFtQixxQkFBcUI7QUFDMUMsVUFBSSxjQUFjLEtBQUs7QUFDdkIsVUFBSSxnQkFBZ0IsS0FBSyxPQUN2QixhQUFhLGNBQWMsWUFDM0IsWUFBWSxjQUFjO0FBQzVCLFVBQUksWUFBWSxLQUFLLE1BQU07QUFDM0IsVUFBSSxDQUFDQSxxQkFBb0IsQ0FBQyxVQUFXLFFBQU87QUFDNUMsVUFBSSxhQUFhO0FBQUEsUUFDZixlQUFlO0FBQUEsTUFDakI7QUFDQSxhQUFvQixnQkFBTSxFQUFjQSxtQkFBa0IsU0FBUyxDQUFDLEdBQUcsYUFBYTtBQUFBLFFBQ2xGO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUywyQkFBMkI7QUFDekMsVUFBSSx1QkFBdUIsS0FBSyxjQUFjLEdBQzVDQyxxQkFBb0IscUJBQXFCLG1CQUN6Q0Msc0JBQXFCLHFCQUFxQjtBQUc1QyxVQUFJLENBQUNELHNCQUFxQixDQUFDQyxvQkFBb0IsUUFBTztBQUN0RCxVQUFJLGNBQWMsS0FBSztBQUN2QixVQUFJLGFBQWEsS0FBSyxNQUFNO0FBQzVCLFVBQUksWUFBWSxLQUFLLE1BQU07QUFDM0IsYUFBb0IsZ0JBQU0sRUFBY0EscUJBQW9CLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUNwRjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUywwQkFBMEI7QUFDeEMsVUFBSSx1QkFBdUIsS0FBSyxjQUFjLEdBQzVDRCxxQkFBb0IscUJBQXFCO0FBQzNDLFVBQUksQ0FBQ0EsbUJBQW1CLFFBQU87QUFDL0IsVUFBSSxjQUFjLEtBQUs7QUFDdkIsVUFBSSxhQUFhLEtBQUssTUFBTTtBQUM1QixVQUFJLFlBQVksS0FBSyxNQUFNO0FBQzNCLFVBQUksYUFBYTtBQUFBLFFBQ2YsYUFBYSxLQUFLO0FBQUEsUUFDbEIsWUFBWSxLQUFLO0FBQUEsUUFDakIsZUFBZTtBQUFBLE1BQ2pCO0FBQ0EsYUFBb0IsZ0JBQU0sRUFBY0Esb0JBQW1CLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUNuRjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDLENBQUM7QUFBQSxJQUNKO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsYUFBYTtBQUMzQixVQUFJLFNBQVM7QUFDYixVQUFJLHVCQUF1QixLQUFLLGNBQWMsR0FDNUNFLFNBQVEscUJBQXFCLE9BQzdCQyxnQkFBZSxxQkFBcUIsY0FDcENDLFFBQU8scUJBQXFCLE1BQzVCQyxZQUFXLHFCQUFxQixVQUNoQ0MsY0FBYSxxQkFBcUIsWUFDbENDLGtCQUFpQixxQkFBcUIsZ0JBQ3RDQyxvQkFBbUIscUJBQXFCLGtCQUN4Q0MsVUFBUyxxQkFBcUI7QUFDaEMsVUFBSSxjQUFjLEtBQUs7QUFDdkIsVUFBSSxnQkFBZ0IsS0FBSyxNQUFNO0FBQy9CLFVBQUksZ0JBQWdCLEtBQUssT0FDdkIsb0JBQW9CLGNBQWMsbUJBQ2xDLGFBQWEsY0FBYyxZQUMzQixZQUFZLGNBQWMsV0FDMUJDLGtCQUFpQixjQUFjLGdCQUMvQixnQkFBZ0IsY0FBYyxlQUM5QixnQkFBZ0IsY0FBYyxlQUM5QixhQUFhLGNBQWMsWUFDM0IsZ0JBQWdCLGNBQWMsZUFDOUIsZUFBZSxjQUFjLGNBQzdCLG1CQUFtQixjQUFjLGtCQUNqQyx3QkFBd0IsY0FBYyx1QkFDdEMsMkJBQTJCLGNBQWMsMEJBQ3pDQyxvQkFBbUIsY0FBYyxrQkFDakMsb0JBQW9CLGNBQWMsbUJBQ2xDLHVCQUF1QixjQUFjO0FBQ3ZDLFVBQUksQ0FBQyxXQUFZLFFBQU87QUFHeEIsVUFBSUMsVUFBUyxTQUFTQSxRQUFPLE9BQU8sSUFBSTtBQUN0QyxZQUFJLE9BQU8sTUFBTSxNQUNmLE9BQU8sTUFBTSxNQUNiLGFBQWEsTUFBTSxZQUNuQixhQUFhLE1BQU0sWUFDbkIsUUFBUSxNQUFNLE9BQ2QsUUFBUSxNQUFNO0FBQ2hCLFlBQUksWUFBWSxrQkFBa0I7QUFDbEMsWUFBSSxVQUFVLGFBQWEsU0FBWSxXQUFZO0FBQ2pELGlCQUFPLE9BQU8sY0FBYyxJQUFJO0FBQUEsUUFDbEM7QUFDQSxZQUFJLFdBQVcsYUFBYSxTQUFZLFdBQVk7QUFDbEQsaUJBQU8sT0FBTyxhQUFhLElBQUk7QUFBQSxRQUNqQztBQUNBLFlBQUksV0FBVyxHQUFHLE9BQU8sT0FBTyxhQUFhLFFBQVEsR0FBRyxHQUFHLEVBQUUsT0FBTyxFQUFFO0FBQ3RFLFlBQUksYUFBYTtBQUFBLFVBQ2YsSUFBSTtBQUFBLFVBQ0osU0FBUztBQUFBLFVBQ1QsYUFBYTtBQUFBLFVBQ2IsYUFBYTtBQUFBLFVBQ2IsVUFBVTtBQUFBLFVBQ1YsTUFBTTtBQUFBLFVBQ04saUJBQWlCLE9BQU8sZ0JBQWdCLFNBQVk7QUFBQTtBQUFBLFFBQ3REO0FBRUEsZUFBb0IsZ0JBQU0sRUFBY0gsU0FBUSxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsVUFDeEU7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLEtBQUs7QUFBQSxVQUNMO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxVQUFVLFlBQVksT0FBTyxzQkFBc0I7QUFBQSxRQUNyRCxDQUFDLEdBQUcsT0FBTyxrQkFBa0IsTUFBTSxNQUFNLE1BQU0sQ0FBQztBQUFBLE1BQ2xEO0FBQ0EsVUFBSTtBQUNKLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsaUJBQVMsS0FBSyxzQkFBc0IsRUFBRSxJQUFJLFNBQVUsTUFBTTtBQUN4RCxjQUFJLEtBQUssU0FBUyxTQUFTO0FBQ3pCLGdCQUFJLFFBQVEsS0FBSyxNQUNmOUIsV0FBVSxLQUFLLFNBQ2YsYUFBYSxLQUFLO0FBQ3BCLGdCQUFJLFVBQVUsR0FBRyxPQUFPLE9BQU8sYUFBYSxPQUFPLEdBQUcsR0FBRyxFQUFFLE9BQU8sVUFBVTtBQUM1RSxnQkFBSSxZQUFZLEdBQUcsT0FBTyxTQUFTLFVBQVU7QUFDN0MsbUJBQW9CLGdCQUFNLEVBQWN1QixRQUFPLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxjQUN2RSxLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixTQUFTdkI7QUFBQSxjQUNULFNBQVN3QjtBQUFBLGNBQ1QsY0FBYztBQUFBLGdCQUNaLElBQUk7QUFBQSxnQkFDSixNQUFNLEtBQUs7QUFBQSxjQUNiO0FBQUEsY0FDQSxPQUFPLE9BQU8saUJBQWlCLEtBQUssSUFBSTtBQUFBLFlBQzFDLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxTQUFVLFFBQVE7QUFDckMscUJBQU9TLFFBQU8sUUFBUSxHQUFHLE9BQU8sWUFBWSxHQUFHLEVBQUUsT0FBTyxPQUFPLEtBQUssQ0FBQztBQUFBLFlBQ3ZFLENBQUMsQ0FBQztBQUFBLFVBQ0osV0FBVyxLQUFLLFNBQVMsVUFBVTtBQUNqQyxtQkFBT0EsUUFBTyxNQUFNLEdBQUcsT0FBTyxLQUFLLEtBQUssQ0FBQztBQUFBLFVBQzNDO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxXQUFXLFdBQVc7QUFDcEIsWUFBSSxVQUFVRixnQkFBZTtBQUFBLFVBQzNCO0FBQUEsUUFDRixDQUFDO0FBQ0QsWUFBSSxZQUFZLEtBQU0sUUFBTztBQUM3QixpQkFBc0IsZ0JBQU0sRUFBY0gsaUJBQWdCLGFBQWEsT0FBTztBQUFBLE1BQ2hGLE9BQU87QUFDTCxZQUFJLFdBQVdJLGtCQUFpQjtBQUFBLFVBQzlCO0FBQUEsUUFDRixDQUFDO0FBQ0QsWUFBSSxhQUFhLEtBQU0sUUFBTztBQUM5QixpQkFBc0IsZ0JBQU0sRUFBY0gsbUJBQWtCLGFBQWEsUUFBUTtBQUFBLE1BQ25GO0FBQ0EsVUFBSSxxQkFBcUI7QUFBQSxRQUN2QjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxjQUEyQixnQkFBTSxFQUFjLFlBQVksU0FBUyxDQUFDLEdBQUcsYUFBYSxrQkFBa0IsR0FBRyxTQUFVLE9BQU87QUFDN0gsWUFBSSxNQUFNLE1BQU0sS0FDZCxvQkFBb0IsTUFBTSxhQUMxQixZQUFZLGtCQUFrQixXQUM5QixZQUFZLGtCQUFrQjtBQUNoQyxlQUFvQixnQkFBTSxFQUFjSixPQUFNLFNBQVMsQ0FBQyxHQUFHLGFBQWEsb0JBQW9CO0FBQUEsVUFDMUYsVUFBVTtBQUFBLFVBQ1YsWUFBWTtBQUFBLFlBQ1YsYUFBYSxPQUFPO0FBQUEsWUFDcEIsYUFBYSxPQUFPO0FBQUEsVUFDdEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQyxHQUFnQixnQkFBTSxFQUFjLGVBQWU7QUFBQSxVQUNsRCxnQkFBZ0I7QUFBQSxVQUNoQixhQUFhO0FBQUEsVUFDYixnQkFBZ0I7QUFBQSxVQUNoQixhQUFhO0FBQUEsUUFDZixHQUFHLFNBQVUsaUJBQWlCO0FBQzVCLGlCQUFvQixnQkFBTSxFQUFjQyxXQUFVLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxZQUMxRSxVQUFVLFNBQVMsU0FBUyxVQUFVO0FBQ3BDLHFCQUFPLGVBQWUsUUFBUTtBQUM5Qiw4QkFBZ0IsUUFBUTtBQUFBLFlBQzFCO0FBQUEsWUFDQSxZQUFZO0FBQUEsY0FDVixNQUFNO0FBQUEsY0FDTix3QkFBd0IsWUFBWTtBQUFBLGNBQ3BDLElBQUksT0FBTyxhQUFhLFNBQVM7QUFBQSxZQUNuQztBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQyxHQUFHLE1BQU07QUFBQSxRQUNaLENBQUMsQ0FBQztBQUFBLE1BQ0osQ0FBQztBQUtELGFBQU8sb0JBQW9CLGlCQUFpQixVQUF1QixnQkFBTSxFQUFjQyxhQUFZLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUMzSCxVQUFVO0FBQUEsUUFDVixnQkFBZ0IsS0FBSztBQUFBLFFBQ3JCO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQyxHQUFHLFdBQVcsSUFBSTtBQUFBLElBQ3JCO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsa0JBQWtCO0FBQ2hDLFVBQUksU0FBUztBQUNiLFVBQUksZ0JBQWdCLEtBQUssT0FDdkJPLGFBQVksY0FBYyxXQUMxQixhQUFhLGNBQWMsWUFDM0IsVUFBVSxjQUFjLFNBQ3hCLE9BQU8sY0FBYyxNQUNyQixXQUFXLGNBQWM7QUFDM0IsVUFBSSxjQUFjLEtBQUssTUFBTTtBQUM3QixVQUFJLFlBQVksQ0FBQyxLQUFLLFNBQVMsS0FBSyxDQUFDLFlBQVk7QUFDL0MsZUFBb0IsZ0JBQU0sRUFBYyxpQkFBaUI7QUFBQSxVQUN2RDtBQUFBLFVBQ0EsU0FBUyxLQUFLO0FBQUEsUUFDaEIsQ0FBQztBQUFBLE1BQ0g7QUFDQSxVQUFJLENBQUMsUUFBUSxXQUFZO0FBQ3pCLFVBQUksU0FBUztBQUNYLFlBQUlBLFlBQVc7QUFDYixjQUFJLFFBQVEsWUFBWSxJQUFJLFNBQVUsS0FBSztBQUN6QyxtQkFBTyxPQUFPLGVBQWUsR0FBRztBQUFBLFVBQ2xDLENBQUMsRUFBRSxLQUFLQSxVQUFTO0FBQ2pCLGlCQUFvQixnQkFBTSxFQUFjLFNBQVM7QUFBQSxZQUMvQztBQUFBLFlBQ0EsTUFBTTtBQUFBLFlBQ047QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNILE9BQU87QUFDTCxjQUFJLFFBQVEsWUFBWSxTQUFTLElBQUksWUFBWSxJQUFJLFNBQVUsS0FBS2hDLElBQUc7QUFDckUsbUJBQW9CLGdCQUFNLEVBQWMsU0FBUztBQUFBLGNBQy9DLEtBQUssS0FBSyxPQUFPQSxFQUFDO0FBQUEsY0FDbEI7QUFBQSxjQUNBLE1BQU07QUFBQSxjQUNOLE9BQU8sT0FBTyxlQUFlLEdBQUc7QUFBQSxZQUNsQyxDQUFDO0FBQUEsVUFDSCxDQUFDLElBQWlCLGdCQUFNLEVBQWMsU0FBUztBQUFBLFlBQzdDO0FBQUEsWUFDQSxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsVUFDVCxDQUFDO0FBQ0QsaUJBQW9CLGdCQUFNLEVBQWMsT0FBTyxNQUFNLEtBQUs7QUFBQSxRQUM1RDtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUksU0FBUyxZQUFZLENBQUMsSUFBSSxLQUFLLGVBQWUsWUFBWSxDQUFDLENBQUMsSUFBSTtBQUNwRSxlQUFvQixnQkFBTSxFQUFjLFNBQVM7QUFBQSxVQUMvQztBQUFBLFVBQ0EsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHO0FBQUEsSUFDRCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMsbUJBQW1CO0FBQ2pDLFVBQUksY0FBYyxLQUFLO0FBQ3ZCLFVBQUksZUFBZSxLQUFLLE9BQ3RCLGdCQUFnQixhQUFhLGVBQzdCLGdCQUFnQixhQUFhLGVBQzdCLGVBQWUsYUFBYSxjQUM1QixZQUFZLGFBQWEsV0FDekIsY0FBYyxhQUFhO0FBQzdCLFVBQUksbUJBQW1CLEtBQUssb0JBQW9CO0FBQ2hELGFBQW9CLGdCQUFNLEVBQWMsY0FBYyxTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsUUFDOUUsSUFBSSxLQUFLLGFBQWEsYUFBYTtBQUFBLFFBQ25DO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGVBQWUsS0FBSztBQUFBLE1BQ3RCLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLE9BQU8sU0FBUytCLFVBQVM7QUFDdkIsVUFBSSx1QkFBdUIsS0FBSyxjQUFjLEdBQzVDRSxXQUFVLHFCQUFxQixTQUMvQkMsdUJBQXNCLHFCQUFxQixxQkFDM0NDLG1CQUFrQixxQkFBcUIsaUJBQ3ZDQyxrQkFBaUIscUJBQXFCO0FBQ3hDLFVBQUksZ0JBQWdCLEtBQUssT0FDdkIsWUFBWSxjQUFjLFdBQzFCLEtBQUssY0FBYyxJQUNuQixhQUFhLGNBQWMsWUFDM0IsYUFBYSxjQUFjO0FBQzdCLFVBQUksWUFBWSxLQUFLLE1BQU07QUFDM0IsVUFBSSxjQUFjLEtBQUssY0FBYyxLQUFLLGVBQWU7QUFDekQsYUFBb0IsZ0JBQU0sRUFBY0Qsa0JBQWlCLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUNqRjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1Y7QUFBQSxVQUNBLFdBQVcsS0FBSztBQUFBLFFBQ2xCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsR0FBRyxLQUFLLGlCQUFpQixHQUFnQixnQkFBTSxFQUFjRixVQUFTLFNBQVMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxRQUMvRixVQUFVLEtBQUs7QUFBQSxRQUNmLFlBQVk7QUFBQSxVQUNWLGFBQWEsS0FBSztBQUFBLFVBQ2xCLFlBQVksS0FBSztBQUFBLFFBQ25CO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDLEdBQWdCLGdCQUFNLEVBQWNHLGlCQUFnQixTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsUUFDN0U7QUFBQSxNQUNGLENBQUMsR0FBRyxLQUFLLHlCQUF5QixHQUFHLEtBQUssWUFBWSxDQUFDLEdBQWdCLGdCQUFNLEVBQWNGLHNCQUFxQixTQUFTLENBQUMsR0FBRyxhQUFhO0FBQUEsUUFDeEk7QUFBQSxNQUNGLENBQUMsR0FBRyxLQUFLLHFCQUFxQixHQUFHLEtBQUssdUJBQXVCLEdBQUcsS0FBSyx5QkFBeUIsR0FBRyxLQUFLLHdCQUF3QixDQUFDLENBQUMsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLGdCQUFnQixDQUFDO0FBQUEsSUFDOUs7QUFBQSxFQUNGLENBQUMsR0FBRyxDQUFDO0FBQUEsSUFDSCxLQUFLO0FBQUEsSUFDTCxPQUFPLFNBQVMseUJBQXlCLE9BQU8sT0FBTztBQUNyRCxVQUFJLFlBQVksTUFBTSxXQUNwQiwwQkFBMEIsTUFBTSx5QkFDaEMsMkJBQTJCLE1BQU0sMEJBQ2pDLGdCQUFnQixNQUFNLGVBQ3RCLFlBQVksTUFBTSxXQUNsQixpQkFBaUIsTUFBTSxnQkFDdkIsaUJBQWlCLE1BQU07QUFDekIsVUFBSXBDLFdBQVUsTUFBTSxTQUNsQixRQUFRLE1BQU0sT0FDZCxhQUFhLE1BQU0sWUFDbkIsYUFBYSxNQUFNLFlBQ25CLFVBQVUsTUFBTTtBQUNsQixVQUFJLGNBQWMsV0FBVyxLQUFLO0FBQ2xDLFVBQUksc0JBQXNCLENBQUM7QUFDM0IsVUFBSSxjQUFjLFVBQVUsVUFBVSxTQUFTQSxhQUFZLFVBQVUsV0FBVyxlQUFlLFVBQVUsY0FBYyxlQUFlLFVBQVUsYUFBYTtBQUMzSixZQUFJLG1CQUFtQixhQUFhLHNCQUFzQixPQUFPLFdBQVcsSUFBSSxDQUFDO0FBQ2pGLFlBQUksMEJBQTBCLGFBQWEsNkJBQTZCLHdCQUF3QixPQUFPLFdBQVcsR0FBRyxHQUFHLE9BQU8sZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLENBQUM7QUFDOUosWUFBSSxlQUFlLDBCQUEwQixvQkFBb0IsT0FBTyxXQUFXLElBQUk7QUFDdkYsWUFBSSxnQkFBZ0IscUJBQXFCLE9BQU8sZ0JBQWdCO0FBQ2hFLFlBQUksa0JBQWtCLG1CQUFtQix5QkFBeUIsYUFBYTtBQUMvRSw4QkFBc0I7QUFBQSxVQUNwQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLHlCQUF5QjtBQUFBLFFBQzNCO0FBQUEsTUFDRjtBQUVBLFVBQUksd0JBQXdCLDRCQUE0QixRQUFRLFVBQVUsWUFBWTtBQUFBLFFBQ3BGLGVBQWU7QUFBQSxRQUNmLDBCQUEwQjtBQUFBLE1BQzVCLElBQUksQ0FBQztBQUNMLFVBQUksbUJBQW1CO0FBQ3ZCLFVBQUksZUFBZSxhQUFhO0FBQ2hDLFVBQUksYUFBYSxDQUFDLGNBQWM7QUFHOUIsMkJBQW1CO0FBQUEsVUFDakIsT0FBTyxhQUFhLFNBQVMsYUFBYSxZQUFZLENBQUMsS0FBSyxJQUFJO0FBQUEsVUFDaEUsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Y7QUFDQSx1QkFBZSxDQUFDO0FBQUEsTUFDbEI7QUFJQSxXQUFLLGtCQUFrQixRQUFRLGtCQUFrQixTQUFTLFNBQVMsY0FBYyxZQUFZLHVCQUF1QjtBQUNsSCwyQkFBbUI7QUFBQSxNQUNyQjtBQUNBLGFBQU8sZUFBYyxlQUFjLGVBQWMsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLHFCQUFxQixHQUFHLENBQUMsR0FBRztBQUFBLFFBQ3JHLFdBQVc7QUFBQSxRQUNYLGVBQWU7QUFBQSxRQUNmLGdCQUFnQjtBQUFBLE1BQ2xCLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRixDQUFDLENBQUM7QUFDRixTQUFPSTtBQUNULEVBQUUsQ0FBUztBQUNYLE9BQU8sZUFBZTs7O0FDNWxGdEIsSUFBQW1DLHdCQUFPO0FBQ1AsSUFBQUMsd0JBQU87QUFDUCxJQUFBQyxrQ0FBTztBQUNQLElBQUFDLHlCQUFPO0FBQ1AsSUFBQUMsc0JBQU87QUFDUCxJQUFBQyxtQkFBTztBQUNQLElBQUFDLHNCQUFPO0FBQ1AsSUFBQUMsNEJBQU87QUFFUCxJQUFBQyxpQkFBTztBQUNQLElBQUFDLGdDQUFPO0FBQ1AsSUFBQUMseUJBQU87QUFHUCxJQUFBQyx1Q0FBTztBQUVQLElBQUkscUJBQWtDLGdCQUFBQyxHQUFXLFNBQVUsT0FBTyxLQUFLO0FBQ3JFLE1BQUksa0JBQWtCLGdCQUFnQixLQUFLO0FBQzNDLFNBQW9CLGdCQUFNLEVBQWMsUUFBUSxTQUFTO0FBQUEsSUFDdkQ7QUFBQSxFQUNGLEdBQUcsZUFBZSxDQUFDO0FBQ3JCLENBQUM7QUFDRCxJQUFJLHVCQUF1Qjs7O0FDckJwQixTQUFTLGdCQUFnQixPQUFtQztBQVhuRTtBQVlJLFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSSxvQkFBNkI7QUFBQSxJQUNuRCxVQUFTLFdBQU0sVUFBTixZQUFlLE1BQU07QUFBQSxJQUM5QixTQUFTLE1BQU07QUFBQSxFQUNuQixDQUFDO0FBRUQsUUFBTUMsWUFBVztBQUFBLElBQ2IsQ0FBQyxRQUFzRDtBQUNuRCxVQUFJLFdBQVcsQ0FBQyxJQUFJLGNBQWMsU0FBUyxZQUFZO0FBQ3ZELGVBQVMsRUFBRSxNQUFNLG1CQUFtQixTQUFTLENBQUM7QUFDOUMsZUFBUyxFQUFFLE1BQU0sVUFBVSxTQUFTLENBQUM7QUFBQSxJQUN6QztBQUFBLElBQ0EsQ0FBQyxNQUFNLFNBQVMsT0FBTyxNQUFNLEtBQUs7QUFBQSxFQUN0QztBQUVBLFNBQ0ksZ0JBQUFDLEdBQUMsU0FBSSxTQUFTRCxXQUFVLFdBQVcscUJBQXFCLE1BQU0sVUFBVSxnQkFBZ0IsRUFBRSxJQUN0RiwwQkFBQUMsR0FBQyxXQUFNLE1BQUssWUFBVyxHQUMzQjtBQUVSOzs7QUNsQk8sU0FBUyxpQkFDWixPQU9GO0FBQ0UsUUFBTSxNQUFNQyxHQUFPLE1BQU0sT0FBTztBQUNoQyxFQUFBQyxHQUFVLE1BQU07QUFDWixVQUFNLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLElBQUksUUFBUSxDQUFDO0FBQUEsRUFDckUsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDO0FBQ2hCLFFBQU0sV0FBVyxZQUFZO0FBQ3pCLFVBQU0sU0FBUztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sVUFBVSxJQUFJO0FBQUEsSUFDbEIsQ0FBQztBQUFBLEVBQ0w7QUFDQSxRQUFNLFdBQVc7QUFBQSxJQUNiLENBQUNDLE9BQXFDO0FBQ2xDLGVBQVM7QUFDVCxVQUFJLFVBQVUsV0FBV0EsR0FBRSxjQUFjLEtBQUs7QUFBQSxJQUNsRDtBQUFBLElBQ0EsQ0FBQyxJQUFJLFNBQVMsTUFBTSxVQUFVO0FBQUEsRUFDbEM7QUFDQSxRQUFNLFdBQVcsZ0JBQUFDLEdBQUMsY0FBUyxPQUFPLElBQUksU0FBUyxLQUFLLE1BQU0sS0FBSyxLQUFLLE1BQU0sS0FBSyxNQUFNLE1BQU0sTUFBTTtBQUVqRyxRQUFNLFNBQ0YsZ0JBQUFBLEdBQUMsV0FBTSxNQUFLLFNBQVEsV0FBVSw4QkFBNkIsT0FBTyxJQUFJLFNBQVMsVUFBVSxVQUFVO0FBR3ZHLFNBQ0ksZ0JBQUFBLEdBQUMsVUFBSyxXQUFVLG9CQUNaLDBCQUFBQTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csVUFBVSxNQUFNO0FBQUEsTUFDaEI7QUFBQSxNQUNBLE9BQU8sRUFBRSxHQUFHLE9BQU8sU0FBUyxJQUFJLFNBQVMsV0FBVyxNQUFNLFVBQVU7QUFBQSxNQUNwRSxlQUFlO0FBQUE7QUFBQSxFQUNuQixHQUNKO0FBRVI7OztBQzFDTyxTQUFTLGVBQWUsRUFBRSxPQUFPLFNBQVMsUUFBUUMsU0FBUSxhQUFhLEdBQXVDO0FBQ2pILFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSSxvQkFBcUM7QUFBQSxJQUMzRCxTQUFTLHdCQUFTO0FBQUEsSUFDbEI7QUFBQSxFQUNKLENBQUM7QUFFRCxRQUFNLGNBQWNDLEdBQVEsTUFBTTtBQUM5QixRQUFJLE9BQU8sTUFBTSxXQUFXLFVBQVU7QUFDbEMsVUFBSSxNQUFNLFFBQVEsU0FBUyxHQUFHLEdBQUc7QUFDN0IsWUFBSSxRQUFRLE1BQU0sUUFBUSxNQUFNLEdBQUc7QUFDbkMsZUFBTyxTQUFTLE1BQU0sQ0FBQyxDQUFDLElBQUksU0FBUyxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQ2pEO0FBQUEsSUFDSixXQUFXLE9BQU8sTUFBTSxXQUFXLFVBQVU7QUFDekMsYUFBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFBQSxJQUNwQztBQUNBLFdBQU87QUFBQSxFQUNYLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQztBQUVsQixRQUFNLFFBQVFBLEdBQVEsTUFBTTtBQS9CaEM7QUFnQ1EsUUFBSUMsS0FBdUIsQ0FBQztBQUM1QixhQUFTQyxLQUFJLEdBQUdBLE9BQUssS0FBQUgsV0FBQSxnQkFBQUEsUUFBUSxRQUFSLFlBQWUsSUFBSUcsTUFBSztBQUN6QyxVQUFJLFVBQVUsa0JBQWtCLE1BQU07QUFsQ2xELFlBQUFDO0FBbUNnQixZQUFJLFdBQW1DO0FBQ3ZDLFlBQUksT0FBTyxNQUFNLFdBQVcsVUFBVTtBQUNsQyxjQUFJLE1BQU0sUUFBUSxTQUFTLEdBQUcsR0FBRztBQUM3Qix1QkFBVyxHQUFHRCxLQUFJLENBQUM7QUFBQSxVQUN2QjtBQUFBLFFBQ0osV0FBVyxPQUFPLE1BQU0sV0FBVyxVQUFVO0FBQ3pDLHFCQUFXLEtBQUssSUFBSUEsS0FBSSxJQUFHQyxNQUFBSixXQUFBLGdCQUFBQSxRQUFRLFFBQVIsT0FBQUksTUFBZSxDQUFDO0FBQUEsUUFDL0M7QUFFQSxpQkFBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsWUFBWUQsS0FBSSxFQUFFLENBQUM7QUFDakUsaUJBQVMsRUFBRSxNQUFNLFVBQVUsVUFBVSxZQUFZQSxLQUFJLEVBQUUsQ0FBQztBQUFBLE1BQzVELEdBQUcsQ0FBQyxPQUFPLGFBQWFBLEVBQUMsQ0FBQztBQUMxQixVQUFJLFVBQVUsQ0FBQyxzQkFBc0I7QUFDckMsY0FBUSxLQUFLQSxLQUFJLGNBQWMsV0FBVyxPQUFPO0FBQ2pELE1BQUFELEdBQUU7QUFBQSxRQUNFLGdCQUFBRyxHQUFDLFVBQUssU0FBUyxTQUFTLFdBQVcsUUFBUSxLQUFLLEdBQUcsR0FBRyxvQkFFdEQ7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUNBLFdBQU9IO0FBQUEsRUFDWCxHQUFHLENBQUMsYUFBYSxLQUFLLENBQUM7QUFFdkIsU0FBTyxnQkFBQUcsR0FBQyxVQUFLLFdBQVUsbUJBQW1CLGlCQUFNO0FBQ3BEOzs7QUN6QkEsU0FBUyxnQkFBZ0JDLE9BQXNCO0FBQzNDLE1BQUksUUFBUUEsTUFBSyxNQUFNLFFBQVE7QUFDL0IsTUFBSUMsUUFBTyxNQUFNLFNBQVM7QUFDMUIsU0FBT0EsUUFBTyxLQUFLLE1BQU1BLEtBQUksRUFBRSxLQUFLLEtBQUssR0FBSSxDQUFBQTtBQUU3QyxTQUFPLE1BQU0sS0FBSyxJQUFJO0FBQzFCO0FBRU8sU0FBUyxrQkFDWixNQUNBLGNBQ0EsbUJBQ0EsZUFDQSxzQkFDQSxVQUNNO0FBQ04sUUFBTSxlQUFlO0FBRXJCLE1BQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CO0FBQ2pDLFdBQU8sS0FBSyxVQUFVLGFBQWE7QUFDbkMsV0FBTyxnQkFBZ0IsZUFBZSxhQUFhLFFBQVEsR0FBRyxhQUFhLENBQUMsRUFBRSxRQUFRO0FBQUEsRUFDMUY7QUFFQSxNQUFJLFFBQVEsYUFBYSxNQUFNLFFBQVE7QUFDdkMsUUFBTSxVQUFVLGFBQWEsS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDLENBQUM7QUFFekQsTUFBSSxnQkFBZ0IsTUFBTSxNQUFNLFNBQVMsQ0FBQyxFQUFFLE1BQU0sWUFBWSxFQUFFLEtBQUssRUFBRTtBQUN2RSxNQUFJLG1CQUFtQjtBQUNuQixvQkFBZ0I7QUFBQSxNQUNaO0FBQUEsTUFDQSxXQUFXLFNBQVMsSUFBSSxFQUFFLFNBQVMsWUFBWSxJQUFJO0FBQUEsSUFDdkQ7QUFBQSxFQUNKLE9BQU87QUFDSCxvQkFBZ0IsZUFBZSxlQUFlLGVBQWUsU0FBUyxJQUFJLEVBQUUsU0FBUyxvQkFBb0IsQ0FBQztBQUMxRyxTQUFLLFVBQVUsYUFBYSxJQUFJO0FBQUEsTUFDNUIsS0FBSyxTQUFTLElBQUksRUFBRSxTQUFTLG9CQUFvQjtBQUFBLE1BQ2pELE9BQU8sU0FBUyxJQUFJO0FBQUEsTUFDcEIsS0FBSztBQUFBLE1BQ0wsVUFBVTtBQUFBLFFBQ04sTUFBTSxLQUFLO0FBQUEsUUFDWCxPQUFPO0FBQUEsUUFDUCxZQUFZO0FBQUEsUUFDWixLQUFLLFNBQVMsSUFBSSxFQUFFLFNBQVMsb0JBQW9CLEVBQUUsU0FBUztBQUFBLE1BQ2hFO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxrQkFBZ0IsR0FBRyxjQUFjLFFBQVEsQ0FBQyxJQUFHLG1DQUFTLFVBQVMsTUFBTSxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLFFBQVE7QUFDdEcsUUFBTSxNQUFNLFNBQVMsQ0FBQyxJQUFJLGNBQWMsVUFBVTtBQUVsRCxTQUFPLE1BQU0sS0FBSyxJQUFJO0FBQzFCO0FBRU8sSUFBTSxrQkFBa0I7QUFHL0IsZUFBc0IsWUFDbEIsT0FDQSxNQUNBLE1BQ0EsZUFDQSxhQUNGO0FBL0ZGO0FBZ0dJLE1BQ0ksZ0JBQWdCLG9CQUNoQixpQkFBaUIsS0FBSyxZQUNyQixlQUFlLFVBQWEsZUFBZSxLQUFLO0FBRWpEO0FBQ0osa0JBQWdCLGlCQUFpQixLQUFLLE1BQU07QUFFNUMsTUFBSSxjQUFjLE1BQU0sTUFBTSxRQUFRLEtBQUssS0FBSyxLQUFLO0FBQ3JELE1BQUksUUFBUSxZQUFZLFNBQVMsSUFBSTtBQUNyQyxNQUFJLFdBQVcsWUFBWSxNQUFNLGFBQWE7QUFFOUMsTUFBSSxTQUFTLFNBQVMsS0FBSyxNQUFPO0FBQ2xDLE1BQUlDLFNBQVEsZ0JBQWdCLEtBQUssU0FBUyxLQUFLLEtBQUssQ0FBQztBQUNyRCxNQUFJLENBQUNBLFlBQVMsS0FBQUEsT0FBTSxDQUFDLE1BQVAsbUJBQVUsV0FBVSxFQUFHO0FBRXJDLE1BQUksZ0JBQWdCLEtBQUssTUFBTyxNQUFNLElBQUk7QUFJMUMsUUFBTSxhQUFhLGdCQUFnQixtQkFBbUIsSUFBSSxhQUFhLE1BQU07QUFDN0UsTUFBSSxpQkFBaUIsV0FBVyxLQUFLLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBSSxDQUFDO0FBQzlELE1BQUksYUFBYTtBQUNiLFFBQUksZUFBZSxZQUFZLE1BQU0sSUFBSTtBQUV6QyxRQUFJLGVBQXlCLENBQUMsR0FBRyxjQUFjLEdBQUcsS0FBSyxPQUFPLElBQUksVUFBVSxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUFBLE1BQy9GLGFBQWEsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDQyxPQUFNLGlCQUFpQixNQUFPQSxHQUFFLFVBQVUsQ0FBQztBQUFBLElBQzFFO0FBRUEsYUFBUyxPQUFPLEtBQUssT0FBTyxLQUFLLE1BQU8sTUFBTSxJQUFJLEVBQUUsUUFBUSxHQUFHLFlBQVk7QUFBQSxFQUMvRSxPQUFPO0FBQ0gsYUFBUyxLQUFLLEtBQUssSUFBSSxHQUFHLGNBQWMsR0FBRyxLQUFLLE9BQU8sSUFBSSxVQUFVLElBQUksY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFDcEc7QUFFQSxNQUFJLFVBQVUsU0FBUyxLQUFLLFFBQVEsU0FBUyxJQUFJO0FBQ2pELFFBQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxPQUFPLE9BQU87QUFDN0MsUUFBTSxRQUFRLE1BQU0sY0FBYyxLQUFLLEtBQUs7QUFDNUMsTUFBSSxNQUFPLE1BQUssT0FBTyxLQUFLO0FBQ2hDO0FBQ0EsZUFBc0IsYUFBYSxXQUFvQixNQUF3QixPQUFjLE1BQWdCO0FBQ3pHLFFBQU0sa0JBQWtCLENBQUMsSUFBSTtBQUM3QixNQUFJLEtBQUssU0FBUyx5QkFBeUI7QUFDdkMsVUFBTSxVQUFVLENBQUNDLE9BQTJDO0FBQ3hELFVBQUlBLGNBQWEsaUJBQWtCLGlCQUFnQixLQUFLQSxFQUFDO0FBQ3pELE1BQUFBLEdBQUUsVUFBVSxRQUFRLE9BQU87QUFBQSxJQUMvQjtBQUNBLFNBQUssVUFBVSxRQUFRLE9BQU87QUFBQSxFQUNsQztBQUNBLGFBQVdDLE1BQUssaUJBQWlCO0FBQzdCLFFBQUksVUFBVTtBQUFBLE1BQ1ZBO0FBQUEsTUFDQUEsR0FBRTtBQUFBLE1BQ0YsS0FBSyxTQUFTO0FBQUEsTUFDZCxLQUFLLFNBQVM7QUFBQSxNQUNkLEtBQUssU0FBUztBQUFBLE1BQ2Q7QUFBQSxJQUNKO0FBQ0EsVUFBTSxZQUFZLE9BQU8sTUFBTUEsSUFBRyxZQUFZLE1BQU0sS0FBSyxPQUFPO0FBQUEsRUFDcEU7QUFDSjs7O0FDNUlPLElBQVU7QUFBQSxDQUFWLENBQVVDLG9CQUFWO0FBRUksV0FBUyxLQUFLLE9BQTZCO0FBQzlDLFVBQU0sVUFBVSxTQUFTLFVBQVUsT0FBTztBQUMxQyxRQUFJLENBQUMsUUFBUyxRQUFPO0FBRXJCLFlBQVEsUUFBUSxNQUFNO0FBQUEsTUFDbEIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNELGVBQU8sUUFBUTtBQUFBLE1BQ25CLEtBQUs7QUFDRCxlQUFPLFFBQVEsTUFBTSxJQUFJLElBQUk7QUFBQSxNQUNqQyxLQUFLO0FBQ0QsZUFBTyxRQUFRLE1BQU0sTUFBTTtBQUFBLE1BQy9CLEtBQUs7QUFDRCxlQUFPLFFBQVEsTUFBTSxRQUFRO0FBQUEsTUFDakMsS0FBSztBQUNELGVBQU87QUFBQSxNQUNYLEtBQUs7QUFDRCxlQUFPLFFBQVEsTUFBTSxTQUFTO0FBQUEsTUFDbEMsS0FBSztBQUNELGVBQU8sZ0JBQWdCLFFBQVEsT0FBTyxJQUFJO0FBQUEsSUFDbEQ7QUFBQSxFQUNKO0FBdkJPLEVBQUFBLGdCQUFTO0FBMEJULFdBQVMsUUFBUSxPQUE2QjtBQUNqRCxRQUFJLFNBQVMsTUFBTTtBQUNmLGFBQU87QUFBQSxJQUNYLFdBQVcsT0FBTyxVQUFVLFVBQVU7QUFDbEMsVUFBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3RCLFlBQUksU0FBUyxDQUFDO0FBQ2QsaUJBQVMsU0FBUyxPQUFxQjtBQUNuQyxpQkFBTyxLQUFLLFFBQVEsS0FBSyxDQUFDO0FBQUEsUUFDOUI7QUFFQSxlQUFPO0FBQUEsTUFDWCxXQUFXLGlCQUFpQixNQUFNO0FBQzlCLFlBQUksWUFBWSxTQUFTLFdBQVcsS0FBSztBQUN6QyxlQUFPO0FBQUEsTUFDWCxPQUFPO0FBQ0gsWUFBSSxTQUFTO0FBQ2IsWUFBSSxTQUFrQyxDQUFDO0FBQ3ZDLGlCQUFTLE9BQU8sUUFBUTtBQUNwQixpQkFBTyxHQUFHLElBQUksUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQ3JDO0FBRUEsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKLFdBQVcsT0FBTyxVQUFVLFVBQVU7QUFDbEMsYUFBTztBQUFBLElBQ1gsV0FBVyxPQUFPLFVBQVUsV0FBVztBQUNuQyxhQUFPO0FBQUEsSUFDWCxXQUFXLE9BQU8sVUFBVSxVQUFVO0FBQ2xDLFVBQUksWUFBWSxXQUFXLEtBQUssTUFBTSxLQUFLO0FBQzNDLFVBQUksVUFBVSxPQUFRLFFBQU8sVUFBVTtBQUV2QyxVQUFJLGdCQUFnQixXQUFXLFNBQVMsTUFBTSxLQUFLO0FBQ25ELFVBQUksY0FBYyxPQUFRLFFBQU8sY0FBYztBQUUvQyxVQUFJLFlBQVksV0FBVyxLQUFLLE1BQU0sS0FBSztBQUMzQyxVQUFJLFVBQVUsT0FBUSxRQUFPLFVBQVU7QUFFdkMsYUFBTztBQUFBLElBQ1g7QUFHQSxXQUFPO0FBQUEsRUFDWDtBQTFDTyxFQUFBQSxnQkFBUztBQUFBLEdBNUJIOzs7QUNKakIsZUFBc0IsZUFBZSxLQUFVLFlBQXdCLE9BQStDO0FBQ2xILFFBQU0sT0FBTyxJQUFJLE1BQU0sY0FBYyxXQUFXLElBQUk7QUFDcEQsTUFBSSxDQUFDLEtBQU0sUUFBTyxPQUFPLFFBQVEsa0JBQWtCLFdBQVcsSUFBSSxrQkFBa0I7QUFHcEYsVUFBUSxXQUFXLE1BQU07QUFBQSxJQUNyQixLQUFLO0FBQ0QsWUFBTSxJQUFJLFlBQVksbUJBQW1CLE1BQU0sQ0FBQyxnQkFBZ0I7QUFDNUQsWUFBSSxTQUFTLFFBQVEsV0FBVyxPQUFPLGFBQWE7QUFDaEQsaUJBQU8sWUFBWSxXQUFXLEdBQUc7QUFBQSxRQUNyQztBQUVBLG9CQUFZLFdBQVcsR0FBRyxJQUFJLGVBQWUsS0FBSyxLQUFLO0FBQUEsTUFDM0QsQ0FBQztBQUVELGFBQU8sT0FBTyxRQUFRLElBQUk7QUFBQSxJQUM5QixLQUFLO0FBQ0QsYUFBTyxnQkFBZ0IsS0FBSyxNQUFNLFdBQVcsTUFBTSxXQUFXLEtBQUssS0FBSztBQUFBLEVBQ2hGO0FBQ0o7QUFHQSxlQUFzQixnQkFDbEIsS0FDQSxNQUNBQyxPQUNBLEtBQ0EsT0FDNkI7QUFDN0IsUUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QyxNQUFJLENBQUMsUUFBUyxRQUFPLE9BQU8sUUFBUSxrQkFBa0IsS0FBSyxJQUFJLGtCQUFrQjtBQUdqRixRQUFNLFVBQVUsWUFBWSxTQUFTQSxPQUFNQSxRQUFPLEdBQUcsQ0FBQ0EsVUFBUztBQUczRCxRQUFJLFNBQVMsS0FBTSxRQUFPLGVBQWVBLE9BQU0sS0FBSyxNQUFTO0FBQUEsUUFDeEQsUUFBTyxlQUFlQSxPQUFNLEtBQUssS0FBSyxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQUEsRUFDekUsQ0FBQztBQUVELE1BQUksV0FBVyxRQUFTLFFBQU8sT0FBTyxRQUFRLElBQUk7QUFFbEQsUUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLE9BQU87QUFDcEMsU0FBTyxPQUFPLFFBQVEsSUFBSTtBQUM5Qjs7O0FDM0NPLFNBQVMsWUFBK0IsT0FBY0MsV0FBa0M7QUFDM0YsUUFBTSxNQUFNQyxHQUFXLFdBQVc7QUFDbEMsU0FBT0M7QUFBQSxJQUNILENBQUMsYUFBZ0I7QUFDYixxQkFBZSxLQUFLLE1BQU0sWUFBYSxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQ3hELFlBQUlGLFVBQVUsQ0FBQUEsVUFBUyxRQUFRO0FBQUEsTUFDbkMsQ0FBQztBQUFBLElBQ0w7QUFBQSxJQUNBLENBQUMsT0FBT0EsU0FBUTtBQUFBLEVBQ3BCO0FBQ0o7QUFDQSxlQUFzQixZQUFZLEtBQVUsTUFBZ0JHLE9BQWMsTUFBd0I7QUFDOUYsTUFBSSxhQUFhLEdBQUdBLEtBQUksR0FBRyxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsU0FBUyxNQUFNLEVBQUU7QUFDeEUsV0FBUyxTQUFTLEtBQUssV0FBVztBQUM5QixpQkFBYSxlQUFlLFlBQVksT0FBTyxLQUFLLFVBQVUsS0FBSyxFQUFFLEdBQUc7QUFBQSxFQUM1RTtBQUNBLFFBQU0sWUFBWSxJQUFJLE9BQU8sTUFBTSxNQUFNLEtBQUssU0FBUyxVQUFVO0FBQ3JFO0FBQ08sU0FBUyxhQUFnQixVQUFhLFVBQXVDO0FBQ2hGLFNBQU8saUJBQWtCO0FBQ3JCLGFBQVM7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOO0FBQUEsSUFDSixDQUFDO0FBQ0QsYUFBUztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLElBQ2QsQ0FBQztBQUFBLEVBQ0w7QUFDSjs7O0FDc0NPLFNBQVMsZ0JBQ1osRUFBRSxTQUFTLFNBQVMsR0FBRyxLQUFLLEdBQzVCLFFBQ2dCO0FBQ2hCLFVBQVEsT0FBTyxNQUFNO0FBQUEsSUFDakIsS0FBSztBQUNELGNBQVEsT0FBTyxRQUFRO0FBQ3ZCLGFBQU8sRUFBRSxHQUFHLE1BQU0sU0FBUyxTQUFTLE9BQU8sU0FBUztBQUFBLElBQ3hELEtBQUs7QUFDRCxPQUFDLE9BQU8sWUFBWSxRQUFRLE9BQU87QUFDbkMsYUFBTyxFQUFFLEdBQUcsTUFBTSxTQUFTLFNBQVMsV0FBVyxPQUFPLFNBQVM7QUFBQSxJQUNuRSxLQUFLO0FBQ0QsYUFBTyxFQUFFLEdBQUcsTUFBTSxTQUFTLFNBQVMsT0FBTyxTQUFTO0FBQUEsSUFDeEQ7QUFDSSxhQUFPLEVBQUUsU0FBUyxTQUFTLEdBQUcsS0FBSztBQUFBLEVBQzNDO0FBQ0o7QUFLTyxTQUFTLG9CQUNaQyxVQUMrQztBQUMvQyxRQUFNLE9BQU9DLEdBQVEsTUFBTyxPQUFPRCxZQUFXLGFBQWFBLFNBQVEsSUFBSUEsVUFBVSxDQUFDQSxRQUFPLENBQUM7QUFDMUYsU0FBT0UsR0FBVyxpQkFBaUUsTUFBTSxDQUFDQyxPQUFNLElBQUk7QUFDeEc7QUFNTyxTQUFTLFNBQVksRUFBRSxZQUFZLGVBQWUsUUFBUSxVQUFVLE1BQU0sR0FBcUI7QUFDbEcsUUFBTSxhQUFhQyxHQUFPLElBQUk7QUFFOUIsUUFBTSxVQUFVSCxHQUFRLE1BQU07QUFDMUIsUUFBSSxNQUFNLFdBQVc7QUFDakIsYUFBTztBQUFBLElBQ1gsT0FBTztBQUNILFVBQUksY0FBZSxRQUFPO0FBQUEsVUFDckIsUUFBTyxnQkFBQUksR0FBQyxPQUFJLE9BQU8sTUFBTSxTQUFvQixRQUFRLE1BQU0sWUFBVyxJQUFHO0FBQUEsSUFDbEY7QUFBQSxFQUNKLEdBQUcsQ0FBQyxNQUFNLFdBQVcsTUFBTSxTQUFTLFlBQVksYUFBYSxDQUFDO0FBRTlELEVBQUFDLEdBQVUsTUFBTTtBQUNaLGdCQUFZLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLE1BQU0sUUFBUSxDQUFDO0FBQUEsRUFDN0UsR0FBRyxDQUFDLE1BQU0sU0FBUyxNQUFNLFNBQVMsQ0FBQztBQUVuQyxTQUNJLGdCQUFBRCxHQUFDLFVBQUssV0FBVSwyQkFBMEIsS0FBSyxZQUMxQyxtQkFDTDtBQUVSO0FBRU8sU0FBUyxtQkFBbUM7QUFBQSxFQUMvQztBQUFBLEVBQ0EsUUFBUTtBQUFBLEVBQ1I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQU1HO0FBQ0MsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJLG9CQUF1QixPQUFPO0FBQUEsSUFDcEQsU0FBUztBQUFBLElBQ1Q7QUFBQSxJQUNBLFFBQVE7QUFBQSxJQUNSLFdBQVc7QUFBQSxFQUNmLEVBQUU7QUFDRixTQUFPLGdCQUFBQSxHQUFDLFVBQU8sVUFBcUIsR0FBRyxPQUFRLEdBQUcsT0FBTztBQUM3RDtBQVdPLFNBQVMsbUJBQW1CO0FBQUEsRUFDL0I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsUUFBQUU7QUFBQSxFQUNBO0FBQ0osR0FHTztBQUNILFFBQU1DLFlBQVc7QUFBQSxJQUNiLENBQUMsVUFBZSxlQUEyQztBQUN2RCxVQUFJLE1BQU0sUUFBUSxRQUFRLEdBQUc7QUFDekIsaUJBQVM7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFVBQVUsU0FBUyxJQUFJLENBQUNDLE9BQU1BLEdBQUUsS0FBSztBQUFBLFFBQ3pDLENBQUM7QUFBQSxNQUNMLE9BQU87QUFDSCxpQkFBUztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sVUFBVSxTQUFTO0FBQUEsUUFDdkIsQ0FBQztBQUFBLE1BQ0w7QUFBQSxJQUNKO0FBQUEsSUFDQSxDQUFDRixTQUFRLFNBQVMsU0FBUyxTQUFTO0FBQUEsRUFDeEM7QUFFQSxRQUFNLFNBQVNOLEdBQVEsTUFBTTtBQWpNakM7QUFrTVEsV0FDSSxnQkFBQUk7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLGlCQUFnQjtBQUFBLFFBQ2hCLFVBQVVHO0FBQUEsUUFDVixVQUFRO0FBQUEsUUFDUixVQUFTLEtBQUFELFdBQUEsZ0JBQUFBLFFBQVEsVUFBUixZQUFpQjtBQUFBLFFBQzFCLFVBQVMsS0FBQUEsV0FBQSxnQkFBQUEsUUFBUSxZQUFSLFlBQW1CLENBQUM7QUFBQSxRQUM3QixrQkFBa0IsU0FBUztBQUFBLFFBQzNCLFFBQ0lBLFdBQUEsZ0JBQUFBLFFBQVEsUUFBUTtBQUFBLFVBQU8sQ0FBQ0UsUUFDbEIsTUFBTSxRQUFRLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxHQUFhLFNBQVNBLEdBQUUsS0FBSztBQUFBLGNBQ3pFLENBQUM7QUFBQSxRQUVWLFlBQVk7QUFBQSxVQUNSLE9BQU8sQ0FBQyxVQUFlO0FBQUEsVUFDdkIsZ0JBQWdCLENBQUMsVUFBZTtBQUFBLFVBQ2hDLFdBQVcsQ0FBQyxVQUFlO0FBQUEsVUFDM0IsTUFBTSxDQUFDLFVBQWU7QUFBQSxVQUN0QixRQUFRLENBQUMsVUFBZSxrQkFBa0IsTUFBTSxhQUFhLGlCQUFpQixFQUFFO0FBQUEsUUFDcEY7QUFBQTtBQUFBLElBQ0o7QUFBQSxFQUVSLEdBQUcsQ0FBQyxTQUFTLFNBQVMsV0FBV0YsT0FBTSxDQUFDO0FBRXhDLFNBQU8sZ0JBQUFGLEdBQUMsWUFBUyxRQUFnQixVQUFvQixPQUFPLEVBQUUsV0FBVyxTQUFTLFFBQVEsR0FBRztBQUNqRztBQUtPLFNBQVMsYUFBYTtBQUFBLEVBQ3pCO0FBQUEsRUFDQTtBQUFBLEVBQ0EsR0FBRztBQUNQLEdBR0c7QUFFQyxRQUFNLENBQUMsT0FBT0ssRUFBQyxJQUFJLG9CQUE4QyxNQUFHO0FBek94RTtBQXlPNEU7QUFBQSxNQUNwRSxXQUFXLEtBQUs7QUFBQSxNQUNoQixTQUFTLEtBQUs7QUFBQSxNQUNkLFNBQVMsS0FBSztBQUFBLE1BQ2QsU0FBUSxVQUFLLFdBQUwsWUFBZTtBQUFBLElBQzNCO0FBQUEsR0FBRTtBQUNGLFFBQU0sV0FBV0QsR0FBVyxnQkFBZ0I7QUFFNUMsUUFBTUQsWUFBVyxDQUFDLFFBQXVDO0FBQ3JELFFBQUlHLEtBQUksSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLGNBQWMsS0FBSyxDQUFDO0FBQ3BELGFBQVM7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLFVBQVUsQ0FBQyxDQUFDQSxLQUFJLFNBQVMsV0FBV0EsRUFBQyxFQUFFLFNBQVMsU0FBUyxpQkFBaUIsSUFBSTtBQUFBLElBQ2xGLENBQUM7QUFDRCxhQUFTO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixVQUFVLENBQUMsQ0FBQ0EsS0FBSSxTQUFTLFdBQVdBLEVBQUMsRUFBRSxTQUFTLFNBQVMsaUJBQWlCLElBQUk7QUFBQSxJQUNsRixDQUFDO0FBQ0QsSUFBQUQsR0FBRTtBQUFBLE1BQ0UsTUFBTTtBQUFBLE1BQ04sVUFBVSxDQUFDLENBQUNDLEtBQUksU0FBUyxXQUFXQSxFQUFDLEVBQUUsU0FBUyxTQUFTLGlCQUFpQixJQUFJO0FBQUEsSUFDbEYsQ0FBQztBQUFBLEVBQ0w7QUFFQSxRQUFNLFNBQVNWLEdBQVEsTUFBTTtBQUN6QixXQUFPLE1BQU0sbUJBQW1CLFdBQzFCLE1BQU0sVUFDTixPQUFPLE1BQU0sV0FBVyxZQUFZLENBQUMsQ0FBQyxNQUFNLFVBQzVDLFNBQVMsV0FBVyxJQUFJLEtBQUssS0FBSyxNQUFNLE1BQU0sT0FBTyxDQUFDLENBQUMsSUFDdkQ7QUFBQSxFQUNWLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQztBQUVsQixRQUFNLGFBQWEsZ0JBQUFJLEdBQUMsV0FBTSxNQUFLLFFBQU8sVUFBVUcsV0FBVSxPQUFPLGlDQUFRLFNBQVMsZUFBZTtBQUNqRyxTQUFPLGdCQUFBSCxHQUFDLFlBQW1DLFVBQW9CLE9BQU8sTUFBTSxRQUFRLFlBQVk7QUFDcEc7QUFLTyxTQUFTLGVBQWUsT0FBOEI7QUFDekQsUUFBTSxNQUFNSSxHQUFXLG9CQUFvQjtBQUUzQyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUksb0JBQTRCLE9BQU87QUFBQSxJQUN6RCxXQUFXO0FBQUEsSUFDWCxTQUFTLE1BQU07QUFBQSxJQUNmLFNBQVMsTUFBTTtBQUFBLElBQ2YsUUFBUTtBQUFBLEVBQ1osRUFBRTtBQUNGLFFBQU0sUUFBUUwsR0FBTyxNQUFNLE9BQU87QUFFbEMsUUFBTSxhQUFhO0FBQUEsSUFDZixPQUFPLFFBQXFCO0FBQ3hCLFlBQU0sVUFBVSxXQUFZLElBQUksY0FBc0MsS0FBSztBQUFBLElBQy9FO0FBQUEsSUFDQSxDQUFDLE1BQU0sU0FBUyxNQUFNLFNBQVMsTUFBTSxTQUFTLE1BQU0sU0FBUztBQUFBLEVBQ2pFO0FBRUEsUUFBTSxXQUFXLGFBQWEsTUFBTSxTQUFTLFFBQVE7QUFDckQsUUFBTSxVQUFVO0FBQUEsSUFDWixPQUFPUSxPQUFxQjtBQUN4QixVQUFJQSxHQUFFLFFBQVEsU0FBUztBQUNuQixjQUFNLFNBQVM7QUFBQSxNQUNuQjtBQUFBLElBQ0o7QUFBQSxJQUNBLENBQUMsTUFBTSxTQUFTLE1BQU0sU0FBUyxNQUFNLFNBQVMsTUFBTSxTQUFTO0FBQUEsRUFDakU7QUFFQSxRQUFNLFdBQVc7QUFBQSxJQUNiLENBQUNBLE9BQWtCO0FBQ2YsZUFBUztBQUFBLFFBQ0wsTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0w7QUFBQSxJQUNBLENBQUMsTUFBTSxTQUFTLE1BQU0sU0FBUyxNQUFNLFdBQVcsTUFBTSxPQUFPO0FBQUEsRUFDakU7QUFFQSxRQUFNLGFBQWEsZ0JBQUFQLEdBQUMsT0FBSSxRQUFRLE9BQU8sWUFBWSxLQUFLLE9BQU8sTUFBTSxTQUFvQjtBQUN6RixRQUFNLFNBQVMsZ0JBQUFBLEdBQUMsV0FBTSxXQUFVLHFCQUFvQixNQUFLLFVBQVMsVUFBVSxZQUFZLFNBQVMsU0FBUztBQUMxRyxTQUNJLGdCQUFBQSxHQUFDLFVBQUssV0FBVSxvQkFBbUIsWUFBWSxVQUMzQywwQkFBQUEsR0FBQyxZQUFpQixVQUFvQixRQUFnQixlQUFlLFlBQVksT0FBYyxHQUNuRztBQUVSO0FBS08sU0FBUyxhQUFhLE9BQTJFO0FBQ3BHLFFBQU0sTUFBTUksR0FBVyxvQkFBb0I7QUFDM0MsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJLG9CQUE0QixNQUFHO0FBcFU3RDtBQW9VaUU7QUFBQSxNQUN6RCxXQUFXLE1BQU07QUFBQSxNQUNqQixTQUFTLE1BQU07QUFBQSxNQUNmLFNBQVMsTUFBTTtBQUFBLE1BQ2YsU0FBUSxXQUFNLFdBQU4sWUFBZ0I7QUFBQSxJQUM1QjtBQUFBLEdBQUU7QUFFRixRQUFNSSxRQUFPVCxHQUFPLEdBQUc7QUFDdkIsRUFBQUUsR0FBVSxNQUFNO0FBQ1osSUFBQU8sTUFBSyxVQUFVLE1BQU07QUFDckIsYUFBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsTUFBTSxRQUFRLENBQUM7QUFBQSxFQUNqRSxHQUFHLENBQUMsTUFBTSxTQUFTLE1BQU0sT0FBTyxDQUFDO0FBRWpDLFFBQU0sV0FBVyxhQUFhLE1BQU0sU0FBUyxRQUFRO0FBQ3JELFFBQU0sVUFBVTtBQUFBLElBQ1osT0FBT0QsT0FBcUI7QUFDeEIsVUFBSSxNQUFNLFFBQVE7QUFDZCxZQUFJQSxHQUFFLFFBQVEsU0FBUztBQUNuQixnQkFBTSxTQUFTO0FBQUEsUUFDbkI7QUFBQSxNQUNKLE9BQU87QUFDSCxZQUFJQSxHQUFFLFFBQVEsV0FBV0EsR0FBRSxTQUFTO0FBQ2hDLFVBQUFBLEdBQUUsZUFBZTtBQUNqQixnQkFBTSxTQUFTO0FBQUEsUUFDbkI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLElBQ0EsQ0FBQ0MsTUFBSyxTQUFTLE1BQU0sWUFBWSxNQUFNLFNBQVMsTUFBTSxTQUFTLE1BQU0sU0FBUztBQUFBLEVBQ2xGO0FBRUEsUUFBTSxXQUFXO0FBQUEsSUFDYixDQUFDRCxPQUFrQjtBQUNmLGVBQVM7QUFBQSxRQUNMLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxNQUNkLENBQUM7QUFBQSxJQUNMO0FBQUEsSUFDQSxDQUFDQyxNQUFLLFNBQVMsTUFBTSxZQUFZLE1BQU0sU0FBUyxNQUFNLFdBQVcsTUFBTSxPQUFPO0FBQUEsRUFDbEY7QUFDQSxRQUFNLGFBQ0YsZ0JBQUFSLEdBQUMsS0FDSSxnQkFBTSxXQUNILGdCQUFBQSxHQUFDLFlBQVMsU0FBU1EsTUFBSyxTQUFtQixZQUFZLE1BQU0sY0FBYyxLQUFLLFFBQVEsT0FBTyxJQUUvRixnQkFBQVIsR0FBQyxPQUFJLFFBQVEsT0FBTyxZQUFZLE1BQU0sY0FBYyxLQUFLLE9BQU9RLE1BQUssU0FBb0IsR0FFakc7QUFFSixRQUFNLFNBQ0YsZ0JBQUFSLEdBQUMsNEJBQXlCLFNBQWtCLFFBQVEsTUFBTSxRQUFRLFVBQW9CLE1BQU1RLE1BQUssU0FBUztBQUU5RyxTQUNJLGdCQUFBUixHQUFDLFVBQUssV0FBVSxvQkFBbUIsWUFBWSxVQUMzQywwQkFBQUEsR0FBQyxZQUFpQixVQUFvQixRQUFnQixlQUFlLFlBQVksT0FBYyxHQUNuRztBQUVSO0FBRU8sU0FBUyx5QkFBeUI7QUFBQSxFQUNyQyxRQUFBUztBQUFBLEVBQ0EsTUFBQUQ7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNKLEdBS0c7QUFDQyxRQUFNLENBQUMsS0FBSyxPQUFPLElBQUlFLEdBQVNGLEtBQUk7QUFDcEMsRUFBQVAsR0FBVSxNQUFNO0FBQ1osZ0JBQVksU0FBUyxFQUFFLFVBQVUsS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBQUEsRUFDbkUsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNSLFFBQU0sYUFBYTtBQUFBLElBQ2YsT0FBTyxRQUFxQjtBQUN4QixjQUFTLElBQUksY0FBc0MsS0FBSztBQUFBLElBQzVEO0FBQUEsSUFDQSxDQUFDTyxPQUFNLFFBQVE7QUFBQSxFQUNuQjtBQUVBLFNBQU8sQ0FBQ0MsVUFDSixnQkFBQVQsR0FBQyxjQUFTLFdBQVUscUJBQW9CLFVBQVUsWUFBWSxTQUFTLFNBQ2xFLGVBQ0wsSUFFQSxnQkFBQUEsR0FBQyxXQUFNLFdBQVUscUJBQW9CLE1BQUssUUFBTyxVQUFVLFlBQVksU0FBUyxTQUFTO0FBRWpHO0FBS08sU0FBUyxrQkFBa0I7QUFBQSxFQUM5QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxRQUFBRTtBQUNKLEdBSU87QUFDSCxRQUFNLFlBQVlOLEdBQVEsTUFBTTtBQUM1QixZQUFRLFVBQVU7QUFBQSxNQUNkLEtBQUs7QUFDRCxlQUFPLFFBQVEsV0FDWCxnQkFBQUk7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHO0FBQUEsWUFDQSxXQUFXLE1BQU07QUFBQSxZQUNqQixTQUFTLE1BQU07QUFBQSxZQUNmLFNBQVMsTUFBTTtBQUFBLFlBQ2YsTUFBS0UsV0FBQSxnQkFBQUEsUUFBUSxRQUFPO0FBQUEsWUFDcEIsWUFBWSxPQUFPO0FBQUEsWUFDbkIsT0FBTUEsV0FBQSxnQkFBQUEsUUFBUSxTQUFRO0FBQUEsWUFDdEIsTUFBS0EsV0FBQSxnQkFBQUEsUUFBUSxRQUFPO0FBQUE7QUFBQSxRQUN4QixJQUNBO0FBQUEsTUFDUixLQUFLO0FBQ0QsZUFDSSxnQkFBQUY7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHO0FBQUEsWUFDQSxNQUFNLE9BQU87QUFBQSxZQUNiO0FBQUEsWUFDQSxRQUFRRTtBQUFBLFlBQ1IsT0FBTyxNQUFNO0FBQUEsWUFDYixTQUFTLE1BQU07QUFBQTtBQUFBLFFBQ25CO0FBQUEsTUFFUixLQUFLO0FBQ0QsZUFDSSxnQkFBQUY7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHLFdBQVcsTUFBTTtBQUFBLFlBQ2pCO0FBQUEsWUFDQSxRQUFRRTtBQUFBLFlBQ1IsU0FBUyxNQUFNO0FBQUEsWUFDZjtBQUFBLFlBQ0EsU0FBUyxNQUFNO0FBQUE7QUFBQSxRQUNuQjtBQUFBLE1BRVI7QUFDSSxlQUFPO0FBQUEsSUFDZjtBQUFBLEVBQ0osR0FBRyxDQUFDLFFBQVEsT0FBTyxNQUFNLFNBQVMsTUFBTSxTQUFTLE9BQU9BLFNBQVEsUUFBUSxDQUFDO0FBQ3pFLFFBQU0sU0FBU04sR0FBUSxNQUFNO0FBQ3pCLFlBQVEsTUFBTTtBQUFBLE1BQ1YsS0FBSztBQUNELGVBQ0ksZ0JBQUFJO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRztBQUFBLFlBQ0EsWUFBWSxPQUFPO0FBQUEsWUFDbkIsV0FBVyxNQUFNO0FBQUEsWUFDakIsU0FBUyxNQUFNO0FBQUEsWUFDZixTQUFTLE1BQU07QUFBQTtBQUFBLFFBQ25CO0FBQUEsTUFFUixLQUFLO0FBQ0QsZUFDSSxnQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHLFNBQVMsTUFBTTtBQUFBLFlBQ2Y7QUFBQSxZQUNBLE9BQU8sTUFBTTtBQUFBLFlBQ2I7QUFBQSxZQUNBLE1BQU0sT0FBTztBQUFBO0FBQUEsUUFDakI7QUFBQSxNQUVSLEtBQUs7QUFDRCxlQUNJLGdCQUFBQSxHQUFBLEtBQ0ssMENBQ0csZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRyxZQUFZLE9BQU87QUFBQSxZQUNuQixXQUFXO0FBQUEsWUFDWCxTQUFTLE1BQU07QUFBQSxZQUNmLFNBQVMsTUFBTTtBQUFBO0FBQUEsUUFDbkIsR0FFUjtBQUFBLE1BRVIsS0FBSztBQUNELGVBQU8sZ0JBQUFBLEdBQUEsS0FBRywwQ0FBYSxnQkFBQUEsR0FBQyxrQkFBZSxTQUFTLE1BQU0sU0FBbUIsU0FBUyxNQUFNLFNBQVMsR0FBRztBQUFBLE1BQ3hHO0FBQ0ksZUFDSSxnQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHLFlBQVksT0FBTztBQUFBLFlBQ25CLFdBQVcsTUFBTTtBQUFBLFlBQ2pCLFNBQVMsU0FBUyxTQUFTLE1BQU0sT0FBTztBQUFBLFlBQ3hDLFNBQVMsTUFBTTtBQUFBO0FBQUEsUUFDbkI7QUFBQSxJQUVaO0FBQUEsRUFDSixHQUFHLENBQUMsUUFBUSxPQUFPLE1BQU0sU0FBUyxNQUFNLFNBQVMsT0FBT0UsU0FBUSxVQUFVLFNBQVMsQ0FBQztBQUVwRixRQUFNLFdBQVc7QUFBQSxJQUNiLENBQUMsUUFBb0I7QUFDakIsVUFBSSxnQkFBZ0I7QUFDcEIsZUFBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUFBLElBQ3BFO0FBQUEsSUFDQSxDQUFDLE1BQU0sU0FBUztBQUFBLEVBQ3BCO0FBRUEsU0FDSSxnQkFBQUYsR0FBQyxTQUFJLFdBQVUsa0JBQ1g7QUFBQSxvQkFBQUEsR0FBQyxVQUFLLFdBQVUsZUFBYyxZQUFZLFVBQ3JDLGdCQUFNLEtBQ1g7QUFBQSxJQUNBLGdCQUFBQSxHQUFDLFVBQUssV0FBVSxlQUFjLFVBQVUsR0FDbkMsa0JBQ0w7QUFBQSxLQUNKO0FBRVI7OztBQ2xhTyxTQUFTLG1CQUFzQixFQUFFLFFBQVEsR0FBbUI7QUFDL0QsUUFBTSxhQUFhVyxHQUFXLG9CQUFvQjtBQUVsRCxTQUFPLGdCQUFBQyxHQUFDLE9BQUksUUFBUSxNQUFNLE9BQU8sU0FBb0IsWUFBd0I7QUFDakY7QUFFTyxTQUFTLG9CQUF1QjtBQUFBLEVBQ25DLFNBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FNRztBQUNDLFNBQ0ksZ0JBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxPQUFPO0FBQUEsTUFDUCxZQUFZO0FBQUEsTUFDWixTQUFTO0FBQUEsTUFDVCxRQUFRLE9BQU8sSUFBSTtBQUFBLE1BQ25CO0FBQUEsTUFDQSxlQUFlLGdCQUFBQSxHQUFDLHNCQUFtQixTQUFTLE1BQU07QUFBQTtBQUFBLEVBQ3REO0FBRVI7OztBQzdHTyxTQUFTLFNBQVM7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixrQkFBa0I7QUFBQSxFQUNsQixVQUFVLGVBQWUsQ0FBQyxNQUFNLFVBQzVCLGdCQUFBQztBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csVUFBVSxtQkFBbUIsSUFBSTtBQUFBLE1BQ2pDLFNBQVMsS0FBSztBQUFBLE1BQ2QsTUFBTSxLQUFLO0FBQUEsTUFDWCxhQUFhLEVBQUUsVUFBVSxNQUFNLFlBQVksS0FBSyxNQUFNO0FBQUEsTUFDdEQsUUFBUSxDQUFDLE9BQU87QUFBQTtBQUFBLEVBQ3BCO0FBQUEsRUFFSixHQUFHO0FBQ1AsR0FBYztBQUNWLFFBQU0sVUFBVUMsR0FBUSxNQUFNO0FBQzFCLFdBQ0ksZ0JBQUFELEdBQUMsUUFBRyxXQUFVLCtCQUNULHlDQUFPO0FBQUEsTUFBSSxDQUFDLE1BQU0sUUFDZixnQkFBZ0IsbUJBQ1osZ0JBQUFBLEdBQUMsUUFBb0IsT0FBTyxFQUFFLEdBQUcsTUFBTSxrQkFBa0IsT0FBTyxHQUFHLFFBQXhELEtBQUssR0FBK0QsSUFFL0UsZ0JBQUFBLEdBQUMsUUFDSTtBQUFBLHFCQUFhLE1BQU0sR0FBRztBQUFBLFFBQ3ZCLGdCQUFBQSxHQUFDLFNBQUksV0FBVSw2QkFDWCwwQkFBQUEsR0FBQyxrQkFBZSxpQkFBaUIsS0FBSyxpQkFBaUIsTUFBWSxHQUN2RTtBQUFBLFNBQ0o7QUFBQSxPQUdaO0FBQUEsRUFFUixHQUFHLENBQUMsT0FBTyxNQUFNLENBQUM7QUFDbEIsU0FBTyxnQkFBQUEsR0FBQyxLQUFVLFdBQUMsQ0FBQyxTQUFTLFNBQVE7QUFDekM7QUFRTyxTQUFTLEtBQUssRUFBRSxNQUFNLE9BQU8sTUFBTSxHQUFpRDtBQUN2RixRQUFNLE1BQU1FLEdBQVcsV0FBVztBQUNsQyxRQUFNLE9BQU9BLEdBQVcsZ0JBQWdCO0FBQ3hDLFFBQU0sRUFBRSxTQUFTLElBQUk7QUFDckIsUUFBTSxTQUFTLENBQUMsS0FBSyxHQUFJLE1BQU0sb0JBQW9CLENBQUMsR0FBSSxHQUFHO0FBQzNELFFBQU0sWUFBWSxNQUFNO0FBckY1QjtBQXNGUSxRQUFJLE1BQU0sc0JBQW9CLFdBQU0scUJBQU4sbUJBQXdCLFVBQVMsR0FBRztBQUM5RCxVQUFJLFdBQVcsT0FBTyxVQUFVLENBQUNDLE9BQU1BLE9BQU0sS0FBSyxPQUFPO0FBQ3pEO0FBQ0EsVUFBSSxZQUFZLE9BQU8sUUFBUTtBQUMzQixtQkFBVztBQUFBLE1BQ2Y7QUFDQSxhQUFPLE9BQU8sUUFBUTtBQUFBLElBQzFCLE9BQU87QUFDSCxhQUFPLEtBQUssYUFBYSxNQUFNO0FBQUEsSUFDbkM7QUFBQSxFQUNKO0FBQ0EsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQyxHQUFpQixLQUFLLE9BQU87QUFDekQsUUFBTUMsZ0JBQWVDLEdBQTBDLElBQUk7QUFDbkUsUUFBTSxZQUFZLGtCQUFrQixPQUFPLFFBQTBEO0FBQ2pHLFVBQU0sWUFBWSxJQUFJLGNBQWM7QUFDcEMsUUFBSTtBQUNKLFFBQUksSUFBSSxVQUFVO0FBQ2Qsa0JBQVksVUFBVTtBQUFBLElBQzFCLE9BQU87QUFDSCxrQkFBWSxZQUFZLE1BQU07QUFBQSxJQUNsQztBQUNBLGNBQVUsU0FBUztBQUNuQixVQUFNLGFBQWEsV0FBVyxNQUFNLElBQUksT0FBTyxJQUFJO0FBQ25ELFVBQU0sS0FBSyxZQUFZLFNBQVMsSUFBSSxFQUFFLFNBQVMsU0FBUyxpQkFBaUIsSUFBSTtBQUM3RSxJQUFBRCxjQUFhLFdBQVdBLGNBQWEsUUFBUSxFQUFFLE1BQU0sVUFBVSxVQUFVLEdBQUcsQ0FBQztBQUFBLEVBQ2pGLEdBQUcsQ0FBQyxDQUFDO0FBRUwsUUFBTSxVQUFVSixHQUFRLE1BQU0sV0FBVyxLQUFLLENBQUMsS0FBSyxTQUFTLE1BQU0sTUFBTSxDQUFDO0FBQzFFLFFBQU0sU0FBZ0NBLEdBQVEsTUFBTTtBQUNoRCxXQUFPO0FBQUEsTUFDSCxTQUFTLG1CQUFtQixJQUFJO0FBQUEsTUFDaEMsU0FBUyxLQUFLO0FBQUEsTUFDZCxRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDZjtBQUFBLEVBQ0osR0FBRyxDQUFDLEtBQUssWUFBWSxLQUFLLEtBQUssQ0FBQztBQUNoQyxRQUFNLGFBQWFBO0FBQUEsSUFDZixNQUFNLGdCQUFBRCxHQUFDLGdCQUFhLFlBQVksS0FBSyxPQUFRLEdBQUcsUUFBUTtBQUFBLElBQ3hELENBQUMsT0FBTyxTQUFTLE1BQU0sTUFBTSxJQUFJO0FBQUEsRUFDckM7QUFFQSxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlJLEdBQWtCLEtBQUs7QUFDekQsUUFBTSxjQUFjLEtBQUssVUFBVSxTQUFTO0FBQzVDLEVBQUFHLEdBQVUsTUFBTTtBQUNaLGlCQUFhLENBQUMsU0FBUztBQUFBLEVBQzNCLEdBQUcsQ0FBQyxDQUFDO0FBRUwsU0FDSSxnQkFBQVAsR0FBQyxRQUFrQixlQUFZLHNCQUFxQixXQUFXLDZCQUE2QixVQUFVLGdCQUFnQixLQUFLLGFBQVcsUUFDbEk7QUFBQSxvQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLFNBQVMsTUFBTSxhQUFhLENBQUNRLE9BQU0sQ0FBQ0EsRUFBQztBQUFBLFFBQ3JDO0FBQUEsUUFDQTtBQUFBO0FBQUEsSUFDSjtBQUFBLElBQ0EsZ0JBQUFSLEdBQUMsV0FBTSxXQUFVLG9DQUFtQyxNQUFLLFlBQVcsU0FBa0IsU0FBUyxXQUFXLFVBQVUsQ0FBQ1MsT0FBTSxRQUFRLElBQUlBLEdBQUUsY0FBYyxLQUFLLEdBQUU7QUFBQSxJQUM5SixnQkFBQVQsR0FBQyxTQUNHLDBCQUFBQSxHQUFDLFNBQUksV0FBVSw4QkFDVjtBQUFBO0FBQUEsTUFDRCxnQkFBQUEsR0FBQyxTQUFJLFdBQVUsNkJBQ1gsMEJBQUFBLEdBQUMsa0JBQWUsaUJBQWlCLE1BQU0saUJBQWlCLE1BQVksR0FDeEU7QUFBQSxPQUNKLEdBQ0o7QUFBQSxJQUNDLGVBQWUsQ0FBQyxhQUFhLGdCQUFBQSxHQUFDLFlBQVUsR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXO0FBQUEsT0FmcEUsS0FBSyxHQWdCZDtBQUVSO0FBRUEsU0FBUyxrQkFBa0I7QUFBQSxFQUN2QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FJRztBQUNDLFFBQU0sZUFBZSxDQUFDLG9CQUFvQjtBQUMxQyxNQUFJLFVBQVcsY0FBYSxLQUFLLGNBQWM7QUFDL0MsTUFBSSxDQUFDLFlBQWEsY0FBYSxLQUFLLGFBQWE7QUFDakQsU0FDSSxnQkFBQUEsR0FBQyxTQUFJLFNBQWtCLFdBQVcsYUFBYSxLQUFLLEdBQUcsR0FBRyxLQUFJLFFBQzFELDBCQUFBQTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csT0FBTTtBQUFBLE1BQ04sT0FBTTtBQUFBLE1BQ04sUUFBTztBQUFBLE1BQ1AsU0FBUTtBQUFBLE1BQ1IsTUFBSztBQUFBLE1BQ0wsUUFBTztBQUFBLE1BQ1AsZ0JBQWE7QUFBQSxNQUNiLGtCQUFlO0FBQUEsTUFDZixtQkFBZ0I7QUFBQSxNQUNoQixXQUFVO0FBQUEsTUFFViwwQkFBQUEsR0FBQyxVQUFLLEdBQUUsbUJBQWtCO0FBQUE7QUFBQSxFQUM5QixHQUNKO0FBRVI7QUFPTyxTQUFTLGVBQWU7QUFBQSxFQUMzQixpQkFBaUI7QUFBQSxFQUNqQjtBQUNKLEdBR0c7QUFDQyxRQUFNLE1BQU1FLEdBQVcsV0FBVztBQUNsQyxRQUFNLE9BQU9BLEdBQVcsZ0JBQWdCO0FBQ3hDLFFBQU0sRUFBRSxTQUFTLElBQUk7QUFDckIsUUFBTSxrQkFBa0JELEdBQVEsTUFBTTtBQUNsQyxRQUFJLHVCQUF1QixPQUFXLFFBQU87QUFBQSxTQUN4QztBQUNELGFBQU8sT0FBTyxPQUFPLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQ1MsT0FBTTtBQUM1QyxlQUFPO0FBQUEsVUFDSCxLQUFLQSxHQUFFO0FBQUEsVUFDUCxNQUFNLFNBQVMsT0FBT0EsR0FBRSxLQUFLO0FBQUEsVUFDN0IsUUFBUSxDQUFDO0FBQUEsVUFDVCxVQUFVO0FBQUEsVUFDVixVQUFVO0FBQUEsUUFDZDtBQUFBLE1BQ0osQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNKLEdBQUcsQ0FBQyxxQkFBcUIsS0FBSyxXQUFXLElBQUksQ0FBQztBQUM5QyxTQUNJLGdCQUFBVixHQUFBLEtBQ0ssMEJBQWdCLElBQUksQ0FBQyxXQUFXO0FBek43QztBQTBOZ0IsV0FBTyxNQUFNLE9BQU8sSUFBSSxrQkFBa0I7QUFDMUMsUUFBSSxTQUFTLE9BQU8sT0FBTyxnQkFBZ0IsYUFBYSxPQUFPLGFBQWEsSUFBSSxPQUFPO0FBQ3ZGLFFBQUksV0FBa0I7QUFBQSxNQUNsQixLQUFLLE9BQU87QUFBQSxNQUNaLE9BQU87QUFBQSxNQUNQLEtBQUssU0FBUyxTQUFTLE1BQU07QUFBQSxJQUNqQztBQUNBLFVBQU0sQ0FBQyxVQUFVLElBQUlJLEtBQWtCLFVBQUssVUFBVSxpQ0FBUSxHQUFHLE1BQTFCLG1CQUE2QixVQUFTLFNBQVMsS0FBTTtBQUM1RixVQUFNLENBQUMsUUFBUSxRQUFRLElBQUksb0JBQTZCO0FBQUEsTUFDcEQsU0FBUztBQUFBLE1BQ1QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLFFBQ0wsQ0FBQyxRQUFpQjtBQXRPMUMsY0FBQU87QUF1TzRCLGdCQUFNLGFBQWEsQ0FBQ0MsT0FDaEJBLGNBQWEsV0FDUEEsR0FBRSxTQUFTLFNBQVMsaUJBQWlCLElBQ3JDQSxNQUFLLE9BQ0wsU0FBUyxTQUFTQSxFQUFDLElBQ25CO0FBRVYsY0FBSSxhQUFhLEtBQUs7QUFDdEIsY0FBSSxjQUFjLEtBQUssT0FBTztBQUMxQixnQkFBSSxLQUFLLFVBQVUsT0FBTyxHQUFHLEVBQUcsTUFBSyxVQUFVLE9BQU8sR0FBRyxFQUFFLFFBQVEsV0FBVyxHQUFHO0FBQ2pGLHFCQUFTLFNBQVMsS0FBSyxXQUFXO0FBQzlCLDJCQUFhO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQTtBQUFBLGdCQUNBLFlBQVdELE1BQUEsS0FBSyxVQUFVLEtBQUssTUFBcEIsZ0JBQUFBLElBQXVCLEtBQUs7QUFBQSxjQUMzQztBQUFBLFlBQ0o7QUFDQSx5QkFBYSxlQUFlLEtBQUssT0FBTyxPQUFPLEtBQUssV0FBVyxHQUFHLENBQUM7QUFDbkU7QUFBQSxjQUNJLElBQUk7QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLGNBQ0EsZ0JBQWdCLG1CQUFtQixLQUFLLFVBQVU7QUFBQSxjQUNsRDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsQ0FBQyxLQUFLLFNBQVM7QUFBQSxNQUNuQjtBQUFBLElBQ0osQ0FBQztBQUNELFFBQUksT0FBTyxPQUFPLFNBQVMsb0JBQW9CO0FBRTNDLG1CQUFhLFVBQVU7QUFBQSxJQUMzQjtBQUNBLFdBQ0ksZ0JBQUFYO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxPQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0EsTUFBTSxPQUFPLFFBQVEsU0FBUyxVQUFVLFVBQVUsRUFBRztBQUFBLFFBQ3JELE1BQU0sS0FBSztBQUFBLFFBQ1gsT0FBTyxLQUFLLFVBQVUsT0FBTyxHQUFHLEtBQUs7QUFBQSxRQUNyQyxRQUFRLE9BQU87QUFBQSxRQUNmLFFBQVE7QUFBQSxRQUNSLFNBQVMsT0FBTztBQUFBLFFBQ2hCLE9BQU87QUFBQSxRQUNQLFVBQVUsT0FBTztBQUFBO0FBQUEsSUFDckI7QUFBQSxFQUVSLENBQUMsR0FDTDtBQUVSO0FBRUEsU0FBUyxtQkFBbUIsTUFBMkM7QUFDbkUsUUFBTSxNQUFNRSxHQUFXLFdBQVc7QUFDbEMsUUFBTSxPQUFPQSxHQUFXLGdCQUFnQjtBQUN4QyxRQUFNLFNBQVNELEdBQVEsTUFBTyxnQkFBZ0IsbUJBQW1CLEtBQUssVUFBVSxLQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVGLFNBQU87QUFBQSxJQUNILE9BQU8sUUFBaUI7QUFDcEIsVUFBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixZQUFJLGFBQWEsR0FBRyxHQUFHLEdBQUcsT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLFNBQVMsTUFBTSxFQUFFO0FBQ3ZFLGlCQUFTLFNBQVMsS0FBSyxXQUFXO0FBQzlCLHVCQUFhLGVBQWUsWUFBWSxPQUFPLEtBQUssVUFBVSxLQUFLLEVBQUUsR0FBRztBQUFBLFFBQzVFO0FBQ0EsY0FBTSxZQUFZLElBQUksT0FBTyxNQUFNLE1BQU0sUUFBUSxVQUFVO0FBQUEsTUFDL0Q7QUFBQSxJQUNKO0FBQUEsSUFDQSxDQUFDLFFBQVEsSUFBSTtBQUFBLEVBQ2pCO0FBQ0o7OztBQzlSQSxTQUFTLG1CQUFtQjtBQUFBLEVBQ3hCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQUlHO0FBRUMsZUFBYSxLQUFLLElBQUksR0FBRyxVQUFVO0FBRW5DLFFBQU0sV0FBVyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUM7QUFDOUMsUUFBTSxlQUFlWSxHQUFRLE1BQU0sV0FBVyxVQUFVLFVBQVUsR0FBRyxDQUFDLFVBQVUsVUFBVSxDQUFDO0FBRTNGLFNBQ0ksZ0JBQUFDLEdBQUMsU0FBSSxXQUFVLHFCQUVQO0FBQUEsb0JBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxXQUFVO0FBQUEsUUFDVixTQUFTLE1BQU0sUUFBUSxLQUFLLFFBQVEsT0FBTyxDQUFDO0FBQUEsUUFDNUMsVUFBVSxRQUFRO0FBQUEsUUFFbEIsMEJBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRyxlQUFZO0FBQUEsWUFDWixNQUFLO0FBQUEsWUFDTCxXQUFVO0FBQUEsWUFDVixRQUFPO0FBQUEsWUFDUCxNQUFLO0FBQUEsWUFDTCxTQUFRO0FBQUEsWUFDUixPQUFNO0FBQUEsWUFFTiwwQkFBQUE7QUFBQSxjQUFDO0FBQUE7QUFBQSxnQkFDRyxHQUFFO0FBQUEsZ0JBQ0YsUUFBTztBQUFBLGdCQUNQLGtCQUFlO0FBQUEsZ0JBQ2YsbUJBQWdCO0FBQUEsZ0JBQ2hCLGdCQUFhO0FBQUE7QUFBQSxZQUNoQjtBQUFBO0FBQUEsUUFDTDtBQUFBO0FBQUEsSUFDSjtBQUFBLElBRUgsYUFBYSxJQUFJLENBQUMsT0FBT0MsT0FDdEIsZ0JBQUFELEdBQUMsS0FDSTtBQUFBLE1BQUFDLEtBQUksS0FDRCxnQkFBQUQ7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNHLFdBQVU7QUFBQSxVQUNWLFNBQVMsTUFDTCxRQUFRLFlBQVksZ0JBQWdCLFVBQVUsYUFBYSxRQUFRQyxFQUFDLElBQUksS0FBSyxFQUFFO0FBQUEsVUFHbkY7QUFBQSw0QkFBQUQ7QUFBQSxjQUFDO0FBQUE7QUFBQSxnQkFDRyxlQUFZO0FBQUEsZ0JBQ1osTUFBSztBQUFBLGdCQUNMLFFBQU87QUFBQSxnQkFDUCxtQkFBZ0I7QUFBQSxnQkFDaEIsa0JBQWU7QUFBQSxnQkFDZixtQkFBZ0I7QUFBQSxnQkFDaEIsZ0JBQWE7QUFBQSxnQkFDYixTQUFRO0FBQUEsZ0JBQ1IsT0FBTTtBQUFBLGdCQUNOLE9BQU07QUFBQSxnQkFFTjtBQUFBLGtDQUFBQSxHQUFDLFlBQU8sSUFBRyxNQUFLLElBQUcsTUFBSyxNQUFLLGdCQUFlLEdBQUUsS0FBSTtBQUFBLGtCQUNsRCxnQkFBQUEsR0FBQyxZQUFPLElBQUcsTUFBSyxJQUFHLE1BQUssTUFBSyxnQkFBZSxHQUFFLEtBQUk7QUFBQSxrQkFDbEQsZ0JBQUFBLEdBQUMsWUFBTyxJQUFHLEtBQUksSUFBRyxNQUFLLE1BQUssZ0JBQWUsR0FBRSxLQUFJO0FBQUE7QUFBQTtBQUFBLFlBQ3JEO0FBQUEsWUFDQSxnQkFBQUE7QUFBQSxjQUFDO0FBQUE7QUFBQSxnQkFDRyxlQUFZO0FBQUEsZ0JBQ1osTUFBSztBQUFBLGdCQUNMLFdBQVU7QUFBQSxnQkFDVixRQUFPO0FBQUEsZ0JBQ1AsTUFBSztBQUFBLGdCQUNMLG1CQUFnQjtBQUFBLGdCQUNoQixRQUFPO0FBQUEsZ0JBQ1Asa0JBQWU7QUFBQSxnQkFDZixtQkFBZ0I7QUFBQSxnQkFDaEIsZ0JBQWE7QUFBQSxnQkFDYixTQUFRO0FBQUEsZ0JBQ1IsT0FBTTtBQUFBLGdCQUNOLE9BQU8sMEJBQ0gsZ0JBQWdCLFVBQVUsYUFBYSxRQUFRQyxFQUFDLElBQUksU0FBUyxPQUNqRTtBQUFBLGdCQUVBO0FBQUEsa0NBQUFELEdBQUMsVUFBSyxHQUFFLGtCQUFpQjtBQUFBLGtCQUN6QixnQkFBQUEsR0FBQyxVQUFLLEdBQUUsaUJBQWdCO0FBQUE7QUFBQTtBQUFBLFlBQzVCO0FBQUE7QUFBQTtBQUFBLE1BQ0o7QUFBQSxNQUVILE1BQU0sSUFBSSxDQUFDRSxPQUNSLGdCQUFBRjtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csV0FBVywwQkFDUEUsT0FBTSxXQUFXLG1DQUFtQyxFQUN4RDtBQUFBLFVBQ0EsU0FBUyxDQUFDLFVBQWUsUUFBUUEsRUFBQztBQUFBLFVBRWpDLFVBQUFBLEtBQUk7QUFBQTtBQUFBLE1BQ1QsQ0FDSDtBQUFBLE9BQ0wsQ0FDSDtBQUFBLElBRUcsZ0JBQUFGO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxXQUFVO0FBQUEsUUFDVixTQUFTLE1BQU0sU0FBUyxhQUFhLEtBQUssUUFBUSxPQUFPLENBQUM7QUFBQSxRQUMxRCxVQUFVLFNBQVMsYUFBYTtBQUFBLFFBRWhDLDBCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0csZUFBWTtBQUFBLFlBQ1osTUFBSztBQUFBLFlBQ0wsV0FBVTtBQUFBLFlBQ1YsUUFBTztBQUFBLFlBQ1AsTUFBSztBQUFBLFlBQ0wsU0FBUTtBQUFBLFlBQ1IsT0FBTTtBQUFBLFlBRU4sMEJBQUFBO0FBQUEsY0FBQztBQUFBO0FBQUEsZ0JBQ0csR0FBRTtBQUFBLGdCQUNGLFFBQU87QUFBQSxnQkFDUCxrQkFBZTtBQUFBLGdCQUNmLG1CQUFnQjtBQUFBLGdCQUNoQixnQkFBYTtBQUFBO0FBQUEsWUFDaEI7QUFBQTtBQUFBLFFBQ0w7QUFBQTtBQUFBLElBQ0o7QUFBQSxLQUVSO0FBRVI7QUFHTyxJQUFNLGtCQUFrQixHQUFNLEtBQUssa0JBQWtCO0FBS3JELFNBQVMsVUFBVTtBQUFBLEVBQ3RCLGNBQWM7QUFBQSxFQUNkO0FBQUEsRUFDQTtBQUNKLEdBSTZDO0FBRXpDLFFBQU0sYUFBYSxLQUFLLElBQUksR0FBRyxLQUFLLEtBQUssV0FBVyxRQUFRLENBQUM7QUFDN0QsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJRyxHQUFTLE1BQU0sTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFFdEYsUUFBTSxpQkFBaUJDO0FBQUEsSUFDbkIsQ0FBQ0MsVUFBaUIsYUFBYSxNQUFNQSxPQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksUUFBUTtBQUFBLElBQ3hFLENBQUMsVUFBVSxVQUFVO0FBQUEsRUFDekI7QUFFQSxRQUFNLE9BQU8sTUFBTSxLQUFLLE1BQU0sWUFBWSxRQUFRLEdBQUcsR0FBRyxhQUFhLENBQUM7QUFDdEUsU0FBTyxDQUFDLE1BQU0sWUFBWSxjQUFjO0FBQzVDO0FBeUJPLFNBQVMsa0JBQWtCO0FBQUEsRUFDOUIsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQU1XO0FBQ1AsUUFBTSxXQUFXQyxHQUFXLGdCQUFnQjtBQUU1QyxRQUFNLFdBQVcsT0FBTyxXQUFXLFdBQVcsU0FBUyxTQUFTO0FBQ2hFLFFBQU0sZ0JBQWdCLE9BQU8sV0FBVyxZQUFZLFdBQVc7QUFDL0QsUUFBTSxlQUNELE9BQU8sdUJBQXVCLFlBQVksc0JBQXNCLFlBQ2pFLENBQUMsRUFBRSxrREFBc0IsU0FBUztBQUV0QyxRQUFNLENBQUMsTUFBTSxZQUFZLFVBQVUsSUFBSSxVQUFVLEVBQUUsYUFBYSxVQUFVLFNBQVMsQ0FBQztBQUdwRixRQUFNLFVBQVVGO0FBQUEsSUFDWixDQUFDLFlBQW9CO0FBNU43QjtBQTZOWSxVQUFJLFFBQVEsV0FBVyxhQUFhLGNBQWM7QUFDOUMsd0JBQVUsWUFBVixtQkFBbUIsZUFBZTtBQUFBLFVBQzlCLFVBQVU7QUFBQSxVQUNWLE9BQU87QUFBQSxVQUNQLFFBQVE7QUFBQSxRQUNaO0FBQUEsTUFDSjtBQUVBLGlCQUFXLE9BQU87QUFBQSxJQUN0QjtBQUFBLElBQ0EsQ0FBQyxNQUFNLFdBQVcsY0FBYyxVQUFVO0FBQUEsRUFDOUM7QUFFQSxTQUFPLEVBQUUsU0FBUyxlQUFlLFFBQVEsY0FBYyxNQUFNLFVBQVUsWUFBWSxRQUFRO0FBQy9GO0FBS0EsU0FBUyxNQUFNLE9BQWVHLE1BQWFDLE1BQXFCO0FBQzVELE1BQUksUUFBUUQsS0FBSyxRQUFPQTtBQUN4QixNQUFJLFFBQVFDLEtBQUssUUFBT0E7QUFDeEIsU0FBTztBQUNYO0FBS0EsU0FBUyxXQUFXLE1BQWMsWUFBZ0M7QUFFOUQsTUFBSSxhQUFhLEdBQUksUUFBTyxDQUFDLE1BQU0sS0FBSyxFQUFFLFFBQVEsV0FBVyxHQUFHLENBQUNDLElBQUdSLE9BQU1BLEVBQUMsQ0FBQztBQUk1RSxNQUFJLE9BQU87QUFDUCxXQUFPO0FBQUEsTUFDSCxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQ3ZCLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUFBLElBQ25DO0FBQUEsV0FDSyxPQUFPLGFBQWE7QUFDekIsV0FBTztBQUFBLE1BQ0gsQ0FBQyxHQUFHLENBQUM7QUFBQSxNQUNMO0FBQUEsUUFDSSxhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsTUFDakI7QUFBQSxJQUNKO0FBQUE7QUFFQSxXQUFPO0FBQUEsTUFDSCxDQUFDLEdBQUcsQ0FBQztBQUFBLE1BQ0wsQ0FBQyxPQUFPLEdBQUcsT0FBTyxHQUFHLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUFBLE1BQzdDLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUFBLElBQ25DO0FBQ1I7QUFJQSxTQUFTLGdCQUFnQixVQUFrQixvQkFBNEIsZ0JBQWlDO0FBR3BHLE1BQUksdUJBQXVCLEdBQUc7QUFDMUIsUUFBSSxXQUFXLEdBQUc7QUFDZCxhQUFPO0FBQUEsSUFDWCxPQUFPO0FBQ0gsYUFBTztBQUFBLElBQ1g7QUFBQSxFQUNKLE9BQU87QUFDSCxRQUFJLG1CQUFtQixHQUFHO0FBQ3RCLGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0o7QUFDSjs7O0FDbElBLElBQU0sYUFBYTtBQUFBLEVBQ2pCLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxXQUFXLEdBQUcsUUFBUSwrSkFBK0o7QUFDek07QUFnMEZBLElBQU0sU0FBUztBQUFBLEVBQ2IsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLHVUQUF1VDtBQUNoVztBQSswQkEsSUFBTSxXQUFXO0FBQUEsRUFDZixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsOEpBQThKO0FBQ3ZNOzs7QUN2ekhBLCtCQUFnQztBQXVFekIsU0FBUyxhQUFnQixPQUE2QjtBQUd6RCxRQUFNLFVBQVUsYUFBYSxNQUFNLFNBQVMsQ0FBQ1MsSUFBR0MsT0FBTTtBQUNsRCxRQUFJRCxHQUFFLFVBQVVDLEdBQUUsT0FBUSxRQUFPO0FBQ2pDLFdBQU9ELEdBQUUsTUFBTSxDQUFDLE9BQU8sVUFBVSxTQUFTQyxHQUFFLEtBQUssQ0FBQztBQUFBLEVBQ3RELENBQUM7QUFHRCxRQUFNLFdBQVdDLEdBQXVCLElBQUk7QUFDNUMsUUFBTSxnQkFBZ0JDLEdBQVEsTUFBTSxVQUFVLE1BQU0sTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUM3RSxRQUFNLFNBQVMsa0JBQWtCO0FBQUEsSUFDN0IsYUFBYTtBQUFBLElBQ2IsUUFBUSxNQUFNO0FBQUEsSUFDZCxvQkFBb0IsTUFBTTtBQUFBLElBQzFCLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxFQUNmLENBQUM7QUFFRCxRQUFNLFlBQVlBLEdBQVEsTUFBTTtBQUM1QixRQUFJLE9BQU87QUFDUCxhQUFPLFVBQVUsTUFBTSxNQUFNLE1BQU0sT0FBTyxPQUFPLE9BQU8sV0FBVyxPQUFPLE9BQU8sS0FBSyxPQUFPLFFBQVE7QUFBQSxRQUNwRyxRQUFPLE1BQU07QUFBQSxFQUN0QixHQUFHLENBQUMsT0FBTyxNQUFNLE9BQU8sVUFBVSxPQUFPLFNBQVMsTUFBTSxJQUFJLENBQUM7QUFFN0QsUUFBTSxZQUFZQSxHQUFRLE1BQU07QUFDNUIsUUFBSSxDQUFDLE1BQU0sVUFBVyxRQUFPO0FBQzdCLFFBQUksTUFBTSxRQUFRLE1BQU0sU0FBUyxFQUFHLFFBQU8sTUFBTTtBQUVqRCxRQUFJLFNBQVMsV0FBVyxNQUFNLFNBQVMsRUFBRyxRQUFPLENBQUMsRUFBRSxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBQUEsUUFDeEUsUUFBTyxDQUFDLE1BQU0sU0FBUztBQUFBLEVBQ2hDLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQztBQUVwQixTQUNJLGdCQUFBQyxHQUFDLFNBQUksS0FBSyxVQUNOO0FBQUEsb0JBQUFBLEdBQUMsV0FBTSxXQUFVLGtCQUNiO0FBQUEsc0JBQUFBLEdBQUMsV0FDRywwQkFBQUEsR0FBQyxRQUFHLFdBQVUsNkJBQ1Qsa0JBQVEsSUFBSSxDQUFDLFFBQ1YsZ0JBQUFBLEdBQUMsMEJBQXVCLFFBQVEsS0FBSyxDQUN4QyxHQUNMLEdBQ0o7QUFBQSxNQUNBLGdCQUFBQSxHQUFDLFdBQ0ksb0JBQVUsSUFBSSxDQUFDLFFBQ1osZ0JBQUFBLEdBQUMsbUJBQWdCLE9BQU8sR0FBRyxXQUFzQixTQUFrQixTQUFTLEtBQUssQ0FDcEYsR0FDTDtBQUFBLE9BQ0o7QUFBQSxJQUNDLE9BQU8sV0FDSixnQkFBQUEsR0FBQyxtQkFBZ0IsTUFBTSxPQUFPLE1BQU0sWUFBWSxPQUFPLFlBQVksU0FBUyxPQUFPLFNBQVM7QUFBQSxLQUVwRztBQUVSO0FBS08sU0FBUyx1QkFBMEIsRUFBRSxRQUFBQyxRQUFPLEdBQWlDO0FBQ2hGLFFBQU0sU0FBeUJGLEdBQVEsTUFBTTtBQUN6QyxRQUFJLENBQUNFLFFBQU8sT0FBTztBQUNmLGFBQU9BLFFBQU87QUFBQSxJQUNsQixXQUFXLE9BQU9BLFFBQU8sVUFBVSxZQUFZO0FBQzNDLGFBQU9BLFFBQU8sTUFBTTtBQUFBLElBQ3hCLE9BQU87QUFDSCxhQUFPQSxRQUFPO0FBQUEsSUFDbEI7QUFBQSxFQUNKLEdBQUcsQ0FBQ0EsUUFBTyxJQUFJQSxRQUFPLEtBQUssQ0FBQztBQUU1QixRQUFNLFlBQVlGO0FBQUEsSUFDZCxNQUFPRSxRQUFPLFVBQVUsWUFBWSxRQUFRQSxRQUFPLFVBQVUsWUFBWSxTQUFTQSxRQUFPO0FBQUEsSUFDekYsQ0FBQ0EsUUFBTyxLQUFLO0FBQUEsRUFDakI7QUFHQSxTQUNJLGdCQUFBRCxHQUFDLFFBQUcsT0FBTyxXQUFXLFdBQVUsOEJBQzVCLDBCQUFBQSxHQUFDLFNBQUksV0FBVSwrQkFBK0Isa0JBQU8sR0FDekQ7QUFFUjtBQUtPLFNBQVMsZ0JBQW1CO0FBQUEsRUFDL0I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQUtHO0FBQ0MsTUFBSSxVQUFVLGVBQWUsT0FBTyxHQUFHO0FBQ25DLFVBQU0saUJBQWlCLFlBQVksVUFBVSxLQUFLLElBQUksVUFBVSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUk7QUFFdEYsV0FDSSxnQkFBQUEsR0FBQyxLQUNHO0FBQUEsc0JBQUFBLEdBQUMsb0JBQWlCLE9BQWMsT0FBTyxTQUFTLE9BQU8sUUFBUSxRQUFRLFFBQVEsZ0JBQWdCO0FBQUEsTUFDOUYsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUNmLGdCQUFBQSxHQUFDLG1CQUFnQixPQUFPLFFBQVEsR0FBRyxTQUFrQixTQUFTLEtBQUssQ0FDdEU7QUFBQSxPQUNMO0FBQUEsRUFFUixPQUFPO0FBQ0gsV0FBTyxnQkFBQUEsR0FBQyxZQUFTLE9BQWMsS0FBSyxTQUFTLFNBQWtCO0FBQUEsRUFDbkU7QUFDSjtBQUtPLFNBQVMsaUJBQW9CO0FBQUEsRUFDaEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsUUFBQUU7QUFDSixHQUtHO0FBQ0MsUUFBTSxhQUFhQyxHQUFXLG9CQUFvQjtBQUNsRCxRQUFNLGdCQUFnQkosR0FBUSxNQUFNO0FBQ2hDLFFBQUlHLFdBQUEsZ0JBQUFBLFFBQVEsT0FBUSxRQUFPQSxRQUFPLE9BQU8sTUFBTSxLQUFLLE1BQU0sSUFBSTtBQUFBO0FBRTFELGFBQ0ksZ0JBQUFGLEdBQUMsUUFDRywwQkFBQUEsR0FBQyxPQUFJLFlBQXdCLFFBQVEsTUFBTSxPQUFPLE1BQU0sS0FBSyxHQUNqRTtBQUFBLEVBRVosR0FBRyxDQUFDRSxXQUFBLGdCQUFBQSxRQUFRLFFBQVEsTUFBTSxLQUFLLE1BQU0sSUFBSSxDQUFDO0FBQzFDLFFBQU0sYUFBYSxhQUFhLGFBQWE7QUFFN0MsU0FDSSxnQkFBQUYsR0FBQyxRQUFHLFdBQVUsK0JBQ1YsMEJBQUFBLEdBQUMsUUFBRyxTQUFTLE9BQVEsc0JBQVcsR0FDcEM7QUFFUjtBQUtPLFNBQVMsU0FBWSxFQUFFLE9BQU8sS0FBSyxRQUFRLEdBQTJEO0FBQ3pHLFNBQ0ksZ0JBQUFBLEdBQUMsUUFBRyxXQUFVLHNCQUFxQixPQUFPLFFBQVEsaUJBQWlCLFFBQVEsQ0FBQyxPQUFPLFFBQzlFLGtCQUFRLElBQUksQ0FBQyxRQUNWLGdCQUFBQSxHQUFDLGdCQUFhLEtBQVUsUUFBUSxLQUFLLENBQ3hDLEdBQ0w7QUFFUjtBQUtPLFNBQVMsYUFBZ0IsRUFBRSxLQUFLLFFBQUFDLFFBQU8sR0FBeUM7QUFDbkYsUUFBTSxRQUFRRixHQUFRLE1BQU1FLFFBQU8sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLQSxRQUFPLEtBQUssQ0FBQztBQUNsRSxRQUFNLENBQUMsZUFBZSxRQUFRLElBQUksb0JBQWtDO0FBQUEsSUFDaEUsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUyxDQUFDRyxPQUFNSCxRQUFPLFlBQVlBLFFBQU8sU0FBU0csSUFBRyxHQUFHO0FBQUEsRUFDN0QsQ0FBQztBQUNELFFBQU0sYUFBYUwsR0FBUSxNQUFNO0FBQzdCLFFBQUlFLFFBQU8sUUFBUTtBQUNmLFVBQUlJLEtBQUlKLFFBQU8sT0FBTyxjQUFjLFNBQVMsR0FBRztBQUNoRCxVQUFJSSxNQUFLLE9BQU9BLE1BQUssWUFBWSxXQUFXQSxHQUFHLFFBQU8sRUFBRSxHQUFHQSxJQUFHLE9BQU8sRUFBRSxHQUFHQSxHQUFFLE9BQU8sU0FBUyxFQUFFO0FBQzlGLGFBQU9BO0FBQUEsSUFDWCxNQUFPLFFBQU87QUFBQSxFQUNsQixHQUFHLENBQUMsS0FBS0osUUFBTyxRQUFRLEtBQUssQ0FBQztBQUU5QixRQUFNLFdBQVcsYUFBYSxVQUFVO0FBRXhDLFFBQU0sU0FBU0YsR0FBUSxNQUFNO0FBQ3pCLFFBQUlPO0FBQ0osUUFBSUwsUUFBTyxZQUFZQSxRQUFPLE9BQVEsQ0FBQUssS0FBSUwsUUFBTyxPQUFPLGNBQWMsU0FBUyxHQUFHO0FBQUEsUUFDN0UsQ0FBQUssS0FBSTtBQUNULFFBQUlBLEdBQUcsUUFBTyxFQUFFLEdBQUdBLElBQUcsT0FBTyxFQUFFLEdBQUdBLEdBQUUsT0FBTyxTQUFTLEVBQUU7QUFDdEQsV0FBT0E7QUFBQSxFQUNYLEdBQUcsQ0FBQyxLQUFLTCxRQUFPLFFBQVFBLFFBQU8sVUFBVSxLQUFLLENBQUM7QUFDL0MsU0FDSSxnQkFBQUQ7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNHLFlBQVksTUFBTSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsVUFBVSxDQUFDLGNBQWMsVUFBVSxDQUFDO0FBQUEsTUFDMUYsV0FBVTtBQUFBLE1BRVQsVUFBQUMsUUFBTyxXQUNKLGdCQUFBRDtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csZUFBZTtBQUFBLFVBQ2YsUUFBUTtBQUFBLFVBQ1I7QUFBQSxVQUNBLE9BQU87QUFBQTtBQUFBLE1BQ1gsSUFFQTtBQUFBO0FBQUEsRUFFUjtBQUVSO0FBS08sU0FBUyxhQUFhLFNBQWlDO0FBQzFELFFBQU0sYUFBYUcsR0FBVyxvQkFBb0I7QUFFbEQsU0FBT0osR0FBUSxNQUFNO0FBQ2pCLFFBQUksRUFBZSxPQUFPLEdBQUc7QUFDekIsYUFBTztBQUFBLElBQ1gsT0FBTztBQUNILGFBQU8sZ0JBQUFDLEdBQUMsT0FBSSxZQUF3QixRQUFRLE1BQU0sT0FBTyxTQUFnQjtBQUFBLElBQzdFO0FBQUEsRUFDSixHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ2hCO0FBRU8sU0FBUyxXQUFXO0FBQUEsRUFDdkI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNKLEdBSUc7QUFDQyxRQUFNTyxRQUFPUixHQUFRLE1BQU07QUFDdkIsUUFBSSxhQUFhLFlBQWEsUUFBTztBQUFBLGFBQzVCLGFBQWEsYUFBYyxRQUFPO0FBQzNDLFdBQU87QUFBQSxFQUNYLEdBQUcsQ0FBQyxTQUFTLENBQUM7QUFFZCxTQUNJLGdCQUFBQyxHQUFDLFNBQUksU0FBa0IsV0FDbkIsMEJBQUFBLEdBQUMsNENBQWdCLE1BQU1PLE9BQU0sR0FDakM7QUFFUjtBQUdPLElBQU0sMkJBQWdGLENBQUNYLElBQUdDLElBQUcsS0FBSyxRQUNyRyxTQUFTLFFBQVFELElBQUdDLEVBQUM7OztBQ3pTekIsSUFBTSx1QkFBdUI7QUFNdEIsU0FBUyxRQUFRO0FBQUEsRUFDcEIsY0FBYztBQUFBLEVBQ2QsTUFBTTtBQUFBLEVBQ047QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsTUFBQVc7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNKLEdBQW9DO0FBL0NwQztBQWdESSxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUksbUJBQW1CLG9DQUFlLE1BQU0sVUFBVSxZQUFZO0FBQ3RGLFNBQ0ksZ0JBQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRywwQkFBdUIsa0NBQU0sTUFBTSwwQkFBWixtQkFBb0M7QUFBQSxNQUMzRCxpQkFBYyxrQ0FBTSxNQUFNLDBCQUFaLG1CQUFvQztBQUFBLE1BQ2xELHFCQUFtQixPQUFPLE1BQU07QUFBQSxNQUNoQyxXQUFXLGVBQWUsWUFBWSxXQUFXLGNBQWMsbUJBQW1CLE1BQVM7QUFBQSxNQUUzRjtBQUFBLHdCQUFBQSxHQUFDLFNBQUksV0FBVSxpQkFBZ0IsU0FBUyxNQUFNLGVBQWUsUUFBUSxDQUFDLElBQUksR0FDckU7QUFBQSxVQUFBRCxTQUFRLGdCQUFBQyxHQUFDLFNBQUksV0FBVSxnQkFBZ0IsVUFBQUQsT0FBSztBQUFBLFVBQzdDLGdCQUFBQyxHQUFDLFNBQUksV0FBVSx1QkFBdUIsaUJBQU07QUFBQSxVQUMzQyxlQUNHLGdCQUFBQSxHQUFDLFNBQUksV0FBVyxlQUFlLGdCQUFnQixDQUFDLE9BQU8saUJBQWlCLE1BQVMsR0FDN0UsMEJBQUFBO0FBQUEsWUFBQztBQUFBO0FBQUEsY0FDRyxPQUFNO0FBQUEsY0FDTixPQUFNO0FBQUEsY0FDTixRQUFPO0FBQUEsY0FDUCxTQUFRO0FBQUEsY0FDUixNQUFLO0FBQUEsY0FDTCxRQUFPO0FBQUEsY0FDUCxnQkFBYTtBQUFBLGNBQ2Isa0JBQWU7QUFBQSxjQUNmLG1CQUFnQjtBQUFBLGNBQ2hCLE9BQU07QUFBQSxjQUVOLDBCQUFBQSxHQUFDLFVBQUssR0FBRSxnQkFBZTtBQUFBO0FBQUEsVUFDM0IsR0FDSjtBQUFBLFdBRVI7QUFBQSxRQUNDLFFBQVEsZ0JBQUFBLEdBQUMsU0FBSSxXQUFVLG1CQUFtQixVQUFTO0FBQUE7QUFBQTtBQUFBLEVBQ3hEO0FBRVI7OztBQzlDTyxTQUFTLEtBQVEsT0FBcUI7QUFDekMsUUFBTSxZQUFZQyxHQUFRLE1BQU07QUFDNUIsUUFBSSxPQUFPLE1BQU0sVUFBVSxZQUFZO0FBQ25DLGFBQU8sTUFBTSxNQUFNLE1BQU0sS0FBSztBQUFBLElBQ2xDLE9BQU87QUFDSCxhQUFPLE1BQU07QUFBQSxJQUNqQjtBQUFBLEVBQ0osR0FBRyxDQUFDLE1BQU0sT0FBTyxNQUFNLEtBQUssQ0FBQztBQUU3QixRQUFNLGVBQWVBLEdBQVEsTUFBTTtBQUMvQixRQUFJLE9BQU8sTUFBTSxZQUFZLFdBQVksUUFBTyxNQUFNLFFBQVEsTUFBTSxLQUFLO0FBQUEsUUFDcEUsUUFBTyxNQUFNO0FBQUEsRUFDdEIsR0FBRyxDQUFDLE1BQU0sT0FBTyxNQUFNLE9BQU8sQ0FBQztBQUUvQixRQUFNLGdCQUFnQkEsR0FBUSxNQUFNO0FBQ2hDLFFBQUksTUFBTSxXQUFXLFFBQVc7QUFDNUIsVUFBSSxPQUFPLE1BQU0sV0FBVyxZQUFZO0FBQ3BDLGVBQU8sTUFBTSxPQUFPLE1BQU0sS0FBSztBQUFBLE1BQ25DLE9BQU87QUFDSCxlQUFPLE1BQU07QUFBQSxNQUNqQjtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUEsRUFDWCxHQUFHLENBQUMsTUFBTSxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBRTlCLFFBQU0sZUFBZUEsR0FBUSxNQUFNO0FBQy9CLFFBQUksT0FBTyxDQUFDLHFCQUFxQjtBQUNqQyxRQUFJLE1BQU0sWUFBYSxRQUFPLEtBQUssT0FBTyxVQUFVO0FBQ3BELFdBQU87QUFBQSxFQUNYLEdBQUcsQ0FBQyxNQUFNLGFBQWEsTUFBTSxPQUFPLE1BQU0sU0FBUyxNQUFNLEtBQUssQ0FBQztBQUUvRCxTQUNJLGdCQUFBQyxHQUFDLFNBQUksV0FBVSxpQkFDWDtBQUFBLG9CQUFBQSxHQUFDLFNBQUksV0FBVyxhQUFhLEtBQUssR0FBRyxHQUFJLHFCQUFVO0FBQUEsSUFDbkQsZ0JBQUFBLEdBQUMsU0FBSSxXQUFVLHVCQUNYO0FBQUEsc0JBQUFBLEdBQUMsU0FBSSxXQUFVLHlCQUF5Qix3QkFBYTtBQUFBLE1BQ3JELGdCQUFBQSxHQUFDLFNBQUksV0FBVSx3QkFBd0IseUJBQWM7QUFBQSxPQUN6RDtBQUFBLEtBQ0o7QUFFUjs7O0FDaUVBLElBQU0saUJBQU4sTUFBTSxlQUF5QztBQUFBLEVBMERuQyxZQUFtQixRQUFzQixvQkFBMEMsU0FBUyxTQUFTO0FBQWxGO0FBQXNCO0FBQzdDLFNBQUssU0FBUyxPQUFPO0FBQUEsRUFDekI7QUFBQSxFQVRBLE9BQWMsS0FBUSxLQUFVLG9CQUEwQyxTQUFTLFNBQXVCO0FBQ3RHLFdBQU8sSUFBSSxNQUF3QixJQUFJLGVBQWlCLEtBQUssaUJBQWlCLEdBQUcsZUFBYyxXQUFXO0FBQUEsRUFDOUc7QUFBQSxFQVNRLE1BQVMsUUFBMkI7QUFDeEMsV0FBTyxlQUFjLEtBQUssUUFBUSxLQUFLLGlCQUFpQjtBQUFBLEVBQzVEO0FBQUEsRUFFTyxNQUFTLElBQXVEO0FBQ25FLFdBQU8sR0FBRyxJQUFJO0FBQUEsRUFDbEI7QUFBQSxFQUVPLE1BQU0sV0FBZ0Q7QUFDekQsV0FBTyxLQUFLLE1BQU0sS0FBSyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQUEsRUFDbkQ7QUFBQSxFQUVPLE9BQU8sV0FBZ0Q7QUFDMUQsV0FBTyxLQUFLLE1BQU0sU0FBUztBQUFBLEVBQy9CO0FBQUEsRUFFTyxJQUFPQyxJQUFrQztBQUM1QyxXQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSUEsRUFBQyxDQUFDO0FBQUEsRUFDeEM7QUFBQSxFQUVPLFFBQVdBLElBQW9DO0FBQ2xELFFBQUksU0FBUyxDQUFDO0FBQ2QsYUFBUyxRQUFRLEdBQUcsUUFBUSxLQUFLLFFBQVEsU0FBUztBQUM5QyxVQUFJLFFBQVFBLEdBQUUsS0FBSyxPQUFPLEtBQUssR0FBRyxPQUFPLEtBQUssTUFBTTtBQUNwRCxVQUFJLENBQUMsU0FBUyxNQUFNLFVBQVUsRUFBRztBQUVqQyxlQUFTQyxNQUFLLE1BQU8sUUFBTyxLQUFLQSxFQUFDO0FBQUEsSUFDdEM7QUFFQSxXQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsRUFDNUI7QUFBQSxFQUVPLE9BQU9ELElBQXFDO0FBQy9DLGFBQVMsUUFBUSxHQUFHLFFBQVEsS0FBSyxPQUFPLFFBQVEsU0FBUztBQUNyRCxNQUFBQSxHQUFFLEtBQUssT0FBTyxLQUFLLEdBQUcsT0FBTyxLQUFLLE1BQU07QUFBQSxJQUM1QztBQUVBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFTyxNQUFNLE9BQTZCO0FBQ3RDLFdBQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQUEsRUFDakQ7QUFBQSxFQUVPLE1BQU0sT0FBZ0JFLE1BQTRCO0FBQ3JELFdBQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxNQUFNLE9BQU9BLElBQUcsQ0FBQztBQUFBLEVBQ25EO0FBQUEsRUFFTyxPQUFPLE9BQW1DO0FBQzdDLFdBQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxPQUFPLE1BQU0sTUFBTSxDQUFDO0FBQUEsRUFDdEQ7QUFBQTtBQUFBLEVBR08sUUFBUSxTQUFZLFdBQTRCO0FBQ25ELFdBQU8sS0FBSyxVQUFVLENBQUNDLE9BQU0sS0FBSyxrQkFBa0JBLElBQUcsT0FBTyxLQUFLLEdBQUcsU0FBUztBQUFBLEVBQ25GO0FBQUE7QUFBQSxFQUdPLEtBQUssTUFBNEM7QUFDcEQsUUFBSSxRQUFRLEtBQUssVUFBVSxJQUFJO0FBQy9CLFFBQUksU0FBUyxHQUFJLFFBQU87QUFBQSxRQUNuQixRQUFPLEtBQUssT0FBTyxLQUFLO0FBQUEsRUFDakM7QUFBQSxFQUVPLFVBQVUsTUFBNkIsV0FBNEI7QUFDdEUsYUFBUyxRQUFRLGdDQUFhLEdBQUcsUUFBUSxLQUFLLFFBQVEsU0FBUztBQUMzRCxVQUFJLEtBQUssS0FBSyxPQUFPLEtBQUssR0FBRyxPQUFPLEtBQUssTUFBTSxFQUFHLFFBQU87QUFBQSxJQUM3RDtBQUVBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFTyxTQUFTLFNBQXFCO0FBQ2pDLFdBQU8sS0FBSyxRQUFRLFNBQVMsQ0FBQyxLQUFLO0FBQUEsRUFDdkM7QUFBQSxFQUVPLEtBQUssS0FBc0I7QUFDOUIsV0FBTyxLQUFLLElBQUksQ0FBQ0MsT0FBTSxTQUFTLFNBQVNBLEVBQUMsQ0FBQyxFQUN0QyxNQUFNLEVBQ04sS0FBSyxvQkFBTyxJQUFJO0FBQUEsRUFDekI7QUFBQSxFQUVPLEtBQVEsS0FBdUIsV0FBNEIsWUFBK0M7QUFDN0csUUFBSSxLQUFLLE9BQU8sVUFBVSxFQUFHLFFBQU87QUFDcEMsUUFBSSxpQkFBaUIsa0NBQWMsS0FBSztBQUN4QyxRQUFJLFVBQVUsb0JBQVEsQ0FBQ0MsT0FBU0E7QUFHaEMsUUFBSUMsUUFBUSxDQUFDLEVBQVksT0FBTyxLQUFLLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLFVBQVU7QUFDL0QsYUFBTyxFQUFFLE9BQWMsT0FBTyxLQUFLO0FBQUEsSUFDdkMsQ0FBQztBQUNELElBQUFBLE1BQUssS0FBSyxDQUFDQyxJQUFHQyxPQUFNO0FBQ2hCLFVBQUksT0FBTyxRQUFRRCxHQUFFLE9BQU9BLEdBQUUsT0FBTyxLQUFLLE1BQU07QUFDaEQsVUFBSSxPQUFPLFFBQVFDLEdBQUUsT0FBT0EsR0FBRSxPQUFPLEtBQUssTUFBTTtBQUNoRCxhQUFPLGNBQWMsU0FBUyxDQUFDLGVBQWUsTUFBTSxJQUFJLElBQUksZUFBZSxNQUFNLElBQUk7QUFBQSxJQUN6RixDQUFDO0FBRUQsV0FBTyxLQUFLLE1BQU1GLE1BQUssSUFBSSxDQUFDSCxPQUFNQSxHQUFFLEtBQUssQ0FBQztBQUFBLEVBQzlDO0FBQUEsRUFFTyxZQUNILEtBQ0EsV0FDQSxZQUNZO0FBQ1osUUFBSSxLQUFLLE9BQU8sVUFBVSxFQUFHLFFBQU87QUFDcEMsUUFBSSxpQkFBaUIsa0NBQWMsS0FBSztBQUN4QyxRQUFJLFVBQVUsb0JBQVEsQ0FBQ0UsT0FBU0E7QUFFaEMsU0FBSyxPQUFPLEtBQUssQ0FBQ0UsSUFBR0MsT0FBTTtBQUN2QixVQUFJLE9BQU8sUUFBUUQsRUFBQztBQUNwQixVQUFJLE9BQU8sUUFBUUMsRUFBQztBQUVwQixhQUFPLGFBQWEsU0FBUyxDQUFDLGVBQWUsTUFBTSxJQUFJLElBQUksZUFBZSxNQUFNLElBQUk7QUFBQSxJQUN4RixDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVPLFFBQVcsS0FBc0IsWUFBbUU7QUFDdkcsUUFBSSxLQUFLLE9BQU8sVUFBVSxFQUFHLFFBQU8sS0FBSyxNQUFNLENBQUMsQ0FBQztBQUlqRCxRQUFJLGVBQWUsS0FBSyxLQUFLLEtBQUssT0FBTyxVQUFVO0FBQ25ELGlCQUFhLGtDQUFjLEtBQUs7QUFFaEMsUUFBSSxTQUFrQyxDQUFDO0FBQ3ZDLFFBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2pDLFFBQUksVUFBVSxJQUFJLGFBQWEsQ0FBQyxHQUFHLEdBQUcsYUFBYSxNQUFNO0FBQ3pELGFBQVMsUUFBUSxHQUFHLFFBQVEsYUFBYSxRQUFRLFNBQVM7QUFDdEQsVUFBSSxTQUFTLElBQUksYUFBYSxLQUFLLEdBQUcsT0FBTyxhQUFhLE1BQU07QUFDaEUsVUFBSSxXQUFXLFNBQVMsTUFBTSxLQUFLLEdBQUc7QUFDbEMsZUFBTyxLQUFLLEVBQUUsS0FBSyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQzlDLGtCQUFVO0FBQ1YscUJBQWEsQ0FBQyxhQUFhLEtBQUssQ0FBQztBQUFBLE1BQ3JDLE9BQU87QUFDSCxtQkFBVyxLQUFLLGFBQWEsS0FBSyxDQUFDO0FBQUEsTUFDdkM7QUFBQSxJQUNKO0FBQ0EsV0FBTyxLQUFLLEVBQUUsS0FBSyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBRTlDLFdBQU8sS0FBSyxNQUFNLE1BQU07QUFBQSxFQUM1QjtBQUFBLEVBRU8sUUFBVyxLQUFpQyxZQUE2RDtBQUM1RyxRQUFJLFVBQVUsV0FBVyxLQUFLLE1BQU0sR0FBRztBQUNuQyxhQUFPLEtBQUssSUFBSSxDQUFDQyxPQUFNO0FBQ25CLGVBQU87QUFBQSxVQUNILEtBQU1BLEdBQVU7QUFBQSxVQUNoQixNQUFNLFVBQVUsS0FBTUEsR0FBVSxJQUFJLEVBQUUsUUFBUSxLQUFZLFVBQWlCO0FBQUEsUUFDL0U7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMLE9BQU87QUFDSCxhQUFPLEtBQUssUUFBUSxLQUFZLFVBQVU7QUFBQSxJQUM5QztBQUFBLEVBQ0o7QUFBQSxFQUVPLFNBQVksS0FBdUIsWUFBK0M7QUFDckYsUUFBSSxLQUFLLE9BQU8sVUFBVSxFQUFHLFFBQU87QUFDcEMsUUFBSSxVQUFVLG9CQUFRLENBQUNDLE9BQU1BO0FBRzdCLFFBQUksZUFBZSxLQUFLLElBQUksQ0FBQ0EsSUFBRyxVQUFVO0FBQ3RDLGFBQU8sRUFBRSxLQUFLLFFBQVFBLElBQUcsT0FBTyxLQUFLLE1BQU0sR0FBRyxPQUFPQSxHQUFFO0FBQUEsSUFDM0QsQ0FBQyxFQUFFLEtBQUssQ0FBQ0EsT0FBTUEsR0FBRSxLQUFLLE9BQU8sVUFBVTtBQUN2QyxpQkFBYSxrQ0FBYyxLQUFLO0FBRWhDLFFBQUksU0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUs7QUFDeEMsYUFBUyxRQUFRLEdBQUcsUUFBUSxhQUFhLFFBQVEsU0FBUztBQUN0RCxVQUFJLFdBQVcsYUFBYSxRQUFRLENBQUMsRUFBRSxLQUFLLGFBQWEsS0FBSyxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQ3ZFLGVBQU8sS0FBSyxhQUFhLEtBQUssRUFBRSxLQUFLO0FBQUEsTUFDekM7QUFBQSxJQUNKO0FBRUEsV0FBTyxLQUFLLE1BQU0sTUFBTTtBQUFBLEVBQzVCO0FBQUEsRUFFTyxNQUFNVixJQUFtQztBQUM1QyxXQUFPLEtBQUssT0FBTyxNQUFNQSxFQUFDO0FBQUEsRUFDOUI7QUFBQSxFQUVPLEtBQUtBLElBQW1DO0FBQzNDLFdBQU8sS0FBSyxPQUFPLEtBQUtBLEVBQUM7QUFBQSxFQUM3QjtBQUFBLEVBRU8sS0FBS0EsSUFBbUM7QUFDM0MsV0FBTyxLQUFLLE9BQU8sTUFBTSxDQUFDUyxJQUFHRSxJQUFHSixPQUFNLENBQUNQLEdBQUVTLElBQUdFLElBQUdKLEVBQUMsQ0FBQztBQUFBLEVBQ3JEO0FBQUEsRUFFTyxRQUFXO0FBQ2QsV0FBTyxLQUFLLE9BQU8sU0FBUyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUk7QUFBQSxFQUNyRDtBQUFBLEVBQ08sT0FBVTtBQUNiLFdBQU8sS0FBSyxPQUFPLFNBQVMsSUFBSSxLQUFLLE9BQU8sS0FBSyxPQUFPLFNBQVMsQ0FBQyxJQUFJO0FBQUEsRUFDMUU7QUFBQSxFQUVPLEdBQUcsS0FBNkI7QUFDbkMsUUFBSSxTQUFnQixDQUFDO0FBQ3JCLGFBQVMsU0FBUyxLQUFLLFFBQVE7QUFDM0IsVUFBSSxRQUFRLE1BQU0sR0FBRztBQUNyQixVQUFJLFVBQVUsVUFBYSxVQUFVLEtBQU07QUFFM0MsVUFBSSxNQUFNLFFBQVEsS0FBSyxLQUFLLFVBQVUsWUFBWSxLQUFLLEVBQUcsT0FBTSxRQUFRLENBQUNFLE9BQU0sT0FBTyxLQUFLQSxFQUFDLENBQUM7QUFBQSxVQUN4RixRQUFPLEtBQUssS0FBSztBQUFBLElBQzFCO0FBRUEsV0FBTyxLQUFLLE1BQU0sTUFBTTtBQUFBLEVBQzVCO0FBQUEsRUFFTyxLQUFLLEtBQTZCO0FBQ3JDLFFBQUksU0FBZ0IsQ0FBQztBQUNyQixhQUFTLFNBQVMsS0FBSyxRQUFRO0FBQzNCLFVBQUksUUFBUSxNQUFNLEdBQUc7QUFDckIsVUFBSSxVQUFVLFVBQWEsVUFBVSxLQUFNO0FBRTNDLGFBQU8sS0FBSyxLQUFLO0FBQUEsSUFDckI7QUFFQSxXQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsRUFDNUI7QUFBQSxFQUVPLE9BQU8sS0FBNkI7QUFDdkMsUUFBSSxTQUFTLENBQUM7QUFDZCxRQUFJLFFBQWdCLENBQUMsRUFBWSxPQUFPLEtBQUssTUFBTTtBQUVuRCxXQUFPLE1BQU0sU0FBUyxHQUFHO0FBQ3JCLFVBQUlHLFFBQU8sTUFBTSxJQUFJO0FBQ3JCLFVBQUksUUFBUUEsTUFBSyxHQUFHO0FBRXBCLFVBQUksVUFBVSxVQUFhLFVBQVUsS0FBTTtBQUMzQyxVQUFJLE1BQU0sUUFBUSxLQUFLLEVBQUcsT0FBTSxRQUFRLENBQUNILE9BQU0sTUFBTSxLQUFLQSxFQUFDLENBQUM7QUFBQSxlQUNuRCxpQkFBaUIsZUFBZSxPQUFNLFFBQVEsQ0FBQ0EsT0FBTSxNQUFNLEtBQUtBLEVBQUMsQ0FBQztBQUFBLFVBQ3RFLE9BQU0sS0FBSyxLQUFLO0FBRXJCLGFBQU8sS0FBS0csS0FBSTtBQUFBLElBQ3BCO0FBRUEsV0FBTyxLQUFLLE1BQU0sTUFBTTtBQUFBLEVBQzVCO0FBQUEsRUFFTyxRQUFRWixJQUF1QjtBQUNsQyxhQUFTLFFBQVEsR0FBRyxRQUFRLEtBQUssT0FBTyxRQUFRLFNBQVM7QUFDckQsTUFBQUEsR0FBRSxLQUFLLE9BQU8sS0FBSyxHQUFHLE9BQU8sS0FBSyxNQUFNO0FBQUEsSUFDNUM7QUFBQSxFQUNKO0FBQUEsRUFFTyxRQUFhO0FBQ2hCLFdBQVEsQ0FBQyxFQUFZLE9BQU8sS0FBSyxNQUFNO0FBQUEsRUFDM0M7QUFBQSxFQUVBLENBQVEsT0FBTyxRQUFRLElBQWlCO0FBQ3BDLFdBQU8sS0FBSyxPQUFPLE9BQU8sUUFBUSxFQUFFO0FBQUEsRUFDeEM7QUFBQSxFQUVPLFdBQW1CO0FBQ3RCLFdBQU8sTUFBTSxLQUFLLE9BQU8sS0FBSyxJQUFJLElBQUk7QUFBQSxFQUMxQztBQUNKO0FBaFVNLGVBQ2Esa0JBQStCLG9CQUFJLElBQUk7QUFBQSxFQUNsRDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixDQUFDO0FBckNDLGVBdUNhLGNBQWdEO0FBQUEsRUFDM0QsS0FBSyxTQUFVLFFBQVEsTUFBTSxVQUFVO0FBQ25DLFFBQUksT0FBTyxTQUFTLFNBQVUsUUFBUSxPQUFlLElBQUk7QUFBQSxhQUNoRCxPQUFPLFNBQVMsU0FBVSxRQUFPLE9BQU8sT0FBTyxJQUFJO0FBQUEsYUFDbkQsU0FBUyxjQUFlLFFBQU8sT0FBTyxPQUFPO0FBQUEsYUFDN0MsQ0FBQyxNQUFNLFNBQVMsSUFBSSxDQUFDLEVBQUcsUUFBTyxPQUFPLE9BQU8sU0FBUyxJQUFJLENBQUM7QUFBQSxhQUMzRCxlQUFjLGdCQUFnQixJQUFJLEtBQUssU0FBUyxDQUFDLEVBQUcsUUFBTyxPQUFPLEtBQUssU0FBUyxDQUFDO0FBRTFGLFdBQU8sT0FBTyxHQUFHLElBQUk7QUFBQSxFQUN6QjtBQUNKO0FBakRKLElBQU0sZ0JBQU47QUFxVU8sSUFBVTtBQUFBLENBQVYsQ0FBVWEsZUFBVjtBQUVJLFdBQVMsS0FBUSxLQUF1QztBQUMzRCxRQUFJLFlBQVksR0FBRyxFQUFHLFFBQU87QUFDN0IsV0FBTyxjQUFjLEtBQUssR0FBRztBQUFBLEVBQ2pDO0FBSE8sRUFBQUEsV0FBUztBQU1ULFdBQVNDLE1BQVEsS0FBZ0M7QUFDcEQsUUFBSSxZQUFZLEdBQUcsRUFBRyxRQUFPO0FBRTdCLFFBQUksT0FBTyxDQUFDO0FBQ1osYUFBUyxRQUFRLElBQUssTUFBSyxLQUFLLElBQUk7QUFDcEMsV0FBTyxjQUFjLEtBQUssSUFBSTtBQUFBLEVBQ2xDO0FBTk8sRUFBQUQsV0FBUyxPQUFBQztBQVNULFdBQVMsWUFBWSxLQUFpQztBQUN6RCxXQUFPLGVBQWU7QUFBQSxFQUMxQjtBQUZPLEVBQUFELFdBQVM7QUFBQSxHQWpCSDtBQXVCakIsSUFBTSxrQkFBa0IsTUFBTTtBQUM5QixNQUFNLFVBQVUsQ0FBQyxRQUFzQjtBQUNuQyxTQUFPLGdCQUFnQixHQUFHLEtBQUssVUFBVSxZQUFZLEdBQUc7QUFDNUQ7OztBQ25lTyxJQUFVO0FBQUEsQ0FBVixDQUFVRSxZQUFWO0FBRUksV0FBU0MsUUFBTyxPQUFvQztBQUN2RCxVQUFNLFVBQVUsU0FBUyxVQUFVLEtBQUs7QUFDeEMsUUFBSSxDQUFDLFFBQVMsUUFBTztBQUVyQixZQUFRLFFBQVEsTUFBTTtBQUFBLE1BQ2xCLEtBQUs7QUFDRCxlQUFPLFFBQVE7QUFBQSxNQUNuQixLQUFLO0FBQ0QsZUFBTyxLQUFLLFFBQVE7QUFBQSxNQUN4QixLQUFLO0FBQ0QsZUFBTyxrQkFBa0IsUUFBUSxPQUFPLGNBQWMscUJBQXFCO0FBQUEsTUFDL0UsS0FBSztBQUNELGVBQU8sUUFBUSxNQUFNLFNBQVM7QUFBQSxNQUNsQyxLQUFLO0FBQ0QsZUFBTyxLQUFLLFFBQVE7QUFBQSxNQUN4QjtBQUNJLGVBQU87QUFBQSxJQUNmO0FBQUEsRUFDSjtBQWxCTyxFQUFBRCxRQUFTLFNBQUFDO0FBcUJULFdBQVMsUUFBUSxPQUFxQztBQUN6RCxRQUFJLE9BQU8sVUFBVSxVQUFXLFFBQU87QUFBQSxhQUM5QixPQUFPLFVBQVUsWUFBWSxNQUFNLFlBQVksTUFBTSxPQUFRLFFBQU87QUFBQSxhQUNwRSxPQUFPLFVBQVUsWUFBWSxNQUFNLFlBQVksTUFBTSxRQUFTLFFBQU87QUFBQSxRQUN6RSxRQUFPO0FBQUEsRUFDaEI7QUFMTyxFQUFBRCxRQUFTO0FBUVQsV0FBUyxPQUFPLE9BQW9DO0FBQ3ZELFFBQUksT0FBTyxVQUFVLFNBQVUsUUFBTztBQUFBLGFBQzdCLE9BQU8sVUFBVSxVQUFVO0FBQ2hDLFlBQU0sU0FBUyxXQUFXLEtBQUs7QUFDL0IsVUFBSSxDQUFDLE1BQU0sTUFBTSxFQUFHLFFBQU87QUFBQSxVQUN0QixRQUFPO0FBQUEsSUFDaEIsTUFBTyxRQUFPO0FBQUEsRUFDbEI7QUFQTyxFQUFBQSxRQUFTO0FBVVQsV0FBUyxLQUFLLE9BQXNDO0FBQ3ZELFFBQUksaUJBQWlCLFNBQVUsUUFBTztBQUFBLGFBQzdCLE9BQU8sVUFBVSxVQUFVO0FBQ2hDLFlBQU0sU0FBUyxXQUFXLFNBQVMsTUFBTSxLQUFLO0FBQzlDLFVBQUksT0FBTyxPQUFRLFFBQU8sT0FBTztBQUFBLFVBQzVCLFFBQU87QUFBQSxJQUNoQixNQUFPLFFBQU87QUFBQSxFQUNsQjtBQVBPLEVBQUFBLFFBQVM7QUFVVCxXQUFTLFNBQVMsT0FBc0M7QUFDM0QsUUFBSSxpQkFBaUIsU0FBVSxRQUFPO0FBQUEsYUFDN0IsT0FBTyxVQUFVLFVBQVU7QUFDaEMsWUFBTSxTQUFTLFdBQVcsU0FBUyxNQUFNLEtBQUs7QUFDOUMsVUFBSSxPQUFPLE9BQVEsUUFBTyxPQUFPO0FBQUEsVUFDNUIsUUFBTztBQUFBLElBQ2hCLE1BQU8sUUFBTztBQUFBLEVBQ2xCO0FBUE8sRUFBQUEsUUFBUztBQVVULFdBQVMsS0FBSyxPQUFrQztBQUNuRCxRQUFJLGlCQUFpQixLQUFNLFFBQU87QUFBQSxhQUN6QixPQUFPLFVBQVUsVUFBVTtBQUNoQyxZQUFNLFNBQVMsV0FBVyxVQUFVLE1BQU0sS0FBSztBQUMvQyxVQUFJLE9BQU8sT0FBUSxRQUFPLE9BQU87QUFBQSxVQUM1QixRQUFPO0FBQUEsSUFDaEIsTUFBTyxRQUFPO0FBQUEsRUFDbEI7QUFQTyxFQUFBQSxRQUFTO0FBVVQsV0FBUyxNQUFNLE9BQXVDO0FBQ3pELFFBQUksTUFBTSxRQUFRLEtBQUssRUFBRyxRQUFPO0FBQUEsUUFDNUIsUUFBTyxDQUFDLEtBQUs7QUFBQSxFQUN0QjtBQUhPLEVBQUFBLFFBQVM7QUFBQSxHQXZFSDs7O0FDRFYsU0FBUyxXQUEyQjtBQUN2QyxNQUFJO0FBQ0osTUFBSTtBQUVKLFFBQU0sVUFBVSxJQUFJLFFBQVEsQ0FBQyxLQUFLLFFBQVE7QUFDdEMsY0FBVTtBQUNWLGFBQVM7QUFBQSxFQUNiLENBQUM7QUFFRCxRQUFNRSxZQUFXO0FBQ2pCLEVBQUFBLFVBQVMsVUFBVTtBQUNuQixFQUFBQSxVQUFTLFNBQVM7QUFFbEIsU0FBT0E7QUFDWDs7O0FDUU8sSUFBTSxlQUFOLE1BQU0sYUFBWTtBQUFBLEVBMEJkLFlBQW9CLE9BQWtCO0FBQWxCO0FBRjNCO0FBQUEsU0FBTyxVQUF1QyxvQkFBSSxJQUE0QjtBQUFBLEVBRWhDO0FBQUE7QUFBQSxFQUc5QyxNQUFhLEtBQUssTUFBcUIsU0FBNEQ7QUFFL0YsVUFBTSxNQUFNLEtBQUssUUFBUSxJQUFJO0FBQzdCLFVBQU0sZ0JBQWdCLEtBQUssUUFBUSxJQUFJLEdBQUc7QUFDMUMsUUFBSSxlQUFlO0FBQ2YsVUFBSSxjQUFjLFNBQVMsU0FBVSxRQUFPLE9BQU8sUUFBUSxjQUFjLE1BQU07QUFNL0UsYUFBTyxPQUFPO0FBQUEsUUFDViw0QkFBNEIsS0FBSyxTQUFTLENBQUM7QUFBQTtBQUFBLG1CQUV4QyxNQUFNLEtBQUssS0FBSyxRQUFRLE9BQU8sQ0FBQyxFQUM3QixJQUFJLENBQUMsT0FBTyxNQUFPLEdBQUcsSUFBSSxFQUMxQixLQUFLLElBQUksQ0FBQztBQUFBLE1BQ3BCO0FBQUEsSUFDSjtBQUdBLFVBQU0sV0FBVyxTQUE4QjtBQUMvQyxTQUFLLFFBQVEsSUFBSSxLQUFLLEVBQUUsTUFBTSxXQUFXLFNBQVMsVUFBVSxNQUFNLElBQUksQ0FBQztBQUV2RSxVQUFNLFNBQVMsTUFBTSxLQUFLLGFBQWEsTUFBTSxPQUFPO0FBQ3BELGFBQVMsUUFBUSxNQUFNO0FBRXZCLFFBQUksT0FBTyxZQUFZO0FBQ25CLFdBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxNQUFNLFVBQVUsTUFBTSxLQUFLLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFBQSxJQUM3RSxPQUFPO0FBQ0gsV0FBSyxRQUFRLE9BQU8sR0FBRztBQUFBLElBQzNCO0FBRUEsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR0EsTUFBYyxhQUFhLE1BQXFCLFNBQTREO0FBQ3hHLFVBQU0sY0FBYyxNQUFNLEtBQUssY0FBYyxJQUFJO0FBQ2pELFFBQUksQ0FBQyxZQUFZLFdBQVksUUFBTztBQUdwQyxVQUFNLEVBQUUsTUFBTSxTQUFTLElBQUksWUFBWTtBQUN2QyxRQUFJO0FBQ0osUUFBSTtBQUNBLGNBQVEsVUFBVSxNQUFNLFFBQVE7QUFBQSxJQUNwQyxTQUFTLE9BQU87QUFDWixhQUFPLE9BQU8sUUFBUSxvQkFBb0IsS0FBSyxTQUFTLENBQUMsMkJBQTJCLFFBQVEsS0FBSyxLQUFLLEVBQUU7QUFBQSxJQUM1RztBQUdBLFVBQU0sZUFBZSxPQUFPLE9BQU8sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFTLEdBQUcsT0FBTztBQUN4RSxRQUFJO0FBQ0EsYUFBTyxPQUFPLFFBQVEsTUFBTSxtQkFBbUIsT0FBTyxZQUFZLENBQUM7QUFBQSxJQUN2RSxTQUFTLE9BQU87QUFDWixhQUFPLE9BQU8sUUFBUSw2QkFBNkIsS0FBSyxTQUFTLENBQUMsTUFBTSxLQUFLLEVBQUU7QUFBQSxJQUNuRjtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR1EsUUFBUSxNQUE2QjtBQUN6QyxRQUFJLGdCQUFnQixLQUFNLFFBQU8sS0FBSyxhQUFhO0FBQUEsUUFDOUMsUUFBTztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdBLE1BQWMsY0FDVixNQUNtRTtBQUNuRSxVQUFNLFNBQVMsS0FBSyxNQUFNLFlBQVksSUFBSTtBQUMxQyxRQUFJLENBQUMsT0FBUSxRQUFPLE9BQU8sUUFBUSxnREFBZ0QsS0FBSyxTQUFTLENBQUM7QUFFbEcsVUFBTSxRQUFRLEtBQUssTUFBTSxNQUFNLGNBQWMsT0FBTyxLQUFNO0FBQzFELFFBQUksQ0FBQyxNQUFPLFFBQU8sT0FBTyxRQUFRLFNBQVMsT0FBTyxLQUFLLGNBQWM7QUFHckUsUUFBSSxNQUFNLFVBQVUsa0JBQWtCLEtBQUssYUFBWSxpQkFBaUI7QUFDcEUsWUFBTSxXQUFXLGFBQVksZ0JBQWdCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQztBQUVoRixVQUFJO0FBQ0EsY0FBTSxPQUFPLE1BQU0sS0FBSyxNQUFNLE1BQU0sV0FBVyxLQUFLO0FBQ3BELGVBQU8sT0FBTyxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFBQSxNQUM1QyxTQUFTLE9BQU87QUFDWixlQUFPLE9BQU8sUUFBUSx1REFBdUQsS0FBSztBQUFBLE1BQ3RGO0FBQUEsSUFDSjtBQUdBLFFBQUksa0JBQWtCLGlCQUFpQjtBQUNuQyxZQUFNLGFBQWEsT0FBTyxRQUNyQixPQUFPLENBQUNDLE9BQThCQSxHQUFFLFVBQVUsV0FBVyxFQUM3RDtBQUFBLFFBQUssQ0FBQyxPQUNILEdBQUcsV0FBVyxLQUFLLENBQUNDLGNBQWFBLFVBQVMsa0JBQWtCLEtBQUssYUFBWSxnQkFBZ0I7QUFBQSxNQUNqRztBQUVKLFVBQUksQ0FBQztBQUNELGVBQU8sT0FBTyxRQUFRLDREQUE0RCxLQUFLLFNBQVMsQ0FBQztBQUVyRyxZQUFNLFdBQ0YsYUFBWSxpQkFDUixXQUFXLFdBQVcsS0FBSyxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsS0FBSyxhQUFZLGdCQUFnQixDQUNqRztBQUNKLGNBQVEsTUFBTSxLQUFLLGNBQWMsT0FBTyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLFNBQVMsRUFBRTtBQUFBLElBQzNGLFdBQVcsa0JBQWtCLG1CQUFtQjtBQUM1QyxZQUFNLGdCQUFnQixPQUFPLFdBQVc7QUFBQSxRQUNwQyxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsS0FBSyxhQUFZO0FBQUEsTUFDdEQ7QUFDQSxVQUFJLENBQUM7QUFDRCxlQUFPLE9BQU8sUUFBUSxnQ0FBZ0MsSUFBSSw2QkFBNkI7QUFFM0YsWUFBTSxXQUFXLGFBQVksaUJBQWlCLGFBQWE7QUFDM0QsY0FBUSxNQUFNLEtBQUssY0FBYyxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sU0FBUyxFQUFFO0FBQUEsSUFDdkY7QUFFQSxXQUFPLE9BQU8sUUFBUSxrQkFBa0IsS0FBSyxTQUFTLENBQUMsNENBQTRDO0FBQUEsRUFDdkc7QUFBQTtBQUFBLEVBR0EsTUFBYyxjQUFjLE1BQWEsT0FBMkQ7QUFDaEcsUUFBSTtBQUNBLFlBQU0sTUFBTTtBQUFBLFFBQ1IsTUFBTSxLQUFLLE1BQU0sTUFBTSxXQUFXLElBQUk7QUFBQSxRQUN0QyxNQUFNLGlCQUFpQjtBQUFBLFFBQ3ZCLE1BQU0saUJBQWlCO0FBQUEsTUFDM0I7QUFFQSxVQUFJLE1BQU0sV0FBVyxTQUFVLFFBQU8sT0FBTyxRQUFRLEdBQUc7QUFBQTtBQUVwRCxlQUFPLE9BQU87QUFBQSxVQUNWLElBQ0ssTUFBTSxJQUFJLEVBQ1YsSUFBSSxDQUFDQyxVQUFTQSxNQUFLLFVBQVUsQ0FBQyxFQUM5QixLQUFLLElBQUk7QUFBQSxRQUNsQjtBQUFBLElBQ1IsU0FBUyxPQUFPO0FBQ1osYUFBTyxPQUFPLFFBQVEsbUNBQW1DLEtBQUssSUFBSSxLQUFLLEtBQUssRUFBRTtBQUFBLElBQ2xGO0FBQUEsRUFDSjtBQUNKO0FBQUE7QUF2S2EsYUFFTSxtQkFBbUQ7QUFBQSxFQUM5RCxJQUFJO0FBQUEsRUFDSixZQUFZO0FBQUEsRUFDWixZQUFZO0FBQUEsRUFDWixZQUFZO0FBQUEsRUFDWixJQUFJO0FBQUEsRUFDSixZQUFZO0FBQUEsRUFDWixLQUFLO0FBQUEsRUFDTCxhQUFhO0FBQUEsRUFDYixLQUFLO0FBQUEsRUFDTCxhQUFhO0FBQ2pCO0FBQUE7QUFiUyxhQWdCTSxrQkFBa0Q7QUFBQSxFQUM3RCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxJQUFJO0FBQUEsRUFDSixJQUFJO0FBQ1I7QUFyQkcsSUFBTSxjQUFOOzs7QUN2QkEsU0FBUyxjQUNaLE9BTUY7QUFiRjtBQWNJLFFBQU0sRUFBRSxPQUFPLGlCQUFpQixPQUFPLFVBQVUsR0FBRyxLQUFLLElBQUk7QUFDN0QsU0FDSSxnQkFBQUM7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNJLEdBQUc7QUFBQSxNQUNKLFVBQVU7QUFBQSxNQUNWLGlCQUFpQixvQ0FBTyxVQUFQLFlBQWdCO0FBQUEsTUFDakMsZUFBZTtBQUFBLFFBQVk7QUFBQSxRQUFPLENBQUNDLE9BQy9CLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLEVBQUUsR0FBRyxPQUFPLE9BQU9BLEdBQUUsRUFBRSxDQUFDO0FBQUEsTUFDMUU7QUFBQSxNQUNBLFNBQVM7QUFBQTtBQUFBLEVBQ2I7QUFFUjtBQUVPLFNBQVMsa0JBQWtCLE9BSy9CO0FBakNIO0FBa0NJLFFBQU0sRUFBRSxPQUFPLGVBQWUsSUFBSSxRQUFBQyxTQUFRLFNBQVMsSUFBSTtBQUN2RCxTQUNJLGdCQUFBRjtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csT0FBTyxvQ0FBTyxVQUFQLFlBQWdCO0FBQUEsTUFDdkIsUUFBUUU7QUFBQSxNQUNSO0FBQUE7QUFBQSxFQUNKO0FBRVI7QUFFTyxTQUFTLDRCQUE0QixPQUl6QztBQUNDLFFBQU0sRUFBRSxNQUFBQyxPQUFNLFFBQUFELFNBQVEsU0FBUyxJQUFJO0FBQ25DLFFBQU0sQ0FBQyxXQUFXLE9BQU8sSUFBSUUsR0FBU0QsS0FBSTtBQUMxQyxRQUFNLFVBQVUsT0FBT0UsT0FBcUI7QUFDeEMsWUFBU0EsR0FBRSxjQUFtQyxLQUFLO0FBRW5ELFFBQUksTUFBTSxRQUFRO0FBQ2QsVUFBSUEsR0FBRSxRQUFRLFNBQVM7QUFDbkIsUUFBQUEsR0FBRSxlQUFlO0FBQ2pCLGNBQU0sYUFBYSxXQUFXLFFBQVEsRUFBRTtBQUFBLE1BQzVDO0FBQUEsSUFDSixPQUFPO0FBQ0gsVUFBSUEsR0FBRSxRQUFRLFdBQVdBLEdBQUUsU0FBUztBQUNoQyxRQUFBQSxHQUFFLGVBQWU7QUFDakIsY0FBTSxhQUFhLFdBQVcsUUFBUSxFQUFFO0FBQUEsTUFDNUM7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLFNBQU8sZ0JBQUFMLEdBQUMsNEJBQXlCLE1BQU1HLE9BQU0sUUFBUUQsU0FBUSxVQUFvQixTQUFrQjtBQUN2RztBQUVPLFNBQVMsWUFDWixPQVNGO0FBL0VGO0FBZ0ZJLFFBQU0sRUFBRSxPQUFPLFVBQVUsZUFBZSxHQUFHLEtBQUFJLE1BQUssS0FBQUMsTUFBSyxNQUFNLEdBQUcsS0FBSyxJQUFJO0FBQ3ZFLFFBQU0sU0FBUyxvQ0FBTyxVQUFQLFlBQWdCO0FBQy9CLFNBQ0ksZ0JBQUFQO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDSSxHQUFHO0FBQUEsTUFDSixVQUFVO0FBQUEsTUFDVixjQUFjO0FBQUEsTUFDZCxLQUFLTTtBQUFBLE1BQ0wsS0FBS0M7QUFBQSxNQUNMO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxlQUFlO0FBQUEsUUFBWTtBQUFBLFFBQU8sQ0FBQ04sT0FDL0IsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsRUFBRSxHQUFHLE9BQU8sT0FBT0EsR0FBRSxFQUFFLENBQUM7QUFBQSxNQUMxRTtBQUFBO0FBQUEsRUFDSjtBQUVSO0FBRU8sU0FBUyxZQUNaLE9BT0Y7QUExR0Y7QUEyR0ksUUFBTSxFQUFFLE9BQU8sVUFBVSxlQUFlLE9BQU8sR0FBRyxLQUFLLElBQUk7QUFDM0QsU0FDSSxnQkFBQUQ7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNJLEdBQUc7QUFBQSxNQUNKLGdCQUFnQjtBQUFBLFFBQVk7QUFBQSxRQUFPLENBQUNDLE9BQ2hDLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixVQUFVLEVBQUUsR0FBRyxPQUFPLE9BQU9BLEdBQUUsRUFBRSxDQUFDO0FBQUEsTUFDMUU7QUFBQSxNQUNBLGlCQUFpQixvQ0FBTyxVQUFQLFlBQWdCO0FBQUEsTUFDakMsU0FBUztBQUFBO0FBQUEsRUFDYjtBQUVSO0FBRU8sU0FBUyxZQUFZO0FBQUEsRUFDeEIsUUFBUTtBQUFBLEVBQ1IsU0FBQU87QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQU1HO0FBQ0MsUUFBTSxnQkFBZ0I7QUFBQSxJQUFZO0FBQUEsSUFBTyxDQUFDUCxPQUN0QyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsVUFBVSxFQUFFLEdBQUcsT0FBTyxPQUFPQSxHQUFFLEVBQUUsQ0FBQztBQUFBLEVBQzFFO0FBQ0EsUUFBTVEsWUFBV0M7QUFBQSxJQUNiLENBQUMsYUFBa0I7QUFDZixVQUFJO0FBQ0osVUFBSSxNQUFNLFFBQVEsUUFBUSxHQUFHO0FBQ3pCLHFCQUFhLFNBQVMsSUFBSSxDQUFDQyxPQUFNQSxHQUFFLEtBQUs7QUFBQSxNQUM1QyxPQUFPO0FBQ0gscUJBQWEsU0FBUztBQUFBLE1BQzFCO0FBQ0Esb0JBQWMsVUFBVTtBQUFBLElBQzVCO0FBQUEsSUFDQSxDQUFDLE9BQU8sYUFBYTtBQUFBLEVBQ3pCO0FBRUEsUUFBTSxXQUFXQztBQUFBLElBQ2IsTUFBTyxNQUFNLFFBQVEsK0JBQU8sS0FBSyxJQUFJLE1BQU0sUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsWUFBWTtBQUFBLElBQzFGLENBQUMsS0FBSztBQUFBLEVBQ1Y7QUFDQSxRQUFNLFNBQVNBO0FBQUEsSUFDWCxNQUNJLFFBQ01KLFNBQVEsT0FBTyxDQUFDSyxPQUFNLFNBQVMsVUFBVSxDQUFDWixPQUFNQSxNQUFLWSxHQUFFLEtBQUssS0FBSyxFQUFFLElBQ25FTCxTQUFRLEtBQUssQ0FBQ0ssT0FBTUEsR0FBRSxVQUFTLCtCQUFPLE1BQUs7QUFBQSxJQUNyRCxDQUFDTCxVQUFTLEtBQUs7QUFBQSxFQUNuQjtBQUNBLFNBQ0ksZ0JBQUFSO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxpQkFBZ0I7QUFBQSxNQUNoQixVQUFVLENBQUNjLE9BQU1MLFVBQVNLLEVBQUM7QUFBQSxNQUMzQixVQUFRO0FBQUEsTUFDUixTQUFTLHdCQUFTO0FBQUEsTUFDbEIsU0FBU047QUFBQSxNQUNULGtCQUFrQixTQUFTO0FBQUEsTUFDM0IsY0FBYztBQUFBLE1BQ2QsWUFBWTtBQUFBLFFBQ1IsT0FBTyxNQUFNO0FBQUEsUUFDYixnQkFBZ0IsTUFBTTtBQUFBLFFBQ3RCLFdBQVcsTUFBTTtBQUFBLFFBQ2pCLE1BQU0sTUFBTTtBQUFBLFFBQ1osUUFBUSxDQUFDLFVBQWUsa0JBQWtCLE1BQU0sYUFBYSxpQkFBaUIsRUFBRTtBQUFBLE1BQ3BGO0FBQUE7QUFBQSxFQUNKO0FBRVI7OztBQ2pLTyxJQUFVO0FBQUEsQ0FBVixDQUFVTyxlQUFWO0FBQ0ksV0FBUyxtQkFBc0IsTUFBd0M7QUFDMUUsV0FDSSxjQUFjLFFBQ2QsV0FBVyxRQUNYLENBQUMsTUFBTSxRQUFRLElBQUksS0FDbkIsT0FBTyxLQUFLLElBQUksRUFBRSxVQUFVLEtBQzVCLE1BQU0sUUFBUSxLQUFLLFFBQVE7QUFBQSxFQUVuQztBQVJPLEVBQUFBLFdBQVM7QUFTVCxXQUFTLGVBQWtCQyxPQUEyQixNQUFlLE1BQWM7QUFDdEYsUUFBSSxTQUFTO0FBQ2IsUUFBSSxDQUFDLElBQUs7QUFDVixhQUFTQyxNQUFLRCxNQUFLLFNBQVUsV0FBVSxlQUFlQyxJQUFHLEtBQUs7QUFDOUQsV0FBTztBQUFBLEVBQ1g7QUFMTyxFQUFBRixXQUFTO0FBTVQsV0FBUyxRQUFXLFFBQWEsU0FBZ0Q7QUFDcEYsVUFBTSxTQUFTLENBQUMsT0FBK0I7QUFDM0MsYUFBTztBQUFBLFFBQ0gsT0FBTztBQUFBLFFBQ1AsVUFBVSxRQUFRLEVBQUUsRUFBRSxJQUFJLE1BQU07QUFBQSxNQUNwQztBQUFBLElBQ0o7QUFDQSxXQUFPLE9BQU8sSUFBSSxNQUFNO0FBQUEsRUFDNUI7QUFSTyxFQUFBQSxXQUFTO0FBU1QsV0FBUyxPQUFVLFFBQVcsU0FBOEM7QUFDL0UsV0FBTztBQUFBLE1BQ0gsT0FBTztBQUFBLE1BQ1AsVUFBVSxRQUFRLFFBQVEsTUFBTSxHQUFHLE9BQU87QUFBQSxJQUM5QztBQUFBLEVBQ0o7QUFMTyxFQUFBQSxXQUFTO0FBT1QsV0FBUyxXQUFjLFVBQXVCLFNBQXdEO0FBQ3pHLFVBQU0sU0FBUyxDQUFDRyxPQUFvRjtBQUNoRyxVQUFJLFVBQVUsZUFBZUEsRUFBQztBQUMxQixlQUFPLEVBQUUsS0FBS0EsR0FBRSxLQUFLLE1BQU1BLEdBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUNsRCxhQUFPO0FBQUEsUUFDSCxPQUFPQTtBQUFBLFFBQ1AsVUFBVSxRQUFRQSxFQUFDLEVBQUUsSUFBSSxNQUFNO0FBQUEsTUFDbkM7QUFBQSxJQUNKO0FBQ0EsV0FBTyxTQUFTLElBQUksTUFBTTtBQUFBLEVBQzlCO0FBVk8sRUFBQUgsV0FBUztBQVlULFdBQVMsTUFBUyxVQUFxRjtBQUMxRyxRQUFJLFVBQVUsZUFBZSxRQUFRLEdBQUc7QUFDcEMsYUFBTyxNQUFNLFNBQVMsSUFBSTtBQUFBLElBQzlCLFdBQVcsVUFBVSxXQUFXLFFBQVEsR0FBRztBQUN2QyxVQUFJLFNBQVM7QUFDYixlQUFTLFNBQVMsU0FBVSxXQUFVLE1BQU0sTUFBTSxJQUFJO0FBQ3RELGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxhQUFPLFNBQVMsT0FBTyxDQUFDLElBQUksT0FBTyxLQUFLLGVBQWUsRUFBRSxHQUFHLENBQUM7QUFBQSxJQUNqRTtBQUFBLEVBQ0o7QUFWTyxFQUFBQSxXQUFTO0FBWWhCLFdBQVMsZUFBa0IsVUFBaUMsT0FBZUksTUFBb0M7QUFDM0csUUFBSUEsUUFBTyxNQUFPLFFBQU8sQ0FBQztBQUUxQixRQUFJLFFBQVEsR0FDUixPQUFPO0FBQ1gsV0FBTyxRQUFRLFNBQVMsVUFBVSxPQUFPLGVBQWUsU0FBUyxLQUFLLENBQUMsS0FBSyxPQUFPO0FBQy9FLGNBQVEsZUFBZSxTQUFTLEtBQUssQ0FBQztBQUN0QztBQUFBLElBQ0o7QUFFQSxRQUFJLFNBQVMsU0FBUyxPQUFRLFFBQU8sQ0FBQztBQUV0QyxVQUFNLFNBQWdDLENBQUM7QUFDdkMsV0FBTyxRQUFRLFNBQVMsVUFBVSxPQUFPQSxNQUFLO0FBQzFDLFlBQU0sUUFBUSxTQUFTLEtBQUs7QUFDNUIsWUFBTSxZQUFZLGVBQWUsS0FBSztBQUN0QyxZQUFNLGFBQWEsS0FBSyxJQUFJLE1BQU0sS0FBSztBQUN2QyxZQUFNLFdBQVcsS0FBSyxJQUFJLFlBQVksTUFBTUEsSUFBRztBQUUvQyxhQUFPLEtBQUs7QUFBQSxRQUNSLE9BQU8sTUFBTTtBQUFBLFFBQ2IsVUFBVSxlQUFlLE1BQU0sVUFBVSxhQUFhLE1BQU0sV0FBVyxJQUFJO0FBQUEsTUFDL0UsQ0FBQztBQUVELGNBQVE7QUFDUjtBQUFBLElBQ0o7QUFFQSxXQUFPO0FBQUEsRUFDWDtBQUVPLFdBQVNDLE9BQ1osVUFDQSxPQUNBRCxNQUM2QjtBQUM3QixRQUFJRSxXQUFVLENBQUMsR0FBRyxVQUFVLE1BQU0sVUFBVSxPQUFPRixJQUFHLENBQUM7QUFDdkQsUUFBSSxRQUFRLEdBQ1IsT0FBTztBQUVYLGFBQVMsV0FBV0UsVUFBUztBQUN6QixVQUFJLFVBQVUsZUFBZSxPQUFPLEdBQUc7QUFDbkMsWUFBSSxZQUFZLFVBQVUsTUFBTSxRQUFRO0FBQ3hDLFlBQUksYUFBYSxLQUFLLElBQUksTUFBTSxLQUFLO0FBQ3JDLFlBQUksV0FBVyxLQUFLLElBQUksV0FBV0YsSUFBRztBQUN0QyxRQUFDRSxTQUFRLEtBQUssRUFBd0MsT0FBTyxVQUFVO0FBQUEsVUFDbkUsUUFBUTtBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsUUFDSjtBQUNBLGdCQUFRO0FBQUEsTUFDWixPQUFPO0FBQ0gsZ0JBQVEsZUFBZSxPQUFPO0FBQUEsTUFDbEM7QUFDQTtBQUFBLElBQ0o7QUFDQSxXQUFPQTtBQUFBLEVBQ1g7QUExQk8sRUFBQU4sV0FBUyxRQUFBSztBQTRCVCxXQUFTLEtBQ1osTUFDQSxhQUsyRDtBQUMzRCxVQUFNLGlCQUFpQixDQUNuQkUsSUFDQUMsT0FDUztBQUNULGVBQVMsUUFBUSxhQUFhO0FBQzFCLGNBQU0sWUFBWSxLQUFLLFVBQVUsa0JBQWtCLE1BQU0sY0FBYyxJQUFJO0FBQzNFLFlBQUksU0FBUztBQUNiLFlBQUksVUFBVSxlQUFlRCxFQUFDLEtBQUssVUFBVSxlQUFlQyxFQUFDLEdBQUc7QUFDNUQsbUJBQVM7QUFBQSxRQUNiLFdBQVcsQ0FBQyxVQUFVLGVBQWVELEVBQUMsS0FBSyxDQUFDLFVBQVUsZUFBZUMsRUFBQyxHQUFHO0FBQ3JFLG1CQUNJLFlBQVksS0FBSyxHQUFHLEtBQUssWUFBWUQsR0FBRSxLQUFLLEdBQUcsS0FBSyxZQUFZQyxHQUFFLEtBQUssR0FBR0QsR0FBRSxPQUFPQyxHQUFFLEtBQUs7QUFBQSxRQUNsRztBQUNBLFlBQUksVUFBVSxFQUFHLFFBQU87QUFBQSxNQUM1QjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBQ0EsVUFBTSxNQUFNLENBQ1JDLE9BQzBEO0FBQzFELFVBQUlDO0FBQ0osVUFBSSxVQUFVLGVBQWVELEVBQUM7QUFDMUIsUUFBQUMsS0FBSSxFQUFFLEdBQUdELElBQUcsTUFBTSxLQUFLQSxHQUFFLE1BQU0sV0FBVyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQUEsVUFDcEQsQ0FBQUMsS0FBSSxFQUFFLEdBQUdELElBQUcsVUFBVSxLQUFLQSxHQUFFLFVBQVUsV0FBVyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ2xFLGFBQU9DO0FBQUEsSUFDWDtBQUNBLFdBQU8sS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLGNBQWM7QUFBQSxFQUM1QztBQW5DTyxFQUFBVixXQUFTO0FBQUEsR0FuSEg7QUF5SmpCLFNBQVMsU0FBWSxPQUFnQyxNQUFhO0FBQzlELFFBQU0sTUFBTVc7QUFBQSxJQUNSLENBQUMsT0FBZ0U7QUFDN0QsVUFBSSxVQUFVLGVBQWUsRUFBRSxHQUFHO0FBQzlCLGVBQU8sR0FBRztBQUFBLE1BQ2QsT0FBTztBQUNILGVBQU8sR0FBRyxHQUFHLEtBQUs7QUFBQSxNQUN0QjtBQUFBLElBQ0o7QUFBQSxJQUNBLENBQUMsR0FBRyxJQUFJO0FBQUEsRUFDWjtBQUNBLFNBQU87QUFDWDtBQWtDTyxTQUFTLGlCQUFvQixPQUEwQixRQUErQztBQUN6RyxVQUFRLE9BQU8sTUFBTTtBQUFBLElBQ2pCLEtBQUs7QUFDRCxVQUFJLE9BQU8sYUFBYSxRQUFXO0FBQy9CLGVBQU8sRUFBRSxHQUFHLE9BQU8sUUFBUSxPQUFVO0FBQUEsTUFDekMsT0FBTztBQUNILGVBQU87QUFBQSxVQUNILEdBQUc7QUFBQSxVQUNILFFBQVE7QUFBQSxZQUNKO0FBQUEsY0FDSSxNQUFNO0FBQUEsY0FDTixJQUFJLE9BQU87QUFBQSxjQUNYLFdBQVcsT0FBTztBQUFBLFlBQ3RCO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSixLQUFLO0FBQ0QsWUFBTSxTQUFTLG9CQUFJLElBQXFCO0FBQ3hDLFVBQUksQ0FBQyxNQUFNLFFBQVMsUUFBTyxFQUFFLEdBQUcsTUFBTTtBQUN0QyxpQkFBV0MsTUFBSyxNQUFNLFFBQVEsS0FBSyxFQUFHLFFBQU8sSUFBSUEsSUFBRyxNQUFNLFFBQVEsSUFBSUEsRUFBQyxDQUFFO0FBQ3pFLGFBQU8sSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLEdBQUcsT0FBTyxRQUFRO0FBQ2hELGFBQU8sRUFBRSxHQUFHLE9BQU8sU0FBUyxPQUFPO0FBQUEsSUFDdkMsS0FBSztBQUNELGFBQU8sRUFBRSxHQUFHLE9BQU8sU0FBUyxPQUFPLFNBQVM7QUFBQSxFQUNwRDtBQUNBLFVBQVEsS0FBSyxtREFBb0QsT0FBOEIsSUFBSTtBQUNuRyxTQUFPO0FBQ1g7QUFFTyxTQUFTLHFCQUNaTixVQUNpRDtBQUNqRCxRQUFNLE9BQU9PLEdBQVEsTUFBTyxPQUFPUCxZQUFXLGFBQWFBLFNBQVEsSUFBSUEsVUFBVSxDQUFDLENBQUM7QUFDbkYsU0FBT1EsR0FBVyxrQkFBb0UsSUFBSTtBQUM5RjtBQVFPLElBQU0sbUJBQW1CLEVBQXVELElBQUk7QUFFcEYsU0FBUyx1QkFBMEI7QUFDdEMsU0FBTztBQUNYO0FBRU8sU0FBUyxvQkFBdUI7QUFBQSxFQUNuQyxRQUFBQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FJRztBQUNDLFFBQU0sRUFBRSxTQUFTLElBQUlDLEdBQVcscUJBQXdCLENBQUM7QUFDekQsUUFBTSxTQUF5QkgsR0FBUSxNQUFNO0FBQ3pDLFFBQUksQ0FBQ0UsUUFBTyxNQUFPLFFBQU9BLFFBQU87QUFBQSxhQUN4QixPQUFPQSxRQUFPLFVBQVUsV0FBWSxRQUFPQSxRQUFPLE1BQU07QUFBQSxRQUM1RCxRQUFPQSxRQUFPO0FBQUEsRUFDdkIsR0FBRyxDQUFDQSxRQUFPLElBQUlBLFFBQU8sS0FBSyxDQUFDO0FBRTVCLFFBQU0sY0FBYztBQUFBLElBQ2hCLENBQUMsV0FBdUI7QUFDcEIsVUFBSSxRQUFRLE9BQVcsVUFBUyxFQUFFLE1BQU0sZUFBZSxRQUFRQSxRQUFPLElBQUksV0FBVyxZQUFZLENBQUM7QUFBQSxlQUN6RixRQUFRLFlBQWEsVUFBUyxFQUFFLE1BQU0sZUFBZSxRQUFRQSxRQUFPLElBQUksV0FBVyxhQUFhLENBQUM7QUFBQSxVQUNyRyxVQUFTLEVBQUUsTUFBTSxlQUFlLFFBQVFBLFFBQU8sSUFBSSxXQUFXLE9BQVUsQ0FBQztBQUFBLElBQ2xGO0FBQUEsSUFDQSxDQUFDQSxRQUFPLEVBQUU7QUFBQSxFQUNkO0FBRUEsUUFBTSxZQUFZRjtBQUFBLElBQ2QsTUFBT0UsUUFBTyxVQUFVLFlBQVksUUFBUUEsUUFBTyxVQUFVLFlBQVksU0FBU0EsUUFBTyxRQUFRO0FBQUEsSUFDakcsQ0FBQ0EsUUFBTyxLQUFLO0FBQUEsRUFDakI7QUFDQSxTQUNJLGdCQUFBRSxHQUFDLFFBQUcsT0FBTyxXQUFXLFdBQVUsOEJBQzVCLDBCQUFBQSxHQUFDLFNBQUksV0FBVSxzQ0FDVjtBQUFBLGdCQUFZLGdCQUFBQSxHQUFDLGNBQVcsV0FBVSx1QkFBc0IsV0FBVyxNQUFNLFNBQVMsYUFBYTtBQUFBLElBQ2hHLGdCQUFBQSxHQUFDLFNBQUksU0FBUyxhQUFhLFdBQVUsK0JBQ2hDLGtCQUNMO0FBQUEsS0FDSixHQUNKO0FBRVI7QUFFTyxTQUFTLHFCQUF3QjtBQUFBLEVBQ3BDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFFBQUFDO0FBQ0osR0FLRztBQUNDLFFBQU0sYUFBYUYsR0FBVyxvQkFBb0I7QUFDbEQsUUFBTSxnQkFBZ0JILEdBQVEsTUFBTTtBQUNoQyxRQUFJSyxXQUFBLGdCQUFBQSxRQUFRLE9BQVEsUUFBT0EsUUFBTyxPQUFPLE1BQU0sS0FBSyxNQUFNLElBQUk7QUFBQTtBQUUxRCxhQUNJLGdCQUFBRCxHQUFDLFFBQ0csMEJBQUFBLEdBQUMsT0FBSSxZQUF3QixRQUFRLE1BQU0sT0FBTyxNQUFNLEtBQUssR0FDakU7QUFBQSxFQUVaLEdBQUcsQ0FBQ0MsV0FBQSxnQkFBQUEsUUFBUSxRQUFRLE1BQU0sS0FBSyxNQUFNLElBQUksQ0FBQztBQUMxQyxRQUFNLGFBQWEsYUFBYSxhQUFhO0FBRTdDLFNBQ0ksZ0JBQUFELEdBQUMsUUFBRyxXQUFVLCtCQUNWLDBCQUFBQSxHQUFDLFFBQUcsT0FBTyxFQUFFLGFBQWEsR0FBRyxRQUFRLElBQUksS0FBSyxHQUFHLFNBQVMsUUFBUSxHQUM3RCxzQkFDTCxHQUNKO0FBRVI7QUFDTyxTQUFTLGtCQUFxQjtBQUFBLEVBQ2pDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FLRztBQUNDLFFBQU0sRUFBRSxHQUFHLElBQUlELEdBQVcscUJBQXdCLENBQUM7QUFDbkQsUUFBTSxRQUFRLFNBQVMsRUFBRTtBQUN6QixRQUFNLGFBQWEsWUFBWSxLQUFLLElBQUksVUFBVSxTQUFTLEdBQUcsS0FBSyxJQUFJO0FBQ3ZFLE1BQUksVUFBVSxlQUFlLE9BQU8sR0FBRztBQUNuQyxVQUFNLGlCQUFpQixZQUFZLFVBQVUsVUFBVSxJQUFJO0FBQzNELFdBQ0ksZ0JBQUFDLEdBQUMsS0FDRztBQUFBLHNCQUFBQSxHQUFDLHdCQUFxQixPQUFjLE9BQU8sU0FBUyxPQUFPLFFBQVEsUUFBUSxRQUFRLGdCQUFnQjtBQUFBLE1BQ2xHLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFDZixnQkFBQUEsR0FBQyxxQkFBcUIsT0FBTyxRQUFRLEdBQUcsU0FBa0IsU0FBUyxLQUFLLFdBQXNCLENBQ2pHO0FBQUEsU0FKVSxNQUFNLE9BQU8sQ0FLNUI7QUFBQSxFQUVSLE9BQU87QUFDSCxXQUFPLGdCQUFBQSxHQUFDLGdCQUFhLEtBQUssU0FBUyxTQUFrQixPQUFPLFFBQVEsYUFBYSxLQUFRLE1BQU0sT0FBTyxDQUFHO0FBQUEsRUFDN0c7QUFDSjtBQUVPLFNBQVMscUJBQXdCLEVBQUUsS0FBSyxNQUFNLEdBQThCO0FBQy9FLFFBQU0sRUFBRSxTQUFTLFVBQVUsR0FBRyxJQUFJRCxHQUFXLHFCQUF3QixDQUFDO0FBQ3RFLFFBQU0sT0FBT0gsR0FBUSxNQUFHO0FBaFg1QjtBQWdYK0IseUJBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFuQixZQUF3QjtBQUFBLEtBQU8sQ0FBQyxLQUFLLFNBQVMsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hHLFNBQ0ksZ0JBQUFJO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxTQUFTLE1BQU0sU0FBUyxFQUFFLE1BQU0sY0FBYyxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUM7QUFBQSxNQUNwRSxPQUFPLEVBQUUsYUFBYSxJQUFJLFFBQVEsS0FBSyxLQUFLLEtBQUs7QUFBQSxNQUVqRCwwQkFBQUEsR0FBQyxTQUFJLFdBQVcsZUFBZSxzQkFBc0IsQ0FBQyxPQUFPLGlCQUFpQixNQUFTLEdBQUcsS0FBSSxRQUMxRiwwQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNHLE9BQU07QUFBQSxVQUNOLE9BQU07QUFBQSxVQUNOLFFBQU87QUFBQSxVQUNQLFNBQVE7QUFBQSxVQUNSLE1BQUs7QUFBQSxVQUNMLFFBQU87QUFBQSxVQUNQLGdCQUFhO0FBQUEsVUFDYixrQkFBZTtBQUFBLFVBQ2YsbUJBQWdCO0FBQUEsVUFDaEIsV0FBVTtBQUFBLFVBRVYsMEJBQUFBLEdBQUMsVUFBSyxHQUFFLG1CQUFrQjtBQUFBO0FBQUEsTUFDOUIsR0FDSjtBQUFBO0FBQUEsRUFDSjtBQUVSO0FBRU8sU0FBUyxhQUFnQjtBQUFBLEVBQzVCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQUlHO0FBQ0MsUUFBTSxFQUFFLFNBQVMsR0FBRyxJQUFJRCxHQUFXLHFCQUF3QixDQUFDO0FBQzVELFFBQU0sT0FBT0gsR0FBUSxNQUFNLFFBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLFFBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUM1RyxRQUFNLGNBQWNBLEdBQVEsTUFBTSxJQUFJLFNBQVMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUM7QUFDekYsU0FDSSxnQkFBQUksR0FBQyxLQUNHO0FBQUEsb0JBQUFBLEdBQUMsUUFBRyxXQUFVLHNCQUNUO0FBQUEsb0JBQWMsZ0JBQUFBLEdBQUMsd0JBQXdCLE9BQWMsS0FBSyxJQUFJLE9BQU8sSUFBSyxnQkFBQUEsR0FBQyxRQUFHO0FBQUEsTUFDOUUsUUFBUSxJQUFJLENBQUMsS0FBS0UsT0FDZixnQkFBQUYsR0FBQyxvQkFBb0IsS0FBVSxRQUFRLEtBQUssT0FBYyxTQUFTRSxNQUFLLEdBQUcsQ0FDOUU7QUFBQSxPQUNMO0FBQUEsSUFDQyxPQUNLLElBQUksU0FBUyxJQUFJLENBQUMsVUFDZCxnQkFBQUYsR0FBQyxnQkFBYSxLQUFLLE9BQU8sU0FBa0IsT0FBTyxRQUFRLEtBQVEsR0FBRyxNQUFNLEtBQUssQ0FBRyxDQUN2RixJQUNEO0FBQUEsS0FDVjtBQUVSO0FBRU8sU0FBUyxpQkFBb0I7QUFBQSxFQUNoQztBQUFBLEVBQ0EsUUFBQUY7QUFBQSxFQUNBO0FBQUEsRUFDQSxVQUFVO0FBQ2QsR0FLRztBQUNDLFFBQU0sUUFBUUYsR0FBUSxNQUFNRSxRQUFPLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLE9BQU9BLFFBQU8sT0FBT0EsUUFBTyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7QUFDdkcsUUFBTSxVQUFVSjtBQUFBLElBQ1osQ0FBQ1MsT0FBZTtBQUNaLE1BQUFMLFFBQU8sWUFBWUEsUUFBTyxTQUFTSyxJQUFHLElBQUksS0FBSztBQUFBLElBQ25EO0FBQUEsSUFDQSxDQUFDLE9BQU8sSUFBSSxLQUFLO0FBQUEsRUFDckI7QUFDQSxRQUFNLENBQUMsZUFBZSxRQUFRLElBQUksb0JBQWtDO0FBQUEsSUFDaEUsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUyxDQUFDQSxPQUFNTCxRQUFPLFlBQVlBLFFBQU8sU0FBU0ssSUFBRyxJQUFJLEtBQUs7QUFBQSxFQUNuRSxDQUFDO0FBQ0QsRUFBQUMsR0FBVSxNQUFNO0FBQ1osYUFBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsTUFBTSxDQUFDO0FBQUEsRUFDekQsR0FBRyxDQUFDLE9BQU8sT0FBTyxDQUFDO0FBQ25CLE1BQUksaUJBQWlCTixRQUFPLFNBQVNBLFFBQU8sT0FBTyxjQUFjLFNBQVMsSUFBSSxLQUFLLElBQUk7QUFDdkYsUUFBTSxhQUFhRixHQUFRLE1BQU07QUFDN0IsUUFBSSxrQkFBa0IsT0FBTyxrQkFBa0IsWUFBWSxXQUFXO0FBQ2xFLGFBQU8sT0FBTyxPQUFPLGdCQUFnQixFQUFFLE9BQU8sT0FBTyxPQUFPLGVBQWUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFBQSxRQUNoRyxRQUFPO0FBQUEsRUFDaEIsR0FBRyxDQUFDRSxRQUFPLFFBQVEsT0FBTyxjQUFjLFNBQVMsZ0JBQWdCLElBQUksT0FBTyxPQUFPLENBQUM7QUFFcEYsUUFBTSxXQUFXLGFBQWEsVUFBVTtBQUV4QyxRQUFNLFNBQVNGLEdBQVEsTUFBTTtBQUN6QixRQUFJUztBQUNKLFFBQUlQLFFBQU8sWUFBWUEsUUFBTyxPQUFRLENBQUFPLEtBQUlQLFFBQU8sT0FBTyxjQUFjLFNBQVMsSUFBSSxLQUFLO0FBQUEsUUFDbkYsQ0FBQU8sS0FBSTtBQUNULFFBQUlBLEdBQUcsUUFBTyxPQUFPLE9BQU9BLElBQUcsRUFBRSxPQUFPLE9BQU8sT0FBT0EsR0FBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUM5RSxXQUFPQTtBQUFBLEVBQ1gsR0FBRyxDQUFDUCxRQUFPLFFBQVFBLFFBQU8sVUFBVSxjQUFjLFNBQVMsSUFBSSxLQUFLLENBQUM7QUFFckUsU0FDSSxnQkFBQUU7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNHLE9BQU8sRUFBRSxhQUFhLFVBQVUsSUFBSSxRQUFRLEtBQUssR0FBRyxPQUFPLE9BQVU7QUFBQSxNQUNyRSxZQUFZLE1BQU0sU0FBUyxFQUFFLE1BQU0sbUJBQW1CLFVBQVUsQ0FBQyxjQUFjLFVBQVUsQ0FBQztBQUFBLE1BQzFGLFdBQVU7QUFBQSxNQUVULFVBQUFGLFFBQU8sV0FDSixnQkFBQUU7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNHLGVBQWU7QUFBQSxVQUNmLFFBQVE7QUFBQSxVQUNSO0FBQUEsVUFDQSxPQUFPO0FBQUE7QUFBQSxNQUNYLElBRUE7QUFBQTtBQUFBLEVBRVI7QUFFUjtBQUVPLFNBQVMsd0JBQ1osT0FDRjtBQUNFLFFBQU0sVUFBVSxhQUFhLE1BQU0sU0FBUyxDQUFDVixJQUFHQyxPQUFNO0FBQ2xELFFBQUlELEdBQUUsVUFBVUMsR0FBRSxPQUFRLFFBQU87QUFDakMsV0FBT0QsR0FBRSxNQUFNLENBQUMsT0FBTyxVQUFVLFNBQVNDLEdBQUUsS0FBSyxDQUFDO0FBQUEsRUFDdEQsQ0FBQztBQUNELFFBQU0sZ0JBQWdCSyxHQUFRLE1BQU07QUFDaEMsUUFBSSxVQUFVLFdBQVcsTUFBTSxJQUFJLEVBQUcsUUFBTyxVQUFVLE1BQU0sTUFBTSxJQUFJO0FBQUE7QUFFbkUsYUFBTyxNQUFNLEtBQUs7QUFBQSxRQUNkLENBQUMsSUFBSSxPQUFPLEtBQUssVUFBVSxlQUFlLFVBQVUsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQUEsUUFDbkY7QUFBQSxNQUNKO0FBQUEsRUFDUixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDZixRQUFNLFdBQVdVLEdBQXVCLElBQUk7QUFDNUMsUUFBTSxTQUFTLGtCQUFrQjtBQUFBLElBQzdCLGFBQWE7QUFBQSxJQUNiLFFBQVEsTUFBTTtBQUFBLElBQ2Qsb0JBQW9CLE1BQU07QUFBQSxJQUMxQixVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsRUFDZixDQUFDO0FBQ0QsUUFBTSxXQUFXLGFBQWEsTUFBTSxRQUFRLENBQUNoQixJQUFHQyxPQUFNLFNBQVMsUUFBUUQsSUFBR0MsRUFBQyxLQUFLLENBQUM7QUFDakYsUUFBTSxRQUFRSyxHQUFRLE1BQU07QUFDeEIsV0FBTyxxQ0FBVSxPQUFPLENBQUMsU0FBUztBQS9mMUM7QUFnZ0JZLFlBQU1FLFVBQVMsUUFBUSxLQUFLLENBQUMsUUFBUSxJQUFJLE1BQU0sS0FBSyxFQUFFO0FBQ3RELGFBQU9BLGFBQVcsS0FBQUEsUUFBTyxhQUFQLFlBQW1CO0FBQUEsSUFDekM7QUFBQSxFQUNKLEdBQUcsQ0FBQyxTQUFTLFFBQVEsQ0FBQztBQUN0QixRQUFNLFlBQVlGLEdBQVEsTUFBTTtBQUM1QixRQUFJLENBQUMsTUFBTSxVQUFXLFFBQU87QUFDN0IsUUFBSSxNQUFNLFFBQVEsTUFBTSxTQUFTLEVBQUcsUUFBTyxNQUFNO0FBRWpELFFBQUksU0FBUyxXQUFXLE1BQU0sU0FBUyxFQUFHLFFBQU8sQ0FBQyxFQUFFLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFBQSxRQUN4RSxRQUFPLENBQUMsTUFBTSxTQUFTO0FBQUEsRUFDaEMsR0FBRyxDQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3BCLFFBQU0sVUFBVUEsR0FBUSxNQUFNO0FBQzFCLFFBQUksQ0FBQyxVQUFVLFdBQVcsTUFBTSxJQUFJLEVBQUcsUUFBTyxVQUFVLFFBQVEsTUFBTSxNQUFNLE1BQU0sYUFBYTtBQUMvRixXQUFPLFVBQVUsV0FBVyxNQUFNLE1BQU0sTUFBTSxhQUFhO0FBQUEsRUFDL0QsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ2YsUUFBTSxPQUFPQSxHQUFRLE1BQU07QUFDdkIsUUFBSSxTQUFTLFVBQWEsTUFBTSxVQUFVLEVBQUcsUUFBTztBQUNwRCxVQUFNLGNBQWMsTUFBTSxJQUFJLENBQUNHLE9BQU07QUFqaEI3QztBQWtoQlksWUFBTSxNQUFNLFFBQVEsS0FBSyxDQUFDSyxPQUFNQSxHQUFFLE1BQU1MLEdBQUUsRUFBRTtBQUM1QyxZQUFNLFFBQU8sZ0NBQUssZUFBTCxZQUFtQjtBQUNoQyxhQUFPO0FBQUEsUUFDSCxJQUFJO0FBQUEsUUFDSixXQUFXQSxHQUFFO0FBQUEsUUFDYixhQUFhLElBQUk7QUFBQSxNQUNyQjtBQUFBLElBQ0osQ0FBQztBQUNELFdBQU8sVUFBVSxLQUFpQixTQUFTLFdBQVc7QUFBQSxFQUMxRCxHQUFHLENBQUMsU0FBUyxLQUFLLENBQUM7QUFFbkIsUUFBTSxZQUFZSCxHQUFRLE1BQU07QUFDNUIsUUFBSSxPQUFPO0FBQ1AsYUFBTyxVQUFVLE1BQU0sTUFBTSxPQUFPLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxLQUFLLE9BQU8sUUFBUTtBQUNuRyxXQUFPO0FBQUEsRUFDWCxHQUFHLENBQUMsT0FBTyxNQUFNLE9BQU8sVUFBVSxPQUFPLFNBQVMsTUFBTSxNQUFNLElBQUksQ0FBQztBQUVuRSxRQUFNLFFBQVEsU0FBUyxNQUFNLElBQUksU0FBUztBQUMxQyxRQUFNVyxXQUFVLHFCQUF3QjtBQUN4QyxTQUNJLGdCQUFBUCxHQUFDTyxTQUFRLFVBQVIsRUFBaUIsT0FBTyxFQUFFLFNBQVMsTUFBTSxTQUFVLFVBQVUsTUFBTSxVQUFVLElBQUksTUFBTSxHQUFHLEdBQ3ZGLDBCQUFBUCxHQUFDLFNBQUksS0FBSyxVQUNOO0FBQUEsb0JBQUFBLEdBQUMsV0FBTSxXQUFVLGtCQUNiO0FBQUEsc0JBQUFBLEdBQUMsV0FDRywwQkFBQUEsR0FBQyxRQUFHLFdBQVUsNkJBQ1Y7QUFBQSx3QkFBQUEsR0FBQyxRQUFHLFdBQVUsOEJBQTZCLE9BQU0sT0FBTTtBQUFBLFFBQ3RELFFBQVEsSUFBSSxDQUFDRCxPQUFHO0FBNWlCN0M7QUE2aUJnQyxpQ0FBQUM7QUFBQSxZQUFDO0FBQUE7QUFBQSxjQUNHLE9BQU0saUJBQU0sV0FBTixtQkFBYyxLQUFLLENBQUNRLE9BQU1BLEdBQUUsT0FBT1QsR0FBRSxRQUFyQyxtQkFBMEM7QUFBQSxjQUNoRCxRQUFRQTtBQUFBLGNBQ1IsV0FBVSxLQUFBQSxHQUFFLGFBQUYsWUFBYztBQUFBO0FBQUEsVUFDNUI7QUFBQSxTQUNIO0FBQUEsU0FDTCxHQUNKO0FBQUEsTUFDQSxnQkFBQUMsR0FBQyxXQUNJLG9CQUFVLElBQUksQ0FBQyxRQUNaLGdCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csU0FBUztBQUFBLFVBQ1Q7QUFBQSxVQUNBLE9BQU87QUFBQSxVQUNQO0FBQUE7QUFBQSxRQUNLLE1BQU0sR0FBRztBQUFBLE1BQ2xCLENBQ0gsR0FDTDtBQUFBLE9BQ0o7QUFBQSxJQUNDLE9BQU8sV0FDSixnQkFBQUEsR0FBQyxtQkFBZ0IsTUFBTSxPQUFPLE1BQU0sWUFBWSxPQUFPLFlBQVksU0FBUyxPQUFPLFNBQVM7QUFBQSxLQUVwRyxHQUNKO0FBRVI7QUFFTyxTQUFTLGNBQWlCLE9BQTBCO0FBemtCM0Q7QUEwa0JJLFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSSxxQkFBd0I7QUFBQSxJQUM5QyxTQUFRLFdBQU0sV0FBTixZQUFnQixDQUFDO0FBQUEsSUFDekIsSUFBSSxNQUFNLEtBQUssTUFBTSxLQUFLLENBQUNELE9BQU9BLEdBQWdCO0FBQUEsRUFDdEQsQ0FBQztBQUVELFFBQU0sV0FBV0gsR0FBUSxNQUFNVSxHQUFPLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQztBQUNyRCxNQUFJLE1BQU0sWUFBWSxPQUFXLFVBQVMsVUFBVTtBQUFBLE1BQy9DLFVBQVMsUUFBUSxVQUFVLG9CQUFJLElBQXFCO0FBQ3pELEVBQUFGLEdBQVUsTUFBTTtBQWxsQnBCLFFBQUFLO0FBbWxCUSxhQUFTLEVBQUUsTUFBTSxvQkFBb0IsV0FBVUEsTUFBQSxTQUFTLFFBQVEsWUFBakIsT0FBQUEsTUFBNEIsb0JBQUksSUFBcUIsRUFBRSxDQUFDO0FBQUEsRUFDM0csR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUNiLFNBQU8sTUFBTTtBQUNiLFNBQU8sZ0JBQUFULEdBQUMsMkJBQTJCLFVBQXFCLEdBQUcsT0FBUSxHQUFHLE9BQU87QUFDakY7OztBQzNpQk8sSUFBTSxtQkFBTixNQUF1QjtBQUFBLEVBTW5CLFlBQW1CVSxNQUF5QixNQUFjO0FBQXZDLGVBQUFBO0FBQXlCO0FBZ0VuRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQU8sU0FBUztBQStEaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFPLFdBQWlCQztBQUN4QixTQUFPLGNBQW9CQztBQUMzQixTQUFPLGFBQW1CQztBQUMxQixTQUFPLFVBQWdCQztBQUN2QixTQUFPLFlBQWtCQztBQUN6QixTQUFPLGdCQUF1QjtBQUM5QixTQUFPLGFBQW1CQztBQUMxQixTQUFPLFNBQWVDO0FBQ3RCLFNBQU8sZUFBZTtBQUN0QixTQUFPLGNBQWM7QUErQ3JCO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBTyxRQUFRO0FBRWY7QUFBQSxTQUFPLFFBQVE7QUFHZjtBQUFBLFNBQU8sV0FBVyxDQUFDLEVBQUUsT0FBTyxZQUFZLFFBQUFDLFFBQU8sTUFBaUU7QUE5T3BIO0FBK09RLFlBQU0scUJBQTJCRixHQUFXLG9CQUFvQjtBQUNoRSxhQUFPLGdCQUFBRyxHQUFDLE9BQUksT0FBYyxhQUFZLHVDQUFjLHVCQUFkLFlBQW9DLEtBQUssTUFBTSxRQUFRRCxTQUFRO0FBQUEsSUFDekcsR0FBRyxLQUFLLElBQUk7QUFHWjtBQUFBLFNBQU8sWUFBWSxDQUFDO0FBQUEsTUFDaEI7QUFBQSxNQUNBO0FBQUEsTUFDQSxRQUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSixNQU1NO0FBaFFWO0FBaVFRLFlBQU0scUJBQTJCRixHQUFXLG9CQUFvQjtBQUNoRSxhQUNJLGdCQUFBRztBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0c7QUFBQSxVQUNBLGFBQVksdUNBQWMsdUJBQWQsWUFBb0MsS0FBSztBQUFBLFVBQ3JELFFBQVFEO0FBQUEsVUFDUjtBQUFBLFVBQ0EsS0FBSztBQUFBO0FBQUEsTUFDVDtBQUFBLElBRVIsR0FBRyxLQUFLLElBQUk7QUFHWjtBQUFBLFNBQU8sT0FBTztBQUdkO0FBQUEsU0FBTyxhQUFhLENBQUM7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsUUFBQUE7QUFBQSxNQUNBO0FBQUEsSUFDSixNQUlNO0FBelJWO0FBMFJRLFlBQU0sV0FBaUJKLEdBQVEsTUFBTyxPQUFPLFNBQVMsV0FBVyxLQUFLLEtBQUssSUFBSSxJQUFJLE1BQU8sQ0FBQyxJQUFJLENBQUM7QUFDaEcsWUFBTSxxQkFBMkJFLEdBQVcsb0JBQW9CO0FBQ2hFLGFBQ0ksZ0JBQUFHO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDRyxNQUFNO0FBQUEsVUFDTixRQUFRRCxXQUFBLE9BQUFBLFVBQVU7QUFBQSxVQUNsQixhQUFZLHVDQUFjLHVCQUFkLFlBQW9DLEtBQUs7QUFBQTtBQUFBLE1BQ3pEO0FBQUEsSUFFUixHQUFHLEtBQUssSUFBSTtBQUdaO0FBQUEsU0FBTyxhQUFhLENBQUM7QUFBQSxNQUNqQjtBQUFBLE1BQ0E7QUFBQSxNQUNBLEtBQUFFO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFlBQVk7QUFBQSxJQUNoQixNQU9NO0FBRUYsWUFBTSxhQUFhLDRDQUFtQixLQUFLO0FBQzNDLFlBQU0sZUFBcUJOLEdBQVEsTUFBTSxLQUFLLFlBQVksTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUUvRixhQUNJLGdCQUFBSyxHQUFDLGlCQUFjLE1BQU0sY0FBYyxPQUFjLEtBQUtDLE1BQUssU0FBa0IsYUFBMEI7QUFBQSxJQUUvRyxHQUFHLEtBQUssSUFBSTtBQUdaO0FBQUEsU0FBTyxPQUFPO0FBTWQ7QUFBQTtBQUFBO0FBQUEsU0FBTyxXQUFXO0FBQ2xCLFNBQU8sZUFBZTtBQUN0QixTQUFPLFlBQVk7QUFDbkIsU0FBTyxPQUFPO0FBTWQ7QUFBQTtBQUFBO0FBQUEsU0FBTyxTQUFTO0FBQ2hCLFNBQU8sVUFBVTtBQUNqQixTQUFPLFVBQVU7QUFDakIsU0FBTyxXQUFXO0FBQ2xCLFNBQU8sU0FBUztBQUNoQixTQUFPLFNBQVM7QUFDaEIsU0FBTyxnQkFBZ0I7QUFLdkI7QUFBQTtBQUFBO0FBQUEsU0FBTyxnQkFBZ0I7QUFDdkIsU0FBTyxjQUFjO0FBQ3JCLFNBQU8sY0FBYztBQUNyQixTQUFPLGNBQWM7QUFDckIsU0FBTyxZQUFZO0FBQ25CLFNBQU8saUJBQWlCO0FBM1NwQixTQUFLLGNBQWMsSUFBSSxZQUFZLEtBQUssS0FBSyxTQUFTO0FBQUEsRUFDMUQ7QUFBQTtBQUFBLEVBR08sY0FBc0I7QUFDekIsV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQTtBQUFBLEVBR08sY0FBNEI7QUFDL0IsV0FBTyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUk7QUFBQSxFQUNsQztBQUFBO0FBQUEsRUFHQSxJQUFJLFFBQXNCO0FBQ3RCLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdBLElBQUksU0FBd0I7QUFDeEIsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR0EsSUFBSSxNQUFXO0FBQ1gsV0FBTyxLQUFLLEtBQUs7QUFBQSxFQUNyQjtBQUFBO0FBQUEsRUFHQSxJQUFJLE9BQWlCO0FBQ2pCLFdBQU8sS0FBSyxJQUFJO0FBQUEsRUFDcEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBc0JBLE1BQWEsUUFBUSxNQUFtQztBQUNwRCxVQUFNLFNBQVMsTUFBTSxLQUFLLFlBQVksS0FBSyxNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUM7QUFDN0QsV0FBTyxPQUFPLFlBQVk7QUFBQSxFQUM5QjtBQUFBO0FBQUEsRUFVTyxZQUFZLE1BQXFCLFlBQTZCO0FBQ2pFLFdBQU8sS0FBSyxJQUFJLFlBQVksTUFBTSxrQ0FBYyxLQUFLLElBQUk7QUFBQSxFQUM3RDtBQUFBO0FBQUEsRUFHTyxjQUFjLE9BQXdEO0FBQ3pFLFdBQU8sS0FBSyxJQUFJLGNBQWMsS0FBSztBQUFBLEVBQ3ZDO0FBQUE7QUFBQSxFQUdPLFdBQVcsT0FBd0M7QUFDdEQsV0FBTyxLQUFLLGNBQWMsS0FBSyxFQUFFLFlBQVksQ0FBQ0MsT0FBTSw0QkFBNEJBLEVBQUM7QUFBQSxFQUNyRjtBQUFBO0FBQUEsRUFHTyxTQUFTLE1BQW9CO0FBQ2hDLFdBQU8sS0FBSyxLQUFLLElBQUk7QUFBQSxFQUN6QjtBQUFBO0FBQUEsRUFHTyxXQUFXLE1BQWMsUUFBc0I7QUFDbEQsV0FBTyxLQUFLLE9BQU8sTUFBTSxNQUFNO0FBQUEsRUFDbkM7QUFBQTtBQUFBLEVBR08sVUFBVSxNQUFjLE9BQXFCO0FBQ2hELFdBQU8sS0FBSyxNQUFNLE1BQU0sS0FBSztBQUFBLEVBQ2pDO0FBQUE7QUFBQSxFQUdPLFVBQVUsVUFBd0I7QUFDckMsV0FBTyxLQUFLLElBQUksVUFBVSxRQUFRO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBR08sYUFBYSxVQUF3QztBQUN4RCxXQUFPLEtBQUssSUFBSSxhQUFhLFFBQVE7QUFBQSxFQUN6QztBQUFBO0FBQUEsRUFHTyxNQUFTLE9BQXlDO0FBQ3JELFdBQU8sVUFBVSxLQUFLLEtBQUs7QUFBQSxFQUMvQjtBQUFBO0FBQUEsRUFJTyxZQUFZLFNBQWlCLE1BQThCO0FBQzlELGdCQUFZLEtBQUssS0FBSyxLQUFLLE1BQU0sU0FBUyxJQUFJO0FBQUEsRUFDbEQ7QUFBQTtBQUFBLEVBR08sa0JBQWtCLFdBQW9CLE1BQThCO0FBQ3ZFLGlCQUFhLFdBQVcsTUFBTSxLQUFLLElBQUksT0FBTyxLQUFLLElBQUk7QUFBQSxFQUMzRDtBQUFBO0FBQUEsRUFtQk8sU0FBZSxPQUEyQkMsVUFBK0MsTUFBbUI7QUFDL0csV0FBYVIsR0FBUSxNQUFNUSxTQUFRLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxPQUFPLEdBQUksc0JBQVEsQ0FBQyxDQUFFLENBQUM7QUFBQSxFQUMvRjtBQUFBO0FBQUEsRUFHTyxlQUFlLFVBQWdEO0FBQ2xFLFdBQU8sZ0JBQWdCLEtBQUssTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUFBLEVBQ3pEO0FBQUE7QUFBQSxFQUdPLGVBQWUsVUFBMEM7QUFDNUQsVUFBTSxPQUFPLEtBQUssZUFBZSxRQUFRO0FBQ3pDLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdPLFFBQVEsTUFBYyxVQUF5RDtBQUNsRixXQUFPLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxRQUFRO0FBQUEsRUFDcEQ7QUFBQTtBQUFBLEVBR08sZ0JBQWdCLFVBQTBDO0FBQzdELFdBQU8sZ0JBQWdCLEtBQUssTUFBTSxRQUFRO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sYUFBYSxPQUE0QixVQUEyRDtBQUN2RyxXQUFPLGFBQWEsS0FBSyxNQUFNLEtBQUssV0FBVyxLQUFLLEdBQUcsUUFBUTtBQUFBLEVBQ25FO0FBQUE7QUFBQSxFQUdPLFNBQVMsT0FBNEIsVUFBK0M7QUFFdkYsV0FBTyxTQUFTLEtBQUssTUFBTSxLQUFLLFdBQVcsS0FBSyxHQUFHLFFBQVE7QUFBQSxFQUMvRDtBQTZISjs7O0FDalZBLHVCQUFzQjtBQVNmLElBQU0sY0FBTixNQUFrQjtBQUFBLEVBQ2QsWUFBbUIsTUFBZ0I7QUFBaEI7QUErRDFCO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBTyxTQUFTO0FBQUEsRUEvRDJCO0FBQUE7QUFBQSxFQUczQyxJQUFJLFFBQXNCO0FBQ3RCLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdBLElBQUksU0FBd0I7QUFDeEIsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR0EsSUFBSSxNQUFXO0FBQ1gsV0FBTyxLQUFLLEtBQUs7QUFBQSxFQUNyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxNQUFNLE1BQWdDO0FBQ3pDLFdBQU8sSUFBSSxpQkFBaUIsTUFBTSxJQUFJO0FBQUEsRUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sS0FBSyxNQUErQztBQUN2RCxVQUFNLFdBQVcsZ0JBQWdCLE9BQU8sS0FBSyxPQUFPO0FBRXBELFdBQU8sS0FBSyxLQUFLLFVBQVUsS0FBSyxRQUFRO0FBQUEsRUFDNUM7QUFBQTtBQUFBLEVBR08sTUFBTSxPQUF5QztBQUNsRCxXQUFPLEtBQUssU0FBUyxLQUFLLEVBQUUsWUFBWTtBQUFBLEVBQzVDO0FBQUE7QUFBQSxFQUdPLFNBQVMsT0FBeUQ7QUFDckUsV0FBTyxLQUFLLGFBQWEsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLE9BQU8sT0FBTztBQUFBLEVBQ2xFO0FBQUE7QUFBQSxFQUdPLFVBQVUsT0FBcUQ7QUFDbEUsV0FBTyxLQUFLLGFBQWEsS0FBSyxFQUFFLFlBQVk7QUFBQSxFQUNoRDtBQUFBO0FBQUEsRUFHTyxhQUFhLE9BQXFFO0FBQ3JGLFVBQU0sY0FBYyxPQUFPLFVBQVUsV0FBVyxNQUFNLE1BQU0sU0FBUyxLQUFLLElBQUk7QUFDOUUsV0FBTyxLQUFLLEtBQUssVUFBVSxPQUFPLFdBQVc7QUFBQSxFQUNqRDtBQUFBO0FBQUEsRUFVTyxZQUFZLE1BQXFCLFlBQTZCO0FBQ2pFLFVBQU0sVUFBVSxnQkFBZ0IsT0FBTyxLQUFLLE9BQU87QUFDbkQsUUFBSSxRQUFRLFdBQVcsR0FBRyxFQUFHLFFBQU8sUUFBUSxVQUFVLENBQUM7QUFFdkQsVUFBTSxXQUFXLEtBQUssS0FBSyxjQUFjLHFCQUFxQixTQUFTLGtDQUFjLEVBQUU7QUFDdkYsUUFBSSxTQUFVLFFBQU8sU0FBUztBQUU5QixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHTyxjQUFjLE9BQXdEO0FBQ3pFLFFBQUksRUFBRSxPQUFPLFVBQVUsVUFBVyxRQUFPLE9BQU8sUUFBUSxLQUFLO0FBRTdELFVBQU0sU0FBUyxNQUFNLE1BQU0sTUFBTSxLQUFLO0FBQ3RDLFFBQUksT0FBTyxPQUFRLFFBQU8sT0FBTyxRQUFRLE9BQU8sS0FBSztBQUFBLFFBQ2hELFFBQU8sT0FBTyxRQUFRLGlCQUFBQyxRQUFVLFlBQVksT0FBTyxNQUFNLENBQUM7QUFBQSxFQUNuRTtBQUFBO0FBQUEsRUFHTyxXQUFXLE9BQXdDO0FBQ3RELFdBQU8sS0FBSyxjQUFjLEtBQUssRUFBRSxZQUFZLENBQUNDLE9BQU0sNEJBQTRCQSxFQUFDO0FBQUEsRUFDckY7QUFBQTtBQUFBLEVBR08sU0FBUyxNQUFvQjtBQUNoQyxXQUFPLEtBQUssS0FBSyxJQUFJO0FBQUEsRUFDekI7QUFBQTtBQUFBLEVBR08sV0FBVyxNQUFjLFFBQXNCO0FBQ2xELFdBQU8sS0FBSyxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ25DO0FBQUE7QUFBQSxFQUdPLFVBQVUsTUFBYyxPQUFxQjtBQUNoRCxXQUFPLEtBQUssTUFBTSxNQUFNLEtBQUs7QUFBQSxFQUNqQztBQUFBO0FBQUEsRUFHTyxVQUFVLFVBQXdCO0FBQ3JDLFdBQU8sS0FBSyxhQUFhLFFBQVEsRUFBRSxZQUFZLENBQUNBLE9BQU0sMkJBQTJCQSxFQUFDO0FBQUEsRUFDdEY7QUFBQTtBQUFBLEVBR08sYUFBYSxVQUF3QztBQUN4RCxVQUFNLFNBQVMsV0FBVyxVQUFVLE1BQU0sUUFBUTtBQUNsRCxRQUFJLENBQUMsT0FBTyxPQUFRLFFBQU8sT0FBTyxRQUFRLGlCQUFBRCxRQUFVLFlBQVksVUFBVSxNQUFNLENBQUM7QUFFakYsV0FBTyxPQUFPLFFBQVEsT0FBTyxLQUFLO0FBQUEsRUFDdEM7QUFBQTtBQUFBLEVBR08sTUFBUyxPQUF5QztBQUNyRCxXQUFPLFVBQVUsS0FBSyxLQUFLO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVlPLFVBQ0gsUUFDQSxXQUNBLFdBQ0EsWUFDbUI7QUFDbkIsV0FBTyxLQUFLLGtCQUFrQixRQUFRLFdBQVcsV0FBVyxZQUFZLElBQUk7QUFBQSxFQUNoRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLFdBQ0gsUUFDQSxXQUNBLFdBQ0EsWUFDbUI7QUFDbkIsV0FBTyxLQUFLLGtCQUFrQixRQUFRLFdBQVcsV0FBVyxZQUFZLEtBQUs7QUFBQSxFQUNqRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS08sVUFDSCxRQUNBLFdBQ0EsV0FDQSxZQUNtQjtBQUNuQixXQUFPLEtBQUssa0JBQWtCLFFBQVEsV0FBVyxXQUFXLFlBQVksSUFBSTtBQUFBLEVBQ2hGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVU8sV0FDSCxRQUNBLFdBQ0EsV0FDQSxZQUNtQjtBQUNuQixXQUFPLEtBQUssa0JBQWtCLFFBQVEsV0FBVyxXQUFXLFlBQVksS0FBSztBQUFBLEVBQ2pGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1RLGtCQUNKLFFBQ0EsV0FDQSxXQUNBLFlBQ0EsVUFDRjtBQUNFLFFBQUksUUFBUSxJQUFJLGlCQUFpQixNQUFNLFVBQVU7QUFDakQsVUFBTSxXQUFXLElBQUksbUJBQW1CLE9BQU8sV0FBVyxZQUFZLFFBQVEsUUFBUTtBQUN0RixjQUFVLFNBQVMsUUFBUTtBQUUzQixXQUFPO0FBQUEsRUFDWDtBQUNKOzs7QUNqT0EsSUFBQUUsbUJBQXNDO0FBRy9CLElBQU0sZUFBTixNQUFNLGFBQVk7QUFBQSxFQUNyQixZQUFtQixPQUFjO0FBQWQ7QUFBQSxFQUFlO0FBQUE7QUFBQSxFQUczQixJQUFJQyxTQUFnQixRQUFpRDtBQUN4RSxRQUFJLFNBQVMsS0FBSyxNQUFNLHNCQUFzQkEsV0FBVSxHQUFHO0FBQzNELFFBQUksQ0FBQyxRQUFRO0FBQ1QsYUFBTyxhQUFZO0FBQUEsSUFDdkIsV0FBVyxrQkFBa0IsMEJBQVM7QUFDbEMsYUFBTyxJQUFJLElBQUksS0FBSyxLQUFLLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDNUMsT0FBTztBQUNILFVBQUksQ0FBQyxVQUFVLE9BQU9BLE9BQU0sR0FBRztBQUMzQixlQUFPLElBQUksSUFBSUEsT0FBTTtBQUFBLE1BQ3pCLE9BQU87QUFDSCxlQUFPLGFBQVk7QUFBQSxNQUN2QjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdPLFNBQVNBLFNBQWdCLFFBQWlEO0FBQzdFLFFBQUksU0FBUyxLQUFLLE1BQU0sc0JBQXNCQSxXQUFVLEdBQUc7QUFDM0QsUUFBSSxDQUFDLFFBQVE7QUFDVCxhQUFPLGFBQVk7QUFBQSxJQUN2QixXQUFXLGtCQUFrQiwwQkFBUztBQUNsQyxZQUFNLFdBQVcsb0JBQUksSUFBWTtBQUNqQyxpQkFBVyxRQUFRLE9BQU8sVUFBVTtBQUNoQyxZQUFJLEVBQUUsZ0JBQWdCLHdCQUFRO0FBQzlCLFlBQUksVUFBVSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUc7QUFFbEMsaUJBQVMsSUFBSSxLQUFLLElBQUk7QUFBQSxNQUMxQjtBQUVBLGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxVQUFJLENBQUMsVUFBVSxPQUFPQSxPQUFNLEdBQUc7QUFDM0IsZUFBTyxJQUFJLElBQUlBLE9BQU07QUFBQSxNQUN6QixPQUFPO0FBQ0gsZUFBTyxhQUFZO0FBQUEsTUFDdkI7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHTyxXQUFXLE1BQXVCO0FBQ3JDLFdBQU8sS0FBSyxNQUFNLHNCQUFzQixRQUFRLEdBQUcsS0FBSztBQUFBLEVBQzVEO0FBQUE7QUFBQSxFQUdPLGFBQWEsUUFBeUI7QUFDekMsV0FBTyxLQUFLLE1BQU0sc0JBQXNCLFVBQVUsR0FBRyxhQUFhO0FBQUEsRUFDdEU7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtPLGdCQUFnQixNQUFjLFFBQXlCO0FBQzFELFFBQUksQ0FBQyxPQUFRLFFBQU87QUFBQSxhQUNYLEtBQUssV0FBVyxHQUFHLEVBQUcsUUFBTyxLQUFLLFVBQVUsQ0FBQztBQUV0RCxRQUFJLGVBQWUsZ0JBQWdCLE1BQU0sSUFBSSxNQUFNO0FBQ25ELFFBQUksS0FBSyxXQUFXLFlBQVksRUFBRyxRQUFPO0FBQUEsUUFDckMsUUFBTztBQUFBLEVBQ2hCO0FBQUEsRUFFQSxDQUFTLEtBQUssUUFBaUIsUUFBdUQ7QUFDbEYsZUFBVyxRQUFRLE9BQU8sVUFBVTtBQUNoQyxVQUFJLGdCQUFnQiwwQkFBUztBQUN6QixlQUFPLEtBQUssS0FBSyxNQUFNLE1BQU07QUFBQSxNQUNqQyxXQUFXLFNBQVMsT0FBTyxLQUFLLElBQUksSUFBSSxNQUFNO0FBQzFDLGNBQU0sS0FBSztBQUFBLE1BQ2Y7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUlKO0FBQUE7QUE3RWEsYUE0RU0sWUFBeUIsb0JBQUksSUFBSTtBQTVFN0MsSUFBTSxjQUFOOzs7QUNIQSxJQUFNLGlCQUFOLE1BQU0sZUFBaUI7QUFBQSxFQUduQixjQUFjO0FBQ2pCLFNBQUssV0FBVyxvQkFBSSxJQUFJO0FBQUEsRUFDNUI7QUFBQTtBQUFBLEVBR08sSUFBSSxLQUFhLFFBQXFCO0FBQ3pDLGFBQVMsU0FBUyxRQUFRO0FBQ3RCLFVBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxLQUFLLEVBQUcsTUFBSyxTQUFTLElBQUksT0FBTyxvQkFBSSxJQUFJLENBQUM7QUFDakUsV0FBSyxTQUFTLElBQUksS0FBSyxFQUFHLElBQUksR0FBRztBQUFBLElBQ3JDO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHTyxJQUFJLE9BQXVCO0FBakJ0QztBQWtCUSxZQUFPLFVBQUssU0FBUyxJQUFJLEtBQUssTUFBdkIsWUFBNEIsZUFBYztBQUFBLEVBQ3JEO0FBQUE7QUFBQSxFQUdPLE9BQU8sS0FBYSxRQUFxQjtBQUM1QyxhQUFTLFNBQVMsUUFBUTtBQUN0QixZQUFNLE1BQU0sS0FBSyxTQUFTLElBQUksS0FBSztBQUNuQyxVQUFJLEtBQUs7QUFDTCxZQUFJLE9BQU8sR0FBRztBQUFBLE1BQ2xCO0FBRUEsVUFBSSxPQUFPLElBQUksUUFBUSxHQUFHO0FBQ3RCLGFBQUssU0FBUyxPQUFPLEtBQUs7QUFBQSxNQUM5QjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUEsRUFFTyxRQUFRO0FBQ1gsU0FBSyxTQUFTLE1BQU07QUFBQSxFQUN4QjtBQUdKO0FBdkNhLGVBc0NNLFlBQXlCLG9CQUFJLElBQUk7QUF0QzdDLElBQU0sZ0JBQU47OztBQ0FQLElBQXFCLFlBQXJCLE1BQStCO0FBQUEsRUFFM0IsY0FBYztBQUNWLFNBQUssTUFBTSxDQUFDO0FBQ1osU0FBSyxTQUFTLENBQUM7QUFDZixTQUFLLFNBQVM7QUFBQSxFQUNsQjtBQUFBLEVBRUEsUUFBUTtBQUNKLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUEsRUFFQSxLQUFLLElBQUksT0FBTztBQUNaLFFBQUksTUFBTSxLQUFLO0FBRWYsV0FBTyxNQUFNLEdBQUc7QUFDWixZQUFNLFNBQVUsTUFBTSxLQUFNO0FBQzVCLFlBQU0sY0FBYyxLQUFLLE9BQU8sTUFBTTtBQUN0QyxVQUFJLFNBQVMsWUFBYTtBQUMxQixXQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxNQUFNO0FBQy9CLFdBQUssT0FBTyxHQUFHLElBQUk7QUFDbkIsWUFBTTtBQUFBLElBQ1Y7QUFFQSxTQUFLLElBQUksR0FBRyxJQUFJO0FBQ2hCLFNBQUssT0FBTyxHQUFHLElBQUk7QUFBQSxFQUN2QjtBQUFBLEVBRUEsTUFBTTtBQUNGLFFBQUksS0FBSyxXQUFXLEVBQUcsUUFBTztBQUU5QixVQUFNLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDdEIsU0FBSztBQUVMLFFBQUksS0FBSyxTQUFTLEdBQUc7QUFDakIsWUFBTSxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEtBQUssTUFBTTtBQUM3QyxZQUFNLFFBQVEsS0FBSyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sS0FBSyxNQUFNO0FBQ3RELFlBQU0sYUFBYSxLQUFLLFVBQVU7QUFDbEMsVUFBSSxNQUFNO0FBRVYsYUFBTyxNQUFNLFlBQVk7QUFDckIsWUFBSSxRQUFRLE9BQU8sS0FBSztBQUN4QixjQUFNLFFBQVEsT0FBTztBQUNyQixZQUFJLFlBQVksS0FBSyxJQUFJLElBQUk7QUFDN0IsWUFBSSxZQUFZLEtBQUssT0FBTyxJQUFJO0FBQ2hDLGNBQU0sYUFBYSxLQUFLLE9BQU8sS0FBSztBQUVwQyxZQUFJLFFBQVEsS0FBSyxVQUFVLGFBQWEsV0FBVztBQUMvQyxpQkFBTztBQUNQLHNCQUFZLEtBQUssSUFBSSxLQUFLO0FBQzFCLHNCQUFZO0FBQUEsUUFDaEI7QUFDQSxZQUFJLGFBQWEsTUFBTztBQUV4QixhQUFLLElBQUksR0FBRyxJQUFJO0FBQ2hCLGFBQUssT0FBTyxHQUFHLElBQUk7QUFDbkIsY0FBTTtBQUFBLE1BQ1Y7QUFFQSxXQUFLLElBQUksR0FBRyxJQUFJO0FBQ2hCLFdBQUssT0FBTyxHQUFHLElBQUk7QUFBQSxJQUN2QjtBQUVBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxPQUFPO0FBQ0gsUUFBSSxLQUFLLFdBQVcsRUFBRyxRQUFPO0FBQzlCLFdBQU8sS0FBSyxJQUFJLENBQUM7QUFBQSxFQUNyQjtBQUFBLEVBRUEsWUFBWTtBQUNSLFFBQUksS0FBSyxXQUFXLEVBQUcsUUFBTztBQUM5QixXQUFPLEtBQUssT0FBTyxDQUFDO0FBQUEsRUFDeEI7QUFBQSxFQUVBLFNBQVM7QUFDTCxTQUFLLElBQUksU0FBUyxLQUFLLE9BQU8sU0FBUyxLQUFLO0FBQUEsRUFDaEQ7QUFDSjs7O0FDL0VBLDBCQUErQjtBQW9CeEIsSUFBTSx1QkFBTixNQUFpRDtBQUFBLEVBQzdDLFlBQW1CLEtBQXdCO0FBQXhCO0FBQUEsRUFBeUI7QUFBQSxFQUU1QyxJQUFJLElBQVksT0FBc0I7QUFBQSxFQUFDO0FBQUEsRUFDdkMsT0FBTyxJQUFZLE9BQXNCO0FBQUEsRUFBQztBQUFBLEVBRTFDLE9BQU8sT0FBeUM7QUFDbkQsV0FBTztBQUFBLEVBQ1g7QUFDSjtBQUdPLElBQU0sZUFBTixNQUF5QztBQUFBLEVBQ3JDLFlBQW1CLEtBQStCLFFBQWlDO0FBQWhFO0FBQStCO0FBQUEsRUFBa0M7QUFBQSxFQUVwRixJQUFJLElBQVksT0FBc0I7QUFBQSxFQUFDO0FBQUEsRUFDdkMsT0FBTyxJQUFZLE9BQXNCO0FBQUEsRUFBQztBQUFBLEVBRTFDLE9BQU8sT0FBeUM7QUFDbkQsUUFBSSxDQUFDLFNBQVMsU0FBUyxLQUFLLEVBQUcsUUFBTztBQUV0QyxRQUFJLEtBQUssT0FBTyxLQUFlLEdBQUc7QUFDOUIsYUFBTyxvQkFBSSxJQUFJLENBQUMsS0FBZSxDQUFDO0FBQUEsSUFDcEMsT0FBTztBQUNILGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDSjtBQUNKO0FBR08sSUFBTSxnQkFBTixNQUEwQztBQUFBLEVBSXRDLGNBQWM7QUFDakIsU0FBSyxVQUFVLG9CQUFJLElBQUk7QUFBQSxFQUMzQjtBQUFBO0FBQUEsRUFHTyxJQUFJLElBQVksT0FBc0I7QUFDekMsU0FBSyxRQUFRLElBQUksRUFBRTtBQUFBLEVBQ3ZCO0FBQUE7QUFBQSxFQUdPLE9BQU8sSUFBWSxPQUFzQjtBQUM1QyxTQUFLLFFBQVEsT0FBTyxFQUFFO0FBQUEsRUFDMUI7QUFBQTtBQUFBLEVBR08sTUFBbUI7QUFDdEIsV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQTtBQUFBLEVBR08sT0FBTyxPQUF5QztBQUNuRCxXQUFPO0FBQUEsRUFDWDtBQUNKO0FBR08sSUFBTSxtQkFBTixNQUFNLGlCQUFzQztBQUFBLEVBTXhDLGNBQWM7QUFDakIsU0FBSyxVQUFVLG9CQUFJLElBQUk7QUFDdkIsU0FBSyxTQUFTLElBQUksb0JBQUFDLFFBQU0sQ0FBQyxHQUFHLENBQUNDLElBQUdDLE9BQU0sU0FBUyxRQUFRRCxJQUFHQyxFQUFDLENBQUM7QUFBQSxFQUNoRTtBQUFBO0FBQUEsRUFHTyxJQUFJLElBQVksT0FBc0I7QUFDekMsU0FBSyxRQUFRLElBQUksRUFBRTtBQUVuQixTQUFLLE9BQU8sZ0JBQWdCLE9BQU8sb0JBQUksSUFBSSxDQUFDO0FBQzVDLFNBQUssT0FBTyxJQUFJLEtBQUssRUFBRyxJQUFJLEVBQUU7QUFBQSxFQUNsQztBQUFBO0FBQUEsRUFHTyxPQUFPLElBQVksT0FBc0I7QUFDNUMsU0FBSyxRQUFRLE9BQU8sRUFBRTtBQUV0QixVQUFNLE1BQU0sS0FBSyxPQUFPLElBQUksS0FBSztBQUNqQywrQkFBSyxPQUFPO0FBRVosUUFBSSxPQUFPLFFBQVEsSUFBSSxRQUFRLEdBQUc7QUFDOUIsV0FBSyxPQUFPLE9BQU8sS0FBSztBQUFBLElBQzVCO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHTyxNQUFtQjtBQUN0QixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBO0FBQUEsRUFHTyxPQUFPLE9BQXlDO0FBQ25ELFdBQU8sS0FBSyxPQUFPLElBQUksT0FBTyxpQkFBZ0IsU0FBUztBQUFBLEVBQzNEO0FBSUo7QUFBQTtBQTNDYSxpQkEwQ00sWUFBWSxvQkFBSSxJQUFZO0FBMUN4QyxJQUFNLGtCQUFOOzs7QUNqREEsSUFBTSxrQkFBTixNQUFNLGlCQUFnQjtBQUFBLEVBSXpCLE9BQWMsU0FBUztBQUNuQixXQUFPLElBQUksaUJBQWdCO0FBQUEsRUFDL0I7QUFBQSxFQUVPLGNBQWM7QUFDakIsU0FBSyxNQUFNLG9CQUFJLElBQUk7QUFDbkIsU0FBSyxxQkFBcUI7QUFBQSxFQUM5QjtBQUFBLEVBRU8sU0FDSCxNQUNBLElBQ0EsT0FDQSxNQUNlO0FBQ2YsU0FBSyxJQUFJLElBQUksaUJBQWdCLEtBQUssSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDQyxJQUFHQyxJQUFHQyxPQUFNLE9BQU8sUUFBUSxLQUFLRixJQUFHQyxJQUFHQyxFQUFDLENBQUMsQ0FBQztBQUM5RixXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRU8sZUFDSCxNQUNBLElBQ0EsT0FDQSxNQUNlO0FBQ2YsU0FBSyxJQUFJLElBQUksaUJBQWdCLEtBQUssSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJO0FBQ3hELFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFTyxhQUNILE1BQ0EsSUFDQSxPQUNBLE1BQ2U7QUFDZixXQUFPLEtBQUssU0FBUyxNQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsU0FBUyxPQUFPLElBQUksTUFBTSxDQUFDRixJQUFHQyxJQUFHLFFBQVEsS0FBS0EsSUFBR0QsSUFBRyxHQUFHLENBQUM7QUFBQSxFQUN4RztBQUFBO0FBQUEsRUFHTywwQkFBMkM7QUFDOUMsU0FBSyxxQkFBcUI7QUFDMUIsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR08sUUFBb0MsTUFBUyxTQUEwRDtBQUMxRyxXQUFPLEtBQUssU0FBUyxNQUFNLEtBQUssTUFBTSxDQUFDQSxJQUFHQyxJQUFHLFFBQVEsUUFBUUQsSUFBR0MsSUFBRyxHQUFHLElBQUksQ0FBQyxFQUN0RSxTQUFTLE1BQU0sTUFBTSxNQUFNLENBQUNELElBQUdDLElBQUcsUUFBUSxRQUFRRCxJQUFHQyxJQUFHLEdBQUcsS0FBSyxDQUFDLEVBQ2pFLFNBQVMsTUFBTSxLQUFLLE1BQU0sQ0FBQ0QsSUFBR0MsSUFBRyxRQUFRLFFBQVFELElBQUdDLElBQUcsR0FBRyxJQUFJLENBQUMsRUFDL0QsU0FBUyxNQUFNLE1BQU0sTUFBTSxDQUFDRCxJQUFHQyxJQUFHLFFBQVEsUUFBUUQsSUFBR0MsSUFBRyxHQUFHLEtBQUssQ0FBQyxFQUNqRSxTQUFTLE1BQU0sS0FBSyxNQUFNLENBQUNELElBQUdDLElBQUcsUUFBUSxRQUFRRCxJQUFHQyxJQUFHLEdBQUcsS0FBSyxDQUFDLEVBQ2hFLFNBQVMsTUFBTSxNQUFNLE1BQU0sQ0FBQ0QsSUFBR0MsSUFBRyxRQUFRLFFBQVFELElBQUdDLElBQUcsR0FBRyxLQUFLLENBQUM7QUFBQSxFQUMxRTtBQUFBO0FBQUEsRUFHTyxTQUFTLElBQWMsTUFBZSxPQUFnQixLQUF5QztBQUNsRyxRQUFJLFdBQVcsU0FBUyxPQUFPLElBQUk7QUFDbkMsUUFBSSxZQUFZLFNBQVMsT0FBTyxLQUFLO0FBQ3JDLFFBQUksQ0FBQyxTQUFVLFFBQU8sT0FBTyxRQUFRLHVCQUF1QixJQUFJLEdBQUc7QUFBQSxhQUMxRCxDQUFDLFVBQVcsUUFBTyxPQUFPLFFBQVEsdUJBQXVCLEtBQUssR0FBRztBQUcxRSxRQUFJLEtBQUssc0JBQXNCLGFBQWEsVUFBVSxjQUFjLE9BQVEsUUFBTyxPQUFPLFFBQVEsSUFBSTtBQUV0RyxRQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksaUJBQWdCLEtBQUssSUFBSSxVQUFVLFNBQVMsQ0FBQztBQUN4RSxRQUFJLFFBQVMsUUFBTyxRQUFRLE1BQU0sT0FBTyxHQUFHO0FBRzVDLFFBQUksV0FBVyxLQUFLLElBQUksSUFBSSxpQkFBZ0IsS0FBSyxJQUFJLFVBQVUsR0FBRyxDQUFDO0FBQ25FLFFBQUksU0FBVSxRQUFPLFNBQVMsTUFBTSxPQUFPLEdBQUc7QUFHOUMsUUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLGlCQUFnQixLQUFLLElBQUksS0FBSyxTQUFTLENBQUM7QUFDcEUsUUFBSSxTQUFVLFFBQU8sU0FBUyxNQUFNLE9BQU8sR0FBRztBQUc5QyxRQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksaUJBQWdCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUM5RCxRQUFJLFNBQVUsUUFBTyxTQUFTLE1BQU0sT0FBTyxHQUFHO0FBRTlDLFdBQU8sT0FBTyxRQUFRLGdDQUFnQyxRQUFRLElBQUksRUFBRSxJQUFJLFNBQVMsR0FBRztBQUFBLEVBQ3hGO0FBQUE7QUFBQSxFQUdBLE9BQWMsS0FBSyxJQUFjLE1BQXdCLE9BQXlCO0FBQzlFLFdBQU8sR0FBRyxJQUFJLElBQUksRUFBRSxJQUFJLEtBQUs7QUFBQSxFQUNqQztBQUNKO0FBR08sU0FBUyxnQkFBZ0IsZ0JBQXdEO0FBQ3BGLFNBQ0ksZ0JBQWdCLE9BQU8sRUFDbEIsUUFBUSxLQUFLLENBQUNELElBQUdDLE9BQU0sU0FBUyxRQUFRRCxJQUFHQyxJQUFHLGNBQWMsQ0FBQyxFQUU3RCxTQUFTLEtBQUssS0FBSyxLQUFLLENBQUNELElBQUdDLE9BQU0sU0FBUyxTQUFTRCxFQUFDLEtBQUssU0FBUyxTQUFTQyxFQUFDLENBQUMsRUFDOUUsU0FBUyxLQUFLLEtBQUssS0FBSyxDQUFDRCxJQUFHQyxPQUFNLFNBQVMsU0FBU0QsRUFBQyxLQUFLLFNBQVMsU0FBU0MsRUFBQyxDQUFDLEVBRTlFLFNBQVMsVUFBVSxLQUFLLFVBQVUsQ0FBQ0QsSUFBR0MsT0FBTUQsS0FBSUMsRUFBQyxFQUNqRCxTQUFTLFVBQVUsS0FBSyxVQUFVLENBQUNELElBQUdDLE9BQU1ELEtBQUlDLEVBQUMsRUFDakQsU0FBUyxVQUFVLEtBQUssVUFBVSxDQUFDRCxJQUFHQyxPQUFNRCxLQUFJQyxFQUFDLEVBQ2pELFNBQVMsVUFBVSxLQUFLLFVBQVUsQ0FBQ0QsSUFBR0MsT0FBTUQsS0FBSUMsRUFBQyxFQUNqRCxTQUFTLFVBQVUsS0FBSyxVQUFVLENBQUNELElBQUdDLE9BQU1ELEtBQUlDLEVBQUMsRUFFakQsU0FBUyxVQUFVLEtBQUssS0FBSyxDQUFDRCxJQUFHQyxJQUFHLFFBQVFELEtBQUksU0FBUyxTQUFTQyxJQUFHLGVBQWUsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUNsRyxTQUFTLEtBQUssS0FBSyxVQUFVLENBQUNELElBQUdDLElBQUcsUUFBUSxTQUFTLFNBQVNELElBQUcsZUFBZSxJQUFJLFFBQVEsQ0FBQyxJQUFJQyxFQUFDLEVBQ2xHLGFBQWEsVUFBVSxLQUFLLFVBQVUsQ0FBQ0QsSUFBR0MsT0FBT0EsS0FBSSxJQUFJLEtBQUtELEdBQUUsT0FBT0MsRUFBQyxDQUFFLEVBRTFFLFNBQVMsUUFBUSxLQUFLLFFBQVEsQ0FBQ0QsSUFBR0MsT0FBTTtBQUNyQyxXQUFPO0FBQUEsTUFDSEQsR0FBRSxLQUFLQyxJQUFHLENBQUMsU0FBUyxVQUFVLFFBQVEsU0FBUyxXQUFXLFdBQVcsY0FBYyxDQUFDO0FBQUEsSUFDeEY7QUFBQSxFQUNKLENBQUMsRUFDQSxTQUFTLFFBQVEsS0FBSyxZQUFZLENBQUNELElBQUdDLE9BQU1ELEdBQUUsTUFBTUMsRUFBQyxDQUFDLEVBQ3RELGFBQWEsUUFBUSxLQUFLLFlBQVksQ0FBQ0QsSUFBR0MsT0FBTUQsR0FBRSxLQUFLQyxFQUFDLENBQUMsRUFFekQsU0FBUyxZQUFZLEtBQUssWUFBWSxDQUFDRCxJQUFHQyxPQUFNLGtCQUFrQkQsR0FBRSxLQUFLQyxFQUFDLENBQUMsQ0FBQyxFQUM1RSxTQUFTLFlBQVksS0FBSyxZQUFZLENBQUNELElBQUdDLE9BQU0sa0JBQWtCRCxHQUFFLE1BQU1DLEVBQUMsQ0FBQyxDQUFDLEVBQzdFLFNBQVMsWUFBWSxLQUFLLFVBQVUsQ0FBQ0QsSUFBR0MsT0FBTSxrQkFBa0JELEdBQUUsU0FBUyxDQUFDRyxPQUFNQSxLQUFJRixFQUFDLENBQUMsQ0FBQyxFQUN6RixhQUFhLFlBQVksS0FBSyxVQUFVLENBQUNELElBQUdDLE9BQU0sa0JBQWtCRCxHQUFFLFNBQVMsQ0FBQ0csT0FBTUEsS0FBSUYsRUFBQyxDQUFDLENBQUMsRUFFN0YsU0FBUyxTQUFTLEtBQUssU0FBUyxDQUFDRCxJQUFHQyxPQUFPLENBQUMsRUFBZ0IsT0FBT0QsRUFBQyxFQUFFLE9BQU9DLEVBQUMsQ0FBQyxFQUUvRSxTQUFTLFVBQVUsS0FBSyxVQUFVLENBQUNELElBQUdDLE9BQU0sT0FBTyxPQUFPLENBQUMsR0FBR0QsSUFBR0MsRUFBQyxDQUFDLEVBRW5FLFNBQVMsU0FBUyxTQUFTLFVBQVUsQ0FBQyxLQUFLLFFBQVE7QUFDaEQsUUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLE9BQVEsUUFBTztBQUN6QyxXQUFPLElBQUksR0FBRztBQUFBLEVBQ2xCLENBQUMsRUFDQSxlQUFlLFNBQVMsU0FBUyxVQUFVLENBQUMsS0FBSyxLQUFLLFlBQVk7QUFDL0QsUUFBSSxJQUFJLFVBQVUsRUFBRyxRQUFPLE9BQU8sUUFBUSxDQUFDLENBQUM7QUFFN0MsVUFBTSxTQUFTLENBQUM7QUFDaEIsZUFBVyxXQUFXLEtBQUs7QUFDdkIsWUFBTSxXQUFXLFFBQVE7QUFBQSxRQUNyQixZQUFZLE1BQU0sWUFBWSxRQUFRLE9BQU8sR0FBRyxZQUFZLFFBQVEsR0FBRyxDQUFDO0FBQUEsTUFDNUU7QUFDQSxVQUFJLENBQUMsU0FBUyxXQUFZLFFBQU8sT0FBTyxRQUFRLFNBQVMsS0FBSztBQUU5RCxhQUFPLEtBQUssU0FBUyxLQUFLO0FBQUEsSUFDOUI7QUFFQSxXQUFPLE9BQU8sUUFBUSxNQUFNO0FBQUEsRUFDaEMsQ0FBQyxFQUNBLFNBQVMsVUFBVSxTQUFTLFVBQVUsQ0FBQyxLQUFLLFFBQUs7QUFuTDlEO0FBbUxpRSwrQkFBYyxJQUFJLEtBQUssR0FBRyxNQUExQixZQUErQjtBQUFBLEdBQUksRUFDdkYsZUFBZSxRQUFRLFNBQVMsVUFBVSxTQUFTLEVBQ25ELGVBQWUsUUFBUSxTQUFTLFVBQVUsU0FBUyxFQUNuRCxTQUFTLFVBQVUsU0FBUyxVQUFVLENBQUMsS0FBSyxRQUFLO0FBdEw5RDtBQXNMaUUscUJBQUksR0FBRyxNQUFQLFlBQVk7QUFBQSxHQUFJLEVBQ3BFLFNBQVMsVUFBVSxTQUFTLFVBQVUsQ0FBQyxLQUFLLFFBQVMsTUFBTSxLQUFLLE9BQU8sSUFBSSxTQUFTLE9BQU8sSUFBSSxHQUFHLENBQUUsRUFDcEcsU0FBUyxRQUFRLFNBQVMsVUFBVSxTQUFTLEVBQzdDLFNBQVMsWUFBWSxTQUFTLFVBQVUsYUFBYSxFQUNyRCx3QkFBd0I7QUFFckM7QUFHTyxTQUFTLGVBQWUsVUFBK0M7QUFDMUUsU0FBTztBQUFBLElBQ0gsWUFBWSxTQUFTO0FBQUEsSUFDckIsZ0JBQWdCLFNBQVM7QUFBQSxJQUN6QixvQkFBb0IsU0FBUztBQUFBLEVBQ2pDO0FBQ0o7QUFHTyxTQUFTLFVBQVUsTUFBWSxLQUFzQixTQUE2QztBQUNyRyxRQUFNLFNBQVMsUUFBUSxZQUFZLFFBQVEsSUFBSTtBQUMvQyxNQUFJLENBQUMsT0FBUSxRQUFPLE9BQU8sUUFBUSxJQUFJO0FBRXZDLFNBQU8sUUFBUSxTQUFTLFlBQVksTUFBTSxZQUFZLFFBQVEsTUFBTSxHQUFHLFlBQVksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNwRztBQUdPLFNBQVMsVUFBVSxNQUFnQixLQUFhO0FBQ25ELFVBQVEsS0FBSztBQUFBLElBQ1QsS0FBSztBQUNELGFBQU8sS0FBSztBQUFBLElBQ2hCLEtBQUs7QUFDRCxhQUFPLEtBQUs7QUFBQSxJQUNoQixLQUFLO0FBQ0QsYUFBTyxLQUFLO0FBQUEsSUFDaEIsS0FBSztBQUNELGFBQU8sS0FBSztBQUFBLElBQ2hCLEtBQUs7QUFDRCxhQUFPLEtBQUs7QUFBQSxJQUNoQixLQUFLO0FBQ0QsYUFBTyxLQUFLO0FBQUEsSUFDaEIsS0FBSztBQUNELGFBQU8sS0FBSztBQUFBLElBQ2hCLEtBQUs7QUFDRCxhQUFPLEtBQUs7QUFBQSxJQUNoQjtBQUNJLGFBQU87QUFBQSxFQUNmO0FBQ0o7QUFHTyxTQUFTLGNBQWMsS0FBZSxLQUFhO0FBQ3RELFVBQVEsS0FBSztBQUFBLElBQ1QsS0FBSztBQUNELGFBQU8sSUFBSTtBQUFBLElBQ2YsS0FBSztBQUNELGFBQU8sSUFBSTtBQUFBLElBQ2YsS0FBSztBQUNELGFBQU8sSUFBSTtBQUFBLElBQ2YsS0FBSztBQUNELGFBQU8sSUFBSTtBQUFBLElBQ2YsS0FBSztBQUNELGFBQU8sSUFBSTtBQUFBLElBQ2YsS0FBSztBQUNELGFBQU8sSUFBSTtBQUFBLElBQ2YsS0FBSztBQUNELGFBQU8sSUFBSTtBQUFBLElBQ2Y7QUFDSSxhQUFPO0FBQUEsRUFDZjtBQUNKOzs7QUM3Tk8sSUFBTSxrQkFBTixNQUFzQjtBQUFBLEVBSWxCLFlBQW1CLE1BQWM7QUFBZDtBQUN0QixTQUFLLFdBQVcsQ0FBQztBQUNqQixTQUFLLGFBQWEsQ0FBQztBQUFBLEVBQ3ZCO0FBQUE7QUFBQSxFQUdPLE9BQU8sTUFBcUM7QUFDL0MsU0FBSyxTQUFTLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxTQUFTLE1BQU0sS0FBSyxDQUFDO0FBQ3BELFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdPLEtBQ0gsU0FDQSxNQUNlO0FBQ2YsU0FBSyxTQUFTLEtBQUs7QUFBQSxNQUNmLE1BQU0sQ0FBQyxPQUFPO0FBQUEsTUFDZCxTQUFTO0FBQUEsTUFDVCxNQUFNLENBQUNHLE9BQU0sU0FBUyxLQUFLLEtBQUssQ0FBQyxHQUF3QkEsRUFBQztBQUFBLElBQzlELENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHTyxLQUNILE1BQ0EsTUFDQSxNQUNlO0FBQ2YsU0FBSyxTQUFTLEtBQUs7QUFBQSxNQUNmLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxNQUNqQixTQUFTO0FBQUEsTUFDVCxNQUFNLENBQUNBLE9BQU0sU0FBUyxLQUFLLEtBQUssQ0FBQyxHQUF3QixLQUFLLENBQUMsR0FBd0JBLEVBQUM7QUFBQSxJQUM1RixDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR08sS0FDSCxNQUNBLE1BQ0EsTUFDQSxNQUNlO0FBQ2YsU0FBSyxTQUFTLEtBQUs7QUFBQSxNQUNmLE1BQU0sQ0FBQyxNQUFNLE1BQU0sSUFBSTtBQUFBLE1BQ3ZCLFNBQVM7QUFBQSxNQUNULE1BQU0sQ0FBQ0EsT0FBTSxTQUNULEtBQUssS0FBSyxDQUFDLEdBQXdCLEtBQUssQ0FBQyxHQUF3QixLQUFLLENBQUMsR0FBd0JBLEVBQUM7QUFBQSxJQUN4RyxDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR08sVUFBVSxTQUFpQixXQUFzQztBQUNwRSxTQUFLLFdBQVcsT0FBTyxJQUFJO0FBQzNCLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdPLFFBQXNCO0FBQ3pCLFFBQUlDLFFBQXFCLENBQUMsWUFBdUIsU0FBb0I7QUFDakUsVUFBSSxRQUF1QixDQUFDO0FBQzVCLGVBQVMsT0FBTyxNQUFNO0FBQ2xCLFlBQUksVUFBVSxTQUFTLE9BQU8sR0FBRztBQUNqQyxZQUFJLENBQUMsUUFBUyxPQUFNLE1BQU0sNENBQTRDLEdBQUcsR0FBRztBQUM1RSxjQUFNLEtBQUssT0FBTztBQUFBLE1BQ3RCO0FBR0EsVUFBSSxLQUFLLFdBQVcsTUFBTSxNQUFNLEdBQUc7QUFDL0IsWUFBSSxzQkFBc0IsS0FBSyxXQUFXLE1BQU0sTUFBTSxFQUFFLE9BQU8sQ0FBQ0MsT0FBTSxNQUFNQSxFQUFDLEtBQUssT0FBTztBQUN6RixZQUFJLG9CQUFvQixTQUFTLEdBQUc7QUFDaEMsY0FBSSxZQUFZLG9CQUNYLElBQUksQ0FBQ0MsT0FBTyxLQUFLQSxFQUFDLEVBQVksTUFBTSxFQUNwQyxPQUFPLENBQUNBLElBQUdILE9BQU0sS0FBSyxJQUFJRyxJQUFHSCxFQUFDLENBQUM7QUFLcEMsY0FBSSxTQUFTLENBQUM7QUFDZCxtQkFBUyxPQUFPLEdBQUcsT0FBTyxXQUFXLFFBQVE7QUFDekMsZ0JBQUksVUFBVSxDQUFDO0FBQ2YscUJBQVMsUUFBUSxHQUFHLFFBQVEsS0FBSyxRQUFRLFNBQVM7QUFDOUMsa0JBQUksb0JBQW9CLFNBQVMsS0FBSyxHQUFHO0FBQ3JDLG9CQUFJLE1BQU0sS0FBSyxLQUFLO0FBQ3BCLHdCQUFRLEtBQUssSUFBSSxJQUFJLENBQUM7QUFBQSxjQUMxQixPQUFPO0FBQ0gsd0JBQVEsS0FBSyxLQUFLLEtBQUssQ0FBQztBQUFBLGNBQzVCO0FBQUEsWUFDSjtBQUVBLG1CQUFPLEtBQUtDLE1BQUssU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUFBLFVBQ3pDO0FBRUEsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLFlBQU8sVUFBUyxXQUFXLEtBQUssVUFBVTtBQUN0QyxZQUFJLFFBQVEsUUFBUyxRQUFPLFFBQVEsS0FBSyxTQUFTLEdBQUcsSUFBSTtBQUN6RCxZQUFJLFFBQVEsS0FBSyxVQUFVLE1BQU0sT0FBUTtBQUV6QyxpQkFBUyxRQUFRLEdBQUcsUUFBUSxRQUFRLEtBQUssUUFBUSxTQUFTO0FBQ3RELGNBQUksUUFBUSxLQUFLLEtBQUssS0FBSyxPQUFPLFFBQVEsS0FBSyxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUcsVUFBUztBQUFBLFFBQ3BGO0FBRUEsZUFBTyxRQUFRLEtBQUssU0FBUyxHQUFHLElBQUk7QUFBQSxNQUN4QztBQUVBLFlBQU0sTUFBTSx5QkFBeUIsS0FBSyxJQUFJLDBCQUEwQixNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFBQSxJQUM5RjtBQUVBLFdBQU9BO0FBQUEsRUFDWDtBQUNKO0FBR08sSUFBVTtBQUFBLENBQVYsQ0FBVUcsZUFBVjtBQUVJLFdBQVMsS0FBSyxNQUFvQixTQUF1QztBQUM1RSxXQUFPLElBQUksU0FBb0IsS0FBSyxTQUFTLEdBQUcsSUFBSTtBQUFBLEVBQ3hEO0FBRk8sRUFBQUEsV0FBUztBQUtULFdBQVMsUUFDWixPQUNBLFNBQ2lDO0FBQ2pDLFFBQUksU0FBNEMsQ0FBQztBQUNqRCxhQUFTLENBQUMsS0FBSyxJQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUMzQyxhQUFPLEdBQUcsSUFBSUEsV0FBVSxLQUFLLE1BQU0sT0FBTztBQUFBLElBQzlDO0FBRUEsV0FBTztBQUFBLEVBQ1g7QUFWTyxFQUFBQSxXQUFTO0FBQUEsR0FQSDtBQXdCVixJQUFVO0FBQUEsQ0FBVixDQUFVQyxzQkFBVjtBQUNJLEVBQU1BLGtCQUFBLFNBQVMsSUFBSSxnQkFBZ0IsTUFBTSxFQUMzQyxLQUFLLFNBQVMsQ0FBQ0MsT0FBTSxPQUFPLEVBQzVCLEtBQUssV0FBVyxDQUFDQSxPQUFNLFNBQVMsRUFDaEMsS0FBSyxRQUFRLENBQUNBLE9BQU0sTUFBTSxFQUMxQixLQUFLLFlBQVksQ0FBQ0EsT0FBTSxVQUFVLEVBQ2xDLEtBQUssWUFBWSxDQUFDQSxPQUFNLFVBQVUsRUFDbEMsS0FBSyxRQUFRLENBQUNBLE9BQU0sTUFBTSxFQUMxQixLQUFLLFFBQVEsQ0FBQ0EsT0FBTSxNQUFNLEVBQzFCLEtBQUssVUFBVSxDQUFDQSxPQUFNLFFBQVEsRUFDOUIsS0FBSyxVQUFVLENBQUNBLE9BQU0sUUFBUSxFQUM5QixLQUFLLFVBQVUsQ0FBQ0EsT0FBTSxRQUFRLEVBQzlCLEtBQUssS0FBSyxDQUFDQSxPQUFNLFNBQVMsRUFDMUIsTUFBTTtBQUdKLEVBQU1ELGtCQUFBLFNBQVMsSUFBSSxnQkFBZ0IsUUFBUSxFQUM3QyxLQUFLLFNBQVMsQ0FBQ0UsT0FBTUEsR0FBRSxNQUFNLEVBQzdCLEtBQUssVUFBVSxDQUFDQSxPQUFNLE9BQU8sS0FBS0EsRUFBQyxFQUFFLE1BQU0sRUFDM0MsS0FBSyxVQUFVLENBQUNBLE9BQU1BLEdBQUUsTUFBTSxFQUM5QixLQUFLLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDdEIsTUFBTTtBQUdKLEVBQU1GLGtCQUFBLE9BQXFCLENBQUMsYUFBYSxTQUFTO0FBR2xELEVBQU1BLGtCQUFBLFNBQXVCLENBQUMsYUFBYSxTQUFTO0FBQ3ZELFFBQUksS0FBSyxTQUFTLEtBQUssRUFBRyxPQUFNLE1BQU0sK0NBQStDO0FBQ3JGLFFBQUksU0FBa0MsQ0FBQztBQUN2QyxhQUFTLFFBQVEsR0FBRyxRQUFRLEtBQUssUUFBUSxTQUFTLEdBQUc7QUFDakQsVUFBSSxNQUFNLEtBQUssS0FBSztBQUNwQixVQUFJLENBQUMsU0FBUyxTQUFTLEdBQUcsRUFBRyxPQUFNLE1BQU0sNkRBQTZEO0FBQ3RHLGFBQU8sR0FBRyxJQUFJLEtBQUssUUFBUSxDQUFDO0FBQUEsSUFDaEM7QUFFQSxXQUFPO0FBQUEsRUFDWDtBQUdPLEVBQU1BLGtCQUFBLE9BQXFCLElBQUksZ0JBQWdCLE1BQU0sRUFDdkQsS0FBSyxVQUFVLENBQUNFLElBQUdQLE9BQU0sS0FBSyxLQUFLQSxHQUFFLFlBQVksVUFBVU8sRUFBQyxHQUFHLEtBQUssQ0FBQyxFQUNyRSxLQUFLLFFBQVEsQ0FBQ0EsT0FBTUEsRUFBQyxFQUNyQixLQUFLLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFDekIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEtBQUssVUFBVSxVQUFVLENBQUNDLElBQUdDLElBQUdULE9BQU0sS0FBSyxLQUFLQSxHQUFFLFlBQVksVUFBVVEsRUFBQyxHQUFHLE9BQU9DLEVBQUMsQ0FBQyxFQUNyRixLQUFLLFVBQVUsVUFBVSxXQUFXLENBQUNELElBQUdDLElBQUdDLElBQUdWLE9BQU0sS0FBSyxLQUFLQSxHQUFFLFlBQVksVUFBVVEsRUFBQyxHQUFHRSxJQUFHRCxFQUFDLENBQUMsRUFDL0YsS0FBSyxRQUFRLFVBQVUsQ0FBQ0QsSUFBR0MsT0FBTUQsR0FBRSxZQUFZQyxFQUFDLENBQUMsRUFDakQsS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQzVCLEtBQUssS0FBSyxRQUFRLENBQUNELElBQUdHLEtBQUlYLFdBQU1LLGtCQUFBLE1BQUtMLElBQUdRLEVBQUMsQ0FBQyxFQUMxQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixNQUFNO0FBR0osRUFBTUgsa0JBQUEsUUFBc0IsSUFBSSxnQkFBZ0IsT0FBTyxFQUN6RCxLQUFLLFFBQVEsQ0FBQ08sT0FBTUEsR0FBRSxRQUFRLENBQUMsRUFDL0IsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEtBQUssUUFBUSxXQUFXLENBQUNBLElBQUdGLElBQUdWLE9BQU9VLEtBQUlFLEdBQUUsUUFBUSxJQUFJQSxHQUFFLFVBQVUsQ0FBRSxFQUN0RSxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ3ZCLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsTUFBTTtBQUdKLEVBQU1QLGtCQUFBLE9BQU8sSUFBSSxnQkFBZ0IsTUFBTSxFQUN6QyxLQUFLLFVBQVUsQ0FBQyxRQUFRO0FBQ3JCLFFBQUksYUFBYSxXQUFXLFNBQVMsTUFBTSxHQUFHO0FBQzlDLFFBQUksV0FBVyxPQUFRLFFBQU8sV0FBVztBQUFBLFFBQ3BDLFFBQU87QUFBQSxFQUNoQixDQUFDLEVBQ0EsS0FBSyxRQUFRLENBQUNJLE9BQU1BLEVBQUMsRUFDckIsS0FBSyxRQUFRLENBQUNJLE9BQU1iLE9BQU07QUF6UG5DO0FBMlBZLFFBQUlhLE1BQUssU0FBUztBQUNkLFVBQUlDLGNBQWEsV0FBVyxLQUFLLE1BQU1ELE1BQUssT0FBTztBQUNuRCxVQUFJQyxZQUFXLE9BQVEsUUFBT0EsWUFBVztBQUFBLElBQzdDO0FBR0EsUUFBSSxhQUFhLFdBQVcsS0FBSyxNQUFNRCxNQUFLLElBQUk7QUFDaEQsUUFBSSxXQUFXLE9BQVEsUUFBTyxXQUFXO0FBR3pDLFFBQUksV0FBV2IsR0FBRSxZQUFZLFFBQVFhLE1BQUssSUFBSTtBQUM5QyxRQUFJLGNBQWEsMENBQWtCLFNBQWxCLG1CQUF3QixNQUFLO0FBQzFDLGNBQVEsMENBQWtCLFNBQWxCLG1CQUF3QjtBQUFBLElBQ3BDO0FBRUEsV0FBTztBQUFBLEVBQ1gsQ0FBQyxFQUNBLEtBQUssVUFBVSxVQUFVLENBQUNKLElBQUdNLE9BQU07QUFDaEMsUUFBSUEsT0FBTSxPQUFPQSxPQUFNLEtBQUs7QUFDeEIsVUFBSUMsU0FBUSxhQUFhLEtBQUtQLEVBQUM7QUFDL0IsVUFBSU8sT0FBTyxRQUFPLFNBQVMsV0FBVyxPQUFPLFNBQVNBLE9BQU0sQ0FBQyxDQUFDLEtBQUtELE9BQU0sTUFBTSxNQUFPLEVBQUU7QUFBQSxXQUNuRjtBQUNELGNBQU0sTUFBTSwyQ0FBMkM7QUFBQSxNQUMzRDtBQUFBLElBQ0osT0FBTztBQUNILFVBQUksYUFBYSxTQUFTLFdBQVdOLElBQUdNLEVBQUM7QUFDekMsVUFBSSxXQUFXLFFBQVMsUUFBTztBQUFBLFdBQzFCO0FBQ0QsY0FBTSxNQUFNLHdCQUF3QkEsRUFBQyxxQkFBcUJOLEVBQUMsR0FBRztBQUFBLE1BQ2xFO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQyxFQUNBLEtBQUssUUFBUSxNQUFNLElBQUksRUFDdkIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFHSixFQUFNSixrQkFBQSxNQUFNLElBQUksZ0JBQWdCLEtBQUssRUFDdkMsS0FBSyxVQUFVLENBQUMsUUFBUTtBQUNyQixRQUFJLFlBQVksV0FBVyxTQUFTLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDcEQsUUFBSSxVQUFVLE9BQVEsUUFBTyxVQUFVO0FBQUEsUUFDbEMsUUFBTztBQUFBLEVBQ2hCLENBQUMsRUFDQSxLQUFLLFlBQVksQ0FBQ0ksT0FBTUEsRUFBQyxFQUN6QixLQUFLLFFBQVEsQ0FBQ0EsT0FBTUEsRUFBQyxFQUNyQixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsTUFBTTtBQUdKLEVBQU1KLGtCQUFBLGFBQWEsSUFBSSxnQkFBZ0IsWUFBWSxFQUNyRCxLQUFLLFFBQVEsVUFBVSxDQUFDWSxPQUFNLFdBQVdBLE1BQUssU0FBUyxRQUFRLEVBQUUsUUFBUSxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQzNGLEtBQUssUUFBUSxVQUFVLENBQUMsTUFBTSxZQUFZLElBQUksRUFDOUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFFSixFQUFNWixrQkFBQSxZQUFZLElBQUksZ0JBQWdCLFdBQVcsRUFDbkQsS0FBSyxRQUFRLENBQUNJLE9BQU1BLEdBQUUsUUFBUSxDQUFDLEVBQy9CLEtBQUssUUFBUSxNQUFNLElBQUksRUFDdkIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFFWCxRQUFNLGVBQWU7QUFHZCxFQUFNSixrQkFBQSxTQUFTLElBQUksZ0JBQWdCLFFBQVEsRUFDN0MsS0FBSyxVQUFVLENBQUNFLE9BQU1BLEVBQUMsRUFDdkIsS0FBSyxVQUFVLENBQUMsUUFBUTtBQUNyQixRQUFJUyxTQUFRLGFBQWEsS0FBSyxHQUFHO0FBQ2pDLFFBQUlBLE9BQU8sUUFBTyxPQUFPLFdBQVdBLE9BQU0sQ0FBQyxDQUFDO0FBQUEsUUFDdkMsUUFBTztBQUFBLEVBQ2hCLENBQUMsRUFDQSxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ3ZCLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBTUosRUFBTVgsa0JBQUEsU0FBUyxJQUFJLGdCQUFnQixRQUFRLEVBQzdDLEtBQUssS0FBSyxDQUFDRSxJQUFHLFFBQVEsU0FBUyxTQUFTQSxJQUFHLGVBQWUsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUN4RSxNQUFNO0FBRUosRUFBTUYsa0JBQUEsUUFBUSxJQUFJLGdCQUFnQixPQUFPLEVBQzNDLEtBQUssVUFBVSxDQUFDYSxPQUFNLEtBQUssTUFBTUEsRUFBQyxDQUFDLEVBQ25DLEtBQUssUUFBUSxNQUFNLElBQUksRUFDdkIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEtBQUssVUFBVSxVQUFVLENBQUNBLElBQUdmLE9BQU07QUFDaEMsUUFBSUEsTUFBSyxFQUFHLFFBQU8sS0FBSyxNQUFNZSxFQUFDO0FBQy9CLFdBQU8sV0FBV0EsR0FBRSxRQUFRZixFQUFDLENBQUM7QUFBQSxFQUNsQyxDQUFDLEVBQ0EsS0FBSyxVQUFVLFFBQVEsQ0FBQ2UsT0FBTSxLQUFLLE1BQU1BLEVBQUMsQ0FBQyxFQUMzQyxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDNUIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFFSixFQUFNYixrQkFBQSxNQUFvQixJQUFJLGdCQUFnQixLQUFLLEVBQ3JELEtBQUssS0FBSyxRQUFRLENBQUNFLElBQUdJLFFBQU9KLEVBQUMsRUFDOUIsS0FBSyxRQUFRLEtBQUssQ0FBQ0ksS0FBSUosT0FBTUEsRUFBQyxFQUM5QixLQUFLLEtBQUssS0FBSyxDQUFDQSxJQUFHWSxJQUFHLFFBQVMsU0FBUyxRQUFRWixJQUFHWSxJQUFHLElBQUksWUFBWSxTQUFTLEtBQUssSUFBSVosS0FBSVksRUFBRSxFQUM5RixLQUFLLFNBQVMsQ0FBQ1osSUFBRyxZQUFRRixrQkFBQSxLQUFJLEtBQUssR0FBR0UsRUFBQyxDQUFDLEVBQ3hDLE9BQU8sQ0FBQyxRQUFRLFNBQVUsS0FBSyxVQUFVLElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQ0osSUFBR0gsV0FBTUssa0JBQUEsS0FBSSxLQUFLRixJQUFHSCxFQUFDLENBQUMsQ0FBRSxFQUMxRixNQUFNO0FBRUosRUFBTUssa0JBQUEsTUFBb0IsSUFBSSxnQkFBZ0IsS0FBSyxFQUNyRCxLQUFLLEtBQUssUUFBUSxDQUFDRSxJQUFHSSxRQUFPSixFQUFDLEVBQzlCLEtBQUssUUFBUSxLQUFLLENBQUNJLEtBQUlKLE9BQU1BLEVBQUMsRUFDOUIsS0FBSyxLQUFLLEtBQUssQ0FBQ0EsSUFBR1ksSUFBRyxRQUFTLFNBQVMsUUFBUVosSUFBR1ksSUFBRyxJQUFJLFlBQVksU0FBUyxJQUFJLElBQUlaLEtBQUlZLEVBQUUsRUFDN0YsS0FBSyxTQUFTLENBQUNaLElBQUcsWUFBUUYsa0JBQUEsS0FBSSxLQUFLLEdBQUdFLEVBQUMsQ0FBQyxFQUN4QyxPQUFPLENBQUMsUUFBUSxTQUFVLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUNKLElBQUdILFdBQU1LLGtCQUFBLEtBQUksS0FBS0YsSUFBR0gsRUFBQyxDQUFDLENBQUUsRUFDMUYsTUFBTTtBQUVKLEVBQU1LLGtCQUFBLFFBQXNCLElBQUksZ0JBQWdCLE9BQU8sRUFDekQsS0FBSyxTQUFTLFlBQVksQ0FBQyxLQUFLLE1BQU0sUUFBUTtBQUMzQyxRQUFJLElBQUksVUFBVSxFQUFHLFFBQU87QUFFNUIsUUFBSSxTQUFTLElBQUksSUFBSSxDQUFDZSxPQUFNO0FBQ3hCLGFBQU8sRUFBRSxPQUFPQSxJQUFHLFFBQVEsS0FBSyxLQUFLQSxFQUFDLEVBQUU7QUFBQSxJQUM1QyxDQUFDO0FBQ0QsUUFBSSxXQUFXLE9BQU8sT0FBTyxDQUFDQSxPQUFNLENBQUMsU0FBUyxPQUFPQSxHQUFFLE1BQU0sQ0FBQztBQUM5RCxRQUFJLFNBQVMsVUFBVSxFQUFHLFFBQU8sSUFBSSxDQUFDO0FBRXRDLFdBQU8sU0FBUyxPQUFPLENBQUNqQixJQUFHSCxPQUFNO0FBQzdCLFVBQUksU0FBUyxRQUFRRyxHQUFFLFFBQVFILEdBQUUsUUFBUSxJQUFJLFlBQVksU0FBUyxLQUFLLEVBQUcsUUFBT0c7QUFBQSxVQUM1RSxRQUFPSDtBQUFBLElBQ2hCLENBQUMsRUFBRTtBQUFBLEVBQ1AsQ0FBQyxFQUNBLEtBQUssUUFBUSxZQUFZLENBQUMsTUFBTSxPQUFPLFNBQVMsSUFBSSxFQUNwRCxNQUFNO0FBRUosRUFBTUssa0JBQUEsUUFBc0IsSUFBSSxnQkFBZ0IsT0FBTyxFQUN6RCxLQUFLLFNBQVMsWUFBWSxDQUFDLEtBQUssTUFBTSxRQUFRO0FBQzNDLFFBQUksSUFBSSxVQUFVLEVBQUcsUUFBTztBQUU1QixRQUFJLFNBQVMsSUFBSSxJQUFJLENBQUNlLE9BQU07QUFDeEIsYUFBTyxFQUFFLE9BQU9BLElBQUcsUUFBUSxLQUFLLEtBQUtBLEVBQUMsRUFBRTtBQUFBLElBQzVDLENBQUM7QUFDRCxRQUFJLFdBQVcsT0FBTyxPQUFPLENBQUNBLE9BQU0sQ0FBQyxTQUFTLE9BQU9BLEdBQUUsTUFBTSxDQUFDO0FBQzlELFFBQUksU0FBUyxVQUFVLEVBQUcsUUFBTyxJQUFJLENBQUM7QUFFdEMsV0FBTyxTQUFTLE9BQU8sQ0FBQ2pCLElBQUdILE9BQU07QUFDN0IsVUFBSSxTQUFTLFFBQVFHLEdBQUUsUUFBUUgsR0FBRSxRQUFRLElBQUksWUFBWSxTQUFTLElBQUksRUFBRyxRQUFPRztBQUFBLFVBQzNFLFFBQU9IO0FBQUEsSUFDaEIsQ0FBQyxFQUFFO0FBQUEsRUFDUCxDQUFDLEVBQ0EsS0FBSyxRQUFRLFlBQVksQ0FBQyxNQUFNLE9BQU8sU0FBUyxJQUFJLEVBQ3BELE1BQU07QUFFSixFQUFNSyxrQkFBQSxZQUFZLElBQUksZ0JBQWdCLFdBQVcsRUFDbkQsS0FBSyxRQUFRLENBQUNJLE9BQU0sU0FBUyxXQUFXLEVBQUUsTUFBTUEsR0FBRSxNQUFNLE9BQU9BLEdBQUUsT0FBTyxLQUFLQSxHQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3JGLEtBQUssUUFBUSxDQUFDRSxRQUFPLElBQUksRUFDekIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFHSixFQUFNTixrQkFBQSxXQUF5QixJQUFJLGdCQUFnQixVQUFVLEVBQy9ELEtBQUssU0FBUyxLQUFLLENBQUNPLElBQUcsTUFBTSxZQUFZQSxHQUFFLEtBQUssQ0FBQ0YsV0FBTUwsa0JBQUEsVUFBUyxTQUFTSyxJQUFHLElBQUksQ0FBQyxDQUFDLEVBQ2xGLEtBQUssVUFBVSxVQUFVLENBQUMsVUFBVSxXQUFXLFNBQVMsU0FBUyxNQUFNLENBQUMsRUFDeEUsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUFLLFFBQVEsT0FBTyxHQUFHLEVBQ2pEO0FBQUEsSUFBSztBQUFBLElBQUs7QUFBQSxJQUFLLENBQUMsT0FBTyxPQUFPLFlBQzNCLFFBQ0ssU0FBUyxZQUFZLFNBQVMsWUFBWSxRQUFRLEtBQUssR0FBRyxLQUFLLFlBQVksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUMxRixZQUFZO0FBQUEsRUFDckIsRUFDQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsTUFBTTtBQUdKLEVBQU1MLGtCQUFBLFlBQTBCLElBQUksZ0JBQWdCLFdBQVcsRUFDakUsS0FBSyxTQUFTLEtBQUssQ0FBQ08sSUFBRyxNQUFNLFlBQVlBLEdBQUUsS0FBSyxDQUFDRixXQUFNTCxrQkFBQSxXQUFVLFNBQVNLLElBQUcsSUFBSSxDQUFDLENBQUMsRUFDbkY7QUFBQSxJQUFLO0FBQUEsSUFBVTtBQUFBLElBQVUsQ0FBQyxVQUFVLFdBQ2pDLFNBQVMsa0JBQWtCLEVBQUUsU0FBUyxPQUFPLGtCQUFrQixDQUFDO0FBQUEsRUFDcEUsRUFDQyxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQUssUUFBUSxPQUFPLEdBQUcsRUFDakQ7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUssQ0FBQyxPQUFPLE9BQU8sWUFDM0IsUUFDSyxTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsS0FBSyxHQUFHLEtBQUssWUFBWSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQzFGLFlBQVk7QUFBQSxFQUNyQixFQUNDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBR0osRUFBTUwsa0JBQUEsWUFBMEIsSUFBSSxnQkFBZ0IsV0FBVyxFQUNqRTtBQUFBLElBQUs7QUFBQSxJQUFTO0FBQUEsSUFBSyxDQUFDTyxJQUFHLE1BQU0sWUFDMUJBLEdBQUU7QUFBQSxNQUFLLENBQUNGLE9BQ0osUUFDSyxTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsSUFBSSxHQUFHLEtBQUssWUFBWSxRQUFRQSxFQUFDLENBQUMsQ0FBQyxFQUNyRixZQUFZO0FBQUEsSUFDckI7QUFBQSxFQUNKLEVBQ0MsS0FBSyxVQUFVLFVBQVUsQ0FBQyxVQUFVLFdBQVcsU0FBUyxTQUFTLE1BQU0sQ0FBQyxFQUN4RSxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQUssUUFBUSxPQUFPLEdBQUcsRUFDakQ7QUFBQSxJQUFLO0FBQUEsSUFBSztBQUFBLElBQUssQ0FBQyxPQUFPLE9BQU8sWUFDM0IsUUFDSyxTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsS0FBSyxHQUFHLEtBQUssWUFBWSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQzFGLFlBQVk7QUFBQSxFQUNyQixFQUNDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBR0osRUFBTUwsa0JBQUEsZUFBNkIsSUFBSSxnQkFBZ0IsY0FBYyxFQUN2RTtBQUFBLElBQ0c7QUFBQSxJQUNBO0FBQUEsSUFDQSxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksT0FBTyxVQUFVLFlBQVksTUFBTSxJQUFJLFNBQVMsR0FBRyxDQUFDO0FBQUEsRUFDekYsRUFDQyxLQUFLLFFBQVEsS0FBSyxDQUFDLElBQUksT0FBTyxJQUFJLEVBQ2xDLEtBQUssS0FBSyxRQUFRLENBQUMsSUFBSSxPQUFPLElBQUksRUFDbEMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsTUFBTTtBQUdKLEVBQU1BLGtCQUFBLFVBQXdCLENBQUMsWUFBdUIsU0FBb0I7QUFDN0UsUUFBSSxLQUFLLFVBQVUsRUFBRyxRQUFPO0FBRzdCLFFBQUlnQixVQUFTLEtBQUssQ0FBQztBQUNuQixRQUFJLFNBQVMsUUFBUUEsT0FBTSxFQUFHLFFBQU9BLFFBQU8sSUFBSSxDQUFDRCxXQUFNZixrQkFBQSxTQUFRLFNBQVNlLElBQUcsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFNUYsUUFBSSxTQUFrQyxDQUFDO0FBQ3ZDLGFBQVMsUUFBUSxHQUFHLFFBQVEsS0FBSyxRQUFRLFNBQVM7QUFDOUMsVUFBSSxNQUFNLEtBQUssS0FBSztBQUNwQixVQUFJLENBQUMsU0FBUyxTQUFTLEdBQUcsRUFBRyxPQUFNLE1BQU0sNERBQTREO0FBRXJHLGFBQU8sR0FBRyxJQUFJLFFBQ1QsU0FBUyxZQUFZLE1BQU0sWUFBWSxRQUFRQyxPQUFNLEdBQUcsWUFBWSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQ2pGLFlBQVk7QUFBQSxJQUNyQjtBQUVBLFdBQU87QUFBQSxFQUNYO0FBR08sRUFBTWhCLGtCQUFBLFVBQVUsSUFBSSxnQkFBZ0IsU0FBUyxFQUMvQyxLQUFLLFNBQVMsQ0FBQ08sT0FBTTtBQUNsQixRQUFJLFNBQVMsQ0FBQztBQUNkLGFBQVMsUUFBUUEsR0FBRSxTQUFTLEdBQUcsU0FBUyxHQUFHLFFBQVMsUUFBTyxLQUFLQSxHQUFFLEtBQUssQ0FBQztBQUN4RSxXQUFPO0FBQUEsRUFDWCxDQUFDLEVBQ0EsS0FBSyxVQUFVLENBQUNBLE9BQU07QUFDbkIsUUFBSSxTQUFTO0FBQ2IsYUFBU1osS0FBSSxHQUFHQSxLQUFJWSxHQUFFLFFBQVFaLEtBQUssV0FBVVksR0FBRUEsR0FBRSxTQUFTWixLQUFJLENBQUM7QUFDL0QsV0FBTztBQUFBLEVBQ1gsQ0FBQyxFQUNBLEtBQUssS0FBSyxDQUFDVSxPQUFNQSxFQUFDLEVBQ2xCLE1BQU07QUFHSixFQUFNTCxrQkFBQSxPQUFxQixJQUFJLGdCQUFnQixNQUFNLEVBQ3ZELEtBQUssU0FBUyxDQUFDaUIsT0FBTSxnQkFBWWpCLGtCQUFBLE1BQUssU0FBU2lCLE9BQU0sQ0FBQyxNQUFpQmYsT0FBZUEsRUFBQyxDQUFDLEVBQ3hGLEtBQUssU0FBUyxZQUFZLENBQUNlLE9BQU0sS0FBSyxZQUFZO0FBQy9DLFFBQUksU0FBVSxDQUFDLEVBQWdCLE9BQU9BLEtBQUk7QUFDMUMsV0FBTyxLQUFLLENBQUNmLElBQUdZLE9BQU07QUFDbEIsVUFBSSxPQUFPLElBQUksU0FBU1osRUFBQztBQUN6QixVQUFJLE9BQU8sSUFBSSxTQUFTWSxFQUFDO0FBQ3pCLFVBQUksS0FBSyxRQUNKLFNBQVMsWUFBWSxTQUFTLFlBQVksUUFBUSxJQUFJLEdBQUcsS0FBSyxZQUFZLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFDeEYsWUFBWTtBQUNqQixVQUFJLFNBQVMsU0FBUyxFQUFFLEVBQUcsUUFBTztBQUVsQyxVQUFJLEtBQUssUUFDSixTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsSUFBSSxHQUFHLEtBQUssWUFBWSxRQUFRLElBQUksQ0FBQyxDQUFDLEVBQ3hGLFlBQVk7QUFDakIsVUFBSSxTQUFTLFNBQVMsRUFBRSxFQUFHLFFBQU87QUFFbEMsYUFBTztBQUFBLElBQ1gsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNYLENBQUMsRUFDQSxLQUFLLEtBQUssQ0FBQ1QsT0FBTUEsRUFBQyxFQUNsQixNQUFNO0FBRUosRUFBTUwsa0JBQUEsWUFBWSxJQUFJLGdCQUFnQixXQUFXLEVBQ25ELEtBQUssVUFBVSxVQUFVLENBQUMsU0FBaUIsVUFBa0IsT0FBTyxPQUFPLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFDeEYsS0FBSyxRQUFRLEtBQUssQ0FBQ00sS0FBSSxPQUFPLEtBQUssRUFDbkMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJQSxRQUFPLEtBQUssRUFDbkMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsTUFBTTtBQUVKLEVBQU1OLGtCQUFBLGFBQWEsSUFBSSxnQkFBZ0IsWUFBWSxFQUNyRCxLQUFLLFVBQVUsVUFBVSxDQUFDLFNBQWlCLFVBQWtCO0FBQzFELFFBQUksQ0FBQyxRQUFRLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxTQUFTLEdBQUcsRUFBRyxXQUFVLE1BQU0sVUFBVTtBQUNsRixXQUFPLENBQUMsQ0FBQyxNQUFNLE1BQU0sT0FBTztBQUFBLEVBQ2hDLENBQUMsRUFDQSxLQUFLLFFBQVEsS0FBSyxDQUFDTSxLQUFJLE9BQU8sS0FBSyxFQUNuQyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUlBLFFBQU8sS0FBSyxFQUNuQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixNQUFNO0FBRUosRUFBTU4sa0JBQUEsZUFBZSxJQUFJLGdCQUFnQixjQUFjLEVBQ3pELEtBQUssVUFBVSxVQUFVLFVBQVUsQ0FBQyxPQUFlLEtBQWEsUUFBZ0I7QUFDN0UsUUFBSTtBQUNBLFVBQUksTUFBTSxJQUFJLE9BQU8sS0FBSyxHQUFHO0FBQzdCLGFBQU8sTUFBTSxRQUFRLEtBQUssR0FBRztBQUFBLElBQ2pDLFNBQVMsSUFBSTtBQUNULFlBQU0sTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUI7QUFBQSxJQUN6RDtBQUFBLEVBQ0osQ0FBQyxFQUNBLEtBQUssUUFBUSxLQUFLLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ2pDLFVBQVUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFDdEIsTUFBTTtBQUVKLEVBQU1BLGtCQUFBLFFBQVEsSUFBSSxnQkFBZ0IsT0FBTyxFQUMzQyxLQUFLLFVBQVUsQ0FBQ2tCLE9BQU1BLEdBQUUsa0JBQWtCLENBQUMsRUFDM0MsS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUN2QixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsTUFBTTtBQUVKLEVBQU1sQixrQkFBQSxRQUFRLElBQUksZ0JBQWdCLE9BQU8sRUFDM0MsS0FBSyxVQUFVLENBQUNrQixPQUFNQSxHQUFFLGtCQUFrQixDQUFDLEVBQzNDLEtBQUssUUFBUSxNQUFNLElBQUksRUFDdkIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFFSixFQUFNbEIsa0JBQUEsVUFBVSxJQUFJLGdCQUFnQixTQUFTLEVBQy9DLEtBQUssVUFBVSxVQUFVLFVBQVUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE1BQU0sR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQ2hGLEtBQUssUUFBUSxLQUFLLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQ2pDLEtBQUssS0FBSyxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ2pDLFVBQVUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFDdEIsTUFBTTtBQUdYLFFBQU0sWUFBWSxDQUFDLEtBQWEsT0FBZSxVQUMzQyxJQUFJLE1BQU0sSUFBSSxPQUFPLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDbUIsU0FBUUEsUUFBTyxFQUFFO0FBR3ZELEVBQU1uQixrQkFBQSxRQUFzQixJQUFJLGdCQUFnQixPQUFPLEVBQ3pELEtBQUssVUFBVSxVQUFVLENBQUNvQixTQUFRLGFBQWEsVUFBVUEsU0FBUSxRQUFRLENBQUMsRUFDMUUsS0FBSyxVQUFVLFVBQVUsVUFBVSxDQUFDQSxTQUFRLFVBQVUsVUFBVSxVQUFVQSxTQUFRLFVBQVUsS0FBSyxDQUFDLEVBQ2xHLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsS0FBSyxLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxRQUFRLEtBQUssS0FBSyxNQUFNLElBQUksRUFDakMsTUFBTTtBQUVKLEVBQU1wQixrQkFBQSxhQUEyQixJQUFJLGdCQUFnQixZQUFZLEVBQ25FLEtBQUssVUFBVSxVQUFVLENBQUMsS0FBSyxhQUFhLElBQUksV0FBVyxRQUFRLENBQUMsRUFDcEUsS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQzVCLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUM1QixVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixNQUFNO0FBRUosRUFBTUEsa0JBQUEsV0FBeUIsSUFBSSxnQkFBZ0IsVUFBVSxFQUMvRCxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQUssV0FBVyxJQUFJLFNBQVMsTUFBTSxDQUFDLEVBQzlELEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsTUFBTTtBQUVKLEVBQU1BLGtCQUFBLFVBQXdCLElBQUksZ0JBQWdCLFNBQVMsRUFDN0QsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssR0FBRyxDQUFDLEVBQzdELEtBQUssVUFBVSxVQUFVLFVBQVUsQ0FBQyxLQUFLLEtBQUssWUFBWSxJQUFJLFNBQVMsS0FBSyxPQUFPLENBQUMsRUFDcEYsS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQzVCLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUM1QixLQUFLLFFBQVEsS0FBSyxLQUFLLE1BQU0sSUFBSSxFQUNqQyxLQUFLLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUNqQyxLQUFLLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUNqQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQ3RCLE1BQU07QUFFSixFQUFNQSxrQkFBQSxXQUF5QixJQUFJLGdCQUFnQixVQUFVLEVBQy9ELEtBQUssVUFBVSxVQUFVLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEdBQUcsQ0FBQyxFQUMzRCxLQUFLLFVBQVUsVUFBVSxVQUFVLENBQUMsS0FBSyxLQUFLLFlBQVksSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQ2xGLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsS0FBSyxRQUFRLEtBQUssS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDakMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUN0QixNQUFNO0FBRUosRUFBTUEsa0JBQUEsWUFBMEIsSUFBSSxnQkFBZ0IsV0FBVyxFQUNqRSxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQUssVUFBVSxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQzdELEtBQUssVUFBVSxVQUFVLFVBQVUsQ0FBQyxLQUFLLE9BQU9xQixTQUFRLElBQUksVUFBVSxPQUFPQSxJQUFHLENBQUMsRUFDakYsS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQzVCLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUM1QixLQUFLLFFBQVEsS0FBSyxLQUFLLE1BQU0sSUFBSSxFQUNqQyxLQUFLLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUNqQyxLQUFLLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUNqQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQ3RCLE1BQU07QUFFSixFQUFNckIsa0JBQUEsV0FBeUIsSUFBSSxnQkFBZ0IsVUFBVSxFQUMvRCxLQUFLLFVBQVUsVUFBVSxVQUFVLENBQUMsS0FBS3NCLFNBQVEsV0FBVztBQUN6RCxRQUFJLElBQUksU0FBU0EsVUFBUyxPQUFPLFFBQVE7QUFDckMsYUFBTyxJQUFJLFVBQVUsR0FBRyxLQUFLLElBQUksR0FBR0EsVUFBUyxPQUFPLE1BQU0sQ0FBQyxJQUFJO0FBQUEsSUFDbkUsT0FBTztBQUNILGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDSixDQUFDLEVBQ0EsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUFLQSxTQUFRLFlBQVF0QixrQkFBQSxVQUFTLEtBQUssS0FBS3NCLFNBQVEsS0FBSyxDQUFDLEVBQ2hGLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDNUIsS0FBSyxRQUFRLEtBQUssS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLFFBQVEsS0FBSyxNQUFNLElBQUksRUFDakMsS0FBSyxLQUFLLEtBQUssUUFBUSxNQUFNLElBQUksRUFDakMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbkIsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUN0QixNQUFNO0FBRUosRUFBTXRCLGtCQUFBLFdBQVcsSUFBSSxnQkFBZ0IsU0FBUyxFQUNoRCxLQUFLLEtBQUssS0FBSyxDQUFDZSxJQUFHLE9BQVEsU0FBUyxPQUFPQSxFQUFDLElBQUksS0FBS0EsRUFBRSxFQUN2RCxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNuQixNQUFNO0FBRUosRUFBTWYsa0JBQUEsV0FBVyxJQUFJLGdCQUFnQixVQUFVLEVBQ2pELEtBQUssS0FBSyxLQUFLLENBQUNlLElBQUcsT0FBUSxTQUFTLE9BQU9BLEVBQUMsSUFBSSxLQUFLQSxFQUFFLEVBQ3ZELE1BQU07QUFFSixFQUFNZixrQkFBQSxTQUFTLElBQUksZ0JBQWdCLFFBQVEsRUFDN0MsS0FBSyxLQUFLLEtBQUssS0FBSyxDQUFDYyxJQUFHLE1BQU0sVUFBVyxTQUFTLFNBQVNBLEVBQUMsSUFBSSxPQUFPLEtBQU0sRUFDN0UsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLE1BQU07QUFFSixFQUFNZCxrQkFBQSxTQUFTLElBQUksZ0JBQWdCLFFBQVEsRUFDN0MsS0FBSyxTQUFTLFVBQVUsQ0FBQyxLQUFLLElBQUksWUFBWTtBQUMzQyxRQUFJLElBQUksVUFBVSxFQUFHLFFBQU87QUFFNUIsUUFBSSxNQUFNLE9BQU8sTUFBTSxPQUFPLE1BQU0sT0FBTyxNQUFNLE9BQU8sTUFBTSxPQUFPLE1BQU07QUFDdkUsWUFBTSxNQUFNLDZEQUE2RDtBQUU3RSxRQUFJLFFBQVEsSUFBSSxDQUFDO0FBQ2pCLGFBQVMsUUFBUSxHQUFHLFFBQVEsSUFBSSxRQUFRLFNBQVM7QUFDN0MsY0FBUSxRQUNILFNBQVMsWUFBWSxTQUFTLFlBQVksUUFBUSxLQUFLLEdBQUcsSUFBSSxZQUFZLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzlGLFlBQVk7QUFBQSxJQUNyQjtBQUVBLFdBQU87QUFBQSxFQUNYLENBQUMsRUFDQSxLQUFLLFNBQVMsWUFBWSxDQUFDLEtBQUssSUFBSSxZQUFZO0FBQzdDLFFBQUksSUFBSSxVQUFVLEVBQUcsUUFBTztBQUU1QixRQUFJLFFBQVEsSUFBSSxDQUFDO0FBQ2pCLGFBQVMsUUFBUSxHQUFHLFFBQVEsSUFBSSxRQUFRLFNBQVM7QUFFN0MsVUFBSSxTQUFTLE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBRztBQUVqQyxjQUFRLEdBQUcsU0FBUyxPQUFPLElBQUksS0FBSyxDQUFDO0FBQUEsSUFDekM7QUFFQSxXQUFPO0FBQUEsRUFDWCxDQUFDLEVBQ0EsS0FBSyxRQUFRLEtBQUssTUFBTSxJQUFJLEVBQzVCLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxFQUM1QixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEIsTUFBTTtBQUVKLEVBQU1BLGtCQUFBLE1BQU0sSUFBSSxnQkFBZ0IsS0FBSyxFQUN2QyxLQUFLLFNBQVMsQ0FBQyxLQUFLTCxXQUFNSyxrQkFBQSxRQUFPTCxJQUFHLEtBQUssR0FBRyxDQUFDLEVBQzdDLEtBQUssS0FBSyxDQUFDVSxPQUFNQSxFQUFDLEVBQ2xCLE1BQU07QUFFSixFQUFNTCxrQkFBQSxVQUFVLElBQUksZ0JBQWdCLFNBQVMsRUFDL0MsS0FBSyxTQUFTLENBQUMsT0FBTyxZQUFZO0FBQy9CLFFBQUksTUFBTSxVQUFVLEVBQUcsUUFBTztBQUU5QixVQUFNLFVBQU1BLGtCQUFBLEtBQUksU0FBUyxLQUFLO0FBQzlCLFFBQUksT0FBTyxRQUFRLE9BQU8sT0FBVyxRQUFPO0FBRTVDLFdBQU8sUUFDRixTQUFTLFlBQVksU0FBUyxZQUFZLFFBQVEsR0FBRyxHQUFHLEtBQUssWUFBWSxRQUFRLE1BQU0sTUFBTSxDQUFDLENBQUMsRUFDL0YsWUFBWTtBQUFBLEVBQ3JCLENBQUMsRUFDQSxLQUFLLEtBQUssQ0FBQ0ssT0FBTUEsRUFBQyxFQUNsQixNQUFNO0FBRUosRUFBTUwsa0JBQUEsVUFBVSxJQUFJLGdCQUFnQixTQUFTLEVBQy9DLEtBQUssU0FBUyxDQUFDLEtBQUtMLFdBQU1LLGtCQUFBLFFBQU9MLElBQUcsS0FBSyxHQUFHLENBQUMsRUFDN0MsS0FBSyxLQUFLLENBQUNVLE9BQU1BLEVBQUMsRUFDbEIsTUFBTTtBQUVKLEVBQU1MLGtCQUFBLE9BQXFCLElBQUksZ0JBQWdCLE1BQU0sRUFDdkQ7QUFBQSxJQUFLO0FBQUEsSUFBUztBQUFBLElBQVUsQ0FBQyxLQUFLLEtBQUssUUFDaEMsSUFBSSxJQUFJLENBQUNLLE9BQU0sU0FBUyxTQUFTQSxJQUFHLGVBQWUsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLEVBQy9FLEVBQ0MsS0FBSyxTQUFTLFFBQVEsQ0FBQyxLQUFLLElBQUksZ0JBQVlMLGtCQUFBLE1BQUssU0FBUyxLQUFLLElBQUksQ0FBQyxFQUNwRSxLQUFLLEtBQUssVUFBVSxDQUFDLE1BQU0sS0FBSyxRQUFRLFNBQVMsU0FBUyxNQUFNLGVBQWUsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUM3RixLQUFLLFNBQVMsQ0FBQyxLQUFLLGdCQUFZQSxrQkFBQSxNQUFLLFNBQVMsS0FBSyxJQUFJLENBQUMsRUFDeEQsS0FBSyxLQUFLLENBQUNLLElBQUcsUUFBUSxTQUFTLFNBQVNBLElBQUcsZUFBZSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQ3hFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixNQUFNO0FBRUosRUFBTUwsa0JBQUEsTUFBTSxJQUFJLGdCQUFnQixLQUFLLEVBQ3ZDLEtBQUssU0FBUyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUNlLE9BQU0sU0FBUyxTQUFTQSxFQUFDLENBQUMsQ0FBQyxFQUM1RCxLQUFLLFNBQVMsWUFBWSxDQUFDLEtBQUtMLElBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQ0ssT0FBTSxTQUFTLFNBQVNMLEdBQUUsS0FBS0ssRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUN4RixPQUFPLENBQUMsU0FBUyxTQUFTLEtBQUssS0FBSyxDQUFDQSxPQUFNLFNBQVMsU0FBU0EsRUFBQyxDQUFDLENBQUMsRUFDaEUsTUFBTTtBQUVKLEVBQU1mLGtCQUFBLE1BQU0sSUFBSSxnQkFBZ0IsS0FBSyxFQUN2QyxLQUFLLFNBQVMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDZSxPQUFNLFNBQVMsU0FBU0EsRUFBQyxDQUFDLENBQUMsRUFDN0QsS0FBSyxTQUFTLFlBQVksQ0FBQyxLQUFLTCxJQUFHLFFBQVEsSUFBSSxNQUFNLENBQUNLLE9BQU0sU0FBUyxTQUFTTCxHQUFFLEtBQUtLLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekYsT0FBTyxDQUFDLFNBQVMsU0FBUyxLQUFLLE1BQU0sQ0FBQ0EsT0FBTSxTQUFTLFNBQVNBLEVBQUMsQ0FBQyxDQUFDLEVBQ2pFLE1BQU07QUFFSixFQUFNZixrQkFBQSxPQUFPLElBQUksZ0JBQWdCLEtBQUssRUFDeEMsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDZSxPQUFNLFNBQVMsU0FBU0EsRUFBQyxDQUFDLENBQUMsRUFDN0QsS0FBSyxTQUFTLFlBQVksQ0FBQyxLQUFLTCxJQUFHLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQ0ssT0FBTSxTQUFTLFNBQVNMLEdBQUUsS0FBS0ssRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUN6RixPQUFPLENBQUMsU0FBUyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUNBLE9BQU0sU0FBUyxTQUFTQSxFQUFDLENBQUMsQ0FBQyxFQUNqRSxNQUFNO0FBRUosRUFBTWYsa0JBQUEsU0FBUyxJQUFJLGdCQUFnQixRQUFRLEVBQzdDLEtBQUssU0FBUyxZQUFZLENBQUMsS0FBS1UsSUFBRyxRQUFRLElBQUksT0FBTyxDQUFDSyxPQUFNLFNBQVMsU0FBU0wsR0FBRSxLQUFLSyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFGLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixNQUFNO0FBRUosRUFBTWYsa0JBQUEsTUFBTSxJQUFJLGdCQUFnQixLQUFLLEVBQ3ZDLEtBQUssU0FBUyxZQUFZLENBQUMsS0FBS1UsSUFBRyxRQUFRLElBQUksSUFBSSxDQUFDSyxPQUFNTCxHQUFFLEtBQUtLLEVBQUMsQ0FBQyxDQUFDLEVBQ3BFLEtBQUssUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUM1QixNQUFNO0FBRUosRUFBTWYsa0JBQUEsVUFBVSxJQUFJLGdCQUFnQixTQUFTLEVBQy9DLEtBQUssU0FBUyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUNlLE9BQU0sU0FBUyxPQUFPQSxFQUFDLEtBQUssTUFBTSxDQUFDLEVBQ3RFLE9BQU8sQ0FBQyxTQUFTLFNBQVMsS0FBSyxPQUFPLENBQUNBLE9BQU0sU0FBUyxPQUFPQSxFQUFDLEtBQUssTUFBTSxDQUFDLEVBQzFFLE1BQU07QUFHSixFQUFNZixrQkFBQSxPQUFxQixJQUFJLGdCQUFnQixNQUFNLEVBQ3ZELEtBQUssUUFBUSxDQUFDUSxVQUFNO0FBMXdCN0I7QUEwd0JpQztBQUFBLE1BQ3JCLFVBQVMsS0FBQUEsTUFBSyxZQUFMLFlBQWdCO0FBQUEsTUFDekIsT0FBT0EsTUFBSztBQUFBLE1BQ1osTUFBTUEsTUFBSztBQUFBLE1BQ1gsVUFBUyxLQUFBQSxNQUFLLFlBQUwsWUFBZ0I7QUFBQSxNQUN6QixNQUFNQSxNQUFLO0FBQUEsSUFDZjtBQUFBLEdBQUUsRUFDRCxNQUFNO0FBR0osRUFBTVIsa0JBQUEsT0FBTyxJQUFJLGdCQUFnQixNQUFNLEVBQ3pDLEtBQUssU0FBUyxDQUFDRSxPQUFNO0FBQ2xCLFdBQU9BLEdBQUUsS0FBSztBQUFBLEVBQ2xCLENBQUMsRUFDQSxLQUFLLFNBQVMsVUFBVSxDQUFDQSxJQUFHVyxPQUFNO0FBRS9CLFdBQU9YLEdBQUUsS0FBS1csRUFBQztBQUFBLEVBQ25CLENBQUMsRUFDQSxLQUFLLFFBQVEsTUFBTSxJQUFJLEVBQ3ZCLE1BQU07QUFBQSxHQTVtQkU7QUFnbkJWLElBQU0sb0JBQWtEO0FBQUE7QUFBQSxFQUUzRCxNQUFNLGlCQUFpQjtBQUFBLEVBQ3ZCLE9BQU8saUJBQWlCO0FBQUEsRUFDeEIsTUFBTSxpQkFBaUI7QUFBQSxFQUN2QixPQUFPLGlCQUFpQjtBQUFBLEVBQ3hCLE1BQU0saUJBQWlCO0FBQUEsRUFDdkIsS0FBSyxpQkFBaUI7QUFBQSxFQUN0QixZQUFZLGlCQUFpQjtBQUFBLEVBQzdCLFdBQVcsaUJBQWlCO0FBQUEsRUFDNUIsUUFBUSxpQkFBaUI7QUFBQSxFQUN6QixRQUFRLGlCQUFpQjtBQUFBLEVBQ3pCLFFBQVEsaUJBQWlCO0FBQUEsRUFDekIsUUFBUSxpQkFBaUI7QUFBQTtBQUFBLEVBR3pCLE9BQU8saUJBQWlCO0FBQUEsRUFDeEIsS0FBSyxpQkFBaUI7QUFBQSxFQUN0QixLQUFLLGlCQUFpQjtBQUFBLEVBQ3RCLE9BQU8saUJBQWlCO0FBQUEsRUFDeEIsT0FBTyxpQkFBaUI7QUFBQTtBQUFBLEVBR3hCLGNBQWMsaUJBQWlCO0FBQUEsRUFDL0IsV0FBVyxpQkFBaUI7QUFBQSxFQUM1QixZQUFZLGlCQUFpQjtBQUFBLEVBQzdCLFNBQVMsaUJBQWlCO0FBQUEsRUFDMUIsT0FBTyxpQkFBaUI7QUFBQSxFQUN4QixPQUFPLGlCQUFpQjtBQUFBLEVBQ3hCLE9BQU8saUJBQWlCO0FBQUEsRUFDeEIsWUFBWSxpQkFBaUI7QUFBQSxFQUM3QixVQUFVLGlCQUFpQjtBQUFBLEVBQzNCLFNBQVMsaUJBQWlCO0FBQUEsRUFDMUIsVUFBVSxpQkFBaUI7QUFBQSxFQUMzQixXQUFXLGlCQUFpQjtBQUFBLEVBQzVCLFVBQVUsaUJBQWlCO0FBQUE7QUFBQSxFQUczQixXQUFXLGlCQUFpQjtBQUFBO0FBQUEsRUFHNUIsUUFBUSxpQkFBaUI7QUFBQSxFQUN6QixVQUFVLGlCQUFpQjtBQUFBLEVBQzNCLFdBQVcsaUJBQWlCO0FBQUEsRUFDNUIsV0FBVyxpQkFBaUI7QUFBQSxFQUM1QixjQUFjLGlCQUFpQjtBQUFBLEVBQy9CLFNBQVMsaUJBQWlCO0FBQUEsRUFDMUIsTUFBTSxpQkFBaUI7QUFBQSxFQUN2QixNQUFNLGlCQUFpQjtBQUFBO0FBQUEsRUFHdkIsUUFBUSxpQkFBaUI7QUFBQSxFQUN6QixNQUFNLGlCQUFpQjtBQUFBLEVBQ3ZCLEtBQUssaUJBQWlCO0FBQUEsRUFDdEIsU0FBUyxpQkFBaUI7QUFBQSxFQUMxQixTQUFTLGlCQUFpQjtBQUFBLEVBQzFCLEtBQUssaUJBQWlCO0FBQUEsRUFDdEIsS0FBSyxpQkFBaUI7QUFBQSxFQUN0QixNQUFNLGlCQUFpQjtBQUFBLEVBQ3ZCLFFBQVEsaUJBQWlCO0FBQUEsRUFDekIsS0FBSyxpQkFBaUI7QUFBQSxFQUN0QixTQUFTLGlCQUFpQjtBQUFBO0FBQUEsRUFHMUIsU0FBUyxpQkFBaUI7QUFBQSxFQUMxQixTQUFTLGlCQUFpQjtBQUFBLEVBQzFCLFVBQVUsaUJBQWlCO0FBQUEsRUFDM0IsUUFBUSxpQkFBaUI7QUFBQSxFQUN6QixNQUFNLGlCQUFpQjtBQUMzQjs7O0FDbDBCTyxJQUFNLFlBQU4sTUFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS1osWUFDSSxhQUNBLFVBQ0EsVUFBbUMsQ0FBQyxHQUNwQyxZQUE2QixnQkFBZ0IsWUFBWSxTQUFTLEdBQ2xFVSxhQUEwQyxtQkFDbkQ7QUFMUztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFBQTtBQUFBLEVBQ1I7QUFBQTtBQUFBLEVBR0ksSUFBSSxNQUFjLE9BQTJCO0FBQ2hELFNBQUssUUFBUSxJQUFJLElBQUk7QUFDckIsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR08sSUFBSSxNQUF1QjtBQXhEdEM7QUF5RFEsWUFBTyxVQUFLLFFBQVEsSUFBSSxNQUFqQixZQUFzQjtBQUFBLEVBQ2pDO0FBQUE7QUFBQSxFQUdPLFlBQVksTUFBa0IsWUFBdUIsVUFBVSxNQUFNLEdBQVk7QUFDcEYsV0FBTyxLQUFLLFNBQVMsTUFBTSxTQUFTLEVBQUUsWUFBWTtBQUFBLEVBQ3REO0FBQUE7QUFBQSxFQUdPLFNBQVMsTUFBa0IsWUFBdUIsVUFBVSxNQUFNLEdBQTRCO0FBQ2pHLFlBQVEsS0FBSyxNQUFNO0FBQUEsTUFDZixLQUFLO0FBQ0QsZUFBTyxPQUFPLFFBQVEsS0FBSyxLQUFLO0FBQUEsTUFDcEMsS0FBSztBQUNELFlBQUksS0FBSyxTQUFTLFlBQVksSUFBSyxRQUFPLE9BQU8sUUFBUSxVQUFVLElBQUksQ0FBQztBQUV4RSxjQUFNLFdBQVcsVUFBVSxRQUFRLEtBQUssSUFBSTtBQUM1QyxZQUFJLGFBQWEsT0FBVyxRQUFPLE9BQU8sUUFBUSxRQUFRO0FBQzFELFlBQUksS0FBSyxRQUFRLEtBQUssUUFBUyxRQUFPLE9BQU8sUUFBUSxLQUFLLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFFNUUsZUFBTyxPQUFPLFFBQVEsSUFBSTtBQUFBLE1BQzlCLEtBQUs7QUFDRCxlQUFPLEtBQUssU0FBUyxLQUFLLE9BQU8sU0FBUyxFQUFFLElBQUksQ0FBQ0MsT0FBTSxDQUFDLFNBQVMsU0FBU0EsRUFBQyxDQUFDO0FBQUEsTUFDaEYsS0FBSztBQUNELGVBQU8sT0FBTztBQUFBLFVBQ1YsS0FBSyxTQUFTLEtBQUssTUFBTSxTQUFTO0FBQUEsVUFDbEMsS0FBSyxTQUFTLEtBQUssT0FBTyxTQUFTO0FBQUEsVUFDbkMsQ0FBQ0MsSUFBR0MsT0FBTSxLQUFLLFVBQVUsU0FBUyxLQUFLLElBQUlELElBQUdDLElBQUcsSUFBSTtBQUFBLFFBQ3pEO0FBQUEsTUFDSixLQUFLO0FBQ0QsWUFBSSxTQUFTLENBQUM7QUFDZCxpQkFBUyxTQUFTLEtBQUssUUFBUTtBQUMzQixjQUFJLFVBQVUsS0FBSyxTQUFTLE9BQU8sU0FBUztBQUM1QyxjQUFJLENBQUMsUUFBUSxXQUFZLFFBQU87QUFDaEMsaUJBQU8sS0FBSyxRQUFRLEtBQUs7QUFBQSxRQUM3QjtBQUNBLGVBQU8sT0FBTyxRQUFRLE1BQU07QUFBQSxNQUNoQyxLQUFLO0FBQ0QsWUFBSSxZQUF3QixDQUFDO0FBQzdCLGlCQUFTLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLEtBQUssTUFBTSxHQUFHO0FBQ2xELGNBQUksVUFBVSxLQUFLLFNBQVMsT0FBTyxTQUFTO0FBQzVDLGNBQUksQ0FBQyxRQUFRLFdBQVksUUFBTztBQUNoQyxvQkFBVSxHQUFHLElBQUksUUFBUTtBQUFBLFFBQzdCO0FBQ0EsZUFBTyxPQUFPLFFBQVEsU0FBUztBQUFBLE1BQ25DLEtBQUs7QUFHRCxlQUFPLE9BQU8sUUFBUSxDQUFDLFFBQW1CQyxVQUFvQjtBQUMxRCxjQUFJLFNBQWtDLENBQUM7QUFDdkMsbUJBQVMsTUFBTSxHQUFHLE1BQU0sS0FBSyxJQUFJQSxNQUFLLFFBQVEsS0FBSyxVQUFVLE1BQU0sR0FBRyxPQUFPO0FBQ3pFLG1CQUFPLEtBQUssVUFBVSxHQUFHLENBQUMsSUFBSUEsTUFBSyxHQUFHO0FBQUEsVUFDMUM7QUFFQSxpQkFBTyxJQUFJLFNBQVMsS0FBSyxPQUFPLFVBQVUsT0FBTyxXQUFXLE1BQU0sQ0FBQyxFQUFFLFlBQVk7QUFBQSxRQUNyRixDQUFDO0FBQUEsTUFDTCxLQUFLO0FBQ0QsWUFBSSxVQUNBLEtBQUssS0FBSyxRQUFRLGFBQ1osT0FBTyxRQUF3QixLQUFLLEtBQUssSUFBSSxJQUM3QyxLQUFLLFNBQVMsS0FBSyxNQUFNLFNBQVM7QUFDNUMsWUFBSSxDQUFDLFFBQVEsV0FBWSxRQUFPO0FBQ2hDLFlBQUksT0FBTyxRQUFRO0FBRW5CLFlBQUksT0FBa0IsQ0FBQztBQUN2QixpQkFBUyxPQUFPLEtBQUssV0FBVztBQUM1QixjQUFJQyxZQUFXLEtBQUssU0FBUyxLQUFLLFNBQVM7QUFDM0MsY0FBSSxDQUFDQSxVQUFTLFdBQVksUUFBT0E7QUFDakMsZUFBSyxLQUFLQSxVQUFTLEtBQUs7QUFBQSxRQUM1QjtBQUVBLFlBQUk7QUFDSixZQUFJLFNBQVMsV0FBVyxJQUFJLEVBQUcsUUFBTztBQUFBLGlCQUM3QixTQUFTLFNBQVMsSUFBSSxLQUFLLFFBQVEsS0FBSyxVQUFXLFFBQU8sS0FBSyxVQUFVLElBQUk7QUFBQSxpQkFDN0UsU0FBUyxTQUFTLElBQUksRUFBRyxRQUFPLE9BQU8sUUFBUSwrQkFBK0IsSUFBSSxHQUFHO0FBQUEsWUFDekYsUUFBTyxPQUFPLFFBQVEscUJBQXFCLFNBQVMsT0FBTyxJQUFJLENBQUMsaUJBQWlCO0FBRXRGLFlBQUk7QUFDQSxpQkFBTyxPQUFPLFFBQVEsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQUEsUUFDN0MsU0FBU0MsSUFBRztBQUNSLGlCQUFPLE9BQU8sUUFBUUEsR0FBRSxPQUFPO0FBQUEsUUFDbkM7QUFBQSxJQUNSO0FBQUEsRUFDSjtBQUNKO0FBR08sSUFBTSxrQkFBTixNQUEyQztBQUFBLEVBQ3ZDLFlBQW1CLFFBQW9CO0FBQXBCO0FBQUEsRUFBcUI7QUFBQSxFQUV4QyxNQUFrQjtBQUNyQixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBLEVBRU8sUUFBUSxNQUFtQztBQUM5QyxXQUFPLEtBQUssT0FBTyxJQUFJO0FBQUEsRUFDM0I7QUFDSjtBQUdPLElBQU0sd0JBQU4sTUFBaUQ7QUFBQSxFQUM3QyxZQUFtQixRQUFzQjtBQUF0QjtBQUFBLEVBQXVCO0FBQUEsRUFFMUMsTUFBa0I7QUFDckIsVUFBTSxTQUFxQixDQUFDO0FBQzVCLGVBQVcsU0FBUyxLQUFLLE9BQU8sUUFBUTtBQUNwQyxhQUFPLE1BQU0sR0FBRyxJQUFJLE1BQU07QUFBQSxJQUM5QjtBQUVBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFTyxRQUFRLE1BQW1DO0FBekt0RDtBQTBLUSxZQUFPLFVBQUssT0FBTyxNQUFNLElBQUksTUFBdEIsbUJBQXlCO0FBQUEsRUFDcEM7QUFDSjtBQUdPLElBQU0sa0JBQU4sTUFBMkM7QUFBQSxFQUN2QyxZQUFtQixRQUEwQixRQUFpQztBQUEzRDtBQUEwQjtBQUFBLEVBQWtDO0FBQUEsRUFFL0UsTUFBa0I7QUFDckIsV0FBTyxFQUFFLEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxHQUFHLEtBQUssT0FBTztBQUFBLEVBQ2xEO0FBQUEsRUFFTyxRQUFRLE1BQW1DO0FBdEx0RDtBQXVMUSxZQUFPLFVBQUssT0FBTyxJQUFJLE1BQWhCLFlBQXFCLEtBQUssT0FBTyxRQUFRLElBQUk7QUFBQSxFQUN4RDtBQUNKO0FBR08sSUFBVTtBQUFBLENBQVYsQ0FBVUMsZUFBVjtBQUNJLFdBQVMsUUFBUTtBQUNwQixXQUFPLElBQUksZ0JBQWdCLENBQUMsQ0FBQztBQUFBLEVBQ2pDO0FBRk8sRUFBQUEsV0FBUztBQUlULFdBQVMsTUFBTSxRQUF3QjtBQUMxQyxRQUFJLGNBQWMsZUFBZSxNQUFNLEdBQUc7QUFDdEMsYUFBTyxJQUFJLHNCQUFzQixNQUFNO0FBQUEsSUFDM0MsT0FBTztBQUNILGFBQU8sSUFBSSxnQkFBZ0IsTUFBTTtBQUFBLElBQ3JDO0FBQUEsRUFDSjtBQU5PLEVBQUFBLFdBQVM7QUFRVCxXQUFTLE9BQU8sUUFBbUIsUUFBNEM7QUFDbEYsV0FBTyxJQUFJLGdCQUFnQixRQUFRLE1BQU07QUFBQSxFQUM3QztBQUZPLEVBQUFBLFdBQVM7QUFBQSxHQWJIOzs7QUM5S1YsU0FBUyxjQUFjLE9BQStCO0FBQ3pELFVBQVEsT0FBTyxLQUFLO0FBQ3BCLFVBQVEsYUFBYSxLQUFLO0FBRTFCLFNBQU87QUFDWDtBQUdBLFNBQVMsT0FBTyxPQUErQjtBQUMzQyxVQUFRLE1BQU0sTUFBTTtBQUFBLElBQ2hCLEtBQUs7QUFDRCxZQUFNLE9BQU8sTUFBTSxTQUFTLFFBQVEsQ0FBQyxZQUFZO0FBQzdDLGNBQU0sUUFBUSxPQUFPLE9BQU87QUFDNUIsWUFBSSxNQUFNLFNBQVMsTUFBTyxRQUFPLE1BQU07QUFBQSxZQUNsQyxRQUFPLENBQUMsS0FBSztBQUFBLE1BQ3RCLENBQUM7QUFDRCxhQUFPLEVBQUUsTUFBTSxPQUFPLFVBQVUsS0FBSztBQUFBLElBQ3pDLEtBQUs7QUFDRCxZQUFNLE1BQU0sTUFBTSxTQUFTLFFBQVEsQ0FBQyxZQUFZO0FBQzVDLGNBQU0sUUFBUSxPQUFPLE9BQU87QUFDNUIsWUFBSSxNQUFNLFNBQVMsS0FBTSxRQUFPLE1BQU07QUFBQSxZQUNqQyxRQUFPLENBQUMsS0FBSztBQUFBLE1BQ3RCLENBQUM7QUFDRCxhQUFPLEVBQUUsTUFBTSxNQUFNLFVBQVUsSUFBSTtBQUFBLElBQ3ZDLEtBQUs7QUFDRCxhQUFPLEVBQUUsTUFBTSxPQUFPLFNBQVMsT0FBTyxNQUFNLE9BQU8sRUFBRTtBQUFBLElBQ3pELEtBQUs7QUFDRCxhQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLFNBQVMsT0FBTyxNQUFNLE9BQU8sRUFBRSxDQUFDO0FBQUEsSUFDdEUsS0FBSztBQUNELGFBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsVUFBVSxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUM7QUFBQSxJQUN4RSxLQUFLO0FBQ0QsYUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxRQUFRLE9BQU8sTUFBTSxNQUFNLEVBQUUsQ0FBQztBQUFBLElBQ3BFO0FBQ0ksYUFBTztBQUFBLEVBQ2Y7QUFDSjtBQUdBLFNBQVMsYUFBYSxPQUErQjtBQUNqRCxVQUFRLE1BQU0sTUFBTTtBQUFBLElBQ2hCLEtBQUs7QUFDRCxZQUFNLFlBQVksQ0FBQztBQUNuQixpQkFBVyxTQUFTLE1BQU0sVUFBVTtBQUNoQyxjQUFNQyxVQUFTLGFBQWEsS0FBSztBQUdqQyxZQUFJQSxRQUFPLFNBQVMsWUFBWTtBQUM1QixjQUFJQSxRQUFPLFNBQVU7QUFBQSxjQUNoQixRQUFPLEVBQUUsTUFBTSxZQUFZLFVBQVUsTUFBTTtBQUFBLFFBQ3BEO0FBRUEsa0JBQVUsS0FBS0EsT0FBTTtBQUFBLE1BQ3pCO0FBRUEsYUFBTyxFQUFFLE1BQU0sT0FBTyxVQUFVLFVBQVU7QUFBQSxJQUM5QyxLQUFLO0FBQ0QsWUFBTSxZQUFZLENBQUM7QUFDbkIsaUJBQVcsU0FBUyxNQUFNLFVBQVU7QUFDaEMsY0FBTUEsVUFBUyxhQUFhLEtBQUs7QUFHakMsWUFBSUEsUUFBTyxTQUFTLFlBQVk7QUFDNUIsY0FBSSxDQUFDQSxRQUFPLFNBQVU7QUFBQSxjQUNqQixRQUFPLEVBQUUsTUFBTSxZQUFZLFVBQVUsS0FBSztBQUFBLFFBQ25EO0FBRUEsa0JBQVUsS0FBS0EsT0FBTTtBQUFBLE1BQ3pCO0FBRUEsYUFBTyxFQUFFLE1BQU0sTUFBTSxVQUFVLFVBQVU7QUFBQSxJQUM3QyxLQUFLO0FBQ0QsWUFBTSxTQUFTLGFBQWEsTUFBTSxPQUFPO0FBRXpDLFVBQUksT0FBTyxTQUFTLFlBQVk7QUFDNUIsZUFBTyxFQUFFLE1BQU0sWUFBWSxVQUFVLENBQUMsT0FBTyxTQUFTO0FBQUEsTUFDMUQ7QUFFQSxhQUFPLEVBQUUsTUFBTSxPQUFPLFNBQVMsT0FBTztBQUFBLElBQzFDLEtBQUs7QUFFRCxZQUFNLFVBQVUsYUFBYSxNQUFNLE9BQU87QUFDMUMsVUFBSSxRQUFRLFNBQVMsWUFBWTtBQUM3QixZQUFJLENBQUMsUUFBUSxTQUFVLFFBQU8sRUFBRSxNQUFNLFlBQVksVUFBVSxNQUFNO0FBQUEsaUJBQ3pELFFBQVEsWUFBWSxNQUFNLFVBQVcsUUFBTyxFQUFFLE1BQU0sWUFBWSxVQUFVLEtBQUs7QUFBQSxNQUM1RjtBQUVBLGFBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFDO0FBQUEsSUFDL0MsS0FBSztBQUVELFlBQU0sV0FBVyxhQUFhLE1BQU0sUUFBUTtBQUM1QyxVQUFJLFNBQVMsU0FBUyxZQUFZO0FBQzlCLFlBQUksQ0FBQyxTQUFTLFNBQVUsUUFBTyxFQUFFLE1BQU0sWUFBWSxVQUFVLE1BQU07QUFBQSxpQkFDMUQsU0FBUyxZQUFZLE1BQU0sVUFBVyxRQUFPLEVBQUUsTUFBTSxZQUFZLFVBQVUsS0FBSztBQUFBLE1BQzdGO0FBRUEsYUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUM7QUFBQSxJQUNoRCxLQUFLO0FBQ0QsWUFBTSxTQUFTLGFBQWEsTUFBTSxNQUFNO0FBQ3hDLFVBQUksT0FBTyxTQUFTLFlBQVk7QUFDNUIsWUFBSSxDQUFDLE9BQU8sU0FBVSxRQUFPLEVBQUUsTUFBTSxZQUFZLFVBQVUsTUFBTTtBQUFBLGlCQUN4RCxPQUFPLFlBQVksTUFBTSxVQUFXLFFBQU8sRUFBRSxNQUFNLFlBQVksVUFBVSxLQUFLO0FBQUEsTUFDM0Y7QUFFQSxhQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLE9BQU8sQ0FBQztBQUFBLElBQzlDO0FBQ0ksYUFBTztBQUFBLEVBQ2Y7QUFDSjtBQXNCTyxTQUFTLFFBQ1osT0FDQSxVQUNBLFdBQ3lCO0FBQ3pCLFNBQU8sU0FBUyxPQUFPLFFBQVEsRUFBRSxRQUFRLENBQUMsU0FBUyxTQUFTLE1BQU0sVUFBVSxTQUFTLENBQUM7QUFDMUY7QUFHTyxTQUFTLFNBQVksT0FBbUIsVUFBMkQ7QUFDdEcsVUFBUSxNQUFNLE1BQU07QUFBQSxJQUNoQixLQUFLO0FBRUQsYUFBTyxPQUFPLE9BQU8sTUFBTSxVQUFVLENBQUMsVUFBVSxTQUFTLE9BQU8sUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWE7QUFDekYsY0FBTSxZQUFZLFNBQVM7QUFBQSxVQUFRLENBQUMsWUFDaEMsUUFBUSxTQUFTLFFBQVEsUUFBUSxXQUFXLENBQUMsT0FBTztBQUFBLFFBQ3hEO0FBRUEsY0FBTSxRQUF5QixDQUFDO0FBQ2hDLGNBQU0sWUFBWSxRQUFRLGNBQWMsV0FBVyxDQUFDLFlBQVk7QUFDNUQsY0FBSSxRQUFRLFNBQVMsU0FBVSxRQUFPLFFBQVE7QUFBQSxlQUN6QztBQUNELGtCQUFNLEtBQUssT0FBTztBQUNsQixtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKLENBQUM7QUFHRCxZQUFJLFVBQVUsU0FBUyxVQUFXLFFBQU8sRUFBRSxNQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVE7QUFBQSxpQkFDMUUsVUFBVSxRQUFRLGFBQWMsT0FBTSxLQUFLLFlBQVksT0FBTyxTQUFTLENBQUM7QUFFakYsZUFBTyxZQUFZLElBQUksS0FBSztBQUFBLE1BQ2hDLENBQUM7QUFBQSxJQUNMLEtBQUs7QUFDRCxhQUFPLE9BQU8sT0FBTyxNQUFNLFVBQVUsQ0FBQyxVQUFVLFNBQVMsT0FBTyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYTtBQUN6RixjQUFNLFlBQVksU0FBUyxRQUFRLENBQUMsWUFBYSxRQUFRLFNBQVMsT0FBTyxRQUFRLFdBQVcsQ0FBQyxPQUFPLENBQUU7QUFFdEcsY0FBTSxRQUF5QixDQUFDO0FBQ2hDLGNBQU0sWUFBWSxRQUFRLFVBQVUsV0FBVyxDQUFDLFlBQVk7QUFDeEQsY0FBSSxRQUFRLFNBQVMsU0FBVSxRQUFPLFFBQVE7QUFBQSxlQUN6QztBQUNELGtCQUFNLEtBQUssT0FBTztBQUNsQixtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKLENBQUM7QUFHRCxZQUFJLFVBQVUsU0FBUyxhQUFjLFFBQU8sRUFBRSxNQUFNLFVBQVUsUUFBUSxRQUFRLFdBQVc7QUFBQSxpQkFDaEYsVUFBVSxRQUFRLFVBQVcsT0FBTSxLQUFLLFlBQVksT0FBTyxTQUFTLENBQUM7QUFFOUUsZUFBTyxZQUFZLEdBQUcsS0FBSztBQUFBLE1BQy9CLENBQUM7QUFBQSxJQUNMLEtBQUs7QUFDRCxhQUFPLFNBQVMsTUFBTSxTQUFTLFFBQVEsRUFBRSxJQUFJLFlBQVksR0FBRztBQUFBLElBQ2hFLEtBQUs7QUFDRCxZQUFNLGFBQWEsYUFBYSxNQUFNLFlBQVksUUFBUTtBQUMxRCxhQUFPLE9BQU8sUUFBUSxFQUFFLE1BQU0sUUFBUSxZQUFZLFlBQVksTUFBTSxXQUFXLENBQUM7QUFBQSxJQUNwRjtBQUNJLGFBQU8sU0FBUyxRQUFRLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sVUFBVSxPQUFPLEVBQUU7QUFBQSxFQUNuRjtBQUNKO0FBR08sU0FBUyxTQUNaLE1BQ0EsVUFDQSxXQUNBLFFBQW1CLFFBQVEsWUFDRjtBQUN6QixVQUFRLEtBQUssTUFBTTtBQUFBLElBQ2YsS0FBSztBQUNELGFBQU8sUUFBUSxrQkFBa0IsS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTLFNBQVMsVUFBVSxXQUFXLEtBQUssQ0FBQztBQUFBLElBQzlHLEtBQUs7QUFDRCxZQUFNLGFBQWEsS0FBSyxTQUNuQixPQUFPLENBQUMsU0FBd0QsS0FBSyxTQUFTLFFBQVEsRUFDdEYsSUFBSSxDQUFDQyxPQUFNQSxHQUFFLE1BQU07QUFDeEIsVUFBSSxrQkFBa0IsUUFBUSxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztBQUU5RCxpQkFBVyxXQUFXLEtBQUssVUFBVTtBQUNqQyxZQUFJLFFBQVEsU0FBUyxTQUFVO0FBRS9CLGNBQU0saUJBQWlCLFNBQVMsU0FBUyxVQUFVLFdBQVcsZUFBZTtBQUM3RSxZQUFJLENBQUMsZUFBZSxXQUFZLFFBQU8sZUFBZSxLQUFLO0FBRTNELGNBQU0sWUFBWSxlQUFlO0FBQ2pDLDBCQUFrQixRQUFRLFVBQVUsQ0FBQyxpQkFBaUIsU0FBUyxDQUFDO0FBRWhFLFlBQUksZ0JBQWdCLFNBQVMsVUFBVyxRQUFPLE9BQU8sUUFBUSxRQUFRLE9BQU87QUFBQSxNQUNqRjtBQUVBLGFBQU8sT0FBTyxRQUFRLGVBQWU7QUFBQSxJQUN6QyxLQUFLO0FBQ0QsYUFBTyxTQUFTLEtBQUssU0FBUyxVQUFVLFdBQVcsS0FBSyxFQUFFLElBQUksUUFBUSxNQUFNO0FBQUEsSUFDaEYsS0FBSztBQUNELGFBQU8sT0FBTyxRQUFRLEtBQUssTUFBTTtBQUFBLElBQ3JDLEtBQUs7QUFFRCxZQUFNLGFBQWEsUUFBUSxRQUFRLFFBQVEsVUFBVSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsR0FBRyxTQUFTLFFBQVE7QUFDakcsYUFBTyxXQUFXLFlBQVksS0FBSyxZQUFZLFdBQVcsUUFBUSxFQUFFLElBQUksUUFBUSxJQUFJO0FBQUEsRUFDNUY7QUFDSjtBQUdPLFNBQVMsV0FDWixZQUNBLE1BQ0EsV0FDQSxVQUNzQjtBQUN0QixRQUFNLFNBQVMsb0JBQUksSUFBTztBQUMxQixhQUFXLGFBQWEsWUFBWTtBQUNoQyxVQUFNLFNBQVMsU0FBUyxLQUFLLFNBQVM7QUFDdEMsUUFBSSxDQUFDLE9BQVE7QUFFYixVQUFNLFFBQVEsVUFBVSxTQUFTLE1BQU0sVUFBVSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxRQUFJLENBQUMsTUFBTSxZQUFZO0FBQ25CLGFBQU8sT0FBTyxRQUFRLHNDQUFzQyxZQUFZLFNBQVMsSUFBSSxDQUFDLE1BQU0sTUFBTSxLQUFLLEVBQUU7QUFBQSxJQUM3RyxPQUFPO0FBQ0gsVUFBSSxTQUFTLFNBQVMsTUFBTSxLQUFLLEVBQUcsUUFBTyxJQUFJLFNBQVM7QUFBQSxJQUM1RDtBQUFBLEVBQ0o7QUFFQSxTQUFPLE9BQU8sUUFBUSxNQUFNO0FBQ2hDO0FBR08sU0FBUyxhQUFnQixNQUFrQixVQUF1QztBQUNyRixRQUFNLFlBQVksWUFBWSxpQkFBaUIsTUFBTSxvQkFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBSXZGLE1BQUksVUFBVSxRQUFRLEVBQUcsUUFBTyxRQUFRO0FBRXhDLFNBQU8sUUFBUSxVQUFVLFdBQVcsQ0FBQyxhQUFhLFNBQVMsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLE9BQU8sU0FBUyxDQUFDLENBQUM7QUFDbkg7QUFhTyxJQUFVO0FBQUEsQ0FBVixDQUFVQyxpQkFBVjtBQUNJLFdBQVMsT0FBVUMsU0FBa0M7QUFDeEQsV0FBTyxFQUFFLE1BQU0sVUFBVSxRQUFBQSxRQUFPO0FBQUEsRUFDcEM7QUFGTyxFQUFBRCxhQUFTO0FBSVQsV0FBUyxJQUFPLFVBQTBDO0FBQzdELFFBQUksU0FBUyxVQUFVLEVBQUcsUUFBTyxPQUFPLFFBQVEsVUFBVTtBQUFBLGFBQ2pELFNBQVMsVUFBVSxFQUFHLFFBQU8sU0FBUyxDQUFDO0FBQUEsUUFDM0MsUUFBTyxFQUFFLE1BQU0sT0FBTyxVQUFVLFNBQVM7QUFBQSxFQUNsRDtBQUpPLEVBQUFBLGFBQVM7QUFNVCxXQUFTLEdBQU0sVUFBMEM7QUFDNUQsUUFBSSxTQUFTLFVBQVUsRUFBRyxRQUFPLE9BQU8sUUFBUSxPQUFPO0FBQUEsYUFDOUMsU0FBUyxVQUFVLEVBQUcsUUFBTyxTQUFTLENBQUM7QUFBQSxRQUMzQyxRQUFPLEVBQUUsTUFBTSxNQUFNLFVBQVUsU0FBUztBQUFBLEVBQ2pEO0FBSk8sRUFBQUEsYUFBUztBQU1ULFdBQVMsSUFBTyxPQUFxQztBQUN4RCxRQUFJLE1BQU0sU0FBUyxTQUFVLFFBQU8sRUFBRSxNQUFNLFVBQVUsUUFBUSxRQUFRLE9BQU8sTUFBTSxNQUFNLEVBQUU7QUFBQSxRQUN0RixRQUFPLEVBQUUsTUFBTSxPQUFPLFNBQVMsTUFBTTtBQUFBLEVBQzlDO0FBSE8sRUFBQUEsYUFBUztBQUFBLEdBakJIOzs7QUNoUlYsSUFBTSxZQUFOLE1BQWdCO0FBQUEsRUE4QlosWUFBbUIsT0FBcUIsZUFBcUMsVUFBb0I7QUFBOUU7QUFBcUI7QUFBcUM7QUFDaEYsU0FBSyxXQUFXO0FBQ2hCLFNBQUssTUFBTSxvQkFBSSxJQUFJO0FBQ25CLFNBQUssVUFBVSxvQkFBSSxJQUFJO0FBQ3ZCLFNBQUssV0FBVyxvQkFBSSxJQUFJO0FBRXhCLFNBQUssUUFBUSxJQUFJLGNBQWM7QUFDL0IsU0FBSyxRQUFRLElBQUksY0FBYztBQUMvQixTQUFLLE9BQU8sSUFBSSxjQUFjO0FBQzlCLFNBQUssUUFBUSxJQUFJLGNBQWM7QUFDL0IsU0FBSyxTQUFTLEtBQUssa0JBQWtCO0FBQ3JDLFNBQUssU0FBUyxJQUFJLFlBQVksS0FBSztBQUFBLEVBQ3ZDO0FBQUE7QUFBQSxFQUdBLElBQVcsT0FBZTtBQUN0QixXQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3hCO0FBQUE7QUFBQSxFQUdPLFFBQVE7QUFDWCxTQUFLLFlBQVk7QUFBQSxFQUNyQjtBQUFBO0FBQUEsRUFRQSxLQUFLLElBQTREO0FBQzdELFFBQUksTUFBTSxRQUFRLEVBQUUsR0FBRztBQUNuQixhQUFPLEdBQUcsSUFBSSxDQUFDRSxPQUFNLEtBQUssS0FBS0EsRUFBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQTBCLFFBQVEsTUFBUztBQUFBLElBQzFGO0FBRUEsV0FBTyxLQUFLLFFBQVEsSUFBSSxFQUFFO0FBQUEsRUFDOUI7QUFBQTtBQUFBLEVBR1Esb0JBQTZDO0FBQ2pELFVBQU0sU0FBUyxvQkFBSSxJQUF3QjtBQUczQyxXQUFPO0FBQUEsTUFDSDtBQUFBLE1BQ0EsSUFBSTtBQUFBLFFBQ0EsTUFBTSxLQUFLO0FBQUEsUUFDWCxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksRUFBRTtBQUFBLE1BQy9CO0FBQUEsSUFDSjtBQUNBLFdBQU8sSUFBSSxVQUFVLElBQUkscUJBQXFCLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFDN0QsV0FBTyxJQUFJLGFBQWEsSUFBSSxxQkFBcUIsTUFBTSxLQUFLLEdBQUcsQ0FBQztBQUNoRSxXQUFPLElBQUksYUFBYSxJQUFJLHFCQUFxQixNQUFNLEtBQUssR0FBRyxDQUFDO0FBR2hFLFdBQU8sSUFBSSxjQUFjLElBQUksZ0JBQWdCLENBQUM7QUFDOUMsV0FBTyxJQUFJLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQztBQUUzQyxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLE1BQTJCLFFBQWlCLFdBQTBCO0FBQ3pFLFNBQUssZ0JBQWdCLFFBQVEsS0FBSyxZQUFZLFdBQVcsTUFBUztBQUFBLEVBQ3RFO0FBQUE7QUFBQSxFQUdRLGdCQUNKLFFBQ0EsVUFDQSxXQUNBLFFBQ0Y7QUFFRSxRQUFJLFNBQVMsUUFBUSxNQUFNLEdBQUc7QUFDMUIsZUFBUyxXQUFXLFFBQVE7QUFDeEIsYUFBSyxnQkFBZ0IsU0FBUyxVQUFVLFdBQVcsTUFBTTtBQUFBLE1BQzdEO0FBRUE7QUFBQSxJQUNKO0FBSUEsU0FBSyxpQkFBaUIsT0FBTyxHQUFHO0FBR2hDLFdBQU8sWUFBWTtBQUNuQixXQUFPLFVBQVU7QUFHakIsU0FBSyxJQUFJLElBQUksT0FBTyxHQUFHO0FBQ3ZCLFNBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxNQUFNO0FBR25DLFFBQUksUUFBUTtBQUNSLFVBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLEdBQUcsRUFBRyxNQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssb0JBQUksSUFBSSxDQUFDO0FBQzNFLFdBQUssU0FBUyxJQUFJLE9BQU8sR0FBRyxFQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFDakQ7QUFFQSxTQUFLLE9BQU8sTUFBTTtBQUdsQiwyQ0FBWSxRQUFRLENBQUMsVUFBVSxhQUFhLEtBQUssZ0JBQWdCLFVBQVUsVUFBVSxVQUFVLE1BQU07QUFBQSxFQUN6RztBQUFBO0FBQUEsRUFHTyxPQUFPLElBQXFCO0FBQy9CLFFBQUksS0FBSyxpQkFBaUIsRUFBRSxHQUFHO0FBQzNCLFdBQUs7QUFDTCxhQUFPO0FBQUEsSUFDWDtBQUVBLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdRLGlCQUFpQixJQUFxQjtBQUMxQyxVQUFNLFNBQVMsS0FBSyxRQUFRLElBQUksRUFBRTtBQUNsQyxRQUFJLENBQUMsUUFBUTtBQUNULGFBQU87QUFBQSxJQUNYO0FBR0EsVUFBTSxXQUFXLEtBQUssU0FBUyxJQUFJLEVBQUU7QUFDckMsUUFBSSxVQUFVO0FBQ1YsZUFBUyxTQUFTLFVBQVU7QUFDeEIsYUFBSyxpQkFBaUIsS0FBSztBQUFBLE1BQy9CO0FBRUEsV0FBSyxTQUFTLE9BQU8sRUFBRTtBQUFBLElBQzNCO0FBR0EsU0FBSyxTQUFTLE1BQU07QUFDcEIsU0FBSyxJQUFJLE9BQU8sRUFBRTtBQUNsQixTQUFLLFFBQVEsT0FBTyxFQUFFO0FBQ3RCLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdRLE9BQU8sUUFBbUI7QUFDOUIsU0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sTUFBTTtBQUd4QyxRQUFJLE9BQU8sT0FBTyxTQUFTLGFBQWEsS0FBSyxlQUFlLFFBQVEsT0FBTyxHQUFHO0FBQzFFLFlBQU0sT0FBTyxPQUFPO0FBRXBCLFdBQUssTUFBTSxJQUFJLE9BQU8sS0FBSyxJQUFJO0FBQy9CLFdBQUssS0FBSyxJQUFJLE9BQU8sS0FBSyxlQUFlLElBQUksQ0FBQztBQUFBLElBQ2xEO0FBR0EsUUFBSSxPQUFPLE9BQU8sU0FBUyxnQkFBZ0IsS0FBSyxlQUFlLFFBQVEsUUFBUSxHQUFHO0FBQzlFLFdBQUssTUFBTTtBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ04sT0FBTyxPQUFrQixJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQztBQUFBLE1BQy9EO0FBQUEsSUFDSjtBQUdBLFFBQUksT0FBTyxPQUFPLFNBQVMsaUJBQWlCLEtBQUssWUFBWSxRQUFRO0FBQ2pFLGlCQUFXLFNBQVMsT0FBTyxRQUEyQjtBQUNsRCxjQUFNLE9BQU8sTUFBTSxJQUFJLFlBQVk7QUFDbkMsWUFBSSxDQUFDLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRyxNQUFLLE9BQU8sSUFBSSxNQUFNLElBQUksY0FBYyxDQUFDO0FBRXJFLGFBQUssT0FBTyxJQUFJLElBQUksRUFBRyxJQUFJLE9BQU8sS0FBSyxNQUFNLEtBQUs7QUFBQSxNQUN0RDtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdRLFNBQVMsUUFBbUI7QUFDaEMsU0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLE9BQU8sTUFBTTtBQUUzQyxRQUFJLE9BQU8sT0FBTyxTQUFTLGFBQWEsS0FBSyxlQUFlLFFBQVEsT0FBTyxHQUFHO0FBQzFFLFlBQU0sT0FBTyxPQUFPO0FBRXBCLFdBQUssTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJO0FBQ2xDLFdBQUssS0FBSyxPQUFPLE9BQU8sS0FBSyxlQUFlLElBQUksQ0FBQztBQUFBLElBQ3JEO0FBRUEsUUFBSSxPQUFPLE9BQU8sU0FBUyxnQkFBZ0IsS0FBSyxlQUFlLFFBQVEsUUFBUSxHQUFHO0FBRzlFLFdBQUssTUFBTTtBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ04sT0FBTyxPQUFrQixJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQztBQUFBLE1BQy9EO0FBQUEsSUFDSjtBQUVBLFFBQUksT0FBTyxPQUFPLFNBQVMsaUJBQWlCLEtBQUssWUFBWSxRQUFRO0FBQ2pFLGlCQUFXLFNBQVMsT0FBTyxRQUEyQjtBQUNsRCxjQUFNLE9BQU8sTUFBTSxJQUFJLFlBQVk7QUFDbkMsWUFBSSxDQUFDLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRztBQUU1QixhQUFLLE9BQU8sSUFBSSxJQUFJLEVBQUcsT0FBTyxPQUFPLEtBQUssTUFBTSxLQUFLO0FBQUEsTUFDekQ7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHTyxRQUFRO0FBQ1gsU0FBSyxJQUFJLE1BQU07QUFDZixTQUFLLFFBQVEsTUFBTTtBQUNuQixTQUFLLFNBQVMsTUFBTTtBQUVwQixTQUFLLE1BQU0sTUFBTTtBQUNqQixTQUFLLEtBQUssTUFBTTtBQUNoQixTQUFLLE1BQU0sTUFBTTtBQUNqQixTQUFLLE1BQU0sTUFBTTtBQUNqQixTQUFLLE9BQU8sTUFBTTtBQUVsQixTQUFLO0FBQUEsRUFDVDtBQUFBO0FBQUEsRUFHTyxZQUFZLFNBQXdCLFlBQTRDO0FBQ25GLFFBQUksT0FBTyxPQUFPLFlBQVksV0FBVyxLQUFLLFdBQVcsT0FBTyxJQUFJO0FBRXBFLFFBQUksWUFBWTtBQUNaLFlBQU0sV0FBVyxLQUFLLGNBQWMscUJBQXFCLEtBQUssTUFBTSxVQUFVO0FBQzlFLFVBQUksU0FBVSxRQUFPLEtBQUssU0FBUyxTQUFTLElBQUk7QUFBQSxJQUNwRDtBQUVBLFVBQU0sT0FBTyxLQUFLLFFBQVEsSUFBSSxLQUFLLElBQUk7QUFDdkMsUUFBSSxDQUFDLEtBQU0sUUFBTztBQUVsQixRQUFJLEtBQUssU0FBUyxPQUFRLFFBQU87QUFHakMsUUFBSSxFQUFFLGdCQUFnQixjQUFlLFFBQU87QUFFNUMsUUFBSSxLQUFLLFNBQVMsVUFBVTtBQUN4QixZQUFNLFVBQVUsS0FBSyxVQUFVO0FBQUEsUUFDM0IsQ0FBQyxRQUFRLHVCQUF1QixJQUFJLE1BQU0sS0FBSyxLQUFLLFdBQVcsSUFBSSxVQUFVLEtBQUs7QUFBQSxNQUN0RjtBQUVBLFVBQUksUUFBUyxRQUFPO0FBQUEsVUFDZixRQUFPO0FBQUEsSUFDaEIsV0FBVyxLQUFLLFNBQVMsU0FBUztBQUM5QixpQkFBVyxXQUFXLEtBQUssV0FBVztBQUNsQyxjQUFNLFFBQVEsUUFBUSxRQUFRLEtBQUssQ0FBQyxPQUFPLEdBQUcsYUFBYSxLQUFLLE9BQU87QUFFdkUsWUFBSSxNQUFPLFFBQU87QUFBQSxNQUN0QjtBQUVBLGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxZQUFNLElBQUksTUFBTSwyQkFBMkIsS0FBSyxJQUFJLEVBQUU7QUFBQSxJQUMxRDtBQUFBLEVBQ0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sT0FBTyxPQUFtQixVQUFvRTtBQXJUekc7QUFzVFEsVUFBTSxRQUFRLEtBQUssSUFBSTtBQUV2QixVQUFNLGNBQWMsS0FBSyxRQUFRLE9BQU8sUUFBUTtBQUNoRCxRQUFJLENBQUMsWUFBWSxXQUFZLFFBQU8sWUFBWSxLQUFLO0FBQ3JELFVBQU0sU0FBUyxRQUFRLFFBQVEsWUFBWSxPQUFPLEtBQUssR0FBRztBQUUxRCxVQUFNLFVBQXVCLENBQUM7QUFDOUIsUUFBSSxjQUFjO0FBQ2xCLGFBQVMsTUFBTSxRQUFRO0FBQ25CLFlBQU0sU0FBUyxLQUFLLFFBQVEsSUFBSSxFQUFFO0FBQ2xDLFVBQUksUUFBUTtBQUNSLGdCQUFRLEtBQUssTUFBTTtBQUNuQixzQkFBYyxLQUFLLElBQUksY0FBYSxZQUFPLGNBQVAsWUFBb0IsQ0FBQztBQUFBLE1BQzdEO0FBQUEsSUFDSjtBQUVBLFdBQU8sT0FBTyxRQUFRO0FBQUEsTUFDbEI7QUFBQSxNQUNBLFNBQVM7QUFBQSxNQUNULFdBQVcsS0FBSyxJQUFJLElBQUksU0FBUztBQUFBLE1BQ2pDLFVBQVU7QUFBQSxJQUNkLENBQUM7QUFBQSxFQUNMO0FBQUE7QUFBQSxFQUdRLFFBQVEsT0FBbUIsVUFBMkQ7QUFDMUYsVUFBTSxhQUFhLHFDQUFVO0FBQzdCLFVBQU0sT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSTtBQUV6RCxVQUFNLFlBQVksSUFBSTtBQUFBLE1BQ2xCO0FBQUEsUUFDSSxRQUFRLENBQUMsU0FDTCxLQUFLLFlBQVksT0FBTyxRQUFRLFdBQVcsS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLFVBQVUsS0FBSztBQUFBLFFBQ3RGLFNBQVMsQ0FBQyxTQUFjO0FBdlZ4QztBQXdWb0IsNEJBQUssWUFBWSxPQUFPLFFBQVEsV0FBVyxLQUFLLEtBQUssSUFBSSxJQUFJLE1BQU0sVUFBVSxNQUE3RSxZQUFrRjtBQUFBO0FBQUEsUUFDdEYsV0FBVyxDQUFDLFNBQWM7QUF6VjFDO0FBMFZvQixrQ0FBSyxjQUFjLHFCQUFxQixNQUFNLGtDQUFjLEVBQUUsTUFBOUQsbUJBQWlFLFNBQWpFLFlBQXlFO0FBQUE7QUFBQSxNQUNqRjtBQUFBLE1BQ0EsS0FBSztBQUFBLElBQ1Q7QUFHQSxRQUFJLEtBQU0sV0FBVSxJQUFJLFFBQVEsSUFBSTtBQUVwQyxVQUFNLFdBQWtDO0FBQUEsTUFDcEMsVUFBVSxLQUFLO0FBQUEsTUFDZixTQUFTLENBQUMsU0FBUyxLQUFLLGVBQWUsTUFBTSxRQUFRO0FBQUEsTUFDckQsa0JBQWtCLENBQUMsU0FBUyxLQUFLLGtCQUFrQixNQUFNLFFBQVE7QUFBQSxNQUNqRSxNQUFNLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtBQUFBLElBQzlCO0FBRUEsV0FBTyxRQUFRLGNBQWMsS0FBSyxHQUFHLFVBQVUsU0FBUztBQUFBLEVBQzVEO0FBQUEsRUFFUSxlQUFlLE9BQW9CLFVBQTJEO0FBNVcxRztBQTZXUSxZQUFRLE1BQU0sTUFBTTtBQUFBLE1BQ2hCLEtBQUs7QUFFRCxjQUFNLGVBQWUsS0FBSyxRQUFRLE1BQU0sU0FBUyxRQUFRO0FBQ3pELFlBQUksQ0FBQyxhQUFhLFdBQVksUUFBTyxhQUFhLEtBQUs7QUFFdkQsY0FBTSxVQUFVLGFBQWE7QUFDN0IsWUFBSSxRQUFRLE1BQU0sT0FBTyxHQUFHO0FBQ3hCLGlCQUFPLE9BQU8sUUFBUSxRQUFRLE9BQU87QUFBQSxRQUN6QyxXQUFXLFFBQVEsU0FBUyxjQUFjO0FBQ3RDLGNBQUksTUFBTSxVQUFXLFFBQU8sT0FBTyxRQUFRLFFBQVEsVUFBVTtBQUc3RCxnQkFBTSxjQUFjLG9CQUFJLElBQVk7QUFDcEMscUJBQVcsV0FBVyxLQUFLLFFBQVEsT0FBTyxHQUFHO0FBQ3pDLGdCQUFJLFFBQVEsUUFBUyxhQUFZLElBQUksUUFBUSxHQUFHO0FBQUEsVUFDcEQ7QUFFQSxpQkFBTyxPQUFPLFFBQVEsUUFBUSxLQUFLLFdBQVcsQ0FBQztBQUFBLFFBQ25EO0FBRUEsY0FBTSxrQkFBa0IsUUFBUSxRQUFRLFNBQVMsS0FBSyxHQUFHO0FBQ3pELGNBQU0sZUFBZSxJQUFJLElBQVksTUFBTSxZQUFZLGtCQUFrQixDQUFDLENBQUM7QUFFM0UsbUJBQVcsVUFBVSxpQkFBaUI7QUFDbEMscUJBQVcsU0FBUyxLQUFLLGlCQUFpQixNQUFNLEdBQUc7QUFDL0MseUJBQWEsSUFBSSxLQUFLO0FBQUEsVUFDMUI7QUFBQSxRQUNKO0FBRUEsZUFBTyxPQUFPLFFBQVEsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUFBLE1BQ3BELEtBQUs7QUFFRCxjQUFNLGdCQUFnQixLQUFLLFFBQVEsTUFBTSxVQUFVLFFBQVE7QUFDM0QsWUFBSSxDQUFDLGNBQWMsV0FBWSxRQUFPLGNBQWMsS0FBSztBQUN6RCxjQUFNLFdBQVcsY0FBYztBQUUvQixZQUFJLFFBQVEsTUFBTSxRQUFRLEdBQUc7QUFDekIsaUJBQU8sT0FBTyxRQUFRLFFBQVEsT0FBTztBQUFBLFFBQ3pDLFdBQVcsU0FBUyxTQUFTLGNBQWM7QUFDdkMsY0FBSSxNQUFNLFVBQVcsUUFBTyxPQUFPLFFBQVEsUUFBUSxVQUFVO0FBRTdELGlCQUFPLE9BQU8sUUFBUSxRQUFRLEtBQUssSUFBSSxJQUFJLEtBQUssU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDckU7QUFFQSxjQUFNLG1CQUFtQixRQUFRLFFBQVEsVUFBVSxLQUFLLEdBQUc7QUFDM0QsY0FBTSxnQkFBZ0IsSUFBSSxJQUFZLE1BQU0sWUFBWSxtQkFBbUIsQ0FBQyxDQUFDO0FBRTdFLG1CQUFXLFNBQVMsa0JBQWtCO0FBQ2xDLHFCQUFXLFVBQVUsS0FBSyxnQkFBZ0IsS0FBSyxHQUFHO0FBQzlDLDBCQUFjLElBQUksTUFBTTtBQUFBLFVBQzVCO0FBQUEsUUFDSjtBQUVBLGVBQU8sT0FBTyxRQUFRLFFBQVEsS0FBSyxhQUFhLENBQUM7QUFBQSxNQUNyRCxLQUFLO0FBQ0QsWUFBSSxNQUFNLFlBQVksTUFBTSxXQUFXLEVBQUcsUUFBTyxPQUFPLFFBQVEsUUFBUSxPQUFPO0FBRy9FLGNBQU0sZUFBZSxLQUFLLFFBQVEsTUFBTSxRQUFRLFFBQVE7QUFDeEQsWUFBSSxDQUFDLGFBQWEsV0FBWSxRQUFPLGFBQWEsS0FBSztBQUN2RCxjQUFNLFVBQVUsYUFBYTtBQUU3QixZQUFJLFFBQVEsTUFBTSxPQUFPLEVBQUcsUUFBTyxPQUFPLFFBQVEsUUFBUSxPQUFPO0FBQUEsaUJBQ3hELFFBQVEsU0FBUyxjQUFjO0FBQ3BDLGNBQUksTUFBTSxVQUFXLFFBQU8sT0FBTyxRQUFRLFFBQVEsVUFBVTtBQUFBLGNBQ3hELFFBQU8sT0FBTyxRQUFRLFFBQVEsT0FBTztBQUFBLFFBQzlDO0FBRUEsY0FBTSxrQkFBa0IsUUFBUSxRQUFRLFNBQVMsS0FBSyxHQUFHO0FBQ3pELGNBQU0sYUFBWSxXQUFNLGNBQU4sWUFBbUI7QUFDckMsY0FBTSxVQUFVLEtBQUs7QUFBQSxVQUFnQjtBQUFBLFdBQWlCLFdBQU0sYUFBTixZQUFrQjtBQUFBLFVBQUcsQ0FBQyxPQUN4RSxLQUFLLHVCQUF1QixJQUFJLFNBQVM7QUFBQSxRQUM3QztBQUVBLFlBQUksQ0FBQyxNQUFNO0FBQ1AsaUJBQU8sT0FBTyxRQUFRLFFBQVEsS0FBSyxRQUFRLHFCQUFxQixTQUFTLGVBQWUsQ0FBQyxDQUFDO0FBQUEsWUFDekYsUUFBTyxPQUFPLFFBQVEsUUFBUSxLQUFLLE9BQU8sQ0FBQztBQUFBLE1BQ3BEO0FBQ0ksZUFBTyxPQUFPLFFBQVEsS0FBSyxrQkFBa0IsT0FBTyxRQUFRLENBQUM7QUFBQSxJQUNyRTtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR1Esa0JBQWtCLE9BQXVCLFVBQTJDO0FBamNoRztBQWtjUSxZQUFRLE1BQU0sTUFBTTtBQUFBLE1BQ2hCLEtBQUs7QUFDRCxlQUFPLFFBQVEsU0FBUyxNQUFNLFFBQVE7QUFBQSxNQUMxQyxLQUFLO0FBQ0QsY0FBTSxjQUFjLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSztBQUNoRCxlQUFPLGNBQWMsUUFBUSxLQUFLLG9CQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUTtBQUFBLE1BQzVFLEtBQUs7QUFDRCxjQUFNLGdCQUFlLFVBQUssY0FBYztBQUFBLFVBQ3BDLE1BQU0sTUFBTTtBQUFBLFdBQ1osMENBQVUsZUFBVixZQUF3QjtBQUFBLFFBQzVCLE1BSHFCLG1CQUdsQjtBQUNILGNBQU0sV0FBVyxlQUFlLE1BQU0sTUFBTSxTQUFTLFlBQVksSUFBSSxNQUFNO0FBRTNFLGNBQU0sU0FBUyxLQUFLLFlBQVksUUFBUTtBQUN4QyxlQUFPLFNBQVMsUUFBUSxLQUFLLG9CQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUTtBQUFBLE1BQ2xFLEtBQUs7QUFDRCxlQUFPLFFBQVEsYUFBYSxLQUFLLE1BQU0sSUFBSSxNQUFNLEtBQUssQ0FBQztBQUFBLE1BQzNELEtBQUs7QUFDRCxZQUFJLE1BQU0sT0FBTztBQUNiLGlCQUFPLFFBQVEsYUFBYSxLQUFLLE1BQU0sSUFBSSxNQUFNLEtBQUssQ0FBQztBQUFBLFFBQzNELE9BQU87QUFDSCxpQkFBTyxRQUFRLGFBQWEsS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLENBQUM7QUFBQSxRQUMxRDtBQUFBLE1BQ0osS0FBSztBQUNELFlBQUk7QUFDSixZQUFJLE1BQU0sT0FBTztBQUNiLHFCQUFXLEtBQUssT0FBTyxTQUFTLE1BQU0sS0FBSztBQUFBLFFBQy9DLE9BQU87QUFDSCxjQUFJLE1BQU0sU0FBUyxNQUFNLE1BQU0sU0FBUyxJQUFLLFFBQU8sUUFBUTtBQUU1RCxxQkFBVyxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUs7QUFBQSxRQUMxQztBQUVBLFlBQUksU0FBUyxRQUFRLEVBQUcsUUFBTyxRQUFRO0FBR3ZDLGNBQU0sU0FBUyxJQUFJLElBQUksUUFBUTtBQUMvQixpQkFBUyxPQUFPLFVBQVU7QUFDdEIsbUJBQVMsU0FBUyxLQUFLLGlCQUFpQixHQUFHLEdBQUc7QUFDMUMsbUJBQU8sSUFBSSxLQUFLO0FBQUEsVUFDcEI7QUFBQSxRQUNKO0FBRUEsZUFBTyxRQUFRLEtBQUssTUFBTTtBQUFBLE1BQzlCLEtBQUs7QUFDRCxjQUFNLFVBQVUsTUFBTSxNQUFNLFlBQVk7QUFDeEMsY0FBTSxhQUFhLEtBQUssT0FBTyxJQUFJLE9BQU87QUFDMUMsWUFBSSxjQUFjLEtBQU0sUUFBTyxRQUFRO0FBRXZDLGVBQU8sUUFBUSxLQUFLLFdBQVcsSUFBSSxDQUFDO0FBQUEsTUFDeEMsS0FBSztBQUNELGVBQU8sUUFBUTtBQUFBLFVBQVUsTUFBTTtBQUFBLFVBQVEsQ0FBQyxVQUNwQyxLQUFLO0FBQUEsWUFDRCxNQUFNO0FBQUEsWUFDTixDQUFDLFVBQVUsTUFBTSxPQUFPLEtBQUs7QUFBQSxZQUM3QixDQUFDLFVBQVUsU0FBUyxRQUFRLE9BQU8sTUFBTSxLQUFLLEtBQUs7QUFBQSxVQUN2RDtBQUFBLFFBQ0o7QUFBQSxJQUNSO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHUSxjQUNKLEtBQ0EsTUFDQSxNQUNjO0FBQ2QsVUFBTSxVQUFVLElBQUksWUFBWTtBQUNoQyxVQUFNLFFBQVEsS0FBSyxPQUFPLElBQUksT0FBTztBQUNyQyxRQUFJLFNBQVMsS0FBTSxRQUFPLFFBQVE7QUFFbEMsVUFBTSxhQUFhLEtBQUssS0FBSztBQUM3QixRQUFJLGNBQWMsS0FBTSxRQUFPLFFBQVEsS0FBSyxVQUFVO0FBR3RELFVBQU0sVUFBVSxvQkFBSSxJQUFZO0FBQ2hDLGVBQVcsWUFBWSxNQUFNLElBQUksR0FBRztBQUNoQyxZQUFNLFNBQVMsS0FBSyxRQUFRLElBQUksUUFBUTtBQUN4QyxVQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sT0FBTyxTQUFTLGlCQUFpQixFQUFHO0FBRTNELFlBQU0sUUFBUyxPQUErQixNQUFNLE9BQU87QUFDM0QsVUFBSSxDQUFDLE1BQU87QUFFWixVQUFJLEtBQUssS0FBSyxFQUFHLFNBQVEsSUFBSSxRQUFRO0FBQUEsSUFDekM7QUFFQSxXQUFPLFFBQVEsS0FBSyxPQUFPO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVEsZ0JBQ0osV0FDQSxVQUNBLFVBQ1c7QUFDWCxRQUFJLFdBQVcsRUFBRyxRQUFPLG9CQUFJLElBQUk7QUFDakMsUUFBSSxVQUFVLFFBQVEsRUFBRyxRQUFPLG9CQUFJLElBQUk7QUFFeEMsVUFBTSxVQUFVLElBQUksSUFBWSxTQUFTO0FBRXpDLFVBQU0sUUFBUSxJQUFJLFVBQWtCO0FBQ3BDLGVBQVcsV0FBVyxVQUFXLE9BQU0sS0FBSyxTQUFTLENBQUM7QUFFdEQsV0FBTyxNQUFNLFNBQVMsR0FBRztBQUNyQixZQUFNLE9BQU8sTUFBTSxVQUFVO0FBQzdCLFlBQU0sVUFBVSxNQUFNLElBQUk7QUFFMUIsaUJBQVcsWUFBWSxTQUFTLE9BQU8sR0FBRztBQUN0QyxZQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUc7QUFFM0IsZ0JBQVEsSUFBSSxRQUFRO0FBQ3BCLFlBQUksT0FBTyxTQUFVLE9BQU0sS0FBSyxVQUFVLE9BQU8sQ0FBQztBQUFBLE1BQ3REO0FBQUEsSUFDSjtBQUVBLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdBLENBQVMsdUJBQXVCLElBQVksV0FBZ0U7QUFDeEcsVUFBTSxTQUFTLEtBQUssUUFBUSxJQUFJLEVBQUU7QUFDbEMsUUFBSSxDQUFDLE9BQVE7QUFFYixTQUFLLGNBQWMsVUFBVSxjQUFjLGVBQWUsV0FBVyxVQUFVLE9BQU8sT0FBTyxHQUFHO0FBQzVGLFlBQU0sV0FBVyxLQUFLLE1BQU0sSUFBSyxPQUFPLE1BQWUsYUFBYSxDQUFDO0FBQ3JFLFVBQUksVUFBVTtBQUNWLG1CQUFXQyxPQUFNLFVBQVU7QUFDdkIsZ0JBQU1BO0FBQUEsUUFDVjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsU0FDSyxjQUFjLFVBQVUsY0FBYyxlQUN2QyxPQUFPLE9BQU8sU0FBUyxhQUFhLEtBQ3BDLGVBQWUsUUFBUSxRQUFRLEdBQ2pDO0FBQ0UsaUJBQVcsUUFBUSxPQUFPLFFBQWtCO0FBQ3hDLGNBQU0sV0FBVyxLQUFLLFlBQVksSUFBSTtBQUN0QyxZQUFJLFNBQVUsT0FBTSxTQUFTO0FBQUEsTUFDakM7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHQSxDQUFTLGdCQUFnQixPQUFrQztBQUN2RCxRQUFJLFNBQVMsS0FBSyxRQUFRLElBQUksS0FBSztBQUNuQyxXQUFPLFdBQVUsaUNBQVEsVUFBUztBQUM5QixZQUFNLE9BQU8sUUFBUTtBQUNyQixlQUFTLE9BQU87QUFBQSxJQUNwQjtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR0EsQ0FBUyxpQkFBaUIsUUFBbUM7QUFDekQsVUFBTSxXQUFXLEtBQUssU0FBUyxJQUFJLE1BQU07QUFDekMsUUFBSSxZQUFZLFNBQVMsT0FBTyxHQUFHO0FBQy9CLGVBQVMsU0FBUyxVQUFVO0FBQ3hCLGNBQU07QUFDTixlQUFPLEtBQUssaUJBQWlCLEtBQUs7QUFBQSxNQUN0QztBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0o7QUEyQkEsU0FBUyxlQUNMLFFBQ0EsS0FDc0M7QUFDdEMsU0FBTyxPQUFPLFVBQVUsT0FBTyxHQUFHLE1BQU0sVUFBYSxPQUFPLFlBQVksT0FBTyxHQUFHO0FBQ3RGOzs7QUN4b0JBLHlCQUF3QjtBQWFqQixJQUFNLG9CQUFOLE1BQXdCO0FBQUEsRUFHcEIsWUFBbUIsT0FBc0IsU0FBaUI7QUFBdkM7QUFBc0I7QUFDNUMsU0FBSyxZQUFZLG1CQUFBQyxRQUFZLGVBQWU7QUFBQSxNQUN4QyxNQUFNLG9CQUFvQjtBQUFBLE1BQzFCLFFBQVEsQ0FBQyxtQkFBQUEsUUFBWSxTQUFTO0FBQUEsTUFDOUIsYUFBYTtBQUFBLElBQ2pCLENBQUM7QUFBQSxFQUNMO0FBQUE7QUFBQSxFQUdBLE1BQWEsV0FBVztBQUNwQixVQUFNLG1CQUFBQSxRQUFZLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixLQUFLLE1BQU0sQ0FBQztBQUV2RSxTQUFLLFlBQVksbUJBQUFBLFFBQVksZUFBZTtBQUFBLE1BQ3hDLE1BQU0sb0JBQW9CLEtBQUs7QUFBQSxNQUMvQixRQUFRLENBQUMsbUJBQUFBLFFBQVksU0FBUztBQUFBLE1BQzlCLGFBQWE7QUFBQSxJQUNqQixDQUFDO0FBQUEsRUFDTDtBQUFBO0FBQUEsRUFHQSxNQUFhLFNBQVMsTUFBZ0U7QUFDbEYsV0FBTyxLQUFLLFVBQVUsUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDNUQsYUFBTztBQUFBLElBQ1gsQ0FBQztBQUFBLEVBQ0w7QUFBQTtBQUFBLEVBR0EsTUFBYSxVQUFVLE1BQWMsTUFBbUM7QUFDcEUsVUFBTSxLQUFLLFVBQVUsUUFBUSxLQUFLLFFBQVEsSUFBSSxHQUFHO0FBQUEsTUFDN0MsU0FBUyxLQUFLO0FBQUEsTUFDZCxNQUFNLEtBQUssSUFBSTtBQUFBLE1BQ2Y7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNMO0FBQUE7QUFBQSxFQUdBLE1BQWEsWUFBWSxVQUF3RDtBQUM3RSxRQUFJLE9BQU8sSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLENBQUM7QUFDeEMsYUFBUyxTQUFTLFNBQVUsTUFBSyxPQUFPLEtBQUs7QUFHN0MsYUFBUyxPQUFPLEtBQU0sT0FBTSxLQUFLLFVBQVUsV0FBVyxLQUFLLFFBQVEsR0FBRyxDQUFDO0FBRXZFLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQSxFQUdBLE1BQWEsVUFBNkI7QUFDdEMsV0FBTyxLQUFLLFVBQVUsS0FBSztBQUFBLEVBQy9CO0FBQUE7QUFBQSxFQUdBLE1BQWEsV0FBOEI7QUFDdkMsUUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO0FBQzlCLFdBQU8sS0FBSyxPQUFPLENBQUNDLE9BQU1BLEdBQUUsV0FBVyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUNBLE9BQU1BLEdBQUUsVUFBVSxDQUFDLENBQUM7QUFBQSxFQUM5RTtBQUFBO0FBQUEsRUFHTyxRQUFRLE1BQXNCO0FBQ2pDLFdBQU8sVUFBVTtBQUFBLEVBQ3JCO0FBQ0o7OztBQzVFZSxTQUFSLGFBQThCLFlBQVk7QUFDL0MsTUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFDLE1BQU0sa0JBQWlCLENBQUM7QUFDM0QsTUFBSSxNQUFNLElBQUksZ0JBQWdCLElBQUk7QUFDbEMsTUFBSSxTQUFTLElBQUksT0FBTyxLQUFLLEVBQUMsUUFBTyxtQkFBa0IsQ0FBQztBQUN4RCxNQUFJLGdCQUFnQixHQUFHO0FBQ3ZCLFNBQU87QUFDVDs7O0FDTmUsU0FBUkMsVUFBMEI7QUFDL0IsU0FBTyxhQUFhLDZxdHFEQUEyejNxRDtBQUNqMTNxRDs7O0FDQUEsSUFBQUMsbUJBQW9FO0FBSXBFLG1CQUFzQjtBQVdmLElBQU0sbUJBQW1DO0FBQUEsRUFDNUMsU0FBUztBQUFBLEVBQ1QsYUFBYTtBQUNqQjtBQUdPLElBQU0sZUFBTixjQUEyQiwyQkFBVTtBQUFBLEVBZWpDLFlBQ0ksT0FDQSxhQUNBLGVBQ1AsVUFDRjtBQUNFLFVBQU07QUFMQztBQUNBO0FBQ0E7QUFJUCxTQUFLLFVBQVUsb0JBQUksSUFBSTtBQUN2QixTQUFLLFdBQVc7QUFDaEIsU0FBSyxlQUFlO0FBQ3BCLFNBQUssV0FBVyw4QkFBYSxNQUFNO0FBRW5DLFNBQUssUUFBUSxJQUFJLG1CQUFNO0FBQ3ZCLFNBQUssY0FBYyxvQkFBSSxJQUFJO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sT0FBVSxNQUF5QjtBQUV0QyxRQUFJLFdBQVcsS0FBSyxZQUFZLElBQUksS0FBSyxJQUFJO0FBQzdDLFFBQUksU0FBVSxRQUFPO0FBRXJCLFFBQUksVUFBVSxTQUFZO0FBRTFCLFNBQUssWUFBWSxJQUFJLEtBQUssTUFBTSxPQUFPO0FBQ3ZDLFNBQUssTUFBTSxRQUFRLENBQUMsTUFBTSxPQUFPLENBQUM7QUFDbEMsU0FBSyxTQUFTO0FBQ2QsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR08sYUFBYTtBQUNoQixhQUFTLFVBQVUsS0FBSyxRQUFRLE9BQU8sR0FBRztBQUN0QyxhQUFPLGNBQWMsS0FBSyxJQUFJO0FBQUEsSUFDbEM7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdBLE1BQWMsV0FBVztBQUNyQixRQUFJLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLFNBQVU7QUFFN0MsVUFBTSxTQUFTLEtBQUssZ0JBQWdCO0FBQ3BDLFFBQUksQ0FBQyxPQUFRO0FBRWIsVUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJLEtBQUssTUFBTSxRQUFRO0FBQzNDLFdBQU8sU0FBUyxDQUFDLE1BQU0sU0FBUyxLQUFLLElBQUksQ0FBQztBQUUxQyxRQUFJO0FBQ0EsY0FBUSxLQUFLLFdBQVc7QUFBQSxRQUNwQixLQUFLO0FBQUEsUUFDTCxLQUFLLE1BQU07QUFDUCxnQkFBTSxXQUFXLE1BQU0sS0FBSyxNQUFNLFdBQVcsSUFBSTtBQUNqRCxpQkFBUSxPQUFPLFlBQVk7QUFBQSxZQUN2QixNQUFNO0FBQUEsWUFDTixNQUFNLEtBQUs7QUFBQSxZQUNYO0FBQUEsWUFDQSxNQUFNLEtBQUs7QUFBQSxZQUNYLFVBQVUsS0FBSyxjQUFjLGFBQWEsSUFBSTtBQUFBLFVBQ2xELENBQW1CO0FBQ25CO0FBQUEsUUFDSjtBQUFBLFFBQ0EsS0FBSyxVQUFVO0FBQ1gsZ0JBQU0sV0FBVyxNQUFNLEtBQUssTUFBTSxXQUFXLElBQUk7QUFDakQsaUJBQVEsT0FBTyxZQUFZO0FBQUEsWUFDdkIsTUFBTTtBQUFBLFlBQ04sTUFBTSxLQUFLO0FBQUEsWUFDWDtBQUFBLFlBQ0EsTUFBTSxLQUFLO0FBQUEsWUFDWCxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sT0FBTyxNQUFNLE1BQU0sS0FBSyxJQUFJO0FBQUEsVUFDNUUsQ0FBaUI7QUFDakI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0osU0FBUyxJQUFJO0FBQ1QsY0FBUSxJQUFJLGlEQUFpRCxFQUFFO0FBRy9ELGFBQU8sU0FBUztBQUFBLElBQ3BCO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHUSxPQUFPLFFBQW9CLE1BQVc7QUFDMUMsUUFBSSxDQUFDLE9BQU8sUUFBUTtBQUNoQixjQUFRLElBQUksd0RBQXdELElBQUk7QUFDeEU7QUFBQSxJQUNKO0FBRUEsVUFBTSxDQUFDLE1BQU0sU0FBUyxLQUFLLElBQUksT0FBTztBQUd0QyxRQUFJLFlBQVksS0FBTSxTQUFRLE9BQU8sS0FBSyxRQUFRLENBQUM7QUFBQSxRQUM5QyxTQUFRLFFBQVEsSUFBSTtBQUd6QixTQUFLLFlBQVksT0FBTyxLQUFLLElBQUk7QUFJakMsUUFBSSxLQUFLLFFBQVEsT0FBTyxLQUFLLFNBQVMsRUFBRSxTQUFTO0FBQzdDLFdBQUssUUFBUSxPQUFPLE9BQU8sRUFBRTtBQUM3QixnQkFBVSxNQUFNO0FBQUEsSUFDcEIsT0FBTztBQUNILFlBQU1DLE9BQU0sS0FBSyxJQUFJO0FBQ3JCLFlBQU0sV0FBVyxLQUFLLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxXQUFXLElBQUk7QUFDOUQsWUFBTSxTQUFTQSxPQUFNLFNBQVM7QUFFOUIsYUFBTyxTQUFTO0FBRWhCLFVBQUksU0FBUyxPQUFPO0FBQ2hCLGVBQU8sY0FBY0E7QUFDckIsYUFBSyxTQUFTO0FBQUEsTUFDbEIsT0FBTztBQUNILGVBQU8sY0FBY0EsT0FBTTtBQUszQixtQkFBVyxLQUFLLFNBQVMsS0FBSyxJQUFJLEdBQUcsS0FBSztBQUFBLE1BQzlDO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQTtBQUFBLEVBR1Esa0JBQTBDO0FBQzlDLFVBQU1BLE9BQU0sS0FBSyxJQUFJO0FBQ3JCLGFBQVMsVUFBVSxLQUFLLFFBQVEsT0FBTyxHQUFHO0FBQ3RDLFVBQUksQ0FBQyxPQUFPLFVBQVUsT0FBTyxlQUFlQSxNQUFLO0FBQzdDLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUdBLFFBQUksS0FBSyxRQUFRLE9BQU8sS0FBSyxTQUFTLEVBQUUsU0FBUztBQUM3QyxVQUFJLFNBQVMsS0FBSyxVQUFVO0FBQzVCLFdBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxNQUFNO0FBQ2xDLGFBQU87QUFBQSxJQUNYO0FBRUEsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR1EsWUFBd0I7QUFDNUIsUUFBSSxTQUFxQjtBQUFBLE1BQ3JCLElBQUksS0FBSztBQUFBLE1BQ1QsYUFBYSxLQUFLLElBQUk7QUFBQSxNQUN0QixRQUFRLElBQUlDLFFBQWE7QUFBQSxJQUM3QjtBQUVBLFdBQU8sT0FBTyxZQUFZLENBQUMsUUFBUSxLQUFLLE9BQU8sUUFBUSxJQUFJLElBQUk7QUFDL0QsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR08sV0FBaUI7QUFDcEIsYUFBUyxVQUFVLEtBQUssUUFBUSxPQUFPLEdBQUc7QUFDdEMsZ0JBQVUsTUFBTTtBQUFBLElBQ3BCO0FBRUEsV0FBTyxDQUFDLEtBQUssTUFBTSxRQUFRLEdBQUc7QUFDMUIsWUFBTSxDQUFDLE9BQU8sT0FBTyxJQUFJLEtBQUssTUFBTSxJQUFJO0FBQ3hDLGNBQVEsT0FBTyxZQUFZO0FBQUEsSUFDL0I7QUFFQSxTQUFLLFdBQVc7QUFBQSxFQUNwQjtBQUNKO0FBZUEsU0FBUyxVQUFVLFFBQW9CO0FBQ25DLFNBQU8sT0FBTyxVQUFVO0FBRXhCLE1BQUksT0FBTyxPQUFRLFFBQU8sT0FBTyxDQUFDLEVBQUUsT0FBTyxZQUFZO0FBQ3ZELFNBQU8sU0FBUztBQUNwQjs7O0FDL05BLElBQUFDLG1CQUE2Rjs7O0FDSXRGLElBQU0sZUFBTixNQUFNLGFBQStEO0FBQUEsRUFnQmpFLFlBQVksTUFBYyxPQUFpQixPQUFpQkMsT0FBYztBQWJqRixrQkFBbUIsYUFBWTtBQUMvQixxQkFBb0I7QUFhaEIsU0FBSyxRQUFRO0FBQ2IsU0FBSyxTQUFTO0FBQ2QsU0FBSyxTQUFTO0FBQ2QsU0FBSyxRQUFRQTtBQUViLFVBQU0sVUFBVSxLQUFLLFlBQVksR0FBRztBQUNwQyxTQUFLLGFBQWEsVUFBVSxJQUFJLEtBQUssS0FBSyxVQUFVLFVBQVUsQ0FBQztBQUFBLEVBQ25FO0FBQUEsRUFFQSxJQUFJLFNBQVM7QUFDVCxXQUFPLGFBQVksVUFBVSxJQUFJO0FBQUEsRUFDckM7QUFBQSxFQUVPLE1BQU0sS0FBYTtBQXhDOUI7QUF5Q1EsWUFBTyxrQkFBWSxVQUFVLE1BQU0sR0FBRyxNQUEvQixtQkFBbUM7QUFBQSxFQUM5QztBQUFBO0FBQUEsRUFHTyxNQUFNLEtBQWtDO0FBN0NuRDtBQThDUSxZQUFPLFVBQUssTUFBTSxHQUFHLE1BQWQsbUJBQWlCO0FBQUEsRUFDNUI7QUFBQTtBQUFBLEVBR0EsSUFBSSxNQUFjO0FBQ2QsV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQTtBQUFBLEVBR0EsSUFBSSxRQUFnQjtBQUNoQixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBO0FBQUEsRUFHQSxJQUFJLFFBQWM7QUFDZCxXQUFPLEtBQUssS0FBSyxLQUFLLEtBQUs7QUFBQSxFQUMvQjtBQUdKO0FBdkRhLGFBQ0YsUUFBa0IsQ0FBQyxXQUFXLG1CQUFtQixhQUFhO0FBRDVELGFBc0RNLFlBQXlDLFdBQVcsV0FBVztBQXREM0UsSUFBTSxjQUFOOzs7QUNWUCxJQUFBQyxnQkFBc0I7QUFFdEIsSUFBQUMsbUJBQXdDO0FBSWpDLElBQU0sYUFBTixjQUF5QiwyQkFBVTtBQUFBLEVBVS9CLFlBQW1CLE9BQXFCLGFBQTJCO0FBQ3RFLFVBQU07QUFEZ0I7QUFBcUI7QUFSL0M7QUFBQSxTQUFRLFFBQXNCLElBQUksb0JBQU07QUFFeEM7QUFBQSxTQUFRLFdBQTRDLG9CQUFJLElBQUk7QUFFNUQ7QUFBQSxTQUFRLFNBQXVDLG9CQUFJLElBQUk7QUFFdkQ7QUFBQSxTQUFRLFdBQW9CO0FBQUEsRUFJNUI7QUFBQTtBQUFBLEVBR0EsTUFBYSxLQUFLLE1BQThCO0FBQzVDLFFBQUksS0FBSyxTQUFVLFFBQU8sUUFBUSxPQUFPLDBCQUEwQjtBQUVuRSxVQUFNLFVBQVUsU0FBaUI7QUFHakMsUUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLEtBQUssSUFBSSxHQUFHO0FBQy9CLFdBQUssTUFBTSxLQUFLLElBQUk7QUFDcEIsV0FBSyxTQUFTLElBQUksS0FBSyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQUEsSUFDMUMsT0FBTztBQUNILFdBQUssU0FBUyxJQUFJLEtBQUssSUFBSSxFQUFHLEtBQUssT0FBTztBQUFBLElBQzlDO0FBRUEsU0FBSyxTQUFTO0FBQ2QsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBLEVBR1EsV0FBVztBQUNmLFdBQU8sS0FBSyxPQUFPLE9BQU8sS0FBSyxZQUFZLEtBQUssS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHO0FBQ25FLFlBQU0sT0FBTyxLQUFLLE1BQU0sSUFBSTtBQUU1QixZQUFNLE9BQU8sS0FBSyxNQUFNLFdBQVcsSUFBSTtBQUN2QyxXQUFLLE9BQU8sSUFBSSxLQUFLLE1BQU0sSUFBSTtBQUUvQixXQUFLLEtBQUssQ0FBQyxZQUFZLEtBQUssT0FBTyxNQUFNLE9BQU8sUUFBUSxPQUFPLENBQUMsQ0FBQyxFQUFFO0FBQUEsUUFBTSxDQUFDLFVBQ3RFLEtBQUssT0FBTyxNQUFNLE9BQU8sUUFBUSxLQUFLLENBQUM7QUFBQSxNQUMzQztBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdRLE9BQU8sTUFBYSxRQUE2QjtBQXJEN0Q7QUFzRFEsU0FBSyxPQUFPLE9BQU8sS0FBSyxJQUFJO0FBRTVCLFVBQU0sWUFBVyxVQUFLLFNBQVMsSUFBSSxLQUFLLElBQUksTUFBM0IsWUFBZ0MsQ0FBQztBQUNsRCxTQUFLLFNBQVMsT0FBTyxLQUFLLElBQUk7QUFFOUIsUUFBSSxPQUFPLFlBQVk7QUFDbkIsZUFBUyxRQUFRLENBQUMsWUFBWSxRQUFRLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFBQSxJQUMvRCxPQUFPO0FBQ0gsZUFBUyxRQUFRLENBQUMsWUFBWSxRQUFRLE9BQU8sT0FBTyxLQUFLLENBQUM7QUFBQSxJQUM5RDtBQUVBLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUE7QUFBQSxFQUdPLFdBQWlCO0FBRXBCLGVBQVcsWUFBWSxLQUFLLFNBQVMsT0FBTyxHQUFHO0FBQzNDLGVBQVMsUUFBUSxDQUFDLFlBQVksUUFBUSxPQUFPLCtCQUErQixDQUFDO0FBQUEsSUFDakY7QUFFQSxTQUFLLFdBQVc7QUFBQSxFQUNwQjtBQUNKOzs7QUMvQ08sSUFBTSxVQUFOLE1BQU0sUUFBaUY7QUFBQSxFQThCbEYsWUFBWSxNQUF1QjtBQTNCM0Msa0JBQW1CLFFBQU87QUFDMUIscUJBQW9CO0FBS3BCLHNCQUFxQjtBQWVyQixrQkFBMkIsQ0FBQztBQUM1QixpQkFBZ0I7QUFNWixXQUFPLE9BQU8sTUFBTSxJQUFJO0FBQUEsRUFDNUI7QUFBQSxFQXJCQSxJQUFJLFFBQVE7QUFDUixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBLEVBRUEsSUFBSSxNQUFNO0FBQ04sV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQSxFQUVBLElBQUksUUFBUTtBQUNSLFdBQU8sS0FBSyxLQUFLLEtBQUssS0FBSztBQUFBLEVBQy9CO0FBQUEsRUFhQSxJQUFJLFNBQWtCO0FBQ2xCLFdBQU8sUUFBTyxVQUFVLElBQUk7QUFBQSxFQUNoQztBQUFBLEVBRU8sTUFBTSxLQUFnQztBQXBFakQ7QUFxRVEsWUFBTyxhQUFPLFVBQVUsTUFBTSxHQUFHLE1BQTFCLG1CQUE4QjtBQUFBLEVBQ3pDO0FBQUEsRUFFTyxPQUFtQjtBQUN0QixXQUFPO0FBQUEsTUFDSCxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUNDLE9BQU1BLEdBQUUsS0FBSyxDQUFDO0FBQUEsTUFDdkMsUUFBUSxLQUFLLE9BQU8sU0FBUztBQUFBLE1BQzdCLFFBQVEsS0FBSyxPQUFPLFNBQVM7QUFBQSxNQUM3QixPQUFPLEtBQUs7QUFBQSxNQUNaLFFBQVEsS0FBSztBQUFBLE1BQ2IsT0FBTyxLQUFLO0FBQUEsTUFDWixXQUFXLEtBQUs7QUFBQSxNQUNoQixPQUFPLEtBQUs7QUFBQSxJQUNoQjtBQUFBLEVBQ0o7QUFBQSxFQUVBLE9BQU8sS0FBSyxLQUFpQixhQUE2QixpQkFBeUI7QUFDL0UsVUFBTSxRQUFRLElBQUksT0FDYixJQUFJLENBQUNDLE9BQU07QUFDUixjQUFRQSxHQUFFLE9BQU87QUFBQSxRQUNiLEtBQUs7QUFDRCxpQkFBTyxlQUFlLEtBQUtBLElBQUcsSUFBSSxPQUFPLFVBQVU7QUFBQSxRQUN2RCxLQUFLO0FBQ0QsaUJBQU8sZUFBZSxLQUFLQSxFQUFDO0FBQUEsUUFDaEMsS0FBSztBQUNELGlCQUFPLGNBQWMsS0FBS0EsSUFBRyxJQUFJLEtBQUs7QUFBQSxNQUM5QztBQUNBLGFBQU87QUFBQSxJQUNYLENBQUMsRUFDQSxPQUFPLENBQUNELE9BQTJCLENBQUMsQ0FBQ0EsRUFBQztBQUMzQyxXQUFPLElBQUksUUFBTztBQUFBLE1BQ2QsUUFBUTtBQUFBLE1BQ1IsUUFBUSxTQUFTLFdBQVcsSUFBSSxNQUFNO0FBQUEsTUFDdEMsUUFBUSxTQUFTLFdBQVcsSUFBSSxNQUFNO0FBQUEsTUFDdEMsT0FBTyxJQUFJO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixPQUFPLElBQUk7QUFBQSxNQUNYLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQ0UsT0FBTSxXQUFXLEtBQUssV0FBV0EsRUFBQyxDQUFDLENBQUM7QUFBQSxNQUM1RCxXQUFXLElBQUk7QUFBQSxNQUNmLE9BQU8sSUFBSTtBQUFBLElBQ2YsQ0FBQztBQUFBLEVBQ0w7QUFLSjtBQXJGYSxRQUNGLFFBQVEsQ0FBQyxXQUFXLFVBQVUsZUFBZSxlQUFlLGlCQUFpQjtBQUQzRSxRQWlGTSxZQUFvQyxXQUFXO0FBQUEsRUFDMUQsV0FBVyxhQUFhLENBQUNDLE9BQU1BLEdBQUUsU0FBUztBQUFBLEVBQzFDLFdBQVcsV0FBVztBQUMxQjtBQXBGRyxJQUFNLFNBQU47QUEyRlAsSUFBZSxpQkFBZixNQUE2RDtBQUFBLEVBYWxELFlBQVksTUFBK0I7QUFDOUMsV0FBTyxPQUFPLE1BQU0sSUFBSTtBQUFBLEVBQzVCO0FBQUEsRUFFQSxJQUFJLFFBQWM7QUFDZCxXQUFPLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRSxVQUFVLEtBQUssR0FBRztBQUFBLEVBQ25EO0FBQUEsRUFFTyxPQUEyQjtBQUM5QixVQUFNLEVBQUUsS0FBSyxXQUFXLFFBQVEsYUFBYSxPQUFPLE1BQU0sSUFBSTtBQUM5RCxXQUFPO0FBQUEsTUFDSDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLE9BQU8sTUFBTSxTQUFTO0FBQUEsSUFDMUI7QUFBQSxFQUNKO0FBQ0o7QUFHTyxJQUFNLGtCQUFOLE1BQU0sd0JBQXVCLGVBQXlFO0FBQUEsRUFvQmpHLFlBQVksTUFBK0I7QUFDL0MsVUFBTSxJQUFJO0FBbEJkLGtCQUFtQixnQkFBZTtBQUNsQyxxQkFBb0I7QUFDcEIsaUJBQWdCO0FBQUEsRUFpQmhCO0FBQUEsRUFFQSxJQUFJLFNBQWtCO0FBQ2xCLFdBQU8sZ0JBQWUsVUFBVSxJQUFJO0FBQUEsRUFDeEM7QUFBQSxFQUVPLE1BQU0sS0FBZ0M7QUF4TGpEO0FBeUxRLFlBQU8scUJBQWUsVUFBVSxNQUFNLEdBQUcsTUFBbEMsbUJBQXNDO0FBQUEsRUFDakQ7QUFBQSxFQUVPLE9BQTJCO0FBQzlCLFdBQU8sT0FBTyxPQUFPLE1BQU0sS0FBSyxHQUFHO0FBQUEsTUFDL0IsV0FBVyxLQUFLO0FBQUEsTUFDaEIsUUFBUSxLQUFLO0FBQUEsTUFDYixPQUFPLEtBQUs7QUFBQSxNQUNaLE9BQU87QUFBQSxNQUNQLFdBQVcsS0FBSyxVQUFVLElBQUksQ0FBQ0MsT0FBTUEsR0FBRSxLQUFLLENBQUM7QUFBQSxJQUNqRCxDQUFDO0FBQUEsRUFDTDtBQUFBLEVBRUEsT0FBTyxLQUFLLEtBQXlCLE1BQWMsYUFBNkIsaUJBQWlCO0FBQzdGLFFBQUksWUFBWSxJQUFJLFVBQVUsSUFBSSxDQUFDSCxPQUFNLGdCQUFnQixLQUFLQSxJQUFHLE1BQU0sVUFBVSxDQUFDO0FBQ2xGLFdBQU8sSUFBSSxnQkFBZTtBQUFBLE1BQ3RCLE9BQU87QUFBQSxNQUNQLEtBQUssSUFBSTtBQUFBLE1BQ1Q7QUFBQSxNQUNBLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQ0MsT0FBTSxXQUFXLEtBQUssV0FBV0EsRUFBQyxDQUFDLENBQUM7QUFBQSxNQUM1RCxhQUFhLElBQUk7QUFBQSxNQUNqQixXQUFXLElBQUk7QUFBQSxNQUNmLGNBQWMsSUFBSSxlQUNaLGdCQUFnQixJQUFJLGNBQWMsQ0FBQyxPQUFPLGVBQWUsc0JBQXNCLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFDL0Y7QUFBQSxNQUNOLFdBQVcsSUFBSTtBQUFBLE1BQ2YsT0FBTyxJQUFJO0FBQUEsSUFDZixDQUFDO0FBQUEsRUFDTDtBQU9KO0FBaEVhLGdCQUNGLFFBQVEsQ0FBQyxlQUFlLFlBQVksb0JBQW9CLGVBQWUsZUFBZSxpQkFBaUI7QUFEckcsZ0JBMkRGLFlBQTRDLFdBQVc7QUFBQSxFQUMxRCxXQUFXLFdBQVc7QUFBQSxFQUN0QixXQUFXLGFBQWEsQ0FBQ0MsT0FBTUEsR0FBRSxTQUFTO0FBQUEsRUFDMUMsV0FBVyxZQUFZLENBQUNBLE9BQU1BLEdBQUUsWUFBWTtBQUNoRDtBQS9ERyxJQUFNLGlCQUFOO0FBbUVBLElBQU0sa0JBQU4sTUFBTSx3QkFBdUIsZUFBb0M7QUFBQSxFQU01RCxZQUFZLE1BQStCO0FBQy9DLFVBQU0sSUFBSTtBQUpkLGtCQUFtQixlQUFlO0FBQ2xDLHFCQUFvQjtBQU1wQixTQUFTLFFBQWdCO0FBQUEsRUFGekI7QUFBQSxFQUtPLE9BQTJCO0FBQzlCLFdBQU8sT0FBTyxPQUFPLE1BQU0sS0FBSyxHQUFHO0FBQUEsTUFDL0IsYUFBYSxLQUFLO0FBQUEsTUFDbEIsT0FBTztBQUFBLElBQ1gsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVBLE9BQU8sS0FBSyxLQUF5QjtBQUNqQyxXQUFPLElBQUksZ0JBQWU7QUFBQSxNQUN0QixPQUFPLElBQUk7QUFBQSxNQUNYLEtBQUssSUFBSTtBQUFBLE1BQ1QsV0FBVyxJQUFJO0FBQUEsTUFDZixhQUFhLElBQUk7QUFBQSxNQUNqQixhQUFhLElBQUk7QUFBQSxJQUNyQixDQUFDO0FBQUEsRUFDTDtBQUNKO0FBN0JhLGdCQUNGLFFBQVEsQ0FBQyxlQUFlLFlBQVksb0JBQW9CLGVBQWUsZUFBZSxpQkFBaUI7QUFEM0csSUFBTSxpQkFBTjtBQStCQSxJQUFNLGlCQUFOLE1BQU0sdUJBQXNCLGVBQW9DO0FBQUEsRUFTM0QsWUFBWSxNQUE4QjtBQUM5QyxVQUFNLElBQUk7QUFQZCxrQkFBbUIsZUFBZTtBQUNsQyxTQUFTLFFBQWdCO0FBQ3pCLHFCQUFvQjtBQUFBLEVBTXBCO0FBQUEsRUFFTyxPQUEwQjtBQUM3QixXQUFPLE9BQU8sT0FBTyxNQUFNLEtBQUssR0FBRztBQUFBLE1BQy9CLE1BQU0sS0FBSztBQUFBLE1BQ1gsT0FBTztBQUFBLElBQ1gsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVBLE9BQU8sS0FBSyxLQUF3QixNQUFjO0FBQzlDLFdBQU8sSUFBSSxlQUFjO0FBQUEsTUFDckIsYUFBYSxJQUFJO0FBQUEsTUFDakIsV0FBVyxJQUFJO0FBQUEsTUFDZixPQUFPO0FBQUEsTUFDUCxLQUFLLElBQUk7QUFBQSxNQUNULE1BQU0sSUFBSTtBQUFBLElBQ2QsQ0FBQztBQUFBLEVBQ0w7QUFDSjtBQTdCYSxlQUNGLFFBQVEsQ0FBQyxlQUFlLFlBQVksbUJBQW1CLGVBQWUsZUFBZSxpQkFBaUI7QUFEMUcsSUFBTSxnQkFBTjs7O0FIOU9BLElBQU0sV0FBTixjQUF1QiwyQkFBVTtBQUFBLEVBcUJwQyxZQUFtQixLQUFpQixTQUF3QixVQUFvQjtBQUM1RSxVQUFNO0FBRFM7QUFBaUI7QUFBd0I7QUFHeEQsU0FBSyxRQUFRLElBQUk7QUFDakIsU0FBSyxnQkFBZ0IsSUFBSTtBQUN6QixTQUFLLFlBQVksSUFBSSxrQkFBa0IsV0FBVyxPQUFPO0FBQ3pELFNBQUssU0FBUyxJQUFJLHdCQUFPO0FBRXpCLFNBQUssWUFBWSxJQUFJLFVBQVUsSUFBSSxPQUFPLElBQUksZUFBZSxRQUFRO0FBQ3JFLFNBQUssY0FBYztBQUVuQixTQUFLO0FBQUEsTUFDQSxLQUFLLFdBQVcsSUFBSSxhQUFhLElBQUksT0FBTyxJQUFJLGFBQWEsSUFBSSxlQUFlLE1BQU07QUFDbkYsZUFBTztBQUFBLFVBQ0gsU0FBUyxTQUFTO0FBQUEsVUFDbEIsYUFBYSxLQUFLLElBQUksS0FBSyxLQUFLLElBQUksR0FBSyxTQUFTLG1CQUFtQixDQUFDO0FBQUEsUUFDMUU7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMO0FBR0EsU0FBSyxTQUFVLEtBQUssUUFBUSxJQUFJLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFFO0FBQUEsRUFDbkU7QUFBQTtBQUFBLEVBR0EsSUFBSSxXQUFXO0FBQ1gsV0FBTyxLQUFLLFVBQVU7QUFBQSxFQUMxQjtBQUFBO0FBQUEsRUFHQSxhQUFhO0FBRVQsU0FBSyxjQUFjLEtBQUssY0FBYyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQztBQUdoRixTQUFLLGNBQWMsS0FBSyxNQUFNLEdBQUcsVUFBVSxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBSTdELFNBQUs7QUFBQSxNQUNELEtBQUssTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTO0FBQzlCLFlBQUksRUFBRSxnQkFBZ0Isd0JBQVE7QUFHOUIsWUFBSSxxQkFBcUIsSUFBSSxLQUFLLFVBQVUsWUFBWSxDQUFDLEVBQUc7QUFFNUQsYUFBSyxPQUFPLElBQUk7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDTDtBQUVBLFNBQUs7QUFBQSxNQUNELEtBQUssTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTO0FBQzlCLFlBQUksRUFBRSxnQkFBZ0Isd0JBQVE7QUFHOUIsWUFBSSxxQkFBcUIsSUFBSSxLQUFLLFVBQVUsWUFBWSxDQUFDLEVBQUc7QUFFNUQsYUFBSyxPQUFPLElBQUk7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDTDtBQUdBLFNBQUs7QUFBQSxNQUNELEtBQUssTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTO0FBQzlCLFlBQUksZ0JBQWdCLHdCQUFPO0FBQ3ZCLGVBQUssVUFBVSxPQUFPLEtBQUssSUFBSTtBQUFBLFFBQ25DO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTDtBQUVBLFNBQUssTUFBTTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBR0EsUUFBUTtBQUVKLFVBQU0sT0FBUSxLQUFLLGNBQWMsSUFBSSxvQkFBb0IsSUFBSTtBQUM3RCxTQUFLLFNBQVMsRUFBRSxLQUFLLENBQUMsVUFBVTtBQUM1QixXQUFLLGNBQWM7QUFDbkIsV0FBSyxjQUFjO0FBQ25CLFdBQUssWUFBWSxJQUFJO0FBRXJCLFlBQU0sZ0JBQWdCLE1BQU0sYUFBYSxLQUFRLFFBQVEsQ0FBQztBQUMxRCxjQUFRO0FBQUEsUUFDSixnREFBZ0QsWUFBWSxNQUNwRCxNQUFNLFFBQVEsY0FBYyxNQUFNLE1BQU0sWUFBWSxNQUFNLE9BQU87QUFBQSxNQUM3RTtBQUVBLFdBQUssVUFBVSxNQUFNO0FBQ3JCLFdBQUssUUFBUSxVQUFVLEtBQUssUUFBUTtBQUNwQyxXQUFLLFFBQVEsYUFBYTtBQUsxQixZQUFNLGVBQWUsS0FBSyxNQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7QUFDbEUsV0FBSyxVQUNBLFlBQVksWUFBWSxFQUN4QixLQUFLLENBQUMsWUFBWSxRQUFRLElBQUkscUJBQXFCLFFBQVEsSUFBSSxvQ0FBb0MsQ0FBQztBQUFBLElBQzdHLENBQUM7QUFFRCxTQUFLLFNBQVMsSUFBSTtBQUFBLEVBQ3RCO0FBQUEsRUFFUSxPQUFPLE1BQXFCLFNBQWlCO0FBQ2pELFFBQUksRUFBRSxnQkFBZ0IseUJBQVE7QUFDMUI7QUFBQSxJQUNKO0FBS0EsU0FBSyxVQUFVLE9BQU8sT0FBTztBQUM3QixTQUFLLE9BQU8sSUFBSTtBQUFBLEVBSXBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE1BQWEsS0FBSyxNQUE4QjtBQUM1QyxXQUFPLEtBQUssTUFBTSxLQUFLLElBQUk7QUFBQSxFQUMvQjtBQUFBO0FBQUEsRUFHQSxNQUFhLE9BQU8sTUFBaUM7QUFFakQsUUFBSSxDQUFDLHFCQUFxQixJQUFJLEtBQUssU0FBUyxHQUFHO0FBQzNDLFlBQU1FLFVBQVMsSUFBSTtBQUFBLFFBQ2YsS0FBSztBQUFBLFFBQ0wsU0FBUyxXQUFXLEtBQUssS0FBSyxLQUFLO0FBQUEsUUFDbkMsU0FBUyxXQUFXLEtBQUssS0FBSyxLQUFLO0FBQUEsUUFDbkMsS0FBSyxLQUFLO0FBQUEsTUFDZDtBQUVBLFdBQUssVUFBVSxNQUFNQSxPQUFNO0FBQzNCLGFBQU9BO0FBQUEsSUFDWDtBQUVBLFVBQU0sU0FBUyxNQUFNLEtBQUssU0FBUyxPQUFxQixJQUFJO0FBRTVELFFBQUksT0FBTyxTQUFTLFNBQVM7QUFDekIsWUFBTSxJQUFJLE1BQU0sMEJBQTBCLEtBQUssSUFBSSxLQUFLLE9BQU8sTUFBTSxFQUFFO0FBQUEsSUFDM0UsV0FBVyxPQUFPLFNBQVMsWUFBWTtBQUVuQyxZQUFNLFNBQVMsYUFBYSxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVM7QUFDdEQsY0FBTSxRQUFRLEtBQUssY0FBYyxxQkFBcUIsS0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFNO0FBQ3JGLFlBQUksTUFBTyxRQUFPLEtBQUssU0FBUyxNQUFNLElBQUk7QUFBQSxZQUNyQyxRQUFPO0FBQUEsTUFDaEIsQ0FBQztBQUdELFdBQUssY0FBYyxNQUFNO0FBR3pCLFdBQUssVUFBVSxVQUFVLE9BQU8sT0FBTyxPQUFPLEtBQUssQ0FBQztBQUdwRCxXQUFLLFFBQVEsVUFBVSxLQUFLLFFBQVE7QUFDcEMsYUFBTztBQUFBLElBQ1gsV0FBVyxPQUFPLFNBQVMsVUFBVTtBQUNqQyxZQUFNLFNBQVMsT0FBTyxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVM7QUFDaEQsY0FBTSxRQUFRLEtBQUssY0FBYyxxQkFBcUIsS0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFNO0FBQ3JGLFlBQUksTUFBTyxRQUFPLEtBQUssU0FBUyxNQUFNLElBQUk7QUFBQSxZQUNyQyxRQUFPO0FBQUEsTUFDaEIsQ0FBQztBQUNELFdBQUssWUFBWSxNQUFNO0FBQ3ZCLFdBQUssVUFBVSxVQUFVLE9BQU8sT0FBTyxPQUFPLEtBQUssQ0FBQztBQUNwRCxXQUFLLFFBQVEsVUFBVSxLQUFLLFFBQVE7QUFDcEMsYUFBTztBQUFBLElBQ1g7QUFFQSxVQUFNLElBQUksTUFBTSxrREFBbUQsT0FBZSxJQUFJO0FBQUEsRUFDMUY7QUFBQSxFQUVPLFlBQVksTUFBYztBQUM3QixTQUFLLFVBQVUsTUFBTSxNQUFNLENBQUMsUUFBUSxVQUFVO0FBQzFDLFlBQU0sT0FBTyxRQUFRLENBQUMsTUFBTUMsV0FBVTtBQUNsQyxZQUFJLGdCQUFnQixnQkFBZ0I7QUFDaEMsVUFBQUEsT0FBTSxLQUFLLFdBQVcsQ0FBQyxTQUFTQSxXQUFVO0FBQ3RDLFlBQUFBLE9BQU0sUUFBUSxTQUFTLENBQUMsT0FBT0EsV0FBVTtBQUNyQyxrQkFBSSxpQkFBaUIsbUJBQW1CO0FBRXBDLHNCQUFNLFdBQXdDLENBQUMsTUFBTUEsV0FDakRBLE9BQU0sS0FBSyxXQUFXLFFBQVE7QUFFbEMsZ0JBQUFBLE9BQU0sTUFBTSxXQUFXLFFBQVE7QUFBQSxjQUNuQztBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0wsQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUNMO0FBQUE7QUFBQSxFQUdPLGNBQWMsTUFBb0I7QUFDckMsU0FBSyxVQUFVLE1BQU0sTUFBTSxDQUFDLFFBQVEsVUFBVTtBQUMxQyxZQUFNLE9BQU8sV0FBVyxDQUFDLFNBQVNBLFdBQVU7QUFDeEMsUUFBQUEsT0FBTSxRQUFRLFNBQVMsQ0FBQyxPQUFPQSxXQUFVO0FBQ3JDLGNBQUksaUJBQWlCLG1CQUFtQjtBQUVwQyxrQkFBTSxXQUF3QyxDQUFDLE1BQU1BLFdBQVVBLE9BQU0sS0FBSyxXQUFXLFFBQVE7QUFFN0YsWUFBQUEsT0FBTSxNQUFNLFdBQVcsUUFBUTtBQUFBLFVBQ25DO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFDTDtBQUFBLEVBUUEsR0FBRyxLQUFhLFVBQWlDLFNBQXlCO0FBQ3RFLFdBQU8sS0FBSyxPQUFPLEdBQUcsS0FBSyxVQUFVLE9BQU87QUFBQSxFQUNoRDtBQUFBO0FBQUEsRUFHQSxJQUFJLEtBQWEsVUFBaUM7QUFDOUMsU0FBSyxPQUFPLElBQUksS0FBSyxRQUFRO0FBQUEsRUFDakM7QUFBQTtBQUFBLEVBR0EsT0FBTyxLQUFlO0FBQ2xCLFNBQUssT0FBTyxPQUFPLEdBQUc7QUFBQSxFQUMxQjtBQUFBO0FBQUEsRUFRUSxRQUFRLFFBQWdCLE1BQW1CO0FBQy9DLFNBQUssT0FBTyxRQUFRLEtBQUssR0FBRyxJQUFJO0FBQUEsRUFDcEM7QUFDSjtBQUdPLElBQU0sdUJBQU4sTUFBTSw2QkFBNEIsMkJBQVU7QUFBQSxFQTZCL0MsWUFBbUIsTUFBZ0I7QUFDL0IsVUFBTTtBQURTO0FBR2YsU0FBSyxTQUFTO0FBQ2QsU0FBSyxRQUFRLEtBQUssS0FBSyxNQUFNLFNBQVM7QUFDdEMsU0FBSyxjQUFjLEtBQUssTUFBTTtBQUM5QixTQUFLLFFBQVEsS0FBSyxNQUFNO0FBQ3hCLFNBQUssUUFBUSxLQUFLLElBQUk7QUFDdEIsU0FBSyxVQUFVLENBQUM7QUFDaEIsU0FBSyxPQUFPLFNBQVM7QUFFckIsU0FBSyxjQUFjLEtBQUssV0FBVyxLQUFLLFVBQVUsS0FBSyxTQUFTO0FBQUEsRUFDcEU7QUFBQSxFQUVBLE1BQU0sU0FBUztBQUVYLFNBQUssU0FBUztBQUVkLFNBQUssUUFBUTtBQUFBLEVBQ2pCO0FBQUE7QUFBQSxFQUdBLFdBQXlDO0FBQ3JDLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdBLFdBQVc7QUFDUCxRQUFJLEtBQUssUUFBUTtBQUNiLFdBQUssU0FBUztBQUNkLFdBQUssS0FBSyxPQUFPLGlEQUFpRDtBQUFBLElBQ3RFO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHUSxVQUFVO0FBRWQsUUFBSSxDQUFDLEtBQUssVUFBVSxLQUFLLFFBQVEsVUFBVSxxQkFBb0IsWUFBWTtBQUN2RTtBQUFBLElBQ0o7QUFHQSxVQUFNQyxRQUFPLEtBQUssTUFBTSxJQUFJO0FBQzVCLFFBQUlBLE9BQU07QUFDTixXQUFLLFFBQVEsS0FBS0EsS0FBSTtBQUN0QixXQUFLLEtBQUtBLEtBQUksRUFDVCxLQUFLLENBQUMsV0FBVyxLQUFLLGFBQWFBLE9BQU0sTUFBTSxDQUFDLEVBQ2hELE1BQU0sQ0FBQyxXQUFXLEtBQUssYUFBYUEsT0FBTSxNQUFNLENBQUM7QUFFdEQsV0FBSyxRQUFRO0FBQUEsSUFDakIsV0FBVyxDQUFDQSxTQUFRLEtBQUssUUFBUSxVQUFVLEdBQUc7QUFDMUMsV0FBSyxTQUFTO0FBR2QsV0FBSyxLQUFLLFFBQVE7QUFBQSxRQUNkLFlBQVksS0FBSyxJQUFJLElBQUksS0FBSztBQUFBLFFBQzlCLE9BQU8sS0FBSztBQUFBLFFBQ1osVUFBVSxLQUFLO0FBQUEsUUFDZixTQUFTLEtBQUs7QUFBQSxRQUNkLFFBQVEsS0FBSztBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDSjtBQUFBO0FBQUEsRUFHUSxhQUFhLE1BQWEsUUFBOEI7QUFDNUQsU0FBSyxRQUFRLE9BQU8sSUFBSTtBQUN4QixTQUFLO0FBRUwsUUFBSSxPQUFPLFdBQVcsVUFBVyxNQUFLO0FBQUEsYUFDN0IsT0FBTyxXQUFXLFdBQVksTUFBSztBQUFBLGFBQ25DLE9BQU8sV0FBVyxTQUFVLE1BQUs7QUFHMUMsU0FBSyxRQUFRO0FBQUEsRUFDakI7QUFBQTtBQUFBLEVBR0EsTUFBYyxLQUFLLE1BQTRDO0FBQzNELFFBQUk7QUFFQSxZQUFNLFNBQVMsTUFBTSxLQUFLLEtBQUssVUFBVSxTQUFTLEtBQUssSUFBSTtBQUMzRCxVQUFJLFVBQVUsT0FBTyxRQUFRLEtBQUssS0FBSyxTQUFTLE9BQU8sV0FBVyxLQUFLLEtBQUssU0FBUztBQUNqRixZQUFJLEtBQUssY0FBYyxNQUFNO0FBQ3pCLGdCQUFNLE9BQU8sYUFBYSxLQUFLLE9BQU8sTUFBMEIsQ0FBQyxTQUFTLElBQUk7QUFDOUUsZUFBSyxLQUFLLGNBQWMsSUFBSTtBQUM1QixpQkFBTyxFQUFFLFFBQVEsU0FBUztBQUFBLFFBQzlCO0FBQUEsTUFDSjtBQUdBLFlBQU0sS0FBSyxLQUFLLE9BQU8sSUFBSTtBQUMzQixhQUFPLEVBQUUsUUFBUSxXQUFXO0FBQUEsSUFDaEMsU0FBUyxJQUFJO0FBQ1QsY0FBUSxJQUFJLHFDQUFxQyxFQUFFO0FBQ25ELGFBQU8sRUFBRSxRQUFRLFVBQVU7QUFBQSxJQUMvQjtBQUFBLEVBQ0o7QUFDSjtBQUFBO0FBL0hhLHFCQUVGLGFBQXFCO0FBRnpCLElBQU0sc0JBQU47OztBbEt4UlAsSUFBQUMsb0JBQXVEOzs7QXNLZ0RoRCxJQUFNLG1CQUF1QyxPQUFPLE9BQWlCO0FBQUEsRUFDeEUsb0JBQW9CO0FBQUEsRUFDcEIscUJBQXFCO0FBQUEsRUFFckIsVUFBVTtBQUFBLEVBRVYsc0JBQXNCO0FBQUEsRUFDdEIsaUJBQWlCO0FBQUEsRUFDakIsb0JBQW9CO0FBQUEsRUFFcEIseUJBQXlCO0FBQUEsRUFFekIsbUJBQW1CO0FBQUEsRUFDbkIsdUJBQXVCO0FBQUEsRUFFdkIsY0FBYztBQUFBLEVBRWQsbUJBQW1CO0FBQUEsRUFDbkIsZ0JBQWdCO0FBQUEsRUFDaEIseUJBQXlCO0FBQUEsRUFDekIsb0JBQW9CO0FBQUEsRUFDcEIsaUNBQWlDO0FBQ3JDLENBQUM7OztBQ3pFRCxJQUFBQyxtQkFBOEY7QUFjdkYsSUFBTSx1QkFBdUI7QUFHcEMsSUFBTSxzQkFBc0IsRUFBaUMsTUFBVTtBQUd2RSxTQUFTLHVCQUF1QjtBQUM1QixRQUFNLE9BQU9DLEdBQVcsbUJBQW1CO0FBQzNDLFFBQU0sZUFBZUM7QUFBQSxJQUNqQixVQUFNLDJCQUFTLENBQUMsVUFBc0MsS0FBSyxTQUFTLE9BQU8sRUFBRSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEdBQUc7QUFBQSxJQUNuRyxDQUFDLElBQUk7QUFBQSxFQUNUO0FBRUEsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQyxHQUFTLEtBQUssU0FBUyxDQUFDO0FBQzVELFFBQU0sV0FBV0M7QUFBQSxJQUNiLENBQUMsVUFBc0M7QUFDbkMsWUFBTSxhQUFhLEVBQUUsR0FBRyxZQUFZLEdBQUcsTUFBTTtBQUU3QyxvQkFBYyxVQUFVO0FBR3hCLG1CQUFhLFVBQVU7QUFBQSxJQUMzQjtBQUFBLElBQ0EsQ0FBQyxZQUFZLGVBQWUsSUFBSTtBQUFBLEVBQ3BDO0FBRUEsU0FDSSxnQkFBQUMsR0FBQyxTQUFNLE9BQU0sV0FDVDtBQUFBLG9CQUFBQSxHQUFDLFlBQU8sV0FBVSxrQkFBaUIsT0FBTSxxQkFBb0IsU0FBUyxNQUFNLEtBQUssS0FBSyxRQUFRLEdBQ3pGLHVCQUNMO0FBQUEsSUFDQSxnQkFBQUEsR0FBQyxTQUFNLFNBQVEsaUJBQWdCLE9BQU0sVUFDakM7QUFBQSxzQkFBQUEsR0FBQyxRQUFHLHdCQUFVO0FBQUEsTUFDZCxnQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNHLGNBQWMsS0FBSyxTQUFTLEVBQUU7QUFBQSxVQUM5QixVQUFVLENBQUNDLE9BQU0sU0FBUyxFQUFFLE9BQU9BLEdBQUUsY0FBYyxNQUFnQixDQUFDO0FBQUE7QUFBQSxNQUN4RTtBQUFBLE9BQ0o7QUFBQSxJQUNBLGdCQUFBRCxHQUFDLFNBQU0sU0FBUSxpQkFBZ0IsT0FBTSxVQUNqQztBQUFBLHNCQUFBQSxHQUFDLFFBQUcsdUJBQVM7QUFBQSxNQUNiLGdCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csY0FBYyxLQUFLLFNBQVMsRUFBRTtBQUFBLFVBQzlCLFNBQVM7QUFBQSxVQUNULE9BQU8sV0FBVztBQUFBLFVBQ2xCLGVBQWUsQ0FBQ0UsT0FBTSxTQUFTLEVBQUUsWUFBWUEsR0FBb0IsQ0FBQztBQUFBO0FBQUEsTUFDdEU7QUFBQSxPQUNKO0FBQUEsSUFDQSxnQkFBQUYsR0FBQyxTQUFNLFNBQVEsaUJBQWdCLE9BQU0sVUFDakM7QUFBQSxzQkFBQUEsR0FBQyxRQUFHLGdDQUFrQjtBQUFBLE1BQ3RCLGdCQUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csT0FBTyxFQUFFLFFBQVEsWUFBWSxVQUFVLE9BQU8sWUFBWSxZQUFZO0FBQUEsVUFDdEUsY0FBYyxXQUFXO0FBQUEsVUFDekIsT0FBTyxXQUFXO0FBQUEsVUFDbEIsVUFBVSxDQUFDQyxPQUFNLFNBQVMsRUFBRSxRQUFRQSxHQUFFLGNBQWMsTUFBZ0IsQ0FBQztBQUFBO0FBQUEsTUFDekU7QUFBQSxPQUNKO0FBQUEsSUFDQSxnQkFBQUQsR0FBQyxTQUFNLFNBQVEsaUJBQWdCLE9BQU0sVUFDakM7QUFBQSxzQkFBQUEsR0FBQyxTQUNHO0FBQUEsd0JBQUFBLEdBQUMsUUFBRywwQkFBWTtBQUFBLFFBQ2hCLGdCQUFBQSxHQUFDLFdBQU0sK0VBQWlFO0FBQUEsU0FDNUU7QUFBQSxNQUNBLGdCQUFBQSxHQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsTUFBTSxHQUMxQiwwQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNHLGNBQWMsV0FBVztBQUFBLFVBQ3pCLFVBQVUsQ0FBQ0csT0FBTSxTQUFTLEVBQUUsYUFBYUEsR0FBRSxDQUFDO0FBQUE7QUFBQSxNQUNoRCxHQUNKO0FBQUEsT0FDSjtBQUFBLEtBQ0o7QUFFUjtBQUdBLFNBQVMsb0JBQW9CO0FBQUEsRUFDekI7QUFBQSxFQUNBLFVBQUFDO0FBQ0osR0FHRztBQUNDLFFBQU0sT0FBT1IsR0FBVyxnQkFBZ0I7QUFDeEMsUUFBTSxXQUFXLGdCQUFnQixNQUFNLEVBQUUsVUFBVSxJQUFLLENBQUM7QUFHekQsUUFBTVMsV0FBVVIsR0FBUSxNQUFNO0FBQzFCLFdBQU8sS0FBSyxNQUFNLGlCQUFpQixFQUFFLElBQUksQ0FBQ1MsUUFBTyxFQUFFLE9BQU9BLEdBQUUsTUFBTSxPQUFPQSxHQUFFLEtBQUssRUFBRTtBQUFBLEVBQ3RGLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFFYixRQUFNLGdCQUFnQixlQUNoQixFQUFFLE9BQU8sV0FBVyxPQUFPLE9BQVUsSUFDckMsRUFBRSxPQUFPLGNBQWMsT0FBTyxhQUFhO0FBRWpELFNBQ0ksZ0JBQUFOO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxTQUFTSztBQUFBLE1BQ1QsaUJBQWdCO0FBQUEsTUFDaEIsY0FBYztBQUFBLE1BQ2QsVUFBVSxDQUFDLElBQUksUUFBUUQsVUFBUyx5QkFBSSxLQUFLO0FBQUEsTUFDekMsVUFBUTtBQUFBO0FBQUEsRUFDWjtBQUVSO0FBR0EsSUFBTSxtQkFBK0Q7QUFBQSxFQUNqRSxFQUFFLE9BQU8sY0FBYyxPQUFPLEtBQUs7QUFBQSxFQUNuQyxFQUFFLE9BQU8sY0FBYyxPQUFPLEtBQUs7QUFBQSxFQUNuQyxFQUFFLE9BQU8sb0JBQW9CLE9BQU8sTUFBTTtBQUFBLEVBQzFDLEVBQUUsT0FBTyxrQkFBa0IsT0FBTyxNQUFNO0FBQzVDO0FBR0EsSUFBTSxjQUNGLGdCQUFBSjtBQUFBLEVBQUM7QUFBQTtBQUFBLElBQ0csT0FBTTtBQUFBLElBQ04sT0FBTTtBQUFBLElBQ04sUUFBTztBQUFBLElBQ1AsU0FBUTtBQUFBLElBQ1IsTUFBSztBQUFBLElBQ0wsUUFBTztBQUFBLElBQ1AsZ0JBQWE7QUFBQSxJQUNiLGtCQUFlO0FBQUEsSUFDZixtQkFBZ0I7QUFBQSxJQUNoQixPQUFNO0FBQUEsSUFFTjtBQUFBLHNCQUFBQSxHQUFDLFVBQUssR0FBRSxrQkFBaUI7QUFBQSxNQUN6QixnQkFBQUEsR0FBQyxVQUFLLEdBQUUsWUFBVztBQUFBO0FBQUE7QUFDdkI7QUFpQkcsSUFBTSxvQkFBTixjQUFnQywwQkFBUztBQUFBLEVBYTVDLFlBQVksTUFBNEJPLE1BQWtCO0FBQ3RELFVBQU0sSUFBSTtBQUQwQixlQUFBQTtBQVh4QztBQUFBLFNBQU8sZ0JBQW1DO0FBQUEsTUFDdEMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsWUFBWTtBQUFBLE1BQ1osTUFBTTtBQUFBLElBQ1Y7QUFRSSxTQUFLLFNBQVM7QUFBQSxFQUNsQjtBQUFBO0FBQUEsRUFHQSxjQUFzQjtBQUNsQixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUEsRUFHQSxpQkFBeUI7QUFDckIsV0FBTyxHQUFHLEtBQUssY0FBYyxLQUFLO0FBQUEsRUFDdEM7QUFBQSxFQUVBLE1BQWEsU0FBUztBQUNsQixTQUFLLFVBQVUsU0FBUyxtQkFBbUI7QUFDM0MsU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQSxFQUVPLFdBQWlCO0FBQ3BCLFFBQUksS0FBSyxXQUFZLE1BQUssWUFBWSxLQUFLLFVBQVU7QUFBQSxFQUN6RDtBQUFBO0FBQUEsRUFHQSxXQUFpQjtBQUNiLFNBQUssS0FBSyxzQkFBc0IsY0FBYyxLQUFLLFFBQVEsY0FBYyxLQUFLLGVBQWU7QUFDN0YsUUFBSSxLQUFLLGtCQUFrQixLQUFLLGNBQWMsS0FBTTtBQUVwRCxRQUFJLEtBQUssV0FBWSxNQUFLLFlBQVksS0FBSyxVQUFVO0FBQ3JELFFBQUksS0FBSyxjQUFjLFNBQVMsWUFBWTtBQUN4QyxXQUFLLGlCQUFpQjtBQUN0QixXQUFLLGFBQWEsSUFBSTtBQUFBLFFBQ2xCLEtBQUs7QUFBQSxRQUNMLEtBQUssSUFBSTtBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSyxjQUFjLGVBQWU7QUFBQSxRQUU5QixnQkFBQVAsR0FBQyxvQkFBb0IsVUFBcEIsRUFBNkIsT0FBTyxNQUNqQywwQkFBQUEsR0FBQyx3QkFBcUIsR0FDMUI7QUFBQSxNQUVSO0FBQUEsSUFDSixPQUFPO0FBRUgsV0FBSyxpQkFBaUI7QUFDdEIsVUFBSSxLQUFLLGNBQWMsUUFBUTtBQUMzQixhQUFLLGFBQWEsSUFBSTtBQUFBLFVBQ2xCLElBQUksaUJBQWlCLEtBQUssS0FBSyxLQUFLLGNBQWMsZUFBZSxFQUFFO0FBQUEsVUFDbkUsS0FBSztBQUFBLFVBQ0wsS0FBSyxjQUFjLGVBQWU7QUFBQSxVQUNsQyxLQUFLLGNBQWMsVUFBVTtBQUFBLFVBQzdCLEtBQUssY0FBYyxjQUFjO0FBQUEsUUFDckM7QUFBQSxNQUNKLE9BQU87QUFDSCxhQUFLLGFBQWEsSUFBSTtBQUFBLFVBQ2xCLEtBQUs7QUFBQSxVQUNMLEtBQUssSUFBSTtBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSyxjQUFjLGVBQWU7QUFBQSxVQUU5QixnQkFBQUEsR0FBQyxvQkFBb0IsVUFBcEIsRUFBNkIsT0FBTyxNQUNqQywwQkFBQUEsR0FBQyxnQkFBYSxTQUFRLG9DQUFtQyxHQUM3RDtBQUFBLFFBRVI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUVBLFNBQUssU0FBUyxLQUFLLFVBQVU7QUFBQSxFQUNqQztBQUFBLEVBRU8sV0FBVztBQUNkLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUE7QUFBQSxFQUdBLE1BQWEsU0FBUyxPQUEwQixTQUF5QztBQUNyRixTQUFLLGdCQUFnQjtBQUNyQixTQUFLLFNBQVM7QUFBQSxFQUNsQjtBQUFBO0FBQUEsRUFHTyxLQUFLLE1BQW1DO0FBQzNDLFNBQUssY0FBYyxPQUFPO0FBQzFCLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUEsRUFFQSxNQUFhLFNBQXdCO0FBQUEsRUFBQztBQUFBO0FBQUEsRUFHL0IsV0FBVyxNQUFZLFFBQXNEO0FBQ2hGLFFBQUksV0FBVyxnQkFBZ0I7QUFDM0IsV0FBSyxRQUFRLENBQUMsT0FBTztBQUNqQixXQUFHLFFBQVEsVUFBVTtBQUNyQixXQUFHLFNBQVMsZ0JBQWdCO0FBQzVCLFdBQUcsUUFBUSxDQUFDQyxPQUFNLEtBQUssS0FBSyxVQUFVLENBQUM7QUFBQSxNQUMzQyxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0o7QUFDSjs7O0FDM1FPLFNBQVMsZUFBZSxFQUFFLFNBQVMsR0FBMkI7QUFDakUsa0JBQWdCLFVBQVUsRUFBRSxVQUFVLElBQUksQ0FBQztBQUczQyxNQUFJLFNBQVMsYUFBYTtBQUN0QixXQUNJLGdCQUFBTyxHQUFDLFVBQUs7QUFBQTtBQUFBLE1BQ1EsU0FBUyxZQUFZO0FBQUEsTUFBWTtBQUFBLE1BQUssU0FBUyxZQUFZO0FBQUEsTUFBTTtBQUFBLE9BQy9FO0FBQUEsRUFFUixXQUFXLFNBQVMsU0FBUyxNQUFNLEtBQUssSUFBSSxHQUFHO0FBQzNDLFdBQU8sZ0JBQUFBLEdBQUMsVUFBSztBQUFBO0FBQUEsTUFBVSxTQUFTLFNBQVMsTUFBTSxLQUFLO0FBQUEsTUFBRTtBQUFBLE9BQU07QUFBQSxFQUNoRSxPQUFPO0FBQ0gsV0FBTyxnQkFBQUEsR0FBQyxVQUFNO0FBQUEsZUFBUyxVQUFVO0FBQUEsTUFBSztBQUFBLE9BQVE7QUFBQSxFQUNsRDtBQUNKOzs7QXhLVEEsSUFBcUIsaUJBQXJCLGNBQTRDLHlCQUFPO0FBQUEsRUFTL0MsTUFBTSxTQUFTO0FBbkJuQjtBQW9CUSxTQUFLLFdBQVcsT0FBTyxPQUFPLENBQUMsR0FBRyxtQkFBbUIsV0FBTSxLQUFLLFNBQVMsTUFBcEIsWUFBMEIsQ0FBQyxDQUFDO0FBQ2pGLFNBQUssY0FBYyxJQUFJLG1CQUFtQixLQUFLLEtBQUssSUFBSSxDQUFDO0FBR3pELFNBQUssU0FBVSxLQUFLLE9BQU8sSUFBSSxTQUFTLEtBQUssS0FBSyxLQUFLLFNBQVMsU0FBUyxLQUFLLFFBQVEsQ0FBRTtBQUN4RixTQUFLLE1BQU0sSUFBSSxZQUFZLEtBQUssSUFBSTtBQUdwQyxTQUFLLGdCQUFnQixLQUFLLGlCQUFpQixHQUFHLEtBQUssSUFBSTtBQUd2RCxTQUFLO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBTyxRQUFnQixJQUFJLFFBQVEsS0FBSyxJQUFJLFVBQVUsUUFBUSxJQUFJLEtBQUssSUFBSSxVQUFVO0FBQUEsTUFDckY7QUFBQSxJQUNKO0FBRUEsU0FBSztBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQU8sUUFBZ0IsSUFBSSxRQUFRLEtBQUssSUFBSSxXQUFXLFFBQVEsSUFBSSxLQUFLLElBQUksVUFBVTtBQUFBLE1BQ3RGO0FBQUEsSUFDSjtBQUVBLFNBQUs7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFPLFFBQWdCLElBQUksUUFBUSxLQUFLLElBQUksVUFBVSxRQUFRLElBQUksS0FBSyxJQUFJLFVBQVU7QUFBQSxNQUNyRjtBQUFBLElBQ0o7QUFFQSxTQUFLO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBTyxRQUFnQixJQUFJLFFBQVEsS0FBSyxJQUFJLFdBQVcsUUFBUSxJQUFJLEtBQUssSUFBSSxVQUFVO0FBQUEsTUFDdEY7QUFBQSxJQUNKO0FBSUEsU0FBSyxhQUFhLHNCQUFzQixDQUFDLFNBQVMsSUFBSSxrQkFBZSxNQUFNLEtBQUssR0FBRyxDQUFDO0FBR3BGLFNBQUssV0FBVztBQUFBLE1BQ1osSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sVUFBVSxNQUFNO0FBQ1osY0FBTSxVQUFVLEtBQUssSUFBSSxVQUFVLFFBQVEsS0FBSztBQUNoRCxnQkFBUSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsUUFBUSxLQUFLLENBQUM7QUFDakUsYUFBSyxJQUFJLFVBQVUsY0FBYyxTQUFTLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxNQUM3RDtBQUFBLElBQ0osQ0FBQztBQUdELFNBQUssU0FBUyxLQUFLLDhCQUE4QixDQUFDO0FBR2xELFFBQUksQ0FBQyxLQUFLLElBQUksVUFBVSxhQUFhO0FBQ2pDLFdBQUssSUFBSSxVQUFVLGNBQWMsWUFBWSxLQUFLLEtBQUssV0FBVyxDQUFDO0FBQUEsSUFDdkUsT0FBTztBQUNILFdBQUssS0FBSyxXQUFXO0FBQUEsSUFDekI7QUFHQSxXQUFPLFdBQVcsS0FBSztBQUd2QixZQUFRLElBQUkscUJBQXFCLEtBQUssU0FBUyxPQUFPLHVCQUF1QixLQUFLLFNBQVMsYUFBYSxHQUFHO0FBQUEsRUFDL0c7QUFBQSxFQUVBLFdBQVc7QUFDUCxZQUFRLElBQUkscUJBQXFCLEtBQUssU0FBUyxPQUFPLFlBQVk7QUFBQSxFQUN0RTtBQUFBO0FBQUEsRUFHQSxnQ0FBNEM7QUFDeEMsV0FBTyxXQUFXLFdBQVcsY0FBYyxDQUFDQyxZQUFXLE9BQU8sV0FBVyxRQUFRQSxTQUFRLFlBQVksQ0FBQztBQUN0RyxXQUFPLFdBQVcsV0FBVyxlQUFlLENBQUNBLFlBQVcsT0FBTyxXQUFXLFFBQVFBLFNBQVEsS0FBSyxDQUFDO0FBQ2hHLFdBQU8sV0FBVyxXQUFXLGNBQWMsQ0FBQ0EsWUFBVyxPQUFPLFdBQVcsUUFBUUEsU0FBUSxZQUFZLENBQUM7QUFDdEcsV0FBTyxXQUFXLFdBQVcsZUFBZSxDQUFDQSxZQUFXLE9BQU8sV0FBVyxRQUFRQSxTQUFRLEtBQUssQ0FBQztBQUVoRyxXQUFPLE1BQU07QUFDVCxhQUFPLFdBQVcsV0FBVyxjQUFjLENBQUNBLFlBQVcsT0FBTyxXQUFXLFFBQVFBLFNBQVEsTUFBTSxDQUFDO0FBQ2hHLGFBQU8sV0FBVyxXQUFXLGVBQWUsQ0FBQ0EsWUFBVyxPQUFPLFdBQVcsUUFBUUEsU0FBUSxNQUFNLENBQUM7QUFDakcsYUFBTyxXQUFXLFdBQVcsY0FBYyxDQUFDQSxZQUFXLE9BQU8sV0FBVyxRQUFRQSxTQUFRLE1BQU0sQ0FBQztBQUNoRyxhQUFPLFdBQVcsV0FBVyxlQUFlLENBQUNBLFlBQVcsT0FBTyxXQUFXLFFBQVFBLFNBQVEsTUFBTSxDQUFDO0FBQUEsSUFDckc7QUFBQSxFQUNKO0FBQUE7QUFBQSxFQUdBLE1BQU0sZUFBZSxVQUE2QjtBQUM5QyxXQUFPLE9BQU8sS0FBSyxVQUFVLFFBQVE7QUFDckMsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDckM7QUFBQTtBQUFBLEVBR1EsZ0JBQWdCLE1BQW1CLE1BQXNCO0FBQzdELE1BQU8sRUFBYyxnQkFBZ0IsRUFBRSxVQUFVLEtBQUssQ0FBQyxHQUFHLElBQUk7QUFFOUQsU0FBSyxTQUFTLE1BQU0sRUFBTyxNQUFNLElBQUksQ0FBQztBQUFBLEVBQzFDO0FBQ0o7QUFHQSxJQUFNLHFCQUFOLGNBQWlDLG1DQUFpQjtBQUFBLEVBQzlDLFlBQVksS0FBa0IsUUFBd0I7QUFDbEQsVUFBTSxLQUFLLE1BQU07QUFEUztBQUFBLEVBRTlCO0FBQUEsRUFFTyxVQUFnQjtBQUNuQixTQUFLLFlBQVksTUFBTTtBQUV2QixTQUFLLFlBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakQsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxZQUFZLEVBQ3BCO0FBQUEsTUFDRztBQUFBLElBSUosRUFDQyxVQUFVLENBQUMsV0FBVztBQUNuQixhQUFPLFNBQVMsS0FBSyxPQUFPLFNBQVMsb0JBQW9CLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFDakYsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLHNCQUFzQixNQUFNLENBQUM7QUFBQSxNQUNwRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxtQkFBbUIsRUFDM0IsUUFBUSxnR0FBZ0csRUFDeEcsWUFBWSxDQUFDLGFBQWE7QUFDdkIsWUFBTSxVQUFrQztBQUFBLFFBQ3BDLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLE9BQU87QUFBQSxNQUNYO0FBQ0EsWUFBTSxVQUFVLEtBQUssS0FBSyxPQUFPLFNBQVM7QUFDMUMsVUFBSSxFQUFFLFdBQVcsU0FBVSxTQUFRLE9BQU8sSUFBSTtBQUU5QyxlQUNLLFdBQVcsT0FBTyxFQUNsQixTQUFTLE9BQU8sRUFDaEIsU0FBUyxPQUFPLFVBQVU7QUFDdkIsY0FBTSxTQUFTLFdBQVcsS0FBSztBQUMvQixZQUFJLE1BQU0sTUFBTSxFQUFHO0FBRW5CLGNBQU0sS0FBSyxPQUFPLGVBQWUsRUFBRSxpQkFBaUIsU0FBUyxFQUFFLENBQUM7QUFBQSxNQUNwRSxDQUFDO0FBQUEsSUFDVCxDQUFDO0FBRUwsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSx1QkFBdUIsRUFDL0I7QUFBQSxNQUNHO0FBQUEsSUFFSixFQUNDLFVBQVUsQ0FBQyxXQUFXO0FBQ25CLGFBQU8sU0FBUyxLQUFLLE9BQU8sU0FBUyxrQkFBa0IsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUMvRSxjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUsb0JBQW9CLE1BQU0sQ0FBQztBQUFBLE1BQ2xFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFDTCxRQUFJLDBCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLG1CQUFtQixFQUMzQixRQUFRLGtEQUFrRCxFQUMxRCxVQUFVLENBQUMsV0FBVztBQUNuQixhQUFPLFNBQVMsS0FBSyxPQUFPLFNBQVMsUUFBUSxFQUFFLFNBQVMsT0FBTyxVQUFVO0FBQ3JFLGNBQU0sS0FBSyxPQUFPLGVBQWUsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUFBLE1BQ3hELENBQUM7QUFBQSxJQUNMLENBQUM7QUFFTCxTQUFLLFlBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEQsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxjQUFjLEVBQ3RCLFFBQVEsMENBQTBDLEVBQ2xELFFBQVEsQ0FBQ0MsVUFBUztBQUNmLE1BQUFBLE1BQUssU0FBUyxLQUFLLE9BQU8sU0FBUyxZQUFZLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFDdkUsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLGNBQWMsTUFBTSxDQUFDO0FBQUEsTUFDNUQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVMLFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEscUJBQXFCLEVBQzdCO0FBQUEsTUFDRztBQUFBLElBQ0osRUFDQyxRQUFRLENBQUNBLFVBQVM7QUFDZixNQUFBQSxNQUFLLFNBQVMsS0FBSyxPQUFPLFNBQVMsaUJBQWlCLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFFNUUsWUFBSTtBQUNBLG1CQUFTLFdBQVcsS0FBSyxJQUFJLENBQUMsRUFBRSxTQUFTLEtBQUs7QUFBQSxRQUNsRCxTQUFRQyxJQUFBO0FBQ0o7QUFBQSxRQUNKO0FBQ0EsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLG1CQUFtQixNQUFNLENBQUM7QUFBQSxNQUNqRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSwwQkFBMEIsRUFDbEM7QUFBQSxNQUNHO0FBQUEsSUFDSixFQUNDLFFBQVEsQ0FBQ0QsVUFBUztBQUNmLE1BQUFBLE1BQUssU0FBUyxLQUFLLE9BQU8sU0FBUyxxQkFBcUIsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUNoRixZQUFJO0FBQ0EsbUJBQVMsV0FBVyxLQUFLLElBQUksQ0FBQyxFQUFFLFNBQVMsS0FBSztBQUFBLFFBQ2xELFNBQVFDLElBQUE7QUFDSjtBQUFBLFFBQ0o7QUFDQSxjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUsdUJBQXVCLE1BQU0sQ0FBQztBQUFBLE1BQ3JFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFTCxTQUFLLFlBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RCxRQUFJLDBCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLGVBQWUsRUFDdkI7QUFBQSxNQUNHO0FBQUEsSUFHSixFQUNDLFVBQVUsQ0FBQyxXQUFXO0FBQ25CLGFBQU8sU0FBUyxLQUFLLE9BQU8sU0FBUyxpQkFBaUIsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUM5RSxjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUsbUJBQW1CLE1BQU0sQ0FBQztBQUFBLE1BR2pFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFTCxRQUFJLDBCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLGtCQUFrQixFQUMxQixRQUFRLDZEQUE2RCxFQUNyRSxRQUFRLENBQUNELFVBQVM7QUFDZixNQUFBQSxNQUFLLFNBQVMsS0FBSyxLQUFLLE9BQU8sU0FBUyxrQkFBa0IsRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUNsRixjQUFNLFNBQVMsU0FBUyxLQUFLO0FBQzdCLFlBQUksTUFBTSxNQUFNLEVBQUc7QUFFbkIsY0FBTSxLQUFLLE9BQU8sZUFBZSxFQUFFLG9CQUFvQixPQUFPLENBQUM7QUFBQSxNQUNuRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUwsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxzQkFBc0IsRUFDOUIsUUFBUSwrRUFBK0UsRUFDdkYsUUFBUSxDQUFDQSxVQUFTO0FBQ2YsTUFBQUEsTUFBSyxTQUFTLEtBQUssT0FBTyxTQUFTLG9CQUFvQixRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsT0FBTyxVQUFVO0FBQ3pGLGNBQU0sU0FBUyxXQUFXLEtBQUs7QUFDL0IsWUFBSSxNQUFNLE1BQU0sRUFBRztBQUVuQixjQUFNLFVBQVUsS0FBSyxJQUFJLEtBQUssS0FBSyxJQUFJLEdBQUssTUFBTSxDQUFDO0FBQ25ELGNBQU0sS0FBSyxPQUFPLGVBQWUsRUFBRSxxQkFBcUIsUUFBUSxDQUFDO0FBQUEsTUFDckUsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVMLFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEsZ0NBQWdDLEVBQ3hDO0FBQUEsTUFDRztBQUFBLElBR0osRUFDQyxRQUFRLENBQUNBLFVBQVM7QUFDZixNQUFBQSxNQUFLLFNBQVMsS0FBSyxPQUFPLFNBQVMsd0JBQXdCLFNBQVMsQ0FBQyxFQUFFLFNBQVMsT0FBTyxVQUFVO0FBQzdGLGNBQU0sU0FBUyxTQUFTLEtBQUs7QUFDN0IsWUFBSSxNQUFNLE1BQU0sRUFBRztBQUNuQixjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUseUJBQXlCLE9BQU8sQ0FBQztBQUFBLE1BQ3hFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFDTCxRQUFJLDBCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLDhCQUE4QixFQUN0QyxRQUFRLDRGQUE0RixFQUNwRyxVQUFVLENBQUMsT0FBTztBQUNmLFNBQUcsU0FBUyxLQUFLLE9BQU8sU0FBUyx1QkFBdUIsRUFBRSxTQUFTLE9BQU8sUUFBUTtBQUM5RSxjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUseUJBQXlCLElBQUksQ0FBQztBQUFBLE1BQ3JFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFTCxTQUFLLFlBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakQsUUFBSSwwQkFBUSxLQUFLLFdBQVcsRUFDdkIsUUFBUSxzQkFBc0IsRUFDOUIsUUFBUSxrRUFBa0UsRUFDMUUsUUFBUSxDQUFDQSxVQUFTO0FBQ2YsTUFBQUEsTUFBSyxTQUFTLEtBQUssT0FBTyxTQUFTLGtCQUFrQixFQUFFLFNBQVMsT0FBTyxVQUFVO0FBQzdFLGNBQU0sS0FBSyxPQUFPLGVBQWUsRUFBRSxvQkFBb0IsTUFBTSxDQUFDO0FBQUEsTUFDbEUsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVMLFFBQUksMEJBQVEsS0FBSyxXQUFXLEVBQ3ZCLFFBQVEseUNBQXlDLEVBQ2pEO0FBQUEsTUFDRztBQUFBLElBRUosRUFDQyxVQUFVLENBQUMsT0FBTztBQUNmLFNBQUcsU0FBUyxLQUFLLE9BQU8sU0FBUywrQkFBK0IsRUFBRSxTQUFTLE9BQU8sUUFBUTtBQUN0RixjQUFNLEtBQUssT0FBTyxlQUFlLEVBQUUsaUNBQWlDLElBQUksQ0FBQztBQUFBLE1BQzdFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUNUO0FBQ0o7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAibW9kdWxlIiwgIlBhcnNpbW1vbiIsICJfIiwgIm4iLCAiZiIsICJpIiwgInJlZHVjZSIsICJhcnIiLCAiYSIsICJ2IiwgImIiLCAieCIsICJ5IiwgImlzQXJyYXkiLCAibGVuZ3RoIiwgImlzSW50ZWdlciIsICJ0b0FycmF5IiwgImluZGV4IiwgImoiLCAiayIsICJwIiwgImMiLCAic3RyaW5nIiwgImNoYXIiLCAiY29sdW1uIiwgImxpbmVSYW5nZSIsICJwcmVmaXgiLCAic2VxIiwgInNlcU1hcCIsICJjcmVhdGVMYW5ndWFnZSIsICJrZXkiLCAiYWx0IiwgInN1Y2NlZWQiLCAiciIsICJuZXh0IiwgInNlbGYiLCAicyIsICJtaW4iLCAibWF4IiwgInRpbWVzIiwgImZuIiwgImciLCAiZW5kIiwgInJlZ2V4cCIsICJtYXRjaCIsICJ0ZXh0IiwgIm9uZU9mIiwgIm5vbmVPZiIsICJjdXN0b20iLCAiYmVnaW4iLCAiYW55IiwgIm9wdFdoaXRlc3BhY2UiLCAid2hpdGVzcGFjZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIkNvbnRleHR1YWxLZXl3b3JkIiwgImV4cG9ydHMiLCAiVG9rZW5UeXBlIiwgInJlZ2V4cCIsICJzdHJpbmciLCAiYXJyb3ciLCAiaGFzaCIsICJhc3NpZ24iLCAiX2RlZmF1bHQiLCAiX2V4dGVuZHMiLCAiX3R5cGVvZiIsICJleHBvcnRzIiwgImVuZCIsICJleHBvcnRzIiwgImNoYXJDb2RlcyIsICJjYXJldCIsICJleHBvcnRzIiwgImxpbmUiLCAiY29sdW1uIiwgImkiLCAiZXhwb3J0cyIsICJsIiwgImkiLCAiZXhwb3J0cyIsICJjaGFyIiwgImV4cG9ydHMiLCAiaSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibmV4dCIsICJleHBvcnRzIiwgIklkZW50aWZpZXJSb2xlIiwgIkpTWFJvbGUiLCAidG9rZW4iLCAibmV4dCIsICJpIiwgIm1hdGNoIiwgInNpemUiLCAiZXhwb3J0cyIsICJ0b2tlbiIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAib3B0aW9ucyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAib3B0aW9ucyIsICJwcmVmaXgiLCAidG9rZW4iLCAicyIsICJ0ZXh0IiwgIndoaXRlc3BhY2UiLCAiaSIsICJjIiwgImV4cG9ydHMiLCAib3B0aW9ucyIsICJpIiwgInRva2VuIiwgImV4cG9ydHMiLCAib3B0aW9ucyIsICJpIiwgImNvbXBvbmVudHMiLCAidG9rZW4iLCAibGVuZ3RoIiwgImkiLCAiayIsICJpIiwgImMiLCAic2hpZnQiLCAibWF4IiwgInYiLCAiY2hhciIsICJsZW5ndGgiLCAibGluZSIsICJjb2x1bW4iLCAibmV4dCIsICJsIiwgImEiLCAiYiIsICJqIiwgIm1hdGNoIiwgImhhc2giLCAidXJsIiwgImkiLCAiaSIsICJsaW5lIiwgImoiLCAiYSIsICJiIiwgInNvdXJjZUluZGV4IiwgInBhcnNlIiwgIm9mZnNldCIsICJhcHBlbmQiLCAiY29sdW1uIiwgImlzU3RyaW5nIiwgImZyb20iLCAicyIsICJlbmNvZGUiLCAiZGVjb2RlIiwgImNsb25lIiwgImJzRm91bmQiLCAibWluIiwgIm1heCIsICJTZXRBcnJheSIsICJwdXQiLCAicmVtb3ZlIiwgImVuY29kZSIsICJUcmFjZU1hcCIsICJkZWNvZGVkTWFwcGluZ3MiLCAiaSIsICJsaW5lIiwgImoiLCAibGVuZ3RoIiwgInByZXYiLCAiZXhwb3J0cyIsICJvcHRpb25zIiwgImxpbmUiLCAiaSIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAidG9rZW4iLCAiaSIsICJleHBvcnRzIiwgInRva2VuIiwgImV4cG9ydHMiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAiZCIsICJiIiwgInAiLCAiVkVycm9yIiwgIk5vb3BDb250ZXh0IiwgIkRldGFpbENvbnRleHQiLCAidSIsICJpIiwgIm0iLCAiRGV0YWlsVW5pb25SZXNvbHZlciIsICJyZXF1aXJlX3R5cGVzIiwgImV4cG9ydHMiLCAiZCIsICJiIiwgInAiLCAiVFR5cGUiLCAibmFtZSIsICJUTmFtZSIsICJUTGl0ZXJhbCIsICJUQXJyYXkiLCAiaSIsICJfaSIsICJ0IiwgIlRUdXBsZSIsICJUVW5pb24iLCAibiIsICJUSW50ZXJzZWN0aW9uIiwgIlRFbnVtVHlwZSIsICJURW51bUxpdGVyYWwiLCAiVElmYWNlIiwgInYiLCAiVE9wdGlvbmFsIiwgIlRQcm9wIiwgIlRGdW5jIiwgIlRQYXJhbSIsICJUUGFyYW1MaXN0IiwgInBhcmFtIiwgIkJhc2ljVHlwZSIsICJhcnJheV8xIiwgImV4cG9ydHMiLCAicyIsICJpIiwgInIiLCAiayIsICJhIiwgImoiLCAiQ2hlY2tlciIsICJwIiwgImV4cG9ydHMiLCAidCIsICJleHBvcnRzIiwgIm9wdGlvbnMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIkZ1bmN0aW9uVHlwZSIsICJpIiwgImV4cG9ydHMiLCAicmVxdWlyZV90eXBlcyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJ0b2tlbiIsICJleHBvcnRzIiwgImRlY2xhcmF0aW9uIiwgInRva2VuIiwgImVuZCIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiRmlsZSIsICJwYXJzZSIsICJleHBvcnRzIiwgInRva2VuIiwgImV4cG9ydHMiLCAidG9rZW4iLCAidDIiLCAidDMiLCAicHJlZml4IiwgImkiLCAiZXhwb3J0cyIsICJ0b2tlbiIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiaSIsICJ0b2tlbiIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgInByZWZpeCIsICJ0b2tlbiIsICJpZGVudGlmaWVyIiwgImV4cG9ydHMiLCAib3B0aW9ucyIsICJpIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJpIiwgImZuIiwgIl8iLCAiXzIiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAidG9rZW4iLCAiaSIsICJleHBvcnRzIiwgIm9wdGlvbnMiLCAidG9rZW4iLCAiZXhwb3J0cyIsICJ0b2tlbiIsICJleHBvcnRzIiwgImkiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9wdGlvbnMiLCAicHJlZml4IiwgInYiLCAicyIsICJpIiwgImV4cG9ydHMiLCAiTGluZXNBbmRDb2x1bW5zIiwgInN0cmluZyIsICJvZmZzZXQiLCAibGluZSIsICJjb2x1bW4iLCAiZXhwb3J0cyIsICJrIiwgImNvbXBvbmVudHMiLCAiaSIsICJ0b2tlbiIsICJlbmQiLCAicyIsICJsZW5ndGgiLCAiZXhwb3J0cyIsICJpIiwgInJlcXVpcmVfZGlzdCIsICJleHBvcnRzIiwgInRyYW5zZm9ybSIsICJvcHRpb25zIiwgImUiLCAiZXhwb3J0cyIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJoIiwgImsiLCAibCIsICJtIiwgIm4iLCAicCIsICJxIiwgInIiLCAidCIsICJ2IiwgInciLCAieCIsICJ5IiwgInoiLCAiYSIsICJ1IiwgIkEiLCAiZXhwb3J0cyIsICJFbGVtZW50IiwgImlzRWxlbWVudCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpIiwgImUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiX2V4dGVuZHMiLCAibiIsICJlIiwgInQiLCAiciIsICJleHBvcnRzIiwgInNsaWNlIiwgIm9wdGlvbnMiLCAidm5vZGVJZCIsICJpc1ZhbGlkRWxlbWVudCIsICJyZXJlbmRlclF1ZXVlIiwgInByZXZEZWJvdW5jZSIsICJkZWZlciIsICJkZXB0aFNvcnQiLCAiZXZlbnRDbG9jayIsICJldmVudFByb3h5IiwgImV2ZW50UHJveHlDYXB0dXJlIiwgImkiLCAiRU1QVFlfT0JKIiwgIkVNUFRZX0FSUiIsICJJU19OT05fRElNRU5TSU9OQUwiLCAiaXNBcnJheSIsICJBcnJheSIsICJhc3NpZ24iLCAib2JqIiwgInByb3BzIiwgInJlbW92ZU5vZGUiLCAibm9kZSIsICJwYXJlbnROb2RlIiwgInJlbW92ZUNoaWxkIiwgImNyZWF0ZUVsZW1lbnQiLCAidHlwZSIsICJjaGlsZHJlbiIsICJrZXkiLCAicmVmIiwgIm5vcm1hbGl6ZWRQcm9wcyIsICJhcmd1bWVudHMiLCAibGVuZ3RoIiwgImNhbGwiLCAiZGVmYXVsdFByb3BzIiwgImNyZWF0ZVZOb2RlIiwgIm9yaWdpbmFsIiwgInZub2RlIiwgIl9fayIsICJfXyIsICJfX2IiLCAiX19lIiwgIl9fZCIsICJfX2MiLCAiY29uc3RydWN0b3IiLCAiX192IiwgIl9faSIsICJfX3UiLCAiRnJhZ21lbnQiLCAiQmFzZUNvbXBvbmVudCIsICJjb250ZXh0IiwgInRoaXMiLCAiZ2V0RG9tU2libGluZyIsICJjaGlsZEluZGV4IiwgInNpYmxpbmciLCAidXBkYXRlUGFyZW50RG9tUG9pbnRlcnMiLCAiY2hpbGQiLCAiYmFzZSIsICJlbnF1ZXVlUmVuZGVyIiwgImMiLCAicHVzaCIsICJwcm9jZXNzIiwgIl9fciIsICJkZWJvdW5jZVJlbmRlcmluZyIsICJyZW5kZXJRdWV1ZUxlbmd0aCIsICJjb21wb25lbnQiLCAibmV3Vk5vZGUiLCAib2xkVk5vZGUiLCAib2xkRG9tIiwgImNvbW1pdFF1ZXVlIiwgInJlZlF1ZXVlIiwgInNvcnQiLCAic2hpZnQiLCAiX19QIiwgImRpZmYiLCAiX19uIiwgIm5hbWVzcGFjZVVSSSIsICJjb21taXRSb290IiwgImRpZmZDaGlsZHJlbiIsICJwYXJlbnREb20iLCAicmVuZGVyUmVzdWx0IiwgIm5ld1BhcmVudFZOb2RlIiwgIm9sZFBhcmVudFZOb2RlIiwgImdsb2JhbENvbnRleHQiLCAibmFtZXNwYWNlIiwgImV4Y2Vzc0RvbUNoaWxkcmVuIiwgImlzSHlkcmF0aW5nIiwgImNoaWxkVk5vZGUiLCAibmV3RG9tIiwgImZpcnN0Q2hpbGREb20iLCAib2xkQ2hpbGRyZW4iLCAibmV3Q2hpbGRyZW5MZW5ndGgiLCAiY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheSIsICJhcHBseVJlZiIsICJpbnNlcnQiLCAibmV4dFNpYmxpbmciLCAic2tld2VkSW5kZXgiLCAibWF0Y2hpbmdJbmRleCIsICJvbGRDaGlsZHJlbkxlbmd0aCIsICJyZW1haW5pbmdPbGRDaGlsZHJlbiIsICJza2V3IiwgIlN0cmluZyIsICJmaW5kTWF0Y2hpbmdJbmRleCIsICJ1bm1vdW50IiwgInBhcmVudFZOb2RlIiwgImNvbnRhaW5zIiwgImluc2VydEJlZm9yZSIsICJub2RlVHlwZSIsICJ4IiwgInkiLCAic2V0U3R5bGUiLCAic3R5bGUiLCAidmFsdWUiLCAic2V0UHJvcGVydHkiLCAidGVzdCIsICJkb20iLCAibmFtZSIsICJvbGRWYWx1ZSIsICJ1c2VDYXB0dXJlIiwgIm8iLCAiY3NzVGV4dCIsICJyZXBsYWNlIiwgInRvTG93ZXJDYXNlIiwgImwiLCAiX2F0dGFjaGVkIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJlIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJzZXRBdHRyaWJ1dGUiLCAiY3JlYXRlRXZlbnRQcm94eSIsICJldmVudEhhbmRsZXIiLCAiX2Rpc3BhdGNoZWQiLCAiZXZlbnQiLCAidG1wIiwgImlzTmV3IiwgIm9sZFByb3BzIiwgIm9sZFN0YXRlIiwgInNuYXBzaG90IiwgImNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbiIsICJuZXdQcm9wcyIsICJpc0NsYXNzQ29tcG9uZW50IiwgInByb3ZpZGVyIiwgImNvbXBvbmVudENvbnRleHQiLCAicmVuZGVySG9vayIsICJjb3VudCIsICJuZXdUeXBlIiwgIm91dGVyIiwgInByb3RvdHlwZSIsICJyZW5kZXIiLCAiY29udGV4dFR5cGUiLCAiX19FIiwgImRvUmVuZGVyIiwgInN1YiIsICJzdGF0ZSIsICJfX2giLCAiX3NiIiwgIl9fcyIsICJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCAiY29tcG9uZW50V2lsbE1vdW50IiwgImNvbXBvbmVudERpZE1vdW50IiwgImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCAic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwgInNvbWUiLCAiY29tcG9uZW50V2lsbFVwZGF0ZSIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiZ2V0Q2hpbGRDb250ZXh0IiwgImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwgIk1PREVfSFlEUkFURSIsICJpbmRleE9mIiwgImRpZmZFbGVtZW50Tm9kZXMiLCAiZGlmZmVkIiwgInJvb3QiLCAiY2IiLCAibmV3SHRtbCIsICJvbGRIdG1sIiwgIm5ld0NoaWxkcmVuIiwgImlucHV0VmFsdWUiLCAiY2hlY2tlZCIsICJsb2NhbE5hbWUiLCAiZG9jdW1lbnQiLCAiY3JlYXRlVGV4dE5vZGUiLCAiY3JlYXRlRWxlbWVudE5TIiwgImlzIiwgIl9fbSIsICJkYXRhIiwgImNoaWxkTm9kZXMiLCAiYXR0cmlidXRlcyIsICJfX2h0bWwiLCAiaW5uZXJIVE1MIiwgImhhc1JlZlVubW91bnQiLCAiY3VycmVudCIsICJza2lwUmVtb3ZlIiwgInIiLCAiY29tcG9uZW50V2lsbFVubW91bnQiLCAicmVwbGFjZU5vZGUiLCAiZmlyc3RDaGlsZCIsICJlcnJvciIsICJlcnJvckluZm8iLCAiY3RvciIsICJoYW5kbGVkIiwgImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsICJzZXRTdGF0ZSIsICJjb21wb25lbnREaWRDYXRjaCIsICJ1bmRlZmluZWQiLCAidXBkYXRlIiwgImNhbGxiYWNrIiwgInMiLCAiZm9yY2VVcGRhdGUiLCAiUHJvbWlzZSIsICJ0aGVuIiwgImJpbmQiLCAicmVzb2x2ZSIsICJzZXRUaW1lb3V0IiwgImEiLCAiYiIsICJtIiwgImRlZmF1bHRWYWx1ZSIsICJjb250ZXh0SWQiLCAiQ29uc3VtZXIiLCAiY29udGV4dFZhbHVlIiwgIlByb3ZpZGVyIiwgInN1YnMiLCAiY3R4IiwgIlNldCIsICJfcHJvcHMiLCAiZm9yRWFjaCIsICJhZGQiLCAib2xkIiwgImRlbGV0ZSIsICJfIiwgImh5ZHJhdGUiLCAidSIsICJWIiwgInRvQ2hpbGRBcnJheSIsICJvdXQiLCAiY3VycmVudEluZGV4IiwgImN1cnJlbnRDb21wb25lbnQiLCAicHJldmlvdXNDb21wb25lbnQiLCAicHJldlJhZiIsICJjdXJyZW50SG9vayIsICJhZnRlclBhaW50RWZmZWN0cyIsICJvcHRpb25zIiwgIl9vcHRpb25zIiwgIm9sZEJlZm9yZURpZmYiLCAiX19iIiwgIm9sZEJlZm9yZVJlbmRlciIsICJfX3IiLCAib2xkQWZ0ZXJEaWZmIiwgImRpZmZlZCIsICJvbGRDb21taXQiLCAiX19jIiwgIm9sZEJlZm9yZVVubW91bnQiLCAidW5tb3VudCIsICJvbGRSb290IiwgIl9fIiwgImdldEhvb2tTdGF0ZSIsICJpbmRleCIsICJ0eXBlIiwgIl9faCIsICJob29rcyIsICJfX0giLCAibGVuZ3RoIiwgInB1c2giLCAidXNlU3RhdGUiLCAiaW5pdGlhbFN0YXRlIiwgInVzZVJlZHVjZXIiLCAiaW52b2tlT3JSZXR1cm4iLCAicmVkdWNlciIsICJpbml0IiwgImhvb2tTdGF0ZSIsICJfcmVkdWNlciIsICJhY3Rpb24iLCAiY3VycmVudFZhbHVlIiwgIl9fTiIsICJuZXh0VmFsdWUiLCAic2V0U3RhdGUiLCAiX2hhc1NjdUZyb21Ib29rcyIsICJ1cGRhdGVIb29rU3RhdGUiLCAicCIsICJzIiwgImMiLCAic3RhdGVIb29rcyIsICJmaWx0ZXIiLCAieCIsICJldmVyeSIsICJwcmV2U2N1IiwgImNhbGwiLCAidGhpcyIsICJzaG91bGRVcGRhdGUiLCAiZm9yRWFjaCIsICJob29rSXRlbSIsICJwcm9wcyIsICJzaG91bGRDb21wb25lbnRVcGRhdGUiLCAicHJldkNXVSIsICJjb21wb25lbnRXaWxsVXBkYXRlIiwgIl9fZSIsICJ0bXAiLCAidXNlTGF5b3V0RWZmZWN0IiwgImNhbGxiYWNrIiwgImFyZ3MiLCAic3RhdGUiLCAiX19zIiwgImFyZ3NDaGFuZ2VkIiwgIl9wZW5kaW5nQXJncyIsICJ1c2VNZW1vIiwgImZhY3RvcnkiLCAiZmx1c2hBZnRlclBhaW50RWZmZWN0cyIsICJjb21wb25lbnQiLCAic2hpZnQiLCAiX19QIiwgImludm9rZUNsZWFudXAiLCAiaW52b2tlRWZmZWN0IiwgImUiLCAiX192IiwgInZub2RlIiwgInBhcmVudERvbSIsICJfX2siLCAiX19tIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJhZnRlck5leHRGcmFtZSIsICJjb21taXRRdWV1ZSIsICJzb21lIiwgImNiIiwgImhhc0Vycm9yZWQiLCAiSEFTX1JBRiIsICJyYWYiLCAiZG9uZSIsICJjbGVhclRpbWVvdXQiLCAidGltZW91dCIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJzZXRUaW1lb3V0IiwgImhvb2siLCAiY29tcCIsICJjbGVhbnVwIiwgIm9sZEFyZ3MiLCAibmV3QXJncyIsICJhcmciLCAiZiIsICJleHBvcnRzIiwgImNvbnRleHQiLCAicHJvdmlkZXIiLCAic3ViIiwgInZhbHVlIiwgImZvcm1hdHRlciIsICJ1c2VEZWJ1Z1ZhbHVlIiwgIm4iLCAiZXJyU3RhdGUiLCAiY29tcG9uZW50RGlkQ2F0Y2giLCAiZXJyIiwgImVycm9ySW5mbyIsICJ1bmRlZmluZWQiLCAicm9vdCIsICJtYXNrIiwgInJlZiIsICJjcmVhdGVIYW5kbGUiLCAiY3VycmVudCIsICJjb25jYXQiLCAiaCIsICJ5IiwgIm0iLCAiaW5pdGlhbFZhbHVlIiwgImQiLCAic2hhbGxvd0RpZmZlcnMiLCAiYSIsICJiIiwgImkiLCAiUHVyZUNvbXBvbmVudCIsICJwIiwgImMiLCAidGhpcyIsICJwcm9wcyIsICJjb250ZXh0IiwgIm1lbW8iLCAiY29tcGFyZXIiLCAic2hvdWxkVXBkYXRlIiwgIm5leHRQcm9wcyIsICJyZWYiLCAidXBkYXRlUmVmIiwgImNhbGwiLCAiY3VycmVudCIsICJNZW1vZWQiLCAic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwgImNyZWF0ZUVsZW1lbnQiLCAiZGlzcGxheU5hbWUiLCAibmFtZSIsICJwcm90b3R5cGUiLCAiaXNSZWFjdENvbXBvbmVudCIsICJfX2YiLCAiQ29tcG9uZW50IiwgImlzUHVyZVJlYWN0Q29tcG9uZW50IiwgInN0YXRlIiwgIm9sZERpZmZIb29rIiwgIm9wdGlvbnMiLCAiX19iIiwgInZub2RlIiwgInR5cGUiLCAiUkVBQ1RfRk9SV0FSRF9TWU1CT0wiLCAiU3ltYm9sIiwgImZvciIsICJmb3J3YXJkUmVmIiwgImZuIiwgIkZvcndhcmRlZCIsICJyZXN1bHQiLCAiJCR0eXBlb2YiLCAicmVuZGVyIiwgIm1hcEZuIiwgImNoaWxkcmVuIiwgInRvQ2hpbGRBcnJheSIsICJtYXAiLCAiQ2hpbGRyZW4iLCAiZm9yRWFjaCIsICJjb3VudCIsICJsZW5ndGgiLCAib25seSIsICJub3JtYWxpemVkIiwgInRvQXJyYXkiLCAib2xkQ2F0Y2hFcnJvciIsICJfX2UiLCAiZXJyb3IiLCAibmV3Vk5vZGUiLCAib2xkVk5vZGUiLCAiZXJyb3JJbmZvIiwgInRoZW4iLCAiY29tcG9uZW50IiwgIl9fIiwgIl9fYyIsICJfX2siLCAib2xkVW5tb3VudCIsICJ1bm1vdW50IiwgImRldGFjaGVkQ2xvbmUiLCAiZGV0YWNoZWRQYXJlbnQiLCAicGFyZW50RG9tIiwgIl9fSCIsICJlZmZlY3QiLCAib2JqIiwgIl9fUCIsICJjaGlsZCIsICJyZW1vdmVPcmlnaW5hbCIsICJvcmlnaW5hbFBhcmVudCIsICJfX3YiLCAiYXBwZW5kQ2hpbGQiLCAiU3VzcGVuc2UiLCAiX191IiwgIl9zdXNwZW5kZXJzIiwgInN1c3BlbmRlZCIsICJfX2EiLCAibGF6eSIsICJsb2FkZXIiLCAicHJvbSIsICJMYXp5IiwgImV4cG9ydHMiLCAiZGVmYXVsdCIsICJlIiwgIlN1c3BlbnNlTGlzdCIsICJfbmV4dCIsICJfbWFwIiwgIl9fUiIsICJwcm9taXNlIiwgInN1c3BlbmRpbmdWTm9kZSIsICJzdXNwZW5kaW5nQ29tcG9uZW50IiwgInB1c2giLCAicmVzb2x2ZSIsICJyZXNvbHZlZCIsICJvblJlc29sdmVkIiwgIm9uU3VzcGVuc2lvbkNvbXBsZXRlIiwgInN1c3BlbmRlZFZOb2RlIiwgIl9fTyIsICJzZXRTdGF0ZSIsICJwb3AiLCAiZm9yY2VVcGRhdGUiLCAiY29tcG9uZW50V2lsbFVubW91bnQiLCAiZG9jdW1lbnQiLCAiZGV0YWNoZWRDb21wb25lbnQiLCAiZmFsbGJhY2siLCAiRnJhZ21lbnQiLCAibGlzdCIsICJub2RlIiwgImRlbGV0ZSIsICJyZXZlYWxPcmRlciIsICJzaXplIiwgIkNvbnRleHRQcm92aWRlciIsICJnZXRDaGlsZENvbnRleHQiLCAiUG9ydGFsIiwgIl90aGlzIiwgImNvbnRhaW5lciIsICJfY29udGFpbmVyIiwgIl90ZW1wIiwgIm5vZGVUeXBlIiwgInBhcmVudE5vZGUiLCAiY2hpbGROb2RlcyIsICJjb250YWlucyIsICJpbnNlcnRCZWZvcmUiLCAiYmVmb3JlIiwgInJlbW92ZUNoaWxkIiwgInNwbGljZSIsICJpbmRleE9mIiwgImNyZWF0ZVBvcnRhbCIsICJlbCIsICJjb250YWluZXJJbmZvIiwgImRlbGVnYXRlZCIsICJnZXQiLCAidW5zdXNwZW5kIiwgIndyYXBwZWRVbnN1c3BlbmQiLCAiTWFwIiwgInJldmVyc2UiLCAic2V0IiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJjb21wb25lbnREaWRNb3VudCIsICJSRUFDVF9FTEVNRU5UX1RZUEUiLCAiQ0FNRUxfUFJPUFMiLCAiT05fQU5JIiwgIkNBTUVMX1JFUExBQ0UiLCAiSVNfRE9NIiwgIm9uQ2hhbmdlSW5wdXRUeXBlIiwgInRlc3QiLCAicGFyZW50IiwgImNhbGxiYWNrIiwgInRleHRDb250ZW50IiwgInByZWFjdFJlbmRlciIsICJoeWRyYXRlIiwgInByZWFjdEh5ZHJhdGUiLCAia2V5IiwgIk9iamVjdCIsICJkZWZpbmVQcm9wZXJ0eSIsICJjb25maWd1cmFibGUiLCAidiIsICJ3cml0YWJsZSIsICJ2YWx1ZSIsICJvbGRFdmVudEhvb2siLCAiZXZlbnQiLCAiZW1wdHkiLCAiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCAiY2FuY2VsQnViYmxlIiwgImlzRGVmYXVsdFByZXZlbnRlZCIsICJkZWZhdWx0UHJldmVudGVkIiwgInBlcnNpc3QiLCAibmF0aXZlRXZlbnQiLCAiY3VycmVudENvbXBvbmVudCIsICJjbGFzc05hbWVEZXNjcmlwdG9yTm9uRW51bWJlcmFibGUiLCAiZW51bWVyYWJsZSIsICJjbGFzcyIsICJvbGRWTm9kZUhvb2siLCAibm9ybWFsaXplZFByb3BzIiwgImlzTm9uRGFzaGVkVHlwZSIsICJsb3dlckNhc2VkIiwgInRvTG93ZXJDYXNlIiwgInJlcGxhY2UiLCAibXVsdGlwbGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJzZWxlY3RlZCIsICJkZWZhdWx0VmFsdWUiLCAiY2xhc3NOYW1lIiwgIm9sZEJlZm9yZVJlbmRlciIsICJfX3IiLCAib2xkRGlmZmVkIiwgImRpZmZlZCIsICJkb20iLCAiX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQiLCAiUmVhY3RDdXJyZW50RGlzcGF0Y2hlciIsICJyZWFkQ29udGV4dCIsICJfX24iLCAidXNlQ2FsbGJhY2siLCAidXNlQ29udGV4dCIsICJ1c2VEZWJ1Z1ZhbHVlIiwgInVzZURlZmVycmVkVmFsdWUiLCAidXNlRWZmZWN0IiwgInVzZUlkIiwgInVzZUltcGVyYXRpdmVIYW5kbGUiLCAidXNlSW5zZXJ0aW9uRWZmZWN0IiwgInVzZUxheW91dEVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVJlZHVjZXIiLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwgInVzZVRyYW5zaXRpb24iLCAiY3JlYXRlRmFjdG9yeSIsICJiaW5kIiwgImlzVmFsaWRFbGVtZW50IiwgImVsZW1lbnQiLCAiaXNGcmFnbWVudCIsICJpc01lbW8iLCAiU3RyaW5nIiwgInN0YXJ0c1dpdGgiLCAiY2xvbmVFbGVtZW50IiwgInByZWFjdENsb25lRWxlbWVudCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsICJmaW5kRE9NTm9kZSIsICJiYXNlIiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgImFyZyIsICJmbHVzaFN5bmMiLCAiU3RyaWN0TW9kZSIsICJzdGFydFRyYW5zaXRpb24iLCAiY2IiLCAidmFsIiwgImlzRWxlbWVudCIsICJzdWJzY3JpYmUiLCAiZ2V0U25hcHNob3QiLCAiX3VzZVN0YXRlIiwgIl9pbnN0YW5jZSIsICJfZ2V0U25hcHNob3QiLCAiZGlkU25hcHNob3RDaGFuZ2UiLCAiaW5zdCIsICJ4IiwgInkiLCAibGF0ZXN0R2V0U25hcHNob3QiLCAicHJldlZhbHVlIiwgIm5leHRWYWx1ZSIsICJpbmRleCIsICJ2ZXJzaW9uIiwgImNyZWF0ZUNvbnRleHQiLCAiY3JlYXRlUmVmIiwgInQiLCAibiIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaSIsICJtZW1vaXplT25lIiwgImlzRXF1YWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiX3R5cGVvZiIsICJvIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl90eXBlb2YiLCAidG9QcmltaXRpdmUiLCAidCIsICJyIiwgImUiLCAiaSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfdHlwZW9mIiwgInRvUHJpbWl0aXZlIiwgInRvUHJvcGVydHlLZXkiLCAidCIsICJpIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInRvUHJvcGVydHlLZXkiLCAiX2RlZmluZVByb3BlcnR5IiwgImUiLCAiciIsICJ0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm93bktleXMiLCAiZSIsICJyIiwgInQiLCAibyIsICJfb2JqZWN0U3ByZWFkMiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiciIsICJsIiwgInQiLCAiZSIsICJuIiwgImkiLCAidSIsICJhIiwgImYiLCAibyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJyIiwgImEiLCAiZSIsICJuIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJyIiwgImEiLCAidCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfbm9uSXRlcmFibGVSZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl9zbGljZWRUb0FycmF5IiwgInIiLCAiZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJyIiwgImUiLCAidCIsICJuIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJlIiwgInQiLCAibyIsICJyIiwgImkiLCAicyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiYSIsICJuIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInRvUHJvcGVydHlLZXkiLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiZSIsICJyIiwgInQiLCAibyIsICJfY3JlYXRlQ2xhc3MiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiX3NldFByb3RvdHlwZU9mIiwgInQiLCAiZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfaW5oZXJpdHMiLCAidCIsICJlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl9nZXRQcm90b3R5cGVPZiIsICJ0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAidCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgImUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiX3R5cGVvZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJ0IiwgImUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiX2NyZWF0ZVN1cGVyIiwgInQiLCAiciIsICJlIiwgIm8iLCAicyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJfaXRlcmFibGVUb0FycmF5IiwgInIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZSIsICJ0IiwgImEiLCAib25DaGFuZ2UiLCAiY3NzIiwgImkiLCAic2l6ZSIsICJub2RlIiwgInN0eWxlcyIsICJ0cmFuc2Zvcm0iLCAiX3JlZiIsICJfcmVmMiIsICJzIiwgImZuIiwgInByZWZpeCIsICJzdHJpbmciLCAiY291bnRlciIsICJsZW5ndGgiLCAiaWNvbiIsICJyIiwgIm8iLCAiYyIsICJ0IiwgImsiLCAib2Zmc2V0IiwgImNvbW1lbnQiLCAib3B0aW9ucyIsICJzdHlsZSIsICJwcmVmaXhlcyIsICJuZXh0IiwgInBvc2l0aW9uIiwgImNvbnRlbnQiLCAicmVwbGFjZSIsICJlbmQiLCAibm9vcCIsICJ5IiwgInBhcnNlIiwgImUiLCAiYmluZEludGVybmFsNCIsICJiIiwgImQiLCAibWFzayIsICJwcm92aWRlcnMiLCAibiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJpIiwgIm4iLCAiZnJvbSIsICJzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInRleHQiLCAieCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhc3NpZ24iLCAidGV4dCIsICJ4IiwgInkiLCAiaSIsICJjaGVja2VyIiwgImlzTm9kZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiZSIsICJvd25LZXlzIiwgIl9vYmplY3RTcHJlYWQyIiwgImkiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90eXBlb2YiLCAib2JqIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJvIiwgIm4iLCAiZmxpcCIsICJzaXplIiwgInN0cmluZyIsICJtYXRjaCIsICJfZXhjbHVkZWQiLCAicyIsICJjb252ZXJ0IiwgImNyZWF0ZUVsZW1lbnQiLCAiUFJPRFVDVElPTiIsICJpY29uIiwgImRlZmF1bHRQcm9wcyIsICJGb250QXdlc29tZUljb24iLCAidHJhbnNmb3JtIiwgImV4cG9ydHMiLCAiZCIsICJiIiwgInAiLCAiYSIsICJCVHJlZSIsICJrIiwgInYiLCAiaSIsICJuZXh0IiwgImN1cnNvciIsICJub2RlIiwgIm4iLCAibWluIiwgIm1heCIsICJyIiwgInQiLCAic2l6ZSIsICJCTm9kZSIsICJsbyIsICJjIiwgIl8iLCAiQk5vZGVJbnRlcm5hbCIsICJsZW5ndGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZiIsICJnIiwgImRlZmluZSIsICJlIiwgInQiLCAibiIsICJyIiwgInMiLCAibyIsICJ1IiwgImEiLCAiaSIsICJsIiwgImdsb2JhbCIsICJQcm9taXNlIiwgInNlbGYiLCAiX3R5cGVvZiIsICJfY2xhc3NDYWxsQ2hlY2siLCAia2V5IiwgImxlbmd0aCIsICJpZGIiLCAib3B0aW9ucyIsICJqIiwgImsiLCAiZm9yYWdlIiwgImN1cnNvciIsICJ2YWx1ZSIsICJlcnIiLCAia2V5cyIsICJkYiIsICJwIiwgInNlcmlhbGl6ZSIsICJlcnJvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJzYW1lVmFsdWUiLCAieCIsICJ5IiwgImluY2x1ZGVzIiwgImlzQXJyYXkiLCAiTG9jYWxGb3JhZ2UiLCAiY29uZmlnIiwgImNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzIiwgIm1ldGhvZE5vdEltcGxlbWVudGVkRmFjdG9yeSIsICJwcm9taXNlIiwgInNldERyaXZlclN1cHBvcnQiLCAic3VwcG9ydGVkRHJpdmVycyIsICJleHBvcnRzIiwgIlF1ZXVlIiwgInJlcXVpcmVfcXVldWUiLCAiZXhwb3J0cyIsICJRdWV1ZSIsICJvIiwgImUiLCAibmV4dCIsICJhIiwgImsiLCAieCIsICJuIiwgInN0cmluZyIsICJmIiwgImQiLCAicDIiLCAibSIsICJ1IiwgInYiLCAib2Zmc2V0IiwgImxlbmd0aCIsICJzIiwgInRva2VuIiwgImkiLCAiYyIsICJuIiwgInAiLCAic3RyaW5nIiwgImZvcm1hdE9mZnNldCIsICJsZW5ndGgiLCAidCIsICJpIiwgInMiLCAiZSIsICJzaW5nbGV0b24iLCAib2Zmc2V0IiwgInMiLCAiciIsICJkZWZhdWx0Wm9uZSIsICJvZmZzZXQiLCAibiIsICJ0IiwgIm9wdGlvbnMiLCAiZSIsICJmIiwgImkiLCAibGVuZ3RoIiwgImZsb29yIiwgInoiLCAibSIsICJmIiwgInIiLCAibSIsICJjdXJzb3IiLCAibmV4dCIsICJzIiwgInJlZ2V4IiwgIm1hdGNoIiwgImkiLCAib2Zmc2V0IiwgIm4iLCAiY29uZmlnIiwgInRleHQiLCAibyIsICJsIiwgInMiLCAiayIsICJmbiIsICJ1IiwgImkiLCAidjIiLCAiSU5WQUxJRCIsICJlbmQiLCAiY29uZmlnIiwgInRleHQiLCAicyIsICJlIiwgIm8iLCAiZCIsICJpIiwgIm5leHQiLCAieCIsICJhIiwgImIiLCAibGVuZ3RoIiwgImN1cnNvciIsICJhIiwgImIiLCAidSIsICJpIiwgIm1pbiIsICJtYXgiLCAiYXBwZW5kIiwgInJlZ2V4IiwgImkiLCAicyIsICJoIiwgIm0iLCAidG9rZW4iLCAidCIsICJ1IiwgImYiLCAiciIsICJrIiwgInAiLCAiZCIsICJpIiwgIklOVkFMSUQiLCAiY2xvbmUiLCAibyIsICJvMiIsICJvMyIsICJvZmZzZXQiLCAiZCIsICJjIiwgInRleHQiLCAib3JkZXJlZFVuaXRzIiwgInUiLCAiZW5kIiwgInJvdW5kIiwgImNvbmZpZyIsICJvcHRpb25zIiwgInYiLCAicSIsICJpIiwgImVtb2ppUmVnZXgiLCAiXyIsICJ0ZXh0IiwgImVuZCIsICJvZmZzZXQiLCAicG9zaXRpb24iLCAiUCIsICJMaXRlcmFscyIsICJmIiwgImUiLCAiaXNOdW1iZXIiLCAiaXNTdHJpbmciLCAiaXNEYXRlIiwgImlzQXJyYXkiLCAieCIsICJmMiIsICJvMiIsICJrMiIsICJ2IiwgIkdyb3VwaW5ncyIsICJzbGljZSIsICJlbmQiLCAiZiIsICJSZXN1bHQiLCAiYSIsICJiIiwgIkZpbHRlcnMiLCAieCIsICJhIiwgImIiLCAiYXRvbSIsICJuZWdhdGVkIiwgIkV4cHJlc3Npb25zIiwgImluZGV4IiwgImZ1bmMiLCAiYSIsICJ2IiwgImsiLCAiaW1wb3J0X2Vtb2ppX3JlZ2V4IiwgIl8iLCAicSIsICJwIiwgImwiLCAiYSIsICJiIiwgImQiLCAidCIsICJ4IiwgImMiLCAiZiIsICJlbW9qaVJlZ2V4IiwgIl8yIiwgIl8zIiwgImNvbWJpbmUiLCAibm9kZSIsICJmIiwgImEiLCAiaSIsICJuZXh0IiwgIm1hdGNoIiwgIm1hdGNoMiIsICJsIiwgInNsaWNlIiwgIm9wdGlvbnMiLCAidm5vZGVJZCIsICJpc1ZhbGlkRWxlbWVudCIsICJyZXJlbmRlclF1ZXVlIiwgInByZXZEZWJvdW5jZSIsICJkZWZlciIsICJkZXB0aFNvcnQiLCAiZXZlbnRDbG9jayIsICJldmVudFByb3h5IiwgImV2ZW50UHJveHlDYXB0dXJlIiwgImkiLCAiRU1QVFlfT0JKIiwgIkVNUFRZX0FSUiIsICJJU19OT05fRElNRU5TSU9OQUwiLCAiaXNBcnJheSIsICJBcnJheSIsICJhc3NpZ24iLCAib2JqIiwgInByb3BzIiwgInJlbW92ZU5vZGUiLCAibm9kZSIsICJwYXJlbnROb2RlIiwgInJlbW92ZUNoaWxkIiwgImNyZWF0ZUVsZW1lbnQiLCAidHlwZSIsICJjaGlsZHJlbiIsICJrZXkiLCAicmVmIiwgIm5vcm1hbGl6ZWRQcm9wcyIsICJhcmd1bWVudHMiLCAibGVuZ3RoIiwgImNhbGwiLCAiZGVmYXVsdFByb3BzIiwgImNyZWF0ZVZOb2RlIiwgIm9yaWdpbmFsIiwgInZub2RlIiwgIl9fayIsICJfXyIsICJfX2IiLCAiX19lIiwgIl9fZCIsICJfX2MiLCAiY29uc3RydWN0b3IiLCAiX192IiwgIl9faSIsICJfX3UiLCAiY3JlYXRlUmVmIiwgImN1cnJlbnQiLCAiRnJhZ21lbnQiLCAiQmFzZUNvbXBvbmVudCIsICJjb250ZXh0IiwgInRoaXMiLCAiZ2V0RG9tU2libGluZyIsICJjaGlsZEluZGV4IiwgInNpYmxpbmciLCAidXBkYXRlUGFyZW50RG9tUG9pbnRlcnMiLCAiY2hpbGQiLCAiYmFzZSIsICJlbnF1ZXVlUmVuZGVyIiwgImMiLCAicHVzaCIsICJwcm9jZXNzIiwgIl9fciIsICJkZWJvdW5jZVJlbmRlcmluZyIsICJyZW5kZXJRdWV1ZUxlbmd0aCIsICJjb21wb25lbnQiLCAibmV3Vk5vZGUiLCAib2xkVk5vZGUiLCAib2xkRG9tIiwgImNvbW1pdFF1ZXVlIiwgInJlZlF1ZXVlIiwgInNvcnQiLCAic2hpZnQiLCAiX19QIiwgImRpZmYiLCAiX19uIiwgIm5hbWVzcGFjZVVSSSIsICJjb21taXRSb290IiwgImRpZmZDaGlsZHJlbiIsICJwYXJlbnREb20iLCAicmVuZGVyUmVzdWx0IiwgIm5ld1BhcmVudFZOb2RlIiwgIm9sZFBhcmVudFZOb2RlIiwgImdsb2JhbENvbnRleHQiLCAibmFtZXNwYWNlIiwgImV4Y2Vzc0RvbUNoaWxkcmVuIiwgImlzSHlkcmF0aW5nIiwgImNoaWxkVk5vZGUiLCAibmV3RG9tIiwgImZpcnN0Q2hpbGREb20iLCAib2xkQ2hpbGRyZW4iLCAibmV3Q2hpbGRyZW5MZW5ndGgiLCAiY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheSIsICJhcHBseVJlZiIsICJpbnNlcnQiLCAibmV4dFNpYmxpbmciLCAic2tld2VkSW5kZXgiLCAibWF0Y2hpbmdJbmRleCIsICJvbGRDaGlsZHJlbkxlbmd0aCIsICJyZW1haW5pbmdPbGRDaGlsZHJlbiIsICJza2V3IiwgIlN0cmluZyIsICJmaW5kTWF0Y2hpbmdJbmRleCIsICJ1bm1vdW50IiwgInBhcmVudFZOb2RlIiwgImNvbnRhaW5zIiwgImluc2VydEJlZm9yZSIsICJub2RlVHlwZSIsICJ0b0NoaWxkQXJyYXkiLCAib3V0IiwgInNvbWUiLCAieCIsICJ5IiwgInNldFN0eWxlIiwgInN0eWxlIiwgInZhbHVlIiwgInNldFByb3BlcnR5IiwgInRlc3QiLCAiZG9tIiwgIm5hbWUiLCAib2xkVmFsdWUiLCAidXNlQ2FwdHVyZSIsICJvIiwgImNzc1RleHQiLCAicmVwbGFjZSIsICJ0b0xvd2VyQ2FzZSIsICJfYXR0YWNoZWQiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgImUiLCAicmVtb3ZlQXR0cmlidXRlIiwgInNldEF0dHJpYnV0ZSIsICJjcmVhdGVFdmVudFByb3h5IiwgImV2ZW50SGFuZGxlciIsICJfZGlzcGF0Y2hlZCIsICJldmVudCIsICJ0bXAiLCAiaXNOZXciLCAib2xkUHJvcHMiLCAib2xkU3RhdGUiLCAic25hcHNob3QiLCAiY2xlYXJQcm9jZXNzaW5nRXhjZXB0aW9uIiwgIm5ld1Byb3BzIiwgImlzQ2xhc3NDb21wb25lbnQiLCAicHJvdmlkZXIiLCAiY29tcG9uZW50Q29udGV4dCIsICJyZW5kZXJIb29rIiwgImNvdW50IiwgIm5ld1R5cGUiLCAib3V0ZXIiLCAicHJvdG90eXBlIiwgInJlbmRlciIsICJjb250ZXh0VHlwZSIsICJfX0UiLCAiZG9SZW5kZXIiLCAic3ViIiwgInN0YXRlIiwgIl9faCIsICJfc2IiLCAiX19zIiwgImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsICJjb21wb25lbnRXaWxsTW91bnQiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsICJzaG91bGRDb21wb25lbnRVcGRhdGUiLCAiY29tcG9uZW50V2lsbFVwZGF0ZSIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiZ2V0Q2hpbGRDb250ZXh0IiwgImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwgIk1PREVfSFlEUkFURSIsICJpbmRleE9mIiwgImRpZmZFbGVtZW50Tm9kZXMiLCAiZGlmZmVkIiwgInJvb3QiLCAiY2IiLCAibmV3SHRtbCIsICJvbGRIdG1sIiwgIm5ld0NoaWxkcmVuIiwgImlucHV0VmFsdWUiLCAiY2hlY2tlZCIsICJsb2NhbE5hbWUiLCAiZG9jdW1lbnQiLCAiY3JlYXRlVGV4dE5vZGUiLCAiY3JlYXRlRWxlbWVudE5TIiwgImlzIiwgIl9fbSIsICJkYXRhIiwgImNoaWxkTm9kZXMiLCAiYXR0cmlidXRlcyIsICJfX2h0bWwiLCAiaW5uZXJIVE1MIiwgImhhc1JlZlVubW91bnQiLCAic2tpcFJlbW92ZSIsICJyIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgInJlcGxhY2VOb2RlIiwgImZpcnN0Q2hpbGQiLCAiaHlkcmF0ZSIsICJjbG9uZUVsZW1lbnQiLCAiY3JlYXRlQ29udGV4dCIsICJkZWZhdWx0VmFsdWUiLCAiY29udGV4dElkIiwgIkNvbnN1bWVyIiwgImNvbnRleHRWYWx1ZSIsICJQcm92aWRlciIsICJzdWJzIiwgImN0eCIsICJTZXQiLCAiX3Byb3BzIiwgImZvckVhY2giLCAiYWRkIiwgIm9sZCIsICJkZWxldGUiLCAiZXJyb3IiLCAiZXJyb3JJbmZvIiwgImN0b3IiLCAiaGFuZGxlZCIsICJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCAic2V0U3RhdGUiLCAiY29tcG9uZW50RGlkQ2F0Y2giLCAidW5kZWZpbmVkIiwgInVwZGF0ZSIsICJjYWxsYmFjayIsICJzIiwgImZvcmNlVXBkYXRlIiwgIlByb21pc2UiLCAidGhlbiIsICJiaW5kIiwgInJlc29sdmUiLCAic2V0VGltZW91dCIsICJhIiwgImIiLCAiY3VycmVudEluZGV4IiwgImN1cnJlbnRDb21wb25lbnQiLCAicHJldmlvdXNDb21wb25lbnQiLCAicHJldlJhZiIsICJjdXJyZW50SG9vayIsICJhZnRlclBhaW50RWZmZWN0cyIsICJvcHRpb25zIiwgIl9vcHRpb25zIiwgIm9sZEJlZm9yZURpZmYiLCAiX19iIiwgIm9sZEJlZm9yZVJlbmRlciIsICJfX3IiLCAib2xkQWZ0ZXJEaWZmIiwgImRpZmZlZCIsICJvbGRDb21taXQiLCAiX19jIiwgIm9sZEJlZm9yZVVubW91bnQiLCAidW5tb3VudCIsICJvbGRSb290IiwgIl9fIiwgImdldEhvb2tTdGF0ZSIsICJpbmRleCIsICJ0eXBlIiwgIl9faCIsICJob29rcyIsICJfX0giLCAibGVuZ3RoIiwgInB1c2giLCAidXNlU3RhdGUiLCAiaW5pdGlhbFN0YXRlIiwgInVzZVJlZHVjZXIiLCAiaW52b2tlT3JSZXR1cm4iLCAicmVkdWNlciIsICJpbml0IiwgImhvb2tTdGF0ZSIsICJfcmVkdWNlciIsICJhY3Rpb24iLCAiY3VycmVudFZhbHVlIiwgIl9fTiIsICJuZXh0VmFsdWUiLCAic2V0U3RhdGUiLCAiX2hhc1NjdUZyb21Ib29rcyIsICJ1cGRhdGVIb29rU3RhdGUiLCAicCIsICJzIiwgImMiLCAic3RhdGVIb29rcyIsICJmaWx0ZXIiLCAieCIsICJldmVyeSIsICJwcmV2U2N1IiwgImNhbGwiLCAidGhpcyIsICJzaG91bGRVcGRhdGUiLCAiZm9yRWFjaCIsICJob29rSXRlbSIsICJwcm9wcyIsICJzaG91bGRDb21wb25lbnRVcGRhdGUiLCAicHJldkNXVSIsICJjb21wb25lbnRXaWxsVXBkYXRlIiwgIl9fZSIsICJ0bXAiLCAidXNlRWZmZWN0IiwgImNhbGxiYWNrIiwgImFyZ3MiLCAic3RhdGUiLCAiX19zIiwgImFyZ3NDaGFuZ2VkIiwgIl9wZW5kaW5nQXJncyIsICJ1c2VMYXlvdXRFZmZlY3QiLCAidXNlUmVmIiwgImluaXRpYWxWYWx1ZSIsICJ1c2VNZW1vIiwgImN1cnJlbnQiLCAidXNlSW1wZXJhdGl2ZUhhbmRsZSIsICJyZWYiLCAiY3JlYXRlSGFuZGxlIiwgImNvbmNhdCIsICJmYWN0b3J5IiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRleHQiLCAiY29udGV4dCIsICJwcm92aWRlciIsICJzdWIiLCAidmFsdWUiLCAidXNlRGVidWdWYWx1ZSIsICJmb3JtYXR0ZXIiLCAibiIsICJ1c2VFcnJvckJvdW5kYXJ5IiwgImNiIiwgImVyclN0YXRlIiwgImNvbXBvbmVudERpZENhdGNoIiwgImVyciIsICJlcnJvckluZm8iLCAidW5kZWZpbmVkIiwgInVzZUlkIiwgInJvb3QiLCAiX192IiwgIl9fbSIsICJtYXNrIiwgImZsdXNoQWZ0ZXJQYWludEVmZmVjdHMiLCAiY29tcG9uZW50IiwgInNoaWZ0IiwgIl9fUCIsICJpbnZva2VDbGVhbnVwIiwgImludm9rZUVmZmVjdCIsICJlIiwgInZub2RlIiwgInBhcmVudERvbSIsICJfX2siLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgImFmdGVyTmV4dEZyYW1lIiwgImNvbW1pdFF1ZXVlIiwgInNvbWUiLCAiaGFzRXJyb3JlZCIsICJIQVNfUkFGIiwgInJhZiIsICJkb25lIiwgImNsZWFyVGltZW91dCIsICJ0aW1lb3V0IiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgInNldFRpbWVvdXQiLCAiaG9vayIsICJjb21wIiwgImNsZWFudXAiLCAib2xkQXJncyIsICJuZXdBcmdzIiwgImFyZyIsICJmIiwgInNoYWxsb3dEaWZmZXJzIiwgImEiLCAiYiIsICJpIiwgIlB1cmVDb21wb25lbnQiLCAicCIsICJjIiwgInRoaXMiLCAicHJvcHMiLCAiY29udGV4dCIsICJtZW1vIiwgImNvbXBhcmVyIiwgInNob3VsZFVwZGF0ZSIsICJuZXh0UHJvcHMiLCAicmVmIiwgInVwZGF0ZVJlZiIsICJjYWxsIiwgImN1cnJlbnQiLCAiTWVtb2VkIiwgInNob3VsZENvbXBvbmVudFVwZGF0ZSIsICJjcmVhdGVFbGVtZW50IiwgImRpc3BsYXlOYW1lIiwgIm5hbWUiLCAicHJvdG90eXBlIiwgImlzUmVhY3RDb21wb25lbnQiLCAiX19mIiwgIkNvbXBvbmVudCIsICJpc1B1cmVSZWFjdENvbXBvbmVudCIsICJzdGF0ZSIsICJvbGREaWZmSG9vayIsICJvcHRpb25zIiwgIl9fYiIsICJ2bm9kZSIsICJ0eXBlIiwgIlJFQUNUX0ZPUldBUkRfU1lNQk9MIiwgIlN5bWJvbCIsICJmb3IiLCAiZm9yd2FyZFJlZiIsICJmbiIsICJGb3J3YXJkZWQiLCAicmVzdWx0IiwgIiQkdHlwZW9mIiwgInJlbmRlciIsICJtYXBGbiIsICJjaGlsZHJlbiIsICJ0b0NoaWxkQXJyYXkiLCAibWFwIiwgIkNoaWxkcmVuIiwgImZvckVhY2giLCAiY291bnQiLCAibGVuZ3RoIiwgIm9ubHkiLCAibm9ybWFsaXplZCIsICJ0b0FycmF5IiwgIm9sZENhdGNoRXJyb3IiLCAiX19lIiwgImVycm9yIiwgIm5ld1ZOb2RlIiwgIm9sZFZOb2RlIiwgImVycm9ySW5mbyIsICJ0aGVuIiwgImNvbXBvbmVudCIsICJfXyIsICJfX2MiLCAiX19rIiwgIm9sZFVubW91bnQiLCAidW5tb3VudCIsICJkZXRhY2hlZENsb25lIiwgImRldGFjaGVkUGFyZW50IiwgInBhcmVudERvbSIsICJfX0giLCAiZWZmZWN0IiwgIm9iaiIsICJfX1AiLCAiY2hpbGQiLCAicmVtb3ZlT3JpZ2luYWwiLCAib3JpZ2luYWxQYXJlbnQiLCAiX192IiwgImFwcGVuZENoaWxkIiwgIlN1c3BlbnNlIiwgIl9fdSIsICJfc3VzcGVuZGVycyIsICJzdXNwZW5kZWQiLCAiX19hIiwgImxhenkiLCAibG9hZGVyIiwgInByb20iLCAiTGF6eSIsICJleHBvcnRzIiwgImRlZmF1bHQiLCAiZSIsICJTdXNwZW5zZUxpc3QiLCAiX25leHQiLCAiX21hcCIsICJfX1IiLCAicHJvbWlzZSIsICJzdXNwZW5kaW5nVk5vZGUiLCAic3VzcGVuZGluZ0NvbXBvbmVudCIsICJwdXNoIiwgInJlc29sdmUiLCAicmVzb2x2ZWQiLCAib25SZXNvbHZlZCIsICJvblN1c3BlbnNpb25Db21wbGV0ZSIsICJzdXNwZW5kZWRWTm9kZSIsICJfX08iLCAic2V0U3RhdGUiLCAicG9wIiwgImZvcmNlVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgImRvY3VtZW50IiwgImRldGFjaGVkQ29tcG9uZW50IiwgImZhbGxiYWNrIiwgIkZyYWdtZW50IiwgImxpc3QiLCAibm9kZSIsICJkZWxldGUiLCAicmV2ZWFsT3JkZXIiLCAic2l6ZSIsICJDb250ZXh0UHJvdmlkZXIiLCAiZ2V0Q2hpbGRDb250ZXh0IiwgIlBvcnRhbCIsICJfdGhpcyIsICJjb250YWluZXIiLCAiX2NvbnRhaW5lciIsICJfdGVtcCIsICJub2RlVHlwZSIsICJwYXJlbnROb2RlIiwgImNoaWxkTm9kZXMiLCAiY29udGFpbnMiLCAiaW5zZXJ0QmVmb3JlIiwgImJlZm9yZSIsICJyZW1vdmVDaGlsZCIsICJzcGxpY2UiLCAiaW5kZXhPZiIsICJjcmVhdGVQb3J0YWwiLCAiZWwiLCAiY29udGFpbmVySW5mbyIsICJkZWxlZ2F0ZWQiLCAiZ2V0IiwgInVuc3VzcGVuZCIsICJ3cmFwcGVkVW5zdXNwZW5kIiwgIk1hcCIsICJyZXZlcnNlIiwgInNldCIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiUkVBQ1RfRUxFTUVOVF9UWVBFIiwgIkNBTUVMX1BST1BTIiwgIk9OX0FOSSIsICJDQU1FTF9SRVBMQUNFIiwgIklTX0RPTSIsICJvbkNoYW5nZUlucHV0VHlwZSIsICJ0ZXN0IiwgInBhcmVudCIsICJjYWxsYmFjayIsICJ0ZXh0Q29udGVudCIsICJwcmVhY3RSZW5kZXIiLCAiaHlkcmF0ZSIsICJwcmVhY3RIeWRyYXRlIiwgImtleSIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgInYiLCAid3JpdGFibGUiLCAidmFsdWUiLCAib2xkRXZlbnRIb29rIiwgImV2ZW50IiwgImVtcHR5IiwgImlzUHJvcGFnYXRpb25TdG9wcGVkIiwgImNhbmNlbEJ1YmJsZSIsICJpc0RlZmF1bHRQcmV2ZW50ZWQiLCAiZGVmYXVsdFByZXZlbnRlZCIsICJwZXJzaXN0IiwgIm5hdGl2ZUV2ZW50IiwgImN1cnJlbnRDb21wb25lbnQiLCAiY2xhc3NOYW1lRGVzY3JpcHRvck5vbkVudW1iZXJhYmxlIiwgImVudW1lcmFibGUiLCAiY2xhc3MiLCAib2xkVk5vZGVIb29rIiwgIm5vcm1hbGl6ZWRQcm9wcyIsICJpc05vbkRhc2hlZFR5cGUiLCAibG93ZXJDYXNlZCIsICJ0b0xvd2VyQ2FzZSIsICJyZXBsYWNlIiwgIm11bHRpcGxlIiwgIkFycmF5IiwgImlzQXJyYXkiLCAic2VsZWN0ZWQiLCAiZGVmYXVsdFZhbHVlIiwgImNsYXNzTmFtZSIsICJvbGRCZWZvcmVSZW5kZXIiLCAiX19yIiwgIm9sZERpZmZlZCIsICJkaWZmZWQiLCAiZG9tIiwgIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwgIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCAicmVhZENvbnRleHQiLCAiX19uIiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRleHQiLCAidXNlRGVidWdWYWx1ZSIsICJ1c2VEZWZlcnJlZFZhbHVlIiwgInVzZUVmZmVjdCIsICJ1c2VJZCIsICJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwgInVzZUluc2VydGlvbkVmZmVjdCIsICJ1c2VMYXlvdXRFZmZlY3QiLCAidXNlTWVtbyIsICJ1c2VSZWR1Y2VyIiwgInVzZVJlZiIsICJ1c2VTdGF0ZSIsICJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsICJ1c2VUcmFuc2l0aW9uIiwgImNyZWF0ZUZhY3RvcnkiLCAidHlwZSIsICJjcmVhdGVFbGVtZW50IiwgImJpbmQiLCAiaXNWYWxpZEVsZW1lbnQiLCAiZWxlbWVudCIsICIkJHR5cGVvZiIsICJSRUFDVF9FTEVNRU5UX1RZUEUiLCAiaXNGcmFnbWVudCIsICJGcmFnbWVudCIsICJpc01lbW8iLCAiZGlzcGxheU5hbWUiLCAiU3RyaW5nIiwgInN0YXJ0c1dpdGgiLCAiY2xvbmVFbGVtZW50IiwgInByZWFjdENsb25lRWxlbWVudCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsICJjb250YWluZXIiLCAiX19rIiwgInByZWFjdFJlbmRlciIsICJmaW5kRE9NTm9kZSIsICJjb21wb25lbnQiLCAiYmFzZSIsICJub2RlVHlwZSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJjYWxsYmFjayIsICJhcmciLCAiZmx1c2hTeW5jIiwgIlN0cmljdE1vZGUiLCAic3RhcnRUcmFuc2l0aW9uIiwgImNiIiwgInVzZURlZmVycmVkVmFsdWUiLCAidmFsIiwgInVzZVRyYW5zaXRpb24iLCAidXNlSW5zZXJ0aW9uRWZmZWN0IiwgInVzZUxheW91dEVmZmVjdCIsICJpc0VsZW1lbnQiLCAidXNlU3luY0V4dGVybmFsU3RvcmUiLCAic3Vic2NyaWJlIiwgImdldFNuYXBzaG90IiwgInZhbHVlIiwgIl91c2VTdGF0ZSIsICJ1c2VTdGF0ZSIsICJfaW5zdGFuY2UiLCAiX18iLCAiX2dldFNuYXBzaG90IiwgImZvcmNlVXBkYXRlIiwgImRpZFNuYXBzaG90Q2hhbmdlIiwgInVzZUVmZmVjdCIsICJpbnN0IiwgIngiLCAieSIsICJsYXRlc3RHZXRTbmFwc2hvdCIsICJwcmV2VmFsdWUiLCAibmV4dFZhbHVlIiwgImVycm9yIiwgImluZGV4IiwgInVzZUlkIiwgInVzZVJlZHVjZXIiLCAidXNlUmVmIiwgInVzZUltcGVyYXRpdmVIYW5kbGUiLCAidXNlTWVtbyIsICJ1c2VDYWxsYmFjayIsICJ1c2VDb250ZXh0IiwgInVzZURlYnVnVmFsdWUiLCAidmVyc2lvbiIsICJDaGlsZHJlbiIsICJyZW5kZXIiLCAiaHlkcmF0ZSIsICJjcmVhdGVQb3J0YWwiLCAiY3JlYXRlQ29udGV4dCIsICJjcmVhdGVSZWYiLCAiQ29tcG9uZW50IiwgIlB1cmVDb21wb25lbnQiLCAibWVtbyIsICJmb3J3YXJkUmVmIiwgIlN1c3BlbnNlIiwgIlN1c3BlbnNlTGlzdCIsICJsYXp5IiwgIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwgInZub2RlSWQiLCAiaXNBcnJheSIsICJBcnJheSIsICJjcmVhdGVWTm9kZSIsICJ0eXBlIiwgInByb3BzIiwgImtleSIsICJpc1N0YXRpY0NoaWxkcmVuIiwgIl9fc291cmNlIiwgIl9fc2VsZiIsICJyZWYiLCAiaSIsICJub3JtYWxpemVkUHJvcHMiLCAidm5vZGUiLCAiX19rIiwgIl9fIiwgIl9fYiIsICJfX2UiLCAiX19kIiwgIl9fYyIsICJjb25zdHJ1Y3RvciIsICJfX3YiLCAiX19pIiwgIl9fdSIsICJkZWZhdWx0UHJvcHMiLCAib3B0aW9ucyIsICJpbmxpbmUiLCAieCIsICJBIiwgIlQiLCAieSIsICJ1IiwgImVuZCIsICJxIiwgInAiLCAic3RhdGUiLCAidSIsICJ4IiwgIlQiLCAicSIsICJDIiwgImlubGluZSIsICJBIiwgInkiLCAidmFsdWUiLCAiYiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiXyIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaCIsICJUIiwgInkiLCAiQSIsICJlIiwgIkEiLCAieSIsICJxIiwgIngiLCAiaCIsICJ1IiwgImgiLCAieSIsICJlcnJvciIsICJ4IiwgImFwaSIsICJ1IiwgIlQiLCAic3R5bGUiLCAidSIsICJpbXBvcnRfb2JzaWRpYW4iLCAidSIsICJkaXNhYmxlZCIsICJvbkNoYW5nZSIsICJxIiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJlIiwgImljb24iLCAiYyIsICJGaWVsZGJlYXJpbmdzIiwgIkV4dHJhY3RvcnMiLCAia2V5IiwgImZyb250bWF0dGVyIiwgIlAiLCAiaW1wb3J0X2Vtb2ppX3JlZ2V4IiwgIkpzb25Db252ZXJzaW9uIiwgImpzb24iLCAidiIsICJsaW5lIiwgImNoYXIiLCAibGluZSIsICJhIiwgImIiLCAiaSIsICJlbW9qaVJlZ2V4IiwgImxpbmUiLCAicmVnZXgiLCAibWF0Y2giLCAiZiIsICJwcmVmaXgiLCAiZiIsICJsIiwgImkiLCAibGluZSIsICJ4IiwgIm8iLCAidCIsICJyIiwgImUiLCAiaSIsICJ0IiwgImkiLCAiZSIsICJyIiwgInQiLCAiZSIsICJyIiwgInQiLCAibyIsICJyIiwgInIiLCAibCIsICJ0IiwgImUiLCAibiIsICJpIiwgInUiLCAiYSIsICJmIiwgIm8iLCAiciIsICJhIiwgImUiLCAibiIsICJyIiwgImEiLCAidCIsICJyIiwgImUiLCAiciIsICJlIiwgInQiLCAibiIsICJlIiwgInQiLCAibyIsICJyIiwgImkiLCAicyIsICJfcmVmIiwgImgiLCAib25DaGFuZ2UiLCAicSIsICJ2YWx1ZSIsICJuIiwgImUiLCAidCIsICJyIiwgImEiLCAibiIsICJlIiwgInIiLCAidCIsICJvIiwgInQiLCAiZSIsICJ0IiwgImUiLCAidCIsICJ0IiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiZSIsICJ0IiwgImUiLCAidCIsICJyIiwgImUiLCAibyIsICJzIiwgInIiLCAiciIsICJyIiwgImkiLCAib3B0aW9ucyIsICJTdHlsZVNoZWV0IiwgImUiLCAibGVuZ3RoIiwgIm1hdGNoIiwgImJlZ2luIiwgImVuZCIsICJsZW5ndGgiLCAiYmVnaW4iLCAiZW5kIiwgIndoaXRlc3BhY2UiLCAicGFyc2UiLCAib2Zmc2V0IiwgImxlbmd0aCIsICJjaGFyYWN0ZXIiLCAiY2hhcmFjdGVycyIsICJ3aGl0ZXNwYWNlIiwgInNpemUiLCAiaSIsICJqIiwgImsiLCAieCIsICJ5IiwgInoiLCAibGVuZ3RoIiwgImkiLCAibGVuZ3RoIiwgImkiLCAid2Vha01lbW9pemUiLCAiZm4iLCAiaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nIiwgImJlZ2luIiwgImNoYXJhY3RlciIsICJ0b1J1bGVzIiwgImdldFJ1bGVzIiwgImNvbXBhdCIsICJpIiwgImsiLCAiaiIsICJyZW1vdmVMYWJlbCIsICJsZW5ndGgiLCAicHJlZml4ZXIiLCAibWF0Y2giLCAiY3JlYXRlQ2FjaGUiLCAib3B0aW9ucyIsICJub2RlIiwgInN0eWxpcyIsICJzdHlsZXMiLCAiX3N0eWxpcyIsICJfaW5zZXJ0IiwgImlzQnJvd3NlciIsICJjbGFzc05hbWVzIiwgInJlZ2lzdGVyU3R5bGVzIiwgImluc2VydFN0eWxlcyIsICJoIiwgImsiLCAiaSIsICJpc0RldmVsb3BtZW50IiwgImlzQ3VzdG9tUHJvcGVydHkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInByb2Nlc3NTdHlsZVZhbHVlIiwgIm1hdGNoIiwgInAyIiwgImtleWZyYW1lcyIsICJuZXh0IiwgInN0eWxlcyIsICJzdHJpbmciLCAiaSIsICJpc0Jyb3dzZXIiLCAic3luY0ZhbGxiYWNrIiwgImlzRGV2ZWxvcG1lbnQiLCAiaXNCcm93c2VyIiwgIndpdGhFbW90aW9uQ2FjaGUiLCAidyIsICJ4IiwgImlzQnJvd3NlciIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiaXNCcm93c2VyIiwgIl9yZWYyIiwgIm5leHQiLCAieCIsICJpc0RldmVsb3BtZW50IiwgImltcG9ydF9leHRlbmRzIiwgImpzeCIsICJpIiwgImtleWZyYW1lcyIsICJlIiwgInQiLCAidiIsICJ4IiwgInkiLCAibm9kZSIsICJfcmVmIiwgImdldENvbXB1dGVkU3R5bGUiLCAibm9kZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgIm5vZGUiLCAiY3NzIiwgImdldENvbXB1dGVkU3R5bGUiLCAiJCIsICJ4IiwgInkiLCAib3B0aW9ucyIsICJlIiwgIl9yZWYiLCAibm9vcCIsICJwcmVmaXgiLCAiaSIsICJjbGVhblZhbHVlIiwgImNsZWFuQ29tbW9uUHJvcHMiLCAiZ2V0U3R5bGVQcm9wcyIsICJ0IiwgImIiLCAiYyIsICJkIiwgImUiLCAidyIsICJyZW1vdmVQcm9wcyIsICJfcmVmIiwgIl9yZWYyIiwgImNvbnRyb2xIZWlnaHQiLCAiY29lcmNlUGxhY2VtZW50IiwgInAiLCAibWVudUNTUyIsICJfb2JqZWN0U3ByZWFkMiIsICJib3JkZXJSYWRpdXMiLCAic3BhY2luZyIsICJjb2xvcnMiLCAiTWVudVBsYWNlciIsICJ4IiwgIkEiLCAiaCIsICJ1c2VMYXlvdXRFZmZlY3QiLCAiTWVudSIsICJtZW51TGlzdENTUyIsICJiYXNlVW5pdCIsICJNZW51TGlzdCIsICJub3RpY2VDU1MiLCAiTm9PcHRpb25zTWVzc2FnZSIsICJMb2FkaW5nTWVzc2FnZSIsICJtZW51UG9ydGFsQ1NTIiwgIm9mZnNldCIsICJwb3NpdGlvbiIsICJNZW51UG9ydGFsIiwgIlQiLCAicSIsICJQIiwgImNvbnRhaW5lckNTUyIsICJTZWxlY3RDb250YWluZXIiLCAidmFsdWVDb250YWluZXJDU1MiLCAiVmFsdWVDb250YWluZXIiLCAiaW5kaWNhdG9yc0NvbnRhaW5lckNTUyIsICJJbmRpY2F0b3JzQ29udGFpbmVyIiwgIlN2ZyIsICJzaXplIiwgIkNyb3NzSWNvbiIsICJEb3duQ2hldnJvbiIsICJiYXNlQ1NTIiwgIkRyb3Bkb3duSW5kaWNhdG9yIiwgIkNsZWFySW5kaWNhdG9yIiwgImluZGljYXRvclNlcGFyYXRvckNTUyIsICJJbmRpY2F0b3JTZXBhcmF0b3IiLCAibG9hZGluZ0luZGljYXRvckNTUyIsICJMb2FkaW5nRG90IiwgIkxvYWRpbmdJbmRpY2F0b3IiLCAiY3NzIiwgIkNvbnRyb2wiLCAiZ3JvdXBDU1MiLCAiR3JvdXAiLCAiZ3JvdXBIZWFkaW5nQ1NTIiwgIkdyb3VwSGVhZGluZyIsICJfZXhjbHVkZWQiLCAiaW5wdXRDU1MiLCAiaW5wdXRTdHlsZSIsICJJbnB1dCIsICJtdWx0aVZhbHVlQ1NTIiwgIm11bHRpVmFsdWVMYWJlbENTUyIsICJtdWx0aVZhbHVlUmVtb3ZlQ1NTIiwgIk11bHRpVmFsdWVHZW5lcmljIiwgIk11bHRpVmFsdWUiLCAiY29tcG9uZW50cyIsICJvcHRpb25DU1MiLCAiT3B0aW9uIiwgInBsYWNlaG9sZGVyQ1NTIiwgIlBsYWNlaG9sZGVyIiwgIlNpbmdsZVZhbHVlIiwgImRlZmF1bHRDb21wb25lbnRzIiwgIkExMXlUZXh0IiwgIm9wdGlvbnMiLCAiaXNBcHBsZURldmljZSIsICJnZXRBcnJheUluZGV4IiwgImRpc2FibGVkIiwgIkxpdmVSZWdpb24iLCAiZ2V0T3B0aW9uTGFiZWwiLCAiaXNPcHRpb25EaXNhYmxlZCIsICJzY3JlZW5SZWFkZXJTdGF0dXMiLCAiVCIsICJhc09wdGlvbiIsICJkIiwgImkiLCAiaiIsICJzdHJpcERpYWNyaXRpY3MiLCAibWF0Y2giLCAibWVtb2l6ZU9uZSIsICJ0cmltU3RyaW5nIiwgImRlZmF1bHRTdHJpbmdpZnkiLCAiY3JlYXRlRmlsdGVyIiwgImNvbmZpZyIsICJzdHJpbmdpZnkiLCAidHJpbSIsICJfZXhjbHVkZWQiLCAiX3JlZiIsICJjYW5jZWxTY3JvbGwiLCAiQSIsICJxIiwgInkiLCAiZSIsICJibHVyU2VsZWN0SW5wdXQiLCAidGFyZ2V0UmVmIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYyIiwgIlJlcXVpcmVkSW5wdXQiLCAib25Gb2N1cyIsICJvbkNoYW5nZSIsICJmb3JtYXRHcm91cExhYmVsIiwgImNzcyIsICJfcmVmIiwgImdldE9wdGlvbkxhYmVsIiwgImdldE9wdGlvblZhbHVlIiwgImNhdGVnb3JpemVkT3B0aW9uIiwgIm9wdGlvbnMiLCAiZ2V0Rm9jdXNlZE9wdGlvbklkIiwgImkiLCAic2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyIsICJTZWxlY3QiLCAib25DaGFuZ2UiLCAiY3VzdG9tIiwgIl9yZWYyIiwgImUiLCAiaXNDbGVhcmFibGUiLCAiaXNPcHRpb25EaXNhYmxlZCIsICJmb3JtYXRHcm91cExhYmVsIiwgIklucHV0IiwgIk11bHRpVmFsdWUiLCAiTXVsdGlWYWx1ZUNvbnRhaW5lciIsICJNdWx0aVZhbHVlTGFiZWwiLCAiTXVsdGlWYWx1ZVJlbW92ZSIsICJTaW5nbGVWYWx1ZSIsICJQbGFjZWhvbGRlciIsICJDbGVhckluZGljYXRvciIsICJMb2FkaW5nSW5kaWNhdG9yIiwgIkRyb3Bkb3duSW5kaWNhdG9yIiwgIkluZGljYXRvclNlcGFyYXRvciIsICJHcm91cCIsICJHcm91cEhlYWRpbmciLCAiTWVudSIsICJNZW51TGlzdCIsICJNZW51UG9ydGFsIiwgIkxvYWRpbmdNZXNzYWdlIiwgIk5vT3B0aW9uc01lc3NhZ2UiLCAiT3B0aW9uIiwgImxvYWRpbmdNZXNzYWdlIiwgIm5vT3B0aW9uc01lc3NhZ2UiLCAicmVuZGVyIiwgImRlbGltaXRlciIsICJDb250cm9sIiwgIkluZGljYXRvcnNDb250YWluZXIiLCAiU2VsZWN0Q29udGFpbmVyIiwgIlZhbHVlQ29udGFpbmVyIiwgImltcG9ydF9vYmplY3RTcHJlYWQyIiwgImltcG9ydF9zbGljZWRUb0FycmF5IiwgImltcG9ydF9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJpbXBvcnRfY2xhc3NDYWxsQ2hlY2siLCAiaW1wb3J0X2NyZWF0ZUNsYXNzIiwgImltcG9ydF9pbmhlcml0cyIsICJpbXBvcnRfY3JlYXRlU3VwZXIiLCAiaW1wb3J0X3RvQ29uc3VtYWJsZUFycmF5IiwgImltcG9ydF90eXBlb2YiLCAiaW1wb3J0X3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJpbXBvcnRfZGVmaW5lUHJvcGVydHkiLCAiaW1wb3J0X3VzZV9pc29tb3JwaGljX2xheW91dF9lZmZlY3QiLCAidyIsICJvbkNoYW5nZSIsICJ1IiwgIkEiLCAieSIsICJlIiwgInUiLCAiY29uZmlnIiwgIlQiLCAiciIsICJpIiwgIl9hIiwgInUiLCAidGV4dCIsICJ0cmltIiwgIm1hdGNoIiwgImwiLCAieCIsICJ0IiwgIllhbWxDb252ZXJzaW9uIiwgImxpbmUiLCAib25DaGFuZ2UiLCAieCIsICJxIiwgInRleHQiLCAiaW5pdGlhbCIsICJUIiwgInAiLCAicyIsICJBIiwgInUiLCAieSIsICJjb25maWciLCAib25DaGFuZ2UiLCAieCIsICJvIiwgInYiLCAiZSIsICJ0ZXh0IiwgImlubGluZSIsICJoIiwgIngiLCAidSIsICJ1IiwgIlQiLCAieCIsICJhIiwgImgiLCAiY29tcGxldGVkUmVmIiwgIkEiLCAieSIsICJjIiwgImUiLCAiZiIsICJfYSIsICJ2IiwgIlQiLCAidSIsICJpIiwgInAiLCAiaCIsICJxIiwgInBhZ2UiLCAieCIsICJtaW4iLCAibWF4IiwgIl8iLCAiYSIsICJiIiwgIkEiLCAiVCIsICJ1IiwgImNvbHVtbiIsICJjb25maWciLCAieCIsICJ2IiwgInIiLCAiZSIsICJpY29uIiwgImljb24iLCAidSIsICJUIiwgInUiLCAiZiIsICJyIiwgImVuZCIsICJlIiwgInMiLCAibCIsICJjb3B5IiwgImEiLCAiYiIsICJ2IiwgIngiLCAiaSIsICJuZXh0IiwgIkRhdGFBcnJheSIsICJmcm9tIiwgIkNvZXJjZSIsICJzdHJpbmciLCAiZGVmZXJyZWQiLCAiYiIsICJsYW5ndWFnZSIsICJsaW5lIiwgInUiLCAiYiIsICJpbmxpbmUiLCAidGV4dCIsICJoIiwgImUiLCAibWluIiwgIm1heCIsICJvcHRpb25zIiwgIm9uQ2hhbmdlIiwgInEiLCAieCIsICJUIiwgImEiLCAibiIsICJUcmVlVXRpbHMiLCAibm9kZSIsICJuIiwgImwiLCAiZW5kIiwgInNsaWNlIiwgImluaXRpYWwiLCAiYSIsICJiIiwgInQiLCAiciIsICJxIiwgImsiLCAiVCIsICJwIiwgImNvbHVtbiIsICJ4IiwgInUiLCAiY29uZmlnIiwgImkiLCAidiIsICJ5IiwgImUiLCAiQSIsICJDb250ZXh0IiwgInMiLCAiX2EiLCAiYXBpIiwgImgiLCAicSIsICJwIiwgIlQiLCAieSIsICJ4IiwgIkEiLCAiaW5saW5lIiwgInUiLCAiZW5kIiwgImUiLCAicHJvY2VzcyIsICJQYXJzaW1tb24iLCAiZSIsICJpbXBvcnRfb2JzaWRpYW4iLCAicHJlZml4IiwgIkJUcmVlIiwgImEiLCAiYiIsICJhIiwgImIiLCAiYyIsICJ4IiwgImMiLCAic2VsZiIsICJrIiwgInAiLCAiRnVuY3Rpb25zIiwgIkRlZmF1bHRGdW5jdGlvbnMiLCAiXyIsICJhIiwgInQiLCAiZCIsICJlIiwgIl9uIiwgImwiLCAibGluayIsICJwYXJzZWREYXRlIiwgImYiLCAibWF0Y2giLCAiZGF0ZSIsICJuIiwgImIiLCAidiIsICJvYmplY3QiLCAibGlzdCIsICJzIiwgInN0ciIsICJzdHJpbmciLCAiZW5kIiwgImxlbmd0aCIsICJmdW5jdGlvbnMiLCAicyIsICJhIiwgImIiLCAiYXJncyIsICJyZXNvbHZlZCIsICJlIiwgIlZhcmlhYmxlcyIsICJmb2xkZWQiLCAiZiIsICJGaWx0ZXJUcmVlcyIsICJmaWx0ZXIiLCAiYSIsICJpZCIsICJsb2NhbGZvcmFnZSIsICJrIiwgIldvcmtlciIsICJpbXBvcnRfb2JzaWRpYW4iLCAibm93IiwgIldvcmtlciIsICJpbXBvcnRfb2JzaWRpYW4iLCAic2l6ZSIsICJpbXBvcnRfcXVldWUiLCAiaW1wb3J0X29ic2lkaWFuIiwgIngiLCAicyIsICJsIiwgImYiLCAiYSIsICJyZXN1bHQiLCAic3RvcmUiLCAibmV4dCIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgIngiLCAiVCIsICJoIiwgInEiLCAidSIsICJlIiwgInMiLCAidiIsICJvbkNoYW5nZSIsICJvcHRpb25zIiwgImYiLCAiYXBpIiwgInUiLCAiY29uZmlnIiwgInRleHQiLCAiZSJdCn0K + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/datacore/styles.css b/.obsidian/plugins/datacore/styles.css index c7c5c2e..5b9423b 100644 --- a/.obsidian/plugins/datacore/styles.css +++ b/.obsidian/plugins/datacore/styles.css @@ -264,37 +264,18 @@ border-radius: var(--tag-radius); padding: var(--tag-padding-y) var(--tag-padding-x); } -.datacore-group-holder { - display: grid; - gap: 0.5em; - grid-template-rows: auto; - overflow-x: scroll; -} -.datacore-group { - display: flex; - flex-direction: column; -} -.datacore-group-content { - display: flex; - flex-grow: 1; - flex-direction: column; -} -.datacore-group-content > *:not(.is-collapsed) { - flex-grow: 1; -} -.datacore-group-content > h1 { - flex-grow: 0 !important; - flex-shrink: 1; -} textarea.datacore-editable { resize: vertical; } -/* src/styles/lists.css */ +/* src/api/ui/views/lists.css */ .datacore-list-item-content { display: inline-flex; justify-content: space-between; - width: -webkit-fill-available; + width: 100%; +} +.datacore-list-item-content > :first-child { + flex-grow: 1; } :is(ul, ol) li:not(:first-of-type) p:first-of-type { margin-block-start: unset !important; @@ -515,4 +496,4 @@ button.dc-paging-control-page[disabled]:hover { text-align: right; padding: 0; } -/*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FwaS91aS9lbWJlZC5jc3MiLCAiLi4vLi4vc3JjL3VpL2Vycm9ycy5jc3MiLCAiLi4vLi4vc3JjL2FwaS91aS9sYXlvdXQuY3NzIiwgIi4uLy4uL3NyYy9hcGkvdWkvYmFzaWNzLmNzcyIsICIuLi8uLi9zcmMvdWkvZmllbGRzL2ZpZWxkcy5jc3MiLCAiLi4vLi4vc3JjL3N0eWxlcy9saXN0cy5jc3MiLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9wYWdpbmcuY3NzIiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvdGFibGUuY3NzIiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvY2FsbG91dC5jc3MiLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9jYXJkcy5jc3MiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi5kYXRhY29yZS1zcGFuLWVtYmVkIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBwYWRkaW5nOiAxcHggOHB4IDFweCA4cHg7XG4gICAgbWFyZ2luOiA0cHggMHB4IDRweCAwcHg7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYXNlLTI1KTtcbn1cblxuLmRhdGFjb3JlLWVtYmVkLXNvdXJjZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNHB4O1xuICAgIHJpZ2h0OiA0cHg7XG4gICAgcGFkZGluZy1sZWZ0OiA0cHg7XG4gICAgcGFkZGluZy1yaWdodDogNHB4O1xuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnktYWx0KTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1mYWludCk7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc21hbGxlc3QpO1xufVxuIiwgIi5kYXRhY29yZS1lcnJvci1yZXRyeSB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyoqIEVycm9yIEJveGVzLiAqL1xuXG4uZGF0YWNvcmUtZXJyb3ItYm94IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXI6IDRweCBkYXNoZWQgdmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpO1xufVxuXG4uZGF0YWNvcmUtZXJyb3ItdGl0bGUge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmRhdGFjb3JlLWVycm9yLW1lc3NhZ2Uge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qKiBMb2FkaW5nIHZpZXdzIHdoaWxlIHRoZSBpbmRleCBpcyBpbml0aWFsaXppbmcuICovXG5cbi5kYXRhY29yZS1sb2FkaW5nLWJvdW5kYXJ5IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXI6IDRweCBkYXNoZWQgdmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpO1xufVxuXG4uZGF0YWNvcmUtbG9hZGluZy10aXRsZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZGF0YWNvcmUtbG9hZGluZy1jb250ZW50IHtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiogU29tZSBuaWNldGllcyBmb3IgcmVuZGVyaW5nIGxhbmd1YWdlIGJsb2Nrcy4gKi9cblxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlIGxpLnNlbGVjdGVkLFxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlanMgbGkuc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXRleHQtYWNjZW50KTtcbiAgICBwYWRkaW5nOiAwLjJlbTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgd2lkdGg6IDJlbTtcbiAgICBoZWlnaHQ6IDJlbTtcbn1cblxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlIGxpLnNlbGVjdGVkIGEsXG4uYmxvY2stbGFuZ3VhZ2UtZGF0YWNvcmVqcyBsaS5zZWxlY3RlZCBhIHtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQtaW52ZXJ0ZWQpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlIC5kYXRhY29yZS1wYWdlcixcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZWpzIC5kYXRhY29yZS1wYWdlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtaW4td2lkdGg6IDkwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDEuN2VtO1xufVxuXG4uYmxvY2stbGFuZ3VhZ2UtZGF0YWNvcmUgbGkucHJldmlvdXMsXG4uYmxvY2stbGFuZ3VhZ2UtZGF0YWNvcmUgbGkubmV4dCxcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZWpzIGxpLnByZXZpb3VzLFxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlanMgbGkubmV4dCB7XG4gICAgbWluLWhlaWdodDogMS40ZW07XG4gICAgbWluLXdpZHRoOiAxLjRlbTtcbn1cblxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlIGxpLnByZXZpb3VzIHN2Zyxcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZSBsaS5uZXh0IHN2Zyxcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZWpzIGxpLnByZXZpb3VzIHN2Zyxcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZWpzIGxpLm5leHQgc3ZnIHtcbiAgICBjb2xvcjogY3VycmVudENvbG9yO1xuICAgIGZpbGw6IGN1cnJlbnRDb2xvciAhaW1wb3J0YW50O1xufVxuIiwgIi8qKiBTdGFja3MgYXJlIGp1c3QgdmVydGljYWwgZmxleCBib3hlcy4gKi9cbi5kYy1zdGFjayB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgbWFyZ2luOiA0cHg7XG59XG5cbi8qKiBHcm91cHMgYXJlIGhvcml6b25hbCBmbGV4IGJveGVzLiAqL1xuLmRjLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cbiAgICBtYXJnaW46IDRweDtcbn1cbiIsICIvKiBCYXNpYyBwYWRkaW5nIGZvciBidXR0b25zLiAqL1xuLmRjLWJ1dHRvbiB7XG4gICAgcGFkZGluZzogNHB4O1xuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gICAgbWFyZ2luLXRvcDogMnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcbn1cblxuLyogRXJyb3IgaW50ZW50IC0gcmVkIGJhY2tncm91bmQuICovXG4uZGMtaW50ZW50LWVycm9yIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1yZWQpICFpbXBvcnRhbnQ7XG59XG5cbi8qIFdhcm4gaW50ZW50IC0gb3JhbmdlIGJhY2tncm91bmQuICovXG4uZGMtaW50ZW50LXdhcm4ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLW9yYW5nZSkgIWltcG9ydGFudDtcbn1cblxuLyogXCJJbmZvXCIgaW50ZW50IC0gYmx1ZSBiYWNrZ3JvdW5kLiAqL1xuLmRjLWludGVudC1pbmZvIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKSAhaW1wb3J0YW50O1xufVxuXG4vKiogXCJTdWNjZXNzXCIgaW50ZW50IC0gZ3JlZW4gYmFja2dyb3VuZC4gKi9cbi5kYy1pbnRlbnQtc3VjY2VzcyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JlZW4pICFpbXBvcnRhbnQ7XG59XG5cbi8qKiBUZXh0IGJveGVzLiAqL1xuLmRjLXRleHRib3gge1xuICAgIHBhZGRpbmc6IDRweDtcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgIG1hcmdpbi1yaWdodDogNHB4O1xuICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG5cbi8qIENoZWNrYm94ICovXG4uZGMtY2hlY2tib3gge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogNHB4IDA7XG4gICAgZm9udC1zaXplOiAxNnB4O1xufVxuXG4uZGMtY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBDaGVja2JveCBob3ZlciAqL1xuLmRjLWNoZWNrYm94OmhvdmVyIHtcbiAgICBvcGFjaXR5OiAwLjg7XG59XG5cbi8qIENoZWNrYm94IGZvY3VzICovXG4uZGMtY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zKTtcbn1cblxuLyogQ2hlY2tib3ggZGlzYWJsZWQgKi9cbi5kYy1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBvcGFjaXR5OiAwLjY7XG59XG5cbi5kYy1jaGVja2JveC1kaXNhYmxlZCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi8qIEJhc2ljIHN0eWxlcyBmb3IgZGMtc2xpZGVyICovXG4uZGMtc2xpZGVyIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7XG59XG5cbi5kYy1zd2l0Y2guZGMtc3dpdGNoLWRpc2FibGVkIHtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIG9wYWNpdHk6IDAuNjtcbn1cblxuLyogQmFzaWMgc3R5bGVzIGZvciBkYy1pY29uLCBtYWtlIGl0IHZlcnRpY2FsIGNlbnRlciAqL1xuLmRjLWljb24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4iLCAiLmRhdGFjb3JlLWxpc3QtaXRlbS1maWVsZHMge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LW5vcm1hbCkgIWltcG9ydGFudDtcbn1cblxuLmRhdGFjb3JlLWxpc3QtaXRlbS1maWVsZHMgPiAuZGF0YWNvcmUtZmllbGQgKyAuZGF0YWNvcmUtZmllbGQge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjRlbTtcbn1cblxuLmRhdGFjb3JlLWZpZWxkIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogMC4yNWVtO1xuICAgIGZvbnQtc2l6ZTogMC44NWVtO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5kYXRhY29yZS1maWVsZCAuZmllbGQtdGl0bGUge1xuICAgIGZsZXgtZ3JvdzogMDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhc2UtMjUpO1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLXRleHQtYWNjZW50KTtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuM2VtO1xuICAgIHBhZGRpbmc6IDAuMmVtIDAuNWVtO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGluaGVyaXQ7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogaW5oZXJpdDtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLmRhdGFjb3JlLWZpZWxkIC5maWVsZC12YWx1ZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uZGF0YWNvcmUtZmllbGQgLmZpZWxkLXZhbHVlIC5jaGVja2JveC1jb250YWluZXIge1xuICAgIHRvcDogM3B4O1xufVxuXG4uZGF0YWNvcmUtZmllbGQgLmZpZWxkLXZhbHVlIGlucHV0IHtcbiAgICBoZWlnaHQ6IHVuc2V0ICFpbXBvcnRhbnQ7XG59XG5cbi5kYXRhY29yZS1yYXRpbmctc3Rhci5maWxsZWQge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LWFjY2VudCk7XG59XG5cbi5kYXRhY29yZS1yYXRpbmctc3RhciB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxLjNyZW07XG59XG5cbi5kYXRhY29yZS1zZWxlY3RhYmxlX19pbnB1dC1jb250YWluZXIsXG4uZGF0YWNvcmUtc2VsZWN0YWJsZV9faW5wdXQtY29udGFpbmVyIGlucHV0IHtcbiAgICBtaW4td2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XG59XG5cbi5kYXRhY29yZS1lZGl0YWJsZS1vdXRlciAucHJvbXB0LWlucHV0LmRhdGFjb3JlLXNlbGVjdGFibGVfX2lucHV0LWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gICAgZmxleC1ncm93OiAxO1xufVxuLmRhdGFjb3JlLXNlbGVjdGFibGVfX2lucHV0LWNvbnRhaW5lciBpbnB1dCB7XG4gICAgd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICBtaW4td2lkdGg6IG1heC1jb250ZW50ICFpbXBvcnRhbnQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uZGF0YWNvcmUtc2VsZWN0YWJsZV9fbWVudSB7XG4gICAgei1pbmRleDogOTk5OTkgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcbn1cblxuLnByb21wdC1pbnB1dC5kYXRhY29yZS1zZWxlY3RhYmxlX19pbnB1dC1jb250YWluZXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi52YWx1ZS1jb250YWluZXIuZGF0YWNvcmUtc2VsZWN0YWJsZV9fdmFsdWUtY29udGFpbmVyIHtcbn1cblxuLnN1Z2dlc3Rpb24tY29udGFpbmVyOmhhcyguZGF0YWNvcmUtc2VsZWN0YWJsZV9fY29udHJvbC0tbWVudS1pcy1vcGVuKSB7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbn1cblxuLmRhdGFjb3JlLXNlbGVjdGFibGVfX21lbnUge1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbn1cblxuLmRhdGFjb3JlLWVkaXRhYmxlLW91dGVyID4gLnN1Z2dlc3Rpb24tY29udGFpbmVyIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uZGF0YWNvcmUtc2VsZWN0YWJsZV9fbWVudS1saXN0IC5zdWdnZXN0aW9uLWl0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRleHQtbm9ybWFsKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQtaW52ZXJ0ZWQpO1xufVxuXG4uZGF0YWNvcmUtbXVsdGktc2VsZWN0LWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5kYXRhY29yZS1tdWx0aS1zZWxlY3QtdmFsdWUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWludGVyYWN0aXZlLWFjY2VudCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdGFnLXJhZGl1cyk7XG4gICAgcGFkZGluZzogdmFyKC0tdGFnLXBhZGRpbmcteSkgdmFyKC0tdGFnLXBhZGRpbmcteCk7XG59XG5cbi8qKiBncm91cHMgKi9cblxuLmRhdGFjb3JlLWdyb3VwLWhvbGRlciB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IDAuNWVtO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0bztcbiAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG59XG4uZGF0YWNvcmUtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5kYXRhY29yZS1ncm91cC1jb250ZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLmRhdGFjb3JlLWdyb3VwLWNvbnRlbnQgPiAqOm5vdCguaXMtY29sbGFwc2VkKSB7XG4gICAgZmxleC1ncm93OiAxO1xufVxuLmRhdGFjb3JlLWdyb3VwLWNvbnRlbnQgPiBoMSB7XG4gICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XG4gICAgZmxleC1zaHJpbms6IDE7XG59XG50ZXh0YXJlYS5kYXRhY29yZS1lZGl0YWJsZSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbn1cbiIsICIuZGF0YWNvcmUtbGlzdC1pdGVtLWNvbnRlbnQge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB3aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcbn1cblxuOmlzKHVsLCBvbCkgbGk6bm90KDpmaXJzdC1vZi10eXBlKSBwOmZpcnN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogdW5zZXQgIWltcG9ydGFudDtcbn1cbnVsLmRhdGFjb3JlLmNvbnRhaW5zLXRhc2stbGlzdCA+IGxpIHtcbiAgICAvKiBtYXJnaW4taW5saW5lLXN0YXJ0OiAwOyAqL1xufVxuaW5wdXQuZGF0YWNvcmUudGFzay1saXN0LWl0ZW0tY2hlY2tib3gge1xuICAgIC8qIHBvc2l0aW9uOiBhYnNvbHV0ZTsgKi9cbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiBjYWxjKHZhcigtLWNoZWNrYm94LXNpemUpICogMC4xKSAhaW1wb3J0YW50O1xuICAgIC8qIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDAgIWltcG9ydGFudDsgKi9cbn1cblxubGkuZGF0YWNvcmUudGFzay1saXN0LWl0ZW0gPiAqOm50aC1jaGlsZCgzKSB7XG4gICAgZGlzcGxheTogZmxvdy1yb290ICFpbXBvcnRhbnQ7XG4gICAgdG9wOiAtNXB4O1xuICAgIHBhZGRpbmctbGVmdDogMC41ZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGF0YWNvcmUtY29sbGFwc2VyLFxuLmRhdGFjb3JlLWNvbGxhcHNlciBzdmcuc3ZnLWljb24ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMDBtcyBlYXNlLWluLW91dDtcbn1cbi5kYXRhY29yZS1jb2xsYXBzZXIuaXMtY29sbGFwc2VkIHN2Zy5zdmctaWNvbiB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1kaXJlY3Rpb24pICogLTEgKiA5MGRlZykpO1xufVxubGkuZGF0YWNvcmUuZGF0YWNvcmUudGFzay1saXN0LWl0ZW0gLmRhdGFjb3JlLWNvbGxhcHNlciB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjdlbTtcbiAgICBmbG9hdDogbGVmdDtcbn1cbi8qIGxpLmRhdGFjb3JlLnRhc2stbGlzdC1pdGVtID4gOmZpcnN0LWNoaWxkIHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxvYXQ6IGxlZnQ7XG59ICovXG5saS5kYXRhY29yZS50YXNrLWxpc3QtaXRlbSAuZGF0YWNvcmUtY29sbGFwc2VyIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgIHRvcDogLTAuMWVtO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiBjYWxjKHZhcigtLWNoZWNrYm94LXNpemUpICogLTEuNCk7XG59XG5saS5kYXRhY29yZS50YXNrLWxpc3QtaXRlbSAuZGF0YWNvcmUtY29sbGFwc2VyLm5vLWNoaWxkcmVuIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4iLCAiLmRjLXBhZ2luZy1jb250cm9sIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIGdhcDogMTBweDtcbn1cblxuYnV0dG9uLmRjLXBhZ2luZy1jb250cm9sLXBhZ2Uge1xuICAgIHdpZHRoOiB2YXIoLS1pbnB1dC1oZWlnaHQpO1xuICAgIGhlaWdodDogdmFyKC0taW5wdXQtaGVpZ2h0KTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB1bnNldDtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG5idXR0b24uZGMtcGFnaW5nLWNvbnRyb2wtcGFnZTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGV4dC1zZWxlY3Rpb24pO1xufVxuXG5idXR0b24uZGMtcGFnaW5nLWNvbnRyb2wtcGFnZS1hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRleHQtc2VsZWN0aW9uKTtcbn1cblxuYnV0dG9uLmRjLXBhZ2luZy1jb250cm9sLXBhZ2VbZGlzYWJsZWRdIHtcbiAgICBjdXJzb3I6IGluaGVyaXQ7XG4gICAgb3BhY2l0eTogMC41O1xufVxuXG5idXR0b24uZGMtcGFnaW5nLWNvbnRyb2wtcGFnZVtkaXNhYmxlZF06aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHVuc2V0O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5kYy1wYWdpbmctY29udHJvbC1zZXBhcmF0b3I6aG92ZXIgPiAuZGMtcGFnaW5nLWNvbnRyb2wtZWxsaXBzaXMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5kYy1wYWdpbmctY29udHJvbC1zZXBhcmF0b3IgPiAuZGMtcGFnaW5nLWNvbnRyb2wtbGVhcC1sZWZ0LFxuLmRjLXBhZ2luZy1jb250cm9sLXNlcGFyYXRvciA+IC5kYy1wYWdpbmctY29udHJvbC1sZWFwLXJpZ2h0IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uZGMtcGFnaW5nLWNvbnRyb2wtc2VwYXJhdG9yOmhvdmVyID4gLmRjLXBhZ2luZy1jb250cm9sLWxlYXAtbGVmdCxcbi5kYy1wYWdpbmctY29udHJvbC1zZXBhcmF0b3I6aG92ZXIgPiAuZGMtcGFnaW5nLWNvbnRyb2wtbGVhcC1yaWdodCB7XG4gICAgZGlzcGxheTogZmxleDtcbn1cblxuLmRjLXBhZ2luZy1jb250cm9sLXNlcGFyYXRvciA+IC5kYy1wYWdpbmctY29udHJvbC1sZWFwLWxlZnQge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG4iLCAiLmRhdGFjb3JlLXRhYmxlIHtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmRhdGFjb3JlLXRhYmxlID4gdGhlYWQgPiB0cixcbi5kYXRhY29yZS10YWJsZSA+IHRib2R5ID4gdHIge1xuICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmRhdGFjb3JlLXRhYmxlID4gdGJvZHkgPiB0cjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGV4dC1zZWxlY3Rpb24pICFpbXBvcnRhbnQ7XG59XG5cbi5kYXRhY29yZS10YWJsZSA+IHRoZWFkID4gdHIgPiB0aCB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IGxhcmdlcjtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICBib3JkZXItYm90dG9tOiBzb2xpZDtcblxuICAgIG1heC13aWR0aDogMTAwJTtcbn1cblxuLmRhdGFjb3JlLXRhYmxlID4gdGJvZHkgPiB0ciA+IHRkIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZGF0YWNvcmUtdGFibGUgdWw6bm90KC5jb250YWlucy10YXNrLWxpc3QpLFxuLmRhdGFjb3JlLXRhYmxlIG9sIHtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDAuMmVtICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWJsb2NrLWVuZDogMC4yZW0gIWltcG9ydGFudDtcbn1cblxuLmRhdGFjb3JlLXRhYmxlLWhlYWRlci1jZWxsLWNvbnRlbnQge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG5cbi5kYXRhY29yZS10YWJsZS1zb3J0IHtcbiAgICBmbGV4LWdyb3c6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1ZW07XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmRhdGFjb3JlLXRhYmxlLWhlYWRlci10aXRsZSB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmbGV4LWdyb3c6IDE7XG59XG5cbi5kYXRhY29yZS10YWJsZSB0ZCAuZGF0YWNvcmUtY29sbGFwc2VyIHtcbiAgICBtYXgtd2lkdGg6IDEuMjVlbTtcbiAgICBtYXgtaGVpZ2h0OiBtaW4tY29udGVudDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG59XG4uZGF0YWNvcmUtdGFibGUgdGQ6aGFzKC5kYXRhY29yZS1jYXJkLWNvbGxhcHNlcikge1xuICAgIG1heC13aWR0aDogMS4yNWVtO1xufVxuXG4uZGF0YWNvcmUtdGFibGUgdGQgLmRhdGFjb3JlLWVkaXRhYmxlLW91dGVyLFxuLmRhdGFjb3JlLXRhYmxlIHRkIC5kYXRhY29yZS1lZGl0YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuIiwgIi5kYXRhY29yZSAuY2FsbG91dC1jb250ZW50LFxuLmRhdGFjb3JlLmNhbGxvdXQge1xuICAgIHRyYW5zaXRpb246IGFsbCAxMDBtcyBjdWJpYy1iZXppZXIoMC4wMiwgMC4wMSwgMC40NywgMSk7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuLmRhdGFjb3JlIC5jYWxsb3V0LWZvbGQge1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cbiIsICIuZGF0YWNvcmUtY2FyZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIHBhZGRpbmc6IDEuMnJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjVlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSk7XG4gICAgbWluLXdpZHRoOiA4OSU7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG5cbi5kYXRhY29yZS1jYXJkLXRpdGxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjZlbTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBmb250LXNpemU6IDEuOGVtO1xufVxuXG4uZGF0YWNvcmUtY2FyZC10aXRsZS5jZW50ZXJlZCB7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcbn1cblxuLmRhdGFjb3JlLWNhcmQtY29udGVudCxcbi5kYXRhY29yZS1jYXJkLWlubmVyLFxuLmRhdGFjb3JlLWNhcmQge1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjY1LCAwLjA1LCAwLjM2LCAxKTtcbn1cbi5kYXRhY29yZS1jYXJkLWlubmVyIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG1heC1oZWlnaHQ6IDUwMHB4O1xufVxuXG4uZGF0YWNvcmUtY2FyZCAuZGF0YWNvcmUtY2FyZC1jb2xsYXBzZXIsXG4uZGF0YWNvcmUtY2FyZC5pcy1jb2xsYXBzZWQgLmRhdGFjb3JlLWNhcmQtY29sbGFwc2VyIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC41cyBjdWJpYy1iZXppZXIoMC42NSwgMC4wNSwgMC4zNiwgMSk7XG59XG5cbi5kYXRhY29yZS1jYXJkLWNvbnRlbnQge1xuICAgIGZsZXgtZ3JvdzogMTtcbn1cblxuLmRhdGFjb3JlLWNhcmQtaW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kYXRhY29yZS1jYXJkOm5vdCguZGF0YWNvcmUtY2FyZC5pcy1jb2xsYXBzZWQpIC5kYXRhY29yZS1jYXJkLWNvbGxhcHNlciB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cblxuLmRhdGFjb3JlLWNhcmQuaXMtY29sbGFwc2VkIC5kYXRhY29yZS1jYXJkLWNvbGxhcHNlciB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZykgIWltcG9ydGFudDtcbn1cblxuLmRhdGFjb3JlLWNhcmQtY29sbGFwc2UsXG4uZGF0YWNvcmUtY2FyZC1jb2xsYXBzZXIgc3ZnIHtcbiAgICBtaW4td2lkdGg6IDFlbTtcbiAgICBtaW4taGVpZ2h0OiAxZW07XG4gICAgZmlsbDogY3VycmVudENvbG9yO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5kYXRhY29yZS1jYXJkLmlzLWNvbGxhcHNlZCAuZGF0YWNvcmUtY2FyZC1jb2xsYXBzZXIge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xufVxuXG4uZGF0YWNvcmUtY2FyZCAuZGF0YWNvcmUtY2FyZC1mb290ZXIge1xuICAgIGZvbnQtc2l6ZTogMC43ZW07XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgcGFkZGluZzogMDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQTtBQUNJO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFBQTs7O0FDbkJKO0FBQ0k7QUFDQTtBQUFBO0FBS0o7QUFDSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBR0o7QUFDSTtBQUNBO0FBQUE7QUFLSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFBQTtBQUtKO0FBQUE7QUFFSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUFBO0FBRUk7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQUE7QUFFSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUFBO0FBQUE7QUFBQTtBQUlJO0FBQ0E7QUFBQTtBQUdKO0FBQUE7QUFBQTtBQUFBO0FBSUk7QUFDQTtBQUFBOzs7QUN2Rko7QUFDSTtBQUNBO0FBRUE7QUFBQTtBQUlKO0FBQ0k7QUFDQTtBQUVBO0FBQUE7OztBQ1pKO0FBQ0k7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUo7QUFDSTtBQUFBO0FBSUo7QUFDSTtBQUFBO0FBSUo7QUFDSTtBQUFBO0FBSUo7QUFDSTtBQUFBO0FBSUo7QUFDSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQ0k7QUFDQTtBQUNBO0FBQUE7QUFJSjtBQUNJO0FBQUE7QUFJSjtBQUNJO0FBQ0E7QUFBQTtBQUlKO0FBQ0k7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBSUo7QUFDSTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQ0k7QUFDQTtBQUFBO0FBSUo7QUFDSTtBQUNBO0FBQUE7OztBQ3pGSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFBQTtBQUdKO0FBQUE7QUFFSTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQ0k7QUFDQTtBQUFBO0FBRUo7QUFDSTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQ0k7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBR0o7QUFBQTtBQUdBO0FBQ0k7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQ0k7QUFBQTtBQUdKO0FBQ0k7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQ0k7QUFDQTtBQUNBO0FBQUE7QUFLSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFSjtBQUNJO0FBQ0E7QUFBQTtBQUVKO0FBQ0k7QUFDQTtBQUNBO0FBQUE7QUFFSjtBQUNJO0FBQUE7QUFFSjtBQUNJO0FBQ0E7QUFBQTtBQUVKO0FBQ0k7QUFBQTs7O0FDMUlKO0FBQ0k7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFFSjtBQUFBO0FBR0E7QUFFSTtBQUNBO0FBQUE7QUFJSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUFBO0FBRUk7QUFBQTtBQUVKO0FBQ0k7QUFBQTtBQUVKO0FBQ0k7QUFDQTtBQUFBO0FBTUo7QUFDSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFSjtBQUNJO0FBQUE7OztBQ2pESjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBR0o7QUFDSTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFBQTtBQUdKO0FBQ0k7QUFBQTtBQUdKO0FBQUE7QUFFSTtBQUFBO0FBR0o7QUFBQTtBQUVJO0FBQUE7QUFHSjtBQUNJO0FBQUE7OztBQ3BESjtBQUNJO0FBQUE7QUFHSjtBQUFBO0FBRUk7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQUE7QUFFSTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQ0k7QUFDQTtBQUFBO0FBR0o7QUFDSTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUo7QUFDSTtBQUFBO0FBR0o7QUFBQTtBQUVJO0FBQ0E7QUFBQTs7O0FDdEVKO0FBQUE7QUFFSTtBQUNBO0FBQ0E7QUFBQTtBQUVKO0FBQ0k7QUFBQTs7O0FDUEo7QUFDSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUFBO0FBQUE7QUFHSTtBQUFBO0FBRUo7QUFDSTtBQUNBO0FBQ0E7QUFBQTtBQUdKO0FBQUE7QUFFSTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBR0o7QUFDSTtBQUFBO0FBR0o7QUFBQTtBQUVJO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHSjtBQUNJO0FBQUE7QUFHSjtBQUNJO0FBQ0E7QUFDQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo= */ +/*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FwaS91aS9lbWJlZC5jc3MiLCAiLi4vLi4vc3JjL3VpL2Vycm9ycy5jc3MiLCAiLi4vLi4vc3JjL2FwaS91aS9sYXlvdXQuY3NzIiwgIi4uLy4uL3NyYy9hcGkvdWkvYmFzaWNzLmNzcyIsICIuLi8uLi9zcmMvdWkvZmllbGRzL2ZpZWxkcy5jc3MiLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9saXN0cy5jc3MiLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9wYWdpbmcuY3NzIiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvdGFibGUuY3NzIiwgIi4uLy4uL3NyYy9hcGkvdWkvdmlld3MvY2FsbG91dC5jc3MiLCAiLi4vLi4vc3JjL2FwaS91aS92aWV3cy9jYXJkcy5jc3MiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi5kYXRhY29yZS1zcGFuLWVtYmVkIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBwYWRkaW5nOiAxcHggOHB4IDFweCA4cHg7XG4gICAgbWFyZ2luOiA0cHggMHB4IDRweCAwcHg7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYXNlLTI1KTtcbn1cblxuLmRhdGFjb3JlLWVtYmVkLXNvdXJjZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNHB4O1xuICAgIHJpZ2h0OiA0cHg7XG4gICAgcGFkZGluZy1sZWZ0OiA0cHg7XG4gICAgcGFkZGluZy1yaWdodDogNHB4O1xuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnktYWx0KTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1mYWludCk7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc21hbGxlc3QpO1xufVxuIiwgIi5kYXRhY29yZS1lcnJvci1yZXRyeSB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyoqIEVycm9yIEJveGVzLiAqL1xuXG4uZGF0YWNvcmUtZXJyb3ItYm94IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXI6IDRweCBkYXNoZWQgdmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpO1xufVxuXG4uZGF0YWNvcmUtZXJyb3ItdGl0bGUge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmRhdGFjb3JlLWVycm9yLW1lc3NhZ2Uge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qKiBMb2FkaW5nIHZpZXdzIHdoaWxlIHRoZSBpbmRleCBpcyBpbml0aWFsaXppbmcuICovXG5cbi5kYXRhY29yZS1sb2FkaW5nLWJvdW5kYXJ5IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXI6IDRweCBkYXNoZWQgdmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpO1xufVxuXG4uZGF0YWNvcmUtbG9hZGluZy10aXRsZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZGF0YWNvcmUtbG9hZGluZy1jb250ZW50IHtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiogU29tZSBuaWNldGllcyBmb3IgcmVuZGVyaW5nIGxhbmd1YWdlIGJsb2Nrcy4gKi9cblxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlIGxpLnNlbGVjdGVkLFxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlanMgbGkuc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXRleHQtYWNjZW50KTtcbiAgICBwYWRkaW5nOiAwLjJlbTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgd2lkdGg6IDJlbTtcbiAgICBoZWlnaHQ6IDJlbTtcbn1cblxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlIGxpLnNlbGVjdGVkIGEsXG4uYmxvY2stbGFuZ3VhZ2UtZGF0YWNvcmVqcyBsaS5zZWxlY3RlZCBhIHtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQtaW52ZXJ0ZWQpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlIC5kYXRhY29yZS1wYWdlcixcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZWpzIC5kYXRhY29yZS1wYWdlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtaW4td2lkdGg6IDkwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDEuN2VtO1xufVxuXG4uYmxvY2stbGFuZ3VhZ2UtZGF0YWNvcmUgbGkucHJldmlvdXMsXG4uYmxvY2stbGFuZ3VhZ2UtZGF0YWNvcmUgbGkubmV4dCxcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZWpzIGxpLnByZXZpb3VzLFxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlanMgbGkubmV4dCB7XG4gICAgbWluLWhlaWdodDogMS40ZW07XG4gICAgbWluLXdpZHRoOiAxLjRlbTtcbn1cblxuLmJsb2NrLWxhbmd1YWdlLWRhdGFjb3JlIGxpLnByZXZpb3VzIHN2Zyxcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZSBsaS5uZXh0IHN2Zyxcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZWpzIGxpLnByZXZpb3VzIHN2Zyxcbi5ibG9jay1sYW5ndWFnZS1kYXRhY29yZWpzIGxpLm5leHQgc3ZnIHtcbiAgICBjb2xvcjogY3VycmVudENvbG9yO1xuICAgIGZpbGw6IGN1cnJlbnRDb2xvciAhaW1wb3J0YW50O1xufVxuIiwgIi8qKiBTdGFja3MgYXJlIGp1c3QgdmVydGljYWwgZmxleCBib3hlcy4gKi9cbi5kYy1zdGFjayB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgbWFyZ2luOiA0cHg7XG59XG5cbi8qKiBHcm91cHMgYXJlIGhvcml6b25hbCBmbGV4IGJveGVzLiAqL1xuLmRjLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cbiAgICBtYXJnaW46IDRweDtcbn1cbiIsICIvKiBCYXNpYyBwYWRkaW5nIGZvciBidXR0b25zLiAqL1xuLmRjLWJ1dHRvbiB7XG4gICAgcGFkZGluZzogNHB4O1xuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gICAgbWFyZ2luLXRvcDogMnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcbn1cblxuLyogRXJyb3IgaW50ZW50IC0gcmVkIGJhY2tncm91bmQuICovXG4uZGMtaW50ZW50LWVycm9yIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1yZWQpICFpbXBvcnRhbnQ7XG59XG5cbi8qIFdhcm4gaW50ZW50IC0gb3JhbmdlIGJhY2tncm91bmQuICovXG4uZGMtaW50ZW50LXdhcm4ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLW9yYW5nZSkgIWltcG9ydGFudDtcbn1cblxuLyogXCJJbmZvXCIgaW50ZW50IC0gYmx1ZSBiYWNrZ3JvdW5kLiAqL1xuLmRjLWludGVudC1pbmZvIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKSAhaW1wb3J0YW50O1xufVxuXG4vKiogXCJTdWNjZXNzXCIgaW50ZW50IC0gZ3JlZW4gYmFja2dyb3VuZC4gKi9cbi5kYy1pbnRlbnQtc3VjY2VzcyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JlZW4pICFpbXBvcnRhbnQ7XG59XG5cbi8qKiBUZXh0IGJveGVzLiAqL1xuLmRjLXRleHRib3gge1xuICAgIHBhZGRpbmc6IDRweDtcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgIG1hcmdpbi1yaWdodDogNHB4O1xuICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG5cbi8qIENoZWNrYm94ICovXG4uZGMtY2hlY2tib3gge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogNHB4IDA7XG4gICAgZm9udC1zaXplOiAxNnB4O1xufVxuXG4uZGMtY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBDaGVja2JveCBob3ZlciAqL1xuLmRjLWNoZWNrYm94OmhvdmVyIHtcbiAgICBvcGFjaXR5OiAwLjg7XG59XG5cbi8qIENoZWNrYm94IGZvY3VzICovXG4uZGMtY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zKTtcbn1cblxuLyogQ2hlY2tib3ggZGlzYWJsZWQgKi9cbi5kYy1jaGVja2JveC1kaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBvcGFjaXR5OiAwLjY7XG59XG5cbi5kYy1jaGVja2JveC1kaXNhYmxlZCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi8qIEJhc2ljIHN0eWxlcyBmb3IgZGMtc2xpZGVyICovXG4uZGMtc2xpZGVyIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7XG59XG5cbi5kYy1zd2l0Y2guZGMtc3dpdGNoLWRpc2FibGVkIHtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIG9wYWNpdHk6IDAuNjtcbn1cblxuLyogQmFzaWMgc3R5bGVzIGZvciBkYy1pY29uLCBtYWtlIGl0IHZlcnRpY2FsIGNlbnRlciAqL1xuLmRjLWljb24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4iLCAiLmRhdGFjb3JlLWxpc3QtaXRlbS1maWVsZHMge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LW5vcm1hbCkgIWltcG9ydGFudDtcbn1cblxuLmRhdGFjb3JlLWxpc3QtaXRlbS1maWVsZHMgPiAuZGF0YWNvcmUtZmllbGQgKyAuZGF0YWNvcmUtZmllbGQge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjRlbTtcbn1cblxuLmRhdGFjb3JlLWZpZWxkIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogMC4yNWVtO1xuICAgIGZvbnQtc2l6ZTogMC44NWVtO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5kYXRhY29yZS1maWVsZCAuZmllbGQtdGl0bGUge1xuICAgIGZsZXgtZ3JvdzogMDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhc2UtMjUpO1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLXRleHQtYWNjZW50KTtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuM2VtO1xuICAgIHBhZGRpbmc6IDAuMmVtIDAuNWVtO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGluaGVyaXQ7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogaW5oZXJpdDtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLmRhdGFjb3JlLWZpZWxkIC5maWVsZC12YWx1ZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uZGF0YWNvcmUtZmllbGQgLmZpZWxkLXZhbHVlIC5jaGVja2JveC1jb250YWluZXIge1xuICAgIHRvcDogM3B4O1xufVxuXG4uZGF0YWNvcmUtZmllbGQgLmZpZWxkLXZhbHVlIGlucHV0IHtcbiAgICBoZWlnaHQ6IHVuc2V0ICFpbXBvcnRhbnQ7XG59XG5cbi5kYXRhY29yZS1yYXRpbmctc3Rhci5maWxsZWQge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LWFjY2VudCk7XG59XG5cbi5kYXRhY29yZS1yYXRpbmctc3RhciB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxLjNyZW07XG59XG5cbi5kYXRhY29yZS1zZWxlY3RhYmxlX19pbnB1dC1jb250YWluZXIsXG4uZGF0YWNvcmUtc2VsZWN0YWJsZV9faW5wdXQtY29udGFpbmVyIGlucHV0IHtcbiAgICBtaW4td2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XG59XG5cbi5kYXRhY29yZS1lZGl0YWJsZS1vdXRlciAucHJvbXB0LWlucHV0LmRhdGFjb3JlLXNlbGVjdGFibGVfX2lucHV0LWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gICAgZmxleC1ncm93OiAxO1xufVxuLmRhdGFjb3JlLXNlbGVjdGFibGVfX2lucHV0LWNvbnRhaW5lciBpbnB1dCB7XG4gICAgd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICBtaW4td2lkdGg6IG1heC1jb250ZW50ICFpbXBvcnRhbnQ7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uZGF0YWNvcmUtc2VsZWN0YWJsZV9fbWVudSB7XG4gICAgei1pbmRleDogOTk5OTkgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcbn1cblxuLnByb21wdC1pbnB1dC5kYXRhY29yZS1zZWxlY3RhYmxlX19pbnB1dC1jb250YWluZXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi52YWx1ZS1jb250YWluZXIuZGF0YWNvcmUtc2VsZWN0YWJsZV9fdmFsdWUtY29udGFpbmVyIHtcbn1cblxuLnN1Z2dlc3Rpb24tY29udGFpbmVyOmhhcyguZGF0YWNvcmUtc2VsZWN0YWJsZV9fY29udHJvbC0tbWVudS1pcy1vcGVuKSB7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbn1cblxuLmRhdGFjb3JlLXNlbGVjdGFibGVfX21lbnUge1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbn1cblxuLmRhdGFjb3JlLWVkaXRhYmxlLW91dGVyID4gLnN1Z2dlc3Rpb24tY29udGFpbmVyIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uZGF0YWNvcmUtc2VsZWN0YWJsZV9fbWVudS1saXN0IC5zdWdnZXN0aW9uLWl0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRleHQtbm9ybWFsKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQtaW52ZXJ0ZWQpO1xufVxuXG4uZGF0YWNvcmUtbXVsdGktc2VsZWN0LWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5kYXRhY29yZS1tdWx0aS1zZWxlY3QtdmFsdWUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWludGVyYWN0aXZlLWFjY2VudCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdGFnLXJhZGl1cyk7XG4gICAgcGFkZGluZzogdmFyKC0tdGFnLXBhZGRpbmcteSkgdmFyKC0tdGFnLXBhZGRpbmcteCk7XG59XG5cbnRleHRhcmVhLmRhdGFjb3JlLWVkaXRhYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xufVxuIiwgIi5kYXRhY29yZS1saXN0LWl0ZW0tY29udGVudCB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuLmRhdGFjb3JlLWxpc3QtaXRlbS1jb250ZW50ID4gOmZpcnN0LWNoaWxkIHtcbiAgICBmbGV4LWdyb3c6IDE7XG59XG5cbjppcyh1bCwgb2wpIGxpOm5vdCg6Zmlyc3Qtb2YtdHlwZSkgcDpmaXJzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IHVuc2V0ICFpbXBvcnRhbnQ7XG59XG51bC5kYXRhY29yZS5jb250YWlucy10YXNrLWxpc3QgPiBsaSB7XG4gICAgLyogbWFyZ2luLWlubGluZS1zdGFydDogMDsgKi9cbn1cbmlucHV0LmRhdGFjb3JlLnRhc2stbGlzdC1pdGVtLWNoZWNrYm94IHtcbiAgICAvKiBwb3NpdGlvbjogYWJzb2x1dGU7ICovXG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogY2FsYyh2YXIoLS1jaGVja2JveC1zaXplKSAqIDAuMSkgIWltcG9ydGFudDtcbiAgICAvKiBtYXJnaW4taW5saW5lLXN0YXJ0OiAwICFpbXBvcnRhbnQ7ICovXG59XG5cbmxpLmRhdGFjb3JlLnRhc2stbGlzdC1pdGVtID4gKjpudGgtY2hpbGQoMykge1xuICAgIGRpc3BsYXk6IGZsb3ctcm9vdCAhaW1wb3J0YW50O1xuICAgIHRvcDogLTVweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNWVtO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRhdGFjb3JlLWNvbGxhcHNlcixcbi5kYXRhY29yZS1jb2xsYXBzZXIgc3ZnLnN2Zy1pY29uIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTAwbXMgZWFzZS1pbi1vdXQ7XG59XG4uZGF0YWNvcmUtY29sbGFwc2VyLmlzLWNvbGxhcHNlZCBzdmcuc3ZnLWljb24ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGModmFyKC0tZGlyZWN0aW9uKSAqIC0xICogOTBkZWcpKTtcbn1cbmxpLmRhdGFjb3JlLmRhdGFjb3JlLnRhc2stbGlzdC1pdGVtIC5kYXRhY29yZS1jb2xsYXBzZXIge1xuICAgIG1hcmdpbi1yaWdodDogMC43ZW07XG4gICAgZmxvYXQ6IGxlZnQ7XG59XG4vKiBsaS5kYXRhY29yZS50YXNrLWxpc3QtaXRlbSA+IDpmaXJzdC1jaGlsZCB7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsb2F0OiBsZWZ0O1xufSAqL1xubGkuZGF0YWNvcmUudGFzay1saXN0LWl0ZW0gLmRhdGFjb3JlLWNvbGxhcHNlciB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBhbGlnbi1zZWxmOiBzdGFydDtcbiAgICB0b3A6IC0wLjFlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogY2FsYyh2YXIoLS1jaGVja2JveC1zaXplKSAqIC0xLjQpO1xufVxubGkuZGF0YWNvcmUudGFzay1saXN0LWl0ZW0gLmRhdGFjb3JlLWNvbGxhcHNlci5uby1jaGlsZHJlbiB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuIiwgIi5kYy1wYWdpbmctY29udHJvbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICBnYXA6IDEwcHg7XG59XG5cbmJ1dHRvbi5kYy1wYWdpbmctY29udHJvbC1wYWdlIHtcbiAgICB3aWR0aDogdmFyKC0taW5wdXQtaGVpZ2h0KTtcbiAgICBoZWlnaHQ6IHZhcigtLWlucHV0LWhlaWdodCk7XG4gICAgcGFkZGluZzogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuYnV0dG9uLmRjLXBhZ2luZy1jb250cm9sLXBhZ2U6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRleHQtc2VsZWN0aW9uKTtcbn1cblxuYnV0dG9uLmRjLXBhZ2luZy1jb250cm9sLXBhZ2UtYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10ZXh0LXNlbGVjdGlvbik7XG59XG5cbmJ1dHRvbi5kYy1wYWdpbmctY29udHJvbC1wYWdlW2Rpc2FibGVkXSB7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuYnV0dG9uLmRjLXBhZ2luZy1jb250cm9sLXBhZ2VbZGlzYWJsZWRdOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB1bnNldDtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uZGMtcGFnaW5nLWNvbnRyb2wtc2VwYXJhdG9yOmhvdmVyID4gLmRjLXBhZ2luZy1jb250cm9sLWVsbGlwc2lzIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uZGMtcGFnaW5nLWNvbnRyb2wtc2VwYXJhdG9yID4gLmRjLXBhZ2luZy1jb250cm9sLWxlYXAtbGVmdCxcbi5kYy1wYWdpbmctY29udHJvbC1zZXBhcmF0b3IgPiAuZGMtcGFnaW5nLWNvbnRyb2wtbGVhcC1yaWdodCB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmRjLXBhZ2luZy1jb250cm9sLXNlcGFyYXRvcjpob3ZlciA+IC5kYy1wYWdpbmctY29udHJvbC1sZWFwLWxlZnQsXG4uZGMtcGFnaW5nLWNvbnRyb2wtc2VwYXJhdG9yOmhvdmVyID4gLmRjLXBhZ2luZy1jb250cm9sLWxlYXAtcmlnaHQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kYy1wYWdpbmctY29udHJvbC1zZXBhcmF0b3IgPiAuZGMtcGFnaW5nLWNvbnRyb2wtbGVhcC1sZWZ0IHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuIiwgIi5kYXRhY29yZS10YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbi5kYXRhY29yZS10YWJsZSA+IHRoZWFkID4gdHIsXG4uZGF0YWNvcmUtdGFibGUgPiB0Ym9keSA+IHRyIHtcbiAgICBtYXJnaW4tdG9wOiAxZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5kYXRhY29yZS10YWJsZSA+IHRib2R5ID4gdHI6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRleHQtc2VsZWN0aW9uKSAhaW1wb3J0YW50O1xufVxuXG4uZGF0YWNvcmUtdGFibGUgPiB0aGVhZCA+IHRyID4gdGgge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiBsYXJnZXI7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbTogc29saWQ7XG5cbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5kYXRhY29yZS10YWJsZSA+IHRib2R5ID4gdHIgPiB0ZCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmRhdGFjb3JlLXRhYmxlIHVsOm5vdCguY29udGFpbnMtdGFzay1saXN0KSxcbi5kYXRhY29yZS10YWJsZSBvbCB7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAwLjJlbSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1ibG9jay1lbmQ6IDAuMmVtICFpbXBvcnRhbnQ7XG59XG5cbi5kYXRhY29yZS10YWJsZS1oZWFkZXItY2VsbC1jb250ZW50IHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xufVxuXG4uZGF0YWNvcmUtdGFibGUtc29ydCB7XG4gICAgZmxleC1ncm93OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMC4yNWVtO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5kYXRhY29yZS10YWJsZS1oZWFkZXItdGl0bGUge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1ncm93OiAxO1xufVxuXG4uZGF0YWNvcmUtdGFibGUgdGQgLmRhdGFjb3JlLWNvbGxhcHNlciB7XG4gICAgbWF4LXdpZHRoOiAxLjI1ZW07XG4gICAgbWF4LWhlaWdodDogbWluLWNvbnRlbnQ7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xufVxuLmRhdGFjb3JlLXRhYmxlIHRkOmhhcyguZGF0YWNvcmUtY2FyZC1jb2xsYXBzZXIpIHtcbiAgICBtYXgtd2lkdGg6IDEuMjVlbTtcbn1cblxuLmRhdGFjb3JlLXRhYmxlIHRkIC5kYXRhY29yZS1lZGl0YWJsZS1vdXRlcixcbi5kYXRhY29yZS10YWJsZSB0ZCAuZGF0YWNvcmUtZWRpdGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbiIsICIuZGF0YWNvcmUgLmNhbGxvdXQtY29udGVudCxcbi5kYXRhY29yZS5jYWxsb3V0IHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMDIsIDAuMDEsIDAuNDcsIDEpO1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi5kYXRhY29yZSAuY2FsbG91dC1mb2xkIHtcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG4iLCAiLmRhdGFjb3JlLWNhcmQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAxLjJyZW07XG4gICAgYm9yZGVyLXJhZGl1czogMC41ZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpO1xuICAgIG1pbi13aWR0aDogODklO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuXG4uZGF0YWNvcmUtY2FyZC10aXRsZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMC42ZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZm9udC1zaXplOiAxLjhlbTtcbn1cblxuLmRhdGFjb3JlLWNhcmQtdGl0bGUuY2VudGVyZWQge1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XG59XG5cbi5kYXRhY29yZS1jYXJkLWNvbnRlbnQsXG4uZGF0YWNvcmUtY2FyZC1pbm5lcixcbi5kYXRhY29yZS1jYXJkIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC42NSwgMC4wNSwgMC4zNiwgMSk7XG59XG4uZGF0YWNvcmUtY2FyZC1pbm5lciB7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBtYXgtaGVpZ2h0OiA1MDBweDtcbn1cblxuLmRhdGFjb3JlLWNhcmQgLmRhdGFjb3JlLWNhcmQtY29sbGFwc2VyLFxuLmRhdGFjb3JlLWNhcmQuaXMtY29sbGFwc2VkIC5kYXRhY29yZS1jYXJkLWNvbGxhcHNlciB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNXMgY3ViaWMtYmV6aWVyKDAuNjUsIDAuMDUsIDAuMzYsIDEpO1xufVxuXG4uZGF0YWNvcmUtY2FyZC1jb250ZW50IHtcbiAgICBmbGV4LWdyb3c6IDE7XG59XG5cbi5kYXRhY29yZS1jYXJkLWlubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGF0YWNvcmUtY2FyZDpub3QoLmRhdGFjb3JlLWNhcmQuaXMtY29sbGFwc2VkKSAuZGF0YWNvcmUtY2FyZC1jb2xsYXBzZXIge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG5cbi5kYXRhY29yZS1jYXJkLmlzLWNvbGxhcHNlZCAuZGF0YWNvcmUtY2FyZC1jb2xsYXBzZXIge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpICFpbXBvcnRhbnQ7XG59XG5cbi5kYXRhY29yZS1jYXJkLWNvbGxhcHNlLFxuLmRhdGFjb3JlLWNhcmQtY29sbGFwc2VyIHN2ZyB7XG4gICAgbWluLXdpZHRoOiAxZW07XG4gICAgbWluLWhlaWdodDogMWVtO1xuICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZGF0YWNvcmUtY2FyZC5pcy1jb2xsYXBzZWQgLmRhdGFjb3JlLWNhcmQtY29sbGFwc2VyIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbn1cblxuLmRhdGFjb3JlLWNhcmQgLmRhdGFjb3JlLWNhcmQtZm9vdGVyIHtcbiAgICBmb250LXNpemU6IDAuN2VtO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHBhZGRpbmc6IDA7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsQ0FBQztBQUNHLFlBQVU7QUFFVixXQUFTLElBQUksSUFBSSxJQUFJO0FBQ3JCLFVBQVEsSUFBSSxJQUFJLElBQUk7QUFFcEIsb0JBQWtCLElBQUk7QUFDMUI7QUFFQSxDQUFDO0FBQ0csWUFBVTtBQUNWLE9BQUs7QUFDTCxTQUFPO0FBQ1AsZ0JBQWM7QUFDZCxpQkFBZTtBQUVmLG9CQUFrQixJQUFJO0FBQ3RCLFNBQU8sSUFBSTtBQUVYLGFBQVcsSUFBSTtBQUNuQjs7O0FDcEJBLENBQUM7QUFDRyxjQUFZO0FBQ1osY0FBWTtBQUNoQjtBQUlBLENBQUM7QUFDRyxTQUFPO0FBQ1AsY0FBWTtBQUNaLFdBQVM7QUFDVCxrQkFBZ0I7QUFDaEIsZUFBYTtBQUNiLG1CQUFpQjtBQUNqQixVQUFRLElBQUksT0FBTyxJQUFJO0FBQzNCO0FBRUEsQ0FBQztBQUNHLGNBQVk7QUFDaEI7QUFFQSxDQUFDO0FBQ0csU0FBTyxJQUFJO0FBQ1gsY0FBWTtBQUNoQjtBQUlBLENBQUM7QUFDRyxTQUFPO0FBQ1AsY0FBWTtBQUNaLFdBQVM7QUFDVCxrQkFBZ0I7QUFDaEIsZUFBYTtBQUNiLG1CQUFpQjtBQUNqQixVQUFRLElBQUksT0FBTyxJQUFJO0FBQzNCO0FBRUEsQ0FBQztBQUNHLGNBQVk7QUFDaEI7QUFFQSxDQUFDO0FBQ0csU0FBTyxJQUFJO0FBQ1gsY0FBWTtBQUNoQjtBQUlBLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztBQUM1QixDQUFDLDBCQUEwQixFQUFFLENBREQ7QUFFeEIsY0FBWSxJQUFJO0FBQ2hCLFdBQVM7QUFDVCxpQkFBZTtBQUNmLFNBQU87QUFDUCxVQUFRO0FBQ1o7QUFFQSxDQVRDLHdCQVN3QixFQUFFLENBVEMsU0FTUztBQUNyQyxDQVRDLDBCQVMwQixFQUFFLENBVkQsU0FVVztBQUNuQyxTQUFPLElBQUk7QUFDWCxXQUFTO0FBQ1QsY0FB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 */ diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index a639b59..bc23ee9 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -1,20 +1,24 @@ { "main": { - "id": "9df0fcfaf2454ac1", + "id": "717cfab1decb563f", "type": "split", "children": [ { - "id": "1d0dffc2f3f40de0", + "id": "50e82f48a822186e", "type": "tabs", "children": [ { - "id": "1a6313f944764732", + "id": "b1ed4a4ebb4d4030", "type": "leaf", "state": { - "type": "empty", - "state": {}, + "type": "markdown", + "state": { + "file": "ui/task.md", + "mode": "preview", + "source": false + }, "icon": "lucide-file", - "title": "New tab" + "title": "task" } } ] @@ -23,15 +27,15 @@ "direction": "vertical" }, "left": { - "id": "8b805a4f6a06de43", + "id": "afbb714e27354943", "type": "split", "children": [ { - "id": "2b2730f2f77fc7c6", + "id": "d2fdeda9e4a39489", "type": "tabs", "children": [ { - "id": "2d4b0576dc025913", + "id": "d518a41dbf87cdbc", "type": "leaf", "state": { "type": "file-explorer", @@ -43,12 +47,12 @@ } }, { - "id": "779752de4d2be17e", + "id": "6a42083d5be0f747", "type": "leaf", "state": { "type": "search", "state": { - "query": "\"[[\"", + "query": "", "matchingCase": false, "explainSearch": false, "collapseAll": false, @@ -60,7 +64,7 @@ } }, { - "id": "d5e05a16c7534779", + "id": "62f78256fe3ea76e", "type": "leaf", "state": { "type": "bookmarks", @@ -69,28 +73,27 @@ "title": "Bookmarks" } } - ], - "currentTab": 1 + ] } ], "direction": "horizontal", "width": 300 }, "right": { - "id": "962659d15f4e4220", + "id": "f4fee29e2c9f5e28", "type": "split", "children": [ { - "id": "2233784d86bfb78e", + "id": "6f64f6dabf96323f", "type": "tabs", "children": [ { - "id": "0b6939c925729d21", + "id": "a48682c9a87d8f5d", "type": "leaf", "state": { "type": "backlink", "state": { - "file": "ui/embed.md", + "file": "ui/task.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -100,25 +103,25 @@ "unlinkedCollapsed": true }, "icon": "links-coming-in", - "title": "Backlinks for embed" + "title": "Backlinks for task" } }, { - "id": "a666febb24c2f4b0", + "id": "786b29901f62a61a", "type": "leaf", "state": { "type": "outgoing-link", "state": { - "file": "ui/embed.md", + "file": "ui/task.md", "linksCollapsed": false, "unlinkedCollapsed": true }, "icon": "links-going-out", - "title": "Outgoing links from embed" + "title": "Outgoing links from task" } }, { - "id": "7d82f0fbc986bb39", + "id": "2b8a432e896c1ede", "type": "leaf", "state": { "type": "tag", @@ -131,15 +134,15 @@ } }, { - "id": "11f862ad570af489", + "id": "ef7b8d5bc3474468", "type": "leaf", "state": { "type": "outline", "state": { - "file": "ui/embed.md" + "file": "ui/task.md" }, "icon": "lucide-list", - "title": "Outline of embed" + "title": "Outline of task" } } ] @@ -159,63 +162,10 @@ "command-palette:Open command palette": false } }, - "active": "1a6313f944764732", + "active": "b1ed4a4ebb4d4030", "lastOpenFiles": [ - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/IY3cRW01Up/W9aiPQSaYjieCvbi.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/GTdKoAh4brYKqCm6bK/WLdG8WD6yKixijw.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/GTdKoAh4brYKqCm6bK/pqk8BvLuwnVTWathtcq.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/GTdKoAh4brYKqCm6bK/mUFb0yy8l6.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/GTdKoAh4brYKqCm6bK/l81W5Q6BhpC.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/GTdKoAh4brYKqCm6bK/ERLQwHvqNXypHVCGLp.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/1tdgpk1R2quLK6t/sGSonhYXpDy7s.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/1tdgpk1R2quLK6t/e0wtiGTorCkGdlnOAKq.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/IY3cRW01Up", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/GTdKoAh4brYKqCm6bK", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ/1tdgpk1R2quLK6t", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/em8O3KCoaOluU/v2IEKpcbiQ", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/fRWu4gUzusormT/G4lolr8jZdO9.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/fRWu4gUzusormT/AZtS9j94a2BsTx758p.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/1BpMuK0WMELoSCq/fVKPcVpGCYRmSUWU.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/1BpMuK0WMELoSCq/6KMknV06jMo.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/Yg3Y6xl9EJ.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/VNg8T2vaAp23AWTIUGG.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/VIKXJQ67nOlganLkJ.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/pzTKcoTVgMsuaV3Cse6x.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/NV9WjE5mdP.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/ld4xqSlQBsEDjTBE9uh.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/GWY6r0ySaD.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/GKAOjEVJCqIF.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/6bVv2HmR1UTptiVm.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb/1LnOheIxxX.md", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/fRWu4gUzusormT", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/1BpMuK0WMELoSCq", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh/19KbANQWPFzfgfDwuCb", - "data/01 - LedMwkkf19VFKTIEG/01 - 7zwZ0AudnHh02e94WYf/03 - jiMDsXEhcLMP7/00 - xwQgHTpK6Ut2qLheuR/00 - cKgPcXSa7ny9/zgh5Vkyz5Gi/NFIFwSPXQFddIkRnfNh", - "data/01 - LedMwkkf19VFKTIEG/03 - 4dB0ZdgOXvF5ptl6Oy/01 - YfW8curuTbmE/aYEPIIOli5IkoA/In22nsQ3Vr4U/00 - rr7hwOSf1KHRfgZuzD/tCTe4SUUGIBq.md", - "data/01 - LedMwkkf19VFKTIEG/03 - 4dB0ZdgOXvF5ptl6Oy/01 - YfW8curuTbmE/aYEPIIOli5IkoA/In22nsQ3Vr4U/00 - rr7hwOSf1KHRfgZuzD/SY4nhfHpLVAFasxtr.md", - "data/01 - LedMwkkf19VFKTIEG/03 - 4dB0ZdgOXvF5ptl6Oy/01 - YfW8curuTbmE/aYEPIIOli5IkoA/In22nsQ3Vr4U/00 - rr7hwOSf1KHRfgZuzD/nIulJDFyY9eZL.md", - "data/01 - LedMwkkf19VFKTIEG/03 - 4dB0ZdgOXvF5ptl6Oy/01 - YfW8curuTbmE/aYEPIIOli5IkoA/In22nsQ3Vr4U/00 - rr7hwOSf1KHRfgZuzD/j3J5PsUM0ukK3yJ2c7.md", - "data/01 - LedMwkkf19VFKTIEG/03 - 4dB0ZdgOXvF5ptl6Oy/01 - YfW8curuTbmE/aYEPIIOli5IkoA/In22nsQ3Vr4U/00 - rr7hwOSf1KHRfgZuzD", - "data/01 - LedMwkkf19VFKTIEG/03 - 4dB0ZdgOXvF5ptl6Oy/01 - YfW8curuTbmE/aYEPIIOli5IkoA/RUkMYG0wkPZyZe/odpuSH61L0GlRuBOHU", - "data/01 - LedMwkkf19VFKTIEG/03 - 4dB0ZdgOXvF5ptl6Oy/02 - ZAeAENuqSMmeZXAV/PZYHFYBuXKtV/mstdAGKj7JwEjzXAi.canvas", - "data/01 - LedMwkkf19VFKTIEG/03 - 4dB0ZdgOXvF5ptl6Oy/01 - YfW8curuTbmE/aYEPIIOli5IkoA/In22nsQ3Vr4U/k3gfoYzsnLvB.canvas", - "data/01 - LedMwkkf19VFKTIEG/02 - V9zjvtllxT/VH7q1ozBLaCOh/USgXz6Hre3gMstvlG/9jOEj9nrEicLfyqAu1Tf/ft0AvXjV2iO.svg", - "data/01 - LedMwkkf19VFKTIEG/02 - V9zjvtllxT/VH7q1ozBLaCOh/USgXz6Hre3gMstvlG/9jOEj9nrEicLfyqAu1Tf/EwJrQ4JRvjr5P944.svg", - "data/01 - LedMwkkf19VFKTIEG/02 - V9zjvtllxT/VH7q1ozBLaCOh/3LETX9KiCCKhq4.png", - "data/vC49Ykz2iIj1s/m1muXldn4XKi.canvas", - "data/bsbwJmxzPNg/VUFsRN88rmA.canvas", - "data/bsbwJmxzPNg/fgcwPX7MII.canvas", - "data/60 - 8HE16dYCCQ/vTb9H6PTA6.png", - "data/60 - 8HE16dYCCQ/uD83M3W5Wk.png", - "data/60 - 8HE16dYCCQ/SSkCU0R288.png", - "data/60 - 8HE16dYCCQ/S3oxwyYeAW.png", - "data/60 - 8HE16dYCCQ/Q59WAgSJ70.png", - "data/60 - 8HE16dYCCQ/PLyW7WiKvt.png", - "data/60 - 8HE16dYCCQ/PhFzPUo0RDMfJT.png", - "data/root/Untitled.canvas", - "data/canvases/Untitled.canvas", - "data/canvases/Untitled 1.canvas", - "data/01 - creative/03 - writing/01 - Diamond Head/long-form stories/z__consensual alpha-beta-omega au/pinboard.canvas", - "data/01 - creative/03 - writing/02 - Children of Bodom/🚬 addict 🌺/late ficmas gift for darquiel.canvas" + "ui/task.md", + "ui/buttons.md", + "ui/embed.md" ] } \ No newline at end of file diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/01 - 78NPEZYSR45IH5i0XO/01 - n4ApiByN9N/CdNEla1Dv3.md b/data/02 - JTCw7uZhwa9ihA4ehpA/01 - 78NPEZYSR45IH5i0XO/01 - n4ApiByN9N/CdNEla1Dv3.md index 698ab6b..e69de29 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/01 - 78NPEZYSR45IH5i0XO/01 - n4ApiByN9N/CdNEla1Dv3.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/01 - 78NPEZYSR45IH5i0XO/01 - n4ApiByN9N/CdNEla1Dv3.md @@ -1,80 +0,0 @@ ---- -tags: project tasklists ---- - -# KnF3X9Qaa8IPPMx🪷 - -[[Q4HpMnuIEzMGheSJJSk|mqNHe9n]] - ---- - -# FqwpD - -## 33SuU4vcNlh - -- [ ] RTK2R - - [x] O1[completedOn:: October 20, 2024] - - [ ] k - - [ ] 8 - - [ ] E -- [ ] y1 - - [ ] XS[completed:: June 30, 2024] - - [ ] d - - [ ] Cy - - [ ] e -- [ ] nY - - [x] LE[completed:: June 28, 2024] - - [ ] u - - [ ] N - - [ ] M -- [ ] j3 - - [ ] vpD -- [ ] pu - - - [ ] m - *lkhdpF6IqDXitul056xDhnWym9uHWwbP3pq3ygWV4fT* - - [ ] 4 - *8n2khTiwW2xV1dDsgCuqHETqdDy0pj08s* - - [ ] s - *XiZ6RV0lucE2p7kXVSdQIQrsLMsOXmx4H* - - [ ] E - *h3ZUwybAofWRUkaWvn0UbPvoY6Ri* - - [ ] T - *jKRJ2sB8blHYvoSsCIz65LTkZqlwntil91o* - - [ ] p - *kRcKjMblwq7kJY2Kwhv2JKEY* - - [ ] V - *IhxXuCQyExyBK2TvGPwz4ZdRL0mBZvZ* - - [ ] X - *9TYTbsfdFqL1eqyQRbpwG* -- [ ] Uq - *AFLooYy9KfJwfBza* -- [ ] yC - *3eUAXIhM34uBGfBA144WOf* -- [ ] LY - *s3dBkZDFbpCR2tuCWJolmWt4E* -- [ ] 3F - -## G0XqbyiouwqB - -- [ ] uGZWQiiIiYR - - [ ] Cv - - [ ] Eg - - [ ] HR - - [ ] Mt - - [ ] Yv - - [ ] 2v - - [ ] mk - - [ ] Ss - - [ ] Jt - - [ ] pRA -- [ ] 9gS2sk -- [ ] NyDrggztB5KI -- [ ] ee66hc -- [ ] fv62L3KSjlsPvNYdOI4eQo6UZoaF -- [ ] cMULYL -- [ ] IWg6 -- [ ] oOo4QQhXNaW -- [ ] FhwDa0 -- [ ] Sy90Tkt3PQ -- [x] DteIpZBT[completedAt:: June 28, 2024] diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/01 - 78NPEZYSR45IH5i0XO/02 - EaGKSSwdKyxJ88LquC/nBANJXkvp6mVIfD3dyk.md b/data/02 - JTCw7uZhwa9ihA4ehpA/01 - 78NPEZYSR45IH5i0XO/02 - EaGKSSwdKyxJ88LquC/nBANJXkvp6mVIfD3dyk.md index 7f5a0ce..affaede 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/01 - 78NPEZYSR45IH5i0XO/02 - EaGKSSwdKyxJ88LquC/nBANJXkvp6mVIfD3dyk.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/01 - 78NPEZYSR45IH5i0XO/02 - EaGKSSwdKyxJ88LquC/nBANJXkvp6mVIfD3dyk.md @@ -8,8 +8,8 @@ ## ZANJcAO -- [x] kEp0NSD4wNtWtr8nR4MlaBTtG5LXsecmuUH6juaJeO2UHvVi[completed:: March 13, 2024] -- [x] sElBid4zf5G80xCE67jY[completed:: March 02, 2024] +- [ ] kEp0NSD4wNtWtr8nR4MlaBTtG5LXsecmuUH6juaJeO2UHvVi [completed:: March 13, 2024] +- [x] sElBid4zf5G80xCE67jY[completed:: March 02, 2024] [field:: new value 1 !] - [x] mWMo2LrkKEWcojZ3QIq - [x] MALeSm7F - [x] WuJk[completedOn:: October 04, 2024] diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/02 - qe57cpnZnLyRNce6S/01 - nyWDNwfbtKy/lZe3sZ3eou1Ro.md b/data/02 - JTCw7uZhwa9ihA4ehpA/02 - qe57cpnZnLyRNce6S/01 - nyWDNwfbtKy/lZe3sZ3eou1Ro.md index 0c925b5..2c81827 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/02 - qe57cpnZnLyRNce6S/01 - nyWDNwfbtKy/lZe3sZ3eou1Ro.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/02 - qe57cpnZnLyRNce6S/01 - nyWDNwfbtKy/lZe3sZ3eou1Ro.md @@ -24,10 +24,10 @@ tags: project tasklists ## Q6ZCSF3a6a -- [ ] iM4eDVhmHpO[percentDone:: 37.47096920109203] [percentdone:: 37.47096920109203] - - [ ] QvXj - - [ ] IgWGP - - [ ] KgIc +- [x] iM4eDVhmHpO[percentDone:: 37.47096920109203] [percentdone:: 37.47096920109203] [completedAt:: October 30, 2024] + - [x] QvXj [field:: new value 8 ] [completedAt:: October 30, 2024] + - [x] IgWGP [completedAt:: October 30, 2024] + - [x] KgIc [completedAt:: October 30, 2024] - [ ] yG7Dk - [ ] UNL0 - [ ] M31PT diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/03 - OBqgHpM3c46H6WtkfmVm/02 - toD2agXoSYlXuHi9XY5/TpuqvZ6DodHn.md b/data/02 - JTCw7uZhwa9ihA4ehpA/03 - OBqgHpM3c46H6WtkfmVm/02 - toD2agXoSYlXuHi9XY5/TpuqvZ6DodHn.md index 4b5c397..27440cd 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/03 - OBqgHpM3c46H6WtkfmVm/02 - toD2agXoSYlXuHi9XY5/TpuqvZ6DodHn.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/03 - OBqgHpM3c46H6WtkfmVm/02 - toD2agXoSYlXuHi9XY5/TpuqvZ6DodHn.md @@ -6,7 +6,7 @@ tags: project tasklists ## pd0hQ1sl0QgoD -- [x] olX2C0keCiQLLfPmsU58bYeAQNmr6IVNjJrHVfMBsrN8[completed:: March 05, 2024] +- [ ] olX2C0keCiQLLfPmsU58bYeAQNmr6IVNjJrHVfMBsrN8[completed:: March 05, 2024] ## dWYBd diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/10 - VLvUyOamiQmY/tzYwwnYM4u.md b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/10 - VLvUyOamiQmY/tzYwwnYM4u.md index c68741d..2824a9a 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/10 - VLvUyOamiQmY/tzYwwnYM4u.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/10 - VLvUyOamiQmY/tzYwwnYM4u.md @@ -6,7 +6,7 @@ tags: project tasklists ## yBLZAdzV -- [ ] oDmx11ybkMAGMdVqm2dqtAG2JUXMaS69O[percentDone:: 30.962341822120585] +- [x] oDmx11ybkMAGMdVqm2dqtAG2JUXMaS69O[percentDone:: 30.962341822120585] [completedAt:: October 30, 2024] - [x] p5UEFflEh4PqgGmmxtstMCYgI35 ## SKV diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/10 - VLvUyOamiQmY/z3t5qhsnI3ND.md b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/10 - VLvUyOamiQmY/z3t5qhsnI3ND.md index 2d9770b..bcba5eb 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/10 - VLvUyOamiQmY/z3t5qhsnI3ND.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/10 - VLvUyOamiQmY/z3t5qhsnI3ND.md @@ -24,8 +24,8 @@ lMDwaHdWWIT0anmX3fPjVAnH4yqHJPf9CMQfVBdNPR ## 📋 -- [ ] yx1txM8M +- [x] yx1txM8M [completedAt:: October 30, 2024] - - [ ] aXemLPCS1xK4hC5zlqFQLD**CXh5huk34lyHW** + - [x] aXemLPCS1xK4hC5zlqFQLD**CXh5huk34lyHW** [completedAt:: October 30, 2024] [priority:: Important] [level:: 2] [startedOn::] - - [ ] AGIKAA69ujviASqESxvbrYp + - [x] AGIKAA69ujviASqESxvbrYp [completedAt:: October 30, 2024] diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/20 - iyUOsaHRYy1V93Z2FvAq/neMjl2N6O8kUthasm.md b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/20 - iyUOsaHRYy1V93Z2FvAq/neMjl2N6O8kUthasm.md index d0d675b..a04ff4d 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/20 - iyUOsaHRYy1V93Z2FvAq/neMjl2N6O8kUthasm.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/20 - iyUOsaHRYy1V93Z2FvAq/neMjl2N6O8kUthasm.md @@ -6,9 +6,9 @@ tags: project tasklists ## tEZtGQQa -- [ ] o2qm7Ns - - [ ] AR4fugV8G9DLrgr - - [ ] yfjlO +- [x] o2qm7Ns [completedAt:: October 30, 2024] + - [x] AR4fugV8G9DLrgr [completedAt:: October 30, 2024] + - [x] yfjlO [completedAt:: October 30, 2024] - [ ] Rc5Y - [ ] osB9QetX0jp - [ ] 2Oi3rTxM diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/20 - iyUOsaHRYy1V93Z2FvAq/voXguI9HvIK5CI.md b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/20 - iyUOsaHRYy1V93Z2FvAq/voXguI9HvIK5CI.md index 1a24565..7f1c93e 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/20 - iyUOsaHRYy1V93Z2FvAq/voXguI9HvIK5CI.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/20 - iyUOsaHRYy1V93Z2FvAq/voXguI9HvIK5CI.md @@ -9,7 +9,7 @@ tags: project tasklists - [ ] UonCqCPa0bJ - [ ] xawhN - [ ] OuxK7 - - [ ] 0EK37 + - [ ] 0EK37 [field:: new value 5 !] - [ ] yzmy26wZbdTw[completedAt:: June 28, 2024] ## bsiSNPw3 diff --git a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/40 - cKOK6mavwTCsH/x0MWt1bdHPna3n4.md b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/40 - cKOK6mavwTCsH/x0MWt1bdHPna3n4.md index ec8b69b..58f0fe4 100644 --- a/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/40 - cKOK6mavwTCsH/x0MWt1bdHPna3n4.md +++ b/data/02 - JTCw7uZhwa9ihA4ehpA/10 - V82fE2JxtM/40 - cKOK6mavwTCsH/x0MWt1bdHPna3n4.md @@ -124,7 +124,7 @@ JaaFwm08zYgh ## DBw - [ ] OU6 -- [ ] 0Cj +- [x] 0Cj [completedAt:: October 30, 2024] - [ ] WCjju ## Y7c diff --git a/data/vC49Ykz2iIj1s/bxpdDHF3es5Edd1TT.md b/data/vC49Ykz2iIj1s/bxpdDHF3es5Edd1TT.md index bce5e8a..5dc9165 100644 --- a/data/vC49Ykz2iIj1s/bxpdDHF3es5Edd1TT.md +++ b/data/vC49Ykz2iIj1s/bxpdDHF3es5Edd1TT.md @@ -186,7 +186,7 @@ return ```datacorejsx return function TableThing() { - const query = dc.useQuery(`@task and $parentLine < 0 and contains($file, "projects")`) + const query = dc.useQuery(`@task and $parentLine < 0 and startswith($file, "data/02 - ")`) const props = { filterable: true, rows: query, @@ -212,7 +212,7 @@ return function TableThing() { [[]] - [x] Q7JeURK**X**pU[ratingtest:: 5] [seltest:: 3] [btfash:: true] [multitest:: 1, 3] [completed:: June 30, 2024] -- [x] paG2iURzbCZQb5rrRVFnx5sCYbOQAZl70HeqDrfnN[completed:: June 28, 2024] [btfash:: true] [seltest:: 6] +- [x] paG2iURzbCZQb5rrRVFnx5sCYbOQAZl70HeqDrfnN[completed:: June 28, 2024] [btfash:: true] [seltest:: 6] [multitest:: 1] ```datacorejsx